summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--23011-qt-sqlite3-0.2.tar.gzbin0 -> 9148 bytes
-rw-r--r--AUTHORS6
-rw-r--r--COPYING280
-rw-r--r--ChangeLog9497
-rw-r--r--ChangeLog.original316
-rw-r--r--INSTALL169
-rw-r--r--Makefile.am68
-rw-r--r--README171
-rw-r--r--README.Fileformats81
-rw-r--r--TODO4
-rw-r--r--acinclude.m412224
-rw-r--r--aclocal.m41037
-rw-r--r--config.h.in261
-rw-r--r--configure.in369
-rw-r--r--configure.in.bot57
-rw-r--r--configure.in.in111
-rw-r--r--contrib/Makefile.am1
-rw-r--r--contrib/README6
-rwxr-xr-xcontrib/csvbankingqif.py151
-rwxr-xr-xcontrib/csvpricesqif.py59
-rwxr-xr-xcontrib/csvsecurityqif.py57
-rw-r--r--contrib/functions.mysql182
-rwxr-xr-xcontrib/kmm-safe49
-rw-r--r--contrib/mysqlcrypt.sh99
-rwxr-xr-xcontrib/splitup-kde-chunk-online88
-rwxr-xr-xcontrib/viewxml.sh45
-rw-r--r--developer-doc/Makefile.am7
-rw-r--r--developer-doc/phb/Makefile.am115
-rw-r--r--developer-doc/phb/cfg-mgmt.docbook320
-rw-r--r--developer-doc/phb/coding.docbook413
-rw-r--r--developer-doc/phb/cvs-examples.docbook692
-rw-r--r--developer-doc/phb/dialogs.docbook130
-rw-r--r--developer-doc/phb/documentation.docbook101
-rw-r--r--developer-doc/phb/error-mgmt.docbook330
-rw-r--r--developer-doc/phb/fdl-licence356
-rw-r--r--developer-doc/phb/licence.docbook21
-rw-r--r--developer-doc/phb/phb.docbook196
-rw-r--r--developer-doc/phb/rel-mgmt.docbook868
-rw-r--r--developer-doc/phb/rpm-example.docbook281
-rw-r--r--developer-doc/phb/settings.docbook109
-rw-r--r--developer-doc/phb/src-examples.docbook550
-rw-r--r--developer-doc/phb/submissions.docbook99
-rw-r--r--developer-doc/phb/test-examples.docbook231
-rw-r--r--developer-doc/phb/translation.docbook248
-rw-r--r--developer-doc/phb/unit-test.docbook474
-rw-r--r--doc/CMakeLists.txt17
-rw-r--r--doc/Makefile.am6
-rw-r--r--doc/en/Makefile.am160
-rw-r--r--doc/en/account_edit.pngbin0 -> 56067 bytes
-rw-r--r--doc/en/account_options.pngbin0 -> 27483 bytes
-rw-r--r--doc/en/accountdropdown.pngbin0 -> 25384 bytes
-rw-r--r--doc/en/accounts_view.pngbin0 -> 2533 bytes
-rw-r--r--doc/en/accwiz1.pngbin0 -> 51276 bytes
-rw-r--r--doc/en/accwiz10.pngbin0 -> 56345 bytes
-rw-r--r--doc/en/accwiz2.pngbin0 -> 62234 bytes
-rw-r--r--doc/en/accwiz3.pngbin0 -> 114984 bytes
-rw-r--r--doc/en/accwiz4.pngbin0 -> 116905 bytes
-rw-r--r--doc/en/accwiz5.pngbin0 -> 106355 bytes
-rw-r--r--doc/en/accwiz6.pngbin0 -> 64148 bytes
-rw-r--r--doc/en/accwiz7.pngbin0 -> 55794 bytes
-rw-r--r--doc/en/accwiz8.1.pngbin0 -> 78613 bytes
-rw-r--r--doc/en/accwiz8.2.pngbin0 -> 68459 bytes
-rw-r--r--doc/en/accwiz8.3.pngbin0 -> 51845 bytes
-rw-r--r--doc/en/accwiz8.4.pngbin0 -> 62335 bytes
-rw-r--r--doc/en/accwiz8.5.pngbin0 -> 61664 bytes
-rw-r--r--doc/en/accwiz9.pngbin0 -> 58836 bytes
-rw-r--r--doc/en/budgets_view.pngbin0 -> 2550 bytes
-rw-r--r--doc/en/calendarview.pngbin0 -> 93440 bytes
-rw-r--r--doc/en/categories.pngbin0 -> 162931 bytes
-rw-r--r--doc/en/categories_view.pngbin0 -> 1122 bytes
-rw-r--r--doc/en/category_widget.pngbin0 -> 29309 bytes
-rw-r--r--doc/en/categoryedit.pngbin0 -> 49750 bytes
-rw-r--r--doc/en/cleared_state.pngbin0 -> 9126 bytes
-rw-r--r--doc/en/confirmenter.pngbin0 -> 39712 bytes
-rw-r--r--doc/en/credits.docbook179
-rw-r--r--doc/en/currency_newpriceentry.pngbin0 -> 14333 bytes
-rw-r--r--doc/en/currency_priceeditor.pngbin0 -> 36661 bytes
-rw-r--r--doc/en/date_widget.pngbin0 -> 21943 bytes
-rw-r--r--doc/en/default_prompt.pngbin0 -> 21839 bytes
-rw-r--r--doc/en/details-accounts.docbook727
-rw-r--r--doc/en/details-budgets.docbook406
-rw-r--r--doc/en/details-categories.docbook153
-rw-r--r--doc/en/details-currencies.docbook150
-rw-r--r--doc/en/details-database.docbook461
-rw-r--r--doc/en/details-files.docbook19
-rw-r--r--doc/en/details-forecast.docbook290
-rw-r--r--doc/en/details-formats.docbook185
-rw-r--r--doc/en/details-hbciofx.docbook6
-rw-r--r--doc/en/details-impexp.docbook1103
-rw-r--r--doc/en/details-institutions.docbook146
-rw-r--r--doc/en/details-integrity.docbook6
-rw-r--r--doc/en/details-investments.docbook623
-rw-r--r--doc/en/details-ledgers.docbook674
-rw-r--r--doc/en/details-loans.docbook230
-rw-r--r--doc/en/details-payees.docbook241
-rw-r--r--doc/en/details-reconciliation.docbook188
-rw-r--r--doc/en/details-reports.docbook456
-rw-r--r--doc/en/details-schedules.docbook460
-rw-r--r--doc/en/details-search.docbook351
-rw-r--r--doc/en/details-settings.docbook705
-rw-r--r--doc/en/details-transactions.docbook6
-rw-r--r--doc/en/details-widgets.docbook211
-rw-r--r--doc/en/enterschedule.pngbin0 -> 51452 bytes
-rw-r--r--doc/en/find-account.pngbin0 -> 29117 bytes
-rw-r--r--doc/en/find-amount.pngbin0 -> 26836 bytes
-rw-r--r--doc/en/find-category.pngbin0 -> 35273 bytes
-rw-r--r--doc/en/find-date.pngbin0 -> 26903 bytes
-rw-r--r--doc/en/find-details.pngbin0 -> 31787 bytes
-rw-r--r--doc/en/find-payee.pngbin0 -> 35273 bytes
-rw-r--r--doc/en/find-text.pngbin0 -> 26067 bytes
-rw-r--r--doc/en/finddlg.pngbin0 -> 20594 bytes
-rw-r--r--doc/en/firsttime.docbook833
-rw-r--r--doc/en/forecast_view.pngbin0 -> 2401 bytes
-rw-r--r--doc/en/gnucash-import_options.pngbin0 -> 44089 bytes
-rw-r--r--doc/en/gnucash-report.pngbin0 -> 12875 bytes
-rw-r--r--doc/en/gnucash-select_price_source.pngbin0 -> 30401 bytes
-rw-r--r--doc/en/home_view.pngbin0 -> 2082 bytes
-rw-r--r--doc/en/index.docbook232
-rw-r--r--doc/en/institution_options.pngbin0 -> 6837 bytes
-rw-r--r--doc/en/institution_view.pngbin0 -> 109513 bytes
-rw-r--r--doc/en/institutions_view.pngbin0 -> 1998 bytes
-rw-r--r--doc/en/introduction.docbook72
-rw-r--r--doc/en/investment-currencywarning.pngbin0 -> 19929 bytes
-rw-r--r--doc/en/investment-exchangerateeditor.pngbin0 -> 19788 bytes
-rw-r--r--doc/en/investment-onlineupdate.pngbin0 -> 39265 bytes
-rw-r--r--doc/en/investment-transactionform.pngbin0 -> 42921 bytes
-rw-r--r--doc/en/investments_summarytab.pngbin0 -> 96123 bytes
-rw-r--r--doc/en/investments_view.pngbin0 -> 1801 bytes
-rw-r--r--doc/en/kmt.pngbin0 -> 35031 bytes
-rw-r--r--doc/en/kmymoney2.1277
-rw-r--r--doc/en/ledger_more.pngbin0 -> 18784 bytes
-rw-r--r--doc/en/ledgers.pngbin0 -> 107260 bytes
-rw-r--r--doc/en/ledgers_view.pngbin0 -> 2822 bytes
-rw-r--r--doc/en/ledgerview-numbered.pngbin0 -> 137843 bytes
-rw-r--r--doc/en/mainwindow_numbered.pngbin0 -> 509593 bytes
-rw-r--r--doc/en/makemostof.docbook361
-rw-r--r--doc/en/new.pngbin0 -> 825 bytes
-rw-r--r--doc/en/newacct.pngbin0 -> 2630 bytes
-rw-r--r--doc/en/newfile-2.pngbin0 -> 80294 bytes
-rw-r--r--doc/en/newfile-3.pngbin0 -> 74741 bytes
-rw-r--r--doc/en/newfile-4.pngbin0 -> 100190 bytes
-rw-r--r--doc/en/newfile-5.pngbin0 -> 59176 bytes
-rw-r--r--doc/en/newfile-6.pngbin0 -> 61282 bytes
-rw-r--r--doc/en/newfile.pngbin0 -> 59270 bytes
-rw-r--r--doc/en/newinst.pngbin0 -> 15577 bytes
-rw-r--r--doc/en/newsched_numbered.pngbin0 -> 73411 bytes
-rw-r--r--doc/en/otherdoc.docbook6
-rw-r--r--doc/en/outbox_view.pngbin0 -> 2169 bytes
-rw-r--r--doc/en/payee_history.pngbin0 -> 18532 bytes
-rw-r--r--doc/en/payee_info.pngbin0 -> 19514 bytes
-rw-r--r--doc/en/payee_match.pngbin0 -> 26448 bytes
-rw-r--r--doc/en/payee_widget.pngbin0 -> 8755 bytes
-rw-r--r--doc/en/payees_view.pngbin0 -> 1571 bytes
-rw-r--r--doc/en/payeeview.pngbin0 -> 196764 bytes
-rw-r--r--doc/en/qif_report.pngbin0 -> 33106 bytes
-rw-r--r--doc/en/qifimport-export.pngbin0 -> 48945 bytes
-rw-r--r--doc/en/qifimport-qifprofiledate.pngbin0 -> 17573 bytes
-rw-r--r--doc/en/qifimport-qifprofileeditor.pngbin0 -> 44361 bytes
-rw-r--r--doc/en/qifimportverify.pngbin0 -> 64619 bytes
-rw-r--r--doc/en/qifopen.pngbin0 -> 50253 bytes
-rw-r--r--doc/en/reconcile.pngbin0 -> 1898 bytes
-rw-r--r--doc/en/reconcile1.pngbin0 -> 34257 bytes
-rw-r--r--doc/en/reconcile2.pngbin0 -> 36363 bytes
-rw-r--r--doc/en/reconcile3.pngbin0 -> 38102 bytes
-rw-r--r--doc/en/reconcile4.pngbin0 -> 170797 bytes
-rw-r--r--doc/en/reference.docbook919
-rw-r--r--doc/en/report_configuration-reporttab.pngbin0 -> 24928 bytes
-rw-r--r--doc/en/report_configuration-rowscolumns.pngbin0 -> 28448 bytes
-rw-r--r--doc/en/reports_view-all.pngbin0 -> 156176 bytes
-rw-r--r--doc/en/reports_view.pngbin0 -> 1443 bytes
-rw-r--r--doc/en/schedcaltypes.pngbin0 -> 6941 bytes
-rw-r--r--doc/en/schedmonthday.pngbin0 -> 1387 bytes
-rw-r--r--doc/en/schedpopup.pngbin0 -> 11551 bytes
-rw-r--r--doc/en/schedule_view.pngbin0 -> 1623 bytes
-rw-r--r--doc/en/scheduleview.pngbin0 -> 108194 bytes
-rw-r--r--doc/en/select_currency.pngbin0 -> 39536 bytes
-rw-r--r--doc/en/select_database.pngbin0 -> 24368 bytes
-rw-r--r--doc/en/split_transaction.pngbin0 -> 21895 bytes
-rw-r--r--doc/en/tipofday.pngbin0 -> 27995 bytes
-rw-r--r--doc/en/transaction_find.pngbin0 -> 2838 bytes
-rw-r--r--doc/en/transactionform-off.pngbin0 -> 13470 bytes
-rw-r--r--doc/en/transactionform.pngbin0 -> 19438 bytes
-rw-r--r--doc/en/translist.pngbin0 -> 26612 bytes
-rw-r--r--doc/en/value_widget.pngbin0 -> 7228 bytes
-rw-r--r--doc/en/views-accounts.docbook6
-rw-r--r--doc/en/views-categories.docbook6
-rw-r--r--doc/en/views-home.docbook6
-rw-r--r--doc/en/views-institutions.docbook5
-rw-r--r--doc/en/views-investments.docbook5
-rw-r--r--doc/en/views-ledgers.docbook6
-rw-r--r--doc/en/views-outbox.docbook7
-rw-r--r--doc/en/views-payees.docbook6
-rw-r--r--doc/en/views-reports.docbook5
-rw-r--r--doc/en/views-schedules.docbook105
-rw-r--r--doc/en/whatsnew.docbook73
-rw-r--r--inst-apps7
-rw-r--r--kdecompat.h38
-rw-r--r--kmymoney2/Makefile.am171
-rw-r--r--kmymoney2/converter/Makefile.am24
-rw-r--r--kmymoney2/converter/convertertest.cpp211
-rw-r--r--kmymoney2/converter/convertertest.h45
-rw-r--r--kmymoney2/converter/imymoneyreader.h135
-rw-r--r--kmymoney2/converter/mymoneygncreader.cpp2463
-rw-r--r--kmymoney2/converter/mymoneygncreader.h904
-rw-r--r--kmymoney2/converter/mymoneyqifprofile.cpp1013
-rw-r--r--kmymoney2/converter/mymoneyqifprofile.h144
-rw-r--r--kmymoney2/converter/mymoneyqifreader.cpp2336
-rw-r--r--kmymoney2/converter/mymoneyqifreader.h394
-rw-r--r--kmymoney2/converter/mymoneyqifwriter.cpp254
-rw-r--r--kmymoney2/converter/mymoneyqifwriter.h138
-rw-r--r--kmymoney2/converter/mymoneystatementreader.cpp1354
-rw-r--r--kmymoney2/converter/mymoneystatementreader.h151
-rw-r--r--kmymoney2/converter/mymoneytemplate.cpp420
-rw-r--r--kmymoney2/converter/mymoneytemplate.h94
-rw-r--r--kmymoney2/converter/webpricequote.cpp1050
-rw-r--r--kmymoney2/converter/webpricequote.h252
-rw-r--r--kmymoney2/dialogs/Makefile.am22
-rw-r--r--kmymoney2/dialogs/investactivities.cpp624
-rw-r--r--kmymoney2/dialogs/investactivities.h158
-rw-r--r--kmymoney2/dialogs/investtransactioneditor.cpp1094
-rw-r--r--kmymoney2/dialogs/investtransactioneditor.h173
-rw-r--r--kmymoney2/dialogs/kaccountselectdlg.cpp192
-rw-r--r--kmymoney2/dialogs/kaccountselectdlg.h155
-rw-r--r--kmymoney2/dialogs/kaccountselectdlgdecl.ui215
-rw-r--r--kmymoney2/dialogs/kbackupdlg.cpp101
-rw-r--r--kmymoney2/dialogs/kbackupdlg.h44
-rw-r--r--kmymoney2/dialogs/kbackupdlgdecl.ui210
-rw-r--r--kmymoney2/dialogs/kbalancechartdlg.cpp227
-rw-r--r--kmymoney2/dialogs/kbalancechartdlg.h46
-rw-r--r--kmymoney2/dialogs/kbalancewarning.cpp67
-rw-r--r--kmymoney2/dialogs/kbalancewarning.h50
-rw-r--r--kmymoney2/dialogs/kcategoryreassigndlg.cpp106
-rw-r--r--kmymoney2/dialogs/kcategoryreassigndlg.h66
-rw-r--r--kmymoney2/dialogs/kcategoryreassigndlgdecl.ui175
-rw-r--r--kmymoney2/dialogs/kchooseimportexportdlg.cpp108
-rw-r--r--kmymoney2/dialogs/kchooseimportexportdlg.h47
-rw-r--r--kmymoney2/dialogs/kchooseimportexportdlgdecl.ui235
-rw-r--r--kmymoney2/dialogs/kconfirmmanualenterdlg.cpp202
-rw-r--r--kmymoney2/dialogs/kconfirmmanualenterdlg.h60
-rw-r--r--kmymoney2/dialogs/kconfirmmanualenterdlgdecl.ui160
-rw-r--r--kmymoney2/dialogs/kcsvprogressdlg.cpp252
-rw-r--r--kmymoney2/dialogs/kcsvprogressdlg.h68
-rw-r--r--kmymoney2/dialogs/kcsvprogressdlgdecl.ui535
-rw-r--r--kmymoney2/dialogs/kcurrencycalculator.cpp315
-rw-r--r--kmymoney2/dialogs/kcurrencycalculator.h88
-rw-r--r--kmymoney2/dialogs/kcurrencycalculatordecl.ui414
-rw-r--r--kmymoney2/dialogs/kcurrencyeditdlg.cpp291
-rw-r--r--kmymoney2/dialogs/kcurrencyeditdlg.h84
-rw-r--r--kmymoney2/dialogs/kcurrencyeditdlgdecl.ui304
-rw-r--r--kmymoney2/dialogs/keditequityentrydecl.ui306
-rw-r--r--kmymoney2/dialogs/keditequityentrydlg.cpp138
-rw-r--r--kmymoney2/dialogs/keditequityentrydlg.h69
-rw-r--r--kmymoney2/dialogs/keditloanwizard.cpp514
-rw-r--r--kmymoney2/dialogs/keditloanwizard.h89
-rw-r--r--kmymoney2/dialogs/keditscheduledlg.cpp558
-rw-r--r--kmymoney2/dialogs/keditscheduledlg.h103
-rw-r--r--kmymoney2/dialogs/keditscheduledlgdecl.ui532
-rw-r--r--kmymoney2/dialogs/kendingbalancedlg.cpp611
-rw-r--r--kmymoney2/dialogs/kendingbalancedlg.h147
-rw-r--r--kmymoney2/dialogs/kendingbalancedlgdecl.ui980
-rw-r--r--kmymoney2/dialogs/kenterscheduledlg.cpp327
-rw-r--r--kmymoney2/dialogs/kenterscheduledlg.h91
-rw-r--r--kmymoney2/dialogs/kenterscheduledlgdecl.ui330
-rw-r--r--kmymoney2/dialogs/kequitypriceupdatedlg.cpp588
-rw-r--r--kmymoney2/dialogs/kequitypriceupdatedlg.h81
-rw-r--r--kmymoney2/dialogs/kequitypriceupdatedlgdecl.ui179
-rw-r--r--kmymoney2/dialogs/kexportdlg.cpp284
-rw-r--r--kmymoney2/dialogs/kexportdlg.h180
-rw-r--r--kmymoney2/dialogs/kexportdlgdecl.ui507
-rw-r--r--kmymoney2/dialogs/kfindtransactiondlg.cpp843
-rw-r--r--kmymoney2/dialogs/kfindtransactiondlg.h203
-rw-r--r--kmymoney2/dialogs/kfindtransactiondlgdecl.ui1101
-rw-r--r--kmymoney2/dialogs/kgncimportoptionsdlg.cpp128
-rw-r--r--kmymoney2/dialogs/kgncimportoptionsdlg.h70
-rw-r--r--kmymoney2/dialogs/kgncimportoptionsdlgdecl.ui383
-rw-r--r--kmymoney2/dialogs/kgncpricesourcedlg.cpp106
-rw-r--r--kmymoney2/dialogs/kgncpricesourcedlg.h53
-rw-r--r--kmymoney2/dialogs/kgncpricesourcedlgdecl.ui248
-rw-r--r--kmymoney2/dialogs/kgpgkeyselectiondlg.cpp149
-rw-r--r--kmymoney2/dialogs/kgpgkeyselectiondlg.h66
-rw-r--r--kmymoney2/dialogs/kimportdlg.cpp228
-rw-r--r--kmymoney2/dialogs/kimportdlg.h118
-rw-r--r--kmymoney2/dialogs/kimportdlgdecl.ui246
-rw-r--r--kmymoney2/dialogs/kloadtemplatedlg.cpp55
-rw-r--r--kmymoney2/dialogs/kloadtemplatedlg.h46
-rw-r--r--kmymoney2/dialogs/kloadtemplatedlgdecl.ui106
-rw-r--r--kmymoney2/dialogs/kmergetransactionsdlg.cpp55
-rw-r--r--kmymoney2/dialogs/kmergetransactionsdlg.h52
-rw-r--r--kmymoney2/dialogs/kmymoneyfileinfodlg.cpp92
-rw-r--r--kmymoney2/dialogs/kmymoneyfileinfodlg.h44
-rw-r--r--kmymoney2/dialogs/kmymoneyfileinfodlgdecl.ui358
-rw-r--r--kmymoney2/dialogs/kmymoneypricedlg.cpp258
-rw-r--r--kmymoney2/dialogs/kmymoneypricedlg.h59
-rw-r--r--kmymoney2/dialogs/kmymoneypricedlgdecl.ui220
-rw-r--r--kmymoney2/dialogs/kmymoneysplittable.cpp999
-rw-r--r--kmymoney2/dialogs/kmymoneysplittable.h264
-rw-r--r--kmymoney2/dialogs/knewaccountdlg.cpp1209
-rw-r--r--kmymoney2/dialogs/knewaccountdlg.h143
-rw-r--r--kmymoney2/dialogs/knewaccountdlgdecl.ui1044
-rw-r--r--kmymoney2/dialogs/knewbankdlg.cpp105
-rw-r--r--kmymoney2/dialogs/knewbankdlg.h57
-rw-r--r--kmymoney2/dialogs/knewbankdlgdecl.ui268
-rw-r--r--kmymoney2/dialogs/knewbudgetdlg.cpp83
-rw-r--r--kmymoney2/dialogs/knewbudgetdlg.h59
-rw-r--r--kmymoney2/dialogs/knewbudgetdlgdecl.ui175
-rw-r--r--kmymoney2/dialogs/knewequityentrydecl.ui236
-rw-r--r--kmymoney2/dialogs/knewequityentrydlg.cpp99
-rw-r--r--kmymoney2/dialogs/knewequityentrydlg.h64
-rw-r--r--kmymoney2/dialogs/knewfiledlg.cpp138
-rw-r--r--kmymoney2/dialogs/knewfiledlg.h63
-rw-r--r--kmymoney2/dialogs/knewfiledlgdecl.ui328
-rw-r--r--kmymoney2/dialogs/knewinvestmentwizard.cpp314
-rw-r--r--kmymoney2/dialogs/knewinvestmentwizard.h94
-rw-r--r--kmymoney2/dialogs/knewinvestmentwizarddecl.ui591
-rw-r--r--kmymoney2/dialogs/knewloanwizard.cpp1088
-rw-r--r--kmymoney2/dialogs/knewloanwizard.h167
-rw-r--r--kmymoney2/dialogs/knewloanwizarddecl.ui5497
-rw-r--r--kmymoney2/dialogs/konlinequoteconfigurationdecl.ui199
-rw-r--r--kmymoney2/dialogs/konlinequoteconfigurationdlg.cpp51
-rw-r--r--kmymoney2/dialogs/konlinequoteconfigurationdlg.h49
-rw-r--r--kmymoney2/dialogs/kpayeereassigndlg.cpp81
-rw-r--r--kmymoney2/dialogs/kpayeereassigndlg.h74
-rw-r--r--kmymoney2/dialogs/kpayeereassigndlgdecl.ui186
-rw-r--r--kmymoney2/dialogs/kplugindlg.ui154
-rw-r--r--kmymoney2/dialogs/krecentfileitem.cpp62
-rw-r--r--kmymoney2/dialogs/krecentfileitem.h56
-rw-r--r--kmymoney2/dialogs/kreconciledlg.cpp463
-rw-r--r--kmymoney2/dialogs/kreconciledlg.h90
-rw-r--r--kmymoney2/dialogs/kreconciledlgdecl.ui709
-rw-r--r--kmymoney2/dialogs/kreportconfigurationfilterdlg.cpp687
-rw-r--r--kmymoney2/dialogs/kreportconfigurationfilterdlg.h78
-rw-r--r--kmymoney2/dialogs/ksecuritylisteditor.cpp220
-rw-r--r--kmymoney2/dialogs/ksecuritylisteditor.h58
-rw-r--r--kmymoney2/dialogs/ksecuritylisteditordecl.ui262
-rw-r--r--kmymoney2/dialogs/kselectdatabasedlg.cpp232
-rw-r--r--kmymoney2/dialogs/kselectdatabasedlg.h64
-rw-r--r--kmymoney2/dialogs/kselectdatabasedlgdecl.ui250
-rw-r--r--kmymoney2/dialogs/kselecttransactionsdlg.cpp178
-rw-r--r--kmymoney2/dialogs/kselecttransactionsdlg.h73
-rw-r--r--kmymoney2/dialogs/kselecttransactionsdlgdecl.ui174
-rw-r--r--kmymoney2/dialogs/ksortoptiondlg.ui129
-rw-r--r--kmymoney2/dialogs/ksortoptiondlg.ui.h53
-rw-r--r--kmymoney2/dialogs/ksplitcorrectiondlg.ui245
-rw-r--r--kmymoney2/dialogs/ksplittransactiondlg.cpp449
-rw-r--r--kmymoney2/dialogs/ksplittransactiondlg.h174
-rw-r--r--kmymoney2/dialogs/ksplittransactiondlgdecl.ui424
-rw-r--r--kmymoney2/dialogs/kstartdlg.cpp243
-rw-r--r--kmymoney2/dialogs/kstartdlg.h84
-rw-r--r--kmymoney2/dialogs/kupdatestockpricedlg.cpp119
-rw-r--r--kmymoney2/dialogs/kupdatestockpricedlg.h77
-rw-r--r--kmymoney2/dialogs/kupdatestockpricedlgdecl.ui257
-rw-r--r--kmymoney2/dialogs/mymoneyqifprofileeditor.cpp483
-rw-r--r--kmymoney2/dialogs/mymoneyqifprofileeditor.h96
-rw-r--r--kmymoney2/dialogs/mymoneyqifprofileeditordecl.ui905
-rw-r--r--kmymoney2/dialogs/settings/Makefile.am25
-rw-r--r--kmymoney2/dialogs/settings/ksettingscolors.cpp37
-rw-r--r--kmymoney2/dialogs/settings/ksettingscolors.h40
-rw-r--r--kmymoney2/dialogs/settings/ksettingscolorsdecl.ui406
-rw-r--r--kmymoney2/dialogs/settings/ksettingsfonts.cpp37
-rw-r--r--kmymoney2/dialogs/settings/ksettingsfonts.h40
-rw-r--r--kmymoney2/dialogs/settings/ksettingsfontsdecl.ui131
-rw-r--r--kmymoney2/dialogs/settings/ksettingsforecast.cpp37
-rw-r--r--kmymoney2/dialogs/settings/ksettingsforecast.h41
-rw-r--r--kmymoney2/dialogs/settings/ksettingsforecastdecl.ui268
-rw-r--r--kmymoney2/dialogs/settings/ksettingsgeneral.cpp63
-rw-r--r--kmymoney2/dialogs/settings/ksettingsgeneral.h44
-rw-r--r--kmymoney2/dialogs/settings/ksettingsgeneraldecl.ui646
-rw-r--r--kmymoney2/dialogs/settings/ksettingsgpg.cpp200
-rw-r--r--kmymoney2/dialogs/settings/ksettingsgpg.h54
-rw-r--r--kmymoney2/dialogs/settings/ksettingsgpgdecl.ui238
-rw-r--r--kmymoney2/dialogs/settings/ksettingshome.cpp173
-rw-r--r--kmymoney2/dialogs/settings/ksettingshome.h52
-rw-r--r--kmymoney2/dialogs/settings/ksettingshomedecl.ui231
-rw-r--r--kmymoney2/dialogs/settings/ksettingsonlinequotes.cpp219
-rw-r--r--kmymoney2/dialogs/settings/ksettingsonlinequotes.h59
-rw-r--r--kmymoney2/dialogs/settings/ksettingsonlinequotesdecl.ui234
-rw-r--r--kmymoney2/dialogs/settings/ksettingsplugins.cpp66
-rw-r--r--kmymoney2/dialogs/settings/ksettingsplugins.h47
-rw-r--r--kmymoney2/dialogs/settings/ksettingsregister.cpp75
-rw-r--r--kmymoney2/dialogs/settings/ksettingsregister.h45
-rw-r--r--kmymoney2/dialogs/settings/ksettingsregisterdecl.ui549
-rw-r--r--kmymoney2/dialogs/settings/ksettingsschedules.cpp37
-rw-r--r--kmymoney2/dialogs/settings/ksettingsschedules.h41
-rw-r--r--kmymoney2/dialogs/settings/ksettingsschedulesdecl.ui145
-rw-r--r--kmymoney2/dialogs/transactioneditor.cpp2156
-rw-r--r--kmymoney2/dialogs/transactioneditor.h416
-rw-r--r--kmymoney2/dialogs/transactionmatcher.cpp361
-rw-r--r--kmymoney2/dialogs/transactionmatcher.h145
-rw-r--r--kmymoney2/export.h37
-rw-r--r--kmymoney2/hi128-app-kmymoney2.pngbin0 -> 21061 bytes
-rw-r--r--kmymoney2/hi16-app-kmymoney2.pngbin0 -> 981 bytes
-rw-r--r--kmymoney2/hi32-app-kmymoney2.pngbin0 -> 2692 bytes
-rw-r--r--kmymoney2/hi48-app-kmymoney2.pngbin0 -> 5041 bytes
-rw-r--r--kmymoney2/hi64-app-kmymoney2.pngbin0 -> 7782 bytes
-rw-r--r--kmymoney2/html/Makefile.am23
-rw-r--r--kmymoney2/html/home.html59
-rw-r--r--kmymoney2/html/home_de.html58
-rw-r--r--kmymoney2/html/home_es.html58
-rw-r--r--kmymoney2/html/home_fr.html61
-rw-r--r--kmymoney2/html/home_gl.html57
-rw-r--r--kmymoney2/html/home_it.html59
-rw-r--r--kmymoney2/html/home_nl.html58
-rw-r--r--kmymoney2/html/home_pt.html57
-rw-r--r--kmymoney2/html/home_pt_BR.html58
-rw-r--r--kmymoney2/html/home_ro.html58
-rw-r--r--kmymoney2/html/home_ru.html56
-rw-r--r--kmymoney2/html/home_tr.html57
-rw-r--r--kmymoney2/html/images/Makefile.am20
-rw-r--r--kmymoney2/html/images/about_kde.pngbin0 -> 3044 bytes
-rw-r--r--kmymoney2/html/images/arrow.pngbin0 -> 434 bytes
-rw-r--r--kmymoney2/html/images/backarrow.pngbin0 -> 428 bytes
-rw-r--r--kmymoney2/html/images/background.pngbin0 -> 249479 bytes
-rw-r--r--kmymoney2/html/images/bc.pngbin0 -> 174 bytes
-rw-r--r--kmymoney2/html/images/bg-texture.pngbin0 -> 2902 bytes
-rw-r--r--kmymoney2/html/images/bl.pngbin0 -> 644 bytes
-rw-r--r--kmymoney2/html/images/bottomleft.pngbin0 -> 872 bytes
-rw-r--r--kmymoney2/html/images/bottomright.pngbin0 -> 309 bytes
-rw-r--r--kmymoney2/html/images/br.pngbin0 -> 650 bytes
-rw-r--r--kmymoney2/html/images/center.pngbin0 -> 156 bytes
-rw-r--r--kmymoney2/html/images/currencyflourish.pngbin0 -> 18477 bytes
-rw-r--r--kmymoney2/html/images/filenew.pngbin0 -> 1533 bytes
-rw-r--r--kmymoney2/html/images/kmymoneydata.pngbin0 -> 2482 bytes
-rw-r--r--kmymoney2/html/images/konqueror.pngbin0 -> 2923 bytes
-rw-r--r--kmymoney2/html/images/lc.pngbin0 -> 167 bytes
-rw-r--r--kmymoney2/html/images/manual.pngbin0 -> 1642 bytes
-rw-r--r--kmymoney2/html/images/messagebox_info.pngbin0 -> 1514 bytes
-rw-r--r--kmymoney2/html/images/original-trans_logo.pngbin0 -> 9012 bytes
-rw-r--r--kmymoney2/html/images/rc.pngbin0 -> 185 bytes
-rw-r--r--kmymoney2/html/images/rightborder.pngbin0 -> 153 bytes
-rw-r--r--kmymoney2/html/images/shadow.pngbin0 -> 7606 bytes
-rw-r--r--kmymoney2/html/images/spacer.gifbin0 -> 43 bytes
-rw-r--r--kmymoney2/html/images/spacer.pngbin0 -> 148 bytes
-rw-r--r--kmymoney2/html/images/tc.pngbin0 -> 180 bytes
-rw-r--r--kmymoney2/html/images/title-center.pngbin0 -> 186 bytes
-rw-r--r--kmymoney2/html/images/title-left.pngbin0 -> 349 bytes
-rw-r--r--kmymoney2/html/images/title-right.pngbin0 -> 345 bytes
-rw-r--r--kmymoney2/html/images/tl.pngbin0 -> 595 bytes
-rw-r--r--kmymoney2/html/images/top-shadow.pngbin0 -> 279 bytes
-rw-r--r--kmymoney2/html/images/topleft.pngbin0 -> 18188 bytes
-rw-r--r--kmymoney2/html/images/topright.pngbin0 -> 180 bytes
-rw-r--r--kmymoney2/html/images/tr.pngbin0 -> 625 bytes
-rw-r--r--kmymoney2/html/images/trans_logo.pngbin0 -> 12151 bytes
-rw-r--r--kmymoney2/html/kmymoney2.css370
-rw-r--r--kmymoney2/html/welcome.css171
-rw-r--r--kmymoney2/html/whats_new.html97
-rw-r--r--kmymoney2/html/whats_new_de.html97
-rw-r--r--kmymoney2/html/whats_new_es.html99
-rw-r--r--kmymoney2/html/whats_new_fr.html104
-rw-r--r--kmymoney2/html/whats_new_gl.html65
-rw-r--r--kmymoney2/html/whats_new_it.html97
-rw-r--r--kmymoney2/html/whats_new_nl.html63
-rw-r--r--kmymoney2/html/whats_new_pt_BR.html98
-rw-r--r--kmymoney2/html/whats_new_ro.html97
-rw-r--r--kmymoney2/html/whats_new_ru.html76
-rw-r--r--kmymoney2/html/whats_new_tr.html63
-rw-r--r--kmymoney2/icons/Makefile.am1
-rw-r--r--kmymoney2/icons/Tango/128x128/Makefile.am1
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/Makefile.am6
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/account-types_asset.pngbin0 -> 12907 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/account-types_cash.pngbin0 -> 14945 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/account-types_checking.pngbin0 -> 8624 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/account-types_closed.pngbin0 -> 466 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/account-types_credit-card.pngbin0 -> 9758 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/account-types_expense.pngbin0 -> 7271 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/account-types_income.pngbin0 -> 7570 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/account-types_investments.pngbin0 -> 4746 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/account-types_liability.pngbin0 -> 8573 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/account-types_loan.pngbin0 -> 5855 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/account-types_savings.pngbin0 -> 15137 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/account.pngbin0 -> 7053 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/account_add.pngbin0 -> 8553 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/accounts.pngbin0 -> 7053 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/budget.pngbin0 -> 9342 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/categories.pngbin0 -> 7212 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/forcast.pngbin0 -> 15629 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/institution_add.pngbin0 -> 5347 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/institutions.pngbin0 -> 3405 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/investments.pngbin0 -> 10865 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/ledger.pngbin0 -> 1945 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/onlinebanking.pngbin0 -> 8328 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/payee.pngbin0 -> 15103 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/reconcile.pngbin0 -> 11718 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/report.pngbin0 -> 7758 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/schedule.pngbin0 -> 7601 bytes
-rw-r--r--kmymoney2/icons/Tango/128x128/apps/transaction_find.pngbin0 -> 10178 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/Makefile.am1
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/Makefile.am6
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/account-types_asset.pngbin0 -> 966 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/account-types_cash.pngbin0 -> 789 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/account-types_checking.pngbin0 -> 719 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/account-types_closed.pngbin0 -> 160 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/account-types_credit-card.pngbin0 -> 673 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/account-types_expense.pngbin0 -> 673 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/account-types_income.pngbin0 -> 677 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/account-types_investments.pngbin0 -> 654 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/account-types_liability.pngbin0 -> 791 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/account-types_loan.pngbin0 -> 700 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/account-types_savings.pngbin0 -> 863 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/account.pngbin0 -> 825 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/account_add.pngbin0 -> 908 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/accounts.pngbin0 -> 825 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/backup.pngbin0 -> 868 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/bank.pngbin0 -> 825 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/budget.pngbin0 -> 813 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/categories.pngbin0 -> 716 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/close_window.pngbin0 -> 659 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/delete.pngbin0 -> 627 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/forcast.pngbin0 -> 938 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/hide_categories.pngbin0 -> 804 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/hide_reconciled.pngbin0 -> 512 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/institution_add.pngbin0 -> 741 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/institutions.pngbin0 -> 600 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/investments.pngbin0 -> 835 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/ledger.pngbin0 -> 485 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/onlinebanking.pngbin0 -> 855 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/payee.pngbin0 -> 850 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/personal_data.pngbin0 -> 883 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/reconcile.pngbin0 -> 762 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/report.pngbin0 -> 781 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/schedule.pngbin0 -> 806 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/split_transaction.pngbin0 -> 376 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/transaction_find.pngbin0 -> 740 bytes
-rw-r--r--kmymoney2/icons/Tango/16x16/actions/view_info.pngbin0 -> 816 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/Makefile.am1
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/Makefile.am6
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/account-types_asset.pngbin0 -> 1356 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/account-types_cash.pngbin0 -> 1221 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/account-types_checking.pngbin0 -> 1040 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/account-types_closed.pngbin0 -> 167 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/account-types_credit-card.pngbin0 -> 995 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/account-types_expense.pngbin0 -> 952 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/account-types_income.pngbin0 -> 963 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/account-types_investments.pngbin0 -> 915 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/account-types_liability.pngbin0 -> 1110 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/account-types_loan.pngbin0 -> 978 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/account-types_savings.pngbin0 -> 1387 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/account.pngbin0 -> 1181 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/account_add.pngbin0 -> 1331 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/accounts.pngbin0 -> 1181 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/attention.pngbin0 -> 881 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/backup.pngbin0 -> 1181 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/bank.pngbin0 -> 1181 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/budget.pngbin0 -> 1207 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/categories.pngbin0 -> 993 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/close_window.pngbin0 -> 929 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/delete.pngbin0 -> 939 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/forcast.pngbin0 -> 1385 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/hide_categories.pngbin0 -> 1138 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/hide_reconciled.pngbin0 -> 664 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/institution_add.pngbin0 -> 1284 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/institutions.pngbin0 -> 1090 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/investments.pngbin0 -> 1232 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/ledger.pngbin0 -> 802 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/onlinebanking.pngbin0 -> 1259 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/payee.pngbin0 -> 1254 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/personal_data.pngbin0 -> 1261 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/reconcile.pngbin0 -> 1148 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/report.pngbin0 -> 1176 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/schedule.pngbin0 -> 1136 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/transaction_find.pngbin0 -> 1069 bytes
-rw-r--r--kmymoney2/icons/Tango/22x22/actions/view_info.pngbin0 -> 1176 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/Makefile.am1
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/Makefile.am6
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/account-types_asset.pngbin0 -> 2245 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/account-types_cash.pngbin0 -> 2086 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/account-types_checking.pngbin0 -> 1616 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/account-types_closed.pngbin0 -> 180 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/account-types_credit-card.pngbin0 -> 1653 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/account-types_expense.pngbin0 -> 1354 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/account-types_income.pngbin0 -> 1429 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/account-types_investments.pngbin0 -> 1208 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/account-types_liability.pngbin0 -> 1676 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/account-types_loan.pngbin0 -> 1410 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/account-types_savings.pngbin0 -> 2326 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/account.pngbin0 -> 1737 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/account_add.pngbin0 -> 2028 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/accounts.pngbin0 -> 1737 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/budget.pngbin0 -> 1749 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/categories.pngbin0 -> 1472 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/forcast.pngbin0 -> 2276 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/institution_add.pngbin0 -> 1659 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/institutions.pngbin0 -> 1159 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/investments.pngbin0 -> 1871 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/ledger.pngbin0 -> 710 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/onlinebanking.pngbin0 -> 1817 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/payee.pngbin0 -> 2104 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/reconcile.pngbin0 -> 1829 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/report.pngbin0 -> 1599 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/schedule.pngbin0 -> 1680 bytes
-rw-r--r--kmymoney2/icons/Tango/32x32/apps/transaction_find.pngbin0 -> 1696 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/Makefile.am1
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/Makefile.am6
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/account-types_asset.pngbin0 -> 3816 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/account-types_cash.pngbin0 -> 3760 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/account-types_checking.pngbin0 -> 2559 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/account-types_closed.pngbin0 -> 214 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/account-types_credit-card.pngbin0 -> 2704 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/account-types_expense.pngbin0 -> 2143 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/account-types_income.pngbin0 -> 2183 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/account-types_investments.pngbin0 -> 1606 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/account-types_liability.pngbin0 -> 2803 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/account-types_loan.pngbin0 -> 1927 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/account-types_savings.pngbin0 -> 4209 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/account.pngbin0 -> 2298 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/account_add.pngbin0 -> 2967 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/accounts.pngbin0 -> 2298 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/budget.pngbin0 -> 2704 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/categories.pngbin0 -> 2405 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/forcast.pngbin0 -> 4019 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/institution_add.pngbin0 -> 1889 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/institutions.pngbin0 -> 1150 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/investments.pngbin0 -> 2983 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/ledger.pngbin0 -> 694 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/onlinebanking.pngbin0 -> 2860 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/payee.pngbin0 -> 3855 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/reconcile.pngbin0 -> 3096 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/report.pngbin0 -> 2305 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/schedule.pngbin0 -> 2592 bytes
-rw-r--r--kmymoney2/icons/Tango/48x48/apps/transaction_find.pngbin0 -> 2850 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/Makefile.am1
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/Makefile.am6
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/account-types_asset.pngbin0 -> 5518 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/account-types_cash.pngbin0 -> 5818 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/account-types_checking.pngbin0 -> 3738 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/account-types_closed.pngbin0 -> 282 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/account-types_credit-card.pngbin0 -> 4057 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/account-types_expense.pngbin0 -> 3120 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/account-types_income.pngbin0 -> 3137 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/account-types_investments.pngbin0 -> 2387 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/account-types_liability.pngbin0 -> 4038 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/account-types_loan.pngbin0 -> 2900 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/account-types_savings.pngbin0 -> 6430 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/account.pngbin0 -> 3709 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/account_add.pngbin0 -> 4403 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/accounts.pngbin0 -> 3709 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/budget.pngbin0 -> 4138 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/categories.pngbin0 -> 3358 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/forcast.pngbin0 -> 6057 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/institution_add.pngbin0 -> 3043 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/institutions.pngbin0 -> 2209 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/investments.pngbin0 -> 4513 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/ledger.pngbin0 -> 1200 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/onlinebanking.pngbin0 -> 4134 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/payee.pngbin0 -> 5829 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/reconcile.pngbin0 -> 4764 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/report.pngbin0 -> 3473 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/schedule.pngbin0 -> 3689 bytes
-rw-r--r--kmymoney2/icons/Tango/64x64/apps/transaction_find.pngbin0 -> 4199 bytes
-rw-r--r--kmymoney2/icons/Tango/Makefile.am1
-rw-r--r--kmymoney2/icons/Tango/scalable/Makefile.am6
-rw-r--r--kmymoney2/icons/Tango/scalable/account-types_asset.svgzbin0 -> 8237 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/account-types_cash.svgzbin0 -> 3999 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/account-types_checking.svgzbin0 -> 3686 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/account-types_closed.svgzbin0 -> 946 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/account-types_credit-card.svgzbin0 -> 2791 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/account-types_expense.svgzbin0 -> 2289 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/account-types_income.svgzbin0 -> 2221 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/account-types_investments.svgzbin0 -> 4324 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/account-types_liability.svgzbin0 -> 3575 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/account-types_loan.svgzbin0 -> 3044 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/account-types_savings.svgzbin0 -> 4420 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/account.svgzbin0 -> 2570 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/account_add.svgzbin0 -> 3006 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/accounts.svgzbin0 -> 2570 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/backup.svgzbin0 -> 3802 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/bank.svgzbin0 -> 2570 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/budget.svgzbin0 -> 5382 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/categories.svgzbin0 -> 5964 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/forcast.svgzbin0 -> 3617 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/hide_categories.svgzbin0 -> 6523 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/hide_reconciled.svgzbin0 -> 1335 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/institution_add.svgzbin0 -> 2710 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/institutions.svgzbin0 -> 2078 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/investments.svgzbin0 -> 4324 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/ledger.svgzbin0 -> 3113 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/onlinebanking.svgzbin0 -> 4377 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/payee.svgzbin0 -> 4041 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/personal_data.svgzbin0 -> 5714 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/reconcile.svgzbin0 -> 5152 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/report.svgzbin0 -> 4317 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/schedule.svgzbin0 -> 5223 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/transaction_find.svgzbin0 -> 5203 bytes
-rw-r--r--kmymoney2/icons/Tango/scalable/view_info.svgzbin0 -> 6909 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/Makefile.am8
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/Makefile.am17
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/account-type_asset.pngbin0 -> 948 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/account-type_expense.pngbin0 -> 820 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/account-type_income.pngbin0 -> 834 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/account-type_liability.pngbin0 -> 900 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/account_add.pngbin0 -> 478 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/account_open.pngbin0 -> 903 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/backup.pngbin0 -> 854 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/bank.pngbin0 -> 840 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/categories.pngbin0 -> 462 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/close_window.pngbin0 -> 659 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/delete.pngbin0 -> 627 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/hide_categories.pngbin0 -> 874 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/hide_reconciled.pngbin0 -> 421 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/institution_add.pngbin0 -> 885 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/ledger.pngbin0 -> 267 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/pay_edit.pngbin0 -> 300 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/personal_data.pngbin0 -> 762 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/reconcile.pngbin0 -> 589 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/split_transaction.pngbin0 -> 376 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/transaction.pngbin0 -> 151 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/transaction_export.pngbin0 -> 580 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/transaction_find.pngbin0 -> 659 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/transaction_import.pngbin0 -> 588 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/unreconciled.pngbin0 -> 279 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/update_prices.pngbin0 -> 775 bytes
-rw-r--r--kmymoney2/icons/hicolor/16x16/actions/view_info.pngbin0 -> 751 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/Makefile.am8
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/Makefile.am17
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/account-types_asset.pngbin0 -> 1280 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/account-types_closed.pngbin0 -> 409 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/account-types_expense.pngbin0 -> 1107 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/account-types_income.pngbin0 -> 1142 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/account-types_liability.pngbin0 -> 1223 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/account-types_online.pngbin0 -> 296 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/account-types_reconcile.pngbin0 -> 377 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/account_add.pngbin0 -> 695 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/account_open.pngbin0 -> 1301 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/attention.pngbin0 -> 881 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/backup.pngbin0 -> 1358 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/bank.pngbin0 -> 1362 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/categories.pngbin0 -> 650 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/cleared.pngbin0 -> 209 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/close_window.pngbin0 -> 929 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/delete.pngbin0 -> 939 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/hide_categories.pngbin0 -> 982 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/hide_reconciled.pngbin0 -> 543 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/institution_add.pngbin0 -> 1331 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/ledger.pngbin0 -> 296 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/pay_edit.pngbin0 -> 352 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/personal_data.pngbin0 -> 1166 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/reconcile.pngbin0 -> 888 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/report-bar.pngbin0 -> 1170 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/report-line.pngbin0 -> 1346 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/report-pie.pngbin0 -> 1320 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/report-solid.pngbin0 -> 1309 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/report-text.pngbin0 -> 734 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/set_as.pngbin0 -> 209 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/transaction.pngbin0 -> 160 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/transaction_export.pngbin0 -> 728 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/transaction_find.pngbin0 -> 970 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/transaction_import.pngbin0 -> 737 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/unreconciled.pngbin0 -> 324 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/update_prices.pngbin0 -> 1220 bytes
-rw-r--r--kmymoney2/icons/hicolor/22x22/actions/view_info.pngbin0 -> 1082 bytes
-rw-r--r--kmymoney2/icons/hicolor/32x32/Makefile.am8
-rw-r--r--kmymoney2/icons/hicolor/32x32/apps/Makefile.am18
-rw-r--r--kmymoney2/icons/hicolor/32x32/apps/account-types_asset.pngbin0 -> 3140 bytes
-rw-r--r--kmymoney2/icons/hicolor/32x32/apps/account-types_cash.pngbin0 -> 2231 bytes
-rw-r--r--kmymoney2/icons/hicolor/32x32/apps/account-types_checking.pngbin0 -> 2319 bytes
-rw-r--r--kmymoney2/icons/hicolor/32x32/apps/account-types_credit-card.pngbin0 -> 2773 bytes
-rw-r--r--kmymoney2/icons/hicolor/32x32/apps/account-types_investments.pngbin0 -> 2607 bytes
-rw-r--r--kmymoney2/icons/hicolor/32x32/apps/account-types_liability.pngbin0 -> 2702 bytes
-rw-r--r--kmymoney2/icons/hicolor/32x32/apps/account-types_loan.pngbin0 -> 1885 bytes
-rw-r--r--kmymoney2/icons/hicolor/32x32/apps/account-types_reconciled.pngbin0 -> 435 bytes
-rw-r--r--kmymoney2/icons/hicolor/32x32/apps/account-types_savings.pngbin0 -> 2934 bytes
-rw-r--r--kmymoney2/icons/hicolor/32x32/apps/accounts.pngbin0 -> 2003 bytes
-rw-r--r--kmymoney2/icons/hicolor/32x32/apps/budget.pngbin0 -> 1709 bytes
-rw-r--r--kmymoney2/icons/hicolor/32x32/apps/categories.pngbin0 -> 2124 bytes
-rw-r--r--kmymoney2/icons/hicolor/32x32/apps/forcast.pngbin0 -> 1912 bytes
-rw-r--r--kmymoney2/icons/hicolor/32x32/apps/home.pngbin0 -> 2539 bytes
-rw-r--r--kmymoney2/icons/hicolor/32x32/apps/institutions.pngbin0 -> 2439 bytes
-rw-r--r--kmymoney2/icons/hicolor/32x32/apps/investments.pngbin0 -> 3031 bytes
-rw-r--r--kmymoney2/icons/hicolor/32x32/apps/ledger.pngbin0 -> 1685 bytes
-rw-r--r--kmymoney2/icons/hicolor/32x32/apps/onlinebanking.pngbin0 -> 2574 bytes
-rw-r--r--kmymoney2/icons/hicolor/32x32/apps/payee.pngbin0 -> 2468 bytes
-rw-r--r--kmymoney2/icons/hicolor/32x32/apps/report.pngbin0 -> 1970 bytes
-rw-r--r--kmymoney2/icons/hicolor/32x32/apps/schedule.pngbin0 -> 2489 bytes
-rw-r--r--kmymoney2/icons/hicolor/48x48/Makefile.am8
-rw-r--r--kmymoney2/icons/hicolor/48x48/apps/Makefile.am18
-rw-r--r--kmymoney2/icons/hicolor/48x48/apps/account-types_asset.pngbin0 -> 5816 bytes
-rw-r--r--kmymoney2/icons/hicolor/48x48/apps/account-types_cash.pngbin0 -> 4122 bytes
-rw-r--r--kmymoney2/icons/hicolor/48x48/apps/account-types_checking.pngbin0 -> 4231 bytes
-rw-r--r--kmymoney2/icons/hicolor/48x48/apps/account-types_credit-card.pngbin0 -> 5229 bytes
-rw-r--r--kmymoney2/icons/hicolor/48x48/apps/account-types_investment.pngbin0 -> 4869 bytes
-rw-r--r--kmymoney2/icons/hicolor/48x48/apps/account-types_liability.pngbin0 -> 4940 bytes
-rw-r--r--kmymoney2/icons/hicolor/48x48/apps/account-types_loan.pngbin0 -> 3448 bytes
-rw-r--r--kmymoney2/icons/hicolor/48x48/apps/account-types_savings.pngbin0 -> 5475 bytes
-rw-r--r--kmymoney2/icons/hicolor/48x48/apps/accounts.pngbin0 -> 3433 bytes
-rw-r--r--kmymoney2/icons/hicolor/48x48/apps/budget.pngbin0 -> 2747 bytes
-rw-r--r--kmymoney2/icons/hicolor/48x48/apps/categories.pngbin0 -> 3788 bytes
-rw-r--r--kmymoney2/icons/hicolor/48x48/apps/forcast.pngbin0 -> 3194 bytes
-rw-r--r--kmymoney2/icons/hicolor/48x48/apps/home.pngbin0 -> 3719 bytes
-rw-r--r--kmymoney2/icons/hicolor/48x48/apps/institutions.pngbin0 -> 4475 bytes
-rw-r--r--kmymoney2/icons/hicolor/48x48/apps/investments.pngbin0 -> 5664 bytes
-rw-r--r--kmymoney2/icons/hicolor/48x48/apps/ledger.pngbin0 -> 2812 bytes
-rw-r--r--kmymoney2/icons/hicolor/48x48/apps/onlinebanking.pngbin0 -> 4666 bytes
-rw-r--r--kmymoney2/icons/hicolor/48x48/apps/payee.pngbin0 -> 4404 bytes
-rw-r--r--kmymoney2/icons/hicolor/48x48/apps/report.pngbin0 -> 3620 bytes
-rw-r--r--kmymoney2/icons/hicolor/48x48/apps/schedule.pngbin0 -> 4515 bytes
-rw-r--r--kmymoney2/icons/hicolor/64x64/Makefile.am8
-rw-r--r--kmymoney2/icons/hicolor/64x64/apps/Makefile.am18
-rw-r--r--kmymoney2/icons/hicolor/64x64/apps/account-types_asset.pngbin0 -> 9026 bytes
-rw-r--r--kmymoney2/icons/hicolor/64x64/apps/account-types_cash.pngbin0 -> 6340 bytes
-rw-r--r--kmymoney2/icons/hicolor/64x64/apps/account-types_checking.pngbin0 -> 6606 bytes
-rw-r--r--kmymoney2/icons/hicolor/64x64/apps/account-types_credit-card.pngbin0 -> 8253 bytes
-rw-r--r--kmymoney2/icons/hicolor/64x64/apps/account-types_investments.pngbin0 -> 7318 bytes
-rw-r--r--kmymoney2/icons/hicolor/64x64/apps/account-types_liability.pngbin0 -> 7611 bytes
-rw-r--r--kmymoney2/icons/hicolor/64x64/apps/account-types_loan.pngbin0 -> 4998 bytes
-rw-r--r--kmymoney2/icons/hicolor/64x64/apps/account-types_savings.pngbin0 -> 8608 bytes
-rw-r--r--kmymoney2/icons/hicolor/64x64/apps/accounts.pngbin0 -> 5036 bytes
-rw-r--r--kmymoney2/icons/hicolor/64x64/apps/budget.pngbin0 -> 4105 bytes
-rw-r--r--kmymoney2/icons/hicolor/64x64/apps/categories.pngbin0 -> 5832 bytes
-rw-r--r--kmymoney2/icons/hicolor/64x64/apps/forcast.pngbin0 -> 4723 bytes
-rw-r--r--kmymoney2/icons/hicolor/64x64/apps/home.pngbin0 -> 5212 bytes
-rw-r--r--kmymoney2/icons/hicolor/64x64/apps/institutions.pngbin0 -> 6703 bytes
-rw-r--r--kmymoney2/icons/hicolor/64x64/apps/investments.pngbin0 -> 8841 bytes
-rw-r--r--kmymoney2/icons/hicolor/64x64/apps/ledger.pngbin0 -> 3825 bytes
-rw-r--r--kmymoney2/icons/hicolor/64x64/apps/onlinebanking.pngbin0 -> 7126 bytes
-rw-r--r--kmymoney2/icons/hicolor/64x64/apps/payee.pngbin0 -> 6733 bytes
-rw-r--r--kmymoney2/icons/hicolor/64x64/apps/report.pngbin0 -> 5372 bytes
-rw-r--r--kmymoney2/icons/hicolor/64x64/apps/schedule.pngbin0 -> 6748 bytes
-rw-r--r--kmymoney2/icons/hicolor/Makefile.am8
-rw-r--r--kmymoney2/icons/oxygen/128x128/Makefile.am1
-rw-r--r--kmymoney2/icons/oxygen/128x128/apps/Makefile.am6
-rw-r--r--kmymoney2/icons/oxygen/128x128/apps/account-add.pngbin0 -> 23643 bytes
-rw-r--r--kmymoney2/icons/oxygen/128x128/apps/account-types_asset.pngbin0 -> 5734 bytes
-rw-r--r--kmymoney2/icons/oxygen/128x128/apps/account-types_cash.pngbin0 -> 19437 bytes
-rw-r--r--kmymoney2/icons/oxygen/128x128/apps/account-types_checking.pngbin0 -> 15248 bytes
-rw-r--r--kmymoney2/icons/oxygen/128x128/apps/account-types_closed.pngbin0 -> 7243 bytes
-rw-r--r--kmymoney2/icons/oxygen/128x128/apps/account-types_credit-card.pngbin0 -> 14397 bytes
-rw-r--r--kmymoney2/icons/oxygen/128x128/apps/account-types_investments.pngbin0 -> 9801 bytes
-rw-r--r--kmymoney2/icons/oxygen/128x128/apps/account-types_liability.pngbin0 -> 5860 bytes
-rw-r--r--kmymoney2/icons/oxygen/128x128/apps/account-types_loan.pngbin0 -> 19370 bytes
-rw-r--r--kmymoney2/icons/oxygen/128x128/apps/accounts.pngbin0 -> 19872 bytes
-rw-r--r--kmymoney2/icons/oxygen/128x128/apps/budget.pngbin0 -> 19318 bytes
-rw-r--r--kmymoney2/icons/oxygen/128x128/apps/categories.pngbin0 -> 6132 bytes
-rw-r--r--kmymoney2/icons/oxygen/128x128/apps/forcast.pngbin0 -> 20922 bytes
-rw-r--r--kmymoney2/icons/oxygen/128x128/apps/institutions.pngbin0 -> 12482 bytes
-rw-r--r--kmymoney2/icons/oxygen/128x128/apps/investments.pngbin0 -> 9801 bytes
-rw-r--r--kmymoney2/icons/oxygen/128x128/apps/ledger.pngbin0 -> 23055 bytes
-rw-r--r--kmymoney2/icons/oxygen/128x128/apps/onlinebanking.pngbin0 -> 18336 bytes
-rw-r--r--kmymoney2/icons/oxygen/128x128/apps/payee.pngbin0 -> 13851 bytes
-rw-r--r--kmymoney2/icons/oxygen/128x128/apps/reconcile.pngbin0 -> 12540 bytes
-rw-r--r--kmymoney2/icons/oxygen/128x128/apps/report.pngbin0 -> 14762 bytes
-rw-r--r--kmymoney2/icons/oxygen/128x128/apps/schedule.pngbin0 -> 5879 bytes
-rw-r--r--kmymoney2/icons/oxygen/128x128/apps/transaction_find.pngbin0 -> 26352 bytes
-rw-r--r--kmymoney2/icons/oxygen/16x16/Makefile.am1
-rw-r--r--kmymoney2/icons/oxygen/16x16/actions/Makefile.am6
-rw-r--r--kmymoney2/icons/oxygen/16x16/actions/account-types_asset.pngbin0 -> 679 bytes
-rw-r--r--kmymoney2/icons/oxygen/16x16/actions/account-types_cash.pngbin0 -> 822 bytes
-rw-r--r--kmymoney2/icons/oxygen/16x16/actions/account-types_checking.pngbin0 -> 812 bytes
-rw-r--r--kmymoney2/icons/oxygen/16x16/actions/account-types_closed.pngbin0 -> 570 bytes
-rw-r--r--kmymoney2/icons/oxygen/16x16/actions/account-types_credit-card.pngbin0 -> 772 bytes
-rw-r--r--kmymoney2/icons/oxygen/16x16/actions/account-types_expense.pngbin0 -> 699 bytes
-rw-r--r--kmymoney2/icons/oxygen/16x16/actions/account-types_income.pngbin0 -> 699 bytes
-rw-r--r--kmymoney2/icons/oxygen/16x16/actions/account-types_investments.pngbin0 -> 897 bytes
-rw-r--r--kmymoney2/icons/oxygen/16x16/actions/account-types_liability.pngbin0 -> 679 bytes
-rw-r--r--kmymoney2/icons/oxygen/16x16/actions/account-types_loan.pngbin0 -> 853 bytes
-rw-r--r--kmymoney2/icons/oxygen/16x16/actions/account-types_savings.pngbin0 -> 890 bytes
-rw-r--r--kmymoney2/icons/oxygen/16x16/actions/accounts.pngbin0 -> 918 bytes
-rw-r--r--kmymoney2/icons/oxygen/16x16/actions/budget.pngbin0 -> 960 bytes
-rw-r--r--kmymoney2/icons/oxygen/16x16/actions/forcast.pngbin0 -> 900 bytes
-rw-r--r--kmymoney2/icons/oxygen/16x16/actions/institutions.pngbin0 -> 736 bytes
-rw-r--r--kmymoney2/icons/oxygen/16x16/actions/investments.pngbin0 -> 897 bytes
-rw-r--r--kmymoney2/icons/oxygen/16x16/actions/ledger.pngbin0 -> 996 bytes
-rw-r--r--kmymoney2/icons/oxygen/16x16/actions/onlinebanking.pngbin0 -> 906 bytes
-rw-r--r--kmymoney2/icons/oxygen/16x16/actions/payee.pngbin0 -> 782 bytes
-rw-r--r--kmymoney2/icons/oxygen/16x16/actions/report.pngbin0 -> 833 bytes
-rw-r--r--kmymoney2/icons/oxygen/16x16/actions/schedule.pngbin0 -> 745 bytes
-rw-r--r--kmymoney2/icons/oxygen/22x22/Makefile.am1
-rw-r--r--kmymoney2/icons/oxygen/22x22/actions/Makefile.am6
-rw-r--r--kmymoney2/icons/oxygen/22x22/actions/account-types_cash.pngbin0 -> 1265 bytes
-rw-r--r--kmymoney2/icons/oxygen/22x22/actions/account-types_checking.pngbin0 -> 1232 bytes
-rw-r--r--kmymoney2/icons/oxygen/22x22/actions/account-types_credit-card.pngbin0 -> 1181 bytes
-rw-r--r--kmymoney2/icons/oxygen/22x22/actions/account-types_investments.pngbin0 -> 1286 bytes
-rw-r--r--kmymoney2/icons/oxygen/22x22/actions/account-types_loan.pngbin0 -> 1342 bytes
-rw-r--r--kmymoney2/icons/oxygen/22x22/actions/account-types_savings.pngbin0 -> 1345 bytes
-rw-r--r--kmymoney2/icons/oxygen/22x22/actions/accounts.pngbin0 -> 1470 bytes
-rw-r--r--kmymoney2/icons/oxygen/22x22/actions/budget.pngbin0 -> 1553 bytes
-rw-r--r--kmymoney2/icons/oxygen/22x22/actions/forcast.pngbin0 -> 1414 bytes
-rw-r--r--kmymoney2/icons/oxygen/22x22/actions/institutions.pngbin0 -> 919 bytes
-rw-r--r--kmymoney2/icons/oxygen/22x22/actions/investments.pngbin0 -> 1286 bytes
-rw-r--r--kmymoney2/icons/oxygen/22x22/actions/ledger.pngbin0 -> 1592 bytes
-rw-r--r--kmymoney2/icons/oxygen/22x22/actions/onlinebanking.pngbin0 -> 1387 bytes
-rw-r--r--kmymoney2/icons/oxygen/22x22/actions/payee.pngbin0 -> 1135 bytes
-rw-r--r--kmymoney2/icons/oxygen/22x22/actions/report.pngbin0 -> 1249 bytes
-rw-r--r--kmymoney2/icons/oxygen/22x22/actions/schedule.pngbin0 -> 1056 bytes
-rw-r--r--kmymoney2/icons/oxygen/32x32/Makefile.am1
-rw-r--r--kmymoney2/icons/oxygen/32x32/apps/Makefile.am6
-rw-r--r--kmymoney2/icons/oxygen/32x32/apps/account-types_closed.pngbin0 -> 1290 bytes
-rw-r--r--kmymoney2/icons/oxygen/32x32/apps/account-types_expense.pngbin0 -> 1514 bytes
-rw-r--r--kmymoney2/icons/oxygen/32x32/apps/account-types_income.pngbin0 -> 1598 bytes
-rw-r--r--kmymoney2/icons/oxygen/32x32/apps/account_add.pngbin0 -> 3000 bytes
-rw-r--r--kmymoney2/icons/oxygen/32x32/apps/accounts.pngbin0 -> 2434 bytes
-rw-r--r--kmymoney2/icons/oxygen/32x32/apps/budget.pngbin0 -> 2630 bytes
-rw-r--r--kmymoney2/icons/oxygen/32x32/apps/categories.pngbin0 -> 1119 bytes
-rw-r--r--kmymoney2/icons/oxygen/32x32/apps/forcast.pngbin0 -> 2435 bytes
-rw-r--r--kmymoney2/icons/oxygen/32x32/apps/institution_add.pngbin0 -> 2297 bytes
-rw-r--r--kmymoney2/icons/oxygen/32x32/apps/institutions.pngbin0 -> 2109 bytes
-rw-r--r--kmymoney2/icons/oxygen/32x32/apps/investments.pngbin0 -> 1834 bytes
-rw-r--r--kmymoney2/icons/oxygen/32x32/apps/ledger.pngbin0 -> 2874 bytes
-rw-r--r--kmymoney2/icons/oxygen/32x32/apps/onlinebanking.pngbin0 -> 2221 bytes
-rw-r--r--kmymoney2/icons/oxygen/32x32/apps/payee.pngbin0 -> 1619 bytes
-rw-r--r--kmymoney2/icons/oxygen/32x32/apps/reconcile.pngbin0 -> 1985 bytes
-rw-r--r--kmymoney2/icons/oxygen/32x32/apps/report.pngbin0 -> 1463 bytes
-rw-r--r--kmymoney2/icons/oxygen/32x32/apps/schedule.pngbin0 -> 1623 bytes
-rw-r--r--kmymoney2/icons/oxygen/32x32/apps/transaction_find.pngbin0 -> 2938 bytes
-rw-r--r--kmymoney2/icons/oxygen/48x48/Makefile.am1
-rw-r--r--kmymoney2/icons/oxygen/48x48/apps/Makefile.am6
-rw-r--r--kmymoney2/icons/oxygen/48x48/apps/account-types_closed.pngbin0 -> 2151 bytes
-rw-r--r--kmymoney2/icons/oxygen/48x48/apps/account-types_expense.pngbin0 -> 2537 bytes
-rw-r--r--kmymoney2/icons/oxygen/48x48/apps/account-types_income.pngbin0 -> 2671 bytes
-rw-r--r--kmymoney2/icons/oxygen/48x48/apps/account_add.pngbin0 -> 5747 bytes
-rw-r--r--kmymoney2/icons/oxygen/48x48/apps/accounts.pngbin0 -> 4629 bytes
-rw-r--r--kmymoney2/icons/oxygen/48x48/apps/budget.pngbin0 -> 4780 bytes
-rw-r--r--kmymoney2/icons/oxygen/48x48/apps/categories.pngbin0 -> 1903 bytes
-rw-r--r--kmymoney2/icons/oxygen/48x48/apps/forcast.pngbin0 -> 4621 bytes
-rw-r--r--kmymoney2/icons/oxygen/48x48/apps/institution_add.pngbin0 -> 4050 bytes
-rw-r--r--kmymoney2/icons/oxygen/48x48/apps/institutions.pngbin0 -> 3618 bytes
-rw-r--r--kmymoney2/icons/oxygen/48x48/apps/investments.pngbin0 -> 2797 bytes
-rw-r--r--kmymoney2/icons/oxygen/48x48/apps/ledger.pngbin0 -> 5396 bytes
-rw-r--r--kmymoney2/icons/oxygen/48x48/apps/onlinebanking.pngbin0 -> 3854 bytes
-rw-r--r--kmymoney2/icons/oxygen/48x48/apps/payee.pngbin0 -> 2846 bytes
-rw-r--r--kmymoney2/icons/oxygen/48x48/apps/reconcile.pngbin0 -> 3326 bytes
-rw-r--r--kmymoney2/icons/oxygen/48x48/apps/report.pngbin0 -> 2581 bytes
-rw-r--r--kmymoney2/icons/oxygen/48x48/apps/schedule.pngbin0 -> 2259 bytes
-rw-r--r--kmymoney2/icons/oxygen/48x48/apps/transaction_find.pngbin0 -> 5577 bytes
-rw-r--r--kmymoney2/icons/oxygen/64x64/Makefile.am1
-rw-r--r--kmymoney2/icons/oxygen/64x64/apps/Makefile.am6
-rw-r--r--kmymoney2/icons/oxygen/64x64/apps/account-add.pngbin0 -> 8687 bytes
-rw-r--r--kmymoney2/icons/oxygen/64x64/apps/account-types_closed.pngbin0 -> 3089 bytes
-rw-r--r--kmymoney2/icons/oxygen/64x64/apps/accounts.pngbin0 -> 7164 bytes
-rw-r--r--kmymoney2/icons/oxygen/64x64/apps/budget.pngbin0 -> 7170 bytes
-rw-r--r--kmymoney2/icons/oxygen/64x64/apps/categories.pngbin0 -> 2619 bytes
-rw-r--r--kmymoney2/icons/oxygen/64x64/apps/forcast.pngbin0 -> 7166 bytes
-rw-r--r--kmymoney2/icons/oxygen/64x64/apps/institutions.pngbin0 -> 5198 bytes
-rw-r--r--kmymoney2/icons/oxygen/64x64/apps/investments.pngbin0 -> 3742 bytes
-rw-r--r--kmymoney2/icons/oxygen/64x64/apps/ledger.pngbin0 -> 8247 bytes
-rw-r--r--kmymoney2/icons/oxygen/64x64/apps/onlinebanking.pngbin0 -> 5970 bytes
-rw-r--r--kmymoney2/icons/oxygen/64x64/apps/payee.pngbin0 -> 4181 bytes
-rw-r--r--kmymoney2/icons/oxygen/64x64/apps/reconcile.pngbin0 -> 4966 bytes
-rw-r--r--kmymoney2/icons/oxygen/64x64/apps/report.pngbin0 -> 4439 bytes
-rw-r--r--kmymoney2/icons/oxygen/64x64/apps/schedule.pngbin0 -> 2909 bytes
-rw-r--r--kmymoney2/icons/oxygen/64x64/apps/transaction_find.pngbin0 -> 8899 bytes
-rw-r--r--kmymoney2/icons/oxygen/Makefile.am1
-rw-r--r--kmymoney2/icons/oxygen/scalable/Makefile.am6
-rw-r--r--kmymoney2/icons/oxygen/scalable/account-add.svgzbin0 -> 19998 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/account-types_asset.svgzbin0 -> 2434 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/account-types_cash.svgzbin0 -> 20327 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/account-types_checking.svgzbin0 -> 22305 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/account-types_closed.svgzbin0 -> 1962 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/account-types_credit-card.svgzbin0 -> 17049 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/account-types_expense.svgzbin0 -> 4237 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/account-types_income.svgzbin0 -> 4014 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/account-types_investments.svgzbin0 -> 41543 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/account-types_liability.svgzbin0 -> 2242 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/account-types_loan.svgzbin0 -> 7411 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/account-types_savings.svgzbin0 -> 7522 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/accounts.svgzbin0 -> 10302 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/budget.svgzbin0 -> 64305 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/categories.svgzbin0 -> 5302 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/forcast.svgzbin0 -> 24877 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/hide_categories.svgzbin0 -> 7163 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/hide_reconciled.svgzbin0 -> 1344 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/institution_add.svgzbin0 -> 9980 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/institutions.svgzbin0 -> 7888 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/investments.svgzbin0 -> 41543 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/ledger.svgzbin0 -> 15912 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/onlinebanking.svgzbin0 -> 264427 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/payee.svgzbin0 -> 27572 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/personal_data.svgzbin0 -> 8993 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/reconcile.svgzbin0 -> 6528 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/report.svgzbin0 -> 8487 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/schedule.svgzbin0 -> 156180 bytes
-rw-r--r--kmymoney2/icons/oxygen/scalable/transaction_find.svgzbin0 -> 23822 bytes
-rw-r--r--kmymoney2/kmymoney2.cpp6209
-rw-r--r--kmymoney2/kmymoney2.desktop23
-rw-r--r--kmymoney2/kmymoney2.h1306
-rw-r--r--kmymoney2/kmymoney2.kcfg381
-rw-r--r--kmymoney2/kmymoney2ui.rc260
-rw-r--r--kmymoney2/kmymoney_wizard.pngbin0 -> 1470 bytes
-rw-r--r--kmymoney2/kmymoneyglobalsettings.cpp96
-rw-r--r--kmymoney2/kmymoneyglobalsettings.h46
-rw-r--r--kmymoney2/kmymoneysettings.kcfgc4
-rw-r--r--kmymoney2/kmymoneytest.cpp231
-rw-r--r--kmymoney2/kmymoneyutils.cpp480
-rw-r--r--kmymoney2/kmymoneyutils.h382
-rw-r--r--kmymoney2/kstartuplogo.cpp113
-rw-r--r--kmymoney2/kstartuplogo.h62
-rw-r--r--kmymoney2/lo16-app-kmymoney2.pngbin0 -> 772 bytes
-rw-r--r--kmymoney2/lo32-app-kmymoney2.pngbin0 -> 2692 bytes
-rw-r--r--kmymoney2/main.cpp315
-rw-r--r--kmymoney2/mimetype_kmy_128x128.pngbin0 -> 16882 bytes
-rw-r--r--kmymoney2/mimetype_kmy_16x16.pngbin0 -> 896 bytes
-rw-r--r--kmymoney2/mimetype_kmy_32x32.pngbin0 -> 2334 bytes
-rw-r--r--kmymoney2/mimetype_kmy_48x48.pngbin0 -> 4206 bytes
-rw-r--r--kmymoney2/mimetype_kmy_64x64.pngbin0 -> 6396 bytes
-rw-r--r--kmymoney2/misc/Makefile.am19
-rw-r--r--kmymoney2/misc/financequote.pl117
-rw-r--r--kmymoney2/mymoney/Makefile.am50
-rw-r--r--kmymoney2/mymoney/autotest.h24
-rw-r--r--kmymoney2/mymoney/mymoneyaccount.cpp744
-rw-r--r--kmymoney2/mymoney/mymoneyaccount.h692
-rw-r--r--kmymoney2/mymoney/mymoneyaccounttest.cpp589
-rw-r--r--kmymoney2/mymoney/mymoneyaccounttest.h70
-rw-r--r--kmymoney2/mymoney/mymoneybudget.cpp354
-rw-r--r--kmymoney2/mymoney/mymoneybudget.h269
-rw-r--r--kmymoney2/mymoney/mymoneycategory.cpp170
-rw-r--r--kmymoney2/mymoney/mymoneycategory.h68
-rw-r--r--kmymoney2/mymoney/mymoneyexception.cpp35
-rw-r--r--kmymoney2/mymoney/mymoneyexception.h115
-rw-r--r--kmymoney2/mymoney/mymoneyexceptiontest.cpp51
-rw-r--r--kmymoney2/mymoney/mymoneyexceptiontest.h47
-rw-r--r--kmymoney2/mymoney/mymoneyfile.cpp2332
-rw-r--r--kmymoney2/mymoney/mymoneyfile.h1470
-rw-r--r--kmymoney2/mymoney/mymoneyfiletest.cpp1550
-rw-r--r--kmymoney2/mymoney/mymoneyfiletest.h128
-rw-r--r--kmymoney2/mymoney/mymoneyfinancialcalculator.cpp348
-rw-r--r--kmymoney2/mymoney/mymoneyfinancialcalculator.h317
-rw-r--r--kmymoney2/mymoney/mymoneyfinancialcalculatortest.cpp189
-rw-r--r--kmymoney2/mymoney/mymoneyfinancialcalculatortest.h72
-rw-r--r--kmymoney2/mymoney/mymoneyforecast.cpp1340
-rw-r--r--kmymoney2/mymoney/mymoneyforecast.h408
-rw-r--r--kmymoney2/mymoney/mymoneyforecasttest.cpp977
-rw-r--r--kmymoney2/mymoney/mymoneyforecasttest.h96
-rw-r--r--kmymoney2/mymoney/mymoneyinstitution.cpp182
-rw-r--r--kmymoney2/mymoney/mymoneyinstitution.h206
-rw-r--r--kmymoney2/mymoney/mymoneyinstitutiontest.cpp296
-rw-r--r--kmymoney2/mymoney/mymoneyinstitutiontest.h61
-rw-r--r--kmymoney2/mymoney/mymoneyinvesttransaction.cpp42
-rw-r--r--kmymoney2/mymoney/mymoneyinvesttransaction.h43
-rw-r--r--kmymoney2/mymoney/mymoneykeyvaluecontainer.cpp120
-rw-r--r--kmymoney2/mymoney/mymoneykeyvaluecontainer.h139
-rw-r--r--kmymoney2/mymoney/mymoneykeyvaluecontainertest.cpp189
-rw-r--r--kmymoney2/mymoney/mymoneykeyvaluecontainertest.h61
-rw-r--r--kmymoney2/mymoney/mymoneymoney.cpp794
-rw-r--r--kmymoney2/mymoney/mymoneymoney.h612
-rw-r--r--kmymoney2/mymoney/mymoneymoneytest.cpp591
-rw-r--r--kmymoney2/mymoney/mymoneymoneytest.h99
-rw-r--r--kmymoney2/mymoney/mymoneyobject.cpp74
-rw-r--r--kmymoney2/mymoney/mymoneyobject.h129
-rw-r--r--kmymoney2/mymoney/mymoneyobjectcontainer.cpp218
-rw-r--r--kmymoney2/mymoney/mymoneyobjectcontainer.h99
-rw-r--r--kmymoney2/mymoney/mymoneyobjecttest.cpp73
-rw-r--r--kmymoney2/mymoney/mymoneyobjecttest.h50
-rw-r--r--kmymoney2/mymoney/mymoneyobserver.cpp30
-rw-r--r--kmymoney2/mymoney/mymoneyobserver.h55
-rw-r--r--kmymoney2/mymoney/mymoneyobservertest.h106
-rw-r--r--kmymoney2/mymoney/mymoneypayee.cpp220
-rw-r--r--kmymoney2/mymoney/mymoneypayee.h206
-rw-r--r--kmymoney2/mymoney/mymoneypayeetest.cpp76
-rw-r--r--kmymoney2/mymoney/mymoneypayeetest.h41
-rw-r--r--kmymoney2/mymoney/mymoneyprice.cpp113
-rw-r--r--kmymoney2/mymoney/mymoneyprice.h158
-rw-r--r--kmymoney2/mymoney/mymoneypricetest.cpp90
-rw-r--r--kmymoney2/mymoney/mymoneypricetest.h48
-rw-r--r--kmymoney2/mymoney/mymoneyreport.cpp787
-rw-r--r--kmymoney2/mymoney/mymoneyreport.h497
-rw-r--r--kmymoney2/mymoney/mymoneyscheduled.cpp1372
-rw-r--r--kmymoney2/mymoney/mymoneyscheduled.h695
-rw-r--r--kmymoney2/mymoney/mymoneyscheduletest.cpp1909
-rw-r--r--kmymoney2/mymoney/mymoneyscheduletest.h106
-rw-r--r--kmymoney2/mymoney/mymoneysecurity.cpp180
-rw-r--r--kmymoney2/mymoney/mymoneysecurity.h150
-rw-r--r--kmymoney2/mymoney/mymoneysecuritytest.cpp210
-rw-r--r--kmymoney2/mymoney/mymoneysecuritytest.h58
-rw-r--r--kmymoney2/mymoney/mymoneysplit.cpp272
-rw-r--r--kmymoney2/mymoney/mymoneysplit.h307
-rw-r--r--kmymoney2/mymoney/mymoneysplittest.cpp306
-rw-r--r--kmymoney2/mymoney/mymoneysplittest.h67
-rw-r--r--kmymoney2/mymoney/mymoneystatement.cpp299
-rw-r--r--kmymoney2/mymoney/mymoneystatement.h145
-rw-r--r--kmymoney2/mymoney/mymoneysubject.cpp58
-rw-r--r--kmymoney2/mymoney/mymoneysubject.h59
-rw-r--r--kmymoney2/mymoney/mymoneytransaction.cpp484
-rw-r--r--kmymoney2/mymoney/mymoneytransaction.h353
-rw-r--r--kmymoney2/mymoney/mymoneytransactionfilter.cpp860
-rw-r--r--kmymoney2/mymoney/mymoneytransactionfilter.h578
-rw-r--r--kmymoney2/mymoney/mymoneytransactiontest.cpp628
-rw-r--r--kmymoney2/mymoney/mymoneytransactiontest.h96
-rw-r--r--kmymoney2/mymoney/mymoneyutils.cpp339
-rw-r--r--kmymoney2/mymoney/mymoneyutils.h192
-rw-r--r--kmymoney2/mymoney/storage/Makefile.am20
-rw-r--r--kmymoney2/mymoney/storage/imymoneyserialize.cpp31
-rw-r--r--kmymoney2/mymoney/storage/imymoneyserialize.h374
-rw-r--r--kmymoney2/mymoney/storage/imymoneystorage.cpp38
-rw-r--r--kmymoney2/mymoney/storage/imymoneystorage.h886
-rw-r--r--kmymoney2/mymoney/storage/imymoneystorageformat.cpp31
-rw-r--r--kmymoney2/mymoney/storage/imymoneystorageformat.h75
-rw-r--r--kmymoney2/mymoney/storage/mymoneydatabasemgr.cpp1880
-rw-r--r--kmymoney2/mymoney/storage/mymoneydatabasemgr.h1038
-rw-r--r--kmymoney2/mymoney/storage/mymoneydatabasemgrtest.cpp1996
-rw-r--r--kmymoney2/mymoney/storage/mymoneydatabasemgrtest.h143
-rw-r--r--kmymoney2/mymoney/storage/mymoneymap.h328
-rw-r--r--kmymoney2/mymoney/storage/mymoneymaptest.cpp38
-rw-r--r--kmymoney2/mymoney/storage/mymoneymaptest.h47
-rw-r--r--kmymoney2/mymoney/storage/mymoneyseqaccessmgr.cpp1944
-rw-r--r--kmymoney2/mymoney/storage/mymoneyseqaccessmgr.h1232
-rw-r--r--kmymoney2/mymoney/storage/mymoneyseqaccessmgrtest.cpp1705
-rw-r--r--kmymoney2/mymoney/storage/mymoneyseqaccessmgrtest.h131
-rw-r--r--kmymoney2/mymoney/storage/mymoneystorageanon.cpp294
-rw-r--r--kmymoney2/mymoney/storage/mymoneystorageanon.h113
-rw-r--r--kmymoney2/mymoney/storage/mymoneystoragebin.h49
-rw-r--r--kmymoney2/mymoney/storage/mymoneystoragedump.cpp446
-rw-r--r--kmymoney2/mymoney/storage/mymoneystoragedump.h56
-rw-r--r--kmymoney2/mymoney/storage/mymoneystoragesql.cpp4511
-rw-r--r--kmymoney2/mymoney/storage/mymoneystoragesql.h807
-rw-r--r--kmymoney2/mymoney/storage/mymoneystoragexml.cpp908
-rw-r--r--kmymoney2/mymoney/storage/mymoneystoragexml.h156
-rw-r--r--kmymoney2/pics/CMakeLists.txt16
-rw-r--r--kmymoney2/pics/Makefile.am3
-rw-r--r--kmymoney2/pics/check-16.pngbin0 -> 352 bytes
-rw-r--r--kmymoney2/pics/check-20.pngbin0 -> 405 bytes
-rw-r--r--kmymoney2/pics/frozen.pngbin0 -> 851 bytes
-rw-r--r--kmymoney2/pics/kmm-frozen.pngbin0 -> 1049 bytes
-rw-r--r--kmymoney2/pics/lock-16.pngbin0 -> 345 bytes
-rw-r--r--kmymoney2/pics/paperclip-diag.pngbin0 -> 531 bytes
-rw-r--r--kmymoney2/pics/paperclip-diag16.pngbin0 -> 432 bytes
-rw-r--r--kmymoney2/pics/paperclip-vert.pngbin0 -> 336 bytes
-rw-r--r--kmymoney2/pics/reconciled-frozen.pngbin0 -> 573 bytes
-rw-r--r--kmymoney2/pics/reconciled-frozen2.pngbin0 -> 645 bytes
-rw-r--r--kmymoney2/pics/reconciled.pngbin0 -> 298 bytes
-rw-r--r--kmymoney2/pics/split-1.pngbin0 -> 376 bytes
-rw-r--r--kmymoney2/pics/split-2.pngbin0 -> 257 bytes
-rw-r--r--kmymoney2/pics/startlogo.pngbin0 -> 105509 bytes
-rw-r--r--kmymoney2/pics/titlelabel_background.pngbin0 -> 24095 bytes
-rw-r--r--kmymoney2/plugins/Makefile.am24
-rw-r--r--kmymoney2/plugins/importinterface.cpp34
-rw-r--r--kmymoney2/plugins/importinterface.h63
-rw-r--r--kmymoney2/plugins/interfaces/Makefile.am13
-rw-r--r--kmymoney2/plugins/interfaces/kmmimportinterface.cpp41
-rw-r--r--kmymoney2/plugins/interfaces/kmmimportinterface.h60
-rw-r--r--kmymoney2/plugins/interfaces/kmmstatementinterface.cpp56
-rw-r--r--kmymoney2/plugins/interfaces/kmmstatementinterface.h77
-rw-r--r--kmymoney2/plugins/interfaces/kmmviewinterface.cpp60
-rw-r--r--kmymoney2/plugins/interfaces/kmmviewinterface.h79
-rw-r--r--kmymoney2/plugins/kmymoneyimporterplugin.desktop6
-rw-r--r--kmymoney2/plugins/kmymoneyplugin.cpp91
-rw-r--r--kmymoney2/plugins/kmymoneyplugin.desktop6
-rw-r--r--kmymoney2/plugins/kmymoneyplugin.h214
-rw-r--r--kmymoney2/plugins/ofximport/Makefile.am33
-rw-r--r--kmymoney2/plugins/ofximport/dialogs/Makefile.am16
-rw-r--r--kmymoney2/plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp223
-rw-r--r--kmymoney2/plugins/ofximport/dialogs/kofxdirectconnectdlg.h86
-rw-r--r--kmymoney2/plugins/ofximport/dialogs/kofxdirectconnectdlgdecl.ui109
-rw-r--r--kmymoney2/plugins/ofximport/dialogs/konlinebankingsetupdecl.ui488
-rw-r--r--kmymoney2/plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp445
-rw-r--r--kmymoney2/plugins/ofximport/dialogs/konlinebankingsetupwizard.h106
-rw-r--r--kmymoney2/plugins/ofximport/dialogs/konlinebankingstatus.cpp112
-rw-r--r--kmymoney2/plugins/ofximport/dialogs/konlinebankingstatus.h58
-rw-r--r--kmymoney2/plugins/ofximport/dialogs/konlinebankingstatusdecl.ui483
-rw-r--r--kmymoney2/plugins/ofximport/dialogs/mymoneyofxconnector.cpp725
-rw-r--r--kmymoney2/plugins/ofximport/dialogs/mymoneyofxconnector.h128
-rw-r--r--kmymoney2/plugins/ofximport/kmm_ofximport.desktop12
-rw-r--r--kmymoney2/plugins/ofximport/kmm_ofximport.rc10
-rw-r--r--kmymoney2/plugins/ofximport/ofximporterplugin.cpp688
-rw-r--r--kmymoney2/plugins/ofximport/ofximporterplugin.h145
-rw-r--r--kmymoney2/plugins/ofximport/ofxpartner.cpp429
-rw-r--r--kmymoney2/plugins/ofximport/ofxpartner.h102
-rw-r--r--kmymoney2/plugins/pluginloader.cpp163
-rw-r--r--kmymoney2/plugins/pluginloader.h76
-rw-r--r--kmymoney2/plugins/statementinterface.cpp34
-rw-r--r--kmymoney2/plugins/statementinterface.h72
-rw-r--r--kmymoney2/plugins/viewinterface.cpp34
-rw-r--r--kmymoney2/plugins/viewinterface.h123
-rw-r--r--kmymoney2/reports/Makefile.am16
-rw-r--r--kmymoney2/reports/kreportchartview.cpp210
-rw-r--r--kmymoney2/reports/kreportchartview.h95
-rw-r--r--kmymoney2/reports/kreportsviewtest.h91
-rw-r--r--kmymoney2/reports/listtable.cpp633
-rw-r--r--kmymoney2/reports/listtable.h121
-rw-r--r--kmymoney2/reports/objectinfotable.cpp368
-rw-r--r--kmymoney2/reports/objectinfotable.h75
-rw-r--r--kmymoney2/reports/pivotgrid.cpp161
-rw-r--r--kmymoney2/reports/pivotgrid.h151
-rw-r--r--kmymoney2/reports/pivotgridtest.cpp198
-rw-r--r--kmymoney2/reports/pivotgridtest.h47
-rw-r--r--kmymoney2/reports/pivottable.cpp2604
-rw-r--r--kmymoney2/reports/pivottable.h356
-rw-r--r--kmymoney2/reports/pivottabletest.cpp1021
-rw-r--r--kmymoney2/reports/pivottabletest.h75
-rw-r--r--kmymoney2/reports/querytable.cpp1522
-rw-r--r--kmymoney2/reports/querytable.h142
-rw-r--r--kmymoney2/reports/querytabletest.cpp694
-rw-r--r--kmymoney2/reports/querytabletest.h53
-rw-r--r--kmymoney2/reports/reportaccount.cpp355
-rw-r--r--kmymoney2/reports/reportaccount.h238
-rw-r--r--kmymoney2/reports/reportdebug.h83
-rw-r--r--kmymoney2/reports/reportstestcommon.cpp494
-rw-r--r--kmymoney2/reports/reportstestcommon.h133
-rw-r--r--kmymoney2/reports/reporttable.h54
-rw-r--r--kmymoney2/templates/C/Makefile.am5
-rw-r--r--kmymoney2/templates/C/brokerage.kmt31
-rw-r--r--kmymoney2/templates/C/business.kmt103
-rw-r--r--kmymoney2/templates/C/carloan.kmt27
-rw-r--r--kmymoney2/templates/C/cdmoneymkt.kmt29
-rw-r--r--kmymoney2/templates/C/checkbook.kmt27
-rw-r--r--kmymoney2/templates/C/childcare.kmt20
-rw-r--r--kmymoney2/templates/C/common.kmt92
-rw-r--r--kmymoney2/templates/C/default_categories-template.kmt144
-rw-r--r--kmymoney2/templates/C/eduloan.kmt27
-rw-r--r--kmymoney2/templates/C/fixedassets.kmt24
-rw-r--r--kmymoney2/templates/C/full.kmt136
-rw-r--r--kmymoney2/templates/C/homeloan.kmt26
-rw-r--r--kmymoney2/templates/C/homeown.kmt26
-rw-r--r--kmymoney2/templates/C/old-default_accounts.kmt198
-rw-r--r--kmymoney2/templates/C/otherloan.kmt26
-rw-r--r--kmymoney2/templates/C/renter.kmt23
-rw-r--r--kmymoney2/templates/C/retiremt.kmt21
-rw-r--r--kmymoney2/templates/C/spouseinc.kmt29
-rw-r--r--kmymoney2/templates/C/spouseretire.kmt21
-rw-r--r--kmymoney2/templates/CMakeLists.txt11
-rw-r--r--kmymoney2/templates/Makefile.am3
-rw-r--r--kmymoney2/templates/cpp_template31
-rw-r--r--kmymoney2/templates/de_AT/Makefile.am5
-rw-r--r--kmymoney2/templates/de_AT/auto.kmt33
-rw-r--r--kmymoney2/templates/de_AT/autoloan.kmt29
-rw-r--r--kmymoney2/templates/de_AT/brokerage.kmt34
-rw-r--r--kmymoney2/templates/de_AT/business.kmt99
-rw-r--r--kmymoney2/templates/de_AT/common.kmt102
-rw-r--r--kmymoney2/templates/de_AT/houseown.kmt37
-rw-r--r--kmymoney2/templates/de_AT/investment.kmt37
-rw-r--r--kmymoney2/templates/de_AT/kids.kmt25
-rw-r--r--kmymoney2/templates/de_CH/Makefile.am5
-rw-r--r--kmymoney2/templates/de_CH/brokerage.kmt34
-rw-r--r--kmymoney2/templates/de_CH/chkmu.kmt512
-rw-r--r--kmymoney2/templates/de_CH/common.kmt97
-rw-r--r--kmymoney2/templates/de_CH/kids.kmt25
-rw-r--r--kmymoney2/templates/de_CH/otherasset.kmt22
-rw-r--r--kmymoney2/templates/de_CH/otherloan.kmt22
-rw-r--r--kmymoney2/templates/de_DE/Makefile.am5
-rw-r--r--kmymoney2/templates/de_DE/auto.kmt33
-rw-r--r--kmymoney2/templates/de_DE/autoloan.kmt29
-rw-r--r--kmymoney2/templates/de_DE/brokerage.kmt34
-rw-r--r--kmymoney2/templates/de_DE/common.kmt97
-rw-r--r--kmymoney2/templates/de_DE/default_accounts.kmt263
-rw-r--r--kmymoney2/templates/de_DE/full.kmt144
-rw-r--r--kmymoney2/templates/de_DE/houseown.kmt37
-rw-r--r--kmymoney2/templates/de_DE/investment.kmt37
-rw-r--r--kmymoney2/templates/de_DE/kids.kmt25
-rw-r--r--kmymoney2/templates/de_DE/otherasset.kmt22
-rw-r--r--kmymoney2/templates/de_DE/otherloan.kmt22
-rw-r--r--kmymoney2/templates/de_DE/skr03.kmt138
-rw-r--r--kmymoney2/templates/de_DE/skr04.kmt1196
-rw-r--r--kmymoney2/templates/de_DE/studium.kmt30
-rw-r--r--kmymoney2/templates/dk/Makefile.am5
-rw-r--r--kmymoney2/templates/dk/car.kmt28
-rw-r--r--kmymoney2/templates/dk/common.kmt87
-rw-r--r--kmymoney2/templates/dk/homeloan.kmt27
-rw-r--r--kmymoney2/templates/dk/homeown.kmt27
-rw-r--r--kmymoney2/templates/el_GR/Makefile.am5
-rw-r--r--kmymoney2/templates/el_GR/brokerage.kmt31
-rw-r--r--kmymoney2/templates/el_GR/carloan.kmt27
-rw-r--r--kmymoney2/templates/el_GR/common.kmt94
-rw-r--r--kmymoney2/templates/en_GB/Makefile.am5
-rw-r--r--kmymoney2/templates/en_GB/brokerage.kmt31
-rw-r--r--kmymoney2/templates/en_GB/business.kmt103
-rw-r--r--kmymoney2/templates/en_GB/carloan.kmt27
-rw-r--r--kmymoney2/templates/en_GB/cdmoneymkt.kmt29
-rw-r--r--kmymoney2/templates/en_GB/checkbook.kmt27
-rw-r--r--kmymoney2/templates/en_GB/childcare.kmt20
-rw-r--r--kmymoney2/templates/en_GB/common.kmt92
-rw-r--r--kmymoney2/templates/en_GB/default_accounts.kmt301
-rw-r--r--kmymoney2/templates/en_GB/eduloan.kmt27
-rw-r--r--kmymoney2/templates/en_GB/fixedassets.kmt24
-rw-r--r--kmymoney2/templates/en_GB/full.kmt136
-rw-r--r--kmymoney2/templates/en_GB/homeloan.kmt26
-rw-r--r--kmymoney2/templates/en_GB/homeown.kmt26
-rw-r--r--kmymoney2/templates/en_GB/otherloan.kmt26
-rw-r--r--kmymoney2/templates/en_GB/renter.kmt23
-rw-r--r--kmymoney2/templates/en_GB/retiremt.kmt21
-rw-r--r--kmymoney2/templates/en_GB/spouseinc.kmt29
-rw-r--r--kmymoney2/templates/en_GB/spouseretire.kmt21
-rw-r--r--kmymoney2/templates/en_GB/uk-vat.kmt90
-rw-r--r--kmymoney2/templates/en_US/0.6-default_accounts.kmt426
-rw-r--r--kmymoney2/templates/en_US/0.8-default_accounts.kmt164
-rw-r--r--kmymoney2/templates/en_US/Base-Blank.kmt11
-rw-r--r--kmymoney2/templates/en_US/Base-Detailed.kmt82
-rw-r--r--kmymoney2/templates/en_US/Base-Simple.kmt25
-rw-r--r--kmymoney2/templates/en_US/CMakeLists.txt17
-rw-r--r--kmymoney2/templates/en_US/House.kmt20
-rw-r--r--kmymoney2/templates/en_US/Makefile.am5
-rw-r--r--kmymoney2/templates/en_US/Pets.kmt17
-rw-r--r--kmymoney2/templates/en_US/Retirement.kmt20
-rw-r--r--kmymoney2/templates/en_US/ScheduleA_itemized-deductions.kmt51
-rw-r--r--kmymoney2/templates/en_US/ScheduleBandD.kmt24
-rw-r--r--kmymoney2/templates/en_US/ScheduleC_business.kmt71
-rw-r--r--kmymoney2/templates/en_US/ScheduleE_rental-property.kmt43
-rw-r--r--kmymoney2/templates/en_US/ScheduleF_farming.kmt49
-rw-r--r--kmymoney2/templates/en_US/kids.kmt26
-rw-r--r--kmymoney2/templates/es_AR/Makefile.am5
-rw-r--r--kmymoney2/templates/es_AR/brokerage.kmt31
-rw-r--r--kmymoney2/templates/es_AR/carloan.kmt27
-rw-r--r--kmymoney2/templates/es_AR/cdmoneymkt.kmt29
-rw-r--r--kmymoney2/templates/es_AR/childcare.kmt20
-rw-r--r--kmymoney2/templates/es_AR/common.kmt97
-rw-r--r--kmymoney2/templates/es_AR/currency.kmt20
-rw-r--r--kmymoney2/templates/es_AR/default_accounts.kmt120
-rw-r--r--kmymoney2/templates/es_AR/eduloan.kmt27
-rw-r--r--kmymoney2/templates/es_AR/fixedassets.kmt24
-rw-r--r--kmymoney2/templates/es_AR/homeloan.kmt27
-rw-r--r--kmymoney2/templates/es_AR/homeown.kmt26
-rw-r--r--kmymoney2/templates/es_AR/otherloan.kmt27
-rw-r--r--kmymoney2/templates/es_AR/renter.kmt23
-rw-r--r--kmymoney2/templates/es_AR/retiremt.kmt22
-rw-r--r--kmymoney2/templates/es_AR/spouseinc.kmt29
-rw-r--r--kmymoney2/templates/es_AR/spouseretire.kmt22
-rw-r--r--kmymoney2/templates/es_ES/Makefile.am5
-rw-r--r--kmymoney2/templates/es_ES/brokerage.kmt31
-rw-r--r--kmymoney2/templates/es_ES/carloan.kmt27
-rw-r--r--kmymoney2/templates/es_ES/cdmoneymkt.kmt29
-rw-r--r--kmymoney2/templates/es_ES/childcare.kmt20
-rw-r--r--kmymoney2/templates/es_ES/common.kmt94
-rw-r--r--kmymoney2/templates/es_ES/currency.kmt20
-rw-r--r--kmymoney2/templates/es_ES/default_accounts.kmt120
-rw-r--r--kmymoney2/templates/es_ES/eduloan.kmt27
-rw-r--r--kmymoney2/templates/es_ES/fixedassets.kmt24
-rw-r--r--kmymoney2/templates/es_ES/homeloan.kmt27
-rw-r--r--kmymoney2/templates/es_ES/homeown.kmt26
-rw-r--r--kmymoney2/templates/es_ES/otherloan.kmt27
-rw-r--r--kmymoney2/templates/es_ES/renter.kmt23
-rw-r--r--kmymoney2/templates/es_ES/retiremt.kmt22
-rw-r--r--kmymoney2/templates/es_ES/spouseinc.kmt29
-rw-r--r--kmymoney2/templates/es_ES/spouseretire.kmt22
-rw-r--r--kmymoney2/templates/es_MX/Makefile.am5
-rw-r--r--kmymoney2/templates/es_MX/brokerage.kmt31
-rw-r--r--kmymoney2/templates/es_MX/carloan.kmt27
-rw-r--r--kmymoney2/templates/es_MX/cdmoneymkt.kmt29
-rw-r--r--kmymoney2/templates/es_MX/childcare.kmt20
-rw-r--r--kmymoney2/templates/es_MX/common.kmt100
-rw-r--r--kmymoney2/templates/es_MX/currency.kmt20
-rw-r--r--kmymoney2/templates/es_MX/eduloan.kmt27
-rw-r--r--kmymoney2/templates/es_MX/fixedassets.kmt24
-rw-r--r--kmymoney2/templates/es_MX/homeloan.kmt27
-rw-r--r--kmymoney2/templates/es_MX/homeown.kmt26
-rw-r--r--kmymoney2/templates/es_MX/otherloan.kmt27
-rw-r--r--kmymoney2/templates/es_MX/renter.kmt23
-rw-r--r--kmymoney2/templates/es_MX/retiremt.kmt22
-rw-r--r--kmymoney2/templates/es_MX/spouseinc.kmt29
-rw-r--r--kmymoney2/templates/es_MX/spouseretire.kmt22
-rw-r--r--kmymoney2/templates/fr_CA/Makefile.am5
-rw-r--r--kmymoney2/templates/fr_CA/actifsfixes.kmt24
-rw-r--r--kmymoney2/templates/fr_CA/automobile.kmt41
-rw-r--r--kmymoney2/templates/fr_CA/basecommune.kmt83
-rw-r--r--kmymoney2/templates/fr_CA/cdmarchemon.kmt29
-rw-r--r--kmymoney2/templates/fr_CA/chequier.kmt27
-rw-r--r--kmymoney2/templates/fr_CA/conjointretraite.kmt27
-rw-r--r--kmymoney2/templates/fr_CA/conjointrev.kmt36
-rw-r--r--kmymoney2/templates/fr_CA/courtage.kmt36
-rw-r--r--kmymoney2/templates/fr_CA/etudeemprunt.kmt27
-rw-r--r--kmymoney2/templates/fr_CA/garderie.kmt20
-rw-r--r--kmymoney2/templates/fr_CA/locataire.kmt23
-rw-r--r--kmymoney2/templates/fr_CA/proprietaire.kmt39
-rw-r--r--kmymoney2/templates/fr_CA/retraite.kmt27
-rw-r--r--kmymoney2/templates/fr_CA/revenus.kmt36
-rw-r--r--kmymoney2/templates/fr_CH/Makefile.am5
-rw-r--r--kmymoney2/templates/fr_CH/brokerage.kmt31
-rw-r--r--kmymoney2/templates/fr_CH/business.kmt103
-rw-r--r--kmymoney2/templates/fr_CH/carloan.kmt27
-rw-r--r--kmymoney2/templates/fr_CH/cdmoneymkt.kmt29
-rw-r--r--kmymoney2/templates/fr_CH/childcare.kmt20
-rw-r--r--kmymoney2/templates/fr_CH/common.kmt94
-rw-r--r--kmymoney2/templates/fr_CH/currency.kmt20
-rw-r--r--kmymoney2/templates/fr_CH/eduloan.kmt27
-rw-r--r--kmymoney2/templates/fr_CH/fixedassets.kmt24
-rw-r--r--kmymoney2/templates/fr_CH/homeloan.kmt27
-rw-r--r--kmymoney2/templates/fr_CH/homeown.kmt26
-rw-r--r--kmymoney2/templates/fr_CH/otherloan.kmt27
-rw-r--r--kmymoney2/templates/fr_CH/renter.kmt23
-rw-r--r--kmymoney2/templates/fr_CH/retiremt.kmt22
-rw-r--r--kmymoney2/templates/fr_CH/spouseinc.kmt29
-rw-r--r--kmymoney2/templates/fr_CH/spouseretire.kmt22
-rw-r--r--kmymoney2/templates/fr_FR/Makefile.am5
-rw-r--r--kmymoney2/templates/fr_FR/brokerage.kmt31
-rw-r--r--kmymoney2/templates/fr_FR/business.kmt103
-rw-r--r--kmymoney2/templates/fr_FR/carloan.kmt27
-rw-r--r--kmymoney2/templates/fr_FR/cdmoneymkt.kmt29
-rw-r--r--kmymoney2/templates/fr_FR/childcare.kmt20
-rw-r--r--kmymoney2/templates/fr_FR/common.kmt94
-rw-r--r--kmymoney2/templates/fr_FR/comptes_par_default.kmt200
-rw-r--r--kmymoney2/templates/fr_FR/currency.kmt20
-rw-r--r--kmymoney2/templates/fr_FR/eduloan.kmt27
-rw-r--r--kmymoney2/templates/fr_FR/fixedassets.kmt24
-rw-r--r--kmymoney2/templates/fr_FR/homeloan.kmt27
-rw-r--r--kmymoney2/templates/fr_FR/homeown.kmt26
-rw-r--r--kmymoney2/templates/fr_FR/otherloan.kmt27
-rw-r--r--kmymoney2/templates/fr_FR/renter.kmt23
-rw-r--r--kmymoney2/templates/fr_FR/retiremt.kmt22
-rw-r--r--kmymoney2/templates/fr_FR/spouseinc.kmt29
-rw-r--r--kmymoney2/templates/fr_FR/spouseretire.kmt22
-rw-r--r--kmymoney2/templates/gl_ES/Makefile.am5
-rw-r--r--kmymoney2/templates/gl_ES/default_accounts.kmt121
-rw-r--r--kmymoney2/templates/header_template30
-rw-r--r--kmymoney2/templates/hu_HU/Makefile.am5
-rw-r--r--kmymoney2/templates/hu_HU/brokerage.kmt31
-rw-r--r--kmymoney2/templates/hu_HU/business.kmt103
-rw-r--r--kmymoney2/templates/hu_HU/carloan.kmt27
-rw-r--r--kmymoney2/templates/hu_HU/cdmoneymkt.kmt29
-rw-r--r--kmymoney2/templates/hu_HU/checkbook.kmt27
-rw-r--r--kmymoney2/templates/hu_HU/childcare.kmt20
-rw-r--r--kmymoney2/templates/hu_HU/common.kmt91
-rw-r--r--kmymoney2/templates/hu_HU/eduloan.kmt27
-rw-r--r--kmymoney2/templates/hu_HU/fixedassets.kmt24
-rw-r--r--kmymoney2/templates/hu_HU/homeloan.kmt27
-rw-r--r--kmymoney2/templates/hu_HU/homeown.kmt26
-rw-r--r--kmymoney2/templates/hu_HU/otherloan.kmt27
-rw-r--r--kmymoney2/templates/hu_HU/renter.kmt23
-rw-r--r--kmymoney2/templates/hu_HU/retiremt.kmt22
-rw-r--r--kmymoney2/templates/hu_HU/spouseinc.kmt28
-rw-r--r--kmymoney2/templates/hu_HU/spouseretire.kmt22
-rw-r--r--kmymoney2/templates/it/Makefile.am5
-rw-r--r--kmymoney2/templates/it/brokerage.kmt31
-rw-r--r--kmymoney2/templates/it/carloan.kmt27
-rw-r--r--kmymoney2/templates/it/checkbook.kmt27
-rw-r--r--kmymoney2/templates/it/childcare.kmt20
-rw-r--r--kmymoney2/templates/it/common.kmt92
-rw-r--r--kmymoney2/templates/it/fixedassets.kmt24
-rw-r--r--kmymoney2/templates/it/homeloan.kmt27
-rw-r--r--kmymoney2/templates/it/homeown.kmt26
-rw-r--r--kmymoney2/templates/it/otherloan.kmt27
-rw-r--r--kmymoney2/templates/it/renter.kmt20
-rw-r--r--kmymoney2/templates/it/retiremt.kmt22
-rw-r--r--kmymoney2/templates/it/spouseinc.kmt29
-rw-r--r--kmymoney2/templates/it/spouseretire.kmt22
-rw-r--r--kmymoney2/templates/jp/Makefile.am5
-rw-r--r--kmymoney2/templates/jp/brokerage.kmt31
-rw-r--r--kmymoney2/templates/jp/business.kmt103
-rw-r--r--kmymoney2/templates/jp/carloan.kmt27
-rw-r--r--kmymoney2/templates/jp/cdmoneymkt.kmt29
-rw-r--r--kmymoney2/templates/jp/checkbook.kmt27
-rw-r--r--kmymoney2/templates/jp/childcare.kmt20
-rw-r--r--kmymoney2/templates/jp/common.kmt92
-rw-r--r--kmymoney2/templates/jp/eduloan.kmt27
-rw-r--r--kmymoney2/templates/jp/fixedassets.kmt24
-rw-r--r--kmymoney2/templates/jp/homeloan.kmt26
-rw-r--r--kmymoney2/templates/jp/homeown.kmt26
-rw-r--r--kmymoney2/templates/jp/otherloan.kmt26
-rw-r--r--kmymoney2/templates/jp/renter.kmt23
-rw-r--r--kmymoney2/templates/jp/retiremt.kmt21
-rw-r--r--kmymoney2/templates/jp/spouseinc.kmt29
-rw-r--r--kmymoney2/templates/jp/spouseretire.kmt21
-rw-r--r--kmymoney2/templates/nl_NL/Makefile.am5
-rw-r--r--kmymoney2/templates/nl_NL/default_accounts.kmt209
-rw-r--r--kmymoney2/templates/pt_BR/Makefile.am5
-rw-r--r--kmymoney2/templates/pt_BR/brokerage.kmt31
-rw-r--r--kmymoney2/templates/pt_BR/carloan.kmt27
-rw-r--r--kmymoney2/templates/pt_BR/cdmoneymkt.kmt29
-rw-r--r--kmymoney2/templates/pt_BR/childcare.kmt20
-rw-r--r--kmymoney2/templates/pt_BR/common.kmt92
-rw-r--r--kmymoney2/templates/pt_BR/currency.kmt20
-rw-r--r--kmymoney2/templates/pt_BR/default_accounts.kmt183
-rw-r--r--kmymoney2/templates/pt_BR/eduloan.kmt27
-rw-r--r--kmymoney2/templates/pt_BR/fixedassets.kmt24
-rw-r--r--kmymoney2/templates/pt_BR/homeloan.kmt27
-rw-r--r--kmymoney2/templates/pt_BR/homeown.kmt24
-rw-r--r--kmymoney2/templates/pt_BR/otherloan.kmt27
-rw-r--r--kmymoney2/templates/pt_BR/renter.kmt21
-rw-r--r--kmymoney2/templates/pt_BR/retiremt.kmt22
-rw-r--r--kmymoney2/templates/pt_BR/spouseinc.kmt25
-rw-r--r--kmymoney2/templates/pt_BR/spouseretire.kmt22
-rw-r--r--kmymoney2/templates/pt_PT/Makefile.am5
-rw-r--r--kmymoney2/templates/pt_PT/brokerage.kmt31
-rw-r--r--kmymoney2/templates/pt_PT/carloan.kmt27
-rw-r--r--kmymoney2/templates/pt_PT/cdmoneymkt.kmt29
-rw-r--r--kmymoney2/templates/pt_PT/childcare.kmt20
-rw-r--r--kmymoney2/templates/pt_PT/common.kmt93
-rw-r--r--kmymoney2/templates/pt_PT/eduloan.kmt27
-rw-r--r--kmymoney2/templates/pt_PT/fixedassets.kmt24
-rw-r--r--kmymoney2/templates/pt_PT/homeloan.kmt27
-rw-r--r--kmymoney2/templates/pt_PT/homeown.kmt26
-rw-r--r--kmymoney2/templates/pt_PT/otherloan.kmt27
-rw-r--r--kmymoney2/templates/pt_PT/renter.kmt23
-rw-r--r--kmymoney2/templates/pt_PT/retiremt.kmt22
-rw-r--r--kmymoney2/templates/pt_PT/spouseinc.kmt29
-rw-r--r--kmymoney2/templates/pt_PT/spouseretire.kmt22
-rw-r--r--kmymoney2/templates/ro_RO/Makefile.am5
-rw-r--r--kmymoney2/templates/ro_RO/carloan.kmt27
-rw-r--r--kmymoney2/templates/ro_RO/common.kmt86
-rw-r--r--kmymoney2/templates/ro_RO/default_categories-template.kmt143
-rw-r--r--kmymoney2/templates/ro_RO/homeloan.kmt26
-rw-r--r--kmymoney2/templates/ru_RU/Makefile.am5
-rw-r--r--kmymoney2/templates/ru_RU/default_accounts.kmt79
-rw-r--r--kmymoney2/templates/sk/Makefile.am5
-rw-r--r--kmymoney2/templates/sk/brokerage.kmt31
-rw-r--r--kmymoney2/templates/sk/carloan.kmt27
-rw-r--r--kmymoney2/templates/sk/cdmoneymkt.kmt29
-rw-r--r--kmymoney2/templates/sk/childcare.kmt20
-rw-r--r--kmymoney2/templates/sk/common.kmt94
-rw-r--r--kmymoney2/templates/sk/currency.kmt20
-rw-r--r--kmymoney2/templates/sk/eduloan.kmt27
-rw-r--r--kmymoney2/templates/sk/fixedassets.kmt24
-rw-r--r--kmymoney2/templates/sk/homeloan.kmt27
-rw-r--r--kmymoney2/templates/sk/homeown.kmt26
-rw-r--r--kmymoney2/templates/sk/otherloan.kmt27
-rw-r--r--kmymoney2/templates/sk/renter.kmt23
-rw-r--r--kmymoney2/templates/sk/retiremt.kmt22
-rw-r--r--kmymoney2/templates/sk/spouseinc.kmt29
-rw-r--r--kmymoney2/templates/sk/spouseretire.kmt22
-rw-r--r--kmymoney2/templates/tr_TR/Makefile.am5
-rw-r--r--kmymoney2/templates/tr_TR/TEKDUZ.kmt227
-rw-r--r--kmymoney2/templates/tr_TR/brokerage.kmt31
-rw-r--r--kmymoney2/templates/tr_TR/carloan.kmt27
-rw-r--r--kmymoney2/templates/tr_TR/cdmoneymkt.kmt29
-rw-r--r--kmymoney2/templates/tr_TR/checkbook.kmt27
-rw-r--r--kmymoney2/templates/tr_TR/common.kmt92
-rw-r--r--kmymoney2/templates/tr_TR/fixedassets.kmt24
-rw-r--r--kmymoney2/templates/tr_TR/homeloan.kmt27
-rw-r--r--kmymoney2/templates/zh_CN/Makefile.am5
-rw-r--r--kmymoney2/templates/zh_CN/brokerage.kmt31
-rw-r--r--kmymoney2/templates/zh_CN/business.kmt103
-rw-r--r--kmymoney2/templates/zh_CN/carloan.kmt27
-rw-r--r--kmymoney2/templates/zh_CN/cdmoneymkt.kmt29
-rw-r--r--kmymoney2/templates/zh_CN/checkbook.kmt27
-rw-r--r--kmymoney2/templates/zh_CN/childcare.kmt20
-rw-r--r--kmymoney2/templates/zh_CN/common.kmt92
-rw-r--r--kmymoney2/templates/zh_CN/default_accounts.kmt162
-rw-r--r--kmymoney2/templates/zh_CN/eduloan.kmt27
-rw-r--r--kmymoney2/templates/zh_CN/fixedassets.kmt24
-rw-r--r--kmymoney2/templates/zh_CN/full.kmt136
-rw-r--r--kmymoney2/templates/zh_CN/homeloan.kmt26
-rw-r--r--kmymoney2/templates/zh_CN/homeown.kmt26
-rw-r--r--kmymoney2/templates/zh_CN/otherloan.kmt26
-rw-r--r--kmymoney2/templates/zh_CN/renter.kmt23
-rw-r--r--kmymoney2/templates/zh_CN/retiremt.kmt21
-rw-r--r--kmymoney2/templates/zh_CN/spouseinc.kmt29
-rw-r--r--kmymoney2/templates/zh_CN/spouseretire.kmt21
-rw-r--r--kmymoney2/templates/zh_HK/Makefile.am5
-rw-r--r--kmymoney2/templates/zh_HK/business.kmt103
-rw-r--r--kmymoney2/templates/zh_TW/Makefile.am5
-rw-r--r--kmymoney2/templates/zh_TW/business.kmt103
-rw-r--r--kmymoney2/tips131
-rw-r--r--kmymoney2/views/Makefile.am25
-rw-r--r--kmymoney2/views/kaccountsview.cpp625
-rw-r--r--kmymoney2/views/kaccountsview.h209
-rw-r--r--kmymoney2/views/kaccountsviewdecl.ui204
-rw-r--r--kmymoney2/views/kbudgetview.cpp767
-rw-r--r--kmymoney2/views/kbudgetview.h221
-rw-r--r--kmymoney2/views/kbudgetviewdecl.ui348
-rw-r--r--kmymoney2/views/kcategoriesview.cpp313
-rw-r--r--kmymoney2/views/kcategoriesview.h147
-rw-r--r--kmymoney2/views/kcategoriesviewdecl.ui153
-rw-r--r--kmymoney2/views/kforecastview.cpp673
-rw-r--r--kmymoney2/views/kforecastview.h138
-rw-r--r--kmymoney2/views/kforecastviewdecl.ui614
-rw-r--r--kmymoney2/views/kgloballedgerview.cpp1461
-rw-r--r--kmymoney2/views/kgloballedgerview.h403
-rw-r--r--kmymoney2/views/khomeview.cpp1940
-rw-r--r--kmymoney2/views/khomeview.h158
-rw-r--r--kmymoney2/views/kinstitutionsview.cpp353
-rw-r--r--kmymoney2/views/kinstitutionsview.h128
-rw-r--r--kmymoney2/views/kinstitutionsviewdecl.ui82
-rw-r--r--kmymoney2/views/kinvestmentlistitem.cpp294
-rw-r--r--kmymoney2/views/kinvestmentlistitem.h95
-rw-r--r--kmymoney2/views/kinvestmentview.cpp322
-rw-r--r--kmymoney2/views/kinvestmentview.h136
-rw-r--r--kmymoney2/views/kinvestmentviewdecl.ui83
-rw-r--r--kmymoney2/views/kmymoneyfile.cpp114
-rw-r--r--kmymoney2/views/kmymoneyfile.h61
-rw-r--r--kmymoney2/views/kmymoneytransaction.cpp53
-rw-r--r--kmymoney2/views/kmymoneytransaction.h61
-rw-r--r--kmymoney2/views/kmymoneyview.cpp2248
-rw-r--r--kmymoney2/views/kmymoneyview.h625
-rw-r--r--kmymoney2/views/kpayeesview.cpp1108
-rw-r--r--kmymoney2/views/kpayeesview.h325
-rw-r--r--kmymoney2/views/kpayeesviewdecl.ui666
-rwxr-xr-xkmymoney2/views/kreportsview.cpp1510
-rwxr-xr-xkmymoney2/views/kreportsview.h262
-rw-r--r--kmymoney2/views/kscheduledlistitem.cpp231
-rw-r--r--kmymoney2/views/kscheduledlistitem.h107
-rw-r--r--kmymoney2/views/kscheduledview.cpp494
-rw-r--r--kmymoney2/views/kscheduledview.h149
-rw-r--r--kmymoney2/views/kscheduledviewdecl.ui161
-rw-r--r--kmymoney2/widgets/Makefile.am95
-rw-r--r--kmymoney2/widgets/kaccounttemplateselector.cpp279
-rw-r--r--kmymoney2/widgets/kaccounttemplateselector.h57
-rw-r--r--kmymoney2/widgets/kaccounttemplateselectordecl.cpp111
-rw-r--r--kmymoney2/widgets/kaccounttemplateselectordecl.ui188
-rw-r--r--kmymoney2/widgets/kbudgetvalues.cpp341
-rw-r--r--kmymoney2/widgets/kbudgetvalues.h84
-rw-r--r--kmymoney2/widgets/kbudgetvaluesdecl.cpp257
-rw-r--r--kmymoney2/widgets/kbudgetvaluesdecl.ui400
-rw-r--r--kmymoney2/widgets/kguiutils.cpp178
-rw-r--r--kmymoney2/widgets/kguiutils.h94
-rw-r--r--kmymoney2/widgets/klistviewsearchline.cpp507
-rw-r--r--kmymoney2/widgets/klistviewsearchline.h258
-rw-r--r--kmymoney2/widgets/kmymoney.widgets54
-rw-r--r--kmymoney2/widgets/kmymoneyaccountcombo.cpp218
-rw-r--r--kmymoney2/widgets/kmymoneyaccountcombo.h112
-rw-r--r--kmymoney2/widgets/kmymoneyaccountcompletion.cpp106
-rw-r--r--kmymoney2/widgets/kmymoneyaccountcompletion.h63
-rw-r--r--kmymoney2/widgets/kmymoneyaccountselector.cpp544
-rw-r--r--kmymoney2/widgets/kmymoneyaccountselector.h187
-rw-r--r--kmymoney2/widgets/kmymoneyaccounttree.cpp147
-rw-r--r--kmymoney2/widgets/kmymoneyaccounttree.h109
-rw-r--r--kmymoney2/widgets/kmymoneyaccounttreebase.cpp825
-rw-r--r--kmymoney2/widgets/kmymoneyaccounttreebase.h475
-rw-r--r--kmymoney2/widgets/kmymoneyaccounttreebudget.cpp84
-rw-r--r--kmymoney2/widgets/kmymoneyaccounttreebudget.h112
-rw-r--r--kmymoney2/widgets/kmymoneyaccounttreeforecast.cpp401
-rw-r--r--kmymoney2/widgets/kmymoneyaccounttreeforecast.h168
-rw-r--r--kmymoney2/widgets/kmymoneybriefschedule.cpp191
-rw-r--r--kmymoney2/widgets/kmymoneybriefschedule.h68
-rw-r--r--kmymoney2/widgets/kmymoneycalculator.cpp448
-rw-r--r--kmymoney2/widgets/kmymoneycalculator.h249
-rw-r--r--kmymoney2/widgets/kmymoneycalendar.cpp661
-rw-r--r--kmymoney2/widgets/kmymoneycalendar.h262
-rw-r--r--kmymoney2/widgets/kmymoneycategory.cpp203
-rw-r--r--kmymoney2/widgets/kmymoneycategory.h196
-rw-r--r--kmymoney2/widgets/kmymoneychecklistitem.cpp151
-rw-r--r--kmymoney2/widgets/kmymoneychecklistitem.h93
-rw-r--r--kmymoney2/widgets/kmymoneycombo.cpp778
-rw-r--r--kmymoney2/widgets/kmymoneycombo.h467
-rw-r--r--kmymoney2/widgets/kmymoneycompletion.cpp304
-rw-r--r--kmymoney2/widgets/kmymoneycompletion.h122
-rw-r--r--kmymoney2/widgets/kmymoneycurrencyselector.cpp166
-rw-r--r--kmymoney2/widgets/kmymoneycurrencyselector.h90
-rw-r--r--kmymoney2/widgets/kmymoneydateinput.cpp348
-rw-r--r--kmymoney2/widgets/kmymoneydateinput.h123
-rw-r--r--kmymoney2/widgets/kmymoneydatetbl.cpp698
-rw-r--r--kmymoney2/widgets/kmymoneydatetbl.h189
-rw-r--r--kmymoney2/widgets/kmymoneyedit.cpp559
-rw-r--r--kmymoney2/widgets/kmymoneyedit.h243
-rw-r--r--kmymoney2/widgets/kmymoneyforecastlistviewitem.cpp75
-rw-r--r--kmymoney2/widgets/kmymoneyforecastlistviewitem.h65
-rw-r--r--kmymoney2/widgets/kmymoneygpgconfig.cpp130
-rw-r--r--kmymoney2/widgets/kmymoneygpgconfig.h62
-rw-r--r--kmymoney2/widgets/kmymoneygpgconfigdecl.ui197
-rw-r--r--kmymoney2/widgets/kmymoneylineedit.cpp152
-rw-r--r--kmymoney2/widgets/kmymoneylineedit.h135
-rw-r--r--kmymoney2/widgets/kmymoneylistviewitem.cpp135
-rw-r--r--kmymoney2/widgets/kmymoneylistviewitem.h88
-rw-r--r--kmymoney2/widgets/kmymoneyonlinequoteconfig.cpp214
-rw-r--r--kmymoney2/widgets/kmymoneyonlinequoteconfig.h59
-rw-r--r--kmymoney2/widgets/kmymoneyonlinequoteconfigdecl.ui231
-rw-r--r--kmymoney2/widgets/kmymoneypriceview.cpp343
-rw-r--r--kmymoney2/widgets/kmymoneypriceview.h87
-rw-r--r--kmymoney2/widgets/kmymoneyreportconfigtab1decl.ui123
-rw-r--r--kmymoney2/widgets/kmymoneyreportconfigtab2decl.ui282
-rw-r--r--kmymoney2/widgets/kmymoneyreportconfigtab3decl.ui437
-rw-r--r--kmymoney2/widgets/kmymoneyreportconfigtabchartdecl.ui214
-rw-r--r--kmymoney2/widgets/kmymoneyreportcontroldecl.ui150
-rw-r--r--kmymoney2/widgets/kmymoneyscheduledcalendar.cpp92
-rw-r--r--kmymoney2/widgets/kmymoneyscheduledcalendar.h87
-rw-r--r--kmymoney2/widgets/kmymoneyscheduleddatetbl.cpp530
-rw-r--r--kmymoney2/widgets/kmymoneyscheduleddatetbl.h73
-rw-r--r--kmymoney2/widgets/kmymoneyselector.cpp709
-rw-r--r--kmymoney2/widgets/kmymoneyselector.h387
-rw-r--r--kmymoney2/widgets/kmymoneytitlelabel.cpp104
-rw-r--r--kmymoney2/widgets/kmymoneytitlelabel.h78
-rw-r--r--kmymoney2/widgets/kmymoneywizard.cpp376
-rw-r--r--kmymoney2/widgets/kmymoneywizard.h539
-rw-r--r--kmymoney2/widgets/kmymoneywizard_p.h54
-rw-r--r--kmymoney2/widgets/kschedulebriefwidget.ui351
-rwxr-xr-xkmymoney2/widgets/makekdewidgets.in197
-rw-r--r--kmymoney2/widgets/register.cpp2438
-rw-r--r--kmymoney2/widgets/register.h605
-rw-r--r--kmymoney2/widgets/registeritem.cpp116
-rw-r--r--kmymoney2/widgets/registeritem.h226
-rw-r--r--kmymoney2/widgets/registersearchline.cpp301
-rw-r--r--kmymoney2/widgets/registersearchline.h151
-rw-r--r--kmymoney2/widgets/scheduledtransaction.cpp53
-rw-r--r--kmymoney2/widgets/scheduledtransaction.h86
-rw-r--r--kmymoney2/widgets/selectedtransaction.cpp69
-rw-r--r--kmymoney2/widgets/selectedtransaction.h87
-rw-r--r--kmymoney2/widgets/sortoptionlistitem.h390
-rw-r--r--kmymoney2/widgets/stdtransactiondownloaded.cpp70
-rw-r--r--kmymoney2/widgets/stdtransactiondownloaded.h130
-rw-r--r--kmymoney2/widgets/stdtransactionmatched.cpp217
-rw-r--r--kmymoney2/widgets/stdtransactionmatched.h103
-rw-r--r--kmymoney2/widgets/transaction.cpp2189
-rw-r--r--kmymoney2/widgets/transaction.h420
-rw-r--r--kmymoney2/widgets/transactioneditorcontainer.cpp29
-rw-r--r--kmymoney2/widgets/transactioneditorcontainer.h58
-rw-r--r--kmymoney2/widgets/transactionform.cpp467
-rw-r--r--kmymoney2/widgets/transactionform.h223
-rw-r--r--kmymoney2/widgets/transactionsortoption.ui287
-rw-r--r--kmymoney2/widgets/transactionsortoption.ui.h243
-rw-r--r--kmymoney2/wizards/Makefile.am5
-rw-r--r--kmymoney2/wizards/newaccountwizard/Makefile.am20
-rw-r--r--kmymoney2/wizards/newaccountwizard/kaccountsummarypagedecl.ui80
-rw-r--r--kmymoney2/wizards/newaccountwizard/kaccounttypepagedecl.ui289
-rw-r--r--kmymoney2/wizards/newaccountwizard/kbrokeragepagedecl.ui172
-rw-r--r--kmymoney2/wizards/newaccountwizard/kgeneralloaninfopagedecl.ui358
-rw-r--r--kmymoney2/wizards/newaccountwizard/khierarchypagedecl.ui82
-rw-r--r--kmymoney2/wizards/newaccountwizard/kinstitutionpagedecl.ui156
-rw-r--r--kmymoney2/wizards/newaccountwizard/kloandetailspagedecl.ui288
-rw-r--r--kmymoney2/wizards/newaccountwizard/kloanpaymentpagedecl.ui184
-rw-r--r--kmymoney2/wizards/newaccountwizard/kloanpayoutpagedecl.ui198
-rw-r--r--kmymoney2/wizards/newaccountwizard/kloanschedulepagedecl.ui160
-rw-r--r--kmymoney2/wizards/newaccountwizard/knewaccountwizard.cpp1691
-rw-r--r--kmymoney2/wizards/newaccountwizard/knewaccountwizard.h182
-rw-r--r--kmymoney2/wizards/newaccountwizard/knewaccountwizard_p.h327
-rw-r--r--kmymoney2/wizards/newaccountwizard/kschedulepagedecl.ui187
-rw-r--r--kmymoney2/wizards/newuserwizard/Makefile.am18
-rw-r--r--kmymoney2/wizards/newuserwizard/kaccountpagedecl.ui268
-rw-r--r--kmymoney2/wizards/newuserwizard/kcurrencypagedecl.ui82
-rw-r--r--kmymoney2/wizards/newuserwizard/kfilepagedecl.ui86
-rw-r--r--kmymoney2/wizards/newuserwizard/kgeneralpagedecl.ui258
-rw-r--r--kmymoney2/wizards/newuserwizard/kintropagedecl.ui66
-rw-r--r--kmymoney2/wizards/newuserwizard/knewuserwizard.cpp363
-rw-r--r--kmymoney2/wizards/newuserwizard/knewuserwizard.h123
-rw-r--r--kmymoney2/wizards/newuserwizard/knewuserwizard_p.h140
-rw-r--r--kmymoney2/wizards/newuserwizard/kpasswordpagedecl.ui33
-rw-r--r--kmymoney2/wizards/newuserwizard/kpreferencepagedecl.ui96
-rw-r--r--kmymoney2/wizards/wizardpages/Makefile.am18
-rw-r--r--kmymoney2/wizards/wizardpages/accounts.cpp39
-rw-r--r--kmymoney2/wizards/wizardpages/accounts.h42
-rw-r--r--kmymoney2/wizards/wizardpages/accountsdecl.ui54
-rw-r--r--kmymoney2/wizards/wizardpages/currency.cpp66
-rw-r--r--kmymoney2/wizards/wizardpages/currency.h45
-rw-r--r--kmymoney2/wizards/wizardpages/currencydecl.ui96
-rw-r--r--kmymoney2/wizards/wizardpages/userinfo.cpp52
-rw-r--r--kmymoney2/wizards/wizardpages/userinfo.h44
-rw-r--r--kmymoney2/wizards/wizardpages/userinfodecl.ui225
-rw-r--r--kmymoney2/x-kmymoney2.desktop13
-rw-r--r--libkdchart/CMakeLists.txt51
-rw-r--r--libkdchart/KDChart.cpp491
-rw-r--r--libkdchart/KDChart.h97
-rw-r--r--libkdchart/KDChartAreaPainter.cpp80
-rw-r--r--libkdchart/KDChartAreaPainter.h50
-rw-r--r--libkdchart/KDChartAxesPainter.cpp4525
-rw-r--r--libkdchart/KDChartAxesPainter.h220
-rw-r--r--libkdchart/KDChartAxisParams.cpp3318
-rw-r--r--libkdchart/KDChartAxisParams.h515
-rw-r--r--libkdchart/KDChartAxisParamsWrapper.cpp73
-rw-r--r--libkdchart/KDChartAxisParamsWrapper.h50
-rw-r--r--libkdchart/KDChartBWPainter.cpp483
-rw-r--r--libkdchart/KDChartBWPainter.h76
-rw-r--r--libkdchart/KDChartBarPainter.cpp1707
-rw-r--r--libkdchart/KDChartBarPainter.h86
-rw-r--r--libkdchart/KDChartBaseSeries.cpp39
-rw-r--r--libkdchart/KDChartBaseSeries.h60
-rw-r--r--libkdchart/KDChartCustomBox.cpp495
-rw-r--r--libkdchart/KDChartCustomBox.h1043
-rw-r--r--libkdchart/KDChartCustomBoxWrapper.cpp13
-rw-r--r--libkdchart/KDChartCustomBoxWrapper.h33
-rw-r--r--libkdchart/KDChartDataIntern.cpp221
-rw-r--r--libkdchart/KDChartDataIntern.h432
-rw-r--r--libkdchart/KDChartDataRegion.h226
-rw-r--r--libkdchart/KDChartEnums.cpp98
-rw-r--r--libkdchart/KDChartEnums.h305
-rw-r--r--libkdchart/KDChartGlobal.h203
-rw-r--r--libkdchart/KDChartHiLoPainter.cpp390
-rw-r--r--libkdchart/KDChartHiLoPainter.h71
-rw-r--r--libkdchart/KDChartLinesPainter.cpp947
-rw-r--r--libkdchart/KDChartLinesPainter.h86
-rw-r--r--libkdchart/KDChartListTable.h484
-rw-r--r--libkdchart/KDChartNotEnoughSpaceException.h50
-rw-r--r--libkdchart/KDChartObjectFactory.cpp531
-rw-r--r--libkdchart/KDChartObjectFactory.h37
-rw-r--r--libkdchart/KDChartPainter.cpp2984
-rw-r--r--libkdchart/KDChartPainter.h296
-rw-r--r--libkdchart/KDChartParams.cpp9567
-rw-r--r--libkdchart/KDChartParams.h2787
-rw-r--r--libkdchart/KDChartParamsWrapper.cpp73
-rw-r--r--libkdchart/KDChartParamsWrapper.h175
-rw-r--r--libkdchart/KDChartParams_frame.cpp288
-rw-r--r--libkdchart/KDChartParams_io.cpp3333
-rw-r--r--libkdchart/KDChartPiePainter.cpp831
-rw-r--r--libkdchart/KDChartPiePainter.h84
-rw-r--r--libkdchart/KDChartPlaneSeries.cpp138
-rw-r--r--libkdchart/KDChartPlaneSeries.h69
-rw-r--r--libkdchart/KDChartPolarPainter.cpp805
-rw-r--r--libkdchart/KDChartPolarPainter.h78
-rw-r--r--libkdchart/KDChartPropertySet.cpp384
-rw-r--r--libkdchart/KDChartPropertySet.h985
-rw-r--r--libkdchart/KDChartRingPainter.cpp400
-rw-r--r--libkdchart/KDChartRingPainter.h64
-rw-r--r--libkdchart/KDChartSeriesCollection.cpp240
-rw-r--r--libkdchart/KDChartSeriesCollection.h93
-rw-r--r--libkdchart/KDChartTable.h47
-rw-r--r--libkdchart/KDChartTableBase.cpp779
-rw-r--r--libkdchart/KDChartTableBase.h478
-rw-r--r--libkdchart/KDChartTableDataWrapper.cpp36
-rw-r--r--libkdchart/KDChartTableDataWrapper.h29
-rw-r--r--libkdchart/KDChartTextPiece.cpp292
-rw-r--r--libkdchart/KDChartTextPiece.h101
-rw-r--r--libkdchart/KDChartUnknownTypeException.h60
-rw-r--r--libkdchart/KDChartVectorSeries.cpp126
-rw-r--r--libkdchart/KDChartVectorSeries.h71
-rw-r--r--libkdchart/KDChartVectorTable.cpp33
-rw-r--r--libkdchart/KDChartVectorTable.h319
-rw-r--r--libkdchart/KDChartWidget.cpp438
-rw-r--r--libkdchart/KDChartWidget.h120
-rw-r--r--libkdchart/KDChartWrapperFactory.cpp33
-rw-r--r--libkdchart/KDChartWrapperFactory.h13
-rw-r--r--libkdchart/KDDrawText.cpp483
-rw-r--r--libkdchart/KDDrawText.h102
-rw-r--r--libkdchart/KDFrame.cpp618
-rw-r--r--libkdchart/KDFrame.h1167
-rw-r--r--libkdchart/KDFrameProfileSection.cpp95
-rw-r--r--libkdchart/KDFrameProfileSection.h232
-rw-r--r--libkdchart/KDXMLTools.cpp809
-rw-r--r--libkdchart/KDXMLTools.h104
-rw-r--r--libkdchart/LICENSE349
-rw-r--r--libkdchart/Makefile.am95
-rw-r--r--libkdchart/README77
-rw-r--r--libkdchart/README_BEFORE_HACKING8
-rw-r--r--libkdchart/kdchart_export.h47
-rw-r--r--libkgpgfile/Makefile.am12
-rw-r--r--libkgpgfile/kgpgfile.cpp698
-rw-r--r--libkgpgfile/kgpgfile.h185
-rw-r--r--po/CMakeLists.txt10
-rw-r--r--po/Makefile.am25
-rw-r--r--po/ca.po14153
-rw-r--r--po/cs.po12922
-rw-r--r--po/da.po13804
-rw-r--r--po/de.po13674
-rw-r--r--po/en_GB.po14434
-rw-r--r--po/es.po13722
-rw-r--r--po/es_AR.po13745
-rw-r--r--po/fi.po13456
-rw-r--r--po/fr.po14174
-rw-r--r--po/gl.po13662
-rw-r--r--po/it.po13438
-rw-r--r--po/kmymoney2.pot12457
-rw-r--r--po/lt.po13601
-rw-r--r--po/message-stats.sh30
-rw-r--r--po/nl.po13682
-rw-r--r--po/pl.po15372
-rw-r--r--po/pt.po13747
-rw-r--r--po/pt_BR.po14013
-rw-r--r--po/ro.po13848
-rw-r--r--po/ru.po14848
-rw-r--r--po/sk.po15179
-rwxr-xr-xpo/stats.pl218
-rw-r--r--po/sv.po13076
-rw-r--r--po/tr.po13441
-rw-r--r--po/zh_CN.po14637
-rw-r--r--stamp-h11
-rw-r--r--subdirs7
1826 files changed, 615107 insertions, 0 deletions
diff --git a/23011-qt-sqlite3-0.2.tar.gz b/23011-qt-sqlite3-0.2.tar.gz
new file mode 100644
index 0000000..efa6451
--- /dev/null
+++ b/23011-qt-sqlite3-0.2.tar.gz
Binary files differ
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..cee1bf2
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,6 @@
+Michael Edwardes <mte@users.sourceforge.net>.
+Javier Campos Morales <javi_c@users.sourceforge.net>
+Felix Rodriguez <frodriguez@users.sourceforge.net>
+John C <thetacoturtle@users.sourceforge.net>
+Thomas Baumgart <ipwizard@users.sourceforge.net>
+Arni Ingimundarson <arniing@users.sourceforge.net>
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..c7aea18
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,280 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..c52317b
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,9497 @@
+
+2010-03-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Backported encoding patch from KDE4 version
+ * Bumped version number
+
+2010-03-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Finnish translation by Mikael Kujanpaa
+
+2010-03-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Use users character set encoding for reports
+ (backported from 3.97)
+ * Fixed OFX plugin X-KDE-PluginInfo-Name setting
+
+2010-03-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Applied backport patch provided by Ian Neal (adjustedDate.diff and
+ adjustedNextPayment.diff)
+
+2010-03-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Improved anonymizer
+ * Fixed transaction loader for XML file
+ * Added testcases
+
+2010-03-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't preset date in currency calculator to today in all cases
+ (backport from 3.96 by Ian Neal)
+
+2010-03-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed iterator problem in loop (backport from KDE4)
+
+2010-02-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Optimized MyMoneyMoney(QString) ctor (backport from KDE4)
+
+2010-02-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Released 1.0.3
+
+2010-02-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Backported fix from KDE4 version so that the payee view cannot disappear
+
+2010-02-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed BKO #224027 (investment transaction editor problem with
+ negative interest)
+ * Fxied BKO #225085 (Clicking on category doesn't show that category
+ in ledger view)
+
+2010-02-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't suppress some questions upon specific answers even if
+ selected by the user. A usability video showed that this can
+ confuse the user
+
+2010-01-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added logic to detect and repair loops in the account hierarchy to the
+ consistency check
+
+2010-01-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Do not accept split entries without category assignment
+
+2010-01-13 Fernando Vilas <fvilas@iname.com>
+ * Backport MyMoneyPayee::matchData update
+
+2010-01-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Another update of the report configuration wrt date filters
+
+2010-01-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Allow assignment of category after all splits of a
+ multi-split transactions have been removed
+
+2010-01-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed report configuration for non-user-defined reports
+
+2010-01-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Keep a user defined date filter for reports as user defined even if
+ it matches one of the predefined ranges
+
+2010-01-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed handling and support of expired GPG keys
+
+2009-12-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated french home page by Patrick Petit
+
+2009-12-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed last checkin
+
+2009-12-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated British translation by Ian Neal
+
+2009-11-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added option [General Options]/ExternalCalculator to allow starting
+ any external calculator program and not only kcalc (the default)
+
+2009-11-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Show post date in red if prior to opening date of account. Attach
+ tooltip to date edit widget as well
+
+2009-11-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added AutoReusePayee option which defaults to true. No GUI available (yet)
+
+2009-11-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Show a tooltip over the Enter button in case it is disabled due to
+ post date prior to account's opening date
+
+2009-11-04 Tony Bloomfield <gandalf1189@users.sourceforge.net>
+ * Fix SQL generation so it will work
+
+2009-11-09 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed liability account limit adjustment
+
+2009-11-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added one file provided by Allan Anderson to the contrib directory
+
+2009-10-30 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed price precision display in transaction reports
+
+2009-10-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added two files provided by Allan Anderson to the contrib directory
+
+2009-10-24 Alvaro Soliverez <asoliverez@gmail.com>
+ * More currency rounding fixes for the reports
+
+2009-10-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added icons to the file info dialog button
+ * Fixed German translation
+
+2009-10-17 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed rounding up of stock reports using trading currency
+
+2009-10-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed German translation (patch provided by Mark Drexelius)
+
+2009-10-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't show accounts without transactions associated on the home page
+
+2009-10-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Applied patch by Holger (0001-percentages-in-chart-label.patch)
+
+2009-10-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Use account opening date for initial interest rate of loans
+
+2009-10-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added documentation patch from Markus Drexelius
+ * Give the per-payee category higher precedence for autofill
+ * Fixed #2871995 (Ledger: keyboard navigation)
+ * Released 1.0.2
+
+2009-10-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added some parenthesis to an if-statement to avoid confusion
+
+2009-09-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Improve QIF importer to simply skip unknown sections
+
+2009-09-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed 'combine transaction' feature from menus. It is not implemented
+ so we should not show it to the user.
+ * Fixed #2867234 (Don't take status field when creating schedule from ledger)
+ * Fixed a problem when no file was opened during program start
+
+2009-09-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Force initial size to be 800x600
+ * Make expand/collapse state of account and category view persistent
+ * Allow to modify the tab order during transaction entry
+
+2009-09-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Russian translation by Andrey Cherepanov
+ * Updated German translation
+
+2009-09-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Russian translation by Andrey Cherepanov
+
+2009-09-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a few German translations
+
+2009-09-08 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed sizing of forecast chart
+ * Select all subaccounts of an investment in reports when not
+ in expert mode - #2853193
+
+2009-09-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Initial try to fix bko #205254
+
+2009-09-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added patch provided by Tony Bloomfield (movetx) to allow moving investment
+ transactions
+ * Applied patch #2842587 (fix Yahoo UK stock quotes)
+ * Improved layout of printed reports
+ * Released 1.0.1
+
+2009-09-04 Tony Bloomfield <gandalf1189@users.sourceforge.net>
+ * Fix potential loop in Gnc importer
+
+2009-09-02 Alvaro Soliverez <asoliverez@gmail.com>
+ * Updated Russian translation by Andrey Cherepanov
+
+2009-08-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Dutch translation from Bert Keuter
+
+2009-08-26 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed imagedata tags in the documentation
+
+2009-08-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed icon resolution problems with oxygen icon set
+ * Updated Brazilian homepage and whatsnew file from Marcus Gama
+
+2009-08-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #2842591 (crash on new Credit Card a/c with reminder schedule)
+
+2009-08-22 Alvaro Soliverez <asoliverez@gmail.com>
+ * Changed section 1 to detail-widgets.docbook to make it KDE-compliant
+
+2009-08-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Released 1.0.0
+
+2009-08-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Russian translation from Andrey Cherepanov
+ * Updated Italian translation from Sandro Bonazzola
+
+2009-08-16 Alvaro Soliverez <asoliverez@gmail.com>
+ * Force reordering of account icons when there is a new account
+ * Added documentation patches from Jack Ostroff
+ (details-accounts.patch)
+
+2009-08-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed display of fee and interest value in investment transaction form
+ * Show search tool on top of categories view
+ * Don't display investment balance in red
+
+2009-08-15 Alvaro Soliverez <asoliverez@gmail.com>
+ * Updated what's new documentation
+ * Updated Spanish what's new and welcome pages
+
+2009-08-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Italian translation from Vincenzo Reale
+ * Updated Russian translation from Andrey Cherepanov
+ * Updated Romanian translation from Cristian Onet
+
+2009-08-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added link to KMyMoney forum to start page
+ * Updated Italian translation from Vincenzo Reale
+
+2009-08-14 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed account icons arrangement when redisplaying closed accounts
+
+2009-08-13 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added to what's new page changes since version 0.8.9
+ * Updated Romanian what's new page from Cristian Onet
+
+2009-08-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated what's new page to the layout required for 1.0
+ * Fixed problem when entering a multiple transactions for the same payee
+
+2009-08-12 Alvaro Soliverez <asoliverez@gmail.com>
+ * Updated Whats new page preparing for version 1.0
+
+2009-08-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added patch from Ian Neal to support correct fraction in balance column
+ of ledger (investment_balance.diff)
+
+2009-08-11 Alvaro Soliverez <asoliverez@gmail.com>
+ * Use same icon for stock, money market and certificate of
+ deposit accounts as for investments
+
+2009-08-11 Tony Bloomfield <gandalf1189@users.sourceforge.net>
+ * Fix last commit (caused test suite failure)
+
+2009-08-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Unify icon loading for accounts
+ * Added documentation updates from Jack Ostroff
+ * Modified all links in the documentation to point to qt.nokia.com
+ as per http://www.linkedin.com/e/vaq/5932767/1531497/-1/view_disc/
+ * Added patches provided by Ian Neal (ledgerview_overdue.diff,
+ homeview_payments.diff)
+ * Don't remove payee from scheduled transaction if a split points to
+ another asset/liability account
+
+2009-08-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a crash when using the 'clear all' feature in the split editor
+ and not being in the edit mode
+ * Added documentation updates from Jack Ostroff
+ (index.docbook, credits.docbook)
+ * Added Italian translation update from Sandro Bonazzola
+
+2009-08-09 Tony Bloomfield <gandalf1189@users.sourceforge.net>
+ * Fix #2834361 - ENTER key accepts select database dialog
+
+2009-08-09 Tony Bloomfield <gandalf1189@users.sourceforge.net>
+ * Internal improvements to database module
+
+2009-08-08 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added documentation patches from Jack Ostroff
+ (details-accounts.docbook details-institutions.docbook)
+
+2009-08-07 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added documentation patches from Jack Ostroff
+ (details-database.docbook details-formats.docbook
+ details-search.docbook details-widgets.docbook
+ reference.docbook introduction.docbook)
+
+2009-08-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a problem with the label for transfers in the transaction form
+
+2009-08-03 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added documentation patches from Jack Ostroff
+ (details-budgets.docbook details-forecast.docbook
+ details-loans.docbook details-settings.docbook)
+ * Added documentation patches from Jack Ostroff
+ (details-settings.docbook.patch)
+
+2009-08-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't count empty lines in OFX file when verifying the format
+ * Fixed a few typos in the documentation
+ * Don't reverse operation when entering a scheduled transfer transaction
+
+2009-08-01 Alvaro Soliverez <asoliverez@gmail.com>
+ * Reverted a change in KGlobalLedgerView to fix an infinite loop
+
+2009-07-31 Alvaro Soliverez <asoliverez@gmail.com>
+ * Changed Schedule and GlobalLedgerView Views to use adjustedNextDate for
+ schedules instead of nextDate - patches submitted by Ian Neal
+ (kgloballedgerview.diff kscheduledlistitem.diff)
+ * Removed unused code in MyMoneyScheduled.nextPayment()
+
+2009-07-30 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added documentation patches from Jack Ostroff
+ (details-imp-exp.docbook)
+
+2009-07-30 Tony Bloomfield <gandalf1189@users.sourceforge.net>
+ * Use transaction-safe engine for Mysql
+ * Put out a warning message for untested database drivers
+ * Fix nonsense when no Qt SQL drivers installed
+ * Internal changes to database layout (version 6)
+ * Fix SF #2732207 - Unable to unmatch transaction matched by OFX import
+
+2009-07-29 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added documentation patches from Jack Ostroff
+ (details-currencies.docbook.patch details-reports.docbook.patch
+ details-reconciliation.docbook.patch)
+
+2009-07-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added documentation patches from Jack Ostroff
+ (details-investments.docbook.diff)
+ * Changed Trolltech into Qt Software in the documentation
+
+2009-07-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added documentation patches from Jack Ostroff
+ (credits.docbook.diff, details-ledgers.docbook.diff)
+ * Added patch provided by Cristian Onet
+ (code_cleanup_in_register_search_line.patch)
+ * Added selection of account hierarchies for reports to the documentation
+
+2009-07-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #2786436 (Too much delay for data entry in a many-rows split)
+
+2009-07-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added documentation patches from Jack Ostroff
+ (details-schedules.docbook.diff)
+
+2009-07-20 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed transaction by account reports when displaying in multiple currencies
+
+2009-07-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added some fixes to solve #2558627 (Account entry widget mess about splits)
+
+2009-07-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Made some changes to avoid lock-up when opening split transaction editor
+
+2009-07-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added documentation patches from Jack Ostroff
+ (details-categories.diff, details-payees.diff, doc-en-Makefile.am.diff)
+
+2009-07-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't use invalid transaction object for the list of selected transactions
+
+2009-07-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added patch from Cristian Onet to avoid problems when GPG is not installed
+
+2009-07-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added some details about the widgets (negative numbers, double-clicking
+ the drop down arrow of category/account selectors)
+
+2009-07-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added documentation patches from Jack Ostroff
+ (firsttime.diff, details-institution.patch, details-accounts.patch)
+
+2009-07-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't show empty online update statistics
+ * Added documentation patches from Jack Ostroff
+ (makemostof.diff, whatsnew.diff)
+ * Fixed generation of PDF (now includes new screen shots)
+
+2009-07-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated French translation from Patrick Petit
+
+2009-07-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #2785787 (No Keyboard for 'OK' for 'Confirm Manual Enter' window)
+ * Fixed #2777626 (adding a withdrawl from before account start screws ledger)
+
+2009-07-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Skip statement import statistics if no transactions have been imported
+ for the 'Update all accounts' function
+
+2009-06-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added some missing screenshots
+ * Updated some screenshots
+ * Updated new file wizard documentation
+
+2009-06-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Brazilian translation by Marcus Gama
+ * Fixed icon sizes so that lintian.debian.org won't complain anymore
+ * Fixed #2785811 (Bugs in the geometry of a split window)
+
+2009-06-26 Alvaro Soliverez <asoliverez@gmail.com>
+ * Updated Spanish and Argentinian translation
+
+2009-06-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Romanian translation by Cristian Onet
+
+2009-06-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Regenerated POT file and merged translations
+ * Updated German translation
+
+2009-06-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Allow to select a non-existant file in the selection dialog of
+ the new file wizard
+
+2009-06-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added support for automake 1.11
+ * Added --with-qmake option to configure
+ * Ignore bankid for OFX in case it's empty
+ * Allow a dash as negative input even if parens around is selected as
+ negative display mode
+ * Fixed section heading in documentation
+
+2009-06-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Use the configured color setting for negative values in the balance column
+ of the ledger view
+
+2009-06-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added 'Year To Month' budget vs. actual standard report
+
+2009-06-14 Alvaro Soliverez <asoliverez@gmail.com>
+ * Updated user documentation - submitted by Allan Anderson
+ * Fixed typo in reconciliation ending balance dialog
+
+2009-06-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed problem of initial precision being 0 in new schedules
+
+2009-06-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Dutch translation by Bert Keuter
+
+2009-06-09 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed budget reports when displaying monthly or yearly in non-monthly columns
+ * Updated Spanish translation
+
+2009-06-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a return reference to temporary problem
+ * Added patch from Gary Duzan to improve autoconf detection
+
+2009-06-05 Alvaro Soliverez <asoliverez@gmail.com>
+ * Updated user documentation - submitted by Allan Anderson
+
+2009-06-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added modifications for splash screen
+ * Don't paint chart off the right edge on the home page
+
+2009-06-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Use ILS as the id for the New Israeli Shekel
+ * Updated Dutch translation by Bert Keuter
+
+2009-05-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed problem with wrong balance after modifying the balance of an account
+ during reconciliation and then postponing the reconciliation
+
+2009-05-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated French translation by Patrick Petit
+ * Updated Dutch translation by Bert Keuter
+
+2009-05-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated documentation on QIF import
+ * Removed unused UI parts of QIF profile editor
+ * Resized the QIF import dialog
+
+2009-05-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Applied patch by Cristian Onet to support UTF-8 characters in plugin names
+ * Allow QIF date entries that contain two consecutive delimiter characters
+
+2009-05-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Dutch translation by Bert Keuter
+
+2009-05-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Strip leading and trailing white space characters when doing auto
+ completion of payees, accounts, categories, etc. (patch by Ian Neal)
+ * Updated Brazilian translation by Marcus Gama
+ * Allow make uninstall work twice in a row w/o throwing errors
+
+2009-05-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added account icon overlay for accounts mapped to online banking
+
+2009-05-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't reuse memo of older transaction for imported ones when assigning
+ categories based on payee
+ * Fixed #2652046 (QIF-Export adds line breaks)
+ * Fixed German translation (multi row view label)
+
+2009-05-13 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed bug in budget reports for foreign categories
+ * Removed redundant CMakelist.txt files for account templates
+
+2009-05-12 Alvaro Soliverez <asoliverez@gmail.com>
+ * Updated user documentation - submitted by Allan Anderson
+
+2009-05-11 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed cmake tests - Patch provided by Holger
+
+2009-05-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added splitup-kde-chunk-online script to contrib directory
+ * Changed documentation build to use this script instead of a local copy
+
+2009-05-10 Tony Bloomfield <gandalf1189@users.sourceforge.net>
+ * Don't delete all customized reports from database!
+
+2009-05-09 Fernando Vilas <fvilas@iname.com>
+ * Updated schedule test cases to pass after Tony's patch
+ * Fixed a few warnings about const on primitive return types
+ * Made MMStorageSql inherit from KShared
+ * Changed the include order on reports test and pivottable test to make
+ tests compile on Slackware
+
+2009-05-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Galician translation from Marce Villarino
+ * Show scheduled transactions during reconciliation and don't show the
+ initial dialog for overdue scheduled transactions anymore
+
+2009-05-09 Tony Bloomfield <gandalf1189@users.sourceforge.net>
+ * Fixed #2779291
+ - Correct precision in formatted fields
+ - Fix potential upgrade problem
+
+2009-05-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Romanian translation from Cristian Onet
+ * Fixed precision problem in transaction editor
+
+2009-05-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #1910270 (GNUCash Import Options large in PDF docs)
+
+2009-05-07 Alvaro Soliverez <asoliverez@gmail.com>
+ * Updated user documentation - submitted by John Hudson
+
+2009-05-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added date display for certain ledger entries
+
+2009-05-03 Alvaro Soliverez <asoliverez@gmail.com>
+ * Updated Argentinian translation
+ * Updated Spanish translation
+
+2009-05-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated German translation
+
+2009-05-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Regenerated message files
+
+2009-04-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added option to turn on expert mode in settings dialog
+
+2009-04-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Finnish translation from Mikael Kujanpaa
+
+2009-04-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * More fixes to the online documentation generation
+ * Preserve access rights when saving a local file which was owned
+ by another user but we had group write access
+
+2009-04-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed generation and upload of PHB and online manual
+ * Added more output to configuration of sqlite support
+ * Fixed some tips
+ * Minor changes to the project handbook
+ * Added patch by Matt Blythe (payeeCategoryPatch.diff)
+
+2009-04-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * For scheduled transactions with the estimate option turned on, an imported
+ transaction with an amount in the range of +/- 10% of the scheduled amount
+ will match
+
+2009-04-16 Tony Bloomfield <gandalf1189@users.sourceforge.net>
+ * Add missing error check on saveAsDatabase
+
+2009-04-15 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed balance display in ledger when all transactions of an
+ investment account are filtered. Patch provided by Thomas Baumgart
+
+2009-04-15 Thomas Baumgart <ipwizard@users.sourceforge.net
+ * Fixed #2732207 (Unable to unmatch transaction matched by OFX import)
+ for plain file based version. DB code still needs to be fixed.
+
+2009-04-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added documentation of new file wizard (screen shots still missing)
+
+2009-04-13 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed overdue scheduled transactions in pivot to display
+ as happening tomorrow instead of the original date
+
+2009-04-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed return in void setMatchData() introduced two days ago
+
+2009-04-11 Alvaro Soliverez <asoliverez@gmail.com>
+ * Changed MyMoneyReport to use EDetailLevel instead of bool
+ * Cleaned up code in MyMoneyReport and related classes
+
+2009-04-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Changed 'Schedule' --> 'Scheduled transaction' (patch provided by
+ Peter Hargreaves)
+
+2009-04-11 Tony Bloomfield <gandalf1189@users.sourceforge.net>
+ * Update database structures to Version 5
+ - add missing fields in Payee, Split
+ - fix crash on duplicate report name
+
+2009-04-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed permission problems during 'make distcheck'
+
+2009-04-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Changed the generation of PDF versions of the documentation
+
+2009-04-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed bko #188328 (Delete ransaction option is not disabled in closed
+ accounts) with patch provided by Ian Neal
+
+2009-04-07 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added line width option to charts
+
+2009-04-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Improved 'Update all accounts' functionality to require less user activity
+
+2009-04-05 Alvaro Soliverez <asoliverez@gmail.com>
+ * Initialize report type value when loading a custom report
+
+2009-04-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated French translation from Patrick Petit
+
+2009-04-04 Alvaro Soliverez <asoliverez@gmail.com>
+ * Handle invalid chart types of reports in a graceful manner
+ * Show only investments accounts in the account selector
+ of Investment View, including when the investment account is
+ a subaccount
+ * In the account selector, disable a parent account if it does not
+ match the required type
+
+2009-04-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Speedup loading of large files when filename is passed on command line
+
+2009-04-03 Alvaro Soliverez <asoliverez@gmail.com>
+ * Reverted previous commit because some accounts are not showing
+
+2009-04-02 Alvaro Soliverez <asoliverez@gmail.com>
+ * Show only investments accounts in the account selector
+ of Investment View
+
+2009-04-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Preset payee name with the previous one used for a new transaction
+
+2009-04-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Enable OFX plugin by default
+
+2009-03-31 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed the text filter when it does not contain a text and
+ the main split matches that but a split does not
+ * Updated user documentation - submitted by John Hudson
+
+2009-03-28 Alvaro Soliverez <asoliverez@gmail.com>
+ * Updated user documentation - submitted by John Hudson
+ * Further improvements of text filter
+ * Updated Spanish translation
+ * Updated Argentinian translation
+
+2009-03-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Further improvements of text filter
+
+2009-03-28 Alvaro Soliverez <asoliverez@gmail.com>
+ * Updated user documentation - submitted by John Hudson
+
+2009-03-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added MyMoneyFile::referencesClosedAccount() methods
+
+2009-03-26 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed Net Worth Today report to show current date's balance
+ instead of end of the month -- bug #2714063
+ * Updated Argentinian translation - Provided by Sergio Minini
+
+2009-03-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added patch from Cristian Onet (payees_view.patch)
+ * Fixed resize problem of splitter in payees view
+ * Added persistency to the splitter settings
+ * Added patch from Cristian Onet (plugins_settings.patch)
+ * Added missing desktop items to OFX plugin
+
+2009-03-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed balance problem with DB backend
+ * Updated .desktop files with Romanian entries from Cristian Onet
+
+2009-03-22 Fernando Vilas <fvilas@iname.com>
+ * Fixed bug in transaction date filter for db
+
+2009-03-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Resolved some compiler warnings
+
+2009-03-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Also reload OFX bank information files during setup if their
+ size is less than 1024 bytes
+
+2009-03-17 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed month-by-month budget report when fiscal year starts in a month other than January
+
+2009-03-16 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed text matching bug in transaction reports when splits are displayed
+ on its own, eg Transactions by Category reports
+ * Updated Spanish translation
+ * Updated Argentinian translation
+
+2009-03-14 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added Investment Moving Average Price Graph
+
+2009-03-11 Fernando Vilas <fvilas@iname.com>
+ * Removed redundant QString ctor calls in db code
+ * Fixed several warnings in db code
+ * db now remembers online banking KVPs
+
+2009-03-11 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed overflow error in Total Rows of CashFlow Summary
+ * Fixed overflow error in Total Rows of Assets and Liabilities Summary
+ * Fixed currency conversion error in Budget reports
+
+2009-03-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added patch by Holger
+ 0001-Added-build-types-Debug-Debugfull-Profile.patch
+
+2009-03-09 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added Investment Price Graph
+ * Added patch by Holger:
+ 0002-turned-bullets-off-and-simplified-the-chart-class-a.patch
+ * Updated Spanish translation
+
+2009-03-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added option to skip stripping of online price info data
+
+2009-03-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Dim update button if plugin status changed
+ * Added selection combo to negate text filter (not persistant yet)
+ * Use standard buttons for filter dialog
+ * Added patches by Holger:
+ 0001-moved-calculateAutoLoan-to-MyMoneyForecast.patch
+ 0002-Bugfixes-and-Preparation-for-cleaner-library-builds.patch
+ 0003-Fixed-last-patch.patch
+ 0004-OnMouseOver-in-Charts_NEW.patch
+ typo-in-0001-0003.patch
+ 0001-added-fPIC.patch
+ * Show online balance for liability accounts in register as positive amount
+
+2009-03-08 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed Forecast reports when start date is after current date
+ * Fixed Budget reports for monthly budget of foreign currency categories
+
+2009-03-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added patch provided by Holger (0001-USE_QT_DESIGNER-Version-number-and-minor-fixes.patch)
+
+2009-03-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added patch provided by Colin Wright (briefscheduleskipiconanddisable.diff)
+
+2009-03-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Return valid value from PivotGrid::rowSet(QString id)
+ * Added patch provided by Colin Wright (schedulecalendarskipbutton.diff)
+ * Fixed a few button icons
+
+2009-02-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added option 'Match names from start'
+ * Fixed spelling of principal in account templates
+ * Added splitter to payees view
+
+2009-02-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added patch provided by Colin Wright (editcompoundoccurence.diff)
+ * Fixed connection for edit widget signal in schedule editor
+
+2009-02-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated README.ofx
+ * Released 0.9.3
+
+2009-02-23 Robert Wadley <robntina@users.sourceforge.net>
+ * Updated Summary view style.
+ * Updated "What's new" page for upcoming release
+
+2009-02-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed register column resizing algorithm
+ * Show database options in File menu
+
+2009-02-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Load addressbook for new user wizard in background
+ * Fixed bko#185212 (Default year prefix)
+
+2009-02-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Load data for account template widget in the background
+ * Added patch provided by Colin Wright (fix3months_removefq_occurencePeriodToString.diff)
+
+2009-02-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added patch provided by Holger
+ (0001-cmake-QtSqlite-and-small-tweaks.patch)
+ (0002-Installation-Versioning-and-Documentation-improvem.patch)
+
+2009-02-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated regular expression for Financial Express price source
+
+2009-02-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed problem in case additional fees for loans referenced another
+ asset or liability account
+ * Fixed bko#118285 (kmymoney online quotes are cached by KDE)
+ * Assigned icons to dialog buttons
+
+2009-02-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed creation of unique bankID in MyMoneyStatementReader per statement
+ * Fixed unnecessary popup of dialog box in payees view
+ * Fixed calculator widget to use same decimal symbol as edit widget
+ * Fixed #1962055 (Crash in case AqBanking failed) Fix also requires
+ an updated KBanking package
+
+2009-02-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed some issues around modification of addtional loan fees
+ * Removed Makefile.in
+ * Added patch provided by Colin Wright (stringToOccurence.diff)
+ * Added patches provided by Holger
+ (0001--non-fancy-sqlite3-support.patch,
+ 0002-make-install-and-make-kmymoney-unstable_rpm.patch,
+ 0003-added-fancy-qsqlite3-support.patch)
+ * Removed Makefile
+ * Added updated Russian default account template from Andrey Cherepanov
+ * Renamed ru_SU into ru_RU for templates
+ * Change tab between deposit/withdrawal if sign of amount changes
+
+2009-02-15 Alvaro Soliverez <asoliverez@gmail.com>
+ * Updated Spanish translation
+
+2009-02-14 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added Argentinian account templates
+ * Fixed typos in Spanish templates
+
+2009-02-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ - Happy Valentine's Day
+ * Added patch provided by Colin Wright (oops.diff)
+ * Added testcase for the above correction
+ * Pass on plugin name to createInstanceFromLibrary()
+ * Use const reference for getters in plugin info object
+
+2009-02-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added patch provided by Cristian Onet (patch_plugins.patch)
+
+ !!!!FILE FORMAT CHANGE!!!! The previous change causes the file format
+ to change slightly. Be prepared, that schedules may show wrong
+ payment periods when loaded in earlier versions of the program.
+
+2009-02-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added patch provided by Colin Wright (use_compoundOccurence.diff)
+
+2009-02-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Reverted parts of yesterdays patch
+ * Added patch provided by Colin Wright (addHalfMonths.diff)
+ * Added contrib subdirectory
+ * Fixed typos also in .pot and in .po files
+
+2009-02-11 Alvaro Soliverez <asoliverez@gmail.com>
+ * Updated Argentinian translation
+ * Fixed typos in kmymoneygpgconfigdecl.ui and ksettingsgpgdecl.ui
+
+2009-02-10 Alvaro Soliverez <asoliverez@gmail.com>
+ * Updated Argentinian translation
+ * Do not show investments accounts in detailAll charts
+
+2009-02-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added patch provided by Colin Wright (use_occurencePeriod.diff)
+ * Added "don't ask again" feature to balance warning dialog
+
+2009-02-09 Fernando Vilas <fvilas@iname.com>
+ * Fixed date calculation in SQL that was missed in my last patch
+ * Speed improvement in readSplit()
+
+2009-02-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added patch provided by Colin Wright (schedules_multiplier_prep.diff)
+ * Remove link to payee from second split if name is removed from transaction
+
+2009-02-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Italian translation from Vincenzo Reale
+ * Updated Brazilian translation from Marcus Gama
+ * Fixed French translation
+ * Updated Galician translation from Marce Villarino
+
+2009-02-07 Alvaro Soliverez <asoliverez@gmail.com>
+ * Updated translation documentation to merge outdated po files
+ * Updated Spanish translation
+ * Updated Argentinian translation
+
+2009-02-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a sign issue with investment sell/buy imports from OFX
+ * Allow higher precision for price and share information from OFX
+ * Updated translations for de, pt and fr
+
+2009-02-06 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed Balance After calculation in Home Page Payments
+ * Fixed one-time schedules duplicating in Home Page Payments
+
+2009-02-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed CMake based build system (still not 100% compatible w/ autotools)
+ * Fixed auto detection of variable sizes for CMake based build system
+ * Fixed some more CMake related things (mostly cleanup)
+ * Added missing files
+ * Fixed typos in two messsages
+
+2009-02-05 Alvaro Soliverez <asoliverez@gmail.com>
+ * Updated Spanish translation
+
+2009-02-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added update for CMake build environment (a bit broken for me atm)
+
+2009-02-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added trace functionality to HTTPS connections for OFX
+
+2009-02-04 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed loan amortization calculation on reports when there
+ are multiple amortization splits
+
+2009-02-03 Alvaro Soliverez <asoliverez@gmail.com>
+ * Updated Spanish translation
+
+2009-02-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Show correct amount for multi-currency schedules
+ * Updated Portuguese translation from José Jorge
+ * Added home_pt.html from José Jorge
+ * Fixed #2558627 (Account entry widget mess about splits)
+ * Updated Romanian translation by Cristian Onet
+ * Fixed an OFX issue when the bank_id field was not filled
+
+2009-02-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed dependancy to libxml2-devel
+
+2009-02-02 Alvaro Soliverez <asoliverez@gmail.com>
+ * Updated Spanish translation
+
+2009-02-01 Alvaro Soliverez <asoliverez@gmail.com>
+ * Code cleanup of calculateAutoLoan in kmymoneyutils
+ * Added interestSplit method to MyMoneyTransaction
+ * Added isInterestSplit method to MyMoneySplit
+
+2009-02-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added patch provided by Colin Wright (occurenceToString.diff)
+ * Regenerated POT file and merged all PO files
+ * Updated German translation
+
+2009-01-31 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed loan interest calculation in pivot reports when the loan
+ account is not included in the report - #2541605
+
+2009-01-31 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added #2551345 (Maintain geometry of split transaction editor
+ * Added #2551417 (Deletion of the zero-value split records)
+ * Added #2551242 (ENTER focus to next split if is is already defined)
+ * Added patch provided by Colin Wright (halfmonth_200901241601.diff)
+
+2009-01-30 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed loan calculation when the loan account itself is not
+ part of the report. More work needed on that area
+
+2009-01-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Allow overriding header version for OFX requests
+
+2009-01-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added icon to close button of balance chart dialog
+
+2009-01-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added merge button to split transaction dialog (#2538561)
+ * Improved path detection for QT in sqlite.m4
+
+2009-01-27 Alvaro Soliverez <asoliverez@gmail.com>
+ * Patch provided by Thomas Baumgart to show currency conversion
+ dialog when entering schedules involving foreign currencies
+ * Fixed schedule forecast calculation - bug #2507699
+
+2009-01-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Anonymize budget values while saving as anonymized file
+
+2009-01-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed dependency to libcurl and libxml++ from OFX plugin
+
+2009-01-24 Fernando Vilas <fvilas@iname.com>
+ * Reworked balance calculations
+ * Standardized date and MyMoneyMoney formatted storage
+ * Fixed date calculations to work with SQLite
+ * Added (commented) code to support future MMSchedule KVP.
+
+2009-01-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #2530475 (Calculator (Value entry widget) bug!)
+ * Updated French translation from Patrick Petit
+
+2009-01-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added 'Force SSLv3' switch to OFX banking setup wizard
+ * Removed some unused files
+
+2009-01-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Applied patch provided by Colin Wright to clean up schedule frequencies
+
+2009-01-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed sqlite detection problems with older autoconf versions
+
+2009-01-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed problems reported by Doxygen
+
+2009-01-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added Quicken 2004 and Quicken 2003 to the OFX plugin
+
+2009-01-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Use KDE locale setting for date format in report subtitles
+ * Collect all statement reports and show them together in a single window
+ * Automatically detect mapped acount during OFX statement download
+ * Show the transaction selection dialog for autofill even if there
+ is only a single matching transaction
+ * Show warning if user wants to map a brokerage account to an online account
+ * Added icons to buttons on plugin selection dialog
+
+2009-01-12 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added missing include in kguiutils.cpp
+ * Added date to pivot reports subtitle
+ * Added date to transaction reports subtitle
+
+2009-01-14 Tony Bloomfield <gandalf1189@users.sourceforge.net>
+ * Fix #2248020 - Allow passworded databases
+ * Remove redundant code
+ * Update database documentation
+
+2009-01-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Improved OFX logging during setup
+ * Fixed layout for select database dialog
+ * Fixed slot for OK button in select database dialog
+ * Fixed translation issue
+ * Fixed MyMoneyMoney formatting problem with precision -1 that caused
+ 14.04 to be shown as 14.4
+ * Added testcase for this problem
+ * Removed const qualifier from formatMoney() returnvalue
+
+2009-01-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixes to the build system (make distcheck did not work due
+ to the changes for SQLITE3 support)
+
+2009-01-12 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added CashFlow Report
+
+2009-01-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Romanian translation by Cristian Onet
+ * Added QT SQLITE3 support from
+ http://www.kde-apps.org/content/show.php/qt-sqlite3?content=23011
+ to the build system
+ * Building OFX support is now automatic if required libs are installed
+ * Allow arbitrary precision interest rates for loan accounts
+ * Fixed a bunch of warnings
+
+2009-01-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Refactored the usage of the 'Private * d' construct
+
+2009-01-08 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added chart detail setting to forecast view
+ * Fixed sign of expected liabilities on cash flow summary
+ * Cleaned old code in querytable.cpp
+
+2009-01-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated German translation
+
+2009-01-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added Finnish translation from Raimo Ikonen
+ * Regenerated POT file and merged all PO files
+
+2009-01-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Allow to load details for new investments if same security is used
+
+2009-01-05 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added chart to forecast view
+
+2009-01-04 Tony Bloomfield <gandalf1189@users.sourceforge.net>
+ * Fix # 2217233 - Add option to import GnuCash notes as memos
+
+2009-01-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added display of number of splits in file info dialog
+
+2009-01-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * We welcome Slovakia as a new member of the Eurozone
+ (http://en.wikipedia.org/wiki/Eurozone)
+
+2008-12-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Make menu item 'File information' available if build w/o debug support
+ * Added differentiation between QIF bank statement and QIF application import
+
+2008-12-29 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Import GnuCash notes as transaction memo
+
+2008-12-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't include invalid account types in split editor account selection
+
+2008-12-25 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added moving average to report charts
+ * Cleanup of the charts code
+ * Added configuration of moving average days
+ * Added Moving Average vs Actual report
+
+2008-12-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added testcases for the loader functions in MyMoneySeqAccessMgr
+ * Fixed last id detection in loader functions
+
+2008-12-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed an uninitialized variable bug in the QIF importer
+ * Improved const-ness passing of parameters in Gnc importer
+ * Use QString for ids rather than QCString
+
+2008-12-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Assign base currency to account if none is present during creation
+
+2008-12-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Show different intro when editing an investment with the wizard
+
+2008-12-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Reworked matching logic so that in case of multiple payees match,
+ the one with the largest match is taken. This returns the name
+ matching to the 'old' functionality of partial matching.
+
+2008-12-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed MyMoneyQifProfile::possibleDateFormats so that it
+ always delivers at least one possible format
+
+2008-12-15 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed display of total rows in charts
+
+2008-12-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added OFX trace functionality
+
+2008-12-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Czech translation from Marek Stopka
+ * Removed blank in front of synopsis
+ * Added mandatory price entry for new foreign account
+ * Added online quote button to new account wizard
+
+2008-12-14 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added moving average reports for investments
+ * Fixed crash in forecast view when displaying stock in foreign currency
+
+2008-12-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * More changes to the QIF importer
+
+2008-12-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't discard final line during QIF import if it does not contain a LF
+ * Categories don't override account information during QIF import
+ * Don't create duplicate opening balance transaction if same file
+ is imported more than once. Present a warning if amount differs and let
+ the user manually correct it.
+ * Mark imported opening balance transactions as imported (diff. background)
+ * Fixed QIF Buy/Sell action if given an account but not BuyX/SellX action
+ * Enhanced price recording such that security can also be referenced
+ by name by the importer
+
+2008-12-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed some print issues in the CSS file
+ * Fixed some more QIF importer and statement reader problems
+ * Fixed payee matching for name matching mode
+
+2008-12-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added more debug output to statement reader
+ * Added patch provided from Greg Darke to add more settings to OFX plugin
+
+2008-12-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added support for manual OFX configuration
+ * Fixed a sign problem when importing investment sales transations via QIF
+ * The transaction matcher now uses transaction matching on the same date
+ in favor over those that match on different dates.
+ * More fixes to the QIF importer
+
+2008-12-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed some more QIF importer problems
+
+2008-12-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Remove transfers to/from investment accounts in split transactions
+ during QIF import
+
+2008-12-01 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed createBudget forecast unit tests to check dates correctly
+
+2008-12-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Revisited fix for bko #175949. Using the tab directly to create
+ a new transaction did not honor the pressed tab
+ * Updated Czech translation from Marek Stopka
+
+2008-11-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Use QT_LDFLAGS and X_LDFLAGS when building the widget library
+ * Keep position of schedule view if item was deleted
+
+2008-11-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Improved QIF date format detection
+ * Detect dividend transactions as investment transactions even if they
+ don't have a reference to a stock account
+
+2008-11-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't create multiple payees if the name contains meta characters
+ of regular expression (e.g. parans)
+ * Fixed bko #176316 (kmymoney2 crashes when right clicking in a
+ categories tax-editing area)
+
+2008-11-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * A merged transaction has precedence over an imported transaction
+ in the ledger
+ * Fixed more QIF importer issues
+ * If an imported transaction is also matched, then accepting the
+ transaction will remove both flags at once
+ * Allow asset/liability accounts to receive VAT splits
+
+2008-11-26 Alvaro Soliverez <asoliverez@gmail.com>
+ * Sort accounts by name in home page forecast
+
+2008-11-25 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed starting balance price in investment performance report
+
+2008-11-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Store multiple XML statement files for QIF import (debug feature)
+ * Fixed bko #175949 ('New' transaction does not honor the selected tab)
+ * Improved detection of existing accounts in QIF importer
+
+2008-11-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Reworked QIF import with lots of improvements (incl. patches from
+ Allan Anderson)
+ Needs thorough testing and a lot of code cleanup
+ * Adapted statement reader to work with new QIF importer
+ * Allow dividend payments w/o reference to security
+ * Renamed a bunch of i18n-ed html files
+ * Display correct number of prices in file info dialog
+
+2008-11-22 Fernando Vilas <fvilas@iname.com>
+ * Added db index from user manual to schema
+ * Fixed db not logging out when KMM closes (fixes open warning annoyance)
+ * Fixed transactions query to properly ignore schedule splits (fixes
+ calculations on homepage)
+
+2008-11-09 Alvaro Soliverez <asoliverez@gmail.com>
+ * Prevent user from selecting an inconsistent column type for budgets
+
+2008-11-15 Fernando Vilas <fvilas@iname.com>
+ * Updated SQLite driver detection to work with Qt3 and Qt4. Patch from Tony
+ Bloomfield
+
+2008-11-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated simplified Chinese translation by Roy Qu
+
+2008-11-09 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed budget reports when using non-monthly columns
+
+2008-11-08 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added summary to budget in Home Page
+ * Added gaps to tables in Home Page
+
+2008-11-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added new homepage html file from mvillarino
+
+2008-11-05 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed price calculation in investment performance report
+
+2008-11-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Dutch translation from Bert Keuter
+ * Added support for imperial prices to MyMoneyMoney ctor
+ * Added testcase for the above
+
+2008-11-04 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed budget reports when month-by-month are displayed
+ for non-monthly columns
+ * Fixed Cashflow summary schedules when multiple occurences
+ happen during the month
+ * Added properties initialization to MyMoneyForecast constructor
+
+2008-11-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added patch provided by Cristian Onet which fixes a
+ crash in the the accounts icon view
+ * Ensure unique IDs within the same statement downloaded
+ * Removed unnecessary code
+
+2008-10-31 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed http://bugs.kde.org/show_bug.cgi?id=173908
+
+2008-10-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Changed "Ok" --> "OK"
+ * Use KStdGuiItem where appropriate
+ * Fixed placement of search bar in payees view
+ * Fixed http://bugs.kde.org/show_bug.cgi?id=173907
+
+2008-10-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added signal transactionsSelected() to plugins' viewinterface
+ * Added signal accountReconciled to plugins' viewinterface
+ * Updated Romanian translation from Cristian Onet
+
+2008-10-28 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed Forecast unit test
+
+2008-10-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Romanian translation from Cristian Onet
+ * Added patch by Cristian Onet to solve a ledger sorting problem
+
+2008-10-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed sign problem in display of loan information when
+ sum of additional fees was negative
+ * Added information when turning on GPG encryption mode
+ * Added option to turn off title bar of the views
+
+2008-10-26 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed Budget reports when columns longer than a month
+ * Added Linear Regression method to Forecast History Methods
+
+2008-10-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Italian translation from Vincenzo Reale
+ * Added patch by Cristian Onet to fix statement marker problem
+
+2008-10-24 Robert Wadley <robntina@users.sourceforge.net>
+ * Fixed some issues with the html when kmm is used on wide screens
+ and other small fixes.
+
+2008-10-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Make sure to show the correct balance in the ledger view if no
+ transactions are displayed
+
+2008-10-20 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added default report Income and Expenses By Year
+
+2008-10-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated French translation from Patrick Petit
+
+2008-10-19 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed multi currency calculation of transaction reports
+ * Fixed spelling mistake in Home View
+ * Changed current Summary to Assets and Liabilities Summary
+
+2008-10-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a problem during online price update when neither the security
+ nor the currency is the base currency
+ * Show all categories in both selectors during reconciliation start
+
+2008-10-18 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed calculation of assets and liabilities in CashFlow summary
+
+2008-10-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Update total field when changing a budget
+ * Fixed sign problem when postponing reconciliation of liability accounts
+
+2008-10-15 Alvaro Soliverez <asoliverez@gmail.com>
+ * Updated Brazilian Portuguese translation by Marcus Gama
+ * Updated Galician translation by Marcelino Villarino
+
+2008-10-13 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed some Krazy warnings in forecast
+ * Added CashFlow Summary to Home Page
+ * Fixed Schedule calculation in CashFlow Summary
+
+2008-10-09 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed balance of general information reports when converting to
+ base currency
+
+2008-10-07 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed calculation of forecast for stocks which caused an overflow
+ of MyMoneyMoney members
+
+2008-10-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Dutch translation from Bert Keuter
+ * Added feature to update all online accounts at once
+ * Dump some more values
+ * Fix problem with duplicate dividend transactions
+
+2008-10-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Portuguese translation from José Jorge
+
+2008-10-05 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed multi currency calculation for incomes and expenses in the summary
+ * Updated Spanish translation
+
+2008-10-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Dutch translation from Bert Keuter
+ * Tranport price in imported transaction
+ * Detect previously used fee and dividend categories while importing
+ investment statements
+ * Added Romanian HTML files from Cristian Onet
+ * Fixed failing translation of strings containing an ampersand
+ character to identify the keyboard shortcut
+ * Regenerated POT file and merged PO files
+
+2008-10-03 Fernando Vilas <fvilas@iname.com>
+ * Allow SQLite databases to upgrade
+
+2008-10-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added 'Ignore' and 'Skip' buttons to EnterSchedule dialog and show
+ them during reconciliation start and auto entry during appl startup
+ * Move icon draw logic from StdTransaction to Transaction to have it
+ for investment transactions as well
+ * Display imported investment transaction with the correct background
+ * Updated French translation from Patrick Petit
+
+2008-10-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Show correct message if statement balance is not included in statement
+
+2008-09-30 Wolfgang Rohdewald <wolfgang@rohdewald.de>
+ * fix valgrind warning about conditional jump depending on
+ uninitialized variable
+
+2008-09-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Brazilian translation from Marcus Gama
+ * Make sure to update local variables from engine after chanages
+ * Removed unused variables
+
+2008-09-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Assign id to budget accountgroup if missing or different
+ * Updated french what's new page from Patrick Petit
+
+2008-09-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added Romanian account templates from Onet Cristian
+
+2008-09-27 Fernando Vilas <fvilas@iname.com>
+ * Implemented patch for occurrenceMultiplier in schedules
+ provided by Colin Wright
+ * Added db upgrade path to support the above patch
+
+2008-09-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Italian what's new file provided by Vincenzo Reale
+
+2008-09-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a problem with schedule preview in ledger if end of schedule
+ falls into preview period. This could cause a lockup of the application.
+ * Show cleared transactions during reconciliation in a dimmed fashion
+ * Updated Romanian translation by Chrstian Onet
+
+2008-09-22 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added blank column to Summary
+ * Added missing file for Home Settings
+
+2008-09-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed some typos in German translation, shortened a few strings
+
+2008-09-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added option to select most often used transaction for autofill
+
+2008-09-21 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added setting to hide limit column on Home page
+
+2008-09-20 Alvaro Soliverez <asoliverez@gmail.com>
+ * Show closed accounts in reports and find transactions dialog
+ if the user has chosen to do so
+ * Changed the order and rearranged the tables of Summary
+ * Fix the style divs provided by Robert Wadley
+
+2008-09-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a transaction matcher issue with similar transactions
+
+2008-09-15 Alvaro Soliverez <asoliverez@gmail.com>
+ * Convert fractions in KMyMoneyAccountTreeForecastItem to make
+ sure it does not overflow when handling multiple currencies
+ * Reinitialize m_forecast in Home Page on change
+
+2008-09-14 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added generic code in PivotTable to support multiple
+ columns while preventing duplication of code
+
+2008-09-12 Fernando Vilas <fvilas@iname.com>
+ * Updated MMStorageSql to throw MyMoneyExceptions
+
+2008-09-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed sign problem with paid dividends
+ * Updated German Whats New page
+ * Updated Portuguese translation as provided by Jose Jorge
+ * Updated French Whats New page
+ * Released 0.9.2
+
+2008-09-11 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed calculation of paid dividends for return of investment
+ * Updated Spanish Whats New page
+
+2008-09-10 Robert Wadley <robntina@users.sourceforge.net>
+ * Updated the "whats new in this release" page.
+
+2008-09-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added skip icon for schedules to home view
+ * Moved icons in front of schedule names
+ * Added tooltips to the icons and schedule links
+ * Fixed bug in transaction matcher when two or more identical transactions
+ are carried out on the same day and are manually entered already.
+
+2008-09-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed edit loan wizard to keep changes made to interest rate
+
+2008-09-07 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added Budget, Budget Difference and Forecast to exported
+ report CSV
+
+2008-09-07 Fernando Vilas <fvilas@iname.com>
+ * Fixed primary key error when adding first items to database
+ * More database documentation updates
+ * Added simple test cases for budgets
+ * Fixed budget test cases for the case when a database is not installed
+
+2008-09-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Display information why Financial Summary link is not working
+
+2008-09-06 Alvaro Soliverez <asoliverez@gmail.com>
+ * Changed internal structure of PivotGrid to work as a QValueList
+ * Modified PivotTable and unit tests to accomodate to the new PivotGrid
+ design
+ * Implemented new methods for drawing charts by level and avoid duplicating
+ code
+
+2008-09-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed Wolfgang's modification
+
+2008-09-06 Wolfgang Rohdewald <wolfgang@rohdewald.de>
+ * Show the file name in the passphrase dialog
+
+2008-09-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't remove statement marker if it's the last entry in the ledger
+ * Don't present balance warnings when entering schedules that will be matched
+ * Check 'Type' keyword in QIF case independant
+ * Updated German translation
+
+2008-09-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Initial code for drag and drop for attachments (not functional yet)
+ * Added documentation update provided by Colin Wright
+ * Updated screen shots for documentation of new account wizard
+ as received in patch #2038235
+
+2008-09-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Prevent numeric overflow when calculating value of
+ stocks traded in different currency
+ * Delete StatementKey during account unmap
+ * Show last online balance in ledger
+ * Added Debian/Ubuntu specifc build instructions to README
+ * Improved sorting in ledger for items with same post date
+ * Don't allow create schedule option for investment accounts
+
+2008-09-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a false popup dialog when editing a schedule from within the ledger
+ * Added name based detection of brokerage account to QIF Importer and
+ statement reader
+ * Preset statement balance to autoCalc to be able to detect if the
+ balance was filled in by the importer/online module
+ * Don't remove account from selector if it has children. Rather make
+ it not selectable
+ * Fix sortorder of scheduled and non-scheduled transactions in
+ ledger when they have the same post date
+
+2008-08-31 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added settings to exclude future or scheduled-transactions from forecast
+
+2008-08-31 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added Romanian translation provided by Cristian One
+ * Regenerated POT file
+ * Merged message files
+
+2008-08-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't show overdue payments in the past
+
+2008-08-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Reset the last payment date when duplicating a transaction
+
+2008-08-28 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added Spanish translation of Home and Whats New pages
+
+2008-08-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added functionality to wizard's help button
+ * Set standard context for new file setup
+ * Disabled warning about deprecated fileformat of version 0.4
+
+2008-08-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't select scheduled transactions during Ctrl+A processing
+ * Wrap networth graph on homepage into frame
+ * Reload widget when delting splits in the split editor
+ * Updated Italian translation from Vincenzo Reale
+
+2008-08-25 Alvaro Soliverez <asoliverez@gmail.com>
+ * Changed styles of Home Page - Patch provided by David Houlden
+
+2008-08-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a problem with syncing the hierarchy tab in the account edit dialog
+ * Added possibility to select scheduled transaction in register and
+ open the schedule context menu for them
+
+2008-08-25 Alvaro Soliverez <asoliverez@gmail.com>
+ * Reload forecast on Home Page when file is changed
+ * Set the title of legend on report charts
+
+2008-08-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Allow direct editing and entering of schedules from Home page
+ * Don't allow deletion of transactions referencing closed accounts
+ * Fixed endless loop in transaction preview for one time schedules
+
+2008-08-24 Fernando Vilas <fvilas@iname.com>
+ * Updated OCI values in db code based on comments from Colin Wright.
+ (Untested)
+ * Removed some unused db code.
+ * Changed closing behavior of db to make it less likely to remain open.
+ (More to come on this one.)
+
+2008-08-24 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed format of value and column name in Account Info Reports
+ * Fixed display of AutoCalc values in Schedule Info Reports
+ * Do not show closed account in Loan Info Reports
+ * Fixed display of value in Schedule Reports
+ * Fixed initialization of PivotCell to check m_cellUsed - #2070446
+ * Added a flag to MyMoneyForecast to tell when forecast is done
+ * Added forecast balance after payments to Home Page
+ * Changed alignment of totals on Summary
+
+2008-08-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed sign of equity balance in accounts and ledger view
+ * Fixed some stuff in the anonymous file writer
+
+2008-08-23 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added borders to tables on Home Page
+ * Fixed alignment on Home Page
+ * Use the currency symbol rather than the name in Information reports
+ * Don't display closed accounts in Account Information reports
+ * Show balance of subaccounts of an investment in account information
+ * Show 'next due date' only in the first row of the schedule information
+ report
+ * Changed style of intermediate column in Summary - patch provided by
+ David Houlden
+ * Code cleanup in budget forecast tree
+ * Fixed html tag in Summary - patch provided by David Houlden
+
+2008-08-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Store name of new file in 'recent files' list
+
+2008-08-22 Alvaro Soliverez <asoliverez@gmail.com>
+ * Add type of Information Reports when reading and writing reports
+ * Fixed style of report column headers
+ * Added account to payments on Home Page
+
+2008-08-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Turn off internal memory leak checker by default
+ * Added option to display scheduled transactions in ledger
+ * Don't allow creation of transactions in closed accounts
+ * Got rid of 'type qualifiers ignored on function return type' warning
+ * Use occurenceToString() from MyMoneySchedule instead of KMyMoneyUtils
+ * Disable the split button of the category until the account is known
+ * Don't keep elements from file that are not properly read
+ * Fixed a problem with the investment value display in the ledger view
+
+2008-08-21 Alvaro Soliverez <asoliverez@gmail.com>
+ * Branches of forecast trees now show the total of subaccounts if closed,
+ and revert if opened
+ * Fixed running sum of schedule-based forecast when creating a budget -
+ Reported by Marko Käning
+
+2008-08-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Allow creation of Equity additional accounts
+ * Allow editing transactions in Equity accounts
+ * Renamed TransactionMatcher::scheduledTransaction() into
+ KMyMoneyUtils::scheduledTransaction()
+
+2008-08-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Be somewhat relaxed when searching an account based on information
+ provided by online banking providers
+
+2008-08-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added web price quote for Financial Express as provided by P. Hargreaves
+ * Fixed crash on shift-select
+
+2008-08-19 Alvaro Soliverez <asoliverez@gmail.com>
+ * Make branches in forecast trees open by default
+
+2008-08-18 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed styles in Home Page. Reported by Pallavi Damera.
+
+2008-08-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't allow creation of transactions when no account is selected
+ * Allow application override before initial OFX connection with bank
+ * Fixed a duplicate i18n call as pointed out by Alexander Kireev
+ * Reduced min height of the KAccountTemplateSelector widget
+ * Don't allow online account update if provider is not present
+
+2008-08-17 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added style to headers in Home Page. Reported by Pallavi Damera.
+ * Added hierarchy to summary and detail forecast. Accounts are now shown
+ even if not in the forecast when child accounts are in forecast.
+ * Changed budget forecast to be shown in a tree
+
+2008-08-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Actually use override value for OFX app id and version
+ * Don't allow override for libOFX < 0.9
+
+2008-08-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed schedule loader to not forget data about finished items
+ * Removed extranous EXTRA_DIST entry in templates
+ * Fixed precedence of multiplication over addition in calculator widget
+ * Show the error message provided by the bank when importing an OFX file
+
+2008-08-16 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed Forecast Summary. The tree was being shown in a different tab.
+
+2008-08-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added application override to OFX plugin
+ * Added search filter to GUI of OFX institution setup wizard
+
+2008-08-14 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Fix sqlite logout problem
+
+2008-08-14 Wolfgang Rohdewald <wolfgang@rohdewald.de>
+ * globally catch all uncaught kmymoney exceptions
+
+2008-08-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Improvement for fix of #1866881: keep focus item
+ * Applied patch provided by Alexis Lahouze
+ * Fixed testcases
+ * Added status display for statement import
+ * Keep changes to category when changing parent account in same edit session
+
+2008-08-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed endless loop when canceling the entry of a schedule during
+ reconciliation startup
+ * Make sure to have the current selected split as first split in the schedule
+ * Fixed #1866881 (Show Transaction Detail:scroll view to current record)
+
+2008-08-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed consistency check to modify share instead of value field if they
+ have to contain equal values.
+ * Updated Brazilian translation from Marcus Gama
+ * Updated Simplified Chinese translation from Roy Qu
+ * Fixed a payee assignment and display problem with schedules
+
+2008-08-09 Alvaro Soliverez <asoliverez@gmail.com>
+ * Forecast Summary and Detail are shown in a tree
+ * Code cleanup in KForecastView
+ * Added method to show negative numbers in red to
+ KMyMoneyAccountTreeBaseItem
+
+2008-08-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated German translation provided by yllohy
+ * Fixed reload of accounts and categories view after changes when
+ a quick filter was active
+
+2008-08-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Allow entering of overdue schedules before reconciliation
+
+2008-08-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed payee matching (was a bit broken by change on 2008-08-03)
+ * Added MyMoneySeqAccessMgr::m_priceList to transaction based handling
+ * Modified testcases to accompany the above change
+ * Updated Portuguese translation by José Jorge
+
+2008-08-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added logic to remove payees that were created during statement
+ import but are unused.
+
+2008-08-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Allow to move transactions to different category in category ledger
+ * Updated pot file and merged into message files
+ * Fixed override for account type during OFX statement requests
+ * Added feature to unmap an online account
+
+2008-08-03 Alvaro Soliverez <asoliverez@gmail.com>
+ * Cleaned code in forecast and reports
+ * Added check in QueryTable to prevent infinite loops in cases
+ of splits data inconsistency
+
+2008-08-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed override for OFX money market accounts for LibOFX 0.8
+ * Use the payee as stored with a manually entered transaction in
+ favor of the imported transaction after matching
+ * If the manually transaction does not have a payee assigned
+ use the one found in the imported transaction
+ * If multiple payees match use the one that is found most often
+ in the account that is imported
+
+2008-08-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Avoid sending out dataChanged() signal when no changes were
+ made to the data but a transaction ends.
+
+2008-08-01 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added link to ledger to budget overruns in home page
+
+2008-08-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed OFX override for LibOFX 0.8
+ * Renamed MyMoneyTransactionFilter::untilToday
+ into MyMoneyTransactionFilter::asOfToday
+ * Added patch provided by Colin Wright
+
+2008-07-31 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Include transactions with the same date as the statement date
+ in reconciliation
+ * Show information about deposits and payments during reconciliation
+ * Added OFX override for money market accounts
+
+2008-07-30 Alvaro Soliverez <asoliverez@gmail.com>
+ * Updated Argentinian translation
+ * Added report of transactions by reconciliation status
+ * Fixed order of schedules info report
+ * Fixed grouping of account and loan info reports
+ * Removed category column of schedule summary info report
+ - Patch provided by Marko Käning
+ * Fixed interest rate in loan info report
+
+2008-07-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Respect preferred account setting from new account wizard
+ * Updated French translation from Patrick Petit
+ * Added patch provided by Alexis Lahouze with small modifications
+ * Added StatementGroupMarker object
+
+2008-07-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed reload of payees and schedule view after changes when
+ a quick filter was active
+ * Added transaction matcher for schedules
+ * Cleanup statement reader call in application
+ * Catch exception thrown by user abort during import
+
+2008-07-28 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed balance column in info reports
+ * Changed schedule info report to sort by next due date
+
+2008-07-27 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added report for loan information
+ * Fixed duplicate column in account information report
+
+2008-07-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated the online price update dialog and allow to quit out
+ of the whole operation
+
+2008-07-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Only create imported user once
+
+2008-07-25 Fernando Vilas <fvilas@iname.com>
+ * Fixed compilation issue from previous commit
+
+2008-07-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Comment generation of request.ofx in OFX plugin
+ * Added auto transaction matcher to statement reader
+ * Added quick filter for matched transactions
+ * Renamed a button in the new user wizard
+
+2008-07-23 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed memo filter to schedule report
+ * Added account information report
+
+2008-07-23 Joerg Rodehueser <wampbier@users.sourceforge.net>
+ * Did some code cleaning to avoid compiler warnings
+ * Added the kdchar source to the cmake build
+ * Added missing files to CMakeLists.txt
+
+2008-07-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Escape special characters in payee names before adding to match list
+ * Prevent crashes in MyMoneyMoney::price() in case m_shares is 0
+ which it should not ever be
+ * Code cleanup (performed after Joerg's above)
+
+2008-07-22 Alvaro Soliverez <asoliverez@gmail.com>
+ * Workaround to get price for starting balance in performance
+ report even when there is no price
+ * In performance report add splits without action to buy or sell
+
+2008-07-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Automatically add copy of deleted payee names to match list of
+ replacement payee
+ * Default payee matching to ignore case when first turned on
+
+2008-07-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed investtransaction editor to work with newly created categories
+ and securities
+
+2008-07-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Renamed 'Amount' column in investment ledger to 'Quantity'
+ * Fixed a compile problem with libofx < 0.9 being used
+ * Show multiple accounts with the same name in account icon view
+ as multiple icons
+ * Fixed placement of calculator to make sure it's not outside the desktop
+
+2008-07-19 Fernando Vilas <fvilas@iname.com>
+ * Added db support for new file fix version
+ * Fixed how file fix version is handled in db code
+ * Fixed incorrect balance when a transaction zeroes an account
+ in the db
+ * Added db test case for adding a transaction to zero an account
+
+2008-07-19 Alvaro Soliverez <asoliverez@gmail.com>
+ * Replaced IRR with XIRR from KOffice by Sascha Pfau,
+ modified to fit the way querytable works
+
+2008-07-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated German translation from yllohy
+
+2008-07-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added Turkish translation from Serdar Soytetir
+ * Keep memo for category memos in sync with the one visible
+ * Added code for autofix after load (but not yet active)
+ Needs further testing, esp. with the database backend
+ * Updated Italian translation from Vincenzo Reale
+
+2008-07-16 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed text filtering of splits in transaction reports
+
+2008-07-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed dependencies for some xxxToString() methods
+
+2008-07-15 Fernando Vilas <fvilas@iname.com>
+ * Added KVPs to splits in the db
+ * Updated (some) documentation of db functions
+ * Fixed MMInstitution to properly store KVP in the db
+
+2008-07-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Italian translation from Vincenzo Reale
+ * Added option to specify the default reconciliation state for
+ transactions entered during reconciliation
+ * Added capability to enter interest splits for a buy share transaction
+ * Allow deletion of transactions even if the transaction carrying the focus
+ is currently not selected
+ * Added KVPs to MyMoneySplit
+ * Don't write empty KVPs to the file
+ * Added initial implementation of TransactionMatcher
+ * Fixed MyMoneyTransaction::operator == to include the KVPs
+ * Added some testcases for that
+ * Try to avoid asking for an account if clear for which data is imported
+ (tested for HBCI, not OFX)
+ * No need for Fees in Reinvest Dividend transaction
+ * Updated About KMyMoney info dialog
+
+2008-07-14 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added missing classes to CVS
+ * Added split information to Schedules report
+ * Added Schedule report filter by account
+ * Added new Schedule report without splits
+
+2008-07-13 Alvaro Soliverez <asoliverez@gmail.com>
+ * Removed AccountTypeToString method from PivotTable. Have it use
+ KMyMoneyUtils method
+ * Created ListTable to handle common method and data for QueryTable
+ and ObjectInfoTable classes
+ * Modified QueryTable test cases for the new class hierarchy
+
+2008-07-12 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added report to list all schedules
+
+2008-07-06 Fernando Vilas <fvilas@iname.com>
+ * Fixed unit tests to be less annoying in the absence of a db
+ * Fixed an error in the last db code commit
+
+2008-07-04 Alvaro Soliverez <asoliverez@gmail.com>
+ * Cleaned MyMoneyMoney objects init in KHomeView
+
+2008-06-21 Fernando Vilas <fvilas@iname.com>
+ * Added database unit test
+ * Modified database code to pass unit test
+ * Corrected some documentation in mymoneyfile.h
+
+2008-06-29 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added some information to README file on how to compile and
+ necessary packages
+
+2008-06-24 Alvaro Soliverez <asoliverez@gmail.com>
+ * Changed KMyMoneyFrequencyCombo to get the text from KMyMoneyUtils
+ to avoid code duplication
+
+2008-06-24 Alvaro Soliverez <asoliverez@gmail.com>
+ * Implemented creation of budget based on scheduled and future
+ transactions
+ * Cleaned up schedule forecast code
+ * Added unit test for scheduled forecast budget
+ * Removed the dependency of occurenceToString of KMyMoneyFrequencyCombo
+
+2008-06-17 Alvaro Soliverez <asoliverez@gmail.com>
+ * In summary of the home page, show scheduled transfers
+ on its own
+
+2008-06-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed VPATH include problems
+ * Fixed default order of account tree columns
+
+2008-06-17 Alvaro Soliverez <asoliverez@gmail.com>
+ * Modified layout of summary tab in forecast view
+
+2008-06-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Pretend to be Quicken 2008 during OFX download
+
+2008-06-17 Alvaro Soliverez <asoliverez@gmail.com>
+ * In home page show maximum credit instead of minimum balance
+ depending on account type
+
+2008-06-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added patch supplied by Colin Wright adding a missing parameter
+ * Updated Swedish translation from Konrad Skeri
+
+2008-06-16 Wolfgang Rohdewald <wolfgang@rohdewald.de>
+ * fixed restoring the layout in some tree views
+
+2008-06-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Simplified code
+ * Changed function names to follow coding standards
+ * Keep KMyMoneyAccountTreeBaseItem a pure virtual class
+ * Fix default order of columns in account tree
+
+2008-06-14 Wolfgang Rohdewald <wolfgang@rohdewald.de>
+ * Asset/Liability accounts can now be defined as VAT accounts.
+ They cannot yet be used as such however.
+ * edit account/category: make hierarchy display work again after
+ refactoring the AccountTree classes
+
+2008-06-13 Wolfgang Rohdewald <wolfgang@rohdewald.de>
+ * Accounts view, icon tab: Do not show closed accounts if not wanted
+ * "show closed accounts" now also shows/hides closed stock
+ * new base classes ...AccountTreeBase{Item}. AccountTree and
+ AccountTreeBudget are derived from this.
+ * reduced duplicate code in these classes and simplified
+ some things - hopefully without breaking anything.
+ * new helper function const QString formatMoney(...)
+
+2008-06-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Improved keyboard navigation in ledger view
+ * Removed compiler warning for KMyMoneyView
+ * Cleaned code in KOfxDirectConnectDlg::slotOfxFinished
+
+2008-06-11 Wolfgang Rohdewald <wolfgang@rohdewald.de>
+ * Edit category / account: Show old name in caption
+ * Fix VAT percentage and a few typos in german template file skr03.kmt
+ * new methods for MyMoneyAccount: accountPixmap and accountGroupPixmap
+
+2008-06-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Reduce duplicate code
+
+2008-06-08 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed investment performance calculation
+
+2008-06-07 Wolfgang Rohdewald <wolfgang@rohdewald.de>
+ * transactions touching closed accounts can no more be deleted/duplicated
+ * transactions with frozen splits can no more be deleted
+ * warn before deleting transactions with reconciled splits
+ * new class KMStatus for simpler display of status messages
+
+2008-06-05 Wolfgang Rohdewald <wolfgang@rohdewald.de>
+ * globally replaced QValueList<SelectedTransaction> by the new class
+ SelectedTransactions. Right now it is almost empty, so this patch
+ is mostly syntactic sugar. Exception: constructor(const Register* r)
+
+2008-06-05 Wolfgang Rohdewald <wolfgang@rohdewald.de>
+ * In home view and account tree, rename Balance to Current Balance
+ resp. Total Balance
+
+2008-06-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added (slightly modified) patch from Colin Wright which
+ adds an account hierarchy page to the new account wizard
+ * Added a refined patch from Colin Wright for the new account wizard
+ * Fixed ledger sorting in i18n-ed version of KMyMoney
+ * Added some debug output to OFX direct connect
+
+2008-06-03 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Unsubtle fix for memcheck to compile on GCC4.3
+
+2008-06-02 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Fix (some) GCC4.3 compile errors
+
+2008-06-01 Fernando Vilas <fvilas@iname.com>
+ * Fixed compilation issue of db code on Fedora Core 9
+
+2008-05-30 Alvaro Soliverez <asoliverez@gmail.com>
+ * Improved calculation of investment balances in query reports
+ * Calculate base currency price for investment based on
+ transaction date in query reports
+ * Fixed decimals for Return On Investment that were being cut off
+
+2008-05-31 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed payees view when changing existing match patterns
+ * Added MyMoneyTransaction::isImported()
+ * Fixed a bug which caused the sign of splits be reverse when
+ entering split transactions in the register w/o using the form
+
+2008-05-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Improved button signal handling for database selection dialog
+ * Improved encryption setup (differentiate between main key and
+ additional keys)
+
+2008-05-30 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added total profit/loss to summary on home page
+
+2008-05-29 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Remove all Sqlite2 references
+ * Improve usability of DB selection dialog
+ * Coding changes
+
+2008-05-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added ability to enter negative numbers with a leading dash even
+ if display format is "parens around".
+ * Improved some code changes made by Wolfgang
+ * Updated German translation from Yllohy
+ * Updated Brazilian translation from Marcus Gama
+ * Don't allow editing transactions that reference closed accounts
+
+2008-05-28 Wolfgang Rohdewald <wolfgang@rohdewald.de>
+ * report view: correctly order the report groups by number
+ * fix one more usage of an uninitialized variable
+ * category ledger: For the payee, the strings "Paid to" and "From"
+ were interchanged
+
+2008-05-27 Wolfgang Rohdewald <wolfgang@rohdewald.de>
+ * fixed segfault when doubleclicking on an expense category in
+ the category view
+
+2008-05-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Moved all OFX relevant code into the OFX plugin
+ * Support encryption to more than one GPG key
+ * Added plugin specifc tab to account editor dialog for online support
+ * Added array operator to MyMoneyKeyValueContainer
+ * Support multiple strings (actually regexp's) for payee matching
+ * Added capability to store multiline notes with a payee record
+ * Store bank routing number and account id in MyMoneyStatement
+ * Removed KMyMoneyImporterPlugin service type
+ * Improve speed for database access by using MyMoneyFile's cache
+ * Fixed some testcases for the above change
+
+2008-05-26 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Remove Sqlite v2 support
+ * Fix Sqlite v3 detection
+ * Clarify dialog help text
+
+2008-05-25 Wolfgang Rohdewald <wolfgang@rohdewald.de>
+ * add new budget did throw away changes without asking
+ to save them
+ * budgetview: hide unused accounts had problems. This
+ fixes bug 1962065. Toggling this no longer asks if
+ the user wants to save the budget. The checkbox is
+ now disabled if the budget has no used accounts.
+ * fix bug 1575585: Loan with 0% interest (division by 0)
+
+2008-05-24 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed manual forecast in forecast view
+
+2008-05-25 Wolfgang Rohdewald <wolfgang@rohdewald.de>
+ * Fixed segfault after deleting an investment
+
+2008-05-24 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added missing enum item to report date enum
+ * Fixed date when reading a custom saved report
+
+2008-05-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Reverted some changes introduced during DB integration
+ * Fixed reference for file inclusion in Makefile.am
+
+2008-05-24 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Prepare sqlite3 support
+ * Fix create views in mysql
+
+2008-05-24 Wolfgang Rohdewald <wolfgang@rohdewald.de>
+ * fixed keyboard handling for accelerators in transaction editor
+ * fixed accelerator for the Tools main menu: Was T although the o
+ was underlined
+
+2008-05-23 Fernando Vilas <fvilas@iname.com>
+ * Updated database engine to support new KMM engine.
+
+2008-05-22 Wolfgang Rohdewald <wolfgang@rohdewald.de>
+ * Summary: Fix computation of investment accounts when foreign
+ currencies are involved
+
+2008-05-20 Alvaro Soliverez <asoliverez@gmail.com>
+ * For budget or forecast only show actual in the charts if set to
+ do so
+ * Switch networth forecast graph in the home page to use new forecast
+ pivot report. Changed timeframe to current date + 90 days.
+ * Fixed bugdet graph configuration
+
+2008-05-20 Alvaro Soliverez <asoliverez@gmail.com>
+ * Sort Summary accounts by name
+ * Save includesForecast setting in pivot reports
+
+2008-05-19 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added forecast calculation to pivot reports
+ * Added group of forecast default reports
+ * Skip total calculation of budget or forecast if report does not
+ include them
+ * Added setting to not purge unused forecast accounts if required
+ * Fixed investment calculation in home page. Calculate deep currency
+ not base currency.
+ * Set includeForecast to false when reading a report from file
+
+2008-05-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't show '&nbsp;' in abscissa labels of charts
+
+2008-05-19 Wolfgang Rohdewald <wolfgang@rohdewald.de>
+ * History of transactions for payees could show wrong action for
+ transactions entered with a pre 0.9.0 version
+
+2008-05-18 Wolfgang Rohdewald <wolfgang@rohdewald.de>
+ * focus handling in all ledgers for keyboard users: Avoid segfault
+ if no item had focus and first item is not focussable like in
+ search window
+ * when a new search window is generated, select top item
+ * when entering CTRL-F to get to the search window, make sure that
+ the search window always gets focus. If it already existed, this
+ did not always happen
+ * dragging a category in the tree segfaulted when there was no icon
+ defined for the category. Can happen when kmymoney2 cannot find its
+ resources.
+
+2008-05-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated German translation from yllohy
+
+2008-05-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Applied patches provided by Wolfgang Rohdewald
+ * Added logic to deal with deleting a category still assigned
+ to a budget
+ * Fixed logic that deletes categories to work correct even if no
+ transaction is assigned to that category but it is referenced
+ by a schedule or budget
+
+2008-05-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Dutch translation from Bert Keuter
+ * Fixed crash when saving institution data from editor that was opened
+ using a double click in the institution view
+ * Updated Portuguese translation from José Jorge
+
+2008-05-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed keyboard handling in split editor widgets
+ * Updated German translation from Marko Kaening
+ * Updated Simplified Chinese translation from Roy Qu
+
+2008-05-14 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed forecast settings refresh
+
+2008-05-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Dutch translation from Bert Keuter
+ * Updated German translation from Marko Kaening
+ * Regenerated POT file
+ * Bumped version number to 0.9.1
+ * Bumped min KDE version to 3.4.0
+
+2008-05-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Dutch translation from Bert Keuter
+ * Updated German translation from Marko Kaening
+ * Added Sweden to stats.pl for translations
+
+2008-05-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * New files will be name $HOME/$USER.kmy
+
+2008-05-08 Alvaro Soliverez <asoliverez@gmail.com>
+ * Updated Argentinian translation
+
+2008-05-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Make menu key work in split editor
+
+2008-05-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed precision problem when opening the split transaction editor
+ for fees/interest in investment transactions
+
+2008-05-08 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed selection of date range combo in filter custom dialog
+
+2008-05-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed some old files from the repository
+ * Updated splash screen and titlelabel for 0.9
+ * Released 0.9
+
+2008-05-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed old KDevelop project file
+ * Added check for interest accounts to consistency check
+
+2008-05-05 Alvaro Soliverez <asoliverez@gmail.com>
+ * Modified default of Income Expense Pie Chart to not show row totals
+ * Fixed forecast account comparison when accounts have duplicate names
+
+2008-05-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Portuguese translation from José Jorge
+ * Updated Simplified Chinese translation from Roy Qu
+
+2008-05-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a problem while creating categories within the schedule editor
+ * Improved price search when exact date option is set in the API
+
+2008-05-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed problem in schedule view when amount of transaction is 0
+
+2008-05-03 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added account type headers to budget on home page
+ * Added conversion to lowest fraction to querytable
+ * Added budget data to charts
+ * Auto-select current budget in custom report dialog
+ * Added default Budget vs Actual graph
+
+2008-05-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added budget option to home page settings
+ * Fixed handling of home page settings that default to off
+ * Updated French translation from Patrick Petit
+
+2008-05-01 Alvaro Soliverez <asoliverez@gmail.com>
+ * Separated grid of pivottable into a separate file
+ * Added budget overrun report to Home page
+ * Removed unit tests for TCell
+ * Moved PivotGrid tests to their own class
+ * Do not show Budget on Home Page if budget list is empty
+
+2008-04-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed sorting of value columns in account views
+
+2008-04-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Simplified Chinese translation from Roy Qu
+ * If there are no favorite reports, don't show section on homepage
+ * Fixed sorting of value columns in investment view
+ * Added missing #include statements for GCC 4.3 as reported by Tony Graffy
+
+2008-04-26 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed account reference in Summary of Home Page
+ * Fixed fraction of deep conversion in pivottable to reference current account
+ * Added budget difference to report properties
+ * Change budget difference column to calculate on report init
+ * Added more comments to pivottable
+
+2008-04-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Turn off total column if report is configured for running sums
+ * Sort numeric account view columns by their numeric value
+
+2008-04-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Brazilian translation from Marcus Gama
+ * Fixed a crash when a split has a zero value during autofill
+
+2008-04-26 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added Summary to Home Page
+ * Added convert to investment return calculation to prevent overflow
+ * Added Incomes and Expenses to Summary
+
+2008-04-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Regenerated POT file
+ * Reverted patch from Arni Ingimundarson because it breaks income/expense
+ reports and shows a total column
+
+2008-04-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed forecast testcases due to interface change of createBudget()
+ * Updated Dutch translation from Bert Keuter
+ * Added Dutch homepage and Dutch whats_new html file
+
+2008-04-21 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed assignment of budget for budget only reports
+
+2008-04-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Brazilian translation from Marcus Gama
+ * Updated Dutch translation from Bert Keuter
+ * Added budget forecasting
+ * Added sort options for budgets in GUI
+ * Renamed kmymoney2.kdevelop into kmymoney2.kdevelop.sample
+
+2008-04-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added preliminary version of the budget calculation on historic data
+ * Added separate generate-messages target to Makefile.am
+
+2008-04-19 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added Investment Worth Graph report
+ * Added Difference To Minimum Balance column to Home Page
+
+2008-04-18 Alvaro Soliverez <asoliverez@gmail.com>
+ * Assign budget to report if Any is selected
+ * Select budget combo if Any is selected
+ * Fix pivottabletest check for total column
+
+2008-04-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added another validation to the consistency check feature
+
+2008-04-18 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * 30-day schedule interval
+
+2008-04-17 Alvaro Soliverez <asoliverez@gmail.com>
+ * Hide accounts in reports if closed and no transactions for
+ the report timeframe
+ * Replaced Until today by As of today in Time Combo
+
+2008-04-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Preserve date during auto transaction fill
+
+2008-04-16 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed total column of pivot reports
+
+2008-04-15 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed budget column when report timeframe is less than a year
+
+2008-04-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Italian translation from Sandro Bonazzola
+ * Date for interest and charges in reconciliation wizard follow
+ statement date
+ * Added percentage field to auto fill mode
+
+2008-04-14 Alvaro Soliverez <asoliverez@gmail.com>
+ * Adjust forecast days on Home View if lower than accounts cycle
+ * Fixed minimum limit of begin forecast day in forecast view
+
+2008-04-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Brazilian translation from Marcus Gama
+ * Updated French translation from Patrick Petit
+
+2008-04-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Dutch translation from Bert Keuter
+
+2008-04-12 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed account filter for budget report
+ * Enable show total columns switch on graphs - patch provided
+ by Arni Ingimundarson
+
+2008-04-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed budget report configuration problem
+ * Updated simplified Chinese translation from Roy Qu
+
+2008-04-10 Alvaro Soliverez <asoliverez@gmail.com>
+ * Updated Argentinian translation
+ * Fixed minor typo in forecast view title
+
+2008-04-10 Robert Wadley <robntina@users.sourceforge.net>
+ * Renamed some of the old template and made some minor template
+ changes to the old us template descriptions
+
+2008-04-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Italian translation from Sandro Bonazzola
+ * Regenerated pot file, merge changes into translations
+ * Fixed a problem in the documentation
+ * Cleanup Makefile.am in template/en_US
+
+2008-04-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed database menu items temporarily
+
+2008-04-09 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Updates (incomplete) to New Account Wizard documentation - ideas
+ from Danny Scott
+
+2008-04-08 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added Tax Transactions reports for Last Fiscal Year
+
+2008-04-07 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added Tax Transactions by Payee report
+ * Added Investment Holdings Pie report
+ * Fixed queryTable to filter tax by Payee correctly
+
+2008-04-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Ignore prior date changes when checking for autofill
+
+2008-04-06 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added Today option to time filter combo
+
+2008-04-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed an i18n string issue
+ * Fixed usage of KMM_DEBUG
+ * Fixed a bug in the QIF writer that caused a problem when
+ an account has no opening balance transaction
+
+2008-04-05 Alvaro Soliverez <asoliverez@gmail.com>
+ * Updated Argentinian translation
+ * Fixed minor typo in new account wizard
+
+2008-04-05 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Handle single-split GnuCash tx's; tidy up code
+
+2008-04-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated French translation from Patrick Petit
+
+2008-04-04 Alvaro Soliverez <asoliverez@gmail.com>
+ * Updated Argentinian translation
+
+2008-04-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Keep the fraction of an account with the account object in the
+ MyMoneyObjectContainer
+
+2008-04-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed some .desktop file issues reported by Andrey Cherepanov
+
+2008-04-02 Alvaro Soliverez <asoliverez@gmail.com>
+ * Updated Argentinian translation
+
+2008-04-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #1931100 (Minor visibility problem)
+ * Respect first fiscal day in register for fiscal year group marker
+
+2008-04-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Changed interface of MyMoneyAccount::adjustBalance() to
+ support stock splits
+ * Adjusted testcases
+ * Updated Portuguese translation from José Jorge
+
+2008-03-31 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed forecast beginDay test when day is last day of month
+
+2008-03-31 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Force focus to currency selection list in new user wizard
+ * Fixed tax report and added testcase for it
+
+2008-03-30 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added history method settings to forecast view
+
+2008-03-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Russian translation from Eugene Morozov
+ * Fixed an i18n issue in the sort order dialog
+ * Added option 'Enter key moves between the fields'
+ * Fixed typo in README
+ * Fixed forecast view to contain a title label and reduced margin to 0
+
+2008-03-28 Alvaro Soliverez <asoliverez@gmail.com>
+ * Removed duplicate code and cleaned up code in forecast
+ * Fixed miscalculation of total row in forecast summary and detail view
+
+2008-03-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Portuguese translation from José Jorge
+ * Regenerated and merged messages
+ * Added day field to fiscal year setting
+
+2008-03-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Allow changing the name and currency of the base accounts
+ * Added testcases
+ * Change the name of the base accounts to desired language when
+ loading file
+ * Updated French translation as provided by Patrick Petit
+ * Fixed an attribute string in MyMoneyStatement XML presentation
+
+2008-03-26 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added weighted moving average to history forecast as default for
+ history-based forecast
+ * Added setting to forecast to select between simple moving average and
+ weighted moving average
+ * Added test case to test empty template
+ * Added test cases for weighted moving average
+
+2008-03-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added missing #include statements for GCC 4.3
+
+2008-03-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed removal and loop operation in MyMoneyForecast::
+ -purgeForecastAccountsBasedOnHistory and
+ -purgeForecastAccountsList
+ which caused a lockup if no data is present
+
+2008-03-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added missing #include <typeinfo> statements
+
+2008-03-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a string problem in a dialog when reading an OFX statement
+
+2008-03-22 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed date locale in forecast view
+ * Added createBudget to forecast, to forecast budget based on history
+ * Added unit tests to check budget forecast
+ * Added budget forecast tab to forecast view
+ * Changed the way forecast is stored internally to date and cleaned up
+ code in forecast class
+ * Added skipOpeningDate setting to forecast
+
+2008-03-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed problem with investment transaction editor due to recent changes
+ of 'Favorites' handling
+
+2008-03-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Portuguese translation from José Jorge
+ * Fixed widget update problem in schedule editor dialog
+
+2008-03-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Allow Cancel option when leaving the transaction editor only when
+ leaving is caused by selection of another transaction in the register
+
+2008-03-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed crash with OFX download when IBAN field is empty (thanks to
+ John Whitlock for pointing it out) now for libofx < 0.9
+
+2008-03-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Portuguese translation from José Jorge
+ * Fixed a lock-up problem with transaction reports that contain transactions
+ with a single income or expense split
+ * Added 'Favorites' to the single selection mode account selectors
+ * Fixed crash with OFX download when IBAN field is empty (thanks to
+ John Whitlock for pointing it out)
+
+2008-03-13 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed layout of findTransactionDialog
+
+2008-03-12 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * New and updated German price sources (thanks to M. Zimmerman and others)
+
+2008-03-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Galician translation as provided by mvillarino
+
+2008-03-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed more spelling problems as reported by mvillarino
+
+2008-03-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed spelling problems as reported by mvillarino
+ * Fixed message catalog generation
+ * Regenerated and merged messages
+
+2008-03-07 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed ROI calculation when ending balance is zero
+
+2008-03-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Minor change in configure.in.in to support NetBSD's shell
+ * Added automatic insertion of path to perl interpreter for makekdewidgets
+ * Fixed a leftover problem from conversion of double to MyMoneyMoney
+ in reports
+
+2008-03-06 Alvaro Soliverez <asoliverez@gmail.com>
+ * Restored calculation of investment performance (IRR)
+ * Added new column on investment performance report to show ROI
+ * Restored original test case for IRR
+ * Fixed a crash on config report when not showing Include Transfers
+
+2008-03-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added checkbox to hide unused budget categories
+
+2008-03-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed setup of base currency when missing in file
+
+2008-03-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Last changes required to compile w/o KOffice being installed
+
+2008-03-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Always show register header in bold
+ * Size ledger divider according to the font size
+ * Refactored wizard modules into their own directory
+ * Resolved circular dependency between widgets and dialogs
+
+2008-03-02 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added settings box to forecast view
+ * Added button to run forecast on modified settings from forecast view
+ * Forecast settings are now only used on instantiating
+ * Adjusted forecast test cases due to new way of using settings
+
+2008-03-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a problem with entering budget values that end in 0 and
+ have no fraction (trailing zeroes were removed)
+ * Added some testcases to check formatMoney() in more details
+ * Added our own copy of libkdchart so we don't depend on KOffice anymore
+
+2008-03-01 Alvaro Soliverez <asoliverez@gmail.com>
+ * Skip beginForecastDate test cases if 1st or last day of month
+
+2008-03-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed alternating background colors in pivot table based reports
+ * Added vertical column border for budget vs. actual reports
+
+2008-02-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added compounding frequency widget to new account wizard for loans
+ * Allow share split transactions with (almost) arbitrary precision ratio
+
+2008-02-28 Alvaro Soliverez <asoliverez@gmail.com>
+ * Show all investment accounts in forecast
+ * Do not calculate account in forecast if there is no relevant
+ transaction for that account
+ * Adjusted forecast test cases for investment accounts
+
+2008-02-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed unused parentId information from budget account group
+ * Show details of split transaction as tooltip
+
+2008-02-25 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed performance calculation when no activity during the report timeframe
+ * Cleaned up test code in querytable and querytabletest
+
+2008-02-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Italian translation as provided by Vincenzo Reale
+
+2008-02-24 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed a crash due to precision formatting in forecast view
+ * Change performance return to show the current return, not
+ annualized - #1897433
+ * Updated performance return unit test
+
+2008-02-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added missing code changes due to interface changes
+ in ReportAccount::currency()
+
+2008-02-22 Alvaro Soliverez <asoliverez@gmail.com>
+ * Disable Include Transfers checkbox when filtering by Category - #1523508
+
+2008-02-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Require currency string and precision for all formatMoney() calls
+ * Fixed queryTable testcase to obey selected date formatting
+ * Prevent crash when hitting Ctrl-W while transaction editor is present
+
+2008-02-20 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added test case to check for correct date and value of closing
+ balance in query table
+
+2008-02-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added check for MyMoneyMoney constructor to avoid zero denominators
+ * Fixed a problem with unavailability of the 'mark transaction as' options
+ * Removed unused code
+ * Fixed persistancy of balance column setting in reports
+ * Fixed position of closing balance row in query table reports
+ * Reverted changes to unit tests made on 2008-02-15 by Alvaro
+
+2008-02-17 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed crash when calculating recent stock prices - #157905 at bugs.kde.org
+ * Added warning label about excluding transfers when filtering
+ transactions by Category
+ * Updated Argentinian translation
+
+2008-02-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed 'WARNING: KLocale: trying to look up "" in catalog.' at appl start
+
+2008-02-15 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed unit tests of querytable.cpp broken when adding foreign currency fixes
+
+2008-02-14 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added stock accounts to forecast for historic and scheduled-based methods
+
+2008-02-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated account templates
+
+2008-02-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Remember date of last imported transaction with account object
+ * Fixed a compiler warning
+
+2008-02-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Created new widget for account template loading
+ * Integrated that into the new user wizard
+ * New dialog for loading account templates once file is created
+ * Fixed home page settings
+
+2008-02-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Labels in wizards use KDE color settings
+ * Fix label frames in new user wizard when started multiple times
+
+2008-02-07 Robert Wadley <robntina@users.sourceforge.net>
+ * Reorganized the old template into new, more modular category
+ templates and added descriptions.
+
+2008-02-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Keep group membership when saving to a local file
+
+2008-02-07 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed forecast tests for minimum, maximum and average balance methods
+
+2008-02-06 Alvaro Soliverez <asoliverez@gmail.com>
+ * Changed forecast negative numbers to use KMyMoney settings
+ * Changed detail forecast to show negative by cell not row - #1877719
+ * Added negative color to advanced forecast - #1877719
+ * Added beginDay to calculation of accountMinimumBalanceDateList in forecast
+ * Removed old setting and method for trendBasedForecast from home page
+
+2008-02-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed removal of categories
+
+2008-02-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Ask user if last payment for schedule should be reset in case the next
+ due date is changed to a date prior to the last payment - patch supplied
+ by Colin Wright
+
+2008-02-03 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * New schedule intervals (3, 8 wks) - patch supplied by Colin Wright
+
+2008-02-02 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed calculation of foreign currency balances and prices in transaction reports
+
+2008-02-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed the example on keeping a stable and development version
+ on the same machine.
+
+2008-02-02 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed calculation of foreign currency in transaction reports - #1369048
+
+2008-02-01 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added missing files for submissions and settings chapter
+
+2008-02-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed extra qualifier from subAccountByName() declaration
+
+2008-01-31 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added submissions chapter to project handbook - #1394772
+ * Added settings chapter to project handbook
+ * Added option to Makefile to preview project handbook
+
+2008-01-31 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't create the same parent account if it already exists during
+ account creation
+
+2008-01-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't run overdue test between 28th and 2nd
+ * Resolved a bunch of compiler warnings
+
+2008-01-29 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed error calculating beginDate when currentDate plus cycle equals beginDay - #1877701
+
+2008-01-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Applied documentation update provided by Colin Wright
+
+2008-01-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Applied documentation update provided by Colin Wright
+
+2008-01-28 Alvaro Soliverez <asoliverez@gmail.com>
+ * Modified home page forecast cycles according to begin day setting - #1877701
+
+2008-01-28 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added begin day of forecast setting and default - #1877701
+ * Added calculation to start forecast according to begin day of
+ forecast setting - #1877701
+ * Modified summary and advanced to show intervals according to
+ begin day of forecast setting - #1877701
+
+2008-01-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Block delete payee function when a payee was just deleted
+
+2008-01-26 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed width of summary list when over the width of the screen
+
+2008-01-25 Alvaro Soliverez <asoliverez@gmail.com>
+ * Fixed off-by-one error when calculating total variation in detail forecast view
+
+2008-01-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added sort indicator to payees list
+ * Added context menu key handling to payees, investment and budget view
+ * Fixed crash when using context menu key in account trees
+ * Handle context menu the KDE way
+
+2008-01-24 Alvaro Soliverez <asoliverez@gmail.com>
+ * Swapped rows and columns in detail forecast view
+
+2008-01-24 Alvaro Soliverez <asoliverez@gmail.com>
+ * Added calculation of base currency balances in Investment
+ Performance report - bug #1699859
+ * Removed comments of ReportAccount::deepCurrencyPrice and
+ baseCurrencyPrice where it said it would return 1.0 if date was not exact
+
+2008-01-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added Context Menu Key handling to ledger and account tree views
+
+2008-01-23 Alvaro Soliverez <asoliverez@gmail.com>
+ * Adjusted width of forecast columns when refreshing
+
+2008-01-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Preserve last selected tab of schedule view
+ * Use KMyMoneyGlobalSettings for autosave options
+
+2008-01-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Write out id to XML via MyMoneyObject
+ * Adjusted testcases
+ * Keep modified budget values when switching to a different view
+ * Keep focus when changing budget values
+ * Hide unused budgetary categories when 'Hide unused categories' filter
+ is active
+ * Deactivate clear button if budget value is zero
+
+2008-01-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Improved sorting of schedules view
+ * Show date in schedule view according to KDE settings
+ * Double click on scheduled transaction opens schedule editor
+ * Added two changes from the debian distribution
+ * Clear out the reconciliation account when closing a file
+
+2008-01-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Show date field when manually updateing prices
+ * Don't show 'Accounts with no institution' item in institution view
+ if there are no such accounts
+ * Use date of last new transaction entered also in
+ investment transaction editor
+
+2008-01-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed text from buttons on top of budget list in budget view
+ * Converted QMessageBox calls to use KMessageBox in GNCConverter
+
+2008-01-17 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Yahoo Canada Online Quote Source - contributed by Danny Scott
+
+2008-01-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Chinese translation provided by Roy Qu
+
+2008-01-16 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Added FT Quote source for UK Funds - contributed by Peter Lord
+
+2008-01-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #1866855 with patch provided by Chris Roland
+ * Pressing the enter key during budget value entry moves the focus to the
+ next (value) field.
+
+2008-01-14 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Fix desktop file errors
+
+2008-01-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a bunch of reported budget GUI issues
+ * Replace KMyMoneySettings with KMyMoneyGlobalSettings
+ * Added searchline widget to schedules view
+
+2008-01-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a bunch of open budget GUI issues
+ * Adapted testcases to latest changes
+
+2008-01-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added 'Not marked' as new item to status filter
+ * Show date field when manually updateing prices
+
+2008-01-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed operator == for MyMoneyPayee to include match parameters
+ * Cleaned up payees view and match parameter handling
+ * Cleanup up budget view and introduced an OK button as in payees view
+ * KBudgetValues widget sends out valuesChanged() signal upon all changes
+
+2008-01-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Exchanged order of test for OFX and KDChart during configure
+ to avoid problems with additional libraries (eg curl) as reported
+ here: http://sourceforge.net/mailarchive/message.php?msg_name=478558AB.1080003%40lemmons.name .
+ * Improved error messages when invalid transaction id/key is requested
+ * Improved consistency check to find invalid references in schedules
+
+2008-01-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added copy budget feature
+
+2008-01-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a problem with price precision in currency calculator dialog
+ * Fixed a warning in kmymoneytest.cpp
+ * Fixed problem with keypad return key during transaction entry
+ * Removed some unused code
+ * Made some improvement to the balance calculation
+ * Fixed scrolling problem in ledger when moving the focus with the
+ cursor keys.
+ * Refuse loading of data file only if openingBalance is not equal zero
+
+2008-01-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Show a marker in the ledger when transactions are possibly filtered
+ This is shown if the filter is set to any other date than 1900-1-1
+ * Removed widget in settings dialog that should not be visible
+ * Fixed loan creation when no payout transaction was selected
+ * Fixed popup of price editor during loan creation
+ * Improved detection of splits for loan payment transaction in
+ loan editor
+ * Removed all references to MyMoneyAccount::openingBalance
+ * Fixed a bug in the XML loader that caused the date order to be incorrect
+ * Fixed QIF writer to write out the opening balance as expected
+
+2008-01-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed problem with creating new transactions when quick filter is active
+ * Save transaction also on Return pressed on status combo box
+ * Preset status combo box with 'Not Reconciled' for new transactions
+ * Got rid of some openingBalance() and setOpeningBalance() calls
+ * Updated the reporting testcases to construct an opening balance transaction
+ * Removed an automatic loan account fix. User has to use version 0.8.7
+ or higher in 0.8 branch to fix the problem.
+ * Fixed endless loop when loading a broken XML file
+ * Fixed a bug in processing of online statements
+ * Fixed MyMoneyObjectContainer handling for updated objects
+ * Fixed bug introduced on 2007-12-06 where share amount was loaded off
+ by a factor of 1/1000
+ * Added general method to create brokerage account name in MyMoneyAccount()
+ * Removed unused MyMoneyFile::updateBalances()
+
+2008-01-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a problem in LibOFX 0.9 adapter implementation that caused
+ statement downloads to fail
+ * Reduced minimum version for LibOFX to 0.8.2
+
+2008-01-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Changed behavior of Return-Key in transaction editor. Acts like a TAB
+ key except for the amount field where it acts as the Enter button.
+
+2008-01-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added patch provided by Alvaro Soliverez to fix total for yearly budgets
+
+2008-01-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added option to show/hide row totals in reports
+ * Removed default total column from non income/expense reports
+
+2007-12-31 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Store all OFX bank list files in ~/.kde/share/apps/kmymoney2
+ * Use different VER settings to retrieve information in ofxpartner
+ * Added webprice quote patch as provided by David Pugal
+ * Fixed crash when changing account limits
+ * Added reporting patch provided by Alvaro Soliverez
+ * Leave reports in their group when switching to a different translation
+
+2007-12-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed sign problem when selling shares with a price per transaction setting
+ * LibOFX 0.9.0 now mandatory
+ * Added missing testcase to consistency check
+ * Preset brokerage account if available for investment transactions
+
+2007-12-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Catch exceptions thrown in libxml++ during OFX setup
+ * Store OFX bank list files in ~/.kde/share/apps/kmymoney2
+
+2007-12-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added feature to start KDE language settings from within KMyMoney
+ * Updated French translation as provided by Patrick Petit
+ * Fixed a crash when updating multiple transactions
+ * Fixed documentation to mention 19% VAT for Germany
+ * Added i18n support to strings in mymoneyfile.cpp
+ * Fixed the problem of GPG photo id's popping up
+ * Allow to create a brokerage account for investment accounts
+
+2007-12-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a problem when loading price information in the investment
+ transaction editor
+
+2007-12-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added testcase for MyMoneyMoney::reduce()
+ * Fixed price handling when loading a transaction into the editor
+ to prevent rounding errors
+
+2007-12-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Update balance visibility after sorting the ledger items during view load
+ * Added feature to either enter price/share or price/transaction
+ to the investment transaction editor
+
+2007-12-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Applied budget report patch provided by Alvaro Soliverez
+
+2007-12-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed problem with the calculator when starting to enter numbers
+ using the mouse
+ * Fixed problem with various negative sign positions
+ * Show negative numbers in pivot table reports in the selected color
+ * Removed unused filter settings on the register tab of the settings dialog
+ * Mark splits as cleared when accepting or matching a transaction
+ * Show not reconciled and cleared transactions when setting the quick
+ filter in the ledger view to 'Not reconciled'
+
+2007-12-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added budget() to MyMoneyReport to return the budget id
+
+2007-12-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed layout problem in report configuration dialog
+ * Fixed payee assignment when deleting a payee
+
+2007-12-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Take the character pressed to start editing a split transaction
+ as the first character of the category
+ * Get rid of kMyMoneyDateInput::getQDate()
+ * Store real budget id with report
+ * Fixed the signature of a signal
+ * Added a budget selector widget to report configuration
+ * Fixed unknown signal/slot problem during startup
+
+2007-12-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Double click in number field assigns next check number
+ * Fixed type assignment for schedules to be created
+ based on existing transactions
+ * Added split fees and interest to investment transaction editor
+ * Use two digit month and day values in QIF export
+
+2007-12-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a bug in transaction reports which only showed in the testcases
+ * Improved the balance calculation of transaction reports
+ * Show running balance column in 'transactions by account' reports
+
+2007-12-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added patch provided by Alvaro Soliverez
+
+2007-12-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Remove payee from required field for schedules
+
+2007-12-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed unnecessary assignment to MyMoneyPayee::null
+ * renamed budgetsubaccounts() to budgetSubaccounts() in MyMoneyBudget
+ * Added more budget entry features (use previously entered value when
+ switching to another method (eg. from monthly to yearly)
+ * Added clear button to clear the budget values
+ * Added running balance column to transaction reports
+
+2007-12-12 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Update default quote strings for Yahoo France
+
+2007-12-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't select different transaction if action is cancelled
+
+2007-12-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Resolved duplicate function parameter name
+ * Added plugin dialog to show plugin information
+ * Added warning message when quitting transaction dialog editor
+ via selection of a different transaction
+ * Don't show the sort column shaded in KListViews
+
+2007-12-10 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Make GNC import error message translator-friendly
+
+2007-12-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a precision problem when entering the number of shares
+
+2007-12-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated Italian translation as provided by Vincenzo Reale
+
+2007-12-09 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Fix Finance::Quote interface to use 'last' price
+
+2007-12-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Dump POT-Creation-Date and PO-Revision-Date in XML output
+ * Added all available language files to the po directory
+ * Created kmymoney.pot and merged all language files
+
+2007-12-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * adapted MyMoneyStatement interface to use MyMoneyMoney objects
+ for monetary values instead of doubles
+ * Removed KBanking plugin. From now on, the plugin can be found under
+ http://www.aquamaniac.de/sites/download/packages.php or via SVN under
+ http://devel.aqbanking.de/svn/kmm_plugins/banking/trunk
+ * Use same font size for reports as for home page
+ * Renamed pt_PT.po into pt.po
+
+2007-12-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added readOnly property to kMyMoneyEdit
+ * Fixed allowEmpty property in kMyMoneyEdit
+ * Revised budget value widget
+
+2007-12-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed selection of all transactions with ctrl+a
+ * Applied patch provided by Alvaro Soliverez
+ * Fixed build system to include new files in tarball
+
+2007-12-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Store original price with investment splits for display purposes
+ * Improved budget UI (except reports)
+
+2007-11-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Applied patch provided by Alvaro Soliverez to fix some budget report issues
+ * Improved budget view
+
+2007-11-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added logic to the consistency check to remove invalid payee ids
+ and replace them with correct ones
+ * Moved account balance graph into own dialog
+
+2007-11-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Applied patch provided by Alvaro Soliverez with a few modifications
+
+2007-11-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a problem in KFindTransactionDlg when entering a user defined date
+
+2007-11-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't include finished schedules in reports
+
+2007-11-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added standing orders and bank transfer as payment types for schedules
+
+2007-11-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Use name match if no ticker symbol is present in
+ security record of OFX file
+ * Fixed a problem when creating scheduled transactions that the
+ shares field of the second split was set to 0
+
+2007-11-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a problem when importing OFX statements with cash dividends
+
+2007-11-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed QIF importer to work with new wizards
+
+2007-11-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't send out data changed signal during file save operation
+ * Imported GnuCash account template files
+
+2007-11-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added current and last fiscal year to period combo
+ * Added period combo widget to find transaction dialog
+
+2007-11-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added settings for beginning of fiscal year and drawing of markers for it
+ * Added ledger markers for current and previous fiscal year
+
+2007-11-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Made some adjustments to charts. Thanks to David Houlden for some of them
+ * Completed the loan account section in the new account wizard
+
+2007-11-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added new MyMoneyMoney::formatMoney() convenience method
+
+2007-10-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't show unused securities/currencies in update stock price dialog
+
+2007-10-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a problem in forecast module (take initial balance into account)
+ * Adjusted a few signatures of forecast module for better performance
+ * Fixed a problem with split detection in split transaction editor
+
+2007-10-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added forecast patch provided by Alvaro Soliverez
+ * Modified layout and changed QListView* into KListView* objects in forecast
+ * Don't include disabled widgets in mandatory field checks
+ * Fixed a layout problem in enter and edit schedule dialogs when resizing
+ * Fixed a sizing problem with KMyMoneyCombo widgets
+ * Removed a spacer in the base wizard logic
+ * Improved new account wizard
+
+2007-10-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed some problems around changing the next due date of schedules
+ * Added testcases to catch those problems
+
+2007-10-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a few problems around the split transaction editor
+
+2007-10-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed problem during creation of schedules reported by David Houlden
+ * Fixed schedule XML loader to adjust old style nextDueDate information
+
+2007-10-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed build problems caused by recent changes
+
+2007-10-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Applied forecast patch provided by Toan Nguyen
+ * Applied testcase provided by Alvaro Soliverez
+ * Initial implementation of the new loan wizard
+
+2007-10-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Improved sizeHint() of KMyMoneyCombo
+
+2007-10-12 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Gnucash importer
+ - Fix problem caused by improbable zero share quantity
+
+2007-10-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Allow creation of payees while editing schedules
+ * Fixed logic to append suffix on the home view for
+ accounts with the same name
+ * Fixed re-assigning of an account to a different institution
+
+2007-10-09 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Preserve fraction denominator of securities in GNC importer
+
+2007-10-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Implemented #1394794 (Duplicate schedule)
+
+2007-10-07 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Get rid of varargs from GNC importer
+
+2007-10-06 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Gnucash importer
+ - add new schedule intervals
+ - improve status reporting
+ - debug changes
+
+2007-10-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added updated testcases for MyMoneyForecast as provided by Alvaro Soliverez
+ * Added introduction page to new user wizard which is shown
+ to first time users
+
+2007-10-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added operator < to MyMoneyInstitution
+ * Added operator < to MyMoneySecurity
+ * Replaced new account wizard
+ * Started implementation of KMyMoneyPeriodCombo
+ * Sort entries in KMyMoneySecuritySelector
+ * Changed display in KMyMoneySecuritySelctor from "Symbol (Name)"
+ to Name (Symbol)"
+ * Improved KMyMoneyWizard base class
+ * Disable 'postpone reconciliation' and 'finish reconciliation'
+ buttons during transaction edit
+ * Updated tips file
+ * Applied forecast patch provided by Alvaro Soliverez
+
+2007-10-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Use KDE window title font for KMyMoneyTitleLabels
+ * Setup default buttons for KMyMoneyWizard
+
+2007-10-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Avoid display of multiple entries for single time schedules on homepage
+
+2007-10-01 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * GnuCash importer
+ - correct schedule import
+ - handle GnuCash 2.2 files
+
+2007-09-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed problem when creating a payee during schedule creation
+
+2007-09-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Clear payee search filter when using the 'Goto payee' function
+ of the ledger view
+ * Don't offer creating of a schedule while entering a schedule
+ * Show warnings if a limit has been reached
+ * Fixed some schedule creation problems
+
+2007-09-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Modified OFX importer to use Qt::UTC as dateformat
+
+2007-09-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added functionality to help buttons in edit and enter schedule dialog
+ * Added quick search to accounts and categories view
+ * Added 'collapse all' and 'expand all' buttons to accounts
+ and categories view
+
+2007-09-15 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Update developer documentation
+
+2007-09-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added feature to create schedule for new transactions with a postdate
+ in the future
+ * Fixed endless loop caused by scheduled transactions with single occurence
+ * Fix a problem, if last payment and next due date of a schedule are
+ identical
+
+2007-09-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Overhauled schedule editor
+ * Store the next due date of a schedule as the post date of the
+ transaction object within the schedule
+ * Improved MyMoneyBudget API (use references where possibly)
+ * Added testcase to test the next due date adjustment according to the
+ selected weekend option
+ * Added feature to create schedule based on existing transaction
+ * Don't allow 'skip transaction' for schedules with frequency 'once'
+
+2007-09-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed problem with loading a split w/o account id
+ * Don't allow to add/modify a split w/o account id
+ * Updated testcases
+ * Thanks to David Walling for providing the anon file to catch that one
+
+2007-09-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed crash when editing splits w/o transaction form. Thanks to
+ Michael Aichler for tracking it down.
+
+2007-09-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Obey closed accounts in pivot table based reports
+
+2007-09-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed display of first row in investment transaction form
+ * Use alternate background in the investment view
+ * Control visibility of rows in the transaction form on a per
+ transaction basis
+
+2007-08-31 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed creation of schedules
+ * Redefined tabstops in edit schedule dialog
+ * Engine throws exception when the application tries to store a
+ transaction that contains splits not referencing an account
+ * Don't show closed accounts in querytable based reports
+ * Prevent crash when cancel out of the exchange rate editor during
+ the entry of a scheduled transaction
+ * Force usage of GPG agent if environment variable GPG_AGENT_INFO is filled
+
+2007-08-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't show closed accounts in account query table
+
+2007-08-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed unused code from KMyMoneyUtils
+
+2007-08-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added feature to close investments (stock accounts)
+ Maybe, the report functions need to be adjusted as well
+
+2007-08-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Improved class documentation for MyMoneyFile::attachStorage()
+
+2007-08-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed layout of GNC import options dialog
+ * Fixed processing of ROOT type account entry in GNC importer
+
+2007-08-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added option to hide finished schedules
+ * Added option to hide closed accounts
+ * Added feature to 'Select all transactions' via Ctrl+A
+ * Added note that closed accounts will be not shown if the option is active
+ whenever an account is closed by the user
+
+2007-08-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Allow to create an account with the same name on the same
+ hierarchy level
+ * Allow to load 'Who am I' address from standard KDE addressbook
+
+2007-08-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added release target in Makefile.dist as proposed by Tony Bloomfield
+ * Replaced QMessageBox with KMessageBox (except in GNC importer)
+
+2007-08-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed duplicate entry of XFP as default currency
+
+2007-08-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed graph in account balance history
+
+2007-08-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Replaced "acc.accountType == Stock" with "acc.isInvest()"
+ * Fixed #.... (Allow change of stock type)
+ * Merge message files during 'make package-messages'
+
+2007-08-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added account field to standard transaction editor
+ * Allow to change account during entry of scheduled transaction
+ * Removed references to KMyMoneySettings in designer plugin
+
+2007-08-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added interface for reconciliation report
+
+2007-07-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added "CFP franc" as currency
+
+2007-07-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed typo. Thanks to David Houlden for finding it
+
+2007-07-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Made MyMoneyFile a static singleton and MyMoneyFile::instance() an
+ inline method
+ * Adapted testcases to work with static singleton
+ * Added toolbutton for HBCI account update to toolbar
+
+2007-07-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed crash when online price update for exchange rate failed
+ * Removed some unused engine functions (accountValue/totalAccountValue)
+
+2007-07-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added framework to modify axis parameters in PivotTable::drawChart()
+ * Fixed creation of account hierarchies
+
+2007-07-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed the 'oldreports' option
+ * Allow creation of multi currency categories
+ * Allow changing the base currency
+ * Removed default parameter of MyMoneyPrice::rate()
+ * Base currency activities (new, edit, delete, etc.) on KActions
+ * Show networth graph on home page in base currency
+ * Fixed a problem with ledger not displaying all transactions when
+ loading a new account
+ * Added Euro conversion rates for MTL (Maltese Lira) and CYP (Cyprus Pound)
+
+2007-07-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * calendar->monthString() was the wrong candidate. use calendar->monthName()
+ instead. The monthName(QDate(),bool) version is broken on older KDE systems
+ so we use monthName(int,int,bool) instead
+ * Don't cycle through 'Reconciled' state during reconciliation when
+ left clicking into the reconciliation state column of the ledger
+ * Adjust ending balance when changing statement date during reconciliation
+
+2007-07-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed problem while determining the last used id for accounts
+ * Remove all references from reports when objects are deleted
+ * Don't use setId() directly
+ * convert locale->monthName() to locale->calendar->monthString
+
+2007-06-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed crash when saving user information
+
+2007-06-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed unnecessary code in MyMoneyReport
+ * Made inclusion of stylesheet in HTML exported reports optional
+ * Enable/disable also the split-button of the category widget
+
+2007-06-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Rewrote the XML parser to be based on a SAX model
+ * Provide readAll() with larger block sizes in KGPGFile
+ * Fixed problem with balance cache mishits
+ * Fixed crash when reading an encrypted file that does not contain
+ the "kmm-encryption-key" is missing in the file (could happen when
+ reading rather old files)
+ * replaced QDate::shortMonthName() with KGlobal::locale()->monthName()
+ * Only assign check numbers for scheduled payments, if payment type
+ is 'write check'.
+
+2007-06-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed update of price editor when deleting prices
+
+2007-06-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed price dialog loading
+ * Fixed deleting accounts that have no sub-accounts
+
+2007-06-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added hook for trend based forecast on homepage
+ * Added some details about the account types to the file info dialog
+
+2007-06-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed creation of KMyMoneyWizard buttons to work when the KDE
+ global setting 'icons on buttons' has been turned off
+
+2007-06-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added 'Move to account ...' logic
+ * Keep track of all toolbar attributes
+
+2007-06-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added new user wizard logic
+
+2007-06-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added #1349502 (Report all categories in income/expense report)
+
+2007-06-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added chinese entries to desktop files
+ * Improved new user wizard
+ * Show limits in account balance graph
+
+2007-06-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Pickup new options for the homepage items
+
+2007-06-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added networth forecast graph to homepage
+
+2007-06-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added updated account templates as provided by mvillarino
+
+2007-06-02 Robert Wadley <robntina@users.sourceforge.net>
+ * added a "forcast" icon
+
+2007-05-31 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * !!! Note SQL support is broken with this version. Will be fixed later. !!!
+ * Move MyMoneyObjectContainer to MyMoneyFile and make it a general cache
+ * Added start/commit/reject Transaction to seq access mgr
+ * Added 'last check number used' to accounts editor
+ * Don't allow to move stock accounts in institution view
+ * Modified new account wizard to use new widgets
+ * Modified new loan wizard ot use new widgets and fixed a bunch
+ of problems with unassigned share field where a value was present
+ * New account wizard did not set shares on credit card payment
+ * Added color setting for background of ledger markers
+ * Moved the transaction editor code from widgets/ to dialogs/
+ * Reduced circular dependencies between widgets/ and dialogs/ to a single one
+ * Removed some unused files
+
+2007-05-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't include splits referencing deselected categories in transaction
+ report by category
+
+2007-05-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added new account template files for Spain (Spanish and Galician)
+ as provided by MVillarino
+ * Fixed #1723325 (Cannot quit the program)
+
+2007-05-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed crash when closing the passive popup of the date edit widget
+ during transaction editing
+
+2007-05-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Include style sheet contents in exported HTML reports
+ * Prepare integration of general object cache in MyMoneyFile layer
+
+2007-05-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added dialog to select the transaction to be used for autofill if
+ multiple transactions exist for the same payee
+ * Show all matching splits in find transaction dialog
+
+2007-05-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Use prettyURL() where appropriate
+ * Renamed KMergeTransactionDlgDecl into KSelectTransactionDlgDecl
+
+2007-05-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Better detection of write errors in GPGFile component
+
+2007-05-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added patch update to QueryTable provided by Demitrios Vassaras
+ * Make inclusion of specific accounts (tax, investment or loan)
+ in reports mutually exclusive
+ * Added ability to 'Save as...' to a network drive
+ * Check if save operation would override a file and ask the user for
+ confirmation
+
+2007-05-12 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Additional database debug options
+ * Fix database account balance problem
+
+2007-05-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added report configuration changes supplied by Demitrios Vassaras
+
+2007-05-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed presetting the tabbar when starting to edit an existing transaction
+ * Applied remaining patches to the report logic provided by Demitrios Vassaras
+ * Allow investment transactions to be performed against credit card accounts
+
+2007-05-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Clear some transaction attributes before entering a schedule
+ * Added MyMoneyAccount::isLoan() and testcases
+
+2007-05-10 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Retain status of imported transactions
+ Patch supplied by Fernando Vilas
+
+2007-05-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed indentation problem in reports
+
+2007-05-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Add all features to auto schedule enter
+ * Prevent asking too many times for conversion rate during schedule entry
+ * Created interface class for PivotTable and QueryTable called ReportTable
+
+2007-05-05 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Fix crash when saving new file after database activity
+
+2007-05-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed rounding problem when entering investment transactions
+
+2007-05-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Renamed --newreports option into --oldreports
+ * Use new split based report logic by default
+ * Fixed crash when reports were opened
+ * Grey out 'Create schedule' as long as it is not implemented
+
+2007-05-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added support for stock splits to the pivot table based reports
+ * Improved performance (only create pivot table once) of report update
+ * Improved display of delta for changed scheduled transaction during
+ schedule entry
+ * Fixed a label display problem in the investment transaction editor
+
+2007-04-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a problem with displaying numbers with high precision
+ * Added testcase to check for precision
+
+2007-04-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Applied patches to the report logic provided by Demitrios Vassaras
+ * Introduced TCell as the list member for TGridRows and initial code
+ to support stock splits in reports (not working yet)
+ * Re-enabled the value column in the investment register
+
+2007-04-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed sign problem when reconciling liability accounts
+
+2007-04-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added moldavian leu as currency
+ * Fixed an autofill problem
+ * Show the investment account for the 'goto account' feature
+
+2007-04-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed all references to MyMoneyObserver and MyMoneySubject
+ (testcases still use it)
+
+2007-04-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Support 'goto account' also to stock accounts and back
+
+2007-04-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed matching transaction logic to work with investment transactions
+ * Allow deletion of categories even with transactions assigned on the GUI
+ level. Re-assign them prior to deletion.
+ * Fixed a problem with changing the amount in an existing VAT transaction
+ * Fixed disappearing text 'Split transaction' in the category widget
+ when opening the split transaction editor
+
+2007-04-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added missing headers to option menus
+
+2007-04-16 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Database backend - phase 2
+
+2007-04-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Keep expanded items in reports view expanded when reloading
+ * Use new KMyMoneyPayeeCombo in the transaction reassign dialog
+ * Fixed moc inclusion for file info dialog
+ * Renamed KTransactionReassignDlg into KPayeeReassignDlg
+
+2007-04-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Reactivated the automatic entry of scheduled transactions after file open
+
+2007-04-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added display of investment value
+ * Added balance display for investments
+
+2007-04-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added minimum balance and maximum credit fields to account editor
+ (not functional yet - storage works)
+ * Reworked the 'Enter schedule transaction' dialog to use new transaction
+ editor
+ * Update schedules view only if visible
+ * Allow individual column resize in schedules view
+
+2007-04-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a problem with the Ok button in the report configuration dialog
+
+2007-04-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a problem when creating new investment transactions
+ * Only update home page if visible
+ * Don't jump to investment view after editing investment transactions
+
+2007-04-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed code of old kMyMoneyCategory widget
+
+2007-04-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a long pending problem with the visibility of group markers
+ * Always allow click on reconciliation column to change reconciliation state
+ * Clicking the reconciliaiont column now toggle through the possible
+ reconciliation states. Same applies for Ctrl-Space.
+ * Mark transaction cleared now has a shortcut of Alt-Ctrl-Space
+ * Fixed autofill problem
+
+2007-04-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Schedule editor does not wipe out split transaction when amount was changed
+ * Cleanup (removed unused files)
+
+2007-04-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed automatic VAT assignment when gross amount was selected
+ * Merge transaction dialog uses new register code
+ * Added menu entries for debug purposes to toggle timers and traces
+
+2007-03-31 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Moved isAssetLiability and isIncomeExpense from
+ ReportAccount to its base class MyMoneyAccount
+ * Added filter option 'last 11 months' which covers the last 11 full months
+ * Reworked the search transaction dialog to use the new register code
+ * Added sort feature to search register
+ * Fixed the institution testcases to support KVPs
+
+2007-03-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed some problems around the latest changes
+ * Get rid of annoying message that account with same name already exists
+ * Corrected items in budget time period combo box
+
+2007-03-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated split transaction dialog to use new KMyMoneyCategory object
+ * Added budget view changes as provided by MVillarino
+
+2007-03-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added BIC and IBAN fields to institution and account dialogs
+ * Removed manager field from institution dialog
+ * Add new columns to account / category view
+ * Mark mandatory fields in account and institution edit dialogs
+
+2007-03-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Code cleanup (remove unused code)
+ * Don't try to reload default reports from the engine
+
+2007-03-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Support empty thousand separator setting
+ * Added new category widget to enter/edit schedule dialogs
+ * Don't append currency id to account name if not foreign currency
+ when creating CSV export of pivottable reports
+
+2007-03-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Update report if report configuration has been changed
+ * Avoid possible usage of invalid pointer in KMyMoneySelector
+
+2007-03-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated reconciliation wizard to support
+ - entry of payee
+ - multiple currencies
+ - automatic calculation of start end ending balance of statement
+ - set the statement date to the same day of the following month if
+ the time span since the last statement is larger than a month
+ * Fixed a problem when loading non VAT transactions into the editor
+ * Clear the memo for the second split during autofill to allow overriding
+ the text by the user
+
+2007-03-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated kmymoney2.desktop
+
+2007-03-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Use KDE conrolled date format for kschedulebriefwidget
+ * Fixed a problem with category creation during transaction entry
+ * Added two new columns to category and accounts view
+
+2007-03-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed column width of price in investment register
+ * Respect global price precision setting in price edit widget in
+ investment transaction editor
+ * Added some budget view patches provided by mvillarino
+ * Fixed a crash in KMyMoneyCheckListItem and KMyMoneyListViewItem
+
+2007-03-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added some russian files as provided by Andrey Cherepanov
+ * Fixed title of new file dialog to be based on QString rather than char*
+ * Fixed a few other i18n problems reported by Andrey Cherepanov
+ * Fixed duplicate opening of split edit dialog in some circumstances
+
+2007-03-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Preload payee widget for new schedules
+ * Only send out update signal from engine after list of price updates
+ has been processed to speed up the operation
+ * Modified the way splits are selected for pivot table reports back to
+ original code but added a filter for text and amount range.
+ * Fixed testcase support (global newReport variable)
+ * Send out MyMoneyFile::dataChanged() once a new file is loaded
+ * Use a non-null account id when creating InvestmentTransaction objects
+
+2007-03-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added method to remove the buttons from a kMyMoneyAccountSelector
+ * Correctly fill the account selectors in the new loan wizard
+ * Replaced setId(QCString()) with clearId()
+ * Update reports only when required
+ * Provide MyMoneyFileBitArray to suppress warning when index to QBitArray
+ is out of bounds
+ * Resolved some compiler warnings
+ * Provide --newreports option also in non-debug versions
+ * Fixed a severe bug which I introduced on 03-15 with the reportAllSplits
+ change. Files written with this version could not be read in again.
+ * Fixed calculation of values in the loan wizard
+
+2007-03-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added logic for auto increment of check number to transaction editor
+ * Rearranged the register settings dialog (added new tab)
+
+2007-03-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Control character that is produced by the comma on the numeric keypad
+ to be the monetary decimal symbol regardless of keyboard layout
+ * Return all splits from MyMoneyTransactionFilter when no filter is
+ set but reportAllSplits is set
+ * Changed the way splits are selected for pivot table based reports
+ This is only available when KMyMoney is started with option --newreports
+ and has been compiled with --enable-debug=yes or --enable-debug=full
+ * Re-use post date of a new transaction for next new transaction
+ * Fixed a problem when autofilling a split transaction
+
+2007-03-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a couple problems introduced with yesterdays changes
+ (Thanks to Bob Ewart for spotting them)
+
+2007-03-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed transaction tab from investment view
+ * Removed references to kMyMoneyPayee and replaced them with
+ the new widget KMyMoneyPayeeCombo
+ * Added option to synchronize the account in the ledger and investment view
+
+2007-03-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added network transparent file access to import dialog
+
+2007-03-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Improved layout of find transaction dialog
+
+2007-03-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Replaced getQDate() with date() in ending balance dialog
+ * Fixed reconciliation of liability accounts
+
+2007-03-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Include children of investment accounts (stock accounts) inthe
+ reports if the expert mode is not enabled
+ * Fixed a bunch of warnings
+ * Improved handling of multiple selected transactions
+ * Applied some (modified) patches provided by Demitrios Vassaras
+
+2007-03-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a problem detecting finished schedules
+
+2007-02-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Automagically remove the yellow 'imported' background when a
+ transaction is modified and has a category
+
+2007-02-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't allow deletion of a category if still referenced by schedule
+ * Allow creation of new transactions in new (empty) accounts
+
+2007-02-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added statistics script to automaticall generate an overview
+ about the current status of the translations
+ * Don't create a scheduled transaction containing splits w/o account ref
+
+2007-02-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated PHB to have correct CVS examples
+
+2007-02-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Force a view reload at midnight
+ * Fixed a problem when adding new transactions with a number filled in
+ * Start the loan edit wizard when editing a loan account
+ * Removed some unnecessary files
+
+2007-02-14 Robert Wadley <robntina@users.sourceforge.net>
+ * added new title label for cvs version
+
+2007-02-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Switched to a newer splash screen
+ * Added (a bit improved) patch and testcase provided by David Houlden
+ * Corrected ISO code for new turkish lira and added old turkish lira
+ to the list of ancient currencies
+
+2007-02-14 Robert Wadley <robntina@users.sourceforge.net>
+ * Adjusted the size of the welcome page images (I got a large monitor for
+ Christmas and the image breaks apart when viewed full screen.
+ * Added some images to the pics directory to be used, or not, when needed.
+
+2007-02-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Assign the payee to category splits no matter what
+
+2007-02-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Prevent creation of accounts with the same name and the same parent
+ * Prevent moving an account to a destination that already has an
+ account with the same name
+ * Replaced ":" with MyMoneyFile::AccountSeperator where appropriate
+
+2007-02-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added account column to ledger view of categories
+ * Improved the 'goto account' function
+ * Fixed creation of account hierarchies if parts of the hierarchy already
+ exist
+ * Allow modification of check number while entering scheduled transactions
+ of type 'write check'
+
+2007-02-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Improved handling of hidden transactions in the register
+ * Allow usage of enter key on numeric keypad to enter transactions
+
+2007-02-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added Yahoo France web source
+ * Added french comment for kmymoney2.desktop
+ * Fixed Menu name in documentation for investment price update
+
+2007-02-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added ability to print home page
+
+2007-02-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a problem with detection of VPATH environment in Makefiles
+ Thanks to Bob Ewart for reporting
+
+2007-02-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed refreshing problem with search line widget in register
+
+2007-02-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed crash in KMyMoneyListViewItem::isAlternate() and
+ KMyMoneyCheckListItem::isAlternate()
+ * Added new price source "Gielda Papierow Wartosciowych" as provided
+ by Piotr Adacha
+
+2007-02-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Improved handling of category assignment in mulit selection
+ * Fixed detection of closed accounts in the account tree widget
+ * Use localized date format in reports
+
+2007-02-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't modify a transaction when marking for match operation
+ * Eliminated usage of import verify dialog
+
+2007-01-31 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added logic to accept imported transactions
+ * Added transaction menu to menu bar
+ * Use kde-xgettext as default and check that i18n(c,s) has been extracted
+ correctly during 'make package-messages'
+
+2007-01-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Converted the private data d-pointers to be of type "* const d"
+ * Fixed a bunch of missing i18n() calls as reported by Patrick Petit
+
+2007-01-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Some more fixes on the background color
+
+2007-01-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Reset the status filter when pressing the clear button
+ * Use the full width for the filter
+ * Prevent a crash when clearing a register
+
+2007-01-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't rely on the split id to generate a unique id for a ledger entry
+ It could change while updating a modifed transaction in the engine
+ and would therefor not be reselected after the update
+ * Setup the base currency correctly after loading a new file
+ * Removed unused code
+ * Fixed list background color usage and setting
+ * Fixed loading ledger for specific account from home page
+ * Added a status combo box to the register quick filter
+ * Fixed initial column width problem in accounts, categories and institutions
+
+2007-01-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't show a balance in the ledger if an entry has been skipped due
+ * Optimized painting of group markers
+ * Balance shown underneath the ledger is the current balance as of today
+ not including any future transactions
+
+2007-01-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * More work on invest transaction editor (should be functional now)
+
+2007-01-24 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Fix another database record count error
+
+2007-01-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * More work on invest transaction editor
+
+2007-01-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Allow column resizing in accounts, categories and institution view
+ * Remember column sizes of these views between sessions
+ * Added sort indicator to the lists in the above mentioned views
+ * Moved investTransactionTypeE from KMyMoneyRegister to MyMoneySplit
+ * Fixed path to title label background image
+
+2007-01-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed tab display when starting to create a new transaction via the tab
+
+2007-01-21 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Correct record counts
+
+2007-01-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Finished work on the RegisterSearchLine widget
+ * More work on the investment transaction editor
+
+2007-01-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed problem that postpone and finish reconciliation are disabled
+ whenever the corresponding account object changes (e.g. due to change
+ of a transaction)
+ * More work on the RegisterSearchLine widget
+
+2007-01-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed problem with actions being disabled after a transaction
+ has been entered
+ * Open ledger for investment account if one of its stock accounts
+ is selected
+
+2007-01-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added framework for RegisterSearchLine object (not yet functional)
+
+2007-01-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added new reconcile overlay icon provided by Rob
+ * Added display of reconcile overlay to institution and account icon view
+ * Fixed a problem with selecting transactions
+
+2007-01-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * More investment ledger work
+
+2007-01-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Support all UTF-8 characters in schedule list items and account editor
+ dialog caption
+
+2007-01-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added detection for libxml++-2.6 in libofx.m4
+ * Fixed Tony's pesky payee problem
+
+2007-01-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added speed search to the payees view
+ * Fixed prevention of using unsermake on some systems
+
+2007-01-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Only allow postpone and finish reconciliation in account for
+ which the reconciliation has been started
+ * Mark that account in the accounts view
+
+2007-01-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Return references to QStrings instead of copies in MyMoneySecurity
+ * Added sort by security for investment accounts
+ * Removed external visibility of sorting by 'entry date'. The user
+ can use 'entry order' instead. Internally we still need it.
+ * Fixed broken handling of Return and Escape during edit.
+ * Disconnect edit widgets from editor object in editor's dtor to
+ prevent crashes
+ * Added GroupMarkers for Reconciled state
+ * Improved auto check number handling
+ * Added default Ctrl+Shift+Space to mark a transaction reconciled
+
+2007-01-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Use Enter/Return as shortcut to start and finish editing transactions
+ * Improved ledger update to avoid unnecessary resize checks
+ * Fixed some more spots where we need to escape special chars before
+ passing text as pattern to QRegExp
+
+2007-01-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Escape special chars in names before using the text as pattern for QRegExp
+
+2007-01-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added Slovenian Tolar to the ancient currencies
+
+2007-01-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Happy New Year!!
+ * Changed KMyMoney2App::updateActions() into slotUpdateActions()
+
+2006-12-31 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added reconciliation state to the ledger sort options
+
+2006-12-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Use include path given with --with-extra-includes during OpenSP detection
+
+2006-12-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed problem introduced with changes made on 2006-12-14 and keep
+ the OK button in the report configuration enabled at all times
+ * Added support for automake 1.10
+ * Use KMessageBox for questions when deleting a report
+
+2006-12-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed extra qualification error
+
+2006-12-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Refactoring some code modules
+ * More work on the transaction editor for investment transactions
+ (only works in ledger, crashes in form)
+
+2006-12-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Improved detection of KBanking support
+
+2006-12-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't allow to edit/create transactions in income or expense ledgers
+
+2006-11-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed problem with fancy header on weekstartday set to other than Monday
+ Thanks to David Houlden for sending a patch
+
+2006-11-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Prevent autofill if date has been changed by user in transaction editor
+
+2006-11-04 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Implement transaction fix level, for speedier startup
+
+2006-11-03 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed a bug where an invalid price was entered into the system for
+ cash dividend investment transactions imported via OFX/AqBanking.
+ Hopefully fixes 1581788.
+ * Added online help for new investment wizard. Partially addresses
+ #1506390.
+ * Fixed #1327943 where the user could not abort a QIF import with bad date
+ formats.
+
+2006-11-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed crash when adding new transactions without transaction form active
+ * Started work on transaction factory for register
+
+2006-11-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a problem with transaction selection
+
+2006-10-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a memory leak and crash when starting with either '--help'
+ or '--dump-actions'. There is still a leak with '--help' but that
+ remains due to the fact, that exit() is called within the constructor
+ and there is no way to obtain a pointer to the KApplication object
+ * Fixed crash when selecting a different transaction and having the
+ option 'keep changes when selecting different transaction' selected
+
+2006-10-29 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed a memory leak and crash when a second instance of the app
+ is aborted
+
+2006-10-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Optimized register repainting
+ * Select a newly created transaction automatically once entered
+ * Preset From/To according to payment type when creating a new transaction
+
+2006-10-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed capacity()/size() method usage mixup in the register code
+ * Added logic to block signal emission of the engine during transaction
+ matching
+ * Applied patch provided by Fernando Vilas to check for array boundaries
+
+2006-10-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a problem in the ledger code when loading a different file
+ * Fixed size problem of combo boxes in transaction form
+
+2006-10-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed problem with account selector dialog
+ * Fixed display problem when switching to / from reconciliation mode
+ * Fixed flicker problem with QTable
+
+2006-10-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Renamed MarkColumn in register to ReconcileFlagColumn
+ * Update actions when view has been changed
+ * Allow to toggle between cleared/not reconciled during reconciliation
+ by left clicking on the C column
+ * Added new attention marker provided by Rob
+
+2006-10-10 Robert Wadley <robntina@users.sourceforge.net>
+ * corrected a minor spelling error.
+
+2006-10-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Improved painting of fancy headers
+
+2006-10-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Modified fancy markers
+ * Modified attention sign to use black on yellow exclamation mark
+ * Fixed logic that causes empty ledgers to show up
+
+2006-10-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a problem with account selection and opening the ledger view
+ * Fixed Tabbar::copyTabs() to use the correct ids and pointers
+ * Added configure check for KDChartListTableData::setProp()
+
+2006-10-08 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Implement Finance::Quote interface
+
+2006-10-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed crash when turning on the transaction form while ledger view
+ is visible
+ * Fixed problem with payee creation during transaction entry
+
+2006-10-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Brought back the tabbar for the form based input
+ * Fixed number field appearance in transaction form
+
+2006-10-05 Robert Wadley <robntina@users.sourceforge.net>
+ * updated titlelabel_background.png to reflect 0.9 status
+
+2006-10-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed documentation problems reported by doxygen
+ * Changed the mark for erroneous transactions to be a white
+ exclamation mark inside a circle (default color is red)
+
+2006-10-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed extra qualifiers in method definitions
+ * Added more changes which slipped through in yesterdays checkin
+ * Reduced margin in investments view
+ * Removed account button in ledger view
+ * Added transaction report to account menu
+ * Fixed a couple register display problems
+
+2006-10-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added new ledger logic
+
+2006-09-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fix the shares and values to have the correct fraction during file load
+
+2006-09-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a duplicate negation during liability account creation
+
+2006-09-19 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed a multiplication bug in budget reporting when the user specified
+ a yearly budget amount.
+
+2006-09-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed rounding problems with automatic VAT assignment
+ * Fixed problem when modifying values in a transaction that has
+ a VAT part.
+
+2006-09-11 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Correct spelling mistakes; patch supplied by Tom Browder
+
+2006-09-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added initial chapter on documentation to PHB (provided by Tom Browder)
+ * Switched to dblatex for PDF file generation
+
+2006-09-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added -lkdeui to the link phase of the kbanking plugin (was missing)
+
+2006-09-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed old html documentation files
+
+2006-09-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed date widget keyboard behaviour for Up/Down cursor key
+
+2006-09-04 Ace Jones <acejones@users.sourceforge.net>
+ * Minor change to error handling for transaction matching
+
+2006-09-03 Ace Jones <acejones@users.sourceforge.net>
+ * UI, engine, and documentation changes to support substring
+ payee matching. Still not functional until the matching itself is added.
+
+2006-08-28 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Allow for null return from online price quote source
+
+2006-08-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed duplicate period in kmymoneygpgconfigdecl.ui
+
+2006-08-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Only create the chart in the account dialog, if the resp.
+ tab is available
+
+2006-08-21 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed an error message in the merge transactions path.
+
+2006-08-21 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Correct currency code for Mexican Peso to MXN
+
+2006-08-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed include path to allow VPATH build environment
+
+2006-08-20 Ace Jones <acejones@users.sourceforge.net>
+ * Added a proper dialog for verifying that the user wants to match 2
+ transactions on the ledger.
+
+2006-08-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed build environment required for debian builds
+ * Default for KBanking support is now enabled
+
+2006-08-19 Ace Jones <acejones@users.sourceforge.net>
+ * Improved online stock quotes so the "Update all" continues even if
+ one stock is unable to be updated.
+ * Added a dialog to prompt the user whether he wants to disable online
+ quotes for this stock in this case.
+
+2006-08-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Integrated new icons into the application
+ * Changed shortcut for 'show all accounts' to Ctrl+Shift+A
+
+2006-08-18 Robert Wadley <robntina@users.sourceforge.net>
+ * added some icons to use in the icon bar for 'show/hide reconcile',
+ 'show/hide unused categories', and 'update prices' (investments)
+
+2006-08-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added patch provided by David Houlden to support automake and
+ autoheader 2.6
+
+2006-08-11 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * GnuCash importer changes
+ - Support for GnuCash V2.0 files (maybe incomplete)
+ - Handle additional account and schedule types
+ - Preserve account's tax-related status
+ - Minor coding changes
+
+2006-08-07 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Gnucash importer
+ - Add non UTF-8 support (manual selection)
+ - remove unnecessary "Unknown payee" references
+
+2006-07-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't show price/value if price information is invalid
+
+2006-07-04 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed bank ID handling in QIF imports (This was the purpose of my 5/29
+ checkin, but that was incomplete)
+ * Added budget-vs-actual report logic (HTML output only, CSV still needs
+ to be written
+
+2006-06-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #1514522 (Zero-amounted transfer transaction leads to crash)
+ * Added check for minimum KDE version
+ * Adjusted minimum KDE and QT versions in configure.in.in
+
+2006-06-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Replace parenthesis with brackets in GPG key information
+ * Comment modification to fix problems reported by Doxygen
+ * Added chapter 'Making most of KMyMoney' to manual
+
+2006-06-15 Darren Gould <darren_gould@gmx.de>
+ * Improvements in budget implementation
+ (Patch applied by Ace Jones)
+
+2006-06-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #1505732 (Frequent crash on changing/opening file)
+
+2006-06-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Applied patch for cppunit.m4 provided by Daniel Calvi� S�chez
+
+2006-06-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed more GPG problems in KGPGFile::GPGAvailable and
+ KGPGFile::keyAvailable by applying the same fix as on 2006-06-05
+
+2006-06-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed problem in KGPGFile::open which reported an error when a read
+ operation was finished before open gets around to check for the presence
+ of the process.
+
+2006-06-02 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed a small error with the X axis labels in charts. The label for the
+ first column was repeated after the last column.
+ * Added %mm-%dd-%yyyy QIF date format (Addresses #1449744)
+
+2006-05-31 Ace Jones <acejones@users.sourceforge.net>
+ * Replaced the Edit Account chart generation logic with a safer
+ implementation that uses the public interface of MyMoneyReport.
+
+2006-05-30 Ace Jones <acejones@users.sourceforge.net>
+ * Added a "last 3 to next 3" months option for transaction filter (and
+ reports) date lock. This is not exposed to the user yet, so it's
+ only for use by generated reports.
+
+2006-05-29 Ace Jones <acejones@users.sourceforge.net>
+ * Modified bank ID handling for QIF files so the ID's are handled the same
+ as other imported statements.
+ * Added a file filter (e.g. "*.qif") to QIF profile when an input filter is
+ used. (Addresses RFE #1172030)
+
+2006-05-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #1496258 (Chart doesn't repaint when configured)
+
+2006-05-27 Ace Jones <acejones@users.sourceforge.net>
+ * Updated user manual for deleting accounts
+
+2006-05-26 Ace Jones <acejones@users.sourceforge.net>
+ * Removed a spacer from the report configuration and find transaction
+ dialogs. This allows users to maximize the report config dialog,
+ for better selection of accounts BUT it means the ledger won't be as
+ large in the find transaction dialog.
+
+2006-05-23 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed tax transaction report, which was erroneously including transfers
+
+2006-05-22 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Fix Schedule Payment History storage
+ * Correct account balances on database read
+
+2006-05-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed usage of --enable-final configure option
+ * Fixed cvs example in project handbook
+
+2006-05-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed extra qualifiers as reported by Nico Kruber
+
+2006-05-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added general asset and liability accounts to be shown as payment
+ sources for loan schedules
+
+2006-05-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Preserve file permissions for compressed and encrypted files
+
+2006-05-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added Skip schedule function
+
+2006-05-01 Ryan Buschert <rbuschert@users.sourceforge.net>
+ * Fixed #1463167 (Account change in Enter Schedule Dialog not used)
+ (Patch applied by Thomas Baumgart)
+
+2006-04-29 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed #1478758 (ONLINEBANKING tag not anonymized).
+ I just removed it from the anon file entirely.
+
+2006-04-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Add better support for KOffice 1.5 libraries/includes
+ * Fixed a problem in MyMoneySchedule::paymentDates() and added testcase
+
+2006-04-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed "Overdue schedules with a single payment cause KMM to hang
+ when showing the home page". Many thanks to Joel Webb for his
+ assistance to nail this one down.
+
+2006-04-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Corrected spelling
+
+2006-04-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed another location of the lockup for loan transfers
+
+2006-04-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Applied patch provided by Dirk Mueller <dmuell@gmx.net>
+
+2006-04-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed translation of messages in KBanking plugin
+ * Fixed pot generation again
+
+2006-04-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed massive creation of temp files when saving followed by
+ crash of the application
+
+2006-04-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed pot generation (strings in ui files in subdirs were not included)
+ * Added logic to extract the comment field from UI string fields
+ to support context translation for UI files. See
+ https://sourceforge.net/mailarchive/message.php?msg_id=15450159
+ for details
+ * Fixed problem with loan transfers
+
+2006-04-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added lithuanian translation as provided by Donates Glodenis
+ * Renamed kMyMoneyAccountCombo into KMyMoneyAccountCombo
+ * Added KMyMoneyAccountCombo to designer widgets
+
+2006-04-10 Robert Wadley <robntina@users.sourceforge.net>
+ * Clarified text relating to the "payout transaction" in the new loan wizard.
+
+2006-04-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added backward information from split to transaction
+
+2006-04-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed speed/lockup issue during startup (thanks to Markus Draeger
+ for providing an anonymized file to duplicate the problem)
+ * Improved some interfaces to avoid unnecessary object copying
+
+2006-04-06 Robert Wadley <robntina@users.sourceforge.net>
+ * Changed text "Amortization" to "principal" in the new loan wizard.
+
+2006-04-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #1439099 (Balance entry on import messed up)
+
+2006-03-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't show invalid smallest cash fraction value in security editor for
+ non currency securities entries
+
+2006-03-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #1434611 (Can't edit account to 'No Institution')
+
+2006-03-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Refixed #1439701 (Deposits don't book as deposits)
+
+2006-03-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Remove splits from scheduled transactions that reference not existing
+ accounts
+
+2006-03-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated online documentation
+
+2006-03-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #1398411 (Exchange rate not used when recording a transaction)
+ * Disable transaction edit in context menu when account is closed
+ * Create new transaction when first empty entry in ledger is double clicked
+ * Fill buttons with securities/currencies in new price editor dialog
+ * Renamed widget from m_commodity in m_security in price editor dialog
+ * Fixed #1439701 (Deposits don't book as deposits)
+
+2006-03-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #1447764 (KMyMoney crashes when loading file)
+ * Fixed #1445815 (Hidden category warning when editing a category)
+ Thanks to Ryan Buschert for supplying a patch
+
+2006-03-08 Martin Preuss <aquamaniac@users.sourceforge.net>
+ * kbanking.cpp: When importing transactions now also read the FIID
+ of the transaction (if any) and the account type.
+ Replaced my code for KBankingPlugin::slotAccountOnlineUpdate() with a
+ more elaborate version (now asks the user for the first date for which
+ transaction reports are to be retrieved).
+
+2006-03-04 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed a bug in statement importer where transactions imported
+ into an investment brokerage account were not getting auto-
+ filled based on payee.
+
+2006-03-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Present information message, that an account must be specified
+ before splits can be defined while creating a schedule
+ * Don't override amount specified if all splits have been cleared
+ and the split edit dialog has been left with OK back to the schedule dialog
+ * Update OK button in schedule dialog when the last thing required and
+ added are the splits of a split transaction
+ * Allow manual update of KMandatoryFieldGroup
+ * Only show asset and liability accounts in From/To field for schedules
+ * Only show income and expense account in Category field for schedules
+ * Avoid usage of std::find with QValueLists
+ * Added MyMoneyTransaction::hasAutoCalcSplit() and testcase
+ * Fixed Doxygen problems in budget headers
+ * Added start of New User Wizard
+ * Improved KMyMoneyWizard
+
+2006-03-02 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed a subtle bug in my 2/11 checkin. When transactions were auto-filled
+ in based on payee, the split bank ID would get brought in, too. This
+ make it impossible to later match that transaction.
+
+2006-03-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added MyMoneySplit::isAutoCalc()
+ * Optimization of MyMoneySplit return parameters
+ * Fixed #1441071 (Investment transaction Enter button not enabled)
+
+2006-03-01 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Fix base currency dialog for GNC import
+
+2006-02-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Reorganized layout of account editor
+ * Added balance history/preview to account editor
+ * Setup shares field for scheduled transactions
+ * Added KReportChartView::setProperty()
+ * Added new timestamp() trace function
+ * Removed MyMoneyObserver functionality from KMyMoneyCurrencySelector
+
+2006-02-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Update developer documentation
+ * Speedup build process
+
+2006-02-23 Darren Gould <darren_gould@gmx.de>
+ * Added budgeting capability on the account level
+ * hooked up the KMyMoneyAccountTree to the BudgetList
+ (Patch applied by Ace Jones)
+
+2006-02-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added method to remove account from account selection widget
+
+2006-02-23 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Fix outdated hyperlink
+
+2006-02-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Sort accounts on homepage in alphabetical order
+ * Show number of overdue payments on homepage and sum-up payments
+ if more than one payment is overdue for a schedule
+ * Added Netherland Antillian Guilder to currency list
+ * Added feature to create new currency entries
+
+2006-02-21 Bjorn Helgaas <bjorn.helgaas@hp.com>
+ * Remove needless status bar updates
+ (Patch applied by Thomas Baumgart)
+
+2006-02-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed documentation problems in MyMoneyBudget
+ * Added KMyMoneyWizard framework
+ * Fixed build system to better support FreeBSD
+
+2006-02-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't show closed accounts on home and institution view
+ * Don't allow to close accounts referenced by schedules
+
+2006-02-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added feature to close/re-open accounts
+ * Fixed currency list in new account wizard
+ * Fixed layout of new account wizard opening balance page
+
+2006-02-12 Darren Gould <darren_gould@gmx.de>
+ * Added new budget, rename budget, delete budget support
+ * Support for changing the budget start date
+
+2006-02-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Adjusted Andreas' changes here and there a bit and checked in the
+ whole package
+
+2006-02-12 Andreas Nicolai <Andreas.Nicolai@gmx.net>
+ * Added : categories menu to main menu and category specific context menu
+ to categories view
+ * Added : whole hierarchies of (unused) categories can now be deleted,
+ also the user can again delete an unused category and have its
+ child-categories moved one level up in the hierarchy
+ * Fixed : when account/category got deleted, the actions and currently
+ selected account weren't updated
+
+2006-02-11 Ace Jones <acejones@users.sourceforge.net>
+ * Added rudimentary implementation of manual transaction matching
+
+2006-02-11 Andreas Nicolai <Andreas.Nicolai@gmx.net>
+ * Added Feature request #1395262 (Allow customization of Home Page Font Size)
+ * Added : font scaling (adjustable with CTRL + mouse wheel) is now
+ saved on exit and restored on next restart
+ * Added : font scaling can be directly set in "Home" configuration page,
+ also the "remember font size on exit" feature can be turned on
+ and off in the configuration dialog
+
+2006-02-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added patch provided by Mathieu Ouridoux to check for a possible difference
+ when ending reconciliation and warn the user
+ * Added missing include of locale.h
+
+2006-02-09 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Read Gnucash V2 files
+
+2006-02-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Remove includehints from *.ui files
+ * Added support of equity group to MyMoneyFile::consistencyCheck
+ * Converted --notimers to --timers option
+ * Started adding KMyMoneyPlugin::OnlinePlugin interface
+
+2006-02-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Improved encryption selection on file-by-file basis
+ * Bumped internal version of kmymoney2ui.rc due to recent changes
+
+2006-02-05 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Patch to allow compile on FreeBSD
+ * Add (some) field descriptions to Investment Register
+
+2006-02-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added feature to retrieve secret keys from GPG keyring
+ * Added #1280473 (Encryption on a file-by-file basis)
+
+2006-02-03 Darren Gould <darren_gould@gmx.de>
+ * Added MyMoneyBudget write and readXML capability
+ * Tied XML writing/reading into KBudgetView
+
+2006-02-03 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Extend field descriptor hint to category/memo fields
+
+2006-02-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Update networth manually at the end of institution processing to get
+ correct numbers
+ * Revised mandatory field handling for KMyMoneyEdit object
+
+2006-02-02 Ace Jones <acejones@users.sourceforge.net>
+ * Laid the groundwork for budget reports
+
+2006-02-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Generalized signal connection for ledger views
+ * Prevent from dropping a parent account onto one of its children/grand-
+ children
+ * Support calling of configure with absolute pathname
+ * Fixed #1422382 (Adding payees)
+
+2006-01-31 Ace Jones <acejones@users.sourceforge.net>
+ * Added a --notimers option to get rid of my nemesis, the Timer messages.
+
+2006-01-31 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed build system to keep po/*.gmo files from being included
+ in the distributioin tar-ball
+ * Include fixuifiles in distribution
+ * Do not recurse into subdirectories that are not part of the
+ project distribution
+ * Updated experimental field descriptor
+ * Updated tool detection logic to the latest version from the KDE repository
+
+2006-01-31 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Experimental - add field descriptor to ledger view
+
+2006-01-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Show stock accounts as children of corresponding investment account
+ in institutions view
+
+2006-01-29 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed #1394647 (Stock splits broken)
+
+2006-01-29 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * A tidier implementation of mandatory fields
+
+2006-01-28 Ace Jones <acejones@users.sourceforge.net>
+ * Automatically create securities and stock accounts for securities
+ found in an OFX file. Removes the requirement that the security
+ already be present in your file before importing.
+
+2006-01-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a translation error in the German version (thanks to Karin Capey
+ for reporting)
+ * Fixed 1400746 (Entering scheduled transaction for a loan crashes)
+ (at least shows a somewhat more descriptive error message)
+ * Removed unused code
+ * Show stock accounts in the correct institution if the parent
+ investment account is assigned to an institution
+ * Improved signal handling in KMyMoneyAccountTree
+ * Improved selection of accounts and investments
+ * Reactivated icon tab in accounts view
+ * Added #1058732 (Save Account Icon Position)
+
+2006-01-27 Ace Jones <acejones@users.sourceforge.net>
+ * Disallow importing into a stock account.
+ Fixes #1395656
+ * Removed online banking setup options when editing a stock account
+
+2006-01-27 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Apply required field status/color to edit schedule dialog
+
+2006-01-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added fixuifiles to the admin directory and included it in Makefiles
+
+2006-01-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Sort list of payees in the Reassign transactions dialog by name
+ * Improved RMB behaviour in some views/widgets
+
+2006-01-25 Ace Jones <acejones@users.sourceforge.net>
+ * Modified ofx plugin to accept ofc files
+ * #if0'd out some broken logic in ofx importer. Some OFX files don't follow
+ the spec wrt totals, and this was a poor attempt to deal with that. It
+ ended up breaking many more common cases.
+
+2006-01-25 Darren Gould <darren_gould@gmx.de>
+ * added XML ability and mymoneybudget class for budget feature
+
+2006-01-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #1398924 (Incorrect calculation of investment price)
+ * Fixed #1390918 (Can't use more than 2 decimal places in manual price update)
+ * Added setting capability for background of required fields
+
+2006-01-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added capability to modify/add the opening balance in the account
+ edit dialog
+ * Renamed kMyMoneyCurrencySelector to KMyMoneyCurrencySelector
+ * Renamed kMyMoneySecuritySelector to KMyMoneySecuritySelector
+ * Added both of the above to Qt designer widgets
+ * Reworked payees view to use new KAction logic
+
+2006-01-21 Darren Gould <darren_gould@linuxmail.org>
+ * Initial budgeting view and report mockup
+
+2006-01-20 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Developer documentation for dialog boxes
+
+2006-01-19 Ace Jones <acejones@users.sourceforge.net>
+ * Added README.ofx to help people build with OFX support
+
+2006-01-18 Bjorn Helgaas <bjorn.helgaas@hp.com>
+ * Remove unused and commented-out code from account, institution, money,
+ payee, security, and transaction
+
+2006-01-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Changed definition of USE_OFX_DIRECTCONNECT to be numeric as all others
+ * Fixed problem with investment view context menu not poping up anymore
+ * Finalized integration into build system for online banking setup wizard
+
+2006-01-16 Ace Jones <acejones@users.sourceforge.net>
+ * Updated unit tests for my last checkin
+
+2006-01-14 Ace Jones <acejones@users.sourceforge.net>
+ * Added account setup for OFX direct connect
+ * Revived OFX direct connect (it's been broken since the KAction changes)
+ * OFX direct connect is now officially supproted!
+ * Even added some docs
+
+2006-01-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed documentation problems
+ * Added option to resize icons in navigation bar
+
+2006-01-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Allow equity accounts in templates
+ * Don't modify account type while reparenting account
+ * Made MyMoneyFile a QObject derivative to be able to emit signals.
+ * Started to replace notifications with signals
+ * Updated some code of KMyMoneyTitleLabel
+ * Complete rewrite of KMyMoneyAccountTree and KMyMoneyAccountTreeItem
+ * Added KMyMoneyAccountTree to the Qt-Designer widget library
+ * Started reworking the views to be more efficient
+ * Removed some unused code and files
+
+2006-01-11 Robert Wadley <robntina@users.sourceforge.net>
+ * Added 'budget' icons
+ * Added an alternate titlebar image with no logo.
+ * Added new "default_categories-template" to "C" and "en_US".
+ The template in "en_US" contains some additional US specific
+ categories (taxes, etc.)
+ * Renamed existing "default_accounts" to "old-default_accounts"
+ * Added Joel Webbs schedule E and schedule E templates to en_US
+
+2006-01-07 Ace Jones <acejones@users.sourceforge.net>
+ * Added UI for OFX online banking account setup
+
+2006-01-04 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Fix #1393899 (Add support for new Russian Ruble - RUB)
+ Backport to 0.8
+
+2005-12-28 Ace Jones <acejones@users.sourceforge.net>
+ * Added a "Transaction Report" option to the Account Menu pull-down in
+ ledgers. This allows you to quickly get a report for the current account.
+ This is part of my insidious plan to weave reports throughout the app.
+ * Fixed a bug that prohibited reports from loading, introduced in the 12/22
+ checkin.
+
+2005-12-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #1390918 (Can't use more than 2 decimal places in manual price update)
+ * Moved maintenance logic for account's balances from MMFile to MMSeqAccessMgr
+ * Fixed #1318972 (Currency symbol for foreign stock mis-displayed after quote)
+
+2005-12-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added #1280473 (Ecryption on a file-by-file basis)
+
+2005-12-25 Ace Jones <acejones@users.sourceforge.net>
+ * Added ability to sort report groups in pivottable reports
+ (e.g. Income, Expense).
+ * Forced Income group to come before Expenses in spending reports.
+ * Merry Christmas!
+
+2005-12-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Handle stock accounts in forecast
+
+2005-12-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed binary reader (left a message if someone tries to load such a file)
+ * Added balance to MyMoneyAccount as balance cache for all stored transactions
+ * Applied patches provided by Bjorn Helgaas
+
+2005-12-22 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed currency conversion in daily/weekly reports
+
+2005-12-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed problem with disabled Finish button in reconcile dialog
+ * Added (in)equality operator to MyMoneyPrice
+ * Added support for new Romanian Leu
+ * Added reference check for price table
+
+2005-12-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * changed readXML methods to a constructor of the resp. MyMoneyXXX object
+ * adopted testcases
+ * Fixed argument to qDebug call in MyMoneyStorageSQL
+ * Added patch supplied by Bjorn Helgaas to preset the default currency
+ when creating a file
+ * Removed some unused code
+
+2005-12-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Implemented MyMoneyAccountLoan::hasReferenceTo()
+ * Added database documentation files to list of distributed files
+ * Fixed markup of database documentation to follow DTD
+ * Use new isReferenced() method to enable certain actions
+ * Applied patch provided by Bjorn Helgaas (passing references)
+
+2005-12-16 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Document database usage
+ * Implement database code with timing improvements
+
+2005-12-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Started to fix KDE #115863 (--enable-final and 'make check' fails)
+ Now we can compile but still get link errors
+
+2005-12-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Applied patch provided by Andreas Nicolei to also change the payee
+ within scheduled transactions
+ * Fixed new account dialog to assign currency to returned account object
+
+2005-12-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed spelling error in payees view
+ * Added reference check logic to objects and engine code
+ Calls at appropriate locations must still be added
+
+2005-12-10 Ace Jones <acejones@users.sourceforge.net>
+ * Added a Loan Transactions report. This shows loan-specific information
+ about transactions in loan accounts. It doesn't provide future-looking
+ amortization information or loan summary information.
+
+2005-12-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed export of symbols missing from patch applied on 2005-11-29
+ * Fixed missing definition in mymoneymoneytest.cpp
+ * Fixed export of symbols in test environment
+
+2005-12-09 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Trap database errors; provide timing traces
+
+2005-12-01 Andreas Nicolai <ghorwin@users.sourceforge.net>
+ * added new dialog KTransactionReassignDlg
+ * new features in payees view:
+ - multiple payees can be selected, payee info is only shown
+ when a single payee is selected (otherwise info widget is disabled)
+ - 'in place' renaming is only possible when a single payee is selected
+ - renaming a payee to an existing payees name gives a warning
+ - whitespaces in payee names (entered via 'rename' or 'new payee'
+ actions) are stripped
+ - 'New payee' creates a unique payee name of the format 'New payee [?]'
+ - Action 'Delete payee' is now possible for several selected payees
+ - when payees are deleted and still assigned to transactions, the user
+ can now select an alternative payee who should be used for the
+ transactions
+ * new comparison operator for MyMoneyPayee to find payees by their id
+
+2005-12-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #1375112 (Can't configure home page)
+
+2005-12-07 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Provide utility routine for schedule weekend option
+ * More database stuff (work still ongoing)
+
+2005-12-05 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Integrate database into menu structure
+
+2005-12-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added patch provided by Bjorn Helgaas entitled 'remove
+ superfluous QString() usage'
+
+2005-12-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Reworked the category creation from within the widget
+ * Allow creation of complete category hierarchy in one step from
+ within the 'Create category' dialog
+
+2005-11-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added view actions to toggle 'hide reconciled transactions' and
+ 'hide unused categories'
+ * Applied patches provided by Bjorn Helgaas
+
+2005-11-27 Ace Jones <acejones@users.sourceforge.net>
+ * Install the 48x48 application icon. Fixes KDE bug #117044.
+ * Inverted the sign for expenses and liabilities in reports and charts.
+ * Added a "7-day cashflow forecast" report under the "Net Worth Reports".
+ Hopefully this addresses #1238112
+ * Added a "year-to-month" date filter in transaction search and reports.
+ Addresses #1260311
+ * Added option to include transfers on income/expense reports. This
+ addresses #1297972.
+ * Added ability to configure reports to have days or weeks as the column.
+
+2005-11-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Reworked settings dialog to be based on KConfigDialog
+ * Allow quit when trying to open the same file as already opened in
+ another instance of KMyMoney
+ * Install kgpgfile.h
+ * Removed deprecated method kMyMoneyEdit::getMoneyValue()
+ * Use kMyMoneyEdit::setValue() rather than setText() to load values
+ * Changed MyMoneyPayee to use references in constructor
+
+2005-11-24 Ace Jones <acejones@users.sourceforge.net>
+ * Added mid- and low-level support for days-based grid reports. (High-
+ level UI support has not been added yet.)
+ * Removed opening balance tests in reports, which now failed thanks to
+ opening balances being removed.
+ * Fixed a bug where duplicate securities were not getting picked up
+ correctly in online quotes.
+
+2005-11-22 Ace Jones <acejones@users.sourceforge.net>
+ * Better handling of missing &...; sequences in HTML returned during online
+ quotes.
+ * Added an Account button to the checking & loan ledger
+
+2005-11-19 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Fix doxygenation...
+
+2005-11-19 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Doxygenate SQL stuff
+
+2005-11-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added autosave patch provided by Marcellino Villarino with a few
+ modifications
+ * Combined multiple ways of commiting a scheduled transaction into a
+ single path
+ * Send out notification when MyMoneyFile::setUser() was called
+
+2005-11-18 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Initial checkin of SQL backend code
+
+2005-11-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added factor feature for online price updates
+
+2005-11-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Converted schedules view to use new action structure
+ * Don't colorize lines in schedule view that do not contain a schedule
+
+2005-11-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added date modification widget to KCurrencyCalculator to allow
+ manual price updates in a single dialog
+ * Converted investment view to use new action structure
+
+2005-11-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed problem with opening balance transactions for investment accounts
+ * Fixed a problem when the current selected investment account is removed
+ * Added toolbar button to start KCalc
+
+2005-11-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Applied patch as provided by Bjorn Helgaas to collect user
+ information in a MyMoneyPayee object.
+ * Fixed display suppression of unused categories
+
+2005-11-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Moved most context menus to kmymoney2ui.rc
+ * Modified menu structure
+ * Revised logic around actions, context menus
+ * Adapted plugin interface to new action handling
+ * Print error when running 'make package-messages' in a VPATH environment
+ * Differentiate 'split transaction' for usage as category and caption
+
+2005-11-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Moved some action slots to KMyMoney2App:
+ * Revised KAction handling
+ * Fixed date calculation in isOverdue testcase, enhanced testcase
+ * Restructured action handling
+ * Renamed some members in the new account wizard
+ * Changed open balance handling in new account wizard to use
+ 'opening balance transaction'
+
+2005-11-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated files for german and galician translation
+
+2005-11-06 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Save/restore payee email address
+ Could backport to 0.8
+
+2005-11-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #1348087 (Save not enabled)
+ * Added command line option '-n' to startup without the last file opened
+ * Adjust the size of the 'move account to ...' selector based on the
+ length of the account names
+
+2005-11-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added ledger sort mode for 'order of entry' (based on transaction-id)
+ * Fixed MyMoneyScheduled::isOverdue() to return correct information
+ * Added testcase for MyMoneyScheduled::isOverdue()
+ * Fixed calculation of net-worth in views
+ * Added 'Move to account ...' functionality
+
+2005-11-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Make MyMoneySchedule::transaction() return a reference
+ * Catch exceptions during forecast processing
+
+2005-11-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #1323166 (Investment balances on homepage are the number of shares)
+ with patch provided by Maik Hinrichs
+ * Applied patch to add *.a to .cvsignore as provided by Maik Hinrichs
+
+2005-10-31 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed MyMoneyStorageANON to write out correct data
+ * Added performance test feature
+ * Performance improvements in accounts view and engine code
+ * ::timetrace changes
+ * Write error message about thrown exception to stderr in pivottable.cpp
+ * Added patch required for gcc 4.1 as provided by Stephan Binner
+ * Added patch to remove invalid includehints from *.ui file as provided
+ by Stephan Binner
+
+2005-10-27 Ace Jones <acejones@users.sourceforge.net>
+ * Updated MyMoneyReport object to use MyMoneyObject
+ * Change MyMoneyStorageANON to calculate the quasi-random offset
+ factor once and use it every time.
+ * Also removed some extraneous consts from returned-by-value objects
+
+2005-10-23 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Allow entry of new categories; check Payee present
+ Backport to 0.8
+
+2005-10-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't crash on schedules w/ strange transactions during forecast
+ * Only allow entering of schedules when all needed values are present
+ * More changes due to introduction of MyMoneyObject
+
+2005-10-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added MyMoneyKeyValueContainer::clear()
+ * Added testcases and fixed a few problems here and there in the read/write
+ XML methods
+ * Added configure options for Mandriva 2006 as reported by Paul Doig
+
+2005-10-17 Robert Wadley <robntina@users.sourceforge.net>
+ * Made corrections to the 'what's new' html page.
+
+2005-10-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added writeXML and readXML to MyMoneyInstitution, MyMoneyPayee
+ * Added testcases for those routines
+ * Changed storage MyMoneyStorageXML to use these routines
+ * Fixed non-working quit button, shortcut and menu entry
+ * Don't allow negative values for 'enter schedules # days in advance'
+
+2005-10-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated MyMoneyObject as discussed on mailing list
+ * Added writeXML and readXML methods to MyMoneyAccount and
+ MyMoneyKeyValueContainer
+ * Added testcases for those routines
+ * Changed storage MyMoneyStorageXML to use these routines
+ * Added number of stored prices to file info dialog
+
+2005-10-16 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Fix 1323157 - Price Editor showed reciprocal value
+ * Gnucash reader - set shares = value where split currency = tx currency
+
+2005-10-11 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Preliminary signals for proposed file ops plugin
+
+2005-10-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't include todays transactions twice in the forecast
+
+2005-10-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added fileinfo dialog to show object counts of current file
+ * Added traces for time measurement
+ * Added patches to Makefile.dist as provided by Bjorn Helgaas
+ * Incremented min automake version to 1.7.9
+
+2005-10-09 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Fix a typo which has long annoyed me, tho' nobbut a Brit would notice
+
+2005-10-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added MyMoneyObject as base object to be used for all storable
+ MyMoneyXXX objects.
+ * Converted MyMoneyAccount to use MyMoneyObject
+
+2005-10-07 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Gnucash reader - link dialog help to online manual (requires 'make install')
+
+2005-10-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #1221979 (KMyMoney won't start)
+
+2005-10-03 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Fix transaction types for Create Schedule
+
+2005-09-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Linked help button in reports configuration dialog to online manual
+
+2005-10-02 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed a raft of broken logic in calculation of scheduled payment dates
+ * Added option to include scheduled transactions in pivottable reports.
+
+2005-09-30 Ace Jones <acejones@users.sourceforge.net>
+ * Vastly simplified OFX dependency checking. Now relies on pkg-config to
+ sort out OFX versions.
+ * Enabled debugging details for all load-time fixups. I want to root out
+ the source of all fixups upon load.
+ * Added debugging information around ofx direct connect sessions, in an
+ attempt to troubleshoot certain problems for users in that area.
+
+2005-09-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Made calculatorButtonVisible available for Qt-Designer
+ * Added kMyMoneyPayee to designer library
+ * Removed calculator button from minimum balance field in new account dialog
+
+2005-09-30 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Avoid problem when creating schedule from Check or ATM transaction.
+ Unlikely, but...
+
+2005-09-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed library dependency during build by including the required object file
+
+2005-09-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Make sure UIC uses our own widget library
+ * always build widget library, install for designer upon request
+ * Applied patches by Erik Johansson to be Up/Down the same as +/- and
+ the day field receives focus when the widget is selected no matter
+ which date format is selected
+ * Fixed #1289026 (Transfer creates flashing red entry in destination account)
+
+2005-09-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed debug output for price conversion
+ * Added minimum balance for asset/liability accounts
+ * Improved 90 day forecast to show warnings when balance drops
+ below the minimum balance setting or even below 0
+
+2005-09-24 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed #1289811 (Account balance incorrect when opening kmymoney) by...
+ * Disallow importing a QIF transaction that transfers from/to the same
+ account.
+ * Properly fix the problem where KDE currency settings would interfere with
+ QIF date parsing.
+
+2005-09-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added 90 day forecast to home view
+
+2005-09-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added MyMoneyPrice unit tests
+ * Fixed #1285995 (Accounts view shows wrong balance with foreign currency)
+ actually a problem in conversion rate extraction in MyMoneyPrice
+ * Added date parameter to totalValue() and accountValue() in MyMoneyFile
+
+2005-09-22 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Fixed spelling problem reported by Jochen Rundholz
+
+2005-09-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #1264916 (Cannot edit fund details in investments)
+ * Set default fraction for new investments to 100
+ * Improved numeric validator for kMyMoneyEdit objects
+
+2005-09-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Editorial changes to the project handbook
+ * Use correct character set for HTML version of project handbook
+ * Added note about usage of interest field in reconciliation wizard to docs
+ * Added version number to title page of online documentation
+
+2005-09-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added version history for the project handbook
+ * Added chapter about translations provided by Jochen Rundholz to project
+ handbook
+ * Fixed problems around editing multi-currency transactions based
+ on a different currency than the current account.
+ * Balance transactions in anonymized files by using a single,
+ somewhat random factor per transaction
+
+2005-09-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #1288592 (Crash with Auto fill)
+ * Added danish translation file as provided by Daniel Sørensen
+ <daniel@dumazz.dk> (he says only 20% are done but he does not have time
+ to continue)
+
+2005-09-15 Robert Wadley <robntina@users.sourceforge.net>
+ * replaced reports icons
+ * added some 22x22 "chart style" icons
+
+2005-09-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #1287850 (Empty action box)
+ * Fixed #1286028 (Edit Account dialog shows wrong currency)
+ * Fixed #1286033 (KMyMoney hangs up)
+ * Fixed result calculation in KCurrencyCalculator to produce smaller
+ numerators and denominators
+ * Added unit testcase for problem #1291044
+ * Fixed #1291044 (Cannot apply $0.01US interest expense in a split)
+ * Fixed typos reported by Jochen Rundholz
+
+2005-09-13 Ace Jones <acejones@users.sourceforge.net>
+ * Updated to CVS version of libOFX
+ * Added support for fees to OFX and Statement imports
+ * Fixed sign reversal on OFX dividend imports
+ * Support QIF imports without a "Type" line
+ * Added Wallstreet-Online.DE online quote source
+ Submitted by Marc Zahnlecker <tf2k@users.sourceforge.net>
+
+2005-09-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Changed minimum KDE version to 3.2 in configure.in.in
+ * Added patch provided by Erik Johansson to display the selected date
+ including the weekday in a KPassivePopup
+ * Adjusted build system to work from in initially empty sandbox
+
+2005-09-09 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * GnuCash Reader - fix locale-dependent problem on schedules
+ - stop crash on invalid price
+
+2005-09-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Restrict type of accounts allowed as payment/asset accounts for loans
+ * Sort transactions in ledger on same date by check no and then by value
+ * Keep check number if already entered when autofilling a transaction
+ * Updated link to PDF version of project handbook
+ * Added local rules to make online versions for project handbook and manual
+ (requires a script which I currently only have on my local system)
+ * Changed spelling of Ruble to be consistent
+ * Translate currency names when loading file with different language set
+ * Don't override user supplied check no when loading prev. transaction
+ * Fixed #1264927 (check number for same day not in ascending order)
+ * Removed GWEN logger settings as requested by Martin
+ * Added hint to sort order of transactions in online manual
+
+2005-09-04 Ace Jones <acejones@users.sourceforge.net>
+ * Update docs to say that you have to remove all the transactions from an
+ account before deleting it.
+ * Fixed a bug where in online price update, the local KDE currency was being
+ shown for foreign stocks, instead of the stock's own currency.
+ * Added VWD.DE online quote source, useful for german funds
+ * Added ability to handle quote sources where the decimal separator
+ is not period
+ * Added ability to handle quote sources which contain a thousands separator
+ * Added docs on how to find the trading symbol for a security supported
+ by Yahoo
+ * Chart documentation
+
+2005-09-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added support to build widget library for Qt-Designer (needs to be
+ enabled via configure)
+ * Include new options in configure summary.
+ * Separated configure summary in user and developer optionsa
+ * Separated generation of kmymoney2.pot from merging of language files
+ * Allow to run in VPATH environment
+ * Added patch provided by Mathieu Ourioux to hide reconciled
+ transactions in ledger view
+ * Added patch provided by Erik Johansson to allow * to decrement the
+ date and use T to set date to today
+ * Updated documentation
+ * Include a missing string in pot file
+ * Use KMessageBox rather than QMessageBox
+
+2005-09-02 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed legend on circular charts
+ * Don't give option to display charts for querytable reports
+ * Don't populate default charts if charts are not compiled in
+ * Change all uses of "security" to "encryption" where that's what it means.
+ Eliminates terminology conflict with "security" where it means "stock/etc".
+ * Change uses of "Transfer from/to" to "Convert from/to" in currency converter.
+ Linguistically more accurate.
+
+2005-08-29 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * GnuCash Reader
+ - correct split action types
+ - detect checks properly
+ - fix locale-dependent problem on schedules
+
+2005-08-27 Ace Jones <acejones@users.sourceforge.net>
+ * When importing investments via OFX into an investment account with an
+ associated brokerage account, use that account for the buys/sells &
+ cash dividends.
+ * When importing investments via OFX into an investment account with an
+ associated brokerage account, allow non-investment transactions. Dump
+ them into the brokerage account.
+ * Added fees to MMStatement::Transaction struct for later use
+ * Commented some obscure aspects of MMStatement
+ * Also match imported securities by name if they have no symbol
+
+2005-08-26 Ace Jones <acejones@users.sourceforge.net>
+ * Added ability for import plugins to specify the file format filter to use
+ when looking for those files
+ * Added "*.qfx" to file format filter in OFX import plugin
+ * Added three new default chart-type reports
+ * Added a new "Charts" section to the reports summary which collects all
+ reports that are set to display initially as charts
+
+2005-08-25 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed crash in chart configuration
+ * Added stacked bar chart
+ * Changed ring chart to be proportional widths (not sure I like this)
+ * Changed pie charts to look 3D
+
+2005-08-23 Ace Jones <acejones@users.sourceforge.net>
+ * Chart configuration dialog
+ * Added line, bar, pie & ring charts
+ * Ability to configure a report to always show up as a chart
+ * Ability to toggle grid lines and printed data values
+ * These new values are saved to the KMM file.
+
+2005-08-22 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed text string problems. Thanks to Jochen Rundholz for identifying.
+ * Attempted to fix QIF import problem where it was hampered by having
+ the KDE locale's negative sign position set to "Parens Around".
+
+2005-08-19 Ace Jones <acejones@users.sourceforge.net>
+ * Modified pivottable reports to be configurable to four levels of detail
+ (sub-accounts, top-accounts, groups, total)
+ * Charting and HTML rendering respects the new levels of detail. This
+ makes charting much more useful, IMO.
+
+2005-08-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #1263755 (Crash when moving account from one subgroup to another)
+
+2005-08-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * updated admin/acinclude.m4.in
+ * Fixed KDE BUG #110851 (Wrong date formatting in forms)
+
+2005-08-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #1260732 (Reconciling multiple currencies) Thanks to
+ "pSmart" for reporting
+ * Fixed #1261797 (Manual price entry/update does not store values)
+ * Added complete check for KDChart availability
+
+2005-08-16 Ace Jones <acejones@users.sourceforge.net>
+ * Modified charts to show one line per sub-account or per top-account
+ depending on the setting of the "Show Top Accounts" configuration option.
+
+2005-08-15 Ace Jones <acejones@users.sourceforge.net>
+ * Initial integration of charts. For pivottable reports (income/expenses and
+ net worth), the "Chart" button will display a single line graph of the
+ total. To use it, ensure you have libkdchart.la and configure with
+ --enable-charts.
+
+2005-08-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #1259351 (Icons view doesn't honor single click preference)
+ * Fixed minor problem in build environment
+ * Bumped minimum required version of KBanking to new AqBanking package
+
+2005-08-14 Ace Jones <acejones@users.sourceforge.net>
+ * Explain how to convert from another encoding to UTF8
+ * Fixed a problem in my last checkin where libofx was
+ required to build CVS version.
+
+2005-08-13 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed a recently-introduced bug where the wrong price
+ source was being used.
+ * Updated OFX Direct Connect to use libofx 0.8.0
+ * #if0'd OFX unit tests this will get moved to a plugin unit tester.
+ * #if0'd code to create OFX response files. This will get moved to
+ libofx.
+ * Added support for stock splits
+
+2005-08-12 Ace Jones <acejones@users.sourceforge.net>
+ * Catch exceptions in QIF importer when turning back on notifications
+
+2005-08-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * If auto enter is selected for a schedule, enter it if it's due today
+ not only if it is overdue
+ * Fixed #1256431 (tx switch from Dep. to Withdr.)
+ * Released 0.8
+
+2005-08-09 Ace Jones <acejones@users.sourceforge.net>
+ * Added progress to the progress bar when importing a KMM statement
+ * In KMM statement importer, post dividend income to "_Dividend" account
+ * "By institution" reports now group by institution & topaccount
+ * Accounts with no institution now get their institution from the topaccount
+ * Investment accounts are not included in account-based query reports
+
+2005-08-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Make sure the Finish button is enabled on the last page of
+ the edit loan wizard
+ * Update schedule view when a new loan account has been added
+ * Don't show error if schedule has no payee assigned
+ * Fixed a problem in KFilterDev by providing our own version
+ of QIODevice::readAll() in mymoneystoragexml.cpp This caused
+ the program to lock up on certain compressed files
+
+2005-08-08 Robert Wadley <robntina@users.sourceforge.net>
+ * Changed my email address as listed in the docs
+ * Assorted image resolution tweeks to improve PDF output.
+
+2005-08-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Send out notification when report is added to engine
+
+2005-08-06 Robert Wadley <robntina@users.sourceforge.net>
+ * Added the 0.8 splash screen and titlebar image.
+
+2005-08-06 Ace Jones <acejones@users.sourceforge.net>
+ * Edited loan docs
+
+2005-08-06 Robert Wadley <robntina@users.sourceforge.net>
+ * Adjusted image sizes for PDF output.
+
+2005-08-05 Ace Jones <acejones@users.sourceforge.net>
+ * Spelling fixes in loans docs from Darin
+
+2005-08-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added --enable-pdf-docs to configure which controls the generation
+ of the PDF version of the developer handbook and the user manual.
+ This setting defaults to 'no'
+ * Fixed a problem around creating symbolic links to header files in
+ VPATH build environments
+ * Added online help to
+ - settings dialog
+ - QIF profile editor
+ - Schedule dialog
+
+2005-08-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #1250608 (Calculator calculates wrong)
+ * Fixed crash when using option 'Goto other side of transfer transaction'
+
+2005-08-03 Ace Jones <acejones@users.sourceforge.net>
+ * Spelling fixes in loans docs from Darin
+
+2005-08-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't show the 'ancient' currencies in the online update dialog
+
+2005-08-01 Ace Jones <acejones@users.sourceforge.net>
+ * Handle 'yield' transactions in reports. Previously, they were
+ universally ignored.
+ * New Loans chapter for manual from Darin.
+ * Updated search chapter for manual from Darin.
+
+2005-08-01 Robert Wadley <robntina@users.sourceforge.net>
+ * Added more screenshots for the manual
+ * Clarified some text in the manual (Schedules)
+ * Made some small changes in the manual for consistency.(First time)
+
+2005-07-31 Ace Jones <acejones@users.sourceforge.net>
+ * Added a "continue/cancel" dialog when there is a problem importing
+ a single transaction. Otherwise, the user will keep getting the
+ error dialog continuously in a large file.
+ * Fixes a bug in the investment performance report: "shares bought on
+ the report start day are included in the starting balance and in buys.
+ The solution is to take the starting balance from the day before the
+ start of the report."
+ As submitted by Peter Pointner <pml1@wuzel.de>
+
+2005-07-31 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * GnuCash Reader - implement (and document) ancient currency support
+
+2005-07-31 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added auto loading of 'ancient' currencies to
+ KMyMoneyView::loadAncientCurrencies
+ * Added all currencies that were converted to EURO to this list
+ * Maintain setting of 'update price history' between sessions
+ * Correctly interpret the amount entered for foreign currency
+ transactions (required a TAB to update the values before pressing OK)
+ * Do not allow to modify ancient currency prices
+
+2005-07-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Maintain identification entered for investments
+ * Modified home view to catch exceptions when information is somewhat
+ inconsistent
+
+2005-07-30 Robert Wadley <robntina@users.sourceforge.net>
+ * fixed some screenshot mistakes
+
+2005-07-30 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * GnuCash Reader - handle transactions without a currency
+
+2005-07-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Released 0.7.5
+ * Regenerated strings for translations
+ * Added updated Italian and German translation
+ * Fixed #1241831 (Encryption/Decryption problem with 0.7.4)
+ Many thanks to Thomas Schlesinger for his help to resolve this problem
+
+2005-07-29 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * GnuCash Reader
+ - fix account type error message
+ - fix sloppy coding errors which I've been getting away with for too long
+ - update documentation
+
+2005-07-27 Robert Wadley <robntina@users.sourceforge.net>
+ * Added some screenshots for the user manual for Tony.
+
+2005-07-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed problem with total value not including fees when editing
+ investment transactions (reported by Peter Pointner)
+ * Fixed #1243365 (Wrong symbol of foreign currency on homepage)
+ * Hide unused widget in currency editor
+
+2005-07-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Enter and show reconciliation values for liability accounts as
+ positive values
+
+2005-07-24 Ace Jones <acejones@users.sourceforge.net>
+ * More handbook changes
+ - Added & edited Roger's Settings chapter
+ - Retooled introduction chapter
+ - Added lots of links between various sections
+ - Added more details on the price editor
+ - Added authorinfo tags to chapters where they were missing
+ - Wrote instructions on how to write high-quality bugs
+ - Various edits throughout the manual
+
+2005-07-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed misdetection of EOF in KGPGFile
+ * Make sure edit session ends when switching from investment transaction tab
+ to investment summary tab
+
+2005-07-23 Robert Wadley <robntina@users.sourceforge.net>
+ * Added some investment screenshots to the user manual.
+
+2005-07-23 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * GnuCash Reader - handle Currency account type
+ - update documentation
+
+2005-07-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed problem when opening an encrypted file w/o using the gpg-agent
+ This was broken due to the changes added on 2005-07-15
+
+2005-07-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed crash when selecting print with no report selected
+
+2005-07-20 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed QIF importer to deal with reinvest dividend transactions that have
+ fees associated with them.
+
+2005-07-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed auto increment of check number field to work with non-numeric
+ entries
+
+2005-07-18 Ace Jones <acejones@users.sourceforge.net>
+ * More handbook changes
+ - Explained the price editor
+ - Finished investment documentation
+ - Added lots of "Screen Shot" cues for Rob
+ - Added Rob to the manual credits
+
+2005-07-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Allow opening the split editor on new transactions when the
+ transaction form is not visible
+
+2005-07-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed tab order in new investment wizard
+ * Added help button to reconcile wizard
+ * Released 0.7.4
+ * Bumped version to 0.7.5
+
+2005-07-18 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * GnuCash Reader - stand-alone anonymizer fixes
+ - fix memory leak when deferred interval present
+
+2005-07-18 Robert Wadley <robntina@users.sourceforge.net>
+ * Added quite a few more screenshots to the user manual.
+
+2005-07-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Minor layout changes (use tags where possible)
+ * Added Ctrl-Ins to create new transactions/splits
+ * Use $(MAKE) instead of 'make' to be able to switch make program
+ * Removed unused code enclosed with "#if __WORDSIZE == 32"
+ * Removed unused declarations in mymoneymoney.h
+ * Allow to compile mymoneymoneytest on FreeBSD
+
+2005-07-16 Ace Jones <acejones@users.sourceforge.net>
+ * QIF Importer improvements for investments
+ - Supports O and L fields (transaction fees and account transfer)
+ - Disallow transfers INTO an investment account
+ * Major revision of the handbook
+ - Pared down 'firsttime' section significantly
+ - Moved most 'firsttime' information down into the details
+ - Merged MTE's 'firsttime' information with Roger's sections
+ - Added Roger's latest: Menus reference
+ - Removed "Views" reference
+ - Removed "Integrity Checks"
+ - Removed "Other documentation"
+ - Removed my "Files" section. Tom's is better.
+ - Added links for the 2 remaining "whats new" items without links
+
+2005-07-16 Robert Wadley <robntina@users.sourceforge.net>
+ * Added screenshots for details-widgets.docbook in the user manual.
+
+2005-07-15 Robert Wadley <robntina@users.sourceforge.net>
+ * Applied patches submitted by Darin Strait for the user manual.
+
+2005-07-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Allow modification of due date for newly created schedules based on
+ existing transactions
+ * Fixed a nasty problem when two-byte characters across a 512 byte
+ boundary in a GPG encrypted file causing a false EOF report in KGPGFile.
+
+2005-07-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Destroy objects in MyMoneyStorageXML::readFile even if file is not
+ parsable to avoid memory leaks
+ * Added capability to modify fraction of securities/investments
+ ie. Fixed #1175904 (Edit investment shares precision)
+ * Use precision setting for price fields in investment handling
+ * Fixed email link in documentation
+ * Suppress engine notifications during auto entering due schedules
+ after file load
+
+2005-07-13 Robert Wadley <robntina@users.sourceforge.net>
+ * added screenshots submitted by Darin Strait for the user manual.
+
+2005-07-10 Ace Jones <acejones@users.sourceforge.net>
+ * When saving an anonymous file, retain the linkage from investment account
+ to brokerage account
+ * QIF Importer improvements for investments
+ - Fixed reversed sign on dividend importing
+ - Fixed price importing. Previously, it only imported prices for the
+ current account. But really it should import them for any prices you have
+ in your KMM file.
+ - Added line number to warnings, to make it easier to track them down
+ - Converted many dialog-box warnings to debug output. They weren't that
+ useful in dialogs
+ - Removed "QIF/" from bank ID's. It was a bad design decision to include
+ that. If you import the same transaction 2 different ways, it will
+ seem different to KMM, but it should look like the same transaction.
+ - Warn when importing an investment transaction without a stock
+ - Warn when ignoring a transaction because the stock was not found
+ - Warn when ignoring a stock split
+
+2005-07-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Applied patch provided by Christian Nolte <noltec@users.sourceforge.net>
+ * Use QFile as base class instead of QIODevice
+ * Bumped version number to 0.7.4
+
+2005-07-10 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * GnuCash Reader - improve formula detection in schedules
+ - minor stand-alone anonymizer changes
+
+2005-07-09 Ace Jones <acejones@users.sourceforge.net>
+ * Updated ledger docs from Roger
+ * Small fixes here and there in the docs
+ * Modified home view to show total value of favorite accounts
+ (this includes balances of sub-accounts, and correctly handles currency)
+
+2005-07-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Regenerated message files
+ * Released 0.7.3
+
+2005-07-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added quick-fix to avoid crash on schedule creation
+ * Applied doc patch provided by Jerry Amundsen
+
+2005-07-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Save equity account to file
+ * Re-attach children of equity account when loading old file
+
+2005-07-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Moved stockSplit() and transactionType() from KLedgerView to KMyMoneyUtils
+ * Improved display of investment transactions in other ledger views
+ * Added help button to new account wizard and linked to online doc
+ * Fixed some of the screenshot stuff
+
+2005-07-05 Robert Wadley <robntina@users.sourceforge.net>
+ * screenshot stuff
+
+2005-07-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added index.html to .cvsignore in doc/en
+ * Fixed #1231925 (Institutions view: totals do not reflect the accounts)
+ * Changed section tags into sect1 tags
+ * Changed 'KMyMoney' to &kappname;
+ * Added missing files to doc/en/Makefile.am
+ * Added home.html and whats_new.html for french as provided by
+ duloup@gmail.com
+
+2005-07-02 Robert Wadley <robntina@users.sourceforge.net>
+ * Added screenshots for the manual.
+ * Made some small changes to some of the image names in the manual.
+ * Added image names to the makefile
+
+2005-06-28 Ace Jones <acejones@users.sourceforge.net>
+ * Added meta tag to html reports. Apparantly this makes them show up better
+ on Windows. Submitted by Duloup <duloup@gmail.com>
+
+2005-06-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Selecting a different payee during renaming of another payee will
+ now enter the changes if the 'Keep changes when selecting a
+ different transaction/split' register setting is selected.
+ See also ChangeLog entry dated 2005-03-12.
+ * New categories will be shown as sub-account of expenses (#1061790)
+ * Applied patch provided by Laurent Montel to kmymoney2ui.rc
+
+2005-06-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed 'undefined INT_MIN, INT_MAX' problem
+ * Resolved compiler warnings in kofxdirectconnectdlg.cpp
+ * Fixed #1216779 (Fails to save with space in path)
+ * Added italian what's new page provided by Samuel Algisi and Andrea Nironi
+
+2005-06-20 Ace Jones <acejones@users.sourceforge.net>
+ * Surround CSV fields with quotes in report export. Fixes #1210755
+
+2005-06-20 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * GnuCash Reader - fix QMessageBox change/bug
+
+2005-06-15 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * GnuCash Reader - make anonymized names more readable
+
+2005-06-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Moved mymoneymoney.cpp to be the first module included when
+ building with --enable-final=yes, so that __STDC_LIMIT_MACROS is defined
+ before stdint.h is included for the first time
+
+2005-06-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Bumped version number to 0.7.3
+ * Applied fix-compile-visibility patch by Laurent Montel
+ * Updated acinclude.m4.in and cvs.sh from KDE/admin
+ * Pick up unusual places for the KDE basedir (e.g. /usr/lib/kde/3.3)
+ * Allow generation of pot file even if kde-config --install include
+ returns NONE
+
+2005-06-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added description of common widgets
+ * Extract path for stylesheet from $(KDE_XSL_STYLESHEET)
+ * Applied ui-dialog patch provided by Laurent Montel
+
+2005-06-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added function to select/unselect an account subtree in the
+ account selector widget via the right mouse button
+ * Fixed nested 'if' in Makefile.am
+ * Fixed reported Makefile.am problems with missing $(DESTDIR)
+
+2005-06-07 Ace Jones <acejones@users.sourceforge.net>
+ * Added Roger's chapter on institutions
+ * Updated some documentor assignments
+ * Added Roger to the doc credits
+
+2005-06-06 Ace Jones <acejones@users.sourceforge.net>
+ QIF Importer fixes for investments
+ * Don't create the cash side of the split if there is no cash involved
+ (Reinvest dividends and add/subtract shares)
+ * Fix Reinvest Dividends to use an income account also
+ * Support reinvlg, reinvsh (doing this on blind faith..I'm not really sure
+ what these transactions look like)
+ * Fix missing 'else' that caused reinvested dividends to show up as
+ unsupported.
+ * Support "sellx", "divx", etc
+ * Clarified the warning that !Type:Bank + NInvst isn't really supported
+ * Clarified the warning that Memorized Transactions are not supported
+
+2005-06-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added access to online help to find transaction dialog
+ * Made the transaction history the default in payees view
+ * Added chapter about widgets to documentation
+ * Convert html to encoding 'utf-8' for make preview
+ * Added 'make show' which opens the preview in konqueror
+ * Updated italian translation provided by Samuel Algisi and Andrea Nironi
+ * Revised german pages
+
+2005-06-05 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * GnuCash Reader - fix crash in Tools/Prices
+
+2005-06-05 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * GnuCash reader documentation (forgot --check - sorry!)
+
+2005-06-05 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * GnuCash reader documentation
+
+2005-06-03 Ace Jones <acejones@users.sourceforge.net>
+ * Refined the language regarding report configuration & report favorites
+ * Fixed the QIF import progress dialog for adding transactions to your
+ ledger, so now it displays properly.
+
+2005-06-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed broken actions (find transactions, print, reconcile)
+ * Removed some recently added debug output
+ * Applied i18n-patch provided by Laurent Montel with slight modifications
+
+2005-06-03 Ace Jones <acejones@users.sourceforge.net>
+ * Added some i18n's in report configuration. Submitted by Laurent Montel
+ <montel@kde.org>
+
+2005-06-03 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Add a bit of code that got lost yesterday
+
+2005-06-02 Ace Jones <acejones@users.sourceforge.net>
+ * Massive speed-up to QIF import. 3,000 transactions now takes less than a
+ minute, instead of >45. The progress dialog needs help, though.
+ * Fixed OFX direct connect, that has been broken since I purged the non-
+ plugin OFX importer.
+ * Changes to experiment with link replacement in home.html. These are all
+ #if0'd out.
+
+2005-06-02 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Don't allow GnuCash import into existing file
+
+2005-06-02 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Allow to open/import GnuCash files without suffix
+
+2005-05-31 Ace Jones <acejones@users.sourceforge.net>
+ * Added Categories and Accounts help as submitted by
+ Roger Lum <rogerlum@gmail.com>
+ * Added Search Transactions help as submitted by
+ Darin Strait <darin_strait@yahoo.com>
+
+2005-05-31 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Released 0.7.2
+
+2005-05-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added detection of html2ps and ps2pdf14 during configure
+ * Added conditional conversion of project handbook into pdf if
+ the necessary tools are present
+ * Don't compress file if named .xml
+ * Fixed warning about missing argument to QString::arg() in KMyMoneyView
+
+2005-05-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Pickup i18n version of whats_new.html
+ * Added KMyMoneyUtils::findResource() which searches different
+ filenames to find a translated file
+ * Added some more Galician files provided by Marcellino
+ * Added German translation to home page and what's new page
+ * Added (partial) italian translation provided by Samuel Algisi
+
+2005-05-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Calculator widget will clear display upon first digit/comma/period when
+ opened via the button
+ * Fixed payee rename to happen immediately
+ * Don't crash if splash screen is not correctly installed
+ * Renamed gl_ES.po and es_ES.po into gl.po and es.po
+ * Updated -fvisibility detection and usage
+ * Added 'make preview' to online documentation
+ * Generate PHB using meinproc
+
+2005-05-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added support for unsermake (updated to current versions of
+ cvs.sh and detect-autoconf.sh in the admin subdir)
+ * Added support for -fvisibility (slightly modified patch
+ provided by Laurent Montel)
+ * Fixed build-system in kgncpricesourcedlg.h (I made this change
+ already for 0.7.1 but it got lost/overwritten in the meantime)
+
+2005-05-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Applied patches provided by Laurent Montel
+ * Added entry for Laurent on the about page
+ * Added shortcut Ctrl-Ins to start a new transaction/split
+ * Changed copy split to only work with Ctrl-C
+
+2005-05-23 Ace Jones <acejones@users.sourceforge.net>
+ * Updated help files for reports, investments, and qif/ofx import
+
+2005-05-23 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Gnucash Reader
+ * Add dialog for Price Source
+ * Fix stock transfer crash
+ * Stand-alone anonymizer fix
+
+2005-05-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fix selection of investment accounts when account is selected in
+ another view
+
+2005-05-21 Ace Jones <acejones@users.sourceforge.net>
+ * First draft of help files for reports, online quotes, and qif/ofx import
+
+2005-05-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Bumped version to 0.7.2
+ * Added == and != operators to MyMoneySecurity
+ * Added testcases for the above
+ * Fixed new investment wizard to store modified security information
+
+2005-05-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed drag&drop of accounts between institutions
+ * Fixed build system for documentation
+ * Released 0.7.1
+
+2005-05-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed dependencies and install instructions for documentation
+ * Added initial doc on currencies
+ * Removed outbox view from documentation as it is not part of 0.8
+
+2005-05-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Avoid warning about unknown macro in kmymoney2.cpp
+ * Fixed escape sequence in kmymoneyedit.cpp
+ * Allow --enable-final to work properly with prior modifications
+ * Don't include the docbook source files in the installation
+ * Added new docbook files provided by Ace
+ * Added patch provided by Laurent Montel to fix some cvsignore files
+ * Fixed some more .cvsignore problems
+
+2005-05-14 Ace Jones <acejones@users.sourceforge.net>
+ * Added investment handling to QIF importing. Handles !Type:Invst
+ !Type:Price and !Type:Security.
+ * Started "KMyMoney Files" help file
+
+2005-05-14 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Gnucash Reader
+ * Infrastructure for Price Source fix
+
+2005-05-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Display all values in the investment transaction form as they show
+ up in the edit widgets
+ * Display currency symbol in investment transaction's value column
+ * Updated language specific files
+ * Released 0.7.0
+
+2005-05-13 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Gnucash Reader: allow edit of suspect scheduled transactions
+
+2005-05-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated am_edit to state currently found in KDE admin directory
+ * Fixed am_edit to setup dependencies correctly
+ * Show currency symbols in investment ledger
+
+2005-05-12 Robert Wadley <robntina@users.sourceforge.net>
+ * Changed the version number in the "about this release" page to 0.7
+
+2005-05-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Update field descriptions according to tab for all fields empty
+ * Fixed scheduled transactions to work from non-base-currency accounts
+ * Fix commodity of scheduled transactions if empty when loading file
+
+2005-05-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Update balances in accounts and institutio view when prices are changed
+ * Fixed handling of 'parens around' handling for negative values
+ * Fixed layout of details tab in FindTransactionDlg
+ * Speedup processing of page-up/page-down of register display
+
+2005-05-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed flickering of register when running w/o transaction form
+ * Fixed crash when loading different file
+ * Fixed initial selection of account in investment view
+
+2005-05-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Force pointers to deleted objects to point to 0x00
+ * Fixed update of transaction type tabs and field description strings
+ * Fixed update of transaction type widget in ledger entry mode
+ * Removed unused code in kMyMoneyCombo
+ * Fixed signal emition of kMyMoneyCombo
+
+2005-05-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Switch to ledger view when double-clicking an account in the
+ institutions view
+ * Fixed title label of institution view
+
+2005-04-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed display of positive net-worth (no more &nbsp;)
+ * Added auto increment check number
+ * Fixed a bug in the build system around the man pages
+
+2005-04-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed crash when adding new investment transactions via clicking
+ on the emtpy line at the end of the ledger.
+ * Fixed some problems around widget updates during entry of
+ investment transactions
+ * Fixed initial column width of transaction list in payees view
+ * Removed non-existant files in doc/en from distribution list
+
+2005-04-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added methods checkNoUsed() and highestCheckNo() to MyMoneyFile
+ * Warn user if check no is already in use
+ * When creating a transaction based on a previous one, set
+ check no to 'highest number used' plus 1.
+ * Update check no field if scheduled bill is paid with check
+ (This partially fixes #972028)
+
+2005-04-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added setting for color used to identify values that are based
+ on missing conversion rates (default=blue)
+ * Fixed values in the institution view when stock accounts are involved
+ * Fixed sign of values in institution view
+ * Added KGlobalLedgerView::accountId() to return id of selected account
+
+2005-04-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed editing schedules with a single split
+ * Improved exception messeages if split is not found
+ * Added capability to select reconcile from menu / toolbar
+
+2005-04-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed deprecated method from KLedgerView
+ * Fixed creation of categories when editing transaction with
+ single split
+
+2005-04-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Preserve file permission when saving
+ * Don't store ID for splits within transaction. They will be re-assigned
+ during file load anyway.
+ * Start editing split when any printable key is pressed
+ * Fixed crash in split editor when quitting using ESCape
+ * Advance selection bar to next split when saving a split
+
+2005-04-18 Ace Jones <acejones@users.sourceforge.net>
+ * Applied patch #1183190: Online quotes locale patch
+ Submitted by Andy Thaller <gandy@users.sourceforge.net>
+ * Fixes an error in online quotes on locales which use a different
+ comma and period placement scheme from the quote source.
+
+2005-04-17 Robert Wadley <robntina@users.sourceforge.net>
+ * Added a background image
+
+2005-04-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added template exporter
+ * Allow start editing in split editor with any key if table has focus
+
+2005-04-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed config.h.in from repository because it is automatically generated
+ * Fixed initial setting of LED in gpg config dialog when key field is empty
+ * Added ability to turn off VAT handling for specific accounts
+
+2005-04-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added configure switch to turn off online tests by default
+ * Added this switch to the respective unit tests
+
+2005-04-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed generation of symbolic links to header files to support
+ building for different environments and using the header files
+ of the sandbox and not the one's installed in $KDEDIR/include/kmymoney
+ * Fixed buildsystem again to use top_builddir in some circumstances rather
+ than top_srcdir
+ * Make sure to remove temporary files during distclean
+ * Fixed distribution directory for conditional subdirectories (plugins)
+
+2005-04-06 Robert Wadley <robntina@users.sourceforge.net>
+ * Changed the size of the title text in welcome.html and whats_new.html
+ to allow for languages that require more space.
+ * Added the capability of using a background image for the welcome and
+ whats_new pages.
+
+2005-04-06 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Fix spurious re-display of split editor window
+
+2005-04-05 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Remove old GNC reader
+
+2005-04-05 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Tidy up converter Makefile
+
+2005-04-03 Ace Jones <acejones@users.sourceforge.net>
+ * Fix QIF import to set shares as well as value. This bug caused reports to
+ be all 0's until the file was saved and reloaded. The reload ran it
+ through KMMView::fixTransactions(), which fixed the problem.
+ * Added a custom '#' field which contains the unique transaction ID. The QIF
+ importer will refuse to load a transaction which contains the same
+ transaction ID as an existing transaction.
+ * Separated --enable-ofx into --enable-ofxplugin and --enable-ofxbanking.
+ ofxplugin enables ofx support only in the plugin. It defualts ON, and
+ should be left on for the release. ofxbanking enables OFX direct
+ connect, and causes the main application to require libofx. This
+ is experimental and is not desired for production use.
+ * More thorough error checking in KEnterScheduleDialog.
+
+2005-04-03 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Move GnuCash reader to converter directory
+
+2005-04-01 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed #937728: Opening balances sometimes not picked up in QIF files
+ * Set the 'finish' button to be default in the last page of the new account
+ wizard
+ * Fixed bug in account select dialog. When using it to create a loan
+ account, the schedule is not created, which causes the account to need
+ to be "fixed" when its loaded.
+
+2005-03-31 Ace Jones <acejones@users.sourceforge.net>
+ * Added support for utf8-encoded QIF files
+ * Cleaned up some character-based string handling in QIF imports
+
+2005-03-31 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Set all values when entering scheduled transactions
+ * Don't show 'More ...' in home view, if there are no more scheduled tx
+
+2005-03-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed a crash on startup when compiled w/o debug options
+ * Fixed behaviour of briefScheduleWidget
+ * Fixed layout of briefScheduleWidget
+ * Made widgets inside briefScheduleWidget more readable
+
+2005-03-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added cancel button to new file dialog
+ * Hide load button for address data if no data is found for the owner
+ and also shows a message if the logic is started anyway.
+ * Fix enabling reports view
+ * Display currency symbol for payments
+
+2005-03-29 Ace Jones <acejones@users.sourceforge.net>
+ * Cleaned up welcome html pages a bit, with some help from Rob.
+
+2005-03-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed INT64_MIN, INT64_MAX definition problem
+ * Fixed initial startup behaviour
+ * Added tabs for personal information and transaction history in payees view
+ * Remove symlinks to header files before (re-)creating them during configure
+
+2005-03-27 Ace Jones <acejones@users.sourceforge.net>
+ * Added new welcome and whats new screens
+ (Submitted by Robert Wadley <rob@robntina.fastmail.us>)
+ * Hooked up logic for all the links and added a bunch of whats new text
+
+2005-03-26 Ace Jones <acejones@users.sourceforge.net>
+ * Handle QIF-imported opening balances the new way
+ * Terminology changes to US-english-ize the base text
+ (Submitted by Robert Wadley <rob@robntina.fastmail.us>)
+ * Fixed #1171039 (Made spaces in value amounts non-breaking in home view)
+ * Fixed a bug in QIF import. When a transfer transaction was imported,
+ the remainder of the transactions were imported into that account.
+
+2005-03-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Remove window size display from caption when compiled w/o debug support
+
+2005-03-25 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Avoid inadvertent overwrite of foreign file types
+
+2005-03-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed unused files
+ * Added missing header file to support 'make bcheck'
+ * Remove symlinks to header files before re-creating them
+
+2005-03-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fix mymoneymoneytest.cpp to work with 64 bit systems
+ * Fixed description of kbanking.m4 and libofx.m4 to match behaviour
+
+2005-03-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Resolved doxygen warnings in kfindtransactiondlg.h
+ * Added missing include stoppers in kmymoneypricedlg.h
+ * Fixed duplicate #defines when building with --enable-final
+ * Revised install/uninstall instructions in icons subdirectories to
+ support $(DESTDIR) setting used in e.g. RPM builds
+ * Revised build system to support 'make distcheck'
+
+2005-03-22 Ace Jones <acejones@users.sourceforge.net>
+ * Added "Are you sure you wish to cancel?" to import verify dialog.
+
+2005-03-21 Ace Jones <acejones@users.sourceforge.net>
+ * Modified MMTransaction::isDuplicate to consider split numbers
+ * Added an option to MMQifProfile to turn off the check for duplicate
+ transactions
+ * Made QIF import account type check less brittle by ignoring case and
+ white space. Also added "Credit Card" as a type instead of just
+ "CCard".
+
+2005-03-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Reworked build logic (Makefile.am)
+
+2005-03-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed reparenting of stock and investment accounts in engine
+ * Started to setup environment for external plugins
+
+2005-03-19 Ace Jones <acejones@users.sourceforge.net>
+ * Cleaned up small issues in reports wrt foreign stocks. These were
+ exposed by the fixes in Tom's last checkin.
+ * Edited the warning message for foreign stocks.
+ * Infrastructure for QIF investment imports. Doesn't actually handle them
+ yet, but the parsing is in place to do so. Also warns the user that
+ investments are not supported.
+ * Terminology changes to US-english-ize the base text
+ (Submitted by Robert Wadley <rob@robntina.fastmail.us>)
+ * Fixed all warnings
+ * Removed old online quotes system
+
+2005-03-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Allow payment of stock transactions to be in different currency
+ than the stock's security
+
+2005-03-18 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed Makefile.am mkinstalldirs for kmymoney.desktop
+
+2005-03-17 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Gnucash Importer
+ - Handle A/Payable and A/Receivable account types
+
+2005-03-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed splash screen handling
+ * Fixed handling to delete investment accounts
+
+2005-03-15 Ace Jones <acejones@users.sourceforge.net>
+ * Added new titlebar background
+ (Submitted by Robert Wadley <rob@robntina.fastmail.us>)
+ * Removed text shadow in title label widget. I couldn't find a way to ensure
+ it looked good in all color schemes.
+
+2005-03-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Revised install/uninstall instructions in icons subdirectories
+ * Improved reparenting of accounts
+ * Don't allow removal of accounts that have transactions assigned
+ * Remove reference to kapptest. KDExecutor is much better ;-)
+ * Removed unused icon file kfm_home.png
+ * Allow removal of unused stock accounts
+
+2005-03-13 Ace Jones <acejones@users.sourceforge.net>
+ * Online quotes will now only fetch quotes for the first security using a
+ given trading symbol. It's assumed that multiple securities using the
+ same symbol is an error condition.
+
+2005-03-12 Ace Jones <acejones@users.sourceforge.net>
+ * Removed most OFX dependencies in the main program--all that's left is the
+ OFX Direct Connect and the OFX importer test cases
+ * Reworked Web Connect to work on ANY plugin-handled file, not just
+ OFX.
+ * Removed "stripped.txt" from being output during online quote retrieval
+
+2005-03-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added option to control whether selecting a different transaction/split
+ using the mouse should be treated as Enter (saving changes) or Cancel
+ (discarding changes).
+ * Added option to activate auto fill feature in transaction entry
+ * Fixed crash when scrolling payees view
+
+2005-03-11 Ace Jones <acejones@users.sourceforge.net>
+ * Honor price precision setting in Online Quotes
+ * Honor price precision setting in Investment Summary
+
+2005-03-11 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * AutoEnter Schedules
+ - 1105503 - avoid lockup, produce debug data
+
+2005-03-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Qif Profile Editor
+ - Added patch provided by Tami King
+ - Reworked layout management to align objects
+
+2005-03-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Improved future payment display in financial overview page
+ * Revised KDE menu integration
+
+2005-03-09 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Gnucash import
+ - Fix handling of credit card accounts
+
+2005-03-08 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed a crash in checking ledger when attempting to edit the splits of
+ an investment transaction
+ * Added memos in the case of split transactions to transaction reports
+ (Submitted by Andy Thaller <gandy@users.sourceforge.net>
+
+2005-03-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added duplicate split feature
+ * Added menu dynamics to the HBCI plugin
+
+2005-03-04 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Gnucash import
+ - Fix #1151541 handle invalid value in splits causing crash
+ - Fix #1078850 remove dailym_f schedule which we can't currently handle
+
+2005-03-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added logic to update color settings for CSS
+
+2005-02-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Pulled titlelabel_background.png out of the attic
+ * Allow plugins to access the new title label object
+ * Added new title label to AqBanking plugin
+ * Added icon to institution list
+ * Removed unused icon files
+ * Install title label background image
+ * Added base class for views
+
+2005-02-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added icon to institutions in institution view
+
+2005-02-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added OK and Cancel buttons for the mouse users to the split widget
+ * Added .cvsignore to ofx plugin directory
+
+2005-02-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Preload split widget when category is not known
+ * Assign values when moving focus from e.g. amount field to split button
+ * Cancel any edit activity during reconciliation when pressing finish
+ or postpone button
+ * Removed unused member variables of split widget
+ * Fixed abnormal termination during read of encrypted files
+ * Improved performance of KGPGFile::atEnd()
+
+2005-02-16 Ace Jones <acejones@users.sourceforge.net>
+ * Changed the title bar to draw the text in at runtime. Thanks to THB.
+ * Robert Wadley's latest 32x32 ledger icon
+ * Moved reports into kmymoney2/reports directory, and exploded the reports
+ source files into more files.
+ * Moved converter unit tests into kmymoney2/converter directory.
+
+2005-02-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed reported documentation inconsistencies
+
+2005-02-16 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Gnucash import
+ - fix scheduled transactions >999.99
+
+2005-02-15 Ace Jones <acejones@users.sourceforge.net>
+ Latest Robert Wadley icons
+ * Made the colors more consistent,
+ * Fixed the contrast to better match icons next to them
+ * Changed the reconcile icons to make it more obvious that it is an account
+ being reconciled.
+ * Changed the find_transaction icon to look like its actually magnifying, and
+ added a white row.
+ * Toned down the green in the '+' symbols
+ * Fixed ledger icon (accidentally cut off part of the icon when I exported
+ the images) which causes the ledger icon to look too big.
+
+2005-02-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added complete re-work of the split transaction widget and dialog
+ * Increased height of transaction form items
+ * Another s/Splitted/Split/
+ * Improved MyMoneyMoney::operator ==(const MyMoneyMoney&)
+ * Added new MyMoneyTracer constructor
+
+2005-02-15 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Gnucash import
+ - doxygen update
+ - add online quote source to imported securities
+
+2005-02-13 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed doxygen warnings
+ * Added new icons supplied by Robert Wadley
+
+2005-02-13 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Gnucash import
+ - normalize monetary amounts
+ - correct Investment Account description
+
+2005-02-12 Ace Jones <acejones@users.sourceforge.net>
+ * Refactored PivotTable::AccountDescriptor into ReportAccount, which is now
+ a subclass of MyMoneyAccount, with hierarchy, currency, and
+ other convenience methods.
+ * Propagated ReportAccount throughout the entire reporting engine. The
+ reporting engine should never ever use a MyMoneyAccount.
+ * Numerous object logic cleanups throughout reports. I moved each method to
+ the proper object upon which it acted. Should improve readability. This
+ involved pushing a lot of functionality into the MyMoneyReport class.
+ * Fixed pivot table reports to handle foreign stocks
+ * Fixed report unit test helpers to deal with foreign currencies better
+ * Fixed MyMoneyMoney multiplication overflow in account query reports
+ * Made MyMoneyMoney::reduce() public so I can use it in reports
+
+2005-02-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Use the correct account when selecting 'edit' from within
+ the institution view
+
+2005-02-07 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Gnucash import - anonymizer changes, restore Ace's credit
+ * Fix editing of some frequencies (e.g. Quarterly)
+
+2005-02-05 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed account query reports to handle foreign stocks
+ * Minor clean-ups in query reports
+ * Really fixed report unit tests to deal with changes in handling of
+ opening balances
+ * Updated artwork supplied by Robert Wadley
+ * Added Tony Bloomfield to the credits
+
+2005-02-03 Ace Jones <acejones@users.sourceforge.net>
+ * Added more colorful title labels for the views in MyMoneyView using
+ artwork and conceptual design supplied by Robert Wadley
+
+2005-02-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed name of #define to make memory leak check feature work
+ * Added MyMoneyTracer trace logic
+ * Fixed a nasty bug in categories view
+ * Added 0.7 splash screen
+
+2005-01-31 Ace Jones <acejones@users.sourceforge.net>
+ * Updated unit tests to match new handling of opening balances
+
+2005-01-30 Ace Jones <acejones@users.sourceforge.net>
+ * Moved OFX import logic to a plugin.
+ * Some refinements to GNC import options dialog
+
+2005-01-30 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Gnucash import - implement option dialog
+
+2005-01-28 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed a subtle bug in reports that caused a crash if you double-clicked on
+ empty areas.
+ * Relaxed MyMoneyStorageANON::writeSecurity to pass through the trading
+ symbol, trading currency, and quote source for securities. This is useful
+ for debugging online quotes problems.
+
+2005-01-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Changed open balances handling to be transaction based
+ * Show balance per institution in institution view
+ * Added recursive option to MyMoneyFile::accountList()
+
+2005-01-26 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Gnucash import
+ * Properly fix coding error picked up by stricter compiler!
+
+2005-01-24 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Gnucash import
+ * Fix coding error picked up by stricter compiler
+
+2005-01-22 Ace Jones <acejones@users.sourceforge.net>
+ * Hooked up the "online price updates" button in the price editor
+
+2005-01-20 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Gnucash import
+ * Scheduled transactions default to Bills rather than Deposits
+ * Reinstated default currency calculation
+
+2005-01-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Allow modification of end date for scheduled transactions at any time
+ * Allow to add splits to scheduled transfers
+ * Loan wizard now treats final payment as 0 if two fields are left blank
+ * Updated handling of calculated last payment vs. final payment
+ * Fixed rounding problems in financial calculator
+ * Added testcases to financial calculator based on user's error reports
+ * Enter manually added price information into engine
+
+2005-01-18 Ace Jones <acejones@users.sourceforge.net>
+ * Added MSN.CA as another canadian source
+ * Fixed the online quote config dialog that I broke in my last checkin
+
+2005-01-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * add shared library support for external plugins
+ * Fixed #1074957 (Create loan accounts)
+ * Improved the check for a valid GPG id in the settings dialog
+ * Fixed crash when closeing the base currency selection dialog
+ * Allow changing the amount of a transaction w/o having a categroy assigned
+ * suppress version control of *.lo files
+
+2005-01-12 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed reports test failure caused by fixing bug #1079427 ("Checkings" now
+ reads "Checking")
+
+2005-01-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * removed unnecessary include at the end of kmymoneyonlinequoteconfig.cpp
+ * Fixed #1079427 ("Checkings" should read "Checking")
+ * Fixed problem with generated header files
+ * Added general plugin structure and mechanism
+ * Made KBanking a real plugin
+
+2005-01-10 Ace Jones <acejones@users.sourceforge.net>
+ * Added customizable date parsing to online quotes
+ * Added canadian mutual funds source
+ * Created a general-purpose date format parsing object
+ * Added date-parsing unit tests
+
+2005-01-07 Ace Jones <acejones@users.sourceforge.net>
+ * Online price quotes for foreign stocks will now automatically include a
+ price quote for the foreign currency
+
+2005-01-06 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed single-shot price updates
+ * Added functionality to retrieve single-shot currency price updates,
+ although this is not hooked up to the UI.
+ * Added right-click option in price editor to do an online price update
+ for a single currency pair
+ * Cleaned up parsing of multiple currencies passed around as a single
+ string in online price updating pipeline
+
+2005-01-05 Ace Jones <acejones@users.sourceforge.net>
+ * Added online quotes for currencies
+
+2005-01-05 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Gnucash import - complete rewrite
+ * Uses Qt SAX2 XML Parser; simpler interface, more structured code
+ * Uses imymoneystorage interface rather than imymoneyserialize
+ * Separates XML reading and conversion code
+ * More user options on Schedules and Investments
+ (selection dialog to be written)
+ * Better exception handling and reporting
+ * Conversion code tidied up considerably
+
+2005-01-04 Ace Jones <acejones@users.sourceforge.net>
+ * Hooked up multiple sources for online quotes
+ * Moved online quote logic out of KEquityPriceUpdateDlg and into the new
+ WebPriceQuote class.
+ * Moved online quote configuration logic out of kMyMoneyOnlineQuoteConfig
+ and into the new WebPriceQuote class.
+ * Fixed a test case in KReportsViewTest::testInvestment to use the correct
+ year (2004, not "current year").
+
+2005-01-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * added currency New Turkish Lira (YTL) for newly created files
+ * reassigned id of New Israeli Shekel from ILS to NIS for newly created files
+ * added configuration dialog for data encryption
+ * added support for gpg-agent in libkgpgfile
+ * updated drag&drop support
+ * Added README.Fileformats
+
+2005-01-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Show preferred investment accounts on home page
+ * Added tip on anonymous save
+ * Fixed creation of securities - do not override information of existing
+ securities for new stock accounts
+ * Modified link order to avoid problems with unresolved symbols
+ * Added drag and drop to accounts, categories and institution view
+
+2005-01-01 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed tab order in KNewFileDlgDecl
+
+2005-01-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Happy new year to all KMyMoney developers and users!
+ * Show preferred investment accounts on home page
+ * Added tip on anonymous save
+ * Fixed creation of securities - do not override information of existing
+ securities for new stock accounts
+ * Added setting for memory leak checker to configure scripts
+
+2004-12-31 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed ChangeLog entry to show the correct author
+ * Added more price entry logic (manual add, delete, etc.)
+ * Added icon to institution view
+ * Removed settings logic to distinguish between old and new accounts view
+ * Resolved a few warnings about deprecated methods
+ * Display a note in accounts and categories view if categories are hidden
+ by settings because they are unused (are not referenced by any split)
+ * Enhanced logic to convert account values into the base currency
+ * Fixed MyMoneyFile::security(const QCString& id) to return the baseCurrency
+ in case id is empty
+ * Fixed designer version problem in dialogs/keditschedtransdlgdecl.ui
+ * Added configure summary
+ * renamed kmymoneyonlinequoteconfig.ui into kmymoneyonlinequoteconfigdecl.ui
+
+2004-12-29 Ace Jones <acejones@users.sourceforge.net>
+ * Added simple category matcher for OFX import. This fills in the rest of an
+ imported transaction using the most recent transaction with this payee as a
+ model.
+ * Maintain backward compatibility with Qt designer 3.2
+ * Removed support for older versions of LibOFX
+ * Removed check for libuuid (not using this anymore, see 12/14 checkin)
+
+2004-12-28 Michael Edwardes <mte@users.sourceforge.net>
+ * Fixed #944780 (Schedule Brief Widget)
+ * Fixed # 972028 (Does not honour Scheduled Method)
+ * Fixed #987465 (cant edit scheduled transactions)
+ * Fixed #1012273 (Cant enter overdue payments at real date)
+ * Fixed #1035730 (No number edit in enter schedule dialog)
+
+2004-12-28 Michael Edwardes <mte@users.sourceforge.net>
+ * 64bit fixes for MyMoneyMoney
+
+2004-12-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added new admin directory from kdelibs 3.3.0
+
+2004-12-23 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Gnucash import - Christmas crash fix
+ * setTradingCurrency for new regime
+
+2004-12-20 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed bug in net worth reports with investments, related to new price scheme
+ * Added test case to catch this bug next time
+
+2004-12-19 Ace Jones <acejones@users.sourceforge.net>
+ * Adjustments to work with new price scheme
+
+2004-12-18 Kevin Tambascio <ktambascio@users.sourceforge.net>
+ * Added a new institution view, so users can easily edit
+ institution properties.
+
+2004-12-17 Ace Jones <acejones@users.sourceforge.net>
+ * Maintain backward compatibility with Qt designer 3.2
+
+2004-12-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added some changes for KDE 3.0 backward compatibility
+ * Added patch supplied by Leonardo Skorianez to load one's own data
+ * Added definition of QT_IS_VERSION to kdecompat.h
+ * Remove reconciliation flag if creating a transaction from a previous one
+ * Reduced flickering in ledger views
+ * Repackaged MyMoneyEquity and MyMoneyCurrency into MyMoneySecurity
+ * Added new investment wizard
+ * Added Equity base account which will hold opening balance accounts
+ * Removed (int) operators from MyMoneyMoney
+ * Added isZero(), isNegative() and isPositive() to MyMoneyMoney
+ * Added --without-arts configure option to acinclude.m4.in
+ * Removed unused MyMoneyFile* from engine objects
+ * Improved status display during online price update
+ * Added checks for referential integrity to MyMoneyFile
+ * Modified KEquityPriceUpdateDlg to support multi-selections
+ * Perform engine notifications based on a local copy of the notification
+ list to allow modification of the list during update()
+ * Enhanced parsing of MyMoneyMoney(QString) constructor
+ * Added automatically generated files to widgets/.cvsignore
+ * Added spanish and galician translation provided by Marcelino Villarino
+ * ... maybe a few other things I have forgotten ...
+
+2004-12-14 Ace Jones <acejones@users.sourceforge.net>
+ * Added Investment Performance reports (by account & type)
+ * Expanded unit tests for OFX imports
+ * Finished ability to create OFX files from KMyMoney data (currently only used
+ for unit tests, but could be expanded).
+ * Added unit tests for investment reports
+ * Added XMLandBack calls to reports that were missing it
+ * Added MyMoneyTransaction::splitByAccount(QCStringList&,bool)
+ * Added MyMoneyTransactionFilter::clearAccountFilter()
+ * Removed use of libuuid (OFX uid's don't need to be universally unique,
+ locally unique is good enough.)
+
+2004-12-10 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Gnucash import - minor bug fixes
+ * - preserve memo in scheduled transactions
+ * - correct account opening dates
+
+2004-12-07 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Fix sloppy coding error in Edit Schedule dialog
+ * Sorry, will try harder next time
+
+2004-12-05 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Gnucash import changes
+ * Improve exception reporting
+ * More comprehensive scheduled transaction processing
+
+2004-12-05 Ace Jones <acejones@users.sourceforge.net>
+ * Added unit tests for OFX import of bank statements
+ * Maintain libofx 0.6.6 compatability
+ * Separated "From/To (account)" and "From/To (date)" for translation purposes
+
+2004-12-03 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Implement KMyMoneyAccountCombo in scheduled transaction dialogs
+ * Allows selecting any asset/liability account for bills, etc.
+
+2004-11-28 Tony Bloomfield <tonybloom@users.sourceforge.net>
+ * Partial correction of share price import
+ * Fix bug 1067499 - crash on import
+ * Create orphan accounts for unknown account ids
+
+2004-11-28 Ace Jones <acejones@users.sourceforge.net>
+ * Replaced 'splitted' with 'split', which is more gramatically correct
+ * Added support for cash dividends in OFX importing. (Cash dividends are
+ dividends which are NOT reinvested).
+
+2004-11-27 Ace Jones <acejones@users.sourceforge.net>
+ * More test cases for transaction reports
+ * Added error-checking in OFX import/download
+ * Fixed bug in transaction reports where grand total was getting too large
+ when multiple levels of subtotalling were in effect
+ * Better handling of the memo field on transaction reports
+
+2004-11-25 Ace Jones <acejones@users.sourceforge.net>
+ * Added "Anonymous" as a file saving type, which will save off a
+ version of the user's data with all private information (names,
+ strings, amounts) masked. Hopefully this will be enough to get
+ users to be willing to send their data files to us when they have
+ a problem.
+ * Avoid runtime warnings concerning MyMoneyMoney::operator== in unit
+ tests
+ * Replaced some various MyMoneyMoney::operator==() calls with
+ MyMoneyMoney.isZero()
+
+2004-11-21 Ace Jones <acejones@users.sourceforge.net>
+ * Added support for OFX Direct Connect. Thus you can download statements
+ directly from your bank if they expose an OFX server. Detailed online help
+ file included, and posted to the dev list.
+ * Consolidated the work of OFX importing at the KMyMoneyApp level into a
+ single slot, KMyMoney2App::slotOfxStatementImport
+ * Better handling for online price update when selecting it for a single
+ stock using the right-click menu in investment summary. Automatically
+ starts the update, and only shows the selected stock.
+ * Respect KDE-wide settings for negative money sign position in reports
+
+2004-11-08 Ace Jones <acejones@users.sourceforge.net>
+ * Added support for multiple accounts in a single OFX file, based on a patch
+ by Chris B <news@semperpax.com>.
+
+2004-10-29 Ace Jones <acejones@users.sourceforge.net>
+ * Added option to obtain online stock quotes using a local shell script
+
+2004-10-23 Ace Jones <acejones@users.sourceforge.net>
+ * Investment Transactions report
+ * Investment Holdings by Account report
+ * Investment Holdings by Type report
+ * Account Balances by Institution report
+ * Account Balances by Type report
+ * Added grand total row to all transaction reports
+ * Added underlying support for account reports, which builds on
+ transaction reports
+ * Added KMyMoneyUtils::equityTypeToString
+
+2004-10-21 Ace Jones <acejones@users.sourceforge.net>
+ * Added settings tab for online quotes
+
+2004-10-17 Ace Jones <acejones@users.sourceforge.net>
+ * Automatically close all report tabs when the file closes
+ * Added right-click access to on-line price updating in investment view
+ summary
+
+2004-10-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed crash when creating new categories while entering transactions
+ * Added "Don't ask again" switch to question if new category should be
+ created.
+ * Removed unused tabs in new account dialog rather than disableing them
+ from the KABC addressbook.
+
+2004-10-16 Ace Jones <acejones@users.sourceforge.net>
+ * Added online price updating for equities
+ * Added "Favorite Reports" to the home page.
+ * Added investment view to the global ledger view, which is needed for
+ investment accounts to show up in the verify import dialog.
+ * Fixed handling of "Sell" transactions in transaction reports. They were
+ still being reported as "Buy" transactions.
+ * Tweaked the logic for handling account filters with transfer transactions
+ in transaction reports. Now the transaction will be included once
+ if only one of the accounts is included in the filter.
+ * Added cash flow analysis tools for future investment reports
+ * Cleaned up random investment data generator (in KReportsViewTest)
+
+2004-10-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added VAT handling
+ * Added MyMoneyMoney::isZero()
+
+2004-10-13 Ace Jones <acejones@users.sourceforge.net>
+ * Added investment fields to transaction reports (action, shares, price)
+ * Added 'value' field to investment summary. This displays the net value of
+ each holding. Renamed previous 'current value' to 'price'
+
+2004-10-11 Ace Jones <acejones@users.sourceforge.net>
+ * Implemented "Edit..." from context menu in investment view summary
+
+2004-10-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated splash screen handling. Using KSplashScreen on KDE >= 3.2.0
+
+2004-10-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #1043892 (crash when changing action in checkings view)
+ * Fixed #1040653 (GNC import doesn't handle equity accounts correctly)
+ as provided by Tony Bloomfield
+ * Allow double click in investment view on any column
+
+2004-10-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Reworked keyboard event handler
+ * Removed signalEnter() and signalEsc() signals
+ * Fixed initial size of cash account completion box
+ * Avoid some of the register flickering introduced in investment stuff
+ * Fixed a problem in reinvest dividend transactions when a fee was
+ assigned to an interest account
+ * Fixed switching to investment view when start editing an investment
+ transaction in a different view
+ * Reduced min version for autoconf to 2.53
+ * Maintain 3.0 backward compatibility
+
+2004-10-09 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed a bug in collapsed-column net worth reports (quarterly, yearly, etc)
+ where currency conversion was involved. The wrong price was being used.
+
+2004-10-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * make sure widgets are destroyed when edit transaction mode is left
+ before any other operation is started. There used to be a race
+ condition somewhere which caused the program to crash
+ * Enable to clear the category field and save the transaction
+ * Added a 'use system font' switch to the configuration (Fixes #1039342)
+
+2004-10-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated changes for equity price edit dialog
+ * Updated currency edit dialog to show a better equation for price
+
+2004-10-04 Ace Jones <acejones@users.sourceforge.net>
+ * Added importing of investment statements via OFX files. This is highly
+ experimental, and should not be used with any real data!!
+ * Added MyMoneyStatement XML files as an acceptable file format for
+ web connect. This is just for debugging.
+ * Changed equity price edit dialog to use the same widget as the currency
+ price edit dialog.
+
+2004-10-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added patch supplied by Alexander Novitsky
+ * Fixed logic so that register is updated when a transaction is
+ modified/entered.
+ * Corrected error messages to point to the right method names
+
+2004-09-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed memory leak in KEditEquityEntryDlg
+ * Added icons to buttons in KEditEquityEntryDlg
+ * removed compile warnings in KEditEquityEntryDlg
+ * disable edit/remove button when no entry is selected
+
+2004-09-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Use QGuardedPtr for pointers to widgets
+ * Renamed hideWidgets() into destroyWidgets()
+ * Don't re-create edit widgets when changing type of investment
+ transaction. This solved the misterious crash.
+ * Use highest compression rate for man pages
+
+2004-09-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Applied patch for FreeBSD supplied by Alec
+ * Added feature request #929127 (new transaction default based on payee)
+
+2004-09-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * added buttons to register edit mode
+ * revised the string comparison in operator == of our objects
+ * fixed bug in MyMoneyMoney::operator -(int)
+ * added option to re-enable all (don't show again) messages
+ * added setting (not in GUI yet) do suppress display of calculator button
+
+2004-09-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated investment logic to support change of action during edit
+ * Generalized tab order handling in ledger view
+ * Improved tab order handling
+ * Fixed focus display of account combo box
+ * Added more investment logic (register based input)
+ * Cancel investment edit when focus is lost
+ * Fixed logic of account combo box
+ * Updated interface to MyMoneyEquity::hasPrice()
+
+2004-09-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Update investment summary when different account is selected
+ * Update ledger register when account with no transactions is selected
+ * Set the default smallest fraction for new equities to 100
+ * Check all equity parameters before accepting them
+
+2004-09-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Moved m_smallestAccountFraction from MyMoneyCurrency to MyMoneyEquity
+ * Added fraction field to equity object
+ * Added icons to buttons in equity dialogs
+ * Added edit field for totals in investment ledger
+ * Revised calculation of values (e.g. total) in investment ledger
+
+2004-09-15 Ace Jones <acejones@users.sourceforge.net>
+ * Applied latest patch from Martin Preuss: Imported data is UTF8.
+ * Reversed sign on OFX statement import when transactions are
+ investment transactions. I haven't figured out yet why this is needed.
+
+2004-09-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Turned KMyMoneyBanking into a singleton object
+ * Reduced dependency of KBanking down to converter/mymoneybanking
+ * Present reasonable error message when trying to load a directory as template
+
+2004-09-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Do not allow any action that requires a file if no file is open
+
+2004-09-11 Ace Jones <acejones@users.sourceforge.net>
+ * Modified OFX Web Connect to deal with the case where the user does not
+ have any file open at all.
+ * Modified OFX Web Connect to bring the window to the forefront in KDE < 3.2
+ * Moved "Tools | Banking Settings" to "Settings | Configure Online Banking"
+
+2004-09-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed inclusion order of header files
+ * Include xmethod generated files prior to any other header file
+ * Fixed argument for QMessageBox in kmymoney2.cpp
+
+2004-09-10 Ace Jones <acejones@users.sourceforge.net>
+ * Added patch from Martin Preuss to import files via AqBanking
+
+2004-09-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * More investment view work (mainly register based editing)
+
+2004-09-09 Ace Jones <acejones@users.sourceforge.net>
+ * Changed the way the program raised itself to the forefront when
+ receiving an ofxWebConnect DCOP call. This method was suggested by
+ Lubos Lunak <l.lunak@suse.cz> of the KDE core development team.
+ * Fixed compile problems when neither HAVE_NEW_OFX or HAVE_LIB_OFX
+ are defined.
+ * Copied new "OFX not available" message to the other place it's used.
+ * Unified the 2 interfaces to LibOFX (pre-0.7 and post-0.7). They now
+ share the same code for processing the data, the only differences are
+ in how it interacts with the library.
+ * Fixed memory leak in KMyMoney2App::slotBankingSettings()
+
+2004-09-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added KBanking support supplied by Martin Preuss
+ * Set focus to register after deleting a transaction
+
+2004-09-04 Ace Jones <acejones@users.sourceforge.net>
+ * Added support for Quicken "web connect". To enable this, set up KMM to
+ handle the mimetypes "application/vnd.intu.qfx", "application/x-ofx". KMM
+ will launch and import those transactions. If there is another instance of
+ KMM open at the time, it will import them into THAT instance.
+ * Added bankID's to MyMoneyStatement & MyMoneyTransaction. This is a
+ unique bank-assigned ID that can be used to detect duplicate transactions.
+ * Modified MyMoneyStatement importer to skip transactions with BankID's that
+ are already in the file.
+ * Added type identifier to MyMoneyStatement (checkings, savings, etc)
+ * Cleaned up MyMoneyStatement importer
+
+2004-09-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added set/get functions to MyMoneyMoney for completeness
+ * Added formatting testcases to MyMoneyMoneyTest
+ * Improved libofx autoconf logic and put into separate file
+ * Check for a minimum version of the automake package
+
+2004-09-02 Martin Preuss <aquamaniac@users.sourceforge.net>
+ * added optional support for next generation of LibOFX
+ * Online banking: Importing transaction statements from the result of
+ online requests now works.
+
+2004-08-31 Ace Jones <acejones@users.sourceforge.net>
+ * Added importing of OFX files
+ * Added libofx to the project
+ * Added AC_CHECK_LIB_WPROLOGUE to check for libofx
+ * Added MyMoneyStatement. This class represents a paper bank statement,
+ and acts as an interface between providers of such data (OFX, HBCI)
+ and the program.
+ * Fixed crash in QIF import when filter was set to %d/%mmm/%yyyy and
+ data was actually %d/%m/%yyyy
+
+2004-08-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed "Create Me" files from Makefile.am
+ * Better handling of next due date in loan wizard
+ * Updated README with instructions about how to get the memory leak
+ detection code compiled in
+ * Fixed #1016219 (Account creation fails after loan creation)
+ * Added page to loan account wizard to specifiy the loan payout transaction
+ * More investment view work (now can create and edit all transaction types)
+
+2004-08-26 Martin Preuss <aquamaniac@users.sourceforge.net>
+ * added support for online banking using kbanking
+ (http://www.aquamaniac.de/aqbanking/)
+ configure now checks whether KBanking is available and simply skips
+ support for it if kbanking is not found.
+
+2004-08-24 Ace Jones <acejones@users.sourceforge.net>
+ * Removed "Create Me" graphics from all dialogs
+
+2004-08-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed some logic errors in KAccountComboBox and completion object
+ * More work on the investment view
+
+2004-08-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed conflicts due to merge with changes made by Ace
+ * Preload the KDE default settings for monetary display
+ * Fixed #1012257 (Calculator does not honor localized settings)
+ * Added flag support to MyMoneyTemplate
+ * Reconverted old default category files to new format (incl. flags)
+ * Added display only mode to kMyMoneyCategory which does not try to
+ create accounts
+
+2004-08-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added idlist as parameter to MyMoneyFile::accountList()
+ * Added testcase for the above
+ * Fixed MyMoneyMoney::formatMoney() to avoid displaying the decimal
+ separator if currency does not have a fractional part (e.g. HUF, IRR)
+ * Added new account template loader
+ * Removed old default category loader
+ * Removed old default account files
+ * Added new i18n based template directories for accounts
+ * Converted old default category files to new format
+ * Rearranged the ledger views to better support 800x600
+ * Added size display in caption
+ * Resized payees view to better support 800x600
+
+2004-08-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added button to kMyMoneyEdit to start the calculator
+ * Fixed icon display on date and money edit fields
+ * Converted button of kMyMoneyDateInput to KPushButton
+ * Fixed account selection button to show the correct
+ account after switch to different account type
+ * Fixed initial header of empty schedule view
+ * Fixed default button in schedule edit dialog
+ * Added KGPGFile::keyAvailable()
+ * Made OK the default button in edit schedule dialog
+
+2004-08-21 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed a bug in transaction reports where totals did not work
+ with the new parentheses-around money format
+ * Added "Do not ask again" to "Do you want to override the opening balance
+ of this account currently set to %1 with %2?" in QIF reader.
+ * Added "Automatically create missing payees" to "Last Use Settings" in
+ configuration file.
+
+2004-08-17 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed a bug where creating a new category would not properly use the
+ currently selected account as the parent, for expense accounts.
+ * Implemented double-clicking in accounts and categories views.
+
+2004-08-16 Ace Jones <acejones@users.sourceforge.net>
+ * Modified reports to use ()'s for negative values
+ * Added Tax notation in GB default accounts
+ (Thanks to Tony Bloomfield)
+
+2004-08-14 Ace Jones <acejones@users.sourceforge.net>
+ * Added an initial Tax Transactions report. Still more work needed
+ to make it fully-featured.
+ * Added "Include on Tax Reports" property in category edit dialog
+ * Added Tax notation in US default accounts
+ * Commented MyMoneyReport class
+ * More information on "Unexpected exception in KLedgerView::
+ setupPointerAndBalanceArrays"
+ * Inverted sign of values in Transactions reports to match standard
+ cash flow notation.
+
+2004-08-11 Ace Jones <acejones@users.sourceforge.net>
+ * Added stock accounts to kMyMoneyAccountSelector
+
+2004-08-08 Ace Jones <acejones@users.sourceforge.net>
+ * Added the ability to designate some reports as your favorite, and
+ they'll be grouped together.
+ * Altered handling of reports index list, so customized reports are stashed
+ in the same heading as their parent reports.
+ * Fixed a bug in running sum reports (Net Worth, et al). When either end
+ of the date range was QDate() the opening balance could be calculated wrong.
+
+2004-08-07 Ace Jones <acejones@users.sourceforge.net>
+ * Added MS Money date format as an option to QIF importer (%m/%d'%yyyy)
+ * Added some new default reports, which are permutations of the old ones
+ * Modified the reports index list to show a tree view, organized by type of
+ report.
+ * Modified reports to remember the plain language date range setting,
+ so if you set a report to "Current Month", it will ALWAYS show the
+ current month.
+ * Added rudimentary help to report configuration dialog.
+ * Added 'close' button to report configuration dialog.
+
+2004-08-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * More changes to maintain backward compatibility with older Qt versions.
+ Application now compiles under KDE 3.0 again.
+
+2004-08-04 Ace Jones <acejones@users.sourceforge.net>
+ * Added more operators to reports::QueryTable::TableRow to satisfy
+ qHeapSort in earlier versions of QT
+
+2004-08-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Maintain backward compatibility with older Qt versions
+ * Fixed initialization order of kgpgfile objects
+
+2004-08-03 Ace Jones <acejones@users.sourceforge.net>
+ * Added ISO date format as an option to QIF importer (%yyyy-%mm%-dd)
+ * Added CSV export for Transaction Reports
+ * Added Currency conversion for Transaction Reports
+
+2004-08-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added workaround for bug in KFilterDev
+
+2004-08-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added GPG encryption logic
+
+2004-08-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed asset loan view activation
+ * Fixed new category/equity process
+
+2004-07-31 Ace Jones <acejones@users.sourceforge.net>
+ * First draft of transaction reports. Doesn't yet convert currency or export
+ to CSV, and definitely needs more testing.
+ * Changed the currency identifier for "don't convert to base currency" reports
+ from the trading symbol (e.g. $ which could mean USD, or AUD, or CAD) to the
+ ID (e.g. USD, AUD, CAD, etc) which is more specific
+ * Reworked the report configuration dialog. Now instead of bolting on an
+ additional frame, the report configs are additional tabs inserted at the
+ beginning. Looks a bit cleaner. Also brought them into QT Designer.
+
+2004-07-29 Ace Jones <acejones@users.sourceforge.net>
+ * Removed KTabWidget for KDE < 3.2 in the report tabs
+ * Fixed CSV report export so larger (>10,000) values are not rounded
+ * Fixed the case where the user enters transactions before the
+ opening date of the account and calls for a net worth report.
+
+2004-07-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Maintain backward compatibility for KDE 3.0 (it's still broken
+ due to usage to KTabWidget which only exists in KDE >= 3.2)
+
+2004-07-28 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed bug in reporting logic. AccountDescriptor::operator<() was broken,
+ missing a case.
+
+2004-07-27 Ace Jones <acejones@users.sourceforge.net>
+ * Fixed CSV report export so no commas are contained in values. Values are
+ now saved as double's instead of formatted strings.
+ * Fixed spelling error in reports exception dialog.
+
+2004-07-26 Ace Jones <acejones@users.sourceforge.net>
+ * Added numerous exceptions for overflow conditions in reports
+
+2004-07-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed alignment of institution dialog
+
+2004-07-26 Ace Jones <acejones@users.sourceforge.net>
+ * Standardized formatting of headers for scheduled payments on home page
+
+2004-07-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * added more investment logic (register layout)
+
+2004-07-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * set id of category before emitting signal in kMyMoneyCategory
+ * added more investment logic (automatic form adaption)
+
+2004-07-23 Ace Jones <acejones@users.sourceforge.net>
+ * Replaced report control hyperlinks with a new button bar widget at the
+ top of the tab
+ * Added a chart view for report charts. No actual charts yet, just stubs.
+
+2004-07-23 Ace Jones <acejones@users.sourceforge.net>
+ * Preliminary rough implementation of transaction report
+
+2004-07-22 Ace Jones <acejones@users.sourceforge.net>
+ * Added ability to save reports as CSV
+ * Moved reports::AccountDescriptor into reports::PivotTable
+
+2004-07-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed painting of kMyMoneyAccountCombo
+
+2004-07-20 Felix Rodriguez <frodriguez@users.sourceforge.net>
+ * Expanded Backup Dialog so we can see the OK and Cancel Buttons.
+
+2004-07-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Maintain backward compatibility with older Qt and KDE versions
+ * Added File/Import/Gnucash menu entry and logic to call the reader
+
+2004-07-17 Ace Jones <acejones@users.sourceforge.net>
+ * Added 'comment' field for reports, displayed in the reports list tab
+
+2004-07-17 Ace Jones <acejones@users.sourceforge.net>
+ * Ability to delete reports
+ * Context menu (right click) from the reports list to access the report
+ management actions. (The same actions that are available as links in
+ the report tabs)
+
+2004-07-16 Ace Jones <acejones@users.sourceforge.net>
+ * Interface to contain the reports, as suggested by Tom. Completely re-wrote
+ KReportsView in the process.
+
+2004-07-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #987465 (can't edit scheduled transactions)
+
+2004-07-14 Ace Jones <acejones@users.sourceforge.net>
+ * Creation of new reports. Interface is pretty rudimentary.
+ * Center reports within tab frame
+
+2004-07-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * More investment work
+ * Moved showWidgets() from the various ledger views to the base class
+ as it was the same code in all derivatives
+
+2004-07-14 Ace Jones <acejones@users.sourceforge.net>
+ * Don't attempt to 'fix' transfers from/to a credit card account on load
+
+2004-07-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * More investment view work
+
+2004-07-14 Ace Jones <acejones@users.sourceforge.net>
+ * Created MyMoneyReport object, which replaces ReportConfigurationFilter
+ * Serialize MyMoneyReport objects to/from XML storage file, so users' changes
+ to their reports will be saved/loaded automatically
+ * Updated all report test cases to also test serialization
+
+2004-07-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added more logic for investment view
+ * Fixed word wrap in split transaction dialog
+ * Show warning message when a category is created and the unused
+ categories are hidden by user settings
+ * Added investment register framework
+
+2004-07-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Add creation of stock accounts through investment view
+ * Added equities to MyMoneyStorageDump
+ * Really remove price information from equity history
+ * Added new loadList method to kMyMoneyAccountSelector
+
+2004-07-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added stock account type
+ * Added checks to make sure that stock accounts have an investment parent
+ * Added testcases
+
+2004-07-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added possibility to update currency rate for foreign currency accounts
+ during account creation
+ * Added duplicate transaction detection and use it during QIF import
+
+2004-07-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed spelling of institution
+ * Added test for presence of round() function
+ * Modified MyMoneyFinancialCalculator to use own rounding function if
+ round() is not available
+ * Fixed #979747 (Interest rate does not get updated)
+ * Added constant MyMoneyMoney::autoCalc used to identify automatically
+ calculated values.
+
+2004-07-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added patch supplied by Ace Jones
+ * Fixed the 'all dates' option in the report generation as proposed
+ by Ace
+ * Changed currency code for Ukraine Hryvnia from UAG to UAH
+ * Calling kMyMoneyDateInput::setDate() with QDate() as argument sets
+ date to 00.00.0000 which will be returned as QDate() (the invalid date)
+
+2004-06-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Don't show investment accounts in category selector widget
+ * Added general test environment for automated application tests
+ * Allow three digit fractional part for loan interest rates
+
+2004-06-27 Kevin Tambascio <ktambascio@users.sourceforge.net>
+ * Added widgets to the online stock price update dialog
+ * added placeholder dialog for the config options for the online update feature.
+ * added a class in the engine to handle price updates from the online updater.
+ This will allow dialogs to expose that feature, without burying logic to update
+ the engine objects in the dialog.
+ * some work on the investment view feature
+
+2004-06-23 Kevin Tambascio <ktambascio@users.sourceforge.net>
+ * Added new dialog (doesn't do anything yet) as a placeholder for the online
+ stock/currency price update features.
+ * Added a menu item under the Tools menu to access this. It will also be
+ available in the investment view.
+
+2004-06-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Applied patch(es) supplied by Ace Jones
+ * Fixed QIF generation errors
+ * Added method hasAccount() to MyMoneyFile
+ * Added testcases for this method
+
+2004-06-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Report failures of unit tests correctly
+ * Fixed transaction filter handling for reports
+ * Fixed #968755 (Unwanted ledger view switch)
+ * Partial cleanup of unused code
+ * Fixed #975134 (Finished transactions will be shown on homepage)
+
+2004-06-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added patch supplied by Ace Jones
+ * Show preferred account after startup
+ * Fixed logic for KDE 3.2
+
+2004-06-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Replaced KLineEditDlg with KInputDialog for KDE >= 3.2.0
+ * Replaced some deprecated methods in KDE >= 3.2.0
+ * Fixed #968338 (Quarterly schedules are not calculated correctly)
+
+2004-06-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed problem in find transaction logic
+ * Fixed problem with scheduled payments when payment is on 29th-31st but
+ month has less days
+
+2004-06-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added kMyMoneyEquity to KLedgerViewInvestment
+ * Removed unused members from kMyMoneyCategory
+ * Fixed new equity entry dialog to keep updated values in member vars
+ * Fixed some make issues
+ * Fix endless loop when using with Qt < 3.2.1
+
+2004-06-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Renamed newAccount() to addAccount() in the engine code to
+ maintain consistency
+ * Adapted testcases to reflect above change
+ * Adapted kmymoneytest.cpp to work with CPPUNIT 1.9.14
+
+2004-06-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Setup minimum size of kMyMoneyAccountCombo
+ * Clear out text on account combo if no account present
+ * Disable account combo box if no account available
+ * Disable register if no account available
+ * Fixed parameter setup for call of split transaction dialog
+
+2004-05-31 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Make sure datepicker widget is always shown completely on screen
+ * Fixed category/amount assignment problem
+ * Created kMyMoneyAccountCombo widget
+
+2004-05-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added KDE compatability header file. Should be used instead of kdeversion.h
+ * Added global test container that can be built and run using 'make check'
+ * Added patch for report configuration supplied by Ace Jones
+
+2004-05-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Enable more button even if transaction is not edited
+ * Keep the payee id for transfer transactions
+
+2004-05-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Allow arbitrary category/account selection in category field
+ * Reworked the ledger view code to support new features
+ * Investmentview is still broken!!
+ * Fixed spelling in de.po
+ * Fixed an issue with XML writing on KDE 3.2
+ * Added setWeekendOption to MyMoneySchedule
+
+2004-05-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Applied patch supplied by Ace Jones
+ * Fixed #952804 (marking 'cleared' in transaction entry form doesn't work)
+ * Started to implement equity accounts
+
+2004-05-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed some issues around multiple currencies / exchange rates
+ * Fixed #952696 (Mis-assigned shortcut Alt-M in transaction form)
+
+2004-05-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed comparison of account objects
+ * Added testcases for equality of MyMoneyAccount object
+ * Removed unused code from kmymoneycategory.*
+ * Keep account completion box in same position when resizing
+
+2004-05-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added price precision setting to settings dialog
+ * Use price precision setting in price edit dialog
+ * Maintain backward compatability with Qt 3.1
+
+2004-05-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #944771 (Transaction form moves down the screen)
+ * Fixed #944778 (File/Save As not working properly)
+ * Fixed #944761 (Next date not calculated properly)
+ * Fixed #932681 (no action for esc/enter in nr. field)
+ * Allow to enter a '-' as first character in monetary fields without
+ starting the calculator
+ This issue only occured in the credit card and liability view
+ * Enhanced MyMoneyFile::balance() and totalBalance() with date parameter
+ * optimized MyMoneyTransactionFilter::setDateFilter()
+ * optimized reporting code
+
+2004-04-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Close dialog after the default currency has been selected
+ * Allow to override opening balance of existing account when
+ importing QIF file
+
+2004-04-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed layout of initial import dialog
+ * Fixed #906749 (Hang in loop on QIF import)
+ * Fixed #933064 (MS-Money sub-categories make QIF import hang)
+ * Fixed a problem with importing QIF dates using spaces
+ * Maintain description field when importing accounts via QIF
+ * Preload account types for account creation wizard in constructor
+
+2004-04-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added missing layout to loan wizard
+
+2004-04-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed some problems around multi currency and account/category creation
+ * KUpdateStockPriceDlg now uses kMyMoneyEdit for price field
+ * Revised interface of KUpdateStockPriceDlg
+ * Enabled Return/Esc handling for KUpdateStockPriceDlg
+ * Fixed problems with inline documentation
+ * Fixed layout of amount tab in find transaction dialog
+
+2004-04-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Revised view activation signalling
+ * Added print button and file print option which is active for reports
+ view only
+ * Revised handling of cross-directory dependency to support older versions
+ of automake
+ * Removed m_file member from ReportsView::PivotTable
+ * Added kMyMoneyCurrencySelector widget
+ * Moved styles for report generation from code to kmymoney2.css
+ * Added support for shares to XML storage object
+ * Fixed a problem in MyMoneyMoney::formatMoney if precision is larger than 4
+ * Added KCategoryListItem to differentiate between accounts and category
+ view
+ * Added observer functionality to KInvestmentView
+
+2004-04-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added improvement for reporting
+ * Added icon for reporting
+
+2004-04-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added basic multiple currency work (currencies can be managed but
+ they are not used for accounts and transactions yet)
+ * Added reporting view supplied by Ace Jones
+ * Made some changes to the reporting view to support printing through KDE
+ * Added detection of multiple KMyMoney instances and issue warning
+ * Prevent loading the same file into multiple instances of KMyMoney
+
+2004-03-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #922678 (number field is not saved to XML file)
+
+2004-03-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed layout of split correction dialog
+ * Allow transfers with partial income/expense
+ * Fixed display of form for investment ledger
+ * Added missing investmentview files to project
+ * Added equity tests to unit test framework
+
+2004-03-13 Kevin Tambascio <ktambascio@users.sourceforge.net>
+ * A good chunk of functionality for investments is checked in. Includes support for
+ reading/writing MyMoneyEquity objects. Can add investment accounts through
+ the new account wizard. Can use the investment view to view all your investment
+ accounts. XML reader/writer will read and persist the new objects.
+
+2004-03-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added investment view and started integration of it
+
+2004-02-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Revised payees view
+ * Added validator function for kMyMoneyEdit that respects monetary
+ settings
+ * Updated project file
+ * Fixed sizing of widgets in ledger view
+ * MyMoneyFile emits more notifications for payees
+
+2004-02-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #897033 (fixed open file handling)
+ * Fixed #902580 (unable to create category during transaction entry)
+ * Fixed #902581 (unable to modify date correctly in ledger view)
+ * Set initial focus of new account wizard to account name
+
+2004-02-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added new MyMoneyMoney implementation which is based on
+ numerators and denominators (based on GNUCash's gnc_numeric
+ and converted to our object oriented environment)
+
+2004-02-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #892954 (Creating accounts within QIF import crashes application)
+
+2004-02-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * 0.6rc2 released
+
+2004-02-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * updated messages for further translation
+
+2004-02-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated fix for #886979
+
+2004-02-03 Michael Edwardes <mte@users.sourceforge.net>
+ * Fix #886979
+
+2004-02-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed bug in 'create schedule' to include all splits of the originating
+ transaction
+ * Make a selected schedule visible when coming from the 'home' page
+ through a link on the schedule
+ * Fixed EOL coding from CRLF to LF in all relevant files
+
+2004-01-31 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #887044 (cannot rename categories)
+ * Fixed #887048 (account icons not updated after rename)
+ * update of previous fixes. We now allow multiple splits with
+ the same category for one transaction. This certainly makes sense.
+
+2004-01-29 Michael Edwardes <mte@users.sourceforge.net>
+ * Fixed #884364 (Support for variable amounts in startup code).
+ * Fixed config read/write in settings dialog.
+ * Fixed 883085 (Options for schedules stored in wrong group)
+ * Fixed 883260 (The schedule 'engine' doesnt honour the days in advance option)
+ * Fix edit schedule dialog that sets the estimate option even when not set.
+ (Only occurs if you never click on the checkbox).
+ * Fixed #880052 (Adjustment of payment date when scheduled for weekend).
+ (I think its a bug...)
+ * Call refresh properly in KScheduleView::slotNewXX.
+ * Set the icons for the new file dialog in both constructors.
+ * Make KBankListItem, KMyMoneySplitTable, KMyMoneyRegister honour the list colours option.
+
+2004-01-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed #881136 (No warning when filesave fails)
+ * Fixed #878380 (initial font setting)
+ * Fixed #879317 (missing word-wrap for a label field)
+ * Fixed #883778 (Maximum number of editable splits)
+ * Fixed #884190 (Transaction containing two splits referencing same account)
+ * Fixed #877819 (i18n of standard account names)
+ * Fixed #882330 (Account button does not show correct account)
+ * Fixed #879002 (account button does not get updated)
+ * Fixed #884226 (Cannot edit loan transaction)
+ * Fixed #882290 (Default accounts only support ISO8859-1 charset)
+ * Fixed #884224 (Transaction details missing in search dialog)
+ * added russian homepage, default accounts and po file
+
+2004-01-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * 0.6rc1 released
+
+2004-01-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated integration into KDE (desktop files)
+ * Fixed installation location for x-kmymoney2.desktop
+ * Updated home pages
+ * Added German home page
+
+2004-01-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Make sure tips are included in pot file
+ * Added tips for German and French translation
+
+2004-01-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * made some editorial changes to dialogs for better i18n support
+ * added German translation file (many thanks to Raphael Langerhorst
+ <raphael-langerhorst@gmx.at> who has done a great job
+ * updated kmymoney2.pot file
+
+2004-01-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * added info about mandir setting in README
+ * added man page found in MEPIS distro
+ * added new application icon
+ * added creation of symbolic link kmymoney -> kmymoney2 in $(bindir)
+ during 'make install'
+
+2004-01-05 Kevin Tambascio <ktambascio@users.sourceforge.net>
+ * added support for the progress bar during read operations.
+ * added QStringEmpty and QCStringEmpty functions to properly handle
+ empty strings from the XML file.
+ * removed the bold when you hover over a link in the HTML view
+ (seemed to look strange when using it).
+
+2004-01-04 Kevin Tambascio <ktambascio@users.sourceforge.net>
+ * removed the "nextid" attribute from some of the top-level XML attributes.
+ * added qWarnings and qError statements when irregularities in the file
+ are found.
+ * personal data dialog box had lower case "O" and "C" for the
+ ok and cancel buttons, which is inconsistent.
+ * added some Q_CHECK_PTR() functions to check for invalid pointer values,
+ which issues a warning to stderr.
+ * added some Q_ASSERT checks in various places in the XML Reader/Writer code.
+ * added a version field to keep track of different XML file versions,
+ in a similar fashion to the binary reader/writer.
+
+2004-01-04 Michael Edwardes <mte@users.sourceforge.net>
+ * Added button icons to KEnterScheduleDialog.
+ * Fixed handling of lastPayment in KEnterScheduleDialog.
+ * Increased vertical space to KEditScheduleDialog.
+ * Quick fix to make the split button work with no category.
+ * Check the date when entering schedules.
+
+2004-01-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * added engine observer functionality to kMyMoneyAccountSelector
+ * correcting Mike's widget/Makefile.am change in the project file
+ so that it will be maintained over the next regeneration of
+ widgets/Makefile.am by KDevelop
+ * show correct icons in account's icon view
+ * fixed category assignment
+
+2004-01-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * suppress standard F2 handling while in ledger's inline-edit-mode
+ * fix problem when to-account is empty and more button is pressed for
+ transfer transactions
+ * clear the transaction list in payees view if required
+ * overhauled some i18n stuff
+
+2003-12-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Update search result when data in engine is changed
+ * Fixed all (but one) compiler warnings
+ * Regenerated kmymoney2.pot translation source
+
+2003-12-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * select account for QIF import if it already exists
+ * fixed visibility of selected account in kMyMoneyAccountSelector
+ * re-arranged introduction to "import verification" message and
+ allow to turn it off in the future (DontShowAgain)
+ * removed check for C-only options (-Wbad-function-cast) in acinclude.m4.in
+ * added bzip2 tarball generation to Makefile.am
+ * added alternate background to transaction list in payees view and
+ account selector widget
+ * Added general method to extract colors respecting the user settings
+
+2003-12-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * display correct action strings for credit card accounts in ledger
+ * support i18n of action strings in ledger
+ * added tip(s)
+ * fixed action assignment during QIF import
+ * changed QIF import to use KProcess instead of QProcess.
+ * added more automatic fixes after 'file open'
+
+2003-12-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * resized starting size of split dialog
+ * use different icons for loan accounts in the account icon view
+ * added inequality operator to MyMoneyTransaction
+ * fixed logic of terminating notification suspending in MyMoneyFile
+ * added more debug output to MyMoneyStorageDump
+ * added default color settings to be drawn from KMyMoneyUtils
+ * show template page during startup if no other info was found. This
+ allows straight file generation for the first time user
+ * speedup reading of default income/expense categories
+ * finished work on reconciliation wizard
+ * added consitency check to the new account wizard (Don't allow to
+ proceed if data is not entered)
+ * allow creation of new payees from new account wizard
+ * added icons to KNewAccountDlg
+ * allow 'reverse' category for schedule, but warn if it is selected
+ * added button icons to KBackupDlg
+
+2003-12-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * reworked KEndingBalanceDlg to be a wizard
+ * added function to add interest and charge transactions during
+ reconciliation
+ * renamed 'total profit' into 'net worth'
+ * added changes required to compile engine on MAC
+
+2003-12-16 Kevin Tambascio <ktambascio@users.sourceforge.net>
+ * Added ability for the user's last used directory to be stored in the
+ save and open dialogs.
+ * Left old code in place pending reviews from the team.
+
+2003-12-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * fixed some bugs in handling w/o inline editing (no transaction form)
+ * Some marketing on the about page
+ * Store balances and dates in a locale-neutral form with accounts
+ * Make Home and End button work in ledger views and find transaction dialog
+ * fixed #859083 (false right alignment of input widgets based on
+ kMyMoneyLineEdit)
+
+2003-12-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * don't crash when closing file in ledger view showing loan account
+ * newly entered transaction becomes the current selected transaction
+
+2003-12-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * show correct category underneath the ledger lens
+ * don't update screen while marking splits as reconciled
+ * delete key now enables to delete transactions in the ledger views
+ * optimized screen update for ledger view
+ * page up/page down keys now scroll correctly in ledger view
+
+2003-12-13 Kevin Tambascio <ktambascio@users.sourceforge.net>
+ * Changed the khomeview.cpp and css file to brighten up the colors,
+ and use better fonts.
+
+2003-12-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * respect date changes when entering schedule transactions
+ * create new payees during loan account creation (#859079)
+
+2003-12-12 Kevin Tambascio <ktambascio@users.sourceforge.net>
+ * Able to read and write all elements of the storage file using XML.
+ * Added a US list of account categories. This file is called
+ 'default_accounts_enUS.dat', and it requires the user to select it,
+ it's not the default list.
+
+2003-12-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * reset the reconcile flag when creating schedules from existing
+ transactions
+ * fix existing schedules with reconciliation flag set
+ * added more details to dumper
+
+2003-12-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * emit stateChanged in kMyMoneyAccountSelector in single selection mode
+ when selection changed
+ * added missing pages to the loan wizard
+ * fixed crash in settings dialog
+ * don't show 'unknown institution' if no account w/o institution is found
+ * added account's kvp to memory dump
+ * fixed 'file/open...' handling
+ * added testcases for them
+ * added wizard to modify loan data
+ * added ActionInterest
+ * added testcases for large values to MyMoneyMoneyTest::testFormatMoney()
+ * fixed MyMoneyMoney::formatMoney() for large values
+ * added new type for loan schedules
+ * updated the enter schedule dialogs to reflect loan payments
+ * don't show number of transactions in accountsview for standard accounts
+ (asset, income, etc.)
+ * added field to setup the number of days before the actual occurence of a
+ scheduled transaction it will be shown (functionality not implemented)
+
+2003-11-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * added conversion to l10n free form for MyMoneyMoney objects
+ * removed KDE specific code from engine code
+ * added MyMoneySplit::ActionInterest
+
+2003-10-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * move resize-grip in find transaction dialog
+ * fixed minor problems in transaction filter
+ * fixed duplicates for transalations in KMyMoneyUtils::stringToAccountType
+ * added investment loan to the new account wizard
+ * added button icons to KImportVerifyDlg
+ * show accounts in sorted order in the combo box of the ledger view
+ * make sure that kMyMoneyEdit fields always have a fractional part
+ * keep QIF profiles created during QIF input
+ * added financial calculator class MyMoneyFinancialCalculator
+ * force usage of new account wizard for creation of accounts
+ * removed selection of wizard from settings
+ * updated french translation file
+
+2003-10-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * modify transfers to/from loan accounts to amortization payments
+ when a new transaction is entered into the engine
+ * added more logic for loan ledger view
+ * added logic to read categories from QIF file
+ * removed libxml++ references in configure stuff
+ * improved QIF import performance
+ * added method to turn off/on engine notifications for bulk updates
+ * send out notification if an account was moved to another institution
+ * if no filename is known, show 'Untitled' in caption
+ * allow creation of categories while entering transactions
+ * replaced "" with QCString() in all id handling spots
+ * replaced comparison against "" with call to isEmpty() method
+ * removed member m_file from MyMoneyTransaction
+ * adapted testcases to the QCString() changes
+ * don't popup transaction form when modifying transaction in
+ reconciliation phase
+ * removed message about file closing if no data has been changed
+ * added startup logo for version 0.6 (hope you like it ;-) )
+ * fixed crash in transaction filter
+ * fixed initial setting of post date for new transactions
+
+2003-09-29 Michael Edwardes <mte@users.sourceforge.net>
+ * Create a liability ledger view.
+ * Confirm that the user meant to enter a positive number for the
+ opening balance when creating liability accounts. (Should usually
+ enter a negative amount).
+
+2003-09-27 Michael Edwardes <mte@users.sourceforge.net>
+ * Change the end date when the start date changes while editing schedules.
+ * Re-implement paintFocus in KAccountListItem and KScheduledListItem.
+ * Use the doubleClicked() signal instead of executed() in the schedule list
+ view.
+
+2003-09-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * smarter detection of filetype to be read (looks at file contents
+ not the extension)
+ * fixed edit/delete options in AccountIconView
+ * fixed listview handling with the changes for the background painting
+
+2003-09-26 Michael Edwardes <mte@users.sourceforge.net>
+ * Select the new institution in KNewAccountWizard.
+ * Pre-select the institution if we right click on an institution and choose
+ create new account.
+ * Remove the new, edit and delete buttons from the categories view.
+ * Select the payee after adding it in the payees view.
+ * Dont let account types not supported by engine at this time get created.
+ * Add a, non functional, help button to the new schedule dialog.
+
+2003-09-25 Kevin Tambascio <ktambascio@yahoo.com>
+ * Able to write out files in XML with all the categories present in the new engine.
+ * Started the code for reading the XML files.
+
+2003-09-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * moved KMyMoneyUtils::isCreditPayment to MyMoneyTransaction::isLoanPayment
+ * added testcase for MyMoneyTransaction::isLoanPayment
+ * removed unused code in MyMoneyTransaction
+ * marked addXXX methods of IMyMoneySerialize as deprecated in the docs
+ * added loan payment transactions (rudimentary support)
+
+2003-09-24 Kevin Tambascio <ktambascio@yahoo.com>
+ * Made GUI changes to allow the user to save their file as an XML file.
+ * Removed checks for conditionally compiling XML suport.
+ This is possible because I am now using the QT API's, and everyone
+ has support for those.
+ * Able to now save a basic XML file. It only currently saves the user
+ information, and it provides placeholders for the other sections of
+ our file.
+
+2003-09-24 Michael Edwardes <mte@users.sourceforge.net>
+ * Draw the background colour across the _whole_ list view in schedule
+ view.
+ * Use alternating colours for the accounts and categories view.
+ * Start with the alternate colour in the list views.
+
+2003-09-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * added new account selection widget
+ * find transaction dialog uses new account selection widget
+ * QIF import uses new account selection widget
+ * added convenience methods to MyMoneyTransactionFilter
+ * added button icons to the institution dialog
+ * added button icons to the category/account selection dialog
+ * fixed KFindTransactionDlg so that references to income and
+ expense accounts are not shown
+ * fixed transaction display in payees view
+ * added new reconcile icon for buttons
+ * fixed isValid() in kMyMoneyEdit
+ * added MyMoneyMoney::abs()
+ * added testcase for MyMoneyMoney::abs()
+ * fixed the amount filter to work with absolute values only and
+ to make sure that from <= to
+ * removed debug output in payees view
+
+2003-09-18 Michael Edwardes <mte@users.sourceforge.net>
+ * MyMoneySchedule::isFinished() now works for occurences of 'Once'.
+ * Added 'Todays payments' to the home view to make it easier to spot them.
+ * If the schedule has finished use the word Finished instead of the next
+ payment date in the schedule list view.
+ * Select the account type in the account wizard.
+
+2003-09-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * added new fr.po supplied by Laurent
+ * fixed loading new account wizard widgets after loading of file
+ * update caption when QIF import is finished
+
+2003-09-17 Michael Edwardes <mte@users.sourceforge.net>
+ * More validation on the KEditScheduleDialog user input.
+ * Add a gap to the home page just before 'Future Payments'.
+ * Fix creating a schedule from a transfer transaction.
+ * Set the right schedule type in KNewAccountWizard::accept.
+ * Work around backwards transfers in several places.
+
+2003-09-16 Michael Edwardes <mte@users.sourceforge.net>
+ * You can only create schedules with a start date <= today if
+ they are not automatically entered.
+ * New option to the settings dialog to check schedules upon startup.
+ * MyMoneySeqAccessMgr::scheduleList() now calls MyMoneySchedule::isOverdue()
+ which takes into account the recorded payments for a schedule.
+ * Refresh the schedule view list items starting with the background colour.
+ * Take into account recorded payments when calculating the next payment
+ for a schedule.
+
+2003-09-15 Michael Edwardes <mte@users.sourceforge.net>
+ * Fix memory leak in new account wizard when checking if a payee exists.
+ * Individual occurences for a schedule can now be entered
+
+2003-09-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * added MyMoneySplit::ActionAmortization
+ * added MyMoneySplit::isAmoritizationSplit
+ * added KMyMoneyUtils::isCreditPayment
+ * added kMyMoneyRegisterLoan
+ * fixed a bug in KNewAccountDialog when creating new accounts and
+ the accounts or category view is active
+ * force every account to have a parent in KNewAccountDlg
+ * allow to select all accounts as parents when creating an account
+ * fixed update of entry count in accounts/categories view
+ * fixed problem with date mark in ledger if all transactions are in
+ the future
+ * show matching substrings for payees in the transaction form the
+ same way as for categories/accounts
+ * added auto payee creation to QIF import
+ * do not allow to create account with same name
+ * fixed nasty bug that occured that occured during the cycle import /
+ verify / cancel /import and had to do with a loose observer object
+ * added case insensitive account names as suggested by Michael
+
+2003-09-15 Michael Edwardes <mte@users.sourceforge.net>
+ * Removed some old search code from KMyMoneyView and some compile warnings.
+ * Fix credit card schedule creation.
+ * Use StrongFocus for certain widgets in the accout wizard ui.
+ * Force the user to use the correct category type when creating schedules.
+ * Fix bug in KEditScheduleDialog that wrongly negated the entered amount.
+
+2003-09-10 Michael Edwardes <mte@users.sourceforge.net>
+ * Implemented adding a schedule for the credit card account type when
+ using the account wizard.
+ * When executing a schedule list item, set the date to the real next payment.
+ * Only call the slots in KEditScheduleDialog::relodFromFile() if its a new
+ schedule.
+ * Only load the 'to' accounts if the schedule's type is transfer.
+ * Only set the name field of the account dialog if we are editing.
+ * Add ability to create category hierarchy to MyMoneyFile.
+ * You can now create categories directly from the edit schedule dialog.
+ * You can now create categories directly from the enter schedule dialog.
+ * Masses of fixes to KEditScheduleDialog.
+ * Setup KEnterScheduleDialog with the correct date.
+ * The schedule's transaction can now be committed to the engine via a manual
+ enter. NOTE ONLY THE LAST PAYMENT CAN BE COMMITTED at the moment.
+ * Added two methods to MyMoneySchedule : isOverdue() and isFinished().
+ * Changed the enums for MyMoneySchedule members.
+ * Only show the enter button for valid schedule next payments.
+ * Schedules that have finished now have green text.
+
+2003-09-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * use the accounts view as standard, not the institutions view
+ * added 'Unknown institution' as standard to institutions view
+ * fixed memory leak in exception handling of KAccountsView::slotListRightMouse
+ * create Default QIF profile if not existant during QIF import/export
+ * use KDE documentpath to start looking for files to be imported
+ * fixed missing notifications when adding/modifying/removing institutions
+ * removed i18n() from certain non-translatable strings in the QIF profile
+ editor
+ * improved error messages during QIF import and display QIF entry
+ during account/category selection for user's reference
+ * set focus in KAccountSelectDlg to create button
+ * fixed edit and delete operation of RMB menu for institutions
+
+2003-09-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * fixed visibility of new institution dialog when import a QIF file
+ * use current date as opening date for new accounts if the date
+ passed from e.g. a QIF source is invalid
+
+2003-09-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * added kMyMoneyEdit::isValid()
+ * added MyMoneyAccount::accountGroup(void)
+ * revised interface between KLedgerView and kMyMoneyRegister
+ * Added KMyMoneyTransaction which is based on MyMoneyTransaction
+ but also keeps additonal information required for display purposes
+ * renamed MyMoneyTransaction::split to splitByAccount
+ * added MyMoneyTransaction::splitById which returns a split by split id
+ * optimized space for items in search register
+ * added full search functionality
+ * fixed bug in font handling of register code
+ * added possibility to create scheduled transaction from ledger view
+ based on existing transaction
+ * added button icons to find transaction dialog
+
+2003-09-04 Michael Edwardes <mte@users.sourceforge.net>
+ * Fix bug in KEditScheduleDlg::slotSplitClicked() and
+ KEnterScheduleDialog::slotSplitClicked().
+ * More split related bugs fixed in KEditScheduleDialog and
+ KEnterScheduleDialog.
+ * Re-wrote most of KEditScheduleDialog. Fixes _many_ bugs.
+
+2003-09-02 Michael Edwardes <mte@users.sourceforge.net>
+ * Show overdue schedules with red text in the list view.
+ * Fixed stupid bug when creating schedules.
+ * Schedule brief widget now shows only the schedule for the date we are over.
+ * Added initial ui file to enter schedules manually.
+ * Added class for the enter dialog.
+ * Display overdue schedules in red in the calendar.
+ * Added ability to right click on schedule in the list to enter it manually.
+ * Added an Enter button to the Brief schedule widget.
+
+2003-09-01 Michael Edwardes <mte@users.sourceforge.net>
+ * Made the list colours in the schedule view match the home view.
+ * Implemented the schedule link from the home page.
+
+2003-08-31 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * added MyMoneyTransactionFilter class
+ * modified engine to use MyMoneyTransactionFilter instead of dedicated code
+ * modified GUI code to use MyMoneyTransactionFilter
+ * added 'case sensitivity' and 'regular expression' switch to
+ KFindTransactionDlg
+ * added definition of MyMoneyMoney::minValue and MyMoneyMoney::maxValue
+ * major overhaul of the view interface
+
+2003-08-31 Michael Edwardes <mte@users.sourceforge.net>
+ * Added a default default_accounts_enC.dat file.
+ * Set KDialog to look for the default_accounts_enC.dat file for its
+ initial dir.
+ * Fix the mouse tracking in the calendar table.
+ * Popup the Schedule brief widget 'intelligently'.
+ * Make sure default_accounts_enGB.dat, default_accounts_enC.dat and
+ comptes_par_defaut_fr.dat are installed.
+ * Made the Schedule brief widget borderless and added a close button.
+
+2003-08-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * added french files provided by Laurent Colognes
+
+2003-08-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * added more logic to the find dialog
+ * added more output to dump
+ * Fixed a bug in KNewAccount Wizard when creating liability accounts
+ * Differentiate accounts and categories with the same name during import
+ * added consistency check tool
+ * allow to move accounts between expense/income group
+ * Fixed close window function, again
+
+2003-08-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * backup file name is now constructed using international date format
+ * added progress bar to backup function
+ * added new find transaction dialog (no functionality yet)
+ * revised register class
+
+2003-08-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * avoid more compiler warnings
+ * use last used post date for new transactions
+ * fix view update after loading a file
+ * force memo field in transaction form to be left aligned
+ * fixed bugs in settings dialog (grid setting was not written)
+ * removed color settings for transactions
+ * some speed improvements after loading a file
+
+2003-08-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * set date fields in export QIF dialog to the posting dates of the
+ first and last transaction found in the selected account
+ * made appendCorrectFileExt() a static method of KMyMoneyUtils and
+ removed it in all other places
+ * removed unused connections in KMyMoney2App
+
+2003-08-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * show full url as tooltip in start dialog
+ * fixed endless loop when recent file list contains abandoned files
+ * disable dragability of items in start dialog
+ * added icon to reset button in settings dialog
+ * added logic for customization of home page to settings dialog
+ it is not yet used in the home page logic
+ * use KDE settings for font calculation in settings dialog
+ * allow setting of Preferred attribute in KNewAccountWizard
+ * removed reference to unknown signals/slots in KMyMoney2App::slotQifExport
+ * added button icons to QIF export dialog
+ * added button icons to QIF import dialog
+ * cleaned up QIF import code from leftovers of old implementation
+ * added button icons to QIF profile editor
+
+2003-07-31 Michael Edwardes <mte@users.sourceforge.net>
+ * Fix the nasty bug i introduced into the start dialog.
+ * Removed the fileNew action.
+ * File Save/Save As default to Documents folder.
+ * Removed unnecessary actions.
+ * Fix crash when File|Close is chosen.
+
+2003-07-30 Michael Edwardes <mte@users.sourceforge.net>
+ * Removed duplicate entries from default_accounts.dat.
+ * Renamed default_accounts.dat to default_accounts_enGB.dat
+ * Display only the filename in the recent files icon view.
+ * Default to the 'Documents' folder in the start dialog.
+
+2003-07-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * added button icons to the ledger view
+ * added button icons to split dialog
+ * removed warnings in ksplittransactiondlg.cpp
+ * added button icons to split correction dialog
+ * added french home page
+
+2003-07-30 Michael Edwardes <mte@users.sourceforge.net>
+ * Use the IconGroup User to load icons.
+ * Add icons to the schedule list view items.
+ * Use the global icon loader object.
+
+2003-07-29 Michael Edwardes <mte@users.sourceforge.net>
+ * Add icons to the edit schedule dialog.
+ * Added icons to the schedule dialog.
+ * Added icons to the new file dialog, schedule view.
+ * Use colours in the schedule list.
+
+2003-07-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * disable save button and menu entry if data in engine is unchanged
+ * fix memory leak in KLedgerView
+ * added feature to have country and language specific home page
+
+2003-07-29 Michael Edwardes <mte@users.sourceforge.net>
+ * Fixed loading of blank icon in the startup dialog.
+ * Fix schedule errors.
+
+2003-07-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * fixed setting of 'startup file options' in settings dialog when
+ the reset button is pressed
+ * added feature to select the last page viewed when starting the application
+ * use QPushButton::setPopup for the MORE button in the transaction form
+ * use the british english spelling Cheque
+ * fixed compile error in MyMoneyStorageBin
+ * fixed crash when exiting the startup dialog with 'Cancel'
+
+2003-07-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added concept of preferred account
+ * remove KDE specifics from MyMoneySchedule
+ * MyMoneySchedule now uses QDate::isValid() to determine validity of dates
+ * align values to the right in the schedule list view
+ * re-arranged inclusion of header files to speed up compilation
+ * MyMoneySchedule::account() now returns MyMoneyAccount object
+ * Added 'dynamic home page'
+
+2003-07-23 Michael Edwardes <mte@users.sourceforge.net>
+ * Fix handling of split dialog.
+ * Save open state of top level items in schedule list view.
+
+2003-07-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Show filename and modification mark in caption of main window
+ * Avoid some compiler warnings
+ * Fixed order when reading items from file
+ * Suppress false memory leakage message during autotest
+ * Added < operator to MyMoneySchedule to allow sorting
+
+2003-07-23 Michael Edwardes <mte@users.sourceforge.net>
+ * Removed unnecessary schedule edit classes.
+ * Removed old unnecessary classes.
+ * Changing transactions remaining also changes end date in edit dialog.
+ * Changing end date also changes transactions remaining in edit dialog.
+ * Fix IEditScheduleDialog.
+ * Set default list view items to open.
+ * Save memo field in KEditScheduleDialog.
+
+2003-07-22 Michael Edwardes <mte@users.sourceforge.net>
+ * Removed unnecessary atributes from MyMoneySchedule.
+
+2003-07-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * always select a transaction in the ledger view if one's available
+
+2003-07-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed testcases for MyMoneySchedule related tests in
+ MyMoneySeqAccessMgrTest
+ * modified construction of transfer transactions in
+ keditscheduledtransferdlg.cpp
+
+2003-07-18 Michael Edwardes <mte@users.sourceforge.net>
+ * Added the equality operator to MyMoneySchedule.
+ * List and calendar view honour the account filter.
+ * Implemented file reading and saving of schedules.
+ * Added a transferAccount member attribute to MyMoneySchedule.
+ * Updated the read and save routines.
+
+2003-07-18 Michael Edwardes <mte@users.sourceforge.net>
+ * Fix MyMoneySchedule::nextPayment()
+ * Clear splits when KSplitTransactionDlg sets only one. (Workaround).
+ * Fixed occurence of schedules.
+ * Fixed tab order in new schedule dialogs.
+ * Show the accounts that can be filtered on.
+
+2003-07-17 Michael Edwardes <mte@users.sourceforge.net>
+ * Use MyMoneySchedule::validate() when adding schedules.
+ (validate() will be fully implemented later).
+ * Added some convenience methods to kMyMoneyCombo to reduce code duplication.
+ * Removed the MyMoneyScheduled class.
+ * Added an accountId member to MyMoneySchedule.
+ * Added a combo box to filter on accounts in the list & calendar view.
+
+2003-07-16 Michael Edwardes <mte@users.sourceforge.net>
+ * Updated the UI to use MyMoneyFile for sheduled transactions.
+
+2003-07-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added support for scheduled transactions to the MyMoney engine code
+ GUI code does not use it yet, but testcases do
+
+2003-07-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * cleanup in headerfile includes
+ * refresh schedule view upon loading of a new file
+
+2003-07-07 Michael Edwardes <mte@users.sourceforge.net>
+ * Added a hoverDate signal to the table.
+ * Set mouse tracking in the table so we get all mouse move events. (Doesnt Work?)
+ * Added UI file for the schedule brief description widget.
+ * Implemented the select schedules combo box option to filter the calendar
+ on schedule types.
+ * Use contentsMouseReleaseEvent rather than contentsMousePressEvent in
+ the base class kMyMoneyDateTbl.
+ * Fix implementation of kMyMoneyScheduledDateTbl::addDayPostfix.
+
+2003-07-05 Michael Edwardes <mte@users.sourceforge.net>
+ * Fixed bug in KMyMoneyCalendar to create the private objects *before* the
+ initialisation.
+ * Draw the userButtons after the first 'styleControl' button.
+ * Added schedule type selection to the calendar via the new user
+ buttons.
+ * Implemented the weekly view of the calendar. (Note, always uses Monday
+ as the start of week, (ignores kde settings at the moment)).
+ * Started work on integrating the schedules into the calendar view.
+ * Changes to the account selection are notified to the schedule calendar
+ view.
+ * The date for the current cell to be painted is passed to the
+ drawCellContents method.
+ * Changed the list view widget in KScheduleView to a KListView so I can use
+ the executed signal.
+ * Implemented an executed slot on a schedule list item that shows the next
+ payment date in the calendar.
+ * Removed the edit and delete buttons. These are accessed via a right mouse
+ click on the item.
+ * Removed the selection signal from the schedule list view.
+
+2003-07-04 Michael Edwardes <mte@users.sourceforge.net>
+ * More work on the calendar view, including deriving a new class from
+ kMyMoneyDateTbl as kMyMoneyScheduledDateTbl.
+ * Added a style control button to the calendar view. (Not working).
+ * Draw rectangles around the days. (Will be configurable in future).
+ * Added ability to add 'user buttons' to the calendar. This will be
+ used by the schedule table to display schedule options for the
+ calendar. Only two user buttons are currently supported.
+ * Fixed bug in KDateTable::setEnabled()
+
+2003-07-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * fill AccountsView with standard accounts even if there are
+ no further accounts defined
+ * preset correct type of new account according to current selected
+ account in the accounts and categories view
+ * made new widgets compilable under KDE 3.0 - while loosing some
+ functionality :-(
+
+2003-07-03 Michael Edwardes <mte@users.sourceforge.net>
+ * Subclassed a new more specific to schedules calendar class
+ from kMyMoneyCalendar.
+ * Added a close button to kMyMoneyDateInput, (Requires >= KDE-3.1).
+ * Imported the KDatePicker & KDateTable classes into KMyMoney to use
+ as the basis for the calendar view. Custom implementation still to
+ be done.
+
+2003-07-02 Michael Edwardes <mte@users.sourceforge.net>
+ * Fixed editing the schedule's transaction splits.
+ * Display only positive amounts in the schedule list view.
+ * More work on the scheduled transfer dialog.
+ * Fixed schedule validation for transfers.
+ * Added a name property to MyMoneySchedule.
+ * Updated UI dialogs to handle the schedule name.
+ * Added the initial widget for the calendar view. (Does nothing yet).
+
+2003-07-01 Michael Edwardes <mte@users.sourceforge.net>
+ * Fixed crash in KScheduleView::refresh when no accounts exist.
+ * Monitor selections in KStartDlg so the user can select an item
+ and then press on OK and the item is executed as expected.
+ * Deselect all other highlights in KStartDlg when a selection occurs.
+ * Remember the last page in KStartDlg, (defaults to recent files page).
+ * Context menu can appear in the schedule view when there are no items.
+ * Disable schedule view if no account is available.
+
+2003-06-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * updated 'home' page for next release
+ * differentiate between new account and new category
+ * cleanup of slot interface between KMyMoney2App and KMyMoneyView
+ * removed debug output messages in various classes
+ * added function to create new institution during QIF import
+ * fixed bugs while importing splitted transactions
+ * set opening date on accounts only if date passed is invalid
+ * fixed KNewAccountWizard to set opening date correct
+ * added filter location entry to QIF profile
+ * disable ledger view if no account is available
+ * added external filter support for QIF import
+ * prepared external filter support for QIF export
+ * added duplicate method to IMyMoneyStorage objects and testcase
+
+2003-06-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * show liability and asset accounts when no account info is found
+ in the QIF source file for account selection
+ * KMyMoneyUtils::stringToAccountType() now works case insensitive
+ * Fixed the account selection dialog to allow creation of categories
+ * Added method to extract the parent name of a colon-seperated
+ hierarchical category name to MyMoneyFile
+ * Fixed some problems of the KNewAccountDlg with respect to categories
+ * Don't allow to create accounts of type income and expense in
+ KNewAccountDlg when not called as category editor
+ * Use KMyMoneyUtils to convert from textual form of account type
+ to numeric representation
+ * Cleanup of account and category editing
+ * Removed MyMoneyAccount::setAccountTypeByString in favor of
+ usage of KMyMoneyUtils::stringToAccountType
+ * Make sure, one cannot select an account as it's own parent account
+ * Show selected parent account when opening KNewAccountDlg
+ * Added support to suppress updates during lengthy operations to
+ more views
+ * Fixed uninitalized variable in KAccountSelectDlg
+ * Added date import conversion to MyMoneyQifProfile
+ * Added coloring for imported transactions to kMyMoneyRegister
+ * Added parameter 'name' to kMyMoneyCombo constructor(s)
+ * Cleanup of KGlobalLedgerView member variables
+
+2003-03-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Moved categoryTypeE to KMyMoneyUtils
+ * Updated template files to contain standard text
+ * Added tips entry
+ * added MyMoneyKeyValueContainer functionality to MyMoneyTransaction
+ * more work on the QIF import (not done yet)
+
+2003-02-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * include config.h in mymoneymoney.h
+ * changed the state-engine during backup
+ * fixed backup procedure (error report #692390)
+ * added "Don't ask again" to warning box about new file layout
+
+2003-02-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added missing account types to utility functions
+ * Fixed online documentation in MyMoneyFile
+ * Added dialog to select an account
+ * Moved the MyMoneyQifProfileEditor to the dialog subdir
+ * Removed some circular references among classes
+ * More work on QIF import
+
+2003-02-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added some methods to KNewAccountWizard to be capable to preset values
+ * Added opening date to account wizard
+ * Added method to set account type to new account wizard
+ * Added KMyMoneyUtils as container for utility functions requiring KDE
+ * Moved accountTypeToString and stringToAccountType to KMyMoneyUtils
+ * Removed some warnings
+ * Added some more values to the data dumper
+ * Added more teststeps to MyMoneySeqAccessMgrTest
+
+2003-01-30 Michael Edwardes <mte@users.sourceforge.net>
+ * More work on the scheduled view and dialogs.
+ * Fixed combo box selection bug in okClicked for all dialogs.
+ * Disable transfer dialog until i fully understand whats needed.
+ * Implemented the edit schedule feature for bills and deposits.
+ * Implemented the delete schedule feature.
+ * Added context menus to the list view.
+
+2003-01-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added new method MyMoneyFile::storage() and tests
+ * Added equality operators for MyMoneyPayee, MyMoneyAccount,
+ MyMoneyBalanceCacheItem
+ * Added test for them
+ * Removed necessity for KMyMoneyFile object
+ * Added feature to hide unused categories in lists
+ * Added method transactionCountMap to MyMoneyFile
+ * Started working of QIF import
+ * Removed duplicates from tips, fixed HTML code in tips
+ * Added missing converter directory to CVS
+
+2003-01-23 Michael Edwardes <mte@users.sourceforge.net>
+ * Started work on UI for schedules.
+ * Started work on the 'New Bill' schedule interface dialog.
+ * Updated MyMoneyScheduled for account specification, preparing it for
+ inclusion into MyMoneyFile.
+ * Updated the schedule tests to add the account references.
+ * Started work on the 'New Deposit' schedule interface dialog.
+ * Started work on the 'New Transfer' schedule interface dialog.
+
+2003-01-21 Michael Edwardes <mte@users.sourceforge.net>
+ * Added the beginnings of recurring transaction support.
+ * Added some test cases for the MyMoneyScheduled and
+ MyMoneySchedule classes.
+
+2003-01-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Honor start date setting in ledger view was broken after startup
+ * Added QifProfile and QifProfileEditor classes
+ * Fixed memory leaks when editing in-register is selected
+ * Calculate the size required for the datepicker according to it's sizeHint()
+ * Fixed documentation bug in MyMoneyFile
+ * Allow empty separators for decimal and thousands in MyMoneyMoney
+ * Added QIF export functionality
+ * Use standard menu icons where available
+ * Added method to refresh the payees view after loading a file
+ * Moved logic to drop some progress bar updates to KMyMoney2
+ * Allow empty separators in MyMoneyMoney
+ * Added method to return current cell font to kMyMoneyRegister
+ * Added display of number of transactions in accounts view
+ * Updated menu structure
+ * Updated message file (POT)
+
+2003-01-03 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added display of number of transactions in accounts list view
+ * Added configure.in.in to project for inclusion in source distribution
+ * Created Source package for version 0.5.1
+
+2003-01-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added section about signing an RPM to the project handbook
+ * Added some more documentation to source at various places
+
+2002-12-31 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed some inline documentation
+ * Payee's transaction list respects list font settings
+ * Reduced cell height in register and split register
+
+2002-12-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added list of transactions to payee view
+ * Added fixup for splits in KLedgerView and MyMoneyStorageBin
+ * Added method to extract a split from a transaction by payee-Id
+ * Added class KTransactionListItem()
+ * Double click on transaction in payee view opens ledger view
+ with this transaction selected
+ * Added function to move from selected transaction in ledger view
+ to the assigned payee
+
+2002-12-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added functionality to 'More' button in transaction form
+
+2002-12-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Force static linking of libxml++ if present
+
+2002-12-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added missing admin/am_edit to source distribution
+ * Added some tips
+ * Added some description to the 'home page'
+ * Added descriptive warning to the save operation
+
+2002-12-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed translation problem in KReconcileDlgDecl.ui
+ * Remember the type of accounts view the user selected last
+
+2002-12-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Dynamically allocate application object to cover more code with
+ memory leakage checker
+ * Added method to clean static objects in KAccountListItem
+ * Fixed progress bar when reading old format files
+ * Fixed memory leak in KMyMoneyFile, KNewAccountDlg, KNewFileDlg,
+ KEndingBalanceDlg, KBackupDlg, KChooseImportExportDlg, KCsvProgressDlg,
+ KExportDlg, KFindTransactionDlg, KImportDlg
+ * Including XML support needs special compiler option
+ * Updated a couple of Makefile.am for the RPM distribution
+
+2002-12-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated PHB to contain information about building RPMs
+ * Fixed compilation with _CHECK_MEMORY defined
+
+2002-12-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed unknown file references from the KDevelop project file
+ * Removed some debug output that is not needed anymore
+ * Modified some Makefile.am to not include unnecessary files
+ in the source distribution
+ * Updated README with up-to-date installation instructions
+
+2002-12-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Speedup load operation by filling the balance cache while loading
+ * Added some more tips
+ * Replaced progress dialog with global progress bar in status line
+ * Added progress callback to MyMoneyStorageBin, MyMoneyStorageXML
+ and IMyMoneyFormat
+ * Corrected display of status message in status bar
+ * Moved tip of the day logic to main()
+ * Close the splash screen upon the first call to the application
+ (startWithDialog())
+ * Revised startup code in main() and KMyMoney2App()
+
+2002-12-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added mark of current date in ledger view if it's sorted by posting date
+ * Removed a few unused member variables from kMyMoneyRegister
+ * Added sorttype 'Number' to ledger views
+ * Don't override the entry date of transactions when loading a file
+ * Added option to show a nr field in any transaction form
+ * Added option to insert the transaction type into the nr field upon
+ creation of a new transaction
+ * Terminate any edit session before starting the settings dialog
+ * Cancel edit session before re-sorting
+ * Keep the transaction selected after re-sorting
+ * Removed old categories file from project
+ * Added a german account template file
+ * Added a file dialog to select the initial account/category set
+ for a new file
+ * Added progress bar when reading the initial account/category set
+ * Update ledger view after loading a different file
+ * Allow to edit the number field in credit card view
+
+2002-12-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added 'tip of the day' feature
+ * Added different images to account icon view
+ * Added key value container to MyMoneySeqAccessMgr, it's interface
+ IMyMoneyStorage and MyMoneyFile.
+ * Store and load the key value container with the (binary) file
+ * Moved account icons from kbankviewdecl.ui to kbanksview.cpp
+ * Converted account icon view from QIconView to KIconView
+ * Added KAccountIconItem class
+ * Reset values in new account wizard when starting
+ * Added account types asset and liability to account dialog
+ * Suppress a few options in the account context menu
+ * Added functionality to the Account detail button in the ledger view
+
+2002-12-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added possibility to change from transfer to non-transfer and vice
+ versa in in-register edit mode
+ * Added cash and asset account types
+ * Added missing Nr label during entry of ATM transactions in the form
+ * Cancel any transaction edit session if an account is selected with
+ the ComboBox in the ledger view
+ * Added new sort types for ledger sorting (Type, Nr, Receiver).
+ See KTransactionPtrVector for details
+ * Added context menu to change sort order
+ * Fixed functionality of context menu in accounts view
+ * Added context menu to categories view
+
+2002-12-02 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Show transaction action also in register underneath the date
+ * Changes to payment/deposit and transaction type are reflected
+ in the 'other widgets' during the edit phase of a transaction
+ * Updated kMyMoneyCombo to serve as widget for the ledger view
+ * Preset post date only, if invalid. Otherwise, take user's input
+ * kMyMoneyEdit will respect selected text upon entry of arithmetic
+ operators (e.g. +, -, *, etc.)
+
+2002-11-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Balance of accounts in accounts and category view did not get updated
+ * Show liablities also as positive values in accounts view
+ * Summary line shows balance in red if negative
+ * Exit any pending edit activities in ledger views when switching to
+ a different view (e.g. payees or schedule view)
+ * Added Credit Card ledgerview
+ * Added automatic preset of from/to account if opposite is not
+ the current selected account
+ * Update split.action() when a negative amount is entered
+ * Handle from/to account of transfer when entering negative amounts
+ * Made the finish button the default for the split dialog
+ * Made Enter button the default button in transaction form
+
+2002-11-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added RBM context menu to the ledger view
+ * Saving the file in binary format now clears the dirty flag
+ * Added option to 'jump' to the opposite split of a transfer transaction
+ in the context menu
+ * Prepared to store scheduled transactions in the binary file
+ * Fixed decimal problem in kMyMoneyCalculator
+ * Removed some debug output which I do not need anymore
+ * Fixed bugs in MyMoneyMoney(QString) constructor regarding fractions
+ Added testcases to find them the next time
+ * Write balance in register in red when negative
+ * Fixed a problem introduced by removing an entry from settings dlg
+ * Re-organized keyboard handling in split dialog
+ * Fixed a bug in register keyboard handling
+ * Added split handling to savings ledger view
+ * Don't open calculator if first character is plus or minus
+ * Added possibility to create transactions with an empty category
+ * Fixed the 'leave unassigned' feature for splitted transactions
+ * Incorrect transactions (less than 2 splits, sum of splits not equal 0)
+ will change their textcolor in the register with 1Hz
+ * Removed more unused code
+
+2002-11-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Removed unused files from project
+ * Fixed bug in MyMoneyMoney::formatMoney() when value is negative and
+ fraction is 0
+ * Modifed the MyMoneyMoney stream in/out operators to support 64 bit values
+ Write out warnings, if old format is used
+ * Fixed handling of locale settings in MyMoneyMoney
+ * Setup locale settings in MyMoneyMoney before the first usage
+ * Integrated the split dialog
+ * Fixed visual appearance of calculator
+ * Removed setting for textual prompt as it is not provided anymore
+ * Added border around KMyMoneyView in KMyMoney2App
+ * Fixed minor details while going from gcc 2.95 to gcc 3.2
+ * Set the row height of the transaction form to a fixed value
+ * Corrected usage of filters during reconciliation
+
+2002-11-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed filter set for reconciliation
+ * Added difference display in reconciliation view
+ * Fixed alignment of display in reconciliation view
+ * Added switch to turn on transaction form during reconciliation
+ * Fixed bug introduced with last change to kMyMoneyEdit
+ * Made sure that the datepicker is always shown completely on screen
+ * Added icon to the datepicker button
+
+2002-11-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added MyMoneyKeyValueContainer class to have the ability to
+ add a variable number of arguments to an engine object
+ * Fixed reader for old format to interpret account type correctly
+ * Fixed testcases as well
+ * Fixed settings dialog to set the startdate to 1.1.1970 if not
+ present in kmymoney2rc file. Otherwise, it would use currentDate.
+ * Added MyMoneyKeyValueContainer to MyMoneyAccount
+ * Added testcases for MyMoneyKeyValueContainer and updated
+ testcases for MyMoneyAccount
+ * Added a widget stack to the ledger view and use it within the
+ the checkings and savings ledger view to switch between the
+ buttons and reconcile data
+ * Added methods to interface IMyMoneySerialize to load the internal id's
+ * Fixed KEndingBalanceDlg (activated code, made member vars private, etc)
+ * Started working on reconciliation for checkings and savings accounts
+ * Fixed a missing pointer assignment int kMyMoneyRegister
+ * Fixed resetting the next...Id values inside MyMoneySeqAccessMgr during
+ file reading
+ * Fixed flickering when redrawing the register
+ * Added first implementation of reconciliation code
+ * Modified kmymoneyview.cpp to correctly interpret the filename for
+ files accessed through a network-URL
+ * Fixed event processing in kMyMoneyEdit
+ * Added signalSpace() to kMyMoneyRegister
+
+2002-11-14 Kevin Tambascio <ktambascio@yahoo.com>
+ * Modified kmymoneyview.cpp, to allow XML files to be passed to the right
+ file parser.
+ * Added mymoneyxmlparser.h, which extends the xml++.h class.
+ * removed mymoneystoragexmlcallback files, because they weren't needed.
+ * more work on the XML Reader code.
+
+2002-11-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added support for network file access over the protocols
+ provided by KIO (ftp, http, smb etc.)
+
+2002-11-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added support for compressed file I/O. The reader checks if an
+ uncompressed or compressed file is read. The writer always adds
+ compression. This can be turned off by setting the switch
+ 'WriteDataUncompressed' in the [General Options] section of
+ the kmymoney2rc file. A UI in the settings dialog is not supported
+ as the end-user should always get a compressed file
+ * Therefor changed the interface to IMyMoneyStorageFormat to pass a
+ QIODevice* instead of a QFile*
+
+2002-11-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed bug in MyMoneyMoney locale handling
+ * Added testcase for that
+ * Removed some more references to the old transaction view
+ * Added a summary line underneath the register in the ledger view
+ * Added the savings view
+ * Added warning when trying to edit a reconciled transaction
+ * Frozen transactions cannot be edited anymore
+ * Cleaned up code of checkings view
+ * Added MyMoneyTransaction::setEntryDate (no testcase yet)
+ * Added new binary writer/reader pair (alpha state, you have been warned)
+ * Removed unnecessary methods from MyMoneyStorageXML
+ * Modified interface to IMyMoneyStorageFormat to pass a QFile* instead
+ of a QDataStream&
+ * Prepared file operations in KMyMoneyView to support network access
+ via e.g. HTTP / FTP.
+
+2002-11-08 Kevin Tambascio <ktambascio@yahoo.com>
+ * Made changes in MyMoneyStorageXML to begin the support of reading
+ XML-based files. There is no real functionality yet, I just wanted to
+ archive my changes.
+
+2002-11-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * kMyMoneyRegister now fully supports font changes of cell and
+ header Font
+ * Ctrl-T now switches the register detailed view on/off. The form
+ visibility can be changed using the settings dialog
+ * Setting for row count in register deprecated and removed from
+ settings dialog
+ * Fixed recursive loop in kMyMoneyDateInput widget
+ * Eliminated unused method slotEnterPressed()
+ * Fixed kMyMoneyDateInput to obey KDE's locale settings
+ * Added locale handling interface to MyMoneyMoney
+ ([set]decimalSeparator() and [set]thousandSeparator()
+ * Modified MyMoneyMoney::formatMoney() and MyMoneyMoney(QString&)
+ constructor to support locale settings
+ * Added testcases for the MyMoneyMoney locale stuff
+ * Added some more API documentation
+ * Fixed a bunch of problems introduced with the latest
+ check-in by Kevin
+
+2002-11-04 Kevin Tambascio <ktambascio@yahoo.com>
+ * Added new pure virtual class to describe the file type reader classes,
+ IMyMoneyStorageFormat.cpp and .h.
+ * Updated project files to include these new files.
+
+2002-11-01 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed return code of kMyMoneyLedgerViewCheckings::focusNextPrevChild()
+ * Improved KLedgerView::focusNextPrevChild to handle invisible and
+ disabled widgets
+ * Added ledger lens to show all rows of the selected transaction
+ in the ledger. This is the default when the transaction form
+ is turned off.
+ * Added settings options for the ledger lens and the transaction form
+ * Added the new icons to the settings dialog
+
+2002-10-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added parameter name to constructor of kMyMoneyLineEdit
+ * Added kMyMoneyDateEdit::focusWidget()
+ * Fixed tab order handling in form based transaction entry
+ * Fixed calculator to return first operand as result if no second operand
+ has been entered after an operation was selected
+ * Improved keyboard support for ledger view
+ * Added more source code documentation
+ * Removed some unused code
+
+2002-10-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added detection of libxml2 and libxml++ to configure
+ * Fixed initial loading of KAccountListItem
+
+2002-10-25 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Changed line number in MyMoneyException to unsigned long
+ * Added documentation to some engine and view classes
+ * Removed references to MyMoneyFile within a transaction
+ * Renamed 'Bills & Reminders' into 'Schedule' in icon list
+ * Added icons for the icon list to icons/48x48/apps
+ * Added accountTypeToString and stringToAccountType helper methods
+ to KMyMoneyFile
+ * Added KTransactionPtrVector::setSortType()
+
+2002-10-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Modified name of member variable in KCategoryView
+ * Added checks for atoll and strtoll to configure.in.in
+ * Replace atoll with strtoll in mymoneymoney.h
+ * Reduced number of arguments for KAccountListItem constructors
+ * Added documentation to KAccountListItem
+ * Eliminated the ugly hack in KAccountsView that Michael wanted a
+ solution for
+ * Fixed resizeing of CategoryView and AccountView
+ * Replaced includes with forward class references where applicable
+ * Added kMyMoneyCalculator widget to kMyMoneyEdit
+ * Improved performance when building account trees
+ * Added missing mymoney/autotest.h file to the repository
+
+2002-10-15 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added notification classes for payees, institutions, accounts
+ and account-hierarchy to MyMoneyFile
+ * updated test cases
+ * Added logic to support transfer transactions
+ * Updated KPayeesView to interface to new MyMoneyFile object
+ * Moved general logic from KLedgerViewCheckings to KLedgerView
+ * If an account is opened, the ledger view is selected instead of
+ the 'old' transactionview.
+ * Fixed handling of Finish-Button in Account-Wizard
+ * Added descriptive error messages to MyMoneyFile::addAccount()
+ * Fixed documentation of MyMoneyFile::attach()
+ * Fixed MyMoneySeqAccessMgr::totalBalance() to use totalBalance() of
+ subordinate accounts instead of balance().
+ * Delete objects in KMyMoneyFile::close()
+ * Added eventFilter to class kMyMoneyTransactionFormTable
+ * Added framework for iconlist to account view
+ * Allow a maximum of three rows per transaction in the settings dialog
+ * Fixed names of standard account names to have only two colons max
+
+2002-09-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added MyMoneySeqAccessMgr::payeeByName() and MyMoneyFile::payeeByName()
+ * Added MyMoneyTransaction::splitSum()
+ * Added MyMoneyFile::categoryToAccount() and MyMoneyFile::nameToAccount()
+ * Added testcase for the above functions
+ * Fixed bug in MyMoneySplit::operator ==
+ * Changed interface to MyMoneyTransaction::addSplit to use reference
+ * Added MyMoneyTransaction::splitSum() and testcases
+ * Added some details to exceptions in MyMoneyTransaction
+ * Added central function to display info about unexpected exceptions
+ in autotest.cpp
+ * Added logic to fill checkings form and to add/modify transactions
+ * Fixed kmymoney2/Makefile.am to be able to extract the i18n messages
+ * Added new startup logo customized for version 0.5
+
+2002-08-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed configure problem when CPPUNIT is not installed
+ * Fixed MyMoneyMoney::format() to return fractional part for value 0
+
+2002-08-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Do not allow in-register editing if the form is visible
+ * Added payee widget with auto completion feature
+ * Fixed some problems showing up with GCC 3.x, thanks to Jim Blomo
+ for reporting them
+
+2002-08-07 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added option to show/hide the transaction form in a ledger view in the
+ settings menu and through shortcut (Ctrl-T)
+
+2002-08-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added reconciliation flag display in KMyMoneyRegisterCheckings
+ * Added MyMoneyFile::accountToCategory()
+ * Added enable/disable of buttons in transaction form
+ * Added display of category within transactions
+ * Display only absolute value of amount in transaction form
+ * Fixed initial visibility if more than 1 row per transaction is selected
+
+2002-08-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added number and action handling to MyMoneySplit
+ * Added number and action handling to MyMoneyStorageBin
+ * Added kMyMoneyTransactionFrom widget
+ * Added transaction selection in ledger register widget with mouse
+ * Added form display for checking accounts
+ * Fixed grammer error in project handbook
+
+2002-07-23 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added logic to support selection bar in kMyMoneyRegister
+ * Added payee data loading from old file format
+ * Catch exceptions when reading data from file
+
+2002-07-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added balance cache to MyMoneySeqAccessMgr for better performance
+ * Added balance display to ledger view and register widget
+
+2002-07-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added global function timetrace() for simple time measurement
+ * Added ledger view (base class and checkings implementation)
+ * Added function to return matching and non-matching split
+ for a given account from a transaction to MyMoneyTransaction::split()
+
+2002-07-09 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed account creation with through standard dialog
+ * Added more logic to the Account Creation Wizard
+
+2002-07-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added Account Creation Wizard
+ * Added configuration setting to select between wizard and dialog
+ for new account creation
+
+2002-06-24 Michael Edwardes <mte@users.sourceforge.net>
+ * Made KTransactionView enabled.
+ * Fixed transaction refresh.
+
+2002-06-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * removed MyMoneyAccount::Transaction, all references and tests
+ * added MyMoneyTransaction::split(const QCString& accountId) and tests
+ * added MyMoneyFile::attachStorage and MyMoneyFile::detachStorage
+ * check for presence of storage object prior to use it inside MyMoneyFile
+ * added MyMoneyFile::payeeList()
+ * made MyMoneyFile a Singleton object
+ * removed singleton behaviour from KMyMoneyFile
+ * filled logic for KMyMoneyView::loadDefaultCategories
+ * default accounts are now stored in file 'default_accounts.dat'
+ * 'default_categories.dat' is not used anymore. I kept it for referenc
+ in the repository
+ * show error message, if a file could not be loaded in KMyMoneyView::readFile
+ * made KCategoriesView an observer of the MyMoneyFile object to track
+ any changes to any account in the 'income' and 'expense' hierarchy
+
+2002-06-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * added accountId as parameter to MyMoneyFile::transactionCount()
+ * added test cases for it
+ * removeing an account did not remove it from it's parent accountList.
+
+2002-06-16 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed the singleton pattern
+ * Added double constructor for MyMoneyMoney and testcase
+ * Modified MyMoneyStorageBin to use the new constructor when reading old
+ files
+ * use macro supplied by CPPUNIT to detect presence of CPPUNIT >= 1.8.0
+ * don't try to compile test code, if CPPUNIT is not present
+ * added chapter about unit testing and example code to the PHB
+ * minor spelling modifications in the PHB
+ * Added payeeList() method
+ * Fixed ambiguity error in KBanksView
+ * Return value for KMyMoneyView::isopen()
+
+2002-06-14 Michael Edwardes <mte@users.sourceforge.net>
+ * Improved the 'file open' logic.
+ * Fixed the infinite loop on exit. Can't believe we didn't spot this
+ before!
+ * Use MyMoneyFile::totalBalance() instead of MyMoneyAccount::balance() when
+ displaying accounts in the accounts & categories view.
+
+2002-06-13 Michael Edwardes <mte@users.sourceforge.net>
+ * Right click on accounts view now works.
+ * Editing/deleting an institution works.
+ * Types and balances are shown again in the accounts view.
+ * Categories view updated.
+ * KCategoryListItem removed.
+ * The accounts view type is now configurable through the settings dialog
+ in the page 'Accounts View'. (Institution or Accounts view).
+
+2002-06-11 Michael Edwardes <mte@users.sourceforge.net>
+ * Categories view now works as before.
+ * Made the new account dialog also serve as a new category dialog.
+ * The accounts view defaults to the original institution view.
+ * Removed some more old classes, (KNewCategoryDlg, KFileInfoDlg).
+
+2002-06-10 Michael Edwardes <mte@users.sourceforge.net>
+ * Converted KMyMoneyView to use a singleton pattern for access
+ to the MyMoneyFile.
+ * Cleaned up the menu entries a bit.
+ * You can now view the categories, (its just the income and expense accounts).
+
+2002-06-09 Michael Edwardes <mte@users.sourceforge.net>
+ * Fixed the date input widget.
+ * New account dialog is now fully functional.
+ * Fixed the accounts view window. You can now use the old banks view
+ or the newer accounts view. Currently this can only be done
+ manually, by adding the following line to the "List Options"
+ group in ~/.kde/share/config/kmymoney2rc:
+ NormalAccountsView=true
+ Set it to true for the banks view, false for the accounts view.
+
+2002-06-07 Michael Edwardes <mte@users.sourceforge.net>
+ * Adding institution in the account dialog now works.
+ * The edit account dialog now loads nearly all the 'fields'
+ properly.
+ * Integrated the date input widget changes from the 0-4-kde3-branch.
+
+2002-06-06 Michael Edwardes <mte@users.sourceforge.net>
+ * Selecting the four root accounts in the parent account widget
+ now works.
+
+2002-06-05 Michael Edwardes <mte@users.sourceforge.net>
+ * Removed the action enabling logic.
+ * You can now read a file into KMyMoney2 again.
+ * Using MyMoneyStorageDump we can now dump the file by
+ choosing the menu option File|Info.
+ * You can now add institutions, (but not see them).
+ * You can also add accounts, (in a limited fashion).
+ * Added the ability to set a parent account when creating new
+ accounts.
+
+2002-06-04 Michael Edwardes <mte@users.sourceforge.net>
+ * Made some of the accounts view work with the new engine.
+
+2002-05-31 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added initial MyMoneyPayee support
+
+2002-05-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added setAccountName() method to engine
+ * Preparations for payee handling (not yet finished)
+
+2002-05-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Moved testcase implementation into separate source files
+
+2002-05-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added transactionList(const QCString& acc) to engine interface
+
+2002-05-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added unary minus operator to MyMoneyMoney
+
+2002-05-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Converted all id references from QString to QCString
+ * In order to activate the memory leak checks, one must
+ specify the compiler option -D_CHECK_MEMORY in KDevelop
+
+2002-05-22 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added the string 'Id' to all engine methods returning or
+ setting an id
+ * Made accountType settable
+
+2002-05-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * added notification logic to the engine
+
+2002-05-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * merged new engine branch
+ * *** THE PROJECT WILL NOT COMPILE FOR AWHILE ***
+
+2002-04-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed compile and link order problem
+ * Updated developer list in About window
+
+2002-04-26 Arni Ingimundarson <arniing@users.sourceforge.net>
+ * Got rid of KTempDatePicker and used the standar kde
+ KDatePicker. A popup problem still remains.
+
+2002-03-27 Michael Edwardes <mte@users.sourceforge.net>
+ * Fixed bug #535840. 'Annoying window refresh'.
+
+2002-03-22 Arni Ingimundarson <arniing@users.sourceforge.net>
+ * Added support for keyboard input in kMyMoneyDateInput
+ +/- now works and PgDn popsup the DatePickerWidget.
+
+2002-03-20 Arni Ingimundarson <arniing@users.sourceforge.net>
+ * Fixed Datepicker inconsistency (bug 502805)
+
+2002-03-19 Arni Ingimundarson <arniing@users.sourceforge.net>
+ * Fixed file dialog choose->cancel bug (490427)
+ in kbackupdlg.cpp, kexportdlg.cpp and kimportdlg.cpp
+
+2002-03-14 Michael Edwardes <mte@users.sourceforge.net>
+ * Fixed disappearing categories bug.
+
+2002-03-14 Arni Ingimundarson <arniing@users.sourceforge.net>
+ * Fixed a sorting bug in KReconcileDlg
+
+2002-03-10 Michael Edwardes <mte@users.sourceforge.net>
+ * Fix for autoconf 2.5 which KDE 3 now requires.
+
+2002-03-07 Michael Edwardes <mte@users.sourceforge.net>
+ * Commited Javi C's new icons. <javi_c@users.sourceforge.net>
+
+2002-02-17 Michael Edwardes <mte@users.sourceforge.net>
+ * New <template> dialogs for scheduled transactions.
+ * Changed the scheduled view to use a tool button.
+ * Improved functionality in the dialogs.
+ * Changed scheduled interface in mymoney api.
+
+2002-02-14 Michael Edwardes <mte@users.sourceforge.net>
+ * Made the source fully KDE3 compatable.
+
+2002-02-13 Michael Edwardes <mte@users.sourceforge.net>
+ * Updated KDE 3 support to current KDE 3 cvs.
+
+2002-02-12 Kevin Tambascio <ktambascio@users.sourceforge.net>
+ * more investment work.
+
+2002-02-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * fixed wrong examples in the project handbook
+
+2002-02-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * added section about release management to the project handbook
+
+2002-02-09 Michael Edwardes <mte@users.sourceforge.net>
+ * Improved handling of the views.
+
+2002-02-09 Kevin Tambascio <ktambascio@users.sourceforge.net>
+ * More changes for stock transactions.
+ * added dialog to update stock prices.
+
+2002-02-07 Kevin Tambascio <ktambascio@users.sourceforge.net>
+ * More changes for stock transactions.
+
+2002-02-07 Michael Edwardes <mte@users.sourceforge.net>
+ * Some views now emit activated signals.
+ * KMyMoneyView prepped for new toolbar/menu entry enabling code
+ dependant upon what the user is viewing.
+
+2002-02-06 Michael Edwardes <mte@users.sourceforge.net>
+ * Fixed deletion of transaction bug where it diddn't refrsh list properly.
+
+2002-02-05 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added framework for automated regression testing to mymoney modules
+
+2002-02-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added current date mark in transaction view
+ * Modified exit handling
+ * Setup m_viewType first and then emit signals in
+ KTransactionView::viewTypeActivated
+ * Removed locale error messages
+
+2002-02-04 Kevin Tambascio <ktambascio@users.sourceforge.net>
+ * More stock transaction work.
+
+2002-02-04 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated project file to include all new files
+ * Fixed a missing semicolon
+
+2002-02-03 Kevin Tambascio <ktambascio@users.sourceforge.net>
+ * Added MyMoneyInvestTransaction class to hold transaction information for investments.
+ * Made some more progress with the stock transactions.
+ * Fixed problem in the transaction view, not showing any transactions (Fix from Michael's email).
+
+2002-01-31 Michael Edwardes <mte@users.sourceforge.net>
+ * Added scheduled transaction addition dialog.
+ * Fixed constructor of kmymoneycombo. Didn't fix the rest though.
+
+2002-01-30 Kevin Tambascio <ktambascio@users.sourceforge.net>
+ * Fixed problem with showing the kinvestmentview and kstocktransactionview class as widgets, instead of dialogs.
+
+2002-01-30 Kevin Tambascio <ktambascio@users.sourceforge.net>
+ * Added a new investment view, started to add code to show investment view when an investment account is selected.
+
+2002-01-29 Kevin Tambascio <ktambascio@users.sourceforge.net>
+ * Added a dialog for entering information about a new stock or mutual fund.
+
+2002-01-29 Kevin Tambascio <ktambascio@users.sourceforge.net>
+ * Added MyMoneyEquity and MyMoneyEquityList classes, to store information about stocks, mutul funds.
+ * Added MyMoneyUtil.cpp and .h to put global/static utility functions, typedefs.
+ * Added STL support for the MyMoneyUtil class. Just include "mymoneyutils.h" to access STL.
+
+2002-01-29 Kevin Tambascio <ktambascio@users.sourceforge.net>
+ * Added stock transaction view files, no new functionality yet.
+
+2002-01-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Added section in the PHB about files to be checked in and
+ files that should not be checked in
+
+2002-01-27 Michael Edwardes <mte@users.sourceforge.net>
+ * Added support for specifying the start date in viewing transactions.
+ * Added the view for recurring transactions.
+
+2002-01-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed generation of PHB
+ * Fixed sizing problems with kMyMoneyTable widget
+ * Allow empty category (default)
+
+2002-01-25 Michael Edwardes <mte@users.sourceforge.net>
+ * Removed the pics and text from the payees/categories view.
+
+2002-01-25 Kevin Tambascio <ktambascio@users.sourceforge.net>
+ * Added account types in mymoneyaccount class.
+ * Forgot to add loans and mortgage category in the dialog.
+ * Made a few other changes to display the proper account type in the bankview listview.
+
+2002-01-25 Kevin Tambascio <ktambascio@users.sourceforge.net>
+ * Modified new account dialog for some of the new account types.
+
+2002-01-24 Michael Edwardes <mte@users.sourceforge.net>
+ * Added functionality to the categories view.
+ * Added an intial payees page.
+ * Added functionality to the payees view.
+ * Fixed bug on payee view initialisation.
+
+2002-01-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * added tab/back-tab handling to kMyMoneyEdit and kMyMoneyLineEdit
+ * added keyboard handling to KSplitTransactionDlg
+ * added debug output if QIF import date conversion fails
+ * added new method setCurrentItem(QString &) to kMyMoneyCombo and
+ use it in KTransactionView::setInputData()
+ * check for valid category is now done in kMyMoneyComboBox. One cannot
+ select the special entries like '--- Income ---' anymore.
+ * removed check for those special entries in KTransactionView
+
+2002-01-22 Michael Edwardes <mte@users.sourceforge.net>
+ * Created a views directory for the different views of mymoney and
+ added the relevant classes to that dir.
+ * Initial view files added.
+
+2002-01-18 Kevin Tambascio <ktambascio@users.sourceforge.net>
+ * added newline to mymoneytransactionbase.h, because it was causing compiler
+ warnings all over the place.
+
+2002-01-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * added more functionality to the split transaction handling
+ which is not yet done.
+
+2002-01-16 Michael Edwardes <mte@users.sourceforge.net>
+ * Removed some old 'recurring transactions' code.
+ * Removed the unneeded KMainView class and converted KMyMoneyView
+ to use the KBanksView and KTransactionView classes directly.
+ * Moved all the dialogs into the dialogs subdir.
+
+2002-01-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * added setDirty() to MyMoneyTransaction, MyMoneyAccount and MyMoneyBank
+ * split MyMoneyTransaction into MyMoneyTransactionBase, a virtual base
+ class required for splits
+ * added MyMoneySplitTransaction framework
+ * update template files to include new developers
+ * modified library link orderto "dialog, widgets, mymoney" so that
+ all references can be resolved
+ * override KMyMoneyTable::paintFocus to avoid display of focus
+ * Fixed bug #502804
+ * Fixed bug #502803
+ * added color selector for color of grid in register view
+
+2002-01-06 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * bumped version number to 0.5.0
+ * added PHB docbook files to the project (makefile.am is still a problem)
+ * clearing the text in KTransactionView::clear() before doing a
+ transactionsTable->setNumRows(0) is unnecessary. I removed it.
+ * cleaned up unused code in ktransactionview.cpp
+ * restructured filling of transactionsTable to speed up the operation.
+ I still don't know why this is so much faster now.
+ * fixed procedures to create new releases in PHB
+
+2001-12-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed bug #490440 - extra edit boxes in register
+ * display all text in register with centered vertical alignment
+ * Fixed bug #497902 - memo text is not displayed
+ * Fixed bug #497903 - context menu does not open on right click
+
+2001-12-29 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated project handbook (fixed tag naming conventions)
+
+2001-12-28 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Updated project handbook
+ * Turned off editable flag of m_method in ktransactionview.
+
+2001-12-27 Michael Edwardes <mte@users.sourceforge.net>
+ * Fixed bug #490434 - Account operations (2).
+
+2001-12-26 Michael Edwardes <mte@users.sourceforge.net>
+ * Fixed bug #490019 - Toolbar icon out of sync.
+ * Fixed bug #490424 - New institution dialog tab order.
+
+2001-12-23 Michael Edwardes <mte@users.sourceforge.net>
+ * Added ability to compile for KDE 3 or KDE 2.
+
+2001-12-21 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Corrected transaction view to display correctly when resizing horizontaly
+ * Use visibleWidth() when resizing the transaction view. This will
+ automatically include/exclude the vertical scroll bar into/from
+ the calculation of the field widths.
+ * suppress popup of horizontal scroll bar in transaction view,
+ bank view, reconciliation and categories dialog
+ * fixed resizing the reconciliation dialog (almost)
+
+2001-12-20 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed bug #433660 Big numbers do not fit into the fields
+
+2001-12-19 Kevin Tambascio <ktambascio@yahoo.com>
+ * Fixed Bug #494908 Date/Calender control is too small
+
+2001-12-19 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * added logic to suppress display of splash screen through config setting
+
+2001-12-18 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * removed/resolved compiler warnings
+
+2001-12-17 Michael Edwardes <mte@users.sourceforge.net>
+ * Fixed bug no 490015.
+ * Updated admin directory to kdelibs-2.2.2 whilst preserving
+ the autoconf-2.50 changes so we can use --enable-objprelink.
+
+2001-12-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * fixed Bug #490442
+ * removed currency text from reconcile dialog elements
+ * fixed memory leaks in KReconcileListItem
+ * replaced formatNumber with formatMoney
+ * fixed KMyMoneyEdit::getMoneyValue() to support localized money formats
+ with full rounding to selected fraction size.
+
+2001-12-16 Kevin Tambascio <ktambascio@yahoo.com>
+ * Fixed Bug #490016 File filter in open dialog
+
+2001-12-16 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * fixed memory leaks in the reconcile and endingbalance dialog boxes
+
+2001-12-14 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * fixed another memory leak bug having to do with the Transaction KPopupMenu
+ * revised Felix' fixes to avoid creating countless objects
+
+2001-12-14 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * fixed another memory leak bug having to do with the Account KPopupMenu
+
+2001-12-13 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * fixed debug output of QIF import (result message of date conversion)
+ * commented debug messages in QIF import
+ * read and write memo field during QIF import/export
+ * shrunk export dialog - this was way tooo big for my notebook
+ * update transaction count during QIF export every ten iterations
+ * added german date formats to QIF export (monetaryDecimalSymbol to be done)
+ * close QIF export dialog when done
+ * allow QIF export with only categories or account data selected
+ * MyMoneyMoney supports local money formats
+ * KBanksView honors locale settings
+ * removed unused variables in kcsvprogressdlg.cpp
+
+2001-12-13 Kevin Tambascio <ktambascio@yahoo.com>
+ * Fixed export dialogs to always add the appropriate file extension.
+
+2001-12-12 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * updated project handbook files in developer-doc/phb
+ * added selection of monetaryDecimalSymbol in QIF import
+ * collect memo during QIF import
+
+2001-12-11 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * fixed display of transaction view for large amount of transactions
+ * leave more room for scroll bar on the right side of transaction view
+ to avoid horizontal scroll bar
+ * fixed loading of payment method combo-box in transaction view
+ * added german date handling to QIF import
+
+2001-12-10 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * modified acinclude.m4.in to work with autoconf 2.50
+
+2001-12-09 Michael Edwardes <mte@users.sourceforge.net>
+ * Changed the csv export format so each record is on one line.
+ * Created the csv file import method in mymoneyaccount.
+ * Added a static helper method to mymoneytransaction.
+
+2001-12-09 Kevin Tambascio <ktambascio@yahoo.com>
+ * Fixed the save as dialog to append the .kmy file extension more intelligently.
+
+2001-12-09 Michael Edwardes <mte@users.sourceforge.net>
+ * Removed the transaction number from csv export.
+ * Moved csv export into mymoneyaccount.
+ * Updated the kcsvprogressdlg to use new mymoneyaccount method.
+ * Added date ranges to csv export/import dialog.
+
+2001-12-08 Kevin Tambascio <ktambascio@yahoo.com>
+ * When you double-click on an account in the bank view, you will see the transaction list.
+
+2001-12-08 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * Fixed Pixmap Crash on Exit error.
+
+2001-12-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Update flags when refreshing banksview
+ * Fixed date of previous entry
+
+2001-12-08 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * force update of imported records on screen every ten iterations
+
+2001-11-26 Kevin Tambascio <ktambascio@yahoo.com>
+ * New files will always have .kmy extension to them.
+
+2001-11-24 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Incorporated Coding Rules into Project Handbook
+ * Added CVS examples to Project Handbook
+
+2001-11-21 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * Commented out delete of widgets in KTransactionView
+
+2001-09-30 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Update bank view after import
+ * Added apostrophe selection to QIF import
+
+2001-09-27 Michael Edwardes <mte@users.sourceforge.net>
+ * Changed the date input class to display either left or right.
+ * Fixed a couple of issues of when to show action(s).
+
+2001-09-27 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Call resize() of base class in KCategoriesDlg, KBanksView, KReconcileDlg
+ * Prevent hiding of fields 'cleared balance' and 'difference' when shrinking
+ the reconcile dialog
+
+2001-09-26 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed another uninitialized variable bug in KExportDlg::readConfig()
+ This sets the program default of QIF exports to %d/%m/%yyyy
+
+2001-09-26 Michael Edwardes <mte@users.sourceforge.net>
+ * Added pictures where-ever I think they should be. Along with the icons they
+ are just placeholders ready to be drawn.
+
+2001-09-26 Michael Edwardes <mte@users.sourceforge.net>
+ * Added icons where-ever I think they should be. Have a look and see if they
+ are placed appropriately. The icons don't actually depict anything, that
+ still needs to be done!
+ * Improved icon handling in the right menu(s) by using the KIconLoader class.
+ We have now just the 22x22 icons and KIconLoader does all the hardwork of
+ resizing to 16x16.
+ * Added default hi-color versions of the application icons.
+
+2001-09-25 Michael Edwardes <mte@users.sourceforge.net>
+ * Bumped version up to 0.3.8.
+ * Removed some old icons and added some new ones. Please be aware that
+ I am a useless artist!
+
+2001-09-17 Thomas Baumgart <ipwizard@users.sourceforge.net>
+ * Fixed two uninitialized variable bugs
+
+2001-08-29 Michael Edwardes <mte@users.sourceforge.net>
+ * Made the category list be alphabetical in the two different groups.
+ * KTransactionView now loads an alphabetical category list.
+ * Removed an unnecessary class. (KTransactionTableItem).
+ * Fixed error in file modification logic error in app class.
+
+2001-08-27 Michael Edwardes <mte@users.sourceforge.net>
+ * Added some better default categories and slightly improved reading process
+ to deal with empty minor category lists.
+
+2001-08-23 Michael Edwardes <mte@users.sourceforge.net>
+ * Slight improvement to the qif date formatter code by utilising qt.
+ * Check whether import file exists.
+ * Import & Export dialog logic improved, e.g buttons only available when text
+ is input.
+ * Changed mymoneyedit to use the better kfloatvalidator to accept localised numbers.
+ * Wrapped all user visible text in i18n.
+ * Removed all sprintfs to aid internationalisation.
+ * Removed all latin1() calls to aid in internationaliastion. latin1 calls
+ now only exist in qDebug calls which should be changed to kdDebug calls anyway.
+ * Updated kmymoney2.pot file.
+
+2001-08-20 Michael Edwardes <mte@users.sourceforge.net>
+ * Added the new *unstable* qif date formatter code to the qif read and write
+ methods.
+
+2001-08-19 Michael Edwardes <mte@users.sourceforge.net>
+ * Export QIF now has a progress bar.
+ * KExportDlg now conforms to coding standards and uses i18n where
+ appropriate.
+ * Updated version to 0.3.7.
+ * Small update to coding standards mentioning i18n.
+ * Import QIF now has a progress bar.
+ * KImportDlg now conforms to coding standards and uses i18n where
+ appropriate.
+
+2001-08-18 Michael Edwardes <mte@users.sourceforge.net>
+ * Moved the QIF read & write methods into MyMoneyAccount.
+
+2001-08-17 Michael Edwardes <mte@users.sourceforge.net>
+ * Moved import and export dialogs into dialogs dir.
+ * Updated admin dir for kde2.2.
+
+2001-07-29 Michael Edwardes <mte@users.sourceforge.net>
+ * Improved the CSV import/export process.
+
+2001-07-28 Michael Edwardes <mte@users.sourceforge.net>
+ * Quick fix to the kmymoneyview class for Mandrake 7.2.
+
+2001-07-27 Michael Edwardes <mte@users.sourceforge.net>
+ * Fixed bug i introduced. I tried to stop the seg faults on exit by using
+ references, but forgot that the account needs to be accessed.
+
+2001-07-27 Michael Edwardes <mte@users.sourceforge.net>
+ * Added default text to prompt the user in the register view.
+ * Fixed the seg fault i introduced into the register view.
+ * Added an option to the settings dialog to show the textual prompt.
+ * Removed balance display when viewing the searched transactions.
+
+2001-07-26 Michael Edwardes <mte@users.sourceforge.net>
+ * Added a qstring operator to the mymoney class.
+ * Added support for editing transactions when in search mode.
+
+2001-07-23 Michael Edwardes <mte@users.sourceforge.net>
+ * MyMoneyFile now doesn't add empty categories & payees. If this is going
+ to become a standard financial library these sort of checks are going to
+ have to be made everywhere.
+ * Fixed two bugs in the reconcile dialog.
+
+2001-07-23 Felix Rodriguez<frodriguez@mail.wesleyan.edu>
+ * Fixed data entry bug
+
+2001-07-22 Felix Rodriguez<frodriguez@mail.wesleyan.edu>
+ * Placed Category and Memo in the same cell.
+
+2001-07-22 Michael Edwardes <mte@users.sourceforge.net>
+ * Added a radio button to KSettingsDlg and made it conform to
+ the new coding standards.
+
+2001-07-22 Felix Rodriguez<frodriguez@mail.wesleyan.edu>
+ * Made Payee Combobox editable and enabled autocompletion
+
+2001-07-22 Michael Edwardes <mte@users.sourceforge.net>
+ * Added an apply button to the settings dialog.
+ * Added a reset button to the settings dialog.
+
+2001-07-21 Michael Edwardes <mte@users.sourceforge.net>
+ * Implemented the colour painting option.
+ * Fixed the bug when resizing the transaction view.
+ * Fixed the alignment bug in the transaction view.
+
+2001-07-21 Michael Edwardes <mte@users.sourceforge.net>
+ * Changed payee colunm name in reconcile dialog to payee.
+ * Fixed the KMyMoneyCombo class.
+ * Fixed bug when updating cleared & unreconciled status.
+ * KSettingsDlg now checks that the row count is >= 1 && <= 3.
+
+2001-07-19 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * Fixed Payee display in Reconcile dialog
+
+2001-07-19 Michael Edwardes <mte@users.sourceforge.net>
+ * Added 'autoremember' for the date format in the qif dialogs.
+ * Changed the transaction view to speed it up.
+ * Added ability to change the number of rows displayed in the register
+ views.
+ * Added ability to turn on or off the grid in the register view.
+ * Removed some redundant classes.
+
+2001-07-15 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * I think I fixed Crash on Exit Bug
+
+2001-07-13 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * Added Date format option for QIF import and export
+
+2001-07-13 Michael Edwardes <mte@users.sourceforge.net>
+ * Improved 'autoremember' for most dialogs relevant e.g
+ KCategoriesDlg remembers the last selected category.
+ * Updated README.
+
+2001-07-12 Michael Edwardes <mte@users.sourceforge.net>
+ * Implemented CSV export. Import may be disabled for CSV in the
+ future (will anybody use it ?).
+
+2001-07-12 Michael Edwardes <mte@users.sourceforge.net>
+ * Fixed small bug i introduced in the import dialog.
+ * Released 0.3.5.
+
+2001-07-12 Michael Edwardes <mte@users.sourceforge.net>
+ * Improved import & export process. Now prompts for more than
+ one type of export (at the moment, QIF and CSV).
+
+2001-07-11 Michael Edwardes <mte@users.sourceforge.net>
+ * Improved reconciliation process, mostly GUI improvements.
+ * Backup dialog remembers the state of the mount check box.
+ * Fixed a bug in MyMoneyFile:: assignment operator and the copy constructor.
+ * MyMoneyFile::isInitialised() should work properly now.
+ * Fixed bug in reconcile dlg dealing with editing transactions during the
+ process. (It opened the window again even if you've cancelled when you
+ next edit/create a transaction).
+
+2001-07-09 Michael Edwardes <mte@users.sourceforge.net>
+ * Updated the parent() methods to have descriptive names and added missing
+ call in MyMoneyTransaction.
+ * Changed the backup dialog to incorporate a choose folder button.
+ * Fixed bug in backup dialog dealing with automount systems.
+ * Backup files now have the date appended to them, for proper backup
+ restoration, and a test exists to check overwriting files.
+
+2001-07-08 Michael Edwardes <mte@users.sourceforge.net>
+ * Start dialog only shows files that exist.
+ * Fixed bug in MyMoneyFile class that didn't delete the payee list
+ and didn't delete the category list properly on close/reset.
+ * Removed subdirs, configure.in and configure.files from cvs because
+ they are generated. Updated .cvsignore to ignore those files.
+ * Temporarily hidden all the not implemented stuff ready for the next
+ 0.4 stable release. It's still there but the user can't see it.
+
+2001-07-08 Michael Edwardes <mte@users.sourceforge.net>
+ * Standardized most of the dialogs in respect to the OK and
+ Cancel buttons.
+ * MyMoneyFile now updates the dirty flag when needed.
+ * All classes now have a 'parent' pointer and update the
+ dirty flag when needed. (e.g transactions now know which
+ account/bank they are in).
+
+2001-07-06 Michael Edwardes <mte@users.sourceforge.net>
+ * Added the ability to customize the key definitions.
+ * Fixed the ability to load the last file edited automatically.
+ This is done in the configure dialog and bypasses the start
+ dialog if needed. Beware: the random crashes on exit mean
+ it doesn't always update the options properly. But you can
+ hand edit $HOME/.kde/share/config/kmymoney2rc.
+ * Removed KMyMoneySettings class and changed all references to
+ use the KConfig class.
+
+2001-07-06 Michael Edwardes <mte@users.sourceforge.net>
+ * Improved the payee editor, adding a delete button and improving
+ a lot of the logic.
+ * Fixed a bug in the MyMoneyFile class that didn't update the
+ dirty flag when adding a payee.
+
+2001-07-06 Michael Edwardes <mte@users.sourceforge.net>
+ * Improved the transaction search process.
+ * Changed acinclude.m4.in to enable debug by default. We'll
+ change it back for the stable release.
+
+2001-07-06 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * Optimized TransactionView Refresh
+
+2001-07-05 Michael Edwardes <mte@users.sourceforge.net>
+ * Fixed the category list item class so you can use
+ --enable-final in the configure process.
+ * Changed the search dialog to be ready for the new features.
+
+2001-07-05 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * Added Memo Display
+ * Fixed numerous transactionview bugs.
+
+2001-06-29 Michael Edwardes <mte@users.sourceforge.net>
+ * Added ability to search for transactions and view them in
+ register view.
+ * Fixed resize issues with transaction view.
+ * Added the Back icon onto the toolbar.
+
+2001-06-23 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * Payee ComboBox now populates from PayeeList also
+
+2001-06-22 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * Fixed Payee List Bug
+ * Added Edit Transaction Button to Reconcile Dialog
+
+2001-06-21 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * Fixed Transaction Deletion Bug
+
+2001-06-21 Michael Edwardes <mte@users.sourceforge.net>
+ * Fixed missing addPayee call in reading qif files.
+ * Fixed bug in filename handling code when closing/opening
+ files.
+ * Added missing File New action.
+ * Added new action - Account open and changed behaviour
+ of account list view. It now lets you select an account
+ and then open it or perform other operations.
+ * You can now perform menu operations on the account, (not
+ just by right clicking on the account).
+
+2001-06-20 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * Fixed Reconciliation Bugs when editing transactions
+ during reconciliation.
+ * Removed Vertical Header
+
+2001-06-19 Michael Edwardes <mte@users.sourceforge.net>
+ * GUI improvements to the New Category dialog.
+ * Bug fixed in MyMoneyFile in dealing with categories.
+ * README and AUTHORS updated.
+ * GUI improvements to the Payee dialog.
+
+2001-06-18 Michael Edwardes <mte@users.sourceforge.net>
+ * KAbout data updated.
+ * More GUI improvements focusing on the Categories dialog.
+ * Transaction view shows numbers instead of the currency prefix.
+ * Fixed bug in KMyMoney2App that didn't prompt to save file
+ on exit.
+ * BUGS file updated.
+
+2001-06-17 Michael Edwardes <mte@users.sourceforge.net>
+ * Fixed a bug in the MyMoneyAccount copy constructor.
+ * Changed the 'up' icon to use a standard back action but
+ the toolbar action has gone ? You can access it by going
+ to the Go menu or by pressing Alt-Left.
+ * More GUI improvements especially to the banks/accounts list,
+ and to the dialogs New File, New Institution, New Account.
+ * Fixed bug in MyMoneyMoney class where isZero() returned true
+ for numbers < 0.
+ * Added a BUGS file to the project.
+
+2001-06-16 Javier Campos Morales <javi_cms@terra.es>
+ * New icons added.
+ * Remove sprintf in ktransactionview. "The %s escape sequence expects a utf8() encoded string.". This is not good for internacional support.
+
+2001-06-16 Michael Edwardes <mte@users.sourceforge.net>
+ * Removed 'name' input field from KNewFileDlg class.
+ * Removed m_moneyName from MyMoneyFile and made the
+ file reading code detect the older version and convert.
+ * Removed hide/show input box.
+ * Some minor GUI improvements, (focus etc).
+ * Added some opening balance fields to MyMoneyAccount.
+ * Better version control in file format. Can convert
+ between versions now.
+ * The Bank list view is now open by default.
+ * Fixed bug in MyMoneyFile::resetAllData().
+ * Changed behaviour of File|New to open a new window because
+ the user can create a new file through the start dialog.
+ (Maybe we should change the open icon to something to
+ represent the start dialog ?).
+
+2001-06-16 Javier Campos Morales <javi_cms@terra.es>
+ * Only one settings dialog is needed so added new general settings dialog -> ksettingsdlg.
+ * Remove klistsettings and old settings variables.
+ * Modify to find correct kmy icon in startup dialog.
+ * Changes some toolbar icons.
+
+2001-06-15 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * Fixed Year bug in QIF import
+ * Can now edit transactions during reconciliation
+
+2001-06-07 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * QIF import and export now provide feedback
+ * Added backup function to File menu
+
+2001-05-29 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * Widgets now goes to next transaction after pressing enter.
+
+2001-05-28 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * Fixed problems caused working with QT in RedHat 7.1
+
+2001-05-25 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * Added QIF export of categories and transactions
+
+2001-05-20 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * Added QIF import of categories and transactions
+ * Fixed bugs in ReconcileDialogBox
+ * Fixed bug in MyMoneyMoney class in determining whether amount is zero.
+
+2001-05-15 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * Fixed bug where numeric keypad enter key would not work
+ * Now saving Payee information in transaction's payee field
+
+2001-05-09 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * Can now Enter a transaction by pressing enter from a
+ data entry widget
+
+2001-05-08 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * Implemented automatic cheque numbering
+ * Transactions now autocompletes after selecting Payee/Memo
+
+2001-05-03 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * Implemented Update of transfer transactions
+
+2001-05-02 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * Optimized refresh of TransactionView
+
+2001-05-01 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * Implemented Deletion of transfer transactions
+
+2001-04-30 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * Implemented Transfer of one Account to another within the same bank
+
+2001-04-28 Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ * Alphabetized Categories
+
+2001-04-13 Michael Edwardes <mte@users.sourceforge.net>
+ * Removed some of the old code in ktransactionview.cpp.
+ * Removed all of the unneeded Table Item classes in
+ ktransactionview.cpp and added a single KTransactionTableItem
+ class.
+
+2001-03-25 Felix Rodriguez <frodriguez@wesleyan.edu>
+ * Added Cheque Number KLineEdit box
+
+2001-03-24 Felix Rodriguez <frodriguez@wesleyan.edu>
+ * Added Payees as selections to Payee ComboBox
+
+2001-03-23 Felix Rodriguez <frodriguez@wesleyan.edu>
+ * Fixed Category Combo Box to include Minor Categories
+ * Fixed Category Dialog Box ListView WidthMode to Maximum
+
+2001-03-22 Felix Rodriguez <frodriguez@wesleyan.edu>
+ * Moved the Reconcile Column from column 4 to column 3 of the table
+ * Fixed problem after clicking cancel if you click on same transaction
+ row, Input widgets did not appear.
+ * Moved Ending Balance Box to appear directly under balance column
+
+2001-03-21 Felix Rodriguez <frodriguez@wesleyan.edu>
+ * Added two lines per transaction in the transaction view
+ * Added Data Entry Widgets and buttons to appear on
+ transaction rows.
+ * Removed tabbed data entry views at the bottom of the
+ transaction view.
+ * Added Balance Label to show the account's current balance
+ * The last transaction is now always visible when the transactions
+ are updated
+
+2001-03-13 Michael Edwardes <mte@users.sourceforge.net>
+ * Ran KFileReplace to change my email address because I won't
+ always be at university.
+ * Remove all #include <x.moc> from the source files.
+ * Updated project to install the ui file in the correct place.
+ * Cleaned up the startup code so the default colour settings aren't black on black.
+ * Changed addCredit to addAuthor in main.cpp.
+ * Project file 16x16 mimetype kmy icon changed to kmy not kmy2 in install options.
+ * Changed web address reference in main.cpp to kmymoney2.sourceforge.net.
+ * Updated README file.
+ * Removed some unused list items from the project.
+ * Added files to .cvsignore (make-ui.sh, *~)
+
+2001-03-11 Javier Campos Morales <javi@DarkStar>
+ * Insert new startuplogo
+
+2001-03-08 Javier Campos Morales <javi@DarkStar>
+ * Fixed kmymoney2 repository
+ * Remove compile.sh and mkui.sh
+ * Modify the project to complain with kdevelop 1.4
+ * Added directory icons with a few icons for the future
+ * Added readConfig and writeConfig to KStartDlg
+ * Delete KMyMoney2App::openDocumentFile(const KURL& ulr) - Method not used
+ * Added kstartdlg recent action. Now works.
+ * KMyMoney2App::slotFileOpen now open the start dialog.
+ * Fixed errors with compile.
+ * Added .cvsignore in all project.
diff --git a/ChangeLog.original b/ChangeLog.original
new file mode 100644
index 0000000..b78d043
--- /dev/null
+++ b/ChangeLog.original
@@ -0,0 +1,316 @@
+// This is a simple hand-edited ChangeLog noting changes/bug fixes to the code.
+// This is unedited and may sometimes contain documentation relevant only to me.
+// The list is kept in date order starting with the oldest. (e.g i append
+// the log to the list). The versions are newest first.
+// Michael
+0.3.2
+ Javier Campos Morales javi_c@ctv.es:
+ Modified the start dialog and added some new icons.
+ Modified the startup logo code and redone some of the pictures and icons.
+ Changed some of the the startup code in kmymoney2.cpp to reflect the new start dialog.
+ Modifed main.cpp to reflect new KDE 2 programming idioms.
+
+ Michael Edwardes mte@users.sourceforge.net
+ Modified the ui resource file to make the toolbar positioning better.
+ Started creating some basic documentation in textual form.
+ Each directory will soon have a readme-<something<.txt file containing
+ basic documentation for that particular directory. It is NOT an attempt
+ at user documentation!
+ Made the kmymoney2.desktop file work.
+ Removed the start dialog designer ui file from the project.
+ Remembered to remove the localised call to createGUI in kmymoney2.cpp:initActions()
+ Added the new developers names and emails where needed.
+ Made the tree ready for CVS and put it in the online repository.
+ Moved this file to Changelog.original so the developers can now use a real Changelog!
+
+0.3.1
+ Fixed the bank/account enabling in kmymoney2.cpp.
+ Cleaned up the dialogs a little, in respect to the tab orders.
+ Be aware that there are quite a few qDebug statements so expect some output whilst running.
+ Cleaned up the transaction engine a bit and changed the API (so MyMoneyFile knows nothing but it's
+ own banks).
+ Removed the accounts view and merged it into the banks view like gnu cash et al.
+ Fixed a majority of unknown bugs by making the transaction engine not use auto delete
+ in its linked lists. This may cause memory leakage but until I write my own/use STL then
+ the memory leakage will have to stay !.
+ Made the transaction engine comparison operators more flexible.
+ Moved the create new account menu option to the bank menu.
+ Changed the transaction view to use a QTable now and am getting ready to use in place editing.
+ Added the ability to let the user choose whether to view the input box. (Settings menu).
+ Each cell has it's own table item class with appropriate arguments/editors.
+ Cleaned up the transaction view code a bit and the class no longer requests updates
+ to its data, it does it itself using the supplied pointer(s).
+ Now using KDE 2.1beta2 and KDevelop 1.4 and nicked some icons etc from the newly generated
+ programs.
+ Cleaned up the bank/account/transaction/kmymoney views.
+ Each transaction really does have its own id now. Just an unsigned long for now.
+ The list views can no longer show user selected columns but they do respect the font and
+ colour settings. Small bug to be fixed in the background painting of the register view
+
+0.3.1-281200
+ MyMoneyMoney updated to be represented as a double.
+ New file format to save and read new MyMoneyMoney object.
+ Made the toString method add thousand and decimal separators.
+ BUG: MyMoneyMoney::toString returns garbage when showSign is true ???
+ The list views have been changed so that the user can't resize them.
+ Added extra arguments to MyMoneyMoney::toString (formatted: true if thousand separators
+ are to be included in the returned string.)
+ We now display dates and money according to the current locale. To change these settings
+ use the apprpriate KDE 2 dialog. (KMenu -> Preferences -> Personalisation -> Country & Language.)
+ Added a dialog to let the user choose the columns to be displayed, and to choose the fonts/colours.
+ Updated the list view code to read from the user variables. A couple of bugs exist.
+ The settings are now saved in the application config file. (KMainWnd::read/saveOptions).
+ Added a find dialog and added menu and toolbar items.
+ The find dialog now opens a new results window to display in, and now support
+ regular expressions in the description & number fields.
+ Cleaned up some of the reconciliation code and fixed a bug. It has also been fixed in
+ the stable 0.2 tree.
+ Added another program to the source tree and hand edited some Makefile.am's.
+ The new program is an applet that will dock on the task bar and monitor your
+ bills and deposits (when they are done !).
+ Tried to modify the configure stuff to support uic. Not trusted to work at this time, I cut and
+ pasted most of the stuff from kdelibs-1.94.
+ Converted the KNewBillWizard dialog to designer and all seems well. Will create all new
+ dialogs with designer now. The older, already implemented dialogs, will be converted
+ at some point in the future.
+ Added hacked versions of sizePolicy and sizeHint to kMyMoneyDateInput but they don't
+ really work properly.
+ Completely hand edited the kdevelop project file to compile the new code and to accomodate
+ the new admin directory. God knows if it will work on other machines, but it does
+ work on mine! PLEASE DO NOT USE KDEVELOP ON THIS PROJECT AS IT WILL PROBABLY OVERWRITE
+ ALL THE HAND EDITED FILES (KDEVELOP DOESN'T ON MINE BUT I CAN'T GUARANTEE IT FOR OTHER
+ MACHINES). -- I DON'T REALLY UNDERSTAND AUTOCONF ETC!!!
+ Added a caption to let the user know where they are at any time. Thanks to ...
+ Moved the list views over to KListView and am now using better ordering of the items.
+ Changed the API in the engine to be more robust and to disengage itself from external number ordering.
+ Added an index field to MyMoneyTransaction and removed MyMoneyTransactionE from KReconcileDlg.
+ KReconcileDlg is now implemented using designer, and the code has been modified to reflect this
+ and the code has been simplified.
+ Added == operators to the 'engine' classes.
+ Removed QdbtTabular completely from the source code. All lists now use the
+ KListView class.
+ Moved over to KDevelop 1.3 and am now using the new templates and admin directory.
+ Made all kdevelop dialogs into designer dialogs and they now look better and the tabs behave as expected.
+ Removed the dock applet from the source, I will release it once kmymoney2 becomes stable again. (most of
+ it isn't implemented anyway!).
+ If the build process fails try running the mk-ui.sh script in the kmymoney2 source directory first. (There
+ are some dependency problems on my machine ?).
+ Use the compile.sh script to build kmymoney2 from now on.
+ Completely removed all the kdevelop dialogs and turned them into designer dialogs.
+ Removed the Quick Start wizard and am thinking of a new interface to wizards/templates, maybe using some
+ kind of scripting so the user can add more if they want to.
+ More streamlining of the engine code to stop using QListIterators. All that needs to be done to
+ remove QT dependence from the transaction engine is to use something other than QString's and
+ QLists internally. Work will begin on a gnome interface once I have the KDE code working as expected...
+ This list is getting QUITE BIG so I have called this 0.3.1-281200 and have bundled it as a distribution.
+ Not too sure yet whether I'll stick it on the web, (depends if i can scp into sourceforge i suppose).
+
+0.2pre3 - 0.2 FINAL !
+ Added i18n where appropriate. Made some of the list view code more readable.
+ Tried to sort out the tab orders but KDevelop is awful in that respect. Most dialogs
+ work as expected but a couple have their quirks.
+ Added some toolbar buttons and enabled them in the code.
+ Added a picture to the start dialog.
+ Made the tabbed dialog use less screen estate. (The widgets are only 20
+ pixels high now instead of the default 30. This MAY make it slightly
+ harder to see. Mail me if you want the widgets returned to their
+ proper heights).
+
+0.2pre2 - 0.2pre3
+ This release fixes the 'bug' where I forgot to include the file opening/
+ saving code that uses KFileDialog::getOpenFileName instead of the hard link
+ to a file in my home directory.
+
+ When I try using the KFileDialog under KDE 1.1.2 it complains that dcopserver
+ isn't running and then load the server. When the program is finished I have
+ to manually kill dcopserver (and kdeinit) so I can get control back to
+ KDevelop.
+
+ By having the hard link to /home/mte/kmymoney2.kmy I can circumnavigate the
+ KFileDialog code rather than having to kill dcopserver every time I run the
+ program. (I tried running dcopserver from a startup script but it didn't
+ work.).
+
+ If anyone can help me on using KFileDialog within KDE 1.1.2 please email me
+ at mte@users.sourceforge.net.
+
+ (I use KDE 1.1.2 because I use KDevelop 1.2)
+
+ Any Help appreciated...
+ Michael.
+
+0.2pre1 - 0.2pre2
+ Fixed the KStartupLogo class to actually find the picture to display on startup.
+ Stopped using the DateInput class from calendar-0.13 and am now using my own widget, with
+ some code temporarily used from KDatePicker until that widget gets updated in KDE (if it
+ ever does, Iv'e mailed the maintainer requesting a change to the widgets code (16/08/00) ).
+ Made the register view show two different background colours depending upon position.
+ The colours will be user degined in a future version.
+ Made the register view list refreshment a little bit quicker. This will be looked at again
+ in a future version.
+ Removed all the labels from the *View dialogs and am now using QdbtTabulars to provide
+ column alignment for numbers etc.
+ Removed the *View dialogs and changed a little code in their previous files to reflect the
+ changes.
+ Made sure that ALL widgets resize properly.
+ When adding a transaction and refreshing the transaction list the last transaction is shown
+ at the bottom so the user does not have to scroll.
+ Changed the Reconciliation dialog to show the new colours and bordering.
+ Fixed bug in reconciliation dialog where the current date was written where it should have
+ been the ending date.
+ Cleaned up the reconciliation code and it now works ! (hopefully).
+
+// Below is from an 'attic' type directory I kept whilst developing KMyMoney2. They are not always
+useful and sometimes errenous, but I have decided to integrate them purely for completeness.
+
+0.2pre1
+ Removed QdbtTabular from the source tree and we are now using
+ a shared library.
+ Added a KPayeeDlg class & dialog.
+ Added a KReconcileDlg class & dialog.
+ Added a KEndingBalanceDlg class & dialog.
+ Removed kdbMoneyEdit from the source tree and am now using my own class (kMyMoneyEdit).
+ Extensive API changes to MyMoneyMoney.
+ Copy constructors and assignment operators added to all the mymoney classes.
+ Quite a few changes to the mymoney classes actually, (added consts, &'s, removed a few methods etc).
+ Switched to KDE2 Beta3 and QT2.2.0 beta0 (qt-copy-1.92).
+ Changed the main window from KTMainWindow to KMainWindow and changed some affected code.
+ Added income/expense support to categories and changed dialog and list view code to reflect these changes.
+ Added a KNewCategoryDlg to edit the categories from KCategoriesDlg.
+ Added code to load standard categories when a new file is created. The data is loaded from
+ $KDEDIR/share/apps/kmymoney2/default_categories.dat and the original is located in the source
+ tree (./kmymoney2/default_categories.dat).
+ We now prompt for the user to edit the categories when they are input into the editor.
+ (This will be optional soon).
+ The number field of MyMoneyTransaction has been changed to a string and all affected code has been modified.
+ Removed (most of) the signed/unsigned comparison warnings.
+ Almost reached a usable version with reconciliation now working.
+ Made this release available on the web as almost 0.2 (stable).
+
+180700
+ Added a KQuickStartWizard class and an appropriate menu.
+ Made KQuickStartWizard class work.
+ Added a KStartDlg as a first contact for the user.
+ Added an xpm for KStartDlg that represents the above mentioned wizard.
+ Added a dialog to edit categories and sub categories. (KCategoriesDlg class).
+ Added a new KCategoryListItem to support KCategoriesDlg.
+ Made the tabbed input box 'remember' the major and minor categories.
+ I have hidden the split button until I think I need it or someone e-mails
+ asking to implement split transactions.
+ Completed the KCategoryDlg editor class - apart from some interface issues.
+ Fixed a long standing bug in MyMoneyMoney.
+ Added a start balance to new account - should have been there a long time ago !
+ Updated file format to include password and encryption fields (not used
+yet).
+ Added a payToList to the file format.
+
+050700
+ Release for the web.
+ Started to make the interface work better.
+ Fixed loads of bugs.
+ Updated the web page.
+ Added new screen shots section to the web page.
+
+230600
+ When the user selects an atm bank the description field is automatically updated for them.
+ The banks list is now user specified and can be added by typing the new name in the appropriate
+ combo box.
+ Changed editFrame to a tabbed input box to resemble MS-MONEY.
+ Added first steps to create account balancing.
+ Changed from for to category and changed all relevant code.
+ Started to make the tabbed input box work.
+ File format is well fucked up.
+ Tried to get the file format working again.
+ Removed the option to set the sort type and removed all respective code.
+ Added calendar-0.12 into the source tree rather than create my own DateValidator.
+ Changed code to use this new widget.
+ See kmymoney2/calendar/README for more information.
+ Removed QSplitter stuff and moved the three lists into their own widgets.
+ Added a main widget to control the list view widgets.
+ Added some more controls to the lists view widgets.
+ Added the tabbed input box to the transaction widget.
+ Removed some extranous code.
+ Fixed up KGeneric transaction to display data in labels when not editing like ms-money.
+ Started making the interface look like it will do in version 1. (Most of it prints
+ a message saying that it isn't working yet !).
+ Removed calendar-0.12 from the source tree. You now need to install this prior to compiling.
+ Added a new tabbed widget to control the different aspects of KMyMoney2. The Main widget ((KMainView)
+ is now one of the tabs (Accounts).
+ Cleaned up KMainWnd (the class inherited from KTMainWindow) and it is now lean and clean.
+
+ NOTHING WORKS AT THE MOMENT.
+
+080600
+ Changed the order and number of fields shown in transactionList.
+ First attempt at fixing bugs in the list selection code.
+ Fixed a couple of bugs in MyMoneyTransaction to fix the money represented as strings.
+ Added ability to view balance at any time in the transactionList.
+ Fixed up some code in the list viewing code.
+ Made KDevelop 1.2 recognise some dialogs by hand editing the kmymoney2.kdevprj file.
+ Cleaned up some of the dialogs.
+ Added new variables to MyMoneyAccount and MyMoneyBank - FILE FORMAT IS NOW BROKEN.
+ Updated dialogs to edit the new variables added above.
+ File format now includes the new variables. Old versions can't be read anymore.
+ Added ability to right click on the transaction box to create a new transaction.
+ Added ATM type to methods of transactions. Updated file format again.
+
+
+040600
+ Added a settings dialog but it doesn't do much at the moment.
+
+ I considered this stable enough so I entered all my past transactions
+ and found about a million different bugs/wishlists, so I am now
+ going to implement them all for the next release. (A list can be found
+ in TODO in the distribution.)
+
+ NOT been released on web page.
+
+020600
+ Removed automatic list view updating and replaced with right click option
+ 'view contents'.
+ Added ability to track access/modify dates.
+ Updated file format to reflect new variables.
+
+ NOT been released on web page.
+
+010600
+ Removed second toolbar, focus stuff, operation stuff.
+ Added ability to right click on the list views.
+ List views hide/show themselves appropriately.
+ Removed toolbar pixmaps; edit, new, delete and the small logo.
+
+ NOT been released on web page.
+
+220500
+ Some more bugs fixed and introduced !. This is a file release for the
+ web.
+
+170500
+ Fixed a few bugs in the file reading/opening code.
+
+ Removed the KQuickViewDlg class and all the bank selection code.
+
+ This is just another interim release before major structural changes
+ made to the code - again.
+
+160500
+ Reimplemented the file opening/saving code using QDataStream's and fixed
+ a few bugs.
+
+140500
+ Moved the MyMoney* classes to it's own sub-dir and now uses a library.
+
+130500
+ Finished converting MyMoney*.
+
+090500
+ First steps in making MyMoney* ready for a shared library. This
+ version WON'T compile due to undefined methods and KMainWnd
+ not using the new methods.
+
+060500
+ Just added the MyMoneyBank class and added rudimentary support for
+ it in the code. Added a BankListView class as well to show the
+ banks.
+
+// No history before this point (Thanks to a lovely disk crash).
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..451b25a
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,169 @@
+Please see the README file for requirements to compile KMyMoney2.
+
+Basic Installation
+==================
+
+ These are generic installation instructions.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, a file
+`config.cache' that saves the results of its tests to speed up
+reconfiguring, and a file `config.log' containing compiler output
+(useful mainly for debugging `configure').
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If at some point `config.cache'
+contains results you don't want to keep, you may remove or edit it.
+
+ The file `configure.in' is used to create `configure' by a program
+called `autoconf'. You only need `configure.in' if you want to change
+it or regenerate `configure' using a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system. If you're
+ using `csh' on an old version of System V, you might need to type
+ `sh ./configure' instead to prevent `csh' from trying to execute
+ `configure' itself.
+
+ Running `configure' takes a while. While running, it prints some
+ messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Type `make install' to install the programs and any data files and
+ documentation.
+
+ 4. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'.
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. You can give `configure'
+initial values for variables by setting them in the environment. Using
+a Bourne-compatible shell, you can do that on the command line like
+this:
+ CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+
+Or on systems that have the `env' program, you can do it like this:
+ env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+ If you have to use a `make' that does not supports the `VPATH'
+variable, you have to compile the package for one architecture at a time
+in the source code directory. After you have installed the package for
+one architecture, use `make distclean' before reconfiguring for another
+architecture.
+
+Installation Names
+==================
+
+ By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc. You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PATH'.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+give `configure' the option `--exec-prefix=PATH', the package will use
+PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+ Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+ There may be some features `configure' can not figure out
+automatically, but needs to determine by the type of host the package
+will run on. Usually `configure' can figure that out, but if it prints
+a message saying it can not guess the host type, give it the
+`--host=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name with three fields:
+ CPU-COMPANY-SYSTEM
+
+See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the host type.
+
+ If you are building compiler tools for cross-compiling, you can also
+use the `--target=TYPE' option to select the type of system they will
+produce code for and the `--build=TYPE' option to select the type of
+system on which you are compiling the package.
+
+Sharing Defaults
+================
+
+ If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Operation Controls
+==================
+
+ `configure' recognizes the following options to control how it
+operates.
+
+`--cache-file=FILE'
+ Use and save the results of the tests in FILE instead of
+ `./config.cache'. Set FILE to `/dev/null' to disable caching, for
+ debugging `configure'.
+
+`--help'
+ Print a summary of the options to `configure', and exit.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made.
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`--version'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`configure' also accepts some other, not widely useful, options.
+
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..6ad9abe
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,68 @@
+####### kdevelop will overwrite this part!!! (begin)##########
+
+# just make sure, we don't ship the sqlite subdirectory with the tarball
+SOURCEDIRS = libkgpgfile libkdchart kmymoney2 po doc developer-doc
+SUBDIRS = @SQLITE3@ $(SOURCEDIRS)
+DIST_SUBDIRS = $(SOURCEDIRS) contrib
+
+EXTRA_DIST = AUTHORS COPYING ChangeLog INSTALL README TODO ChangeLog.original configure.in.in configure.in.bot README.Fileformats stamp-h1 subdirs inst-apps 23011-qt-sqlite3-0.2.tar.gz
+
+noinst_HEADERS = kdecompat.h
+
+####### kdevelop will overwrite this part!!! (end)############
+# not a GNU package. You can remove this line, if
+# have all needed files, that a GNU package needs
+AUTOMAKE_OPTIONS = foreign
+KDE_OPTIONS = noautodist
+
+$(top_srcdir)/configure.in: configure.in.in $(top_srcdir)/subdirs
+ cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common configure.in ;
+
+$(top_srcdir)/subdirs:
+ cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common subdirs
+
+ADDITIONAL_CHECKS=`ls *.m4 | grep -v acinclude\.m4 | grep -v aclocal\.m4`
+
+$(top_srcdir)/acinclude.m4: $(top_srcdir)/admin/acinclude.m4.in $(top_srcdir)/admin/libtool.m4.in
+ @cd $(top_srcdir) && cat admin/acinclude.m4.in admin/libtool.m4.in > acinclude.m4
+ @for i in $(ADDITIONAL_CHECKS); do \
+ cat $$i >> acinclude.m4; \
+ done
+
+distclean-local:
+ if test "x@SQLITE3@" != "x"; then \
+ rm -rf @SQLITE3@; \
+ fi
+
+DISTCLEANFILES=kmymoney2.kdevses kmymoney2-*.tar.gz
+MAINTAINERCLEANFILES = subdirs configure.in acinclude.m4 configure.files
+
+.PHONY: check-vpath-environment
+check-vpath-environment:
+ @if test "x$(top_srcdir)x" != "x$(top_builddir)x"; then \
+ echo "Packaging messages does not work in VPATH environment!"; \
+ exit 1; \
+ fi;
+
+# we use our own version of extractrc if not otherwise specified
+export EXTRACTRC ?= $(PWD)/admin/extractrc
+
+generate-messages: check-vpath-environment
+ find . -name rc.cpp -exec rm {} \;
+ $(MAKE) -C $(top_srcdir) -f admin/Makefile.common package-messages XGETTEXT=$(XGETTEXT)
+ find . -name rc.cpp -exec rm {} \;
+ @if test `grep '"_: ' po/kmymoney2.pot | grep -v TRANSLATORS | wc -l` -eq 0; then echo -e "It seems that context i18n's are not translated correctly.\n'$(XGETTEXT)' has been used for translation."; exit 1; fi;
+
+package-messages:
+ $(MAKE) generate-messages
+ $(MAKE) merge-messages
+
+merge-messages: check-vpath-environment
+ $(MAKE) -C $(top_srcdir)/po merge
+
+fullcheck:
+ DISTCHECK_CONFIGURE_FLAGS="--enable-ofxbanking --enable-ofxplugin" $(MAKE) distcheck
+
+# The following line adds the required admin files
+EXTRA_DIST += admin/Makefile.common admin/cvs.sh admin/detect-autoconf.pl admin/acinclude.m4.in admin/conf.change.pl admin/config.pl admin/libtool.m4.in admin/configure.in.min admin/configure.in.bot.end admin/am_edit admin/debianrules admin/fixuifiles admin/extractrc
+
diff --git a/README b/README
new file mode 100644
index 0000000..41f9389
--- /dev/null
+++ b/README
@@ -0,0 +1,171 @@
+KMyMoney (covered by the GNU license - see COPYING)
+
+If you need some more information, please make sure to visit the projects
+homepage at http://kmymoney2.sourceforge.net/ A lot of information is
+found there.
+
+KMyMoney is a true KDE application and therefor requires the KDE as well as
+QT libraries. If you want to compile the application yourself, you have to
+make sure to have the development relevant parts (include files, link
+libraries) of these two projects. KMyMoney is based on min QT 3.2
+and KDE 3.2
+
+---------------------------------
+Prior to installation
+---------------------------------
+
+To compile, you will need the development headers for KDE libs and all additional
+you install (libofx, aqbanking, etc)
+Also, you will need the compile tools. This includes make and gcc
+
+Example for K/Ubuntu:
+
+sudo apt-get install kdelibs4-dev build-essential
+
+---------------------------------
+Compiling and installing KMyMoney
+---------------------------------
+
+1a) If you got the sources from CVS you will need to type:
+
+ make -f Makefile.dist
+
+ before you proceed. If you installed from a source tar-ball, you
+ don't have to run this command.
+
+1b) If you got the sources from a tar-ball you will need to type:
+
+ tar -xvjf kmymoney2-[version].tar.bz2 or
+ tar -xvzf kmymoney2-[version].tar.gz
+
+ depending if the packages was made with bzip2 or gzip compression.
+ Change into the directory with
+
+ cd kmymoney2-[version]
+
+
+The following steps have to be performed no matter where you got the source
+from.
+
+2) Run configure to tell the project about your local environment
+
+ ./configure --with-qt-dir=[your location of qt3] \
+ --prefix=[your location of kde3]
+
+ Debian/Ubuntu/Kubuntu/... users have to prepend the call to
+ configure with a variable setting to be able to view the online
+ manual from within the application. If you have such a system,
+ please use the following command syntax:
+
+ kde_htmldir=/usr/share/doc/kde/HTML ./configure ---with....
+
+ Below, please find a table of values for the above for several
+ distributions:
+
+ Distribution | --with-qt-dir | --prefix
+ ------------------+-------------------------+---------------------------
+ SuSE >= 8.1 | omit this parameter | ommit this parameter
+ Mandrake 9.0 | omit this parameter | /usr
+ Slackware >= 9.0 | omit this parameter | /opt/kde
+ MEPIS | omit this parameter | /usr
+ RedHat 8/9 | omit this parameter | /usr
+ Fedora 1/2 | omit this parameter | /usr
+ Mandriva 2006 | omit this parameter | /usr
+ Debian | omit this parameter | omit this parameter
+ K/X/Ubuntu | omit this parameter | omit this parameter
+
+ so for SuSE 9.1 the command is:
+
+ ./configure --mandir=/usr/share/man
+
+ and for Debian/Ubuntu the command is:
+
+ kde_htmldir=/usr/share/doc/kde/HTML ./configure
+
+ Please tell us the values for other distributions, so we can add
+ them to this list. Send an e-mail to the developers mailing list.
+ See the address below.
+
+3) Build the package by issuing the following command:
+
+ make
+
+4) Gain root permissions to install the application
+
+ Type the command
+
+ su
+
+ and provide the necessary password to become 'root'.
+
+ (You can skip this step and step 6 if your distribution uses sudo, and just prefix
+ sudo the command in the next step. eg, sudo make install)
+
+5) Install the application
+
+ Run the command
+
+ make install
+
+ to populate the directories in the KDE directory tree.
+
+6) Revert to normal user
+
+ Type
+
+ exit
+
+ to become the normal user again. This concludes the installation
+ process of KMyMoney.
+
+
+
+
+
+Please read INSTALL for generic instructions on how to use configure.
+
+AND/OR
+
+Get KDevelop and use the supplied kmymoney2.kdevprj located in the
+base directory. For more information on KDevelop please visit
+http://www.kdevelop.org.
+
+---------------------------------
+More documentation
+---------------------------------
+
+There are several other pieces of information. For some information
+about the file handling and the various supported formats as well
+as an introduction on howto encrypt your financial files, please
+see the README.Fileformats file.
+
+If you are interested on the rules we have for this project, please
+feel free to read the project handbook at
+
+ http://kmymoney2.sourceforge.net/phb/index.html
+
+And for the really brave there's the source ...
+
+---------------------------------
+Final comments
+---------------------------------
+
+If you find this program useful in any way or wish to contribute please
+send an email to the developers list at
+
+ kmymoney2-developer@lists.sourceforge.net
+
+Source and binary packages for the latest stable version of KMyMoney
+can always be found at
+
+ http://sourceforge.net/project/showfiles.php?group_id=4708
+
+and the CVS versions are available at
+
+ cvs.kmymoney2.sourceforge.net:/cvsroot/kmymoney2 module kmymoney2
+
+via anonymous CVS access using the pserver protocol.
+
+For more information on the CVS interface, FTP interface or WEB interface,
+please see the wonderful http://sourceforge.net or the projects homepage
+at http://kmymoney2.sourceforge.net.
diff --git a/README.Fileformats b/README.Fileformats
new file mode 100644
index 0000000..feca40a
--- /dev/null
+++ b/README.Fileformats
@@ -0,0 +1,81 @@
+KMyMoney README.Encryption
+Author: Thomas Baumgart
+Date : Jan 01 2005
+
+This README covers the various data formats used to store the information
+managed with KMyMoney.
+
+-----------------------------------------------------------------------------
+Data storage
+-----------------------------------------------------------------------------
+
+KMyMoney stores your financial data in it's XML format. In general, files are
+compressed using the GZIP format. Thus the resulting file is not directly
+readable but can be made readable by the following commands:
+
+ % mv xxx.kmy xxx.kmy.gz
+ % gunzip xxx.kmy.gz
+
+Now xxx.kmy is a readable XML file. There is no need to compress the file
+again before you start KMyMoney again, because KMyMoney also reads the
+uncompressed format. Please expect the file to be compressed again after
+you save the file again from within the application.
+
+Warning: Do not modify the XML data directly unless you know exactly all
+the implications! Don't blame it on the KMyMoney developers if something
+does not work anymore after you've changed the file. In any case, keep
+a good backup of your files.
+
+-----------------------------------------------------------------------------
+Encrypting your data to hide your financial status
+-----------------------------------------------------------------------------
+
+If you want to save your data in a true encrypted fashion, you can use one of
+the many encrypted filesystems to store your data or use the builtin GPG
+support of KMyMoney.
+
+In order to use this support, you have to have GPG installed and working
+on your system for a key-pair you own. You can verify this by running
+the following test:
+
+ % echo "This is a test" | gpg -ae -r <your-key-id-here> | gpg
+
+This should ask you for the passphrase of your secret key and display
+"This is a test" on the screen. Here's how this looks for me:
+
+----------------------------------------------------------------------
+ thb@linux:~> echo "This is a test" | gpg -ae -r 0xb75dd3ba | gpg
+ gpg: checking the trustdb
+ gpg: checking at depth 0 signed=7 ot(-/q/n/m/f/u)=0/0/0/0/0/2
+ gpg: checking at depth 1 signed=1 ot(-/q/n/m/f/u)=6/0/0/0/1/0
+ gpg: next trustdb check due at 2010-01-02
+ gpg: 0xb75dd3ba: skipped: public key already present
+
+ You need a passphrase to unlock the secret key for
+ user: "Thomas Baumgart <thb@net-bembel.de>"
+ 1024-bit ELG-E key, ID D1F83C2B, created 2001-06-23 (main key ID B75DD3BA)
+
+ gpg: encrypted with 1024-bit ELG-E key, ID D1F83C2B, created 2001-06-23
+ "Thomas Baumgart <thb@net-bembel.de>"
+ This is a test
+ thb@linux:~>
+----------------------------------------------------------------------
+
+If this works for you, then you can turn on GPG support in the KMyMoney
+settings dialog. In the user id field, enter the respective information
+about to find the key. The LED symbol to the right of the key will tell
+you if a key is present for the data you entered. Note: Also substrings
+would match. Thus entering only 'thb' in my case already turns on the
+LED. Therefore, you should enter the full e-mail address or the hexadecimal
+id with a leading 0x.
+
+This would be enough to store your data encrypted with GPG. When you open
+such a file with KMyMoney it will ask you for a passphrase.i
+
+In case you use gpg-agent in the background, you will be only asked the
+first time you open the file and then only again after the cache timeout
+specified within gpg-agent. See the GPG documentation for more details on
+howto setup the gpg-agent. If you don't use the gpg-agent, you will be asked
+everytime you load an encrypted file into the engine. Saving into an
+encrypted file does not need a passphrase.
+
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..305422d
--- /dev/null
+++ b/TODO
@@ -0,0 +1,4 @@
+This file kept here for compatibility reasons. Please check the
+projects website at http://kmymoney2.sourceforge.net and the respective
+project management page at http://sourceforge.net/projects/kmymoney2
+for more details.
diff --git a/acinclude.m4 b/acinclude.m4
new file mode 100644
index 0000000..35829b0
--- /dev/null
+++ b/acinclude.m4
@@ -0,0 +1,12224 @@
+## -*- autoconf -*-
+
+dnl This file is part of the KDE libraries/packages
+dnl Copyright (C) 1997 Janos Farkas (chexum@shadow.banki.hu)
+dnl (C) 1997,98,99 Stephan Kulow (coolo@kde.org)
+
+dnl This file is free software; you can redistribute it and/or
+dnl modify it under the terms of the GNU Library General Public
+dnl License as published by the Free Software Foundation; either
+dnl version 2 of the License, or (at your option) any later version.
+
+dnl This library is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+dnl Library General Public License for more details.
+
+dnl You should have received a copy of the GNU Library General Public License
+dnl along with this library; see the file COPYING.LIB. If not, write to
+dnl the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+dnl Boston, MA 02110-1301, USA.
+
+dnl IMPORTANT NOTE:
+dnl Please do not modify this file unless you expect your modifications to be
+dnl carried into every other module in the repository.
+dnl
+dnl Single-module modifications are best placed in configure.in for kdelibs
+dnl and kdebase or configure.in.in if present.
+
+# KDE_PATH_X_DIRECT
+dnl Internal subroutine of AC_PATH_X.
+dnl Set ac_x_includes and/or ac_x_libraries.
+AC_DEFUN([KDE_PATH_X_DIRECT],
+[
+AC_REQUIRE([KDE_CHECK_LIB64])
+
+if test "$ac_x_includes" = NO; then
+ # Guess where to find include files, by looking for this one X11 .h file.
+ test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h
+
+ # First, try using that file with no special directory specified.
+AC_TRY_CPP([#include <$x_direct_test_include>],
+[# We can compile using X headers with no special include directory.
+ac_x_includes=],
+[# Look for the header file in a standard set of common directories.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+ for ac_dir in \
+ /usr/X11/include \
+ /usr/X11R6/include \
+ /usr/X11R5/include \
+ /usr/X11R4/include \
+ \
+ /usr/include/X11 \
+ /usr/include/X11R6 \
+ /usr/include/X11R5 \
+ /usr/include/X11R4 \
+ \
+ /usr/local/X11/include \
+ /usr/local/X11R6/include \
+ /usr/local/X11R5/include \
+ /usr/local/X11R4/include \
+ \
+ /usr/local/include/X11 \
+ /usr/local/include/X11R6 \
+ /usr/local/include/X11R5 \
+ /usr/local/include/X11R4 \
+ \
+ /usr/X386/include \
+ /usr/x386/include \
+ /usr/XFree86/include/X11 \
+ \
+ /usr/include \
+ /usr/local/include \
+ /usr/unsupported/include \
+ /usr/athena/include \
+ /usr/local/x11r5/include \
+ /usr/lpp/Xamples/include \
+ \
+ /usr/openwin/include \
+ /usr/openwin/share/include \
+ ; \
+ do
+ if test -r "$ac_dir/$x_direct_test_include"; then
+ ac_x_includes=$ac_dir
+ break
+ fi
+ done])
+fi # $ac_x_includes = NO
+
+if test "$ac_x_libraries" = NO; then
+ # Check for the libraries.
+
+ test -z "$x_direct_test_library" && x_direct_test_library=Xt
+ test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc
+
+ # See if we find them without any special options.
+ # Don't add to $LIBS permanently.
+ ac_save_LIBS="$LIBS"
+ LIBS="-l$x_direct_test_library $LIBS"
+AC_TRY_LINK([#include <X11/Intrinsic.h>], [${x_direct_test_function}(1)],
+[LIBS="$ac_save_LIBS"
+# We can link X programs with no special library path.
+ac_x_libraries=],
+[LIBS="$ac_save_LIBS"
+# First see if replacing the include by lib works.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+for ac_dir in `echo "$ac_x_includes" | sed s/include/lib${kdelibsuff}/` \
+ /usr/X11/lib${kdelibsuff} \
+ /usr/X11R6/lib${kdelibsuff} \
+ /usr/X11R5/lib${kdelibsuff} \
+ /usr/X11R4/lib${kdelibsuff} \
+ \
+ /usr/lib${kdelibsuff}/X11 \
+ /usr/lib${kdelibsuff}/X11R6 \
+ /usr/lib${kdelibsuff}/X11R5 \
+ /usr/lib${kdelibsuff}/X11R4 \
+ \
+ /usr/local/X11/lib${kdelibsuff} \
+ /usr/local/X11R6/lib${kdelibsuff} \
+ /usr/local/X11R5/lib${kdelibsuff} \
+ /usr/local/X11R4/lib${kdelibsuff} \
+ \
+ /usr/local/lib${kdelibsuff}/X11 \
+ /usr/local/lib${kdelibsuff}/X11R6 \
+ /usr/local/lib${kdelibsuff}/X11R5 \
+ /usr/local/lib${kdelibsuff}/X11R4 \
+ \
+ /usr/X386/lib${kdelibsuff} \
+ /usr/x386/lib${kdelibsuff} \
+ /usr/XFree86/lib${kdelibsuff}/X11 \
+ \
+ /usr/lib${kdelibsuff} \
+ /usr/local/lib${kdelibsuff} \
+ /usr/unsupported/lib${kdelibsuff} \
+ /usr/athena/lib${kdelibsuff} \
+ /usr/local/x11r5/lib${kdelibsuff} \
+ /usr/lpp/Xamples/lib${kdelibsuff} \
+ /lib/usr/lib${kdelibsuff}/X11 \
+ \
+ /usr/openwin/lib${kdelibsuff} \
+ /usr/openwin/share/lib${kdelibsuff} \
+ ; \
+do
+dnl Don't even attempt the hair of trying to link an X program!
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/lib${x_direct_test_library}.$ac_extension; then
+ ac_x_libraries=$ac_dir
+ break 2
+ fi
+ done
+done])
+fi # $ac_x_libraries = NO
+])
+
+
+dnl ------------------------------------------------------------------------
+dnl Find a file (or one of more files in a list of dirs)
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([AC_FIND_FILE],
+[
+$3=NO
+for i in $2;
+do
+ for j in $1;
+ do
+ echo "configure: __oline__: $i/$j" >&AC_FD_CC
+ if test -r "$i/$j"; then
+ echo "taking that" >&AC_FD_CC
+ $3=$i
+ break 2
+ fi
+ done
+done
+])
+
+dnl KDE_FIND_PATH(program-name, variable-name, list-of-dirs,
+dnl if-not-found, test-parameter, prepend-path)
+dnl
+dnl Look for program-name in list-of-dirs+$PATH.
+dnl If prepend-path is set, look in $PATH+list-of-dirs instead.
+dnl If found, $variable-name is set. If not, if-not-found is evaluated.
+dnl test-parameter: if set, the program is executed with this arg,
+dnl and only a successful exit code is required.
+AC_DEFUN([KDE_FIND_PATH],
+[
+ AC_MSG_CHECKING([for $1])
+ if test -n "$$2"; then
+ kde_cv_path="$$2";
+ else
+ kde_cache=`echo $1 | sed 'y%./+-%__p_%'`
+
+ AC_CACHE_VAL(kde_cv_path_$kde_cache,
+ [
+ kde_cv_path="NONE"
+ kde_save_IFS=$IFS
+ IFS=':'
+ dirs=""
+ for dir in $PATH; do
+ dirs="$dirs $dir"
+ done
+ if test -z "$6"; then dnl Append dirs in PATH (default)
+ dirs="$3 $dirs"
+ else dnl Prepend dirs in PATH (if 6th arg is set)
+ dirs="$dirs $3"
+ fi
+ IFS=$kde_save_IFS
+
+ for dir in $dirs; do
+ if test -x "$dir/$1"; then
+ if test -n "$5"
+ then
+ evalstr="$dir/$1 $5 2>&1 "
+ if eval $evalstr; then
+ kde_cv_path="$dir/$1"
+ break
+ fi
+ else
+ kde_cv_path="$dir/$1"
+ break
+ fi
+ fi
+ done
+
+ eval "kde_cv_path_$kde_cache=$kde_cv_path"
+
+ ])
+
+ eval "kde_cv_path=\"`echo '$kde_cv_path_'$kde_cache`\""
+
+ fi
+
+ if test -z "$kde_cv_path" || test "$kde_cv_path" = NONE; then
+ AC_MSG_RESULT(not found)
+ $4
+ else
+ AC_MSG_RESULT($kde_cv_path)
+ $2=$kde_cv_path
+
+ fi
+])
+
+AC_DEFUN([KDE_MOC_ERROR_MESSAGE],
+[
+ AC_MSG_ERROR([No Qt meta object compiler (moc) found!
+Please check whether you installed Qt correctly.
+You need to have a running moc binary.
+configure tried to run $ac_cv_path_moc and the test didn't
+succeed. If configure shouldn't have tried this one, set
+the environment variable MOC to the right one before running
+configure.
+])
+])
+
+AC_DEFUN([KDE_UIC_ERROR_MESSAGE],
+[
+ AC_MSG_WARN([No Qt ui compiler (uic) found!
+Please check whether you installed Qt correctly.
+You need to have a running uic binary.
+configure tried to run $ac_cv_path_uic and the test didn't
+succeed. If configure shouldn't have tried this one, set
+the environment variable UIC to the right one before running
+configure.
+])
+])
+
+
+AC_DEFUN([KDE_CHECK_UIC_FLAG],
+[
+ AC_MSG_CHECKING([whether uic supports -$1 ])
+ kde_cache=`echo $1 | sed 'y% .=/+-%____p_%'`
+ AC_CACHE_VAL(kde_cv_prog_uic_$kde_cache,
+ [
+ cat >conftest.ui <<EOT
+ <!DOCTYPE UI><UI version="3" stdsetdef="1"></UI>
+EOT
+ ac_uic_testrun="$UIC_PATH -$1 $2 conftest.ui >/dev/null"
+ if AC_TRY_EVAL(ac_uic_testrun); then
+ eval "kde_cv_prog_uic_$kde_cache=yes"
+ else
+ eval "kde_cv_prog_uic_$kde_cache=no"
+ fi
+ rm -f conftest*
+ ])
+
+ if eval "test \"`echo '$kde_cv_prog_uic_'$kde_cache`\" = yes"; then
+ AC_MSG_RESULT([yes])
+ :
+ $3
+ else
+ AC_MSG_RESULT([no])
+ :
+ $4
+ fi
+])
+
+
+dnl ------------------------------------------------------------------------
+dnl Find the meta object compiler and the ui compiler in the PATH,
+dnl in $QTDIR/bin, and some more usual places
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([AC_PATH_QT_MOC_UIC],
+[
+ AC_REQUIRE([KDE_CHECK_PERL])
+ qt_bindirs=""
+ for dir in $kde_qt_dirs; do
+ qt_bindirs="$qt_bindirs $dir/bin $dir/src/moc"
+ done
+ qt_bindirs="$qt_bindirs /usr/bin /usr/X11R6/bin /usr/local/qt/bin"
+ if test ! "$ac_qt_bindir" = "NO"; then
+ qt_bindirs="$ac_qt_bindir $qt_bindirs"
+ fi
+
+ KDE_FIND_PATH(moc, MOC, [$qt_bindirs], [KDE_MOC_ERROR_MESSAGE])
+ if test -z "$UIC_NOT_NEEDED"; then
+ KDE_FIND_PATH(uic, UIC_PATH, [$qt_bindirs], [UIC_PATH=""])
+ if test -z "$UIC_PATH" ; then
+ KDE_UIC_ERROR_MESSAGE
+ exit 1
+ else
+ UIC=$UIC_PATH
+
+ if test $kde_qtver = 3; then
+ KDE_CHECK_UIC_FLAG(L,[/nonexistent],ac_uic_supports_libpath=yes,ac_uic_supports_libpath=no)
+ KDE_CHECK_UIC_FLAG(nounload,,ac_uic_supports_nounload=yes,ac_uic_supports_nounload=no)
+
+ if test x$ac_uic_supports_libpath = xyes; then
+ UIC="$UIC -L \$(kde_widgetdir)"
+ fi
+ if test x$ac_uic_supports_nounload = xyes; then
+ UIC="$UIC -nounload"
+ fi
+ fi
+ fi
+ else
+ UIC="echo uic not available: "
+ fi
+
+ AC_SUBST(MOC)
+ AC_SUBST(UIC)
+
+ UIC_TR="i18n"
+ if test $kde_qtver = 3; then
+ UIC_TR="tr2i18n"
+ fi
+
+ AC_SUBST(UIC_TR)
+])
+
+AC_DEFUN([KDE_1_CHECK_PATHS],
+[
+ KDE_1_CHECK_PATH_HEADERS
+
+ KDE_TEST_RPATH=
+
+ if test -n "$USE_RPATH"; then
+
+ if test -n "$kde_libraries"; then
+ KDE_TEST_RPATH="-R $kde_libraries"
+ fi
+
+ if test -n "$qt_libraries"; then
+ KDE_TEST_RPATH="$KDE_TEST_RPATH -R $qt_libraries"
+ fi
+
+ if test -n "$x_libraries"; then
+ KDE_TEST_RPATH="$KDE_TEST_RPATH -R $x_libraries"
+ fi
+
+ KDE_TEST_RPATH="$KDE_TEST_RPATH $KDE_EXTRA_RPATH"
+ fi
+
+AC_MSG_CHECKING([for KDE libraries installed])
+ac_link='$LIBTOOL_SHELL --silent --mode=link ${CXX-g++} -o conftest $CXXFLAGS $all_includes $CPPFLAGS $LDFLAGS $all_libraries conftest.$ac_ext $LIBS -lkdecore $LIBQT $KDE_TEST_RPATH 1>&5'
+
+if AC_TRY_EVAL(ac_link) && test -s conftest; then
+ AC_MSG_RESULT(yes)
+else
+ AC_MSG_ERROR([your system fails at linking a small KDE application!
+Check, if your compiler is installed correctly and if you have used the
+same compiler to compile Qt and kdelibs as you did use now.
+For more details about this problem, look at the end of config.log.])
+fi
+
+if eval `KDEDIR= ./conftest 2>&5`; then
+ kde_result=done
+else
+ kde_result=problems
+fi
+
+KDEDIR= ./conftest 2> /dev/null >&5 # make an echo for config.log
+kde_have_all_paths=yes
+
+KDE_SET_PATHS($kde_result)
+
+])
+
+AC_DEFUN([KDE_SET_PATHS],
+[
+ kde_cv_all_paths="kde_have_all_paths=\"yes\" \
+ kde_htmldir=\"$kde_htmldir\" \
+ kde_appsdir=\"$kde_appsdir\" \
+ kde_icondir=\"$kde_icondir\" \
+ kde_sounddir=\"$kde_sounddir\" \
+ kde_datadir=\"$kde_datadir\" \
+ kde_locale=\"$kde_locale\" \
+ kde_cgidir=\"$kde_cgidir\" \
+ kde_confdir=\"$kde_confdir\" \
+ kde_kcfgdir=\"$kde_kcfgdir\" \
+ kde_mimedir=\"$kde_mimedir\" \
+ kde_toolbardir=\"$kde_toolbardir\" \
+ kde_wallpaperdir=\"$kde_wallpaperdir\" \
+ kde_templatesdir=\"$kde_templatesdir\" \
+ kde_bindir=\"$kde_bindir\" \
+ kde_servicesdir=\"$kde_servicesdir\" \
+ kde_servicetypesdir=\"$kde_servicetypesdir\" \
+ kde_moduledir=\"$kde_moduledir\" \
+ kde_styledir=\"$kde_styledir\" \
+ kde_widgetdir=\"$kde_widgetdir\" \
+ xdg_appsdir=\"$xdg_appsdir\" \
+ xdg_menudir=\"$xdg_menudir\" \
+ xdg_directorydir=\"$xdg_directorydir\" \
+ kde_result=$1"
+])
+
+AC_DEFUN([KDE_SET_DEFAULT_PATHS],
+[
+if test "$1" = "default"; then
+
+ if test -z "$kde_htmldir"; then
+ kde_htmldir='\${datadir}/doc/HTML'
+ fi
+ if test -z "$kde_appsdir"; then
+ kde_appsdir='\${datadir}/applnk'
+ fi
+ if test -z "$kde_icondir"; then
+ kde_icondir='\${datadir}/icons'
+ fi
+ if test -z "$kde_sounddir"; then
+ kde_sounddir='\${datadir}/sounds'
+ fi
+ if test -z "$kde_datadir"; then
+ kde_datadir='\${datadir}/apps'
+ fi
+ if test -z "$kde_locale"; then
+ kde_locale='\${datadir}/locale'
+ fi
+ if test -z "$kde_cgidir"; then
+ kde_cgidir='\${exec_prefix}/cgi-bin'
+ fi
+ if test -z "$kde_confdir"; then
+ kde_confdir='\${datadir}/config'
+ fi
+ if test -z "$kde_kcfgdir"; then
+ kde_kcfgdir='\${datadir}/config.kcfg'
+ fi
+ if test -z "$kde_mimedir"; then
+ kde_mimedir='\${datadir}/mimelnk'
+ fi
+ if test -z "$kde_toolbardir"; then
+ kde_toolbardir='\${datadir}/toolbar'
+ fi
+ if test -z "$kde_wallpaperdir"; then
+ kde_wallpaperdir='\${datadir}/wallpapers'
+ fi
+ if test -z "$kde_templatesdir"; then
+ kde_templatesdir='\${datadir}/templates'
+ fi
+ if test -z "$kde_bindir"; then
+ kde_bindir='\${exec_prefix}/bin'
+ fi
+ if test -z "$kde_servicesdir"; then
+ kde_servicesdir='\${datadir}/services'
+ fi
+ if test -z "$kde_servicetypesdir"; then
+ kde_servicetypesdir='\${datadir}/servicetypes'
+ fi
+ if test -z "$kde_moduledir"; then
+ if test "$kde_qtver" = "2"; then
+ kde_moduledir='\${libdir}/kde2'
+ else
+ kde_moduledir='\${libdir}/kde3'
+ fi
+ fi
+ if test -z "$kde_styledir"; then
+ kde_styledir='\${libdir}/kde3/plugins/styles'
+ fi
+ if test -z "$kde_widgetdir"; then
+ kde_widgetdir='\${libdir}/kde3/plugins/designer'
+ fi
+ if test -z "$xdg_appsdir"; then
+ xdg_appsdir='\${datadir}/applications/kde'
+ fi
+ if test -z "$xdg_menudir"; then
+ xdg_menudir='\${sysconfdir}/xdg/menus'
+ fi
+ if test -z "$xdg_directorydir"; then
+ xdg_directorydir='\${datadir}/desktop-directories'
+ fi
+
+ KDE_SET_PATHS(defaults)
+
+else
+
+ if test $kde_qtver = 1; then
+ AC_MSG_RESULT([compiling])
+ KDE_1_CHECK_PATHS
+ else
+ AC_MSG_ERROR([path checking not yet supported for KDE 2])
+ fi
+
+fi
+])
+
+AC_DEFUN([KDE_CHECK_PATHS_FOR_COMPLETENESS],
+[ if test -z "$kde_htmldir" || test -z "$kde_appsdir" ||
+ test -z "$kde_icondir" || test -z "$kde_sounddir" ||
+ test -z "$kde_datadir" || test -z "$kde_locale" ||
+ test -z "$kde_cgidir" || test -z "$kde_confdir" ||
+ test -z "$kde_kcfgdir" ||
+ test -z "$kde_mimedir" || test -z "$kde_toolbardir" ||
+ test -z "$kde_wallpaperdir" || test -z "$kde_templatesdir" ||
+ test -z "$kde_bindir" || test -z "$kde_servicesdir" ||
+ test -z "$kde_servicetypesdir" || test -z "$kde_moduledir" ||
+ test -z "$kde_styledir" || test -z "kde_widgetdir" ||
+ test -z "$xdg_appsdir" || test -z "$xdg_menudir" || test -z "$xdg_directorydir" ||
+ test "x$kde_have_all_paths" != "xyes"; then
+ kde_have_all_paths=no
+ fi
+])
+
+AC_DEFUN([KDE_MISSING_PROG_ERROR],
+[
+ AC_MSG_ERROR([The important program $1 was not found!
+Please check whether you installed KDE correctly.
+])
+])
+
+AC_DEFUN([KDE_MISSING_ARTS_ERROR],
+[
+ AC_MSG_ERROR([The important program $1 was not found!
+Please check whether you installed aRts correctly or use
+--without-arts to compile without aRts support (this will remove functionality).
+])
+])
+
+AC_DEFUN([KDE_SET_DEFAULT_BINDIRS],
+[
+ kde_default_bindirs="/usr/bin /usr/local/bin /opt/local/bin /usr/X11R6/bin /opt/kde/bin /opt/kde3/bin /usr/kde/bin /usr/local/kde/bin"
+ test -n "$KDEDIR" && kde_default_bindirs="$KDEDIR/bin $kde_default_bindirs"
+ if test -n "$KDEDIRS"; then
+ kde_save_IFS=$IFS
+ IFS=:
+ for dir in $KDEDIRS; do
+ kde_default_bindirs="$dir/bin $kde_default_bindirs "
+ done
+ IFS=$kde_save_IFS
+ fi
+])
+
+AC_DEFUN([KDE_SUBST_PROGRAMS],
+[
+ AC_ARG_WITH(arts,
+ AC_HELP_STRING([--without-arts],[build without aRts [default=no]]),
+ [build_arts=$withval],
+ [build_arts=yes]
+ )
+ AM_CONDITIONAL(include_ARTS, test "$build_arts" '!=' "no")
+ if test "$build_arts" = "no"; then
+ AC_DEFINE(WITHOUT_ARTS, 1, [Defined if compiling without arts])
+ fi
+
+ KDE_SET_DEFAULT_BINDIRS
+ kde_default_bindirs="$exec_prefix/bin $prefix/bin $kde_libs_prefix/bin $kde_default_bindirs"
+ KDE_FIND_PATH(dcopidl, DCOPIDL, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(dcopidl)])
+ KDE_FIND_PATH(dcopidl2cpp, DCOPIDL2CPP, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(dcopidl2cpp)])
+ if test "$build_arts" '!=' "no"; then
+ KDE_FIND_PATH(mcopidl, MCOPIDL, [$kde_default_bindirs], [KDE_MISSING_ARTS_ERROR(mcopidl)])
+ KDE_FIND_PATH(artsc-config, ARTSCCONFIG, [$kde_default_bindirs], [KDE_MISSING_ARTS_ERROR(artsc-config)])
+ fi
+ KDE_FIND_PATH(meinproc, MEINPROC, [$kde_default_bindirs])
+
+ kde32ornewer=1
+ kde33ornewer=1
+ if test -n "$kde_qtver" && test "$kde_qtver" -lt 3; then
+ kde32ornewer=
+ kde33ornewer=
+ else
+ if test "$kde_qtver" = "3"; then
+ if test "$kde_qtsubver" -le 1; then
+ kde32ornewer=
+ fi
+ if test "$kde_qtsubver" -le 2; then
+ kde33ornewer=
+ fi
+ if test "$KDECONFIG" != "compiled"; then
+ if test `$KDECONFIG --version | grep KDE | sed 's/KDE: \(...\).*/\1/'` = 3.2; then
+ kde33ornewer=
+ fi
+ fi
+ fi
+ fi
+
+ if test -n "$kde32ornewer"; then
+ KDE_FIND_PATH(kconfig_compiler, KCONFIG_COMPILER, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(kconfig_compiler)])
+ KDE_FIND_PATH(dcopidlng, DCOPIDLNG, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(dcopidlng)])
+ fi
+ if test -n "$kde33ornewer"; then
+ KDE_FIND_PATH(makekdewidgets, MAKEKDEWIDGETS, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(makekdewidgets)])
+ AC_SUBST(MAKEKDEWIDGETS)
+ fi
+ KDE_FIND_PATH(xmllint, XMLLINT, [${prefix}/bin ${exec_prefix}/bin], [XMLLINT=""])
+
+ if test -n "$MEINPROC" -a "$MEINPROC" != "compiled"; then
+ kde_sharedirs="/usr/share/kde /usr/local/share /usr/share /opt/kde3/share /opt/kde/share $prefix/share `kde-config --prefix`/share"
+ test -n "$KDEDIR" && kde_sharedirs="$KDEDIR/share $kde_sharedirs"
+ AC_FIND_FILE(apps/ksgmltools2/customization/kde-chunk.xsl, $kde_sharedirs, KDE_XSL_STYLESHEET)
+ if test "$KDE_XSL_STYLESHEET" = "NO"; then
+ KDE_XSL_STYLESHEET=""
+ else
+ KDE_XSL_STYLESHEET="$KDE_XSL_STYLESHEET/apps/ksgmltools2/customization/kde-chunk.xsl"
+ fi
+ fi
+
+ DCOP_DEPENDENCIES='$(DCOPIDL)'
+ if test -n "$kde32ornewer"; then
+ KCFG_DEPENDENCIES='$(KCONFIG_COMPILER)'
+ DCOP_DEPENDENCIES='$(DCOPIDL) $(DCOPIDLNG)'
+ AC_SUBST(KCONFIG_COMPILER)
+ AC_SUBST(KCFG_DEPENDENCIES)
+ AC_SUBST(DCOPIDLNG)
+ fi
+ AC_SUBST(DCOPIDL)
+ AC_SUBST(DCOPIDL2CPP)
+ AC_SUBST(DCOP_DEPENDENCIES)
+ AC_SUBST(MCOPIDL)
+ AC_SUBST(ARTSCCONFIG)
+ AC_SUBST(MEINPROC)
+ AC_SUBST(KDE_XSL_STYLESHEET)
+ AC_SUBST(XMLLINT)
+])dnl
+
+AC_DEFUN([AC_CREATE_KFSSTND],
+[
+AC_REQUIRE([AC_CHECK_RPATH])
+
+AC_MSG_CHECKING([for KDE paths])
+kde_result=""
+kde_cached_paths=yes
+AC_CACHE_VAL(kde_cv_all_paths,
+[
+ KDE_SET_DEFAULT_PATHS($1)
+ kde_cached_paths=no
+])
+eval "$kde_cv_all_paths"
+KDE_CHECK_PATHS_FOR_COMPLETENESS
+if test "$kde_have_all_paths" = "no" && test "$kde_cached_paths" = "yes"; then
+ # wrong values were cached, may be, we can set better ones
+ kde_result=
+ kde_htmldir= kde_appsdir= kde_icondir= kde_sounddir=
+ kde_datadir= kde_locale= kde_cgidir= kde_confdir= kde_kcfgdir=
+ kde_mimedir= kde_toolbardir= kde_wallpaperdir= kde_templatesdir=
+ kde_bindir= kde_servicesdir= kde_servicetypesdir= kde_moduledir=
+ kde_have_all_paths=
+ kde_styledir=
+ kde_widgetdir=
+ xdg_appsdir = xdg_menudir= xdg_directorydir=
+ KDE_SET_DEFAULT_PATHS($1)
+ eval "$kde_cv_all_paths"
+ KDE_CHECK_PATHS_FOR_COMPLETENESS
+ kde_result="$kde_result (cache overridden)"
+fi
+if test "$kde_have_all_paths" = "no"; then
+ AC_MSG_ERROR([configure could not run a little KDE program to test the environment.
+Since it had compiled and linked before, it must be a strange problem on your system.
+Look at config.log for details. If you are not able to fix this, look at
+http://www.kde.org/faq/installation.html or any www.kde.org mirror.
+(If you're using an egcs version on Linux, you may update binutils!)
+])
+else
+ rm -f conftest*
+ AC_MSG_RESULT($kde_result)
+fi
+
+bindir=$kde_bindir
+
+KDE_SUBST_PROGRAMS
+
+])
+
+AC_DEFUN([AC_SUBST_KFSSTND],
+[
+AC_SUBST(kde_htmldir)
+AC_SUBST(kde_appsdir)
+AC_SUBST(kde_icondir)
+AC_SUBST(kde_sounddir)
+AC_SUBST(kde_datadir)
+AC_SUBST(kde_locale)
+AC_SUBST(kde_confdir)
+AC_SUBST(kde_kcfgdir)
+AC_SUBST(kde_mimedir)
+AC_SUBST(kde_wallpaperdir)
+AC_SUBST(kde_bindir)
+dnl X Desktop Group standards
+AC_SUBST(xdg_appsdir)
+AC_SUBST(xdg_menudir)
+AC_SUBST(xdg_directorydir)
+dnl for KDE 2
+AC_SUBST(kde_templatesdir)
+AC_SUBST(kde_servicesdir)
+AC_SUBST(kde_servicetypesdir)
+AC_SUBST(kde_moduledir)
+AC_SUBST(kdeinitdir, '$(kde_moduledir)')
+AC_SUBST(kde_styledir)
+AC_SUBST(kde_widgetdir)
+if test "$kde_qtver" = 1; then
+ kde_minidir="$kde_icondir/mini"
+else
+# for KDE 1 - this breaks KDE2 apps using minidir, but
+# that's the plan ;-/
+ kde_minidir="/dev/null"
+fi
+dnl AC_SUBST(kde_minidir)
+dnl AC_SUBST(kde_cgidir)
+dnl AC_SUBST(kde_toolbardir)
+])
+
+AC_DEFUN([KDE_MISC_TESTS],
+[
+ dnl Checks for libraries.
+ AC_CHECK_LIB(util, main, [LIBUTIL="-lutil"]) dnl for *BSD
+ AC_SUBST(LIBUTIL)
+ AC_CHECK_LIB(compat, main, [LIBCOMPAT="-lcompat"]) dnl for *BSD
+ AC_SUBST(LIBCOMPAT)
+ kde_have_crypt=
+ AC_CHECK_LIB(crypt, crypt, [LIBCRYPT="-lcrypt"; kde_have_crypt=yes],
+ AC_CHECK_LIB(c, crypt, [kde_have_crypt=yes], [
+ AC_MSG_WARN([you have no crypt in either libcrypt or libc.
+You should install libcrypt from another source or configure with PAM
+support])
+ kde_have_crypt=no
+ ]))
+ AC_SUBST(LIBCRYPT)
+ if test $kde_have_crypt = yes; then
+ AC_DEFINE_UNQUOTED(HAVE_CRYPT, 1, [Defines if your system has the crypt function])
+ fi
+ AC_CHECK_SOCKLEN_T
+ AC_CHECK_LIB(dnet, dnet_ntoa, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"])
+ if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+ AC_CHECK_LIB(dnet_stub, dnet_ntoa,
+ [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"])
+ fi
+ AC_CHECK_FUNC(inet_ntoa)
+ if test $ac_cv_func_inet_ntoa = no; then
+ AC_CHECK_LIB(nsl, inet_ntoa, X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl")
+ fi
+ AC_CHECK_FUNC(connect)
+ if test $ac_cv_func_connect = no; then
+ AC_CHECK_LIB(socket, connect, X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS", ,
+ $X_EXTRA_LIBS)
+ fi
+
+ AC_CHECK_FUNC(remove)
+ if test $ac_cv_func_remove = no; then
+ AC_CHECK_LIB(posix, remove, X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix")
+ fi
+
+ # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+ AC_CHECK_FUNC(shmat, ,
+ AC_CHECK_LIB(ipc, shmat, X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"))
+
+ # more headers that need to be explicitly included on darwin
+ AC_CHECK_HEADERS(sys/types.h stdint.h)
+
+ # sys/bitypes.h is needed for uint32_t and friends on Tru64
+ AC_CHECK_HEADERS(sys/bitypes.h)
+
+ # darwin requires a poll emulation library
+ AC_CHECK_LIB(poll, poll, LIB_POLL="-lpoll")
+
+ # for some image handling on Mac OS X
+ AC_CHECK_HEADERS(Carbon/Carbon.h)
+
+ # CoreAudio framework
+ AC_CHECK_HEADER(CoreAudio/CoreAudio.h, [
+ AC_DEFINE(HAVE_COREAUDIO, 1, [Define if you have the CoreAudio API])
+ FRAMEWORK_COREAUDIO="-Wl,-framework,CoreAudio"
+ ])
+
+ AC_CHECK_RES_INIT
+ AC_SUBST(LIB_POLL)
+ AC_SUBST(FRAMEWORK_COREAUDIO)
+ LIBSOCKET="$X_EXTRA_LIBS"
+ AC_SUBST(LIBSOCKET)
+ AC_SUBST(X_EXTRA_LIBS)
+ AC_CHECK_LIB(ucb, killpg, [LIBUCB="-lucb"]) dnl for Solaris2.4
+ AC_SUBST(LIBUCB)
+
+ case $host in dnl this *is* LynxOS specific
+ *-*-lynxos* )
+ AC_MSG_CHECKING([LynxOS header file wrappers])
+ [CFLAGS="$CFLAGS -D__NO_INCLUDE_WARN__"]
+ AC_MSG_RESULT(disabled)
+ AC_CHECK_LIB(bsd, gethostbyname, [LIBSOCKET="-lbsd"]) dnl for LynxOS
+ ;;
+ esac
+
+ KDE_CHECK_TYPES
+ KDE_CHECK_LIBDL
+ KDE_CHECK_STRLCPY
+ KDE_CHECK_PIE_SUPPORT
+
+# darwin needs this to initialize the environment
+AC_CHECK_HEADERS(crt_externs.h)
+AC_CHECK_FUNC(_NSGetEnviron, [AC_DEFINE(HAVE_NSGETENVIRON, 1, [Define if your system needs _NSGetEnviron to set up the environment])])
+
+AH_VERBATIM(_DARWIN_ENVIRON,
+[
+#if defined(HAVE_NSGETENVIRON) && defined(HAVE_CRT_EXTERNS_H)
+# include <sys/time.h>
+# include <crt_externs.h>
+# define environ (*_NSGetEnviron())
+#endif
+])
+
+AH_VERBATIM(_AIX_STRINGS_H_BZERO,
+[
+/*
+ * AIX defines FD_SET in terms of bzero, but fails to include <strings.h>
+ * that defines bzero.
+ */
+
+#if defined(_AIX)
+#include <strings.h>
+#endif
+])
+
+AC_CHECK_FUNCS([vsnprintf snprintf])
+
+AH_VERBATIM(_TRU64,[
+/*
+ * On HP-UX, the declaration of vsnprintf() is needed every time !
+ */
+
+#if !defined(HAVE_VSNPRINTF) || defined(hpux)
+#if __STDC__
+#include <stdarg.h>
+#include <stdlib.h>
+#else
+#include <varargs.h>
+#endif
+#ifdef __cplusplus
+extern "C"
+#endif
+int vsnprintf(char *str, size_t n, char const *fmt, va_list ap);
+#ifdef __cplusplus
+extern "C"
+#endif
+int snprintf(char *str, size_t n, char const *fmt, ...);
+#endif
+])
+
+])
+
+dnl ------------------------------------------------------------------------
+dnl Find the header files and libraries for X-Windows. Extended the
+dnl macro AC_PATH_X
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([K_PATH_X],
+[
+AC_REQUIRE([KDE_MISC_TESTS])dnl
+AC_REQUIRE([KDE_CHECK_LIB64])
+
+AC_ARG_ENABLE(
+ embedded,
+ AC_HELP_STRING([--enable-embedded],[link to Qt-embedded, don't use X]),
+ kde_use_qt_emb=$enableval,
+ kde_use_qt_emb=no
+)
+
+AC_ARG_ENABLE(
+ qtopia,
+ AC_HELP_STRING([--enable-qtopia],[link to Qt-embedded, link to the Qtopia Environment]),
+ kde_use_qt_emb_palm=$enableval,
+ kde_use_qt_emb_palm=no
+)
+
+AC_ARG_ENABLE(
+ mac,
+ AC_HELP_STRING([--enable-mac],[link to Qt/Mac (don't use X)]),
+ kde_use_qt_mac=$enableval,
+ kde_use_qt_mac=no
+)
+
+# used to disable x11-specific stuff on special platforms
+AM_CONDITIONAL(include_x11, test "$kde_use_qt_emb" = "no" && test "$kde_use_qt_mac" = "no")
+
+if test "$kde_use_qt_emb" = "no" && test "$kde_use_qt_mac" = "no"; then
+
+AC_MSG_CHECKING(for X)
+
+AC_CACHE_VAL(kde_cv_have_x,
+[# One or both of the vars are not set, and there is no cached value.
+if test "{$x_includes+set}" = set || test "$x_includes" = NONE; then
+ kde_x_includes=NO
+else
+ kde_x_includes=$x_includes
+fi
+if test "{$x_libraries+set}" = set || test "$x_libraries" = NONE; then
+ kde_x_libraries=NO
+else
+ kde_x_libraries=$x_libraries
+fi
+
+# below we use the standard autoconf calls
+ac_x_libraries=$kde_x_libraries
+ac_x_includes=$kde_x_includes
+
+KDE_PATH_X_DIRECT
+dnl AC_PATH_X_XMKMF picks /usr/lib as the path for the X libraries.
+dnl Unfortunately, if compiling with the N32 ABI, this is not the correct
+dnl location. The correct location is /usr/lib32 or an undefined value
+dnl (the linker is smart enough to pick the correct default library).
+dnl Things work just fine if you use just AC_PATH_X_DIRECT.
+dnl Solaris has a similar problem. AC_PATH_X_XMKMF forces x_includes to
+dnl /usr/openwin/include, which doesn't work. /usr/include does work, so
+dnl x_includes should be left alone.
+case "$host" in
+mips-sgi-irix6*)
+ ;;
+*-*-solaris*)
+ ;;
+*)
+ _AC_PATH_X_XMKMF
+ if test -z "$ac_x_includes"; then
+ ac_x_includes="."
+ fi
+ if test -z "$ac_x_libraries"; then
+ ac_x_libraries="/usr/lib${kdelibsuff}"
+ fi
+esac
+#from now on we use our own again
+
+# when the user already gave --x-includes, we ignore
+# what the standard autoconf macros told us.
+if test "$kde_x_includes" = NO; then
+ kde_x_includes=$ac_x_includes
+fi
+
+# for --x-libraries too
+if test "$kde_x_libraries" = NO; then
+ kde_x_libraries=$ac_x_libraries
+fi
+
+if test "$kde_x_includes" = NO; then
+ AC_MSG_ERROR([Can't find X includes. Please check your installation and add the correct paths!])
+fi
+
+if test "$kde_x_libraries" = NO; then
+ AC_MSG_ERROR([Can't find X libraries. Please check your installation and add the correct paths!])
+fi
+
+# Record where we found X for the cache.
+kde_cv_have_x="have_x=yes \
+ kde_x_includes=$kde_x_includes kde_x_libraries=$kde_x_libraries"
+])dnl
+
+eval "$kde_cv_have_x"
+
+if test "$have_x" != yes; then
+ AC_MSG_RESULT($have_x)
+ no_x=yes
+else
+ AC_MSG_RESULT([libraries $kde_x_libraries, headers $kde_x_includes])
+fi
+
+if test -z "$kde_x_includes" || test "x$kde_x_includes" = xNONE; then
+ X_INCLUDES=""
+ x_includes="."; dnl better than nothing :-
+ else
+ x_includes=$kde_x_includes
+ X_INCLUDES="-I$x_includes"
+fi
+
+if test -z "$kde_x_libraries" || test "x$kde_x_libraries" = xNONE; then
+ X_LDFLAGS=""
+ x_libraries="/usr/lib"; dnl better than nothing :-
+ else
+ x_libraries=$kde_x_libraries
+ X_LDFLAGS="-L$x_libraries"
+fi
+all_includes="$X_INCLUDES"
+all_libraries="$X_LDFLAGS $LDFLAGS_AS_NEEDED $LDFLAGS_NEW_DTAGS"
+
+# Check for libraries that X11R6 Xt/Xaw programs need.
+ac_save_LDFLAGS="$LDFLAGS"
+LDFLAGS="$LDFLAGS $X_LDFLAGS"
+# SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
+# check for ICE first), but we must link in the order -lSM -lICE or
+# we get undefined symbols. So assume we have SM if we have ICE.
+# These have to be linked with before -lX11, unlike the other
+# libraries we check for below, so use a different variable.
+# --interran@uluru.Stanford.EDU, kb@cs.umb.edu.
+AC_CHECK_LIB(ICE, IceConnectionNumber,
+ [LIBSM="-lSM -lICE"], , $X_EXTRA_LIBS)
+LDFLAGS="$ac_save_LDFLAGS"
+
+LIB_X11='-lX11 $(LIBSOCKET)'
+
+AC_MSG_CHECKING(for libXext)
+AC_CACHE_VAL(kde_cv_have_libXext,
+[
+kde_ldflags_safe="$LDFLAGS"
+kde_libs_safe="$LIBS"
+
+LDFLAGS="$LDFLAGS $X_LDFLAGS $USER_LDFLAGS"
+LIBS="-lXext -lX11 $LIBSOCKET"
+
+AC_TRY_LINK([
+#include <stdio.h>
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+#endif
+],
+[
+printf("hello Xext\n");
+],
+kde_cv_have_libXext=yes,
+kde_cv_have_libXext=no
+)
+
+LDFLAGS=$kde_ldflags_safe
+LIBS=$kde_libs_safe
+])
+
+AC_MSG_RESULT($kde_cv_have_libXext)
+
+if test "$kde_cv_have_libXext" = "no"; then
+ AC_MSG_ERROR([We need a working libXext to proceed. Since configure
+can't find it itself, we stop here assuming that make wouldn't find
+them either.])
+fi
+
+LIB_XEXT="-lXext"
+QTE_NORTTI=""
+
+elif test "$kde_use_qt_emb" = "yes"; then
+ dnl We're using QT Embedded
+ CPPFLAGS=-DQWS
+ CXXFLAGS="$CXXFLAGS -fno-rtti"
+ QTE_NORTTI="-fno-rtti -DQWS"
+ X_PRE_LIBS=""
+ LIB_X11=""
+ LIB_XEXT=""
+ LIB_XRENDER=""
+ LIBSM=""
+ X_INCLUDES=""
+ X_LDFLAGS=""
+ x_includes=""
+ x_libraries=""
+elif test "$kde_use_qt_mac" = "yes"; then
+ dnl We're using QT/Mac (I use QT_MAC so that qglobal.h doesn't *have* to
+ dnl be included to get the information) --Sam
+ CXXFLAGS="$CXXFLAGS -DQT_MAC -no-cpp-precomp"
+ CFLAGS="$CFLAGS -DQT_MAC -no-cpp-precomp"
+ X_PRE_LIBS=""
+ LIB_X11=""
+ LIB_XEXT=""
+ LIB_XRENDER=""
+ LIBSM=""
+ X_INCLUDES=""
+ X_LDFLAGS=""
+ x_includes=""
+ x_libraries=""
+fi
+AC_SUBST(X_PRE_LIBS)
+AC_SUBST(LIB_X11)
+AC_SUBST(LIB_XRENDER)
+AC_SUBST(LIBSM)
+AC_SUBST(X_INCLUDES)
+AC_SUBST(X_LDFLAGS)
+AC_SUBST(x_includes)
+AC_SUBST(x_libraries)
+AC_SUBST(QTE_NORTTI)
+AC_SUBST(LIB_XEXT)
+
+])
+
+AC_DEFUN([KDE_PRINT_QT_PROGRAM],
+[
+AC_REQUIRE([KDE_USE_QT])
+cat > conftest.$ac_ext <<EOF
+#include "confdefs.h"
+#include <qglobal.h>
+#include <qapplication.h>
+EOF
+if test "$kde_qtver" = "2"; then
+cat >> conftest.$ac_ext <<EOF
+#include <qevent.h>
+#include <qstring.h>
+#include <qstyle.h>
+EOF
+
+if test $kde_qtsubver -gt 0; then
+cat >> conftest.$ac_ext <<EOF
+#if QT_VERSION < 210
+#error 1
+#endif
+EOF
+fi
+fi
+
+if test "$kde_qtver" = "3"; then
+cat >> conftest.$ac_ext <<EOF
+#include <qcursor.h>
+#include <qstylefactory.h>
+#include <private/qucomextra_p.h>
+EOF
+fi
+
+echo "#if ! ($kde_qt_verstring)" >> conftest.$ac_ext
+cat >> conftest.$ac_ext <<EOF
+#error 1
+#endif
+
+int main() {
+EOF
+if test "$kde_qtver" = "2"; then
+cat >> conftest.$ac_ext <<EOF
+ QStringList *t = new QStringList();
+ Q_UNUSED(t);
+EOF
+if test $kde_qtsubver -gt 0; then
+cat >> conftest.$ac_ext <<EOF
+ QString s;
+ s.setLatin1("Elvis is alive", 14);
+EOF
+fi
+fi
+if test "$kde_qtver" = "3"; then
+cat >> conftest.$ac_ext <<EOF
+ (void)QStyleFactory::create(QString::null);
+ QCursor c(Qt::WhatsThisCursor);
+EOF
+fi
+cat >> conftest.$ac_ext <<EOF
+ return 0;
+}
+EOF
+])
+
+AC_DEFUN([KDE_USE_QT],
+[
+if test -z "$1"; then
+ # Current default Qt version: 3.3
+ kde_qtver=3
+ kde_qtsubver=3
+else
+ kde_qtsubver=`echo "$1" | sed -e 's#[0-9][0-9]*\.\([0-9][0-9]*\).*#\1#'`
+ # following is the check if subversion isnt found in passed argument
+ if test "$kde_qtsubver" = "$1"; then
+ kde_qtsubver=1
+ fi
+ kde_qtver=`echo "$1" | sed -e 's#^\([0-9][0-9]*\)\..*#\1#'`
+ if test "$kde_qtver" = "1"; then
+ kde_qtsubver=42
+ fi
+fi
+
+if test -z "$2"; then
+ if test "$kde_qtver" = "2"; then
+ if test $kde_qtsubver -gt 0; then
+ kde_qt_minversion=">= Qt 2.2.2"
+ else
+ kde_qt_minversion=">= Qt 2.0.2"
+ fi
+ fi
+ if test "$kde_qtver" = "3"; then
+ if test $kde_qtsubver -gt 0; then
+ if test $kde_qtsubver -gt 1; then
+ if test $kde_qtsubver -gt 2; then
+ kde_qt_minversion=">= Qt 3.3 and < 4.0"
+ else
+ kde_qt_minversion=">= Qt 3.2 and < 4.0"
+ fi
+ else
+ kde_qt_minversion=">= Qt 3.1 (20021021) and < 4.0"
+ fi
+ else
+ kde_qt_minversion=">= Qt 3.0 and < 4.0"
+ fi
+ fi
+ if test "$kde_qtver" = "1"; then
+ kde_qt_minversion=">= 1.42 and < 2.0"
+ fi
+else
+ kde_qt_minversion="$2"
+fi
+
+if test -z "$3"; then
+ if test $kde_qtver = 3; then
+ if test $kde_qtsubver -gt 0; then
+ kde_qt_verstring="QT_VERSION >= 0x03@VER@00 && QT_VERSION < 0x040000"
+ qtsubver=`echo "00$kde_qtsubver" | sed -e 's,.*\(..\)$,\1,'`
+ kde_qt_verstring=`echo $kde_qt_verstring | sed -e "s,@VER@,$qtsubver,"`
+ else
+ kde_qt_verstring="QT_VERSION >= 300 && QT_VERSION < 0x040000"
+ fi
+ fi
+ if test $kde_qtver = 2; then
+ if test $kde_qtsubver -gt 0; then
+ kde_qt_verstring="QT_VERSION >= 222"
+ else
+ kde_qt_verstring="QT_VERSION >= 200"
+ fi
+ fi
+ if test $kde_qtver = 1; then
+ kde_qt_verstring="QT_VERSION >= 142 && QT_VERSION < 200"
+ fi
+else
+ kde_qt_verstring="$3"
+fi
+
+if test $kde_qtver = 4; then
+ kde_qt_dirs="$QTDIR /usr/lib/qt4 /usr/lib/qt /usr/share/qt4"
+fi
+if test $kde_qtver = 3; then
+ kde_qt_dirs="$QTDIR /usr/lib/qt3 /usr/lib/qt /usr/share/qt3"
+fi
+if test $kde_qtver = 2; then
+ kde_qt_dirs="$QTDIR /usr/lib/qt2 /usr/lib/qt"
+fi
+if test $kde_qtver = 1; then
+ kde_qt_dirs="$QTDIR /usr/lib/qt"
+fi
+])
+
+AC_DEFUN([KDE_CHECK_QT_DIRECT],
+[
+AC_REQUIRE([KDE_USE_QT])
+AC_MSG_CHECKING([if Qt compiles without flags])
+AC_CACHE_VAL(kde_cv_qt_direct,
+[
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+ac_LD_LIBRARY_PATH_safe=$LD_LIBRARY_PATH
+ac_LIBRARY_PATH="$LIBRARY_PATH"
+ac_cxxflags_safe="$CXXFLAGS"
+ac_ldflags_safe="$LDFLAGS"
+ac_libs_safe="$LIBS"
+
+CXXFLAGS="$CXXFLAGS -I$qt_includes"
+LDFLAGS="$LDFLAGS $X_LDFLAGS"
+if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+LIBS="$LIBQT -lXext -lX11 $LIBSOCKET"
+else
+LIBS="$LIBQT $LIBSOCKET"
+fi
+LD_LIBRARY_PATH=
+export LD_LIBRARY_PATH
+LIBRARY_PATH=
+export LIBRARY_PATH
+
+KDE_PRINT_QT_PROGRAM
+
+if AC_TRY_EVAL(ac_link) && test -s conftest; then
+ kde_cv_qt_direct="yes"
+else
+ kde_cv_qt_direct="no"
+ echo "configure: failed program was:" >&AC_FD_CC
+ cat conftest.$ac_ext >&AC_FD_CC
+fi
+
+rm -f conftest*
+CXXFLAGS="$ac_cxxflags_safe"
+LDFLAGS="$ac_ldflags_safe"
+LIBS="$ac_libs_safe"
+
+LD_LIBRARY_PATH="$ac_LD_LIBRARY_PATH_safe"
+export LD_LIBRARY_PATH
+LIBRARY_PATH="$ac_LIBRARY_PATH"
+export LIBRARY_PATH
+AC_LANG_RESTORE
+])
+
+if test "$kde_cv_qt_direct" = "yes"; then
+ AC_MSG_RESULT(yes)
+ $1
+else
+ AC_MSG_RESULT(no)
+ $2
+fi
+])
+
+dnl ------------------------------------------------------------------------
+dnl Try to find the Qt headers and libraries.
+dnl $(QT_LDFLAGS) will be -Lqtliblocation (if needed)
+dnl and $(QT_INCLUDES) will be -Iqthdrlocation (if needed)
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([AC_PATH_QT_1_3],
+[
+AC_REQUIRE([K_PATH_X])
+AC_REQUIRE([KDE_USE_QT])
+AC_REQUIRE([KDE_CHECK_LIB64])
+
+dnl ------------------------------------------------------------------------
+dnl Add configure flag to enable linking to MT version of Qt library.
+dnl ------------------------------------------------------------------------
+
+AC_ARG_ENABLE(
+ mt,
+ AC_HELP_STRING([--disable-mt],[link to non-threaded Qt (deprecated)]),
+ kde_use_qt_mt=$enableval,
+ [
+ if test $kde_qtver = 3; then
+ kde_use_qt_mt=yes
+ else
+ kde_use_qt_mt=no
+ fi
+ ]
+)
+
+USING_QT_MT=""
+
+dnl ------------------------------------------------------------------------
+dnl If we not get --disable-qt-mt then adjust some vars for the host.
+dnl ------------------------------------------------------------------------
+
+KDE_MT_LDFLAGS=
+KDE_MT_LIBS=
+if test "x$kde_use_qt_mt" = "xyes"; then
+ KDE_CHECK_THREADING
+ if test "x$kde_use_threading" = "xyes"; then
+ CPPFLAGS="$USE_THREADS -DQT_THREAD_SUPPORT $CPPFLAGS"
+ KDE_MT_LDFLAGS="$USE_THREADS"
+ KDE_MT_LIBS="$LIBPTHREAD"
+ else
+ kde_use_qt_mt=no
+ fi
+fi
+AC_SUBST(KDE_MT_LDFLAGS)
+AC_SUBST(KDE_MT_LIBS)
+
+kde_qt_was_given=yes
+
+dnl ------------------------------------------------------------------------
+dnl If we haven't been told how to link to Qt, we work it out for ourselves.
+dnl ------------------------------------------------------------------------
+if test -z "$LIBQT_GLOB"; then
+ if test "x$kde_use_qt_emb" = "xyes"; then
+ LIBQT_GLOB="libqte.*"
+ else
+ LIBQT_GLOB="libqt.*"
+ fi
+fi
+
+dnl ------------------------------------------------------------
+dnl If we got --enable-embedded then adjust the Qt library name.
+dnl ------------------------------------------------------------
+if test "x$kde_use_qt_emb" = "xyes"; then
+ qtlib="qte"
+else
+ qtlib="qt"
+fi
+
+kde_int_qt="-l$qtlib"
+
+if test -z "$LIBQPE"; then
+dnl ------------------------------------------------------------
+dnl If we got --enable-palmtop then add -lqpe to the link line
+dnl ------------------------------------------------------------
+ if test "x$kde_use_qt_emb" = "xyes"; then
+ if test "x$kde_use_qt_emb_palm" = "xyes"; then
+ LIB_QPE="-lqpe"
+ else
+ LIB_QPE=""
+ fi
+ else
+ LIB_QPE=""
+ fi
+fi
+
+dnl ------------------------------------------------------------------------
+dnl If we got --enable-qt-mt then adjust the Qt library name for the host.
+dnl ------------------------------------------------------------------------
+
+if test "x$kde_use_qt_mt" = "xyes"; then
+ LIBQT="-l$qtlib-mt"
+ kde_int_qt="-l$qtlib-mt"
+ LIBQT_GLOB="lib$qtlib-mt.*"
+ USING_QT_MT="using -mt"
+else
+ LIBQT="-l$qtlib"
+fi
+
+if test $kde_qtver != 1; then
+
+ AC_REQUIRE([AC_FIND_PNG])
+ AC_REQUIRE([AC_FIND_JPEG])
+ LIBQT="$LIBQT $LIBPNG $LIBJPEG"
+fi
+
+if test $kde_qtver = 3; then
+ AC_REQUIRE([KDE_CHECK_LIBDL])
+ LIBQT="$LIBQT $LIBDL"
+fi
+
+AC_MSG_CHECKING([for Qt])
+
+if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+LIBQT="$LIBQT $X_PRE_LIBS -lXext -lX11 $LIBSM $LIBSOCKET"
+fi
+ac_qt_includes=NO ac_qt_libraries=NO ac_qt_bindir=NO
+qt_libraries=""
+qt_includes=""
+AC_ARG_WITH(qt-dir,
+ AC_HELP_STRING([--with-qt-dir=DIR],[where the root of Qt is installed ]),
+ [ ac_qt_includes="$withval"/include
+ ac_qt_libraries="$withval"/lib${kdelibsuff}
+ ac_qt_bindir="$withval"/bin
+ ])
+
+AC_ARG_WITH(qt-includes,
+ AC_HELP_STRING([--with-qt-includes=DIR],[where the Qt includes are. ]),
+ [
+ ac_qt_includes="$withval"
+ ])
+
+kde_qt_libs_given=no
+
+AC_ARG_WITH(qt-libraries,
+ AC_HELP_STRING([--with-qt-libraries=DIR],[where the Qt library is installed.]),
+ [ ac_qt_libraries="$withval"
+ kde_qt_libs_given=yes
+ ])
+
+AC_CACHE_VAL(ac_cv_have_qt,
+[#try to guess Qt locations
+
+qt_incdirs=""
+for dir in $kde_qt_dirs; do
+ qt_incdirs="$qt_incdirs $dir/include $dir"
+done
+qt_incdirs="$QTINC $qt_incdirs /usr/local/qt/include /usr/include/qt /usr/include /usr/X11R6/include/X11/qt /usr/X11R6/include/qt /usr/X11R6/include/qt2 /usr/include/qt3 $x_includes"
+if test ! "$ac_qt_includes" = "NO"; then
+ qt_incdirs="$ac_qt_includes $qt_incdirs"
+fi
+
+if test "$kde_qtver" != "1"; then
+ kde_qt_header=qstyle.h
+else
+ kde_qt_header=qglobal.h
+fi
+
+AC_FIND_FILE($kde_qt_header, $qt_incdirs, qt_incdir)
+ac_qt_includes="$qt_incdir"
+
+qt_libdirs=""
+for dir in $kde_qt_dirs; do
+ qt_libdirs="$qt_libdirs $dir/lib${kdelibsuff} $dir"
+done
+qt_libdirs="$QTLIB $qt_libdirs /usr/X11R6/lib /usr/lib /usr/local/qt/lib $x_libraries"
+if test ! "$ac_qt_libraries" = "NO"; then
+ qt_libdir=$ac_qt_libraries
+else
+ qt_libdirs="$ac_qt_libraries $qt_libdirs"
+ # if the Qt was given, the chance is too big that libqt.* doesn't exist
+ qt_libdir=NONE
+ for dir in $qt_libdirs; do
+ try="ls -1 $dir/${LIBQT_GLOB}"
+ if test -n "`$try 2> /dev/null`"; then qt_libdir=$dir; break; else echo "tried $dir" >&AC_FD_CC ; fi
+ done
+fi
+for a in $qt_libdir/lib`echo ${kde_int_qt} | sed 's,^-l,,'`_incremental.*; do
+ if test -e "$a"; then
+ LIBQT="$LIBQT ${kde_int_qt}_incremental"
+ break
+ fi
+done
+
+ac_qt_libraries="$qt_libdir"
+
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+
+ac_cxxflags_safe="$CXXFLAGS"
+ac_ldflags_safe="$LDFLAGS"
+ac_libs_safe="$LIBS"
+
+CXXFLAGS="$CXXFLAGS -I$qt_incdir $all_includes"
+LDFLAGS="$LDFLAGS -L$qt_libdir $all_libraries $USER_LDFLAGS $KDE_MT_LDFLAGS"
+LIBS="$LIBS $LIBQT $KDE_MT_LIBS"
+
+KDE_PRINT_QT_PROGRAM
+
+if AC_TRY_EVAL(ac_link) && test -s conftest; then
+ rm -f conftest*
+else
+ echo "configure: failed program was:" >&AC_FD_CC
+ cat conftest.$ac_ext >&AC_FD_CC
+ ac_qt_libraries="NO"
+fi
+rm -f conftest*
+CXXFLAGS="$ac_cxxflags_safe"
+LDFLAGS="$ac_ldflags_safe"
+LIBS="$ac_libs_safe"
+
+AC_LANG_RESTORE
+if test "$ac_qt_includes" = NO || test "$ac_qt_libraries" = NO; then
+ ac_cv_have_qt="have_qt=no"
+ ac_qt_notfound=""
+ missing_qt_mt=""
+ if test "$ac_qt_includes" = NO; then
+ if test "$ac_qt_libraries" = NO; then
+ ac_qt_notfound="(headers and libraries)";
+ else
+ ac_qt_notfound="(headers)";
+ fi
+ else
+ if test "x$kde_use_qt_mt" = "xyes"; then
+ missing_qt_mt="
+Make sure that you have compiled Qt with thread support!"
+ ac_qt_notfound="(library $qtlib-mt)";
+ else
+ ac_qt_notfound="(library $qtlib)";
+ fi
+ fi
+
+ AC_MSG_ERROR([Qt ($kde_qt_minversion) $ac_qt_notfound not found. Please check your installation!
+For more details about this problem, look at the end of config.log.$missing_qt_mt])
+else
+ have_qt="yes"
+fi
+])
+
+eval "$ac_cv_have_qt"
+
+if test "$have_qt" != yes; then
+ AC_MSG_RESULT([$have_qt]);
+else
+ ac_cv_have_qt="have_qt=yes \
+ ac_qt_includes=$ac_qt_includes ac_qt_libraries=$ac_qt_libraries"
+ AC_MSG_RESULT([libraries $ac_qt_libraries, headers $ac_qt_includes $USING_QT_MT])
+
+ qt_libraries="$ac_qt_libraries"
+ qt_includes="$ac_qt_includes"
+fi
+
+if test ! "$kde_qt_libs_given" = "yes" && test ! "$kde_qtver" = 3; then
+ KDE_CHECK_QT_DIRECT(qt_libraries= ,[])
+fi
+
+AC_SUBST(qt_libraries)
+AC_SUBST(qt_includes)
+
+if test "$qt_includes" = "$x_includes" || test -z "$qt_includes"; then
+ QT_INCLUDES=""
+else
+ QT_INCLUDES="-I$qt_includes"
+ all_includes="$QT_INCLUDES $all_includes"
+fi
+
+if test "$qt_libraries" = "$x_libraries" || test -z "$qt_libraries"; then
+ QT_LDFLAGS=""
+else
+ QT_LDFLAGS="-L$qt_libraries"
+ all_libraries="$QT_LDFLAGS $all_libraries"
+fi
+test -z "$KDE_MT_LDFLAGS" || all_libraries="$all_libraries $KDE_MT_LDFLAGS"
+
+AC_SUBST(QT_INCLUDES)
+AC_SUBST(QT_LDFLAGS)
+AC_PATH_QT_MOC_UIC
+
+KDE_CHECK_QT_JPEG
+
+if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+LIB_QT="$kde_int_qt $LIBJPEG_QT "'$(LIBZ) $(LIBPNG) -lXext $(LIB_X11) $(LIBSM)'
+else
+LIB_QT="$kde_int_qt $LIBJPEG_QT "'$(LIBZ) $(LIBPNG)'
+fi
+test -z "$KDE_MT_LIBS" || LIB_QT="$LIB_QT $KDE_MT_LIBS"
+for a in $qt_libdir/lib`echo ${kde_int_qt} | sed 's,^-l,,'`_incremental.*; do
+ if test -e "$a"; then
+ LIB_QT="$LIB_QT ${kde_int_qt}_incremental"
+ break
+ fi
+done
+
+AC_SUBST(LIB_QT)
+AC_SUBST(LIB_QPE)
+
+AC_SUBST(kde_qtver)
+])
+
+AC_DEFUN([AC_PATH_QT],
+[
+AC_PATH_QT_1_3
+])
+
+AC_DEFUN([KDE_CHECK_UIC_PLUGINS],
+[
+AC_REQUIRE([AC_PATH_QT_MOC_UIC])
+
+if test x$ac_uic_supports_libpath = xyes; then
+
+AC_MSG_CHECKING([if UIC has KDE plugins available])
+AC_CACHE_VAL(kde_cv_uic_plugins,
+[
+cat > actest.ui << EOF
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>NewConnectionDialog</class>
+<widget class="QDialog">
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>testInput</cstring>
+ </property>
+ </widget>
+</widget>
+</UI>
+EOF
+
+
+
+kde_cv_uic_plugins=no
+kde_line="$UIC_PATH -L $kde_widgetdir"
+if test x$ac_uic_supports_nounload = xyes; then
+ kde_line="$kde_line -nounload"
+fi
+kde_line="$kde_line -impl actest.h actest.ui > actest.cpp"
+if AC_TRY_EVAL(kde_line); then
+ # if you're trying to debug this check and think it's incorrect,
+ # better check your installation. The check _is_ correct - your
+ # installation is not.
+ if test -f actest.cpp && grep klineedit actest.cpp > /dev/null; then
+ kde_cv_uic_plugins=yes
+ fi
+fi
+rm -f actest.ui actest.cpp
+])
+
+AC_MSG_RESULT([$kde_cv_uic_plugins])
+if test "$kde_cv_uic_plugins" != yes; then
+ AC_MSG_ERROR([
+you need to install kdelibs first.
+
+If you did install kdelibs, then the Qt version that is picked up by
+this configure is not the same version you used to compile kdelibs.
+The Qt Plugin installed by kdelibs is *ONLY* loadable if it is the
+_same Qt version_, compiled with the _same compiler_ and the same Qt
+configuration settings.
+])
+fi
+fi
+])
+
+AC_DEFUN([KDE_CHECK_FINAL],
+[
+ AC_ARG_ENABLE(final,
+ AC_HELP_STRING([--enable-final],
+ [build size optimized apps (experimental - needs lots of memory)]),
+ kde_use_final=$enableval, kde_use_final=no)
+
+ if test "x$kde_use_final" = "xyes"; then
+ KDE_USE_FINAL_TRUE=""
+ KDE_USE_FINAL_FALSE="#"
+ else
+ KDE_USE_FINAL_TRUE="#"
+ KDE_USE_FINAL_FALSE=""
+ fi
+ AC_SUBST(KDE_USE_FINAL_TRUE)
+ AC_SUBST(KDE_USE_FINAL_FALSE)
+])
+
+AC_DEFUN([KDE_CHECK_CLOSURE],
+[
+ AC_ARG_ENABLE(closure,
+ AC_HELP_STRING([--enable-closure],[delay template instantiation]),
+ kde_use_closure=$enableval, kde_use_closure=no)
+
+ KDE_NO_UNDEFINED=""
+ if test "x$kde_use_closure" = "xyes"; then
+ KDE_USE_CLOSURE_TRUE=""
+ KDE_USE_CLOSURE_FALSE="#"
+# CXXFLAGS="$CXXFLAGS $REPO"
+ else
+ KDE_USE_CLOSURE_TRUE="#"
+ KDE_USE_CLOSURE_FALSE=""
+ KDE_NO_UNDEFINED=""
+ case $host in
+ *-*-linux-gnu)
+ KDE_CHECK_COMPILER_FLAG([Wl,--no-undefined],
+ [KDE_CHECK_COMPILER_FLAG([Wl,--allow-shlib-undefined],
+ [KDE_NO_UNDEFINED="-Wl,--no-undefined -Wl,--allow-shlib-undefined"],
+ [KDE_NO_UNDEFINED=""])],
+ [KDE_NO_UNDEFINED=""])
+ ;;
+ esac
+ fi
+ AC_SUBST(KDE_USE_CLOSURE_TRUE)
+ AC_SUBST(KDE_USE_CLOSURE_FALSE)
+ AC_SUBST(KDE_NO_UNDEFINED)
+])
+
+dnl Check if the linker supports --enable-new-dtags and --as-needed
+AC_DEFUN([KDE_CHECK_NEW_LDFLAGS],
+[
+ AC_ARG_ENABLE(new_ldflags,
+ AC_HELP_STRING([--enable-new-ldflags],
+ [enable the new linker flags]),
+ kde_use_new_ldflags=$enableval,
+ kde_use_new_ldflags=no)
+
+ LDFLAGS_AS_NEEDED=""
+ LDFLAGS_NEW_DTAGS=""
+ if test "x$kde_use_new_ldflags" = "xyes"; then
+ LDFLAGS_NEW_DTAGS=""
+ KDE_CHECK_COMPILER_FLAG([Wl,--enable-new-dtags],
+ [LDFLAGS_NEW_DTAGS="-Wl,--enable-new-dtags"],)
+
+ KDE_CHECK_COMPILER_FLAG([Wl,--as-needed],
+ [LDFLAGS_AS_NEEDED="-Wl,--as-needed"],)
+ fi
+ AC_SUBST(LDFLAGS_AS_NEEDED)
+ AC_SUBST(LDFLAGS_NEW_DTAGS)
+])
+
+AC_DEFUN([KDE_CHECK_NMCHECK],
+[
+ AC_ARG_ENABLE(nmcheck,AC_HELP_STRING([--enable-nmcheck],[enable automatic namespace cleanness check]),
+ kde_use_nmcheck=$enableval, kde_use_nmcheck=no)
+
+ if test "$kde_use_nmcheck" = "yes"; then
+ KDE_USE_NMCHECK_TRUE=""
+ KDE_USE_NMCHECK_FALSE="#"
+ else
+ KDE_USE_NMCHECK_TRUE="#"
+ KDE_USE_NMCHECK_FALSE=""
+ fi
+ AC_SUBST(KDE_USE_NMCHECK_TRUE)
+ AC_SUBST(KDE_USE_NMCHECK_FALSE)
+])
+
+AC_DEFUN([KDE_EXPAND_MAKEVAR], [
+savex=$exec_prefix
+test "x$exec_prefix" = xNONE && exec_prefix=$prefix
+tmp=$$2
+while $1=`eval echo "$tmp"`; test "x$$1" != "x$tmp"; do tmp=$$1; done
+exec_prefix=$savex
+])
+
+dnl ------------------------------------------------------------------------
+dnl Now, the same with KDE
+dnl $(KDE_LDFLAGS) will be the kdeliblocation (if needed)
+dnl and $(kde_includes) will be the kdehdrlocation (if needed)
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([AC_BASE_PATH_KDE],
+[
+AC_REQUIRE([KDE_CHECK_STL])
+AC_REQUIRE([AC_PATH_QT])dnl
+AC_REQUIRE([KDE_CHECK_LIB64])
+
+AC_CHECK_RPATH
+AC_MSG_CHECKING([for KDE])
+
+if test "${prefix}" != NONE; then
+ kde_includes=${includedir}
+ KDE_EXPAND_MAKEVAR(ac_kde_includes, includedir)
+
+ kde_libraries=${libdir}
+ KDE_EXPAND_MAKEVAR(ac_kde_libraries, libdir)
+
+else
+ ac_kde_includes=
+ ac_kde_libraries=
+ kde_libraries=""
+ kde_includes=""
+fi
+
+AC_CACHE_VAL(ac_cv_have_kde,
+[#try to guess kde locations
+
+if test "$kde_qtver" = 1; then
+ kde_check_header="ksock.h"
+ kde_check_lib="libkdecore.la"
+else
+ kde_check_header="ksharedptr.h"
+ kde_check_lib="libkio.la"
+fi
+
+if test -z "$1"; then
+
+kde_incdirs="$kde_libs_prefix/include /usr/lib/kde/include /usr/local/kde/include /usr/local/include /usr/kde/include /usr/include/kde /usr/include /opt/kde3/include /opt/kde/include $x_includes $qt_includes"
+test -n "$KDEDIR" && kde_incdirs="$KDEDIR/include $KDEDIR/include/kde $KDEDIR $kde_incdirs"
+kde_incdirs="$ac_kde_includes $kde_incdirs"
+AC_FIND_FILE($kde_check_header, $kde_incdirs, kde_incdir)
+ac_kde_includes="$kde_incdir"
+
+if test -n "$ac_kde_includes" && test ! -r "$ac_kde_includes/$kde_check_header"; then
+ AC_MSG_ERROR([
+in the prefix, you've chosen, are no KDE headers installed. This will fail.
+So, check this please and use another prefix!])
+fi
+
+kde_libdirs="$kde_libs_prefix/lib${kdelibsuff} /usr/lib/kde/lib${kdelibsuff} /usr/local/kde/lib${kdelibsuff} /usr/kde/lib${kdelibsuff} /usr/lib${kdelibsuff}/kde /usr/lib${kdelibsuff}/kde3 /usr/lib${kdelibsuff} /usr/X11R6/lib${kdelibsuff} /usr/local/lib${kdelibsuff} /opt/kde3/lib${kdelibsuff} /opt/kde/lib${kdelibsuff} /usr/X11R6/kde/lib${kdelibsuff}"
+test -n "$KDEDIR" && kde_libdirs="$KDEDIR/lib${kdelibsuff} $KDEDIR $kde_libdirs"
+kde_libdirs="$ac_kde_libraries $libdir $kde_libdirs"
+AC_FIND_FILE($kde_check_lib, $kde_libdirs, kde_libdir)
+ac_kde_libraries="$kde_libdir"
+
+kde_widgetdir=NO
+dnl this might be somewhere else
+AC_FIND_FILE("kde3/plugins/designer/kdewidgets.la", $kde_libdirs, kde_widgetdir)
+
+if test -n "$ac_kde_libraries" && test ! -r "$ac_kde_libraries/$kde_check_lib"; then
+AC_MSG_ERROR([
+in the prefix, you've chosen, are no KDE libraries installed. This will fail.
+So, check this please and use another prefix!])
+fi
+
+if test -n "$kde_widgetdir" && test ! -r "$kde_widgetdir/kde3/plugins/designer/kdewidgets.la"; then
+AC_MSG_ERROR([
+I can't find the designer plugins. These are required and should have been installed
+by kdelibs])
+fi
+
+if test -n "$kde_widgetdir"; then
+ kde_widgetdir="$kde_widgetdir/kde3/plugins/designer"
+fi
+
+
+if test "$ac_kde_includes" = NO || test "$ac_kde_libraries" = NO || test "$kde_widgetdir" = NO; then
+ ac_cv_have_kde="have_kde=no"
+else
+ ac_cv_have_kde="have_kde=yes \
+ ac_kde_includes=$ac_kde_includes ac_kde_libraries=$ac_kde_libraries"
+fi
+
+else dnl test -z $1, e.g. from kdelibs
+
+ ac_cv_have_kde="have_kde=no"
+
+fi
+])dnl
+
+eval "$ac_cv_have_kde"
+
+if test "$have_kde" != "yes"; then
+ if test "${prefix}" = NONE; then
+ ac_kde_prefix="$ac_default_prefix"
+ else
+ ac_kde_prefix="$prefix"
+ fi
+ if test "$exec_prefix" = NONE; then
+ ac_kde_exec_prefix="$ac_kde_prefix"
+ AC_MSG_RESULT([will be installed in $ac_kde_prefix])
+ else
+ ac_kde_exec_prefix="$exec_prefix"
+ AC_MSG_RESULT([will be installed in $ac_kde_prefix and $ac_kde_exec_prefix])
+ fi
+
+ kde_libraries="${libdir}"
+ kde_includes="${includedir}"
+
+else
+ ac_cv_have_kde="have_kde=yes \
+ ac_kde_includes=$ac_kde_includes ac_kde_libraries=$ac_kde_libraries"
+ AC_MSG_RESULT([libraries $ac_kde_libraries, headers $ac_kde_includes])
+
+ kde_libraries="$ac_kde_libraries"
+ kde_includes="$ac_kde_includes"
+fi
+AC_SUBST(kde_libraries)
+AC_SUBST(kde_includes)
+
+if test "$kde_includes" = "$x_includes" || test "$kde_includes" = "$qt_includes" || test "$kde_includes" = "/usr/include"; then
+ KDE_INCLUDES=""
+else
+ KDE_INCLUDES="-I$kde_includes"
+ all_includes="$KDE_INCLUDES $all_includes"
+fi
+
+KDE_DEFAULT_CXXFLAGS="-DQT_CLEAN_NAMESPACE -DQT_NO_ASCII_CAST -DQT_NO_STL -DQT_NO_COMPAT -DQT_NO_TRANSLATION"
+
+KDE_LDFLAGS="-L$kde_libraries"
+if test ! "$kde_libraries" = "$x_libraries" && test ! "$kde_libraries" = "$qt_libraries" ; then
+ all_libraries="$KDE_LDFLAGS $all_libraries"
+fi
+
+AC_SUBST(KDE_LDFLAGS)
+AC_SUBST(KDE_INCLUDES)
+
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+
+all_libraries="$all_libraries $USER_LDFLAGS"
+all_includes="$all_includes $USER_INCLUDES"
+AC_SUBST(all_includes)
+AC_SUBST(all_libraries)
+
+if test -z "$1"; then
+KDE_CHECK_UIC_PLUGINS
+fi
+
+ac_kde_libraries="$kde_libdir"
+
+AC_SUBST(AUTODIRS)
+
+
+])
+
+AC_DEFUN([KDE_CHECK_EXTRA_LIBS],
+[
+AC_MSG_CHECKING(for extra includes)
+AC_ARG_WITH(extra-includes,AC_HELP_STRING([--with-extra-includes=DIR],[adds non standard include paths]),
+ kde_use_extra_includes="$withval",
+ kde_use_extra_includes=NONE
+)
+kde_extra_includes=
+if test -n "$kde_use_extra_includes" && \
+ test "$kde_use_extra_includes" != "NONE"; then
+
+ ac_save_ifs=$IFS
+ IFS=':'
+ for dir in $kde_use_extra_includes; do
+ kde_extra_includes="$kde_extra_includes $dir"
+ USER_INCLUDES="$USER_INCLUDES -I$dir"
+ done
+ IFS=$ac_save_ifs
+ kde_use_extra_includes="added"
+else
+ kde_use_extra_includes="no"
+fi
+AC_SUBST(USER_INCLUDES)
+
+AC_MSG_RESULT($kde_use_extra_includes)
+
+kde_extra_libs=
+AC_MSG_CHECKING(for extra libs)
+AC_ARG_WITH(extra-libs,AC_HELP_STRING([--with-extra-libs=DIR],[adds non standard library paths]),
+ kde_use_extra_libs=$withval,
+ kde_use_extra_libs=NONE
+)
+if test -n "$kde_use_extra_libs" && \
+ test "$kde_use_extra_libs" != "NONE"; then
+
+ ac_save_ifs=$IFS
+ IFS=':'
+ for dir in $kde_use_extra_libs; do
+ kde_extra_libs="$kde_extra_libs $dir"
+ KDE_EXTRA_RPATH="$KDE_EXTRA_RPATH -R $dir"
+ USER_LDFLAGS="$USER_LDFLAGS -L$dir"
+ done
+ IFS=$ac_save_ifs
+ kde_use_extra_libs="added"
+else
+ kde_use_extra_libs="no"
+fi
+
+AC_SUBST(USER_LDFLAGS)
+
+AC_MSG_RESULT($kde_use_extra_libs)
+
+])
+
+AC_DEFUN([KDE_1_CHECK_PATH_HEADERS],
+[
+ AC_MSG_CHECKING([for KDE headers installed])
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+cat > conftest.$ac_ext <<EOF
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+#endif
+#include <stdio.h>
+#include "confdefs.h"
+#include <kapp.h>
+
+int main() {
+ printf("kde_htmldir=\\"%s\\"\n", KApplication::kde_htmldir().data());
+ printf("kde_appsdir=\\"%s\\"\n", KApplication::kde_appsdir().data());
+ printf("kde_icondir=\\"%s\\"\n", KApplication::kde_icondir().data());
+ printf("kde_sounddir=\\"%s\\"\n", KApplication::kde_sounddir().data());
+ printf("kde_datadir=\\"%s\\"\n", KApplication::kde_datadir().data());
+ printf("kde_locale=\\"%s\\"\n", KApplication::kde_localedir().data());
+ printf("kde_cgidir=\\"%s\\"\n", KApplication::kde_cgidir().data());
+ printf("kde_confdir=\\"%s\\"\n", KApplication::kde_configdir().data());
+ printf("kde_mimedir=\\"%s\\"\n", KApplication::kde_mimedir().data());
+ printf("kde_toolbardir=\\"%s\\"\n", KApplication::kde_toolbardir().data());
+ printf("kde_wallpaperdir=\\"%s\\"\n",
+ KApplication::kde_wallpaperdir().data());
+ printf("kde_bindir=\\"%s\\"\n", KApplication::kde_bindir().data());
+ printf("kde_partsdir=\\"%s\\"\n", KApplication::kde_partsdir().data());
+ printf("kde_servicesdir=\\"/tmp/dummy\\"\n");
+ printf("kde_servicetypesdir=\\"/tmp/dummy\\"\n");
+ printf("kde_moduledir=\\"/tmp/dummy\\"\n");
+ printf("kde_styledir=\\"/tmp/dummy\\"\n");
+ printf("kde_widgetdir=\\"/tmp/dummy\\"\n");
+ printf("xdg_appsdir=\\"/tmp/dummy\\"\n");
+ printf("xdg_menudir=\\"/tmp/dummy\\"\n");
+ printf("xdg_directorydir=\\"/tmp/dummy\\"\n");
+ printf("kde_kcfgdir=\\"/tmp/dummy\\"\n");
+ return 0;
+ }
+EOF
+
+ ac_save_CPPFLAGS=$CPPFLAGS
+ CPPFLAGS="$all_includes $CPPFLAGS"
+ if AC_TRY_EVAL(ac_compile); then
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_ERROR([your system is not able to compile a small KDE application!
+Check, if you installed the KDE header files correctly.
+For more details about this problem, look at the end of config.log.])
+ fi
+ CPPFLAGS=$ac_save_CPPFLAGS
+
+ AC_LANG_RESTORE
+])
+
+AC_DEFUN([KDE_CHECK_KDEQTADDON],
+[
+AC_MSG_CHECKING(for kde-qt-addon)
+AC_CACHE_VAL(kde_cv_have_kdeqtaddon,
+[
+ kde_ldflags_safe="$LDFLAGS"
+ kde_libs_safe="$LIBS"
+ kde_cxxflags_safe="$CXXFLAGS"
+
+ LIBS="-lkde-qt-addon $LIBQT $LIBS"
+ CXXFLAGS="$CXXFLAGS -I$prefix/include -I$prefix/include/kde $all_includes"
+ LDFLAGS="$LDFLAGS $all_libraries $USER_LDFLAGS"
+
+ AC_TRY_LINK([
+ #include <qdom.h>
+ ],
+ [
+ QDomDocument doc;
+ ],
+ kde_cv_have_kdeqtaddon=yes,
+ kde_cv_have_kdeqtaddon=no
+ )
+
+ LDFLAGS=$kde_ldflags_safe
+ LIBS=$kde_libs_safe
+ CXXFLAGS=$kde_cxxflags_safe
+])
+
+AC_MSG_RESULT($kde_cv_have_kdeqtaddon)
+
+if test "$kde_cv_have_kdeqtaddon" = "no"; then
+ AC_MSG_ERROR([Can't find libkde-qt-addon. You need to install it first.
+It is a separate package (and CVS module) named kde-qt-addon.])
+fi
+])
+
+AC_DEFUN([KDE_CREATE_LIBS_ALIASES],
+[
+ AC_REQUIRE([KDE_MISC_TESTS])
+ AC_REQUIRE([KDE_CHECK_LIBDL])
+ AC_REQUIRE([K_PATH_X])
+
+if test $kde_qtver = 3; then
+ case $host in
+ *cygwin*) lib_kded="-lkdeinit_kded" ;;
+ *) lib_kded="" ;;
+ esac
+ AC_SUBST(LIB_KDED, $lib_kded)
+ AC_SUBST(LIB_KDECORE, "-lkdecore")
+ AC_SUBST(LIB_KDEUI, "-lkdeui")
+ AC_SUBST(LIB_KIO, "-lkio")
+ AC_SUBST(LIB_KJS, "-lkjs")
+ AC_SUBST(LIB_SMB, "-lsmb")
+ AC_SUBST(LIB_KAB, "-lkab")
+ AC_SUBST(LIB_KABC, "-lkabc")
+ AC_SUBST(LIB_KHTML, "-lkhtml")
+ AC_SUBST(LIB_KSPELL, "-lkspell")
+ AC_SUBST(LIB_KPARTS, "-lkparts")
+ AC_SUBST(LIB_KDEPRINT, "-lkdeprint")
+ AC_SUBST(LIB_KUTILS, "-lkutils")
+ AC_SUBST(LIB_KDEPIM, "-lkdepim")
+ AC_SUBST(LIB_KIMPROXY, "-lkimproxy")
+ AC_SUBST(LIB_KNEWSTUFF, "-lknewstuff")
+ AC_SUBST(LIB_KDNSSD, "-lkdnssd")
+ AC_SUBST(LIB_KUNITTEST, "-lkunittest")
+# these are for backward compatibility
+ AC_SUBST(LIB_KSYCOCA, "-lkio")
+ AC_SUBST(LIB_KFILE, "-lkio")
+elif test $kde_qtver = 2; then
+ AC_SUBST(LIB_KDECORE, "-lkdecore")
+ AC_SUBST(LIB_KDEUI, "-lkdeui")
+ AC_SUBST(LIB_KIO, "-lkio")
+ AC_SUBST(LIB_KSYCOCA, "-lksycoca")
+ AC_SUBST(LIB_SMB, "-lsmb")
+ AC_SUBST(LIB_KFILE, "-lkfile")
+ AC_SUBST(LIB_KAB, "-lkab")
+ AC_SUBST(LIB_KHTML, "-lkhtml")
+ AC_SUBST(LIB_KSPELL, "-lkspell")
+ AC_SUBST(LIB_KPARTS, "-lkparts")
+ AC_SUBST(LIB_KDEPRINT, "-lkdeprint")
+else
+ AC_SUBST(LIB_KDECORE, "-lkdecore -lXext $(LIB_QT)")
+ AC_SUBST(LIB_KDEUI, "-lkdeui $(LIB_KDECORE)")
+ AC_SUBST(LIB_KFM, "-lkfm $(LIB_KDECORE)")
+ AC_SUBST(LIB_KFILE, "-lkfile $(LIB_KFM) $(LIB_KDEUI)")
+ AC_SUBST(LIB_KAB, "-lkab $(LIB_KIMGIO) $(LIB_KDECORE)")
+fi
+])
+
+AC_DEFUN([AC_PATH_KDE],
+[
+ AC_BASE_PATH_KDE
+ AC_ARG_ENABLE(path-check,AC_HELP_STRING([--disable-path-check],[don't try to find out, where to install]),
+ [
+ if test "$enableval" = "no";
+ then ac_use_path_checking="default"
+ else ac_use_path_checking=""
+ fi
+ ],
+ [
+ if test "$kde_qtver" = 1;
+ then ac_use_path_checking=""
+ else ac_use_path_checking="default"
+ fi
+ ]
+ )
+
+ AC_CREATE_KFSSTND($ac_use_path_checking)
+
+ AC_SUBST_KFSSTND
+ KDE_CREATE_LIBS_ALIASES
+])
+
+dnl KDE_CHECK_FUNC_EXT(<func>, [headers], [sample-use], [C prototype], [autoheader define], [call if found])
+AC_DEFUN([KDE_CHECK_FUNC_EXT],
+[
+AC_MSG_CHECKING(for $1)
+AC_CACHE_VAL(kde_cv_func_$1,
+[
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+save_CXXFLAGS="$CXXFLAGS"
+kde_safe_LIBS="$LIBS"
+LIBS="$LIBS $X_EXTRA_LIBS"
+if test "$GXX" = "yes"; then
+CXXFLAGS="$CXXFLAGS -pedantic-errors"
+fi
+AC_TRY_COMPILE([
+$2
+],
+[
+$3
+],
+kde_cv_func_$1=yes,
+kde_cv_func_$1=no)
+CXXFLAGS="$save_CXXFLAGS"
+LIBS="$kde_safe_LIBS"
+AC_LANG_RESTORE
+])
+
+AC_MSG_RESULT($kde_cv_func_$1)
+
+AC_MSG_CHECKING([if $1 needs custom prototype])
+AC_CACHE_VAL(kde_cv_proto_$1,
+[
+if test "x$kde_cv_func_$1" = xyes; then
+ kde_cv_proto_$1=no
+else
+ case "$1" in
+ setenv|unsetenv|usleep|random|srandom|seteuid|mkstemps|mkstemp|revoke|vsnprintf|strlcpy|strlcat)
+ kde_cv_proto_$1="yes - in libkdefakes"
+ ;;
+ *)
+ kde_cv_proto_$1=unknown
+ ;;
+ esac
+fi
+
+if test "x$kde_cv_proto_$1" = xunknown; then
+
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+ kde_safe_libs=$LIBS
+ LIBS="$LIBS $X_EXTRA_LIBS"
+ AC_TRY_LINK([
+$2
+
+extern "C" $4;
+],
+[
+$3
+],
+[ kde_cv_func_$1=yes
+ kde_cv_proto_$1=yes ],
+ [kde_cv_proto_$1="$1 unavailable"]
+)
+LIBS=$kde_safe_libs
+AC_LANG_RESTORE
+fi
+])
+AC_MSG_RESULT($kde_cv_proto_$1)
+
+if test "x$kde_cv_func_$1" = xyes; then
+ AC_DEFINE(HAVE_$5, 1, [Define if you have $1])
+ $6
+fi
+if test "x$kde_cv_proto_$1" = xno; then
+ AC_DEFINE(HAVE_$5_PROTO, 1,
+ [Define if you have the $1 prototype])
+fi
+
+AH_VERBATIM([_HAVE_$5_PROTO],
+[
+#if !defined(HAVE_$5_PROTO)
+#ifdef __cplusplus
+extern "C" {
+#endif
+$4;
+#ifdef __cplusplus
+}
+#endif
+#endif
+])
+])
+
+AC_DEFUN([AC_CHECK_SETENV],
+[
+ KDE_CHECK_FUNC_EXT(setenv, [
+#include <stdlib.h>
+],
+ [setenv("VAR", "VALUE", 1);],
+ [int setenv (const char *, const char *, int)],
+ [SETENV])
+])
+
+AC_DEFUN([AC_CHECK_UNSETENV],
+[
+ KDE_CHECK_FUNC_EXT(unsetenv, [
+#include <stdlib.h>
+],
+ [unsetenv("VAR");],
+ [void unsetenv (const char *)],
+ [UNSETENV])
+])
+
+AC_DEFUN([AC_CHECK_GETDOMAINNAME],
+[
+ KDE_CHECK_FUNC_EXT(getdomainname, [
+#include <stdlib.h>
+#include <unistd.h>
+#include <netdb.h>
+],
+ [
+char buffer[200];
+getdomainname(buffer, 200);
+],
+ [#include <sys/types.h>
+ int getdomainname (char *, size_t)],
+ [GETDOMAINNAME])
+])
+
+AC_DEFUN([AC_CHECK_GETHOSTNAME],
+[
+ KDE_CHECK_FUNC_EXT(gethostname, [
+#include <stdlib.h>
+#include <unistd.h>
+],
+ [
+char buffer[200];
+gethostname(buffer, 200);
+],
+ [int gethostname (char *, unsigned int)],
+ [GETHOSTNAME])
+])
+
+AC_DEFUN([AC_CHECK_USLEEP],
+[
+ KDE_CHECK_FUNC_EXT(usleep, [
+#include <unistd.h>
+],
+ [
+usleep(200);
+],
+ [int usleep (unsigned int)],
+ [USLEEP])
+])
+
+
+AC_DEFUN([AC_CHECK_RANDOM],
+[
+ KDE_CHECK_FUNC_EXT(random, [
+#include <stdlib.h>
+],
+ [
+random();
+],
+ [long int random(void)],
+ [RANDOM])
+
+ KDE_CHECK_FUNC_EXT(srandom, [
+#include <stdlib.h>
+],
+ [
+srandom(27);
+],
+ [void srandom(unsigned int)],
+ [SRANDOM])
+
+])
+
+AC_DEFUN([AC_CHECK_INITGROUPS],
+[
+ KDE_CHECK_FUNC_EXT(initgroups, [
+#include <sys/types.h>
+#include <unistd.h>
+#include <grp.h>
+],
+ [
+char buffer[200];
+initgroups(buffer, 27);
+],
+ [int initgroups(const char *, gid_t)],
+ [INITGROUPS])
+])
+
+AC_DEFUN([AC_CHECK_MKSTEMPS],
+[
+ KDE_CHECK_FUNC_EXT(mkstemps, [
+#include <stdlib.h>
+#include <unistd.h>
+],
+ [
+mkstemps("/tmp/aaaXXXXXX", 6);
+],
+ [int mkstemps(char *, int)],
+ [MKSTEMPS])
+])
+
+AC_DEFUN([AC_CHECK_MKSTEMP],
+[
+ KDE_CHECK_FUNC_EXT(mkstemp, [
+#include <stdlib.h>
+#include <unistd.h>
+],
+ [
+mkstemp("/tmp/aaaXXXXXX");
+],
+ [int mkstemp(char *)],
+ [MKSTEMP])
+])
+
+AC_DEFUN([AC_CHECK_MKDTEMP],
+[
+ KDE_CHECK_FUNC_EXT(mkdtemp, [
+#include <stdlib.h>
+#include <unistd.h>
+],
+ [
+mkdtemp("/tmp/aaaXXXXXX");
+],
+ [char *mkdtemp(char *)],
+ [MKDTEMP])
+])
+
+
+AC_DEFUN([AC_CHECK_RES_INIT],
+[
+ AC_MSG_CHECKING([if res_init needs -lresolv])
+ kde_libs_safe="$LIBS"
+ LIBS="$LIBS $X_EXTRA_LIBS -lresolv"
+ AC_TRY_LINK(
+ [
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+ ],
+ [
+ res_init();
+ ],
+ [
+ LIBRESOLV="-lresolv"
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_RES_INIT, 1, [Define if you have the res_init function])
+ ],
+ [ AC_MSG_RESULT(no) ]
+ )
+ LIBS=$kde_libs_safe
+ AC_SUBST(LIBRESOLV)
+
+ KDE_CHECK_FUNC_EXT(res_init,
+ [
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+ ],
+ [res_init()],
+ [int res_init(void)],
+ [RES_INIT])
+])
+
+AC_DEFUN([AC_CHECK_STRLCPY],
+[
+ KDE_CHECK_FUNC_EXT(strlcpy, [
+#include <string.h>
+],
+[ char buf[20];
+ strlcpy(buf, "KDE function test", sizeof(buf));
+],
+ [unsigned long strlcpy(char*, const char*, unsigned long)],
+ [STRLCPY])
+])
+
+AC_DEFUN([AC_CHECK_STRLCAT],
+[
+ KDE_CHECK_FUNC_EXT(strlcat, [
+#include <string.h>
+],
+[ char buf[20];
+ buf[0]='\0';
+ strlcat(buf, "KDE function test", sizeof(buf));
+],
+ [unsigned long strlcat(char*, const char*, unsigned long)],
+ [STRLCAT])
+])
+
+AC_DEFUN([AC_CHECK_RES_QUERY],
+[
+ KDE_CHECK_FUNC_EXT(res_query, [
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+#include <netdb.h>
+],
+[
+res_query(NULL, 0, 0, NULL, 0);
+],
+ [int res_query(const char *, int, int, unsigned char *, int)],
+ [RES_QUERY])
+])
+
+AC_DEFUN([AC_CHECK_DN_SKIPNAME],
+[
+ KDE_CHECK_FUNC_EXT(dn_skipname, [
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+],
+[
+dn_skipname (NULL, NULL);
+],
+ [int dn_skipname (unsigned char *, unsigned char *)],
+ [DN_SKIPNAME])
+])
+
+
+AC_DEFUN([AC_FIND_GIF],
+ [AC_MSG_CHECKING([for giflib])
+AC_CACHE_VAL(ac_cv_lib_gif,
+[ac_save_LIBS="$LIBS"
+if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+LIBS="$all_libraries -lgif -lX11 $LIBSOCKET"
+else
+LIBS="$all_libraries -lgif"
+fi
+AC_TRY_LINK(dnl
+[
+#ifdef __cplusplus
+extern "C" {
+#endif
+int GifLastError(void);
+#ifdef __cplusplus
+}
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+],
+ [return GifLastError();],
+ eval "ac_cv_lib_gif=yes",
+ eval "ac_cv_lib_gif=no")
+LIBS="$ac_save_LIBS"
+])dnl
+if eval "test \"`echo $ac_cv_lib_gif`\" = yes"; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE_UNQUOTED(HAVE_LIBGIF, 1, [Define if you have libgif])
+else
+ AC_MSG_ERROR(You need giflib30. Please install the kdesupport package)
+fi
+])
+
+AC_DEFUN([KDE_FIND_JPEG_HELPER],
+[
+AC_MSG_CHECKING([for libjpeg$2])
+AC_CACHE_VAL(ac_cv_lib_jpeg_$1,
+[
+ac_save_LIBS="$LIBS"
+LIBS="$all_libraries $USER_LDFLAGS -ljpeg$2 -lm"
+ac_save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $all_includes $USER_INCLUDES"
+AC_TRY_LINK(
+[
+#ifdef __cplusplus
+extern "C" {
+#endif
+void jpeg_CreateDecompress();
+#ifdef __cplusplus
+}
+#endif
+],
+[jpeg_CreateDecompress();],
+ eval "ac_cv_lib_jpeg_$1=-ljpeg$2",
+ eval "ac_cv_lib_jpeg_$1=no")
+LIBS="$ac_save_LIBS"
+CFLAGS="$ac_save_CFLAGS"
+])
+
+if eval "test ! \"`echo $ac_cv_lib_jpeg_$1`\" = no"; then
+ LIBJPEG="$ac_cv_lib_jpeg_$1"
+ AC_MSG_RESULT($ac_cv_lib_jpeg_$1)
+else
+ AC_MSG_RESULT(no)
+ $3
+fi
+
+])
+
+AC_DEFUN([AC_FIND_JPEG],
+[
+dnl first look for libraries
+KDE_FIND_JPEG_HELPER(6b, 6b,
+ KDE_FIND_JPEG_HELPER(normal, [],
+ [
+ LIBJPEG=
+ ]
+ )
+)
+
+dnl then search the headers (can't use simply AC_TRY_xxx, as jpeglib.h
+dnl requires system dependent includes loaded before it)
+jpeg_incdirs="$includedir /usr/include /usr/local/include $kde_extra_includes"
+AC_FIND_FILE(jpeglib.h, $jpeg_incdirs, jpeg_incdir)
+test "x$jpeg_incdir" = xNO && jpeg_incdir=
+
+dnl if headers _and_ libraries are missing, this is no error, and we
+dnl continue with a warning (the user will get no jpeg support in khtml)
+dnl if only one is missing, it means a configuration error, but we still
+dnl only warn
+if test -n "$jpeg_incdir" && test -n "$LIBJPEG" ; then
+ AC_DEFINE_UNQUOTED(HAVE_LIBJPEG, 1, [Define if you have libjpeg])
+else
+ if test -n "$jpeg_incdir" || test -n "$LIBJPEG" ; then
+ AC_MSG_WARN([
+There is an installation error in jpeg support. You seem to have only one
+of either the headers _or_ the libraries installed. You may need to either
+provide correct --with-extra-... options, or the development package of
+libjpeg6b. You can get a source package of libjpeg from http://www.ijg.org/
+Disabling JPEG support.
+])
+ else
+ AC_MSG_WARN([libjpeg not found. disable JPEG support.])
+ fi
+ jpeg_incdir=
+ LIBJPEG=
+fi
+
+AC_SUBST(LIBJPEG)
+AH_VERBATIM(_AC_CHECK_JPEG,
+[/*
+ * jpeg.h needs HAVE_BOOLEAN, when the system uses boolean in system
+ * headers and I'm too lazy to write a configure test as long as only
+ * unixware is related
+ */
+#ifdef _UNIXWARE
+#define HAVE_BOOLEAN
+#endif
+])
+])
+
+AC_DEFUN([KDE_CHECK_QT_JPEG],
+[
+if test -n "$LIBJPEG"; then
+AC_MSG_CHECKING([if Qt needs $LIBJPEG])
+AC_CACHE_VAL(kde_cv_qt_jpeg,
+[
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+ac_save_LIBS="$LIBS"
+LIBS="$all_libraries $USER_LDFLAGS $LIBQT"
+LIBS=`echo $LIBS | sed "s/$LIBJPEG//"`
+ac_save_CXXFLAGS="$CXXFLAGS"
+CXXFLAGS="$CXXFLAGS $all_includes $USER_INCLUDES"
+AC_TRY_LINK(
+[#include <qapplication.h>],
+ [
+ int argc;
+ char** argv;
+ QApplication app(argc, argv);],
+ eval "kde_cv_qt_jpeg=no",
+ eval "kde_cv_qt_jpeg=yes")
+LIBS="$ac_save_LIBS"
+CXXFLAGS="$ac_save_CXXFLAGS"
+AC_LANG_RESTORE
+fi
+])
+
+if eval "test ! \"`echo $kde_cv_qt_jpeg`\" = no"; then
+ AC_MSG_RESULT(yes)
+ LIBJPEG_QT='$(LIBJPEG)'
+else
+ AC_MSG_RESULT(no)
+ LIBJPEG_QT=
+fi
+
+])
+
+AC_DEFUN([AC_FIND_ZLIB],
+[
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+AC_MSG_CHECKING([for libz])
+AC_CACHE_VAL(ac_cv_lib_z,
+[
+kde_save_LIBS="$LIBS"
+LIBS="$all_libraries $USER_LDFLAGS -lz $LIBSOCKET"
+kde_save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $all_includes $USER_INCLUDES"
+AC_TRY_LINK(dnl
+[
+#include<zlib.h>
+],
+[
+ char buf[42];
+ gzFile f = (gzFile) 0;
+ /* this would segfault.. but we only link, don't run */
+ (void) gzgets(f, buf, sizeof(buf));
+
+ return (zlibVersion() == ZLIB_VERSION);
+],
+ eval "ac_cv_lib_z='-lz'",
+ eval "ac_cv_lib_z=no")
+LIBS="$kde_save_LIBS"
+CFLAGS="$kde_save_CFLAGS"
+])dnl
+if test ! "$ac_cv_lib_z" = no; then
+ AC_DEFINE_UNQUOTED(HAVE_LIBZ, 1, [Define if you have libz])
+ LIBZ="$ac_cv_lib_z"
+ AC_MSG_RESULT($ac_cv_lib_z)
+else
+ AC_MSG_ERROR(not found.
+ Possibly configure picks up an outdated version
+ installed by XFree86. Remove it from your system.
+
+ Check your installation and look into config.log)
+ LIBZ=""
+fi
+AC_SUBST(LIBZ)
+])
+
+AC_DEFUN([KDE_TRY_TIFFLIB],
+[
+AC_MSG_CHECKING([for libtiff $1])
+
+AC_CACHE_VAL(kde_cv_libtiff_$1,
+[
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+kde_save_LIBS="$LIBS"
+if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+LIBS="$all_libraries $USER_LDFLAGS -l$1 $LIBJPEG $LIBZ -lX11 $LIBSOCKET -lm"
+else
+LIBS="$all_libraries $USER_LDFLAGS -l$1 $LIBJPEG $LIBZ -lm"
+fi
+kde_save_CXXFLAGS="$CXXFLAGS"
+CXXFLAGS="$CXXFLAGS $all_includes $USER_INCLUDES"
+
+AC_TRY_LINK(dnl
+[
+#include<tiffio.h>
+],
+ [return (TIFFOpen( "", "r") == 0); ],
+[
+ kde_cv_libtiff_$1="-l$1 $LIBJPEG $LIBZ"
+], [
+ kde_cv_libtiff_$1=no
+])
+
+LIBS="$kde_save_LIBS"
+CXXFLAGS="$kde_save_CXXFLAGS"
+AC_LANG_RESTORE
+])
+
+if test "$kde_cv_libtiff_$1" = "no"; then
+ AC_MSG_RESULT(no)
+ LIBTIFF=""
+ $3
+else
+ LIBTIFF="$kde_cv_libtiff_$1"
+ AC_MSG_RESULT(yes)
+ AC_DEFINE_UNQUOTED(HAVE_LIBTIFF, 1, [Define if you have libtiff])
+ $2
+fi
+
+])
+
+AC_DEFUN([AC_FIND_TIFF],
+[
+AC_REQUIRE([K_PATH_X])
+AC_REQUIRE([AC_FIND_ZLIB])
+AC_REQUIRE([AC_FIND_JPEG])
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+
+KDE_TRY_TIFFLIB(tiff, [],
+ KDE_TRY_TIFFLIB(tiff34))
+
+AC_SUBST(LIBTIFF)
+])
+
+AC_DEFUN([KDE_FIND_LIBEXR],
+[
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+AC_REQUIRE([AC_FIND_ZLIB])
+AC_CACHE_VAL(ac_cv_libexr,
+[
+ if test -z "$PKG_CONFIG"; then
+ AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+ fi
+
+ AC_MSG_CHECKING([for OpenEXR libraries])
+
+ if test "$PKG_CONFIG" = "no" ; then
+ AC_MSG_RESULT(no)
+ echo "*** The pkg-config script could not be found. Make sure it is"
+ echo "*** in your path, or set the PKG_CONFIG environment variable"
+ echo "*** to the full path to pkg-config."
+ echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
+ else
+ if !(`$PKG_CONFIG --exists OpenEXR`) ; then
+ AC_MSG_RESULT(no)
+ EXRSTATUS=no
+ else
+ if !(`$PKG_CONFIG --atleast-version="1.1.1" OpenEXR`) ; then
+ AC_MSG_RESULT(no)
+ EXRSTATUS=old
+ else
+ kde_save_LIBS="$LIBS"
+ LIBS="$LIBS $all_libraries $USER_LDFLAGS $LIBZ `pkg-config --libs OpenEXR`"
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ kde_save_CXXFLAGS="$CXXFLAGS"
+ EXR_FLAGS=`$PKG_CONFIG --cflags OpenEXR`
+ CXXFLAGS="$CXXFLAGS $all_includes $USER_INCLUDES $EXR_FLAGS"
+
+ AC_TRY_LINK(dnl
+ [
+ #include <ImfRgbaFile.h>
+ ],
+ [
+ using namespace Imf;
+ RgbaInputFile file ("dummy");
+ return 0;
+ ],
+ eval "ac_cv_libexr='`pkg-config --libs OpenEXR`'",
+ eval "ac_cv_libexr=no"
+ )
+ LIBS="$kde_save_LIBS"
+ CXXFLAGS="$kde_save_CXXFLAGS"
+ AC_LANG_RESTORE
+ ])dnl
+ if eval "test ! \"`echo $ac_cv_libexr`\" = no"; then
+ AC_DEFINE_UNQUOTED(HAVE_EXR, 1, [Define if you have OpenEXR])
+ LIB_EXR="$ac_cv_libexr"
+ AC_MSG_RESULT($ac_cv_libexr)
+ else
+ AC_MSG_RESULT(no)
+ LIB_EXR=""
+ fi
+ fi
+ fi
+ fi
+ AC_SUBST(LIB_EXR)
+ AC_SUBST(EXR_FLAGS)
+])
+
+
+
+AC_DEFUN([AC_FIND_PNG],
+[
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+AC_REQUIRE([AC_FIND_ZLIB])
+AC_MSG_CHECKING([for libpng])
+AC_CACHE_VAL(ac_cv_lib_png,
+[
+kde_save_LIBS="$LIBS"
+if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+LIBS="$LIBS $all_libraries $USER_LDFLAGS -lpng $LIBZ -lm -lX11 $LIBSOCKET"
+else
+LIBS="$LIBS $all_libraries $USER_LDFLAGS -lpng $LIBZ -lm"
+fi
+kde_save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $all_includes $USER_INCLUDES"
+
+AC_TRY_LINK(dnl
+ [
+ #include<png.h>
+ ],
+ [
+ png_structp png_ptr = png_create_read_struct( /* image ptr */
+ PNG_LIBPNG_VER_STRING, 0, 0, 0 );
+ return( png_ptr != 0 );
+ ],
+ eval "ac_cv_lib_png='-lpng $LIBZ -lm'",
+ eval "ac_cv_lib_png=no"
+)
+LIBS="$kde_save_LIBS"
+CFLAGS="$kde_save_CFLAGS"
+])dnl
+if eval "test ! \"`echo $ac_cv_lib_png`\" = no"; then
+ AC_DEFINE_UNQUOTED(HAVE_LIBPNG, 1, [Define if you have libpng])
+ LIBPNG="$ac_cv_lib_png"
+ AC_SUBST(LIBPNG)
+ AC_MSG_RESULT($ac_cv_lib_png)
+else
+ AC_MSG_RESULT(no)
+ LIBPNG=""
+ AC_SUBST(LIBPNG)
+fi
+])
+
+
+AC_DEFUN([AC_FIND_JASPER],
+[
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+AC_REQUIRE([AC_FIND_JPEG])
+AC_MSG_CHECKING([for jasper])
+AC_CACHE_VAL(ac_cv_jasper,
+[
+kde_save_LIBS="$LIBS"
+LIBS="$LIBS $all_libraries $USER_LDFLAGS -ljasper $LIBJPEG -lm"
+kde_save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $all_includes $USER_INCLUDES"
+
+AC_TRY_LINK(dnl
+ [
+ #include<jasper/jasper.h>
+ ],
+ [
+ return( jas_init() );
+ ],
+ eval "ac_cv_jasper='-ljasper $LIBJPEG -lm'",
+ eval "ac_cv_jasper=no"
+)
+LIBS="$kde_save_LIBS"
+CFLAGS="$kde_save_CFLAGS"
+])dnl
+if eval "test ! \"`echo $ac_cv_jasper`\" = no"; then
+ AC_DEFINE_UNQUOTED(HAVE_JASPER, 1, [Define if you have jasper])
+ LIB_JASPER="$ac_cv_jasper"
+ AC_MSG_RESULT($ac_cv_jasper)
+else
+ AC_MSG_RESULT(no)
+ LIB_JASPER=""
+fi
+AC_SUBST(LIB_JASPER)
+])
+
+AC_DEFUN([AC_CHECK_BOOL],
+[
+ AC_DEFINE_UNQUOTED(HAVE_BOOL, 1, [You _must_ have bool])
+])
+
+AC_DEFUN([AC_CHECK_GNU_EXTENSIONS],
+[
+AC_MSG_CHECKING(if you need GNU extensions)
+AC_CACHE_VAL(ac_cv_gnu_extensions,
+[
+cat > conftest.c << EOF
+#include <features.h>
+
+#ifdef __GNU_LIBRARY__
+yes
+#endif
+EOF
+
+if (eval "$ac_cpp conftest.c") 2>&5 |
+ egrep "yes" >/dev/null 2>&1; then
+ rm -rf conftest*
+ ac_cv_gnu_extensions=yes
+else
+ ac_cv_gnu_extensions=no
+fi
+])
+
+AC_MSG_RESULT($ac_cv_gnu_extensions)
+if test "$ac_cv_gnu_extensions" = "yes"; then
+ AC_DEFINE_UNQUOTED(_GNU_SOURCE, 1, [Define if you need to use the GNU extensions])
+fi
+])
+
+AC_DEFUN([KDE_CHECK_COMPILER_FLAG],
+[
+AC_MSG_CHECKING([whether $CXX supports -$1])
+kde_cache=`echo $1 | sed 'y% .=/+-,%____p__%'`
+AC_CACHE_VAL(kde_cv_prog_cxx_$kde_cache,
+[
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -$1"
+ AC_TRY_LINK([],[ return 0; ], [eval "kde_cv_prog_cxx_$kde_cache=yes"], [])
+ CXXFLAGS="$save_CXXFLAGS"
+ AC_LANG_RESTORE
+])
+if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then
+ AC_MSG_RESULT(yes)
+ :
+ $2
+else
+ AC_MSG_RESULT(no)
+ :
+ $3
+fi
+])
+
+AC_DEFUN([KDE_CHECK_C_COMPILER_FLAG],
+[
+AC_MSG_CHECKING([whether $CC supports -$1])
+kde_cache=`echo $1 | sed 'y% .=/+-,%____p__%'`
+AC_CACHE_VAL(kde_cv_prog_cc_$kde_cache,
+[
+ AC_LANG_SAVE
+ AC_LANG_C
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -$1"
+ AC_TRY_LINK([],[ return 0; ], [eval "kde_cv_prog_cc_$kde_cache=yes"], [])
+ CFLAGS="$save_CFLAGS"
+ AC_LANG_RESTORE
+])
+if eval "test \"`echo '$kde_cv_prog_cc_'$kde_cache`\" = yes"; then
+ AC_MSG_RESULT(yes)
+ :
+ $2
+else
+ AC_MSG_RESULT(no)
+ :
+ $3
+fi
+])
+
+
+dnl AC_REMOVE_FORBIDDEN removes forbidden arguments from variables
+dnl use: AC_REMOVE_FORBIDDEN(CC, [-forbid -bad-option whatever])
+dnl it's all white-space separated
+AC_DEFUN([AC_REMOVE_FORBIDDEN],
+[ __val=$$1
+ __forbid=" $2 "
+ if test -n "$__val"; then
+ __new=""
+ ac_save_IFS=$IFS
+ IFS=" "
+ for i in $__val; do
+ case "$__forbid" in
+ *" $i "*) AC_MSG_WARN([found forbidden $i in $1, removing it]) ;;
+ *) # Careful to not add spaces, where there were none, because otherwise
+ # libtool gets confused, if we change e.g. CXX
+ if test -z "$__new" ; then __new=$i ; else __new="$__new $i" ; fi ;;
+ esac
+ done
+ IFS=$ac_save_IFS
+ $1=$__new
+ fi
+])
+
+
+AC_DEFUN([KDE_CHECK_FOR_BAD_COMPILER],
+[
+ AC_MSG_CHECKING([whether $CC is blacklisted])
+
+ dnl In theory we have tu run this test against $CC and $CXX
+ dnl in C and in C++ mode, because its perfectly legal for
+ dnl the user to mix compiler versions, since C has a defined
+ dnl ABI.
+ dnl
+ dnl For now, we assume the user is not on crack.
+
+ AC_TRY_COMPILE([
+#ifdef __GNUC__
+#if __GNUC__ == 4 && __GNUC_MINOR__ == 0 && __GNUC_PATCHLEVEL__ == 0
+choke me
+#endif
+#endif
+], ,
+ kde_bad_compiler=no,
+ kde_bad_compiler=yes
+)
+
+ AC_MSG_RESULT($kde_bad_compiler)
+
+if test "$kde_bad_compiler" = "yes"; then
+ AC_MSG_ERROR([
+
+This particular compiler version is blacklisted because it
+is known to miscompile KDE. Please use a newer version, or
+if that is not yet available, choose an older version.
+
+Please do not report a bug or bother us reporting this
+configure error. We know about it, and we introduced
+it by intention to avoid untraceable bugs or crashes in KDE.
+
+])
+fi
+
+])
+
+
+AC_DEFUN([KDE_CHECK_FOR_OPT_NOINLINE_MATCH],
+[
+ AC_CACHE_CHECK([whether system headers can cope with -O2 -fno-inline],
+ kde_cv_opt_noinline_match,
+ [
+ kde_cv_opt_noinline_match=irrelevant
+ dnl if we don't use both -O2 and -fno-inline, this check is moot
+ if echo "$CFLAGS" | grep -e -O2 >/dev/null 2>/dev/null \
+ && echo "$CFLAGS" | grep -e -fno-inline >/dev/null 2>/dev/null ; then
+
+ ac_cflags_save="$CFLAGS"
+ CFLAGS="$CFLAGS -D_USE_GNU"
+
+ AC_TRY_LINK([
+ #include <string.h>
+], [ const char *pt, *et;
+ et = __extension__ ({ char __a0, __a1, __a2; (__builtin_constant_p ( ";," ) && ((size_t)(const void *)(( ";," )+ 1) - (size_t)(const void *)( ";," ) == 1) ? ((__a0 =((__const char *) ( ";," ))[0], __a0 == '\0') ? ((void) ( pt ),((void *)0) ) : ((__a1 = ((__const char *) ( ";," ))[1], __a1== '\0') ? (__extension__ (__builtin_constant_p ( __a0 ) && ( __a0 ) == '\0' ? (char *) __rawmemchr ( pt , __a0) : strchr( pt , __a0 ))) : ((__a2 = ((__const char *) ( ";," ))[2], __a2 == '\0') ? __strpbrk_c2 ( pt , __a0, __a1) :(((__const char *) ( ";," ))[3] == '\0' ? __strpbrk_c3 ( pt ,__a0, __a1, __a2): strpbrk ( pt , ";," ))))) : strpbrk ( pt , ";," )); }) ;
+],
+ kde_cv_opt_noinline_match=yes,
+ kde_cv_opt_noinline_match=no
+ )
+
+ CFLAGS="$ac_cflags_save"
+ fi
+ ])
+])
+
+
+dnl AC_VALIDIFY_CXXFLAGS checks for forbidden flags the user may have given
+AC_DEFUN([AC_VALIDIFY_CXXFLAGS],
+[dnl
+if test "x$kde_use_qt_emb" != "xyes"; then
+ AC_REMOVE_FORBIDDEN(CXX, [-fno-rtti -rpath])
+ AC_REMOVE_FORBIDDEN(CXXFLAGS, [-fno-rtti -rpath])
+else
+ AC_REMOVE_FORBIDDEN(CXX, [-rpath])
+ AC_REMOVE_FORBIDDEN(CXXFLAGS, [-rpath])
+fi
+])
+
+AC_DEFUN([AC_CHECK_COMPILERS],
+[
+ AC_ARG_ENABLE(debug,
+ AC_HELP_STRING([--enable-debug=ARG],[enables debug symbols (yes|no|full) [default=no]]),
+ [
+ case $enableval in
+ yes)
+ kde_use_debug_code="yes"
+ kde_use_debug_define=no
+ ;;
+ full)
+ kde_use_debug_code="full"
+ kde_use_debug_define=no
+ ;;
+ *)
+ kde_use_debug_code="no"
+ kde_use_debug_define=yes
+ ;;
+ esac
+ ],
+ [kde_use_debug_code="no"
+ kde_use_debug_define=no
+ ])
+
+ dnl Just for configure --help
+ AC_ARG_ENABLE(dummyoption,
+ AC_HELP_STRING([--disable-debug],
+ [disables debug output and debug symbols [default=no]]),
+ [],[])
+
+ AC_ARG_ENABLE(strict,
+ AC_HELP_STRING([--enable-strict],
+ [compiles with strict compiler options (may not work!)]),
+ [
+ if test $enableval = "no"; then
+ kde_use_strict_options="no"
+ else
+ kde_use_strict_options="yes"
+ fi
+ ], [kde_use_strict_options="no"])
+
+ AC_ARG_ENABLE(warnings,AC_HELP_STRING([--disable-warnings],[disables compilation with -Wall and similar]),
+ [
+ if test $enableval = "no"; then
+ kde_use_warnings="no"
+ else
+ kde_use_warnings="yes"
+ fi
+ ], [kde_use_warnings="yes"])
+
+ dnl enable warnings for debug build
+ if test "$kde_use_debug_code" != "no"; then
+ kde_use_warnings=yes
+ fi
+
+ AC_ARG_ENABLE(profile,AC_HELP_STRING([--enable-profile],[creates profiling infos [default=no]]),
+ [kde_use_profiling=$enableval],
+ [kde_use_profiling="no"]
+ )
+
+ dnl this prevents stupid AC_PROG_CC to add "-g" to the default CFLAGS
+ CFLAGS=" $CFLAGS"
+
+ AC_PROG_CC
+
+ AC_PROG_CPP
+
+ if test "$GCC" = "yes"; then
+ if test "$kde_use_debug_code" != "no"; then
+ if test $kde_use_debug_code = "full"; then
+ CFLAGS="-g3 -fno-inline $CFLAGS"
+ else
+ CFLAGS="-g -O2 -fno-schedule-insns -fno-inline $CFLAGS"
+ fi
+ else
+ CFLAGS="-O2 $CFLAGS"
+ fi
+ fi
+
+ if test "$kde_use_debug_define" = "yes"; then
+ CFLAGS="-DNDEBUG $CFLAGS"
+ fi
+
+
+ case "$host" in
+ *-*-sysv4.2uw*) CFLAGS="-D_UNIXWARE $CFLAGS";;
+ *-*-sysv5uw7*) CFLAGS="-D_UNIXWARE7 $CFLAGS";;
+ esac
+
+ if test -z "$LDFLAGS" && test "$kde_use_debug_code" = "no" && test "$GCC" = "yes"; then
+ LDFLAGS=""
+ fi
+
+ CXXFLAGS=" $CXXFLAGS"
+
+ AC_PROG_CXX
+
+ KDE_CHECK_FOR_BAD_COMPILER
+
+ if test "$GXX" = "yes" || test "$CXX" = "KCC"; then
+ if test "$kde_use_debug_code" != "no"; then
+ if test "$CXX" = "KCC"; then
+ CXXFLAGS="+K0 -Wall -pedantic -W -Wpointer-arith -Wwrite-strings $CXXFLAGS"
+ else
+ if test "$kde_use_debug_code" = "full"; then
+ CXXFLAGS="-g3 -fno-inline $CXXFLAGS"
+ else
+ CXXFLAGS="-g -O2 -fno-schedule-insns -fno-inline $CXXFLAGS"
+ fi
+ fi
+ KDE_CHECK_COMPILER_FLAG(fno-builtin,[CXXFLAGS="-fno-builtin $CXXFLAGS"])
+
+ dnl convenience compiler flags
+ KDE_CHECK_COMPILER_FLAG(Woverloaded-virtual, [WOVERLOADED_VIRTUAL="-Woverloaded-virtual"], [WOVERLOADED_VRITUAL=""])
+ AC_SUBST(WOVERLOADED_VIRTUAL)
+ else
+ if test "$CXX" = "KCC"; then
+ CXXFLAGS="+K3 $CXXFLAGS"
+ else
+ CXXFLAGS="-O2 $CXXFLAGS"
+ fi
+ fi
+ fi
+
+ if test "$kde_use_debug_define" = "yes"; then
+ CXXFLAGS="-DNDEBUG -DNO_DEBUG $CXXFLAGS"
+ fi
+
+ if test "$kde_use_profiling" = "yes"; then
+ KDE_CHECK_COMPILER_FLAG(pg,
+ [
+ CFLAGS="-pg $CFLAGS"
+ CXXFLAGS="-pg $CXXFLAGS"
+ ])
+ fi
+
+ if test "$kde_use_warnings" = "yes"; then
+ if test "$GCC" = "yes"; then
+ CXXFLAGS="-Wall -W -Wpointer-arith $CXXFLAGS"
+ case $host in
+ *-*-linux-gnu)
+ CFLAGS="-std=iso9899:1990 -W -Wall -Wchar-subscripts -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -D_XOPEN_SOURCE=500 -D_BSD_SOURCE $CFLAGS"
+ CXXFLAGS="-ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -Wchar-subscripts $CXXFLAGS"
+ KDE_CHECK_COMPILER_FLAG(Wmissing-format-attribute, [CXXFLAGS="$CXXFLAGS -Wformat-security -Wmissing-format-attribute"])
+ KDE_CHECK_C_COMPILER_FLAG(Wmissing-format-attribute, [CFLAGS="$CFLAGS -Wformat-security -Wmissing-format-attribute"])
+ ;;
+ esac
+ KDE_CHECK_COMPILER_FLAG(Wundef,[CXXFLAGS="-Wundef $CXXFLAGS"])
+ KDE_CHECK_COMPILER_FLAG(Wno-long-long,[CXXFLAGS="-Wno-long-long $CXXFLAGS"])
+ dnl ### FIXME: revert for KDE 4
+ KDE_CHECK_COMPILER_FLAG(Wno-non-virtual-dtor,[CXXFLAGS="$CXXFLAGS -Wno-non-virtual-dtor"])
+ fi
+ fi
+
+ if test "$GXX" = "yes" && test "$kde_use_strict_options" = "yes"; then
+ CXXFLAGS="-Wcast-qual -Wshadow -Wcast-align $CXXFLAGS"
+ fi
+
+ AC_ARG_ENABLE(pch,
+ AC_HELP_STRING([--enable-pch],
+ [enables precompiled header support (currently only KCC or gcc >=3.4+unsermake) [default=no]]),
+ [ kde_use_pch=$enableval ],[ kde_use_pch=no ])
+
+ HAVE_GCC_VISIBILITY=0
+ AC_SUBST([HAVE_GCC_VISIBILITY])
+
+ if test "$GXX" = "yes"; then
+ gcc_no_reorder_blocks=NO
+ KDE_CHECK_COMPILER_FLAG(fno-reorder-blocks,[gcc_no_reorder_blocks=YES])
+ if test $kde_use_debug_code != "no" && \
+ test $kde_use_debug_code != "full" && \
+ test "YES" = "$gcc_no_reorder_blocks" ; then
+ CXXFLAGS="$CXXFLAGS -fno-reorder-blocks"
+ CFLAGS="$CFLAGS -fno-reorder-blocks"
+ fi
+ KDE_CHECK_COMPILER_FLAG(fno-exceptions,[CXXFLAGS="$CXXFLAGS -fno-exceptions"])
+ KDE_CHECK_COMPILER_FLAG(fno-check-new, [CXXFLAGS="$CXXFLAGS -fno-check-new"])
+ KDE_CHECK_COMPILER_FLAG(fno-common, [CXXFLAGS="$CXXFLAGS -fno-common"])
+ KDE_CHECK_COMPILER_FLAG(fexceptions, [USE_EXCEPTIONS="-fexceptions"], USE_EXCEPTIONS= )
+ ENABLE_PERMISSIVE_FLAG="-fpermissive"
+
+ if test "$kde_use_pch" = "yes"; then
+ AC_MSG_CHECKING(whether gcc supports precompiling c header files)
+ echo >conftest.h
+ if $CC -x c-header conftest.h >/dev/null 2>/dev/null; then
+ kde_gcc_supports_pch=yes
+ AC_MSG_RESULT(yes)
+ else
+ kde_gcc_supports_pch=no
+ AC_MSG_RESULT(no)
+ fi
+ if test "$kde_gcc_supports_pch" = "yes"; then
+ AC_MSG_CHECKING(whether gcc supports precompiling c++ header files)
+ if $CXX -x c++-header conftest.h >/dev/null 2>/dev/null; then
+ kde_gcc_supports_pch=yes
+ AC_MSG_RESULT(yes)
+ else
+ kde_gcc_supports_pch=no
+ AC_MSG_RESULT(no)
+ fi
+ fi
+ rm -f conftest.h conftest.h.gch
+ fi
+
+ KDE_CHECK_FOR_OPT_NOINLINE_MATCH
+ if test "x$kde_cv_opt_noinline_match" = "xno" ; then
+ CFLAGS="`echo "$CFLAGS" | sed "s/ -fno-inline//"`"
+ fi
+ fi
+ AM_CONDITIONAL(unsermake_enable_pch, test "$kde_use_pch" = "yes" && test "$kde_gcc_supports_pch" = "yes")
+ if test "$CXX" = "KCC"; then
+ dnl unfortunately we currently cannot disable exception support in KCC
+ dnl because doing so is binary incompatible and Qt by default links with exceptions :-(
+ dnl KDE_CHECK_COMPILER_FLAG(-no_exceptions,[CXXFLAGS="$CXXFLAGS --no_exceptions"])
+ dnl KDE_CHECK_COMPILER_FLAG(-exceptions, [USE_EXCEPTIONS="--exceptions"], USE_EXCEPTIONS= )
+
+ if test "$kde_use_pch" = "yes"; then
+ dnl TODO: support --pch-dir!
+ KDE_CHECK_COMPILER_FLAG(-pch,[CXXFLAGS="$CXXFLAGS --pch"])
+ dnl the below works (but the dir must exist), but it's
+ dnl useless for a whole package.
+ dnl The are precompiled headers for each source file, so when compiling
+ dnl from scratch, it doesn't make a difference, and they take up
+ dnl around ~5Mb _per_ sourcefile.
+ dnl KDE_CHECK_COMPILER_FLAG(-pch_dir /tmp,
+ dnl [CXXFLAGS="$CXXFLAGS --pch_dir `pwd`/pcheaders"])
+ fi
+ dnl this flag controls inlining. by default KCC inlines in optimisation mode
+ dnl all implementations that are defined inside the class {} declaration.
+ dnl because of templates-compatibility with broken gcc compilers, this
+ dnl can cause excessive inlining. This flag limits it to a sane level
+ KDE_CHECK_COMPILER_FLAG(-inline_keyword_space_time=6,[CXXFLAGS="$CXXFLAGS --inline_keyword_space_time=6"])
+ KDE_CHECK_COMPILER_FLAG(-inline_auto_space_time=2,[CXXFLAGS="$CXXFLAGS --inline_auto_space_time=2"])
+ KDE_CHECK_COMPILER_FLAG(-inline_implicit_space_time=2.0,[CXXFLAGS="$CXXFLAGS --inline_implicit_space_time=2.0"])
+ KDE_CHECK_COMPILER_FLAG(-inline_generated_space_time=2.0,[CXXFLAGS="$CXXFLAGS --inline_generated_space_time=2.0"])
+ dnl Some source files are shared between multiple executables
+ dnl (or libraries) and some of those need template instantiations.
+ dnl In that case KCC needs to compile those sources with
+ dnl --one_instantiation_per_object. To make it easy for us we compile
+ dnl _all_ objects with that flag (--one_per is a shorthand).
+ KDE_CHECK_COMPILER_FLAG(-one_per, [CXXFLAGS="$CXXFLAGS --one_per"])
+ fi
+ AC_SUBST(USE_EXCEPTIONS)
+ dnl obsolete macro - provided to keep things going
+ USE_RTTI=
+ AC_SUBST(USE_RTTI)
+
+ case "$host" in
+ *-*-irix*) test "$GXX" = yes && CXXFLAGS="-D_LANGUAGE_C_PLUS_PLUS -D__LANGUAGE_C_PLUS_PLUS $CXXFLAGS" ;;
+ *-*-sysv4.2uw*) CXXFLAGS="-D_UNIXWARE $CXXFLAGS";;
+ *-*-sysv5uw7*) CXXFLAGS="-D_UNIXWARE7 $CXXFLAGS";;
+ *-*-solaris*)
+ if test "$GXX" = yes; then
+ libstdcpp=`$CXX -print-file-name=libstdc++.so`
+ if test ! -f $libstdcpp; then
+ AC_MSG_ERROR([You've compiled gcc without --enable-shared. This doesn't work with KDE. Please recompile gcc with --enable-shared to receive a libstdc++.so])
+ fi
+ fi
+ ;;
+ esac
+
+ AC_VALIDIFY_CXXFLAGS
+
+ AC_PROG_CXXCPP
+
+ if test "$GCC" = yes; then
+ NOOPT_CFLAGS=-O0
+ fi
+ KDE_CHECK_COMPILER_FLAG(O0,[NOOPT_CXXFLAGS=-O0])
+
+ AC_ARG_ENABLE(coverage,
+ AC_HELP_STRING([--enable-coverage],[use gcc coverage testing]), [
+ if test "$am_cv_CC_dependencies_compiler_type" = "gcc3"; then
+ ac_coverage_compiler="-fprofile-arcs -ftest-coverage"
+ ac_coverage_linker="-lgcc"
+ elif test "$am_cv_CC_dependencies_compiler_type" = "gcc"; then
+ ac_coverage_compiler="-fprofile-arcs -ftest-coverage"
+ ac_coverage_linker=""
+ else
+ AC_MSG_ERROR([coverage with your compiler is not supported])
+ fi
+ CFLAGS="$CFLAGS $ac_coverage_compiler"
+ CXXFLAGS="$CXXFLAGS $ac_coverage_compiler"
+ LDFLAGS="$LDFLAGS $ac_coverage_linker"
+ ])
+
+ AC_SUBST(NOOPT_CXXFLAGS)
+ AC_SUBST(NOOPT_CFLAGS)
+ AC_SUBST(ENABLE_PERMISSIVE_FLAG)
+
+ KDE_CHECK_NEW_LDFLAGS
+ KDE_CHECK_FINAL
+ KDE_CHECK_CLOSURE
+ KDE_CHECK_NMCHECK
+
+ ifdef([AM_DEPENDENCIES], AC_REQUIRE([KDE_ADD_DEPENDENCIES]), [])
+])
+
+AC_DEFUN([KDE_CHECK_VISIBILITY_GCC_BUG],
+ [
+ AC_CACHE_CHECK([for gcc -fvisibility-inlines-hidden bug], kde_cv_val_gcc_visibility_bug,
+ [
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+
+ safe_CXXFLAGS=$CXXFLAGS
+ safe_LDFLAGS=$LDFLAGS
+ CXXFLAGS="$CXXFLAGS -fPIC -fvisibility-inlines-hidden -O0"
+ LDFLAGS="$LDFLAGS -shared -fPIC"
+
+ AC_TRY_LINK(
+ [
+ /* http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19664 */
+ #include <string>
+ int some_function( void ) __attribute__ ((visibility("default")));
+ int some_function( void )
+ {
+ std::string s("blafasel");
+ return 0;
+ }
+ ], [/* elvis is alive */],
+ kde_cv_val_gcc_visibility_bug=no, kde_cv_val_gcc_visibility_bug=yes)
+
+ CXXFLAGS=$safe_CXXFLAGS
+ LDFLAGS=$safe_LDFLAGS
+ AC_LANG_RESTORE
+ ]
+ )
+
+ if test x$kde_cv_val_gcc_visibility_bug = xno; then
+ CXXFLAGS="$CXXFLAGS -fvisibility-inlines-hidden"
+ fi
+ ]
+)
+
+AC_DEFUN([KDE_ENABLE_HIDDEN_VISIBILITY],
+[
+ AC_BEFORE([AC_PATH_QT_1_3], [KDE_ENABLE_HIDDEN_VISIBILITY])
+
+ AC_MSG_CHECKING([grepping for visibility push/pop in headers])
+
+ if test "x$GXX" = "xyes"; then
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_EGREP_CPP(
+ [GCC visibility push],
+ [ #include <exception>
+ ],
+ [
+ AC_MSG_RESULT(yes)
+ kde_stdc_visibility_patched=yes ],
+ [
+ AC_MSG_RESULT(no)
+ AC_MSG_WARN([Your libstdc++ doesn't appear to be patched for
+ visibility support. Disabling -fvisibility=hidden])
+
+ kde_stdc_visibility_patched=no ])
+
+ AC_LANG_RESTORE
+
+ kde_have_gcc_visibility=no
+ KDE_CHECK_COMPILER_FLAG(fvisibility=hidden,
+ [
+ kde_have_gcc_visibility=yes
+ dnl the whole toolchain is just a mess, gcc is just too buggy
+ dnl to handle STL with visibility enabled. Lets reconsider
+ dnl when gcc 4.2 is out or when things get fixed in the compiler.
+ dnl Contact mueller@kde.org for details.
+ AC_ARG_ENABLE(gcc-hidden-visibility,
+ AC_HELP_STRING([--enable-gcc-hidden-visibility],[toolchain hidden visibility [default=no]]),
+ [kde_have_gcc_visibility=$enableval],
+ [kde_have_gcc_visibility=no])
+
+ AC_CACHE_CHECK([if Qt is patched for -fvisibility], kde_cv_val_qt_gcc_visibility_patched,
+ [
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+
+ safe_CXXFLAGS=$CXXFLAGS
+ CXXFLAGS="$CXXFLAGS $all_includes"
+
+ AC_TRY_COMPILE(
+ [
+#include <qglobal.h>
+#if Q_EXPORT - 0 != 0
+/* if this compiles, then Q_EXPORT is undefined */
+/* if Q_EXPORT is nonempty, this will break compilation */
+#endif
+ ], [/* elvis is alive */],
+ kde_cv_val_qt_gcc_visibility_patched=no, kde_cv_val_qt_gcc_visibility_patched=yes)
+
+ CXXFLAGS=$safe_CXXFLAGS
+ AC_LANG_RESTORE
+ ]
+ )
+
+ if test x$kde_have_gcc_visibility = "xyes" && test x$kde_stdc_visibility_patched = "xyes" && test x$kde_cv_val_qt_gcc_visibility_patched = "xyes"; then
+ CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
+ KDE_CHECK_VISIBILITY_GCC_BUG
+ HAVE_GCC_VISIBILITY=1
+ AC_DEFINE_UNQUOTED(__KDE_HAVE_GCC_VISIBILITY, "$HAVE_GCC_VISIBILITY", [define to 1 if -fvisibility is supported])
+ fi
+ ])
+ fi
+])
+
+AC_DEFUN([KDE_ADD_DEPENDENCIES],
+[
+ [A]M_DEPENDENCIES(CC)
+ [A]M_DEPENDENCIES(CXX)
+])
+
+dnl just a wrapper to clean up configure.in
+AC_DEFUN([KDE_PROG_LIBTOOL],
+[
+AC_REQUIRE([AC_CHECK_COMPILERS])
+AC_REQUIRE([AC_ENABLE_SHARED])
+AC_REQUIRE([AC_ENABLE_STATIC])
+
+AC_REQUIRE([AC_LIBTOOL_DLOPEN])
+AC_REQUIRE([KDE_CHECK_LIB64])
+
+AC_OBJEXT
+AC_EXEEXT
+
+AM_PROG_LIBTOOL
+AC_LIBTOOL_CXX
+
+LIBTOOL_SHELL="/bin/sh ./libtool"
+# LIBTOOL="$LIBTOOL --silent"
+KDE_PLUGIN="-avoid-version -module -no-undefined \$(KDE_NO_UNDEFINED) \$(KDE_RPATH) \$(KDE_MT_LDFLAGS)"
+AC_SUBST(KDE_PLUGIN)
+
+# This hack ensures that libtool creates shared libs for kunittest plugins. By default check_LTLIBRARIES makes static libs.
+KDE_CHECK_PLUGIN="\$(KDE_PLUGIN) -rpath \$(libdir)"
+AC_SUBST(KDE_CHECK_PLUGIN)
+
+# we patch configure quite some so we better keep that consistent for incremental runs
+AC_SUBST(AUTOCONF,'$(SHELL) $(top_srcdir)/admin/cvs.sh configure || touch configure')
+])
+
+AC_DEFUN([KDE_CHECK_LIB64],
+[
+ kdelibsuff="$kde_libs_suffix"
+ if test -z "$kdelibsuff"; then
+ kdelibsuff="no"
+ fi
+ AC_ARG_ENABLE(libsuffix,
+ AC_HELP_STRING([--enable-libsuffix],
+ [/lib directory suffix (64,32,none,auto[=default])]),
+ kdelibsuff=$enableval)
+
+ if test "$kdelibsuff" = "auto"; then
+
+cat > conftest.c << EOF
+#include <stdio.h>
+int main() {
+ return 0;
+}
+EOF
+ kdelibsuff=`$CC conftest.c -o conftest.out; ldd conftest.out |sed -ne '/libc.so/{
+ s,.*/lib\([[^\/]]*\)/.*,\1,
+ p
+}'`
+ rm -rf conftest.*
+ fi
+
+ if test "$kdelibsuff" = "no" -o "$kdelibsuff" = "none"; then
+ kdelibsuff=
+ fi
+ if test -z "$kdelibsuff"; then
+ AC_MSG_RESULT([not using lib directory suffix])
+ AC_DEFINE(KDELIBSUFF, [""], Suffix for lib directories)
+ else
+ if test "$libdir" = '${exec_prefix}/lib'; then
+ libdir="$libdir${kdelibsuff}"
+ AC_SUBST([libdir], ["$libdir"]) dnl ugly hack for lib64 platforms
+ fi
+ AC_DEFINE_UNQUOTED(KDELIBSUFF, ["${kdelibsuff}"], Suffix for lib directories)
+ AC_MSG_RESULT([using lib directory suffix $kdelibsuff])
+ fi
+])
+
+AC_DEFUN([KDE_CHECK_TYPES],
+[ AC_CHECK_SIZEOF(int, 4)dnl
+ AC_CHECK_SIZEOF(short)dnl
+ AC_CHECK_SIZEOF(long, 4)dnl
+ AC_CHECK_SIZEOF(char *, 4)dnl
+])dnl
+
+dnl Not used - kept for compat only?
+AC_DEFUN([KDE_DO_IT_ALL],
+[
+AC_CANONICAL_SYSTEM
+AC_ARG_PROGRAM
+AM_INIT_AUTOMAKE($1, $2)
+AM_DISABLE_LIBRARIES
+AC_PREFIX_DEFAULT(${KDEDIR:-/usr/local/kde})
+AC_CHECK_COMPILERS
+KDE_PROG_LIBTOOL
+AM_KDE_WITH_NLS
+AC_PATH_KDE
+])
+
+AC_DEFUN([AC_CHECK_RPATH],
+[
+AC_MSG_CHECKING(for rpath)
+AC_ARG_ENABLE(rpath,
+ AC_HELP_STRING([--disable-rpath],[do not use the rpath feature of ld]),
+ USE_RPATH=$enableval, USE_RPATH=yes)
+
+if test -z "$KDE_RPATH" && test "$USE_RPATH" = "yes"; then
+
+ KDE_RPATH="-R \$(libdir)"
+
+ if test "$kde_libraries" != "$libdir"; then
+ KDE_RPATH="$KDE_RPATH -R \$(kde_libraries)"
+ fi
+
+ if test -n "$qt_libraries"; then
+ KDE_RPATH="$KDE_RPATH -R \$(qt_libraries)"
+ fi
+ dnl $x_libraries is set to /usr/lib in case
+ if test -n "$X_LDFLAGS"; then
+ X_RPATH="-R \$(x_libraries)"
+ KDE_RPATH="$KDE_RPATH $X_RPATH"
+ fi
+ if test -n "$KDE_EXTRA_RPATH"; then
+ KDE_RPATH="$KDE_RPATH \$(KDE_EXTRA_RPATH)"
+ fi
+fi
+AC_SUBST(KDE_EXTRA_RPATH)
+AC_SUBST(KDE_RPATH)
+AC_SUBST(X_RPATH)
+AC_MSG_RESULT($USE_RPATH)
+])
+
+dnl Check for the type of the third argument of getsockname
+AC_DEFUN([AC_CHECK_SOCKLEN_T],
+[
+ AC_MSG_CHECKING(for socklen_t)
+ AC_CACHE_VAL(kde_cv_socklen_t,
+ [
+ AC_LANG_PUSH(C++)
+ kde_cv_socklen_t=no
+ AC_TRY_COMPILE([
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ ],
+ [
+ socklen_t len;
+ getpeername(0,0,&len);
+ ],
+ [
+ kde_cv_socklen_t=yes
+ kde_cv_socklen_t_equiv=socklen_t
+ ])
+ AC_LANG_POP(C++)
+ ])
+ AC_MSG_RESULT($kde_cv_socklen_t)
+ if test $kde_cv_socklen_t = no; then
+ AC_MSG_CHECKING([for socklen_t equivalent for socket functions])
+ AC_CACHE_VAL(kde_cv_socklen_t_equiv,
+ [
+ kde_cv_socklen_t_equiv=int
+ AC_LANG_PUSH(C++)
+ for t in int size_t unsigned long "unsigned long"; do
+ AC_TRY_COMPILE([
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ ],
+ [
+ $t len;
+ getpeername(0,0,&len);
+ ],
+ [
+ kde_cv_socklen_t_equiv="$t"
+ break
+ ])
+ done
+ AC_LANG_POP(C++)
+ ])
+ AC_MSG_RESULT($kde_cv_socklen_t_equiv)
+ fi
+ AC_DEFINE_UNQUOTED(kde_socklen_t, $kde_cv_socklen_t_equiv,
+ [type to use in place of socklen_t if not defined])
+ AC_DEFINE_UNQUOTED(ksize_t, $kde_cv_socklen_t_equiv,
+ [type to use in place of socklen_t if not defined (deprecated, use kde_socklen_t)])
+])
+
+dnl This is a merge of some macros out of the gettext aclocal.m4
+dnl since we don't need anything, I took the things we need
+dnl the copyright for them is:
+dnl >
+dnl Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+dnl This Makefile.in is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+dnl PARTICULAR PURPOSE.
+dnl >
+dnl for this file it is relicensed under LGPL
+
+AC_DEFUN([AM_KDE_WITH_NLS],
+ [
+ dnl If we use NLS figure out what method
+
+ AM_PATH_PROG_WITH_TEST_KDE(MSGFMT, msgfmt,
+ [test -n "`$ac_dir/$ac_word --version 2>&1 | grep 'GNU gettext'`"], msgfmt)
+ AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+
+ if test -z "`$GMSGFMT --version 2>&1 | grep 'GNU gettext'`"; then
+ AC_MSG_RESULT([found msgfmt program is not GNU msgfmt; ignore it])
+ GMSGFMT=":"
+ fi
+ MSGFMT=$GMSGFMT
+ AC_SUBST(GMSGFMT)
+ AC_SUBST(MSGFMT)
+
+ AM_PATH_PROG_WITH_TEST_KDE(XGETTEXT, kde-xgettext,
+ [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
+
+ dnl Test whether we really found GNU xgettext.
+ if test "$XGETTEXT" != ":"; then
+ dnl If it is no GNU xgettext we define it as : so that the
+ dnl Makefiles still can work.
+ if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
+ : ;
+ else
+ AC_MSG_RESULT(
+ [found xgettext programs is not GNU xgettext; ignore it])
+ XGETTEXT=":"
+ fi
+ fi
+ AC_SUBST(XGETTEXT)
+
+ ])
+
+# Search path for a program which passes the given test.
+# Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+# serial 1
+# Stephan Kulow: I appended a _KDE against name conflicts
+
+dnl AM_PATH_PROG_WITH_TEST_KDE(VARIABLE, PROG-TO-CHECK-FOR,
+dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN([AM_PATH_PROG_WITH_TEST_KDE],
+[# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL(ac_cv_path_$1,
+[case "[$]$1" in
+ /*)
+ ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+ ;;
+ *)
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+ for ac_dir in ifelse([$5], , $PATH, [$5]); do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ if [$3]; then
+ ac_cv_path_$1="$ac_dir/$ac_word"
+ break
+ fi
+ fi
+ done
+ IFS="$ac_save_ifs"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+ ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test -n "[$]$1"; then
+ AC_MSG_RESULT([$]$1)
+else
+ AC_MSG_RESULT(no)
+fi
+AC_SUBST($1)dnl
+])
+
+
+# Check whether LC_MESSAGES is available in <locale.h>.
+# Ulrich Drepper <drepper@cygnus.com>, 1995.
+
+# serial 1
+
+AC_DEFUN([AM_LC_MESSAGES],
+ [if test $ac_cv_header_locale_h = yes; then
+ AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
+ [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
+ am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
+ if test $am_cv_val_LC_MESSAGES = yes; then
+ AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your locale.h file contains LC_MESSAGES])
+ fi
+ fi])
+
+dnl From Jim Meyering.
+dnl FIXME: migrate into libit.
+
+AC_DEFUN([AM_FUNC_OBSTACK],
+[AC_CACHE_CHECK([for obstacks], am_cv_func_obstack,
+ [AC_TRY_LINK([#include "obstack.h"],
+ [struct obstack *mem;obstack_free(mem,(char *) 0)],
+ am_cv_func_obstack=yes,
+ am_cv_func_obstack=no)])
+ if test $am_cv_func_obstack = yes; then
+ AC_DEFINE(HAVE_OBSTACK)
+ else
+ LIBOBJS="$LIBOBJS obstack.o"
+ fi
+])
+
+dnl From Jim Meyering. Use this if you use the GNU error.[ch].
+dnl FIXME: Migrate into libit
+
+AC_DEFUN([AM_FUNC_ERROR_AT_LINE],
+[AC_CACHE_CHECK([for error_at_line], am_cv_lib_error_at_line,
+ [AC_TRY_LINK([],[error_at_line(0, 0, "", 0, "");],
+ am_cv_lib_error_at_line=yes,
+ am_cv_lib_error_at_line=no)])
+ if test $am_cv_lib_error_at_line = no; then
+ LIBOBJS="$LIBOBJS error.o"
+ fi
+ AC_SUBST(LIBOBJS)dnl
+])
+
+# Macro to add for using GNU gettext.
+# Ulrich Drepper <drepper@cygnus.com>, 1995.
+
+# serial 1
+# Stephan Kulow: I put a KDE in it to avoid name conflicts
+
+AC_DEFUN([AM_KDE_GNU_GETTEXT],
+ [AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+ AC_REQUIRE([AC_PROG_RANLIB])dnl
+ AC_REQUIRE([AC_HEADER_STDC])dnl
+ AC_REQUIRE([AC_TYPE_OFF_T])dnl
+ AC_REQUIRE([AC_TYPE_SIZE_T])dnl
+ AC_REQUIRE([AC_FUNC_ALLOCA])dnl
+ AC_REQUIRE([AC_FUNC_MMAP])dnl
+ AC_REQUIRE([AM_KDE_WITH_NLS])dnl
+ AC_CHECK_HEADERS([limits.h locale.h nl_types.h string.h values.h alloca.h])
+ AC_CHECK_FUNCS([getcwd munmap putenv setlocale strchr strcasecmp \
+__argz_count __argz_stringify __argz_next])
+
+ AC_MSG_CHECKING(for stpcpy)
+ AC_CACHE_VAL(kde_cv_func_stpcpy,
+ [
+ kde_safe_cxxflags=$CXXFLAGS
+ CXXFLAGS="-Werror"
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_TRY_COMPILE([
+ #include <string.h>
+ ],
+ [
+ char buffer[200];
+ stpcpy(buffer, buffer);
+ ],
+ kde_cv_func_stpcpy=yes,
+ kde_cv_func_stpcpy=no)
+ AC_LANG_RESTORE
+ CXXFLAGS=$kde_safe_cxxflags
+ ])
+ AC_MSG_RESULT($kde_cv_func_stpcpy)
+ if eval "test \"`echo $kde_cv_func_stpcpy`\" = yes"; then
+ AC_DEFINE(HAVE_STPCPY, 1, [Define if you have stpcpy])
+ fi
+
+ AM_LC_MESSAGES
+
+ if test "x$CATOBJEXT" != "x"; then
+ if test "x$ALL_LINGUAS" = "x"; then
+ LINGUAS=
+ else
+ AC_MSG_CHECKING(for catalogs to be installed)
+ NEW_LINGUAS=
+ for lang in ${LINGUAS=$ALL_LINGUAS}; do
+ case "$ALL_LINGUAS" in
+ *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;;
+ esac
+ done
+ LINGUAS=$NEW_LINGUAS
+ AC_MSG_RESULT($LINGUAS)
+ fi
+
+ dnl Construct list of names of catalog files to be constructed.
+ if test -n "$LINGUAS"; then
+ for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
+ fi
+ fi
+
+ ])
+
+AC_DEFUN([AC_HAVE_XPM],
+ [AC_REQUIRE_CPP()dnl
+ AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+
+ test -z "$XPM_LDFLAGS" && XPM_LDFLAGS=
+ test -z "$XPM_INCLUDE" && XPM_INCLUDE=
+
+ AC_ARG_WITH(xpm,AC_HELP_STRING([--without-xpm],[disable color pixmap XPM tests]),
+ xpm_test=$withval, xpm_test="yes")
+ if test "x$xpm_test" = xno; then
+ ac_cv_have_xpm=no
+ else
+ AC_MSG_CHECKING(for XPM)
+ AC_CACHE_VAL(ac_cv_have_xpm,
+ [
+ ac_save_ldflags="$LDFLAGS"
+ ac_save_cflags="$CFLAGS"
+ if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+ LDFLAGS="$LDFLAGS $X_LDFLAGS $USER_LDFLAGS $LDFLAGS $XPM_LDFLAGS $all_libraries -lXpm -lX11 -lXext $LIBZ $LIBSOCKET"
+ else
+ LDFLAGS="$LDFLAGS $X_LDFLAGS $USER_LDFLAGS $LDFLAGS $XPM_LDFLAGS $all_libraries -lXpm $LIBZ $LIBSOCKET"
+ fi
+ CFLAGS="$CFLAGS $X_INCLUDES $USER_INCLUDES"
+ test -n "$XPM_INCLUDE" && CFLAGS="-I$XPM_INCLUDE $CFLAGS"
+ AC_TRY_LINK([#include <X11/xpm.h>],[],
+ ac_cv_have_xpm="yes",ac_cv_have_xpm="no")
+ LDFLAGS="$ac_save_ldflags"
+ CFLAGS="$ac_save_cflags"
+ ])dnl
+
+ if test "$ac_cv_have_xpm" = no; then
+ AC_MSG_RESULT(no)
+ XPM_LDFLAGS=""
+ XPMINC=""
+ $2
+ else
+ AC_DEFINE(HAVE_XPM, 1, [Define if you have XPM support])
+ if test "$XPM_LDFLAGS" = ""; then
+ XPMLIB='-lXpm $(LIB_X11)'
+ else
+ XPMLIB="-L$XPM_LDFLAGS -lXpm "'$(LIB_X11)'
+ fi
+ if test "$XPM_INCLUDE" = ""; then
+ XPMINC=""
+ else
+ XPMINC="-I$XPM_INCLUDE"
+ fi
+ AC_MSG_RESULT(yes)
+ $1
+ fi
+ fi
+ AC_SUBST(XPMINC)
+ AC_SUBST(XPMLIB)
+])
+
+AC_DEFUN([AC_HAVE_DPMS],
+ [AC_REQUIRE_CPP()dnl
+ AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+
+ test -z "$DPMS_LDFLAGS" && DPMS_LDFLAGS=
+ test -z "$DPMS_INCLUDE" && DPMS_INCLUDE=
+ DPMS_LIB=
+
+ AC_ARG_WITH(dpms,AC_HELP_STRING([--without-dpms],[disable DPMS power saving]),
+ dpms_test=$withval, dpms_test="yes")
+ if test "x$dpms_test" = xno; then
+ ac_cv_have_dpms=no
+ else
+ AC_MSG_CHECKING(for DPMS)
+ dnl Note: ac_cv_have_dpms can be no, yes, or -lXdpms.
+ dnl 'yes' means DPMS_LIB="", '-lXdpms' means DPMS_LIB="-lXdpms".
+ AC_CACHE_VAL(ac_cv_have_dpms,
+ [
+ if test "x$kde_use_qt_emb" = "xyes" || test "x$kde_use_qt_mac" = "xyes"; then
+ AC_MSG_RESULT(no)
+ ac_cv_have_dpms="no"
+ else
+ ac_save_ldflags="$LDFLAGS"
+ ac_save_cflags="$CFLAGS"
+ ac_save_libs="$LIBS"
+ LDFLAGS="$LDFLAGS $DPMS_LDFLAGS $all_libraries"
+ LIBS="-lX11 -lXext $LIBSOCKET"
+ CFLAGS="$CFLAGS $X_INCLUDES"
+ test -n "$DPMS_INCLUDE" && CFLAGS="-I$DPMS_INCLUDE $CFLAGS"
+ AC_TRY_LINK([
+ #include <X11/Xproto.h>
+ #include <X11/X.h>
+ #include <X11/Xlib.h>
+ #include <X11/extensions/dpms.h>
+ int foo_test_dpms()
+ { return DPMSSetTimeouts( 0, 0, 0, 0 ); }],[],
+ ac_cv_have_dpms="yes", [
+ LIBS="-lXdpms $LIBS"
+ AC_TRY_LINK([
+ #include <X11/Xproto.h>
+ #include <X11/X.h>
+ #include <X11/Xlib.h>
+ #include <X11/extensions/dpms.h>
+ int foo_test_dpms()
+ { return DPMSSetTimeouts( 0, 0, 0, 0 ); }],[],
+ [
+ ac_cv_have_dpms="-lXdpms"
+ ],ac_cv_have_dpms="no")
+ ])
+ LDFLAGS="$ac_save_ldflags"
+ CFLAGS="$ac_save_cflags"
+ LIBS="$ac_save_libs"
+ fi
+ ])dnl
+
+ if test "$ac_cv_have_dpms" = no; then
+ AC_MSG_RESULT(no)
+ DPMS_LDFLAGS=""
+ DPMSINC=""
+ $2
+ else
+ AC_DEFINE(HAVE_DPMS, 1, [Define if you have DPMS support])
+ if test "$ac_cv_have_dpms" = "-lXdpms"; then
+ DPMS_LIB="-lXdpms"
+ fi
+ if test "$DPMS_LDFLAGS" = ""; then
+ DPMSLIB="$DPMS_LIB "'$(LIB_X11)'
+ else
+ DPMSLIB="$DPMS_LDFLAGS $DPMS_LIB "'$(LIB_X11)'
+ fi
+ if test "$DPMS_INCLUDE" = ""; then
+ DPMSINC=""
+ else
+ DPMSINC="-I$DPMS_INCLUDE"
+ fi
+ AC_MSG_RESULT(yes)
+ $1
+ fi
+ fi
+ ac_save_cflags="$CFLAGS"
+ CFLAGS="$CFLAGS $X_INCLUDES"
+ test -n "$DPMS_INCLUDE" && CFLAGS="-I$DPMS_INCLUDE $CFLAGS"
+ AH_TEMPLATE(HAVE_DPMSCAPABLE_PROTO,
+ [Define if you have the DPMSCapable prototype in <X11/extensions/dpms.h>])
+ AC_CHECK_DECL(DPMSCapable,
+ AC_DEFINE(HAVE_DPMSCAPABLE_PROTO),,
+ [#include <X11/Xlib.h>
+ #include <X11/extensions/dpms.h>])
+ AH_TEMPLATE(HAVE_DPMSINFO_PROTO,
+ [Define if you have the DPMSInfo prototype in <X11/extensions/dpms.h>])
+ AC_CHECK_DECL(DPMSInfo,
+ AC_DEFINE(HAVE_DPMSINFO_PROTO),,
+ [#include <X11/Xlib.h>
+ #include <X11/extensions/dpms.h>])
+ CFLAGS="$ac_save_cflags"
+ AC_SUBST(DPMSINC)
+ AC_SUBST(DPMSLIB)
+])
+
+AC_DEFUN([AC_HAVE_GL],
+ [AC_REQUIRE_CPP()dnl
+ AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+
+ test -z "$GL_LDFLAGS" && GL_LDFLAGS=
+ test -z "$GL_INCLUDE" && GL_INCLUDE=
+
+ AC_ARG_WITH(gl,AC_HELP_STRING([--without-gl],[disable 3D GL modes]),
+ gl_test=$withval, gl_test="yes")
+ if test "x$kde_use_qt_emb" = "xyes"; then
+ # GL and Qt Embedded is a no-go for now.
+ ac_cv_have_gl=no
+ elif test "x$gl_test" = xno; then
+ ac_cv_have_gl=no
+ else
+ AC_MSG_CHECKING(for GL)
+ AC_CACHE_VAL(ac_cv_have_gl,
+ [
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_ldflags=$LDFLAGS
+ ac_save_cxxflags=$CXXFLAGS
+ ac_save_libs=$LIBS
+ LDFLAGS="$LDFLAGS $GL_LDFLAGS $X_LDFLAGS $all_libraries"
+ LIBS="$LIBS -lGL -lGLU"
+ test "x$kde_use_qt_mac" != xyes && test "x$kde_use_qt_emb" != xyes && LIBS="$LIBS -lX11"
+ LIBS="$LIBS $LIB_XEXT -lm $LIBSOCKET"
+ CXXFLAGS="$CFLAGS $X_INCLUDES"
+ test -n "$GL_INCLUDE" && CFLAGS="-I$GL_INCLUDE $CFLAGS"
+ AC_TRY_LINK([#include <GL/gl.h>
+#include <GL/glu.h>
+], [],
+ ac_cv_have_gl="yes", ac_cv_have_gl="no")
+ AC_LANG_RESTORE
+ LDFLAGS=$ac_save_ldflags
+ CXXFLAGS=$ac_save_cxxflags
+ LIBS=$ac_save_libs
+ ])dnl
+
+ if test "$ac_cv_have_gl" = "no"; then
+ AC_MSG_RESULT(no)
+ GL_LDFLAGS=""
+ GLINC=""
+ $2
+ else
+ AC_DEFINE(HAVE_GL, 1, [Defines if you have GL (Mesa, OpenGL, ...)])
+ if test "$GL_LDFLAGS" = ""; then
+ GLLIB='-lGLU -lGL $(LIB_X11)'
+ else
+ GLLIB="$GL_LDFLAGS -lGLU -lGL "'$(LIB_X11)'
+ fi
+ if test "$GL_INCLUDE" = ""; then
+ GLINC=""
+ else
+ GLINC="-I$GL_INCLUDE"
+ fi
+ AC_MSG_RESULT($ac_cv_have_gl)
+ $1
+ fi
+ fi
+ AC_SUBST(GLINC)
+ AC_SUBST(GLLIB)
+])
+
+
+ dnl shadow password and PAM magic - maintained by ossi@kde.org
+
+AC_DEFUN([KDE_PAM], [
+ AC_REQUIRE([KDE_CHECK_LIBDL])
+
+ want_pam=
+ AC_ARG_WITH(pam,
+ AC_HELP_STRING([--with-pam[=ARG]],[enable support for PAM: ARG=[yes|no|service name]]),
+ [ if test "x$withval" = "xyes"; then
+ want_pam=yes
+ pam_service=kde
+ elif test "x$withval" = "xno"; then
+ want_pam=no
+ else
+ want_pam=yes
+ pam_service=$withval
+ fi
+ ], [ pam_service=kde ])
+
+ use_pam=
+ PAMLIBS=
+ if test "x$want_pam" != xno; then
+ AC_CHECK_LIB(pam, pam_start, [
+ AC_CHECK_HEADER(security/pam_appl.h,
+ [ pam_header=security/pam_appl.h ],
+ [ AC_CHECK_HEADER(pam/pam_appl.h,
+ [ pam_header=pam/pam_appl.h ],
+ [
+ AC_MSG_WARN([PAM detected, but no headers found!
+Make sure you have the necessary development packages installed.])
+ ]
+ )
+ ]
+ )
+ ], , $LIBDL)
+ if test -z "$pam_header"; then
+ if test "x$want_pam" = xyes; then
+ AC_MSG_ERROR([--with-pam was specified, but cannot compile with PAM!])
+ fi
+ else
+ AC_DEFINE(HAVE_PAM, 1, [Defines if you have PAM (Pluggable Authentication Modules)])
+ PAMLIBS="$PAM_MISC_LIB -lpam $LIBDL"
+ use_pam=yes
+
+ dnl darwin claims to be something special
+ if test "$pam_header" = "pam/pam_appl.h"; then
+ AC_DEFINE(HAVE_PAM_PAM_APPL_H, 1, [Define if your PAM headers are in pam/ instead of security/])
+ fi
+
+ dnl test whether struct pam_message is const (Linux) or not (Sun)
+ AC_MSG_CHECKING(for const pam_message)
+ AC_EGREP_HEADER([struct pam_message], $pam_header,
+ [ AC_EGREP_HEADER([const struct pam_message], $pam_header,
+ [AC_MSG_RESULT([const: Linux-type PAM])],
+ [AC_MSG_RESULT([nonconst: Sun-type PAM])
+ AC_DEFINE(PAM_MESSAGE_NONCONST, 1, [Define if your PAM support takes non-const arguments (Solaris)])]
+ )],
+ [AC_MSG_RESULT([not found - assume const, Linux-type PAM])])
+ fi
+ fi
+
+ AC_SUBST(PAMLIBS)
+])
+
+dnl DEF_PAM_SERVICE(arg name, full name, define name)
+AC_DEFUN([DEF_PAM_SERVICE], [
+ AC_ARG_WITH($1-pam,
+ AC_HELP_STRING([--with-$1-pam=[val]],[override PAM service from --with-pam for $2]),
+ [ if test "x$use_pam" = xyes; then
+ $3_PAM_SERVICE=$withval
+ else
+ AC_MSG_ERROR([Cannot use use --with-$1-pam, as no PAM was detected.
+You may want to enforce it by using --with-pam.])
+ fi
+ ],
+ [ if test "x$use_pam" = xyes; then
+ $3_PAM_SERVICE="$pam_service"
+ fi
+ ])
+ if test -n "$$3_PAM_SERVICE"; then
+ AC_MSG_RESULT([The PAM service used by $2 will be $$3_PAM_SERVICE])
+ AC_DEFINE_UNQUOTED($3_PAM_SERVICE, "$$3_PAM_SERVICE", [The PAM service to be used by $2])
+ fi
+ AC_SUBST($3_PAM_SERVICE)
+])
+
+AC_DEFUN([KDE_SHADOWPASSWD], [
+ AC_REQUIRE([KDE_PAM])
+
+ AC_CHECK_LIB(shadow, getspent,
+ [ LIBSHADOW="-lshadow"
+ ac_use_shadow=yes
+ ],
+ [ dnl for UnixWare
+ AC_CHECK_LIB(gen, getspent,
+ [ LIBGEN="-lgen"
+ ac_use_shadow=yes
+ ],
+ [ AC_CHECK_FUNC(getspent,
+ [ ac_use_shadow=yes ],
+ [ ac_use_shadow=no ])
+ ])
+ ])
+ AC_SUBST(LIBSHADOW)
+ AC_SUBST(LIBGEN)
+
+ AC_MSG_CHECKING([for shadow passwords])
+
+ AC_ARG_WITH(shadow,
+ AC_HELP_STRING([--with-shadow],[If you want shadow password support]),
+ [ if test "x$withval" != "xno"; then
+ use_shadow=yes
+ else
+ use_shadow=no
+ fi
+ ], [
+ use_shadow="$ac_use_shadow"
+ ])
+
+ if test "x$use_shadow" = xyes; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_SHADOW, 1, [Define if you use shadow passwords])
+ else
+ AC_MSG_RESULT(no)
+ LIBSHADOW=
+ LIBGEN=
+ fi
+
+ dnl finally make the relevant binaries setuid root, if we have shadow passwds.
+ dnl this still applies, if we could use it indirectly through pam.
+ if test "x$use_shadow" = xyes ||
+ ( test "x$use_pam" = xyes && test "x$ac_use_shadow" = xyes ); then
+ case $host in
+ *-*-freebsd* | *-*-netbsd* | *-*-openbsd*)
+ SETUIDFLAGS="-m 4755 -o root";;
+ *)
+ SETUIDFLAGS="-m 4755";;
+ esac
+ fi
+ AC_SUBST(SETUIDFLAGS)
+
+])
+
+AC_DEFUN([KDE_PASSWDLIBS], [
+ AC_REQUIRE([KDE_MISC_TESTS]) dnl for LIBCRYPT
+ AC_REQUIRE([KDE_PAM])
+ AC_REQUIRE([KDE_SHADOWPASSWD])
+
+ if test "x$use_pam" = "xyes"; then
+ PASSWDLIBS="$PAMLIBS"
+ else
+ PASSWDLIBS="$LIBCRYPT $LIBSHADOW $LIBGEN"
+ fi
+
+ dnl FreeBSD uses a shadow-like setup, where /etc/passwd holds the users, but
+ dnl /etc/master.passwd holds the actual passwords. /etc/master.passwd requires
+ dnl root to read, so kcheckpass needs to be root (even when using pam, since pam
+ dnl may need to read /etc/master.passwd).
+ case $host in
+ *-*-freebsd*)
+ SETUIDFLAGS="-m 4755 -o root"
+ ;;
+ *)
+ ;;
+ esac
+
+ AC_SUBST(PASSWDLIBS)
+])
+
+AC_DEFUN([KDE_CHECK_LIBDL],
+[
+AC_CHECK_LIB(dl, dlopen, [
+LIBDL="-ldl"
+ac_cv_have_dlfcn=yes
+])
+
+AC_CHECK_LIB(dld, shl_unload, [
+LIBDL="-ldld"
+ac_cv_have_shload=yes
+])
+
+AC_SUBST(LIBDL)
+])
+
+AC_DEFUN([KDE_CHECK_DLOPEN],
+[
+KDE_CHECK_LIBDL
+AC_CHECK_HEADERS(dlfcn.h dl.h)
+if test "$ac_cv_header_dlfcn_h" = "no"; then
+ ac_cv_have_dlfcn=no
+fi
+
+if test "$ac_cv_header_dl_h" = "no"; then
+ ac_cv_have_shload=no
+fi
+
+dnl XXX why change enable_dlopen? its already set by autoconf's AC_ARG_ENABLE
+dnl (MM)
+AC_ARG_ENABLE(dlopen,
+AC_HELP_STRING([--disable-dlopen],[link statically [default=no]]),
+enable_dlopen=$enableval,
+enable_dlopen=yes)
+
+# override the user's opinion, if we know it better ;)
+if test "$ac_cv_have_dlfcn" = "no" && test "$ac_cv_have_shload" = "no"; then
+ enable_dlopen=no
+fi
+
+if test "$ac_cv_have_dlfcn" = "yes"; then
+ AC_DEFINE_UNQUOTED(HAVE_DLFCN, 1, [Define if you have dlfcn])
+fi
+
+if test "$ac_cv_have_shload" = "yes"; then
+ AC_DEFINE_UNQUOTED(HAVE_SHLOAD, 1, [Define if you have shload])
+fi
+
+if test "$enable_dlopen" = no ; then
+ test -n "$1" && eval $1
+else
+ test -n "$2" && eval $2
+fi
+
+])
+
+AC_DEFUN([KDE_CHECK_DYNAMIC_LOADING],
+[
+KDE_CHECK_DLOPEN(libtool_enable_shared=yes, libtool_enable_static=no)
+KDE_PROG_LIBTOOL
+AC_MSG_CHECKING([dynamic loading])
+eval "`egrep '^build_libtool_libs=' libtool`"
+if test "$build_libtool_libs" = "yes" && test "$enable_dlopen" = "yes"; then
+ dynamic_loading=yes
+ AC_DEFINE_UNQUOTED(HAVE_DYNAMIC_LOADING)
+else
+ dynamic_loading=no
+fi
+AC_MSG_RESULT($dynamic_loading)
+if test "$dynamic_loading" = "yes"; then
+ $1
+else
+ $2
+fi
+])
+
+AC_DEFUN([KDE_ADD_INCLUDES],
+[
+if test -z "$1"; then
+ test_include="Pix.h"
+else
+ test_include="$1"
+fi
+
+AC_MSG_CHECKING([for libg++ ($test_include)])
+
+AC_CACHE_VAL(kde_cv_libgpp_includes,
+[
+kde_cv_libgpp_includes=no
+
+ for ac_dir in \
+ \
+ /usr/include/g++ \
+ /usr/include \
+ /usr/unsupported/include \
+ /opt/include \
+ $extra_include \
+ ; \
+ do
+ if test -r "$ac_dir/$test_include"; then
+ kde_cv_libgpp_includes=$ac_dir
+ break
+ fi
+ done
+])
+
+AC_MSG_RESULT($kde_cv_libgpp_includes)
+if test "$kde_cv_libgpp_includes" != "no"; then
+ all_includes="-I$kde_cv_libgpp_includes $all_includes $USER_INCLUDES"
+fi
+])
+])
+
+AC_DEFUN([KDE_CHECK_LIBPTHREAD],
+[
+ dnl This code is here specifically to handle the
+ dnl various flavors of threading library on FreeBSD
+ dnl 4-, 5-, and 6-, and the (weird) rules around it.
+ dnl There may be an environment PTHREAD_LIBS that
+ dnl specifies what to use; otherwise, search for it.
+ dnl -pthread is special cased and unsets LIBPTHREAD
+ dnl below if found.
+ LIBPTHREAD=""
+
+ if test -n "$PTHREAD_LIBS"; then
+ if test "x$PTHREAD_LIBS" = "x-pthread" ; then
+ LIBPTHREAD="PTHREAD"
+ else
+ PTHREAD_LIBS_save="$PTHREAD_LIBS"
+ PTHREAD_LIBS=`echo "$PTHREAD_LIBS_save" | sed -e 's,^-l,,g'`
+ AC_MSG_CHECKING([for pthread_create in $PTHREAD_LIBS])
+ KDE_CHECK_LIB($PTHREAD_LIBS, pthread_create, [
+ LIBPTHREAD="$PTHREAD_LIBS_save"])
+ PTHREAD_LIBS="$PTHREAD_LIBS_save"
+ fi
+ fi
+
+ dnl Is this test really needed, in the face of the Tru64 test below?
+ if test -z "$LIBPTHREAD"; then
+ AC_CHECK_LIB(pthread, pthread_create, [LIBPTHREAD="-lpthread"])
+ fi
+
+ dnl This is a special Tru64 check, see BR 76171 issue #18.
+ if test -z "$LIBPTHREAD" ; then
+ AC_MSG_CHECKING([for pthread_create in -lpthread])
+ kde_safe_libs=$LIBS
+ LIBS="$LIBS -lpthread"
+ AC_TRY_LINK([#include <pthread.h>],[(void)pthread_create(0,0,0,0);],[
+ AC_MSG_RESULT(yes)
+ LIBPTHREAD="-lpthread"],[
+ AC_MSG_RESULT(no)])
+ LIBS=$kde_safe_libs
+ fi
+
+ dnl Un-special-case for FreeBSD.
+ if test "x$LIBPTHREAD" = "xPTHREAD" ; then
+ LIBPTHREAD=""
+ fi
+
+ AC_SUBST(LIBPTHREAD)
+])
+
+AC_DEFUN([KDE_CHECK_PTHREAD_OPTION],
+[
+ USE_THREADS=""
+ if test -z "$LIBPTHREAD"; then
+ KDE_CHECK_COMPILER_FLAG(pthread, [USE_THREADS="-D_THREAD_SAFE -pthread"])
+ fi
+
+ AH_VERBATIM(__svr_define, [
+#if defined(__SVR4) && !defined(__svr4__)
+#define __svr4__ 1
+#endif
+])
+ case $host_os in
+ solaris*)
+ KDE_CHECK_COMPILER_FLAG(mt, [USE_THREADS="-mt"])
+ CPPFLAGS="$CPPFLAGS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DUSE_SOLARIS -DSVR4"
+ ;;
+ freebsd*)
+ CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE $PTHREAD_CFLAGS"
+ ;;
+ aix*)
+ CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE"
+ LIBPTHREAD="$LIBPTHREAD -lc_r"
+ ;;
+ linux*) CPPFLAGS="$CPPFLAGS -D_REENTRANT"
+ if test "$CXX" = "KCC"; then
+ CXXFLAGS="$CXXFLAGS --thread_safe"
+ NOOPT_CXXFLAGS="$NOOPT_CXXFLAGS --thread_safe"
+ fi
+ ;;
+ *)
+ ;;
+ esac
+ AC_SUBST(USE_THREADS)
+ AC_SUBST(LIBPTHREAD)
+])
+
+AC_DEFUN([KDE_CHECK_THREADING],
+[
+ AC_REQUIRE([KDE_CHECK_LIBPTHREAD])
+ AC_REQUIRE([KDE_CHECK_PTHREAD_OPTION])
+ dnl default is yes if libpthread is found and no if no libpthread is available
+ if test -z "$LIBPTHREAD"; then
+ if test -z "$USE_THREADS"; then
+ kde_check_threading_default=no
+ else
+ kde_check_threading_default=yes
+ fi
+ else
+ kde_check_threading_default=yes
+ fi
+ AC_ARG_ENABLE(threading,AC_HELP_STRING([--disable-threading],[disables threading even if libpthread found]),
+ kde_use_threading=$enableval, kde_use_threading=$kde_check_threading_default)
+ if test "x$kde_use_threading" = "xyes"; then
+ AC_DEFINE(HAVE_LIBPTHREAD, 1, [Define if you have a working libpthread (will enable threaded code)])
+ fi
+])
+
+AC_DEFUN([KDE_TRY_LINK_PYTHON],
+[
+if test "$kde_python_link_found" = no; then
+
+if test "$1" = normal; then
+ AC_MSG_CHECKING(if a Python application links)
+else
+ AC_MSG_CHECKING(if Python depends on $2)
+fi
+
+AC_CACHE_VAL(kde_cv_try_link_python_$1,
+[
+kde_save_cflags="$CFLAGS"
+CFLAGS="$CFLAGS $PYTHONINC"
+kde_save_libs="$LIBS"
+LIBS="$LIBS $LIBPYTHON $2 $LIBDL $LIBSOCKET"
+kde_save_ldflags="$LDFLAGS"
+LDFLAGS="$LDFLAGS $PYTHONLIB"
+
+AC_TRY_LINK(
+[
+#include <Python.h>
+],[
+ PySys_SetArgv(1, 0);
+],
+ [kde_cv_try_link_python_$1=yes],
+ [kde_cv_try_link_python_$1=no]
+)
+CFLAGS="$kde_save_cflags"
+LIBS="$kde_save_libs"
+LDFLAGS="$kde_save_ldflags"
+])
+
+if test "$kde_cv_try_link_python_$1" = "yes"; then
+ AC_MSG_RESULT(yes)
+ kde_python_link_found=yes
+ if test ! "$1" = normal; then
+ LIBPYTHON="$LIBPYTHON $2"
+ fi
+ $3
+else
+ AC_MSG_RESULT(no)
+ $4
+fi
+
+fi
+
+])
+
+AC_DEFUN([KDE_CHECK_PYTHON_DIR],
+[
+AC_MSG_CHECKING([for Python directory])
+
+AC_CACHE_VAL(kde_cv_pythondir,
+[
+ if test -z "$PYTHONDIR"; then
+ kde_cv_pythondir=/usr/local
+ else
+ kde_cv_pythondir="$PYTHONDIR"
+ fi
+])
+
+AC_ARG_WITH(pythondir,
+AC_HELP_STRING([--with-pythondir=pythondir],[use python installed in pythondir]),
+[
+ ac_python_dir=$withval
+], ac_python_dir=$kde_cv_pythondir
+)
+
+AC_MSG_RESULT($ac_python_dir)
+])
+
+AC_DEFUN([KDE_CHECK_PYTHON_INTERN],
+[
+AC_REQUIRE([KDE_CHECK_LIBDL])
+AC_REQUIRE([KDE_CHECK_LIBPTHREAD])
+AC_REQUIRE([KDE_CHECK_PYTHON_DIR])
+
+if test -z "$1"; then
+ version="1.5"
+else
+ version="$1"
+fi
+
+AC_MSG_CHECKING([for Python$version])
+
+python_incdirs="$ac_python_dir/include /usr/include /usr/local/include/ $kde_extra_includes"
+AC_FIND_FILE(Python.h, $python_incdirs, python_incdir)
+if test ! -r $python_incdir/Python.h; then
+ AC_FIND_FILE(python$version/Python.h, $python_incdirs, python_incdir)
+ python_incdir=$python_incdir/python$version
+ if test ! -r $python_incdir/Python.h; then
+ python_incdir=no
+ fi
+fi
+
+PYTHONINC=-I$python_incdir
+
+python_libdirs="$ac_python_dir/lib$kdelibsuff /usr/lib$kdelibsuff /usr/local /usr/lib$kdelibsuff $kde_extra_libs"
+AC_FIND_FILE(libpython$version.so, $python_libdirs, python_libdir)
+if test ! -r $python_libdir/libpython$version.so; then
+ AC_FIND_FILE(libpython$version.a, $python_libdirs, python_libdir)
+ if test ! -r $python_libdir/libpython$version.a; then
+ AC_FIND_FILE(python$version/config/libpython$version.a, $python_libdirs, python_libdir)
+ python_libdir=$python_libdir/python$version/config
+ if test ! -r $python_libdir/libpython$version.a; then
+ python_libdir=no
+ fi
+ fi
+fi
+
+PYTHONLIB=-L$python_libdir
+kde_orig_LIBPYTHON=$LIBPYTHON
+if test -z "$LIBPYTHON"; then
+ LIBPYTHON=-lpython$version
+fi
+
+AC_FIND_FILE(python$version/copy.py, $python_libdirs, python_moddir)
+python_moddir=$python_moddir/python$version
+if test ! -r $python_moddir/copy.py; then
+ python_moddir=no
+fi
+
+PYTHONMODDIR=$python_moddir
+
+AC_MSG_RESULT(header $python_incdir library $python_libdir modules $python_moddir)
+
+if test x$python_incdir = xno || test x$python_libdir = xno || test x$python_moddir = xno; then
+ LIBPYTHON=$kde_orig_LIBPYTHON
+ test "x$PYTHONLIB" = "x-Lno" && PYTHONLIB=""
+ test "x$PYTHONINC" = "x-Ino" && PYTHONINC=""
+ $2
+else
+ dnl Note: this test is very weak
+ kde_python_link_found=no
+ KDE_TRY_LINK_PYTHON(normal)
+ KDE_TRY_LINK_PYTHON(m, -lm)
+ KDE_TRY_LINK_PYTHON(pthread, $LIBPTHREAD)
+ KDE_TRY_LINK_PYTHON(tcl, -ltcl)
+ KDE_TRY_LINK_PYTHON(db2, -ldb2)
+ KDE_TRY_LINK_PYTHON(m_and_thread, [$LIBPTHREAD -lm])
+ KDE_TRY_LINK_PYTHON(m_and_thread_and_util, [$LIBPTHREAD -lm -lutil])
+ KDE_TRY_LINK_PYTHON(m_and_thread_and_db3, [$LIBPTHREAD -lm -ldb-3 -lutil])
+ KDE_TRY_LINK_PYTHON(pthread_and_db3, [$LIBPTHREAD -ldb-3])
+ KDE_TRY_LINK_PYTHON(m_and_thread_and_db, [$LIBPTHREAD -lm -ldb -ltermcap -lutil])
+ KDE_TRY_LINK_PYTHON(pthread_and_dl, [$LIBPTHREAD $LIBDL -lutil -lreadline -lncurses -lm])
+ KDE_TRY_LINK_PYTHON(pthread_and_panel_curses, [$LIBPTHREAD $LIBDL -lm -lpanel -lcurses])
+ KDE_TRY_LINK_PYTHON(m_and_thread_and_db_special, [$LIBPTHREAD -lm -ldb -lutil], [],
+ [AC_MSG_WARN([it seems, Python depends on another library.
+ Please set LIBPYTHON to '-lpython$version -lotherlib' before calling configure to fix this
+ and contact the authors to let them know about this problem])
+ ])
+
+ LIBPYTHON="$LIBPYTHON $LIBDL $LIBSOCKET"
+ AC_SUBST(PYTHONINC)
+ AC_SUBST(PYTHONLIB)
+ AC_SUBST(LIBPYTHON)
+ AC_SUBST(PYTHONMODDIR)
+ AC_DEFINE(HAVE_PYTHON, 1, [Define if you have the development files for python])
+fi
+
+])
+
+
+AC_DEFUN([KDE_CHECK_PYTHON],
+[
+ KDE_CHECK_PYTHON_INTERN("2.4",
+ [KDE_CHECK_PYTHON_INTERN("2.3",
+ [KDE_CHECK_PYTHON_INTERN("2.2",
+ [KDE_CHECK_PYTHON_INTERN("2.1",
+ [KDE_CHECK_PYTHON_INTERN("2.0",
+ [KDE_CHECK_PYTHON_INTERN($1, $2) ])
+ ])
+ ])
+ ])
+ ])
+])
+
+AC_DEFUN([KDE_CHECK_STL],
+[
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="`echo $CXXFLAGS | sed s/-fno-exceptions//`"
+
+ AC_MSG_CHECKING([if C++ programs can be compiled])
+ AC_CACHE_VAL(kde_cv_stl_works,
+ [
+ AC_TRY_COMPILE([
+#include <string>
+using namespace std;
+],[
+ string astring="Hallo Welt.";
+ astring.erase(0, 6); // now astring is "Welt"
+ return 0;
+], kde_cv_stl_works=yes,
+ kde_cv_stl_works=no)
+])
+
+ AC_MSG_RESULT($kde_cv_stl_works)
+
+ if test "$kde_cv_stl_works" = "yes"; then
+ # back compatible
+ AC_DEFINE_UNQUOTED(HAVE_SGI_STL, 1, [Define if you have a STL implementation by SGI])
+ else
+ AC_MSG_ERROR([Your Installation isn't able to compile simple C++ programs.
+Check config.log for details - if you're using a Linux distribution you might miss
+a package named similar to libstdc++-dev.])
+ fi
+
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ AC_LANG_RESTORE
+])
+
+AC_DEFUN([AC_FIND_QIMGIO],
+ [AC_REQUIRE([AC_FIND_JPEG])
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+AC_MSG_CHECKING([for qimgio])
+AC_CACHE_VAL(ac_cv_lib_qimgio,
+[
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+ac_save_LIBS="$LIBS"
+ac_save_CXXFLAGS="$CXXFLAGS"
+LIBS="$all_libraries -lqimgio -lpng -lz $LIBJPEG $LIBQT"
+CXXFLAGS="$CXXFLAGS -I$qt_incdir $all_includes"
+AC_TRY_RUN(dnl
+[
+#include <qimageio.h>
+#include <qstring.h>
+int main() {
+ QString t = "hallo";
+ t.fill('t');
+ qInitImageIO();
+}
+],
+ ac_cv_lib_qimgio=yes,
+ ac_cv_lib_qimgio=no,
+ ac_cv_lib_qimgio=no)
+LIBS="$ac_save_LIBS"
+CXXFLAGS="$ac_save_CXXFLAGS"
+AC_LANG_RESTORE
+])dnl
+if eval "test \"`echo $ac_cv_lib_qimgio`\" = yes"; then
+ LIBQIMGIO="-lqimgio -lpng -lz $LIBJPEG"
+ AC_MSG_RESULT(yes)
+ AC_DEFINE_UNQUOTED(HAVE_QIMGIO, 1, [Define if you have the Qt extension qimgio available])
+ AC_SUBST(LIBQIMGIO)
+else
+ AC_MSG_RESULT(not found)
+fi
+])
+
+AC_DEFUN([AM_DISABLE_LIBRARIES],
+[
+ AC_PROVIDE([AM_ENABLE_STATIC])
+ AC_PROVIDE([AM_ENABLE_SHARED])
+ enable_static=no
+ enable_shared=yes
+])
+
+
+AC_DEFUN([AC_CHECK_UTMP_FILE],
+[
+ AC_MSG_CHECKING([for utmp file])
+
+ AC_CACHE_VAL(kde_cv_utmp_file,
+ [
+ kde_cv_utmp_file=no
+
+ for ac_file in \
+ \
+ /var/run/utmp \
+ /var/adm/utmp \
+ /etc/utmp \
+ ; \
+ do
+ if test -r "$ac_file"; then
+ kde_cv_utmp_file=$ac_file
+ break
+ fi
+ done
+ ])
+
+ if test "$kde_cv_utmp_file" != "no"; then
+ AC_DEFINE_UNQUOTED(UTMP, "$kde_cv_utmp_file", [Define the file for utmp entries])
+ $1
+ AC_MSG_RESULT($kde_cv_utmp_file)
+ else
+ $2
+ AC_MSG_RESULT([non found])
+ fi
+])
+
+
+AC_DEFUN([KDE_CREATE_SUBDIRSLIST],
+[
+
+DO_NOT_COMPILE="$DO_NOT_COMPILE CVS debian bsd-port admin"
+TOPSUBDIRS=""
+
+if test ! -s $srcdir/subdirs; then
+ dnl Note: Makefile.common creates subdirs, so this is just a fallback
+ files=`cd $srcdir && ls -1`
+ dirs=`for i in $files; do if test -d $i; then echo $i; fi; done`
+ for i in $dirs; do
+ echo $i >> $srcdir/subdirs
+ done
+fi
+
+ac_topsubdirs=
+if test -s $srcdir/inst-apps; then
+ ac_topsubdirs="`cat $srcdir/inst-apps`"
+elif test -s $srcdir/subdirs; then
+ ac_topsubdirs="`cat $srcdir/subdirs`"
+fi
+
+for i in $ac_topsubdirs; do
+ AC_MSG_CHECKING([if $i should be compiled])
+ if test -d $srcdir/$i; then
+ install_it="yes"
+ for j in $DO_NOT_COMPILE; do
+ if test $i = $j; then
+ install_it="no"
+ fi
+ done
+ else
+ install_it="no"
+ fi
+ AC_MSG_RESULT($install_it)
+ vari=`echo $i | sed -e 's,[[-+.@]],_,g'`
+ if test $install_it = "yes"; then
+ TOPSUBDIRS="$TOPSUBDIRS $i"
+ eval "$vari""_SUBDIR_included=yes"
+ else
+ eval "$vari""_SUBDIR_included=no"
+ fi
+done
+
+AC_SUBST(TOPSUBDIRS)
+])
+
+AC_DEFUN([KDE_CHECK_NAMESPACES],
+[
+AC_MSG_CHECKING(whether C++ compiler supports namespaces)
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+AC_TRY_COMPILE([
+],
+[
+namespace Foo {
+ extern int i;
+ namespace Bar {
+ extern int i;
+ }
+}
+
+int Foo::i = 0;
+int Foo::Bar::i = 1;
+],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_NAMESPACES)
+], [
+AC_MSG_RESULT(no)
+])
+AC_LANG_RESTORE
+])
+
+dnl ------------------------------------------------------------------------
+dnl Check for S_ISSOCK macro. Doesn't exist on Unix SCO. faure@kde.org
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([AC_CHECK_S_ISSOCK],
+[
+AC_MSG_CHECKING(for S_ISSOCK)
+AC_CACHE_VAL(ac_cv_have_s_issock,
+[
+AC_TRY_LINK(
+[
+#include <sys/stat.h>
+],
+[
+struct stat buff;
+int b = S_ISSOCK( buff.st_mode );
+],
+ac_cv_have_s_issock=yes,
+ac_cv_have_s_issock=no)
+])
+AC_MSG_RESULT($ac_cv_have_s_issock)
+if test "$ac_cv_have_s_issock" = "yes"; then
+ AC_DEFINE_UNQUOTED(HAVE_S_ISSOCK, 1, [Define if sys/stat.h declares S_ISSOCK.])
+fi
+
+AH_VERBATIM(_ISSOCK,
+[
+#ifndef HAVE_S_ISSOCK
+#define HAVE_S_ISSOCK
+#define S_ISSOCK(mode) (1==0)
+#endif
+])
+
+])
+
+dnl ------------------------------------------------------------------------
+dnl Check for MAXPATHLEN macro, defines KDEMAXPATHLEN. faure@kde.org
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([AC_CHECK_KDEMAXPATHLEN],
+[
+AC_MSG_CHECKING(for MAXPATHLEN)
+AC_CACHE_VAL(ac_cv_maxpathlen,
+[
+cat > conftest.$ac_ext <<EOF
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+#endif
+#include <stdio.h>
+#include <sys/param.h>
+#ifndef MAXPATHLEN
+#define MAXPATHLEN 1024
+#endif
+
+KDE_HELLO MAXPATHLEN
+
+EOF
+
+ac_try="$ac_cpp conftest.$ac_ext 2>/dev/null | grep '^KDE_HELLO' >conftest.out"
+
+if AC_TRY_EVAL(ac_try) && test -s conftest.out; then
+ ac_cv_maxpathlen=`sed 's#KDE_HELLO ##' conftest.out`
+else
+ ac_cv_maxpathlen=1024
+fi
+
+rm conftest.*
+
+])
+AC_MSG_RESULT($ac_cv_maxpathlen)
+AC_DEFINE_UNQUOTED(KDEMAXPATHLEN,$ac_cv_maxpathlen, [Define a safe value for MAXPATHLEN] )
+])
+
+AC_DEFUN([KDE_CHECK_HEADER],
+[
+ kde_safe_cppflags=$CPPFLAGS
+ CPPFLAGS="$CPPFLAGS $all_includes"
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_CHECK_HEADER([$1], [$2], [$3], [$4])
+ AC_LANG_RESTORE
+ CPPFLAGS=$kde_safe_cppflags
+])
+
+AC_DEFUN([KDE_CHECK_HEADERS],
+[
+ AH_CHECK_HEADERS([$1])
+ AC_LANG_SAVE
+ kde_safe_cppflags=$CPPFLAGS
+ CPPFLAGS="$CPPFLAGS $all_includes"
+ AC_LANG_CPLUSPLUS
+ AC_CHECK_HEADERS([$1], [$2], [$3], [$4])
+ CPPFLAGS=$kde_safe_cppflags
+ AC_LANG_RESTORE
+])
+
+AC_DEFUN([KDE_FAST_CONFIGURE],
+[
+ dnl makes configure fast (needs perl)
+ AC_ARG_ENABLE(fast-perl, AC_HELP_STRING([--disable-fast-perl],[disable fast Makefile generation (needs perl)]),
+ with_fast_perl=$enableval, with_fast_perl=yes)
+])
+
+AC_DEFUN([KDE_CONF_FILES],
+[
+ val=
+ if test -f $srcdir/configure.files ; then
+ val=`sed -e 's%^%\$(top_srcdir)/%' $srcdir/configure.files`
+ fi
+ CONF_FILES=
+ if test -n "$val" ; then
+ for i in $val ; do
+ CONF_FILES="$CONF_FILES $i"
+ done
+ fi
+ AC_SUBST(CONF_FILES)
+])dnl
+
+dnl This sets the prefix, for arts and kdelibs
+dnl Do NOT use in any other module.
+dnl It only looks at --prefix, KDEDIR and falls back to /usr/local/kde
+AC_DEFUN([KDE_SET_PREFIX_CORE],
+[
+ unset CDPATH
+ dnl make $KDEDIR the default for the installation
+ AC_PREFIX_DEFAULT(${KDEDIR:-/usr/local/kde})
+
+ if test "x$prefix" = "xNONE"; then
+ prefix=$ac_default_prefix
+ ac_configure_args="$ac_configure_args --prefix=$prefix"
+ fi
+ # And delete superfluous '/' to make compares easier
+ prefix=`echo "$prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'`
+ exec_prefix=`echo "$exec_prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'`
+
+ kde_libs_prefix='$(prefix)'
+ kde_libs_htmldir='$(kde_htmldir)'
+ AC_SUBST(kde_libs_prefix)
+ AC_SUBST(kde_libs_htmldir)
+ KDE_FAST_CONFIGURE
+ KDE_CONF_FILES
+])
+
+
+AC_DEFUN([KDE_SET_PREFIX],
+[
+ unset CDPATH
+ dnl We can't give real code to that macro, only a value.
+ dnl It only matters for --help, since we set the prefix in this function anyway.
+ AC_PREFIX_DEFAULT(${KDEDIR:-the kde prefix})
+
+ KDE_SET_DEFAULT_BINDIRS
+ if test "x$prefix" = "xNONE"; then
+ dnl no prefix given: look for kde-config in the PATH and deduce the prefix from it
+ KDE_FIND_PATH(kde-config, KDECONFIG, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(kde-config)], [], prepend)
+ else
+ dnl prefix given: look for kde-config, preferrably in prefix, otherwise in PATH
+ kde_save_PATH="$PATH"
+ PATH="$exec_prefix/bin:$prefix/bin:$PATH"
+ KDE_FIND_PATH(kde-config, KDECONFIG, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(kde-config)], [], prepend)
+ PATH="$kde_save_PATH"
+ fi
+
+ kde_libs_prefix=`$KDECONFIG --prefix`
+ if test -z "$kde_libs_prefix" || test ! -x "$kde_libs_prefix"; then
+ AC_MSG_ERROR([$KDECONFIG --prefix outputed the non existant prefix '$kde_libs_prefix' for kdelibs.
+ This means it has been moved since you installed it.
+ This won't work. Please recompile kdelibs for the new prefix.
+ ])
+ fi
+ kde_libs_htmldir=`$KDECONFIG --install html --expandvars`
+ kde_libs_suffix=`$KDECONFIG --libsuffix` || kde_libs_suffix=auto
+
+ AC_MSG_CHECKING([where to install])
+ if test "x$prefix" = "xNONE"; then
+ prefix=$kde_libs_prefix
+ AC_MSG_RESULT([$prefix (as returned by kde-config)])
+ else
+ dnl --prefix was given. Compare prefixes and warn (in configure.in.bot.end) if different
+ given_prefix=$prefix
+ AC_MSG_RESULT([$prefix (as requested)])
+ fi
+
+ # And delete superfluous '/' to make compares easier
+ prefix=`echo "$prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'`
+ exec_prefix=`echo "$exec_prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'`
+ given_prefix=`echo "$given_prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'`
+
+ AC_SUBST(KDECONFIG)
+ AC_SUBST(kde_libs_prefix)
+ AC_SUBST(kde_libs_htmldir)
+
+ KDE_FAST_CONFIGURE
+ KDE_CONF_FILES
+])
+
+pushdef([AC_PROG_INSTALL],
+[
+ dnl our own version, testing for a -p flag
+ popdef([AC_PROG_INSTALL])
+ dnl as AC_PROG_INSTALL works as it works we first have
+ dnl to save if the user didn't specify INSTALL, as the
+ dnl autoconf one overwrites INSTALL and we have no chance to find
+ dnl out afterwards
+ test -n "$INSTALL" && kde_save_INSTALL_given=$INSTALL
+ test -n "$INSTALL_PROGRAM" && kde_save_INSTALL_PROGRAM_given=$INSTALL_PROGRAM
+ test -n "$INSTALL_SCRIPT" && kde_save_INSTALL_SCRIPT_given=$INSTALL_SCRIPT
+ AC_PROG_INSTALL
+
+ if test -z "$kde_save_INSTALL_given" ; then
+ # OK, user hasn't given any INSTALL, autoconf found one for us
+ # now we test, if it supports the -p flag
+ AC_MSG_CHECKING(for -p flag to install)
+ rm -f confinst.$$.* > /dev/null 2>&1
+ echo "Testtest" > confinst.$$.orig
+ ac_res=no
+ if ${INSTALL} -p confinst.$$.orig confinst.$$.new > /dev/null 2>&1 ; then
+ if test -f confinst.$$.new ; then
+ # OK, -p seems to do no harm to install
+ INSTALL="${INSTALL} -p"
+ ac_res=yes
+ fi
+ fi
+ rm -f confinst.$$.*
+ AC_MSG_RESULT($ac_res)
+ fi
+ dnl the following tries to resolve some signs and wonders coming up
+ dnl with different autoconf/automake versions
+ dnl e.g.:
+ dnl *automake 1.4 install-strip sets A_M_INSTALL_PROGRAM_FLAGS to -s
+ dnl and has INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(A_M_INSTALL_PROGRAM_FLAGS)
+ dnl it header-vars.am, so there the actual INSTALL_PROGRAM gets the -s
+ dnl *automake 1.4a (and above) use INSTALL_STRIP_FLAG and only has
+ dnl INSTALL_PROGRAM = @INSTALL_PROGRAM@ there, but changes the
+ dnl install-@DIR@PROGRAMS targets to explicitly use that flag
+ dnl *autoconf 2.13 is dumb, and thinks it can use INSTALL_PROGRAM as
+ dnl INSTALL_SCRIPT, which breaks with automake <= 1.4
+ dnl *autoconf >2.13 (since 10.Apr 1999) has not that failure
+ dnl *sometimes KDE does not use the install-@DIR@PROGRAM targets from
+ dnl automake (due to broken Makefile.am or whatever) to install programs,
+ dnl and so does not see the -s flag in automake > 1.4
+ dnl to clean up that mess we:
+ dnl +set INSTALL_PROGRAM to use INSTALL_STRIP_FLAG
+ dnl which cleans KDE's program with automake > 1.4;
+ dnl +set INSTALL_SCRIPT to only use INSTALL, to clean up autoconf's problems
+ dnl with automake<=1.4
+ dnl note that dues to this sometimes two '-s' flags are used (if KDE
+ dnl properly uses install-@DIR@PROGRAMS, but I don't care
+ dnl
+ dnl And to all this comes, that I even can't write in comments variable
+ dnl names used by automake, because it is so stupid to think I wanted to
+ dnl _use_ them, therefor I have written A_M_... instead of AM_
+ dnl hmm, I wanted to say something ... ahh yes: Arghhh.
+
+ if test -z "$kde_save_INSTALL_PROGRAM_given" ; then
+ INSTALL_PROGRAM='${INSTALL} $(INSTALL_STRIP_FLAG)'
+ fi
+ if test -z "$kde_save_INSTALL_SCRIPT_given" ; then
+ INSTALL_SCRIPT='${INSTALL}'
+ fi
+])dnl
+
+AC_DEFUN([KDE_LANG_CPLUSPLUS],
+[AC_LANG_CPLUSPLUS
+ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&AC_FD_CC'
+pushdef([AC_LANG_CPLUSPLUS], [popdef([AC_LANG_CPLUSPLUS]) KDE_LANG_CPLUSPLUS])
+])
+
+pushdef([AC_LANG_CPLUSPLUS],
+[popdef([AC_LANG_CPLUSPLUS])
+KDE_LANG_CPLUSPLUS
+])
+
+AC_DEFUN([KDE_CHECK_LONG_LONG],
+[
+AC_MSG_CHECKING(for long long)
+AC_CACHE_VAL(kde_cv_c_long_long,
+[
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_TRY_LINK([], [
+ long long foo = 0;
+ foo = foo+1;
+ ],
+ kde_cv_c_long_long=yes, kde_cv_c_long_long=no)
+ AC_LANG_RESTORE
+])
+AC_MSG_RESULT($kde_cv_c_long_long)
+if test "$kde_cv_c_long_long" = yes; then
+ AC_DEFINE(HAVE_LONG_LONG, 1, [Define if you have long long as datatype])
+fi
+])
+
+AC_DEFUN([KDE_CHECK_LIB],
+[
+ kde_save_LDFLAGS="$LDFLAGS"
+ dnl AC_CHECK_LIB modifies LIBS, so save it here
+ kde_save_LIBS="$LIBS"
+ LDFLAGS="$LDFLAGS $all_libraries"
+ case $host_os in
+ aix*) LDFLAGS="-brtl $LDFLAGS"
+ test "$GCC" = yes && LDFLAGS="-Wl,$LDFLAGS"
+ ;;
+ esac
+ AC_CHECK_LIB($1, $2, $3, $4, $5)
+ LDFLAGS="$kde_save_LDFLAGS"
+ LIBS="$kde_save_LIBS"
+])
+
+AC_DEFUN([KDE_JAVA_PREFIX],
+[
+ dir=`dirname "$1"`
+ base=`basename "$1"`
+ list=`ls -1 $dir 2> /dev/null`
+ for entry in $list; do
+ if test -d $dir/$entry/bin; then
+ case $entry in
+ $base)
+ javadirs="$javadirs $dir/$entry/bin"
+ ;;
+ esac
+ elif test -d $dir/$entry/jre/bin; then
+ case $entry in
+ $base)
+ javadirs="$javadirs $dir/$entry/jre/bin"
+ ;;
+ esac
+ fi
+ done
+])
+
+dnl KDE_CHEC_JAVA_DIR(onlyjre)
+AC_DEFUN([KDE_CHECK_JAVA_DIR],
+[
+
+AC_ARG_WITH(java,
+AC_HELP_STRING([--with-java=javadir],[use java installed in javadir, --without-java disables]),
+[ ac_java_dir=$withval
+], ac_java_dir=""
+)
+
+AC_MSG_CHECKING([for Java])
+
+dnl at this point ac_java_dir is either a dir, 'no' to disable, or '' to say look in $PATH
+if test "x$ac_java_dir" = "xno"; then
+ kde_java_bindir=no
+ kde_java_includedir=no
+ kde_java_libjvmdir=no
+ kde_java_libgcjdir=no
+ kde_java_libhpidir=no
+else
+ if test "x$ac_java_dir" = "x"; then
+
+
+ dnl No option set -> collect list of candidate paths
+ if test -n "$JAVA_HOME"; then
+ KDE_JAVA_PREFIX($JAVA_HOME)
+ fi
+ KDE_JAVA_PREFIX(/usr/j2se)
+ KDE_JAVA_PREFIX(/usr/lib/j2se)
+ KDE_JAVA_PREFIX(/usr/j*dk*)
+ KDE_JAVA_PREFIX(/usr/lib/j*dk*)
+ KDE_JAVA_PREFIX(/opt/j*sdk*)
+ KDE_JAVA_PREFIX(/usr/lib/java*)
+ KDE_JAVA_PREFIX(/usr/java*)
+ KDE_JAVA_PREFIX(/usr/java/j*dk*)
+ KDE_JAVA_PREFIX(/usr/java/j*re*)
+ KDE_JAVA_PREFIX(/usr/lib/SunJava2*)
+ KDE_JAVA_PREFIX(/usr/lib/SunJava*)
+ KDE_JAVA_PREFIX(/usr/lib/IBMJava2*)
+ KDE_JAVA_PREFIX(/usr/lib/IBMJava*)
+ KDE_JAVA_PREFIX(/opt/java*)
+
+ kde_cv_path="NONE"
+ kde_save_IFS=$IFS
+ IFS=':'
+ for dir in $PATH; do
+ if test -d "$dir"; then
+ javadirs="$javadirs $dir"
+ fi
+ done
+ IFS=$kde_save_IFS
+ jredirs=
+
+ dnl Now javadirs contains a list of paths that exist, all ending with bin/
+ for dir in $javadirs; do
+ dnl Check for the java executable
+ if test -x "$dir/java"; then
+ dnl And also check for a libjvm.so somewhere under there
+ dnl Since we have to go to the parent dir, /usr/bin is excluded, /usr is too big.
+ if test "$dir" != "/usr/bin"; then
+ libjvmdir=`find $dir/.. -name libjvm.so | sed 's,libjvm.so,,'|head -n 1`
+ if test ! -f $libjvmdir/libjvm.so; then continue; fi
+ jredirs="$jredirs $dir"
+ fi
+ fi
+ done
+
+ dnl Now jredirs contains a reduced list, of paths where both java and ../**/libjvm.so was found
+ JAVAC=
+ JAVA=
+ kde_java_bindir=no
+ for dir in $jredirs; do
+ JAVA="$dir/java"
+ kde_java_bindir=$dir
+ if test -x "$dir/javac"; then
+ JAVAC="$dir/javac"
+ break
+ fi
+ done
+
+ if test -n "$JAVAC"; then
+ dnl this substitution might not work - well, we test for jni.h below
+ kde_java_includedir=`echo $JAVAC | sed -e 's,bin/javac$,include/,'`
+ else
+ kde_java_includedir=no
+ fi
+ else
+ dnl config option set
+ kde_java_bindir=$ac_java_dir/bin
+ if test -x $ac_java_dir/bin/java && test ! -x $ac_java_dir/bin/javac; then
+ kde_java_includedir=no
+ else
+ kde_java_includedir=$ac_java_dir/include
+ fi
+ fi
+fi
+
+dnl At this point kde_java_bindir and kde_java_includedir are either set or "no"
+if test "x$kde_java_bindir" != "xno"; then
+
+ dnl Look for libjvm.so
+ kde_java_libjvmdir=`find $kde_java_bindir/.. -name libjvm.so | sed 's,libjvm.so,,'|head -n 1`
+ dnl Look for libgcj.so
+ kde_java_libgcjdir=`find $kde_java_bindir/.. -name libgcj.so | sed 's,libgcj.so,,'|head -n 1`
+ dnl Look for libhpi.so and avoid green threads
+ kde_java_libhpidir=`find $kde_java_bindir/.. -name libhpi.so | grep -v green | sed 's,libhpi.so,,' | head -n 1`
+
+ dnl Now check everything's fine under there
+ dnl the include dir is our flag for having the JDK
+ if test -d "$kde_java_includedir"; then
+ if test ! -x "$kde_java_bindir/javac"; then
+ AC_MSG_ERROR([javac not found under $kde_java_bindir - it seems you passed a wrong --with-java.])
+ fi
+ if test ! -x "$kde_java_bindir/javah"; then
+ AC_MSG_ERROR([javah not found under $kde_java_bindir. javac was found though! Use --with-java or --without-java.])
+ fi
+ if test ! -x "$kde_java_bindir/jar"; then
+ AC_MSG_ERROR([jar not found under $kde_java_bindir. javac was found though! Use --with-java or --without-java.])
+ fi
+ if test ! -r "$kde_java_includedir/jni.h"; then
+ AC_MSG_ERROR([jni.h not found under $kde_java_includedir. Use --with-java or --without-java.])
+ fi
+
+ jni_includes="-I$kde_java_includedir"
+ dnl Strange thing, jni.h requires jni_md.h which is under genunix here..
+ dnl and under linux here..
+
+ dnl not needed for gcj
+
+ if test "x$kde_java_libgcjdir" = "x"; then
+ test -d "$kde_java_includedir/linux" && jni_includes="$jni_includes -I$kde_java_includedir/linux"
+ test -d "$kde_java_includedir/solaris" && jni_includes="$jni_includes -I$kde_java_includedir/solaris"
+ test -d "$kde_java_includedir/genunix" && jni_includes="$jni_includes -I$kde_java_includedir/genunix"
+ fi
+
+ else
+ JAVAC=
+ jni_includes=
+ fi
+
+ if test "x$kde_java_libgcjdir" = "x"; then
+ if test ! -r "$kde_java_libjvmdir/libjvm.so"; then
+ AC_MSG_ERROR([libjvm.so not found under $kde_java_libjvmdir. Use --without-java.])
+ fi
+ else
+ if test ! -r "$kde_java_libgcjdir/libgcj.so"; then
+ AC_MSG_ERROR([libgcj.so not found under $kde_java_libgcjdir. Use --without-java.])
+ fi
+ fi
+
+ if test ! -x "$kde_java_bindir/java"; then
+ AC_MSG_ERROR([java not found under $kde_java_bindir. javac was found though! Use --with-java or --without-java.])
+ fi
+
+ dnl not needed for gcj compile
+
+ if test "x$kde_java_libgcjdir" = "x"; then
+ if test ! -r "$kde_java_libhpidir/libhpi.so"; then
+ AC_MSG_ERROR([libhpi.so not found under $kde_java_libhpidir. Use --without-java.])
+ fi
+ fi
+
+ if test -n "$jni_includes"; then
+ dnl Check for JNI version
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_cxxflags_safe="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS $all_includes $jni_includes"
+
+ AC_TRY_COMPILE([
+ #include <jni.h>
+ ],
+ [
+ #ifndef JNI_VERSION_1_2
+ Syntax Error
+ #endif
+ ],[ kde_jni_works=yes ],
+ [ kde_jni_works=no ])
+
+ if test $kde_jni_works = no; then
+ AC_MSG_ERROR([Incorrect version of $kde_java_includedir/jni.h.
+ You need to have Java Development Kit (JDK) version 1.2.
+
+ Use --with-java to specify another location.
+ Use --without-java to configure without java support.
+ Or download a newer JDK and try again.
+ See e.g. http://java.sun.com/products/jdk/1.2 ])
+ fi
+
+ CXXFLAGS="$ac_cxxflags_safe"
+ AC_LANG_RESTORE
+
+ dnl All tests ok, inform and subst the variables
+
+ JAVAC=$kde_java_bindir/javac
+ JAVAH=$kde_java_bindir/javah
+ JAR=$kde_java_bindir/jar
+ AC_DEFINE_UNQUOTED(PATH_JAVA, "$kde_java_bindir/java", [Define where your java executable is])
+ if test "x$kde_java_libgcjdir" = "x"; then
+ JVMLIBS="-L$kde_java_libjvmdir -ljvm -L$kde_java_libhpidir -lhpi"
+ else
+ JVMLIBS="-L$kde_java_libgcjdir -lgcj"
+ fi
+ AC_MSG_RESULT([java JDK in $kde_java_bindir])
+
+ else
+ AC_DEFINE_UNQUOTED(PATH_JAVA, "$kde_java_bindir/java", [Define where your java executable is])
+ AC_MSG_RESULT([java JRE in $kde_java_bindir])
+ fi
+elif test -d "/Library/Java/Home"; then
+ kde_java_bindir="/Library/Java/Home/bin"
+ jni_includes="-I/Library/Java/Home/include"
+
+ JAVAC=$kde_java_bindir/javac
+ JAVAH=$kde_java_bindir/javah
+ JAR=$kde_java_bindir/jar
+ JVMLIBS="-Wl,-framework,JavaVM"
+
+ AC_DEFINE_UNQUOTED(PATH_JAVA, "$kde_java_bindir/java", [Define where your java executable is])
+ AC_MSG_RESULT([Apple Java Framework])
+else
+ AC_MSG_RESULT([none found])
+fi
+
+AC_SUBST(JAVAC)
+AC_SUBST(JAVAH)
+AC_SUBST(JAR)
+AC_SUBST(JVMLIBS)
+AC_SUBST(jni_includes)
+
+# for backward compat
+kde_cv_java_includedir=$kde_java_includedir
+kde_cv_java_bindir=$kde_java_bindir
+])
+
+dnl this is a redefinition of autoconf 2.5x's AC_FOREACH.
+dnl When the argument list becomes big, as in KDE for AC_OUTPUT in
+dnl big packages, m4_foreach is dog-slow. So use our own version of
+dnl it. (matz@kde.org)
+m4_define([mm_foreach],
+[m4_pushdef([$1])_mm_foreach($@)m4_popdef([$1])])
+m4_define([mm_car], [[$1]])
+m4_define([mm_car2], [[$@]])
+m4_define([_mm_foreach],
+[m4_if(m4_quote($2), [], [],
+ [m4_define([$1], mm_car($2))$3[]_mm_foreach([$1],
+ mm_car2(m4_shift($2)),
+ [$3])])])
+m4_define([AC_FOREACH],
+[mm_foreach([$1], m4_split(m4_normalize([$2])), [$3])])
+
+AC_DEFUN([KDE_NEED_FLEX],
+[
+kde_libs_safe=$LIBS
+LIBS="$LIBS $USER_LDFLAGS"
+AM_PROG_LEX
+LIBS=$kde_libs_safe
+if test -z "$LEXLIB"; then
+ AC_MSG_ERROR([You need to have flex installed.])
+fi
+AC_SUBST(LEXLIB)
+])
+
+AC_DEFUN([AC_PATH_QTOPIA],
+[
+ dnl TODO: use AC_CACHE_VAL
+
+ if test -z "$1"; then
+ qtopia_minver_maj=1
+ qtopia_minver_min=5
+ qtopia_minver_pat=0
+ else
+ qtopia_minver_maj=`echo "$1" | sed -e "s/^\(.*\)\..*\..*$/\1/"`
+ qtopia_minver_min=`echo "$1" | sed -e "s/^.*\.\(.*\)\..*$/\1/"`
+ qtopia_minver_pat=`echo "$1" | sed -e "s/^.*\..*\.\(.*\)$/\1/"`
+ fi
+
+ qtopia_minver="$qtopia_minver_maj$qtopia_minver_min$qtopia_minver_pat"
+ qtopia_minverstr="$qtopia_minver_maj.$qtopia_minver_min.$qtopia_minver_pat"
+
+ AC_REQUIRE([AC_PATH_QT])
+
+ AC_MSG_CHECKING([for Qtopia])
+
+ LIB_QTOPIA="-lqpe"
+ AC_SUBST(LIB_QTOPIA)
+
+ kde_qtopia_dirs="$QPEDIR /opt/Qtopia"
+
+ ac_qtopia_incdir=NO
+
+ AC_ARG_WITH(qtopia-dir,
+ AC_HELP_STRING([--with-qtopia-dir=DIR],[where the root of Qtopia is installed]),
+ [ ac_qtopia_incdir="$withval"/include] )
+
+ qtopia_incdirs=""
+ for dir in $kde_qtopia_dirs; do
+ qtopia_incdirs="$qtopia_incdirs $dir/include"
+ done
+
+ if test ! "$ac_qtopia_incdir" = "NO"; then
+ qtopia_incdirs="$ac_qtopia_incdir $qtopia_incdirs"
+ fi
+
+ qtopia_incdir=""
+ AC_FIND_FILE(qpe/qpeapplication.h, $qtopia_incdirs, qtopia_incdir)
+ ac_qtopia_incdir="$qtopia_incdir"
+
+ if test -z "$qtopia_incdir"; then
+ AC_MSG_ERROR([Cannot find Qtopia headers. Please check your installation.])
+ fi
+
+ qtopia_ver_maj=`cat $qtopia_incdir/qpe/version.h | sed -n -e 's,.*QPE_VERSION "\(.*\)\..*\..*".*,\1,p'`;
+ qtopia_ver_min=`cat $qtopia_incdir/qpe/version.h | sed -n -e 's,.*QPE_VERSION ".*\.\(.*\)\..*".*,\1,p'`;
+ qtopia_ver_pat=`cat $qtopia_incdir/qpe/version.h | sed -n -e 's,.*QPE_VERSION ".*\..*\.\(.*\)".*,\1,p'`;
+
+ qtopia_ver="$qtopia_ver_maj$qtopia_ver_min$qtopia_ver_pat"
+ qtopia_verstr="$qtopia_ver_maj.$qtopia_ver_min.$qtopia_ver_pat"
+ if test "$qtopia_ver" -lt "$qtopia_minver"; then
+ AC_MSG_ERROR([found Qtopia version $qtopia_verstr but version $qtopia_minverstr
+is required.])
+ fi
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+
+ ac_cxxflags_safe="$CXXFLAGS"
+ ac_ldflags_safe="$LDFLAGS"
+ ac_libs_safe="$LIBS"
+
+ CXXFLAGS="$CXXFLAGS -I$qtopia_incdir $all_includes"
+ LDFLAGS="$LDFLAGS $QT_LDFLAGS $all_libraries $USER_LDFLAGS $KDE_MT_LDFLAGS"
+ LIBS="$LIBS $LIB_QTOPIA $LIBQT"
+
+ cat > conftest.$ac_ext <<EOF
+#include "confdefs.h"
+#include <qpe/qpeapplication.h>
+#include <qpe/version.h>
+
+int main( int argc, char **argv )
+{
+ QPEApplication app( argc, argv );
+ return 0;
+}
+EOF
+
+ if AC_TRY_EVAL(ac_link) && test -s conftest; then
+ rm -f conftest*
+ else
+ rm -f conftest*
+ AC_MSG_ERROR([Cannot link small Qtopia Application. For more details look at
+the end of config.log])
+ fi
+
+ CXXFLAGS="$ac_cxxflags_safe"
+ LDFLAGS="$ac_ldflags_safe"
+ LIBS="$ac_libs_safe"
+
+ AC_LANG_RESTORE
+
+ QTOPIA_INCLUDES="-I$qtopia_incdir"
+ AC_SUBST(QTOPIA_INCLUDES)
+
+ AC_MSG_RESULT([found version $qtopia_verstr with headers at $qtopia_incdir])
+])
+
+
+AC_DEFUN([KDE_INIT_DOXYGEN],
+[
+AC_MSG_CHECKING([for Qt docs])
+kde_qtdir=
+if test "${with_qt_dir+set}" = set; then
+ kde_qtdir="$with_qt_dir"
+fi
+
+AC_FIND_FILE(qsql.html, [ $kde_qtdir/doc/html $QTDIR/doc/html /usr/share/doc/packages/qt3/html /usr/lib/qt/doc /usr/lib/qt3/doc /usr/lib/qt3/doc/html /usr/doc/qt3/html /usr/doc/qt3 /usr/share/doc/qt3-doc /usr/share/qt3/doc/html /usr/X11R6/share/doc/qt/html ], QTDOCDIR)
+AC_MSG_RESULT($QTDOCDIR)
+
+AC_SUBST(QTDOCDIR)
+
+KDE_FIND_PATH(dot, DOT, [], [])
+if test -n "$DOT"; then
+ KDE_HAVE_DOT="YES"
+else
+ KDE_HAVE_DOT="NO"
+fi
+AC_SUBST(KDE_HAVE_DOT)
+KDE_FIND_PATH(doxygen, DOXYGEN, [], [])
+AC_SUBST(DOXYGEN)
+
+DOXYGEN_PROJECT_NAME="$1"
+DOXYGEN_PROJECT_NUMBER="$2"
+AC_SUBST(DOXYGEN_PROJECT_NAME)
+AC_SUBST(DOXYGEN_PROJECT_NUMBER)
+
+KDE_HAS_DOXYGEN=no
+if test -n "$DOXYGEN" && test -x "$DOXYGEN" && test -f $QTDOCDIR/qsql.html; then
+ KDE_HAS_DOXYGEN=yes
+fi
+AC_SUBST(KDE_HAS_DOXYGEN)
+
+])
+
+
+AC_DEFUN([AC_FIND_BZIP2],
+[
+AC_MSG_CHECKING([for bzDecompress in libbz2])
+AC_CACHE_VAL(ac_cv_lib_bzip2,
+[
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+kde_save_LIBS="$LIBS"
+LIBS="$all_libraries $USER_LDFLAGS -lbz2 $LIBSOCKET"
+kde_save_CXXFLAGS="$CXXFLAGS"
+CXXFLAGS="$CXXFLAGS $all_includes $USER_INCLUDES"
+AC_TRY_LINK(dnl
+[
+#define BZ_NO_STDIO
+#include<bzlib.h>
+],
+ [ bz_stream s; (void) bzDecompress(&s); ],
+ eval "ac_cv_lib_bzip2='-lbz2'",
+ eval "ac_cv_lib_bzip2=no")
+LIBS="$kde_save_LIBS"
+CXXFLAGS="$kde_save_CXXFLAGS"
+AC_LANG_RESTORE
+])dnl
+AC_MSG_RESULT($ac_cv_lib_bzip2)
+
+if test ! "$ac_cv_lib_bzip2" = no; then
+ BZIP2DIR=bzip2
+
+ LIBBZ2="$ac_cv_lib_bzip2"
+ AC_SUBST(LIBBZ2)
+
+else
+
+ cxx_shared_flag=
+ ld_shared_flag=
+ KDE_CHECK_COMPILER_FLAG(shared, [
+ ld_shared_flag="-shared"
+ ])
+ KDE_CHECK_COMPILER_FLAG(fPIC, [
+ cxx_shared_flag="-fPIC"
+ ])
+
+ AC_MSG_CHECKING([for BZ2_bzDecompress in (shared) libbz2])
+ AC_CACHE_VAL(ac_cv_lib_bzip2_prefix,
+ [
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ kde_save_LIBS="$LIBS"
+ LIBS="$all_libraries $USER_LDFLAGS $ld_shared_flag -lbz2 $LIBSOCKET"
+ kde_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CFLAGS $cxx_shared_flag $all_includes $USER_INCLUDES"
+
+ AC_TRY_LINK(dnl
+ [
+ #define BZ_NO_STDIO
+ #include<bzlib.h>
+ ],
+ [ bz_stream s; (void) BZ2_bzDecompress(&s); ],
+ eval "ac_cv_lib_bzip2_prefix='-lbz2'",
+ eval "ac_cv_lib_bzip2_prefix=no")
+ LIBS="$kde_save_LIBS"
+ CXXFLAGS="$kde_save_CXXFLAGS"
+ AC_LANG_RESTORE
+ ])dnl
+
+ AC_MSG_RESULT($ac_cv_lib_bzip2_prefix)
+
+ if test ! "$ac_cv_lib_bzip2_prefix" = no; then
+ BZIP2DIR=bzip2
+
+ LIBBZ2="$ac_cv_lib_bzip2_prefix"
+ AC_SUBST(LIBBZ2)
+
+ AC_DEFINE(NEED_BZ2_PREFIX, 1, [Define if the libbz2 functions need the BZ2_ prefix])
+ dnl else, we just ignore this
+ fi
+
+fi
+AM_CONDITIONAL(include_BZIP2, test -n "$BZIP2DIR")
+])
+
+dnl ------------------------------------------------------------------------
+dnl Try to find the SSL headers and libraries.
+dnl $(SSL_LDFLAGS) will be -Lsslliblocation (if needed)
+dnl and $(SSL_INCLUDES) will be -Isslhdrlocation (if needed)
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([KDE_CHECK_SSL],
+[
+LIBSSL="-lssl -lcrypto"
+AC_REQUIRE([KDE_CHECK_LIB64])
+
+ac_ssl_includes=NO ac_ssl_libraries=NO
+ssl_libraries=""
+ssl_includes=""
+AC_ARG_WITH(ssl-dir,
+ AC_HELP_STRING([--with-ssl-dir=DIR],[where the root of OpenSSL is installed]),
+ [ ac_ssl_includes="$withval"/include
+ ac_ssl_libraries="$withval"/lib$kdelibsuff
+ ])
+
+want_ssl=yes
+AC_ARG_WITH(ssl,
+ AC_HELP_STRING([--without-ssl],[disable SSL checks]),
+ [want_ssl=$withval])
+
+if test $want_ssl = yes; then
+
+AC_MSG_CHECKING(for OpenSSL)
+
+AC_CACHE_VAL(ac_cv_have_ssl,
+[#try to guess OpenSSL locations
+
+ ssl_incdirs="/usr/include /usr/local/include /usr/ssl/include /usr/local/ssl/include $prefix/include $kde_extra_includes"
+ ssl_incdirs="$ac_ssl_includes $ssl_incdirs"
+ AC_FIND_FILE(openssl/ssl.h, $ssl_incdirs, ssl_incdir)
+ ac_ssl_includes="$ssl_incdir"
+
+ ssl_libdirs="/usr/lib$kdelibsuff /usr/local/lib$kdelibsuff /usr/ssl/lib$kdelibsuff /usr/local/ssl/lib$kdelibsuff $libdir $prefix/lib$kdelibsuff $exec_prefix/lib$kdelibsuff $kde_extra_libs"
+ if test ! "$ac_ssl_libraries" = "NO"; then
+ ssl_libdirs="$ac_ssl_libraries $ssl_libdirs"
+ fi
+
+ test=NONE
+ ssl_libdir=NONE
+ for dir in $ssl_libdirs; do
+ try="ls -1 $dir/libssl*"
+ if test=`eval $try 2> /dev/null`; then ssl_libdir=$dir; break; else echo "tried $dir" >&AC_FD_CC ; fi
+ done
+
+ ac_ssl_libraries="$ssl_libdir"
+
+ ac_ldflags_safe="$LDFLAGS"
+ ac_libs_safe="$LIBS"
+
+ LDFLAGS="$LDFLAGS -L$ssl_libdir $all_libraries"
+ LIBS="$LIBS $LIBSSL -lRSAglue -lrsaref"
+
+ AC_TRY_LINK(,void RSAPrivateEncrypt(void);RSAPrivateEncrypt();,
+ ac_ssl_rsaref="yes"
+ ,
+ ac_ssl_rsaref="no"
+ )
+
+ LDFLAGS="$ac_ldflags_safe"
+ LIBS="$ac_libs_safe"
+
+ if test "$ac_ssl_includes" = NO || test "$ac_ssl_libraries" = NO; then
+ have_ssl=no
+ else
+ have_ssl=yes;
+ fi
+
+ ])
+
+ eval "$ac_cv_have_ssl"
+
+ AC_MSG_RESULT([libraries $ac_ssl_libraries, headers $ac_ssl_includes])
+
+ AC_MSG_CHECKING([whether OpenSSL uses rsaref])
+ AC_MSG_RESULT($ac_ssl_rsaref)
+
+ AC_MSG_CHECKING([for easter eggs])
+ AC_MSG_RESULT([none found])
+
+else
+ have_ssl=no
+fi
+
+if test "$have_ssl" = yes; then
+ AC_MSG_CHECKING(for OpenSSL version)
+ dnl Check for SSL version
+ AC_CACHE_VAL(ac_cv_ssl_version,
+ [
+
+ cat >conftest.$ac_ext <<EOF
+#include <openssl/opensslv.h>
+#include <stdio.h>
+ int main() {
+
+#ifndef OPENSSL_VERSION_NUMBER
+ printf("ssl_version=\\"error\\"\n");
+#else
+ if (OPENSSL_VERSION_NUMBER < 0x00906000)
+ printf("ssl_version=\\"old\\"\n");
+ else
+ printf("ssl_version=\\"ok\\"\n");
+#endif
+ return (0);
+ }
+EOF
+
+ ac_save_CPPFLAGS=$CPPFLAGS
+ if test "$ac_ssl_includes" != "/usr/include"; then
+ CPPFLAGS="$CPPFLAGS -I$ac_ssl_includes"
+ fi
+
+ if AC_TRY_EVAL(ac_link); then
+
+ if eval `./conftest 2>&5`; then
+ if test $ssl_version = error; then
+ AC_MSG_ERROR([$ssl_incdir/openssl/opensslv.h doesn't define OPENSSL_VERSION_NUMBER !])
+ else
+ if test $ssl_version = old; then
+ AC_MSG_WARN([OpenSSL version too old. Upgrade to 0.9.6 at least, see http://www.openssl.org. SSL support disabled.])
+ have_ssl=no
+ fi
+ fi
+ ac_cv_ssl_version="ssl_version=$ssl_version"
+ else
+ AC_MSG_ERROR([Your system couldn't run a small SSL test program.
+ Check config.log, and if you can't figure it out, send a mail to
+ David Faure <faure@kde.org>, attaching your config.log])
+ fi
+
+ else
+ AC_MSG_ERROR([Your system couldn't link a small SSL test program.
+ Check config.log, and if you can't figure it out, send a mail to
+ David Faure <faure@kde.org>, attaching your config.log])
+ fi
+ CPPFLAGS=$ac_save_CPPFLAGS
+
+ ])
+
+ eval "$ac_cv_ssl_version"
+ AC_MSG_RESULT($ssl_version)
+fi
+
+if test "$have_ssl" != yes; then
+ LIBSSL="";
+else
+ AC_DEFINE(HAVE_SSL, 1, [If we are going to use OpenSSL])
+ ac_cv_have_ssl="have_ssl=yes \
+ ac_ssl_includes=$ac_ssl_includes ac_ssl_libraries=$ac_ssl_libraries ac_ssl_rsaref=$ac_ssl_rsaref"
+
+
+ ssl_libraries="$ac_ssl_libraries"
+ ssl_includes="$ac_ssl_includes"
+
+ if test "$ac_ssl_rsaref" = yes; then
+ LIBSSL="-lssl -lcrypto -lRSAglue -lrsaref"
+ fi
+
+ if test $ssl_version = "old"; then
+ AC_DEFINE(HAVE_OLD_SSL_API, 1, [Define if you have OpenSSL < 0.9.6])
+ fi
+fi
+
+SSL_INCLUDES=
+
+if test "$ssl_includes" = "/usr/include"; then
+ if test -f /usr/kerberos/include/krb5.h; then
+ SSL_INCLUDES="-I/usr/kerberos/include"
+ fi
+elif test "$ssl_includes" != "/usr/local/include" && test -n "$ssl_includes"; then
+ SSL_INCLUDES="-I$ssl_includes"
+fi
+
+if test "$ssl_libraries" = "/usr/lib" || test "$ssl_libraries" = "/usr/local/lib" || test -z "$ssl_libraries" || test "$ssl_libraries" = "NONE"; then
+ SSL_LDFLAGS=""
+else
+ SSL_LDFLAGS="-L$ssl_libraries -R$ssl_libraries"
+fi
+
+AC_SUBST(SSL_INCLUDES)
+AC_SUBST(SSL_LDFLAGS)
+AC_SUBST(LIBSSL)
+])
+
+AC_DEFUN([KDE_CHECK_STRLCPY],
+[
+ AC_REQUIRE([AC_CHECK_STRLCAT])
+ AC_REQUIRE([AC_CHECK_STRLCPY])
+ AC_CHECK_SIZEOF(size_t)
+ AC_CHECK_SIZEOF(unsigned long)
+
+ AC_MSG_CHECKING([sizeof size_t == sizeof unsigned long])
+ AC_TRY_COMPILE(,[
+ #if SIZEOF_SIZE_T != SIZEOF_UNSIGNED_LONG
+ choke me
+ #endif
+ ],AC_MSG_RESULT([yes]),[
+ AC_MSG_RESULT(no)
+ AC_MSG_ERROR([
+ Apparently on your system our assumption sizeof size_t == sizeof unsigned long
+ does not apply. Please mail kde-devel@kde.org with a description of your system!
+ ])
+ ])
+])
+
+AC_DEFUN([KDE_CHECK_BINUTILS],
+[
+ AC_MSG_CHECKING([if ld supports unversioned version maps])
+
+ kde_save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map"
+ echo "{ local: extern \"C++\" { foo }; };" > conftest.map
+ AC_TRY_LINK([int foo;],
+[
+#ifdef __INTEL_COMPILER
+icc apparently does not support libtools version-info and version-script
+at the same time. Dunno where the bug is, but until somebody figured out,
+better disable the optional version scripts.
+#endif
+
+ foo = 42;
+], kde_supports_versionmaps=yes, kde_supports_versionmaps=no)
+ LDFLAGS="$kde_save_LDFLAGS"
+ rm -f conftest.map
+ AM_CONDITIONAL(include_VERSION_SCRIPT,
+ [test "$kde_supports_versionmaps" = "yes" && test "$kde_use_debug_code" = "no"])
+
+ AC_MSG_RESULT($kde_supports_versionmaps)
+])
+
+AC_DEFUN([AM_PROG_OBJC],[
+AC_CHECK_PROGS(OBJC, gcc, gcc)
+test -z "$OBJC" && AC_MSG_ERROR([no acceptable objective-c gcc found in \$PATH])
+if test "x${OBJCFLAGS-unset}" = xunset; then
+ OBJCFLAGS="-g -O2"
+fi
+AC_SUBST(OBJCFLAGS)
+_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES(OBJC)])
+])
+
+AC_DEFUN([KDE_CHECK_PERL],
+[
+ KDE_FIND_PATH(perl, PERL, [$bindir $exec_prefix/bin $prefix/bin], [
+ AC_MSG_ERROR([No Perl found in your $PATH.
+We need perl to generate some code.])
+ ])
+ AC_SUBST(PERL)
+])
+
+AC_DEFUN([KDE_CHECK_LARGEFILE],
+[
+AC_SYS_LARGEFILE
+if test "$ac_cv_sys_file_offset_bits" != no; then
+ CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
+fi
+
+if test "x$ac_cv_sys_large_files" != "xno"; then
+ CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=1"
+fi
+
+])
+
+dnl A small extension to PKG_CHECK_MODULES (defined in pkg.m4.in)
+dnl which allows to search for libs that get installed into the KDE prefix.
+dnl
+dnl Syntax: KDE_PKG_CHECK_MODULES(KSTUFF, libkexif >= 0.2 glib = 1.3.4, action-if, action-not)
+dnl defines KSTUFF_LIBS, KSTUFF_CFLAGS, see pkg-config man page
+dnl also defines KSTUFF_PKG_ERRORS on error
+AC_DEFUN([KDE_PKG_CHECK_MODULES], [
+
+ PKG_CONFIG_PATH="$prefix/lib${kdelibsuff}/pkgconfig:$PKG_CONFIG_PATH"
+ if test "$prefix" != "$kde_libs_prefix"; then
+ PKG_CONFIG_PATH="$kde_libs_prefix/lib${kdelibsuff}/pkgconfig:$PKG_CONFIG_PATH"
+ fi
+ export PKG_CONFIG_PATH
+ PKG_CHECK_MODULES([$1],[$2],[$3],[$4])
+])
+
+
+dnl Check for PIE support in the compiler and linker
+AC_DEFUN([KDE_CHECK_PIE_SUPPORT],
+[
+ AC_CACHE_CHECK([for PIE support], kde_cv_val_pie_support,
+ [
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ safe_CXXFLAGS=$CXXFLAGS
+ safe_LDFLAGS=$LDFLAGS
+ CXXFLAGS="$CXXFLAGS -fPIE"
+ LDFLAGS="$LDFLAGS -pie"
+
+ AC_TRY_LINK([int foo;], [], [kde_cv_val_pie_support=yes], [kde_cv_val_pie_support=no])
+
+ CXXFLAGS=$safe_CXXFLAGS
+ LDFLAGS=$safe_LDFLAGS
+ AC_LANG_RESTORE
+ ])
+
+ AC_MSG_CHECKING(if enabling -pie/fPIE support)
+
+ AC_ARG_ENABLE(pie,
+ AC_HELP_STRING([--enable-pie],[platform supports PIE linking [default=detect]]),
+ [kde_has_pie_support=$enableval],
+ [kde_has_pie_support=detect])
+
+ if test "$kde_has_pie_support" = "detect"; then
+ kde_has_pie_support=$kde_cv_val_pie_support
+ fi
+
+ AC_MSG_RESULT([$kde_has_pie_support])
+
+ KDE_USE_FPIE=""
+ KDE_USE_PIE=""
+
+ AC_SUBST([KDE_USE_FPIE])
+ AC_SUBST([KDE_USE_PIE])
+
+ if test "$kde_has_pie_support" = "yes"; then
+ KDE_USE_FPIE="-fPIE"
+ KDE_USE_PIE="-pie"
+ fi
+])
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+## Copyright 1996, 1997, 1998, 1999, 2000, 2001
+## Free Software Foundation, Inc.
+## Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+##
+## 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.
+##
+## As a special exception to the GNU General Public License, if you
+## distribute this file as part of a program that contains a
+## configuration script generated by Autoconf, you may include it under
+## the same distribution terms that you use for the rest of that program.
+
+# serial 47 AC_PROG_LIBTOOL
+
+
+# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
+# -----------------------------------------------------------
+# If this macro is not defined by Autoconf, define it here.
+m4_ifdef([AC_PROVIDE_IFELSE],
+ [],
+ [m4_define([AC_PROVIDE_IFELSE],
+ [m4_ifdef([AC_PROVIDE_$1],
+ [$2], [$3])])])
+
+
+# AC_PROG_LIBTOOL
+# ---------------
+AC_DEFUN([AC_PROG_LIBTOOL],
+[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl
+dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
+dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
+ AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [AC_LIBTOOL_CXX],
+ [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
+ ])])
+dnl And a similar setup for Fortran 77 support
+ AC_PROVIDE_IFELSE([AC_PROG_F77],
+ [AC_LIBTOOL_F77],
+ [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77
+])])
+
+dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
+dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
+dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
+ AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+ [AC_LIBTOOL_GCJ],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+ [AC_LIBTOOL_GCJ],
+ [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
+ [AC_LIBTOOL_GCJ],
+ [ifdef([AC_PROG_GCJ],
+ [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+ ifdef([A][M_PROG_GCJ],
+ [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+ ifdef([LT_AC_PROG_GCJ],
+ [define([LT_AC_PROG_GCJ],
+ defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])
+])])# AC_PROG_LIBTOOL
+
+
+# _AC_PROG_LIBTOOL
+# ----------------
+AC_DEFUN([_AC_PROG_LIBTOOL],
+[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool --silent'
+AC_SUBST(LIBTOOL)dnl
+
+# Prevent multiple expansion
+define([AC_PROG_LIBTOOL], [])
+])# _AC_PROG_LIBTOOL
+
+
+# AC_LIBTOOL_SETUP
+# ----------------
+AC_DEFUN([AC_LIBTOOL_SETUP],
+[AC_PREREQ(2.50)dnl
+AC_REQUIRE([AC_ENABLE_SHARED])dnl
+AC_REQUIRE([AC_ENABLE_STATIC])dnl
+AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_LD])dnl
+AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
+AC_REQUIRE([AC_PROG_NM])dnl
+
+AC_REQUIRE([AC_PROG_LN_S])dnl
+AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
+# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
+AC_REQUIRE([AC_OBJEXT])dnl
+AC_REQUIRE([AC_EXEEXT])dnl
+dnl
+
+AC_LIBTOOL_SYS_MAX_CMD_LEN
+AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+AC_LIBTOOL_OBJDIR
+
+AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+_LT_AC_PROG_ECHO_BACKSLASH
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e s/^X//'
+[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g']
+
+# Same as above, but do not quote variable references.
+[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g']
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+AC_CHECK_TOOL(AR, ar, false)
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+AC_CHECK_TOOL(STRIP, strip, :)
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$SED" && SED=sed
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
+ ;;
+ *)
+ old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ AC_PATH_MAGIC
+ fi
+ ;;
+esac
+
+AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+enable_win32_dll=yes, enable_win32_dll=no)
+
+AC_ARG_ENABLE([libtool-lock],
+ [AC_HELP_STRING([--disable-libtool-lock],
+ [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+AC_ARG_WITH([pic],
+ [AC_HELP_STRING([--with-pic],
+ [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+ [pic_mode="$withval"],
+ [pic_mode=default])
+test -z "$pic_mode" && pic_mode=default
+
+# Use C for the default configuration in the libtool script
+tagname=
+AC_LIBTOOL_LANG_C_CONFIG
+_LT_AC_TAGCONFIG
+])# AC_LIBTOOL_SETUP
+
+
+# _LT_AC_SYS_COMPILER
+# -------------------
+AC_DEFUN([_LT_AC_SYS_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_AC_SYS_COMPILER
+
+
+# _LT_AC_SYS_LIBPATH_AIX
+# ----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
+[AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_AC_SYS_LIBPATH_AIX
+
+
+# _LT_AC_SHELL_INIT(ARG)
+# ----------------------
+AC_DEFUN([_LT_AC_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+ [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+ [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_AC_SHELL_INIT
+
+
+# _LT_AC_PROG_ECHO_BACKSLASH
+# --------------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
+[_LT_AC_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+ # Remove one level of quotation (which was required for Make).
+ ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+ ;;
+esac
+
+echo=${ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X[$]1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
+ # Yippee, $echo works!
+ :
+else
+ # Restart under the correct shell.
+ exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<EOF
+[$]*
+EOF
+ exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+if test -z "$ECHO"; then
+if test "X${echo_test_string+set}" != Xset; then
+# find a string as large as possible, as long as the shell can cope with it
+ for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+ if (echo_test_string="`eval $cmd`") 2>/dev/null &&
+ echo_test_string="`eval $cmd`" &&
+ (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+ then
+ break
+ fi
+ done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ :
+else
+ # The Solaris, AIX, and Digital Unix default echo programs unquote
+ # backslashes. This makes it impossible to quote backslashes using
+ # echo "$something" | sed 's/\\/\\\\/g'
+ #
+ # So, first we look for a working echo in the user's PATH.
+
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for dir in $PATH /usr/ucb; do
+ IFS="$lt_save_ifs"
+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ echo="$dir/echo"
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ if test "X$echo" = Xecho; then
+ # We didn't find a better echo, so look for alternatives.
+ if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # This shell has a builtin print -r that does the trick.
+ echo='print -r'
+ elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+ test "X$CONFIG_SHELL" != X/bin/ksh; then
+ # If we have ksh, try running configure again with it.
+ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ export ORIGINAL_CONFIG_SHELL
+ CONFIG_SHELL=/bin/ksh
+ export CONFIG_SHELL
+ exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+ else
+ # Try using printf.
+ echo='printf %s\n'
+ if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # Cool, printf works
+ :
+ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+ export CONFIG_SHELL
+ SHELL="$CONFIG_SHELL"
+ export SHELL
+ echo="$CONFIG_SHELL [$]0 --fallback-echo"
+ elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ echo="$CONFIG_SHELL [$]0 --fallback-echo"
+ else
+ # maybe with a smaller string...
+ prev=:
+
+ for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+ if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+ then
+ break
+ fi
+ prev="$cmd"
+ done
+
+ if test "$prev" != 'sed 50q "[$]0"'; then
+ echo_test_string=`eval $prev`
+ export echo_test_string
+ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+ else
+ # Oops. We lost completely, so just stick with echo.
+ echo=echo
+ fi
+ fi
+ fi
+ fi
+fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+ ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(ECHO)
+])])# _LT_AC_PROG_ECHO_BACKSLASH
+
+
+# _LT_AC_LOCK
+# -----------
+AC_DEFUN([_LT_AC_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+ [AC_HELP_STRING([--disable-libtool-lock],
+ [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case "`/usr/bin/file conftest.o`" in
+ *32-bit*)
+ LINUX_64_MODE="32"
+ case $host in
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ LINUX_64_MODE="64"
+ case $host in
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+ [AC_LANG_PUSH(C)
+ AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+ AC_LANG_POP])
+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS="$SAVE_CFLAGS"
+ fi
+ ;;
+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
+ AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+ AC_CHECK_TOOL(AS, as, false)
+ AC_CHECK_TOOL(OBJDUMP, objdump, false)
+ ;;
+ ])
+esac
+
+need_locks="$enable_libtool_lock"
+
+])# _LT_AC_LOCK
+
+
+# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],
+[AC_REQUIRE([LT_AC_PROG_SED])
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$3"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test ! -s conftest.err; then
+ $2=yes
+ fi
+ fi
+ $rm conftest*
+])
+
+if test x"[$]$2" = xyes; then
+ ifelse([$5], , :, [$5])
+else
+ ifelse([$6], , :, [$6])
+fi
+])# AC_LIBTOOL_COMPILER_OPTION
+
+
+# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [ACTION-SUCCESS], [ACTION-FAILURE])
+# ------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
+[AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $3"
+ printf "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&AS_MESSAGE_LOG_FD
+ else
+ $2=yes
+ fi
+ fi
+ $rm conftest*
+ LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+ ifelse([$4], , :, [$4])
+else
+ ifelse([$5], , :, [$5])
+fi
+])# AC_LIBTOOL_LINKER_OPTION
+
+
+# AC_LIBTOOL_SYS_MAX_CMD_LEN
+# --------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],
+[# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+ i=0
+ testring="ABCD"
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ *)
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while (test "X"`$CONFIG_SHELL [$]0 --fallback-echo "X$testring" 2>/dev/null` \
+ = "XX$testring") >/dev/null 2>&1 &&
+ new_result=`expr "X$testring" : ".*" 2>&1` &&
+ lt_cv_sys_max_cmd_len=$new_result &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ testring=$testring$testring
+ done
+ testring=
+ # Add a significant safety factor because C++ compilers can tack on massive
+ # amounts of additional arguments before passing them to the linker.
+ # It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ ;;
+ esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+ AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+ AC_MSG_RESULT(none)
+fi
+])# AC_LIBTOOL_SYS_MAX_CMD_LEN
+
+
+# _LT_AC_CHECK_DLFCN
+# --------------------
+AC_DEFUN([_LT_AC_CHECK_DLFCN],
+[AC_CHECK_HEADERS(dlfcn.h)dnl
+])# _LT_AC_CHECK_DLFCN
+
+
+# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ------------------------------------------------------------------
+AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
+[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+ [$4]
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+
+ exit (status);
+}]
+EOF
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) $1 ;;
+ x$lt_dlneed_uscore) $2 ;;
+ x$lt_unknown|x*) $3 ;;
+ esac
+ else :
+ # compilation failed
+ $3
+ fi
+fi
+rm -fr conftest*
+])# _LT_AC_TRY_DLOPEN_SELF
+
+
+# AC_LIBTOOL_DLOPEN_SELF
+# -------------------
+AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
+[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ])
+ ;;
+
+ *)
+ AC_CHECK_FUNC([shl_load],
+ [lt_cv_dlopen="shl_load"],
+ [AC_CHECK_LIB([dld], [shl_load],
+ [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"],
+ [AC_CHECK_FUNC([dlopen],
+ [lt_cv_dlopen="dlopen"],
+ [AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+ [AC_CHECK_LIB([svld], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+ [AC_CHECK_LIB([dld], [dld_link],
+ [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
+ ])
+ ])
+ ])
+ ])
+ ])
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ AC_CACHE_CHECK([whether a program can dlopen itself],
+ lt_cv_dlopen_self, [dnl
+ _LT_AC_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+ lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+ ])
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ LDFLAGS="$LDFLAGS $link_static_flag"
+ AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+ lt_cv_dlopen_self_static, [dnl
+ _LT_AC_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+ lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
+ ])
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+])# AC_LIBTOOL_DLOPEN_SELF
+
+
+# AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
+# ---------------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler
+AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+ [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+ [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+ $rm -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+ # that will create temporary files in the current directory regardless of
+ # the output directory. Thus, making CWD read-only will cause this test
+ # to fail, enabling locking or at least warning the user not to do parallel
+ # builds.
+ chmod -w .
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test ! -s out/conftest.err; then
+ _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+ fi
+ fi
+ chmod u+w .
+ $rm conftest* out/*
+ rmdir out
+ cd ..
+ rmdir conftest
+ $rm conftest*
+])
+])# AC_LIBTOOL_PROG_CC_C_O
+
+
+# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])
+# -----------------------------------------
+# Check to see if we can do hard links to lock some files if needed
+AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS],
+[AC_REQUIRE([_LT_AC_LOCK])dnl
+
+hard_links="nottested"
+if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ AC_MSG_CHECKING([if we can lock with hard links])
+ hard_links=yes
+ $rm conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ AC_MSG_RESULT([$hard_links])
+ if test "$hard_links" = no; then
+ AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS
+
+
+# AC_LIBTOOL_OBJDIR
+# -----------------
+AC_DEFUN([AC_LIBTOOL_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+])# AC_LIBTOOL_OBJDIR
+
+
+# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])
+# ----------------------------------------------
+# Check hardcoding attributes.
+AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_AC_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \
+ test -n "$_LT_AC_TAGVAR(runpath_var $1)" || \
+ test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)"="Xyes" ; then
+
+ # We can hardcode non-existant directories.
+ if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+ test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then
+ # Linking always hardcodes the temporary library directory.
+ _LT_AC_TAGVAR(hardcode_action, $1)=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ _LT_AC_TAGVAR(hardcode_action, $1)=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ _LT_AC_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH
+
+
+# AC_LIBTOOL_SYS_LIB_STRIP
+# ------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP],
+[striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+fi
+ ;;
+ *)
+ AC_MSG_RESULT([no])
+ ;;
+ esac
+fi
+])# AC_LIBTOOL_SYS_LIB_STRIP
+
+
+# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
+[AC_MSG_CHECKING([dynamic linker characteristics])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix4* | aix5*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[[01]] | aix4.[[01]].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi4*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32*)
+ version_type=windows
+ shrext=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $rm \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+ ;;
+ mingw*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext='$(test .$module = .yes && echo .so || echo .dylib)'
+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+ if test "$GCC" = yes; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+ else
+ sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+ fi
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd*-gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='GNU ld.so'
+ ;;
+
+freebsd*)
+ objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ *) # from 3.2 on
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case "$host_cpu" in
+ ia64*)
+ shrext='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ libsuff=
+ if test "x$LINUX_64_MODE" = x64; then
+ # Some platforms are per default 64-bit, so there's no /lib64
+ if test -d /lib64; then
+ libsuff=64
+ fi
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}"
+ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+nto-qnx*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+openbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[[89]] | openbsd2.[[89]].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+sco3.2v5*)
+ version_type=osf
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+
+
+# _LT_AC_TAGCONFIG
+# ----------------
+AC_DEFUN([_LT_AC_TAGCONFIG],
+[AC_ARG_WITH([tags],
+ [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
+ [include additional configurations @<:@automatic@:>@])],
+ [tagnames="$withval"])
+
+if test -f "$ltmain" && test -n "$tagnames"; then
+ if test ! -f "${ofile}"; then
+ AC_MSG_WARN([output file `$ofile' does not exist])
+ fi
+
+ if test -z "$LTCC"; then
+ eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
+ if test -z "$LTCC"; then
+ AC_MSG_WARN([output file `$ofile' does not look like a libtool script])
+ else
+ AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
+ fi
+ fi
+
+ # Extract list of available tagged configurations in $ofile.
+ # Note that this assumes the entire list is on one line.
+ available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
+
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for tagname in $tagnames; do
+ IFS="$lt_save_ifs"
+ # Check whether tagname contains only valid characters
+ case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in
+ "") ;;
+ *) AC_MSG_ERROR([invalid tag name: $tagname])
+ ;;
+ esac
+
+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
+ then
+ AC_MSG_ERROR([tag name \"$tagname\" already exists])
+ fi
+
+ # Update the list of available tags.
+ if test -n "$tagname"; then
+ echo appending configuration tag \"$tagname\" to $ofile
+
+ case $tagname in
+ CXX)
+ if test -n "$CXX" && test "X$CXX" != "Xno"; then
+ AC_LIBTOOL_LANG_CXX_CONFIG
+ else
+ tagname=""
+ fi
+ ;;
+
+ F77)
+ if test -n "$F77" && test "X$F77" != "Xno"; then
+ AC_LIBTOOL_LANG_F77_CONFIG
+ else
+ tagname=""
+ fi
+ ;;
+
+ GCJ)
+ if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
+ AC_LIBTOOL_LANG_GCJ_CONFIG
+ else
+ tagname=""
+ fi
+ ;;
+
+ RC)
+ AC_LIBTOOL_LANG_RC_CONFIG
+ ;;
+
+ *)
+ AC_MSG_ERROR([Unsupported tag name: $tagname])
+ ;;
+ esac
+
+ # Append the new tag name to the list of available tags.
+ if test -n "$tagname" ; then
+ available_tags="$available_tags $tagname"
+ fi
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ # Now substitute the updated list of available tags.
+ if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
+ mv "${ofile}T" "$ofile"
+ chmod +x "$ofile"
+ else
+ rm -f "${ofile}T"
+ AC_MSG_ERROR([unable to update list of available tagged configurations.])
+ fi
+fi
+])# _LT_AC_TAGCONFIG
+
+
+# AC_LIBTOOL_DLOPEN
+# -----------------
+# enable checks for dlopen support
+AC_DEFUN([AC_LIBTOOL_DLOPEN],
+ [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_DLOPEN
+
+
+# AC_LIBTOOL_WIN32_DLL
+# --------------------
+# declare package support for building win32 dll's
+AC_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_BEFORE([$0], [AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_WIN32_DLL
+
+
+# AC_ENABLE_SHARED([DEFAULT])
+# ---------------------------
+# implement the --enable-shared flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_SHARED],
+[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([shared],
+ [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+ [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_shared=]AC_ENABLE_SHARED_DEFAULT)
+])# AC_ENABLE_SHARED
+
+
+# AC_DISABLE_SHARED
+# -----------------
+#- set the default shared flag to --disable-shared
+AC_DEFUN([AC_DISABLE_SHARED],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_SHARED(no)
+])# AC_DISABLE_SHARED
+
+
+# AC_ENABLE_STATIC([DEFAULT])
+# ---------------------------
+# implement the --enable-static flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_STATIC],
+[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([static],
+ [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+ [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_static=]AC_ENABLE_STATIC_DEFAULT)
+])# AC_ENABLE_STATIC
+
+
+# AC_DISABLE_STATIC
+# -----------------
+# set the default static flag to --disable-static
+AC_DEFUN([AC_DISABLE_STATIC],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_STATIC(no)
+])# AC_DISABLE_STATIC
+
+
+# AC_ENABLE_FAST_INSTALL([DEFAULT])
+# ---------------------------------
+# implement the --enable-fast-install flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_FAST_INSTALL],
+[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([fast-install],
+ [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+ [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT)
+])# AC_ENABLE_FAST_INSTALL
+
+
+# AC_DISABLE_FAST_INSTALL
+# -----------------------
+# set the default to --disable-fast-install
+AC_DEFUN([AC_DISABLE_FAST_INSTALL],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_FAST_INSTALL(no)
+])# AC_DISABLE_FAST_INSTALL
+
+
+# AC_LIBTOOL_PICMODE([MODE])
+# --------------------------
+# implement the --with-pic flag
+# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
+AC_DEFUN([AC_LIBTOOL_PICMODE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+pic_mode=ifelse($#,1,$1,default)
+])# AC_LIBTOOL_PICMODE
+
+
+# AC_PROG_EGREP
+# -------------
+# This is predefined starting with Autoconf 2.54, so this conditional
+# definition can be removed once we require Autoconf 2.54 or later.
+m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP],
+[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
+ [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+ then ac_cv_prog_egrep='grep -E'
+ else ac_cv_prog_egrep='egrep'
+ fi])
+ EGREP=$ac_cv_prog_egrep
+ AC_SUBST([EGREP])
+])])
+
+
+# AC_PATH_TOOL_PREFIX
+# -------------------
+# find a file program which can recognise shared library
+AC_DEFUN([AC_PATH_TOOL_PREFIX],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] | ?:[\\/]*])
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word. This closes a longstanding sh security hole.
+ ac_dummy="ifelse([$2], , $PATH, [$2])"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$1; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ AC_MSG_RESULT($MAGIC_CMD)
+else
+ AC_MSG_RESULT(no)
+fi
+])# AC_PATH_TOOL_PREFIX
+
+
+# AC_PATH_MAGIC
+# -------------
+# find a file program which can recognise a shared library
+AC_DEFUN([AC_PATH_MAGIC],
+[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+ else
+ MAGIC_CMD=:
+ fi
+fi
+])# AC_PATH_MAGIC
+
+
+# AC_PROG_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([AC_PROG_LD],
+[AC_ARG_WITH([gnu-ld],
+ [AC_HELP_STRING([--with-gnu-ld],
+ [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+ [test "$withval" = no || with_gnu_ld=yes],
+ [with_gnu_ld=no])
+AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by $CC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]]* | ?:[[\\/]]*)
+ re_direlt='/[[^/]][[^/]]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
+ while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some GNU ld's only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT($LD)
+else
+ AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_PROG_LD_GNU
+])# AC_PROG_LD
+
+
+# AC_PROG_LD_GNU
+# --------------
+AC_DEFUN([AC_PROG_LD_GNU],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# AC_PROG_LD_GNU
+
+
+# AC_PROG_LD_RELOAD_FLAG
+# ----------------------
+# find reload flag for linker
+# -- PORTME Some linkers may need a different reload flag.
+AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+ lt_cv_ld_reload_flag,
+ [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+])# AC_PROG_LD_RELOAD_FLAG
+
+
+# AC_DEPLIBS_CHECK_METHOD
+# -----------------------
+# how to check for library dependencies
+# -- PORTME fill in with the dynamic library characteristics
+AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
+[AC_CACHE_CHECK([how to recognise dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix4* | aix5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi4*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+mingw* | pw32*)
+ # win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='win32_libid'
+ ;;
+
+darwin* | rhapsody*)
+ # this will be overwritten by pass_all, but leave it in just in case
+ lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ case "$host_os" in
+ rhapsody* | darwin1.[[012]])
+ lt_cv_file_magic_test_file=`/System/Library/Frameworks/System.framework/System`
+ ;;
+ *) # Darwin 1.3 on
+ lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
+ ;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case "$host_cpu" in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ irix5* | nonstopux*)
+ # this will be overridden with pass_all, but let us keep it just in case
+ lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
+ ;;
+ *)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ # this will be overridden with pass_all, but let us keep it just in case
+ lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[[1234]] dynamic lib MIPS - version 1"
+ ;;
+ esac
+ lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be Linux ELF.
+linux*)
+ case $host_cpu in
+ alpha* | hppa* | i*86 | ia64* | m68* | mips* | powerpc* | sparc* | s390* | sh* | x86_64* )
+ lt_cv_deplibs_check_method=pass_all ;;
+ # the debian people say, arm and glibc 2.3.1 works for them with pass_all
+ arm* )
+ lt_cv_deplibs_check_method=pass_all ;;
+ *)
+ # glibc up to 2.1.1 does not perform some relocations on ARM
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;;
+ esac
+ lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+nto-qnx*)
+ lt_cv_deplibs_check_method=unknown
+ ;;
+
+openbsd*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object'
+ else
+ lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ # this will be overridden with pass_all, but let us keep it just in case
+ lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sco3.2v5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+])# AC_DEPLIBS_CHECK_METHOD
+
+
+# AC_PROG_NM
+# ----------
+# find the pathname to a BSD-compatible name lister
+AC_DEFUN([AC_PROG_NM],
+[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM,
+[if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM="$NM"
+else
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/${ac_tool_prefix}nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+ test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi])
+NM="$lt_cv_path_NM"
+])# AC_PROG_NM
+
+
+# AC_CHECK_LIBM
+# -------------
+# check for math library
+AC_DEFUN([AC_CHECK_LIBM],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+ # These system don't have libm, or don't need it
+ ;;
+*-ncr-sysv4.3*)
+ AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+ AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+ ;;
+*)
+ AC_CHECK_LIB(m, cos, LIBM="-lm")
+ ;;
+esac
+])# AC_CHECK_LIBM
+
+
+# AC_LIBLTDL_CONVENIENCE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl convenience library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-convenience to the configure arguments. Note that LIBLTDL
+# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If
+# DIRECTORY is not provided, it is assumed to be `libltdl'. LIBLTDL will
+# be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with
+# '${top_srcdir}/' (note the single quotes!). If your package is not
+# flat and you're not using automake, define top_builddir and
+# top_srcdir appropriately in the Makefiles.
+AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+ case $enable_ltdl_convenience in
+ no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
+ "") enable_ltdl_convenience=yes
+ ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
+ esac
+ LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
+ LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+ # For backwards non-gettext consistent compatibility...
+ INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_CONVENIENCE
+
+
+# AC_LIBLTDL_INSTALLABLE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl installable library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-install to the configure arguments. Note that LIBLTDL
+# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If
+# DIRECTORY is not provided and an installed libltdl is not found, it is
+# assumed to be `libltdl'. LIBLTDL will be prefixed with '${top_builddir}/'
+# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single
+# quotes!). If your package is not flat and you're not using automake,
+# define top_builddir and top_srcdir appropriately in the Makefiles.
+# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
+AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+ AC_CHECK_LIB(ltdl, lt_dlinit,
+ [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
+ [if test x"$enable_ltdl_install" = xno; then
+ AC_MSG_WARN([libltdl not installed, but installation disabled])
+ else
+ enable_ltdl_install=yes
+ fi
+ ])
+ if test x"$enable_ltdl_install" = x"yes"; then
+ ac_configure_args="$ac_configure_args --enable-ltdl-install"
+ LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
+ LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+ else
+ ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
+ LIBLTDL="-lltdl"
+ LTDLINCL=
+ fi
+ # For backwards non-gettext consistent compatibility...
+ INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_INSTALLABLE
+
+
+# AC_LIBTOOL_CXX
+# --------------
+# enable support for C++ libraries
+AC_DEFUN([AC_LIBTOOL_CXX],
+[AC_REQUIRE([_LT_AC_LANG_CXX])
+])# AC_LIBTOOL_CXX
+
+
+# _LT_AC_LANG_CXX
+# ---------------
+AC_DEFUN([_LT_AC_LANG_CXX],
+[AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([AC_PROG_CXXCPP])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX])
+])# _LT_AC_LANG_CXX
+
+
+# AC_LIBTOOL_F77
+# --------------
+# enable support for Fortran 77 libraries
+AC_DEFUN([AC_LIBTOOL_F77],
+[AC_REQUIRE([_LT_AC_LANG_F77])
+])# AC_LIBTOOL_F77
+
+
+# _LT_AC_LANG_F77
+# ---------------
+AC_DEFUN([_LT_AC_LANG_F77],
+[AC_REQUIRE([AC_PROG_F77])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77])
+])# _LT_AC_LANG_F77
+
+
+# AC_LIBTOOL_GCJ
+# --------------
+# enable support for GCJ libraries
+AC_DEFUN([AC_LIBTOOL_GCJ],
+[AC_REQUIRE([_LT_AC_LANG_GCJ])
+])# AC_LIBTOOL_GCJ
+
+
+# _LT_AC_LANG_GCJ
+# ---------------
+AC_DEFUN([_LT_AC_LANG_GCJ],
+[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
+ [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
+ [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
+ [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
+ [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ])
+])# _LT_AC_LANG_GCJ
+
+
+# AC_LIBTOOL_RC
+# --------------
+# enable support for Windows resource files
+AC_DEFUN([AC_LIBTOOL_RC],
+[AC_REQUIRE([LT_AC_PROG_RC])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC])
+])# AC_LIBTOOL_RC
+
+
+# AC_LIBTOOL_LANG_C_CONFIG
+# ------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG])
+AC_DEFUN([_LT_AC_LANG_C_CONFIG],
+[lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}\n'
+
+_LT_AC_SYS_COMPILER
+
+#
+# Check for any special shared library compilation flags.
+#
+_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)=
+if test "$GCC" = no; then
+ case $host_os in
+ sco3.2v5*)
+ _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf'
+ ;;
+ esac
+fi
+if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then
+ AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries])
+ if echo "$old_CC $old_CFLAGS " | grep "[[ ]]$]_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[[ ]]" >/dev/null; then :
+ else
+ AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure])
+ _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no
+ fi
+fi
+
+
+#
+# Check to make sure the static flag actually works.
+#
+AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works],
+ _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1),
+ $_LT_AC_TAGVAR(lt_prog_compiler_static, $1),
+ [],
+ [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_DLOPEN_SELF($1)
+
+# Report which librarie types wil actually be built
+AC_MSG_CHECKING([if libtool supports shared libraries])
+AC_MSG_RESULT([$can_build_shared])
+
+AC_MSG_CHECKING([whether to build shared libraries])
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+aix4*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ darwin* | rhapsody*)
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ case "$host_os" in
+ rhapsody* | darwin1.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress'
+ ;;
+ *) # Darwin 1.3 on
+ test -z ${LD_TWOLEVEL_NAMESPACE} && _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+ ;;
+ esac
+ output_verbose_link_cmd='echo'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring'
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+esac
+AC_MSG_RESULT([$enable_shared])
+
+AC_MSG_CHECKING([whether to build static libraries])
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+AC_MSG_RESULT([$enable_static])
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_C_CONFIG
+
+
+# AC_LIBTOOL_LANG_CXX_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])
+AC_DEFUN([_LT_AC_LANG_CXX_CONFIG],
+[AC_LANG_PUSH(C++)
+AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([AC_PROG_CXXCPP])
+
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+_LT_AC_TAGVAR(module_cmds, $1)=
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Dependencies to place before and after the object being linked:
+_LT_AC_TAGVAR(predep_objects, $1)=
+_LT_AC_TAGVAR(postdep_objects, $1)=
+_LT_AC_TAGVAR(predeps, $1)=
+_LT_AC_TAGVAR(postdeps, $1)=
+_LT_AC_TAGVAR(compiler_lib_search_path, $1)=
+
+# Source file extension for C++ test sources.
+ac_ext=cc
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_LD=$LD
+lt_save_GCC=$GCC
+GCC=$GXX
+lt_save_with_gnu_ld=$with_gnu_ld
+lt_save_path_LD=$lt_cv_path_LD
+if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+else
+ unset lt_cv_prog_gnu_ld
+fi
+if test -n "${lt_cv_path_LDCXX+set}"; then
+ lt_cv_path_LD=$lt_cv_path_LDCXX
+else
+ unset lt_cv_path_LD
+fi
+test -z "${LDCXX+set}" || LD=$LDCXX
+CC=${CXX-"c++"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+# We don't want -fno-exception wen compiling C++ code, so set the
+# no_builtin_flag separately
+if test "$GXX" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+else
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+fi
+
+if test "$GXX" = yes; then
+ # Set up default GNU C++ configuration
+
+ AC_PROG_LD
+
+ # Check if GNU C++ uses GNU ld as the underlying linker, since the
+ # archiving commands below assume that GNU ld is being used.
+ if test "$with_gnu_ld" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+ # investigate it a little bit more. (MM)
+ wlarc='${wl}'
+
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
+ grep 'no-whole-archive' > /dev/null; then
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ with_gnu_ld=no
+ wlarc=
+
+ # A generic and very simple default shared library creation
+ # command for GNU C++ for the case where it uses the native
+ # linker, instead of GNU ld. If possible, this setting should
+ # overridden to take advantage of the native linker features on
+ # the platform it is being used on.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ fi
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+else
+ GXX=no
+ with_gnu_ld=no
+ wlarc=
+fi
+
+# PORTME: fill in a description of your system's C++ link characteristics
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+_LT_AC_TAGVAR(ld_shlibs, $1)=yes
+case $host_os in
+ aix3*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # KDE requires run time linking. Make it the default.
+ aix_use_runtimelinking=yes
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_AC_TAGVAR(archive_cmds, $1)=''
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+ if test "$GXX" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ else
+ # We have old collect2
+ _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ esac
+ shared_flag='-shared'
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='-qmkshrobj ${wl}-G'
+ else
+ shared_flag='-qmkshrobj'
+ fi
+ fi
+ fi
+
+ # Let the compiler handle the export list.
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+ _LT_AC_TAGVAR(archive_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '" $shared_flag"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ # -bexpall does not export symbols beginning with underscore (_)
+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds it's shared libraries.
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=no
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ darwin* | rhapsody*)
+ if test "$GXX" = yes; then
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ case "$host_os" in
+ rhapsody* | darwin1.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress'
+ ;;
+ *) # Darwin 1.3 on
+ test -z ${LD_TWOLEVEL_NAMESPACE} && _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+ ;;
+ esac
+ lt_int_apple_cc_single_mod=no
+ output_verbose_link_cmd='echo'
+ if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+ lt_int_apple_cc_single_mod=yes
+ fi
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ fi
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ dgux*)
+ case $cc_basename in
+ ec++)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ ghcx)
+ # Green Hills C++ Compiler
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ freebsd[12]*)
+ # C++ shared libraries reported to be fairly broken before switch to ELF
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ freebsd-elf*)
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ ;;
+ freebsd*)
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+ # conventions
+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+ gnu*)
+ ;;
+ hpux9*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+
+ case $cc_basename in
+ CC)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | egrep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ hpux10*|hpux11*)
+ if test $with_gnu_ld = no; then
+ case "$host_cpu" in
+ hppa*64*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ ;;
+ *)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+ esac
+ fi
+ case "$host_cpu" in
+ hppa*64*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ *)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ esac
+
+ case $cc_basename in
+ CC)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC)
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test $with_gnu_ld = no; then
+ case "$host_cpu" in
+ ia64*|hppa*64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ fi
+ else
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ irix5* | irix6*)
+ case $cc_basename in
+ CC)
+ # SGI C++
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+ # Archives containing C++ object files must be created using
+ # "CC -ar", where "CC" is the IRIX C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
+ fi
+ fi
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+ esac
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+ linux*)
+ case $cc_basename in
+ KCC)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+ ;;
+ icpc)
+ # Intel C++
+ with_gnu_ld=yes
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ ;;
+ cxx)
+ # Compaq C++
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+ runpath_var=LD_RUN_PATH
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ esac
+ ;;
+ lynxos*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ m88k*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ fi
+ # Workaround some broken pre-1.5 toolchains
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+ ;;
+ osf3*)
+ case $cc_basename in
+ KCC)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+
+ ;;
+ RCC)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ osf4* | osf5*)
+ case $cc_basename in
+ KCC)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # the KAI C++ compiler.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
+ ;;
+ RCC)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+ echo "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~
+ $rm $lib.exp'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ psos*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ sco*)
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ case $cc_basename in
+ CC)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC)
+ # Sun C++ 4.x
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ lcc)
+ # Lucid
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The C++ compiler is used as linker so we must use $wl
+ # flag to pass the commands to the underlying system
+ # linker.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ ;;
+ esac
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ gcx)
+ # Green Hills C++ Compiler
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+ # The C++ compiler must be used to create the archive.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+ ;;
+ *)
+ # GNU C++ compiler with Solaris linker
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+ if $CC --version | grep -v '^2\.7' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+ else
+ # g++ 2.7 appears to require `-G' NOT `-shared' on this
+ # platform.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+ fi
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+ fi
+ ;;
+ esac
+ ;;
+ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*)
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC)
+ # NonStop-UX NCC 3.20
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ vxworks*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+esac
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_AC_TAGVAR(GCC, $1)="$GXX"
+_LT_AC_TAGVAR(LD, $1)="$LD"
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+AC_LIBTOOL_POSTDEP_PREDEP($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_DLOPEN_SELF($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC=$lt_save_CC
+LDCXX=$LD
+LD=$lt_save_LD
+GCC=$lt_save_GCC
+with_gnu_ldcxx=$with_gnu_ld
+with_gnu_ld=$lt_save_with_gnu_ld
+lt_cv_path_LDCXX=$lt_cv_path_LD
+lt_cv_path_LD=$lt_save_path_LD
+lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+])# AC_LIBTOOL_LANG_CXX_CONFIG
+
+# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME])
+# ------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library. It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+ifelse([$1],[],[cat > conftest.$ac_ext <<EOF
+int a;
+void foo (void) { a = 0; }
+EOF
+],[$1],[CXX],[cat > conftest.$ac_ext <<EOF
+class Foo
+{
+public:
+ Foo (void) { a = 0; }
+private:
+ int a;
+};
+EOF
+],[$1],[F77],[cat > conftest.$ac_ext <<EOF
+ subroutine foo
+ implicit none
+ integer*4 a
+ a=0
+ return
+ end
+EOF
+],[$1],[GCJ],[cat > conftest.$ac_ext <<EOF
+public class foo {
+ private int a;
+ public void bar (void) {
+ a = 0;
+ }
+};
+EOF
+])
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+ # Parse the compiler output and extract the necessary
+ # objects, libraries and library flags.
+
+ # Sentinel used to keep track of whether or not we are before
+ # the conftest object file.
+ pre_test_object_deps_done=no
+
+ # The `*' in the case matches for architectures that use `case' in
+ # $output_verbose_cmd can trigger glob expansion during the loop
+ # eval without this substitution.
+ output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`"
+
+ for p in `eval $output_verbose_link_cmd`; do
+ case $p in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+ # Remove the space.
+ if test $p = "-L" \
+ || test $p = "-R"; then
+ prev=$p
+ continue
+ else
+ prev=
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ case $p in
+ -L* | -R*)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+ if test -z "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then
+ _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+ else
+ _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${_LT_AC_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+ fi
+ ;;
+ # The "-l" case would never come before the object being
+ # linked, so don't bother handling this case.
+ esac
+ else
+ if test -z "$_LT_AC_TAGVAR(postdeps, $1)"; then
+ _LT_AC_TAGVAR(postdeps, $1)="${prev}${p}"
+ else
+ _LT_AC_TAGVAR(postdeps, $1)="${_LT_AC_TAGVAR(postdeps, $1)} ${prev}${p}"
+ fi
+ fi
+ ;;
+
+ *.$objext|*.$libext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+ if test "$p" = "conftest.$objext"; then
+ pre_test_object_deps_done=yes
+ continue
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ if test -z "$_LT_AC_TAGVAR(predep_objects, $1)"; then
+ _LT_AC_TAGVAR(predep_objects, $1)="$p"
+ else
+ _LT_AC_TAGVAR(predep_objects, $1)="$_LT_AC_TAGVAR(predep_objects, $1) $p"
+ fi
+ else
+ if test -z "$_LT_AC_TAGVAR(postdep_objects, $1)"; then
+ _LT_AC_TAGVAR(postdep_objects, $1)="$p"
+ else
+ _LT_AC_TAGVAR(postdep_objects, $1)="$_LT_AC_TAGVAR(postdep_objects, $1) $p"
+ fi
+ fi
+ ;;
+
+ *) ;; # Ignore the rest.
+
+ esac
+ done
+
+ # Clean up.
+ rm -f a.out a.exe
+else
+ echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$rm -f confest.$objext
+
+case " $_LT_AC_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+])# AC_LIBTOOL_POSTDEP_PREDEP
+
+# AC_LIBTOOL_LANG_F77_CONFIG
+# ------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)])
+AC_DEFUN([_LT_AC_LANG_F77_CONFIG],
+[AC_REQUIRE([AC_PROG_F77])
+AC_LANG_PUSH(Fortran 77)
+
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+_LT_AC_TAGVAR(module_cmds, $1)=
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code=" subroutine t\n return\n end\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code=" program t\n end\n"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${F77-"f77"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+AC_MSG_CHECKING([if libtool supports shared libraries])
+AC_MSG_RESULT([$can_build_shared])
+
+AC_MSG_CHECKING([whether to build shared libraries])
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+aix4*)
+ test "$enable_shared" = yes && enable_static=no
+ ;;
+esac
+AC_MSG_RESULT([$enable_shared])
+
+AC_MSG_CHECKING([whether to build static libraries])
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+AC_MSG_RESULT([$enable_static])
+
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_AC_TAGVAR(GCC, $1)="$G77"
+_LT_AC_TAGVAR(LD, $1)="$LD"
+
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_F77_CONFIG
+
+
+# AC_LIBTOOL_LANG_GCJ_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)])
+AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],
+[AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_DLOPEN_SELF($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_GCJ_CONFIG
+
+
+# AC_LIBTOOL_LANG_RC_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the Windows resource compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)])
+AC_DEFUN([_LT_AC_LANG_RC_CONFIG],
+[AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${RC-"windres"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_RC_CONFIG
+
+
+# AC_LIBTOOL_CONFIG([TAGNAME])
+# ----------------------------
+# If TAGNAME is not passed, then create an initial libtool script
+# with a default configuration from the untagged config vars. Otherwise
+# add code to config.status for appending the configuration named by
+# TAGNAME from the matching tagged config vars.
+AC_DEFUN([AC_LIBTOOL_CONFIG],
+[# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+ # See if we are running on zsh, and set the options which allow our commands through
+ # without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+ # Now quote all the things that may contain metacharacters while being
+ # careful not to overquote the AC_SUBSTed values. We take copies of the
+ # variables and quote the copies for generation of the libtool script.
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \
+ libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+ old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+ deplibs_check_method reload_flag reload_cmds need_locks \
+ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+ old_postinstall_cmds old_postuninstall_cmds \
+ _LT_AC_TAGVAR(compiler, $1) \
+ _LT_AC_TAGVAR(CC, $1) \
+ _LT_AC_TAGVAR(LD, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \
+ _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \
+ _LT_AC_TAGVAR(old_archive_cmds, $1) \
+ _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \
+ _LT_AC_TAGVAR(predep_objects, $1) \
+ _LT_AC_TAGVAR(postdep_objects, $1) \
+ _LT_AC_TAGVAR(predeps, $1) \
+ _LT_AC_TAGVAR(postdeps, $1) \
+ _LT_AC_TAGVAR(compiler_lib_search_path, $1) \
+ _LT_AC_TAGVAR(archive_cmds, $1) \
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1) \
+ _LT_AC_TAGVAR(postinstall_cmds, $1) \
+ _LT_AC_TAGVAR(postuninstall_cmds, $1) \
+ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \
+ _LT_AC_TAGVAR(allow_undefined_flag, $1) \
+ _LT_AC_TAGVAR(no_undefined_flag, $1) \
+ _LT_AC_TAGVAR(export_symbols_cmds, $1) \
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \
+ _LT_AC_TAGVAR(hardcode_automatic, $1) \
+ _LT_AC_TAGVAR(module_cmds, $1) \
+ _LT_AC_TAGVAR(module_expsym_cmds, $1) \
+ _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \
+ _LT_AC_TAGVAR(exclude_expsyms, $1) \
+ _LT_AC_TAGVAR(include_expsyms, $1); do
+
+ case $var in
+ _LT_AC_TAGVAR(old_archive_cmds, $1) | \
+ _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \
+ _LT_AC_TAGVAR(archive_cmds, $1) | \
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \
+ _LT_AC_TAGVAR(module_cmds, $1) | \
+ _LT_AC_TAGVAR(module_expsym_cmds, $1) | \
+ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \
+ _LT_AC_TAGVAR(export_symbols_cmds, $1) | \
+ extract_expsyms_cmds | reload_cmds | finish_cmds | \
+ postinstall_cmds | postuninstall_cmds | \
+ old_postinstall_cmds | old_postuninstall_cmds | \
+ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+ # Double-quote double-evaled strings.
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+ ;;
+ *)
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+ ;;
+ esac
+ done
+
+ case $lt_echo in
+ *'\[$]0 --fallback-echo"')
+ lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'`
+ ;;
+ esac
+
+ifelse([$1], [],
+ [cfgfile="${ofile}T"
+ trap "$rm \"$cfgfile\"; exit 1" 1 2 15
+ $rm -f "$cfgfile"
+ AC_MSG_NOTICE([creating $ofile])],
+ [cfgfile="$ofile"])
+
+ cat <<__EOF__ >> "$cfgfile"
+ifelse([$1], [],
+[#! $SHELL
+
+# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# 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.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="$SED -e s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+# The names of the tagged configurations supported by this script.
+available_tags=
+
+# ### BEGIN LIBTOOL CONFIG],
+[# ### BEGIN LIBTOOL TAG CONFIG: $tagname])
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_[]_LT_AC_TAGVAR(compiler, $1)
+
+# Is the compiler the GNU C compiler?
+with_gcc=$_LT_AC_TAGVAR(GCC, $1)
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_[]_LT_AC_TAGVAR(LD, $1)
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext='$shrext'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1)
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1)
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1)
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1)
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1)
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1)
+archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1)
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1)
+module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1)
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1)
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1)
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1)
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1)
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1)
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1)
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1)
+
+# Symbols that must always be exported.
+include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1)
+
+ifelse([$1],[],
+[# ### END LIBTOOL CONFIG],
+[# ### END LIBTOOL TAG CONFIG: $tagname])
+
+__EOF__
+
+ifelse([$1],[], [
+ case $host_os in
+ aix3*)
+ cat <<\EOF >> "$cfgfile"
+
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+EOF
+ ;;
+ esac
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" || \
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+])
+else
+ # If there is no Makefile yet, we rely on a make rule to execute
+ # `config.status --recheck' to rerun these tests and create the
+ # libtool script then.
+ test -f Makefile && make "$ltmain"
+fi
+])# AC_LIBTOOL_CONFIG
+
+
+# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI],
+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+
+_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+ AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+ lt_cv_prog_compiler_rtti_exceptions,
+ [-fno-rtti -fno-exceptions], [],
+ [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
+
+
+# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+# ---------------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
+[AC_REQUIRE([AC_CANONICAL_HOST])
+AC_REQUIRE([AC_PROG_NM])
+AC_REQUIRE([AC_OBJEXT])
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Transform the above into a raw symbol and a C symbol.
+symxfrm='\1 \2\3 \3'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[[BCDT]]'
+ ;;
+cygwin* | mingw* | pw32*)
+ symcode='[[ABCDGISTW]]'
+ ;;
+hpux*) # Its linker distinguishes data from code symbols
+ if test "$host_cpu" = ia64; then
+ symcode='[[ABCDEGRST]]'
+ fi
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+ lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+ ;;
+irix* | nonstopux*)
+ symcode='[[BCDEGRST]]'
+ ;;
+osf*)
+ symcode='[[BCDEGQRST]]'
+ ;;
+solaris* | sysv5*)
+ symcode='[[BDT]]'
+ ;;
+sysv4)
+ symcode='[[DFNSTU]]'
+ ;;
+esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[[ABCDGISTW]]' ;;
+esac
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Write the raw and C identifiers.
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+ if AC_TRY_EVAL(ac_compile); then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if grep ' nm_test_var$' "$nlist" >/dev/null; then
+ if grep ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
+
+ cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr_t void *
+#else
+# define lt_ptr_t char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ lt_ptr_t address;
+}
+lt_preloaded_symbols[[]] =
+{
+EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
+ cat <<\EOF >> conftest.$ac_ext
+ {0, (lt_ptr_t) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_save_LIBS="$LIBS"
+ lt_save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS="$lt_save_LIBS"
+ CFLAGS="$lt_save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+ cat conftest.$ac_ext >&5
+ fi
+ rm -f conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ AC_MSG_RESULT(failed)
+else
+ AC_MSG_RESULT(ok)
+fi
+]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+
+
+# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])
+# ---------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC],
+[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+ ifelse([$1],[CXX],[
+ # C++ specific cases for pic, static, wl, etc.
+ if test "$GXX" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+ amigaos*)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ mingw* | os2* | pw32*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+ ;;
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+ *djgpp*)
+ # DJGPP does not support shared libraries at all
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ case $host_os in
+ aix4* | aix5*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ cxch68)
+ # Green Hills C++ Compiler
+ # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+ ;;
+ esac
+ ;;
+ dgux*)
+ case $cc_basename in
+ ec++)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ ghcx)
+ # Green Hills C++ Compiler
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ freebsd*)
+ # FreeBSD uses GNU C++
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $cc_basename in
+ CC)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+ if test "$host_cpu" != ia64; then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ fi
+ ;;
+ aCC)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case $cc_basename in
+ CC)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ # CC pic flag -KPIC is the default.
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ linux*)
+ case $cc_basename in
+ KCC)
+ # KAI C++ Compiler
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ icpc)
+ # Intel C++
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ cxx)
+ # Compaq C++
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ lynxos*)
+ ;;
+ m88k*)
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ netbsd*)
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ ;;
+ RCC)
+ # Rational C++ 2.4.1
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ cxx)
+ # Digital/Compaq C++
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ psos*)
+ ;;
+ sco*)
+ case $cc_basename in
+ CC)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ gcx)
+ # Green Hills C++ Compiler
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC)
+ # Sun C++ 4.x
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ lcc)
+ # Lucid
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC)
+ # NonStop-UX NCC 3.20
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ unixware*)
+ ;;
+ vxworks*)
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+],
+[
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ enable_shared=no
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC (with -KPIC) is the default.
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ newsos6)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ linux*)
+ case $CC in
+ icc* | ecc*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ ccc*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All Alpha code is PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ esac
+ ;;
+
+ osf3* | osf4* | osf5*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All OSF/1 code is PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ sco3.2v5*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn'
+ ;;
+
+ solaris*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sunos4*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ uts4*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
+ _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1),
+ [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],
+ [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
+ "" | " "*) ;;
+ *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+ esac],
+ [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+case "$host_os" in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])"
+ ;;
+esac
+])
+
+
+# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
+# ------------------------------------
+# See if the linker supports building shared libraries.
+AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],
+[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ifelse([$1],[CXX],[
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ case $host_os in
+ aix4* | aix5*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+ fi
+ ;;
+ pw32*)
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+ ;;
+ cygwin* | mingw*)
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ *)
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ esac
+],[
+ runpath_var=
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+ _LT_AC_TAGVAR(archive_cmds, $1)=
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+ _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=
+ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+ _LT_AC_TAGVAR(thread_safe_flag_spec, $1)=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=no
+ _LT_AC_TAGVAR(module_cmds, $1)=
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)=
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ _LT_AC_TAGVAR(include_expsyms, $1)=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_"
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix3* | aix4* | aix5*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+ fi
+ ;;
+
+ amigaos*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we can't use
+ # them.
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=no
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris* | sysv5*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ sunos4*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+
+ if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = yes; then
+ runpath_var=LD_RUN_PATH
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ if test "$GCC" = yes && test -z "$link_static_flag"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+ fi
+
+ # KDE requires run time linking. Make it the default.
+ aix_use_runtimelinking=yes
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_AC_TAGVAR(archive_cmds, $1)=''
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ else
+ # We have old collect2
+ _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ esac
+ shared_flag='-shared'
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='-qmkshrobj ${wl}-G'
+ else
+ shared_flag='-qmkshrobj'
+ fi
+ fi
+ fi
+
+ # Let the compiler handle the export list.
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ _LT_AC_TAGVAR(archive_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '" $shared_flag"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ # -bexpall does not export symbols beginning with underscore (_)
+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds it's shared libraries.
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ # see comment about different semantics on the GNU ld section
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ bsdi4*)
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=no
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'
+ # FIXME: Should let the user specify the lib program.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+
+ darwin* | rhapsody*)
+ if test "$GXX" = yes ; then
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ case "$host_os" in
+ rhapsody* | darwin1.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress'
+ ;;
+ *) # Darwin 1.3 on
+ test -z ${LD_TWOLEVEL_NAMESPACE} && _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+ ;;
+ esac
+ lt_int_apple_cc_single_mod=no
+ output_verbose_link_cmd='echo'
+ if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+ lt_int_apple_cc_single_mod=yes
+ fi
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ fi
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ dgux*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ freebsd1*)
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+
+ hpux10* | hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ case "$host_cpu" in
+ hppa*64*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ *)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ newsos6)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ openbsd*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ else
+ case $host_os in
+ openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
+
+ os2*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ else
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ sco3.2v5*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ;;
+
+ solaris*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;;
+ esac
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ ;;
+ motorola)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4.3*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+ fi
+ ;;
+
+ sysv4.2uw2*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ hardcode_runpath_var=yes
+ runpath_var=LD_RUN_PATH
+ ;;
+
+ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text'
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ runpath_var='LD_RUN_PATH'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv5*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
+ # $CC -shared without GNU ld will not create a library from C++
+ # object files and a static libstdc++, better avoid it by now
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+ ;;
+
+ uts4*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+ # Assume -lc should be added
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $_LT_AC_TAGVAR(archive_cmds, $1) in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+ $rm conftest*
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+ if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
+ then
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ else
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+ fi
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $rm conftest*
+ AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)])
+ ;;
+ esac
+ fi
+ ;;
+esac
+])# AC_LIBTOOL_PROG_LD_SHLIBS
+
+
+# _LT_AC_FILE_LTDLL_C
+# -------------------
+# Be careful that the start marker always follows a newline.
+AC_DEFUN([_LT_AC_FILE_LTDLL_C], [
+# /* ltdll.c starts here */
+# #define WIN32_LEAN_AND_MEAN
+# #include <windows.h>
+# #undef WIN32_LEAN_AND_MEAN
+# #include <stdio.h>
+#
+# #ifndef __CYGWIN__
+# # ifdef __CYGWIN32__
+# # define __CYGWIN__ __CYGWIN32__
+# # endif
+# #endif
+#
+# #ifdef __cplusplus
+# extern "C" {
+# #endif
+# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
+# #ifdef __cplusplus
+# }
+# #endif
+#
+# #ifdef __CYGWIN__
+# #include <cygwin/cygwin_dll.h>
+# DECLARE_CYGWIN_DLL( DllMain );
+# #endif
+# HINSTANCE __hDllInstance_base;
+#
+# BOOL APIENTRY
+# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
+# {
+# __hDllInstance_base = hInst;
+# return TRUE;
+# }
+# /* ltdll.c ends here */
+])# _LT_AC_FILE_LTDLL_C
+
+
+# _LT_AC_TAGVAR(VARNAME, [TAGNAME])
+# ---------------------------------
+AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])])
+
+
+# old names
+AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL])
+AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+AC_DEFUN([AM_PROG_LD], [AC_PROG_LD])
+AC_DEFUN([AM_PROG_NM], [AC_PROG_NM])
+
+# This is just to silence aclocal about the macro not being used
+ifelse([AC_DISABLE_FAST_INSTALL])
+
+AC_DEFUN([LT_AC_PROG_GCJ],
+[AC_CHECK_TOOL(GCJ, gcj, no)
+ test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+ AC_SUBST(GCJFLAGS)
+])
+
+AC_DEFUN([LT_AC_PROG_RC],
+[AC_CHECK_TOOL(RC, windres, no)
+])
+
+############################################################
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_SED. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+############################################################
+# LT_AC_PROG_SED
+# --------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible. Prefer GNU sed if found.
+AC_DEFUN([LT_AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f $lt_ac_sed && break
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test $lt_ac_count -gt 10 && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test $lt_ac_count -gt $lt_ac_max; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
+ fi
+ done
+done
+])
+SED=$lt_cv_path_SED
+AC_MSG_RESULT([$SED])
+])
+dnl
+dnl AM_PATH_CPPUNIT(MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
+dnl
+AC_DEFUN([AM_PATH_CPPUNIT],
+[
+
+AC_ARG_WITH(cppunit-prefix,[ --with-cppunit-prefix=PFX Prefix where CppUnit is installed (optional)],
+ cppunit_config_prefix="$withval", cppunit_config_prefix="")
+AC_ARG_WITH(cppunit-exec-prefix,[ --with-cppunit-exec-prefix=PFX Exec prefix where CppUnit is installed (optional)],
+ cppunit_config_exec_prefix="$withval", cppunit_config_exec_prefix="")
+AC_MSG_CHECKING(if CPPUNIT tests should be built (default=yes))
+AC_ARG_ENABLE(cppunit,
+ [ --disable-cppunit Do not try to build with CPPUNIT tests],,
+ enable_cppunit=yes)
+AC_MSG_RESULT($enable_cppunit)
+
+if test "x$enable_cppunit" = "xyes"; then
+
+ AC_MSG_CHECKING(if unit-tests requiring an online connection should be built (default=no))
+ AC_ARG_ENABLE(online_tests,
+ [ --enable-online-tests Include online tests with CPPUNIT tests],,
+ enable_online_tests=no)
+ AC_MSG_RESULT($enable_online_tests)
+
+ if test x$cppunit_config_exec_prefix != x ; then
+ cppunit_config_args="$cppunit_config_args --exec-prefix=$cppunit_config_exec_prefix"
+ if test x${CPPUNIT_CONFIG+set} != xset ; then
+ CPPUNIT_CONFIG=$cppunit_config_exec_prefix/bin/cppunit-config
+ fi
+ fi
+ if test x$cppunit_config_prefix != x ; then
+ cppunit_config_args="$cppunit_config_args --prefix=$cppunit_config_prefix"
+ if test x${CPPUNIT_CONFIG+set} != xset ; then
+ CPPUNIT_CONFIG=$cppunit_config_prefix/bin/cppunit-config
+ fi
+ fi
+
+ AC_PATH_PROG(CPPUNIT_CONFIG, cppunit-config, no)
+ cppunit_version_min=$1
+
+ AC_MSG_CHECKING(for CPPUNIT - version >= $cppunit_version_min)
+ no_cppunit=""
+ if test "$CPPUNIT_CONFIG" = "no" ; then
+ AC_MSG_RESULT(no)
+ AC_MSG_WARN(Unable to locate cppunit-config. Tests will not be built)
+ no_cppunit=yes
+ else
+ CPPUNIT_CFLAGS=`$CPPUNIT_CONFIG --cflags`
+ CPPUNIT_LIBS=`$CPPUNIT_CONFIG --libs`
+ cppunit_version=`$CPPUNIT_CONFIG --version`
+
+ cppunit_major_version=`echo $cppunit_version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+ cppunit_minor_version=`echo $cppunit_version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+ cppunit_micro_version=`echo $cppunit_version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+
+ cppunit_major_min=`echo $cppunit_version_min | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+ cppunit_minor_min=`echo $cppunit_version_min | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+ cppunit_micro_min=`echo $cppunit_version_min | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+
+ cppunit_version_proper=`expr \
+ $cppunit_major_version \> $cppunit_major_min \| \
+ $cppunit_major_version \= $cppunit_major_min \& \
+ $cppunit_minor_version \> $cppunit_minor_min \| \
+ $cppunit_major_version \= $cppunit_major_min \& \
+ $cppunit_minor_version \= $cppunit_minor_min \& \
+ $cppunit_micro_version \>= $cppunit_micro_min `
+
+ if test "$cppunit_version_proper" = "1" ; then
+ AC_MSG_RESULT([$cppunit_major_version.$cppunit_minor_version.$cppunit_micro_version])
+ else
+ AC_MSG_RESULT(no)
+ AC_MSG_WARN(Minimum version of CPPUNIT couldn't be found. Tests will not be built)
+ no_cppunit=yes
+ fi
+ fi
+else
+ no_cppunit=user
+fi
+
+ if test "x$no_cppunit" = x ; then
+ ifelse([$2], , :, [$2])
+ if test "x$enable_online_tests" = "xyes"; then
+ AC_DEFINE_UNQUOTED(PERFORM_ONLINE_UNITTESTS, 1, [Define if unit tests requiring online access should be compiled])
+ fi
+ else
+ CPPUNIT_CFLAGS=""
+ CPPUNIT_LIBS=""
+ ifelse([$3], , :, [$3])
+ fi
+
+ AC_SUBST(CPPUNIT_CFLAGS)
+ AC_SUBST(CPPUNIT_LIBS)
+])
+
+
+
+dnl
+dnl AM_KDE_MIN_VERSION(MIN-VERSION-MAJOR, MIN-VERSION-MINOR, MIN-VERSION-MICRO)
+dnl
+AC_DEFUN([AM_KDE_MIN_VERSION],
+[
+ AC_MSG_CHECKING([if minimum KDE version is available])
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ save_CXXFLAGS=$CXXFLAGS
+ CXXFLAGS="$CXXFLAGS -I$srcdir $all_includes"
+ AC_TRY_COMPILE([
+ #include "kdecompat.h"
+ #if !( KDE_IS_VERSION( $1, $2, $3 ) )
+ #error KDE version does not meet KMyMoney minimum requirement
+ #endif
+ ], [], AC_MSG_RESULT(yes), AC_MSG_ERROR(no)
+ )
+ CXXFLAGS=$save_CXXFLAGS
+ AC_LANG_RESTORE
+])
+
+
+AC_DEFUN([AC_LIBOFX],
+[
+AC_MSG_CHECKING(if the OFX importer plugin is desired)
+AC_ARG_ENABLE(ofxplugin,
+ AC_HELP_STRING([--enable-ofxplugin],[enable OFX importer plugin (default=auto)]),
+ [enable_ofxplugin="$enableval"],
+ [enable_ofxplugin="auto"])
+AC_MSG_RESULT($enable_ofxplugin)
+
+AC_MSG_CHECKING(if OFX direct connect is desired)
+AC_ARG_ENABLE(ofxbanking,
+ AC_HELP_STRING([--enable-ofxbanking],[enable OFX direct connect (default=auto)]),
+ [enable_ofxbanking="$enableval"],
+ [enable_ofxbanking="auto"])
+AC_MSG_RESULT($enable_ofxbanking)
+
+# make sure we include the plugin even if not mentioned explicitly
+if test "$enable_ofxbanking" != "no" -a "$enable_ofxplugin" != "yes"; then
+ enable_ofxplugin=$enable_ofxbanking
+fi
+
+if test "$enable_ofxplugin" != "no" -o "$enable_ofxbanking" != "no"; then
+ ac_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $all_includes $USER_INCLUDES"
+ AC_CHECK_HEADER([OpenSP/macros.h],
+ [],
+ [
+ if test "$enable_ofxplugin" != "auto" -o "$enable_ofxbanking" != "auto"; then
+ AC_MSG_ERROR([cannot find OpenSP headers. Please ensure you have OpenSP installed.])
+ fi
+ AC_MSG_RESULT([cannot find OpenSP headers. Skipping OFX support])
+ enable_ofxbanking=no
+ enable_ofxplugin=no
+ ])
+ if test "$enable_ofxplugin" != "no"; then
+ CFLAGS="$ac_save_CFLAGS"
+ PKG_CHECK_MODULES(OFX,libofx >= 0.8.2)
+ fi
+fi
+if test "$enable_ofxplugin" != "no"; then
+ OFX_IMPORTERPLUGIN="ofximport"
+ enable_ofxplugin=yes
+fi
+
+if test "$enable_ofxbanking" != "no"; then
+ enable_ofxbanking=yes
+fi
+
+AM_CONDITIONAL(OFXBANKING, test "$enable_ofxbanking" != "no" )
+AC_SUBST(OFX_LIBS)
+AC_SUBST(OFX_IMPORTERPLUGIN)
+])
+
+dnl
+dnl check the memory leakage checker option
+dnl if enabled or disabled, directly controlled
+dnl if not given, follows --enable-debug and if
+dnl debugging support is turned on, the memory
+dnl leakage checker is turned on also
+dnl
+dnl Need AC_CHECK_COMPILERS to be run before
+AC_DEFUN([AC_MEMORY_LEAK_CHECK], [
+ AC_ARG_ENABLE(
+ leak-check,
+ AC_HELP_STRING([--enable-leak-check],[enable memory leak checker (default=no)]),
+ use_memory_leak_check=$enableval,use_memory_leak_check=no)
+
+ if test "x$use_memory_leak_check" != "xno"; then
+ CPPFLAGS="$CPPFLAGS -D_CHECK_MEMORY"
+ fi
+ if test "x$kde_use_debug_code" != "xno"; then
+ CPPFLAGS="$CPPFLAGS -DKMM_DEBUG=1"
+ else
+ CPPFLAGS="$CPPFLAGS -DKMM_DEBUG=0"
+ fi
+])
+
+dnl
+dnl check the pdf generation option
+dnl if enabled or disabled, directly controlled
+dnl
+AC_DEFUN([AC_PDF_GENERATION], [
+ AC_MSG_CHECKING(if the PDF document generation is desired)
+ AC_ARG_ENABLE( pdf-docs,
+ [ --enable-pdf-docs enable generation of PDF documents (default=auto)],
+ enable_pdfdocs="$enableval",
+ enable_pdfdocs="auto")
+
+ AC_MSG_RESULT($enable_pdfdocs)
+ if test "x$enable_pdfdocs" != "xno"; then
+ AC_CHECK_PROG(found_recode, recode, yes, no)
+ AC_CHECK_PROG(found_html2ps, html2ps, yes, no)
+ AC_CHECK_PROG(found_ps2pdf, ps2pdf, yes, no)
+ if test "x$found_recode" != "xyes" -o "x$found_html2ps" != "xyes" -o "x$found_ps2pdf" != "xyes"; then
+ if test "x$enable_pdfdocs" = "xyes"; then
+ AC_MSG_ERROR(At least one of the tools for PDF generation is missing)
+ fi
+ enable_pdfdocs="no"
+ else
+ enable_pdfdocs="yes"
+ fi
+ fi
+
+ AM_CONDITIONAL(GENERATE_PDF, test "x$enable_pdfdocs" = "xyes")
+])
+
+dnl Macro to check for KDChart include and library files
+dnl Availability of KDChart defaults to 'no'
+
+AC_DEFUN([AC_QTDESIGNER_SUPPORT],
+[
+AC_MSG_CHECKING([if library for Qt-Designer widgets should be installed])
+AC_ARG_ENABLE(qtdesigner,
+ AC_HELP_STRING([--enable-qtdesigner],[Install KMyMoney specific widget library for Qt-Designer (default=no)]),
+ [
+ enable_qtdesigner="$enableval"
+ AC_MSG_RESULT($enable_qtdesigner)
+ ],
+ [
+ enable_qtdesigner="no"
+ AC_MSG_RESULT($enable_qtdesigner)
+ ])
+ AM_CONDITIONAL(INSTALL_QTDESIGNER_SUPPORT, test "$enable_qtdesigner" = "yes")
+])
+# sqlite3.m4
+# ----------
+#
+# Copyright 2008 by Thomas Baumgart
+#
+# License: See file COPYING
+#
+# Checks for the necessity to build our own qt-sqlite3 support library
+# and the presence of the sqlite3 development headers.
+#
+# Supports the following options:
+#
+# --enable-sqlite3
+# --disable-sqlite3
+#
+# If none of them is present, the detection is automatic. If the development
+# headers are not found for automatic detection, the generation will be
+# disabled w/o error. If --enable-sqlite3 is provided in the same stage,
+# an error is given if the sqlite3 development files are not installed.
+#
+# The following variables are provided via AC_SUBST:
+#
+# SQLITE3 - contains the subdirectory to visit for compilation
+# LIBSQLITE3 - contains the full pathname for the Qt plugin driver
+
+
+AC_DEFUN([AC_SQLITE3], [
+ AC_MSG_CHECKING(if the SQLITE3 support is desired)
+ AC_ARG_ENABLE(sqlite3,
+ AC_HELP_STRING([--enable-sqlite3],[build SQLITE3 support library (default=auto)]),
+ enable_sqlite3="$enableval",
+ enable_sqlite3="auto")
+ AC_MSG_RESULT($enable_sqlite3)
+
+ if test ! $enable_sqlite3 = no; then
+ # determine name and path of sqlite3 plugin library
+ qtlib=""
+ if test ! "lib${kdelibsuff}" = "lib"; then
+ qtlib=".lib64"
+ fi
+ if test x$QTDIR = x; then
+ QTDIR=`dirname $MOC`
+ QTDIR=${QTDIR%/bin}
+ fi
+ LIBSQLITE3=${QTDIR}/plugins/sqldrivers/libsqlite3${qtlib}.so
+
+ # do the checks
+ if test $enable_sqlite3 = auto; then
+ AC_MSG_CHECKING(if the SQLITE3 support is already present)
+ if test ! -e ${LIBSQLITE3}; then
+ result=no
+ else
+ # add check for local qt-sqlite3 directory here
+ result=yes
+ enable_sqlite3=no
+ # in case a previous run unpacked the SQLITE3 support stuff
+ # it is pretty sure that we have build the existing support
+ # if that's the case, we just enable it again
+ if test -d qt-sqlite3-0.2; then
+ enable_sqlite3=auto
+ fi
+ fi
+ AC_MSG_RESULT($result)
+ fi
+
+ # we only need to check for the headers in case we need to build
+ if test ! $enable_sqlite3 = no; then
+ # now check for the presence of SQLITE libraries
+ AC_CHECK_HEADER([sqlite3.h], [enable_sqlite3=yes],
+ [
+ if test $enable_sqlite3 = auto; then
+ enable_sqlite3=no
+ else
+ AC_MSG_ERROR(SQLITE development files not found)
+ fi
+ ])
+ fi
+ fi
+
+ if test $enable_sqlite3 = yes; then
+ AC_MSG_CHECKING(if the environment variable QTDIR is set)
+ if test x$QTDIR = x; then
+ AC_MSG_ERROR(QTDIR not set)
+ fi
+ AC_MSG_RESULT($QTDIR)
+ ac_qmake=${QTDIR}/bin/qmake
+ AC_ARG_WITH(qmake,
+ AC_HELP_STRING([--with-qmake=PATH],[which version of QMake to use ]),
+ [ ac_qmake="$withval" ])
+ fi
+
+ if test $enable_sqlite3 = yes; then
+ rm -rf qt-sqlite3-0.2
+ gunzip -c `dirname -- ${0}`/23011-qt-sqlite3-0.2.tar.gz | tar -xf -
+ cd qt-sqlite3-0.2
+ ${ac_qmake} QMAKE=${ac_qmake}
+ SQLITE3=qt-sqlite3-0.2
+ sed -i s/^install:.*$// Makefile
+ sed -i s/^uninstall:.*$// Makefile
+ # create the targets required for 'make distcheck' and 'make [un]install'
+ cat >> Makefile <<EOF
+dvi:
+
+check:
+
+installcheck:
+
+distuninstallcheck:
+
+dist:
+
+distcleancheck:
+
+# for installation and de-installation we need to take care
+# of the _inst case which is caused by running 'make distcheck'
+install:
+ if test ! x$SQLITE3 = x; then \
+ if test "x\$(DESTDIR)" = "x" -a "${prefix:0-5}" = "_inst"; then \
+ /bin/sh ../$ac_aux_dir/mkinstalldirs \`dirname ${prefix}${LIBSQLITE3}\`; \
+ ${INSTALL} sqldrivers/libqsqlite3.so ${prefix}${LIBSQLITE3}; \
+ chmod 755 ${prefix}${LIBSQLITE3}; \
+ else \
+ /bin/sh ../$ac_aux_dir/mkinstalldirs \`dirname \$(DESTDIR)${LIBSQLITE3}\`; \
+ ${INSTALL} sqldrivers/libqsqlite3.so \$(DESTDIR)${LIBSQLITE3}; \
+ chmod 755 \$(DESTDIR)${LIBSQLITE3}; \
+ fi \
+ fi
+
+uninstall:
+ if test ! x$SQLITE3 = x; then \
+ if test "x\$(DESTDIR)" = "x" -a "${prefix:0-5}" = "_inst"; then \
+ rm -rf ${prefix}${LIBSQLITE3}; \
+ else \
+ rm -rf \$(DESTDIR)${LIBSQLITE3}; \
+ fi \
+ fi
+
+EOF
+
+ cd ..
+ AC_SUBST(SQLITE3)
+ AC_SUBST(LIBSQLITE3)
+ fi
+])
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..c98cc18
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,1037 @@
+# generated automatically by aclocal 1.10.1 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(AC_AUTOCONF_VERSION, [2.61],,
+[m4_warning([this file was generated for autoconf 2.61.
+You have another version of autoconf. It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
+#
+# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+#
+# 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.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=m4_default([$1], [0.9.0])
+ AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ PKG_CONFIG=""
+ fi
+
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists. Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+#
+# Similar to PKG_CHECK_MODULES, make sure that the first instance of
+# this or PKG_CHECK_MODULES is called, or make sure to call
+# PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+ m4_ifval([$2], [$2], [:])
+m4_ifvaln([$3], [else
+ $3])dnl
+fi])
+
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+ pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+ PKG_CHECK_EXISTS([$3],
+ [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
+ [pkg_failed=yes])
+ else
+ pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+ _PKG_SHORT_ERRORS_SUPPORTED
+ if test $_pkg_short_errors_supported = yes; then
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1`
+ else
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+ ifelse([$4], , [AC_MSG_ERROR(dnl
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT
+])],
+ [AC_MSG_RESULT([no])
+ $4])
+elif test $pkg_failed = untried; then
+ ifelse([$4], , [AC_MSG_FAILURE(dnl
+[The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])],
+ [$4])
+else
+ $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+ $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+ AC_MSG_RESULT([yes])
+ ifelse([$3], , :, [$3])
+fi[]dnl
+])# PKG_CHECK_MODULES
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.10'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [1.10.1], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.10.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(AC_AUTOCONF_VERSION)])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
+ [$1], CXX, [depcc="$CXX" am_compiler_list=],
+ [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], UPC, [depcc="$UPC" am_compiler_list=],
+ [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+ # Solaris 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ case $depmode in
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ none) break ;;
+ esac
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this.
+ if depmode=$depmode \
+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 3
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[for mf in $CONFIG_FILES; do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`AS_DIRNAME("$mf")`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running `make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`AS_DIRNAME(["$file"])`
+ AS_MKDIR_P([$dirpart/$fdir])
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+done
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled. FIXME. This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS.
+AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 13
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.60])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES(CC)],
+ [define([AC_PROG_CC],
+ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES(CXX)],
+ [define([AC_PROG_CXX],
+ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES(OBJC)],
+ [define([AC_PROG_OBJC],
+ defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+ am__include=include
+ am__quote=
+ _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ fi
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+ [[\\/$]]* | ?:[[\\/]]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+alias in your environment])
+ fi
+
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+ [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+ [m4_case([$1], [ustar],, [pax],,
+ [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar;
+ do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([acinclude.m4])
diff --git a/config.h.in b/config.h.in
new file mode 100644
index 0000000..bde87d9
--- /dev/null
+++ b/config.h.in
@@ -0,0 +1,261 @@
+/* config.h.in. Generated from configure.in by autoheader. */
+
+/* define if you have atoll */
+#undef HAVE_ATOLL
+
+/* Define to 1 if you have the <Carbon/Carbon.h> header file. */
+#undef HAVE_CARBON_CARBON_H
+
+/* Define if you have the CoreAudio API */
+#undef HAVE_COREAUDIO
+
+/* Define to 1 if you have the <crt_externs.h> header file. */
+#undef HAVE_CRT_EXTERNS_H
+
+/* Defines if your system has the crypt function */
+#undef HAVE_CRYPT
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define if you have libkdchart */
+#undef HAVE_KDCHART
+
+/* Define if you have KDChartListTableData::setProp method */
+#undef HAVE_KDCHART_SETPROP
+
+/* Define if you have libcppunit */
+#undef HAVE_LIBCPPUNIT
+
+/* Define if you have libjpeg */
+#undef HAVE_LIBJPEG
+
+/* Define if you have libpng */
+#undef HAVE_LIBPNG
+
+/* Define if you have a working libpthread (will enable threaded code) */
+#undef HAVE_LIBPTHREAD
+
+/* Define if you have libz */
+#undef HAVE_LIBZ
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define if your system needs _NSGetEnviron to set up the environment */
+#undef HAVE_NSGETENVIRON
+
+/* Define if you have res_init */
+#undef HAVE_RES_INIT
+
+/* Define if you have the res_init prototype */
+#undef HAVE_RES_INIT_PROTO
+
+/* define if you have round */
+#undef HAVE_ROUND
+
+/* Define if you have a STL implementation by SGI */
+#undef HAVE_SGI_STL
+
+/* Define to 1 if you have the `snprintf' function. */
+#undef HAVE_SNPRINTF
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define if you have strlcat */
+#undef HAVE_STRLCAT
+
+/* Define if you have the strlcat prototype */
+#undef HAVE_STRLCAT_PROTO
+
+/* Define if you have strlcpy */
+#undef HAVE_STRLCPY
+
+/* Define if you have the strlcpy prototype */
+#undef HAVE_STRLCPY_PROTO
+
+/* define if you have strtoll */
+#undef HAVE_STRTOLL
+
+/* Define to 1 if you have the <sys/bitypes.h> header file. */
+#undef HAVE_SYS_BITYPES_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `vsnprintf' function. */
+#undef HAVE_VSNPRINTF
+
+/* Suffix for lib directories */
+#undef KDELIBSUFF
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define if unit tests requiring online access should be compiled */
+#undef PERFORM_ONLINE_UNITTESTS
+
+/* The size of `char *', as computed by sizeof. */
+#undef SIZEOF_CHAR_P
+
+/* The size of `int', as computed by sizeof. */
+#undef SIZEOF_INT
+
+/* The size of `long', as computed by sizeof. */
+#undef SIZEOF_LONG
+
+/* The size of `short', as computed by sizeof. */
+#undef SIZEOF_SHORT
+
+/* The size of `size_t', as computed by sizeof. */
+#undef SIZEOF_SIZE_T
+
+/* The size of `unsigned long', as computed by sizeof. */
+#undef SIZEOF_UNSIGNED_LONG
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Version number of package */
+#undef VERSION
+
+/* Defined if compiling without arts */
+#undef WITHOUT_ARTS
+
+/*
+ * jpeg.h needs HAVE_BOOLEAN, when the system uses boolean in system
+ * headers and I'm too lazy to write a configure test as long as only
+ * unixware is related
+ */
+#ifdef _UNIXWARE
+#define HAVE_BOOLEAN
+#endif
+
+
+
+/*
+ * AIX defines FD_SET in terms of bzero, but fails to include <strings.h>
+ * that defines bzero.
+ */
+
+#if defined(_AIX)
+#include <strings.h>
+#endif
+
+
+
+#if defined(HAVE_NSGETENVIRON) && defined(HAVE_CRT_EXTERNS_H)
+# include <sys/time.h>
+# include <crt_externs.h>
+# define environ (*_NSGetEnviron())
+#endif
+
+
+
+#if !defined(HAVE_RES_INIT_PROTO)
+#ifdef __cplusplus
+extern "C" {
+#endif
+int res_init(void);
+#ifdef __cplusplus
+}
+#endif
+#endif
+
+
+
+#if !defined(HAVE_STRLCAT_PROTO)
+#ifdef __cplusplus
+extern "C" {
+#endif
+unsigned long strlcat(char*, const char*, unsigned long);
+#ifdef __cplusplus
+}
+#endif
+#endif
+
+
+
+#if !defined(HAVE_STRLCPY_PROTO)
+#ifdef __cplusplus
+extern "C" {
+#endif
+unsigned long strlcpy(char*, const char*, unsigned long);
+#ifdef __cplusplus
+}
+#endif
+#endif
+
+
+
+/*
+ * On HP-UX, the declaration of vsnprintf() is needed every time !
+ */
+
+#if !defined(HAVE_VSNPRINTF) || defined(hpux)
+#if __STDC__
+#include <stdarg.h>
+#include <stdlib.h>
+#else
+#include <varargs.h>
+#endif
+#ifdef __cplusplus
+extern "C"
+#endif
+int vsnprintf(char *str, size_t n, char const *fmt, va_list ap);
+#ifdef __cplusplus
+extern "C"
+#endif
+int snprintf(char *str, size_t n, char const *fmt, ...);
+#endif
+
+
+/* define to 1 if -fvisibility is supported */
+#undef __KDE_HAVE_GCC_VISIBILITY
+
+
+#if defined(__SVR4) && !defined(__svr4__)
+#define __svr4__ 1
+#endif
+
+
+/* type to use in place of socklen_t if not defined */
+#undef kde_socklen_t
+
+/* type to use in place of socklen_t if not defined (deprecated, use
+ kde_socklen_t) */
+#undef ksize_t
diff --git a/configure.in b/configure.in
new file mode 100644
index 0000000..7940c1e
--- /dev/null
+++ b/configure.in
@@ -0,0 +1,369 @@
+dnl =======================================================
+dnl FILE: ./admin/configure.in.min
+dnl =======================================================
+
+dnl This file is part of the KDE libraries/packages
+dnl Copyright (C) 2001 Stephan Kulow (coolo@kde.org)
+
+dnl This file is free software; you can redistribute it and/or
+dnl modify it under the terms of the GNU Library General Public
+dnl License as published by the Free Software Foundation; either
+dnl version 2 of the License, or (at your option) any later version.
+
+dnl This library is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+dnl Library General Public License for more details.
+
+dnl You should have received a copy of the GNU Library General Public License
+dnl along with this library; see the file COPYING.LIB. If not, write to
+dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+dnl Boston, MA 02111-1307, USA.
+
+# Original Author was Kalle@kde.org
+# I lifted it in some mater. (Stephan Kulow)
+# I used much code from Janos Farkas
+
+dnl Process this file with autoconf to produce a configure script.
+
+AC_INIT(acinclude.m4) dnl a source file from your sub dir
+
+dnl This is so we can use kde-common
+AC_CONFIG_AUX_DIR(admin)
+
+dnl This ksh/zsh feature conflicts with `cd blah ; pwd`
+unset CDPATH
+
+dnl Checking host/target/build systems, for make, install etc.
+AC_CANONICAL_SYSTEM
+dnl Perform program name transformation
+AC_ARG_PROGRAM
+
+dnl Automake doc recommends to do this only here. (Janos)
+AM_INIT_AUTOMAKE(kmymoney2, 1.0.4) dnl searches for some needed programs
+
+KDE_SET_PREFIX
+
+dnl generate the config header
+AM_CONFIG_HEADER(config.h) dnl at the distribution this done
+
+dnl Checks for programs.
+AC_CHECK_COMPILERS
+AC_ENABLE_SHARED(yes)
+AC_ENABLE_STATIC(no)
+KDE_PROG_LIBTOOL
+
+dnl for NLS support. Call them in this order!
+dnl WITH_NLS is for the po files
+AM_KDE_WITH_NLS
+
+KDE_USE_QT(3.3.1)
+AC_PATH_KDE
+dnl =======================================================
+dnl FILE: configure.in.in
+dnl =======================================================
+
+#MIN_CONFIG(3.3.1)
+
+dnl PACKAGE set before
+
+KDE_ENABLE_HIDDEN_VISIBILITY
+
+AM_KDE_MIN_VERSION(3, 4, 0)
+
+dnl
+dnl check for a recent autoconf version
+dnl
+AC_PREREQ(2.53)
+
+dnl
+dnl check for atoll and strtoll
+dnl
+AC_FUNC_CHECK(atoll, [AC_DEFINE_UNQUOTED(HAVE_ATOLL, 1, [define if you have atoll])])
+AC_FUNC_CHECK(strtoll, [AC_DEFINE_UNQUOTED(HAVE_STRTOLL, 1, [define if you have strtoll])])
+AC_CHECK_LIB(m, round, [AC_DEFINE_UNQUOTED(HAVE_ROUND, 1, [define if you have round])]
+)
+
+dnl
+dnl add check for project's memory leak checker
+dnl
+AC_MEMORY_LEAK_CHECK()
+
+dnl
+dnl add checks for cppunit
+dnl
+AM_PATH_CPPUNIT(1.8.0,
+ AM_CONDITIONAL(CPPUNIT, test "x$no_cppunit" = x)
+ AC_DEFINE_UNQUOTED(HAVE_LIBCPPUNIT, 1, [Define if you have libcppunit])
+ AC_SUBST(CPPUNIT_LIBS),
+ AM_CONDITIONAL(CPPUNIT, test "x$no_cppunit" = x)
+ AC_SUBST(CPPUNIT_LIBS)
+ )
+
+dnl
+dnl check for tools required for generation of PDF documentation
+dnl
+AC_PDF_GENERATION()
+
+dnl
+dnl check for kdchart
+dnl
+dnl AC_KDCHART()
+AC_DEFINE_UNQUOTED(HAVE_KDCHART, "1", [Define if you have libkdchart])
+AC_DEFINE_UNQUOTED(HAVE_KDCHART_SETPROP, "1", [Define if you have KDChartListTableData::setProp method])
+
+
+dnl
+dnl check for libofx
+dnl
+AC_LIBOFX()
+
+dnl
+dnl check for library build for Qt-Designer
+dnl
+AC_QTDESIGNER_SUPPORT()
+
+dnl
+dnl check for sqlite3 support
+dnl
+AC_SQLITE3()
+
+dnl CXXFLAGS="$NOOPT_CXXFLAGS" dnl __kdevelop[noopt]__
+CXXFLAGS="$CXXFLAGS $USE_EXCEPTIONS" dnl __kdevelop[exc]__
+dnl KDE_NEED_FLEX dnl __kdevelop__
+dnl AC_PROG_YACC dnl __kdevelop__
+
+#
+# make sure the UIC compiler uses our own widget lib
+#
+X=`echo $UIC | grep -- -L`
+if test "x$X" = "x"; then
+ echo "UIC does not support -L option!!";
+fi
+UIC=`echo $UIC -L \$\(top_builddir\)/kmymoney2/widgets/.libs`
+
+#
+# create header directory, make symlinks
+#
+
+rm -rf kmymoney
+mkdir kmymoney
+
+echo Generating symlinks to header files
+CURDIR=
+if test "x${srcdir}" = "x${srcdir#/}"; then
+ CURDIR=`pwd`/
+fi
+BASEDIR=$CURDIR$srcdir
+
+
+while read a; do
+ MFILES=$(find $BASEDIR/$a -name Makefile.am);
+ for MFILE in $MFILES; do
+ DIR=$(dirname $MFILE)
+ HFILES=$(grep -v noinst_HEADERS $MFILE | grep _HEADERS)
+ for HFILE in $HFILES; do
+ case $HFILE in
+ =|*_HEADERS|\\)
+ ;;
+ *)
+ ln -s $DIR/$HFILE kmymoney/$HFILE
+ ;;
+ esac
+ done
+ done
+done < $srcdir/inst-apps
+
+dnl =======================================================
+dnl FILE: kmymoney2/widgets/configure.in.in
+dnl =======================================================
+
+AC_CONFIG_FILES([ kmymoney2/widgets/makekdewidgets ])
+KDE_CREATE_SUBDIRSLIST
+AC_CONFIG_FILES([ Makefile ])
+AC_CONFIG_FILES([ libkgpgfile/Makefile ])
+AC_CONFIG_FILES([ libkdchart/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/converter/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/dialogs/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/dialogs/settings/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/html/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/html/images/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/Tango/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/Tango/128x128/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/Tango/128x128/apps/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/Tango/16x16/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/Tango/16x16/actions/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/Tango/22x22/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/Tango/22x22/actions/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/Tango/32x32/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/Tango/32x32/apps/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/Tango/48x48/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/Tango/48x48/apps/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/Tango/64x64/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/Tango/64x64/apps/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/Tango/scalable/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/hicolor/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/hicolor/16x16/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/hicolor/16x16/actions/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/hicolor/22x22/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/hicolor/22x22/actions/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/hicolor/32x32/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/hicolor/32x32/apps/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/hicolor/48x48/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/hicolor/48x48/apps/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/hicolor/64x64/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/hicolor/64x64/apps/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/oxygen/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/oxygen/128x128/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/oxygen/128x128/apps/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/oxygen/16x16/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/oxygen/16x16/actions/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/oxygen/22x22/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/oxygen/22x22/actions/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/oxygen/32x32/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/oxygen/32x32/apps/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/oxygen/48x48/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/oxygen/48x48/apps/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/oxygen/64x64/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/oxygen/64x64/apps/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/icons/oxygen/scalable/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/misc/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/mymoney/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/mymoney/storage/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/pics/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/plugins/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/plugins/interfaces/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/plugins/ofximport/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/plugins/ofximport/dialogs/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/reports/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/C/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/de_AT/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/de_CH/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/de_DE/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/dk/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/el_GR/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/en_GB/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/en_US/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/es_AR/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/es_ES/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/es_MX/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/fr_CA/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/fr_CH/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/fr_FR/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/gl_ES/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/hu_HU/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/it/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/jp/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/nl_NL/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/pt_BR/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/pt_PT/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/ro_RO/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/ru_RU/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/sk/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/tr_TR/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/zh_CN/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/zh_HK/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/templates/zh_TW/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/views/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/widgets/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/wizards/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/wizards/newaccountwizard/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/wizards/newuserwizard/Makefile ])
+AC_CONFIG_FILES([ kmymoney2/wizards/wizardpages/Makefile ])
+AC_CONFIG_FILES([ po/Makefile ])
+AC_CONFIG_FILES([ developer-doc/Makefile ])
+AC_CONFIG_FILES([ developer-doc/phb/Makefile ])
+AC_CONFIG_FILES([ doc/Makefile ])
+AC_CONFIG_FILES([ doc/en/Makefile ])
+AC_CONFIG_FILES([ contrib/Makefile ])
+AC_OUTPUT
+echo ""
+echo ""
+echo "Configure results (user options):"
+echo "------------------------------------------"
+echo "OFX plugin: $enable_ofxplugin"
+
+echo ""
+
+echo "OFX direct connect: $enable_ofxbanking"
+
+echo ""
+
+echo "Chart support: yes"
+
+echo ""
+
+echo "SQLITE3 support: $enable_sqlite3"
+
+echo "------------------------------------------"
+echo ""
+echo ""
+echo "Configure results (developer options):"
+echo "------------------------------------------"
+if test "x$use_memory_leak_check" != "xno"; then
+ echo "Memory leak check support: yes"
+else
+ echo "Memory leak check support: no"
+fi
+
+echo ""
+
+if test "$enable_qtdesigner" = "yes"; then
+ echo "Qt-Designer library support: yes"
+else
+ echo "Qt-Designer library support: no"
+fi
+
+echo ""
+
+echo "PDF document generation: $enable_pdfdocs"
+
+echo ""
+
+if test x$no_cppunit = x; then
+ echo "CPPUNIT support: yes"
+ echo " online tests: "$enable_online_tests;
+elif test x$no_cppunit = xuser; then
+ echo "CPPUNIT support: disabled"
+else
+ echo "CPPUNIT support: no"
+ echo " You are missing the CPPUNIT headers and libraries"
+ echo " The unit test framework support won't be compiled."
+ echo " This is not relevant for the usage of the application.";
+ echo " Unit tests are only required by the developers.";
+fi
+
+echo "------------------------------------------"
+# Check if KDE_SET_PREFIX was called, and --prefix was passed to configure
+if test -n "$kde_libs_prefix" -a -n "$given_prefix"; then
+ # And if so, warn when they don't match
+ if test "$kde_libs_prefix" != "$given_prefix"; then
+ # And if kde doesn't know about the prefix yet
+ echo ":"`kde-config --path exe`":" | grep ":$given_prefix/bin/:" 2>&1 >/dev/null
+ if test $? -ne 0; then
+ echo ""
+ echo "Warning: you chose to install this package in $given_prefix,"
+ echo "but KDE was found in $kde_libs_prefix."
+ echo "For this to work, you will need to tell KDE about the new prefix, by ensuring"
+ echo "that KDEDIRS contains it, e.g. export KDEDIRS=$given_prefix:$kde_libs_prefix"
+ echo "Then restart KDE."
+ echo ""
+ fi
+ fi
+fi
+
+if test "$all_tests" = "bad"; then
+ if test ! "$cache_file" = "/dev/null"; then
+ echo ""
+ echo "Please remove the file $cache_file after changing your setup"
+ echo "so that configure will find the changes next time."
+ echo ""
+ fi
+else
+ echo ""
+ echo "Good - your configure finished. Start make now"
+ echo ""
+fi
diff --git a/configure.in.bot b/configure.in.bot
new file mode 100644
index 0000000..234429b
--- /dev/null
+++ b/configure.in.bot
@@ -0,0 +1,57 @@
+echo ""
+echo ""
+echo "Configure results (user options):"
+echo "------------------------------------------"
+echo "OFX plugin: $enable_ofxplugin"
+
+echo ""
+
+echo "OFX direct connect: $enable_ofxbanking"
+
+echo ""
+
+echo "Chart support: yes"
+
+echo ""
+
+echo "SQLITE3 support: $enable_sqlite3"
+
+echo "------------------------------------------"
+echo ""
+echo ""
+echo "Configure results (developer options):"
+echo "------------------------------------------"
+if test "x$use_memory_leak_check" != "xno"; then
+ echo "Memory leak check support: yes"
+else
+ echo "Memory leak check support: no"
+fi
+
+echo ""
+
+if test "$enable_qtdesigner" = "yes"; then
+ echo "Qt-Designer library support: yes"
+else
+ echo "Qt-Designer library support: no"
+fi
+
+echo ""
+
+echo "PDF document generation: $enable_pdfdocs"
+
+echo ""
+
+if test x$no_cppunit = x; then
+ echo "CPPUNIT support: yes"
+ echo " online tests: "$enable_online_tests;
+elif test x$no_cppunit = xuser; then
+ echo "CPPUNIT support: disabled"
+else
+ echo "CPPUNIT support: no"
+ echo " You are missing the CPPUNIT headers and libraries"
+ echo " The unit test framework support won't be compiled."
+ echo " This is not relevant for the usage of the application.";
+ echo " Unit tests are only required by the developers.";
+fi
+
+echo "------------------------------------------"
diff --git a/configure.in.in b/configure.in.in
new file mode 100644
index 0000000..fbd4f4a
--- /dev/null
+++ b/configure.in.in
@@ -0,0 +1,111 @@
+#MIN_CONFIG(3.3.1)
+
+AM_INIT_AUTOMAKE(kmymoney2,1.0.4)
+
+KDE_ENABLE_HIDDEN_VISIBILITY
+
+AM_KDE_MIN_VERSION(3, 4, 0)
+
+dnl
+dnl check for a recent autoconf version
+dnl
+AC_PREREQ(2.53)
+
+dnl
+dnl check for atoll and strtoll
+dnl
+AC_FUNC_CHECK(atoll, [AC_DEFINE_UNQUOTED(HAVE_ATOLL, 1, [define if you have atoll])])
+AC_FUNC_CHECK(strtoll, [AC_DEFINE_UNQUOTED(HAVE_STRTOLL, 1, [define if you have strtoll])])
+AC_CHECK_LIB(m, round, [AC_DEFINE_UNQUOTED(HAVE_ROUND, 1, [define if you have round])]
+)
+
+dnl
+dnl add check for project's memory leak checker
+dnl
+AC_MEMORY_LEAK_CHECK()
+
+dnl
+dnl add checks for cppunit
+dnl
+AM_PATH_CPPUNIT(1.8.0,
+ AM_CONDITIONAL(CPPUNIT, test "x$no_cppunit" = x)
+ AC_DEFINE_UNQUOTED(HAVE_LIBCPPUNIT, 1, [Define if you have libcppunit])
+ AC_SUBST(CPPUNIT_LIBS),
+ AM_CONDITIONAL(CPPUNIT, test "x$no_cppunit" = x)
+ AC_SUBST(CPPUNIT_LIBS)
+ )
+
+dnl
+dnl check for tools required for generation of PDF documentation
+dnl
+AC_PDF_GENERATION()
+
+dnl
+dnl check for kdchart
+dnl
+dnl AC_KDCHART()
+AC_DEFINE_UNQUOTED(HAVE_KDCHART, "1", [Define if you have libkdchart])
+AC_DEFINE_UNQUOTED(HAVE_KDCHART_SETPROP, "1", [Define if you have KDChartListTableData::setProp method])
+
+
+dnl
+dnl check for libofx
+dnl
+AC_LIBOFX()
+
+dnl
+dnl check for library build for Qt-Designer
+dnl
+AC_QTDESIGNER_SUPPORT()
+
+dnl
+dnl check for sqlite3 support
+dnl
+AC_SQLITE3()
+
+dnl CXXFLAGS="$NOOPT_CXXFLAGS" dnl __kdevelop[noopt]__
+CXXFLAGS="$CXXFLAGS $USE_EXCEPTIONS" dnl __kdevelop[exc]__
+dnl KDE_NEED_FLEX dnl __kdevelop__
+dnl AC_PROG_YACC dnl __kdevelop__
+
+#
+# make sure the UIC compiler uses our own widget lib
+#
+X=`echo $UIC | grep -- -L`
+if test "x$X" = "x"; then
+ echo "UIC does not support -L option!!";
+fi
+UIC=`echo $UIC -L \$\(top_builddir\)/kmymoney2/widgets/.libs`
+
+#
+# create header directory, make symlinks
+#
+
+rm -rf kmymoney
+mkdir kmymoney
+
+echo Generating symlinks to header files
+CURDIR=
+if test "x${srcdir}" = "x${srcdir#/}"; then
+ CURDIR=`pwd`/
+fi
+BASEDIR=$CURDIR$srcdir
+
+
+while read a; do
+ MFILES=$(find $BASEDIR/$a -name Makefile.am);
+ for MFILE in $MFILES; do
+ DIR=$(dirname $MFILE)
+ HFILES=$(grep -v noinst_HEADERS $MFILE | grep _HEADERS)
+ for HFILE in $HFILES; do
+ case $HFILE in
+ =|*_HEADERS|\\)
+ ;;
+ *)
+ ln -s $DIR/$HFILE kmymoney/$HFILE
+ ;;
+ esac
+ done
+ done
+done < $srcdir/inst-apps
+
diff --git a/contrib/Makefile.am b/contrib/Makefile.am
new file mode 100644
index 0000000..e55826f
--- /dev/null
+++ b/contrib/Makefile.am
@@ -0,0 +1 @@
+EXTRA_DIST = README kmm-safe functions.mysql mysqlcrypt.sh splitup-kde-chunk-online viewxml.sh csvpricesqif.py csvsecurityqif.py csvbankingqif.py
diff --git a/contrib/README b/contrib/README
new file mode 100644
index 0000000..1bf2388
--- /dev/null
+++ b/contrib/README
@@ -0,0 +1,6 @@
+This directory contains various tools around KMyMoney. They
+are not part of the installation and contained here for your
+reference.
+
+@Developers: Make sure to add new files in this directory
+ to the EXTRA_DIST target in Makefile.am
diff --git a/contrib/csvbankingqif.py b/contrib/csvbankingqif.py
new file mode 100755
index 0000000..4e0d7ea
--- /dev/null
+++ b/contrib/csvbankingqif.py
@@ -0,0 +1,151 @@
+#!/usr/bin/env python
+# -*- coding: iso-8859-1 -*-
+#
+#***************************************************************************
+# csvbankingqif.py - description
+# -------------------
+# begin : Sat 31 Oct. 2009
+# copyright : (C) 2009 by Allan Anderson
+# email : aganderson@ukonline.co.uk
+#
+#***************************************************************************/
+#
+#***************************************************************************
+#* *
+#* 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. *
+#* *
+#***************************************************************************/
+#
+# *** NOTE ***
+# It may be necessary to remove the second line, before running.
+# It may be necessary also, to change the currency symbol if your file
+# includes one.
+#
+# Simple utility to convert a csv format file, as from a bank, to qif
+# format for KMyMoney2. There is no standard for the layout of such a
+# file, but generally there will be a header line which indicates the
+# layout of the fields within the file. Even then though, the order of
+# the columns may vary. It is assumed, though, that the first column
+# will contain the date, in 'dd MM yy' format, 'MM' being the month
+# name or number.
+# The second column is the detail. The third and fourth columns are
+# assumed to be debits and credits. Even fron the same bank, these
+# columns may be reversed, but the script handles this. Alternatively,
+# the third column may be the amount. There may also be additional
+# columns, such as current balance, but these are all ignored.
+# Apart from the header line, there are likely to be other lines, with
+# account number, balance details, etc. These are skipped.
+#
+# First, make the script executable: chmod u+x csvbankinyqif.py .
+# The script should be added to the KMM QIF import profile. In KMM, open
+# Tools/QIF Profile Editor and click on 'New' at the bottom. then enter a
+# name, such as csvbank, then click 'OK'. Next, click on that name in the
+# next window, and open the Filter tab. For the 'Input filter location',
+# select the location you chose for the script file. For the Input filter
+# file type, enter *.csv, or whatever extension your data file has.
+# Finally, click 'OK'.
+# When ready, select File/Import/QIF, and browse to your data file, then
+# select your new filter profile, and click 'Import'.
+#
+
+#desc="date","detail","debit","credit"
+mnths=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
+currency = ''
+setup = True
+debsfirst = False # credit column is before debit
+both = False # only one amount column
+print("!Type:Bank")
+while 1:
+ try:
+ line=raw_input()
+ except:break
+ if line == "" : continue # empty line
+ line = line.replace('"','',) # Strip out ' "' quotes
+ line = line.replace(currency,'',) # Strip out '', etc. symbol
+ cols = line.split(',') # Seperator between columns
+ if setup:
+#
+# *** SETUP ***
+#
+ dt = cols[0][0:2] # Might be a date (day)
+ datefound = ((dt > '0') and (dt < '32')) #this looks like a date
+ hdrfound = (cols[0] == 'Date')
+ if not datefound and not hdrfound: continue# still in hdrs
+ if hdrfound:
+#
+# *** 'Date', so now in header ***
+#
+ hdrfound = False
+ #line = line.replace(' ','',) # Strip out spaces in hdr
+ cols[2] = cols[2].replace(' ','',) # Strip out spaces in hdr
+ if cols[2] == 'Debits':
+ debsfirst = True
+ continue
+ elif cols[2] == 'Credits':
+ debsfirst = False
+ continue
+ elif cols[2] == 'Amount':
+ both = True
+ continue
+ else:
+ print 'Error in col[2]'
+ print '*** Error in header - col 2 s/b Debit, Credit, or Amount'
+ #continue
+ exit
+ setup ==False
+#
+# *** Transactions ***
+#
+ cnum = 0 # First column
+ for col in cols:
+ if cnum > 3: break
+#
+# # Process Date
+#
+ elif cnum == 0:
+ col =col.replace(' ','/',2) # Change date seperator to '/'
+ m = col.split('/')
+# *** Check if month not numeric
+ mn = m[1][0:3] # Extract month string from field 2
+ fld = 2
+ try:
+ mnth = mnths.index(mn) # Get month number
+ except ValueError: # Field 2 not a valid month name
+ mn = m[0][0:3] # .. so try field 1
+ fld = 1
+ try:
+ mnth = mnths.index(mn)
+ except ValueError: # Nor is field 1
+ dat = ''.join(col) # ..so use as is (numeric)
+ else: # Field 1 is month name
+ dat = col[1:3] + str(mnth + 1) + '/' +m[2]
+ else: # Field 2 is month name
+ dat = col[0:3] + str(mnth + 1) + '/' +m[2]
+ line = 'D' + dat+'\n'
+#
+# # Detail column
+#
+ elif cnum == 1:
+ #col = col.replace('"','')
+ line = line + 'P' + col +'\n'
+#
+# # Debit or credit column
+#
+ elif cnum == 2:
+ if col != "":
+ if debsfirst == True: # This is Debit column
+ col = '-' + col # Mark as -ve
+ line = line + 'T' + col +'\n'
+#
+# # Credit or debit?
+#
+ elif ((cnum == 3) and (both == False)):
+ if col != "":
+ if ((debsfirst == False) ):
+ col = '-' + col # Mark as -ve
+ line = line + 'T' + col + '\n'
+ cnum+=1
+ print line + '^' # output this entry
diff --git a/contrib/csvpricesqif.py b/contrib/csvpricesqif.py
new file mode 100755
index 0000000..656ce20
--- /dev/null
+++ b/contrib/csvpricesqif.py
@@ -0,0 +1,59 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+#
+#***************************************************************************
+# csvpricesqif.py - description
+# -------------------
+# begin : Sat 24 Oct. 2009
+# copyright : (C) 2009 by Allan Anderson
+# email : aganderson@ukonline.co.uk
+#
+#***************************************************************************/
+#
+#***************************************************************************
+#* *
+#* 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. *
+#* *
+#***************************************************************************/
+
+import csv
+
+# *** NOTE ***
+# It may be necessary to remove the second line, before running.
+
+# Simple script to convert a csv format Prices file, as from later
+# editions of Quicken, to qif format for KMyMoney2.
+# It and its data files are expected to be in the same directory.
+# First make the script executable:- chmod u+x csvpricesqif.py
+# Run by ''./csvpricesqif.py' .
+# You will be prompted to enter input and output filenames, followed
+# by the symbol for the stock.
+
+# Input format - "23.12.09","61.62",,,
+# Output format -
+# !Type:Prices
+# "HJU8.BE",61.62,"23.12.09"
+# ^
+
+fin = raw_input('Please enter the input Prices filename (.csv, .PRN, etc.) : ')
+fout = raw_input('Please enter the output filename (add .qif) : ')
+symbol = raw_input('Please enter the symbol for this stock: ')
+symbol ='"'+ symbol+'"'# Add " " around symbol
+
+inputfile = csv.reader(open(fin, 'rb'))
+outputfile = open(fout, 'w')
+inputfile.next() # Skip header line. Comment out if no header.
+inputfile_list = []
+inputfile_list.extend(inputfile)
+
+for data in inputfile_list:
+ line = '!Type:Prices\n'
+ line = line +symbol +',' + data[1] + ',"' + data[0] + '"\n' + '^\n'
+
+ #print line
+ outputfile.write(line)
+
+outputfile.close()
diff --git a/contrib/csvsecurityqif.py b/contrib/csvsecurityqif.py
new file mode 100755
index 0000000..5f5e888
--- /dev/null
+++ b/contrib/csvsecurityqif.py
@@ -0,0 +1,57 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+#
+#***************************************************************************
+# csvsecurityqif.py - description
+# -------------------
+# begin : Sat 24 Oct. 2009
+# copyright : (C) 2009 by Allan Anderson
+# email : aganderson@ukonline.co.uk
+#
+#***************************************************************************/
+#
+#***************************************************************************
+#* *
+#* 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. *
+#* *
+#***************************************************************************/
+import csv
+
+# *** NOTE ***
+# It may be necessary to remove the second line, before running.
+
+# Simple utility to convert a csv format Securities file, as from later
+# editions of Quicken, to qif format for KMyMoney2.
+# It and its data files are expected to be in the same directory.
+#
+# First, make the script executable: chmod u+x csvsecurityqif.py .
+# Run by './csvsecurityqif.py'.
+# You will be prompted to enter input and output filenames.
+# The entries in this input file contain a number of fields that are
+# not documented and which KMyMoney2 does not handle.
+# These fields are accepted and suffixed with 'M' in the output file.
+# Anything of importance in them will need to be copy/pasted into KMM.
+
+fin = raw_input('Please enter the input Securities filename (.csv, .PRN, etc.) : ')
+fout = raw_input('Please enter the output filename (add .qif) : ')
+line = csv.reader(open(fin, "rb"))
+outputfile = open(fout, 'w')
+line.next() # Skip header line. Comment out if no header.
+line_list = []
+line_list.extend(line)
+line = "!Option:AutoSwitch\n"
+outputfile.write(line)
+
+for data in line_list:
+ line = "!Account\n" + "N" +data[0] + "\n" + "TMutual\n" + "^\n"
+ line = line + "!Type:Security\n"
+ line = line + "N" +data[0] + "\n"+ "S" + data[1] + "\n"+ "TUnit/Inv. Trust" #+"\n"
+ line = line + "M" + data[2] + "\n"+ "M" + data[3] + "\n"+ "M" + data[4] + "\n"+ "M" + data[5] + "\n"+ "M" + data[6]
+ line = line + "\n^\n"
+ #print line
+ outputfile.write(line)
+
+outputfile.close()
diff --git a/contrib/functions.mysql b/contrib/functions.mysql
new file mode 100644
index 0000000..c8c6c7f
--- /dev/null
+++ b/contrib/functions.mysql
@@ -0,0 +1,182 @@
+/* functions.mysql
+ Some functions for use with a KMyMoney MySql database.
+ Load them into your database with command:
+ mysql KMyMoney < this_file
+ To preserve them in backups, remember to add the -R flag to mysqldump.
+*/
+
+delimiter //
+
+DROP FUNCTION IF EXISTS toDecimal//
+CREATE
+ FUNCTION toDecimal(mymoneymoney VARCHAR(32))
+ RETURNS DECIMAL(12,6)
+ READS SQL DATA
+ BEGIN
+ /* Converts a MyMoneyMoney numerator/denominator string to a decimal number */
+ DECLARE result DECIMAL (12,6);
+ SELECT SUBSTRING_INDEX(mymoneymoney, '/', 1) / SUBSTRING_INDEX(mymoneymoney, '/', -1) INTO result;
+ RETURN result;
+ END
+//
+delimiter ;
+
+delimiter //
+DROP FUNCTION IF EXISTS cashBalance//
+CREATE
+ FUNCTION cashBalance(acctId VARCHAR(32))
+ RETURNS DECIMAL(12,2)
+ READS SQL DATA
+ BEGIN
+ /* Returns the cash balance as of today of an account specified by internal id.*/
+ /* to determine id - SELECT id FROM kmmAccounts WHERE accountName = 'whatever';
+ Sample usage - SELECT cashBalance('A000001'); */
+ DECLARE result DECIMAL (12,2);
+ SELECT SUM(toDecimal(shares)) INTO result
+ FROM kmmSplits
+ WHERE accountId = acctId
+ AND postDate <= NOW()
+ AND txType = 'N';
+ RETURN result;
+ END
+//
+delimiter ;
+
+delimiter //
+DROP PROCEDURE IF EXISTS listBalances//
+CREATE
+ PROCEDURE listBalances(IN parent varchar(32))
+ READS SQL DATA
+ BEGIN
+ /* Lists the balances of all accounts subsidiary to a named account. NOTE: not recursive
+ Sample usage: - CALL listBalances('Asset'); */
+ SELECT accountName, cashBalance(id) FROM kmmAccounts where parentId =
+ (SELECT id from kmmAccounts WHERE accountName = parent)
+ ORDER by 1;
+ END
+//
+delimiter ;
+
+delimiter //
+DROP FUNCTION IF EXISTS latestPrice//
+CREATE
+ FUNCTION latestPrice(secId VARCHAR(32))
+ RETURNS DECIMAL(12,6)
+ READS SQL DATA
+ BEGIN
+ /* Returns the latest price for a security identified by internal id. */
+ /* to determine id - SELECT id FROM kmmSecurities WHERE name = 'whatever'; */
+ DECLARE result DECIMAL (12,6);
+ SELECT toDecimal(price) INTO result
+ FROM kmmPrices WHERE fromId = secId AND priceDate =
+ (SELECT MAX(priceDate) FROM kmmPrices WHERE fromId = secId);
+ RETURN result;
+END
+//
+delimiter ;
+
+delimiter //
+DROP FUNCTION IF EXISTS shareBalance//
+CREATE
+ FUNCTION shareBalance(acctId VARCHAR(32))
+ RETURNS DECIMAL(12,6)
+ READS SQL DATA
+ BEGIN
+ /* Returns the share balance for an Stock account identified by internal id.
+ NOTE: similar to cashBalance but with greater precision */
+ DECLARE result DECIMAL (12,6);
+ SELECT SUM(toDecimal(shares)) INTO result
+ FROM kmmSplits WHERE accountId = acctId AND txType = 'N';
+ RETURN result;
+ END
+//
+delimiter ;
+
+delimiter //
+DROP FUNCTION IF EXISTS valuation//
+CREATE
+ FUNCTION valuation(acctId VARCHAR(32))
+ RETURNS DECIMAL(12,2)
+ READS SQL DATA
+ BEGIN
+ /* Returns the current value of a Stock account identified by internal id */
+ DECLARE result DECIMAL(12,2);
+ DECLARE secId VARCHAR(32);
+ SELECT currencyId FROM kmmAccounts WHERE id = acctId INTO secId;
+ SELECT shareBalance(acctId) * latestPrice(secId) INTO result;
+ RETURN result;
+ END
+//
+delimiter ;
+
+
+delimiter //
+DROP PROCEDURE IF EXISTS listValues//
+CREATE PROCEDURE listValues(IN parent varchar(32))
+ READS SQL DATA
+ BEGIN
+ /* Lists the current values of all stocks subsidiary to a named Investment account. NOTE: not recursive */
+ SELECT parent AS 'Portfolio';
+ SELECT accountName, valuation(id) AS 'Value' FROM kmmAccounts where parentId =
+ (SELECT id from kmmAccounts WHERE accountName = parent)
+ ORDER by 1;
+ SELECT SUM(valuation(id)) AS 'Total Value' FROM kmmAccounts where parentId =
+ (SELECT id from kmmAccounts WHERE accountName = parent);
+ END
+//
+delimiter ;
+
+delimiter //
+DROP FUNCTION IF EXISTS payeeName//
+CREATE
+ FUNCTION payeeName(payeeId VARCHAR(32))
+ RETURNS MEDIUMTEXT
+ READS SQL DATA
+ BEGIN
+ /* Returns payee name from id, with NULL test */
+ DECLARE result MEDIUMTEXT;
+ IF payeeId IS NULL THEN SET result = 'Empty Payee';
+ ELSE SELECT name FROM kmmPayees WHERE id = payeeId INTO result;
+ END IF;
+ RETURN result;
+ END
+//
+delimiter ;
+
+delimiter //
+DROP FUNCTION IF EXISTS categoryName//
+CREATE
+ FUNCTION categoryName(categoryId VARCHAR(32))
+ RETURNS MEDIUMTEXT
+ READS SQL DATA
+ BEGIN
+ /* Returns fully qualified category name from its id */
+ DECLARE result MEDIUMTEXT;
+ DECLARE thisName MEDIUMTEXT;
+ DECLARE parent VARCHAR(32);
+ IF categoryId IS NULL THEN RETURN 'Empty Category';
+ END IF;
+ SELECT accountName from kmmAccounts WHERE id = categoryId INTO result;
+ SELECT parentId from kmmAccounts WHERE id = categoryId INTO parent;
+ WHILE parent IS NOT NULL DO
+ SELECT accountName from kmmAccounts WHERE id = parent INTO thisName;
+ SET result = CONCAT(thisName, ':', result);
+ SELECT parentId from kmmAccounts WHERE id = parent INTO parent;
+ END WHILE;
+ RETURN result;
+ END
+//
+delimiter ;
+
+/* some useful functions re tax */
+DROP VIEW IF EXISTS taxCats;
+CREATE VIEW taxCats AS SELECT kvpId AS accountId FROM kmmKeyValuePairs WHERE kvpKey = 'Tax' AND kvpData = 'Yes';
+DROP VIEW IF EXISTS taxSplits;
+CREATE VIEW taxSplits AS SELECT accountId, payeeId, postDate, CAST(toDecimal(value) AS decimal(12,2)) AS Amount FROM kmmSplits WHERE txType = 'N' AND accountId IN (SELECT * FROM taxCats);
+
+
+/* Sample: generate a tax report for UK yesr 08-09.
+ Sorted by payee within Category */
+DROP VIEW IF EXISTS taxReport;
+CREATE VIEW taxReport AS SELECT categoryName(accountId) AS Account, payeeName(payeeId) As Payee, DATE_FORMAT(postDate, '%d/%m/%y') As Date, ABS(Amount) AS Amount FROM taxSplits WHERE postDate > "2008-04-05" and postDate < "2009-04-06" ORDER BY 1, 2, 3;
+
diff --git a/contrib/kmm-safe b/contrib/kmm-safe
new file mode 100755
index 0000000..2519565
--- /dev/null
+++ b/contrib/kmm-safe
@@ -0,0 +1,49 @@
+#!/bin/bash
+#
+# make a copy of KMyMoney files in a 'safe' directory whenever
+# the contents of the orignal changed since the last run of this program.
+# In order to make it work for you, please modify the parameters
+# and erase the line following it.
+#
+# in order to automate the process, I entered the following two lines
+# into my crontab using 'crontab -e'
+#
+# # make a copy of the valuable KMyMoney data every 20 minutes
+# */20 * * * * /home/thb/bin/kmm-safe
+#
+# (C) 2005 by Thomas Baumgart (ipwizard at users.sourceforge.net)
+
+# DATA_FILES="$HOME/thb.xml $HOME/thb.kmy"
+DATA_FILES="$HOME/thb.kmy"
+SAFE_DIR="$HOME/kmymoney-safe"
+DATE_FORM="%Y-%m-%d-%H-%M-%S"
+
+echo "Please configure to your likings and comment these two lines"
+exit 1
+
+for i in $DATA_FILES; do
+ NEWFN=$SAFE_DIR/`basename $i`-`date +$DATE_FORM`
+ OLDFN=$SAFE_DIR/`basename $i`-last
+
+ # check if we need to keep a copy
+ NEEDSAVE=0
+ if test ! -e $OLDFN; then
+ NEEDSAVE=1
+ fi
+ if test $NEEDSAVE -eq 0; then
+ CS1=`md5sum $i | cut -d' ' -f1`
+ CS2=`md5sum $OLDFN | cut -d' ' -f1`
+ if test $CS1 != $CS2; then
+ NEEDSAVE=1
+ fi
+ fi
+
+ if test $NEEDSAVE -eq 1; then
+ cp $i $NEWFN
+ if test -e $OLDFN; then
+ rm $OLDFN
+ fi
+ ln -s $NEWFN $OLDFN
+ fi
+done
+
diff --git a/contrib/mysqlcrypt.sh b/contrib/mysqlcrypt.sh
new file mode 100644
index 0000000..b04525b
--- /dev/null
+++ b/contrib/mysqlcrypt.sh
@@ -0,0 +1,99 @@
+# mysqlcrypt.sh
+# This shell script will run KMyMoney in a MySql database
+# and uses the MySql dump program to maintain a copy of the data.
+# Additionally, another copy is written to a backup
+# directory before running KMyMoney. These backups will be deleted after a
+# user-specified number of days.
+
+# Optionally, these data files may be encrypted.
+# For encryption, it is necessary that you have the 'gpg' program installed,
+# and have set up a key identified by an email address (which may be a pseudo address).
+# See 'man gpg' for more info. The kgpg program will help set up these keys.
+# DO NOT forget the password associated with gpg; you will need it to access your data.
+
+# Optionally, the data can be removed from the database after KMyMoney finishes,
+# and reloaded next time you run.
+
+# It is assumed that your logon user name has the necessary database permissions.
+
+# Please set the following variables to your requirements
+MYDIR=$HOME/money # directory where the encrypted copy is to be held
+BUDIR=$MYDIR/backup # directory where the backups should go;
+FILE=myfin # name for the encrypted copy
+DBNAME=KMyMoney # mysql datbase name
+DROP=y # (y/n) - whether to delete info from database after running kmm
+SILENT=n # if set to y, backups will be deleted silently, else you will be asked
+CRYPTEMAIL=me@googlemail.com # delete this line if you don't want encrypted copies
+declare -i KEEP=7 # number of days to keep backups
+# end of user-changeable directives
+
+if [ ! -d $MYDIR ] ; then
+ mkdir $MYDIR;
+fi
+if [ ! -d $BUDIR ] ; then
+ mkdir $BUDIR;
+fi
+
+if [ -z $CRYPTEMAIL ]; then
+ EFILE=${FILE};
+else
+ EFILE=${FILE}.gpg;
+fi
+
+declare NOW=`date +%Y%m%d%H%M%S`
+
+if [ ! -f $MYDIR/$EFILE ] ; then
+ kdialog --warningcontinuecancel "A version of $FILE does not exist in $MYDIR.\nWhen KMyMoney starts, please open or create a file and use the 'File/Save as Database' function."
+ if [ $? -ne 0 ]; then
+ exit;
+ fi
+ KMMCMD=-n;
+else
+ KMMCMD=sql://$USER@localhost/$DBNAME?driver=QMYSQL3
+ # backup file
+ cp $MYDIR/$EFILE $BUDIR/$NOW$EFILE
+ LOAD=y
+ mysql -e "use $DBNAME;" 2>/dev/null
+ if [ $? -eq 0 ]; then
+ kdialog --warningyesno "A $DBNAME database exists. Do you wish to run with this?\n If not, the database will be reloaded from the encrypted file"
+ if [ $? -eq 0 ]; then # replied yes
+ LOAD=n
+ fi;
+ fi;
+ if [ $LOAD = y ]; then
+ echo "Reloading from file"
+ if [ -z $CRYPTEMAIL ]; then
+ mysql <$MYDIR/$EFILE;
+ else
+ gpg --decrypt $MYDIR/$EFILE |mysql;
+ fi;
+ fi;
+fi
+#run kmymoney
+kmymoney $KMMCMD
+mysqldump --databases -R $DBNAME >$MYDIR/$FILE
+if [ ! -z $CRYPTEMAIL ]; then
+ rm -f $MYDIR/$EFILE
+ gpg -e -r $CRYPTEMAIL $MYDIR/$FILE
+ rm $MYDIR/$FILE;
+fi
+
+case ${DROP:0:1} in
+ y | Y) mysql -e "drop database KMyMoney;";;
+esac
+
+# delete outdated backup files
+cd $BUDIR
+for i in `find . -name "*${EFILE}" -ctime +${KEEP}`; do
+ case ${SILENT:0:1} in
+ y | Y) ANSWER=y
+ ;;
+ *) read -p "Delete $i?" ANSWER
+ ;;
+ esac
+ case ${ANSWER:0:1} in
+ y | Y) echo "Deleting $i!"
+ rm $i
+ ;;
+ esac
+done
diff --git a/contrib/splitup-kde-chunk-online b/contrib/splitup-kde-chunk-online
new file mode 100755
index 0000000..53003cc
--- /dev/null
+++ b/contrib/splitup-kde-chunk-online
@@ -0,0 +1,88 @@
+#!/usr/bin/perl
+#
+# split up an HTML file generated with e.g.
+#
+# /opt/kde3/bin/meinproc --check \
+# --stylesheet `dirname $(KDE_XSL_STYLESHEET)`/kde-chunk-online.xsl \
+# $(srcdir)/index.docbook -o index.xml;
+#
+# into several HTML files. While processing the input file - which
+# must be named index.xml - replace the following occurences:
+#
+# source destination
+# ---------------------------------------------------------------------------
+# HEAD/common ../common
+# <a href=\"/search_form.html\">Search</a> -literally nothing-
+# <a href=\"/\">docs.kde.org</a> <a href=\"index.html\">Home</a>
+#
+# The script should be started in the directory where the file index.xml
+# is located. The output files will be generated in the same directory.
+#
+# (C) 2007,2009 by Thomas Baumgart (ipwizard at users.sourceforge.net)
+#
+#***************************************************************************
+#* 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. *
+#***************************************************************************/
+
+
+sub endFile
+{
+ close OUT;
+ $fileIdx--;
+ if($fileIdx > 0) {
+ open(OUT, ">> $fname[$fileIdx]") or die("Unable to open file");
+ }
+}
+
+sub startFile
+{
+ $fileIdx++;
+ my $node = shift;
+ $node =~ /FILENAME filename="(.*)"/;
+ my $name = $1;
+ $fname[$fileIdx] = $name;
+ open(OUT, "> $fname[$fileIdx]") or die("Unable to open file");
+}
+
+sub processLine
+{
+ my $line = shift;
+ # .....</FILENAME>....
+ if($line =~ /(.*)(<\/FILENAME>)(.*)/) {
+ my $s = $1;
+ my $e = $3;
+ processLine($s);
+ endFile();
+ processLine($e);
+ }
+ # .....<FILENAME filename="index.html">....
+ elsif($line =~ /(.*)(<FILENAME filename="[^>\"]*">)(.*)/) {
+ my $s = $1;
+ my $f = $2;
+ my $e = $3;
+ processLine($s);
+ startFile($f);
+ processLine($e);
+ }
+ else {
+ # replace HEAD/common with ../common
+ $line =~ s#/HEAD/common#../common#g;
+ # don't show access to search form
+ $line =~ s#<a href=\"/search_form.html\">Search</a>##g;
+ # don't link to docs.kde.org
+ $line =~ s#<a href=\"/\">docs.kde.org</a>#<a href=\"index.html\">Home</a>#g;
+ print OUT "$line\n";
+ }
+}
+
+$fileIdx = 0;
+open(IN, "< index.xml");
+while(<IN>) {
+ chomp($_);
+ my $line = $_;
+ processLine($line);
+}
+close IN;
diff --git a/contrib/viewxml.sh b/contrib/viewxml.sh
new file mode 100755
index 0000000..cd1ef17
--- /dev/null
+++ b/contrib/viewxml.sh
@@ -0,0 +1,45 @@
+# A bash script to view a temporary copy of a KMyMoney XML file in your favourite editor
+# (works with some gnucash files too!)
+
+# Usage:- viewxml [filename]
+
+# Save this script somewhere in your path and remember to apply execute permissions (chmod a+x viewxml)
+# Set the following variables as required
+TMPDIR=/tmp # a temporary directory for storing the file copy
+EDITOR=kate # your editor of choice
+WIPE='rm -f' # command to get rid of the temporary file copy (could be replaced with a shredder or something)
+#
+
+declare -i TYPE
+
+if [ -z $1 ]; then
+ FILE=`kdialog --getopenfilename . '*.*'`;
+else
+ FILE=$1;
+fi
+
+TYPE=0 # default type, gzipped file
+read -n 14 <$FILE HEAD
+if [ "$HEAD" = "-----BEGIN PGP" ]; then
+ TYPE=1; # encrypted file
+elif [ "$HEAD" = "<?xml version=" ]; then
+ TYPE=2;
+fi
+
+BASENAME=`basename $FILE`
+
+case $TYPE in
+ 0) echo $BASENAME is gzipped
+ cp $FILE $TMPDIR/$BASENAME.gz
+ gunzip $TMPDIR/$BASENAME.gz;;
+ 1) echo $BASENAME is encrypted
+ gpg -d $FILE >$TMPDIR/$BASENAME;;
+ 2) echo $BASENAME is plaintext
+ cp $FILE $TMPDIR/$BASENAME;;
+esac
+
+$EDITOR $TMPDIR/$BASENAME
+
+$WIPE $TMPDIR/$BASENAME
+
+
diff --git a/developer-doc/Makefile.am b/developer-doc/Makefile.am
new file mode 100644
index 0000000..5b0934b
--- /dev/null
+++ b/developer-doc/Makefile.am
@@ -0,0 +1,7 @@
+KDE_OPTIONS = noautodist
+
+####### kdevelop will overwrite this part!!! (begin)##########
+
+SUBDIRS = phb
+
+####### kdevelop will overwrite this part!!! (end)############
diff --git a/developer-doc/phb/Makefile.am b/developer-doc/phb/Makefile.am
new file mode 100644
index 0000000..a99d2d9
--- /dev/null
+++ b/developer-doc/phb/Makefile.am
@@ -0,0 +1,115 @@
+KDE_OPTIONS = noautodist
+
+DOCBOOK_FILES = phb.docbook cfg-mgmt.docbook coding.docbook cvs-examples.docbook src-examples.docbook licence.docbook error-mgmt.docbook unit-test.docbook rel-mgmt.docbook test-examples.docbook rpm-example.docbook fdl-licence translation.docbook dialogs.docbook documentation.docbook settings.docbook submissions.docbook
+
+EXTRA_DIST = $(DOCBOOK_FILES)
+
+MOSTLYCLEANFILES = *.html *.pdf *.ps phb.docbook.tex online-phb.tar.bz2
+
+TARGETS = phb.html
+
+if GENERATE_PDF
+PDF_TARGET = kmymoney-phb.pdf
+endif
+
+.PHONY: all show preview get-files clear-files web
+all: $(TARGETS) $(PDF_TARGET)
+
+STYLESHEET = kde-nochunk.xsl
+
+phb.html: $(DOCBOOK_FILES)
+ @if test -e $(MEINPROC); then \
+ echo $(MEINPROC) --stylesheet $(kde_libs_prefix)/share/apps/ksgmltools2/customization/$(STYLESHEET) $(srcdir)/phb.docbook -o phb.html; \
+ echo sed -i "s/ISO-8859-1/UTF-8/g" phb.html; \
+ $(MEINPROC) --stylesheet $(kde_libs_prefix)/share/apps/ksgmltools2/customization/$(STYLESHEET) $(srcdir)/phb.docbook --stdout | sed "s/ISO-8859-1/UTF-8/g" > phb.html; \
+ fi
+
+preview: phb.html
+
+show: preview
+ konqueror phb.html
+
+# if we're in a VPATH environment, we need to copy all files over
+# to the build directory. Otherwise, we'll get into trouble. Of course
+# we delete them afterwards.
+get-files:
+ if test -n "$(VPATH)" ; then \
+ if test x$(VPATH) != x.; then \
+ for file in $(DOCBOOK_FILES) $(SCREENSHOT_FILES); do \
+ cp $(srcdir)/$$file .; \
+ chmod +w $$file; \
+ done; \
+ fi \
+ fi
+
+clear-files:
+ if test -n "$(VPATH)" ; then \
+ if test x$(VPATH) != x.; then \
+ for file in $(DOCBOOK_FILES) $(SCREENSHOT_FILES); do chmod +w $$file; rm $$file; done; \
+ fi \
+ fi
+
+
+web: phb/index.html
+
+phb/index.html: $(DOCBOOK_FILES)
+ if test -x $(abs_top_srcdir)/contrib/splitup-kde-chunk-online; then \
+ rm -rf phb common; \
+ mkdir phb; \
+ mkdir common; \
+ $(MEINPROC) --stylesheet `dirname $(KDE_XSL_STYLESHEET)`/kde-chunk-online.xsl $(srcdir)/phb.docbook -o phb/index.xml; \
+ cd phb; \
+ $(abs_top_srcdir)/contrib/splitup-kde-chunk-online; \
+ rm index.xml; \
+ cd ..; \
+ make get-files; \
+ for file in $(SCREENSHOT_FILES); do \
+ cp $$file phb; \
+ done; \
+ make clear-files; \
+ cp $(kde_libs_htmldir)/en/common/* common; \
+ if test ! -z "$(PDF_TARGET)"; then \
+ cp $(PDF_TARGET) phb; \
+ fi; \
+ fi;
+
+sf-username:
+ @if test -z $(SF_USER); then \
+ echo "The environment variable SF_USER must be set to your"; \
+ echo "SourceForge username and you must have write access"; \
+ echo "to the project space before the upload will work."; \
+ exit 1; \
+ fi;
+
+
+web-upload: sf-username web
+ if test -e common; then \
+ echo "cd htdocs/common" > upload.batch; \
+ echo "rm *" >> upload.batch; \
+ echo lcd common >> upload.batch; \
+ echo "mput *" >> upload.batch; \
+ echo cd ../phb >> upload.batch; \
+ echo "rm *" >> upload.batch; \
+ echo lcd ../phb >> upload.batch; \
+ echo "mput *" >> upload.batch; \
+ echo "rm index.xml"; \
+ echo "Uploading prject handbook files to web.sourceforge.net"; \
+ sftp -b upload.batch $(SF_USER),kmymoney2@web.sourceforge.net; \
+ rm -rf upload.batch; \
+ fi;
+
+# if we're in a VPATH environment, we need to copy all files over
+# to the build directory. Otherwise, we'll get into trouble. Of course
+# we delete them afterwards.
+
+if GENERATE_PDF
+kmymoney-phb.pdf: $(DOCBOOK_FILES)
+ $(MAKE) get-files
+ $(MEINPROC) --stylesheet `dirname $(KDE_XSL_STYLESHEET)`/kde-nochunk.xsl $(srcdir)/phb.docbook -o index.html
+ recode utf8..latin1 index.html
+ html2ps -o kmymoney-phb.ps -n index.html
+ ps2pdf kmymoney-phb.ps kmymoney-phb.pdf
+ rm index.html kmymoney-phb.ps
+ $(MAKE) clear-files
+endif
+
diff --git a/developer-doc/phb/cfg-mgmt.docbook b/developer-doc/phb/cfg-mgmt.docbook
new file mode 100644
index 0000000..4b64c2b
--- /dev/null
+++ b/developer-doc/phb/cfg-mgmt.docbook
@@ -0,0 +1,320 @@
+<chapter id="cfg-mgmt">
+<title>Configuration Management</title>
+<para>
+Whenever a project is developed in stages, it is very important for the
+people working on the project to know, which version of the project is used
+by the users and how it was built and what the components of this project
+are. This applies to hardware (e.g. automobiles) as well as software.
+Think of the times, when a car manufacturer calls certain cars to be
+repaired due to production problems. The manufacturer
+can track down the relevant cars because he is using a
+configuration management system and knows each car that contains e.g.
+faulty parts.
+</para>
+
+<para>
+The same applies to software development projects: whenever a version (stage of
+development) of the project is made
+public, it has to be given a distinct name or tag - usually the version number -
+and the development team must keep a snapshot of all components that made
+up that stage of the software project. This does not only include the
+source code of the project, but all libraries in their relevant stage as
+well as compilers and tools and all their installation/configuration
+information. If all this information is present, the software development
+team is capable to exactly reproduce each delivered version to search for
+problems occuring with this version. If this capability is not available,
+the development team has a hard time to find these problems.
+</para>
+
+<para>
+CVS helps us in our project to cover one aspect of configuration
+management: version control of the source code. It helps us to keep the
+snapshots of all the files the project team is responsible for in a
+central repository. Another aspect of CVS is concurrent development which
+allows us that some of us can develop
+new features of the project while others fix problems with previous
+versions even if both tasks modify the same source file. This feature is
+called branching. How branches will be organized in our project is
+explained in the chapter about
+<link linkend="version-mgmt">Version management</link>.
+</para>
+
+<para>
+The configuration management also regulates how the development team passes
+information among the members. This includes things like naming
+conventions, how errors are reported, rated and fixed and who is
+responsible for which task. The emphasis on this document though is the
+management of the version control system and how things are handled in this
+area. This does not mean, that the other important issues of configuration
+management are left outside. They are just not in the focus of this
+document.
+</para>
+
+<para>
+Throughout this document a few terms are used. In order to avoid confusion
+because these terms might be used differently in other documents, they are
+defined here.
+
+<table>
+<title>Definition of version control related terms</title>
+<tgroup cols="2">
+<thead>
+<row>
+<entry>Term</entry>
+<entry>Definition</entry>
+</row>
+</thead>
+
+<tbody>
+<row>
+<entry>Revision</entry>
+<entry>
+A <emphasis>revision</emphasis> is the stage of a single file in the
+repository. <emphasis>Revisions</emphasis> start with the value 1.1 upon
+the initial check-in and are incremented with each check-in of that file.
+After the third check-in, the <emphasis>revision</emphasis> of a file has
+the numeric value of 1.3.
+
+Once branches are made, <emphasis>revisions</emphasis> can have values like
+1.6.2.2. Since the <emphasis>revisions</emphasis> differ for all files,
+the revision number is only necessary for certain administrative tasks on
+single files (e.g.
+<link linkend="promoting-changes">merging data from another branch</link>).
+</entry>
+</row>
+
+<row>
+<entry>Tag, Label</entry>
+<entry>
+A <emphasis>tag</emphasis> is a string that represents a single revision of
+a file. Multiple tags can point to the same revision of a file.
+Sometimes, <emphasis>label</emphasis> is used as a synonym for tag.
+</entry>
+</row>
+
+<row>
+<entry>Version</entry>
+<entry>
+A <emphasis>version</emphasis> is the stage of the whole project in the
+repository. As already mentioned, the revisions for the files contained in
+the project differ from each other for a specific
+<emphasis>version</emphasis>. Therefor, each revision contained in a
+<emphasis>version</emphasis> receives the same tag.
+This tag can be used
+to checkout an exact copy of the version of the project.
+</entry>
+</row>
+
+<row>
+<entry>Repository</entry>
+<entry>
+The repository is the central database containing all revisions of all
+files of the &app; project. It is located on the SourceForge.net and can
+be accessed via &cvs;.
+</entry>
+</row>
+
+<row>
+<entry>Sandbox</entry>
+<entry>
+The sandbox is the local work area for the developer. Initially, a sandbox
+is filled by checking out a specific stage of the repository. Changes made
+to the sandbox are moved to the repository by the checkin process. Changes
+made by other developers are transferred to one's own sandbox by the update
+process.
+
+A developer can maintain different sandboxes of the same project in
+different directories on the same machine. This requires thorough attention
+of the developer which sandbox he is modifying. Using several sandboxes is
+usually meaningful if a developer works on changes on a release branch
+(stable release) and on the main-branch (development release) at the same
+time. See <link linkend="multiple-branches">the appendix</link> for an
+example.
+</entry>
+</row>
+
+</tbody>
+</tgroup>
+</table>
+</para>
+<!-- SECTION =================================================== -->
+<sect1 id="vc-tool">
+<title>Version Control Tool</title>
+<para>
+Since the &app; project is hosted on the <ulink
+url="http://www.sourceforge.net/">SourceForge</ulink> platform, <ulink
+url="http://www.cvshome.org">CVS</ulink> is used as the version control
+tool. &cvs; is widely accepted as version control tool in the open source
+community and covers our needs pretty well.
+</para>
+<para>
+The &app; project's central repository is handled on the
+SourceForge platform. Developers do not edit files directly in the
+repository, but rather checkout a working copy into their local
+sandbox. This local sandbox can then be modified without the necessity of
+a direct link to the central repository.
+Once the developer is confident with the changes made, he checks the files
+back into repository.
+</para>
+
+<para>
+During the checkin process, &cvs; keeps track of all the changes made. This
+allows to review a complete history of all modifications ever made to the
+project.
+As mentioned above, it is very important in certain circumstances to have
+such a history.
+</para>
+</sect1>
+
+<!-- SECTION =================================================== -->
+
+<sect1 id="repo-access">
+<title>Access to the repository</title>
+<para>
+Access to the repository is available in two different forms
+<itemizedlist>
+<listitem><para>Read-Only access</para></listitem>
+<listitem><para>Read-Write access</para></listitem>
+</itemizedlist>
+</para>
+
+<sect2>
+<title>Read-Only access</title>
+<para>
+Read-Only access is granted to anybody anonymously to the repository. For
+this type of access you do not need a user account on the SourceForge
+platform. Access is made through the <emphasis>pserver</emphasis>-protocol
+of &cvs;: See <ulink
+url="http://sourceforge.net/">the description on SourceForge</ulink> for more details.
+</para>
+</sect2>
+
+<sect2>
+<title>Read-Write access</title>
+<para>
+In order to get read-write access to the repository, two things are
+necessary. First you need a user account on the SourceForge platform.
+Second you need to qualifiy as a developer with the &app; project
+administrator(s). Once they have added you to the list of developers, you
+can access the repository through an <emphasis>SSH</emphasis> encrypted
+tunnel.
+
+See <ulink
+url="http://sourceforge.net/">the description on SourceForge</ulink> for more details.
+
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="version-controlled-files">
+<title>Version controlled files</title>
+<para>
+This chapter explains which files have to be version controlled. It also
+explains how to configure &cvs; to skip certain files that are generated by
+the compile/build process but should not be stored in the repository.
+</para>
+
+<sect2>
+<title>Files that must be stored in the repository</title>
+<para>
+All files that form an application (e.g. source code, header files, icons,
+documentation, etc.) that are necessary to compile, build and run the
+application <command>must</command> be checked into the central repository.
+</para>
+
+<caution>
+<para>
+Before you add a file to the repository you must check it's format. If it's
+a binary format the special option <command>-kb</command> must be appended
+to the <command>cvs add</command> in order to inform the central repository
+to leave the file as it is
+</para>
+</caution>
+</sect2>
+
+<sect2>
+<title>Files that should not be stored in the repository</title>
+
+<para>
+All files that are automatically generated by the build process (e.g.
+object files, libraries, executables, Makefiles, etc.) should not be checked
+into the repository because they can easily be reconstructed by the
+developer. In very rare circumstances it might be necessary to checkin an
+automatically generated file. This is always an exception.
+
+<note>
+<para>
+I mentioned Makefiles above because I assume that &ac; and &am; are used.
+Using &ac; and &am; supplies the project with a
+<command>configure</command> script that creates the Makefiles. The
+necessary input files are called <command>Makefile.am</command> that must
+be checked into the repository as source to the Makefiles.
+</para>
+<para>
+If you do not use &ac; and &am; and write your Makefiles directly, they
+have to be checked in as they are not automatically generated. Nevertheless,
+using non &am; generated Makefiles should be avoided.
+</para>
+</note>
+</para>
+</sect2>
+</sect1>
+
+
+<sect1 id="version-mgmt">
+<title>Version management</title>
+<para>
+At certain times to be defined by the project's administrators (actually
+configuration manager) a snapshot is taken from the repository. In order to
+fix the stage of this snapshot in the repository, a
+<emphasis>tag</emphasis> is placed on this stage. Tagging the repository
+creates a version of the project.
+</para>
+
+<sect2>
+<title>Layout of the version numbers</title>
+<para>
+The version number is made out of three numeric fields. These are:
+
+<orderedlist>
+<listitem><para>The major release number</para></listitem>
+<listitem><para>The minor release number</para></listitem>
+<listitem><para>The micro release number</para></listitem>
+</orderedlist>
+
+In order to serve as a tag for &cvs;, the text <command>rel-</command> is
+prepended to the version numbers and the three fields are seperated with a
+dash (e.g. rel-0-3-7).
+</para>
+
+<para>
+The major release number will be changed when all the proposed features
+mentioned in the release plan (available on the
+<ulink url="http://kmymoney2.sourceforge.net/">project web-site</ulink>)
+are designedi, coded and tested.
+</para>
+
+<para>
+One of the objectives of the minor release number is to differentiate
+between stable and unstable versions of the project. As a widely accepted
+procedure, odd numbers are used for development versions, even numbers
+identify stable versions. Whenever the configuration manager decides that
+to create a new stable release, this will also bump the version number of
+the unstable release by two.
+</para>
+
+<para>
+The micro release number is reset to 0 when the minor release number is
+incremented and then incremented with each version following until the
+minor release number is modified again. Versions tagged between the
+creation of a stable branch and the actual release -0 of this branch will
+be identified by a micro release number of
+<emphasis>pre<subscript>n</subscript></emphasis>, where
+<emphasis>n</emphasis> is incremented each time a version is tagged.
+</para>
+
+</sect2>
+
+</sect1>
+
+</chapter>
diff --git a/developer-doc/phb/coding.docbook b/developer-doc/phb/coding.docbook
new file mode 100644
index 0000000..ca7da82
--- /dev/null
+++ b/developer-doc/phb/coding.docbook
@@ -0,0 +1,413 @@
+<chapter id="coding-std">
+<title>Coding Rules</title>
+<para>
+Where-ever possible this document should be referred to when questions
+ regarding the format of the source code are raised.
+</para>
+
+<para>
+By the way, we know the code doesn't always conform to the standards at
+the moment, but work is underway to change the code and all new code
+submitted should conform to the standards.
+</para>
+
+<!-- SECTION =================================================== -->
+<sect1 id="general">
+<title>General</title>
+<para>
+The following list shows the general rules that should be regarded by any
+developer working on &app;.
+</para>
+
+<itemizedlist>
+<listitem>
+<para>
+Each file should contain only one declaration or implementation and the
+filename should reflect the class name. e.g ksomethingdlg.h would contain a
+declaration for the KSomethingDlg class.
+</para>
+</listitem>
+
+<listitem>
+<para>
+A tab width of 2 spaces should be used and if your editor supports it, the
+tabs should be changed into spaces. (KDevelop/KWrite supports tab
+translation).
+</para>
+</listitem>
+
+<listitem>
+<para>
+All dialogs should be located in the kmymoney2/dialogs directory.
+</para>
+</listitem>
+
+<listitem>
+<para>
+Each class should be as self contained as possible. If for instance, you
+are creating a dialog, then all the signals and slots should be connected
+within that dialog class. Where access is needed to the class details
+methods should be used. This enhances readability and makes maintenance a
+lot easier with each object having it's own state, indentity and behaviour,
+(see Object Oriented Analysis &amp; Design using UML, Bennet &amp; Co).
+</para>
+</listitem>
+
+<listitem>
+<para>
+All user visible text should be wrapped in the i18n internationalisation
+wrapper for translation.
+</para>
+</listitem>
+</itemizedlist>
+
+</sect1>
+
+
+<!-- SECTION =================================================== -->
+<sect1 id="header-files">
+<title>Header Files</title>
+<para>
+The following rules apply to all header files.
+</para>
+
+<itemizedlist>
+<listitem>
+<para>
+Header files shall end with the extension .h not .hpp.
+</para>
+</listitem>
+
+<listitem>
+<para>
+All header files shall begin with a comment block as generated by KDevelop.
+</para>
+</listitem>
+
+<listitem>
+<para>
+The remainder of the header file shall be surrounded by include stoppers.
+The name of the macro used should be the capitalized filename with the dot
+replaced by an underbar (e.g. KSettingsDlg.h --\> KSETTINGSDLG_H)
+<example>
+<title>Using include stoppers</title>
+<screen>
+
+ #ifndef KSETTINGSDLG_H
+ #define KSETTINGSDLG_H
+ /* remainder of header file */
+ #endif // KSETTINGSDLG_H
+
+
+</screen>
+</example>
+
+</para>
+</listitem>
+
+<listitem>
+<para>
+All classes designed for use by the KDE interface should begin with a
+<emphasis>K</emphasis>
+with each separate word beginning with an uppercase letter e.g
+KSomethingDlg.
+</para>
+</listitem>
+
+<listitem>
+<para>
+The header file will include other header files in the following fashion
+and same order:
+</para>
+
+<example>
+<title>Including other header files</title>
+<screen>
+
+ //-----------------------------------------------------------------------
+ // QT Headers
+ #include &lt;qtlabel.h&gt;
+
+ //-----------------------------------------------------------------------
+ // KDE Headers
+ #include &lt;kcombobox.h&gt;
+
+ //-----------------------------------------------------------------------
+ // Project Headers
+ #include "mymoney/mymoneyfile.h"
+
+
+</screen>
+</example>
+</listitem>
+
+<listitem>
+<para>
+Each class should have a kdoc compatable comment header to describe the
+class and it's function within kmymoney2.
+</para>
+</listitem>
+
+<listitem>
+<para>
+Classes shall begin their declaration as such:
+</para>
+
+<example>
+<title>Class declaration</title>
+<screen>
+
+ class KSomethingDlg : public KBaseClass {
+
+
+</screen>
+</example>
+
+<para>
+with an appopriate access declared.
+</para>
+</listitem>
+
+<listitem>
+<para>
+Access modifiers should be left flushed in the class declaration with all
+attributes and methods indented by one tab. The access methods will be in
+order starting with private. The access identifier should exist even if no
+attributes or methods exist. Only one identifier can exist of the same
+type.
+</para>
+
+<example>
+<title>Complete class declaration</title>
+<screen>
+
+ class KSomethingDlg : public KBaseClass {
+ private:
+ QString m_szSomeString;
+ void useString(void);
+
+ private slots:
+
+ protected:
+
+ protected slots:
+
+ public:
+ KSomethingDlg();
+
+ public slots:
+
+ signals:
+ };
+
+
+</screen>
+</example>
+</listitem>
+
+<listitem>
+<para>
+All slot methods should begin with slot and signal methods should start with
+signal. e.g
+</para>
+
+<example>
+<title>Declaration of slot and signal methods</title>
+<screen>
+
+ signalFoundTransaction();
+ slotFoundTransaction();
+
+
+</screen>
+</example>
+</listitem>
+
+<listitem>
+<para>
+<anchor id="attribute-names"/>
+Attribute names should begin with the m_ prefix to indicate that they are
+member variables. The variable name should begin with a descriptive
+identifier such as qcomboboxMethod. Explicit hungarian notation is also
+fine. Examples of valid variable names can be found below:
+</para>
+
+<example>
+<title>Attribute naming convention</title>
+<screen>
+
+ QComboBox m_qcomboboxMethod;
+ int m_intCounter;
+ int m_nCounter;
+
+
+</screen>
+</example>
+</listitem>
+
+<listitem>
+<para>
+Method names should specify a return and argument(s) unless used in a slot
+or signal where the argument list can be left blank if necessary. The
+method should start with a lower case letter with each subsequent word
+having an upper case start letter.
+</para>
+</listitem>
+</itemizedlist>
+
+</sect1>
+
+<!-- SECTION =================================================== -->
+<sect1 id="source-files">
+<title>Source Files</title>
+<para>
+The following rules apply to all source code files.
+</para>
+
+<itemizedlist>
+<listitem>
+<para>
+C++ source files shall end with the extension .cpp not .cc or .cxx
+</para>
+</listitem>
+
+<listitem>
+<para>
+As with header files these should start with a header block similar to the
+one generated by KDevelop.
+</para>
+</listitem>
+
+<listitem>
+<para>
+Include files shall be included in the same format as for header file e.g
+</para>
+
+<example>
+<title>Including header files in source files</title>
+<screen>
+ //-----------------------------------------------------------------------
+ // QT Headers
+ #include &lt;qtlabel.h&gt;
+
+ //-----------------------------------------------------------------------
+ // KDE Headers
+ #include &lt;kcombobox.h&gt;
+
+ //-----------------------------------------------------------------------
+ // Project Headers
+ #include "mymoney/mymoneyfile.h"
+ #include "ksomethingdlg.h"
+
+
+</screen>
+</example>
+</listitem>
+
+<listitem>
+<para>
+Methods should be implemented as such:
+</para>
+
+<example>
+<title>Method implementation</title>
+<screen>
+
+ void KSomethingDlg::useString(void)
+ {
+ .. function body
+ }
+
+
+</screen>
+</example>
+
+<para>
+with the function body indented by one tab (equals two spaces).
+</para>
+</listitem>
+
+<listitem>
+<para>
+Flow control statements should preferably follow the Kernighan &amp; Ritchie
+style as such:
+</para>
+
+<example>
+<title>Kernighan &amp; Ritchie flow control style</title>
+<screen>
+
+ while (something_is_true) {
+ operate on something;
+ }
+
+
+</screen>
+</example>
+
+<para>
+although the following Allman style is acceptable:
+</para>
+
+<example>
+<title>Allman flow control style</title>
+<screen>
+
+ while (something_is_true)
+ {
+ operate on something;
+ }
+
+
+</screen>
+</example>
+
+<para>
+It is also acceptable for one line body statements to omit the curly braces
+as such:
+</para>
+
+<example>
+<title>One line body flow control style</title>
+<screen>
+
+ while (something_is_true)
+ operate;
+
+
+</screen>
+</example>
+</listitem>
+
+<listitem>
+<para>
+Local variables should not be prefixed by the m_ member prefix and should
+start with a prefix as discussed for the
+<link linkend="attribute-names">header file</link>.
+For example:
+</para>
+
+<example>
+<title>Local variable nameing convention</title>
+<screen>
+
+ QString qstringTemp;
+ char *pszTemp;
+
+
+</screen>
+</example>
+</listitem>
+
+<listitem>
+<para>
+Each method should have a comment block preceeding it in a suitable format
+for other developers to see how the method works and what types of return
+and arguments it expects. It does not have to be kdoc compatable because
+kdoc only parses the header files. All kdoc comment blocks should be in the
+header files.
+</para>
+</listitem>
+</itemizedlist>
+</sect1>
+</chapter>
diff --git a/developer-doc/phb/cvs-examples.docbook b/developer-doc/phb/cvs-examples.docbook
new file mode 100644
index 0000000..ab34aee
--- /dev/null
+++ b/developer-doc/phb/cvs-examples.docbook
@@ -0,0 +1,692 @@
+<appendix id="cvs-examples">
+<title>CVS examples</title>
+<para>
+It is not the intention of this document to give a complete introduction to
+&cvs;. Nevertheless, a few examples should give a quick overview on the basic
+operations to be performed by the developer.
+</para>
+
+<para>
+It is assumed, that the developer is registered with the &app; project and
+has read/write access to the repository. Also, it is assumed, that the
+necessary environment variables are setup, so that &cvs; knows how to access
+the repository. Details about the settings can be found on the <ulink
+url="http://www.sourceforge.net/">SourceForge.net</ulink> web-site.
+</para>
+
+<para>
+Throughout the next sections, the examples given use the &cvs; command line
+interface. The options are abbreviated. The operations described here are also
+accessible through various GUI clients available for &cvs;. Also, I usually
+use the -q (quiet) option to suppress some messages issued by &cvs;. If you
+omit the -q option, the output differs from the one shown here, even though
+the result of the operation is the same.
+</para>
+
+<section id="cvs-checkout">
+<title>Checking out from the repository</title>
+<para>
+The very first operation is to fill the sandbox. This is done using the
+<command>checkout</command> operation. The first time the repository is
+checked-out, it's location must be specified. This is done using the
+<command>-d</command> option. In the example below,
+you must replace <emphasis>username</emphasis> with your real username at
+SourcForge.net.
+
+</para>
+
+<example>
+<title>Filling the sandbox for the first time</title>
+<screen>
+
+ <prompt>thb:~&gt; </prompt><userinput>cvs -d &cvs-user;@&cvs-host;:&cvs-dir; co &cvs-module;</userinput>
+
+
+</screen>
+<para>
+During the checkout process, &cvs; lists all filenames on the users screen
+and stores information about the repository's
+location and all the files checked out in the sandbox. Therefor, you do not
+need to specify the repository location during following &cvs; operations
+anymore.
+</para>
+
+<para>
+For the &app; project, a directory named <command>kmymoney2</command> is
+created in your current working directory.
+</para>
+</example>
+
+<para>
+The above example fills the sandbox with the HEAD revision of all files.
+This stage is sometimes referred to as the <quote>latest-and-greatest</quote>
+and is the latest development stage.
+</para>
+
+<note>
+<para>
+If you plan to keep two or more branches of the project on your machine,
+please see the chapter <emphasis>
+<link linkend="multiple-branches">Keeping different
+branches on the same machine</link></emphasis> for details.
+</para>
+</note>
+
+<para>
+If for some reason, you need to checkout a version of the project that is
+different from the development stage (e.g. you want to fix a bug in a
+stable version), you can fill an empty sandbox by supplying the version-tag
+as parameter to the checkout command.
+</para>
+
+<example>
+<title>Filling the sandbox for the first time with a specific version</title>
+<screen>
+
+ <prompt>thb:~&gt; </prompt><userinput>cvs -d &cvs-user;@&cvs-host;:&cvs-dir; co -r <emphasis>version-tag</emphasis> &cvs-module;</userinput>
+
+
+</screen>
+<para>
+This will store the version labelled with the tag
+<emphasis>version-tag</emphasis> in your sandbox. In case
+<emphasis>version-tag</emphasis> is a branch-tag, you are able to modify
+the files and check-in changes later on. In case,
+<emphasis>version-tag</emphasis> is a standard tag, checkin operations will
+be rejected by &cvs;.
+</para>
+
+<para>
+As in the previous example, the directory kmymoney2 is created as the
+sandbox.
+</para>
+</example>
+</section>
+
+<section id="cvs-checkin">
+<title>Checking in to the repository</title>
+<para>
+Once the sandbox is filled, changes to the project will be
+applied by the developer. As soon as the developer is confident with the
+changes, he is about to promote these changes to the other developers. He
+does that by checking the changes back into the repository.
+</para>
+
+<para>
+Checking changes back into the repository should start by performing an
+update procedure as described in <link linkend="cvs-update">the next
+section</link>. This may seem strange, but updateing your sandbox will
+transfer changes performed by other developers in the meantime to your
+sandbox. It is good practice to re-compile the project if you notice that
+updateing the sandbox changes it's contents. This assures that the project
+is still compilable when you check-in your changes.
+</para>
+
+<para>
+The next step is to identify the changes you really want to promote. This
+can be performed by the <command>diff</command> operation supported by
+&cvs;.
+</para>
+
+<example>
+<title>Promote changes to the repository</title>
+<para>
+For the following example, I assume a single file that has been changed in
+the sandbox (~/kmymoney2/kmymoney2/knewbankdlg.cpp) and that the current
+directory is ~/kmymoney2/kmymoney2. Also, it is assumed, that the file
+README has been updated by another person in the repository. Since the
+README file has no influence on the compile process, we omit recompiling in
+this example.
+</para>
+
+<para>
+The part of the original file that has been changed is shown here to
+understand the output of the <userinput>cvs diff</userinput>
+command shown below. The beginning of
+the file is not included here as it is not changed.
+</para>
+
+<programlisting role="C++">
+
+void KNewBankDlg::okClicked()
+{
+ if (nameEdit->text().isEmpty()) {
+ KMessageBox::information(this, i18n("The institution name field is empty. Please enter the name."), i18n("Adding New Institution"));
+ nameEdit->setFocus();
+ return;
+ }
+
+ m_name = nameEdit->text();
+ m_city = cityEdit->text();
+ m_street = streetEdit->text();
+ m_postcode = postcodeEdit->text();
+ m_telephone = telephoneEdit->text();
+ m_managerName = managerEdit->text();
+ m_sortCode = sortCodeEdit->text();
+ accept();
+}
+
+
+</programlisting>
+
+<para>
+The changed version of the method is included here.
+</para>
+
+<screen>
+
+void KNewBankDlg::okClicked()
+{
+ if (nameEdit->text().isEmpty()) {
+ KMessageBox::information(this, i18n("The institution name field is empty. Please enter the name."), i18n("Adding New Institution"));
+ nameEdit->setFocus();
+
+ } else {
+ m_name = nameEdit->text();
+ m_city = cityEdit->text();
+ m_street = streetEdit->text();
+ m_postcode = postcodeEdit->text();
+ m_telephone = telephoneEdit->text();
+ m_managerName = managerEdit->text();
+ m_sortCode = sortCodeEdit->text();
+ accept();
+ }
+}
+
+
+</screen>
+
+<para>
+Now as the file has been changed, the changes should be promoted to the
+repository. As explained above, the process starts with checking for
+changes made by other people.
+</para>
+
+<screen>
+
+ <prompt>thb:~&gt; </prompt><userinput>cvs -q upd</userinput>
+ U README
+ M knewbankdlg.cpp
+ <prompt>thb:~&gt; </prompt>
+
+
+</screen>
+
+<para>
+The above shown output has the following meaning:
+the file <command>README</command> is udpated (U) from the repository
+to the sandbox because
+it has been changed by someone else in the meantime. The contents of the file
+in the sandbox will be replaced by the contents of the file in the
+repository, because it has not been altered in the sandbox.
+The file <command>knewbankdlg.cpp</command> has been modified (M) in the
+sandbox and needs to be returned to the repository.
+</para>
+
+<para>
+<anchor id="cvs-source-changes"/>
+As the next step, one should check what has been changed in the file
+<command>knewbankdlg.cpp</command>. This is done using the following command:
+</para>
+
+<screen>
+
+ <prompt>thb:~&gt; </prompt><userinput>cvs -q diff knewbankdlg.cpp</userinput>
+ 74,75d73
+ &lt; return;
+ &lt; }
+ 77,84c75,84
+ &lt; m_name = nameEdit->text();
+ &lt; m_city = cityEdit->text();
+ &lt; m_street = streetEdit->text();
+ &lt; m_postcode = postcodeEdit->text();
+ &lt; m_telephone = telephoneEdit->text();
+ &lt; m_managerName = managerEdit->text();
+ &lt; m_sortCode = sortCodeEdit->text();
+ &lt; accept();
+ ---
+ > } else {
+ > m_name = nameEdit->text();
+ > m_city = cityEdit->text();
+ > m_street = streetEdit->text();
+ > m_postcode = postcodeEdit->text();
+ > m_telephone = telephoneEdit->text();
+ > m_managerName = managerEdit->text();
+ > m_sortCode = sortCodeEdit->text();
+ > accept();
+ > }
+ <prompt>thb:~&gt; </prompt>
+
+
+</screen>
+</example>
+
+<para>
+The output shows the changes between the current and the original revision
+of the file. If this is what needs to be changed then the next step can be
+started, which is checking the changes back into the repository.
+</para>
+<screen>
+
+ <prompt>thb:~&gt; </prompt><userinput>cvs -q ci -m "Avoid return in the middle of a function" knewbankdlg.cpp</userinput>
+ Checking in knewbankdlg.cpp;
+ kmymoney2/kmymoney2/knewbankdlg.cpp,v &lt;-- knewbankdlg.cpp
+ new revision: 1.10; previous revision: 1.9
+ done
+ <prompt>thb:~&gt; </prompt>
+
+
+</screen>
+
+
+<note>
+<para>
+If the option -m and the descriptive text is omitted on the command line,
+&cvs; starts an editor where the developer has to enter a descriptive text
+about the changes and save that file. Performing checkin operations that
+way is meaningful, if the description is longer or covers more than one file.
+</para>
+</note>
+
+<para>
+At this point, the changes are stored in the repository. An automatic mail
+is generated and send to the kmymoney2-developer mailing list
+<email>kmymoney2-developer@lists.sourceforge.net</email>. This mail
+informs all other developers about your changes and is an indication for
+them to <link linkend="cvs-update">update</link> their sandboxes. The
+contents of the mail looks something like this:
+</para>
+
+<screen>
+
+ From: Thomas Baumgart &lt;ipwizard@users.sourceforge.net>
+ To: kmymoney2-developer@lists.sourceforge.net
+ Date: Sat, 24 Nov 2001 12:23:00 -0800
+ Subject: [Kmymoney2-developer] CVS update:
+
+ Update of /cvsroot/kmymoney2/kmymoney2/kmymoney2
+ In directory usw-pr-cvs1:/tmp/cvs-serv6662
+
+ Modified Files:
+ knewbankdlg.cpp
+ Log Message:
+ Avoid return in the middle of a function
+ _______________________________________________
+ Kmymoney2-developer mailing list
+ Kmymoney2-developer@lists.sourceforge.net
+ https://lists.sourceforge.net/lists/listinfo/kmymoney2-developer
+
+
+
+</screen>
+
+<para>
+While you checkin your changes, you should maintain the file
+<command>kmymoney2/ChangeLog</command>. You could probably use the same
+comments that you use for checkin in your changes or a more general note
+for many changes. That depends on your changes. Once all your changes are
+checked in, you also checkin <command>kmymoney2/ChangeLog</command>.
+</para>
+</section>
+
+<section id="cvs-update">
+<title>Updateing changes performed by other developers</title>
+<para>
+In case you noticed that other developers changed the repository -
+fortunately you will be noticed by a mail to the developer mailing list if
+that is the case - you should get those changes to your sandbox. This is
+accomplished using the <command>update</command> command of &cvs;.
+</para>
+
+<example>
+<title>Updating the sandbox</title>
+<para>
+To update the local sandbox the following command is used. As most other
+&cvs; commands, it operates recursively from the current working directory in
+the sandbox.
+</para>
+
+<screen>
+
+ <prompt>thb:~&gt; </prompt><userinput>cvs -q upd</userinput>
+ U README
+ M knewbankdlg.cpp
+ <prompt>thb:~&gt; </prompt>
+
+
+</screen>
+
+<para>
+The above shown output has the following meaning:
+the file <command>README</command> is udpated (U) from the repository to
+the sandbox because
+it has been changed by someone else in the meantime. The contents of the
+file
+in the sandbox will be replaced by the contents of the file in the
+repository, because it has not been altered in the sandbox.
+The file <command>knewbankdlg.cpp</command> has been modified (M) in the
+sandbox and needs to be returned to the repository.
+</para>
+
+<para>
+If you run the same command again, the output will change, as the file
+<command>README</command> is now up-to-date.
+</para>
+
+<screen>
+
+ <prompt>thb:~&gt; </prompt><userinput>cvs -q upd</userinput>
+ M knewbankdlg.cpp
+ <prompt>thb:~&gt; </prompt>
+
+
+</screen>
+
+
+</example>
+
+<para>
+Sometimes it is useful to get an overview of what the status of certain
+files in the repository is without modifying the sandbox (updating). This
+can be accomplished by using the -n option to the update command.
+</para>
+
+<example>
+<title>Checking the status of files in the sandbox</title>
+<screen>
+
+ <prompt>thb:~&gt; </prompt><userinput>cvs -nq upd</userinput>
+ U README
+ M knewbankdlg.cpp
+ <prompt>thb:~&gt; </prompt>
+
+
+</screen>
+
+<para>
+The status of the files is the same as explained above, but the file
+<command>README</command>
+will <emphasis>not</emphasis> be updated. It remains unchanged in the
+sandbox. If you run this command again, the output remains.
+</para>
+</example>
+
+</section>
+
+<section id="dismissing-changes">
+<title>Dismissing changes</title>
+<para>
+It happens, that a developer tries to modify the source to gain a certain
+functionality and then wants to discard the changes. This is no problem at
+all with &cvs;. All the developer needs to do is to remove the file in the
+sandbox and run the <command>update</command> command of &cvs;. This will
+transfer the original version of the file in question to the sandbox.
+</para>
+
+<para>
+Let's assume, that the changes made to <command>knewbankdlg.cpp</command>
+as outlined in <link linkend="cvs-source-changes">a previous chapter</link> should
+be dismissed. The following commands perform this operation:
+</para>
+
+<example>
+<title>Reverting changes made to the sandbox</title>
+<screen>
+
+ <prompt>thb:~&gt; </prompt><userinput>cvs -q upd</userinput>
+ M knewbankdlg.cpp
+ <prompt>thb:~&gt; </prompt><userinput>rm knewbankdlg.cpp</userinput>
+ <prompt>thb:~&gt; </prompt><userinput>cvs -q upd</userinput>
+ U knewbankdlg.cpp
+ <prompt>thb:~&gt; </prompt><userinput>cvs -q upd</userinput>
+ <prompt>thb:~&gt; </prompt>
+
+
+</screen>
+</example>
+
+</section>
+
+<section id="multiple-branches">
+<title>Keeping different branches on the same machine</title>
+<para>
+Whenever a configuration manager of the project decides to create a new
+stable release, the developers face a problem: they are not allowed to add
+new features to the software, only bug-fixes can be checked into the
+repository. Until the configuration manager opens the sources for further
+development, the developers are stuck.
+</para>
+
+<para>
+To avoid this dilemma, the configuration manager creates a branch off the
+main development line when he creates the new stable release. Fixes will be
+made to the release-branch, new developments will be made to the main
+branch. This eliminates two problems: the configuration manager does not
+have to lock the current stage and the developers can continue with the
+implementation of features planned for the next release. Nevertheless, the
+stable version can be changed (fixes can be applied) and those fixes can be
+transferred to the main development branch so that they do not show up in
+future releases of the software.
+</para>
+
+<para>
+Since in our project the developers will work on both, bug fixes and new
+development at the same time, it is convenient to have two sandboxes on the
+development machine. For the following examples, I have two subdirectories
+in my $HOME for the project. One is for the release and the other for the
+develepment branch. I name them <command>stable</command> for the release
+branch and
+<command>devel</command> for the development branch.
+</para>
+
+<para><command>The development branch</command></para>
+<para>
+The development branch is the same as you use it today. Just move it from
+it's current location to $HOME/devel. I kept it directly in my $HOME
+directory so I did it as follows:
+
+<example>
+<title>Keeping stable and development branch on one machine</title>
+<screen>
+
+ <prompt>thb:~&gt; </prompt><userinput>md devel</userinput>
+ <prompt>thb:~&gt; </prompt><userinput>md stable</userinput>
+ <prompt>thb:~&gt; </prompt><userinput>mv kmymoney2 devel</userinput>
+ <prompt>thb:~&gt; </prompt>
+
+
+</screen>
+</example>
+Now the development sources are found in ~/devel/kmymoney2/. It is
+important to move all the CVS directories as well. If you start from
+scratch, then you just follow the instructions on how to checkout the
+project and do that in the <command>devel</command> subdirectory. See the
+chapter <emphasis>
+<link linkend="cvs-checkout">Checking out from the repository</link>
+</emphasis> for an example.
+</para>
+
+<para><command>The release branch</command></para>
+<para>
+As soon as a release branch has been created by the configuration manager,
+you should get it to the stable directory. You do this by checking it out
+with the tag that has been assigned. The conventions have been defined in
+the chapter about <link linkend="version-mgmt">Version management</link>.
+For this example, I assume that a release branch for version 0.4 exists in
+the repository.
+
+<footnote>
+<para>Guess when I wrote this chapter ;-)</para>
+</footnote>
+</para>
+
+<example>
+<title>Checking out the stable branch for the first time</title>
+<screen>
+
+ <prompt>thb:~&gt; </prompt><userinput>cd stable</userinput>
+ <prompt>thb:~/stable&gt; </prompt><userinput>cvs -d &cvs-user;@&cvs-host;:&cvs-dir; \ <footnote>
+<para>
+The back-slash is inserted here to break the line for readability. For real usage, the command has to be entered on a single line.
+</para>
+</footnote>
+ co -r <emphasis>rel-0-4-branch</emphasis> &cvs-module;</userinput>
+ <prompt>thb:~/stable&gt; </prompt>
+
+
+</screen>
+</example>
+
+<para>
+At this point it is important to use the <emphasis>branch-tag</emphasis> to
+be able to modifiy the files and check them back into the repository. If
+you are in the subdirectory containing the release-branch and you perform a
+<command>cvs update</command>, you will only get those changes, that were
+made on the branch. Also, changes are checked back into the release branch
+and do <emphasis>NOT</emphasis> show up on the development branch.
+</para>
+
+<note>
+<para>
+If you want to keep more than one stable branch on your development
+machine, you can add the version number to the stable directory (e.g.
+stable-0.4, etc.)
+</para>
+</note>
+</section>
+
+<section id="promoting-changes">
+<title>Promoting bug-fixes to the main branch</title>
+<para>
+Usually, changes made to the release-branch fix a problem. In many cases the
+problem still exists in the development branch. Therefor, it is
+necessary to promote the changes made on the release branch back to the
+development branch.
+</para>
+
+<para>
+In most cases, it is very easy to promote the changes. The developer must
+be very careful though, as the fix might not be applicable in it's form to
+the development branch anymore as things might have changed drastically due
+to new features.
+<footnote>
+<para>
+This is one of the reasons, why I suggest to apply the fix to the release
+branch and promote it to the developer branch, as the fix as it works on
+the release branch might
+break things and broken software is definitly something we do not want
+ to happen on the stable branch.
+</para>
+</footnote>
+</para>
+
+<para>
+In this example, I assume changes were made to the single file README.
+<footnote>
+<para>
+Fortunately, the error found was a documentation problem ;-)
+</para>
+</footnote>
+
+A complex fix
+could cover many files. The procedure described in the following is then
+required for each of them seperately. Further on, I assume that the change
+has been checked in and that the revision was 1.14.2.1 before the fix and
+is now 1.14.2.2.
+</para>
+
+<example>
+<title>Promoting a change from the release to the development branch</title>
+<screen>
+
+ <prompt>thb:~&gt; </prompt><userinput>cd devel/kmymoney2</userinput>
+ <prompt>thb:~/devel/kmymoney2&gt; </prompt><userinput>cvs -q upd -j 1.14.2.1 -j 1.14.2.2 README</userinput>
+ <prompt>thb:~/devel/kmymoney2&gt; </prompt><userinput>vi README</userinput>
+ <prompt>thb:~/devel/kmymoney2&gt; </prompt><userinput>cvs ci -m "Included fix #493920" README</userinput>
+ <prompt>thb:~/devel/kmymoney2&gt; </prompt>
+
+
+</screen>
+</example>
+
+<para>
+First, I go into the devel directory. Then I promote the changes to the
+README file in the development branch from the repository, verify the
+changes made (and possibly correct them) and checkin the changes to the
+development branch. That's it!
+<footnote>
+<para>
+ Of course, a fix to a source code file would
+be followed by a visual inspection (that's where <command>vi</command> or
+<command>kdevelop</command> come into play) and a compile run with further
+testing before the change is checked back into the repository.
+</para>
+</footnote>
+
+</para>
+
+<note>
+<para>
+It's important to perform this procedure for every file affected by the fix
+seperatly, as the revision numbers usually differ significantly between
+the files. Also, I suggest to fix each problem seperately. This reduces
+further problems while promoting the changes back to the development
+branch (e.g. one can leave out a fix completely if it does not apply at all
+to the development branch).
+</para>
+<para>
+If the fix is very simple, it can certainly be promoted manually to the
+development directory tree by merely re-typing it.
+</para>
+</note>
+</section>
+
+<section id="create-stable-example">
+<title>Creating a new stable release</title>
+<para>
+The procedure that needs to be followed is defined in a <link
+linkend="create-stable-procedure">previous chapter</link>.
+On the first glimpse, it seems rather complecated but it is not.
+</para>
+
+<para>
+If you follow the procedure as it has been defined, you will understand the
+commands in our example. I assume to have a current unstable version of
+0.3.x which will result in the stable version 0.4 and the next development
+version of 0.5.x. Further on, I assume, that I already differentiate
+between development and release directories. Also, the version number
+maintained with KDevelop is setup correctly (0.4.pre1) and all files are
+checked into the repository.
+</para>
+
+<example>
+<title>Creating a new stable branch</title>
+
+<screen>
+
+ <prompt>thb:~&gt; </prompt><userinput>cd devel/kmymoney2</userinput>
+ <prompt>thb:~/devel/kmymoney2&gt; </prompt><userinput>cvs tag rel-0-4-pre1</userinput>
+ <prompt>thb:~/devel/kmymoney2&gt; </prompt><userinput>cvs tag -b rel-0-4-branch</userinput>
+
+ Now modify the version number in KDevelop to 0.5.0, regenerate the files and
+ checkin the changes as usual.
+
+ <prompt>thb:~/devel/kmymoney2&gt; </prompt><userinput>cvs tag rel-0-5-base</userinput>
+ <prompt>thb:~/devel/kmymoney2&gt; </prompt>
+
+
+</screen>
+</example>
+
+<tip>
+<para>
+Because I know, that I will need the branch sooner or later to fix some
+problems, I continue to check it out into the stable directory. See <link
+linkend="multiple-branches">Keeping different branches on the same
+machine</link> for details.
+</para>
+</tip>
+
+</section>
+</appendix>
+
diff --git a/developer-doc/phb/dialogs.docbook b/developer-doc/phb/dialogs.docbook
new file mode 100644
index 0000000..66f8d16
--- /dev/null
+++ b/developer-doc/phb/dialogs.docbook
@@ -0,0 +1,130 @@
+ <chapter id="dialogs">
+ <title>Creating dialog boxes in &kappname;</title>
+ <para/>
+ <para>This section is a developer's guide explaining the peculiarities of dialog creation in &kappname;. A basic understanding of Qt GUI programming is assumed, as is a knowledge of &kappname; coding standards as laid out in the Project Handbook.</para>
+ <para/>
+ <sect1 id="dialogs-language">
+ <title>Language</title>
+ <para/>
+ <para>The default language of &kappname; is American English, but don't let that put you off! All contributions will be welcome, and as long as you have a basic knowledge of the language, the members of the &kappname; developers list will be happy to help you polish it up.</para>
+ <para/>
+ </sect1>
+ <sect1 id="dialogs-naming">
+ <title>Naming the dialog</title>
+ <para/>
+ <para>First step is to choose a meaningful name for your dialog (and preferably one that's not already in use! - see the kmymoney2/dialogs source directory). In accordance with &kappname; coding conventions, the name should consist of 2 or 3 (or more) 'words', strung together without spaces. To keep names to a manageable length, these 'words' may be abbreviated, e.g. 'sched' for 'schedule'. Each 'word' should be spelt with an initial upper-case letter. Also, the names of dialogs are always preceded by a letter 'K', thus e.g. KEditSchedTrans. This name will be indicated in the rest of this chapter by &lt;KN&gt;. There are nevertheless occasions where all lower case letters are appropriate, specifically source file names; this will be indicated as &lt;kn&gt;.</para>
+ <para/>
+ </sect1>
+ <sect1 id="dialogs-designing">
+ <title>Designing the dialog</title>
+ <para/>
+ <para>The dialog screen should be built using Qt Designer. This section assumes that you are using version 3.x of Qt. Version 4 is, at present, an unknown quantity.</para>
+ <para/>
+ <para>Open Designer without specifying a project, and select Dialog from the New File/Project tab. Start by changing the form name; this should be set to '&lt;KN&gt;DlgDecl'.</para>
+ <para/>
+ <para>Now add your widgets to the form, not forgetting to include a Help button. Remember that users will have many different hardware and screen combinations, and will need to be able to resize windows, so make full use of the various layout and spacer options of Designer. A lot of tutorials can be found on the web to help guide you on this; try your favourite search engine.</para>
+ <para/>
+ <sect2 id="dialogs-naming-widgets">
+ <title>Naming widgets</title>
+ <para/>
+ <para>Fixed widgets, e.g. text labels, can often use the default names assigned by Designer. Other widgets on your form should be given names which are meaningful in an application context. This is particularly important for those widgets which are to be referenced in code. As per the application programming standards, these names should be prefixed with 'm_' to indicate them as member variables of the dialog.</para>
+ <para/>
+ </sect2>
+ <sect2 id="dialogs-i18n-considerations">
+ <title>i18n considerations</title>
+ <para/>
+ <para>Designer contains an option to generate shortcut (accelerator) keys for various widgets (buttons, menu items) by including an ampersand ('&amp;') before the shortcut letter. This should be used for the more common items, since many users prefer to use keyboard input rather than using the mouse. However, this does have the unfortunate side effect of automatically generating an 'accel' property for the widget, referencing a letter which may not be appropriate when the caption is translated to another language. Use the properties menu, therefore, to remove this value, or see below.</para>
+ <para/>
+ <para>Fixed text fields and labels in the form do not require any special consideration. Qt Designer and the project's build environment will take care of wrapping the strings into an i18n construct for presentation to translators.</para>
+ <para/>
+ </sect2>
+ <sect2 id="dialogs-saving-ui">
+ <title>Saving the UI</title>
+ <para/>
+ <para>When complete, save the form using the Designer default name (&lt;kn&gt;dlgdecl.ui) in the dialogs source code folder (kmymoney2/dialogs).</para>
+ <para/>
+ </sect2>
+ </sect1>
+ <sect1 id="dialogs-writing-code">
+ <title>Writing code</title>
+ <para/>
+ <para>Your code to process form actions should be included in source files named &lt;kn&gt;dlg.h/.cpp, in the same folder as the .ui file. You can view these for many examples of how to code. Some requirements are:</para>
+ <para/>
+ <sect2 id="dialogs-header-file">
+ <title>Header (.h) file</title>
+ <para/>
+ <para>This should start with definitions similar to the following</para>
+ <para/>
+ <programlisting>
+ #ifndef &lt;KN&gt;DLG_H
+ #define &lt;KN&gt;DLG_H</programlisting>
+ <para/>
+ <programlisting>
+ #include "../dialogs/&lt;kn&gt;dlgdecl.h"</programlisting>
+ <para/>
+ <programlisting>
+ class &lt;KN&gt;Dlg : public &lt;KN&gt;DlgDecl {
+ Q_OBJECT
+ public:
+ &lt;KN&gt;Dlg(QWidget *parent = 0, const char *name = 0);
+ ~&lt;KN&gt;Dlg();
+ </programlisting>
+ <para/>
+ <para>The first two lines are the standard include stoppers, to avoid multiple inclusion of the class data.</para>
+ <para/>
+ <para>The include file will have been generated by the Qt UIC (User Interface Compiler) from the .ui file for the dialog, under control of the make process.</para>
+ <para/>
+ <para>The Q_OBJECT macro (written without any punctuation) will cause the Qt MOC (Meta Object Compiler) to generate additional object code and files which are necessary to support the signal/slot functionality (among other things).</para>
+ <para/>
+ <para>The class declaration must also include a </para>
+ <para/>
+ <programlisting> public slots:</programlisting>
+ <para/>
+ <para>and</para>
+ <para/>
+ <programlisting> signals:</programlisting>
+ <para/>
+
+ <para>sections if you plan to use the signal/slot mechanism. See the Qt documentation about signals and slots. An example would be slotHelp() which will be connected to the clicked() signal of the help button of your dialog in the constructor of your dialog.</para>
+ <para/>
+ <para>Terminate the file with</para>
+ <para/>
+ <programlisting> #endif</programlisting>
+ <para/>
+ <para>to close off the include stoppers.</para>
+ <para/>
+ </sect2>
+ <sect2 id="dialogs=code-file">
+ <title>Code (.cpp) file</title>
+ <para/>
+ <para>First, don't forget to have #include directives for Qt headers for any widgets you are going to reference.</para>
+ <para/>
+ <para>In the constructor function, connect all signals to their appropriate slots using the Qt connect() call.</para>
+ <para/>
+ <para>Then the easy bit; write your code.</para>
+ <para/>
+ <para>Finally, terminate the source file with the following</para>
+ <para/>
+ <programlisting> #include "&lt;KN&gt;dlg.moc"</programlisting>
+ <para/>
+ <para>This is one of the files generated by the Qt MOC (Meta Object Compiler) during the make process; if you finish up with 'vtable' errors, it's probably because you forgot to include this.</para>
+ <para/>
+ </sect2>
+ </sect1>
+ <sect1 id="dialogs-updating-makefile">
+ <title>Updating the Makefile</title>
+ <para/>
+ <para>You will need to edit file Makefile.am in the dialogs source folder before building &kappname;. Note that due to the abstruse rules of make, the lists of files should consist of a single logical line, so be careful regarding any editor options which may cause automatic insertion of line breaks. You can however use a continuation character of backslash to spread the list over multiple physical lines. There must be no character following the continuation character, not even a blank.</para>
+ <para/>
+ <para>- Add &lt;kn&gt;dlgdecl.ui and &lt;kn&gt;dlg.cpp to the libdialogs_a_SOURCES line</para>
+ <para>- Add &lt;kn&gt;dlgdecl.ui to EXTRA_DIST</para>
+ <para>- Add &lt;kn&gt;dlgdecl.cpp and &lt;kn&gt;dlgdecl.h to DISTCLEANFILES</para>
+ <para>- Add &lt;kn&gt;dlg.h to NOINST_HEADERS</para>
+ <para/>
+ <para>Save the file, and you are ready to build &kappname;. For the first build after updating Makefile.am you should re-run 'make -f Makefile.dist', reconfigure and make. Otherwise, some make rules might not be present and compiling fails.</para>
+ <para/>
+ <para>That's all, simple wasn't it.</para>
+ <para/>
+ </sect1>
+ </chapter>
+
diff --git a/developer-doc/phb/documentation.docbook b/developer-doc/phb/documentation.docbook
new file mode 100644
index 0000000..f2ee6f2
--- /dev/null
+++ b/developer-doc/phb/documentation.docbook
@@ -0,0 +1,101 @@
+<chapter id="documentation">
+<chapterinfo>
+<authorgroup>
+<author>
+ <firstname>Tom</firstname>
+ <surname>Browder</surname>
+ <affiliation>
+ <address><email>tom.browder@gmail.com</email></address>
+ </affiliation>
+</author>
+</authorgroup>
+</chapterinfo>
+
+<title>Documentation</title>
+<para>
+Code documentation is discussed in the section "coding." This section discusses developer and user documentation and generating html and pdf versions of same. Note that all non-source-code documentation, with two exceptions, must be written in docbook form.
+<note>
+The two exceptions are
+<filename>./kmymoney2/html/home.html</filename>
+and
+<filename>./kmymoney2/html/whats_new.html</filename>
+which are used on &kappname;'s internal home page when running the application.
+</note>
+</para>
+
+<!-- =============================================== -->
+<sect1 id="documentation-general">
+<title>General</title>
+<para>In general, all documentation for &kappname; should follow guidelines for the KDE project.
+In addition to the KDE guidelines, there are &kappname; guidelines (which take precedence if there are conflicts).
+See the following KDE resources:
+</para>
+<orderedlist>
+<listitem><ulink url="http://l10n.kde.org/">http://l10n.kde.org/</ulink></listitem>
+<listitem><ulink url="http://l10n.kde.org/docs/markup/index.html">http://l10n.kde.org/docs/markup/index.html</ulink></listitem>
+<listitem><ulink url="http://l10n.kde.org/docs/tools.php">http://l10n.kde.org/docs/tools.php</ulink></listitem>
+<listitem><ulink url="http://people.fruitsalad.org/phil/kde">http://people.fruitsalad.org/phil/kde</ulink></listitem>
+<listitem><ulink url="http://people.fruitsalad.org/phil/kde/pdf-stuff/pdf-instructions.html">http://people.fruitsalad.org/phil/kde/pdf-stuff/pdf-instructions.html</ulink></listitem>
+
+</orderedlist>
+
+<para>XML entities should be used for commonly used terms and phrases. There is a &kappname; list at
+<orderedlist>
+<listitem>./developer-doc/phb/kmymoney-entities.docbook</listitem>
+</orderedlist>
+</para>
+
+
+</sect1>
+
+
+<!-- =============================================== -->
+<sect1 id="documentation-entities">
+<title>Style Guide</title>
+</sect1>
+
+<!-- =============================================== -->
+<sect1 id="documentation-tools">
+<title>Tools</title>
+<orderedlist>
+<listitem>meinproc (used to produce HTML from docbook; part of KDE base)</listitem>
+<listitem>dblatex (used to produce PDF from docbook; add-on from KDE doc team; see resources)</listitem>
+<listitem>??check?? (used to check docbook formatting, etc.; part of KDE base)</listitem>
+<listitem>??check?? (used to check consistency of word and phrase usage; add-on from KDE doc team; see resources)</listitem>
+</orderedlist>
+</sect1>
+
+<!-- =============================================== -->
+<sect1 id="documentation-style-guide">
+<title>Style Guide</title>
+</sect1>
+
+
+
+<!-- =============================================== -->
+<sect1 id="documentation-making-docs">
+<title>Producing Final Documents</title>
+
+<sect2 id="documentation-making-html">
+<title>HTML</title>
+<example>
+<title>Using include stoppers</title>
+<screen>
+
+ (command)
+</screen>
+</example>
+</sect2>
+
+<sect2 id="documentation-making-pdf">
+<title>PDF</title>
+</sect2>
+
+<sect2 id="documentation-making-man">
+<title>Man Pages (UNIX only)</title>
+</sect2>
+
+</sect1>
+
+</chapter>
+
diff --git a/developer-doc/phb/error-mgmt.docbook b/developer-doc/phb/error-mgmt.docbook
new file mode 100644
index 0000000..18c7857
--- /dev/null
+++ b/developer-doc/phb/error-mgmt.docbook
@@ -0,0 +1,330 @@
+<chapter id="problem-mgmt">
+<title>Problem Management</title>
+<para>
+This chapter is a first draft. It contains some ideas that have to be
+validated by the developer community.
+</para>
+
+<sect1 id="problem-reporting">
+<title>Reporting problems</title>
+<para>
+Problems (that covers errors, enhancement request, etc.) concerning the
+&app; project are maintained
+using the SourceForge.net platform. This is the sole location, where
+problems have to be reported. The source for such a problem report can be
+one of the developers or any other user of &app;.
+</para>
+
+<sect2 id="problem-reference">
+<title>Referencing problems</title>
+<para>
+Once added to the database, the problem will be assigned a unique problem
+number. This number must be mentioned whenever the problem is referenced
+(e.g. in the subject of a mail to the developer mailing-list, a checkin
+comment or an entry in the ChangeLog file). To allow searches for the number,
+a specific format has to be used for these references.
+
+The format is
+<command>#<emphasis>assigned-number</emphasis></command>, e.g. #481229.
+</para>
+</sect2>
+</sect1>
+
+
+<sect1 id="problem-attributes">
+<title>Problem attributes</title>
+<para>
+Besides the fixed problem number which is created when the report is filed,
+ each
+problem has a couple of attributes that might change during the
+life-cycle of the problem. They will be described in the following
+chapters.
+</para>
+
+<sect2 id="problem-reported-by">
+<title>Reported By</title>
+<para>
+As the problem number, this field is fix. It represents the SourceForge
+username of the individual who filed the report.
+</para>
+</sect2>
+
+<sect2 id="problem-severity-level">
+<title>Severity level</title>
+<para>
+The SourceForge.net platform allows to assign a severity level to each
+problem. It ranges from 1 to 10. The meaning in our project and the
+consequences are defined as follows:
+
+</para> <para> FIXME: A more detailed description of the prios needs to be given
+
+<orderedlist>
+<listitem>
+<para>
+Lowest priority
+</para>
+</listitem>
+
+<listitem>
+<para>
+TBD!
+</para>
+</listitem>
+
+<listitem>
+<para>
+TBD!
+</para>
+</listitem>
+
+<listitem>
+<para>
+TBD!
+</para>
+</listitem>
+
+<listitem>
+<para>
+Medium priority (default)
+</para>
+</listitem>
+
+<listitem>
+<para>
+TBD!
+</para>
+</listitem>
+
+<listitem>
+<para>
+TBD!
+</para>
+</listitem>
+
+<listitem>
+<para>
+TBD!
+</para>
+</listitem>
+
+<listitem>
+<para>
+TBD!
+</para>
+</listitem>
+
+<listitem>
+<para>
+Highest priority
+</para>
+</listitem>
+
+</orderedlist>
+</para>
+</sect2>
+
+<sect2 id="problem-area">
+<title>Area</title>
+<para>
+TBD!
+</para>
+</sect2>
+
+<sect2 id="problem-assignee">
+<title>Assignee</title>
+<para>
+This field represents the SourceForge.net username of the individual
+working on the problem. Each developer should pick problems he feels
+competent to work on. The possibility to assign another developer to a
+problem should be used only to gather a comment from this developer. This
+should be clearly marked as comment with the report.
+</para>
+
+<note>
+<para>
+The number of unassigned problem reports should be 0 most of the time to
+give clear signal to the world that the developers are working on the
+project!
+</para>
+</note>
+</sect2>
+
+<sect2 id="problem-status">
+<title>Status</title>
+<para>
+Each problem has a status. Right after filing a report, it will be assigned
+the status 'open' automatically by the SourceForge.net platform. Whenever a
+developer is working on the problem, he will have to modifiy the value of
+this field to reflect the current status. The following values are
+available and have the associated meaning:
+</para>
+
+<para>
+
+<table>
+<title>Available problem status values</title>
+<tgroup cols="2">
+<thead>
+<row>
+<entry>Status</entry>
+<entry>Meaning</entry>
+</row>
+</thead>
+
+<tbody>
+<row>
+<entry>open</entry>
+<entry>
+The problem is not yet fixed. A developer might be working on it.
+</entry>
+</row>
+
+<row>
+<entry>closed</entry>
+<entry>
+The problem has been closed. No further action is required.
+</entry>
+</row>
+
+<row>
+<entry>deleted</entry>
+<entry>
+???
+</entry>
+</row>
+
+<row>
+<entry>pending</entry>
+<entry>
+The problem has been modified solved and feedback from the original poster
+is required. Pending entries will turn into closed entries after 14 days.
+</entry>
+</row>
+
+</tbody>
+</tgroup>
+</table>
+
+</para>
+</sect2>
+
+
+<sect2 id="problem-resolution">
+<title>Resolution</title>
+<para>
+The following values are available and have the associated meaning:
+</para>
+<para>
+
+<table>
+<title>Available problem resolution values</title>
+<tgroup cols="2">
+<thead>
+<row>
+<entry>Resolution</entry>
+<entry>Meaning</entry>
+</row>
+</thead>
+
+<tbody>
+<row>
+<entry>Accepted</entry>
+<entry>
+The problem report has been accepted by the developers. Nevertheless, it
+has not yet been duplicated but from the initial report it could well
+be a problem with &app;
+</entry>
+</row>
+
+<row>
+<entry>Duplicated</entry>
+<entry>
+The problem has been duplicated by one of the developers.
+</entry>
+</row>
+
+<row>
+<entry>Fixed</entry>
+<entry>
+The problem has been fixed. The code is available via CVS.
+</entry>
+</row>
+
+<row>
+<entry>Invalid</entry>
+<entry>
+The report is not valid. It's not a problem related to &app;.
+</entry>
+</row>
+
+<row>
+<entry>Later</entry>
+<entry>
+???
+</entry>
+</row>
+
+<row>
+<entry>None</entry>
+<entry>
+???
+</entry>
+</row>
+
+<row>
+<entry>Out of date</entry>
+<entry>
+The report is based on an older version of &app; and has been resolved
+in the meantime in a newer release which is available for download or CVS.
+</entry>
+</row>
+
+<row>
+<entry>Postponed</entry>
+<entry>
+The problem has been acknowledged but will be postponed until later. The
+developer changeing the state to Postponed should leave a comment with the
+entry why it is postponed.
+</entry>
+</row>
+
+<row>
+<entry>Rejected</entry>
+<entry>
+The problem has been rejected by the development team. The developer
+changing the state to Rejected should leave a comment with the entry
+nameing the reasons for rejection.
+</entry>
+</row>
+
+<row>
+<entry>Remind</entry>
+<entry>
+???
+</entry>
+</row>
+
+<row>
+<entry>Wont fix</entry>
+<entry>
+???
+</entry>
+</row>
+
+<row>
+<entry>Works for me</entry>
+<entry>
+The problem cannot be duplicated but seems to be a valid problem. The
+entry needs more investigation.
+</entry>
+</row>
+
+</tbody>
+</tgroup>
+</table>
+
+</para>
+</sect2>
+
+</sect1>
+</chapter>
diff --git a/developer-doc/phb/fdl-licence b/developer-doc/phb/fdl-licence
new file mode 100644
index 0000000..fa8fdef
--- /dev/null
+++ b/developer-doc/phb/fdl-licence
@@ -0,0 +1,356 @@
+ GNU Free Documentation License
+ Version 1.1, March 2000
+
+ Copyright (C) 2000 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+written document "free" in the sense of freedom: to assure everyone
+the effective freedom to copy and redistribute it, with or without
+modifying it, either commercially or noncommercially. Secondarily,
+this License preserves for the author and publisher a way to get
+credit for their work, while not being considered responsible for
+modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work that contains a
+notice placed by the copyright holder saying it can be distributed
+under the terms of this License. The "Document", below, refers to any
+such manual or work. Any member of the public is a licensee, and is
+addressed as "you".
+
+A "Modified Version" of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall subject
+(or to related matters) and contains nothing that could fall directly
+within that overall subject. (For example, if the Document is in part a
+textbook of mathematics, a Secondary Section may not explain any
+mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.
+
+The "Cover Texts" are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.
+
+A "Transparent" copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, whose contents can be viewed and edited directly and
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup has been designed to thwart or discourage
+subsequent modification by readers is not Transparent. A copy that is
+not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML designed for human modification. Opaque formats include
+PostScript, PDF, proprietary formats that can be read and edited only
+by proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML produced by some word processors for output
+purposes only.
+
+The "Title Page" means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, "Title Page" means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies of the Document numbering more than 100,
+and the Document's license notice requires Cover Texts, you must enclose
+the copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a publicly-accessible computer-network location containing a complete
+Transparent copy of the Document, free of added material, which the
+general network-using public has access to download anonymously at no
+charge using public-standard network protocols. If you use the latter
+option, you must take reasonably prudent steps, when you begin
+distribution of Opaque copies in quantity, to ensure that this
+Transparent copy will remain thus accessible at the stated location
+until at least one year after the last time you distribute an Opaque
+copy (directly or through your agents or retailers) of that edition to
+the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+A. Use in the Title Page (and on the covers, if any) a title distinct
+ from that of the Document, and from those of previous versions
+ (which should, if there were any, be listed in the History section
+ of the Document). You may use the same title as a previous version
+ if the original publisher of that version gives permission.
+B. List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has less than five).
+C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+D. Preserve all the copyright notices of the Document.
+E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+F. Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.
+G. Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document's license notice.
+H. Include an unaltered copy of this License.
+I. Preserve the section entitled "History", and its title, and add to
+ it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page. If
+ there is no section entitled "History" in the Document, create one
+ stating the title, year, authors, and publisher of the Document as
+ given on its Title Page, then add an item describing the Modified
+ Version as stated in the previous sentence.
+J. Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise
+ the network locations given in the Document for previous versions
+ it was based on. These may be placed in the "History" section.
+ You may omit a network location for a work that was published at
+ least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.
+K. In any section entitled "Acknowledgements" or "Dedications",
+ preserve the section's title, and preserve in the section all the
+ substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.
+L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section titles.
+M. Delete any section entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+N. Do not retitle any existing section as "Endorsements"
+ or to conflict in title with any Invariant Section.
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section entitled "Endorsements", provided it contains
+nothing but endorsements of your Modified Version by various
+parties--for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections entitled "History"
+in the various original documents, forming one section entitled
+"History"; likewise combine any sections entitled "Acknowledgements",
+and any sections entitled "Dedications". You must delete all sections
+entitled "Endorsements."
+
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, does not as a whole count as a Modified Version
+of the Document, provided no compilation copyright is claimed for the
+compilation. Such a compilation is called an "aggregate", and this
+License does not apply to the other self-contained works thus compiled
+with the Document, on account of their being thus compiled, if they
+are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one quarter
+of the entire aggregate, the Document's Cover Texts may be placed on
+covers that surround only the Document within the aggregate.
+Otherwise they must appear on covers around the whole aggregate.
+
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License provided that you also include the
+original English version of this License. In case of a disagreement
+between the translation and the original English version of this
+License, the original English version will prevail.
+
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License. Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License. However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+http:///www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License "or any later version" applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
+
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.1
+ or any later version published by the Free Software Foundation;
+ with the Invariant Sections being LIST THEIR TITLES, with the
+ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+ A copy of the license is included in the section entitled "GNU
+ Free Documentation License".
+
+If you have no Invariant Sections, write "with no Invariant Sections"
+instead of saying which ones are invariant. If you have no
+Front-Cover Texts, write "no Front-Cover Texts" instead of
+"Front-Cover Texts being LIST"; likewise for Back-Cover Texts.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
diff --git a/developer-doc/phb/licence.docbook b/developer-doc/phb/licence.docbook
new file mode 100644
index 0000000..5a35725
--- /dev/null
+++ b/developer-doc/phb/licence.docbook
@@ -0,0 +1,21 @@
+<appendix id="licence">
+<title>Licence</title>
+
+<para>
+This document is released under Free Documentation licence; the terms
+of this licence
+are detailed below.
+</para>
+
+<sect1 id="fdl-licence">
+<title>Free Documentation Licence</title>
+
+<para>
+<screen>
+&fdl-licence;
+</screen>
+</para>
+
+</sect1>
+</appendix>
+
diff --git a/developer-doc/phb/phb.docbook b/developer-doc/phb/phb.docbook
new file mode 100644
index 0000000..4361acf
--- /dev/null
+++ b/developer-doc/phb/phb.docbook
@@ -0,0 +1,196 @@
+<?xml version="1.0" ?>
+<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
+ <!ENTITY kappname "KMyMoney">
+ <!ENTITY % addindex "IGNORE">
+ <!ENTITY % English "INCLUDE"><!-- change language only here -->
+
+ <!ENTITY version "1.2">
+ <!ENTITY app "<command>KMyMoney</command>">
+ <!ENTITY cvs "<command>CVS</command>">
+ <!ENTITY ac "<command>autoconf</command>">
+ <!ENTITY am "<command>automake</command>">
+ <!ENTITY GPG "<command>GPG</command>">
+ <!ENTITY cvs-host "kmymoney2.cvs.sourceforge.net">
+ <!ENTITY cvs-anonuser "anonymous">
+ <!ENTITY cvs-user "<emphasis>username</emphasis>">
+ <!ENTITY cvs-dir "/cvsroot/kmymoney2">
+ <!ENTITY cvs-module "kmymoney2">
+
+ <!ENTITY config-management SYSTEM "cfg-mgmt.docbook">
+ <!ENTITY release-management SYSTEM "rel-mgmt.docbook">
+ <!ENTITY coding-standards SYSTEM "coding.docbook">
+ <!ENTITY creating-dialogs SYSTEM "dialogs.docbook">
+ <!ENTITY translation-hints SYSTEM "translation.docbook">
+ <!ENTITY error-management SYSTEM "error-mgmt.docbook">
+ <!ENTITY cvs-examples SYSTEM "cvs-examples.docbook">
+ <!ENTITY src-examples SYSTEM "src-examples.docbook">
+ <!ENTITY unit-test SYSTEM "unit-test.docbook">
+ <!ENTITY test-examples SYSTEM "test-examples.docbook">
+ <!ENTITY rpm-example SYSTEM "rpm-example.docbook">
+ <!ENTITY documentation SYSTEM "documentation.docbook">
+ <!ENTITY submissions SYSTEM "submissions.docbook">
+ <!ENTITY settings SYSTEM "settings.docbook">
+ <!ENTITY licence SYSTEM "licence.docbook">
+ <!ENTITY fdl-licence SYSTEM "fdl-licence">
+]>
+
+<book lang="&language;">
+<bookinfo>
+<title>&kappname; Project Handbook</title>
+<subtitle>Version &version;</subtitle>
+
+<authorgroup>
+<author>
+<honorific>Dipl.Ing</honorific>
+<firstname>Thomas</firstname>
+<surname>Baumgart</surname>
+<affiliation>
+<address><email>ipwizard@users.sourceforge.net</email></address>
+</affiliation>
+</author>
+
+<author>
+<firstname>Michael</firstname>
+<surname>Edwardes</surname>
+<affiliation>
+<address><email>mte@users.sourceforge.net</email></address>
+</affiliation>
+</author>
+
+</authorgroup>
+
+<date>18.09.2005</date>
+
+<copyright>
+<year>2001</year>
+<year>2002</year>
+<year>2005</year>
+<year>2008</year>
+<holder>Thomas Baumgart</holder>
+<holder>Michael Edwardes</holder>
+<holder>Alvaro Soliverez</holder>
+</copyright>
+
+<legalnotice>
+<para>
+Permission is granted to copy, distribute and/or modify this
+document under the terms of the GNU Free Documentation License, Version 1.1
+or any later version published by the Free Software Foundation; with
+no Invariant Sections, with no Front-Cover texts, and with no Back-Cover
+Texts. A copy of the license is included in the appendix entitled
+<link linkend="licence">"GNU Free Documentation License"</link>.
+</para>
+</legalnotice>
+
+<abstract>
+<para>
+As for any software development project, certain rules regulate the
+development process of &app;. These rules cover things like coding
+standards, configuration management and error reporting, just to name a few.
+The focus of this document is on configuration management and coding
+standards. More
+information about the &app; project can be found on the
+<ulink url="http://kmymoney2.sourceforge.net/">project's hompage</ulink>.
+</para>
+<para>
+If you have any comments to raise about this document please send an email
+to <email>kmymoney2-developer@lists.sourceforge.net</email>,
+the project's developer mailing list and we will try to rectify it.
+
+Please note that the most up-to-date version of this document can be
+found in the source tree and is online on the
+<ulink url="http://kmymoney2.sourceforge.net/">project's homepage</ulink>.
+A <ulink url="http://kmymoney2.sourceforge.net/phb/kmymoney-phb.pdf">PDF
+version</ulink> is also available for download.
+</para>
+
+<para>
+A prerequisite for this document is a basic understanding on the work with
+&cvs;. Even though this document covers some of the more special topics of
+&cvs; in more detail it is not intended as an introduction to &cvs; in general.
+</para>
+</abstract>
+
+</bookinfo>
+
+<!--
+<dedication>
+<para>
+The dedication will show up here!
+<para>
+</dedication>
+
+-->
+
+<preface id="versionhistory">
+<title>History of this document</title>
+<para>
+This chapter contains a list of releases of this document. Each entry in this
+list contains a date, an author and a short description and possibly a
+release number.
+
+<variablelist>
+
+<varlistentry>
+<term>2001-11, Thomas Baumgart, Rev 0.1</term>
+<listitem>
+<itemizedlist>
+<listitem><para>
+Initial work on the project handbook goes back into November 2001.
+Unfortunately, the only history information is available in &cvs;.
+</para></listitem>
+</itemizedlist>
+</listitem>
+</varlistentry>
+
+<varlistentry>
+<term>2005-09-18, Thomas Baumgart, Rev 1.0</term>
+<listitem>
+<itemizedlist>
+<listitem><para>Added chapter about <link linkend="translation">translation</link>
+provided by J. Rundholz.</para></listitem>
+<listitem><para>Added this version history</para></listitem>
+</itemizedlist>
+</listitem>
+</varlistentry>
+
+<varlistentry>
+<term>2006-09-11, Thomas Baumgart, Rev 1.1</term>
+<listitem>
+<itemizedlist>
+<listitem><para>Added chapter about <link linkend="documentation">documentation</link>
+provided by Tom Browder.</para></listitem>
+</itemizedlist>
+</listitem>
+</varlistentry>
+
+<varlistentry>
+<term>2008-01-31, Alvaro Soliverez, Rev 1.2</term>
+<listitem>
+<itemizedlist>
+<listitem><para>Added chapter about <link linkend="submissions">submissions</link></para></listitem>
+<listitem><para>Added chapter about <link linkend="settings">settings</link></para></listitem>
+</itemizedlist>
+</listitem>
+</varlistentry>
+
+</variablelist>
+
+</para>
+</preface>
+&config-management;
+&release-management;
+&coding-standards;
+&creating-dialogs;
+&settings;
+&unit-test;
+&documentation;
+&submissions;
+&translation-hints;
+&error-management;
+&cvs-examples;
+&src-examples;
+&test-examples;
+&rpm-example;
+&licence;
+</book>
diff --git a/developer-doc/phb/rel-mgmt.docbook b/developer-doc/phb/rel-mgmt.docbook
new file mode 100644
index 0000000..531efaf
--- /dev/null
+++ b/developer-doc/phb/rel-mgmt.docbook
@@ -0,0 +1,868 @@
+<chapter id="rel-mgmt">
+<title>Release Management</title>
+<para>
+At certain stages, the development team releases a version of &app;. The
+following chapters explain the steps that are performed during this process.
+</para>
+
+<sect1 id="create-new-source-version">
+<title>Creating a new source version</title>
+<para>
+The process of releasing a new version is to build a source tar-ball archive, verify
+that &app; can be built from it and upload it to the SourceForge File Release System.
+This chapter explains the steps of making sure that the version numbers are set
+correctly, creating the source tar-ball, tagging the repository etc.
+</para>
+
+<para>
+Note that in order to perform some of the functions associated with this procedure, you will need to:
+ <para>
+ <orderedlist>
+ <listitem><para>
+ Obtain a userid by registering with Sourceforge; this userid is represented below as &lt;your_sf_userid&gt;
+ </para></listitem>
+ <listitem><para>
+ Be registered as a &kappname; developer; this must be done by a project administrator, the names of which appear on the project home page on Sourceforge.
+ </para></listitem>
+ </orderedlist>
+ </para>
+</para>
+
+<para>
+The first few steps of the release process should be taken some time in advance of the anticipated release date, in order to give translators a chance to 'do their thing'. The length of time required will depend on how many translatable strings have been changed since the previous release, but something like two weeks for a minor release should suffice.
+<note>
+<para>
+The steps explained apply to both the development and the
+release branches. For convenience, the examples are based on the
+development branch.
+</para>
+</note>
+</para>
+
+<orderedlist>
+<listitem>
+<para>Determine the release number which will identify this release.
+</para>
+<para>
+Two types of versions can be created at this time: a <emphasis>follow-up</emphasis> release or a <emphasis>fresh stable</emphasis>
+release. The follow-up release is based on a previous release with the same major and minor release number. The fresh stable
+release starts a new major and minor release number pair. In the latter case, the major and minor release numbers on the
+development branch in CVS are also adjusted. More details below.
+</para>
+
+<para>
+ <orderedlist>
+ <listitem><para>
+ For follow-up releases increase the micro-release-number by one since the last unstable/stable release.
+ </para></listitem>
+ <listitem><para>
+ For a fresh stable release, increase the minor release number and set the micro-release number to 0.
+ </para></listitem>
+ </orderedlist>
+</para>
+</listitem>
+
+<listitem>
+<para>Create a new directory for this release
+</para>
+<para>
+Create a new directory specifically for the release process, something like /home/me/distkmm, which will ensure that the following steps are not contaminated by other, existing versions of &app;. From this directory, check out a copy of the app from the CVS branch which forms the basis of this release, e.g. for 0.8.2, the branch will be rel-0-8-branch. The checkout process will create a sub-directory called kmymoney2. This is referred to subsequently as the TLD (top level directory).
+</para>
+</listitem>
+
+<listitem>
+<para>
+Update the text source file for translations.
+</para>
+<para> This is done from the TLD by running the command:
+
+<programlisting>
+<prompt>thb: ~&gt; </prompt><userinput>make package-messages</userinput>
+</programlisting>
+</para>
+<para>
+This will create the file kmymoney2.pot in TLD/po, and will merge all new and changed messages into the various translation files in the same directory. These files (kmymoney2.pot and *.po) should be committed to the appropriate branch of CVS. Also, an announcement should be made on the translator's mailing list that these are ready for updating, and mentioning a date a few days before the proposed release date as a deadline for translations to be submitted.
+</para>
+<para>
+At this point also, a 'string freeze' for the base release should be declared on the developer's list. From now on until the release is complete, the only changes which should be committed to the CVS branch should be fixes which do not change translatable strings, and updated .po files submitted by translators.
+</para>
+<para>
+As each .po file is committed, it is desirable to update the translation statistics on the project web site. This can be performed with the command
+ <programlisting>
+ make message-stats | ssh &lt;your_sf_userid&gt;@user.sourceforge.net "cat > /home/groups/k/km/kmymoney2/htdocs/translate-stable.xml"
+ </programlisting>
+You should certainly make sure that this command is run at least once, after all .po files have been committed.
+</para>
+<para>
+Once the anticipated release date is reached, you should make sure that your sandbox is up-to-date. This is probably best achieved by deleting the directory created in step 2, and re-creating it by a full CVS checkout as described there.
+</para>
+</listitem>
+
+<listitem>
+<para>
+Check that the version number is correct.
+</para>
+<para>
+In the TLD, check file configure.in.in for the correct version number. A line near the top should look like</para>
+ <programlisting>AM_INIT_AUTOMAKE(kmymoney2,0.8.3)</programlisting>
+<para>If the last digits don't match the release number, then change them and commit your change to the repository with the message 'Bumped to release x.y.z'.
+</para>
+</listitem>
+
+<listitem>
+<para>
+Verify the libtool version number
+</para>
+<para>Visit all subdirectories that contain a shared library. In the TLD, issue the command
+<programlisting>find . -name Makefile.am -exec grep -H LIBVERSION= '{}' \;</programlisting>
+(Note that the space before the backslash is necessary.)
+For each match, check whether the code or interface of the shared library has been changed since the last release. If so, modify the LIBVERSION setting in each Makefile.am according to the following recipe, where the LIBVERSION setting controls the libtool versioning system for shared libraries. It is constructed out of the triplet CURRENT:REVISION:AGE.
+</para>
+<para>
+ <orderedlist>
+ <listitem><para>
+ If the library source code has changed at all since the last
+ release, then increment REVISION (`C:R:A' becomes `C:r+1:A').
+ </para></listitem>
+
+ <listitem><para>
+ If any interfaces have been added, removed, or changed since the
+ last update, increment CURRENT, and set REVISION to 0.
+ </para></listitem>
+
+ <listitem><para>
+ If any interfaces have been added since the last public release,
+ then increment AGE.
+ </para></listitem>
+
+ <listitem><para>
+ If any interfaces have been removed since the last public release,
+ then set AGE to 0.
+ </para></listitem>
+ </orderedlist>
+</para>
+
+<para>
+<caution>
+Make sure to modify the numbers in coordination with changes on the release- and development branch.
+It could well be, that the REVISION must be incremented more than 1 if it has been changed on the other branch as well.
+</caution>
+</para>
+</listitem>
+
+<listitem>
+<para>
+Perform an initial build of the application
+</para>
+<para>
+From the TLD, issue the commands:
+</para>
+
+<programlisting>
+<prompt>thb: ~&gt; </prompt><userinput>make -f Makefile.dist release</userinput>
+<prompt>thb: ~&gt; </prompt><userinput>./configure <emphasis>&lt;any-options-you-need&gt;</emphasis></userinput>
+<prompt>thb: ~&gt; </prompt><userinput>make</userinput>
+</programlisting>
+<para>
+This will regenerate all files of the application and rebuild everything automatically.
+</para>
+</listitem>
+
+<listitem>
+<para>
+Check the distribution
+</para>
+<para>
+Before doing this, check that all desktop files conform to the freedesktop specification. From the TLD, issue the following command:
+<programlisting>
+<prompt>thb: ~&gt; </prompt><userinput>find ./kmymoney2 -name '*.desktop' -exec desktop-file-validate {} \;</userinput>
+</programlisting>
+N.B. Any errors in file x-kmymoney2.desktop can be ignored since kde3 does not conform to the specification for this file type.
+</para>
+<para>
+Note: desktop-file-validate is part of the desktop-file-utils package, which may be installed from your distribution repository, or downloaded from
+<ulink url="http://www.freedesktop.org/wiki/Software/desktop-file-utils">http://www.freedesktop.org/wiki/Software/desktop-file-utils</ulink>
+</para>
+<para>
+Then, to check the distribution itself, from the TLD, run the command
+
+<programlisting>
+<prompt>thb: ~&gt; </prompt><userinput>make distcheck</userinput>
+</programlisting>
+
+This will do the following things automatically and stop on any error:
+</para>
+
+<para>
+<orderedlist>
+<listitem><para>create a source tar-ball in tgz form</para></listitem>
+<listitem><para>unpack this source tar-ball in a separate directory</para></listitem>
+<listitem><para>run configure on the unpacked source tar-ball</para></listitem>
+<listitem><para>compile and link the configured package</para></listitem>
+<listitem><para>compile and link all testcases</para></listitem>
+<listitem><para>install the compiled program in a temp directory</para></listitem>
+<listitem><para>check that all files are installed</para></listitem>
+<listitem><para>uninstall the package from the temp space</para></listitem>
+<listitem><para>check that no files are left behind</para></listitem>
+</orderedlist>
+</para>
+
+<para>
+Make sure that everything builds correctly. If errors occur, correct them and
+rerun <command>make distcheck</command>. Once everything is ok, a respective message, that the tar-ball is
+ready for distribution is shown at the end of <command>make distcheck</command>.
+</para>
+</listitem>
+
+<listitem>
+<para>
+Update the ChangeLog
+</para>
+<para>
+Add a line with the text
+<programlisting> * Released x.y.z
+</programlisting>
+to the ChangeLog file.
+</para>
+</listitem>
+
+<listitem>
+<para>
+Commit changes to CVS
+</para>
+<para>
+Commit the updated ChangeLog file, and any Makefiles updated in step 5 to the CVS repository before you proceed with the next step. Use the message 'Released x.y.z'.
+</para>
+</listitem>
+
+<listitem>
+<para>
+Tag the version on CVS
+</para>
+<para>From the TLD, issue the command 'cvs tag rel-x-y-z', where x-y-z is the release number with dots replaced by dashes.
+</para>
+</listitem>
+
+<listitem>
+<para>
+Update and optimize the size of the tar-ball
+</para>
+<para>As the content has changed since the tar-ball was created in step 7, we need to re-create it. Create a more compressed version using the command:
+</para>
+ <programlisting>
+ <prompt>thb: ~&gt; </prompt><userinput>make dist-bzip2</userinput>
+ </programlisting>
+</listitem>
+
+<listitem>
+<para>Make a checksum of the tarball
+</para>
+<para>
+This can be done with the following command from the TLD
+</para>
+ <programlisting>
+ <prompt>thb: ~&gt; </prompt><userinput>md5sum <emphasis>name-of-tarball.tar.bz2</emphasis> &gt;/home/me/somewheresafe</userinput>
+ </programlisting>
+<para>This checksum may be used to verify downloaded files at a later stage, and may be added to sourceforge at some future time.
+</para>
+</listitem>
+
+<listitem>
+<para>
+Create a Release Note and a release ChangeLog file.
+</para>
+<para> The former should contain a brief description of the release and any new features which have been added. The latter should be a tidied-up version of the application ChangeLog file, though any purely internal changes may be omitted.
+</para>
+</listitem>
+
+<listitem>
+<para>
+Upload the tarball to Sourceforge's 'incoming' directory
+</para>
+<para>
+Upload the tar-ball (bz2-version) to ftp://anonymous:&lt;your-email-address&gt;@upload.sourceforge.net:incoming, making sure to use the binary transfer mode.
+</para>
+<para>
+For GUI users: <emphasis>anonymous</emphasis> is the user-name and
+<emphasis>your-email-address</emphasis> is the password.
+</para>
+<para>
+For command line FTP, from the TLD:
+<programlisting>
+<prompt>thb: </prompt><userinput>ftp</userinput>
+<prompt>ftp&gt; </prompt><userinput>open upload.sourceforge.net</userinput>
+Connected to osdn.dl.sourceforge.net.
+&lt;snip&gt;
+<prompt>Name (upload.sourceforge.net:tonyb): </prompt><userinput>anonymous</userinput>
+331 Please specify the password.
+<prompt>Password:</prompt><userinput>&lt;your_sf_userid&gt;</userinput>
+230 Login successful.
+Remote system type is UNIX.
+Using binary mode to transfer files.
+<prompt>ftp&gt; </prompt><userinput>cd /incoming</userinput>
+250 Directory successfully changed.
+<prompt>ftp&gt; </prompt><userinput>binary</userinput>
+200 Switching to Binary mode.
+<prompt>ftp&gt; </prompt><userinput>put <emphasis>name-of-tarball.tar.bz2</emphasis></userinput>
+<prompt>ftp&gt;</prompt><userinput> quit</userinput>
+</programlisting>
+</para>
+</listitem>
+
+<listitem>
+<para>
+Move the tarball to the Sourceforge File Release System
+</para>
+<para>
+Next pull the uploaded file into the &app; section
+of the File Release System on SourceForge so that the file will be visible to everyone on the internet.
+To do that, load the following URL in your browser
+</para>
+<programlisting>
+https://sourceforge.net/project/admin/editpackages.php?group_id=4708
+</programlisting>
+<para>At the bottom of the page, click on the 'Edit releases' link. If the release (x.y.z) you've built doesn't appear in the list, go back a page and click on the 'Add release' link to add it, then return to 'Edit releases', then click the 'Edit this release' link for your release.</para>
+<para>In Step 1 of the page, set the status to Hidden for now, paste the Release Notes and ChangeLog into the appropriate boxes and Submit.</para>
+<para>In Step 2, select the kmymoney tarball file and Add.</para>
+<para>In Step 3, set Processor to 'platform-independent', File Type to 'source .bz2', and Submit.</para>
+<para/>
+</listitem>
+
+<listitem>
+<para>
+Activate tarball on Sourceforge
+</para>
+<para>Once you are happy that the tarball was uploaded okay, and the release announcements are all correct, enter the File Release system again, and set the status to Active.
+</para>
+</listitem>
+
+<listitem>
+<para>
+Update bug lists
+</para>
+<para>If the ChangeLog indicates that any Sourceforge or KDE bugs have been fixed in this release, log on to the respective bug sites and ensure that they are marked as closed.
+</para>
+</listitem>
+
+<listitem>
+<para>
+Announce the release
+</para>
+<para>
+(At this point, you may wish to wait a few hours to allow Sourceforge to populate its mirror sites, thus avoiding complaints to the mailing lists.)
+Announce the presence of the source tar-ball archive as described in
+<link linkend="announce-new-version">Announce new version</link>.
+</para>
+</listitem>
+
+<listitem>
+<para>
+Prepare for next release
+</para>
+<para>
+Make sure that you increase the project version to the next version. This is derived as follows:
+</para>
+
+<para>
+ <orderedlist>
+ <listitem>
+ <para>After a follow-up release, increase the micro-release-number by one, e.g. if the release you are currently working on is called 0.7.3 then set the release number to 0.7.4. </para>
+ </listitem>
+ <listitem>
+ <para>After a fresh stable release, increase the minor release number and set the micro-release number to 0, e.g.if the release you are currently working on is called 0.6 then set the release number to 0.7.0. </para>
+ </listitem>
+ </orderedlist>
+</para>
+
+<para>
+Make the appropriate changes to configure.in.in as described in step 4 above.
+From the TLD, issue the commands:
+</para>
+
+<programlisting>
+<prompt>thb: ~&gt; </prompt><userinput>make -f Makefile.dist</userinput>
+<prompt>thb: ~&gt; </prompt><userinput>./configure <emphasis>&lt;any-options-you-need&gt;</emphasis></userinput>
+<prompt>thb: ~&gt; </prompt><userinput>make</userinput>
+</programlisting>
+<para>
+This will regenerate all files of the application and rebuild everything.
+</para>
+<para>
+Finally, check in the updated configure.in.in to the CVS repository.
+</para>
+
+</listitem>
+
+</orderedlist>
+
+<note>
+<para>
+The version number in the sandbox is <emphasis>always</emphasis> the
+version number that is currently being developed (we're a little ahead of ourselves here).
+</para>
+</note>
+
+</sect1>
+
+
+<sect1 id="create-stable-procedure">
+<title>Creating a new stable version</title>
+<para>
+At a certain time in the project's development cycle, the configuration
+manager decides that a feature freeze is necessary to start a new stable
+version. The exact dates when this will happen are announced on the
+developers mailing list ahead of the event. When the time has come to
+freeze the features, a branch will be created as described in this
+section. From this time on, the stable release will only be changed to make
+the current features of the software more stable. New features are not
+introduced to the stable branch but can be developed on the main
+branch (unstable) in parallel.
+
+</para>
+
+<para>
+When the time has come to create a new stable branch, the following steps
+have to be performed.
+
+<orderedlist>
+<listitem>
+<para>
+Run through all the steps explaind in <link linkend="create-stable-example">Creating a new version</link>.
+The version number used in this description for the stable version is 0.4. Follow the path
+for a fresh stable release.
+</para>
+</listitem>
+
+<listitem><para>
+Create a branch off of the tagged version. The branch name is build by appending
+the word <emphasis>-branch</emphasis> to the major- and
+minor-release number of the stable release version.
+
+For our example, the branch tag for versions 0.4 is
+<emphasis>rel-0-4-branch</emphasis>.
+A complete example with all &cvs; commands can be found
+<link linkend="create-stable-example">in the appendix</link>.
+</para></listitem>
+
+<listitem>
+<para>
+From this moment on, the developers working on versions 0.4.x must make
+sure, that they checkout or update their sandbox using the
+tag <emphasis>rel-0-4-branch</emphasis>. This gives them the head revisions of
+the files on the 0.4 branch. Omitting this tag information will leave
+them on the main branch. The main branch is reserved for the unstable
+versions. An example how to keep multiple branches on the same machine is
+presented in the <link linkend="multiple-branches">appendix</link>,
+
+<caution>
+<para>
+The developers really have to
+take care from this point on which version they are modifying in their
+sandbox. Besides that, it is the developers responsibility to make sure
+that bug-fixes are also implemented on the main-branch if applicable.
+</para>
+</caution>
+
+</para>
+
+<para>
+When fixes are applied to the branch, new versions can be created by
+incrementing the micro-release thus rel-0-4-1, rel-0-4-2 are the next
+tags on the release branch.
+</para>
+
+</listitem>
+</orderedlist>
+
+<note>
+<para>
+Since &cvs; does not allow periods inside a tag, we always replace periods
+(.) with dashes (-) inside a tag.
+</para>
+</note>
+
+<para>
+The following diagram shows the above example on two specifc files. Each
+node represented by an asterisk is labelled with it's revision number
+enclosed in parenthesis. If a node has one or more labels attached, then
+they are enclosed in brackets. Nodes may exist without a tag. Such
+revisions never went into a release neither stable nor unstable but are
+valid intermediate steps in the development of the file in question.
+</para>
+
+<example>
+<title>Revisions on the head of a stable branch</title>
+<para>
+The first file is changed rather often between the version tags. All tags
+are on different revisions of the file.
+</para>
+
+<programlisting>
+
+
+ * (1.12) [rel-0-3-8]
+ |
+ * (1.13)
+ |
+ * (1.14) [rel-0-4]
+ |\__________________________
+ | \
+ | |
+ * (1.15) * (1.14.2.1) [rel-0-4-1]
+ | |
+ * (1.16) [rel-0-5-0] * (1.14.2.2) [rel-0-4-2]
+
+ [HEAD] [rel-0-4-branch]
+
+
+</programlisting>
+
+<para>
+The second file is not changed at all between the version
+tags. Nevertheless, all tags are available even though now they are on
+the same revision 1.2.
+</para>
+
+<programlisting>
+
+
+ * (1.2) [rel-0-3-8] [rel-0-4]
+ | [rel-0-4-1] [rel-0-4-2] [rel-0-5-0]
+ |\__________________________
+ | \
+ | |
+
+ [HEAD] [rel-0-4-branch]
+
+
+</programlisting>
+
+</example>
+
+
+</para>
+</sect1>
+
+
+
+
+<sect1 id="announce-new-version">
+<title>Announce a new version</title>
+<para>
+Once the file is visible on the internet, people need to be informed about the new
+release. Besides that, the project maintains certain pages, where information about the
+current release is kept. These pages need to be updated.
+</para>
+
+<sect2 id="announce-new-version-release-system">
+<title>Announce new version via File Release System</title>
+<para>
+The SourceForge File Release System allows to send a short mail about the release of a package to registered
+recipients. On the bottom of the page where the uploaded file is moved into the file space of &app; a checkbox
+can be activated to send out such a mail. This method should only be used for a new source tar-ball release.
+</para>
+</sect2>
+
+<sect2 id="update-web-sites">
+<title>Update information about release on web-sites</title>
+<para>
+Certain web-sites exist that keep version information about &app;. They need to be updated.
+<orderedlist>
+<listitem><para>
+The news system for &app; on SourceForge.net: Create a news entry on https://sourceforge.net/projects/kmymoney2.
+</para></listitem>
+
+<listitem><para>
+The &app; web-site at http://kmymoney2.sourceforge.net/: Update all version info
+for the stable and development releases and update the links to the source tar-balls.
+</para></listitem>
+
+<listitem><para>
+The &app; web-site at http://www.kde-apps.arg/: Add the release notes and update the version and minimum requirements.
+</para></listitem>
+
+<listitem><para>
+The &app; web-site at http://kmymoney2.sourceforge.net/: Update the links to the latest stable and development release.
+If you created a fresh stable release, comment the development release entry.
+</para></listitem>
+</orderedlist>
+</para>
+</sect2>
+
+<sect2 id="announce-new-version-mail">
+<title>Announce new version on mailing lists</title>
+<para>
+Write a short mail and send it to the developer- and user-mailing list of the project, so that all subscribed
+recipients are informed about the new release. Add links to the project web-site and the www.kde-apps.org page
+of the project.
+</para>
+</sect2>
+
+</sect1>
+
+
+
+
+
+
+<sect1 id="create-new-bin-version">
+<title>Creating a new binary/installable version</title>
+<para>
+Additionally, installable binary versions of &app; should be provided. Since the installable binary
+files differ from distribution to distribution and the generation in general requires the
+target platform, the &app; project relies on the help of people not directly involved in
+the application development. We greatfully appreciate any help in this area.
+</para>
+
+<para>
+Multiple formats exist: RPM, DEB, e-builds, PKG just to name a few. Since the distro I use (SuSE) relies on
+RPMs, I explain the creation in more detail here. If you can provide similar information about other formats,
+we are more than happy to include it in this document. We assume that you follow our licence terms for any
+documentation you supply. Please send your docbook formatted files to the developer mailing list.
+</para>
+
+
+<sect2 id="rpm">
+<title>Creating an RPM file</title>
+<para>
+One possibility to distribute the program is to use the Red-Hat Package
+manager (RPM) format. In order to be able to create such a package for
+&app;, you need to have a source tar-ball as described in <link
+linkend="create-new-source-version">the previous chapter</link>.
+</para>
+
+<para>
+The RPM system uses a directory structure which
+for my system - a SuSE distribution - is located in /usr/src/packages. This
+may be different on your system. The location can be configured in
+/etc/rpmrc.
+I will refer to this directory as the 'RPM base directory' in the remainder
+of this document.
+</para>
+
+<para>
+The RPM base directory has a set of subdirectories. They all serve a
+specific purpose. For us, the directories SOURCES, SPECS, SRPMS and RPMS
+are important. RPMS is further divided into directories for specific
+CPU architectures (e.g. i386, i486, ppc, etc.). In the remainder of this
+document, I will use the names of these directories without mentioning
+the RPM base directory.
+</para>
+</sect2>
+
+<sect2 id="rpm-tar-ball">
+<title>Copying the tar-ball to the RPM structure</title>
+<para>
+The first thing that needs to be done is to copy the tar-ball to a defined
+place where the RPM tool will look for it. For this purpose the SOURCES
+directory is used. Move or copy your <link
+linkend="create-new-source-version">tar-ball</link> to this directory.
+</para>
+</sect2>
+
+<sect2 id="rpm-test-building">
+<title>Test building</title>
+<para>
+<!-- taken from RPM Howto (start) -->
+ The first thing you'll probably want to do is get the source to build
+ cleanly without using RPM. To do this, unpack the sources, and change
+ the directory name to $NAME.orig. Then unpack the source again. Use
+ this source to build from. Go into the source directory and follow the
+ instructions to build it. If you have to edit things, you'll need a
+ patch. Once you get it to build, clean the source directory. Make sure
+ and remove any files that get made from a configure script. Then cd
+ back out of the source directory to its parent. Then you'll do
+ something like:
+
+<programlisting>
+
+ <prompt>thb:~&gt; </prompt><userinput>diff -uNr dirname.orig dirname &gt; ../SOURCES/dirname-distroname.patch</userinput>
+
+
+</programlisting>
+
+ This will create a patch for you that you can use in your spec file.
+ Note that the "distro-name" that you see in the patch name is just an
+ identifier. You might want to use something more descriptive like
+ "MDK9" or "RPM8" to describe why you had to make a patch. It's also
+ a good idea to look at the patch file you are creating before using it
+ to make sure no binaries were included by accident.
+<!-- taken from RPM Howto (end) -->
+<note>
+<para>
+This section has been copied from the RPM-Howto and adapted where necessary
+</para>
+</note>
+</para>
+</sect2>
+
+<sect2 id="rpm-specfile">
+<title>Setting up the SPEC file</title>
+<para>
+The next step is to create an RPM SPEC file for the specific distribution.
+The contents may vary between distribution and that is where your knowledge
+is required. An example for an RPM SPEC file is contained in appendix ??.
+It will work on SuSE 8.1 directly. More details on howto setup a SPEC file
+including an explanation of the various sections, commands and options is
+contained in the RPM-Howto.
+</para>
+</sect2>
+
+<sect2 id="rpm-build-package">
+<title>Building the package</title>
+<para>
+Once you have the spec file it's time to try and build your package. The
+usual way to do this is using the following command:
+
+
+<programlisting>
+
+ <prompt>thb:~&gt; </prompt><userinput>rpmbuild -ba kmymoney.spec</userinput>
+
+
+</programlisting>
+
+Once the command finishes successfully, you have a source RPM in SRPMS and
+a binary RPM for your distribution in one of the subdirectories of RPMS.
+<note>
+<para>
+More details about this process and a description on the available options
+can be found in the RPM-Howto.
+</para>
+</note>
+</para>
+</sect2>
+
+<sect2 id="rpm-test">
+<title>Testing the package</title>
+<para>
+<!-- taken from RPM Howto (start) -->
+ Once you have a source and binary rpm for your package, you need to
+ test it. The easiest and best way is to use a totally different
+ machine from the one you are building on to test. After all, you've
+ just done a lot of make install's on your own machine, so it should be
+ installed fairly well.
+</para>
+
+<para>
+ You can do an rpm -e packagename on the package to test, but that can
+ be deceiving because in building the package, you did a make install.
+ If you left something out of your file list, it will not get
+ uninstalled. You'll then reinstall the binary package and your system
+ will be complete again, but your rpm still isn't. Make sure and keep
+ in mind that just because you do a rpm -ba package, most people
+ installing your package will just be doing the rpm -i package. Make
+ sure you don't do anything in the build or install sections that will
+ need to be done when the binaries are installed by themselves.
+<!-- taken from RPM Howto (end) -->
+
+<note>
+<para>
+This section has been copied from the RPM-Howto and adapted where necessary
+</para>
+</note>
+</para>
+</sect2>
+
+<sect2 id="rpm-sign">
+<title>Signing the package</title>
+<para>
+Once you are confident with the RPM package, it is a good idea to sign it
+with your secret &GPG; key before you distribute it. Signing the package
+allows any recipient of the package to verify that it has not been altered
+by an unauthorized party.
+</para>
+
+<para>
+ Signing will create a
+separate file that contains the electronic signature for the RPM file.
+In order to allow any
+recipient to verify the signature, two things have to be kept in mind:
+
+<itemizedlist>
+<listitem>
+ <para>Always distribute both files together</para>
+</listitem>
+<listitem>
+ <para>
+ Make your public key available on e.g.
+ <ulink url="http://www.keyserver.net/">http://www.keyserver.net</ulink>.
+ </para></listitem>
+</itemizedlist>
+
+The following example shows the command sequence necessary to create an
+ASCII armored signature.
+</para>
+
+<para>
+<programlisting>
+
+
+ <prompt>thb:~&gt; </prompt><userinput>gpg -b -a kmymoney2-0.5.1-1.i386.rpm</userinput>
+ You need a passphrase to unlock the secret key for
+ user: "Thomas Baumgart &lt;thb@net-bembel.de&gt;"
+ 1024-bit DSA key, ID B75DD3BA, created 2001-06-23
+
+ Enter passphrase: <userinput>I WON'T TELL YOU MY PASSPHRASE ;-)</userinput>
+ <prompt>thb:~&gt; </prompt><userinput></userinput>
+
+
+</programlisting>
+</para>
+
+<para>
+Once you have entered the correct passphrase the signature file will be
+created under the name kmymoney2-0.5.1-1.i386.rpm.asc. As an example, I
+include it here. <command>THIS IS NOT THE REAL SIGNATURE, EVEN IF IT LOOKS LIKE
+IT</command>.
+</para>
+
+<para>
+<programlisting>
+
+ -----BEGIN PGP SIGNATURE-----
+ Version: GnuPG v1.0.7 (GNU/Linux)
+
+ iD8DBQA+E1DInFnbQLdd07oRAmFQAKDV0I9nzxGEIh1Mx/tzoZ4J3Iyt6gCfTXl1
+ LrISXXgD6xELWZlO+NsWbLw=
+ =qJIP
+ -----END PGP SIGNATURE-----
+
+</programlisting>
+</para>
+
+<para>
+These two files, the RPM and the signature, should be distributed to
+the public. The receiver of these
+two files can now verify if the RPM file is the one you signed or has been
+modified. Therefor, he needs your public key which he gets from one of the
+public key servers (e.g. <ulink
+url="http://www.keyserver.net/">http://www.keyserver.net</ulink>) into his
+keyring. The verification is performed using &GPG; as the following example
+shows:
+</para>
+
+
+<para>
+<programlisting>
+
+
+ <prompt>thb:~&gt; </prompt><userinput>gpg --verify kmymoney2-0.5.1-1.i386.rpm.asc</userinput>
+ gpg: Signature made Wed 01 Jan 2003 09:16:37 PM CET using DSA key ID B75DD3BA
+ gpg: Good signature from "Thomas Baumgart &lt;thb@net-bembel.de&gt;"
+ <prompt>thb:~&gt; </prompt><userinput></userinput>
+
+
+</programlisting>
+
+<note>
+<para>
+Besides signing the RPM package, the SRPM (Source-RPM) package should be
+signed as well.
+</para>
+</note>
+</para>
+</sect2>
+
+</sect1>
+</chapter>
diff --git a/developer-doc/phb/rpm-example.docbook b/developer-doc/phb/rpm-example.docbook
new file mode 100644
index 0000000..0e7cea0
--- /dev/null
+++ b/developer-doc/phb/rpm-example.docbook
@@ -0,0 +1,281 @@
+<appendix id="rpm-example">
+<title>RPM SPEC file example</title>
+<para>
+This appendix contains an example of an RPM SPEC file.
+</para>
+
+<programlisting>
+
+#
+# spec file for package kmymoney
+#
+# Copyright (c) 2002,2003,2004,2005 Thomas Baumgart
+# This file and all modifications and additions to the pristine
+# package are under the same license as the package itself.
+#
+# please send bugfixes or comments to kmymoney2-developer@lists.sourceforge.net
+#
+
+%define is_mandrake %(test -e /etc/mandrake-release &amp;&amp; echo 1 || echo 0)
+%define is_suse %(test -e /etc/SuSE-release &amp;&amp; echo 1 || echo 0)
+%define is_fedora %(test -e /etc/fedora-release &amp;&amp; echo 1 || echo 0)
+
+%define dist redhat
+%define disttag rh
+
+%if %is_mandrake
+%define dist mandrake
+%define disttag mdk
+%endif
+%if %is_suse
+%define dist suse
+%define disttag suse
+%define kde_path /opt/kde3
+%endif
+%if %is_fedora
+%define dist fedora
+%define disttag rhfc
+%endif
+
+%define _bindir %kde_path/bin
+%define _datadir %kde_path/share
+%define _iconsdir %_datadir/icons
+%define _docdir %_datadir/doc
+%define _localedir %_datadir/locale
+%define qt_path /usr/lib/qt3
+
+%define distver %(release="`rpm -q --queryformat='%{VERSION}' %{dist}-release 2> /dev/null | tr . : | sed s/://g`" ; if test $? != 0 ; then release="" ; fi ; echo "$release")
+%define distlibsuffix %(%_bindir/kde-config --libsuffix 2>/dev/null)
+%define _lib lib%distlibsuffix
+%define packer %(finger -lp `echo "$USER"` | head -n 1 | cut -d: -f 3)
+
+Name: kmymoney
+Icon: kmymoney.xpm
+Summary: The Personal Finances Manager for KDE.
+Version: 0.8
+Release: 1.%{disttag}%{distver}
+License: GPL
+Vendor: The KMyMoney development team &lt;kmymoney2-developers@lists.sourceforge.net&gt;
+Packager: %packer
+Group: Productivity/Office/Finance
+Source0: %{name}2-%version.tar.bz2
+BuildRoot: %{_tmppath}/%{name}2-%{version}-%{release}-build
+BuildRequires: kdebase3-devel
+Prereq: /sbin/ldconfig
+
+%description
+KMyMoney is the Personal Finance Manager for the KDE environment.
+It provides the functions required to balance your checkbooks,
+manage your personal accounts, investments, loans and
+categorise your incomes and expenses.
+
+For the most up-to-date information and sources please
+visit the project web-site at http://kmymoney2.sourceforge.net/.
+
+To stay informed about new releases and other user related topics,
+please register with the KMyMoney User Mailinglist. It's a low volume
+mailing list. More information how to register can be found on the
+projects's web-site.
+
+%package devel
+#Requires:
+Summary: KMyMoney development files
+Group: Productivity/Office/Finance
+Provides: kmymoney-devel
+
+%description devel
+This package contains necessary header files for KMyMoney development.
+
+This package is necessary to compile plugins for KMyMoney.
+
+%package ofx
+Requires: kmymoney
+Summary: KMyMoney OFX plugin
+Group: Productivity/Office/Finance
+Provides: kmymoney-ofx
+
+%description ofx
+This package contains necessary files for the KMyMoney OFX plugin.
+
+
+%prep
+#echo %_target
+#echo %_target_alias
+#echo %_target_cpu
+#echo %_target_os
+#echo %_target_vendor
+echo Building %{name}-%{version}-%{release}
+
+%setup -q -n %{name}2-%{version}
+
+%build
+CFLAGS="%optflags" CXXFLAGS="%{optflags}" \
+ ./configure --mandir=%{_mandir}\
+ --disable-rpath \
+ --with-xinerama \
+ --without-gl \
+ --disable-debug \
+ --disable-cppunit \
+ --enable-final
+
+make
+
+%install
+make DESTDIR=%buildroot install
+
+%clean
+[ ${RPM_BUILD_ROOT} != "/" ] &amp;&amp; rm -rf ${RPM_BUILD_ROOT}
+
+%post
+cd %_docdir/HTML/*/%{name}2
+ln -s ../common common
+/sbin/ldconfig
+
+%postun
+/sbin/ldconfig
+
+%files
+%defattr(-,root,root)
+
+%dir %_docdir/HTML/en/%{name}2/
+%doc %_docdir/HTML/*/%{name}2/*.docbook
+%doc %_docdir/HTML/*/%{name}2/*.png
+%doc %_docdir/HTML/*/%{name}2/index.cache.bz2
+
+# the binary files
+%{_bindir}/%{name}
+%{_bindir}/%{name}2
+
+# the shared libraries
+%kde_path/%_lib/*.so.*.*.*
+
+#
+%dir %_datadir/apps/
+%dir %_datadir/apps/%{name}2/
+%dir %_datadir/apps/%{name}2/html
+%dir %_datadir/apps/%{name}2/templates
+%dir %_datadir/apps/%{name}2/templates/C
+%dir %_datadir/apps/%{name}2/templates/de_DE
+%dir %_datadir/apps/%{name}2/templates/en_GB
+%dir %_datadir/apps/%{name}2/templates/en_US
+%dir %_datadir/apps/%{name}2/templates/fr_FR
+%dir %_datadir/apps/%{name}2/templates/pt_BR
+%dir %_datadir/apps/%{name}2/templates/ru_SU
+%_datadir/apps/%{name}2/templates/README
+%_datadir/apps/%{name}2/templates/*/*.kmt
+
+%_datadir/apps/%{name}2/*rc
+%_datadir/apps/%{name}2/html/*
+%_datadir/apps/%{name}2/tips
+
+%dir %_datadir/apps/%{name}2/pics/
+%_datadir/apps/%{name}2/pics/*.png
+
+%dir %_datadir/apps/%{name}2/icons/
+%dir %_datadir/apps/%{name}2/icons/hicolor/
+%dir %_datadir/apps/%{name}2/icons/hicolor/16x16/
+%dir %_datadir/apps/%{name}2/icons/hicolor/16x16/actions/
+%dir %_datadir/apps/%{name}2/icons/hicolor/22x22/
+%dir %_datadir/apps/%{name}2/icons/hicolor/22x22/actions/
+%dir %_datadir/apps/%{name}2/icons/hicolor/32x32/
+%dir %_datadir/apps/%{name}2/icons/hicolor/32x32/apps
+%dir %_datadir/apps/%{name}2/icons/hicolor/48x48/
+%dir %_datadir/apps/%{name}2/icons/hicolor/48x48/apps
+%dir %_datadir/apps/%{name}2/icons/hicolor/64x64/
+%dir %_datadir/apps/%{name}2/icons/hicolor/64x64/apps
+%_datadir/apps/%{name}2/icons/hicolor/*/*/*.png
+
+#
+#
+%_datadir/applications/kde/kmymoney2.desktop
+%_datadir/mimelnk/application/x-kmymoney2.desktop
+%_datadir/servicetypes/*
+
+#
+#
+%_iconsdir/*/*/*/*.png
+
+#
+#
+%doc %_mandir/man1/kmymoney2.1.gz
+
+#
+#
+%_localedir/*/*/*.mo
+
+
+# AqBanking plugin related files
+# %dir %_datadir/apps/kmm_kbanking/
+# %_datadir/apps/kmm_kbanking/*rc
+
+# plugin related files
+# %kde_path/%_lib/kde3/*.so
+
+
+
+
+%files ofx
+%_datadir/services/kmm_ofximport.desktop
+%kde_path/%_lib/kde3/kmm_ofximport.so
+
+
+%files devel
+%kde_path/include/kmymoney/*
+%kde_path/%_lib/*.la
+
+# plugin related files
+%kde_path/%_lib/kde3/*.la
+
+%changelog
+* Mon May 26 2005 - ipwizard (at) users.sourceforge.net
+- Added kmymoney-ofx package
+
+* Tue Mar 22 2005 - ipwizard (at) users.sourceforge.net
+- Added more template functionality to provide more
+ distributions
+- Added kmymoney-devel package
+
+* Mon Jan 30 2005 - ipwizard (at) users.sourceforge.net
+- Started adding distro independant layout
+
+* Sat Oct 30 2004 - ipwizard (at) users.sourceforge.net
+ * Preparations for 0.6.3
+
+* Thu Sep 23 2004 - ipwizard (at) users.sourceforge.net
+ * Preparations for 0.6.2
+
+* Sat Jun 5 2004 - ipwizard (at) users.sourceforge.net
+- Preparations for 0.6
+
+* Thu Apr 22 2004 - ipwizard (at) users.sourceforge.net
+- Preparations for 0.6rc4
+
+* Fri Feb 20 2004 - ipwizard (at) users.sourceforge.net
+- Removed the standard directories
+- Uninstall the default account files also
+- Preparations for 0.6rc3
+
+* Thu Feb 5 2004 - ipwizard (at) users.sourceforge.net
+- Remove CVS directories from SRPMS
+- Preparations for 0.6rc2
+
+* Mon Dec 29 2003 - ipwizard (at) users.sourceforge.net
+- Preparations for 0.6rc1
+- Incorporated some changes from SuSE distro
+- added man page file
+
+* Thu Jan 9 2003 - ipwizard (at) users.sourcforge.net
+- Added missing files home.html and kmymoney2.css
+
+* Mon Dec 16 2002 - ipwizard (at) users.sourcforge.net
+- Removed make command only required for CVS download
+- Update version to match filename
+
+* Sun Dec 15 2002 - ipwizard (at) users.sourcforge.net
+- Updated for version 0.51
+
+* Tue Jan 15 2002 - ipwizard (at) users.sourcforge.net
+- Initial implementation
+
+</programlisting>
+</appendix>
diff --git a/developer-doc/phb/settings.docbook b/developer-doc/phb/settings.docbook
new file mode 100644
index 0000000..7bc592d
--- /dev/null
+++ b/developer-doc/phb/settings.docbook
@@ -0,0 +1,109 @@
+<chapter id="settings">
+<chapterinfo>
+<authorgroup>
+<author>
+ <firstname>Alvaro</firstname>
+ <surname>Soliverez</surname>
+ <affiliation>
+ <address><email>asoliverez@gmail.com</email></address>
+ </affiliation>
+</author>
+</authorgroup>
+</chapterinfo>
+<title>Settings</title>
+
+<sect1 id="settings-page">
+<title>How to create a settings page</title>
+
+<itemizedlist>
+<listitem>
+<para>
+Create the view using designer, name it XxxDecl and store it in <filename>kmymoney2/dialogs/settings/xxxdecl.ui</filename>. See more information about naming the items further down
+</para>
+</listitem>
+<listitem>
+<para>
+Create the class that contains the logic for the settings page, name it Xxx and store it in <filename>kmymoney2/dialogs/settings/xxx.[cpp|h]</filename>.
+</para>
+<para>
+Don't forget the Q_OBJECT macro at the beginning of the class declaration in the .h file and make the class a public derivative of XxxDecl
+</para>
+</listitem>
+<listitem>
+<para>
+Add the xxxdecl.ui and xxx.cpp filename to the libsettings_a_SOURCES label in <filename>kmymoney2/dialogs/settings/Makefile.am</filename>
+</para>
+</listitem>
+<listitem>
+<para>
+Add the xxxdecl.ui filename to the EXTRA_DIST label in <filename>kmymoney2/dialogs/settings/Makefile.am</filename>
+</para>
+</listitem>
+<listitem>
+<para>
+Add the xxxdecl.cpp and xxxdecl.h filename to the DISTCLEANFILES label in <filename>kmymoney2/dialogs/settings/Makefile.am</filename>
+</para>
+</listitem>
+<listitem>
+<para>
+Add the xxx.h filename to the noinst_HEADERS label in <filename>kmymoney2/dialogs/settings/Makefile.am</filename>
+</para>
+</listitem>
+<listitem>
+<para>
+Add the construction code to KMyMoney2App::slotSettings() as
+</para>
+<screen>
+Xxx* xxxPage = new Xxx();
+dlg->addPage(xxxPage, i18n("text"), "icon-name");
+</screen>
+<para>
+where you replace "text" with a short text that shows up under the icon in the settings view and "icon-name" with the name of the icon for that settings page
+</para>
+</listitem>
+<listitem>
+<para>
+Make sure to include xxx.h in <filename>kmymoney/kmymoney2.cpp</filename>
+</para>
+</listitem>
+</itemizedlist>
+</sect1>
+
+<sect1 id="settings-items">
+<title>How to add the setting items</title>
+
+<para>
+For auto-generation of setter/getter code of your options, you have to follow certain rules. For each setting item you need an entry in <filename>kmymoney2/kmymoney2.kcfg</filename>. This is an XML formatted file. The contents of the 'name' attribute will be used as method for the C++-code, eg. a name of "AutoSavePeriod" for an integer parameter results in a setter and getter named
+</para>
+<screen>
+void KMyMoneySettings::setAutoSavePeriod(int)
+int KMyMoneySettings::autoSavePeriod(void)
+</screen>
+<para>
+You should not access those functions directly from within your code but rather use the KMyMoneyGlobalSettings class which contains the same interface as KMyMoneySettings with some additional functionality.
+</para>
+
+<para>
+When you name the GUI widget that controls the setting for this parameter make sure to name it "kcfg_AutoSavePeriod", that is "kcfg_" prepended with the name used in <filename>kmymoney2/kmymoney2.kcfg</filename>.
+</para>
+
+<para>
+That should be it.
+</para>
+</sect1>
+
+<sect1 id="settings-reference">
+<title>References</title>
+
+<para>
+A more complete - but generic version - can be found on <ulink url="http://techbase.kde.org/Development/Tutorials/Using_KConfig_XT">http://techbase.kde.org/Development/Tutorials/Using_KConfig_XT</ulink> . Currently, &app; does not use the <filename>CMakeLists.txt</filename> file but the above mentioned <filename>Makefile.am</filename> approach. You can safely skip the section about CMakeLists.txt.
+</para>
+</sect1>
+
+<sect1 id="settings-hints">
+<title>Hints</title>
+<para>
+If you run a make 'too early' it could be, that certain entries for the Makefile are not setup correctly and the compiler will complain. In this case, try to run a 'make -f Makefile.dist' followed by './configure' and see if the problem goes away.
+</para>
+</sect1>
+</chapter>
diff --git a/developer-doc/phb/src-examples.docbook b/developer-doc/phb/src-examples.docbook
new file mode 100644
index 0000000..4c2e3be
--- /dev/null
+++ b/developer-doc/phb/src-examples.docbook
@@ -0,0 +1,550 @@
+<appendix id="src-examples">
+<title>Source and Header Examples</title>
+<para>
+This appendix contains an example of a
+<link linkend="header-example">header file listing</link> and a
+<link linkend="source-example">source file listing</link>.
+</para>
+
+<section id="header-example">
+<title>Header File Example</title>
+<screen>
+
+/***************************************************************************
+ ksettingsdlg.h
+ -------------------
+ copyright : (C) 2000,2001 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+#ifndef KSETTINGSDLG_H
+#define KSETTINGSDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include &lt;qcheckbox.h&gt;
+#include &lt;qradiobutton.h&gt;
+#include &lt;qbuttongroup.h&gt;
+#include &lt;qcolor.h&gt;
+#include &lt;qfont.h&gt;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+#include &lt;kdialogbase.h&gt;
+#include &lt;kfontdialog.h&gt;
+#include &lt;kcolorbutton.h&gt;
+#include &lt;klineedit.h&gt;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+/**
+ * This class is used to manipulate all the settings available for
+ * KMyMoney2. It currently stores the values for the list settings
+ * and whether to show the start dialog when KMyMoney2 starts.
+ *
+ * It uses KDialogBase to implement it's interface.
+ *
+ * It uses the global KConfig object to read and write the application
+ * settings.
+ *
+ * @see KDialogBase
+ *
+ * @author Michael Edwardes 2000-2001
+ * $Id: src-examples.docbook,v 1.3 2005/05/27 19:05:18 ipwizard Exp $
+ *
+ * @short A class to manipulate the settings needed for running KMyMoney2
+**/
+class KSettingsDlg : public KDialogBase {
+ Q_OBJECT
+
+private:
+ /** Start prompt dialog */
+ QRadioButton *m_qradiobuttonStartPrompt;
+ /** Start file */
+ QRadioButton *m_qradiobuttonStartFile;
+ /** Color list */
+ KColorButton *m_kcolorbuttonList;
+ /** Color background */
+ KColorButton *m_kcolorbuttonBack;
+ /** Select font header */
+ KFontChooser *m_kfontchooserHeader;
+ /** Font cell setting */
+ KFontChooser *m_kfontchooserCell;
+
+ /** No rows to show in register */
+ KLineEdit *m_klineeditRowCount;
+
+ /** Show grid in register ? */
+ QCheckBox *m_qcheckboxShowGrid;
+
+ QRadioButton *m_qradiobuttonPerTransaction;
+ QRadioButton *m_qradiobuttonOtherRow;
+
+ /** Set page general */
+ void setPageGeneral();
+ /** Set page list settings */
+ void setPageList();
+ /** Write settings */
+ void configWrite();
+ /** Read settings */
+ void configRead();
+
+ /** Attributes to store the variables so they can be undone when
+ * cancelling the apply.
+ **/
+ QColor m_qcolorTempList;
+ QColor m_qcolorTempListBG;
+ QFont m_qfontTempHeader;
+ QFont m_qfontTempCell;
+ QString m_qstringTempRowCount;
+ bool m_bTempShowGrid;
+ bool m_bTempColourPerTransaction;
+ bool m_bTempStartPrompt;
+ bool m_bDoneApply;
+
+
+private slots:
+ /** Called when OK pressed */
+ void slotOk();
+
+ /** Called when Apply pressed */
+ void slotApply();
+
+ /** Called when Cancel pressed */
+ void slotCancel();
+
+ /** Called when Reset pressed */
+ void slotUser1();
+
+public:
+ /**
+ * Standard constructor.
+ *
+ * @param parent The QWidget this is used in.
+ * @param name The QT name.
+ * @param modal True if we want the dialog to be application modal.
+ *
+ * @return An object of type KSettingsDlg.
+ *
+ * @see ~KSettingsDlg
+ **/
+ KSettingsDlg(QWidget *parent=0, const char *name=0, bool modal=true);
+
+ /**
+ * Standard destructor.
+ *
+ * @return Nothing.
+ *
+ * @see KSettingsDlg
+ **/
+ ~KSettingsDlg();
+
+signals:
+ /**
+ * Emitted when the Apply button is clicked to allow the application to
+ * show the changes without having to close the dialog.
+ *
+ * @return Nothing
+ **/
+ void signalApply();
+};
+
+#endif
+</screen>
+</section>
+
+<section id="source-example">
+<title>Source File Example</title>
+
+<screen>
+/***************************************************************************
+ ksettingsdlg.cpp
+ -------------------
+ copyright : (C) 2000,2001 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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.
+ * *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include &lt;qlayout.h&gt;
+#include &lt;qvbox.h&gt;
+#include &lt;qlabel.h&gt;
+#include &lt;qgroupbox.h&gt;
+#include &lt;qtabwidget.h&gt;
+#include &lt;qvalidator.h&gt;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+#include &lt;klocale.h&gt;
+#include &lt;kstddirs.h&gt;
+#include &lt;kiconloader.h&gt;
+#include &lt;kconfig.h&gt;
+#include &lt;kcolorbutton.h&gt;
+#include &lt;kmessagebox.h&gt;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include "ksettingsdlg.h"
+
+/** Standard constructor for the class.
+ * The constructor passes some additional parameters to the base class
+ * KDialogBase
+ * to set the buttons to be showed and the type of dialog to be shown.
+**/
+KSettingsDlg::KSettingsDlg(QWidget *parent, const char *name, bool modal)
+ : KDialogBase(IconList, i18n("Configure"), Ok|Cancel|Apply|User1, Ok, parent,
+ name, modal, true, i18n("&amp;Reset"))
+{
+ // Setup the pages and then read the configuration object.
+ setPageGeneral();
+ setPageList();
+ configRead();
+ m_bDoneApply=false;
+}
+
+/** Standard destructor for the class.
+**/
+KSettingsDlg::~KSettingsDlg()
+{
+}
+
+/** Called to create the General page to be shown in the dialog.
+**/
+void KSettingsDlg::setPageGeneral()
+{
+ // Create the main frame to hold the widgets
+ QVBox *qvboxMainFrame = addVBoxPage( i18n("General"), i18n("General settings"),
+ DesktopIcon("misc"));
+
+ // Create a group box to hold the available options
+ QButtonGroup *qbuttongroup = new QButtonGroup(qvboxMainFrame, "GroupBox1");
+ qbuttongroup->setTitle( i18n( "Startup options" ) );
+ qbuttongroup->setColumnLayout(0, Qt::Vertical );
+ qbuttongroup->layout()->setSpacing( 0 );
+ qbuttongroup->layout()->setMargin( 0 );
+
+ // Create a layout to organize the widgets.
+ QVBoxLayout *qvboxlayout = new QVBoxLayout(qbuttongroup->layout());
+ qvboxlayout->setAlignment( Qt::AlignTop );
+ qvboxlayout->setSpacing( 6 );
+ qvboxlayout->setMargin( 11 );
+
+ // Create a check box to be in the group box
+ m_qradiobuttonStartPrompt = new QRadioButton("start_prompt", qbuttongroup);
+ m_qradiobuttonStartPrompt->setText( i18n( "Start with dialog prompt (default)" ) );
+ qvboxlayout->addWidget(m_qradiobuttonStartPrompt);
+
+ // Create another check box to the group box
+ m_qradiobuttonStartFile = new QRadioButton("start_file", qbuttongroup);
+ m_qradiobuttonStartFile->setText( i18n( "Start with last file used" ) );
+ qvboxlayout->addWidget(m_qradiobuttonStartFile);
+}
+
+/** Called to create the Main List page shown in the dialog.
+**/
+void KSettingsDlg::setPageList()
+{
+ // Create the page.
+ QVBox *qvboxMainFrame = addVBoxPage( i18n("Main List"), i18n("List settings"),
+ locate("appdata", "pics/setting_list.png"));
+
+ // Create the tab widget
+ QTabWidget *qtabwidget = new QTabWidget(qvboxMainFrame, "TabWidget2");
+
+ // Create the first page
+ QWidget *qwidgetPage = new QWidget(this);
+
+ // Create the layout for the page
+ QVBoxLayout *qvboxlayoutPage = new QVBoxLayout(qwidgetPage);
+ qvboxlayoutPage->setSpacing( 6 );
+ qvboxlayoutPage->setMargin( 11 );
+
+ // Create a horizontal layout to hold two widgets
+ QHBoxLayout *qhboxlayout = new QHBoxLayout;
+ qhboxlayout->setSpacing( 6 );
+ qhboxlayout->setMargin( 0 );
+
+ // Create the first widget
+ QLabel *qlabel = new QLabel(i18n("Number of lines in the register view:"),
+ qwidgetPage);
+ qhboxlayout->addWidget(qlabel);
+
+ // Create the second widget
+ m_klineeditRowCount = new KLineEdit(qwidgetPage);
+ QIntValidator *qintvalidator = new QIntValidator(1, 3, m_klineeditRowCount);
+ m_klineeditRowCount->setValidator(qintvalidator);
+ qhboxlayout->addWidget(m_klineeditRowCount);
+
+ // Add the horizontal layout
+ qvboxlayoutPage->addLayout(qhboxlayout);
+
+ // Ceate another widget
+ m_qcheckboxShowGrid = new QCheckBox(i18n("Show a grid in the register view"),
+ qwidgetPage);
+ qvboxlayoutPage->addWidget(m_qcheckboxShowGrid);
+
+ // Create a group to hold two radio buttons
+ QButtonGroup *qbuttongroup = new QButtonGroup(qwidgetPage, "ButtonGroup1");
+ qbuttongroup->setTitle(i18n("Row Colour options"));
+ qbuttongroup->setColumnLayout(0, Qt::Vertical );
+ qbuttongroup->layout()->setSpacing( 0 );
+ qbuttongroup->layout()->setMargin( 0 );
+
+ // Create a layout
+ QVBoxLayout *qvboxlayout = new QVBoxLayout(qbuttongroup->layout());
+ qvboxlayout->setAlignment( Qt::AlignTop );
+ qvboxlayout->setSpacing( 6 );
+ qvboxlayout->setMargin( 11 );
+
+ // Add the first radio button
+ m_qradiobuttonPerTransaction = new QRadioButton(qbuttongroup, "m_per_trans");
+ m_qradiobuttonPerTransaction->setText( i18n("Use one colour per transaction") );
+ qvboxlayout->addWidget(m_qradiobuttonPerTransaction);
+
+ // Add the second radio button
+ m_qradiobuttonOtherRow = new QRadioButton(qbuttongroup, "m_every_other");
+ m_qradiobuttonOtherRow->setText( i18n( "Change colour every other row" ));
+ qvboxlayout->addWidget(m_qradiobuttonOtherRow);
+ qvboxlayoutPage->addWidget(qbuttongroup);
+
+ // Add a vertical spacer to take up the remaining available space
+ QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Minimum,
+ QSizePolicy::Expanding );
+ qvboxlayoutPage->addItem( spacer );
+
+ // Add the page to the tab
+ qtabwidget->insertTab(qwidgetPage, i18n("General"));
+
+ // Create a new tab for the colour options
+ QWidget *qwidgetColour = new QWidget(qtabwidget, "tab");
+
+ // Create a vertical layout
+ QVBoxLayout *qvboxlayoutColour = new QVBoxLayout(qwidgetColour);
+ qvboxlayoutColour->setSpacing( 6 );
+ qvboxlayoutColour->setMargin( 11 );
+
+ // Create a horizontal layout to include the label and button
+ QHBoxLayout *qhboxlayoutColour = new QHBoxLayout;
+ qhboxlayoutColour->setSpacing( 6 );
+ qhboxlayoutColour->setMargin( 0 );
+
+ // Add the label and button
+ QLabel *qlabelListColour = new QLabel(i18n( "List view colour :" ),
+ qwidgetColour);
+ qhboxlayoutColour->addWidget(qlabelListColour);
+ m_kcolorbuttonList = new KColorButton(qwidgetColour, "colour_list");
+ qhboxlayoutColour->addWidget(m_kcolorbuttonList);
+
+ // Add the horizontal layout
+ qvboxlayoutColour->addLayout(qhboxlayoutColour);
+
+ // Create another horizontal layout to include the label and button
+ QHBoxLayout *qhboxlayoutBGColour = new QHBoxLayout;
+ qhboxlayoutBGColour->setSpacing( 6 );
+ qhboxlayoutBGColour->setMargin( 0 );
+
+ // Add the label and button
+ QLabel *qlabelListBGColour = new QLabel(i18n( "List background colour :"),
+ qwidgetColour);
+ qhboxlayoutBGColour->addWidget(qlabelListBGColour);
+ m_kcolorbuttonBack = new KColorButton(qwidgetColour, "colour_back");
+ qhboxlayoutBGColour->addWidget(m_kcolorbuttonBack);
+
+ // Add the horizontal layout
+ qvboxlayoutColour->addLayout(qhboxlayoutBGColour);
+
+ // Add a vertical spacer to take up the remaining available space
+ QSpacerItem* qspaceritemColour = new QSpacerItem( 20, 20,
+ QSizePolicy::Minimum, QSizePolicy::Expanding );
+ qvboxlayoutColour->addItem( qspaceritemColour );
+
+ // Add the page to the tab widget
+ qtabwidget->insertTab(qwidgetColour, i18n( "Color"));
+
+ // Create another tab adding a font chooser widget
+ QVBox *qvboxInsideTab1 = new QVBox( this, "tab1" );
+ qvboxInsideTab1->setSpacing( 6 );
+ qvboxInsideTab1->setMargin( 11 );
+ m_kfontchooserHeader = new KFontChooser(qvboxInsideTab1);
+ qtabwidget->insertTab(qvboxInsideTab1, i18n("Header Font"));
+
+ // Create another tab adding a font chooser widget
+ QVBox *qvboxInsideTab2 = new QVBox( this, "tab2" );
+ qvboxInsideTab2->setSpacing( 6 );
+ qvboxInsideTab2->setMargin( 11 );
+ m_kfontchooserCell = new KFontChooser(qvboxInsideTab2);
+ qtabwidget->addTab(qvboxInsideTab2, i18n("Cell Font"));
+}
+
+/** Read all the settings in from the global KConfig object and set all the
+ * widgets appropriately.
+**/
+void KSettingsDlg::configRead()
+{
+ KConfig *kconfig = KGlobal::config();
+ kconfig->setGroup("Settings Dialog");
+ QSize *qsizeDefaultSize = new QSize(470,470);
+ this->resize(kconfig->readSizeEntry("Geometry", qsizeDefaultSize));
+
+ kconfig->setGroup("General Options");
+ m_bTempStartPrompt = kconfig->readBoolEntry("StartDialog", true);
+ m_qradiobuttonStartPrompt->setChecked(m_bTempStartPrompt);
+ m_qradiobuttonStartFile->setChecked(!m_bTempStartPrompt);
+
+ kconfig->setGroup("List Options");
+
+ QFont qfontDefault = QFont("helvetica", 12);
+ QColor qcolorDefault = Qt::white;
+ QColor qcolorDefaultBG = Qt::gray;
+
+ m_qcolorTempList = kconfig->readColorEntry("listColor", &amp;qcolorDefault);
+ m_kcolorbuttonList->setColor(m_qcolorTempList);
+
+ m_qcolorTempListBG = kconfig->readColorEntry("listBGColor",
+ &amp;qcolorDefaultBG);
+ m_kcolorbuttonBack->setColor(m_qcolorTempListBG);
+
+ m_qfontTempHeader = kconfig->readFontEntry("listHeaderFont",
+ &amp;qfontDefault);
+ m_kfontchooserHeader->setFont(m_qfontTempHeader);
+
+ m_qfontTempCell = kconfig->readFontEntry("listCellFont", &amp;qfontDefault);
+ m_kfontchooserCell->setFont(m_qfontTempCell);
+
+ m_qstringTempRowCount = kconfig->readEntry("RowCount", "2");
+ m_klineeditRowCount->setText(m_qstringTempRowCount);
+
+ m_bTempShowGrid = kconfig->readBoolEntry("ShowGrid", true);
+ m_qcheckboxShowGrid->setChecked(m_bTempShowGrid);
+
+ m_bTempColourPerTransaction =
+ kconfig->readBoolEntry("ColourPerTransaction", true);
+ m_qradiobuttonPerTransaction->setChecked(m_bTempColourPerTransaction);
+ m_qradiobuttonOtherRow->setChecked(!m_bTempColourPerTransaction);
+}
+
+/** Write out all the settings to the global KConfig object.
+**/
+void KSettingsDlg::configWrite()
+{
+ KConfig *kconfig = KGlobal::config();
+ kconfig->setGroup("Settings Dialog");
+ kconfig->writeEntry("Geometry", this->size() );
+
+ kconfig->setGroup("List Options");
+ kconfig->writeEntry("listColor", m_kcolorbuttonList->color());
+ kconfig->writeEntry("listBGColor", m_kcolorbuttonBack->color());
+ kconfig->writeEntry("listHeaderFont", m_kfontchooserHeader->font());
+ kconfig->writeEntry("listCellFont", m_kfontchooserCell->font());
+ kconfig->writeEntry("RowCount", m_klineeditRowCount->text());
+ kconfig->writeEntry("ShowGrid", m_qcheckboxShowGrid->isChecked());
+ kconfig->writeEntry("ColourPerTransaction",
+ m_qradiobuttonPerTransaction->isChecked());
+
+ kconfig->setGroup("General Options");
+ kconfig->writeEntry("StartDialog",
+ m_qradiobuttonStartPrompt->isChecked());
+
+ kconfig->sync();
+}
+
+/** Called on OK being pressed */
+void KSettingsDlg::slotOk()
+{
+ int nCount = m_klineeditRowCount->text().toInt();
+ if (nCount &lt;= 0 || nCount &gt;= 4) {
+ KMessageBox::information(this, i18n("The row count has to be between 1
+and 3"));
+ m_klineeditRowCount->setFocus();
+ return;
+ }
+ configWrite();
+ this->accept();
+}
+
+/** Called on Apply being pressed */
+void KSettingsDlg::slotApply()
+{
+ int nCount = m_klineeditRowCount->text().toInt();
+ if (nCount &lt;= 0 || nCount &gt;= 4) {
+ KMessageBox::information(this, i18n("The row count has to be between 1
+and 3"));
+ m_klineeditRowCount->setFocus();
+ return;
+ }
+ m_bDoneApply = true;
+ configWrite();
+ emit signalApply();
+}
+
+/** Called on Cancel being pressed.
+ * It writes out all the original settings read when it was created.
+**/
+void KSettingsDlg::slotCancel()
+{
+ // make sure the config object is the same as we left it
+ KConfig *kconfig = KGlobal::config();
+ kconfig->setGroup("List Options");
+ kconfig->writeEntry("listColor", m_qcolorTempList);
+ kconfig->writeEntry("listBGColor", m_qcolorTempListBG);
+ kconfig->writeEntry("listHeaderFont", m_qfontTempHeader);
+ kconfig->writeEntry("listCellFont", m_qfontTempCell);
+ kconfig->writeEntry("RowCount", m_qstringTempRowCount);
+ kconfig->writeEntry("ShowGrid", m_bTempShowGrid);
+ kconfig->writeEntry("ColourPerTransaction", m_bTempColourPerTransaction);
+
+ kconfig->setGroup("General Options");
+ kconfig->writeEntry("StartDialog", m_bTempStartPrompt);
+
+ kconfig->sync();
+
+ if (m_bDoneApply)
+ accept();
+ else
+ reject();
+}
+
+/** Called when the user presses the User1 button. In our case that is the
+ * reset button.
+ *
+ * It just resets all the attributes to the values read on creation.
+**/
+void KSettingsDlg::slotUser1()
+{
+ m_qradiobuttonStartPrompt->setChecked(m_bTempStartPrompt);
+ m_kcolorbuttonList->setColor(m_qcolorTempList);
+ m_kcolorbuttonBack->setColor(m_qcolorTempListBG);
+ m_kfontchooserHeader->setFont(m_qfontTempHeader);
+ m_kfontchooserCell->setFont(m_qfontTempCell);
+ m_klineeditRowCount->setText(m_qstringTempRowCount);
+ m_qcheckboxShowGrid->setChecked(m_bTempShowGrid);
+ m_qradiobuttonPerTransaction->setChecked(m_bTempColourPerTransaction);
+ m_qradiobuttonOtherRow->setChecked(!m_bTempColourPerTransaction);
+}
+
+</screen>
+
+</section>
+</appendix>
diff --git a/developer-doc/phb/submissions.docbook b/developer-doc/phb/submissions.docbook
new file mode 100644
index 0000000..8a69e0c
--- /dev/null
+++ b/developer-doc/phb/submissions.docbook
@@ -0,0 +1,99 @@
+<chapter id="submissions">
+<chapterinfo>
+<authorgroup>
+<author>
+ <firstname>Alvaro</firstname>
+ <surname>Soliverez</surname>
+ <affiliation>
+ <address><email>asoliverez@gmail.com</email></address>
+ </affiliation>
+</author>
+</authorgroup>
+</chapterinfo>
+<title>Patch Submissions</title>
+<para>
+This section describes how to send patches and additions when you don't have direct CVS access. In that case, you should send the contributions to the developer mailing list. That way, more people can test your contribution than if you send it to a specific developer. It could also happen that this developer has a lot of pending stuff, and your contribution gets delayed.
+</para>
+
+<para>
+For the specifics on how to code, translate or write documentation, refer to the proper sections. Once you are done with the actual work, you have to create the patch file to send.
+</para>
+
+<sect1 id="patch">
+<title>Steps to create a patch</title>
+
+<sect2 id="prerequisites">
+<title>Prerequisites</title>
+<para>
+Have an updated cvs version of the release you are contributing to (HEAD, stable release, etc)
+</para>
+<itemizedlist>
+<listitem>
+<para>
+Make sure to run 'cvs upd' before you create the patch
+</para>
+</listitem>
+<listitem>
+<para>
+If the update changes your sandbox, make sure that the changes still work
+</para>
+</listitem>
+</itemizedlist>
+</sect2>
+
+<sect2 id="existingfiles">
+<title>If you modified existing Files</title>
+
+<itemizedlist>
+<listitem>
+<para>
+Run 'cvs diff -u' in the root directory. That should the create the patch to be applied to existing files
+</para>
+</listitem>
+<listitem>
+<para>
+Inspect the patch that it does only contain your wanted changes
+</para>
+</listitem>
+</itemizedlist>
+</sect2>
+
+<sect2 id="newfiles">
+<title>If you have added new Files</title>
+
+<itemizedlist>
+<listitem>
+<para>
+Make sure you write down on the email the location of each new file (The developer handling the patch will probably know how to find the correct location, but this will save her/him some precious time)
+</para>
+</listitem>
+</itemizedlist>
+</sect2>
+
+<sect2 id="finalsteps">
+<title>Final Steps</title>
+
+<itemizedlist>
+<listitem>
+<para>
+Compress the patch and any new files into a single .tar.gz file
+</para>
+</listitem>
+<listitem>
+<para>
+Send to the developer mailing list, explaining the nature of the submission
+</para>
+</listitem>
+<listitem>
+<para>
+The developer handling the patch should acknowledge that to the list as well, to avoid duplicate work
+</para>
+</listitem>
+</itemizedlist>
+</sect2>
+
+<para>
+Keep in mind that there are times when all developers have plenty of work, or a patch should be best handled by a specific developer that may not be readily available, so be patient. Also, if you don't receive an acknowledgement after a few days, write to the list asking for the status of your patch. Subscribing to the developer mailing list would be a good idea if you are sending contributions.
+</para>
+</sect1>
+</chapter> \ No newline at end of file
diff --git a/developer-doc/phb/test-examples.docbook b/developer-doc/phb/test-examples.docbook
new file mode 100644
index 0000000..43f9d7f
--- /dev/null
+++ b/developer-doc/phb/test-examples.docbook
@@ -0,0 +1,231 @@
+<appendix id="test-examples">
+<title>Unit Test Examples</title>
+<para>
+This appendix contains an example of a
+<link linkend="test-header-example">unit test header file listing</link> and a
+<link linkend="test-source-example">unit test source file listing</link> as well
+as a
+<link linkend="test-container-example">unit test container source file listing</link>.
+</para>
+
+<section id="test-header-example">
+<title>Unit Test Header File Example</title>
+<screen>
+
+/***************************************************************************
+ mymoneyexceptiontest.h
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef __MYMONEYEXCEPTIONTEST_H__
+#define __MYMONEYEXCEPTIONTEST_H__
+
+#include &lt;cppunit/extensions/HelperMacros.h&gt;
+
+#define private public
+#include "mymoneyutils.h"
+#include "mymoneyexception.h"
+#undef private
+
+class MyMoneyExceptionTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(MyMoneyExceptionTest);
+ CPPUNIT_TEST(testDefaultConstructor);
+ CPPUNIT_TEST(testConstructor);
+ CPPUNIT_TEST_SUITE_END();
+
+protected:
+public:
+ MyMoneyExceptionTest();
+
+
+ void setUp();
+
+ void tearDown();
+
+ void testDefaultConstructor();
+
+ void testConstructor();
+
+};
+#endif
+</screen>
+</section>
+
+<section id="test-source-example">
+<title>Unit Test Source File Example</title>
+
+<screen>
+
+/***************************************************************************
+ mymoneyexceptiontest.cpp
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "mymoneyexceptiontest.h"
+
+MyMoneyExceptionTest::MyMoneyExceptionTest()
+{
+}
+
+
+void MyMoneyExceptionTest::setUp()
+{
+}
+
+void MyMoneyExceptionTest::tearDown()
+{
+}
+
+void MyMoneyExceptionTest::testDefaultConstructor()
+{
+ MyMoneyException *e = new MYMONEYEXCEPTION("Message");
+ CPPUNIT_ASSERT(e-&gt;what() == "Message");
+ CPPUNIT_ASSERT(e-&gt;line() == __LINE__-2);
+ CPPUNIT_ASSERT(e-&gt;file() == __FILE__);
+ delete e;
+}
+
+void MyMoneyExceptionTest::testConstructor()
+{
+ MyMoneyException *e = new MyMoneyException("New message",
+ "Joe's file", 1234);
+ CPPUNIT_ASSERT(e-&gt;what() == "New message");
+ CPPUNIT_ASSERT(e-&gt;line() == 1234);
+ CPPUNIT_ASSERT(e-&gt;file() == "Joe's file");
+ delete e;
+}
+
+</screen>
+
+</section>
+
+<section id="test-container-example">
+<title>Unit Test Container Source File Example</title>
+<para>
+This test environment also contains a reference to a memory usage checker
+which can safely be ignored. It is also contained in the &app; environment
+and is a great help if looking for memory leaks. Also notice the usage of
+the C++ preprocessor directive <emphasis>#ifdef HAVE_LIBCPPUNIT</emphasis>
+to avoid compile errors when CPPUNIT is not installed.
+</para>
+<para>
+Another specialty that is not required by CPPUNIT is the specific
+TestProgressListener. It is used here to print the name of the fixture that
+is currently running. Since this method is called upon start of each
+test case, some logic is necessary to print the name only once.
+</para>
+<screen>
+
+
+/***************************************************************************
+ autotest.cpp
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "config.h"
+
+#include &lt;iostream&gt;
+
+#ifdef HAVE_LIBCPPUNIT
+
+#include "cppunit/TextTestRunner.h"
+#include "cppunit/TextTestResult.h"
+#include "cppunit/TestSuite.h"
+#include "cppunit/extensions/HelperMacros.h"
+
+#include "mymoneyexceptiontest.h"
+
+#include "cppunit/TextTestProgressListener.h"
+
+class MyProgressListener : public CppUnit::TextTestProgressListener
+{
+ void startTest(CppUnit::Test *test) {
+ QString name = test-&gt;getName().c_str();
+ name = name.mid(2); // cut off first 2 chars
+ name = name.left(name.find('.'));
+ if(m_name != name) {
+ if(m_name != "")
+ cout &lt;&lt; endl;
+ cout &lt;&lt; "Running: " &lt;&lt; name &lt;&lt; endl;
+ m_name = name;
+ }
+ }
+private:
+ QString m_name;
+};
+
+#endif
+
+
+int
+main(int argc, char** argv)
+{
+#ifdef HAVE_LIBCPPUNIT
+
+#ifdef _CHECK_MEMORY
+ _CheckMemory_Init(0);
+#endif
+
+ CPPUNIT_TEST_SUITE_REGISTRATION(MyMoneyExceptionTest);
+
+ CppUnit::TestFactoryRegistry &amp;registry =
+ CppUnit::TestFactoryRegistry::getRegistry();
+ CppUnit::Test *suite = registry.makeTest();
+
+ CppUnit::TextTestRunner* runner = new CppUnit::TextTestRunner();
+ runner-&gt;addTest(suite);
+
+ MyProgressListener progress;
+ runner-&gt;eventManager().addListener(&amp;progress);
+ runner-&gt;run();
+
+ delete runner;
+
+#ifdef _CHECK_MEMORY
+ chkmem.CheckMemoryLeak( true );
+ _CheckMemory_End();
+#endif // _CHECK_MEMORY
+
+#else
+ std::cout &lt;&lt; "libcppunit not installed. no automatic tests available."
+ &lt;&lt; std::endl;
+#endif // HAVE_LIBCPPUNIT
+ return 0;
+}
+</screen>
+
+</section>
+</appendix>
diff --git a/developer-doc/phb/translation.docbook b/developer-doc/phb/translation.docbook
new file mode 100644
index 0000000..2a171f6
--- /dev/null
+++ b/developer-doc/phb/translation.docbook
@@ -0,0 +1,248 @@
+
+<chapter id="translation">
+<chapterinfo>
+<authorgroup>
+<author>
+ <firstname>J.</firstname>
+ <surname>Rundholz</surname>
+</author>
+</authorgroup>
+</chapterinfo>
+
+<title>Translation</title>
+<para>
+This chapter should give any one (in particular people who are not developers) a first overview on how they can translate &app; into another language. The information given here is not only valid for &app; but as serves for the translation of any KDE project.
+</para>
+
+
+<sect1 id="files">
+<title>Basics</title>
+
+<para>
+First of all you need to get the required files. There are two types of files which might be of interest to you.
+Files ending in <literal role="extension">.pot</literal> and files ending
+in <literal role="extension">.po</literal>.
+</para>
+<para>
+Files ending in <literal role="extension">.pot</literal> are the source
+for the translation.
+They only contain the English texts you need to translate and are generated
+for each release of the project. The one for &app; is named <filename>kmymoney2.pot</filename>.
+The po file contains the English and the translated text, e.g. German.
+There might be two cases: The first case you can't find a po file for your
+language or the second there is already a po file for your language available.
+In the latter case you can already start &app; in your language, but may be the
+translation is not complete or you simply want to improve the translation.
+
+Now you need to get these files from the project's &cvs; repository.
+You don't need to worry what exactly &cvs; does, for a translater it
+is more or less only a file system from where
+you can download the files you need. For &app; you can either go to the &cvs;
+page and call the &cvs; web front end or follow
+<ulink url="http://kmymoney2.cvs.sourceforge.net/kmymoney2/kmymoney2/po/?pathrev=rel-0-8-branch">this link</ulink>.
+I would recommend to download the pot and po file of the latest stable version
+(at the moment 0.8), not any older files and not the one which is under
+development at the moment. In order to test your translation later you should
+run the same version on your box.
+
+For the actual translation I recommend the program <application>kbabel</application>.
+Other people use <application>emacs</application>, as usual it is just a personal
+choice. All examples given here are based on <application>kbabel</application>.
+
+</para>
+
+<sect2 id="po-file">
+<title>How to get your po file</title>
+<para>
+As explained earlier the actual translation is done by modifying the po file.
+The next step is to create a po file to start the translation.
+</para>
+
+<sect3 id="no-po">
+<title>No po file for my language available</title>
+<para>
+That's the most simple case: Rename <filename>kmymoney2.pot</filename> to
+<filename><emphasis>lang</emphasis>.po</filename> where <emphasis>lang</emphasis>
+is your language code e.g. <emphasis>de</emphasis> for German.
+</para>
+
+</sect3>
+
+<sect3 id="po">
+<title>po file for my language available</title>
+<para>
+In case you already have a language file it is advisable that you check how
+the English text entries in that file differ from the English texts in the
+pot file. Maybe for some reason the pot file is further developed than the
+po file. In this case even though you would translate the whole po file you
+would still see some English texts in &app;. If you know that this is not
+the case, i.e. your po file has all the latest English text inside, you can
+use this one for translation. The minimum check you should perform is to
+compare the number of messages. Just load the po and the pot file into kbabel
+and you see how many messages you have in each file.
+</para>
+<para>
+In case that both files differ you should merge them (since
+you don't want to lose someone else's work). Merging can be
+done using <application>kbabel</application> very easily .
+
+<itemizedlist>
+<listitem>
+<para>
+Copy <filename>kmymoney2.pot</filename> to <filename>lang-new.po</filename>
+and open this file with <application>kbabel</application>.
+</para>
+</listitem>
+<listitem>
+<para>
+In <application>kbabel</application> choose
+<guimenu>
+Tools
+<guimenuitem>Rough translation</guimenuitem>
+</guimenu>
+from the menu. A dialog pops up. Choose the following options:
+<itemizedlist>
+<listitem><para>What to translate::Untranslated Entries</para></listitem>
+<listitem><para>Options::Mark changed entries as fuzzy</para></listitem>
+<listitem><para>Dictionaries::Use::PO Compendium</para></listitem>
+</itemizedlist>
+Don't select anything else.
+</para>
+</listitem>
+<listitem>
+<para>
+Now press the "configure" button. In the next dialog enter the path to your
+already existing po file. Furthermore set the options:
+<itemizedlist>
+<listitem><para>Options::Case sensitive</para></listitem>
+<listitem><para>A text matches if::Equal to searched text</para></listitem>
+</itemizedlist>
+Don't select anything else.
+</para>
+</listitem>
+</itemizedlist>
+<caution>
+The original po file could have entries marked as "fuzzy", that means that
+the translation might be not very good or even horribly wrong. After you
+did this merger process you lose this information. It might be a good
+idea to translate all fuzzy strings in the old, unmerged po file before
+you do this explained merging process.
+</caution>
+</para>
+</sect3>
+</sect2>
+</sect1>
+<sect1 id="translating">
+<title>Translating</title>
+<para>
+Now you can take the new po file and start the translation with kbabel
+or any other tool. It might be a good idea to create a glossary of terms
+whenever you use a technical term. Such a glossary is available for the
+German translation, check it out to see how it should look like. You might
+want to check the gnucash project if they have already a glossary for your
+language. This would be a starting point for you, but please extend it.
+</para>
+</sect1>
+<sect1 id="testing">
+<title>Test your work</title>
+<para>
+Last but not least you need to check your translation, especially if the
+translated text fits into the context. Also you shouldn't be surprised
+how many typos and mistakes you make while translating the text. Check
+it carefully! Now a few steps you should perform to test your translation
+(after you used a spellchecker etc.).
+</para>
+<para>
+First you can run the command
+
+<screen>
+
+ <prompt>thb:~&gt; </prompt><userinput><command>msgcat</command> <option>--width=77</option> <option>-o</option> <replaceable>lang-output.po</replaceable> <replaceable>lang-input.po</replaceable></userinput>
+
+</screen>
+
+as root. This command just restricts the length of each line to 77
+characters. This is only necessary if you want to read the raw po file in
+some text editor. Some people who do proof reading prefer this instead of
+endless lines. The number of characters depends of some personal taste. I
+prefer about 50 characters per line, then a diff file can be displayed
+without vertical scrolling.
+</para>
+<para>
+Now run as root the command
+
+<screen>
+
+ <prompt>thb:~&gt; </prompt><userinput><command>msgfmt</command> <option>-vvv</option> <replaceable>lang.po</replaceable> kmymoney2.mo</userinput>
+
+</screen>
+
+The mo file is the language file you need for your program. You just need
+to replace the original mo file of &app; with this one (perform a backup of
+the original file before). The location of your mo file depends on your
+distro, for SuSE it is <filename>/opt/kde3/share/local/lang/LC_MESSAGES</filename> and for Debian
+<filename>/usr/share/local/lang/LC_MESSAGES</filename>. For lang you can use
+any string, like de or even de_test if you want to run it with a test
+language. Be aware that &app; uses some text strings from KDE and since they
+are probably not available with de_test you still might see some English
+text. If you can't find the file on your harddrive try either
+
+<screen>
+
+ <prompt>thb:~&gt; </prompt><userinput><command>find</command> / <option>-name</option> kmymoney2.mo</userinput>
+
+</screen>
+
+as root or if you used an <command>rpm</command> file for the
+installation you can run
+
+<screen>
+
+ <prompt>thb:~&gt; </prompt><userinput><command>rpm</command> <option>-q kmymoney2</option> <option>--filesbypkg</option></userinput>
+
+</screen>
+
+</para>
+<para>
+In order to run &app; either start it as usual (if your default KDE language
+is the language you want to test) or call it via
+
+<screen>
+
+ <prompt>thb:~&gt; </prompt><userinput>KDE_LANG=de <command>kmymoney2</command></userinput>
+
+</screen>
+
+from a <application>konsole</application> or
+<application>xterm</application>.
+</para>
+</sect1>
+<sect1 id="merging">
+<title>Merging an old po file with an updated pot file</title>
+<para>
+There are cases when the pot file is regenerated before you can send your
+updated po file. If you just commit your file after that, it will show up
+as old in the translation stats, because it references an outdated pot file.
+</para>
+<para>
+To fix this, you have to merge the po file with the updated pot file.
+
+First, get the latest pot file. And in the po folder, run this command.
+
+<screen>
+
+ <prompt>thb:~/kmymoney2/po&gt; </prompt><userinput><command>make</command> <option>-f</option> <option>../admin/Makefile.common</option> <option>package-merge</option> <option>POFILES=<replaceable>"de.po"</replaceable></option> <option>PACKAGE=kmymoney2</option></userinput>
+
+</screen>
+
+You can merge multiple po files at the same time. Just list them in the POFILES option.
+
+<screen>
+
+ <prompt>thb:~/kmymoney2/po&gt; </prompt><userinput><command>make</command> <option>-f</option> <option>../admin/Makefile.common</option> <option>package-merge</option> <option>POFILES=<replaceable>"de.po es.po"</replaceable></option> <option>PACKAGE=kmymoney2</option></userinput>
+
+</screen>
+
+</para>
+</sect1>
+</chapter>
diff --git a/developer-doc/phb/unit-test.docbook b/developer-doc/phb/unit-test.docbook
new file mode 100644
index 0000000..7208c20
--- /dev/null
+++ b/developer-doc/phb/unit-test.docbook
@@ -0,0 +1,474 @@
+<chapter id="unit-test">
+<title>Unit Testing</title>
+<para>
+If this project handbook would have been for a professional project (with
+professional I mean, a project that people make money with), I would have
+written
+</para>
+
+<caution>
+<para>
+<emphasis>Unit tests must be supplied by the developer
+with the classes/source-code he checks into the repository!</emphasis>.
+</para>
+</caution>
+
+<para>
+Since this is
+the handbook for a voluntary work (which is not less professional than any
+other project), I replace the above sentence with
+</para>
+
+<note>
+<para>
+<emphasis>Each developer in this project is strongly encouraged to develop
+unit tests for the code he or she develops and make them available to
+ the project team!</emphasis>.
+</para>
+</note>
+
+<sect1 id="why-unit-testing">
+<title>Why unit testing?</title>
+
+<para>
+Before I can give an answer to this question, I should explain what unit
+testing is about. I do not cover all relevant aspects here nor do I start a
+discussion of the various aspects of unit testing. If you want to read more
+about the details of unit testing, the philosophy behind it and about the
+various tools available, please visit the project pages of JUnit and
+<ulink url="http://cppunit.sourceforge.net/">CPPUNIT</ulink>.
+The following explanation describes what unit testing is:
+</para>
+
+<para>
+For each class developed in a project, an accompanying test container
+is developed when the interface of
+the class is defined but before the implementation of the class starts. The
+test container consists out of testcases that perform all necessary tests
+on the class while verifying the results. One or more of these test
+containers (for more than one class) form a test suite.
+</para>
+
+<para>
+Your might think, that it is strange to first define the interface, then
+develop the tests and then start the development of the actual code, but it
+has shown, that this approach has a couple of interesting side-effects:
+
+<itemizedlist>
+<listitem>
+<para>
+The developer spends time to think about how to test his implementation
+before he actually works on the implementation. This leads to the fact,
+that while working on the implementation, he already knows how his code
+will be tested.
+</para>
+</listitem>
+
+<listitem>
+<para>
+A clear definition of the <emphasis>end of implementation</emphasis> exists
+due to the fact, that the testcases will all fail before the beginning of
+the implementation phase. Once implementation proceeds, more and more
+testcases will pass. When they all pass, the development is finished.
+</para>
+</listitem>
+
+<listitem>
+<para>
+Since the tests will run automated and will be re-run very often during the
+development cycle, a lot of problems will be caught very early on. This
+reduces the number of problems found during integration of the project.
+Believe me, there will be plenty left!
+</para>
+</listitem>
+</itemizedlist>
+</para>
+
+<para>
+Now, the list of all these side-effects is actually the answer to the
+question <emphasis>Why unit testing?</emphasis> or does anyone have a
+argument against it? I agree, that in some cases automated unit testing is
+hard to achieve (e.g. for GUI related code) but I found, that whenever it
+is possible to introduce automated unit tests, the benefit is huge.
+</para>
+</sect1>
+
+<sect1 id="unit-testing-in-kmm">
+<title>Unit testing in &app;</title>
+<para>
+Just about the time, when the &app; project underwent a radical change of
+it's inner business logic (the KMyMoney engine), I read an article about
+the existance of a unit test container for C++ projects named
+<ulink url="http://cppunit.sourceforge.net/">CPPUNIT</ulink>.
+In
+discussions with my colleagues at work, I got the impression, that this
+would be something worth to look into. So I sat down and wrote the first
+test cases for existing code to get a feeling for what is required.
+</para>
+
+<para>
+I found it annoying to write test cases for code that existed and was
+believed to work (version 0.4 of the project). When the decission was made
+to start with the 0.5 development branch, I started working on the new
+engine code that should introduce a clear interface between the business
+logic and the user interface. Another design goal was to write the engine
+in such a way, that it is not based on any KDE code which the old one was.
+The second goal to free it from Qt based code was not that easy and was
+skipped by the project team at that time.
+</para>
+
+<para>
+Even if it was hard for me at first to follow the above laid out principle
+to design the interface, write the test code and then start with the
+implementation, I followed this trail. It has proven to be very valuable.
+Once the interface was designed, I started thinking in a different manner:
+How can I get this class to fail? What strange things could I do to the
+code from the outside? Those were the design drivers for the test code. And
+in fact, this thinking changed the way I actually implemented the code, as
+I knew there was something that would check all these things over and over
+again automatically.
+</para>
+
+<para>
+A lot of code was implemented and when I was almost done with the first
+shot of the implementation, discussion came up on the developers mailing
+list about a feature called <emphasis>double entry accounting</emphasis>
+that was requested for &app; by a few people. The engine I wrote up to that
+point in time did not cover the aspects of double entry accounting at all,
+though a few things matched. After some time of discussions, we became a
+better understanding of the matter and I changed the code to cover double
+entry accounting. Some of the classes remained as they were, others had to
+be adopted and yet others rewritten entirely. The testcode had to be
+changed as well due to the change in the interfaces, but not the logic
+of the tests. Most of the thoughts how to uncover flaws remained.
+</para>
+
+<para>
+And that is another reason, why unit testing is so useful: You can change
+your internal implementation and still get a feeling, if your code is
+working or not. And believe me: even if some changes are small, one usually
+oversees a little side-effect here and there. If one has good unit tests
+this is not a problem anymore, as those side-effects will be uncovered and
+tested.
+</para>
+
+<para>
+During the course of implementing the engine, I wrote more than 100
+testcases. Each testcase sets up a testenvironment for the class and tests
+various parameters against the class' methods in this environment in so
+called test steps.
+Exceptions are also tested to be thrown. The testcases handle unexpected
+exceptions as well as expected exceptions that do not occur.
+</para>
+</sect1>
+
+<sect1 id="unit-testing-howto">
+<title>Unit testing HOWTO</title>
+<para>
+This section of the developer handbook should give some examples on how to
+organize test cases and how to setup a test environment.
+</para>
+
+<para>
+My examples will all be based on the code of the &app; engine found in the
+subdirectory <command>kmymoney2/kmymoney2/mymoney</command> and it's
+ subdirectory <command>storage</command>. A
+single executable exists that contains all the test code for the engine.
+It's called <command>autotest</command> and resides in the mymoney
+subdirectory.
+</para>
+
+<sect2 id="unit-test-integration">
+<title>Integration of CPPUNIT into the &app; project</title>
+<para>
+The information included in the following is based on version 1.8.0 of
+CPPUNIT. The &app; build system has been enhanced to check for it's
+presence. Certain definitions setup by
+<emphasis>automake/configure</emphasis> allow to compile the project
+without unit testing support.
+<caution>
+<para>
+This is not the recommended way for developers!
+</para>
+</caution>
+</para>
+
+<para>
+If code within test environments is specific to the presence of CPPUNIT it
+can be included in the following #ifdef primitive:
+
+<screen>
+
+#ifdef HAVE_LIBCPPUNIT
+// specific code that should only be compiled,
+// if CPPUNIT >= 1.8.0 is present
+#endif
+
+
+</screen>
+For an example see the
+<link linkend="test-container-example">Unit Test Container Source File
+Example</link>.
+</para>
+
+<para>
+The same applies for directives that are used in
+<command>Makefile.am</command> files. The primitive to be used there is as
+follows:
+
+<screen>
+
+if CPPUNIT
+
+# include automake-directives here, that should be evaluated
+# only, when CPPUNIT is present
+
+else
+
+# include automake directives here, that should be evaluated
+# only, when CPPUNIT is not present.
+
+endif
+
+
+</screen>
+For an example see <command>kmymoney2/mymoney/Makefile.am</command>.
+</para>
+</sect2>
+
+<sect2 id="unit-test-naming">
+<title>Naming conventions</title>
+<para>
+The test containers are also classes. Throughout CPPUNIT, the test
+containers are referred to as <emphasis>test fixtures</emphasis>. In the
+following, I use both terms.
+For a given class <emphasis>MyMoneyAbc</emphasis>, which
+resides in the files <command>mymoneyabc.h</command> and
+<command>mymoneyabc.cpp</command>,
+the test container is named <emphasis>MyMoneyAbcTest</emphasis> and resides
+in the files
+<command>mymoneyabctest.h</command> and
+<command>mymoneyabctest.cpp</command> in the same directory.
+The test container must be derived
+publicaly from <command>CppUnit::TestFixture</command>.
+Each testcase is given a
+descriptive name (e.g. EmptyConstructor) and I found it useful to prefix
+this name with the literal 'test' resulting into something like
+testEmptyConstructor.
+</para>
+
+</sect2>
+<sect2 id="unit-test-includes">
+<title>Necessary include files</title>
+<para>
+In order to use the functionality provided by CPPUNIT, one has to include
+some information provided with CPPUNIT in the test environment. This is
+done with the following include primitive as one of the first things in the
+header file of the test case container (e.g. mymoneyabctest.h):
+
+<screen>
+
+#include &lt;cppunit/extensions/HelperMacros.h&gt;
+
+</screen>
+</para>
+</sect2>
+
+<sect2 id="unit-test-private">
+<title>Accessing private members</title>
+<para>
+For the verification process it is sometimes necessary to look at some
+internal states of the object under test. Usually, all this information is
+declared private in the class and only accessible through setter and getter
+methods. Cases exist, where these methods are not implemented on purpose
+and thus accessing the information from the test container is not possible.
+</para>
+
+<para>
+Various mechanism have been developed all with pros and cons. Throughout
+the test containers I wrote, I used the method of redefining the specifier
+<emphasis>private</emphasis> through <emphasis>public</emphasis> but only
+for the time when reading the header file of the object under test. This can
+easily be done by the C++ preprocessor. The following example shows how to
+do this:
+
+<screen>
+
+#define private public
+#include "mymoneyabc.h"
+#undef private
+
+
+</screen>
+
+The same applies to protected members. Just add a line containing
+<emphasis>#define protected public</emphasis> before including the class
+definition and a line containing <emphasis>#undef protected</emphasis>
+right after the inclusion line.
+</para>
+</sect2>
+
+<sect2 id="unit-test-methods">
+<title>Standard methods for each testcase</title>
+<para>
+Three methods must exist for each test fixture. These are a default
+constructor, setUp and tearDown. I think, it is not necessary to explain
+the default constructor here. SetUp and tearDown have a special function
+within the test cases. setUp() will be called before the execution of any
+test case in the test fixture. tearDown() will be called after the execution
+of the test case, no matter if the test case passes or fails. Thus setUp()
+is used to perform initialization necessary for each test case in the
+fixture and tearDown() is used to clean things up. setUp() and tearDown()
+should be written in such a way, that all objects created
+through a test case should be removed by tearDown(), i.e. the environment
+is restored exactly to the state it was before the call to setUp().
+
+<note>
+<para>
+This is not always the case within the testcase for &app;. Espacially when
+using a database as the permanent storage things have to be overhauled for
+e.g. MyMoneyFileTest.
+</para>
+</note>
+
+</para>
+
+<para>
+CPPUNIT comes with a set of macros that help writing testcases. I cover
+them here briefly. If you wish a more detailed description, please visit
+the
+<ulink url="http://cppunit.sourceforge.net/">CPPUNIT</ulink> project
+homepage.
+</para>
+</sect2>
+
+<sect2 id="test-macro-assert">
+<title>CPPUNIT_ASSERT</title>
+<para>
+This is the macro used at most throughout the test cases. It checks, that a
+given assumption is true. If it is not, the test case fails and a
+respective message will be printed at the end of the testrun.
+</para>
+
+<para>
+CPPUNIT_ASSERT has a single argument which is a boolean expression. The
+expression must be true in order to pass the test. If it is false, the test
+case fails and no more code of the test case is executed. The following
+example shows how the macro is used:
+<screen>
+
+ int a, b;
+ a = 0, b = 1;
+ CPPUNIT_ASSERT(a != b);
+ a = 1;
+ CPPUNIT_ASSERT(a == b);
+
+
+</screen>
+The example shows, how two test steps are combined. One checks the
+inequality of two integers, one the equality of them. If either one does
+not work, the test case fails.
+</para>
+<para>
+See the
+<link linkend="test-source-example">Unit Test Source File Example</link>
+for a demonstration of it's use.
+</para>
+
+</sect2>
+
+<sect2 id="test-macro-fail">
+<title>CPPUNIT_FAIL</title>
+<para>
+This is the macro used when the execution of a test case reaches a point it
+should not. This usually happens, if exceptions are thrown or not thrown.
+</para>
+
+<para>
+CPPUNIT_FAIL has a single argument which is the error message to be
+displayed. The following example shows how the macro is used:
+<screen>
+
+ int a = 1, b = 0;
+ try {
+ a = a / b;
+ CPPUNIT_FAIL("Expected exception missing!");
+ } catch (exception *e) {
+ delete e;
+ }
+
+ try {
+ a = a / a;
+ } catch (exception *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception!");
+ }
+
+
+</screen>
+The example shows, how two test steps are combined. One checks the
+occurance of an exception, the other one that no exception is thrown.
+If either one does not work, the test case fails.
+</para>
+
+</sect2>
+
+<sect2 id="test-macro-testsuite-start">
+<title>CPPUNIT_TEST_SUITE</title>
+<para>
+This macro is used as the first thing in the declaration of the test fixture.
+ A single argument is the name of the class for the test fixture. It starts
+the list of test cases in this fixture defined by the
+<link linkend="test-macro-testcase">CPPUNIT_TEST</link> macro. The list must be
+terminated using the <link
+linkend="test-macro-testsuite-end">CPPUNIT_TEST_SUITE_END</link> macro.
+</para>
+<para>
+See the
+<link linkend="test-header-example">Unit Test Header File Example</link>
+for a demonstration of it's use.
+</para>
+</sect2>
+
+<sect2 id="test-macro-testsuite-end">
+<title>CPPUNIT_TEST_SUITE_END</title>
+<para>
+This macro terminates the list of test cases in a test fixture. It has no
+arguments.
+</para>
+<para>
+See the
+<link linkend="test-header-example">Unit Test Header File Example</link>
+for a demonstration of it's use.
+</para>
+</sect2>
+
+<sect2 id="test-macro-testcase">
+<title>CPPUNIT_TEST</title>
+<para>
+This macro defines a new test case within a test fixture. As argument it
+takes the name of the test case.
+</para>
+<para>
+See the
+<link linkend="test-header-example">Unit Test Header File Example</link>
+for a demonstration of it's use.
+</para>
+</sect2>
+
+<sect2 id="test-macro-registration">
+<title>CPPUNIT_TEST_SUITE_REGISTRATION</title>
+<para>
+This macro registers a test fixture within a test suite. It takes the name
+of the test fixture as argument.
+</para>
+<para>
+See the
+<link linkend="test-container-example">Unit Test Container Source File
+Example</link>
+for a demonstration of it's use.
+</para>
+</sect2>
+
+</sect1>
+</chapter>
diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt
new file mode 100644
index 0000000..314d65c
--- /dev/null
+++ b/doc/CMakeLists.txt
@@ -0,0 +1,17 @@
+INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
+
+# Macro defined in FindMEINPROC.cmake handles building and installing
+ADD_DOCS(kmymoney2 en)
+
+# Manpages we have to handle manually
+SET(_in ${CMAKE_CURRENT_SOURCE_DIR}/en/kmymoney2.1)
+SET(_out ${CMAKE_CURRENT_BINARY_DIR}/kmymoney2.1.gz)
+
+ADD_CUSTOM_COMMAND(OUTPUT ${_out}
+ COMMAND gzip
+ ARGS -9 -c -N ${_in} > ${_out}
+ DEPENDS ${_in})
+INSTALL(FILES ${_out}
+ DESTINATION ${MAN_INSTALL_DIR}/man1)
+ADD_CUSTOM_TARGET(manpages ALL DEPENDS ${_out})
+ADD_DEPENDENCIES(documentation manpages)
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644
index 0000000..6063bd6
--- /dev/null
+++ b/doc/Makefile.am
@@ -0,0 +1,6 @@
+####### kdevelop will overwrite this part!!! (begin)##########
+
+SUBDIRS = en
+
+####### kdevelop will overwrite this part!!! (end)############
+
diff --git a/doc/en/Makefile.am b/doc/en/Makefile.am
new file mode 100644
index 0000000..e8c5bde
--- /dev/null
+++ b/doc/en/Makefile.am
@@ -0,0 +1,160 @@
+KDE_OPTIONS = noautodist
+
+DOCBOOK_FILES = credits.docbook details-accounts.docbook details-categories.docbook details-files.docbook details-formats.docbook details-hbciofx.docbook details-impexp.docbook details-institutions.docbook details-integrity.docbook details-investments.docbook details-ledgers.docbook details-loans.docbook details-payees.docbook details-reconciliation.docbook details-reports.docbook details-schedules.docbook details-search.docbook details-settings.docbook details-transactions.docbook details-widgets.docbook firsttime.docbook index.docbook introduction.docbook otherdoc.docbook views-accounts.docbook views-categories.docbook views-home.docbook views-investments.docbook views-ledgers.docbook views-outbox.docbook views-payees.docbook views-schedules.docbook views-institutions.docbook views-reports.docbook whatsnew.docbook details-currencies.docbook reference.docbook details-database.docbook makemostof.docbook details-budgets.docbook details-forecast.docbook
+
+SCREENSHOT_FILES = accountdropdown.png accounts_view.png newacct.png accwiz1.png accwiz2.png accwiz3.png accwiz4.png accwiz5.png accwiz6.png accwiz7.png accwiz8.1.png accwiz8.2.png accwiz8.3.png accwiz8.4.png accwiz8.5.png accwiz9.png accwiz10.png calendarview.png categories.png categories_view.png categoryedit.png confirmenter.png default_prompt.png enterschedule.png finddlg.png home_view.png institutions_view.png investments_view.png kmt.png ledgers.png ledgers_view.png ledgerview-numbered.png mainwindow_numbered.png newfile.png newinst.png new.png newsched_numbered.png outbox_view.png payees_view.png payeeview.png qifopen.png reconcile.png reports_view.png schedcaltypes.png schedpopup.png schedule_view.png scheduleview.png tipofday.png transaction_find.png transactionform.png translist.png schedmonthday.png find-account.png find-amount.png find-category.png find-date.png find-details.png find-payee.png find-text.png payee_widget.png category_widget.png value_widget.png date_widget.png institution_view.png institution_options.png account_options.png account_edit.png payee_info.png payee_match.png payee_history.png split_transaction.png cleared_state.png transactionform-off.png ledger_more.png select_currency.png reconcile1.png reconcile2.png reconcile3.png reconcile4.png qif_report.png qifimportverify.png investment-transactionform.png investment-onlineupdate.png investment-currencywarning.png investment-exchangerateeditor.png gnucash-import_options.png gnucash-report.png gnucash-select_price_source.png currency_newpriceentry.png currency_priceeditor.png investments_summarytab.png qifimport-export.png qifimport-qifprofiledate.png qifimport-qifprofileeditor.png report_configuration-reporttab.png report_configuration-rowscolumns.png reports_view-all.png select_database.png budgets_view.png forecast_view.png newfile-2.png newfile-3.png newfile-4.png newfile-5.png newfile-6.png
+
+EXTRA_DIST = kmymoney2.1 $(DOCBOOK_FILES)
+
+MOSTLYCLEANFILES = index.cache.bz2 kmymoney2.1.gz index.xml *.aux *.tex *.log **.out *.pdf errorlog *.ps *.html online-manual.tar.bz2
+
+BUILT_SOURCES = index.cache.bz2 kmymoney2.1.gz $(PDF_TARGET)
+
+CHARSET =
+KDE_LANG = en
+KDE_DOCS = kmymoney2 - $(DOCBOOK_FILES) $(SCREENSHOT_FILES)
+
+index.cache.bz2: $(DOCBOOK_FILES) $(KDE_XSL_STYLESHEET) $(SCREENSHOT_FILES)
+ if test -n "$(MEINPROC)"; then echo $(MEINPROC) --check --cache index.cache.bz2 --stylesheet $(KDE_XSL_STYLESHEET) $(srcdir)/index.docbook; $(MEINPROC) --check --cache index.cache.bz2 --stylesheet $(KDE_XSL_STYLESHEET) $(srcdir)/index.docbook; fi
+
+index.html: $(DOCBOOK_FILES) $(KDE_XSL_STYLESHEET) $(SCREENSHOT_FILES)
+ $(MEINPROC) --check --stylesheet `dirname $(KDE_XSL_STYLESHEET)`/kde-nochunk.xsl $(srcdir)/index.docbook --stdout | sed "s/ISO-8859-1/UTF-8/g" > index.html
+
+.PHONY: show preview get-files clear-files web
+preview: index.html
+
+show: preview
+ konqueror index.html
+
+show-local-web: web
+ konqueror online-manual/index.html
+
+web: online-manual/index.xml
+
+online-manual/index.xml: $(DOCBOOK_FILES) $(SCREENSHOT_FILES)
+ if test -x $(abs_top_srcdir)/contrib/splitup-kde-chunk-online; then \
+ rm -rf online-manual common; \
+ mkdir online-manual; \
+ mkdir common; \
+ echo "Creating index.xml"; \
+ $(MEINPROC) --check --stylesheet `dirname $(KDE_XSL_STYLESHEET)`/kde-chunk-online.xsl $(srcdir)/index.docbook -o online-manual/index.xml; \
+ cd online-manual; \
+ $(abs_top_srcdir)/contrib/splitup-kde-chunk-online; \
+ cd ..; \
+ make get-files; \
+ for file in $(SCREENSHOT_FILES); do \
+ cp $$file online-manual; \
+ done; \
+ make clear-files; \
+ cp $(kde_libs_htmldir)/$(KDE_LANG)/common/* common; \
+ fi;
+
+sf-username:
+ @if test -z $(SF_USER); then \
+ echo "The environment variable SF_USER must be set to your"; \
+ echo "SourceForge username and you must have write access"; \
+ echo "to the project space before the upload will work."; \
+ exit 1; \
+ fi;
+
+web-upload: sf-username web ${PDF_TARGET}
+ if test -e common; then \
+ echo "cd htdocs/common" > upload.batch; \
+ echo "rm *" >> upload.batch; \
+ echo lcd common >> upload.batch; \
+ echo "mput *" >> upload.batch; \
+ echo cd ../online-manual >> upload.batch; \
+ echo "rm *" >> upload.batch; \
+ echo lcd ../online-manual >> upload.batch; \
+ echo "mput *.html" >> upload.batch; \
+ echo "mput *.png" >> upload.batch; \
+ if test "x$(PDF_TARGET)" != "x"; then \
+ echo "lcd .." >> upload.batch; \
+ echo "cd .." >> upload.batch; \
+ echo "put $(PDF_TARGET)" >> upload.batch; \
+ fi; \
+ echo "Uploading manual files to web.sourceforge.net"; \
+ sftp -b upload.batch $(SF_USER),kmymoney2@web.sourceforge.net; \
+ rm -rf upload.batch; \
+ fi;
+
+# if we're in a VPATH environment, we need to copy all files over
+# to the build directory. Otherwise, we'll get into trouble. Of course
+# we delete them afterwards.
+get-files:
+ if test -n "$(VPATH)" ; then \
+ if test x$(VPATH) != x.; then \
+ for file in $(DOCBOOK_FILES); do \
+ cp $(srcdir)/$$file .; \
+ chmod +w $$file; \
+ if test -n $(CHARSET); then \
+ recode utf-8..$(CHARSET) $$file; \
+ fi \
+ done; \
+ for file in $(SCREENSHOT_FILES); do \
+ cp $(srcdir)/$$file .; \
+ chmod +w $$file; \
+ done; \
+ fi \
+ fi
+
+clear-files:
+ if test -n "$(VPATH)" ; then \
+ if test x$(VPATH) != x.; then \
+ for file in $(DOCBOOK_FILES) $(SCREENSHOT_FILES); do chmod +w $$file; rm $$file; done; \
+ fi \
+ fi
+
+if GENERATE_PDF
+PDF_TARGET = kmymoney-user.pdf
+
+kmymoney-user.pdf: $(DOCBOOK_FILES) $(SCREENSHOT_FILES)
+ $(MAKE) get-files
+ $(MEINPROC) --check --stylesheet `dirname $(KDE_XSL_STYLESHEET)`/kde-nochunk.xsl $(srcdir)/index.docbook -o index.html;
+ recode utf8..latin1 index.html
+ html2ps -o kmymoney-user.ps -n index.html
+ ps2pdf kmymoney-user.ps kmymoney-user.pdf
+ rm index.html kmymoney-user.ps
+ $(MAKE) clear-files
+endif
+
+
+
+
+# The automatic KDE install installs some files,
+# that we don't need, so we remove them immediately.
+# Also install the man pages on this system
+.PHONY: install-docs uninstall-docs
+
+install-data-hook: kmymoney2.1.gz install-docs
+ -rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmymoney2/kmymoney2.1
+ $(mkinstalldirs) $(DESTDIR)$(mandir)/man1/
+ $(INSTALL_DATA) kmymoney2.1.gz $(DESTDIR)$(mandir)/man1/kmymoney2.1.gz
+
+kmymoney2.1.gz: kmymoney2.1
+ gzip -9 -c -N $(top_srcdir)/$(subdir)/kmymoney2.1 > kmymoney2.1.gz
+
+uninstall-hook: uninstall-docs
+ -rm -f $(DESTDIR)$(mandir)/man1/kmymoney2.1.gz
+
+#
+# The following two rules are copied from an 'am_edit' generated
+# version. Since we do not use the automatic generated version to
+# avoid distribution of unwanted files, we add them here manually
+#
+install-docs:
+ $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmymoney2
+ @if test -f index.cache.bz2; then \
+ echo $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmymoney2/; \
+ $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmymoney2/; \
+ elif test -f $(srcdir)/index.cache.bz2; then \
+ echo $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmymoney2/; \
+ $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmymoney2/; \
+ fi
+ -rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmymoney2/common
+ $(LN_S) $(kde_libs_htmldir)/$(KDE_LANG)/common $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmymoney2/common
+
+uninstall-docs:
+ -rm -rf $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/kmymoney2
+
+
diff --git a/doc/en/account_edit.png b/doc/en/account_edit.png
new file mode 100644
index 0000000..84eedc6
--- /dev/null
+++ b/doc/en/account_edit.png
Binary files differ
diff --git a/doc/en/account_options.png b/doc/en/account_options.png
new file mode 100644
index 0000000..539cad9
--- /dev/null
+++ b/doc/en/account_options.png
Binary files differ
diff --git a/doc/en/accountdropdown.png b/doc/en/accountdropdown.png
new file mode 100644
index 0000000..7f5117e
--- /dev/null
+++ b/doc/en/accountdropdown.png
Binary files differ
diff --git a/doc/en/accounts_view.png b/doc/en/accounts_view.png
new file mode 100644
index 0000000..5e783de
--- /dev/null
+++ b/doc/en/accounts_view.png
Binary files differ
diff --git a/doc/en/accwiz1.png b/doc/en/accwiz1.png
new file mode 100644
index 0000000..a409bf1
--- /dev/null
+++ b/doc/en/accwiz1.png
Binary files differ
diff --git a/doc/en/accwiz10.png b/doc/en/accwiz10.png
new file mode 100644
index 0000000..436e249
--- /dev/null
+++ b/doc/en/accwiz10.png
Binary files differ
diff --git a/doc/en/accwiz2.png b/doc/en/accwiz2.png
new file mode 100644
index 0000000..e649133
--- /dev/null
+++ b/doc/en/accwiz2.png
Binary files differ
diff --git a/doc/en/accwiz3.png b/doc/en/accwiz3.png
new file mode 100644
index 0000000..c90fc86
--- /dev/null
+++ b/doc/en/accwiz3.png
Binary files differ
diff --git a/doc/en/accwiz4.png b/doc/en/accwiz4.png
new file mode 100644
index 0000000..44dff8a
--- /dev/null
+++ b/doc/en/accwiz4.png
Binary files differ
diff --git a/doc/en/accwiz5.png b/doc/en/accwiz5.png
new file mode 100644
index 0000000..86c09e2
--- /dev/null
+++ b/doc/en/accwiz5.png
Binary files differ
diff --git a/doc/en/accwiz6.png b/doc/en/accwiz6.png
new file mode 100644
index 0000000..6d2fa61
--- /dev/null
+++ b/doc/en/accwiz6.png
Binary files differ
diff --git a/doc/en/accwiz7.png b/doc/en/accwiz7.png
new file mode 100644
index 0000000..060e2e8
--- /dev/null
+++ b/doc/en/accwiz7.png
Binary files differ
diff --git a/doc/en/accwiz8.1.png b/doc/en/accwiz8.1.png
new file mode 100644
index 0000000..0044434
--- /dev/null
+++ b/doc/en/accwiz8.1.png
Binary files differ
diff --git a/doc/en/accwiz8.2.png b/doc/en/accwiz8.2.png
new file mode 100644
index 0000000..4d88f22
--- /dev/null
+++ b/doc/en/accwiz8.2.png
Binary files differ
diff --git a/doc/en/accwiz8.3.png b/doc/en/accwiz8.3.png
new file mode 100644
index 0000000..a717f44
--- /dev/null
+++ b/doc/en/accwiz8.3.png
Binary files differ
diff --git a/doc/en/accwiz8.4.png b/doc/en/accwiz8.4.png
new file mode 100644
index 0000000..d64d1e4
--- /dev/null
+++ b/doc/en/accwiz8.4.png
Binary files differ
diff --git a/doc/en/accwiz8.5.png b/doc/en/accwiz8.5.png
new file mode 100644
index 0000000..7475437
--- /dev/null
+++ b/doc/en/accwiz8.5.png
Binary files differ
diff --git a/doc/en/accwiz9.png b/doc/en/accwiz9.png
new file mode 100644
index 0000000..0eeb5db
--- /dev/null
+++ b/doc/en/accwiz9.png
Binary files differ
diff --git a/doc/en/budgets_view.png b/doc/en/budgets_view.png
new file mode 100644
index 0000000..4330947
--- /dev/null
+++ b/doc/en/budgets_view.png
Binary files differ
diff --git a/doc/en/calendarview.png b/doc/en/calendarview.png
new file mode 100644
index 0000000..42af95b
--- /dev/null
+++ b/doc/en/calendarview.png
Binary files differ
diff --git a/doc/en/categories.png b/doc/en/categories.png
new file mode 100644
index 0000000..bec37fd
--- /dev/null
+++ b/doc/en/categories.png
Binary files differ
diff --git a/doc/en/categories_view.png b/doc/en/categories_view.png
new file mode 100644
index 0000000..6bcddd1
--- /dev/null
+++ b/doc/en/categories_view.png
Binary files differ
diff --git a/doc/en/category_widget.png b/doc/en/category_widget.png
new file mode 100644
index 0000000..e9b4a39
--- /dev/null
+++ b/doc/en/category_widget.png
Binary files differ
diff --git a/doc/en/categoryedit.png b/doc/en/categoryedit.png
new file mode 100644
index 0000000..3a0c5b1
--- /dev/null
+++ b/doc/en/categoryedit.png
Binary files differ
diff --git a/doc/en/cleared_state.png b/doc/en/cleared_state.png
new file mode 100644
index 0000000..9fa0e32
--- /dev/null
+++ b/doc/en/cleared_state.png
Binary files differ
diff --git a/doc/en/confirmenter.png b/doc/en/confirmenter.png
new file mode 100644
index 0000000..d3c9ece
--- /dev/null
+++ b/doc/en/confirmenter.png
Binary files differ
diff --git a/doc/en/credits.docbook b/doc/en/credits.docbook
new file mode 100644
index 0000000..1bef155
--- /dev/null
+++ b/doc/en/credits.docbook
@@ -0,0 +1,179 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="credits">
+<chapterinfo>
+ <date>2009-08-10</date>
+ <releaseinfo>1.0</releaseinfo>
+</chapterinfo>
+
+<title>Credits</title>
+
+<para>
+ Program Copyright &copy; 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+ The KMyMoney Development Team
+</para>
+
+<para>
+ Documentation Copyright &copy; 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008,
+ 2009 The KMyMoney Development Team
+</para>
+
+<sect1 id="credits.original">
+<title>Original Author</title>
+
+<itemizedlist>
+ <listitem>
+ <formalpara>
+ <title>Michael Edwardes &lt;mte@users.sourceforge.net&gt;</title>
+ <para>
+ Original idea, much intial source code. Project admin.
+ </para>
+ </formalpara>
+ </listitem>
+</itemizedlist>
+</sect1>
+
+<sect1 id="credits.active">
+<title>Active Developers</title>
+
+<itemizedlist>
+ <listitem>
+ <formalpara>
+ <title>Thomas Baumgart &lt;ipwizard@users.sourceforge.net&gt;</title>
+ <para>
+ Release manager and de-facto Maintainer. Core Engine. Project Admin.
+ </para>
+ </formalpara>
+ </listitem>
+
+ <listitem>
+ <formalpara>
+ <title>Tony Bloomfield &lt;tonybloom@users.sourceforge.net&gt;</title>
+ <para>GnuCash Importer. Database support.</para>
+ </formalpara>
+ </listitem>
+
+ <listitem>
+ <formalpara>
+ <title>Robert Wadley &lt;robntina@users.sourceforge.net&gt;</title>
+ <para>Artist. Icons, splash screen, home view. Screen shots.</para>
+ </formalpara>
+ </listitem>
+
+ <listitem>
+ <formalpara>
+ <title>Alvaro Soliverez &lt;asoliverez@users.sourceforge.net&gt;</title>
+ <para>Forecast. Reports.</para>
+ </formalpara>
+ </listitem>
+
+ <listitem>
+ <formalpara>
+ <title>Fernando Vilas &lt;fvilas@users.sourceforge.net&gt;</title>
+ <para>Database support</para>
+ </formalpara>
+ </listitem>
+</itemizedlist>
+
+</sect1>
+<sect1 id="credits.past">
+<title>Developers of Previous Versions</title>
+
+<itemizedlist>
+ <listitem>
+ <formalpara>
+ <title>Ace Jones &lt;acejones@users.sourceforge.net&gt;</title>
+ <para>Reports. OFX Import. Online Quotes. Documentation editor.</para>
+ </formalpara>
+ </listitem>
+
+ <listitem>
+ <formalpara>
+ <title>Kevin Tambascio &lt;ktambascio@users.sourceforge.net&gt;</title>
+ <para>Initial investment support</para>
+ </formalpara>
+ </listitem>
+
+ <listitem>
+ <formalpara>
+ <title>Felix Rodriguez &lt;frodriguez@users.sourceforge.net&gt;</title>
+ <para>Project admin</para>
+ </formalpara>
+ </listitem>
+
+ <listitem>
+ <formalpara>
+ <title>John C &lt;tacoturtle@users.sourceforge.net&gt;</title>
+ <para>Developer</para>
+ </formalpara>
+ </listitem>
+</itemizedlist>
+</sect1>
+
+<sect1 id="credits.special">
+<title>Special Thanks</title>
+
+<itemizedlist>
+ <listitem>
+ <formalpara>
+ <title>Javier Campos Morales &lt;javi_c@users.sourceforge.net&gt;</title>
+ <para>Developer &amp; Artist</para>
+ </formalpara>
+ </listitem>
+
+ <listitem>
+ <formalpara>
+ <title>Laurent Montel &lt;montel@kde.org&gt;</title>
+ <para>Patches</para>
+ </formalpara>
+ </listitem>
+
+ <listitem>
+ <formalpara>
+ <title>Roger Lum &lt;rogerlum@gmail.com&gt;</title>
+ <para>Documentation</para>
+ </formalpara>
+ </listitem>
+
+ <listitem>
+ <formalpara>
+ <title>Darin Strait &lt;darin.strait@ashdar-partners.com&gt;</title>
+ <para>Documentation</para>
+ </formalpara>
+ </listitem>
+
+ <listitem>
+ <formalpara>
+ <title>Cristian Oneţ &lt;onet.cristian@gmail.com&gt;</title>
+ <para>Patches and Plugins</para>
+ </formalpara>
+ </listitem>
+
+ <listitem>
+ <formalpara>
+ <title>Allan Anderson &lt;aganderson@ukonline.co.uk&gt;</title>
+ <para>Patches</para>
+ </formalpara>
+ </listitem>
+
+ <listitem>
+ <formalpara>
+ <title>Colin Wright &lt;cdwright@gwi.net&gt;</title>
+ <para>Patches and Documentation</para>
+ </formalpara>
+ </listitem>
+
+ <listitem>
+ <formalpara>
+ <title>Jack Ostroff &lt;ostroffjh@users.sourceforge.net&gt;</title>
+ <para>Documentation</para>
+ </formalpara>
+ </listitem>
+</itemizedlist>
+
+<!-- TRANS:CREDIT_FOR_TRANSLATORS -->
+
+&underFDL; <!-- FDL: do not remove -->
+
+&underGPL; <!-- GPL License -->
+</sect1>
+</chapter>
diff --git a/doc/en/currency_newpriceentry.png b/doc/en/currency_newpriceentry.png
new file mode 100644
index 0000000..84af3c1
--- /dev/null
+++ b/doc/en/currency_newpriceentry.png
Binary files differ
diff --git a/doc/en/currency_priceeditor.png b/doc/en/currency_priceeditor.png
new file mode 100644
index 0000000..cd46ec9
--- /dev/null
+++ b/doc/en/currency_priceeditor.png
Binary files differ
diff --git a/doc/en/date_widget.png b/doc/en/date_widget.png
new file mode 100644
index 0000000..c811bd3
--- /dev/null
+++ b/doc/en/date_widget.png
Binary files differ
diff --git a/doc/en/default_prompt.png b/doc/en/default_prompt.png
new file mode 100644
index 0000000..6ae9168
--- /dev/null
+++ b/doc/en/default_prompt.png
Binary files differ
diff --git a/doc/en/details-accounts.docbook b/doc/en/details-accounts.docbook
new file mode 100644
index 0000000..a03811c
--- /dev/null
+++ b/doc/en/details-accounts.docbook
@@ -0,0 +1,727 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="details.accounts">
+<chapterinfo>
+ <authorgroup>
+ <author>
+ <firstname>Michael</firstname>
+ <othername>T.</othername>
+ <surname>Edwardes</surname>
+ <affiliation>
+ <address><email>mte@users.sourceforge.net</email></address>
+ </affiliation>
+ </author>
+ <author>
+ <firstname>Roger</firstname>
+ <surname>Lum</surname>
+ <affiliation>
+ <address><email>rogerlum@gmail.com</email></address>
+ </affiliation>
+ </author>
+ </authorgroup>
+ <date>2009-08-10</date>
+ <releaseinfo>1.0</releaseinfo>
+</chapterinfo>
+
+<title id="details.accounts.title">Accounts</title>
+
+<sect1 id="details.accounts.view">
+<title>The Accounts View</title>
+
+<para>
+ The Accounts View provides a summary of all the accounts. There are four
+ different account categories: Asset, Liability, Income, and Expense. Typical
+ asset accounts include bank accounts, cash, and investments, while typical
+ liability accounts include credit cards and loans.
+</para>
+
+<para>
+ There are two ways to view the accounts: List or Icon view, which may be
+ selected by clicking on the appropriate tab at the top of the view.
+</para>
+
+<para>
+ In the List view, the accounts are grouped under four headings: Asset,
+ Liability, Income, and Expense. List view shows the name and balance or value
+ of each account. Income and Expense list the categories that each transaction
+ is filed under, and provide similar functionality to the Categories
+ screen. The options and features involving Income and Expense accounts are
+ described in detail in the <link
+ linkend="details.categories">Categories</link> chapter. The rest of this
+ chapter will focus on Asset and Liability account functionality.
+</para>
+
+<para>
+ In the Icon view, the Asset and Liability accounts are shown with icons
+ indicating the account type. &kappname; initially places the icons
+ alphabetically, but you can move the icons to any position you want, just by
+ dragging the icon with the mouse. Note, however, that just moving an icon
+ does not currently trigger &kappname; to think that any data has been changed.
+ This means that you need to make some other change, such as editing an account
+ or a transaction and saying OK (even without actually changing any data) so
+ &kappname; allows you to save the file. The saved file will include the new
+ icon positions.
+</para>
+</sect1>
+
+<sect1 id="details.accounts.create">
+<title>Creating an Account</title>
+
+<para>
+ <emphasis>
+ NOTE: You must have a file open before you can create a new account. If you
+ do not have an existing file, you will need to create a <link
+ linkend="firsttime-3">new file</link>.
+ </emphasis>
+</para>
+
+<para>
+ To create a new account, you can either select
+ <menuchoice><guimenu>Account</guimenu><guimenuitem>New
+ account...</guimenuitem></menuchoice> from the menu or choose the
+ <guiicon><inlinemediaobject><imageobject><imagedata fileref="newacct.png"
+ format="PNG"/></imageobject><textobject>
+ <phrase>New</phrase></textobject></inlinemediaobject></guiicon> icon from the
+ toolbar.
+</para>
+
+<para>
+ Alternatively, to create an account using the accounts view, click on the
+ Accounts icon in the view selector and then right click on the Asset tree icon
+ in the right hand view and select <guimenuitem>New account...</guimenuitem>
+ from the popup menu. The Asset tree holds all of your accounts that are an
+ asset. Assets, and all the other account types, are discussed in more detail
+ later in this manual.
+</para>
+
+<sect2 id="details.accounts.create.institution">
+<title>The Institution (Bank) name</title>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="accwiz1.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Account Wizard</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ The first step involves selecting an institution for the account. If this is
+ an account for an institution you have already created, you can select the
+ institution from the dropdown list. If you want to create a new institution,
+ click on the <guibutton>New Institution</guibutton> button. This will bring
+ up the New Institution Dialog, as described in the previous section. If this
+ is not a bank account, or if you do not want to use online banking, you do not
+ need to specify an institution.
+</para>
+
+<para>
+ The Account Number and the <acronym><ulink
+ url="http://en.wikipedia.org/wiki/International_Bank_Account_Number">IBAN
+ (International Bank Account Number)</ulink></acronym> are not currently used
+ by &kappname;. These fields may be left blank and filled in at a later time;
+ they are only required for online banking.
+</para>
+
+<para>
+ To proceed to the next step click on <guibutton>Next</guibutton>.
+</para>
+</sect2>
+
+<sect2 id="details.accounts.create.account">
+<title>Account</title>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="accwiz2.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Account Wizard</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ This page is used to configure the type of account.
+</para>
+
+<para>
+ First, enter a name for the account. This name will be used to identify it.
+</para>
+
+<para>
+ Next, select the type of account from one of the types available from the
+ dropdown list:
+</para>
+
+<variablelist>
+ <varlistentry>
+ <term>Checking</term>
+ <listitem>
+ <para>
+ A normal checking account, the type you get with any bank or credit union.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Savings</term>
+ <listitem>
+ <para>
+ A normal savings account, the type you get with any bank or credit union.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Credit Card</term>
+ <listitem>
+ <para>
+ An account to represent your credit card.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Cash</term>
+ <listitem>
+ <para>
+ A general purpose account, typically used for accounts not held at a
+ bank, such as the cash in your wallet.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Loan</term>
+ <listitem>
+ <para>
+ An account to manage a loan for money either borrowed or lent. With a
+ Loan account &kappname; automatically calculates interest payments to
+ help you track the remaining principal on the loan. Loans with no
+ interest might use the plain Asset or Liability type below, depending on
+ whether the money is lent or borrowed.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Investment</term>
+ <listitem>
+ <para>
+ An account to manage an investment such as stocks or investment funds.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Asset</term>
+ <listitem>
+ <para>
+ An account to manage an asset that does not fit in one of the above types.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Liability</term>
+ <listitem>
+ <para>
+ An account to manage a liability such as money you borrowed or a future
+ expense. If interest needs to be calculated, you might be better using
+ the Loan type above.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+ Select the currency to be used for the account from the dropdown list.
+</para>
+
+<para>
+ Enter the date the account was opened or select it from the calendar using the
+ icon to the right.
+</para>
+
+<para>
+ Enter the opening balance for the account. If this is an existing bank account
+ this information can be found on your statement. If it is a new account, the
+ opening balance can be left at zero.
+</para>
+
+<para>
+ Selecting the <emphasis>Preferred Account</emphasis> check box will allow
+ preferred access in some dialogs and views of &kappname;.
+</para>
+
+<para>
+ To proceed to the next step click on Next.
+</para>
+</sect2>
+
+<sect2>
+<title>Credit Card Accounts</title>
+
+<para>
+ When creating a Credit Card account, you can optionally have &kappname; create
+ a <link linkend="details.schedules">scheduled transaction</link> for you.
+</para>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="accwiz6.png" format="PNG" />
+ </imageobject>
+
+ <textobject>
+ <phrase>Account Wizard</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ If you want such a transaction generated, make sure the tick box is checked
+ and enter the required information.
+</para>
+
+<para>
+ Click on <guibutton>Next</guibutton> to continue.
+</para>
+</sect2>
+
+<sect2>
+<title>Investment Accounts</title>
+
+<para>
+ For Investment accounts, you have the option to create an associated Brokerage
+ account. For more information see <link
+ linkend="details.investments">Investments</link>
+</para>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="accwiz7.png" format="PNG" />
+ </imageobject>
+
+ <textobject>
+ <phrase>Account Wizard</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+</sect2>
+
+<sect2>
+<title>Loan Accounts</title>
+
+<para>
+ Loan accounts are special accounts used to help you manage Loans with interest
+ and scheduled repayments. By providing &kappname; with information about the
+ loan, &kappname; can help you track interest payments and the remaining
+ principal of the loan.
+</para>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="accwiz8.1.png" format="PNG" />
+ </imageobject>
+
+ <textobject>
+ <phrase>Account Wizard</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ On the Details page you enter the general information about the loan.
+</para>
+
+<para>
+ First, select whether you are borrowing or lending money. If you are
+ borrowing money the loan will be listed in Accounts under Liabilities. If you
+ are lending money the loan will be listed under Assets.
+</para>
+
+<para>
+ Next, select the payee or payer of the loan. As always, if the name doesn't
+ yet exist in the Payees list, enter it here and &kappname; will create it for
+ you.
+</para>
+
+<para>
+ The next three items are for handling Loans on which you've already made
+ payments. If you select Yes in the "Have you made/received any payments yet?"
+ item you can then select whether you want to record all payments or just those
+ from the beginning of the current year. If you want to record from the
+ beginning of the current year, you are than asked to input the current
+ balance.
+</para>
+
+<para>
+ Then, select how often payments will be made and how often interest is
+ compounded. Compounding is where the interest is added to the amount owed on
+ the loan so that when the interest is next calculated there will be more
+ interest paid on the interest. It's common for interest to be compounded at
+ the same frequency that payments are made.
+</para>
+
+<para>Next, enter the date the first recorded payment will be made.
+</para>
+
+<para>
+ Finally, enter information about how the interest rate varies. If the loan is
+ fixed-rate there is nothing to do. If the rate varies, select Variable in
+ "Type of interest rate" and then enter the interval between interest rate
+ changes and the date the first change of interest rate is due: &kappname; will
+ ask you to update the interest rate when that date arrives.
+</para>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="accwiz8.2.png" format="PNG" />
+ </imageobject>
+
+ <textobject>
+ <phrase>Account Wizard</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ The Payments page is where you enter the payment and interest values for the
+ loan.
+</para>
+
+<para>
+ First, select whether the interest rate is calculated when the payment is
+ received or when it becomes due. If you don't know, leave it on the default
+ value.
+</para>
+
+<para>
+ Next, enter the following values:
+</para>
+
+<variablelist>
+ <varlistentry>
+ <term>Loan amount</term>
+ <listitem>
+ <para> The amount of the loan.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Interest rate</term>
+ <listitem>
+ <para>The annual percentage interest rate of the loan.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Term</term>
+ <listitem>
+ <para>
+ The length of the loan. Enter a number and select either Months or
+ Years.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Payment (principal and interest)</term>
+ <listitem>
+ <para>
+ The amount paid for each loan payment. This is the total of the
+ principal and interest paid with each payment.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Balloon payment</term>
+ <listitem>
+ <para>
+ Additional final payment made at the end of the term to pay off the
+ remaining principal of the loan. For a repayment loan this is often
+ zero. For an interest-only loan this will be the same as the loan
+ amount.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+ Finally, use the <guibutton>Calculate</guibutton> button to check the values
+ you have entered. You must have entered either all or all but one of the
+ values listed above. If you omit two or more values the button is disabled
+ because it is not possible to check that the entered values are consistent: in
+ that case you will not be able to use the Loan account facility in &kappname;
+ and will instead have to use a Liability or Asset account to track the loan
+ manually.
+</para>
+
+<para>
+ If you omit one value &kappname; will try to calculate it for you. If you
+ have entered all values &kappname; will check the values are consistent.
+ &kappname; will not adjust entered values other than the "Balloon payment",
+ which it may adjust slightly to deal with rounding. If the values are
+ inconsistent or &kappname; cannot calculate the omitted value &kappname; will
+ let you know so that you can correct any errors and repeat the calculation.
+</para>
+
+<para>
+ Once the values are consistent the <guibutton>Next</guibutton> button is
+ enabled and you can advance to the next page.
+</para>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="accwiz8.3.png" format="PNG" />
+ </imageobject>
+
+ <textobject>
+ <phrase>Account Wizard</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ The Fees page is where you can enter any fees added to the loan payments.
+</para>
+
+<para>
+ If there are any fees press the <guibutton>Additional Fees</guibutton> button.
+ The Transaction Split editor will be displayed for entry of the fees. Any
+ lines added here will be included in the payment schedule for the loan. When
+ you save the splits the Fees page will display the principal and interest
+ payment, the total additional fees and the total periodic payment.
+</para>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="accwiz8.4.png" format="PNG" />
+ </imageobject>
+
+ <textobject>
+ <phrase>Account Wizard</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ &kappname; will create a <link linkend="details.schedules">scheduled
+ transaction</link> for your loan. The Schedule page is where you enter the
+ remaining details needed to create the schedule.
+</para>
+
+<para>
+ First enter the Category to which loan interest will be assigned. Then enter
+ the account from which the loan payment will be made.
+</para>
+
+<para>
+ The page also displays the first payment date for which the Schedule will be
+ created.
+</para>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="accwiz8.5.png" format="PNG" />
+ </imageobject>
+
+ <textobject>
+ <phrase>Account Wizard</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ Optionally, &kappname; can create a transaction representing what was received
+ or paid when the loan was created.
+</para>
+
+<para>
+ If you borrowed or lent cash select the account from which or to which the
+ loan amount was paid.
+</para>
+
+<para>
+ If you borrowed money to purchase a car you can select or create an Asset
+ account to help you track the value of the new car.
+</para>
+
+<para>
+ If you re-financed an existing Loan check the "Refinance existing loan"
+ checkbox, select the Loan account and &kappname; will create a transfer
+ transaction paying off the existing loan.
+</para>
+
+<para>
+ If you don't want to create the payout transaction, check the "Do not create
+ transaction" checkbox.
+</para>
+</sect2>
+
+<sect2 id="details.accounts.create.parent">
+<title>Parent Account</title>
+
+<para>
+ <screenshot>
+ <screeninfo>Parent Account</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="accwiz10.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Account Wizard</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ This is the penultimate step in creating a new account. A tree of accounts is
+ displayed. The tree will be of your Asset or Liability accounts, depending on
+ the type of account that is being created.
+</para>
+
+<para>
+ Select the account you wish contain the new account. If you do not select a
+ parent account, the new account will be created at the top level.
+</para>
+
+<para>
+ The Parent Account page is not currently shown for Loans because they cannot
+ be created as sub-accounts. Also, Investment accounts cannot contain other
+ accounts so they are not shown in the tree.
+</para>
+</sect2>
+
+<sect2>
+<title>Review and save the account details</title>
+
+<para>
+ <screenshot>
+ <screeninfo>Review</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="accwiz9.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Account Wizard</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ This is the final step in creating a new account. A summary of the information
+ entered is displayed. Review it, and if everything is OK press the Finish
+ button. Otherwise, either press the <guibutton>Back</guibutton> button to make
+ corrections or the Cancel button to abandon creating a new account.
+</para>
+
+<para>
+ NOTE: The Type and Currency cannot at present be changed after the account is created.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="details.accounts.viewing">
+<title>Opening / viewing accounts</title>
+
+<para>
+ To open an account in the Ledger view you can either click on the link to the
+ account from the Home view, or click on the <guiicon><inlinemediaobject>
+ <imageobject> <imagedata fileref="ledgers_view.png" /> </imageobject>
+ </inlinemediaobject>Ledgers</guiicon> icon in the view selector and select the
+ account in the drop down box at the top of the view. Alternatively, in the
+ <guiicon>Account</guiicon> view, either double-click the account entry or
+ right click and select <guimenuitem>Open ledger</guimenuitem>.
+</para>
+</sect1>
+
+<sect1 id="details.accounts.edit">
+<title id="details.accounts.edit.title">Editing Account Information</title>
+
+<para>
+ To edit a particular account, right-click that account and choose
+ <guimenuitem>Edit account...</guimenuitem>. A details window will pop-up.
+ This window allows you to change the name and start date of the account,
+ associated banking institution, and the parent account. Changing the parent
+ account is also possible in the main Accounts screen, by dragging the account
+ and dropping it on a different parent account. In this window, you can also
+ create a new banking institution and associate the account with that
+ institution.
+</para>
+
+<para>
+ <screenshot>
+ <screeninfo>Edit an account</screeninfo>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="account_edit.png" format="PNG" />
+ </imageobject>
+
+ <textobject>
+ <phrase>Edit account information</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+</sect1>
+
+<sect1 id="details.accounts.delete">
+<title>Deleting accounts</title>
+
+<para>
+ To delete an account, first remove all the transactions from that account in
+ the ledger. Next, find the account in the accounts view and after right
+ clicking on the entry to show the popup menu select <guimenuitem>Delete
+ account...</guimenuitem> from the popup menu.
+</para>
+
+<para>
+ If you are unable to delete an account which looks like it has no transactions
+ in it, check your filter. See <menuchoice> <guimenu>Settings</guimenu>
+ <guimenuitem>Configure KMyMoney</guimenuitem>
+ <guimenuitem>General</guimenuitem> <guimenuitem>Filter</guimenuitem>
+ </menuchoice>. Clear all filters. Set the start date to 1.1.1900 or so.
+</para>
+
+<para>
+ There may be transactions in your ledger that are not shown, for example, if
+ you have inadvertently typed in the wrong year when making an entry so that an
+ entry remains outside the opening date of &kappname;. This appears beneath the
+ ledger page as remaining funds.
+</para>
+</sect1>
+</chapter>
diff --git a/doc/en/details-budgets.docbook b/doc/en/details-budgets.docbook
new file mode 100644
index 0000000..d51deeb
--- /dev/null
+++ b/doc/en/details-budgets.docbook
@@ -0,0 +1,406 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="details.budgets">
+<chapterinfo>
+ <authorgroup>
+ <author>
+ <surname>Colin Wright &lt;cdwright@gwi.net&gt;</surname>
+ </author>
+ </authorgroup>
+ <date>2009-08-03</date>
+ <releaseinfo>1.0</releaseinfo>
+</chapterinfo>
+
+<title id="details.budgets.title">Budgets</title>
+<sect1 id="details.budgets.define">
+<title>What is a budget?</title>
+
+<para>
+ A budget is a categorized list of expected income and expenses for a period.
+</para>
+
+<para>
+ The Budget facility of &kappname; allows you to create annual budgets. More
+ than one Budget can be created for any year. You set monthly Budget values
+ against any Income or Expense categories that you have defined. The values can
+ be set in three ways, depending on the Period:
+</para>
+
+<variablelist>
+ <varlistentry>
+ <term>Monthly</term>
+ <listitem><para>(Default) specify a single value applied to every month in
+ the Budget</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Yearly</term>
+ <listitem><para>specify a single value to divide evenly across each month in
+ the Budget</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Individual</term>
+ <listitem><para>specify separate values for each month.</para>
+ <para>This is used for income and expenses spread irregularly through the
+ year.</para></listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+ &kappname; provides a number of reports which compare actual income and
+ expenses against the entered Budgets.
+</para>
+</sect1>
+
+<sect1 id="details.budgets.create" >
+<title>Your budgets</title>
+
+<para>
+ You can access your budgets by clicking the appropriate icon in the navigation
+ pane at the left hand side of your &kappname; window.
+</para>
+
+<sect2>
+<title>Creating, changing, and deleting budgets</title>
+
+<para>
+ This section of the Budgets window displays the list of Budgets contained in
+ the current file. If no Budget has yet been created the list will display a
+ single empty Budget called "Budget &lt;year&gt;" where &lt;year&gt; is the
+ current fiscal year. The list of Budgets has two columns:
+</para>
+
+<variablelist>
+ <varlistentry>
+ <term>Name</term>
+ <listitem>
+ <para>Name of the Budget</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Year</term>
+ <listitem>
+ <para>Fiscal year of the Budget</para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+ Values from the selected Budget are displayed to the right. To select a
+ different Budget you can click on the Budget in the list. Alternatively, when
+ the list has focus, you can select a different Budget using the up and down
+ keys. If you have made changes to a Budget and then select a different budget
+ &kappname; will ask you whether you want to discard the changes.
+</para>
+
+<para>
+ There are five buttons above the list of Budgets.
+</para>
+
+<variablelist>
+ <varlistentry>
+ <term>New</term>
+ <listitem>
+ <para>Create a new budget</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Rename</term>
+ <listitem>
+ <para>Edit the name of the selected Budget.</para>
+
+ <para>You can also edit the name of a Budget by clicking on the name of
+ the selected Budget or double-clicking on the name of a different
+ Budget.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Delete</term>
+ <listitem>
+ <para>Delete the selected Budget</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Revert</term>
+ <listitem>
+ <para>Reverts the selected Budget to its last stored state.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Save</term>
+ <listitem>
+ <para>Accepts any unsaved changes to the selected Budget and
+ stores them.</para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+ Additional options are available on a menu accessed by right-clicking on a
+ Budget.
+</para>
+
+<variablelist>
+ <varlistentry>
+ <term>New Budget</term>
+ <listitem>
+ <para>Create a new, blank Budget.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Rename Budget</term>
+ <listitem>
+ <para>Rename the selected Budget.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Change budget year</term>
+ <listitem>
+ <para>Displays a window with a list of years to select a different budget
+ year.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Delete budget</term>
+ <listitem>
+ <para>Delete the selected Budget.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Copy budget</term>
+ <listitem>
+ <para>Creates a copy of the selected Budget. The new Budget has the name
+ "Copy of &lt;budget&gt;", where &lt;budget&gt; is the name of the copied
+ Budget.</para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect2>
+
+<sect2>
+<title>Account List</title>
+
+<para>
+ The Account List displays the list of Income and Expense Categories. As in
+ other places in &kappname; the list is organized in a tree structure. The list
+ can be expanded or collapsed to show or hide Subcategories within a
+ Category. The Account List has a number of columns:</para>
+
+<variablelist>
+ <varlistentry>
+ <term>Account</term>
+ <listitem>
+ <para>Account name</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Type</term>
+ <listitem>
+ <para>Account Type (Income or Expense)</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Tax</term>
+ <listitem>
+ <para>Checked if a Category included in Tax Reports</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>VAT</term>
+ <listitem>
+ <para>Checked if a Category marked as a VAT Category</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Balance</term>
+ <listitem>
+ <para>Current balance of Account. Blank for Categories</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Value</term>
+ <listitem>
+ <para>Total yearly value in the Budget. If an Account has Subaccounts and
+ the Account's list of Subaccounts is collapsed the value displayed is
+ the sum of the values for the Account and all of its Subaccounts.</para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+ The Account List can be filtered using "Hide unused Categories". In Budgets
+ this hides any Categories for which no value has been assigned to the Category
+ or any of its Subcategories.
+</para>
+</sect2>
+
+<sect2>
+<title>Assignments</title>
+
+<para>
+ The Assignments area shows the value for the selected Account.
+</para>
+
+<variablelist>
+ <varlistentry>
+ <term>Account</term>
+ <listitem>
+ <para>Displays the name of the selected Account. If the Account is a
+ Subaccount, the full name of the selected Account is displayed in the
+ Account:Subaccount format.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Total</term>
+ <listitem>
+ <para>Displays the total yearly value assigned to the Account</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Include subaccounts</term>
+ <listitem>
+ <para>In Reports show actual income or expenses in Subcategories belonging
+ to the Category against the Category instead of the Subcategory.</para>
+
+ <para>If a Subcategory has a value defined in the Budget the income and
+ expenses are shown against the Subcategory.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Clear</term>
+ <listitem>
+ <para>The Clear button resets the budgeted account value or values to
+ zero.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Period</term>
+ <listitem>
+ <para>The Period radio buttons allow you to select the period for which
+ the value applies</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>Monthly</term>
+ <listitem>
+ <para>A single value is entered, specifying the amount per
+ month. This is the default setting.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Yearly</term>
+ <listitem>
+ <para>A single value is entered, specifying the amount per
+ year.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Individual</term>
+ <listitem>
+ <para>Values are specified for each Calendar month. This is used
+ where expense or income is spread irregularly through the
+ year.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>
+ If a value is or values are already specified and the Period is changed
+ &kappname; will ask whether to use the current total yearly value to
+ assign the new values.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+</sect2>
+
+<sect2>
+<title>Update and Revert</title>
+
+<para>
+ For performance reasons, changes made to a Budget are not saved
+ immediately. Instead, they first have to be stored using the Update button and
+ then permanently saved using the &kappname; Save.
+</para>
+
+<para>
+ When a Budget's values are first modified, the Update and Revert buttons are
+ enabled. Multiple changes can be made to the Budget. Pressing Update will
+ store the changes, disable the Update and Revert buttons and enable the
+ &kappname; Save.
+</para>
+
+<para>
+ The &kappname; Save only saves changes that have been stored using the Update
+ button. Thus, if you have modified a Budget but not yet stored the changes
+ &kappname; Save will not affect the modified Budget and the Update and Revert
+ buttons remain enabled.
+</para>
+
+<para>
+ Revert undoes any changes made to a Budget since the last Update and disables
+ the Update and Revert buttons.
+</para>
+
+<para>
+ Changes stored using Update but not yet saved using &kappname; Save can only
+ be reverted by reloading the &kappname; file.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="budget.details.reports">
+<title>Budget Reports</title>
+
+<para>
+ &kappname; provides a number of reports to compare actual income and expenses
+ against Budgets. These are listed in Reports under "Budgeting". There are two
+ types of Reports:
+</para>
+
+<variablelist>
+ <varlistentry>
+ <term>Budget only</term>
+ <listitem><para>Reports displaying values from a Budget: Monthly Budget
+ Displays the monthly values from a Budget. Yearly Budget Displays the
+ monthly values from a Budget, with yearly total.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Compare Budget and Actual</term>
+ <listitem><para>Reports comparing values from a Budget to actual income and
+ expenses: Budget vs. Actual This Year Month-by-month comparison for the
+ current year so far, with total. Monthly Budget vs. Actual Month-by-month
+ comparison, defaulting to the current month. Yearly Budgeted vs. Actual
+ Month-by-month comparison for the whole of the current year, with
+ total. These reports provide a base from which custom reports can be
+ created by changing the date range and Budget. Of the Budget reports, only
+ the "Budget vs. Actual This Year" does not allow the Budget to be
+ changed.</para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect1>
+</chapter>
diff --git a/doc/en/details-categories.docbook b/doc/en/details-categories.docbook
new file mode 100644
index 0000000..80f26ea
--- /dev/null
+++ b/doc/en/details-categories.docbook
@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="details.categories">
+<chapterinfo>
+ <authorgroup>
+ <author>
+ <firstname>Roger</firstname>
+ <surname>Lum</surname>
+ <affiliation><address><email>rogerlum@gmail.com</email></address></affiliation>
+ </author>
+ </authorgroup>
+ <date>2009-06-04</date>
+ <releaseinfo>1.0</releaseinfo>
+</chapterinfo>
+
+<title id="details.categories.title">Categories</title>
+
+<para>
+ The Categories screen provides a summary of all the existing categories under
+ which transactions are filed. The categories are split into income and
+ expense, and a balance is displayed for each category.
+</para>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="categories.png" format="PNG" />
+ </imageobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<sect1 id="details.categories.create">
+<title>Creating categories</title>
+
+<para>
+ To create a new category, either select <guimenu>Category</guimenu>
+ <guimenuitem>New category</guimenuitem> in the menu, or in the Categories
+ view, select a parent in the tree, right click and select the <guimenuitem>New
+ Category</guimenuitem> option. Either way will open the Create new categories
+ wizard. Enter the new category name, and select the currency if the default
+ shown is not correct. In the Hierarchy tab, ensure the required parent
+ account is selected. Finally, in the Tax tab, there is a check box to enable
+ VAT support, and a check box to include this category in certain tax related
+ reports.
+</para>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="categoryedit.png" format="PNG" />
+ </imageobject>
+ </mediaobject>
+ </screenshot>
+ </para>
+
+<para>
+ Enter the category name any notes and click on <guibutton>OK</guibutton> to
+ save the new category. To create a complete hierarchy of accounts, separate
+ the names by colons (:) as in <emphasis>Bills:Car:Gasoline</emphasis>.
+</para>
+</sect1>
+
+<sect1 id="details.categories.edit">
+<title id="details.categories.edit.title">Editing a Category</title>
+
+<para>
+ To edit a category, right-click on a category name, and choose
+ <guimenuitem>Edit category</guimenuitem>. A window comes up with three tabs:
+ General, Hierarchy and Tax.
+</para>
+
+<para>
+ The General tab allows you to edit the name of the category and any notes you
+ entered when you created the category.
+</para>
+
+<para>
+ The Hierarchy tab allows you to change the parent category. You can also
+ change the parent category from the main category page by dragging the
+ category to a different parent.
+</para>
+
+<para>
+ The Tax tab allows you to assign or change VAT category, or alter the
+ automatic VAT assignment. It also allows you to toggle whether or not the
+ category is included in certain tax related reports.
+</para>
+</sect1>
+
+<sect1 id="details.categories.vat">
+<sect1info>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Baumgart</surname>
+ <affiliation>
+ <address><email>ipwizard@users.sourceforge.net</email></address>
+ </affiliation>
+ </author>
+</sect1info>
+
+<title>VAT Support</title>
+
+<para>
+ You can turn an expense/income category into a VAT category, which means that
+ it receives all the splits that actually make up the VAT payment towards the
+ government. You can also enter a specific percentage rate. entered.
+</para>
+
+<para>
+ Categories can be assigned a VAT category, which allows KMyMoney to split a
+ transaction for a category into two parts, one for the category and one for
+ the VAT. Depending on the setting of the gross/net amount switch, the amount
+ you enter for the transaction is the gross or net amount.
+</para>
+
+<para>
+ Example: In Germany, there are three VAT percentages (0%, 7%, and 19%). So I
+ have a main category "VAT paid" and three subcategories, one for each
+ percentage rate. I create these on both the income and the expense sides so
+ that I have eight categories in total. For the goods I buy, I select one of
+ the above mentioned categories as the "VAT category assignment".
+</para>
+
+<para>
+ When I buy goods, I enter them into a transaction. Let's assume I have
+ selected the gross amount entry method, once I enter the category and amount,
+ KMyMoney will recognize that there's a VAT assignment and calculate the VAT
+ part, create a second split with the VAT account and VAT amount and reduce the
+ category amount.
+</para>
+
+<para>
+ The same applies to income categories but the other way around. Hope that
+ makes sense.
+</para>
+
+</sect1>
+
+<sect1 id="details.categories.delete">
+<title>Deleting categories</title>
+
+<para>
+ To delete a category, select it in the tree, right click to bring up the popup
+ menu, and select <guimenuitem>Delete</guimenuitem>. If there are any
+ transactions assigned to this category, a popup will allow you to move these
+ to another parent category. If you try to delete a parent category, a dialog
+ allows the choice of either having the sub-categories moved up one level or
+ alternatively having them all deleted at the same time.
+</para>
+</sect1>
+</chapter>
diff --git a/doc/en/details-currencies.docbook b/doc/en/details-currencies.docbook
new file mode 100644
index 0000000..887de0f
--- /dev/null
+++ b/doc/en/details-currencies.docbook
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="details.currencies">
+<chapterinfo>
+ <authorgroup>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Baumgart</surname>
+ <affiliation>
+ <address><email>ipwizard@users.sourceforge.net</email></address>
+ </affiliation>
+ </author>
+ </authorgroup>
+ <date>2009-05-05</date>
+ <releaseinfo>1.0</releaseinfo>
+</chapterinfo>
+
+<title>Currencies</title>
+
+<para>
+ &kappname; supports the use of multiple currencies in different accounts. For
+ example, you can set up a bank account in Euro, another in British Pounds, and
+ still have your credit card account in US Dollars.
+</para>
+
+<sect1 id="details.currencies.basecurrency">
+<title>Base currency</title>
+
+<para>
+ Once you create a &kappname; file you will be asked for the base currency. The
+ base currency is the one that all income and expense categories use and that
+ reports will be based on. Usually, the base currency is the currency you use
+ in your country. If not otherwise selected, new accounts will use this
+ currency as the default.
+</para>
+
+<para>
+ <screenshot>
+ <screeninfo>The select currency dialog</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="select_currency.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>select currency</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+</sect1>
+
+<sect1 id="details.currencies.accountsetup">
+<title>Account setup</title>
+
+<para>
+ If you create a new account you have the option to specify the currency in
+ which it will be managed. The ledger for the account will then show all values
+ in the selected currency. The new account wizard defaults this setting to the
+ <link linkend="details.currencies.basecurrency">base currency</link>.
+</para>
+</sect1>
+
+<sect1 id="details.currencies.transactions">
+<title>Entering transactions using different currencies</title>
+
+<para>
+ Whenever a transaction is entered that refers to more than one currency, the
+ exchange rate editor pops up and allows you to enter an exchange
+ rate. Initially, the current price available from the price database will be
+ used as exchange rate. See <link linkend="details.currencies.prices">Entering
+ exchange rates for currencies</link> for more information on how to provide
+ exchange rates manually and obtain online price information.
+</para>
+
+<para>
+ Optionally, the exchange rate is saved in the price database once entered by
+ the user.
+</para>
+</sect1>
+
+<sect1 id="details.currencies.prices">
+<title>Exchange rates for currencies</title>
+
+<sect2>
+<title>Entering prices manually</title>
+
+<para>
+ The price database editor allows you to enter exchange rates between
+ currencies or prices for investments. You can pull it up using the
+ <menuchoice><guimenu>Tools</guimenu><guimenuitem>Prices...</guimenuitem></menuchoice>
+ menu option.
+</para>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="currency_priceeditor.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Currency Price Editor</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ In &kappname; a <quote>Price</quote> is the price of one currency in terms of
+ a second currency. For example, as I write this, the price of 1 USD in terms
+ of 1 EUR is 0.83; that is, 1 USD costs 0.83 EUR. The first currency is the
+ one being bought or sold, and the second one is the currency used to buy or
+ sell it.
+</para>
+
+<para>
+ When you press the <guibutton>New</guibutton> button, you get the New Price
+ Entry dialog. Enter the first currency (USD in the example above) in the
+ Security field. Enter the second currency (EUR in the example above) in the
+ Currency field. Enter the effective date of the price in the Date field.
+</para>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="currency_newpriceentry.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>New Price Entry</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+</sect2>
+
+<sect2>
+<title>Online currency updates</title>
+
+<para>
+ &kappname; will fetch currency conversions from the web. Once you have
+ entered a single price for a pair of currencies, the online quote feature will
+ always list that pair amongst its options.
+</para>
+
+<para>
+ See the section on <link linkend="details.investments.onlinequotes">Online
+ Price Quotes</link> in the Investments chapter for more details.
+</para>
+</sect2>
+</sect1>
+</chapter>
diff --git a/doc/en/details-database.docbook b/doc/en/details-database.docbook
new file mode 100644
index 0000000..7c87293
--- /dev/null
+++ b/doc/en/details-database.docbook
@@ -0,0 +1,461 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="details.database">
+<chapterinfo>
+ <authorgroup>
+ <author>
+ <firstname>Tony</firstname>
+ <surname>Bloomfield</surname>
+ <affiliation>
+ <address><email></email></address>
+ </affiliation>
+ </author>
+ </authorgroup>
+ <date>2009-08-05</date>
+ <releaseinfo>1.0</releaseinfo>
+</chapterinfo>
+<title>Database</title>
+
+<sect1 id="details.database.usage">
+<title>Caution when using the database</title>
+
+<caution>
+ <para>
+ At the time of writing, the software described in this chapter is still in
+ an experimental stage, and loss of data is possible. Please ensure that you
+ have an alternative backup copy of your data before committing to database
+ usage.
+ </para>
+</caution>
+
+<sect2>
+<title>Introduction</title>
+<para>
+ As of release 1.0, &kappname; allows you to hold your data in a relational
+ database. One of the advantages of using this industry-standard format is that
+ it may allow you to view your data using one of the graphic front ends such as
+ OpenOffice.org<trademark class="copyright"/>, perhaps in some format that
+ &kappname; currently doesn't provide. Also, a little knowledge of SQL
+ (Structured Query Language, the language used world-wide to access relational
+ databases) should enable you more easily to export data to an external
+ program, for example, a budgeting application.</para> <para/>
+</sect2>
+
+<sect2><title>Preparation</title>
+
+<para>
+ To access the database, &kappname; uses the SQL module supplied by &Qt;
+ Software as part of their &Qt; programming system. This module supports a
+ number of different database systems through a collection of drivers. Among
+ the more popular open-source systems for which drivers are available are
+ MySQL<trademark class="registered"/>, SQLite, and PostgreSQL. The module also
+ supports the 'heavier', more industrial, systems such as Oracle<trademark
+ class="registered"/> and IBM DB2<trademark class="registered"/>.
+</para>
+
+<para>
+ With the exception of SQLite, these systems use a client/server model, where
+ the 'client' software sits on 'your' machine, while the server lives on the
+ same machine as the database itself, which may be elsewhere on a network. Of
+ course, in the normal scenario for a personal finance application such as
+ &kappname;, 'your' machine acts as both client and server. Your first task
+ therefore, having decided which database system you wish to use, is to install
+ the client, and most probably server, software.
+</para>
+
+<para>
+ In addition to the database software itself, you must also install the
+ corresponding &Qt; driver module. Most distributions will include driver
+ modules for the more popular databases. Otherwise, check with the <ulink
+ url="http://qt.nokia.com">&Qt; software web site</ulink> and search for
+ 'SQL drivers'
+</para>
+
+<note>
+ <para>
+ SQLite does not operate on a client/server model; each database is held in a
+ regular file, local or remote, accessed using the normal methods supplied by
+ the underlying operating system. In this case, therefore, there is only one
+ software package to install. Also, some of the following information,
+ particularly that related to administration, may not apply to SQLite.
+ </para>
+
+ <para>
+ Due to limitations in prior releases, only version 3 of SQLite is
+ supported. Unfortunately, the release of the &Qt; toolkit used by &kappname;
+ does not provide a driver for this version. However, an unofficial,
+ extensively tested, driver is available; if you wish to use SQLite, ask on
+ &devlist; for further information.
+ </para>
+</note>
+</sect2>
+
+<sect2>
+<title>Administration</title>
+
+<para>
+ Looking after databases is a little more complex than dealing with regular
+ files. Each system has different methods for performing those necessary
+ administrative tasks such as creating databases, assigning permissions to
+ various users, producing backups, &etc;. Describing these tasks is outside the
+ scope of this manual, but all of the supported products provide comprehensive
+ reference documentation, and a quick search of the web will point you at many
+ tutorials on the subject.
+</para>
+
+<sect3>
+<title>Creating the database</title>
+
+<para>
+ Code has been included to create an initial database to hold your data if one
+ doesn't exist. However, it is strongly recommended that you pre-create a
+ database, because most of the products provide a number of options which may
+ be relevant. One that may be of particular importance to some would be the
+ designation of the character set (e.g., UTF-8) to be used for text
+ fields.
+</para>
+
+<para>
+ At this time, you will also need to specify permissions for various users to
+ perform different operations on the database. In most systems, the user who
+ creates the database will be automatically assigned all permissions, but this
+ is an area in which the documentation should be consulted.</para>
+
+<para>
+ For your first use of the database, and occasionally at other times when the
+ database layout changes, you will need permission (also called privileges) to
+ create and alter tables and views (see next paragraph). There may be different
+ names for the permission/privilege in different systems, but something like
+ CREATE and ALTER should be commonplace. For normal running, you will need to
+ be able to read and write records; these are normally defined in SQL as
+ SELECT, INSERT, UPDATE, and DELETE permissions.
+</para>
+</sect3>
+
+<sect3>
+<title>Creating Tables</title>
+
+<para>
+ On your first use, &kappname; will attempt to create the necessary table
+ structures. In order to achieve the maximum compatibility between various
+ database types, only a subset of common data types are used. There may
+ nevertheless be situations where a particular type is not supported, and in
+ this case, provision has been made to generate the SQL code necessary to
+ create tables. This code can then be modified as required and used to create
+ the tables outside of &kappname;. Should you find yourself in this situation,
+ help can usually be obtained from &devlist;.
+</para>
+</sect3>
+</sect2>
+
+<sect2 id="details.database.selectdatabase">
+<title>Initialisation</title>
+
+<para>
+ Using &kappname;, open or import an existing data file, or create a new
+ one. Then select <guimenuitem>Save as Database</guimenuitem> from the
+ <guimenu>File</guimenu> menu. This will present the following dialog:
+</para>
+
+<screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="select_database.png" format="PNG" />
+ </imageobject>
+ </mediaobject>
+</screenshot>
+
+<sect3>
+<title>Database Type</title>
+
+<para>
+ This box lists all &Qt; SQL drivers installed on your system. Select the
+ driver for your database type. If the one you want is not in the list, you
+ need to install the appropriate driver. See your distribution documentation,
+ or visit the <ulink url="http://qt.nokia.com/" type="">&Qt; software web
+ site</ulink> and search for 'SQL drivers'.
+</para>
+</sect3>
+
+<sect3>
+<title>Database name</title>
+<para>
+ The default database name is KMyMoney, but you may choose some other name if
+ you like. SQLite has one database per file; selecting this driver will open
+ the standard 'Open File' dialog from which a file may be selected or
+ created. For some database types, &kappname; may not be able to create the
+ database, so it must be pre-created using the appropriate administrative
+ procedure. However, &kappname; will create all table structures where
+ necessary.
+</para>
+</sect3>
+
+<sect3><title>Host name</title>
+<para>
+ For the average user, the default name of <quote>localhost</quote>, being the
+ machine you are currently using, is correct. For networked databases, enter
+ the connected host name.
+</para>
+
+<note>
+ <para>
+ NOTE: For SQLite databases, the Host name, User name, and Password fields
+ are not relevant. The SQLite file must have the appropriate read/write
+ permissions set by the underlying file system to enable the appropriate
+ access for the currently logged-in user.
+ </para>
+</note>
+</sect3>
+
+<sect3>
+<title>User name and password</title>
+<para>
+ Check the permissions set up on your database, or contact the database
+ administrator, for the correct values to use here. The user name must be
+ capable of selecting, inserting, updating, and deleting records. If the user
+ name is the same as your login name, a password is not normally required.
+</para>
+</sect3>
+
+<sect3>
+<title>Generate SQL</title>
+<para>
+ This button will generate the CREATE TABLE commands and save them to a text
+ file, which may be edited if the in-built commands do not work for your
+ database system (see previous paragraph).
+</para>
+</sect3>
+</sect2>
+
+<sect2>
+<title>Accessing your data</title>
+
+<sect3>
+<title>Table design</title>
+
+<para>
+ To access your data in &kappname;, use the <guimenuitem>Open
+ Database</guimenuitem> entry in the <guimenu>File</guimenu> menu. This will
+ open a dialog similar to the above.
+</para>
+
+<para>
+ To access your data in other formats, you will need to know a little about how
+ it is held in relational databases. By far the easiest way to get a feel for
+ this is to open the database in a front-end such as OpenOffice.org. This
+ provides a list of the various tables which make up the database, and
+ enables you to see the layout of each of them.
+</para>
+
+<para>
+ To extract data, e.g., into a spreadsheet or external file, it is almost
+ invariably necessary to select linked data from more than one table. This is
+ done by 'joining' the tables, using a field which is common to each. You can
+ find a lot more information about how this is done from the online database
+ tutorials mentioned above. The following table lists the fields used to define
+ these inter-table relationships.
+</para>
+
+<informaltable>
+ <tgroup cols="3">
+ <colspec colname="c1" colwidth="4.5cm"/>
+ <colspec colname="c2" colwidth="6.2cm"/>
+ <colspec colname="c3" colwidth="6.3cm"/>
+ <thead>
+ <row>
+ <entry valign="top">
+ <para>Relationship</para>
+ </entry>
+ <entry valign="top">
+ <para>Match</para>
+ </entry>
+ <entry valign="top">
+ <para>With</para>
+ </entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry valign="top">
+ <para>Institutions and Accounts</para>
+ </entry>
+ <entry valign="top">
+ <para>kmmInstitutions.id</para>
+ </entry>
+ <entry valign="top">
+ <para>kmmAccounts.institutionId</para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>Accounts Parent/Child</para>
+ </entry>
+ <entry valign="top">
+ <para>kmmAccounts.id</para>
+ </entry>
+ <entry valign="top">
+ <para>kmmAccounts.parentId</para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>Transactions and Splits (see Note 1)</para>
+ </entry>
+ <entry valign="top">
+ <para>kmmTransactions.id</para>
+ </entry>
+ <entry valign="top">
+ <para>kmmSplits.transactionId</para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>Accounts and Splits</para>
+ </entry>
+ <entry valign="top">
+ <para>kmmAccounts.id</para>
+ </entry>
+ <entry valign="top">
+ <para>kmmSplits.accountId</para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>Payees and Splits</para>
+ </entry>
+ <entry valign="top">
+ <para>kmmPayees.id</para>
+ </entry>
+ <entry valign="top">
+ <para>kmmSplits.payeeId</para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>Schedules and Transactions</para>
+ </entry>
+ <entry valign="top">
+ <para>kmmSchedules.id</para>
+ </entry>
+ <entry valign="top">
+ <para>kmmTransactions.id</para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>Transactions and Currencies</para>
+ </entry>
+ <entry valign="top">
+ <para>kmmTransactions.currencyId</para>
+ </entry>
+ <entry valign="top">
+ <para>kmmCurrencies.ISOCode</para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>Accounts and Securities (see Note 2)</para>
+ </entry>
+ <entry valign="top">
+ <para>kmmAccounts.currencyId</para>
+ </entry>
+ <entry valign="top">
+ <para>kmmSecurities.id</para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>Securities and Prices</para>
+ </entry>
+ <entry valign="top">
+ <para>kmmSecurities.id</para>
+ </entry>
+ <entry valign="top">
+ <para>kmmPrices.fromId or kmmPrices.toId</para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>Currency Rates</para>
+ </entry>
+ <entry valign="top">
+ <para>kmmCurrencies.ISOCode</para>
+ </entry>
+ <entry valign="top">
+ <para>kmmPrices.fromId or kmmPrices.toId</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+ Notes:
+</para>
+
+<para>
+ 1 &#x2013; txType = &#x201C;N&#x201D; for normal transactions,
+ &#x201C;S&#x201D; for scheduled transactions
+</para>
+
+<para>
+2 &#x2013; if kmmAccounts.isStockAccount = &#x201C;Y&#x201D;
+</para>
+</sect3>
+
+<sect3>
+<title>Field formats</title>
+
+<para>
+ Several of the data fields are held in an internal format which may not be
+ immediately useful to external programs. In these cases, the information has
+ been duplicated in both internal and external formats.
+</para>
+
+<para>
+ Monetary amounts and share values are shown both in numerator/denominator
+ format, and, with a field name suffixed with 'Formatted', in the form as shown
+ on your screens.
+</para>
+
+<para>
+ Similarly, some fields, such as account type appear both as a numeric code,
+ and in a field suffixed 'String' in the form and language of the application.
+</para>
+</sect3>
+
+<sect3>
+<title>Updating your data</title>
+
+<para>
+ Having data in an industry standard format does give you the ability to modify
+ it outside the &kappname; application. DO NOT DO IT unless you really know
+ what you are doing, and always be certain to make a backup copy of your data
+ first. If you get it wrong, &kappname; may not be able to access your data,
+ and you could even end up losing it altogether. You have been warned!
+</para>
+</sect3>
+
+<sect3>
+<title>Stored queries</title>
+
+<para>
+ Most database systems allow you to store commonly used queries and procedures,
+ and in some cases, these may be held as tables or other objects within your
+ database itself. As you will have guessed from the above, all the tables used
+ by &kappname; begin with the lowercase letters 'kmm'. This standard will be
+ maintained, and only tables beginning with these letters will be
+ updated. Thus, provided you avoid these in the naming of your queries etc.,
+ you should not experience any problems.
+</para>
+</sect3>
+</sect2>
+
+<sect2>
+<title>Encryption</title>
+
+<para>
+ Encryption of data in your database is not currently supported.
+</para>
+</sect2>
+</sect1>
+</chapter>
diff --git a/doc/en/details-files.docbook b/doc/en/details-files.docbook
new file mode 100644
index 0000000..90a2630
--- /dev/null
+++ b/doc/en/details-files.docbook
@@ -0,0 +1,19 @@
+<chapter id="details.files">
+<title>KMyMoney Files</title>
+<sect1 id="details.files.kmy"><title>Your .KMY data file</title>
+<para>
+All of your financial information that KMyMoney knows about is stored in a file ending in .KMY. You may have as many of these files as you like, each named differently. When you launch the program, it will automatically load the file you had open last time you exited.
+</para>
+</sect1>
+<sect1 id="details.files.hackingkmy"><title>Hacking the .KMY data file</title>
+<para>The .KMY file is a gzipped XML file. If you wish to learn about the structure of the file, you can gunzip it and load it in your favorite text editor.</para>
+</sect1>
+<sect1 id="details.files.anonymous"><title>Making an Anonymous data file</title>
+<para>If you should encounter a bug, it's sometimes useful for the developers to have your data file in order to reproduce it and fix the problem. Obviously, this presents a problem because you do not want to send the developers your private financial details.</para>
+<para>To solve this, KMM allows you to save an &quot;anonymized&quot; version of your data. This removes all personal information from the file, but keeps the structure intact.</para>
+ <para>To save a copy of your file in this way, open the File menu from the application menu bar, and choose &quot;Save as...&quot;. For the file type, choose &quot;Anonymous (.ANON.XML)&quot;. This will save off a copy of your data in anonymous form.</para>
+<para>Next, you will need to verify that the problem still exists with your file in this form. Not all problems still occur with an anonymous file. Close your file, and load the anonymous file. Try the same actions that caused the problem initially. Hopefully the problem still happens.</para>
+<para>If it does, you can now report the problem to the developer's list, and mention that you have anonymous file that reproduces the problem. When requested, send the anonymous file via private e-mail to whichever developer requests it.</para>
+</sect1>
+</chapter>
+
diff --git a/doc/en/details-forecast.docbook b/doc/en/details-forecast.docbook
new file mode 100644
index 0000000..9b0d963
--- /dev/null
+++ b/doc/en/details-forecast.docbook
@@ -0,0 +1,290 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="details.forecast">
+<chapterinfo>
+ <authorgroup>
+ <author>
+ <surname>Colin Wright &lt;cdwright@gwi.net&gt;</surname>
+ </author>
+ </authorgroup>
+ <date>2009-08-03</date>
+ <releaseinfo>1.0</releaseinfo>
+</chapterinfo>
+
+<title id="details.forecast.title">Forecast</title>
+<sect1 id="details.forecast.define">
+<title>What is a Forecast?</title>
+
+<para>
+ In &kappname;, a Forecast is a prediction of the balances of Accounts during a
+ specified future period of time.</para>
+
+<para>
+ Forecasts can be predicted using one of two methods.
+</para>
+
+<variablelist>
+ <varlistentry>
+ <term>Scheduled and Future Transactions</term>
+ <listitem>
+ <para>&kappname; uses a combination of future transactions already entered
+ into the ledgers and the entries in the Schedule.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>History-based</term>
+ <listitem>
+ <para>&kappname; uses values from past transactions in the ledgers to
+ predict future transactions.</para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+ The forecast method and forecast period can be set in the &kappname; Settings,
+ in the Forecast pane.
+</para>
+
+<para>
+ &kappname; Forecast provides a summary, showing the predicted balances at
+ account cycle dates and the expected difference between the starting and
+ ending balances. The length of the account cycle can be set by the user. The
+ summary also displays messages about significant predicted changes to the
+ accounts during the forecast period.
+</para>
+
+<para>
+ As well as the summary, &kappname; Forecast also allows you to view day-by-day
+ balances and view the minimum and maximum balances for each forecast account
+ cycle.
+</para>
+
+<para>
+ By default the Forecast is created for 90-days, with 30-day account cycles
+ using Scheduled and Future Transactions.
+</para>
+</sect1>
+
+<sect1 id="details.forecast.view" >
+<title>Viewing Forecasts</title>
+
+<para>
+ You can view a Forecast by clicking the appropriate icon in the navigation
+ pane at the left hand side of your &kappname; window.
+</para>
+
+<para>
+ The Forecast window is split into three tabs
+</para>
+
+<sect2>
+<title>Summary Tab</title>
+
+<para>
+ The Summary tab is split vertically into two halves.
+</para>
+
+<sect3>
+<title>Account Summary</title>
+
+<para>
+ The Account Summary contains a grid displaying a row of information for each
+ Asset and Liability.
+</para>
+
+<para>
+ The following columns are displayed:
+</para>
+
+<variablelist>
+ <varlistentry>
+ <term>Account</term>
+ <listitem>
+ <para>The name of the Asset or Liability account</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Current Balance (Current)</term>
+ <listitem>
+ <para>The current balance of the account is displayed.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Account Cycle Balance</term>
+ <listitem>
+ <para>The Forecast period is split into account cycles. The default
+ account cycle length is 30 days, but can be set by the user.</para>
+
+ <para>The first account cycle date is the first Forecast date. By default
+ this is the current date plus one account cycle, but can change
+ depending on the "Day of Month to start Forecast" setting.</para>
+
+ <para>Remaining account cycle dates are determined by adding the account
+ cycle length to the previous account cycle date. This is continued
+ until the calculated account cycle date would be beyond the Forecast
+ period.</para>
+
+ <para>For each account cycle date the predicted balance is
+ displayed.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Total Variation</term>
+ <listitem>
+ <para>The rightmost column displays the predicted difference in value
+ between the balances at the start and end of the forecast. If the
+ predicted end value of the account (in terms of net worth) is less than
+ the start value the whole row is highlighted in red.</para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+</sect3>
+
+<sect3>
+<title>Key Summary Information</title>
+
+<para>
+ The bottom half of the Summary tab displays noteworthy information about
+ accounts. This includes:
+</para>
+
+<variablelist>
+ <varlistentry>
+ <term>Assets below zero</term>
+ <listitem>
+ <para>A message is displayed for any asset for which the value starts or
+ will drop below zero during the forecast period.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Liabilities above zero</term>
+ <listitem>
+ <para>A message is displayed for any liability for which the value starts
+ or will rise above zero during the forecast period. Note that the value
+ of a liability is the negative of its ledger balance, since a positive
+ balance indicates money owed.</para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect3>
+</sect2>
+
+<sect2>
+<title>Details Tab</title>
+
+<para>
+ The Details tab contains a grid displaying a row of information for each Asset
+ and Liability.
+</para>
+
+<variablelist>
+ <varlistentry>
+ <term>Account</term>
+ <listitem>
+ <para>The name of the Asset or Liability account</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Dates</term>
+ <listitem>
+ <para>For each date in the Forecast period a column displays the predicted
+ balance of the account on that date. The date columns are in ascending
+ order from left to right.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Total Variation</term>
+ <listitem>
+ <para>The rightmost column displays the predicted difference in value
+ between the balances at the start and end of the forecast. If the
+ predicted end value of the account (in terms of net worth) is less than
+ the start value the whole row is highlighted in red.</para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect2>
+
+<sect2>
+<title>Advanced Tab</title>
+
+<para>
+ The Advanced tab contains a grid displaying a row of information for each
+ Asset and Liability. The information is split into columns as follows:
+</para>
+
+<variablelist>
+ <varlistentry>
+ <term>Account</term>
+ <listitem>
+ <para>The name of the Asset or Liability account</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Minimum Account Cycle Balance</term>
+ <listitem>
+ <para>For each account cycle number &lt;n&gt; in the Forecast period
+ the following columns are displayed:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>Minimum Balance (Min Bal &lt;n&gt;)</term>
+ <listitem>
+ <para>The minimum predicted balance during the account cycle</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Minimum Balance Date (Min Date &lt;n&gt;)</term>
+ <listitem>
+ <para>The date on which the balance reaches its predicted
+ minimum.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Maximum Account Cycle Balance</term>
+
+ <listitem>
+ <para>For each account cycle number &lt;n&gt; in the Forecast period
+ the following columns are displayed:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>Maximum Balance (Max Bal &lt;n&gt;)</term>
+ <listitem>
+ <para>The maximum predicted balance during the account cycle</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Maximum Balance Date (Max Date &lt;n&gt;)</term>
+ <listitem>
+ <para>The date on which the balance reaches its predicted
+ maximum.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Average</term>
+
+ <listitem>
+ <para>The average balance of the account during the forecast period</para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+</sect2>
+</sect1>
+</chapter>
diff --git a/doc/en/details-formats.docbook b/doc/en/details-formats.docbook
new file mode 100644
index 0000000..a6fe07f
--- /dev/null
+++ b/doc/en/details-formats.docbook
@@ -0,0 +1,185 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="details.formats">
+<chapterinfo>
+ <authorgroup>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Baumgart</surname>
+ <affiliation>
+ <address><email>ipwizard@users.sourceforge.net</email></address>
+ </affiliation>
+ </author>
+ </authorgroup>
+ <date>2009-05-08</date>
+ <releaseinfo>1.0</releaseinfo>
+</chapterinfo>
+
+<title>File Formats</title>
+
+<para>
+ This chapter describes the formats in which &kappname; stores its data in
+ permanent form on the user's storage device. In general, &kappname; stores its
+ information in form of an &XML; document. Depending on the actual format, this
+ &XML; document will be written
+
+<itemizedlist>
+ <listitem><para>as a <link linkend="details.formats.plain">plain text
+ file</link> encoded in UTF-8,</para></listitem>
+
+ <listitem><para>as a <link linkend="details.formats.compressed">compressed
+ file</link> using GZIP compression,</para></listitem>
+
+ <listitem><para>as an <link linkend="details.formats.encrypted">encrypted
+ file</link> using GPG encryption, or</para></listitem>
+
+ <listitem><para>as an <link linkend="details.formats.anonymous">anonymous
+ plain text file</link> encoded in UTF-8 but with all your personal data
+ scrambled.</para></listitem>
+</itemizedlist>
+</para>
+
+<sect1 id="details.formats.plain">
+<title>Plain text file</title>
+<para>
+ This is the most space consuming format supported, as no compression is
+ performed. It is not intended for normal use, and is provided to support
+ debugging purposes and the capability to modify the file manually. If you end
+ a filename in <literal role="extension">.xml</literal>, the file will be
+ stored in this format.
+
+<caution>
+ <para>
+ Manual modification of the file is not recommended to the normal user, and
+ should only be performed if the internal working of &kappname; is fully
+ understood or if instructions from the developers tell you what to do. Don't
+ blame the &kappname; developers if you screw up your data: You have been
+ warned!
+ </para>
+</caution>
+</para>
+</sect1>
+
+<sect1 id="details.formats.compressed">
+<title>GZIP-compressed file</title>
+<para>
+ This is the normal format used by &kappname; when you store a file with the
+ extension <literal role="extension">.kmy</literal>.
+</para>
+
+<note>
+ <para>
+ If <link linkend="details.formats.encrypted">encryption</link> has been
+ selected, the file will be stored encrypted.
+ </para>
+</note>
+
+<para>
+ If you want to look at the contents of a GZIP compressed file, rename it to a
+ filename ending in <literal role="extension">.gz</literal> (e.g.,
+ rename <filename>myfinances.kmy</filename>
+ to <filename>myfinances.kmy.gz</filename>), then use <command>gunzip</command>
+ to uncompress the file and look at it. You don't have to compress it before
+ loading it into &kappname; the next time, because &kappname; can read the
+ uncompressed data as well. Nevertheless, if you save it thereafter, it will be
+ saved compressed again. Use
+ the <link linkend="details.formats.plain">.xml</link> extension to write it in
+ uncompressed format.
+</para>
+</sect1>
+
+<sect1 id="details.formats.encrypted">
+<title>GPG-encrypted file</title>
+<para>
+ Using the GPG-encrypted file format is a very secure method of storing your
+ personal finance data on your storage device. When &kappname; has been
+ instructed through the settings dialog to store your data encrypted, it will
+ cipher the data using GPG and the key you provided before actually storing
+ it. When opening an encrypted file, you have to provide the passphrase
+ necessary to open your keyring. The encrypted file itself will be stored in
+ GPG's <emphasis>ASCII armored</emphasis> format.
+ <note>
+ <para>
+ When using GPG encryption, GPG also compresses the file, so no extra
+ compression is necessary.
+ </para>
+ </note>
+</para>
+
+<sect2 id="details.formats.encrypted.gpgkeys">
+<title>GPG-Keys</title>
+<para>
+ If you have not done so already for mail encryption, you need to generate a
+ key-pair in order to use the GPG encryption feature of
+ &kappname;. Also, <application>GPG</application> must be installed on your
+ system.
+</para>
+
+<para>
+ The details about how to generate a key-pair and how to take care of it are
+ beyond the scope of this document. A Mini Howto on this subject can be found
+ at <ulink url="http://www.gnupg.org/documentation/howtos.en.html">http://www.gnupg.org/documentation/howtos.en.html</ulink>.
+</para>
+</sect2>
+
+<sect2 id="details.formats.encrypted.keysettings">
+<title>Setting the keys in &kappname;</title>
+<para>
+ On the encryption page of the settings dialog, there is a drop down
+ list where you can select the key that should be used for encryption and
+ decryption. Additionally you can find a field where you can enter the
+ key-id of a key not in the listbox. You can use either the key-id, the
+ email address associated with this key, or any other valid GPG key
+ identification as the value for this field. When you enter the key-id,
+ &kappname; will check its validity and display a green LED icon in the
+ dialog if a key is found.
+ <caution>
+ <para>
+ Make sure you have both the public and the private key for this id. If you
+ do not own the private key for the id entered, you will not be able to
+ open the file again.
+ </para>
+ </caution>
+</para>
+</sect2>
+
+<sect2 id="details.formats.encrypted.recoverkey">
+<title>The &kappname; recover key</title>
+<para>
+ Also on this page of the settings dialog you have the choice of selecting
+ supplemental encryption with the &kappname; recover key. This option is
+ available to you if that key is stored in your <application>GPG</application>
+ keyring. Selecting this option will allow you to recover your data even in the
+ case you lose your own private key. This is possible because the data is not
+ only encrypted for your own key, but also for the &kappname; recover key. This
+ key is only available to selected &kappname; developers (at the time of
+ writing only to the author).
+</para>
+
+<para>
+ Under normal circumstances, you will open/save/close your file as usual. In
+ the abnormal case of loss of your key, you have the chance to contact one of
+ the developers who has access to the &kappname; recover key and request help
+ to recover your data. You may contact the developers via email to the
+ &kappname; developer mailing list at &devlist;.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="details.formats.anonymous">
+<title>Anonymous file</title>
+<para>
+ This format is not intended to be used for normal data storage. It is
+ supported in case of a problem as a method of supplying the &kappname;
+ development team with your file without disclosing any of your financial
+ data. If instructed by the developers, use the <guimenuitem>Save
+ as...</guimenuitem> menu item to store your data in anonymous format by
+ selecting <literal role="extension">.anon.xml</literal> as the file
+ extension. To verify that your problem still exists, reload this anonymized
+ file and try to duplicate your problem. If the problem is still present, send
+ the file to the developer mailing list at &devlist; for further
+ investigation. If the problem does not show ... well, I don't want to think
+ about this scenario right now.
+</para>
+</sect1>
+</chapter>
+
diff --git a/doc/en/details-hbciofx.docbook b/doc/en/details-hbciofx.docbook
new file mode 100644
index 0000000..72ac7fc
--- /dev/null
+++ b/doc/en/details-hbciofx.docbook
@@ -0,0 +1,6 @@
+<chapter id="details.hbciofx">
+<title>Online Banking / HBCI &amp; OFX - Under development - UNASSIGNED</title>
+<para>
+</para>
+</chapter>
+
diff --git a/doc/en/details-impexp.docbook b/doc/en/details-impexp.docbook
new file mode 100644
index 0000000..1dafbdd
--- /dev/null
+++ b/doc/en/details-impexp.docbook
@@ -0,0 +1,1103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="details.impexp">
+<chapterinfo>
+ <authorgroup>
+ <author>
+ <firstname>Ace</firstname>
+ <surname>Jones</surname>
+ <affiliation>
+ <address><email>acejones@users.sourceforge.net</email></address>
+ </affiliation>
+ </author>
+ </authorgroup>
+ <date>2009-07-30</date>
+ <releaseinfo>1.0</releaseinfo>
+</chapterinfo>
+
+<title>Importing and Export</title>
+
+<sect1 id="details.impexp.gnucash">
+<sect1info>
+ <author>
+ <firstname>Tony</firstname>
+ <surname>Bloomfield</surname>
+ <affiliation>
+ <address><email>tonybloom@users.sourceforge.net</email></address>
+ </affiliation>
+ </author>
+</sect1info>
+
+<title>GnuCash Importer</title>
+
+<sect2>
+<title>GnuCash Files</title>
+
+<para>
+ The &kappname; GnuCash importer handles direct reading of standard (&XML;)
+ files as produced by GnuCash versions 1.8 and 2.0. The following are not
+ supported:
+</para>
+
+<itemizedlist>
+ <listitem><para>import of database (Postgres) data</para></listitem>
+ <listitem><para>import of 'multi-book' files</para></listitem>
+ <listitem><para>import into an existing &kappname; file</para></listitem>
+ <listitem><para>import of small-business specific features (Employees,
+ Invoices, etc.)</para></listitem>
+ <listitem><para>export to GnuCash files.</para></listitem>
+</itemizedlist>
+
+<para>
+ The import will probably only work correctly if presented with a valid
+ file. It is recommended that the GnuCash 'Check &amp; Repair All' function (in
+ the Actions menu) be run before attempting to import.
+</para>
+
+<para>
+ Files can be opened by specifying the file name on the command line
+ (<command>kmymoney &lt;filepath&gt;</command>), or by means of the &kappname;
+ <menuchoice>
+ <shortcut><keycombo><keysym>Ctrl-O</keysym></keycombo></shortcut>
+ <guimenu>File</guimenu><guimenuitem>Open</guimenuitem>
+ </menuchoice> or
+ <menuchoice>
+ <guimenu>File</guimenu><guimenuitem>Import</guimenuitem>
+ </menuchoice> menu items.
+</para>
+
+<para>
+ The similarity between the two products means that much day-to-day data can be
+ imported in a straightforward fashion. However, there are some areas where
+ differences arise, and various options are provided to deal with these. The
+ following sections will describe some of these differences; understanding them
+ should lead to a smoother importation.
+</para>
+</sect2>
+
+<sect2>
+<title>Similarities, Differences, and Terminology</title>
+
+<sect3>
+<title>Small Business Usage</title>
+
+<para>
+ It should be noted that &kappname; is a <emphasis>personal</emphasis> finance
+ manager, and as such, does not directly support any of the business features
+ of GnuCash, such as tax tables, payroll, and tracking of lots. Any Accounts
+ Payable or Receivable accounts found in a file will be imported as Liability
+ or Asset accounts respectively.
+</para>
+</sect3>
+
+<sect3>
+<title>Accounts</title>
+
+<sect4>
+<title>Account types</title>
+
+<para>
+ For both products, the highest level of structure in the file is the
+ account. &kappname; supports 5 main types of account: Asset, Liability,
+ Income, Expense and Equity, each of which may have various subtypes, e.g.,
+ Checking, Credit Card, &etc;. &kappname; includes a 'standard' account for
+ each of these five types, and all other accounts are held subordinate to one
+ of these. &kappname; enforces more consistency (or less flexibility, depending
+ on your point of view) between account types than does GnuCash, and the
+ importer will correct any inconsistencies it detects. This may result in a
+ slightly different account structure, though this can, within reason, be
+ amended after the import is complete.
+</para>
+</sect4>
+
+<sect4>
+<title>Categories</title>
+
+<para>
+ &kappname; uses the term Category to denote an account of an Income or Expense
+ type. Unlike GnuCash, these are not considered as 'ledger' accounts, and entry
+ of transactions folder into categories is not supported; allocations are made
+ during transaction entry into other account types.
+</para>
+</sect4>
+
+<sect4>
+<title>Structure and Placeholders</title>
+
+<para>
+ GnuCash supports the use of Placeholder accounts. In effect, these are just
+ read-only accounts into which no transactions can be entered, but which
+ function in an analogous fashion to folders in a folder structure, as a
+ holder for other accounts. Though &kappname; does not support this feature as
+ such, it does provide a parent/child account relationship, so the importer
+ simulates placeholders by creating empty accounts.
+</para>
+</sect4>
+
+<sect4>
+<title>Account Type map</title>
+
+<informaltable frame='all'>
+<tgroup cols='2' align='left' colsep='1' rowsep='1'>
+<thead>
+ <row>
+ <entry>GnuCash type</entry><entry>&kappname; type</entry>
+ </row>
+</thead>
+<tbody>
+ <row>
+ <entry>BANK</entry><entry>Checking</entry>
+ </row>
+ <row>
+ <entry>CHECKING</entry><entry>Checking</entry>
+ </row>
+ <row>
+ <entry>SAVINGS</entry><entry>Savings</entry>
+ </row>
+ <row>
+ <entry>ASSET</entry><entry>Asset</entry>
+ </row>
+ <row>
+ <entry>CASH</entry><entry>Cash</entry>
+ </row>
+ <row>
+ <entry>CURRENCY</entry><entry>Cash</entry>
+ </row>
+ <row>
+ <entry>MONEYMRKT</entry><entry>MoneyMarket</entry>
+ </row>
+ <row>
+ <entry>STOCK</entry><entry>Stock</entry>
+ </row>
+ <row>
+ <entry>MUTUAL</entry><entry>Stock</entry>
+ </row>
+ <row>
+ <entry>EQUITY</entry><entry>Equity</entry>
+ </row>
+ <row>
+ <entry>LIABILITY</entry><entry>Liability</entry>
+ </row>
+ <row>
+ <entry>CREDIT</entry><entry>CreditCard</entry>
+ </row>
+ <row>
+ <entry>INCOME</entry><entry>Income</entry>
+ </row>
+ <row>
+ <entry>EXPENSE</entry><entry>Expense</entry>
+ </row>
+ <row>
+ <entry>RECEIVABLE</entry><entry>Asset</entry>
+ </row>
+ <row>
+ <entry>PAYABLE</entry><entry>Liability</entry>
+ </row>
+</tbody>
+</tgroup>
+</informaltable>
+</sect4>
+</sect3>
+
+<sect3>
+<title>Transactions and Splits</title>
+
+<sect4>
+<title>Balanced transactions</title>
+
+<para>
+ As with GnuCash, data is entered in the form of transactions, each generally
+ consisting of 2 or more split entries. In fact, valid GnuCash transactions
+ will always contain at least 2 splits, and to conform to GnuCash's
+ double-entry bookkeeping standard, these must be in monetary balance (i.e.,
+ they must balance out to zero). &kappname; encourages, but does not enforce,
+ this standard, but any imported transaction which is not balanced will be
+ marked in the ledger view as having a problem.
+</para>
+</sect4>
+
+<sect4>
+<title>Payees</title>
+
+<para>
+ &kappname; prefers that all transactions have a Payee (a generic term that
+ encompasses both payees and payers), and unlike GnuCash, a list of these
+ payees is maintained. Payee names are generated by the importer from the
+ GnuCash transaction's Description field.
+</para>
+</sect4>
+
+<sect4>
+<title>Transfers</title>
+
+<para>
+ &kappname; uses the term Transfer to describe a transaction which does not
+ involve a Category, but only transfers money between Asset and/or Liability
+ accounts.
+</para>
+</sect4>
+
+<sect4>
+<title>Reconcile</title>
+
+<para>
+ &kappname; provides an account reconciliation function similar to that of
+ GnuCash, and the corresponding transaction status will be imported.
+</para>
+</sect4>
+</sect3>
+
+<sect3>
+<title>Commodities</title>
+
+<para>
+ GnuCash uses the term Commodity to cover both currencies and non-currency
+ assets. These are treated separately in &kappname;.
+</para>
+
+<sect4>
+<title>Currencies</title>
+
+<para>
+ &kappname; has built-in support for all foreign
+ <link linkend="details.currencies">currency</link> types. &kappname; also
+ requires that the user specify a base currency, this being the default
+ currency for new accounts. The importer will attempt to determine the most
+ likely base currency, though this choice may be rejected in favour of an
+ alternative.
+</para>
+
+<para>
+ (NOTE: &kappname; does not currently support accounts denominated in 'defunct'
+ currencies (except those replaced by the Euro). At present, it will be
+ necessary to remove any such accounts from your GnuCash file before
+ importing. We hope to improve on this situation in a future release.)
+</para>
+</sect4>
+
+<sect4 id="gncsecurities">
+<title>Securities and Investments</title>
+
+<para>
+ Non-currency assets (normally stocks and bonds) are called Securities by
+ &kappname;, and represent the main difference between the two products, in
+ that &kappname; requires any account denominated in a security to be
+ subordinate to an Investment Account. This is described in more detail in the
+ chapter on <link linkend="details.investments">Investments</link>. Though
+ users may have implemented such a relationship, GnuCash imposes no defined
+ structure on it, so the importer is unable to detect it and perform an
+ automatic conversion. Three options are therefore made available:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>Create a separate Investment account for each security, with the same
+ name as the security</para>
+ </listitem>
+
+ <listitem>
+ <para>Create a single Investment account which will act as 'parent' for all
+ security accounts</para>
+ </listitem>
+
+ <listitem>
+ <para>Create several Investment accounts, and assign securities to them as
+ directed by the user.</para>
+ </listitem>
+</itemizedlist>
+
+<para>
+ It depends entirely on user requirements which of these options is relevant in
+ each situation, and in some cases, manual restructuring of accounts after
+ importation may be necessary.
+</para>
+</sect4>
+
+<sect4>
+<title>Prices and currency rates</title>
+
+<para>
+ Security prices and currency exchange rates as displayed in the GnuCash Price
+ Editor will be imported. In addition, price and rate entries will be generated
+ from all transactions involving securities and multiple currencies.
+</para>
+</sect4>
+
+<sect4 id="details.impexp.gncquotes">
+<title>Online Quotes</title>
+
+<para>
+ For obtaining online price and currency rate quotations, GnuCash uses a
+ package called Finance::Quote. Recent versions of &kappname; contain support
+ for this package for obtaining stock quotes, and this will be used by default
+ when importing data. You may however elect to convert to the native method
+ used by &kappname; which is covered in more detail in
+ <link linkend="details.investments.onlinequotes">online quotes</link>.
+</para>
+
+<para>
+ If you choose to do so, the following dialog will allow selection of a
+ 'native' &kappname; price source, or a user-defined source, for each account
+ for which online quotes are required. However, the stock (ticker) symbol will
+ be imported unchanged. Since this symbol will almost certainly be different in
+ the two packages, it will need to be manually edited after completion of the
+ import process. Future currency rate updates will not use Finance::Quote, and
+ will always use the native retrieval method.
+</para>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="gnucash-select_price_source.png" format="PNG" />
+ </imageobject>
+ </mediaobject>
+ </screenshot>
+</para>
+</sect4>
+</sect3>
+
+<sect3 id="gncschedules">
+<title>Scheduled Transactions</title>
+
+<para>
+ &kappname; does not retain the separation made in GnuCash between template
+ transactions and their frequency of occurrence. Transaction data will be
+ duplicated if the same template is used in different schedules, but this is
+ not likely to be of great significance.
+</para>
+
+<sect4>
+<title>Schedule types</title>
+
+<para>
+ &kappname; classifies all schedules as one of three types, Bills, Deposits, or
+ Transfers. Since GnuCash does not make such a distinction, the importer
+ attempts to determine the classification from the accounts and direction of
+ money movements. It may be that in some cases incorrect assumptions are made,
+ and these will need manual correction.
+</para>
+</sect4>
+
+<sect4>
+<title>Suspect Schedules</title>
+
+<para>
+ Some features of GnuCash scheduled transactions are not available in
+ &kappname;, so the importer tries in each case to reach a reasonable
+ compromise in converting the data. These transactions will be flagged as
+ suspect, and the user will be given the option of editing them directly during
+ the import process. Examples of situations which may cause this are:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>some frequency intervals supported in GnuCash are not currently
+ available in &kappname;</para>
+ </listitem>
+
+ <listitem>
+ <para>&kappname; does not support the use of formulae and variables in
+ amount fields</para>
+ </listitem>
+
+ <listitem>
+ <para>complex cases which have not yet been identified for import.</para>
+ </listitem>
+</itemizedlist>
+
+<para>
+ Despite best efforts, it is possible that, due to the many options involved, a
+ scheduled transaction may cause a fatal error within &kappname;. If this sort
+ of problem seems to be occurring, the importer offers the option to drop all
+ suspect schedules.
+</para>
+</sect4>
+</sect3>
+
+<sect3>
+<title>Reports</title>
+
+<para>
+ &kappname; provides a comprehensive selection of configurable reports,
+ described in more detail in <link linkend="details.reports">Reports.</link>
+ These will not necessarily, however, match precisely those reports available
+ in GnuCash.
+</para>
+</sect3>
+</sect2>
+
+<sect2>
+<title>Selecting Importer Options</title>
+
+<para id="details.impexp.gncoptions">
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="gnucash-import_options.png" format="PNG" />
+ </imageobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<sect3>
+<title>Investment Handling</title>
+
+<para>
+ See <link linkend="gncsecurities">"Securities and Investments"</link> above.
+</para>
+</sect3>
+
+<sect3>
+<title>Online Quotes</title>
+
+<para>
+ Turn this off if you wish to use the native method for future online price
+ quotes.
+</para>
+
+<para>
+ See <link linkend="details.impexp.gncquotes">"Online Quotes"</link> above.
+</para>
+</sect3>
+
+<sect3>
+<title>Scheduled Transactions</title>
+
+<para>
+ See <link linkend="gncschedules">"Scheduled Transactions"</link> above.
+</para>
+</sect3>
+
+<sect3>
+<title>Decoding Options</title>
+
+<para>
+ If your native language is written in letters or symbols which are different
+ from those used in the 'Latin' languages (i.e., generally Western European),
+ these are represented in a special fashion ('encoded') in your GnuCash file.
+ If these letters are not displayed correctly on your screen, then they must be
+ decoded. Currently, it is often not possible to detect accurately which form
+ of decoding must be used, so you may need to set this option and select an
+ entry from the list. In general, the first item in the list will be that
+ which is considered appropriate for your locale (i.e., the country and
+ language which was selected as native when your operating system was
+ installed), so this should be tried first. Since the import process does not
+ overwrite your GnuCash file, you are free to experiment with any of these
+ selections.
+</para>
+</sect3>
+
+<sect3>
+<title>Transaction Notes option</title>
+
+<para>
+ Under some usage conditions, non-split GnuCash transactions may contain
+ residual, often incorrect, memo data which is not normally visible to the
+ user. When imported into &kappname; however, due to display differences, this
+ data can become visible. Often, these transactions will have a Notes field
+ describing the real purpose of the transaction. If this option is selected,
+ these notes, if present, will be used to override the extraneous memo data.
+</para>
+</sect3>
+
+<sect3>
+<title>Debug Options</title>
+
+<para>
+ These need only be used in the event of import problems. If you have such
+ problems, you should also report them to the &kappname; developer list
+ &devlist;. Note that the traces produced by these options may contain data of
+ a confidential nature, and the Anonymize option should be used if they are to
+ be made publicly available.
+</para>
+</sect3>
+</sect2>
+
+<sect2>
+<title>Import Report</title>
+
+<para>
+ At the end of processing, the importer produces a report showing the number of
+ different entities processed, and any errors or anomalies encountered. This
+ report will be displayed on screen, and may be saved to a file for later
+ review. A full report may contain the following sections:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>Record counts</para>
+ </listitem>
+
+ <listitem>
+ <para>Inconsistencies in account types and actions taken</para>
+ </listitem>
+
+ <listitem>
+ <para>Details of suspect schedules</para>
+ </listitem>
+</itemizedlist>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="gnucash-report.png" format="PNG" />
+ </imageobject>
+ </mediaobject>
+ </screenshot>
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="details.impexp.qifimp">
+<sect1info>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Baumgart</surname>
+ <affiliation>
+ <address><email>ipwizard@users.sourceforge.net</email></address>
+ </affiliation>
+ </author>
+</sect1info>
+
+<title>QIF Importer</title>
+
+<sect2>
+<title>QIF format considered harmful</title>
+
+<para>
+ Generally speaking, the QIF format should be avoided wherever possible. It is
+ a poor choice for transporting financial data. Among other things, QIF suffers
+ from these problems:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>Lack of standardized format: Different versions of the same program
+ will impart different meanings to the same element.</para>
+ </listitem>
+
+ <listitem>
+ <para>Lack of transaction identifier: Because there is no ID number
+ associated with each transaction, matching duplicate transactions is
+ haphazard at best.</para>
+ </listitem>
+
+ <listitem>
+ <para>Lack of expressiveness: The grammar is really simple, and cannot
+ portray the depth of financial information found in today's financial
+ environment.</para>
+ </listitem>
+</itemizedlist>
+
+<para>
+ This is generally why Intuit stopped supporting QIF input at all with Quicken
+ 2005. If you have the option of getting data some other way, like OFX, always
+ choose that option.
+</para>
+</sect2>
+
+<sect2>
+<title>How to import a QIF file</title>
+
+<para>
+ To import a QIF file, first ensure you have a valid &kappname; file open.
+ Then select <guimenuitem>Import</guimenuitem> <guimenuitem>QIF</guimenuitem>
+ from the <guimenu>File</guimenu> menu.
+</para>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="qifopen.png" format="PNG" />
+ </imageobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ The resulting dialog prompts for the QIF filename allowing you to locate the
+ file by clicking on the <guibutton>Browse</guibutton> button.
+</para>
+
+<para>
+ Also, &kappname; differentiates between the import of a bank statement file
+ and historic data exported from another application. The default is to import
+ a bank statement file. In case you are importing data from your previous personal
+ finance manager application select the appropriate option.
+</para>
+
+<para>
+ In general the default QIF profile should work with your QIF data. In some
+ cases it might become necessary to use a modified QIF profile. See
+ the <link linkend="details.impexp.qifimp.profile">next section</link> for more
+ details on that subject.
+</para>
+
+<para>
+ Click on <guibutton>Import</guibutton> to import the QIF file.
+</para>
+
+<para>
+ &kappname; will start scanning the file to determine the formats used to
+ represent dates and numbers. In case it cannot determine a date format
+ unambiguously, &kappname; will ask the user to select one from the list of
+ possible date formats.
+</para>
+
+<para>
+ Next, &kappname; imports the data and creates all necessary objects, such as
+ payee information, accounts and category records, and stock price information.
+ Wherever possible, existing transactions will be matched against the imported
+ information. A progress bar is shown and updated during the import process.
+</para>
+
+<para>
+ In case &kappname; could not detect the name of the account to be imported,
+ the user will be asked to select the account into which the data should be
+ imported. If the account does not already exist in your file, a new account
+ can be created by clicking on <guibutton>Create</guibutton>.
+</para>
+
+<para>
+ At the end of the import, &kappname; shows a statement import statistics
+ window.
+</para>
+
+<para>
+<screenshot>
+ <screeninfo>Statement statistics</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="qif_report.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Statement statistics</phrase>
+ </textobject>
+ </mediaobject>
+</screenshot>
+</para>
+
+<para>
+ After importing, all of the imported transactions will be shown with a yellow
+ background in the ledger view. In case &kappname; was able to match an
+ imported transaction with an already existing transaction, the background is
+ shown in light green.
+</para>
+
+<para>
+ The next step is to verify the imported data and accept it. This is a general
+ process and also applies to imports from other sources. It is outlined in a
+ separate section of this document.
+</para>
+
+<note>
+<para>
+ The colors used to mark imported and matched transactions are customizable and
+ may be different in your environment.
+</para>
+</note>
+</sect2>
+
+<!--
+<sect2>
+<title>Accepting the imported transactions</title>
+<para>
+
+ When &kappname; has finished importing the QIF transactions the account will be shown with the imported transactions listed in Yellow.
+</para>
+
+<para>
+<screenshot>
+ <screeninfo>Imported transactions</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="qifimportverify.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Imported transactions</phrase>
+ </textobject>
+ </mediaobject>
+</screenshot>
+</para>
+
+<para>
+ Some of your transactions may be flashing red in the ledger.
+ This is because they need to be assigned a category.
+ The importer was not able to automatically assign a category based on your past transaction history.
+</para>
+
+<para>
+ Transaction data can be edited or even deleted if needed. To edit a transaction simply double click on the entry or hit enter when the entry is highlighted. Once finished click on <guibutton>OK</guibutton> to accept the imported transactions or <guibutton>Cancel</guibutton> to remove the imported transactions.
+</para>
+
+</sect2>
+
+<sect2><title>Importing Investments</title>
+
+<para>
+ Please note that if you are importing a file with investment transactions, those investments must first exist in your &kappname; file.
+ The trading symbol is used to match, so please ensure that the symbol in &kappname; is exactly the same as the one in the file you're importing.
+</para>
+</sect2>
+-->
+
+<sect2 id="details.impexp.qifimp.profile">
+<title>Setting up a QIF profile</title>
+
+<para>
+ Because there is no universally standard format for a QIF file, different
+ vendors have taken liberties with the format, and introduced their own
+ nuances. The QIF Profile allows &kappname; to know about the peculiarities of
+ your file. To edit an existing QIF Profile, or to create a new one, press the
+ <quote>New</quote> button on the QIF Import dialog, near the profile selector.
+</para>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="qifimport-qifprofileeditor.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>QIF Profile Editor</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<note>
+<para>
+ Previous versions of &kappname; used to have a tab for date and amount
+ specifications. &kappname; now determines those settings by scanning the
+ file. If it cannot figure out all settings, it will interrogate the user
+ during import.
+</para>
+</note>
+<!--
+<para>
+ The most commonly changed thing between QIF implementations is the date format.
+ So if this is the first time you're importing a QIF file, spend a few moments to figure out what format the dates are in, and set the QIF Profile accordingly.
+ See the discussion below on apostrophe format for more details.
+</para>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="qifimport-qifprofiledate.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>QIF Profile Date</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+</sect2>
+
+<sect2><title>Apostrophe format</title>
+
+<para>
+ Many common QIF writers use a 2-digit representation for the year.
+ This is ambiguous, because the importer cannot know which century the date belongs in.
+ To make things even more complicated, QIF files will often used an apostrophe as a year separator to indicate that the date belongs in the OTHER century from the default.
+</para>
+<para>
+ For example, if the default century is 1900-1999, the date 12/31/95 would mean 1995. The date 12/31'05 would mean 2005.
+</para>
+<para>
+ Because the QIF format is not standardized, it's impossible to know which century is desired.
+ This is why you have to explicitly state it in the QIF profile.
+ You do this by specifying which century is intended when an apostrophe is found.
+ In the example above, you would set the Apostrophe Format to &quot;2000-2099&quot;, so dates with an apostrophe will be interpreted as being &gt; year 2000.
+ In this case, dates without an apostrophe will be treated as being in the 1900's.
+</para>
+-->
+</sect2>
+
+<sect2><title>Transaction matching</title>
+
+<para>
+ As noted previously, one of the major drawbacks of the QIF format is the lack
+ of a unique identifier for each transaction. Thus, if you import a QIF file
+ and some of the transactions are already in your ledger, you may get
+ duplicates. &kappname; attempts to get around this by looking for
+ transactions that look similar to those you already have. If it finds
+ something that looks like the same transaction, it will match the apparent
+ duplicate.
+</para>
+
+<para>
+ This can be a problem if you have transactions that look too similar but are
+ actually different. In this case, you can unmatch those transactions later in
+ the ledger view.
+</para>
+</sect2>
+
+<sect2>
+<title>Writing an import filter</title>
+
+<para>
+ Sometimes you may have data in a custom format, like comma-separated-values
+ (CSV), or something else unique to your situation. You can still import that
+ file into &kappname; using a QIF Import Filter. A filter is a custom program
+ you write which takes your special file as input, and produces a QIF file as
+ output. This can be a shell script, a perl script, a compiled program written
+ in C/C++, or anything else you can dream of, as long as the system can run it.
+</para>
+
+<para>
+ To use it, edit your favorite QIF Profile, and select the Filter tab. Enter
+ the location of your filter program where prompted. Then, whenever you do a
+ QIF import using this profile, the file you select for importing will be run
+ through your filter first.
+</para>
+
+<para>
+ A common problem is to convert a list of comma-separated-values into a QIF
+ file. This is a textbook case for the awk tool. Create a script called
+ csv2qif.awk, with the following two lines as contents:
+</para>
+
+<programlisting>
+ BEGIN { FS=&quot;,&quot;; print &quot;!Type:Bank&quot; }
+
+ { print &quot;D&quot;$1; print &quot;T&quot;$2; print &quot;N&quot;$3; print &quot;P&quot;$4; print &quot;M&quot;$5; print &quot;^&quot; }
+</programlisting>
+
+<para>
+ Then, change the QIF keys (D,T,N,P,M) to match the order of your csv data.
+ Set the input filter to <userinput>awk -f csv2qif.awk</userinput>.
+</para>
+
+<para>
+ Another problem sometimes arises in the encoding of QIF files. &kappname;
+ expects files to be UTF8 encoded. If your file is encoded in something else,
+ it can be useful to convert it to UTF8. For example to convert it from
+ iso-8859-1, you would set the input filter to <userinput>recode
+ iso-8859-1..utf-8</userinput>.
+</para>
+
+</sect2>
+<sect2>
+<title>Special &kappname; QIF extensions</title>
+
+<para>
+ As already mentioned, one of the major drawbacks of the QIF format is the lack
+ of a unique identifier for each transaction. If you are writing your own QIF
+ file creator (or filter, as described above), you can overcome this problem.
+ &kappname; supports the '#' field. The importer will interpret this as a
+ unique transaction ID, and disregard the record if the transaction is already
+ in the system.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="details.impexp.qifexp">
+<title>QIF Exporter</title>
+<para>
+ To export one of your accounts to a QIF file, choose
+ the <guimenuitem>Export</guimenuitem> <guimenuitem>QIF</guimenuitem> from
+ the <guimenu>File</guimenu> menu. You will be prompted for which single
+ account to export, what file to export it to, and what QIF Profile to use.
+</para>
+
+<note><para>
+ At the moment, QIF Exporter does not handle export of investments.
+</para></note>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="qifimport-export.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>QIF Export</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+</sect1>
+
+<sect1 id="details.impexp.ofx">
+<sect1info>
+ <author>
+ <firstname>Ace</firstname>
+ <surname>Jones</surname>
+ <affiliation>
+ <address><email>acejones@users.sourceforge.net</email></address>
+ </affiliation>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Baumgart</surname>
+ <affiliation>
+ <address><email>ipwizard@users.sourceforge.net</email></address>
+ </affiliation>
+ </author>
+</sect1info>
+<title>OFX Importer Plugin</title>
+
+<sect2>
+<title>Getting the plugin</title>
+
+<para>
+ &kappname; will import OFX files painlessly. However, this functionality is
+ not built into the core program. You must obtain and install the OFX Importer
+ Plugin. Once that is installed, the command to import OFX files will
+ automatically show up under the <quote>File | Import</quote> menu.
+</para>
+<para>
+ Note that many prepackaged versions of &kappname; were built with the OFX
+ importer already included or available as a separate package. If the OFX
+ importer does not seem to be installed in your version, the first place to
+ check is in the same place you got your base &kappname; package.
+</para>
+<para>
+ If you have installed from RPM, the OFX Importer Plugin is contained within
+ the kmymoney-ofx RPM. It should be available from whatever source you got the
+ base &kappname; RPM. If you have built from sources, all you need to do is
+ have preferrably the libOFX 0.9 development headers and libraries installed
+ on your system. The &kappname; build process will detect these and compile
+ the plugin. libOFX 0.8.2 is supported as well, but some features are not
+ supported with this version of the library.
+</para>
+<para>
+ Should you run into trouble trying to compile &kappname;, and you are certain
+ you have the correct version of libOFX installed, please contact the
+ developers list &devlist; for assistance. Include a copy of your config.log
+ file, compressed first via gzip.
+</para>
+</sect2>
+
+<sect2>
+<title>Importing an OFX file</title>
+
+<para>
+ The most basic way to import an OFX file is to choose the importer from the
+ menu bar. From the <guimenu>File</guimenu> menu,
+ choose <guimenuitem>Import</guimenuitem>, and
+ then <guimenuitem>OFX</guimenuitem>. If OFX does not show up under Import,
+ you do not have the OFX Importer Plugin installed correctly. Please see the
+ previous section.
+</para>
+
+<para>
+ The first thing the importer will do is ask you into which account to import
+ the transactions. If there are transactions from multiple accounts in your
+ file, you will be asked this question multiple times.
+</para>
+
+<para>
+ After importing, some of your transactions may be shown with an exclamation
+ mark on a yellow triangle in the ledger. This is because they need to be
+ assigned a category. The importer was not able to automatically assign a
+ category based on your past transaction history. You can edit each
+ transaction in the ledger to assign a category, and the mark will be removed.
+</para>
+
+<para>
+ Please note that this section describes the <quote>native</quote> OFX
+ importer. OFX files may also be imported using the AqBanking Importer Plugin
+ if you have installed that. Note that the two importers do behave slightly
+ differently, and they are written and supported by two different developers.
+</para>
+</sect2>
+
+<sect2>
+<title>Importing Investments</title>
+
+<para>
+ Please note that if you are importing a file with investment transactions,
+ those investments must first exist in your &kappname; file. The trading
+ symbol is used to match, so please ensure that the symbol in &kappname; is
+ exactly the same as the one in the file you're importing.
+</para>
+</sect2>
+
+<sect2 id="details.impexp.webconnect">
+<title>Web Connect</title>
+
+<para>
+ The easiest way to import an OFX file is to set up Web Connect. Visit your
+ bank's web site, and click on a link to download an OFX file. Your browser
+ should ask you what program you would like to use to open the program. Point
+ your browser to &kappname;. It will then import the downloaded OFX file into
+ the &kappname; file you most recently had open. You can also change the file
+ associations of your desktop environment, and have &kappname; open the OFX
+ file automatically for you.
+</para>
+
+<para>
+ If you need to import the OFX file into some other &kappname; file, load up
+ that file in &kappname; first, and then visit your bank's web site.
+</para>
+</sect2>
+
+<sect2 id="details.impexp.ofxdirectconnect">
+<title>Direct Connect</title>
+
+<para>
+ OFX Direct Connect is now supported in &kappname;. This gives you the ability
+ to contact your bank directly to obtain statements. In the future, there will
+ be more help written, and this will be moved to its own section.
+</para>
+
+<para>
+ To enable this feature, you must compile &kappname; with the
+ --enable-ofxbanking switch (now the default).
+</para>
+
+<para>
+ Please be warned: Many banks require a separate signup, will give you a
+ separate password or PIN, and may even charge you a separate fee for this
+ service. No bank directly supports &kappname;. You will have to tell them
+ you want to bank directly from MS Money or Quicken.
+</para>
+
+<para>
+ The first step is to configure each account for which you wish to download
+ statements. Go to the Accounts view, right click on the account you wish to
+ configure, and choose <quote>Map to online account...</quote>. In case more
+ than one online banking plugin is installed on your system you will be asked
+ which one to use. For the internal OFX method select KMyMoney OFX. A list of
+ banks will be downloaded from the Internet and a wizard will guide you through
+ choosing a bank, entering your username and password, and selecting an
+ account. Should you find that your bank is not listed, then it may still be
+ possible to use the manual option. Your bank may be able to provide the
+ required parameters, or you may have to do some research to find them.
+</para>
+
+<para>
+ Once you have an account set up with online banking, go to the ledger for that
+ account. Then from the <quote>Account</quote> menu, choose <quote>Update
+ account...</quote>. This will connect to your bank, and download a statement
+ for the last 60 days.
+</para>
+</sect2>
+
+<sect2>
+<title>Exporting an OFX file</title>
+
+<para>
+ It is not possible to export your data as an OFX file currently. If you are
+ interested to contribute in this area, please contact the libofx development
+ team for details.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="details.impexp.plugins">
+<title>Writing Importer Plugins</title>
+
+<para>
+ &kappname; contains explicit support for importer plugins. If you have a
+ custom format, and you would like to write an importer plugin, we would value
+ your contribution. To do so, you'll need to compile the program from source.
+ Then use the OFX Importer Plugin as an example.
+</para>
+</sect1>
+</chapter>
diff --git a/doc/en/details-institutions.docbook b/doc/en/details-institutions.docbook
new file mode 100644
index 0000000..fc3ee44
--- /dev/null
+++ b/doc/en/details-institutions.docbook
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="details.institutions">
+<chapterinfo>
+ <authorgroup>
+ <author>
+ <firstname>Roger</firstname>
+ <surname>Lum</surname>
+ <affiliation>
+ <address><email>rogerlum@gmail.com</email></address>
+ </affiliation>
+ </author>
+ </authorgroup>
+ <date>2009-05-05</date>
+ <releaseinfo>1.0</releaseinfo>
+</chapterinfo>
+
+<title id="details.institutions.title">Institutions</title>
+
+<para>
+ The Institutions screen provides a summary of all the accounts grouped under
+ their respective institutions. Asset accounts are symbolized with a black
+ arrow, and liability accounts are symbolized with a red arrow.
+</para>
+
+<para>
+ The Institutions screen displays several columns, including the type of
+ account and the value of each account. It also shows the total value of all
+ accounts in each institution.
+</para>
+
+<para>
+<screenshot>
+ <screeninfo>institution view</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="institution_view.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>institution view</phrase>
+ </textobject>
+ </mediaobject>
+</screenshot>
+</para>
+
+<sect1 id="details.institutions.institution">
+<title>Institution Options</title>
+
+<para>
+ Right-clicking an institution name brings up an Institution Options sub-menu,
+ providing you with several choices. Selecting <guimenuitem>New
+ Institution...</guimenuitem> opens the New Institution Dialog, where you can
+ enter all the necessary information to create a new institution. Selecting
+ <guimenuitem>Edit Institution...</guimenuitem> brings up an editable window
+ with institution details such as name and address. Selecting
+ <guimenuitem>Delete Institution</guimenuitem> removes the entire institution
+ and all its associated accounts. Keep in mind that you will only be able to
+ delete an institution if you can delete all of its accounts, and you will only
+ be able to delete each associated account if it has no transactions and no
+ schedules refers to it. Selecting <guimenuitem>New account...</guimenuitem>
+ steps you through the new account process, which is described in more detail
+ in the next section.
+</para>
+
+<para>
+<screenshot>
+ <screeninfo>Institution options sub-menu</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="institution_options.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Institution options sub-menu</phrase>
+ </textobject>
+ </mediaobject>
+</screenshot>
+</para>
+
+<sect2 id="details.institutions.new">
+<title>New Institution</title>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="newinst.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>New Institution</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ <emphasis>
+ NOTE: You must have a file open before you can create a new institution. If
+ you do not have an existing file, you will need to create a <link
+ linkend="firsttime-3">new file</link>.
+ </emphasis>
+</para>
+
+<para>
+ Only the name is required in the New Institution Dialog, all other fields are
+ optional. As with the personal information dialog, this data is not currently
+ used by &kappname;, but will be required by future releases for certain
+ features. In particular, the Routing Number and the <acronym><ulink
+ url="http://en.wikipedia.org/wiki/ISO_9362">BIC (Bank Identifier
+ Code)</ulink></acronym> will be required for online banking.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="details.institutions.account">
+<title>Account Options</title>
+
+<para>
+ Right-clicking an account name brings up an Account Options sub-menu.
+ Selecting <guimenuitem>New account...</guimenuitem> steps you through the new
+ account process. Selecting <guimenuitem>Open Ledger</guimenuitem> brings you
+ directly to the Ledgers view or Investments view, depending on the account
+ type. Simply double-clicking an account name also opens the account. Selecting
+ <guimenuitem>Edit account</guimenuitem> brings up a window allowing you to
+ change an account's name, start date, associated banking institution, and
+ parent account. Deleting an account is only possible if there are no
+ transactions associated with that account. Selecting
+ <guimenuitem>Reconcile...</guimenuitem> opens up the Reconcile Wizard, which
+ steps you through the process of comparing your bank account statements to
+ your electronic entries. More details, as well as information about the other
+ options is presented in the appropriate sections of this manual.
+</para>
+
+<para>
+<screenshot>
+ <screeninfo>account options sub-menu</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="account_options.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>account options sub-menu</phrase>
+ </textobject>
+ </mediaobject>
+</screenshot>
+</para>
+</sect1>
+</chapter>
diff --git a/doc/en/details-integrity.docbook b/doc/en/details-integrity.docbook
new file mode 100644
index 0000000..048dcf7
--- /dev/null
+++ b/doc/en/details-integrity.docbook
@@ -0,0 +1,6 @@
+<chapter id="details.integrity">
+<title>Integrity Checks - Under development - UNASSIGNED</title>
+<para>
+</para>
+</chapter>
+
diff --git a/doc/en/details-investments.docbook b/doc/en/details-investments.docbook
new file mode 100644
index 0000000..e9cae48
--- /dev/null
+++ b/doc/en/details-investments.docbook
@@ -0,0 +1,623 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="details.investments">
+<chapterinfo>
+ <authorgroup>
+ <author>
+ <firstname>Ace</firstname>
+ <surname>Jones</surname>
+ <affiliation>
+ <address><email>acejones@users.sourceforge.net</email></address>
+ </affiliation>
+ </author>
+ </authorgroup>
+ <date>2009-06-14</date>
+ <releaseinfo>1.0</releaseinfo>
+</chapterinfo>
+
+<title>Investments</title>
+
+<sect1 id="details.investments.overview">
+<title>Investments in &kappname;</title>
+
+<sect2>
+<title>Investments</title>
+
+<para>
+ Investments are instruments for investing money that are traded on a market.
+ Stocks, bonds, and mutual funds are the most common investments; so they are
+ the ones supported most directly. Futures, commodities, options, and more
+ complex derivatives are also sometimes used, but &kappname; has no special
+ functionality for them. As long as they behave like a stock or a bond, they
+ can be tracked easily.
+</para>
+</sect2>
+
+<sect2>
+<title>Base Currency</title>
+<para>
+ Each investment has a Base Currency. This is the currency in which it is
+ traded. When a price quote is entered for an investment, the currency of the
+ value given is always its base currency. A stock on the NYSE (New York Stock
+ Exchange) would be in US dollars, and one on an Australian market would be in
+ Australian dollars.
+</para>
+</sect2>
+
+<sect2>
+<title>Investment Accounts</title>
+<para>
+ Investment Accounts hold a collection of investments. An Investment account
+ contains transactions, such as buys and sells, of those investments. All
+ transactions in an Investment account must relate to a specific investment.
+ There is no separate <quote>cash balance</quote> in an investment account. For
+ that, you need a Brokerage Account.
+</para>
+</sect2>
+
+<sect2>
+<title>Brokerage Accounts</title>
+<para>
+ An investment account often has an associated Brokerage Account. This is also
+ sometimes referred to as a <quote>Cash Account</quote>. Investment accounts
+ cannot contain cash transactions, like a transfer from your bank. When a
+ stock is sold, the proceeds are typically placed in the Brokerage Account.
+</para>
+
+<para>
+ When you create an Investment Account, you have the option of creating an
+ associated Brokerage Account with it.
+</para>
+
+</sect2>
+
+</sect1>
+
+<sect1 id="details.investments.investment">
+<title>Creating an Investment Account</title>
+
+<para>
+ The first step on the path to working with investments is to create an account
+ to hold your investments. Choose <menuchoice><guimenu>Account</guimenu>
+ <guimenuitem>New account...</guimenuitem></menuchoice> to begin the process of
+ adding a new account. Create an account as usual, making sure to choose
+ <quote>Investment</quote> as the type of account.
+</para>
+
+<para>
+ To work with the new investment account, navigate to the
+ <guibutton>Investments</guibutton> view, and choose the account you have just
+ created from the <guilabel>Select Account</guilabel> dropdown box.
+</para>
+</sect1>
+
+<sect1 id="details.investments.securities">
+<title>Adding Investments to Your Account</title>
+
+<para>
+ To add individual Investments to your Investment Account, navigate to
+ the <guibutton>Investments</guibutton> view, and choose the account where the
+ investment is held from the <guilabel>Select Account</guilabel> drop-down box.
+</para>
+
+<para>
+ Right-click the mouse in the empty space in the view. This brings up
+ the <guimenu>Investment Options</guimenu> context menu. Choose
+ <guimenuitem>New...</guimenuitem> from this menu. This launches the
+ <guilabel>New Investment Wizard</guilabel> which you use to create your new
+ Investment.
+</para>
+
+<sect2 id="details.investments.newinvestmentwizard">
+<title>New Investment Wizard</title>
+
+<para>
+ The first thing you'll be asked to enter is the type of investment, whether
+ it's a stock, bond, etc.
+</para>
+
+<para>
+ Next, the investment details page is presented. The following information is
+ entered on this page:
+</para>
+
+<itemizedlist>
+ <listitem><para> Trading Symbol. The ticker symbol used to identify the
+ investment on whatever market it trades. &kappname; requires a trading
+ symbol for all investments; however some investments do not have symbols.
+ In this case, you will need to make up a symbol for it.
+ </para></listitem>
+
+ <listitem><para> Full name. The friendly, readable name of the investment
+ you're creating, e.g., <quote>Advanced Micro Devices, Inc.</quote> This name is
+ also referred to as the security.
+ </para></listitem>
+
+ <listitem><para> Fraction. The degree of precision to which your holdings are
+ measured. For example, in the US most mutual funds measure holdings to
+ three decimal places, so you would enter 1000 in this field. Stocks are
+ often measured to only whole units, so you could enter 1 for a stock like
+ this.
+ </para></listitem>
+
+ <listitem><para> Trading market. Where the stock trades. This is an optional
+ field which is provided for your convenience. This information is not used
+ anywhere else in &kappname;.
+ </para></listitem>
+
+ <listitem><para>Identification. An optional field to enter additional
+ identification information you might like to keep track of. Again, this
+ information is not used anywhere else.
+ </para></listitem>
+
+ <listitem><para>Trading currency. The underlying currency in which this
+ investment trades on its market.
+ </para></listitem>
+
+ <listitem><para> Price entry. Choose whether the price will be entered as an
+ individual price, or as the total for all shares.
+ </para></listitem>
+</itemizedlist>
+
+<para>
+ If you are using Online Quotes, ensure that the symbol exactly matches the
+ symbol used by your quote source. Yahoo covers most of the world's markets,
+ and requires a suffix on the end of symbols outside the US. For example,
+ Rubicon Limited on the New Zealand market should be entered as
+ <quote>RBC.NZ</quote>.
+</para>
+
+<para>
+ Finally, you're presented with the Online Update screen. This is where you
+ tell &kappname; how you would like to update the prices of your investment.
+ The following items are set here:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+ Use Finance::Quote. This is an option for GnuCash users who are used to
+ this style of quotes. Most users can leave this unchecked.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Online Source. The online source you'd like to use for this particular
+ investment. The most common choice is <quote>Yahoo</quote>. Try that
+ first, and if the investment cannot be found using this source, then
+ experiment with the others.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Factor. A multiplier that should be applied to quotes retrieved for this
+ investment. This is most commonly needed for UK stocks where the price
+ quoted is in pence (1/100), and the stock is denominated in pounds. In
+ this case, enter 0,01 for the Factor.
+ </para>
+ </listitem>
+</itemizedlist>
+</sect2>
+</sect1>
+
+<sect1 id="details.investments.edit">
+<title>Editing an Investment</title>
+
+<para>
+ The Investment view window lists your current holdings in this account, along
+ with their symbol, value, and price. Right-click the mouse on any of the
+ investments to bring up the <guimenu>Investment Options</guimenu> context
+ menu, where you have the option to add, edit, or delete individual investments
+ from this account. Also, you can update the price of your investments here
+ either manually or via their online source. In addition, it is possible to
+ close an empty account, or to reopen a closed account.
+</para>
+</sect1>
+
+<sect1 id="details.investments.ledger">
+<title>Investment Transactions</title>
+
+<para>
+ <screenshot>
+ <screeninfo>Investment Transaction Form</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="investment-transactionform.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Investment Transaction Form</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ Investment transactions are entered and edited in the
+ <link linkend="details.ledgers">ledger</link> view, as with other kinds of
+ accounts. However, the fields are different, and vary depending on the
+ investment transaction type or activity. Investment transactions have some
+ additional elements:
+</para>
+
+<itemizedlist>
+ <listitem><para>Activity</para></listitem>
+ <listitem><para>Security</para></listitem>
+ <listitem><para>Account</para></listitem>
+ <listitem><para>Shares, Price, &amp; Total Amount</para></listitem>
+ <listitem><para>Fees</para></listitem>
+ <listitem><para>Interest category</para></listitem>
+</itemizedlist>
+
+<sect2>
+<title>Activity</title>
+<para>
+ The Activity for an investment transaction describes what action is happening
+ to the stock. The following activities are supported:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+ Buy/Sell. Use to record purchases or sales of individual investments.
+ This action requires an account to transfer the funds from/to.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Dividend/Yield. Also known as a <quote>Cash Dividend</quote>, this action
+ is used for when you receive an interest or dividend disbursement from
+ your investment. This action requires an account to transfer the funds
+ from/to.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Reinvest Dividend. This is a dividend where the proceeds are re-invested
+ back into the investment.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Add/Remove Shares. A simple increase or decrease in your balance. This
+ should be used very rarely, because it's uncommon for shares to just show
+ up in your account (or disappear) unless it's a purchase or a sale.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Split Shares. Used when the stock is split. Enter the ratio of the split
+ in the <quote>Split Ratio</quote> field. For example, in a 3:2 split,
+ enter 1.5
+ </para>
+ </listitem>
+</itemizedlist>
+</sect2>
+
+<sect2>
+<title>Security</title>
+<para>
+ Each investment transaction must be associated with an individual security,
+ which is here just another name for an investment. Choose the investment name
+ when adding or editing a transaction. The symbol will be displayed when
+ viewing it.
+</para>
+</sect2>
+
+<sect2>
+<title>Account</title>
+<para>
+ For any transactions which generate or require money, you must enter the
+ account where the money is transferred to/from. If your investment account
+ has an associated brokerage account, it's usually best to transfer the funds
+ there. This applies to funds for purchase or sale of the investment, as well
+ as for fees paid or interest or dividends earned.
+</para>
+</sect2>
+
+<sect2>
+<title>Shares, Price &amp; Total Amount</title>
+<para>
+ For buy, sell, and cash dividend transactions, the number of shares, the price
+ per share, and the total amount of the transaction must be established. You
+ can enter any two of these, and &kappname; will calculate the third. It's
+ usually best to enter just the total amount and the number of shares, because
+ these are the known facts of the transaction. The price per share can be
+ calculated from these.
+</para>
+</sect2>
+
+<sect2>
+<title>Fees</title>
+<para>
+ With many investment transactions you can include the fees (or commission) you
+ paid the broker. If you enter a category for the fee, then a field will be
+ shown to the right where you can enter the amount of the fee. If you need to
+ enter more than one fee for the transaction, you can use
+ the <link linkend="details.ledgers.split">Split Transactions</link> feature.
+ In this case, when you complete entering all the splits, the total amount of
+ the fees will be shown to the right.
+</para>
+</sect2>
+
+<sect2>
+<title>Interest</title>
+<para>
+ This is how you enter an interest or dividend payment from an invenstment. As
+ with fees, if you enter a category, then a field will be shown to the right
+ where you can enter the amount. You can also use the split transaction
+ feature, if required.
+</para>
+</sect2>
+
+</sect1>
+
+<sect1 id="details.investments.foreign">
+<title>Working With Foreign Investments</title>
+
+<para>
+ &kappname; supports multiple currencies and investments, and you may want to
+ combine the two. However, doing so requires extra care. As noted above, when
+ you added an investment, you had to specify its trading currency. This might
+ not be the same as your base currency, and it also might not be the same as
+ the account in which you hold the stock or the account where you transfer your
+ funds to/from for buys/sells.
+</para>
+
+<para>
+ Consider a hypothetical case. Your base currency is USD. You have an
+ investment account in EUR, and a brokerage account also in EUR. In that
+ account, you hold shares of TietoEnator, which is traded in SEK.
+</para>
+
+<para>
+ When you enter a buy transaction on this investment, use SEK as the currency.
+ So if you buy 100 shares at a price of SEK 248.00, for a total of SEK
+ 24,800.00, enter these values in the transaction.
+</para>
+
+<para>
+ <screenshot>
+ <screeninfo>Currency Warning</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="investment-currencywarning.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Currency Warning</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ When you choose the brokerage account to fund the transfer, you'll be warned
+ that it's in a different currency.
+</para>
+
+<para>
+ <screenshot>
+ <screeninfo>Exchange Rate Editor</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="investment-exchangerateeditor.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Exchange Rate Editor</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ When you finish the transaction, you will be prompted for a price update to
+ the investment account's currency, in this case, SEK -> EUR. Review the
+ documentation on <link linkend="details.currencies.prices">Entering Prices
+ Manually</link> for more information on the price dialog.
+</para>
+
+<para>
+ If you then switch over to the brokerage account, you will see the transaction
+ as EUR 2,254.54, assuming an exchange rate is 11.0000 SEK / EUR.
+</para>
+</sect1>
+
+<sect1 id="details.investments.prices">
+<title>Updating Prices</title>
+<para>
+ There are two ways of updating the prices for your investments. You can
+ either enter the new price manually or have &kappname; fetch it from the web.
+
+</para>
+
+<sect2>
+<title>Manual Price Updates</title>
+<para>
+ You can enter prices for your investments using the same
+ <link linkend="details.currencies.prices">Price Editor</link> as used for
+ currencies.
+</para>
+</sect2>
+
+<sect2 id="details.investments.onlinequotes">
+<title>Online Price Quotes</title>
+<para>
+ &kappname; has the ability to download the latest prices for your investments
+ and currencies via the web.
+</para>
+
+<sect3>
+<title>How Online Quotes Work</title>
+<para>
+ At your request, &kappname; will fetch a page from the web that contains the
+ latest price for each item. By default, prices are fetched from
+ http://finance.yahoo.com, and are subject to the terms and conditions of that
+ site.
+</para>
+
+<para>
+ The online quote lookup uses the investment's trading symbol to find the
+ price. Therefore, it's important to set the symbol correctly. Yahoo supports
+ stocks from most major world markets, so it's usually just a matter of finding
+ the correct symbol. For example, TietoEnator trades on the Stockholm Stock
+ Exchange market, and its Yahoo symbol is TIEN.ST.
+</para>
+
+<para>
+ To find the trading symbol for a security supported by Yahoo, use the
+ <quote>Symbol Lookup</quote> feature at http://finance.yahoo.com.
+</para>
+</sect3>
+
+<sect3>
+<title>Assigning a Quote Source</title>
+
+<para>
+ In order to get online price quotes, you first have to enable it for each
+ investment or currency you want updated, by setting a <quote>Online Quote
+ Source</quote>. This is the name of the service from which the quote should
+ be fetched. KMyMoney ships with several sources to choose from. Yahoo is the
+ recommended default source, and should work for most investments and all
+ currencies.
+</para>
+
+<para>
+ To assign a quote source to an investment, navigate to the investment summary
+ view for the account in which the security is held. Edit the security by
+ right-clicking it and selecting <guimenuitem>Edit Investment
+ ...</guimenuitem>. In the Investment Detail Wizard,
+ click <guibutton>Next</guibutton> twice, for the Online Update section. In
+ the Online source dropdown box, select the online source.
+</para>
+
+<para>
+ Versions of &kappname; starting with 0.9 contain support for the
+ Finance::Quote package for obtaining online quotes. This is intended primarily
+ as a convenience for those users converting from the GnuCash finance package,
+ which uses it as its native method. If you do select this option, you should
+ see a different list of sources, those supported by Finance::Quote. If the
+ list is empty, it suggests that the package is not properly installed. See
+ their web site at
+ <ulink url="http://finance-quote.sourceforge.net">
+ http://finance-quote.sourceforge.net</ulink> for more information.
+</para>
+</sect3>
+
+<sect3>
+<title>Adjusting a quote</title>
+
+<para>
+ Some online sources do not report the price in a base quantity (e.g., EUR) but
+ in a fraction (e.g., Cent). Using this information as price will produce wrong
+ values for your investments.
+</para>
+
+<para>
+ If this is the case for your online source, you can use the
+ <guilabel>Factor</guilabel> field to enter an adjusting factor. For the above
+ mentioned example the factor would be 0.01.
+</para>
+
+<para>
+ The <guilabel>Factor</guilabel> field is only available if a
+ <guibutton>Quote Source</guibutton> has been selected.
+</para>
+</sect3>
+
+<sect3>
+<title>Fetching Quotes</title>
+
+<para>
+ Typically, you will update the prices for all your investments and currencies
+ at once. Choose the <menuchoice><guimenu>Tools</guimenu><guimenuitem>Update
+ Stock and Currency Prices...</guimenuitem></menuchoice> menu option to bring
+ up the online price quotes dialog. Press <guibutton>Update All</guibutton> to
+ fetch quotes for all investments and currencies in your &kappname; file.
+</para>
+
+<para>
+ <screenshot>
+ <screeninfo>Update Stock and Currency Prices</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="investment-onlineupdate.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Online Stock and Currency Price Update</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+</sect3>
+
+<sect3>
+<title>Adding or Editing Quote Sources</title>
+
+<para>
+ Adding or editing quote sources is not recommended for anyone but the most
+ technical user. You should feel comfortable reading HTML and writing complex
+ regular expressions. If this doesn't sound like you, we recommend writing to
+ the developer's list if none of the quote sources work for you. Ideally,
+ please point us to a web page where these quotes can be obtained.
+</para>
+
+<para>
+ If you do feel up to the challenge, here's how it works. The quote sources
+ are contained in the settings dialog.
+ Choose <menuchoice><guimenu>Settings</guimenu><guimenuitem>Configure
+ &kappname;</guimenuitem></menuchoice>. From there, choose
+ the <guilabel>Online Quotes</guilabel> section. You can choose an existing
+ source to edit, or create a new one. When you are done with your changes, be
+ sure to press the <guibutton>Update</guibutton> button before exiting the
+ dialog. Your changes are not saved by default.
+</para>
+
+<para>
+ The first thing to worry about in an online quote source is the URL. This is
+ the page that is fetched from the web. You will see a %1 in all sources, and
+ a %2 in currency sources. For investments, %1 is replaced by the trading
+ symbol. For currencies, %1 is replaced by the From currency, and %2 is
+ replaced by the To currency. This URL is then fetched, all HTML tags are
+ removed, and that stripped file is then sent to the page parser.
+</para>
+
+<para>
+ Note that the URL can also be a file: URL, which the quote fetcher takes to
+ mean an executable script. It will pass any command-line arguments to it that
+ you have specified, and feed the stdout to the page parser. For example, you
+ might have a script called getquote.sh that contains custom quote logic,
+ taking the symbol as a single parameter. Your URL would be
+ <quote>file:/path/to/getquote.sh %1</quote>.
+</para>
+
+<para>
+ The page parser looks for a symbol, a date, and a price. Regular expressions
+ tell it how to extract those items from the page. Please review the
+ documentation for the <ulink
+ url="http://qt.nokia.com/doc/3.3/qregexp.html#1">QRegExp class</ulink> at
+ http://qt.nokia.com/doc/3.3/qregexp.html#1 for the exact makeup of the
+ regular expressions. There should be exactly one capture expression,
+ surrounded by parentheses, in each regexp. The date format further tells the
+ date parser the order of year, month, and day. This date format should always
+ be in the form "%x %x %x". where x is y, m, or d. The date parser is very
+ smart. <quote>%m %d %y</quote> will parse <quote>December 31st, 2005</quote>
+ as easily as <quote>12/31/05</quote>. Two digit years are interpreted as
+ being in the range of 1950-2049.
+</para>
+</sect3>
+</sect2>
+</sect1>
+
+<sect1 id="details.investments.unimplemented">
+<title>Unimplemented Features</title>
+<para>
+ Certain common features that are normally found with investments are not yet
+ implemented in &kappname;. These include: Derivatives (options, futures,
+ etc), capital gains, and tax reporting for investments.
+</para>
+</sect1>
+</chapter>
diff --git a/doc/en/details-ledgers.docbook b/doc/en/details-ledgers.docbook
new file mode 100644
index 0000000..18f2166
--- /dev/null
+++ b/doc/en/details-ledgers.docbook
@@ -0,0 +1,674 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="details.ledgers">
+<chapterinfo>
+ <authorgroup>
+ <author>
+ <firstname>Michael</firstname>
+ <othername>T.</othername>
+ <surname>Edwardes</surname>
+ <affiliation>
+ <address><email>mte@users.sourceforge.net</email></address>
+ </affiliation>
+ </author>
+ <author>
+ <firstname>Roger</firstname>
+ <surname>Lum</surname>
+ <affiliation>
+ <address><email>rogerlum@gmail.com</email></address>
+ </affiliation>
+ </author>
+ </authorgroup>
+ <date>2009-07-23</date>
+ <releaseinfo>1.0</releaseinfo>
+</chapterinfo>
+
+<title>Ledgers</title>
+
+<sect1 id="details.ledgers.view">
+<title>The Ledger View</title>
+
+<para>
+ The Ledger view is where most of the functionality of &kappname; lies. This
+ view is for examining and entering transaction data in the various
+ accounts. The view is split into three main areas: the filter area, the
+ transaction list, and the input area.
+</para>
+
+<para>
+ This view allows for several key actions: searching and viewing transactions,
+ entering new transactions, and editing or deleting existing
+ transactions. Other functionality includes modifying account details and
+ reconciling the account.
+</para>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="ledgerview-numbered.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Ledger View</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ The view has three elements:
+</para>
+
+<itemizedlist>
+ <listitem><para>The filter area</para></listitem>
+ <listitem><para>The transaction list</para></listitem>
+ <listitem>
+ <para>
+ The transaction input form, which may or may not appear, depending upon
+ your configuration.
+ </para>
+ </listitem>
+</itemizedlist>
+
+<sect2>
+<title>The filter area</title>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="accountdropdown.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Filter area</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ You can select an account via the account dropdown list at the top of the view
+ area. Note that depending upon the type of the account the <link
+ linkend="details.ledger.transactionform">transaction input form</link> at the
+ bottom of the view changes.
+</para>
+
+<para>
+ To the right of the account dropdown list, are two additional fields. The
+ search box acts as a filter on the transactions that are shown in the list
+ view. Only transactions that include the text typed in the search box are
+ displayed. The text specified can be in any of the fields of the transaction.
+ The status field is a dropdown list. Only transactions of the type selected in
+ that dropdown are displayed.
+</para>
+
+</sect2>
+
+<sect2>
+<title>The transaction list</title>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="translist.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Transaction list</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ After you have entered a transaction, it is displayed in the transaction list.
+ You can also change transaction properties or even create new transactions
+ directly in the list. In the transactions list, the default arrangement of
+ transactions is sorted by date with the most recent transaction on the bottom.
+ Clicking the Right Mouse Button on the header of the transaction list brings
+ up a dialog that allows you to change the sort order of the transactions. You
+ can change the default sort order in the <link
+ linkend="details.settings.register.sorting">Sorting tab</link> section of the
+ <link linkend="details.settings">&kappname; Settings</link> Chapter.
+</para>
+</sect2>
+
+<sect2>
+<title>The transaction input form</title>
+
+<para>
+ The exact layout of the bottom area of the ledger view depends on your
+ configuration and the type of account being displayed. However, it generally
+ includes fields for all the details of a single transaction, as well as
+ buttons for various actions that can apply to a transaction. It is described
+ in more detail in the following sections.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="details.ledger.transactions">
+<title>Entering Transactions</title>
+
+<para>
+ There are two methods of entering transactions into the ledger: using the
+ transaction input form and entering the data directly into the transaction
+ list. The transaction input form is displayed by default and this is the
+ method we will discuss first.
+</para>
+
+<para>
+ The fields in the input area match the information fields in the transactions
+ list. Additional fields include the Memo field, for a more detailed
+ description of the transaction, and a Category selection. The Split button
+ allows you to split the transaction into multiple categories.
+</para>
+</sect1>
+
+<sect1 id="details.ledger.transactionform">
+<title>Using the transaction input form</title>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="transactionform.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Transaction Form</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ The transaction input form at the bottom of the ledger view is the interface
+ for creating transactions.
+</para>
+
+<para>
+ Depending upon the type or method of transaction you wish to enter there are
+ several tabs available on the transaction form. Click on the tab that best
+ describes your transaction (deposit, transfer, or withdrawal) and the form
+ will load several fields ready for your input.
+</para>
+
+<para>
+ Please note that the actual transaction method is not used directly by
+ &kappname; but is purely for grouping/reporting purposes.
+</para>
+
+<para>
+ If you are unsure which method to choose simply use Deposit for any money
+ going into the account, Withdrawal for money coming out of the account, and
+ Transfer for money moving from one account to another. The transaction
+ methods and the differences between them are discussed in more detail
+ elsewhere.
+</para>
+
+<para>
+ Select the transaction method by clicking on one of the tabs.
+</para>
+
+<sect2>
+<title>The fields of a transaction</title>
+
+<para>
+ Enter the information using the following notes on the available fields. Note
+ that many fields have 'Auto Completion' turned on. That is, if you start
+ typing, &kappname; will offer alternatives matching the characters you have
+ entered so far. To select an entry click on it using the mouse or keyboard,
+ or if your entry is not listed keep typing to add the new value. The next
+ time you type the value in, &kappname; will find it for you after the first
+ few characters have been input.
+</para>
+
+<sect3>
+<title>The Payee</title>
+
+<para>
+ The Payee is who the money came from/to. If the payee is a new entry
+ &kappname; will ask if you wish to add this to the list of Payees. Any other
+ information related to a payee or payer, such as address details can be
+ updated in the Payees view later.
+</para>
+</sect3>
+
+<sect3>
+<title>The Category</title>
+
+<para>
+ The Category associates a transaction with an income or expense category for
+ accounting and reporting purposes, and enables you to group certain
+ transactions. Type the name of the category into the required field. If you
+ have entered the category and it does not exist then &kappname; will ask if
+ you want to create a new one.
+</para>
+
+<para>
+ If you wish to associate parts of the transaction with different categories,
+ &kappname; can let you do that. An example transaction might be a cash
+ machine withdrawal of 50 of which you use 10 on food, 20 on beer and 20 as
+ spare cash. The transaction will therefore be assigned three categories:
+ Food, Beer, and Cash. To do this, you need to use <link
+ linkend="details.ledgers.split">Split Transactions</link>, which is described
+ in more detail below.
+</para>
+
+<para>
+ See the special <link linkend="reference.widgets">&kappname; fields</link>
+ section for more information on how to use this field.
+</para>
+</sect3>
+
+<sect3>
+<title>The Memo</title>
+
+<para>
+ A multi-line memo can be entered if you wish to help you remember what the
+ transaction was for.
+</para>
+</sect3>
+
+<sect3>
+<title>The Check Number</title>
+
+<para>
+ The check number can be entered if needed. Note that the check number can
+ always be visible if desired. This is configured in the Settings dialog.
+</para>
+</sect3>
+
+<sect3>
+<title>The Date</title>
+
+<para>
+ The transaction's posting date must be entered to specify when the transaction
+ took place. See the special <link linkend="reference.widgets">&kappname;
+ fields</link> section for more information on how the date input field can be
+ used to make entering dates quicker and easier.
+</para>
+</sect3>
+
+<sect3>
+<title>The Amount</title>
+
+<para>
+ Finally, enter the transaction amount into the required field. Note that a
+ simple calculator can be displayed, either by clicking the icon to the right
+ of the amount field, or by entering the % character into the field, or by
+ entering a formula, as in <emphasis>12 + 3</emphasis>. When entering the plus
+ sign, the calculator will be opened.
+</para>
+
+<para>
+ When you are satisfied that all the fields have been filled in correctly,
+ click on <guibutton>Enter</guibutton>. If you accidentally press or click on
+ <guibutton>Enter</guibutton> before you have finished entering all the data,
+ click on <guibutton>Edit</guibutton> to resume entering the data.
+</para>
+</sect3>
+</sect2>
+</sect1>
+
+<sect1 id="details.ledger.direct">
+<title>Directly inputting transactions into the list</title>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="transactionform-off.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Direct Transaction Entry</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ The second method of entering transactions into the ledger involves editing
+ the transaction list itself directly.
+</para>
+
+<para>
+ To do this you must first let &kappname; know that you don't want to use the
+ transaction form by opening the settings dialog and unchecking the
+ <guilabel>Show transaction form</guilabel> option.
+</para>
+
+<para>
+ This is performed by selecting <guimenu>Settings</guimenu>
+ <guimenuitem>Configure &kappname;</guimenuitem> from the menu bar and
+ selecting the <guiicon><inlinemediaobject><imageobject><imagedata
+ fileref="ledgers_view.png"/></imageobject></inlinemediaobject>
+ Register</guiicon> icon from the list on the left. The option to uncheck is
+ labeled <guilabel>Show transaction form</guilabel>. When finished click on
+ <guibutton>OK</guibutton> to be ready to directly enter transactions.
+</para>
+
+<sect2>
+<title>Starting the edit</title>
+
+<para>
+ To enter a new transaction into the register you can now either click on an
+ empty entry, press <keycombo action="simul">&Ctrl;&Insert;</keycombo>, or
+ click <guibutton>New</guibutton> at the foot of the window. The
+ <keycap>Up</keycap> and <keycap>Down</keycap> arrow keys let you navigate
+ through the list. After pressing <keycap>Enter</keycap> or double clicking on
+ an entry, the transaction list displays the fields required to enter the
+ transaction and waits for input.
+</para>
+
+<para>
+ To move through the fields press the <keycap>Tab</keycap> key and when done
+ press <keycap>Enter</keycap> to save the changes or <keycap>Esc</keycap> to
+ cancel.
+</para>
+
+<para>
+ In case the option <guilabel>Use Enter to move between fields</guilabel> is
+ selected, the <keycap>Enter</keycap> moves to the next field just as the
+ <keycap>TAB</keycap> key except for the last entry field where it stores the
+ data.
+</para>
+
+<para>
+ Which method you use to enter transactions is up to you and is a matter of
+ personal preference.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="details.ledgers.split">
+<title id="details.ledgers.split.title">Split Transactions</title>
+
+<para>
+ The Split transaction feature allows you to divide up a transaction into
+ multiple categories, representing, for example, the different items bought
+ with a single purchase at a store.
+</para>
+
+<para>
+ To enter a split transaction, using either the transaction input form or the
+ transaction list, start a new transaction as normal, including entering the
+ total amount. Then, instead of selecting a category, click the
+ <guibutton>Split</guibutton> button. If you have already selected a category,
+ that becomes the first entry in the split editor screen.
+</para>
+
+<para>
+ In the split editor screen, double-click an empty line to enter a new
+ sub-transaction or press <keycombo
+ action="simul">&Ctrl;&Insert;</keycombo>. Specify the category, add an
+ (optional) memo, and enter the amount. To save this part of the split, press
+ the green check mark under the category. To cancel, press the red cross.
+</para>
+
+<para>
+ After entering a split, the bottom of the split editor shows how much of the
+ total transaction is still unassigned. After entering all the splits, press
+ the <guibutton>OK</guibutton> button to save the entire transaction. If there
+ is still an unassigned amount, you will be prompted to either return to
+ editing the splits, change the total transaction amount, or leave part of the
+ transaction unassigned.
+</para>
+
+<para>
+ Note that the category field in the transaction input form or the transaction
+ list now displays <emphasis>Split transaction</emphasis>.
+</para>
+
+<para>
+ <screenshot>
+ <screeninfo>Split transactions</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="split_transaction.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Split transaction</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+</sect1>
+
+<sect1 id="details.ledger.edit">
+<title>Editing transactions</title>
+<para>
+ To edit a transaction, select it in the list view and either click on
+ <guibutton>Edit</guibutton> in the transaction input form or right click on
+ the entry and select <guimenuitem>Edit</guimenuitem> from the popup menu. If
+ you are editing transactions directly in the list you can edit the transaction
+ simply by double clicking on an entry or by pressing <keycap>Enter</keycap>
+ when a transaction is highlighted.
+</para>
+</sect1>
+
+<sect1 id="details.ledger.delete">
+<title>Deleting transactions</title>
+
+<para>
+ To delete a transaction, select it in the list view, right click on the entry,
+ and select <guimenuitem>Delete</guimenuitem> from the popup menu when it
+ appears, or click <guibutton>Delete</guibutton> on the transaction form.
+</para>
+</sect1>
+
+<sect1 id="details.ledgers.match">
+<title id="details.ledgers.match.title">Matching Transactions</title>
+
+<para>
+ Generally, when importing transactions, either via QIF, OFX, or HBCI, KMyMoney
+ will automatically attempt to match them against existing transactions. To
+ allow for differences in the dates, there is a default setting of 4 days,
+ which may be changed in the settings - Register/Import. Any transactions so
+ matched will be highlighted in green. On completion of the import, you should
+ review these and either accept or unmatch them.
+</para>
+
+<para>
+ If you should find that an imported transaction was not automatically matched
+ with an existing transaction when it should have matched, then it is possible
+ to match them manually. Note that there is a difference between manually
+ matching two transactions and simply deleting one of them, even though they
+ may appear to have the same effect. Specifically with OFX or HBCI, it is
+ important not to delete the imported transaction, because you will find that
+ the next time you import your transactions, the deleted transaction shows up
+ again. This is because modern import formats like OFX and HBCI use a
+ <quote>Transaction ID</quote> to identify transactions. When you delete the
+ imported transaction, the transaction ID goes with it, so the importer has no
+ way to know this transaction was already imported.
+</para>
+
+<para>
+ The solution is to tell &kappname; that the transactions are the same, using
+ the manual matching interface. This allows you to match an imported
+ transaction with a hand-entered (non-imported) transaction. To do so, select
+ one of the transactions to be matched by clicking on it, then select the other
+ by left clicking on it while pressing the Ctrl key, and then select
+ <guimenuitem>Match</guimenuitem> from the context menu. This changes the
+ background color to a pale green. This will match and combine the two
+ transactions together. The values of both transactions must be the same for
+ the match to work, except that the dates may differ by the window specified in
+ the settings, as described above. If you are happy with the result, right
+ click the matched transaction, then select <guibutton>Accept</guibutton>.
+</para>
+
+<para>
+ During import of online statements - either directly or by importing a
+ downloaded file - &kappname; performs matching as best as it can based on the
+ name of the payee and the amount of the transaction. In case of an invalid
+ match, a matched transaction can be unmatched.
+</para>
+
+<note>
+ <para>
+ The matching interface will not allow you to match two transactions which
+ have both been imported. Likewise, it won't allow matching between two
+ transactions which have both been entered by hand.
+ </para>
+</note>
+</sect1>
+
+<sect1 id="details.ledgers.cleared">
+<title>Understanding the Cleared State</title>
+
+<para>
+ A transaction can have one of three states: non-reconciled, cleared (C), and
+ reconciled (R). When you enter a transaction, it has state
+ non-reconciled. Once the bank posts the transaction, the user can clear it
+ and thus transform it to state (C). When you receive a statement from the
+ bank, all cleared transactions should be on the statement.
+</para>
+
+<para>
+ <screenshot>
+ <screeninfo>Understanding the cleared state</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="cleared_state.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>cleared state</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ When you <link linkend="details.reconcile">reconcile your account</link>, you
+ actually mark the statements as cleared and check that the difference between
+ the beginning balance and the cleared transactions equals the ending balance
+ of the statement. When this is the case, you can 'finish reconciling' which
+ actually changes the state of all cleared transactions (C) to reconciled (R).
+</para>
+
+<para>
+ If you try to edit a transaction with at least one split marked as reconciled
+ (R), you will be warned.
+</para>
+
+<para>
+ A fourth state is defined (frozen (F)) but there's currently no way to set
+ it. It is reserved for future use. Nevertheless, if a transaction has at least
+ one split in state frozen it cannot be edited anymore.
+</para>
+
+</sect1>
+
+<sect1 id="details.ledgers.settings"><title id="details.ledgers.settings.title">Changing Transaction Settings</title>
+
+<para>
+ There are several settings options that change the appearance and behaviour of
+ the ledger view in terms of transactions. These settings are found by
+ selecting <guimenu>Settings</guimenu> <guimenuitem>Configure
+ &kappname;</guimenuitem> from the menu bar, and selecting the
+ <guiicon><inlinemediaobject><imageobject><imagedata fileref="ledgers_view.png" />
+ </imageobject></inlinemediaobject>Register</guiicon> icon from the list on the
+ left.
+</para>
+
+<para>
+ Most of the settings are self explanatory. For clarity, several of the
+ settings are explained below.
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+ Show transaction form (under the Display tab) - toggle to hide the
+ transaction input area at the bottom of this screen. Transactions can
+ still be entered directly into an empty line at the end of the transaction
+ list, through an automatic compact entry area.
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+ These images show what direct transaction entry looks like compared to the
+ transaction form.
+</para>
+
+<para>The transaction input form</para>
+
+<para>
+ <screenshot>
+ <screeninfo>The transaction form</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="transactionform.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Transaction form</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>Transactions entered directly</para>
+
+<para>
+ <screenshot>
+ <screeninfo>Transactions entered directly</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="transactionform-off.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Direct input</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+ Keep changes when selecting a different transaction/split - by selecting
+ the next line in the transaction list or split editor, the changes are
+ kept, instead of the default behaviour where you have to push the green
+ check mark to save changes.
+ </para>
+ </listitem>
+</itemizedlist>
+
+</sect1>
+
+<sect1 id="details.ledgers.other">
+<title id="details.ledgers.other.title">Other Functionality</title>
+
+<para>
+ Additional options are available from the <guimenu>Transaction
+ Options</guimenu> menu, accessed by right-clicking any transaction in the
+ list.
+</para>
+
+<para>
+ <screenshot>
+ <screeninfo>The transaction options sub-menu</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="ledger_more.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Transaction options</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ Options include jumping to the Payee's page, creating a schedule, and changing
+ the reconciled or cleared indication.
+</para>
+
+<para>
+ To edit the account information from the ledger view, select
+ <guimenu>Account</guimenu> from the menu bar. From this menu, you can change
+ the account details, or bring up the Reconcile menu, which allows you to match
+ transactions against an official bank statement or credit card notice.
+</para>
+</sect1>
+</chapter>
diff --git a/doc/en/details-loans.docbook b/doc/en/details-loans.docbook
new file mode 100644
index 0000000..d175e73
--- /dev/null
+++ b/doc/en/details-loans.docbook
@@ -0,0 +1,230 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="details.loans">
+<chapterinfo>
+ <authorgroup>
+ <author>
+ <firstname>Darin</firstname>
+ <surname>Strait</surname>
+ <affiliation>
+ <address><email>darin.strait@ashdar-partners.com</email></address>
+ </affiliation>
+ </author>
+ </authorgroup>
+<date>2009-08-03</date>
+<releaseinfo>1.0</releaseinfo>
+</chapterinfo>
+
+<title>Loans</title>
+
+<sect1 id="details.loans.general">
+<title>Understanding Loans</title>
+
+<para>
+ This section provides an overview of how &kappname; handles loans. Loan
+ regulations and customs vary from locality to locality. For detailed
+ explanations of loans, as well as information on local regulations and
+ customs, please see other resources.
+</para>
+
+<para>
+ A loan is an agreement under which a borrower receives money from a lender and
+ agrees to repay the money at some future date. &kappname; allows you to track
+ loans by which you, as borrower, borrow money from or, as lender, lend money
+ to someone else. Most individuals borrow more than they lend, so you will
+ generally be the borrower and a finance company will generally be the
+ lender. If you lend money to a family member or a friend, you can use
+ &kappname; to keep track of this loan as well.
+</para>
+
+<para>
+ This guide will assume that you are borrowing from some sort of finance
+ company, but the topics discussed here apply equally well to loans that you
+ might make to a person. The main difference between borrowing and lending
+ money is that an expense category is used to keep track of interest when
+ borrowing money and an income category is used to keep track of interest when
+ lending money.
+</para>
+
+<formalpara><title>Loan Principal</title>
+<para>
+ The amount that is lent out is called the <quote>loan amount</quote> or
+ <quote>principal</quote>.
+</para>
+</formalpara>
+
+<formalpara><title>Term</title>
+<para>
+ The period of a loan is called its <quote>term</quote> of the loan. At the end
+ of the term, the entirety of the principal will have been returned to the
+ borrower. Terms are generally expressed in weeks, months, or years. A term can
+ also be expressed by the number of payments. For example, a one year loan with
+ weekly repayments could be described as a one year loan or a loan with 52
+ repayments.
+</para>
+</formalpara>
+
+<formalpara><title>Repayments</title>
+<para>
+ The repayment of the principal to the lender is generally not done as a lump
+ sum. Instead, a series of repayments are made, each representing a portion of
+ the principal. Such repayments are sometimes known as <quote>amortization
+ payments</quote> and in &kappname; <quote>Amortization</quote> is defined as
+ the act of paying off a loan in installments.
+</para>
+</formalpara>
+
+<formalpara><title>Payment Frequency</title>
+<para>
+ The frequency of installments is referred to as <quote>Payment
+ Frequency</quote> in &kappname;. Examples of period might be weekly,
+ bi-weekly, monthly, quarterly, or yearly. In the US, periodic payments are
+ most commonly made every month, therefore the loan's period is one month.
+</para>
+</formalpara>
+
+<formalpara><title>Interest Rate</title>
+<para>
+ For the privilege of being able to use the money, the borrower will pay the
+ lender a fee called the <quote>interest</quote>, normally expressed as a
+ percentage of the amount of the principal over a defined period. Interest
+ rates can be fixed, where the interest rate does not change over the lifetime
+ of the loan, or variable, where the interest rate can change over
+ time. Typically, interest payments are included with each periodic repayment.
+</para>
+</formalpara>
+
+<formalpara><title>Periodic Repayments</title>
+<para>
+ Since these repayments are generally made on some sort of scheduled basis,
+ such as weekly, monthly, quarterly, or yearly, they are referred to as
+ <quote>periodic repayments</quote>. The sum of all periodic repayments plus
+ the final repayment will add up to the loan principal plus the interest.
+</para>
+</formalpara>
+
+<formalpara><title>Fees</title>
+<para>
+ There may be other fees besides interest that are required to be paid with
+ every installment. These are called <quote>recurring fees</quote>. Examples of
+ recurring fees include (but are not necessarily limited to):
+
+<!--would prefer itemized list not in para, but formalpara requires para-->
+<itemizedlist>
+ <listitem>
+ <para>
+ <quote>Impound</quote> or <quote>escrow</quote> account
+ payments. (Payments of this sort are commonly used to hold funds to pay
+ annual or bi-annual property taxes.)
+ </para>
+ </listitem>
+
+ <listitem><para>Mortgage insurance</para></listitem>
+
+ <listitem><para>Disability insurance</para></listitem>
+
+ <listitem><para>Loan account maintenance fees</para></listitem>
+</itemizedlist>
+</para>
+</formalpara>
+
+<formalpara><title>Summary</title>
+<para>
+ In summary, the borrower receives a lump sum from the lender at the start of
+ the loan. The borrower makes a periodic payment to the lender. The periodic
+ payment is the sum of the principal payment (which is used to pay down the
+ balance of the loan) plus the interest payment (which rewards the lender for
+ allowing the use of the money by the borrower) plus any recurring fees (which
+ cover any incidentals.) At the end of the loan, the borrower has paid back the
+ entire principal.
+</para>
+</formalpara>
+</sect1>
+
+<sect1 id="details.loans.example">
+<title>Example</title>
+<para>
+ For an example, you might borrow $25,000.00 for a new auto and agree to pay
+ the bank one payment each month for 60 months. The interest rate on the loan
+ might be 5.5%.
+</para>
+
+<para>
+ In this scenario, the loan amount is $25,000.00. The term of the loan is 60
+ months or 5 years. The term of the loan could also be described as 60
+ payments since there will be one payment per month for 5 years. The repayment
+ frequency is one month since periodic repayments will be made once a
+ month. The periodic repayment, which is calculated by &kappname;, would be
+ $477.53.
+</para>
+
+<para>
+ A <quote>loan schedule</quote> is a chart or table that shows the date that a
+ repayment should be made and the amount of each periodic repayment. Often,
+ these schedules break the periodic payment down into its constituent parts:
+ the principal repayment, the interest payment, and the recurring fees payment.
+</para>
+</sect1>
+
+<sect1 id="details.loans.creation">
+<title>Creating a New Loan</title>
+
+<para>
+ In &kappname;, a loan is a type of account. Therefore, to create a new loan,
+ you begin by selecting <menuchoice><guimenu>Account</guimenu><guimenuitem>New
+ Account</guimenuitem></menuchoice>. Continue by answering the questions that
+ the wizard poses to you.
+</para>
+
+<para>
+ Optionally, a loan can be associated with a particular institution. If you are
+ borrowing from a mortgage company or a car loan company, you could create an
+ institution entry that describes this firm and associate the institution with
+ your loan. If you are borrowing from your Uncle Ted, there is no requirement
+ to set up an institution.
+</para>
+</sect1>
+
+<sect1 id="details.loans.extra-payments">
+<title>Making Extra Principle Repayments On Loans</title>
+
+<para>
+ If you would like to make an extra principal repayment, you can do so.
+ Simply <link linkend="details.ledger.transactions">enter a transaction</link>
+ using the ledger. This extra repayment of principal will be taken into
+ account for the interest calculation that happens for the next periodic
+ payment.
+</para>
+
+<para>
+ Examples of extra principal payments include (but are not necessarily limited
+ to):
+</para>
+
+<itemizedlist>
+ <listitem><para>Contributing an extra $50 a month</para></listitem>
+
+ <listitem>
+ <para>
+ Doubling the periodic principal repayment for every period. (The principal
+ repayment can be found for any particular period by referring to the loan
+ schedule.)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Making a 13th principal repayment every year. (This assumes a loan that is
+ repaid in monthly installments.)
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+ Note: If you are doubling the principal repaid with every periodic payment,
+ you will need to recalculate the loan schedule for each installment. This will
+ allow there to be an accurate value for the required principal repayment with
+ each installment.
+</para>
+</sect1>
+</chapter>
+
diff --git a/doc/en/details-payees.docbook b/doc/en/details-payees.docbook
new file mode 100644
index 0000000..6e23438
--- /dev/null
+++ b/doc/en/details-payees.docbook
@@ -0,0 +1,241 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="details.payees">
+<chapterinfo>
+ <authorgroup>
+ <author>
+ <firstname>Roger</firstname>
+ <surname>Lum</surname>
+ <affiliation>
+ <address><email>rogerlum@gmail.com</email></address>
+ </affiliation>
+ </author>
+ <author>
+ <firstname>Ace</firstname>
+ <surname>Jones</surname>
+ <affiliation>
+ <address><email>acejones@users.sf.net</email></address>
+ </affiliation>
+ </author>
+ </authorgroup>
+ <date>2009-06-04</date>
+ <releaseinfo>1.0</releaseinfo>
+</chapterinfo>
+
+<title id="details.payees.title">Payees</title>
+
+<para>
+ The Payees screen provides detailed information about all the payees and
+ payers involved in transactions. The Payees screen is split into two main
+ areas: a payees and payers list and a detail area.
+</para>
+
+<para>
+ The Payees screen allows for viewing the transactions for the selected payee,
+ updating personal information associated with a particular payee or payer, and
+ specifying transaction matching criteria.
+</para>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="payeeview.png" format="PNG" />
+ </imageobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<sect1 id="details.payees.list">
+<title>Payees List</title>
+
+<para>
+ A list of payees and payers is on the left side of this screen. The payee list
+ is sorted alphabetically. To sort in reverse alphabetical order, click on the
+ Name title at the top of the list.
+</para>
+
+<sect2>
+<title>Adding a Payee or Payer</title>
+
+<para>
+ To add a payee or payer, right-click on any payee name and choose
+ <guimenuitem>New payee</guimenuitem>. This creates a new payee called
+ <quote>New Payee</quote>. Right-click on this payee and select
+ <guimenuitem>Rename payee</guimenuitem> to enter the name of the new payee or
+ payer.
+</para>
+</sect2>
+
+<sect2>
+<title>Renaming a Payee or Payer</title>
+
+<para>
+ To rename a payee or payer, simply right-click on the name, select
+ <guimenuitem>Rename payee</guimenuitem> and the name becomes
+ editable. Changing the name will affect the name in all the transactions in
+ which it appears.
+</para>
+</sect2>
+
+<sect2>
+<title>Deleting a Payee or Payer</title>
+
+<para>
+ To remove a payee or payer, right-click the name and select
+ <guimenuitem>Delete payee</guimenuitem>. If the payee has any transactions,
+ you will be presented with a dialog that allows you to reassign them to a
+ different payee, and also a check box to enable a deleted name to be added to
+ the new payee's matching list.
+</para>
+</sect2>
+
+</sect1>
+
+<sect1 id="details.payees.personalinformation">
+<title>Additional Payee Details</title>
+
+<sect2>
+<title>Personal Information</title>
+
+<para>
+ To view and edit the personal information associated with a particular payee,
+ select the payee from the list and select the Address tab. To modify this
+ information, edit the detail area directly and press the Update button when
+ finished.
+</para>
+
+<para>
+<screenshot>
+ <screeninfo>The personal information tab</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="payee_info.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Personal information</phrase>
+ </textobject>
+ </mediaobject>
+</screenshot>
+</para>
+</sect2>
+
+<sect2>
+<title>Transaction Matching Settings</title>
+
+<sect3>
+<title>Overview</title>
+
+<para>
+ &kappname; has the ability to automatically assign the proper payee to imported
+ transactions. This can be handy when importing transactions from your bank,
+ when the payee name has extra unnecessary characters, or worse, if the payee
+ names change.
+</para>
+
+<para>
+ For example, let's say your monthly mortgage payment comes in from your bank
+ like this <quote>SUNTRUST BANK MAPLE VALLEY, GA 111506</quote> one month and
+ then <quote>SUNTRUST BANK MAPLE VALLEY, GA 121606</quote> the next month. You
+ would really like both of those transactions to be assigned simply to your
+ payee <quote>SunTrust</quote>. The transaction matching feature is for you!
+</para>
+
+<para>
+<screenshot>
+ <screeninfo>The payee matching tab</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="payee_match.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Payee matching details</phrase>
+ </textobject>
+ </mediaobject>
+</screenshot>
+</para>
+</sect3>
+
+<sect3>
+<title>Setting up</title>
+
+<para>
+ From the Matching tab, you can set the Transaction Matching Settings. You have
+ 3 major options:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+ No Matching. Disables the feature for this payee. This is the default
+ setting for all payees.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Match on Payee Name. Enables the feature, and uses the payee name itself
+ as the Match Key
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Match on Key. Enables the feature, and allows you to enter one or more
+ Match Keys of your choosing. In general, entering a plain string will
+ work perfectly. However, the match keys are actually regular expressions,
+ so it is possible to match on more complicated patterns.
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+ You can also choose whether you want to ignore the case of the Match Key. If
+ you choose this option, the Match Key <quote>SunTrust</quote> would match
+ <quote>SUNTRUST BANK</quote> or <quote>SunTrust Bank</quote>.
+</para>
+</sect3>
+
+<sect3>
+<title>Importing Transactions</title>
+
+<para>
+ When you import transactions using the QIF import, or using a plugin such as
+ OFX or AqBanking, the Match Keys you have set will be considered. If the
+ Match Key for one of your payees is found anywhere in the payee of the
+ imported transaction, the corresponding payee from your list will be assigned
+ to that transaction. Thus, a Match Key of <quote>SunTrust</quote> will match
+ <quote>SUNTRUST BANK MAPLE VALLEY,GA</quote> or even
+ <quote>MORGENSUNTRUST&amp;LOAN</quote>. So choose your Match Keys carefully.
+ <note><para> If a transaction payee matches more than one Match Key, the
+ behaviour is undefined. &kappname; will arbitrarily pick one of the matching
+ payees. </para></note>
+</para>
+</sect3>
+</sect2>
+</sect1>
+
+<sect1 id="details.payees.transactionhistory">
+<title>Viewing Transaction History</title>
+
+<para>
+ To view all transactions associated with a particular payee, select the payee
+ from the list and the Transaction tab in the detail area. Double-clicking a
+ particular transaction will bring you directly to that transaction in the
+ Ledgers screen.
+</para>
+
+<para>
+<screenshot>
+ <screeninfo>The transaction tab</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="payee_history.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Transaction history</phrase>
+ </textobject>
+ </mediaobject>
+</screenshot>
+</para>
+</sect1>
+</chapter>
diff --git a/doc/en/details-reconciliation.docbook b/doc/en/details-reconciliation.docbook
new file mode 100644
index 0000000..0f9d3f1
--- /dev/null
+++ b/doc/en/details-reconciliation.docbook
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="details.reconcile">
+<chapterinfo>
+ <authorgroup>
+ <author>
+ <firstname>Michael</firstname>
+ <othername>T.</othername>
+ <surname>Edwardes</surname>
+ <affiliation>
+ <address><email>mte@users.sourceforge.net</email></address>
+ </affiliation>
+ </author>
+ </authorgroup>
+ <date>2009-07-28</date>
+ <releaseinfo>1.0</releaseinfo>
+</chapterinfo>
+
+<title>Reconciliation</title>
+
+<sect1 id="details.reconcile.whatis">
+<title>What is reconciliation?</title>
+
+<para>
+ Reconciliation is the process of matching the transactions you have entered
+ into &kappname; with the transactions listed for that account by the
+ institution. This is most commonly done with the list of transactions in a
+ statement, be it a bank statement, credit card statement, loan statement, or
+ any other statement. It can also be done against an on-line listing of the
+ account, although this is less common. If any discrepancies are found, then
+ either you or the person who created the statement have made a mistake.
+</para>
+
+<para>
+ To reconcile an account, choose your account from the drop down box and click
+ on the <guiicon><inlinemediaobject> <imageobject><imagedata
+ fileref="reconcile.png"/></imageobject>
+ </inlinemediaobject>Reconcile</guiicon> icon, select
+ <menuchoice><guimenu>Account</guimenu>
+ <guimenuitem>Reconcile...</guimenuitem></menuchoice> or use the key
+ combination Ctl+Shift+R.
+</para>
+</sect1>
+
+<sect1 id="details.reconcile.wizard">
+<title>The reconciliation wizard</title>
+<para>
+ This will open the reconciliation wizard. The first page of the wizard
+ briefly describes the process you will follow. Click
+ on <guibutton>Next</guibutton> to actually start the wizard.
+</para>
+
+<para>
+<screenshot>
+ <screeninfo>Reconciliation wizard</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="reconcile1.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Reconciliation wizard</phrase>
+ </textobject>
+ </mediaobject>
+</screenshot>
+</para>
+
+<sect2 id="details.reconcile.wizard.statement">
+<title>Statement details</title>
+<para>
+ The statement date, starting balance, and ending balance can be found in your
+ statement. Make sure that the figures match and click on
+ the <guibutton>Next</guibutton> button. If the figures do not match then
+ enter the figures as listed on your statement and click on
+ the <guibutton>Next</guibutton> button.
+</para>
+
+<para>
+<screenshot>
+ <screeninfo>Reconciliation wizard</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="reconcile2.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Reconciliation wizard</phrase>
+ </textobject>
+ </mediaobject>
+</screenshot>
+</para>
+
+</sect2>
+
+<sect2 id="details.reconcile.wizard.interest">
+<title>Interest</title>
+<para>
+ If the statement reconciliation is on a bank account or any account with
+ interest and/or charges fees, then enter these values in the appropriate
+ fields. A category can be assigned for each of these amounts.
+</para>
+
+<para>
+<screenshot>
+ <screeninfo>Reconciliation wizard</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="reconcile3.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Reconciliation wizard</phrase>
+ </textobject>
+ </mediaobject>
+</screenshot>
+
+<note>
+<para>
+ The interest field is for interest you gained. If you have to pay interest,
+ e.g., for a credit card account, this has to be entered as a charge.
+</para>
+</note>
+</para>
+
+<para>
+ Click on <guibutton>Finish</guibutton> to start matching your statement to
+ what you have entered. Note that this completes the Reconciliation Wizard,
+ but not the process of reconciliation. As described below, you still need to
+ clear transactions and then tell &kappname; that the account is reconciled.
+</para>
+</sect2>
+
+<sect2 id="details.reconcile.wizard.clearing">
+<title>Clearing transactions</title>
+<para>
+ To mark a transaction as cleared, click on the C column in the list view. A
+ transaction is cleared when it matches the transaction on your statement.
+</para>
+
+<para>
+ During the reconciliation, any transaction can be edited to make it match the
+ statement, and new transactions can be created as usual.
+</para>
+
+<para>
+<screenshot>
+ <screeninfo>Reconciliation wizard</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="reconcile4.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Reconciliation wizard</phrase>
+ </textobject>
+ </mediaobject>
+</screenshot>
+</para>
+</sect2>
+
+<sect2 id="details.reconcile.complete">
+<title>Completing Reconciliation</title>
+
+<sect3 id="details.reconcile.finish">
+<title>Finishing Reconciliation</title>
+<para>
+ The command frame (just below the transaction list area) displays the
+ statement amount and the cleared amount. When the difference is zero then the
+ account is reconciled and you can click the <guibutton>Finish</guibutton>
+ button. When you do this, &kappname; takes all the transactions which have
+ been marked as cleared and marks them as reconciled, and the C column changes
+ to 'R' to reflect the change. In addition, it saves the changes and
+ records that the account has been reconciled.
+</para>
+</sect3>
+
+<sect3 id="details.reconcile.postpone">
+<title>Postponing Reconciliation</title>
+<para>
+ To postpone the reconciliation to a later time, click on
+ the <guibutton>Postpone</guibutton> button. Any edits you have made to any
+ transactions, such as marking them cleared, can still be saved before you
+ exit &kappname;, but you will have to run the reconciliation wizard again in
+ order to reconcile the account. If you exit &kappname; before clicking either
+ <guibutton>Finish</guibutton> or <guibutton>Postpone</guibutton>, it has the
+ same effect as clicking <guibutton>Postpone</guibutton>.
+</para>
+</sect3>
+</sect2>
+</sect1>
+
+</chapter>
+
diff --git a/doc/en/details-reports.docbook b/doc/en/details-reports.docbook
new file mode 100644
index 0000000..e05ec01
--- /dev/null
+++ b/doc/en/details-reports.docbook
@@ -0,0 +1,456 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="details.reports">
+<chapterinfo>
+ <authorgroup>
+ <author>
+ <firstname>Ace</firstname>
+ <surname>Jones</surname>
+ <affiliation>
+ <address><email>acejones@users.sourceforge.net</email></address>
+ </affiliation>
+ </author>
+ </authorgroup>
+ <date>2009-07-28</date>
+ <releaseinfo>1.0</releaseinfo>
+</chapterinfo>
+
+<title>Reports</title>
+
+<sect1 id="details.reports.avail">
+<title>Available Reports</title>
+
+<para>
+<screenshot>
+ <screeninfo>Reports View</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="reports_view-all.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Reports View</phrase>
+ </textobject>
+ </mediaobject>
+</screenshot>
+</para>
+
+<para>@Rob: Pls update Screenshot to include new Charts section</para>
+
+<para>
+ The Reports View lists all available reports, grouped under the following
+ headings.
+</para>
+
+<sect2>
+<title>Income and Expenses</title>
+<para>
+ The reports in this section show your income and expenses either for the
+ current month or for each month in the current year. Of course, the duration
+ of the overall report and the duration captured by each column can be
+ configured to your liking. Graphs and Pie Charts also may be produced.
+</para>
+</sect2>
+
+<sect2>
+<title>Net Worth</title>
+<para>
+ Here there are reports that describe your net worth, either at the current
+ moment, every month for the current year, or every year of your history. In
+ addition, there is a 7-day Cash Flow Forecast and a Net Worth Graph. There
+ are also reports to get the balances for all of your accounts at any given
+ point in time.
+</para>
+</sect2>
+
+<sect2>
+<title>Transactions</title>
+<para>
+ This section includes reports that list individual transactions. This is the
+ best way to print your account register for a specific period of time. The
+ transactions printed can be grouped together according to your liking by
+ choosing the appropriate report, such as:
+<itemizedlist>
+ <listitem><para>By Account</para></listitem>
+ <listitem><para>By Category</para></listitem>
+ <listitem><para>By Month or Week</para></listitem>
+ <listitem><para>By Payee</para></listitem>
+</itemizedlist>
+</para>
+
+</sect2>
+
+<sect2>
+<title>Cash Flow</title>
+<para>
+ The Cash Flow report is similar to a Transaction report, but it displays all
+ cash-flow related transactions.
+</para>
+</sect2>
+
+<sect2>
+<title>Investments</title>
+<para>
+ These reports help you keep track of your investments. They only include
+ investment accounts. There are a variety of presentation filters and styles,
+ as shown in this partial list.
+</para>
+<itemizedlist>
+ <listitem><para>Investment Transactions: Similar to a Transactions report,
+ and includes the share price and quantities.</para></listitem>
+ <listitem><para>Investment Holdings by Account: Shows the current shares,
+ price, and value for each account.</para></listitem>
+ <listitem><para>Investment Holdings by Type: Same as the previous report, but
+ organizes the accounts by type (Stock, Mutual Fund, etc)</para></listitem>
+ <listitem><para>Investment Performance by Account: Shows the annualized
+ performance over any period of time. This performs a cash flow analysis of
+ all money coming into and going out of the account. As a result, this is a
+ very accurate picture of how well your investments are
+ doing.</para></listitem>
+ <listitem><para>Investment Performance by Type: Same as the previous report,
+ but organizes the accounts by type (Stock, Mutual Fund,
+ etc)</para></listitem>
+</itemizedlist>
+
+<para>
+ There are also graphs for Investment Prices and Investment Worth.
+</para>
+</sect2>
+
+<sect2>
+<title>Taxes</title>
+<para>
+ The tax reports are just like the transactions reports, with the addition that
+ only Tax related categories are included. This allows you to flag certain
+ categories as being tax-related, and then get one big report at the end of the
+ year to see them all in one place. They may be listed either by Category or by
+ Payee, and for the last fiscal year.
+</para>
+</sect2>
+
+<sect2>
+<title>Budgeting</title>
+<para>
+ The budgeting reports are similar to net worth reports, but the reports can
+ display the budget for a given year, or even compare it to the actual income
+ and expenses for the same period.
+</para>
+</sect2>
+
+<sect2>
+<title>Forecast</title>
+<para>
+ The forecast reports are just like the net worth reports, but they use the
+ information to display forecast information. You can display the information
+ at various levels and for the timeframe of your choosing.
+</para>
+</sect2>
+
+<sect2>
+<title>General Information</title>
+<para>
+ These reports display non-transaction information about schedules, accounts,
+ and loans.
+</para>
+</sect2>
+
+<sect2>
+<title>Charts</title>
+<para>
+ If <link linkend="details.reports.charts">Charts</link> are enabled, this
+ section lists all the reports which are marked to display a graphical chart as
+ the default. They are also listed in one of the other sections, but they are
+ also aggregated here for your easy reference.
+</para>
+</sect2>
+
+<sect2>
+<title>Favorites</title>
+<para>
+ This section lists all the reports you have marked as a favorite in the report
+ configuration dialog. They are still listed in one of the other sections, but
+ they are also aggregated here for your easy reference. Favorite reports are
+ also included on the financial summary page for even easier reference.
+</para>
+</sect2>
+
+<sect2>
+<title>Configuring Reports</title>
+<para>
+ To access the report configuration dialog, bring up the report you wish to
+ configure, and press the <guibutton>Configure</guibutton> button at the top of
+ the report.
+</para>
+</sect2>
+
+</sect1>
+
+<sect1 id="details.reports.working">
+<title>Working With Reports</title>
+
+<para>
+ There are a number of actions you can take on each report. You can access
+ these by right-clicking the report name in the list of reports. Alternately,
+ once you have run a report, there are buttons across the top of the view to
+ invoke each of these:
+</para>
+
+<itemizedlist>
+ <listitem><para>Chart: Only present if the report is capable of displaying a
+ chart. Clicking this option toggles between the report and the
+ chart.</para></listitem>
+ <listitem><para>Configure: Change the properties of this report. You can
+ customize the report to your liking and save it for future
+ use.</para></listitem>
+ <listitem><para>New: Create a new customized report based on the selected
+ report.</para></listitem>
+ <listitem><para>Copy: The report output can be copied to the clipboard to
+ paste them in another application, like a spreadsheet, for further
+ analysis.</para></listitem>
+ <listitem><para>Export: Reports can be saved in &HTML; or CSV
+ format.</para></listitem>
+ <listitem><para>Delete: Customized reports can be deleted. The default
+ reports that ship with KMyMoney cannot be deleted.</para></listitem>
+ <listitem><para>Close: Close the current report.</para></listitem>
+</itemizedlist>
+</sect1>
+
+<sect1 id="details.reports.config">
+<title>Configuring Reports</title>
+
+<sect2>
+<title>Working with custom reports</title>
+<para>
+ You can configure the default reports or create your own from them by
+ selecting 'New' and then configuring the new report. When you select
+ 'Configure' you will be presented with the Report Tab. Initially, it is named
+ the same as the old report with <quote>Custom</quote> added to the end. You
+ can change the name to whatever you want. You can even name your custom
+ reports the same as a default report, or the same as another custom
+ report. Also, you can always use the Comment field to further distinguish
+ reports.
+</para>
+
+<para>
+ The Report Configuration dialog has a number of tabs across the top. Each tab
+ displays options for configuring different aspects of the report.
+</para>
+
+</sect2>
+
+<sect2><title>Report Tab</title>
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="report_configuration-reporttab.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Report Configuration -Report</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ On this tab, you set the basic properties of this report.
+<itemizedlist>
+ <listitem><para>Report Name: Choose a name for this report.</para></listitem>
+ <listitem><para>Comment: Enter a comment to help you remember the details of
+ this report.</para></listitem>
+ <listitem><para>Convert values to base currency: Select this option to convert
+ all values in the report to your base currency. Leave it unchecked if you'd
+ like to see values in their original currency. If currencies are not
+ converted, then subtotals will not be shown.</para></listitem>
+ <listitem><para>Mark as favorite report: Check this to cause this report to
+ show up on the home page and in the group of <guilabel>Favorite
+ Reports</guilabel>.</para></listitem>
+</itemizedlist>
+</para>
+
+</sect2>
+
+<sect2 id="details.reports.config.rowscolumns">
+<title>Rows/Columns Tab</title>
+<para>
+ On this tab, you configure how you would like the rows and columns to be selected
+ and organized. This tab presents different configuration options depending on
+ the style of report you have selected.
+</para>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="report_configuration-rowscolumns.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Report Configuration -Rows and Columns</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>@Rob: Screenshot of rows/columns tab from an income/expense report</para>
+
+<para>
+ For income/expense and net worth reports:
+<itemizedlist>
+ <listitem><para>Columns: Choose how large of a time period each column should
+ encompass</para></listitem>
+ <listitem><para>Rows: Choose what kind of accounts to display as the rows of
+ this report</para></listitem>
+ <listitem><para>Detail: Choose the level of detail required for this
+ report.</para></listitem>
+</itemizedlist>
+</para>
+
+<para>The following levels of detail are available:
+<itemizedlist>
+ <listitem><para>All: Show every category or account.</para></listitem>
+ <listitem><para>Top-Level: Show only the highest-level categories or accounts,
+ and roll up the sums of the subordinates categories or accounts into those
+ values.</para></listitem>
+ <listitem><para>Groups: Show only the totals of the income, expenses, assets,
+ or liabilities.</para></listitem>
+ <listitem><para>Total: Show only the grand totals line.</para></listitem>
+</itemizedlist>
+</para>
+
+<para>
+ For transaction reports:
+<itemizedlist>
+ <listitem><para>Organize by: Choose how to group the transactions in this
+ report</para></listitem>
+ <listitem><para>Show Columns: Choose which columns should be shown in the
+ report. The date and transaction amount are always shown.</para></listitem>
+ <listitem><para>Include only Tax Categories: Only show categories which have
+ been marked as tax-related.</para></listitem>
+ <listitem><para>Include only Investment Accounts: Only show transactions from
+ investment accounts.</para></listitem>
+ <listitem><para>Include only Loan Accounts: Only show transactions from loan
+ accounts.</para></listitem>
+</itemizedlist>
+</para>
+
+</sect2>
+
+<sect2>
+<title>Chart Tab</title>
+<para>@Rob: Screenshot of chart tab</para>
+
+<para>
+ This tab allows you to configure what the report should look like when it is
+ displayed as a chart. See the <link linkend="details.reports.charts">Graphs
+ &amp; Charts</link> section for more explanation of the charting functions.
+<itemizedlist>
+ <listitem><para>Chart Type: The visual format of chart
+ desired.</para></listitem>
+ <listitem><para>Show grid lines: Whether to print horizontal and vertical grid
+ lines on the chart.</para></listitem>
+ <listitem><para>Draw values on chart: Whether to print the data values on the
+ chart itself for chosen data points.</para></listitem>
+ <listitem><para>Show chart by default: Whether this report should first be
+ displayed as a chart when it's opened.</para></listitem>
+ <listitem><para>Line width: The width of data lines on the
+ chart.</para></listitem>
+</itemizedlist>
+</para>
+
+</sect2>
+
+<sect2>
+<title>Other Tabs</title>
+<para>
+ The other tabs in this dialog are the same as in the Search Transactions
+ interface. Please refer to
+ the <link linkend="details.search">documentation</link> on that interface for
+ details on the other tabs.</para>
+</sect2>
+
+</sect1>
+
+<sect1 id="details.reports.charts">
+<title>Graphs &amp; Charts</title>
+
+<sect2>
+<title>Viewing as a Chart</title>
+
+<para>
+ Each report can be viewed in either textual form or graphical (chart) form.
+ The same report configuration parameters are used in either case. You can
+ easily jump back and forth between the textual and graphical forms by pressing
+ the <guibutton>Chart</guibutton> or <guibutton>Report</guibutton> buttons
+ along the top of the report view.
+</para>
+
+<para>
+ Care should be taken to limit the amount of data you choose to display on a
+ chart. If you are not careful, using the same configuration for both textual
+ and graphical forms means it's possible to configure a chart to be visually
+ cluttered, unappealing, and uninformative. &kappname; will not force you to
+ keep your charts readable and useful!
+</para>
+
+</sect2>
+
+<sect2>
+<title>Available Chart Types</title>
+
+<sect3>
+<title>Line Graph</title>
+<para>@Rob: Screenshot of a simple line graph</para>
+
+<para>
+ A line graph is one of the most simple forms of a chart. There is one line
+ for each series. (Usually a series is a single account or category; see below
+ for more details on that.) The time periods stretch out along the bottom axis,
+ and the currency values are along the left.
+</para>
+
+<para>
+ The detail level for each line is controlled in the <link
+ linkend="details.reports.config.rowscolumns">Rows/Columns</link> Tab of chart
+ configuration. If you choose the <quote>Top-Level</quote> detail level, there
+ will be one line for each of the top-most accounts or categories which show
+ the sum total of all underlying accounts or categories. If you choose
+ <quote>Groups</quote> it will instead show one line each for Income, Expenses,
+ Assets, or Liabilities, depending on the other settings.
+</para>
+</sect3>
+
+<sect3>
+<title>Bar Graph</title>
+<para>@Rob: Screenshot of a simple bar graph</para>
+
+<para>
+ The bar graph works exactly the same as the line graph, except there is one
+ bar for each series in each time slice.
+</para>
+</sect3>
+
+<sect3>
+<title>Pie Chart</title>
+<para>@Rob: Screenshot of a simple pie chart</para>
+
+<para>
+ The pie chart is the most simple chart available. It shows only one time
+ slice, as opposed to showing the values across time. This chart shows only
+ the totals column of whatever report is selected. If your report is
+ configured to NOT convert values to the base currency, there will be no totals
+ column, and therefore this report is not useful.
+</para>
+</sect3>
+
+<sect3>
+<title>Ring Chart</title>
+<para>@Rob: Screenshot of a simple ring chart</para>
+
+<para>
+ The ring chart is very similar to a pie chart, except there is one
+ <quote>ring</quote> for each time slice in the report.
+</para>
+</sect3>
+
+</sect2>
+
+</sect1>
+</chapter>
diff --git a/doc/en/details-schedules.docbook b/doc/en/details-schedules.docbook
new file mode 100644
index 0000000..a5945d2
--- /dev/null
+++ b/doc/en/details-schedules.docbook
@@ -0,0 +1,460 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="details.schedules">
+<chapterinfo>
+ <authorgroup>
+ <author>
+ <firstname>Roger</firstname>
+ <surname>Lum</surname>
+ <affiliation>
+ <address><email>rogerlum@gmail.com</email></address>
+ </affiliation>
+ </author>
+ <author>
+ <firstname>Michael</firstname>
+ <othername>T.</othername>
+ <surname>Edwardes</surname>
+ <affiliation>
+ <address><email>mte@users.sourceforge.net</email></address>
+ </affiliation>
+ </author>
+ </authorgroup>
+ <date>2009-07-21</date>
+ <releaseinfo>1.0</releaseinfo>
+</chapterinfo>
+
+<title>Schedules</title>
+
+<sect1 id="details.schedules.intro">
+<title>Introduction</title>
+
+<para>
+ <quote>
+ Schedules maintain information about transactions that occur one or more
+ times over a specified period of time.
+ </quote>
+</para>
+
+<para>
+ Sometimes called a recurring transaction, a schedule provides a means to
+ record information about a transaction that happen on a regular basis. A
+ common schedule is your salary. Once a month, or maybe weekly, the company
+ you work for pays you for services rendered. This payment can happen in many
+ different ways, but each month or week you will receive a payment that needs
+ to be recorded.
+</para>
+
+<para>
+ Because you know these payments are regularly made to you, you can create a
+ Schedule to record information about the payment and even create the
+ transaction for you when pay day arrives.
+</para>
+
+<para>
+ Other types of schedules can also be recorded to reflect money coming in and
+ out of your accounts. Common expenses, such as utility bills or money
+ transfers, can be recorded with schedules, along with loan
+ repayments. Scheduling a payment can also provide a useful reminder that you
+ need to make a payment.
+</para>
+
+<para>
+ A schedule consists of two main parts: the scheduling data and the transaction
+ data. The scheduling data records the occurrence of the schedule, i.e., when
+ the transaction is to be entered into the ledger and how. The transaction
+ data records the normal details about the transaction, and will be entered in
+ to the ledger as-is.
+</para>
+</sect1>
+
+<sect1 id="details.schedules.type">
+<title>Types of schedules</title>
+
+<para>
+ There are four different types of schedules in the current version of
+ &kappname;:
+</para>
+
+<itemizedlist>
+ <listitem><para>Bills</para></listitem>
+ <listitem><para>Deposits</para></listitem>
+ <listitem><para>Loans</para></listitem>
+ <listitem><para>Transfers</para></listitem>
+</itemizedlist>
+
+<sect2>
+<title>Bills</title>
+
+<para>
+ A Bill Schedule is used for money going out of your account, such as a Gym
+ membership or a utility bill.
+</para>
+</sect2>
+
+<sect2>
+<title>Deposits</title>
+
+<para>
+ A Deposit Schedule is for money coming into your account, such as a pay check.
+</para>
+</sect2>
+
+<sect2>
+<title>Loans</title>
+
+<para>
+ A Loan Schedule is a special type of schedule and is created when dealing with
+ <link linkend="details.loans">Loan</link> accounts.
+</para>
+</sect2>
+
+<sect2>
+<title>Transfers</title>
+
+<para>
+ A Transfer Schedule is used for money coming out of one account and going into
+ another, such as making a credit card payment from your checking account.
+</para>
+</sect2>
+
+</sect1>
+
+<sect1 id="details.schedules.view">
+<title>The schedule view</title>
+
+<para>
+ Open the schedule view by clicking on the <guiicon>Schedule
+ <inlinemediaobject><imageobject><imagedata
+ fileref="schedule_view.png"/></imageobject></inlinemediaobject></guiicon> icon in
+ the view selector.
+</para>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="scheduleview.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Schedule View</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ The schedule view consists of a view area with two tabs along with a
+ <guibutton>New Schedule</guibutton> button above it. The first tab
+ <guibutton>List View</guibutton> shows all schedules, grouped by type. The
+ second tab <guibutton>Calendar View</guibutton> is described in its own
+ section below.
+</para>
+
+<para>
+ To create a new schedule click on the button. For Bill, Deposit, and Transfer
+ schedules, &kappname; will display the new schedule dialog. Loan schedules are
+ handled differently, and are described in the section on Loans.
+</para>
+</sect1>
+
+<sect1 id="details.schedules.new">
+<title>The new schedule dialog</title>
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="newsched_numbered.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>New Schedule</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ A new dialog window is now shown, prompting for the schedule and transaction
+ data. The requested data includes the following:
+</para>
+
+<orderedlist numeration="upperalpha">
+ <listitem><para>Schedule Name</para></listitem>
+ <listitem><para>Next due date</para></listitem>
+ <listitem><para>Frequency</para></listitem>
+ <listitem><para>Payment method</para></listitem>
+ <listitem><para>Amount</para></listitem>
+ <listitem><para>Other transaction details</para></listitem>
+ <listitem><para>Schedule options</para></listitem>
+</orderedlist>
+
+<sect2>
+<title>Filling in the fields</title>
+
+<para>
+ Enter the name and the date of the next occurrence of this schedule into their
+ respective fields. The name is how the schedule will be shown in the list
+ view. Specify how often the schedule should occur, using the Frequency field
+ and drop down list. For example "every 6 weeks" or "every 3 months". If the
+ amount varies transaction to transaction make sure to check the
+ <guilabel>Estimate</guilabel> check box and you will be prompted for the
+ correct amount when it is entered into the ledger. Fill in all the
+ transaction fields as you would normally with the ledger view.
+</para>
+</sect2>
+
+<sect2>
+<title>Modifying the schedule behavior</title>
+<para>
+ At the bottom of the dialog are some optional fields that can modify how the
+ schedule behaves. If the schedule occurs on a weekend you can choose whether
+ to enter the transaction on the weekend day, the previous Friday, or the next
+ Monday. Typically this option is used to replicate some real world operation
+ such as a bank transaction.
+</para>
+</sect2>
+
+<sect2>
+<title>Letting &kappname; enter the transaction into the register</title>
+
+<para>
+ To let &kappname; automatically enter the transaction for you when needed,
+ make sure that the check box labeled <guilabel>Enter this schedule into the
+ ledger automatically when it is due</guilabel> is checked. Otherwise, when
+ the transaction is due to be entered, &kappname; will open a dialog box asking
+ you to confirm that you want it to be entered. This behavior is configurable,
+ and more information can be found in the Settings section.
+</para>
+</sect2>
+
+<sect2>
+<title>Letting &kappname; know when the schedule will finish</title>
+
+<para>
+ If you know how many transactions are left or when they are due to finish,
+ this information can be entered so the transactions are not entered
+ indefinitely. Check the appropriate check box and enter the appropriate
+ information. Only the date or the number of transactions remaining is needed
+ because the other can be calculated.
+</para>
+
+<para>
+ When you have entered all the necessary information click on
+ <guibutton>OK</guibutton> to continue.
+</para>
+</sect2>
+
+</sect1>
+
+<sect1 id="details.schedules.edit">
+<title>Editing schedules</title>
+
+<para>
+ To edit a schedule simply select the entry in the list and right click to
+ bring up the context menu and select <guimenuitem>Edit</guimenuitem>. This
+ will bring up a dialog similar to the New Schedule dialog, where you can alter
+ the necessary data.
+</para>
+</sect1>
+
+<sect1 id="details.schedules.delete">
+<title>Deleting schedules</title>
+
+<para>
+ To delete a schedule simply select the entry in the list and right click to
+ bring up the context menu and select <guimenuitem>Delete</guimenuitem>.
+</para>
+</sect1>
+
+<sect1 id="details.schedules.calendar">
+<title>The calendar view</title>
+
+<para>
+ The calendar tab presents the schedules in a calendar format so it is easier
+ to see when they occur. To switch to the calendar view click on the
+ <guibutton>Calendar View</guibutton> tab.
+</para>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="calendarview.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Calendar View</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ The calendar type can be changed using the <guibutton>Select Style</guibutton>
+ button. Currently only two types exist: Week and Month. The monthly view is
+ the default, and is usually the most useful. Navigate through the dates using
+ the controls as you would with the date input control.
+</para>
+
+<para>
+ On any day with scheduled transactions, the number of transactions scheduled
+ for that day is displayed on the calendar.
+</para>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="schedmonthday.png" format="PNG" />
+ </imageobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ To view the schedule(s) that fall on that day, move the mouse cursor over the
+ highlight and a popup window will be displayed allowing you to view the
+ schedule summary.
+</para>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="schedpopup.png" format="PNG" />
+ </imageobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ If more than one schedule falls on that day you can cycle through them using
+ the arrow buttons in the upper corners of the popup window.
+</para>
+
+<para>
+ If you find that the display is cluttered with schedules and you only want to
+ view one type of schedule, then this is possible from the <guibutton>Select
+ Schedules</guibutton> dropdown. After clicking on this button the different
+ schedule types are listed and are checked by default
+</para>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="schedcaltypes.png" format="PNG" />
+ </imageobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ To remove a type from the calendar view simply uncheck it in the list.
+</para>
+
+</sect1>
+
+<sect1 id="details.schedules.entering">
+<title>Entering scheduled transactions</title>
+
+<para>
+ Entering a scheduled transaction means actually entering a transaction into
+ the appropriate ledger, using the details specified in the schedule.
+ Scheduled transactions can be entered in one of four different ways:
+</para>
+
+<itemizedlist>
+ <listitem><para>Manually by right clicking on the list entry</para></listitem>
+ <listitem><para>Manually via the popup window in the calendar view</para></listitem>
+ <listitem>
+ <para>
+ &kappname; can enter them with or without your interaction upon startup
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ &kappname; can enter them with your interaction during online banking or
+ import of an electronic bank statement
+ </para>
+ </listitem>
+</itemizedlist>
+
+<sect2>
+<title>Manually entering scheduled transactions</title>
+
+<para>
+ You can enter a scheduled transaction manually by right clicking on the list
+ entry and selecting <guimenuitem>Enter</guimenuitem> from the popup menu or by
+ clicking on the <guibutton>Enter</guibutton> button on the popup window in the
+ calendar view.
+</para>
+</sect2>
+
+<sect2>
+<title>Confirming the transaction to enter</title>
+
+<para>
+ After selecting either method the Enter Scheduled Transaction dialog window is
+ shown prompting you with the required information that was entered when you
+ created the schedule.
+</para>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="enterschedule.png" format="PNG" />
+ </imageobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ This information can be changed, and the changes can be applied to just this
+ one instance of the schedule or to all subsequent transactions. After
+ checking that all the data is correct clicking on <guibutton>OK</guibutton>
+ will add the transaction to the ledger and update the next due date of the
+ schedule to the next occurence. If you have changed any of the transaction
+ data a further confirmation of what you changed will be displayed, giving you
+ a final chance to accept or reject the changes.
+</para>
+
+<para>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="confirmenter.png" format="PNG" />
+ </imageobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ Select what you want to do with the information presented and click
+ <guibutton>OK</guibutton> or <guibutton>Cancel</guibutton>.
+</para>
+</sect2>
+
+<sect2>
+<title>Letting &kappname; enter the scheduled transaction(s) for you</title>
+
+<para>
+ Alternatively, &kappname; can check which schedules are due upon startup and
+ enter them for you if the appropriate option was checked when setting up the
+ schedule.
+</para>
+
+<para>
+ If the option was not checked then &kappname; will open the previously
+ mentioned dialog and you can follow the steps mentioned there. &kappname;
+ will also open the dialog if the amount is an estimate so you can enter the
+ real amount.
+</para>
+
+<para>
+ You can also opt to have &kappname; not check which transactions are scheduled
+ on startup by deselecting the option in the Settings dialog and any overdue
+ transaction or transactions due 'today' will be shown in the Home view for you
+ to enter manually.
+</para>
+</sect2>
+</sect1>
+</chapter>
diff --git a/doc/en/details-search.docbook b/doc/en/details-search.docbook
new file mode 100644
index 0000000..6783c57
--- /dev/null
+++ b/doc/en/details-search.docbook
@@ -0,0 +1,351 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="details.search">
+<chapterinfo>
+ <authorgroup>
+ <author>
+ <firstname>Darin</firstname>
+ <surname>Strait</surname>
+ <affiliation>
+ <address><email>darin.strait@ashdar-partners.com</email></address>
+ </affiliation>
+ </author>
+ </authorgroup>
+ <date>2009-08-05</date>
+ <releaseinfo>1.0</releaseinfo>
+</chapterinfo>
+<title>Search Transactions</title>
+
+<sect1 id="details.search.general">
+<title>General</title>
+
+<para>
+ The <guilabel>Search Transactions</guilabel> dialog searches your data based
+ on criteria that you specify. You can access the dialog by going to
+ the <guimenu>Edit</guimenu> menu and selecting
+ <guimenuitem>Find transactions...</guimenuitem>.
+</para>
+
+<para>
+ There are two main tabs in this dialog. The <quote>Criteria</quote> tab
+ displays a number of sub-tabs for specifying the search critera.
+</para>
+
+<para>
+ The results will be displayed under the <quote>Result</quote> tab after the
+ search has completed. Below the list of results, &kappname; shows the number
+ of transactions that met the search criteria. Double-clicking on an
+ individual transaction in the result list will bring up the appropriate ledger
+ and display the transaction.
+</para>
+
+<para>
+ When the <guibutton>Find</guibutton> button is pressed, the search is
+ initiated and all criteria that have been entered on any tab will be taken
+ into account.
+</para>
+
+<para>
+ The <guibutton>Reset</guibutton> button resets all of the fields on all of the
+ critera sub-tabs back to the defaults. This allows you to specify new search
+ criteria.
+</para>
+
+<para>
+ The <guibutton>Close</guibutton> button closes the <guilabel>Search
+ Transactions</guilabel> dialog box.
+</para>
+
+</sect1>
+
+<sect1 id="details.search.criteria">
+<title>Search Criteria</title>
+
+<para>
+ There are several sub-tabs under the main <quote>Criteria</quote> tab, each of
+ which allows you to specify different types of search criteria. Below the
+ area for specifying the criteria, &kappname; lists each of the different types
+ of criteria that are currently specified for the search.
+</para>
+
+<sect2 id="details.search.text">
+<title>Text</title>
+
+<screenshot>
+<mediaobject>
+<imageobject>
+<imagedata fileref="find-text.png" format="PNG" />
+</imageobject>
+<textobject>
+<phrase>Search transactions Dialog, Text tab</phrase>
+</textobject>
+</mediaobject>
+</screenshot>
+
+<para>
+ This tab allows you to speicify text to search for. There are also two check
+ boxes that control how the text is used in the search.
+</para>
+
+<para>
+ By default, this will match on simple substrings. For example:
+</para>
+
+<para>
+<itemizedlist>
+ <listitem>
+ <para><quote>Best</quote> will find <quote>Best Cakes, Inc.</quote></para>
+ </listitem>
+ <listitem>
+ <para>
+ <quote>est</quote> will also find <quote>Best Cakes, Inc.</quote>
+ </para>
+ </listitem>
+</itemizedlist>
+</para>
+
+<para>
+ In the dropdown field next to the text field,
+ select <guilabel>Contains</guilabel> if you want to find transactions that
+ contain the text, or select <guilabel>Does not contain</guilabel> if you want
+ to find transactions that do not contain the specified text.
+</para>
+
+<para>
+ If you check the <guilabel>Case Sensitive</guilabel> box, the search will be
+ case sensitive. For example, <quote>best</quote> would not find <quote>Best
+ Cakes, Inc.</quote> if this option is set.
+</para>
+
+<para>
+ If you check the <guilabel>Treat Text as regular expression</guilabel> box,
+ the text will be treated as a regular expresssion. For details on how to
+ craft a regular expression, visit the &Qt; documentation about the
+ <ulink url="http://qt.nokia.com/doc/3.3/qregexp.html#1">QRegExp
+ class</ulink>.
+</para>
+</sect2>
+
+<sect2 id="details.search.account">
+<title>Account</title>
+
+<screenshot>
+<mediaobject>
+<imageobject>
+<imagedata fileref="find-account.png" format="PNG" />
+</imageobject>
+<textobject>
+<phrase>Search transactions Dialog, Account tab</phrase>
+</textobject>
+</mediaobject>
+</screenshot>
+
+<para>
+ This tab allows you to specify the accounts that should be searched.
+</para>
+
+<para>
+ Accounts are displayed in a tree format. Accounts that are marked for search
+ are indicated with a check box. If you click the <guibutton>All</guibutton>
+ button, all accounts are marked for searching. If you click the
+ <guibutton>None</guibutton> button, no accounts will be marked for
+ searching. Individual accounts can be marked or unmarked by clicking on the
+ box next to the account name using the left mouse button. A complete hierarchy
+ of accounts can be marked or unmarked by clicking on the box using the right
+ mouse button.
+</para>
+</sect2>
+
+<sect2 id="details.search.date">
+<title>Date</title>
+
+<screenshot>
+<mediaobject>
+<imageobject>
+<imagedata fileref="find-date.png" format="PNG" />
+</imageobject>
+<textobject>
+<phrase>Search transactions Dialog, Date tab</phrase>
+</textobject>
+</mediaobject>
+</screenshot>
+
+<para>
+ This tab allows you to specify which dates should be searched.
+</para>
+
+<para>
+ The <quote>Range</quote> control provides a convenient way to set the From and
+ To controls. The From and To controls can be manipulated individually. Dates
+ can be entered manually. The controls will prevent you from entering
+ non-existing dates. Date values can also be changed by clicking on the up and
+ down arrows when a particular part of a date is highlighted. Clicking on the
+ small calendar icon will bring up a calendar to easily select dates.
+</para>
+</sect2>
+
+
+<sect2 id="details.search.amount">
+<title>Amount</title>
+
+<screenshot>
+<mediaobject>
+<imageobject>
+<imagedata fileref="find-amount.png" format="PNG" />
+</imageobject>
+<textobject>
+<phrase>Find Dialog, Amount tab</phrase>
+</textobject>
+</mediaobject>
+</screenshot>
+
+<para>
+ This tab allows you to specify what amounts should be searched for.
+</para>
+
+<para>
+ You can search for an exact amount or for a range of amounts. If you click on
+ the calculator icon, a small on-screen calculator will pop up to assist you in
+ entering a value.
+</para>
+</sect2>
+
+<sect2 id="details.search.category">
+<title>Category</title>
+
+<screenshot>
+<mediaobject>
+<imageobject>
+<imagedata fileref="find-category.png" format="PNG" />
+</imageobject>
+<textobject>
+<phrase>Search transactions Dialog, Category tab</phrase>
+</textobject>
+</mediaobject>
+</screenshot>
+
+<para>
+ This tab allows you to specify which categories should be searched.
+</para>
+
+<para>
+ Categories are displayed in a tree format. Categories that are marked for
+ search are indicated with a box. If you click the <guibutton>All</guibutton>
+ button, all categories are marked for searching. If you click
+ the <guibutton>None</guibutton> button, no categories will be marked for
+ searching. If you click the <guibutton>Income</guibutton> button, income
+ categories will be marked and expense categories will be unmarked. If you
+ click the <guibutton>Expense</guibutton> button, income categories will be
+ unmarked and expense categories will be marked.
+</para>
+
+<para>
+ Individual categories can be marked or unmarked by clicking on the box next to
+ the category name using the left mouse button. A complete hierarchy of
+ categories can be marked or unmarked by clicking on the box using the right
+ mouse button.
+</para>
+</sect2>
+
+<sect2 id="details.search.payee">
+<title>Payee</title>
+
+<screenshot>
+<mediaobject>
+<imageobject>
+<imagedata fileref="find-payee.png" format="PNG" />
+</imageobject>
+<textobject>
+<phrase>Search transactions Dialog, Payee tab</phrase>
+</textobject>
+</mediaobject>
+</screenshot>
+
+<para>
+ This tab allows you to specify which payees should be searched.
+</para>
+
+<para>
+ Payees that are marked for search are indicated with a box. If you click
+ the <guibutton>All</guibutton> button, all payees are marked for searching. If
+ you click the <guibutton>None</guibutton> button, no payees will be marked for
+ searching. Individual payees can be marked or unmarked by clicking on the box
+ next to the payee name.
+</para>
+
+<para>
+ If you check the <guilabel>Select transactions without payees</guilabel> box,
+ only transactions with no payee will be selected.
+</para>
+
+</sect2>
+
+<sect2 id="details.search.details">
+<title>Details</title>
+
+<para>
+ This tab allows you to specify various additional search criteria.
+</para>
+
+<screenshot>
+<mediaobject>
+<imageobject>
+<imagedata fileref="find-details.png" format="PNG" />
+</imageobject>
+<textobject>
+<phrase>Search transactions Dialog, Details tab</phrase>
+</textobject>
+</mediaobject>
+</screenshot>
+
+<para>
+<itemizedlist>
+ <title>Type can be one of the following:</title>
+ <listitem><para>All Types</para></listitem>
+ <listitem><para>Payments</para></listitem>
+ <listitem><para>Deposits</para></listitem>
+ <listitem><para>Transfers</para></listitem>
+</itemizedlist>
+
+<itemizedlist>
+ <title>State can be one of the following:</title>
+ <listitem><para>All states</para></listitem>
+ <listitem><para>Not reconciled</para></listitem>
+ <listitem><para>Cleared</para></listitem>
+ <listitem><para>Reconciled</para></listitem>
+</itemizedlist>
+
+<itemizedlist>
+ <title>Validity can be one of the following:</title>
+ <listitem><para>Any transaction</para></listitem>
+ <listitem><para>Valid transaction</para></listitem>
+ <listitem><para>Invalid transaction</para></listitem>
+</itemizedlist>
+</para>
+
+<para>
+ You can search for a particular transaction number or search for a range of
+ transaction numbers.
+</para>
+
+</sect2>
+</sect1>
+
+<sect1 id="details.search.results">
+<title>Search results</title>
+
+<para>
+ The <quote>Result</quote> tab displays the Date, Account, Details,
+ Reconciliation status, Payment, and Deposit for each transaction
+ that matches the search criteria you have entered. Right clicking
+ on the header row of the results list allows you to alter the sort
+ order of the results.
+</para>
+
+<para>
+ Double-clicking on a transaction will display the corresponding
+ account ledger and focus on the selected transaction.
+</para>
+
+</sect1>
+
+</chapter>
diff --git a/doc/en/details-settings.docbook b/doc/en/details-settings.docbook
new file mode 100644
index 0000000..5be4966
--- /dev/null
+++ b/doc/en/details-settings.docbook
@@ -0,0 +1,705 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="details.settings">
+<chapterinfo>
+ <authorgroup>
+ <author>
+ <firstname>Roger</firstname>
+ <surname>Lum</surname>
+ <affiliation>
+ <address><email>rogerlum@gmail.com</email></address>
+ </affiliation>
+ </author>
+ </authorgroup>
+ <date>2009-08-03</date>
+ <releaseinfo>1.0</releaseinfo>
+</chapterinfo>
+<title id="details.settings.title">&kappname; Settings</title>
+
+<para>
+ The settings described below modify the behaviour of &kappname;. These
+ settings can be changed
+ through <menuchoice><guimenu>Settings</guimenu><guimenuitem>Configure
+ &kappname;...</guimenuitem></menuchoice>.
+</para>
+
+<sect1 id="details.settings.general">
+<title id="details.settings.general.title">General</title>
+
+<sect2 id="details.settings.general.global">
+<title>Global options</title>
+
+<variablelist>
+ <varlistentry>
+ <term><guilabel>Startup</guilabel></term>
+ <listitem>
+ <para>Choose the initial view upon startup.</para>
+ <itemizedlist>
+ <listitem><para>Start with <link linkend="firsttime.mainwindow">home
+ page</link></para></listitem>
+ <listitem><para>Start with last selected page</para></listitem>
+ </itemizedlist>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Price Precision</guilabel></term>
+ <listitem>
+ <para>Enter how many digits of precision your prices will have after the
+ decimal point. For example, setting this to 2 will result in prices
+ like 35.18, where setting it to 4 might cause the same price to show
+ 35.1791</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Autosave periodically</guilabel></term>
+ <listitem>
+ <para>Check this box if you wish &kappname; to autosave your files
+ periodically. The default is 10 minutes.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Your fiscal year starts on</guilabel></term>
+ <listitem>
+ <para>Enter the starting day and month of your fiscal year</para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect2>
+
+<sect2 id="details.settings.general.views">
+<title>Views options</title>
+
+<variablelist>
+ <varlistentry>
+ <term><guilabel>Synchronize account selection of ledger and investment
+ view</guilabel></term>
+ <listitem>
+ <para>If this option is selected, selecting an account on the investments
+ view will change the account selection on the ledger view, and
+ viceversa.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Icon size of navigation bar</guilabel></term>
+ <listitem>
+ <para>Select the size of the icons of the left-side navigation bar.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Show titlebar on each page</guilabel></term>
+ <listitem>
+ <para>Whether the title of the current view should be displayed on each
+ page.</para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect2>
+
+<sect2 id="details.settings.general.filter">
+<title>Filter options</title>
+
+<variablelist>
+ <varlistentry>
+ <term><guilabel>Don't show unused categories</guilabel></term>
+ <listitem>
+ <para>Hide unused categories.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Don't show closed accounts</guilabel></term>
+ <listitem>
+ <para>Hide closed accounts.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Show equity accounts</guilabel></term>
+ <listitem>
+ <para>Equity accounts are normally hidden. Select this option to show
+ them.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Don't show finished schedules</guilabel></term>
+ <listitem>
+ <para>Hide finished schedules.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Don't show transaction prior to</guilabel></term>
+ <listitem>
+ <para>Hide transactions prior to the selected date.</para>
+ <para>Setting this option to January 1, 1900 is a good way to debug
+ date-related file import problems.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Don't show reconciled transactions</guilabel></term>
+ <listitem>
+ <para>Filter transactions by reconciliation state. Transactions that are
+ marked as <emphasis>Reconciled</emphasis> will not be shown.</para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect2>
+</sect1>
+
+<sect1 id="details.settings.register">
+<title id="details.settings.register.title">Register</title>
+
+<para>
+ These options allow you to modify the behaviour of the transaction registers.
+</para>
+
+<sect2 id="details.settings.register.display"><title>Display tab</title>
+
+<variablelist>
+ <varlistentry>
+ <term><guilabel>Show a grid in the register</guilabel></term>
+ <listitem>
+ <para>Show grid lines in the transaction register.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="details.settings.register.lens">
+ <term><guilabel>Use the ledger lens</guilabel></term>
+ <listitem>
+ <para>With this option enabled, the ledger will show all lines of detail
+ for the transaction you have currently selected, even if you have set
+ the <link linkend="reference.menus.settings.transactiondetail">Show
+ Transaction Detail</link> menu option turned off.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Show transaction form</guilabel></term>
+ <listitem>
+ <para>Show the <link linkend="details.ledger.transactionform">transaction
+ form</link> at the bottom of the transaction register for entering and
+ editing transactions. With this option turned off, you edit the
+ transaction within the register itself.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Always show a No. field</guilabel></term>
+ <listitem>
+ <para>Always have the number (<quote>No.</quote>) field when entering or
+ editing a transaction.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Show group header between transactions</guilabel></term>
+ <listitem>
+ <para>Display group headers in the register</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Show header for the previous and current fiscal
+ year </guilabel></term>
+ <listitem>
+ <para>Display group headers for the current and the previous fiscal
+ year</para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect2>
+
+<sect2 id="details.settings.register.sorting">
+<title>Sorting tab</title>
+<sect3 id="details.settings.register.sorting.normal">
+<title>Normal view tab</title>
+
+<para>
+ Choose the sort order of the ledger while in the Normal view.
+</para>
+</sect3>
+
+<sect3 id="details.settings.register.sorting.reconciliation">
+<title>Reconciliation view tab</title>
+
+<para>
+ Choose the sort order of the ledger while in the Reconciliation view.
+</para>
+</sect3>
+
+<sect3 id="details.settings.register.sorting.search">
+<title>Search view tab</title>
+<para>
+ Choose the sort order of the ledger while in the Search view.
+</para>
+</sect3>
+</sect2>
+
+<sect2 id="details.settings.register.dataentry">
+<title>Data Entry tab</title>
+
+<variablelist>
+ <varlistentry>
+ <term><guilabel>Insert transaction type into No. field for new
+ transactions</guilabel></term>
+ <listitem>
+ <para>Automatically place the type of the transaction, e.g., Deposit,
+ Withdrawal, etc., in the No. field.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Auto increment check number</guilabel></term>
+ <listitem>
+ <para>Have the check number automatically increment whenever entering a
+ new check transaction.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Keep changes when selecting a different
+ transaction/split</guilabel></term>
+ <listitem>
+ <para>When enabled, selecting a different transaction or split will save
+ edits to the current transaction.</para>
+ <para>When disabled, selecting a different transaction will cancel them.
+ Instead, you must explicitly accept the changes.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Use Enter to move between fields</guilabel></term>
+ <listitem><para>When enabled, pressing Enter will change the focus to the
+ next field of the transaction form.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Match names from start</guilabel></term>
+ <listitem>
+ <para>Mark this option if you always want to match names e.g., for payees
+ from the start. If unset, any substring is matched</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Default reconciliation state</guilabel></term>
+ <listitem>
+ <para>Select the default reconciliation state for new
+ transactions.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Auto fill with previous transaction data</guilabel></term>
+ <listitem>
+ <para>Select the desired behavior for autofill or deactivate it</para>
+ <itemizedlist>
+ <listitem>
+ <para>No Autofill</para>
+ </listitem>
+ <listitem>
+ <para>Same transaction if amount differs less than X percent</para>
+ <para>When entering a new transaction with this option, &kappname;
+ will display a list of previous transaction for the payee and
+ account. If previous transactions differ in less than X percent,
+ they will be considered identical. If the percentage is 0, all
+ previous transactions for the payee and account will be
+ displayed. When selecting a transaction, all transactions details
+ except the date will be autofilled with those of the selected
+ transaction.</para>
+ </listitem>
+ <listitem>
+ <para>With previously most often used transaction for the payee</para>
+ <para>When entering a new transaction with this option enabled,
+ &kappname; will fill in all the transaction details based on the
+ previously most often used transaction with the selected
+ payee.</para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect2>
+
+<sect2 id="details.settings.register.import">
+<title>Import tab</title>
+
+<variablelist>
+ <varlistentry>
+ <term><guilabel>Match transaction within days</guilabel></term>
+ <listitem>
+ <para>Search for matching transactions within the range of the imported
+ transaction +/- given days</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Ask for a new payee's default category</guilabel></term>
+ <listitem>
+ <para>Whenever a new payee is detected during an import, the user will be
+ asked for the default category for the payee.</para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect2>
+</sect1>
+
+<sect1 id="details.settings.home">
+<title id="details.settings.home.title">Home</title>
+
+<para>
+ These options allow you to customize the appearance of the Home page by
+ choosing which entries to show on the Home page and the order in which they
+ appear.
+</para>
+
+<variablelist>
+ <varlistentry>
+ <term><guilabel>Payments</guilabel></term>
+ <listitem>
+ <para>It shows the first 5 occurrences of your scheduled
+ transactions</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Preferred accounts</guilabel></term>
+ <listitem>
+ <para>It shows the balance and credit of your favorite accounts</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Payment accounts</guilabel></term>
+ <listitem>
+ <para>It shows the balance of your asset and liability accounts, except
+ for the investment accounts</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Favorite Reports</guilabel></term>
+ <listitem>
+ <para>It shows a list of your favorite reports</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Forecast</guilabel></term>
+ <listitem>
+ <para>It shows a forecast for your asset and liability Accounts</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Networth forecast</guilabel></term>
+ <listitem>
+ <para>It shows a chart of your forecast net worth for the next 90
+ days</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Assets and Liabilities</guilabel></term>
+ <listitem>
+ <para>It shows the balance of all your assets and liabilities</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Budget</guilabel></term>
+ <listitem>
+ <para>It shows the budget items for the current month which have a
+ negative difference compared to the actual income or expense</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>CashFlow</guilabel></term>
+ <listitem>
+ <para>It shows an analysis of your cash flow for the current month</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Percentage of default font size</guilabel></term>
+ <listitem>
+ <para>Select the size of the font on the Home page</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Remember font size when leaving the program if manually
+ changed with mouse-wheel</guilabel></term>
+ <listitem>
+ <para>Selecting this will save your font size preference if you have
+ changed it from the Home page by using the mouse-wheel</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Show account limit information</guilabel></term>
+ <listitem>
+ <para>Shows the limit of the accounts on the Payment Accounts and
+ Preferred Accounts sections of the Home page</para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect1>
+
+<sect1 id="details.settings.schedules">
+<title id="details.settings.schedules.title">Schedules</title>
+
+<para>
+ These options allow you to modify the behaviour of
+ the <link linkend="details.schedules">scheduling features</link>.
+</para>
+
+<sect2 id="details.settings.schedules.startupoptions">
+<title>Schedule startup options</title>
+
+<variablelist>
+ <varlistentry>
+ <term><guilabel>Check schedules upon startup</guilabel></term>
+ <listitem>
+ <para>Enables checking the schedule upon startup of &kappname;.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Enter transactions this number of days in
+ advance</guilabel></term>
+ <listitem><para>Specify how many days in advance should the scheduled
+ transactions be entered.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Number of days to preview schedules schedules in
+ ledger</guilabel></term>
+ <listitem>
+ <para>Specify how many days should the schedules show up in the
+ ledger.</para>
+ <para>The scheduled transactions will be listed in the ledger. You can
+ enter or skip the scheduled transactions by right-clicking on
+ them.</para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect2>
+</sect1>
+
+<sect1 id="details.settings.encryption">
+<title id="details.settings.encryption.title">Encryption</title>
+
+<para>
+ These options allow you to modify the data encryption settings.
+</para>
+
+<variablelist>
+ <varlistentry>
+ <term><guilabel>Use GPG</guilabel></term>
+ <listitem>
+ <para>Enables the use of GPG to encrypt data file. See the section
+ on <link linkend="details.formats.encrypted">GPG Encryption</link> for
+ more details.</para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<sect2 id="details.settings.encryption.gpgencryption">
+<title>GPG Encryption</title>
+
+<variablelist>
+ <varlistentry>
+ <term><guilabel>Your key</guilabel></term>
+ <listitem>
+ <para>Enter the email address or the hexadecimal key id to use for data
+ encryption.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Additional keys</guilabel></term>
+ <listitem>
+ <para>Select additional keys to use for data encryption.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Also encrypt with kmymoney-recover key</guilabel></term>
+ <listitem>
+ <para>Encrypts data with the &kappname; recover key. Selecting this
+ option will allow core &kappname; developers to decrypt your data file
+ in case you lose your encryption key.</para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect2>
+</sect1>
+
+<sect1 id="details.settings.colors">
+<title id="details.settings.colors.title">Colours</title>
+
+<para>
+ These options allow you to change colors within &kappname;.
+</para>
+
+<sect2 id="details.settings.colors.foreground">
+<title>Foreground tab</title>
+
+<para>
+ Modify the foreground colors by clicking on the color button and opening a
+ color select palette.
+</para>
+</sect2>
+
+<sect2 id="details.settings.colors.background">
+<title>Background tab</title>
+
+<para>
+ Modify the background colors by clicking on the color button and opening a
+ color select palette.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="details.settings.fonts">
+<title id="details.settings.fonts.title">Fonts</title>
+
+<para>
+ These options allow you to modify the fonts.
+</para>
+
+<variablelist>
+ <varlistentry>
+ <term><guilabel>Use system fonts</guilabel></term>
+ <listitem>
+ <para>Select this to use system fonts. Deselecting this option allows you
+ to customize fonts.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Cell font</guilabel></term>
+ <listitem>
+ <para>Specify the custom font to use within each cell.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Header font</guilabel></term>
+ <listitem>
+ <para>Specify the custom font to use for the headers of each view.</para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect1>
+
+<sect1 id="details.settings.onlinequote">
+<title id="details.settings.onlinequote.title">Online Quotes</title>
+
+<para>
+ These settings modify how online quotes are retrieved from different online
+ sources.
+</para>
+
+<para>
+ This tab allows you to change the online quote sources for &kappname;.
+ Generally speaking, this is an advanced feature, and should only be attempted
+ by the most technically adept users.
+</para>
+
+<para>
+ For more details, please refer to to
+ the <link linkend="details.investments.onlinequotes">Online Price
+ Quotes</link> section.
+</para>
+</sect1>
+
+<sect1 id="details.settings.forecast">
+<title id="details.settings.forecast.title">Forecast</title>
+
+<para>
+ These options allow you to modify the forecast options.
+</para>
+
+<variablelist>
+ <varlistentry>
+ <term><guilabel>Number of days to forecast</guilabel></term>
+ <listitem>
+ <para>Select how many days you want to forecast. The default is 90
+ days</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Number of days of account cycle</guilabel></term>
+ <listitem>
+ <para>The normal number of days that your commonly-used accounts go
+ through an income-expense cycle. For example, if you receive your salary
+ on a monthly basis, you should select 30 days here.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Day of month to start forecast</guilabel></term>
+ <listitem>
+ <para>Select the day of the month when you want to start the
+ forecast. This would usually be the day when you receive your salary or
+ other income.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Forecast Method</guilabel></term>
+ <listitem>
+ <para>The forecast method to be used.</para>
+ <para>Scheduled and future transaction forecasts your balance based on the
+ information of your scheduled and future transactions.</para>
+ <para>History-based uses your past transactions to extrapolate a
+ forecast.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>Number of cycles to use in forecast</guilabel></term>
+ <listitem>
+ <para>If using a history-based method, how many previous account cycles
+ should &kappname; use to calculate the forecast.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><guilabel>History forecast method</guilabel></term>
+ <listitem>
+ <para>Select the method to use when calculating a forecast based on
+ historic information</para>
+ <para>Simple moving average averages your past transactions to calculate a
+ forecast.</para>
+ <para>Weighted moving average averages your past transactions, but it will
+ give more importance to the most recent transactions.</para>
+ <para>Linear regression uses a linear-regression formula based on your
+ past transactions to calculate the forecast</para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect1>
+
+<sect1 id="details.settings.plugins">
+<title id="details.settings.plugins.title">Plugins</title>
+
+<para>
+ These options allow you to modify the behavior of any installed
+ plugins. Currently, the only choice is to enable or disable the &kappname;
+ plugins you have installed.
+</para>
+</sect1>
+</chapter>
diff --git a/doc/en/details-transactions.docbook b/doc/en/details-transactions.docbook
new file mode 100644
index 0000000..1c8a9a1
--- /dev/null
+++ b/doc/en/details-transactions.docbook
@@ -0,0 +1,6 @@
+<chapter id="details.transactions">
+<title>Transactions - Under development - Roger</title>
+<para>
+</para>
+</chapter>
+
diff --git a/doc/en/details-widgets.docbook b/doc/en/details-widgets.docbook
new file mode 100644
index 0000000..fae1595
--- /dev/null
+++ b/doc/en/details-widgets.docbook
@@ -0,0 +1,211 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<sect1 id="reference.widgets">
+<sect1info>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Baumgart</surname>
+ <affiliation>
+ <address><email>ipwizard@users.sourceforge.net</email></address>
+ </affiliation>
+ </author>
+</sect1info>
+
+<title>Widgets</title>
+
+<para>
+ &kappname; has some specific widgets not found in other applications. The
+ usage of these widgets is explained in this chapter.
+</para>
+
+<sect2 id="reference.widgets.datepicker">
+<title>Date entry widget</title>
+
+<para>
+ Whenever &kappname; needs information about a specific date, e.g., the posting
+ date of a transaction or the opening date of an account, it offers the user
+ the <emphasis>date entry widget</emphasis>. This widget consists of three
+ fields and a button. The fields present the <emphasis>day</emphasis>, the
+ <emphasis>month</emphasis>, and the <emphasis>year</emphasis>, separated by
+ the date separator characters specified by your locale settings. The button -
+ if pressed - opens the <emphasis>datepicker</emphasis> widget.
+</para>
+
+<para>
+<screenshot>
+ <screeninfo>Tip of the Day</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="date_widget.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Date widget</phrase>
+ </textobject>
+ </mediaobject>
+</screenshot>
+</para>
+
+<para>
+ Within the date entry widget, the left/right cursor keys can be used to switch
+ between the <emphasis>day</emphasis>, the <emphasis>month</emphasis>, and the
+ <emphasis>year</emphasis> fields. Using the up/down cursor keys, the value of
+ the selected field can be incremented/decremented. The <keycap>+</keycap> and
+ <keycap>-</keycap> keys can be used to increment/decrement a single day.
+ Month and year boundaries are considered and incremented/decremented if
+ necessary. Pressing <keycap>t</keycap> will set the date to today's date.
+</para>
+
+<para>
+ The date can also be changed using the mouse. Clicking on the
+ <emphasis>day</emphasis>, <emphasis>month</emphasis>, or
+ <emphasis>year</emphasis> field selects the field. The value can then be
+ incremented/decremented using the arrow buttons on the right of the
+ widget. They act exactly the same as the up/down key.
+</para>
+
+<para>
+ The datepicker opens when the button to the right of the arrow buttons is
+ pressed. It shows four arrow buttons at the top, two on each side of the
+ currently selected month name and year. The leftmost buttons are used to
+ decrement the year and the month; the buttons to the right of the year are
+ used to increment the month and the year. The button to the very right closes
+ the datepicker.
+</para>
+
+<para>
+ Beneath the buttons, the widget presents a calendar page for the selected
+ month. Clicking a day on the calendar selects that date, closes the
+ datepicker, and transfers the selected date into the <emphasis>day</emphasis>,
+ <emphasis>month</emphasis>, and <emphasis>year</emphasis> fields.
+</para>
+
+<para>
+ At the bottom of the datepicker widget, there are a button, a text edit field,
+ and a combo box. Pressing the button selects today's date in the
+ datepicker. The text field can be used to enter a specific date. Pressing the
+ <keycap>RETURN</keycap> key shows that date in the datepicker widget. The
+ combo box allows the user to select a specific week, and continue to pick a
+ date from there.
+</para>
+</sect2>
+
+<sect2 id="reference.widgets.value">
+<title>Value entry</title>
+<para>
+ The value entry widget consists of a text field (that accepts digits,
+ thousands separators, and decimal symbols) as well as a button to the
+ right. Use the digits to enter the value. Separate the fractional part by
+ entering the decimal separator for your locale. If you click on the button to
+ the right or press a key representing a numeric operation (e.g., +,-,/,* or %)
+ a little calculator will pop up and allow you to calculate the final value.
+</para>
+
+<para>
+ Negative values can be entered by preceeding the value with a minus sign. In
+ case your locale is set to display negative numbers with parantheses around
+ the value, the value can also be enclosed in parenthesis in the value entry
+ widget.
+</para>
+
+<para>
+<screenshot>
+ <screeninfo>Tip of the Day</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="value_widget.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Value widget</phrase>
+ </textobject>
+ </mediaobject>
+</screenshot>
+</para>
+
+<para>
+ Use the calculator widget just like a normal calculator and once done leave
+ it by clicking on the '=' button or press the '=' key on your keyboard.
+</para>
+</sect2>
+
+<sect2 id="reference.widgets.payee">
+<title>Payee/Payer entry</title>
+
+<para>
+ When you are requested to enter a payee/payer for a transaction, you can start
+ entering the name by pressing keys on your keyboard. As long as matching
+ entries exist in the list of payees/payers maintained by &kappname; they will
+ be presented in a box beneath or above the text entry area. Using the mouse or
+ the up/down keys one can select a name from that list. Using the keyboard
+ additionally requires you to select the entry by pressing the RETURN key.
+</para>
+
+<para>
+<screenshot>
+ <screeninfo>Tip of the Day</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="payee_widget.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Payee widget</phrase>
+ </textobject>
+ </mediaobject>
+</screenshot>
+</para>
+
+<para>
+ If a name is entered that is not yet known to &kappname; you will be asked if
+ you want to create a new payee/payer record. If you do not wish to do so,
+ then the field will be blanked. Otherwise, the record will be created and
+ added to the list.
+</para>
+
+<para>
+ Once the edit field contains characters, the list only shows those payees that
+ match the character sequence entered. Double-click on the arrow of the combo
+ box to show all payees in the list.
+</para>
+
+</sect2>
+
+<sect2 id="reference.widgets.category">
+<title>Category/account entry</title>
+
+<para>
+ When you are requested to enter the name of a category or account, you can
+ start entering the name by pressing keys on your keyboard. As long as
+ matching entries exist in the list of categories/accounts known to &kappname;
+ they will be presented in a box beneath or above the text entry area. Using
+ the mouse or the up/down keys one can select a name from that list. Using the
+ keyboard additionally requires you to select the entry by pressing the RETURN
+ key.
+</para>
+
+<para>
+<screenshot>
+ <screeninfo>Tip of the Day</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="category_widget.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Category widget</phrase>
+ </textobject>
+ </mediaobject>
+</screenshot>
+</para>
+
+<para>
+ If a name is entered that is not yet known to &kappname; you will be asked if
+ you want to create a new category record. If you do not wish to do so, then
+ the field will be blanked. Otherwise, the record will be created and added to
+ the list.
+</para>
+
+<para>
+ Once the edit field is filled with characters, the list only shows those
+ categories/accounts that match the character sequence entered. Double-click on
+ the arrow of the combo box to show the complete list.
+</para>
+
+</sect2>
+</sect1> \ No newline at end of file
diff --git a/doc/en/enterschedule.png b/doc/en/enterschedule.png
new file mode 100644
index 0000000..5e98ab4
--- /dev/null
+++ b/doc/en/enterschedule.png
Binary files differ
diff --git a/doc/en/find-account.png b/doc/en/find-account.png
new file mode 100644
index 0000000..2222243
--- /dev/null
+++ b/doc/en/find-account.png
Binary files differ
diff --git a/doc/en/find-amount.png b/doc/en/find-amount.png
new file mode 100644
index 0000000..b07f6e0
--- /dev/null
+++ b/doc/en/find-amount.png
Binary files differ
diff --git a/doc/en/find-category.png b/doc/en/find-category.png
new file mode 100644
index 0000000..7d8ace2
--- /dev/null
+++ b/doc/en/find-category.png
Binary files differ
diff --git a/doc/en/find-date.png b/doc/en/find-date.png
new file mode 100644
index 0000000..a8fabc5
--- /dev/null
+++ b/doc/en/find-date.png
Binary files differ
diff --git a/doc/en/find-details.png b/doc/en/find-details.png
new file mode 100644
index 0000000..ac5de6e
--- /dev/null
+++ b/doc/en/find-details.png
Binary files differ
diff --git a/doc/en/find-payee.png b/doc/en/find-payee.png
new file mode 100644
index 0000000..af8614b
--- /dev/null
+++ b/doc/en/find-payee.png
Binary files differ
diff --git a/doc/en/find-text.png b/doc/en/find-text.png
new file mode 100644
index 0000000..7dedb89
--- /dev/null
+++ b/doc/en/find-text.png
Binary files differ
diff --git a/doc/en/finddlg.png b/doc/en/finddlg.png
new file mode 100644
index 0000000..b15e1e7
--- /dev/null
+++ b/doc/en/finddlg.png
Binary files differ
diff --git a/doc/en/firsttime.docbook b/doc/en/firsttime.docbook
new file mode 100644
index 0000000..df1f676
--- /dev/null
+++ b/doc/en/firsttime.docbook
@@ -0,0 +1,833 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="firsttime">
+<chapterinfo>
+ <authorgroup>
+ <author>
+ <firstname>Michael</firstname>
+ <othername>T.</othername>
+ <surname>Edwardes</surname>
+ <affiliation>
+ <address><email>mte@users.sourceforge.net</email></address>
+ </affiliation>
+ </author>
+ </authorgroup>
+ <date>2009-05-05</date>
+ <releaseinfo>1.0</releaseinfo>
+</chapterinfo>
+
+<title>Using &kappname; for the first time</title>
+
+<sect1 id="firstime-1">
+<title>Running &kappname; for the first time</title>
+
+<para>
+ Once &kappname; has fully loaded two windows will be opened. The top window,
+ 'Tip of the Day' offers one of a series of important or useful pieces of
+ information about the application.
+ <screenshot>
+ <screeninfo>Tip of the Day</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="tipofday.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Tip of the Day</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ You are recommended to quickly read through these tips by pressing on the
+ <guibutton>Previous</guibutton> and <guibutton>Next</guibutton> buttons at the
+ bottom of the window.
+</para>
+
+<para>
+ Once you have read the tips the window can be closed; it will re-open each
+ time &kappname; is started. To stop this default behavior, uncheck the
+ appropriate option on the Tip of the Day window.
+</para>
+
+<note>
+ <para>
+ Tips can be read at anytime by selecting <guimenuitem>Show tip of the
+ day</guimenuitem> from the <guimenu>Help</guimenu> menu within &kappname;.
+ </para>
+</note>
+
+<para>
+ All tips have been extracted from the Frequently Asked Questions list (FAQ)
+ that provides more detailed help and can be found on the project <ulink
+ url="http://kmymoney2.sourceforge.net/faq.html">website</ulink> and in this
+ manual.
+</para>
+
+<para>
+ Please click on <guibutton>Close</guibutton> to close the Tip of the Day
+ dialog.
+</para>
+</sect1>
+
+<sect1 id="firsttime.mainwindow">
+<title>The main window</title>
+
+<para>
+ <screenshot>
+ <screeninfo>The Main Window</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="mainwindow_numbered.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>The Main Window</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ The &kappname; main window consists of four major parts
+</para>
+
+<itemizedlist>
+ <listitem><para>A. The menu bar</para></listitem>
+ <listitem><para>B. The toolbar</para></listitem>
+ <listitem><para>C. The View selector</para></listitem>
+ <listitem><para>D. The view</para></listitem>
+</itemizedlist>
+
+<para>
+ The menu and toolbars provide access to the features of &kappname; and allow
+ you to <link linkend="firsttime-3">Create</link> files or configure how
+ &kappname; operates.
+</para>
+
+<para>
+ The view selector consists of at least eleven icons in the left side of the
+ main window, depending upon the software provided by your system. More icons
+ could be added by various plugins. By clicking on an icon, the view window on
+ the right hand side is loaded with the appropriate view of your financial
+ data. Each view provides a unique representation of your financial situation
+ and allows you to view or edit the information shown.
+</para>
+
+<para>
+ The view selector contains the following icons
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+ <guiicon>
+ <inlinemediaobject>
+ <imageobject>
+ <imagedata fileref="home_view.png" format="PNG"/>
+ </imageobject>
+ <textobject>
+ <phrase>Home View</phrase>
+ </textobject>
+ </inlinemediaobject>
+ </guiicon>
+ Home: A configurable overview of your current financial situation (or an
+ introduction page when no data file is open).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <guiicon>
+ <inlinemediaobject>
+ <imageobject>
+ <imagedata fileref="institutions_view.png" format="PNG"/>
+ </imageobject>
+ <textobject>
+ <phrase>Institutions View</phrase>
+ </textobject>
+ </inlinemediaobject>
+ </guiicon>
+ Institutions: All of your institutions and accounts displayed in a
+ hierarchy.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <guiicon>
+ <inlinemediaobject>
+ <imageobject>
+ <imagedata fileref="accounts_view.png" format="PNG"/>
+ </imageobject>
+ <textobject>
+ <phrase>Accounts View</phrase>
+ </textobject>
+ </inlinemediaobject>
+ </guiicon>
+ Accounts: All of your accounts displayed in a hierarchy.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <guiicon>
+ <inlinemediaobject>
+ <imageobject>
+ <imagedata fileref="schedule_view.png" format="PNG"/>
+ </imageobject>
+ <textobject>
+ <phrase>Schedules View</phrase>
+ </textobject>
+ </inlinemediaobject>
+ </guiicon>
+ Schedules: Your recurring bills and deposits.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <guiicon>
+ <inlinemediaobject>
+ <imageobject>
+ <imagedata fileref="categories_view.png" format="PNG"/>
+ </imageobject>
+ <textobject>
+ <phrase>Categories View</phrase>
+ </textobject>
+ </inlinemediaobject>
+ </guiicon>
+ Categories: Special accounts that provide a means for you to group
+ associated transactions.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <guiicon>
+ <inlinemediaobject>
+ <imageobject>
+ <imagedata fileref="payees_view.png" format="PNG"/>
+ </imageobject>
+ <textobject>
+ <phrase>Payees View</phrase>
+ </textobject>
+ </inlinemediaobject>
+ </guiicon>
+ Payees: All Payees used by &kappname;.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <guiicon>
+ <inlinemediaobject>
+ <imageobject>
+ <imagedata fileref="ledgers_view.png" format="PNG"/>
+ </imageobject>
+ <textobject>
+ <phrase>Ledgers View</phrase>
+ </textobject>
+ </inlinemediaobject>
+ </guiicon>
+ Ledgers: Your account transactions.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <guiicon>
+ <inlinemediaobject>
+ <imageobject>
+ <imagedata fileref="investments_view.png" format="PNG"/>
+ </imageobject>
+ <textobject>
+ <phrase>Investments View</phrase>
+ </textobject>
+ </inlinemediaobject>
+ </guiicon>
+ Investments: Your portfolio summary.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <guiicon>
+ <inlinemediaobject>
+ <imageobject>
+ <imagedata fileref="reports_view.png" format="PNG"/>
+ </imageobject>
+ <textobject>
+ <phrase>Reports View</phrase>
+ </textobject>
+ </inlinemediaobject>
+ </guiicon>
+ Reports: A collection of useful reports, providing alternate views of your
+ financial data.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <guiicon>
+ <inlinemediaobject>
+ <imageobject>
+ <imagedata fileref="budgets_view.png" format="PNG"/>
+ </imageobject>
+ <textobject>
+ <phrase>Budgets View</phrase>
+ </textobject>
+ </inlinemediaobject>
+ </guiicon>
+ Budgets: Your budgets
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <guiicon>
+ <inlinemediaobject>
+ <imageobject>
+ <imagedata fileref="forecast_view.png" format="PNG"/>
+ </imageobject>
+ <textobject>
+ <phrase>Forecast View</phrase>
+ </textobject>
+ </inlinemediaobject>
+ </guiicon>
+ Forecast: This view provides a forecast of your accounts and categories
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <guiicon>
+ <inlinemediaobject>
+ <imageobject>
+ <imagedata fileref="outbox_view.png" format="PNG"/>
+ </imageobject>
+ <textobject>
+ <phrase>Outbox View</phrase>
+ </textobject>
+ </inlinemediaobject>
+ </guiicon>
+ Used by the online banking module to provide feedback on running
+ processes. This is a view provided by the KBanking plugin and may not be
+ present on your system.
+ </para>
+ </listitem>
+</itemizedlist>
+</sect1>
+
+<sect1 id="firsttime-3">
+<title>Creating a new file</title>
+
+<para>
+ &kappname; keeps all the data about your finances in a file. As was stated in
+ <link linkend="makingmostof.basicaccounting.personalaccounts">Defining the
+ accounts (personal records)</link>, you can keep more than one set of
+ accounts, but the data for each will be kept in a separate file, and
+ &kappname; can only have one file open at a time. See the chapter on <link
+ linkend="details.formats">File Formats</link> for more details about
+ &kappname;'s data files.
+</para>
+
+<para>
+ To create a new file you can either select
+ <menuchoice><guimenu>File</guimenu><guimenuitem>New</guimenuitem></menuchoice>
+ from the menu or choose the <inlinemediaobject><imageobject><imagedata
+ fileref="new.png"/></imageobject><textobject><phrase>New</phrase></textobject></inlinemediaobject>
+ icon from the toolbar.
+</para>
+
+<para>
+ &kappname; will then open the <quote>New File Setup Wizard</quote> which will
+ guide you through the process of creating the file.
+</para>
+
+<para>
+ <screenshot>
+ <screeninfo>Personal Data Page</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="newfile.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Personal Data Page</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ Since all fields are optional, you can use &kappname; without entering any
+ information now. Any information entered here is used only to personalize
+ your file. In the future, it may be used in some reports and for online
+ banking. If &kappname; requires any personal information in future releases
+ and finds none, you will be prompted to enter the relevant data then.
+</para>
+
+<para>
+ Please enter your name and address or nothing and press
+ <guibutton>Next</guibutton>.
+</para>
+
+<para>
+ In case you have an address for yourself stored in the KAddressbook, the
+ button <guibutton>Load from Addressbook</guibutton> is enabled and pressing it
+ imports all information into &kappname;.
+</para>
+
+<para>
+ &kappname; supports multiple currencies. To set your base currency (the
+ currency you use day to day and which will be used for your reports), select
+ the appropriate entry from the list provided and press
+ <guibutton>Next</guibutton>. A default will be selected from &kappname; based
+ upon your locale settings.
+</para>
+
+<para>
+ <screenshot>
+ <screeninfo>Base currency selection Page</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="newfile-2.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Base currency selection page</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ The following page allows you to create an initial account. For the typical
+ &kappname; user this is a checking account.
+</para>
+
+<para>
+ <screenshot>
+ <screeninfo>Checking account creation Page</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="newfile-3.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Checking account creation page</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ Enter the name of the account and a possible reference number assigned by the
+ institution managing the account. Enter the opening date of the account and
+ the opening balance of the account. For example, you want to use &kappname;
+ to manage all your finances as of 2008-01-01, then enter the balance of the
+ account at the beginning of this date. The number can possibly be obtained
+ from a paper statement. Also enter the name and routing number of the
+ institution, though this information is optional and only required for online
+ banking purposes.
+</para>
+
+<para>
+ In case you don't want to setup an initial account, please uncheck the checkbox
+</para>
+
+<para>
+ Once finished, press <guibutton>Next</guibutton> to proceed.
+</para>
+
+<para>
+ <screenshot>
+ <screeninfo>Account template selection Page</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="newfile-4.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Account template selection page</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+
+<para>
+ Choose the appropriate country and account template(s). Multiple templates,
+ even from multiple countries can be selected using a combination of
+ <keycap>Ctrl</keycap> and <keycap>Shift</keycap> together with the left mouse
+ button. The account hierarchy to be setup will be shown in a preview part of
+ the wizard. In case you cannot find a template that suits your needs, don't
+ select a template.
+</para>
+
+<para>
+ Once finished with the template selection press <guibutton>Next</guibutton> to
+ proceed.
+</para>
+
+<para>
+ The next page of the wizard allows you to setup user preferences. Press
+ <guibutton>Next</guibutton> if you are done and want to proceed.
+</para>
+
+<para>
+ <screenshot>
+ <screeninfo>Preference Page</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="newfile-5.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Preference page</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ The last page of the wizard allows you to select the filename that will be
+ used to store your financial data. An initial filename will be constructed out
+ of your HOME folder and user name. In case the file exists, a warning will
+ be displayed which reminds you to select a name of a non-existing file.
+</para>
+
+<para>
+ <screenshot>
+ <screeninfo>Filename selection Page</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="newfile-6.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Filename selection page</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+
+<para>
+ Now you have entered all relevant information to create the file. Press
+ <guibutton>Finish</guibutton> and &kappname; will create the file for you and
+ open it.
+</para>
+
+<!--
+<para>After &kappname; has finished loading the default accounts your financial
+summary will be displayed. As you have defined no accounts to hold your
+transactions this is currently empty.</para>
+-->
+</sect1>
+
+<sect1 id="firsttime-4">
+<title>Creating accounts</title>
+
+<para>
+ You can create an account in one of two ways both of which are described here:
+</para>
+
+<variablelist>
+ <varlistentry>
+ <term>Using the menu</term>
+ <listitem>
+ <para>
+ To create an account using the menu select
+ <menuchoice><guimenu>Accounts</guimenu><guimenuitem>Add new
+ account</guimenuitem></menuchoice>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Using the Accounts view</term>
+ <listitem>
+ <para>
+ To create an account using the accounts view click on the Accounts icon
+ in the view selector and then right click on the Asset tree icon in the
+ right hand view and select <guimenuitem>New account</guimenuitem> from
+ the popup menu. The Asset tree holds all of your accounts that are an
+ asset. Assets, and all the other account types, are discussed in more
+ detail later in this manual.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<tip>
+ <para>
+ Note that &kappname; uses the context menus a lot throughout the whole
+ application. If you find yourself stuck trying to figure out how to do
+ something, try right-clicking where you would expect to see a feature.
+ </para>
+</tip>
+
+<para>
+ Creating a new account by either method opens the <emphasis>New Account
+ Wizard</emphasis>. This wizard will take you step by step through the process
+ of creating an account, gathering the required information at each step. To
+ navigate through the pages click on the <guibutton>Previous</guibutton> and
+ <guibutton>Next</guibutton> buttons.
+</para>
+
+<para>
+ Create an account using either of the two previously mentioned methods to
+ continue. A full description of creating accounts can be found in the <link
+ linkend="details.accounts">Accounts</link> section.
+</para>
+
+<para>
+ Now that one or more accounts exist in &kappname;, your account summary is
+ shown in the Home view. You can create transactions manually in the <link
+ linkend="details.ledgers">Ledgers</link> view, or set up automatic
+ transactions through the <link linkend="details.schedules">Schedules</link>
+ view.
+</para>
+</sect1>
+
+<sect1 id="firsttime.schedules">
+<title>Schedules</title>
+
+<para>
+ Sometimes called a recurring transaction, a <link
+ linkend="details.schedules">Schedule</link> is a transaction that occurs one
+ or more times over a certain period of time. A typical example is your pay
+ check that you receive every month or week. Rather than have to enter the
+ transaction details each time you get paid, you can instruct &kappname; to
+ create a schedule that will enter a transaction for you when you get paid.
+</para>
+
+<para>
+ To maintain <link linkend="details.schedules">schedules</link> click on the
+ <guiicon><inlinemediaobject><imageobject><imagedata
+ fileref="schedule_view.png"/></imageobject></inlinemediaobject>Schedules</guiicon>
+ icon in the view selector.
+</para>
+</sect1>
+
+<sect1 id="firsttime.categories">
+<title>Categories</title>
+
+<para>
+ To maintain <link linkend="details.categories">categories</link> click on the
+ <guiicon><inlinemediaobject><imageobject><imagedata
+ fileref="categories_view.png"/></imageobject></inlinemediaobject>Categories</guiicon>
+ icon in the view selector.
+</para>
+
+<para>
+ A full description of this topic can be found in the <link
+ linkend="details.categories">Categories</link> section.
+</para>
+</sect1>
+
+<sect1 id="firsttime.payees">
+<title>Payees</title>
+
+<para>
+ To maintain your list of payees click on the
+ <guiicon><inlinemediaobject><imageobject><imagedata
+ fileref="payees_view.png"/></imageobject></inlinemediaobject>Payees</guiicon>
+ icon in the view selector.
+</para>
+
+<para>
+ A full description of this topic can be found in the <link
+ linkend="details.payees">Payees</link> section.
+</para>
+</sect1>
+
+<sect1 id="firsttime-import">
+<title>Quicken Interchange Format (QIF) Import</title>
+
+<para>
+ If you currently use a financial manager application, &kappname; can import an
+ account's transactions as long as they are in the Quicken Interchange Format
+ (QIF). Most financial programs can export this format and the different
+ applications methods of exporting QIF is not discussed here for brevity.
+</para>
+
+<para>
+ A full description of this topic can be found in the <link
+ linkend="details.impexp.qifimp">QIF Import</link> section.
+</para>
+</sect1>
+
+<sect1 id="firsttime-find">
+<title>Searching for transactions</title>
+
+<para>
+ &kappname; provides a useful and powerful transaction search facility in the
+ form of the search dialog.
+</para>
+
+<para>
+ The search dialog can be opened from the toolbar using the
+ <guiicon><inlinemediaobject><imageobject><imagedata
+ fileref="transaction_find.png"/></imageobject></inlinemediaobject>Find</guiicon>
+ icon or by selecting <guimenuitem>Find Transaction</guimenuitem> from the
+ <guimenu>Edit</guimenu> menu.
+</para>
+
+<para>
+ A full description of this topic can be found in the <link
+ linkend="details.search">Search</link> section.
+</para>
+
+</sect1>
+
+<sect1 id="firsttime-reconcile">
+<title>Reconciliation</title>
+
+<para>
+ At some point you will want to reconcile the transactions you have entered
+ with the transactions listed in a statement, be it a bank statement, credit
+ card statement, loan statement, or any other statement. Reconciliation
+ involves matching what you have entered with what the statement lists. If any
+ discrepancies are found then either you or the person who created the
+ statement have made a mistake.
+</para>
+
+<para>
+ To reconcile an account, first select the account, either from
+ <guiicon>Accounts</guiicon> view or from <guiicon>Ledgers</guiicon>
+ view. Then, either click on the <guiicon>Reconcile</guiicon> icon on the
+ Toolbar, or select <guimenuitem>Reconcile</guimenuitem> from the
+ <guimenu>Account</guimenu> menu.
+</para>
+
+<para>
+ A full description of this topic can be found in the <link
+ linkend="details.reconcile">Reconciliation</link> section.
+</para>
+
+</sect1>
+
+<sect1 id="firsttime-backup">
+<title>Backing up</title>
+
+<para>
+ Now that you have created some accounts and entered transactions it's a good
+ idea to perform a backup. Because the file used by &kappname; is a standard
+ Unix file you can just copy the file to another location to back it up or use
+ the dialog provided by &kappname;. Using the dialog is the preferred method
+ because if &kappname; ever starts using other file formats, such as SQL, then
+ it would be much harder to copy the file manually.
+</para>
+
+<para>
+ To backup your file through &kappname; Select
+ <guimenuitem>Backup</guimenuitem> from the <guimenu>File</guimenu> menu and
+ enter the folder where you wish the file to be copied to. If the folder
+ needs mounting first and you have the sufficient privileges then check the
+ tick box labeled <guilabel>Mount this directory before backing up</guilabel>
+ and click on <guibutton>OK</guibutton>.
+</para>
+
+<para>
+ The file will be copied to the folder specified with the current date
+ appended to the filename so it is easy to see the date the file was backed up.
+</para>
+</sect1>
+
+<sect1 id="firsttime-contact">
+<title>Contacting the developers / Reporting Bugs</title>
+
+<sect2>
+<title>Contacting the developers</title>
+
+<para>
+ You can contact the developers through their mailing list &devlist;.
+</para>
+
+<para>
+ We're happy to hear about your experiences using &kappname;.
+</para>
+</sect2>
+
+<sect2>
+<title>Reporting bugs</title>
+
+<para>
+ To report a bug please use the interface provided by &kappname; by selecting
+ <menuchoice><guimenu>Help</guimenu><guimenuitem>Report
+ Bug</guimenuitem></menuchoice> and filling in the required information.
+</para>
+
+<sect3 id="firsttime.bugs.quality">
+<title>Writing High Quality Bug Reports</title>
+
+<para>
+ We encourage users to take extra time to write high-quality bug reports when
+ submitting them. This reduces wasted effort on all sides, as the reporter and
+ the developer who will fix it trade emails until this information is really
+ in place.
+</para>
+
+<para>
+ Eli Goldberg wrote the canonical Bug-Writing Guideline, available at <ulink
+ url="http://issues.apache.org/bugwritinghelp.html">http://issues.apache.org/bugwritinghelp.html</ulink>.
+ Generally, you'll be well-served by following these guidelines:
+</para>
+
+<formalpara><title>Include your system information</title>
+ <para>
+ The <menuchoice><guimenu>Help</guimenu><guimenuitem>Report
+ Bug</guimenuitem></menuchoice> menu choice will fill this in automatically,
+ but if you would prefer not to use this interface, we will need to know the
+ version of &kappname; you're running, the version of &kde;, the name and
+ version of your distribution, and the version of your kernel.
+ </para>
+</formalpara>
+
+<formalpara><title>Include a backtrace for crashes</title>
+ <para>
+ The backtrace is often the single most useful piece of information in
+ solving crashes.
+ </para>
+</formalpara>
+
+<formalpara><title>Try to reproduce it</title>
+ <para>
+ Let us know if you were able to do so. It's useful to know whether the bug
+ only happened once and you couldn't get it to happen again or happens every
+ time or happens sometimes but not others.
+ </para>
+</formalpara>
+
+<formalpara><title>Include specific steps</title>
+ <para>
+ This is a bad bug report: <quote>I entered a transaction, and &kappname;
+ crashed.</quote> A much better bug report is: <quote>Using the transaction
+ form, I entered a new transaction in my Credit Card account. I selected the
+ Transfer tab, entered in an amount, then changed to the Deposit tab, and
+ back to the Transfer tab. When I returned to the Transfer tab, &kappname;
+ crashed. This bug is fully reproducible for me.</quote>
+ </para>
+</formalpara>
+
+<formalpara><title>Tell us what you expected to happen</title>
+ <para>
+ In some cases, this is obvious, but in more subtle bugs, sometimes you'll
+ see a bug report where it is not obvious what the reporter expected to
+ happen. Always tell us what you think should have happened.
+ </para>
+</formalpara>
+
+<formalpara><title>Consider running with debugging enabled</title>
+ <para>
+ By compiling a version configured with --enable-debug=full you can ensure
+ that the best possible backtraces are generated. If you encounter a crash,
+ run &kappname; again from within gdb, and reproduce the crash. When it
+ crashes, type <quote>bt</quote> to generate a backtrace.
+ </para>
+</formalpara>
+
+<para>
+ Running this way is a bit more difficult, so we don't expect all users to do
+ this. However, if you're interested in helping &kappname; become as stable as
+ possible, this is the best way to do it short of finding the bug in the code
+ and sending in a patch.
+</para>
+</sect3>
+</sect2>
+</sect1>
+</chapter>
diff --git a/doc/en/forecast_view.png b/doc/en/forecast_view.png
new file mode 100644
index 0000000..4dd5461
--- /dev/null
+++ b/doc/en/forecast_view.png
Binary files differ
diff --git a/doc/en/gnucash-import_options.png b/doc/en/gnucash-import_options.png
new file mode 100644
index 0000000..77d5dfc
--- /dev/null
+++ b/doc/en/gnucash-import_options.png
Binary files differ
diff --git a/doc/en/gnucash-report.png b/doc/en/gnucash-report.png
new file mode 100644
index 0000000..763dbde
--- /dev/null
+++ b/doc/en/gnucash-report.png
Binary files differ
diff --git a/doc/en/gnucash-select_price_source.png b/doc/en/gnucash-select_price_source.png
new file mode 100644
index 0000000..b82c3ee
--- /dev/null
+++ b/doc/en/gnucash-select_price_source.png
Binary files differ
diff --git a/doc/en/home_view.png b/doc/en/home_view.png
new file mode 100644
index 0000000..c2bdcce
--- /dev/null
+++ b/doc/en/home_view.png
Binary files differ
diff --git a/doc/en/index.docbook b/doc/en/index.docbook
new file mode 100644
index 0000000..1b85b63
--- /dev/null
+++ b/doc/en/index.docbook
@@ -0,0 +1,232 @@
+<?xml version="1.0" ?>
+<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
+ <!-- Define an entity for your application if it is not part of KDE
+ CVS -->
+ <!ENTITY kmyapplication "<application>KMyMoney</application>">
+ <!ENTITY kappname "KMyMoney"><!-- replace kmyapplication here
+ do *not* replace kappname-->
+ <!ENTITY package "kde-module"><!-- kdebase, kdeadmin, etc. Leave
+ this unchanged if your
+ application is not maintained in KDE CVS -->
+ <!ENTITY % addindex "IGNORE">
+ <!ENTITY % English "INCLUDE"> <!-- ONLY If you are writing non-English
+ original documentation, change
+ the language here -->
+ <!-- Do not define any other entities; instead, use the entities
+ from entities/general.entities and $LANG/user.entities. -->
+ <!ENTITY devlist "<email>kmymoney2-developer@lists.sourceforge.net</email>">
+ <!ENTITY userlist "<email>kmymoney2-user@lists.sourceforge.net</email>">
+ <!ENTITY Ctrl "<keycap>Ctrl</keycap>">
+ <!ENTITY Insert "<keycap>Ins</keycap>">
+
+<!-- the chapters -->
+ <!ENTITY introduction SYSTEM "introduction.docbook">
+ <!ENTITY makemostof SYSTEM "makemostof.docbook">
+ <!ENTITY firsttime SYSTEM "firsttime.docbook">
+ <!ENTITY whatsnew SYSTEM "whatsnew.docbook">
+ <!ENTITY details-institutions SYSTEM "details-institutions.docbook">
+ <!ENTITY details-accounts SYSTEM "details-accounts.docbook">
+ <!ENTITY details-loans SYSTEM "details-loans.docbook">
+ <!ENTITY details-budgets SYSTEM "details-budgets.docbook">
+ <!ENTITY details-forecast SYSTEM "details-forecast.docbook">
+ <!ENTITY details-categories SYSTEM "details-categories.docbook">
+ <!ENTITY details-payees SYSTEM "details-payees.docbook">
+ <!ENTITY details-schedules SYSTEM "details-schedules.docbook">
+ <!ENTITY details-ledgers SYSTEM "details-ledgers.docbook">
+ <!ENTITY details-investments SYSTEM "details-investments.docbook">
+ <!ENTITY details-currencies SYSTEM "details-currencies.docbook">
+ <!ENTITY details-impexp SYSTEM "details-impexp.docbook">
+ <!ENTITY details-reconciliation SYSTEM "details-reconciliation.docbook">
+ <!ENTITY details-search SYSTEM "details-search.docbook">
+ <!ENTITY details-reports SYSTEM "details-reports.docbook">
+ <!ENTITY details-settings SYSTEM "details-settings.docbook">
+ <!ENTITY details-widgets SYSTEM "details-widgets.docbook">
+ <!ENTITY details-formats SYSTEM "details-formats.docbook">
+ <!ENTITY details-database SYSTEM "details-database.docbook">
+ <!ENTITY details-hbciofx SYSTEM "details-hbciofx.docbook">
+ <!ENTITY reference SYSTEM "reference.docbook">
+ <!ENTITY credits SYSTEM "credits.docbook">
+]>
+
+<book lang="&language;">
+
+<bookinfo>
+<title>The &kmyapplication; Handbook</title>
+<subtitle>for &kappname; version 1.0</subtitle>
+
+<authorgroup>
+<!-- This is just put in as an example. For real documentation, please
+ define a general entity in entities/contributor.entities, e.g.
+<!ENTITY George.N.Ugnacious "<personname><firstname>George</firstname><othername>N.</othername><surname>Ugnacious</surname></personname>">
+<!ENTITY George.N.Ugnacious.mail "<email>gnu@kde.org</email>">
+and use `&George.N.Ugnacious; &George.N.Ugnacious.mail;' in the author element.
+ -->
+<author>
+ <personname>
+ <firstname>Michael</firstname>
+ <othername>T.</othername>
+ <surname>Edwardes</surname>
+ </personname>
+ <email>mte@users.sourceforge.net</email>
+</author>
+
+<author>
+ <personname>
+ <firstname>Thomas</firstname>
+ <surname>Baumgart</surname>
+ </personname>
+ <email>ipwizard@users.sourceforge.net</email>
+</author>
+
+<author>
+ <personname>
+ <firstname>Ace</firstname>
+ <surname>Jones</surname>
+ </personname>
+ <email>acejones@users.sourceforge.net</email>
+</author>
+
+<author>
+ <personname>
+ <firstname>Tony</firstname>
+ <surname>Bloomfield</surname>
+ </personname>
+ <email>tonybloom@users.sourceforge.net</email>
+</author>
+
+<author>
+ <personname>
+ <firstname>Robert</firstname>
+ <surname>Wadley</surname>
+ </personname>
+ <email>robntina@users.sourceforge.net</email>
+</author>
+
+<author>
+ <personname>
+ <firstname>Darin</firstname>
+ <surname>Strait</surname>
+ </personname>
+ <email>darin.strait@ashdar-partners.com</email>
+</author>
+
+<author>
+ <personname>
+ <firstname>Roger</firstname>
+ <surname>Lum</surname>
+ </personname>
+ <email>rogerlum@gmail.com</email>
+</author>
+
+<!-- TRANS:ROLES_OF_TRANSLATORS -->
+
+</authorgroup>
+
+<copyright>
+<year>2000</year>
+<year>2001</year>
+<year>2003</year>
+<year>2004</year>
+<year>2005</year>
+<year>2006</year>
+<year>2007</year>
+<year>2008</year>
+<year>2009</year>
+<holder>The &kmyapplication; Development Team</holder>
+</copyright>
+<!-- Translators: put here the copyright notice of the translation -->
+<!-- Put here the FDL notice. Read the explanation in fdl-notice.docbook
+ and in the FDL itself on how to use it. -->
+<legalnotice>&FDLNotice;</legalnotice>
+
+<!-- Date and version information of the documentation
+Don't forget to include this last date and this last revision number, we
+need them for translation coordination !
+Please respect the format of the date (YYYY-MM-DD) and of the version
+(V.MM.LL), it could be used by automation scripts.
+Do NOT change these in the translation. -->
+
+<date>2009-08-10</date>
+<releaseinfo>1.00.00</releaseinfo>
+
+<!-- Abstract about this handbook -->
+
+<abstract>
+<para>
+ &kappname;, the personal finance manager for &kde;.
+</para>
+
+<para>
+ This handbook describes &kappname; version 1.0.
+</para>
+</abstract>
+
+<!-- This is a set of Keywords for indexing by search engines.
+Please at least include KDE, the KDE package it is in, the name
+ of your application, and a few relevant keywords. -->
+
+<keywordset>
+<keyword>KDE</keyword>
+<keyword>KMyMoney2</keyword>
+<keyword>KMyMoney</keyword>
+<keyword>kmymoney2</keyword>
+<keyword>kmymoney</keyword>
+<keyword>finance</keyword>
+<keyword>accounts</keyword>
+<keyword>accounting</keyword>
+<keyword>financial</keyword>
+</keywordset>
+
+</bookinfo>
+
+<!-- The contents of the documentation begin here. Label
+each chapter so with the id attribute. This is necessary for two reasons: it
+allows you to easily reference the chapter from other chapters of your
+document, and if there is no ID, the name of the generated HTML files will vary
+from time to time making it hard to manage for maintainers and for the CVS
+system. Any chapter labelled (OPTIONAL) may be left out at the author's
+discretion. Other chapters should not be left out in order to maintain a
+consistent documentation style across all KDE apps. -->
+
+<!--
+ the main book
+-->
+&introduction;
+&whatsnew;
+&makemostof;
+&firsttime;
+&details-institutions;
+&details-accounts;
+&details-categories;
+&details-payees;
+&details-schedules;
+&details-ledgers;
+&details-investments;
+&details-currencies;
+&details-reconciliation;
+&details-reports;
+&details-impexp;
+&details-loans;
+&details-budgets;
+&details-forecast;
+&details-settings;
+&details-search;
+&details-formats;
+&details-database;
+&reference;
+&credits;
+
+&documentation.index;
+</book>
+<!--
+Local Variables:
+mode: xml
+sgml-minimize-attributes:nil
+sgml-general-insert-case:lower
+sgml-indent-step:0
+sgml-indent-data:nil
+End:
+
+vim:tabstop=2:shiftwidth=2:expandtab
+kate: space-indent on; indent-width 2; tab-width 2; indent-mode none;
+-->
diff --git a/doc/en/institution_options.png b/doc/en/institution_options.png
new file mode 100644
index 0000000..3736dad
--- /dev/null
+++ b/doc/en/institution_options.png
Binary files differ
diff --git a/doc/en/institution_view.png b/doc/en/institution_view.png
new file mode 100644
index 0000000..01fe245
--- /dev/null
+++ b/doc/en/institution_view.png
Binary files differ
diff --git a/doc/en/institutions_view.png b/doc/en/institutions_view.png
new file mode 100644
index 0000000..73a97f1
--- /dev/null
+++ b/doc/en/institutions_view.png
Binary files differ
diff --git a/doc/en/introduction.docbook b/doc/en/introduction.docbook
new file mode 100644
index 0000000..2a72406
--- /dev/null
+++ b/doc/en/introduction.docbook
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="introduction">
+<chapterinfo>
+ <date>2009-08-05</date>
+ <releaseinfo>1.0</releaseinfo>
+</chapterinfo>
+
+<title>Introduction</title>
+
+<sect1 id="what-is-kmymoney">
+<title>What is &kappname;?</title>
+
+<para>
+ Put simply, &kappname; is a personal finance manager for &kde;. It enables
+ users of open source operating systems to keep careful track of their personal
+ finances by providing a broad array of financial features and tools.
+</para>
+
+<para>
+ The principal goals of the project are:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <formalpara><title>Feature Parity</title>
+ <para>
+ &kappname; intends to provide all important features found in the
+ commercially-available personal finance managers. Although this release
+ is closer than ever to that goal, there is still work to be done.
+ </para>
+ </formalpara>
+ </listitem>
+
+ <listitem>
+ <formalpara><title>Ease of Use.</title>
+ <para>
+ &kappname; strives to be the easiest open source personal finance
+ manager to use, especially for the non-technical user.
+ </para>
+ </formalpara>
+ </listitem>
+
+ <listitem>
+ <formalpara><title>Correctness.</title>
+ <para>
+ Based on tried and tested double entry accounting principles &kappname;
+ ensures that your finances are kept in correct order.
+ </para>
+ </formalpara>
+ </listitem>
+</itemizedlist>
+
+</sect1>
+
+<sect1 id="what-kmymoney-is-not">
+<title>What &kappname; is not</title>
+
+<para>
+ As a personal finance manager, &kappname; is not intended to scale to the
+ needs of an average business. However, it would be possible to create client
+ / supplier / document features through plugins.
+</para>
+
+<para>
+ &kappname; is not simply a clone of the commercially-available personal
+ finance programs. Although many of the features present in &kappname; can be
+ found in other similar applications, &kappname; strives to present an
+ individual and unique view of your finances.
+</para>
+
+</sect1>
+</chapter>
diff --git a/doc/en/investment-currencywarning.png b/doc/en/investment-currencywarning.png
new file mode 100644
index 0000000..eb2eb38
--- /dev/null
+++ b/doc/en/investment-currencywarning.png
Binary files differ
diff --git a/doc/en/investment-exchangerateeditor.png b/doc/en/investment-exchangerateeditor.png
new file mode 100644
index 0000000..860e854
--- /dev/null
+++ b/doc/en/investment-exchangerateeditor.png
Binary files differ
diff --git a/doc/en/investment-onlineupdate.png b/doc/en/investment-onlineupdate.png
new file mode 100644
index 0000000..a5d7104
--- /dev/null
+++ b/doc/en/investment-onlineupdate.png
Binary files differ
diff --git a/doc/en/investment-transactionform.png b/doc/en/investment-transactionform.png
new file mode 100644
index 0000000..b145b55
--- /dev/null
+++ b/doc/en/investment-transactionform.png
Binary files differ
diff --git a/doc/en/investments_summarytab.png b/doc/en/investments_summarytab.png
new file mode 100644
index 0000000..8ae2603
--- /dev/null
+++ b/doc/en/investments_summarytab.png
Binary files differ
diff --git a/doc/en/investments_view.png b/doc/en/investments_view.png
new file mode 100644
index 0000000..72adf98
--- /dev/null
+++ b/doc/en/investments_view.png
Binary files differ
diff --git a/doc/en/kmt.png b/doc/en/kmt.png
new file mode 100644
index 0000000..10a9803
--- /dev/null
+++ b/doc/en/kmt.png
Binary files differ
diff --git a/doc/en/kmymoney2.1 b/doc/en/kmymoney2.1
new file mode 100644
index 0000000..de4a4cc
--- /dev/null
+++ b/doc/en/kmymoney2.1
@@ -0,0 +1,277 @@
+.lf 1 ../info/kmymoney2.kmymoney2.1
+.TH KMYMONEY2 "1" "May 2003" "KDE" "KDE Application"
+.SH NAME
+KMyMoney \- the personal finances manager for KDE
+.SH SYNOPSIS
+.B kmymoney2
+[\fIQt-options\fR] [\fIKDE-options\fR] [\fIFile\fR]
+.SH DESCRIPTION
+This manual page documents briefly the
+.B KMyMoney
+KDE Application.
+This manual page was written for the Debian GNU/Linux distribution
+because the original program does not have a manual page.
+.PP
+.B KMyMoney
+is the Personal Finance Manager for the KDE environment.
+It provides the functions required to balance your checkbooks,
+manage your personal loans and categorise your incomes and
+expenses using a checkbook style graphical user interface.
+.SH OPTIONS
+.SS "Arguments:"
+.TP
+File
+file to open
+.SS "Generic options:"
+.TP
+\fB\-\-help\fR
+Show help about options
+.TP
+\fB\-\-help\-qt\fR
+Show Qt specific options
+.TP
+\fB\-\-help\-kde\fR
+Show KDE specific options
+.TP
+\fB\-\-help\-all\fR
+Show all options
+.TP
+\fB\-\-author\fR
+Show author information
+.TP
+\fB\-v\fR, \fB\-\-version\fR
+Show version information
+.TP
+\fB\-\-license\fR
+Show license information
+.TP
+\fB\-\-\fR
+End of options
+.lf 1 ../../info//kdeqtoptions
+.SS "KDE options"
+.TP 12
+.BI \-\-caption \ caption
+Use \fIcaption\fP as name in the titlebar.
+.TP
+.BI \-\-icon \ icon
+Use \fIicon\fP as the application icon. \fIicon\fP is the name of the
+icon, which can either be an absolute filename path, or otherwise the
+icon is sought for in places according to the normal KDE rules.
+.TP
+.BI \-\-miniicon \ icon
+Use \fIicon\fP as the icon in the titlebar. \fIicon\fP is the filename
+of the icon, according to the same rules as for the \-\-icon parameter.
+.TP
+.BI \-\-config \ filename
+Use an alternative configuration file, instead of the default, which
+is normally located in
+.I /usr/share/config
+or in
+.RB $ KDEHOME\fI/share/config
+.TP
+.BI \-\-dcopserver \ server
+Set the address of the DCOP server to attach to.
+.TP
+.B \-\-nocrashhandler
+Disable crash handler, to get core dumps. This option has the same
+effect as definiting the environment variable KDE_DEBUG.
+.TP
+.B \-\-waitforwm
+Waits for a WM_NET compatible windowmanager.
+.TP
+.BI \-\-style \ style
+sets the application GUI style.
+.TP
+.BI \-\-geometry \ geometry
+sets the client geometry of the main widget.
+The geometry parameter follows the normal X convention for geometry,
+which is on the form:
+.RS
+.IP
+[\fIwidth\fBx\fIheight\fR][{\fB+-\fR}\fIxpos\fR{\fB+-\fR}\fIypos\fR]
+.P
+Where \fIwidth\fR and \fIheight\fR gives the desired minimum width and
+height, of the main application window. Both in pixels. A value of 0
+specifies the default size. The optional \fIxpos\fR and \fIypos\fR
+specifies the x,y-position that which is desired for the application
+window. Specifying negative values for x or y implies that the x or y
+position is to be measured from the left or bottom screen edge,
+instead of as in the normal case, with positive values, from the left
+and top edges.
+.RE
+.SS "Qt options"
+.TP 12
+.BI \-\-display \ displayname
+Use the X-server display \fIdisplayname\fP.
+.TP
+.BI \-\-session \ sessionId
+Restore the application for the given \fIsessionId\fP.
+.TP
+.B \-\-cmap
+Causes the application to install a private color
+map on an 8-bit display.
+.TP
+.BI \-\-ncols \ count
+Limits the number of colors allocated in the color
+cube on an 8-bit display, if the application is
+using the QApplication::ManyColor color
+specification.
+.TP
+.B \-\-nograb
+Tells Qt to never grab the mouse or the keyboard.
+.TP
+.B \-\-dograb
+Running under a debugger can cause an implicit
+.B \-nograb\fR, use \fB\-dograb\fR to override.
+.TP
+.B \-\-sync
+switches to synchronous mode for debugging.
+.TP
+.BI "\-\-fn\fR, \fP\-\-font" \ fontname
+Defines the default application font. The \fIfontname\fP should be in
+the X logical font name description format XLFD. For a full description of
+the format see
+.I /usr/X11R6/lib/X11/doc/xlfd.TXT
+Note that the application might override the font specified with
+its own font.
+.TP
+.BI "-\-bg\fR, \fB\-\-background" \ color
+Sets the default background color and an
+application palette (light and dark shades are
+calculated).
+.TP
+.BI "\-\-fg\fR, \fB\-\-foreground" \ color
+Sets the default foreground color.
+.TP
+.BI \-\-btn\fR, \fB\-\-button \ color
+Sets the default button color.
+.TP
+.BI \-\-name \ name
+Sets the application name.
+.TP
+.BI \-\-title \ title
+Sets the application title. This option might, or might not appear
+in the title bar caption, depending on the application. To change the caption, use the
+.B \-\-caption
+option instead.
+.TP
+.B \-\-visual TrueColor
+Forces the application to use a TrueColor visual on
+an 8-bit display.
+.TP
+.BI \-\-inputstyle \ inputstyle
+Sets XIM (X Input Method) input style. Possible
+values are
+.BR onthespot ", " overthespot ", " offthespot and root .
+.TP
+.BI \-\-im " XIM-server"
+Set XIM server.
+.TP
+.B \-\-noxim
+Disable XIM.
+.TP
+.B \-\-reverse
+Mirror reverses the whole layout of widgets. This means that menus
+will go in the opposite direction, the scroll bar will be on the
+opposite side, etc. For a normal western layout that means that menus
+and tool bars will go from the right edge to the left, the vertical
+scroll bar will be on the left side and so on.
+
+.lf 48 ../info/kmymoney2.kmymoney2.1
+.SH ENVIRONMENT
+.lf 1 ../../info//kdeenviron
+.SS "standard KDE environment variables"
+.IP KDE_LANG
+Language locale setting to use. This option makes it possible to set
+another language environment for a program than what is the default. The
+correct language pack for this language has to be installed for this option
+to work. The default language when there is none set is en_US. When
+deciding upon a language, the following resources are looked up, in
+order: KDE_LANG, configuration file, LC_CTYPE, LC_MESSAGES, LC_ALL,
+LANG.
+.IP KDE_UTF8_FILENAMES
+Assume that all filenames are in UTF-8 format regardless of the
+current language setting. Otherwise the filename format is defined by
+the language.
+.IP KDE_MULTIHEAD
+If this variable has the value
+.B true
+multihead multiple display mode is enabled. The KDE display will be
+shared over more than one screen.
+.IP DISPLAY
+Specifies the X display to run KDE on.
+.IP KDESYCOCA
+Specifies and alternative path for the
+.I ksycoca
+KDE system configuration cache file.
+The default path is
+/tmp/kde-$USER/ksycoca
+.IP DCOPSERVER
+Specifies an alternative path for the DCOP server file. The default
+file is
+$HOME/.DCOPserver_\fIhostname\fP_\fIdisplayname\fP
+.IP SESSION_MANAGER
+The session manager to use. This option is set automatically by KDE
+and is a network path to the session manager socket.
+.IP HOME
+Path to the home directory for the current user.
+.IP KDEHOME
+The KDE per-user setting directory. Default if not specified is
+.I $HOME/.kde
+.lf 50 ../info/kmymoney2.kmymoney2.1
+.SH AUTHOR
+.B KMyMoney
+was written by
+.PP
+.nh
+.ad l
+Michael Edwardes <mte@users.sourceforge.net>,
+.br
+Felix Rodriguez <frodriguez@users.sourceforge.net>,
+.br
+John C <tacoturtle@users.sourceforge.net>,
+.br
+Thomas Baumgart <ipwizard@users.sourceforge.net>,
+.br
+Kevin Tambascio <ktambascio@users.sourceforge.net> and
+.br
+Arni Ingimundarson <arniing@users.sourceforge.net>.
+.PP
+.hy
+Please use
+.IP
+.nh
+.B http://sourceforge.net/tracker/?group_id=4708
+.hy
+.PP
+to report bugs and post support or feature requests.
+.br
+.B Do not mail the authors directly.
+.PP
+This manual page was prepared by
+.nh
+.ad l
+Karolina Lindqvist <pgd\-karolinali@algonet.se>
+.hy
+for the Debian GNU/Linux system (but may be used by others) and
+has been enhanced by
+.nh
+.ad l
+Thomas Baumgart <ipwizard@users.sourceforge.net>
+.hy
+to reflect the latest changes in development.
+.SH "SEE ALSO"
+The full documentation for
+.B KMyMoney
+is maintained as a docbook manual. If the
+.B khelpcenter
+program is properly installed at your site, the command
+.IP
+.B khelpcenter help:/kmymoney2
+.PP
+should give you access to the complete manual.
+.P
+Alternatively the manual can be browsed in
+.B konqueror
+giving it the URL
+.B help:/kmymoney2
diff --git a/doc/en/ledger_more.png b/doc/en/ledger_more.png
new file mode 100644
index 0000000..f869db4
--- /dev/null
+++ b/doc/en/ledger_more.png
Binary files differ
diff --git a/doc/en/ledgers.png b/doc/en/ledgers.png
new file mode 100644
index 0000000..f1b189b
--- /dev/null
+++ b/doc/en/ledgers.png
Binary files differ
diff --git a/doc/en/ledgers_view.png b/doc/en/ledgers_view.png
new file mode 100644
index 0000000..8236097
--- /dev/null
+++ b/doc/en/ledgers_view.png
Binary files differ
diff --git a/doc/en/ledgerview-numbered.png b/doc/en/ledgerview-numbered.png
new file mode 100644
index 0000000..1085b3f
--- /dev/null
+++ b/doc/en/ledgerview-numbered.png
Binary files differ
diff --git a/doc/en/mainwindow_numbered.png b/doc/en/mainwindow_numbered.png
new file mode 100644
index 0000000..1c63d66
--- /dev/null
+++ b/doc/en/mainwindow_numbered.png
Binary files differ
diff --git a/doc/en/makemostof.docbook b/doc/en/makemostof.docbook
new file mode 100644
index 0000000..fb4e0df
--- /dev/null
+++ b/doc/en/makemostof.docbook
@@ -0,0 +1,361 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="makingmostof">
+<chapterinfo>
+ <authorgroup>
+ <author>
+ <firstname>Joe</firstname>
+ <surname>(joe1011010)</surname>
+ <affiliation>
+ <address><email>joe1011010_km@users.sourceforge.net</email></address>
+ </affiliation>
+ </author>
+ </authorgroup>
+ <date>2009-05-05</date>
+ <releaseinfo>1.0</releaseinfo>
+</chapterinfo>
+
+<title>Making the most of &kappname;</title>
+
+<para>
+ Whilst you could go ahead, clicking some buttons and filling in some data,
+ after a time, you could decide you have done it wrong and start again, even if
+ you did read the documentation on each part of &kappname;.
+</para>
+
+<para>
+ You will get a more effective system if you spend a little time planning how
+ you are going to use &kappname;, so follow the steps given here.
+</para>
+
+<sect1 id="makingmostof.basicaccounting">
+<title>Basic Accounting</title>
+
+<para>
+ Imagine your money as balls, or beans, and to stop them rolling around you
+ keep them in a box, or pot. Accounting, or Book Keeping, is the process of
+ counting the beans in the pot, or several pots.
+</para>
+
+<para>
+ You have some money in the pot marked <quote>Cash</quote>. You buy some goods,
+ so you take some beans out of the cash pot and place them into another pot
+ marked <quote>Supplier</quote>. The supplier gives you some goods in exchange
+ for the cash, so you take the beans out of the pot marked
+ <quote>Supplier</quote> and put them in the pot marked <quote>Goods</quote>.
+</para>
+<para>
+ The goods have a value (the price you paid) so you still have the same amount
+ of beans, some representing cash and some representing goods.
+</para>
+<para>
+ In this case you have two movements of beans, or transactions. Each
+ transaction needs two entries, one to take beans out and one to put beans
+ in. This is called <quote>double entry book keeping</quote> or <quote>double
+ entry accounting</quote>. The recording of the transactions is done in a
+ <quote>Ledger</quote>; each pot is known as an <quote>Account</quote> or
+ <quote>Ledger code</quote>.
+</para>
+
+<para>
+ Now you take some goods and give them to a customer, who gives you some cash
+ in exchange. The goods were worth some beans and, hopefully, the customer has
+ given us more beans than that, so making a profit. To over simplify, the beans
+ from the Goods pot come back as Cash, but we can split that as the <quote>Cost
+ of Goods sold</quote> and <quote>Profit</quote>. This transaction has three
+ entries; one side of the <quote>double entry</quote> has been split.
+</para>
+
+<para>
+ This will be covered properly in setting up accounts for Businesses.
+</para>
+
+<sect2 id="makingmostof.basicaccounting.personalaccounts">
+<title>Defining the accounts (personal records)</title>
+
+<para>
+ Most accounts, or pots, above represent a measure of our
+ <quote>Worth</quote>. The cash and goods represent our <quote>Assets</quote>;
+ so does what we are owed if our customers have not yet given us the money. The
+ money we owe, say if we had not paid our suppliers, are our
+ <quote>Liabilities</quote>. These accounts are transferable to Cash and have a
+ value.
+</para>
+
+<para>
+ Any pots that cannot be valued are <quote>Income</quote> or
+ <quote>Expense</quote>, such as an unpaid phone bill that would be an expense
+ as we have already made the calls. Although these do not have a value, it is
+ useful to monitor how much is in each.
+</para>
+
+<para>
+ In some cases a supplier is a <quote>Liability</quote>, in others it is an
+ <quote>Expense</quote>. This is something we need to consider and decide for
+ each case. Similarly, you may set up a loan as a Liability, particularly if
+ you transfer the money into your bank account, but it could be an Expense if
+ it was to buy some furniture.
+</para>
+
+<para>
+ Consider how you want to analyze your income and expenses. This will decide how you set them up.
+</para>
+
+<para>
+ Finally, consider if you want everything in one set of accounts, or two or
+ more. This may depend on the legal framework or just how you want to analyze
+ things. Each set of accounts would be handled separately.
+</para>
+</sect2>
+
+<sect2 id="makingmostof.basicaccounting.businessaccounts">
+<title>Defining the accounts (business records)</title>
+
+<para>
+ This is similar to setting up for personal use, but needs to follow legal
+ guidelines. We do not discuss them here, but you should be aware of what these
+ are.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="makingmostof.mapping">
+<title>Mapping your finances to &kappname;</title>
+
+<para>
+ So, collect up your papers and see the following sections for each item in
+ &kappname;.
+</para>
+
+<sect2 id="makingmostof.mapping.accounts">
+<title>Accounts</title>
+
+<para>
+ These hold a value. Transactions are created against one or more accounts.
+</para>
+
+<sect3 id="makingmostof.mapping.accounts.asset">
+<title>Accounts - Asset</title>
+
+<para>
+ These are the accounts which hold your money and possessions that you wish to
+ monitor. The following types are available:
+</para>
+
+<variablelist>
+ <varlistentry>
+ <term>Checking</term>
+ <listitem>
+ <para>
+ Standard bank checking account.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Savings</term>
+ <listitem>
+ <para>
+ Standard bank savings account.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Cash</term>
+ <listitem>
+ <para>
+ Money in your hand or wallet.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Loan</term>
+ <listitem>
+ <para>
+ Loans you make to someone else.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Investment</term>
+ <listitem>
+ <para>
+ Money you invest.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Asset</term>
+ <listitem>
+ <para>
+ Property, collections, etc.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect3>
+
+<sect3 id="makingmostof.mapping.accounts.liability">
+<title>Accounts - Liability</title>
+
+<para>
+ These are the accounts which represent your debts and money owed that you wish
+ to monitor. The following types are available:
+</para>
+
+<variablelist>
+ <varlistentry>
+ <term>Credit card</term>
+ <listitem>
+ <para>
+ Standard credit card account.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Loan</term>
+ <listitem>
+ <para>
+ Loans made to you, mortgages, etc.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Liability</term>
+ <listitem>
+ <para>
+ Anything else you owe that is not a loan.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect3>
+</sect2>
+
+<sect2 id="makingmostof.mapping.institutions">
+<title>Institutions</title>
+
+<para>
+ These are completely optional and can be used to group accounts, and show a
+ total value for all accounts in each group.
+</para>
+</sect2>
+
+<sect2 id="makingmostof.mapping.categories">
+<title>Categories</title>
+
+<para>
+ These represent non-managed income and expense accounts that do not have a
+ value. The total value of transactions is shown against each category. A
+ category or transfer account is required for each transaction.
+</para>
+</sect2>
+
+<sect2 id="makingmostof.mapping.subcategories">
+<title>Sub-Categories</title>
+
+<para>
+ Categories can be split into sub-categories, but the sub-category totals are
+ not included in the higher level category total.
+</para>
+</sect2>
+
+<sect2 id="makingmostof.mapping.payees">
+<title>Payees</title>
+
+<para>
+ These are optional for transactions. They are required for Scheduled
+ transactions. A transaction history, with category, is shown against each
+ payee.
+</para>
+</sect2>
+
+<sect2 id="makingmostof.mapping.schedules">
+<title>Scheduled transactions</title>
+
+<para>
+ Where regular transactions occur, these can be set up against a
+ Schedule. Transactions are created from a schedule; any that are overdue can
+ be seen on the home page.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="makingmostof.usefultips">
+<title>Useful Tips</title>
+
+<para>
+ Unless you keep you money under the floorboards, you probably make use of one
+ or more institutions where you have accounts which may be in credit or
+ debit. In order to familiarise yourself with the way &kappname; works, choose
+ an account you want to track of with &kappname; and select File>New in order
+ to set up an account file.
+</para>
+
+<para>
+ If you have used another personal finance manager, you may be able to import
+ the data from it into &kappname;.
+</para>
+
+<para>
+ If you have some regular receipts into or outgoings from this account, go to
+ Payee and enter the names of both the payers and the payees involved; then go
+ to Schedule and fill in a New Schedule for each transaction. If you haven't
+ entered the payee or payer, &kappname; will offer you the opportunity to do
+ this in the middle of entering the schedule.
+</para>
+
+<para>
+ To add other new transactions go to Ledgers; you can add new payees and
+ categories in the middle of a transaction or by going to Payees or Categories
+ before entering the transaction.
+</para>
+
+<para>
+ You will probably find that the default Categories do not exactly match your
+ needs; you can easily delete ones you know you are never going to need and add
+ others that you need. But when you are entering a transaction, you only have
+ to type a few letters of a category and &kappname; will offer you a drop down
+ list of the matching categories from which to choose.
+</para>
+
+<para>
+ You can add different accounts managed by different institutions; the
+ preferred one will show when you open &kappname; but you can quickly switch to
+ any of the others.
+</para>
+
+<para>
+ When you make a payment, &kappname; will work out what the next cheque number
+ should be; delete this if you are not making a cheque payment or edit it if
+ the first cheque you enter is not cheque number 1. Alternatively, it is
+ possible to switch off auto-increment of cheque numbers.
+</para>
+
+<para>
+ Every so often you may get statements of your account from the institutions
+ you use; you can reconcile your &kappname; accounts against these statements
+ so that you have an accurate statement of the current state of your finances.
+</para>
+
+<para>
+ If you go to Reports, you will find several default reports; to customise
+ these, open one similar to the sort you perfer and then select 'New' (not
+ 'Copy'); you can then customise this to your needs and mark it as a preferred
+ report if you wish.
+</para>
+
+<para>
+ Though &kappname; is not intended for use in a business context, if you are
+ running a business on your own and so do not need payroll functions, you will
+ probably find that &kappname; is sufficiently customisable to meet your needs
+ particularly as it comes with budgeting and forecasting features and you can
+ export your customised reports via CSV into other applications.
+</para>
+</sect1>
+</chapter>
diff --git a/doc/en/new.png b/doc/en/new.png
new file mode 100644
index 0000000..004ca03
--- /dev/null
+++ b/doc/en/new.png
Binary files differ
diff --git a/doc/en/newacct.png b/doc/en/newacct.png
new file mode 100644
index 0000000..d0af91e
--- /dev/null
+++ b/doc/en/newacct.png
Binary files differ
diff --git a/doc/en/newfile-2.png b/doc/en/newfile-2.png
new file mode 100644
index 0000000..0f38922
--- /dev/null
+++ b/doc/en/newfile-2.png
Binary files differ
diff --git a/doc/en/newfile-3.png b/doc/en/newfile-3.png
new file mode 100644
index 0000000..72f68e1
--- /dev/null
+++ b/doc/en/newfile-3.png
Binary files differ
diff --git a/doc/en/newfile-4.png b/doc/en/newfile-4.png
new file mode 100644
index 0000000..586f42b
--- /dev/null
+++ b/doc/en/newfile-4.png
Binary files differ
diff --git a/doc/en/newfile-5.png b/doc/en/newfile-5.png
new file mode 100644
index 0000000..48ae36b
--- /dev/null
+++ b/doc/en/newfile-5.png
Binary files differ
diff --git a/doc/en/newfile-6.png b/doc/en/newfile-6.png
new file mode 100644
index 0000000..d8c311e
--- /dev/null
+++ b/doc/en/newfile-6.png
Binary files differ
diff --git a/doc/en/newfile.png b/doc/en/newfile.png
new file mode 100644
index 0000000..bd2966e
--- /dev/null
+++ b/doc/en/newfile.png
Binary files differ
diff --git a/doc/en/newinst.png b/doc/en/newinst.png
new file mode 100644
index 0000000..40c5286
--- /dev/null
+++ b/doc/en/newinst.png
Binary files differ
diff --git a/doc/en/newsched_numbered.png b/doc/en/newsched_numbered.png
new file mode 100644
index 0000000..814988b
--- /dev/null
+++ b/doc/en/newsched_numbered.png
Binary files differ
diff --git a/doc/en/otherdoc.docbook b/doc/en/otherdoc.docbook
new file mode 100644
index 0000000..d3672fe
--- /dev/null
+++ b/doc/en/otherdoc.docbook
@@ -0,0 +1,6 @@
+<chapter id="otherdoc">
+<title>Other Documentation - Under development - MTE</title>
+<para>(This section can be removed if not completed in time) (Ace)
+</para>
+</chapter>
+
diff --git a/doc/en/outbox_view.png b/doc/en/outbox_view.png
new file mode 100644
index 0000000..4aa8fc3
--- /dev/null
+++ b/doc/en/outbox_view.png
Binary files differ
diff --git a/doc/en/payee_history.png b/doc/en/payee_history.png
new file mode 100644
index 0000000..df1af63
--- /dev/null
+++ b/doc/en/payee_history.png
Binary files differ
diff --git a/doc/en/payee_info.png b/doc/en/payee_info.png
new file mode 100644
index 0000000..23e7c42
--- /dev/null
+++ b/doc/en/payee_info.png
Binary files differ
diff --git a/doc/en/payee_match.png b/doc/en/payee_match.png
new file mode 100644
index 0000000..369b710
--- /dev/null
+++ b/doc/en/payee_match.png
Binary files differ
diff --git a/doc/en/payee_widget.png b/doc/en/payee_widget.png
new file mode 100644
index 0000000..93ac111
--- /dev/null
+++ b/doc/en/payee_widget.png
Binary files differ
diff --git a/doc/en/payees_view.png b/doc/en/payees_view.png
new file mode 100644
index 0000000..f8fd357
--- /dev/null
+++ b/doc/en/payees_view.png
Binary files differ
diff --git a/doc/en/payeeview.png b/doc/en/payeeview.png
new file mode 100644
index 0000000..5b86399
--- /dev/null
+++ b/doc/en/payeeview.png
Binary files differ
diff --git a/doc/en/qif_report.png b/doc/en/qif_report.png
new file mode 100644
index 0000000..37bd55c
--- /dev/null
+++ b/doc/en/qif_report.png
Binary files differ
diff --git a/doc/en/qifimport-export.png b/doc/en/qifimport-export.png
new file mode 100644
index 0000000..24173a8
--- /dev/null
+++ b/doc/en/qifimport-export.png
Binary files differ
diff --git a/doc/en/qifimport-qifprofiledate.png b/doc/en/qifimport-qifprofiledate.png
new file mode 100644
index 0000000..c0f6156
--- /dev/null
+++ b/doc/en/qifimport-qifprofiledate.png
Binary files differ
diff --git a/doc/en/qifimport-qifprofileeditor.png b/doc/en/qifimport-qifprofileeditor.png
new file mode 100644
index 0000000..961d15d
--- /dev/null
+++ b/doc/en/qifimport-qifprofileeditor.png
Binary files differ
diff --git a/doc/en/qifimportverify.png b/doc/en/qifimportverify.png
new file mode 100644
index 0000000..5dd9829
--- /dev/null
+++ b/doc/en/qifimportverify.png
Binary files differ
diff --git a/doc/en/qifopen.png b/doc/en/qifopen.png
new file mode 100644
index 0000000..b1b7b3b
--- /dev/null
+++ b/doc/en/qifopen.png
Binary files differ
diff --git a/doc/en/reconcile.png b/doc/en/reconcile.png
new file mode 100644
index 0000000..ab173cd
--- /dev/null
+++ b/doc/en/reconcile.png
Binary files differ
diff --git a/doc/en/reconcile1.png b/doc/en/reconcile1.png
new file mode 100644
index 0000000..0b8a130
--- /dev/null
+++ b/doc/en/reconcile1.png
Binary files differ
diff --git a/doc/en/reconcile2.png b/doc/en/reconcile2.png
new file mode 100644
index 0000000..ce4e850
--- /dev/null
+++ b/doc/en/reconcile2.png
Binary files differ
diff --git a/doc/en/reconcile3.png b/doc/en/reconcile3.png
new file mode 100644
index 0000000..3638c7b
--- /dev/null
+++ b/doc/en/reconcile3.png
Binary files differ
diff --git a/doc/en/reconcile4.png b/doc/en/reconcile4.png
new file mode 100644
index 0000000..b6bb603
--- /dev/null
+++ b/doc/en/reconcile4.png
Binary files differ
diff --git a/doc/en/reference.docbook b/doc/en/reference.docbook
new file mode 100644
index 0000000..ebbe52f
--- /dev/null
+++ b/doc/en/reference.docbook
@@ -0,0 +1,919 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="reference">
+<chapterinfo>
+ <date>2009-08-10</date>
+ <releaseinfo>1.0</releaseinfo>
+</chapterinfo>
+
+<title>Reference</title>
+
+<sect1 id="reference.menus">
+<sect1info>
+ <author>
+ <firstname>Roger</firstname>
+ <surname>Lum</surname>
+ <affiliation>
+ <address><email>rogerlum@gmail.com</email></address>
+ </affiliation>
+ </author>
+</sect1info>
+<title>Menus</title>
+
+<para>
+ Below is a complete list of the menu selections in &kappname;, with a very
+ brief description of what each one does. Note that many of these menu choices
+ will be unavailable, or grayed out, depending on the current display or state
+ of the application. For example, you are not able to edit an account unless
+ you have an account selected or displayed in the current view.
+</para>
+
+<sect2 id="reference.menus.file">
+<title>File Menu</title>
+
+<variablelist>
+ <varlistentry>
+ <term><menuchoice>
+ <shortcut>
+ <keycombo><keycap>Ctrl</keycap><keycap>n</keycap></keycombo>
+ </shortcut>
+ <guimenu>File</guimenu><guimenuitem>New</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action> Creates a new empty &kappname; data file. Only one
+ &kappname; file can be open at once, so this will close your current file
+ first, if one is open. </action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <shortcut>
+ <keycombo><keycap>Ctrl</keycap><keycap>o</keycap></keycombo>
+ </shortcut>
+ <guimenu>File</guimenu><guimenuitem>Open</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Opens an existing &kappname; data file.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>File</guimenu>
+ <guimenuitem>Open Recent</guimenuitem>
+ <guimenuitem>...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Allows quick access to recently opened
+ files.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>File</guimenu><guimenuitem>Open Database...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Opens an existing database.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <shortcut>
+ <keycombo><keycap>Ctrl</keycap><keycap>s</keycap></keycombo>
+ </shortcut>
+ <guimenu>File</guimenu><guimenuitem>Save</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Saves the currently open file.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>File</guimenu><guimenuitem>Save As...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Saves the currently open file with a different
+ filename.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>File</guimenu><guimenuitem>Save As Database...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Saves the currently open file in a <link
+ linkend="details.database">Database</link>.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>File</guimenu>
+ <guimenuitem>Import</guimenuitem>
+ <guimenuitem>...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Imports financial data from other file types, such as QIF
+ and Gnucash, or a template file of accounts and categories that can be
+ used in setting up new accounts.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>File</guimenu>
+ <guimenuitem>Export</guimenuitem>
+ <guimenuitem>...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Exports the current file as a different file type, such as
+ QIF, or exports a list of your accounts and categories as an template.
+ </action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <shortcut>
+ <keycombo><keycap>Ctrl</keycap><keycap>p</keycap></keycombo>
+ </shortcut>
+ <guimenu>File</guimenu><guimenuitem>Print</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Prints the current file.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>File</guimenu><guimenuitem>Backup</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Saves a backup the current file.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>File</guimenu><guimenuitem>Personal Data</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Allows to edit personal data.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>File</guimenu><guimenuitem>File information</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Displays information about the currently open &kappname;
+ file.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <shortcut>
+ <keycombo><keycap>Ctrl</keycap><keycap>w</keycap></keycombo>
+ </shortcut>
+ <guimenu>File</guimenu><guimenuitem>Close</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Closes the current file.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <shortcut>
+ <keycombo><keycap>Ctrl</keycap><keycap>q</keycap></keycombo>
+ </shortcut>
+ <guimenu>File</guimenu><guimenuitem>Quit</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Quit &kappname;</action></para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect2>
+
+<sect2 id="reference.menus.edit">
+<title>Edit Menu</title>
+
+<variablelist>
+ <varlistentry>
+ <term><menuchoice>
+ <shortcut>
+ <keycombo><keycap>Ctrl</keycap><keycap>f</keycap></keycombo>
+ </shortcut>
+ <guimenu>Edit</guimenu><guimenuitem>Find transactions...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Search transactions.</action></para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect2>
+
+<sect2 id="reference.menus.view">
+<title>View Menu</title>
+
+<variablelist>
+ <varlistentry id="reference.menus.settings.transactiondetail">
+ <term><menuchoice>
+ <shortcut>
+ <keycombo><keycap>Ctrl</keycap><keycap>t</keycap></keycombo>
+ </shortcut>
+ <guimenu>Settings</guimenu>
+ <guimenuitem>Show Transaction Detail</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>
+ Shows transaction details in the <link
+ linkend="details.ledgers">Ledger</link> view. With this option turned
+ on, all lines of the transaction will be shown in the ledger. When it
+ is turned off, only one line will be shown.
+ </action></para>
+ <para>
+ If you only want to see details for the currently selected transaction,
+ but only one line for the others, you can turn on the <link
+ linkend="details.settings.register.lens">Ledger Lens</link>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <shortcut>
+ <keycombo><keycap>Ctrl</keycap><keycap>r</keycap></keycombo>
+ </shortcut>
+ <guimenu>View</guimenu>
+ <guimenuitem>Hide reconciled transactions</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Hides reconciled transactions on the
+ register.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <shortcut>
+ <keycombo><keycap>Ctrl</keycap><keycap>u</keycap></keycombo>
+ </shortcut>
+ <guimenu>View</guimenu>
+ <guimenuitem>Hide unused categories</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Hides unused categories on the views.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <shortcut>
+ <keycombo>
+ <keycap>Ctrl</keycap><keycap>Shift</keycap><keycap>a</keycap>
+ </keycombo>
+ </shortcut>
+ <guimenu>View</guimenu><guimenuitem>Show all accounts</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Shows all accounts on the views.</action></para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect2>
+
+<sect2 id="reference.menus.institution">
+<title>Institution Menu</title>
+
+<variablelist>
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Institution</guimenu>
+ <guimenuitem>Add new institution...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Add a new institution.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Institution</guimenu>
+ <guimenuitem>Edit institution...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Edit an institution.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Institution</guimenu>
+ <guimenuitem>Delete institution...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Delete an institution.</action></para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect2>
+
+<sect2 id="reference.menus.account">
+<title>Account Menu</title>
+
+<variablelist>
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Account</guimenu>
+ <guimenuitem>New account...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Adds a new account.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Account</guimenu><guimenuitem>Edit account...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Edits an account.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Account</guimenu><guimenuitem>Delete account...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Deletes an account.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Account</guimenu><guimenuitem>Open ledger</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Displays the ledger view of an account.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <shortcut>
+ <keycombo>
+ <keycap>Ctrl</keycap><keycap>Shift</keycap><keycap>r</keycap>
+ </keycombo>
+ </shortcut>
+ <guimenu>Account</guimenu><guimenuitem>Reconcile...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Reconciles an account through the reconciliation
+ wizard.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Account</guimenu><guimenuitem>Postpone</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Postpones reconciliation of an account.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Account</guimenu><guimenuitem>Finish</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Finishes reconciliation of an account.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Account</guimenu><guimenuitem>Transaction report</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Opens a transaction report of an account.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Account</guimenu><guimenuitem>Close account</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Closes an account.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Account</guimenu><guimenuitem>Reopen account</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Reopens an account, if closed.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Account</guimenu><guimenuitem>Unmap account</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Unmaps an online account.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Account</guimenu><guimenuitem>Map to online account</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Maps an account to an online account.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Account</guimenu><guimenuitem>Update account...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Imports transactions from online banking for an
+ account</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Account</guimenu>
+ <guimenuitem>Update all accounts...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Import transactions from online banking for all
+ accounts.</action></para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect2>
+
+<sect2 id="reference.menus.category">
+<title>Category Menu</title>
+
+<variablelist>
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Category</guimenu><guimenuitem>New category...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Adds a new category.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Category</guimenu><guimenuitem>Edit category...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Edits a category.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Category</guimenu><guimenuitem>Delete category...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Deletes a category.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Category</guimenu><guimenuitem>Open ledger</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Displays the ledger view of a category.</action></para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect2>
+
+<sect2 id="reference.menus.transaction">
+<title>Transaction Menu</title>
+
+<variablelist>
+ <varlistentry>
+ <term><menuchoice>
+ <shortcut>
+ <keycombo><keycap>Ctrl</keycap><keycap>Insert</keycap></keycombo>
+ </shortcut>
+ <guimenu>Transaction</guimenu><guimenuitem>New</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Adds a new transaction.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Transaction</guimenu><guimenuitem>Edit</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Edits a transaction.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Transaction</guimenu><guimenuitem>Edit splits</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Edits the splits of a transaction.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Transaction</guimenu><guimenuitem>Delete</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Deletes a transaction.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Transaction</guimenu><guimenuitem>Duplicate</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Duplicates a transaction.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Transaction</guimenu>
+ <guimenuitem>Mark transaction as ...</guimenuitem>
+ <guimenuitem>Not Reconciled</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Changes a transaction to Not Reconciled
+ status.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <shortcut>
+ <keycombo>
+ <keycap>Ctrl</keycap><keycap>Shift</keycap><keycap>Space</keycap>
+ </keycombo>
+ </shortcut>
+ <guimenu>Transaction</guimenu>
+ <guimenuitem>Mark transaction as ...</guimenuitem>
+ <guimenuitem>Cleared</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Changes a transaction to Cleared status.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <shortcut>
+ <keycombo>
+ <keycap>Alt</keycap><keycap>Ctrl</keycap><keycap>Space</keycap>
+ </keycombo>
+ </shortcut>
+ <guimenu>Transaction</guimenu>
+ <guimenuitem>Mark transaction as ...</guimenuitem>
+ <guimenuitem>Reconciled</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Changes a transaction to Reconciled status.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Transaction</guimenu><guimenuitem>Go to account</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Displays the other account of a transaction.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Transaction</guimenu><guimenuitem>Go to payee</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Displays the Payee view and focuses on the payee of the
+ selected transaction.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Transaction</guimenu>
+ <guimenuitem>Create scheduled transaction...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Creates a new scheduled transaction.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Transaction</guimenu><guimenuitem>Match</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Matches imported transactions.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Transaction</guimenu><guimenuitem>Unatch</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para>
+ <action>Unmatches a transactions that &kappname; has proposed
+ as a match of imported transactions.</action> Note that this
+ menu choice is only present if a matched transaction exists.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Transaction</guimenu><guimenuitem>Accept</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Accepts a proposed merge of imported
+ transactions.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <shortcut>
+ <keycombo><keycap>Ctrl</keycap><keycap>a</keycap></keycombo>
+ </shortcut>
+ <guimenu>Transaction</guimenu><guimenuitem>Select all</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Selects all transactions on the register.</action></para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect2>
+
+<sect2 id="reference.menus.tools">
+<title>Tools Menu</title>
+
+<variablelist>
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Tools</guimenu><guimenuitem>QIF Profile Editor...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Modifies the QIF profile used to import or export QIF
+ files.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Tools</guimenu><guimenuitem>Securities...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Lists all the current securities, with the ability to edit
+ each one.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Tools</guimenu><guimenuitem>Currencies...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Lists the currencies known to &kappname;.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Tools</guimenu><guimenuitem>Prices...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Lists stock and currency prices.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Tools</guimenu>
+ <guimenuitem>Update Stock and Currency prices...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Updates stock and currency prices from online sources using
+ the <link linkend="details.investments.onlinequotes">Online Price
+ Quotes</link> feature.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Tools</guimenu><guimenuitem>Consistency Check</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Runs a check on your file and tries to fix any problem it
+ finds, if possible.</action></para>
+ <para>Make a backup of your file before running this option.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Tools</guimenu><guimenuitem>Performance-Check</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Runs a performance test on your file and displays the
+ results.</action></para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect2>
+
+<sect2 id="reference.menus.settings">
+<title>Settings Menu</title>
+
+<variablelist>
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Settings</guimenu><guimenuitem>Hide/Show Toolbar</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Toggles the toolbar on or off.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Settings</guimenu><guimenuitem>Hide/Show Statusbar</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Toggles the bottom status bar on or off.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Settings</guimenu><guimenuitem>Enable all messages</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Re-enables any messages you may have turned off by checking
+ <guimenuitem>Don't tell me about this again</guimenuitem> in a dialog
+ box.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Settings</guimenu>
+ <guimenuitem>&kde; Language Settings...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Allows to change many locale based settings.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Settings</guimenu>
+ <guimenuitem>Configure Shortcuts...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Configures custom shortcuts.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Settings</guimenu>
+ <guimenuitem>Configure Toolbars...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Customizes &kappname; toolbars.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Settings</guimenu>
+ <guimenuitem>Configure &kappname;...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Configures <link linkend="details.settings">&kappname;
+ settings</link>.</action></para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect2>
+
+<sect2 id="reference.menus.help">
+<title>Help Menu</title>
+
+<variablelist>
+ <varlistentry>
+ <term><menuchoice>
+ <shortcut><keycombo><keycap>F1</keycap></keycombo></shortcut>
+ <guimenu>Help</guimenu><guimenuitem>&kappname; Handbook</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Accesses the &kappname; Handbook.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <shortcut>
+ <keycombo><keycap>Shift</keycap><keycap>F1</keycap></keycombo>
+ </shortcut>
+ <guimenu>Help</guimenu><guimenuitem>What's This?</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Activates the "What's This?" cursor for pop-up
+ help.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Help</guimenu><guimenuitem>Show tip of the day</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Shows tip of the day.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Help</guimenu><guimenuitem>Report Bug...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Reports a found bug. Please refer to the section on <link
+ linkend="firsttime.bugs.quality">Writing High Quality Bug Reports</link>
+ for guidance on how to write the most useful bug
+ reports.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Help</guimenu>
+ <guimenuitem>Switch application language...</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Selects the language used in &kappname;</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Help</guimenu><guimenuitem>About &kappname;</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Shows About &kappname; information, including the version
+ number and the credits.</action></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><menuchoice>
+ <guimenu>Help</guimenu><guimenuitem>About &kde;</guimenuitem>
+ </menuchoice></term>
+ <listitem>
+ <para><action>Shows &kde; information.</action></para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</sect2>
+</sect1>
+
+&details-widgets;
+
+</chapter>
diff --git a/doc/en/report_configuration-reporttab.png b/doc/en/report_configuration-reporttab.png
new file mode 100644
index 0000000..5fe4711
--- /dev/null
+++ b/doc/en/report_configuration-reporttab.png
Binary files differ
diff --git a/doc/en/report_configuration-rowscolumns.png b/doc/en/report_configuration-rowscolumns.png
new file mode 100644
index 0000000..71aadfa
--- /dev/null
+++ b/doc/en/report_configuration-rowscolumns.png
Binary files differ
diff --git a/doc/en/reports_view-all.png b/doc/en/reports_view-all.png
new file mode 100644
index 0000000..85733c1
--- /dev/null
+++ b/doc/en/reports_view-all.png
Binary files differ
diff --git a/doc/en/reports_view.png b/doc/en/reports_view.png
new file mode 100644
index 0000000..b9e7ca7
--- /dev/null
+++ b/doc/en/reports_view.png
Binary files differ
diff --git a/doc/en/schedcaltypes.png b/doc/en/schedcaltypes.png
new file mode 100644
index 0000000..ae04a07
--- /dev/null
+++ b/doc/en/schedcaltypes.png
Binary files differ
diff --git a/doc/en/schedmonthday.png b/doc/en/schedmonthday.png
new file mode 100644
index 0000000..3700a04
--- /dev/null
+++ b/doc/en/schedmonthday.png
Binary files differ
diff --git a/doc/en/schedpopup.png b/doc/en/schedpopup.png
new file mode 100644
index 0000000..9b6c4f5
--- /dev/null
+++ b/doc/en/schedpopup.png
Binary files differ
diff --git a/doc/en/schedule_view.png b/doc/en/schedule_view.png
new file mode 100644
index 0000000..91e7021
--- /dev/null
+++ b/doc/en/schedule_view.png
Binary files differ
diff --git a/doc/en/scheduleview.png b/doc/en/scheduleview.png
new file mode 100644
index 0000000..f59506b
--- /dev/null
+++ b/doc/en/scheduleview.png
Binary files differ
diff --git a/doc/en/select_currency.png b/doc/en/select_currency.png
new file mode 100644
index 0000000..801da8a
--- /dev/null
+++ b/doc/en/select_currency.png
Binary files differ
diff --git a/doc/en/select_database.png b/doc/en/select_database.png
new file mode 100644
index 0000000..5499a72
--- /dev/null
+++ b/doc/en/select_database.png
Binary files differ
diff --git a/doc/en/split_transaction.png b/doc/en/split_transaction.png
new file mode 100644
index 0000000..b8b0c4f
--- /dev/null
+++ b/doc/en/split_transaction.png
Binary files differ
diff --git a/doc/en/tipofday.png b/doc/en/tipofday.png
new file mode 100644
index 0000000..a23609b
--- /dev/null
+++ b/doc/en/tipofday.png
Binary files differ
diff --git a/doc/en/transaction_find.png b/doc/en/transaction_find.png
new file mode 100644
index 0000000..51fb7f0
--- /dev/null
+++ b/doc/en/transaction_find.png
Binary files differ
diff --git a/doc/en/transactionform-off.png b/doc/en/transactionform-off.png
new file mode 100644
index 0000000..eea530c
--- /dev/null
+++ b/doc/en/transactionform-off.png
Binary files differ
diff --git a/doc/en/transactionform.png b/doc/en/transactionform.png
new file mode 100644
index 0000000..47835b3
--- /dev/null
+++ b/doc/en/transactionform.png
Binary files differ
diff --git a/doc/en/translist.png b/doc/en/translist.png
new file mode 100644
index 0000000..e8fe34c
--- /dev/null
+++ b/doc/en/translist.png
Binary files differ
diff --git a/doc/en/value_widget.png b/doc/en/value_widget.png
new file mode 100644
index 0000000..d1edb19
--- /dev/null
+++ b/doc/en/value_widget.png
Binary files differ
diff --git a/doc/en/views-accounts.docbook b/doc/en/views-accounts.docbook
new file mode 100644
index 0000000..aceb92e
--- /dev/null
+++ b/doc/en/views-accounts.docbook
@@ -0,0 +1,6 @@
+<chapter id="view.accounts">
+<title>Accounts View - Under development - MTE</title>
+<para>
+</para>
+</chapter>
+
diff --git a/doc/en/views-categories.docbook b/doc/en/views-categories.docbook
new file mode 100644
index 0000000..0005d72
--- /dev/null
+++ b/doc/en/views-categories.docbook
@@ -0,0 +1,6 @@
+<chapter id="view.categories">
+<title>Categories View - Under development - MTE</title>
+<para>
+</para>
+</chapter>
+
diff --git a/doc/en/views-home.docbook b/doc/en/views-home.docbook
new file mode 100644
index 0000000..a2976e6
--- /dev/null
+++ b/doc/en/views-home.docbook
@@ -0,0 +1,6 @@
+<chapter id="views.home">
+<title>Home View - Under development - MTE</title>
+<para>
+</para>
+</chapter>
+
diff --git a/doc/en/views-institutions.docbook b/doc/en/views-institutions.docbook
new file mode 100644
index 0000000..796548c
--- /dev/null
+++ b/doc/en/views-institutions.docbook
@@ -0,0 +1,5 @@
+<chapter id="views.institutions">
+<title>Institutions View - Under development - UNASSIGNED</title>
+<para>
+</para>
+</chapter>
diff --git a/doc/en/views-investments.docbook b/doc/en/views-investments.docbook
new file mode 100644
index 0000000..176cc72
--- /dev/null
+++ b/doc/en/views-investments.docbook
@@ -0,0 +1,5 @@
+<chapter id="views.investments">
+<title>Investment View - Under development - UNASSIGNED</title>
+<para>
+</para>
+</chapter>
diff --git a/doc/en/views-ledgers.docbook b/doc/en/views-ledgers.docbook
new file mode 100644
index 0000000..5bad0bd
--- /dev/null
+++ b/doc/en/views-ledgers.docbook
@@ -0,0 +1,6 @@
+<chapter id="views.ledger">
+<title>Ledger Views - Under development - Roger Lum</title>
+<para>
+</para>
+</chapter>
+
diff --git a/doc/en/views-outbox.docbook b/doc/en/views-outbox.docbook
new file mode 100644
index 0000000..2a68383
--- /dev/null
+++ b/doc/en/views-outbox.docbook
@@ -0,0 +1,7 @@
+<!-- is not port of 0.8
+<chapter id="views.outbox">
+<title>Outbox - Under development - UNASSIGNED</title>
+<para>
+</para>
+</chapter>
+-->
diff --git a/doc/en/views-payees.docbook b/doc/en/views-payees.docbook
new file mode 100644
index 0000000..814d3fc
--- /dev/null
+++ b/doc/en/views-payees.docbook
@@ -0,0 +1,6 @@
+<chapter id="views.payees">
+<title>Payees View - Under development - Roger Lum</title>
+<para>
+</para>
+</chapter>
+
diff --git a/doc/en/views-reports.docbook b/doc/en/views-reports.docbook
new file mode 100644
index 0000000..9f4da6b
--- /dev/null
+++ b/doc/en/views-reports.docbook
@@ -0,0 +1,5 @@
+<chapter id="views.reports">
+<title>Reports View - Under development - Marce Villarino</title>
+<para>
+</para>
+</chapter> \ No newline at end of file
diff --git a/doc/en/views-schedules.docbook b/doc/en/views-schedules.docbook
new file mode 100644
index 0000000..942f13c
--- /dev/null
+++ b/doc/en/views-schedules.docbook
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<chapter id="views.schedule">
+<title>Schedule View - Under development - MTE</title>
+
+<sect1 id="views.schedule.overview"><title>Overview</title>
+<para>
+ <screenshot>
+ <screeninfo>Schedule View</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="scheduleview.png" format="PNG" />
+ </imageobject>
+ <textobject>
+ <phrase>Schedule View</phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+</para>
+<para>
+ Some intro to the view
+</para>
+
+<sect2 id="views.schedule.overview.creating"><title>The New Schedule button</title>
+<para>
+</para>
+</sect2>
+
+<sect2 id="views.schedule.overview.filter"><title>The Account Filter</title>
+<para>
+</para>
+</sect2>
+
+<sect2 id="views.schedule.overview.views"><title>The List View and the Calendar View</title>
+<para>
+</para>
+</sect2>
+</sect1>
+
+
+<sect1 id="views.schedule.listtab"><title>The List View</title>
+<para>
+</para>
+
+<sect2 id="views.schedule.listtab.groups"><title>The Schedule groups</title>
+<para>
+</para>
+</sect2>
+
+<sect2 id="views.schedule.listtab.columns"><title>The list columns</title>
+<para>
+</para>
+</sect2>
+</sect1>
+
+
+<sect1 id="views.schedule.calendartab"><title>The Calendar Tab</title>
+<para>
+</para>
+
+<sect2 id="views.schedule.calendartab.nav"><title>Date Navigation</title>
+<para>
+</para>
+</sect2>
+
+<sect2 id="views.schedule.calendartab.type"><title>Calendar types</title>
+<para>
+</para>
+</sect2>
+
+<sect2 id="views.schedule.calendartab.schedule"><title>Schedule types</title>
+<para>
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="views.schedule.create"><title>Creating schedules</title>
+<para>
+</para>
+</sect1>
+
+<sect1 id="views.schedule.edit"><title>Editing schedules</title>
+<para>
+</para>
+</sect1>
+
+<sect1 id="views.schedule.enter"><title>Entering schedules</title>
+<para>
+</para>
+
+<sect2 id="views.schedule.manualenter"><title>Manually entering schedules</title>
+<para>
+</para>
+</sect2>
+
+<sect2 id="views.schedule.autoenter"><title>Letting &kappname; enter the schedules</title>
+<para>
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="views.schedule.delete"><title>Deleting schedules</title>
+<para>
+</para>
+</sect1>
+</chapter>
diff --git a/doc/en/whatsnew.docbook b/doc/en/whatsnew.docbook
new file mode 100644
index 0000000..71093e1
--- /dev/null
+++ b/doc/en/whatsnew.docbook
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="whatsnew">
+<title>What's new in this release</title>
+
+<para>
+ We have been working hard to make this release better and easier to use in
+ every way. We have added a lot of new features to this version and have also
+ made quite a few improvements. We are confident you will like what you see.
+</para>
+
+<para>
+ Here are some of the new features found in this release:
+</para>
+
+<itemizedlist>
+ <listitem>
+ <para>
+ <link linkend="firsttime.mainwindow">An improved look and feel - including
+ a new icon set</link>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <link linkend="details.reports">Reports</link>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <link linkend="details.reports.charts">Charts</link>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <link linkend="details.forecast">Forecast</link>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <link linkend="details.budgets">Budgets</link>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <link linkend="details.schedules.intro">More flexible schedules</link>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <link linkend="details.database.usage">Database support</link>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <link linkend="details.impexp">Improved import features</link>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <link linkend="details.formats.encrypted">Improved PGP support</link>
+ </para>
+ </listitem>
+</itemizedlist>
+
+</chapter>
+
diff --git a/inst-apps b/inst-apps
new file mode 100644
index 0000000..62963a2
--- /dev/null
+++ b/inst-apps
@@ -0,0 +1,7 @@
+libkgpgfile
+libkdchart
+kmymoney2
+po
+developer-doc
+doc
+contrib
diff --git a/kdecompat.h b/kdecompat.h
new file mode 100644
index 0000000..d7c1b0e
--- /dev/null
+++ b/kdecompat.h
@@ -0,0 +1,38 @@
+/***************************************************************************
+ kdecompat.h
+ -------------------
+ copyright : (C) 2004 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef _KDECOMPAT_H
+#define _KDECOMPAT_H
+
+#include <kdeversion.h>
+
+#ifndef KDE_MAKE_VERSION
+#define KDE_MAKE_VERSION(a,b,c) (((a)<<16) | ((b)<<8) | (c))
+#endif
+
+#ifndef KDE_IS_VERSION
+#define KDE_IS_VERSION(a,b,c) (KDE_VERSION >= KDE_MAKE_VERSION(a,b,c))
+#endif
+
+#ifndef QT_IS_VERSION
+#define QT_IS_VERSION(a,b,c) (QT_VERSION >= KDE_MAKE_VERSION(a,b,c))
+#endif
+
+#if KDE_VERSION < KDE_MAKE_VERSION(3,2,0)
+#define KDE_DEPRECATED
+#endif
+
+#endif // _KDECOMPAT_H
diff --git a/kmymoney2/Makefile.am b/kmymoney2/Makefile.am
new file mode 100644
index 0000000..ca20182
--- /dev/null
+++ b/kmymoney2/Makefile.am
@@ -0,0 +1,171 @@
+KDE_OPTIONS = noautodist
+
+bin_PROGRAMS = kmymoney2
+
+kmymoney2_SOURCES = kmymoneyutils.cpp kstartuplogo.cpp kmymoney2.cpp main.cpp kmymoney2.stub kmymoney2.skel kmymoneysettings.kcfgc kmymoneyglobalsettings.cpp
+
+kmymoney2_LDADD = $(top_builddir)/kmymoney2/views/libviews.a $(top_builddir)/kmymoney2/reports/libreports.a $(top_builddir)/kmymoney2/wizards/newuserwizard/libnewuserwizard.a $(top_builddir)/kmymoney2/wizards/newaccountwizard/libnewaccountwizard.a $(top_builddir)/kmymoney2/wizards/wizardpages/libwizardpages.a $(top_builddir)/kmymoney2/dialogs/libdialogs.a $(top_builddir)/kmymoney2/dialogs/settings/libsettings.a $(top_builddir)/kmymoney2/widgets/libwidgets.a $(top_builddir)/kmymoney2/converter/libconverter.a $(top_builddir)/kmymoney2/mymoney/storage/libstorage.a $(top_builddir)/kmymoney2/mymoney/libkmm_mymoney.la $(top_builddir)/libkgpgfile/libkgpgfile.la $(top_builddir)/kmymoney2/plugins/interfaces/libinterfaces.a $(top_builddir)/kmymoney2/plugins/libkmm_plugin.la $(top_builddir)/libkdchart/libkmm_kdchart.la dialogs/libdialogs.a $(LIB_KABC) $(LIB_KHTML) $(LIB_KDEUI) $(LIB_KDECORE) $(LIB_QT)
+
+SUBDIRS = mymoney widgets dialogs wizards views converter pics icons html templates plugins reports misc
+
+EXTRA_DIST = kmymoney2ui.rc kmymoney2.desktop lo16-app-kmymoney2.png lo32-app-kmymoney2.png kmymoney_wizard.png mimetype_kmy_16x16.png mimetype_kmy_32x32.png mimetype_kmy_48x48.png mimetype_kmy_64x64.png mimetype_kmy_128x128.png x-kmymoney2.desktop hi16-app-kmymoney2.png hi32-app-kmymoney2.png hi48-app-kmymoney2.png hi64-app-kmymoney2.png hi128-app-kmymoney2.png tips kmymoney2.kcfg kmymoneysettings.kcfgc
+
+# make sure, automatically generated files exist
+BUILT_SOURCES = kmymoneysettings.h $(top_builddir)/kmymoney/kmymoneysettings.h
+
+# we have to make sure, that the symbolic link exists
+$(top_builddir)/kmymoney/kmymoneysettings.h: kmymoneysettings.h
+ if test -h $@; then rm $@; fi
+ ln -s `pwd`/kmymoneysettings.h $@
+
+kde_kcfg_DATA = kmymoney2.kcfg
+
+instdir=$(includedir)/kmymoney
+inst_HEADERS = export.h kmymoneyutils.h kmymoneyglobalsettings.h
+noinst_HEADERS = kmymoney2.h kstartuplogo.h
+
+install-data-local:
+ $(mkinstalldirs) $(DESTDIR)$(kde_datadir)/kmymoney2/
+ $(INSTALL_DATA) $(srcdir)/kmymoney2ui.rc $(DESTDIR)$(kde_datadir)/kmymoney2/kmymoney2ui.rc
+ $(mkinstalldirs) $(DESTDIR)$(xdg_appsdir)
+ $(INSTALL_DATA) $(srcdir)/kmymoney2.desktop $(DESTDIR)$(xdg_appsdir)/kmymoney2.desktop
+ $(mkinstalldirs) $(DESTDIR)$(kde_icondir)/locolor/16x16/apps/
+ $(INSTALL_DATA) $(srcdir)/lo16-app-kmymoney2.png $(DESTDIR)$(kde_icondir)/locolor/16x16/apps/kmymoney2.png
+ $(mkinstalldirs) $(DESTDIR)$(kde_icondir)/locolor/32x32/apps/
+ $(INSTALL_DATA) $(srcdir)/lo32-app-kmymoney2.png $(DESTDIR)$(kde_icondir)/locolor/32x32/apps/kmymoney2.png
+ $(mkinstalldirs) $(DESTDIR)$(kde_icondir)/hicolor/16x16/mimetypes/
+ $(INSTALL_DATA) $(srcdir)/mimetype_kmy_16x16.png $(DESTDIR)$(kde_icondir)/hicolor/16x16/mimetypes/kmy.png
+ $(mkinstalldirs) $(DESTDIR)$(kde_icondir)/hicolor/32x32/mimetypes/
+ $(INSTALL_DATA) $(srcdir)/mimetype_kmy_32x32.png $(DESTDIR)$(kde_icondir)/hicolor/32x32/mimetypes/kmy.png
+ $(mkinstalldirs) $(DESTDIR)$(kde_icondir)/hicolor/48x48/mimetypes/
+ $(INSTALL_DATA) $(srcdir)/mimetype_kmy_48x48.png $(DESTDIR)$(kde_icondir)/hicolor/48x48/mimetypes/kmy.png
+ $(mkinstalldirs) $(DESTDIR)$(kde_icondir)/hicolor/64x64/mimetypes/
+ $(INSTALL_DATA) $(srcdir)/mimetype_kmy_64x64.png $(DESTDIR)$(kde_icondir)/hicolor/64x64/mimetypes/kmy.png
+ $(mkinstalldirs) $(DESTDIR)$(kde_icondir)/hicolor/128x128/mimetypes/
+ $(INSTALL_DATA) $(srcdir)/mimetype_kmy_128x128.png $(DESTDIR)$(kde_icondir)/hicolor/128x128/mimetypes/kmy.png
+ $(mkinstalldirs) $(kde_mimedir)/application/
+ $(INSTALL_DATA) $(srcdir)/x-kmymoney2.desktop $(kde_mimedir)/application/x-kmymoney2.desktop
+ $(mkinstalldirs) $(DESTDIR)$(kde_icondir)/hicolor/16x16/apps/
+ $(INSTALL_DATA) $(srcdir)/hi16-app-kmymoney2.png $(DESTDIR)$(kde_icondir)/hicolor/16x16/apps/kmymoney2.png
+ $(mkinstalldirs) $(DESTDIR)$(kde_icondir)/hicolor/32x32/apps/
+ $(INSTALL_DATA) $(srcdir)/hi32-app-kmymoney2.png $(DESTDIR)$(kde_icondir)/hicolor/32x32/apps/kmymoney2.png
+ $(mkinstalldirs) $(DESTDIR)$(kde_icondir)/hicolor/48x48/apps/
+ $(INSTALL_DATA) $(srcdir)/hi48-app-kmymoney2.png $(DESTDIR)$(kde_icondir)/hicolor/48x48/apps/kmymoney2.png
+ $(mkinstalldirs) $(DESTDIR)$(kde_icondir)/hicolor/64x64/apps/
+ $(INSTALL_DATA) $(srcdir)/hi64-app-kmymoney2.png $(DESTDIR)$(kde_icondir)/hicolor/64x64/apps/kmymoney2.png
+ $(mkinstalldirs) $(DESTDIR)$(kde_icondir)/hicolor/128x128/apps/
+ $(INSTALL_DATA) $(srcdir)/hi128-app-kmymoney2.png $(DESTDIR)$(kde_icondir)/hicolor/128x128/apps/kmymoney2.png
+ $(mkinstalldirs) $(DESTDIR)$(kde_datadir)/kmymoney2/
+ $(INSTALL_DATA) $(srcdir)/tips $(DESTDIR)$(kde_datadir)/kmymoney2/tips
+
+
+uninstall-local:
+ -rm -f $(DESTDIR)$(kde_datadir)/kmymoney2/kmymoney2ui.rc
+ -rm -f $(DESTDIR)$(xdg_appsdir)/kmymoney2.desktop
+ -rm -f $(DESTDIR)$(kde_icondir)/locolor/16x16/apps/kmymoney2.png
+ -rm -f $(DESTDIR)$(kde_icondir)/locolor/32x32/apps/kmymoney2.png
+ -rm -f $(DESTDIR)$(kde_icondir)/hicolor/16x16/mimetypes/kmy.png
+ -rm -f $(DESTDIR)$(kde_icondir)/hicolor/32x32/mimetypes/kmy.png
+ -rm -f $(DESTDIR)$(kde_icondir)/hicolor/48x48/mimetypes/kmy.png
+ -rm -f $(DESTDIR)$(kde_icondir)/hicolor/64x64/mimetypes/kmy.png
+ -rm -f $(DESTDIR)$(kde_icondir)/hicolor/128x128/mimetypes/kmy.png
+ -rm -f $(DESTDIR)$(kde_mimedir)/application/x-kmymoney2.desktop
+ -rm -f $(DESTDIR)$(kde_icondir)/hicolor/16x16/apps/kmymoney2.png
+ -rm -f $(DESTDIR)$(kde_icondir)/hicolor/32x32/apps/kmymoney2.png
+ -rm -f $(DESTDIR)$(kde_icondir)/hicolor/48x48/apps/kmymoney2.png
+ -rm -f $(DESTDIR)$(kde_icondir)/hicolor/64x64/apps/kmymoney2.png
+ -rm -f $(DESTDIR)$(kde_icondir)/hicolor/128x128/apps/kmymoney2.png
+ -rm -f $(DESTDIR)$(kde_datadir)/kmymoney2/tips
+
+####### kdevelop will overwrite this part!!! (end)############
+# this 10 paths are KDE specific. Use them:
+# kde_htmldir Where your docs should go to. (contains lang subdirs)
+# kde_appsdir Where your application file (.kdelnk) should go to.
+# kde_icondir Where your icon should go to.
+# kde_minidir Where your mini icon should go to.
+# kde_datadir Where you install application data. (Use a subdir)
+# kde_locale Where translation files should go to.(contains lang subdirs)
+# kde_cgidir Where cgi-bin executables should go to.
+# kde_confdir Where config files should go to.
+# kde_mimedir Where mimetypes should go to.
+# kde_toolbardir Where general toolbar icons should go to.
+# kde_wallpaperdir Where general wallpapers should go to.
+
+DISTCLEANFILES=kmymoney2 *.html *.csv old.asc stripped.txt kmm_test_driver
+
+# set the include path for X, qt and KDE
+INCLUDES= $(all_includes) -I$(top_srcdir) -I. -I$(top_builddir)/kmymoney2/dialogs -I$(top_srcdir)/libkdchart
+
+METASOURCES = AUTO
+
+# the library search path.
+kmymoney2_LDFLAGS = $(all_libraries) $(kde_RPATH) -export-dynamic
+
+# Uncomment the following two lines if you add a ui.rc file for your application to make use of
+# KDE
+rcdir = $(kde_datadir)/kmymoney2
+rc_DATA = kmymoney2ui.rc
+
+#WARNING: if you use a ui.rc file above, use:
+
+# messages: rc.cpp
+
+# instead of
+
+# messages:
+
+# Remove *.moc.* files from the list of files searched for messages.
+# Don't know, if that has any negative effect, but it avoids to include
+# automatically generated names which usually not need to be translated
+# from clobbering the pot file. (ipwizard@user.sourceforge.net, 07/16/2003)
+messages: rc.cpp
+ if test -f tips; then \
+ $(PREPARETIPS) > _tips.cpp; \
+ fi;
+ LIST=`find . -name \*.h -o -name \*.hh -o -name \*.H -o -name \*.hxx -o \
+ -name \*.hpp -o -name \*.cpp -o -name \*.cc -o -name \*.cxx -o -name \*.ecpp -o \
+ -name \*.C | grep -v -E \*\.moc\.\*`; \
+ if test -n "$$LIST"; then \
+ $(XGETTEXT) $$LIST -o $(podir)/kmymoney2.pot; \
+ fi
+ if test -f _tips.cpp; then \
+ rm _tips.cpp; \
+ fi
+
+#
+# since some people might think, the application is called kmymoney, we
+# create a link to kmymoney2 after overall installation
+#
+install-exec-hook:
+ @$(NORMAL_INSTALL)
+ @list='kmymoney2'; for p in $$list; do \
+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ if test -f $$p \
+ || test -f $$p1 \
+ ; then \
+ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo "Creating symbolic link from kmymoney -> ./kmymoney2"; \
+ rm -f $(DESTDIR)$(bindir)/kmymoney; \
+ cd $(DESTDIR)$(bindir); \
+ ln -s ./$$f kmymoney; \
+ else :; fi; \
+ done
+
+uninstall-hook:
+ -rm -f $(DESTDIR)$(bindir)/kmymoney
+
+dist-hook:
+ -rm -rf $(distdir)/kmymoneysettings.cpp
+
+if CPPUNIT
+TESTS = kmymoneytest
+
+check_PROGRAMS = kmymoneytest
+
+kmymoneytest_SOURCES = kmymoneytest.cpp kmymoneyutils.cpp kmymoneyglobalsettings.cpp
+kmymoneytest_LDADD = ./mymoney/storage/libstoragetest.a ./mymoney/libmymoneytest.a ./converter/libconvertertest.a ./reports/libreportstest.a $(kmymoney2_LDADD) kmymoneysettings.$(OBJEXT)
+
+# the library search path.
+kmymoneytest_LDFLAGS = $(all_libraries) $(kde_RPATH) $(CPPUNIT_LIBS)
+endif
+
diff --git a/kmymoney2/converter/Makefile.am b/kmymoney2/converter/Makefile.am
new file mode 100644
index 0000000..b54449e
--- /dev/null
+++ b/kmymoney2/converter/Makefile.am
@@ -0,0 +1,24 @@
+KDE_OPTIONS = noautodist
+
+INCLUDES = $(all_includes) -I$(top_srcdir) -I. -I$(top_srcdir)/kmymoney2 -I$(top_builddir)/kmymoney2
+
+instdir=$(includedir)/kmymoney
+
+noinst_LIBRARIES = libconverter.a
+libconverter_a_METASOURCES = AUTO
+
+libconverter_a_SOURCES = mymoneyqifreader.cpp mymoneyqifwriter.cpp mymoneyqifprofile.cpp mymoneytemplate.cpp mymoneystatementreader.cpp webpricequote.cpp mymoneygncreader.cpp
+
+EXTRA_DIST =
+
+inst_HEADERS = mymoneytemplate.h
+
+noinst_HEADERS = imymoneyreader.h mymoneyqifprofile.h mymoneyqifreader.h mymoneyqifwriter.h mymoneystatementreader.h webpricequote.h mymoneygncreader.h convertertest.h
+
+if CPPUNIT
+check_LIBRARIES = libconvertertest.a
+
+libconvertertest_a_SOURCES = convertertest.cpp
+endif
+
+
diff --git a/kmymoney2/converter/convertertest.cpp b/kmymoney2/converter/convertertest.cpp
new file mode 100644
index 0000000..aef63d9
--- /dev/null
+++ b/kmymoney2/converter/convertertest.cpp
@@ -0,0 +1,211 @@
+/***************************************************************************
+ convertertest.cpp
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ Ace Jones <ace.j@hotpop.com>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <qvaluelist.h>
+#include <qvaluevector.h>
+#include <qdom.h>
+#include <qfile.h>
+
+#include <kdebug.h>
+#include <kdeversion.h>
+#include <kglobal.h>
+#include <kglobalsettings.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+
+#include "convertertest.h"
+
+// uses helper functions from reports tests
+#include "../reports/reportstestcommon.h"
+using namespace test;
+
+#include <kmymoney/mymoneysecurity.h>
+#include <kmymoney/mymoneyprice.h>
+#include <kmymoney/mymoneyreport.h>
+#include <kmymoney/mymoneystatement.h>
+#include "../mymoney/storage/mymoneystoragexml.h"
+#include "../mymoney/storage/mymoneystoragedump.h"
+
+#define private public
+#include "../converter/webpricequote.h"
+#undef private
+
+ConverterTest::ConverterTest()
+{
+}
+
+using namespace convertertest;
+
+void ConverterTest::setUp () {
+
+ storage = new MyMoneySeqAccessMgr;
+ file = MyMoneyFile::instance();
+ file->attachStorage(storage);
+
+ MyMoneyFileTransaction ft;
+
+ file->addCurrency(MyMoneySecurity("CAD", "Canadian Dollar", "C$"));
+ file->addCurrency(MyMoneySecurity("USD", "US Dollar", "$"));
+ file->addCurrency(MyMoneySecurity("JPY", "Japanese Yen", QChar(0x00A5), 100, 1));
+ file->addCurrency(MyMoneySecurity("GBP", "British Pound", "#"));
+ file->setBaseCurrency(file->currency("USD"));
+
+ MyMoneyPayee payeeTest("Test Payee");
+ file->addPayee(payeeTest);
+ MyMoneyPayee payeeTest2("Thomas Baumgart");
+ file->addPayee(payeeTest2);
+
+ acAsset = (MyMoneyFile::instance()->asset().id());
+ acLiability = (MyMoneyFile::instance()->liability().id());
+ acExpense = (MyMoneyFile::instance()->expense().id());
+ acIncome = (MyMoneyFile::instance()->income().id());
+ acChecking = makeAccount("Checking Account",MyMoneyAccount::Checkings,moConverterCheckingOpen,QDate(2004,5,15),acAsset);
+ acCredit = makeAccount("Credit Card",MyMoneyAccount::CreditCard,moConverterCreditOpen,QDate(2004,7,15),acLiability);
+ acSolo = makeAccount("Solo",MyMoneyAccount::Expense,0,QDate(2004,1,11),acExpense);
+ acParent = makeAccount("Parent",MyMoneyAccount::Expense,0,QDate(2004,1,11),acExpense);
+ acChild = makeAccount("Child",MyMoneyAccount::Expense,0,QDate(2004,2,11),acParent);
+ acForeign = makeAccount("Foreign",MyMoneyAccount::Expense,0,QDate(2004,1,11),acExpense);
+
+ MyMoneyInstitution i("Bank of the World","","","","","","");
+ file->addInstitution(i);
+ inBank = i.id();
+ ft.commit();
+}
+
+void ConverterTest::tearDown ()
+{
+ file->detachStorage(storage);
+ delete storage;
+}
+
+void ConverterTest::testWebQuotes()
+{
+#ifdef PERFORM_ONLINE_TESTS
+ try
+ {
+ WebPriceQuote q;
+ QuoteReceiver qr(&q);
+
+ q.launch("DIS");
+
+// kdDebug(2) << "ConverterTest::testWebQuotes(): quote for " << q.m_symbol << " on " << qr.m_date.toString() << " is " << qr.m_price.toString() << " errors(" << qr.m_errors.count() << "): " << qr.m_errors.join(" /// ") << endl;
+
+ // No errors allowed
+ CPPUNIT_ASSERT(qr.m_errors.count() == 0);
+
+ // Quote date should be within the last week, or something bad is going on.
+ CPPUNIT_ASSERT(qr.m_date <= QDate::currentDate());
+ CPPUNIT_ASSERT(qr.m_date >= QDate::currentDate().addDays(-7));
+
+ // Quote value should at least be positive
+ CPPUNIT_ASSERT(qr.m_price.isPositive());
+
+ q.launch("MF8AAUKS.L","Yahoo UK");
+
+// kdDebug(2) << "ConverterTest::testWebQuotes(): quote for " << q.m_symbol << " on " << qr.m_date.toString() << " is " << qr.m_price.toString() << " errors(" << qr.m_errors.count() << "): " << qr.m_errors.join(" /// ") << endl;
+
+ CPPUNIT_ASSERT(qr.m_errors.count() == 0);
+ CPPUNIT_ASSERT(qr.m_date <= QDate::currentDate().addDays(1));
+ CPPUNIT_ASSERT(qr.m_date >= QDate::currentDate().addDays(-7));
+ CPPUNIT_ASSERT(qr.m_price.isPositive());
+
+ q.launch("EUR > USD","Yahoo Currency");
+
+// kdDebug(2) << "ConverterTest::testWebQuotes(): quote for " << q.m_symbol << " on " << qr.m_date.toString() << " is " << qr.m_price.toString() << " errors(" << qr.m_errors.count() << "): " << qr.m_errors.join(" /// ") << endl;
+
+ CPPUNIT_ASSERT(qr.m_errors.count() == 0);
+ CPPUNIT_ASSERT(qr.m_date <= QDate::currentDate().addDays(1));
+ CPPUNIT_ASSERT(qr.m_date >= QDate::currentDate().addDays(-7));
+ CPPUNIT_ASSERT(qr.m_price.isPositive());
+
+ q.launch("50492","Globe & Mail");
+
+// kdDebug(2) << "ConverterTest::testWebQuotes(): quote for " << q.m_symbol << " on " << qr.m_date.toString() << " is " << qr.m_price.toString() << " errors(" << qr.m_errors.count() << "): " << qr.m_errors.join(" /// ") << endl;
+
+ CPPUNIT_ASSERT(qr.m_errors.count() == 0);
+ CPPUNIT_ASSERT(qr.m_date <= QDate::currentDate().addDays(1));
+ CPPUNIT_ASSERT(qr.m_date >= QDate::currentDate().addDays(-7));
+ CPPUNIT_ASSERT(qr.m_price.isPositive());
+
+ q.launch("TDB647","MSN.CA");
+
+// kdDebug(2) << "ConverterTest::testWebQuotes(): quote for " << q.m_symbol << " on " << qr.m_date.toString() << " is " << qr.m_price.toString() << " errors(" << qr.m_errors.count() << "): " << qr.m_errors.join(" /// ") << endl;
+
+ CPPUNIT_ASSERT(qr.m_errors.count() == 0);
+ CPPUNIT_ASSERT(qr.m_date <= QDate::currentDate().addDays(1));
+ CPPUNIT_ASSERT(qr.m_date >= QDate::currentDate().addDays(-7));
+ CPPUNIT_ASSERT(qr.m_price.isPositive());
+
+ }
+ catch (MyMoneyException* e)
+ {
+ CPPUNIT_FAIL(e->what());
+ }
+#endif
+}
+
+void ConverterTest::testDateFormat()
+{
+ try
+ {
+ MyMoneyDateFormat format("%mm-%dd-%yyyy");
+
+ CPPUNIT_ASSERT(format.convertString("1-5-2005") == QDate(2005,1,5));
+ CPPUNIT_ASSERT(format.convertString("jan-15-2005") == QDate(2005,1,15));
+ CPPUNIT_ASSERT(format.convertString("august-25-2005") == QDate(2005,8,25));
+
+ format = MyMoneyDateFormat("%mm/%dd/%yy");
+
+ CPPUNIT_ASSERT(format.convertString("1/5/05") == QDate(2005,1,5));
+ CPPUNIT_ASSERT(format.convertString("jan/15/05") == QDate(2005,1,15));
+ CPPUNIT_ASSERT(format.convertString("august/25/05") == QDate(2005,8,25));
+
+ format = MyMoneyDateFormat("%d\\.%m\\.%yy");
+
+ CPPUNIT_ASSERT(format.convertString("1.5.05") == QDate(2005,5,1));
+ CPPUNIT_ASSERT(format.convertString("15.jan.05") == QDate(2005,1,15));
+ CPPUNIT_ASSERT(format.convertString("25.august.05") == QDate(2005,8,25));
+
+ format = MyMoneyDateFormat("%yyyy\\\\%dddd\\\\%mmmmmmmmmmm");
+
+ CPPUNIT_ASSERT(format.convertString("2005\\31\\12") == QDate(2005,12,31));
+ CPPUNIT_ASSERT(format.convertString("2005\\15\\jan") == QDate(2005,1,15));
+ CPPUNIT_ASSERT(format.convertString("2005\\25\\august") == QDate(2005,8,25));
+
+ format = MyMoneyDateFormat("%m %dd, %yyyy");
+
+ CPPUNIT_ASSERT(format.convertString("jan 15, 2005") == QDate(2005,1,15));
+ CPPUNIT_ASSERT(format.convertString("august 25, 2005") == QDate(2005,8,25));
+ CPPUNIT_ASSERT(format.convertString("january 1st, 2005") == QDate(2005,1,1));
+
+ format = MyMoneyDateFormat("%m %d %y");
+
+ CPPUNIT_ASSERT(format.convertString("12/31/50",false,2000) == QDate(1950,12,31));
+ CPPUNIT_ASSERT(format.convertString("1/1/90",false,2000) == QDate(1990,1,1));
+ CPPUNIT_ASSERT(format.convertString("december 31st, 5",false) == QDate(2005,12,31));
+ }
+ catch (MyMoneyException* e)
+ {
+ CPPUNIT_FAIL(e->what());
+ }
+}
+
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/converter/convertertest.h b/kmymoney2/converter/convertertest.h
new file mode 100644
index 0000000..98d4289
--- /dev/null
+++ b/kmymoney2/converter/convertertest.h
@@ -0,0 +1,45 @@
+/***************************************************************************
+ convertertest.h
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ Ace Jones <ace.jones@hotpop.com>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef CONVERTERTEST_H
+#define CONVERTERTEST_H
+
+#include <cppunit/extensions/HelperMacros.h>
+#include "../mymoney/mymoneyfile.h"
+#include "../mymoney/storage/mymoneyseqaccessmgr.h"
+
+class ConverterTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(ConverterTest);
+ CPPUNIT_TEST(testWebQuotes);
+ CPPUNIT_TEST(testDateFormat);
+ CPPUNIT_TEST_SUITE_END();
+
+private:
+ MyMoneyAccount *m;
+
+ MyMoneySeqAccessMgr* storage;
+ MyMoneyFile* file;
+
+public:
+ ConverterTest();
+ void setUp ();
+ void tearDown ();
+ void testWebQuotes();
+ void testDateFormat();
+};
+
+#endif // CONVERTERTEST_H
diff --git a/kmymoney2/converter/imymoneyreader.h b/kmymoney2/converter/imymoneyreader.h
new file mode 100644
index 0000000..6222af5
--- /dev/null
+++ b/kmymoney2/converter/imymoneyreader.h
@@ -0,0 +1,135 @@
+ /***************************************************************************
+ imymoneyreader.h - description
+ -------------------
+ begin : Wed Feb 25 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef IMYMONEYREADER_H
+#define IMYMONEYREADER_H
+
+// ----------------------------------------------------------------------------
+// QT Headers
+
+#include <qobject.h>
+#include <qstring.h>
+#include <qstringlist.h>
+
+// ----------------------------------------------------------------------------
+// KDE Headers
+
+#include <ktempfile.h>
+#include <kprocess.h>
+
+// ----------------------------------------------------------------------------
+// Project Headers
+
+#include "../mymoney/mymoneyaccount.h"
+
+/**
+ * @author Kevin Tambascio
+ */
+
+class IMyMoneyReader : public QObject
+{
+public:
+ IMyMoneyReader() {}
+ virtual ~IMyMoneyReader() {}
+
+ Q_OBJECT
+
+ /**
+ * This method is used to store the filename into the object.
+ * The file should exist. If it does and an external filter
+ * program is specified with the current selected profile,
+ * the file is send through this filter and the result
+ * is stored in the m_tempFile file.
+ *
+ * @param name path and name of the file to be imported
+ */
+ virtual void setFilename(const QString& name)=0;
+
+ /**
+ * This method is used to store the name of the profile into the object.
+ * The selected profile will be loaded if it exists. If an external
+ * filter program is specified with the current selected profile,
+ * the file is send through this filter and the result
+ * is stored in the m_tempFile file.
+ *
+ * @param name QString reference to the name of the profile
+ */
+ virtual void setProfile(const QString& name)=0;
+
+ /**
+ * This method actually starts the import of data from the selected file
+ * into the MyMoney engine.
+ *
+ * This method also starts the user defined import filter program
+ * defined in the QIF profile(when a QIF file is selected). If none is
+ * defined, the file is read as is (actually the UNIX command
+ * 'cat -' is used as the filter).
+ *
+ * If data from the filter program is available, the slot
+ * slotReceivedDataFromFilter() will be called.
+ *
+ * Make sure to connect the signal importFinished() to detect when
+ * the import actually ended. Call the method finishImport() to clean
+ * things up and get the overall result of the import.
+ *
+ * @retval true the import was started successfully
+ * @retval false the import could not be started.
+ */
+ virtual const bool startImport(void)=0;
+
+ /**
+ * This method must be called once the signal importFinished() has
+ * been emitted. It will clean up the reader state and determines
+ * the actual return code of the import.
+ *
+ * @retval true Import was successful.
+ * @retval false Import failed because the filter program terminated
+ * abnormally or the user aborted the import process.
+ */
+ virtual const bool finishImport(void)=0;
+
+ /**
+ * This method is used to modify the auto payee creation flag.
+ * If this flag is set, records for payees that are not currently
+ * found in the engine will be automatically created with no
+ * further user interaction required. If this flag is no set,
+ * the user will be asked if the payee should be created or not.
+ * If the MyMoneyQifReader object is created auto payee creation
+ * is turned off.
+ *
+ * @param create flag if this feature should be turned on (@p true)
+ * or turned off (@p false)
+ */
+ virtual void setAutoCreatePayee(const bool create)=0;
+ virtual void setAskPayeeCategory(const bool ask)=0;
+
+ virtual const MyMoneyAccount& account() const { return m_account; };
+ virtual void setProgressCallback(void(*callback)(int, int, const QString&)) { m_progressCallback = callback; }
+
+private:
+ MyMoneyAccount m_account;
+ void (*m_progressCallback)(int, int, const QString&);
+ QString m_filename;
+
+};
+
+#endif
diff --git a/kmymoney2/converter/mymoneygncreader.cpp b/kmymoney2/converter/mymoneygncreader.cpp
new file mode 100644
index 0000000..40933e3
--- /dev/null
+++ b/kmymoney2/converter/mymoneygncreader.cpp
@@ -0,0 +1,2463 @@
+/***************************************************************************
+ mymoneygncreader - description
+ -------------------
+begin : Wed Mar 3 2004
+copyright : (C) 2000-2004 by Michael Edwardes
+email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qfile.h>
+#include <qmap.h>
+#include <qobject.h>
+#include <qfiledialog.h>
+#include <qinputdialog.h>
+#include <qdatetime.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+#ifndef _GNCFILEANON
+ #include <klocale.h>
+ #include <kconfig.h>
+ #include <kmessagebox.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// Third party Includes
+
+// ------------------------------------------------------------Box21----------------
+// Project Includes
+#include "mymoneygncreader.h"
+#ifndef _GNCFILEANON
+ #include "config.h"
+ #include "../mymoney/storage/imymoneystorage.h"
+ #include "../kmymoneyutils.h"
+ #include "../mymoney/mymoneyfile.h"
+ #include "../mymoney/mymoneyprice.h"
+ #include "../dialogs/kgncimportoptionsdlg.h"
+ #include "../dialogs/kgncpricesourcedlg.h"
+ #include "../dialogs/keditscheduledlg.h"
+ #include "../widgets/kmymoneyedit.h"
+ #define TRY try {
+ #define CATCH } catch (MyMoneyException *e) {
+ #define PASS } catch (MyMoneyException *e) { throw e; }
+#else
+ #include "mymoneymoney.h"
+ #include <qtextedit.h>
+ #define i18n QObject::tr
+ #define TRY
+ #define CATCH
+ #define PASS
+ #define MYMONEYEXCEPTION QString
+ #define MyMoneyException QString
+ #define PACKAGE "KMyMoney"
+#endif // _GNCFILEANON
+
+// init static variables
+double MyMoneyGncReader::m_fileHideFactor = 0.0;
+double GncObject::m_moneyHideFactor;
+
+// user options
+void MyMoneyGncReader::setOptions () {
+#ifndef _GNCFILEANON
+ KGncImportOptionsDlg dlg; // display the dialog to allow the user to set own options
+ if (dlg.exec()) {
+ // set users input options
+ m_dropSuspectSchedules = dlg.scheduleOption();
+ m_investmentOption = dlg.investmentOption();
+ m_useFinanceQuote = dlg.quoteOption();
+ m_useTxNotes = dlg.txNotesOption();
+ m_decoder = dlg.decodeOption();
+ gncdebug = dlg.generalDebugOption();
+ xmldebug = dlg.xmlDebugOption();
+ bAnonymize = dlg.anonymizeOption();
+ } else {
+ // user declined, so set some sensible defaults
+ m_dropSuspectSchedules = false;
+ // investment option - 0, create investment a/c per stock a/c, 1 = single new investment account, 2 = prompt for each stock
+ // option 2 doesn't really work too well at present
+ m_investmentOption = 0;
+ m_useFinanceQuote = false;
+ m_useTxNotes = false;
+ m_decoder = 0;
+ gncdebug = false; // general debug messages
+ xmldebug = false; // xml trace
+ bAnonymize = false; // anonymize input
+ }
+ // no dialog option for the following; it will set base currency, and print actual XML data
+ developerDebug = false;
+ // set your fave currency here to save getting that enormous dialog each time you run a test
+ // especially if you have to scroll down to USD...
+ if (developerDebug) m_storage->setValue ("kmm-baseCurrency", "GBP");
+#endif // _GNCFILEANON
+}
+
+GncObject::GncObject () {
+ m_v.setAutoDelete (true);
+}
+
+// Check that the current element is of a version we are coded for
+void GncObject::checkVersion (const QString& elName, const QXmlAttributes& elAttrs, const map_elementVersions& map) {
+ TRY
+ if (map.contains(elName)) { // if it's not in the map, there's nothing to check
+ if (!map[elName].contains(elAttrs.value("version"))) {
+ QString em = i18n("%1: Sorry. This importer cannot handle version %2 of element %3")
+ .arg(__func__).arg(elAttrs.value("version")).arg(elName);
+ throw new MYMONEYEXCEPTION (em);
+ }
+ }
+ return ;
+ PASS
+}
+
+// Check if this element is in the current object's sub element list
+GncObject *GncObject::isSubElement (const QString& elName, const QXmlAttributes& elAttrs) {
+ TRY
+ uint i;
+ GncObject *next = 0;
+ for (i = 0; i < m_subElementListCount; i++) {
+ if (elName == m_subElementList[i]) {
+ m_state = i;
+ next = startSubEl(); // go create the sub object
+ if (next != 0) {
+ next->initiate(elName, elAttrs); // initialize it
+ next->m_elementName = elName; // save it's name so we can identify the end
+ }
+ break;
+ }
+ }
+ return (next);
+ PASS
+}
+
+// Check if this element is in the current object's data element list
+bool GncObject::isDataElement (const QString &elName, const QXmlAttributes& elAttrs) {
+ TRY
+ uint i;
+ for (i = 0; i < m_dataElementListCount; i++) {
+ if (elName == m_dataElementList[i]) {
+ m_state = i;
+ dataEl(elAttrs); // go set the pointer so the data can be stored
+ return (true);
+ }
+ }
+ m_dataPtr = 0; // we don't need this, so make sure we don't store extraneous data
+ return (false);
+ PASS
+}
+
+// return the variable string, decoded if required
+QString GncObject::var (int i) const {
+ return (pMain->m_decoder == 0
+ ? *(m_v.at(i))
+ : pMain->m_decoder->toUnicode (*(m_v.at(i))));
+}
+
+void GncObject::adjustHideFactor () {
+ m_moneyHideFactor = pMain->m_fileHideFactor * (1.0 + (int)(200.0 * rand()/(RAND_MAX+1.0))) / 100.0;
+}
+
+// data anonymizer
+QString GncObject::hide (QString data, unsigned int anonClass) {
+ TRY
+ if (!pMain->bAnonymize) return (data); // no anonymizing required
+ // counters used to generate names for anonymizer
+ static int nextAccount;
+ static int nextEquity;
+ static int nextPayee;
+ static int nextSched;
+ static QMap<QString, QString> anonPayees; // to check for duplicate payee names
+ static QMap<QString, QString> anonStocks; // for reference to equities
+
+ QString result (data);
+ QMap<QString, QString>::Iterator it;
+ MyMoneyMoney in, mresult;
+ switch (anonClass) {
+ case ASIS: break; // this is not personal data
+ case SUPPRESS: result = ""; break; // this is personal and is not essential
+ case NXTACC: result = i18n("Account%1").arg(++nextAccount, -6); break; // generate account name
+ case NXTEQU: // generate/return an equity name
+ it = anonStocks.find (data);
+ if (it == anonStocks.end()) {
+ result = i18n("Stock%1").arg(++nextEquity, -6);
+ anonStocks.insert (data, result);
+ } else {
+ result = (*it).data();
+ }
+ break;
+ case NXTPAY: // genearet/return a payee name
+ it = anonPayees.find (data);
+ if (it == anonPayees.end()) {
+ result = i18n("Payee%1").arg(++nextPayee, -6);
+ anonPayees.insert (data, result);
+ } else {
+ result = (*it).data();
+ }
+ break;
+ case NXTSCHD: result = i18n("Schedule%1").arg(++nextSched, -6); break; // generate a schedule name
+ case MONEY1:
+ in = MyMoneyMoney(data);
+ if (data == "-1/0") in = MyMoneyMoney (0); // spurious gnucash data - causes a crash sometimes
+ mresult = MyMoneyMoney(m_moneyHideFactor) * in;
+ mresult.convert(10000);
+ result = mresult.toString();
+ break;
+ case MONEY2:
+ in = MyMoneyMoney(data);
+ if (data == "-1/0") in = MyMoneyMoney (0);
+ mresult = MyMoneyMoney(m_moneyHideFactor) * in;
+ mresult.convert(10000);
+ mresult.setThousandSeparator (' ');
+ result = mresult.formatMoney("", 2);
+ break;
+ }
+ return (result);
+ PASS
+}
+
+// dump current object data values // only called if gncdebug set
+void GncObject::debugDump () {
+ uint i;
+ qDebug ("Object %s", m_elementName.latin1());
+ for (i = 0; i < m_dataElementListCount; i++) {
+ qDebug ("%s = %s", m_dataElementList[i].latin1(), m_v.at(i)->latin1());
+ }
+}
+//*****************************************************************
+GncFile::GncFile () {
+ static const QString subEls[] = {"gnc:book", "gnc:count-data", "gnc:commodity", "price",
+ "gnc:account", "gnc:transaction", "gnc:template-transactions",
+ "gnc:schedxaction"
+ };
+ m_subElementList = subEls;
+ m_subElementListCount = END_FILE_SELS;
+ m_dataElementListCount = 0;
+ m_processingTemplates = false;
+ m_bookFound = false;
+}
+
+GncFile::~GncFile () {}
+
+GncObject *GncFile::startSubEl() {
+ TRY
+ if (pMain->xmldebug) qDebug ("File start subel m_state %d", m_state);
+ GncObject *next = 0;
+ switch (m_state) {
+ case BOOK:
+ if (m_bookFound) throw new MYMONEYEXCEPTION (i18n("This version of the importer cannot handle multi-book files."));
+ m_bookFound = true;
+ break;
+ case COUNT: next = new GncCountData; break;
+ case CMDTY: next = new GncCommodity; break;
+ case PRICE: next = new GncPrice; break;
+ case ACCT:
+ // accounts within the template section are ignored
+ if (!m_processingTemplates) next = new GncAccount;
+ break;
+ case TX: next = new GncTransaction (m_processingTemplates); break;
+ case TEMPLATES: m_processingTemplates = true; break;
+ case SCHEDULES: m_processingTemplates = false; next = new GncSchedule; break;
+ default: throw new MYMONEYEXCEPTION ("GncFile rcvd invalid state");
+ }
+ return (next);
+ PASS
+}
+
+void GncFile::endSubEl(GncObject *subObj) {
+ if (pMain->xmldebug) qDebug ("File end subel");
+ if (!m_processingTemplates) delete subObj; // template txs must be saved awaiting schedules
+ m_dataPtr = 0;
+ return ;
+}
+//****************************************** GncDate *********************************************
+GncDate::GncDate () {
+ m_subElementListCount = 0;
+ static const QString dEls[] = {"ts:date", "gdate"};
+ m_dataElementList = dEls;
+ m_dataElementListCount = END_Date_DELS;
+ static const unsigned int anonClasses[] = {ASIS, ASIS};
+ m_anonClassList = anonClasses;
+ for (uint i = 0; i < m_dataElementListCount; i++) m_v.append (new QString (""));
+}
+
+GncDate::~GncDate() {}
+//*************************************GncCmdtySpec***************************************
+GncCmdtySpec::GncCmdtySpec () {
+ m_subElementListCount = 0;
+ static const QString dEls[] = {"cmdty:space", "cmdty:id"};
+ m_dataElementList = dEls;
+ m_dataElementListCount = END_CmdtySpec_DELS;
+ static const unsigned int anonClasses[] = {ASIS, ASIS};
+ m_anonClassList = anonClasses;
+ for (uint i = 0; i < m_dataElementListCount; i++) m_v.append (new QString (""));
+}
+
+GncCmdtySpec::~GncCmdtySpec () {}
+
+QString GncCmdtySpec::hide(QString data, unsigned int) {
+ // hide equity names, but not currency names
+ unsigned int newClass = ASIS;
+ switch (m_state) {
+ case CMDTYID:
+ if (!isCurrency()) newClass = NXTEQU;
+ }
+ return (GncObject::hide (data, newClass));
+}
+//************* GncKvp********************************************
+GncKvp::GncKvp () {
+ m_subElementListCount = END_Kvp_SELS;
+ static const QString subEls[] = {"slot"}; // kvp's may be nested
+ m_subElementList = subEls;
+ m_dataElementListCount = END_Kvp_DELS;
+ static const QString dataEls[] = {"slot:key", "slot:value"};
+ m_dataElementList = dataEls;
+ static const unsigned int anonClasses[] = {ASIS, ASIS};
+ m_anonClassList = anonClasses;
+ for (uint i = 0; i < m_dataElementListCount; i++) m_v.append (new QString (""));
+ m_kvpList.setAutoDelete (true);
+}
+
+GncKvp::~GncKvp () {}
+
+void GncKvp::dataEl (const QXmlAttributes& elAttrs) {
+ switch (m_state) {
+ case VALUE:
+ m_kvpType = elAttrs.value("type");
+ }
+ m_dataPtr = m_v.at(m_state);
+ if (key().contains ("formula")) {
+ m_anonClass = MONEY2;
+ } else {
+ m_anonClass = ASIS;
+ }
+ return ;
+}
+
+GncObject *GncKvp::startSubEl() {
+ if (pMain->xmldebug) qDebug ("Kvp start subel m_state %d", m_state);
+ TRY
+ GncObject *next = 0;
+ switch (m_state) {
+ case KVP: next = new GncKvp; break;
+ default: throw new MYMONEYEXCEPTION ("GncKvp rcvd invalid m_state ");
+ }
+ return (next);
+ PASS
+}
+
+void GncKvp::endSubEl(GncObject *subObj) {
+ if (pMain->xmldebug) qDebug ("Kvp end subel");
+ m_kvpList.append (subObj);
+ m_dataPtr = 0;
+ return ;
+}
+//*********************************GncLot*********************************************
+GncLot::GncLot() {
+ m_subElementListCount = 0;
+ m_dataElementListCount = 0;
+}
+
+GncLot::~GncLot() {}
+
+//*********************************GncCountData***************************************
+GncCountData::GncCountData() {
+ m_subElementListCount = 0;
+ m_dataElementListCount = 0;
+ m_v.append (new QString ("")); // only 1 data item
+}
+
+GncCountData::~GncCountData () {}
+
+void GncCountData::initiate (const QString&, const QXmlAttributes& elAttrs) {
+ m_countType = elAttrs.value ("cd:type");
+ m_dataPtr = m_v.at(0);
+ return ;
+}
+
+void GncCountData::terminate () {
+ int i = m_v.at(0)->toInt();
+ if (m_countType == "commodity") {
+ pMain->setGncCommodityCount(i); return ;
+ }
+ if (m_countType == "account") {
+ pMain->setGncAccountCount(i); return ;
+ }
+ if (m_countType == "transaction") {
+ pMain->setGncTransactionCount(i); return ;
+ }
+ if (m_countType == "schedxaction") {
+ pMain->setGncScheduleCount(i); return ;
+ }
+ if (i != 0) {
+ if (m_countType == "budget") pMain->setBudgetsFound(true);
+ else if (m_countType.left(7) == "gnc:Gnc") pMain->setSmallBusinessFound(true);
+ else if (pMain->xmldebug) qDebug ("Unknown count type %s", m_countType.latin1());
+ }
+ return ;
+}
+//*********************************GncCommodity***************************************
+GncCommodity::GncCommodity () {
+ m_subElementListCount = 0;
+ static const QString dEls[] = {"cmdty:space", "cmdty:id", "cmdty:name", "cmdty:fraction"};
+ m_dataElementList = dEls;
+ m_dataElementListCount = END_Commodity_DELS;
+ static const unsigned int anonClasses[] = {ASIS, NXTEQU, SUPPRESS, ASIS};
+ m_anonClassList = anonClasses;
+ for (uint i = 0; i < m_dataElementListCount; i++) m_v.append (new QString (""));
+}
+
+GncCommodity::~GncCommodity () {}
+
+void GncCommodity::terminate() {
+ TRY
+ pMain->convertCommodity (this);
+ return ;
+ PASS
+}
+//************* GncPrice********************************************
+GncPrice::GncPrice () {
+ static const QString subEls[] = {"price:commodity", "price:currency", "price:time"};
+ m_subElementList = subEls;
+ m_subElementListCount = END_Price_SELS;
+ m_dataElementListCount = END_Price_DELS;
+ static const QString dataEls[] = {"price:value"};
+ m_dataElementList = dataEls;
+ static const unsigned int anonClasses[] = {ASIS};
+ m_anonClassList = anonClasses;
+ for (uint i = 0; i < m_dataElementListCount; i++) m_v.append (new QString (""));
+ m_vpCommodity = NULL;
+ m_vpCurrency = NULL;
+ m_vpPriceDate = NULL;
+}
+
+GncPrice::~GncPrice () {
+ delete m_vpCommodity; delete m_vpCurrency; delete m_vpPriceDate;
+}
+
+GncObject *GncPrice::startSubEl() {
+ TRY
+ GncObject *next = 0;
+ switch (m_state) {
+ case CMDTY: next = new GncCmdtySpec; break;
+ case CURR: next = new GncCmdtySpec; break;
+ case PRICEDATE: next = new GncDate; break;
+ default: throw new MYMONEYEXCEPTION ("GncPrice rcvd invalid m_state");
+ }
+ return (next);
+ PASS
+}
+
+void GncPrice::endSubEl(GncObject *subObj) {
+ TRY
+ switch (m_state) {
+ case CMDTY: m_vpCommodity = static_cast<GncCmdtySpec *>(subObj); break;
+ case CURR: m_vpCurrency = static_cast<GncCmdtySpec *>(subObj); break;
+ case PRICEDATE: m_vpPriceDate = static_cast<GncDate *>(subObj); break;
+ default: throw new MYMONEYEXCEPTION ("GncPrice rcvd invalid m_state");
+ }
+ return;
+ PASS
+}
+
+void GncPrice::terminate() {
+ TRY
+ pMain->convertPrice (this);
+ return ;
+ PASS
+}
+//************* GncAccount********************************************
+GncAccount::GncAccount () {
+ m_subElementListCount = END_Account_SELS;
+ static const QString subEls[] = {"act:commodity", "slot", "act:lots"};
+ m_subElementList = subEls;
+ m_dataElementListCount = END_Account_DELS;
+ static const QString dataEls[] = {"act:id", "act:name", "act:description",
+ "act:type", "act:parent"};
+ m_dataElementList = dataEls;
+ static const unsigned int anonClasses[] = {ASIS, NXTACC, SUPPRESS, ASIS, ASIS};
+ m_anonClassList = anonClasses;
+ m_kvpList.setAutoDelete (true);
+ for (uint i = 0; i < m_dataElementListCount; i++) m_v.append (new QString (""));
+ m_vpCommodity = NULL;
+}
+
+GncAccount::~GncAccount () {
+ delete m_vpCommodity;
+}
+
+GncObject *GncAccount::startSubEl() {
+ TRY
+ if (pMain->xmldebug) qDebug ("Account start subel m_state %d", m_state);
+ GncObject *next = 0;
+ switch (m_state) {
+ case CMDTY: next = new GncCmdtySpec; break;
+ case KVP: next = new GncKvp; break;
+ case LOTS: next = new GncLot();
+ pMain->setLotsFound(true); // we don't handle lots; just set flag to report
+ break;
+ default: throw new MYMONEYEXCEPTION ("GncAccount rcvd invalid m_state");
+ }
+ return (next);
+ PASS
+}
+
+void GncAccount::endSubEl(GncObject *subObj) {
+ if (pMain->xmldebug) qDebug ("Account end subel");
+ switch (m_state) {
+ case CMDTY: m_vpCommodity = static_cast<GncCmdtySpec *>(subObj); break;
+ case KVP: m_kvpList.append (subObj);
+ }
+ return ;
+}
+
+void GncAccount::terminate() {
+ TRY
+ pMain->convertAccount (this);
+ return ;
+ PASS
+}
+//************* GncTransaction********************************************
+GncTransaction::GncTransaction (bool processingTemplates) {
+ m_subElementListCount = END_Transaction_SELS;
+ static const QString subEls[] = {"trn:currency", "trn:date-posted", "trn:date-entered",
+ "trn:split", "slot"};
+ m_subElementList = subEls;
+ m_dataElementListCount = END_Transaction_DELS;
+ static const QString dataEls[] = {"trn:id", "trn:num", "trn:description"};
+ m_dataElementList = dataEls;
+ static const unsigned int anonClasses[] = {ASIS, SUPPRESS, NXTPAY};
+ m_anonClassList = anonClasses;
+ adjustHideFactor();
+ m_template = processingTemplates;
+ m_splitList.setAutoDelete (true);
+ for (uint i = 0; i < m_dataElementListCount; i++) m_v.append (new QString (""));
+ m_vpCurrency = NULL;
+ m_vpDateEntered = m_vpDatePosted = NULL;
+}
+
+GncTransaction::~GncTransaction () {
+ delete m_vpCurrency; delete m_vpDatePosted; delete m_vpDateEntered;
+}
+
+GncObject *GncTransaction::startSubEl() {
+ TRY
+ if (pMain->xmldebug) qDebug ("Transaction start subel m_state %d", m_state);
+ GncObject *next = 0;
+ switch (m_state) {
+ case CURRCY: next = new GncCmdtySpec; break;
+ case POSTED:
+ case ENTERED:
+ next = new GncDate; break;
+ case SPLIT:
+ if (isTemplate()) {
+ next = new GncTemplateSplit;
+ } else {
+ next = new GncSplit;
+ }
+ break;
+ case KVP: next = new GncKvp; break;
+ default: throw new MYMONEYEXCEPTION ("GncTransaction rcvd invalid m_state");
+ }
+ return (next);
+ PASS
+}
+
+void GncTransaction::endSubEl(GncObject *subObj) {
+ if (pMain->xmldebug) qDebug ("Transaction end subel");
+ switch (m_state) {
+ case CURRCY: m_vpCurrency = static_cast<GncCmdtySpec *>(subObj); break;
+ case POSTED: m_vpDatePosted = static_cast<GncDate *>(subObj); break;
+ case ENTERED: m_vpDateEntered = static_cast<GncDate *>(subObj); break;
+ case SPLIT: m_splitList.append (subObj); break;
+ case KVP: m_kvpList.append (subObj);
+ }
+ return ;
+}
+
+void GncTransaction::terminate() {
+ TRY
+ if (isTemplate()) {
+ pMain->saveTemplateTransaction(this);
+ } else {
+ pMain->convertTransaction (this);
+ }
+ return ;
+ PASS
+}
+//************* GncSplit********************************************
+GncSplit::GncSplit () {
+ m_subElementListCount = END_Split_SELS;
+ static const QString subEls[] = {"split:reconcile-date"};
+ m_subElementList = subEls;
+ m_dataElementListCount = END_Split_DELS;
+ static const QString dataEls[] = {"split:id", "split:memo", "split:reconciled-state", "split:value",
+ "split:quantity", "split:account"};
+ m_dataElementList = dataEls;
+ static const unsigned int anonClasses[] = {ASIS, SUPPRESS, ASIS, MONEY1, MONEY1, ASIS};
+ m_anonClassList = anonClasses;
+ for (uint i = 0; i < m_dataElementListCount; i++) m_v.append (new QString (""));
+ m_vpDateReconciled = NULL;
+}
+
+GncSplit::~GncSplit () {
+ delete m_vpDateReconciled;
+}
+
+GncObject *GncSplit::startSubEl () {
+ TRY
+ GncObject *next = 0;
+ switch (m_state) {
+ case RECDATE: next = new GncDate; break;
+ default: throw new MYMONEYEXCEPTION ("GncTemplateSplit rcvd invalid m_state ");
+ }
+ return (next);
+ PASS
+}
+
+void GncSplit::endSubEl(GncObject *subObj) {
+ if (pMain->xmldebug) qDebug ("Split end subel");
+ switch (m_state) {
+ case RECDATE: m_vpDateReconciled = static_cast<GncDate *>(subObj); break;
+ }
+ return ;
+}
+//************* GncTemplateSplit********************************************
+GncTemplateSplit::GncTemplateSplit () {
+ m_subElementListCount = END_TemplateSplit_SELS;
+ static const QString subEls[] = {"slot"};
+ m_subElementList = subEls;
+ m_dataElementListCount = END_TemplateSplit_DELS;
+ static const QString dataEls[] = {"split:id", "split:memo", "split:reconciled-state", "split:value",
+ "split:quantity", "split:account"};
+ m_dataElementList = dataEls;
+ static const unsigned int anonClasses[] = {ASIS, SUPPRESS, ASIS, MONEY1, MONEY1, ASIS};
+ m_anonClassList = anonClasses;
+ for (uint i = 0; i < m_dataElementListCount; i++) m_v.append (new QString (""));
+ m_kvpList.setAutoDelete (true);
+}
+
+GncTemplateSplit::~GncTemplateSplit () {}
+
+GncObject *GncTemplateSplit::startSubEl() {
+ if (pMain->xmldebug) qDebug ("TemplateSplit start subel m_state %d", m_state);
+ TRY
+ GncObject *next = 0;
+ switch (m_state) {
+ case KVP: next = new GncKvp; break;
+ default: throw new MYMONEYEXCEPTION ("GncTemplateSplit rcvd invalid m_state");
+ }
+ return (next);
+ PASS
+}
+
+void GncTemplateSplit::endSubEl(GncObject *subObj) {
+ if (pMain->xmldebug) qDebug ("TemplateSplit end subel");
+ m_kvpList.append (subObj);
+ m_dataPtr = 0;
+ return ;
+}
+//************* GncSchedule********************************************
+GncSchedule::GncSchedule () {
+ m_subElementListCount = END_Schedule_SELS;
+ static const QString subEls[] = {"sx:start", "sx:last", "sx:end", "gnc:freqspec", "gnc:recurrence","sx:deferredInstance"};
+ m_subElementList = subEls;
+ m_dataElementListCount = END_Schedule_DELS;
+ static const QString dataEls[] = {"sx:name", "sx:enabled", "sx:autoCreate", "sx:autoCreateNotify",
+ "sx:autoCreateDays", "sx:advanceCreateDays", "sx:advanceRemindDays",
+ "sx:instanceCount", "sx:num-occur",
+ "sx:rem-occur", "sx:templ-acct"};
+ m_dataElementList = dataEls;
+ static const unsigned int anonClasses[] = {NXTSCHD, ASIS, ASIS, ASIS, ASIS, ASIS, ASIS, ASIS, ASIS, ASIS, ASIS};
+ m_anonClassList = anonClasses;
+ for (uint i = 0; i < m_dataElementListCount; i++) m_v.append (new QString (""));
+ m_vpStartDate = m_vpLastDate = m_vpEndDate = NULL;
+ m_vpFreqSpec = NULL;
+ m_vpRecurrence.clear();
+ m_vpRecurrence.setAutoDelete(true);
+ m_vpSchedDef = NULL;
+}
+
+GncSchedule::~GncSchedule () {
+ delete m_vpStartDate; delete m_vpLastDate; delete m_vpEndDate; delete m_vpFreqSpec; delete m_vpSchedDef;
+}
+
+GncObject *GncSchedule::startSubEl() {
+ if (pMain->xmldebug) qDebug ("Schedule start subel m_state %d", m_state);
+ TRY
+ GncObject *next = 0;
+ switch (m_state) {
+ case STARTDATE:
+ case LASTDATE:
+ case ENDDATE: next = new GncDate; break;
+ case FREQ: next = new GncFreqSpec; break;
+ case RECURRENCE: next = new GncRecurrence; break;
+ case DEFINST: next = new GncSchedDef; break;
+ default: throw new MYMONEYEXCEPTION ("GncSchedule rcvd invalid m_state");
+ }
+ return (next);
+ PASS
+}
+
+void GncSchedule::endSubEl(GncObject *subObj) {
+ if (pMain->xmldebug) qDebug ("Schedule end subel");
+ switch (m_state) {
+ case STARTDATE: m_vpStartDate = static_cast<GncDate *>(subObj); break;
+ case LASTDATE: m_vpLastDate = static_cast<GncDate *>(subObj); break;
+ case ENDDATE: m_vpEndDate = static_cast<GncDate *>(subObj); break;
+ case FREQ: m_vpFreqSpec = static_cast<GncFreqSpec *>(subObj); break;
+ case RECURRENCE: m_vpRecurrence.append(static_cast<GncRecurrence *>(subObj)); break;
+ case DEFINST: m_vpSchedDef = static_cast<GncSchedDef *>(subObj); break;
+ }
+ return ;
+}
+
+void GncSchedule::terminate() {
+ TRY
+ pMain->convertSchedule (this);
+ return ;
+ PASS
+}
+//************* GncFreqSpec********************************************
+GncFreqSpec::GncFreqSpec () {
+ m_subElementListCount = END_FreqSpec_SELS;
+ static const QString subEls[] = {"gnc:freqspec"};
+ m_subElementList = subEls;
+ m_dataElementListCount = END_FreqSpec_DELS;
+ static const QString dataEls[] = {"fs:ui_type", "fs:monthly", "fs:daily", "fs:weekly", "fs:interval",
+ "fs:offset", "fs:day"};
+ m_dataElementList = dataEls;
+ static const unsigned int anonClasses[] = {ASIS, ASIS, ASIS, ASIS, ASIS, ASIS, ASIS };
+ m_anonClassList = anonClasses;
+ for (uint i = 0; i < m_dataElementListCount; i++) m_v.append (new QString (""));
+ m_fsList.setAutoDelete (true);
+}
+
+GncFreqSpec::~GncFreqSpec () {}
+
+GncObject *GncFreqSpec::startSubEl() {
+ TRY
+ if (pMain->xmldebug) qDebug ("FreqSpec start subel m_state %d", m_state);
+
+ GncObject *next = 0;
+ switch (m_state) {
+ case COMPO: next = new GncFreqSpec; break;
+ default: throw new MYMONEYEXCEPTION ("GncFreqSpec rcvd invalid m_state");
+ }
+ return (next);
+ PASS
+}
+
+void GncFreqSpec::endSubEl(GncObject *subObj) {
+ if (pMain->xmldebug) qDebug ("FreqSpec end subel");
+ switch (m_state) {
+ case COMPO: m_fsList.append (subObj); break;
+ }
+ m_dataPtr = 0;
+ return ;
+}
+
+void GncFreqSpec::terminate() {
+ pMain->convertFreqSpec (this);
+ return ;
+}
+//************* GncRecurrence********************************************
+GncRecurrence::GncRecurrence () {
+ m_subElementListCount = END_Recurrence_SELS;
+ static const QString subEls[] = {"recurrence:start"};
+ m_subElementList = subEls;
+ m_dataElementListCount = END_Recurrence_DELS;
+ static const QString dataEls[] = {"recurrence:mult", "recurrence:period_type"};
+ m_dataElementList = dataEls;
+ static const unsigned int anonClasses[] = {ASIS, ASIS};
+ m_anonClassList = anonClasses;
+ for (uint i = 0; i < m_dataElementListCount; i++) m_v.append (new QString (""));
+}
+
+GncRecurrence::~GncRecurrence () {
+ delete m_vpStartDate;
+}
+
+GncObject *GncRecurrence::startSubEl() {
+ TRY
+ if (pMain->xmldebug) qDebug ("Recurrence start subel m_state %d", m_state);
+
+ GncObject *next = 0;
+ switch (m_state) {
+ case STARTDATE: next = new GncDate; break;
+ default: throw new MYMONEYEXCEPTION ("GncRecurrence rcvd invalid m_state");
+ }
+ return (next);
+ PASS
+}
+
+void GncRecurrence::endSubEl(GncObject *subObj) {
+ if (pMain->xmldebug) qDebug ("Recurrence end subel");
+ switch (m_state) {
+ case STARTDATE: m_vpStartDate = static_cast<GncDate *>(subObj); break;
+ }
+ m_dataPtr = 0;
+ return ;
+}
+
+void GncRecurrence::terminate() {
+ pMain->convertRecurrence (this);
+ return ;
+}
+
+QString GncRecurrence::getFrequency() const {
+ // This function converts a gnucash 2.2 recurrence specification into it's previous equivalent
+ // This will all need re-writing when MTE finishes the schedule re-write
+ if (periodType() == "once") return("once");
+ if ((periodType() == "day") and (mult() == "1")) return("daily");
+ if (periodType() == "week") {
+ if (mult() == "1") return ("weekly");
+ if (mult() == "2") return ("bi_weekly");
+ if (mult() == "4") return ("four-weekly");
+ }
+ if (periodType() == "month") {
+ if (mult() == "1") return ("monthly");
+ if (mult() == "2") return ("two-monthly");
+ if (mult() == "3") return ("quarterly");
+ if (mult() == "4") return ("tri_annually");
+ if (mult() == "6") return ("semi_yearly");
+ if (mult() == "12") return ("yearly");
+ if (mult() == "24") return ("two-yearly");
+ }
+ return ("unknown");
+}
+
+//************* GncSchedDef********************************************
+GncSchedDef::GncSchedDef () {
+ // process ing for this sub-object is undefined at the present time
+ m_subElementListCount = 0;
+ m_dataElementListCount = 0;
+}
+
+GncSchedDef::~GncSchedDef () {}
+
+/************************************************************************************************
+ XML Reader
+************************************************************************************************/
+void XmlReader::processFile (QIODevice* pDevice) {
+ m_source = new QXmlInputSource (pDevice); // set up the Qt XML reader
+ m_reader = new QXmlSimpleReader;
+ m_reader->setContentHandler (this);
+ // go read the file
+ if (!m_reader->parse (m_source)) {
+ throw new MYMONEYEXCEPTION (i18n("Input file cannot be parsed; may be corrupt\n%s", errorString().latin1()));
+ }
+ delete m_reader;
+ delete m_source;
+ return ;
+}
+
+// XML handling routines
+bool XmlReader::startDocument() {
+ m_os.setAutoDelete (true);
+ m_co = new GncFile; // create initial object, push to stack , pass it the 'main' pointer
+ m_os.push (m_co);
+ m_co->setPm (pMain);
+ m_headerFound = false;
+#ifdef _GNCFILEANON
+ pMain->oStream << "<?xml version=\"1.0\"?>";
+ lastType = -1;
+ indentCount = 0;
+#endif // _GNCFILEANON
+ return (true);
+}
+
+bool XmlReader::startElement (const QString&, const QString&, const QString& elName ,
+ const QXmlAttributes& elAttrs) {
+ try {
+ if (pMain->gncdebug) qDebug ("XML start - %s", elName.latin1());
+#ifdef _GNCFILEANON
+ int i;
+ QString spaces;
+ // anonymizer - write data
+ if (elName == "gnc:book" || elName == "gnc:count-data" || elName == "book:id") lastType = -1;
+ pMain->oStream << endl;
+ switch (lastType) {
+ case 0:
+ indentCount += 2;
+ // tricky fall through here
+
+ case 2:
+ spaces.fill (' ', indentCount);
+ pMain->oStream << spaces.latin1();
+ break;
+ }
+ pMain->oStream << '<' << elName;
+ for (i = 0; i < elAttrs.count(); i++) {
+ pMain->oStream << ' ' << elAttrs.qName(i) << '=' << '"' << elAttrs.value(i) << '"';
+ }
+ pMain->oStream << '>';
+ lastType = 0;
+#else
+ if ((!m_headerFound) && (elName != "gnc-v2"))
+ throw new MYMONEYEXCEPTION (i18n("Invalid header for file. Should be 'gnc-v2'"));
+ m_headerFound = true;
+#endif // _GNCFILEANON
+ m_co->checkVersion (elName, elAttrs, pMain->m_versionList);
+ // check if this is a sub object element; if so, push stack and initialize
+ GncObject *temp = m_co->isSubElement (elName, elAttrs);
+ if (temp != 0) {
+ m_os.push (temp);
+ m_co = m_os.top();
+ m_co->setVersion(elAttrs.value("version"));
+ m_co->setPm (pMain); // pass the 'main' pointer to the sub object
+ // return true; // removed, as we hit a return true anyway
+ }
+#if 0
+ // check for a data element
+ if (m_co->isDataElement (elName, elAttrs))
+ return (true);
+#endif
+ else {
+ // reduced the above to
+ m_co->isDataElement(elName, elAttrs);
+ }
+ } catch (MyMoneyException *e) {
+#ifndef _GNCFILEANON
+ // we can't pass on exceptions here coz the XML reader won't catch them and we just abort
+ KMessageBox::error(0, i18n("Import failed:\n\n%1").arg(e->what()), PACKAGE);
+ qFatal ("%s", e->what().latin1());
+#else
+ qFatal ("%s", e->latin1());
+#endif // _GNCFILEANON
+ }
+ return true; // to keep compiler happy
+}
+
+bool XmlReader::endElement( const QString&, const QString&, const QString&elName ) {
+ try {
+ if (pMain->xmldebug) qDebug ("XML end - %s", elName.latin1());
+#ifdef _GNCFILEANON
+ QString spaces;
+ switch (lastType) {
+ case 2:
+ indentCount -= 2; spaces.fill (' ', indentCount); pMain->oStream << endl << spaces.latin1(); break;
+ }
+ pMain->oStream << "</" << elName << '>' ;
+ lastType = 2;
+#endif // _GNCFILEANON
+ m_co->resetDataPtr(); // so we don't get extraneous data loaded into the variables
+ if (elName == m_co->getElName()) { // check if this is the end of the current object
+ if (pMain->gncdebug) m_co->debugDump(); // dump the object data (temp)
+ // call the terminate routine, pop the stack, and advise the parent that it's done
+ m_co->terminate();
+ GncObject *temp = m_co;
+ m_os.pop();
+ m_co = m_os.top();
+ m_co->endSubEl (temp);
+ }
+ return (true);
+ } catch (MyMoneyException *e) {
+#ifndef _GNCFILEANON
+ // we can't pass on exceptions here coz the XML reader won't catch them and we just abort
+ KMessageBox::error(0, i18n("Import failed:\n\n%1").arg(e->what()), PACKAGE);
+ qFatal ("%s", e->what().latin1());
+#else
+ qFatal ("%s", e->latin1());
+#endif // _GNCFILEANON
+ }
+ return (true); // to keep compiler happy
+}
+
+bool XmlReader::characters (const QString &data) {
+ if (pMain->xmldebug) qDebug ("XML Data received - %d bytes", data.length());
+ QString pData = data.stripWhiteSpace(); // data may contain line feeds and indentation spaces
+ if (!pData.isEmpty()) {
+ if (pMain->developerDebug) qDebug ("XML Data - %s", pData.latin1());
+ m_co->storeData (pData); //go store it
+#ifdef _GNCFILEANON
+ QString anonData = m_co->getData ();
+ if (anonData.isEmpty()) anonData = pData;
+ // there must be a Qt standard way of doing the following but I can't ... find it
+ anonData.replace ('<', "&lt;");
+ anonData.replace ('>', "&gt;");
+ anonData.replace ('&', "&amp;");
+ pMain->oStream << anonData; // write original data
+ lastType = 1;
+#endif // _GNCFILEANON
+ }
+ return (true);
+}
+
+bool XmlReader::endDocument() {
+#ifdef _GNCFILEANON
+ pMain->oStream << endl << endl;
+ pMain->oStream << "<!-- Local variables: -->" << endl;
+ pMain->oStream << "<!-- mode: xml -->" << endl;
+ pMain->oStream << "<!-- End: -->" << endl;
+#endif // _GNCFILEANON
+ return (true);
+}
+
+/*******************************************************************************************
+ Main class for this module
+ Controls overall operation of the importer
+********************************************************************************************/
+//***************** Constructor ***********************
+MyMoneyGncReader::MyMoneyGncReader() {
+#ifndef _GNCFILEANON
+ m_storage = NULL;
+ m_messageList.setAutoDelete (true);
+ m_templateList.setAutoDelete (true);
+#endif // _GNCFILEANON
+// to hold gnucash count data (only used for progress bar)
+ m_gncCommodityCount = m_gncAccountCount = m_gncTransactionCount = m_gncScheduleCount = 0;
+ m_smallBusinessFound = m_budgetsFound = m_lotsFound = false;
+ m_commodityCount = m_priceCount = m_accountCount = m_transactionCount = m_templateCount = m_scheduleCount = 0;
+ m_decoder = 0;
+ // build a list of valid versions
+ static const QString versionList[] = {"gnc:book 2.0.0", "gnc:commodity 2.0.0", "gnc:pricedb 1",
+ "gnc:account 2.0.0", "gnc:transaction 2.0.0", "gnc:schedxaction 1.0.0",
+ "gnc:schedxaction 2.0.0", // for gnucash 2.2 onward
+ "gnc:freqspec 1.0.0", "zzz" // zzz = stopper
+ };
+ unsigned int i;
+ for (i = 0; versionList[i] != "zzz"; ++i)
+ m_versionList[versionList[i].section (' ', 0, 0)].append(versionList[i].section (' ', 1, 1));
+}
+
+//***************** Destructor *************************
+MyMoneyGncReader::~MyMoneyGncReader() {}
+
+//**************************** Main Entry Point ************************************
+#ifndef _GNCFILEANON
+void MyMoneyGncReader::readFile(QIODevice* pDevice, IMyMoneySerialize* storage) {
+
+ Q_CHECK_PTR (pDevice);
+ Q_CHECK_PTR (storage);
+
+ m_storage = dynamic_cast<IMyMoneyStorage *>(storage);
+ qDebug ("Entering gnucash importer");
+ setOptions ();
+ // get a file anonymization factor from the user
+ if (bAnonymize) setFileHideFactor ();
+ //m_defaultPayee = createPayee (i18n("Unknown payee"));
+
+ MyMoneyFileTransaction ft;
+ m_xr = new XmlReader (this);
+ try {
+ m_xr->processFile (pDevice);
+ terminate (); // do all the wind-up things
+ ft.commit();
+ } catch (MyMoneyException *e) {
+ KMessageBox::error(0, i18n("Import failed:\n\n%1").arg(e->what()), PACKAGE);
+ qFatal ("%s", e->what().latin1());
+ } // end catch
+ signalProgress (0, 1, i18n("Import complete")); // switch off progress bar
+ delete m_xr;
+ qDebug ("Exiting gnucash importer");
+ return ;
+}
+#else
+// Control code for the file anonymizer
+void MyMoneyGncReader::readFile(QString in, QString out) {
+ QFile pDevice (in);
+ if (!pDevice.open (IO_ReadOnly)) qFatal ("Can't open input file");
+ QFile outFile (out);
+ if (!outFile.open (IO_WriteOnly)) qFatal ("Can't open output file");
+ oStream.setDevice (&outFile);
+ bAnonymize = true;
+ // get a file anonymization factor from the user
+ setFileHideFactor ();
+ m_xr = new XmlReader (this);
+ try {
+ m_xr->processFile (&pDevice);
+ } catch (MyMoneyException *e) {
+ qFatal ("%s", e->latin1());
+ } // end catch
+ delete m_xr;
+ pDevice.close();
+ outFile.close();
+ return ;
+}
+
+#include <qapplication.h>
+int main (int argc, char ** argv) {
+ QApplication a (argc, argv);
+ MyMoneyGncReader m;
+ QString inFile, outFile;
+
+ if (argc > 0) inFile = a.argv()[1];
+ if (argc > 1) outFile = a.argv()[2];
+ if (inFile.isEmpty()) {
+ inFile = QFileDialog::getOpenFileName("",
+ "Gnucash files(*.nc *)",
+ 0);
+ }
+ if (inFile.isEmpty()) qFatal ("Input file required");
+ if (outFile.isEmpty()) outFile = inFile + ".anon";
+ m.readFile (inFile, outFile);
+ exit (0);
+}
+#endif // _GNCFILEANON
+
+void MyMoneyGncReader::setFileHideFactor () {
+#define MINFILEHIDEF 0.01
+#define MAXFILEHIDEF 99.99
+ srand (QTime::currentTime().second()); // seed randomizer for anonymize
+ m_fileHideFactor = 0.0;
+ while (m_fileHideFactor == 0.0) {
+ m_fileHideFactor = QInputDialog::getDouble (
+ i18n ("Disguise your wealth"),
+ i18n ("Each monetary value on your file will be multiplied by a random number between 0.01 and 1.99\n"
+ "with a different value used for each transaction. In addition, to further disguise the true\n"
+ "values, you may enter a number between %1 and %2 which will be applied to all values.\n"
+ "These numbers will not be stored in the file.").arg(MINFILEHIDEF).arg(MAXFILEHIDEF),
+ (1.0 + (int)(1000.0 * rand() / (RAND_MAX + 1.0))) / 100.0,
+ MINFILEHIDEF, MAXFILEHIDEF, 2);
+ }
+}
+#ifndef _GNCFILEANON
+
+//********************************* convertCommodity *******************************************
+void MyMoneyGncReader::convertCommodity (const GncCommodity *gcm) {
+ Q_CHECK_PTR (gcm);
+ MyMoneySecurity equ;
+ if (m_commodityCount == 0) signalProgress (0, m_gncCommodityCount, i18n("Loading commodities..."));
+ if (!gcm->isCurrency()) { // currencies should not be present here but...
+ equ.setName (gcm->name());
+ equ.setTradingSymbol (gcm->id());
+ equ.setTradingMarket (gcm->space()); // the 'space' may be market or quote source, dep on what the user did
+ // don't set the source here since he may not want quotes
+ //equ.setValue ("kmm-online-source", gcm->space()); // we don't know, so use it as both
+ equ.setTradingCurrency (""); // not available here, will set from pricedb or transaction
+ equ.setSecurityType (MyMoneySecurity::SECURITY_STOCK); // default to it being a stock
+ //tell the storage objects we have a new equity object.
+ equ.setSmallestAccountFraction(gcm->fraction().toInt());
+ m_storage->addSecurity(equ);
+
+ //assign the gnucash id as the key into the map to find our id
+ if (gncdebug) qDebug ("mapping, key = %s, id = %s", gcm->id().latin1(), equ.id().data());
+ m_mapEquities[gcm->id().utf8()] = equ.id();
+ }
+ signalProgress (++m_commodityCount, 0);
+ return ;
+}
+
+//******************************* convertPrice ************************************************
+void MyMoneyGncReader::convertPrice (const GncPrice *gpr) {
+ Q_CHECK_PTR (gpr);
+ // add this to our price history
+ if (m_priceCount == 0) signalProgress (0, 1, i18n("Loading prices..."));
+ MyMoneyMoney rate = convBadValue (gpr->value());
+ if (gpr->commodity()->isCurrency()) {
+ MyMoneyPrice exchangeRate (gpr->commodity()->id().utf8(), gpr->currency()->id().utf8(),
+ gpr->priceDate(), rate, i18n("Imported History"));
+ m_storage->addPrice (exchangeRate);
+ } else {
+ MyMoneySecurity e = m_storage->security(m_mapEquities[gpr->commodity()->id().utf8()]);
+ if (gncdebug) qDebug ("Searching map, key = %s, found id = %s",
+ gpr->commodity()->id().latin1(), e.id().data());
+ e.setTradingCurrency (gpr->currency()->id().utf8());
+ MyMoneyPrice stockPrice(e.id(), gpr->currency()->id().utf8(), gpr->priceDate(), rate, i18n("Imported History"));
+ m_storage->addPrice (stockPrice);
+ m_storage->modifySecurity(e);
+ }
+ signalProgress (++m_priceCount, 0);
+ return ;
+}
+
+//*********************************convertAccount ****************************************
+void MyMoneyGncReader::convertAccount (const GncAccount* gac) {
+ Q_CHECK_PTR (gac);
+ TRY
+ // we don't care about the GNC root account
+ if("ROOT" == gac->type()) {
+ m_rootId = gac->id().utf8();
+ return;
+ }
+
+ MyMoneyAccount acc;
+ if (m_accountCount == 0) signalProgress (0, m_gncAccountCount, i18n("Loading accounts..."));
+ acc.setName(gac->name());
+
+ acc.setDescription(gac->desc());
+
+ QDate currentDate = QDate::currentDate();
+ acc.setOpeningDate(currentDate);
+ acc.setLastModified(currentDate);
+ acc.setLastReconciliationDate(currentDate);
+ if (gac->commodity()->isCurrency()) {
+ acc.setCurrencyId (gac->commodity()->id().utf8());
+ m_currencyCount[gac->commodity()->id()]++;
+ }
+
+ acc.setParentAccountId (gac->parent().utf8());
+ // now determine the account type and its parent id
+ /* This list taken from
+# Feb 2006: A RELAX NG Compact schema for gnucash "v2" XML files.
+# Copyright (C) 2006 Joshua Sled <jsled@asynchronous.org>
+"NO_TYPE" "BANK" "CASH" "CREDIT" "ASSET" "LIABILITY" "STOCK" "MUTUAL" "CURRENCY"
+"INCOME" "EXPENSE" "EQUITY" "RECEIVABLE" "PAYABLE" "CHECKING" "SAVINGS" "MONEYMRKT" "CREDITLINE"
+ Some don't seem to be used in practice. Not sure what CREDITLINE s/be converted as.
+ */
+ if ("BANK" == gac->type() || "CHECKING" == gac->type()) {
+ acc.setAccountType(MyMoneyAccount::Checkings);
+ } else if ("SAVINGS" == gac->type()) {
+ acc.setAccountType(MyMoneyAccount::Savings);
+ } else if ("ASSET" == gac->type()) {
+ acc.setAccountType(MyMoneyAccount::Asset);
+ } else if ("CASH" == gac->type()) {
+ acc.setAccountType(MyMoneyAccount::Cash);
+ } else if ("CURRENCY" == gac->type()) {
+ acc.setAccountType(MyMoneyAccount::Cash);
+ } else if ("STOCK" == gac->type() || "MUTUAL" == gac->type() ) {
+ // gnucash allows a 'broker' account to be denominated as type STOCK, but with
+ // a currency balance. We do not need to create a stock account for this
+ // actually, the latest version of gnc (1.8.8) doesn't seem to allow you to do
+ // this any more, though I do have one in my own account...
+ if (gac->commodity()->isCurrency()) {
+ acc.setAccountType(MyMoneyAccount::Investment);
+ } else {
+ acc.setAccountType(MyMoneyAccount::Stock);
+ }
+ } else if ("EQUITY" == gac->type()) {
+ acc.setAccountType(MyMoneyAccount::Equity);
+ } else if ("LIABILITY" == gac->type()) {
+ acc.setAccountType(MyMoneyAccount::Liability);
+ } else if ("CREDIT" == gac->type()) {
+ acc.setAccountType(MyMoneyAccount::CreditCard);
+ } else if ("INCOME" == gac->type()) {
+ acc.setAccountType(MyMoneyAccount::Income);
+ } else if ("EXPENSE" == gac->type()) {
+ acc.setAccountType(MyMoneyAccount::Expense);
+ } else if ("RECEIVABLE" == gac->type()) {
+ acc.setAccountType(MyMoneyAccount::Asset);
+ } else if ("PAYABLE" == gac->type()) {
+ acc.setAccountType(MyMoneyAccount::Liability);
+ } else if ("MONEYMRKT" == gac->type()) {
+ acc.setAccountType(MyMoneyAccount::MoneyMarket);
+ } else { // we have here an account type we can't currently handle
+ QString em =
+ i18n("Current importer does not recognize GnuCash account type %1").arg(gac->type());
+ throw new MYMONEYEXCEPTION (em);
+ }
+ // if no parent account is present, assign to one of our standard accounts
+ if ((acc.parentAccountId().isEmpty()) || (acc.parentAccountId() == m_rootId)) {
+ switch (acc.accountGroup()) {
+ case MyMoneyAccount::Asset: acc.setParentAccountId (m_storage->asset().id()); break;
+ case MyMoneyAccount::Liability: acc.setParentAccountId (m_storage->liability().id()); break;
+ case MyMoneyAccount::Income: acc.setParentAccountId (m_storage->income().id()); break;
+ case MyMoneyAccount::Expense: acc.setParentAccountId (m_storage->expense().id()); break;
+ case MyMoneyAccount::Equity: acc.setParentAccountId (m_storage->equity().id()); break;
+ default: break; // not necessary but avoids compiler warnings
+ }
+ }
+
+ // extra processing for a stock account
+ if (acc.accountType() == MyMoneyAccount::Stock) {
+ // save the id for later linking to investment account
+ m_stockList.append (gac->id());
+ // set the equity type
+ MyMoneySecurity e = m_storage->security (m_mapEquities[gac->commodity()->id().utf8()]);
+ if (gncdebug) qDebug ("Acct equity search, key = %s, found id = %s",
+ gac->commodity()->id().latin1(), e.id().data());
+ acc.setCurrencyId (e.id()); // actually, the security id
+ if ("MUTUAL" == gac->type()) {
+ e.setSecurityType (MyMoneySecurity::SECURITY_MUTUALFUND);
+ if (gncdebug) qDebug ("Setting %s to mutual", e.name().latin1());
+ m_storage->modifySecurity (e);
+ }
+ // See if he wants online quotes for this account
+ // NB: In gnc, this selection is per account, in KMM, per security
+ // This is unlikely to cause problems in practice. If it does,
+ // we probably need to introduce a 'pricing basis' in the account class
+ QPtrListIterator<GncObject> kvpi (gac->m_kvpList);
+ GncKvp *k;
+ while ((k = static_cast<GncKvp *>(kvpi.current())) != 0) {
+ if (k->key().contains("price-source") && k->type() == "string") {
+ getPriceSource (e, k->value());
+ break;
+ } else {
+ ++kvpi;
+ }
+ }
+ }
+
+ // check for tax-related status
+ QPtrListIterator<GncObject> kvpi (gac->m_kvpList);
+ GncKvp *k;
+ while ((k = static_cast<GncKvp *>(kvpi.current())) != 0) {
+ if (k->key().contains("tax-related") && k->type() == "integer" && k->value() == "1") {
+ acc.setValue ("Tax", "Yes");
+ break;
+ } else {
+ ++kvpi;
+ }
+ }
+
+ // all the details from the file about the account should be known by now.
+ // calling addAccount will automatically fill in the account ID.
+ m_storage->addAccount(acc);
+ m_mapIds[gac->id().utf8()] = acc.id(); // to link gnucash id to ours for tx posting
+
+ if (gncdebug) qDebug("Gnucash account %s has id of %s, type of %s, parent is %s",
+ gac->id().latin1(), acc.id().data(),
+ KMyMoneyUtils::accountTypeToString(acc.accountType()).latin1(), acc.parentAccountId().data());
+
+ signalProgress (++m_accountCount, 0);
+ return ;
+ PASS
+}
+
+//********************************************** convertTransaction *****************************
+void MyMoneyGncReader::convertTransaction (const GncTransaction *gtx) {
+ Q_CHECK_PTR (gtx);
+ MyMoneyTransaction tx;
+ MyMoneySplit split;
+ unsigned int i;
+
+ if (m_transactionCount == 0) signalProgress (0, m_gncTransactionCount, i18n("Loading transactions..."));
+ // initialize class variables related to transactions
+ m_txCommodity = "";
+ m_txPayeeId = "";
+ m_potentialTransfer = true;
+ m_splitList.clear(); m_liabilitySplitList.clear(); m_otherSplitList.clear();
+ // payee, dates, commodity
+ if (!gtx->desc().isEmpty()) m_txPayeeId = createPayee (gtx->desc());
+ tx.setEntryDate (gtx->dateEntered());
+ tx.setPostDate (gtx->datePosted());
+ m_txDatePosted = tx.postDate(); // save for use in splits
+ m_txChequeNo = gtx->no(); // ditto
+ tx.setCommodity (gtx->currency().utf8());
+ m_txCommodity = tx.commodity(); // save in storage, maybe needed for Orphan accounts
+ // process splits
+ for (i = 0; i < gtx->splitCount(); i++) {
+ convertSplit (static_cast<const GncSplit *>(gtx->getSplit (i)));
+ }
+ // handle the odd case of just one split, which gnc allows,
+ // by just duplicating the split
+ // of course, we should change the sign but this case has only ever been seen
+ // when the balance is zero, and can cause kmm to crash, so...
+ if (gtx->splitCount() == 1) {
+ convertSplit (static_cast<const GncSplit *>(gtx->getSplit (0)));
+ }
+ m_splitList += m_liabilitySplitList += m_otherSplitList;
+ // the splits are in order in splitList. Link them to the tx. also, determine the
+ // action type, and fill in some fields which gnc holds at transaction level
+ // first off, is it a transfer (can only have 2 splits?)
+ // also, a tx with just 2 splits is shown by GnuCash as non-split
+ bool nonSplitTx = true;
+ if (m_splitList.count() != 2) {
+ m_potentialTransfer = false;
+ nonSplitTx = false;
+ }
+ for (i = 0; i < gtx->kvpCount(); i++ ) {
+ const GncKvp *slot = gtx->getKvp(i);
+ if (slot->key() == "notes") tx.setMemo(slot->value());
+ }
+ QValueList<MyMoneySplit>::iterator it = m_splitList.begin();
+ while (!m_splitList.isEmpty()) {
+ split = *it;
+ // at this point, if m_potentialTransfer is still true, it is actually one!
+ if (m_potentialTransfer) split.setAction(MyMoneySplit::ActionTransfer);
+ if ((m_useTxNotes) // if use txnotes option is set
+ && (nonSplitTx) // and it's a (GnuCash) non-split transaction
+ && (!tx.memo().isEmpty())) // and tx notes are present
+ split.setMemo(tx.memo()); // use the tx notes as memo
+ tx.addSplit(split);
+ it = m_splitList.remove(it);
+ }
+ // memo - set from split - not any more
+ //tx.setMemo(txMemo);
+ m_storage->addTransaction(tx, true); // all done, add the transaction to storage
+ signalProgress (++m_transactionCount, 0);
+ return ;
+}
+//******************************************convertSplit********************************
+void MyMoneyGncReader::convertSplit (const GncSplit *gsp) {
+ Q_CHECK_PTR (gsp);
+ MyMoneySplit split;
+ MyMoneyAccount splitAccount;
+ // find the kmm account id coresponding to the gnc id
+ QString kmmAccountId;
+ map_accountIds::Iterator id = m_mapIds.find(gsp->acct().utf8());
+ if (id != m_mapIds.end()) {
+ kmmAccountId = id.data();
+ } else { // for the case where the acs not found (which shouldn't happen?), create an account with gnc name
+ kmmAccountId = createOrphanAccount (gsp->acct());
+ }
+ // find the account pointer and save for later
+ splitAccount = m_storage->account (kmmAccountId);
+ // print some data so we can maybe identify this split later
+ // TODO : prints personal data
+ //if (gncdebug) qDebug ("Split data - gncid %s, kmmid %s, memo %s, value %s, recon state %s",
+ // gsp->acct().latin1(), kmmAccountId.data(), gsp->memo().latin1(), gsp->value().latin1(),
+ // gsp->recon().latin1());
+ // payee id
+ split.setPayeeId (m_txPayeeId.utf8());
+ // reconciled state and date
+ switch (gsp->recon().at(0).latin1()) {
+ case 'n':
+ split.setReconcileFlag(MyMoneySplit::NotReconciled); break;
+ case 'c':
+ split.setReconcileFlag(MyMoneySplit::Cleared); break;
+ case 'y':
+ split.setReconcileFlag(MyMoneySplit::Reconciled); break;
+ }
+ split.setReconcileDate(gsp->reconDate());
+ // memo
+ split.setMemo(gsp->memo());
+ // accountId
+ split.setAccountId (kmmAccountId);
+ // cheque no
+ split.setNumber (m_txChequeNo);
+ // value and quantity
+ MyMoneyMoney splitValue (convBadValue (gsp->value()));
+ if (gsp->value() == "-1/0") { // treat gnc invalid value as zero
+ // it's not quite a consistency check, but easier to treat it as such
+ postMessage ("CC", 4, splitAccount.name().latin1(), m_txDatePosted.toString(Qt::ISODate).latin1());
+ }
+ MyMoneyMoney splitQuantity(convBadValue(gsp->qty()));
+ split.setValue (splitValue);
+ // if split currency = tx currency, set shares = value (14/10/05)
+ if (splitAccount.currencyId() == m_txCommodity) {
+ split.setShares (splitValue);
+ } else {
+ split.setShares (splitQuantity);
+ }
+
+ // in kmm, the first split is important. in this routine we will
+ // save the splits in our split list with the priority:
+ // 1. assets
+ // 2. liabilities
+ // 3. others (categories)
+ // but keeping each in same order as gnucash
+ MyMoneySecurity e;
+ MyMoneyMoney price, newPrice(0);
+
+ switch (splitAccount.accountGroup()) {
+ case MyMoneyAccount::Asset:
+ if (splitAccount.accountType() == MyMoneyAccount::Stock) {
+ split.value() == MyMoneyMoney(0) ?
+ split.setAction (MyMoneySplit::ActionAddShares) : // free shares?
+ split.setAction (MyMoneySplit::ActionBuyShares);
+ m_potentialTransfer = false; // ?
+ // add a price history entry
+ e = m_storage->security(splitAccount.currencyId());
+ // newPrice fix supplied by Phil Longstaff
+ price = split.value() / split.shares();
+#define NEW_DENOM 10000
+ if (!split.shares().isZero()) // patch to fix divide by zero?
+ newPrice = MyMoneyMoney ( price.toDouble(), (signed64)NEW_DENOM );
+ if (!newPrice.isZero()) {
+ TRY
+ // we can't use m_storage->security coz security list is not built yet
+ m_storage->currency(m_txCommodity); // will throw exception if not currency
+ e.setTradingCurrency (m_txCommodity);
+ if (gncdebug) qDebug ("added price for %s, %s date %s",
+ e.name().latin1(), newPrice.toString().latin1(),
+ m_txDatePosted.toString(Qt::ISODate).latin1());
+ m_storage->modifySecurity(e);
+ MyMoneyPrice dealPrice (e.id(), m_txCommodity, m_txDatePosted, newPrice, i18n("Imported Transaction"));
+ m_storage->addPrice (dealPrice);
+ CATCH // stock transfer; treat like free shares?
+ split.setAction (MyMoneySplit::ActionAddShares);
+ delete e;
+ }
+ }
+ } else { // not stock
+ if (split.value().isNegative()) {
+ bool isNumeric = false;
+ if (!split.number().isEmpty()) {
+ split.number().toLong(&isNumeric); // No QString.isNumeric()??
+ }
+ if (isNumeric) {
+ split.setAction (MyMoneySplit::ActionCheck);
+ } else {
+ split.setAction (MyMoneySplit::ActionWithdrawal);
+ }
+ } else {
+ split.setAction (MyMoneySplit::ActionDeposit);
+ }
+ }
+ m_splitList.append(split);
+ break;
+ case MyMoneyAccount::Liability:
+ split.value().isNegative() ?
+ split.setAction (MyMoneySplit::ActionWithdrawal) :
+ split.setAction (MyMoneySplit::ActionDeposit);
+ m_liabilitySplitList.append(split);
+ break;
+ default:
+ m_potentialTransfer = false;
+ m_otherSplitList.append (split);
+ }
+ // backdate the account opening date if necessary
+ if (m_txDatePosted < splitAccount.openingDate()) {
+ splitAccount.setOpeningDate(m_txDatePosted);
+ m_storage->modifyAccount(splitAccount);
+ }
+ return ;
+}
+//********************************* convertTemplateTransaction **********************************************
+MyMoneyTransaction MyMoneyGncReader::convertTemplateTransaction (const QString& schedName, const GncTransaction *gtx) {
+
+ Q_CHECK_PTR (gtx);
+ MyMoneyTransaction tx;
+ MyMoneySplit split;
+ unsigned int i;
+ if (m_templateCount == 0) signalProgress (0, 1, i18n("Loading templates..."));
+
+ // initialize class variables related to transactions
+ m_txCommodity = "";
+ m_txPayeeId = "";
+ m_potentialTransfer = true;
+ m_splitList.clear(); m_liabilitySplitList.clear(); m_otherSplitList.clear();
+
+ // payee, dates, commodity
+ if (!gtx->desc().isEmpty()) {
+ m_txPayeeId = createPayee (gtx->desc());
+ } else {
+ m_txPayeeId = createPayee (i18n("Unknown payee")); // schedules require a payee tho normal tx's don't. not sure why...
+ }
+ tx.setEntryDate(gtx->dateEntered());
+ tx.setPostDate(gtx->datePosted());
+ m_txDatePosted = tx.postDate();
+ tx.setCommodity (gtx->currency().utf8());
+ m_txCommodity = tx.commodity(); // save for possible use in orphan account
+ // process splits
+ for (i = 0; i < gtx->splitCount(); i++) {
+ convertTemplateSplit (schedName, static_cast<const GncTemplateSplit *>(gtx->getSplit (i)));
+ }
+ // determine the action type for the splits and link them to the template tx
+ /*QString negativeActionType, positiveActionType;
+ if (!m_splitList.isEmpty()) { // if there are asset splits
+ positiveActionType = MyMoneySplit::ActionDeposit;
+ negativeActionType = MyMoneySplit::ActionWithdrawal;
+ } else { // if there are liability splits
+ positiveActionType = MyMoneySplit::ActionWithdrawal;
+ negativeActionType = MyMoneySplit::ActionDeposit;
+} */
+ if (!m_otherSplitList.isEmpty()) m_potentialTransfer = false; // tfrs can occur only between assets and asset/liabilities
+ m_splitList += m_liabilitySplitList += m_otherSplitList;
+ // the splits are in order in splitList. Transfer them to the tx
+ // also, determine the action type. first off, is it a transfer (can only have 2 splits?)
+ if (m_splitList.count() != 2) m_potentialTransfer = false;
+ // at this point, if m_potentialTransfer is still true, it is actually one!
+ QString txMemo = "";
+ QValueList<MyMoneySplit>::iterator it = m_splitList.begin();
+ while (!m_splitList.isEmpty()) {
+ split = *it;
+ if (m_potentialTransfer) {
+ split.setAction(MyMoneySplit::ActionTransfer);
+ } else {
+ if (split.value().isNegative()) {
+ //split.setAction (negativeActionType);
+ split.setAction (MyMoneySplit::ActionWithdrawal);
+ } else {
+ //split.setAction (positiveActionType);
+ split.setAction (MyMoneySplit::ActionDeposit);
+ }
+ }
+ split.setNumber(gtx->no()); // set cheque no (or equivalent description)
+ // Arbitrarily, save the first non-null split memo as the memo for the whole tx
+ // I think this is necessary because txs with just 2 splits (the majority)
+ // are not viewable as split transactions in kmm so the split memo is not seen
+ if ((txMemo.isEmpty()) && (!split.memo().isEmpty())) txMemo = split.memo();
+ tx.addSplit(split);
+ it = m_splitList.remove(it);
+ }
+ // memo - set from split
+ tx.setMemo (txMemo);
+ signalProgress (++m_templateCount, 0);
+ return (tx);
+}
+//********************************* convertTemplateSplit ****************************************************
+void MyMoneyGncReader::convertTemplateSplit (const QString& schedName, const GncTemplateSplit *gsp) {
+ Q_CHECK_PTR (gsp);
+ // convertTemplateSplit
+ MyMoneySplit split;
+ MyMoneyAccount splitAccount;
+ unsigned int i, j;
+ bool nonNumericFormula = false;
+
+ // action, value and account will be set from slots
+ // reconcile state, always Not since it hasn't even been posted yet (?)
+ split.setReconcileFlag(MyMoneySplit::NotReconciled);
+ // memo
+ split.setMemo(gsp->memo());
+ // payee id
+ split.setPayeeId (m_txPayeeId.utf8());
+ // read split slots (KVPs)
+ int xactionCount = 0;
+ int validSlotCount = 0;
+ QString gncAccountId;
+ for (i = 0; i < gsp->kvpCount(); i++ ) {
+ const GncKvp *slot = gsp->getKvp(i);
+ if ((slot->key() == "sched-xaction") && (slot->type() == "frame")) {
+ bool bFoundStringCreditFormula = false;
+ bool bFoundStringDebitFormula = false;
+ bool bFoundGuidAccountId = false;
+ QString gncCreditFormula, gncDebitFormula;
+ for (j = 0; j < slot->kvpCount(); j++) {
+ const GncKvp *subSlot = slot->getKvp (j);
+ // again, see comments above. when we have a full specification
+ // of all the options available to us, we can no doubt improve on this
+ if ((subSlot->key() == "credit-formula") && (subSlot->type() == "string")) {
+ gncCreditFormula = subSlot->value();
+ bFoundStringCreditFormula = true;
+ }
+ if ((subSlot->key() == "debit-formula") && (subSlot->type() == "string")) {
+ gncDebitFormula = subSlot->value();
+ bFoundStringDebitFormula = true;
+ }
+ if ((subSlot->key() == "account") && (subSlot->type() == "guid")) {
+ gncAccountId = subSlot->value();
+ bFoundGuidAccountId = true;
+ }
+ }
+ // all data read, now check we have everything
+ if ((bFoundStringCreditFormula) && (bFoundStringDebitFormula) && (bFoundGuidAccountId)) {
+ if (gncdebug) qDebug ("Found valid slot; credit %s, debit %s, acct %s",
+ gncCreditFormula.latin1(), gncDebitFormula.latin1(), gncAccountId.latin1());
+ validSlotCount++;
+ }
+ // validate numeric, work out sign
+ MyMoneyMoney exFormula (0);
+ exFormula.setNegativeMonetarySignPosition (MyMoneyMoney::BeforeQuantityMoney);
+ QString numericTest;
+ char crdr=0 ;
+ if (!gncCreditFormula.isEmpty()) {
+ crdr = 'C';
+ numericTest = gncCreditFormula;
+ } else if (!gncDebitFormula.isEmpty()) {
+ crdr = 'D';
+ numericTest = gncDebitFormula;
+ }
+ kMyMoneyMoneyValidator v (0);
+ int pos; // useless, but required for validator
+ if (v.validate (numericTest, pos) == QValidator::Acceptable) {
+ switch (crdr) {
+ case 'C':
+ exFormula = QString ("-" + numericTest); break;
+ case 'D':
+ exFormula = numericTest;
+ }
+ } else {
+ if (gncdebug) qDebug ("%s is not numeric", numericTest.latin1());
+ nonNumericFormula = true;
+ }
+ split.setValue (exFormula);
+ xactionCount++;
+ } else {
+ postMessage ("SC", 3, schedName.latin1(), slot->key().latin1(), slot->type().latin1());
+ m_suspectSchedule = true;
+ }
+ }
+ // report this as untranslatable tx
+ if (xactionCount > 1) {
+ postMessage ("SC", 4, schedName.latin1());
+ m_suspectSchedule = true;
+ }
+ if (validSlotCount == 0) {
+ postMessage ("SC", 5, schedName.latin1());
+ m_suspectSchedule = true;
+ }
+ if (nonNumericFormula) {
+ postMessage ("SC", 6, schedName.latin1());
+ m_suspectSchedule = true;
+ }
+ // find the kmm account id coresponding to the gnc id
+ QString kmmAccountId;
+ map_accountIds::Iterator id = m_mapIds.find(gncAccountId.utf8());
+ if (id != m_mapIds.end()) {
+ kmmAccountId = id.data();
+ } else { // for the case where the acs not found (which shouldn't happen?), create an account with gnc name
+ kmmAccountId = createOrphanAccount (gncAccountId);
+ }
+ splitAccount = m_storage->account (kmmAccountId);
+ split.setAccountId (kmmAccountId);
+ // if split currency = tx currency, set shares = value (14/10/05)
+ if (splitAccount.currencyId() == m_txCommodity) {
+ split.setShares (split.value());
+ } /* else { //FIXME: scheduled currency or investment tx needs to be investigated
+ split.setShares (splitQuantity);
+ } */
+ // add the split to one of the lists
+ switch (splitAccount.accountGroup()) {
+ case MyMoneyAccount::Asset:
+ m_splitList.append (split); break;
+ case MyMoneyAccount::Liability:
+ m_liabilitySplitList.append (split); break;
+ default:
+ m_otherSplitList.append (split);
+ }
+ // backdate the account opening date if necessary
+ if (m_txDatePosted < splitAccount.openingDate()) {
+ splitAccount.setOpeningDate(m_txDatePosted);
+ m_storage->modifyAccount(splitAccount);
+ }
+ return ;
+}
+//********************************* convertSchedule ********************************************************
+void MyMoneyGncReader::convertSchedule (const GncSchedule *gsc) {
+ TRY
+ Q_CHECK_PTR (gsc);
+ MyMoneySchedule sc;
+ MyMoneyTransaction tx;
+ m_suspectSchedule = false;
+ QDate startDate, nextDate, lastDate, endDate; // for date calculations
+ QDate today = QDate::currentDate();
+ int numOccurs, remOccurs;
+
+ if (m_scheduleCount == 0) signalProgress (0, m_gncScheduleCount, i18n("Loading schedules..."));
+ // schedule name
+ sc.setName(gsc->name());
+ // find the transaction template as stored earlier
+ QPtrListIterator<GncTransaction> itt (m_templateList);
+ GncTransaction *ttx;
+ while ((ttx = itt.current()) != 0) {
+ // the id to match against is the split:account value in the splits
+ if (static_cast<const GncTemplateSplit *>(ttx->getSplit(0))->acct() == gsc->templId()) break;
+ ++itt;
+ }
+ if (itt == 0) {
+ throw new MYMONEYEXCEPTION (i18n("Can't find template transaction for schedule %1").arg(sc.name()));
+ } else {
+ tx = convertTemplateTransaction (sc.name(), *itt);
+ }
+ tx.clearId();
+
+// define the conversion table for intervals
+ struct convIntvl {
+ QString gncType; // the gnucash name
+ unsigned char interval; // for date calculation
+ unsigned int intervalCount;
+ MyMoneySchedule::occurenceE occ; // equivalent occurence code
+ MyMoneySchedule::weekendOptionE wo;
+ };
+/* other intervals supported by gnc according to Josh Sled's schema (see above)
+ "none" "semi_monthly"
+ */
+ /* some of these type names do not appear in gnucash and are difficult to generate for
+ pre 2.2 files.They can be generated for 2.2 however, by GncRecurrence::getFrequency() */
+ static convIntvl vi [] = {
+ {"once", 'o', 1, MyMoneySchedule::OCCUR_ONCE, MyMoneySchedule::MoveNothing },
+ {"daily" , 'd', 1, MyMoneySchedule::OCCUR_DAILY, MyMoneySchedule::MoveNothing },
+ //{"daily_mf", 'd', 1, MyMoneySchedule::OCCUR_DAILY, MyMoneySchedule::MoveMonday }, doesn't work, need new freq in kmm
+ {"30-days" , 'd', 30, MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS, MyMoneySchedule::MoveNothing },
+ {"weekly", 'w', 1, MyMoneySchedule::OCCUR_WEEKLY, MyMoneySchedule::MoveNothing },
+ {"bi_weekly", 'w', 2, MyMoneySchedule::OCCUR_EVERYOTHERWEEK, MyMoneySchedule::MoveNothing },
+ {"three-weekly", 'w', 3, MyMoneySchedule::OCCUR_EVERYTHREEWEEKS, MyMoneySchedule::MoveNothing },
+ {"four-weekly", 'w', 4, MyMoneySchedule::OCCUR_EVERYFOURWEEKS,
+ MyMoneySchedule::MoveNothing },
+ {"eight-weekly", 'w', 8, MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS, MyMoneySchedule::MoveNothing },
+ {"monthly", 'm', 1, MyMoneySchedule::OCCUR_MONTHLY, MyMoneySchedule::MoveNothing },
+ {"two-monthly", 'm', 2, MyMoneySchedule::OCCUR_EVERYOTHERMONTH,
+ MyMoneySchedule::MoveNothing },
+ {"quarterly", 'm', 3, MyMoneySchedule::OCCUR_QUARTERLY, MyMoneySchedule::MoveNothing },
+ {"tri_annually", 'm', 4, MyMoneySchedule::OCCUR_EVERYFOURMONTHS, MyMoneySchedule::MoveNothing },
+ {"semi_yearly", 'm', 6, MyMoneySchedule::OCCUR_TWICEYEARLY, MyMoneySchedule::MoveNothing },
+ {"yearly", 'y', 1, MyMoneySchedule::OCCUR_YEARLY, MyMoneySchedule::MoveNothing },
+ {"two-yearly", 'y', 2, MyMoneySchedule::OCCUR_EVERYOTHERYEAR,
+ MyMoneySchedule::MoveNothing },
+ {"zzz", 'y', 1, MyMoneySchedule::OCCUR_YEARLY, MyMoneySchedule::MoveNothing}
+ // zzz = stopper, may cause problems. what else can we do?
+ };
+
+ QString frequency = "unknown"; // set default to unknown frequency
+ bool unknownOccurs = false; // may have zero, or more than one frequency/recurrence spec
+ QString schedEnabled;
+ if (gsc->version() == "2.0.0") {
+ if (gsc->m_vpRecurrence.count() != 1) {
+ unknownOccurs = true;
+ } else {
+ const GncRecurrence *gre = gsc->m_vpRecurrence.first();
+ //qDebug (QString("Sched %1, pt %2, mu %3, sd %4").arg(gsc->name()).arg(gre->periodType())
+ // .arg(gre->mult()).arg(gre->startDate().toString(Qt::ISODate)));
+ frequency = gre->getFrequency();
+ schedEnabled = gsc->enabled();
+ }
+ sc.setOccurence(MyMoneySchedule::OCCUR_ONCE); // FIXME - how to convert
+ } else {
+ // find this interval
+ const GncFreqSpec *fs = gsc->getFreqSpec();
+ if (fs == NULL) {
+ unknownOccurs = true;
+ } else {
+ frequency = fs->intervalType();
+ if (!fs->m_fsList.isEmpty()) unknownOccurs = true; // nested freqspec
+ }
+ schedEnabled = "y"; // earlier versions did not have an enable flag
+ }
+
+ int i;
+ for (i = 0; vi[i].gncType != "zzz"; i++) {
+ if (frequency == vi[i].gncType) break;
+ }
+ if (vi[i].gncType == "zzz") {
+ postMessage ("SC", 1, sc.name().latin1(), frequency.latin1());
+ i = 0; // treat as single occurrence
+ m_suspectSchedule = true;
+ }
+ if (unknownOccurs) {
+ postMessage ("SC", 7, sc.name().latin1());
+ m_suspectSchedule = true;
+ }
+ // set the occurrence interval, weekend option, start date
+ sc.setOccurence (vi[i].occ);
+ sc.setWeekendOption (vi[i].wo);
+ sc.setStartDate (gsc->startDate());
+ // if a last date was specified, use it, otherwise try to work out the last date
+ sc.setLastPayment(gsc->lastDate());
+ numOccurs = gsc->numOccurs().toInt();
+ if (sc.lastPayment() == QDate()) {
+ nextDate = lastDate = gsc->startDate();
+ while ((nextDate < today) && (numOccurs-- != 0)) {
+ lastDate = nextDate;
+ nextDate = incrDate (lastDate, vi[i].interval, vi[i].intervalCount);
+ }
+ sc.setLastPayment(lastDate);
+ }
+ // under Tom's new regime, the tx dates are the next due date (I think)
+ tx.setPostDate(incrDate(sc.lastPayment(), vi[i].interval, vi[i].intervalCount));
+ tx.setEntryDate(incrDate(sc.lastPayment(), vi[i].interval, vi[i].intervalCount));
+ // if an end date was specified, use it, otherwise if the input file had a number
+ // of occurs remaining, work out the end date
+ sc.setEndDate(gsc->endDate());
+ numOccurs = gsc->numOccurs().toInt();
+ remOccurs = gsc->remOccurs().toInt();
+ if ((sc.endDate() == QDate()) && (remOccurs > 0)) {
+ endDate = sc.lastPayment();
+ while (remOccurs-- > 0) {
+ endDate = incrDate (endDate, vi[i].interval, vi[i].intervalCount);
+ }
+ sc.setEndDate(endDate);
+ }
+ // Check for sched deferred interval. Don't know how/if we can handle it, or even what it means...
+ if (gsc->getSchedDef() != NULL) {
+ postMessage ("SC", 8, sc.name().latin1());
+ m_suspectSchedule = true;
+ }
+ // payment type, options
+ sc.setPaymentType((MyMoneySchedule::paymentTypeE)MyMoneySchedule::STYPE_OTHER);
+ sc.setFixed (!m_suspectSchedule); // if any probs were found, set it as variable so user will always be prompted
+ // we don't currently have a 'disable' option, but just make sure auto-enter is off if not enabled
+ //qDebug(QString("%1 and %2").arg(gsc->autoCreate()).arg(schedEnabled));
+ sc.setAutoEnter ((gsc->autoCreate() == "y") && (schedEnabled == "y"));
+ //qDebug(QString("autoEnter set to %1").arg(sc.autoEnter()));
+ // type
+ QString actionType = tx.splits().first().action();
+ if (actionType == MyMoneySplit::ActionDeposit) {
+ sc.setType((MyMoneySchedule::typeE)MyMoneySchedule::TYPE_DEPOSIT);
+ } else if (actionType == MyMoneySplit::ActionTransfer) {
+ sc.setType((MyMoneySchedule::typeE)MyMoneySchedule::TYPE_TRANSFER);
+ } else {
+ sc.setType((MyMoneySchedule::typeE)MyMoneySchedule::TYPE_BILL);
+ }
+ // finally, set the transaction pointer
+ sc.setTransaction(tx);
+ //tell the storage objects we have a new schedule object.
+ if (m_suspectSchedule && m_dropSuspectSchedules) {
+ postMessage ("SC", 2, sc.name().latin1());
+ } else {
+ m_storage->addSchedule(sc);
+ if (m_suspectSchedule)
+ m_suspectList.append (sc.id());
+ }
+ signalProgress (++m_scheduleCount, 0);
+ return ;
+ PASS
+}
+//********************************* convertFreqSpec ********************************************************
+void MyMoneyGncReader::convertFreqSpec (const GncFreqSpec *) {
+ // Nowt to do here at the moment, convertSched only retrieves the interval type
+ // but we will probably need to look into the nested freqspec when we properly implement semi-monthly and stuff
+ return ;
+}
+//********************************* convertRecurrence ********************************************************
+void MyMoneyGncReader::convertRecurrence (const GncRecurrence *) {
+ return ;
+}
+
+//**********************************************************************************************************
+//************************************* terminate **********************************************************
+void MyMoneyGncReader::terminate () {
+ TRY
+ // All data has been converted and added to storage
+ // this code is just temporary to show us what is in the file.
+ if (gncdebug) qDebug("%d accounts found in the GnuCash file", (unsigned int)m_mapIds.count());
+ for (map_accountIds::Iterator it = m_mapIds.begin(); it != m_mapIds.end(); ++it) {
+ if (gncdebug) qDebug("key = %s, value = %s", it.key().data(), it.data().data());
+ }
+ // first step is to implement the users investment option, now we
+ // have all the accounts available
+ QValueList<QString>::iterator stocks;
+ for (stocks = m_stockList.begin(); stocks != m_stockList.end(); ++stocks) {
+ checkInvestmentOption (*stocks);
+ }
+ // Next step is to walk the list and assign the parent/child relationship between the objects.
+ unsigned int i = 0;
+ signalProgress (0, m_accountCount, i18n ("Reorganizing accounts..."));
+ QValueList<MyMoneyAccount> list;
+ QValueList<MyMoneyAccount>::Iterator acc;
+ m_storage->accountList(list);
+ for (acc = list.begin(); acc != list.end(); ++acc) {
+ if ((*acc).parentAccountId() == m_storage->asset().id()) {
+ MyMoneyAccount assets = m_storage->asset();
+ m_storage->addAccount(assets, (*acc));
+ if (gncdebug) qDebug("Account id %s is a child of the main asset account", (*acc).id().data());
+ } else if ((*acc).parentAccountId() == m_storage->liability().id()) {
+ MyMoneyAccount liabilities = m_storage->liability();
+ m_storage->addAccount(liabilities, (*acc));
+ if (gncdebug) qDebug("Account id %s is a child of the main liability account", (*acc).id().data());
+ } else if ((*acc).parentAccountId() == m_storage->income().id()) {
+ MyMoneyAccount incomes = m_storage->income();
+ m_storage->addAccount(incomes, (*acc));
+ if (gncdebug) qDebug("Account id %s is a child of the main income account", (*acc).id().data());
+ } else if ((*acc).parentAccountId() == m_storage->expense().id()) {
+ MyMoneyAccount expenses = m_storage->expense();
+ m_storage->addAccount(expenses, (*acc));
+ if (gncdebug) qDebug("Account id %s is a child of the main expense account", (*acc).id().data());
+ } else if ((*acc).parentAccountId() == m_storage->equity().id()) {
+ MyMoneyAccount equity = m_storage->equity();
+ m_storage->addAccount(equity, (*acc));
+ if (gncdebug) qDebug("Account id %s is a child of the main equity account", (*acc).id().data());
+ } else if ((*acc).parentAccountId() == m_rootId) {
+ if (gncdebug) qDebug("Account id %s is a child of root", (*acc).id().data());
+ } else {
+ // it is not under one of the main accounts, so find gnucash parent
+ QString parentKey = (*acc).parentAccountId();
+ if (gncdebug) qDebug ("acc %s, parent %s", (*acc).id().data(),
+ (*acc).parentAccountId().data());
+ map_accountIds::Iterator id = m_mapIds.find(parentKey);
+ if (id != m_mapIds.end()) {
+ if (gncdebug) qDebug("Setting account id %s's parent account id to %s",
+ (*acc).id().data(), id.data().data());
+ MyMoneyAccount parent = m_storage->account(id.data());
+ parent = checkConsistency (parent, (*acc));
+ m_storage->addAccount (parent, (*acc));
+ } else {
+ throw new MYMONEYEXCEPTION ("terminate() could not find account id");
+ }
+ }
+ signalProgress (++i, 0);
+ } // end for account
+ signalProgress (0, 1, (".")); // debug - get rid of reorg message
+ // offer the most common account currency as a default
+ QString mainCurrency = "";
+ unsigned int maxCount = 0;
+ QMap<QString, unsigned int>::ConstIterator it;
+ for (it = m_currencyCount.begin(); it != m_currencyCount.end(); ++it) {
+ if (it.data() > maxCount) {
+ maxCount = it.data();
+ mainCurrency = it.key();
+ }
+ }
+
+ if (mainCurrency != "") {
+ /* fix for qt3.3.4?. According to Qt docs, this should return the enum id of the button pressed, and
+ indeed it used to do so. However now it seems to return the index of the button. In this case it doesn't matter,
+ since for Yes, the id is 3 and the index is 0, whereas the No button will return 4 or 1. So we test for either Yes case */
+ /* and now it seems to have changed again, returning 259 for a Yes??? so use KMessagebox */
+ QString question = i18n("Your main currency seems to be %1 (%2); do you want to set this as your base currency?")
+ .arg(mainCurrency).arg(m_storage->currency(mainCurrency.utf8()).name());
+ if(KMessageBox::questionYesNo(0, question, PACKAGE) == KMessageBox::Yes) {
+ m_storage->setValue ("kmm-baseCurrency", mainCurrency);
+ }
+ }
+ // now produce the end of job reports - first, work out which ones are required
+ m_ccCount = 0, m_orCount = 0, m_scCount = 0;
+ for (i = 0; i < m_messageList.count(); i++) {
+ if ((*m_messageList.at(i)).source == "CC") m_ccCount++;
+ if ((*m_messageList.at(i)).source == "OR") m_orCount++;
+ if ((*m_messageList.at(i)).source == "SC") m_scCount++;
+ }
+ QValueList<QString> sectionsToReport; // list of sections needing report
+ sectionsToReport.append ("MN"); // always build the main section
+ if (m_ccCount > 0) sectionsToReport.append ("CC");
+ if (m_orCount > 0) sectionsToReport.append ("OR");
+ if (m_scCount > 0) sectionsToReport.append ("SC");
+ // produce the sections in message boxes
+ bool exit = false;
+ for (i = 0; (i < sectionsToReport.count()) && !exit; i++) {
+ QString button0Text = i18n("More");
+ if (i + 1 == sectionsToReport.count())
+ button0Text = i18n("Done"); // last section
+ KGuiItem yesItem(button0Text, QIconSet(), "", "");
+ KGuiItem noItem(i18n("Save Report"), QIconSet(), "", "");
+
+ switch(KMessageBox::questionYesNoCancel(0,
+ buildReportSection (*sectionsToReport.at(i)),
+ PACKAGE,
+ yesItem, noItem)) {
+ case KMessageBox::Yes:
+ break;
+ case KMessageBox::No:
+ exit = writeReportToFile (sectionsToReport);
+ break;
+ default:
+ exit = true;
+ break;
+ }
+ }
+
+ for (i = 0; i < m_suspectList.count(); i++) {
+ MyMoneySchedule sc = m_storage->schedule(m_suspectList[i]);
+ KEditScheduleDlg *s;
+ switch(KMessageBox::warningYesNo(0, i18n("Problems were encountered in converting schedule '%1'.\nDo you want to review or edit it now?").arg(sc.name()), PACKAGE)) {
+ case KMessageBox::Yes:
+ s = new KEditScheduleDlg (sc);
+ // FIXME: connect newCategory to something useful, so that we
+ // can create categories from within the dialog
+ if (s->exec())
+ m_storage->modifySchedule (s->schedule());
+ delete s;
+ break;
+
+ default:
+ break;
+ }
+ }
+ PASS
+}
+//************************************ buildReportSection************************************
+QString MyMoneyGncReader::buildReportSection (const QString& source) {
+ TRY
+ QString s = "";
+ bool more = false;
+ if (source == "MN") {
+ s.append (i18n("Found:\n\n"));
+ s.append (QString::number(m_commodityCount) + i18n(" commodities (equities)\n"));
+ s.append (QString::number(m_priceCount) + i18n(" prices\n"));
+ s.append (QString::number(m_accountCount) + i18n(" accounts\n"));
+ s.append (QString::number(m_transactionCount) + i18n(" transactions\n"));
+ s.append (QString::number(m_scheduleCount) + i18n(" schedules\n"));
+ s.append ("\n\n");
+ if (m_ccCount == 0) {
+ s.append (i18n("No inconsistencies were detected"));
+ } else {
+ s.append (QString::number(m_ccCount) + i18n(" inconsistencies were detected and corrected\n"));
+ more = true;
+ }
+ if (m_orCount > 0) {
+ s.append ("\n\n");
+ s.append (QString::number(m_orCount) + i18n(" orphan accounts were created\n"));
+ more = true;
+ }
+ if (m_scCount > 0) {
+ s.append ("\n\n");
+ s.append (QString::number(m_scCount) + i18n(" possible schedule problems were noted\n"));
+ more = true;
+ }
+ QString unsupported ("");
+ QString lineSep ("\n - ");
+ if (m_smallBusinessFound) unsupported.append(lineSep + i18n("Small Business Features (Customers, Invoices, etc.)"));
+ if (m_budgetsFound) unsupported.append(lineSep + i18n("Budgets"));
+ if (m_lotsFound) unsupported.append(lineSep + i18n("Lots"));
+ if (!unsupported.isEmpty()) {
+ unsupported.prepend(i18n("The following features found in your file are not currently supported:"));
+ s.append(unsupported);
+ }
+ if (more) s.append (i18n("\n\nPress More for further information"));
+ } else { // we need to retrieve the posted messages for this source
+ if (gncdebug) qDebug("Building messages for source %s", source.latin1());
+ unsigned int i, j;
+ for (i = 0; i < m_messageList.count(); i++) {
+ GncMessageArgs *m = m_messageList.at(i);
+ if (m->source == source) {
+ if (gncdebug) qDebug("%s", QString("build text source %1, code %2, argcount %3")
+ .arg(m->source).arg(m->code).arg(m->args.count()).data());
+ QString ss = GncMessages::text (m->source, m->code);
+ // add variable args. the .arg function seems always to replace the
+ // lowest numbered placeholder it finds, so translating messages
+ // with variables in a different order should still work okay (I think...)
+ for (j = 0; j < m->args.count(); j++) ss = ss.arg (*m->args.at(j));
+ s.append (ss + "\n");
+ }
+ }
+ }
+ if (gncdebug) qDebug ("%s", s.latin1());
+ return (static_cast<const QString>(s));
+ PASS
+}
+//************************ writeReportToFile*********************************
+bool MyMoneyGncReader::writeReportToFile (const QValueList<QString>& sectionsToReport) {
+ TRY
+ unsigned int i;
+ QFileDialog* fd = new QFileDialog (0, "Save report as", TRUE);
+ fd->setMode (QFileDialog::AnyFile);
+ if (fd->exec() != QDialog::Accepted) {
+ delete fd;
+ return (false);
+ }
+ QFile reportFile(fd->selectedFile());
+ QFileInfo fi (reportFile);
+ if (!reportFile.open (IO_WriteOnly)) {
+ delete fd;
+ return (false);
+ }
+ QTextStream stream (&reportFile);
+ for (i = 0; i < sectionsToReport.count(); i++) {
+ stream << buildReportSection (*sectionsToReport.at(i)).latin1() << endl;
+ }
+ reportFile.close();
+ delete fd;
+ return (true);
+ PASS
+}
+/****************************************************************************
+ Utility routines
+*****************************************************************************/
+//************************ createPayee ***************************
+
+QString MyMoneyGncReader::createPayee (const QString& gncDescription) {
+ MyMoneyPayee payee;
+ try {
+ payee = m_storage->payeeByName (gncDescription);
+ } catch (MyMoneyException *e) { // payee not found, create one
+ delete e;
+ payee.setName (gncDescription);
+ m_storage->addPayee (payee);
+ }
+ return (payee.id());
+}
+//************************************** createOrphanAccount *******************************
+QString MyMoneyGncReader::createOrphanAccount (const QString& gncName) {
+ MyMoneyAccount acc;
+
+ acc.setName ("orphan_" + gncName);
+ acc.setDescription (i18n("Orphan created from unknown gnucash account"));
+
+ QDate today = QDate::currentDate();
+
+ acc.setOpeningDate (today);
+ acc.setLastModified (today);
+ acc.setLastReconciliationDate (today);
+ acc.setCurrencyId (m_txCommodity);
+ acc.setAccountType (MyMoneyAccount::Asset);
+ acc.setParentAccountId (m_storage->asset().id());
+ m_storage->addAccount (acc);
+ // assign the gnucash id as the key into the map to find our id
+ m_mapIds[gncName.utf8()] = acc.id();
+ postMessage ("OR", 1, acc.name().data());
+ return (acc.id());
+}
+//****************************** incrDate *********************************************
+QDate MyMoneyGncReader::incrDate (QDate lastDate, unsigned char interval, unsigned int intervalCount) {
+ TRY
+ switch (interval) {
+ case 'd':
+ return (lastDate.addDays(intervalCount));
+ case 'w':
+ return (lastDate.addDays(intervalCount * 7));
+ case 'm':
+ return (lastDate.addMonths(intervalCount));
+ case 'y':
+ return (lastDate.addYears(intervalCount));
+ case 'o': // once-only
+ return (lastDate);
+ }
+ throw new MYMONEYEXCEPTION (i18n("Internal error - invalid interval char in incrDate"));
+ QDate r = QDate(); return (r); // to keep compiler happy
+ PASS
+}
+//********************************* checkConsistency **********************************
+MyMoneyAccount MyMoneyGncReader::checkConsistency (MyMoneyAccount& parent, MyMoneyAccount& child) {
+ TRY
+ // gnucash is flexible/weird enough to allow various inconsistencies
+ // these are a couple I found in my file, no doubt more will be discovered
+ if ((child.accountType() == MyMoneyAccount::Investment) &&
+ (parent.accountType() != MyMoneyAccount::Asset)) {
+ postMessage ("CC", 1, child.name().latin1());
+ return m_storage->asset();
+ }
+ if ((child.accountType() == MyMoneyAccount::Income) &&
+ (parent.accountType() != MyMoneyAccount::Income)) {
+ postMessage ("CC", 2, child.name().latin1());
+ return m_storage->income();
+ }
+ if ((child.accountType() == MyMoneyAccount::Expense) &&
+ (parent.accountType() != MyMoneyAccount::Expense)) {
+ postMessage ("CC", 3, child.name().latin1());
+ return m_storage->expense();
+ }
+ return (parent);
+ PASS
+}
+//*********************************** checkInvestmentOption *************************
+void MyMoneyGncReader::checkInvestmentOption (QString stockId) {
+ // implement the investment option for stock accounts
+ // first check whether the parent account (gnucash id) is actually an
+ // investment account. if it is, no further action is needed
+ MyMoneyAccount stockAcc = m_storage->account (m_mapIds[stockId.utf8()]);
+ MyMoneyAccount parent;
+ QString parentKey = stockAcc.parentAccountId();
+ map_accountIds::Iterator id = m_mapIds.find (parentKey);
+ if (id != m_mapIds.end()) {
+ parent = m_storage->account (id.data());
+ if (parent.accountType() == MyMoneyAccount::Investment) return ;
+ }
+ // so now, check the investment option requested by the user
+ // option 0 creates a separate investment account for each stock account
+ if (m_investmentOption == 0) {
+ MyMoneyAccount invAcc (stockAcc);
+ invAcc.setAccountType (MyMoneyAccount::Investment);
+ invAcc.setCurrencyId (QString("")); // we don't know what currency it is!!
+ invAcc.setParentAccountId (parentKey); // intersperse it between old parent and child stock acct
+ m_storage->addAccount (invAcc);
+ m_mapIds [invAcc.id()] = invAcc.id(); // so stock account gets parented (again) to investment account later
+ if (gncdebug) qDebug ("Created investment account %s as id %s, parent %s", invAcc.name().data(), invAcc.id().data(),
+ invAcc.parentAccountId().data());
+ if (gncdebug) qDebug ("Setting stock %s, id %s, as child of %s", stockAcc.name().data(), stockAcc.id().data(), invAcc.id().data());
+ stockAcc.setParentAccountId (invAcc.id());
+ m_storage->addAccount(invAcc, stockAcc);
+ // investment option 1 creates a single investment account for all stocks
+ } else if (m_investmentOption == 1) {
+ static QString singleInvAccId = "";
+ MyMoneyAccount singleInvAcc;
+ bool ok = false;
+ if (singleInvAccId.isEmpty()) { // if the account has not yet been created
+ QString invAccName;
+ while (!ok) {
+ invAccName = QInputDialog::getText (PACKAGE,
+ i18n("Enter the investment account name "), QLineEdit::Normal,
+ i18n("My Investments"), &ok);
+ }
+ singleInvAcc.setName (invAccName);
+ singleInvAcc.setAccountType (MyMoneyAccount::Investment);
+ singleInvAcc.setCurrencyId (QString(""));
+ singleInvAcc.setParentAccountId (m_storage->asset().id());
+ m_storage->addAccount (singleInvAcc);
+ m_mapIds [singleInvAcc.id()] = singleInvAcc.id(); // so stock account gets parented (again) to investment account later
+ if (gncdebug) qDebug ("Created investment account %s as id %s, parent %s, reparenting stock",
+ singleInvAcc.name().data(), singleInvAcc.id().data(), singleInvAcc.parentAccountId().data());
+ singleInvAccId = singleInvAcc.id();
+ } else { // the account has already been created
+ singleInvAcc = m_storage->account (singleInvAccId);
+ }
+ m_storage->addAccount(singleInvAcc, stockAcc); // add stock as child
+ // the original intention of option 2 was to allow any asset account to be converted to an investment (broker) account
+ // however, since we have already stored the accounts as asset, we have no way at present of changing their type
+ // the only alternative would be to hold all the gnucash data in memory, then implement this option, then convert all the data
+ // that would mean a major overhaul of the code. Perhaps I'll think of another way...
+ } else if (m_investmentOption == 2) {
+ static int lastSelected = 0;
+ MyMoneyAccount invAcc (stockAcc);
+ QStringList accList;
+ QValueList<MyMoneyAccount> list;
+ QValueList<MyMoneyAccount>::Iterator acc;
+ m_storage->accountList(list);
+ // build a list of candidates for the input box
+ for (acc = list.begin(); acc != list.end(); ++acc) {
+ // if (((*acc).accountGroup() == MyMoneyAccount::Asset) && ((*acc).accountType() != MyMoneyAccount::Stock)) accList.append ((*acc).name());
+ if ((*acc).accountType() == MyMoneyAccount::Investment) accList.append ((*acc).name());
+ }
+ //if (accList.isEmpty()) qFatal ("No available accounts");
+ bool ok = false;
+ while (!ok) { // keep going till we have a valid investment parent
+ QString invAccName = QInputDialog::getItem (
+ PACKAGE, i18n("Select parent investment account or enter new name. Stock %1").arg(stockAcc.name ()),
+ accList, lastSelected, true, &ok);
+ if (ok) {
+ lastSelected = accList.findIndex (invAccName); // preserve selection for next time
+ for (acc = list.begin(); acc != list.end(); ++acc) {
+ if ((*acc).name() == invAccName) break;
+ }
+ if (acc != list.end()) { // an account was selected
+ invAcc = *acc;
+ } else { // a new account name was entered
+ invAcc.setAccountType (MyMoneyAccount::Investment);
+ invAcc.setName (invAccName);
+ invAcc.setCurrencyId (QString(""));
+ invAcc.setParentAccountId (m_storage->asset().id());
+ m_storage->addAccount (invAcc);
+ ok = true;
+ }
+ if (invAcc.accountType() == MyMoneyAccount::Investment) {
+ ok = true;
+ } else {
+ // this code is probably not going to be implemented coz we can't change account types (??)
+#if 0
+ QMessageBox mb (PACKAGE,
+ i18n ("%1 is not an Investment Account. Do you wish to make it one?").arg(invAcc.name()),
+ QMessageBox::Question,
+ QMessageBox::Yes | QMessageBox::Default,
+ QMessageBox::No | QMessageBox::Escape,
+ QMessageBox::NoButton);
+ switch (mb.exec()) {
+ case QMessageBox::No :
+ ok = false; break;
+ default:
+ // convert it - but what if it has splits???
+ qFatal ("Not yet implemented");
+ ok = true;
+ break;
+ }
+#endif
+ switch(KMessageBox::questionYesNo(0, i18n ("%1 is not an Investment Account. Do you wish to make it one?").arg(invAcc.name(), PACKAGE))) {
+ case KMessageBox::Yes:
+ // convert it - but what if it has splits???
+ qFatal ("Not yet implemented");
+ ok = true;
+ break;
+ default:
+ ok = false;
+ break;
+ }
+ }
+ } // end if ok - user pressed Cancel
+ } // end while !ok
+ m_mapIds [invAcc.id()] = invAcc.id(); // so stock account gets parented (again) to investment account later
+ m_storage->addAccount(invAcc, stockAcc);
+ } else { // investment option != 0, 1, 2
+ qFatal ("Invalid investment option %d", m_investmentOption);
+ }
+}
+
+// get the price source for a stock (gnc account) where online quotes are requested
+void MyMoneyGncReader::getPriceSource (MyMoneySecurity stock, QString gncSource) {
+ // if he wants to use Finance::Quote, no conversion of source name is needed
+ if (m_useFinanceQuote) {
+ stock.setValue ("kmm-online-quote-system", "Finance::Quote");
+ stock.setValue ("kmm-online-source", gncSource.lower());
+ m_storage->modifySecurity(stock);
+ return;
+ }
+ // first check if we have already asked about this source
+ // (mapSources is initialy empty. We may be able to pre-fill it with some equivalent
+ // sources, if such things do exist. User feedback may help here.)
+ QMap<QString, QString>::Iterator it;
+ for (it = m_mapSources.begin(); it != m_mapSources.end(); it++) {
+ if (it.key() == gncSource) {
+ stock.setValue("kmm-online-source", it.data());
+ m_storage->modifySecurity(stock);
+ return;
+ }
+ }
+ // not found in map, so ask the user
+ KGncPriceSourceDlg *dlg = new KGncPriceSourceDlg (stock.name(), gncSource);
+ dlg->exec();
+ QString s = dlg->selectedSource();
+ if (!s.isEmpty()) {
+ stock.setValue("kmm-online-source", s);
+ m_storage->modifySecurity(stock);
+ }
+ if (dlg->alwaysUse()) m_mapSources[gncSource] = s;
+ delete dlg;
+ return;
+}
+
+// functions to control the progress bar
+//*********************** setProgressCallback *****************************
+void MyMoneyGncReader::setProgressCallback(void(*callback)(int, int, const QString&)) {
+ m_progressCallback = callback; return ;
+}
+//************************** signalProgress *******************************
+void MyMoneyGncReader::signalProgress(int current, int total, const QString& msg) {
+ if (m_progressCallback != 0)
+ (*m_progressCallback)(current, total, msg);
+ return ;
+}
+// error and information reporting
+//***************************** Information and error messages *********************
+void MyMoneyGncReader::postMessage (const QString& source, const unsigned int code, const char* arg1) {
+ postMessage (source, code, QStringList(arg1));
+}
+void MyMoneyGncReader::postMessage (const QString& source, const unsigned int code, const char* arg1, const char* arg2) {
+ QStringList argList(arg1);
+ argList.append(arg2);
+ postMessage(source, code, argList);
+}
+void MyMoneyGncReader::postMessage (const QString& source, const unsigned int code, const char* arg1, const char* arg2, const char* arg3) {
+ QStringList argList(arg1);
+ argList.append(arg2);
+ argList.append(arg3);
+ postMessage(source, code, argList);
+}
+void MyMoneyGncReader::postMessage (const QString& source, const unsigned int code, const QStringList& argList) {
+ unsigned int i;
+ GncMessageArgs *m = new GncMessageArgs;
+
+ m->source = source;
+ m->code = code;
+ // get the number of args this message requires
+ const unsigned int argCount = GncMessages::argCount (source, code);
+ if ((gncdebug) && (argCount != argList.count()))
+ qDebug("%s", QString("MyMoneyGncReader::postMessage debug: Message %1, code %2, requires %3 arguments, got %4")
+ .arg(source).arg(code).arg(argCount).arg(argList.count()).data());
+ // store the arguments
+ for (i = 0; i < argCount; i++) {
+ if (i > argList.count()) m->args.append(QString());
+ else m->args.append (argList[i]); //Adds the next argument to the list
+ }
+ m_messageList.append (m);
+ return ;
+}
+//********************************** Message texts **********************************************
+GncMessages::messText GncMessages::texts [] = {
+ {"CC", 1, i18n("An Investment account must be a child of an Asset account\n"
+ "Account %1 will be stored under the main Asset account")},
+ {"CC", 2, i18n("An Income account must be a child of an Income account\n"
+ "Account %1 will be stored under the main Income account")},
+ {"CC", 3, i18n("An Expense account must be a child of an Expense account\n"
+ "Account %1 will be stored under the main Expense account")},
+ {"OR", 1, i18n("One or more transactions contain a reference to an otherwise unknown account\n"
+ "An asset account with the name %1 has been created to hold the data")},
+ {"SC", 1, i18n("Schedule %1 has interval of %2 which is not currently available")},
+ {"SC", 2, i18n("Schedule %1 dropped at user request")},
+ {"SC", 3, i18n("Schedule %1 contains unknown action (key = %2, type = %3)")},
+ {"SC", 4, i18n("Schedule %1 contains multiple actions; only one has been imported")},
+ {"SC", 5, i18n("Schedule %1 contains no valid splits")},
+ {"SC", 6, i18n("Schedule %1 appears to contain a formula. GnuCash formulae are not convertible")},
+ {"SC", 7, i18n("Schedule %1 contains unknown interval specification; please check for correct operation")},
+ {"SC", 8, i18n("Schedule %1 contains a deferred interval specification; please check for correct operation")},
+ {"CC", 4, i18n("Account or Category %1, transaction date %2; split contains invalid value; please check")},
+ {"ZZ", 0, ""} // stopper
+ };
+//
+QString GncMessages::text (const QString source, const unsigned int code) {
+ TRY
+ unsigned int i;
+ for (i = 0; texts[i].source != "ZZ"; i++) {
+ if ((source == texts[i].source) && (code == texts[i].code)) break;
+ }
+ if (texts[i].source == "ZZ") {
+ QString mess = QString().sprintf("Internal error - unknown message - source %s, code %d", source.latin1(), code);
+ throw new MYMONEYEXCEPTION (mess);
+ }
+ return (texts[i].text);
+ PASS
+}
+//
+unsigned int GncMessages::argCount (const QString source, const unsigned int code) {
+ TRY
+ unsigned int i;
+ for (i = 0; texts[i].source != "ZZ"; i++) {
+ if ((source == texts[i].source) && (code == texts[i].code)) break;
+ }
+ if (texts[i].source == "ZZ") {
+ QString mess = QString().sprintf("Internal error - unknown message - source %s, code %d", source.latin1(), code);
+ throw new MYMONEYEXCEPTION (mess);
+ }
+ QRegExp argConst ("%\\d");
+ int offset = 0;
+ unsigned int argCount = 0;
+ while ((offset = argConst.search (texts[i].text, offset)) != -1) {
+ argCount++;
+ offset += 2;
+ }
+ return (argCount);
+ PASS
+}
+#endif // _GNCFILEANON
diff --git a/kmymoney2/converter/mymoneygncreader.h b/kmymoney2/converter/mymoneygncreader.h
new file mode 100644
index 0000000..df08913
--- /dev/null
+++ b/kmymoney2/converter/mymoneygncreader.h
@@ -0,0 +1,904 @@
+/***************************************************************************
+ mymoneygncreader - description
+ -------------------
+ begin : Wed Mar 3 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+/*
+The main class of this module, MyMoneyGncReader, contains only a readFile()
+function, which controls the import of data from an XML file created by the
+current GnuCash version (1.8.8).
+
+The XML is processed in class XmlReader, which is an implementation of the Qt
+SAX2 reader class.
+
+Data in the input file is processed as a set of objects which fortunately,
+though perhaps not surprisingly, have almost a one-for-one correspondence with
+KMyMoney objects. These objects are bounded by start and end XML elements, and
+may contain both nested objects (described as sub objects in the code), and data
+items, also delimited by start and end elements. For example:
+<gnc:account> * start of sub object within file
+ <act:name>Account Name</act:name> * data string with start and end elements
+ ...
+</gnc:account> * end of sub objects
+
+A GnuCash file may consist of more than one 'book', or set of data. It is not
+clear how we could currently implement this, so only the first book in a file is
+processed. This should satisfy most user situations.
+
+GnuCash is somewhat inconsistent in its division of the major sections of the
+file. For example, multiple price history entries are delimited by <gnc:pricedb>
+elements, while each account starts with its own top-level element. In general,
+the 'container' elements are ignored.
+
+XmlReader
+
+This is an implementation of the Qt QXmlDefaultHandler class, which provides
+three main function calls in addition to start and end of document. The
+startElement() and endElement() calls are self-explanatory, the characters()
+function provides data strings. Thus in the above example, the sequence of calls
+would be
+ startElement() for gnc:account
+ startElement() for act:name
+ characters() for 'Account Name'
+ endElement() for act:name
+ ...
+ endElement() for gnc:account
+
+Objects
+
+Since the processing requirements of XML for most elements are very similar, the
+common code is implemented in a GncObject class, from which the others are
+derived, with virtual function calls to cater for any differences. The
+'grandfather' object, GncFile representing the file (or more correctly, 'book')
+as a whole, is created in the startDocument() function call.
+
+The constructor function of each object is responsible for providing two lists
+for the XmlReader to scan, a list of element names which represent sub objects
+(called sub elements in the code), and a similar list of names representing data
+elements. In addition, an array of variables (m_v) is provided and initialized,
+to contain the actual data strings.
+
+Implementation
+
+Since objects may be nested, a stack is used, with the top element pointing to
+the 'current object'. The startDocument() call creates the first, GncFile,
+object at the top of the stack.
+
+As each startElement() call occurs, the two element lists created by the current
+object are scanned.
+If this element represents the start of a sub object, the current object's subEl()
+function is called to create an instance of the appropriate type. This is then
+pushed to the top of the stack, and the new object's initiate() function is
+called. This is used to process any XML attributes attached to the element;
+GnuCash makes little use of these.
+If this represents the start of a data element, a pointer (m_dataPointer) is set
+to point to an entry in the array (m_v) in which a subsequent characters() call
+can store the actual data.
+
+When an endElement() call occurs, a check is made to see if it matches the
+element name which started the current object. If so, the object's terminate()
+function is called. If the object represents a similar KMM object, this will
+normally result in a call to a conversion routine in the main
+(MyMoneyGncReader) class to convert the data to native format and place it in
+storage. The stack is then popped, and the parent (now current) object notified
+by a call to its endSubEl() function. Again depending on the type of object,
+this will either delete the instance, or save it in its own storage for later
+processing.
+For example, a GncSplit object makes little sense outside the context of its
+transaction, so will be saved by the transaction. A GncTransaction object on the
+other hand will be converted, along with its attendant splits, and then deleted
+by its parent.
+
+Since at any one time an object will only be processing either a subobject or a
+data element, a single object variable, m_state, is used to determine the actual
+type. In effect, it acts as the current index into either the subElement or
+dataElement list. As an object variable, it will be saved on the stack across
+subobject processing.
+
+Exceptions and Problems
+
+Fatal exceptions are processed via the standard MyMoneyException method.
+Due to differences in implementation between GnuCash and KMM, it is not always
+possible to provide an absolutely correct conversion. When such a problem
+situation is recognized, a message, along with any relevant variable data, is
+passed to the main class, and used to produce a report when processing
+terminates. The GncMessages and GncMessageArg classes implement this.
+
+Anonymizer
+
+When debugging problems, it is often useful to have a trace of what is happening
+within the module. However, in view of the sensitive nature of personal finance
+data, most users will be reluctant to provide this. Accordingly, an anonymize
+(hide()) function is provided to handle data strings. These may either be passed
+through asis (non-personal data), blanked out (non-critical but possibly personal
+data), replaced with a generated version (required, but possibly personal), or
+randomized (monetary amounts). The action for each data item is determined in
+the object's constructor function along with the creation of the data element
+list.
+This module will later be used as the basis of a file anonymizer, which will
+enable users to safely provide us with a copy of their GnuCash files, and will
+allow us to test the structure, if not the data content, of the file.
+*/
+
+#ifndef MYMONEYSTORAGEGNC_H
+#define MYMONEYSTORAGEGNC_H
+
+// Some STL headers in GCC4.3 contain operator new. Memory checker mangles these
+#ifdef _CHECK_MEMORY
+ #undef new
+#endif
+// system includes
+#include <stdlib.h>
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qdatastream.h>
+class QIODevice;
+#include <qobject.h>
+#include <qvaluelist.h>
+#include <qptrlist.h>
+#include <qptrstack.h>
+#include <qxml.h>
+#include <qdatetime.h>
+#include <qtextcodec.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#ifdef _CHECK_MEMORY
+ #include <kmymoney/mymoneyutils.h>
+#endif
+
+#ifndef _GNCFILEANON
+#include "../mymoney/storage/imymoneyserialize.h" // not used any more, but call interface requires it
+#include "../mymoney/storage/imymoneystorageformat.h"
+#endif // _GNCFILEANON
+
+// not sure what these are for, but leave them in
+#define VERSION_0_60_XML 0x10000010 // Version 0.5 file version info
+#define VERSION_0_61_XML 0x10000011 // use 8 bytes for MyMoneyMoney objects
+#define GNUCASH_ID_KEY "GNUCASH_ID"
+
+typedef QMap<QString, QString> map_accountIds;
+typedef map_accountIds::iterator map_accountIds_iter;
+typedef map_accountIds::const_iterator map_accountIds_citer;
+
+typedef QMap<QString, QStringList> map_elementVersions;
+
+class MyMoneyGncReader;
+
+/** GncObject is the base class for the various objects in the gnucash file
+ Beyond the first level XML objects, elements will be of one of three types:
+ 1. Sub object elements, which require creation of another object to process
+ 2. Data object elements, which are only followed by data to be stored in a variable (m_v array)
+ 3. Ignored objects, data not needed and not included herein
+*/
+class GncObject {
+public:
+ GncObject();
+ ; // to save delete loop when finished
+ virtual ~GncObject() {} // make sure to have impl of all virtual rtns to avoid vtable errors?
+protected:
+ friend class XmlReader;
+ friend class MyMoneyGncReader;
+
+ // check for sub object element; if it is, create the object
+ GncObject *isSubElement (const QString &elName, const QXmlAttributes& elAttrs);
+ // check for data element; if so, set data pointer
+ bool isDataElement (const QString &elName, const QXmlAttributes& elAttrs);
+ // process start element for 'this'; normally for attribute checking; other initialization done in constructor
+ virtual void initiate (const QString&, const QXmlAttributes&) { return ;};
+ // a sub object has completed; process the data it gathered
+ virtual void endSubEl(GncObject *) {m_dataPtr = 0; return ;};
+ // store data for data element
+ void storeData (const QString& pData) // NB - data MAY come in chunks, and may need to be anonymized
+ {if (m_dataPtr != 0)
+ m_dataPtr->append (hide (pData, m_anonClass)); return ;}
+ // following is provided only for a future file anonymizer
+ QString getData () const { return ((m_dataPtr != 0) ? *m_dataPtr : "");};
+ void resetDataPtr() {m_dataPtr = 0;};
+ // process end element for 'this'; usually to convert to KMM format
+ virtual void terminate() { return ;};
+ void setVersion (const QString& v) {m_version = v; return; };
+ QString version() const {return (m_version);};
+
+ // some gnucash elements have version attribute; check it
+ void checkVersion (const QString&, const QXmlAttributes&, const map_elementVersions&);
+ // get name of element processed by 'this'
+ QString getElName () const { return (m_elementName);};
+ // pass 'main' pointer to object
+ void setPm (MyMoneyGncReader *pM) {pMain = pM;};
+ // debug only
+ void debugDump();
+
+ // called by isSubElement to create appropriate sub object
+ virtual GncObject *startSubEl() { return (0);};
+ // called by isDataElement to set variable pointer
+ virtual void dataEl(const QXmlAttributes&) {m_dataPtr = m_v.at(m_state); m_anonClass = m_anonClassList[m_state];};
+ // return gnucash data string variable pointer
+ virtual QString var (int i) const;
+ // anonymize data
+ virtual QString hide (QString, unsigned int);
+
+ MyMoneyGncReader *pMain; // pointer to 'main' class
+ // used at start of each transaction so same money hide factor is applied to all splits
+ void adjustHideFactor();
+
+ QString m_elementName; // save 'this' element's name
+ QString m_version; // and it's gnucash version
+ const QString *m_subElementList; // list of sub object element names for 'this'
+ unsigned int m_subElementListCount; // count of above
+ const QString *m_dataElementList; // ditto for data elements
+ unsigned int m_dataElementListCount;
+ QString *m_dataPtr; // pointer to m_v variable for current data item
+ mutable QPtrList<QString> m_v; // storage for variable pointers
+
+ unsigned int m_state; // effectively, the index to subElementList or dataElementList, whichever is currently in use
+
+ const unsigned int *m_anonClassList;
+ enum anonActions {ASIS, SUPPRESS, NXTACC, NXTEQU, NXTPAY, NXTSCHD, MAYBEQ, MONEY1, MONEY2}; // anonymize actions - see hide()
+ unsigned int m_anonClass; // class of current data item for anonymizer
+ static double m_moneyHideFactor; // a per-transaction factor
+};
+
+// *****************************************************************************
+// This is the 'grandfather' object representing the gnucash file as a whole
+class GncFile : public GncObject {
+public:
+ GncFile ();
+ ~GncFile();
+private:
+ enum iSubEls {BOOK, COUNT, CMDTY, PRICE, ACCT, TX, TEMPLATES, SCHEDULES, END_FILE_SELS };
+ virtual GncObject *startSubEl();
+ virtual void endSubEl(GncObject *);
+
+ bool m_processingTemplates; // gnc uses same transaction element for ordinary and template tx's; this will distinguish
+ bool m_bookFound; // to detect multi-book files
+};
+// The following are 'utility' objects, which occur within several other object types
+// ****************************************************************************
+// commodity specification. consists of
+// cmdty:space - either ISO4217 if this cmdty is a currency, or, usually, the name of a stock exchange
+// cmdty:id - ISO4217 currency symbol, or 'ticker symbol'
+class GncCmdtySpec : public GncObject {
+public:
+ GncCmdtySpec ();
+ ~GncCmdtySpec ();
+protected:
+ friend class MyMoneyGncReader;
+ friend class GncTransaction;
+ bool isCurrency() const { return (*m_v.at(CMDTYSPC) == QString("ISO4217"));};
+ QString id() const { return (*m_v.at(CMDTYID));};
+ QString space() const { return (*m_v.at(CMDTYSPC));};
+private:
+ // data elements
+ enum CmdtySpecDataEls {CMDTYSPC, CMDTYID, END_CmdtySpec_DELS};
+ virtual QString hide (QString, unsigned int);
+};
+// *********************************************************************
+// date; maybe one of two types, ts:date which is date/time, gdate which is date only
+// we do not preserve time data (at present)
+class GncDate : public GncObject {
+public:
+ GncDate ();
+ ~GncDate();
+protected:
+ friend class MyMoneyGncReader;
+ friend class GncPrice;
+ friend class GncTransaction;
+ friend class GncSplit;
+ friend class GncSchedule;
+ friend class GncRecurrence;
+ const QDate date() const { return (QDate::fromString(m_v.at(TSDATE)->section(' ', 0, 0), Qt::ISODate));};
+private:
+ // data elements
+ enum DateDataEls {TSDATE, GDATE, END_Date_DELS};
+ virtual void dataEl(const QXmlAttributes&) {m_dataPtr = m_v.at(TSDATE); m_anonClass = GncObject::ASIS;}
+ ; // treat both date types the same
+};
+// ************* GncKvp********************************************
+// Key/value pairs, which are introduced by the 'slot' element
+// Consist of slot:key (the 'name' of the kvp), and slot:value (the data value)
+// the slot value also contains a slot type (string, integer, etc) implemented as an XML attribute
+// kvp's may be nested
+class GncKvp : public GncObject {
+public:
+ GncKvp ();
+ ~GncKvp();
+protected:
+ friend class MyMoneyGncReader;
+
+ QString key() const { return (var(KEY));};
+ QString value() const { return (var(VALUE));};
+ QString type() const { return (m_kvpType);};
+ unsigned int kvpCount() const { return (m_kvpList.count());};
+ const GncKvp *getKvp(unsigned int i) const { return (static_cast<GncKvp *>(m_kvpList.at(i)));};
+private:
+ // subsidiary objects/elements
+ enum KvpSubEls {KVP, END_Kvp_SELS };
+ virtual GncObject *startSubEl();
+ virtual void endSubEl(GncObject *);
+ // data elements
+ enum KvpDataEls {KEY, VALUE, END_Kvp_DELS };
+ virtual void dataEl (const QXmlAttributes&);
+ mutable QPtrList<GncObject> m_kvpList;
+ QString m_kvpType; // type is an XML attribute
+};
+// ************* GncLot********************************************
+// KMM doesn't have support for lots as yet
+class GncLot : public GncObject {
+ public:
+ GncLot ();
+ ~GncLot();
+ protected:
+ friend class MyMoneyGncReader;
+ private:
+};
+
+/** Following are the main objects within the gnucash file, which correspond largely one-for-one
+ with similar objects in the kmymoney structure, apart from schedules which gnc splits between
+ template (transaction data) and schedule (date data)
+*/
+//********************************************************************
+class GncCountData : public GncObject {
+public:
+ GncCountData ();
+ ~GncCountData ();
+private:
+ virtual void initiate (const QString&, const QXmlAttributes&);
+ virtual void terminate();
+ QString m_countType; // type of element being counted
+};
+//********************************************************************
+class GncCommodity : public GncObject {
+public:
+ GncCommodity ();
+ ~GncCommodity();
+protected:
+ friend class MyMoneyGncReader;
+ // access data values
+ bool isCurrency() const { return (var(SPACE) == QString("ISO4217"));};
+ QString space() const { return (var(SPACE));};
+ QString id() const { return (var(ID));};
+ QString name() const { return (var(NAME));};
+ QString fraction() const { return (var(FRACTION));};
+private:
+ virtual void terminate();
+ // data elements
+ enum {SPACE, ID, NAME, FRACTION, END_Commodity_DELS};
+};
+// ************* GncPrice********************************************
+class GncPrice : public GncObject {
+public:
+ GncPrice ();
+ ~GncPrice();
+protected:
+ friend class MyMoneyGncReader;
+ // access data values
+ const GncCmdtySpec *commodity() const { return (m_vpCommodity);};
+ const GncCmdtySpec *currency() const { return (m_vpCurrency);};
+ QString value() const { return (var(VALUE));};
+ QDate priceDate () const { return (m_vpPriceDate->date());};
+private:
+ virtual void terminate();
+ // sub object elements
+ enum PriceSubEls {CMDTY, CURR, PRICEDATE, END_Price_SELS };
+ virtual GncObject *startSubEl();
+ virtual void endSubEl(GncObject *);
+ // data elements
+ enum PriceDataEls {VALUE, END_Price_DELS };
+ GncCmdtySpec *m_vpCommodity, *m_vpCurrency;
+ GncDate *m_vpPriceDate;
+};
+// ************* GncAccount********************************************
+class GncAccount : public GncObject {
+public:
+ GncAccount ();
+ ~GncAccount();
+protected:
+ friend class MyMoneyGncReader;
+ // access data values
+ GncCmdtySpec *commodity() const { return (m_vpCommodity);};
+ QString id () const { return (var(ID));};
+ QString name () const { return (var(NAME));};
+ QString desc () const { return (var(DESC));};
+ QString type () const { return (var(TYPE));};
+ QString parent () const { return (var(PARENT));};
+private:
+ // subsidiary objects/elements
+ enum AccountSubEls {CMDTY, KVP, LOTS, END_Account_SELS };
+ virtual GncObject *startSubEl();
+ virtual void endSubEl(GncObject *);
+ virtual void terminate();
+ // data elements
+ enum AccountDataEls {ID, NAME, DESC, TYPE, PARENT, END_Account_DELS };
+ GncCmdtySpec *m_vpCommodity;
+ QPtrList<GncObject> m_kvpList;
+};
+// ************* GncSplit********************************************
+class GncSplit : public GncObject {
+public:
+ GncSplit ();
+ ~GncSplit();
+protected:
+ friend class MyMoneyGncReader;
+ // access data values
+ QString id() const { return (var(ID));};
+ QString memo() const { return (var(MEMO));};
+ QString recon() const { return (var(RECON));};
+ QString value() const { return (var(VALUE));};
+ QString qty() const { return (var(QTY));};
+ QString acct() const { return (var(ACCT));};
+const QDate reconDate() const {QDate x = QDate(); return (m_vpDateReconciled == NULL ? x : m_vpDateReconciled->date());};
+private:
+ // subsidiary objects/elements
+ enum TransactionSubEls {RECDATE, END_Split_SELS };
+ virtual GncObject *startSubEl();
+ virtual void endSubEl(GncObject *);
+ // data elements
+ enum SplitDataEls {ID, MEMO, RECON, VALUE, QTY, ACCT, END_Split_DELS };
+ GncDate *m_vpDateReconciled;
+};
+// ************* GncTransaction********************************************
+class GncTransaction : public GncObject {
+public:
+ GncTransaction (bool processingTemplates);
+ ~GncTransaction();
+protected:
+ friend class MyMoneyGncReader;
+ // access data values
+ QString id() const { return (var(ID));};
+ QString no() const { return (var(NO));};
+ QString desc() const { return (var(DESC));};
+ QString currency() const { return (m_vpCurrency == NULL ? QString () : m_vpCurrency->id());};
+ QDate dateEntered() const { return (m_vpDateEntered->date());};
+ QDate datePosted() const { return (m_vpDatePosted->date());};
+ bool isTemplate() const { return (m_template);};
+ unsigned int splitCount() const { return (m_splitList.count());};
+ unsigned int kvpCount() const { return (m_kvpList.count());};
+ const GncObject *getSplit (unsigned int i) const { return (m_splitList.at(i));};
+ const GncKvp *getKvp(unsigned int i) const { return (static_cast<GncKvp *>(m_kvpList.at(i)));};
+private:
+ // subsidiary objects/elements
+ enum TransactionSubEls {CURRCY, POSTED, ENTERED, SPLIT, KVP, END_Transaction_SELS };
+ virtual GncObject *startSubEl();
+ virtual void endSubEl(GncObject *);
+ virtual void terminate();
+ // data elements
+ enum TransactionDataEls {ID, NO, DESC, END_Transaction_DELS };
+ GncCmdtySpec *m_vpCurrency;
+ GncDate *m_vpDateEntered, *m_vpDatePosted;
+ mutable QPtrList<GncObject> m_splitList;
+ bool m_template; // true if this is a template for scheduled transaction
+ mutable QPtrList<GncObject> m_kvpList;
+};
+
+// ************* GncTemplateSplit********************************************
+class GncTemplateSplit : public GncObject {
+public:
+ GncTemplateSplit ();
+ ~GncTemplateSplit();
+protected:
+ friend class MyMoneyGncReader;
+ // access data values
+ QString id() const { return (var(ID));};
+ QString memo() const { return (var(MEMO));};
+ QString recon() const { return (var(RECON));};
+ QString value() const { return (var(VALUE));};
+ QString qty() const { return (var(QTY));};
+ QString acct() const { return (var(ACCT));};
+ unsigned int kvpCount() const { return (m_kvpList.count());};
+ const GncKvp *getKvp(unsigned int i) const { return (static_cast<GncKvp *>(m_kvpList.at(i)));};
+private:
+ // subsidiary objects/elements
+ enum TemplateSplitSubEls {KVP, END_TemplateSplit_SELS };
+ virtual GncObject *startSubEl();
+ virtual void endSubEl(GncObject *);
+ // data elements
+ enum TemplateSplitDataEls {ID, MEMO, RECON, VALUE, QTY, ACCT, END_TemplateSplit_DELS };
+ mutable QPtrList<GncObject> m_kvpList;
+};
+// ************* GncSchedule********************************************
+class GncFreqSpec;
+class GncRecurrence;
+class GncSchedDef;
+class GncSchedule : public GncObject {
+public:
+ GncSchedule ();
+ ~GncSchedule();
+protected:
+ friend class MyMoneyGncReader;
+ // access data values
+ QString name() const { return (var(NAME));};
+ QString enabled() const {return var(ENABLED);};
+ QString autoCreate() const { return (var(AUTOC));};
+ QString autoCrNotify() const { return (var(AUTOCN));};
+ QString autoCrDays() const { return (var(AUTOCD));};
+ QString advCrDays() const { return (var(ADVCD));};
+ QString advCrRemindDays() const { return (var(ADVRD));};
+ QString instanceCount() const { return (var(INSTC));};
+ QString numOccurs() const { return (var(NUMOCC));};
+ QString remOccurs() const { return (var(REMOCC));};
+ QString templId() const { return (var(TEMPLID));};
+ QDate startDate () const
+ {QDate x = QDate(); return (m_vpStartDate == NULL ? x : m_vpStartDate->date());};
+ QDate lastDate () const
+ {QDate x = QDate(); return (m_vpLastDate == NULL ? x : m_vpLastDate->date());};
+ QDate endDate() const
+ {QDate x = QDate(); return (m_vpEndDate == NULL ? x : m_vpEndDate->date());};
+ const GncFreqSpec *getFreqSpec() const { return (m_vpFreqSpec);};
+ const GncSchedDef *getSchedDef() const { return (m_vpSchedDef);};
+private:
+ // subsidiary objects/elements
+ enum ScheduleSubEls {STARTDATE, LASTDATE, ENDDATE, FREQ, RECURRENCE, DEFINST, END_Schedule_SELS };
+ virtual GncObject *startSubEl();
+ virtual void endSubEl(GncObject *);
+ virtual void terminate();
+ // data elements
+ enum ScheduleDataEls {NAME, ENABLED, AUTOC, AUTOCN, AUTOCD, ADVCD, ADVRD, INSTC,
+ NUMOCC, REMOCC, TEMPLID, END_Schedule_DELS };
+ GncDate *m_vpStartDate, *m_vpLastDate, *m_vpEndDate;
+ GncFreqSpec *m_vpFreqSpec;
+ mutable QPtrList<GncRecurrence> m_vpRecurrence; // gnc handles multiple occurrences
+ GncSchedDef *m_vpSchedDef;
+};
+// ************* GncFreqSpec********************************************
+class GncFreqSpec : public GncObject {
+public:
+ GncFreqSpec ();
+ ~GncFreqSpec();
+protected:
+ friend class MyMoneyGncReader;
+ // access data values (only interval type used at present)
+ QString intervalType() const { return (var(INTVT));};
+private:
+ // subsidiary objects/elements
+ enum FreqSpecSubEls {COMPO, END_FreqSpec_SELS };
+ virtual GncObject *startSubEl();
+ virtual void endSubEl(GncObject *);
+ // data elements
+ enum FreqSpecDataEls {INTVT, MONTHLY, DAILY, WEEKLY, INTVI, INTVO, INTVD, END_FreqSpec_DELS};
+ virtual void terminate();
+ mutable QPtrList<GncObject> m_fsList;
+};
+
+// ************* GncRecurrence********************************************
+// this object replaces GncFreqSpec from Gnucash 2.2 onwards
+class GncRecurrence : public GncObject {
+public:
+ GncRecurrence ();
+ ~GncRecurrence();
+protected:
+ friend class MyMoneyGncReader;
+ // access data values
+ QDate startDate () const
+ {QDate x = QDate(); return (m_vpStartDate == NULL ? x : m_vpStartDate->date());};
+ QString mult() const {return (var(MULT));};
+ QString periodType() const {return (var(PERIODTYPE));};
+ QString getFrequency() const;
+private:
+ // subsidiary objects/elements
+ enum RecurrenceSubEls {STARTDATE, END_Recurrence_SELS };
+ virtual GncObject *startSubEl();
+ virtual void endSubEl(GncObject *);
+ // data elements
+ enum RecurrenceDataEls {MULT, PERIODTYPE, END_Recurrence_DELS};
+ virtual void terminate();
+ GncDate *m_vpStartDate;
+};
+
+// ************* GncSchedDef********************************************
+// This is a sub-object of GncSchedule, (sx:deferredInstance) function currently unknown
+class GncSchedDef : public GncObject {
+ public:
+ GncSchedDef ();
+ ~GncSchedDef();
+ protected:
+ friend class MyMoneyGncReader;
+ private:
+ // subsidiary objects/elements
+};
+
+// ****************************************************************************************
+/**
+ XML Reader
+ The XML reader is an implementation of the Qt SAX2 XML parser. It determines the type
+ of object represented by the XMl, and calls the appropriate object functions
+*/
+// *****************************************************************************************
+class XmlReader : public QXmlDefaultHandler {
+protected:
+ friend class MyMoneyGncReader;
+ XmlReader (MyMoneyGncReader *pM) : pMain(pM) {} // keep pointer to 'main'
+ void processFile (QIODevice*); // main entry point of reader
+ // define xml content handler functions
+ bool startDocument ();
+ bool startElement (const QString&, const QString&, const QString&, const QXmlAttributes&);
+ bool endElement (const QString&, const QString&, const QString&);
+ bool characters (const QString &);
+ bool endDocument();
+private:
+ QXmlInputSource *m_source;
+ QXmlSimpleReader *m_reader;
+ QPtrStack<GncObject> m_os; // stack of sub objects
+ GncObject *m_co; // current object, for ease of coding (=== m_os.top)
+ MyMoneyGncReader *pMain; // the 'main' pointer, to pass on to objects
+ bool m_headerFound; // check for gnc-v2 header
+#ifdef _GNCFILEANON
+ int lastType; // 0 = start element, 1 = data, 2 = end element
+ int indentCount;
+#endif // _GNCFILEANON
+};
+
+/**
+ * private classes to define messages to be held in list for final report
+ */
+class GncMessageArgs {
+protected:
+ friend class MyMoneyGncReader;
+ QString source; // 'type of message
+ unsigned int code; // to identify actual message
+ QValueList<QString> args; // variable arguments
+};
+
+class GncMessages {
+protected:
+ friend class MyMoneyGncReader;
+ static QString text (const QString, const unsigned int); // returns text of identified message
+ static unsigned int argCount (const QString, const unsigned int); // returns no. of args required
+private:
+ typedef struct {
+ const QString source;
+ const unsigned int code;
+ QString text;
+ }
+ messText;
+ static messText texts [];
+};
+
+/**
+ MyMoneyGncReader - Main class for this module
+ Controls overall operation of the importer
+ */
+
+#ifndef _GNCFILEANON
+class MyMoneyGncReader : public IMyMoneyStorageFormat {
+#else
+class MyMoneyGncReader {
+#endif // _GNCFILEANON
+public:
+ MyMoneyGncReader();
+ virtual ~MyMoneyGncReader();
+ /**
+ * Import a GnuCash XML file
+ *
+ * @param pDevice : pointer to GnuCash file
+ * @param storage : pointer to MyMoneySerialize storage
+ *
+ * @return void
+ *
+ */
+#ifndef _GNCFILEANON
+ void readFile (QIODevice* pDevice, IMyMoneySerialize* storage); // main entry point, IODevice is gnucash file
+ void writeFile (QIODevice*, IMyMoneySerialize*) { return ;}; // dummy entry needed by kmymoneywiew. we will not be writing
+#else
+ void readFile (QString, QString);
+#endif // _GNCFILEANON
+ QTextCodec *m_decoder;
+protected:
+ friend class GncObject; // pity we can't just say GncObject. And compiler doesn't like multiple friends on one line...
+ friend class GncFile; // there must be a better way...
+ friend class GncDate;
+ friend class GncCmdtySpec;
+ friend class GncKvp;
+ friend class GncLot;
+ friend class GncCountData;
+ friend class GncCommodity;
+ friend class GncPrice;
+ friend class GncAccount;
+ friend class GncTransaction;
+ friend class GncSplit;
+ friend class GncTemplateTransaction;
+ friend class GncTemplateSplit;
+ friend class GncSchedule;
+ friend class GncFreqSpec;
+ friend class GncRecurrence;
+ friend class XmlReader;
+#ifndef _GNCFILEANON
+ /** functions to convert gnc objects to our equivalent */
+ void convertCommodity (const GncCommodity *);
+ void convertPrice (const GncPrice *);
+ void convertAccount (const GncAccount *);
+ void convertTransaction (const GncTransaction *);
+ void convertSplit (const GncSplit *);
+ void saveTemplateTransaction (GncTransaction *t) {m_templateList.append (t);};
+ void convertSchedule (const GncSchedule *);
+ void convertFreqSpec (const GncFreqSpec *);
+ void convertRecurrence (const GncRecurrence *);
+#else
+ /** functions to convert gnc objects to our equivalent */
+ void convertCommodity (const GncCommodity *) {return;};
+ void convertPrice (const GncPrice *) {return;};
+ void convertAccount (const GncAccount *) {return;};
+ void convertTransaction (const GncTransaction *) {return;};
+ void convertSplit (const GncSplit *) {return;};
+ void saveTemplateTransaction (GncTransaction *t) {return;};
+ void convertSchedule (const GncSchedule *) {return;};
+ void convertFreqSpec (const GncFreqSpec *) {return;};
+#endif // _GNCFILEANON
+/** to post messages for final report */
+ void postMessage (const QString&, const unsigned int, const char *);
+ void postMessage (const QString&, const unsigned int, const char *, const char *);
+ void postMessage (const QString&, const unsigned int, const char *, const char *, const char *);
+ void postMessage (const QString&, const unsigned int, const QStringList&);
+ void setProgressCallback (void(*callback)(int, int, const QString&));
+ void signalProgress (int current, int total, const QString& = "");
+ /** user options */
+ /**
+ Scheduled Transactions
+ Due to differences in implementation, it is not always possible to import scheduled
+ transactions correctly. Though best efforts are made, it may be that some
+ imported transactions cause problems within kmymoney.
+ An attempt is made within the importer to identify potential problem transactions,
+ and setting this option will cause them to be dropped from the file.
+ A report of which were dropped, and why, will be produced.
+ m_dropSuspectSchedules - drop suspect scheduled transactions
+ */
+ bool m_dropSuspectSchedules;
+ /**
+ Investments
+ In kmymoney, all accounts representing investments (stocks, shares, bonds, etc.) must
+ have an associated investment account (e.g. a broker account). The stock account holds
+ the share balance, the investment account a money balance.
+ Gnucash does not do this, so we cannot automate this function. If you have investments,
+ you must select one of the following options.
+ 0 - create a separate investment account for each stock with the same name as the stock
+ 1 - create a single investment account to hold all stocks - you will be asked for a name
+ 2 - create multiple investment accounts - you will be asked for a name for each stock
+ N.B. :- option 2 doesn't really work quite as desired at present
+ */
+ unsigned int m_investmentOption;
+ /** Online quotes
+ The user has the option to use the Finance::Quote system, as used by GnuCash, to
+ retrieve online share price quotes
+ */
+ bool m_useFinanceQuote;
+ /** Tx Notes handling
+ Under some usage conditions, non-split GnuCash transactions may contain residual, usually incorrect, memo
+ data which is not normally visible to the user. When imported into KMyMoney however, due to display
+ differences, this data can become visible. Often, these transactions will have a Notes field describing
+ the real purpose of the transaction. If this option is selected, these notes, if present, will be used to
+ override the extraneous memo data." */
+ bool m_useTxNotes;
+ // set gnucash counts (not always accurate!)
+ void setGncCommodityCount(int i) { m_gncCommodityCount = i;};
+ void setGncAccountCount (int i) { m_gncAccountCount = i;};
+ void setGncTransactionCount (int i) { m_gncTransactionCount = i;};
+ void setGncScheduleCount (int i) { m_gncScheduleCount = i;};
+ void setSmallBusinessFound (bool b) { m_smallBusinessFound = b;};
+ void setBudgetsFound (bool b) { m_budgetsFound = b;};
+ void setLotsFound (bool b) { m_lotsFound = b;};
+ /* Debug Options
+ If you don't know what these are, best leave them alone.
+ gncdebug - produce general debug messages
+ xmldebug - produce a trace of the gnucash file XML
+ bAnonymize - hide personal data (account names, payees, etc., randomize money amounts)
+ */
+ bool gncdebug; // general debug messages
+ bool xmldebug; // xml trace
+ bool bAnonymize; // anonymize input
+ static double m_fileHideFactor; // an overall anonymization factor to be applied to all items
+ bool developerDebug;
+private:
+ void setOptions (); // to set user options from dialog
+ void setFileHideFactor ();
+ // the following handles the gnucash indicator for a bad value (-1/0) which causes us probs
+ QString convBadValue (QString gncValue) const {return (gncValue == "-1/0" ? "0/1" : gncValue); };
+#ifndef _GNCFILEANON
+ MyMoneyTransaction convertTemplateTransaction (const QString&, const GncTransaction *);
+ void convertTemplateSplit (const QString&, const GncTemplateSplit *);
+#endif // _GNCFILEANON
+ // wind up when all done
+ void terminate();
+ QString buildReportSection (const QString&);
+ bool writeReportToFile (const QValueList<QString>&);
+ // main storage
+#ifndef _GNCFILEANON
+ IMyMoneyStorage *m_storage;
+#else
+ QTextStream oStream;
+#endif // _GNCFILEANON
+ XmlReader *m_xr;
+ /** to hold the callback pointer for the progress bar */
+ void (*m_progressCallback)(int, int, const QString&);
+ // a map of which versions of the various elements (objects) we can import
+ map_elementVersions m_versionList;
+ // counters holding count data from the Gnc 'count-data' section
+ int m_gncCommodityCount;
+ int m_gncAccountCount;
+ int m_gncTransactionCount;
+ int m_gncScheduleCount;
+
+ // flags indicating detection of features not (yet?) supported
+ bool m_smallBusinessFound;
+ bool m_budgetsFound;
+ bool m_lotsFound;
+
+ /** counters for reporting */
+ int m_commodityCount;
+ int m_priceCount;
+ int m_accountCount;
+ int m_transactionCount;
+ int m_templateCount;
+ int m_scheduleCount;
+#ifndef _GNCFILEANON
+ // counters for error reporting
+ int m_ccCount, m_orCount, m_scCount;
+ // currency counter
+ QMap<QString, unsigned int> m_currencyCount;
+ /**
+ * Map gnucash vs. Kmm ids for accounts, equities, schedules, price sources
+ */
+ QMap<QString, QString> m_mapIds;
+ QString m_rootId; // save the root id for terminate()
+ QMap<QString, QString> m_mapEquities;
+ QMap<QString, QString> m_mapSchedules;
+ QMap<QString, QString> m_mapSources;
+ /**
+ * A list of stock accounts (gnc ids) which will be held till the end
+ so we can implement the user's investment option
+ */
+ QValueList<QString> m_stockList;
+ /**
+ * Temporary storage areas for transaction processing
+ */
+ QString m_txCommodity; // save commodity for current transaction
+ QString m_txPayeeId; // gnc has payee at tx level, we need it at split level
+ QDate m_txDatePosted; // ditto for post date
+ QString m_txChequeNo; // ditto for cheque number
+ /** In kmm, the order of splits is critical to some operations. These
+ * areas will hold the splits until we've read them all */
+ QValueList<MyMoneySplit> m_splitList, m_liabilitySplitList, m_otherSplitList;
+ bool m_potentialTransfer; // to determine whether this might be a transfer
+ /** Schedules are processed through 3 different functions, any of which may set this flag */
+ bool m_suspectSchedule;
+ /**
+ * A holding area for template txs while we're waiting for the schedules
+ */
+ QPtrList<GncTransaction> m_templateList;
+ /** Hold a list of suspect schedule ids for later processing? */
+ QValueList<QString> m_suspectList;
+ /**
+ * To hold message data till final report
+ */
+ QPtrList<GncMessageArgs> m_messageList;
+ GncMessages *m_messageTexts;
+ /**
+ * Internal utility functions
+ */
+ QString createPayee (const QString&); // create a payee and return it's id
+ QString createOrphanAccount (const QString&); // create unknown account and return the id
+ QDate incrDate (QDate lastDate, unsigned char interval, unsigned int intervalCount); // for date calculations
+ MyMoneyAccount checkConsistency (MyMoneyAccount& parent, MyMoneyAccount& child); // gnucash is sometimes TOO flexible
+ void checkInvestmentOption (QString stockId); // implement user investment option
+ void getPriceSource (MyMoneySecurity stock, QString gncSource);
+#endif // _GNCFILEANON
+};
+
+#endif // MYMONEYSTORAGEGNC_H
diff --git a/kmymoney2/converter/mymoneyqifprofile.cpp b/kmymoney2/converter/mymoneyqifprofile.cpp
new file mode 100644
index 0000000..b8fe97c
--- /dev/null
+++ b/kmymoney2/converter/mymoneyqifprofile.cpp
@@ -0,0 +1,1013 @@
+/***************************************************************************
+ mymoneyqifprofile.cpp - description
+ -------------------
+ begin : Tue Dec 24 2002
+ copyright : (C) 2002 by Thomas Baumgart
+ email : thb@net-bembel.de
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qregexp.h>
+#include <qvaluevector.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kglobal.h>
+#include <kconfig.h>
+#include <klocale.h>
+#include <kcalendarsystem.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoneyqifprofile.h"
+#include "../mymoney/mymoneyexception.h"
+#include "../mymoney/mymoneymoney.h"
+
+/*
+ * CENTURY_BREAK is used to identfy the century for a two digit year
+ *
+ * if yr is < CENTURY_BREAK it is in 2000
+ * if yr is >= CENTURY_BREAK it is in 1900
+ *
+ * so with CENTURY_BREAK being 70 the following will happen:
+ *
+ * 00..69 -> 2000..2069
+ * 70..99 -> 1970..1999
+ */
+#define CENTURY_BREAK 70
+
+class MyMoneyQifProfile::Private {
+ public:
+ Private() {
+ m_changeCount.resize(3, 0);
+ m_lastValue.resize(3, 0);
+ m_largestValue.resize(3, 0);
+ }
+
+ void getThirdPosition(void);
+ void dissectDate(QValueVector<QString>& parts, const QString& txt) const;
+
+ QValueVector<int> m_changeCount;
+ QValueVector<int> m_lastValue;
+ QValueVector<int> m_largestValue;
+ QMap<QChar, int> m_partPos;
+};
+
+void MyMoneyQifProfile::Private::dissectDate(QValueVector<QString>& parts, const QString& txt) const
+{
+ QRegExp nonDelimChars("[ 0-9a-zA-Z]");
+ int part = 0; // the current part we scan
+ unsigned int pos; // the current scan position
+ unsigned int maxPartSize = txt.length() > 6 ? 4 : 2;
+ // the maximum size of a part
+ // some fu... up MS-Money versions write two delimiter in a row
+ // so we need to keep track of them. Example: D14/12/'08
+ bool lastWasDelim = false;
+
+ // separate the parts of the date and keep the locations of the delimiters
+ for(pos = 0; pos < txt.length() && part < 3; ++pos) {
+ if(nonDelimChars.search(txt[pos]) == -1) {
+ if(!lastWasDelim) {
+ ++part;
+ maxPartSize = 0; // make sure to pick the right one depending if next char is numeric or not
+ lastWasDelim = true;
+ }
+ } else {
+ lastWasDelim = false;
+ // check if the part is over and we did not see a delimiter
+ if((maxPartSize != 0) && (parts[part].length() == maxPartSize)) {
+ ++part;
+ maxPartSize = 0;
+ }
+ if(maxPartSize == 0) {
+ maxPartSize = txt[pos].isDigit() ? 2 : 3;
+ if(part == 2)
+ maxPartSize = 4;
+ }
+ if(part < 3)
+ parts[part] += txt[pos];
+ }
+ }
+
+ if(part == 3) { // invalid date
+ for(int i = 0; i < 3; ++i) {
+ parts[i] = "0";
+ }
+ }
+}
+
+
+void MyMoneyQifProfile::Private::getThirdPosition(void)
+{
+ // if we have detected two parts we can calculate the third and its position
+ if(m_partPos.count() == 2) {
+ QValueList<QChar> partsPresent = m_partPos.keys();
+ QStringList partsAvail = QStringList::split(",", "d,m,y");
+ int missingIndex = -1;
+ int value = 0;
+ for(int i = 0; i < 3; ++i) {
+ if(!partsPresent.contains(partsAvail[i][0])) {
+ missingIndex = i;
+ } else {
+ value += m_partPos[partsAvail[i][0]];
+ }
+ }
+ m_partPos[partsAvail[missingIndex][0]] = 3 - value;
+ }
+}
+
+
+
+MyMoneyQifProfile::MyMoneyQifProfile() :
+ d(new Private),
+ m_isDirty(false)
+{
+ clear();
+}
+
+MyMoneyQifProfile::MyMoneyQifProfile(const QString& name) :
+ d(new Private),
+ m_isDirty(false)
+{
+ loadProfile(name);
+}
+
+MyMoneyQifProfile::~MyMoneyQifProfile()
+{
+ delete d;
+}
+
+void MyMoneyQifProfile::clear(void)
+{
+ m_dateFormat = "%d.%m.%yyyy";
+ m_apostropheFormat = "2000-2099";
+ m_valueMode = "";
+ m_filterScriptImport = "";
+ m_filterScriptExport = "";
+ m_filterFileType = "*.qif";
+
+ m_decimal.clear();
+ m_decimal['$'] =
+ m_decimal['Q'] =
+ m_decimal['T'] =
+ m_decimal['O'] =
+ m_decimal['I'] = KGlobal::locale()->monetaryDecimalSymbol()[0];
+
+ m_thousands.clear();
+ m_thousands['$'] =
+ m_thousands['Q'] =
+ m_thousands['T'] =
+ m_thousands['O'] =
+ m_thousands['I'] = KGlobal::locale()->monetaryThousandsSeparator()[0];
+
+ m_openingBalanceText = "Opening Balance";
+ m_voidMark = "VOID ";
+ m_accountDelimiter = "[";
+
+ m_profileName = "";
+ m_profileDescription = "";
+ m_profileType = "Bank";
+
+ m_attemptMatchDuplicates = true;
+}
+
+void MyMoneyQifProfile::loadProfile(const QString& name)
+{
+ KConfig* config = KGlobal::config();
+ config->setGroup(name);
+
+ clear();
+
+ m_profileName = name;
+ m_profileDescription = config->readEntry("Description", m_profileDescription);
+ m_profileType = config->readEntry("Type", m_profileType);
+ m_dateFormat = config->readEntry("DateFormat", m_dateFormat);
+ m_apostropheFormat = config->readEntry("ApostropheFormat", m_apostropheFormat);
+ m_accountDelimiter = config->readEntry("AccountDelimiter", m_accountDelimiter);
+ m_openingBalanceText = config->readEntry("OpeningBalance", m_openingBalanceText);
+ m_voidMark = config->readEntry("VoidMark", m_voidMark);
+ m_filterScriptImport = config->readEntry("FilterScriptImport", m_filterScriptImport);
+ m_filterScriptExport = config->readEntry("FilterScriptExport", m_filterScriptExport);
+ m_filterFileType = config->readEntry("FilterFileType",m_filterFileType);
+
+ m_attemptMatchDuplicates = config->readBoolEntry("AttemptMatchDuplicates", m_attemptMatchDuplicates);
+
+ // make sure, we remove any old stuff for now
+ config->deleteEntry("FilterScript");
+
+ QString tmp = QString(m_decimal['Q']) + m_decimal['T'] + m_decimal['I'] +
+ m_decimal['$'] + m_decimal['O'];
+ tmp = config->readEntry("Decimal", tmp);
+ m_decimal['Q'] = tmp[0];
+ m_decimal['T'] = tmp[1];
+ m_decimal['I'] = tmp[2];
+ m_decimal['$'] = tmp[3];
+ m_decimal['O'] = tmp[4];
+
+ tmp = QString(m_thousands['Q']) + m_thousands['T'] + m_thousands['I'] +
+ m_thousands['$'] + m_thousands['O'];
+ tmp = config->readEntry("Thousand", tmp);
+ m_thousands['Q'] = tmp[0];
+ m_thousands['T'] = tmp[1];
+ m_thousands['I'] = tmp[2];
+ m_thousands['$'] = tmp[3];
+ m_thousands['O'] = tmp[4];
+
+ m_isDirty = false;
+}
+
+void MyMoneyQifProfile::saveProfile(void)
+{
+ if(m_isDirty == true) {
+ KConfig* config = KGlobal::config();
+ config->setGroup(m_profileName);
+
+ config->writeEntry("Description", m_profileDescription);
+ config->writeEntry("Type", m_profileType);
+ config->writeEntry("DateFormat", m_dateFormat);
+ config->writeEntry("ApostropheFormat", m_apostropheFormat);
+ config->writeEntry("AccountDelimiter", m_accountDelimiter);
+ config->writeEntry("OpeningBalance", m_openingBalanceText);
+ config->writeEntry("VoidMark", m_voidMark);
+ config->writeEntry("FilterScriptImport", m_filterScriptImport);
+ config->writeEntry("FilterScriptExport", m_filterScriptExport);
+ config->writeEntry("FilterFileType", m_filterFileType);
+ config->writeEntry("AttemptMatchDuplicates", m_attemptMatchDuplicates);
+
+ QString tmp;
+
+ tmp = QString(m_decimal['Q']) + m_decimal['T'] + m_decimal['I'] +
+ m_decimal['$'] + m_decimal['O'];
+ config->writeEntry("Decimal", tmp);
+ tmp = QString(m_thousands['Q']) + m_thousands['T'] + m_thousands['I'] +
+ m_thousands['$'] + m_thousands['O'];
+ config->writeEntry("Thousand", tmp);
+ }
+ m_isDirty = false;
+}
+
+void MyMoneyQifProfile::setProfileName(const QString& name)
+{
+ if(m_profileName != name)
+ m_isDirty = true;
+
+ m_profileName = name;
+}
+
+void MyMoneyQifProfile::setProfileDescription(const QString& desc)
+{
+ if(m_profileDescription != desc)
+ m_isDirty = true;
+
+ m_profileDescription = desc;
+}
+
+void MyMoneyQifProfile::setProfileType(const QString& type)
+{
+ if(m_profileType != type)
+ m_isDirty = true;
+ m_profileType = type;
+}
+
+void MyMoneyQifProfile::setOutputDateFormat(const QString& dateFormat)
+{
+ if(m_dateFormat != dateFormat)
+ m_isDirty = true;
+
+ m_dateFormat = dateFormat;
+}
+
+void MyMoneyQifProfile::setInputDateFormat(const QString& dateFormat)
+{
+ int j = -1;
+ if(dateFormat.length() > 0) {
+ for(unsigned int i = 0; i < dateFormat.length()-1; ++i) {
+ if(dateFormat[i] == '%') {
+ d->m_partPos[dateFormat[++i]] = ++j;
+ }
+ }
+ }
+}
+
+void MyMoneyQifProfile::setApostropheFormat(const QString& apostropheFormat)
+{
+ if(m_apostropheFormat != apostropheFormat)
+ m_isDirty = true;
+
+ m_apostropheFormat = apostropheFormat;
+}
+
+void MyMoneyQifProfile::setAmountDecimal(const QChar& def, const QChar& chr)
+{
+ QChar ch(chr);
+ if(ch == QChar())
+ ch = ' ';
+
+ if(m_decimal[def] != ch)
+ m_isDirty = true;
+
+ m_decimal[def] = ch;
+}
+
+void MyMoneyQifProfile::setAmountThousands(const QChar& def, const QChar& chr)
+{
+ QChar ch(chr);
+ if(ch == QChar())
+ ch = ' ';
+
+ if(m_thousands[def] != ch)
+ m_isDirty = true;
+
+ m_thousands[def] = ch;
+}
+
+QChar MyMoneyQifProfile::amountDecimal(const QChar& def) const
+{
+ QChar chr = m_decimal[def];
+ return chr;
+}
+
+QChar MyMoneyQifProfile::amountThousands(const QChar& def) const
+{
+ QChar chr = m_thousands[def];
+ return chr;
+}
+
+void MyMoneyQifProfile::setAccountDelimiter(const QString& delim)
+{
+ QString txt(delim);
+
+ if(txt.isEmpty())
+ txt = " ";
+ else if(txt[0] != '[')
+ txt = "[";
+
+ if(m_accountDelimiter[0] != txt[0])
+ m_isDirty = true;
+ m_accountDelimiter = txt[0];
+}
+
+void MyMoneyQifProfile::setOpeningBalanceText(const QString& txt)
+{
+ if(m_openingBalanceText != txt)
+ m_isDirty = true;
+ m_openingBalanceText = txt;
+}
+
+void MyMoneyQifProfile::setVoidMark(const QString& txt)
+{
+ if(m_voidMark != txt)
+ m_isDirty = true;
+ m_voidMark = txt;
+}
+
+QString MyMoneyQifProfile::accountDelimiter(void) const
+{
+ QString rc;
+
+ switch(m_accountDelimiter[0]) {
+ case ' ':
+ rc = " ";
+ break;
+ default:
+ rc = "[]";
+ break;
+ }
+ return rc;
+}
+
+QString MyMoneyQifProfile::date(const QDate& datein) const
+{
+ const char* format = m_dateFormat.latin1();
+ QString buffer;
+ QChar delim;
+ int maskLen;
+ char maskChar;
+
+ while(*format) {
+ switch(*format) {
+ case '%':
+ maskLen = 0;
+ maskChar = *++format;
+ while(*format && *format == maskChar) {
+ ++maskLen;
+ ++format;
+ }
+
+ switch(maskChar) {
+ case 'd':
+ if(delim)
+ buffer += delim;
+ buffer += QString::number(datein.day()).rightJustify(2, '0');
+ break;
+
+ case 'm':
+ if(delim)
+ buffer += delim;
+ if(maskLen == 3)
+ buffer += KGlobal::locale()->calendar()->monthName(datein.month(), datein.year(), true);
+ else
+ buffer += QString::number(datein.month()).rightJustify(2, '0');
+ break;
+
+ case 'y':
+ if(maskLen == 2) {
+ buffer += twoDigitYear(delim, datein.year());
+ } else {
+ if(delim)
+ buffer += delim;
+ buffer += QString::number(datein.year());
+ }
+ break;
+ default:
+ throw new MYMONEYEXCEPTION("Invalid char in QifProfile date field");
+ break;
+ }
+ delim = 0;
+ break;
+
+ default:
+ if(delim)
+ buffer += delim;
+ delim = *format++;
+ break;
+ }
+ }
+ return buffer;
+}
+
+const QDate MyMoneyQifProfile::date(const QString& datein) const
+{
+ // in case we don't know the format, we return an invalid date
+ if(d->m_partPos.count() != 3)
+ return QDate();
+
+ QValueVector<QString> scannedParts(3);
+ d->dissectDate(scannedParts, datein);
+
+ int yr, mon, day;
+ bool ok;
+ yr = scannedParts[d->m_partPos['y']].toInt();
+ mon = scannedParts[d->m_partPos['m']].toInt(&ok);
+ if(!ok) {
+ QStringList monthNames = QStringList::split(",", "jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec");
+ int j;
+ for(j = 1; j <= 12; ++j) {
+ if((KGlobal::locale()->calendar()->monthName(j, 2000, true).lower() == scannedParts[d->m_partPos['m']].lower())
+ || (monthNames[j-1] == scannedParts[d->m_partPos['m']].lower())) {
+ mon = j;
+ break;
+ }
+ }
+ if(j == 13) {
+ qWarning("Unknown month '%s'", scannedParts[d->m_partPos['m']].data());
+ return QDate();
+ }
+ }
+
+ day = scannedParts[d->m_partPos['d']].toInt();
+ if(yr < 100) { // two digit year information?
+ if(yr < CENTURY_BREAK) // less than the CENTURY_BREAK we assume this century
+ yr += 2000;
+ else
+ yr += 1900;
+ }
+ return QDate(yr, mon, day);
+
+#if 0
+ QString scannedDelim[2];
+ QString formatParts[3];
+ QString formatDelim[2];
+ int part;
+ int delim;
+ unsigned int i,j;
+
+ part = -1;
+ delim = 0;
+ for(i = 0; i < m_dateFormat.length(); ++i) {
+ if(m_dateFormat[i] == '%') {
+ ++part;
+ if(part == 3) {
+ qWarning("MyMoneyQifProfile::date(const QString& datein) Too many parts in date format");
+ return QDate();
+ }
+ ++i;
+ }
+ switch(m_dateFormat[i].latin1()) {
+ case 'm':
+ case 'd':
+ case 'y':
+ formatParts[part] += m_dateFormat[i];
+ break;
+ case '/':
+ case '-':
+ case '.':
+ case '\'':
+ if(delim == 2) {
+ qWarning("MyMoneyQifProfile::date(const QString& datein) Too many delimiters in date format");
+ return QDate();
+ }
+ formatDelim[delim] = m_dateFormat[i];
+ ++delim;
+ break;
+ default:
+ qWarning("MyMoneyQifProfile::date(const QString& datein) Invalid char in date format");
+ return QDate();
+ }
+ }
+
+
+ part = 0;
+ delim = 0;
+ bool prevWasChar = false;
+ for(i = 0; i < datein.length(); ++i) {
+ switch(datein[i].latin1()) {
+ case '/':
+ case '.':
+ case '-':
+ case '\'':
+ if(delim == 2) {
+ qWarning("MyMoneyQifProfile::date(const QString& datein) Too many delimiters in date field");
+ return QDate();
+ }
+ scannedDelim[delim] = datein[i];
+ ++delim;
+ ++part;
+ prevWasChar = false;
+ break;
+
+ default:
+ if(prevWasChar && datein[i].isDigit()) {
+ ++part;
+ prevWasChar = false;
+ }
+ if(datein[i].isLetter())
+ prevWasChar = true;
+ // replace blank with 0
+ scannedParts[part] += (datein[i] == ' ') ? QChar('0') : datein[i];
+ break;
+ }
+ }
+
+ int day = 1,
+ mon = 1,
+ yr = 1900;
+ bool ok = false;
+ for(i = 0; i < 2; ++i) {
+ if(scannedDelim[i] != formatDelim[i]
+ && scannedDelim[i] != QChar('\'')) {
+ qWarning("MyMoneyQifProfile::date(const QString& datein) Invalid delimiter '%s' when '%s' was expected",
+ scannedDelim[i].latin1(), formatDelim[i].latin1());
+ return QDate();
+ }
+ }
+
+ QString msg;
+ for(i = 0; i < 3; ++i) {
+ switch(formatParts[i][0].latin1()) {
+ case 'd':
+ day = scannedParts[i].toUInt(&ok);
+ if (!ok)
+ msg = "Invalid numeric character in day string";
+ break;
+ case 'm':
+ if(formatParts[i].length() != 3) {
+ mon = scannedParts[i].toUInt(&ok);
+ if (!ok)
+ msg = "Invalid numeric character in month string";
+ } else {
+ for(j = 1; j <= 12; ++j) {
+ if(KGlobal::locale()->calendar()->monthName(j, 2000, true).lower() == formatParts[i].lower()) {
+ mon = j;
+ ok = true;
+ break;
+ }
+ }
+ if(j == 13) {
+ msg = "Unknown month '" + scannedParts[i] + "'";
+ }
+ }
+ break;
+ case 'y':
+ ok = false;
+ if(scannedParts[i].length() == formatParts[i].length()) {
+ yr = scannedParts[i].toUInt(&ok);
+ if (!ok)
+ msg = "Invalid numeric character in month string";
+ if(yr < 100) { // two digit year info
+ if(i > 1) {
+ ok = true;
+ if(scannedDelim[i-1] == QChar('\'')) {
+ if(m_apostropheFormat == "1900-1949") {
+ if(yr < 50)
+ yr += 1900;
+ else
+ yr += 2000;
+ } else if(m_apostropheFormat == "1900-1999") {
+ yr += 1900;
+ } else if(m_apostropheFormat == "2000-2099") {
+ yr += 2000;
+ } else {
+ msg = "Unsupported apostropheFormat!";
+ ok = false;
+ }
+ } else {
+ if(m_apostropheFormat == "1900-1949") {
+ if(yr < 50)
+ yr += 2000;
+ else
+ yr += 1900;
+ } else if(m_apostropheFormat == "1900-1999") {
+ yr += 2000;
+ } else if(m_apostropheFormat == "2000-2099") {
+ yr += 1900;
+ } else {
+ msg = "Unsupported apostropheFormat!";
+ ok = false;
+ }
+ }
+ } else {
+ msg = "Year as first parameter is not supported!";
+ }
+ } else if(yr < 1900) {
+ msg = "Year not in range < 100 or >= 1900!";
+ } else {
+ ok = true;
+ }
+ } else {
+ msg = QString("Length of year (%1) does not match expected length (%2).")
+ .arg(scannedParts[i].length()).arg(formatParts[i].length());
+ }
+ break;
+ }
+ if(!msg.isEmpty()) {
+ qWarning("MyMoneyQifProfile::date(const QString& datein) %s",msg.latin1());
+ return QDate();
+ }
+ }
+ return QDate(yr, mon, day);
+#endif
+}
+
+QString MyMoneyQifProfile::twoDigitYear(const QChar delim, int yr) const
+{
+ QChar realDelim = delim;
+ QString buffer;
+
+ if(delim) {
+ if((m_apostropheFormat == "1900-1949" && yr <= 1949)
+ || (m_apostropheFormat == "1900-1999" && yr <= 1999)
+ || (m_apostropheFormat == "2000-2099" && yr >= 2000))
+ realDelim = '\'';
+ buffer += realDelim;
+ }
+ yr -= 1900;
+ if(yr > 100)
+ yr -= 100;
+
+ if(yr < 10)
+ buffer += "0";
+
+ buffer += QString::number(yr);
+ return buffer;
+}
+
+QString MyMoneyQifProfile::value(const QChar& def, const MyMoneyMoney& valuein) const
+{
+ unsigned char _decimalSeparator;
+ unsigned char _thousandsSeparator;
+ QString res;
+
+ _decimalSeparator = MyMoneyMoney::decimalSeparator();
+ _thousandsSeparator = MyMoneyMoney::thousandSeparator();
+ MyMoneyMoney::signPosition _signPosition = MyMoneyMoney::negativeMonetarySignPosition();
+
+ MyMoneyMoney::setDecimalSeparator(amountDecimal(def));
+ MyMoneyMoney::setThousandSeparator(amountThousands(def));
+ MyMoneyMoney::setNegativeMonetarySignPosition(MyMoneyMoney::BeforeQuantityMoney);
+
+ res = valuein.formatMoney("", 2);
+
+ MyMoneyMoney::setDecimalSeparator(_decimalSeparator);
+ MyMoneyMoney::setThousandSeparator(_thousandsSeparator);
+ MyMoneyMoney::setNegativeMonetarySignPosition(_signPosition);
+
+ return res;
+}
+
+MyMoneyMoney MyMoneyQifProfile::value(const QChar& def, const QString& valuein) const
+{
+ unsigned char _decimalSeparator;
+ unsigned char _thousandsSeparator;
+ MyMoneyMoney res;
+
+ _decimalSeparator = MyMoneyMoney::decimalSeparator();
+ _thousandsSeparator = MyMoneyMoney::thousandSeparator();
+ MyMoneyMoney::signPosition _signPosition = MyMoneyMoney::negativeMonetarySignPosition();
+
+ MyMoneyMoney::setDecimalSeparator(amountDecimal(def));
+ MyMoneyMoney::setThousandSeparator(amountThousands(def));
+ MyMoneyMoney::setNegativeMonetarySignPosition(MyMoneyMoney::BeforeQuantityMoney);
+
+ res = MyMoneyMoney(valuein);
+
+ MyMoneyMoney::setDecimalSeparator(_decimalSeparator);
+ MyMoneyMoney::setThousandSeparator(_thousandsSeparator);
+ MyMoneyMoney::setNegativeMonetarySignPosition(_signPosition);
+
+ return res;
+}
+
+void MyMoneyQifProfile::setFilterScriptImport(const QString& script)
+{
+ if(m_filterScriptImport != script)
+ m_isDirty = true;
+
+ m_filterScriptImport = script;
+}
+
+void MyMoneyQifProfile::setFilterScriptExport(const QString& script)
+{
+ if(m_filterScriptExport != script)
+ m_isDirty = true;
+
+ m_filterScriptExport = script;
+}
+
+void MyMoneyQifProfile::setFilterFileType(const QString& txt)
+{
+ if(m_filterFileType != txt)
+ m_isDirty = true;
+
+ m_filterFileType = txt;
+}
+
+void MyMoneyQifProfile::setAttemptMatchDuplicates(bool f)
+{
+ if ( m_attemptMatchDuplicates != f )
+ m_isDirty = true;
+
+ m_attemptMatchDuplicates = f;
+}
+
+QString MyMoneyQifProfile::inputDateFormat(void) const
+{
+ QStringList list;
+ possibleDateFormats(list);
+ if(list.count() == 1)
+ return list.first();
+ return QString();
+}
+
+void MyMoneyQifProfile::possibleDateFormats(QStringList& list) const
+{
+ QStringList defaultList = QStringList::split(":", "y,m,d:y,d,m:m,d,y:m,y,d:d,m,y:d,y,m");
+ list.clear();
+ QStringList::const_iterator it_d;
+ for(it_d = defaultList.begin(); it_d != defaultList.end(); ++it_d) {
+ QStringList parts = QStringList::split(",", *it_d);
+ int i;
+ for(i = 0; i < 3; ++i) {
+ if(d->m_partPos.contains(parts[i][0])) {
+ if(d->m_partPos[parts[i][0]] != i)
+ break;
+ }
+ // months can't be larger than 12
+ if(parts[i] == "m" && d->m_largestValue[i] > 12)
+ break;
+ // days can't be larger than 31
+ if(parts[i] == "d" && d->m_largestValue[i] > 31)
+ break;
+ }
+ // matches all tests
+ if(i == 3) {
+ QString format = *it_d;
+ format.replace('y', "%y");
+ format.replace('m', "%m");
+ format.replace('d', "%d");
+ format.replace(',', " ");
+ list << format;
+ }
+ }
+ // if we haven't found any, then there's something wrong.
+ // in this case, we present the full list and let the user decide
+ if(list.count() == 0) {
+ for(it_d = defaultList.begin(); it_d != defaultList.end(); ++it_d) {
+ QString format = *it_d;
+ format.replace('y', "%y");
+ format.replace('m', "%m");
+ format.replace('d', "%d");
+ format.replace(',', " ");
+ list << format;
+ }
+ }
+}
+
+void MyMoneyQifProfile::autoDetect(const QStringList& lines)
+{
+ m_dateFormat = QString();
+ m_decimal.clear();
+ m_thousands.clear();
+
+ QString numericRecords = "BT$OIQ";
+ QStringList::const_iterator it;
+ int datesScanned = 0;
+ // section: used to switch between different QIF sections,
+ // because the Record identifiers are ambigous between sections
+ // eg. in transaction records, T identifies a total amount, in
+ // account sections it's the type.
+ //
+ // 0 - unknown
+ // 1 - account
+ // 2 - transactions
+ // 3 - prices
+ int section = 0;
+ QRegExp price("\"(.*)\",(.*),\"(.*)\"");
+ for(it = lines.begin(); it != lines.end(); ++it) {
+ QChar c((*it)[0]);
+ if(c == '!') {
+ QString sname = (*it).lower();
+ section = 0;
+ if(sname.startsWith("!account"))
+ section = 1;
+ else if(sname.startsWith("!type")) {
+ if(sname.startsWith("!type:cat")
+ || sname.startsWith("!type:payee")
+ || sname.startsWith("!type:security")
+ || sname.startsWith("!type:class")) {
+ section = 0;
+ } else if(sname.startsWith("!type:price")) {
+ section = 3;
+ } else
+ section = 2;
+ }
+ }
+
+ switch(section) {
+ case 1:
+ if(c == 'B') {
+ scanNumeric((*it).mid(1), m_decimal[c], m_thousands[c]);
+ }
+ break;
+ case 2:
+ if(numericRecords.contains(c)) {
+ scanNumeric((*it).mid(1), m_decimal[c], m_thousands[c]);
+ } else if((c == 'D') && (m_dateFormat.isEmpty())) {
+ if(d->m_partPos.count() != 3) {
+ scanDate((*it).mid(1));
+ ++datesScanned;
+ if(d->m_partPos.count() == 2) {
+ // if we have detected two parts we can calculate the third and its position
+ d->getThirdPosition();
+ }
+ }
+ }
+ break;
+ case 3:
+ if(price.search(*it) != -1) {
+ scanNumeric(price.cap(2), m_decimal['P'], m_thousands['P']);
+ scanDate(price.cap(3));
+ ++datesScanned;
+ }
+ break;
+ }
+ }
+
+ // the following algorithm is only applied if we have more
+ // than 20 dates found. Smaller numbers have shown that the
+ // results are inaccurate which leads to a reduced number of
+ // date formats presented to choose from.
+ if(d->m_partPos.count() != 3 && datesScanned > 20) {
+ QMap<int, int> sortedPos;
+ // make sure to reset the known parts for the following algorithm
+ if(d->m_partPos.contains('y')) {
+ d->m_changeCount[d->m_partPos['y']] = -1;
+ for(int i = 0; i < 3; ++i) {
+ if(d->m_partPos['y'] == i)
+ continue;
+ // can we say for sure that we hit the day field?
+ if(d->m_largestValue[i] > 12) {
+ d->m_partPos['d'] = i;
+ }
+ }
+ }
+ if(d->m_partPos.contains('d'))
+ d->m_changeCount[d->m_partPos['d']] = -1;
+ if(d->m_partPos.contains('m'))
+ d->m_changeCount[d->m_partPos['m']] = -1;
+
+ for(int i = 0; i < 3; ++i) {
+ if(d->m_changeCount[i] != -1) {
+ sortedPos[d->m_changeCount[i]] = i;
+ }
+ }
+
+ QMap<int, int>::const_iterator it_a;
+ QMap<int, int>::const_iterator it_b;
+ switch(sortedPos.count()) {
+ case 1: // all the same
+ // let the user decide, we can't figure it out
+ break;
+
+ case 2: // two are the same, we treat the largest as the day
+ // if it's 20% larger than the other one and let the
+ // user pick the other two
+ {
+ it_b = sortedPos.begin();
+ it_a = it_b;
+ ++it_b;
+ double a = d->m_changeCount[*it_a];
+ double b = d->m_changeCount[*it_b];
+ if(b > (a * 1.2)) {
+ d->m_partPos['d'] = *it_b;
+ }
+ }
+ break;
+
+ case 3: // three different, we check if they are 20% apart each
+ it_b = sortedPos.begin();
+ for(int i = 0; i < 2; ++i) {
+ it_a = it_b;
+ ++it_b;
+ double a = d->m_changeCount[*it_a];
+ double b = d->m_changeCount[*it_b];
+ if(b > (a * 1.2)) {
+ switch(i) {
+ case 0:
+ d->m_partPos['y'] = *it_a;
+ break;
+ case 1:
+ d->m_partPos['d'] = *it_b;
+ break;
+ }
+ }
+ }
+ break;
+ }
+ // extract the last if necessary and possible date position
+ d->getThirdPosition();
+ }
+}
+
+void MyMoneyQifProfile::scanNumeric(const QString& txt, QChar& decimal, QChar& thousands) const
+{
+ QChar first, second;
+ QRegExp numericChars("[0-9-()]");
+ for(unsigned int i = 0; i < txt.length(); ++i) {
+ if(numericChars.search(txt[i]) == -1) {
+ first = second;
+ second = txt[i];
+ }
+ }
+ if(!second.isNull())
+ decimal = second;
+ if(!first.isNull())
+ thousands = first;
+}
+
+void MyMoneyQifProfile::scanDate(const QString& txt) const
+{
+ // extract the parts from the txt
+ QValueVector<QString> parts(3); // the various parts of the date
+ d->dissectDate(parts, txt);
+
+ // now analyse the parts
+ for(int i = 0; i < 3; ++i) {
+ bool ok;
+ int value = parts[i].toInt(&ok);
+ if(!ok) { // this should happen only if the part is non-numeric -> month
+ d->m_partPos['m'] = i;
+ } else if(value != 0) {
+ if(value != d->m_lastValue[i]) {
+ d->m_changeCount[i]++;
+ d->m_lastValue[i] = value;
+ if(value > d->m_largestValue[i])
+ d->m_largestValue[i] = value;
+ }
+ // if it's > 31 it can only be years
+ if(value > 31) {
+ d->m_partPos['y'] = i;
+ }
+ // and if it's in between 12 and 32 and we already identified the
+ // position for the year it must be days
+ if((value > 12) && (value < 32) && d->m_partPos.contains('y')) {
+ d->m_partPos['d'] = i;
+ }
+ }
+ }
+}
+
+#include "mymoneyqifprofile.moc"
diff --git a/kmymoney2/converter/mymoneyqifprofile.h b/kmymoney2/converter/mymoneyqifprofile.h
new file mode 100644
index 0000000..bd6b328
--- /dev/null
+++ b/kmymoney2/converter/mymoneyqifprofile.h
@@ -0,0 +1,144 @@
+/***************************************************************************
+ mymoneyqifprofile.h - description
+ -------------------
+ begin : Tue Dec 24 2002
+ copyright : (C) 2002 by Thomas Baumgart
+ email : thb@net-bembel.de
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYQIFPROFILE_H
+#define MYMONEYQIFPROFILE_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qobject.h>
+#include <qstring.h>
+class QDate;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+class MyMoneyMoney;
+
+/**
+ * @author Thomas Baumgart
+ */
+
+class MyMoneyQifProfile : public QObject
+{
+ Q_OBJECT
+
+public:
+ MyMoneyQifProfile();
+ MyMoneyQifProfile(const QString& name);
+ ~MyMoneyQifProfile();
+
+ const QString& profileName(void) const { return m_profileName; }
+ void setProfileName(const QString& name);
+
+ void loadProfile(const QString& name);
+ void saveProfile(void);
+
+ const QDate date(const QString& datein) const;
+ QString date(const QDate& datein) const;
+
+ MyMoneyMoney value(const QChar& def, const QString& valuein) const;
+ QString value(const QChar& def, const MyMoneyMoney& valuein) const;
+
+ const QString& outputDateFormat(void) const { return m_dateFormat; }
+ QString inputDateFormat(void) const;
+ const QString& apostropheFormat(void) const { return m_apostropheFormat; }
+ QChar amountDecimal(const QChar& def) const;
+ QChar amountThousands(const QChar& def) const;
+ const QString& profileDescription(void) const { return m_profileDescription; }
+ const QString& profileType(void) const { return m_profileType; }
+ const QString& openingBalanceText(void) const { return m_openingBalanceText; }
+ QString accountDelimiter(void) const;
+ const QString& voidMark(void) const { return m_voidMark; }
+ const QString& filterScriptImport(void) const { return m_filterScriptImport; }
+ const QString& filterScriptExport(void) const { return m_filterScriptExport; }
+ const QString& filterFileType(void) const { return m_filterFileType; }
+ bool attemptMatchDuplicates(void) const { return m_attemptMatchDuplicates; }
+
+ /**
+ * This method scans all strings contained in @a lines and tries to figure
+ * out the settings for m_decimal, m_thousands and m_dateFormat
+ */
+ void autoDetect(const QStringList& lines);
+
+ /**
+ * This method returns a list of possible date formats the user
+ * can choose from. If autoDetect() has not been run, the @a list
+ * contains all possible date formats, in the other case, the @a list
+ * is adjusted to those that will match the data scanned.
+ */
+ void possibleDateFormats(QStringList& list) const;
+
+ /**
+ * This method presets the member variables with the default values.
+ */
+ void clear(void);
+
+ /**
+ * This method is used to determine, if a profile has been changed or not
+ */
+ bool isDirty(void) const { return m_isDirty; };
+
+public slots:
+ void setProfileDescription(const QString& desc);
+ void setProfileType(const QString& type);
+ void setOutputDateFormat(const QString& dateFormat);
+ void setInputDateFormat(const QString& dateFormat);
+ void setApostropheFormat(const QString& apostropheFormat);
+ void setAmountDecimal(const QChar& def, const QChar& chr);
+ void setAmountThousands(const QChar& def, const QChar& chr);
+ void setAccountDelimiter(const QString& delim);
+ void setOpeningBalanceText(const QString& text);
+ void setVoidMark(const QString& txt);
+ void setFilterScriptImport(const QString& txt);
+ void setFilterScriptExport(const QString& txt);
+ void setFilterFileType(const QString& txt);
+ void setAttemptMatchDuplicates(bool);
+
+private:
+ QString twoDigitYear(const QChar delim, int yr) const;
+ void scanNumeric(const QString& txt, QChar& decimal, QChar& thousands) const;
+ void scanDate(const QString& txt) const;
+
+private:
+ /// \internal d-pointer class.
+ class Private;
+ /// \internal d-pointer instance.
+ Private* const d;
+ bool m_isDirty;
+ QString m_profileName;
+ QString m_profileDescription;
+ QString m_dateFormat;
+ QString m_apostropheFormat;
+ QString m_valueMode;
+ QString m_profileType;
+ QString m_openingBalanceText;
+ QString m_voidMark;
+ QString m_accountDelimiter;
+ QString m_filterScriptImport;
+ QString m_filterScriptExport;
+ QString m_filterFileType; /*< The kind of input files the filter will expect, e.g. "*.qif" */
+ QMap<QChar, QChar> m_decimal;
+ QMap<QChar, QChar> m_thousands;
+ bool m_attemptMatchDuplicates;
+};
+
+#endif
diff --git a/kmymoney2/converter/mymoneyqifreader.cpp b/kmymoney2/converter/mymoneyqifreader.cpp
new file mode 100644
index 0000000..60b0604
--- /dev/null
+++ b/kmymoney2/converter/mymoneyqifreader.cpp
@@ -0,0 +1,2336 @@
+/***************************************************************************
+ mymoneyqifreader.cpp
+ -------------------
+ begin : Mon Jan 27 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ Ace Jones <acejones@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include <iostream>
+
+// ----------------------------------------------------------------------------
+// QT Headers
+
+#include <qfile.h>
+#include <qstringlist.h>
+#include <qtimer.h>
+#include <qtextedit.h>
+#include <qregexp.h>
+#include <qbuffer.h>
+
+// ----------------------------------------------------------------------------
+// KDE Headers
+
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kconfig.h>
+#include <kdebug.h>
+#include <kprogress.h>
+#include <kinputdialog.h>
+#include <kio/netaccess.h>
+
+// ----------------------------------------------------------------------------
+// Project Headers
+
+#include "mymoneyqifreader.h"
+#include "../mymoney/mymoneyfile.h"
+#include "../dialogs/kaccountselectdlg.h"
+#include "../kmymoney2.h"
+#include "kmymoneyglobalsettings.h"
+
+#include "mymoneystatementreader.h"
+#include <kmymoney/mymoneystatement.h>
+
+// define this to debug the code. Using external filters
+// while debugging did not work too good for me, so I added
+// this code.
+// #define DEBUG_IMPORT
+
+#ifdef DEBUG_IMPORT
+#warning "DEBUG_IMPORT defined --> external filter not available!!!!!!!"
+#endif
+
+class MyMoneyQifReader::Private {
+ public:
+ Private() :
+ accountType(MyMoneyAccount::Checkings),
+ mapCategories(true)
+ {}
+
+ QString accountTypeToQif(MyMoneyAccount::accountTypeE type) const;
+
+ /**
+ * finalize the current statement and add it to the statement list
+ */
+ void finishStatement(void);
+
+ bool isTransfer(QString& name, const QString& leftDelim, const QString& rightDelim);
+
+ /**
+ * Converts the QIF specific N-record of investment transactions into
+ * a category name
+ */
+ QString typeToAccountName(const QString& type) const;
+
+ /**
+ * Converts the QIF reconcile state to the KMyMoney reconcile state
+ */
+ MyMoneySplit::reconcileFlagE reconcileState(const QString& state) const;
+
+ /**
+ */
+ void fixMultiLineMemo(QString& memo) const;
+
+ public:
+ /**
+ * the statement that is currently collected/processed
+ */
+ MyMoneyStatement st;
+ /**
+ * the list of all statements to be sent to MyMoneyStatementReader
+ */
+ QValueList<MyMoneyStatement> statements;
+
+ /**
+ * a list of already used hashes in this file
+ */
+ QMap<QString, bool> m_hashMap;
+
+ QString st_AccountName;
+ QString st_AccountId;
+ MyMoneyAccount::accountTypeE accountType;
+ bool firstTransaction;
+ bool mapCategories;
+ MyMoneyQifReader::QifEntryTypeE transactionType;
+};
+
+void MyMoneyQifReader::Private::fixMultiLineMemo(QString& memo) const
+{
+ memo.replace("\\n", "\n");
+}
+
+void MyMoneyQifReader::Private::finishStatement(void)
+{
+ // in case we have collected any data in the statement, we keep it
+ if((st.m_listTransactions.count() + st.m_listPrices.count() + st.m_listSecurities.count()) > 0) {
+ statements += st;
+ qDebug("Statement with %d transactions, %d prices and %d securities added to the statement list",
+ st.m_listTransactions.count(), st.m_listPrices.count(), st.m_listSecurities.count());
+ }
+ // start with a fresh statement
+ st = MyMoneyStatement();
+ st.m_skipCategoryMatching = !mapCategories;
+ st.m_eType = (transactionType == MyMoneyQifReader::EntryTransaction) ? MyMoneyStatement::etCheckings : MyMoneyStatement::etInvestment;
+}
+
+QString MyMoneyQifReader::Private::accountTypeToQif(MyMoneyAccount::accountTypeE type) const
+{
+ QString rc = "Bank";
+
+ switch(type) {
+ default:
+ break;
+ case MyMoneyAccount::Cash:
+ rc = "Cash";
+ break;
+ case MyMoneyAccount::CreditCard:
+ rc = "CCard";
+ break;
+ case MyMoneyAccount::Asset:
+ rc = "Oth A";
+ break;
+ case MyMoneyAccount::Liability:
+ rc = "Oth L";
+ break;
+ case MyMoneyAccount::Investment:
+ rc = "Port";
+ break;
+ }
+ return rc;
+}
+
+QString MyMoneyQifReader::Private::typeToAccountName(const QString& type) const
+{
+ if(type == "reinvdiv")
+ return i18n("Category name", "Reinvested dividend");
+
+ if(type == "reinvlg")
+ return i18n("Category name", "Reinvested dividend (long term)");
+
+ if(type == "reinvsh")
+ return i18n("Category name", "Reinvested dividend (short term)");
+
+ if (type == "div")
+ return i18n("Category name", "Dividend");
+
+ if(type == "intinc")
+ return i18n("Category name", "Interest");
+
+ if(type == "cgshort")
+ return i18n("Category name", "Capital Gain (short term)");
+
+ if( type == "cgmid")
+ return i18n("Category name", "Capital Gain (mid term)");
+
+ if(type == "cglong")
+ return i18n("Category name", "Capital Gain (long term)");
+
+ if(type == "rtrncap")
+ return i18n("Category name", "Returned capital");
+
+ if(type == "miscinc")
+ return i18n("Category name", "Miscellaneous income");
+
+ if(type == "miscexp")
+ return i18n("Category name", "Miscellaneous expense");
+
+ if(type == "sell" || type == "buy")
+ return i18n("Category name", "Investment fees");
+
+ return i18n("Unknown QIF type %1").arg(type);
+}
+
+bool MyMoneyQifReader::Private::isTransfer(QString& tmp, const QString& leftDelim, const QString& rightDelim)
+{
+ // it's a transfer, extract the account name
+ // I've seen entries like this
+ //
+ // S[Mehrwertsteuer]/_VATCode_N_I
+ //
+ // so extracting is a bit more complex and we use a regexp for it
+ QRegExp exp(QString("\\%1(.*)\\%2(.*)").arg(leftDelim, rightDelim));
+
+ bool rc;
+ if((rc = (exp.search(tmp) != -1)) == true) {
+ tmp = exp.cap(1)+exp.cap(2);
+ tmp = tmp.stripWhiteSpace();
+ }
+ return rc;
+}
+
+MyMoneySplit::reconcileFlagE MyMoneyQifReader::Private::reconcileState(const QString& state) const
+{
+ if(state == "X" || state == "R") // Reconciled
+ return MyMoneySplit::Reconciled;
+
+ if(state == "*") // Cleared
+ return MyMoneySplit::Cleared;
+
+ return MyMoneySplit::NotReconciled;
+}
+
+
+MyMoneyQifReader::MyMoneyQifReader() :
+ d(new Private)
+{
+ m_skipAccount = false;
+ m_transactionsProcessed =
+ m_transactionsSkipped = 0;
+ m_progressCallback = 0;
+ m_file = 0;
+ m_entryType = EntryUnknown;
+ m_processingData = false;
+ m_userAbort = false;
+ m_warnedInvestment = false;
+ m_warnedSecurity = false;
+ m_warnedPrice = false;
+
+ connect(&m_filter, SIGNAL(wroteStdin(KProcess*)), this, SLOT(slotSendDataToFilter()));
+ connect(&m_filter, SIGNAL(receivedStdout(KProcess*, char*, int)), this, SLOT(slotReceivedDataFromFilter(KProcess*, char*, int)));
+ connect(&m_filter, SIGNAL(processExited(KProcess*)), this, SLOT(slotImportFinished()));
+ connect(&m_filter, SIGNAL(receivedStderr(KProcess*, char*, int)), this, SLOT(slotReceivedErrorFromFilter(KProcess*, char*, int)));
+}
+
+MyMoneyQifReader::~MyMoneyQifReader()
+{
+ if(m_file)
+ delete m_file;
+ delete d;
+}
+
+void MyMoneyQifReader::setCategoryMapping(bool map)
+{
+ d->mapCategories = map;
+}
+
+void MyMoneyQifReader::setURL(const KURL& url)
+{
+ m_url = url;
+}
+
+void MyMoneyQifReader::setProfile(const QString& profile)
+{
+ m_qifProfile.loadProfile("Profile-" + profile);
+}
+
+void MyMoneyQifReader::slotSendDataToFilter(void)
+{
+ Q_LONG len;
+
+ if(m_file->atEnd()) {
+ // m_filter.flushStdin();
+ m_filter.closeStdin();
+ } else {
+ len = m_file->readBlock(m_buffer, sizeof(m_buffer));
+ if(len == -1) {
+ qWarning("Failed to read block from QIF import file");
+ m_filter.closeStdin();
+ m_filter.kill();
+ } else {
+ m_filter.writeStdin(m_buffer, len);
+ }
+ }
+}
+
+void MyMoneyQifReader::slotReceivedErrorFromFilter(KProcess* /* proc */, char *buff, int len)
+{
+ QByteArray data;
+ data.duplicate(buff, len);
+ qWarning("%s",static_cast<const char*>(data));
+}
+
+void MyMoneyQifReader::slotReceivedDataFromFilter(KProcess* /* proc */, char *buff, int len)
+{
+ m_pos += len;
+ // signalProgress(m_pos, 0);
+
+ while(len) {
+ // process char
+ if(*buff == '\n' || *buff == '\r') {
+ // found EOL
+ if(!m_lineBuffer.isEmpty()) {
+ m_qifLines << QString::fromUtf8(m_lineBuffer.stripWhiteSpace());
+ }
+ m_lineBuffer = QCString();
+ } else {
+ // collect all others
+ m_lineBuffer += (*buff);
+ }
+ ++buff;
+ --len;
+ }
+}
+
+void MyMoneyQifReader::slotImportFinished(void)
+{
+ // check if the last EOL char was missing and add the trailing line
+ if(!m_lineBuffer.isEmpty()) {
+ m_qifLines << QString::fromUtf8(m_lineBuffer.stripWhiteSpace());
+ }
+ qDebug("Read %d bytes", m_pos);
+ QTimer::singleShot(0, this, SLOT(slotProcessData()));
+}
+
+void MyMoneyQifReader::slotProcessData(void)
+{
+ signalProgress(-1, -1);
+
+ // scan the file and try to determine numeric and date formats
+ m_qifProfile.autoDetect(m_qifLines);
+
+ // the detection is accurate for numeric values, but it could be
+ // that the dates were too ambiguous so that we have to let the user
+ // decide which one to pick.
+ QStringList dateFormats;
+ m_qifProfile.possibleDateFormats(dateFormats);
+ QStringList list;
+ if(dateFormats.count() > 1) {
+ list << dateFormats.first();
+ bool ok;
+ list = KInputDialog::getItemList(i18n("Date format selection"), i18n("Pick the date format that suits your input file"), dateFormats, list, false, &ok);
+ if(!ok) {
+ m_userAbort = true;
+ }
+ } else
+ list = dateFormats;
+
+ m_qifProfile.setInputDateFormat(list.first());
+
+ qDebug("Selected date format: '%s'", list.first().data());
+
+ signalProgress(0, m_qifLines.count(), i18n("Importing QIF ..."));
+ QStringList::iterator it;
+ for(it = m_qifLines.begin(); m_userAbort == false && it != m_qifLines.end(); ++it) {
+ ++m_linenumber;
+ // qDebug("Proc: '%s'", (*it).data());
+ if((*it).startsWith("!")) {
+ processQifSpecial(*it);
+ m_qifEntry.clear();
+ } else if(*it == "^") {
+ if(m_qifEntry.count() > 0) {
+ signalProgress(m_linenumber, 0);
+ processQifEntry();
+ m_qifEntry.clear();
+ }
+ } else {
+ m_qifEntry += *it;
+ }
+ }
+ d->finishStatement();
+
+ qDebug("%d lines processed", m_linenumber);
+ signalProgress(-1, -1);
+
+ emit importFinished();
+}
+
+bool MyMoneyQifReader::startImport(void)
+{
+ bool rc = false;
+ d->st = MyMoneyStatement();
+ d->st.m_skipCategoryMatching = !d->mapCategories;
+ m_dontAskAgain.clear();
+ m_accountTranslation.clear();
+ m_userAbort = false;
+ m_pos = 0;
+ m_linenumber = 0;
+ m_filename = QString::null;
+ m_data.clear();
+
+ if(!KIO::NetAccess::download(m_url, m_filename, NULL)) {
+ KMessageBox::detailedError(0,
+ i18n("Error while loading file '%1'!").arg(m_url.prettyURL()),
+ KIO::NetAccess::lastErrorString(),
+ i18n("File access error"));
+ return false;
+ }
+
+ m_file = new QFile(m_filename);
+ if(m_file->open(IO_ReadOnly)) {
+
+#ifdef DEBUG_IMPORT
+ Q_LONG len;
+
+ while(!m_file->atEnd()) {
+ len = m_file->readBlock(m_buffer, sizeof(m_buffer));
+ if(len == -1) {
+ qWarning("Failed to read block from QIF import file");
+ } else {
+ slotReceivedDataFromFilter(0, m_buffer, len);
+ }
+ }
+ slotImportFinished();
+
+#else
+ // start filter process, use 'cat -' as the default filter
+ m_filter.clearArguments();
+ if(m_qifProfile.filterScriptImport().isEmpty()) {
+ m_filter << "cat";
+ m_filter << "-";
+ } else {
+ m_filter << QStringList::split(" ", m_qifProfile.filterScriptImport(), true);
+ }
+ m_entryType = EntryUnknown;
+
+ if(m_filter.start(KProcess::NotifyOnExit, KProcess::All)) {
+ m_filter.resume();
+ signalProgress(0, m_file->size(), i18n("Reading QIF ..."));
+ slotSendDataToFilter();
+ rc = true;
+ } else {
+ qDebug("starting filter failed :-(");
+ }
+#endif
+ }
+ return rc;
+}
+
+bool MyMoneyQifReader::finishImport(void)
+{
+ bool rc = false;
+
+#ifdef DEBUG_IMPORT
+ delete m_file;
+ m_file = 0;
+
+ // remove the Don't ask again entries
+ KConfig* config = KGlobal::config();
+ config->setGroup(QString::fromLatin1("Notification Messages"));
+ QStringList::ConstIterator it;
+
+ for(it = m_dontAskAgain.begin(); it != m_dontAskAgain.end(); ++it) {
+ config->deleteEntry(*it);
+ }
+ config->sync();
+ m_dontAskAgain.clear();
+ m_accountTranslation.clear();
+
+ signalProgress(-1, -1);
+ rc = !m_userAbort;
+
+#else
+ if(!m_filter.isRunning()) {
+ delete m_file;
+ m_file = 0;
+
+ // remove the Don't ask again entries
+ KConfig* config = KGlobal::config();
+ config->setGroup(QString::fromLatin1("Notification Messages"));
+ QStringList::ConstIterator it;
+
+ for(it = m_dontAskAgain.begin(); it != m_dontAskAgain.end(); ++it) {
+ config->deleteEntry(*it);
+ }
+ config->sync();
+ m_dontAskAgain.clear();
+ m_accountTranslation.clear();
+
+ signalProgress(-1, -1);
+ rc = !m_userAbort && m_filter.normalExit();
+ } else {
+ qWarning("MyMoneyQifReader::finishImport() must not be called while the filter\n\tprocess is still running.");
+ }
+#endif
+
+ // if a temporary file was constructed by NetAccess::download,
+ // then it will be removed with the next call. Otherwise, it
+ // stays untouched on the local filesystem
+ KIO::NetAccess::removeTempFile(m_filename);
+
+#if 0
+ // Add the transaction entries
+ KProgressDialog dlg(0,"transactionaddprogress",i18n("Adding transactions"),i18n("Now adding the transactions to your ledger..."));
+ dlg.progressBar()->setTotalSteps(m_transactionCache.count());
+ dlg.progressBar()->setTextEnabled(true);
+ dlg.setAllowCancel(true);
+ dlg.show();
+ kapp->processEvents();
+ MyMoneyFile* file = MyMoneyFile::instance();
+ QValueList<MyMoneyTransaction>::iterator it = m_transactionCache.begin();
+ MyMoneyFileTransaction ft;
+ try
+ {
+ while( it != m_transactionCache.end() )
+ {
+ if ( dlg.wasCancelled() )
+ {
+ m_userAbort = true;
+ rc = false;
+ break;
+ }
+ file->addTransaction(*it);
+ dlg.progressBar()->advance(1);
+ ++it;
+ }
+ if(rc)
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ KMessageBox::detailedSorry(0, i18n("Unable to add transactions"),
+ (e->what() + " " + i18n("thrown in") + " " + e->file()+ ":%1").arg(e->line()));
+ delete e;
+ rc = false;
+ }
+#endif
+ // Now to import the statements
+ QValueList<MyMoneyStatement>::const_iterator it_st;
+ for(it_st = d->statements.begin(); it_st != d->statements.end(); ++it_st)
+ kmymoney2->slotStatementImport(*it_st);
+ return rc;
+}
+
+void MyMoneyQifReader::processQifSpecial(const QString& _line)
+{
+ QString line = _line.mid(1); // get rid of exclamation mark
+ // QString test = line.left(5).lower();
+ if(line.left(5).lower() == QString("type:")) {
+ line = line.mid(5);
+
+ // exportable accounts
+ if(line.lower() == "ccard" || KMyMoneyGlobalSettings::qifCreditCard().lower().contains(line.lower())) {
+ d->accountType = MyMoneyAccount::CreditCard;
+ d->firstTransaction = true;
+ d->transactionType = m_entryType = EntryTransaction;
+
+ } else if(line.lower() == "bank" || KMyMoneyGlobalSettings::qifBank().lower().contains(line.lower())) {
+ d->accountType = MyMoneyAccount::Checkings;
+ d->firstTransaction = true;
+ d->transactionType = m_entryType = EntryTransaction;
+
+ } else if(line.lower() == "cash" || KMyMoneyGlobalSettings::qifCash().lower().contains(line.lower())) {
+ d->accountType = MyMoneyAccount::Cash;
+ d->firstTransaction = true;
+ d->transactionType = m_entryType = EntryTransaction;
+
+ } else if(line.lower() == "oth a" || KMyMoneyGlobalSettings::qifAsset().lower().contains(line.lower())) {
+ d->accountType = MyMoneyAccount::Asset;
+ d->firstTransaction = true;
+ d->transactionType = m_entryType = EntryTransaction;
+
+ } else if(line.lower() == "oth l" || line.lower() == i18n("QIF tag for liability account", "Oth L").lower()) {
+ d->accountType = MyMoneyAccount::Liability;
+ d->firstTransaction = true;
+ d->transactionType = m_entryType = EntryTransaction;
+
+ } else if(line.lower() == "invst" || line.lower() == i18n("QIF tag for investment account", "Invst").lower()) {
+ d->transactionType = m_entryType = EntryInvestmentTransaction;
+
+ } else if(line.lower() == "invoice" || KMyMoneyGlobalSettings::qifInvoice().lower().contains(line.lower())) {
+ m_entryType = EntrySkip;
+
+ } else if(line.lower() == "tax") {
+ m_entryType = EntrySkip;
+
+ } else if(line.lower() == "bill") {
+ m_entryType = EntrySkip;
+
+ // exportable lists
+ } else if(line.lower() == "cat" || line.lower() == i18n("QIF tag for category", "Cat").lower()) {
+ m_entryType = EntryCategory;
+
+ } else if(line.lower() == "security" || line.lower() == i18n("QIF tag for security", "Security").lower()) {
+ m_entryType = EntrySecurity;
+
+ } else if(line.lower() == "prices" || line.lower() == i18n("QIF tag for prices", "Prices").lower()) {
+ m_entryType = EntryPrice;
+
+ } else if(line.lower() == "payee") {
+ m_entryType = EntryPayee;
+
+ } else if(line.lower() == "class" || line.lower() == i18n("QIF tag for a class", "Class").lower()) {
+ m_entryType = EntryClass;
+
+ } else if(line.lower() == "memorized") {
+ m_entryType = EntryMemorizedTransaction;
+
+ } else if(line.lower() == "budget") {
+ m_entryType = EntrySkip;
+
+ } else if(line.lower() == "invitem") {
+ m_entryType = EntrySkip;
+
+ } else if(line.lower() == "template") {
+ m_entryType = EntrySkip;
+
+ } else {
+ qWarning("Unknown export header '!Type:%s' in QIF file on line %d: Skipping section.", line.data(), m_linenumber);
+ m_entryType = EntrySkip;
+ }
+
+ // account headers
+ } else if(line.lower() == "account") {
+ m_entryType = EntryAccount;
+
+ } else if(line.lower() == "option:autoswitch") {
+ m_entryType = EntryAccount;
+
+ } else if(line.lower() == "clear:autoswitch") {
+ m_entryType = d->transactionType;
+ }
+}
+
+void MyMoneyQifReader::processQifEntry(void)
+{
+ // This method processes a 'QIF Entry' which is everything between two caret
+ // signs
+ //
+ try {
+ switch(m_entryType) {
+ case EntryCategory:
+ processCategoryEntry();
+ break;
+
+ case EntryUnknown:
+ kdDebug(2) << "Line " << m_linenumber << ": Warning: Found an entry without a type being specified. Checking assumed." << endl;
+ processTransactionEntry();
+ break;
+
+ case EntryTransaction:
+ processTransactionEntry();
+ break;
+
+ case EntryInvestmentTransaction:
+ processInvestmentTransactionEntry();
+ break;
+
+ case EntryAccount:
+ processAccountEntry();
+ break;
+
+ case EntrySecurity:
+ processSecurityEntry();
+ break;
+
+ case EntryPrice:
+ processPriceEntry();
+ break;
+
+ case EntryPayee:
+ processPayeeEntry();
+ break;
+
+ case EntryClass:
+ kdDebug(2) << "Line " << m_linenumber << ": Classes are not yet supported!" << endl;
+ break;
+
+ case EntryMemorizedTransaction:
+ kdDebug(2) << "Line " << m_linenumber << ": Memorized transactions are not yet implemented!" << endl;
+ break;
+
+ case EntrySkip:
+ break;
+
+ default:
+ kdDebug(2) << "Line " << m_linenumber<< ": EntryType " << m_entryType <<" not yet implemented!" << endl;
+ break;
+ }
+ } catch(MyMoneyException *e) {
+ if(e->what() != "USERABORT") {
+ kdDebug(2) << "Line " << m_linenumber << ": Unhandled error: " << e->what() << endl;
+ } else {
+ m_userAbort = true;
+ }
+ delete e;
+ }
+}
+
+const QString MyMoneyQifReader::extractLine(const QChar id, int cnt)
+{
+ QStringList::ConstIterator it;
+
+ m_extractedLine = -1;
+ for(it = m_qifEntry.begin(); it != m_qifEntry.end(); ++it) {
+ m_extractedLine++;
+ if((*it)[0] == id) {
+ if(cnt-- == 1) {
+ if((*it).mid(1).isEmpty())
+ return QString(" ");
+ return (*it).mid(1);
+ }
+ }
+ }
+ m_extractedLine = -1;
+ return QString();
+}
+
+void MyMoneyQifReader::extractSplits(QValueList<qSplit>& listqSplits) const
+{
+// *** With apologies to QString MyMoneyQifReader::extractLine ***
+
+ QStringList::ConstIterator it;
+
+ for(it = m_qifEntry.begin(); it != m_qifEntry.end(); ++it) {
+ if((*it)[0] == "S") {
+ qSplit q;
+ q.m_strCategoryName = (*it++).mid(1); // 'S'
+ if((*it)[0] == "E") {
+ q.m_strMemo = (*it++).mid(1); // 'E'
+ d->fixMultiLineMemo(q.m_strMemo);
+ }
+ if((*it)[0] == "$") {
+ q.m_amount = (*it).mid(1); // '$'
+ }
+ listqSplits += q;
+ }
+ }
+}
+#if 0
+void MyMoneyQifReader::processMSAccountEntry(const MyMoneyAccount::accountTypeE accountType)
+{
+ if(extractLine('P').lower() == m_qifProfile.openingBalanceText().lower()) {
+ m_account = MyMoneyAccount();
+ m_account.setAccountType(accountType);
+ QString txt = extractLine('T');
+ MyMoneyMoney balance = m_qifProfile.value('T', txt);
+
+ QDate date = m_qifProfile.date(extractLine('D'));
+ m_account.setOpeningDate(date);
+
+ QString name = extractLine('L');
+ if(name.left(1) == m_qifProfile.accountDelimiter().left(1)) {
+ name = name.mid(1, name.length()-2);
+ }
+ d->st_AccountName = name;
+ m_account.setName(name);
+ selectOrCreateAccount(Select, m_account, balance);
+ d->st.m_accountId = m_account.id();
+ if ( ! balance.isZero() )
+ {
+ MyMoneyFile* file = MyMoneyFile::instance();
+ QString openingtxid = file->openingBalanceTransaction(m_account);
+ MyMoneyFileTransaction ft;
+ if ( ! openingtxid.isEmpty() )
+ {
+ MyMoneyTransaction openingtx = file->transaction(openingtxid);
+ MyMoneySplit split = openingtx.splitByAccount(m_account.id());
+
+ if ( split.shares() != balance )
+ {
+ const MyMoneySecurity& sec = file->security(m_account.currencyId());
+ if ( KMessageBox::questionYesNo(
+ qApp->mainWidget(),
+ i18n("The %1 account currently has an opening balance of %2. This QIF file reports an opening balance of %3. Would you like to overwrite the current balance with the one from the QIF file?").arg(m_account.name(), split.shares().formatMoney(m_account, sec),balance.formatMoney(m_account, sec)),
+ i18n("Overwrite opening balance"),
+ KStdGuiItem::yes(),
+ KStdGuiItem::no(),
+ "OverwriteOpeningBalance" )
+ == KMessageBox::Yes )
+ {
+ file->removeTransaction( openingtx );
+ m_account.setOpeningDate( date );
+ file->createOpeningBalanceTransaction( m_account, balance );
+ }
+ }
+
+ }
+ else
+ {
+ // Add an opening balance
+ m_account.setOpeningDate( date );
+ file->createOpeningBalanceTransaction( m_account, balance );
+ }
+ ft.commit();
+ }
+
+ } else {
+ // for some unknown reason, Quicken 2001 generates the following (somewhat
+ // misleading) sequence of lines:
+ //
+ // 1: !Account
+ // 2: NAT&T Universal
+ // 3: DAT&T Univers(...xxxx) [CLOSED]
+ // 4: TCCard
+ // 5: ^
+ // 6: !Type:CCard
+ // 7: !Account
+ // 8: NCFCU Visa
+ // 9: DRick's CFCU Visa card (...xxxx)
+ // 10: TCCard
+ // 11: ^
+ // 12: !Type:CCard
+ // 13: D1/ 4' 1
+ //
+ // Lines 1-5 are processed via processQifEntry() and processAccountEntry()
+ // Then Quicken issues line 6 but since the account does not carry any
+ // transaction does not write an end delimiter. Arrrgh! So we end up with
+ // a QIF entry comprising of lines 6-11 and end up in this routine. Actually,
+ // lines 7-11 are the leadin for the next account. So we check here if
+ // the !Type:xxx record also contains an !Account line and process the
+ // entry as required.
+ //
+ // (Ace) I think a better solution here is to handle exclamation point
+ // lines separately from entries. In the above case:
+ // Line 1 would set the mode to "account entries".
+ // Lines 2-5 would be interpreted as an account entry. This would set m_account.
+ // Line 6 would set the mode to "cc transaction entries".
+ // Line 7 would immediately set the mode to "account entries" again
+ // Lines 8-11 would be interpreted as an account entry. This would set m_account.
+ // Line 12 would set the mode to "cc transaction entries"
+ // Lines 13+ would be interpreted as cc transaction entries, and life is good
+ int exclamationCnt = 1;
+ QString category;
+ do {
+ category = extractLine('!', exclamationCnt++);
+ } while(!category.isEmpty() && category != "Account");
+
+ // we have such a weird empty account
+ if(category == "Account") {
+ processAccountEntry();
+ } else
+ {
+ selectOrCreateAccount(Select, m_account);
+
+ d->st_AccountName = m_account.name();
+ d->st.m_strAccountName = m_account.name();
+ d->st.m_accountId = m_account.id();
+ d->st.m_strAccountNumber = m_account.id();
+ m_account.setNumber(m_account.id());
+ if ( m_entryType == EntryInvestmentTransaction )
+ processInvestmentTransactionEntry();
+ else
+ processTransactionEntry();
+ }
+ }
+}
+#endif
+
+void MyMoneyQifReader::processPayeeEntry(void)
+{
+ // TODO
+}
+
+void MyMoneyQifReader::processCategoryEntry(void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyAccount account = MyMoneyAccount();
+ account.setName(extractLine('N'));
+ account.setDescription(extractLine('D'));
+
+ MyMoneyAccount parentAccount;
+ if(!extractLine('I').isEmpty()) {
+ account.setAccountType(MyMoneyAccount::Income);
+ parentAccount = file->income();
+ } else if(!extractLine('E').isEmpty()) {
+ account.setAccountType(MyMoneyAccount::Expense);
+ parentAccount = file->expense();
+ }
+
+ // check if we can find the account already in the file
+ MyMoneyAccount acc = kmymoney2->findAccount(account, MyMoneyAccount());
+
+ // if not, we just create it
+ if(acc.id().isEmpty()) {
+ MyMoneyAccount brokerage;
+ MyMoneyMoney balance;
+ kmymoney2->createAccount(account, parentAccount, brokerage, balance);
+ }
+}
+
+QString MyMoneyQifReader::transferAccount(QString name, bool useBrokerage)
+{
+ QString accountId;
+ QStringList tmpEntry = m_qifEntry; // keep temp copies
+ MyMoneyAccount tmpAccount = m_account;
+
+ m_qifEntry.clear(); // and construct a temp entry to create/search the account
+ m_qifEntry << QString("N%1").arg(name);
+ m_qifEntry << QString("Tunknown");
+ m_qifEntry << QString("D%1").arg(i18n("Autogenerated by QIF importer"));
+ accountId = processAccountEntry(false);
+
+ // in case we found a reference to an investment account, we need
+ // to switch to the brokerage account instead.
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(accountId);
+ if(useBrokerage && (acc.accountType() == MyMoneyAccount::Investment)) {
+ name = acc.brokerageName();
+ m_qifEntry.clear(); // and construct a temp entry to create/search the account
+ m_qifEntry << QString("N%1").arg(name);
+ m_qifEntry << QString("Tunknown");
+ m_qifEntry << QString("D%1").arg(i18n("Autogenerated by QIF importer"));
+ accountId = processAccountEntry(false);
+ }
+ m_qifEntry = tmpEntry; // restore local copies
+ m_account = tmpAccount;
+
+ return accountId;
+}
+
+void MyMoneyQifReader::createOpeningBalance(MyMoneyAccount::_accountTypeE accType)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ // if we don't have a name for the current account we need to extract the name from the L-record
+ if(m_account.name().isEmpty()) {
+ QString name = extractLine('L');
+ if(name.isEmpty()) {
+ name = i18n("QIF imported, no account name supplied");
+ }
+ d->isTransfer(name, m_qifProfile.accountDelimiter().left(1), m_qifProfile.accountDelimiter().mid(1,1));
+ QStringList entry = m_qifEntry; // keep a temp copy
+ m_qifEntry.clear(); // and construct a temp entry to create/search the account
+ m_qifEntry << QString("N%1").arg(name);
+ m_qifEntry << QString("T%1").arg(d->accountTypeToQif(accType));
+ m_qifEntry << QString("D%1").arg(i18n("Autogenerated by QIF importer"));
+ processAccountEntry();
+ m_qifEntry = entry; // restore local copy
+ }
+
+ MyMoneyFileTransaction ft;
+ try {
+ bool needCreate = true;
+
+ MyMoneyAccount acc = m_account;
+ // in case we're dealing with an investment account, we better use
+ // the accompanying brokerage account for the opening balance
+ acc = file->accountByName(m_account.brokerageName());
+
+ // check if we already have an opening balance transaction
+ QString tid = file->openingBalanceTransaction(acc);
+ MyMoneyTransaction ot;
+ if(!tid.isEmpty()) {
+ ot = file->transaction(tid);
+ MyMoneySplit s0 = ot.splitByAccount(acc.id());
+ // if the value is the same, we can silently skip this transaction
+ if(s0.shares() == m_qifProfile.value('T', extractLine('T'))) {
+ needCreate = false;
+ }
+ if(needCreate) {
+ // in case we create it anyway, we issue a warning to the user to check it manually
+ KMessageBox::sorry(0, QString("<qt>%1</qt>").arg(i18n("KMyMoney has imported a second opening balance transaction into account <b>%1</b> which differs from the one found already on file. Please correct this manually once the import is done.").arg(acc.name())), i18n("Opening balance problem"));
+ }
+ }
+
+ if(needCreate) {
+ acc.setOpeningDate(m_qifProfile.date(extractLine('D')));
+ file->modifyAccount(acc);
+ MyMoneyTransaction t = file->createOpeningBalanceTransaction(acc, m_qifProfile.value('T', extractLine('T')));
+ if(!t.id().isEmpty()) {
+ t.setImported();
+ file->modifyTransaction(t);
+ }
+ ft.commit();
+ }
+
+ // make sure to use the updated version of the account
+ if(m_account.id() == acc.id())
+ m_account = acc;
+
+ // remember which account we created
+ d->st.m_accountId = m_account.id();
+ } catch(MyMoneyException* e) {
+ KMessageBox::detailedError(0,
+ i18n("Error while creating opening balance transaction"),
+ QString("%1(%2):%3").arg(e->file()).arg(e->line()).arg(e->what()),
+ i18n("File access error"));
+ delete e;
+ }
+}
+
+void MyMoneyQifReader::processTransactionEntry(void)
+{
+ ++m_transactionsProcessed;
+ // in case the user selected to skip the account or the account
+ // was not found we skip this transaction
+/*
+ if(m_account.id().isEmpty()) {
+ m_transactionsSkipped++;
+ return;
+ }
+*/
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyStatement::Split s1;
+ MyMoneyStatement::Transaction tr;
+ QString tmp;
+ QString accountId;
+ int pos;
+ QString payee = extractLine('P');
+ unsigned long h;
+
+ h = MyMoneyTransaction::hash(m_qifEntry.join(";"));
+
+ QString hashBase;
+ hashBase.sprintf("%s-%07lx", m_qifProfile.date(extractLine('D')).toString(Qt::ISODate).data(), h);
+ int idx = 1;
+ QString hash;
+ for(;;) {
+ hash = QString("%1-%2").arg(hashBase).arg(idx);
+ QMap<QString, bool>::const_iterator it;
+ it = d->m_hashMap.find(hash);
+ if(it == d->m_hashMap.end()) {
+ d->m_hashMap[hash] = true;
+ break;
+ }
+ ++idx;
+ }
+ tr.m_strBankID = hash;
+
+ if(d->firstTransaction) {
+ // check if this is an opening balance transaction and process it out of the statement
+ if(!payee.isEmpty() && ((payee.lower() == "opening balance") || KMyMoneyGlobalSettings::qifOpeningBalance().lower().contains(payee.lower()))) {
+ createOpeningBalance();
+ d->firstTransaction = false;
+ return;
+ }
+ }
+
+ // Process general transaction data
+
+ if(d->st.m_accountId.isEmpty())
+ d->st.m_accountId = m_account.id();
+
+ s1.m_accountId = d->st.m_accountId;
+
+ d->st.m_eType = MyMoneyStatement::etCheckings;
+ tr.m_datePosted = (m_qifProfile.date(extractLine('D')));
+ if(!tr.m_datePosted.isValid())
+ {
+ int rc = KMessageBox::warningContinueCancel(0,
+ i18n("The date entry \"%1\" read from the file cannot be interpreted through the current "
+ "date profile setting of \"%2\".\n\nPressing \"Continue\" will "
+ "assign todays date to the transaction. Pressing \"Cancel\" will abort "
+ "the import operation. You can then restart the import and select a different "
+ "QIF profile or create a new one.")
+ .arg(extractLine('D')).arg(m_qifProfile.inputDateFormat()),
+ i18n("Invalid date format"));
+ switch(rc) {
+ case KMessageBox::Continue:
+ tr.m_datePosted = (QDate::currentDate());
+ break;
+
+ case KMessageBox::Cancel:
+ throw new MYMONEYEXCEPTION("USERABORT");
+ break;
+ }
+ }
+
+ tmp = extractLine('L');
+ pos = tmp.findRev("--");
+ if(tmp.left(1) == m_qifProfile.accountDelimiter().left(1)) {
+ // it's a transfer, so we wipe the memo
+// tmp = ""; why??
+// st.m_strAccountName = tmp;
+ } else if(pos != -1) {
+// what's this?
+// t.setValue("Dialog", tmp.mid(pos+2));
+ tmp = tmp.left(pos);
+ }
+// t.setMemo(tmp);
+
+ // Assign the "#" field to the transaction's bank id
+ // This is the custom KMM extension to QIF for a unique ID
+ tmp = extractLine('#');
+ if(!tmp.isEmpty())
+ {
+ tr.m_strBankID = QString("ID %1").arg(tmp);
+ }
+
+#if 0
+ // Collect data for the account's split
+ s1.m_accountId = m_account.id();
+ tmp = extractLine('S');
+ pos = tmp.findRev("--");
+ if(pos != -1) {
+ tmp = tmp.left(pos);
+ }
+ if(tmp.left(1) == m_qifProfile.accountDelimiter().left(1))
+ // it's a transfer, extract the account name
+ tmp = tmp.mid(1, tmp.length()-2);
+ s1.m_strCategoryName = tmp;
+#endif
+ // TODO (Ace) Deal with currencies more gracefully. QIF cannot deal with multiple
+ // currencies, so we should assume that transactions imported into a given
+ // account are in THAT ACCOUNT's currency. If one of those involves a transfer
+ // to an account with a different currency, value and shares should be
+ // different. (Shares is in the target account's currency, value is in the
+ // transaction's)
+
+
+ s1.m_amount = m_qifProfile.value('T', extractLine('T'));
+ tr.m_amount = m_qifProfile.value('T', extractLine('T'));
+ tr.m_shares = m_qifProfile.value('T', extractLine('T'));
+ tmp = extractLine('N');
+ if (!tmp.isEmpty())
+ tr.m_strNumber = tmp;
+
+ if(!payee.isEmpty()) {
+ tr.m_strPayee = payee;
+ }
+
+ tr.m_reconcile = d->reconcileState(extractLine('C'));
+ tr.m_strMemo = extractLine('M');
+ d->fixMultiLineMemo(tr.m_strMemo);
+ s1.m_strMemo = tr.m_strMemo;
+ // tr.m_listSplits.append(s1);
+
+ if(extractLine('$').isEmpty()) {
+ MyMoneyAccount account;
+ // use the same values for the second split, but clear the ID and reverse the value
+ MyMoneyStatement::Split s2 = s1;
+ s2.m_reconcile = tr.m_reconcile;
+ s2.m_amount = (-s1.m_amount);
+// s2.clearId();
+
+ // standard transaction
+ tmp = extractLine('L');
+ if(d->isTransfer(tmp, m_qifProfile.accountDelimiter().left(1), m_qifProfile.accountDelimiter().mid(1, 1))) {
+ accountId = transferAccount(tmp, false);
+
+ } else {
+/* pos = tmp.findRev("--");
+ if(pos != -1) {
+ t.setValue("Dialog", tmp.mid(pos+2));
+ tmp = tmp.left(pos);
+ }*/
+
+ // it's an expense / income
+ tmp = tmp.stripWhiteSpace();
+ accountId = checkCategory(tmp, s1.m_amount, s2.m_amount);
+ }
+
+ if(!accountId.isEmpty()) {
+ try {
+ MyMoneyAccount account = file->account(accountId);
+ // FIXME: check that the type matches and ask if not
+
+ if ( account.accountType() == MyMoneyAccount::Investment )
+ {
+ kdDebug(0) << "Line " << m_linenumber << ": Cannot transfer to/from an investment account. Transaction ignored." << endl;
+ return;
+ }
+ if ( account.id() == m_account.id() )
+ {
+ kdDebug(0) << "Line " << m_linenumber << ": Cannot transfer to the same account. Transfer ignored." << endl;
+ accountId = QString();
+ }
+
+ } catch (MyMoneyException *e) {
+ kdDebug(0) << "Line " << m_linenumber << ": Account with id " << accountId.data() << " not found" << endl;
+ accountId = QString();
+ delete e;
+ }
+ }
+
+ if(!accountId.isEmpty()) {
+ s2.m_accountId = accountId;
+ s2.m_strCategoryName = tmp;
+ tr.m_listSplits.append(s2);
+ }
+
+ } else {
+ // split transaction
+ QValueList<qSplit> listqSplits;
+
+ extractSplits(listqSplits); // ****** ensure each field is ******
+ // * attached to correct split *
+ int count;
+
+ for(count = 1; !extractLine('$', count).isEmpty(); ++count)
+ {
+ MyMoneyStatement::Split s2 = s1;
+ s2.m_amount = (-m_qifProfile.value('$', listqSplits[count-1].m_amount)); // Amount of split
+ s2.m_strMemo = listqSplits[count-1].m_strMemo; // Memo in split
+ tmp = listqSplits[count-1].m_strCategoryName; // Category in split
+
+ if(d->isTransfer(tmp, m_qifProfile.accountDelimiter().left(1), m_qifProfile.accountDelimiter().mid(1, 1)))
+ {
+ accountId = transferAccount(tmp, false);
+
+ } else {
+ pos = tmp.findRev("--");
+ if(pos != -1) {
+/// t.setValue("Dialog", tmp.mid(pos+2));
+ tmp = tmp.left(pos);
+ }
+ tmp = tmp.stripWhiteSpace();
+ accountId = checkCategory(tmp, s1.m_amount, s2.m_amount);
+ }
+
+ if(!accountId.isEmpty()) {
+ try {
+ MyMoneyAccount account = file->account(accountId);
+ // FIXME: check that the type matches and ask if not
+
+ if ( account.accountType() == MyMoneyAccount::Investment )
+ {
+ kdDebug(0) << "Line " << m_linenumber << ": Cannot convert a split transfer to/from an investment account. Split removed. Total amount adjusted from " << tr.m_amount.formatMoney("", 2) << " to " << (tr.m_amount + s2.m_amount).formatMoney("", 2) << "\n";
+ tr.m_amount += s2.m_amount;
+ continue;
+ }
+ if ( account.id() == m_account.id() )
+ {
+ kdDebug(0) << "Line " << m_linenumber << ": Cannot transfer to the same account. Transfer ignored." << endl;
+ accountId = QString();
+ }
+
+ } catch (MyMoneyException *e) {
+ kdDebug(0) << "Line " << m_linenumber << ": Account with id " << accountId.data() << " not found" << endl;
+ accountId = QString();
+ delete e;
+ }
+ }
+ if(!accountId.isEmpty())
+ {
+ s2.m_accountId = accountId;
+ s2.m_strCategoryName = tmp;
+ tr.m_listSplits += s2;
+ // in case the transaction does not have a memo and we
+ // process the first split just copy the memo over
+ if(tr.m_listSplits.count() == 1 && tr.m_strMemo.isEmpty())
+ tr.m_strMemo = s2.m_strMemo;
+ }
+ else
+ {
+ // TODO add an option to create a "Unassigned" category
+ // for now, we just drop the split which will show up as unbalanced
+ // transaction in the KMyMoney ledger view
+ }
+ }
+ }
+
+ // Add the transaction to the statement
+ d->st.m_listTransactions +=tr;
+}
+
+void MyMoneyQifReader::processInvestmentTransactionEntry(void)
+{
+// kdDebug(2) << "Investment Transaction:" << m_qifEntry.count() << " lines" << endl;
+ /*
+ Items for Investment Accounts
+ Field Indicator Explanation
+ D Date
+ N Action
+ Y Security (NAME, not symbol)
+ I Price
+ Q Quantity (number of shares or split ratio)
+ T Transaction amount
+ C Cleared status
+ P Text in the first line for transfers and reminders (Payee)
+ M Memo
+ O Commission
+ L Account for the transfer
+ $ Amount transferred
+ ^ End of the entry
+
+ It will be presumed all transactions are to the associated cash account, if
+ one exists, unless otherwise noted by the 'L' field.
+
+ Expense/Income categories will be automatically generated, "_Dividend",
+ "_InterestIncome", etc.
+
+ */
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ MyMoneyStatement::Transaction tr;
+ d->st.m_eType = MyMoneyStatement::etInvestment;
+
+// t.setCommodity(m_account.currencyId());
+ // 'D' field: Date
+ QDate date = m_qifProfile.date(extractLine('D'));
+ if(date.isValid())
+ tr.m_datePosted = date;
+ else
+ {
+ int rc = KMessageBox::warningContinueCancel(0,
+ i18n("The date entry \"%1\" read from the file cannot be interpreted through the current "
+ "date profile setting of \"%2\".\n\nPressing \"Continue\" will "
+ "assign todays date to the transaction. Pressing \"Cancel\" will abort "
+ "the import operation. You can then restart the import and select a different "
+ "QIF profile or create a new one.")
+ .arg(extractLine('D')).arg(m_qifProfile.inputDateFormat()),
+ i18n("Invalid date format"));
+ switch(rc) {
+ case KMessageBox::Continue:
+ tr.m_datePosted = QDate::currentDate();
+ break;
+
+ case KMessageBox::Cancel:
+ throw new MYMONEYEXCEPTION("USERABORT");
+ break;
+ }
+ }
+
+ // 'M' field: Memo
+ QString memo = extractLine('M');
+ d->fixMultiLineMemo(memo);
+ tr.m_strMemo = memo;
+ unsigned long h;
+
+ h = MyMoneyTransaction::hash(m_qifEntry.join(";"));
+
+ QString hashBase;
+ hashBase.sprintf("%s-%07lx", m_qifProfile.date(extractLine('D')).toString(Qt::ISODate).data(), h);
+ int idx = 1;
+ QString hash;
+ for(;;) {
+ hash = QString("%1-%2").arg(hashBase).arg(idx);
+ QMap<QString, bool>::const_iterator it;
+ it = d->m_hashMap.find(hash);
+ if(it == d->m_hashMap.end()) {
+ d->m_hashMap[hash] = true;
+ break;
+ }
+ ++idx;
+ }
+ tr.m_strBankID = hash;
+
+ // '#' field: BankID
+ QString tmp = extractLine('#');
+ if ( ! tmp.isEmpty() )
+ tr.m_strBankID = QString("ID %1").arg(tmp);
+
+ // Reconciliation flag
+ tr.m_reconcile = d->reconcileState(extractLine('C'));
+
+ // 'O' field: Fees
+ tr.m_fees = m_qifProfile.value('T', extractLine('O'));
+ // 'T' field: Amount
+ MyMoneyMoney amount = m_qifProfile.value('T', extractLine('T'));
+ tr.m_amount = amount;
+
+ MyMoneyStatement::Price price;
+
+ price.m_date = date;
+ price.m_strSecurity = extractLine('Y');
+ price.m_amount = m_qifProfile.value('T', extractLine('I'));
+
+#if 0 // we must check for that later, because certain activities don't need a security
+ // 'Y' field: Security name
+
+ QString securityname = extractLine('Y').lower();
+ if ( securityname.isEmpty() )
+ {
+ kdDebug(2) << "Line " << m_linenumber << ": Investment transaction without a security is not supported." << endl;
+ return;
+ }
+ tr.m_strSecurity = securityname;
+#endif
+
+#if 0
+
+ // For now, we let the statement reader take care of that.
+
+ // The big problem here is that the Y field is not the SYMBOL, it's the NAME.
+ // The name is not very unique, because people could have used slightly different
+ // abbreviations or ordered words differently, etc.
+ //
+ // If there is a perfect name match with a subordinate stock account, great.
+ // More likely, we have to rely on the QIF file containing !Type:Security
+ // records, which tell us the mapping from name to symbol.
+ //
+ // Therefore, generally it is not recommended to import a QIF file containing
+ // investment transactions but NOT containing security records.
+
+ QString securitysymbol = m_investmentMap[securityname];
+
+ // the correct account is the stock account which matches two criteria:
+ // (1) it is a sub-account of the selected investment account, and either
+ // (2a) the security name of the transaction matches the name of the security, OR
+ // (2b) the security name of the transaction maps to a symbol which matches the symbol of the security
+
+ // search through each subordinate account
+ bool found = false;
+ MyMoneyAccount thisaccount = m_account;
+ QStringList accounts = thisaccount.accountList();
+ QStringList::const_iterator it_account = accounts.begin();
+ while( !found && it_account != accounts.end() )
+ {
+ QString currencyid = file->account(*it_account).currencyId();
+ MyMoneySecurity security = file->security( currencyid );
+ QString symbol = security.tradingSymbol().lower();
+ QString name = security.name().lower();
+
+ if ( securityname == name || securitysymbol == symbol )
+ {
+ d->st_AccountId = *it_account;
+ s1.m_accountId = *it_account;
+ thisaccount = file->account(*it_account);
+ found = true;
+
+#if 0
+ // update the price, while we're here. in the future, this should be
+ // an option
+ QString basecurrencyid = file->baseCurrency().id();
+ MyMoneyPrice price = file->price( currencyid, basecurrencyid, t_in.m_datePosted, true );
+ if ( !price.isValid() )
+ {
+ MyMoneyPrice newprice( currencyid, basecurrencyid, t_in.m_datePosted, t_in.m_moneyAmount / t_in.m_dShares, i18n("Statement Importer") );
+ file->addPrice(newprice);
+ }
+#endif
+ }
+
+ ++it_account;
+ }
+
+ if (!found)
+ {
+ kdDebug(2) << "Line " << m_linenumber << ": Security " << securityname << " not found in this account. Transaction ignored." << endl;
+
+ // If the security is not known, notify the user
+ // TODO (Ace) A "SelectOrCreateAccount" interface for investments
+ KMessageBox::information(0, i18n("This investment account does not contain the \"%1\" security. "
+ "Transactions involving this security will be ignored.").arg(securityname),
+ i18n("Security not found"),
+ QString("MissingSecurity%1").arg(securityname.stripWhiteSpace()));
+ return;
+ }
+#endif
+
+ // 'Y' field: Security
+ tr.m_strSecurity = extractLine('Y');
+
+ // 'Q' field: Quantity
+ MyMoneyMoney quantity = m_qifProfile.value('T', extractLine('Q'));
+
+ // 'N' field: Action
+ QString action = extractLine('N').lower();
+
+ // remove trailing X, which seems to have no purpose (?!)
+ bool xAction = false;
+ if ( action.endsWith("x") ) {
+ action = action.left( action.length() - 1 );
+ xAction = true;
+ }
+
+ // Whether to create a cash split for the other side of the value
+ QString accountname ;//= extractLine('L');
+ if ( action == "reinvdiv" || action == "reinvlg" || action == "reinvsh" )
+ {
+ d->st.m_listPrices += price;
+ tr.m_shares = quantity;
+ tr.m_eAction = (MyMoneyStatement::Transaction::eaReinvestDividend);
+ tr.m_price = m_qifProfile.value('I', extractLine('I'));
+
+ tr.m_strInterestCategory = extractLine('L');
+ if(tr.m_strInterestCategory.isEmpty()) {
+ tr.m_strInterestCategory = d->typeToAccountName(action);
+ }
+ }
+ else if ( action == "div" || action == "cgshort" || action == "cgmid" || action == "cglong" || action == "rtrncap")
+ {
+ tr.m_eAction = (MyMoneyStatement::Transaction::eaCashDividend);
+
+ QString tmp = extractLine('L');
+ // if the action ends in an X, the L-Record contains the asset account
+ // to which the dividend should be transferred. In the other cases, it
+ // may contain a category that identifies the income category for the
+ // dividend payment
+ if((xAction == true)
+ && (d->isTransfer(tmp, m_qifProfile.accountDelimiter().left(1), m_qifProfile.accountDelimiter().mid(1, 1)) == true)) {
+ tr.m_strBrokerageAccount = tmp;
+ transferAccount(tmp); // make sure the account exists
+ } else {
+ tr.m_strInterestCategory = tmp;
+ }
+
+ // make sure, we have valid category. Either taken from the L-Record above,
+ // or derived from the action code
+ if(tr.m_strInterestCategory.isEmpty()) {
+ tr.m_strInterestCategory = d->typeToAccountName(action);
+ }
+
+ // For historic reasons (coming from the OFX importer) the statement
+ // reader expects the dividend with a reverse sign. So we just do that.
+ tr.m_amount = -(amount - tr.m_fees);
+
+ // We need an extra split which will be the zero-amount investment split
+ // that serves to mark this transaction as a cash dividend and note which
+ // stock account it belongs to.
+ MyMoneyStatement::Split s2;
+ s2.m_amount = MyMoneyMoney();
+ s2.m_strCategoryName = extractLine('Y');
+ tr.m_listSplits.append(s2);
+ }
+ else if ( action == "intinc" || action == "miscinc" || action == "miscexp")
+ {
+ tr.m_eAction = (MyMoneyStatement::Transaction::eaInterest);
+ if(action == "miscexp")
+ tr.m_eAction = (MyMoneyStatement::Transaction::eaFees);
+
+ QString tmp = extractLine('L');
+ // if the action ends in an X, the L-Record contains the asset account
+ // to which the dividend should be transferred. In the other cases, it
+ // may contain a category that identifies the income category for the
+ // payment
+ if((xAction == true)
+ && (d->isTransfer(tmp, m_qifProfile.accountDelimiter().left(1), m_qifProfile.accountDelimiter().mid(1, 1)) == true)) {
+ tr.m_strBrokerageAccount = tmp;
+ transferAccount(tmp); // make sure the account exists
+ } else {
+ tr.m_strInterestCategory = tmp;
+ }
+
+ // make sure, we have a valid category. Either taken from the L-Record above,
+ // or derived from the action code
+ if(tr.m_strInterestCategory.isEmpty()) {
+ tr.m_strInterestCategory = d->typeToAccountName(action);
+ }
+
+
+ // For historic reasons (coming from the OFX importer) the statement
+ // reader expects the dividend with a reverse sign. So we just do that.
+ if(action != "miscexp")
+ tr.m_amount = -(amount - tr.m_fees);
+
+ if(tr.m_strMemo.isEmpty())
+ tr.m_strMemo = (QString("%1 %2").arg(extractLine('Y')).arg(d->typeToAccountName(action))).stripWhiteSpace();
+ }
+ else if (action == "xin" || action == "xout")
+ {
+ QString payee = extractLine('P');
+ if(!payee.isEmpty() && ((payee.lower() == "opening balance") || KMyMoneyGlobalSettings::qifOpeningBalance().lower().contains(payee.lower()))) {
+ createOpeningBalance(MyMoneyAccount::Investment);
+ return;
+ }
+
+ tr.m_eAction = (MyMoneyStatement::Transaction::eaNone);
+ MyMoneyStatement::Split s2;
+ QString tmp = extractLine('L');
+ if(d->isTransfer(tmp, m_qifProfile.accountDelimiter().left(1), m_qifProfile.accountDelimiter().mid(1, 1))) {
+ s2.m_accountId = transferAccount(tmp);
+ s2.m_strCategoryName = tmp;
+ } else {
+ s2.m_strCategoryName = extractLine('L');
+ if(tr.m_strInterestCategory.isEmpty()) {
+ s2.m_strCategoryName = d->typeToAccountName(action);
+ }
+ }
+
+ if(action == "xout")
+ tr.m_amount = -tr.m_amount;
+
+ s2.m_amount = -tr.m_amount;
+ tr.m_listSplits.append(s2);
+ }
+ else if (action == "buy")
+ {
+ QString tmp = extractLine('L');
+ if(d->isTransfer(tmp, m_qifProfile.accountDelimiter().left(1), m_qifProfile.accountDelimiter().mid(1, 1)) == true) {
+ tr.m_strBrokerageAccount = tmp;
+ transferAccount(tmp); // make sure the account exists
+ }
+
+ d->st.m_listPrices += price;
+ tr.m_shares = quantity;
+ tr.m_eAction = (MyMoneyStatement::Transaction::eaBuy);
+ }
+ else if (action == "sell")
+ {
+ QString tmp = extractLine('L');
+ if(d->isTransfer(tmp, m_qifProfile.accountDelimiter().left(1), m_qifProfile.accountDelimiter().mid(1, 1)) == true) {
+ tr.m_strBrokerageAccount = tmp;
+ transferAccount(tmp); // make sure the account exists
+ }
+
+ d->st.m_listPrices += price;
+ tr.m_shares = -quantity;
+ tr.m_amount = -amount;
+ tr.m_eAction = (MyMoneyStatement::Transaction::eaSell);
+ }
+ else if ( action == "shrsin" )
+ {
+ tr.m_shares = quantity;
+ tr.m_eAction = (MyMoneyStatement::Transaction::eaShrsin);
+ }
+ else if ( action == "shrsout" )
+ {
+ tr.m_shares = -quantity;
+ tr.m_eAction = (MyMoneyStatement::Transaction::eaShrsout);
+ }
+ else if ( action == "stksplit" )
+ {
+ MyMoneyMoney splitfactor = (quantity / MyMoneyMoney(10,1)).reduce();
+
+ // Stock splits not supported
+// kdDebug(2) << "Line " << m_linenumber << ": Stock split not supported (date=" << date << " security=" << securityname << " factor=" << splitfactor.toString() << ")" << endl;
+
+// s1.setShares(splitfactor);
+// s1.setValue(0);
+// s1.setAction(MyMoneySplit::ActionSplitShares);
+
+// return;
+ }
+ else
+ {
+ // Unsupported action type
+ kdDebug(0) << "Line " << m_linenumber << ": Unsupported transaction action (" << action << ")" << endl;
+ return;
+ }
+ d->st.m_strAccountName = accountname;
+ d->st.m_listTransactions +=tr;
+
+ /*************************************************************************
+ *
+ * These transactions are natively supported by KMyMoney
+ *
+ *************************************************************************/
+ /*
+ D1/ 3' 5
+ NShrsIn
+ YGENERAL MOTORS CORP 52BR1
+ I20
+ Q200
+ U4,000.00
+ T4,000.00
+ M200 shares added to account @ $20/share
+ ^
+ */
+ /*
+ ^
+ D1/14' 5
+ NShrsOut
+ YTEMPLETON GROWTH 97GJ0
+ Q50
+90 ^
+ */
+ /*
+ D1/28' 5
+ NBuy
+ YGENERAL MOTORS CORP 52BR1
+ I24.35
+ Q100
+ U2,435.00
+ T2,435.00
+ ^
+ */
+ /*
+ D1/ 5' 5
+ NSell
+ YUnited Vanguard
+ I8.41
+ Q50
+ U420.50
+ T420.50
+ ^
+ */
+ /*
+ D1/ 7' 5
+ NReinvDiv
+ YFRANKLIN INCOME 97GM2
+ I38
+ Q1
+ U38.00
+ T38.00
+ ^
+ */
+ /*************************************************************************
+ *
+ * These transactions are all different kinds of income. (Anything that
+ * follows the DNYUT pattern). They are all handled the same, the only
+ * difference is which income account the income is placed into. By
+ * default, it's placed into _xxx where xxx is the right side of the
+ * N field. e.g. NDiv transaction goes into the _Div account
+ *
+ *************************************************************************/
+ /*
+ D1/10' 5
+ NDiv
+ YTEMPLETON GROWTH 97GJ0
+ U10.00
+ T10.00
+ ^
+ */
+ /*
+ D1/10' 5
+ NIntInc
+ YTEMPLETON GROWTH 97GJ0
+ U20.00
+ T20.00
+ ^
+ */
+ /*
+ D1/10' 5
+ NCGShort
+ YTEMPLETON GROWTH 97GJ0
+ U111.00
+ T111.00
+ ^
+ */
+ /*
+ D1/10' 5
+ NCGLong
+ YTEMPLETON GROWTH 97GJ0
+ U333.00
+ T333.00
+ ^
+ */
+ /*
+ D1/10' 5
+ NCGMid
+ YTEMPLETON GROWTH 97GJ0
+ U222.00
+ T222.00
+ ^
+ */
+ /*
+ D2/ 2' 5
+ NRtrnCap
+ YFRANKLIN INCOME 97GM2
+ U1,234.00
+ T1,234.00
+ ^
+ */
+ /*************************************************************************
+ *
+ * These transactions deal with miscellaneous activity that KMyMoney
+ * does not support, but may support in the future.
+ *
+ *************************************************************************/
+ /* Note the Q field is the split ratio per 10 shares, so Q12.5 is a
+ 12.5:10 split, otherwise known as 5:4.
+ D1/14' 5
+ NStkSplit
+ YIBM
+ Q12.5
+ ^
+ */
+ /*************************************************************************
+ *
+ * These transactions deal with short positions and options, which are
+ * not supported at all by KMyMoney. They will be ignored for now.
+ * There may be a way to hack around this, by creating a new security
+ * "IBM_Short".
+ *
+ *************************************************************************/
+ /*
+ D1/21' 5
+ NShtSell
+ YIBM
+ I92.38
+ Q100
+ U9,238.00
+ T9,238.00
+ ^
+ */
+ /*
+ D1/28' 5
+ NCvrShrt
+ YIBM
+ I92.89
+ Q100
+ U9,339.00
+ T9,339.00
+ O50.00
+ ^
+ */
+ /*
+ D6/ 1' 5
+ NVest
+ YIBM Option
+ Q20
+ ^
+ */
+ /*
+ D6/ 8' 5
+ NExercise
+ YIBM Option
+ I60.952381
+ Q20
+ MFrom IBM Option Grant 6/1/2004
+ ^
+ */
+ /*
+ D6/ 1'14
+ NExpire
+ YIBM Option
+ Q5
+ ^
+ */
+ /*************************************************************************
+ *
+ * These transactions do not have an associated investment ("Y" field)
+ * so presumably they are only valid for the cash account. Once I
+ * understand how these are really implemented, they can probably be
+ * handled without much trouble.
+ *
+ *************************************************************************/
+ /*
+ D1/14' 5
+ NCash
+ U-100.00
+ T-100.00
+ LBank Chrg
+ ^
+ */
+ /*
+ D1/15' 5
+ NXOut
+ U500.00
+ T500.00
+ L[CU Savings]
+ $500.00
+ ^
+ */
+ /*
+ D1/28' 5
+ NXIn
+ U1,000.00
+ T1,000.00
+ L[CU Checking]
+ $1,000.00
+ ^
+ */
+ /*
+ D1/25' 5
+ NMargInt
+ U25.00
+ T25.00
+ ^
+ */
+}
+
+const QString MyMoneyQifReader::findOrCreateIncomeAccount(const QString& searchname)
+{
+ QString result;
+
+ MyMoneyFile *file = MyMoneyFile::instance();
+
+ // First, try to find this account as an income account
+ MyMoneyAccount acc = file->income();
+ QStringList list = acc.accountList();
+ QStringList::ConstIterator it_accid = list.begin();
+ while ( it_accid != list.end() )
+ {
+ acc = file->account(*it_accid);
+ if ( acc.name() == searchname )
+ {
+ result = *it_accid;
+ break;
+ }
+ ++it_accid;
+ }
+
+ // If we did not find the account, now we must create one.
+ if ( result.isEmpty() )
+ {
+ MyMoneyAccount acc;
+ acc.setName( searchname );
+ acc.setAccountType( MyMoneyAccount::Income );
+ MyMoneyAccount income = file->income();
+ MyMoneyFileTransaction ft;
+ file->addAccount( acc, income );
+ ft.commit();
+ result = acc.id();
+ }
+
+ return result;
+}
+
+// TODO (Ace) Combine this and the previous function
+
+const QString MyMoneyQifReader::findOrCreateExpenseAccount(const QString& searchname)
+{
+ QString result;
+
+ MyMoneyFile *file = MyMoneyFile::instance();
+
+ // First, try to find this account as an income account
+ MyMoneyAccount acc = file->expense();
+ QStringList list = acc.accountList();
+ QStringList::ConstIterator it_accid = list.begin();
+ while ( it_accid != list.end() )
+ {
+ acc = file->account(*it_accid);
+ if ( acc.name() == searchname )
+ {
+ result = *it_accid;
+ break;
+ }
+ ++it_accid;
+ }
+
+ // If we did not find the account, now we must create one.
+ if ( result.isEmpty() )
+ {
+ MyMoneyAccount acc;
+ acc.setName( searchname );
+ acc.setAccountType( MyMoneyAccount::Expense );
+ MyMoneyFileTransaction ft;
+ MyMoneyAccount expense = file->expense();
+ file->addAccount( acc, expense );
+ ft.commit();
+ result = acc.id();
+ }
+
+ return result;
+}
+
+QString MyMoneyQifReader::checkCategory(const QString& name, const MyMoneyMoney value, const MyMoneyMoney value2)
+{
+ QString accountId;
+ MyMoneyFile *file = MyMoneyFile::instance();
+ MyMoneyAccount account;
+ bool found = true;
+
+ if(!name.isEmpty()) {
+ // The category might be constructed with an arbitraty depth (number of
+ // colon delimited fields). We try to find a parent account within this
+ // hierarchy by searching the following sequence:
+ //
+ // aaaa:bbbb:cccc:ddddd
+ //
+ // 1. search aaaa:bbbb:cccc:dddd, create nothing
+ // 2. search aaaa:bbbb:cccc , create dddd
+ // 3. search aaaa:bbbb , create cccc:dddd
+ // 4. search aaaa , create bbbb:cccc:dddd
+ // 5. don't search , create aaaa:bbbb:cccc:dddd
+
+ account.setName(name);
+ QString accName; // part to be created (right side in above list)
+ QString parent(name); // a possible parent part (left side in above list)
+ do {
+ accountId = file->categoryToAccount(parent);
+ if(accountId.isEmpty()) {
+ found = false;
+ // prepare next step
+ if(!accName.isEmpty())
+ accName.prepend(':');
+ accName.prepend(parent.section(':', -1));
+ account.setName(accName);
+ parent = parent.section(':', 0, -2);
+ } else if(!accName.isEmpty()) {
+ account.setParentAccountId(accountId);
+ }
+ }
+ while(!parent.isEmpty() && accountId.isEmpty());
+
+ // if we did not find the category, we create it
+ if(!found) {
+ MyMoneyAccount parent;
+ if(account.parentAccountId().isEmpty()) {
+ if(!value.isNegative() && value2.isNegative())
+ parent = file->income();
+ else
+ parent = file->expense();
+ } else {
+ parent = file->account(account.parentAccountId());
+ }
+ account.setAccountType((!value.isNegative() && value2.isNegative()) ? MyMoneyAccount::Income : MyMoneyAccount::Expense);
+ MyMoneyAccount brokerage;
+ // clear out the parent id, because createAccount() does not like that
+ account.setParentAccountId(QString());
+ kmymoney2->createAccount(account, parent, brokerage, MyMoneyMoney());
+ accountId = account.id();
+ }
+ }
+
+ return accountId;
+}
+
+QString MyMoneyQifReader::processAccountEntry(bool resetAccountId)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ MyMoneyAccount account;
+ QString tmp;
+
+ account.setName(extractLine('N'));
+ // qDebug("Process account '%s'", account.name().data());
+
+ account.setDescription(extractLine('D'));
+
+ tmp = extractLine('$');
+ if(tmp.length() > 0)
+ account.setValue("lastStatementBalance", tmp);
+
+ tmp = extractLine('/');
+ if(tmp.length() > 0)
+ account.setValue("lastStatementDate", m_qifProfile.date(tmp).toString("yyyy-MM-dd"));
+
+ QifEntryTypeE transactionType = EntryTransaction;
+ QString type = extractLine('T').lower().remove(QRegExp("\\s+"));
+ if(type == m_qifProfile.profileType().lower().remove(QRegExp("\\s+"))) {
+ account.setAccountType(MyMoneyAccount::Checkings);
+ } else if(type == "ccard" || type == "creditcard") {
+ account.setAccountType(MyMoneyAccount::CreditCard);
+ } else if(type == "cash") {
+ account.setAccountType(MyMoneyAccount::Cash);
+ } else if(type == "otha") {
+ account.setAccountType(MyMoneyAccount::Asset);
+ } else if(type == "othl") {
+ account.setAccountType(MyMoneyAccount::Liability);
+ } else if(type == "invst" || type == "port") {
+ account.setAccountType(MyMoneyAccount::Investment);
+ transactionType = EntryInvestmentTransaction;
+ } else if(type == "mutual") { // stock account w/o umbrella investment account
+ account.setAccountType(MyMoneyAccount::Stock);
+ transactionType = EntryInvestmentTransaction;
+ } else if(type == "unknown") {
+ // don't do anything with the type, leave it unknown
+ } else {
+ account.setAccountType(MyMoneyAccount::Checkings);
+ kdDebug(2) << "Line " << m_linenumber << ": Unknown account type '" << type << "', checkings assumed" << endl;
+ }
+
+ // check if we can find the account already in the file
+ MyMoneyAccount acc = kmymoney2->findAccount(account, MyMoneyAccount());
+ if(acc.id().isEmpty()) {
+ // in case the account is not found by name and the type is
+ // unknown, we have to assume something and create a checking account.
+ // this might be wrong, but we have no choice at this point.
+ if(account.accountType() == MyMoneyAccount::UnknownAccountType)
+ account.setAccountType(MyMoneyAccount::Checkings);
+
+ MyMoneyAccount parentAccount;
+ MyMoneyAccount brokerage;
+ MyMoneyMoney balance;
+ // in case it's a stock account, we need to setup a fix investment account
+ if(account.isInvest()) {
+ acc.setName(i18n("%1 (Investment)").arg(account.name())); // use the same name for the investment account
+ acc.setDescription(i18n("Autogenerated by QIF importer from type Mutual account entry"));
+ acc.setAccountType(MyMoneyAccount::Investment);
+ parentAccount = file->asset();
+ kmymoney2->createAccount(acc, parentAccount, brokerage, MyMoneyMoney());
+ parentAccount = acc;
+ qDebug("We still need to create the stock account in MyMoneyQifReader::processAccountEntry()");
+ } else {
+ // setup parent according the type of the account
+ switch(account.accountGroup()) {
+ case MyMoneyAccount::Asset:
+ default:
+ parentAccount = file->asset();
+ break;
+ case MyMoneyAccount::Liability:
+ parentAccount = file->liability();
+ break;
+ case MyMoneyAccount::Equity:
+ parentAccount = file->equity();
+ break;
+ }
+ }
+
+ // investment accounts will receive a brokerage account, as KMyMoney
+ // currently does not allow to store funds in the investment account directly
+ if(account.accountType() == MyMoneyAccount::Investment) {
+ brokerage.setName(account.brokerageName());
+ brokerage.setAccountType(MyMoneyAccount::Checkings);
+ brokerage.setCurrencyId(MyMoneyFile::instance()->baseCurrency().id());
+ }
+ kmymoney2->createAccount(account, parentAccount, brokerage, balance);
+ acc = account;
+ // qDebug("Account created");
+ } else {
+ // qDebug("Existing account found");
+ }
+
+ if(resetAccountId) {
+ // possibly start a new statement
+ d->finishStatement();
+ m_account = acc;
+ d->st.m_accountId = m_account.id();
+ d->transactionType = transactionType;
+ }
+ return acc.id();
+}
+
+void MyMoneyQifReader::selectOrCreateAccount(const SelectCreateMode mode, MyMoneyAccount& account, const MyMoneyMoney& balance)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ QString accountId;
+ QString msg;
+ QString typeStr;
+ QString leadIn;
+ KMyMoneyUtils::categoryTypeE type;
+
+ QMap<QString, QString>::ConstIterator it;
+
+ type = KMyMoneyUtils::none;
+ switch(account.accountGroup()) {
+ default:
+ type = KMyMoneyUtils::asset;
+ type = (KMyMoneyUtils::categoryTypeE) (type | KMyMoneyUtils::liability);
+ typeStr = i18n("account");
+ leadIn = i18n("al");
+ break;
+
+ case MyMoneyAccount::Income:
+ case MyMoneyAccount::Expense:
+ type = KMyMoneyUtils::income;
+ type = (KMyMoneyUtils::categoryTypeE) (type | KMyMoneyUtils::expense);
+ typeStr = i18n("category");
+ leadIn = i18n("ei");
+ msg = i18n("Category selection");
+ break;
+ }
+
+ KAccountSelectDlg accountSelect(type, "QifImport", kmymoney2);
+ if(!msg.isEmpty())
+ accountSelect.setCaption(msg);
+
+ it = m_accountTranslation.find((leadIn + MyMoneyFile::AccountSeperator + account.name()).lower());
+ if(it != m_accountTranslation.end()) {
+ try {
+ account = file->account(*it);
+ return;
+
+ } catch (MyMoneyException *e) {
+ QString message(i18n("Account \"%1\" disappeared: ").arg(account.name()));
+ message += e->what();
+ KMessageBox::error(0, message);
+ delete e;
+ }
+ }
+
+ if(!account.name().isEmpty()) {
+ if(type & (KMyMoneyUtils::income | KMyMoneyUtils::expense)) {
+ accountId = file->categoryToAccount(account.name());
+ } else {
+ accountId = file->nameToAccount(account.name());
+ }
+
+ if(mode == Create) {
+ if(!accountId.isEmpty()) {
+ account = file->account(accountId);
+ return;
+
+ } else {
+ switch(KMessageBox::questionYesNo(0,
+ i18n("The %1 '%2' does not exist. Do you "
+ "want to create it?").arg(typeStr).arg(account.name()))) {
+ case KMessageBox::Yes:
+ break;
+ case KMessageBox::No:
+ return;
+ }
+ }
+ } else {
+ accountSelect.setHeader(i18n("Select %1").arg(typeStr));
+ if(!accountId.isEmpty()) {
+ msg = i18n("The %1 <b>%2</b> currently exists. Do you want "
+ "to import transactions to this account?")
+ .arg(typeStr).arg(account.name());
+
+ } else {
+ msg = i18n("The %1 <b>%2</b> currently does not exist. You can "
+ "create a new %3 by pressing the <b>Create</b> button "
+ "or select another %4 manually from the selection box.")
+ .arg(typeStr).arg(account.name()).arg(typeStr).arg(typeStr);
+ }
+ }
+ } else {
+ accountSelect.setHeader(i18n("Import transactions to %1").arg(typeStr));
+ msg = i18n("No %1 information has been found in the selected QIF file. "
+ "Please select an account using the selection box in the dialog or "
+ "create a new %2 by pressing the <b>Create</b> button.")
+ .arg(typeStr).arg(typeStr);
+ }
+
+ accountSelect.setDescription(msg);
+ accountSelect.setAccount(account, accountId);
+ accountSelect.setMode(mode == Create);
+ accountSelect.showAbortButton(true);
+
+ // display current entry in widget, the offending line (if any) will be shown in red
+ QStringList::Iterator it_e;
+ int i = 0;
+ for(it_e = m_qifEntry.begin(); it_e != m_qifEntry.end(); ++it_e) {
+ if(m_extractedLine == i)
+ accountSelect.m_qifEntry->setColor(QColor("red"));
+ accountSelect.m_qifEntry->append(*it_e);
+ accountSelect.m_qifEntry->setColor(QColor("black"));
+ ++i;
+ }
+
+ for(;;) {
+ if(accountSelect.exec() == QDialog::Accepted) {
+ if(!accountSelect.selectedAccount().isEmpty()) {
+ accountId = accountSelect.selectedAccount();
+
+ m_accountTranslation[(leadIn + MyMoneyFile::AccountSeperator + account.name()).lower()] = accountId;
+
+ // MMAccount::openingBalance() is where the accountSelect dialog has
+ // stashed the opening balance that the user chose.
+ MyMoneyAccount importedAccountData(account);
+ // MyMoneyMoney balance = importedAccountData.openingBalance();
+ account = file->account(accountId);
+ if ( ! balance.isZero() )
+ {
+ QString openingtxid = file->openingBalanceTransaction(account);
+ MyMoneyFileTransaction ft;
+ if ( ! openingtxid.isEmpty() )
+ {
+ MyMoneyTransaction openingtx = file->transaction(openingtxid);
+ MyMoneySplit split = openingtx.splitByAccount(account.id());
+
+ if ( split.shares() != balance )
+ {
+ const MyMoneySecurity& sec = file->security(account.currencyId());
+ if ( KMessageBox::questionYesNo(
+ qApp->mainWidget(),
+ i18n("The %1 account currently has an opening balance of %2. This QIF file reports an opening balance of %3. Would you like to overwrite the current balance with the one from the QIF file?").arg(account.name(), split.shares().formatMoney(account, sec), balance.formatMoney(account, sec)),
+ i18n("Overwrite opening balance"),
+ KStdGuiItem::yes(),
+ KStdGuiItem::no(),
+ "OverwriteOpeningBalance" )
+ == KMessageBox::Yes )
+ {
+ file->removeTransaction( openingtx );
+ file->createOpeningBalanceTransaction( account, balance );
+ }
+ }
+ }
+ else
+ {
+ // Add an opening balance
+ file->createOpeningBalanceTransaction( account, balance );
+ }
+ ft.commit();
+ }
+ break;
+ }
+
+ } else if(accountSelect.aborted())
+ throw new MYMONEYEXCEPTION("USERABORT");
+
+ if(typeStr == i18n("account")) {
+ KMessageBox::error(0, i18n("You must select or create an account."));
+ } else {
+ KMessageBox::error(0, i18n("You must select or create a category."));
+ }
+ }
+}
+
+void MyMoneyQifReader::setProgressCallback(void(*callback)(int, int, const QString&))
+{
+ m_progressCallback = callback;
+}
+
+void MyMoneyQifReader::signalProgress(int current, int total, const QString& msg)
+{
+ if(m_progressCallback != 0)
+ (*m_progressCallback)(current, total, msg);
+}
+
+void MyMoneyQifReader::processPriceEntry(void)
+{
+/*
+ !Type:Prices
+ "IBM",141 9/16,"10/23/98"
+ ^
+ !Type:Prices
+ "GMW",21.28," 3/17' 5"
+ ^
+ !Type:Prices
+ "GMW",71652181.001,"67/128/ 0"
+ ^
+
+ Note that Quicken will often put in a price with a bogus date and number. We will ignore
+ prices with bogus dates. Hopefully that will catch all of these.
+
+ Also note that prices can be in fractional units, e.g. 141 9/16.
+
+*/
+
+ QStringList::const_iterator it_line = m_qifEntry.begin();
+
+ // Make a price for each line
+ QRegExp priceExp("\"(.*)\",(.*),\"(.*)\"");
+ while ( it_line != m_qifEntry.end() )
+ {
+ if(priceExp.search(*it_line) != -1) {
+ MyMoneyStatement::Price price;
+ price.m_strSecurity = priceExp.cap(1);
+ QString pricestr = priceExp.cap(2);
+ QString datestr = priceExp.cap(3);
+ kdDebug(0) << "Price:" << price.m_strSecurity << " / " << pricestr << " / " << datestr << endl;
+
+ // Only add the price if the date is valid. If invalid, fail silently. See note above.
+ // Also require the price value to not have any slashes. Old prices will be something like
+ // "25 9/16", which we do not support. So we'll skip the price for now.
+ QDate date = m_qifProfile.date(datestr);
+ MyMoneyMoney rate(m_qifProfile.value('P', pricestr));
+ if(date.isValid() && !rate.isZero())
+ {
+ price.m_amount = rate;
+ price.m_date = date;
+ d->st.m_listPrices += price;
+ }
+ }
+ ++it_line;
+ }
+}
+
+void MyMoneyQifReader::processSecurityEntry(void)
+{
+ /*
+ !Type:Security
+ NVANGUARD 500 INDEX
+ SVFINX
+ TMutual Fund
+ ^
+ */
+
+ MyMoneyStatement::Security security;
+ security.m_strName = extractLine('N');
+ security.m_strSymbol = extractLine('S');
+
+ d->st.m_listSecurities += security;
+}
+
+#include "mymoneyqifreader.moc"
diff --git a/kmymoney2/converter/mymoneyqifreader.h b/kmymoney2/converter/mymoneyqifreader.h
new file mode 100644
index 0000000..77bf5ad
--- /dev/null
+++ b/kmymoney2/converter/mymoneyqifreader.h
@@ -0,0 +1,394 @@
+/***************************************************************************
+ mymoneyqifreader.h - description
+ -------------------
+ begin : Mon Jan 27 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYQIFREADER_H
+#define MYMONEYQIFREADER_H
+
+// ----------------------------------------------------------------------------
+// QT Headers
+
+#include <qobject.h>
+#include <qstring.h>
+#include <qstringlist.h>
+
+// ----------------------------------------------------------------------------
+// KDE Headers
+
+#include <ktempfile.h>
+#include <kprocess.h>
+#include <kurl.h>
+
+// ----------------------------------------------------------------------------
+// Project Headers
+
+#include "mymoneyqifprofile.h"
+#include "../mymoney/mymoneyaccount.h"
+#include "../mymoney/mymoneytransaction.h"
+
+class MyMoneyFileTransaction;
+
+/**
+ * @author Thomas Baumgart
+ */
+class MyMoneyQifReader : public QObject
+{
+ Q_OBJECT
+ friend class Private;
+
+private:
+ typedef enum {
+ EntryUnknown = 0,
+ EntryAccount,
+ EntryTransaction,
+ EntryCategory,
+ EntryMemorizedTransaction,
+ EntryInvestmentTransaction,
+ EntrySecurity,
+ EntryPrice,
+ EntryPayee,
+ EntryClass,
+ EntrySkip
+ } QifEntryTypeE;
+
+ struct qSplit
+ {
+ QString m_strCategoryName;
+ QString m_strMemo;
+ QString m_amount;
+ };
+
+
+public:
+ MyMoneyQifReader();
+ ~MyMoneyQifReader();
+
+ /**
+ * This method is used to store the filename into the object.
+ * The file should exist. If it does and an external filter
+ * program is specified with the current selected profile,
+ * the file is send through this filter and the result
+ * is stored in the m_tempFile file.
+ *
+ * @param url URL of the file to be imported
+ */
+ void setURL(const KURL& url);
+
+ /**
+ * This method is used to store the name of the profile into the object.
+ * The selected profile will be loaded if it exists. If an external
+ * filter program is specified with the current selected profile,
+ * the file is send through this filter and the result
+ * is stored in the m_tempFile file.
+ *
+ * @param name QString reference to the name of the profile
+ */
+ void setProfile(const QString& name);
+
+ /**
+ * This method actually starts the import of data from the selected file
+ * into the MyMoney engine.
+ *
+ * This method also starts the user defined import filter program
+ * defined in the QIF profile. If none is defined, the file is read
+ * as is (actually the UNIX command 'cat -' is used as the filter).
+ *
+ * If data from the filter program is available, the slot
+ * slotReceivedDataFromFilter() will be called.
+ *
+ * Make sure to connect the signal importFinished() to detect when
+ * the import actually ended. Call the method finishImport() to clean
+ * things up and get the overall result of the import.
+ *
+ * @retval true the import was started successfully
+ * @retval false the import could not be started.
+ */
+ bool startImport(void);
+
+ /**
+ * This method must be called once the signal importFinished() has
+ * been emitted. It will clean up the reader state and determines
+ * the actual return code of the import.
+ *
+ * @retval true Import was successful.
+ * @retval false Import failed because the filter program terminated
+ * abnormally or the user aborted the import process.
+ */
+ bool finishImport(void);
+
+ void setCategoryMapping(bool map);
+
+ const MyMoneyAccount& account() const { return m_account; };
+
+ void setProgressCallback(void(*callback)(int, int, const QString&));
+
+private:
+ /**
+ * This method is used to update the progress information. It
+ * checks if an appropriate function is known and calls it.
+ *
+ * For a parameter description see KMyMoneyView::progressCallback().
+ */
+ void signalProgress(int current, int total, const QString& = "");
+
+ /**
+ * This method scans a transaction contained in
+ * a QIF file formatted as an account record. This
+ * format is used by MS-Money. If the specific data
+ * is not found, then the data in the entry is treated
+ * as a transaction. In this case, the user will be asked to
+ * specify the account to which the transactions should be imported.
+ * The entry data is found in m_qifEntry.
+ *
+ * @param accountType see MyMoneyAccount() for details. Defaults to MyMoneyAccount::Checkings
+ */
+ void processMSAccountEntry(const MyMoneyAccount::accountTypeE accountType = MyMoneyAccount::Checkings);
+
+ /**
+ * This method scans the m_qifEntry object as a payee record specified by Quicken
+ */
+ void processPayeeEntry(void);
+
+ /**
+ * This method scans the m_qifEntry object as an account record specified
+ * by Quicken. In case @p resetAccountId is @p true (the default), the
+ * global account id will be reset.
+ *
+ * The id of the account will be returned.
+ */
+ QString processAccountEntry(bool resetAccountId = true);
+
+ /**
+ * This method scans the m_qifEntry object as a category record specified
+ * by Quicken.
+ */
+ void processCategoryEntry(void);
+
+ /**
+ * This method scans the m_qifEntry object as a transaction record specified
+ * by Quicken.
+ */
+ void processTransactionEntry(void);
+
+ /**
+ * This method scans the m_qifEntry object as an investment transaction
+ * record specified by Quicken.
+ */
+ void processInvestmentTransactionEntry(void);
+
+ /**
+ * This method scans the m_qifEntry object as a price record specified
+ * by Quicken.
+ */
+ void processPriceEntry(void);
+
+ /**
+ * This method scans the m_qifEntry object as a security record specified
+ * by Quicken.
+ */
+ void processSecurityEntry(void);
+
+ /**
+ * This method processes the lines previously collected in
+ * the member variable m_qifEntry. If further information
+ * by the user is required to process the entry it will
+ * be collected.
+ */
+ void processQifEntry(void);
+
+ /**
+ * This method process a line starting with an exclamation mark
+ */
+ void processQifSpecial(const QString& _line);
+
+ /**
+ * This method is used to get the account id of the split for
+ * a transaction from the text found in the QIF $ or L record.
+ * If an account with the name is not found, the user is asked
+ * if it should be created.
+ *
+ * @param name name of account as found in the QIF file
+ * @param value value found in the T record
+ * @param value2 value found in the $ record for splitted transactions
+ *
+ * @return id of the account for the split. If no name is specified
+ * or the account was not found and not created the
+ * return value will be "".
+ */
+ QString checkCategory(const QString& name, const MyMoneyMoney value, const MyMoneyMoney value2);
+
+ /**
+ * This method extracts the line beginning with the letter @p id
+ * from the lines contained in the QStringList object @p m_qifEntry.
+ * An empty QString is returned, if the line is not found.
+ *
+ * @param id QChar containing the letter to be found
+ * @param cnt return cnt'th of occurance of id in lines. cnt defaults to 1.
+ *
+ * @return QString with the remainder of the line or empty if
+ * @p id is not found in @p lines
+ */
+ const QString extractLine(const QChar id, int cnt = 1);
+
+ /**
+ * This method examines each line in the QStringList object @p m_qifEntry,
+ * searching for split entries, which it extracts into a struct qSplit and
+ * stores all splits found in @p listqSplits .
+ */
+ void extractSplits(QValueList<qSplit>& listqSplits) const;
+
+ enum SelectCreateMode {
+ Create = 0,
+ Select
+ };
+ /**
+ * This method is used to find an account using the account's name
+ * stored in @p account in the current MyMoneyFile object. If it does not
+ * exist, the user has the chance to create it or to skip processing
+ * of this account.
+ *
+ * If an account has been selected, account will be set to contain it's data.
+ * If the skip operation was requested, account will be empty.
+ *
+ * Depending on @p mode the bahaviour of this method is slightly different.
+ * The following table shows the dependencies:
+ *
+ * @code
+ * case mode operation
+ * -----------------------------------------------------------------------------
+ * account with same name exists Create returns immediately
+ * m_account contains data
+ * of existing account
+ *
+ * account does not exist Create immediately calls dialog
+ * to create account
+ *
+ * account with same name exists Select User will be asked if
+ * he wants to use the existing
+ * account or create a new one
+ *
+ * account does not exist Select User will be asked to
+ * select a different account
+ * or create a new one
+ *
+ * @endcode
+ *
+ * @param mode Is either Create or Select depending on the above table
+ * @param account Reference to MyMoneyAccount object
+ */
+
+ void selectOrCreateAccount(const SelectCreateMode mode, MyMoneyAccount& account, const MyMoneyMoney& openingBalance = MyMoneyMoney());
+
+ /**
+ * This method looks up the @p searchname account by name and returns its id
+ * if it was found. If it was not found, it creates a new income account using
+ * @p searchname as a name, and returns the id if the newly created account
+ *
+ * @param searchname The name of the account to find or create
+ * @return QString id of the found or created account
+ */
+ static const QString findOrCreateIncomeAccount(const QString& searchname);
+
+ /**
+ * This method looks up the @p searchname account by name and returns its id
+ * if it was found. If it was not found, it creates a new expense account using
+ * @p searchname as a name, and returns the id if the newly created account
+ *
+ * @param searchname The name of the account to find or create
+ * @return QString id of the found or created account
+ */
+ static const QString findOrCreateExpenseAccount(const QString& searchname);
+
+ /**
+ * This method returns the account id for a given account @a name. In
+ * case @a name references an investment account and @a useBrokerage is @a true
+ * (the default), the id of the corresponding brokerage account will be
+ * returned. In case an account is not existant, it will be created.
+ */
+ QString transferAccount(QString name, bool useBrokerage = true);
+
+ // void processQifLine(void);
+ void createOpeningBalance(MyMoneyAccount::_accountTypeE accType = MyMoneyAccount::Checkings);
+
+signals:
+ /**
+ * This signal will be emitted when the import is finished.
+ */
+ void importFinished(void);
+
+private slots:
+ void slotSendDataToFilter(void);
+ void slotReceivedDataFromFilter(KProcess* /* proc */, char *buff, int len);
+ void slotReceivedErrorFromFilter(KProcess* /* proc */, char *buff, int len);
+ // void slotReceivedDataFromFilter(void);
+ // void slotReceivedErrorFromFilter(void);
+ void slotProcessData(void);
+
+ /**
+ * This slot is used to be informed about the end of the filtering process.
+ * It emits the signal importFinished()
+ */
+ void slotImportFinished(void);
+
+
+private:
+ /// \internal d-pointer class.
+ class Private;
+ /// \internal d-pointer instance.
+ Private* const d;
+
+ KProcess m_filter;
+ QString m_filename;
+ KURL m_url;
+ MyMoneyQifProfile m_qifProfile;
+ MyMoneyAccount m_account;
+ unsigned long m_transactionsSkipped;
+ unsigned long m_transactionsProcessed;
+ QStringList m_dontAskAgain;
+ QMap<QString, QString> m_accountTranslation;
+ QMap<QString, QString> m_investmentMap;
+ QFile *m_file;
+ char m_buffer[1024];
+ QCString m_lineBuffer;
+ QStringList m_qifEntry;
+ int m_extractedLine;
+ QString m_qifLine;
+ QStringList m_qifLines;
+ QifEntryTypeE m_entryType;
+ bool m_skipAccount;
+ bool m_processingData;
+ bool m_userAbort;
+ bool m_autoCreatePayee;
+ unsigned long m_pos;
+ unsigned m_linenumber;
+ bool m_warnedInvestment;
+ bool m_warnedSecurity;
+ bool m_warnedPrice;
+ QValueList<MyMoneyTransaction> m_transactionCache;
+
+ QValueList<QByteArray> m_data;
+
+ void (*m_progressCallback)(int, int, const QString&);
+
+ MyMoneyFileTransaction* m_ft;
+};
+
+#endif
diff --git a/kmymoney2/converter/mymoneyqifwriter.cpp b/kmymoney2/converter/mymoneyqifwriter.cpp
new file mode 100644
index 0000000..9526acd
--- /dev/null
+++ b/kmymoney2/converter/mymoneyqifwriter.cpp
@@ -0,0 +1,254 @@
+/***************************************************************************
+ mymoneyqifwriter.cpp - description
+ -------------------
+ begin : Sun Jan 5 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+// ----------------------------------------------------------------------------
+// QT Headers
+
+#include <qfile.h>
+#include <qtextstream.h>
+
+// ----------------------------------------------------------------------------
+// KDE Headers
+
+#include <klocale.h>
+#include <kmessagebox.h>
+
+// ----------------------------------------------------------------------------
+// Project Headers
+
+#include "mymoneyqifwriter.h"
+#include "../mymoney/mymoneyfile.h"
+
+MyMoneyQifWriter::MyMoneyQifWriter()
+{
+}
+
+MyMoneyQifWriter::~MyMoneyQifWriter()
+{
+}
+
+void MyMoneyQifWriter::write(const QString& filename, const QString& profile,
+ const QString& accountId, const bool accountData,
+ const bool categoryData,
+ const QDate& startDate, const QDate& endDate)
+{
+ m_qifProfile.loadProfile("Profile-" + profile);
+
+ QFile qifFile(filename);
+ if(qifFile.open(IO_WriteOnly)) {
+ QTextStream s(&qifFile);
+
+ try {
+ if(categoryData) {
+ writeCategoryEntries(s);
+ }
+
+ if(accountData) {
+ writeAccountEntry(s, accountId, startDate, endDate);
+ }
+ emit signalProgress(-1, -1);
+
+ } catch(MyMoneyException *e) {
+ QString errMsg = i18n("Unexpected exception '%1' thrown in %2, line %3 "
+ "caught in MyMoneyQifWriter::write()")
+ .arg(e->what()).arg(e->file()).arg(e->line());
+
+ KMessageBox::error(0, errMsg);
+ delete e;
+ }
+
+ qifFile.close();
+ } else {
+ KMessageBox::error(0, i18n("Unable to open file '%1' for writing").arg(filename));
+ }
+}
+
+void MyMoneyQifWriter::writeAccountEntry(QTextStream &s, const QString& accountId, const QDate& startDate, const QDate& endDate)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyAccount account;
+
+ account = file->account(accountId);
+ MyMoneyTransactionFilter filter(accountId);
+ filter.setDateFilter(startDate, endDate);
+ QValueList<MyMoneyTransaction> list = file->transactionList(filter);
+ QString openingBalanceTransactionId;
+
+ s << "!Type:" << m_qifProfile.profileType() << endl;
+ if(!startDate.isValid() || startDate <= account.openingDate()) {
+ s << "D" << m_qifProfile.date(account.openingDate()) << endl;
+ openingBalanceTransactionId = file->openingBalanceTransaction(account);
+ MyMoneySplit split;
+ if(!openingBalanceTransactionId.isEmpty()) {
+ MyMoneyTransaction openingBalanceTransaction = file->transaction(openingBalanceTransactionId);
+ split = openingBalanceTransaction.splitByAccount(account.id(), true /* match */);
+ }
+ s << "T" << m_qifProfile.value('T', split.value()) << endl;
+ } else {
+ s << "D" << m_qifProfile.date(startDate) << endl;
+ s << "T" << m_qifProfile.value('T', file->balance(accountId, startDate.addDays(-1))) << endl;
+ }
+ s << "CX" << endl;
+ s << "P" << m_qifProfile.openingBalanceText() << endl;
+ s << "L";
+ if(m_qifProfile.accountDelimiter().length())
+ s << m_qifProfile.accountDelimiter()[0];
+ s << account.name();
+ if(m_qifProfile.accountDelimiter().length() > 1)
+ s << m_qifProfile.accountDelimiter()[1];
+ s << endl;
+ s << "^" << endl;
+
+ QValueList<MyMoneyTransaction>::ConstIterator it;
+ signalProgress(0, list.count());
+ int count = 0;
+ for(it = list.begin(); it != list.end(); ++it) {
+ // don't include the openingBalanceTransaction again
+ if((*it).id() != openingBalanceTransactionId)
+ writeTransactionEntry(s, *it, accountId);
+ signalProgress(++count, 0);
+ }
+}
+
+void MyMoneyQifWriter::writeCategoryEntries(QTextStream &s)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyAccount income;
+ MyMoneyAccount expense;
+
+ income = file->income();
+ expense = file->expense();
+
+ s << "!Type:Cat" << endl;
+ QStringList list = income.accountList() + expense.accountList();
+ emit signalProgress(0, list.count());
+ QStringList::Iterator it;
+ int count = 0;
+ for(it = list.begin(); it != list.end(); ++it) {
+ writeCategoryEntry(s, *it, "");
+ emit signalProgress(++count, 0);
+ }
+}
+
+void MyMoneyQifWriter::writeCategoryEntry(QTextStream &s, const QString& accountId, const QString& leadIn)
+{
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(accountId);
+ QString name = acc.name();
+
+ s << "N" << leadIn << name << endl;
+ s << (MyMoneyAccount::accountGroup(acc.accountType()) == MyMoneyAccount::Expense ? "E" : "I") << endl;
+ s << "^" << endl;
+
+ QStringList list = acc.accountList();
+ QStringList::Iterator it;
+ name += ":";
+ for(it = list.begin(); it != list.end(); ++it) {
+ writeCategoryEntry(s, *it, name);
+ }
+}
+
+void MyMoneyQifWriter::writeTransactionEntry(QTextStream &s, const MyMoneyTransaction& t, const QString& accountId)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneySplit split = t.splitByAccount(accountId);
+
+ s << "D" << m_qifProfile.date(t.postDate()) << endl;
+
+ switch(split.reconcileFlag()) {
+ case MyMoneySplit::Cleared:
+ s << "C*" << endl;
+ break;
+
+ case MyMoneySplit::Reconciled:
+ case MyMoneySplit::Frozen:
+ s << "CX" << endl;
+ break;
+
+ default:
+ break;
+ }
+
+ if(split.memo().length() > 0) {
+ QString m = split.memo();
+ m.replace('\n', "\\n");
+ s << "M" << m << endl;
+ }
+
+ s << "T" << m_qifProfile.value('T', split.value()) << endl;
+
+ if(split.number().length() > 0)
+ s << "N" << split.number() << endl;
+
+ if(!split.payeeId().isEmpty()) {
+ MyMoneyPayee payee = file->payee(split.payeeId());
+ s << "P" << payee.name() << endl;
+ }
+
+ QValueList<MyMoneySplit> list = t.splits();
+ if(list.count() > 1) {
+ MyMoneySplit sp = t.splitByAccount(accountId, false);
+ MyMoneyAccount acc = file->account(sp.accountId());
+ if(acc.accountGroup() != MyMoneyAccount::Income
+ && acc.accountGroup() != MyMoneyAccount::Expense) {
+ s << "L" << m_qifProfile.accountDelimiter()[0]
+ << MyMoneyFile::instance()->accountToCategory(sp.accountId())
+ << m_qifProfile.accountDelimiter()[1] << endl;
+ } else {
+ s << "L" << file->accountToCategory(sp.accountId()) << endl;
+ }
+ if(list.count() > 2) {
+ QValueList<MyMoneySplit>::ConstIterator it;
+ for(it = list.begin(); it != list.end(); ++it) {
+ if(!((*it) == split)) {
+ writeSplitEntry(s, *it);
+ }
+ }
+ }
+ }
+ s << "^" << endl;
+}
+
+void MyMoneyQifWriter::writeSplitEntry(QTextStream& s, const MyMoneySplit& split)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ s << "S";
+ MyMoneyAccount acc = file->account(split.accountId());
+ if(acc.accountGroup() != MyMoneyAccount::Income
+ && acc.accountGroup() != MyMoneyAccount::Expense) {
+ s << m_qifProfile.accountDelimiter()[0]
+ << file->accountToCategory(split.accountId())
+ << m_qifProfile.accountDelimiter()[1];
+ } else {
+ s << file->accountToCategory(split.accountId());
+ }
+ s << endl;
+
+ if(split.memo().length() > 0) {
+ QString m = split.memo();
+ m.replace('\n', "\\n");
+ s << "E" << m << endl;
+ }
+
+ s << "$" << m_qifProfile.value('$', -split.value()) << endl;
+}
+
+#include "mymoneyqifwriter.moc"
diff --git a/kmymoney2/converter/mymoneyqifwriter.h b/kmymoney2/converter/mymoneyqifwriter.h
new file mode 100644
index 0000000..f77e612
--- /dev/null
+++ b/kmymoney2/converter/mymoneyqifwriter.h
@@ -0,0 +1,138 @@
+/***************************************************************************
+ mymoneyqifwriter.h - description
+ -------------------
+ begin : Sun Jan 5 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYQIFWRITER_H
+#define MYMONEYQIFWRITER_H
+
+// ----------------------------------------------------------------------------
+// QT Headers
+
+#include <qobject.h>
+#include <qdatetime.h>
+
+// ----------------------------------------------------------------------------
+// KDE Headers
+
+// ----------------------------------------------------------------------------
+// Project Headers
+
+class MyMoneyTransaction;
+class MyMoneySplit;
+#include "mymoneyqifprofile.h"
+
+/**
+ * @author Thomas Baumgart
+ */
+
+/**
+ * This class represents the QIF writer. All conversion between the
+ * internal representation of accounts, transactions is handled in this
+ * object. The conversion is controlled using a MyMoneyQifProfile to allow
+ * the user to control the conversion.
+ */
+class MyMoneyQifWriter : public QObject
+{
+ Q_OBJECT
+
+public:
+ MyMoneyQifWriter();
+ ~MyMoneyQifWriter();
+
+ /**
+ * This method is used to start the conversion. The parameters control
+ * the destination of the data and the parts that will be exported.
+ * Individual errors will be reported using message boxes.
+ *
+ * @param filename The name of the output file with full path information
+ * @param profile The name of the profile to be used for conversion
+ * @param accountId The id of the account that will be exported
+ * @param accountData If true, the transactions will be exported
+ * @param categoryData If true, the categories will be exported as well
+ * @param startDate Transations before this date will not be exported
+ * @param endDate Transactions after this date will not be exported
+ */
+ void write(const QString& filename, const QString& profile,
+ const QString& accountId, const bool accountData,
+ const bool categoryData,
+ const QDate& startDate, const QDate& endDate);
+
+private:
+ /**
+ * This method writes the entries necessary for an account. First
+ * the leadin, and then the transactions that are in the account
+ * specified by @p accountId in the range from @p startDate to @p
+ * endDate.
+ *
+ * @param s reference to textstream
+ * @param accountId id of the account to be written
+ * @param startDate date from which entries are written
+ * @param endDate date until which entries are written
+ */
+ void writeAccountEntry(QTextStream& s, const QString& accountId, const QDate& startDate, const QDate& endDate);
+
+ /**
+ * This method writes the category entries to the stream
+ * @p s. It writes the leadin and uses writeCategoryEntries()
+ * to write the entries and emits signalProgess() where needed.
+ *
+ * @param s reference to textstream
+ */
+ void writeCategoryEntries(QTextStream& s);
+
+ /**
+ * This method writes the category entry for account with
+ * the ID @p accountId to the stream @p s. All subaccounts
+ * are processed as well.
+ *
+ * @param s reference to textstream
+ * @param accountId id of the account to be written
+ * @param leadIn constant text that will be prepended to the account's name
+ */
+ void writeCategoryEntry(QTextStream& s, const QString& accountId, const QString& leadIn);
+
+ void writeTransactionEntry(QTextStream &s, const MyMoneyTransaction& t, const QString& accountId);
+ void writeSplitEntry(QTextStream &s, const MyMoneySplit& t);
+
+signals:
+ /**
+ * This signal is emitted while the operation progresses.
+ * When the operation starts, the signal is emitted with
+ * @p current being 0 and @p max having the maximum value.
+ *
+ * During the operation, the signal is emitted with @p current
+ * containing the current value on the way to the maximum value.
+ * @p max will be 0 in this case.
+ *
+ * When the operation is finished, the signal is emitted with
+ * @p current and @p max set to -1 to identify the end of the
+ * operation.
+ *
+ * @param current see above
+ * @param max see above
+ */
+ void signalProgress(int current, int max);
+
+private:
+ MyMoneyQifProfile m_qifProfile;
+};
+
+#endif
diff --git a/kmymoney2/converter/mymoneystatementreader.cpp b/kmymoney2/converter/mymoneystatementreader.cpp
new file mode 100644
index 0000000..b804a59
--- /dev/null
+++ b/kmymoney2/converter/mymoneystatementreader.cpp
@@ -0,0 +1,1354 @@
+/***************************************************************************
+ mymoneystatementreader.cpp
+ -------------------
+ begin : Mon Aug 30 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ Ace Jones <acejones@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include <typeinfo>
+
+// ----------------------------------------------------------------------------
+// QT Headers
+
+#include <qfile.h>
+#include <qstringlist.h>
+#include <qtimer.h>
+#include <qtextedit.h>
+
+// ----------------------------------------------------------------------------
+// KDE Headers
+
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kconfig.h>
+#include <kdebug.h>
+#include <kdialogbase.h>
+#include <qvbox.h>
+#include <qlabel.h>
+
+// ----------------------------------------------------------------------------
+// Project Headers
+
+#include "mymoneystatementreader.h"
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/mymoneystatement.h>
+#include <kmymoney/kmymoneyglobalsettings.h>
+#include <kmymoney/transactioneditor.h>
+#include <kmymoney/kmymoneyedit.h>
+#include "../dialogs/kaccountselectdlg.h"
+#include "../dialogs/transactionmatcher.h"
+#include "../dialogs/kenterscheduledlg.h"
+#include "../kmymoney2.h"
+#include <kmymoney/kmymoneyaccountcombo.h>
+
+class MyMoneyStatementReader::Private
+{
+ public:
+ Private() :
+ transactionsCount(0),
+ transactionsAdded(0),
+ transactionsMatched(0),
+ transactionsDuplicate(0),
+ scannedCategories(false)
+ {}
+
+ const QString& feeId(const MyMoneyAccount& invAcc);
+ const QString& interestId(const MyMoneyAccount& invAcc);
+ QString interestId(const QString& name);
+ QString feeId(const QString& name);
+ void assignUniqueBankID(MyMoneySplit& s, const MyMoneyStatement::Transaction& t_in);
+
+ MyMoneyAccount lastAccount;
+ QValueList<MyMoneyTransaction> transactions;
+ QValueList<MyMoneyPayee> payees;
+ int transactionsCount;
+ int transactionsAdded;
+ int transactionsMatched;
+ int transactionsDuplicate;
+ QMap<QString, bool> uniqIds;
+ QMap<QString, MyMoneySecurity> securitiesBySymbol;
+ QMap<QString, MyMoneySecurity> securitiesByName;
+ bool m_skipCategoryMatching;
+ private:
+ void scanCategories(QString& id, const MyMoneyAccount& invAcc, const MyMoneyAccount& parentAccount, const QString& defaultName);
+ QString nameToId(const QString&name, MyMoneyAccount& parent);
+ private:
+ QString m_feeId;
+ QString m_interestId;
+ bool scannedCategories;
+};
+
+
+const QString& MyMoneyStatementReader::Private::feeId(const MyMoneyAccount& invAcc)
+{
+ scanCategories(m_feeId, invAcc, MyMoneyFile::instance()->expense(), i18n("_Fees"));
+ return m_feeId;
+}
+
+const QString& MyMoneyStatementReader::Private::interestId(const MyMoneyAccount& invAcc)
+{
+ scanCategories(m_interestId, invAcc, MyMoneyFile::instance()->income(), i18n("_Dividend"));
+ return m_interestId;
+}
+
+QString MyMoneyStatementReader::Private::nameToId(const QString&name, MyMoneyAccount& parent)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyAccount acc = file->accountByName(name);
+ // if it does not exist, we have to create it
+ if(acc.id().isEmpty()) {
+ acc.setName( name );
+ acc.setAccountType( parent.accountType() );
+ acc.setCurrencyId(parent.currencyId());
+ file->addAccount(acc, parent);
+ }
+ return acc.id();
+}
+
+QString MyMoneyStatementReader::Private::interestId(const QString& name)
+{
+ MyMoneyAccount parent = MyMoneyFile::instance()->income();
+ return nameToId(name, parent);
+}
+
+QString MyMoneyStatementReader::Private::feeId(const QString& name)
+{
+ MyMoneyAccount parent = MyMoneyFile::instance()->expense();
+ return nameToId(name, parent);
+}
+
+
+void MyMoneyStatementReader::Private::scanCategories(QString& id, const MyMoneyAccount& invAcc, const MyMoneyAccount& parentAccount, const QString& defaultName)
+{
+ if(!scannedCategories) {
+ KMyMoneyUtils::previouslyUsedCategories(invAcc.id(), m_feeId, m_interestId);
+ scannedCategories = true;
+ }
+
+ if(id.isEmpty()) {
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyAccount acc = file->accountByName(defaultName);
+ // if it does not exist, we have to create it
+ if(acc.id().isEmpty()) {
+ MyMoneyAccount parent = parentAccount;
+ acc.setName( defaultName );
+ acc.setAccountType( parent.accountType() );
+ acc.setCurrencyId(parent.currencyId());
+ file->addAccount(acc, parent);
+ }
+ id = acc.id();
+ }
+}
+
+void MyMoneyStatementReader::Private::assignUniqueBankID(MyMoneySplit& s, const MyMoneyStatement::Transaction& t_in)
+{
+ if( ! t_in.m_strBankID.isEmpty() ) {
+ // make sure that id's are unique from this point on by appending a -#
+ // postfix if needed
+ QString base(t_in.m_strBankID);
+ QString hash(base);
+ int idx = 1;
+ for(;;) {
+ QMap<QString, bool>::const_iterator it;
+ it = uniqIds.find(hash);
+ if(it == uniqIds.end()) {
+ uniqIds[hash] = true;
+ break;
+ }
+ hash = QString("%1-%2").arg(base).arg(idx);
+ ++idx;
+ }
+
+ s.setBankID(hash);
+ }
+}
+
+
+MyMoneyStatementReader::MyMoneyStatementReader() :
+ d(new Private),
+ m_userAbort(false),
+ m_autoCreatePayee(false),
+ m_ft(0),
+ m_progressCallback(0)
+{
+ m_askPayeeCategory = KMyMoneyGlobalSettings::askForPayeeCategory();
+}
+
+MyMoneyStatementReader::~MyMoneyStatementReader()
+{
+ delete d;
+}
+
+bool MyMoneyStatementReader::anyTransactionAdded(void) const
+{
+ return (d->transactionsAdded != 0) ? true : false;
+}
+
+void MyMoneyStatementReader::setAutoCreatePayee(bool create)
+{
+ m_autoCreatePayee = create;
+}
+
+void MyMoneyStatementReader::setAskPayeeCategory(bool ask)
+{
+ m_askPayeeCategory = ask;
+}
+
+bool MyMoneyStatementReader::import(const MyMoneyStatement& s, QStringList& messages)
+{
+ //
+ // For testing, save the statement to an XML file
+ // (uncomment this line)
+ //
+ //MyMoneyStatement::writeXMLFile(s,"Imported.Xml");
+
+ //
+ // Select the account
+ //
+
+ m_account = MyMoneyAccount();
+
+ m_ft = new MyMoneyFileTransaction();
+ d->m_skipCategoryMatching = s.m_skipCategoryMatching;
+
+ // if the statement source left some information about
+ // the account, we use it to get the current data of it
+ if(!s.m_accountId.isEmpty()) {
+ try {
+ m_account = MyMoneyFile::instance()->account(s.m_accountId);
+ } catch(MyMoneyException* e) {
+ qDebug("Received reference '%s' to unknown account in statement", s.m_accountId.data());
+ delete e;
+ }
+ }
+
+ if(m_account.id().isEmpty())
+ {
+ m_account.setName(s.m_strAccountName);
+ m_account.setNumber(s.m_strAccountNumber);
+
+ switch ( s.m_eType )
+ {
+ case MyMoneyStatement::etCheckings:
+ m_account.setAccountType(MyMoneyAccount::Checkings);
+ break;
+ case MyMoneyStatement::etSavings:
+ m_account.setAccountType(MyMoneyAccount::Savings);
+ break;
+ case MyMoneyStatement::etInvestment:
+ //testing support for investment statements!
+ //m_userAbort = true;
+ //KMessageBox::error(kmymoney2, i18n("This is an investment statement. These are not supported currently."), i18n("Critical Error"));
+ m_account.setAccountType(MyMoneyAccount::Investment);
+ break;
+ case MyMoneyStatement::etCreditCard:
+ m_account.setAccountType(MyMoneyAccount::CreditCard);
+ break;
+ default:
+ m_account.setAccountType(MyMoneyAccount::Checkings);
+ break;
+ }
+
+
+ // we ask the user only if we have some transactions to process
+ if ( !m_userAbort && s.m_listTransactions.count() > 0)
+ m_userAbort = ! selectOrCreateAccount(Select, m_account);
+ }
+
+ // see if we need to update some values stored with the account
+ if(m_account.value("lastStatementBalance") != s.m_closingBalance.toString()
+ || m_account.value("lastImportedTransactionDate") != s.m_dateEnd.toString(Qt::ISODate)) {
+ if(s.m_closingBalance != MyMoneyMoney::autoCalc) {
+ m_account.setValue("lastStatementBalance", s.m_closingBalance.toString());
+ if ( s.m_dateEnd.isValid() ) {
+ m_account.setValue("lastImportedTransactionDate", s.m_dateEnd.toString(Qt::ISODate));
+ }
+ }
+
+ try {
+ MyMoneyFile::instance()->modifyAccount(m_account);
+ } catch(MyMoneyException* e) {
+ qDebug("Updating account in MyMoneyStatementReader::startImport failed");
+ delete e;
+ }
+ }
+
+
+ if(!m_account.name().isEmpty())
+ messages += i18n("Importing statement for account %1").arg(m_account.name());
+ else if(s.m_listTransactions.count() == 0)
+ messages += i18n("Importing statement without transactions");
+
+ qDebug("Importing statement for '%s'", m_account.name().data());
+
+ //
+ // Process the securities
+ //
+ signalProgress(0, s.m_listSecurities.count(), "Importing Statement ...");
+ int progress = 0;
+ QValueList<MyMoneyStatement::Security>::const_iterator it_s = s.m_listSecurities.begin();
+ while ( it_s != s.m_listSecurities.end() )
+ {
+ processSecurityEntry(*it_s);
+ signalProgress(++progress, 0);
+ ++it_s;
+ }
+ signalProgress(-1, -1);
+
+ //
+ // Process the transactions
+ //
+
+ if ( !m_userAbort )
+ {
+ try {
+ qDebug("Processing transactions (%s)", m_account.name().data());
+ signalProgress(0, s.m_listTransactions.count(), "Importing Statement ...");
+ int progress = 0;
+ QValueList<MyMoneyStatement::Transaction>::const_iterator it_t = s.m_listTransactions.begin();
+ while ( it_t != s.m_listTransactions.end() )
+ {
+ processTransactionEntry(*it_t);
+ signalProgress(++progress, 0);
+ ++it_t;
+ }
+ qDebug("Processing transactions done (%s)", m_account.name().data());
+
+ } catch(MyMoneyException* e) {
+ if(e->what() == "USERABORT")
+ m_userAbort = true;
+ else
+ qDebug("Caught exception from processTransactionEntry() not caused by USERABORT: %s", e->what().data());
+ delete e;
+ }
+ signalProgress(-1, -1);
+ }
+
+ //
+ // process price entries
+ //
+ if ( !m_userAbort )
+ {
+ try {
+ signalProgress(0, s.m_listPrices.count(), "Importing Statement ...");
+ QValueList<MyMoneySecurity> slist = MyMoneyFile::instance()->securityList();
+ QValueList<MyMoneySecurity>::const_iterator it_s;
+ for(it_s = slist.begin(); it_s != slist.end(); ++it_s) {
+ d->securitiesBySymbol[(*it_s).tradingSymbol()] = *it_s;
+ d->securitiesByName[(*it_s).name()] = *it_s;
+ }
+
+ int progress = 0;
+ QValueList<MyMoneyStatement::Price>::const_iterator it_p = s.m_listPrices.begin();
+ while(it_p != s.m_listPrices.end()) {
+ processPriceEntry(*it_p);
+ signalProgress(++progress, 0);
+ ++it_p;
+ }
+ } catch(MyMoneyException* e) {
+ if(e->what() == "USERABORT")
+ m_userAbort = true;
+ else
+ qDebug("Caught exception from processPriceEntry() not caused by USERABORT: %s", e->what().data());
+ delete e;
+ }
+ signalProgress(-1, -1);
+ }
+
+ bool rc = false;
+
+ // delete all payees created in vain
+ int payeeCount = d->payees.count();
+ QValueList<MyMoneyPayee>::const_iterator it_p;
+ for(it_p = d->payees.begin(); it_p != d->payees.end(); ++it_p) {
+ try {
+ MyMoneyFile::instance()->removePayee(*it_p);
+ --payeeCount;
+ } catch(MyMoneyException* e) {
+ // if we can't delete it, it must be in use which is ok for us
+ delete e;
+ }
+ }
+
+ if(s.m_closingBalance.isAutoCalc()) {
+ messages += i18n(" Statement balance is not contained in statement.");
+ } else {
+ messages += i18n(" Statement balance on %1 is reported to be %2").arg(s.m_dateEnd.toString(Qt::ISODate)).arg(s.m_closingBalance.formatMoney("",2));
+ }
+ messages += i18n(" Transactions");
+ messages += i18n(" %1 processed").arg(d->transactionsCount);
+ messages += i18n(" %1 added").arg(d->transactionsAdded);
+ messages += i18n(" %1 matched").arg(d->transactionsMatched);
+ messages += i18n(" %1 duplicates").arg(d->transactionsDuplicate);
+ messages += i18n(" Payees");
+ messages += i18n(" %1 created").arg(payeeCount);
+ messages += QString();
+
+ // remove the Don't ask again entries
+ KConfig* config = KGlobal::config();
+ config->setGroup(QString::fromLatin1("Notification Messages"));
+ QStringList::ConstIterator it;
+
+ for(it = m_dontAskAgain.begin(); it != m_dontAskAgain.end(); ++it) {
+ config->deleteEntry(*it);
+ }
+ config->sync();
+ m_dontAskAgain.clear();
+
+ rc = !m_userAbort;
+
+ // finish the transaction
+ if(rc)
+ m_ft->commit();
+ delete m_ft;
+ m_ft = 0;
+
+ qDebug("Importing statement for '%s' done", m_account.name().data());
+
+ return rc;
+}
+
+void MyMoneyStatementReader::processPriceEntry(const MyMoneyStatement::Price& p_in)
+{
+ if(d->securitiesBySymbol.contains(p_in.m_strSecurity)) {
+
+ MyMoneyPrice price(d->securitiesBySymbol[p_in.m_strSecurity].id(),
+ MyMoneyFile::instance()->baseCurrency().id(),
+ p_in.m_date,
+ p_in.m_amount, "QIF");
+ MyMoneyFile::instance()->addPrice(price);
+
+ } else if(d->securitiesByName.contains(p_in.m_strSecurity)) {
+
+ MyMoneyPrice price(d->securitiesByName[p_in.m_strSecurity].id(),
+ MyMoneyFile::instance()->baseCurrency().id(),
+ p_in.m_date,
+ p_in.m_amount, "QIF");
+ MyMoneyFile::instance()->addPrice(price);
+ }
+
+}
+
+void MyMoneyStatementReader::processSecurityEntry(const MyMoneyStatement::Security& sec_in)
+{
+ // For a security entry, we will just make sure the security exists in the
+ // file. It will not get added to the investment account until it's called
+ // for in a transaction.
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ // check if we already have the security
+ // In a statement, we do not know what type of security this is, so we will
+ // not use type as a matching factor.
+ MyMoneySecurity security;
+ QValueList<MyMoneySecurity> list = file->securityList();
+ QValueList<MyMoneySecurity>::ConstIterator it = list.begin();
+ while ( it != list.end() && security.id().isEmpty() )
+ {
+ if(sec_in.m_strSymbol.isEmpty()) {
+ if((*it).name() == sec_in.m_strName)
+ security = *it;
+ } else if((*it).tradingSymbol() == sec_in.m_strSymbol)
+ security = *it;
+ ++it;
+ }
+
+ // if the security was not found, we have to create it while not forgetting
+ // to setup the type
+ if(security.id().isEmpty())
+ {
+ security.setName(sec_in.m_strName);
+ security.setTradingSymbol(sec_in.m_strSymbol);
+ security.setSmallestAccountFraction(1000);
+ security.setTradingCurrency(file->baseCurrency().id());
+ security.setValue("kmm-security-id", sec_in.m_strId);
+ security.setValue("kmm-online-source", "Yahoo");
+ security.setSecurityType(MyMoneySecurity::SECURITY_STOCK);
+ MyMoneyFileTransaction ft;
+ try {
+ file->addSecurity(security);
+ ft.commit();
+ kdDebug(0) << "Created " << security.name() << " with id " << security.id() << endl;
+ } catch(MyMoneyException *e) {
+ KMessageBox::error(0, i18n("Error creating security record: %1").arg(e->what()), i18n("Error"));
+ }
+ } else {
+ kdDebug(0) << "Found " << security.name() << " with id " << security.id() << endl;
+ }
+}
+
+void MyMoneyStatementReader::processTransactionEntry(const MyMoneyStatement::Transaction& t_in)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ MyMoneyTransaction t;
+
+#if 0
+ QString dbgMsg;
+ dbgMsg = QString("Process %1, '%3', %2").arg(t_in.m_datePosted.toString(Qt::ISODate)).arg(t_in.m_amount.formatMoney("", 2)).arg(t_in.m_strBankID);
+ qDebug("%s", dbgMsg.data());
+#endif
+
+ // mark it imported for the view
+ t.setImported();
+
+ // TODO (Ace) We can get the commodity from the statement!!
+ // Although then we would need UI to verify
+ t.setCommodity(m_account.currencyId());
+
+ t.setPostDate(t_in.m_datePosted);
+ t.setMemo(t_in.m_strMemo);
+
+#if 0
+ // (acejones) removing this code. keeping it around for reference.
+ //
+ // this is the OLD way of handling bank ID's, which unfortunately was wrong.
+ // bank ID's actually need to go on the split which corresponds with the
+ // account we're importing into.
+ //
+ // thus anywhere "this account" is put into a split is also where we need
+ // to put the bank ID in.
+ //
+ if ( ! t_in.m_strBankID.isEmpty() )
+ t.setBankID(t_in.m_strBankID);
+#endif
+
+ MyMoneySplit s1;
+
+ s1.setMemo(t_in.m_strMemo);
+ s1.setValue(t_in.m_amount - t_in.m_fees);
+ s1.setShares(s1.value());
+ s1.setNumber(t_in.m_strNumber);
+
+ // set these values if a transfer split is needed at the very end.
+ MyMoneyMoney transfervalue;
+
+ // If the user has chosen to import into an investment account, determine the correct account to use
+ MyMoneyAccount thisaccount = m_account;
+ QString brokerageactid;
+
+ if ( thisaccount.accountType() == MyMoneyAccount::Investment )
+ {
+ // determine the brokerage account
+ brokerageactid = m_account.value("kmm-brokerage-account").utf8();
+ if (brokerageactid.isEmpty() )
+ {
+ brokerageactid = file->accountByName(m_account.brokerageName()).id();
+ }
+
+ // find the security transacted, UNLESS this transaction didn't
+ // involve any security.
+ if ( (t_in.m_eAction != MyMoneyStatement::Transaction::eaNone)
+ && (t_in.m_eAction != MyMoneyStatement::Transaction::eaInterest)
+ && (t_in.m_eAction != MyMoneyStatement::Transaction::eaFees))
+ {
+ // the correct account is the stock account which matches two criteria:
+ // (1) it is a sub-account of the selected investment account, and
+ // (2a) the symbol of the underlying security matches the security of the
+ // transaction, or
+ // (2b) the name of the security matches the name of the security of the transaction.
+
+ // search through each subordinate account
+ bool found = false;
+ QStringList accounts = thisaccount.accountList();
+ QStringList::const_iterator it_account = accounts.begin();
+ while( !found && it_account != accounts.end() )
+ {
+ QString currencyid = file->account(*it_account).currencyId();
+ MyMoneySecurity security = file->security( currencyid );
+ if((t_in.m_strSymbol.lower() == security.tradingSymbol().lower())
+ || (t_in.m_strSecurity.lower() == security.name().lower()))
+ {
+ thisaccount = file->account(*it_account);
+ found = true;
+
+ // Don't update price if there is no price information contained in the transaction
+ if(t_in.m_eAction != MyMoneyStatement::Transaction::eaCashDividend
+ && t_in.m_eAction != MyMoneyStatement::Transaction::eaShrsin
+ && t_in.m_eAction != MyMoneyStatement::Transaction::eaShrsout)
+ {
+ // update the price, while we're here. in the future, this should be
+ // an option
+ QString basecurrencyid = file->baseCurrency().id();
+ MyMoneyPrice price = file->price( currencyid, basecurrencyid, t_in.m_datePosted, true );
+ if ( !price.isValid() && ((!t_in.m_amount.isZero() && !t_in.m_shares.isZero()) || !t_in.m_price.isZero()))
+ {
+ MyMoneyPrice newprice;
+ if(!t_in.m_price.isZero()) {
+ newprice = MyMoneyPrice( currencyid, basecurrencyid, t_in.m_datePosted,
+ t_in.m_price.abs(), i18n("Statement Importer") );
+ } else {
+ newprice = MyMoneyPrice( currencyid, basecurrencyid, t_in.m_datePosted,
+ (t_in.m_amount / t_in.m_shares).abs(), i18n("Statement Importer") );
+ }
+ file->addPrice(newprice);
+ }
+ }
+ }
+
+ ++it_account;
+ }
+
+ // If there was no stock account under the m_acccount investment account,
+ // add one using the security.
+ if (!found)
+ {
+ // The security should always be available, because the statement file
+ // should separately list all the securities referred to in the file,
+ // and when we found a security, we added it to the file.
+
+ if ( t_in.m_strSecurity.isEmpty() )
+ {
+ KMessageBox::information(0, i18n("This imported statement contains investment transactions with no security. These transactions will be ignored.").arg(t_in.m_strSecurity),i18n("Security not found"),QString("BlankSecurity"));
+ return;
+ }
+ else
+ {
+ MyMoneySecurity security;
+ QValueList<MyMoneySecurity> list = MyMoneyFile::instance()->securityList();
+ QValueList<MyMoneySecurity>::ConstIterator it = list.begin();
+ while ( it != list.end() && security.id().isEmpty() )
+ {
+ if(t_in.m_strSecurity.lower() == (*it).tradingSymbol().lower()
+ || t_in.m_strSecurity.lower() == (*it).name().lower()) {
+ security = *it;
+ }
+ ++it;
+ }
+ if(!security.id().isEmpty())
+ {
+ thisaccount = MyMoneyAccount();
+ thisaccount.setName(security.name());
+ thisaccount.setAccountType(MyMoneyAccount::Stock);
+ thisaccount.setCurrencyId(security.id());
+
+ file->addAccount(thisaccount, m_account);
+ kdDebug(0) << __func__ << ": created account " << thisaccount.id() << " for security " << t_in.m_strSecurity << " under account " << m_account.id() << endl;
+ }
+ // this security does not exist in the file.
+ else
+ {
+ // This should be rare. A statement should have a security entry for any
+ // of the securities referred to in the transactions. The only way to get
+ // here is if that's NOT the case.
+ KMessageBox::information(0, i18n("This investment account does not contain the \"%1\" security. Transactions involving this security will be ignored.").arg(t_in.m_strSecurity),i18n("Security not found"),QString("MissingSecurity%1").arg(t_in.m_strSecurity.stripWhiteSpace()));
+ return;
+ }
+ }
+ }
+ }
+
+ s1.setAccountId(thisaccount.id());
+ d->assignUniqueBankID(s1, t_in);
+
+ if (t_in.m_eAction==MyMoneyStatement::Transaction::eaReinvestDividend)
+ {
+ s1.setAction(MyMoneySplit::ActionReinvestDividend);
+ s1.setShares(t_in.m_shares);
+
+ if(!t_in.m_price.isZero()) {
+ s1.setPrice(t_in.m_price);
+ } else {
+ s1.setPrice(((t_in.m_amount - t_in.m_fees) / t_in.m_shares).convert(MyMoneyMoney::precToDenom(KMyMoneyGlobalSettings::pricePrecision())));
+ }
+
+
+ MyMoneySplit s2;
+ s2.setMemo(t_in.m_strMemo);
+ if(t_in.m_strInterestCategory.isEmpty())
+ s2.setAccountId(d->interestId(thisaccount));
+ else
+ s2.setAccountId(d->interestId(t_in.m_strInterestCategory));
+
+ s2.setShares(-t_in.m_amount - t_in.m_fees);
+ s2.setValue(s2.shares());
+ t.addSplit(s2);
+ }
+ else if (t_in.m_eAction==MyMoneyStatement::Transaction::eaCashDividend)
+ {
+ // Cash dividends require setting 2 splits to get all of the information
+ // in. Split #1 will be the income split, and we'll set it to the first
+ // income account. This is a hack, but it's needed in order to get the
+ // amount into the transaction.
+
+ // There are some sign issues. The OFX plugin universally reverses the sign
+ // for investment transactions.
+ //
+ // The way we interpret the sign on 'amount' is the s1 split, which is always
+ // the thing that's NOT the cash account. For dividends, it's the income
+ // category, for buy/sell it's the stock account.
+ //
+ // For cash account transactions, the s1 split IS the cash account split,
+ // which explains why they have to be reversed for investment transactions
+ //
+ // Ergo, the 'amount' is negative at this point and needs to stay negative.
+ // The 'fees' is positive.
+ //
+ // This should probably change. It would be more consistent to ALWAYS
+ // interpret the 'amount' as the cash account part.
+
+ if(t_in.m_strInterestCategory.isEmpty())
+ s1.setAccountId(d->interestId(thisaccount));
+ else
+ s1.setAccountId(d->interestId(t_in.m_strInterestCategory));
+ s1.setShares(t_in.m_amount);
+ s1.setValue(t_in.m_amount);
+
+ // Split 2 will be the zero-amount investment split that serves to
+ // mark this transaction as a cash dividend and note which stock account
+ // it belongs to.
+ MyMoneySplit s2;
+ s2.setMemo(t_in.m_strMemo);
+ s2.setAction(MyMoneySplit::ActionDividend);
+ s2.setAccountId(thisaccount.id());
+ t.addSplit(s2);
+
+ transfervalue = -t_in.m_amount - t_in.m_fees;
+ }
+ else if (t_in.m_eAction==MyMoneyStatement::Transaction::eaInterest)
+ {
+ if(t_in.m_strInterestCategory.isEmpty())
+ s1.setAccountId(d->interestId(thisaccount));
+ else
+ s1.setAccountId(d->interestId(t_in.m_strInterestCategory));
+ s1.setShares(t_in.m_amount);
+ s1.setValue(t_in.m_amount);
+
+ transfervalue = -t_in.m_amount;
+
+ }
+ else if (t_in.m_eAction==MyMoneyStatement::Transaction::eaFees)
+ {
+ if(t_in.m_strInterestCategory.isEmpty())
+ s1.setAccountId(d->feeId(thisaccount));
+ else
+ s1.setAccountId(d->feeId(t_in.m_strInterestCategory));
+ s1.setShares(t_in.m_amount);
+ s1.setValue(t_in.m_amount);
+
+ transfervalue = -t_in.m_amount;
+
+ }
+ else if ((t_in.m_eAction==MyMoneyStatement::Transaction::eaBuy ) ||
+ (t_in.m_eAction==MyMoneyStatement::Transaction::eaSell))
+ {
+ if(!t_in.m_price.isZero()) {
+ s1.setPrice(t_in.m_price.abs());
+ } else {
+ MyMoneyMoney total;
+ total = t_in.m_amount - t_in.m_fees;
+ if(!t_in.m_shares.isZero())
+ s1.setPrice((total / t_in.m_shares).abs().convert(MyMoneyMoney::precToDenom(KMyMoneyGlobalSettings::pricePrecision())));
+ }
+
+ s1.setAction(MyMoneySplit::ActionBuyShares);
+
+ // Make sure to setup the sign correctly
+ if(t_in.m_eAction==MyMoneyStatement::Transaction::eaBuy ) {
+ s1.setShares(t_in.m_shares.abs());
+ s1.setValue(s1.value().abs());
+ transfervalue = -(t_in.m_amount.abs());
+ } else {
+ s1.setShares(-(t_in.m_shares.abs()));
+ s1.setValue(-(s1.value().abs()));
+ transfervalue = t_in.m_amount.abs();
+ }
+
+ }
+ else if ((t_in.m_eAction==MyMoneyStatement::Transaction::eaShrsin) ||
+ (t_in.m_eAction==MyMoneyStatement::Transaction::eaShrsout))
+ {
+ s1.setValue(MyMoneyMoney());
+ s1.setShares(t_in.m_shares);
+ s1.setAction(MyMoneySplit::ActionAddShares);
+ }
+ else if (t_in.m_eAction==MyMoneyStatement::Transaction::eaNone)
+ {
+ // User is attempting to import a non-investment transaction into this
+ // investment account. This is not supportable the way KMyMoney is
+ // written. However, if a user has an associated brokerage account,
+ // we can stuff the transaction there.
+
+ QString brokerageactid = m_account.value("kmm-brokerage-account").utf8();
+ if (brokerageactid.isEmpty() )
+ {
+ brokerageactid = file->accountByName(m_account.brokerageName()).id();
+ }
+ if ( ! brokerageactid.isEmpty() )
+ {
+ s1.setAccountId(brokerageactid);
+ d->assignUniqueBankID(s1, t_in);
+
+ // Needed to satisfy the bankid check below.
+ thisaccount = file->account(brokerageactid);
+ }
+ else
+ {
+ // Warning!! Your transaction is being thrown away.
+ }
+ }
+ if ( !t_in.m_fees.isZero() )
+ {
+ MyMoneySplit s;
+ s.setMemo(i18n("(Fees) ") + t_in.m_strMemo);
+ s.setValue(t_in.m_fees);
+ s.setShares(t_in.m_fees);
+ s.setAccountId(d->feeId(thisaccount));
+ t.addSplit(s);
+ }
+ }
+ else
+ {
+ // For non-investment accounts, just use the selected account
+ // Note that it is perfectly reasonable to import an investment statement into a non-investment account
+ // if you really want. The investment-specific information, such as number of shares and action will
+ // be discarded in that case.
+ s1.setAccountId(m_account.id());
+ d->assignUniqueBankID(s1, t_in);
+ }
+
+
+ QString payeename = t_in.m_strPayee;
+ if(!payeename.isEmpty())
+ {
+ QString payeeid;
+ try {
+ QValueList<MyMoneyPayee> pList = file->payeeList();
+ QValueList<MyMoneyPayee>::const_iterator it_p;
+ QMap<int, QString> matchMap;
+ for(it_p = pList.begin(); it_p != pList.end(); ++it_p) {
+ bool ignoreCase;
+ QStringList keys;
+ QStringList::const_iterator it_s;
+ switch((*it_p).matchData(ignoreCase, keys)) {
+ case MyMoneyPayee::matchDisabled:
+ break;
+
+ case MyMoneyPayee::matchName:
+ keys << QString("%1").arg(QRegExp::escape((*it_p).name()));
+ // tricky fall through here
+
+ case MyMoneyPayee::matchKey:
+ for(it_s = keys.begin(); it_s != keys.end(); ++it_s) {
+ QRegExp exp(*it_s, !ignoreCase);
+ if(exp.search(payeename) != -1) {
+ matchMap[exp.matchedLength()] = (*it_p).id();
+ }
+ }
+ break;
+ }
+ }
+
+ // at this point we can have several scenarios:
+ // a) multiple matches
+ // b) a single match
+ // c) no match at all
+ //
+ // for c) we just do nothing, for b) we take the one we found
+ // in case of a) we take the one with the largest matchedLength()
+ // which happens to be the last one in the map
+ if(matchMap.count() > 1) {
+ QMap<int, QString>::const_iterator it_m = matchMap.end();
+ --it_m;
+ payeeid = *it_m;
+ } else if(matchMap.count() == 1)
+ payeeid = *(matchMap.begin());
+
+ // if we did not find a matching payee, we throw an exception and try to create it
+ if(payeeid.isEmpty())
+ throw new MYMONEYEXCEPTION("payee not matched");
+
+ s1.setPayeeId(payeeid);
+ }
+ catch (MyMoneyException *e)
+ {
+ MyMoneyPayee payee;
+ int rc = KMessageBox::Yes;
+
+ if(m_autoCreatePayee == false) {
+ // Ask the user if that is what he intended to do?
+ QString msg = i18n("Do you want to add \"%1\" as payee/receiver?\n\n").arg(payeename);
+ msg += i18n("Selecting \"Yes\" will create the payee, \"No\" will skip "
+ "creation of a payee record and remove the payee information "
+ "from this transaction. Selecting \"Cancel\" aborts the import "
+ "operation.\n\nIf you select \"No\" here and mark the \"Don't ask "
+ "again\" checkbox, the payee information for all following transactions "
+ "referencing \"%1\" will be removed.").arg(payeename);
+
+ QString askKey = QString("Statement-Import-Payee-")+payeename;
+ if(!m_dontAskAgain.contains(askKey)) {
+ m_dontAskAgain += askKey;
+ }
+ rc = KMessageBox::questionYesNoCancel(0, msg, i18n("New payee/receiver"),
+ KStdGuiItem::yes(), KStdGuiItem::no(), askKey);
+ }
+ delete e;
+
+ if(rc == KMessageBox::Yes) {
+ // for now, we just add the payee to the pool and turn
+ // on simple name matching, so that future transactions
+ // with the same name don't get here again.
+ //
+ // In the future, we could open a dialog and ask for
+ // all the other attributes of the payee, but since this
+ // is called in the context of an automatic procedure it
+ // might distract the user.
+ payee.setName(payeename);
+ payee.setMatchData(MyMoneyPayee::matchName, true, QStringList());
+ if (m_askPayeeCategory) {
+ // We use a QGuardedPtr because the dialog may get deleted
+ // during exec() if the parent of the dialog gets deleted.
+ // In that case the guarded ptr will reset to 0.
+ QGuardedPtr<KDialogBase> dialog = new KDialogBase(
+ "Default Category for Payee",
+ KDialogBase::Yes | KDialogBase::No | KDialogBase::Cancel,
+ KDialogBase::Yes, KDialogBase::Cancel,
+ 0, "questionYesNoCancel", true, true,
+ KGuiItem(i18n("Save Category")),
+ KGuiItem(i18n("No Category")),
+ KGuiItem(i18n("Abort")));
+ QVBox *topcontents = new QVBox (dialog);
+ topcontents->setSpacing(KDialog::spacingHint()*2);
+ topcontents->setMargin(KDialog::marginHint());
+
+ //add in caption? and account combo here
+ QLabel *label1 = new QLabel( topcontents);
+ label1->setText(i18n("Please select a default category for payee '%1':").arg(payee.name().data()));
+
+ QGuardedPtr<KMyMoneyAccountCombo> accountCombo = new KMyMoneyAccountCombo(topcontents);
+ dialog->setMainWidget(topcontents);
+
+ int result = dialog->exec();
+
+ QString accountId;
+ if (accountCombo && !accountCombo->selectedAccounts().isEmpty()) {
+ accountId = accountCombo->selectedAccounts().front();
+ }
+ if (dialog) {
+ delete dialog;
+ }
+ //if they hit yes instead of no, then grab setting of account combo
+ if (result == KDialogBase::Yes) {
+ payee.setDefaultAccountId(accountId);
+ }
+ else if (result != KDialogBase::No) {
+ //add cancel button? and throw exception like below
+ throw new MYMONEYEXCEPTION("USERABORT");
+ }
+ }
+
+ try {
+ file->addPayee(payee);
+ qDebug("Payee '%s' created", payee.name().data());
+ d->payees << payee;
+ payeeid = payee.id();
+ s1.setPayeeId(payeeid);
+
+ } catch(MyMoneyException *e) {
+ KMessageBox::detailedSorry(0, i18n("Unable to add payee/receiver"),
+ (e->what() + " " + i18n("thrown in") + " " + e->file()+ ":%1").arg(e->line()));
+ delete e;
+
+ }
+
+ } else if(rc == KMessageBox::No) {
+ s1.setPayeeId(QString());
+
+ } else {
+ throw new MYMONEYEXCEPTION("USERABORT");
+
+ }
+ }
+
+ if(thisaccount.accountType() != MyMoneyAccount::Stock ) {
+ //
+ // Fill in other side of the transaction (category/etc) based on payee
+ //
+ // Note, this logic is lifted from KLedgerView::slotPayeeChanged(),
+ // however this case is more complicated, because we have an amount and
+ // a memo. We just don't have the other side of the transaction.
+ //
+ // We'll search for the most recent transaction in this account with
+ // this payee. If this reference transaction is a simple 2-split
+ // transaction, it's simple. If it's a complex split, and the amounts
+ // are different, we have a problem. Somehow we have to balance the
+ // transaction. For now, we'll leave it unbalanced, and let the user
+ // handle it.
+ //
+ const MyMoneyPayee& payeeObj = MyMoneyFile::instance()->payee(payeeid);
+ if (t_in.m_listSplits.isEmpty() && payeeObj.defaultAccountEnabled()) {
+ MyMoneySplit s;
+ s.setReconcileFlag(MyMoneySplit::Cleared);
+ s.clearId();
+ s.setBankID(QString());
+ s.setShares(-s1.shares());
+ s.setValue(-s1.value());
+ s.setAccountId(payeeObj.defaultAccountId());
+ t.addSplit(s);
+ }
+ else if (t_in.m_listSplits.isEmpty() && !d->m_skipCategoryMatching) {
+ MyMoneyTransactionFilter filter(thisaccount.id());
+ filter.addPayee(payeeid);
+ QValueList<MyMoneyTransaction> list = file->transactionList(filter);
+ if(!list.empty())
+ {
+ // Default to using the most recent transaction as the reference
+ MyMoneyTransaction t_old = list.last();
+
+ // if there is more than one matching transaction, try to be a little
+ // smart about which one we take. for now, we'll see if there's one
+ // with the same VALUE as our imported transaction, and if so take that one.
+ if ( list.count() > 1 )
+ {
+ QValueList<MyMoneyTransaction>::ConstIterator it_trans = list.fromLast();
+ while ( it_trans != list.end() )
+ {
+ MyMoneySplit s = (*it_trans).splitByAccount(thisaccount.id());
+ if ( s.value() == s1.value() )
+ {
+ t_old = *it_trans;
+ break;
+ }
+ --it_trans;
+ }
+ }
+
+ QValueList<MyMoneySplit>::ConstIterator it_split;
+ for(it_split = t_old.splits().begin(); it_split != t_old.splits().end(); ++it_split)
+ {
+ // We don't need the split that covers this account,
+ // we just need the other ones.
+ if ( (*it_split).accountId() != thisaccount.id() )
+ {
+ MyMoneySplit s(*it_split);
+ s.setReconcileFlag(MyMoneySplit::NotReconciled);
+ s.clearId();
+ s.setBankID(QString());
+
+ if ( t_old.splits().count() == 2 )
+ {
+ s.setShares(-s1.shares());
+ s.setValue(-s1.value());
+ s.setMemo(s1.memo());
+ }
+ t.addSplit(s);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ s1.setReconcileFlag(t_in.m_reconcile);
+ t.addSplit(s1);
+
+ // Add the 'account' split if it's needed
+ if ( ! transfervalue.isZero() )
+ {
+ // in case the transaction has a reference to the brokerage account, we use it
+ if(!t_in.m_strBrokerageAccount.isEmpty()) {
+ brokerageactid = file->accountByName(t_in.m_strBrokerageAccount).id();
+ }
+
+ if ( !brokerageactid.isEmpty() )
+ {
+ // FIXME This may not deal with foreign currencies properly
+ MyMoneySplit s;
+ s.setMemo(t_in.m_strMemo);
+ s.setValue(transfervalue);
+ s.setShares(transfervalue);
+ s.setAccountId(brokerageactid);
+ s.setReconcileFlag(t_in.m_reconcile);
+ t.addSplit(s);
+ }
+ }
+
+ if ((t_in.m_eAction != MyMoneyStatement::Transaction::eaReinvestDividend) && (t_in.m_eAction!=MyMoneyStatement::Transaction::eaCashDividend)
+ )
+ {
+ //******************************************
+ // process splits
+ //******************************************
+
+ QValueList<MyMoneyStatement::Split>::const_iterator it_s;
+ for(it_s = t_in.m_listSplits.begin(); it_s != t_in.m_listSplits.end(); ++it_s) {
+ MyMoneySplit s2;
+ s2.setAccountId((*it_s).m_accountId);
+ MyMoneyAccount acc = file->account(s2.accountId());
+ if(acc.isAssetLiability()) {
+ s2.setPayeeId(s1.payeeId());
+ }
+ s2.setMemo((*it_s).m_strMemo);
+ s2.setShares((*it_s).m_amount);
+ s2.setValue((*it_s).m_amount);
+ s2.setReconcileFlag((*it_s).m_reconcile);
+ t.addSplit(s2);
+ }
+
+#if 0
+ QString accountId;
+ int count;
+ int cnt = 0;
+ count = t_in.m_listSplits.count();
+
+ for(cnt = 0; cnt < count; ++cnt )
+ {
+ MyMoneySplit s2 = s1;
+ s2.setMemo(t_in.m_listSplits[cnt].m_strMemo);
+ s2.clearId();
+ s2.setValue(t_in.m_listSplits[cnt].m_amount);
+ s2.setShares(t_in.m_listSplits[cnt].m_amount);
+ s2.setAccountId(QString(t_in.m_listSplits[cnt].m_accountId));
+#if 0
+ accountId = file->nameToAccount(t_in.m_listSplits[cnt].m_strCategoryName);
+ if (accountId.isEmpty())
+ accountId = checkCategory(t_in.m_listSplits[cnt].m_strCategoryName, t_in.m_listSplits[0].m_amount, t_in.m_listSplits[cnt].m_amount);
+
+ s2.setAccountId(accountId);
+#endif
+ t.addSplit(s2);
+ }
+#endif
+ }
+
+ // Add the transaction
+ try {
+
+ // check for matches already stored in the engine
+ MyMoneySplit matchedSplit;
+ TransactionMatcher::autoMatchResultE result;
+ TransactionMatcher matcher(thisaccount);
+ matcher.setMatchWindow(KMyMoneyGlobalSettings::matchInterval());
+ const MyMoneyObject *o = matcher.findMatch(t, s1, matchedSplit, result);
+ d->transactionsCount++;
+
+ // if we did not already find this one, we need to process it
+ if(result != TransactionMatcher::matchedDuplicate) {
+ d->transactionsAdded++;
+ file->addTransaction(t);
+
+ if(o) {
+ if(typeid(*o) == typeid(MyMoneyTransaction)) {
+ // it matched a simple transaction. that's the easy case
+ MyMoneyTransaction tm(*(dynamic_cast<const MyMoneyTransaction*>(o)));
+ switch(result) {
+ case TransactionMatcher::notMatched:
+ case TransactionMatcher::matchedDuplicate:
+ // no need to do anything here
+ break;
+ case TransactionMatcher::matched:
+ case TransactionMatcher::matchedExact:
+ qDebug("Detected as match to transaction '%s'", tm.id().data());
+ matcher.match(tm, matchedSplit, t, s1, true);
+ d->transactionsMatched++;
+ break;
+ }
+
+ } else if(typeid(*o) == typeid(MyMoneySchedule)) {
+ // a match has been found in a pending schedule. We'll ask the user if she wants
+ // to enter the schedule and match it agains the new transaction. Otherwise, we
+ // just leave the transaction as imported.
+ MyMoneySchedule schedule(*(dynamic_cast<const MyMoneySchedule*>(o)));
+ if(KMessageBox::questionYesNo(0, QString("<qt>%1</qt>").arg(i18n("KMyMoney has found a scheduled transaction named <b>%1</b> which matches an imported transaction. Do you want KMyMoney to enter this schedule now so that the transaction can be matched? ").arg(schedule.name())), i18n("Schedule found")) == KMessageBox::Yes) {
+ KEnterScheduleDlg dlg(0, schedule);
+ TransactionEditor* editor = dlg.startEdit();
+ if(editor) {
+ MyMoneyTransaction torig;
+ // in case the amounts of the scheduled transaction and the
+ // imported transaction differ, we need to update the amount
+ // using the transaction editor.
+ if(matchedSplit.shares() != s1.shares() && !schedule.isFixed()) {
+ // for now this only works with regular transactions and not
+ // for investment transactions. As of this, we don't have
+ // scheduled investment transactions anyway.
+ StdTransactionEditor* se = dynamic_cast<StdTransactionEditor*>(editor);
+ if(se) {
+ // the following call will update the amount field in the
+ // editor and also adjust a possible VAT assignment. Make
+ // sure to use only the absolute value of the amount, because
+ // the editor keeps the sign in a different position (deposit,
+ // withdrawal tab)
+ kMyMoneyEdit* amount = dynamic_cast<kMyMoneyEdit*>(se->haveWidget("amount"));
+ if(amount) {
+ amount->setValue(s1.shares().abs());
+ se->slotUpdateAmount(s1.shares().abs().toString());
+
+ // we also need to update the matchedSplit variable to
+ // have the modified share/value.
+ matchedSplit.setShares(s1.shares());
+ matchedSplit.setValue(s1.value());
+ }
+ }
+ }
+
+ editor->createTransaction(torig, dlg.transaction(), dlg.transaction().splits()[0], true);
+ QString newId;
+ if(editor->enterTransactions(newId, false, true)) {
+ if(!newId.isEmpty()) {
+ torig = MyMoneyFile::instance()->transaction(newId);
+ schedule.setLastPayment(torig.postDate());
+ }
+ schedule.setNextDueDate(schedule.nextPayment(schedule.nextDueDate()));
+ MyMoneyFile::instance()->modifySchedule(schedule);
+ }
+
+ // now match the two transactions
+ matcher.match(torig, matchedSplit, t, s1);
+ d->transactionsMatched++;
+ }
+ delete editor;
+ }
+ }
+ }
+ } else {
+ d->transactionsDuplicate++;
+ qDebug("Detected as duplicate");
+ }
+ delete o;
+ } catch (MyMoneyException *e) {
+ QString message(i18n("Problem adding or matching imported transaction with id '%1': %2").arg(t_in.m_strBankID).arg(e->what()));
+ qDebug("%s", message.data());
+ delete e;
+
+ int result = KMessageBox::warningContinueCancel(0, message);
+ if ( result == KMessageBox::Cancel )
+ throw new MYMONEYEXCEPTION("USERABORT");
+ }
+}
+
+bool MyMoneyStatementReader::selectOrCreateAccount(const SelectCreateMode /*mode*/, MyMoneyAccount& account)
+{
+ bool result = false;
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ QString accountId;
+
+ // Try to find an existing account in the engine which matches this one.
+ // There are two ways to be a "matching account". The account number can
+ // match the statement account OR the "StatementKey" property can match.
+ // Either way, we'll update the "StatementKey" property for next time.
+
+ QString accountNumber = account.number();
+ if ( ! accountNumber.isEmpty() )
+ {
+ // Get a list of all accounts
+ QValueList<MyMoneyAccount> accounts;
+ file->accountList(accounts);
+
+ // Iterate through them
+ QValueList<MyMoneyAccount>::const_iterator it_account = accounts.begin();
+ while ( it_account != accounts.end() )
+ {
+ if (
+ ( (*it_account).value("StatementKey") == accountNumber ) ||
+ ( (*it_account).number() == accountNumber )
+ )
+ {
+ MyMoneyAccount newAccount((*it_account).id(), account);
+ account = newAccount;
+ accountId = (*it_account).id();
+ break;
+ }
+
+ ++it_account;
+ }
+ }
+
+ QString msg = i18n("<b>You have downloaded a statement for the following account:</b><br><br>");
+ msg += i18n(" - Account Name: %1").arg(account.name()) + "<br>";
+ msg += i18n(" - Account Type: %1").arg(KMyMoneyUtils::accountTypeToString(account.accountType())) + "<br>";
+ msg += i18n(" - Account Number: %1").arg(account.number()) + "<br>";
+ msg += "<br>";
+
+ QString header;
+
+ if(!account.name().isEmpty())
+ {
+ if(!accountId.isEmpty())
+ msg += i18n("Do you want to import transactions to this account?");
+ else
+ msg += i18n("KMyMoney cannot determine which of your accounts to use. You can "
+ "create a new account by pressing the <b>Create</b> button "
+ "or select another one manually from the selection box below.");
+ }
+ else
+ {
+ msg += i18n("No account information has been found in the selected statement file. "
+ "Please select an account using the selection box in the dialog or "
+ "create a new account by pressing the <b>Create</b> button.");
+ }
+
+ KMyMoneyUtils::categoryTypeE type = static_cast<KMyMoneyUtils::categoryTypeE>(KMyMoneyUtils::asset|KMyMoneyUtils::liability);
+ KAccountSelectDlg accountSelect(type, "StatementImport", kmymoney2);
+ accountSelect.setHeader(i18n("Import transactions"));
+ accountSelect.setDescription(msg);
+ accountSelect.setAccount(account, accountId);
+ accountSelect.setMode(false);
+ accountSelect.showAbortButton(true);
+ accountSelect.m_qifEntry->hide();
+ QString accname;
+ bool done = false;
+ while ( !done )
+ {
+ if ( accountSelect.exec() == QDialog::Accepted && !accountSelect.selectedAccount().isEmpty() )
+ {
+ result = true;
+ done = true;
+ accountId = accountSelect.selectedAccount();
+ account = file->account(accountId);
+ if ( ! accountNumber.isEmpty() && account.value("StatementKey") != accountNumber )
+ {
+ account.setValue("StatementKey", accountNumber);
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyFile::instance()->modifyAccount(account);
+ ft.commit();
+ accname = account.name();
+ } catch(MyMoneyException* e) {
+ qDebug("Updating account in MyMoneyStatementReader::selectOrCreateAccount failed");
+ delete e;
+ }
+ }
+ }
+ else
+ {
+ if(accountSelect.aborted())
+ //throw new MYMONEYEXCEPTION("USERABORT");
+ done = true;
+ else
+ KMessageBox::error(0, QString("<qt>%1</qt>").arg(i18n("You must select an account, create a new one, or press the <b>Abort</b> button.")));
+ }
+ }
+ return result;
+}
+
+void MyMoneyStatementReader::setProgressCallback(void(*callback)(int, int, const QString&))
+{
+ m_progressCallback = callback;
+}
+
+void MyMoneyStatementReader::signalProgress(int current, int total, const QString& msg)
+{
+ if(m_progressCallback != 0)
+ (*m_progressCallback)(current, total, msg);
+}
+
+
+#include "mymoneystatementreader.moc"
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/converter/mymoneystatementreader.h b/kmymoney2/converter/mymoneystatementreader.h
new file mode 100644
index 0000000..46d74d7
--- /dev/null
+++ b/kmymoney2/converter/mymoneystatementreader.h
@@ -0,0 +1,151 @@
+/***************************************************************************
+ mymoneystatementreader
+ -------------------
+ begin : Mon Aug 30 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ Ace Jones <acejones@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYSTATEMENTREADER_H
+#define MYMONEYSTATEMENTREADER_H
+
+// ----------------------------------------------------------------------------
+// QT Headers
+
+#include <qobject.h>
+#include <qstring.h>
+#include <qstringlist.h>
+
+// ----------------------------------------------------------------------------
+// KDE Headers
+
+#include <ktempfile.h>
+#include <kprocess.h>
+
+// ----------------------------------------------------------------------------
+// Project Headers
+
+#include "mymoneyqifprofile.h"
+#include "../mymoney/mymoneyaccount.h"
+#include "../mymoney/mymoneystatement.h"
+
+class MyMoneyFileTransaction;
+class QStringList;
+
+/**
+ * This is a pared-down version of a MyMoneyQifReader object
+ *
+ * @author Ace Jones
+ */
+class MyMoneyStatementReader : public QObject
+{
+ Q_OBJECT
+
+public:
+ MyMoneyStatementReader();
+ ~MyMoneyStatementReader();
+
+ /**
+ * This method imports data from the MyMoneyStatement object @a s
+ * into the MyMoney engine. It leaves some statistical information
+ * in the @a messages string list
+ *
+ * @retval true the import was processed successfully
+ * @retval false the import resulted in a failure.
+ */
+ bool import(const MyMoneyStatement& s, QStringList& messages);
+
+ /**
+ * This method is used to modify the auto payee creation flag.
+ * If this flag is set, records for payees that are not currently
+ * found in the engine will be automatically created with no
+ * further user interaction required. If this flag is no set,
+ * the user will be asked if the payee should be created or not.
+ * If the MyMoneyQifReader object is created auto payee creation
+ * is turned off.
+ *
+ * @param create flag if this feature should be turned on (@p true)
+ * or turned off (@p false)
+ */
+ void setAutoCreatePayee(bool create);
+ void setAskPayeeCategory(bool ask);
+
+ const MyMoneyAccount& account() const { return m_account; };
+
+ void setProgressCallback(void(*callback)(int, int, const QString&));
+
+ /**
+ * Returns true in case any transaction has been added to the engine
+ * during the import of the statement. Only returns useful result
+ * after import() has been called.
+ */
+ bool anyTransactionAdded(void) const;
+
+private:
+ /**
+ * This method is used to update the progress information. It
+ * checks if an appropriate function is known and calls it.
+ *
+ * For a parameter description see KMyMoneyView::progressCallback().
+ */
+ void signalProgress(int current, int total, const QString& = "");
+
+ void processTransactionEntry(const MyMoneyStatement::Transaction& t_in);
+ void processSecurityEntry(const MyMoneyStatement::Security& s_in);
+ void processPriceEntry(const MyMoneyStatement::Price& p_in);
+
+ enum SelectCreateMode {
+ Create = 0,
+ Select
+ };
+ /**
+ * This method is used to find an account using the account's name
+ * stored in @p account in the current MyMoneyFile object. If it does not
+ * exist, the user has the chance to create it or to skip processing
+ * of this account.
+ *
+ * Please see the documentation for this function in MyMoneyQifReader
+ *
+ * @param mode Is either Create or Select depending on the above table
+ * @param account Reference to MyMoneyAccount object
+ */
+ bool selectOrCreateAccount(const SelectCreateMode mode, MyMoneyAccount& account);
+
+signals:
+ /**
+ * This signal will be emitted when the import is finished.
+ */
+ void importFinished(void);
+
+private:
+ /// \internal d-pointer class.
+ class Private;
+ /// \internal d-pointer instance.
+ Private* const d;
+ MyMoneyAccount m_account;
+ QStringList m_dontAskAgain;
+ bool m_skipAccount;
+ bool m_userAbort;
+ bool m_autoCreatePayee;
+ bool m_askPayeeCategory;
+ MyMoneyFileTransaction* m_ft;
+
+ void (*m_progressCallback)(int, int, const QString&);
+};
+
+#endif
diff --git a/kmymoney2/converter/mymoneytemplate.cpp b/kmymoney2/converter/mymoneytemplate.cpp
new file mode 100644
index 0000000..63305c6
--- /dev/null
+++ b/kmymoney2/converter/mymoneytemplate.cpp
@@ -0,0 +1,420 @@
+/***************************************************************************
+ mymoneytemplate.cpp - description
+ -------------------
+ begin : Sat Aug 14 2004
+ copyright : (C) 2004 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "kdecompat.h"
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qfile.h>
+#include <qfileinfo.h>
+#include <qapplication.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kio/netaccess.h>
+#include <ksavefile.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoneytemplate.h"
+
+MyMoneyTemplate::MyMoneyTemplate() :
+ m_progressCallback(0)
+{
+}
+
+MyMoneyTemplate::MyMoneyTemplate(const KURL& url) :
+ m_progressCallback(0)
+{
+ loadTemplate(url);
+}
+
+MyMoneyTemplate::~MyMoneyTemplate()
+{
+}
+
+bool MyMoneyTemplate::loadTemplate(const KURL& url)
+{
+ QString filename;
+
+ if(!url.isValid()) {
+ qDebug("Invalid template URL '%s'", url.url().latin1());
+ return false;
+ }
+
+ m_source = url;
+ if(url.isLocalFile()) {
+ filename = url.path();
+
+ } else {
+ bool rc;
+ rc = KIO::NetAccess::download(url, filename, qApp->mainWidget());
+ if(!rc) {
+ KMessageBox::detailedError(qApp->mainWidget(),
+ i18n("Error while loading file '%1'!").arg(url.url()),
+ KIO::NetAccess::lastErrorString(),
+ i18n("File access error"));
+ return false;
+ }
+ }
+
+ bool rc = true;
+ QFile file(filename);
+ QFileInfo info(file);
+ if(!info.isFile()) {
+ QString msg=i18n("<b>%1</b> is not a template file.").arg(filename);
+ KMessageBox::error(qApp->mainWidget(), QString("<p>")+msg, i18n("Filetype Error"));
+ return false;
+ }
+
+ if(file.open(IO_ReadOnly)) {
+ QString errMsg;
+ int errLine, errColumn;
+ if(!m_doc.setContent(&file, &errMsg, &errLine, &errColumn)) {
+ QString msg=i18n("Error while reading template file <b>%1</b> in line %2, column %3").arg(filename).arg(errLine).arg(errColumn);
+ KMessageBox::detailedError(qApp->mainWidget(), QString("<p>")+msg, errMsg, i18n("Template Error"));
+ rc = false;
+ } else {
+ rc = loadDescription();
+ }
+ file.close();
+ } else {
+ KMessageBox::sorry(qApp->mainWidget(), i18n("File '%1' not found!").arg(filename));
+ rc = false;
+ }
+
+ // if a temporary file was constructed by NetAccess::download,
+ // then it will be removed with the next call. Otherwise, it
+ // stays untouched on the local filesystem
+ KIO::NetAccess::removeTempFile(filename);
+ return rc;
+}
+
+bool MyMoneyTemplate::loadDescription(void)
+{
+ int validMask = 0x00;
+ const int validAccount = 0x01;
+ const int validTitle = 0x02;
+ const int validShort = 0x04;
+ const int validLong = 0x08;
+ const int invalid = 0x10;
+ const int validHeader = 0x0F;
+
+ QDomElement rootElement = m_doc.documentElement();
+ if(!rootElement.isNull()
+ && rootElement.tagName() == "kmymoney-account-template") {
+ QDomNode child = rootElement.firstChild();
+ while(!child.isNull() && child.isElement()) {
+ QDomElement childElement = child.toElement();
+ // qDebug("MyMoneyTemplate::import: Processing child node %s", childElement.tagName().data());
+ if(childElement.tagName() == "accounts") {
+ m_accounts = childElement.firstChild();
+ validMask |= validAccount;
+ } else if(childElement.tagName() == "title") {
+ m_title = childElement.text();
+ validMask |= validTitle;
+ } else if(childElement.tagName() == "shortdesc") {
+ m_shortDesc = childElement.text();
+ validMask |= validShort;
+ } else if(childElement.tagName() == "longdesc") {
+ m_longDesc = childElement.text();
+ validMask |= validLong;
+ } else {
+ KMessageBox::error(qApp->mainWidget(), QString("<p>")+i18n("Invalid tag <b>%1</b> in template file <b>%2</b>!").arg(childElement.tagName()).arg(m_source.prettyURL()));
+ validMask |= invalid;
+ }
+ child = child.nextSibling();
+ }
+ }
+ return validMask == validHeader;
+}
+
+bool MyMoneyTemplate::hierarchy(QMap<QString, QListViewItem*>& list, const QString& parent, QDomNode account)
+{
+ bool rc = true;
+ while(rc == true && !account.isNull()) {
+ if(account.isElement()) {
+ QDomElement accountElement = account.toElement();
+ if(accountElement.tagName() == "account") {
+ QString name = QString("%1:%2").arg(parent).arg(accountElement.attribute("name"));
+ list[name] = 0;
+ hierarchy(list, name, account.firstChild());
+ }
+ }
+ account = account.nextSibling();
+ }
+ return rc;
+}
+
+void MyMoneyTemplate::hierarchy(QMap<QString, QListViewItem*>& list)
+{
+ bool rc = !m_accounts.isNull();
+ QDomNode accounts = m_accounts;
+ while(rc == true && !accounts.isNull() && accounts.isElement()) {
+ QDomElement childElement = accounts.toElement();
+ if(childElement.tagName() == "account"
+ && childElement.attribute("name") == "") {
+ switch(childElement.attribute("type").toUInt()) {
+ case MyMoneyAccount::Asset:
+ list[i18n("Asset")] = 0;
+ rc = hierarchy(list, i18n("Asset"), childElement.firstChild());
+ break;
+ case MyMoneyAccount::Liability:
+ list[i18n("Liability")] = 0;
+ rc = hierarchy(list, i18n("Liability"), childElement.firstChild());
+ break;
+ case MyMoneyAccount::Income:
+ list[i18n("Income")] = 0;
+ rc = hierarchy(list, i18n("Income"), childElement.firstChild());
+ break;
+ case MyMoneyAccount::Expense:
+ list[i18n("Expense")] = 0;
+ rc = hierarchy(list, i18n("Expense"), childElement.firstChild());
+ break;
+ case MyMoneyAccount::Equity:
+ list[i18n("Equity")] = 0;
+ rc = hierarchy(list, i18n("Equity"), childElement.firstChild());
+ break;
+
+ default:
+ rc = false;
+ break;
+ }
+ } else {
+ rc = false;
+ }
+ accounts = accounts.nextSibling();
+ }
+}
+
+bool MyMoneyTemplate::importTemplate(void(*callback)(int, int, const QString&))
+{
+ m_progressCallback = callback;
+ bool rc = !m_accounts.isNull();
+ MyMoneyFile* file = MyMoneyFile::instance();
+ signalProgress(0, m_doc.elementsByTagName("account").count(), i18n("Loading template %1").arg(m_source.url()));
+ m_accountsRead = 0;
+
+ while(rc == true && !m_accounts.isNull() && m_accounts.isElement()) {
+ QDomElement childElement = m_accounts.toElement();
+ if(childElement.tagName() == "account"
+ && childElement.attribute("name") == "") {
+ ++m_accountsRead;
+ MyMoneyAccount parent;
+ switch(childElement.attribute("type").toUInt()) {
+ case MyMoneyAccount::Asset:
+ parent = file->asset();
+ break;
+ case MyMoneyAccount::Liability:
+ parent = file->liability();
+ break;
+ case MyMoneyAccount::Income:
+ parent = file->income();
+ break;
+ case MyMoneyAccount::Expense:
+ parent = file->expense();
+ break;
+ case MyMoneyAccount::Equity:
+ parent = file->equity();
+ break;
+
+ default:
+ KMessageBox::error(qApp->mainWidget(), QString("<p>")+i18n("Invalid top-level account type <b>%1</b> in template file <b>%2</b>!").arg(childElement.attribute("type")).arg(m_source.prettyURL()));
+ rc = false;
+ }
+
+ if(rc == true) {
+ rc = createAccounts(parent, childElement.firstChild());
+ }
+ } else {
+ rc = false;
+ }
+ m_accounts = m_accounts.nextSibling();
+ }
+ signalProgress(-1, -1);
+ return rc;
+}
+
+bool MyMoneyTemplate::createAccounts(MyMoneyAccount& parent, QDomNode account)
+{
+ bool rc = true;
+ while(rc == true && !account.isNull()) {
+ MyMoneyAccount acc;
+ if(account.isElement()) {
+ QDomElement accountElement = account.toElement();
+ if(accountElement.tagName() == "account") {
+ signalProgress(++m_accountsRead, 0);
+ QValueList<MyMoneyAccount> subAccountList;
+ QValueList<MyMoneyAccount>::ConstIterator it;
+ it = subAccountList.end();
+ if(!parent.accountList().isEmpty()) {
+ MyMoneyFile::instance()->accountList(subAccountList, parent.accountList());
+ for(it = subAccountList.begin(); it != subAccountList.end(); ++it) {
+ if((*it).name() == accountElement.attribute("name")) {
+ acc = *it;
+ break;
+ }
+ }
+ }
+ if(it == subAccountList.end()) {
+ // not found, we need to create it
+ acc.setName(accountElement.attribute("name"));
+ acc.setAccountType(static_cast<MyMoneyAccount::_accountTypeE>(accountElement.attribute("type").toUInt()));
+ setFlags(acc, account.firstChild());
+ try {
+ MyMoneyFile::instance()->addAccount(acc, parent);
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+ }
+ createAccounts(acc, account.firstChild());
+ }
+ }
+ account = account.nextSibling();
+ }
+ return rc;
+}
+
+bool MyMoneyTemplate::setFlags(MyMoneyAccount& acc, QDomNode flags)
+{
+ bool rc = true;
+ while(rc == true && !flags.isNull()) {
+ if(flags.isElement()) {
+ QDomElement flagElement = flags.toElement();
+ if(flagElement.tagName() == "flag") {
+ // make sure, we only store flags we know!
+ QString value = flagElement.attribute("name");
+ if(value == "Tax") {
+ acc.setValue(value.latin1(), "Yes");
+ } else {
+ KMessageBox::error(qApp->mainWidget(), QString("<p>")+i18n("Invalid flag type <b>%1</b> for account <b>%3</b> in template file <b>%2</b>!").arg(flagElement.attribute("name")).arg(m_source.prettyURL()).arg(acc.name()));
+ rc = false;
+ }
+ }
+ }
+ flags = flags.nextSibling();
+ }
+ return rc;
+}
+
+void MyMoneyTemplate::signalProgress(int current, int total, const QString& msg)
+{
+ if(m_progressCallback != 0)
+ (*m_progressCallback)(current, total, msg);
+}
+
+bool MyMoneyTemplate::exportTemplate(void(*callback)(int, int, const QString&))
+{
+ m_progressCallback = callback;
+
+ m_doc = QDomDocument("KMYMONEY-TEMPLATE");
+
+ QDomProcessingInstruction instruct = m_doc.createProcessingInstruction(QString("xml"), QString("version=\"1.0\" encoding=\"utf-8\""));
+ m_doc.appendChild(instruct);
+
+ QDomElement mainElement = m_doc.createElement("kmymoney-account-template");
+ m_doc.appendChild(mainElement);
+
+ QDomElement title = m_doc.createElement("title");
+ mainElement.appendChild(title);
+
+ QDomElement shortDesc = m_doc.createElement("shortdesc");
+ mainElement.appendChild(shortDesc);
+
+ QDomElement longDesc = m_doc.createElement("longdesc");
+ mainElement.appendChild(longDesc);
+
+ QDomElement accounts = m_doc.createElement("accounts");
+ mainElement.appendChild(accounts);
+
+ // addAccountStructure(accounts, MyMoneyFile::instance()->asset());
+ // addAccountStructure(accounts, MyMoneyFile::instance()->liability());
+ addAccountStructure(accounts, MyMoneyFile::instance()->income());
+ addAccountStructure(accounts, MyMoneyFile::instance()->expense());
+ // addAccountStructure(accounts, MyMoneyFile::instance()->equity());
+
+ return true;
+}
+
+bool MyMoneyTemplate::addAccountStructure(QDomElement& parent, const MyMoneyAccount& acc)
+{
+ QDomElement account = m_doc.createElement("account");
+ parent.appendChild(account);
+
+ if(MyMoneyFile::instance()->isStandardAccount(acc.id()))
+ account.setAttribute(QString("name"), QString());
+ else
+ account.setAttribute(QString("name"), acc.name());
+ account.setAttribute(QString("type"), acc.accountType());
+
+ // FIXME: add tax flag stuff
+
+ // any child accounts?
+ if(acc.accountList().count() > 0) {
+ QValueList<MyMoneyAccount> list;
+ MyMoneyFile::instance()->accountList(list, acc.accountList(), false);
+ QValueList<MyMoneyAccount>::Iterator it;
+ for(it = list.begin(); it != list.end(); ++it) {
+ addAccountStructure(account, *it);
+ }
+ }
+ return true;
+}
+
+bool MyMoneyTemplate::saveTemplate(const KURL& url)
+{
+ QString filename;
+
+ if(!url.isValid()) {
+ qDebug("Invalid template URL '%s'", url.url().latin1());
+ return false;
+ }
+
+ if(url.isLocalFile()) {
+ filename = url.path();
+ KSaveFile qfile(filename, 0600);
+ if(qfile.status() == 0) {
+ saveToLocalFile(qfile.file());
+ if(!qfile.close()) {
+ throw new MYMONEYEXCEPTION(i18n("Unable to write changes to '%1'").arg(filename));
+ }
+ } else {
+ throw new MYMONEYEXCEPTION(i18n("Unable to write changes to '%1'").arg(filename));
+ }
+ } else {
+ KTempFile tmpfile;
+ saveToLocalFile(tmpfile.file());
+ if(!KIO::NetAccess::upload(tmpfile.name(), url, NULL))
+ throw new MYMONEYEXCEPTION(i18n("Unable to upload to '%1'").arg(url.url()));
+ tmpfile.unlink();
+ }
+ return true;
+}
+
+bool MyMoneyTemplate::saveToLocalFile(QFile* qfile)
+{
+ QTextStream stream(qfile);
+ stream.setEncoding(QTextStream::UnicodeUTF8);
+ stream << m_doc.toString();
+
+ return true;
+}
diff --git a/kmymoney2/converter/mymoneytemplate.h b/kmymoney2/converter/mymoneytemplate.h
new file mode 100644
index 0000000..5c96b1f
--- /dev/null
+++ b/kmymoney2/converter/mymoneytemplate.h
@@ -0,0 +1,94 @@
+/***************************************************************************
+ mymoneytemplate.h - description
+ -------------------
+ begin : Sat Aug 14 2004
+ copyright : (C) 2004 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYTEMPLATE_H
+#define MYMONEYTEMPLATE_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qdom.h>
+class QFile;
+class QListViewItem;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kurl.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneyfile.h>
+
+/**
+ * @author Thomas Baumgart
+ */
+
+/**
+ * This class represents an account template handler. It is capable
+ * to read an XML formatted account template file and import it into
+ * the current engine. Also, it can save the current account structure
+ * of the engine to an XML formatted template file.
+ */
+class MyMoneyTemplate
+{
+public:
+ MyMoneyTemplate();
+ MyMoneyTemplate(const KURL& url);
+ ~MyMoneyTemplate();
+
+ bool loadTemplate(const KURL& url);
+ bool saveTemplate(const KURL& url);
+ bool importTemplate(void(*callback)(int, int, const QString&));
+ bool exportTemplate(void(*callback)(int, int, const QString&));
+
+ const QString& title(void) const { return m_title; }
+ const QString& shortDescription(void) const { return m_shortDesc; }
+ const QString& longDescription(void) const { return m_longDesc; }
+
+ void hierarchy(QMap<QString, QListViewItem*>& list);
+
+protected:
+ bool loadDescription(void);
+ bool createAccounts(MyMoneyAccount& parent, QDomNode account);
+ bool setFlags(MyMoneyAccount& acc, QDomNode flags);
+ bool saveToLocalFile(QFile* qfile);
+ bool addAccountStructure(QDomElement& parent, const MyMoneyAccount& acc);
+ bool hierarchy(QMap<QString, QListViewItem*>& list, const QString& parent, QDomNode account);
+
+ /**
+ * This method is used to update the progress information. It
+ * checks if an appropriate function is known and calls it.
+ *
+ * For a parameter description see KMyMoneyView::progressCallback().
+ */
+ void signalProgress(int current, int total, const QString& = "");
+
+private:
+ QDomDocument m_doc;
+ QDomNode m_accounts;
+ QString m_title;
+ QString m_shortDesc;
+ QString m_longDesc;
+ KURL m_source;
+ void (*m_progressCallback)(int, int, const QString&);
+ int m_accountsRead;
+};
+
+#endif
diff --git a/kmymoney2/converter/webpricequote.cpp b/kmymoney2/converter/webpricequote.cpp
new file mode 100644
index 0000000..de30963
--- /dev/null
+++ b/kmymoney2/converter/webpricequote.cpp
@@ -0,0 +1,1050 @@
+/***************************************************************************
+ webpricequote.cpp
+ -------------------
+ begin : Thu Dec 30 2004
+ copyright : (C) 2004 by Ace Jones
+ email : Ace Jones <acejones@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Headers
+
+#include <qfile.h>
+#include <qregexp.h>
+#include <qtextstream.h>
+#include <qprocess.h>
+
+// ----------------------------------------------------------------------------
+// KDE Headers
+
+#include <kio/netaccess.h>
+#include <kio/scheduler.h>
+#include <kurl.h>
+#include <klocale.h>
+#include <kdebug.h>
+#include <kapplication.h>
+#include <kconfig.h>
+#include <kglobal.h>
+#include <kstandarddirs.h>
+#include <kcalendarsystem.h>
+#include <ktempfile.h>
+
+// ----------------------------------------------------------------------------
+// Project Headers
+
+#include "../mymoney/mymoneyexception.h"
+#include "mymoneyqifprofile.h"
+#include "webpricequote.h"
+
+// define static members
+QString WebPriceQuote::m_financeQuoteScriptPath;
+QStringList WebPriceQuote::m_financeQuoteSources;
+
+QString * WebPriceQuote::lastErrorMsg;
+int WebPriceQuote::lastErrorCode = 0;
+
+WebPriceQuote::WebPriceQuote( QObject* _parent, const char* _name ):
+ QObject( _parent, _name )
+{
+ m_financeQuoteScriptPath =
+ KGlobal::dirs()->findResource("appdata", QString("misc/financequote.pl"));
+ connect(&m_filter,SIGNAL(processExited(const QString&)),this,SLOT(slotParseQuote(const QString&)));
+}
+
+WebPriceQuote::~WebPriceQuote()
+{
+}
+
+bool WebPriceQuote::launch( const QString& _symbol, const QString& _id, const QString& _sourcename )
+{
+ if (_sourcename.contains("Finance::Quote"))
+ return (launchFinanceQuote (_symbol, _id, _sourcename));
+ else
+ return (launchNative (_symbol, _id, _sourcename));
+}
+
+bool WebPriceQuote::launchNative( const QString& _symbol, const QString& _id, const QString& _sourcename ) {
+ bool result = true;
+ m_symbol = _symbol;
+ m_id = _id;
+
+// emit status(QString("(Debug) symbol=%1 id=%2...").arg(_symbol,_id));
+
+ // if we're running normally, with a UI, we can just get these the normal way,
+ // from the config file
+ if ( kapp )
+ {
+ QString sourcename = _sourcename;
+ if ( sourcename.isEmpty() )
+ sourcename = "Yahoo";
+
+ if ( quoteSources().contains(sourcename) )
+ m_source = WebPriceQuoteSource(sourcename);
+ else
+ emit error(QString("Source <%1> does not exist.").arg(sourcename));
+ }
+ // otherwise, if we have no kapp, we have no config. so we just get them from
+ // the defaults
+ else
+ {
+ if ( _sourcename.isEmpty() )
+ m_source = defaultQuoteSources()["Yahoo"];
+ else
+ m_source = defaultQuoteSources()[_sourcename];
+ }
+
+ KURL url;
+
+ // if the source has room for TWO symbols..
+ if ( m_source.m_url.contains("%2") )
+ {
+ // this is a two-symbol quote. split the symbol into two. valid symbol
+ // characters are: 0-9, A-Z and the dot. anything else is a separator
+ QRegExp splitrx("([0-9a-z\\.]+)[^a-z0-9]+([0-9a-z\\.]+)",false /*case sensitive*/);
+
+ // if we've truly found 2 symbols delimited this way...
+ if ( splitrx.search(m_symbol) != -1 )
+ url = KURL::fromPathOrURL(m_source.m_url.arg(splitrx.cap(1),splitrx.cap(2)));
+ else
+ kdDebug(2) << "WebPriceQuote::launch() did not find 2 symbols" << endl;
+ }
+ else
+ // a regular one-symbol quote
+ url = KURL::fromPathOrURL(m_source.m_url.arg(m_symbol));
+
+ // If we're running a non-interactive session (with no UI), we can't
+ // use KIO::NetAccess, so we have to get our web data the old-fashioned
+ // way... with 'wget'.
+ //
+ // Note that a 'non-interactive' session right now means only the test
+ // cases. Although in the future if KMM gains a non-UI mode, this would
+ // still be useful
+ if ( ! kapp && ! url.isLocalFile() )
+ url = KURL::fromPathOrURL("/usr/bin/wget -O - " + url.prettyURL());
+
+ if ( url.isLocalFile() )
+ {
+ emit status(QString("Executing %1...").arg(url.path()));
+
+ m_filter.clearArguments();
+ m_filter << QStringList::split(" ",url.path());
+ m_filter.setSymbol(m_symbol);
+
+ // if we're running non-interactive, we'll need to block.
+ // otherwise, just let us know when it's done.
+ KProcess::RunMode mode = KProcess::NotifyOnExit;
+ if ( ! kapp )
+ mode = KProcess::Block;
+
+ if(m_filter.start(mode, KProcess::All))
+ {
+ result = true;
+ m_filter.resume();
+ }
+ else
+ {
+ emit error(QString("Unable to launch: %1").arg(url.path()));
+ slotParseQuote(QString());
+ }
+ }
+ else
+ {
+ emit status(QString("Fetching URL %1...").arg(url.prettyURL()));
+
+ QString tmpFile;
+ if( download( url, tmpFile, NULL ) )
+ {
+ kdDebug(2) << "Downloaded " << tmpFile << endl;
+ QFile f(tmpFile);
+ if ( f.open( IO_ReadOnly ) )
+ {
+ result = true;
+ QString quote = QTextStream(&f).read();
+ f.close();
+ slotParseQuote(quote);
+ }
+ else
+ {
+ slotParseQuote(QString());
+ }
+ removeTempFile( tmpFile );
+ }
+ else
+ {
+ emit error(KIO::NetAccess::lastErrorString());
+ slotParseQuote(QString());
+ }
+ }
+ return result;
+}
+
+void WebPriceQuote::removeTempFile(const QString& tmpFile)
+{
+ if(tmpFile == m_tmpFile) {
+ unlink(tmpFile);
+ m_tmpFile = QString();
+ }
+}
+
+bool WebPriceQuote::download(const KURL& u, QString & target, QWidget* window)
+{
+ m_tmpFile = QString();
+
+ // the following code taken and adapted from KIO::NetAccess::download()
+ if (target.isEmpty())
+ {
+ KTempFile tmpFile;
+ target = tmpFile.name();
+ m_tmpFile = target;
+ }
+
+ KURL dest;
+ dest.setPath( target );
+
+
+ // the following code taken and adapted from KIO::NetAccess::filecopyInternal()
+ bJobOK = true; // success unless further error occurs
+
+ KIO::Scheduler::checkSlaveOnHold(true);
+ KIO::Job * job = KIO::file_copy( u, dest, -1, true, false, false );
+ job->setWindow (window);
+ job->addMetaData("cache", "reload"); // bypass cache
+ connect( job, SIGNAL( result (KIO::Job *) ),
+ this, SLOT( slotResult (KIO::Job *) ) );
+
+ enter_loop();
+ return bJobOK;
+
+}
+
+// The following parts are copied and adjusted from KIO::NetAccess
+
+// If a troll sees this, he kills me
+void qt_enter_modal( QWidget *widget );
+void qt_leave_modal( QWidget *widget );
+
+void WebPriceQuote::enter_loop(void)
+{
+ QWidget dummy(0,0,WType_Dialog | WShowModal);
+ dummy.setFocusPolicy( QWidget::NoFocus );
+ qt_enter_modal(&dummy);
+ qApp->enter_loop();
+ qt_leave_modal(&dummy);
+}
+
+void WebPriceQuote::slotResult( KIO::Job * job )
+{
+ lastErrorCode = job->error();
+ bJobOK = !job->error();
+ if ( !bJobOK )
+ {
+ if ( !lastErrorMsg )
+ lastErrorMsg = new QString;
+ *lastErrorMsg = job->errorString();
+ }
+
+ qApp->exit_loop();
+}
+// The above parts are copied and adjusted from KIO::NetAccess
+
+bool WebPriceQuote::launchFinanceQuote ( const QString& _symbol, const QString& _id,
+ const QString& _sourcename ) {
+ bool result = true;
+ m_symbol = _symbol;
+ m_id = _id;
+ QString FQSource = _sourcename.section (" ", 1);
+ m_source = WebPriceQuoteSource (_sourcename, m_financeQuoteScriptPath,
+ "\"([^,\"]*)\",.*", // symbol regexp
+ "[^,]*,[^,]*,\"([^\"]*)\"", // price regexp
+ "[^,]*,([^,]*),.*", // date regexp
+ "%y-%m-%d"); // date format
+
+ //emit status(QString("(Debug) symbol=%1 id=%2...").arg(_symbol,_id));
+
+
+ m_filter.clearArguments();
+ m_filter << "perl" << m_financeQuoteScriptPath << FQSource << KProcess::quote(_symbol);
+ m_filter.setUseShell(true);
+ m_filter.setSymbol(m_symbol);
+ emit status(QString("Executing %1 %2 %3...").arg(m_financeQuoteScriptPath).arg(FQSource).arg(_symbol));
+
+ // if we're running non-interactive, we'll need to block.
+ // otherwise, just let us know when it's done.
+ KProcess::RunMode mode = KProcess::NotifyOnExit;
+ if ( ! kapp )
+ mode = KProcess::Block;
+
+ if(m_filter.start(mode, KProcess::All))
+ {
+ result = true;
+ m_filter.resume();
+ }
+ else
+ {
+ emit error(QString("Unable to launch: %1").arg(m_financeQuoteScriptPath));
+ slotParseQuote(QString());
+ }
+
+ return result;
+}
+
+void WebPriceQuote::slotParseQuote(const QString& _quotedata)
+{
+ QString quotedata = _quotedata;
+ bool gotprice = false;
+ bool gotdate = false;
+
+// kdDebug(2) << "WebPriceQuote::slotParseQuote( " << _quotedata << " ) " << endl;
+
+ if ( ! quotedata.isEmpty() )
+ {
+ if(!m_source.m_skipStripping) {
+ //
+ // First, remove extranous non-data elements
+ //
+
+ // HTML tags
+ quotedata.remove(QRegExp("<[^>]*>"));
+
+ // &...;'s
+ quotedata.replace(QRegExp("&\\w+;")," ");
+
+ // Extra white space
+ quotedata = quotedata.simplifyWhiteSpace();
+ }
+
+#if KMM_DEBUG
+ // Enable to get a look at the data coming back from the source after it's stripped
+ QFile file("stripped.txt");
+ if ( file.open( IO_WriteOnly ) )
+ {
+ QTextStream( &file ) << quotedata;
+ file.close();
+ }
+#endif
+
+ QRegExp symbolRegExp(m_source.m_sym);
+ QRegExp dateRegExp(m_source.m_date);
+ QRegExp priceRegExp(m_source.m_price);
+
+ if( symbolRegExp.search(quotedata) > -1)
+ emit status(i18n("Symbol found: %1").arg(symbolRegExp.cap(1)));
+
+ if(priceRegExp.search(quotedata)> -1)
+ {
+ gotprice = true;
+
+ // Deal with european quotes that come back as X.XXX,XX or XX,XXX
+ //
+ // We will make the assumption that ALL prices have a decimal separator.
+ // So "1,000" always means 1.0, not 1000.0.
+ //
+ // Remove all non-digits from the price string except the last one, and
+ // set the last one to a period.
+ QString pricestr = priceRegExp.cap(1);
+
+ int pos = pricestr.findRev(QRegExp("\\D"));
+ if ( pos > 0 )
+ {
+ pricestr[pos] = '.';
+ pos = pricestr.findRev(QRegExp("\\D"),pos-1);
+ }
+ while ( pos > 0 )
+ {
+ pricestr.remove(pos,1);
+ pos = pricestr.findRev(QRegExp("\\D"),pos);
+ }
+
+ m_price = pricestr.toDouble();
+ emit status(i18n("Price found: %1 (%2)").arg(pricestr).arg(m_price));
+ }
+
+ if(dateRegExp.search(quotedata) > -1)
+ {
+ QString datestr = dateRegExp.cap(1);
+
+ MyMoneyDateFormat dateparse(m_source.m_dateformat);
+ try
+ {
+ m_date = dateparse.convertString( datestr,false /*strict*/ );
+ gotdate = true;
+ emit status(i18n("Date found: %1").arg(m_date.toString()));;
+ }
+ catch (MyMoneyException* e)
+ {
+ // emit error(i18n("Unable to parse date %1 using format %2: %3").arg(datestr,dateparse.format(),e->what()));
+ m_date = QDate::currentDate();
+ gotdate = true;
+ delete e;
+ }
+ }
+
+ if ( gotprice && gotdate )
+ {
+ emit quote( m_id, m_symbol, m_date, m_price );
+ }
+ else
+ {
+ emit error(i18n("Unable to update price for %1").arg(m_symbol));
+ emit failed( m_id, m_symbol );
+ }
+ }
+ else
+ {
+ emit error(i18n("Unable to update price for %1").arg(m_symbol));
+ emit failed( m_id, m_symbol );
+ }
+}
+
+QMap<QString,WebPriceQuoteSource> WebPriceQuote::defaultQuoteSources(void)
+{
+ QMap<QString,WebPriceQuoteSource> result;
+
+ result["Yahoo"] = WebPriceQuoteSource("Yahoo",
+ "http://finance.yahoo.com/d/quotes.csv?s=%1&f=sl1d1",
+ "\"([^,\"]*)\",.*", // symbolregexp
+ "[^,]*,([^,]*),.*", // priceregexp
+ "[^,]*,[^,]*,\"([^\"]*)\"", // dateregexp
+ "%m %d %y" // dateformat
+ );
+
+ result["Yahoo Currency"] = WebPriceQuoteSource("Yahoo Currency",
+ "http://finance.yahoo.com/d/quotes.csv?s=%1%2=X&f=sl1d1",
+ "\"([^,\"]*)\",.*", // symbolregexp
+ "[^,]*,([^,]*),.*", // priceregexp
+ "[^,]*,[^,]*,\"([^\"]*)\"", // dateregexp
+ "%m %d %y" // dateformat
+ );
+
+ // 2009-08-20 Yahoo UK has no quotes and has comma separators
+ // sl1d1 format for Yahoo UK doesn't seem to give a date ever
+ // sl1d3 gives US locale time (9:99pm) and date (mm/dd/yyyy)
+ result["Yahoo UK"] = WebPriceQuoteSource("Yahoo UK",
+ "http://uk.finance.yahoo.com/d/quotes.csv?s=%1&f=sl1d3",
+ "^([^,]*),.*", // symbolregexp
+ "^[^,]*,([^,]*),.*", // priceregexp
+ "^[^,]*,[^,]*,(.*)", // dateregexp
+ "%m/%d/%y" // dateformat
+ );
+
+ // sl1d1 format for Yahoo France doesn't seem to give a date ever
+ // sl1d3 gives us time (99h99) and date
+ result["Yahoo France"] = WebPriceQuoteSource("Yahoo France",
+ "http://fr.finance.yahoo.com/d/quotes.csv?s=%1&f=sl1d3",
+ "([^;]*).*", // symbolregexp
+ "[^;]*.([^;]*),*", // priceregexp
+ "[^;]*.[^;]*...h...([^;]*)", // dateregexp
+ "%d/%m/%y" // dateformat
+ );
+
+ result["Globe & Mail"] = WebPriceQuoteSource("Globe & Mail",
+ "http://globefunddb.theglobeandmail.com/gishome/plsql/gis.price_history?pi_fund_id=%1",
+ QString(), // symbolregexp
+ "Reinvestment Price \\w+ \\d+, \\d+ (\\d+\\.\\d+)", // priceregexp
+ "Reinvestment Price (\\w+ \\d+, \\d+)", // dateregexp
+ "%m %d %y" // dateformat
+ );
+
+ result["MSN.CA"] = WebPriceQuoteSource("MSN.CA",
+ "http://ca.moneycentral.msn.com/investor/quotes/quotes.asp?symbol=%1",
+ QString(), // symbolregexp
+ "Net Asset Value (\\d+\\.\\d+)", // priceregexp
+ "NAV update (\\d+\\D+\\d+\\D+\\d+)", // dateregexp
+ "%d %m %y" // dateformat
+ );
+ // Finanztreff (replaces VWD.DE) and boerseonline supplied by Micahel Zimmerman
+ result["Finanztreff"] = WebPriceQuoteSource("Finanztreff",
+ "http://finanztreff.de/kurse_einzelkurs_detail.htn?u=100&i=%1",
+ QString(), // symbolregexp
+ "([0-9]+,\\d+).+Gattung:Fonds", // priceregexp
+ "\\).(\\d+\\D+\\d+\\D+\\d+)", // dateregexp (doesn't work; date in chart
+ "%d.%m.%y" // dateformat
+ );
+
+ result["boerseonline"] = WebPriceQuoteSource("boerseonline",
+ "http://www.boerse-online.de/tools/boerse/einzelkurs_kurse.htm?&s=%1",
+ QString(), // symbolregexp
+ "Akt\\. Kurs.(\\d+,\\d\\d)", // priceregexp
+ "Datum.(\\d+\\.\\d+\\.\\d+)", // dateregexp (doesn't work; date in chart
+ "%d.%m.%y" // dateformat
+ );
+
+ // The following two price sources were contributed by
+ // Marc Zahnlecker <tf2k@users.sourceforge.net>
+
+ result["Wallstreet-Online.DE (Default)"] = WebPriceQuoteSource("Wallstreet-Online.DE (Default)",
+ "http://www.wallstreet-online.de/si/?k=%1&spid=ws",
+ "Symbol:(\\w+)", // symbolregexp
+ "Letzter Kurs: ([0-9.]+,\\d+)", // priceregexp
+ ", (\\d+\\D+\\d+\\D+\\d+)", // dateregexp
+ "%d %m %y" // dateformat
+ );
+
+ // This quote source provided by Peter Lord
+ // The trading symbol will normally be the SEDOL (see wikipedia) but
+ // the flexibility presently (1/2008) in the code will allow use of
+ // the ISIN or MEXID (FT specific) codes
+ result["Financial Times UK Funds"] = WebPriceQuoteSource("Financial Times UK Funds",
+ "http://funds.ft.com/funds/simpleSearch.do?searchArea=%&search=%1",
+ "SEDOL[\\ ]*(\\d+.\\d+)", // symbol regexp
+ "\\(GBX\\)[\\ ]*([0-9,]*.\\d+)[\\ ]*", // price regexp
+ "Valuation date:[\\ ]*(\\d+/\\d+/\\d+)", // date regexp
+ "%d/%m/%y" // date format
+ );
+
+ // This quote source provided by Danny Scott
+ result["Yahoo Canada"] = WebPriceQuoteSource("Yahoo Canada",
+ "http://ca.finance.yahoo.com/q?s=%1",
+ "%1", // symbol regexp
+ "Last Trade: (\\d+\\.\\d+)", // price regexp
+ "day, (.\\D+\\d+\\D+\\d+)", // date regexp
+ "%m %d %y" // date format
+ );
+
+ // (tf2k) The "mpid" is I think the market place id. In this case five
+ // stands for Hamburg.
+ //
+ // Here the id for several market places: 2 Frankfurt, 3 Berlin, 4
+ // Düsseldorf, 5 Hamburg, 6 München/Munich, 7 Hannover, 9 Stuttgart, 10
+ // Xetra, 32 NASDAQ, 36 NYSE
+
+ result["Wallstreet-Online.DE (Hamburg)"] = WebPriceQuoteSource("Wallstreet-Online.DE (Hamburg)",
+ "http://fonds.wallstreet-online.de/si/?k=%1&spid=ws&mpid=5",
+ "Symbol:(\\w+)", // symbolregexp
+ "Fonds \\(EUR\\) ([0-9.]+,\\d+)", // priceregexp
+ ", (\\d+\\D+\\d+\\D+\\d+)", // dateregexp
+ "%d %m %y" // dateformat
+ );
+
+ // The following price quote was contributed by
+ // Piotr Adacha <piotr.adacha@googlemail.com>
+
+ // I would like to post new Online Query Settings for KMyMoney. This set is
+ // suitable to query stooq.com service, providing quotes for stocks, futures,
+ // mutual funds and other financial instruments from Polish Gielda Papierow
+ // Wartosciowych (GPW). Unfortunately, none of well-known international
+ // services provide quotes for this market (biggest one in central and eastern
+ // Europe), thus, I think it could be helpful for Polish users of KMyMoney (and
+ // I am one of them for almost a year).
+
+ result["Gielda Papierow Wartosciowych (GPW)"] = WebPriceQuoteSource("Gielda Papierow Wartosciowych (GPW)",
+ "http://stooq.com/q/?s=%1",
+ QString(), // symbol regexp
+ "Kurs.*(\\d+\\.\\d+).*Data", // price regexp
+ "(\\d{4,4}-\\d{2,2}-\\d{2,2})", // date regexp
+ "%y %m %d" // date format
+ );
+
+ // The following price quote is for getting prices of different funds
+ // at OMX Baltic market.
+ result["OMX Baltic funds"] = WebPriceQuoteSource("OMX Baltic funds",
+ "http://www.baltic.omxgroup.com/market/?pg=nontradeddetails&currency=0&instrument=%1",
+ QString(), // symbolregexp
+ "NAV (\\d+,\\d+)", // priceregexp
+ "Kpv (\\d+.\\d+.\\d+)", // dateregexp
+ "%d.%m.%y" // dateformat
+ );
+
+ // The following price quote was contributed by
+ // Peter Hargreaves <pete.h@pdh-online.info>
+ // The original posting can be found here:
+ // http://sourceforge.net/mailarchive/message.php?msg_name=200806060854.11682.pete.h%40pdh-online.info
+
+ // I have PEP and ISA accounts which I invest in Funds with Barclays
+ // Stockbrokers. They give me Fund data via Financial Express:
+ //
+ // https://webfund6.financialexpress.net/Clients/Barclays/default.aspx
+ //
+ // A typical Fund Factsheet is:
+ //
+ // https://webfund6.financialexpress.net/Clients/Barclays/search_factsheet_summary.aspx?code=0585239
+ //
+ // On the Factsheet to identify the fund you can see ISIN Code GB0005852396.
+ // In the url, this code is shortened by loosing the first four and last
+ // characters.
+ //
+ // Update:
+ //
+ // Nick Elliot has contributed a modified regular expression to cope with values presented
+ // in pounds as well as those presented in pence. The source can be found here:
+ // http://forum.kde.org/update-stock-and-currency-prices-t-32049.html
+
+ result["Financial Express"] = WebPriceQuoteSource("Financial Express",
+ "https://webfund6.financialexpress.net/Clients/Barclays/search_factsheet_summary.aspx?code=%1",
+ "ISIN Code[^G]*(GB..........).*", // symbolregexp
+ "Current Market Information[^0-9]*([0-9,\\.]+).*", // priceregexp
+ "Price Date[^0-9]*(../../....).*", // dateregexp
+ "%d/%m/%y" // dateformat
+ );
+
+ return result;
+}
+
+QStringList WebPriceQuote::quoteSources (const _quoteSystemE _system) {
+ if (_system == Native)
+ return (quoteSourcesNative());
+ else
+ return (quoteSourcesFinanceQuote());
+}
+
+QStringList WebPriceQuote::quoteSourcesNative()
+{
+ KConfig *kconfig = KGlobal::config();
+ QStringList groups = kconfig->groupList();
+
+ QStringList::Iterator it;
+ QRegExp onlineQuoteSource(QString("^Online-Quote-Source-(.*)$"));
+
+ // get rid of all 'non online quote source' entries
+ for(it = groups.begin(); it != groups.end(); it = groups.remove(it)) {
+ if(onlineQuoteSource.search(*it) >= 0) {
+ // Insert the name part
+ groups.insert(it, onlineQuoteSource.cap(1));
+ }
+ }
+
+ // if the user has the OLD quote source defined, now is the
+ // time to remove that entry and convert it to the new system.
+ if ( ! groups.count() && kconfig->hasGroup("Online Quotes Options") )
+ {
+ kconfig->setGroup("Online Quotes Options");
+ QString url(kconfig->readEntry("URL","http://finance.yahoo.com/d/quotes.csv?s=%1&f=sl1d1"));
+ QString symbolRegExp(kconfig->readEntry("SymbolRegex","\"([^,\"]*)\",.*"));
+ QString priceRegExp(kconfig->readEntry("PriceRegex","[^,]*,([^,]*),.*"));
+ QString dateRegExp(kconfig->readEntry("DateRegex","[^,]*,[^,]*,\"([^\"]*)\""));
+ kconfig->deleteGroup("Online Quotes Options");
+
+ groups += "Old Source";
+ kconfig->setGroup(QString("Online-Quote-Source-%1").arg("Old Source"));
+ kconfig->writeEntry("URL", url);
+ kconfig->writeEntry("SymbolRegex", symbolRegExp);
+ kconfig->writeEntry("PriceRegex",priceRegExp);
+ kconfig->writeEntry("DateRegex", dateRegExp);
+ kconfig->writeEntry("DateFormatRegex", "%m %d %y");
+ kconfig->sync();
+ }
+
+ // Set up each of the default sources. These are done piecemeal so that
+ // when we add a new source, it's automatically picked up.
+ QMap<QString,WebPriceQuoteSource> defaults = defaultQuoteSources();
+ QMap<QString,WebPriceQuoteSource>::const_iterator it_source = defaults.begin();
+ while ( it_source != defaults.end() )
+ {
+ if ( ! groups.contains( (*it_source).m_name ) )
+ {
+ groups += (*it_source).m_name;
+ (*it_source).write();
+ kconfig->sync();
+ }
+ ++it_source;
+ }
+
+ return groups;
+}
+
+QStringList WebPriceQuote::quoteSourcesFinanceQuote()
+{
+ if (m_financeQuoteSources.empty()) { // run the process one time only
+ FinanceQuoteProcess getList;
+ m_financeQuoteScriptPath =
+ KGlobal::dirs()->findResource("appdata", QString("misc/financequote.pl"));
+ getList.launch( m_financeQuoteScriptPath );
+ while (!getList.isFinished()) {
+ qApp->processEvents();
+ }
+ m_financeQuoteSources = getList.getSourceList();
+ }
+ return (m_financeQuoteSources);
+}
+
+//
+// Helper class to load/save an individual source
+//
+
+WebPriceQuoteSource::WebPriceQuoteSource(const QString& name, const QString& url, const QString& sym, const QString& price, const QString& date, const QString& dateformat):
+ m_name(name),
+ m_url(url),
+ m_sym(sym),
+ m_price(price),
+ m_date(date),
+ m_dateformat(dateformat)
+{
+}
+
+WebPriceQuoteSource::WebPriceQuoteSource(const QString& name)
+{
+ m_name = name;
+ KConfig *kconfig = KGlobal::config();
+ kconfig->setGroup(QString("Online-Quote-Source-%1").arg(m_name));
+ m_sym = kconfig->readEntry("SymbolRegex");
+ m_date = kconfig->readEntry("DateRegex");
+ m_dateformat = kconfig->readEntry("DateFormatRegex","%m %d %y");
+ m_price = kconfig->readEntry("PriceRegex");
+ m_url = kconfig->readEntry("URL");
+ m_skipStripping = kconfig->readBoolEntry("SkipStripping", false);
+}
+
+void WebPriceQuoteSource::write(void) const
+{
+ KConfig *kconfig = KGlobal::config();
+ kconfig->setGroup(QString("Online-Quote-Source-%1").arg(m_name));
+ kconfig->writeEntry("URL", m_url);
+ kconfig->writeEntry("PriceRegex", m_price);
+ kconfig->writeEntry("DateRegex", m_date);
+ kconfig->writeEntry("DateFormatRegex", m_dateformat);
+ kconfig->writeEntry("SymbolRegex", m_sym);
+ if(m_skipStripping)
+ kconfig->writeEntry("SkipStripping", m_skipStripping);
+ else
+ kconfig->deleteEntry("SkipStripping");
+}
+
+void WebPriceQuoteSource::rename(const QString& name)
+{
+ remove();
+ m_name = name;
+ write();
+}
+
+void WebPriceQuoteSource::remove(void) const
+{
+ KConfig *kconfig = KGlobal::config();
+ kconfig->deleteGroup(QString("Online-Quote-Source-%1").arg(m_name));
+}
+
+//
+// Helper class to babysit the KProcess used for running the local script in that case
+//
+
+WebPriceQuoteProcess::WebPriceQuoteProcess(void)
+{
+ connect(this, SIGNAL(receivedStdout(KProcess*, char*, int)), this, SLOT(slotReceivedDataFromFilter(KProcess*, char*, int)));
+ connect(this, SIGNAL(processExited(KProcess*)), this, SLOT(slotProcessExited(KProcess*)));
+}
+
+void WebPriceQuoteProcess::slotReceivedDataFromFilter(KProcess* /*_process*/, char* _pcbuffer, int _nbufferlen)
+{
+ QByteArray data;
+ data.duplicate(_pcbuffer, _nbufferlen);
+
+// kdDebug(2) << "WebPriceQuoteProcess::slotReceivedDataFromFilter(): " << QString(data) << endl;
+ m_string += QString(data);
+}
+
+void WebPriceQuoteProcess::slotProcessExited(KProcess*)
+{
+// kdDebug(2) << "WebPriceQuoteProcess::slotProcessExited()" << endl;
+ emit processExited(m_string);
+ m_string.truncate(0);
+}
+
+//
+// Helper class to babysit the KProcess used for running the Finance Quote sources script
+//
+
+FinanceQuoteProcess::FinanceQuoteProcess(void)
+{
+ m_isDone = false;
+ m_string = "";
+ m_fqNames["aex"] = "AEX";
+ m_fqNames["aex_futures"] = "AEX Futures";
+ m_fqNames["aex_options"] = "AEX Options";
+ m_fqNames["amfiindia"] = "AMFI India";
+ m_fqNames["asegr"] = "ASE";
+ m_fqNames["asia"] = "Asia (Yahoo, ...)";
+ m_fqNames["asx"] = "ASX";
+ m_fqNames["australia"] = "Australia (ASX, Yahoo, ...)";
+ m_fqNames["bmonesbittburns"] = "BMO NesbittBurns";
+ m_fqNames["brasil"] = "Brasil (Yahoo, ...)";
+ m_fqNames["canada"] = "Canada (Yahoo, ...)";
+ m_fqNames["canadamutual"] = "Canada Mutual (Fund Library, ...)";
+ m_fqNames["deka"] = "Deka Investments";
+ m_fqNames["dutch"] = "Dutch (AEX, ...)";
+ m_fqNames["dwsfunds"] = "DWS";
+ m_fqNames["europe"] = "Europe (Yahoo, ...)";
+ m_fqNames["fidelity"] = "Fidelity (Fidelity, ...)";
+ m_fqNames["fidelity_direct"] = "Fidelity Direct";
+ m_fqNames["financecanada"] = "Finance Canada";
+ m_fqNames["ftportfolios"] = "First Trust (First Trust, ...)";
+ m_fqNames["ftportfolios_direct"] = "First Trust Portfolios";
+ m_fqNames["fundlibrary"] = "Fund Library";
+ m_fqNames["greece"] = "Greece (ASE, ...)";
+ m_fqNames["indiamutual"] = "India Mutual (AMFI, ...)";
+ m_fqNames["maninv"] = "Man Investments";
+ m_fqNames["fool"] = "Motley Fool";
+ m_fqNames["nasdaq"] = "Nasdaq (Yahoo, ...)";
+ m_fqNames["nz"] = "New Zealand (Yahoo, ...)";
+ m_fqNames["nyse"] = "NYSE (Yahoo, ...)";
+ m_fqNames["nzx"] = "NZX";
+ m_fqNames["platinum"] = "Platinum Asset Management";
+ m_fqNames["seb_funds"] = "SEB";
+ m_fqNames["sharenet"] = "Sharenet";
+ m_fqNames["za"] = "South Africa (Sharenet, ...)";
+ m_fqNames["troweprice_direct"] = "T. Rowe Price";
+ m_fqNames["troweprice"] = "T. Rowe Price";
+ m_fqNames["tdefunds"] = "TD Efunds";
+ m_fqNames["tdwaterhouse"] = "TD Waterhouse Canada";
+ m_fqNames["tiaacref"] = "TIAA-CREF";
+ m_fqNames["trustnet"] = "Trustnet";
+ m_fqNames["uk_unit_trusts"] = "U.K. Unit Trusts";
+ m_fqNames["unionfunds"] = "Union Investments";
+ m_fqNames["tsp"] = "US Govt. Thrift Savings Plan";
+ m_fqNames["usfedbonds"] = "US Treasury Bonds";
+ m_fqNames["usa"] = "USA (Yahoo, Fool ...)";
+ m_fqNames["vanguard"] = "Vanguard";
+ m_fqNames["vwd"] = "VWD";
+ m_fqNames["yahoo"] = "Yahoo";
+ m_fqNames["yahoo_asia"] = "Yahoo Asia";
+ m_fqNames["yahoo_australia"] = "Yahoo Australia";
+ m_fqNames["yahoo_brasil"] = "Yahoo Brasil";
+ m_fqNames["yahoo_europe"] = "Yahoo Europe";
+ m_fqNames["yahoo_nz"] = "Yahoo New Zealand";
+ m_fqNames["zifunds"] = "Zuerich Investments";
+ connect(this, SIGNAL(receivedStdout(KProcess*, char*, int)), this, SLOT(slotReceivedDataFromFilter(KProcess*, char*, int)));
+ connect(this, SIGNAL(processExited(KProcess*)), this, SLOT(slotProcessExited(KProcess*)));
+}
+
+void FinanceQuoteProcess::slotReceivedDataFromFilter(KProcess* /*_process*/, char* _pcbuffer, int _nbufferlen)
+{
+ QByteArray data;
+ data.duplicate(_pcbuffer, _nbufferlen);
+
+// kdDebug(2) << "WebPriceQuoteProcess::slotReceivedDataFromFilter(): " << QString(data) << endl;
+ m_string += QString(data);
+}
+
+void FinanceQuoteProcess::slotProcessExited(KProcess*)
+{
+// kdDebug(2) << "WebPriceQuoteProcess::slotProcessExited()" << endl;
+ m_isDone = true;
+}
+
+void FinanceQuoteProcess::launch (const QString& scriptPath) {
+ clearArguments();
+ arguments.append(QCString("perl"));
+ arguments.append (QCString(scriptPath));
+ arguments.append (QCString("-l"));
+ if (!start(KProcess::NotifyOnExit, KProcess::Stdout)) qFatal ("Unable to start FQ script");
+ return;
+}
+
+QStringList FinanceQuoteProcess::getSourceList() {
+ QStringList raw = QStringList::split(0x0A, m_string);
+ QStringList sources;
+ QStringList::iterator it;
+ for (it = raw.begin(); it != raw.end(); ++it) {
+ if (m_fqNames[*it].isEmpty()) sources.append(*it);
+ else sources.append(m_fqNames[*it]);
+ }
+ sources.sort();
+ return (sources);
+}
+
+const QString FinanceQuoteProcess::crypticName(const QString& niceName) {
+ QString ret (niceName);
+ fqNameMap::iterator it;
+ for (it = m_fqNames.begin(); it != m_fqNames.end(); ++it) {
+ if (niceName == it.data()) {
+ ret = it.key();
+ break;
+ }
+ }
+ return (ret);
+}
+
+const QString FinanceQuoteProcess::niceName(const QString& crypticName) {
+ QString ret (m_fqNames[crypticName]);
+ if (ret.isEmpty()) ret = crypticName;
+ return (ret);
+}
+//
+// Universal date converter
+//
+
+// In 'strict' mode, this is designed to be compatable with the QIF profile date
+// converter. However, that converter deals with the concept of an apostrophe
+// format in a way I don't understand. So for the moment, they are 99%
+// compatable, waiting on that issue. (acejones)
+
+QDate MyMoneyDateFormat::convertString(const QString& _in, bool _strict, unsigned _centurymidpoint) const
+{
+ //
+ // Break date format string into component parts
+ //
+
+ QRegExp formatrex("%([mdy]+)(\\W+)%([mdy]+)(\\W+)%([mdy]+)",false /* case sensitive */);
+ if ( formatrex.search(m_format) == -1 )
+ {
+ throw new MYMONEYEXCEPTION("Invalid format string");
+ }
+
+ QStringList formatParts;
+ formatParts += formatrex.cap(1);
+ formatParts += formatrex.cap(3);
+ formatParts += formatrex.cap(5);
+
+ QStringList formatDelimiters;
+ formatDelimiters += formatrex.cap(2);
+ formatDelimiters += formatrex.cap(4);
+
+ //
+ // Break input string up into component parts,
+ // using the delimiters found in the format string
+ //
+
+ QRegExp inputrex;
+ inputrex.setCaseSensitive(false);
+
+ // strict mode means we must enforce the delimiters as specified in the
+ // format. non-strict allows any delimiters
+ if ( _strict )
+ inputrex.setPattern(QString("(\\w+)%1(\\w+)%2(\\w+)").arg(formatDelimiters[0],formatDelimiters[1]));
+ else
+ inputrex.setPattern("(\\w+)\\W+(\\w+)\\W+(\\w+)");
+
+ if ( inputrex.search(_in) == -1 )
+ {
+ throw new MYMONEYEXCEPTION("Invalid input string");
+ }
+
+ QStringList scannedParts;
+ scannedParts += inputrex.cap(1).lower();
+ scannedParts += inputrex.cap(2).lower();
+ scannedParts += inputrex.cap(3).lower();
+
+ //
+ // Convert the scanned parts into actual date components
+ //
+
+ unsigned day = 0, month = 0, year = 0;
+ bool ok;
+ QRegExp digitrex("(\\d+)");
+ QStringList::const_iterator it_scanned = scannedParts.begin();
+ QStringList::const_iterator it_format = formatParts.begin();
+ while ( it_scanned != scannedParts.end() )
+ {
+ switch ( (*it_format)[0] )
+ {
+ case 'd':
+ // remove any extraneous non-digits (e.g. read "3rd" as 3)
+ ok = false;
+ if ( digitrex.search(*it_scanned) != -1 )
+ day = digitrex.cap(1).toUInt(&ok);
+ if ( !ok || day > 31 )
+ throw new MYMONEYEXCEPTION(QString("Invalid day entry: %1").arg(*it_scanned));
+ break;
+ case 'm':
+ month = (*it_scanned).toUInt(&ok);
+ if ( !ok )
+ {
+ // maybe it's a textual date
+ unsigned i = 1;
+ while ( i <= 12 )
+ {
+ if(KGlobal::locale()->calendar()->monthName(i, 2000, true).lower() == *it_scanned
+ || KGlobal::locale()->calendar()->monthName(i, 2000, false).lower() == *it_scanned)
+ month = i;
+ ++i;
+ }
+ }
+
+ if ( month < 1 || month > 12 )
+ throw new MYMONEYEXCEPTION(QString("Invalid month entry: %1").arg(*it_scanned));
+
+ break;
+ case 'y':
+ if ( _strict && (*it_scanned).length() != (*it_format).length())
+ throw new MYMONEYEXCEPTION(QString("Length of year (%1) does not match expected length (%2).")
+ .arg(*it_scanned,*it_format));
+
+ year = (*it_scanned).toUInt(&ok);
+
+ if (!ok)
+ throw new MYMONEYEXCEPTION(QString("Invalid year entry: %1").arg(*it_scanned));
+
+ //
+ // 2-digit year case
+ //
+ // this algorithm will pick a year within +/- 50 years of the
+ // centurymidpoint parameter. i.e. if the midpoint is 2000,
+ // then 0-49 will become 2000-2049, and 50-99 will become 1950-1999
+ if ( year < 100 )
+ {
+ unsigned centuryend = _centurymidpoint + 50;
+ unsigned centurybegin = _centurymidpoint - 50;
+
+ if ( year < centuryend % 100 )
+ year += 100;
+ year += centurybegin - centurybegin % 100;
+ }
+
+ if ( year < 1900 )
+ throw new MYMONEYEXCEPTION(QString("Invalid year (%1)").arg(year));
+
+ break;
+ default:
+ throw new MYMONEYEXCEPTION("Invalid format character");
+ }
+
+ ++it_scanned;
+ ++it_format;
+ }
+
+ QDate result(year,month,day);
+ if ( ! result.isValid() )
+ throw new MYMONEYEXCEPTION(QString("Invalid date (yr%1 mo%2 dy%3)").arg(year).arg(month).arg(day));
+
+ return result;
+}
+
+//
+// Unit test helpers
+//
+
+convertertest::QuoteReceiver::QuoteReceiver(WebPriceQuote* q, QObject* parent, const char *name) :
+ QObject(parent,name)
+{
+ connect(q,SIGNAL(quote(const QString&,const QDate&, const double&)),
+ this,SLOT(slotGetQuote(const QString&,const QDate&, const double&)));
+ connect(q,SIGNAL(status(const QString&)),
+ this,SLOT(slotStatus(const QString&)));
+ connect(q,SIGNAL(error(const QString&)),
+ this,SLOT(slotError(const QString&)));
+}
+
+convertertest::QuoteReceiver::~QuoteReceiver()
+{
+}
+
+void convertertest::QuoteReceiver::slotGetQuote(const QString&,const QDate& d, const double& m)
+{
+// kdDebug(2) << "test::QuoteReceiver::slotGetQuote( , " << d << " , " << m.toString() << " )" << endl;
+
+ m_price = MyMoneyMoney(m);
+ m_date = d;
+}
+void convertertest::QuoteReceiver::slotStatus(const QString& msg)
+{
+// kdDebug(2) << "test::QuoteReceiver::slotStatus( " << msg << " )" << endl;
+
+ m_statuses += msg;
+}
+void convertertest::QuoteReceiver::slotError(const QString& msg)
+{
+// kdDebug(2) << "test::QuoteReceiver::slotError( " << msg << " )" << endl;
+
+ m_errors += msg;
+}
+
+// vim:cin:si:ai:et:ts=2:sw=2:
+
+#include "webpricequote.moc"
diff --git a/kmymoney2/converter/webpricequote.h b/kmymoney2/converter/webpricequote.h
new file mode 100644
index 0000000..e25dfb8
--- /dev/null
+++ b/kmymoney2/converter/webpricequote.h
@@ -0,0 +1,252 @@
+/***************************************************************************
+ webpricequote.h
+ -------------------
+ begin : Thu Dec 30 2004
+ copyright : (C) 2004 by Ace Jones
+ email : Ace Jones <acejones@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef WEBPRICEQUOTE_H
+#define WEBPRICEQUOTE_H
+
+// ----------------------------------------------------------------------------
+// QT Headers
+
+#include <qobject.h>
+#include <qdatetime.h>
+#include <qstringlist.h>
+#include <qmap.h>
+
+// ----------------------------------------------------------------------------
+// KDE Headers
+
+#include <kprocess.h>
+namespace KIO {
+ class Job;
+};
+
+// ----------------------------------------------------------------------------
+// Project Headers
+
+#include "../mymoney/mymoneymoney.h"
+
+/**
+Helper class to attend the process which is running the script, in the case
+of a local script being used to fetch the quote.
+
+@author Thomas Baumgart <thb@net-bembel.de> & Ace Jones <acejones@users.sourceforge.net>
+*/
+class WebPriceQuoteProcess: public KProcess
+{
+ Q_OBJECT
+public:
+ WebPriceQuoteProcess(void);
+ void setSymbol(const QString& _symbol) { m_symbol = _symbol; m_string.truncate(0); }
+
+public slots:
+ void slotReceivedDataFromFilter(KProcess*, char*, int);
+ void slotProcessExited(KProcess*);
+
+signals:
+ void processExited(const QString&);
+
+private:
+ QString m_symbol;
+ QString m_string;
+};
+
+/**
+Helper class to run the Finance::Quote process. This is used only for the purpose of obtaining
+a list of valid sources. The actual price quotes are obtained thru WebPriceQuoteProcess.
+The class also contains functions to convert between the rather cryptic source names used
+by the Finance::Quote package, and more user-friendly names.
+
+@author Thomas Baumgart <thb@net-bembel.de> & Ace Jones <acejones@users.sourceforge.net>, Tony B<tonybloom@users.sourceforge.net>
+ */
+class FinanceQuoteProcess: public KProcess
+{
+ Q_OBJECT
+ public:
+ FinanceQuoteProcess(void);
+ void launch (const QString& scriptPath);
+ bool isFinished() { return(m_isDone);};
+ QStringList getSourceList();
+ const QString crypticName(const QString& niceName);
+ const QString niceName(const QString& crypticName);
+
+ public slots:
+ void slotReceivedDataFromFilter(KProcess*, char*, int);
+ void slotProcessExited(KProcess*);
+
+ private:
+ bool m_isDone;
+ QString m_string;
+ typedef QMap<QString, QString> fqNameMap;
+ fqNameMap m_fqNames;
+};
+
+/**
+ * @author Thomas Baumgart & Ace Jones
+ *
+ * This is a helper class to store information about an online source
+ * for stock prices or currency exchange rates.
+ */
+struct WebPriceQuoteSource
+{
+ WebPriceQuoteSource() {}
+ WebPriceQuoteSource(const QString& name);
+ WebPriceQuoteSource(const QString& name, const QString& url, const QString& sym, const QString& price, const QString& date, const QString& dateformat);
+ ~WebPriceQuoteSource() {}
+
+ void write(void) const;
+ void rename(const QString& name);
+ void remove(void) const;
+
+ QString m_name;
+ QString m_url;
+ QString m_sym;
+ QString m_price;
+ QString m_date;
+ QString m_dateformat;
+ bool m_skipStripping;
+};
+
+/**
+Retrieves a price quote from a web-based quote source
+
+@author Ace Jones <acejones@users.sourceforge.net>
+*/
+class WebPriceQuote: public QObject
+{
+ Q_OBJECT
+public:
+ WebPriceQuote( QObject* = 0, const char* = 0 );
+ ~WebPriceQuote();
+
+ typedef enum _quoteSystemE {
+ Native=0,
+ FinanceQuote
+ } quoteSystemE;
+
+ /**
+ * This launches a web-based quote update for the given @p _symbol.
+ * When the quote is received back from the web source, it will be
+ * emitted on the 'quote' signal.
+ *
+ * @param _symbol the trading symbol of the stock to fetch a price for
+ * @param _id an arbitrary identifier, which will be emitted in the quote
+ * signal when a price is sent back.
+ * @param _source the source of the quote (must be a valid value returned
+ * by quoteSources(). Send QString() to use the default
+ * source.
+ * @return bool Whether the quote fetch process was launched successfully
+ */
+
+ bool launch(const QString& _symbol, const QString& _id, const QString& _source=QString());
+
+ /**
+ * This returns a list of the names of the quote sources
+ * currently defined.
+ *
+ * @param _system whether to return Native or Finance::Quote source list
+ * @return QStringList of quote source names
+ */
+ static QStringList quoteSources(const _quoteSystemE _system=Native);
+
+signals:
+ void quote(const QString&, const QString&, const QDate&, const double&);
+ void failed(const QString&, const QString&);
+ void status(const QString&);
+ void error(const QString&);
+
+protected slots:
+ void slotParseQuote(const QString&);
+
+protected:
+ static QMap<QString,WebPriceQuoteSource> defaultQuoteSources(void);
+
+private:
+ bool download(const KURL& u, QString & target, QWidget* window);
+ void removeTempFile(const QString& tmpFile);
+
+private slots:
+ void slotResult( KIO::Job * job );
+
+
+private:
+ bool launchNative(const QString& _symbol, const QString& _id, const QString& _source=QString());
+ bool launchFinanceQuote(const QString& _symbol, const QString& _id, const QString& _source=QString());
+ void enter_loop(void);
+
+ static QStringList quoteSourcesNative();
+ static QStringList quoteSourcesFinanceQuote();
+
+ WebPriceQuoteProcess m_filter;
+ QString m_symbol;
+ QString m_id;
+ QDate m_date;
+ double m_price;
+ WebPriceQuoteSource m_source;
+ static QString m_financeQuoteScriptPath;
+ static QStringList m_financeQuoteSources;
+
+
+ /**
+ * Whether the download succeeded or not. Taken from KIO::NetAccess
+ */
+ bool bJobOK;
+ static QString* lastErrorMsg;
+ static int lastErrorCode;
+ QString m_tmpFile;
+};
+
+class MyMoneyDateFormat
+{
+public:
+ MyMoneyDateFormat(const QString& _format): m_format(_format) {}
+ QString convertDate(const QDate& _in) const;
+ QDate convertString(const QString& _in, bool _strict=true, unsigned _centurymidpoint = QDate::currentDate().year() ) const;
+ const QString& format(void) const { return m_format; }
+private:
+ QString m_format;
+};
+
+namespace convertertest {
+
+/**
+Simple class to handle signals/slots for unit tests
+
+@author Ace Jones <acejones@users.sourceforge.net>
+*/
+class QuoteReceiver : public QObject
+{
+Q_OBJECT
+public:
+ QuoteReceiver(WebPriceQuote* q, QObject *parent = 0, const char *name = 0);
+ ~QuoteReceiver();
+public slots:
+ void slotGetQuote(const QString&,const QDate&, const double&);
+ void slotStatus(const QString&);
+ void slotError(const QString&);
+public:
+ QStringList m_statuses;
+ QStringList m_errors;
+ MyMoneyMoney m_price;
+ QDate m_date;
+};
+
+} // end namespace convertertest
+
+
+#endif // WEBPRICEQUOTE_H
+
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/dialogs/Makefile.am b/kmymoney2/dialogs/Makefile.am
new file mode 100644
index 0000000..ad9be80
--- /dev/null
+++ b/kmymoney2/dialogs/Makefile.am
@@ -0,0 +1,22 @@
+noinst_LIBRARIES = libdialogs.a
+KDE_OPTIONS = noautodist
+
+INCLUDES = $(all_includes) -I$(top_srcdir) -I. -I$(top_srcdir)/libkdchart -I$(top_srcdir)/kmymoney2/mymoney
+
+libdialogs_a_METASOURCES = AUTO
+
+libdialogs_a_SOURCES = kreportconfigurationfilterdlg.cpp kcurrencycalculator.cpp kcurrencyeditdlg.cpp keditequityentrydlg.cpp keditloanwizard.cpp knewloanwizard.cpp kenterscheduledlg.cpp krecentfileitem.cpp keditscheduledlg.cpp mymoneyqifprofileeditor.cpp kaccountselectdlg.cpp kupdatestockpricedlg.cpp knewequityentrydlg.cpp kstartdlg.cpp kreconciledlg.cpp knewfiledlg.cpp knewbankdlg.cpp knewaccountdlg.cpp kfindtransactiondlg.cpp kendingbalancedlg.cpp ksplittransactiondlg.cpp kimportdlg.cpp kexportdlg.cpp kcsvprogressdlg.cpp kchooseimportexportdlg.cpp kbackupdlg.cpp kequitypriceupdatedlg.cpp kmymoneypricedlg.cpp knewinvestmentwizard.cpp knewinvestmentwizard.h ksecuritylisteditor.cpp kgncimportoptionsdlg.cpp konlinequoteconfigurationdlg.cpp kgncpricesourcedlg.cpp kmymoneyfileinfodlg.cpp kselectdatabasedlg.cpp kpayeereassigndlg.cpp kcategoryreassigndlg.cpp kconfirmmanualenterdlg.cpp kaccountselectdlgdecl.ui kbackupdlgdecl.ui kchooseimportexportdlgdecl.ui kconfirmmanualenterdlgdecl.ui kcsvprogressdlgdecl.ui kcurrencycalculatordecl.ui kcurrencyeditdlgdecl.ui keditequityentrydecl.ui keditscheduledlgdecl.ui kendingbalancedlgdecl.ui kenterscheduledlgdecl.ui kequitypriceupdatedlgdecl.ui kexportdlgdecl.ui kfindtransactiondlgdecl.ui kgncimportoptionsdlgdecl.ui kimportdlgdecl.ui kmymoneypricedlgdecl.ui knewaccountdlgdecl.ui knewbankdlgdecl.ui knewequityentrydecl.ui knewfiledlgdecl.ui knewinvestmentwizarddecl.ui knewloanwizarddecl.ui konlinequoteconfigurationdecl.ui kreconciledlgdecl.ui ksecuritylisteditordecl.ui ksplitcorrectiondlg.ui ksplittransactiondlgdecl.ui kupdatestockpricedlgdecl.ui mymoneyqifprofileeditordecl.ui kgncpricesourcedlgdecl.ui kmymoneyfileinfodlgdecl.ui kselectdatabasedlgdecl.ui kpayeereassigndlgdecl.ui kcategoryreassigndlgdecl.ui transactioneditor.cpp investtransactioneditor.cpp investactivities.cpp kbalancechartdlg.cpp kplugindlg.ui kgpgkeyselectiondlg.cpp transactionmatcher.cpp kbalancewarning.cpp \
+knewbudgetdlgdecl.ui knewbudgetdlg.cpp kselecttransactionsdlgdecl.ui kselecttransactionsdlg.cpp kmergetransactionsdlg.cpp ksortoptiondlg.ui kloadtemplatedlgdecl.ui kloadtemplatedlg.cpp kmymoneysplittable.cpp
+
+EXTRA_DIST = kaccountselectdlgdecl.ui kbackupdlgdecl.ui kchooseimportexportdlgdecl.ui kconfirmmanualenterdlgdecl.ui kcsvprogressdlgdecl.ui kcurrencycalculatordecl.ui kcurrencyeditdlgdecl.ui keditequityentrydecl.ui keditscheduledlgdecl.ui kendingbalancedlgdecl.ui kenterscheduledlgdecl.ui kequitypriceupdatedlgdecl.ui kexportdlgdecl.ui kfindtransactiondlgdecl.ui kgncimportoptionsdlgdecl.ui kimportdlgdecl.ui kmymoneypricedlgdecl.ui knewaccountdlgdecl.ui knewbankdlgdecl.ui knewequityentrydecl.ui knewfiledlgdecl.ui knewinvestmentwizarddecl.ui knewloanwizarddecl.ui konlinequoteconfigurationdecl.ui kreconciledlgdecl.ui ksecuritylisteditordecl.ui ksplitcorrectiondlg.ui ksplittransactiondlgdecl.ui kupdatestockpricedlgdecl.ui mymoneyqifprofileeditordecl.ui kgncpricesourcedlgdecl.ui kmymoneyfileinfodlgdecl.ui kselectdatabasedlgdecl.ui kpayeereassigndlgdecl.ui kcategoryreassigndlgdecl.ui knewbudgetdlgdecl.ui kselecttransactionsdlgdecl.ui ksortoptiondlg.ui ksortoptiondlg.ui.h kplugindlg.ui kloadtemplatedlgdecl.ui
+
+DISTCLEANFILES= kaccountselectdlgdecl.cpp kbackupdlgdecl.cpp kchooseimportexportdlgdecl.cpp kcsvprogressdlgdecl.cpp kcurrencycalculatordecl.cpp kcurrencyeditdlgdecl.cpp keditequityentrydecl.cpp keditscheduledlgdecl.cpp kendingbalancedlgdecl.cpp kenterscheduledlgdecl.cpp kequitypriceupdatedlgdecl.cpp kexportdlgdecl.cpp kfindtransactiondlgdecl.cpp kgncimportoptionsdlgdecl.cpp kimportdlgdecl.cpp kmymoneypricedlgdecl.cpp knewaccountdlgdecl.cpp knewbankdlgdecl.cpp knewequityentrydecl.cpp knewfiledlgdecl.cpp knewinvestmentwizarddecl.cpp knewloanwizarddecl.cpp konlinequoteconfigurationdecl.cpp kreconciledlgdecl.cpp kreportconfigurationdecl.cpp ksecuritylisteditordecl.cpp ksplittransactiondlgdecl.cpp kupdatestockpricedlgdecl.cpp mymoneyqifprofileeditordecl.cpp kpayeereassigndlgdecl.cpp kcategoryreassigndlgdecl.cpp kconfirmmanualenterdlgdecl.cpp kaccountselectdlgdecl.h kbackupdlgdecl.h kchooseimportexportdlgdecl.h kcsvprogressdlgdecl.h kcurrencycalculatordecl.h kcurrencyeditdlgdecl.h keditequityentrydecl.h keditscheduledlgdecl.h kendingbalancedlgdecl.h kenterscheduledlgdecl.h kequitypriceupdatedlgdecl.h kexportdlgdecl.h kfindtransactiondlgdecl.h kgncimportoptionsdlgdecl.h kimportdlgdecl.h kmymoneypricedlgdecl.h knewaccountdlgdecl.h knewbankdlgdecl.h knewequityentrydecl.h knewfiledlgdecl.h knewinvestmentwizarddecl.h knewloanwizarddecl.h konlinequoteconfigurationdecl.h kreconciledlgdecl.h kreportconfigurationdecl.h ksecuritylisteditordecl.h ksplittransactiondlgdecl.h kupdatestockpricedlgdecl.h mymoneyqifprofileeditordecl.h kmymoneyfileinfodlgdecl.h kselectdatabasedlgdecl.h kpayeereassigndlgdecl.h kcategoryreassigndlgdecl.h knewbudgetdlgdecl.cpp knewbudgetdlgdecl.h kselecttransactionsdlgdecl.cpp kselecttransactionsdlgdecl.h kconfirmmanualenterdlgdecl.h kloadtemplatedlgdecl.cpp kloadtemplatedlgdecl.h
+
+noinst_HEADERS = keditscheduledlg.h kaccountselectdlg.h kbackupdlg.h kchooseimportexportdlg.h kcsvprogressdlg.h kcurrencyeditdlg.h keditequityentrydlg.h keditloanwizard.h kendingbalancedlg.h kenterscheduledlg.h kequitypriceupdatedlg.h kexportdlg.h kfindtransactiondlg.h kgncimportoptionsdlg.h kimportdlg.h kmymoneypricedlg.h knewaccountdlg.h knewbankdlg.h knewequityentrydlg.h knewfiledlg.h knewinvestmentwizard.h knewloanwizard.h konlinequoteconfigurationdlg.h krecentfileitem.h kreconciledlg.h kreportconfigurationfilterdlg.h ksecuritylisteditor.h ksplittransactiondlg.h kstartdlg.h kupdatestockpricedlg.h mymoneyqifprofileeditor.h kgncpricesourcedlg.h kmymoneyfileinfodlg.h kselectdatabasedlg.h kpayeereassigndlg.h kcategoryreassigndlg.h knewbudgetdlg.h kselecttransactionsdlg.h kmergetransactionsdlg.h kconfirmmanualenterdlg.h investactivities.h kbalancechartdlg.h kloadtemplatedlg.h kmymoneysplittable.h kgpgkeyselectiondlg.h transactionmatcher.h kbalancewarning.h
+
+instdir=$(includedir)/kmymoney
+inst_HEADERS = transactioneditor.h investtransactioneditor.h kcurrencycalculator.h
+
+SUBDIRS = settings
+
+messages: rc.cpp
diff --git a/kmymoney2/dialogs/investactivities.cpp b/kmymoney2/dialogs/investactivities.cpp
new file mode 100644
index 0000000..d929c38
--- /dev/null
+++ b/kmymoney2/dialogs/investactivities.cpp
@@ -0,0 +1,624 @@
+/***************************************************************************
+ investactivities.cpp
+ ----------
+ begin : Fri Dec 15 2006
+ copyright : (C) 2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlabel.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/kmymoneycategory.h>
+#include <kmymoney/kmymoneyedit.h>
+#include <kmymoney/kmymoneyaccountselector.h>
+#include <kmymoney/kmymoneycompletion.h>
+#include <kmymoney/mymoneyfile.h>
+
+#include "investactivities.h"
+
+using namespace Invest;
+using namespace KMyMoneyRegister;
+
+bool Activity::isComplete(QString& reason) const
+{
+ bool rc = false;
+ KMyMoneySecurity* security = dynamic_cast<KMyMoneySecurity*>(haveWidget("security"));
+ if(!security->currentText().isEmpty()) {
+ rc = security->selector()->contains(security->currentText());
+ }
+ return rc;
+}
+
+bool Activity::haveAssetAccount(void) const
+{
+ KMyMoneyCategory* cat = dynamic_cast<KMyMoneyCategory*>(haveWidget("asset-account"));
+
+ bool rc = true;
+ if(!isMultiSelection())
+ rc = !cat->currentText().isEmpty();
+
+ if(rc && !cat->currentText().isEmpty()) {
+ rc = cat->selector()->contains(cat->currentText());
+ }
+ return rc;
+}
+
+bool Activity::haveCategoryAndAmount(const QString& category, const QString& amount, bool optional) const
+{
+ KMyMoneyCategory* cat = dynamic_cast<KMyMoneyCategory*>(haveWidget(category));
+
+ bool rc = true;
+ if(!isMultiSelection() && !optional)
+ rc = !cat->currentText().isEmpty();
+
+ if(rc && !cat->currentText().isEmpty()) {
+ rc = cat->selector()->contains(cat->currentText()) || cat->isSplitTransaction();
+ if(rc && !amount.isEmpty()) {
+ MyMoneyMoney value = dynamic_cast<kMyMoneyEdit*>(haveWidget(amount))->value();
+ if(!isMultiSelection())
+ rc = !value.isZero();
+ }
+ }
+ return rc;
+}
+
+bool Activity::haveShares(void) const
+{
+ kMyMoneyEdit* amount = dynamic_cast<kMyMoneyEdit*>(haveWidget("shares"));
+ if(isMultiSelection() && amount->text().isEmpty())
+ return true;
+
+ return !amount->value().isZero();
+}
+
+bool Activity::havePrice(void) const
+{
+ kMyMoneyEdit* amount = dynamic_cast<kMyMoneyEdit*>(haveWidget("price"));
+ if(isMultiSelection() && amount->text().isEmpty())
+ return true;
+
+ return !amount->value().isZero();
+}
+
+bool Activity::createCategorySplits(const MyMoneyTransaction& t, KMyMoneyCategory* cat, kMyMoneyEdit* amount, MyMoneyMoney factor, QValueList<MyMoneySplit>&splits, const QValueList<MyMoneySplit>& osplits ) const
+{
+ bool rc = true;
+ if(!isMultiSelection() || (isMultiSelection() && !cat->currentText().isEmpty())) {
+ if(!cat->isSplitTransaction()) {
+ splits.clear();
+ MyMoneySplit s1;
+ QString categoryId;
+ categoryId = cat->selectedItem();
+ if(!categoryId.isEmpty()) {
+ s1.setAccountId(categoryId);
+ s1.setValue(amount->value() * factor);
+ if(!s1.value().isZero()) {
+ rc = m_parent->setupPrice(t, s1);
+ }
+ splits.append(s1);
+ }
+ } else {
+ splits = osplits;
+ }
+ }
+ return rc;
+}
+
+void Activity::createAssetAccountSplit(MyMoneySplit& split, const MyMoneySplit& stockSplit) const
+{
+ KMyMoneyCategory* cat = dynamic_cast<KMyMoneyCategory*>(haveWidget("asset-account"));
+ if(!isMultiSelection() || (isMultiSelection() && !cat->currentText().isEmpty())) {
+ QString categoryId;
+ categoryId = cat->selectedItem();
+ split.setAccountId(categoryId);
+ }
+ split.setMemo(stockSplit.memo());
+}
+
+MyMoneyMoney Activity::sumSplits(const MyMoneySplit& s0, const QValueList<MyMoneySplit>& feeSplits, const QValueList<MyMoneySplit>& interestSplits) const
+{
+ MyMoneyMoney total;
+ total = s0.value();
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = feeSplits.begin(); it_s != feeSplits.end(); ++it_s) {
+ total += (*it_s).value();
+ }
+ for(it_s = interestSplits.begin(); it_s != interestSplits.end(); ++it_s) {
+ total += (*it_s).value();
+ }
+ return total;
+}
+
+void Activity::setLabelText(const QString& idx, const QString& txt) const
+{
+ QLabel* w = dynamic_cast<QLabel*>(haveWidget(idx));
+ if(w) {
+ w->setText(txt);
+ } else {
+ qDebug("Unknown QLabel named '%s'", idx.data());
+ }
+}
+
+void Activity::preloadAssetAccount(void)
+{
+ KMyMoneyCategory* cat;
+ cat = dynamic_cast<KMyMoneyCategory*>(haveWidget("asset-account"));
+ if(cat->isVisible()) {
+ if(cat->currentText().isEmpty()) {
+ MyMoneyAccount acc = MyMoneyFile::instance()->accountByName(i18n("%1 (Brokerage)").arg(m_parent->account().name()));
+ if(!acc.id().isEmpty()) {
+ bool blocked = cat->signalsBlocked();
+ // block signals, so that the focus does not go crazy
+ cat->blockSignals(true);
+ cat->completion()->setSelected(acc.id());
+ cat->slotItemSelected(acc.id());
+ cat->blockSignals(blocked);
+ }
+ }
+ }
+}
+
+void Buy::showWidgets(void) const
+{
+ KMyMoneyCategory* cat;
+ cat = dynamic_cast<KMyMoneyCategory*>(haveWidget("fee-account"));
+ cat->parentWidget()->show();
+ cat = dynamic_cast<KMyMoneyCategory*>(haveWidget("interest-account"));
+ cat->parentWidget()->show();
+ kMyMoneyEdit* shareEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("shares"));
+ shareEdit->show();
+ shareEdit->setPrecision(MyMoneyMoney::denomToPrec(m_parent->security().smallestAccountFraction()));
+ cat->parentWidget()->show();
+ haveWidget("asset-account")->show();
+ haveWidget("price")->show();
+ haveWidget("total")->show();
+ setLabelText("fee-label", i18n("Fees"));
+ setLabelText("interest-label", i18n("Interest"));
+ setLabelText("interest-amount-label", i18n("Amount"));
+ setLabelText("asset-label", i18n("Account"));
+ setLabelText("shares-label", i18n("Shares"));
+ setLabelText("price-label", i18n("Price/share"));
+ setLabelText("total-label", i18n("Total"));
+}
+
+bool Buy::isComplete(QString& reason) const
+{
+ bool rc = Activity::isComplete(reason);
+ rc &= haveAssetAccount();
+ rc &= haveFees(true);
+ rc &= haveInterest(true);
+ rc &= haveShares();
+ rc &= havePrice();
+
+ return rc;
+}
+
+bool Buy::createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& feeSplits, QValueList<MyMoneySplit>& m_feeSplits, QValueList<MyMoneySplit>& interestSplits, QValueList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency)
+{
+ Q_UNUSED(m_interestSplits);
+ Q_UNUSED(security);
+ Q_UNUSED(currency);
+
+ QString reason;
+ if(!isComplete(reason))
+ return false;
+
+ kMyMoneyEdit* sharesEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("shares"));
+ kMyMoneyEdit* priceEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("price"));
+
+ s0.setAction(MyMoneySplit::BuyShares);
+
+ MyMoneyMoney shares = s0.shares();
+ MyMoneyMoney price;
+ if(!s0.shares().isZero())
+ price = (s0.value() / s0.shares()).reduce();
+
+ if(!isMultiSelection() || (isMultiSelection() && !sharesEdit->text().isEmpty())) {
+ shares = sharesEdit->value().abs();
+ s0.setShares(shares);
+ s0.setValue((shares * price).reduce());
+ s0.setPrice(price);
+ }
+ if(!isMultiSelection() || (isMultiSelection() && !priceEdit->text().isEmpty())) {
+ price = priceEdit->value().abs();
+ if(priceMode() == InvestTransactionEditor::PricePerTransaction) {
+ s0.setValue(price.reduce());
+ if(!s0.shares().isZero())
+ s0.setPrice((price / s0.shares()).reduce());
+ } else {
+ s0.setValue((shares * price).reduce());
+ s0.setPrice(price);
+ }
+ }
+
+ if(!createCategorySplits(t, dynamic_cast<KMyMoneyCategory*>(haveWidget("fee-account")), dynamic_cast<kMyMoneyEdit*>(haveWidget("fee-amount")), MyMoneyMoney(1,1), feeSplits, m_feeSplits))
+ return false;
+ if(!createCategorySplits(t, dynamic_cast<KMyMoneyCategory*>(haveWidget("interest-account")), dynamic_cast<kMyMoneyEdit*>(haveWidget("interest-amount")), MyMoneyMoney(-1,1), interestSplits, m_interestSplits))
+ return false;
+
+ createAssetAccountSplit(assetAccountSplit, s0);
+
+ MyMoneyMoney total = sumSplits(s0, feeSplits, interestSplits);
+ assetAccountSplit.setValue(-total);
+
+ if(!m_parent->setupPrice(t, assetAccountSplit))
+ return false;
+
+ return true;
+}
+
+void Sell::showWidgets(void) const
+{
+ KMyMoneyCategory* cat;
+ cat = dynamic_cast<KMyMoneyCategory*>(haveWidget("interest-account"));
+ cat->parentWidget()->show();
+ cat = dynamic_cast<KMyMoneyCategory*>(haveWidget("fee-account"));
+ cat->parentWidget()->show();
+ kMyMoneyEdit* shareEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("shares"));
+ shareEdit->show();
+ shareEdit->setPrecision(MyMoneyMoney::denomToPrec(m_parent->security().smallestAccountFraction()));
+ haveWidget("asset-account")->show();
+ haveWidget("price")->show();
+ haveWidget("total")->show();
+
+ setLabelText("fee-label", i18n("Fees"));
+ setLabelText("interest-label", i18n("Interest"));
+ setLabelText("interest-amount-label", i18n("Amount"));
+ setLabelText("asset-label", i18n("Account"));
+ setLabelText("shares-label", i18n("Shares"));
+ setLabelText("price-label", i18n("Price/share"));
+ setLabelText("total-label", i18n("Total"));
+}
+
+bool Sell::isComplete(QString& reason) const
+{
+ bool rc = Activity::isComplete(reason);
+ rc &= haveAssetAccount();
+ rc &= haveFees(true);
+ rc &= haveInterest(true);
+ rc &= haveShares();
+ rc &= havePrice();
+ return rc;
+}
+
+bool Sell::createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& feeSplits, QValueList<MyMoneySplit>& m_feeSplits, QValueList<MyMoneySplit>& interestSplits, QValueList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency)
+{
+ Q_UNUSED(security);
+ Q_UNUSED(currency);
+
+ QString reason;
+ if(!isComplete(reason))
+ return false;
+
+ kMyMoneyEdit* sharesEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("shares"));
+ kMyMoneyEdit* priceEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("price"));
+
+ s0.setAction(MyMoneySplit::BuyShares);
+
+ MyMoneyMoney shares = s0.shares();
+ MyMoneyMoney price;
+ if(!s0.shares().isZero())
+ price = (s0.value() / s0.shares()).reduce();
+
+ if(!isMultiSelection() || (isMultiSelection() && !sharesEdit->text().isEmpty())) {
+ shares = -sharesEdit->value().abs();
+ s0.setShares(shares);
+ s0.setValue((shares * price).reduce());
+ s0.setPrice(price);
+ }
+ if(!isMultiSelection() || (isMultiSelection() && !priceEdit->text().isEmpty())) {
+ price = priceEdit->value().abs();
+ if(priceMode() == InvestTransactionEditor::PricePerTransaction) {
+ price = -price;
+ s0.setValue(price.reduce());
+ if(!s0.shares().isZero())
+ s0.setPrice((price / s0.shares()).reduce());
+ } else {
+ s0.setValue((shares * price).reduce());
+ s0.setPrice(price);
+ }
+ }
+
+ if(!createCategorySplits(t, dynamic_cast<KMyMoneyCategory*>(haveWidget("fee-account")), dynamic_cast<kMyMoneyEdit*>(haveWidget("fee-amount")), MyMoneyMoney(1,1), feeSplits, m_feeSplits))
+ return false;
+
+ if(!createCategorySplits(t, dynamic_cast<KMyMoneyCategory*>(haveWidget("interest-account")), dynamic_cast<kMyMoneyEdit*>(haveWidget("interest-amount")), MyMoneyMoney(-1,1), interestSplits, m_interestSplits))
+ return false;
+
+ createAssetAccountSplit(assetAccountSplit, s0);
+
+ MyMoneyMoney total = sumSplits(s0, feeSplits, interestSplits);
+ assetAccountSplit.setValue(-total);
+
+ if(!m_parent->setupPrice(t, assetAccountSplit))
+ return false;
+
+ return true;
+}
+
+void Div::showWidgets(void) const
+{
+ KMyMoneyCategory* cat;
+ cat = dynamic_cast<KMyMoneyCategory*>(haveWidget("interest-account"));
+ cat->parentWidget()->show();
+ haveWidget("asset-account")->show();
+ haveWidget("total")->show();
+
+ setLabelText("interest-amount-label", i18n("Amount"));
+ setLabelText("interest-label", i18n("Interest"));
+ setLabelText("asset-label", i18n("Account"));
+ setLabelText("total-label", i18n("Total"));
+}
+
+bool Div::isComplete(QString& reason) const
+{
+ bool rc = haveAssetAccount();
+ rc &= haveInterest(false);
+ return rc;
+}
+
+bool Div::createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& feeSplits, QValueList<MyMoneySplit>& m_feeSplits, QValueList<MyMoneySplit>& interestSplits, QValueList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency)
+{
+ Q_UNUSED(m_feeSplits);
+ Q_UNUSED(security);
+ Q_UNUSED(currency);
+
+ QString reason;
+ if(!isComplete(reason))
+ return false;
+
+ s0.setAction(MyMoneySplit::Dividend);
+
+ // for dividends, we only use the stock split as a marker
+ MyMoneyMoney shares;
+ s0.setShares(shares);
+ s0.setValue(shares);
+ s0.setPrice(MyMoneyMoney(1,1));
+
+ if(!createCategorySplits(t, dynamic_cast<KMyMoneyCategory*>(haveWidget("interest-account")), dynamic_cast<kMyMoneyEdit*>(haveWidget("interest-amount")), MyMoneyMoney(-1,1), interestSplits, m_interestSplits))
+ return false;
+
+ createAssetAccountSplit(assetAccountSplit, s0);
+
+ MyMoneyMoney total = sumSplits(s0, feeSplits, interestSplits);
+ assetAccountSplit.setValue(-total);
+
+ if(!m_parent->setupPrice(t, assetAccountSplit))
+ return false;
+
+ return true;
+}
+
+void Reinvest::showWidgets(void) const
+{
+ KMyMoneyCategory* cat;
+ cat = dynamic_cast<KMyMoneyCategory*>(haveWidget("interest-account"));
+ cat->parentWidget()->show();
+ cat = dynamic_cast<KMyMoneyCategory*>(haveWidget("fee-account"));
+ cat->parentWidget()->show();
+ kMyMoneyEdit* shareEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("shares"));
+ shareEdit->show();
+ shareEdit->setPrecision(MyMoneyMoney::denomToPrec(m_parent->security().smallestAccountFraction()));
+ haveWidget("price")->show();
+ haveWidget("total")->show();
+
+ setLabelText("fee-label", i18n("Fees"));
+ setLabelText("interest-label", i18n("Interest"));
+ setLabelText("shares-label", i18n("Shares"));
+ setLabelText("price-label", i18n("Price/share"));
+ setLabelText("total-label", i18n("Total"));
+}
+
+bool Reinvest::isComplete(QString& reason) const
+{
+ bool rc = Activity::isComplete(reason);
+ rc &= haveCategoryAndAmount("interest-account", QString(), false);
+ rc &= haveFees(true);
+ rc &= haveShares();
+ rc &= havePrice();
+ return rc;
+}
+
+bool Reinvest::createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& feeSplits, QValueList<MyMoneySplit>& m_feeSplits, QValueList<MyMoneySplit>& interestSplits, QValueList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency)
+{
+ Q_UNUSED(assetAccountSplit);
+ Q_UNUSED(security);
+ Q_UNUSED(currency);
+
+ QString reason;
+ if(!isComplete(reason))
+ return false;
+
+ kMyMoneyEdit* sharesEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("shares"));
+ kMyMoneyEdit* priceEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("price"));
+
+ s0.setAction(MyMoneySplit::ReinvestDividend);
+
+ MyMoneyMoney shares = s0.shares();
+ MyMoneyMoney price;
+ if(!s0.shares().isZero())
+ price = (s0.value() / s0.shares()).reduce();
+
+ if(!isMultiSelection() || (isMultiSelection() && !sharesEdit->text().isEmpty())) {
+ shares = sharesEdit->value().abs();
+ s0.setShares(shares);
+ s0.setValue((shares * price).reduce());
+ s0.setPrice(price);
+ }
+ if(!isMultiSelection() || (isMultiSelection() && !priceEdit->text().isEmpty())) {
+ price = priceEdit->value().abs();
+ if(priceMode() == InvestTransactionEditor::PricePerTransaction) {
+ s0.setValue(price.reduce());
+ if(!s0.shares().isZero())
+ s0.setPrice((price / s0.shares()).reduce());
+ } else {
+ s0.setValue((shares * price).reduce());
+ s0.setPrice(price);
+ }
+ }
+
+ if(!createCategorySplits(t, dynamic_cast<KMyMoneyCategory*>(haveWidget("fee-account")), dynamic_cast<kMyMoneyEdit*>(haveWidget("fee-amount")), MyMoneyMoney(1,1), feeSplits, m_feeSplits))
+ return false;
+
+ if(!createCategorySplits(t, dynamic_cast<KMyMoneyCategory*>(haveWidget("interest-account")), dynamic_cast<kMyMoneyEdit*>(haveWidget("interest-amount")), MyMoneyMoney(-1,1), interestSplits, m_interestSplits))
+ return false;
+
+ if(interestSplits.count() != 1) {
+ qDebug("more or less than one interest split in Reinvest::createTransaction. Not created.");
+ return false;
+ }
+
+ MyMoneySplit& s1 = interestSplits[0];
+
+ MyMoneyMoney total = sumSplits(s0, feeSplits, QValueList<MyMoneySplit>());
+ s1.setValue(-total);
+
+ if(!m_parent->setupPrice(t, s1))
+ return false;
+
+ return true;
+}
+
+void Add::showWidgets(void) const
+{
+ kMyMoneyEdit* shareEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("shares"));
+ shareEdit->show();
+ shareEdit->setPrecision(MyMoneyMoney::denomToPrec(m_parent->security().smallestAccountFraction()));
+
+ setLabelText("shares-label", i18n("Shares"));
+}
+
+bool Add::isComplete(QString& reason) const
+{
+ bool rc = Activity::isComplete(reason);
+ rc &= haveShares();
+ return rc;
+}
+
+bool Add::createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& feeSplits, QValueList<MyMoneySplit>& m_feeSplits, QValueList<MyMoneySplit>& interestSplits, QValueList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency)
+{
+ Q_UNUSED(t);
+ Q_UNUSED(assetAccountSplit);
+ Q_UNUSED(m_feeSplits);
+ Q_UNUSED(m_interestSplits);
+ Q_UNUSED(security);
+ Q_UNUSED(currency);
+
+ QString reason;
+ if(!isComplete(reason))
+ return false;
+
+ kMyMoneyEdit* sharesEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("shares"));
+
+ s0.setAction(MyMoneySplit::AddShares);
+ s0.setShares(sharesEdit->value().abs());
+ s0.setValue(MyMoneyMoney(0, 1));
+ s0.setPrice(MyMoneyMoney(0, 1));
+
+ feeSplits.clear();
+ interestSplits.clear();
+
+ return true;
+}
+
+void Remove::showWidgets(void) const
+{
+ kMyMoneyEdit* shareEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("shares"));
+ shareEdit->show();
+ shareEdit->setPrecision(MyMoneyMoney::denomToPrec(m_parent->security().smallestAccountFraction()));
+ setLabelText("shares-label", i18n("Shares"));
+}
+
+bool Remove::isComplete(QString& reason) const
+{
+ bool rc = Activity::isComplete(reason);
+ rc &= haveShares();
+ return rc;
+}
+
+bool Remove::createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& feeSplits, QValueList<MyMoneySplit>& m_feeSplits, QValueList<MyMoneySplit>& interestSplits, QValueList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency)
+{
+ Q_UNUSED(t);
+ Q_UNUSED(assetAccountSplit);
+ Q_UNUSED(m_feeSplits);
+ Q_UNUSED(m_interestSplits);
+ Q_UNUSED(security);
+ Q_UNUSED(currency);
+
+ QString reason;
+ if(!isComplete(reason))
+ return false;
+
+ kMyMoneyEdit* sharesEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("shares"));
+
+ s0.setAction(MyMoneySplit::AddShares);
+ s0.setShares(-(sharesEdit->value().abs()));
+ s0.setValue(MyMoneyMoney(0, 1));
+ s0.setPrice(MyMoneyMoney(0, 1));
+
+ feeSplits.clear();
+ interestSplits.clear();
+
+ return true;
+}
+
+void Split::showWidgets(void) const
+{
+ // TODO do we need a special split ratio widget?
+ // TODO maybe yes, currently the precision is the one of the fraction and might differ from it
+ kMyMoneyEdit* shareEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("shares"));
+ shareEdit->show();
+ shareEdit->setPrecision(-1);
+ setLabelText("shares-label", i18n("Ratio 1/"));
+}
+
+bool Split::isComplete(QString& reason) const
+{
+ bool rc = Activity::isComplete(reason);
+ rc &= haveShares();
+ return rc;
+}
+
+bool Split::createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& feeSplits, QValueList<MyMoneySplit>& m_feeSplits, QValueList<MyMoneySplit>& interestSplits, QValueList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency)
+{
+ Q_UNUSED(t);
+ Q_UNUSED(assetAccountSplit);
+ Q_UNUSED(m_feeSplits);
+ Q_UNUSED(m_interestSplits);
+ Q_UNUSED(security);
+ Q_UNUSED(currency);
+
+ kMyMoneyEdit* sharesEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("shares"));
+
+ s0.setAction(MyMoneySplit::SplitShares);
+ s0.setShares(sharesEdit->value().abs());
+ s0.setValue(MyMoneyMoney(0, 1));
+ s0.setPrice(MyMoneyMoney(0, 1));
+
+ feeSplits.clear();
+ interestSplits.clear();
+
+ return true;
+}
+
+
diff --git a/kmymoney2/dialogs/investactivities.h b/kmymoney2/dialogs/investactivities.h
new file mode 100644
index 0000000..91b474d
--- /dev/null
+++ b/kmymoney2/dialogs/investactivities.h
@@ -0,0 +1,158 @@
+/***************************************************************************
+ investactivities.h
+ ----------
+ begin : Fri Dec 15 2006
+ copyright : (C) 2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef INVESTACTIVITIES_H
+#define INVESTACTIVITIES_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/register.h>
+#include <kmymoney/investtransactioneditor.h>
+
+namespace Invest {
+
+class Activity
+{
+public:
+ virtual MyMoneySplit::investTransactionTypeE type(void) const = 0;
+ virtual void showWidgets(void) const = 0;
+ virtual bool isComplete(QString& reason) const = 0;
+
+ /**
+ * Create a transaction @p t based on the split @p s0 and the data contained
+ * in the widgets. In multiselection mode, @p assetAccountSplit, @p feeSplits, @p
+ * interestSplits, @p security and @p currency are taken from the original
+ * transaction and should be used as well.
+ *
+ * @return @p true if creation was successful, @p false otherwise
+ */
+ virtual bool createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& feeSplits, QValueList<MyMoneySplit>& m_feeSplits, QValueList<MyMoneySplit>& interestSplits, QValueList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency) = 0;
+
+ virtual void preloadAssetAccount(void);
+ virtual ~Activity() {}
+
+protected:
+ Activity(InvestTransactionEditor* editor) { m_parent = editor; }
+ QWidget* haveWidget(const QString& name) const { return m_parent->haveWidget(name); }
+ bool haveAssetAccount(void) const;
+ bool haveFees(bool optional = false) const { return haveCategoryAndAmount("fee-account", "fee-amount", optional); }
+ bool haveInterest(bool optional = false) const { return haveCategoryAndAmount("interest-account", "interest-amount", optional); }
+ bool haveShares(void) const;
+ bool havePrice(void) const;
+ bool isMultiSelection(void) const { return m_parent->isMultiSelection(); }
+ bool createCategorySplits(const MyMoneyTransaction& t, KMyMoneyCategory* cat, kMyMoneyEdit* amount, MyMoneyMoney factor, QValueList<MyMoneySplit>&splits, const QValueList<MyMoneySplit>& osplits ) const;
+ void createAssetAccountSplit(MyMoneySplit& split, const MyMoneySplit& stockSplit) const;
+ MyMoneyMoney sumSplits(const MyMoneySplit& s0, const QValueList<MyMoneySplit>& feeSplits, const QValueList<MyMoneySplit>& interestSplits) const;
+ bool haveCategoryAndAmount(const QString& category, const QString& amount, bool optional) const;
+ void setLabelText(const QString& idx, const QString& txt) const;
+ InvestTransactionEditor::priceModeE priceMode(void) const { return m_parent->priceMode(); }
+
+protected:
+ InvestTransactionEditor* m_parent;
+ QMap<QString, MyMoneyMoney> m_priceInfo;
+};
+
+class Buy : public Activity
+{
+public:
+ Buy(InvestTransactionEditor* editor) : Activity(editor) {}
+ virtual ~Buy() {}
+ virtual MyMoneySplit::investTransactionTypeE type(void) const { return MyMoneySplit::BuyShares; }
+ virtual void showWidgets(void) const;
+ virtual bool isComplete(QString& reason) const;
+ virtual bool createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& feeSplits, QValueList<MyMoneySplit>& m_feeSplits, QValueList<MyMoneySplit>& interestSplits, QValueList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency);
+};
+
+class Sell : public Activity
+{
+public:
+ Sell(InvestTransactionEditor* editor) : Activity(editor) {}
+ virtual ~Sell() {}
+ virtual MyMoneySplit::investTransactionTypeE type(void) const { return MyMoneySplit::SellShares; }
+ virtual void showWidgets(void) const;
+ virtual bool isComplete(QString& reason) const;
+ virtual bool createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& feeSplits, QValueList<MyMoneySplit>& m_feeSplits, QValueList<MyMoneySplit>& interestSplits, QValueList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency);
+};
+
+class Div : public Activity
+{
+public:
+ Div(InvestTransactionEditor* editor) : Activity(editor) {}
+ virtual ~Div() {}
+ virtual MyMoneySplit::investTransactionTypeE type(void) const { return MyMoneySplit::Dividend; }
+ virtual void showWidgets(void) const;
+ virtual bool isComplete(QString& reason) const;
+ virtual bool createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& feeSplits, QValueList<MyMoneySplit>& m_feeSplits, QValueList<MyMoneySplit>& interestSplits, QValueList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency);
+};
+
+class Reinvest : public Activity
+{
+public:
+ Reinvest(InvestTransactionEditor* editor) : Activity(editor) {}
+ virtual ~Reinvest() {}
+ virtual MyMoneySplit::investTransactionTypeE type(void) const { return MyMoneySplit::ReinvestDividend; }
+ virtual void showWidgets(void) const;
+ virtual bool isComplete(QString& reason) const;
+ virtual bool createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& feeSplits, QValueList<MyMoneySplit>& m_feeSplits, QValueList<MyMoneySplit>& interestSplits, QValueList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency);
+};
+
+class Add : public Activity
+{
+public:
+ Add(InvestTransactionEditor* editor) : Activity(editor) {}
+ virtual ~Add() {}
+ virtual MyMoneySplit::investTransactionTypeE type(void) const { return MyMoneySplit::AddShares; }
+ virtual void showWidgets(void) const;
+ virtual bool isComplete(QString& reason) const;
+ virtual bool createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& feeSplits, QValueList<MyMoneySplit>& m_feeSplits, QValueList<MyMoneySplit>& interestSplits, QValueList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency);
+};
+
+class Remove : public Activity
+{
+public:
+ Remove(InvestTransactionEditor* editor) : Activity(editor) {}
+ virtual ~Remove() {}
+ virtual MyMoneySplit::investTransactionTypeE type(void) const { return MyMoneySplit::RemoveShares; }
+ virtual void showWidgets(void) const;
+ virtual bool isComplete(QString& reason) const;
+ virtual bool createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& feeSplits, QValueList<MyMoneySplit>& m_feeSplits, QValueList<MyMoneySplit>& interestSplits, QValueList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency);
+};
+
+class Split : public Activity
+{
+public:
+ Split(InvestTransactionEditor* editor) : Activity(editor) {}
+ virtual ~Split() {}
+ virtual MyMoneySplit::investTransactionTypeE type(void) const { return MyMoneySplit::SplitShares; }
+ virtual void showWidgets(void) const;
+ virtual bool isComplete(QString& reason) const;
+ virtual bool createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& feeSplits, QValueList<MyMoneySplit>& m_feeSplits, QValueList<MyMoneySplit>& interestSplits, QValueList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency);
+};
+
+} // namespace Invest
+
+
+
+#endif // INVESTACTIVITIES_H
+
diff --git a/kmymoney2/dialogs/investtransactioneditor.cpp b/kmymoney2/dialogs/investtransactioneditor.cpp
new file mode 100644
index 0000000..5a62436
--- /dev/null
+++ b/kmymoney2/dialogs/investtransactioneditor.cpp
@@ -0,0 +1,1094 @@
+/***************************************************************************
+ investtransactioneditor.cpp
+ ----------
+ begin : Fri Dec 15 2006
+ copyright : (C) 2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include <typeinfo>
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlabel.h>
+#include <qapplication.h>
+#include <qeventloop.h>
+#include <qradiobutton.h>
+#include <qbuttongroup.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <ktextedit.h>
+#include <klocale.h>
+#include <kcombobox.h>
+#include <kpushbutton.h>
+#include <kmessagebox.h>
+#include <kstdguiitem.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/investtransactioneditor.h>
+#include <kmymoney/kmymoneycategory.h>
+#include <kmymoney/kmymoneydateinput.h>
+#include <kmymoney/kmymoneyedit.h>
+#include <kmymoney/kmymoneylineedit.h>
+#include <kmymoney/kmymoneyaccountcompletion.h>
+#include <kmymoney/kmymoneyaccountselector.h>
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/transactionform.h>
+
+#include "../dialogs/ksplittransactiondlg.h"
+#include "../dialogs/kcurrencycalculator.h"
+
+#include "../kmymoneyglobalsettings.h"
+
+#include "investactivities.h"
+
+using namespace KMyMoneyRegister;
+using namespace KMyMoneyTransactionForm;
+using namespace Invest;
+
+class InvestTransactionEditor::Private {
+ friend class Invest::Activity;
+
+public:
+ Private(InvestTransactionEditor* parent) :
+ m_parent(parent),
+ m_activity(0)
+ {
+ m_phonyAccount = MyMoneyAccount("Phony-ID", MyMoneyAccount());
+ }
+
+ ~Private() {
+ delete m_activity;
+ }
+
+ QWidget* haveWidget(const QString& name) { return m_parent->haveWidget(name); }
+
+ InvestTransactionEditor* m_parent;
+ Activity* m_activity;
+ MyMoneyAccount m_phonyAccount;
+ MyMoneySplit m_phonySplit;
+};
+
+
+InvestTransactionEditor::InvestTransactionEditor() :
+ d(new Private(this))
+{
+}
+
+InvestTransactionEditor::~InvestTransactionEditor()
+{
+ delete d;
+}
+
+InvestTransactionEditor::InvestTransactionEditor(TransactionEditorContainer* regForm, KMyMoneyRegister::InvestTransaction* item, const KMyMoneyRegister::SelectedTransactions& list, const QDate& lastPostDate) :
+ TransactionEditor(regForm, item, list, lastPostDate),
+ d(new Private(this))
+{
+ // dissect the transaction into its type, splits, currency, security etc.
+ dissectTransaction(m_transaction, m_split,
+ m_assetAccountSplit,
+ m_feeSplits,
+ m_interestSplits,
+ m_security,
+ m_currency,
+ m_transactionType);
+
+ // determine initial activity object
+ activityFactory(m_transactionType);
+}
+
+void InvestTransactionEditor::activityFactory(MyMoneySplit::investTransactionTypeE type)
+{
+ if(!d->m_activity || type != d->m_activity->type()) {
+ delete d->m_activity;
+ switch(type) {
+ default:
+ case MyMoneySplit::BuyShares:
+ d->m_activity = new Buy(this);
+ break;
+ case MyMoneySplit::SellShares:
+ d->m_activity = new Sell(this);
+ break;
+ case MyMoneySplit::Dividend:
+ case MyMoneySplit::Yield:
+ d->m_activity = new Div(this);
+ break;
+ case MyMoneySplit::ReinvestDividend:
+ d->m_activity = new Reinvest(this);
+ break;
+ case MyMoneySplit::AddShares:
+ d->m_activity = new Add(this);
+ break;
+ case MyMoneySplit::RemoveShares:
+ d->m_activity = new Remove(this);
+ break;
+ case MyMoneySplit::SplitShares:
+ d->m_activity = new Split(this);
+ break;
+ }
+ }
+}
+
+void InvestTransactionEditor::dissectTransaction(const MyMoneyTransaction& transaction, const MyMoneySplit& split, MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& feeSplits, QValueList<MyMoneySplit>& interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency, MyMoneySplit::investTransactionTypeE& transactionType)
+{
+ // collect the splits. split references the stock account and should already
+ // be set up. assetAccountSplit references the corresponding asset account (maybe
+ // empty), feeSplits is the list of all expenses and interestSplits
+ // the list of all incomes
+ MyMoneyFile* file = MyMoneyFile::instance();
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ for(it_s = transaction.splits().begin(); it_s != transaction.splits().end(); ++it_s) {
+ MyMoneyAccount acc = file->account((*it_s).accountId());
+ if((*it_s).id() == split.id()) {
+ security = file->security(acc.currencyId());
+ } else if(acc.accountGroup() == MyMoneyAccount::Expense) {
+ feeSplits.append(*it_s);
+ // feeAmount += (*it_s).value();
+ } else if(acc.accountGroup() == MyMoneyAccount::Income) {
+ interestSplits.append(*it_s);
+ // interestAmount += (*it_s).value();
+ } else {
+ assetAccountSplit = *it_s;
+ }
+ }
+
+ // determine transaction type
+ if(split.action() == MyMoneySplit::ActionAddShares) {
+ transactionType = (!split.shares().isNegative()) ? MyMoneySplit::AddShares : MyMoneySplit::RemoveShares;
+ } else if(split.action() == MyMoneySplit::ActionBuyShares) {
+ transactionType = (!split.value().isNegative()) ? MyMoneySplit::BuyShares : MyMoneySplit::SellShares;
+ } else if(split.action() == MyMoneySplit::ActionDividend) {
+ transactionType = MyMoneySplit::Dividend;
+ } else if(split.action() == MyMoneySplit::ActionReinvestDividend) {
+ transactionType = MyMoneySplit::ReinvestDividend;
+ } else if(split.action() == MyMoneySplit::ActionYield) {
+ transactionType = MyMoneySplit::Yield;
+ } else if(split.action() == MyMoneySplit::ActionSplitShares) {
+ transactionType = MyMoneySplit::SplitShares;
+ } else
+ transactionType = MyMoneySplit::BuyShares;
+
+ currency.setTradingSymbol("???");
+ try {
+ currency = file->security(transaction.commodity());
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+}
+
+void InvestTransactionEditor::createEditWidgets(void)
+{
+ KMyMoneyActivityCombo* activity = new KMyMoneyActivityCombo();
+ m_editWidgets["activity"] = activity;
+ connect(activity, SIGNAL(activitySelected(MyMoneySplit::investTransactionTypeE)), this, SLOT(slotUpdateActivity(MyMoneySplit::investTransactionTypeE)));
+ connect(activity, SIGNAL(activitySelected(MyMoneySplit::investTransactionTypeE)), this, SLOT(slotUpdateButtonState()));
+
+ m_editWidgets["postdate"] = new kMyMoneyDateInput;
+ connect(m_editWidgets["postdate"], SIGNAL(dateChanged(const QDate&)), this, SLOT(slotUpdateButtonState()));
+
+ KMyMoneySecurity* security = new KMyMoneySecurity;
+ security->setHint(i18n("Security"));
+ m_editWidgets["security"] = security;
+ connect(security, SIGNAL(itemSelected(const QString&)), this, SLOT(slotUpdateSecurity(const QString&)));
+ connect(security, SIGNAL(textChanged(const QString&)), this, SLOT(slotUpdateButtonState()));
+ connect(security, SIGNAL(createItem(const QString&, QString&)), this, SLOT(slotCreateSecurity(const QString&, QString&)));
+ connect(security, SIGNAL(objectCreation(bool)), this, SIGNAL(objectCreation(bool)));
+
+ KMyMoneyCategory* asset = new KMyMoneyCategory(0, 0, false);
+ asset->setHint(i18n("Asset account"));
+ m_editWidgets["asset-account"] = asset;
+ connect(asset, SIGNAL(textChanged(const QString&)), this, SLOT(slotUpdateButtonState()));
+ connect(asset, SIGNAL(objectCreation(bool)), this, SIGNAL(objectCreation(bool)));
+
+ KMyMoneyCategory* fees = new KMyMoneyCategory(0, 0, true);
+ fees->setHint(i18n("Fees"));
+ m_editWidgets["fee-account"] = fees;
+ connect(fees, SIGNAL(itemSelected(const QString&)), this, SLOT(slotUpdateFeeCategory(const QString&)));
+ connect(fees, SIGNAL(textChanged(const QString&)), this, SLOT(slotUpdateButtonState()));
+ connect(fees, SIGNAL(textChanged(const QString&)), this, SLOT(slotUpdateFeeVisibility(const QString&)));
+ connect(fees, SIGNAL(createItem(const QString&, QString&)), this, SLOT(slotCreateFeeCategory(const QString&, QString&)));
+ connect(fees, SIGNAL(objectCreation(bool)), this, SIGNAL(objectCreation(bool)));
+ connect(fees->splitButton(), SIGNAL(clicked()), this, SLOT(slotEditFeeSplits()));
+
+ KMyMoneyCategory* interest = new KMyMoneyCategory(0, 0, true);
+ interest->setHint(i18n("Interest"));
+ m_editWidgets["interest-account"] = interest;
+ connect(interest, SIGNAL(itemSelected(const QString&)), this, SLOT(slotUpdateInterestCategory(const QString&)));
+ connect(interest, SIGNAL(textChanged(const QString&)), this, SLOT(slotUpdateButtonState()));
+ connect(interest, SIGNAL(textChanged(const QString&)), this, SLOT(slotUpdateInterestVisibility(const QString&)));
+ connect(interest, SIGNAL(createItem(const QString&, QString&)), this, SLOT(slotCreateInterestCategory(const QString&, QString&)));
+ connect(interest, SIGNAL(objectCreation(bool)), this, SIGNAL(objectCreation(bool)));
+ connect(interest->splitButton(), SIGNAL(clicked()), this, SLOT(slotEditInterestSplits()));
+
+ KTextEdit* memo = new KTextEdit;
+ memo->setTabChangesFocus(true);
+ m_editWidgets["memo"] = memo;
+
+ kMyMoneyEdit* value = new kMyMoneyEdit;
+ value->setHint(i18n("Shares"));
+ value->setResetButtonVisible(false);
+ m_editWidgets["shares"] = value;
+ connect(value, SIGNAL(textChanged(const QString&)), this, SLOT(slotUpdateButtonState()));
+ connect(value, SIGNAL(valueChanged(const QString&)), this, SLOT(slotUpdateTotalAmount()));
+
+ value = new kMyMoneyEdit;
+ value->setHint(i18n("Price"));
+ value->setResetButtonVisible(false);
+ value->setPrecision(KMyMoneyGlobalSettings::pricePrecision());
+ m_editWidgets["price"] = value;
+ connect(value, SIGNAL(textChanged(const QString&)), this, SLOT(slotUpdateButtonState()));
+ connect(value, SIGNAL(valueChanged(const QString&)), this, SLOT(slotUpdateTotalAmount()));
+
+ value = new kMyMoneyEdit;
+ // TODO once we have the selected transactions as array of Transaction
+ // we can allow multiple splits for fee and interest
+ value->setResetButtonVisible(false);
+ m_editWidgets["fee-amount"] = value;
+ connect(value, SIGNAL(textChanged(const QString&)), this, SLOT(slotUpdateButtonState()));
+ connect(value, SIGNAL(valueChanged(const QString&)), this, SLOT(slotUpdateTotalAmount()));
+
+ value = new kMyMoneyEdit;
+ // TODO once we have the selected transactions as array of Transaction
+ // we can allow multiple splits for fee and interest
+ value->setResetButtonVisible(false);
+ m_editWidgets["interest-amount"] = value;
+ connect(value, SIGNAL(textChanged(const QString&)), this, SLOT(slotUpdateButtonState()));
+ connect(value, SIGNAL(valueChanged(const QString&)), this, SLOT(slotUpdateTotalAmount()));
+
+ KMyMoneyReconcileCombo* reconcile = new KMyMoneyReconcileCombo;
+ m_editWidgets["status"] = reconcile;
+ connect(reconcile, SIGNAL(itemSelected(const QString&)), this, SLOT(slotUpdateButtonState()));
+
+ KMyMoneyRegister::QWidgetContainer::iterator it_w;
+ for(it_w = m_editWidgets.begin(); it_w != m_editWidgets.end(); ++it_w) {
+ (*it_w)->installEventFilter(this);
+ }
+
+ QLabel* label = new QLabel("", 0);
+ label->setAlignment(Qt::AlignVCenter | Qt::AlignRight | Qt::DontClip);
+ m_editWidgets["total"] = label;
+
+ label = new QLabel("", 0);
+ label->setAlignment(Qt::AlignVCenter | Qt::DontClip);
+ m_editWidgets["total-label"] = label;
+
+ label = new QLabel("", 0);
+ label->setAlignment(Qt::AlignVCenter | Qt::DontClip);
+ m_editWidgets["asset-label"] = label;
+
+ label = new QLabel("", 0);
+ label->setAlignment(Qt::AlignVCenter | Qt::DontClip);
+ m_editWidgets["fee-label"] = label;
+
+ label = new QLabel("", 0);
+ label->setAlignment(Qt::AlignVCenter | Qt::DontClip);
+ m_editWidgets["fee-amount-label"] = label;
+
+ label = new QLabel("", 0);
+ label->setAlignment(Qt::AlignVCenter | Qt::DontClip);
+ m_editWidgets["interest-label"] = label;
+
+ label = new QLabel("", 0);
+ label->setAlignment(Qt::AlignVCenter | Qt::DontClip);
+ m_editWidgets["interest-amount-label"] = label;
+
+ label = new QLabel("", 0);
+ label->setAlignment(Qt::AlignVCenter | Qt::DontClip);
+ m_editWidgets["price-label"] = label;
+
+ label = new QLabel("", 0);
+ label->setAlignment(Qt::AlignVCenter | Qt::DontClip);
+ m_editWidgets["shares-label"] = label;
+
+ // if we don't have more than 1 selected transaction, we don't need
+ // the "don't change" item in some of the combo widgets
+ if(m_transactions.count() < 2) {
+ reconcile->removeDontCare();
+ }
+}
+
+int InvestTransactionEditor::slotEditFeeSplits(void)
+{
+ return editSplits("fee-account", "fee-amount", m_feeSplits, false, SLOT(slotEditFeeSplits()));
+}
+
+int InvestTransactionEditor::slotEditInterestSplits(void)
+{
+ return editSplits("interest-account", "interest-amount", m_interestSplits, true, SLOT(slotEditInterestSplits()));
+}
+
+int InvestTransactionEditor::editSplits(const QString& categoryWidgetName, const QString& amountWidgetName, QValueList<MyMoneySplit>& splits, bool isIncome, const char* slotEditSplits)
+{
+ int rc = QDialog::Rejected;
+
+ if(!m_openEditSplits) {
+ // only get in here in a single instance
+ m_openEditSplits = true;
+
+ // force focus change to update all data
+ KMyMoneyCategory* category = dynamic_cast<KMyMoneyCategory*>(m_editWidgets[categoryWidgetName]);
+ QWidget* w = category->splitButton();
+ if(w)
+ w->setFocus();
+
+ kMyMoneyEdit* amount = dynamic_cast<kMyMoneyEdit*>(haveWidget(amountWidgetName));
+
+ MyMoneyTransaction transaction;
+ transaction.setCommodity(m_currency.id());
+ if(splits.count() == 0 && category->selectedItem()) {
+ MyMoneySplit s;
+ s.setAccountId(category->selectedItem());
+ s.setShares(amount->value());
+ s.setValue(s.shares());
+ splits << s;
+ }
+ // use the transactions commodity as the currency indicator for the splits
+ // this is used to allow some useful setting for the fractions in the amount fields
+ try {
+ d->m_phonyAccount.setCurrencyId(m_transaction.commodity());
+ d->m_phonyAccount.fraction(MyMoneyFile::instance()->security(m_transaction.commodity()));
+ } catch(MyMoneyException *e) {
+ qDebug("Unable to setup precision");
+ delete e;
+ }
+
+ if(createPseudoTransaction(transaction, splits)) {
+ MyMoneyMoney value;
+
+ KSplitTransactionDlg* dlg = new KSplitTransactionDlg(transaction,
+ d->m_phonySplit,
+ d->m_phonyAccount,
+ false,
+ isIncome,
+ 0,
+ m_priceInfo,
+ m_regForm);
+ // connect(dlg, SIGNAL(newCategory(MyMoneyAccount&)), this, SIGNAL(newCategory(MyMoneyAccount&)));
+
+ if((rc = dlg->exec()) == QDialog::Accepted) {
+ transaction = dlg->transaction();
+ // collect splits out of the transaction
+ splits.clear();
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ MyMoneyMoney fees;
+ for(it_s = transaction.splits().begin(); it_s != transaction.splits().end(); ++it_s) {
+ if((*it_s).accountId() == d->m_phonyAccount.id())
+ continue;
+ splits << *it_s;
+ fees += (*it_s).shares();
+ }
+ if(isIncome)
+ fees = -fees;
+
+ QString categoryId;
+ setupCategoryWidget(category, splits, categoryId, slotEditSplits);
+ amount->setValue(fees);
+ slotUpdateTotalAmount();
+ }
+
+ delete dlg;
+ }
+
+ // focus jumps into the memo field
+ if((w = haveWidget("memo")) != 0) {
+ w->setFocus();
+ }
+
+ m_openEditSplits = false;
+ }
+ return rc;
+}
+
+bool InvestTransactionEditor::createPseudoTransaction(MyMoneyTransaction& t, const QValueList<MyMoneySplit>& splits)
+{
+ t.removeSplits();
+
+ MyMoneySplit split;
+ split.setAccountId(d->m_phonyAccount.id());
+ split.setValue(-subtotal(splits));
+ split.setShares(split.value());
+ t.addSplit(split);
+ d->m_phonySplit = split;
+
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = splits.begin(); it_s != splits.end(); ++it_s) {
+ split = *it_s;
+ split.clearId();
+ t.addSplit(split);
+ }
+ return true;
+}
+
+void InvestTransactionEditor::slotCreateSecurity(const QString& name, QString& id)
+{
+ MyMoneyAccount acc;
+ QRegExp exp("([^:]+)");
+ if(exp.search(name) != -1) {
+ acc.setName(exp.cap(1));
+
+ emit createSecurity(acc, m_account);
+
+ // return id
+ id = acc.id();
+
+ if(!id.isEmpty()) {
+ slotUpdateSecurity(id);
+ }
+ }
+}
+
+void InvestTransactionEditor::slotCreateFeeCategory(const QString& name, QString& id)
+{
+ MyMoneyAccount acc;
+ acc.setName(name);
+
+ emit createCategory(acc, MyMoneyFile::instance()->expense());
+
+ // return id
+ id = acc.id();
+}
+
+void InvestTransactionEditor::slotUpdateFeeCategory(const QString& id)
+{
+ haveWidget("fee-amount")->setDisabled(id.isEmpty());
+}
+
+void InvestTransactionEditor::slotUpdateFeeVisibility(const QString& txt)
+{
+ haveWidget("fee-amount")->setHidden(txt.isEmpty());
+ QWidget* w = haveWidget("fee-amount-label");
+ if(w)
+ w->setShown(haveWidget("fee-amount")->isVisible());
+}
+
+void InvestTransactionEditor::slotUpdateInterestCategory(const QString& id)
+{
+ haveWidget("interest-amount")->setDisabled(id.isEmpty());
+}
+
+void InvestTransactionEditor::slotUpdateInterestVisibility(const QString& txt)
+{
+ KMyMoneyCategory* interest = dynamic_cast<KMyMoneyCategory*>(haveWidget("interest-account"));
+ QWidget* w = haveWidget("interest-amount-label");
+
+ if(dynamic_cast<Reinvest*>(d->m_activity)) {
+ interest->splitButton()->hide();
+ haveWidget("interest-amount")->setHidden(true);
+ // for the reinvest case, we don't ever hide the label do avoid a shine through
+ // of the underlying transaction data.
+ w = 0;
+ } else {
+ haveWidget("interest-amount")->setHidden(txt.isEmpty());
+ // FIXME once we can handle split interest, we need to uncomment the next line
+ // interest->splitButton()->show();
+ }
+
+ if(w)
+ w->setShown(haveWidget("interest-amount")->isVisible());
+}
+
+void InvestTransactionEditor::slotCreateInterestCategory(const QString& name, QString& id)
+{
+ MyMoneyAccount acc;
+ acc.setName(name);
+
+ emit createCategory(acc, MyMoneyFile::instance()->income());
+
+ // return id
+ id = acc.id();
+}
+
+void InvestTransactionEditor::slotReloadEditWidgets(void)
+{
+ KMyMoneyCategory* interest = dynamic_cast<KMyMoneyCategory*>(haveWidget("interest-account"));
+ KMyMoneyCategory* fees = dynamic_cast<KMyMoneyCategory*>(haveWidget("fee-account"));
+ KMyMoneySecurity* security = dynamic_cast<KMyMoneySecurity*>(haveWidget("security"));
+
+ AccountSet aSet;
+ QString id;
+
+ // interest-account
+ aSet.clear();
+ aSet.addAccountGroup(MyMoneyAccount::Income);
+ aSet.load(interest->selector());
+ setupCategoryWidget(interest, m_interestSplits, id, SLOT(slotEditInterestSplits()));
+
+ // fee-account
+ aSet.clear();
+ aSet.addAccountGroup(MyMoneyAccount::Expense);
+ aSet.load(fees->selector());
+ setupCategoryWidget(fees, m_feeSplits, id, SLOT(slotEditFeeSplits()));
+
+ // security
+ aSet.clear();
+ aSet.load(security->selector(), i18n("Security"), m_account.accountList(), true);
+}
+
+void InvestTransactionEditor::loadEditWidgets(KMyMoneyRegister::Action /* action */)
+{
+ QString id;
+
+ kMyMoneyDateInput* postDate = dynamic_cast<kMyMoneyDateInput*>(haveWidget("postdate"));
+ KMyMoneyReconcileCombo* reconcile = dynamic_cast<KMyMoneyReconcileCombo*>(haveWidget("status"));
+ KMyMoneySecurity* security = dynamic_cast<KMyMoneySecurity*>(haveWidget("security"));
+ KMyMoneyActivityCombo* activity = dynamic_cast<KMyMoneyActivityCombo*>(haveWidget("activity"));
+ KMyMoneyCategory* asset = dynamic_cast<KMyMoneyCategory*>(haveWidget("asset-account"));
+ KTextEdit* memo = dynamic_cast<KTextEdit*>(m_editWidgets["memo"]);
+ kMyMoneyEdit* value;
+ KMyMoneyCategory* interest = dynamic_cast<KMyMoneyCategory*>(haveWidget("interest-account"));
+ KMyMoneyCategory* fees = dynamic_cast<KMyMoneyCategory*>(haveWidget("fee-account"));
+
+ // check if the current transaction has a reference to an equity account
+ bool haveEquityAccount = false;
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = m_transaction.splits().begin(); !haveEquityAccount && it_s != m_transaction.splits().end(); ++it_s) {
+ MyMoneyAccount acc = MyMoneyFile::instance()->account((*it_s).accountId());
+ if(acc.accountType() == MyMoneyAccount::Equity)
+ haveEquityAccount = true;
+ }
+
+ // asset-account
+ AccountSet aSet;
+ aSet.clear();
+ aSet.addAccountType(MyMoneyAccount::Checkings);
+ aSet.addAccountType(MyMoneyAccount::Savings);
+ aSet.addAccountType(MyMoneyAccount::Cash);
+ aSet.addAccountType(MyMoneyAccount::Asset);
+ aSet.addAccountType(MyMoneyAccount::Currency);
+ aSet.addAccountType(MyMoneyAccount::CreditCard);
+ if(KMyMoneyGlobalSettings::expertMode() || haveEquityAccount)
+ aSet.addAccountGroup(MyMoneyAccount::Equity);
+ aSet.load(asset->selector());
+
+ // security
+ security->setSuppressObjectCreation(false); // allow object creation on the fly
+ aSet.clear();
+ aSet.load(security->selector(), i18n("Security"), m_account.accountList(), true);
+
+ if(!isMultiSelection()) {
+ // date
+ if(m_transaction.postDate().isValid())
+ postDate->setDate(m_transaction.postDate());
+ else if(m_lastPostDate.isValid())
+ postDate->setDate(m_lastPostDate);
+ else
+ postDate->setDate(QDate::currentDate());
+
+ // security (but only if it's not the investment account)
+ if(m_split.accountId() != m_account.id()) {
+ security->completion()->setSelected(m_split.accountId());
+ security->slotItemSelected(m_split.accountId());
+ }
+
+ // activity
+ activity->setActivity(d->m_activity->type());
+ slotUpdateActivity(activity->activity());
+
+ asset->completion()->setSelected(m_assetAccountSplit.accountId());
+ asset->slotItemSelected(m_assetAccountSplit.accountId());
+
+ // interest-account
+ aSet.clear();
+ aSet.addAccountGroup(MyMoneyAccount::Income);
+ aSet.load(interest->selector());
+ setupCategoryWidget(interest, m_interestSplits, id, SLOT(slotEditInterestSplits()));
+ slotUpdateInterestVisibility(interest->currentText());
+
+ // fee-account
+ aSet.clear();
+ aSet.addAccountGroup(MyMoneyAccount::Expense);
+ aSet.load(fees->selector());
+ setupCategoryWidget(fees, m_feeSplits, id, SLOT(slotEditFeeSplits()));
+ slotUpdateFeeVisibility(fees->currentText());
+
+ // memo
+ memo->setText(m_split.memo());
+
+ // shares
+ // don't set the value if the number of shares is zero so that
+ // we can see the hint
+ value = dynamic_cast<kMyMoneyEdit*>(haveWidget("shares"));
+ if(typeid(*(d->m_activity)) != typeid(Invest::Split(this)))
+ value->setPrecision(MyMoneyMoney::denomToPrec(m_security.smallestAccountFraction()));
+ else
+ value->setPrecision(-1);
+
+ if(!m_split.shares().isZero())
+ value->setValue(m_split.shares().abs());
+
+ // price
+ updatePriceMode(m_split);
+
+ // fee amount
+ value = dynamic_cast<kMyMoneyEdit*>(haveWidget("fee-amount"));
+ value->setValue(subtotal(m_feeSplits));
+
+ // interest amount
+ value = dynamic_cast<kMyMoneyEdit*>(haveWidget("interest-amount"));
+ value->setValue(-subtotal(m_interestSplits));
+
+ // total
+ slotUpdateTotalAmount();
+
+ // status
+ if(m_split.reconcileFlag() == MyMoneySplit::Unknown)
+ m_split.setReconcileFlag(MyMoneySplit::NotReconciled);
+ reconcile->setState(m_split.reconcileFlag());
+
+ } else {
+ postDate->loadDate(QDate());
+ reconcile->setState(MyMoneySplit::Unknown);
+ memo->setText(QString());
+
+ // We don't allow to change the activity
+ activity->setActivity(d->m_activity->type());
+ slotUpdateActivity(activity->activity());
+ activity->setDisabled(true);
+
+ // scan the list of selected transactions and check that they have
+ // the same activity.
+ KMyMoneyRegister::SelectedTransactions::iterator it_t = m_transactions.begin();
+ const QString& action = m_item->split().action();
+ bool isNegative = m_item->split().shares().isNegative();
+ bool allSameActivity = true;
+ for(it_t = m_transactions.begin(); allSameActivity && (it_t != m_transactions.end()); ++it_t) {
+ allSameActivity = (action == (*it_t).split().action() && (*it_t).split().shares().isNegative() == isNegative);
+ }
+
+ QStringList fields;
+ fields << "shares" << "price" << "fee-amount" << "interest-amount";
+ QStringList::const_iterator it_f;
+ for(it_f = fields.begin(); it_f != fields.end(); ++it_f) {
+ value = dynamic_cast<kMyMoneyEdit*>(haveWidget((*it_f)));
+ value->setText("");
+ value->setAllowEmpty();
+ }
+
+ // if we have transactions with different activities, disable some more widgets
+ if(!allSameActivity) {
+ fields << "asset-account" << "fee-account" << "interest-account";
+ QStringList::const_iterator it_f;
+ for(it_f = fields.begin(); it_f != fields.end(); ++it_f) {
+ haveWidget(*it_f)->setDisabled(true);
+ }
+ }
+ }
+}
+
+QWidget* InvestTransactionEditor::firstWidget(void) const
+{
+ return 0; // let the creator use the first widget in the tab order
+}
+
+bool InvestTransactionEditor::isComplete(QString& reason) const
+{
+ reason = QString();
+ // reason.clear(); // for Qt4
+ return d->m_activity->isComplete(reason);
+}
+
+MyMoneyMoney InvestTransactionEditor::subtotal(const QValueList<MyMoneySplit>& splits) const
+{
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ MyMoneyMoney sum;
+
+ for(it_s = splits.begin(); it_s != splits.end(); ++it_s) {
+ sum += (*it_s).value();
+ }
+
+ return sum;
+}
+
+void InvestTransactionEditor::slotUpdateSecurity(const QString& stockId)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyAccount stock = file->account(stockId);
+ m_security = file->security(stock.currencyId());
+ m_currency = file->security(m_security.tradingCurrency());
+ bool currencyKnown = !m_currency.id().isEmpty();
+ if(!currencyKnown) {
+ m_currency.setTradingSymbol("???");
+ } else {
+ if(typeid(*(d->m_activity)) != typeid(Invest::Split(this))) {
+ dynamic_cast<kMyMoneyEdit*>(haveWidget("shares"))->setPrecision(MyMoneyMoney::denomToPrec(m_security.smallestAccountFraction()));
+ } else {
+ dynamic_cast<kMyMoneyEdit*>(haveWidget("shares"))->setPrecision(-1);
+ }
+ }
+
+ updatePriceMode();
+
+ d->m_activity->preloadAssetAccount();
+
+ haveWidget("shares")->setEnabled(currencyKnown);
+ haveWidget("price")->setEnabled(currencyKnown);
+ haveWidget("fee-amount")->setEnabled(currencyKnown);
+ haveWidget("interest-amount")->setEnabled(currencyKnown);
+
+ slotUpdateTotalAmount();
+}
+
+void InvestTransactionEditor::totalAmount(MyMoneyMoney& amount) const
+{
+ KMyMoneyActivityCombo* activityCombo = dynamic_cast<KMyMoneyActivityCombo*>(haveWidget("activity"));
+ kMyMoneyEdit* sharesEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("shares"));
+ kMyMoneyEdit* priceEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("price"));
+ kMyMoneyEdit* feesEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("fee-amount"));
+ kMyMoneyEdit* interestEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("interest-amount"));
+
+ if(priceMode() == InvestTransactionEditor::PricePerTransaction)
+ amount = priceEdit->value().abs();
+ else
+ amount = sharesEdit->value().abs() * priceEdit->value().abs();
+
+ if(feesEdit->isVisible()) {
+ MyMoneyMoney fee = feesEdit->value();
+ MyMoneyMoney factor(-1,1);
+ switch(activityCombo->activity()) {
+ case MyMoneySplit::BuyShares:
+ case MyMoneySplit::ReinvestDividend:
+ factor = MyMoneyMoney(1,1);
+ break;
+ default:
+ break;
+ }
+ amount += (fee * factor);
+ }
+
+ if(interestEdit->isVisible()) {
+ MyMoneyMoney interest = interestEdit->value();
+ MyMoneyMoney factor(1,1);
+ switch(activityCombo->activity()) {
+ case MyMoneySplit::BuyShares:
+ factor = MyMoneyMoney(-1,1);
+ break;
+ default:
+ break;
+ }
+ amount += (interest * factor);
+ }
+}
+
+void InvestTransactionEditor::slotUpdateTotalAmount(void)
+{
+ QLabel* total = dynamic_cast<QLabel*>(haveWidget("total"));
+
+ if(total && total->isVisible()) {
+ MyMoneyMoney amount;
+ totalAmount(amount);
+ total->setText(amount.formatMoney(m_currency.tradingSymbol(), MyMoneyMoney::denomToPrec(m_security.smallestAccountFraction())));
+ }
+}
+
+void InvestTransactionEditor::slotUpdateActivity(MyMoneySplit::investTransactionTypeE activity)
+{
+ // create new activity object if required
+ activityFactory(activity);
+
+ KMyMoneyCategory* cat;
+
+ // hide all dynamic widgets (make sure to use the parentWidget for the
+ // category widgets)
+ haveWidget("interest-account")->parentWidget()->hide();
+ haveWidget("fee-account")->parentWidget()->hide();
+
+ QStringList dynwidgets;
+ dynwidgets << "total-label" << "asset-label" << "fee-label" << "fee-amount-label" << "interest-label" << "interest-amount-label" << "price-label" << "shares-label";
+
+ // hiding labels works by clearing them. hide() does not do the job
+ // as the underlying text in the QTable object will shine through
+ QStringList::const_iterator it_s;
+ for(it_s = dynwidgets.begin(); it_s != dynwidgets.end(); ++it_s) {
+ QLabel* w = dynamic_cast<QLabel*>(haveWidget(*it_s));
+ if(w)
+ w->setText(" ");
+ }
+
+ // real widgets can be hidden
+ dynwidgets.clear();
+ dynwidgets << "asset-account" << "interest-amount" << "fee-amount" << "shares" << "price" << "total";
+
+ for(it_s = dynwidgets.begin(); it_s != dynwidgets.end(); ++it_s) {
+ QWidget* w = haveWidget(*it_s);
+ if(w)
+ w->hide();
+ }
+
+ d->m_activity->showWidgets();
+
+ d->m_activity->preloadAssetAccount();
+
+ cat = dynamic_cast<KMyMoneyCategory*>(haveWidget("interest-account"));
+ if(cat->parentWidget()->isVisible())
+ slotUpdateInterestVisibility(cat->currentText());
+
+ cat = dynamic_cast<KMyMoneyCategory*>(haveWidget("fee-account"));
+ if(cat->parentWidget()->isVisible())
+ slotUpdateFeeVisibility(cat->currentText());
+}
+
+InvestTransactionEditor::priceModeE InvestTransactionEditor::priceMode(void) const
+{
+ priceModeE mode = static_cast<priceModeE>(0);
+ KMyMoneySecurity* sec = dynamic_cast<KMyMoneySecurity*>(m_editWidgets["security"]);
+ QString accId;
+ if(!sec->currentText().isEmpty()) {
+ accId = sec->selectedItem();
+ if(accId.isEmpty())
+ accId = m_account.id();
+ }
+ while(!accId.isEmpty() && mode == 0) {
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(accId);
+ if(acc.value("priceMode").isEmpty())
+ accId = acc.parentAccountId();
+ else
+ mode = static_cast<priceModeE>(acc.value("priceMode").toInt());
+ }
+
+ // if it's still <default> then use that default
+ if(mode == 0)
+ mode = PricePerShare;
+ return mode;
+}
+
+bool InvestTransactionEditor::setupPrice(const MyMoneyTransaction& t, MyMoneySplit& split)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyAccount acc = file->account(split.accountId());
+ MyMoneySecurity toCurrency(file->security(acc.currencyId()));
+ int fract = acc.fraction();
+
+ if(acc.currencyId() != t.commodity()) {
+ QMap<QString, MyMoneyMoney>::Iterator it_p;
+ QString key = t.commodity() + "-" + acc.currencyId();
+ it_p = m_priceInfo.find(key);
+
+ // if it's not found, then collect it from the user first
+ MyMoneyMoney price;
+ if(it_p == m_priceInfo.end()) {
+ MyMoneySecurity fromCurrency = file->security(t.commodity());
+ MyMoneyMoney fromValue, toValue;
+
+ fromValue = split.value();
+ MyMoneyPrice priceInfo = MyMoneyFile::instance()->price(fromCurrency.id(), toCurrency.id());
+ toValue = split.value() * priceInfo.rate(toCurrency.id());
+
+ KCurrencyCalculator calc(fromCurrency,
+ toCurrency,
+ fromValue,
+ toValue,
+ t.postDate(),
+ fract,
+ m_regForm, "currencyCalculator");
+
+ if(calc.exec() == QDialog::Rejected) {
+ return false;
+ }
+ price = calc.price();
+ m_priceInfo[key] = price;
+ } else {
+ price = (*it_p);
+ }
+
+ // update shares if the transaction commodity is the currency
+ // of the current selected account
+ split.setShares((split.value() * price).convert(fract));
+ } else {
+ split.setShares(split.value().convert(fract));
+ }
+
+ return true;
+}
+
+bool InvestTransactionEditor::createTransaction(MyMoneyTransaction& t, const MyMoneyTransaction& torig, const MyMoneySplit& sorig, bool /* skipPriceDialog */)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ // we start with the previous values, make sure we can add them later on
+ t = torig;
+ MyMoneySplit s0 = sorig;
+ s0.clearId();
+
+ KMyMoneySecurity* sec = dynamic_cast<KMyMoneySecurity*>(m_editWidgets["security"]);
+ if(!isMultiSelection() || (isMultiSelection() && !sec->currentText().isEmpty())) {
+ QString securityId = sec->selectedItem();
+ if(!securityId.isEmpty()) {
+ s0.setAccountId(securityId);
+ MyMoneyAccount stockAccount = file->account(securityId);
+ QString currencyId = stockAccount.currencyId();
+ MyMoneySecurity security = file->security(currencyId);
+
+ t.setCommodity(security.tradingCurrency());
+ } else {
+ s0.setAccountId(m_account.id());
+ t.setCommodity(m_account.currencyId());
+ }
+ }
+
+ // extract price info from original transaction
+ m_priceInfo.clear();
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ if(!torig.id().isEmpty()) {
+ for(it_s = torig.splits().begin(); it_s != torig.splits().end(); ++it_s) {
+ if((*it_s).id() != sorig.id()) {
+ MyMoneyAccount cat = file->account((*it_s).accountId());
+ if(cat.currencyId() != m_account.currencyId()) {
+ if(!(*it_s).shares().isZero() && !(*it_s).value().isZero()) {
+ m_priceInfo[cat.currencyId()] = ((*it_s).shares() / (*it_s).value()).reduce();
+ }
+ }
+ }
+ }
+ }
+
+ t.removeSplits();
+
+ kMyMoneyDateInput* postDate = dynamic_cast<kMyMoneyDateInput*>(m_editWidgets["postdate"]);
+ if(postDate->date().isValid()) {
+ t.setPostDate(postDate->date());
+ }
+
+ // memo and number field are special: if we have multiple transactions selected
+ // and the edit field is empty, we treat it as "not modified".
+ // FIXME a better approach would be to have a 'dirty' flag with the widgets
+ // which identifies if the originally loaded value has been modified
+ // by the user
+ KTextEdit* memo = dynamic_cast<KTextEdit*>(m_editWidgets["memo"]);
+ if(memo) {
+ if(!isMultiSelection() || (isMultiSelection() && !memo->text().isEmpty() ) )
+ s0.setMemo(memo->text());
+ }
+
+ MyMoneySplit assetAccountSplit;
+ QValueList<MyMoneySplit> feeSplits;
+ QValueList<MyMoneySplit> interestSplits;
+ MyMoneySecurity security, currency;
+ MyMoneySplit::investTransactionTypeE transactionType;
+
+ // extract the splits from the original transaction
+ dissectTransaction(torig, sorig,
+ assetAccountSplit,
+ feeSplits,
+ interestSplits,
+ security,
+ currency,
+ transactionType);
+
+ // check if the trading currency is the same if the security has changed
+ // in case it differs, check that we have a price (request from user)
+ // and convert all splits
+ // TODO
+
+ // do the conversions here
+ // TODO
+
+ // keep the current activity object and create a new one
+ // that can be destroyed later on
+ Activity* activity = d->m_activity;
+ d->m_activity = 0; // make sure we create a new one
+ activityFactory(activity->type());
+
+ // if the activity is not set in the combo widget, we keep
+ // the one which is used in the original transaction
+ KMyMoneyActivityCombo* activityCombo = dynamic_cast<KMyMoneyActivityCombo*>(haveWidget("activity"));
+ if(activityCombo->activity() == MyMoneySplit::UnknownTransactionType) {
+ activityFactory(transactionType);
+ }
+
+ // if we mark the split reconciled here, we'll use today's date if no reconciliation date is given
+ KMyMoneyReconcileCombo* status = dynamic_cast<KMyMoneyReconcileCombo*>(m_editWidgets["status"]);
+ if(status->state() != MyMoneySplit::Unknown)
+ s0.setReconcileFlag(status->state());
+
+ if(s0.reconcileFlag() == MyMoneySplit::Reconciled && !s0.reconcileDate().isValid())
+ s0.setReconcileDate(QDate::currentDate());
+
+ // call the creation logic for the current selected activity
+ bool rc = d->m_activity->createTransaction(t, s0, assetAccountSplit, feeSplits, m_feeSplits, interestSplits, m_interestSplits, security, currency);
+
+ // now switch back to the original activity
+ delete d->m_activity;
+ d->m_activity = activity;
+
+ // add the splits to the transaction
+ if(rc) {
+ if(!assetAccountSplit.accountId().isEmpty()) {
+ assetAccountSplit.clearId();
+ t.addSplit(assetAccountSplit);
+ }
+
+ t.addSplit(s0);
+
+ QValueList<MyMoneySplit>::iterator it_s;
+ for(it_s = feeSplits.begin(); it_s != feeSplits.end(); ++it_s) {
+ (*it_s).clearId();
+ t.addSplit(*it_s);
+ }
+
+ for(it_s = interestSplits.begin(); it_s != interestSplits.end(); ++it_s) {
+ (*it_s).clearId();
+ t.addSplit(*it_s);
+ }
+ }
+
+ // adjust the value to the smallestAccountFraction found
+ // for the commodity of the transaction.
+ for(it_s = t.splits().begin(); it_s != t.splits().end(); ++it_s) {
+ MyMoneySplit s = (*it_s);
+ s.setValue((*it_s).value().convert(currency.smallestAccountFraction()));
+ t.modifySplit(s);
+ }
+
+ return rc;
+}
+
+void InvestTransactionEditor::updatePriceMode(const MyMoneySplit& split)
+{
+ QLabel* label = dynamic_cast<QLabel*>(haveWidget("price-label"));
+ if(label) {
+ kMyMoneyEdit* sharesEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("shares"));
+ kMyMoneyEdit* priceEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("price"));
+ MyMoneyMoney price;
+ if(!split.id().isEmpty())
+ price = split.price().reduce();
+ else
+ price = priceEdit->value().abs();
+
+ if(priceMode() == PricePerTransaction && label->text() != i18n("Price")) {
+ label->setText(i18n("Price"));
+ if(!sharesEdit->value().isZero())
+ priceEdit->setValue(sharesEdit->value().abs() * price);
+
+ } else if(priceMode() == PricePerShare && label->text() == i18n("Price")) {
+ label->setText(i18n("Price/Share"));
+ if(!sharesEdit->value().isZero())
+ priceEdit->setValue(price / sharesEdit->value().abs());
+
+ } else if(priceMode() == PricePerTransaction) {
+ priceEdit->setValue(sharesEdit->value().abs() * price);
+
+ } else
+ priceEdit->setValue(price);
+ }
+}
+
+void InvestTransactionEditor::setupFinalWidgets(void)
+{
+ addFinalWidget(haveWidget("memo"));
+}
+
+#include "investtransactioneditor.moc"
+
diff --git a/kmymoney2/dialogs/investtransactioneditor.h b/kmymoney2/dialogs/investtransactioneditor.h
new file mode 100644
index 0000000..4d56697
--- /dev/null
+++ b/kmymoney2/dialogs/investtransactioneditor.h
@@ -0,0 +1,173 @@
+/***************************************************************************
+ investtransactioneditor.h
+ ----------
+ begin : Fri Dec 15 2006
+ copyright : (C) 2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef INVESTMENTTRANSACTIONEDITOR_H
+#define INVESTMENTTRANSACTIONEDITOR_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/transactioneditor.h>
+
+class InvestTransactionEditor : public TransactionEditor
+{
+ friend class InvestTransactionEditorPrivate;
+
+ Q_OBJECT
+public:
+ typedef enum {
+ PricePerShare = 1,
+ PricePerTransaction
+ } priceModeE;
+
+ InvestTransactionEditor();
+ InvestTransactionEditor(TransactionEditorContainer* regForm, KMyMoneyRegister::InvestTransaction* item, const KMyMoneyRegister::SelectedTransactions& list, const QDate& lastPostDate);
+ virtual ~InvestTransactionEditor();
+
+ /**
+ * This method returns information about the completeness of the data
+ * entered. This can be used to control the availability of the
+ * 'Enter transaction' action.
+ *
+ * @retval true if entering the transaction into the engine
+ * @retval false if not enough information is present to enter the
+ * transaction into the engine
+ *
+ * @param reason will be filled with a string about the reason why the
+ * completeness is not reached. Empty if the return value
+ * is @c true.
+ *
+ * @sa transactionDataSufficient()
+ */
+ virtual bool isComplete(QString& reason) const;
+
+ virtual QWidget* firstWidget(void) const;
+
+ virtual bool fixTransactionCommodity(const MyMoneyAccount& /* account */) { return true; }
+
+ void totalAmount(MyMoneyMoney& amount) const;
+
+ static void dissectTransaction(const MyMoneyTransaction& transaction, const MyMoneySplit& split, MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& feeSplits, QValueList<MyMoneySplit>& interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency, MyMoneySplit::investTransactionTypeE& transactionType);
+
+ bool setupPrice(const MyMoneyTransaction& t, MyMoneySplit& split);
+
+ /**
+ * This method creates a transaction based on the contents of the current widgets,
+ * the splits in m_split in single selection mode or an existing transaction/split
+ * and the contents of the widgets in multi selection mode.
+ *
+ * The split referencing the current account is returned as the first split in the
+ * transaction's split list.
+ *
+ * @param t reference to created transaction
+ * @param torig the original transaction
+ * @param sorig the original split
+ *
+ * @param skipPriceDialog if @p true the user will not be requested for price information
+ * (defaults to @p false)
+ *
+ * @return @p false if aborted by user, @p true otherwise
+ *
+ * @note Usually not used directly. If unsure, use enterTransactions() instead.
+ */
+ bool createTransaction(MyMoneyTransaction& t, const MyMoneyTransaction& torig, const MyMoneySplit& sorig, bool skipPriceDialog = false);
+
+ priceModeE priceMode(void) const;
+
+ const MyMoneySecurity& security(void) const { return m_security; }
+
+protected slots:
+ void slotCreateSecurity(const QString& name, QString& id);
+ void slotCreateFeeCategory(const QString& name, QString& id);
+ void slotCreateInterestCategory(const QString& name, QString& id);
+
+ int slotEditInterestSplits(void);
+ int slotEditFeeSplits(void);
+ void slotReloadEditWidgets(void);
+
+ void slotUpdateActivity(MyMoneySplit::investTransactionTypeE);
+ void slotUpdateSecurity(const QString& stockId);
+ void slotUpdateInterestCategory(const QString& id);
+ void slotUpdateInterestVisibility(const QString&);
+ void slotUpdateFeeCategory(const QString& id);
+ void slotUpdateFeeVisibility(const QString&);
+ void slotUpdateTotalAmount(void);
+
+protected:
+ /**
+ * This method creates all necessary widgets for this transaction editor.
+ * All signals will be connected to the relevant slots.
+ */
+ void createEditWidgets(void);
+
+ /**
+ * This method (re-)loads the widgets with the transaction information
+ * contained in @a m_transaction and @a m_split.
+ *
+ * @param action preset the edit wigdets for @a action if no transaction
+ * is present
+ */
+ void loadEditWidgets(KMyMoneyRegister::Action action = KMyMoneyRegister::ActionNone);
+
+ void activityFactory(MyMoneySplit::investTransactionTypeE type);
+
+ MyMoneyMoney subtotal(const QValueList<MyMoneySplit>& splits) const;
+
+ /**
+ * This method creates a transaction to be used for the split fee/interest editor.
+ * It has a reference to a phony account and the splits contained in @a splits .
+ */
+ bool createPseudoTransaction(MyMoneyTransaction& t, const QValueList<MyMoneySplit>& splits);
+
+ /**
+ * Convenience method used by slotEditInterestSplits() and slotEditFeeSplits().
+ *
+ * @param categoryWidgetName name of the category widget
+ * @param amountWidgetName name of the amount widget
+ * @param splits the splits that make up the transaction to be edited
+ * @param isIncome @c false for fees, @c true for interest
+ * @param slotEditSplits name of the slot to be connected to the focusIn signal of the
+ * category widget named @p categoryWidgetName in case of multiple splits
+ * in @p splits .
+ */
+ int editSplits(const QString& categoryWidgetName, const QString& amountWidgetName, QValueList<MyMoneySplit>& splits, bool isIncome, const char* slotEditSplits);
+
+ void updatePriceMode(const MyMoneySplit& split = MyMoneySplit());
+
+ void setupFinalWidgets(void);
+
+private:
+ MyMoneySplit m_assetAccountSplit;
+ QValueList<MyMoneySplit> m_interestSplits;
+ QValueList<MyMoneySplit> m_feeSplits;
+ MyMoneySecurity m_security;
+ MyMoneySecurity m_currency;
+ MyMoneySplit::investTransactionTypeE m_transactionType;
+ /// \internal d-pointer class.
+ class Private;
+ /// \internal d-pointer instance.
+ Private* const d;
+};
+
+#endif
diff --git a/kmymoney2/dialogs/kaccountselectdlg.cpp b/kmymoney2/dialogs/kaccountselectdlg.cpp
new file mode 100644
index 0000000..0b172f0
--- /dev/null
+++ b/kmymoney2/dialogs/kaccountselectdlg.cpp
@@ -0,0 +1,192 @@
+/***************************************************************************
+ kaccountselectdlg.cpp - description
+ -------------------
+ begin : Mon Feb 10 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlabel.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kconfig.h>
+#include <kglobal.h>
+#include <kpushbutton.h>
+#include <kmessagebox.h>
+#include <kiconloader.h>
+#include <kguiitem.h>
+#include <kactivelabel.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kaccountselectdlg.h"
+#include <kmymoney/mymoneyinstitution.h>
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/kmymoneycategory.h>
+#include "../widgets/kmymoneyaccountselector.h"
+
+#include <../kmymoney2.h>
+
+KAccountSelectDlg::KAccountSelectDlg(const KMyMoneyUtils::categoryTypeE accountType, const QString& purpose, QWidget *parent, const char *name )
+ : KAccountSelectDlgDecl(parent, name),
+ m_purpose(purpose),
+ m_accountType(accountType),
+ m_aborted(false)
+{
+ // Hide the abort button. It needs to be shown on request by the caller
+ // using showAbortButton()
+ m_kButtonAbort->hide();
+
+ slotReloadWidget();
+
+ KIconLoader* il = KGlobal::iconLoader();
+ KGuiItem skipButtonItem( i18n( "&Skip" ),
+ QIconSet(il->loadIcon("redo", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Skip this transaction"),
+ i18n("Use this to skip importing this transaction and proceed with the next one."));
+ m_qbuttonCancel->setGuiItem(skipButtonItem);
+
+ KGuiItem createButtenItem( i18n( "&Create..." ),
+ QIconSet(il->loadIcon("filenew", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Create a new account/category"),
+ i18n("Use this to add a new account/category to the file"));
+ m_createButton->setGuiItem(createButtenItem);
+ m_qbuttonOk->setGuiItem(KStdGuiItem::ok());
+
+ KGuiItem abortButtenItem( i18n("&Abort" ),
+ QIconSet(il->loadIcon("stop", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Abort the import operation and dismiss all changes"),
+ i18n("Use this to abort the import. Your financial data will be in the state before you started the QIF import."));
+ m_kButtonAbort->setGuiItem(abortButtenItem);
+
+
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotReloadWidget()));
+
+ connect(m_createButton, SIGNAL(clicked()), this, SLOT(slotCreateAccount()));
+ connect(m_qbuttonOk, SIGNAL(clicked()), this, SLOT(accept()));
+ connect(m_qbuttonCancel, SIGNAL(clicked()), this, SLOT(reject()));
+ connect(m_kButtonAbort, SIGNAL(clicked()), this, SLOT(abort()));
+}
+
+KAccountSelectDlg::~KAccountSelectDlg()
+{
+}
+
+void KAccountSelectDlg::slotReloadWidget(void)
+{
+ AccountSet set;
+ if(m_accountType & KMyMoneyUtils::asset)
+ set.addAccountGroup(MyMoneyAccount::Asset);
+ if(m_accountType & KMyMoneyUtils::liability)
+ set.addAccountGroup(MyMoneyAccount::Liability);
+ if(m_accountType & KMyMoneyUtils::income)
+ set.addAccountGroup(MyMoneyAccount::Income);
+ if(m_accountType & KMyMoneyUtils::expense)
+ set.addAccountGroup(MyMoneyAccount::Expense);
+ if(m_accountType & KMyMoneyUtils::equity)
+ set.addAccountGroup(MyMoneyAccount::Equity);
+
+ set.load(m_accountSelector->selector());
+}
+
+void KAccountSelectDlg::setDescription(const QString& msg)
+{
+ m_descLabel->setText(msg);
+}
+
+void KAccountSelectDlg::setHeader(const QString& msg)
+{
+ m_headerLabel->setText(msg);
+}
+
+void KAccountSelectDlg::setAccount(const MyMoneyAccount& account, const QString& id)
+{
+ m_account = account;
+ m_accountSelector->setSelectedItem(id);
+}
+
+void KAccountSelectDlg::slotCreateInstitution(void)
+{
+ kmymoney2->slotInstitutionNew();
+}
+
+void KAccountSelectDlg::slotCreateAccount(void)
+{
+ if(!(m_accountType & (KMyMoneyUtils::expense | KMyMoneyUtils::income))) {
+ kmymoney2->slotAccountNew(m_account);
+ if(!m_account.id().isEmpty()) {
+ slotReloadWidget();
+ m_accountSelector->setSelectedItem(m_account.id());
+ accept();
+ }
+ } else {
+ if(m_account.accountType() == MyMoneyAccount::Expense)
+ kmymoney2->createCategory(m_account, MyMoneyFile::instance()->expense());
+ else
+ kmymoney2->createCategory(m_account, MyMoneyFile::instance()->income());
+ if(!m_account.id().isEmpty()) {
+ slotReloadWidget();
+ m_accountSelector->setSelectedItem(m_account.id());
+ accept();
+ }
+ }
+}
+
+void KAccountSelectDlg::abort(void)
+{
+ m_aborted = true;
+ reject();
+}
+
+void KAccountSelectDlg::setMode(const int mode)
+{
+ m_mode = mode ? 1 : 0;
+}
+
+void KAccountSelectDlg::showAbortButton(const bool visible)
+{
+ m_kButtonAbort->setShown(visible);
+}
+
+int KAccountSelectDlg::exec(void)
+{
+ int rc = Rejected;
+
+ if(m_mode == 1) {
+ slotCreateAccount();
+ rc = result();
+ }
+ if(rc != Accepted) {
+ m_createButton->setFocus();
+ rc = KAccountSelectDlgDecl::exec();
+ }
+ return rc;
+}
+
+const QString& KAccountSelectDlg::selectedAccount(void) const
+{
+ return m_accountSelector->selectedItem();
+}
+
+#include "kaccountselectdlg.moc"
diff --git a/kmymoney2/dialogs/kaccountselectdlg.h b/kmymoney2/dialogs/kaccountselectdlg.h
new file mode 100644
index 0000000..271cd0f
--- /dev/null
+++ b/kmymoney2/dialogs/kaccountselectdlg.h
@@ -0,0 +1,155 @@
+/***************************************************************************
+ kaccountselectdlg.h - description
+ -------------------
+ begin : Mon Feb 10 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KACCOUNTSELECTDLG_H
+#define KACCOUNTSELECTDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+#include <qstring.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/kmymoneycombo.h>
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/kmymoneyutils.h>
+#include "../dialogs/kaccountselectdlgdecl.h"
+
+/**
+ * @author Thomas Baumgart
+ */
+
+class KAccountSelectDlg : public KAccountSelectDlgDecl
+{
+ Q_OBJECT
+public:
+ KAccountSelectDlg(const KMyMoneyUtils::categoryTypeE type, const QString& purpose = "General", QWidget *parent=0, const char *name=0);
+ ~KAccountSelectDlg();
+
+ /**
+ * This method is used to setup the descriptive text in the account
+ * selection dialog box. The @p msg should contain a descriptive
+ * text about the purpose of the dialog and it's options.
+ *
+ * @param msg const reference to QString object containing the text.
+ */
+ void setDescription(const QString& msg);
+
+ /**
+ * This method is used to setup the buddy text of the account
+ * selection box. the @p msg should contain a short text
+ * which is placed above the selection box with the account
+ * names.
+ *
+ * @param msg const reference to QString object containing the text.
+ */
+ void setHeader(const QString& msg);
+
+ /**
+ * This method is used to pass information to the account selection
+ * dialog which will be used as initial selection in the account
+ * selection combo box and during account creation.
+ *
+ * @param account MyMoneyAccount filled with the relevant and available information
+ * @param id account id to be used.
+ */
+ void setAccount(const MyMoneyAccount& account, const QString& id);
+
+ /**
+ * This method returns the name of the selected account in the combo box.
+ *
+ * @return QString containing the id of the selected account
+ */
+ const QString& selectedAccount(void) const;
+
+ /**
+ * This method is used to set the mode of the dialog. Two modes
+ * are supplied: a) select or create and b) create only.
+ * If @p mode is 0, select or create is selected, otherwise create only
+ * is selected.
+ *
+ * @param mode selected mode
+ */
+ void setMode(const int mode);
+
+ /**
+ * This method allows to control the visibilty of the abort button
+ * in this dialog according to the the parameter @p visible.
+ *
+ * @param visible @p true shows the abort button, @p false hides it.
+ */
+ void showAbortButton(const bool visible);
+
+ /**
+ * This method is used to determine if the user pressed the 'Skip' or
+ * the 'Abort' button. The return value is valid only, if the exec()
+ * function of the dialog returns false.
+ *
+ * @retval false Dialog was left using the 'Skip' button
+ * @retval true Dialog was left using the 'Abort' button
+ */
+ bool aborted(void) const { return m_aborted; };
+
+public slots:
+ /**
+ * Reimplemented from QDialog
+ */
+ int exec();
+
+protected slots:
+ /**
+ * This slot is used to fire up the new account wizard and preset it
+ * with the values found in m_account. If an account was created using
+ * the wizard, this will be the selected account.
+ */
+ void slotCreateAccount(void);
+
+ /**
+ * This slot is used to fire up the new institution dialog
+ */
+ void slotCreateInstitution(void);
+
+ /**
+ * This slot is used to react on the abort button
+ */
+ void abort(void);
+
+ /**
+ * This is the slot which will be called if the engine data is changed.
+ */
+ void slotReloadWidget(void);
+
+private:
+ QString m_purpose;
+ MyMoneyAccount m_account;
+ int m_mode; // 0 - select or create, 1 - create only
+ KMyMoneyUtils::categoryTypeE m_accountType;
+ bool m_aborted;
+};
+
+#endif
diff --git a/kmymoney2/dialogs/kaccountselectdlgdecl.ui b/kmymoney2/dialogs/kaccountselectdlgdecl.ui
new file mode 100644
index 0000000..1908339
--- /dev/null
+++ b/kmymoney2/dialogs/kaccountselectdlgdecl.ui
@@ -0,0 +1,215 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KAccountSelectDlgDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KAccountSelectDlgDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>651</width>
+ <height>434</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Account selection</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout19</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QTextEdit">
+ <property name="name">
+ <cstring>m_qifEntry</cstring>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ <property name="wordWrap">
+ <enum>NoWrap</enum>
+ </property>
+ <property name="undoDepth">
+ <number>0</number>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ <property name="undoRedoEnabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout18</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout17</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton" row="3" column="1">
+ <property name="name">
+ <cstring>m_createButton</cstring>
+ </property>
+ <property name="text">
+ <string>Create</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyCategory" row="2" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>m_accountSelector</cstring>
+ </property>
+ </widget>
+ <spacer row="3" column="0">
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>110</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KActiveLabel" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>m_descLabel</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>m_headerLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Account to import to</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="Line">
+ <property name="name">
+ <cstring>Line2_2</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_kButtonAbort</cstring>
+ </property>
+ <property name="text">
+ <string>Abort</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>160</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_qbuttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_qbuttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>Skip</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/kbackupdlg.cpp b/kmymoney2/dialogs/kbackupdlg.cpp
new file mode 100644
index 0000000..d98aeaf
--- /dev/null
+++ b/kmymoney2/dialogs/kbackupdlg.cpp
@@ -0,0 +1,101 @@
+/***************************************************************************
+ kbackupdialog.cpp - description
+ -------------------
+ begin : Mon Jun 4 2001
+ copyright : (C) 2001 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@ctv.es>
+ Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qpixmap.h>
+#include <qlabel.h>
+#include <qlineedit.h>
+#include <qcheckbox.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kglobal.h>
+#include <klocale.h>
+#if QT_VERSION > 300
+#include <kstandarddirs.h>
+#else
+#include <kstddirs.h>
+#endif
+
+#include <kconfig.h>
+#include <kdirselectdialog.h>
+#include <kglobalsettings.h>
+#include <kpushbutton.h>
+#include <kiconloader.h>
+#include <kguiitem.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kbackupdlg.h"
+
+KBackupDlg::KBackupDlg( QWidget* parent, const char* name/*, bool modal*/)
+ : kbackupdlgdecl( parent, name , true)
+{
+ readConfig();
+
+ // add icons to buttons
+ KIconLoader *il = KGlobal::iconLoader();
+ btnOK->setGuiItem(KStdGuiItem::ok());
+ btnCancel->setGuiItem(KStdGuiItem::cancel());
+
+ KGuiItem chooseButtenItem( i18n("C&hoose..."),
+ QIconSet(il->loadIcon("folder", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Select mount point"),
+ i18n("Use this to browse to the mount point."));
+ chooseButton->setGuiItem(chooseButtenItem);
+
+ connect(chooseButton, SIGNAL(clicked()), this, SLOT(chooseButtonClicked()));
+ connect(btnOK,SIGNAL(clicked()),this,SLOT(accept()));
+ connect(btnCancel,SIGNAL(clicked()),this,SLOT(reject()));
+}
+
+KBackupDlg::~KBackupDlg()
+{
+ writeConfig();
+}
+
+void KBackupDlg::chooseButtonClicked()
+{
+ KURL newDir = KDirSelectDialog::selectDirectory(KGlobalSettings::documentPath());
+ if (newDir.hasPath())
+ txtMountPoint->setText(newDir.path());
+}
+
+void KBackupDlg::readConfig(void)
+{
+ KConfig *config = KGlobal::config();
+ config->setGroup("Last Use Settings");
+ mountCheckBox->setChecked(config->readBoolEntry("KBackupDlg_mountDevice", false));
+ txtMountPoint->setText(config->readEntry("KBackupDlg_BackupMountPoint", "/mnt/floppy"));
+}
+
+void KBackupDlg::writeConfig(void)
+{
+ KConfig *config = KGlobal::config();
+ config->setGroup("Last Use Settings");
+ config->writeEntry("KBackupDlg_mountDevice", mountCheckBox->isChecked());
+ config->writeEntry("KBackupDlg_BackupMountPoint", txtMountPoint->text());
+ config->sync();
+}
+
+#include "kbackupdlg.moc"
diff --git a/kmymoney2/dialogs/kbackupdlg.h b/kmymoney2/dialogs/kbackupdlg.h
new file mode 100644
index 0000000..b275606
--- /dev/null
+++ b/kmymoney2/dialogs/kbackupdlg.h
@@ -0,0 +1,44 @@
+/***************************************************************************
+ kbackupdialog.h - description
+ -------------------
+ begin : Mon Jun 4 2001
+ copyright : (C) 2001 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@ctv.es>
+ Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KBACKUPDIALOG_H
+#define KBACKUPDIALOG_H
+
+#include <qwidget.h>
+#include "../dialogs/kbackupdlgdecl.h"
+
+/**
+ *@author Michael Edwardes
+ */
+
+class KBackupDlg : public kbackupdlgdecl {
+ Q_OBJECT
+private:
+ void readConfig(void);
+ void writeConfig(void);
+
+protected slots:
+ void chooseButtonClicked();
+
+public:
+ KBackupDlg( QWidget* parent, const char* name/*, bool modal*/);
+ ~KBackupDlg();
+};
+
+#endif
diff --git a/kmymoney2/dialogs/kbackupdlgdecl.ui b/kmymoney2/dialogs/kbackupdlgdecl.ui
new file mode 100644
index 0000000..ff9795f
--- /dev/null
+++ b/kmymoney2/dialogs/kbackupdlgdecl.ui
@@ -0,0 +1,210 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>kbackupdlgdecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>kbackupdlgdecl</cstring>
+ </property>
+ <property name="caption">
+ <string>Backup</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Use this dialog to backup your data.
+
+Please make sure you have a disk inserted and that the drive is ready. Then choose the mount point from either the Choose button or by entering the path in the available box.
+
+Click OK to perform the backup. If your system does not use an automounter, make sure you mark the checkbox below to "mount this directory before backing up."</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="Line">
+ <property name="name">
+ <cstring>Line1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox1</cstring>
+ </property>
+ <property name="title">
+ <string>Device options</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout42</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>lblMountPoint</cstring>
+ </property>
+ <property name="text">
+ <string>Mount Point:</string>
+ <comment>This is the mount point</comment>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>txtMountPoint</cstring>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>chooseButton</cstring>
+ </property>
+ <property name="text">
+ <string>Choose...</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>mountCheckBox</cstring>
+ </property>
+ <property name="text">
+ <string>Mount this directory before backing up.</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer17</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>24</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout44</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>455</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>btnOK</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>btnCancel</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/kbalancechartdlg.cpp b/kmymoney2/dialogs/kbalancechartdlg.cpp
new file mode 100644
index 0000000..05eccf3
--- /dev/null
+++ b/kmymoney2/dialogs/kbalancechartdlg.cpp
@@ -0,0 +1,227 @@
+/***************************************************************************
+ kbalancechartdlg - description
+ -------------------
+ begin : Mon Nov 26 2007
+ copyright : (C) 2007 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlayout.h>
+#include <qframe.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kpushbutton.h>
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kbalancechartdlg.h"
+
+#include <kmymoney/mymoneyreport.h>
+#include "../reports/kreportchartview.h"
+#include "../reports/pivottable.h"
+
+#include <kmymoney/kmymoneyglobalsettings.h>
+
+
+// in KOffice version < 1.5 KDCHART_PROPSET_NORMAL_DATA was a static const
+// but in 1.5 this has been changed into a #define'd value. So we have to
+// make sure, we use the right one.
+#ifndef KDCHART_PROPSET_NORMAL_DATA
+#define KMM_KDCHART_PROPSET_NORMAL_DATA KDChartParams::KDCHART_PROPSET_NORMAL_DATA
+#else
+#define KMM_KDCHART_PROPSET_NORMAL_DATA KDCHART_PROPSET_NORMAL_DATA
+#endif
+
+KBalanceChartDlg::KBalanceChartDlg(const MyMoneyAccount& account, QWidget* parent, const char* name) :
+ KDialog(parent, name)
+{
+#ifdef HAVE_KDCHART
+ setCaption(i18n("Balance of %1").arg(account.name()));
+ setSizeGripEnabled( TRUE );
+ setModal( TRUE );
+
+ QVBoxLayout* KBalanceChartDlgLayout = new QVBoxLayout( this, 11, 6, "KBalanceChartDlgLayout");
+
+ MyMoneyReport reportCfg = MyMoneyReport(
+ MyMoneyReport::eAssetLiability,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::userDefined, // overridden by the setDateFilter() call below
+ MyMoneyReport::eDetailTotal,
+ i18n("%1 Balance History").arg(account.name()),
+ i18n("Generated Report")
+ );
+ reportCfg.setChartByDefault(true);
+ reportCfg.setChartGridLines(false);
+ reportCfg.setChartDataLabels(false);
+ reportCfg.setChartType(MyMoneyReport::eChartLine);
+ reportCfg.setIncludingSchedules( true );
+ if(account.accountType() == MyMoneyAccount::Investment) {
+ QStringList::const_iterator it_a;
+ for(it_a = account.accountList().begin(); it_a != account.accountList().end(); ++it_a)
+ reportCfg.addAccount(*it_a);
+ } else
+ reportCfg.addAccount(account.id());
+ reportCfg.setColumnsAreDays( true );
+ reportCfg.setConvertCurrency( false );
+ reportCfg.setDateFilter(QDate::currentDate().addDays(-90),QDate::currentDate().addDays(+90));
+
+ reports::PivotTable table(reportCfg);
+
+ reports::KReportChartView* chartWidget = new reports::KReportChartView(this, 0);
+
+ table.drawChart(*chartWidget);
+
+ chartWidget->params()->setLineMarker(false);
+ chartWidget->params()->setLegendPosition(KDChartParams::NoLegend);
+ chartWidget->params()->setLineWidth(2);
+ chartWidget->params()->setDataColor(0, KGlobalSettings::textColor());
+
+ // draw future values in a different line style
+ KDChartPropertySet propSetFutureValue("future value", KMM_KDCHART_PROPSET_NORMAL_DATA);
+ propSetFutureValue.setLineStyle(KDChartPropertySet::OwnID, Qt::DotLine);
+ int m_idPropFutureValue = chartWidget->params()->registerProperties(propSetFutureValue);
+
+ KDChartPropertySet propSetLastValue("last value", m_idPropFutureValue);
+ propSetLastValue.setExtraLinesAlign(KDChartPropertySet::OwnID, Qt::AlignLeft | Qt::AlignBottom);
+ propSetLastValue.setExtraLinesWidth(KDChartPropertySet::OwnID, -4);
+ propSetLastValue.setExtraLinesColor(KDChartPropertySet::OwnID, KMyMoneyGlobalSettings::listGridColor());
+
+ int m_idPropLastValue = chartWidget->params()->registerProperties(propSetLastValue);
+
+ KDChartPropertySet propSetMinBalance("min balance", m_idPropFutureValue);
+ propSetMinBalance.setLineStyle(KDChartPropertySet::OwnID, Qt::NoPen);
+ propSetMinBalance.setExtraLinesAlign(KDChartPropertySet::OwnID, Qt::AlignLeft | Qt::AlignRight);
+ int m_idPropMinBalance = chartWidget->params()->registerProperties(propSetMinBalance);
+
+ KDChartPropertySet propSetMaxCredit("max credit", m_idPropMinBalance);
+ propSetMaxCredit.setExtraLinesColor(KDChartPropertySet::OwnID, KMyMoneyGlobalSettings::listNegativeValueColor());
+ propSetMaxCredit.setExtraLinesStyle(KDChartPropertySet::OwnID, Qt::DotLine);
+ int m_idPropMaxCredit = chartWidget->params()->registerProperties(propSetMaxCredit);
+
+ KBalanceChartDlgLayout->addWidget(chartWidget, 10);
+
+
+ // add another row for markers if required or remove it if not necessary
+ // see http://www.klaralvdalens-datakonsult.se/kdchart/ProgrammersManual/KDChart.pdf
+ // Chapter 6, "Adding separate Lines/Markers".
+
+ bool needRow = false;
+ bool haveMinBalance = false;
+ bool haveMaxCredit = false;
+ MyMoneyMoney minBalance, maxCredit;
+ MyMoneyMoney factor(1,1);
+ if(account.accountGroup() == MyMoneyAccount::Asset)
+ factor = -factor;
+
+ if(account.value("maxCreditEarly").length() > 0) {
+ needRow = true;
+ haveMaxCredit = true;
+ maxCredit = MyMoneyMoney(account.value("maxCreditEarly")) * factor;
+ }
+ if(account.value("maxCreditAbsolute").length() > 0) {
+ needRow = true;
+ haveMaxCredit = true;
+ maxCredit = MyMoneyMoney(account.value("maxCreditAbsolute")) * factor;
+ }
+
+ if(account.value("minBalanceEarly").length() > 0) {
+ needRow = true;
+ haveMinBalance = true;
+ minBalance = MyMoneyMoney(account.value("minBalanceEarly"));
+ }
+ if(account.value("minBalanceAbsolute").length() > 0) {
+ needRow = true;
+ haveMinBalance = true;
+ minBalance = MyMoneyMoney(account.value("minBalanceAbsolute"));
+ }
+
+ KDChartTableDataBase* data = chartWidget->data();
+ if(!needRow && data->usedRows() == 2) {
+ data->expand( data->usedRows()-1, data->usedCols() );
+ } else if(needRow && data->usedRows() == 1) {
+ data->expand( data->usedRows()+1, data->usedCols() );
+ }
+
+ if(needRow) {
+ if(haveMinBalance) {
+ data->setCell(1, 0, minBalance.toDouble());
+ chartWidget->setProperty(1, 0, m_idPropMinBalance);
+ }
+ if(haveMaxCredit) {
+ data->setCell(1, 1, maxCredit.toDouble());
+ chartWidget->setProperty(1, 1, m_idPropMaxCredit);
+ }
+ }
+
+ for(int iCell = 90; iCell < 180; ++iCell) {
+ chartWidget->setProperty(0, iCell, m_idPropFutureValue);
+ }
+ chartWidget->setProperty(0, 90, m_idPropLastValue);
+
+
+
+ QFrame* line1 = new QFrame( this, "line1" );
+ line1->setFrameShape( QFrame::HLine );
+ line1->setFrameShadow( QFrame::Sunken );
+ line1->setFrameShape( QFrame::HLine );
+
+ KBalanceChartDlgLayout->addWidget(line1);
+ QHBoxLayout* Layout1 = new QHBoxLayout( KBalanceChartDlgLayout, 6, "Layout1");
+#if 0
+ KPushButton* buttonHelp = new KPushButton( this, "buttonHelp" );
+ buttonHelp->setAutoDefault( TRUE );
+ buttonHelp->setText(i18n("&Help"));
+ Layout1->addWidget( buttonHelp );
+#endif
+
+ QSpacerItem* Horizontal_Spacing2 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
+ Layout1->addItem( Horizontal_Spacing2 );
+
+#if 0
+ KPushButton* buttonOk = new KPushButton( this, "buttonOk" );
+ buttonOk->setAutoDefault( TRUE );
+ buttonOk->setDefault( TRUE );
+ buttonOk->setText(i18n("&OK"));
+ Layout1->addWidget( buttonOk );
+#endif
+ KPushButton* buttonClose = new KPushButton( this, "buttonClose" );
+ buttonClose->setEnabled( TRUE );
+ buttonClose->setAutoDefault( TRUE );
+ buttonClose->setGuiItem(KStdGuiItem::Close);
+ Layout1->addWidget( buttonClose );
+
+ // connect( buttonOk, SIGNAL( clicked() ), this, SLOT( accept() ) );
+ connect( buttonClose, SIGNAL( clicked() ), this, SLOT( accept() ) );
+
+ resize( QSize(700, 500).expandedTo(minimumSizeHint()) );
+ clearWState( WState_Polished );
+#endif
+}
+
+
+KBalanceChartDlg::~KBalanceChartDlg()
+{
+}
+
+#include "kbalancechartdlg.moc"
+
diff --git a/kmymoney2/dialogs/kbalancechartdlg.h b/kmymoney2/dialogs/kbalancechartdlg.h
new file mode 100644
index 0000000..8fe2502
--- /dev/null
+++ b/kmymoney2/dialogs/kbalancechartdlg.h
@@ -0,0 +1,46 @@
+/***************************************************************************
+ kbalancechartdlg - description
+ -------------------
+ begin : Mon Nov 26 2007
+ copyright : (C) 2007 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KBALANCECHARTDLG_H
+#define KBALANCECHARTDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kdialog.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+class MyMoneyAccount;
+
+/**
+ * @author Thomas Baumgart <ipwizard@users.sourceforge.net>
+ */
+class KBalanceChartDlg : public KDialog
+{
+ Q_OBJECT
+ public:
+ KBalanceChartDlg(const MyMoneyAccount& account, QWidget* parent = 0, const char* name = 0);
+ ~KBalanceChartDlg();
+
+};
+
+#endif
diff --git a/kmymoney2/dialogs/kbalancewarning.cpp b/kmymoney2/dialogs/kbalancewarning.cpp
new file mode 100644
index 0000000..16f3dc0
--- /dev/null
+++ b/kmymoney2/dialogs/kbalancewarning.cpp
@@ -0,0 +1,67 @@
+/***************************************************************************
+ kbalancewarning.cpp
+ -------------------
+ begin : Mon Feb 9 2009
+ copyright : (C) 2009 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+#include <qstring.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kmessagebox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoneyaccount.h"
+#include "kbalancewarning.h"
+
+class KBalanceWarning::Private
+{
+public:
+ QString dontShowAgain() const { return "BalanceWarning"; }
+ QMap<QString, bool> m_deselectedAccounts;
+};
+
+KBalanceWarning::KBalanceWarning(QObject* parent, const char* name) :
+ QObject(parent, name),
+ d(new Private)
+{
+ KMessageBox::enableMessage(d->dontShowAgain());
+}
+
+KBalanceWarning::~KBalanceWarning()
+{
+ delete d;
+}
+
+void KBalanceWarning::slotShowMessage(QWidget* parent, const MyMoneyAccount& account, const QString& msg)
+{
+ if(d->m_deselectedAccounts.find(account.id()) == d->m_deselectedAccounts.end()) {
+ KMessageBox::information(parent, msg, QString::null, d->dontShowAgain());
+ if(!KMessageBox::shouldBeShownContinue(d->dontShowAgain())) {
+ d->m_deselectedAccounts[account.id()] = true;
+ KMessageBox::enableMessage(d->dontShowAgain());
+ }
+ }
+}
+
+
+#include "kbalancewarning.moc"
diff --git a/kmymoney2/dialogs/kbalancewarning.h b/kmymoney2/dialogs/kbalancewarning.h
new file mode 100644
index 0000000..2e3c4d4
--- /dev/null
+++ b/kmymoney2/dialogs/kbalancewarning.h
@@ -0,0 +1,50 @@
+/***************************************************************************
+ kbalancewarning.h
+ -------------------
+ begin : Mon Feb 9 2009
+ copyright : (C) 2009 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KBALANCEWARNING_H
+#define KBALANCEWARNING_H
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qobject.h>
+class QString;
+class QWidget;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+class MyMoneyAccount;
+
+class KBalanceWarning : public QObject
+{
+ Q_OBJECT
+public:
+ KBalanceWarning(QObject* parent, const char* name = 0);
+ virtual ~KBalanceWarning();
+
+public slots:
+ void slotShowMessage(QWidget* parent, const MyMoneyAccount& account, const QString& msg);
+
+private:
+ class Private;
+ Private* d;
+};
+
+#endif
diff --git a/kmymoney2/dialogs/kcategoryreassigndlg.cpp b/kmymoney2/dialogs/kcategoryreassigndlg.cpp
new file mode 100644
index 0000000..f457134
--- /dev/null
+++ b/kmymoney2/dialogs/kcategoryreassigndlg.cpp
@@ -0,0 +1,106 @@
+/***************************************************************************
+ kcategoryreassigndlg.cpp
+ -------------------
+ copyright : (C) 2007 by Thomas Baumgart
+ author : Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kdialog.h>
+#include <klocale.h>
+#include <kstdguiitem.h>
+#include <kpushbutton.h>
+#include <kmessagebox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kcategoryreassigndlg.h"
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/kmymoneycategory.h>
+#include <kmymoney/kmymoneyaccountselector.h>
+#include <kmymoney/kguiutils.h>
+
+KCategoryReassignDlg::KCategoryReassignDlg( QWidget* parent, const char* name) :
+ KCategoryReassignDlgDecl( parent, name)
+{
+ buttonOk->setGuiItem(KStdGuiItem::ok());
+ buttonCancel->setGuiItem(KStdGuiItem::cancel());
+ kMandatoryFieldGroup* mandatory = new kMandatoryFieldGroup(this);
+ mandatory->add(m_category);
+ mandatory->setOkButton(buttonOk);
+}
+
+KCategoryReassignDlg::~KCategoryReassignDlg()
+{
+}
+
+QString KCategoryReassignDlg::show(const MyMoneyAccount& category)
+{
+ if (category.id().isEmpty())
+ return QString(); // no payee available? nothing can be selected...
+
+ AccountSet set;
+ set.addAccountGroup(MyMoneyAccount::Income);
+ set.addAccountGroup(MyMoneyAccount::Expense);
+ set.load(m_category->selector());
+
+ // remove the category we are about to delete
+ m_category->selector()->removeItem(category.id());
+
+ // make sure the available categories have the same currency
+ QStringList list;
+ QStringList::const_iterator it_a;
+ m_category->selector()->itemList(list);
+ for(it_a = list.begin(); it_a != list.end(); ++it_a) {
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(*it_a);
+ if(acc.currencyId() != category.currencyId())
+ m_category->selector()->removeItem(*it_a);
+ }
+
+ // reload the list
+ m_category->selector()->itemList(list);
+
+ // if there is no category for reassignment left, we bail out
+ if(list.isEmpty()) {
+ KMessageBox::sorry(this, QString("<qt>")+i18n("At least one transaction/schedule still references the category <b>%1</b>. However, at least one category with the same currency must exist so that the transactions/schedules can be reassigned.").arg(category.name())+QString("</qt>"));
+ return QString();
+ }
+
+ // execute dialog and if aborted, return empty string
+ if (this->exec() == QDialog::Rejected)
+ return QString();
+
+ // otherwise return index of selected payee
+ return m_category->selectedItem();
+}
+
+
+void KCategoryReassignDlg::accept(void)
+{
+ // force update of payeeCombo
+ buttonOk->setFocus();
+
+ if(m_category->selectedItem().isEmpty()) {
+ KMessageBox::information(this, i18n("This dialog does not allow to create new categories. Please pick a category from the list."), i18n("Category creation"));
+ } else {
+ KCategoryReassignDlgDecl::accept();
+ }
+}
+
+#include "kcategoryreassigndlg.moc"
diff --git a/kmymoney2/dialogs/kcategoryreassigndlg.h b/kmymoney2/dialogs/kcategoryreassigndlg.h
new file mode 100644
index 0000000..ce756ee
--- /dev/null
+++ b/kmymoney2/dialogs/kcategoryreassigndlg.h
@@ -0,0 +1,66 @@
+/***************************************************************************
+ kcategoryreassigndlg.cpp
+ -------------------
+ copyright : (C) 2007 by Thomas Baumgart
+ author : Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KCATEGORYREASSIGNDLG_H
+#define KCATEGORYREASSIGNDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qvaluelist.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyaccount.h>
+#include "kmymoney2/dialogs/kcategoryreassigndlgdecl.h"
+
+/**
+ * Implementation of the dialog that lets the user select a payee in order
+ * to re-assign transactions (for instance, if payees are deleted).
+ */
+class KCategoryReassignDlg : public KCategoryReassignDlgDecl
+{
+ Q_OBJECT
+public:
+ /** Default constructor */
+ KCategoryReassignDlg( QWidget* parent = 0, const char* name = 0);
+
+ /** Destructor */
+ ~KCategoryReassignDlg();
+
+ /**
+ * This function sets up the dialog, lets the user select a category and returns
+ * the id of the selected category in the list of all known income and expense accounts.
+ *
+ * @param category reference to MyMoneyAccount object of the category to be deleted
+ *
+ * @return Returns the id of the selected category in the list or QString() if
+ * the dialog was aborted. QString() is also returned if the @a category
+ * does not have an id.
+ */
+ QString show(const MyMoneyAccount& category);
+
+protected:
+ void accept(void);
+
+};
+
+#endif // KCATEGORYREASSIGNDLG_H
diff --git a/kmymoney2/dialogs/kcategoryreassigndlgdecl.ui b/kmymoney2/dialogs/kcategoryreassigndlgdecl.ui
new file mode 100644
index 0000000..5b9a954
--- /dev/null
+++ b/kmymoney2/dialogs/kcategoryreassigndlgdecl.ui
@@ -0,0 +1,175 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KCategoryReassignDlgDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KCategoryeReassignDlgDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>392</width>
+ <height>308</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Reassign categories</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>false</bool>
+ </property>
+ <property name="modal">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>300</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>The transactions, schedules and budgets associated with the selected category need to be re-assigned to a different category before the selected category can be deleted. Please select a category from the list below.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignJustify|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer8</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Available categories:</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyCategory">
+ <property name="name">
+ <cstring>m_category</cstring>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer9</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="Line">
+ <property name="name">
+ <cstring>line1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>305</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>KCategoryeReassignDlgDecl</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>KCategoryeReassignDlgDecl</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/kchooseimportexportdlg.cpp b/kmymoney2/dialogs/kchooseimportexportdlg.cpp
new file mode 100644
index 0000000..0c390a8
--- /dev/null
+++ b/kmymoney2/dialogs/kchooseimportexportdlg.cpp
@@ -0,0 +1,108 @@
+/***************************************************************************
+ kchooseimportexportdlg.cpp - description
+ -------------------
+ begin : Thu Jul 12 2001
+ copyright : (C) 2000-2001 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+#include <kglobal.h>
+#include <klocale.h>
+#if QT_VERSION > 300
+#include <kstandarddirs.h>
+#else
+#include <kstddirs.h>
+#endif
+
+#include <qpixmap.h>
+
+#include <qlabel.h>
+#include <qcombobox.h>
+#include <qpushbutton.h>
+
+#include <kglobal.h>
+#include <kconfig.h>
+#include <klocale.h>
+
+#include "kchooseimportexportdlg.h"
+
+KChooseImportExportDlg::KChooseImportExportDlg(int type, QWidget *parent, const char *name )
+ : KChooseImportExportDlgDecl(parent,name, true)
+{
+ QString filename;
+
+ if (type==0) { // import
+ topLabel->setText(i18n("Please choose the type of import you wish to perform. A simple explanation\n"
+ "of the import type is available at the bottom of the screen and is updated when\n"
+ "you select an item from the choice box."
+ "\n\nOnce you have chosen an import type please press the OK button." ));
+ promptLabel->setText(i18n("Choose import type:"));
+ setCaption(i18n("Choose Import Type Dialog"));
+ } else { // export
+ topLabel->setText(i18n("Please choose the type of export you wish to perform. A simple explanation\n"
+ "of the export type is available at the bottom of the screen and is updated when\n"
+ "you select an item from the choice box."
+ "\n\nOnce you have chosen an export type please press the OK button." ));
+ promptLabel->setText(i18n("Choose export type:"));
+ setCaption(i18n("Choose Export Type Dialog"));
+ }
+
+ readConfig();
+ slotTypeActivated(m_lastType);
+ typeCombo->setCurrentItem(((m_lastType=="QIF") ? 0 : 1));
+
+ connect(typeCombo, SIGNAL(activated(const QString&)), this, SLOT(slotTypeActivated(const QString&)));
+ connect(okButton, SIGNAL(clicked()), this, SLOT(accept()));
+ connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
+}
+
+KChooseImportExportDlg::~KChooseImportExportDlg()
+{
+ writeConfig();
+}
+
+void KChooseImportExportDlg::slotTypeActivated(const QString& text)
+{
+ if (text=="QIF") {
+ descriptionLabel->setText(i18n("QIF files are created by the popular accounting program Quicken.\n"
+ "Another dialog will appear, if you choose this type, asking for further\n"
+ "information relevant to the Quicken format."));
+ } else {
+ descriptionLabel->setText(i18n("The CSV type uses a comma delimeted text file that can be used by\n"
+ "most popular spreadsheet programs available for Linux and other operating\n"
+ "systems."));
+ }
+}
+
+QString KChooseImportExportDlg::importExportType(void)
+{
+ return typeCombo->currentText();
+}
+
+void KChooseImportExportDlg::readConfig(void)
+{
+ KConfig *config = KGlobal::config();
+ config->setGroup("Last Use Settings");
+ m_lastType = config->readEntry("KChooseImportExportDlg_LastType");
+}
+
+void KChooseImportExportDlg::writeConfig(void)
+{
+ KConfig *config = KGlobal::config();
+ config->setGroup("Last Use Settings");
+ config->writeEntry("KChooseImportExportDlg_LastType", typeCombo->currentText());
+ config->sync();
+}
+
+#include "kchooseimportexportdlg.moc"
diff --git a/kmymoney2/dialogs/kchooseimportexportdlg.h b/kmymoney2/dialogs/kchooseimportexportdlg.h
new file mode 100644
index 0000000..ac562f3
--- /dev/null
+++ b/kmymoney2/dialogs/kchooseimportexportdlg.h
@@ -0,0 +1,47 @@
+/***************************************************************************
+ kchooseimportexportdlg.h - description
+ -------------------
+ begin : Thu Jul 12 2001
+ copyright : (C) 2000-2001 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KCHOOSEIMPORTEXPORTDLG_H
+#define KCHOOSEIMPORTEXPORTDLG_H
+
+#include <qwidget.h>
+#include "../dialogs/kchooseimportexportdlgdecl.h"
+
+/**
+ *@author Michael Edwardes
+ */
+
+class KChooseImportExportDlg : public KChooseImportExportDlgDecl {
+ Q_OBJECT
+private:
+ void readConfig(void);
+ void writeConfig(void);
+ QString m_lastType;
+
+protected slots:
+ void slotTypeActivated(const QString& text);
+
+public:
+ KChooseImportExportDlg(int type, QWidget *parent=0, const char *name=0);
+ ~KChooseImportExportDlg();
+ QString importExportType(void);
+};
+
+#endif
diff --git a/kmymoney2/dialogs/kchooseimportexportdlgdecl.ui b/kmymoney2/dialogs/kchooseimportexportdlgdecl.ui
new file mode 100644
index 0000000..3d12a14
--- /dev/null
+++ b/kmymoney2/dialogs/kchooseimportexportdlgdecl.ui
@@ -0,0 +1,235 @@
+<!DOCTYPE UI><UI>
+<class>KChooseImportExportDlgDecl</class>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>kChooseImportDlgDecl</cstring>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Choose Import Type Dialog</string>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout4</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>topLabel</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Please choose the type of import you wish to perform. A simple explanation
+of the import type is available at the bottom of the screen and is updated when
+you select an item from the choice box.
+
+Once you have chosen an import type please press the OK button.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>Line</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Line1</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout3</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer1</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>promptLabel</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Choose import type:</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QComboBox</class>
+ <item>
+ <property>
+ <name>text</name>
+ <string>QIF</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>CSV</string>
+ </property>
+ </item>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>typeCombo</cstring>
+ </property>
+ <property stdset="1">
+ <name>minimumSize</name>
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>descriptionLabel</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>minimumSize</name>
+ <size>
+ <width>410</width>
+ <height>100</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Some descripton</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout2</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer2</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>okButton</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>OK</string>
+ </property>
+ <property stdset="1">
+ <name>default</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cancelButton</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+</UI>
diff --git a/kmymoney2/dialogs/kconfirmmanualenterdlg.cpp b/kmymoney2/dialogs/kconfirmmanualenterdlg.cpp
new file mode 100644
index 0000000..3c20a48
--- /dev/null
+++ b/kmymoney2/dialogs/kconfirmmanualenterdlg.cpp
@@ -0,0 +1,202 @@
+/***************************************************************************
+ kconfirmmanualenterdlg.cpp
+ -------------------
+ begin : Mon Apr 9 2007
+ copyright : (C) 2007 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qradiobutton.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <ktextedit.h>
+#include <kpushbutton.h>
+#include <kstdguiitem.h>
+#include <kmessagebox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/kmymoneyutils.h>
+#include "kconfirmmanualenterdlg.h"
+
+KConfirmManualEnterDlg::KConfirmManualEnterDlg(const MyMoneySchedule& schedule, QWidget* parent, const char* name) :
+ KConfirmManualEnterDlgDecl(parent, name)
+{
+ buttonOk->setGuiItem(KStdGuiItem::ok());
+ buttonCancel->setGuiItem(KStdGuiItem::cancel());
+ m_onceRadio->setChecked(true);
+ m_onceRadio->setFocus();
+
+ if(schedule.type() == MyMoneySchedule::TYPE_LOANPAYMENT) {
+ m_setRadio->setEnabled(false);
+ m_discardRadio->setEnabled(false);
+ }
+
+}
+
+void KConfirmManualEnterDlg::loadTransactions(const MyMoneyTransaction& to, const MyMoneyTransaction& tn)
+{
+ QString messageDetail("<qt>");
+ MyMoneyFile* file = MyMoneyFile::instance();
+ int noItemsChanged=0;
+
+#if 0
+ // if no schedule is present, we cannot enter it
+ if(m_schedule.id().isEmpty())
+ return false;
+
+ if (m_fromAccountId == m_toAccountId)
+ {
+ KMessageBox::error(this, i18n("Account and transfer account are the same. Please change one."));
+ m_from->setFocus();
+ return false;
+ }
+
+ if (!checkDateInPeriod(m_date->date()))
+ return false;
+#endif
+
+ try
+ {
+ QString po, pn;
+ if(to.splits()[0].payeeId())
+ po = file->payee(to.splits()[0].payeeId()).name();
+ if(tn.splits()[0].payeeId())
+ pn = file->payee(tn.splits()[0].payeeId()).name();
+
+ if (po != pn) {
+ noItemsChanged++;
+ messageDetail += i18n("Payee changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>").arg(po).arg(pn);
+ }
+#if 0
+ if ( (m_schedule.type() == MyMoneySchedule::TYPE_TRANSFER ||
+ m_schedule.type() == MyMoneySchedule::TYPE_BILL) &&
+ m_from->currentText() != m_schedule.account().name())
+ {
+ noItemsChanged++;
+ messageDetail += i18n("Account changed. Old: \"%1\", New: \"%2\"")
+ .arg(m_schedule.account().name()).arg(m_from->currentText()) + QString("\n");
+ }
+
+ if ( m_schedule.type() == MyMoneySchedule::TYPE_DEPOSIT &&
+ m_to->currentText() != m_schedule.account().name())
+ {
+ noItemsChanged++;
+ messageDetail += i18n("Account changed. Old: \"%1\", New: \"%2\"")
+ .arg(m_schedule.account().name()).arg(m_to->currentText()) + QString("\n");
+ }
+#endif
+
+ if(to.splits()[0].accountId() != tn.splits()[0].accountId()) {
+ noItemsChanged++;
+ messageDetail += i18n("Account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>")
+ .arg(file->account(to.splits()[0].accountId()).name())
+ .arg(file->account(tn.splits()[0].accountId()).name());
+ }
+
+ if(file->isTransfer(to) && file->isTransfer(tn)) {
+ if(to.splits()[1].accountId() != tn.splits()[1].accountId()) {
+ noItemsChanged++;
+ messageDetail += i18n("Transfer account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>")
+ .arg(file->account(to.splits()[1].accountId()).name())
+ .arg(file->account(tn.splits()[1].accountId()).name());
+ }
+ } else {
+ QString co, cn;
+ switch(to.splitCount()) {
+ default:
+ co = i18n("Split transaction (category replacement)", "Split transaction");
+ break;
+ case 2:
+ co = file->accountToCategory(to.splits()[1].accountId());
+ case 1:
+ break;
+ }
+
+ switch(tn.splitCount()) {
+ default:
+ cn = i18n("Split transaction (category replacement)", "Split transaction");
+ break;
+ case 2:
+ cn = file->accountToCategory(tn.splits()[1].accountId());
+ case 1:
+ break;
+ }
+ if (co != cn)
+ {
+ noItemsChanged++;
+ messageDetail += i18n("Category changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>").arg(co).arg(cn);
+ }
+ }
+
+ QString mo, mn;
+ mo = to.splits()[0].memo();
+ mn = tn.splits()[0].memo();
+ if(mo.isEmpty())
+ mo = QString("<i>")+i18n("empty")+QString("</i>");
+ if(mn.isEmpty())
+ mn = QString("<i>")+i18n("empty")+QString("</i>");
+ if (mo != mn)
+ {
+ noItemsChanged++;
+ messageDetail += i18n("Memo changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>").arg(mo).arg(mn);
+ }
+
+ const MyMoneySecurity& sec = MyMoneyFile::instance()->security(to.commodity());
+ MyMoneyMoney ao, an;
+ ao = to.splits()[0].value();
+ an = tn.splits()[0].value();
+ if (ao != an) {
+ noItemsChanged++;
+ messageDetail += i18n("Amount changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>")
+ .arg(ao.formatMoney(sec.smallestAccountFraction())).arg(an.formatMoney(sec.smallestAccountFraction()));
+ }
+
+ MyMoneySplit::reconcileFlagE fo, fn;
+ fo = to.splits()[0].reconcileFlag();
+ fn = tn.splits()[0].reconcileFlag();
+ if(fo != fn) {
+ noItemsChanged++;
+ messageDetail += i18n("Reconciliation flag changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>")
+ .arg(KMyMoneyUtils::reconcileStateToString(fo, true))
+ .arg(KMyMoneyUtils::reconcileStateToString(fn, true));
+ }
+ }
+ catch (MyMoneyException *e)
+ {
+ KMessageBox::error(this, i18n("Fatal error in determining data: ") + e->what());
+ delete e;
+ }
+
+ messageDetail += "</qt>";
+ m_details->setText(messageDetail);
+ return;
+}
+
+KConfirmManualEnterDlg::Action KConfirmManualEnterDlg::action(void) const
+{
+ if(m_discardRadio->isChecked())
+ return UseOriginal;
+ if(m_setRadio->isChecked())
+ return ModifyAlways;
+ return ModifyOnce;
+}
+
+#include "kconfirmmanualenterdlg.moc"
diff --git a/kmymoney2/dialogs/kconfirmmanualenterdlg.h b/kmymoney2/dialogs/kconfirmmanualenterdlg.h
new file mode 100644
index 0000000..43ff65a
--- /dev/null
+++ b/kmymoney2/dialogs/kconfirmmanualenterdlg.h
@@ -0,0 +1,60 @@
+/***************************************************************************
+ kconfirmmanualenterdlg.h
+ -------------------
+ begin : Mon Apr 9 2007
+ copyright : (C) 2007 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KCONFIRMMANUALENTERDLG_H
+#define KCONFIRMMANUALENTERDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneytransaction.h>
+#include "../dialogs/kconfirmmanualenterdlgdecl.h"
+
+class KConfirmManualEnterDlg : public KConfirmManualEnterDlgDecl
+{
+ Q_OBJECT
+public:
+ KConfirmManualEnterDlg(const MyMoneySchedule& schedule, QWidget* parent = 0, const char* name = 0);
+
+ typedef enum {
+ UseOriginal = 0,
+ ModifyOnce,
+ ModifyAlways
+ } Action;
+
+ /**
+ * setup the dialog for the difference between the original transaction
+ * @a to and the transaction to be entered @a tn.
+ */
+ void loadTransactions(const MyMoneyTransaction& to, const MyMoneyTransaction& tn);
+
+ /**
+ * Returns information about what to do with the transaction
+ */
+ Action action(void) const;
+};
+
+#endif // KCONFIRMMANUALENTERDLG_H
diff --git a/kmymoney2/dialogs/kconfirmmanualenterdlgdecl.ui b/kmymoney2/dialogs/kconfirmmanualenterdlgdecl.ui
new file mode 100644
index 0000000..f88f0ce
--- /dev/null
+++ b/kmymoney2/dialogs/kconfirmmanualenterdlgdecl.ui
@@ -0,0 +1,160 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KConfirmManualEnterDlgDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KConfirmManualEnterDlgDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>578</width>
+ <height>384</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Confirm Manual Enter</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_message</cstring>
+ </property>
+ <property name="text">
+ <string>The following changes have been made to the transaction data:</string>
+ </property>
+ <property name="textFormat">
+ <enum>RichText</enum>
+ </property>
+ </widget>
+ <widget class="KTextEdit">
+ <property name="name">
+ <cstring>m_details</cstring>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>buttonGroup1</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="title">
+ <string>Please choose what you wish to do with the above changes</string>
+ </property>
+ <property name="selectedId" stdset="0">
+ <number>1</number>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_discardRadio</cstring>
+ </property>
+ <property name="text">
+ <string>Discard the changes and enter the original transaction into the register.</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_onceRadio</cstring>
+ </property>
+ <property name="text">
+ <string>Enter these new values this one time, for this occurence only.</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_setRadio</cstring>
+ </property>
+ <property name="text">
+ <string>Set all further occurences in this schedule to be these values.</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>180</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>KConfirmManualEnterDlgDecl</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>KConfirmManualEnterDlgDecl</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/kcsvprogressdlg.cpp b/kmymoney2/dialogs/kcsvprogressdlg.cpp
new file mode 100644
index 0000000..d8f85ed
--- /dev/null
+++ b/kmymoney2/dialogs/kcsvprogressdlg.cpp
@@ -0,0 +1,252 @@
+/***************************************************************************
+ kcsvprogressdlg.cpp - description
+ -------------------
+ begin : Sun Jul 29 2001
+ copyright : (C) 2000-2001 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+#include <kglobal.h>
+#include <klocale.h>
+#if QT_VERSION > 300
+#include <kstandarddirs.h>
+#else
+#include <kstddirs.h>
+#endif
+
+#include <qpixmap.h>
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qlabel.h>
+#include <qpushbutton.h>
+#include <qprogressbar.h>
+#include <qlineedit.h>
+#include <qgroupbox.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+#include <kfiledialog.h>
+#include <kglobal.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kconfig.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include "kcsvprogressdlg.h"
+#include "../widgets/kmymoneydateinput.h"
+#include "../kmymoneyutils.h"
+
+/** Simple constructor */
+KCsvProgressDlg::KCsvProgressDlg(int type, MyMoneyAccount *account, QWidget *parent, const char *name )
+ : KCsvProgressDlgDecl(parent,name, true)
+{
+ m_nType = type;
+ if (m_nType==0)
+ {
+ m_kmymoneydateEnd->setEnabled(false);
+ m_kmymoneydateStart->setEnabled(false);
+ m_qbuttonRun->setText(i18n("&Import"));
+ }
+ else
+ m_qbuttonRun->setText(i18n("&Export"));
+
+ m_mymoneyaccount = account;
+
+ m_qbuttonOk->setText(i18n("C&lose"));
+
+ readConfig();
+
+ connect(m_qbuttonBrowse, SIGNAL(clicked()), this, SLOT(slotBrowseClicked()));
+ connect(m_qbuttonRun, SIGNAL(clicked()), this, SLOT(slotRunClicked()));
+ connect(m_qlineeditFile, SIGNAL(textChanged(const QString&)), this,
+ SLOT(slotFileTextChanged(const QString&)));
+ connect(m_qbuttonOk, SIGNAL(clicked()), this, SLOT(accept()));
+}
+
+/** Simple destructor */
+KCsvProgressDlg::~KCsvProgressDlg()
+{
+ writeConfig();
+}
+
+/** Perform the export process */
+void KCsvProgressDlg::performExport(void)
+{
+/*
+ // Do some validation on the inputs.
+ if (m_qlineeditFile->text().isEmpty()) {
+ KMessageBox::information(this, i18n("Please enter the path to the CSV file"), i18n("Export CSV"));
+ m_qlineeditFile->setFocus();
+ return;
+ }
+
+ QString strFile = m_qlineeditFile->text();
+ if(KMyMoneyUtils::appendCorrectFileExt(strFile, QString("csv")))
+ m_qlineeditFile->setText(strFile);
+
+ if (m_kmymoneydateEnd->getQDate() < m_kmymoneydateStart->getQDate()) {
+ KMessageBox::information(this, i18n("Please enter a start date lower than the end date."));
+ return;
+ }
+
+ QFile qfile(m_qlineeditFile->text());
+ if (!qfile.open(IO_WriteOnly)) {
+ KMessageBox::error(this, i18n("Unable to open export file for writing."));
+ return;
+ }
+ qfile.close();
+
+ m_qlabelAccount->setText(m_mymoneyaccount->name());
+ m_qlabelTransaction->setText(QString("0") + i18n(" of ") + QString::number(m_mymoneyaccount->transactionCount()));
+ m_qprogressbar->setTotalSteps(m_mymoneyaccount->transactionCount());
+
+ // Make sure we have an account to operate on
+ if (m_mymoneyaccount) {
+ // Connect to the provided signals in MyMoneyAccount
+ // These signals will be emitted at appropriate times.
+ connect(m_mymoneyaccount, SIGNAL(signalProgressCount(int)), m_qprogressbar, SLOT(setTotalSteps(int)));
+ connect(m_mymoneyaccount, SIGNAL(signalProgress(int)), this, SLOT(slotSetProgress(int)));
+
+ int nTransCount = 0;
+
+ // Do the actual write
+ if (!m_mymoneyaccount->writeCSVFile(m_qlineeditFile->text(), m_kmymoneydateStart->getQDate(),
+ m_kmymoneydateEnd->getQDate(), nTransCount)) {
+ KMessageBox::error(this, i18n("Error occurred whilst exporting to csv file."), i18n("Export CSV"));
+ }
+ else {
+ QString qstringPrompt = i18n("Export finished successfully.\n\n");
+ qstringPrompt += i18n("Number of transactions exported ");
+ qstringPrompt += QString::number(nTransCount);
+ qstringPrompt += ".";
+ KMessageBox::information(this, qstringPrompt, i18n("Export CSV"));
+ }
+ }
+*/
+}
+
+/** perform the import process */
+void KCsvProgressDlg::performImport(void)
+{
+/*
+ // Do some validation on the inputs.
+ if (m_qlineeditFile->text().isEmpty()) {
+ KMessageBox::information(this, i18n("Please enter the path to the CSV file"), i18n("Import CSV"));
+ m_qlineeditFile->setFocus();
+ return;
+ }
+
+ QFile qfile(m_qlineeditFile->text());
+ if (!qfile.open(IO_ReadOnly)) {
+ KMessageBox::error(this, i18n("Unable to open import file for reading."));
+ return;
+ }
+ qfile.close();
+
+ m_qlabelAccount->setText(m_mymoneyaccount->name());
+
+ // Make sure we have an account to operate on
+ if (m_mymoneyaccount) {
+ // Connect to the provided signals in MyMoneyAccount
+ // These signals will be emitted at appropriate times.
+ connect(m_mymoneyaccount, SIGNAL(signalProgressCount(int)), m_qprogressbar, SLOT(setTotalSteps(int)));
+ connect(m_mymoneyaccount, SIGNAL(signalProgress(int)), this, SLOT(slotSetProgress(int)));
+
+ int nTransCount = 0;
+
+ // Do the actual write
+ if (!m_mymoneyaccount->readCSVFile(m_qlineeditFile->text(), nTransCount)) {
+ KMessageBox::error(this, i18n("Error occurred whilst importing csv file."), i18n("Import CSV"));
+ }
+ else {
+ QString qstringPrompt = i18n("Import finished successfully.\n\n");
+ qstringPrompt += i18n("Number of transactions imported ");
+ qstringPrompt += QString::number(nTransCount);
+ qstringPrompt += ".";
+ KMessageBox::information(this, qstringPrompt, i18n("Import CSV"));
+ }
+ }
+*/
+}
+
+/** Called when the user clicks on the Browser button */
+void KCsvProgressDlg::slotBrowseClicked()
+{
+ QString newName = KFileDialog::getSaveFileName(QString::null,"*.CSV");
+ if (!newName.isEmpty())
+ {
+ m_qlineeditFile->setText(newName);
+ m_qbuttonRun->setEnabled(true);
+ }
+ else
+ m_qbuttonRun->setEnabled(false);
+}
+
+/** Called when user clicks on the Run button */
+void KCsvProgressDlg::slotRunClicked()
+{
+ m_qgroupbox->setEnabled(true);
+ if (m_nType==0)
+ performImport();
+ else
+ performExport();
+}
+
+/** Make sure the text input is ok */
+void KCsvProgressDlg::slotFileTextChanged(const QString& text)
+{
+ if (!text.isEmpty()) {
+ m_qlineeditFile->setText(text);
+ m_qbuttonRun->setEnabled(true);
+ } else
+ m_qbuttonRun->setEnabled(false);
+}
+
+void KCsvProgressDlg::readConfig(void)
+{
+ KConfig *kconfig = KGlobal::config();
+ kconfig->setGroup("Last Use Settings");
+ m_kmymoneydateStart->setDate(kconfig->readDateTimeEntry("KCsvProgressDlg_StartDate").date());
+ m_kmymoneydateEnd->setDate(kconfig->readDateTimeEntry("KCsvProgressDlg_EndDate").date());
+ m_qlineeditFile->setText(kconfig->readEntry("KCsvProgressDlg_LastFile", ""));
+ if (m_qlineeditFile->text().length()>=1)
+ m_qbuttonRun->setEnabled(true);
+ else
+ m_qbuttonRun->setEnabled(false);
+}
+
+void KCsvProgressDlg::writeConfig(void)
+{
+ KConfig *kconfig = KGlobal::config();
+ kconfig->setGroup("Last Use Settings");
+ kconfig->writeEntry("KCsvProgressDlg_LastFile", m_qlineeditFile->text());
+ kconfig->writeEntry("KCsvProgressDlg_StartDate", QDateTime(m_kmymoneydateStart->date()));
+ kconfig->writeEntry("KCsvProgressDlg_EndDate", QDateTime(m_kmymoneydateEnd->date()));
+ kconfig->sync();
+}
+
+/** Update the progress bar, and update the transaction count indicator. */
+void KCsvProgressDlg::slotSetProgress(int progress)
+{
+ m_qprogressbar->setProgress(progress);
+ QString qstring = QString::number(progress);
+ qstring += i18n(" of ");
+ qstring += QString::number(m_qprogressbar->totalSteps());
+ m_qlabelTransaction->setText(qstring);
+}
+
+#include "kcsvprogressdlg.moc"
diff --git a/kmymoney2/dialogs/kcsvprogressdlg.h b/kmymoney2/dialogs/kcsvprogressdlg.h
new file mode 100644
index 0000000..339d210
--- /dev/null
+++ b/kmymoney2/dialogs/kcsvprogressdlg.h
@@ -0,0 +1,68 @@
+/***************************************************************************
+ kcsvprogressdlg.h - description
+ -------------------
+ begin : Sun Jul 29 2001
+ copyright : (C) 2000-2001 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+#ifndef KCSVPROGRESSDLG_H
+#define KCSVPROGRESSDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qwidget.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include "../mymoney/mymoneyaccount.h"
+#include "../dialogs/kcsvprogressdlgdecl.h"
+
+/**
+ * This class is used to show the progress of an import or export of type
+ * csv. It could eventually become a base class for other import/export
+ * types which would reimplement performImport/performExport.
+ *
+ * @author Michael Edwardes 2000-2001
+ * $Id: kcsvprogressdlg.h,v 1.5 2005/03/23 20:42:31 ipwizard Exp $
+ *
+ * @short A class to show the progress of a CSV import or export.
+**/
+class KCsvProgressDlg : public KCsvProgressDlgDecl {
+ Q_OBJECT
+private:
+ MyMoneyAccount *m_mymoneyaccount;
+ int m_nType;
+
+protected:
+ void performExport(void);
+ void performImport(void);
+ void readConfig(void);
+ void writeConfig(void);
+
+protected slots:
+ void slotBrowseClicked();
+ void slotRunClicked();
+ void slotFileTextChanged(const QString& text);
+ void slotSetProgress(int progress);
+
+public:
+ KCsvProgressDlg(int type, MyMoneyAccount *account, QWidget *parent=0, const char *name=0);
+ ~KCsvProgressDlg();
+};
+
+#endif
diff --git a/kmymoney2/dialogs/kcsvprogressdlgdecl.ui b/kmymoney2/dialogs/kcsvprogressdlgdecl.ui
new file mode 100644
index 0000000..4b1afd5
--- /dev/null
+++ b/kmymoney2/dialogs/kcsvprogressdlgdecl.ui
@@ -0,0 +1,535 @@
+<!DOCTYPE UI><UI>
+<class>KCsvProgressDlgDecl</class>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>kcsvprogressdlgdecl</cstring>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>CSV Dialog</string>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout7</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel2_2</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>CSV Dialog. Choose a file and then click on Run. You can view your progress at
+the bottom of the screen.
+
+You can cancel the process at any time by clicking on the Cancel button.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>Line</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Line2</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout20</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout19</cstring>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Choose the csv file:</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout18</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>m_qlineeditFile</cstring>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>m_qbuttonBrowse</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Browse</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget>
+ <class>QGroupBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>m_qgroupboxDates</cstring>
+ </property>
+ <property stdset="1">
+ <name>title</name>
+ <string>Between These Dates</string>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout8</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lblStartDate</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>minimumSize</name>
+ <size>
+ <width>50</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Start on:</string>
+ </property>
+ </widget>
+ <widget>
+ <class>kMyMoneyDateInput</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>m_kmymoneydateStart</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout7_2</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lblEndDate</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>minimumSize</name>
+ <size>
+ <width>50</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>End on:</string>
+ </property>
+ </widget>
+ <widget>
+ <class>kMyMoneyDateInput</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>m_kmymoneydateEnd</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout7</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer3</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>m_qbuttonRun</cstring>
+ </property>
+ <property stdset="1">
+ <name>enabled</name>
+ <bool>false</bool>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Run</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QGroupBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>m_qgroupbox</cstring>
+ </property>
+ <property stdset="1">
+ <name>enabled</name>
+ <bool>false</bool>
+ </property>
+ <property stdset="1">
+ <name>title</name>
+ <string>Progress Info</string>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout2</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Processing Account:</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>m_qlabelAccount</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Unknown</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Processing Transaction:</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>m_qlabelTransaction</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>0 of 0</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QProgressBar</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>m_qprogressbar</cstring>
+ </property>
+ <property stdset="1">
+ <name>enabled</name>
+ <bool>false</bool>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout3</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer1</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>m_qbuttonOk</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Close</string>
+ </property>
+ <property stdset="1">
+ <name>default</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>kMyMoneyDateInput</class>
+ <header location="global">../widgets/kmymoneydateinput.h</header>
+ <sizehint>
+ <width>90</width>
+ <height>25</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>1</hordata>
+ <verdata>1</verdata>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image>
+ <name>image0</name>
+ <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data>
+ </image>
+</images>
+</UI>
diff --git a/kmymoney2/dialogs/kcurrencycalculator.cpp b/kmymoney2/dialogs/kcurrencycalculator.cpp
new file mode 100644
index 0000000..6e674dc
--- /dev/null
+++ b/kmymoney2/dialogs/kcurrencycalculator.cpp
@@ -0,0 +1,315 @@
+/***************************************************************************
+ kcurrencycalculator.cpp - description
+ -------------------
+ begin : Thu Apr 8 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlabel.h>
+#include <qradiobutton.h>
+#include <qcheckbox.h>
+#include <qwidgetstack.h>
+#include <qgroupbox.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kpushbutton.h>
+#include <kcombobox.h>
+#include <kstdguiitem.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kcurrencycalculator.h"
+
+#include <kmymoney/kmymoneyedit.h>
+#include <kmymoney/kmymoneydateinput.h>
+#include <kmymoney/kmymoneycurrencyselector.h>
+#include <kmymoney/mymoneyprice.h>
+#include <kmymoney/mymoneytransaction.h>
+#include <kmymoney/kmymoneyglobalsettings.h>
+
+#include "../kmymoneyutils.h"
+
+bool KCurrencyCalculator::setupSplitPrice(MyMoneyMoney& shares, const MyMoneyTransaction& t, const MyMoneySplit& s, const QMap<QString, MyMoneyMoney>& priceInfo, QWidget* parentWidget)
+{
+ bool rc = true;
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ if(!s.value().isZero()) {
+ MyMoneyAccount cat = file->account(s.accountId());
+ MyMoneySecurity toCurrency;
+ toCurrency = file->security(cat.currencyId());
+ // determine the fraction required for this category/account
+ int fract = cat.fraction(toCurrency);
+
+ if(cat.currencyId() != t.commodity()) {
+
+ MyMoneySecurity fromCurrency;
+ MyMoneyMoney fromValue, toValue;
+ fromCurrency = file->security(t.commodity());
+ // display only positive values to the user
+ fromValue = s.value().abs();
+
+ // if we had a price info in the beginning, we use it here
+ if(priceInfo.find(cat.currencyId()) != priceInfo.end()) {
+ toValue = (fromValue * priceInfo[cat.currencyId()]).convert(fract);
+ }
+
+ // if the shares are still 0, we need to change that
+ if(toValue.isZero()) {
+ MyMoneyPrice price = file->price(fromCurrency.id(), toCurrency.id());
+ // if the price is valid calculate the shares. If it is invalid
+ // assume a conversion rate of 1.0
+ if(price.isValid()) {
+ toValue = (price.rate(toCurrency.id()) * fromValue).convert(fract);
+ } else {
+ toValue = fromValue;
+ }
+ }
+
+ // now present all that to the user
+ KCurrencyCalculator calc(fromCurrency,
+ toCurrency,
+ fromValue,
+ toValue,
+ t.postDate(),
+ fract,
+ parentWidget, "currencyCalculator");
+
+ if(calc.exec() == QDialog::Rejected) {
+ rc = false;
+ } else
+ shares = (s.value() * calc.price()).convert(fract);
+
+ } else {
+ shares = s.value().convert(fract);
+ }
+ } else
+ shares = s.value();
+
+ return rc;
+}
+
+KCurrencyCalculator::KCurrencyCalculator(const MyMoneySecurity& from, const MyMoneySecurity& to, const MyMoneyMoney& value, const MyMoneyMoney& shares, const QDate& date, const signed64 resultFraction, QWidget *parent, const char *name ) :
+ KCurrencyCalculatorDecl(parent, name),
+ m_fromCurrency(from),
+ m_toCurrency(to),
+ m_result(shares.abs()),
+ m_value(value.abs()),
+ m_resultFraction(resultFraction)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ m_dateFrame->hide();
+ if(date.isValid())
+ m_dateEdit->setDate(date);
+ else
+ m_dateEdit->setDate(QDate::currentDate());
+
+ m_fromCurrencyText->setText(m_fromCurrency.isCurrency() ? m_fromCurrency.id() : m_fromCurrency.tradingSymbol());
+ m_toCurrencyText->setText(m_toCurrency.isCurrency() ? m_toCurrency.id() : m_toCurrency.tradingSymbol());
+
+ m_fromAmount->setText(m_value.formatMoney("", MyMoneyMoney::denomToPrec(m_fromCurrency.smallestAccountFraction())));
+
+ m_dateText->setText(KGlobal::locale()->formatDate(date, true));
+
+ m_fromType->setText(KMyMoneyUtils::securityTypeToString(m_fromCurrency.securityType()));
+ m_toType->setText(KMyMoneyUtils::securityTypeToString(m_toCurrency.securityType()));
+
+ // load button icons
+ m_cancelButton->setGuiItem(KStdGuiItem::cancel());
+ m_okButton->setGuiItem(KStdGuiItem::ok());
+
+ m_updateButton->setChecked(KMyMoneyGlobalSettings::priceHistoryUpdate());
+
+ // setup initial result
+ if(m_result == MyMoneyMoney() && !m_value.isZero()) {
+ MyMoneyPrice pr = file->price(m_fromCurrency.id(), m_toCurrency.id(), date);
+ if(pr.isValid()) {
+ m_result = m_value * pr.rate(m_fromCurrency.id());
+ }
+ }
+
+ // fill in initial values
+ m_toAmount->loadText(m_result.formatMoney("", MyMoneyMoney::denomToPrec(m_resultFraction)));
+ m_toAmount->setPrecision(MyMoneyMoney::denomToPrec(m_resultFraction));
+
+ m_conversionRate->setPrecision(KMyMoneyGlobalSettings::pricePrecision());
+
+ connect(m_amountButton, SIGNAL(clicked()), this, SLOT(slotSetToAmount()));
+ connect(m_rateButton, SIGNAL(clicked()), this, SLOT(slotSetExchangeRate()));
+
+ connect(m_toAmount, SIGNAL(valueChanged(const QString&)), this, SLOT(slotUpdateResult(const QString&)));
+ connect(m_conversionRate, SIGNAL(valueChanged(const QString&)), this, SLOT(slotUpdateRate(const QString&)));
+ connect(m_cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
+ connect(m_okButton, SIGNAL(clicked()), this, SLOT(accept()));
+
+ // use this as the default
+ m_amountButton->animateClick();
+ slotUpdateResult(m_toAmount->text());
+
+ // If the from security is not a currency, we only allow entering a price
+ if(!m_fromCurrency.isCurrency()) {
+ m_rateButton->animateClick();
+ m_amountButton->hide();
+ m_toAmount->hide();
+ }
+ m_okButton->setFocus();
+}
+
+KCurrencyCalculator::~KCurrencyCalculator()
+{
+}
+
+void KCurrencyCalculator::setupPriceEditor(void)
+{
+ m_dateFrame->show();
+ m_amountDateFrame->hide();
+ m_updateButton->setChecked(true);
+ m_updateButton->hide();
+}
+
+void KCurrencyCalculator::slotSetToAmount(void)
+{
+ m_rateButton->setChecked(false);
+ m_toAmount->setEnabled(true);
+ m_conversionRate->setEnabled(false);
+}
+
+void KCurrencyCalculator::slotSetExchangeRate(void)
+{
+ m_amountButton->setChecked(false);
+ m_toAmount->setEnabled(false);
+ m_conversionRate->setEnabled(true);
+}
+
+void KCurrencyCalculator::slotUpdateResult(const QString& /*txt*/)
+{
+ MyMoneyMoney result = m_toAmount->value();
+ MyMoneyMoney price(0, 1);
+
+ if(result.isNegative()) {
+ m_toAmount->setValue(-result);
+ slotUpdateResult(QString());
+ return;
+ }
+
+ if(!result.isZero()) {
+ price = result / m_value;
+
+ m_conversionRate->loadText(price.formatMoney("", KMyMoneyGlobalSettings::pricePrecision()));
+ m_result = (m_value * price).convert(m_resultFraction);
+ m_toAmount->loadText(m_result.formatMoney("", MyMoneyMoney::denomToPrec(m_resultFraction)));
+ }
+ updateExample(price);
+}
+
+void KCurrencyCalculator::slotUpdateRate(const QString& /*txt*/)
+{
+ MyMoneyMoney price = m_conversionRate->value();
+
+ if(price.isNegative()) {
+ m_conversionRate->setValue(-price);
+ slotUpdateRate(QString());
+ return;
+ }
+
+ if(!price.isZero()) {
+ m_conversionRate->loadText(price.formatMoney("", KMyMoneyGlobalSettings::pricePrecision()));
+ m_result = (m_value * price).convert(m_resultFraction);
+ m_toAmount->loadText(m_result.formatMoney("", MyMoneyMoney::denomToPrec(m_resultFraction)));
+ }
+ updateExample(price);
+}
+
+void KCurrencyCalculator::updateExample(const MyMoneyMoney& price)
+{
+ QString msg;
+ if(price.isZero()) {
+ msg = QString("1 %1 = ? %2").arg(m_fromCurrency.tradingSymbol())
+ .arg(m_toCurrency.tradingSymbol());
+ if(m_fromCurrency.isCurrency()) {
+ msg += QString("\n");
+ msg += QString("1 %1 = ? %2").arg(m_toCurrency.tradingSymbol())
+ .arg(m_fromCurrency.tradingSymbol());
+ }
+ } else {
+ msg = QString("1 %1 = %2 %3").arg(m_fromCurrency.tradingSymbol())
+ .arg(price.formatMoney("", KMyMoneyGlobalSettings::pricePrecision()))
+ .arg(m_toCurrency.tradingSymbol());
+ if(m_fromCurrency.isCurrency()) {
+ msg += QString("\n");
+ msg += QString("1 %1 = %2 %3").arg(m_toCurrency.tradingSymbol())
+ .arg((MyMoneyMoney(1,1)/price).formatMoney("", KMyMoneyGlobalSettings::pricePrecision()))
+ .arg(m_fromCurrency.tradingSymbol());
+ }
+ }
+ m_conversionExample->setText(msg);
+ m_okButton->setEnabled(!price.isZero());
+}
+
+void KCurrencyCalculator::accept(void)
+{
+ if(m_conversionRate->isEnabled())
+ slotUpdateRate(QString());
+ else
+ slotUpdateResult(QString());
+
+ if(m_updateButton->isChecked()) {
+ MyMoneyPrice pr = MyMoneyFile::instance()->price(m_fromCurrency.id(), m_toCurrency.id(), m_dateEdit->date());
+ if(!pr.isValid()
+ || pr.date() != m_dateEdit->date()
+ || (pr.date() == m_dateEdit->date() && pr.rate(m_fromCurrency.id()) != price())) {
+ pr = MyMoneyPrice(m_fromCurrency.id(), m_toCurrency.id(), m_dateEdit->date(), price(), i18n("User"));
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyFile::instance()->addPrice(pr);
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ qDebug("Cannot add price");
+ delete e;
+ }
+ }
+ }
+
+ // remember setting for next round
+ KMyMoneyGlobalSettings::setPriceHistoryUpdate(m_updateButton->isChecked());
+
+ KCurrencyCalculatorDecl::accept();
+}
+
+const MyMoneyMoney KCurrencyCalculator::price(void) const
+{
+ // This should fix https://bugs.kde.org/show_bug.cgi?id=205254 but
+ // I am not sure about any side effects when dealing with multi-
+ // currency transactions.
+ //
+ // The following line is the original version of this code
+ // which causes some rounding issues (see the above bug entry)
+ // return m_result / m_value;
+ return m_conversionRate->value();
+}
+
+
+#include "kcurrencycalculator.moc"
diff --git a/kmymoney2/dialogs/kcurrencycalculator.h b/kmymoney2/dialogs/kcurrencycalculator.h
new file mode 100644
index 0000000..d9934da
--- /dev/null
+++ b/kmymoney2/dialogs/kcurrencycalculator.h
@@ -0,0 +1,88 @@
+/***************************************************************************
+ kcurrencycalculator.h - description
+ -------------------
+ begin : Thu Apr 8 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KCURRENCYCALCULATOR_H
+#define KCURRENCYCALCULATOR_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../dialogs/kcurrencycalculatordecl.h"
+#include <kmymoney/mymoneyfile.h>
+
+/**
+ * @author Thomas Baumgart
+ */
+
+class KCurrencyCalculator : public KCurrencyCalculatorDecl
+{
+ Q_OBJECT
+
+public:
+ /**
+ * @param from the @p from currency
+ * @param to the @p to currency
+ * @param value the value to be converted
+ * @param shares the number of foreign currency units
+ * @param date the date when the conversion took place
+ * @param resultFraction the smallest fraction of the result (default 100)
+ * @param parent see QWidget constructor
+ * @param name see QWidget constructor
+ *
+ * @note @p value must not be 0!
+ */
+ KCurrencyCalculator(const MyMoneySecurity& from, const MyMoneySecurity& to, const MyMoneyMoney& value, const MyMoneyMoney& shares, const QDate& date, const signed64 resultFraction = 100, QWidget *parent=0, const char *name=0);
+ ~KCurrencyCalculator();
+
+ const MyMoneyMoney price(void) const;
+
+ void setupPriceEditor(void);
+
+ static bool setupSplitPrice(MyMoneyMoney& shares, const MyMoneyTransaction& t, const MyMoneySplit& s, const QMap<QString, MyMoneyMoney>& priceInfo, QWidget* parentWidget);
+
+protected:
+ void updateExample(const MyMoneyMoney& price);
+
+protected slots:
+ void slotSetToAmount(void);
+ void slotSetExchangeRate(void);
+ void slotUpdateResult(const QString& txt);
+ void slotUpdateRate(const QString& txt);
+ virtual void accept(void);
+
+private:
+ MyMoneySecurity m_fromCurrency;
+ MyMoneySecurity m_toCurrency;
+ MyMoneyMoney m_result;
+ MyMoneyMoney m_value;
+ signed64 m_resultFraction;
+};
+
+#endif
diff --git a/kmymoney2/dialogs/kcurrencycalculatordecl.ui b/kmymoney2/dialogs/kcurrencycalculatordecl.ui
new file mode 100644
index 0000000..688a282
--- /dev/null
+++ b/kmymoney2/dialogs/kcurrencycalculatordecl.ui
@@ -0,0 +1,414 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KCurrencyCalculatorDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KCurrencyCalculatorDecl</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>387</width>
+ <height>368</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Exchange Rate/Price Editor</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>m_amountDateFrame</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Plain</enum>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout9</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Amount</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_fromAmount</cstring>
+ </property>
+ <property name="text">
+ <string>xxx</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer10</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>80</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Date</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_dateText</cstring>
+ </property>
+ <property name="text">
+ <string>xxx</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>145</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout9</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox2_2</cstring>
+ </property>
+ <property name="title">
+ <string>Convert from</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_fromType</cstring>
+ </property>
+ <property name="text">
+ <string>Currency</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_fromCurrencyText</cstring>
+ </property>
+ <property name="text">
+ <string>xxx</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox3</cstring>
+ </property>
+ <property name="title">
+ <string>Convert to</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_toType</cstring>
+ </property>
+ <property name="text">
+ <string>Currency</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_toCurrencyText</cstring>
+ </property>
+ <property name="text">
+ <string>xxx</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout14</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="kMyMoneyEdit" row="1" column="1">
+ <property name="name">
+ <cstring>m_conversionRate</cstring>
+ </property>
+ </widget>
+ <widget class="QButtonGroup" row="0" column="0" rowspan="3" colspan="1">
+ <property name="name">
+ <cstring>buttonGroup1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Plain</enum>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ <property name="exclusive">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_amountButton</cstring>
+ </property>
+ <property name="text">
+ <string>To amount</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_rateButton</cstring>
+ </property>
+ <property name="text">
+ <string>Exchange rate / Price</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QFrame" row="3" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>m_dateFrame</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Plain</enum>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Date</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyDateInput">
+ <property name="name">
+ <cstring>m_dateEdit</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="2" column="1">
+ <property name="name">
+ <cstring>m_conversionExample</cstring>
+ </property>
+ <property name="text">
+ <string>xx
+xx</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="0" column="1">
+ <property name="name">
+ <cstring>m_toAmount</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_updateButton</cstring>
+ </property>
+ <property name="text">
+ <string>Update price history</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="Line">
+ <property name="name">
+ <cstring>line3</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_okButton</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_cancelButton</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<tabstops>
+ <tabstop>m_amountButton</tabstop>
+ <tabstop>m_rateButton</tabstop>
+ <tabstop>m_updateButton</tabstop>
+ <tabstop>m_okButton</tabstop>
+ <tabstop>m_cancelButton</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/kcurrencyeditdlg.cpp b/kmymoney2/dialogs/kcurrencyeditdlg.cpp
new file mode 100644
index 0000000..55bac30
--- /dev/null
+++ b/kmymoney2/dialogs/kcurrencyeditdlg.cpp
@@ -0,0 +1,291 @@
+/***************************************************************************
+ kcurrencyeditdlg.cpp - description
+ -------------------
+ begin : Wed Mar 24 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include <locale.h>
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qheader.h>
+#include <qtimer.h>
+
+#include <qpixmap.h>
+#include <qbitmap.h>
+#include <qlabel.h>
+#include <qgroupbox.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kpushbutton.h>
+#include <klistview.h>
+#include <kstandarddirs.h>
+#include <kmessagebox.h>
+#include <kinputdialog.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kcurrencyeditdlg.h"
+
+#include <kmymoney/mymoneysecurity.h>
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/kmymoneylistviewitem.h>
+#include <kmymoney/kmymoneyaccountselector.h>
+#include <kmymoney/kmymoneylineedit.h>
+
+#include "../widgets/kmymoneypriceview.h"
+
+KCurrencyEditDlg::KCurrencyEditDlg(QWidget *parent, const char *name ) :
+ KCurrencyEditDlgDecl(parent,name)
+{
+ m_currencyList->addColumn(i18n("Currency"));
+ m_currencyList->header()->hide();
+
+ // FIXME: the online source table currently has no functionality
+ m_onlineSourceTable->hide();
+
+ connect(m_currencyList, SIGNAL(rightButtonPressed(QListViewItem* , const QPoint&, int)),
+ this, SLOT(slotListClicked(QListViewItem*, const QPoint&, int)));
+ connect(m_currencyList, SIGNAL(selectionChanged(QListViewItem*)), this, SLOT(slotSelectCurrency(QListViewItem*)));
+
+
+ connect(m_currencyList, SIGNAL(itemRenamed(QListViewItem*,int,const QString&)), this, SIGNAL(renameCurrency(QListViewItem*,int,const QString&)));
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotLoadCurrencies()));
+
+ slotLoadCurrencies();
+
+ connect(m_baseCurrencyButton, SIGNAL(clicked()), this, SLOT(slotSelectBaseCurrency()));
+ connect(buttonClose, SIGNAL(clicked()), this, SLOT(slotClose()));
+
+ // FIXME: currently, no online help available
+ buttonHelp->hide();
+
+ // FIXME this is currently unused so we hide it also
+ m_description->hide();
+
+ resize(width()-1, height()-1);
+ QTimer::singleShot(10, this, SLOT(timerDone()));
+}
+
+void KCurrencyEditDlg::timerDone(void)
+{
+ if(!m_currency.id().isEmpty()) {
+ QListViewItemIterator it(m_currencyList);
+ QListViewItem* q;
+ while((q = it.current()) != 0) {
+ KMyMoneyListViewItem* p = static_cast<KMyMoneyListViewItem *>(q);
+ if(p->id() == m_currency.id()) {
+ m_currencyList->ensureItemVisible(q);
+ break;
+ }
+ ++it;
+ }
+ }
+ // the resize operation does the trick to adjust
+ // all widgets in the view to the size they should
+ // have and show up correctly. Don't ask me, why
+ // this is, but it cured the problem (ipwizard).
+ resize(width()+1, height()+1);
+}
+
+KCurrencyEditDlg::~KCurrencyEditDlg()
+{
+}
+
+void KCurrencyEditDlg::resizeEvent(QResizeEvent* /* e*/)
+{
+ int w = m_currencyList->visibleWidth();
+
+ m_currencyList->setColumnWidth(0, w);
+}
+
+void KCurrencyEditDlg::slotLoadCurrencies(void)
+{
+ QValueList<MyMoneySecurity> list = MyMoneyFile::instance()->currencyList();
+ QValueList<MyMoneySecurity>::ConstIterator it;
+ QListViewItem *first = 0;
+
+ QString localCurrency(localeconv()->int_curr_symbol);
+ localCurrency.truncate(3);
+
+ QString baseCurrency = MyMoneyFile::instance()->baseCurrency().id();
+ // construct a transparent 16x16 pixmap
+ QPixmap empty(16, 16);
+ empty.setMask(QBitmap(16, 16, true));
+
+ m_currencyList->clear();
+ for(it = list.begin(); it != list.end(); ++it) {
+ KMyMoneyListViewItem* p = new KMyMoneyListViewItem(m_currencyList, (*it).name(), QString(), (*it).id());
+ p->setRenameEnabled(0, true);
+
+ if((*it).id() == baseCurrency) {
+ p->setPixmap(0, QPixmap( locate("icon","hicolor/16x16/apps/kmymoney2.png")));
+ if(m_currency.id().isEmpty())
+ first = p;
+ } else {
+ p->setPixmap(0, empty);
+ }
+
+ // if we had a previously selected
+ if(!m_currency.id().isEmpty()) {
+ if(m_currency.id() == p->id())
+ first = p;
+ } else if ((*it).id() == localCurrency && !first)
+ first = p;
+ }
+
+ if(first == 0)
+ first = m_currencyList->firstChild();
+ if(first != 0) {
+ m_currencyList->setSelected(first, true);
+ m_currencyList->ensureItemVisible(first);
+ }
+
+ slotSelectCurrency(first);
+}
+
+void KCurrencyEditDlg::updateCurrency(void)
+{
+ if(!m_currency.id().isEmpty()) {
+ if(m_symbolEdit->text() != m_currency.tradingSymbol()) {
+ m_currency.setTradingSymbol(m_symbolEdit->text());
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyFile::instance()->modifyCurrency(m_currency);
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ qWarning("Updateing the currency failed!");
+ delete e;
+ }
+ }
+ }
+}
+
+void KCurrencyEditDlg::slotSelectCurrency(const QString& id)
+{
+ QListViewItemIterator it(m_currencyList);
+
+ while(it.current()) {
+ KMyMoneyListViewItem* p = static_cast<KMyMoneyListViewItem*>(it.current());
+ if(p->id() == id) {
+ slotSelectCurrency(p);
+ m_currencyList->setSelected(p, true);
+ m_currencyList->ensureItemVisible(p);
+ break;
+ }
+ ++it;
+ }
+}
+
+void KCurrencyEditDlg::slotSelectCurrency(QListViewItem *item)
+{
+ QMap<QDate, MyMoneyMoney> history;
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ updateCurrency();
+
+ m_detailGroup->setEnabled(item != 0);
+ m_onlineSourceTable->clear();
+ m_idLabel->setText(QString());
+ m_symbolEdit->setText(QString());
+
+ if(item) {
+ try {
+ KMyMoneyListViewItem* p = static_cast<KMyMoneyListViewItem *>(item);
+ m_currency = file->security(p->id());
+ m_idLabel->setText(m_currency.id());
+ m_symbolEdit->setText(m_currency.tradingSymbol());
+
+ } catch(MyMoneyException *e) {
+ delete e;
+ m_currency = MyMoneySecurity();
+ m_onlineSourceTable->clear();
+ m_idLabel->setText(QString());
+ m_symbolEdit->setText(QString());
+ }
+ m_baseCurrencyButton->setDisabled(m_currency.id() == file->baseCurrency().id());
+ emit selectObject(m_currency);
+ }
+}
+
+void KCurrencyEditDlg::slotClose(void)
+{
+ updateCurrency();
+ accept();
+}
+
+void KCurrencyEditDlg::slotStartRename(void)
+{
+ QListViewItemIterator it_l(m_currencyList, QListViewItemIterator::Selected);
+ QListViewItem* it_v;
+ if((it_v = it_l.current()) != 0) {
+ it_v->startRename(0);
+ }
+}
+
+void KCurrencyEditDlg::slotListClicked(QListViewItem* item, const QPoint&, int)
+{
+ slotSelectCurrency(item);
+ emit openContextMenu(m_currency);
+}
+
+void KCurrencyEditDlg::slotRenameCurrency(QListViewItem* item, int /* col */, const QString& txt)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ KMyMoneyListViewItem* p = static_cast<KMyMoneyListViewItem *>(item);
+
+ try {
+ if(txt != m_currency.name()) {
+ qDebug("Renaming");
+ MyMoneySecurity currency = file->currency(p->id());
+ currency.setName(txt);
+ MyMoneyFileTransaction ft;
+ try {
+ file->modifyCurrency(currency);
+ m_currency = currency;
+ ft.commit();
+ } catch(MyMoneyException* e) {
+ qDebug("Renaming currency failed");
+ delete e;
+ }
+ }
+ } catch(MyMoneyException *e) {
+ delete e;
+ updateCurrency();
+ }
+}
+
+void KCurrencyEditDlg::slotSelectBaseCurrency(void)
+{
+ if(!m_currency.id().isEmpty()) {
+ QListViewItem* p = m_currencyList->selectedItem();
+ emit selectBaseCurrency(m_currency);
+ // in case the dataChanged() signal was not sent out (nested FileTransaction)
+ // we update the list manually
+ if(p == m_currencyList->selectedItem())
+ slotLoadCurrencies();
+ }
+}
+
+#include "kcurrencyeditdlg.moc"
diff --git a/kmymoney2/dialogs/kcurrencyeditdlg.h b/kmymoney2/dialogs/kcurrencyeditdlg.h
new file mode 100644
index 0000000..f1a4871
--- /dev/null
+++ b/kmymoney2/dialogs/kcurrencyeditdlg.h
@@ -0,0 +1,84 @@
+/***************************************************************************
+ kcurrencyeditdlg.h - description
+ -------------------
+ begin : Wed Mar 24 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KCURRENCYEDITDLG_H
+#define KCURRENCYEDITDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+class KPopupMenu;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../dialogs/kcurrencyeditdlgdecl.h"
+#include "../mymoney/mymoneysecurity.h"
+
+/**
+ * @author Thomas Baumgart
+ */
+
+class KCurrencyEditDlg : public KCurrencyEditDlgDecl
+{
+ Q_OBJECT
+public:
+ KCurrencyEditDlg(QWidget *parent=0, const char *name=0);
+ ~KCurrencyEditDlg();
+
+public slots:
+ void slotSelectCurrency(const QString& id);
+
+protected:
+ /// the resize event
+ virtual void resizeEvent(QResizeEvent*);
+ void updateCurrency(void);
+
+protected slots:
+ void slotSelectCurrency(QListViewItem *);
+
+ void slotClose(void);
+ void slotStartRename(void);
+ void slotListClicked(QListViewItem* item, const QPoint&, int);
+ void slotRenameCurrency(QListViewItem* item, int col, const QString& txt);
+ void slotLoadCurrencies(void);
+
+private slots:
+ void timerDone(void);
+ void slotSelectBaseCurrency(void);
+
+signals:
+ void selectObject(const MyMoneySecurity& currency);
+ void openContextMenu(const MyMoneySecurity& currency);
+ void renameCurrency(QListViewItem* item, int, const QString& txt);
+ void selectBaseCurrency(const MyMoneySecurity& currency);
+
+private:
+ MyMoneySecurity m_currency;
+};
+
+#endif
diff --git a/kmymoney2/dialogs/kcurrencyeditdlgdecl.ui b/kmymoney2/dialogs/kcurrencyeditdlgdecl.ui
new file mode 100644
index 0000000..4a0a740
--- /dev/null
+++ b/kmymoney2/dialogs/kcurrencyeditdlgdecl.ui
@@ -0,0 +1,304 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>KCurrencyEditDlgDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KCurrencyEditDlgDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>666</width>
+ <height>516</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Currencies</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KListView">
+ <property name="name">
+ <cstring>m_currencyList</cstring>
+ </property>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>m_baseCurrencyFrame</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Plain</enum>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>51</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_baseCurrencyButton</cstring>
+ </property>
+ <property name="text">
+ <string>Select as base currency</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>61</width>
+ <height>31</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>m_detailGroup</cstring>
+ </property>
+ <property name="title">
+ <string>Details</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Symbol</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>m_idLabel</cstring>
+ </property>
+ <property name="text">
+ <string>real ID</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>m_symbolEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>ID</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_description</cstring>
+ </property>
+ <property name="text">
+ <string>X</string>
+ </property>
+ </widget>
+ <widget class="KListView">
+ <column>
+ <property name="text">
+ <string>Currency</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Online Source</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>m_onlineSourceTable</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonHelp</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Help</string>
+ </property>
+ <property name="accel">
+ <string>F1</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonClose</cstring>
+ </property>
+ <property name="text">
+ <string>Close</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>If this button is not activated, select the base currency first.</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Press this button to close the dialog. If the button is not activated, select your base currency.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>kMyMoneyLineEdit</class>
+ <header location="local">../widgets/kmymoneylineedit.h</header>
+ <sizehint>
+ <width>90</width>
+ <height>25</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="1114">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000042149444154789c8d95c18b1c4514c67fbb29e5b54ea05b26da1d36b08d096e8b11261871837bc8e282ac7ac82187e049a317e32d37110992bf42123c694eea414c0e0bf1b0ec6c402139485a54e8810c54c10e741146fa110bd643f74c12bd642e4d75f77cf5d5ef7dafdfc2ce7087d9eff32fdfdff74e5114104011e489d6e952cce5cfbe5998692dec0c77b87aedd3fddd9f2b3efce02291082209aa3504685022e4ffd7a000a82a765c515615ce95acae659c3f7765c100ec6e575cf8f822e991025f3b6a6f890c484f181ccfc1583428f5d4e2fe84da039aa04121b40eb32483a0ec6e5bce9f8385d36fa7fb9b1b17c8f31cbfe7a95c45be94520c72b2141a1caa160d1666e24ea94aa11ee7685054159d2ada34d41387c40dc63b8844f0b5c73a4bb19cb3f9de001f2aac1fa23aa209168c004224902e29d22ff1e38abbdb275055c4800610233867311a1491847a62c98f66ac6f14d8e99072f22daa15b68a8108424d6422e24c88e3966fbce4c9d786945b27f0be0103ed13c16004d59a2c4d58df28a87548e9aee2274ab95d60c7193c9a0281fc959ae2a4450364a9e2572c7a2b43438374ef2dd2154012d050514dbec7396578a3130d9d6850066f0ad9d186f2d78cdbbb799b0a202f2c48d3aebbb418310240b112637588574bf54b8efaa4fd9b691dacbf5b305813542bae63a9eee4c4694d967b5494eca8c7ef0933bdc5d90e6a2caa0e3f013b7adce9fa5b03d637561113a30106a71d18c5fd9677058338ad01e91c0b8b743b880182ce19cd9c0e5e2b583fbdda565d3d04cfedad180942133af201b2bc3588e111c680068f489780ce69b192b279768088524f2b3458ea694d3de99a4323bc976ed34eb86b98c51993f6be10f77240c99685cd731991f1582df15aa15a213d583f5313a7806988fb8a0640e336359d9e9933568bf44062214ba19e2a7652a13d8b068ff596b807182189234e9da9f1ceb78c81b28c3ac6fe21e306c58e41d5118952acd6a0c2f56b9e6a5c72f346cdcd6b19a3bf8010010d714f89533b674c90c7189b598eab12a45fb5c75b8253672b863fbcccf5af93b6904119fe9851bf5153ac3a746ae7b9d5698c1dc58f313e70e4707ce9d84bafa2f79fc23fb8c7c1438ef04031a2642fee21060ec69ee47020796ecaa12313ccd333d1b67935047acf2be3bb11aa010dbe656cc755dbe3b772084a7ebc6d5711253b593dfcc0cc8fcd3cafda455512c7f200ec56cbfac0f1d7d34b7fdf0f98fd88a92a7e9cb0e70cc933c0b38a2c823ea0bd76c70c016adb67f47bc2a117a6d40abeea33fa23c2fb867edfb413e4a34fded94ffb3991c46dc7754cd3634ad2af490b857f5a5137126a97e02a8120a485235b6a28ef80bd077ee2b9f2d54fed04595dcbd8ddb6c4bd87334c10cadb2064e856177e7864e669fbe1df154a0142839f7ad2e5b6880bff1da66eece78e315d959f609da670f98befe6c3f45fb42672c9acff7f660000000049454e44ae426082</data>
+ </image>
+</images>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/keditequityentrydecl.ui b/kmymoney2/dialogs/keditequityentrydecl.ui
new file mode 100644
index 0000000..4acf703
--- /dev/null
+++ b/kmymoney2/dialogs/keditequityentrydecl.ui
@@ -0,0 +1,306 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>KEditEquityEntryDecl</class>
+<author>Kevin Tambascio </author>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KEditEquityEntryDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>380</width>
+ <height>482</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Edit Equity</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>edtEquityName</cstring>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="2" column="1">
+ <item>
+ <property name="text">
+ <string>Stock</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Mutual Fund</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Bond</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>cmbInvestmentType</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Smallest fraction:</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="3" column="1">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>1 /</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit">
+ <property name="name">
+ <cstring>edtFraction</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>lblType</cstring>
+ </property>
+ <property name="text">
+ <string>Investment Type:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>lblEquityName</cstring>
+ </property>
+ <property name="text">
+ <string>Equity Name:</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>edtMarketSymbol</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>lblSymbol</cstring>
+ </property>
+ <property name="text">
+ <string>Market Symbol:</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox1</cstring>
+ </property>
+ <property name="title">
+ <string>Price History</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KMyMoneyPriceView">
+ <property name="name">
+ <cstring>kpvPriceHistory</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>btnAddEntry</cstring>
+ </property>
+ <property name="text">
+ <string>Add</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>btnEditEntry</cstring>
+ </property>
+ <property name="text">
+ <string>Edit</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>btnRemoveEntry</cstring>
+ </property>
+ <property name="text">
+ <string>Remove</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>238</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>btnOK</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>btnCancel</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>kMyMoneyEdit</class>
+ <header location="local">../widgets/kmymoneyedit.h</header>
+ <sizehint>
+ <width>90</width>
+ <height>25</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>1</hordata>
+ <verdata>1</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+ <customwidget>
+ <class>KMyMoneyPriceView</class>
+ <header location="local">../widgets/kmymoneypriceview.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image1</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="256">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000000c749444154789cad55db1184200c4c180bb005eab1cd6b8112b40d4bf1bee2486ef3006fbf1c93ece605f07eece4e1a4ed42ff2b35f6e2961132e46309941952ed8f628a761a21f56217cb20b04a45fe276d97f8ffb422431ad96e62a4ee057a83131bcc38431a6d057f8eb5cb36438afcb5cded719614011e9088308374c61aa9adb0e0651b5552b4b29efaacb099312ad5da5b2d50a93124463b2adf516fbb8cbd1354a9b1b667c8a787674144f9f982bcb93635ba8cb3fd1b2616f251013403fee763fabce8bff0aa6c989d7e67440000000049454e44ae426082</data>
+ </image>
+ <image name="image1">
+ <data format="PNG" length="826">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000030149444154789cb59531681b5718c77f0e377c070e3c810a3a70e0041eac51852e0a19e45134830a1d9a4c69a04bc8928e990a693a640e1d0c8642b08742321894c1507991b484c890902bb8701a047760c3bd21701fe4201dde49b6a41a32b8df72dcbbeffdbefffbbfefbd5b1b0c07cce266ebe667ae2006c3c1dada0cdc3be87d6e6c35b0d692a409d9c7ec8b20d65ae29398d19b1114e7e3de4ce98b3f5e10dc0053cf0951b4506496e1b964bf7ce6c585d9054c62d01d617ca48be0596553cf496d8f2c8b01c5f795fc93904e85ec4c01a152857a5d9175d0b2805c872080f18595ccc1499a10a225d4e2fbc2877786fe81253ab6c04c8d106e09db5d43ab0d146e5c64d1a23938fb98a185cea1c33eecfd9eba49eb427dcb201e245365f2b7b2fb5b4a3a31dcb927178afe07d86901df870fefa4842aed6f6b74ba42e52b4014d580e1eb9cbd9d94de7e4aad16d2f9be02d805f0b5e532f927a1ffcacea1777f122a8105b164a7c25faf323a5d9f1f1fd600e1e5bec59e2d4b5c7ef5209d0ad17b8b31864e57c0b3e0815ac3ee33253ab664a770ff5185d1a1cb8d2267d3e58aa1dc7d2508cbe597d0e74fdd269aaaf0f52d414c4ea3e9762c996869e42560d7a72e41c4799a2586e74f95e8d8151481fa86efbe7b3398ac58b1a2b8527589f15451ad303ac2293542ad6648a796278f13a27185e4c4754310facb98c53a79e19a3fdc1426ff28c3d7399d1f7cb25343eb96106cf83c790ce9c4f2eb831855c55485663327992eb6dc8a6259874ed700b0b793323cccb9ffa842b30d6133e3e75fea989ac15a8b16ca76b746b0b92278d919774c5b6d48a78697fb29bbcf52468742a32120909c24e899ce67beed5be2db01e22d1e9485bb620e47f9ee9e606a21bd3f5d3744c7e7c54d55e87443867d8b554515ac5db4620e8e4f62263170fd1cdee90aad7640141992891b0f367c9adfe4049bb07d3b7022bd8c687c0978f46684ee084150b65ac1fcca94591b7a90a496e4c095164fb016a2b192a497795cc0f84817aebe25f7bf70ccc54a575c555c03f78ffa5fc0570d1f0c076bff0232285a0901e2257b0000000049454e44ae426082</data>
+ </image>
+</images>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/keditequityentrydlg.cpp b/kmymoney2/dialogs/keditequityentrydlg.cpp
new file mode 100644
index 0000000..854ce9a
--- /dev/null
+++ b/kmymoney2/dialogs/keditequityentrydlg.cpp
@@ -0,0 +1,138 @@
+/***************************************************************************
+ keditequityentrydlg.cpp - description
+ -------------------
+ begin : Sat Mar 6 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qtimer.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kglobal.h>
+#include <kpushbutton.h>
+#include <kiconloader.h>
+#include <kcombobox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "keditequityentrydlg.h"
+#include "kupdatestockpricedlg.h"
+#include "../widgets/kmymoneypriceview.h"
+
+KEditEquityEntryDlg::KEditEquityEntryDlg(const MyMoneySecurity& selectedSecurity, QWidget *parent, const char *name)
+ : KEditEquityEntryDecl(parent, name, true)
+{
+ m_selectedSecurity = selectedSecurity;
+
+ connect(btnOK, SIGNAL(clicked()), this, SLOT(slotOKClicked()));
+ connect(btnCancel, SIGNAL(clicked()), this, SLOT(reject()));
+ connect(edtEquityName, SIGNAL(textChanged(const QString &)), this, SLOT(slotDataChanged()));
+ connect(edtMarketSymbol, SIGNAL(textChanged(const QString &)), this, SLOT(slotDataChanged()));
+ connect(edtFraction, SIGNAL(textChanged(const QString&)), this, SLOT(slotDataChanged()));
+ connect(btnAddEntry, SIGNAL(clicked()), kpvPriceHistory, SLOT(slotAddPrice()));
+ connect(btnEditEntry, SIGNAL(clicked()), kpvPriceHistory, SLOT(slotEditPrice()));
+ connect(btnRemoveEntry, SIGNAL(clicked()), kpvPriceHistory, SLOT(slotDeletePrice()));
+ connect(kpvPriceHistory, SIGNAL(selectionChanged(QListViewItem*)), this, SLOT(slotSelectionChanged(QListViewItem*)));
+
+ //fill in the fields with what we know.
+ edtEquityName->setText(m_selectedSecurity.name());
+ edtMarketSymbol->setText(m_selectedSecurity.tradingSymbol());
+ edtFraction->setPrecision(0);
+ edtFraction->setCalculatorButtonVisible(false);
+ edtFraction->loadText(QString::number(m_selectedSecurity.smallestAccountFraction()));
+ cmbInvestmentType->setCurrentItem((int)m_selectedSecurity.securityType());
+ // FIXME PRICE
+ // kpvPriceHistory->setHistory(m_selectedSecurity.priceHistory());
+
+ // add icons to buttons
+ KIconLoader *il = KGlobal::iconLoader();
+ btnOK->setGuiItem(KStdGuiItem::ok());
+ btnCancel->setGuiItem(KStdGuiItem::cancel());
+ btnRemoveEntry->setGuiItem(KStdGuiItem::remove());
+ btnAddEntry->setGuiItem(KStdGuiItem::add());
+
+ KGuiItem editButtenItem( i18n( "&Edit" ),
+ QIconSet(il->loadIcon("edit", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Modify the selected entry"),
+ i18n("Change the price information of the selected entry."));
+ btnEditEntry->setGuiItem(editButtenItem);
+
+ slotSelectionChanged(0); // make sure buttons are disabled in the beginning
+ slotDataChanged();
+ m_changes = false;
+
+ // force a resize to optimize the layout of all widgets
+ resize(width()-1, height()-1);
+ QTimer::singleShot(10, this, SLOT(slotTimerDone()));
+}
+
+KEditEquityEntryDlg::~KEditEquityEntryDlg()
+{
+}
+
+void KEditEquityEntryDlg::slotTimerDone(void)
+{
+ // the resize operation does the trick to adjust
+ // all widgets in the view to the size they should
+ // have and show up correctly. Don't ask me, why
+ // this is, but it cured the problem (ipwizard).
+ resize(width()+1, height()+1);
+}
+
+/** No descriptions */
+void KEditEquityEntryDlg::slotOKClicked()
+{
+ if(m_changes /* || kpvPriceHistory->dirty() */)
+ {
+ m_selectedSecurity.setName(edtEquityName->text());
+ m_selectedSecurity.setTradingSymbol(edtMarketSymbol->text());
+ m_selectedSecurity.setSmallestAccountFraction(edtFraction->value().abs());
+ // FIXME PRICE
+ // m_selectedSecurity.setPriceHistory(kpvPriceHistory->history());
+ }
+
+ accept();
+}
+
+void KEditEquityEntryDlg::slotSelectionChanged(QListViewItem* item)
+{
+ btnEditEntry->setEnabled(item != 0);
+ btnRemoveEntry->setEnabled(item != 0);
+}
+
+void KEditEquityEntryDlg::slotDataChanged(void)
+{
+ bool okEnabled = true;
+
+ if(!edtFraction->value().isPositive()
+ || edtMarketSymbol->text().isEmpty()
+ || edtEquityName->text().isEmpty())
+ okEnabled = false;
+
+ btnOK->setEnabled(okEnabled);
+
+ m_changes = true;
+}
+
+#include "keditequityentrydlg.moc"
diff --git a/kmymoney2/dialogs/keditequityentrydlg.h b/kmymoney2/dialogs/keditequityentrydlg.h
new file mode 100644
index 0000000..0fdf40e
--- /dev/null
+++ b/kmymoney2/dialogs/keditequityentrydlg.h
@@ -0,0 +1,69 @@
+/***************************************************************************
+ keditequityentrydlg.h - description
+ -------------------
+ begin : Sat Mar 6 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KEDITEQUITYENTRYDLG_H
+#define KEDITEQUITYENTRYDLG_H
+
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qdialog.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+#include <klistview.h>
+#include <klocale.h>
+#include <klineedit.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../dialogs/keditequityentrydecl.h"
+#include "../mymoney/mymoneysecurity.h"
+
+/**
+ * @author Kevin Tambascio
+ */
+
+class KEditEquityEntryDlg : public KEditEquityEntryDecl
+{
+ Q_OBJECT
+public:
+ KEditEquityEntryDlg(const MyMoneySecurity& selectedSecurity, QWidget *parent = NULL, const char *name = NULL);
+ ~KEditEquityEntryDlg();
+
+ void updatedEquity(MyMoneySecurity& security) { security = m_selectedSecurity; }
+
+protected slots:
+ void slotOKClicked();
+ void slotDataChanged(void);
+ void slotSelectionChanged(QListViewItem* item);
+
+private slots:
+ void slotTimerDone(void);
+
+private:
+ MyMoneySecurity m_selectedSecurity;
+ bool m_changes;
+};
+
+#endif
diff --git a/kmymoney2/dialogs/keditloanwizard.cpp b/kmymoney2/dialogs/keditloanwizard.cpp
new file mode 100644
index 0000000..6054cec
--- /dev/null
+++ b/kmymoney2/dialogs/keditloanwizard.cpp
@@ -0,0 +1,514 @@
+/***************************************************************************
+ keditloanwizard.cpp - description
+ -------------------
+ begin : Wed Nov 12 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qradiobutton.h>
+#include <qbuttongroup.h>
+#include <qlabel.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <knuminput.h>
+#include <kpushbutton.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <../dialogs/knewloanwizard.h>
+#include "keditloanwizard.h"
+#include "../widgets/kmymoneylineedit.h"
+#include "../widgets/kmymoneyedit.h"
+#include "../widgets/kmymoneycombo.h"
+#include "../widgets/kmymoneyaccountselector.h"
+#include "../widgets/kmymoneydateinput.h"
+#include "../mymoney/mymoneyfile.h"
+#include "../kmymoneyutils.h"
+
+KEditLoanWizard::KEditLoanWizard(const MyMoneyAccount& account, QWidget *parent, const char *name ) :
+ KNewLoanWizard(parent, name)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ setCaption(i18n("Edit loan wizard"));
+ m_effectiveDateLabel->setText(QString("\n") + i18n(
+ "Please enter the date from which on the following changes will be effective. "
+ "The date entered must be later than the opening date of this account (%1), but must "
+ "not be in the future. The default will be today.").arg(KGlobal::locale()->formatDate(account.openingDate(), true)));
+ m_account = account;
+ try {
+ QString id = m_account.value("schedule");
+ m_schedule = file->schedule(id);
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+
+ m_lastSelection = -1;
+ m_editInterestRateButton->animateClick();
+
+ loadWidgets(m_account);
+
+ if(m_account.openingDate() > QDate::currentDate()) {
+ m_effectiveDateNoteLabel->setText(QString("\n") + i18n(
+ "Note: you will not be able to modify this account today, because the opening date \"%1\" is in the future. "
+ "Please revisit this dialog when the time has come."
+ ).arg(KGlobal::locale()->formatDate(m_account.openingDate(), true)));
+ } else {
+ m_effectiveDateNoteLabel->hide();
+ }
+ // turn off all pages that are contained here for derived classes
+ setAppropriate(m_newIntroPage, false);
+ setAppropriate(m_newGeneralInfoPage, false);
+ setAppropriate(m_lendBorrowPage, false);
+ setAppropriate(m_namePage, false);
+ setAppropriate(m_newCalculateLoanPage, false);
+ setAppropriate(m_newPaymentsPage, false);
+ removePage(m_assetAccountPage);
+ m_assetAccountPage = 0;
+
+ // turn on all pages that are contained here for derived classes
+ setAppropriate(m_editIntroPage, true);
+ setAppropriate(m_editSelectionPage, true);
+
+ // setup connections
+ connect(m_effectiveChangeDateEdit, SIGNAL(dateChanged(const QDate&)), this, SLOT(slotCheckPageFinished()));
+ connect(m_newPaymentEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotCheckPageFinished()));
+ connect(m_newInterestRateEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotCheckPageFinished()));
+
+ // make sure, we show the correct start page
+ showPage(m_editIntroPage);
+}
+
+KEditLoanWizard::~KEditLoanWizard()
+{
+}
+
+void KEditLoanWizard::loadWidgets(const MyMoneyAccount& /* account */)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ QString paymentAccountId, interestAccountId;
+
+ m_nameEdit->loadText(m_account.name());
+ m_loanAmountEdit->loadText(m_account.loanAmount().formatMoney(m_account.fraction(MyMoneyFile::instance()->security(m_account.currencyId()))));
+ m_finalPaymentEdit->loadText(m_account.finalPayment().formatMoney(m_account.fraction(MyMoneyFile::instance()->security(m_account.currencyId()))));
+ m_firstDueDateEdit->setDate(m_account.openingDate());
+
+ if(m_account.fixedInterestRate()) {
+ m_fixedInterestButton->animateClick();
+ } else {
+ m_variableInterestButton->animateClick();
+ }
+
+ MyMoneyMoney ir;
+ if(m_schedule.startDate() > QDate::currentDate()) {
+ ir = m_account.interestRate(m_schedule.startDate());
+ } else {
+ ir = m_account.interestRate(QDate::currentDate());
+ }
+ m_interestRateEdit->loadText(ir.formatMoney("", 3));
+ m_newInterestRateEdit->loadText(ir.formatMoney("", 3));
+ m_newInterestRateEdit->setPrecision(3);
+ m_interestRateLabel->setText(QString(" ") + ir.formatMoney("", 3) + QString("%"));
+
+ m_paymentFrequencyUnitEdit->setCurrentItem(i18n(m_schedule.occurenceToString()));
+ updateTermWidgets(m_account.term());
+
+ // the base payment (amortization and interest) is determined
+ // by adding all splits that are not automatically calculated.
+ // If the loan is a liability, we reverse the sign at the end
+ MyMoneyMoney basePayment;
+ MyMoneyMoney addPayment;
+
+ m_transaction = m_schedule.transaction();
+
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ for(it_s = m_schedule.transaction().splits().begin();
+ it_s != m_schedule.transaction().splits().end();
+ ++it_s) {
+ MyMoneyAccount acc = file->account((*it_s).accountId());
+ // if it's the split that references the source/dest
+ // of the money, we check if we borrow or loan money
+ if(paymentAccountId.isEmpty()
+ && acc.isAssetLiability() && !acc.isLoan()
+ && (*it_s).value() != MyMoneyMoney::autoCalc) {
+ if((*it_s).value().isNegative()) {
+ m_lendButton->setChecked(false);
+ m_borrowButton->setChecked(true);
+ } else {
+ m_lendButton->setChecked(true);
+ m_borrowButton->setChecked(false);
+ }
+ // we keep the amount of the full payment and subtract the
+ // base payment later to get information about the additional payment
+ addPayment = (*it_s).value();
+ paymentAccountId = (*it_s).accountId();
+ MyMoneyPayee payee;
+ if(!(*it_s).payeeId().isEmpty()) {
+ try {
+ payee = file->payee((*it_s).payeeId());
+ m_payeeEdit->setSelectedItem(payee.id());
+ } catch(MyMoneyException *e) {
+ delete e;
+ qWarning("Payee for schedule has been deleted");
+ }
+ }
+
+ // remove this split with one that will be replaced
+ // later and has a phony id
+ m_transaction.removeSplit(*it_s);
+ m_split.clearId();
+ m_transaction.addSplit(m_split);
+ }
+
+ if((*it_s).action() == MyMoneySplit::ActionInterest) {
+ interestAccountId = (*it_s).accountId();
+ }
+
+ if((*it_s).value() != MyMoneyMoney::autoCalc) {
+ basePayment += (*it_s).value();
+ } else {
+ // remove the splits which should not show up
+ // for additional fees
+ m_transaction.removeSplit(*it_s);
+ }
+
+ }
+ if(m_borrowButton->isChecked()) {
+ basePayment = -basePayment;
+ addPayment = -addPayment;
+ }
+ // now make adjustment to get the amount of the additional fees
+ addPayment -= basePayment;
+
+ // load account selection widgets now that we know if
+ // we borrow or lend money
+ loadAccountList();
+
+ int fraction = m_account.fraction(MyMoneyFile::instance()->security(m_account.currencyId()));
+ m_paymentEdit->loadText(basePayment.formatMoney(fraction));
+ m_newPaymentEdit->loadText(basePayment.formatMoney(fraction));
+ m_paymentLabel->setText(QString(" ") + basePayment.formatMoney(fraction));
+
+ m_additionalCost->setText(addPayment.formatMoney(fraction));
+ m_interestAccountEdit->setSelected(interestAccountId);
+ m_paymentAccountEdit->setSelected(paymentAccountId);
+ m_nextDueDateEdit->setDate(m_schedule.nextPayment());
+
+ int changeFrequencyUnit;
+ int amt = m_account.interestChangeFrequency(&changeFrequencyUnit);
+ if(amt != -1) {
+ m_interestFrequencyAmountEdit->setValue(amt);
+ m_interestFrequencyUnitEdit->setCurrentItem(changeFrequencyUnit);
+ }
+
+ // keep track, if the loan should be fully repayed
+ m_fullyRepayLoan = m_account.finalPayment() < basePayment;
+
+ updateLoanInfo();
+ updateSummary();
+}
+
+void KEditLoanWizard::next()
+{
+ bool dontLeavePage = false;
+ QButton* button = m_selectionButtonGroup->find(m_lastSelection);
+
+ if(currentPage() == m_editSelectionPage) {
+
+ if(button != 0
+ && m_lastSelection != m_selectionButtonGroup->id(m_selectionButtonGroup->selected())) {
+ QString errMsg = i18n(
+ "Your previous selection was \"%1\". If you select another option, "
+ "KMyMoney will dismiss the changes you have just entered. "
+ "Do you wish to proceed?").arg(button->text());
+
+ if(KMessageBox::questionYesNo(this, errMsg) == KMessageBox::No) {
+ dontLeavePage = true;
+ } else {
+ loadWidgets(m_account);
+ }
+ }
+
+ if(!dontLeavePage) {
+ button = m_selectionButtonGroup->selected();
+
+ // turn off all pages except the summary at the end
+ // and the one's we need for the selected option
+ // and load the widgets with the current values
+
+ // general info
+ setAppropriate(m_namePage, false);
+ setAppropriate(m_interestTypePage, false);
+ setAppropriate(m_previousPaymentsPage, false);
+ setAppropriate(m_recordPaymentPage, false);
+ setAppropriate(m_variableInterestDatePage, false);
+ setAppropriate(m_firstPaymentPage, false);
+ // loan calculation
+ setAppropriate(m_paymentEditPage, false);
+ setAppropriate(m_interestEditPage, false);
+ setAppropriate(m_paymentFrequencyPage, false);
+ setAppropriate(m_interestCalculationPage, false);
+ setAppropriate(m_loanAmountPage, false);
+ setAppropriate(m_interestPage, false);
+ setAppropriate(m_durationPage, false);
+ setAppropriate(m_paymentPage, false);
+ setAppropriate(m_finalPaymentPage, false);
+ setAppropriate(m_calculationOverviewPage, false);
+ // payment
+ setAppropriate(m_interestCategoryPage, false);
+ setAppropriate(m_additionalFeesPage, false);
+ setAppropriate(m_schedulePage, false);
+ setAppropriate(m_summaryPage, true);
+
+ setAppropriate(m_effectiveDatePage, true);
+ if(indexOf(m_summaryPage) != -1) {
+ removePage(m_summaryPage);
+ setFinishEnabled(m_summaryEditPage, true);
+ }
+
+ if(button == m_editInterestRateButton) {
+ setAppropriate(m_interestTypePage, true);
+ setAppropriate(m_variableInterestDatePage, true);
+ setAppropriate(m_paymentEditPage, true);
+ setAppropriate(m_interestEditPage, true);
+ setAppropriate(m_summaryEditPage, true);
+
+ } else if(button == m_editOtherCostButton) {
+ setAppropriate(m_additionalFeesPage, true);
+ setAppropriate(m_summaryEditPage, true);
+
+ } else if(button == m_editOtherInfoButton) {
+ setAppropriate(m_namePage, true);
+ setAppropriate(m_interestCalculationPage, true);
+ setAppropriate(m_interestPage, true);
+ setAppropriate(m_durationPage, true);
+ setAppropriate(m_paymentPage, true);
+ setAppropriate(m_finalPaymentPage, true);
+ setAppropriate(m_calculationOverviewPage, true);
+ setAppropriate(m_interestCategoryPage, true);
+ setAppropriate(m_additionalFeesPage, true);
+ setAppropriate(m_schedulePage, true);
+ setAppropriate(m_summaryEditPage, false);
+ addPage(m_summaryPage, i18n("Summary"));
+ setAppropriate(m_summaryPage, true);
+ setFinishEnabled(m_summaryEditPage, false);
+ setFinishEnabled(m_summaryPage, true);
+
+ } else {
+ qFatal("%s,%d: This should never happen", __FILE__, __LINE__);
+ }
+
+ m_lastSelection = m_selectionButtonGroup->id(m_selectionButtonGroup->selected());
+ } // if(!dontLeavePage)
+
+ } else if(currentPage() == m_additionalFeesPage) {
+ button = m_selectionButtonGroup->selected();
+ if(button == m_editOtherCostButton) {
+ updateLoanInfo();
+ updateEditSummary();
+ }
+
+ } else if(currentPage() == m_interestEditPage) {
+ // copy the necessary data to the widgets used for calculation
+ m_interestRateEdit->setValue(m_newInterestRateEdit->value());
+ m_paymentEdit->setValue(m_newPaymentEdit->value());
+
+ // if interest rate and payment amount is given, then force
+ // the term to be recalculated. The final payment is adjusted to
+ // 0 if the loan was ment to be fully repayed
+ updateTermWidgets(m_account.term());
+ if(!m_interestRateEdit->lineedit()->text().isEmpty()
+ && !m_paymentEdit->lineedit()->text().isEmpty()) {
+ // if there's an amortization going on, we can evaluate
+ // the new term. If the amortization is 0 (interest only
+ // payments) then we keep the term as entered by the user.
+ if(m_loanAmountEdit->value() != m_finalPaymentEdit->value()) {
+ m_durationValueEdit->setValue(0);
+ }
+ if(m_fullyRepayLoan)
+ m_finalPaymentEdit->loadText(MyMoneyMoney(0).formatMoney(m_account.fraction(MyMoneyFile::instance()->security(m_account.currencyId()))));
+ }
+
+/*
+ // we need to calculate the balance at the time of the change
+ // in order to accurately recalculate the term. A special
+ // situation arises, when we keep track of all payments and
+ // the full loan is not yet paid out. In this case, we take the
+ // the loan amount minus all amortization payments as the current
+ // balance.
+ // FIXME: This needs some more thoughts. We leave it out for
+ // now and always calculate with the full loan amount.
+ MyMoneyMoney balance = m_account.openingBalance();
+
+ QValueList<MyMoneyTransaction> list;
+ QValueList<MyMoneyTransaction>::ConstIterator it;
+ MyMoneySplit split;
+ MyMoneyTransactionFilter filter(m_account.id());
+
+ filter.setDateFilter(QDate(), m_effectiveChangeDateEdit->date().addDays(-1));
+ list = MyMoneyFile::instance()->transactionList(filter);
+
+ for(it = list.begin(); it != list.end(); ++it) {
+ try {
+ split = (*it).splitByAccount(m_account.id());
+ balance += split.value();
+
+ } catch(MyMoneyException *e) {
+ // account is not referenced within this transaction
+ delete e;
+ }
+ }
+ m_loanAmountEdit->setText(balance.formatMoney());
+*/
+
+ // now re-calculate the figures
+ dontLeavePage = !calculateLoan();
+
+ // reset the original loan amount to the widget
+ m_loanAmountEdit->setValue(m_account.loanAmount());
+
+ if(!dontLeavePage) {
+ updateLoanInfo();
+ updateEditSummary();
+ }
+ }
+
+ if(!dontLeavePage)
+ KNewLoanWizard::next();
+
+ // These might have been set by KNewLoanWizard::next()
+ setAppropriate(m_previousPaymentsPage, false);
+ setAppropriate(m_recordPaymentPage, false);
+ // we never need to show this page
+ if(currentPage() == m_previousPaymentsPage)
+ KNewLoanWizard::next();
+}
+
+void KEditLoanWizard::slotCheckPageFinished(void)
+{
+ KNewLoanWizard::slotCheckPageFinished();
+
+ // if we're on one of the specific edit pages, the next button
+ // is enabled. If the values in the edit widgets are not
+ // appropriate, we just have to disable it.
+
+ if(currentPage() == m_effectiveDatePage) {
+ if(m_effectiveChangeDateEdit->date() < m_account.openingDate()
+ || m_effectiveChangeDateEdit->date() > QDate::currentDate())
+ nextButton()->setEnabled(false);
+
+ } else if(currentPage() == m_interestEditPage) {
+ if(!m_newPaymentEdit->isValid()
+ && !m_newInterestRateEdit->isValid())
+ nextButton()->setEnabled(false);
+ }
+}
+
+void KEditLoanWizard::updateEditSummary(void)
+{
+ updateSummary();
+ m_payment7->setText(m_summaryPeriodicPayment->text());
+ m_additionalFees7->setText(m_summaryAdditionalFees->text());
+ m_totalPayment7->setText(m_summaryTotalPeriodicPayment->text());
+ m_interestRate7->setText(m_summaryInterestRate->text());
+ m_startDateChanges->setText(KGlobal::locale()->formatDate(m_effectiveChangeDateEdit->date(), true));
+
+ // calculate the number of affected transactions
+ MyMoneyTransactionFilter filter(m_account.id());
+ filter.setDateFilter(m_effectiveChangeDateEdit->date(), QDate());
+
+ int count = 0;
+ QValueList<MyMoneyTransaction> list;
+ QValueList<MyMoneyTransaction>::ConstIterator it;
+ list = MyMoneyFile::instance()->transactionList(filter);
+
+ for(it = list.begin(); it != list.end(); ++it) {
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ int match = 0;
+ for(it_s = (*it).splits().begin(); it_s != (*it).splits().end(); ++it_s) {
+ // we only count those transactions that have an interest
+ // and amortization part
+ if((*it_s).action() == MyMoneySplit::ActionInterest)
+ match |= 0x01;
+ if((*it_s).action() == MyMoneySplit::ActionAmortization)
+ match |= 0x02;
+ }
+ if(match == 0x03)
+ count++;
+ }
+
+ m_affectedPayments->setText(QString().sprintf("%d", count));
+}
+
+const MyMoneySchedule KEditLoanWizard::schedule(void) const
+{
+ MyMoneySchedule sched = m_schedule;
+ sched.setTransaction(transaction());
+ sched.setOccurence(MyMoneySchedule::stringToOccurence(m_paymentFrequencyUnitEdit->currentText()));
+ if(m_nextDueDateEdit->date() < m_schedule.startDate())
+ sched.setStartDate(m_nextDueDateEdit->date());
+
+ return sched;
+}
+
+const MyMoneyAccount KEditLoanWizard::account(void) const
+{
+ MyMoneyAccountLoan acc(m_account);
+
+ if(m_interestOnReceptionButton->isChecked())
+ acc.setInterestCalculation(MyMoneyAccountLoan::paymentReceived);
+ else
+ acc.setInterestCalculation(MyMoneyAccountLoan::paymentDue);
+
+ acc.setFixedInterestRate(m_fixedInterestButton->isChecked());
+ acc.setFinalPayment(MyMoneyMoney(m_finalPaymentEdit->text()));
+ acc.setTerm(term());
+ acc.setPeriodicPayment(m_paymentEdit->value());
+ acc.setInterestRate(m_effectiveChangeDateEdit->date(), m_interestRateEdit->value());
+
+ acc.setPayee(m_payeeEdit->selectedItem());
+
+ if(m_variableInterestButton->isChecked()) {
+ acc.setNextInterestChange(m_interestChangeDateEdit->date());
+ acc.setInterestChangeFrequency(m_interestFrequencyAmountEdit->value(),
+ m_interestFrequencyUnitEdit->currentItem());
+ }
+
+ return acc;
+}
+
+const MyMoneyTransaction KEditLoanWizard::transaction() const
+{
+ MyMoneyTransaction t = KNewLoanWizard::transaction();
+ MyMoneySplit s = t.splitByAccount(QString("Phony-ID"));
+
+ s.setAccountId(m_account.id());
+ t.modifySplit(s);
+
+ return t;
+}
+
+#include "keditloanwizard.moc"
diff --git a/kmymoney2/dialogs/keditloanwizard.h b/kmymoney2/dialogs/keditloanwizard.h
new file mode 100644
index 0000000..0598248
--- /dev/null
+++ b/kmymoney2/dialogs/keditloanwizard.h
@@ -0,0 +1,89 @@
+/***************************************************************************
+ keditloanwizard.h - description
+ -------------------
+ begin : Wed Nov 12 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KEDITLOANWIZARD_H
+#define KEDITLOANWIZARD_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+
+#include <kmymoney/mymoneyaccount.h>
+
+/**
+ * @author Thomas Baumgart
+ */
+
+class KEditLoanWizard : public KNewLoanWizard
+{
+ Q_OBJECT
+public:
+ KEditLoanWizard(const MyMoneyAccount& account, QWidget *parent=0, const char *name=0);
+ ~KEditLoanWizard();
+
+ /**
+ * This method returns the schedule for the payments. The account
+ * where the amortization should be transferred to is the one
+ * we currently edited with this wizard.
+ *
+ * @return MyMoneySchedule object for payments
+ */
+ const MyMoneySchedule schedule(void) const;
+
+ /**
+ * This method returns a MyMoneyAccount object with all data
+ * filled out as provided by the wizard.
+ *
+ * @return updated MyMoneyAccount object
+ */
+ const MyMoneyAccount account(void) const;
+
+
+ void loadWidgets(const MyMoneyAccount& acc);
+
+ const MyMoneyTransaction transaction() const;
+
+public slots:
+ void next();
+
+protected slots:
+ virtual void slotCheckPageFinished(void);
+
+protected:
+ void updateEditSummary(void);
+
+private:
+ //MyMoneyAccountLoan m_account;
+ MyMoneySchedule m_schedule;
+ int m_lastSelection;
+ bool m_fullyRepayLoan;
+};
+
+#endif
diff --git a/kmymoney2/dialogs/keditscheduledlg.cpp b/kmymoney2/dialogs/keditscheduledlg.cpp
new file mode 100644
index 0000000..635d564
--- /dev/null
+++ b/kmymoney2/dialogs/keditscheduledlg.cpp
@@ -0,0 +1,558 @@
+/***************************************************************************
+ keditscheduledlg.cpp - description
+ -------------------
+ begin : Mon Sep 3 2007
+ copyright : (C) 2007 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qtimer.h>
+#include <qwidgetlist.h>
+#include <qcheckbox.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qvaluevector.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kpushbutton.h>
+#include <kstdguiitem.h>
+#include <klineedit.h>
+#include <knuminput.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/register.h>
+#include <kmymoney/transactionform.h>
+#include <kmymoney/transaction.h>
+#include <kmymoney/transactioneditor.h>
+#include <kmymoney/kmymoneylineedit.h>
+#include <kmymoney/kmymoneydateinput.h>
+#include <kmymoney/kmymoneycombo.h>
+#include <kmymoney/kguiutils.h>
+#include <kmymoney/kmymoneyutils.h>
+
+#include "keditscheduledlg.h"
+#include "../kmymoney2.h"
+
+class KEditScheduleDlg::Private {
+public:
+ MyMoneySchedule m_schedule;
+ KMyMoneyRegister::Transaction* m_item;
+ QWidgetList m_tabOrderWidgets;
+ TransactionEditor* m_editor;
+ kMandatoryFieldGroup* m_requiredFields;
+};
+
+KEditScheduleDlg::KEditScheduleDlg(const MyMoneySchedule& schedule, QWidget *parent, const char *name) :
+ KEditScheduleDlgDecl(parent, name, true),
+ d(new Private)
+{
+ d->m_schedule = schedule;
+ d->m_editor = 0;
+
+ buttonOk->setGuiItem(KStdGuiItem::ok());
+ buttonCancel->setGuiItem(KStdGuiItem::cancel());
+ buttonHelp->setGuiItem(KStdGuiItem::help());
+
+ d->m_requiredFields = new kMandatoryFieldGroup (this);
+ d->m_requiredFields->setOkButton(buttonOk); // button to be enabled when all fields present
+
+ // make sure, we have a tabbar with the form
+ // insert it after the horizontal line
+ m_paymentInformationLayout->insertWidget(2, m_form->tabBar(m_form->parentWidget()));
+
+ // we never need to see the register
+ m_register->hide();
+
+ // ... setup the form ...
+ m_form->setupForm(d->m_schedule.account());
+
+ // ... and the register ...
+ m_register->clear();
+
+ // ... now add the transaction to register and form ...
+ MyMoneyTransaction t = transaction();
+ d->m_item = KMyMoneyRegister::Register::transactionFactory(m_register, t, d->m_schedule.transaction().splits()[0], 0);
+ m_register->selectItem(d->m_item);
+ // show the account row
+ d->m_item->setShowRowInForm(0, true);
+
+ m_form->slotSetTransaction(d->m_item);
+
+ // setup widget contents
+ m_nameEdit->setText(d->m_schedule.name());
+
+ m_frequencyEdit->setCurrentItem(d->m_schedule.occurencePeriod());
+ if(m_frequencyEdit->currentItem() == -1)
+ m_frequencyEdit->setCurrentItem(MyMoneySchedule::OCCUR_MONTHLY);
+ slotFrequencyChanged(m_frequencyEdit->currentItem());
+ m_frequencyNoEdit->setValue(d->m_schedule.occurenceMultiplier());
+
+ // load option widgets
+ m_paymentMethodEdit->insertItem(i18n("Direct deposit"), MyMoneySchedule::STYPE_DIRECTDEPOSIT);
+ m_paymentMethodEdit->insertItem(i18n("Manual deposit"), MyMoneySchedule::STYPE_MANUALDEPOSIT);
+ m_paymentMethodEdit->insertItem(i18n("Direct debit"), MyMoneySchedule::STYPE_DIRECTDEBIT);
+ m_paymentMethodEdit->insertItem(i18n("Standing order"), MyMoneySchedule::STYPE_STANDINGORDER);
+ m_paymentMethodEdit->insertItem(i18n("Bank transfer"), MyMoneySchedule::STYPE_BANKTRANSFER);
+ m_paymentMethodEdit->insertItem(i18n("Write check"), MyMoneySchedule::STYPE_WRITECHEQUE);
+ m_paymentMethodEdit->insertItem(i18n("Other"), MyMoneySchedule::STYPE_OTHER);
+
+ MyMoneySchedule::paymentTypeE method = d->m_schedule.paymentType();
+ if(method == MyMoneySchedule::STYPE_ANY)
+ method = MyMoneySchedule::STYPE_OTHER;
+ m_paymentMethodEdit->setCurrentItem(method);
+
+ switch(d->m_schedule.weekendOption()) {
+ case MyMoneySchedule::MoveNothing:
+ m_weekendOptionEdit->setCurrentItem(0);
+ break;
+ case MyMoneySchedule::MoveFriday:
+ m_weekendOptionEdit->setCurrentItem(1);
+ break;
+ case MyMoneySchedule::MoveMonday:
+ m_weekendOptionEdit->setCurrentItem(2);
+ break;
+ }
+ m_estimateEdit->setChecked(!d->m_schedule.isFixed());
+ m_autoEnterEdit->setChecked(d->m_schedule.autoEnter());
+ m_endSeriesEdit->setChecked(d->m_schedule.willEnd());
+
+ m_endOptionsFrame->setEnabled(d->m_schedule.willEnd());
+ if(d->m_schedule.willEnd()) {
+ m_RemainingEdit->setValue(d->m_schedule.transactionsRemaining());
+ m_FinalPaymentEdit->setDate(d->m_schedule.endDate());
+ }
+
+ connect(m_RemainingEdit, SIGNAL(valueChanged(int)),
+ this, SLOT(slotRemainingChanged(int)));
+ connect(m_FinalPaymentEdit, SIGNAL(dateChanged(const QDate&)),
+ this, SLOT(slotEndDateChanged(const QDate&)));
+ connect(m_frequencyEdit, SIGNAL(itemSelected(int)),
+ this, SLOT(slotFrequencyChanged(int)));
+ connect(m_frequencyNoEdit, SIGNAL(valueChanged(int)),
+ this, SLOT(slotOccurenceMultiplierChanged(int)));
+ connect(buttonHelp, SIGNAL(clicked()), this, SLOT(slotShowHelp()));
+
+ // force the initial height to be as small as possible
+ QTimer::singleShot(0, this, SLOT(slotSetupSize()));
+
+ // we just hide the variation field for now and enable the logic
+ // once we have a respective member in the MyMoneySchedule object
+ m_variation->hide();
+}
+
+KEditScheduleDlg::~KEditScheduleDlg()
+{
+ delete d;
+}
+
+void KEditScheduleDlg::slotSetupSize(void)
+{
+ resize(width(), minimumSizeHint().height());
+}
+
+TransactionEditor* KEditScheduleDlg::startEdit(void)
+{
+ KMyMoneyRegister::SelectedTransactions list(m_register);
+ TransactionEditor* editor = d->m_item->createEditor(m_form, list, QDate());
+
+ // check that we use the same transaction commodity in all selected transactions
+ // if not, we need to update this in the editor's list. The user can also bail out
+ // of this operation which means that we have to stop editing here.
+ if(editor && !d->m_schedule.account().id().isEmpty()) {
+ if(!editor->fixTransactionCommodity(d->m_schedule.account())) {
+ // if the user wants to quit, we need to destroy the editor
+ // and bail out
+ delete editor;
+ editor = 0;
+ }
+ }
+
+ if(editor) {
+ connect(editor, SIGNAL(transactionDataSufficient(bool)), buttonOk, SLOT(setEnabled(bool)));
+ connect(editor, SIGNAL(escapePressed()), buttonCancel, SLOT(animateClick()));
+ connect(editor, SIGNAL(returnPressed()), buttonOk, SLOT(animateClick()));
+
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), editor, SLOT(slotReloadEditWidgets()));
+ // connect(editor, SIGNAL(finishEdit(const KMyMoneyRegister::SelectedTransactions&)), this, SLOT(slotLeaveEditMode(const KMyMoneyRegister::SelectedTransactions&)));
+ connect(editor, SIGNAL(createPayee(const QString&, QString&)), kmymoney2, SLOT(slotPayeeNew(const QString&, QString&)));
+ connect(editor, SIGNAL(createCategory(MyMoneyAccount&, const MyMoneyAccount&)), kmymoney2, SLOT(slotCategoryNew(MyMoneyAccount&, const MyMoneyAccount&)));
+ connect(editor, SIGNAL(createSecurity(MyMoneyAccount&, const MyMoneyAccount&)), kmymoney2, SLOT(slotInvestmentNew(MyMoneyAccount&, const MyMoneyAccount&)));
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), editor, SLOT(slotReloadEditWidgets()));
+
+ // create the widgets, place them in the parent and load them with data
+ // setup tab order
+ d->m_tabOrderWidgets.clear();
+ KMyMoneyRegister::Action action = KMyMoneyRegister::ActionWithdrawal;
+ switch(d->m_schedule.type()) {
+ case MyMoneySchedule::TYPE_DEPOSIT:
+ action = KMyMoneyRegister::ActionDeposit;
+ break;
+ case MyMoneySchedule::TYPE_BILL:
+ action = KMyMoneyRegister::ActionWithdrawal;
+ break;
+ case MyMoneySchedule::TYPE_TRANSFER:
+ action = KMyMoneyRegister::ActionTransfer;
+ break;
+ default:
+ // if we end up here, we don't have a known schedule type (yet). in this case, we just glimpse
+ // into the transaction and determine the type. in case we don't have a transaction with splits
+ // we stick with the default action already set up
+ if(d->m_schedule.transaction().splits().count() > 0) {
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ bool isDeposit = false;
+ bool isTransfer = false;
+ for(it_s = d->m_schedule.transaction().splits().begin(); it_s != d->m_schedule.transaction().splits().end(); ++it_s) {
+ if((*it_s).accountId() == d->m_schedule.account().id()) {
+ isDeposit = !((*it_s).shares().isNegative());
+ } else {
+ MyMoneyAccount acc = MyMoneyFile::instance()->account((*it_s).accountId());
+ if(acc.isAssetLiability() && d->m_schedule.transaction().splits().count() == 2) {
+ isTransfer = true;
+ }
+ }
+ }
+
+ if(isTransfer)
+ action = KMyMoneyRegister::ActionTransfer;
+ else if(isDeposit)
+ action = KMyMoneyRegister::ActionDeposit;
+ }
+ break;
+ }
+ editor->setup(d->m_tabOrderWidgets, d->m_schedule.account(), action);
+
+ // if it's not a check, then we need to clear
+ // a possibly assigned check number
+ if(d->m_schedule.paymentType() != MyMoneySchedule::STYPE_WRITECHEQUE) {
+ QWidget* w = editor->haveWidget("number");
+ if(w)
+ dynamic_cast<kMyMoneyLineEdit*>(w)->loadText(QString());
+ }
+
+ Q_ASSERT(!d->m_tabOrderWidgets.isEmpty());
+
+ // don't forget our three buttons and additional widgets
+ d->m_tabOrderWidgets.append(m_weekendOptionEdit);
+ d->m_tabOrderWidgets.append(m_estimateEdit);
+ d->m_tabOrderWidgets.append(m_variation);
+ d->m_tabOrderWidgets.append(m_autoEnterEdit);
+ d->m_tabOrderWidgets.append(m_endSeriesEdit);
+ d->m_tabOrderWidgets.append(m_RemainingEdit);
+ d->m_tabOrderWidgets.append(m_FinalPaymentEdit);
+
+ d->m_tabOrderWidgets.append(buttonOk);
+ d->m_tabOrderWidgets.append(buttonCancel);
+ d->m_tabOrderWidgets.append(buttonHelp);
+ d->m_tabOrderWidgets.append(m_nameEdit);
+ d->m_tabOrderWidgets.append(m_frequencyNoEdit);
+ d->m_tabOrderWidgets.append(m_frequencyEdit);
+ d->m_tabOrderWidgets.append(m_paymentMethodEdit);
+ d->m_tabOrderWidgets.append(m_form);
+
+ // install event filter in all taborder widgets
+ QWidget* w;
+ for(w = d->m_tabOrderWidgets.first(); w; w = d->m_tabOrderWidgets.next()) {
+ w->installEventFilter(this);
+ w->installEventFilter(editor);
+ }
+
+ // connect the postdate modification signal to our update routine
+ kMyMoneyDateInput* dateEdit = dynamic_cast<kMyMoneyDateInput*>(editor->haveWidget("postdate"));
+ if(dateEdit)
+ connect(dateEdit, SIGNAL(dateChanged(const QDate&)), this, SLOT(slotPostDateChanged(const QDate&)));
+
+
+ m_nameEdit->setFocus();
+
+ // add the required fields to the mandatory group
+ d->m_requiredFields->add(m_nameEdit);
+ d->m_requiredFields->add(editor->haveWidget("account"));
+ d->m_requiredFields->add(editor->haveWidget("category"));
+
+ // fix labels
+ QLabel* label = dynamic_cast<QLabel*>(editor->haveWidget("date-label"));
+ if(label) {
+ label->setText(i18n("Next due date"));
+ }
+
+ d->m_editor = editor;
+ slotSetPaymentMethod(d->m_schedule.paymentType());
+
+ connect(m_paymentMethodEdit, SIGNAL(itemSelected(int)), this, SLOT(slotSetPaymentMethod(int)));
+ }
+
+ return editor;
+}
+
+void KEditScheduleDlg::accept(void)
+{
+ // Force the focus to be on the OK button. This will trigger creation
+ // of any unknown objects (payees, categories etc.)
+ buttonOk->setFocus();
+
+ // only accept if the button is really still enabled. We could end
+ // up here, if the user filled all fields, the focus is on the category
+ // field, but the category is not yet existant. When the user presses the
+ // OK button in this context, he will be asked if he wants to create
+ // the category or not. In case he decides no, we end up here with no
+ // category filled in, so we don't run through the final acceptance.
+ if(buttonOk->isEnabled())
+ KEditScheduleDlgDecl::accept();
+}
+
+const MyMoneySchedule& KEditScheduleDlg::schedule(void) const
+{
+ if(d->m_editor) {
+ MyMoneyTransaction t = transaction();
+ if(d->m_schedule.nextDueDate() != t.postDate())
+ d->m_schedule.setNextDueDate(t.postDate());
+ d->m_schedule.setTransaction(t);
+ d->m_schedule.setName(m_nameEdit->text());
+ d->m_schedule.setFixed(!m_estimateEdit->isChecked());
+ d->m_schedule.setOccurencePeriod(static_cast<MyMoneySchedule::occurenceE>(m_frequencyEdit->currentItem()));
+ d->m_schedule.setOccurenceMultiplier( m_frequencyNoEdit->value() );
+
+ switch(m_weekendOptionEdit->currentItem()) {
+ case 0:
+ d->m_schedule.setWeekendOption(MyMoneySchedule::MoveNothing);
+ break;
+ case 1:
+ d->m_schedule.setWeekendOption(MyMoneySchedule::MoveFriday);
+ break;
+ case 2:
+ d->m_schedule.setWeekendOption(MyMoneySchedule::MoveMonday);
+ break;
+ }
+
+ d->m_schedule.setType(MyMoneySchedule::TYPE_BILL);
+ KMyMoneyTransactionForm::TabBar* tabbar = dynamic_cast<KMyMoneyTransactionForm::TabBar*>(d->m_editor->haveWidget("tabbar"));
+ if(tabbar) {
+ switch(static_cast<KMyMoneyRegister::Action>(tabbar->currentTab())) {
+ case KMyMoneyRegister::ActionDeposit:
+ d->m_schedule.setType(MyMoneySchedule::TYPE_DEPOSIT);
+ break;
+ default:
+ case KMyMoneyRegister::ActionWithdrawal:
+ d->m_schedule.setType(MyMoneySchedule::TYPE_BILL);
+ break;
+ case KMyMoneyRegister::ActionTransfer:
+ d->m_schedule.setType(MyMoneySchedule::TYPE_TRANSFER);
+ break;
+ }
+ } else {
+ qDebug("No tabbar found in KEditScheduleDlg::schedule(). Defaulting type to BILL");
+ }
+
+ d->m_schedule.setAutoEnter(m_autoEnterEdit->isChecked());
+ d->m_schedule.setPaymentType(static_cast<MyMoneySchedule::paymentTypeE>(m_paymentMethodEdit->currentItem()));
+ if(m_endSeriesEdit->isEnabled() && m_endSeriesEdit->isChecked()) {
+ d->m_schedule.setEndDate(m_FinalPaymentEdit->date());
+ } else {
+ d->m_schedule.setEndDate(QDate());
+ }
+ }
+ return d->m_schedule;
+}
+
+MyMoneyTransaction KEditScheduleDlg::transaction(void) const
+{
+ MyMoneyTransaction t = d->m_schedule.transaction();
+
+ if(d->m_editor) {
+ d->m_editor->createTransaction(t, d->m_schedule.transaction(), d->m_schedule.transaction().splits()[0], false);
+ }
+
+ t.clearId();
+ t.setEntryDate(QDate());
+ return t;
+}
+
+bool KEditScheduleDlg::focusNextPrevChild(bool next)
+{
+ bool rc = false;
+
+ // qDebug("KEditScheduleDlg::focusNextPrevChild(editmode=%s)", m_inEditMode ? "true" : "false");
+ QWidget *w = 0;
+ QWidget *currentWidget;
+
+ w = qApp->focusWidget();
+ while(w && d->m_tabOrderWidgets.find(w) == -1) {
+ // qDebug("'%s' not in list, use parent", w->className());
+ w = w->parentWidget();
+ }
+ // if(w) qDebug("tab order is at '%s'", w->className());
+ currentWidget = d->m_tabOrderWidgets.current();
+ w = next ? d->m_tabOrderWidgets.next() : d->m_tabOrderWidgets.prev();
+
+ do {
+ if(!w) {
+ w = next ? d->m_tabOrderWidgets.first() : d->m_tabOrderWidgets.last();
+ }
+
+ if(w != currentWidget
+ && ((w->focusPolicy() & TabFocus) == TabFocus)
+ && w->isVisible() && w->isEnabled()) {
+ // qDebug("Selecting '%s' as focus", w->className());
+ w->setFocus();
+ rc = true;
+ break;
+ }
+ w = next ? d->m_tabOrderWidgets.next() : d->m_tabOrderWidgets.prev();
+ } while(w != currentWidget);
+
+ return rc;
+}
+
+void KEditScheduleDlg::resizeEvent(QResizeEvent* ev)
+{
+ m_register->resize(KMyMoneyRegister::DetailColumn);
+ m_form->resize(KMyMoneyTransactionForm::ValueColumn1);
+ KEditScheduleDlgDecl::resizeEvent(ev);
+}
+
+
+void KEditScheduleDlg::slotRemainingChanged(int value)
+{
+ // Make sure the required fields are set
+ kMyMoneyDateInput* dateEdit = dynamic_cast<kMyMoneyDateInput*>(d->m_editor->haveWidget("postdate"));
+ d->m_schedule.setNextDueDate(dateEdit->date());
+ d->m_schedule.setOccurencePeriod(static_cast<MyMoneySchedule::occurenceE>(m_frequencyEdit->currentItem()));
+ d->m_schedule.setOccurenceMultiplier(m_frequencyNoEdit->value());
+
+ if(d->m_schedule.transactionsRemaining() != value) {
+ m_FinalPaymentEdit->blockSignals(true);
+ m_FinalPaymentEdit->setDate(d->m_schedule.dateAfter(value));
+ m_FinalPaymentEdit->blockSignals(false);
+ }
+}
+
+void KEditScheduleDlg::slotEndDateChanged(const QDate& date)
+{
+ // Make sure the required fields are set
+ kMyMoneyDateInput* dateEdit = dynamic_cast<kMyMoneyDateInput*>(d->m_editor->haveWidget("postdate"));
+ d->m_schedule.setNextDueDate(dateEdit->date());
+ d->m_schedule.setOccurencePeriod(static_cast<MyMoneySchedule::occurenceE>(m_frequencyEdit->currentItem()));
+ d->m_schedule.setOccurenceMultiplier(m_frequencyNoEdit->value());
+
+ if(d->m_schedule.endDate() != date) {
+ d->m_schedule.setEndDate(date);
+ updateTransactionsRemaining();
+ }
+}
+
+void KEditScheduleDlg::slotPostDateChanged(const QDate& date)
+{
+ if(d->m_schedule.nextDueDate() != date) {
+ if (m_endOptionsFrame->isEnabled()) {
+ d->m_schedule.setNextDueDate(date);
+ d->m_schedule.setOccurenceMultiplier(m_frequencyNoEdit->value());
+ d->m_schedule.setOccurencePeriod(static_cast<MyMoneySchedule::occurenceE>(m_frequencyEdit->currentItem()));
+ d->m_schedule.setEndDate(m_FinalPaymentEdit->date());
+ updateTransactionsRemaining();
+ }
+ }
+}
+
+void KEditScheduleDlg::slotSetPaymentMethod(int item)
+{
+ kMyMoneyLineEdit* dateEdit = dynamic_cast<kMyMoneyLineEdit*>(d->m_editor->haveWidget("number"));
+ if(dateEdit) {
+ dateEdit->setShown(item == MyMoneySchedule::STYPE_WRITECHEQUE);
+
+ // hiding the label does not work, because the label underneath will shine
+ // through. So we either write the label or a blank
+ QLabel* label = dynamic_cast<QLabel *>(d->m_editor->haveWidget("number-label"));
+ if(label) {
+ label->setText((item == MyMoneySchedule::STYPE_WRITECHEQUE) ? i18n("Number") : " ");
+ }
+ }
+}
+
+void KEditScheduleDlg::slotFrequencyChanged(int item)
+{
+ m_endSeriesEdit->setEnabled(item != MyMoneySchedule::OCCUR_ONCE);
+ bool isEndSeries = m_endSeriesEdit->isChecked();
+ if(isEndSeries )
+ m_endOptionsFrame->setEnabled(item != MyMoneySchedule::OCCUR_ONCE);
+ switch( item )
+ {
+ case MyMoneySchedule::OCCUR_DAILY:
+ case MyMoneySchedule::OCCUR_WEEKLY:
+ case MyMoneySchedule::OCCUR_EVERYHALFMONTH:
+ case MyMoneySchedule::OCCUR_MONTHLY:
+ case MyMoneySchedule::OCCUR_YEARLY:
+ // Supports Frequency Number
+ m_frequencyNoEdit->setEnabled(true);
+ break;
+ default:
+ // Multiplier is always 1
+ m_frequencyNoEdit->setEnabled(false);
+ m_frequencyNoEdit->setValue(1);
+ break;
+ }
+ if ( isEndSeries && ( item != MyMoneySchedule::OCCUR_ONCE ) )
+ {
+ // Changing the frequency changes the number
+ // of remaining transactions
+ kMyMoneyDateInput* dateEdit = dynamic_cast<kMyMoneyDateInput*>(d->m_editor->haveWidget("postdate"));
+ d->m_schedule.setNextDueDate(dateEdit->date());
+ d->m_schedule.setOccurenceMultiplier(m_frequencyNoEdit->value());
+ d->m_schedule.setOccurencePeriod(static_cast<MyMoneySchedule::occurenceE>(item));
+ d->m_schedule.setEndDate(m_FinalPaymentEdit->date());
+ updateTransactionsRemaining();
+ }
+}
+
+void KEditScheduleDlg::slotOccurenceMultiplierChanged(int multiplier)
+{
+ // Make sure the required fields are set
+ int oldOccurenceMultiplier = d->m_schedule.occurenceMultiplier();
+ if ( multiplier != oldOccurenceMultiplier )
+ {
+ if (m_endOptionsFrame->isEnabled())
+ {
+ kMyMoneyDateInput* dateEdit = dynamic_cast<kMyMoneyDateInput*>(d->m_editor->haveWidget("postdate"));
+ d->m_schedule.setNextDueDate(dateEdit->date());
+ d->m_schedule.setOccurenceMultiplier(multiplier);
+ d->m_schedule.setOccurencePeriod(static_cast<MyMoneySchedule::occurenceE>(m_frequencyEdit->currentItem()));
+ d->m_schedule.setEndDate(m_FinalPaymentEdit->date());
+ updateTransactionsRemaining();
+ }
+ }
+}
+
+void KEditScheduleDlg::updateTransactionsRemaining(void)
+{
+ int remain = d->m_schedule.transactionsRemaining();
+ if ( remain != m_RemainingEdit->value() )
+ {
+ m_RemainingEdit->blockSignals(true);
+ m_RemainingEdit->setValue(remain);
+ m_RemainingEdit->blockSignals(false);
+ }
+}
+
+void KEditScheduleDlg::slotShowHelp(void)
+{
+ kapp->invokeHelp("details.schedules.intro");
+}
+
+#include <keditscheduledlg.moc>
diff --git a/kmymoney2/dialogs/keditscheduledlg.h b/kmymoney2/dialogs/keditscheduledlg.h
new file mode 100644
index 0000000..94c3101
--- /dev/null
+++ b/kmymoney2/dialogs/keditscheduledlg.h
@@ -0,0 +1,103 @@
+/***************************************************************************
+ keditscheduledlg.h - description
+ -------------------
+ begin : Mon Sep 3 2007
+ copyright : (C) 2007 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KEDITSCHEDULEDLG_H
+#define KEDITSCHEDULEDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/mymoneyscheduled.h>
+#include "../dialogs/keditscheduledlgdecl.h"
+
+class TransactionEditor;
+
+/**
+ * @author Thomas Baumgart
+ */
+
+class KEditScheduleDlg : public KEditScheduleDlgDecl
+{
+ Q_OBJECT
+public:
+ /**
+ * Standard QWidget constructor.
+ **/
+ KEditScheduleDlg(const MyMoneySchedule& schedule, QWidget *parent=0, const char *name=0);
+
+ /**
+ * Standard destructor.
+ **/
+ ~KEditScheduleDlg();
+
+ TransactionEditor* startEdit(void);
+
+ /**
+ * Returns the edited schedule.
+ *
+ * @return MyMoneySchedule The schedule details.
+ **/
+ const MyMoneySchedule& schedule(void) const;
+
+protected:
+ MyMoneyTransaction transaction(void) const;
+ /**
+ * This method adjusts @a _date according to the rules specified by
+ * the schedule's weekend option.
+ */
+ QDate adjustDate(const QDate& _date) const;
+
+ /// Overridden for internal reasons. No API changes.
+ bool focusNextPrevChild(bool next);
+
+ /// Overridden for internal reasons. No API changes.
+ void resizeEvent(QResizeEvent* ev);
+
+private slots:
+ void slotSetupSize(void);
+ void slotRemainingChanged(int);
+ void slotEndDateChanged(const QDate& date);
+ void slotPostDateChanged(const QDate& date);
+ void slotSetPaymentMethod(int);
+ void slotFrequencyChanged(int item);
+ void slotShowHelp(void);
+ void slotOccurenceMultiplierChanged(int mult);
+
+ /// Overridden for internal reasons. No API changes.
+ void accept(void);
+
+private:
+ /**
+ * Helper method to recalculate and update Transactions Remaining
+ * when other values are changed
+ */
+ void updateTransactionsRemaining(void);
+
+ /// \internal d-pointer class.
+ class Private;
+ /// \internal d-pointer instance.
+ Private* const d;
+};
+
+#endif
diff --git a/kmymoney2/dialogs/keditscheduledlgdecl.ui b/kmymoney2/dialogs/keditscheduledlgdecl.ui
new file mode 100644
index 0000000..8555c58
--- /dev/null
+++ b/kmymoney2/dialogs/keditscheduledlgdecl.ui
@@ -0,0 +1,532 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KEditScheduleDlgDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KEditScheduleDlgDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>798</width>
+ <height>640</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Edit Scheduled transaction</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout8</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout9</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Schedule name:</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>m_nameEdit</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout7</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Frequency:</string>
+ </property>
+ </widget>
+ <widget class="KIntNumInput">
+ <property name="name">
+ <cstring>m_frequencyNoEdit</cstring>
+ </property>
+ <property name="maxValue">
+ <number>999</number>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Number of selected periods between entries</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyOccurencePeriodCombo">
+ <property name="name">
+ <cstring>m_frequencyEdit</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>m_paymentInformation</cstring>
+ </property>
+ <property name="title">
+ <string>Payment information</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout7</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1_3</cstring>
+ </property>
+ <property name="text">
+ <string>Payment method</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyGeneralCombo">
+ <property name="name">
+ <cstring>m_paymentMethodEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>61</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="Line">
+ <property name="name">
+ <cstring>line1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="KMyMoneyRegister::Register">
+ <column>
+ <property name="text">
+ <string>Security</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Details</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>C</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Payment</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Deposit</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Quantity</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Price</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Value</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Balance</string>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>m_register</cstring>
+ </property>
+ <property name="numRows">
+ <number>0</number>
+ </property>
+ <property name="numCols">
+ <number>12</number>
+ </property>
+ </widget>
+ <widget class="KMyMoneyTransactionForm::TransactionForm">
+ <property name="name">
+ <cstring>m_form</cstring>
+ </property>
+ <property name="numRows">
+ <number>5</number>
+ </property>
+ <property name="numCols">
+ <number>1</number>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox2</cstring>
+ </property>
+ <property name="title">
+ <string>Options</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KComboBox" row="1" column="1">
+ <item>
+ <property name="text">
+ <string>Do nothing</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Change the date to the previous Friday</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Change the date to the next Monday</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_weekendOptionEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>If this schedule occurs on the weekend:</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout7</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_estimateEdit</cstring>
+ </property>
+ <property name="text">
+ <string>The amount is an estimate because it varies for each payment</string>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox">
+ <property name="name">
+ <cstring>m_variation</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="value">
+ <number>10</number>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_autoEnterEdit</cstring>
+ </property>
+ <property name="text">
+ <string>Enter this schedule into the register automatically when it is due</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_endSeriesEdit</cstring>
+ </property>
+ <property name="text">
+ <string>This schedule will end at some time</string>
+ </property>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>m_endOptionsFrame</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer3_2_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_endLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Number of transactions remaining:</string>
+ </property>
+ </widget>
+ <widget class="KIntNumInput">
+ <property name="name">
+ <cstring>m_RemainingEdit</cstring>
+ </property>
+ <property name="minValue">
+ <number>0</number>
+ </property>
+ <property name="maxValue">
+ <number>9999</number>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_endLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Date of final transaction:</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyDateInput">
+ <property name="name">
+ <cstring>m_FinalPaymentEdit</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>StrongFocus</enum>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer12</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout10_3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonHelp</cstring>
+ </property>
+ <property name="text">
+ <string>Help</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>280</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>KEditScheduleDlgDecl</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>m_endSeriesEdit</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>m_endOptionsFrame</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>KEditScheduleDlgDecl</receiver>
+ <slot>reject()</slot>
+ </connection>
+ <connection>
+ <sender>m_estimateEdit</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>m_variation</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/kendingbalancedlg.cpp b/kmymoney2/dialogs/kendingbalancedlg.cpp
new file mode 100644
index 0000000..0760cc2
--- /dev/null
+++ b/kmymoney2/dialogs/kendingbalancedlg.cpp
@@ -0,0 +1,611 @@
+/***************************************************************************
+ kendingbalancedlg.cpp
+ -------------------
+ copyright : (C) 2000,2003 by Michael Edwardes, Thomas Baumgart
+ email : mte@users.sourceforge.net
+ ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qpixmap.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kglobal.h>
+#include <kstandarddirs.h>
+#include <kapplication.h>
+#include <kactivelabel.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kendingbalancedlg.h"
+#include <kmymoney/kmymoneyedit.h>
+#include <kmymoney/mymoneysplit.h>
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/kmymoneycategory.h>
+#include <kmymoney/kmymoneyaccountselector.h>
+
+#include "../dialogs/kcurrencycalculator.h"
+
+class KEndingBalanceDlg::Private
+{
+public:
+ MyMoneyTransaction m_tInterest;
+ MyMoneyTransaction m_tCharges;
+ MyMoneyAccount m_account;
+ QMap<QWidget*, QString> m_helpAnchor;
+};
+
+class KEndingBalanceLoanDlg::Private
+{
+public:
+ MyMoneyTransaction m_tInterest;
+ MyMoneyTransaction m_tCharges;
+ MyMoneyAccountLoan m_account;
+ QMap<QWidget*, QString> m_helpAnchor;
+};
+
+KEndingBalanceDlg::KEndingBalanceDlg(const MyMoneyAccount& account, QWidget *parent, const char *name) :
+ KEndingBalanceDlgDecl(parent, name, true),
+ d(new Private)
+{
+ QString value;
+ MyMoneyMoney endBalance, startBalance;
+
+ d->m_account = account;
+
+ MyMoneySecurity currency = MyMoneyFile::instance()->security(account.currencyId());
+ m_enterInformationLabel->setText(QString("<qt>")+i18n("Please enter the following fields with the information as you find them on your statement. Make sure to enter all values in <b>%1</b>.").arg(currency.name())+QString("</qt>"));
+
+ m_statementDate->setDate(QDate::currentDate());
+
+ // If the previous reconciliation was postponed,
+ // we show a different first page
+ value = account.value("lastReconciledBalance");
+ if(value.isEmpty()) {
+ // if the last statement has been entered long enough ago (more than one month),
+ // then take the last statement date and add one month and use that as statement
+ // date.
+ QDate lastStatementDate = account.lastReconciliationDate();
+ if(lastStatementDate.addMonths(1) < QDate::currentDate()) {
+ m_statementDate->setDate(lastStatementDate.addMonths(1));
+ }
+
+ slotUpdateBalances();
+
+ setAppropriate(m_startPageCheckings, true);
+ setAppropriate(m_pagePreviousPostpone, false);
+ setAppropriate(m_interestChargeCheckings, true);
+ setFinishEnabled(m_interestChargeCheckings, true);
+ } else {
+ setAppropriate(m_startPageCheckings, false);
+ setAppropriate(m_pagePreviousPostpone, true);
+ removePage(m_interestChargeCheckings);
+ setFinishEnabled(m_statementInfoPageCheckings, true);
+ // make sure, we show the correct start page
+ showPage(m_pagePreviousPostpone);
+
+ MyMoneyMoney factor(1,1);
+ if(d->m_account.accountGroup() == MyMoneyAccount::Liability)
+ factor = -factor;
+
+ startBalance = MyMoneyMoney(value)*factor;
+ value = account.value("statementBalance");
+ endBalance = MyMoneyMoney(value)*factor;
+
+ m_previousBalance->setValue(startBalance);
+ m_endingBalance->setValue(endBalance);
+ }
+
+ // We don't need to add the default into the list (see ::help() why)
+ // m_helpAnchor[m_startPageCheckings] = QString("");
+ d->m_helpAnchor[m_interestChargeCheckings] = QString("details.reconcile.wizard.interest");
+ d->m_helpAnchor[m_statementInfoPageCheckings] = QString("details.reconcile.wizard.statement");
+
+ value = account.value("statementDate");
+ if(!value.isEmpty())
+ m_statementDate->setDate(QDate::fromString(value, Qt::ISODate));
+
+ m_lastStatementDate->setText(QString());
+ if(account.lastReconciliationDate().isValid()) {
+ m_lastStatementDate->setText(i18n("Last reconciled statement: %1")
+ .arg(KGlobal::locale()->formatDate(account.lastReconciliationDate(), true)));
+ }
+
+ // remove all unwanted pages
+ removePage(m_startPageLoan);
+ removePage(m_checkPaymentsPage);
+ removePage(m_adjustmentTransactionPage);
+
+ // connect the signals with the slots
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotReloadEditWidgets()));
+ connect(m_payeeEdit, SIGNAL(createItem(const QString&, QString&)), this, SIGNAL(createPayee(const QString&, QString&)));
+ connect(m_interestCategoryEdit, SIGNAL(createItem(const QString&, QString&)), this, SLOT(slotCreateInterestCategory(const QString&, QString&)));
+ connect(m_chargesCategoryEdit, SIGNAL(createItem(const QString&, QString&)), this, SLOT(slotCreateChargesCategory(const QString&, QString&)));
+
+ connect(m_interestEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotCheckPageFinished(void)));
+ connect(m_interestCategoryEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotCheckPageFinished(void)));
+ connect(m_chargesEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotCheckPageFinished(void)));
+ connect(m_chargesCategoryEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotCheckPageFinished(void)));
+ connect(m_statementDate, SIGNAL(dateChanged(const QDate&)), this, SLOT(slotUpdateBalances()));
+
+ slotReloadEditWidgets();
+
+ // preset payee if possible
+ try {
+ // if we find a payee with the same name as the institution,
+ // than this is what we use as payee.
+ if(!d->m_account.institutionId().isEmpty()) {
+ MyMoneyInstitution inst = MyMoneyFile::instance()->institution(d->m_account.institutionId());
+ MyMoneyPayee payee = MyMoneyFile::instance()->payeeByName(inst.name());
+ m_payeeEdit->setSelectedItem(payee.id());
+ }
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+}
+
+KEndingBalanceDlg::~KEndingBalanceDlg()
+{
+ delete d;
+}
+
+void KEndingBalanceDlg::slotUpdateBalances(void)
+{
+ MYMONEYTRACER(tracer);
+
+ // determine the beginning balance and ending balance based on the following
+ // forumulas:
+ //
+ // end balance = current balance - sum(all non cleared transactions)
+ // - sum(all cleared transactions posted
+ // after statement date)
+ // start balance = end balance - sum(all cleared transactions
+ // up to statement date)
+ MyMoneyTransactionFilter filter(d->m_account.id());
+ filter.addState(MyMoneyTransactionFilter::notReconciled);
+ filter.addState(MyMoneyTransactionFilter::cleared);
+ filter.setReportAllSplits(true);
+
+ QValueList<QPair<MyMoneyTransaction, MyMoneySplit> > transactionList;
+ QValueList<QPair<MyMoneyTransaction, MyMoneySplit> >::const_iterator it;
+
+ // retrieve the list from the engine
+ MyMoneyFile::instance()->transactionList(transactionList, filter);
+
+ MyMoneyMoney balance = MyMoneyFile::instance()->balance(d->m_account.id());
+ MyMoneyMoney factor(1,1);
+ if(d->m_account.accountGroup() == MyMoneyAccount::Liability)
+ factor = -factor;
+
+ MyMoneyMoney endBalance, startBalance;
+ balance = balance * factor;
+ endBalance = startBalance = balance;
+
+ tracer.printf("total balance = %s", endBalance.formatMoney("", 2).data());
+
+ for(it = transactionList.begin(); it != transactionList.end(); ++it) {
+ const MyMoneySplit& split = (*it).second;
+ balance -= split.shares() * factor;
+ if((*it).first.postDate() > m_statementDate->date()) {
+ tracer.printf("Reducing balances by %s because postdate of %s/%s(%s) is past statement date", (split.shares() * factor).formatMoney("", 2).data(), (*it).first.id().data(),split.id().data(), (*it).first.postDate().toString(Qt::ISODate).data());
+ endBalance -= split.shares() * factor;
+ startBalance -= split.shares() * factor;
+ } else {
+ switch(split.reconcileFlag()) {
+ case MyMoneySplit::NotReconciled:
+ tracer.printf("Reducing balances by %s because %s/%s(%s) is not reconciled", (split.shares() * factor).formatMoney("", 2).data(), (*it).first.id().data(), split.id().data(), (*it).first.postDate().toString(Qt::ISODate).data());
+ endBalance -= split.shares() * factor;
+ startBalance -= split.shares() * factor;
+ break;
+ case MyMoneySplit::Cleared:
+ tracer.printf("Reducing start balance by %s because %s/%s(%s) is cleared", (split.shares() * factor).formatMoney("", 2).data(), (*it).first.id().data(), split.id().data(), (*it).first.postDate().toString(Qt::ISODate).data());
+ startBalance -= split.shares() * factor;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ m_previousBalance->setValue(startBalance);
+ m_endingBalance->setValue(endBalance);
+ tracer.printf("total balance = %s", endBalance.formatMoney("", 2).data());
+ tracer.printf("start balance = %s", startBalance.formatMoney("", 2).data());
+
+ m_interestDateEdit->setDate(m_statementDate->date());
+ m_chargesDateEdit->setDate(m_statementDate->date());
+}
+
+void KEndingBalanceDlg::accept(void)
+{
+ if(createTransaction(d->m_tInterest, -1, m_interestEdit, m_interestCategoryEdit, m_interestDateEdit)
+ && createTransaction(d->m_tCharges, 1, m_chargesEdit, m_chargesCategoryEdit, m_chargesDateEdit))
+ KEndingBalanceDlgDecl::accept();
+}
+
+void KEndingBalanceDlg::slotCreateInterestCategory(const QString& txt, QString& id)
+{
+ createCategory(txt, id, MyMoneyFile::instance()->income());
+}
+
+void KEndingBalanceDlg::slotCreateChargesCategory(const QString& txt, QString& id)
+{
+ createCategory(txt, id, MyMoneyFile::instance()->expense());
+}
+
+void KEndingBalanceDlg::createCategory(const QString& txt, QString& id, const MyMoneyAccount& parent)
+{
+ MyMoneyAccount acc;
+ acc.setName(txt);
+
+ emit createCategory(acc, parent);
+
+ id = acc.id();
+}
+
+const MyMoneyMoney KEndingBalanceDlg::endingBalance(void) const
+{
+ return adjustedReturnValue(m_endingBalance->value());
+}
+
+const MyMoneyMoney KEndingBalanceDlg::previousBalance(void) const
+{
+ return adjustedReturnValue(m_previousBalance->value());
+}
+
+const MyMoneyMoney KEndingBalanceDlg::adjustedReturnValue(const MyMoneyMoney& v) const
+{
+ return d->m_account.accountGroup() == MyMoneyAccount::Liability ? -v : v;
+}
+
+void KEndingBalanceDlg::slotReloadEditWidgets(void)
+{
+ QString payeeId, interestId, chargesId;
+
+ // keep current selected items
+ payeeId = m_payeeEdit->selectedItem();
+ interestId = m_interestCategoryEdit->selectedItem();
+ chargesId = m_chargesCategoryEdit->selectedItem();
+
+ // load the payee and category widgets with data from the engine
+ m_payeeEdit->loadPayees(MyMoneyFile::instance()->payeeList());
+
+ // a user request to show all categories in both selectors due to a valid use case.
+ AccountSet aSet;
+ aSet.addAccountGroup(MyMoneyAccount::Expense);
+ aSet.addAccountGroup(MyMoneyAccount::Income);
+ aSet.load(m_interestCategoryEdit->selector());
+ aSet.load(m_chargesCategoryEdit->selector());
+
+ // reselect currently selected items
+ if(!payeeId.isEmpty())
+ m_payeeEdit->setSelectedItem(payeeId);
+ if(!interestId.isEmpty())
+ m_interestCategoryEdit->setSelectedItem(interestId);
+ if(!chargesId.isEmpty())
+ m_chargesCategoryEdit->setSelectedItem(chargesId);
+}
+
+void KEndingBalanceDlg::slotCheckPageFinished(void)
+{
+ nextButton()->setEnabled(true);
+ finishButton()->setEnabled(true);
+
+ if(currentPage() == m_interestChargeCheckings) {
+ int cnt1, cnt2;
+ cnt1 = !m_interestEdit->value().isZero() + !m_interestCategoryEdit->selectedItem().isEmpty();
+ cnt2 = !m_chargesEdit->value().isZero() + !m_chargesCategoryEdit->selectedItem().isEmpty();
+ if(cnt1 == 1 || cnt2 == 1) {
+ finishButton()->setEnabled(false);
+ nextButton()->setEnabled(false);
+ }
+ }
+}
+
+const MyMoneyTransaction KEndingBalanceDlg::interestTransaction(void)
+{
+ return d->m_tInterest;
+}
+
+const MyMoneyTransaction KEndingBalanceDlg::chargeTransaction(void)
+{
+ return d->m_tCharges;
+}
+
+bool KEndingBalanceDlg::createTransaction(MyMoneyTransaction &t, const int sign, kMyMoneyEdit *amountEdit, KMyMoneyCategory *categoryEdit, kMyMoneyDateInput* dateEdit)
+{
+ t = MyMoneyTransaction();
+
+ if(!amountEdit->isValid() || categoryEdit->selectedItem().isEmpty() || !dateEdit->date().isValid())
+ return true;
+
+ MyMoneySplit s1, s2;
+ MyMoneyMoney val = amountEdit->value() * MyMoneyMoney(sign, 1);
+ try {
+ t.setPostDate(dateEdit->date());
+ t.setCommodity(d->m_account.currencyId());
+
+ s1.setPayeeId(m_payeeEdit->selectedItem());
+ s1.setReconcileFlag(MyMoneySplit::Cleared);
+ s1.setAccountId(d->m_account.id());
+ s1.setValue(-val);
+ s1.setShares(-val);
+
+ s2 = s1;
+ s2.setAccountId(categoryEdit->selectedItem());
+ s2.setValue(val);
+
+ t.addSplit(s1);
+ t.addSplit(s2);
+
+ QMap<QString, MyMoneyMoney> priceInfo; // just empty
+ MyMoneyMoney shares;
+ if(!KCurrencyCalculator::setupSplitPrice(shares, t, s2, priceInfo, this)) {
+ t = MyMoneyTransaction();
+ return false;
+ }
+
+ s2.setShares(shares);
+ t.modifySplit(s2);
+
+ } catch(MyMoneyException *e) {
+ qDebug("%s", e->what().data());
+ delete e;
+ t = MyMoneyTransaction();
+ return false;
+ }
+
+ return true;
+}
+
+void KEndingBalanceDlg::help(void)
+{
+ QString anchor = d->m_helpAnchor[currentPage()];
+ if(anchor.isEmpty())
+ anchor = QString("details.reconcile.whatis");
+
+ kapp->invokeHelp(anchor);
+}
+
+KEndingBalanceLoanDlg::KEndingBalanceLoanDlg(const MyMoneyAccount& account, QWidget *parent, const char *name) :
+ KEndingBalanceDlgDecl(parent, name, true),
+ d(new Private)
+{
+ d->m_account = account;
+ QDate value = account.lastReconciliationDate();
+ if(value.isValid())
+ m_startDateEdit->setDate(value.addDays(1));
+ else
+ m_startDateEdit->setDate(d->m_account.openingDate());
+
+ // make sure, we show the correct start page
+ showPage(m_startPageLoan);
+
+ // enable the finish button on the last page
+ setAppropriate(m_checkPaymentsPage, true);
+
+ // remove all unwanted pages
+ removePage(m_startPageCheckings);
+ removePage(m_statementInfoPageCheckings);
+ removePage(m_pagePreviousPostpone);
+ removePage(m_interestChargeCheckings);
+
+ // connect the signals with the slots
+ connect(m_amortizationTotalEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotCheckPageFinished(void)));
+ connect(m_interestTotalEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotCheckPageFinished(void)));
+ connect(m_accountEdit, SIGNAL(stateChanged(void)), this, SLOT(slotCheckPageFinished(void)));
+ connect(m_categoryEdit, SIGNAL(stateChanged(void)), this, SLOT(slotCheckPageFinished(void)));
+}
+
+KEndingBalanceLoanDlg::~KEndingBalanceLoanDlg()
+{
+}
+
+void KEndingBalanceLoanDlg::slotCheckPageFinished(void)
+{
+ nextButton()->setEnabled(true);
+ finishButton()->setEnabled(true);
+
+ if(currentPage() == m_checkPaymentsPage) {
+ MyMoneyMoney interest = totalInterest(m_startDateEdit->date(), m_endDateEdit->date());
+ MyMoneyMoney amortization = totalAmortization(m_startDateEdit->date(), m_endDateEdit->date());
+
+ if(interest == m_interestTotalEdit->value()
+ && amortization == m_amortizationTotalEdit->value()) {
+ if(indexOf(m_adjustmentTransactionPage) != -1) {
+ removePage(m_adjustmentTransactionPage);
+ // the following line forces to update the buttons
+ showPage(m_checkPaymentsPage);
+ nextButton()->setEnabled(true);
+ finishButton()->setEnabled(true);
+ }
+ } else {
+ if(indexOf(m_adjustmentTransactionPage) == -1) {
+ addPage(m_adjustmentTransactionPage, i18n("Adjustment transaction"));
+ // the following line forces to update the buttons
+ showPage(m_checkPaymentsPage);
+ }
+ }
+ } else if(currentPage() == m_adjustmentTransactionPage) {
+ if(m_accountEdit->selectedItems().count() == 0) {
+ nextButton()->setEnabled(false);
+ finishButton()->setEnabled(false);
+
+ } else if(m_categoryEdit->isEnabled()
+ && m_categoryEdit->selectedItems().count() == 0) {
+ nextButton()->setEnabled(false);
+ finishButton()->setEnabled(false);
+ }
+ }
+}
+
+const MyMoneyMoney KEndingBalanceLoanDlg::totalInterest(const QDate& start, const QDate& end) const
+{
+ MyMoneyMoney interest;
+ MyMoneyTransactionFilter filter(d->m_account.id());
+ filter.setDateFilter(start, end);
+
+ QValueList<MyMoneyTransaction> list = MyMoneyFile::instance()->transactionList(filter);
+ QValueList<MyMoneyTransaction>::ConstIterator it_t;
+
+ for(it_t = list.begin(); it_t != list.end(); ++it_t) {
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ for(it_s = (*it_t).splits().begin(); it_s != (*it_t).splits().end(); ++it_s) {
+ if((*it_s).action() == MyMoneySplit::ActionInterest) {
+ interest += (*it_s).value();
+ }
+ }
+ }
+ return interest;
+}
+
+const MyMoneyMoney KEndingBalanceLoanDlg::totalAmortization(const QDate& start, const QDate& end) const
+{
+ MyMoneyMoney amortization;
+ MyMoneyMoney adjust(1,1);
+ MyMoneyTransactionFilter filter(d->m_account.id());
+ filter.setDateFilter(start, end);
+
+ if(d->m_account.accountType() == MyMoneyAccount::AssetLoan)
+ adjust = -adjust;
+
+ QValueList<MyMoneyTransaction> list = MyMoneyFile::instance()->transactionList(filter);
+ QValueList<MyMoneyTransaction>::ConstIterator it_t;
+
+ for(it_t = list.begin(); it_t != list.end(); ++it_t) {
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ for(it_s = (*it_t).splits().begin(); it_s != (*it_t).splits().end(); ++it_s) {
+ if((*it_s).accountId() == d->m_account.id()
+ && (*it_s).action() == MyMoneySplit::ActionAmortization
+ && ((*it_s).value() * MyMoneyMoney(adjust, 1)).isPositive()) {
+ amortization += (*it_s).value();
+ }
+ }
+ }
+ // make sure to return a positive number
+ return amortization * adjust;
+}
+
+void KEndingBalanceLoanDlg::next(void)
+{
+ bool dontLeavePage = false;
+
+ if(currentPage() == m_startPageLoan) {
+ MyMoneyMoney interest = totalInterest(m_startDateEdit->date(), m_endDateEdit->date());
+ MyMoneyMoney amortization = totalAmortization(m_startDateEdit->date(), m_endDateEdit->date());
+
+ m_loanOverview->setText(i18n("KMyMoney has calculated the following amounts for "
+ "interest and amortization according to recorded payments "
+ "between %1 and %2.")
+ .arg(KGlobal::locale()->formatDate(m_startDateEdit->date(), true))
+ .arg(KGlobal::locale()->formatDate(m_endDateEdit->date(), true)));
+
+ // preload widgets with calculated values if they are empty
+ if(m_amortizationTotalEdit->value().isZero() && !amortization.isZero())
+ m_amortizationTotalEdit->setValue(amortization);
+ if(m_interestTotalEdit->value().isZero() && !interest.isZero())
+ m_interestTotalEdit->setValue(interest);
+
+ } else if(currentPage() == m_checkPaymentsPage) {
+ AccountSet assetSet, incomeSet;
+ assetSet.addAccountGroup(MyMoneyAccount::Asset);
+ incomeSet.addAccountGroup(MyMoneyAccount::Income);
+ assetSet.load(m_accountEdit);
+ incomeSet.load(m_categoryEdit);
+#if 0
+ m_accountEdit->loadList(static_cast<KMyMoneyUtils::categoryTypeE>(KMyMoneyUtils::asset | KMyMoneyUtils::liability));
+ m_categoryEdit->loadList(static_cast<KMyMoneyUtils::categoryTypeE>(KMyMoneyUtils::income | KMyMoneyUtils::expense));
+#endif
+ m_categoryEdit->setEnabled(false);
+
+ MyMoneyMoney interest = totalInterest(m_startDateEdit->date(), m_endDateEdit->date());
+ if(interest != m_interestTotalEdit->value()) {
+ m_categoryEdit->setEnabled(true);
+ }
+ }
+
+ if(!dontLeavePage)
+ KEndingBalanceDlgDecl::next();
+
+ slotCheckPageFinished();
+}
+
+const MyMoneyTransaction KEndingBalanceLoanDlg::adjustmentTransaction(void) const
+{
+ MyMoneyTransaction t;
+
+ MyMoneyMoney interest = totalInterest(m_startDateEdit->date(), m_endDateEdit->date());
+ MyMoneyMoney amortization = totalAmortization(m_startDateEdit->date(), m_endDateEdit->date());
+
+ if(interest != m_interestTotalEdit->value()
+ || amortization != m_amortizationTotalEdit->value()) {
+ MyMoneySplit sAccount, sAmortization, sInterest;
+ int adjust = 1;
+
+ if(d->m_account.accountType() == MyMoneyAccount::AssetLoan)
+ adjust = -1;
+
+ // fix sign if asset
+ interest = interest * MyMoneyMoney(adjust,1);
+ amortization = amortization * MyMoneyMoney(adjust,1);
+
+ sAmortization.setValue((m_amortizationTotalEdit->value() - amortization) * MyMoneyMoney(adjust,1));
+ sInterest.setValue((m_interestTotalEdit->value() - interest) * MyMoneyMoney(adjust,1));
+ sAccount.setValue( -(sAmortization.value() + sInterest.value()));
+
+ try {
+ sAmortization.setAccountId(d->m_account.id());
+ sAmortization.setPayeeId(d->m_account.payee());
+ sAccount.setAccountId(m_accountEdit->selectedItems()[0]);
+ sAccount.setPayeeId(d->m_account.payee());
+ if(m_categoryEdit->isEnabled())
+ sInterest.setAccountId(m_categoryEdit->selectedItems()[0]);
+
+ sAccount.setMemo(i18n("Adjustment transaction"));
+ sAmortization.setMemo(sAccount.memo());
+ sInterest.setMemo(sAccount.memo());
+
+ sAccount.setAction(MyMoneySplit::ActionAmortization);
+ sAmortization.setAction(MyMoneySplit::ActionAmortization);
+ sInterest.setAction(MyMoneySplit::ActionInterest);
+
+ t.addSplit(sAccount);
+ t.addSplit(sAmortization);
+ if(!sInterest.value().isZero())
+ t.addSplit(sInterest);
+
+ t.setPostDate(m_endDateEdit->date());
+
+ } catch(MyMoneyException *e) {
+ qDebug("Unable to create adjustment transaction for loan reconciliation: %s", e->what().data());
+ delete e;
+ return MyMoneyTransaction();
+ }
+ }
+ return t;
+}
+
+void KEndingBalanceLoanDlg::help(void)
+{
+ QString anchor = d->m_helpAnchor[currentPage()];
+ if(anchor.isEmpty())
+ anchor = QString("details.reconcile.whatis");
+
+ kapp->invokeHelp(anchor);
+}
+
+#include "kendingbalancedlg.moc"
+
diff --git a/kmymoney2/dialogs/kendingbalancedlg.h b/kmymoney2/dialogs/kendingbalancedlg.h
new file mode 100644
index 0000000..3b9de00
--- /dev/null
+++ b/kmymoney2/dialogs/kendingbalancedlg.h
@@ -0,0 +1,147 @@
+/***************************************************************************
+ kendingbalancedlg.h
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KENDINGBALANCEDLG_H
+#define KENDINGBALANCEDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+#include <qgroupbox.h>
+#include <qlabel.h>
+#include <qpushbutton.h>
+#include <qdialog.h>
+#include <qdatetime.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+class kMyMoneyEdit;
+#include <kmymoney/kmymoneydateinput.h>
+#include <kmymoney/mymoneyaccount.h>
+#include "../dialogs/kendingbalancedlgdecl.h"
+
+/**
+ * This dialog is wizard based and used to enter additional
+ * information required to start the reconciliation process.
+ * This version implements the behaviour for checkings,
+ * savings and credit card accounts.
+ *
+ * @author Thomas Baumgart
+ */
+class KEndingBalanceDlg : public KEndingBalanceDlgDecl
+{
+ Q_OBJECT
+public:
+ KEndingBalanceDlg(const MyMoneyAccount& account, QWidget *parent=0, const char *name=0);
+ ~KEndingBalanceDlg();
+
+ const MyMoneyMoney endingBalance(void) const;
+ const MyMoneyMoney previousBalance(void) const;
+ const QDate statementDate(void) const { return m_statementDate->date(); };
+
+ const MyMoneyTransaction interestTransaction(void);
+ const MyMoneyTransaction chargeTransaction(void);
+
+protected:
+ bool createTransaction(MyMoneyTransaction& t, const int sign, kMyMoneyEdit *amountEdit, KMyMoneyCategory *categoryEdit, kMyMoneyDateInput* dateEdit);
+ const MyMoneyMoney adjustedReturnValue(const MyMoneyMoney& v) const;
+ void createCategory(const QString& txt, QString& id, const MyMoneyAccount& parent);
+
+protected slots:
+ void slotCheckPageFinished(void);
+ void slotReloadEditWidgets(void);
+ void help(void);
+ void slotCreateInterestCategory(const QString& txt, QString& id);
+ void slotCreateChargesCategory(const QString& txt, QString& id);
+ void accept(void);
+ void slotUpdateBalances(void);
+
+signals:
+ /**
+ * proxy signal for KMyMoneyPayeeCombo::createItem(const QString&, QString&)
+ */
+ void createPayee(const QString&, QString&);
+
+ /**
+ * emit when a category is about to be created
+ */
+ void createCategory(MyMoneyAccount& acc, const MyMoneyAccount& parent);
+
+private:
+ /// \internal d-pointer class.
+ class Private;
+ /// \internal d-pointer instance.
+ Private* const d;
+};
+
+/**
+ * This dialog is wizard based and used to enter additional
+ * information required to start the reconciliation process.
+ * This version is implements the behaviour for loan accounts.
+ */
+class KEndingBalanceLoanDlg : public KEndingBalanceDlgDecl
+{
+ Q_OBJECT
+public:
+ KEndingBalanceLoanDlg(const MyMoneyAccount& account, QWidget *parent=0, const char *name=0);
+ ~KEndingBalanceLoanDlg();
+
+ /**
+ * This method returns the adjustment transaction if one
+ * has been created. If not, an empty transaction will be returned.
+ */
+ const MyMoneyTransaction adjustmentTransaction(void) const;
+
+ /**
+ * This method returns the starting date of the statement as provided
+ * by the user. The value returned is only valid if the dialog returned
+ * with QDialog::accept.
+ */
+ const QDate startDate(void) const { return m_startDateEdit->date(); };
+
+ /**
+ * This method returns the ending date of the statement as provided
+ * by the user. The value returned is only valid if the dialog returned
+ * with QDialog::accept.
+ */
+ const QDate endDate(void) const { return m_endDateEdit->date(); };
+
+protected:
+ const MyMoneyMoney totalInterest(const QDate& start, const QDate& end) const;
+ const MyMoneyMoney totalAmortization(const QDate& start, const QDate& end) const;
+
+public slots:
+ void next();
+
+protected slots:
+ void slotCheckPageFinished(void);
+ void help(void);
+
+private:
+ /// \internal d-pointer class.
+ class Private;
+ /// \internal d-pointer instance.
+ Private* const d;
+};
+
+#endif
diff --git a/kmymoney2/dialogs/kendingbalancedlgdecl.ui b/kmymoney2/dialogs/kendingbalancedlgdecl.ui
new file mode 100644
index 0000000..0f77810
--- /dev/null
+++ b/kmymoney2/dialogs/kendingbalancedlgdecl.ui
@@ -0,0 +1,980 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KEndingBalanceDlgDecl</class>
+<widget class="QWizard">
+ <property name="name">
+ <cstring>KEndingBalanceDlgDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>589</width>
+ <height>465</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Reconciliation Wizard</string>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_startPageCheckings</cstring>
+ </property>
+ <attribute name="title">
+ <string>General Information</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel6</cstring>
+ </property>
+ <property name="text">
+ <string>Reconciling your account assures, that your recordings match those of your institution and that there are no mistakes on either side. You should reconcile your account whenever you receive a statement from your institution.
+
+All relevant information necessary for this process is usually printed on your statement.
+
+On the next page you will verify, that the starting and ending balance are matching those on your statement. If not, please modify the figures.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_startPageLoan</cstring>
+ </property>
+ <attribute name="title">
+ <string>General Information</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel7</cstring>
+ </property>
+ <property name="text">
+ <string>KMyMoney calculates your loan payments automatically. The amounts can deviate from those calculated by the creditor. Therefore, you possibly have to adjust amortization, interest and other costs according to your statement.
+
+Please enter the following information found on your statement:</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer11</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>19</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout10</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer10</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>42</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout9</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="kMyMoneyDateInput" row="0" column="1">
+ <property name="name">
+ <cstring>m_startDateEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel3_2</cstring>
+ </property>
+ <property name="text">
+ <string>Ending date of statement</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyDateInput" row="1" column="1">
+ <property name="name">
+ <cstring>m_endDateEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Starting date of statement</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer9_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>44</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer12</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_checkPaymentsPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Verify payments</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_loanOverview</cstring>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout12</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer13</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>51</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout11</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Amortization</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="0" column="1">
+ <property name="name">
+ <cstring>m_amortizationTotalEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel2_3</cstring>
+ </property>
+ <property name="text">
+ <string>Interest</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="1" column="1">
+ <property name="name">
+ <cstring>m_interestTotalEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer14</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>71</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel4_2</cstring>
+ </property>
+ <property name="text">
+ <string>If your statement shows different amounts, please cancel this dialog and correct the false transactions or correct the values in this dialog. In the later case, KMyMoney will create an adjustment transaction and add it to the ledger.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer15</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>19</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_adjustmentTransactionPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Adjustment transaction</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel5_2</cstring>
+ </property>
+ <property name="text">
+ <string>In order to create the adjustment transaction, KMyMoney requires an account and possibly an interest category to assign the differences to. Please select an account and - if necessary - a category.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout19</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout16</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel7_2</cstring>
+ </property>
+ <property name="text">
+ <string>Account</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>m_accountEdit</cstring>
+ </property>
+ </widget>
+ <widget class="kMyMoneyAccountSelector">
+ <property name="name">
+ <cstring>m_accountEdit</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout18</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel6_2</cstring>
+ </property>
+ <property name="text">
+ <string>Interest-Category</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>m_categoryEdit</cstring>
+ </property>
+ </widget>
+ <widget class="kMyMoneyAccountSelector">
+ <property name="name">
+ <cstring>m_categoryEdit</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer16</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>25</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_pagePreviousPostpone</cstring>
+ </property>
+ <attribute name="title">
+ <string>Restarting postponed reconciliation</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel8</cstring>
+ </property>
+ <property name="text">
+ <string>You have previously postponed the reconciliation of this account. If you have entered charges or interests the last time you started reconciling this account you can modify these in the ledger later on.
+
+It is important, that you continue with the same statement you used when you postponed the reconciliation.
+
+All information you have entered into this wizard will be shown and all transactions that you already cleared are marked with a 'C'.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_statementInfoPageCheckings</cstring>
+ </property>
+ <attribute name="title">
+ <string>Statement Information</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>m_enterInformationLabel</cstring>
+ </property>
+ <property name="text">
+ <string>x</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>50</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout9</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>42</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout8</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Statement date:</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyDateInput" row="0" column="1">
+ <property name="name">
+ <cstring>m_statementDate</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Starting balance of this statement:</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="1" column="1">
+ <property name="name">
+ <cstring>m_previousBalance</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Ending balance of this statement:</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="2" column="1">
+ <property name="name">
+ <cstring>m_endingBalance</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>46</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>87</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_lastStatementDate</cstring>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_interestChargeCheckings</cstring>
+ </property>
+ <attribute name="title">
+ <string>Interest / Charges</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>If necessary, enter information about interest or charges here. KMyMoney will create transactions and clear them directly for you.</string>
+ </property>
+ </widget>
+ <widget class="Line">
+ <property name="name">
+ <cstring>Line2</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer8</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout17</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer7</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>60</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout16</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout15</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Payee</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyPayeeCombo">
+ <property name="name">
+ <cstring>m_payeeEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox1</cstring>
+ </property>
+ <property name="title">
+ <string>Interest</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>2</number>
+ </property>
+ <widget class="KMyMoneyCategory">
+ <property name="name">
+ <cstring>m_interestCategoryEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout18</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="kMyMoneyEdit">
+ <property name="name">
+ <cstring>m_interestEdit</cstring>
+ </property>
+ <property name="resetButtonVisibility" stdset="0">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="kMyMoneyDateInput">
+ <property name="name">
+ <cstring>m_interestDateEdit</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox2</cstring>
+ </property>
+ <property name="title">
+ <string>Charges</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>2</number>
+ </property>
+ <widget class="KMyMoneyCategory">
+ <property name="name">
+ <cstring>m_chargesCategoryEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout19</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="kMyMoneyEdit">
+ <property name="name">
+ <cstring>m_chargesEdit</cstring>
+ </property>
+ <property name="resetButtonVisibility" stdset="0">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="kMyMoneyDateInput">
+ <property name="name">
+ <cstring>m_chargesDateEdit</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>60</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer9</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>kMyMoneyAccountSelector</class>
+ <header location="global">../widgets/kmymoneyaccountselector.h</header>
+ <sizehint>
+ <width>80</width>
+ <height>80</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="1114">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000042149444154789c8d95c18b1c4514c67fbb29e5b54ea05b26da1d36b08d096e8b11261871837bc8e282ac7ac82187e049a317e32d37110992bf42123c694eea414c0e0bf1b0ec6c402139485a54e8810c54c10e741146fa110bd643f74c12bd642e4d75f77cf5d5ef7dafdfc2ce7087d9eff32fdfdff74e5114104011e489d6e952cce5cfbe5998692dec0c77b87aedd3fddd9f2b3efce02291082209aa3504685022e4ffd7a000a82a765c515615ce95acae659c3f7765c100ec6e575cf8f822e991025f3b6a6f890c484f181ccfc1583428f5d4e2fe84da039aa04121b40eb32483a0ec6e5bce9f8385d36fa7fb9b1b17c8f31cbfe7a95c45be94520c72b2141a1caa160d1666e24ea94aa11ee7685054159d2ada34d41387c40dc63b8844f0b5c73a4bb19cb3f9de001f2aac1fa23aa209168c004224902e29d22ff1e38abbdb275055c4800610233867311a1491847a62c98f66ac6f14d8e99072f22daa15b68a8108424d6422e24c88e3966fbce4c9d786945b27f0be0103ed13c16004d59a2c4d58df28a87548e9aee2274ab95d60c7193c9a0281fc959ae2a4450364a9e2572c7a2b43438374ef2dd2154012d050514dbec7396578a3130d9d6850066f0ad9d186f2d78cdbbb799b0a202f2c48d3aebbb418310240b112637588574bf54b8efaa4fd9b691dacbf5b305813542bae63a9eee4c4694d967b5494eca8c7ef0933bdc5d90e6a2caa0e3f013b7adce9fa5b03d637561113a30106a71d18c5fd9677058338ad01e91c0b8b743b880182ce19cd9c0e5e2b583fbdda565d3d04cfedad180942133af201b2bc3588e111c680068f489780ce69b192b279768088524f2b3458ea694d3de99a4323bc976ed34eb86b98c51993f6be10f77240c99685cd731991f1582df15aa15a213d583f5313a7806988fb8a0640e336359d9e9933568bf44062214ba19e2a7652a13d8b068ff596b807182189234e9da9f1ceb78c81b28c3ac6fe21e306c58e41d5118952acd6a0c2f56b9e6a5c72f346cdcd6b19a3bf8010010d714f89533b674c90c7189b598eab12a45fb5c75b8253672b863fbcccf5af93b6904119fe9851bf5153ac3a746ae7b9d5698c1dc58f313e70e4707ce9d84bafa2f79fc23fb8c7c1438ef04031a2642fee21060ec69ee47020796ecaa12313ccd333d1b67935047acf2be3bb11aa010dbe656cc755dbe3b772084a7ebc6d5711253b593dfcc0cc8fcd3cafda455512c7f200ec56cbfac0f1d7d34b7fdf0f98fd88a92a7e9cb0e70cc933c0b38a2c823ea0bd76c70c016adb67f47bc2a117a6d40abeea33fa23c2fb867edfb413e4a34fded94ffb3991c46dc7754cd3634ad2af490b857f5a5137126a97e02a8120a485235b6a28ef80bd077ee2b9f2d54fed04595dcbd8ddb6c4bd87334c10cadb2064e856177e7864e669fbe1df154a0142839f7ad2e5b6880bff1da66eece78e315d959f609da670f98befe6c3f45fb42672c9acff7f660000000049454e44ae426082</data>
+ </image>
+</images>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/kenterscheduledlg.cpp b/kmymoney2/dialogs/kenterscheduledlg.cpp
new file mode 100644
index 0000000..f39f003
--- /dev/null
+++ b/kmymoney2/dialogs/kenterscheduledlg.cpp
@@ -0,0 +1,327 @@
+/***************************************************************************
+ kenterscheduledlg.cpp
+ -------------------
+ begin : Sat Apr 7 2007
+ copyright : (C) 2007 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qtimer.h>
+#include <qwidgetlist.h>
+#include <qlabel.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kpushbutton.h>
+#include <kstdguiitem.h>
+#include <kiconloader.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kenterscheduledlg.h"
+#include "../dialogs/kcurrencycalculator.h"
+#include <kmymoney/register.h>
+#include <kmymoney/transactionform.h>
+#include <kmymoney/transaction.h>
+#include <kmymoney/transactioneditor.h>
+#include <kmymoney/kmymoneyutils.h>
+#include <kmymoney/mymoneyfinancialcalculator.h>
+#include <kmymoney/kmymoneylineedit.h>
+#include <kmymoney/kmymoneycategory.h>
+#include <kmymoney/kmymoneyaccountselector.h>
+#include <kmymoney/kmymoneydateinput.h>
+
+#include "../kmymoney2.h"
+
+class KEnterScheduleDlg::Private
+{
+public:
+ Private() : m_item(0), m_showWarningOnce(true) {}
+ ~Private() {}
+
+ MyMoneySchedule m_schedule;
+ KMyMoneyRegister::Transaction* m_item;
+ QWidgetList m_tabOrderWidgets;
+ bool m_showWarningOnce;
+ KMyMoneyUtils::EnterScheduleResultCodeE m_extendedReturnCode;
+};
+
+KEnterScheduleDlg::KEnterScheduleDlg(QWidget *parent, const MyMoneySchedule& schedule) :
+ KEnterScheduleDlgDecl(parent, "kenterscheduledlg"),
+ d(new Private)
+{
+ d->m_schedule = schedule;
+ d->m_extendedReturnCode = KMyMoneyUtils::Enter;
+ buttonOk->setIconSet(KGlobal::iconLoader()->loadIconSet("key_enter", KIcon::NoGroup, KIcon::SizeSmall, true));
+ buttonSkip->setIconSet(KGlobal::iconLoader()->loadIconSet("player_fwd", KIcon::NoGroup, KIcon::SizeSmall, true));
+ buttonCancel->setGuiItem(KStdGuiItem::cancel());
+ buttonHelp->setGuiItem(KStdGuiItem::help());
+ buttonIgnore->setHidden(true);
+ buttonSkip->setHidden(true);
+
+ // make sure, we have a tabbar with the form
+ KMyMoneyTransactionForm::TabBar* tabbar = m_form->tabBar(m_form->parentWidget());
+
+ // we never need to see the register
+ m_register->hide();
+
+ // ... setup the form ...
+ m_form->setupForm(d->m_schedule.account());
+
+ // ... and the register ...
+ m_register->clear();
+
+ // ... now add the transaction to register and form ...
+ MyMoneyTransaction t = transaction();
+ d->m_item = KMyMoneyRegister::Register::transactionFactory(m_register, t, d->m_schedule.transaction().splits()[0], 0);
+ m_register->selectItem(d->m_item);
+ // show the account row
+ d->m_item->setShowRowInForm(0, true);
+
+ m_form->slotSetTransaction(d->m_item);
+
+ // no need to see the tabbar
+ tabbar->hide();
+
+ // setup name and type
+ m_scheduleName->setText(d->m_schedule.name());
+ m_type->setText(KMyMoneyUtils::scheduleTypeToString(d->m_schedule.type()));
+
+ connect(buttonHelp, SIGNAL(clicked()), this, SLOT(slotShowHelp()));
+ connect(buttonIgnore, SIGNAL(clicked()), this, SLOT(slotIgnore()));
+ connect(buttonSkip, SIGNAL(clicked()), this, SLOT(slotSkip()));
+
+ // force the initial height to be as small as possible
+ QTimer::singleShot(0, this, SLOT(slotSetupSize()));
+}
+
+KEnterScheduleDlg::~KEnterScheduleDlg()
+{
+ delete d;
+}
+
+KMyMoneyUtils::EnterScheduleResultCodeE KEnterScheduleDlg::resultCode(void) const
+{
+ if(result() == QDialog::Accepted)
+ return d->m_extendedReturnCode;
+ return KMyMoneyUtils::Cancel;
+}
+
+void KEnterScheduleDlg::showExtendedKeys(bool visible)
+{
+ buttonIgnore->setShown(visible);
+ buttonSkip->setShown(visible);
+}
+
+void KEnterScheduleDlg::slotIgnore(void)
+{
+ d->m_extendedReturnCode = KMyMoneyUtils::Ignore;
+ accept();
+}
+
+void KEnterScheduleDlg::slotSkip(void)
+{
+ d->m_extendedReturnCode = KMyMoneyUtils::Skip;
+ accept();
+}
+
+MyMoneyTransaction KEnterScheduleDlg::transaction(void)
+{
+ MyMoneyTransaction t = d->m_schedule.transaction();
+
+ try {
+ if (d->m_schedule.type() == MyMoneySchedule::TYPE_LOANPAYMENT) {
+ KMyMoneyUtils::calculateAutoLoan(d->m_schedule, t, QMap<QString, MyMoneyMoney>());
+ }
+ } catch (MyMoneyException* e) {
+ KMessageBox::detailedError(this, i18n("Unable to load schedule details"), e->what());
+ delete e;
+ }
+
+ t.clearId();
+ t.setEntryDate(QDate());
+ return t;
+}
+
+QDate KEnterScheduleDlg::date(const QDate& _date) const
+{
+ QDate date(_date);
+ return d->m_schedule.adjustedDate(date, d->m_schedule.weekendOption());
+}
+
+void KEnterScheduleDlg::resizeEvent(QResizeEvent* ev)
+{
+ m_register->resize(KMyMoneyRegister::DetailColumn);
+ m_form->resize(KMyMoneyTransactionForm::ValueColumn1);
+ KEnterScheduleDlgDecl::resizeEvent(ev);
+}
+
+
+void KEnterScheduleDlg::slotSetupSize(void)
+{
+ resize(width(), minimumSizeHint().height());
+}
+
+int KEnterScheduleDlg::exec(void)
+{
+ if(d->m_showWarningOnce) {
+ d->m_showWarningOnce = false;
+ KMessageBox::information(this, QString("<qt>")+i18n("<p>Please check that all the details in the following dialog are correct and press OK.</p><p>Editable data can be changed and can either be applied to just this occurence or for all subsequent occurences for this schedule. (You will be asked what you intend after pressing OK in the following dialog)</p>")+QString("</qt>"), i18n("Enter scheduled transaction"), "EnterScheduleDlgInfo");
+ }
+
+ return KEnterScheduleDlgDecl::exec();
+}
+
+TransactionEditor* KEnterScheduleDlg::startEdit(void)
+{
+ KMyMoneyRegister::SelectedTransactions list(m_register);
+ TransactionEditor* editor = d->m_item->createEditor(m_form, list, QDate());
+
+ // check that we use the same transaction commodity in all selected transactions
+ // if not, we need to update this in the editor's list. The user can also bail out
+ // of this operation which means that we have to stop editing here.
+ if(editor) {
+ if(!editor->fixTransactionCommodity(d->m_schedule.account())) {
+ // if the user wants to quit, we need to destroy the editor
+ // and bail out
+ delete editor;
+ editor = 0;
+ }
+ }
+
+ if(editor) {
+ connect(editor, SIGNAL(transactionDataSufficient(bool)), buttonOk, SLOT(setEnabled(bool)));
+ connect(editor, SIGNAL(escapePressed()), buttonCancel, SLOT(animateClick()));
+ connect(editor, SIGNAL(returnPressed()), buttonOk, SLOT(animateClick()));
+
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), editor, SLOT(slotReloadEditWidgets()));
+ // connect(editor, SIGNAL(finishEdit(const KMyMoneyRegister::SelectedTransactions&)), this, SLOT(slotLeaveEditMode(const KMyMoneyRegister::SelectedTransactions&)));
+ connect(editor, SIGNAL(createPayee(const QString&, QString&)), kmymoney2, SLOT(slotPayeeNew(const QString&, QString&)));
+ connect(editor, SIGNAL(createCategory(MyMoneyAccount&, const MyMoneyAccount&)), kmymoney2, SLOT(slotCategoryNew(MyMoneyAccount&, const MyMoneyAccount&)));
+ connect(editor, SIGNAL(createSecurity(MyMoneyAccount&, const MyMoneyAccount&)), kmymoney2, SLOT(slotInvestmentNew(MyMoneyAccount&, const MyMoneyAccount&)));
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), editor, SLOT(slotReloadEditWidgets()));
+
+ // create the widgets, place them in the parent and load them with data
+ // setup tab order
+ d->m_tabOrderWidgets.clear();
+ KMyMoneyRegister::Action action = KMyMoneyRegister::ActionWithdrawal;
+ switch(d->m_schedule.type()) {
+ case MyMoneySchedule::TYPE_DEPOSIT:
+ action = KMyMoneyRegister::ActionDeposit;
+ break;
+ case MyMoneySchedule::TYPE_TRANSFER:
+ action = KMyMoneyRegister::ActionTransfer;
+ break;
+ case MyMoneySchedule::TYPE_LOANPAYMENT:
+ switch(d->m_schedule.paymentType()) {
+ case MyMoneySchedule::STYPE_DIRECTDEPOSIT:
+ case MyMoneySchedule::STYPE_MANUALDEPOSIT:
+ action = KMyMoneyRegister::ActionDeposit;
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ editor->setup(d->m_tabOrderWidgets, d->m_schedule.account(), action);
+
+ // if it's not a check, then we need to clear
+ // a possibly assigned check number
+ if(d->m_schedule.paymentType() != MyMoneySchedule::STYPE_WRITECHEQUE) {
+ QWidget* w = editor->haveWidget("number");
+ if(w)
+ dynamic_cast<kMyMoneyLineEdit*>(w)->loadText(QString());
+ }
+
+ Q_ASSERT(!d->m_tabOrderWidgets.isEmpty());
+
+ // don't forget our three buttons
+ d->m_tabOrderWidgets.append(buttonOk);
+ d->m_tabOrderWidgets.append(buttonCancel);
+ d->m_tabOrderWidgets.append(buttonHelp);
+
+ // install event filter in all taborder widgets
+ for(QWidget* w = d->m_tabOrderWidgets.first(); w; w = d->m_tabOrderWidgets.next()) {
+ w->installEventFilter(this);
+ w->installEventFilter(editor);
+ }
+
+ // Check if the editor has some preference on where to set the focus
+ // If not, set the focus to the first widget in the tab order
+ QWidget* focusWidget = editor->firstWidget();
+ if(!focusWidget)
+ focusWidget = d->m_tabOrderWidgets.first();
+ focusWidget->setFocus();
+
+ // Make sure, we use the adjusted date
+ kMyMoneyDateInput* dateEdit = dynamic_cast<kMyMoneyDateInput*>(editor->haveWidget("postdate"));
+ if(dateEdit) {
+ dateEdit->setDate(d->m_schedule.adjustedNextDueDate());
+ }
+ }
+
+ return editor;
+}
+
+bool KEnterScheduleDlg::focusNextPrevChild(bool next)
+{
+ bool rc = false;
+
+ // qDebug("KGlobalLedgerView::focusNextPrevChild(editmode=%s)", m_inEditMode ? "true" : "false");
+ QWidget *w = 0;
+ QWidget *currentWidget;
+
+ w = qApp->focusWidget();
+ while(w && d->m_tabOrderWidgets.find(w) == -1) {
+ // qDebug("'%s' not in list, use parent", w->className());
+ w = w->parentWidget();
+ }
+ // if(w) qDebug("tab order is at '%s'", w->className());
+ currentWidget = d->m_tabOrderWidgets.current();
+ w = next ? d->m_tabOrderWidgets.next() : d->m_tabOrderWidgets.prev();
+
+ do {
+ if(!w) {
+ w = next ? d->m_tabOrderWidgets.first() : d->m_tabOrderWidgets.last();
+ }
+
+ if(w != currentWidget
+ && ((w->focusPolicy() & TabFocus) == TabFocus)
+ && w->isVisible() && w->isEnabled()) {
+ // qDebug("Selecting '%s' as focus", w->className());
+ w->setFocus();
+ rc = true;
+ break;
+ }
+ w = next ? d->m_tabOrderWidgets.next() : d->m_tabOrderWidgets.prev();
+ } while(w != currentWidget);
+
+ return rc;
+}
+
+void KEnterScheduleDlg::slotShowHelp(void)
+{
+ kapp->invokeHelp("details.schedules.entering");
+}
+
+
+#include "kenterscheduledlg.moc"
+
diff --git a/kmymoney2/dialogs/kenterscheduledlg.h b/kmymoney2/dialogs/kenterscheduledlg.h
new file mode 100644
index 0000000..0e14ad4
--- /dev/null
+++ b/kmymoney2/dialogs/kenterscheduledlg.h
@@ -0,0 +1,91 @@
+/***************************************************************************
+ kenterscheduledlg.h - description
+ -------------------
+ begin : Sat Apr 7 2007
+ copyright : (C) 2007 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KENTERSCHEDULEDLG_H
+#define KENTERSCHEDULEDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+class TransactionEditor;
+
+#include "../dialogs/kenterscheduledlgdecl.h"
+#include <kmymoney/mymoneyscheduled.h>
+#include <kmymoney/kmymoneyutils.h>
+
+/**
+ * @author Thomas Baumgart
+ */
+class KEnterScheduleDlg : public KEnterScheduleDlgDecl
+{
+ Q_OBJECT
+public:
+ KEnterScheduleDlg(QWidget *parent, const MyMoneySchedule& schedule);
+ ~KEnterScheduleDlg();
+
+ TransactionEditor* startEdit(void);
+ MyMoneyTransaction transaction(void);
+
+ /**
+ * Show (or hide) the extended dialog keys for 'Skip' and 'Ignore'
+ * depending on the value of the parameter @a visible which defaults
+ * to @a true.
+ */
+ void showExtendedKeys(bool visible = true);
+
+ /**
+ * Return the extended result code. Usage of the returned
+ * value only makes sense, once the dialog has been executed.
+ * Before execution it returns @a Cancel.
+ */
+ KMyMoneyUtils::EnterScheduleResultCodeE resultCode(void) const;
+
+protected:
+ /// Overridden for internal reasons. No API changes.
+ bool focusNextPrevChild(bool next);
+
+ /**
+ * This method returns the adjusts @a _date according to
+ * the setting of the schedule's weekend option.
+ */
+ QDate date(const QDate& _date) const;
+
+ void resizeEvent(QResizeEvent* ev);
+
+public slots:
+ int exec(void);
+
+private slots:
+ void slotSetupSize(void);
+ void slotShowHelp(void);
+ void slotIgnore(void);
+ void slotSkip(void);
+
+private:
+ /// \internal d-pointer class.
+ class Private;
+ /// \internal d-pointer instance.
+ Private* const d;
+};
+
+#endif
diff --git a/kmymoney2/dialogs/kenterscheduledlgdecl.ui b/kmymoney2/dialogs/kenterscheduledlgdecl.ui
new file mode 100644
index 0000000..3efed94
--- /dev/null
+++ b/kmymoney2/dialogs/kenterscheduledlgdecl.ui
@@ -0,0 +1,330 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KEnterScheduleDlgDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KEnterScheduleDlgDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>679</width>
+ <height>410</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Enter Schedule</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox1</cstring>
+ </property>
+ <property name="title">
+ <string>Schedule Details</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel5</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>70</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Name:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>m_scheduleName</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="2">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>70</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Type:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="3">
+ <property name="name">
+ <cstring>m_type</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="KMyMoneyRegister::Register">
+ <column>
+ <property name="text">
+ <string>Security</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Details</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>C</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Payment</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Deposit</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Quantity</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Price</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Value</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Balance</string>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>m_register</cstring>
+ </property>
+ <property name="numRows">
+ <number>0</number>
+ </property>
+ <property name="numCols">
+ <number>12</number>
+ </property>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>frame4</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>Panel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="KMyMoneyTransactionForm::TransactionForm">
+ <property name="name">
+ <cstring>m_form</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>5</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="numRows">
+ <number>5</number>
+ </property>
+ <property name="numCols">
+ <number>1</number>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="Line">
+ <property name="name">
+ <cstring>line2</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonHelp</cstring>
+ </property>
+ <property name="text">
+ <string>Help</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>190</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>Enter</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Enter the transaction and advance the next due date of this schedule to the next payment date.</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonSkip</cstring>
+ </property>
+ <property name="text">
+ <string>Skip</string>
+ </property>
+ <property name="isDragEnabled" stdset="0">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Do not enter the transaction but advance the next due date of this schedule to the next payment date.</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonIgnore</cstring>
+ </property>
+ <property name="text">
+ <string>Ignore</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Do not enter or skip payments for this schedule but continue with the next schedule.</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Cancel processing of schedule entry.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>KEnterScheduleDlgDecl</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>KEnterScheduleDlgDecl</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/kequitypriceupdatedlg.cpp b/kmymoney2/dialogs/kequitypriceupdatedlg.cpp
new file mode 100644
index 0000000..4111bfa
--- /dev/null
+++ b/kmymoney2/dialogs/kequitypriceupdatedlg.cpp
@@ -0,0 +1,588 @@
+/***************************************************************************
+ kequitypriceupdatedlg.cpp - description
+ -------------------
+ begin : Mon Sep 1 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ Ace Jones <acejones@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlabel.h>
+#include <qpushbutton.h>
+#include <qradiobutton.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qtimer.h>
+#include <qlayout.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kpushbutton.h>
+#include <ktextedit.h>
+#include <klistview.h>
+#include <kdebug.h>
+#include <kprogress.h>
+#include <kglobal.h>
+#include <kconfig.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kequitypriceupdatedlg.h"
+#include "../mymoney/mymoneyfile.h"
+#include "../mymoney/mymoneysecurity.h"
+#include "../mymoney/mymoneyprice.h"
+#include "../kmymoneyglobalsettings.h"
+
+#define SYMBOL_COL 0
+#define NAME_COL 1
+#define PRICE_COL 2
+#define DATE_COL 3
+#define ID_COL 4
+#define SOURCE_COL 5
+
+KEquityPriceUpdateDlg::KEquityPriceUpdateDlg(QWidget *parent, const QString& securityId) :
+ KEquityPriceUpdateDlgDecl(parent),
+ m_fUpdateAll(false)
+{
+ lvEquityList->setRootIsDecorated(false);
+ lvEquityList->setColumnText(0, i18n("Symbol"));
+ lvEquityList->addColumn(i18n("Symbol"));
+ lvEquityList->addColumn(i18n("Name"),125);
+ lvEquityList->addColumn(i18n("Price"));
+ lvEquityList->addColumn(i18n("Date"));
+
+ // This is a "get it up and running" hack. Will replace this in the future.
+ lvEquityList->addColumn("ID");
+ lvEquityList->addColumn("Source");
+ lvEquityList->setColumnWidth(ID_COL, 0);
+
+ lvEquityList->setMultiSelection(true);
+ lvEquityList->setColumnWidthMode(SYMBOL_COL, QListView::Maximum);
+ lvEquityList->setColumnWidthMode(ID_COL, QListView::Manual);
+ lvEquityList->setAllColumnsShowFocus(true);
+
+ btnUpdateAll->setEnabled(false);
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ //
+ // Add each price pair that we know about
+ //
+
+ // send in securityId == "XXX YYY" to get a single-shot update for XXX to YYY.
+ // for consistency reasons, this accepts the same delimiters as WebPriceQuote::launch()
+ QRegExp splitrx("([0-9a-z\\.]+)[^a-z0-9]+([0-9a-z\\.]+)",false /*case sensitive*/);
+ MyMoneySecurityPair currencyIds;
+ if ( splitrx.search(securityId) != -1 )
+ currencyIds = MyMoneySecurityPair(splitrx.cap(1).utf8(),splitrx.cap(2).utf8());
+
+ MyMoneyPriceList prices = file->priceList();
+ for(MyMoneyPriceList::ConstIterator it_price = prices.begin(); it_price != prices.end(); ++it_price)
+ {
+ const MyMoneySecurityPair& pair = it_price.key();
+ if ( file->security( pair.first ).isCurrency() && ( securityId.isEmpty() || ( pair == currencyIds ) ) )
+ {
+ const MyMoneyPriceEntries& entries = (*it_price);
+ if(entries.count() > 0 && entries.begin().key() <= QDate::currentDate()) {
+ addPricePair(pair);
+ btnUpdateAll->setEnabled(true);
+ }
+ }
+ }
+
+ //
+ // Add each investment
+ //
+
+ QValueList<MyMoneySecurity> securities = file->securityList();
+ for(QValueList<MyMoneySecurity>::ConstIterator it = securities.begin(); it != securities.end(); ++it)
+ {
+ if ( !(*it).isCurrency()
+ && ( securityId.isEmpty() || ( (*it).id() == securityId ) )
+ && !(*it).value("kmm-online-source").isEmpty()
+ )
+ {
+ addInvestment(*it);
+ btnUpdateAll->setEnabled(true);
+ }
+ }
+
+ // if list is empty, add the request price pair
+ if(lvEquityList->firstChild() == 0) {
+ addPricePair(currencyIds, true);
+ }
+
+ connect(btnOK, SIGNAL(clicked()), this, SLOT(accept()));
+ connect(btnCancel, SIGNAL(clicked()), this, SLOT(reject()));
+ connect(btnUpdateSelected, SIGNAL(clicked()), this, SLOT(slotUpdateSelectedClicked()));
+ connect(btnUpdateAll, SIGNAL(clicked()), this, SLOT(slotUpdateAllClicked()));
+
+ connect(&m_webQuote,SIGNAL(quote(const QString&, const QString&,const QDate&, const double&)),
+ this,SLOT(slotReceivedQuote(const QString&, const QString&,const QDate&, const double&)));
+ connect(&m_webQuote,SIGNAL(failed(const QString&, const QString&)),
+ this,SLOT(slotQuoteFailed(const QString&, const QString&)));
+ connect(&m_webQuote,SIGNAL(status(const QString&)),
+ this,SLOT(logStatusMessage(const QString&)));
+ connect(&m_webQuote,SIGNAL(error(const QString&)),
+ this,SLOT(logErrorMessage(const QString&)));
+
+ connect(lvEquityList, SIGNAL(selectionChanged()), this, SLOT(slotUpdateSelection()));
+
+ // Not implemented yet.
+ btnConfigure->hide();
+ //connect(btnConfigure, SIGNAL(clicked()), this, SLOT(slotConfigureClicked()));
+
+ if ( !securityId.isEmpty() )
+ {
+ btnUpdateSelected->hide();
+ btnUpdateAll->hide();
+ // delete layout1;
+
+ QTimer::singleShot(100,this,SLOT(slotUpdateAllClicked()));
+ }
+
+ // Hide OK button until we have received the first update
+ btnOK->setEnabled(false);
+
+ slotUpdateSelection();
+
+ // previous versions of this dialog allowed to store a "Don't ask again" switch.
+ // Since we don't support it anymore, we just get rid of it
+ KConfig* config = KGlobal::config();
+ config->setGroup("Notification Messages");
+ config->deleteEntry("KEquityPriceUpdateDlg::slotQuoteFailed::Price Update Failed");
+}
+
+KEquityPriceUpdateDlg::~KEquityPriceUpdateDlg()
+{
+
+}
+
+void KEquityPriceUpdateDlg::addPricePair(const MyMoneySecurityPair& pair, bool dontCheckExistance)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ QString symbol = QString("%1 > %2").arg(pair.first,pair.second);
+ QString id = QString("%1 %2").arg(pair.first,pair.second);
+ if ( ! lvEquityList->findItem(id,ID_COL,Qt::ExactMatch) )
+ {
+ MyMoneyPrice pr = file->price(pair.first,pair.second);
+ if(pr.source() != "KMyMoney") {
+ bool keep = true;
+ if((pair.first == file->baseCurrency().id())
+ || (pair.second == file->baseCurrency().id())) {
+ const QString& foreignCurrency = file->foreignCurrency(pair.first, pair.second);
+ // check that the foreign currency is still in use
+ QValueList<MyMoneyAccount>::const_iterator it_a;
+ QValueList<MyMoneyAccount> list;
+ file->accountList(list);
+ for(it_a = list.begin(); !dontCheckExistance && it_a != list.end(); ++it_a) {
+ // if it's an account denominated in the foreign currency
+ // keep it
+ if(((*it_a).currencyId() == foreignCurrency)
+ && !(*it_a).isClosed())
+ break;
+ // if it's an investment traded in the foreign currency
+ // keep it
+ if((*it_a).isInvest() && !(*it_a).isClosed()) {
+ MyMoneySecurity sec = file->security((*it_a).currencyId());
+ if(sec.tradingCurrency() == foreignCurrency)
+ break;
+ }
+ }
+ // if it is in use, it_a is not equal to list.end()
+ if(it_a == list.end() && !dontCheckExistance)
+ keep = false;
+ }
+
+ if(keep) {
+ KListViewItem* item = new KListViewItem(lvEquityList,
+ symbol,
+ i18n("%1 units in %2").arg(pair.first,pair.second));
+ if(pr.isValid()) {
+ item->setText(PRICE_COL, pr.rate(pair.second).formatMoney(file->currency(pair.second).tradingSymbol(), KMyMoneyGlobalSettings::pricePrecision()));
+ item->setText(DATE_COL, pr.date().toString(Qt::ISODate));
+ }
+ item->setText(ID_COL,id);
+ item->setText(SOURCE_COL, "Yahoo Currency"); // This string value should not be localized
+ }
+ }
+ }
+}
+
+void KEquityPriceUpdateDlg::addInvestment(const MyMoneySecurity& inv)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ QString symbol = inv.tradingSymbol();
+ QString id = inv.id();
+ if ( ! lvEquityList->findItem(id, ID_COL, Qt::ExactMatch) )
+ {
+ // check that the security is still in use
+ QValueList<MyMoneyAccount>::const_iterator it_a;
+ QValueList<MyMoneyAccount> list;
+ file->accountList(list);
+ for(it_a = list.begin(); it_a != list.end(); ++it_a) {
+ if((*it_a).isInvest()
+ && ((*it_a).currencyId() == inv.id())
+ && !(*it_a).isClosed())
+ break;
+ }
+ // if it is in use, it_a is not equal to list.end()
+ if(it_a != list.end()) {
+ KListViewItem* item = new KListViewItem(lvEquityList, symbol, inv.name());
+ MyMoneySecurity currency = file->currency(inv.tradingCurrency());
+ MyMoneyPrice pr = file->price(id.utf8(), inv.tradingCurrency());
+ if(pr.isValid()) {
+ item->setText(PRICE_COL, pr.rate(currency.id()).formatMoney(currency.tradingSymbol(), KMyMoneyGlobalSettings::pricePrecision()));
+ item->setText(DATE_COL, pr.date().toString(Qt::ISODate));
+ }
+ item->setText(ID_COL,id);
+ if (inv.value("kmm-online-quote-system") == "Finance::Quote")
+ item->setText(SOURCE_COL, QString("Finance::Quote %1").arg( inv.value("kmm-online-source")));
+ else
+ item->setText(SOURCE_COL, inv.value("kmm-online-source"));
+
+ // If this investment is denominated in a foreign currency, ensure that
+ // the appropriate price pair is also on the list
+
+ if ( currency.id() != file->baseCurrency().id() )
+ {
+ addPricePair(MyMoneySecurityPair(currency.id(),file->baseCurrency().id()));
+ }
+ }
+ }
+}
+
+void KEquityPriceUpdateDlg::logErrorMessage(const QString& message)
+{
+ logStatusMessage(QString("<font color=\"red\"><b>") + message + QString("</b></font>"));
+}
+
+void KEquityPriceUpdateDlg::logStatusMessage(const QString& message)
+{
+ lbStatus->append(message);
+}
+
+MyMoneyPrice KEquityPriceUpdateDlg::price(const QString& id) const
+{
+ MyMoneyPrice price;
+ QListViewItem* item;
+
+ if((item = lvEquityList->findItem(id, ID_COL, Qt::ExactMatch)) != 0) {
+ MyMoneyMoney rate(item->text(PRICE_COL));
+ if ( !rate.isZero() )
+ {
+ QString id = item->text(ID_COL).utf8();
+
+ // if the ID has a space, then this is TWO ID's, so it's a currency quote
+ if ( QString(id).contains(" ") )
+ {
+ QStringList ids = QStringList::split(" ",QString(id));
+ QString fromid = ids[0].utf8();
+ QString toid = ids[1].utf8();
+ price = MyMoneyPrice(fromid,toid,QDate().fromString(item->text(DATE_COL), Qt::ISODate),rate,item->text(SOURCE_COL));
+ }
+ else
+ // otherwise, it's a security quote
+ {
+ MyMoneySecurity security = MyMoneyFile::instance()->security(id);
+ price = MyMoneyPrice(id, security.tradingCurrency(), QDate().fromString(item->text(DATE_COL), Qt::ISODate), rate, item->text(SOURCE_COL));
+ }
+ }
+ }
+ return price;
+}
+
+void KEquityPriceUpdateDlg::storePrices(void)
+{
+ // update the new prices into the equities
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+ QValueList<MyMoneySecurity> equities = file->securityList();
+
+ QListViewItem* item = lvEquityList->firstChild();
+ MyMoneyFileTransaction ft;
+ QString name;
+ try {
+ while ( item )
+ {
+ // turn on signals before we modify the last entry in the list
+ MyMoneyFile::instance()->blockSignals(item->nextSibling() != 0);
+
+ MyMoneyMoney rate(item->text(PRICE_COL));
+ if ( !rate.isZero() )
+ {
+ QString id = item->text(ID_COL).utf8();
+
+ // if the ID has a space, then this is TWO ID's, so it's a currency quote
+ if ( QString(id).contains(" ") )
+ {
+ QStringList ids = QStringList::split(" ",QString(id));
+ QString fromid = ids[0].utf8();
+ QString toid = ids[1].utf8();
+ name = QString("%1 --> %2").arg(fromid).arg(toid);
+ MyMoneyPrice price(fromid,toid,QDate().fromString(item->text(DATE_COL), Qt::ISODate),rate,item->text(SOURCE_COL));
+ file->addPrice(price);
+ }
+ else
+ // otherwise, it's a security quote
+ {
+ MyMoneySecurity security = MyMoneyFile::instance()->security(id);
+ name = security.name();
+ MyMoneyPrice price(id, security.tradingCurrency(), QDate().fromString(item->text(DATE_COL), Qt::ISODate), rate, item->text(SOURCE_COL));
+
+ // TODO (Ace) Better handling of the case where there is already a price
+ // for this date. Currently, it just overrides the old value. Really it
+ // should check to see if the price is the same and prompt the user.
+ MyMoneyFile::instance()->addPrice(price);
+ }
+
+ }
+ item = item->nextSibling();
+ }
+ ft.commit();
+
+ } catch(MyMoneyException *e) {
+ qDebug("Unable to add price information for %s", name.data());
+ delete e;
+ }
+}
+
+void KEquityPriceUpdateDlg::slotUpdateSelection(void)
+{
+ btnUpdateSelected->setEnabled(false);
+
+ QListViewItem* item = lvEquityList->firstChild();
+ while ( item && !item->isSelected())
+ item = item->nextSibling();
+
+ if(item)
+ btnUpdateSelected->setEnabled(true);
+}
+
+void KEquityPriceUpdateDlg::slotUpdateSelectedClicked(void)
+{
+ QListViewItem* item = lvEquityList->firstChild();
+ int skipCnt = 1;
+ while ( item && !item->isSelected())
+ {
+ skipCnt++;
+ item = item->nextSibling();
+ }
+
+ if(item) {
+ prgOnlineProgress->setTotalSteps(1+lvEquityList->childCount());
+ prgOnlineProgress->setProgress(skipCnt);
+ m_webQuote.launch(item->text(SYMBOL_COL),item->text(ID_COL),item->text(SOURCE_COL));
+ }
+ else
+ logErrorMessage("No security selected.");
+}
+
+void KEquityPriceUpdateDlg::slotUpdateAllClicked(void)
+{
+ QListViewItem* item = lvEquityList->firstChild();
+ if ( item )
+ {
+ prgOnlineProgress->setTotalSteps(1+lvEquityList->childCount());
+ prgOnlineProgress->setProgress(1);
+ m_fUpdateAll = true;
+ m_webQuote.launch(item->text(SYMBOL_COL),item->text(ID_COL),item->text(SOURCE_COL));
+ }
+ else
+ logErrorMessage("Security list is empty.");
+}
+
+void KEquityPriceUpdateDlg::slotQuoteFailed(const QString& _id, const QString& _symbol)
+{
+ QListViewItem* item = lvEquityList->findItem(_id,ID_COL,Qt::ExactMatch);
+
+ // Give the user some options
+ int result;
+ if(_id.contains(" ")) {
+ result = KMessageBox::warningContinueCancel(this, i18n("Failed to retrieve an exchange rate for %1 from %2. It will be skipped this time.").arg(_symbol, item->text(SOURCE_COL)), i18n("Price Update Failed"));
+ } else {
+ result = KMessageBox::questionYesNoCancel(this, QString("<qt>%1</qt>").arg(i18n("Failed to retrieve a quote for %1 from %2. Press <b>No</b> to remove the online price source from this security permanently, <b>Yes</b> to continue updating this security during future price updates or <b>Cancel</b> to stop the current update operation.").arg(_symbol, item->text(SOURCE_COL))), i18n("Price Update Failed"), KStdGuiItem::yes(), KStdGuiItem::no());
+ }
+
+ if ( result == KMessageBox::No )
+ {
+ // Disable price updates for this security
+
+ MyMoneyFileTransaction ft;
+ try {
+ // Get this security (by ID)
+ MyMoneySecurity security = MyMoneyFile::instance()->security(_id.utf8());
+
+ // Set the quote source to blank
+ security.setValue("kmm-online-source",QString());
+ security.setValue("kmm-online-quote-system",QString());
+
+ // Re-commit the security
+ MyMoneyFile::instance()->modifySecurity(security);
+ ft.commit();
+ } catch(MyMoneyException* e) {
+ KMessageBox::error(this, QString("<qt>")+i18n("Cannot update security <b>%1</b>: %2").arg(_symbol, e->what())+QString("</qt>"), i18n("Price Update Failed"));
+ delete e;
+ }
+ }
+
+ // As long as the user doesn't want to cancel, move on!
+ if ( result != KMessageBox::Cancel )
+ {
+ QListViewItem* next = NULL;
+ prgOnlineProgress->advance(1);
+ item->listView()->setSelected(item, false);
+
+ // launch the NEXT one ... in case of m_fUpdateAll == false, we
+ // need to parse the list to find the next selected one
+ next = item->nextSibling();
+ if ( !m_fUpdateAll )
+ {
+ while(next && !next->isSelected())
+ {
+ prgOnlineProgress->advance(1);
+ next = next->nextSibling();
+ }
+ }
+ if (next)
+ {
+ m_webQuote.launch(next->text(SYMBOL_COL),next->text(ID_COL),next->text(SOURCE_COL));
+ }
+ else
+ {
+ finishUpdate();
+ }
+ }
+ else
+ {
+ finishUpdate();
+ }
+}
+
+void KEquityPriceUpdateDlg::slotReceivedQuote(const QString& _id, const QString& _symbol,const QDate& _date, const double& _price)
+{
+ QListViewItem* item = lvEquityList->findItem(_id,ID_COL,Qt::ExactMatch);
+ QListViewItem* next = NULL;
+
+ if ( item )
+ {
+ if ( _price > 0.0f && _date.isValid() )
+ {
+ QDate date = _date;
+ if ( date > QDate::currentDate() )
+ date = QDate::currentDate();
+
+ double price = _price;
+ QString id = _id.utf8();
+ MyMoneySecurity sec;
+ if ( _id.contains(" ") == 0) {
+ MyMoneySecurity security = MyMoneyFile::instance()->security(id);
+ QString factor = security.value("kmm-online-factor");
+ if(!factor.isEmpty()) {
+ price *= MyMoneyMoney(factor).toDouble();
+ }
+ try {
+ sec = MyMoneyFile::instance()->security(id);
+ sec = MyMoneyFile::instance()->security(sec.tradingCurrency());
+ } catch(MyMoneyException *e) {
+ sec = MyMoneySecurity();
+ delete e;
+ }
+
+ } else {
+ QRegExp splitrx("([0-9a-z\\.]+)[^a-z0-9]+([0-9a-z\\.]+)",false /*case sensitive*/);
+ if ( splitrx.search(_id) != -1 ) {
+ try {
+ sec = MyMoneyFile::instance()->security(splitrx.cap(2).utf8());
+ } catch(MyMoneyException *e) {
+ sec = MyMoneySecurity();
+ delete e;
+ }
+ }
+ }
+ item->setText(PRICE_COL, KGlobal::locale()->formatMoney(price, sec.tradingSymbol(), KMyMoneyGlobalSettings::pricePrecision()));
+ item->setText(DATE_COL, date.toString(Qt::ISODate));
+ logStatusMessage(i18n("Price for %1 updated (id %2)").arg(_symbol,_id));
+ // make sure to make OK button available
+ btnOK->setEnabled(true);
+ }
+ else
+ {
+ logErrorMessage(i18n("Received an invalid price for %1, unable to update.").arg(_symbol));
+ }
+
+ prgOnlineProgress->advance(1);
+ item->listView()->setSelected(item, false);
+
+ // launch the NEXT one ... in case of m_fUpdateAll == false, we
+ // need to parse the list to find the next selected one
+ next = item->nextSibling();
+ if ( !m_fUpdateAll )
+ {
+ while(next && !next->isSelected())
+ {
+ prgOnlineProgress->advance(1);
+ next = next->nextSibling();
+ }
+ }
+ }
+ else
+ {
+ logErrorMessage(i18n("Received a price for %1 (id %2), but this symbol is not on the list! Aborting entire update.").arg(_symbol,_id));
+ }
+
+ if (next)
+ {
+ m_webQuote.launch(next->text(SYMBOL_COL),next->text(ID_COL),next->text(SOURCE_COL));
+ }
+ else
+ {
+ finishUpdate();
+ }
+}
+
+void KEquityPriceUpdateDlg::finishUpdate(void)
+{
+ // we've run past the end, reset to the default value.
+ m_fUpdateAll = false;
+ // force progress bar to show 100%
+ prgOnlineProgress->setProgress(prgOnlineProgress->totalSteps());
+}
+
+// Make sure, that these definitions are only used within this file
+// this does not seem to be necessary, but when building RPMs the
+// build option 'final' is used and all CPP files are concatenated.
+// So it could well be, that in another CPP file these definitions
+// are also used.
+#undef SYMBOL_COL
+#undef NAME_COL
+#undef PRICE_COL
+#undef DATE_COL
+#undef ID_COL
+#undef SOURCE_COL
+
+#include "kequitypriceupdatedlg.moc"
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/dialogs/kequitypriceupdatedlg.h b/kmymoney2/dialogs/kequitypriceupdatedlg.h
new file mode 100644
index 0000000..7dbc6a5
--- /dev/null
+++ b/kmymoney2/dialogs/kequitypriceupdatedlg.h
@@ -0,0 +1,81 @@
+/***************************************************************************
+ kequitypriceupdatedlg.h - description
+ -------------------
+ begin : Tuesday June 22nd, 2004
+ copyright : (C) 2000-2004 by Kevin Tambascio
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KEQUITYPRICEUPDATEDIALOG_H
+#define KEQUITYPRICEUPDATEDIALOG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+#include <qpair.h>
+#include <qdatastream.h>
+class QListViewItem;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kprocess.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../converter/webpricequote.h"
+#include "../mymoney/mymoneysecurity.h"
+#include "../mymoney/mymoneyprice.h"
+#include "../dialogs/kequitypriceupdatedlgdecl.h"
+
+/**
+ * @author Kevin Tambascio & Ace Jones
+ */
+
+class KEquityPriceUpdateDlg : public KEquityPriceUpdateDlgDecl
+{
+ Q_OBJECT
+public:
+ KEquityPriceUpdateDlg(QWidget *parent, const QString& securityId = QString());
+ ~KEquityPriceUpdateDlg();
+ void storePrices(void);
+ MyMoneyPrice price(const QString& id) const;
+
+protected slots:
+ void slotUpdateSelectedClicked(void);
+ void slotUpdateAllClicked(void);
+ void slotUpdateSelection(void);
+
+ void logStatusMessage(const QString&);
+ void logErrorMessage(const QString&);
+ void slotReceivedQuote(const QString&, const QString&,const QDate&, const double&);
+ void slotQuoteFailed(const QString& _id, const QString& _symbol);
+
+protected:
+ void addPricePair(const MyMoneySecurityPair& pair, bool dontCheckExistance = false);
+ void addInvestment(const MyMoneySecurity& inv);
+ void finishUpdate(void);
+
+private:
+ bool m_fUpdateAll;
+ WebPriceQuote m_webQuote;
+};
+
+#endif
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/dialogs/kequitypriceupdatedlgdecl.ui b/kmymoney2/dialogs/kequitypriceupdatedlgdecl.ui
new file mode 100644
index 0000000..a06c44d
--- /dev/null
+++ b/kmymoney2/dialogs/kequitypriceupdatedlgdecl.ui
@@ -0,0 +1,179 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KEquityPriceUpdateDlgDecl</class>
+<author>Kevin Tambascio &lt;ktambascio@users.sourceforge.net&gt;</author>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>kequitypriceupdatedlgdecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>537</width>
+ <height>482</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Update Stock and Currency Prices</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KListView">
+ <property name="name">
+ <cstring>lvEquityList</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>350</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>StyledPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Plain</enum>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="showSortIndicator">
+ <bool>true</bool>
+ </property>
+ <property name="itemsMovable">
+ <bool>false</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>List of known Equities, and the date they were last updated on.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>btnConfigure</cstring>
+ </property>
+ <property name="text">
+ <string>Configure</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>btnUpdateAll</cstring>
+ </property>
+ <property name="text">
+ <string>Update All</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>btnUpdateSelected</cstring>
+ </property>
+ <property name="text">
+ <string>Update Selected</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Status:</string>
+ </property>
+ </widget>
+ <widget class="KTextEdit">
+ <property name="name">
+ <cstring>lbStatus</cstring>
+ </property>
+ <property name="textFormat">
+ <enum>LogText</enum>
+ </property>
+ </widget>
+ <widget class="KProgress">
+ <property name="name">
+ <cstring>prgOnlineProgress</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>91</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>btnOK</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>btnCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>2</number>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/kexportdlg.cpp b/kmymoney2/dialogs/kexportdlg.cpp
new file mode 100644
index 0000000..c00e3cf
--- /dev/null
+++ b/kmymoney2/dialogs/kexportdlg.cpp
@@ -0,0 +1,284 @@
+/***************************************************************************
+ kexportdlg.cpp - description
+ -------------------
+ begin : Tue May 22 2001
+ copyright : (C) 2001 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@ctv.es>
+ Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Headers
+
+#include <qlineedit.h>
+#include <qlabel.h>
+#include <qpixmap.h>
+
+// ----------------------------------------------------------------------------
+// KDE Headers
+
+#include <kglobal.h>
+#include <klocale.h>
+#if QT_VERSION > 300
+#include <kstandarddirs.h>
+#else
+#include <kstddirs.h>
+#endif
+#include <kmessagebox.h>
+#include <kfiledialog.h>
+#include <kpushbutton.h>
+#include <kiconloader.h>
+
+// ----------------------------------------------------------------------------
+// Project Headers
+
+#include "kexportdlg.h"
+#include "../mymoney/mymoneycategory.h"
+#include "../dialogs/mymoneyqifprofileeditor.h"
+#include "../mymoney/mymoneyfile.h"
+#include "../widgets/kmymoneyaccountcombo.h"
+#include "../kmymoneyutils.h"
+
+KExportDlg::KExportDlg(QWidget *parent)
+ : KExportDlgDecl(parent, 0, true)
+{
+ // Set (almost) all the last used options
+ readConfig();
+
+ loadProfiles(true);
+ loadAccounts();
+
+ // load button icons
+ KIconLoader* il = KGlobal::iconLoader();
+ m_qbuttonCancel->setGuiItem(KStdGuiItem::cancel());
+
+ KGuiItem okButtenItem( i18n( "&Export" ),
+ QIconSet(il->loadIcon("fileexport", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Start operation"),
+ i18n("Use this to start the export operation"));
+ m_qbuttonOk->setGuiItem(okButtenItem);
+
+ KGuiItem browseButtenItem( i18n( "&Browse..." ),
+ QIconSet(il->loadIcon("fileopen", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Select filename"),
+ i18n("Use this to select a filename to export to"));
+ m_qbuttonBrowse->setGuiItem(browseButtenItem);
+
+ KGuiItem newButtenItem( i18n( "&New..." ),
+ QIconSet(il->loadIcon("filenew", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Create a new profile"),
+ i18n("Use this to open the profile editor"));
+ m_profileEditorButton->setGuiItem(newButtenItem);
+
+
+ // connect the buttons to their functionality
+ connect(m_qbuttonBrowse, SIGNAL( clicked() ), this, SLOT( slotBrowse() ) );
+ connect(m_profileEditorButton, SIGNAL(clicked()), this, SLOT(slotNewProfile()));
+ connect(m_qbuttonOk, SIGNAL(clicked()), this, SLOT(slotOkClicked()));
+ connect(m_qbuttonCancel, SIGNAL(clicked()), this, SLOT(reject()));
+
+ // connect the change signals to the check slot and perform initial check
+ connect(m_qlineeditFile, SIGNAL(textChanged(const QString&)), this, SLOT(checkData()));
+ connect(m_qcheckboxAccount, SIGNAL(toggled(bool)), this, SLOT(checkData()));
+ connect(m_qcheckboxCategories, SIGNAL(toggled(bool)), this, SLOT(checkData()));
+ connect(m_accountComboBox, SIGNAL(accountSelected(const QString&)), this, SLOT(checkData(const QString&)));
+ connect(m_profileComboBox, SIGNAL(highlighted(int)), this, SLOT(checkData()));
+ connect(m_kmymoneydateStart, SIGNAL(dateChanged(const QDate&)), this, SLOT(checkData()));
+ connect(m_kmymoneydateEnd, SIGNAL(dateChanged(const QDate&)), this, SLOT(checkData()));
+
+ checkData(QString());
+}
+
+KExportDlg::~KExportDlg()
+{
+}
+
+void KExportDlg::slotBrowse()
+{
+ QString newName(KFileDialog::getSaveFileName(QString::null,"*.QIF"));
+ KMyMoneyUtils::appendCorrectFileExt(newName, QString("qif"));
+ if (!newName.isEmpty())
+ m_qlineeditFile->setText(newName);
+}
+
+void KExportDlg::slotNewProfile(void)
+{
+ MyMoneyQifProfileEditor* editor = new MyMoneyQifProfileEditor(true, this, "QIF Profile Editor");
+ if(editor->exec()) {
+ m_profileComboBox->setCurrentText(editor->selectedProfile());
+ loadProfiles();
+ }
+ delete editor;
+}
+
+void KExportDlg::loadProfiles(const bool selectLast)
+{
+ // Creating an editor object here makes sure that
+ // we have at least the default profile available
+ MyMoneyQifProfileEditor* edit = new MyMoneyQifProfileEditor(true, 0, 0);
+ edit->slotOk();
+ delete edit;
+
+ QString current = m_profileComboBox->currentText();
+
+ m_profileComboBox->clear();
+
+ QStringList list;
+ KConfig* config = KGlobal::config();
+ config->setGroup("Profiles");
+
+ list = config->readListEntry("profiles");
+ list.sort();
+ m_profileComboBox->insertStringList(list);
+
+ if(selectLast == true) {
+ config->setGroup("Last Use Settings");
+ current = config->readEntry("KExportDlg_LastProfile");
+ }
+
+ m_profileComboBox->setCurrentItem(0);
+ if(list.contains(current) > 0)
+ m_profileComboBox->setCurrentText(current);
+}
+
+void KExportDlg::slotOkClicked()
+{
+ // Make sure we save the last used settings for use next time,
+ writeConfig();
+ accept();
+}
+
+void KExportDlg::readConfig(void)
+{
+ KConfig *kconfig = KGlobal::config();
+ kconfig->setGroup("Last Use Settings");
+ m_qlineeditFile->setText(kconfig->readEntry("KExportDlg_LastFile"));
+ m_qcheckboxAccount->setChecked(kconfig->readBoolEntry("KExportDlg_AccountOpt", true));
+ m_qcheckboxCategories->setChecked(kconfig->readBoolEntry("KExportDlg_CatOpt", true));
+ m_kmymoneydateStart->setDate(kconfig->readDateTimeEntry("KExportDlg_StartDate").date());
+ m_kmymoneydateEnd->setDate(kconfig->readDateTimeEntry("KExportDlg_EndDate").date());
+ // m_profileComboBox is loaded in loadProfiles(), so we don't worry here
+ // m_accountComboBox is loaded in loadAccounts(), so we don't worry here
+}
+
+void KExportDlg::writeConfig(void)
+{
+ KConfig *kconfig = KGlobal::config();
+ kconfig->setGroup("Last Use Settings");
+ kconfig->writeEntry("KExportDlg_LastFile", m_qlineeditFile->text());
+ kconfig->writeEntry("KExportDlg_AccountOpt", m_qcheckboxAccount->isChecked());
+ kconfig->writeEntry("KExportDlg_CatOpt", m_qcheckboxCategories->isChecked());
+ kconfig->writeEntry("KExportDlg_StartDate", QDateTime(m_kmymoneydateStart->date()));
+ kconfig->writeEntry("KExportDlg_EndDate", QDateTime(m_kmymoneydateEnd->date()));
+ kconfig->writeEntry("KExportDlg_LastProfile", m_profileComboBox->currentText());
+ kconfig->sync();
+}
+
+void KExportDlg::checkData(const QString& accountId)
+{
+ bool okEnabled = false;
+
+ if(!m_qlineeditFile->text().isEmpty()) {
+ QString strFile(m_qlineeditFile->text());
+ if(KMyMoneyUtils::appendCorrectFileExt(strFile, QString("qif")))
+ m_qlineeditFile->setText(strFile);
+ }
+
+ MyMoneyAccount account;
+ if(!accountId.isEmpty()) {
+ MyMoneyFile* file = MyMoneyFile::instance();
+ account = file->account(accountId);
+ if(m_lastAccount != accountId) {
+ MyMoneyTransactionFilter filter(accountId);
+ QValueList<MyMoneyTransaction> list = file->transactionList(filter);
+ QValueList<MyMoneyTransaction>::Iterator it;
+
+ if(!list.isEmpty()) {
+ it = list.begin();
+ m_kmymoneydateStart->loadDate((*it).postDate());
+ it = list.end();
+ --it;
+ m_kmymoneydateEnd->loadDate((*it).postDate());
+ }
+ m_lastAccount = accountId;
+ m_accountComboBox->setSelected(account);
+ }
+ }
+
+ if(!m_qlineeditFile->text().isEmpty()
+ && m_accountComboBox->selectedAccounts().count() != 0
+ && !m_profileComboBox->currentText().isEmpty()
+ && m_kmymoneydateStart->date() <= m_kmymoneydateEnd->date()
+ && (m_qcheckboxAccount->isChecked() || m_qcheckboxCategories->isChecked()))
+ okEnabled = true;
+
+ m_qbuttonOk->setEnabled(okEnabled);
+}
+
+void KExportDlg::loadAccounts(void)
+{
+/*
+ QStringList strList;
+
+ try {
+ MyMoneyFile *file = MyMoneyFile::instance();
+
+ // read all account items from the MyMoneyFile objects and add them to the listbox
+ addCategories(strList, file->liability().id(), QString());
+ addCategories(strList, file->asset().id(), QString());
+
+ } catch (MyMoneyException *e) {
+ qDebug("Exception '%s' thrown in %s, line %ld caught in KExportDlg::loadAccounts:%d",
+ e->what().latin1(), e->file().latin1(), e->line(), __LINE__);
+ delete e;
+ }
+*/
+ m_accountComboBox->loadList((KMyMoneyUtils::categoryTypeE)(KMyMoneyUtils::asset | KMyMoneyUtils::liability));
+
+/*
+ m_accountComboBox->setCurrentItem(0);
+ if(strList.contains(current) > 0)
+ m_accountComboBox->setCurrentText(current);
+*/
+}
+
+QString KExportDlg::accountId() const
+{
+ return m_lastAccount;
+}
+
+/*
+void KExportDlg::addCategories(QStringList& strList, const QString& id, const QString& leadIn) const
+{
+ MyMoneyFile *file = MyMoneyFile::instance();
+ QString name;
+
+ MyMoneyAccount account = file->account(id);
+
+ QStringList accList = account.accountList();
+ QStringList::ConstIterator it_a;
+
+ for(it_a = accList.begin(); it_a != accList.end(); ++it_a) {
+ account = file->account(*it_a);
+ strList << leadIn + account.name();
+ addCategories(strList, *it_a, leadIn + account.name() + ":");
+ }
+}
+
+QString KExportDlg::accountId(const QString& account) const
+{
+ return MyMoneyFile::instance()->nameToAccount(account);
+}
+*/
+
+#include "kexportdlg.moc"
diff --git a/kmymoney2/dialogs/kexportdlg.h b/kmymoney2/dialogs/kexportdlg.h
new file mode 100644
index 0000000..cad5091
--- /dev/null
+++ b/kmymoney2/dialogs/kexportdlg.h
@@ -0,0 +1,180 @@
+/***************************************************************************
+ kexportdlg.h - description
+ -------------------
+ begin : Tue May 22 2001
+ copyright : (C) 2001 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@ctv.es>
+ Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+#ifndef KEXPORTDLG_H
+#define KEXPORTDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Headers
+
+#include <qstring.h>
+#include <qcheckbox.h>
+
+// ----------------------------------------------------------------------------
+// KDE Headers
+
+#include <kcombobox.h>
+
+// ----------------------------------------------------------------------------
+// Project Headers
+
+#include "../widgets/kmymoneydateinput.h"
+#include "../dialogs/kexportdlgdecl.h"
+
+/**
+ * This class is used to select the required user input to export
+ * a specified account to the popular QIF format.
+ * It relies upon the QIF file handling routines in MyMoneyQifProfile and
+ * MyMoneyQifWriter to do the actual writing of QIF files.
+ *
+ * It uses the global KConfig object to read and write the application
+ * settings.
+ *
+ * @see MyMoneyAccount, MyMoneyQifProfile, MyMoneyQifProfileEditor
+ *
+ * @author Felix Rodriguez, Michael Edwardes, Thomas Baumgart 2000-2003
+ *
+ * @short A class to select user data required to export a specified account to the popular QIF format.
+ **/
+class KExportDlg : public KExportDlgDecl
+{
+ Q_OBJECT
+
+public:
+ KExportDlg(QWidget *parent);
+ ~KExportDlg();
+
+ /**
+ * This method returns the filename entered into the edit field
+ *
+ * @return QString with filename
+ */
+ const QString filename(void) const { return m_qlineeditFile->text(); };
+
+ /**
+ * This method returns the account id that has been selected for export
+ *
+ * @return QString with account id
+ */
+ QString accountId(void) const;
+
+ /**
+ * This method returns the name of the profile that has been selected
+ * for the export operation
+ *
+ * @return QString with profile name
+ */
+ const QString profile(void) const { return m_profileComboBox->currentText(); };
+
+ /**
+ * This method returns the start date of the export dialog
+ */
+ const QDate startDate(void) const { return m_kmymoneydateStart->date(); };
+
+ /**
+ * This method returns the end date of the export dialog
+ */
+ const QDate endDate(void) const { return m_kmymoneydateEnd->date(); };
+
+ /**
+ * This method returns the state of the account checkbox
+ */
+ bool accountSelected(void) const { return m_qcheckboxAccount->isChecked(); };
+
+ /**
+ * This method returns the state of the account checkbox
+ */
+ bool categorySelected(void) const { return m_qcheckboxCategories->isChecked(); };
+
+protected slots:
+ /**
+ * Called when the user clicked on the OK button
+ */
+ void slotOkClicked();
+
+ /**
+ * Called when the user needs to browse the filesystem for a QIF file
+ */
+ void slotBrowse();
+
+ /**
+ * Called when the user needs a new profile
+ */
+ void slotNewProfile(void);
+
+ /**
+ * This slot checks whether all data is correct to enable
+ * the 'Export' button. The enable state of the 'Export' button
+ * is updated appropriately.
+ *
+ * If the parameter @p account is not empty, then it is assumed
+ * a new account is selected and the date fields will be loaded
+ * with the date of the first and last transaction within this
+ * account.
+ *
+ * @param account The id of the selected account.
+ */
+ void checkData(const QString& account = QString());
+
+private:
+ void readConfig(void);
+ void writeConfig(void);
+
+ /**
+ * This method loads the available profiles into
+ * the combo box. The parameter @p selectLast controls if
+ * the last profile used is preset or not. If preset is not
+ * selected, the current selection remains. If the currently selected
+ * text is not present in the list anymore, the first item will be
+ * selected.
+ *
+ * @param selectLast If true, the last used profile is selected. The
+ * default is false.
+ */
+ void loadProfiles(const bool selectLast = false);
+
+ /**
+ * This method is used to load the available accounts into the
+ * combo box for selection.
+ */
+ void loadAccounts(void);
+
+ /**
+ * This method is used to load an account hierarchy into a string list
+ *
+ * @param strList Reference to the string list to setup
+ * @param id Account id to add
+ * @param leadIn constant leadin to be added in front of the account name
+ */
+ // void addCategories(QStringList& strList, const QString& id, const QString& leadIn) const;
+
+ /**
+ * This method is used to return the account id of a given account name
+ *
+ * @param account name of the account
+ * @return the ID of the account will be returned.
+ * See MyMoneyFile::nameToAccount() for details.
+ */
+ // QString accountId(const QString& account) const;
+
+private:
+ QString m_lastAccount;
+};
+
+#endif
diff --git a/kmymoney2/dialogs/kexportdlgdecl.ui b/kmymoney2/dialogs/kexportdlgdecl.ui
new file mode 100644
index 0000000..5425210
--- /dev/null
+++ b/kmymoney2/dialogs/kexportdlgdecl.ui
@@ -0,0 +1,507 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>KExportDlgDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KExportDlgDecl</cstring>
+ </property>
+ <property name="caption">
+ <string>QIF Export</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout7</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="frameShape">
+ <enum>MShape</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>MShadow</enum>
+ </property>
+ <property name="text">
+ <string>From this dialog you are able to export transactions to a quicken compatible file, (known as a QIF file, because of the extension). Please enter the path to the QIF file or select it by clicking on the Browse button.
+
+You can choose the file's path, the account and the format of the QIF file (profile). Choose Account to export all the transactions between the specified dates or just categories. You can also limit the transactions that are exported by start and ending date. Once you have pressed the Export button a message box will appear when the export has completed detailing how many transactions, categories and payees were exported.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop|AlignLeft</set>
+ </property>
+ <property name="wordwrap" stdset="0">
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="Line">
+ <property name="name">
+ <cstring>Line2</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout45</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>lblFileExport</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>File to export to:</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>m_qlineeditFile</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>LineEditPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_qbuttonBrowse</cstring>
+ </property>
+ <property name="text">
+ <string>Browse...</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout11</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout10</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Account to export</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyAccountCombo">
+ <property name="name">
+ <cstring>m_accountComboBox</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout47</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>QIF Profile</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout46</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="KComboBox">
+ <property name="name">
+ <cstring>m_profileComboBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="duplicatesEnabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_profileEditorButton</cstring>
+ </property>
+ <property name="text">
+ <string>New...</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout13</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>m_qgroupboxContents</cstring>
+ </property>
+ <property name="title">
+ <string>Contents to Export</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_qcheckboxAccount</cstring>
+ </property>
+ <property name="text">
+ <string>Account</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_qcheckboxCategories</cstring>
+ </property>
+ <property name="text">
+ <string>Categories</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>m_qgroupboxDates</cstring>
+ </property>
+ <property name="title">
+ <string>Date Range</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout12</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="kMyMoneyDateInput" row="0" column="1">
+ <property name="name">
+ <cstring>m_kmymoneydateStart</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>lblEndDate</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>50</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>End on:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>lblStartDate</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>50</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Start on:</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyDateInput" row="1" column="1">
+ <property name="name">
+ <cstring>m_kmymoneydateEnd</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer7</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>230</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="Line">
+ <property name="name">
+ <cstring>Line2_2</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout49</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>451</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_qbuttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>Export</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_qbuttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>kMyMoneyDateInput</class>
+ <header location="local">../widgets/kmymoneydateinput.h</header>
+ <sizehint>
+ <width>90</width>
+ <height>25</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>1</hordata>
+ <verdata>1</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ <slot access="protected" specifier="">slotDateChosen(QDate date)</slot>
+ </customwidget>
+ <customwidget>
+ <class>KMyMoneyAccountCombo</class>
+ <header location="local">../widgets/kmymoneyaccountcombo.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>25</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>3</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image1</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data>
+ </image>
+ <image name="image1">
+ <data format="XPM.GZ" length="3368">789c9595c94eeb581086f73c4544ed50ab6eecd889ad562f1802843961a6d58b632764228c616cf5bb77f9d45fe75e11165c4c703e55d55fc319f8b152bb38daafadfc587a9abbf9b8ac9523f7585be93fcf66ef7ffff3d7bf4bcb715c93df2891d7f21f4bcb5cd4cadac1ddedc003fd02ddf9af16274075ffe3b91738f33c01276aa722b0b753ec390b7c0cce107f092e238d7fa838aa578fe713b0c5bf1aabdddd8033e49f1923be052e11df31867dc77366fe1c81cdbeab1c5b3d4d30f2d351c571dd988fc196ffda731e43cf811b98a79b06d6fa5e8c11ff1458e775054ec0dd8a1b91f9731d9ca9dd0d9513d35ff79c9b9dc7c68ddcdbf7c125ecefca16cf7e9e4994987dcfb34b73d86363e41f559cc6691ff93f8c119f2a3723b5bb8931faffc91abf691cabfd0e9c42ffd21876bf9ea90bf946c6a9f37ca66cf16e0c463fb46a8cf95e0456bb3346be3ad8fa3d34463fcf153763b33b678cf853e516e6415bc688bf31567fde04a7e8cffcd13ffbf56f4afea6ef971265f157bdd218f9d7c0e8878fc0a88ffdfe6f355a51abe1b9ad9c59ff0781fd7e62afdf2a5a79abf0f63765f377857123f2f67bb0e5f3e7256bb4f24cf3ed83fbcad4530efe99e722373e5476981faf05d679ad1aa3fe0b63ad8737c0982fed19c33ea8384ff2284f3c1f283b9be746609dc79bb19e37877837403d3bca458cf3531a23de9fdfbc147fed673bb0d6f7688cfc5960cdd737c6bc87caa2affe8dc09aefc338d17e3be026f291b1fad318ecb0bf38b0f677628cf5f1f7ab4b4c8f7363d4731b58eb2763d43f02231f9f0656bd8631f44cdfe6d535c67afaf9b8d245aef43c05a7e04439c44f8d511f2b9736cf79609d0ff44b9bd719d8ea7b0763fdd89f8742ea6beabfed73e53206df05d6fbecd618e7f311dc84ff0bd82993df7f453fd81f02abdecc58f737a56087fbf3d518f14f81f5bed17afb7dac07b58dd19fbfcfcab418383d3f73e550df36d8fa7f0eacfa57ca03ccbb3b67928ffbc6435eaf10ef92fb3ce06b1e7ef18c78cc138d80bee329dff08c6ff98eeff9811ff989e7fcecdf2ffcca6ffcfed39f0bf93610ef0f5ee5355ee70d6ef3266fc9df6deec8b3c3bbbcf7497f5fb40ff8503c8eb8cb3d6fedf1b1d0099f4accd927fd219f7bef0bf1eaf1255f719d23ff3de606279c7ed26f4addeba25629b738e39c98881c891695d45fd4a7016fd075e54d431ad1980f684253bae11ecde896ee16f41fe95e6c0f9c55def4484f92ab4573afd1a6e785fa5f65264ebc72effd22b1aff446eff421d60b5a5dd09fd39af8af134b254fbe8f8836a84d958aa3ad85fab765de3dea48979b555db4237ebbb447fbf23ea0c3c5fa799b643ea2d595ba7ba2bd2b9e0f744c27dca0d32feaef5029fe056f499767744e173413cb842ee98aea5fe877a4d7a85a577aa148a6b94fb1ecb3091d5183924ffa234a659f9c4ae61b8e6cffd2896837a945d9c2fa8e650fcadea2bc72e3b69399b842a2afe41eebbb81bbfea43f7143d983a91b714a776e4cab74e89f3a6db9899bba9b4ffadf7c82fe6ff857e7f7f7f425e25b39baf3e5fffe5cfa1fdc4beba0</data>
+ </image>
+</images>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/kfindtransactiondlg.cpp b/kmymoney2/dialogs/kfindtransactiondlg.cpp
new file mode 100644
index 0000000..f122ba2
--- /dev/null
+++ b/kmymoney2/dialogs/kfindtransactiondlg.cpp
@@ -0,0 +1,843 @@
+/***************************************************************************
+ kfindtransactiondlg.cpp
+ -------------------
+ copyright : (C) 2003, 2007 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlabel.h>
+#include <qradiobutton.h>
+#include <qcheckbox.h>
+#include <qtimer.h>
+#include <qtabwidget.h>
+#include <qlayout.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kapplication.h>
+#include <kglobal.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+#include <kpushbutton.h>
+#include <klineedit.h>
+#include <klistview.h>
+#include <kcombobox.h>
+#include <kstdguiitem.h>
+#include <kiconloader.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kfindtransactiondlg.h"
+
+#include <kmymoney/kmymoneydateinput.h>
+#include <kmymoney/kmymoneyedit.h>
+#include <kmymoney/kmymoneylineedit.h>
+#include <kmymoney/kmymoneyaccountselector.h>
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/kmymoneychecklistitem.h>
+#include <kmymoney/kmymoneyglobalsettings.h>
+#include <kmymoney/register.h>
+#include <kmymoney/transaction.h>
+#include <kmymoney/kmymoneycombo.h>
+
+#include "ksortoptiondlg.h"
+
+KFindTransactionDlg::KFindTransactionDlg(QWidget *parent, const char *name) :
+ KFindTransactionDlgDecl(parent, name, false),
+ m_needReload(false)
+{
+ m_register->installEventFilter(this);
+ m_tabWidget->setTabEnabled(m_resultPage, false);
+
+ // 'cause we don't have a separate setupTextPage
+ connect(m_textEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotUpdateSelections()));
+
+ setupAccountsPage();
+ setupCategoriesPage();
+ setupDatePage();
+ setupAmountPage();
+ setupPayeesPage();
+ setupDetailsPage();
+
+ // We don't need to add the default into the list (see ::slotShowHelp() why)
+ // m_helpAnchor[m_textTab] = QString("details.search");
+ m_helpAnchor[m_accountTab] = QString("details.search.account");
+ m_helpAnchor[m_dateTab] = QString("details.search.date");
+ m_helpAnchor[m_amountTab] = QString("details.search.amount");
+ m_helpAnchor[m_categoryTab] = QString("details.search.category");
+ m_helpAnchor[m_payeeTab] = QString("details.search.payee");
+ m_helpAnchor[m_detailsTab] = QString("details.search.details");
+
+ // setup the register
+ QValueList<KMyMoneyRegister::Column> cols;
+ cols << KMyMoneyRegister::DateColumn;
+ cols << KMyMoneyRegister::AccountColumn;
+ cols << KMyMoneyRegister::DetailColumn;
+ cols << KMyMoneyRegister::ReconcileFlagColumn;
+ cols << KMyMoneyRegister::PaymentColumn;
+ cols << KMyMoneyRegister::DepositColumn;
+ m_register->setupRegister(MyMoneyAccount(), cols);
+ m_register->setSelectionMode(QTable::Single);
+
+ connect(m_register, SIGNAL(editTransaction()), this, SLOT(slotSelectTransaction()));
+ connect(m_register, SIGNAL(headerClicked()), this, SLOT(slotSortOptions()));
+
+ slotUpdateSelections();
+
+ // setup the connections
+ connect(m_searchButton, SIGNAL(clicked()), this, SLOT(slotSearch()));
+ connect(m_resetButton, SIGNAL(clicked()), this, SLOT(slotReset()));
+ connect(m_resetButton, SIGNAL(clicked()), m_accountsView, SLOT(slotSelectAllAccounts()));
+ connect(m_resetButton, SIGNAL(clicked()), m_categoriesView, SLOT(slotSelectAllAccounts()));
+ connect(m_closeButton, SIGNAL(clicked()), this, SLOT(deleteLater()));
+ connect(m_helpButton, SIGNAL(clicked()), this, SLOT(slotShowHelp()));
+
+ // only allow searches when a selection has been made
+ connect(this, SIGNAL(selectionEmpty(bool)), m_searchButton, SLOT(setDisabled(bool)));
+
+ // get signal about engine changes
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotRefreshView()));
+
+ slotUpdateSelections();
+
+ m_textEdit->setFocus();
+}
+
+void KFindTransactionDlg::slotReset(void)
+{
+ m_textEdit->setText(QString());
+ m_regExp->setChecked(false);
+ m_caseSensitive->setChecked(false);
+ m_textNegate->setCurrentItem(0);
+
+ m_amountEdit->setEnabled(true);
+ m_amountFromEdit->setEnabled(false);
+ m_amountToEdit->setEnabled(false);
+ m_amountEdit->loadText(QString());
+ m_amountFromEdit->loadText(QString());
+ m_amountToEdit->loadText(QString());
+ m_amountButton->setChecked(true);
+ m_amountRangeButton->setChecked(false);
+
+ m_emptyPayeesButton->setChecked(false);
+ selectAllItems(m_payeesView, true);
+
+ m_typeBox->setCurrentItem(MyMoneyTransactionFilter::allTypes);
+ m_stateBox->setCurrentItem(MyMoneyTransactionFilter::allStates);
+ m_validityBox->setCurrentItem(MyMoneyTransactionFilter::anyValidity);
+
+ m_nrEdit->setEnabled(true);
+ m_nrFromEdit->setEnabled(false);
+ m_nrToEdit->setEnabled(false);
+ m_nrEdit->setText(QString());
+ m_nrFromEdit->setText(QString());
+ m_nrToEdit->setText(QString());
+ m_nrButton->setChecked(true);
+ m_nrRangeButton->setChecked(false);
+
+ m_tabWidget->setTabEnabled(m_resultPage, false);
+ m_tabWidget->setCurrentPage(m_tabWidget->indexOf(m_criteriaTab));
+
+ // the following call implies a call to slotUpdateSelections,
+ // that's why we call it last
+ m_dateRange->setCurrentItem(MyMoneyTransactionFilter::allDates);
+ slotDateRangeChanged(MyMoneyTransactionFilter::allDates);
+}
+
+void KFindTransactionDlg::slotUpdateSelections(void)
+{
+ QString txt;
+
+ // Text tab
+ if(!m_textEdit->text().isEmpty()) {
+ if(!txt.isEmpty())
+ txt += ", ";
+ txt += i18n("Text");
+ m_regExp->setEnabled(QRegExp(m_textEdit->text()).isValid());
+ } else
+ m_regExp->setEnabled(false);
+
+ m_caseSensitive->setEnabled(!m_textEdit->text().isEmpty());
+ m_textNegate->setEnabled(!m_textEdit->text().isEmpty());
+
+ // Account tab
+ if(!m_accountsView->allItemsSelected()) {
+ if(!txt.isEmpty())
+ txt += ", ";
+ txt += i18n("Account");
+ }
+
+ // Date tab
+ if(m_dateRange->currentItem() != 0) {
+ if(!txt.isEmpty())
+ txt += ", ";
+ txt += i18n("Date");
+ }
+
+ // Amount tab
+ if((m_amountButton->isChecked() && m_amountEdit->isValid())
+ || (m_amountRangeButton->isChecked()
+ && (m_amountFromEdit->isValid() || m_amountToEdit->isValid()))) {
+ if(!txt.isEmpty())
+ txt += ", ";
+ txt += i18n("Amount");
+ }
+
+ // Categories tab
+ if(!m_categoriesView->allItemsSelected()) {
+ if(!txt.isEmpty())
+ txt += ", ";
+ txt += i18n("Category");
+ }
+
+ // Payees tab
+ if(!allItemsSelected(m_payeesView)
+ || m_emptyPayeesButton->isChecked()) {
+ if(!txt.isEmpty())
+ txt += ", ";
+ txt += i18n("Payees");
+ }
+ m_payeesView->setEnabled(!m_emptyPayeesButton->isChecked());
+
+ // Details tab
+ if(m_typeBox->currentItem() != 0
+ || m_stateBox->currentItem() != 0
+ || m_validityBox->currentItem() != 0
+ || (m_nrButton->isChecked() && m_nrEdit->text().length() != 0)
+ || (m_nrRangeButton->isChecked()
+ && (m_nrFromEdit->text().length() != 0 || m_nrToEdit->text().length() != 0))) {
+ if(!txt.isEmpty())
+ txt += ", ";
+ txt += i18n("Details");
+ }
+
+ //Show a warning about transfers if Categories are filtered - bug #1523508
+ if(!m_categoriesView->allItemsSelected()) {
+ m_transferWarning->setText( i18n("Warning: Filtering by Category will exclude all transfers from the results.") );
+ } else {
+ m_transferWarning->setText("");
+ }
+
+ // disable the search button if no selection is made
+ emit selectionEmpty(txt.isEmpty());
+
+ if(txt.isEmpty()) {
+ txt = i18n("(None)");
+ }
+ m_selectedCriteria->setText(i18n("Current selections: ") + txt);
+}
+
+bool KFindTransactionDlg::allItemsSelected(const QListViewItem *item) const
+{
+ QListViewItem* it_v;
+
+ for(it_v = item->firstChild(); it_v != 0; it_v = it_v->nextSibling()) {
+ if(it_v->rtti() == 1) {
+ QCheckListItem* it_c = static_cast<QCheckListItem*>(it_v);
+ if(!(it_c->isOn() && allItemsSelected(it_v)))
+ return false;
+ }
+ }
+ return true;
+}
+
+bool KFindTransactionDlg::allItemsSelected(const QListView* view) const
+{
+ QListViewItem* it_v;
+
+ for(it_v = view->firstChild(); it_v != 0; it_v = it_v->nextSibling()) {
+ if(it_v->rtti() == 1) {
+ QCheckListItem* it_c = static_cast<QCheckListItem*>(it_v);
+ if(it_c->type() == QCheckListItem::CheckBox) {
+ if(!(it_c->isOn() && allItemsSelected(it_v)))
+ return false;
+ } else {
+ if(!allItemsSelected(it_v))
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+void KFindTransactionDlg::setupAccountsPage(void)
+{
+ m_accountsView->setSelectionMode(QListView::Multi);
+ AccountSet accountSet;
+ accountSet.addAccountGroup(MyMoneyAccount::Asset);
+ accountSet.addAccountGroup(MyMoneyAccount::Liability);
+ //set the accountset to show closed account if the settings say so
+ accountSet.setHideClosedAccounts(KMyMoneyGlobalSettings::hideClosedAccounts());
+ accountSet.load(m_accountsView);
+ connect(m_accountsView, SIGNAL(stateChanged()), this, SLOT(slotUpdateSelections()));
+}
+
+void KFindTransactionDlg::selectAllItems(QListView* view, const bool state)
+{
+ QListViewItem* it_v;
+
+ for(it_v = view->firstChild(); it_v != 0; it_v = it_v->nextSibling()) {
+ QCheckListItem* it_c = static_cast<QCheckListItem*>(it_v);
+ if(it_c->type() == QCheckListItem::CheckBox) {
+ it_c->setOn(state);
+ }
+ selectAllSubItems(it_v, state);
+ }
+
+ slotUpdateSelections();
+}
+
+void KFindTransactionDlg::selectItems(QListView* view, const QStringList& list, const bool state)
+{
+ QListViewItem* it_v;
+
+ for(it_v = view->firstChild(); it_v != 0; it_v = it_v->nextSibling()) {
+ KMyMoneyCheckListItem* it_c = static_cast<KMyMoneyCheckListItem*>(it_v);
+ if(it_c->type() == QCheckListItem::CheckBox && list.contains(it_c->id())) {
+ it_c->setOn(state);
+ }
+ selectSubItems(it_v, list, state);
+ }
+
+ slotUpdateSelections();
+}
+
+void KFindTransactionDlg::setupCategoriesPage(void)
+{
+ m_categoriesView->setSelectionMode(QListView::Multi);
+ AccountSet categorySet;
+ categorySet.addAccountGroup(MyMoneyAccount::Income);
+ categorySet.addAccountGroup(MyMoneyAccount::Expense);
+ categorySet.load(m_categoriesView);
+ connect(m_categoriesView, SIGNAL(stateChanged()), this, SLOT(slotUpdateSelections()));
+}
+
+void KFindTransactionDlg::selectAllSubItems(QListViewItem* item, const bool state)
+{
+ QListViewItem* it_v;
+
+ for(it_v = item->firstChild(); it_v != 0; it_v = it_v->nextSibling()) {
+ static_cast<QCheckListItem*>(it_v)->setOn(state);
+ selectAllSubItems(it_v, state);
+ }
+}
+
+void KFindTransactionDlg::selectSubItems(QListViewItem* item, const QStringList& list, const bool state)
+{
+ QListViewItem* it_v;
+
+ for(it_v = item->firstChild(); it_v != 0; it_v = it_v->nextSibling()) {
+ KMyMoneyCheckListItem* it_c = static_cast<KMyMoneyCheckListItem*>(it_v);
+ if(list.contains(it_c->id()))
+ it_c->setOn(state);
+ selectSubItems(it_v, list, state);
+ }
+}
+
+void KFindTransactionDlg::setupDatePage(void)
+{
+ int i;
+ for(i = MyMoneyTransactionFilter::allDates; i < MyMoneyTransactionFilter::dateOptionCount; ++i) {
+ MyMoneyTransactionFilter::translateDateRange(static_cast<MyMoneyTransactionFilter::dateOptionE>(i), m_startDates[i], m_endDates[i]);
+ }
+
+ connect(m_dateRange, SIGNAL(itemSelected(int)), this, SLOT(slotDateRangeChanged(int)));
+ connect(m_fromDate, SIGNAL(dateChanged(const QDate&)), this, SLOT(slotDateChanged()));
+ connect(m_toDate, SIGNAL(dateChanged(const QDate&)), this, SLOT(slotDateChanged()));
+
+ slotDateRangeChanged(MyMoneyTransactionFilter::allDates);
+}
+
+void KFindTransactionDlg::slotDateRangeChanged(int idx)
+{
+ switch(idx) {
+ case MyMoneyTransactionFilter::allDates:
+ case MyMoneyTransactionFilter::userDefined:
+ m_fromDate->loadDate(QDate());
+ m_toDate->loadDate(QDate());
+ break;
+ default:
+ m_fromDate->loadDate(m_startDates[idx]);
+ m_toDate->loadDate(m_endDates[idx]);
+ break;
+ }
+ slotUpdateSelections();
+}
+
+void KFindTransactionDlg::slotDateChanged(void)
+{
+ int idx;
+ for(idx = MyMoneyTransactionFilter::asOfToday; idx < MyMoneyTransactionFilter::dateOptionCount; ++idx) {
+ if(m_fromDate->date() == m_startDates[idx]
+ && m_toDate->date() == m_endDates[idx]) {
+ break;
+ }
+ }
+ //if no filter matched, set to user defined
+ if(idx == MyMoneyTransactionFilter::dateOptionCount)
+ idx = MyMoneyTransactionFilter::userDefined;
+
+ m_dateRange->blockSignals(true);
+ m_dateRange->setCurrentItem(static_cast<MyMoneyTransactionFilter::dateOptionE>(idx));
+ m_dateRange->blockSignals(false);
+ slotUpdateSelections();
+}
+
+void KFindTransactionDlg::setupAmountPage(void)
+{
+ connect(m_amountButton, SIGNAL(clicked()), this, SLOT(slotAmountSelected()));
+ connect(m_amountRangeButton, SIGNAL(clicked()), this, SLOT(slotAmountRangeSelected()));
+
+ connect(m_amountEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotUpdateSelections()));
+ connect(m_amountFromEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotUpdateSelections()));
+ connect(m_amountToEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotUpdateSelections()));
+
+ m_amountButton->setChecked(true);
+ slotAmountSelected();
+}
+
+void KFindTransactionDlg::slotAmountSelected(void)
+{
+ m_amountEdit->setEnabled(true);
+ m_amountFromEdit->setEnabled(false);
+ m_amountToEdit->setEnabled(false);
+ slotUpdateSelections();
+}
+
+void KFindTransactionDlg::slotAmountRangeSelected(void)
+{
+ m_amountEdit->setEnabled(false);
+ m_amountFromEdit->setEnabled(true);
+ m_amountToEdit->setEnabled(true);
+ slotUpdateSelections();
+}
+
+void KFindTransactionDlg::setupPayeesPage(void)
+{
+ m_payeesView->setSelectionMode(QListView::Single);
+ m_payeesView->header()->hide();
+
+ loadPayees();
+ m_emptyPayeesButton->setChecked(false);
+
+ connect(m_allPayeesButton, SIGNAL(clicked()), this, SLOT(slotSelectAllPayees()));
+ connect(m_clearPayeesButton, SIGNAL(clicked()), this, SLOT(slotDeselectAllPayees()));
+ connect(m_emptyPayeesButton, SIGNAL(stateChanged(int)), this, SLOT(slotUpdateSelections()));
+}
+
+void KFindTransactionDlg::loadPayees(void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ QValueList<MyMoneyPayee> list;
+ QValueList<MyMoneyPayee>::Iterator it_l;
+
+ list = file->payeeList();
+ // load view
+ for(it_l = list.begin(); it_l != list.end(); ++it_l) {
+ KMyMoneyCheckListItem* item = new KMyMoneyCheckListItem(m_payeesView, (*it_l).name(), QString(), (*it_l).id());
+ connect(item, SIGNAL(stateChanged(bool)), this, SLOT(slotUpdateSelections()));
+ item->setOn(true);
+ }
+}
+void KFindTransactionDlg::slotSelectAllPayees(void)
+{
+ selectAllItems(m_payeesView, true);
+}
+
+void KFindTransactionDlg::slotDeselectAllPayees(void)
+{
+ selectAllItems(m_payeesView, false);
+}
+
+void KFindTransactionDlg::setupDetailsPage(void)
+{
+ connect(m_typeBox, SIGNAL(activated(int)), this, SLOT(slotUpdateSelections()));
+ connect(m_stateBox, SIGNAL(activated(int)), this, SLOT(slotUpdateSelections()));
+ connect(m_validityBox, SIGNAL(activated(int)), this, SLOT(slotUpdateSelections()));
+
+ connect(m_nrButton, SIGNAL(clicked()), this, SLOT(slotNrSelected()));
+ connect(m_nrRangeButton, SIGNAL(clicked()), this, SLOT(slotNrRangeSelected()));
+ connect(m_nrEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotUpdateSelections()));
+ connect(m_nrFromEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotUpdateSelections()));
+ connect(m_nrToEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotUpdateSelections()));
+
+ m_nrButton->setChecked(true);
+ slotNrSelected();
+}
+
+void KFindTransactionDlg::slotNrSelected(void)
+{
+ m_nrEdit->setEnabled(true);
+ m_nrFromEdit->setEnabled(false);
+ m_nrToEdit->setEnabled(false);
+ slotUpdateSelections();
+}
+
+void KFindTransactionDlg::slotNrRangeSelected(void)
+{
+ m_nrEdit->setEnabled(false);
+ m_nrFromEdit->setEnabled(true);
+ m_nrToEdit->setEnabled(true);
+ slotUpdateSelections();
+}
+
+void KFindTransactionDlg::addItemToFilter(const opTypeE op, const QString& id)
+{
+ switch(op) {
+ case addAccountToFilter:
+ m_filter.addAccount(id);
+ break;
+ case addCategoryToFilter:
+ m_filter.addCategory(id);
+ break;
+ case addPayeeToFilter:
+ m_filter.addPayee(id);
+ break;
+ }
+}
+
+void KFindTransactionDlg::scanCheckListItems(const QListViewItem* item, const opTypeE op)
+{
+ QListViewItem* it_v;
+
+ for(it_v = item->firstChild(); it_v != 0; it_v = it_v->nextSibling()) {
+ if(it_v->rtti() == 1) {
+ KMyMoneyCheckListItem* it_c = static_cast<KMyMoneyCheckListItem*>(it_v);
+ if(it_c->type() == QCheckListItem::CheckBox) {
+ if(it_c->isOn())
+ addItemToFilter(op, (*it_c).id());
+ }
+ scanCheckListItems(it_v, op);
+ }
+ }
+}
+
+void KFindTransactionDlg::scanCheckListItems(const QListView* view, const opTypeE op)
+{
+ QListViewItem* it_v;
+
+ for(it_v = view->firstChild(); it_v != 0; it_v = it_v->nextSibling()) {
+ if(it_v->rtti() == 1) {
+ KMyMoneyCheckListItem* it_c = static_cast<KMyMoneyCheckListItem*>(it_v);
+ if(it_c->type() == QCheckListItem::CheckBox) {
+ if(it_c->isOn())
+ addItemToFilter(op, (*it_c).id());
+ }
+ scanCheckListItems(it_v, op);
+ }
+ }
+}
+
+void KFindTransactionDlg::setupFilter(void)
+{
+ m_filter.clear();
+
+ // Text tab
+ if(!m_textEdit->text().isEmpty()) {
+ QRegExp exp(m_textEdit->text(), m_caseSensitive->isChecked(), !m_regExp->isChecked());
+ m_filter.setTextFilter(exp, m_textNegate->currentItem() != 0);
+ }
+
+ // Account tab
+ if(!m_accountsView->allItemsSelected()) {
+ // retrieve a list of selected accounts
+ QStringList list;
+ m_accountsView->selectedItems(list);
+
+ // if we're not in expert mode, we need to make sure
+ // that all stock accounts for the selected investment
+ // account are also selected
+ if(!KMyMoneyGlobalSettings::expertMode()) {
+ QStringList missing;
+ QStringList::const_iterator it_a, it_b;
+ for(it_a = list.begin(); it_a != list.end(); ++it_a) {
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(*it_a);
+ if(acc.accountType() == MyMoneyAccount::Investment) {
+ for(it_b = acc.accountList().begin(); it_b != acc.accountList().end(); ++it_b) {
+ if(!list.contains(*it_b)) {
+ missing.append(*it_b);
+ }
+ }
+ }
+ }
+ list += missing;
+ }
+
+ m_filter.addAccount(list);
+ }
+
+ // Date tab
+ if(m_dateRange->currentItem() != 0) {
+ m_filter.setDateFilter(m_fromDate->date(), m_toDate->date());
+ }
+
+ // Amount tab
+ if((m_amountButton->isChecked() && m_amountEdit->isValid())) {
+ m_filter.setAmountFilter(m_amountEdit->value(), m_amountEdit->value());
+
+ } else if((m_amountRangeButton->isChecked()
+ && (m_amountFromEdit->isValid() || m_amountToEdit->isValid()))) {
+
+ MyMoneyMoney from(MyMoneyMoney::minValue), to(MyMoneyMoney::maxValue);
+ if(m_amountFromEdit->isValid())
+ from = m_amountFromEdit->value();
+ if(m_amountToEdit->isValid())
+ to = m_amountToEdit->value();
+
+ m_filter.setAmountFilter(from, to);
+ }
+
+ // Categories tab
+ if(!m_categoriesView->allItemsSelected()) {
+ m_filter.addCategory(m_categoriesView->selectedItems());
+ }
+
+ // Payees tab
+ if(m_emptyPayeesButton->isChecked()) {
+ m_filter.addPayee(QString());
+
+ } else if(!allItemsSelected(m_payeesView)) {
+ scanCheckListItems(m_payeesView, addPayeeToFilter);
+ }
+
+ // Details tab
+ if(m_typeBox->currentItem() != 0)
+ m_filter.addType(m_typeBox->currentItem());
+
+ if(m_stateBox->currentItem() != 0)
+ m_filter.addState(m_stateBox->currentItem());
+
+ if(m_validityBox->currentItem() != 0)
+ m_filter.addValidity(m_validityBox->currentItem());
+
+ if(m_nrButton->isChecked() && !m_nrEdit->text().isEmpty())
+ m_filter.setNumberFilter(m_nrEdit->text(), m_nrEdit->text());
+
+ if(m_nrRangeButton->isChecked()
+ && (!m_nrFromEdit->text().isEmpty() || !m_nrToEdit->text().isEmpty())) {
+ m_filter.setNumberFilter(m_nrFromEdit->text(), m_nrToEdit->text());
+ }
+}
+
+void KFindTransactionDlg::slotSearch(void)
+{
+ // setup the filter from the dialog widgets
+ setupFilter();
+
+ // filter is setup, now fill the register
+ slotRefreshView();
+
+ m_register->setFocus();
+}
+
+void KFindTransactionDlg::slotRefreshView(void)
+{
+ m_needReload = true;
+ if(isVisible()) {
+ loadView();
+ m_needReload = false;
+ }
+}
+
+void KFindTransactionDlg::show(void)
+{
+ if(m_needReload) {
+ loadView();
+ m_needReload = false;
+ }
+ KFindTransactionDlgDecl::show();
+}
+
+void KFindTransactionDlg::loadView(void)
+{
+ // setup sort order
+ m_register->setSortOrder(KMyMoneyGlobalSettings::sortSearchView());
+
+ // clear out old data
+ m_register->clear();
+
+ // retrieve the list from the engine
+ MyMoneyFile::instance()->transactionList(m_transactionList, m_filter);
+
+ // create the elements for the register
+ QValueList<QPair<MyMoneyTransaction, MyMoneySplit> >::const_iterator it;
+ QMap<QString, int>uniqueMap;
+ MyMoneyMoney deposit, payment;
+
+ int splitCount = 0;
+ for(it = m_transactionList.begin(); it != m_transactionList.end(); ++it) {
+ const MyMoneySplit& split = (*it).second;
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(split.accountId());
+ ++splitCount;
+ uniqueMap[(*it).first.id()]++;
+
+ KMyMoneyRegister::Register::transactionFactory(m_register, (*it).first, (*it).second, uniqueMap[(*it).first.id()]);
+ { // debug stuff
+ if(split.shares().isNegative()) {
+ payment += split.shares().abs();
+ } else {
+ deposit += split.shares().abs();
+ }
+ }
+ }
+
+ // add the group markers
+ m_register->addGroupMarkers();
+
+ // sort the transactions according to the sort setting
+ m_register->sortItems();
+
+ // remove trailing and adjacent markers
+ m_register->removeUnwantedGroupMarkers();
+
+ // turn on the ledger lens for the register
+ m_register->setLedgerLensForced();
+
+ m_register->updateRegister(true);
+
+ m_register->setFocusToTop();
+ m_register->selectItem(m_register->focusItem());
+
+#if KMM_DEBUG
+ m_foundText->setText(i18n("Found %1 matching transactions (D %2 / P %3 = %4)")
+ .arg(splitCount).arg(deposit.formatMoney("", 2)).arg(payment.formatMoney("", 2)).arg((deposit-payment).formatMoney("", 2)));
+#else
+ m_foundText->setText(i18n("Found %1 matching transactions") .arg(splitCount));
+#endif
+
+ m_tabWidget->setTabEnabled(m_resultPage, true);
+ m_tabWidget->setCurrentPage(m_tabWidget->indexOf(m_resultPage));
+
+ QTimer::singleShot(10, this, SLOT(slotRightSize()));
+}
+
+void KFindTransactionDlg::slotRightSize(void)
+{
+ m_register->updateContents();
+}
+
+void KFindTransactionDlg::resizeEvent(QResizeEvent* ev)
+{
+ // Columns
+ // 1 = Date
+ // 2 = Account
+ // 4 = Detail
+ // 5 = C
+ // 6 = Payment
+ // 7 = Deposit
+
+ // don't forget the resizer
+ KFindTransactionDlgDecl::resizeEvent(ev);
+
+ if(!m_register->isVisible())
+ return;
+
+ // resize the register
+ int w = m_register->visibleWidth();
+
+ int m_debitWidth = 80;
+ int m_creditWidth = 80;
+
+ m_register->adjustColumn(1);
+ m_register->adjustColumn(2);
+ m_register->adjustColumn(5);
+
+ m_register->setColumnWidth(6, m_debitWidth);
+ m_register->setColumnWidth(7, m_creditWidth);
+
+ for(int i = 0; i < m_register->numCols(); ++i) {
+ switch(i) {
+ case 4: // skip the one, we want to set
+ break;
+ default:
+ w -= m_register->columnWidth(i);
+ break;
+ }
+ }
+
+ m_register->setColumnWidth(4, w);
+}
+
+
+void KFindTransactionDlg::slotSelectTransaction(void)
+{
+ QValueList<KMyMoneyRegister::RegisterItem*> list = m_register->selectedItems();
+ if(!list.isEmpty()) {
+ KMyMoneyRegister::Transaction* t = dynamic_cast<KMyMoneyRegister::Transaction*>(list[0]);
+ if(t) {
+ emit transactionSelected(t->split().accountId(), t->transaction().id());
+ hide();
+ }
+ }
+}
+
+bool KFindTransactionDlg::eventFilter(QObject* o, QEvent* e)
+{
+ bool rc = false;
+
+ if(o->isWidgetType()) {
+ if(e->type() == QEvent::KeyPress) {
+ const QWidget* w = dynamic_cast<const QWidget*>(o);
+ QKeyEvent *k = static_cast<QKeyEvent *> (e);
+ if(w == m_register) {
+ switch(k->key()) {
+ default:
+ break;
+
+ case Qt::Key_Return:
+ case Qt::Key_Enter:
+ rc = true;
+ slotSelectTransaction();
+ break;
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+void KFindTransactionDlg::slotShowHelp(void)
+{
+ QString anchor = m_helpAnchor[m_criteriaTab->currentPage()];
+ if(anchor.isEmpty())
+ anchor = QString("details.search");
+
+ kapp->invokeHelp(anchor);
+}
+
+void KFindTransactionDlg::slotSortOptions(void)
+{
+ KSortOptionDlg* dlg = new KSortOptionDlg(this);
+
+ dlg->setSortOption(KMyMoneyGlobalSettings::sortSearchView(), QString());
+ dlg->hideDefaultButton();
+
+ if(dlg->exec() == QDialog::Accepted) {
+ QString sortOrder = dlg->sortOption();
+ if(sortOrder != KMyMoneyGlobalSettings::sortSearchView()) {
+ KMyMoneyGlobalSettings::setSortSearchView(sortOrder);
+ slotRefreshView();
+ }
+ }
+ delete dlg;
+}
+
+
+// vim:cin:si:ai:et:ts=2:sw=2:
+
+
+#include "kfindtransactiondlg.moc"
diff --git a/kmymoney2/dialogs/kfindtransactiondlg.h b/kmymoney2/dialogs/kfindtransactiondlg.h
new file mode 100644
index 0000000..edf9504
--- /dev/null
+++ b/kmymoney2/dialogs/kfindtransactiondlg.h
@@ -0,0 +1,203 @@
+/***************************************************************************
+ kfindtransactiondlg.h
+ -------------------
+ copyright : (C) 2003 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KFINDTRANSACTIONDLG_H
+#define KFINDTRANSACTIONDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlistview.h>
+#include <qdatetime.h>
+#include <qmap.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+// #include "../views/kledgerview.h"
+#include <kmymoney/mymoneyutils.h>
+#include <kmymoney/mymoneytransactionfilter.h>
+
+#include "../dialogs/kfindtransactiondlgdecl.h"
+
+class QListView;
+class QListViewItem;
+
+/**
+ * @author Thomas Baumgart
+ */
+class KFindTransactionDlg : public KFindTransactionDlgDecl
+{
+ Q_OBJECT
+public:
+
+ /*
+ // Make sure to keep the following enum valus in sync with the values
+ // used by the GUI in kfindtransactiondlgdecl.ui
+ enum dateOptionE {
+ allDates = 0,
+ asOfToday,
+ currentMonth,
+ currentYear,
+ monthToDate,
+ yearToDate,
+ yearToMonth,
+ lastMonth,
+ lastYear,
+ last7Days,
+ last30Days,
+ last3Months,
+ last6Months,
+ last12Months,
+ next7Days,
+ next30Days,
+ next3Months,
+ next6Months,
+ next12Months,
+ userDefined,
+ last3ToNext3Months,
+ last11Months,
+ // insert new constants above of this line
+ dateOptionCount
+ };
+*/
+ KFindTransactionDlg(QWidget *parent=0, const char *name=0);
+ ~KFindTransactionDlg() {}
+
+ virtual bool eventFilter( QObject *o, QEvent *e );
+
+public slots:
+ void show(void);
+
+protected:
+ void resizeEvent(QResizeEvent*);
+
+protected slots:
+ virtual void slotReset(void);
+ virtual void slotSearch(void);
+
+ /**
+ * This slot opens the detailed help page in khelpcenter. The
+ * anchor for the information is taken from m_helpAnchor.
+ */
+ virtual void slotShowHelp(void);
+
+
+ void slotUpdateSelections(void);
+
+ virtual void slotDateRangeChanged(int);
+ virtual void slotDateChanged(void);
+
+ virtual void slotAmountSelected(void);
+ virtual void slotAmountRangeSelected(void);
+
+ virtual void slotSelectAllPayees(void);
+ virtual void slotDeselectAllPayees(void);
+
+ virtual void slotNrSelected(void);
+ virtual void slotNrRangeSelected(void);
+
+ void slotRefreshView(void);
+
+ /**
+ * This slot selects the current selected transaction/split and emits
+ * the signal @a transactionSelected(const QString& accountId, const QString& transactionId)
+ */
+ void slotSelectTransaction(void);
+
+ void slotRightSize(void);
+
+ void slotSortOptions(void);
+
+signals:
+ void transactionSelected(const QString& accountId, const QString& transactionId);
+
+ /**
+ * This signal is sent out when no selection has been made. It is
+ * used to control the state of the Search button.
+ */
+ void selectionEmpty(bool);
+
+protected:
+ enum opTypeE {
+ addAccountToFilter = 0,
+ addCategoryToFilter,
+ addPayeeToFilter
+ };
+
+ void setupCategoriesPage(void);
+ void setupDatePage(void);
+ void setupAccountsPage(void);
+ void setupAmountPage(void);
+ void setupPayeesPage(void);
+ void setupDetailsPage(void);
+
+ void setupFilter(void);
+
+ void selectAllItems(QListView* view, const bool state);
+ void selectAllSubItems(QListViewItem* item, const bool state);
+ void selectItems(QListView* view, const QStringList& list, const bool state);
+ void selectSubItems(QListViewItem* item, const QStringList& list, const bool state);
+
+ /**
+ * This method loads the m_payeesView with the payees name
+ * found in the engine.
+ */
+ void loadPayees(void);
+
+ /**
+ * This method loads the register with the matching transactions
+ */
+ void loadView(void);
+
+ /**
+ * This method returns information about the selection state
+ * of the items in the m_accountsView.
+ *
+ * @param view pointer to the listview to scan
+ *
+ * @retval true if all items in the view are marked
+ * @retval false if at least one item is not marked
+ *
+ * @note If the view contains no items the method returns @p true.
+ */
+ bool allItemsSelected(const QListView* view) const;
+ bool allItemsSelected(const QListViewItem *item) const;
+
+ void scanCheckListItems(const QListView* view, const opTypeE op);
+ void scanCheckListItems(const QListViewItem* item, const opTypeE op);
+ void addItemToFilter(const opTypeE op, const QString& id);
+
+protected:
+ QDate m_startDates[MyMoneyTransactionFilter::dateOptionCount];
+ QDate m_endDates[MyMoneyTransactionFilter::dateOptionCount];
+
+ /**
+ * This member holds a list of all transactions matching the filter criteria
+ */
+ QValueList<QPair<MyMoneyTransaction, MyMoneySplit> > m_transactionList;
+
+ MyMoneyTransactionFilter m_filter;
+
+ QMap<QWidget*, QString> m_helpAnchor;
+
+ bool m_needReload;
+};
+
+#endif
diff --git a/kmymoney2/dialogs/kfindtransactiondlgdecl.ui b/kmymoney2/dialogs/kfindtransactiondlgdecl.ui
new file mode 100644
index 0000000..3340afd
--- /dev/null
+++ b/kmymoney2/dialogs/kfindtransactiondlgdecl.ui
@@ -0,0 +1,1101 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KFindTransactionDlgDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KFindTransactionDlgDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>771</width>
+ <height>481</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Search transactions</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>m_tabWidget</cstring>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_criteriaPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Criteria</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Define your search criteria</string>
+ </property>
+ </widget>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>m_criteriaTab</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>3</verstretch>
+ </sizepolicy>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_textTab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Text</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer row="3" column="2">
+ <property name="name">
+ <cstring>Spacer20</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>83</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KLineEdit" row="0" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>m_textEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>300</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="0" column="0">
+ <item>
+ <property name="text">
+ <string>Contains</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Does not contain</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_textNegate</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>m_regExp</cstring>
+ </property>
+ <property name="text">
+ <string>Treat text as regular expression</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>m_caseSensitive</cstring>
+ </property>
+ <property name="text">
+ <string>Case sensitive</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_accountTab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Account</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="kMyMoneyAccountSelector">
+ <property name="name">
+ <cstring>m_accountsView</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_dateTab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Date</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout16</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout15</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KMyMoneyPeriodCombo" row="0" column="1">
+ <property name="name">
+ <cstring>m_dateRange</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Range</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyDateInput" row="1" column="1">
+ <property name="name">
+ <cstring>m_fromDate</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel6</cstring>
+ </property>
+ <property name="text">
+ <string>To</string>
+ <comment>To (Date)</comment>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>From</string>
+ <comment>From (Date)</comment>
+ </property>
+ </widget>
+ <widget class="kMyMoneyDateInput" row="2" column="1">
+ <property name="name">
+ <cstring>m_toDate</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer25</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer22</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>30</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_amountTab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Amount</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout22</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>ButtonGroup1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_amountButton</cstring>
+ </property>
+ <property name="text">
+ <string>Search this amount</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_amountRangeButton</cstring>
+ </property>
+ <property name="text">
+ <string>Search amount in the range</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout20</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="kMyMoneyEdit" row="2" column="1">
+ <property name="name">
+ <cstring>m_amountToEdit</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel9</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel8</cstring>
+ </property>
+ <property name="text">
+ <string>to</string>
+ <comment>to (amount)</comment>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="0" column="1">
+ <property name="name">
+ <cstring>m_amountEdit</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel7</cstring>
+ </property>
+ <property name="text">
+ <string>from</string>
+ <comment>from (amount)</comment>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="1" column="1">
+ <property name="name">
+ <cstring>m_amountFromEdit</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer28</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer27</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>75</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_categoryTab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Category</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="kMyMoneyAccountSelector">
+ <property name="name">
+ <cstring>m_categoriesView</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_payeeTab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Payee</string>
+ </attribute>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout46</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="KListView">
+ <column>
+ <property name="text">
+ <string>Payee</string>
+ </property>
+ <property name="clickable">
+ <bool>false</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>m_payeesView</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_emptyPayeesButton</cstring>
+ </property>
+ <property name="text">
+ <string>Select transactions without payees</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout45</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_allPayeesButton</cstring>
+ </property>
+ <property name="text">
+ <string>Select all</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_clearPayeesButton</cstring>
+ </property>
+ <property name="text">
+ <string>Select none</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer29</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>42</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_detailsTab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Details</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout19</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout18</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel11_2</cstring>
+ </property>
+ <property name="text">
+ <string>Validity</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel10</cstring>
+ </property>
+ <property name="text">
+ <string>Type</string>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="1" column="1">
+ <item>
+ <property name="text">
+ <string>All states</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Not reconciled</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Cleared</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Reconciled</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_stateBox</cstring>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="0" column="1">
+ <item>
+ <property name="text">
+ <string>All types</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Payments</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Deposits</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Transfers</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_typeBox</cstring>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="2" column="1">
+ <item>
+ <property name="text">
+ <string>Any transaction</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Valid transaction</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Invalid transaction</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_validityBox</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel11</cstring>
+ </property>
+ <property name="text">
+ <string>State</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer30</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>130</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout21</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>ButtonGroup2</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_nrButton</cstring>
+ </property>
+ <property name="text">
+ <string>Search this number</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_nrRangeButton</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Search number in range</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout17</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel12</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel14</cstring>
+ </property>
+ <property name="text">
+ <string>to</string>
+ <comment>to (number)</comment>
+ </property>
+ </widget>
+ <widget class="kMyMoneyLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>m_nrToEdit</cstring>
+ </property>
+ </widget>
+ <widget class="kMyMoneyLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>m_nrEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel13</cstring>
+ </property>
+ <property name="text">
+ <string>from</string>
+ <comment>from (number)</comment>
+ </property>
+ </widget>
+ <widget class="kMyMoneyLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>m_nrFromEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer31</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer32</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_selectedCriteria</cstring>
+ </property>
+ <property name="text">
+ <string>text</string>
+ </property>
+ <property name="alignment">
+ <set>AlignTop</set>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_transferWarning</cstring>
+ </property>
+ <property name="paletteForegroundColor">
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>warning</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer16</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>24</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_resultPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Result</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KMyMoneyRegister::Register">
+ <column>
+ <property name="text">
+ <string>Security</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Details</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>C</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Payment</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Deposit</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Quantity</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Price</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Value</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Balance</string>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>m_register</cstring>
+ </property>
+ <property name="numRows">
+ <number>0</number>
+ </property>
+ <property name="numCols">
+ <number>12</number>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_foundText</cstring>
+ </property>
+ <property name="text">
+ <string>F</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignLeft</set>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout25</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_helpButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Help</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>11</number>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer15</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>51</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_closeButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Close</string>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>13</number>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_resetButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Reset</string>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>21</number>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_searchButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Find</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>25</number>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>kMyMoneyLineEdit</class>
+ <header location="local">../widgets/kmymoneylineedit.h</header>
+ <sizehint>
+ <width>90</width>
+ <height>25</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+ <customwidget>
+ <class>kMyMoneyAccountSelector</class>
+ <header location="global">../widgets/kmymoneyaccountselector.h</header>
+ <sizehint>
+ <width>80</width>
+ <height>80</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="1110">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000041d49444154388d8d95c18b1c4514c67fbb29e5b54ea05b26da1d36b08d09a6c508138cb8c13d647141163de49043bca9f1628eb9294810f24f88c15b728b07617358888785d980427290b4a8d00b19a8821da8228cf42316ac87eed9247ac95c9aeaeef9eaabdffb5ebf85f178ccfcf7f5b79fec07a7280a08a008f25ceb7c29e5da573716e65a0be3f198ef6f5ededff9b9e1b34faf90882092a1ea21428b9220ffbf46054055b19386ba6970ae6665b5e0d2c5eb0b066067bbe1f21757c88f5504eff0c192189081303a5582b16854fccce2fe041f00cdd0a8103b874556405476b62d972ec2c2b90ff3fd8df5cb946549d80b34aea15ccaa94625450e2d0e558b460b7371a734b5e027251a155545678ab62d7eea90b4c504078908c107acb354cb251b1f8f08b1c18631aabbb4d18211404804f22545863561d2f060fb34aa8a18d0086204e72c46a32292e1a796f278c1da7a859d8da9a737506db04d0a24103d8949480b214d3bbee952a05c1d536f9d2684160c744f048311543d459eb1b65ee1754cedae13a64abd5d6127053c9d0281f22d4f75c6a2118a5c09272d7ab740638bf4ef2dd2174032d0d8d04c6fe19c32bedd8bc65e342aa3f785e2784bfd6bc1bd9db24b05505616a4edd67d5a8c1801a03a9962754c504bf34b8986acfb9be91cac7d54315a15541b36b134f74bd2dc53940115a5381e087bc25c6f71be831a8baa234cc1ee3eeb74ed83116beb2b8849d108a3730e8ce27e2bfb82419a7b407ac7c222fd0e6280a8078ce64e47ef54ac9d5be9aaae0162e0de568a44a18d3df90845d919c4f01463406340a44f40efb43a99b371618488e2670d1a2d7ee6f1d3be39342104e937ed85fb86599c33e9ee0be9a004946259d8b858909880d59aa00daa0d3280b5f39e34074c4b3a5434029a76a9e9f5cc0163b5c80024158a1cfc4cb1d3061d5834066cb0a403c008599a70f6bc27b8d03106ea3ae91987278c5b143b015547224ab5e24185cd9b81665273e7b6e7cecd82ddbf8098002de94049737bc09828cf3036f31c3735c8b0e98eb704672f348c7f7c93cd1fb2ae905119ff54e0dff3542b0e9dd983dcea2cc5eea6cf303e74ec687af5c41b6fa38f5e203c7ec8e1238ef85831a214afef21060ea781ec68247b65c6916353cc8b73d1ae79354606af2a930709aa118da1636c274dd7e3774b884a79aa6b5711a538d33cf9c01c1c9b83bc6a1f55c91ccb23b05b1deb43a7decdaffefd2862f61366aa8449c69e33642f012f2bb208fa98eeda1f3346f076c8eeef19475e9be115423364f78f84105a8643d34d90cfbfdcd8cf872589a45dc7f54cf3134a36f4e495c23f9da8db15bccb708d4014f2ca512cb5d4f7c13e84300d5cff6eb39b202bab053bdb9674f0648609427d0f8402ddeac30f4fcd3ced3efc3b422d406c09b340bedc1571e1bfc3d44dc281634c5fe5e758e7395cfbe6d6c130fd17d92372d277c159b70000000049454e44ae426082</data>
+ </image>
+</images>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/kgncimportoptionsdlg.cpp b/kmymoney2/dialogs/kgncimportoptionsdlg.cpp
new file mode 100644
index 0000000..e11ff69
--- /dev/null
+++ b/kmymoney2/dialogs/kgncimportoptionsdlg.cpp
@@ -0,0 +1,128 @@
+/***************************************************************************
+ kgncimportoptions.cpp
+ -------------------
+ copyright : (C) 2005 by Ace Jones
+ author : Tony Bloomfield
+ email : tonybloom@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qcheckbox.h>
+#include <qlineedit.h>
+#include <qlayout.h>
+#include <qapplication.h>
+#include <qcombobox.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+#include <kapplication.h>
+#include <kurlrequester.h>
+#include <ktextbrowser.h>
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include "kgncimportoptionsdlg.h"
+
+// dialog constructor
+KGncImportOptionsDlg::KGncImportOptionsDlg(QWidget *parent, const char *name)
+ : KGncImportOptionsDlgDecl(parent, name)
+{
+ buttonInvestGroup->setRadioButtonExclusive (true);
+ buttonInvestGroup->setButton (0);
+ checkFinanceQuote->setChecked(true);
+ checkSchedules->setChecked (false);
+ buildCodecList (); // build list of codecs and insert into combo box
+ checkDecode->setChecked (false);
+ comboDecode->setEnabled (false);
+ checkTxNotes->setChecked (false);
+ checkDebugGeneral->setChecked (false);
+ checkDebugXML->setChecked (false);
+ checkAnonymize->setChecked (false);
+
+ connect (checkDecode, SIGNAL(toggled(bool)), this, SLOT(slotDecodeOptionChanged(bool)));
+}
+
+KGncImportOptionsDlg::~KGncImportOptionsDlg()
+{
+}
+
+// enable the combo box for selection if required
+void KGncImportOptionsDlg::slotDecodeOptionChanged(bool isOn) {
+ if (isOn) {
+ comboDecode->setEnabled (true);
+ comboDecode->setCurrentItem (0);
+ } else {
+ comboDecode->setEnabled (false);
+ }
+}
+
+// build a list of known codecs and sort it so that the locale codec is first
+// try to get the others in some sort of order of likelihood
+void KGncImportOptionsDlg::buildCodecList () {
+
+ m_localeCodec = QTextCodec::codecForLocale();
+ m_codecList.setAutoDelete (true);
+ // retrieve all codec pointers
+ QTextCodec *codec;
+ unsigned int i;
+ for (i = 0; (codec = QTextCodec::codecForIndex(i)); i++) {
+ int rank;
+ if (codec == m_localeCodec) rank = 999; // ensure locale rank comes first
+ else rank = codec->heuristicNameMatch(m_localeCodec->name());
+
+ codecData *p = new codecData(rank, codec);
+ m_codecList.append (p);
+ }
+ m_codecList.sort();
+ for (i = 0; i < m_codecList.count(); i++) {
+ QString name (m_codecList.at(i)->second->name());
+ comboDecode->insertItem (name);
+ }
+}
+
+// this routine sorts the codec list on 1) rank descending 2) codec name ascending
+int codecDataList::compareItems (void *a, void *b) {
+ codecData *pa = reinterpret_cast<codecData *>(a);
+ codecData *pb = reinterpret_cast<codecData *>(b);
+
+ if (pa->first > pb->first) {
+ return (-1); // greater rank is treated as less-than so gets sorted first
+ } else { if (pb->first > pa->first)
+ return (1);
+ }
+ // ranks are equal, sort on name, case insensitive
+ QString sa(pa->second->name());
+ QString sb(pb->second->name());
+ if (sa.lower() > sb.lower()) {
+ return (1);
+ } else {
+ return (-1);
+ }
+}
+
+// return selected codec or 0
+QTextCodec* KGncImportOptionsDlg::decodeOption(void) {
+ if (!checkDecode->isChecked()) {
+ return (0);
+ } else {
+ return (m_codecList.at(comboDecode->currentItem())->second);
+ }
+}
+
+void KGncImportOptionsDlg::slotHelp(void)
+{
+ kapp->invokeHelp ("details.impexp.gncoptions");
+}
+
+#include "kgncimportoptionsdlg.moc"
diff --git a/kmymoney2/dialogs/kgncimportoptionsdlg.h b/kmymoney2/dialogs/kgncimportoptionsdlg.h
new file mode 100644
index 0000000..5ab6202
--- /dev/null
+++ b/kmymoney2/dialogs/kgncimportoptionsdlg.h
@@ -0,0 +1,70 @@
+/***************************************************************************
+ kgncimportoptions.h
+ -------------------
+ copyright : (C) 2005 by Ace Jones
+ author : Tony Bloomfield
+ email : tonybloom@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KGNCIMPORTOPTIONSDLG_H
+#define KGNCIMPORTOPTIONSDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qbuttongroup.h>
+#include <qcheckbox.h>
+#include <qtextcodec.h>
+#include <qptrlist.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include "../dialogs/kgncimportoptionsdlgdecl.h"
+
+typedef QPair<int, QTextCodec*> codecData;
+
+// class to sort codec list
+class codecDataList : public QPtrList<codecData> {
+ int compareItems (QPtrCollection::Item a, QPtrCollection::Item b);
+};
+
+class KGncImportOptionsDlg : public KGncImportOptionsDlgDecl
+{
+Q_OBJECT
+public:
+ KGncImportOptionsDlg(QWidget *parent = 0, const char *name = 0);
+ ~KGncImportOptionsDlg();
+
+ int investmentOption () const {return (buttonInvestGroup->selectedId());};
+ bool quoteOption() const {return (checkFinanceQuote->isChecked());};
+ bool scheduleOption () const {return (checkSchedules->isChecked());};
+ QTextCodec* decodeOption ();
+ bool txNotesOption () const {return (checkTxNotes->isChecked());};
+ bool generalDebugOption () const {return (checkDebugGeneral->isChecked());};
+ bool xmlDebugOption () const {return (checkDebugXML->isChecked());};
+ bool anonymizeOption () const {return (checkAnonymize->isChecked());};
+
+public slots:
+ void slotDecodeOptionChanged (bool);
+ void slotHelp();
+
+private:
+ void buildCodecList ();
+
+ QTextCodec* m_localeCodec;
+ codecDataList m_codecList;
+
+};
+
+#endif
diff --git a/kmymoney2/dialogs/kgncimportoptionsdlgdecl.ui b/kmymoney2/dialogs/kgncimportoptionsdlgdecl.ui
new file mode 100644
index 0000000..e32197b
--- /dev/null
+++ b/kmymoney2/dialogs/kgncimportoptionsdlgdecl.ui
@@ -0,0 +1,383 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KGncImportOptionsDlgDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KGncImportOptionsDlgDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>526</width>
+ <height>638</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>GnuCash Import Options</string>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout8</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>9</y>
+ <width>442</width>
+ <height>636</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Use 'Help' for more information on these options</string>
+ </property>
+ <property name="alignment">
+ <set>AlignCenter</set>
+ </property>
+ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>buttonInvestGroup</cstring>
+ </property>
+ <property name="title">
+ <string>Investment Handling</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>radioInvest1</cstring>
+ </property>
+ <property name="text">
+ <string>One investment account for each stock</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>radioInvest2</cstring>
+ </property>
+ <property name="text">
+ <string>One investment account for all stocks</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>radioInvest3</cstring>
+ </property>
+ <property name="text">
+ <string>Prompt for an investment account for each stock</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>buttonGroup5</cstring>
+ </property>
+ <property name="title">
+ <string>Online price quotes</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>checkFinanceQuote</cstring>
+ </property>
+ <property name="text">
+ <string>Use Finance::Quote for share price quotes</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>buttonGroup2</cstring>
+ </property>
+ <property name="title">
+ <string>Scheduled Transactions</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>checkSchedules</cstring>
+ </property>
+ <property name="text">
+ <string>Drop suspect scheduled transactions</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>buttonGroup4</cstring>
+ </property>
+ <property name="title">
+ <string>Decoding option</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout8</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>checkDecode</cstring>
+ </property>
+ <property name="text">
+ <string>Decode using</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>140</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QComboBox">
+ <property name="name">
+ <cstring>comboDecode</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>buttonGroup18</cstring>
+ </property>
+ <property name="title">
+ <string>Transaction Notes option</string>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>checkTxNotes</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>20</y>
+ <width>420</width>
+ <height>24</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Use transaction notes on non-split transactions</string>
+ </property>
+ </widget>
+ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>buttonGroup3</cstring>
+ </property>
+ <property name="title">
+ <string>Debug Options</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>checkDebugGeneral</cstring>
+ </property>
+ <property name="text">
+ <string>General debug data</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>checkDebugXML</cstring>
+ </property>
+ <property name="text">
+ <string>Display XML data</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>checkAnonymize</cstring>
+ </property>
+ <property name="text">
+ <string>Anonymize data</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout12</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonHelp</cstring>
+ </property>
+ <property name="text">
+ <string>Help</string>
+ </property>
+ <property name="accel">
+ <string>F1</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>200</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="Line">
+ <property name="name">
+ <cstring>line1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>KGncImportOptionsDlgDecl</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>KGncImportOptionsDlgDecl</receiver>
+ <slot>reject()</slot>
+ </connection>
+ <connection>
+ <sender>buttonHelp</sender>
+ <signal>clicked()</signal>
+ <receiver>KGncImportOptionsDlgDecl</receiver>
+ <slot>slotHelp()</slot>
+ </connection>
+</connections>
+<slots>
+ <slot access="protected">slotHelp()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/kgncpricesourcedlg.cpp b/kmymoney2/dialogs/kgncpricesourcedlg.cpp
new file mode 100644
index 0000000..2246e01
--- /dev/null
+++ b/kmymoney2/dialogs/kgncpricesourcedlg.cpp
@@ -0,0 +1,106 @@
+/***************************************************************************
+ kgncpricesourcedlg.cpp
+ -------------------
+ copyright : (C) 2005 by Ace Jones
+ author : Tony Bloomfield
+ email : tonybloom@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qlabel.h>
+#include <qlistbox.h>
+#include <qlineedit.h>
+#include <qbuttongroup.h>
+#include <qlayout.h>
+#include <qapplication.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+#include <kapplication.h>
+#include <kurlrequester.h>
+#include <ktextbrowser.h>
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include "kgncpricesourcedlg.h"
+#include "../converter/webpricequote.h"
+
+KGncPriceSourceDlg::KGncPriceSourceDlg(QWidget *parent, const char *name)
+ : KGncPriceSourceDlgDecl(parent, name)
+{
+}
+KGncPriceSourceDlg::KGncPriceSourceDlg(const QString &stockName, const QString &gncSource){
+ // signals and slots connections
+ connect( buttonGroup5, SIGNAL( released(int) ), this, SLOT( buttonPressed(int) ) );
+ connect( buttonHelp, SIGNAL( clicked() ), this, SLOT( slotHelp() ) );
+ // initialize data fields
+ textStockName->setText (i18n ("Investment: %1").arg(stockName));
+ textGncSource->setText (i18n ("Quote source: %1").arg(gncSource));
+ listKnownSource->insertStringList (WebPriceQuote::quoteSources());
+ lineUserSource->setText (gncSource);
+ checkAlwaysUse->setChecked(true);
+ buttonGroup5->setButton (0);
+ buttonPressed (0);
+ return;
+}
+
+KGncPriceSourceDlg::~KGncPriceSourceDlg()
+{
+}
+
+enum ButtonIds {NOSOURCE = 0, KMMSOURCE, USERSOURCE};
+
+void KGncPriceSourceDlg::buttonPressed (int buttonId) {
+ m_currentButton = buttonId;
+ switch (m_currentButton) {
+ case NOSOURCE:
+ listKnownSource->clearSelection();
+ listKnownSource->setEnabled (false);
+ lineUserSource->deselect();
+ lineUserSource->setEnabled (false);
+ break;
+ case KMMSOURCE:
+ lineUserSource->deselect ();
+ lineUserSource->setEnabled (false);
+ listKnownSource->setEnabled (true);
+ listKnownSource->setFocus();
+ listKnownSource->setSelected (0, true);
+ break;
+ case USERSOURCE:
+ listKnownSource->clearSelection();
+ listKnownSource->setEnabled (false);
+ lineUserSource->setEnabled (true);
+ lineUserSource->selectAll();
+ lineUserSource->setFocus ();
+ break;
+ }
+}
+
+QString KGncPriceSourceDlg::selectedSource() const {
+ QString s;
+ switch (m_currentButton) {
+ case NOSOURCE: s = ""; break;
+ case KMMSOURCE: s = listKnownSource->currentText(); break;
+ case USERSOURCE: s = lineUserSource->text(); break;
+ }
+ return (s);
+}
+
+void KGncPriceSourceDlg::slotHelp(void)
+{
+ kapp->invokeHelp ("details.impexp.gncquotes");
+}
+
+#include "kgncpricesourcedlg.moc"
+
diff --git a/kmymoney2/dialogs/kgncpricesourcedlg.h b/kmymoney2/dialogs/kgncpricesourcedlg.h
new file mode 100644
index 0000000..6351b02
--- /dev/null
+++ b/kmymoney2/dialogs/kgncpricesourcedlg.h
@@ -0,0 +1,53 @@
+/***************************************************************************
+ kgncpricesourcedlg.h
+ -------------------
+ copyright : (C) 2005 by Ace Jones
+ author : Tony Bloomfield
+ email : tonybloom@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KGNCPRICESOURCEDLG_H
+#define KGNCPRICESOURCEDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qcheckbox.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../dialogs/kgncpricesourcedlgdecl.h"
+
+class KGncPriceSourceDlg : public KGncPriceSourceDlgDecl
+{
+ Q_OBJECT
+public:
+ KGncPriceSourceDlg(QWidget *parent = 0, const char *name = 0);
+ KGncPriceSourceDlg(const QString &stockName, const QString &gncSource);
+ ~KGncPriceSourceDlg();
+
+ QString selectedSource () const;
+ bool alwaysUse() const { return (checkAlwaysUse->isChecked()); }
+
+public slots:
+ void buttonPressed(int);
+ void slotHelp();
+
+private:
+ int m_currentButton;
+};
+
+#endif
diff --git a/kmymoney2/dialogs/kgncpricesourcedlgdecl.ui b/kmymoney2/dialogs/kgncpricesourcedlgdecl.ui
new file mode 100644
index 0000000..c781f81
--- /dev/null
+++ b/kmymoney2/dialogs/kgncpricesourcedlgdecl.ui
@@ -0,0 +1,248 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>KGncPriceSourceDlgDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KGncPriceSourceDlgDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>619</width>
+ <height>480</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Online Quotes - Select price source</string>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>400</y>
+ <width>496</width>
+ <height>50</height>
+ </rect>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>91</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonHelp</cstring>
+ </property>
+ <property name="text">
+ <string>Help</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>80</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOK</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>171</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QSplitter">
+ <property name="name">
+ <cstring>splitter1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>11</x>
+ <y>1</y>
+ <width>525</width>
+ <height>370</height>
+ </rect>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textStockName</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textGncSource</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>This price source is not known to KMyMoney. Please select an option below.</string>
+ </property>
+ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>buttonGroup5</cstring>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>buttonNoSource</cstring>
+ </property>
+ <property name="text">
+ <string>Do not perform online quotes for this investment</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>buttonSelectSource</cstring>
+ </property>
+ <property name="text">
+ <string>Select a known KMyMoney source from the list below</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="QListBox">
+ <property name="name">
+ <cstring>listKnownSource</cstring>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>buttonUserSource</cstring>
+ </property>
+ <property name="text">
+ <string>Use the following name for the price source.
+(Click Help for further information.)</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>2</number>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>lineUserSource</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>checkAlwaysUse</cstring>
+ </property>
+ <property name="text">
+ <string>Always use this selection for this price source.</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>370</height>
+ </size>
+ </property>
+ </spacer>
+ </widget>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOK</sender>
+ <signal>released()</signal>
+ <receiver>KGncPriceSourceDlgDecl</receiver>
+ <slot>close()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/kgpgkeyselectiondlg.cpp b/kmymoney2/dialogs/kgpgkeyselectiondlg.cpp
new file mode 100644
index 0000000..37ddcc5
--- /dev/null
+++ b/kmymoney2/dialogs/kgpgkeyselectiondlg.cpp
@@ -0,0 +1,149 @@
+/***************************************************************************
+ kgpgkeyselectiondlg.cpp
+ -------------------
+ copyright : (C) 2008 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlayout.h>
+#include <qlabel.h>
+#include <qwhatsthis.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <keditlistbox.h>
+#include <kled.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kgpgkeyselectiondlg.h"
+#include <kmymoney/kgpgfile.h>
+
+KGpgKeySelectionDlg::KGpgKeySelectionDlg(QWidget *parent, const char *name) :
+ KDialogBase(parent, name, true, i18n("Select additional keys"), Ok | Cancel),
+ m_needCheckList(true),
+ m_listOk(false),
+ m_checkCount(0)
+{
+ QWidget* page = new QWidget(this);
+ setMainWidget(page);
+ QVBoxLayout* topLayout = new QVBoxLayout(page, 0, spacingHint());
+
+ m_listBox = new KEditListBox(page);
+ m_listBox->setTitle(i18n("User identification"));
+ m_listBox->setButtons( int( KEditListBox::Remove | KEditListBox::Add ) );
+ QWhatsThis::add( m_listBox, i18n( "Enter the id of the key you want to use for data encryption. This can either be an e-mail address or the hexadecimal key id. In case of the key id don't forget the leading 0x." ) );
+
+ topLayout->addWidget(m_listBox);
+
+ // add a LED for the availability of all keys
+ QHBoxLayout* ledBox = new QHBoxLayout(0, 0, 6, "ledBoxLayout");
+ m_keyLed = new KLed(page);
+ m_keyLed->setShape( KLed::Circular );
+ m_keyLed->setLook( KLed::Sunken );
+
+ ledBox->addWidget(m_keyLed);
+ ledBox->addWidget(new QLabel(i18n("Keys for all of the above user ids found"), page));
+ ledBox->addItem(new QSpacerItem( 50, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ));
+
+ topLayout->addLayout(ledBox);
+
+ connect(m_listBox, SIGNAL(changed()), this, SLOT(slotIdChanged()));
+ connect(m_listBox, SIGNAL(added(const QString&)), this, SLOT(slotKeyListChanged()));
+ connect(m_listBox, SIGNAL(removed(const QString&)), this, SLOT(slotKeyListChanged()));
+}
+
+void KGpgKeySelectionDlg::setKeys(const QStringList& list)
+{
+ m_listBox->clear();
+ m_listBox->insertStringList(list);
+ slotKeyListChanged();
+}
+
+#if 0
+void KGpgKeySelectionDlg::slotShowHelp(void)
+{
+ QString anchor = m_helpAnchor[m_criteriaTab->currentPage()];
+ if(anchor.isEmpty())
+ anchor = QString("details.search");
+
+ kapp->invokeHelp(anchor);
+}
+#endif
+
+void KGpgKeySelectionDlg::slotKeyListChanged(void)
+{
+ m_needCheckList = true;
+ slotIdChanged();
+}
+
+void KGpgKeySelectionDlg::slotIdChanged(void)
+{
+ // this looks a bit awkward. Here's why: KGPGFile::keyAvailable() starts
+ // an external task and processes UI events while it waits for the external
+ // process to finish. Thus, the first time we get here, the external process
+ // is started and the user may press a second key which calls this routine
+ // again.
+ //
+ // The second invocation is counted, but the check is not started until the
+ // first one finishes. Once the external process finishes, we check if we
+ // were called in the meantime and restart the check.
+ if(++m_checkCount == 1) {
+ while(1) {
+ // first we check the current edit field if filled
+ bool keysOk = true;
+ if(!m_listBox->currentText().isEmpty()) {
+ keysOk = KGPGFile::keyAvailable(m_listBox->currentText());
+ }
+
+ // if it is available, then scan the current list if we need to
+ if(keysOk) {
+ if(m_needCheckList) {
+ QStringList keys = m_listBox->items();
+ QStringList::const_iterator it_s;
+ for(it_s = keys.begin(); keysOk && it_s != keys.end(); ++it_s) {
+ if(!KGPGFile::keyAvailable(*it_s))
+ keysOk = false;
+ }
+ m_listOk = keysOk;
+ m_needCheckList = false;
+
+ } else {
+ keysOk = m_listOk;
+ }
+ }
+
+ // did we receive some more requests to check?
+ if(m_checkCount > 1) {
+ m_checkCount = 1;
+ continue;
+ }
+
+ m_keyLed->setState(static_cast<KLed::State>(keysOk && (m_listBox->items().count() != 0) ? KLed::On : KLed::Off));
+ enableButtonOK((m_listBox->items().count() == 0) || (m_keyLed->state() == KLed::On));
+ break;
+ }
+
+ --m_checkCount;
+ }
+}
+
+
+#include "kgpgkeyselectiondlg.moc"
+
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/dialogs/kgpgkeyselectiondlg.h b/kmymoney2/dialogs/kgpgkeyselectiondlg.h
new file mode 100644
index 0000000..4355478
--- /dev/null
+++ b/kmymoney2/dialogs/kgpgkeyselectiondlg.h
@@ -0,0 +1,66 @@
+/***************************************************************************
+ kgpgkeyselectiondlg.h
+ -------------------
+ copyright : (C) 2008 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KGPGKEYSELECTIONDLG_H
+#define KGPGKEYSELECTIONDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kdialogbase.h>
+class KEditListBox;
+class KLed;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+/**
+ * @author Thomas Baumgart
+ */
+class KGpgKeySelectionDlg : public KDialogBase
+{
+ Q_OBJECT
+public:
+
+ KGpgKeySelectionDlg(QWidget *parent=0, const char *name=0);
+ virtual ~KGpgKeySelectionDlg() {}
+
+ /**
+ * preset the key list with the given key ids in @a list
+ */
+ void setKeys(const QStringList& list);
+
+ /**
+ * Returns the list of keys currently listed in the KEditListBox
+ */
+ const QStringList keys(void) const { return m_listBox->items(); }
+
+protected slots:
+ void slotIdChanged(void);
+ void slotKeyListChanged(void);
+
+private:
+ KEditListBox* m_listBox;
+ KLed* m_keyLed;
+ bool m_needCheckList;
+ bool m_listOk;
+ int m_checkCount;
+};
+
+#endif
diff --git a/kmymoney2/dialogs/kimportdlg.cpp b/kmymoney2/dialogs/kimportdlg.cpp
new file mode 100644
index 0000000..c9cc2d5
--- /dev/null
+++ b/kmymoney2/dialogs/kimportdlg.cpp
@@ -0,0 +1,228 @@
+/***************************************************************************
+ kimportdlg.cpp - description
+ -------------------
+ begin : Wed May 16 2001
+ copyright : (C) 2001 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@ctv.es>
+ Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Headers
+
+#include <qlineedit.h>
+#include <qtextstream.h>
+#include <qprogressbar.h>
+#include <qlabel.h>
+#include <qbuttongroup.h>
+#include <qpixmap.h>
+#include <qapplication.h>
+
+// ----------------------------------------------------------------------------
+// KDE Headers
+
+#include <kglobalsettings.h>
+#include <kpushbutton.h>
+#include <kcombobox.h>
+#include <kmessagebox.h>
+#include <kfiledialog.h>
+#include <klocale.h>
+#include <kglobal.h>
+#include <kiconloader.h>
+#include <kio/netaccess.h>
+#include <kstandarddirs.h>
+
+// ----------------------------------------------------------------------------
+// Project Headers
+
+#include "kimportdlg.h"
+#include <kmymoney/mymoneyfile.h>
+#include "mymoneyqifprofileeditor.h"
+#include "../converter/mymoneyqifprofile.h"
+
+KImportDlg::KImportDlg(QWidget *parent, const char * name)
+ : KImportDlgDecl(parent, name, TRUE)
+{
+ // Set all the last used options
+ readConfig();
+
+ loadProfiles(true);
+
+ // load button icons
+ m_qbuttonCancel->setGuiItem(KStdGuiItem::cancel());
+
+ KIconLoader* il = KGlobal::iconLoader();
+ KGuiItem okButtenItem( i18n( "&Import" ),
+ QIconSet(il->loadIcon("fileimport", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Start operation"),
+ i18n("Use this to start the import operation"));
+ m_qbuttonOk->setGuiItem(okButtenItem);
+
+ KGuiItem browseButtenItem( i18n( "&Browse..." ),
+ QIconSet(il->loadIcon("fileopen", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Select filename"),
+ i18n("Use this to select a filename to export to"));
+ m_qbuttonBrowse->setGuiItem(browseButtenItem);
+
+ KGuiItem newButtenItem( i18n( "&New..." ),
+ QIconSet(il->loadIcon("filenew", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Create a new profile"),
+ i18n("Use this to open the profile editor"));
+ m_profileEditorButton->setGuiItem(newButtenItem);
+
+ // connect the buttons to their functionality
+ connect(m_qbuttonBrowse, SIGNAL( clicked() ), this, SLOT( slotBrowse() ) );
+ connect(m_qbuttonOk, SIGNAL(clicked()), this, SLOT(slotOkClicked()));
+ connect(m_qbuttonCancel, SIGNAL(clicked()), this, SLOT(reject()));
+ connect(m_profileEditorButton, SIGNAL(clicked()), this, SLOT(slotNewProfile()));
+
+ // connect the change signals to the check slot and perform initial check
+ connect(m_qlineeditFile, SIGNAL(textChanged(const QString&)), this,
+ SLOT(slotFileTextChanged(const QString&)));
+
+ // setup button enable status
+ slotFileTextChanged(m_qlineeditFile->text());
+}
+
+KImportDlg::~KImportDlg()
+{
+}
+
+void KImportDlg::slotBrowse()
+{
+ // determine what the browse prefix should be from the current profile
+
+ MyMoneyQifProfile tmpprofile;
+ tmpprofile.loadProfile("Profile-" + profile());
+
+ KFileDialog dialog(KGlobalSettings::documentPath(),
+ i18n("%1|Import files\n%2|All files (*.*)").arg(tmpprofile.filterFileType()).arg("*"),
+ this, i18n("Import File..."), true);
+ dialog.setMode(KFile::File | KFile::ExistingOnly);
+
+ if(dialog.exec() == QDialog::Accepted) {
+#if KDE_IS_VERSION(3,4,0)
+ m_qlineeditFile->setText(dialog.selectedURL().pathOrURL());
+#else
+ m_qlineeditFile->setText(dialog.selectedURL().prettyURL(0, KURL::StripFileProtocol));
+#endif
+ }
+}
+
+void KImportDlg::slotOkClicked()
+{
+ // Save the used options.
+ writeConfig();
+ // leave dialog directly
+ accept();
+}
+
+void KImportDlg::readConfig(void)
+{
+ KConfig *kconfig = KGlobal::config();
+ kconfig->setGroup("Last Use Settings");
+ m_qlineeditFile->setText(kconfig->readEntry("KImportDlg_LastFile"));
+}
+
+void KImportDlg::writeConfig(void)
+{
+ KConfig *kconfig = KGlobal::config();
+ kconfig->setGroup("Last Use Settings");
+ kconfig->writeEntry("KImportDlg_LastFile", m_qlineeditFile->text());
+ kconfig->writeEntry("KImportDlg_LastProfile", m_profileComboBox->currentText());
+ kconfig->sync();
+}
+
+/** Make sure the text input is ok */
+void KImportDlg::slotFileTextChanged(const QString& text)
+{
+ if (!text.isEmpty() && KIO::NetAccess::exists(text, true, qApp->mainWidget())) {
+ // m_qcomboboxDateFormat->setEnabled(true);
+ m_qbuttonOk->setEnabled(true);
+ m_qlineeditFile->setText(text);
+ } else {
+ // m_qcomboboxDateFormat->setEnabled(false);
+ m_qbuttonOk->setEnabled(false);
+ }
+}
+
+void KImportDlg::slotNewProfile(void)
+{
+ MyMoneyQifProfileEditor* editor = new MyMoneyQifProfileEditor(true, this, "QIF Profile Editor");
+
+ if(editor->exec()) {
+ m_profileComboBox->setCurrentText(editor->selectedProfile());
+ loadProfiles();
+ }
+
+ delete editor;
+}
+
+void KImportDlg::slotSelectProfile(const QString& profile)
+{
+ m_profileComboBox->setCurrentText(profile);
+ loadProfiles();
+}
+
+void KImportDlg::loadProfiles(const bool selectLast)
+{
+ // Creating an editor object here makes sure that
+ // we have at least the default profile available
+ MyMoneyQifProfileEditor* edit = new MyMoneyQifProfileEditor(true, 0, 0);
+ edit->slotOk();
+ delete edit;
+
+ QString current = m_profileComboBox->currentText();
+
+ m_profileComboBox->clear();
+
+ QStringList list;
+ KConfig* config = KGlobal::config();
+ config->setGroup("Profiles");
+
+ list = config->readListEntry("profiles");
+ list.sort();
+ m_profileComboBox->insertStringList(list);
+
+ if(selectLast == true) {
+ config->setGroup("Last Use Settings");
+ current = config->readEntry("KImportDlg_LastProfile");
+ }
+
+ m_profileComboBox->setCurrentItem(0);
+ if(list.contains(current) > 0) {
+ m_profileComboBox->setCurrentText(current);
+ }
+}
+
+void KImportDlg::addCategories(QStringList& strList, const QString& id, const QString& leadIn) const
+{
+ MyMoneyFile *file = MyMoneyFile::instance();
+ QString name;
+
+ MyMoneyAccount account = file->account(id);
+
+ QStringList accList = account.accountList();
+ QStringList::ConstIterator it_a;
+
+ for(it_a = accList.begin(); it_a != accList.end(); ++it_a) {
+ account = file->account(*it_a);
+ strList << leadIn + account.name();
+ addCategories(strList, *it_a, leadIn + account.name() + MyMoneyFile::AccountSeperator);
+ }
+}
+
+
+#include "kimportdlg.moc"
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/dialogs/kimportdlg.h b/kmymoney2/dialogs/kimportdlg.h
new file mode 100644
index 0000000..06f1003
--- /dev/null
+++ b/kmymoney2/dialogs/kimportdlg.h
@@ -0,0 +1,118 @@
+/***************************************************************************
+ kimportdlg.h - description
+ -------------------
+ begin : Wed May 16 2001
+ copyright : (C) 2001 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@ctv.es>
+ Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+#ifndef KIMPORTDLG_H
+#define KIMPORTDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Headers
+
+#include <qstring.h>
+#include <qlineedit.h>
+#include <qcheckbox.h>
+
+// ----------------------------------------------------------------------------
+// KDE Headers
+
+#include <kurl.h>
+#include <kcombobox.h>
+
+// ----------------------------------------------------------------------------
+// Project Headers
+
+#include "../dialogs/kimportdlgdecl.h"
+
+/**
+ * This class is used to import a qif file to an account.
+ * It relies upon the QIF file handling routines in MyMoneyAccount to do
+ * the actual writing of QIF files.
+ *
+ * It uses the global KConfig object to read and write the application
+ * settings.
+ *
+ * @see MyMoneyAccount
+ *
+ * @author Felix Rodriguez, Michael Edwardes 2000-2001
+ *
+ * @short A class to import a qif file to an account.
+**/
+class KImportDlg : public KImportDlgDecl
+{
+ Q_OBJECT
+
+public:
+ /**
+ * Standard constructor
+ */
+ KImportDlg(QWidget *parent, const char *name = 0);
+
+ /** Standard destructor */
+ ~KImportDlg();
+
+ /**
+ */
+ const QString filename(void) const { return m_qlineeditFile->text(); };
+
+ /**
+ */
+ const QString profile(void) const { return m_profileComboBox->currentText(); };
+
+protected slots:
+ /** Called to let the user browse for a QIF file to import from. */
+ void slotBrowse();
+
+ /** Test whether to enable the buttons */
+ void slotFileTextChanged(const QString& text);
+
+ /**
+ * Called when the user needs a new profile
+ */
+ void slotNewProfile(void);
+
+ void slotOkClicked(void);
+
+ void slotSelectProfile(const QString& text);
+
+private:
+ /**
+ * This method loads the available profiles into
+ * the combo box. The parameter @p selectLast controls if
+ * the last profile used is preset or not. If preset is not
+ * selected, the current selection remains. If the currently selected
+ * text is not present in the list anymore, the first item will be
+ * selected.
+ *
+ * @param selectLast If true, the last used profile is selected. The
+ * default is false.
+ */
+ void loadProfiles(const bool selectLast = false);
+
+ /**
+ * This method is used to load an account hierarchy into a string list
+ *
+ * @param strList Reference to the string list to setup
+ * @param id Account id to add
+ * @param leadIn constant leadin to be added in front of the account name
+ */
+ void addCategories(QStringList& strList, const QString& id, const QString& leadIn) const;
+
+ void readConfig(void);
+ void writeConfig(void);
+};
+
+#endif
diff --git a/kmymoney2/dialogs/kimportdlgdecl.ui b/kmymoney2/dialogs/kimportdlgdecl.ui
new file mode 100644
index 0000000..c915f12
--- /dev/null
+++ b/kmymoney2/dialogs/kimportdlgdecl.ui
@@ -0,0 +1,246 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KImportDlgDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KImportDlgDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>476</width>
+ <height>303</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>QIF Import</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel1</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="resizePolicy">
+ <enum>Manual</enum>
+ </property>
+ <property name="text">
+ <string>From this dialog you are able to import transactions from a Quicken&lt;b&gt;&amp;trade;&lt;/b&gt; compatible file, (known as a QIF file, because of the extension).&lt;p&gt;
+
+Please enter the path to the QIF file or select it by clicking on the Browse button. Once you have the file's path press the Import button and KMyMoney will import all the transactions, categories and payees it finds.</string>
+ </property>
+ <property name="wordWrap">
+ <enum>WidgetWidth</enum>
+ </property>
+ <property name="autoFormatting">
+ <set>AutoAll</set>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout15</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>lblImportFile</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>QIF File to Import:</string>
+ </property>
+ </widget>
+ <widget class="QGroupBox" row="1" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>m_optionGroupBox</cstring>
+ </property>
+ <property name="title">
+ <string>Import options</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KComboBox" row="1" column="1">
+ <item>
+ <property name="text">
+ <string>Bank statement</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Other application</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_typeComboBox</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Select &lt;b&gt;Bank statement&lt;/b&gt; turns on automatic category matching which is turned off in case of &lt;b&gt;Historic data&lt;/b&gt;. Use the latter if you import files from other Personal Finance Management software.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Source of QIF</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel3_2</cstring>
+ </property>
+ <property name="text">
+ <string>QIF Profile</string>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="0" column="1">
+ <property name="name">
+ <cstring>m_profileComboBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="duplicatesEnabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="0" column="2">
+ <property name="name">
+ <cstring>m_profileEditorButton</cstring>
+ </property>
+ <property name="text">
+ <string>New...</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="KPushButton" row="0" column="2">
+ <property name="name">
+ <cstring>m_qbuttonBrowse</cstring>
+ </property>
+ <property name="text">
+ <string>Browse...</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>m_qlineeditFile</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="Line">
+ <property name="name">
+ <cstring>Line1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout90</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>411</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_qbuttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>Import</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_qbuttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/kloadtemplatedlg.cpp b/kmymoney2/dialogs/kloadtemplatedlg.cpp
new file mode 100644
index 0000000..d765f8a
--- /dev/null
+++ b/kmymoney2/dialogs/kloadtemplatedlg.cpp
@@ -0,0 +1,55 @@
+/***************************************************************************
+ kloadtemplatedlg.cpp
+ -------------------
+ copyright : (C) 2008 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kstdguiitem.h>
+#include <kpushbutton.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kloadtemplatedlg.h"
+#include "../widgets/kaccounttemplateselector.h"
+
+KLoadTemplateDlg::KLoadTemplateDlg(QWidget* parent, const char* name) :
+ KLoadTemplateDlgDecl(parent, name)
+{
+ buttonOk->setGuiItem(KStdGuiItem::ok());
+ buttonCancel->setGuiItem(KStdGuiItem::cancel());
+ buttonHelp->setGuiItem(KStdGuiItem::help());
+
+ connect(buttonHelp, SIGNAL(clicked()), this, SLOT(slotHelp()));
+}
+
+QValueList<MyMoneyTemplate> KLoadTemplateDlg::templates(void) const
+{
+ return m_templateSelector->selectedTemplates();
+}
+
+void KLoadTemplateDlg::slotHelp(void)
+{
+}
+
+#include "kloadtemplatedlg.moc"
diff --git a/kmymoney2/dialogs/kloadtemplatedlg.h b/kmymoney2/dialogs/kloadtemplatedlg.h
new file mode 100644
index 0000000..44fdfee
--- /dev/null
+++ b/kmymoney2/dialogs/kloadtemplatedlg.h
@@ -0,0 +1,46 @@
+/***************************************************************************
+ kloadtemplatedlg.h
+ -------------------
+ copyright : (C) 2008 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KLOADTEMPLATEDLG_H
+#define KLOADTEMPLATEDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneytemplate.h>
+#include "../dialogs/kloadtemplatedlgdecl.h"
+
+/// This dialog lets the user load more account templates
+class KLoadTemplateDlg : public KLoadTemplateDlgDecl
+{
+ Q_OBJECT
+
+ public:
+ KLoadTemplateDlg(QWidget *parent = 0, const char *name = 0);
+
+ QValueList<MyMoneyTemplate> templates(void) const;
+
+ private slots:
+ void slotHelp(void);
+};
+
+#endif
diff --git a/kmymoney2/dialogs/kloadtemplatedlgdecl.ui b/kmymoney2/dialogs/kloadtemplatedlgdecl.ui
new file mode 100644
index 0000000..4790de9
--- /dev/null
+++ b/kmymoney2/dialogs/kloadtemplatedlgdecl.ui
@@ -0,0 +1,106 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KLoadTemplateDlgDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KLoadTemplateDlgDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>636</width>
+ <height>509</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>MyDialog</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KAccountTemplateSelector">
+ <property name="name">
+ <cstring>m_templateSelector</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonHelp</cstring>
+ </property>
+ <property name="text">
+ <string>Help</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>228</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<connections>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>KLoadTemplateDlgDecl</receiver>
+ <slot>reject()</slot>
+ </connection>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>KLoadTemplateDlgDecl</receiver>
+ <slot>accept()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/kmergetransactionsdlg.cpp b/kmymoney2/dialogs/kmergetransactionsdlg.cpp
new file mode 100644
index 0000000..692c88f
--- /dev/null
+++ b/kmymoney2/dialogs/kmergetransactionsdlg.cpp
@@ -0,0 +1,55 @@
+/***************************************************************************
+ kmergetransactionsdlg.cpp
+ -------------------
+ begin : Sun Aug 20 2006
+ copyright : (C) 2006 by Ace Jones
+ email : <acejones@users.sf.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kpushbutton.h>
+#include <kapplication.h>
+#include <kactivelabel.h>
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmergetransactionsdlg.h"
+
+KMergeTransactionsDlg::KMergeTransactionsDlg(const MyMoneyAccount& account, QWidget* parent, const char* name) :
+ KSelectTransactionsDlg(account, parent, name)
+{
+
+ // setup descriptive texts
+ setCaption(i18n("Merge Transactions"));
+ m_description->setText(i18n("Are you sure you wish to merge these transactions?"));
+
+ // no selection possible
+ m_register->setSelectionMode(QTable::NoSelection);
+
+ // override default and enable ok button right away
+ buttonOk->setEnabled(true);
+}
+
+void KMergeTransactionsDlg::slotHelp(void)
+{
+ kapp->invokeHelp("details.ledgers.match");
+}
+
+#include "kmergetransactionsdlg.moc"
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/dialogs/kmergetransactionsdlg.h b/kmymoney2/dialogs/kmergetransactionsdlg.h
new file mode 100644
index 0000000..ebbfd82
--- /dev/null
+++ b/kmymoney2/dialogs/kmergetransactionsdlg.h
@@ -0,0 +1,52 @@
+/***************************************************************************
+ kmergetransactionsdlg.h
+ -------------------
+ begin : Sun Aug 20 2006
+ copyright : (C) 2006 by Ace Jones
+ email : <acejones@users.sf.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMERGETRANSACTIONSDLG_H
+#define KMERGETRANSACTIONSDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+class QResizeEvent;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kdebug.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/register.h>
+#include <kmymoney/mymoneyaccount.h>
+
+#include "../dialogs/kselecttransactionsdlg.h"
+
+class KMergeTransactionsDlg: public KSelectTransactionsDlg
+{
+ Q_OBJECT
+public:
+ KMergeTransactionsDlg(const MyMoneyAccount& account, QWidget* parent = 0, const char* name = 0);
+
+ bool eventFilter(QObject* , QEvent* ) { return false; }
+
+public slots:
+ void slotHelp();
+};
+
+#endif // KMERGETRANSACTIONSDLG_H
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/dialogs/kmymoneyfileinfodlg.cpp b/kmymoney2/dialogs/kmymoneyfileinfodlg.cpp
new file mode 100644
index 0000000..108c776
--- /dev/null
+++ b/kmymoney2/dialogs/kmymoneyfileinfodlg.cpp
@@ -0,0 +1,92 @@
+/***************************************************************************
+ kmymoneyfileinfodlg.cpp - description
+ -------------------
+ begin : Sun Oct 9 2005
+ copyright : (C) 2005 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlabel.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kpushbutton.h>
+#include <klistview.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoneyfileinfodlg.h"
+#include <kmymoney/imymoneystorage.h>
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/kmymoneyutils.h>
+
+KMyMoneyFileInfoDlg::KMyMoneyFileInfoDlg(QWidget *parent, const char *name )
+ : KMyMoneyFileInfoDlgDecl(parent, name)
+{
+ // Hide the unused buttons.
+ buttonCancel->hide();
+ buttonHelp->hide();
+
+ // Now fill the fields with data
+ IMyMoneyStorage* storage = MyMoneyFile::instance()->storage();
+
+ m_creationDate->setText(storage->creationDate().toString(Qt::ISODate));
+ m_lastModificationDate->setText(storage->lastModificationDate().toString(Qt::ISODate));
+ m_baseCurrency->setText(storage->value("kmm-baseCurrency"));
+
+ m_payeeCount->setText(QString("%1").arg(storage->payeeList().count()));
+ m_institutionCount->setText(QString("%1").arg(storage->institutionList().count()));
+
+ QValueList<MyMoneyAccount> a_list;
+ storage->accountList(a_list);
+ m_accountCount->setText(QString("%1").arg(a_list.count()));
+
+ QMap<MyMoneyAccount::accountTypeE, int> accountMap;
+ QMap<MyMoneyAccount::accountTypeE, int> accountMapClosed;
+ QValueList<MyMoneyAccount>::const_iterator it_a;
+ for(it_a = a_list.begin(); it_a != a_list.end(); ++it_a) {
+ accountMap[(*it_a).accountType()] = accountMap[(*it_a).accountType()] + 1;
+ accountMapClosed[(*it_a).accountType()] = accountMapClosed[(*it_a).accountType()] + 0;
+ if((*it_a).isClosed())
+ accountMapClosed[(*it_a).accountType()] = accountMapClosed[(*it_a).accountType()] + 1;
+ }
+
+ QMap<MyMoneyAccount::accountTypeE, int>::const_iterator it_m;
+ for(it_m = accountMap.begin(); it_m != accountMap.end(); ++it_m) {
+ new KListViewItem(m_accountView, KMyMoneyUtils::accountTypeToString(it_m.key()), QString("%1").arg(*it_m), QString("%1").arg(accountMapClosed[it_m.key()]));
+ }
+
+
+ MyMoneyTransactionFilter filter;
+ filter.setReportAllSplits(false);
+ m_transactionCount->setText(QString("%1").arg(storage->transactionList(filter).count()));
+ filter.setReportAllSplits(true);
+ m_splitCount->setText(QString("%1").arg(storage->transactionList(filter).count()));
+ m_scheduleCount->setText(QString("%1").arg(storage->scheduleList().count()));
+ MyMoneyPriceList list = storage->priceList();
+ MyMoneyPriceList::const_iterator it_p;
+ int pCount = 0;
+ for(it_p = list.begin(); it_p != list.end(); ++it_p)
+ pCount += (*it_p).count();
+ m_priceCount->setText(QString("%1").arg(pCount));
+}
+
+KMyMoneyFileInfoDlg::~KMyMoneyFileInfoDlg()
+{
+}
+
+#include "kmymoneyfileinfodlg.moc"
diff --git a/kmymoney2/dialogs/kmymoneyfileinfodlg.h b/kmymoney2/dialogs/kmymoneyfileinfodlg.h
new file mode 100644
index 0000000..9ba7f56
--- /dev/null
+++ b/kmymoney2/dialogs/kmymoneyfileinfodlg.h
@@ -0,0 +1,44 @@
+/***************************************************************************
+ kmymoneyfileinfodlg.h - description
+ -------------------
+ begin : Sun Oct 9 2005
+ copyright : (C) 2005 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYFILEINFODLG_H
+#define KMYMONEYFILEINFODLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../dialogs/kmymoneyfileinfodlgdecl.h"
+
+/**
+ * @author Thomas Baumgart
+ */
+
+class KMyMoneyFileInfoDlg : public KMyMoneyFileInfoDlgDecl
+{
+ Q_OBJECT
+public:
+ KMyMoneyFileInfoDlg(QWidget *parent=0, const char *name=0);
+ virtual ~KMyMoneyFileInfoDlg();
+};
+
+#endif
diff --git a/kmymoney2/dialogs/kmymoneyfileinfodlgdecl.ui b/kmymoney2/dialogs/kmymoneyfileinfodlgdecl.ui
new file mode 100644
index 0000000..fe2cd18
--- /dev/null
+++ b/kmymoney2/dialogs/kmymoneyfileinfodlgdecl.ui
@@ -0,0 +1,358 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KMyMoneyFileInfoDlgDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KMyMoneyFileInfoDlgDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>521</width>
+ <height>471</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>File Information</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <property name="modal">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="2" column="1">
+ <property name="name">
+ <cstring>m_baseCurrency</cstring>
+ </property>
+ <property name="text">
+ <string>x</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="9" column="1">
+ <property name="name">
+ <cstring>m_scheduleCount</cstring>
+ </property>
+ <property name="text">
+ <string>x</string>
+ </property>
+ </widget>
+ <widget class="KListView" row="6" column="0" rowspan="1" colspan="2">
+ <column>
+ <property name="text">
+ <string>Type</string>
+ </property>
+ <property name="clickable">
+ <bool>false</bool>
+ </property>
+ <property name="resizable">
+ <bool>false</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Total</string>
+ </property>
+ <property name="clickable">
+ <bool>false</bool>
+ </property>
+ <property name="resizable">
+ <bool>false</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Closed</string>
+ </property>
+ <property name="clickable">
+ <bool>false</bool>
+ </property>
+ <property name="resizable">
+ <bool>false</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>m_accountView</cstring>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="rootIsDecorated">
+ <bool>true</bool>
+ </property>
+ <property name="resizeMode">
+ <enum>AllColumns</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>textLabel7</cstring>
+ </property>
+ <property name="text">
+ <string>Accounts/Categories</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="10" column="0">
+ <property name="name">
+ <cstring>textLabel19</cstring>
+ </property>
+ <property name="text">
+ <string>Prices</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Created on</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="10" column="1">
+ <property name="name">
+ <cstring>m_priceCount</cstring>
+ </property>
+ <property name="text">
+ <string>x</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="9" column="0">
+ <property name="name">
+ <cstring>textLabel9</cstring>
+ </property>
+ <property name="text">
+ <string>Schedules</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="7" column="0">
+ <property name="name">
+ <cstring>textLabel8</cstring>
+ </property>
+ <property name="text">
+ <string>Transactions</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="8" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Splits</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="1">
+ <property name="name">
+ <cstring>m_payeeCount</cstring>
+ </property>
+ <property name="text">
+ <string>x</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="1">
+ <property name="name">
+ <cstring>m_institutionCount</cstring>
+ </property>
+ <property name="text">
+ <string>x</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>textLabel6</cstring>
+ </property>
+ <property name="text">
+ <string>Institutions</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>m_creationDate</cstring>
+ </property>
+ <property name="text">
+ <string>x</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="7" column="1">
+ <property name="name">
+ <cstring>m_transactionCount</cstring>
+ </property>
+ <property name="text">
+ <string>x</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="1">
+ <property name="name">
+ <cstring>m_accountCount</cstring>
+ </property>
+ <property name="text">
+ <string>x</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel10</cstring>
+ </property>
+ <property name="text">
+ <string>Payees</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>Base currency</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Last modified on</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="8" column="1">
+ <property name="name">
+ <cstring>m_splitCount</cstring>
+ </property>
+ <property name="text">
+ <string>x</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>m_lastModificationDate</cstring>
+ </property>
+ <property name="text">
+ <string>x</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="Line">
+ <property name="name">
+ <cstring>line1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonHelp</cstring>
+ </property>
+ <property name="text">
+ <string>Help</string>
+ </property>
+ <property name="accel">
+ <string>F1</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>120</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>2</number>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>KMyMoneyFileInfoDlgDecl</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>KMyMoneyFileInfoDlgDecl</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/kmymoneypricedlg.cpp b/kmymoney2/dialogs/kmymoneypricedlg.cpp
new file mode 100644
index 0000000..cd8d66f
--- /dev/null
+++ b/kmymoney2/dialogs/kmymoneypricedlg.cpp
@@ -0,0 +1,258 @@
+/***************************************************************************
+ kmymoneypricedlg.cpp
+ -------------------
+ begin : Wed Nov 24 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qcheckbox.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kpushbutton.h>
+#include <klistview.h>
+#include <kiconloader.h>
+#include <kguiitem.h>
+#include <kmessagebox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoneypricedlg.h"
+#include "kupdatestockpricedlg.h"
+#include "kcurrencycalculator.h"
+#include "../widgets/kmymoneypriceview.h"
+#include "kequitypriceupdatedlg.h"
+#include <kmymoney/kmymoneycurrencyselector.h>
+#include <kmymoney/mymoneyfile.h>
+
+#include "../kmymoneyglobalsettings.h"
+
+#define COMMODITY_COL 0
+#define CURRENCY_COL 1
+#define DATE_COL 2
+#define PRICE_COL 3
+#define SOURCE_COL 4
+
+KMyMoneyPriceDlg::KMyMoneyPriceDlg(QWidget* parent, const char *name) :
+ KMyMoneyPriceDlgDecl(parent, name)
+{
+ KIconLoader *il = KGlobal::iconLoader();
+ KGuiItem removeButtenItem( i18n( "&Delete" ),
+ QIconSet(il->loadIcon("delete", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Delete this entry"),
+ i18n("Remove this price item from the file"));
+ m_deleteButton->setGuiItem(removeButtenItem);
+
+ KGuiItem newButtenItem( i18n( "&New" ),
+ QIconSet(il->loadIcon("file_new", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Add a new entry"),
+ i18n("Create a new price entry."));
+ m_newButton->setGuiItem(newButtenItem);
+
+ KGuiItem editButtenItem( i18n( "&Edit" ),
+ QIconSet(il->loadIcon("edit", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Modify the selected entry"),
+ i18n("Change the details of selected price information."));
+ m_editButton->setGuiItem(editButtenItem);
+
+ KGuiItem okButtenItem( i18n("&Close" ),
+ QIconSet(il->loadIcon("button_ok", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Close the dialog"),
+ i18n("Use this to close the dialog and return to the application."));
+ m_closeButton->setGuiItem(okButtenItem);
+
+ connect(m_closeButton, SIGNAL(clicked()), this, SLOT(accept()));
+ connect(m_editButton, SIGNAL(clicked()), this, SLOT(slotEditPrice()));
+ connect(m_priceList, SIGNAL(editPrice()), this, SLOT(slotEditPrice()));
+ connect(m_deleteButton, SIGNAL(clicked()), this, SLOT(slotDeletePrice()));
+ connect(m_priceList, SIGNAL(deletePrice()), this, SLOT(slotDeletePrice()));
+ connect(m_newButton, SIGNAL(clicked()), this, SLOT(slotNewPrice()));
+ connect(m_priceList, SIGNAL(newPrice()), this, SLOT(slotNewPrice()));
+ connect(m_priceList, SIGNAL(selectionChanged(QListViewItem*)), this, SLOT(slotSelectPrice(QListViewItem*)));
+ connect(m_onlineQuoteButton, SIGNAL(clicked()), this, SLOT(slotOnlinePriceUpdate()));
+ connect(m_priceList, SIGNAL(onlinePriceUpdate()), this, SLOT(slotOnlinePriceUpdate()));
+
+ connect(m_showAllPrices, SIGNAL(toggled(bool)), this, SLOT(slotLoadWidgets()));
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotLoadWidgets()));
+
+ slotLoadWidgets();
+ slotSelectPrice(0);
+
+ // FIXME: for now, we don't have the logic to delete all prices in a given date range
+ m_deleteRangeButton->setEnabled(false);
+}
+
+KMyMoneyPriceDlg::~KMyMoneyPriceDlg()
+{
+}
+
+void KMyMoneyPriceDlg::slotLoadWidgets(void)
+{
+ m_priceList->clear();
+
+ MyMoneyPriceList list = MyMoneyFile::instance()->priceList();
+ MyMoneyPriceList::ConstIterator it_l;
+ for(it_l = list.begin(); it_l != list.end(); ++it_l) {
+ MyMoneyPriceEntries::ConstIterator it_e;
+ if(m_showAllPrices->isChecked()) {
+ for(it_e = (*it_l).begin(); it_e != (*it_l).end(); ++it_e) {
+ new KMyMoneyPriceItem(m_priceList, *it_e);
+ }
+ } else {
+ if((*it_l).count() > 0) {
+ it_e = (*it_l).end();
+ --it_e;
+ new KMyMoneyPriceItem(m_priceList, *it_e);
+ }
+ }
+ }
+}
+
+void KMyMoneyPriceDlg::slotSelectPrice(QListViewItem * item)
+{
+ m_currentItem = item;
+ m_editButton->setEnabled(item != 0);
+ m_deleteButton->setEnabled(item != 0);
+
+ // Modification of automatically added entries is not allowed
+ if(item) {
+ KMyMoneyPriceItem* priceitem = dynamic_cast<KMyMoneyPriceItem*>(item);
+ if(priceitem && (priceitem->price().source() == "KMyMoney")) {
+ m_editButton->setEnabled(false);
+ m_deleteButton->setEnabled(false);
+ }
+ }
+}
+
+void KMyMoneyPriceDlg::slotNewPrice(void)
+{
+ KUpdateStockPriceDlg dlg(this);
+ KMyMoneyPriceItem* item = dynamic_cast<KMyMoneyPriceItem*>(m_priceList->selectedItem());
+ if(item) {
+ MyMoneySecurity security;
+ security = MyMoneyFile::instance()->security(item->price().from());
+ dlg.m_security->setSecurity(security);
+ security = MyMoneyFile::instance()->security(item->price().to());
+ dlg.m_currency->setSecurity(security);
+ }
+
+ if(dlg.exec()) {
+ MyMoneyPrice price(dlg.m_security->security().id(), dlg.m_currency->security().id(), dlg.date(), MyMoneyMoney(1,1));
+ KMyMoneyPriceItem* p = new KMyMoneyPriceItem(m_priceList, price);
+ m_priceList->setSelected(p, true);
+ // If the user cancels the following operation, we delete the new item
+ // and re-select any previously selected one
+ if(slotEditPrice() == QDialog::Rejected) {
+ delete p;
+ if(item)
+ m_priceList->setSelected(item, true);
+ }
+ }
+}
+
+int KMyMoneyPriceDlg::slotEditPrice(void)
+{
+ int rc = QDialog::Rejected;
+ KMyMoneyPriceItem* item = dynamic_cast<KMyMoneyPriceItem*>(m_priceList->selectedItem());
+ if(item) {
+ MyMoneySecurity from(MyMoneyFile::instance()->security(item->price().from()));
+ MyMoneySecurity to(MyMoneyFile::instance()->security(item->price().to()));
+ signed64 fract = MyMoneyMoney::precToDenom(KMyMoneyGlobalSettings::pricePrecision());
+
+ KCurrencyCalculator calc(from,
+ to,
+ MyMoneyMoney(1,1),
+ item->price().rate(to.id()),
+ item->price().date(),
+ fract,
+ this, "currencyCalculator");
+ calc.setupPriceEditor();
+
+ rc = calc.exec();
+ }
+ return rc;
+}
+
+
+void KMyMoneyPriceDlg::slotDeletePrice(void)
+{
+ KMyMoneyPriceItem* item = dynamic_cast<KMyMoneyPriceItem*>(m_priceList->selectedItem());
+ if(item) {
+ if(KMessageBox::questionYesNo(this, i18n("Do you really want to delete the selected price entry?"), i18n("Delete price information"), KStdGuiItem::yes(), KStdGuiItem::no(), "DeletePrice") == KMessageBox::Yes) {
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyFile::instance()->removePrice(item->price());
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ qDebug("Cannot delete price");
+ delete e;
+ }
+ }
+ }
+}
+
+void KMyMoneyPriceDlg::slotOnlinePriceUpdate(void)
+{
+ KMyMoneyPriceItem* item = dynamic_cast<KMyMoneyPriceItem*>(m_priceList->selectedItem());
+ if(item)
+ {
+ KEquityPriceUpdateDlg dlg(this, (item->text(COMMODITY_COL)+" "+item->text(CURRENCY_COL)).utf8());
+ if(dlg.exec() == QDialog::Accepted)
+ dlg.storePrices();
+ } else {
+ KEquityPriceUpdateDlg dlg(this);
+ if(dlg.exec() == QDialog::Accepted)
+ dlg.storePrices();
+ }
+}
+
+#if 0
+// This function is not needed. However, removing the KUpdateStockPriceDlg
+// instantiation below causes link failures:
+
+// This seems to be fixed, so I #if 0'ed it out. Let's see, if someone
+// complains and if not, we get rid of this whole block one day. (2007-06-22 ipwizard)
+//
+// kmymoney2/widgets/kmymoneypriceview.cpp:179: undefined reference to
+// `KUpdateStockPriceDlg::KUpdateStockPriceDlg[in-charge](QWidget*, char const*)'
+// kmymoney2/widgets/kmymoneypriceview.cpp:204: undefined reference to
+// `KUpdateStockPriceDlg::KUpdateStockPriceDlg[in-charge](QDate const&, QString const&, QWidget*, char const*)'
+void KEditEquityEntryDlg_useless(void)
+{
+ delete new KUpdateStockPriceDlg();
+}
+#endif
+
+// Make sure, that these definitions are only used within this file
+// this does not seem to be necessary, but when building RPMs the
+// build option 'final' is used and all CPP files are concatenated.
+// So it could well be, that in another CPP file these definitions
+// are also used.
+#undef COMMODITY_COL
+#undef CURRENCY_COL
+#undef DATE_COL
+#undef PRICE_COL
+#undef SOURCE_COL
+
+
+#include "kmymoneypricedlg.moc"
diff --git a/kmymoney2/dialogs/kmymoneypricedlg.h b/kmymoney2/dialogs/kmymoneypricedlg.h
new file mode 100644
index 0000000..c7e7c99
--- /dev/null
+++ b/kmymoney2/dialogs/kmymoneypricedlg.h
@@ -0,0 +1,59 @@
+/***************************************************************************
+ kmymoneypricedlg.h
+ -------------------
+ begin : Wed Nov 24 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYPRICEDLG_H
+#define KMYMONEYPRICEDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+class QListViewItem;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoneypricedlgdecl.h"
+#include "kmymoney/mymoneyprice.h"
+
+class KMyMoneyPriceDlg : public KMyMoneyPriceDlgDecl
+{
+ Q_OBJECT
+public:
+ KMyMoneyPriceDlg(QWidget* parent, const char *name);
+ ~KMyMoneyPriceDlg();
+
+protected slots:
+ void slotSelectPrice(QListViewItem* item);
+ void slotNewPrice(void);
+ void slotDeletePrice(void);
+ int slotEditPrice(void);
+ void slotLoadWidgets(void);
+ void slotOnlinePriceUpdate(void);
+
+private:
+ QListViewItem* m_currentItem;
+};
+
+#endif // KMYMONEYPRICEDLG_H
diff --git a/kmymoney2/dialogs/kmymoneypricedlgdecl.ui b/kmymoney2/dialogs/kmymoneypricedlgdecl.ui
new file mode 100644
index 0000000..27895e3
--- /dev/null
+++ b/kmymoney2/dialogs/kmymoneypricedlgdecl.ui
@@ -0,0 +1,220 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>KMyMoneyPriceDlgDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KMyMoneyPriceDlgDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>806</width>
+ <height>440</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Price Editor</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout24</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout23</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KMyMoneyPriceView">
+ <property name="name">
+ <cstring>m_priceList</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_showAllPrices</cstring>
+ </property>
+ <property name="text">
+ <string>Show all stored prices</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout9</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_newButton</cstring>
+ </property>
+ <property name="text">
+ <string>New</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_editButton</cstring>
+ </property>
+ <property name="text">
+ <string>Modify</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_deleteButton</cstring>
+ </property>
+ <property name="text">
+ <string>Delete</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_deleteRangeButton</cstring>
+ </property>
+ <property name="text">
+ <string>Delete Range...</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer7</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>150</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_onlineQuoteButton</cstring>
+ </property>
+ <property name="text">
+ <string>Online Quotes</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="Line">
+ <property name="name">
+ <cstring>line2</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout8</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer8</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>560</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout7</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_closeButton</cstring>
+ </property>
+ <property name="text">
+ <string>Close</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>KMyMoneyPriceView</class>
+ <header location="local">../widgets/kmymoneypriceview.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="826">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000030149444154789cb59531681b5718c77f0e377c070e3c810a3a70e0041eac51852e0a19e45134830a1d9a4c69a04bc8928e990a693a640e1d0c8642b08742321894c1507991b484c890902bb8701a047760c3bd21701fe4201dde49b6a41a32b8df72dcbbeffdbefffbbfefbd5b1b0c07cce266ebe667ae2006c3c1dada0cdc3be87d6e6c35b0d692a409d9c7ec8b20d65ae29398d19b1114e7e3de4ce98b3f5e10dc0053cf0951b4506496e1b964bf7ce6c585d9054c62d01d617ca48be0596553cf496d8f2c8b01c5f795fc93904e85ec4c01a152857a5d9175d0b2805c872080f18595ccc1499a10a225d4e2fbc2877786fe81253ab6c04c8d106e09db5d43ab0d146e5c64d1a23938fb98a185cea1c33eecfd9eba49eb427dcb201e245365f2b7b2fb5b4a3a31dcb927178afe07d86901df870fefa4842aed6f6b74ba42e52b4014d580e1eb9cbd9d94de7e4aad16d2f9be02d805f0b5e532f927a1ffcacea1777f122a8105b164a7c25faf323a5d9f1f1fd600e1e5bec59e2d4b5c7ef5209d0ad17b8b31864e57c0b3e0815ac3ee33253ab664a770ff5185d1a1cb8d2267d3e58aa1dc7d2508cbe597d0e74fdd269aaaf0f52d414c4ea3e9762c996869e42560d7a72e41c4799a2586e74f95e8d8151481fa86efbe7b3398ac58b1a2b8527589f15451ad303ac2293542ad6648a796278f13a27185e4c4754310facb98c53a79e19a3fdc1426ff28c3d7399d1f7cb25343eb96106cf83c790ce9c4f2eb831855c55485663327992eb6dc8a6259874ed700b0b793323cccb9ffa842b30d6133e3e75fea989ac15a8b16ca76b746b0b92278d919774c5b6d48a78697fb29bbcf52468742a32120909c24e899ce67beed5be2db01e22d1e9485bb620e47f9ee9e606a21bd3f5d3744c7e7c54d55e87443867d8b554515ac5db4620e8e4f62263170fd1cdee90aad7640141992891b0f367c9adfe4049bb07d3b7022bd8c687c0978f46684ee084150b65ac1fcca94591b7a90a496e4c095164fb016a2b192a497795cc0f84817aebe25f7bf70ccc54a575c555c03f78ffa5fc0570d1f0c076bff0232285a0901e2257b0000000049454e44ae426082</data>
+ </image>
+</images>
+<tabstops>
+ <tabstop>m_newButton</tabstop>
+ <tabstop>m_editButton</tabstop>
+ <tabstop>m_deleteButton</tabstop>
+ <tabstop>m_onlineQuoteButton</tabstop>
+ <tabstop>m_closeButton</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/kmymoneysplittable.cpp b/kmymoney2/dialogs/kmymoneysplittable.cpp
new file mode 100644
index 0000000..5b5f1af
--- /dev/null
+++ b/kmymoney2/dialogs/kmymoneysplittable.cpp
@@ -0,0 +1,999 @@
+/***************************************************************************
+ kmymoneysplittable.cpp - description
+ -------------------
+ begin : Thu Jan 10 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include <kdecompat.h>
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qglobal.h>
+#include <qpainter.h>
+#include <qcursor.h>
+#include <qapplication.h>
+#include <qtimer.h>
+#include <qlayout.h>
+#include <qeventloop.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kglobal.h>
+#include <klocale.h>
+#include <kiconloader.h>
+#include <kmessagebox.h>
+#include <kcompletionbox.h>
+#include <kpushbutton.h>
+#include <kpopupmenu.h>
+#include <kstdaccel.h>
+#include <kshortcut.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoneysplittable.h"
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/kmymoneyedit.h>
+#include <kmymoney/kmymoneycategory.h>
+#include <kmymoney/kmymoneyaccountselector.h>
+#include <kmymoney/kmymoneylineedit.h>
+#include <kmymoney/mymoneysecurity.h>
+#include <kmymoney/kmymoneyglobalsettings.h>
+
+#include "../dialogs/kcurrencycalculator.h"
+
+#include "../mymoney/mymoneyutils.h"
+
+kMyMoneySplitTable::kMyMoneySplitTable(QWidget *parent, const char *name ) :
+ QTable(parent,name),
+ m_currentRow(0),
+ m_maxRows(0),
+ m_editMode(false),
+ m_amountWidth(80),
+ m_editCategory(0),
+ m_editMemo(0),
+ m_editAmount(0)
+{
+ // setup the transactions table
+ setNumRows(1);
+ setNumCols(3);
+ horizontalHeader()->setLabel(0, i18n("Category"));
+ horizontalHeader()->setLabel(1, i18n("Memo"));
+ horizontalHeader()->setLabel(2, i18n("Amount"));
+ setSelectionMode(QTable::NoSelection);
+ setLeftMargin(0);
+ verticalHeader()->hide();
+ setColumnStretchable(0, false);
+ setColumnStretchable(1, false);
+ setColumnStretchable(2, false);
+ horizontalHeader()->setResizeEnabled(false);
+ horizontalHeader()->setMovingEnabled(false);
+ horizontalHeader()->setFont(KMyMoneyGlobalSettings::listHeaderFont());
+
+ setVScrollBarMode(QScrollView::AlwaysOn);
+ // never show a horizontal scroll bar
+ setHScrollBarMode(QScrollView::AlwaysOff);
+
+ // setup the context menu
+ m_contextMenu = new KPopupMenu(this);
+ KIconLoader *il = KGlobal::iconLoader();
+ m_contextMenu->insertTitle(il->loadIcon("transaction", KIcon::MainToolbar), i18n("Split Options"));
+ m_contextMenu->insertItem(il->loadIcon("edit", KIcon::Small), i18n("Edit..."), this, SLOT(slotStartEdit()));
+ m_contextMenuDuplicate = m_contextMenu->insertItem(il->loadIcon("editcopy", KIcon::Small), i18n("Duplicate"), this, SLOT(slotDuplicateSplit()));
+ m_contextMenuDelete = m_contextMenu->insertItem(il->loadIcon("delete", KIcon::Small),
+ i18n("Delete ..."),
+ this, SLOT(slotDeleteSplit()));
+
+ connect(this, SIGNAL(clicked(int, int, int, const QPoint&)),
+ this, SLOT(slotSetFocus(int, int, int, const QPoint&)));
+
+ connect(this, SIGNAL(transactionChanged(const MyMoneyTransaction&)),
+ this, SLOT(slotUpdateData(const MyMoneyTransaction&)));
+}
+
+kMyMoneySplitTable::~kMyMoneySplitTable()
+{
+}
+
+void kMyMoneySplitTable::setup(const QMap<QString, MyMoneyMoney>& priceInfo)
+{
+ m_priceInfo = priceInfo;
+}
+
+const QColor kMyMoneySplitTable::rowBackgroundColor(const int row) const
+{
+ return (row % 2) ? KMyMoneyGlobalSettings::listColor() : KMyMoneyGlobalSettings::listBGColor();
+}
+
+void kMyMoneySplitTable::paintCell(QPainter *p, int row, int col, const QRect& r, bool /*selected*/)
+{
+ QColorGroup g = colorGroup();
+ QColor textColor;
+
+ g.setColor(QColorGroup::Base, rowBackgroundColor(row));
+
+ p->setFont(KMyMoneyGlobalSettings::listCellFont());
+
+ QString firsttext = text(row, col);
+ QString qstringCategory;
+ QString qstringMemo;
+
+ int intPos = firsttext.find("|");
+ if(intPos > -1)
+ {
+ qstringCategory = firsttext.left(intPos);
+ qstringMemo = firsttext.mid(intPos + 1);
+ }
+
+ QRect rr = r;
+ QRect rr2 = r;
+ rr.setX(0);
+ rr.setY(0);
+ rr.setWidth(columnWidth(col));
+ rr.setHeight(rowHeight(row));
+
+ rr2.setX(2);
+ rr2.setY(0);
+ rr2.setWidth(columnWidth(col)-4);
+ rr2.setHeight(rowHeight(row));
+
+
+ if(row == m_currentRow) {
+ QBrush backgroundBrush(g.highlight());
+ textColor = g.highlightedText();
+ p->fillRect(rr,backgroundBrush);
+
+ } else {
+ QBrush backgroundBrush(g.base());
+ textColor = g.text();
+ p->fillRect(rr,backgroundBrush);
+ }
+
+ if (KMyMoneyGlobalSettings::showGrid()) {
+ p->setPen(KMyMoneyGlobalSettings::listGridColor());
+ if(col != 0)
+ p->drawLine(rr.x(), 0, rr.x(), rr.height()-1); // left frame
+ p->drawLine(rr.x(), rr.y(), rr.width(), 0); // bottom frame
+ p->setPen(textColor);
+ }
+
+ switch (col) {
+ case 0: // category
+ case 1: // memo
+ p->drawText(rr2, Qt::AlignLeft | Qt::AlignVCenter, text(row, col));
+ break;
+
+ case 2: // amount
+ p->drawText(rr2, Qt::AlignRight | Qt::AlignVCenter,firsttext);
+ break;
+ }
+}
+
+/** Override the QTable member function to avoid display of focus */
+void kMyMoneySplitTable::paintFocus(QPainter * /* p */, const QRect & /*cr*/)
+{
+}
+
+void kMyMoneySplitTable::columnWidthChanged(int col)
+{
+ for (int i=0; i<numRows(); i++)
+ updateCell(i, col);
+}
+
+/** Override the QTable member function to avoid confusion with our own functionality */
+void kMyMoneySplitTable::endEdit(int /*row*/, int /*col*/, bool /*accept*/, bool /*replace*/ )
+{
+}
+
+bool kMyMoneySplitTable::eventFilter(QObject *o, QEvent *e)
+{
+ // MYMONEYTRACER(tracer);
+ QKeyEvent *k = static_cast<QKeyEvent *> (e);
+ bool rc = false;
+ int row = currentRow();
+ int lines = visibleHeight()/rowHeight(0);
+ QWidget* w;
+
+ if(e->type() == QEvent::KeyPress && !isEditMode()) {
+ rc = true;
+ switch(k->key()) {
+ case Qt::Key_Up:
+ if(row)
+ slotSetFocus(row-1);
+ break;
+
+ case Qt::Key_Down:
+ if(row < static_cast<int> (m_transaction.splits().count()-1))
+ slotSetFocus(row+1);
+ break;
+
+ case Qt::Key_Home:
+ slotSetFocus(0);
+ break;
+
+ case Qt::Key_End:
+ slotSetFocus(m_transaction.splits().count()-1);
+ break;
+
+ case Qt::Key_PageUp:
+ if(lines) {
+ while(lines-- > 0 && row)
+ row--;
+ slotSetFocus(row);
+ }
+ break;
+
+ case Qt::Key_PageDown:
+ if(row < static_cast<int> (m_transaction.splits().count()-1)) {
+ while(lines-- > 0 && row < static_cast<int> (m_transaction.splits().count()-1))
+ row++;
+ slotSetFocus(row);
+ }
+ break;
+
+ case Qt::Key_Delete:
+ slotDeleteSplit();
+ break;
+
+ case Qt::Key_Return:
+ case Qt::Key_Enter:
+ if(row < static_cast<int> (m_transaction.splits().count()-1)
+ && KMyMoneyGlobalSettings::enterMovesBetweenFields()) {
+ slotStartEdit();
+ } else
+ emit returnPressed();
+ break;
+
+ case Qt::Key_Escape:
+ emit escapePressed();
+ break;
+
+ case Qt::Key_F2:
+ slotStartEdit();
+ break;
+
+ default:
+ rc = true;
+ KShortcut copySplit(i18n("Duplicate split", "CTRL+c"));
+ KShortcut newSplit(QKeySequence(Qt::CTRL | Qt::Key_Insert));
+ if(copySplit.contains(KKey(k))) {
+ slotDuplicateSplit();
+
+ } else if(newSplit.contains(KKey(k))) {
+ slotSetFocus(m_transaction.splits().count()-1);
+ slotStartEdit();
+
+ } else if ( k->text()[ 0 ].isPrint() ) {
+ w = slotStartEdit();
+ // make sure, the widget receives the key again
+ QApplication::sendEvent(w, e);
+ }
+ break;
+ }
+
+ } else if(e->type() == QEvent::KeyPress && isEditMode()) {
+ bool terminate = true;
+ rc = true;
+ switch(k->key()) {
+ // suppress the F2 functionality to start editing in inline edit mode
+ case Qt::Key_F2:
+ // suppress the cursor movement in inline edit mode
+ case Qt::Key_Up:
+ case Qt::Key_Down:
+ case Qt::Key_PageUp:
+ case Qt::Key_PageDown:
+ break;
+
+ case Qt::Key_Return:
+ case Qt::Key_Enter:
+ // we cannot call the slot directly, as it destroys the caller of
+ // this method :-( So we let the event handler take care of calling
+ // the respective slot using a timeout. For a KLineEdit derived object
+ // it could be, that at this point the user selected a value from
+ // a completion list. In this case, we close the completion list and
+ // do not end editing of the transaction.
+ if(o->inherits("KLineEdit")) {
+ KLineEdit* le = dynamic_cast<KLineEdit*> (o);
+ KCompletionBox* box = le->completionBox(false);
+ if(box && box->isVisible()) {
+ terminate = false;
+ le->completionBox(false)->hide();
+ }
+ }
+
+ // in case we have the 'enter moves focus between fields', we need to simulate
+ // a TAB key when the object 'o' points to the category or memo field.
+ if(KMyMoneyGlobalSettings::enterMovesBetweenFields()) {
+ if(o == m_editCategory->lineEdit() || o == m_editMemo) {
+ terminate = false;
+ QKeyEvent evt(e->type(),
+ Key_Tab, 0, k->state(), QString::null,
+ k->isAutoRepeat(), k->count());
+
+ QApplication::sendEvent( o, &evt );
+ }
+ }
+
+ if(terminate) {
+ QTimer::singleShot(0, this, SLOT(slotEndEditKeyboard()));
+ }
+ break;
+
+ case Qt::Key_Escape:
+ // we cannot call the slot directly, as it destroys the caller of
+ // this method :-( So we let the event handler take care of calling
+ // the respective slot using a timeout.
+ QTimer::singleShot(0, this, SLOT(slotCancelEdit()));
+ break;
+
+ default:
+ rc = false;
+ break;
+ }
+ } else if(e->type() == QEvent::KeyRelease && !isEditMode()) {
+ // for some reason, we only see a KeyRelease event of the Menu key
+ // here. In other locations (e.g. Register::eventFilter()) we see
+ // a KeyPress event. Strange. (ipwizard - 2008-05-10)
+ switch(k->key()) {
+ case Qt::Key_Menu:
+ // if the very last entry is selected, the delete
+ // operation is not available otherwise it is
+ m_contextMenu->setItemEnabled(m_contextMenuDelete,
+ row < static_cast<int> (m_transaction.splits().count()-1));
+ m_contextMenu->setItemEnabled(m_contextMenuDuplicate,
+ row < static_cast<int> (m_transaction.splits().count()-1));
+
+ m_contextMenu->exec(QCursor::pos());
+ rc = true;
+ break;
+ default:
+ break;
+ }
+ }
+
+ // if the event has not been processed here, forward it to
+ // the base class implementation if it's not a key event
+ if(rc == false) {
+ if(e->type() != QEvent::KeyPress
+ && e->type() != QEvent::KeyRelease) {
+ rc = QTable::eventFilter(o, e);
+ }
+ }
+
+ return rc;
+}
+
+void kMyMoneySplitTable::slotSetFocus(int realrow, int /* col */, int button, const QPoint& /* point */)
+{
+ MYMONEYTRACER(tracer);
+ int row = realrow;
+
+ // adjust row to used area
+ if(row > static_cast<int> (m_transaction.splits().count()-1))
+ row = m_transaction.splits().count()-1;
+ if(row < 0)
+ row = 0;
+
+ // make sure the row will be on the screen
+ ensureCellVisible(row, 0);
+
+ if(button == Qt::LeftButton) { // left mouse button
+ if(isEditMode()) { // in edit mode?
+ if(KMyMoneyGlobalSettings::focusChangeIsEnter())
+ slotEndEdit();
+ else
+ slotCancelEdit();
+ }
+ if(row != static_cast<int> (currentRow())) {
+ // setup new current row and update visible selection
+ setCurrentCell(row, 0);
+ slotUpdateData(m_transaction);
+ }
+ } else if(button == Qt::RightButton) {
+ // context menu is only available when cursor is on
+ // an existing transaction or the first line after this area
+ if(row == realrow) {
+ // setup new current row and update visible selection
+ setCurrentCell(row, 0);
+ slotUpdateData(m_transaction);
+
+ // if the very last entry is selected, the delete
+ // operation is not available otherwise it is
+ m_contextMenu->setItemEnabled(m_contextMenuDelete,
+ row < static_cast<int> (m_transaction.splits().count()-1));
+ m_contextMenu->setItemEnabled(m_contextMenuDuplicate,
+ row < static_cast<int> (m_transaction.splits().count()-1));
+
+ m_contextMenu->exec(QCursor::pos());
+ }
+ }
+}
+
+void kMyMoneySplitTable::contentsMousePressEvent( QMouseEvent* e )
+{
+ slotSetFocus( rowAt(e->pos().y()), columnAt(e->pos().x()), e->button(), e->pos() );
+}
+
+/* turn off QTable behaviour */
+void kMyMoneySplitTable::contentsMouseReleaseEvent( QMouseEvent* /* e */ )
+{
+}
+
+void kMyMoneySplitTable::contentsMouseDoubleClickEvent( QMouseEvent *e )
+{
+ MYMONEYTRACER(tracer);
+
+ int col = columnAt(e->pos().x());
+ slotSetFocus( rowAt(e->pos().y()), col, e->button(), e->pos() );
+ slotStartEdit();
+
+ KLineEdit* editWidget = 0;
+ switch(col) {
+ case 1:
+ editWidget = m_editMemo;
+ break;
+
+ case 2:
+ editWidget = dynamic_cast<KLineEdit*> (m_editAmount->focusWidget());
+ break;
+
+ default:
+ break;
+ }
+ if(editWidget) {
+ editWidget->setFocus();
+ editWidget->selectAll();
+ // we need to call setFocus on the edit widget from the
+ // main loop again to get the keyboard focus to the widget also
+ QTimer::singleShot(0, editWidget, SLOT(setFocus()));
+ }
+}
+
+void kMyMoneySplitTable::setCurrentCell(int row, int /* col */)
+{
+ MYMONEYTRACER(tracer);
+
+ if(row > m_maxRows)
+ row = m_maxRows;
+ m_currentRow = row;
+ QTable::setCurrentCell(row, 0);
+ QValueList<MyMoneySplit> list = getSplits(m_transaction);
+ if(row < static_cast<int>(list.count()))
+ m_split = list[row];
+ else
+ m_split = MyMoneySplit();
+}
+
+void kMyMoneySplitTable::setNumRows(int irows)
+{
+ QTable::setNumRows(irows);
+
+ // determine row height according to the edit widgets
+ // we use the category widget as the base
+ QFontMetrics fm( KMyMoneyGlobalSettings::listCellFont() );
+ int height = fm.lineSpacing()+6;
+#if 0
+ // recalculate row height hint
+ KMyMoneyCategory cat;
+ height = QMAX(cat.sizeHint().height(), height);
+#endif
+
+ verticalHeader()->setUpdatesEnabled(false);
+
+ for(int i = 0; i < irows; ++i)
+ verticalHeader()->resizeSection(i, height);
+
+ verticalHeader()->setUpdatesEnabled(true);
+
+ // add or remove scrollbars as required
+ updateScrollBars();
+}
+
+void kMyMoneySplitTable::setTransaction(const MyMoneyTransaction& t, const MyMoneySplit& s, const MyMoneyAccount& acc)
+{
+ MYMONEYTRACER(tracer);
+ m_transaction = t;
+ m_account = acc;
+ m_hiddenSplit = s;
+ setCurrentCell(0, 0);
+ slotUpdateData(m_transaction);
+}
+
+const QValueList<MyMoneySplit> kMyMoneySplitTable::getSplits(const MyMoneyTransaction& t) const
+{
+ QValueList<MyMoneySplit> list;
+ QValueList<MyMoneySplit>::Iterator it;
+
+ // get list of splits
+ list = t.splits();
+
+ // and ignore the one that should be hidden
+
+ for(it = list.begin(); it != list.end(); ++it) {
+ if((*it).id() == m_hiddenSplit.id()) {
+ list.remove(it);
+ break;
+ }
+ }
+ return list;
+}
+
+void kMyMoneySplitTable::slotUpdateData(const MyMoneyTransaction& t)
+{
+ MYMONEYTRACER(tracer);
+ unsigned long rowCount=0;
+
+ QValueList<MyMoneySplit> list = getSplits(t);
+ updateTransactionTableSize();
+
+ // fill the part that is used by transactions
+ QValueList<MyMoneySplit>::Iterator it;
+ kMyMoneyEdit* valfield = new kMyMoneyEdit();
+ for(it = list.begin(); it != list.end(); ++it) {
+ QString colText;
+ MyMoneyMoney value = (*it).value();
+ if(!(*it).accountId().isEmpty()) {
+ try {
+ colText = MyMoneyFile::instance()->accountToCategory((*it).accountId());
+ } catch(MyMoneyException *e) {
+ qDebug("Unexpected exception in kMyMoneySplitTable::slotUpdateData()");
+ delete e;
+ }
+ }
+ QString amountTxt = value.formatMoney(m_account.fraction());
+ if(value == MyMoneyMoney::autoCalc) {
+ amountTxt = i18n("will be calculated");
+ }
+
+ if(colText.isEmpty() && (*it).memo().isEmpty() && value.isZero())
+ amountTxt = QString();
+
+ unsigned width = fontMetrics().width(amountTxt);
+ valfield->setMinimumWidth(width);
+ width = valfield->minimumSizeHint().width();
+
+ if(width > m_amountWidth)
+ m_amountWidth = width;
+
+ setText(rowCount, 0, colText);
+ setText(rowCount, 1, (*it).memo());
+ setText(rowCount, 2, amountTxt);
+
+ rowCount++;
+ }
+ delete valfield;
+
+ // now clean out the remainder of the table
+ while(rowCount < static_cast<unsigned long> (numRows())) {
+ setText(rowCount, 0, "");
+ setText(rowCount, 1, "");
+ setText(rowCount, 2, "");
+ ++rowCount;
+ }
+}
+
+void kMyMoneySplitTable::updateTransactionTableSize(void)
+{
+ // get current size of transactions table
+ int rowHeight = cellGeometry(0, 0).height();
+
+ // add half a row to the height to avoid unnecessary toggling when
+ // changing the number of rows
+ int tableHeight = (height() + rowHeight/2);
+ int splitCount = m_transaction.splits().count()-1;
+
+ if(splitCount < 0)
+ splitCount = 0;
+
+ // see if we need some extra lines to fill the current size with the grid
+ int numExtraLines = (tableHeight / rowHeight) - splitCount;
+ if(numExtraLines < 2)
+ numExtraLines = 2;
+
+ setNumRows(splitCount + numExtraLines);
+ // setMaxRows(splitCount);
+ m_maxRows = splitCount;
+}
+
+void kMyMoneySplitTable::resizeEvent(QResizeEvent* /* ev */)
+{
+ int w = visibleWidth() - m_amountWidth;
+
+ // resize the columns
+ setColumnWidth(0, w/2);
+ setColumnWidth(1, w/2);
+ setColumnWidth(2, m_amountWidth);
+
+ updateTransactionTableSize();
+}
+
+void kMyMoneySplitTable::slotDuplicateSplit(void)
+{
+ MYMONEYTRACER(tracer);
+ QValueList<MyMoneySplit> list = getSplits(m_transaction);
+ if(m_currentRow < static_cast<int> (list.count())) {
+ MyMoneySplit split = list[m_currentRow];
+ split.clearId();
+ try {
+ m_transaction.addSplit(split);
+ emit transactionChanged(m_transaction);
+ } catch(MyMoneyException *e) {
+ qDebug("Cannot duplicate split: %s", e->what().latin1());
+ delete e;
+ }
+ }
+}
+
+void kMyMoneySplitTable::slotDeleteSplit(void)
+{
+ MYMONEYTRACER(tracer);
+ QValueList<MyMoneySplit> list = getSplits(m_transaction);
+ if(m_currentRow < static_cast<int> (list.count())) {
+ if(KMessageBox::warningContinueCancel (this,
+ i18n("You are about to delete the selected split. "
+ "Do you really want to continue?"),
+ i18n("KMyMoney"),
+ i18n("Continue")
+ ) == KMessageBox::Continue) {
+ try {
+ m_transaction.removeSplit(list[m_currentRow]);
+ // if we removed the last split, select the previous
+ if(m_currentRow && m_currentRow == static_cast<int>(list.count())-1)
+ setCurrentCell(m_currentRow-1, 0);
+ else
+ setCurrentCell(m_currentRow, 0);
+ emit transactionChanged(m_transaction);
+ } catch(MyMoneyException *e) {
+ qDebug("Cannot remove split: %s", e->what().latin1());
+ delete e;
+ }
+ }
+ }
+}
+
+QWidget* kMyMoneySplitTable::slotStartEdit(void)
+{
+ MYMONEYTRACER(tracer);
+ return createEditWidgets();
+}
+
+void kMyMoneySplitTable::slotEndEdit(void)
+{
+ endEdit(false);
+}
+
+void kMyMoneySplitTable::slotEndEditKeyboard(void)
+{
+ endEdit(true);
+}
+
+void kMyMoneySplitTable::endEdit(bool keyBoardDriven)
+{
+ // Don't proceed, if we're not in edit mode
+ if(!m_editCategory)
+ return;
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ MYMONEYTRACER(tracer);
+ MyMoneySplit s1 = m_split;
+
+ if (m_editCategory->selectedItem().isEmpty()) {
+ KMessageBox::information(this, i18n("You need to assign a category to this split before it can be entered."), i18n("Enter split"), "EnterSplitWithEmptyCategory");
+ m_editCategory->setFocus();
+ return;
+ }
+
+ bool needUpdate = false;
+ if(m_editCategory->selectedItem() != m_split.accountId()) {
+ s1.setAccountId(m_editCategory->selectedItem());
+ needUpdate = true;
+ }
+ if(m_editMemo->text() != m_split.memo()) {
+ s1.setMemo(m_editMemo->text());
+ needUpdate = true;
+ }
+ if(m_editAmount->value() != m_split.value()) {
+ s1.setValue(m_editAmount->value());
+ needUpdate = true;
+ }
+
+ if(needUpdate) {
+ if(!s1.value().isZero()) {
+ MyMoneyAccount cat = file->account(s1.accountId());
+ if(cat.currencyId() != m_transaction.commodity()) {
+
+ MyMoneySecurity fromCurrency, toCurrency;
+ MyMoneyMoney fromValue, toValue;
+ fromCurrency = file->security(m_transaction.commodity());
+ toCurrency = file->security(cat.currencyId());
+
+ // determine the fraction required for this category
+ int fract = toCurrency.smallestAccountFraction();
+ if(cat.accountType() == MyMoneyAccount::Cash)
+ fract = toCurrency.smallestCashFraction();
+
+ // display only positive values to the user
+ fromValue = s1.value().abs();
+
+ // if we had a price info in the beginning, we use it here
+ if(m_priceInfo.find(cat.currencyId()) != m_priceInfo.end()) {
+ toValue = (fromValue * m_priceInfo[cat.currencyId()]).convert(fract);
+ }
+
+ // if the shares are still 0, we need to change that
+ if(toValue.isZero()) {
+ MyMoneyPrice price = MyMoneyFile::instance()->price(fromCurrency.id(), toCurrency.id());
+ // if the price is valid calculate the shares. If it is invalid
+ // assume a conversion rate of 1.0
+ if(price.isValid()) {
+ toValue = (price.rate(toCurrency.id()) * fromValue).convert(fract);
+ } else {
+ toValue = fromValue;
+ }
+ }
+
+ // now present all that to the user
+ KCurrencyCalculator calc(fromCurrency,
+ toCurrency,
+ fromValue,
+ toValue,
+ m_transaction.postDate(),
+ fract,
+ this, "currencyCalculator");
+
+ if(calc.exec() == QDialog::Rejected) {
+ return;
+ } else {
+ s1.setShares((s1.value() * calc.price()).convert(fract));
+ }
+
+ } else {
+ s1.setShares(s1.value());
+ }
+ } else
+ s1.setShares(s1.value());
+
+ m_split = s1;
+ try {
+ if(m_split.id().isEmpty()) {
+ m_transaction.addSplit(m_split);
+ } else {
+ m_transaction.modifySplit(m_split);
+ }
+ emit transactionChanged(m_transaction);
+ } catch(MyMoneyException *e) {
+ qDebug("Cannot add/modify split: %s", e->what().latin1());
+ delete e;
+ }
+ }
+ this->setFocus();
+ destroyEditWidgets();
+ slotSetFocus(currentRow()+1);
+
+ // if we still have more splits, we start editing right away
+ // in case we have selected 'enter moves betweeen fields'
+ if(keyBoardDriven
+ && currentRow() < static_cast<int> (m_transaction.splits().count()-1)
+ && KMyMoneyGlobalSettings::enterMovesBetweenFields()) {
+ slotStartEdit();
+ }
+
+}
+
+void kMyMoneySplitTable::slotCancelEdit(void)
+{
+ MYMONEYTRACER(tracer);
+ if(isEditMode()) {
+ destroyEditWidgets();
+ this->setFocus();
+ }
+}
+
+bool kMyMoneySplitTable::isEditMode(void) const
+{
+ return m_editMode;
+}
+
+void kMyMoneySplitTable::destroyEditWidgets(void)
+{
+ MYMONEYTRACER(tracer);
+
+ disconnect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotLoadEditWidgets()));
+
+ clearCellWidget(m_currentRow, 0);
+ clearCellWidget(m_currentRow, 1);
+ clearCellWidget(m_currentRow, 2);
+ clearCellWidget(m_currentRow+1, 0);
+ m_editMode = false;
+
+ QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput, 100);
+}
+
+QWidget* kMyMoneySplitTable::createEditWidgets(void)
+{
+ MYMONEYTRACER(tracer);
+
+ QFont cellFont = KMyMoneyGlobalSettings::listCellFont();
+ m_tabOrderWidgets.clear();
+
+ // create the widgets
+ m_editAmount = new kMyMoneyEdit(0);
+ m_editAmount->setFont(cellFont);
+ m_editAmount->setResetButtonVisible(false);
+
+ m_editCategory = new KMyMoneyCategory();
+ m_editCategory->setHint(i18n("Category"));
+ m_editCategory->setFont(cellFont);
+ connect(m_editCategory, SIGNAL(createItem(const QString&, QString&)), this, SIGNAL(createCategory(const QString&, QString&)));
+ connect(m_editCategory, SIGNAL(objectCreation(bool)), this, SIGNAL(objectCreation(bool)));
+
+ m_editMemo = new kMyMoneyLineEdit(0, 0, false, AlignLeft|AlignVCenter);
+ m_editMemo->setHint(i18n("Memo"));
+ m_editMemo->setFont(cellFont);
+
+ // create buttons for the mouse users
+ KIconLoader *il = KGlobal::iconLoader();
+ m_registerButtonFrame = new QFrame(this, "buttonFrame");
+ QPalette palette = m_registerButtonFrame->palette();
+ palette.setColor(QColorGroup::Background, rowBackgroundColor(m_currentRow+1) );
+ m_registerButtonFrame->setPalette(palette);
+
+ QHBoxLayout* l = new QHBoxLayout(m_registerButtonFrame);
+ m_registerEnterButton = new KPushButton(il->loadIcon("button_ok", KIcon::Small, KIcon::SizeSmall), QString(), m_registerButtonFrame, "EnterButton");
+
+ m_registerCancelButton = new KPushButton(il->loadIcon("button_cancel", KIcon::Small, KIcon::SizeSmall), QString(), m_registerButtonFrame, "CancelButton");
+
+ l->addWidget(m_registerEnterButton);
+ l->addWidget(m_registerCancelButton);
+ l->addStretch(2);
+
+ connect(m_registerEnterButton, SIGNAL(clicked()), this, SLOT(slotEndEdit()));
+ connect(m_registerCancelButton, SIGNAL(clicked()), this, SLOT(slotCancelEdit()));
+
+ // setup tab order
+ addToTabOrder(m_editCategory);
+ addToTabOrder(m_editMemo);
+ addToTabOrder(m_editAmount);
+ addToTabOrder(m_registerEnterButton);
+ addToTabOrder(m_registerCancelButton);
+
+ if(!m_split.accountId().isEmpty()) {
+ m_editCategory->setSelectedItem(m_split.accountId());
+ } else {
+ // check if the transaction is balanced or not. If not,
+ // assign the remainder to the amount.
+ MyMoneyMoney diff;
+ QValueList<MyMoneySplit> list = m_transaction.splits();
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ for(it_s = list.begin(); it_s != list.end(); ++it_s) {
+ if(!(*it_s).accountId().isEmpty())
+ diff += (*it_s).value();
+ }
+ m_split.setValue(-diff);
+ }
+
+ m_editMemo->loadText(m_split.memo());
+ // don't allow automatically calculated values to be modified
+ if(m_split.value() == MyMoneyMoney::autoCalc) {
+ m_editAmount->setEnabled(false);
+ m_editAmount->loadText("will be calculated");
+ } else
+ m_editAmount->setValue(m_split.value());
+
+ setCellWidget(m_currentRow, 0, m_editCategory);
+ setCellWidget(m_currentRow, 1, m_editMemo);
+ setCellWidget(m_currentRow, 2, m_editAmount);
+ setCellWidget(m_currentRow+1, 0, m_registerButtonFrame);
+
+ // load e.g. the category widget with the account list
+ slotLoadEditWidgets();
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotLoadEditWidgets()));
+
+ // setup the keyboard filter for all widgets
+ for(QWidget* w = m_tabOrderWidgets.first(); w; w = m_tabOrderWidgets.next()) {
+ w->installEventFilter(this);
+ }
+
+ m_editCategory->setFocus();
+ m_editCategory->lineEdit()->selectAll();
+ m_editMode = true;
+
+ return m_editCategory->lineEdit();
+}
+
+void kMyMoneySplitTable::slotLoadEditWidgets(void)
+{
+ // reload category widget
+ QString categoryId = m_editCategory->selectedItem();
+
+ AccountSet aSet;
+ aSet.addAccountGroup(MyMoneyAccount::Asset);
+ aSet.addAccountGroup(MyMoneyAccount::Liability);
+ aSet.addAccountGroup(MyMoneyAccount::Income);
+ aSet.addAccountGroup(MyMoneyAccount::Expense);
+ if(KMyMoneyGlobalSettings::expertMode())
+ aSet.addAccountGroup(MyMoneyAccount::Equity);
+
+ // remove the accounts with invalid types at this point
+ aSet.removeAccountType(MyMoneyAccount::CertificateDep);
+ aSet.removeAccountType(MyMoneyAccount::Investment);
+ aSet.removeAccountType(MyMoneyAccount::Stock);
+ aSet.removeAccountType(MyMoneyAccount::MoneyMarket);
+
+ aSet.load(m_editCategory->selector());
+
+ // if an account is specified then remove it from the widget so that the user
+ // cannot create a transfer with from and to account being the same account
+ if(!m_account.id().isEmpty())
+ m_editCategory->selector()->removeItem(m_account.id());
+
+ if(!categoryId.isEmpty())
+ m_editCategory->setSelectedItem(categoryId);
+
+}
+
+void kMyMoneySplitTable::addToTabOrder(QWidget* w)
+{
+ if(w) {
+ while(w->focusProxy())
+ w = w->focusProxy();
+ m_tabOrderWidgets.append(w);
+ }
+}
+
+bool kMyMoneySplitTable::focusNextPrevChild(bool next)
+{
+ MYMONEYTRACER(tracer);
+ bool rc = false;
+
+ if(m_editCategory) {
+ QWidget *w = 0;
+ QWidget *currentWidget;
+
+ m_tabOrderWidgets.find(qApp->focusWidget());
+ currentWidget = m_tabOrderWidgets.current();
+ w = next ? m_tabOrderWidgets.next() : m_tabOrderWidgets.prev();
+
+ do {
+ if(!w) {
+ w = next ? m_tabOrderWidgets.first() : m_tabOrderWidgets.last();
+ }
+
+ if(w != currentWidget
+ && ((w->focusPolicy() & TabFocus) == TabFocus)
+ && w->isVisible() && w->isEnabled()) {
+ w->setFocus();
+ rc = true;
+ break;
+ }
+ w = next ? m_tabOrderWidgets.next() : m_tabOrderWidgets.prev();
+ } while(w != currentWidget);
+
+ } else
+ rc = QTable::focusNextPrevChild(next);
+
+ return rc;
+}
+
+
+
+#include "kmymoneysplittable.moc"
diff --git a/kmymoney2/dialogs/kmymoneysplittable.h b/kmymoney2/dialogs/kmymoneysplittable.h
new file mode 100644
index 0000000..023660f
--- /dev/null
+++ b/kmymoney2/dialogs/kmymoneysplittable.h
@@ -0,0 +1,264 @@
+/***************************************************************************
+ kmymoneysplittable.h - description
+ -------------------
+ begin : Thu Jan 10 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYSPLITTABLE_H
+#define KMYMONEYSPLITTABLE_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+#include <qtable.h>
+#include <qwidgetlist.h>
+#include <qguardedptr.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+class KPopupMenu;
+class KPushButton;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../mymoney/mymoneytransaction.h"
+#include "../mymoney/mymoneyaccount.h"
+
+class KMyMoneyCategory;
+class kMyMoneyLineEdit;
+class kMyMoneyEdit;
+
+/**
+ * @author Thomas Baumgart
+ */
+class kMyMoneySplitTable : public QTable
+{
+ Q_OBJECT
+public:
+ kMyMoneySplitTable(QWidget *parent=0, const char *name=0);
+ virtual ~kMyMoneySplitTable();
+
+ void paintCell(QPainter *p, int row, int col, const QRect& r, bool /*selected*/);
+ void paintFocus(QPainter *p, const QRect &cr);
+
+ /**
+ * This method is used to load the widget with the information about
+ * the transaction @p t. The split referencing the account @p acc is
+ * not shown in the widget.
+ *
+ * @param t reference to transaction to be shown/modified
+ * @param s reference to split that is to be hidden
+ * @param acc reference to account
+ */
+ void setTransaction(const MyMoneyTransaction& t, const MyMoneySplit& s, const MyMoneyAccount& acc);
+
+ /**
+ * This method is used to retrieve the transaction from the widget.
+ */
+ const MyMoneyTransaction& transaction(void) const { return m_transaction; }
+
+ /**
+ * Returns a list of MyMoneySplit objects. It contains all but the one
+ * referencing the account passed in setTransaction().
+ *
+ * @param t reference to transaction
+ * @return list of splits
+ */
+ const QValueList<MyMoneySplit> getSplits(const MyMoneyTransaction& t) const;
+
+ void setup(const QMap<QString, MyMoneyMoney>& priceInfo);
+
+protected:
+ void contentsMousePressEvent( QMouseEvent* e );
+ void contentsMouseReleaseEvent( QMouseEvent* e );
+ void contentsMouseDoubleClickEvent( QMouseEvent* e );
+ bool eventFilter(QObject *o, QEvent *e);
+ void endEdit(int row, int col, bool accept, bool replace );
+
+ void resizeEvent(QResizeEvent*);
+ QWidget* createEditWidgets(void);
+ void destroyEditWidgets(void);
+
+ /**
+ * This method handles the focus of the keyboard. When in edit mode
+ * (m_editCategory widget is visible) the keyboard focus is handled
+ * according to the widgets that are referenced in m_tabOrderWidgets.
+ * If not in edit mode, the base class functionality is provided.
+ *
+ * @param next true if forward-tab, false if backward-tab was
+ * pressed by the user
+ */
+ virtual bool focusNextPrevChild(bool next);
+ void addToTabOrder(QWidget* w);
+
+ /**
+ * convenience function for setCurrentCell(int row, int col)
+ */
+ void setCurrentCell(int row) { setCurrentCell(row, 0); }
+
+ void updateTransactionTableSize(void);
+
+ /**
+ * This method returns the current state of the inline editing mode
+ *
+ * @return true if inline edit mode is on, false otherwise
+ */
+ bool isEditMode(void) const;
+
+ /**
+ * This method retuns the background color for a given @p row.
+ *
+ * @param row the row in question
+ * @return the color as QColor object
+ */
+ const QColor rowBackgroundColor(const int row) const;
+
+ void endEdit(bool keyboardDriven);
+
+public slots:
+ /** No descriptions */
+ virtual void setCurrentCell(int row, int col);
+
+ virtual void setNumRows(int r);
+
+ QWidget* slotStartEdit(void);
+ void slotEndEdit(void);
+ void slotEndEditKeyboard(void);
+ void slotDeleteSplit(void);
+ void slotCancelEdit(void);
+ void slotDuplicateSplit(void);
+
+protected slots:
+ virtual void columnWidthChanged(int col);
+
+ /// move the focus to the selected @p row.
+ void slotSetFocus(int row, int col = 0, int button = Qt::LeftButton, const QPoint & mousePos = QPoint(0, 0));
+
+ /**
+ * Calling this slot refills the widget with the data
+ * passed in the argument @p t.
+ *
+ * @param t reference to transaction data
+ */
+ void slotUpdateData(const MyMoneyTransaction& t);
+
+ void slotLoadEditWidgets(void);
+
+signals:
+ /**
+ * This signal is emitted whenever the return key is pressed
+ * and the widget is not in edit mode.
+ */
+ void escapePressed(void);
+
+ /**
+ * This signal is emitted whenever the return key is pressed
+ * and the widget is not in edit mode.
+ */
+ void returnPressed(void);
+
+ /**
+ * This signal is emitted whenever the transaction data has been changed
+ *
+ * @param t modified transaction data
+ */
+ void transactionChanged(const MyMoneyTransaction& t);
+
+ /**
+ * This signal is sent out, when a new category needs to be created
+ * @sa KMyMoneyCombo::createItem()
+ *
+ * @param txt The name of the category to be created
+ * @param id A connected slot should store the id of the created object in this variable
+ */
+ void createCategory(const QString& txt, QString& id);
+
+ /**
+ * Signal is emitted, if any of the widgets enters (@a state equals @a true)
+ * or leaves (@a state equals @a false) object creation mode.
+ *
+ * @param state Enter (@a true) or leave (@a false) object creation
+ */
+ void objectCreation(bool state);
+
+private:
+ /// the currently selected row (will be printed as selected)
+ int m_currentRow;
+
+ /// the number of rows filled with data
+ int m_maxRows;
+
+ /// indication if inline editing mode is on or not
+ bool m_editMode;
+
+ MyMoneyTransaction m_transaction;
+ MyMoneyAccount m_account;
+ MyMoneySplit m_split;
+ MyMoneySplit m_hiddenSplit;
+
+ unsigned m_amountWidth;
+
+ /**
+ * This member keeps a pointer to the context menu
+ */
+ KPopupMenu* m_contextMenu;
+
+ /// keeps the id of the delete entry in the context menu
+ int m_contextMenuDelete;
+
+ /// keeps the id of the duplicate entry in the context menu
+ int m_contextMenuDuplicate;
+
+ /**
+ * This member contains a pointer to the input widget for the category.
+ * The widget will be created and destroyed dynamically in createInputWidgets()
+ * and destroyInputWidgets().
+ */
+ QGuardedPtr<KMyMoneyCategory> m_editCategory;
+
+ /**
+ * This member contains a pointer to the input widget for the memo.
+ * The widget will be created and destroyed dynamically in createInputWidgets()
+ * and destroyInputWidgets().
+ */
+ QGuardedPtr<kMyMoneyLineEdit> m_editMemo;
+
+ /**
+ * This member contains a pointer to the input widget for the amount.
+ * The widget will be created and destroyed dynamically in createInputWidgets()
+ * and destroyInputWidgets().
+ */
+ QGuardedPtr<kMyMoneyEdit> m_editAmount;
+
+ /**
+ * This member keeps the tab order for the above widgets
+ */
+ QWidgetList m_tabOrderWidgets;
+
+ QGuardedPtr<QFrame> m_registerButtonFrame;
+ QGuardedPtr<KPushButton> m_registerEnterButton;
+ QGuardedPtr<KPushButton> m_registerCancelButton;
+
+ QMap<QString, MyMoneyMoney> m_priceInfo;
+};
+
+#endif
diff --git a/kmymoney2/dialogs/knewaccountdlg.cpp b/kmymoney2/dialogs/knewaccountdlg.cpp
new file mode 100644
index 0000000..f941f2e
--- /dev/null
+++ b/kmymoney2/dialogs/knewaccountdlg.cpp
@@ -0,0 +1,1209 @@
+/***************************************************************************
+ knewaccountdlg.cpp
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes
+ 2004 by Thomas Baumgart
+ email : mte@users.sourceforge.net
+ ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qpixmap.h>
+#include <qpushbutton.h>
+#include <qlabel.h>
+#include <qheader.h>
+#include <qtooltip.h>
+#include <qcheckbox.h>
+#include <qtimer.h>
+#include <qtabwidget.h>
+#include <qbuttongroup.h>
+#include <qradiobutton.h>
+#include <qtextedit.h>
+#include <qlayout.h>
+#include <qtabwidget.h>
+
+// ----------------------------------------------------------------------------
+// KDE Headers
+
+#include <klocale.h>
+#include <kglobal.h>
+#include <kmessagebox.h>
+#include <kcombobox.h>
+#include <klistview.h>
+#include <kstandarddirs.h>
+#include <kiconloader.h>
+#include <kpushbutton.h>
+#include <kled.h>
+#include <kdebug.h>
+#include <kglobalsettings.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "knewaccountdlg.h"
+
+#include <kmymoney/kmymoneyedit.h>
+#include <kmymoney/kmymoneydateinput.h>
+#include <kmymoney/mymoneyexception.h>
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/kmymoneyaccounttree.h>
+#include <kmymoney/kmymoneyglobalsettings.h>
+#include <kmymoney/mymoneyreport.h>
+#include <kmymoney/kguiutils.h>
+#include <kmymoney/kmymoneycombo.h>
+
+#include "../widgets/kmymoneycurrencyselector.h"
+#include "../widgets/kmymoneyaccountselector.h"
+
+#include "../mymoney/mymoneyexception.h"
+#include "../mymoney/mymoneykeyvaluecontainer.h"
+#include "../dialogs/knewbankdlg.h"
+#include "../views/kmymoneyfile.h"
+#include "../kmymoneyutils.h"
+
+#include "../reports/kreportchartview.h"
+#include "../reports/pivottable.h"
+
+// in KOffice version < 1.5 KDCHART_PROPSET_NORMAL_DATA was a static const
+// but in 1.5 this has been changed into a #define'd value. So we have to
+// make sure, we use the right one.
+#ifndef KDCHART_PROPSET_NORMAL_DATA
+#define KMM_KDCHART_PROPSET_NORMAL_DATA KDChartParams::KDCHART_PROPSET_NORMAL_DATA
+#else
+#define KMM_KDCHART_PROPSET_NORMAL_DATA KDCHART_PROPSET_NORMAL_DATA
+#endif
+
+KNewAccountDlg::KNewAccountDlg(const MyMoneyAccount& account, bool isEditing, bool categoryEditor, QWidget *parent, const char *name, const QString& title)
+ : KNewAccountDlgDecl(parent,name,true),
+ m_account(account),
+ m_bSelectedParentAccount(false),
+ m_categoryEditor(categoryEditor),
+ m_isEditing(isEditing)
+{
+ QString columnName = ( (categoryEditor) ? i18n("Categories") : i18n("Accounts") );
+
+ m_qlistviewParentAccounts->setRootIsDecorated(true);
+ m_qlistviewParentAccounts->setAllColumnsShowFocus(true);
+ m_qlistviewParentAccounts->setSectionHeader(columnName);
+ m_qlistviewParentAccounts->setMultiSelection(false);
+ m_qlistviewParentAccounts->header()->setResizeEnabled(true);
+ m_qlistviewParentAccounts->setColumnWidthMode(0, QListView::Maximum);
+ m_qlistviewParentAccounts->setEnabled(false);
+ // never show the horizontal scroll bar
+ m_qlistviewParentAccounts->setHScrollBarMode(QScrollView::AlwaysOff);
+
+ m_subAccountLabel->setText(i18n("Is a sub account"));
+
+ m_qlistviewParentAccounts->header()->setFont(KMyMoneyGlobalSettings::listHeaderFont());
+
+ accountNameEdit->setText(account.name());
+ descriptionEdit->setText(account.description());
+
+ typeCombo->setEnabled(true);
+ MyMoneyFile *file = MyMoneyFile::instance();
+
+ // load the price mode combo
+ m_priceMode->insertItem(i18n("default price mode", "<default>"), 0);
+ m_priceMode->insertItem(i18n("Price per share"), 1);
+ m_priceMode->insertItem(i18n("Total for all shares"), 2);
+
+ int priceMode = 0;
+ if(m_account.accountType() == MyMoneyAccount::Investment) {
+ m_priceMode->setEnabled(true);
+ if(!m_account.value("priceMode").isEmpty())
+ priceMode = m_account.value("priceMode").toInt();
+ }
+ m_priceMode->setCurrentItem(priceMode);
+
+ bool haveMinBalance = false;
+ bool haveMaxCredit = false;
+ if (categoryEditor)
+ {
+ // get rid of the tabs that are not used for categories
+ QWidget* tab = m_tab->page(m_tab->indexOf(m_institutionTab));
+ if(tab)
+ m_tab->removePage(tab);
+ tab = m_tab->page(m_tab->indexOf(m_limitsTab));
+ if(tab)
+ m_tab->removePage(tab);
+
+ //m_qlistviewParentAccounts->setEnabled(true);
+ startDateEdit->setEnabled(false);
+ accountNoEdit->setEnabled(false);
+
+ m_institutionBox->hide();
+ m_qcheckboxNoVat->hide();
+
+ typeCombo->insertItem(KMyMoneyUtils::accountTypeToString(MyMoneyAccount::Income));
+ typeCombo->insertItem(KMyMoneyUtils::accountTypeToString(MyMoneyAccount::Expense));
+
+ // Hardcoded but acceptable
+ switch (account.accountType())
+ {
+ case MyMoneyAccount::Income:
+ typeCombo->setCurrentItem(0);
+ break;
+
+ case MyMoneyAccount::Expense:
+ default:
+ typeCombo->setCurrentItem(1);
+ break;
+ }
+ m_currency->setEnabled(true);
+ if (m_isEditing)
+ {
+ typeCombo->setEnabled(false);
+ m_currency->setDisabled(MyMoneyFile::instance()->isReferenced(m_account));
+ }
+ m_qcheckboxPreferred->hide();
+
+ m_qcheckboxTax->setChecked(account.value("Tax") == "Yes");
+ loadVatAccounts();
+ }
+ else
+ {
+ // get rid of the tabs that are not used for accounts
+ QWidget* taxtab = m_tab->page(m_tab->indexOf(m_taxTab));
+ if (taxtab) {
+ if(m_account.isAssetLiability()) {
+ m_vatCategory->setText(i18n( "VAT account"));
+ m_vatAssignmentFrame->hide();
+ m_qcheckboxTax->setChecked(account.value("Tax") == "Yes");
+ } else {
+ m_tab->removePage(taxtab);
+ }
+ }
+
+ switch(m_account.accountType()) {
+ case MyMoneyAccount::Savings:
+ case MyMoneyAccount::Cash:
+ haveMinBalance = true;
+ break;
+
+ case MyMoneyAccount::Checkings:
+ haveMinBalance = true;
+ haveMaxCredit = true;
+ break;
+
+ case MyMoneyAccount::CreditCard:
+ haveMaxCredit = true;
+ break;
+
+ default:
+ // no limit available, so we might get rid of the tab
+ QWidget* tab = m_tab->page(m_tab->indexOf(m_limitsTab));
+ if(tab)
+ m_tab->removePage(tab);
+ // don't try to hide the widgets we just wiped
+ // in the next step
+ haveMaxCredit = haveMinBalance = true;
+ break;
+ }
+
+ if(!haveMaxCredit) {
+ m_maxCreditLabel->setEnabled(false);
+ m_maxCreditLabel->hide();
+ m_maxCreditEarlyEdit->hide();
+ m_maxCreditAbsoluteEdit->hide();
+ }
+ if(!haveMinBalance) {
+ m_minBalanceLabel->setEnabled(false);
+ m_minBalanceLabel->hide();
+ m_minBalanceEarlyEdit->hide();
+ m_minBalanceAbsoluteEdit->hide();
+ }
+
+ typeCombo->insertItem(KMyMoneyUtils::accountTypeToString(MyMoneyAccount::Checkings));
+ typeCombo->insertItem(KMyMoneyUtils::accountTypeToString(MyMoneyAccount::Savings));
+ typeCombo->insertItem(KMyMoneyUtils::accountTypeToString(MyMoneyAccount::Cash));
+ typeCombo->insertItem(KMyMoneyUtils::accountTypeToString(MyMoneyAccount::CreditCard));
+ typeCombo->insertItem(KMyMoneyUtils::accountTypeToString(MyMoneyAccount::Loan));
+ typeCombo->insertItem(KMyMoneyUtils::accountTypeToString(MyMoneyAccount::Investment));
+ typeCombo->insertItem(KMyMoneyUtils::accountTypeToString(MyMoneyAccount::Asset));
+ typeCombo->insertItem(KMyMoneyUtils::accountTypeToString(MyMoneyAccount::Liability));
+ typeCombo->insertItem(KMyMoneyUtils::accountTypeToString(MyMoneyAccount::Stock));
+/*
+ typeCombo->insertItem(KMyMoneyUtils::accountTypeToString(MyMoneyAccount::CertificateDep));
+ typeCombo->insertItem(KMyMoneyUtils::accountTypeToString(MyMoneyAccount::MoneyMarket));
+ typeCombo->insertItem(KMyMoneyUtils::accountTypeToString(MyMoneyAccount::Currency));
+*/
+
+ // Hardcoded but acceptable
+ switch (account.accountType())
+ {
+ default:
+ case MyMoneyAccount::Checkings:
+ typeCombo->setCurrentItem(0);
+ break;
+ case MyMoneyAccount::Savings:
+ typeCombo->setCurrentItem(1);
+ break;
+ case MyMoneyAccount::Cash:
+ typeCombo->setCurrentItem(2);
+ break;
+ case MyMoneyAccount::CreditCard:
+ typeCombo->setCurrentItem(3);
+ break;
+ case MyMoneyAccount::Loan:
+ typeCombo->setCurrentItem(4);
+ break;
+ case MyMoneyAccount::Investment:
+ typeCombo->setCurrentItem(5);
+ break;
+ case MyMoneyAccount::Asset:
+ typeCombo->setCurrentItem(6);
+ break;
+ case MyMoneyAccount::Liability:
+ typeCombo->setCurrentItem(7);
+ break;
+ case MyMoneyAccount::Stock:
+ m_institutionBox->hide();
+ typeCombo->setCurrentItem(8);
+ break;
+/*
+ case MyMoneyAccount::CertificateDep:
+ typeCombo->setCurrentItem(5);
+ break;
+ case MyMoneyAccount::MoneyMarket:
+ typeCombo->setCurrentItem(7);
+ break;
+ case MyMoneyAccount::Currency:
+ typeCombo->setCurrentItem(8);
+ break;
+*/
+ }
+
+ if(!m_account.openingDate().isValid())
+ m_account.setOpeningDate(QDate::currentDate());
+
+ startDateEdit->setDate(m_account.openingDate());
+ accountNoEdit->setText(account.number());
+ m_qcheckboxPreferred->setChecked(account.value("PreferredAccount") == "Yes");
+ m_qcheckboxNoVat->setChecked(account.value("NoVat") == "Yes");
+ loadKVP("iban", ibanEdit);
+ loadKVP("minBalanceAbsolute", m_minBalanceAbsoluteEdit);
+ loadKVP("minBalanceEarly", m_minBalanceEarlyEdit);
+ loadKVP("maxCreditAbsolute", m_maxCreditAbsoluteEdit);
+ loadKVP("maxCreditEarly", m_maxCreditEarlyEdit);
+ // reverse the sign for display purposes
+ if(!m_maxCreditAbsoluteEdit->lineedit()->text().isEmpty())
+ m_maxCreditAbsoluteEdit->setValue(m_maxCreditAbsoluteEdit->value()*MyMoneyMoney(-1,1));
+ if(!m_maxCreditEarlyEdit->lineedit()->text().isEmpty())
+ m_maxCreditEarlyEdit->setValue(m_maxCreditEarlyEdit->value()*MyMoneyMoney(-1,1));
+ loadKVP("lastNumberUsed", m_lastCheckNumberUsed);
+
+
+ // we do not allow to change the account type once an account
+ // was created. Same applies to currency if it is referenced.
+ if (m_isEditing)
+ {
+ typeCombo->setEnabled(false);
+ m_currency->setDisabled(MyMoneyFile::instance()->isReferenced(m_account));
+ }
+ if(m_account.isInvest()) {
+ typeCombo->setEnabled(false);
+ m_qcheckboxPreferred->hide();
+ m_currencyText->hide();
+ m_currency->hide();
+ } else {
+ // use the old field and override a possible new value
+ if(!MyMoneyMoney(account.value("minimumBalance")).isZero()) {
+ m_minBalanceAbsoluteEdit->setValue(MyMoneyMoney(account.value("minimumBalance")));
+ }
+ }
+
+// m_qcheckboxTax->hide(); TODO should only be visible for VAT category/account
+ }
+
+ m_currency->setSecurity(file->currency(account.currencyId()));
+
+ // Load the institutions
+ // then the accounts
+ QString institutionName;
+
+ try
+ {
+ if (m_isEditing && !account.institutionId().isEmpty())
+ institutionName = file->institution(account.institutionId()).name();
+ else
+ institutionName = QString();
+ }
+ catch (MyMoneyException *e)
+ {
+ qDebug("exception in init for account dialog: %s", e->what().latin1());
+ delete e;
+ }
+
+ initParentWidget(account.parentAccountId(), account.id());
+ if(m_account.isInvest())
+ m_qlistviewParentAccounts->setEnabled(false);
+
+ if (!categoryEditor)
+ slotLoadInstitutions(institutionName);
+
+ accountNameEdit->setFocus();
+
+ if (title)
+ setCaption(title);
+
+ // load button icons
+ KIconLoader* il = KGlobal::iconLoader();
+ cancelButton->setGuiItem(KStdGuiItem::cancel());
+ createButton->setGuiItem(KStdGuiItem::ok());
+
+ connect(cancelButton, SIGNAL(clicked()), SLOT(reject()));
+ connect(createButton, SIGNAL(clicked()), this, SLOT(okClicked()));
+ connect(m_qlistviewParentAccounts, SIGNAL(selectionChanged(QListViewItem*)),
+ this, SLOT(slotSelectionChanged(QListViewItem*)));
+ connect(m_qbuttonNew, SIGNAL(clicked()), this, SLOT(slotNewClicked()));
+ connect(typeCombo, SIGNAL(activated(const QString&)),
+ this, SLOT(slotAccountTypeChanged(const QString&)));
+
+ connect(accountNameEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotCheckFinished()));
+
+ connect(m_vatCategory, SIGNAL(toggled(bool)), this, SLOT(slotVatChanged(bool)));
+ connect(m_vatAssignment, SIGNAL(toggled(bool)), this, SLOT(slotVatAssignmentChanged(bool)));
+ connect(m_vatCategory, SIGNAL(toggled(bool)), this, SLOT(slotCheckFinished()));
+ connect(m_vatAssignment, SIGNAL(toggled(bool)), this, SLOT(slotCheckFinished()));
+ connect(m_vatRate, SIGNAL(textChanged(const QString&)), this, SLOT(slotCheckFinished()));
+ connect(m_vatAccount, SIGNAL(stateChanged()), this, SLOT(slotCheckFinished()));
+
+ connect(m_minBalanceEarlyEdit, SIGNAL(valueChanged(const QString&)), this, SLOT(slotAdjustMinBalanceAbsoluteEdit(const QString&)));
+ connect(m_minBalanceAbsoluteEdit, SIGNAL(valueChanged(const QString&)), this, SLOT(slotAdjustMinBalanceEarlyEdit(const QString&)));
+ connect(m_maxCreditEarlyEdit, SIGNAL(valueChanged(const QString&)), this, SLOT(slotAdjustMaxCreditAbsoluteEdit(const QString&)));
+ connect(m_maxCreditAbsoluteEdit, SIGNAL(valueChanged(const QString&)), this, SLOT(slotAdjustMaxCreditEarlyEdit(const QString&)));
+
+ connect(m_qcomboboxInstitutions, SIGNAL(activated(const QString&)), this, SLOT(slotLoadInstitutions(const QString&)));
+
+ m_vatCategory->setChecked(false);
+ m_vatAssignment->setChecked(false);
+
+ // make sure our account does not have an id and no parent assigned
+ // and certainly no children in case we create a new account
+ if(!m_isEditing) {
+ m_account.clearId();
+ m_account.setParentAccountId(QString());
+ QStringList::ConstIterator it;
+ while((it = m_account.accountList().begin()) != m_account.accountList().end())
+ m_account.removeAccountId(*it);
+
+ if(m_parentItem == 0) {
+ // force loading of initial parent
+ m_account.setAccountType(MyMoneyAccount::UnknownAccountType);
+ MyMoneyAccount::_accountTypeE type = account.accountType();
+ if(type == MyMoneyAccount::UnknownAccountType)
+ type = MyMoneyAccount::Checkings;
+ slotAccountTypeChanged(KMyMoneyUtils::accountTypeToString(type));
+ }
+ } else {
+ if(!m_account.value("VatRate").isEmpty()) {
+ m_vatCategory->setChecked(true);
+ m_vatRate->setValue(MyMoneyMoney(m_account.value("VatRate"))*MyMoneyMoney(100,1));
+ } else {
+ if(!m_account.value("VatAccount").isEmpty()) {
+ QString accId = m_account.value("VatAccount").latin1();
+ try {
+ // make sure account exists
+ MyMoneyFile::instance()->account(accId);
+ m_vatAssignment->setChecked(true);
+ m_vatAccount->setSelected(accId);
+ m_grossAmount->setChecked(true);
+ if(m_account.value("VatAmount") == "Net")
+ m_netAmount->setChecked(true);
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+ }
+ }
+ }
+ slotVatChanged(m_vatCategory->isChecked());
+ slotVatAssignmentChanged(m_vatAssignment->isChecked());
+ slotCheckFinished();
+
+ kMandatoryFieldGroup* requiredFields = new kMandatoryFieldGroup (this);
+ requiredFields->setOkButton(createButton); // button to be enabled when all fields present
+ requiredFields->add(accountNameEdit);
+
+ // using a timeout is the only way, I got the 'ensureItemVisible'
+ // working when creating the dialog. I assume, this
+ // has something to do with the delayed update of the display somehow.
+ QTimer::singleShot(50, this, SLOT(timerDone()));
+}
+
+void KNewAccountDlg::timerDone(void)
+{
+ if(m_accountItem) m_qlistviewParentAccounts->ensureItemVisible(m_accountItem);
+ if(m_parentItem) m_qlistviewParentAccounts->ensureItemVisible(m_parentItem);
+ // KNewAccountDlgDecl::resizeEvent(0);
+ m_qlistviewParentAccounts->setColumnWidth(m_qlistviewParentAccounts->nameColumn(), m_qlistviewParentAccounts->visibleWidth());
+ m_qlistviewParentAccounts->repaintContents(false);
+}
+
+void KNewAccountDlg::setOpeningBalance(const MyMoneyMoney& balance)
+{
+ m_openingBalanceEdit->setValue(balance);
+}
+
+void KNewAccountDlg::setOpeningBalanceShown(bool shown)
+{
+ m_openingBalanceEdit->setShown(shown);
+}
+
+void KNewAccountDlg::okClicked()
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ QString accountNameText = accountNameEdit->text();
+ if (accountNameText.isEmpty())
+ {
+ KMessageBox::error(this, i18n("You have not specified a name.\nPlease fill in this field."));
+ accountNameEdit->setFocus();
+ return;
+ }
+
+ MyMoneyAccount parent = parentAccount();
+ if (parent.name().length() == 0)
+ {
+ KMessageBox::error(this, i18n("Please select a parent account."));
+ return;
+ }
+
+ if (!m_categoryEditor)
+ {
+ QString institutionNameText = m_qcomboboxInstitutions->currentText();
+ if (institutionNameText != i18n("<No Institution>"))
+ {
+ try
+ {
+ MyMoneyFile *file = MyMoneyFile::instance();
+
+ QValueList<MyMoneyInstitution> list = file->institutionList();
+ QValueList<MyMoneyInstitution>::ConstIterator institutionIterator;
+ for (institutionIterator = list.begin(); institutionIterator != list.end(); ++institutionIterator)
+ {
+ if ((*institutionIterator).name() == institutionNameText)
+ m_account.setInstitutionId((*institutionIterator).id());
+ }
+ }
+ catch (MyMoneyException *e)
+ {
+ qDebug("Exception in account institution set: %s", e->what().latin1());
+ delete e;
+ }
+ }
+ else
+ {
+ m_account.setInstitutionId(QString());
+ }
+ }
+
+ m_account.setName(accountNameText);
+ m_account.setNumber(accountNoEdit->text());
+ storeKVP("iban", ibanEdit);
+ storeKVP("minBalanceAbsolute", m_minBalanceAbsoluteEdit);
+ storeKVP("minBalanceEarly", m_minBalanceEarlyEdit);
+
+ // the figures for credit line with reversed sign
+ if(!m_maxCreditAbsoluteEdit->lineedit()->text().isEmpty())
+ m_maxCreditAbsoluteEdit->setValue(m_maxCreditAbsoluteEdit->value()*MyMoneyMoney(-1,1));
+ if(!m_maxCreditEarlyEdit->lineedit()->text().isEmpty())
+ m_maxCreditEarlyEdit->setValue(m_maxCreditEarlyEdit->value()*MyMoneyMoney(-1,1));
+ storeKVP("maxCreditAbsolute", m_maxCreditAbsoluteEdit);
+ storeKVP("maxCreditEarly", m_maxCreditEarlyEdit);
+ if(!m_maxCreditAbsoluteEdit->lineedit()->text().isEmpty())
+ m_maxCreditAbsoluteEdit->setValue(m_maxCreditAbsoluteEdit->value()*MyMoneyMoney(-1,1));
+ if(!m_maxCreditEarlyEdit->lineedit()->text().isEmpty())
+ m_maxCreditEarlyEdit->setValue(m_maxCreditEarlyEdit->value()*MyMoneyMoney(-1,1));
+
+ storeKVP("lastNumberUsed", m_lastCheckNumberUsed);
+ // delete a previous version of the minimumbalance information
+ storeKVP("minimumBalance", QString(), QString());
+
+ MyMoneyAccount::accountTypeE acctype;
+ if (!m_categoryEditor)
+ {
+ acctype = KMyMoneyUtils::stringToAccountType(typeCombo->currentText());
+ // If it's a loan, check if the parent is asset or liability. In
+ // case of asset, we change the account type to be AssetLoan
+ if(acctype == MyMoneyAccount::Loan
+ && parent.accountGroup() == MyMoneyAccount::Asset)
+ acctype = MyMoneyAccount::AssetLoan;
+
+#if 0
+ // we do allow the same name for different accounts, so
+ // we don't need this check anymore.
+ if(!file->nameToAccount(accountNameText).isEmpty()
+ && (file->nameToAccount(accountNameText) != m_account.id())) {
+ KMessageBox::error(this, QString("<qt>")+i18n("An account named <b>%1</b> already exists. You cannot create a second account with the same name.").arg(accountNameText)+QString("</qt>"));
+ return;
+ }
+#endif
+ }
+ else
+ {
+ acctype = parent.accountGroup();
+ QString newName;
+ if(!MyMoneyFile::instance()->isStandardAccount(parent.id())) {
+ newName = MyMoneyFile::instance()->accountToCategory(parent.id()) + MyMoneyFile::AccountSeperator;
+ }
+ newName += accountNameText;
+ if(!file->categoryToAccount(newName, acctype).isEmpty()
+ && (file->categoryToAccount(newName, acctype) != m_account.id())) {
+ KMessageBox::error(this, QString("<qt>")+i18n("A category named <b>%1</b> already exists. You cannot create a second category with the same name.").arg(newName)+QString("</qt>"));
+ return;
+ }
+ }
+ m_account.setAccountType(acctype);
+
+ m_account.setDescription(descriptionEdit->text());
+
+ if (!m_categoryEditor)
+ {
+ m_account.setOpeningDate(startDateEdit->date());
+ m_account.setCurrencyId(m_currency->security().id());
+
+ if(m_qcheckboxPreferred->isChecked())
+ m_account.setValue("PreferredAccount", "Yes");
+ else
+ m_account.deletePair("PreferredAccount");
+ if(m_qcheckboxNoVat->isChecked())
+ m_account.setValue("NoVat", "Yes");
+ else
+ m_account.deletePair("NoVat");
+
+ if(m_minBalanceAbsoluteEdit->isVisible()) {
+ m_account.setValue("minimumBalance", m_minBalanceAbsoluteEdit->value().toString());
+ }
+ }
+ else
+ {
+ if(KMyMoneyGlobalSettings::hideUnusedCategory() && !m_isEditing) {
+ KMessageBox::information(this, i18n("You have selected to suppress the display of unused categories in the KMyMoney configuration dialog. The category you just created will therefore only be shown if it is used. Otherwise, it will be hidden in the accounts/categories view."), i18n("Hidden categories"), "NewHiddenCategory");
+ }
+ }
+
+ if ( m_qcheckboxTax->isChecked())
+ m_account.setValue("Tax", "Yes");
+ else
+ m_account.deletePair("Tax");
+
+ m_account.deletePair("VatAccount");
+ m_account.deletePair("VatAmount");
+ m_account.deletePair("VatRate");
+
+ if(m_vatCategory->isChecked()) {
+ m_account.setValue("VatRate", (m_vatRate->value().abs() / MyMoneyMoney(100,1)).toString());
+ } else {
+ if(m_vatAssignment->isChecked()) {
+ m_account.setValue("VatAccount", m_vatAccount->selectedItems().first());
+ if(m_netAmount->isChecked())
+ m_account.setValue("VatAmount", "Net");
+ }
+ }
+
+ accept();
+}
+
+void KNewAccountDlg::loadKVP(const QString& key, kMyMoneyEdit* widget)
+{
+ if(!widget)
+ return;
+
+ if(m_account.value(key).isEmpty()) {
+ widget->clearText();
+ } else {
+ widget->setValue(MyMoneyMoney(m_account.value(key)));
+ }
+}
+
+void KNewAccountDlg::loadKVP(const QString& key, KLineEdit* widget)
+{
+ if(!widget)
+ return;
+
+ widget->setText(m_account.value(key));
+}
+
+void KNewAccountDlg::storeKVP(const QString& key, const QString& text, const QString& value)
+{
+ if(text.isEmpty())
+ m_account.deletePair(key);
+ else
+ m_account.setValue(key, value);
+}
+
+void KNewAccountDlg::storeKVP(const QString& key, kMyMoneyEdit* widget)
+{
+ storeKVP(key, widget->lineedit()->text(), widget->text());
+}
+
+void KNewAccountDlg::storeKVP(const QString& key, KLineEdit* widget)
+{
+ storeKVP(key, widget->text(), widget->text());
+}
+
+const MyMoneyAccount& KNewAccountDlg::account(void)
+{
+ // assign the right currency to the account
+ m_account.setCurrencyId(m_currency->security().id());
+
+ // and the price mode
+ switch(m_priceMode->currentItem()) {
+ case 0:
+ m_account.deletePair("priceMode");
+ break;
+ case 1:
+ case 2:
+ m_account.setValue("priceMode", QString("%1").arg(m_priceMode->currentItem()));
+ break;
+ }
+
+ return m_account;
+}
+
+const MyMoneyAccount& KNewAccountDlg::parentAccount(void)
+{
+ if (!m_bSelectedParentAccount)
+ {
+ MyMoneyFile *file = MyMoneyFile::instance();
+
+ switch (m_account.accountGroup())
+ {
+ case MyMoneyAccount::Asset:
+ m_parentAccount = file->asset();
+ break;
+ case MyMoneyAccount::Liability:
+ m_parentAccount = file->liability();
+ break;
+ case MyMoneyAccount::Income:
+ m_parentAccount = file->income();
+ break;
+ case MyMoneyAccount::Expense:
+ m_parentAccount = file->expense();
+ break;
+ case MyMoneyAccount::Equity:
+ m_parentAccount = file->equity();
+ break;
+ default:
+ qDebug("Seems we have an account that hasn't been mapped to the top five");
+ if(m_categoryEditor)
+ m_parentAccount = file->income();
+ else
+ m_parentAccount = file->asset();
+ }
+ }
+ return m_parentAccount;
+}
+
+void KNewAccountDlg::initParentWidget(QString parentId, const QString& accountId)
+{
+ MyMoneyFile *file = MyMoneyFile::instance();
+
+ MyMoneyAccount liabilityAccount = file->liability();
+ MyMoneyAccount assetAccount = file->asset();
+ MyMoneyAccount expenseAccount = file->expense();
+ MyMoneyAccount incomeAccount = file->income();
+ MyMoneyAccount equityAccount = file->equity();
+
+ m_parentItem = 0;
+ m_accountItem = 0;
+
+ // Determine the parent account
+ try
+ {
+ m_parentAccount = file->account(parentId);
+ }
+ catch (MyMoneyException *e)
+ {
+ m_bSelectedParentAccount = false;
+ m_parentAccount = MyMoneyAccount();
+ if(m_account.accountType() != MyMoneyAccount::UnknownAccountType) {
+ parentAccount();
+ parentId = m_parentAccount.id();
+ }
+ delete e;
+ }
+ m_bSelectedParentAccount = true;
+
+ // extract the account type from the combo box
+ MyMoneyAccount::accountTypeE type;
+ MyMoneyAccount::accountTypeE groupType;
+ type = KMyMoneyUtils::stringToAccountType(typeCombo->currentText());
+ groupType = MyMoneyAccount::accountGroup(type);
+
+ m_qlistviewParentAccounts->clear();
+
+ // Now scan all 4 account roots to load the list and mark the parent
+ try
+ {
+ if (!m_categoryEditor)
+ {
+ if(groupType == MyMoneyAccount::Asset || type == MyMoneyAccount::Loan) {
+ // Asset
+ KMyMoneyAccountTreeBaseItem *assetTopLevelAccount = new KMyMoneyAccountTreeItem(m_qlistviewParentAccounts, assetAccount);
+
+ if(m_parentAccount.id().isEmpty()) {
+ m_parentAccount = assetAccount;
+ parentId = m_parentAccount.id();
+ }
+
+ if (parentId == assetAccount.id())
+ m_parentItem = assetTopLevelAccount;
+
+ assetTopLevelAccount->setOpen(true);
+
+ for ( QStringList::ConstIterator it = assetAccount.accountList().begin();
+ it != assetAccount.accountList().end();
+ ++it )
+ {
+ MyMoneyAccount acc = file->account(*it);
+ if(acc.isClosed())
+ continue;
+
+ KMyMoneyAccountTreeBaseItem *accountItem = new KMyMoneyAccountTreeItem(assetTopLevelAccount, acc);
+
+ if(parentId == acc.id()) {
+ m_parentItem = accountItem;
+ } else if(accountId == acc.id()) {
+ if(m_isEditing)
+ accountItem->setSelectable(false);
+ m_accountItem = accountItem;
+ }
+
+ QStringList subAccounts = acc.accountList();
+ if (subAccounts.count() >= 1)
+ {
+ showSubAccounts(subAccounts, accountItem, parentId, acc.id());
+ }
+ }
+ }
+
+ if(groupType == MyMoneyAccount::Liability) {
+ // Liability
+ KMyMoneyAccountTreeBaseItem *liabilityTopLevelAccount = new KMyMoneyAccountTreeItem(m_qlistviewParentAccounts, liabilityAccount);
+
+ if(m_parentAccount.id().isEmpty()) {
+ m_parentAccount = liabilityAccount;
+ parentId = m_parentAccount.id();
+ }
+
+ if (parentId == liabilityAccount.id())
+ m_parentItem = liabilityTopLevelAccount;
+
+ liabilityTopLevelAccount->setOpen(true);
+
+ for ( QStringList::ConstIterator it = liabilityAccount.accountList().begin();
+ it != liabilityAccount.accountList().end();
+ ++it )
+ {
+ MyMoneyAccount acc = file->account(*it);
+ if(acc.isClosed())
+ continue;
+
+ KMyMoneyAccountTreeBaseItem *accountItem = new KMyMoneyAccountTreeItem(liabilityTopLevelAccount, acc);
+
+ if(parentId == acc.id()) {
+ m_parentItem = accountItem;
+ } else if(accountId == acc.id()) {
+ if(m_isEditing)
+ accountItem->setSelectable(false);
+ m_accountItem = accountItem;
+ }
+
+ QStringList subAccounts = acc.accountList();
+ if (subAccounts.count() >= 1)
+ {
+ showSubAccounts(subAccounts, accountItem, parentId, acc.id());
+ }
+ }
+ }
+ }
+ else
+ {
+ if(groupType == MyMoneyAccount::Income) {
+ // Income
+ KMyMoneyAccountTreeBaseItem *incomeTopLevelAccount = new KMyMoneyAccountTreeItem(m_qlistviewParentAccounts,
+ incomeAccount);
+
+ if(m_parentAccount.id().isEmpty()) {
+ m_parentAccount = incomeAccount;
+ parentId = m_parentAccount.id();
+ }
+
+ if (parentId == incomeAccount.id())
+ m_parentItem = incomeTopLevelAccount;
+
+ incomeTopLevelAccount->setOpen(true);
+
+ for ( QStringList::ConstIterator it = incomeAccount.accountList().begin();
+ it != incomeAccount.accountList().end();
+ ++it )
+ {
+ KMyMoneyAccountTreeBaseItem *accountItem = new KMyMoneyAccountTreeItem(incomeTopLevelAccount,
+ file->account(*it));
+
+ QString id = file->account(*it).id();
+ if(parentId == id) {
+ m_parentItem = accountItem;
+ } else if(accountId == id) {
+ if(m_isEditing)
+ accountItem->setSelectable(false);
+ m_accountItem = accountItem;
+ }
+
+ QStringList subAccounts = file->account(*it).accountList();
+ if (subAccounts.count() >= 1)
+ {
+ showSubAccounts(subAccounts, accountItem, parentId, accountId);
+ }
+ }
+ }
+
+ if(groupType == MyMoneyAccount::Expense) {
+ // Expense
+ KMyMoneyAccountTreeBaseItem *expenseTopLevelAccount = new KMyMoneyAccountTreeItem(m_qlistviewParentAccounts,
+ expenseAccount);
+
+ if(m_parentAccount.id().isEmpty()) {
+ m_parentAccount = expenseAccount;
+ parentId = m_parentAccount.id();
+ }
+
+ if (parentId == expenseAccount.id())
+ m_parentItem = expenseTopLevelAccount;
+
+ expenseTopLevelAccount->setOpen(true);
+
+ for ( QStringList::ConstIterator it = expenseAccount.accountList().begin();
+ it != expenseAccount.accountList().end();
+ ++it )
+ {
+ KMyMoneyAccountTreeBaseItem *accountItem = new KMyMoneyAccountTreeItem(expenseTopLevelAccount,
+ file->account(*it));
+
+ QString id = file->account(*it).id();
+ if(parentId == id) {
+ m_parentItem = accountItem;
+ } else if(accountId == id) {
+ if(m_isEditing)
+ accountItem->setSelectable(false);
+ m_accountItem = accountItem;
+ }
+
+ QStringList subAccounts = file->account(*it).accountList();
+ if (subAccounts.count() >= 1)
+ {
+ showSubAccounts(subAccounts, accountItem, parentId, accountId);
+ }
+ }
+ }
+ }
+ }
+ catch (MyMoneyException *e)
+ {
+ qDebug("Exception in assets account refresh: %s", e->what().latin1());
+ delete e;
+ }
+
+ m_qlistviewParentAccounts->setColumnWidth(0, m_qlistviewParentAccounts->width());
+
+ if (m_parentItem)
+ {
+ m_subAccountLabel->setText(i18n("Is a sub account of %1").arg(m_parentAccount.name()));
+ m_parentItem->setOpen(true);
+ m_qlistviewParentAccounts->setSelected(m_parentItem, true);
+ }
+
+ m_qlistviewParentAccounts->setEnabled(true);
+}
+
+void KNewAccountDlg::showSubAccounts(QStringList accounts, KMyMoneyAccountTreeBaseItem *parentItem,
+ const QString& parentId, const QString& accountId)
+{
+ MyMoneyFile *file = MyMoneyFile::instance();
+
+ for ( QStringList::ConstIterator it = accounts.begin(); it != accounts.end(); ++it )
+ {
+ KMyMoneyAccountTreeBaseItem *accountItem = new KMyMoneyAccountTreeItem(parentItem,
+ file->account(*it));
+
+ QString id = file->account(*it).id();
+ if(parentId == id) {
+ m_parentItem = accountItem;
+ } else if(accountId == id) {
+ if(m_isEditing)
+ accountItem->setSelectable(false);
+ m_accountItem = accountItem;
+ }
+
+ QStringList subAccounts = file->account(*it).accountList();
+ if (subAccounts.count() >= 1)
+ {
+ showSubAccounts(subAccounts, accountItem, parentId, accountId);
+ }
+ }
+}
+
+void KNewAccountDlg::resizeEvent(QResizeEvent* e)
+{
+ m_qlistviewParentAccounts->setColumnWidth(0, m_qlistviewParentAccounts->width());
+
+ // call base class resizeEvent()
+ KNewAccountDlgDecl::resizeEvent(e);
+}
+
+void KNewAccountDlg::slotSelectionChanged(QListViewItem *item)
+{
+ KMyMoneyAccountTreeBaseItem *accountItem = dynamic_cast<KMyMoneyAccountTreeBaseItem*>(item);
+ try
+ {
+ MyMoneyFile *file = MyMoneyFile::instance();
+
+ //qDebug("Selected account id: %s", accountItem->accountID().data());
+ m_parentAccount = file->account(accountItem->id());
+ m_subAccountLabel->setText(i18n("Is a sub account of %1").arg(m_parentAccount.name()));
+ if(m_qlistviewParentAccounts->isEnabled()) {
+ m_bSelectedParentAccount = true;
+ }
+ }
+ catch (MyMoneyException *e)
+ {
+ qDebug("This shouldn't happen! : %s", e->what().latin1());
+ delete e;
+ }
+}
+
+void KNewAccountDlg::loadVatAccounts(void)
+{
+ QValueList<MyMoneyAccount> list;
+ MyMoneyFile::instance()->accountList(list);
+ QValueList<MyMoneyAccount>::Iterator it;
+ QStringList loadListExpense;
+ QStringList loadListIncome;
+ QStringList loadListAsset;
+ QStringList loadListLiability;
+ for(it = list.begin(); it != list.end(); ++it) {
+ if(!(*it).value("VatRate").isEmpty()) {
+ if((*it).accountType() == MyMoneyAccount::Expense)
+ loadListExpense += (*it).id();
+ else if((*it).accountType() == MyMoneyAccount::Income)
+ loadListIncome += (*it).id();
+ else if((*it).accountType() == MyMoneyAccount::Asset)
+ loadListAsset += (*it).id();
+ else if((*it).accountType() == MyMoneyAccount::Liability)
+ loadListLiability += (*it).id();
+ }
+ }
+ AccountSet vatSet;
+ if(!loadListAsset.isEmpty())
+ vatSet.load(m_vatAccount, i18n("Asset"), loadListAsset, true);
+ if(!loadListLiability.isEmpty())
+ vatSet.load(m_vatAccount, i18n("Liability"), loadListLiability, false);
+ if(!loadListIncome.isEmpty())
+ vatSet.load(m_vatAccount, i18n("Income"), loadListIncome, false);
+ if(!loadListExpense.isEmpty())
+ vatSet.load(m_vatAccount, i18n("Expense"), loadListExpense, false);
+}
+
+void KNewAccountDlg::slotLoadInstitutions(const QString& name)
+{
+ int id=-1, counter=0;
+ m_qcomboboxInstitutions->clear();
+ QString bic;
+ // Are we forcing the user to use institutions?
+ m_qcomboboxInstitutions->insertItem(i18n("<No Institution>"));
+ m_bicValue->setText(" ");
+ ibanEdit->setEnabled(false);
+ accountNoEdit->setEnabled(false);
+ try
+ {
+ MyMoneyFile *file = MyMoneyFile::instance();
+
+ QValueList<MyMoneyInstitution> list = file->institutionList();
+ QValueList<MyMoneyInstitution>::ConstIterator institutionIterator;
+ for (institutionIterator = list.begin(), counter=1; institutionIterator != list.end(); ++institutionIterator, counter++)
+ {
+ if ((*institutionIterator).name() == name) {
+ id = counter;
+ ibanEdit->setEnabled(true);
+ accountNoEdit->setEnabled(true);
+ m_bicValue->setText((*institutionIterator).value("bic"));
+ }
+ m_qcomboboxInstitutions->insertItem((*institutionIterator).name());
+ }
+
+ if (id != -1)
+ {
+ m_qcomboboxInstitutions->setCurrentItem(id);
+ }
+ }
+ catch (MyMoneyException *e)
+ {
+ qDebug("Exception in institution load: %s", e->what().latin1());
+ delete e;
+ }
+}
+
+void KNewAccountDlg::slotNewClicked()
+{
+ MyMoneyInstitution institution;
+
+ KNewBankDlg dlg(institution, this);
+ if (dlg.exec())
+ {
+ MyMoneyFileTransaction ft;
+ try
+ {
+ MyMoneyFile *file = MyMoneyFile::instance();
+
+ institution = dlg.institution();
+ file->addInstitution(institution);
+ ft.commit();
+ slotLoadInstitutions(institution.name());
+ }
+ catch (MyMoneyException *e)
+ {
+ delete e;
+ KMessageBox::information(this, i18n("Cannot add institution"));
+ }
+ }
+}
+
+void KNewAccountDlg::slotAccountTypeChanged(const QString& typeStr)
+{
+ MyMoneyAccount::accountTypeE type;
+ MyMoneyAccount::accountTypeE oldType;
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ type = KMyMoneyUtils::stringToAccountType(typeStr);
+ try {
+ oldType = m_account.accountType();
+ if(oldType != type) {
+ QString parentId;
+ switch(MyMoneyAccount::accountGroup(type)) {
+ case MyMoneyAccount::Asset:
+ parentId = file->asset().id();
+ break;
+ case MyMoneyAccount::Liability:
+ parentId = file->liability().id();
+ break;
+ case MyMoneyAccount::Expense:
+ parentId = file->expense().id();
+ break;
+ case MyMoneyAccount::Income:
+ parentId = file->income().id();
+ break;
+ default:
+ qWarning("Unknown account group in KNewAccountDlg::slotAccountTypeChanged()");
+ break;
+ }
+ initParentWidget(parentId, QString());
+ m_account.setAccountType(type);
+ }
+ } catch(MyMoneyException *e) {
+ delete e;
+ qWarning("Unexpected exception in KNewAccountDlg::slotAccountTypeChanged()");
+ }
+}
+
+void KNewAccountDlg::slotCheckFinished(void)
+{
+ bool showButton = true;
+
+ if(accountNameEdit->text().length() == 0) {
+ showButton = false;
+ }
+
+ if(m_vatCategory->isChecked() && m_vatRate->value() <= MyMoneyMoney(0)) {
+ showButton = false;
+ } else {
+ if(m_vatAssignment->isChecked() && m_vatAccount->selectedItems().isEmpty())
+ showButton = false;
+ }
+ createButton->setEnabled(showButton);
+}
+
+void KNewAccountDlg::slotVatChanged(bool state)
+{
+ if(state) {
+ m_vatCategoryFrame->show();
+ m_vatAssignmentFrame->hide();
+ } else {
+ m_vatCategoryFrame->hide();
+ if(!m_account.isAssetLiability()) {
+ m_vatAssignmentFrame->show();
+ }
+ }
+}
+
+void KNewAccountDlg::slotVatAssignmentChanged(bool state)
+{
+ m_vatAccount->setEnabled(state);
+ m_amountGroup->setEnabled(state);
+}
+
+void KNewAccountDlg::adjustEditWidgets(kMyMoneyEdit* dst, kMyMoneyEdit* src, char mode, int corr)
+{
+ MyMoneyMoney factor(corr, 1);
+ if(m_account.accountGroup() == MyMoneyAccount::Asset)
+ factor = -factor;
+
+ switch(mode) {
+ case '<':
+ if(src->value()*factor < dst->value()*factor)
+ dst->setValue(src->value());
+ break;
+
+ case '>':
+ if(src->value()*factor > dst->value()*factor)
+ dst->setValue(src->value());
+ break;
+ }
+}
+
+void KNewAccountDlg::slotAdjustMinBalanceAbsoluteEdit(const QString&)
+{
+ adjustEditWidgets(m_minBalanceAbsoluteEdit, m_minBalanceEarlyEdit, '<', -1);
+}
+
+void KNewAccountDlg::slotAdjustMinBalanceEarlyEdit(const QString&)
+{
+ adjustEditWidgets(m_minBalanceEarlyEdit, m_minBalanceAbsoluteEdit, '>', -1);
+}
+
+void KNewAccountDlg::slotAdjustMaxCreditAbsoluteEdit(const QString&)
+{
+ adjustEditWidgets(m_maxCreditAbsoluteEdit, m_maxCreditEarlyEdit, '>', 1);
+}
+
+void KNewAccountDlg::slotAdjustMaxCreditEarlyEdit(const QString&)
+{
+ adjustEditWidgets(m_maxCreditEarlyEdit, m_maxCreditAbsoluteEdit, '<', 1);
+}
+
+void KNewAccountDlg::addTab(QWidget* w, const QString& name)
+{
+ if(w) {
+ w->reparent(m_tab, QPoint(0,0));
+ m_tab->addTab(w, name);
+ }
+}
+
+
+#include "knewaccountdlg.moc"
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/dialogs/knewaccountdlg.h b/kmymoney2/dialogs/knewaccountdlg.h
new file mode 100644
index 0000000..ee09158
--- /dev/null
+++ b/kmymoney2/dialogs/knewaccountdlg.h
@@ -0,0 +1,143 @@
+/***************************************************************************
+ knewaccountdlg.h
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KNEWACCOUNTDLG_H
+#define KNEWACCOUNTDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Headers
+
+#ifdef HAVE_KDCHART
+#include <KDChartWidget.h>
+#include <KDChartTable.h>
+#include <KDChartParams.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneymoney.h>
+#include <kmymoney/kmymoneyedit.h>
+
+#include "../dialogs/knewaccountdlgdecl.h"
+class KMyMoneyAccountTreeBaseItem;
+namespace reports {
+ class KReportChartView;
+};
+
+/**
+ * This dialog lets you create/edit an account.
+ */
+class KNewAccountDlg : public KNewAccountDlgDecl
+{
+ Q_OBJECT
+
+private:
+ MyMoneyAccount m_account;
+ MyMoneyAccount m_parentAccount;
+ bool m_bSelectedParentAccount;
+
+ KMyMoneyAccountTreeBaseItem *m_parentItem;
+ KMyMoneyAccountTreeBaseItem *m_accountItem;
+ bool m_categoryEditor;
+ bool m_isEditing;
+
+ int m_idPropFutureValue;
+ int m_idPropLastValue;
+ int m_idPropMaxCredit;
+ int m_idPropMinBalance;
+
+ void initParentWidget(QString parentId, const QString& accountId);
+ void showSubAccounts(QStringList accounts, KMyMoneyAccountTreeBaseItem *parentItem, const QString& parentId, const QString& accountId);
+ void loadVatAccounts(void);
+ void storeKVP(const QString& key, kMyMoneyEdit* widget);
+ void storeKVP(const QString& key, KLineEdit* widget);
+ void storeKVP(const QString& key, const QString& text, const QString& value);
+ void loadKVP(const QString& key, kMyMoneyEdit* widget);
+ void loadKVP(const QString& key, KLineEdit* widget);
+
+public:
+ /**
+ * This is the constructor of the dialog. The parameters define the environment
+ * in which the dialog will be used. Depending on the environment, certain rules
+ * apply and will be handled by the dialog.
+ *
+ * @param account The original data to be used to create the account. In case
+ * of @p isEditing is false, the account id, the parent account id
+ * and the list of all child accounts will be cleared.
+ * @param isEditing If @p false, rules for new account creation apply.
+ * If @p true, rules for account editing apply
+ * @param categoryEditor If @p false, rules for asset/liability accounts apply.
+ * If @p true, rules for income/expense account apply.
+ * @param parent Pointer to parent object (passed to QDialog). Default is 0.
+ * @param name Name of the object (passed to QDialog). Default is 0.
+ * @param title Caption of the object (passed to QDialog). Default is empty string.
+ */
+ KNewAccountDlg(const MyMoneyAccount& account, bool isEditing, bool categoryEditor, QWidget *parent=0, const char *name=0, const QString& title=QString::null);
+
+ /**
+ * This method returns the edited account object.
+ */
+ const MyMoneyAccount& account(void);
+
+ /**
+ * This method returns the parent account of the edited account object.
+ */
+ const MyMoneyAccount& parentAccount(void);
+
+ void setOpeningBalance(const MyMoneyMoney& balance);
+
+ const MyMoneyMoney openingBalance(void) const { return m_openingBalanceEdit->value(); };
+
+ void setOpeningBalanceShown(bool shown);
+
+ /**
+ * This method adds an additional tab pointed to with @a w to the tab widget.
+ * This tab is usually defined by a plugin (eg. online banking). If @a w is
+ * zero, this is a NOP. @a name is used as the text to be placed on the tab.
+ */
+ void addTab(QWidget* w, const QString& name);
+
+protected:
+ void resizeEvent(QResizeEvent* e);
+ void displayOnlineBankingStatus(void);
+ void adjustEditWidgets(kMyMoneyEdit* dst, kMyMoneyEdit* src, char mode, int corr);
+
+protected slots:
+ void okClicked();
+ void slotSelectionChanged(QListViewItem *item);
+ void slotAccountTypeChanged(const QString& type);
+ void slotVatChanged(bool);
+ void slotVatAssignmentChanged(bool);
+ void slotNewClicked(void);
+ void slotCheckFinished(void);
+ void slotLoadInstitutions(const QString&);
+ void slotAdjustMinBalanceAbsoluteEdit(const QString&);
+ void slotAdjustMinBalanceEarlyEdit(const QString&);
+ void slotAdjustMaxCreditAbsoluteEdit(const QString&);
+ void slotAdjustMaxCreditEarlyEdit(const QString&);
+
+private slots:
+ void timerDone(void);
+
+};
+
+#endif
+
diff --git a/kmymoney2/dialogs/knewaccountdlgdecl.ui b/kmymoney2/dialogs/knewaccountdlgdecl.ui
new file mode 100644
index 0000000..6f6357e
--- /dev/null
+++ b/kmymoney2/dialogs/knewaccountdlgdecl.ui
@@ -0,0 +1,1044 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KNewAccountDlgDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>kNewAccountDlgDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>670</width>
+ <height>518</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>New Account Dialog</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>m_tab</cstring>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_generalTab</cstring>
+ </property>
+ <attribute name="title">
+ <string>General</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout15</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>60</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>60</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>MShape</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>MShadow</enum>
+ </property>
+ <property name="text">
+ <string>Name:</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>accountNameEdit</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox4</cstring>
+ </property>
+ <property name="title">
+ <string>Opening information</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>6</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="KMyMoneySecuritySelector" row="1" column="1">
+ <property name="name">
+ <cstring>m_currency</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>m_currencyText</cstring>
+ </property>
+ <property name="text">
+ <string>Currency:</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="0" column="1">
+ <property name="name">
+ <cstring>typeCombo</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Type:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="2">
+ <property name="name">
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>MShape</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>MShadow</enum>
+ </property>
+ <property name="text">
+ <string>Date:</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyDateInput" row="0" column="3">
+ <property name="name">
+ <cstring>startDateEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="2">
+ <property name="name">
+ <cstring>textLabel1_3</cstring>
+ </property>
+ <property name="text">
+ <string>Balance:</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="1" column="3">
+ <property name="name">
+ <cstring>m_openingBalanceEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox6</cstring>
+ </property>
+ <property name="title">
+ <string>Options</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout20</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="1">
+ <property name="name">
+ <cstring>layout19</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>m_lastCheckNumberUsed</cstring>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer10_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>140</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>Last check number:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel5</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>32767</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Notes:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignTop</set>
+ </property>
+ </widget>
+ <widget class="QTextEdit" row="1" column="1">
+ <property name="name">
+ <cstring>descriptionEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout18</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox" row="1" column="0">
+ <property name="name">
+ <cstring>m_qcheckboxNoVat</cstring>
+ </property>
+ <property name="text">
+ <string>No auto-VAT-assignment</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="1">
+ <property name="name">
+ <cstring>layout17</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1_5</cstring>
+ </property>
+ <property name="text">
+ <string>Price entry</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyGeneralCombo">
+ <property name="name">
+ <cstring>m_priceMode</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0">
+ <property name="name">
+ <cstring>m_qcheckboxPreferred</cstring>
+ </property>
+ <property name="text">
+ <string>Preferred Account</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer9</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_institutionTab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Institution</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>m_institutionBox</cstring>
+ </property>
+ <property name="title">
+ <string>Institution</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout11</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QComboBox">
+ <property name="name">
+ <cstring>m_qcomboboxInstitutions</cstring>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>m_qbuttonNew</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>New...</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout14</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>accountNoEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel2_2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>60</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>60</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Number:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1_4</cstring>
+ </property>
+ <property name="text">
+ <string>BIC</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>ibanEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>IBAN</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>m_bicValue</cstring>
+ </property>
+ <property name="text">
+ <string>x</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer8_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>30</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_hiearchyTab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Hierarchy</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_subAccountLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Subaccount</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyAccountTreeBase">
+ <header location="global">../widgets/kmymoneyaccounttreebase.h</header>
+ <property name="name">
+ <cstring>m_qlistviewParentAccounts</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_limitsTab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Limits</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>This page allows to setup certain limits. KMyMoney will warn you when the account balance reaches a limit.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout16</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Type</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="2" column="2">
+ <property name="name">
+ <cstring>m_minBalanceAbsoluteEdit</cstring>
+ </property>
+ <property name="resetButtonVisibility" stdset="0">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="2">
+ <property name="name">
+ <cstring>textLabel3_2</cstring>
+ </property>
+ <property name="text">
+ <string>Absolute limit</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>m_maxCreditLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Maximum credit limit</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="3" column="1">
+ <property name="name">
+ <cstring>m_maxCreditEarlyEdit</cstring>
+ </property>
+ <property name="resetButtonVisibility" stdset="0">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="3" column="2">
+ <property name="name">
+ <cstring>m_maxCreditAbsoluteEdit</cstring>
+ </property>
+ <property name="resetButtonVisibility" stdset="0">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="2" column="1">
+ <property name="name">
+ <cstring>m_minBalanceEarlyEdit</cstring>
+ </property>
+ <property name="resetButtonVisibility" stdset="0">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>m_minBalanceLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Minimum balance</string>
+ </property>
+ </widget>
+ <widget class="Line" row="1" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>line2</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Early warning</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer10_3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>30</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_taxTab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Tax</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox3</cstring>
+ </property>
+ <property name="title">
+ <string>VAT details</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout34</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_vatCategory</cstring>
+ </property>
+ <property name="text">
+ <string>VAT category</string>
+ </property>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>m_vatCategoryFrame</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Plain</enum>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>VAT percentage</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout33</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="kMyMoneyEdit">
+ <property name="name">
+ <cstring>m_vatRate</cstring>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer17</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>m_vatAssignmentFrame</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Plain</enum>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout8</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_vatAssignment</cstring>
+ </property>
+ <property name="text">
+ <string>Enable auto VAT assignment</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyAccountSelector">
+ <property name="name">
+ <cstring>m_vatAccount</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout13</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>m_amountGroup</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>32767</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>GroupBoxPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="title">
+ <string>Amount entered</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_grossAmount</cstring>
+ </property>
+ <property name="text">
+ <string>Gross amount</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_netAmount</cstring>
+ </property>
+ <property name="text">
+ <string>Net amount</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer7</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_qcheckboxTax</cstring>
+ </property>
+ <property name="text">
+ <string>Include on Tax Reports</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </widget>
+ <widget class="Line">
+ <property name="name">
+ <cstring>line1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout29</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>422</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>createButton</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>cancelButton</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>kMyMoneyAccountSelector</class>
+ <header location="global">../widgets/kmymoneyaccountselector.h</header>
+ <sizehint>
+ <width>80</width>
+ <height>80</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+ <customwidget>
+ <class>kMyMoneyAccountTreeBase</class>
+ <header location="global">../widgets/kmymoneyaccounttreebase.h</header>
+ <sizehint>
+ <width>80</width>
+ <height>80</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="1110">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000041d49444154388d8d95c18b1c4514c67fbb29e5b54ea05b26da1d36b08d09a6c508138cb8c13d647141163de49043bca9f1628eb9294810f24f88c15b728b07617358888785d980427290b4a8d00b19a8821da8228cf42316ac87eed9247ac95c9aeaeef9eaabdffb5ebf85f178ccfcf7f5b79fec07a7280a08a008f25ceb7c29e5da573716e65a0be3f198ef6f5ededff9b9e1b34faf90882092a1ea21428b9220ffbf46054055b19386ba6970ae6665b5e0d2c5eb0b066067bbe1f21757c88f5504eff0c192189081303a5582b16854fccce2fe041f00cdd0a8103b874556405476b62d972ec2c2b90ff3fd8df5cb946549d80b34aea15ccaa94625450e2d0e558b460b7371a734b5e027251a155545678ab62d7eea90b4c504078908c107acb354cb251b1f8f08b1c18631aabbb4d18211404804f22545863561d2f060fb34aa8a18d0086204e72c46a32292e1a796f278c1da7a859d8da9a737506db04d0a24103d8949480b214d3bbee952a05c1d536f9d2684160c744f048311543d459eb1b65ee1754cedae13a64abd5d6127053c9d0281f22d4f75c6a2118a5c09272d7ab740638bf4ef2dd2174032d0d8d04c6fe19c32bedd8bc65e342aa3f785e2784bfd6bc1bd9db24b05505616a4edd67d5a8c1801a03a9962754c504bf34b8986acfb9be91cac7d54315a15541b36b134f74bd2dc53940115a5381e087bc25c6f71be831a8baa234cc1ee3eeb74ed83116beb2b8849d108a3730e8ce27e2bfb82419a7b407ac7c222fd0e6280a8078ce64e47ef54ac9d5be9aaae0162e0de568a44a18d3df90845d919c4f01463406340a44f40efb43a99b371618488e2670d1a2d7ee6f1d3be39342104e937ed85fb86599c33e9ee0be9a004946259d8b858909880d59aa00daa0d3280b5f39e34074c4b3a5434029a76a9e9f5cc0163b5c80024158a1cfc4cb1d3061d5834066cb0a403c008599a70f6bc27b8d03106ea3ae91987278c5b143b015547224ab5e24185cd9b81665273e7b6e7cecd82ddbf8098002de94049737bc09828cf3036f31c3735c8b0e98eb704672f348c7f7c93cd1fb2ae905119ff54e0dff3542b0e9dd983dcea2cc5eea6cf303e74ec687af5c41b6fa38f5e203c7ec8e1238ef85831a214afef21060ea781ec68247b65c6916353cc8b73d1ae79354606af2a930709aa118da1636c274dd7e3774b884a79aa6b5711a538d33cf9c01c1c9b83bc6a1f55c91ccb23b05b1deb43a7decdaffefd2862f61366aa8449c69e33642f012f2bb208fa98eeda1f3346f076c8eeef19475e9be115423364f78f84105a8643d34d90cfbfdcd8cf872589a45dc7f54cf3134a36f4e495c23f9da8db15bccb708d4014f2ca512cb5d4f7c13e84300d5cff6eb39b202bab053bdb9674f0648609427d0f8402ddeac30f4fcd3ced3efc3b422d406c09b340bedc1571e1bfc3d44dc281634c5fe5e758e7395cfbe6d6c130fd17d92372d277c159b70000000049454e44ae426082</data>
+ </image>
+</images>
+<tabstops>
+ <tabstop>m_tab</tabstop>
+ <tabstop>accountNameEdit</tabstop>
+ <tabstop>typeCombo</tabstop>
+ <tabstop>startDateEdit</tabstop>
+ <tabstop>m_currency</tabstop>
+ <tabstop>m_openingBalanceEdit</tabstop>
+ <tabstop>m_lastCheckNumberUsed</tabstop>
+ <tabstop>descriptionEdit</tabstop>
+ <tabstop>m_qcheckboxPreferred</tabstop>
+ <tabstop>m_qcheckboxNoVat</tabstop>
+ <tabstop>m_qcomboboxInstitutions</tabstop>
+ <tabstop>m_qbuttonNew</tabstop>
+ <tabstop>ibanEdit</tabstop>
+ <tabstop>accountNoEdit</tabstop>
+ <tabstop>m_qlistviewParentAccounts</tabstop>
+ <tabstop>kActiveLabel1</tabstop>
+ <tabstop>m_minBalanceEarlyEdit</tabstop>
+ <tabstop>m_minBalanceAbsoluteEdit</tabstop>
+ <tabstop>m_maxCreditEarlyEdit</tabstop>
+ <tabstop>m_maxCreditAbsoluteEdit</tabstop>
+ <tabstop>m_vatCategory</tabstop>
+ <tabstop>m_vatRate</tabstop>
+ <tabstop>m_vatAssignment</tabstop>
+ <tabstop>m_grossAmount</tabstop>
+ <tabstop>m_qcheckboxTax</tabstop>
+ <tabstop>createButton</tabstop>
+ <tabstop>cancelButton</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/knewbankdlg.cpp b/kmymoney2/dialogs/knewbankdlg.cpp
new file mode 100644
index 0000000..f1c4e3f
--- /dev/null
+++ b/kmymoney2/dialogs/knewbankdlg.cpp
@@ -0,0 +1,105 @@
+/***************************************************************************
+ knewbankdlg.cpp
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlabel.h>
+#include <qpixmap.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kglobal.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+#include <kmessagebox.h>
+#include <kpushbutton.h>
+#include <kguiitem.h>
+#include <klineedit.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyinstitution.h>
+#include <kmymoney/kguiutils.h>
+
+#include "knewbankdlg.h"
+
+KNewBankDlg::KNewBankDlg(MyMoneyInstitution& institution, QWidget *parent, const char *name)
+ : KNewBankDlgDecl(parent,name,true), m_institution(institution)
+{
+ okBtn->setGuiItem(KStdGuiItem::ok());
+ cancelBtn->setGuiItem(KStdGuiItem::cancel());
+
+ nameEdit->setFocus();
+ nameEdit->setText(institution.name());
+ cityEdit->setText(institution.city());
+ streetEdit->setText(institution.street());
+ postcodeEdit->setText(institution.postcode());
+ telephoneEdit->setText(institution.telephone());
+ bicEdit->setText(institution.value("bic"));
+ sortCodeEdit->setText(institution.sortcode());
+
+ connect(okBtn, SIGNAL(clicked()), SLOT(okClicked()));
+ connect(cancelBtn, SIGNAL(clicked()), SLOT(reject()));
+ connect(nameEdit, SIGNAL(textChanged ( const QString & )), SLOT(institutionNameChanged( const QString &)));
+ institutionNameChanged( nameEdit->text());
+
+ kMandatoryFieldGroup* requiredFields = new kMandatoryFieldGroup (this);
+ requiredFields->setOkButton(okBtn); // button to be enabled when all fields present
+ requiredFields->add(nameEdit);
+}
+
+void KNewBankDlg::institutionNameChanged( const QString &_text)
+{
+ okBtn->setEnabled( !_text.isEmpty() );
+}
+
+KNewBankDlg::~KNewBankDlg()
+{
+}
+
+void KNewBankDlg::okClicked()
+{
+ if (nameEdit->text().isEmpty()) {
+ KMessageBox::information(this, i18n("The institution name field is empty. Please enter the name."), i18n("Adding New Institution"));
+ nameEdit->setFocus();
+ return;
+ }
+
+ m_institution.setName(nameEdit->text());
+ m_institution.setTown(cityEdit->text());
+ m_institution.setStreet(streetEdit->text());
+ m_institution.setPostcode(postcodeEdit->text());
+ m_institution.setTelephone(telephoneEdit->text());
+ m_institution.setValue("bic", bicEdit->text());
+ m_institution.setSortcode(sortCodeEdit->text());
+
+ accept();
+}
+
+const MyMoneyInstitution& KNewBankDlg::institution(void)
+{
+ return m_institution;
+}
+
+
+#include "knewbankdlg.moc"
diff --git a/kmymoney2/dialogs/knewbankdlg.h b/kmymoney2/dialogs/knewbankdlg.h
new file mode 100644
index 0000000..f829a4c
--- /dev/null
+++ b/kmymoney2/dialogs/knewbankdlg.h
@@ -0,0 +1,57 @@
+/***************************************************************************
+ knewbankdlg.h
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KNEWBANKDLG_H
+#define KNEWBANKDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qdialog.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../mymoney/mymoneyinstitution.h"
+#include "../mymoney/mymoneykeyvaluecontainer.h"
+
+#include "../dialogs/knewbankdlgdecl.h"
+
+/// This dialog lets the user create or edit an institution
+class KNewBankDlg : public KNewBankDlgDecl
+{
+ Q_OBJECT
+
+public:
+ KNewBankDlg(MyMoneyInstitution& institution, QWidget *parent = 0, const char *name = 0);
+ ~KNewBankDlg();
+ const MyMoneyInstitution& institution(void);
+
+protected slots:
+ void okClicked();
+ void institutionNameChanged( const QString &);
+
+private:
+ MyMoneyInstitution m_institution;
+
+};
+
+#endif
diff --git a/kmymoney2/dialogs/knewbankdlgdecl.ui b/kmymoney2/dialogs/knewbankdlgdecl.ui
new file mode 100644
index 0000000..e6d4f52
--- /dev/null
+++ b/kmymoney2/dialogs/knewbankdlgdecl.ui
@@ -0,0 +1,268 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KNewBankDlgDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>kNewBankDlgDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>631</width>
+ <height>344</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>New Institution Dialog</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox1</cstring>
+ </property>
+ <property name="title">
+ <string>Institution Details</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Name:</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>nameEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>City:</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>cityEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Street:</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>streetEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Postal Code:</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="3" column="1">
+ <property name="name">
+ <cstring>postcodeEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel5</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Telephone/Fax:</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="4" column="1">
+ <property name="name">
+ <cstring>telephoneEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>TextLabel6</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Routing Number:</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="5" column="1">
+ <property name="name">
+ <cstring>sortCodeEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="6" column="0">
+ <property name="name">
+ <cstring>TextLabel7</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>BIC</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="6" column="1">
+ <property name="name">
+ <cstring>bicEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer30</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="Line">
+ <property name="name">
+ <cstring>Line1_2</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <property name="lineWidth">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout51</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>449</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>okBtn</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>cancelBtn</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<tabstops>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/knewbudgetdlg.cpp b/kmymoney2/dialogs/knewbudgetdlg.cpp
new file mode 100644
index 0000000..5971e54
--- /dev/null
+++ b/kmymoney2/dialogs/knewbudgetdlg.cpp
@@ -0,0 +1,83 @@
+/***************************************************************************
+ knewbudgetdlg.cpp
+ -------------------
+ begin : Wed Jan 18 2006
+ copyright : (C) 2000-2004 by Darren Gould
+ email : darren_gould@gmx.de
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qcheckbox.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kpushbutton.h>
+#include <klistview.h>
+#include <kiconloader.h>
+#include <kguiitem.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include "knewbudgetdlg.h"
+
+const int KNewBudgetDlg::m_icFutureYears = 5;
+const int KNewBudgetDlg::m_icPastYears = 2;
+
+KNewBudgetDlg::KNewBudgetDlg(QWidget* parent, const char *name) :
+ KNewBudgetDlgDecl(parent, name)
+{
+ QStringList slYear;
+ QDate dToday = QDate::currentDate();
+ int iYear = dToday.year();
+
+ for (int i=0; i<=m_icFutureYears; i++)
+ m_cbYear->insertItem( QString::number(iYear++) );
+
+ iYear = dToday.year();
+ for (int i=0; i<=m_icFutureYears; i++)
+ m_cbYear->insertItem( QString::number(--iYear) );
+}
+
+KNewBudgetDlg::~KNewBudgetDlg()
+{
+}
+
+void KNewBudgetDlg::m_pbCancel_clicked()
+{
+ reject();
+}
+
+void KNewBudgetDlg::m_pbOk_clicked()
+{
+ // force focus change to update all data
+ m_pbOk->setFocus();
+
+ if (m_leBudgetName->displayText().isEmpty())
+ {
+ KMessageBox::information(this, i18n("Please specify a budget name"));
+ m_leBudgetName->setFocus();
+ return;
+ }
+
+ m_year = m_cbYear->currentText();
+ m_name = m_leBudgetName->displayText();
+
+ accept();
+}
+
+
+#include "knewbudgetdlg.moc"
diff --git a/kmymoney2/dialogs/knewbudgetdlg.h b/kmymoney2/dialogs/knewbudgetdlg.h
new file mode 100644
index 0000000..db63e11
--- /dev/null
+++ b/kmymoney2/dialogs/knewbudgetdlg.h
@@ -0,0 +1,59 @@
+/***************************************************************************
+ knewbudgetdlg.h
+ -------------------
+ begin : Wed Jan 18 2006
+ copyright : (C) 2000-2004 by Darren Gould
+ email : darren_gould@gmx.de
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KNEWBUDGETDLG_H
+#define KNEWBUDGETDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+class QListViewItem;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+#include <qdatetime.h>
+#include <qcombobox.h>
+#include <qlineedit.h>
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../dialogs/knewbudgetdlgdecl.h"
+
+class KNewBudgetDlg : public KNewBudgetDlgDecl
+{
+ Q_OBJECT
+public:
+ KNewBudgetDlg(QWidget* parent, const char *name);
+ ~KNewBudgetDlg();
+
+ QString& getYear() {return m_year;};
+ QString& getName() {return m_name;};
+
+public slots:
+ virtual void m_pbCancel_clicked();
+ virtual void m_pbOk_clicked();
+
+private:
+ // the combobox should look m_icNextYears into the future
+ static const int m_icFutureYears;
+ static const int m_icPastYears;
+
+ QString m_year;
+ QString m_name;
+};
+
+#endif // KNEWBUDGETDLG_H
diff --git a/kmymoney2/dialogs/knewbudgetdlgdecl.ui b/kmymoney2/dialogs/knewbudgetdlgdecl.ui
new file mode 100644
index 0000000..7066a56
--- /dev/null
+++ b/kmymoney2/dialogs/knewbudgetdlgdecl.ui
@@ -0,0 +1,175 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>KNewBudgetDlgDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KNewBudgetDlgDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>283</width>
+ <height>116</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>New Budget</string>
+ </property>
+ <property name="modal">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout11</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout10</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Year</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout8</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>m_leBudgetName</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <property name="name">
+ <cstring>m_cbYear</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="currentItem">
+ <number>0</number>
+ </property>
+ <property name="sizeLimit">
+ <number>15</number>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_pbOk</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_pbCancel</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>m_pbOk</sender>
+ <signal>clicked()</signal>
+ <receiver>KNewBudgetDlgDecl</receiver>
+ <slot>m_pbOk_clicked()</slot>
+ </connection>
+ <connection>
+ <sender>m_pbCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>KNewBudgetDlgDecl</receiver>
+ <slot>m_pbCancel_clicked()</slot>
+ </connection>
+</connections>
+<includes>
+ <include location="local" impldecl="in implementation">knewbudgetdlgdecl.ui.h</include>
+</includes>
+<slots>
+ <slot>m_pbOk_clicked()</slot>
+ <slot>m_pbCancel_clicked()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+
+
+
+
+</UI>
diff --git a/kmymoney2/dialogs/knewequityentrydecl.ui b/kmymoney2/dialogs/knewequityentrydecl.ui
new file mode 100644
index 0000000..affd116
--- /dev/null
+++ b/kmymoney2/dialogs/knewequityentrydecl.ui
@@ -0,0 +1,236 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>kNewEquityEntryDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>kNewEquityEntryDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>417</width>
+ <height>208</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>New Equity</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout10</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>lblEquityName</cstring>
+ </property>
+ <property name="text">
+ <string>Equity Name:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>lblType</cstring>
+ </property>
+ <property name="text">
+ <string>Investment Type:</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>edtMarketSymbol</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Trading Symbol of the stock or mutual fund, not required.</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Trading Symbol of the stock or mutual fund, not required.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="3" column="1">
+ <property name="name">
+ <cstring>layout8</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>1 /</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit">
+ <property name="name">
+ <cstring>edtFraction</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>lblSymbol</cstring>
+ </property>
+ <property name="text">
+ <string>Market Symbol:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Smallest fraction:</string>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="2" column="1">
+ <item>
+ <property name="text">
+ <string>Stock</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Mutual Fund</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Bond</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>cmbInvestmentType</cstring>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>edtEquityName</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Name of the company, or mutual fund.</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Name of the company, or mutual fund.</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>81</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>btnOK</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>btnCancel</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>kMyMoneyEdit</class>
+ <header location="local">../widgets/kmymoneyedit.h</header>
+ <sizehint>
+ <width>90</width>
+ <height>25</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>1</hordata>
+ <verdata>1</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="256">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000000c749444154789cad55db1184200c4c180bb005eab1cd6b8112b40d4bf1bee2486ef3006fbf1c93ece605f07eece4e1a4ed42ff2b35f6e2961132e46309941952ed8f628a761a21f56217cb20b04a45fe276d97f8ffb422431ad96e62a4ee057a83131bcc38431a6d057f8eb5cb36438afcb5cded719614011e9088308374c61aa9adb0e0651b5552b4b29efaacb099312ad5da5b2d50a93124463b2adf516fbb8cbd1354a9b1b667c8a787674144f9f982bcb93635ba8cb3fd1b2616f251013403fee763fabce8bff0aa6c989d7e67440000000049454e44ae426082</data>
+ </image>
+</images>
+<tabstops>
+ <tabstop>edtEquityName</tabstop>
+ <tabstop>edtMarketSymbol</tabstop>
+ <tabstop>cmbInvestmentType</tabstop>
+ <tabstop>btnOK</tabstop>
+ <tabstop>btnCancel</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/knewequityentrydlg.cpp b/kmymoney2/dialogs/knewequityentrydlg.cpp
new file mode 100644
index 0000000..86a1ab8
--- /dev/null
+++ b/kmymoney2/dialogs/knewequityentrydlg.cpp
@@ -0,0 +1,99 @@
+/***************************************************************************
+ knewequityentrydlg.cpp - description
+ -------------------
+ begin : Tue Jan 29 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kpushbutton.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "knewequityentrydlg.h"
+#include "../widgets/kmymoneyedit.h"
+#include "../mymoney/mymoneymoney.h"
+
+KNewEquityEntryDlg::KNewEquityEntryDlg(QWidget *parent, const char *name)
+ : kNewEquityEntryDecl(parent, name, TRUE)
+{
+ edtFraction->setCalculatorButtonVisible(false);
+ edtFraction->setPrecision(0);
+ edtFraction->loadText("100");
+
+ connect(btnOK, SIGNAL(clicked()), this, SLOT(onOKClicked()));
+ connect(btnCancel, SIGNAL(clicked()), this, SLOT(reject()));
+
+ connect(edtFraction, SIGNAL(textChanged(const QString&)), this, SLOT(slotDataChanged()));
+ connect(edtMarketSymbol, SIGNAL(textChanged(const QString&)), this, SLOT(slotDataChanged()));
+ connect(edtEquityName, SIGNAL(textChanged(const QString&)), this, SLOT(slotDataChanged()));
+
+ // add icons to buttons
+ btnOK->setGuiItem(KStdGuiItem::ok());
+ btnCancel->setGuiItem(KStdGuiItem::cancel());
+
+ slotDataChanged();
+
+ edtEquityName->setFocus();
+}
+
+KNewEquityEntryDlg::~KNewEquityEntryDlg()
+{
+}
+
+/** No descriptions */
+void KNewEquityEntryDlg::onOKClicked()
+{
+ m_strSymbolName = edtMarketSymbol->text();
+ m_strName = edtEquityName->text();
+ m_fraction = edtFraction->value().abs();
+ accept();
+}
+
+void KNewEquityEntryDlg::setSymbolName(const QString& str)
+{
+ m_strSymbolName = str;
+ edtMarketSymbol->setText(m_strSymbolName);
+}
+
+void KNewEquityEntryDlg::setName(const QString& str)
+{
+ m_strName = str;
+ edtEquityName->setText(m_strName);
+}
+
+void KNewEquityEntryDlg::slotDataChanged(void)
+{
+ bool okEnabled = true;
+
+ if(!edtFraction->value().isPositive()
+ || edtMarketSymbol->text().isEmpty()
+ || edtEquityName->text().isEmpty())
+ okEnabled = false;
+
+ btnOK->setEnabled(okEnabled);
+}
+
+#include "knewequityentrydlg.moc"
diff --git a/kmymoney2/dialogs/knewequityentrydlg.h b/kmymoney2/dialogs/knewequityentrydlg.h
new file mode 100644
index 0000000..25605c6
--- /dev/null
+++ b/kmymoney2/dialogs/knewequityentrydlg.h
@@ -0,0 +1,64 @@
+/***************************************************************************
+ knewequityentrydlg.h - description
+ -------------------
+ begin : Tue Jan 29 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KNEWEQUITYENTRY_H
+#define KNEWEQUITYENTRY_H
+
+#include <qdialog.h>
+#include <klocale.h>
+
+#include "../dialogs/knewequityentrydecl.h"
+
+/**
+ *
+ * Dialog to allow user to enter all data for a stock or mutual fund investment type.
+ *
+ * @author Kevin Tambascio
+ *
+ */
+
+class KNewEquityEntryDlg : public kNewEquityEntryDecl
+{
+ Q_OBJECT
+public:
+ KNewEquityEntryDlg(QWidget *parent = NULL, const char *name = NULL);
+ virtual ~KNewEquityEntryDlg();
+
+ void setSymbolName(const QString& str);
+ QString symbolName(void) const { return m_strSymbolName; }
+
+ void setName(const QString& str);
+ QString name(void) const { return m_strName; }
+
+ int fraction(void) const { return m_fraction; }
+
+protected slots:
+ void onOKClicked(void);
+ void slotDataChanged(void);
+
+private:
+ QString m_strSymbolName;
+ QString m_strName;
+ int m_fraction;
+};
+
+#endif
diff --git a/kmymoney2/dialogs/knewfiledlg.cpp b/kmymoney2/dialogs/knewfiledlg.cpp
new file mode 100644
index 0000000..2ea043f
--- /dev/null
+++ b/kmymoney2/dialogs/knewfiledlg.cpp
@@ -0,0 +1,138 @@
+/***************************************************************************
+ knewfiledlg.cpp
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "kdecompat.h"
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qpixmap.h>
+#include <qlineedit.h>
+#include <qlabel.h>
+
+// ----------------------------------------------------------------------------
+// KDE Headers
+
+#include <kglobal.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+#include <kstdguiitem.h>
+#include <kpushbutton.h>
+#include <kmessagebox.h>
+
+#if KDE_IS_VERSION(3,1,90)
+#include <kabc/addressee.h>
+#include <kabc/stdaddressbook.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "knewfiledlg.h"
+
+KNewFileDlg::KNewFileDlg(QWidget *parent, const char *name, const QString& title)
+ : KNewFileDlgDecl(parent,name,true)
+{
+ init(title);
+}
+
+KNewFileDlg::KNewFileDlg(QString userName, QString userStreet,
+ QString userTown, QString userCounty, QString userPostcode, QString userTelephone,
+ QString userEmail, QWidget *parent, const char *name, const QString& title)
+ : KNewFileDlgDecl(parent,name,true)
+{
+ userNameEdit->setText(userName);
+ streetEdit->setText(userStreet);
+ townEdit->setText(userTown);
+ countyEdit->setText(userCounty);
+ postcodeEdit->setText(userPostcode);
+ telephoneEdit->setText(userTelephone);
+ emailEdit->setText(userEmail);
+
+ init(title);
+}
+
+void KNewFileDlg::init(const QString& title)
+{
+ bool showLoadButton = false;
+ okBtn->setGuiItem(KStdGuiItem::ok());
+ cancelBtn->setGuiItem(KStdGuiItem::cancel());
+
+ if (!title.isEmpty())
+ setCaption(title);
+
+#if KDE_IS_VERSION( 3, 1, 90 )
+ KABC::StdAddressBook *ab = static_cast<KABC::StdAddressBook*>
+ ( KABC::StdAddressBook::self() );
+ if ( ab && !ab->whoAmI().isEmpty() )
+ showLoadButton = true;
+#endif
+
+ if(!showLoadButton)
+ kabcBtn->hide();
+
+ userNameEdit->setFocus();
+
+ connect(cancelBtn, SIGNAL(clicked()), this, SLOT(reject()));
+ connect(okBtn, SIGNAL(clicked()), this, SLOT(okClicked()));
+ connect(kabcBtn, SIGNAL(clicked()), this, SLOT(loadFromKABC()));
+}
+
+KNewFileDlg::~KNewFileDlg(){
+}
+
+void KNewFileDlg::okClicked()
+{
+ userNameText = userNameEdit->text();
+ userStreetText = streetEdit->text();
+ userTownText = townEdit->text();
+ userCountyText = countyEdit->text();
+ userPostcodeText = postcodeEdit->text();
+ userTelephoneText = telephoneEdit->text();
+ userEmailText = emailEdit->text();
+
+ accept();
+}
+
+void KNewFileDlg::loadFromKABC(void)
+{
+#if KDE_IS_VERSION( 3, 1, 90 )
+ KABC::StdAddressBook *ab = static_cast<KABC::StdAddressBook*>
+ ( KABC::StdAddressBook::self() );
+ if ( !ab )
+ return;
+
+ KABC::Addressee addr = ab->whoAmI();
+ if ( addr.isEmpty() ) {
+ KMessageBox::sorry(this, i18n("Unable to load data, because no contact has been associated with the owner of the standard addressbook."), i18n("Addressbook import"));
+ return;
+ }
+
+ userNameEdit->setText( addr.formattedName() );
+ emailEdit->setText( addr.preferredEmail() );
+
+ KABC::PhoneNumber phone = addr.phoneNumber( KABC::PhoneNumber::Home );
+ telephoneEdit->setText( phone.number() );
+
+ KABC::Address a = addr.address( KABC::Address::Home );
+ countyEdit->setText( a.country() + " / " + a.region() );
+ postcodeEdit->setText( a.postalCode() );
+ townEdit->setText( a.locality() );
+ streetEdit->setText( a.street() );
+#endif
+}
+
+#include "knewfiledlg.moc"
diff --git a/kmymoney2/dialogs/knewfiledlg.h b/kmymoney2/dialogs/knewfiledlg.h
new file mode 100644
index 0000000..706a139
--- /dev/null
+++ b/kmymoney2/dialogs/knewfiledlg.h
@@ -0,0 +1,63 @@
+/***************************************************************************
+ knewfiledlg.h
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KNEWFILEDLG_H
+#define KNEWFILEDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qdialog.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include "../dialogs/knewfiledlgdecl.h"
+
+// This dialog lets the user create/edit a file.
+// Use the second constructor to edit a file.
+class KNewFileDlg : public KNewFileDlgDecl {
+ Q_OBJECT
+public:
+ KNewFileDlg(QWidget *parent=0, const char *name=0, const QString& title=QString());
+ KNewFileDlg(QString userName, QString userStreet,
+ QString userTown, QString userCounty, QString userPostcode, QString userTelephone,
+ QString userEmail, QWidget *parent=0, const char *name=0, const QString& title=QString());
+ ~KNewFileDlg();
+
+ KPushButton* cancelButton(void) { return cancelBtn; };
+
+public:
+ QString userNameText;
+ QString userStreetText;
+ QString userTownText;
+ QString userCountyText;
+ QString userPostcodeText;
+ QString userTelephoneText;
+ QString userEmailText;
+
+protected:
+ /// helper method for constructors
+ void init(const QString& title);
+
+protected slots:
+ void okClicked();
+ void loadFromKABC(void);
+};
+
+#endif
diff --git a/kmymoney2/dialogs/knewfiledlgdecl.ui b/kmymoney2/dialogs/knewfiledlgdecl.ui
new file mode 100644
index 0000000..9097a74
--- /dev/null
+++ b/kmymoney2/dialogs/knewfiledlgdecl.ui
@@ -0,0 +1,328 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>KNewFileDlgDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>kNewFileDlgDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>546</width>
+ <height>448</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>New File Dialog</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout10</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>Use this dialog to enter personal information about yourself.
+
+All information is optional and is provided to personalize
+your KMyMoney file.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="Line">
+ <property name="name">
+ <cstring>Line1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <property name="lineWidth">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout20</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>County/State:</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>userNameEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="3" column="1">
+ <property name="name">
+ <cstring>countyEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>townEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Street:</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>streetEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="6" column="0">
+ <property name="name">
+ <cstring>TextLabel7</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Email:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Your name:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>TextLabel6</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Telephone:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Town:</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="6" column="1">
+ <property name="name">
+ <cstring>emailEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel5</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Postal Code:</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="5" column="1">
+ <property name="name">
+ <cstring>telephoneEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="4" column="1">
+ <property name="name">
+ <cstring>postcodeEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout22</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>kabcBtn</cstring>
+ </property>
+ <property name="text">
+ <string>Load from Addressbook</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer11</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>305</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout10</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>360</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>okBtn</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>cancelBtn</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<tabstops>
+ <tabstop>userNameEdit</tabstop>
+ <tabstop>streetEdit</tabstop>
+ <tabstop>townEdit</tabstop>
+ <tabstop>countyEdit</tabstop>
+ <tabstop>postcodeEdit</tabstop>
+ <tabstop>telephoneEdit</tabstop>
+ <tabstop>emailEdit</tabstop>
+ <tabstop>kabcBtn</tabstop>
+ <tabstop>okBtn</tabstop>
+ <tabstop>cancelBtn</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/knewinvestmentwizard.cpp b/kmymoney2/dialogs/knewinvestmentwizard.cpp
new file mode 100644
index 0000000..d0c9046
--- /dev/null
+++ b/kmymoney2/dialogs/knewinvestmentwizard.cpp
@@ -0,0 +1,314 @@
+/***************************************************************************
+ knewinvestmentwizard - description
+ -------------------
+ begin : Sat Dec 4 2004
+ copyright : (C) 2004 by Thomas Baumgart
+ email : kmymoney2-developer@lists.sourceforge.net
+***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qcheckbox.h>
+#include <qlabel.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kpushbutton.h>
+#include <kcombobox.h>
+#include <kurlrequester.h>
+#include <klocale.h>
+#include <kapplication.h>
+#include <kmessagebox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "knewinvestmentwizard.h"
+
+#include <kmymoney/kmymoneylineedit.h>
+#include <kmymoney/kmymoneyedit.h>
+#include <kmymoney/mymoneysecurity.h>
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/kmymoneycombo.h>
+#include "../widgets/kmymoneycurrencyselector.h"
+#include "../converter/webpricequote.h"
+#include "../kmymoneyutils.h"
+
+KNewInvestmentWizard::KNewInvestmentWizard( QWidget *parent, const char *name ) :
+ KNewInvestmentWizardDecl( parent, name )
+{
+ init1();
+ slotCheckPage(QString());
+
+ m_investmentSymbol->setFocus();
+ connect(m_investmentSymbol, SIGNAL(lineChanged(const QString&)), this, SLOT(slotCheckForExistingSymbol(const QString&)));
+}
+
+KNewInvestmentWizard::KNewInvestmentWizard( const MyMoneyAccount& acc, QWidget *parent, const char *name ) :
+ KNewInvestmentWizardDecl( parent, name ),
+ m_account(acc)
+{
+ setCaption(i18n("Investment detail wizard"));
+ init1();
+
+ // load the widgets with the data
+ setName(m_account.name());
+ m_security = MyMoneyFile::instance()->security(m_account.currencyId());
+
+ init2();
+
+ int priceMode = 0;
+ if(!m_account.value("priceMode").isEmpty())
+ priceMode = m_account.value("priceMode").toInt();
+ m_priceMode->setCurrentItem(priceMode);
+
+}
+
+KNewInvestmentWizard::KNewInvestmentWizard( const MyMoneySecurity& security, QWidget *parent, const char *name ) :
+ KNewInvestmentWizardDecl( parent, name ),
+ m_security(security)
+{
+ setCaption(i18n("Security detail wizard"));
+ init1();
+ m_createAccount = false;
+
+ // load the widgets with the data
+ setName(security.name());
+
+ init2();
+
+ // no chance to change the price mode here
+ m_priceMode->setCurrentItem(0);
+ m_priceMode->setEnabled(false);
+}
+
+void KNewInvestmentWizard::init1(void)
+{
+ m_onlineSourceCombo->insertStringList( WebPriceQuote::quoteSources() );
+
+ m_onlineFactor->setValue(MyMoneyMoney(1,1));
+ m_onlineFactor->setPrecision(4);
+
+ m_fraction->setPrecision(0);
+ m_fraction->setValue(MyMoneyMoney(100, 1));
+ kMyMoneyMoneyValidator* fractionValidator = new kMyMoneyMoneyValidator(1, 100000, 0, this);
+ m_fraction->setValidator(fractionValidator);
+
+ // load the price mode combo
+ m_priceMode->insertItem(i18n("default price mode", "<default>"), 0);
+ m_priceMode->insertItem(i18n("Price per share"), 1);
+ m_priceMode->insertItem(i18n("Total for all shares"), 2);
+
+ // load the widget with the available currencies
+ m_tradingCurrencyEdit->update(QString());
+
+ connect(helpButton(),SIGNAL(clicked()), this, SLOT(slotHelp(void)));
+ connect(m_investmentName, SIGNAL(textChanged(const QString&)), this, SLOT(slotCheckPage(void)));
+ connect(m_investmentSymbol, SIGNAL(textChanged(const QString&)), this, SLOT(slotCheckPage(void)));
+ connect(m_fraction, SIGNAL(textChanged(const QString&)), this, SLOT(slotCheckPage(void)));
+ connect(m_investmentIdentification, SIGNAL(textChanged(const QString&)), this, SLOT(slotCheckPage(void)));
+ connect(m_onlineFactor, SIGNAL(textChanged(const QString&)), this, SLOT(slotCheckPage(void)));
+ connect(m_onlineSourceCombo, SIGNAL(activated(const QString&)), this, SLOT(slotCheckPage(const QString&)));
+ connect(m_useFinanceQuote, SIGNAL(toggled(bool)), this, SLOT(slotSourceChanged(bool)));
+
+ m_createAccount = true;
+
+ // Update label in case of edit
+ if(!m_account.id().isEmpty()) {
+ m_introLabel->setText(i18n("This wizard allows you to modify the selected investment."));
+ }
+ if(!m_security.id().isEmpty()) {
+ m_introLabel->setText(i18n("This wizard allows you to modify the selected security."));
+ }
+
+
+}
+
+void KNewInvestmentWizard::init2(void)
+{
+ MyMoneySecurity tradingCurrency = MyMoneyFile::instance()->currency(m_security.tradingCurrency());
+ m_investmentSymbol->setText(m_security.tradingSymbol());
+ m_tradingMarket->setCurrentText(m_security.tradingMarket());
+ m_fraction->setValue(MyMoneyMoney(m_security.smallestAccountFraction(), 1));
+ m_tradingCurrencyEdit->setSecurity(tradingCurrency);
+ if (m_security.value("kmm-online-quote-system") == "Finance::Quote") {
+ FinanceQuoteProcess p;
+ m_useFinanceQuote->setChecked(true);
+ m_onlineSourceCombo->setCurrentText(p.niceName(m_security.value("kmm-online-source")));
+ } else {
+ m_onlineSourceCombo->setCurrentText(m_security.value("kmm-online-source"));
+ }
+ if(!m_security.value("kmm-online-factor").isEmpty())
+ m_onlineFactor->setValue(MyMoneyMoney(m_security.value("kmm-online-factor")));
+ m_investmentIdentification->setText(m_security.value("kmm-security-id"));
+ m_securityType->setCurrentText(KMyMoneyUtils::securityTypeToString(m_security.securityType()));
+
+ slotCheckPage(m_security.value("kmm-online-source"));
+}
+
+KNewInvestmentWizard::~KNewInvestmentWizard()
+{
+}
+
+void KNewInvestmentWizard::setName(const QString& name)
+{
+ m_investmentName->setText(name);
+}
+
+void KNewInvestmentWizard::next(void)
+{
+ KNewInvestmentWizardDecl::next();
+ slotCheckPage();
+}
+
+void KNewInvestmentWizard::slotCheckForExistingSymbol(const QString& symbol)
+{
+ if(m_investmentName->text().isEmpty()) {
+ QValueList<MyMoneySecurity> list = MyMoneyFile::instance()->securityList();
+ QValueList<MyMoneySecurity>::const_iterator it_s;
+ MyMoneySecurity::eSECURITYTYPE type = KMyMoneyUtils::stringToSecurity(m_securityType->currentText());
+
+ for(it_s = list.begin(); it_s != list.end(); ++it_s) {
+ if((*it_s).securityType() == type
+ && (*it_s).tradingSymbol() == m_investmentSymbol->text()) {
+ m_security = MyMoneySecurity();
+ if(KMessageBox::questionYesNo(this, i18n("The selected symbol is already on file. Do you want to reuse the existing security?"), i18n("Security found")) == KMessageBox::Yes) {
+ m_security = *it_s;
+ init2();
+ m_investmentName->loadText(m_security.name());
+ }
+ break;
+ }
+ }
+ }
+}
+
+void KNewInvestmentWizard::slotSourceChanged(bool useFQ)
+{
+ m_onlineSourceCombo->clear();
+ m_onlineSourceCombo->insertItem(QString(), 0);
+ if (useFQ) {
+ m_onlineSourceCombo->insertStringList( WebPriceQuote::quoteSources( WebPriceQuote::FinanceQuote ) );
+ } else {
+ m_onlineSourceCombo->insertStringList( WebPriceQuote::quoteSources() );
+ }
+}
+
+void KNewInvestmentWizard::slotCheckPage(const QString& txt)
+{
+ m_onlineFactor->setEnabled(!txt.isEmpty());
+}
+
+void KNewInvestmentWizard::slotCheckPage(void)
+{
+ if(currentPage() == m_investmentDetailsPage) {
+ setNextEnabled(m_investmentDetailsPage, false);
+ if(m_investmentName->text().length() > 0
+ && m_investmentSymbol->text().length() > 0
+ && !m_fraction->value().isZero()
+ ) {
+ setNextEnabled(m_investmentDetailsPage, true);
+ }
+ } else if(currentPage() == m_onlineUpdatePage) {
+ setFinishEnabled(m_onlineUpdatePage, true);
+ if(m_onlineFactor->isEnabled() && m_onlineFactor->value().isZero())
+ setFinishEnabled(m_onlineUpdatePage, false);
+ }
+}
+
+void KNewInvestmentWizard::slotHelp(void)
+{
+ kapp->invokeHelp("details.investments.newinvestmentwizard");
+}
+
+void KNewInvestmentWizard::createObjects(const QString& parentId)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ QValueList<MyMoneySecurity> list = MyMoneyFile::instance()->securityList();
+ QValueList<MyMoneySecurity>::ConstIterator it;
+
+ MyMoneySecurity::eSECURITYTYPE type = KMyMoneyUtils::stringToSecurity(m_securityType->currentText());
+ MyMoneyFileTransaction ft;
+ try {
+ // update all relevant attributes only, if we create a stock
+ // account and the security is unknown or we modifiy the security
+ MyMoneySecurity newSecurity(m_security);
+ newSecurity.setName(m_investmentName->text());
+ newSecurity.setTradingSymbol(m_investmentSymbol->text());
+ newSecurity.setTradingMarket(m_tradingMarket->currentText());
+ newSecurity.setSmallestAccountFraction(m_fraction->value());
+ newSecurity.setTradingCurrency(m_tradingCurrencyEdit->security().id());
+ newSecurity.setSecurityType(type);
+ newSecurity.deletePair("kmm-online-source");
+ newSecurity.deletePair("kmm-online-quote-system");
+ newSecurity.deletePair("kmm-online-factor");
+ newSecurity.deletePair("kmm-security-id");
+
+ if(!m_onlineSourceCombo->currentText().isEmpty()) {
+ if (m_useFinanceQuote->isChecked()) {
+ FinanceQuoteProcess p;
+ newSecurity.setValue("kmm-online-quote-system", "Finance::Quote");
+ newSecurity.setValue("kmm-online-source", p.crypticName(m_onlineSourceCombo->currentText()));
+ }else{
+ newSecurity.setValue("kmm-online-source", m_onlineSourceCombo->currentText());
+ }
+ }
+ if(m_onlineFactor->isEnabled() && (m_onlineFactor->value() != MyMoneyMoney(1,1)))
+ newSecurity.setValue("kmm-online-factor", m_onlineFactor->value().toString());
+ if(!m_investmentIdentification->text().isEmpty())
+ newSecurity.setValue("kmm-security-id", m_investmentIdentification->text());
+
+ if(m_security.id().isEmpty() || newSecurity != m_security) {
+ m_security = newSecurity;
+
+ // add or update it
+ if(m_security.id().isEmpty()) {
+ file->addSecurity(m_security);
+ } else {
+ file->modifySecurity(m_security);
+ }
+ }
+
+ if(m_createAccount) {
+ // now that the security exists, we can add the account to store it
+ m_account.setName(m_investmentName->text());
+ if(m_account.accountType() == MyMoneyAccount::UnknownAccountType)
+ m_account.setAccountType(MyMoneyAccount::Stock);
+
+ m_account.setCurrencyId(m_security.id());
+ switch(m_priceMode->currentItem()) {
+ case 0:
+ m_account.deletePair("priceMode");
+ break;
+ case 1:
+ case 2:
+ m_account.setValue("priceMode", QString("%1").arg(m_priceMode->currentItem()));
+ break;
+ }
+
+ if(m_account.id().isEmpty()) {
+ MyMoneyAccount parent = file->account(parentId);
+ file->addAccount(m_account, parent);
+ } else
+ file->modifyAccount(m_account);
+ }
+ ft.commit();
+ } catch(MyMoneyException* e) {
+ KMessageBox::detailedSorry(0, i18n("Unable to create all objects for the investment"), QString("%1 caugt in %2:%3").arg(e->what()).arg(e->file()).arg(e->line()));
+ delete e;
+ }
+}
+
+#include "knewinvestmentwizard.moc"
diff --git a/kmymoney2/dialogs/knewinvestmentwizard.h b/kmymoney2/dialogs/knewinvestmentwizard.h
new file mode 100644
index 0000000..7540521
--- /dev/null
+++ b/kmymoney2/dialogs/knewinvestmentwizard.h
@@ -0,0 +1,94 @@
+/***************************************************************************
+ knewinvestmentwizard - description
+ -------------------
+ begin : Sat Dec 4 2004
+ copyright : (C) 2004 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KNEWINVESTMENTWIZARD_H
+#define KNEWINVESTMENTWIZARD_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../dialogs/knewinvestmentwizarddecl.h"
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneysecurity.h>
+
+/**
+ * This class contains the implementation of the new investment wizard.
+ *
+ * @author Thomas Baumgart
+ */
+class KNewInvestmentWizard : public KNewInvestmentWizardDecl
+{
+ Q_OBJECT
+public:
+ /**
+ * Use this constructor for the creation of a new investment
+ */
+ KNewInvestmentWizard( QWidget *parent = 0, const char *name = 0 );
+
+ /**
+ * Use this constructor for the modification of an existing investment
+ */
+ KNewInvestmentWizard( const MyMoneyAccount& acc, QWidget *parent = 0, const char *name = 0 );
+
+ /**
+ * Use this constructor for the modification of an existing security
+ */
+ KNewInvestmentWizard( const MyMoneySecurity& sec, QWidget *parent = 0, const char *name = 0 );
+
+ ~KNewInvestmentWizard();
+
+ /**
+ * This method sets the name in the name widget.
+ */
+ void setName(const QString& name);
+
+ /**
+ * Depending on the constructor used, this method either
+ * creates all necessary objects for the investment or updates
+ * them.
+ *
+ * @param parentId id of parent account for the investment
+ */
+ void createObjects(const QString& parentId);
+
+ const MyMoneyAccount& account(void) const { return m_account; }
+
+protected slots:
+ void next(void);
+ void slotCheckPage(void);
+ void slotCheckPage(const QString&);
+ void slotCheckForExistingSymbol(const QString&);
+ void slotSourceChanged(bool);
+ void slotHelp(void);
+
+private:
+ void init1(void);
+ void init2(void);
+
+private:
+ MyMoneyAccount m_account;
+ MyMoneySecurity m_security;
+ bool m_createAccount;
+};
+
+#endif
diff --git a/kmymoney2/dialogs/knewinvestmentwizarddecl.ui b/kmymoney2/dialogs/knewinvestmentwizarddecl.ui
new file mode 100644
index 0000000..a6e9241
--- /dev/null
+++ b/kmymoney2/dialogs/knewinvestmentwizarddecl.ui
@@ -0,0 +1,591 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KNewInvestmentWizardDecl</class>
+<widget class="QWizard">
+ <property name="name">
+ <cstring>KNewInvestmentWizardDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>584</width>
+ <height>385</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>New Investment wizard</string>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_investmentTypePage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Investment Type</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_introLabel</cstring>
+ </property>
+ <property name="text">
+ <string>This wizard allows you to create a new investment.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer8</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>10</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>The first step in this process requires to select the type of investment. The following steps collect more details about the investment from you.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>30</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Type of investment</string>
+ </property>
+ </widget>
+ <widget class="KComboBox">
+ <item>
+ <property name="text">
+ <string>Stock</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Mutual Fund</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Bond</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_securityType</cstring>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>61</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>60</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_investmentDetailsPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Investment details</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel3_2</cstring>
+ </property>
+ <property name="text">
+ <string>Enter the details below and click &lt;b&gt;Next&lt;/b&gt; to continue entering the online update details.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout9</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="kMyMoneyLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>m_investmentName</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="2" column="1">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1_5</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>1 /</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit">
+ <property name="name">
+ <cstring>m_fraction</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="6" column="0">
+ <property name="name">
+ <cstring>textLabel2_5</cstring>
+ </property>
+ <property name="text">
+ <string>Price entry</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Fraction</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>textLabel1_4</cstring>
+ </property>
+ <property name="text">
+ <string>Trading Currency</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Full name</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyGeneralCombo" row="6" column="1">
+ <property name="name">
+ <cstring>m_priceMode</cstring>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="3" column="1">
+ <item>
+ <property name="text">
+ <string>AMEX</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>EUREX</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>FUND</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>NASDAQ</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>NYSE</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>XETRA</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_tradingMarket</cstring>
+ </property>
+ <property name="editable">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Trading symbol</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>Identification</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneySecuritySelector" row="5" column="1">
+ <property name="name">
+ <cstring>m_tradingCurrencyEdit</cstring>
+ </property>
+ </widget>
+ <widget class="kMyMoneyLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>m_investmentSymbol</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Enter the ticker symbol (e.g. RHAT).</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyLineEdit" row="4" column="1">
+ <property name="name">
+ <cstring>m_investmentIdentification</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Enter the CUSIP/ISIN/WKN identification number here</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel1_3</cstring>
+ </property>
+ <property name="text">
+ <string>Trading market</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_onlineUpdatePage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Online Update</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel6</cstring>
+ </property>
+ <property name="text">
+ <string>Select an online source and click &lt;b&gt;Finish&lt;/b&gt; to store the investment data. If you don't want to use online updates, just leave the data as is.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout25</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout24</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout21</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2_4</cstring>
+ </property>
+ <property name="text">
+ <string>Use Finance::Quote</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_useFinanceQuote</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout23</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2_3</cstring>
+ </property>
+ <property name="text">
+ <string>Online Source</string>
+ </property>
+ </widget>
+ <widget class="KComboBox">
+ <item>
+ <property name="text">
+ <string></string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_onlineSourceCombo</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>180</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout22</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1_6</cstring>
+ </property>
+ <property name="text">
+ <string>Factor</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit">
+ <property name="name">
+ <cstring>m_onlineFactor</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer29</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>371</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer30</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>181</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>kMyMoneyLineEdit</class>
+ <header location="local">../widgets/kmymoneylineedit.h</header>
+ <sizehint>
+ <width>90</width>
+ <height>25</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="1110">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000041d49444154388d8d95c18b1c4514c67fbb29e5b54ea05b26da1d36b08d09a6c508138cb8c13d647141163de49043bca9f1628eb9294810f24f88c15b728b07617358888785d980427290b4a8d00b19a8821da8228cf42316ac87eed9247ac95c9aeaeef9eaabdffb5ebf85f178ccfcf7f5b79fec07a7280a08a008f25ceb7c29e5da573716e65a0be3f198ef6f5ededff9b9e1b34faf90882092a1ea21428b9220ffbf46054055b19386ba6970ae6665b5e0d2c5eb0b066067bbe1f21757c88f5504eff0c192189081303a5582b16854fccce2fe041f00cdd0a8103b874556405476b62d972ec2c2b90ff3fd8df5cb946549d80b34aea15ccaa94625450e2d0e558b460b7371a734b5e027251a155545678ab62d7eea90b4c504078908c107acb354cb251b1f8f08b1c18631aabbb4d18211404804f22545863561d2f060fb34aa8a18d0086204e72c46a32292e1a796f278c1da7a859d8da9a737506db04d0a24103d8949480b214d3bbee952a05c1d536f9d2684160c744f048311543d459eb1b65ee1754cedae13a64abd5d6127053c9d0281f22d4f75c6a2118a5c09272d7ab740638bf4ef2dd2174032d0d8d04c6fe19c32bedd8bc65e342aa3f785e2784bfd6bc1bd9db24b05505616a4edd67d5a8c1801a03a9962754c504bf34b8986acfb9be91cac7d54315a15541b36b134f74bd2dc53940115a5381e087bc25c6f71be831a8baa234cc1ee3eeb74ed83116beb2b8849d108a3730e8ce27e2bfb82419a7b407ac7c222fd0e6280a8078ce64e47ef54ac9d5be9aaae0162e0de568a44a18d3df90845d919c4f01463406340a44f40efb43a99b371618488e2670d1a2d7ee6f1d3be39342104e937ed85fb86599c33e9ee0be9a004946259d8b858909880d59aa00daa0d3280b5f39e34074c4b3a5434029a76a9e9f5cc0163b5c80024158a1cfc4cb1d3061d5834066cb0a403c008599a70f6bc27b8d03106ea3ae91987278c5b143b015547224ab5e24185cd9b81665273e7b6e7cecd82ddbf8098002de94049737bc09828cf3036f31c3735c8b0e98eb704672f348c7f7c93cd1fb2ae905119ff54e0dff3542b0e9dd983dcea2cc5eea6cf303e74ec687af5c41b6fa38f5e203c7ec8e1238ef85831a214afef21060ea781ec68247b65c6916353cc8b73d1ae79354606af2a930709aa118da1636c274dd7e3774b884a79aa6b5711a538d33cf9c01c1c9b83bc6a1f55c91ccb23b05b1deb43a7decdaffefd2862f61366aa8449c69e33642f012f2bb208fa98eeda1f3346f076c8eeef19475e9be115423364f78f84105a8643d34d90cfbfdcd8cf872589a45dc7f54cf3134a36f4e495c23f9da8db15bccb708d4014f2ca512cb5d4f7c13e84300d5cff6eb39b202bab053bdb9674f0648609427d0f8402ddeac30f4fcd3ced3efc3b422d406c09b340bedc1571e1bfc3d44dc281634c5fe5e758e7395cfbe6d6c130fd17d92372d277c159b70000000049454e44ae426082</data>
+ </image>
+</images>
+<tabstops>
+ <tabstop>m_securityType</tabstop>
+ <tabstop>m_investmentSymbol</tabstop>
+ <tabstop>m_investmentName</tabstop>
+ <tabstop>m_fraction</tabstop>
+ <tabstop>m_tradingMarket</tabstop>
+ <tabstop>m_investmentIdentification</tabstop>
+ <tabstop>m_tradingCurrencyEdit</tabstop>
+ <tabstop>m_priceMode</tabstop>
+ <tabstop>m_useFinanceQuote</tabstop>
+ <tabstop>m_onlineSourceCombo</tabstop>
+ <tabstop>m_onlineFactor</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/knewloanwizard.cpp b/kmymoney2/dialogs/knewloanwizard.cpp
new file mode 100644
index 0000000..28c48ef
--- /dev/null
+++ b/kmymoney2/dialogs/knewloanwizard.cpp
@@ -0,0 +1,1088 @@
+/***************************************************************************
+ knewloanwizard.cpp - description
+ -------------------
+ begin : Wed Oct 8 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include <math.h>
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qradiobutton.h>
+#include <qcheckbox.h>
+#include <qlabel.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kpushbutton.h>
+#include <knuminput.h>
+#include <kmessagebox.h>
+#include <kiconloader.h>
+#include <kguiitem.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "knewloanwizard.h"
+
+#include "../kmymoneyutils.h"
+#include <kmymoney/kmymoneylineedit.h>
+#include <kmymoney/kmymoneydateinput.h>
+#include <kmymoney/kmymoneyedit.h>
+#include <kmymoney/kmymoneyaccountselector.h>
+#include "../widgets/kmymoneycombo.h"
+
+#include "../dialogs/knewaccountdlg.h"
+#include "../dialogs/ksplittransactiondlg.h"
+
+#include "../mymoney/mymoneyfinancialcalculator.h"
+#include "../mymoney/mymoneyfile.h"
+
+#include "../kmymoney2.h"
+
+KNewLoanWizard::KNewLoanWizard(QWidget *parent, const char *name ) :
+ KNewLoanWizardDecl(parent, name, true)
+{
+ connect(m_borrowButton, SIGNAL(clicked()), this, SLOT(slotLiabilityLoan()));
+ connect(m_lendButton, SIGNAL(clicked()), this, SLOT(slotAssetLoan()));
+
+ connect(m_nameEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotCheckPageFinished()));
+ // connect(m_payeeEdit, SIGNAL(newPayee(const QString&)), this, SLOT(slotNewPayee(const QString&)));
+ connect(m_payeeEdit, SIGNAL(createItem(const QString&, QString&)), this, SIGNAL(createPayee(const QString&, QString&)));
+
+ connect(m_previousPaymentButton, SIGNAL(clicked()), this, SLOT(slotPaymentsMade()));
+ connect(m_noPreviousPaymentButton, SIGNAL(clicked()), this, SLOT(slotNoPaymentsMade()));
+
+ connect(m_allPaymentsButton, SIGNAL(clicked()), this, SLOT(slotRecordAllPayments()));
+ connect(m_thisYearPaymentButton, SIGNAL(clicked()), this, SLOT(slotRecordThisYearsPayments()));
+
+ connect(m_firstDueDateEdit, SIGNAL(dateChanged(const QDate&)), this, SLOT(slotCheckPageFinished()));
+
+ connect(m_interestOnPaymentButton, SIGNAL(clicked()), this, SLOT(slotInterestOnPayment()));
+ connect(m_interestOnReceptionButton, SIGNAL(clicked()), this, SLOT(slotInterestOnReception()));
+
+ connect(m_loanAmountEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotCheckPageFinished()));
+
+ connect(m_interestAccountEdit, SIGNAL(stateChanged()), this, SLOT(slotCheckPageFinished()));
+
+ connect(m_nextDueDateEdit, SIGNAL(dateChanged(const QDate&)), this, SLOT(slotCheckPageFinished()));
+ connect(m_paymentAccountEdit, SIGNAL(stateChanged()), this, SLOT(slotCheckPageFinished()));
+
+ connect(m_assetAccountEdit, SIGNAL(stateChanged()), this, SLOT(slotCheckPageFinished()));
+ connect(m_dontCreatePayoutCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckPageFinished()));
+
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotReloadEditWidgets()));
+
+ loadComboBoxes();
+
+ resetCalculator();
+
+ slotReloadEditWidgets();
+
+ // As default we assume a liability loan, with fixed interest rate,
+ // with a first payment due on the 30th of this month. All payments
+ // should be recorded and none have been made so far.
+ m_dontCreatePayoutCheckBox->setChecked(false);
+ m_borrowButton->animateClick();
+ m_fixedInterestButton->animateClick();
+ m_noPreviousPaymentButton->animateClick();
+ m_allPaymentsButton->animateClick();
+ m_interestOnReceptionButton->animateClick();
+
+ m_interestFrequencyAmountEdit->setValue(1);
+ m_interestFrequencyUnitEdit->setCurrentItem(static_cast<int>(MyMoneyAccountLoan::changeYearly));
+ m_paymentFrequencyUnitEdit->setCurrentItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_MONTHLY)));
+ m_firstDueDateEdit->loadDate(QDate(QDate::currentDate().year(),QDate::currentDate().month(),30));
+
+ m_paymentAccountEdit->removeButtons();
+ m_assetAccountEdit->removeButtons();
+ m_interestAccountEdit->removeButtons();
+
+ // load button icons
+ KIconLoader* il = KGlobal::iconLoader();
+ KGuiItem createCategoryButtenItem( i18n( "&Create..." ),
+ QIconSet(il->loadIcon("filenew", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Create a new category"),
+ i18n("Use this to open the new account editor"));
+ m_createCategoryButton->setGuiItem(createCategoryButtenItem);
+ connect(m_createCategoryButton, SIGNAL(clicked()), this, SLOT(slotCreateCategory()));
+
+ KGuiItem additionalFeeButtenItem( i18n( "&Additional fees..." ),
+ 0, //QIconSet(il->loadIcon("filenew", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Enter additional fees"),
+ i18n("Use this to add any additional fees other than principal and interest contained in your periodical payments."));
+ m_additionalFeeButton->setGuiItem(additionalFeeButtenItem);
+ connect(m_additionalFeeButton, SIGNAL(clicked()), this, SLOT(slotAdditionalFees()));
+
+ KGuiItem createAssetButtenItem( i18n( "&Create..." ),
+ QIconSet(il->loadIcon("filenew", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Create a new asset account"),
+ i18n("Use this to create a new account to which the initial payment should be made"));
+ m_createNewAssetButton->setGuiItem(createAssetButtenItem);
+ connect(m_createNewAssetButton, SIGNAL(clicked()), kmymoney2, SLOT(slotAccountNew()));
+
+ // enable the finish button on the last page
+ setFinishEnabled(m_summaryPage, true);
+
+ // FIXME: we currently only support interest calculation on reception
+ setAppropriate(m_interestCalculationPage, false);
+
+ // turn off all pages that are contained here for derived classes
+ setAppropriate(m_editIntroPage, false);
+ setAppropriate(m_editSelectionPage, false);
+ setAppropriate(m_effectiveDatePage, false);
+ setAppropriate(m_paymentEditPage, false);
+ setAppropriate(m_interestEditPage, false);
+ setAppropriate(m_summaryEditPage, false);
+
+ // for now, we don't have online help :-(
+ helpButton()->hide();
+
+ // setup a phony transaction for additional fee processing
+ m_account = MyMoneyAccount("Phony-ID", MyMoneyAccount());
+ m_split.setAccountId(m_account.id());
+ m_split.setValue(0);
+ m_transaction.addSplit(m_split);
+}
+
+KNewLoanWizard::~KNewLoanWizard()
+{
+}
+
+void KNewLoanWizard::resetCalculator(void)
+{
+ m_loanAmount1->setText(QString());
+ m_interestRate1->setText(QString());
+ m_duration1->setText(QString());
+ m_payment1->setText(QString());
+ m_balloon1->setText(QString());
+
+ m_loanAmount2->setText(QString());
+ m_interestRate2->setText(QString());
+ m_duration2->setText(QString());
+ m_payment2->setText(QString());
+ m_balloon2->setText(QString());
+
+ m_loanAmount3->setText(QString());
+ m_interestRate3->setText(QString());
+ m_duration3->setText(QString());
+ m_payment3->setText(QString());
+ m_balloon3->setText(QString());
+
+ m_loanAmount4->setText(QString());
+ m_interestRate4->setText(QString());
+ m_duration4->setText(QString());
+ m_payment4->setText(QString());
+ m_balloon4->setText(QString());
+
+ m_loanAmount5->setText(QString());
+ m_interestRate5->setText(QString());
+ m_duration5->setText(QString());
+ m_payment5->setText(QString());
+ m_balloon5->setText(QString());
+
+ m_additionalCost->setText(MyMoneyMoney(0).formatMoney(m_account.fraction(MyMoneyFile::instance()->security(m_account.currencyId()))));
+}
+
+void KNewLoanWizard::slotLiabilityLoan(void)
+{
+ m_generalReceiverText->setText(i18n("To whom do you make payments?"));
+ m_receiverLabel->setText(i18n("Payments to"));
+}
+
+void KNewLoanWizard::slotAssetLoan(void)
+{
+ m_generalReceiverText->setText(i18n("From whom do you expect payments?"));
+ m_receiverLabel->setText(i18n("Payments from"));
+}
+
+void KNewLoanWizard::slotPaymentsMade(void)
+{
+ setAppropriate(m_recordPaymentPage, true);
+}
+
+void KNewLoanWizard::slotNoPaymentsMade(void)
+{
+ m_allPaymentsButton->animateClick();
+ setAppropriate(m_recordPaymentPage, false);
+}
+
+void KNewLoanWizard::slotRecordAllPayments(void)
+{
+ m_firstPaymentLabel->setText(
+ QString("\n") +
+ i18n("Please enter the date, the first payment for this loan was/is due."));
+ m_firstPaymentNote->setText(
+ i18n("Note: Consult the loan contract for details of the first due date. "
+ "Keep in mind, that the first due date usually differs from the date "
+ "the contract was signed"));
+ m_balanceLabel->setText(
+ QString("\n") +
+ i18n("Please enter the original loan amount in the field below or leave it "
+ "empty to be calculated."));
+}
+
+void KNewLoanWizard::slotRecordThisYearsPayments(void)
+{
+ m_firstPaymentLabel->setText(
+ QString("\n") +
+ i18n("Please enter the date, the first payment for this loan was/is due this year."));
+ m_firstPaymentNote->setText(
+ i18n("Note: You can easily figure out the date of the first payment "
+ "if you consult the last statement of last year."));
+ m_balanceLabel->setText(
+ QString("\n") +
+ i18n("Please enter the remaining loan amount of last years final "
+ "statement in the field below. You should not leave this field empty."));
+}
+
+void KNewLoanWizard::slotCheckPageFinished(void)
+{
+ nextButton()->setEnabled(false);
+
+ if(currentPage() == m_namePage) {
+ if(!m_nameEdit->text().isEmpty()) {
+ nextButton()->setEnabled(true);
+ }
+
+ } else if(currentPage() == m_loanAmountPage) {
+ nextButton()->setEnabled(true);
+ if(m_thisYearPaymentButton->isChecked()
+ && !m_loanAmountEdit->isValid()) {
+ nextButton()->setEnabled(false);
+ }
+
+ } else if(currentPage() == m_interestCategoryPage) {
+ if(m_interestAccountEdit->selectedItems().count() > 0) {
+ nextButton()->setEnabled(true);
+ }
+
+ } else if(currentPage() == m_firstPaymentPage) {
+ if(m_firstDueDateEdit->date().isValid())
+ nextButton()->setEnabled(true);
+
+ } else if(currentPage() == m_schedulePage) {
+ if(m_nextDueDateEdit->date().isValid()
+ && m_nextDueDateEdit->date() >= m_firstDueDateEdit->date()
+ && m_paymentAccountEdit->selectedItems().count() > 0)
+ nextButton()->setEnabled(true);
+
+ } else if(currentPage() == m_assetAccountPage) {
+ if(m_dontCreatePayoutCheckBox->isChecked()) {
+ m_assetAccountEdit->setEnabled(false);
+ m_paymentDate->setEnabled(false);
+ m_createNewAssetButton->setEnabled(false);
+ nextButton()->setEnabled(true);
+ } else {
+ m_assetAccountEdit->setEnabled(true);
+ m_paymentDate->setEnabled(true);
+ m_createNewAssetButton->setEnabled(true);
+ if(!m_assetAccountEdit->selectedItems().isEmpty()
+ && m_paymentDate->date().isValid())
+ nextButton()->setEnabled(true);
+ }
+ } else
+ nextButton()->setEnabled(true);
+}
+
+void KNewLoanWizard::updateLoanAmount(void)
+{
+ QString txt;
+ if(m_loanAmountEdit->lineedit()->text().isEmpty()) {
+ txt = QString("<") + i18n("calculate") + QString(">");
+ } else {
+ txt = m_loanAmountEdit->value().formatMoney(m_account.fraction(MyMoneyFile::instance()->security(m_account.currencyId())));
+ }
+ m_loanAmount1->setText(txt);
+ m_loanAmount2->setText(txt);
+ m_loanAmount3->setText(txt);
+ m_loanAmount4->setText(txt);
+ m_loanAmount5->setText(txt);
+}
+
+void KNewLoanWizard::updateInterestRate(void)
+{
+ QString txt;
+ if(m_interestRateEdit->lineedit()->text().isEmpty()) {
+ txt = QString("<") + i18n("calculate") + QString(">");
+ } else {
+ txt = m_interestRateEdit->value().formatMoney("", 3) + QString("%");
+ }
+ m_interestRate1->setText(txt);
+ m_interestRate2->setText(txt);
+ m_interestRate3->setText(txt);
+ m_interestRate4->setText(txt);
+ m_interestRate5->setText(txt);
+}
+
+void KNewLoanWizard::updateDuration(void)
+{
+ QString txt;
+ if(m_durationValueEdit->value() == 0) {
+ txt = QString("<") + i18n("calculate") + QString(">");
+ } else {
+ txt = QString().sprintf("%d ", m_durationValueEdit->value())
+ + m_durationUnitEdit->currentText();
+ }
+ m_duration1->setText(txt);
+ m_duration2->setText(txt);
+ m_duration3->setText(txt);
+ m_duration4->setText(txt);
+ m_duration5->setText(txt);
+}
+
+void KNewLoanWizard::updatePayment(void)
+{
+ QString txt;
+ if(m_paymentEdit->lineedit()->text().isEmpty()) {
+ txt = QString("<") + i18n("calculate") + QString(">");
+ } else {
+ txt = m_paymentEdit->value().formatMoney(m_account.fraction(MyMoneyFile::instance()->security(m_account.currencyId())));
+ }
+ m_payment1->setText(txt);
+ m_payment2->setText(txt);
+ m_payment3->setText(txt);
+ m_payment4->setText(txt);
+ m_payment5->setText(txt);
+ m_basePayment->setText(txt);
+}
+
+void KNewLoanWizard::updateFinalPayment(void)
+{
+ QString txt;
+ if(m_finalPaymentEdit->lineedit()->text().isEmpty()) {
+ txt = QString("<") + i18n("calculate") + QString(">");
+ } else {
+ txt = m_finalPaymentEdit->value().formatMoney(m_account.fraction(MyMoneyFile::instance()->security(m_account.currencyId())));
+ }
+ m_balloon1->setText(txt);
+ m_balloon2->setText(txt);
+ m_balloon3->setText(txt);
+ m_balloon4->setText(txt);
+ m_balloon5->setText(txt);
+}
+
+void KNewLoanWizard::updateLoanInfo(void)
+{
+ updateLoanAmount();
+ updateInterestRate();
+ updateDuration();
+ updatePayment();
+ updateFinalPayment();
+ updatePeriodicPayment();
+
+ QString txt;
+
+ int fraction = m_account.fraction(MyMoneyFile::instance()->security(m_account.currencyId()));
+ m_loanAmount6->setText(m_loanAmountEdit->value().formatMoney(fraction));
+ m_interestRate6->setText(m_interestRateEdit->value().formatMoney("", 3) + QString("%"));
+ txt = QString().sprintf("%d ", m_durationValueEdit->value())
+ + m_durationUnitEdit->currentText();
+ m_duration6->setText(txt);
+ m_payment6->setText(m_paymentEdit->value().formatMoney(fraction));
+ m_balloon6->setText(m_finalPaymentEdit->value().formatMoney(fraction));
+}
+
+void KNewLoanWizard::updatePeriodicPayment(void)
+{
+ MyMoneyMoney base(m_basePayment->text());
+ MyMoneyMoney add(m_additionalCost->text());
+
+ m_periodicPayment->setText((base + add).formatMoney(m_account.fraction(MyMoneyFile::instance()->security(m_account.currencyId()))));
+}
+
+void KNewLoanWizard::updateSummary(void)
+{
+ // General
+ if(m_borrowButton->isChecked())
+ m_summaryLoanType->setText(i18n("borrowed"));
+ else
+ m_summaryLoanType->setText(i18n("lend"));
+
+ m_summaryFirstPayment->setText(KGlobal::locale()->formatDate(m_firstDueDateEdit->date(), true));
+ if(m_payeeEdit->selectedItem().isEmpty()) {
+ m_summaryPayee->setText(i18n("not assigned"));
+ } else {
+ m_summaryPayee->setText(m_payeeEdit->currentText());
+ }
+
+ // Calculation
+ if(m_interestOnReceptionButton->isChecked())
+ m_summaryInterestDue->setText(i18n("on reception"));
+ else
+ m_summaryInterestDue->setText(i18n("on due date"));
+ m_summaryPaymentFrequency->setText(m_paymentFrequencyUnitEdit->currentText());
+ m_summaryAmount->setText(m_loanAmount6->text());
+ m_summaryInterestRate->setText(m_interestRate6->text());
+ m_summaryTerm->setText(m_duration6->text());
+ m_summaryPeriodicPayment->setText(m_payment6->text());
+ m_summaryBalloonPayment->setText(m_balloon6->text());
+
+ // Payment
+ try {
+ QStringList sel = m_interestAccountEdit->selectedItems();
+ if(sel.count() != 1)
+ throw new MYMONEYEXCEPTION("Need a single selected interest category");
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(sel.first());
+ m_summaryInterestCategory->setText(acc.name());
+ } catch(MyMoneyException *e) {
+ qWarning("Unable to determine interest category for loan account creation");
+ delete e;
+ }
+ m_summaryAdditionalFees->setText(m_additionalCost->text());
+ m_summaryTotalPeriodicPayment->setText(m_periodicPayment->text());
+ m_summaryNextPayment->setText(KGlobal::locale()->formatDate(m_nextDueDateEdit->date(), true));
+
+ try {
+ QStringList sel = m_paymentAccountEdit->selectedItems();
+ if(sel.count() != 1)
+ throw new MYMONEYEXCEPTION("Need a single selected payment account");
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(sel.first());
+ m_summaryPaymentAccount->setText(acc.name());
+ } catch(MyMoneyException *e) {
+ qWarning("Unable to determine payment account for loan account creation");
+ delete e;
+ }
+}
+
+void KNewLoanWizard::next()
+{
+ bool dontLeavePage = false;
+ QString errMsg = i18n(
+ "The loan wizard is unable to calculate two different values for your loan "
+ "at the same time. "
+ "Please enter a value for the %1 on this page or backup to the page where the "
+ " current value to be calculated is defined and fill in a value.");
+
+ if(currentPage() == m_lendBorrowPage) {
+ // load the appropriate categories into the list
+ loadAccountList();
+ m_nameEdit->setFocus();
+
+ } else if(currentPage() == m_interestTypePage) {
+ if(m_fixedInterestButton->isChecked()) {
+ setAppropriate(m_previousPaymentsPage, true);
+ if(m_previousPaymentButton->isChecked())
+ setAppropriate(m_recordPaymentPage, true);
+ else
+ setAppropriate(m_recordPaymentPage, false);
+ setAppropriate(m_variableInterestDatePage, false);
+
+ } else {
+ setAppropriate(m_previousPaymentsPage, false);
+ setAppropriate(m_recordPaymentPage, false);
+ setAppropriate(m_variableInterestDatePage, true);
+ }
+
+ } else if(currentPage() == m_loanAmountPage) {
+ m_interestRateEdit->setFocus();
+ if(m_thisYearPaymentButton->isChecked()
+ && m_loanAmountEdit->lineedit()->text().isEmpty()) {
+ errMsg = i18n("You selected, that payments have already been made towards this loan. "
+ "This requires you to enter the loan amount exactly as found on your "
+ "last statement.");
+ dontLeavePage = true;
+ KMessageBox::error(0, errMsg, i18n("Calculation error"));
+ } else
+ updateLoanAmount();
+
+ } else if(currentPage() == m_interestPage) {
+
+ if(m_loanAmountEdit->lineedit()->text().isEmpty()
+ && m_interestRateEdit->lineedit()->text().isEmpty()) {
+ dontLeavePage = true;
+ KMessageBox::error(0, errMsg.arg(i18n("interest rate")), i18n("Calculation error"));
+ } else
+ updateInterestRate();
+
+ } else if(currentPage() == m_durationPage) {
+ if((m_loanAmountEdit->lineedit()->text().isEmpty()
+ || m_interestRateEdit->lineedit()->text().isEmpty())
+ && m_durationValueEdit->value() == 0) {
+ dontLeavePage = true;
+ KMessageBox::error(0, errMsg.arg(i18n("term")), i18n("Calculation error"));
+ } else
+ updateDuration();
+
+ } else if(currentPage() == m_paymentPage) {
+ if((m_loanAmountEdit->lineedit()->text().isEmpty()
+ || m_interestRateEdit->lineedit()->text().isEmpty()
+ || m_durationValueEdit->value() == 0)
+ && m_paymentEdit->lineedit()->text().isEmpty()) {
+ dontLeavePage = true;
+ KMessageBox::error(0, errMsg.arg(i18n("principal and interest")), i18n("Calculation error"));
+ } else
+ updatePayment();
+
+ } else if(currentPage() == m_finalPaymentPage) {
+ if((m_loanAmountEdit->lineedit()->text().isEmpty()
+ || m_interestRateEdit->lineedit()->text().isEmpty()
+ || m_durationValueEdit->value() == 0
+ || m_paymentEdit->lineedit()->text().isEmpty())
+ && m_finalPaymentEdit->lineedit()->text().isEmpty()) {
+ // if two fields are empty and one of them is the final payment
+ // we assume the final payment to be 0 instead of presenting a
+ m_finalPaymentEdit->setValue(MyMoneyMoney(0, 1));
+ }
+ updateFinalPayment();
+ if(!calculateLoan()) {
+ dontLeavePage = true;
+ } else
+ updateLoanInfo();
+
+ } else if(currentPage() == m_additionalFeesPage) {
+ m_nextDueDateEdit->setEnabled(true);
+ if(m_allPaymentsButton->isChecked() || m_noPreviousPaymentButton->isChecked()) {
+ m_nextDueDateEdit->setDate(m_firstDueDateEdit->date());
+ m_nextDueDateEdit->setEnabled(false);
+ if(m_assetAccountPage)
+ setAppropriate(m_assetAccountPage, true);
+ } else {
+ QDate nextPayment(QDate::currentDate().year(), 1, m_firstDueDateEdit->date().day());
+ m_nextDueDateEdit->setDate(nextPayment);
+ if(m_assetAccountPage)
+ setAppropriate(m_assetAccountPage, false);
+ m_assetAccountEdit->slotDeselectAllAccounts();
+ }
+ if(m_nextDueDateEdit->date() < m_firstDueDateEdit->date()) {
+ m_nextDueDateEdit->setDate(m_firstDueDateEdit->date());
+ }
+
+ } else if(currentPage() == m_schedulePage) {
+ updateSummary();
+ }
+
+/*
+ switch(m_accountType) {
+ case MyMoneyAccount::Cash:
+ case MyMoneyAccount::Asset:
+ if(indexOf(accountPaymentPage) != -1) {
+ removePage(accountPaymentPage);
+ }
+ setAppropriate(accountNumberPage, false);
+ setFinishEnabled(accountDetailsPage, true);
+ break;
+
+ case MyMoneyAccount::CreditCard:
+ if(indexOf(accountPaymentPage) == -1) {
+ loadPaymentMethods();
+ addPage(accountPaymentPage, m_accountPaymentPageTitle);
+ }
+ setAppropriate(accountPaymentPage, true);
+ setFinishEnabled(accountPaymentPage, true);
+ setFinishEnabled(accountDetailsPage, false);
+ break;
+
+ default:
+ setAppropriate(accountNumberPage, institutionComboBox->currentText() != "");
+ if(indexOf(accountPaymentPage) != -1) {
+ removePage(accountPaymentPage);
+ }
+ setFinishEnabled(accountDetailsPage, true);
+ break;
+ }
+*/
+ if(!dontLeavePage)
+ KNewLoanWizardDecl::next();
+
+ // setup the availability of widgets on the selected page
+ slotCheckPageFinished();
+}
+
+void KNewLoanWizard::loadComboBoxes(void)
+{
+ m_interestFrequencyUnitEdit->insertItem(i18n("Days"), static_cast<int>(MyMoneyAccountLoan::changeDaily));
+ m_interestFrequencyUnitEdit->insertItem(i18n("Weeks"), static_cast<int>(MyMoneyAccountLoan::changeWeekly));
+ m_interestFrequencyUnitEdit->insertItem(i18n("Months"), static_cast<int>(MyMoneyAccountLoan::changeMonthly));
+ m_interestFrequencyUnitEdit->insertItem(i18n("Years"), static_cast<int>(MyMoneyAccountLoan::changeYearly));
+
+ m_paymentFrequencyUnitEdit->insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_DAILY)));
+ m_paymentFrequencyUnitEdit->insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_WEEKLY)));
+ m_paymentFrequencyUnitEdit->insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_FORTNIGHTLY)));
+ m_paymentFrequencyUnitEdit->insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYOTHERWEEK)));
+ m_paymentFrequencyUnitEdit->insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYHALFMONTH)));
+ m_paymentFrequencyUnitEdit->insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYTHREEWEEKS)));
+ m_paymentFrequencyUnitEdit->insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYFOURWEEKS)));
+ m_paymentFrequencyUnitEdit->insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS)));
+ m_paymentFrequencyUnitEdit->insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_MONTHLY)));
+ m_paymentFrequencyUnitEdit->insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS)));
+ m_paymentFrequencyUnitEdit->insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYOTHERMONTH)));
+ m_paymentFrequencyUnitEdit->insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_QUARTERLY)));
+ m_paymentFrequencyUnitEdit->insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYFOURMONTHS)));
+ m_paymentFrequencyUnitEdit->insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_TWICEYEARLY)));
+ m_paymentFrequencyUnitEdit->insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_YEARLY)));
+
+ m_durationUnitEdit->insertItem(i18n("Months"), static_cast<int>(MyMoneySchedule::OCCUR_MONTHLY));
+ m_durationUnitEdit->insertItem(i18n("Years"), static_cast<int>(MyMoneySchedule::OCCUR_YEARLY));
+ m_durationUnitEdit->insertItem(i18n("Payments"), static_cast<int>(MyMoneySchedule::OCCUR_ONCE));
+
+}
+
+void KNewLoanWizard::slotInterestOnPayment(void)
+{
+ m_interestOnPaymentButton->setChecked(true);
+ m_interestOnReceptionButton->setChecked(false);
+}
+
+void KNewLoanWizard::slotInterestOnReception(void)
+{
+ m_interestOnPaymentButton->setChecked(false);
+ m_interestOnReceptionButton->setChecked(true);
+}
+
+int KNewLoanWizard::calculateLoan(void)
+{
+ MyMoneyFinancialCalculator calc;
+ long double val;
+ int PF;
+ QString result;
+
+ // FIXME: for now, we only support interest calculation at the end of the period
+ calc.setBep();
+ // FIXME: for now, we only support periodic compounding
+ calc.setDisc();
+
+ PF = MyMoneySchedule::eventsPerYear(MyMoneySchedule::stringToOccurence(
+ m_paymentFrequencyUnitEdit->currentText()));
+ if(PF == 0)
+ return 0;
+ calc.setPF(PF);
+
+ // FIXME: for now we only support compounding frequency == payment frequency
+ calc.setCF(PF);
+
+
+ if(!m_loanAmountEdit->lineedit()->text().isEmpty()) {
+ val = static_cast<long double> (m_loanAmountEdit->value().abs().toDouble());
+ if(m_borrowButton->isChecked())
+ val = -val;
+ calc.setPv(val);
+ }
+
+ if(!m_interestRateEdit->lineedit()->text().isEmpty()) {
+ val = static_cast<long double> (m_interestRateEdit->value().abs().toDouble());
+ calc.setIr(val);
+ }
+
+ if(!m_paymentEdit->lineedit()->text().isEmpty()) {
+ val = static_cast<long double> (m_paymentEdit->value().abs().toDouble());
+ if(m_lendButton->isChecked())
+ val = -val;
+ calc.setPmt(val);
+ }
+
+ if(!m_finalPaymentEdit->lineedit()->text().isEmpty()) {
+ val = static_cast<long double> (m_finalPaymentEdit->value().abs().toDouble());
+ if(m_lendButton->isChecked())
+ val = -val;
+ calc.setFv(val);
+ }
+
+ if(m_durationValueEdit->value() != 0) {
+ calc.setNpp(static_cast<long double>(term()));
+ }
+
+ int fraction = m_account.fraction(MyMoneyFile::instance()->security(m_account.currencyId()));
+ // setup of parameters is done, now do the calculation
+ try {
+ if(m_loanAmountEdit->lineedit()->text().isEmpty()) {
+ // calculate the amount of the loan out of the other information
+ val = calc.presentValue();
+ m_loanAmountEdit->loadText(MyMoneyMoney(static_cast<double>(val)).abs().formatMoney(fraction));
+ result = i18n("KMyMoney has calculated the amount of the loan as %1.")
+ .arg(m_loanAmountEdit->lineedit()->text());
+
+ } else if(m_interestRateEdit->lineedit()->text().isEmpty()) {
+ // calculate the interest rate out of the other information
+ val = calc.interestRate();
+ m_interestRateEdit->loadText(MyMoneyMoney(static_cast<double>(val)).abs().formatMoney("", 3));
+ result = i18n("KMyMoney has calculated the interest rate to %1%.")
+ .arg(m_interestRateEdit->lineedit()->text());
+
+ } else if(m_paymentEdit->lineedit()->text().isEmpty()) {
+ // calculate the periodical amount of the payment out of the other information
+ val = calc.payment();
+ m_paymentEdit->setValue(MyMoneyMoney(static_cast<double>(val)).abs());
+ // reset payment as it might have changed due to rounding
+ val = static_cast<long double> (m_paymentEdit->value().abs().toDouble());
+ if(m_lendButton->isChecked())
+ val = -val;
+ calc.setPmt(val);
+
+ result = i18n("KMyMoney has calculated a periodic payment of %1 to cover principal and interest.")
+ .arg(m_paymentEdit->lineedit()->text());
+
+ val = calc.futureValue();
+ if((m_borrowButton->isChecked() && val < 0 && fabsl(val) >= fabsl(calc.payment()))
+ || (m_lendButton->isChecked() && val > 0 && fabs(val) >= fabs(calc.payment()))) {
+ calc.setNpp(calc.npp()-1);
+ updateTermWidgets(calc.npp());
+ val = calc.futureValue();
+ MyMoneyMoney refVal(static_cast<double>(val));
+ m_finalPaymentEdit->loadText(refVal.abs().formatMoney(fraction));
+ result += QString(" ");
+ result += i18n("The number of payments has been decremented and the final payment has been modified to %1.")
+ .arg(m_finalPaymentEdit->lineedit()->text());
+ } else if((m_borrowButton->isChecked() && val < 0 && fabsl(val) < fabsl(calc.payment()))
+ || (m_lendButton->isChecked() && val > 0 && fabs(val) < fabs(calc.payment()))) {
+ m_finalPaymentEdit->loadText(MyMoneyMoney(0,1).formatMoney(fraction));
+ } else {
+ MyMoneyMoney refVal(static_cast<double>(val));
+ m_finalPaymentEdit->loadText(refVal.abs().formatMoney(fraction));
+ result += i18n("The final payment has been modified to %1.")
+ .arg(m_finalPaymentEdit->lineedit()->text());
+ }
+
+ } else if(m_durationValueEdit->value() == 0) {
+ // calculate the number of payments out of the other information
+ val = calc.numPayments();
+ if(val == 0)
+ throw new MYMONEYEXCEPTION("incorrect fincancial calculation");
+
+ // if the number of payments has a fractional part, then we
+ // round it to the smallest integer and calculate the balloon payment
+ result = i18n("KMyMoney has calculated the term of your loan as %1. ")
+ .arg(updateTermWidgets(floorl(val)));
+
+ if(val != floorl(val)) {
+ calc.setNpp(floorl(val));
+ val = calc.futureValue();
+ MyMoneyMoney refVal(static_cast<double>(val));
+ m_finalPaymentEdit->loadText(refVal.abs().formatMoney(fraction));
+ result += i18n("The final payment has been modified to %1.")
+ .arg(m_finalPaymentEdit->lineedit()->text());
+ }
+
+ } else {
+ // calculate the future value of the loan out of the other information
+ val = calc.futureValue();
+
+ // we differentiate between the following cases:
+ // a) the future value is greater than a payment
+ // b) the future value is less than a payment or the loan is overpaid
+ // c) all other cases
+ //
+ // a) means, we have paid more than we owed. This can't be
+ // b) means, we paid more than we owed but the last payment is
+ // less in value than regular payments. That means, that the
+ // future value is to be treated as (fully payed back)
+ // c) the loan is not payed back yet
+ if((m_borrowButton->isChecked() && val < 0 && fabsl(val) > fabsl(calc.payment()))
+ || (m_lendButton->isChecked() && val > 0 && fabs(val) > fabs(calc.payment()))) {
+ // case a)
+ qDebug("Future Value is %Lf", val);
+ throw new MYMONEYEXCEPTION("incorrect fincancial calculation");
+
+ } else if((m_borrowButton->isChecked() && val < 0 && fabsl(val) <= fabsl(calc.payment()))
+ || (m_lendButton->isChecked() && val > 0 && fabs(val) <= fabs(calc.payment()))) {
+ // case b)
+ val = 0;
+ }
+
+ MyMoneyMoney refVal(static_cast<double>(val));
+ result = i18n("KMyMoney has calculated a final payment of %1 for this loan.")
+ .arg(refVal.abs().formatMoney(fraction));
+
+ if(!m_finalPaymentEdit->lineedit()->text().isEmpty()) {
+ if((m_finalPaymentEdit->value().abs() - refVal.abs()).abs().toDouble() > 1) {
+ throw new MYMONEYEXCEPTION("incorrect fincancial calculation");
+ }
+ result = i18n("KMyMoney has successfully verified your loan information.");
+ }
+ m_finalPaymentEdit->loadText(refVal.abs().formatMoney(fraction));
+ }
+
+ } catch (MyMoneyException *e) {
+ delete e;
+ KMessageBox::error(0,
+ i18n("You have entered mis-matching information. Please backup to the "
+ "appropriate page and update your figures or leave one value empty "
+ "to let KMyMoney calculate it for you"),
+ i18n("Calculation error"));
+ return 0;
+ }
+
+ result += i18n("\n\nAccept this or modify the loan information and recalculate.");
+
+ KMessageBox::information(0, result, i18n("Calculation successful"));
+ return 1;
+}
+
+QString KNewLoanWizard::updateTermWidgets(const long double val)
+{
+ long long vl = static_cast<long long>(floorl(val));
+
+ QString valString;
+ MyMoneySchedule::occurenceE unit;
+ unit = MyMoneySchedule::stringToOccurence(m_paymentFrequencyUnitEdit->currentText());
+
+ if((unit == MyMoneySchedule::OCCUR_MONTHLY)
+ && ((vl % 12) == 0)) {
+ vl /= 12;
+ unit = MyMoneySchedule::OCCUR_YEARLY;
+ }
+
+ switch(unit) {
+ case MyMoneySchedule::OCCUR_MONTHLY:
+ valString = i18n("one month", "%n months", vl);
+ m_durationUnitEdit->setCurrentItem(static_cast<int>(MyMoneySchedule::OCCUR_MONTHLY));
+ break;
+ case MyMoneySchedule::OCCUR_YEARLY:
+ valString = i18n("one year", "%n years", vl);
+ m_durationUnitEdit->setCurrentItem(static_cast<int>(MyMoneySchedule::OCCUR_YEARLY));
+ break;
+ default:
+ valString = i18n("one payment", "%n payments", vl);
+ m_durationUnitEdit->setCurrentItem(static_cast<int>(MyMoneySchedule::OCCUR_ONCE));
+ break;
+ }
+ m_durationValueEdit->setValue(vl);
+ return valString;
+}
+
+void KNewLoanWizard::slotCreateCategory(void)
+{
+ MyMoneyAccount acc, base;
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ if(m_borrowButton->isChecked()) {
+ base = file->expense();
+ acc.setAccountType(MyMoneyAccount::Expense);
+ } else {
+ base = file->income();
+ acc.setAccountType(MyMoneyAccount::Income);
+ }
+ acc.setParentAccountId(base.id());
+
+ KNewAccountDlg* dlg = new KNewAccountDlg(acc, true, true);
+ if(dlg->exec() == QDialog::Accepted) {
+ acc = dlg->account();
+
+ MyMoneyFileTransaction ft;
+ try {
+ QString id;
+ id = file->createCategory(base, acc.name());
+ if(id.isEmpty())
+ throw new MYMONEYEXCEPTION("failure while creating the account hierarchy");
+
+ ft.commit();
+
+ m_interestAccountEdit->setSelected(id);
+
+ } catch (MyMoneyException *e) {
+ KMessageBox::information(this, i18n("Unable to add account: %1").arg(e->what()));
+ delete e;
+ }
+ }
+ delete dlg;
+}
+
+void KNewLoanWizard::loadAccountList(void)
+{
+ AccountSet interestSet, assetSet;
+
+ if(m_borrowButton->isChecked()) {
+ interestSet.addAccountType(MyMoneyAccount::Expense);
+ } else {
+ interestSet.addAccountType(MyMoneyAccount::Income);
+ }
+ interestSet.load(m_interestAccountEdit);
+
+ assetSet.addAccountType(MyMoneyAccount::Checkings);
+ assetSet.addAccountType(MyMoneyAccount::Savings);
+ assetSet.addAccountType(MyMoneyAccount::Cash);
+ assetSet.addAccountType(MyMoneyAccount::Asset);
+ assetSet.addAccountType(MyMoneyAccount::Currency);
+ assetSet.load(m_assetAccountEdit);
+
+ assetSet.addAccountType(MyMoneyAccount::CreditCard);
+ assetSet.addAccountType(MyMoneyAccount::Liability);
+ assetSet.load(m_paymentAccountEdit);
+}
+
+void KNewLoanWizard::slotAdditionalFees(void)
+{
+ // KMessageBox::information(0, QString("Not yet implemented ... if you want to help, contact kmymoney2-developer@lists.sourceforge.net"), QString("Development notice"));
+ MyMoneyAccount account("Phony-ID", MyMoneyAccount());
+
+ QMap<QString, MyMoneyMoney> priceInfo;
+ KSplitTransactionDlg* dlg = new KSplitTransactionDlg(m_transaction, m_split, account, false, !m_borrowButton->isChecked(), MyMoneyMoney(0), priceInfo);
+ connect(dlg, SIGNAL(newCategory(MyMoneyAccount&)), this, SIGNAL(newCategory(MyMoneyAccount&)));
+
+ if(dlg->exec() == QDialog::Accepted) {
+ m_transaction = dlg->transaction();
+ // sum up the additional fees
+ QValueList<MyMoneySplit>::ConstIterator it;
+
+ MyMoneyMoney fees;
+ for(it = m_transaction.splits().begin(); it != m_transaction.splits().end(); ++it) {
+ if((*it).accountId() != account.id()) {
+ fees += (*it).value();
+ }
+ }
+ m_additionalCost->setText(fees.formatMoney(m_account.fraction(MyMoneyFile::instance()->security(m_account.currencyId()))));
+ }
+
+ delete dlg;
+ updatePeriodicPayment();
+}
+
+MyMoneyTransaction KNewLoanWizard::transaction() const
+{
+ MyMoneyTransaction t;
+
+ MyMoneySplit sPayment, sInterest, sAmortization;
+ // setup accounts. at this point, we cannot fill in the id of the
+ // account that the amortization will be performed on, because we
+ // create the account. So the id is yet unknown.
+ sPayment.setAccountId(m_paymentAccountEdit->selectedItems().first());
+ sInterest.setAccountId(m_interestAccountEdit->selectedItems().first());
+
+ // values
+ if(m_borrowButton->isChecked()) {
+ sPayment.setValue(-m_paymentEdit->value());
+ } else {
+ sPayment.setValue(m_paymentEdit->value());
+ }
+ sInterest.setValue(MyMoneyMoney::autoCalc);
+ sAmortization.setValue(MyMoneyMoney::autoCalc);
+ // don't forget the shares
+ sPayment.setShares(sPayment.value());
+ sInterest.setShares(sInterest.value());
+ sAmortization.setShares(sAmortization.value());
+
+ // setup the commodity
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(sPayment.accountId());
+ t.setCommodity(acc.currencyId());
+
+ // actions
+ sPayment.setAction(MyMoneySplit::ActionAmortization);
+ sAmortization.setAction(MyMoneySplit::ActionAmortization);
+ sInterest.setAction(MyMoneySplit::ActionInterest);
+
+ // payee
+ QString payeeId = m_payeeEdit->selectedItem();
+ sPayment.setPayeeId(payeeId);
+ sAmortization.setPayeeId(payeeId);
+
+ MyMoneyAccount account("Phony-ID", MyMoneyAccount());
+ sAmortization.setAccountId(account.id());
+
+ // IMPORTANT: Payment split must be the first one, because
+ // the schedule view expects it this way during display
+ t.addSplit(sPayment);
+ t.addSplit(sAmortization);
+ t.addSplit(sInterest);
+
+ // copy the splits from the other costs and update the payment split
+ QValueList<MyMoneySplit>::ConstIterator it;
+ for(it = m_transaction.splits().begin(); it != m_transaction.splits().end(); ++it) {
+ if((*it).accountId() != account.id()) {
+ MyMoneySplit sp = (*it);
+ sp.clearId();
+ t.addSplit(sp);
+ sPayment.setValue(sPayment.value()-sp.value());
+ sPayment.setShares(sPayment.value());
+ t.modifySplit(sPayment);
+ }
+ }
+ return t;
+}
+
+MyMoneySchedule KNewLoanWizard::schedule(void) const
+{
+ MyMoneySchedule sched(m_nameEdit->text(),
+ MyMoneySchedule::TYPE_LOANPAYMENT,
+ MyMoneySchedule::stringToOccurence(m_paymentFrequencyUnitEdit->currentText()), 1,
+ MyMoneySchedule::STYPE_OTHER,
+ QDate(),
+ QDate(),
+ false,
+ false);
+
+ MyMoneyTransaction t = transaction();
+ t.setPostDate(m_nextDueDateEdit->date());
+ sched.setTransaction(t);
+
+ return sched;
+}
+
+void KNewLoanWizard::slotReloadEditWidgets(void)
+{
+ // load the various account widgets
+ loadAccountList();
+
+ // reload payee widget
+ QString payeeId = m_payeeEdit->selectedItem();
+
+ m_payeeEdit->loadPayees(MyMoneyFile::instance()->payeeList());
+
+ if(!payeeId.isEmpty()) {
+ m_payeeEdit->setSelectedItem(payeeId);
+ }
+}
+
+int KNewLoanWizard::term(void) const
+{
+ int factor = 0;
+
+ if(m_durationValueEdit->value() != 0) {
+ factor = 1;
+ switch(m_durationUnitEdit->currentItem()) {
+ case MyMoneySchedule::OCCUR_YEARLY: // years
+ factor = 12;
+ // tricky fall through here
+
+ case MyMoneySchedule::OCCUR_MONTHLY: // months
+ factor *= 30;
+ factor *= m_durationValueEdit->value();
+ // factor now is the duration in days. we divide this by the
+ // payment frequency and get the number of payments
+ factor /= MyMoneySchedule::daysBetweenEvents(MyMoneySchedule::stringToOccurence(
+ m_paymentFrequencyUnitEdit->currentText()));
+ break;
+
+ case MyMoneySchedule::OCCUR_ONCE: // payments
+ factor = m_durationValueEdit->value();
+ break;
+ }
+ }
+ return factor;
+}
+
+QString KNewLoanWizard::initialPaymentAccount(void) const
+{
+ if(m_dontCreatePayoutCheckBox->isChecked()) {
+ return QString();
+ }
+ return m_assetAccountEdit->selectedItems().first();
+}
+
+QDate KNewLoanWizard::initialPaymentDate(void) const
+{
+ if(m_dontCreatePayoutCheckBox->isChecked()) {
+ return QDate();
+ }
+ return m_paymentDate->date();
+}
+
+#include "knewloanwizard.moc"
diff --git a/kmymoney2/dialogs/knewloanwizard.h b/kmymoney2/dialogs/knewloanwizard.h
new file mode 100644
index 0000000..5e291b7
--- /dev/null
+++ b/kmymoney2/dialogs/knewloanwizard.h
@@ -0,0 +1,167 @@
+/***************************************************************************
+ knewloanwizard.h - description
+ -------------------
+ begin : Wed Oct 8 2003
+ copyright : (C) 2000-2003 by Thomas Baumgart
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KNEWLOANWIZARD_H
+#define KNEWLOANWIZARD_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <../dialogs/knewloanwizarddecl.h>
+#include <kmymoney/mymoneyscheduled.h>
+#include <kmymoney/kmymoneyaccountselector.h>
+#include <kmymoney/kmymoneydateinput.h>
+
+/**
+ * @author Thomas Baumgart
+ */
+
+/**
+ * This class implementes a wizard for the creation of loan accounts.
+ * The user is asked a set of questions and according to the answers
+ * the respective MyMoneyAccount object can be requested from the
+ * wizard when accept() has been called. A MyMoneySchedule is also
+ * available to create a schedule entry for the payments to the newly
+ * created loan.
+ */
+class KNewLoanWizard : public KNewLoanWizardDecl
+{
+ Q_OBJECT
+public:
+ KNewLoanWizard(QWidget *parent=0, const char *name=0);
+ ~KNewLoanWizard();
+
+ /**
+ * This method returns the schedule for the payments. The account
+ * where the amortization should be transferred to is the one
+ * we currently try to create with this wizard. The appropriate split
+ * will be returned as the first split of the transaction inside
+ *
+ * as parameter @p accountId as this is the account that was created
+ * after this wizard was left via the accept() method.
+ *
+ * @return MyMoneySchedule object for payments
+ */
+ MyMoneySchedule schedule(void) const;
+
+ /**
+ * This method returns the id of the account to/from which
+ * the payout should be created. If the checkbox that allows
+ * to skip the creation of this transaction is checked, this
+ * method returns QString()
+ *
+ * @return id of account or empty QString
+ */
+ QString initialPaymentAccount(void) const;
+
+ /**
+ * This method returns the date of the payout transaction.
+ * If the checkbox that allows to skip the creation of
+ * this transaction is checked, this method returns QDate()
+ *
+ * @return selected date or invalid QDate if checkbox is selected.
+ */
+ QDate initialPaymentDate(void) const;
+
+protected:
+ /**
+ * This method returns the transaction that is stored within
+ * the schedule. See schedule().
+ *
+ * @return MyMoneyTransaction object to be used within the schedule
+ */
+ MyMoneyTransaction transaction(void) const;
+
+public slots:
+ void next();
+
+protected slots:
+ void slotLiabilityLoan(void);
+ void slotAssetLoan(void);
+ virtual void slotCheckPageFinished(void);
+ void slotPaymentsMade(void);
+ void slotNoPaymentsMade(void);
+ void slotRecordAllPayments(void);
+ void slotRecordThisYearsPayments(void);
+ void slotInterestOnPayment(void);
+ void slotInterestOnReception(void);
+ void slotCreateCategory(void);
+ virtual void slotAdditionalFees(void);
+ // void slotNewPayee(const QString&);
+ void slotReloadEditWidgets(void);
+
+protected:
+ void loadComboBoxes(void);
+ void loadAccountList(void);
+ void resetCalculator(void);
+ void updateLoanAmount(void);
+ void updateInterestRate(void);
+ void updateDuration(void);
+ void updatePayment(void);
+ void updateFinalPayment(void);
+ void updateLoanInfo(void);
+ QString updateTermWidgets(const long double v);
+ void updatePeriodicPayment(void);
+ void updateSummary(void);
+ int calculateLoan(void);
+ int term(void) const;
+
+signals:
+ /**
+ * This signal is emitted, when a new category name has been
+ * entered by the user and this name is not known as account
+ * by the MyMoneyFile object.
+ * Before the signal is emitted, a MyMoneyAccount is constructed
+ * by this object and filled with the desired name. All other members
+ * of MyMoneyAccount will remain in their default state. Upon return,
+ * the connected slot should have created the object in the MyMoneyFile
+ * engine and filled the member @p id.
+ *
+ * @param acc reference to MyMoneyAccount object that caries the name
+ * and will return information about the created category.
+ */
+ void newCategory(MyMoneyAccount& acc);
+
+ /**
+ * This signal is sent out, when a new payee needs to be created
+ * @sa KMyMoneyCombo::createItem()
+ *
+ * @param txt The name of the payee to be created
+ * @param id A connected slot should store the id of the created object in this variable
+ */
+ void createPayee(const QString& txt, QString& id);
+
+protected:
+ MyMoneyAccountLoan m_account;
+ MyMoneyTransaction m_transaction;
+ MyMoneySplit m_split;
+};
+
+#endif
diff --git a/kmymoney2/dialogs/knewloanwizarddecl.ui b/kmymoney2/dialogs/knewloanwizarddecl.ui
new file mode 100644
index 0000000..d45eb4b
--- /dev/null
+++ b/kmymoney2/dialogs/knewloanwizarddecl.ui
@@ -0,0 +1,5497 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KNewLoanWizardDecl</class>
+<widget class="QWizard">
+ <property name="name">
+ <cstring>KNewLoanWizardDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>589</width>
+ <height>458</height>
+ </rect>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>800</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="caption">
+ <string>New Loan Wizard</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <property name="titleFont">
+ <font>
+ </font>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_newIntroPage</cstring>
+ </property>
+ <attribute name="title">
+ <string></string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>98</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1_1</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <family>Helvetica</family>
+ <pointsize>16</pointsize>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>New Loan Account Wizard</string>
+ </property>
+ <property name="alignment">
+ <set>AlignTop|AlignHCenter</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>119</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>
+Welcome to the New Loan Account Wizard which will guide you through the creation of a new loan e.g. for your home, your car or any other loan that you pay or gain interest for.
+
+Please make sure that you have the relevant information handy. You usually get the information out of your contract and the last statement.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_editIntroPage</cstring>
+ </property>
+ <attribute name="title">
+ <string></string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout2_2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer2_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>98</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1_1_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <family>Helvetica</family>
+ <pointsize>16</pointsize>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Edit Loan Account Wizard</string>
+ </property>
+ <property name="alignment">
+ <set>AlignTop|AlignHCenter</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer3_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>119</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>
+Welcome to the Edit Loan Account Wizard. Please use this wizard to modify information about your loan account.
+
+Please make sure that you have the relevant information handy. You usually get the information out of your contract and the last statement.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer79</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_newGeneralInfoPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>General Information</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel2_2</cstring>
+ </property>
+ <property name="text">
+ <string>
+In the first step, KMyMoney will ask you some general information about the loan account to be created.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer10</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>32</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer8</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>138</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout5</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>1. General Information</string>
+ </property>
+ <property name="alignment">
+ <set>AlignTop</set>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>
+2. Calculate Loan
+
+3. Payments</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer7</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>25</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer9</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>137</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer44</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>32</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_editSelectionPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Edit selection</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel2_2_1</cstring>
+ </property>
+ <property name="text">
+ <string>
+Please select, which data of the loan you want to modify.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer64</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>48</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout33</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer67_4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>93</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>m_selectionButtonGroup</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <property name="exclusive">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_editInterestRateButton</cstring>
+ </property>
+ <property name="text">
+ <string>Modify the interest rate</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_editOtherCostButton</cstring>
+ </property>
+ <property name="text">
+ <string>Modify additional fees</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_editOtherInfoButton</cstring>
+ </property>
+ <property name="text">
+ <string>Modify other loan information</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer66</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>108</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer65</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>47</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_effectiveDatePage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Effective date</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_effectiveDateLabel</cstring>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_effectiveDateNoteLabel</cstring>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer68_3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>30</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout34</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1_7</cstring>
+ </property>
+ <property name="text">
+ <string>When should the changes become active?</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyDateInput">
+ <property name="name">
+ <cstring>m_effectiveChangeDateEdit</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer69_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>87</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_lendBorrowPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Lending or borrowing money</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel3_2</cstring>
+ </property>
+ <property name="text">
+ <string>
+Do you borrow or lend money?</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer15</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>61</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout38</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>ButtonGroup1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <property name="exclusive">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_borrowButton</cstring>
+ </property>
+ <property name="text">
+ <string>I am borrowing money</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_lendButton</cstring>
+ </property>
+ <property name="text">
+ <string>I am lending money</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer14</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>299</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer16</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>60</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_namePage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Name of the loan</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel4_2</cstring>
+ </property>
+ <property name="text">
+ <string>
+How do you want to call this loan? Examples for names are 'car loan', 'school loan', 'home owner loan'.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer15_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>56</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout13</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyLineEdit">
+ <property name="name">
+ <cstring>m_nameEdit</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer19</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>56</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_generalReceiverText</cstring>
+ </property>
+ <property name="text">
+ <string>TextLabel6</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout55</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_receiverLabel</cstring>
+ </property>
+ <property name="text">
+ <string>TextLabel7</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyPayeeCombo">
+ <property name="name">
+ <cstring>m_payeeEdit</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer21</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>56</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_interestTypePage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Type of interest</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel5_2</cstring>
+ </property>
+ <property name="text">
+ <string>
+Is the interest of this loan fixed over a period of time or is it adapted from time to time? If the interest rate changes during the amortization phase of the loan you should choose the option 'variable interest rate'.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer23</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>53</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout39</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>ButtonGroup2</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <property name="exclusive">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_fixedInterestButton</cstring>
+ </property>
+ <property name="text">
+ <string>Fixed interest rate</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_variableInterestButton</cstring>
+ </property>
+ <property name="text">
+ <string>Variable interest rate</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer14_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>286</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer24</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>53</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_previousPaymentsPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Payments?</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel6_2</cstring>
+ </property>
+ <property name="text">
+ <string>
+Were there any payments for this loan whether they are entered into KMyMoney or not?</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer28</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>32</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout40</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>ButtonGroup3</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <property name="exclusive">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_noPreviousPaymentButton</cstring>
+ </property>
+ <property name="text">
+ <string>No, no payments were made yet.</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_previousPaymentButton</cstring>
+ </property>
+ <property name="text">
+ <string>Yes, payments were made.</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer14_2_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>202</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer29</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>32</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel3_3</cstring>
+ </property>
+ <property name="text">
+ <string>Note: Payments made to obtain the loan (e.g. Dissagio) are not considered as payments in this context.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer41</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>32</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_recordPaymentPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Recording payments?</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel7_2</cstring>
+ </property>
+ <property name="text">
+ <string>
+Do you want to record all payments of this loan with KMyMoney?</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer33</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>69</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout41</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>ButtonGroup4</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <property name="exclusive">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_allPaymentsButton</cstring>
+ </property>
+ <property name="text">
+ <string>Yes, record all payments.</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_thisYearPaymentButton</cstring>
+ </property>
+ <property name="text">
+ <string>No, only record payments since the beginning of this year.</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer14_2_2_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>137</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer34</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>69</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_variableInterestDatePage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Date of next interest change</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel8_2</cstring>
+ </property>
+ <property name="text">
+ <string>
+Select the date when the interest rate for this loan will be modified and the frequency of the future changes.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer39</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>99</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout44</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Next interest change on</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="1">
+ <property name="name">
+ <cstring>layout42</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KIntNumInput">
+ <property name="name">
+ <cstring>m_interestFrequencyAmountEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KMyMoneyGeneralCombo">
+ <property name="name">
+ <cstring>m_interestFrequencyUnitEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="kMyMoneyDateInput" row="0" column="1">
+ <property name="name">
+ <cstring>m_interestChangeDateEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Time until next change</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer40</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>80</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_paymentEditPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Payment</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel8_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>
+Please enter the amount you pay for principal and interest or leave the field empty to calculate it.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer70_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout39</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer76</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout35</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="kMyMoneyEdit" row="0" column="1">
+ <property name="name">
+ <cstring>m_newPaymentEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel2_4</cstring>
+ </property>
+ <property name="text">
+ <string>Current amount</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>m_paymentLabel</cstring>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1_5</cstring>
+ </property>
+ <property name="text">
+ <string>Principal and interest</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer75</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer71</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>19</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel4_5</cstring>
+ </property>
+ <property name="text">
+ <string>KMyMoney either calculates the new interest rate or the amount for principal and interest. If you know the amount for principal and interest then enter it here.
+
+If KMyMoney should calculate this value for you, then leave the field blank.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignVCenter</set>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_interestEditPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Interest Rate</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel5_4</cstring>
+ </property>
+ <property name="text">
+ <string>
+Please enter the interest rate or leave the field empty to calculate it.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer72</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>29</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout40</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer77</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>101</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout36</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="kMyMoneyEdit" row="0" column="1">
+ <property name="name">
+ <cstring>m_newInterestRateEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>m_interestRateLabel</cstring>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel7_3</cstring>
+ </property>
+ <property name="text">
+ <string>Current rate</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel6_5</cstring>
+ </property>
+ <property name="text">
+ <string>Interest rate</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer78</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>101</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer73</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>29</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel9_4</cstring>
+ </property>
+ <property name="text">
+ <string>KMyMoney either calculates the new interest rate or the amount for principal and interest. If you know the interest rate then enter it here.
+
+If KMyMoney should calculate this value for you, then leave the field blank.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_firstPaymentPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Date of first payment</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_firstPaymentLabel</cstring>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer42</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>78</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout22_2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1_3</cstring>
+ </property>
+ <property name="text">
+ <string>First payment due on</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyDateInput">
+ <property name="name">
+ <cstring>m_firstDueDateEdit</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer43</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>28</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_firstPaymentNote</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignBottom</set>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_newCalculateLoanPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Calculate Loan</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>
+You have successfully entered the general information about your loan. Next, KMyMoney needs some information about the calculation of the loan.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer10_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>19</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout31</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer8_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>136</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout30</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel3_4</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>1. General Information</string>
+ </property>
+ <property name="alignment">
+ <set>AlignTop</set>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel4_3_2</cstring>
+ </property>
+ <property name="text">
+ <string>
+2. Calculate Loan</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel4_3</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>
+3. Payments</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer7_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>18</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer9_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>135</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer51</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>23</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_paymentFrequencyPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Payment frequency</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel11_2</cstring>
+ </property>
+ <property name="text">
+ <string>
+How often will there be payments made to this loan?</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer54</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>49</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout33</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer57</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>39</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KComboBox">
+ <property name="name">
+ <cstring>m_paymentFrequencyUnitEdit</cstring>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer56</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>56</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer55</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>49</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_interestCalculationPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Interest calculation</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel12_2</cstring>
+ </property>
+ <property name="text">
+ <string>
+When does the actual interest rate get calculated?</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer61</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>69</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout42</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>ButtonGroup5</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <property name="exclusive">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_interestOnReceptionButton</cstring>
+ </property>
+ <property name="text">
+ <string>When the payment is received.</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_interestOnPaymentButton</cstring>
+ </property>
+ <property name="text">
+ <string>When the payment is due.</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer14_2_2_2_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>296</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer62</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>69</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_loanAmountPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Loan amount</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_balanceLabel</cstring>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer68</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>15</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout38</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel16</cstring>
+ </property>
+ <property name="text">
+ <string>Loan amount</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit">
+ <property name="name">
+ <cstring>m_loanAmountEdit</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>Frame3</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>StyledPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel6</cstring>
+ </property>
+ <property name="text">
+ <string>Loan amount:</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel8</cstring>
+ </property>
+ <property name="text">
+ <string>Interest rate:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel9</cstring>
+ </property>
+ <property name="text">
+ <string>Term:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel10</cstring>
+ </property>
+ <property name="text">
+ <string>Principal + Interest:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel11</cstring>
+ </property>
+ <property name="text">
+ <string>Final amortization payment</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>m_loanAmount1</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>m_interestRate1</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="1">
+ <property name="name">
+ <cstring>m_duration1</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="1">
+ <property name="name">
+ <cstring>m_payment1</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="1">
+ <property name="name">
+ <cstring>m_balloon1</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_interestPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Interest</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel14_2</cstring>
+ </property>
+ <property name="text">
+ <string>
+Please enter the interest rate or leave the field empty to calculate it.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer67</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout36</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1_4</cstring>
+ </property>
+ <property name="text">
+ <string>Interest rate</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit">
+ <property name="name">
+ <cstring>m_interestRateEdit</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>Frame3_2</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>StyledPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel6_3</cstring>
+ </property>
+ <property name="text">
+ <string>Loan amount:</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel8_3</cstring>
+ </property>
+ <property name="text">
+ <string>Interest rate:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel9_2</cstring>
+ </property>
+ <property name="text">
+ <string>Term:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel10_2</cstring>
+ </property>
+ <property name="text">
+ <string>Principal + Interest:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel11_3</cstring>
+ </property>
+ <property name="text">
+ <string>Final amortization payment</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>m_loanAmount2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>m_interestRate2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="1">
+ <property name="name">
+ <cstring>m_duration2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="1">
+ <property name="name">
+ <cstring>m_payment2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="1">
+ <property name="name">
+ <cstring>m_balloon2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_durationPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Duration</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel15_2</cstring>
+ </property>
+ <property name="text">
+ <string>
+Please enter the term of this loan or leave the field empty to calculate it. The term is the time that is required to fully repay the loan. This time might be different from the time your loan contract is signed for.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer67_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>54</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout43</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel2_3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Term</string>
+ </property>
+ </widget>
+ <widget class="KIntNumInput">
+ <property name="name">
+ <cstring>m_durationValueEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KMyMoneyGeneralCombo">
+ <property name="name">
+ <cstring>m_durationUnitEdit</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>Frame3_2_2</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>StyledPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel6_3_2</cstring>
+ </property>
+ <property name="text">
+ <string>Loan amount:</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel8_3_2</cstring>
+ </property>
+ <property name="text">
+ <string>Interest rate:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel9_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Term:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel10_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Principal + Interest:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel11_3_2</cstring>
+ </property>
+ <property name="text">
+ <string>Final amortization payment</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>m_loanAmount3</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>m_interestRate3</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="1">
+ <property name="name">
+ <cstring>m_duration3</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="1">
+ <property name="name">
+ <cstring>m_payment3</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="1">
+ <property name="name">
+ <cstring>m_balloon3</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_paymentPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Payment</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel16_2</cstring>
+ </property>
+ <property name="text">
+ <string>
+Please enter the amount you pay for principal and interest or leave the field empty to calculate it.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer74</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout36_2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1_4_2</cstring>
+ </property>
+ <property name="text">
+ <string>Principal and interest</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit">
+ <property name="name">
+ <cstring>m_paymentEdit</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>Frame3_2_2_2</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>StyledPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel6_3_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Loan amount:</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel8_3_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Interest rate:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel9_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Term:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel10_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Principal + Interest:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel11_3_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Final amortization payment</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>m_loanAmount4</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>m_interestRate4</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="1">
+ <property name="name">
+ <cstring>m_duration4</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="1">
+ <property name="name">
+ <cstring>m_payment4</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="1">
+ <property name="name">
+ <cstring>m_balloon4</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_finalPaymentPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Final amortization payment</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel17_2</cstring>
+ </property>
+ <property name="text">
+ <string>
+Please enter the amount of a final amortization payment or leave the field empty to calculate it.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer74_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout44</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1_4_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Final amortization payment</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit">
+ <property name="name">
+ <cstring>m_finalPaymentEdit</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>Frame3_2_2_2_2</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>StyledPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel6_3_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Loan amount:</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel8_3_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Interest rate:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel9_2_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Term:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel10_2_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Principal + Interest:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel11_3_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Final amortization payment</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>m_loanAmount5</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>m_interestRate5</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="1">
+ <property name="name">
+ <cstring>m_duration5</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="1">
+ <property name="name">
+ <cstring>m_payment5</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="1">
+ <property name="name">
+ <cstring>m_balloon5</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_calculationOverviewPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Calculation Overview</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel18_2</cstring>
+ </property>
+ <property name="text">
+ <string>
+KMyMoney has calculated the loan as shown in the overview below. You can accept these values by selecting "Next" or change them by choosing "Back" to return to the input field for the information you want to change.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer79</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>22</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>Frame3_2_2_2_2_2</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>StyledPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel6_3_2_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Loan amount:</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel8_3_2_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Interest rate:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel9_2_2_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Term:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel10_2_2_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Principal + Interest:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel11_3_2_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Final amortization payment</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>m_loanAmount6</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>m_interestRate6</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="1">
+ <property name="name">
+ <cstring>m_duration6</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="1">
+ <property name="name">
+ <cstring>m_payment6</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="1">
+ <property name="name">
+ <cstring>m_balloon6</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_newPaymentsPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Payments</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel19_2</cstring>
+ </property>
+ <property name="text">
+ <string>
+In the following steps, KMyMoney supports you in setting up categories and schedules for your loan payments.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer10_2_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>14</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout31_2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer8_2_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>136</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout30_2</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel19_3</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>1. General Information</string>
+ </property>
+ <property name="alignment">
+ <set>AlignTop</set>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel19_4</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>
+2. Calculate Loan</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel19_5</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>
+3. Payments</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer7_2_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>18</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer9_2_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>135</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer51_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>18</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_interestCategoryPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Interest category</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel20_2</cstring>
+ </property>
+ <property name="text">
+ <string>
+Please select the category you want to assign the interest payments to or create a new category.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer90</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>38</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="kMyMoneyAccountSelector">
+ <property name="name">
+ <cstring>m_interestAccountEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout29</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer54_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>264</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_createCategoryButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer91</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>22</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_additionalFeesPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Additional Fees</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel21_2</cstring>
+ </property>
+ <property name="text">
+ <string>
+If your regular payment contains any additional fees, click on the button "Additional fees" to enter them.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer58</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>Frame9</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>StyledPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="2" column="1">
+ <property name="name">
+ <cstring>TextLabel21_1_3</cstring>
+ </property>
+ <property name="text">
+ <string>= periodical payment:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="2">
+ <property name="name">
+ <cstring>m_periodicPayment</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="2">
+ <property name="name">
+ <cstring>m_additionalCost</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="1">
+ <property name="name">
+ <cstring>Layout63</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel21_1_2</cstring>
+ </property>
+ <property name="text">
+ <string>+</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_additionalFeeButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="0" column="2">
+ <property name="name">
+ <cstring>m_basePayment</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>TextLabel21_1</cstring>
+ </property>
+ <property name="text">
+ <string>Principal + Interest:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <spacer row="1" column="0">
+ <property name="name">
+ <cstring>spacer173_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer row="1" column="3">
+ <property name="name">
+ <cstring>spacer173</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer59</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel21_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>If no additional fees are included in your periodical payment or you have entered all such fees, then click on "Next".</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer60</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_schedulePage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Schedule</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel22_2</cstring>
+ </property>
+ <property name="text">
+ <string>KMyMoney will create a schedule for this payment and reminds you whenever a payment must be made.&lt;p&gt;
+If you selected to record all payments this date has already been supplied. If you selected to record only this years payments, then the &lt;b&gt;First payment due date&lt;/b&gt; is the date of the first payment made in this year.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer67_3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>23</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout49</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="kMyMoneyAccountSelector" row="1" column="1">
+ <property name="name">
+ <cstring>m_paymentAccountEdit</cstring>
+ </property>
+ </widget>
+ <widget class="kMyMoneyDateInput" row="0" column="1">
+ <property name="name">
+ <cstring>m_nextDueDateEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>m_dueLabel</cstring>
+ </property>
+ <property name="text">
+ <string>First payment due on:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel2_5</cstring>
+ </property>
+ <property name="text">
+ <string>Make payment from/to:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignTop</set>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer68_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>24</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_summaryEditPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Summary</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel10_4</cstring>
+ </property>
+ <property name="text">
+ <string>
+KMyMoney has calculated the loan as shown below. If you want to accept these values use the "Finish" button to update your account, otherwise use the "Back" button to modify your settings.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer74_3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>23</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>Frame3_2_2_2_2_2_2</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>StyledPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel6_3_2_2_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Principal + Interest:</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel8_3_2_2_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Additional fees:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel9_2_2_2_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Total payment:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel10_2_2_2_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Interest rate:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel11_3_2_2_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Valid from:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>TextLabel11_3_2_2_2_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Affected payments:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>m_payment7</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>m_additionalFees7</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="1">
+ <property name="name">
+ <cstring>m_totalPayment7</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="1">
+ <property name="name">
+ <cstring>m_interestRate7</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="1">
+ <property name="name">
+ <cstring>m_startDateChanges</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="1">
+ <property name="name">
+ <cstring>m_affectedPayments</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_assetAccountPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Asset Account</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel10_4_2</cstring>
+ </property>
+ <property name="text">
+ <string>If this loan is for an asset, such as a car or a house, you can create the asset account now. An asset account represents the total value of an asset. The money from this loan will be transfered into the asset account you create or select.
+If this loan is a 'consumer loan' (money to use however you want), you can use a checking account instead.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer80</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_dontCreatePayoutCheckBox</cstring>
+ </property>
+ <property name="text">
+ <string>Don't create payout transaction</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout124</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="kMyMoneyAccountSelector">
+ <property name="name">
+ <cstring>m_assetAccountEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout123</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer244</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>466</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_createNewAssetButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Press this to create a new asset account</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout170</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Date of payment</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyDateInput">
+ <property name="name">
+ <cstring>m_paymentDate</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer328</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_summaryPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Summary</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel22_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>
+This page summarizes the data you entered. If you need to modify anything, please use the "Back" button to go to respective page. Otherwise use the "Finish" button to create the account.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer69</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout61</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout60</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox3</cstring>
+ </property>
+ <property name="title">
+ <string>General</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>1</number>
+ </property>
+ <property name="spacing">
+ <number>1</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout52</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>1</number>
+ </property>
+ <property name="spacing">
+ <number>1</number>
+ </property>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel5_3</cstring>
+ </property>
+ <property name="text">
+ <string>Payee:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>m_summaryLoanType</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="1">
+ <property name="name">
+ <cstring>m_summaryPayee</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel4_4</cstring>
+ </property>
+ <property name="text">
+ <string>First payment:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>m_summaryFirstPayment</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel3_5</cstring>
+ </property>
+ <property name="text">
+ <string>Amount is:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox2</cstring>
+ </property>
+ <property name="title">
+ <string>Loan calculation</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>1</number>
+ </property>
+ <property name="spacing">
+ <number>1</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout57</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>1</number>
+ </property>
+ <property name="spacing">
+ <number>1</number>
+ </property>
+ <widget class="QLabel" row="3" column="1">
+ <property name="name">
+ <cstring>m_summaryTotalPeriodicPayment</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="1">
+ <property name="name">
+ <cstring>m_summaryPaymentAccount</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="1">
+ <property name="name">
+ <cstring>m_summaryAdditionalFees</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel15</cstring>
+ </property>
+ <property name="text">
+ <string>Periodic Payment:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>TextLabel14</cstring>
+ </property>
+ <property name="text">
+ <string>Additional Fees:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel13</cstring>
+ </property>
+ <property name="text">
+ <string>Interest category:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>TextLabel17</cstring>
+ </property>
+ <property name="text">
+ <string>Payment from:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>m_summaryInterestCategory</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="1">
+ <property name="name">
+ <cstring>m_summaryNextPayment</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel16_3</cstring>
+ </property>
+ <property name="text">
+ <string>Next due date:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox1</cstring>
+ </property>
+ <property name="title">
+ <string>Payment</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>1</number>
+ </property>
+ <property name="spacing">
+ <number>1</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout59</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>1</number>
+ </property>
+ <property name="spacing">
+ <number>1</number>
+ </property>
+ <widget class="QLabel" row="3" column="1">
+ <property name="name">
+ <cstring>m_summaryInterestRate</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel10_3</cstring>
+ </property>
+ <property name="text">
+ <string>Term:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="1">
+ <property name="name">
+ <cstring>m_summaryPeriodicPayment</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel9_3</cstring>
+ </property>
+ <property name="text">
+ <string>Interest rate:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>m_summaryPaymentFrequency</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="6" column="0">
+ <property name="name">
+ <cstring>TextLabel12</cstring>
+ </property>
+ <property name="text">
+ <string>Final Payment:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="1">
+ <property name="name">
+ <cstring>m_summaryTerm</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel6_4</cstring>
+ </property>
+ <property name="text">
+ <string>Interest is due:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="1">
+ <property name="name">
+ <cstring>m_summaryAmount</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>TextLabel11_4</cstring>
+ </property>
+ <property name="text">
+ <string>Principal + Interest:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="6" column="1">
+ <property name="name">
+ <cstring>m_summaryBalloonPayment</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel8_4</cstring>
+ </property>
+ <property name="text">
+ <string>Loan amount:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel7</cstring>
+ </property>
+ <property name="text">
+ <string>Payment frequency:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>m_summaryInterestDue</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer70</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>kMyMoneyLineEdit</class>
+ <header location="local">../widgets/kmymoneylineedit.h</header>
+ <sizehint>
+ <width>90</width>
+ <height>25</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+ <customwidget>
+ <class>kMyMoneyAccountSelector</class>
+ <header location="global">../widgets/kmymoneyaccountselector.h</header>
+ <sizehint>
+ <width>80</width>
+ <height>80</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="1110">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000041d49444154388d8d95c18b1c4514c67fbb29e5b54ea05b26da1d36b08d09a6c508138cb8c13d647141163de49043bca9f1628eb9294810f24f88c15b728b07617358888785d980427290b4a8d00b19a8821da8228cf42316ac87eed9247ac95c9aeaeef9eaabdffb5ebf85f178ccfcf7f5b79fec07a7280a08a008f25ceb7c29e5da573716e65a0be3f198ef6f5ededff9b9e1b34faf90882092a1ea21428b9220ffbf46054055b19386ba6970ae6665b5e0d2c5eb0b066067bbe1f21757c88f5504eff0c192189081303a5582b16854fccce2fe041f00cdd0a8103b874556405476b62d972ec2c2b90ff3fd8df5cb946549d80b34aea15ccaa94625450e2d0e558b460b7371a734b5e027251a155545678ab62d7eea90b4c504078908c107acb354cb251b1f8f08b1c18631aabbb4d18211404804f22545863561d2f060fb34aa8a18d0086204e72c46a32292e1a796f278c1da7a859d8da9a737506db04d0a24103d8949480b214d3bbee952a05c1d536f9d2684160c744f048311543d459eb1b65ee1754cedae13a64abd5d6127053c9d0281f22d4f75c6a2118a5c09272d7ab740638bf4ef2dd2174032d0d8d04c6fe19c32bedd8bc65e342aa3f785e2784bfd6bc1bd9db24b05505616a4edd67d5a8c1801a03a9962754c504bf34b8986acfb9be91cac7d54315a15541b36b134f74bd2dc53940115a5381e087bc25c6f71be831a8baa234cc1ee3eeb74ed83116beb2b8849d108a3730e8ce27e2bfb82419a7b407ac7c222fd0e6280a8078ce64e47ef54ac9d5be9aaae0162e0de568a44a18d3df90845d919c4f01463406340a44f40efb43a99b371618488e2670d1a2d7ee6f1d3be39342104e937ed85fb86599c33e9ee0be9a004946259d8b858909880d59aa00daa0d3280b5f39e34074c4b3a5434029a76a9e9f5cc0163b5c80024158a1cfc4cb1d3061d5834066cb0a403c008599a70f6bc27b8d03106ea3ae91987278c5b143b015547224ab5e24185cd9b81665273e7b6e7cecd82ddbf8098002de94049737bc09828cf3036f31c3735c8b0e98eb704672f348c7f7c93cd1fb2ae905119ff54e0dff3542b0e9dd983dcea2cc5eea6cf303e74ec687af5c41b6fa38f5e203c7ec8e1238ef85831a214afef21060ea781ec68247b65c6916353cc8b73d1ae79354606af2a930709aa118da1636c274dd7e3774b884a79aa6b5711a538d33cf9c01c1c9b83bc6a1f55c91ccb23b05b1deb43a7decdaffefd2862f61366aa8449c69e33642f012f2bb208fa98eeda1f3346f076c8eeef19475e9be115423364f78f84105a8643d34d90cfbfdcd8cf872589a45dc7f54cf3134a36f4e495c23f9da8db15bccb708d4014f2ca512cb5d4f7c13e84300d5cff6eb39b202bab053bdb9674f0648609427d0f8402ddeac30f4fcd3ced3efc3b422d406c09b340bedc1571e1bfc3d44dc281634c5fe5e758e7395cfbe6d6c130fd17d92372d277c159b70000000049454e44ae426082</data>
+ </image>
+</images>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/konlinequoteconfigurationdecl.ui b/kmymoney2/dialogs/konlinequoteconfigurationdecl.ui
new file mode 100644
index 0000000..0ca2d14
--- /dev/null
+++ b/kmymoney2/dialogs/konlinequoteconfigurationdecl.ui
@@ -0,0 +1,199 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>kOnlineQuoteConfigurationDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>kOnlineQuoteConfigurationDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>511</width>
+ <height>282</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Online Quote Configuration</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>20</x>
+ <y>240</y>
+ <width>476</width>
+ <height>33</height>
+ </rect>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonHelp</cstring>
+ </property>
+ <property name="text">
+ <string>Help</string>
+ </property>
+ <property name="accel">
+ <string>F1</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>10</y>
+ <width>90</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Perl Location:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2_2</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>40</y>
+ <width>90</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Script:</string>
+ </property>
+ </widget>
+ <widget class="KHistoryCombo">
+ <property name="name">
+ <cstring>cmbScriptName</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>110</x>
+ <y>40</y>
+ <width>310</width>
+ <height>21</height>
+ </rect>
+ </property>
+ </widget>
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>edtPerlLocation</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>110</x>
+ <y>10</y>
+ <width>380</width>
+ <height>21</height>
+ </rect>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>btnBrowse</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>430</x>
+ <y>40</y>
+ <width>61</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Browse...</string>
+ </property>
+ </widget>
+</widget>
+<customwidgets>
+</customwidgets>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>kOnlineQuoteConfigurationDecl</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>kOnlineQuoteConfigurationDecl</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/konlinequoteconfigurationdlg.cpp b/kmymoney2/dialogs/konlinequoteconfigurationdlg.cpp
new file mode 100644
index 0000000..8503d5a
--- /dev/null
+++ b/kmymoney2/dialogs/konlinequoteconfigurationdlg.cpp
@@ -0,0 +1,51 @@
+/***************************************************************************
+ konlinequoteconfigurationdlg.cpp - description
+ -------------------
+ begin : Tuesday July 1st, 2004
+ copyright : (C) 2004 by Kevin Tambascio
+ email : ktambascio@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlabel.h>
+#include <qpushbutton.h>
+#include <qradiobutton.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kpushbutton.h>
+#include <klistbox.h>
+#include <klistview.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "konlinequoteconfigurationdecl.h"
+#include "konlinequoteconfigurationdlg.h"
+
+
+KOnlineQuoteConfigurationDlg::KOnlineQuoteConfigurationDlg(QWidget *parent) : kOnlineQuoteConfigurationDecl(parent)
+{
+
+}
+
+KOnlineQuoteConfigurationDlg::~KOnlineQuoteConfigurationDlg()
+{
+
+}
+
+#include "konlinequoteconfigurationdlg.moc"
diff --git a/kmymoney2/dialogs/konlinequoteconfigurationdlg.h b/kmymoney2/dialogs/konlinequoteconfigurationdlg.h
new file mode 100644
index 0000000..f6ea139
--- /dev/null
+++ b/kmymoney2/dialogs/konlinequoteconfigurationdlg.h
@@ -0,0 +1,49 @@
+/***************************************************************************
+ konlinequoteconfigurationdlg.h - description
+ -------------------
+ begin : Tuesday July 1st, 2004
+ copyright : (C) 2004 by Kevin Tambascio
+ email : ktambascio@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KONLINEQUOTECONFIGURATIONDIALOG_H
+#define KONLINEQUOTECONFIGURATIONDIALOG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "konlinequoteconfigurationdecl.h"
+//#include "../mymoney/mymoneyonlinepriceupdate.h"
+
+
+/**
+ * @author Kevin Tambascio
+ */
+
+class KOnlineQuoteConfigurationDlg : public kOnlineQuoteConfigurationDecl
+{
+ Q_OBJECT
+public:
+ KOnlineQuoteConfigurationDlg(QWidget *parent);
+ ~KOnlineQuoteConfigurationDlg();
+
+};
+
+#endif
diff --git a/kmymoney2/dialogs/kpayeereassigndlg.cpp b/kmymoney2/dialogs/kpayeereassigndlg.cpp
new file mode 100644
index 0000000..0ed8a5a
--- /dev/null
+++ b/kmymoney2/dialogs/kpayeereassigndlg.cpp
@@ -0,0 +1,81 @@
+/***************************************************************************
+ kpayeereassigndlg.cpp
+ -------------------
+ copyright : (C) 2005 by Andreas Nicolai
+ (C) 2007 by Thomas Baumgart
+ author : Andreas Nicolai, Thomas Baumgart
+ email : ghorwin@users.sourceforge.net
+ ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kdialog.h>
+#include <klocale.h>
+#include <kstdguiitem.h>
+#include <kpushbutton.h>
+#include <kmessagebox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kpayeereassigndlg.h"
+#include <kmymoney/kmymoneycombo.h>
+#include <kmymoney/kguiutils.h>
+
+KPayeeReassignDlg::KPayeeReassignDlg( QWidget* parent, const char* name) :
+ KPayeeReassignDlgDecl( parent, name)
+{
+ buttonOk->setGuiItem(KStdGuiItem::ok());
+ buttonCancel->setGuiItem(KStdGuiItem::cancel());
+ kMandatoryFieldGroup* mandatory = new kMandatoryFieldGroup(this);
+ mandatory->add(payeeCombo);
+ mandatory->setOkButton(buttonOk);
+}
+
+KPayeeReassignDlg::~KPayeeReassignDlg()
+{
+}
+
+QString KPayeeReassignDlg::show(const QValueList<MyMoneyPayee>& payeeslist)
+{
+ if (payeeslist.isEmpty())
+ return QString(); // no payee available? nothing can be selected...
+
+ payeeCombo->loadPayees(payeeslist);
+
+ // execute dialog and if aborted, return empty string
+ if (this->exec() == QDialog::Rejected)
+ return QString();
+
+ // otherwise return index of selected payee
+ return payeeCombo->selectedItem();
+}
+
+
+void KPayeeReassignDlg::accept(void)
+{
+ // force update of payeeCombo
+ buttonOk->setFocus();
+
+ if(payeeCombo->selectedItem().isEmpty()) {
+ KMessageBox::information(this, i18n("This dialog does not allow to create new payees. Please pick a payee from the list."), i18n("Payee creation"));
+ } else {
+ KPayeeReassignDlgDecl::accept();
+ }
+}
+
+#include "kpayeereassigndlg.moc"
diff --git a/kmymoney2/dialogs/kpayeereassigndlg.h b/kmymoney2/dialogs/kpayeereassigndlg.h
new file mode 100644
index 0000000..3edab86
--- /dev/null
+++ b/kmymoney2/dialogs/kpayeereassigndlg.h
@@ -0,0 +1,74 @@
+/***************************************************************************
+ kpayeereassigndlg.cpp
+ -------------------
+ copyright : (C) 2005 by Andreas Nicolai
+ (C) 2007 by Thomas Baumgart
+ author : Andreas Nicolai, Thomas Baumgart
+ email : ghorwin@users.sourceforge.net
+ ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KPAYEEREASSIGNDLG_H
+#define KPAYEEREASSIGNDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qvaluelist.h>
+#include <qcheckbox.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneypayee.h>
+#include "kmymoney2/dialogs/kpayeereassigndlgdecl.h"
+
+/**
+ * Implementation of the dialog that lets the user select a payee in order
+ * to re-assign transactions (for instance, if payees are deleted).
+ */
+class KPayeeReassignDlg : public KPayeeReassignDlgDecl
+{
+ Q_OBJECT
+public:
+ /** Default constructor */
+ KPayeeReassignDlg( QWidget* parent = 0, const char* name = 0);
+
+ /** Destructor */
+ ~KPayeeReassignDlg();
+
+ /**
+ * This function sets up the dialog, lets the user select a payee and returns
+ * the id of the selected payee in the payeeslist.
+ *
+ * @param payeeslist reference to QValueList of MyMoneyPayee objects to be contained in the list
+ *
+ * @return Returns the id of the selected payee in the list or QString() if
+ * the dialog was aborted. QString() is also returned if the payeeslist is empty.
+ */
+ QString show(const QValueList<MyMoneyPayee>& payeeslist);
+
+ /**
+ * Returns true, if the names of the payees to be deleted should be copied
+ * to the selected payee's match list.
+ */
+ bool addToMatchList(void) const { return m_copyToMatchList->isChecked(); }
+
+protected:
+ void accept(void);
+
+};
+
+#endif // KPAYEEREASSIGNDLG_H
diff --git a/kmymoney2/dialogs/kpayeereassigndlgdecl.ui b/kmymoney2/dialogs/kpayeereassigndlgdecl.ui
new file mode 100644
index 0000000..a968709
--- /dev/null
+++ b/kmymoney2/dialogs/kpayeereassigndlgdecl.ui
@@ -0,0 +1,186 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KPayeeReassignDlgDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KPayeeReassignDlgDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>558</width>
+ <height>312</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Reassign payees</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>false</bool>
+ </property>
+ <property name="modal">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>300</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>The transactions associated with the selected payees need to be re-assigned to a different payee before the selected payees can be deleted. Please select a payee from the list below.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignJustify|AlignTop</set>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer8</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Available payees:</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyPayeeCombo">
+ <property name="name">
+ <cstring>payeeCombo</cstring>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer9</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_copyToMatchList</cstring>
+ </property>
+ <property name="text">
+ <string>Assign deleted names to the above selected payee's matching list</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="Line">
+ <property name="name">
+ <cstring>line1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>305</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>KPayeeReassignDlgDecl</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>KPayeeReassignDlgDecl</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/kplugindlg.ui b/kmymoney2/dialogs/kplugindlg.ui
new file mode 100644
index 0000000..33a6f88
--- /dev/null
+++ b/kmymoney2/dialogs/kplugindlg.ui
@@ -0,0 +1,154 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KPluginDlg</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KPluginDlg</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>503</width>
+ <height>285</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>PluginDlg</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KListView" row="0" column="0" rowspan="1" colspan="4">
+ <column>
+ <property name="text">
+ <string>PlugIn</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Status</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Feature</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>m_listView</cstring>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="rootIsDecorated">
+ <bool>false</bool>
+ </property>
+ <property name="fullWidth">
+ <bool>true</bool>
+ </property>
+ <property name="shadeSortColumn">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <spacer row="1" column="0">
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>180</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton" row="1" column="1">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="1" column="2">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>2</number>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="1" column="3">
+ <property name="name">
+ <cstring>closeButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Close</string>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>13</number>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>closeButton</sender>
+ <signal>clicked()</signal>
+ <receiver>KPluginDlg</receiver>
+ <slot>reject()</slot>
+ </connection>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>KPluginDlg</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>KPluginDlg</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/krecentfileitem.cpp b/kmymoney2/dialogs/krecentfileitem.cpp
new file mode 100644
index 0000000..679078d
--- /dev/null
+++ b/kmymoney2/dialogs/krecentfileitem.cpp
@@ -0,0 +1,62 @@
+/***************************************************************************
+ krecentfileitem.cpp - description
+ -------------------
+ begin : Wed Jul 30 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qtooltip.h>
+#include <qwidget.h>
+#include <qrect.h>
+#include <qpoint.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+
+#include "krecentfileitem.h"
+
+KRecentFileItem::KRecentFileItem(const QString& url, QIconView* parent, const QString& text, const QPixmap& icon)
+ : QIconViewItem(parent, text, icon),
+ m_url(url),
+ m_parent(parent)
+{
+ QToolTip::add(parent, rect(), url);
+ // avoid moving this item around
+ setDragEnabled(false);
+}
+
+KRecentFileItem::~KRecentFileItem()
+{
+}
+
+bool KRecentFileItem::move( int x, int y )
+{
+ QRect r = rect();
+ QToolTip::remove(m_parent, rect());
+ r.moveTopLeft(QPoint(x,y));
+ QToolTip::add(m_parent, r, m_url);
+ return QIconViewItem::move(x,y);
+}
+
diff --git a/kmymoney2/dialogs/krecentfileitem.h b/kmymoney2/dialogs/krecentfileitem.h
new file mode 100644
index 0000000..bb88cba
--- /dev/null
+++ b/kmymoney2/dialogs/krecentfileitem.h
@@ -0,0 +1,56 @@
+/***************************************************************************
+ krecentfileitem.h - description
+ -------------------
+ begin : Wed Jul 30 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+#ifndef KRECENTFILEITEM_H
+#define KRECENTFILEITEM_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qwidget.h>
+#include <qiconview.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+#include <kurl.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+
+
+/**
+ * @author Michael Edwardes
+ */
+
+class KRecentFileItem : public QIconViewItem {
+public:
+ KRecentFileItem(const QString& url, QIconView* parent, const QString& text, const QPixmap& icon);
+ ~KRecentFileItem();
+ QString fileURL(void) const { return m_url; }
+
+ bool move( int x, int y );
+
+private:
+ QString m_url;
+ QWidget* m_parent;
+};
+
+#endif
diff --git a/kmymoney2/dialogs/kreconciledlg.cpp b/kmymoney2/dialogs/kreconciledlg.cpp
new file mode 100644
index 0000000..75e7b48
--- /dev/null
+++ b/kmymoney2/dialogs/kreconciledlg.cpp
@@ -0,0 +1,463 @@
+/***************************************************************************
+ kreconciledlg.cpp
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include <kmessagebox.h>
+#include <kglobal.h>
+#include <klocale.h>
+#if QT_VERSION > 300
+#include <kstandarddirs.h>
+#else
+#include <kstddirs.h>
+#endif
+
+
+#include "kreconciledlg.h"
+
+KReconcileDlg::KReconcileDlg(const MyMoneyMoney /* previousBal */, const MyMoneyMoney /* endingBal */,
+ const QDate /* endingDate */, MyMoneyAccount* /*accountIndex */,
+ const MyMoneyFile* /* file */, QWidget *parent, const char *name)
+ : KReconcileDlgDecl(parent,name,true)
+{
+/*
+ m_balanced = false;
+ m_debitsQList.setAutoDelete(false);
+ m_creditsQList.setAutoDelete(false);
+ m_reconciledTransactions.setAutoDelete(false);
+
+ m_file = file;
+ m_accountIndex = accountIndex;
+ m_endingBalance = endingBal;
+ m_previousBalance = previousBal;
+ m_clearedBalance.setAmount(0.0);
+ m_debitBalance.setAmount(0.0);
+ m_creditBalance.setAmount(0.0);
+ m_endingDate = endingDate;
+
+
+ totalCreditsLabel->setAlignment(AlignRight | AlignVCenter | ExpandTabs | SingleLine);
+ totalDebitsLabel->setAlignment(AlignRight | AlignVCenter | ExpandTabs | SingleLine);
+ previousLabel->setAlignment(AlignRight | AlignVCenter | ExpandTabs | SingleLine);
+ endingLabel->setAlignment(AlignRight | AlignVCenter | ExpandTabs | SingleLine);
+ differenceLabel->setAlignment(AlignRight | AlignVCenter | ExpandTabs | SingleLine);
+
+
+ debitListView->setRootIsDecorated(false);
+ debitListView->addColumn(i18n("Date"));
+ debitListView->addColumn(i18n("Number"));
+ debitListView->addColumn(i18n("Payee"));
+ debitListView->addColumn(i18n("Amount"));
+ debitListView->addColumn(i18n("C"));
+ debitListView->setMultiSelection(true);
+ debitListView->setAllColumnsShowFocus(true);
+ // never show a horizontal scroll bar
+ debitListView->setHScrollBarMode(QScrollView::AlwaysOff);
+
+ creditListView->setRootIsDecorated(false);
+ creditListView->addColumn(i18n("Date"));
+ creditListView->addColumn(i18n("Number"));
+ creditListView->addColumn(i18n("Payee"));
+ creditListView->addColumn(i18n("Amount"));
+ creditListView->addColumn(i18n("C"));
+ creditListView->setMultiSelection(true);
+ creditListView->setAllColumnsShowFocus(true);
+ // never show a horizontal scroll bar
+ creditListView->setHScrollBarMode(QScrollView::AlwaysOff);
+
+ endingLabel->setText(KGlobal::locale()->formatMoney(m_clearedBalance.amount(),""));
+
+ previousLabel->setText(KGlobal::locale()->formatMoney(m_endingBalance.amount(),""));
+
+ broughtForwardLabel->setText(KGlobal::locale()->formatMoney(m_previousBalance.amount(),""));
+
+ totalCreditsLabel->setText(i18n("Deposits: ") + KGlobal::locale()->formatMoney(m_creditBalance.amount(),""));
+
+ totalDebitsLabel->setText(i18n("Withdrawals: ") + KGlobal::locale()->formatMoney(m_debitBalance.amount(),""));
+
+
+ loadLists();
+ insertTransactions();
+
+ connect(debitListView, SIGNAL(clicked(QListViewItem*, const QPoint&, int)), this, SLOT(slotDebitSelected(QListViewItem*, const QPoint&, int)));
+ connect(creditListView, SIGNAL(clicked(QListViewItem*, const QPoint&, int)), this, SLOT(slotCreditSelected(QListViewItem*, const QPoint&, int)));
+ connect(buttonCancel, SIGNAL(clicked()), this, SLOT(cancelClicked()));
+ connect(buttonOk, SIGNAL(clicked()), this, SLOT(finishClicked()));
+ connect(buttonEdit, SIGNAL(clicked()), this, SLOT(editClicked()));
+
+ doDifference();
+*/
+}
+
+KReconcileDlg::~KReconcileDlg()
+{
+}
+
+void KReconcileDlg::clearReconcile()
+{
+/*
+ MyMoneyTransaction *temp_transaction;
+ for(temp_transaction = m_creditsQList.first();temp_transaction;temp_transaction = m_creditsQList.next())
+ {
+ if(temp_transaction->state() == MyMoneyTransaction::Reconciled)
+ {
+ temp_transaction->setState(MyMoneyTransaction::Unreconciled);
+ }
+ }
+ for(temp_transaction = m_debitsQList.first();temp_transaction;temp_transaction = m_debitsQList.next())
+ {
+ if(temp_transaction->state() == MyMoneyTransaction::Reconciled)
+ {
+ temp_transaction->setState(MyMoneyTransaction::Unreconciled);
+ }
+ }
+*/
+}
+
+void KReconcileDlg::loadLists(void)
+{
+/*
+ // Load the internal transaaction lists
+ m_creditsQList.clear();
+ m_debitsQList.clear();
+
+ unsigned int i=0;
+ MyMoneyTransaction *transaction;
+ for (i=0, transaction=m_accountIndex->transactionFirst(); transaction; transaction=m_accountIndex->transactionNext(), i++) {
+ if (transaction->date()>m_endingDate)
+ break;
+
+ if (transaction->state()!=MyMoneyTransaction::Reconciled) {
+ if (transaction->type() == MyMoneyTransaction::Debit) {
+ transaction->setIndex(i);
+ m_debitsQList.append(transaction);
+ }
+ else {
+ transaction->setIndex(i);
+ m_creditsQList.append(transaction);
+ }
+ }
+ }
+ resizeEvent(NULL);
+*/
+}
+
+void KReconcileDlg::insertTransactions(void)
+{
+/*
+ creditListView->clear();
+ debitListView->clear();
+
+ QListIterator<MyMoneyTransaction> it(m_debitsQList);
+ for ( ; it.current(); ++it) {
+ (void) new KReconcileListItem(debitListView, it.current());
+ }
+
+ QListIterator<MyMoneyTransaction> it2(m_creditsQList);
+ for ( ; it2.current(); ++it2) {
+ (void) new KReconcileListItem(creditListView, it2.current());
+ }
+
+ resizeEvent(0);
+*/
+}
+
+void KReconcileDlg::slotDebitSelected(QListViewItem* /* item */, const QPoint&/*p*/, int/* col*/)
+{
+/*
+ KReconcileListItem *reconcileItem = (KReconcileListItem*)item;
+ if (!reconcileItem)
+ return;
+
+ // Changed double types to MyMoneyMoney because in the future
+ // we will support mulitple currencies and have our own incompatable
+ // internal format. (one that rounds properly and supports large numbers
+ // e.g unsigned long.int with sign being a boolean).
+// MyMoneyMoney dblDebit = m_debitBalance;
+// MyMoneyMoney dblCleared = m_clearedBalance;
+ MyMoneyMoney dblItem = reconcileItem->transaction()->amount();
+
+ if(reconcileItem->isSelected())
+ {
+ m_debitBalance += dblItem;
+ m_clearedBalance -= dblItem;
+ reconcileItem->setReconciled(true);
+ m_reconciledTransactions.append(reconcileItem->transaction());
+ }
+ else
+ {
+ m_debitBalance -= dblItem;
+ m_clearedBalance += dblItem;
+ reconcileItem->setReconciled(false);
+ m_reconciledTransactions.remove(reconcileItem->transaction());
+ }
+ totalDebitsLabel->setText(i18n("Withdrawals: ") + KGlobal::locale()->formatMoney(m_debitBalance.amount(),""));
+
+ endingLabel->setText(KGlobal::locale()->formatMoney(m_clearedBalance.amount(),""));
+
+ doDifference();
+*/
+}
+
+void KReconcileDlg::slotCreditSelected(QListViewItem* /* item */, const QPoint&, int)
+{
+/*
+ KReconcileListItem *reconcileItem = (KReconcileListItem*)item;
+ if (!reconcileItem)
+ return;
+
+ // See above func
+// double dblCredit = m_creditBalance.amount();
+// double dblCleared = m_clearedBalance.amount();
+ MyMoneyMoney dblItem = reconcileItem->transaction()->amount();
+ if(reconcileItem->isSelected())
+ {
+ m_creditBalance += dblItem;
+ m_clearedBalance += dblItem;
+ reconcileItem->setReconciled(true);
+ m_reconciledTransactions.append(reconcileItem->transaction());
+ }
+ else
+ {
+ m_creditBalance -= dblItem;
+ m_clearedBalance -= dblItem;
+ reconcileItem->setReconciled(false);
+ m_reconciledTransactions.remove(reconcileItem->transaction());
+ }
+
+ totalCreditsLabel->setText(i18n("Deposits: ") + KGlobal::locale()->formatMoney(m_creditBalance.amount(),""));
+
+ endingLabel->setText(KGlobal::locale()->formatMoney(m_clearedBalance.amount(),""));
+
+ doDifference();
+*/
+}
+
+void KReconcileDlg::doDifference(void)
+{
+/*
+ MyMoneyMoney difference((m_previousBalance + m_clearedBalance)- m_endingBalance);
+
+ differenceLabel->setText(KGlobal::locale()->formatMoney(difference.amount(),""));
+ if (difference.isZero())
+ m_balanced = true;
+ else
+ m_balanced = false;
+*/
+}
+
+void KReconcileDlg::finishClicked(void)
+{
+/*
+ if (!m_balanced) {
+ if ((KMessageBox::questionYesNo(this, i18n("Account did not balance, are you sure ?")))==KMessageBox::No) {
+ clearReconcile();
+ return;
+ }
+ }
+// else
+// {
+// }
+ emit reconcileFinished(true);
+*/
+}
+
+/*
+void KReconcileDlg::updateData(void)
+{
+ // Simply reload the list clearing the status.
+ qDebug("In updateData");
+ m_reconciledTransactions.clear();
+ m_debitsQList.clear();
+ m_creditsQList.clear();
+
+ loadLists();
+ insertTransactions();
+ doDifference();
+}
+*/
+void KReconcileDlg::cancelClicked()
+{
+/*
+ clearReconcile();
+ // Stop the transaction view from being refreshed on
+ // cancel by passing false.
+ emit reconcileFinished(false);
+*/
+}
+
+void KReconcileDlg::resetData(const MyMoneyMoney /* previousBal */, const MyMoneyMoney /* endingBal */, const QDate /* endingDate */, MyMoneyAccount* /* accountIndex */, const MyMoneyFile* /* file */)
+{
+/*
+ m_reconciledTransactions.clear();
+ m_debitsQList.clear();
+ m_creditsQList.clear();
+
+ m_balanced = false;
+
+ m_file = file;
+ m_bankIndex = bankIndex;
+ m_accountIndex = accountIndex;
+ m_endingBalance = endingBal;
+ m_previousBalance = previousBal;
+ m_clearedBalance.setAmount(0.0);
+ m_debitBalance.setAmount(0.0);
+ m_creditBalance.setAmount(0.0);
+ m_endingDate = endingDate;
+
+
+ //totalCreditsLabel->setAlignment(AlignRight | AlignVCenter | ExpandTabs | SingleLine);
+ //totalDebitsLabel->setAlignment(AlignRight | AlignVCenter | ExpandTabs | SingleLine);
+ //previousLabel->setAlignment(AlignRight | AlignVCenter | ExpandTabs | SingleLine);
+ //endingLabel->setAlignment(AlignRight | AlignVCenter | ExpandTabs | SingleLine);
+ //differenceLabel->setAlignment(AlignRight | AlignVCenter | ExpandTabs | SingleLine);
+
+
+ endingLabel->setText(KGlobal::locale()->formatMoney(m_clearedBalance.amount(),""));
+
+ previousLabel->setText(KGlobal::locale()->formatMoney(m_endingBalance.amount(),""));
+
+ broughtForwardLabel->setText(KGlobal::locale()->formatMoney(m_previousBalance.amount(),""));
+
+ totalCreditsLabel->setText(i18n("Deposits: ") + KGlobal::locale()->formatMoney(m_creditBalance.amount(),""));
+
+ totalDebitsLabel->setText(i18n("Withdrawals: ") + KGlobal::locale()->formatMoney(m_debitBalance.amount(),""));
+
+ loadLists();
+ insertTransactions();
+*/
+}
+
+void KReconcileDlg::slotTransactionChanged()
+{
+/*
+ reloadLists();
+ insertTransactions();
+ show();
+*/
+}
+
+/** No descriptions */
+void KReconcileDlg::reloadLists()
+{
+/*
+ unsigned int i=0;
+ MyMoneyTransaction *transaction;
+ for (i=0, transaction=m_accountIndex->transactionFirst(); transaction; transaction=m_accountIndex->transactionNext(), i++) {
+ if (transaction->state()!=MyMoneyTransaction::Reconciled) {
+ if (transaction->type() == MyMoneyTransaction::Debit) {
+ transaction->setIndex(i);
+ if(m_debitsQList.find(transaction) < 0)
+ {
+ m_debitsQList.append(transaction);
+ }
+ }
+ else {
+ transaction->setIndex(i);
+ if(m_creditsQList.find(transaction) < 0)
+ {
+ m_creditsQList.append(transaction);
+ }
+ }
+ }
+ }
+
+
+ QListIterator<MyMoneyTransaction> it(m_debitsQList);
+ for ( ; it.current(); ++it) {
+ bool transactionFound = inTransactions(it.current());
+ if(transactionFound == false)
+ m_debitsQList.remove(it.current());
+ }
+
+ QListIterator<MyMoneyTransaction> it2(m_creditsQList);
+ for ( ; it2.current(); ++it2) {
+ bool transactionFound = inTransactions(it2.current());
+ if(transactionFound == false)
+ m_creditsQList.remove(it2.current());
+ }
+*/
+}
+
+
+/** No descriptions */
+bool KReconcileDlg::inTransactions(MyMoneyTransaction * /*credittrans */)
+{
+/*
+ MyMoneyTransaction *transaction;
+ int i = 0;
+ for ( i=0, transaction=m_accountIndex->transactionFirst(); transaction; transaction=m_accountIndex->transactionNext(), i++) {
+ if( credittrans == transaction)
+ return true;
+ }
+*/
+ return false;
+}
+
+/* Not used (yet?)
+bool KReconcileDlg::inCredits(MyMoneyTransaction *transaction)
+{
+ QListIterator<MyMoneyTransaction> it(m_creditsQList);
+ for ( ; it.current(); ++it) {
+ if(transaction == it.current())
+ return true;
+ }
+
+ return false;
+
+}
+*/
+
+/* Not used (yet?)
+bool KReconcileDlg::inDebits(MyMoneyTransaction *transaction)
+{
+ QListIterator<MyMoneyTransaction> it(m_debitsQList);
+ for ( ; it.current(); ++it) {
+ if(transaction == it.current())
+ return true;
+ }
+
+ return false;
+
+}
+*/
+
+void KReconcileDlg::editClicked()
+{
+/*
+ hide();
+*/
+}
+
+void KReconcileDlg::resizeEvent(QResizeEvent* /* e */)
+{
+/*
+ debitListView->setColumnWidth( 2, debitListView->visibleWidth()
+ - debitListView->columnWidth(0)
+ - debitListView->columnWidth(1)
+ - debitListView->columnWidth(3)
+ - debitListView->columnWidth(4));
+
+ creditListView->setColumnWidth( 2, creditListView->visibleWidth()
+ - creditListView->columnWidth(0)
+ - creditListView->columnWidth(1)
+ - creditListView->columnWidth(3)
+ - creditListView->columnWidth(4));
+
+ // call base class resizeEvent()
+ KReconcileDlgDecl::resizeEvent(e);
+*/
+}
+
+#include "kreconciledlg.moc"
diff --git a/kmymoney2/dialogs/kreconciledlg.h b/kmymoney2/dialogs/kreconciledlg.h
new file mode 100644
index 0000000..9ddb079
--- /dev/null
+++ b/kmymoney2/dialogs/kreconciledlg.h
@@ -0,0 +1,90 @@
+/***************************************************************************
+ kreconciledlg.h
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KRECONCILEDLG_H
+#define KRECONCILEDLG_H
+
+#include <qlabel.h>
+#include <klistview.h>
+#include <qpushbutton.h>
+
+#include "../mymoney/mymoneyfile.h"
+#include "../mymoney/mymoneymoney.h"
+
+#include "kreconciledlgdecl.h"
+
+// This dialog is used for reconciliation.
+class KReconcileDlg : public KReconcileDlgDecl {
+ Q_OBJECT
+public:
+ KReconcileDlg(const MyMoneyMoney previousBal, const MyMoneyMoney endingBal, const QDate endingDate, MyMoneyAccount *accountIndex, const MyMoneyFile* file, QWidget *parent=0, const char *name=0);
+ ~KReconcileDlg();
+// void updateData(void);
+ void resetData(const MyMoneyMoney previousBal, const MyMoneyMoney endingBal, const QDate endingDate, MyMoneyAccount *accountIndex, const MyMoneyFile* file);
+ /** No descriptions */
+
+protected:
+ void resizeEvent(QResizeEvent*);
+
+protected slots:
+ void slotDebitSelected(QListViewItem*, const QPoint&, int);
+ void slotCreditSelected(QListViewItem*, const QPoint&, int);
+ void finishClicked();
+ void cancelClicked();
+ /** No descriptions */
+ void editClicked();
+
+signals:
+ void reconcileFinished(bool);
+
+private:
+ MyMoneyMoney m_endingBalance;
+ MyMoneyMoney m_previousBalance;
+ MyMoneyMoney m_clearedBalance;
+ MyMoneyMoney m_debitBalance;
+ MyMoneyMoney m_creditBalance;
+
+ MyMoneyFile* m_file;
+ //MyMoneyBank m_bankIndex;
+ MyMoneyAccount *m_accountIndex;
+
+ QList<MyMoneyTransaction> m_debitsQList;
+ QList<MyMoneyTransaction> m_creditsQList;
+ QList<MyMoneyTransaction> m_reconciledTransactions;
+
+ bool m_balanced; // true when the account is balanced (determined by doDifference)
+
+ QDate m_endingDate;
+
+ void loadLists(void);
+ void insertTransactions(void);
+ void doDifference(void);
+ /** No descriptions */
+ bool inTransactions(MyMoneyTransaction *debittrans);
+ /** No descriptions */
+ bool inDebits(MyMoneyTransaction *transaction);
+ /** No descriptions */
+ bool inCredits(MyMoneyTransaction *transaction);
+
+ void reloadLists();
+ void clearReconcile();
+
+public slots: // Public slots
+ /** No descriptions */
+ void slotTransactionChanged();
+};
+
+#endif
diff --git a/kmymoney2/dialogs/kreconciledlgdecl.ui b/kmymoney2/dialogs/kreconciledlgdecl.ui
new file mode 100644
index 0000000..c75ceed
--- /dev/null
+++ b/kmymoney2/dialogs/kreconciledlgdecl.ui
@@ -0,0 +1,709 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>KReconcileDlgDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>reconcileDlg</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="caption">
+ <string>Reconciliation Dialog</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout10</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>descriptionLabel</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>StyledPanel</enum>
+ </property>
+ <property name="text">
+ <string>This dialog will assist in helping you to balance your account.
+
+Click on an appropriate transaction within one of the two list views to mark it as reconciled. To create a transaction or edit
+a transaction you can return to the register by clicking on the Edit Transactions button.
+
+Your account is balanced when the Difference is Zero. Click on the Finish button to save the reconciled transactions.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignVCenter|AlignLeft</set>
+ </property>
+ <property name="wordwrap" stdset="0">
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="Line">
+ <property name="name">
+ <cstring>Line1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout27</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout25</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>420</width>
+ <height>0</height>
+ </size>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1_3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>420</width>
+ <height>15</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Withdrawals</string>
+ </property>
+ </widget>
+ <widget class="KListView">
+ <property name="name">
+ <cstring>debitListView</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>420</width>
+ <height>100</height>
+ </size>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout26</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1_3_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>15</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Deposits</string>
+ </property>
+ </widget>
+ <widget class="KListView">
+ <property name="name">
+ <cstring>creditListView</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>420</width>
+ <height>100</height>
+ </size>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout11</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>totalDebitsLabel</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>$</string>
+ </property>
+ <property name="scaledContents">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>totalCreditsLabel</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>$</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout9</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>infoGroup</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>250</width>
+ <height>120</height>
+ </size>
+ </property>
+ <property name="title">
+ <string>Balance</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout8</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>90</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Previous Balance:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>broughtForwardLabel</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>0</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout7</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>90</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Ending Balance:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>previousLabel</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>0</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout8</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>90</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Cleared Balance:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>endingLabel</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>0</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout9</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>90</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Difference:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>differenceLabel</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>0</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonEdit</cstring>
+ </property>
+ <property name="text">
+ <string>Edit Transactions...</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>Finish</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>reconcileDlg</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>reconcileDlg</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/kreportconfigurationfilterdlg.cpp b/kmymoney2/dialogs/kreportconfigurationfilterdlg.cpp
new file mode 100644
index 0000000..949601d
--- /dev/null
+++ b/kmymoney2/dialogs/kreportconfigurationfilterdlg.cpp
@@ -0,0 +1,687 @@
+/***************************************************************************
+ kreportconfigurationdlg.cpp - description
+ -------------------
+ begin : Mon Jun 21 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ Ace Jones <ace.j@hotpop.com>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qvariant.h>
+#include <qbuttongroup.h>
+#include <qcheckbox.h>
+#include <qframe.h>
+#include <qlabel.h>
+#include <qlineedit.h>
+#include <qpushbutton.h>
+#include <qradiobutton.h>
+#include <qlayout.h>
+#include <qspinbox.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+#include <qtabwidget.h>
+#include <qtextedit.h>
+#include <qlayout.h>
+#include <qapplication.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kapplication.h>
+#include <kpushbutton.h>
+#include <klineedit.h>
+#include <klistview.h>
+#include <kcombobox.h>
+#include <kguiitem.h>
+#include <kiconloader.h>
+#include <kdebug.h>
+#include <kstdguiitem.h>
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kreportconfigurationfilterdlg.h"
+#include <kmymoney/kmymoneydateinput.h>
+#include <kmymoney/kmymoneyedit.h>
+#include <kmymoney/kmymoneylineedit.h>
+#include <kmymoney/kmymoneyaccountselector.h>
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/mymoneyreport.h>
+#include <kmymoney/kmymoneycombo.h>
+#include "../widgets/kmymoneyreportconfigtab1decl.h"
+#include "../widgets/kmymoneyreportconfigtab2decl.h"
+#include "../widgets/kmymoneyreportconfigtab3decl.h"
+#include "../widgets/kmymoneyreportconfigtabchartdecl.h"
+
+KReportConfigurationFilterDlg::KReportConfigurationFilterDlg(
+ MyMoneyReport report, QWidget *parent, const char *name)
+ : KFindTransactionDlg(parent, name),
+ m_tab2(0),
+ m_tab3(0),
+ m_tabChart(0),
+ m_initialState(report),
+ m_currentState(report)
+{
+ //
+ // Rework labelling
+ //
+
+ setCaption( i18n( "Report Configuration" ) );
+ delete TextLabel1;
+
+ //
+ // Rework the buttons
+ //
+
+ // the Ok button is always enabled
+ disconnect(SIGNAL(selectionEmpty(bool)));
+ m_searchButton->setGuiItem( KStdGuiItem::ok() );
+ m_searchButton->setEnabled(true);
+
+ // reconnect the close button
+ m_closeButton->disconnect();
+ connect(m_closeButton, SIGNAL(clicked()), this, SLOT(reject()));
+
+ //
+ // Add new tabs
+ //
+
+ m_tab1 = new kMyMoneyReportConfigTab1Decl( m_criteriaTab, "kMyMoneyReportConfigTab1" );
+ m_criteriaTab->insertTab( m_tab1, i18n("Report"), 0 );
+
+ if ( m_initialState.reportType() == MyMoneyReport::ePivotTable )
+ {
+ m_tab2 = new kMyMoneyReportConfigTab2Decl( m_criteriaTab, "kMyMoneyReportConfigTab2" );
+ m_criteriaTab->insertTab( m_tab2, i18n( "Rows/Columns"), 1 );
+ connect(m_tab2->m_comboRows, SIGNAL(highlighted(int)), this, SLOT(slotRowTypeChanged(int)));
+ connect(m_tab2->m_comboColumns, SIGNAL(activated(int)), this, SLOT(slotColumnTypeChanged(int)));
+ //control the state of the includeTransfer check
+ connect(m_categoriesView, SIGNAL(stateChanged()), this, SLOT(slotUpdateCheckTransfers()));
+
+#ifdef HAVE_KDCHART
+ m_tabChart = new kMyMoneyReportConfigTabChartDecl( m_criteriaTab, "kMyMoneyReportConfigTabChart" );
+ m_criteriaTab->insertTab( m_tabChart, i18n( "Chart"), 2 );
+#endif
+ }
+ else if ( m_initialState.reportType() == MyMoneyReport::eQueryTable )
+ {
+ // eInvestmentHoldings is a special-case report, and you cannot configure the
+ // rows & columns of that report.
+ if ( m_initialState.rowType() < MyMoneyReport::eAccountByTopAccount )
+ {
+ m_tab3 = new kMyMoneyReportConfigTab3Decl( m_criteriaTab, "kMyMoneyReportConfigTab3" );
+ m_criteriaTab->insertTab( m_tab3, i18n("Rows/Columns"), 1 );
+ }
+ }
+
+ m_criteriaTab->showPage( m_tab1 );
+ m_criteriaTab->setMinimumSize( 500,200 );
+
+ QValueList<MyMoneyBudget> list = MyMoneyFile::instance()->budgetList();
+ QValueList<MyMoneyBudget>::const_iterator it_b;
+ for(it_b = list.begin(); it_b != list.end(); ++it_b) {
+ m_budgets.push_back(*it_b);
+ }
+
+ //
+ // Now set up the widgets with proper values
+ //
+ slotReset();
+}
+
+KReportConfigurationFilterDlg::~KReportConfigurationFilterDlg()
+{
+}
+
+void KReportConfigurationFilterDlg::slotSearch(void)
+{
+ // setup the filter from the dialog widgets
+ setupFilter();
+
+ // Copy the m_filter over to the filter part of m_currentConfig.
+ m_currentState.assignFilter(m_filter);
+
+ // Then extract the report properties
+ m_currentState.setName( m_tab1->m_editName->text() );
+ m_currentState.setComment( m_tab1->m_editComment->text() );
+ m_currentState.setConvertCurrency( m_tab1->m_checkCurrency->isChecked() );
+ m_currentState.setFavorite( m_tab1->m_checkFavorite->isChecked() );
+
+ if ( m_tab2 )
+ {
+ MyMoneyReport::EDetailLevel dl[4] = { MyMoneyReport::eDetailAll, MyMoneyReport::eDetailTop, MyMoneyReport::eDetailGroup, MyMoneyReport::eDetailTotal };
+
+ m_currentState.setDetailLevel( dl[m_tab2->m_comboDetail->currentItem()] );
+
+ // modify the rowtype only if the widget is enabled
+ if(m_tab2->m_comboRows->isEnabled()) {
+ MyMoneyReport::ERowType rt[2] = { MyMoneyReport::eExpenseIncome, MyMoneyReport::eAssetLiability };
+ m_currentState.setRowType( rt[m_tab2->m_comboRows->currentItem()] );
+ }
+
+ m_currentState.setShowingRowTotals(false);
+ if(m_tab2->m_comboRows->currentItem() == 0)
+ m_currentState.setShowingRowTotals(m_tab2->m_checkTotalColumn->isChecked());
+
+ MyMoneyReport::EColumnType ct[6] = { MyMoneyReport::eDays, MyMoneyReport::eWeeks, MyMoneyReport::eMonths, MyMoneyReport::eBiMonths, MyMoneyReport::eQuarters, MyMoneyReport::eYears };
+ bool dy[6] = { true, true, false, false, false, false };
+ m_currentState.setColumnType( ct[m_tab2->m_comboColumns->currentItem()] );
+
+ //TODO (Ace) This should be implicit in the call above. MMReport needs fixin'
+ m_currentState.setColumnsAreDays( dy[m_tab2->m_comboColumns->currentItem()] );
+
+ m_currentState.setIncludingSchedules( m_tab2->m_checkScheduled->isChecked() );
+
+ m_currentState.setIncludingTransfers( m_tab2->m_checkTransfers->isChecked() );
+
+ m_currentState.setIncludingUnusedAccounts( m_tab2->m_checkUnused->isChecked() );
+
+ if(m_tab2->m_comboBudget->isEnabled()) {
+ m_currentState.setBudget(m_budgets[m_tab2->m_comboBudget->currentItem()].id(), m_initialState.rowType() == MyMoneyReport::eBudgetActual);
+ } else {
+ m_currentState.setBudget(QString(), false);
+ }
+
+ //set moving average days
+ if(m_tab2->m_movingAverageDays->isEnabled()) {
+ m_currentState.setMovingAverageDays( m_tab2->m_movingAverageDays->value() );
+ }
+ }
+ else if ( m_tab3 )
+ {
+ MyMoneyReport::ERowType rtq[7] = { MyMoneyReport::eCategory, MyMoneyReport::eTopCategory, MyMoneyReport::ePayee, MyMoneyReport::eAccount, MyMoneyReport::eTopAccount, MyMoneyReport::eMonth, MyMoneyReport::eWeek };
+ m_currentState.setRowType( rtq[m_tab3->m_comboOrganizeBy->currentItem()] );
+
+ unsigned qc = MyMoneyReport::eQCnone;
+
+ if (m_currentState.queryColumns() & MyMoneyReport::eQCloan)
+ // once a loan report, always a loan report
+ qc = MyMoneyReport::eQCloan;
+
+ if ( m_tab3->m_checkNumber->isChecked() )
+ qc |= MyMoneyReport::eQCnumber;
+ if ( m_tab3->m_checkPayee->isChecked() )
+ qc |= MyMoneyReport::eQCpayee;
+ if ( m_tab3->m_checkCategory->isChecked() )
+ qc |= MyMoneyReport::eQCcategory;
+ if ( m_tab3->m_checkMemo->isChecked() )
+ qc |= MyMoneyReport::eQCmemo;
+ if ( m_tab3->m_checkAccount->isChecked() )
+ qc |= MyMoneyReport::eQCaccount;
+ if ( m_tab3->m_checkReconciled->isChecked() )
+ qc |= MyMoneyReport::eQCreconciled;
+ if ( m_tab3->m_checkAction->isChecked() )
+ qc |= MyMoneyReport::eQCaction;
+ if ( m_tab3->m_checkShares->isChecked() )
+ qc |= MyMoneyReport::eQCshares;
+ if ( m_tab3->m_checkPrice->isChecked() )
+ qc |= MyMoneyReport::eQCprice;
+ if( m_tab3->m_checkBalance->isChecked() )
+ qc |= MyMoneyReport::eQCbalance;
+
+ m_currentState.setQueryColumns(static_cast<MyMoneyReport::EQueryColumns>(qc));
+
+ m_currentState.setTax( m_tab3->m_checkTax->isChecked() );
+ m_currentState.setInvestmentsOnly( m_tab3->m_checkInvestments->isChecked() );
+ m_currentState.setLoansOnly( m_tab3->m_checkLoans->isChecked() );
+
+ m_currentState.setDetailLevel(m_tab3->m_checkHideSplitDetails->isChecked() ?
+ MyMoneyReport::eDetailNone : MyMoneyReport::eDetailAll);
+ }
+
+ if ( m_tabChart )
+ {
+ MyMoneyReport::EChartType ct[5] = { MyMoneyReport::eChartLine, MyMoneyReport::eChartBar, MyMoneyReport::eChartStackedBar, MyMoneyReport::eChartPie, MyMoneyReport::eChartRing };
+ m_currentState.setChartType( ct[m_tabChart->m_comboType->currentItem()] );
+
+ m_currentState.setChartGridLines( m_tabChart->m_checkGridLines->isChecked() );
+ m_currentState.setChartDataLabels( m_tabChart->m_checkValues->isChecked() );
+ m_currentState.setChartByDefault( m_tabChart->m_checkShowChart->isChecked() );
+ m_currentState.setChartLineWidth( m_tabChart->m_lineWidth->value() );
+ }
+
+ // setup the date lock
+ MyMoneyTransactionFilter::dateOptionE range = m_dateRange->currentItem();
+ m_currentState.setDateFilter(range);
+
+ done(true);
+}
+
+void KReportConfigurationFilterDlg::slotRowTypeChanged(int row)
+{
+ m_tab2->m_checkTotalColumn->setEnabled(row == 0);
+}
+
+void KReportConfigurationFilterDlg::slotColumnTypeChanged(int row)
+{
+ if(m_tab2->m_comboBudget->isEnabled() && row < 2) {
+ m_tab2->m_comboColumns->setCurrentItem(2);
+ }
+}
+
+void KReportConfigurationFilterDlg::slotReset(void)
+{
+ //
+ // Set up the widget from the initial filter
+ //
+ m_currentState = m_initialState;
+
+ //
+ // Report Properties
+ //
+
+ m_tab1->m_editName->setText( m_initialState.name() );
+ m_tab1->m_editComment->setText( m_initialState.comment() );
+ m_tab1->m_checkCurrency->setChecked( m_initialState.isConvertCurrency() );
+ m_tab1->m_checkFavorite->setChecked( m_initialState.isFavorite() );
+
+ if ( m_tab2 )
+ {
+ switch ( m_initialState.detailLevel() )
+ {
+ case MyMoneyReport::eDetailNone:
+ case MyMoneyReport::eDetailEnd:
+ case MyMoneyReport::eDetailAll:
+ m_tab2->m_comboDetail->setCurrentItem(0);
+ break;
+ case MyMoneyReport::eDetailTop:
+ m_tab2->m_comboDetail->setCurrentItem(1);
+ break;
+ case MyMoneyReport::eDetailGroup:
+ m_tab2->m_comboDetail->setCurrentItem(2);
+ break;
+ case MyMoneyReport::eDetailTotal:
+ m_tab2->m_comboDetail->setCurrentItem(3);
+ break;
+ }
+
+ switch(m_initialState.rowType()) {
+ case MyMoneyReport::eExpenseIncome:
+ case MyMoneyReport::eBudget:
+ case MyMoneyReport::eBudgetActual:
+ m_tab2->m_comboRows->setCurrentItem(0); // income / expense
+ break;
+ default:
+ m_tab2->m_comboRows->setCurrentItem(1); // asset / liability
+ break;
+ }
+ m_tab2->m_checkTotalColumn->setChecked(m_initialState.isShowingRowTotals());
+
+ slotRowTypeChanged(m_tab2->m_comboRows->currentItem());
+
+ if ( m_initialState.isColumnsAreDays() )
+ {
+ switch ( m_initialState.columnType() )
+ {
+ case MyMoneyReport::eNoColumns:
+ case MyMoneyReport::eDays:
+ m_tab2->m_comboColumns->setCurrentItem(0);
+ break;
+ case MyMoneyReport::eWeeks:
+ m_tab2->m_comboColumns->setCurrentItem(1);
+ break;
+ default:
+ break;
+ }
+ }
+ else
+ {
+ switch ( m_initialState.columnType() )
+ {
+ case MyMoneyReport::eNoColumns:
+ case MyMoneyReport::eMonths:
+ m_tab2->m_comboColumns->setCurrentItem(2);
+ break;
+ case MyMoneyReport::eBiMonths:
+ m_tab2->m_comboColumns->setCurrentItem(3);
+ break;
+ case MyMoneyReport::eQuarters:
+ m_tab2->m_comboColumns->setCurrentItem(4);
+ break;
+ case MyMoneyReport::eYears:
+ m_tab2->m_comboColumns->setCurrentItem(5);
+ break;
+ default:
+ break;
+ }
+ }
+
+ //load budgets combo
+ if(m_initialState.rowType() == MyMoneyReport::eBudget
+ || m_initialState.rowType() == MyMoneyReport::eBudgetActual) {
+ m_tab2->m_comboRows->setEnabled(false);
+ m_tab2->m_budgetFrame->setEnabled(!m_budgets.empty());
+ QValueVector<MyMoneyBudget>::const_iterator it_b;
+ int i = 0;
+ for(it_b = m_budgets.begin(); it_b != m_budgets.end(); ++it_b) {
+ m_tab2->m_comboBudget->insertItem((*it_b).name(), i);
+ //set the current selected item
+ if( (m_initialState.budget() == "Any" && (*it_b).budgetStart().year() == QDate::currentDate().year())
+ || m_initialState.budget() == (*it_b).id())
+ m_tab2->m_comboBudget->setCurrentItem(i);
+ i++;
+ }
+ }
+
+ //set moving average days spinbox
+ m_tab2->m_movingAverageDays->setEnabled( m_initialState.isIncludingMovingAverage() );
+ if(m_initialState.isIncludingMovingAverage() ) {
+ m_tab2->m_movingAverageDays->setValue( m_initialState.movingAverageDays() );
+ }
+
+ m_tab2->m_checkScheduled->setChecked( m_initialState.isIncludingSchedules() );
+ m_tab2->m_checkTransfers->setChecked( m_initialState.isIncludingTransfers() );
+ m_tab2->m_checkUnused->setChecked( m_initialState.isIncludingUnusedAccounts() );
+ }
+ else if ( m_tab3 )
+ {
+ switch ( m_initialState.rowType() )
+ {
+ case MyMoneyReport::eNoColumns:
+ case MyMoneyReport::eCategory:
+ m_tab3->m_comboOrganizeBy->setCurrentItem(0);
+ break;
+ case MyMoneyReport::eTopCategory:
+ m_tab3->m_comboOrganizeBy->setCurrentItem(1);
+ break;
+ case MyMoneyReport::ePayee:
+ m_tab3->m_comboOrganizeBy->setCurrentItem(2);
+ break;
+ case MyMoneyReport::eAccount:
+ m_tab3->m_comboOrganizeBy->setCurrentItem(3);
+ break;
+ case MyMoneyReport::eTopAccount:
+ m_tab3->m_comboOrganizeBy->setCurrentItem(4);
+ break;
+ case MyMoneyReport::eMonth:
+ m_tab3->m_comboOrganizeBy->setCurrentItem(5);
+ break;
+ case MyMoneyReport::eWeek:
+ m_tab3->m_comboOrganizeBy->setCurrentItem(6);
+ break;
+ default:
+ throw new MYMONEYEXCEPTION("KReportConfigurationFilterDlg::slotReset(): QueryTable report has invalid rowtype");
+ }
+
+ unsigned qc = m_initialState.queryColumns();
+ m_tab3->m_checkNumber->setChecked(qc & MyMoneyReport::eQCnumber);
+ m_tab3->m_checkPayee->setChecked(qc & MyMoneyReport::eQCpayee);
+ m_tab3->m_checkCategory->setChecked(qc & MyMoneyReport::eQCcategory);
+ m_tab3->m_checkMemo->setChecked(qc & MyMoneyReport::eQCmemo);
+ m_tab3->m_checkAccount->setChecked(qc & MyMoneyReport::eQCaccount);
+ m_tab3->m_checkReconciled->setChecked(qc & MyMoneyReport::eQCreconciled);
+ m_tab3->m_checkAction->setChecked(qc & MyMoneyReport::eQCaction);
+ m_tab3->m_checkShares->setChecked(qc & MyMoneyReport::eQCshares);
+ m_tab3->m_checkPrice->setChecked(qc & MyMoneyReport::eQCprice);
+ m_tab3->m_checkBalance->setChecked(qc & MyMoneyReport::eQCbalance);
+
+ m_tab3->m_checkTax->setChecked( m_initialState.isTax() );
+ m_tab3->m_checkInvestments->setChecked( m_initialState.isInvestmentsOnly() );
+ m_tab3->m_checkLoans->setChecked( m_initialState.isLoansOnly() );
+
+ m_tab3->m_checkHideSplitDetails->setChecked
+ (m_initialState.detailLevel() == MyMoneyReport::eDetailNone);
+ }
+
+ if ( m_tabChart )
+ {
+ switch( m_initialState.chartType() )
+ {
+ case MyMoneyReport::eChartNone:
+ case MyMoneyReport::eChartLine:
+ m_tabChart->m_comboType->setCurrentItem(0);
+ break;
+ case MyMoneyReport::eChartBar:
+ m_tabChart->m_comboType->setCurrentItem(1);
+ break;
+ case MyMoneyReport::eChartStackedBar:
+ m_tabChart->m_comboType->setCurrentItem(2);
+ break;
+ case MyMoneyReport::eChartPie:
+ m_tabChart->m_comboType->setCurrentItem(3);
+ break;
+ case MyMoneyReport::eChartRing:
+ m_tabChart->m_comboType->setCurrentItem(4);
+ break;
+ case MyMoneyReport::eChartEnd:
+ throw new MYMONEYEXCEPTION("KReportConfigurationFilterDlg::slotReset(): Report has invalid charttype");
+ }
+ m_tabChart->m_checkGridLines->setChecked(m_initialState.isChartGridLines());
+ m_tabChart->m_checkValues->setChecked(m_initialState.isChartDataLabels());
+ m_tabChart->m_checkShowChart->setChecked(m_initialState.isChartByDefault());
+ m_tabChart->m_lineWidth->setValue(m_initialState.chartLineWidth());
+ }
+
+ //
+ // Text Filter
+ //
+
+ QRegExp textfilter;
+ if ( m_initialState.textFilter(textfilter))
+ {
+ m_textEdit->setText(textfilter.pattern());
+ m_caseSensitive->setChecked(textfilter.caseSensitive());
+ m_regExp->setChecked(!textfilter.wildcard());
+ m_textNegate->setCurrentItem(m_initialState.isInvertingText());
+ }
+
+ //
+ // Type & State Filters
+ //
+
+ int type;
+ if ( m_initialState.firstType(type) )
+ m_typeBox->setCurrentItem(type);
+
+ int state;
+ if ( m_initialState.firstState(state) )
+ m_stateBox->setCurrentItem(state);
+
+ //
+ // Number Filter
+ //
+
+ QString nrFrom, nrTo;
+ if ( m_initialState.numberFilter(nrFrom, nrTo) )
+ {
+ if ( nrFrom == nrTo )
+ {
+ m_nrEdit->setEnabled(true);
+ m_nrFromEdit->setEnabled(false);
+ m_nrToEdit->setEnabled(false);
+ m_nrEdit->setText(nrFrom);
+ m_nrFromEdit->setText(QString());
+ m_nrToEdit->setText(QString());
+ m_nrButton->setChecked(true);
+ m_nrRangeButton->setChecked(false);
+ }
+ else
+ {
+ m_nrEdit->setEnabled(false);
+ m_nrFromEdit->setEnabled(true);
+ m_nrToEdit->setEnabled(false);
+ m_nrEdit->setText(QString());
+ m_nrFromEdit->setText(nrFrom);
+ m_nrToEdit->setText(nrTo);
+ m_nrButton->setChecked(false);
+ m_nrRangeButton->setChecked(true);
+ }
+ }
+ else
+ {
+ m_nrEdit->setEnabled(true);
+ m_nrFromEdit->setEnabled(false);
+ m_nrToEdit->setEnabled(false);
+ m_nrEdit->setText(QString());
+ m_nrFromEdit->setText(QString());
+ m_nrToEdit->setText(QString());
+ m_nrButton->setChecked(true);
+ m_nrRangeButton->setChecked(false);
+ }
+
+ //
+ // Amount Filter
+ //
+
+ MyMoneyMoney from, to;
+ if ( m_initialState.amountFilter(from,to) ) // bool getAmountFilter(MyMoneyMoney&,MyMoneyMoney&);
+ {
+ if ( from == to )
+ {
+ m_amountEdit->setEnabled(true);
+ m_amountFromEdit->setEnabled(false);
+ m_amountToEdit->setEnabled(false);
+ m_amountEdit->loadText(QString::number(from.toDouble()));
+ m_amountFromEdit->loadText(QString());
+ m_amountToEdit->loadText(QString());
+ m_amountButton->setChecked(true);
+ m_amountRangeButton->setChecked(false);
+ }
+ else
+ {
+ m_amountEdit->setEnabled(false);
+ m_amountFromEdit->setEnabled(true);
+ m_amountToEdit->setEnabled(true);
+ m_amountEdit->loadText(QString());
+ m_amountFromEdit->loadText(QString::number(from.toDouble()));
+ m_amountToEdit->loadText(QString::number(to.toDouble()));
+ m_amountButton->setChecked(false);
+ m_amountRangeButton->setChecked(true);
+ }
+ }
+ else
+ {
+ m_amountEdit->setEnabled(true);
+ m_amountFromEdit->setEnabled(false);
+ m_amountToEdit->setEnabled(false);
+ m_amountEdit->loadText(QString());
+ m_amountFromEdit->loadText(QString());
+ m_amountToEdit->loadText(QString());
+ m_amountButton->setChecked(true);
+ m_amountRangeButton->setChecked(false);
+ }
+
+ //
+ // Payees Filter
+ //
+
+ QStringList payees;
+ if ( m_initialState.payees(payees) )
+ {
+ if ( payees.empty() )
+ {
+ m_emptyPayeesButton->setChecked(true);
+ }
+ else
+ {
+ selectAllItems(m_payeesView, false);
+ selectItems(m_payeesView,payees,true);
+ }
+ }
+ else
+ {
+ selectAllItems(m_payeesView, true);
+ }
+
+ //
+ // Accounts Filter
+ //
+
+ QStringList accounts;
+ if ( m_initialState.accounts(accounts) )
+ {
+ m_accountsView->selectAllItems(false);
+ m_accountsView->selectItems(accounts,true);
+ }
+ else
+ m_accountsView->selectAllItems(true);
+
+ //
+ // Categories Filter
+ //
+
+ if ( m_initialState.categories(accounts) )
+ {
+ m_categoriesView->selectAllItems(false);
+ m_categoriesView->selectItems(accounts,true);
+ }
+ else
+ m_categoriesView->selectAllItems(true);
+
+ //
+ // Date Filter
+ //
+
+ // the following call implies a call to slotUpdateSelections,
+ // that's why we call it last
+
+ m_initialState.updateDateFilter();
+ QDate dateFrom, dateTo;
+ if ( m_initialState.dateFilter( dateFrom, dateTo ) )
+ {
+ if(m_initialState.isUserDefined()) {
+ m_dateRange->setCurrentItem(MyMoneyTransactionFilter::userDefined);
+ m_fromDate->setDate(dateFrom);
+ m_toDate->setDate(dateTo);
+ } else {
+ m_fromDate->setDate(dateFrom);
+ m_toDate->setDate(dateTo);
+ KFindTransactionDlg::slotDateChanged();
+ }
+ }
+ else
+ {
+ m_dateRange->setCurrentItem(MyMoneyTransactionFilter::allDates);
+ slotDateRangeChanged(MyMoneyTransactionFilter::allDates);
+ }
+
+ slotRightSize();
+}
+
+void KReportConfigurationFilterDlg::slotDateChanged(void)
+{
+ if(m_dateRange->currentItem() != MyMoneyTransactionFilter::userDefined) {
+ KFindTransactionDlg::slotDateChanged();
+ }
+ slotUpdateSelections();
+}
+
+void KReportConfigurationFilterDlg::slotShowHelp(void)
+{
+ kapp->invokeHelp("details.reports.config");
+}
+
+//TODO Fix the reports and engine to include transfers even if categories are filtered - bug #1523508
+void KReportConfigurationFilterDlg::slotUpdateCheckTransfers(void)
+{
+ if(!m_categoriesView->allItemsSelected()) {
+ m_tab2->m_checkTransfers->setChecked(false);
+ m_tab2->m_checkTransfers->setDisabled(true);
+ } else {
+ m_tab2->m_checkTransfers->setEnabled(true);
+ }
+}
+
+#include "kreportconfigurationfilterdlg.moc"
diff --git a/kmymoney2/dialogs/kreportconfigurationfilterdlg.h b/kmymoney2/dialogs/kreportconfigurationfilterdlg.h
new file mode 100644
index 0000000..56e398d
--- /dev/null
+++ b/kmymoney2/dialogs/kreportconfigurationfilterdlg.h
@@ -0,0 +1,78 @@
+/***************************************************************************
+ kreportconfigurationdlg.h - description
+ -------------------
+ begin : Mon Jun 21 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ Ace Jones <ace.j@hotpop.com>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KREPORTCONFIGURATIONFILTERDLG_H
+#define KREPORTCONFIGURATIONFILTERDLG_H
+
+#include <qvaluevector.h>
+
+#include "../dialogs/kfindtransactiondlg.h"
+#include "../mymoney/mymoneyreport.h"
+#include "../mymoney/mymoneybudget.h"
+
+class kMyMoneyReportConfigTab1Decl;
+class kMyMoneyReportConfigTab2Decl;
+class kMyMoneyReportConfigTab3Decl;
+class kMyMoneyReportConfigTabChartDecl;
+class MyMoneyBudget;
+
+/**
+ * @author Ace Jones
+ */
+class KReportConfigurationFilterDlg : public KFindTransactionDlg
+{
+Q_OBJECT
+public:
+ KReportConfigurationFilterDlg(MyMoneyReport report, QWidget *parent = 0, const char *name = 0);
+ ~KReportConfigurationFilterDlg();
+
+ const MyMoneyReport& getConfig(void) const { return m_currentState; }
+
+protected:
+ kMyMoneyReportConfigTab1Decl* m_tab1;
+ kMyMoneyReportConfigTab2Decl* m_tab2;
+ kMyMoneyReportConfigTab3Decl* m_tab3;
+ kMyMoneyReportConfigTabChartDecl* m_tabChart;
+
+ MyMoneyReport m_initialState;
+ MyMoneyReport m_currentState;
+
+protected slots:
+ void slotRowTypeChanged(int);
+ void slotColumnTypeChanged(int);
+ void slotReset(void);
+ void slotSearch(void);
+ void slotShowHelp(void);
+ /**
+ * This is to enable/disable the check to Include Transfers based on whether Categories are filtered or not.
+ * This is because if Categories are filtered, transfers will not be included anyway
+ */
+ void slotUpdateCheckTransfers(void);
+
+ virtual void slotDateChanged(void);
+
+private:
+ QValueVector<MyMoneyBudget> m_budgets;
+};
+
+#endif
diff --git a/kmymoney2/dialogs/ksecuritylisteditor.cpp b/kmymoney2/dialogs/ksecuritylisteditor.cpp
new file mode 100644
index 0000000..ee4c486
--- /dev/null
+++ b/kmymoney2/dialogs/ksecuritylisteditor.cpp
@@ -0,0 +1,220 @@
+/***************************************************************************
+ ksecuritylisteditor.cpp - description
+ -------------------
+ begin : Wed Dec 16 2004
+ copyright : (C) 2004 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qcheckbox.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kpushbutton.h>
+#include <klistview.h>
+#include <kguiitem.h>
+#include <kiconloader.h>
+#include <kglobal.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "ksecuritylisteditor.h"
+
+#include "../mymoney/mymoneysecurity.h"
+#include "../mymoney/mymoneyfile.h"
+#include "../dialogs/knewinvestmentwizard.h"
+
+#include "../kmymoneyutils.h"
+
+#define ID_COL 0
+#define TYPE_COL 1
+#define NAME_COL 2
+#define SYMBOL_COL 3
+#define MARKET_COL 4
+#define CURR_COL 5
+#define ACCFRACT_COL 6
+#define CASHFRACT_COL 7
+
+#define CURRENCY_MARKET QString("ISO 4217")
+
+KSecurityListEditor::KSecurityListEditor(QWidget *parent, const char *name) :
+ KSecurityListEditorDecl(parent, name)
+{
+ m_listView->setColumnWidth(ID_COL, 0);
+ m_listView->setColumnWidthMode(NAME_COL, QListView::Maximum);
+ m_listView->setColumnWidthMode(ID_COL, QListView::Manual);
+ m_listView->setColumnAlignment(CURR_COL, Qt::AlignHCenter);
+ m_listView->setMultiSelection(false);
+ m_listView->setAllColumnsShowFocus(true);
+
+ KIconLoader *il = KGlobal::iconLoader();
+ KGuiItem removeButtenItem( i18n( "&Delete" ),
+ QIconSet(il->loadIcon("delete", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Delete this entry"),
+ i18n("Remove this security item from the file"));
+ m_deleteButton->setGuiItem(removeButtenItem);
+
+ KGuiItem addButtenItem( i18n( "&Add" ),
+ QIconSet(il->loadIcon("file_new", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Add a new entry"),
+ i18n("Create a new security entry."));
+ m_addButton->setGuiItem(addButtenItem);
+
+ KGuiItem editButtenItem( i18n( "&Edit" ),
+ QIconSet(il->loadIcon("edit", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Modify the selected entry"),
+ i18n("Change the security information of the selected entry."));
+ m_editButton->setGuiItem(editButtenItem);
+
+ KGuiItem okButtenItem( i18n("&Close" ),
+ QIconSet(il->loadIcon("button_ok", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Close the dialog"),
+ i18n("Use this to close the dialog and return to the application."));
+ m_closeButton->setGuiItem(okButtenItem);
+
+ connect(m_closeButton, SIGNAL(clicked()), this, SLOT(reject()));
+ connect(m_showCurrencyButton, SIGNAL(toggled(bool)), this, SLOT(slotLoadList()));
+ connect(m_listView, SIGNAL(selectionChanged()), this, SLOT(slotUpdateButtons()));
+
+ connect(m_editButton, SIGNAL(clicked()), this, SLOT(slotEditSecurity()));
+ connect(m_deleteButton, SIGNAL(clicked()), this, SLOT(slotDeleteSecurity()));
+
+ // FIXME for now, the only way to add a new security is to add a new investment
+ m_addButton->hide();
+
+ slotLoadList();
+}
+
+KSecurityListEditor::~KSecurityListEditor()
+{
+}
+
+void KSecurityListEditor::slotLoadList(void)
+{
+ m_listView->clear();
+
+ QValueList<MyMoneySecurity> list = MyMoneyFile::instance()->securityList();
+ QValueList<MyMoneySecurity>::ConstIterator it;
+ if(m_showCurrencyButton->isChecked()) {
+ list += MyMoneyFile::instance()->currencyList();
+ }
+ for(it = list.begin(); it != list.end(); ++it) {
+ KListViewItem* newItem = new KListViewItem(m_listView, QString((*it).id()));
+ fillItem(newItem, *it);
+
+ }
+ slotUpdateButtons();
+}
+
+void KSecurityListEditor::fillItem(QListViewItem* item, const MyMoneySecurity& security)
+{
+ QString market = security.tradingMarket();
+ MyMoneySecurity tradingCurrency;
+ if(security.isCurrency())
+ market = CURRENCY_MARKET;
+ else
+ tradingCurrency = MyMoneyFile::instance()->security(security.tradingCurrency());
+
+ item->setText(TYPE_COL, KMyMoneyUtils::securityTypeToString(security.securityType()));
+ item->setText(NAME_COL, security.name());
+ item->setText(SYMBOL_COL, security.tradingSymbol());
+ item->setText(MARKET_COL, market);
+ item->setText(CURR_COL, tradingCurrency.tradingSymbol());
+ item->setText(ACCFRACT_COL, QString::number(security.smallestAccountFraction()));
+
+ // smallestCashFraction is only applicable for currencies
+ if(security.isCurrency())
+ item->setText(CASHFRACT_COL, QString::number(security.smallestCashFraction()));
+}
+
+void KSecurityListEditor::slotUpdateButtons(void)
+{
+ QListViewItem* item = m_listView->selectedItem();
+
+ if(item) {
+ MyMoneySecurity security = MyMoneyFile::instance()->security(item->text(ID_COL).latin1());
+ m_editButton->setEnabled(item->text(MARKET_COL) != CURRENCY_MARKET);
+ m_deleteButton->setEnabled(!MyMoneyFile::instance()->isReferenced(security));
+
+ } else {
+ m_editButton->setEnabled(false);
+ m_deleteButton->setEnabled(false);
+ }
+}
+
+void KSecurityListEditor::slotEditSecurity(void)
+{
+ QListViewItem* item = m_listView->selectedItem();
+ if(item) {
+ MyMoneySecurity security = MyMoneyFile::instance()->security(item->text(ID_COL).latin1());
+
+ KNewInvestmentWizard dlg(security, this, "KNewInvestmentWizard");
+ if(dlg.exec() == QDialog::Accepted) {
+ dlg.createObjects(QString());
+ security = MyMoneyFile::instance()->security(item->text(ID_COL).latin1());
+ fillItem(item, security);
+ }
+ }
+}
+
+void KSecurityListEditor::slotDeleteSecurity(void)
+{
+ QListViewItem* item = m_listView->selectedItem();
+ if(item) {
+ MyMoneySecurity security = MyMoneyFile::instance()->security(item->text(ID_COL).latin1());
+ QString msg;
+ QString dontAsk;
+ if(security.isCurrency()) {
+ msg = QString("<p>") + i18n("Do you really want to remove the currency <b>%1</b> from the file?</p><i>Note: It is currently not supported to add currencies.</i>").arg(security.name());
+ dontAsk = "DeleteCurrency";
+ } else {
+ msg = QString("<p>") + i18n("Do you really want to remove the %1 <b>%2</b> from the file?").arg(KMyMoneyUtils::securityTypeToString(security.securityType())).arg(security.name());
+ dontAsk = "DeleteSecurity";
+ }
+ if(KMessageBox::questionYesNo(this, msg, i18n("Delete security"), KStdGuiItem::yes(), KStdGuiItem::no(), dontAsk) == KMessageBox::Yes) {
+ MyMoneyFileTransaction ft;
+ try {
+ if(security.isCurrency())
+ MyMoneyFile::instance()->removeCurrency(security);
+ else
+ MyMoneyFile::instance()->removeSecurity(security);
+ ft.commit();
+ slotLoadList();
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+ }
+ }
+}
+
+// Make sure, that these definitions are only used within this file
+// this does not seem to be necessary, but when building RPMs the
+// build option 'final' is used and all CPP files are concatenated.
+// So it could well be, that in another CPP file these definitions
+// are also used.
+#undef ID_COL
+#undef TYPE_COL
+#undef NAME_COL
+#undef SYMBOL_COL
+#undef MARKET_COL
+#undef CURR_COL
+#undef ACCFRACT_COL
+#undef CASHFRACT_COL
+
+#include "ksecuritylisteditor.moc"
diff --git a/kmymoney2/dialogs/ksecuritylisteditor.h b/kmymoney2/dialogs/ksecuritylisteditor.h
new file mode 100644
index 0000000..050edbe
--- /dev/null
+++ b/kmymoney2/dialogs/ksecuritylisteditor.h
@@ -0,0 +1,58 @@
+/***************************************************************************
+ ksecuritylisteditor.h - description
+ -------------------
+ begin : Wed Dec 16 2004
+ copyright : (C) 2004 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KSECURITYLISTEDITOR_H
+#define KSECURITYLISTEDITOR_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+class QListViewItem;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "ksecuritylisteditordecl.h"
+
+#include "../mymoney/mymoneysecurity.h"
+
+/**
+ * @author Thomas Baumgart
+ */
+
+class KSecurityListEditor : public KSecurityListEditorDecl
+{
+ Q_OBJECT
+public:
+ KSecurityListEditor(QWidget *parent, const char* name = 0);
+ ~KSecurityListEditor();
+
+protected slots:
+ void slotLoadList(void);
+ void slotUpdateButtons(void);
+ void slotEditSecurity(void);
+ void slotDeleteSecurity(void);
+
+protected:
+ void fillItem(QListViewItem* item, const MyMoneySecurity& security);
+
+};
+
+#endif
diff --git a/kmymoney2/dialogs/ksecuritylisteditordecl.ui b/kmymoney2/dialogs/ksecuritylisteditordecl.ui
new file mode 100644
index 0000000..cbb9999
--- /dev/null
+++ b/kmymoney2/dialogs/ksecuritylisteditordecl.ui
@@ -0,0 +1,262 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>KSecurityListEditorDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KSecurityListEditorDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>722</width>
+ <height>453</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Security List Editor</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KListView">
+ <column>
+ <property name="text">
+ <string>ID</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Type</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Symbol</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Market</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Currency</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Fraction</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Cash Fraction</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>m_listView</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>51</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_addButton</cstring>
+ </property>
+ <property name="text">
+ <string>Add...</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_editButton</cstring>
+ </property>
+ <property name="text">
+ <string>Edit...</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_deleteButton</cstring>
+ </property>
+ <property name="text">
+ <string>Delete...</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>110</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_showCurrencyButton</cstring>
+ </property>
+ <property name="text">
+ <string>Show national currencies</string>
+ </property>
+ </widget>
+ <widget class="Line">
+ <property name="name">
+ <cstring>line1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>91</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_closeButton</cstring>
+ </property>
+ <property name="text">
+ <string>Close</string>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ <property name="flat">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/kselectdatabasedlg.cpp b/kmymoney2/dialogs/kselectdatabasedlg.cpp
new file mode 100644
index 0000000..941712c
--- /dev/null
+++ b/kmymoney2/dialogs/kselectdatabasedlg.cpp
@@ -0,0 +1,232 @@
+/***************************************************************************
+ kselectdatabasedlg.cpp
+ -------------------
+ copyright : (C) 2005 by Tony Bloomfield
+ author : Tony Bloomfield
+ email : tonybloom@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include <unistd.h>
+#include <sys/types.h>
+#include <pwd.h>
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlayout.h>
+#include <qpushbutton.h>
+#include <qapplication.h>
+#include <qsqldatabase.h>
+#include <qfiledialog.h>
+#include <qstatusbar.h>
+#include <qcheckbox.h>
+#include <qcolor.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kapplication.h>
+#include <kurlrequester.h>
+#include <ktextbrowser.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kselectdatabasedlg.h"
+
+KSelectDatabaseDlg::KSelectDatabaseDlg(QWidget *parent, const char *name)
+ : KSelectDatabaseDlgDecl(parent, name) {
+ listDrivers->clear();
+ // list drivers supported by KMM
+ QMap<QString, QString> map = m_map.driverMap();
+ // list drivers installed on system
+ QStringList list = QSqlDatabase::drivers();
+ if (list.count() == 0) {
+ KMessageBox::error (0, i18n("There are no Qt SQL drivers installed in your system.\n"
+ "Please consult documentation for your distro, or visit the Qt web site (www.trolltech.com)"
+ " and search for SQL drivers."),
+ "");
+ setError();
+ } else {
+ QStringList::Iterator it = list.begin();
+ while(it != list.end()) {
+ QString dname = *it;
+ if (map.keys().contains(dname)) { // only display if driver is supported
+ dname = dname + " - " + map[dname];
+ listDrivers->insertItem (dname);
+ }
+ it++;
+ }
+ textDbName->setText ("KMyMoney");
+ textHostName->setText ("localhost");
+ textUserName->setText("");
+ struct passwd * pwd = getpwuid(geteuid());
+ if (pwd != 0)
+ textUserName->setText (QString(pwd->pw_name));
+ textPassword->setText ("");
+ m_requiredFields = new kMandatoryFieldGroup(this);
+ m_requiredFields->setOkButton(buttonOK);
+ m_requiredFields->add(listDrivers);
+ m_requiredFields->add(textDbName);
+ connect (listDrivers, SIGNAL(clicked(QListBoxItem *)),
+ this, SLOT(slotDriverSelected(QListBoxItem *)));
+ connect (buttonSQL, SIGNAL(clicked()), this, SLOT(slotGenerateSQL()));
+ connect (buttonOK, SIGNAL(clicked()), this, SLOT(accept()));
+ checkPreLoad->setChecked(false);
+ buttonSQL->setEnabled(true);
+ }
+ connect (buttonHelp, SIGNAL(clicked()), this, SLOT(slotHelp()));
+ // ensure a driver gets selected; pre-select if only one
+ listDrivers->clearSelection();
+ if (listDrivers->count() == 1) {
+ listDrivers->setSelected(0, true);
+ slotDriverSelected(listDrivers->item(0));
+ }
+}
+
+KSelectDatabaseDlg::KSelectDatabaseDlg(KURL openURL, QWidget *parent, const char *name)
+ : KSelectDatabaseDlgDecl(parent, name) {
+ // here we are re-opening a database from a URL
+ // probably taken from the last-used or recent file list
+ listDrivers->clear();
+ // check that the SQL driver is still available
+ QString driverName = openURL.queryItem("driver");
+ // list drivers installed on system
+ QStringList list = QSqlDatabase::drivers();
+ // list drivers supported by KMM
+ QMap<QString, QString> map = m_map.driverMap();
+ if (!list.contains(driverName)) {
+ KMessageBox::error (0, i18n("Qt SQL driver %1 is no longer installed on your system").arg(driverName),
+ "");
+ setError();
+ } else if (!map.contains(driverName)) {
+ KMessageBox::error (0, i18n("Qt SQL driver %1 is not suported").arg(driverName),
+ "");
+ setError();
+ } else {
+ // fill in the fixed data from the URL
+ listDrivers->insertItem (QString(driverName + " - " + map[driverName]));
+ listDrivers->setSelected(0,true);
+ QString dbName = openURL.path().right(openURL.path().length() - 1); // remove separator slash
+ textDbName->setText (dbName);
+ textHostName->setText (openURL.host());
+ textUserName->setText(openURL.user());
+ // disable all but the password field, coz that's why we're here
+ textDbName->setEnabled(false);
+ listDrivers->setEnabled(false);
+ textHostName->setEnabled(false);
+ textUserName->setEnabled(false);
+ textPassword->setEnabled(true);
+ textPassword->setFocus();
+ buttonSQL->setEnabled(false);
+ // set password as required
+ m_requiredFields = new kMandatoryFieldGroup(this);
+ m_requiredFields->add(textPassword);
+ m_requiredFields->setOkButton(buttonOK);
+
+ connect (buttonOK, SIGNAL(clicked()), this, SLOT(accept()));
+ checkPreLoad->setChecked(false);
+ }
+ connect (buttonHelp, SIGNAL(clicked()), this, SLOT(slotHelp()));
+
+}
+
+KSelectDatabaseDlg::~KSelectDatabaseDlg() {
+ if (m_requiredFields != 0) delete m_requiredFields;
+}
+
+void KSelectDatabaseDlg::setMode (int openMode) {
+ m_mode = openMode;
+ checkPreLoad->setEnabled (openMode == IO_ReadWrite);
+}
+
+const KURL KSelectDatabaseDlg::selectedURL() {
+ KURL url;
+ url.setProtocol("sql");
+ url.setUser(textUserName->text());
+ url.setPass(textPassword->text());
+ url.setHost(textHostName->text());
+ url.setPath("/" + textDbName->text());
+ QString qs = QString("driver=%1")
+ .arg(listDrivers->currentText().section (' ', 0, 0));
+ if (checkPreLoad->isChecked()) qs.append("&options=loadAll");
+ if (!textPassword->text().isEmpty()) qs.append("&secure=yes");
+ url.setQuery(qs);
+ return (url);
+}
+
+void KSelectDatabaseDlg::slotDriverSelected (QListBoxItem *driver) {
+ databaseTypeE dbType = m_map.driverToType(driver->text().section(' ', 0, 0));
+ if (!m_map.isTested(dbType)) {
+ int rc = KMessageBox::warningContinueCancel (0,
+ i18n("Qt SQL driver %1 has not been fully tested in a KMyMoney environment. Please make sure you have adequate backups of your data. Please report any problems to the developer mailing list at kmymoney2-developer@lists.sourceforge.net")
+ .arg(driver->text()),
+ "");
+ if (rc == KMessageBox::Cancel) {
+ listDrivers->clearSelection();
+ return;
+ }
+ }
+
+ if (dbType == Sqlite3){
+ QString dbName = QFileDialog::getOpenFileName(
+ "",
+ i18n("SQLite files (*.sql);; All files (*.*)"),
+ this,
+ "",
+ i18n("Select SQLite file"));
+ if (dbName.isNull()) {
+ listDrivers->setSelected(driver, false);
+ return;
+ } else {
+ textDbName->setText(dbName);
+ }
+ // sql databases do not react to host/user/password; file system permissions must be used
+ textHostName->setEnabled (false);
+ textUserName->setEnabled (false);
+ textPassword->setEnabled(false);
+ } else {
+ textUserName->setEnabled (true); // but not host
+ textHostName->setEnabled (true);
+ textPassword->setEnabled(true);
+ }
+}
+
+void KSelectDatabaseDlg::slotGenerateSQL () {
+ QString fileName = QFileDialog::getSaveFileName(
+ "",
+ i18n("All files (*.*)"),
+ this,
+ "",
+ i18n("Select output file"));
+ if (fileName == "") return;
+ QFile out(fileName);
+ if (!out.open(IO_WriteOnly)) return;
+ QTextStream s(&out);
+ MyMoneyDbDef db;
+ s << db.generateSQL(listDrivers->currentText().section (' ', 0, 0));
+ out.close();
+}
+
+void KSelectDatabaseDlg::slotHelp(void) {
+ kapp->invokeHelp("details.database.selectdatabase");
+}
+
+void KSelectDatabaseDlg::setError() {
+ buttonOK->setEnabled(false);
+ buttonSQL->setEnabled(false);
+ m_requiredFields = 0;
+}
+
+#include "kselectdatabasedlg.moc"
diff --git a/kmymoney2/dialogs/kselectdatabasedlg.h b/kmymoney2/dialogs/kselectdatabasedlg.h
new file mode 100644
index 0000000..bc5a782
--- /dev/null
+++ b/kmymoney2/dialogs/kselectdatabasedlg.h
@@ -0,0 +1,64 @@
+/***************************************************************************
+ kselectdatabase.h
+ -------------------
+ copyright : (C) 2005 by Tony Bloomfield
+ author : Tony Bloomfield
+ email : tonybloom@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KSELECTDATABASEDLG_H
+#define KSELECTDATABASEDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qlistbox.h>
+#include <qlineedit.h>
+#include <qlabel.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+#include <kurl.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include "kselectdatabasedlgdecl.h"
+#include "../mymoney/storage/mymoneystoragesql.h"
+#include "kmymoney/kguiutils.h"
+
+class KSelectDatabaseDlg : public KSelectDatabaseDlgDecl
+{
+Q_OBJECT
+public:
+ KSelectDatabaseDlg(QWidget *parent = 0, const char *name = 0);
+ KSelectDatabaseDlg(KURL openURL, QWidget *parent = 0, const char *name = 0);
+ ~KSelectDatabaseDlg();
+ /** Set the mode of this dialog
+ * @param - openMode (IO_ReadWrite = open database; IO_WriteOnly = saveas database)
+ **/
+ void setMode(int openMode);
+ /** Return URL of database
+ * @return - pseudo-URL of database selected by user
+ **/
+ const KURL selectedURL();
+
+public slots:
+ void slotDriverSelected(QListBoxItem *driver);
+ void slotHelp();
+ void slotGenerateSQL();
+private:
+ void setError();
+ int m_mode;
+ MyMoneyDbDrivers m_map;
+ kMandatoryFieldGroup* m_requiredFields;
+};
+
+#endif
diff --git a/kmymoney2/dialogs/kselectdatabasedlgdecl.ui b/kmymoney2/dialogs/kselectdatabasedlgdecl.ui
new file mode 100644
index 0000000..4736fb7
--- /dev/null
+++ b/kmymoney2/dialogs/kselectdatabasedlgdecl.ui
@@ -0,0 +1,250 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KSelectDatabaseDlgDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KSelectDatabaseDlgDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>449</width>
+ <height>640</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>KMyMoney - Select Database</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox6</cstring>
+ </property>
+ <property name="title">
+ <string>CAUTION!</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel1</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>10</pointsize>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>&lt;font color="#ff2727"&gt;This software is still in an experimental stage, and there are still some known response time problems. Please be patient; we are working on them.
+As always, please make sure you have adequate backups of your data.&lt;/font&gt;</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox1</cstring>
+ </property>
+ <property name="title">
+ <string>Database Type</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QListBox">
+ <property name="name">
+ <cstring>listDrivers</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox2</cstring>
+ </property>
+ <property name="title">
+ <string>Database Name</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>textDbName</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox3</cstring>
+ </property>
+ <property name="title">
+ <string>Host Name</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>textHostName</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox4</cstring>
+ </property>
+ <property name="title">
+ <string>User Name</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>textUserName</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBoxPassword</cstring>
+ </property>
+ <property name="title">
+ <string>Password</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>textPassword</cstring>
+ </property>
+ <property name="echoMode">
+ <enum>Password</enum>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>checkPreLoad</cstring>
+ </property>
+ <property name="text">
+ <string>Preload &amp;all data</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonHelp</cstring>
+ </property>
+ <property name="text">
+ <string>Help</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonSQL</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Generate SQL</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>31</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOK</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>Ca&amp;ncel</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOK</sender>
+ <signal>released()</signal>
+ <receiver>KSelectDatabaseDlgDecl</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>released()</signal>
+ <receiver>KSelectDatabaseDlgDecl</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/kselecttransactionsdlg.cpp b/kmymoney2/dialogs/kselecttransactionsdlg.cpp
new file mode 100644
index 0000000..7a87dc8
--- /dev/null
+++ b/kmymoney2/dialogs/kselecttransactionsdlg.cpp
@@ -0,0 +1,178 @@
+/***************************************************************************
+ kselecttransactionsdlg.cpp
+ -------------------
+ begin : Wed May 16 2007
+ copyright : (C) 2007 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kpushbutton.h>
+#include <kstdguiitem.h>
+#include <kapplication.h>
+#include <kactivelabel.h>
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/mymoneytransaction.h>
+#include <kmymoney/kmymoneyglobalsettings.h>
+
+#include "kmergetransactionsdlg.h"
+
+KSelectTransactionsDlg::KSelectTransactionsDlg(const MyMoneyAccount& _account, QWidget* parent, const char* name) :
+ KSelectTransactionsDlgDecl(parent, name),
+ m_account(_account)
+{
+ // setup descriptive texts
+ setCaption(i18n("Select Transaction"));
+ m_description->setText(i18n("Select a transaction and press the OK button or use Cancel to select none."));
+
+ // clear current register contents
+ m_register->clear();
+
+ // no selection possible
+ m_register->setSelectionMode(QTable::Single);
+
+ // setup header font
+ QFont font = KMyMoneyGlobalSettings::listHeaderFont();
+ QFontMetrics fm( font );
+ int height = fm.lineSpacing()+6;
+ m_register->horizontalHeader()->setMinimumHeight(height);
+ m_register->horizontalHeader()->setMaximumHeight(height);
+ m_register->horizontalHeader()->setFont(font);
+
+ // setup cell font
+ font = KMyMoneyGlobalSettings::listCellFont();
+ m_register->setFont(font);
+
+ // ... setup the register columns ...
+ m_register->setupRegister(m_account);
+
+ // setup buttons
+ m_helpButton->setGuiItem(KStdGuiItem::help());
+ buttonOk->setGuiItem(KStdGuiItem::ok());
+ buttonCancel->setGuiItem(KStdGuiItem::cancel());
+
+ // default is to need at least one transaction selected
+ buttonOk->setDisabled(true);
+
+ // catch some events from the register
+ m_register->installEventFilter(this);
+
+ connect(m_register, SIGNAL(selectionChanged(const KMyMoneyRegister::SelectedTransactions&)), this, SLOT(slotEnableOk(const KMyMoneyRegister::SelectedTransactions&)));
+ connect(m_register, SIGNAL(editTransaction()), this, SLOT(accept()));
+
+ connect(m_helpButton, SIGNAL(clicked()), this, SLOT(slotHelp()));
+}
+
+void KSelectTransactionsDlg::slotEnableOk(const KMyMoneyRegister::SelectedTransactions& list)
+{
+ buttonOk->setEnabled(list.count() != 0);
+}
+
+void KSelectTransactionsDlg::addTransaction(const MyMoneyTransaction& t)
+{
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = t.splits().begin(); it_s != t.splits().end(); ++it_s) {
+ if((*it_s).accountId() == m_account.id()) {
+ KMyMoneyRegister::Transaction* tr = KMyMoneyRegister::Register::transactionFactory(m_register, t, (*it_s), 0);
+ // force full detail display
+ tr->setNumRowsRegister(tr->numRowsRegister(true));
+ break;
+ }
+ }
+}
+
+int KSelectTransactionsDlg::exec(void)
+{
+ m_register->updateRegister(true);
+ m_register->updateContents();
+
+ m_register->setFocus();
+
+ return KSelectTransactionsDlgDecl::exec();
+}
+
+void KSelectTransactionsDlg::slotHelp(void)
+{
+ // kapp->invokeHelp("details.ledgers.match");
+}
+
+void KSelectTransactionsDlg::show(void)
+{
+ KSelectTransactionsDlgDecl::show();
+ m_register->resize(KMyMoneyRegister::DetailColumn);
+}
+
+void KSelectTransactionsDlg::resizeEvent(QResizeEvent* ev)
+{
+ // don't forget the resizer
+ KSelectTransactionsDlgDecl::resizeEvent(ev);
+
+ // resize the register
+ m_register->resize(KMyMoneyRegister::DetailColumn);
+}
+
+MyMoneyTransaction KSelectTransactionsDlg::transaction(void) const
+{
+ MyMoneyTransaction t;
+
+ QValueList<KMyMoneyRegister::RegisterItem*> list;
+ list = m_register->selectedItems();
+ if(list.count()) {
+ KMyMoneyRegister::Transaction* _t = dynamic_cast<KMyMoneyRegister::Transaction*>(list[0]);
+ if(_t)
+ t = _t->transaction();
+ }
+ return t;
+}
+
+bool KSelectTransactionsDlg::eventFilter(QObject* o, QEvent* e)
+{
+ bool rc = false;
+ QKeyEvent* k;
+
+ if(o == m_register) {
+ switch(e->type()) {
+ case QEvent::KeyPress:
+ k = dynamic_cast<QKeyEvent*>(e);
+ if((k->state() & Qt::KeyButtonMask) == 0) {
+ switch(k->key()) {
+ case Qt::Key_Return:
+ case Qt::Key_Enter:
+ if(buttonOk->isEnabled()) {
+ accept();
+ rc = true;
+ }
+ // tricky fall through here
+ default:
+ break;
+ }
+ }
+ // tricky fall through here
+ default:
+ break;
+ }
+ }
+ return rc;
+}
+
+#include "kselecttransactionsdlg.moc"
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/dialogs/kselecttransactionsdlg.h b/kmymoney2/dialogs/kselecttransactionsdlg.h
new file mode 100644
index 0000000..7bab9eb
--- /dev/null
+++ b/kmymoney2/dialogs/kselecttransactionsdlg.h
@@ -0,0 +1,73 @@
+/***************************************************************************
+ kselecttransactionsdlg.h
+ -------------------
+ begin : Wed May 16 2007
+ copyright : (C) 2007 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KSELECTTRANSACTIONSDLG_H
+#define KSELECTTRANSACTIONSDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+class QResizeEvent;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kdebug.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/register.h>
+#include <kmymoney/mymoneyaccount.h>
+
+#include "../dialogs/kselecttransactionsdlgdecl.h"
+
+class KSelectTransactionsDlg: public KSelectTransactionsDlgDecl
+{
+ Q_OBJECT
+public:
+ KSelectTransactionsDlg(const MyMoneyAccount& account, QWidget* parent = 0, const char* name = 0);
+
+ /**
+ * Adds the transaction @a t to the dialog
+ */
+ void addTransaction(const MyMoneyTransaction& t);
+ int exec(void);
+ void show(void);
+
+ MyMoneyTransaction transaction(void) const;
+
+ bool eventFilter(QObject* o, QEvent* e);
+
+public slots:
+ virtual void slotHelp();
+
+protected slots:
+ void slotEnableOk(const KMyMoneyRegister::SelectedTransactions& list);
+
+protected:
+ void resizeEvent(QResizeEvent* ev);
+
+private:
+ /**
+ * The account in which the transactions are displayed
+ */
+ MyMoneyAccount m_account;
+};
+
+#endif // KMERGETRANSACTIONSDLG_H
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/dialogs/kselecttransactionsdlgdecl.ui b/kmymoney2/dialogs/kselecttransactionsdlgdecl.ui
new file mode 100644
index 0000000..76d825b
--- /dev/null
+++ b/kmymoney2/dialogs/kselecttransactionsdlgdecl.ui
@@ -0,0 +1,174 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KSelectTransactionsDlgDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KSelectTransactionsDlgDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>794</width>
+ <height>456</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>xxx</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>m_description</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>xxx</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyRegister::Register">
+ <column>
+ <property name="text">
+ <string>Security</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Details</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>C</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Payment</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Deposit</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Quantity</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Price</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Value</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Balance</string>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>m_register</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>3</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="numRows">
+ <number>0</number>
+ </property>
+ <property name="numCols">
+ <number>12</number>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_helpButton</cstring>
+ </property>
+ <property name="text">
+ <string>Help</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>430</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>KSelectTransactionsDlgDecl</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>KSelectTransactionsDlgDecl</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/ksortoptiondlg.ui b/kmymoney2/dialogs/ksortoptiondlg.ui
new file mode 100644
index 0000000..e5606ae
--- /dev/null
+++ b/kmymoney2/dialogs/ksortoptiondlg.ui
@@ -0,0 +1,129 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KSortOptionDlg</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KSortOptionDlg</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>511</width>
+ <height>348</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Sort options</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_useDefault</cstring>
+ </property>
+ <property name="text">
+ <string>Use default</string>
+ </property>
+ </widget>
+ <widget class="TransactionSortOption">
+ <property name="name">
+ <cstring>m_sortOption</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_helpButton</cstring>
+ </property>
+ <property name="text">
+ <string>Help</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>237</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_okButton</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_cancelButton</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>m_okButton</sender>
+ <signal>clicked()</signal>
+ <receiver>KSortOptionDlg</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>m_cancelButton</sender>
+ <signal>clicked()</signal>
+ <receiver>KSortOptionDlg</receiver>
+ <slot>reject()</slot>
+ </connection>
+ <connection>
+ <sender>m_useDefault</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>m_sortOption</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+</connections>
+<includes>
+ <include location="local" impldecl="in implementation">ksortoptiondlg.ui.h</include>
+</includes>
+<slots>
+ <slot>setSortOption( const QString &amp; option, const QString &amp; def )</slot>
+</slots>
+<functions>
+ <function access="private" specifier="non virtual">init()</function>
+ <function returnType="QString">sortOption( void ) const</function>
+ <function>hideDefaultButton( void )</function>
+</functions>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/ksortoptiondlg.ui.h b/kmymoney2/dialogs/ksortoptiondlg.ui.h
new file mode 100644
index 0000000..62c26b7
--- /dev/null
+++ b/kmymoney2/dialogs/ksortoptiondlg.ui.h
@@ -0,0 +1,53 @@
+/****************************************************************************
+** ui.h extension file, included from the uic-generated form implementation.
+**
+** If you wish to add, delete or rename functions or slots use
+** Qt Designer which will update this file, preserving your code. Create an
+** init() function in place of a constructor, and a destroy() function in
+** place of a destructor.
+*****************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kstdguiitem.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+
+void KSortOptionDlg::init()
+{
+ m_okButton->setGuiItem(KStdGuiItem::ok());
+ m_cancelButton->setGuiItem(KStdGuiItem::cancel());
+ m_helpButton->setGuiItem(KStdGuiItem::help());
+}
+
+void KSortOptionDlg::setSortOption(const QString& option, const QString& def)
+{
+ if(option.isEmpty()) {
+ m_sortOption->setSettings(def);
+ m_useDefault->setChecked(true);
+ } else {
+ m_sortOption->setSettings(option);
+ m_useDefault->setChecked(false);
+ }
+}
+
+QString KSortOptionDlg::sortOption(void) const
+{
+ QString rc;
+ if(!m_useDefault->isChecked()) {
+ rc = m_sortOption->settings();
+ }
+ return rc;
+}
+
+void KSortOptionDlg::hideDefaultButton(void)
+{
+ m_useDefault->hide();
+}
+
diff --git a/kmymoney2/dialogs/ksplitcorrectiondlg.ui b/kmymoney2/dialogs/ksplitcorrectiondlg.ui
new file mode 100644
index 0000000..f5d9757
--- /dev/null
+++ b/kmymoney2/dialogs/ksplitcorrectiondlg.ui
@@ -0,0 +1,245 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KSplitCorrectionDlgDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KSplitCorrectionDlgDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>462</width>
+ <height>292</height>
+ </rect>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>80</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="caption">
+ <string>Correct splits</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>explanation</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>xxx</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>question</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>How do you want to proceed?</string>
+ </property>
+ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>buttonGroup</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>continueBtn</cstring>
+ </property>
+ <property name="text">
+ <string>Continue to edit splits</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>changeBtn</cstring>
+ </property>
+ <property name="text">
+ <string>Change total amount of transaction to %1.</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>distributeBtn</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Distribute difference of %1 among all splits.</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>leaveBtn</cstring>
+ </property>
+ <property name="text">
+ <string>Leave %1 unassigned.</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>41</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="Line">
+ <property name="name">
+ <cstring>line1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>61</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>okBtn</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>80</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>cancelBtn</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>80</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>okBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>KSplitCorrectionDlgDecl</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>cancelBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>KSplitCorrectionDlgDecl</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/ksplittransactiondlg.cpp b/kmymoney2/dialogs/ksplittransactiondlg.cpp
new file mode 100644
index 0000000..a197b4c
--- /dev/null
+++ b/kmymoney2/dialogs/ksplittransactiondlg.cpp
@@ -0,0 +1,449 @@
+/***************************************************************************
+ ksplittransactiondlg.cpp - description
+ -------------------
+ begin : Thu Jan 10 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qpushbutton.h>
+#include <qlabel.h>
+#include <qtable.h>
+#include <qtimer.h>
+#include <qptrlist.h>
+#include <qbuttongroup.h>
+#include <qradiobutton.h>
+#include <qcursor.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kglobal.h>
+#include <kconfig.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kpushbutton.h>
+#include <kactivelabel.h>
+#include <kstdguiitem.h>
+#include <kapplication.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "ksplittransactiondlg.h"
+#include <kmymoney/kmymoneyedit.h>
+#include <kmymoney/kmymoneylineedit.h>
+#include <kmymoney/mymoneyfile.h>
+
+#include "kmymoneysplittable.h"
+#include "../dialogs/ksplitcorrectiondlg.h"
+
+KSplitTransactionDlg::KSplitTransactionDlg(const MyMoneyTransaction& t,
+ const MyMoneySplit& s,
+ const MyMoneyAccount& acc,
+ const bool amountValid,
+ const bool deposit,
+ const MyMoneyMoney& calculatedValue,
+ const QMap<QString, MyMoneyMoney>& priceInfo,
+ QWidget* parent, const char* name) :
+ KSplitTransactionDlgDecl(parent, name, true),
+ m_account(acc),
+ m_split(s),
+ m_precision(2),
+ m_amountValid(amountValid),
+ m_isDeposit(deposit),
+ m_calculatedValue(calculatedValue)
+{
+ // add icons to buttons
+ KIconLoader *il = KGlobal::iconLoader();
+
+ KGuiItem clearButtenItem( i18n( "Clear &All" ),
+ QIconSet(il->loadIcon("edittrash", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Clear all splits"),
+ i18n("Use this to clear all splits of this transaction"));
+ clearAllBtn->setGuiItem(clearButtenItem);
+
+
+ KGuiItem mergeButtenItem( i18n( "&Merge" ),
+ QIconSet(il->loadIcon("math_sum", KIcon::Small, KIcon::SizeSmall)),
+ "", "");
+ mergeBtn->setGuiItem(mergeButtenItem);
+
+ // make finish the default
+ finishBtn->setDefault(true);
+
+ // setup the focus
+ cancelBtn->setFocusPolicy(QWidget::NoFocus);
+ finishBtn->setFocusPolicy(QWidget::NoFocus);
+ clearAllBtn->setFocusPolicy(QWidget::NoFocus);
+
+ // connect signals with slots
+ connect(transactionsTable, SIGNAL(transactionChanged(const MyMoneyTransaction&)),
+ this, SLOT(slotSetTransaction(const MyMoneyTransaction&)));
+ connect(transactionsTable, SIGNAL(createCategory(const QString&, QString&)), this, SLOT(slotCreateCategory(const QString&, QString&)));
+ connect(transactionsTable, SIGNAL(objectCreation(bool)), this, SIGNAL(objectCreation(bool)));
+
+ connect(transactionsTable, SIGNAL(returnPressed()), this, SLOT(accept()));
+ connect(transactionsTable, SIGNAL(escapePressed()), this, SLOT(reject()));
+
+ connect(cancelBtn, SIGNAL(clicked()), this, SLOT(reject()));
+ connect(finishBtn, SIGNAL(clicked()), this, SLOT(accept()));
+ connect(clearAllBtn, SIGNAL(clicked()), this, SLOT(slotClearAllSplits()));
+ connect(mergeBtn, SIGNAL(clicked()), this, SLOT(slotMergeSplits()));
+ connect(clearZeroBtn, SIGNAL(clicked()), this, SLOT(slotClearUnusedSplits()));
+
+ // setup the precision
+ try {
+ MyMoneySecurity currency = MyMoneyFile::instance()->currency(t.commodity());
+ m_precision = MyMoneyMoney::denomToPrec(m_account.fraction(currency));
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+
+ slotSetTransaction(t);
+
+ // pass on those vars
+ transactionsTable->setup(priceInfo);
+
+ QSize size(width(), height());
+ kapp->config()->setGroup("SplitTransactionEditor");
+ size = kapp->config()->readSizeEntry("Geometry", &size);
+ size.setHeight(size.height()-1);
+ QDialog::resize( size.expandedTo(minimumSizeHint()) );
+
+ // Trick: it seems, that the initial sizing of the dialog does
+ // not work correctly. At least, the columns do not get displayed
+ // correct. Reason: the return value of transactionsTable->visibleWidth()
+ // is incorrect. If the widget is visible, resizing works correctly.
+ // So, we let the dialog show up and resize it then. It's not really
+ // clean, but the only way I got the damned thing working.
+ QTimer::singleShot( 10, this, SLOT(initSize()) );
+}
+
+KSplitTransactionDlg::~KSplitTransactionDlg()
+{
+ kapp->config()->setGroup("SplitTransactionEditor");
+ kapp->config()->writeEntry("Geometry", size());
+}
+
+int KSplitTransactionDlg::exec(void)
+{
+ // for deposits, we invert the sign of all splits.
+ // don't forget to revert when we're done ;-)
+ if(m_isDeposit) {
+ for(unsigned i = 0; i < m_transaction.splits().count(); ++i) {
+ MyMoneySplit split = m_transaction.splits()[i];
+ split.setValue(-split.value());
+ split.setShares(-split.shares());
+ m_transaction.modifySplit(split);
+ }
+ }
+
+ int rc;
+ do {
+ transactionsTable->setFocus();
+
+ // initialize the display
+ transactionsTable->setTransaction(m_transaction, m_split, m_account);
+ updateSums();
+
+ rc = KSplitTransactionDlgDecl::exec();
+
+ if(rc == QDialog::Accepted) {
+ if(!diffAmount().isZero()) {
+ KSplitCorrectionDlgDecl* corrDlg = new KSplitCorrectionDlgDecl(this, 0, true);
+
+ // add icons to buttons
+ corrDlg->okBtn->setGuiItem(KStdGuiItem::ok());
+ corrDlg->cancelBtn->setGuiItem(KStdGuiItem::cancel());
+
+ MyMoneySplit split = m_transaction.splits()[0];
+ QString total = (-split.value()).formatMoney("", m_precision);
+ QString sums = splitsValue().formatMoney("", m_precision);
+ QString diff = diffAmount().formatMoney("", m_precision);
+
+ // now modify the text items of the dialog to contain the correct values
+ QString q = i18n("The total amount of this transaction is %1 while "
+ "the sum of the splits is %2. The remaining %3 are "
+ "unassigned.")
+ .arg(total)
+ .arg(sums)
+ .arg(diff);
+ corrDlg->explanation->setText(q);
+
+ q = i18n("Change &total amount of transaction to %1.").arg(sums);
+ corrDlg->changeBtn->setText(q);
+
+ q = i18n("&Distribute difference of %1 among all splits.").arg(diff);
+ corrDlg->distributeBtn->setText(q);
+ // FIXME remove the following line once distribution among
+ // all splits is implemented
+ corrDlg->distributeBtn->hide();
+
+
+ // if we have only two splits left, we don't allow leaving sth. unassigned.
+ if(m_transaction.splitCount() < 3) {
+ q = i18n("&Leave total amount of transaction at %1.").arg(total);
+ } else {
+ q = i18n("&Leave %1 unassigned.").arg(diff);
+ }
+ corrDlg->leaveBtn->setText(q);
+
+ if((rc = corrDlg->exec()) == QDialog::Accepted) {
+ QButton* button = corrDlg->buttonGroup->selected();
+ if(button != 0) {
+ switch(corrDlg->buttonGroup->id(button)) {
+ case 0: // continue to edit
+ rc = QDialog::Rejected;
+ break;
+
+ case 1: // modify total
+ split.setValue(-splitsValue());
+ split.setShares(-splitsValue());
+ m_transaction.modifySplit(split);
+ break;
+
+ case 2: // distribute difference
+ qDebug("distribution of difference not yet supported in KSplitTransactionDlg::slotFinishClicked()");
+ break;
+
+ case 3: // leave unassigned
+ break;
+ }
+ }
+ }
+ delete corrDlg;
+ }
+ } else
+ break;
+
+ } while(rc != QDialog::Accepted);
+
+ // for deposits, we inverted the sign of all splits.
+ // now we revert it back, so that things are left correct
+ if(m_isDeposit) {
+ for(unsigned i = 0; i < m_transaction.splits().count(); ++i) {
+ MyMoneySplit split = m_transaction.splits()[i];
+ split.setValue(-split.value());
+ split.setShares(-split.shares());
+ m_transaction.modifySplit(split);
+ }
+ }
+
+ return rc;
+}
+
+void KSplitTransactionDlg::initSize(void)
+{
+ QDialog::resize(width(), height()+1);
+}
+
+void KSplitTransactionDlg::accept()
+{
+ transactionsTable->slotCancelEdit();
+ KSplitTransactionDlgDecl::accept();
+}
+
+void KSplitTransactionDlg::reject()
+{
+ // cancel any edit activity in the split register
+ transactionsTable->slotCancelEdit();
+ KSplitTransactionDlgDecl::reject();
+}
+
+void KSplitTransactionDlg::slotClearAllSplits(void)
+{
+ transactionsTable->slotEndEdit();
+ int answer;
+ answer = KMessageBox::warningContinueCancel (this,
+ i18n("You are about to delete all splits of this transaction. "
+ "Do you really want to continue?"),
+ i18n("KMyMoney"),
+ i18n("Continue")
+ );
+
+ if(answer == KMessageBox::Continue) {
+ transactionsTable->slotCancelEdit();
+ QValueList<MyMoneySplit> list = transactionsTable->getSplits(m_transaction);
+ QValueList<MyMoneySplit>::ConstIterator it;
+
+ // clear all but the one referencing the account
+ for(it = list.begin(); it != list.end(); ++it) {
+ m_transaction.removeSplit(*it);
+ }
+
+ transactionsTable->setTransaction(m_transaction, m_split, m_account);
+ slotSetTransaction(m_transaction);
+ }
+}
+
+void KSplitTransactionDlg::slotClearUnusedSplits(void)
+{
+ transactionsTable->slotEndEdit();
+
+ QValueList<MyMoneySplit> list = transactionsTable->getSplits(m_transaction);
+ QValueList<MyMoneySplit>::ConstIterator it;
+
+ try {
+ // remove all splits that don't have a value assigned
+ for(it = list.begin(); it != list.end(); ++it) {
+ if((*it).shares().isZero()) {
+ m_transaction.removeSplit(*it);
+ }
+ }
+
+ transactionsTable->setTransaction(m_transaction, m_split, m_account);
+ slotSetTransaction(m_transaction);
+ } catch(MyMoneyException* e) {
+ delete e;
+ }
+}
+
+void KSplitTransactionDlg::slotMergeSplits(void)
+{
+ transactionsTable->slotEndEdit();
+
+ QValueList<MyMoneySplit> list = transactionsTable->getSplits(m_transaction);
+ QValueList<MyMoneySplit>::ConstIterator it;
+
+ try {
+ // collect all splits, merge them if needed and remove from transaction
+ QValueList<MyMoneySplit> splits;
+ for(it = list.begin(); it != list.end(); ++it) {
+ QValueList<MyMoneySplit>::iterator it_s;
+ for(it_s = splits.begin(); it_s != splits.end(); ++it_s) {
+ if((*it_s).accountId() == (*it).accountId()
+ && (*it_s).memo().isEmpty() && (*it).memo().isEmpty())
+ break;
+ }
+ if(it_s != splits.end()) {
+ (*it_s).setShares((*it).shares() + (*it_s).shares());
+ (*it_s).setValue((*it).value() + (*it_s).value());
+ } else {
+ splits << *it;
+ }
+ m_transaction.removeSplit(*it);
+ }
+
+ // now add them back to the transaction
+ QValueList<MyMoneySplit>::iterator it_s;
+ for(it_s = splits.begin(); it_s != splits.end(); ++it_s) {
+ (*it_s).clearId();
+ m_transaction.addSplit(*it_s);
+ }
+
+ transactionsTable->setTransaction(m_transaction, m_split, m_account);
+ slotSetTransaction(m_transaction);
+ } catch(MyMoneyException* e) {
+ delete e;
+ }
+}
+
+void KSplitTransactionDlg::slotSetTransaction(const MyMoneyTransaction& t)
+{
+ transactionsTable->slotCancelEdit();
+
+ m_transaction = t;
+ QValueList<MyMoneySplit> list = transactionsTable->getSplits(m_transaction);
+ QValueList<MyMoneySplit>::ConstIterator it;
+
+ // check if we can merge splits or not, have zero splits or not
+ QMap<QString, int> splits;
+ bool haveZeroSplit = false;
+ for(it = list.begin(); it != list.end(); ++it) {
+ splits[(*it).accountId()]++;
+ if(((*it).id() != m_split.id()) && ((*it).shares().isZero()))
+ haveZeroSplit = true;
+ }
+ QMap<QString, int>::const_iterator it_s;
+ for(it_s = splits.begin(); it_s != splits.end(); ++it_s) {
+ if((*it_s) > 1)
+ break;
+ }
+ mergeBtn->setDisabled(it_s == splits.end());
+ clearZeroBtn->setEnabled(haveZeroSplit);
+
+ updateSums();
+}
+
+void KSplitTransactionDlg::updateSums(void)
+{
+ MyMoneyMoney splits(splitsValue());
+
+ if(m_amountValid == false) {
+ m_split.setValue(-splits);
+ m_transaction.modifySplit(m_split);
+ }
+
+ splitSum->setText("<b>" + splits.formatMoney("", m_precision) + " ");
+ splitUnassigned->setText("<b>" + diffAmount().formatMoney("", m_precision) + " ");
+ transactionAmount->setText("<b>" + (-m_split.value()).formatMoney("", m_precision) + " ");
+}
+
+MyMoneyMoney KSplitTransactionDlg::splitsValue(void)
+{
+ MyMoneyMoney splitsValue(m_calculatedValue);
+ QValueList<MyMoneySplit> list = transactionsTable->getSplits(m_transaction);
+ QValueList<MyMoneySplit>::ConstIterator it;
+
+ // calculate the current sum of all split parts
+ for(it = list.begin(); it != list.end(); ++it) {
+ if((*it).value() != MyMoneyMoney::autoCalc)
+ splitsValue += (*it).value();
+ }
+
+ return splitsValue;
+}
+
+MyMoneyMoney KSplitTransactionDlg::diffAmount(void)
+{
+ MyMoneyMoney diff(0);
+
+ // if there is an amount specified in the transaction, we need to calculate the
+ // difference, otherwise we display the difference as 0 and display the same sum.
+ if(m_amountValid) {
+ MyMoneySplit split = m_transaction.splits()[0];
+
+ diff = -(splitsValue() + split.value());
+ }
+ return diff;
+}
+
+void KSplitTransactionDlg::slotCreateCategory(const QString& name, QString& id)
+{
+ MyMoneyAccount acc, parent;
+ acc.setName(name);
+
+ if(m_isDeposit)
+ parent = MyMoneyFile::instance()->income();
+ else
+ parent = MyMoneyFile::instance()->expense();
+
+ // TODO extract possible first part of a hierarchy and check if it is one
+ // of our top categories. If so, remove it and select the parent
+ // according to this information.
+
+ emit createCategory(acc, parent);
+
+ // return id
+ id = acc.id();
+}
+
+#include "ksplittransactiondlg.moc"
diff --git a/kmymoney2/dialogs/ksplittransactiondlg.h b/kmymoney2/dialogs/ksplittransactiondlg.h
new file mode 100644
index 0000000..67a5b92
--- /dev/null
+++ b/kmymoney2/dialogs/ksplittransactiondlg.h
@@ -0,0 +1,174 @@
+/***************************************************************************
+ ksplittransactiondlg.h - description
+ -------------------
+ begin : Thu Jan 10 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KSPLITTRANSACTIONDLG_H
+#define KSPLITTRANSACTIONDLG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kpopupmenu.h>
+#include <kiconloader.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneymoney.h>
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneytransaction.h>
+
+class kMyMoneyEdit;
+class kMyMoneyLineEdit;
+
+#include "../dialogs/ksplittransactiondlgdecl.h"
+
+/**
+ * @author Thomas Baumgart
+ */
+
+class KSplitTransactionDlg : public KSplitTransactionDlgDecl
+{
+ Q_OBJECT
+
+public:
+ KSplitTransactionDlg(const MyMoneyTransaction& t,
+ const MyMoneySplit& s,
+ const MyMoneyAccount& acc,
+ const bool amountValid,
+ const bool deposit,
+ const MyMoneyMoney& calculatedValue,
+ const QMap<QString, MyMoneyMoney>& priceInfo,
+ QWidget* parent = 0, const char* name = 0);
+
+ virtual ~KSplitTransactionDlg();
+
+ /**
+ * Using this method, an external object can retrieve the result
+ * of the dialog.
+ *
+ * @return MyMoneyTransaction based on the transaction passes during
+ * the construction of this object and modified using the
+ * dialog.
+ */
+ const MyMoneyTransaction& transaction(void) const { return m_transaction; };
+
+ /**
+ * This method calculates the difference between the split that references
+ * the account passed as argument to the constructor of this object and
+ * all the other splits shown in the register of this dialog.
+ *
+ * @return difference as MyMoneyMoney object
+ */
+ MyMoneyMoney diffAmount(void);
+
+ /**
+ * This method calculates the sum of the splits shown in the register
+ * of this dialog.
+ *
+ * @return sum of splits as MyMoneyMoney object
+ */
+ MyMoneyMoney splitsValue(void);
+
+private:
+ /**
+ * This method updates the display of the sums below the register
+ */
+ void updateSums(void);
+
+public slots:
+ int exec(void);
+
+protected slots:
+ void accept();
+ void reject();
+ void slotClearAllSplits(void);
+ void slotClearUnusedSplits(void);
+ void slotSetTransaction(const MyMoneyTransaction& t);
+ void slotCreateCategory(const QString& txt, QString& id);
+ void slotMergeSplits(void);
+
+ /// used internally to setup the initial size of all widgets
+ void initSize(void);
+
+signals:
+ /**
+ * This signal is sent out, when a new category needs to be created
+ * Depending on the setting of either a payment or deposit, the parent
+ * account will be preset to Expense or Income.
+ *
+ * @param account reference to account info. Will be filled by called slot
+ * @param parent reference to parent account
+ */
+ void createCategory(MyMoneyAccount& account, const MyMoneyAccount& parent);
+
+ /**
+ * Signal is emitted, if any of the widgets enters (@a state equals @a true)
+ * or leaves (@a state equals @a false) object creation mode.
+ *
+ * @param state Enter (@a true) or leave (@a false) object creation
+ */
+ void objectCreation(bool state);
+
+private:
+ /**
+ * This member keeps a copy of the current selected transaction
+ */
+ MyMoneyTransaction m_transaction;
+
+ /**
+ * This member keeps a copy of the currently selected account
+ */
+ MyMoneyAccount m_account;
+
+ /**
+ * This member keeps a copy of the currently selected split
+ */
+ MyMoneySplit m_split;
+
+ /**
+ * This member keeps the precision for the values
+ */
+ int m_precision;
+
+ /**
+ * flag that shows that the amount specified in the constructor
+ * should be used as fix value (true) or if it can be changed (false)
+ */
+ bool m_amountValid;
+
+ /**
+ * This member keeps track if the current transaction is of type
+ * deposit (true) or withdrawal (false).
+ */
+ bool m_isDeposit;
+
+ /**
+ * This member keeps the amount that will be assigned to all the
+ * splits that are marked 'will be calculated'.
+ */
+ MyMoneyMoney m_calculatedValue;
+};
+
+#endif
diff --git a/kmymoney2/dialogs/ksplittransactiondlgdecl.ui b/kmymoney2/dialogs/ksplittransactiondlgdecl.ui
new file mode 100644
index 0000000..72a19e3
--- /dev/null
+++ b/kmymoney2/dialogs/ksplittransactiondlgdecl.ui
@@ -0,0 +1,424 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KSplitTransactionDlgDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KSplitTransactionDlgDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>656</width>
+ <height>408</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Split transaction</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout61</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="kMyMoneySplitTable">
+ <property name="name">
+ <cstring>transactionsTable</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>5</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="cursor">
+ <cursor>0</cursor>
+ </property>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>m_sumFrame</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>StyledPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>1</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer12</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout49</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>32767</width>
+ <height>80</height>
+ </size>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>1</number>
+ </property>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>splitUnassigned</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>120</width>
+ <height>15</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>&lt;b&gt;11,00&lt;b&gt;</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="1">
+ <property name="name">
+ <cstring>transactionAmount</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>120</width>
+ <height>15</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>&lt;b&gt;111,00&lt;b&gt;</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Unassigned</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Sum of splits</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>splitSum</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>120</width>
+ <height>15</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>100,00</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel1_2_2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Transaction amount</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ <widget class="Line" row="2" column="1">
+ <property name="name">
+ <cstring>Line2</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>Frame3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>15</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>32767</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>mergeBtn</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Merge</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Merges splits with the same category to one split</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>In case you have multiple split entries to the same category and you like to keep them as a single split, press this button. The amount for identical categories will be added and stored in a single split for that category.</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>clearZeroBtn</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Clear &amp;Zero</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Removes all splits that have a value of zero.</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>clearAllBtn</cstring>
+ </property>
+ <property name="text">
+ <string>Clear &amp;All</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer30</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>120</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>cancelBtn</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>2</number>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>finishBtn</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>1</number>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>kMyMoneySplitTable</class>
+ <header location="local">../dialogs/kmymoneysplittable.h</header>
+ <sizehint>
+ <width>330</width>
+ <height>390</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>3</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="256">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000000c749444154388dad55db1184200c4c180bb81a28c73aad811228c356f42b3792db3cc0db2fc724bb7901dc7b270f27ed17fa5fa9b117b7cd90211f4ba0ac906a7f1453b4d30ca917bb590681552af23f69bfc4ffa71519d2c8f62546ea5ea03738b1c18c33a4d156f0d13f43b61952e4af6d6e8fb3a408f080448419a433d6486d85052fdba892a295f5d45785cd8c51a9d6de6a814a8d2131da51f98e7a3b64ec9da04a8db53d43be3c3c0b22cacf17e4cdb5a931649ceddf34b190cf0aa019f03f1fd3e7457f03b5a66c9ed26e86130000000049454e44ae426082</data>
+ </image>
+</images>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/kstartdlg.cpp b/kmymoney2/dialogs/kstartdlg.cpp
new file mode 100644
index 0000000..d0af8eb
--- /dev/null
+++ b/kmymoney2/dialogs/kstartdlg.cpp
@@ -0,0 +1,243 @@
+/***************************************************************************
+ KStartDlg.cpp - description
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qvbox.h>
+#include <qlayout.h>
+#include <qbuttongroup.h>
+#include <qabstractlayout.h>
+#include <qpixmap.h>
+#include <qtextview.h>
+#include <qlabel.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include "kdecompat.h"
+
+#if QT_VERSION > 300
+#include <kstandarddirs.h>
+#else
+#include <kstddirs.h>
+#endif
+
+#include <kiconloader.h>
+#include <kconfig.h>
+#include <kglobalsettings.h>
+#include <kfiledialog.h>
+#include <kurl.h>
+#include <kurlrequester.h>
+#include <kfile.h>
+#include <kio/netaccess.h>
+#include <kmessagebox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kstartdlg.h"
+#include "krecentfileitem.h"
+#include "../kmymoney2.h"
+
+#include <qtooltip.h>
+
+KStartDlg::KStartDlg(QWidget *parent, const char *name, bool modal) : KDialogBase(IconList,i18n("Start Dialog"),Help|Ok|Cancel,Ok, parent, name, modal, true)
+{
+ setPage_Template();
+ setPage_Documents();
+
+ isnewfile = false;
+ isopenfile = false;
+
+ readConfig();
+}
+
+KStartDlg::~KStartDlg()
+{
+}
+
+/** Set the font Page of the preferences dialog */
+void KStartDlg::setPage_Template()
+{
+ KIconLoader *ic = KGlobal::iconLoader();
+ templateMainFrame = addVBoxPage( i18n("Templates"), i18n("Select templates"), DesktopIcon("wizard"));
+ view_wizard = new KIconView( templateMainFrame, "view_options" );
+ (void)new QIconViewItem( view_wizard, i18n("New KMyMoney document"), ic->loadIcon("mime_empty.png", KIcon::Desktop, KIcon::SizeLarge)/*QPixmap( locate("icon","hicolor/48x48/mimetypes/mime_empty.png") )*/ );
+ connect(view_wizard, SIGNAL(executed(QIconViewItem *) ), this, SLOT(slotTemplateClicked(QIconViewItem *) ) );
+ connect(view_wizard, SIGNAL(selectionChanged(QIconViewItem*)),
+ this, SLOT(slotTemplateSelectionChanged(QIconViewItem*)));
+ connect(this, SIGNAL(aboutToShowPage(QWidget*)), this, SLOT(slotAboutToShowPage(QWidget*)));
+}
+
+/** Set the Misc options Page of the preferences dialog */
+void KStartDlg::setPage_Documents()
+{
+ recentMainFrame = addPage( i18n("Open"), i18n("Open a KMyMoney document"), DesktopIcon("fileopen"));
+ QVBoxLayout *mainLayout = new QVBoxLayout( recentMainFrame );
+
+ kurlrequest = new KURLRequester( recentMainFrame, "kurlrequest" );
+
+ //allow user to select either a .kmy file, or any generic file.
+ kurlrequest->fileDialog()->setFilter( i18n("%1|KMyMoney files (*.kmy)\n" "%2|All files (*.*)").arg("*.kmy").arg("*.*") );
+ kurlrequest->fileDialog()->setMode(KFile::File || KFile::ExistingOnly);
+ kurlrequest->fileDialog()->setURL(KURL(kmymoney2->readLastUsedDir()));//kurlrequest->fileDialog()->setURL(KURL(KGlobalSettings::documentPath()));
+ mainLayout->addWidget( kurlrequest );
+
+ QLabel *label1 = new QLabel( recentMainFrame, "label1" );
+ label1->setText( i18n("Recent Files") );
+ mainLayout->addWidget( label1 );
+ view_recent = new KIconView( recentMainFrame, "view_recent" );
+ connect( view_recent, SIGNAL( executed(QIconViewItem *) ), this, SLOT( slotRecentClicked(QIconViewItem *) ) );
+ mainLayout->addWidget( view_recent );
+ view_recent->setArrangement(KIconView::LeftToRight/*TopToBottom*/);
+ view_recent->setItemTextPos(KIconView::Bottom);
+
+ connect(view_recent, SIGNAL(selectionChanged(QIconViewItem*)),
+ this, SLOT(slotRecentSelectionChanged(QIconViewItem*)));
+}
+
+void KStartDlg::slotTemplateClicked(QIconViewItem *item)
+{
+ if(!item) return;
+
+ // If the item is the blank document turn isnewfile variable true, else is template or wizard
+ if( item->text() == i18n("New KMyMoney document") )
+ isnewfile = true;
+ else
+ templatename = item->text();
+
+ isopenfile = false;
+ // Close the window if the user pressed an icon
+ slotOk();
+}
+
+/** Read config window */
+void KStartDlg::readConfig()
+{
+ QString value;
+ unsigned int i = 1;
+
+ KConfig *config = KGlobal::config();
+ KIconLoader *il = KGlobal::iconLoader();
+
+ // read file list
+ do {
+ // for some reason, I had to setup the group to get reasonable results
+ // after program startup. If the wizard was opened the second time,
+ // it does not make a difference, if you call setGroup() outside of
+ // this loop. The first time it does make a difference!
+ config->setGroup("Recent Files");
+ value = config->readEntry( QString( "File%1" ).arg( i ), QString::null );
+ if( !value.isNull() && fileExists(value) )
+ {
+ QString file_name = value.mid(value.findRev('/')+1);
+ (void)new KRecentFileItem( value, view_recent, file_name, il->loadIcon("kmy", KIcon::Desktop, KIcon::SizeLarge));
+ }
+ i++;
+ } while( !value.isNull() );
+
+ config->setGroup("Start Dialog");
+ QSize *defaultSize = new QSize(400,300);
+ this->resize( config->readSizeEntry("Geometry", defaultSize ) );
+
+ // Restore the last page viewed
+ // default to the recent files page if no entry exists but files have been found
+ // otherwise, default to template page
+ if(view_recent->count() > 0)
+ showPage(config->readNumEntry("LastPage", this->pageIndex(recentMainFrame)));
+ else {
+ showPage(config->readNumEntry("LastPage", this->pageIndex(templateMainFrame)));
+ slotAboutToShowPage(templateMainFrame);
+ }
+}
+
+/** Write config window */
+void KStartDlg::writeConfig()
+{
+ KConfig *config = KGlobal::config();
+
+ config->setGroup("Start Dialog");
+ config->writeEntry("Geometry", this->size() );
+ config->writeEntry("LastPage", this->activePageIndex());
+ config->sync();
+}
+
+/** slot to recent view */
+void KStartDlg::slotRecentClicked(QIconViewItem *item)
+{
+ KRecentFileItem *kitem = (KRecentFileItem*)item;
+ if(!kitem) return;
+
+ isopenfile = true;
+ kurlrequest->setURL( kitem->fileURL() );
+ // Close the window if the user press an icon
+ slotOk();
+}
+
+/** No descriptions */
+void KStartDlg::slotOk()
+{
+ writeConfig();
+ this->accept();
+}
+
+bool KStartDlg::fileExists(KURL url)
+{
+#if KDE_IS_VERSION(3,2,0)
+ return KIO::NetAccess::exists(url, true, this);
+#else
+ return KIO::NetAccess::exists(url);
+#endif
+}
+
+void KStartDlg::slotTemplateSelectionChanged(QIconViewItem* item)
+{
+ if(!item) return;
+
+ // Clear the other selection
+ view_recent->clearSelection();
+
+ // If the item is the blank document turn isnewfile
+ // variable true, else is template or wizard
+ if( item->text() == i18n("Blank Document") )
+ isnewfile = true;
+ else
+ templatename = item->text();
+
+ isopenfile = false;
+}
+
+void KStartDlg::slotRecentSelectionChanged(QIconViewItem* item)
+{
+ KRecentFileItem *kitem = (KRecentFileItem*)item;
+ if(!kitem) return;
+
+ // Clear the other selection
+ view_wizard->clearSelection();
+
+ isnewfile = false;
+ isopenfile = true;
+ kurlrequest->setURL( kitem->fileURL() );
+}
+
+void KStartDlg::slotAboutToShowPage(QWidget* page)
+{
+ enableButtonOK(page == recentMainFrame);
+}
+
+#include "kstartdlg.moc"
diff --git a/kmymoney2/dialogs/kstartdlg.h b/kmymoney2/dialogs/kstartdlg.h
new file mode 100644
index 0000000..a09f72d
--- /dev/null
+++ b/kmymoney2/dialogs/kstartdlg.h
@@ -0,0 +1,84 @@
+
+/***************************************************************************
+ kstartdlg.h - description
+ -------------------
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KSTARTDLG_H
+#define KSTARTDLG_H
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <kdialogbase.h>
+
+#include <klocale.h>
+#include <kfontdialog.h>
+#include <kurlrequester.h>
+#include <kiconview.h>
+
+#include <qstring.h>
+#include <qradiobutton.h>
+#include <qlineedit.h>
+#include <qcheckbox.h>
+#include <qpushbutton.h>
+
+/**KMyMoney 2 start dialog
+ */
+
+class KStartDlg : public KDialogBase {
+ Q_OBJECT
+public:
+ KStartDlg( QWidget *parent=0, const char *name=0, bool modal=true );
+ virtual ~KStartDlg();
+ bool isNewFile(void) const { return isnewfile; }
+ bool isOpenFile(void) const { return !kurlrequest->url().isEmpty(); }
+ const QString getURL(void) const { return kurlrequest->url(); }
+ QString getTemplateName(void) const { return templatename; }
+
+private: // Private methods
+ QString m_filename;
+ bool fileExists(KURL url);
+
+ void setPage_Template();
+ void setPage_Documents();
+ /** misc widgets */
+ /** Write config window */
+ void writeConfig();
+ /** Read config window */
+ void readConfig();
+ KIconView *view_wizard;
+ KIconView *view_recent;
+ KURLRequester *kurlrequest;
+ /** misc variables */
+ bool isnewfile;
+ bool isopenfile;
+ QString templatename;
+ QVBox *templateMainFrame;
+ QFrame *recentMainFrame;
+
+protected slots:
+ /** No descriptions */
+ void slotOk();
+private slots:
+ void slotTemplateClicked(QIconViewItem *item);
+ /** slot to recent view */
+ void slotRecentClicked(QIconViewItem *item);
+
+ /** Handle selections */
+ void slotTemplateSelectionChanged(QIconViewItem* item);
+ void slotRecentSelectionChanged(QIconViewItem* item);
+ void slotAboutToShowPage(QWidget* page);
+};
+
+#endif
diff --git a/kmymoney2/dialogs/kupdatestockpricedlg.cpp b/kmymoney2/dialogs/kupdatestockpricedlg.cpp
new file mode 100644
index 0000000..05eee8a
--- /dev/null
+++ b/kmymoney2/dialogs/kupdatestockpricedlg.cpp
@@ -0,0 +1,119 @@
+/***************************************************************************
+ kupdatestockpricedlg.cpp - description
+ -------------------
+ begin : Thu Feb 7 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kguiitem.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kupdatestockpricedlg.h"
+#include "../widgets/kmymoneycurrencyselector.h"
+
+KUpdateStockPriceDlg::KUpdateStockPriceDlg(QWidget* parent, const char* name) :
+ kUpdateStockPriceDecl(parent, name, true)
+{
+ m_date->setDate(QDate::currentDate());
+ init();
+}
+
+KUpdateStockPriceDlg::~KUpdateStockPriceDlg()
+{
+}
+
+void KUpdateStockPriceDlg::init()
+{
+ m_okButton->setGuiItem(KStdGuiItem::ok());
+ m_cancelButton->setGuiItem(KStdGuiItem::cancel());
+
+ connect(m_okButton, SIGNAL(clicked()), this, SLOT(accept()));
+ connect(m_cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
+
+ connect(m_security, SIGNAL(activated(int)), this, SLOT(slotCheckData()));
+ connect(m_currency, SIGNAL(activated(int)), this, SLOT(slotCheckData()));
+
+ // load initial values into the selection widgets
+ m_currency->update(QString());
+ m_security->update(QString());
+
+ slotCheckData();
+}
+
+int KUpdateStockPriceDlg::exec(void)
+{
+ slotCheckData();
+ return kUpdateStockPriceDecl::exec();
+}
+
+void KUpdateStockPriceDlg::slotCheckData(void)
+{
+ QString from = m_security->security().id();
+ QString to = m_currency->security().id();
+
+ m_okButton->setEnabled(!from.isEmpty() && !to.isEmpty() && from != to);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include "kupdatestockpricedlg.moc"
diff --git a/kmymoney2/dialogs/kupdatestockpricedlg.h b/kmymoney2/dialogs/kupdatestockpricedlg.h
new file mode 100644
index 0000000..c7dd407
--- /dev/null
+++ b/kmymoney2/dialogs/kupdatestockpricedlg.h
@@ -0,0 +1,77 @@
+/***************************************************************************
+ kupdatestockpricedlg.h - description
+ -------------------
+ begin : Thu Feb 7 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+
+#ifndef KUPDATESTOCKPRICEDLG_H
+#define KUPDATESTOCKPRICEDLG_H
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qdatetime.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kdialogbase.h>
+#include <klocale.h>
+#include <kpushbutton.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../dialogs/kupdatestockpricedlgdecl.h"
+
+#include <kmymoney/mymoneyprice.h>
+#include <kmymoney/kmymoneydateinput.h>
+#include <kmymoney/kmymoneyedit.h>
+
+/**
+ * @author Kevin Tambascio
+ */
+class KUpdateStockPriceDlg : public kUpdateStockPriceDecl
+{
+ Q_OBJECT
+
+public:
+ KUpdateStockPriceDlg(QWidget* parent = NULL, const char* name = NULL);
+ ~KUpdateStockPriceDlg();
+
+ const QDate date() const { return m_date->date(); };
+ const MyMoneyMoney price(void) const;
+
+public slots:
+ int exec(void);
+
+protected slots:
+ void slotCheckData(void);
+
+private:
+ void init();
+
+};
+
+#endif
diff --git a/kmymoney2/dialogs/kupdatestockpricedlgdecl.ui b/kmymoney2/dialogs/kupdatestockpricedlgdecl.ui
new file mode 100644
index 0000000..d9770b2
--- /dev/null
+++ b/kmymoney2/dialogs/kupdatestockpricedlgdecl.ui
@@ -0,0 +1,257 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>kUpdateStockPriceDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>kUpdateStockPriceDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>457</width>
+ <height>194</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>New price entry</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout38</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget" row="2" column="1">
+ <property name="name">
+ <cstring>layout37</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="kMyMoneyDateInput">
+ <property name="name">
+ <cstring>m_date</cstring>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer25</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>71</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="1">
+ <property name="name">
+ <cstring>layout36</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KMyMoneySecuritySelector">
+ <property name="name">
+ <cstring>m_currency</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer26</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Currency</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>lblDate</cstring>
+ </property>
+ <property name="text">
+ <string>Date:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Security</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="1">
+ <property name="name">
+ <cstring>layout35</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KMyMoneySecuritySelector">
+ <property name="name">
+ <cstring>m_security</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer27</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer8</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>31</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="Line">
+ <property name="name">
+ <cstring>line6</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout9</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer7</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>71</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_okButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_cancelButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>2</number>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/mymoneyqifprofileeditor.cpp b/kmymoney2/dialogs/mymoneyqifprofileeditor.cpp
new file mode 100644
index 0000000..cc43ced
--- /dev/null
+++ b/kmymoney2/dialogs/mymoneyqifprofileeditor.cpp
@@ -0,0 +1,483 @@
+/***************************************************************************
+ kqifprofileeditor.cpp - description
+ -------------------
+ begin : Tue Dec 24 2002
+ copyright : (C) 2002 by Thomas Baumgart
+ email : thb@net-bembel.de
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qpushbutton.h>
+#include <qlistbox.h>
+#include <qlistview.h>
+#include <qcheckbox.h>
+#include <qtabwidget.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include "kdecompat.h"
+#include <klocale.h>
+#include <kglobal.h>
+#include <kconfig.h>
+#include <klineedit.h>
+#include <kmessagebox.h>
+#include <kcombobox.h>
+#include <kurlrequester.h>
+#include <kiconloader.h>
+#include <kapplication.h>
+
+#if KDE_IS_VERSION(3,2,0)
+ #include <kinputdialog.h>
+#else
+ #include <klineeditdlg.h>
+#endif
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoneyqifprofileeditor.h"
+
+MyMoneyQifProfileNameValidator::MyMoneyQifProfileNameValidator(QObject *o, const char *name)
+ : QValidator(o, name)
+{
+}
+
+MyMoneyQifProfileNameValidator::~MyMoneyQifProfileNameValidator()
+{
+}
+
+QValidator::State MyMoneyQifProfileNameValidator::validate(QString& name, int&) const
+{
+ KConfig* config = KGlobal::config();
+ config->setGroup("Profiles");
+ QStringList list = config->readListEntry("profiles");
+
+ // invalid character?
+ if(name.contains(",") != 0)
+ return QValidator::Invalid;
+
+ // would not work in this form (empty or existing name)
+ if(name.isEmpty() || list.contains(name))
+ return QValidator::Intermediate;
+
+ // is OK
+ return QValidator::Acceptable;
+}
+
+MyMoneyQifProfileEditor::MyMoneyQifProfileEditor(const bool edit, QWidget *parent, const char *name )
+ : MyMoneyQifProfileEditorDecl(parent,name),
+ m_inEdit(edit),
+ m_isDirty(false),
+ m_isAccepted(false),
+ m_selectedAmountType(0)
+{
+ // we don't need the date and amounts tab anymore, so we just hide them for now
+ profileTabs->removePage( tabMoney );
+ profileTabs->removePage( tabDate );
+
+ loadWidgets();
+ loadProfileListFromConfig();
+
+ // load button icons
+ KIconLoader* il = KGlobal::iconLoader();
+ KGuiItem newButtenItem( i18n( "&New" ),
+ QIconSet(il->loadIcon("filenew", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Create a new profile"),
+ i18n("Use this to create a new QIF import/export profile"));
+ m_newButton->setGuiItem(newButtenItem);
+
+ connect(m_profileListBox, SIGNAL(highlighted(const QString&)), this, SLOT(slotLoadProfileFromConfig(const QString&)));
+ connect(m_resetButton, SIGNAL(clicked()), this, SLOT(slotReset()));
+ connect(m_okButton, SIGNAL(clicked()), this, SLOT(slotOk()));
+ connect(m_renameButton, SIGNAL(clicked()), this, SLOT(slotRename()));
+ connect(m_deleteButton, SIGNAL(clicked()), this, SLOT(slotDelete()));
+ connect(m_newButton, SIGNAL(clicked()), this, SLOT(slotNew()));
+ connect(m_cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
+ connect(m_helpButton, SIGNAL(clicked()), this, SLOT(slotHelp()));
+
+ connect(m_editDescription, SIGNAL(textChanged(const QString&)), &m_profile, SLOT(setProfileDescription(const QString&)));
+ connect(m_editType, SIGNAL(textChanged(const QString&)), &m_profile, SLOT(setProfileType(const QString&)));
+ connect(m_editOpeningBalance, SIGNAL(textChanged(const QString&)), &m_profile, SLOT(setOpeningBalanceText(const QString&)));
+ connect(m_editAccountDelimiter, SIGNAL(textChanged(const QString&)), &m_profile, SLOT(setAccountDelimiter(const QString&)));
+ connect(m_editVoidMark, SIGNAL(textChanged(const QString&)), &m_profile, SLOT(setVoidMark(const QString&)));
+
+ //connect(m_editDateFormat, SIGNAL(highlighted(const QString&)), &m_profile, SLOT(setDateFormat(const QString&)));
+ connect(m_editApostrophe, SIGNAL(highlighted(const QString&)), &m_profile, SLOT(setApostropheFormat(const QString&)));
+
+ connect(m_editAmounts, SIGNAL(selectionChanged(QListViewItem*)), this, SLOT(slotAmountTypeSelected(QListViewItem*)));
+ connect(m_decimalBox, SIGNAL(activated(const QString&)), this, SLOT(slotDecimalChanged(const QString&)));
+ connect(m_thousandsBox, SIGNAL(activated(const QString&)), this, SLOT(slotThousandsChanged(const QString&)));
+
+ connect(m_editInputFilterLocation, SIGNAL(textChanged(const QString&)), &m_profile, SLOT(setFilterScriptImport(const QString&)));
+ connect(m_editInputFilterLocation, SIGNAL(urlSelected(const QString&)), m_editInputFilterLocation, SLOT(setURL(const QString&)));
+
+ connect(m_editInputFilterFileType, SIGNAL(textChanged(const QString&)), &m_profile, SLOT(setFilterFileType(const QString&)));
+
+ connect(m_editOutputFilterLocation, SIGNAL(textChanged(const QString&)), &m_profile, SLOT(setFilterScriptExport(const QString&)));
+ connect(m_editOutputFilterLocation, SIGNAL(urlSelected(const QString&)), m_editOutputFilterLocation, SLOT(setURL(const QString&)));
+
+ connect(m_attemptMatch, SIGNAL(toggled(bool)), &m_profile, SLOT(setAttemptMatchDuplicates(bool)));
+}
+
+MyMoneyQifProfileEditor::~MyMoneyQifProfileEditor()
+{
+ if(m_inEdit && m_isDirty && m_isAccepted) {
+ KConfig* config = KGlobal::config();
+ config->sync();
+ } else {
+ slotReset();
+ }
+ delete tabMoney;
+ delete tabDate;
+}
+
+void MyMoneyQifProfileEditor::loadWidgets(void)
+{
+ if(m_inEdit)
+ setCaption(i18n("QIF Profile Editor"));
+ else
+ setCaption(i18n("QIF Profile Selector"));
+
+ m_editDateFormat->clear();
+ m_editDateFormat->insertItem( "%d/%m/%yy" );
+ m_editDateFormat->insertItem( "%d/%mmm/%yy" );
+ m_editDateFormat->insertItem( "%d/%m/%yyyy" );
+ m_editDateFormat->insertItem( "%d/%mmm/%yyyy" );
+ m_editDateFormat->insertItem( "%d/%m%yy" );
+ m_editDateFormat->insertItem( "%d/%mmm%yy" );
+ m_editDateFormat->insertItem( "%d.%m.%yy" );
+ m_editDateFormat->insertItem( "%d.%m.%yyyy" );
+ m_editDateFormat->insertItem( "%m.%d.%yy" );
+ m_editDateFormat->insertItem( "%m.%d.%yyyy" );
+ m_editDateFormat->insertItem( "%m/%d/%yy" );
+ m_editDateFormat->insertItem( "%mmm/%d/%yy" );
+ m_editDateFormat->insertItem( "%m/%d/%yyyy" );
+ m_editDateFormat->insertItem( "%m-%d-%yyyy" );
+ m_editDateFormat->insertItem( "%mmm/%d/%yyyy" );
+ m_editDateFormat->insertItem( "%m%d%yy" );
+ m_editDateFormat->insertItem( "%mmm/%d%yy" );
+ m_editDateFormat->insertItem( "%yyyy-%mm-%dd" );
+ m_editDateFormat->insertItem( "%m/%d'%yyyy" );
+
+ m_editApostrophe->clear();
+ m_editApostrophe->insertItem( "1900-1949" );
+ m_editApostrophe->insertItem( "1900-1999" );
+ m_editApostrophe->insertItem( "2000-2099" );
+
+ m_editAmounts->setColumnAlignment(1, Qt::AlignCenter);
+ m_editAmounts->setColumnAlignment(2, Qt::AlignCenter);
+ m_editAmounts->setColumnAlignment(3, Qt::AlignCenter);
+
+ m_editAmounts->setColumnWidth(4, 0);
+ m_editAmounts->setColumnWidthMode(4, QListView::Manual);
+ m_editAmounts->setSorting(4);
+ m_editAmounts->sort();
+
+ m_decimalBox->insertItem( " " );
+ m_decimalBox->insertItem( "," );
+ m_decimalBox->insertItem( "." );
+
+ m_thousandsBox->insertItem( " " );
+ m_thousandsBox->insertItem( "," );
+ m_thousandsBox->insertItem( "." );
+
+ m_editDescription->setEnabled(m_inEdit);
+ m_editType->setEnabled(m_inEdit);
+ m_editDateFormat->setEnabled(m_inEdit);
+ m_editApostrophe->setEnabled(m_inEdit);
+ m_editAmounts->setEnabled(m_inEdit);
+ m_decimalBox->setEnabled(m_inEdit);
+ m_thousandsBox->setEnabled(m_inEdit);
+ m_editOpeningBalance->setEnabled(m_inEdit);
+ m_editAccountDelimiter->setEnabled(m_inEdit);
+ m_editVoidMark->setEnabled(m_inEdit);
+ m_editInputFilterLocation->setEnabled(m_inEdit);
+ m_editOutputFilterLocation->setEnabled(m_inEdit);
+ m_editInputFilterFileType->setEnabled(m_inEdit);
+
+ if(!m_inEdit) {
+ m_renameButton->hide();
+ m_deleteButton->hide();
+ m_resetButton->hide();
+ m_newButton->hide();
+ }
+}
+
+void MyMoneyQifProfileEditor::loadProfileListFromConfig(void)
+{
+ QFontMetrics fontMetrics(m_profileListBox->font());
+ int w = 100; // minimum is 100 pixels width for the list box
+
+ if(m_profile.isDirty()) {
+ m_profile.saveProfile();
+ m_isDirty = true;
+ }
+
+ m_profileListBox->clear();
+
+ QStringList list;
+ KConfig* config = KGlobal::config();
+ config->setGroup("Profiles");
+ list = config->readListEntry("profiles");
+
+ if(list.count() == 0) {
+ m_profile.clear();
+ m_profile.setProfileDescription(i18n("The default QIF profile"));
+ addProfile("Default");
+
+ config->setGroup("Profiles");
+ list = config->readListEntry("profiles");
+ }
+
+ list.sort();
+
+ m_profileListBox->insertStringList(list);
+ if(list.count() > 0) {
+ m_profileListBox->setSelected(0, true);
+ slotLoadProfileFromConfig(list[0]);
+ }
+ for(unsigned int i = 0; i < list.count(); ++i) {
+ int nw = fontMetrics.width(list[i]) + 10;
+ w = QMAX( w, nw );
+ }
+ w = QMIN(w, 200);
+ m_profileListBox->setMinimumWidth(w);
+}
+
+void MyMoneyQifProfileEditor::slotLoadProfileFromConfig(const QString& profile)
+{
+ QString profileName = profile;
+
+ if(m_profile.isDirty()) {
+ m_profile.saveProfile();
+ m_isDirty = true;
+ }
+
+ if(m_profileListBox->findItem(profileName, Qt::ExactMatch | Qt::CaseSensitive) == NULL) {
+ profileName = m_profileListBox->text(0);
+ }
+
+ m_profile.loadProfile("Profile-" + profileName);
+
+ QListBoxItem *lbi = m_profileListBox->findItem(profileName, Qt::ExactMatch | Qt::CaseSensitive);
+ int idx = m_profileListBox->index(lbi);
+ showProfile();
+ if(idx >= 0) {
+ m_profileListBox->setSelected(idx, true);
+ }
+}
+
+void MyMoneyQifProfileEditor::showProfile(void)
+{
+ m_editDescription->setText(m_profile.profileDescription());
+ m_editType->setText(m_profile.profileType());
+ m_editOpeningBalance->setText(m_profile.openingBalanceText());
+ m_editAccountDelimiter->setText(m_profile.accountDelimiter());
+ m_editVoidMark->setText(m_profile.voidMark());
+ m_editInputFilterLocation->setURL(m_profile.filterScriptImport());
+ m_editOutputFilterLocation->setURL(m_profile.filterScriptExport());
+ m_editInputFilterFileType->setText(m_profile.filterFileType());
+
+ m_editDateFormat->setCurrentText(m_profile.outputDateFormat());
+ m_editApostrophe->setCurrentText(m_profile.apostropheFormat());
+
+ m_attemptMatch->setChecked(m_profile.attemptMatchDuplicates());
+
+ QListViewItem* item;
+ QListViewItemIterator it(m_editAmounts);
+
+ while((item = it.current()) != 0) {
+ QChar key = item->text(1)[0];
+ item->setText(2, m_profile.amountDecimal(key));
+ item->setText(3, m_profile.amountThousands(key));
+ if(m_selectedAmountType == 0 && key == 'T' && m_inEdit) {
+ m_editAmounts->setSelected(item, true);
+ slotAmountTypeSelected(item);
+ } else if(item == m_selectedAmountType) {
+ slotAmountTypeSelected(item);
+ }
+ ++it;
+ }
+}
+
+void MyMoneyQifProfileEditor::deleteProfile(const QString& name)
+{
+ KConfig* config = KGlobal::config();
+
+ config->deleteGroup("Profile-" + name);
+
+ config->setGroup("Profiles");
+ QStringList list = config->readListEntry("profiles");
+ list.remove(name);
+
+ config->writeEntry("profiles", list);
+ m_isDirty = true;
+}
+
+void MyMoneyQifProfileEditor::addProfile(const QString& name)
+{
+ KConfig* config = KGlobal::config();
+ config->setGroup("Profiles");
+ QStringList list = config->readListEntry("profiles");
+
+ list += name;
+ list.sort();
+ config->writeEntry("profiles", list);
+
+ m_profile.setProfileName("Profile-" + name);
+ m_profile.saveProfile();
+
+ m_isDirty = true;
+}
+
+void MyMoneyQifProfileEditor::slotOk(void)
+{
+ if(m_profile.isDirty())
+ m_isDirty = true;
+
+ m_profile.saveProfile();
+
+ KConfig* config = KGlobal::config();
+ config->sync();
+
+ m_isAccepted = true;
+ accept();
+}
+
+void MyMoneyQifProfileEditor::slotReset(void)
+{
+ // first flush any changes
+ m_profile.saveProfile();
+
+ KConfig* config = KGlobal::config();
+ config->rollback();
+ config->reparseConfiguration();
+
+ QString currentProfile = m_profile.profileName().mid(8);
+ loadProfileListFromConfig();
+ slotLoadProfileFromConfig(currentProfile);
+ m_isDirty = false;
+}
+
+void MyMoneyQifProfileEditor::slotRename(void)
+{
+ bool ok;
+ QString newName = enterName(ok);
+
+ if(ok == true) {
+ deleteProfile(m_profile.profileName().mid(8));
+ addProfile(newName);
+ loadProfileListFromConfig();
+ slotLoadProfileFromConfig(newName);
+ }
+}
+
+void MyMoneyQifProfileEditor::slotNew(void)
+{
+ bool ok;
+ QString newName = enterName(ok);
+
+ if(ok == true) {
+ m_profile.clear();
+ addProfile(newName);
+ loadProfileListFromConfig();
+ slotLoadProfileFromConfig(newName);
+ }
+}
+
+const QString MyMoneyQifProfileEditor::enterName(bool& ok)
+{
+ MyMoneyQifProfileNameValidator val(this, "Validator");
+#if KDE_IS_VERSION(3,2,0)
+ return KInputDialog::getText(i18n("QIF Profile Editor"),
+ i18n("Enter new profile name"),
+ QString::null,
+ &ok,
+ this,
+ 0,
+ &val,
+ 0);
+#else
+ QString rc;
+
+ // the blank in the next line as the value for the edit box is
+ // there on purpose, so that with the following call to validateAndSet
+ // the state is changed and the OK-Button is greyed
+ KLineEditDlg* dlg = new KLineEditDlg(i18n("Enter new profile name"), " ", this);
+ dlg->lineEdit()->setValidator(&val);
+ dlg->lineEdit()->validateAndSet("", 0, 0, 0);
+
+ ok = false;
+ if(dlg->exec()) {
+ ok = true;
+ }
+ rc = dlg->lineEdit()->text();
+ delete dlg;
+
+ return rc;
+#endif
+}
+
+void MyMoneyQifProfileEditor::slotDelete(void)
+{
+ QString profile = m_profile.profileName().mid(8);
+
+ if(KMessageBox::questionYesNo(this, i18n("Do you really want to delete profile '%1'?").arg(profile)) == KMessageBox::Yes) {
+ int idx = m_profileListBox->currentItem();
+ m_profile.saveProfile();
+ deleteProfile(profile);
+ loadProfileListFromConfig();
+ if(idx >= static_cast<int> (m_profileListBox->count()))
+ idx = m_profileListBox->count() - 1;
+
+ slotLoadProfileFromConfig(m_profileListBox->text(idx));
+ }
+}
+
+void MyMoneyQifProfileEditor::slotHelp(void)
+{
+ kapp->invokeHelp("details.impexp.qifimp.profile");
+}
+
+void MyMoneyQifProfileEditor::slotAmountTypeSelected(QListViewItem* item)
+{
+ m_decimalBox->setCurrentText(item->text(2));
+ m_thousandsBox->setCurrentText(item->text(3));
+ m_selectedAmountType = item;
+}
+
+void MyMoneyQifProfileEditor::slotDecimalChanged(const QString& val)
+{
+ if(m_selectedAmountType != 0) {
+ QChar key = m_selectedAmountType->text(1)[0];
+ m_profile.setAmountDecimal(key, val[0]);
+ m_selectedAmountType->setText(2, val);
+ }
+}
+
+void MyMoneyQifProfileEditor::slotThousandsChanged(const QString& val)
+{
+ if(m_selectedAmountType != 0) {
+ QChar key = m_selectedAmountType->text(1)[0];
+ m_profile.setAmountThousands(key, val[0]);
+ m_selectedAmountType->setText(3, val);
+ }
+}
+
+const QString MyMoneyQifProfileEditor::selectedProfile() const
+{
+ return m_profileListBox->currentText();
+}
+
+#include "mymoneyqifprofileeditor.moc"
diff --git a/kmymoney2/dialogs/mymoneyqifprofileeditor.h b/kmymoney2/dialogs/mymoneyqifprofileeditor.h
new file mode 100644
index 0000000..ce95c9a
--- /dev/null
+++ b/kmymoney2/dialogs/mymoneyqifprofileeditor.h
@@ -0,0 +1,96 @@
+/***************************************************************************
+ kqifprofileeditor.h - description
+ -------------------
+ begin : Tue Dec 24 2002
+ copyright : (C) 2002 by Thomas Baumgart
+ email : thb@net-bembel.de
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYQIFPROFILEEDITOR_H
+#define MYMONEYQIFPROFILEEDITOR_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+#include <qvalidator.h>
+class QListViewItem;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoneyqifprofileeditordecl.h"
+#include "../converter/mymoneyqifprofile.h"
+
+/**
+ * @author Thomas Baumgart
+ */
+
+class MyMoneyQifProfileNameValidator : public QValidator
+{
+ Q_OBJECT
+
+public:
+ MyMoneyQifProfileNameValidator(QObject *o, const char *name);
+ virtual ~MyMoneyQifProfileNameValidator();
+
+ QValidator::State validate(QString&, int&) const;
+};
+
+
+class MyMoneyQifProfileEditor : public MyMoneyQifProfileEditorDecl
+{
+ Q_OBJECT
+
+public:
+ MyMoneyQifProfileEditor(const bool edit = false, QWidget *parent=0, const char *name=0);
+ virtual ~MyMoneyQifProfileEditor();
+
+ /**
+ * This method returns the currently selected profile in the list box.
+ */
+ const QString selectedProfile() const;
+
+public slots:
+ void slotOk(void);
+
+protected slots:
+ void slotLoadProfileFromConfig(const QString& name);
+ void slotReset(void);
+ void slotRename(void);
+ void slotDelete(void);
+ void slotNew(void);
+ void slotAmountTypeSelected(QListViewItem*);
+ void slotDecimalChanged(const QString& val);
+ void slotThousandsChanged(const QString& val);
+ void slotHelp(void);
+
+private:
+ void loadProfileListFromConfig(void);
+ void loadWidgets(void);
+ void showProfile(void);
+ void addProfile(const QString& name);
+ void deleteProfile(const QString& name);
+ const QString enterName(bool& ok);
+
+private:
+ bool m_inEdit;
+ MyMoneyQifProfile m_profile;
+ bool m_isDirty;
+ bool m_isAccepted;
+ QListViewItem* m_selectedAmountType;
+};
+
+#endif
diff --git a/kmymoney2/dialogs/mymoneyqifprofileeditordecl.ui b/kmymoney2/dialogs/mymoneyqifprofileeditordecl.ui
new file mode 100644
index 0000000..43e56fa
--- /dev/null
+++ b/kmymoney2/dialogs/mymoneyqifprofileeditordecl.ui
@@ -0,0 +1,905 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>MyMoneyQifProfileEditorDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>MyMoneyQifProfileEditorDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>736</width>
+ <height>300</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>QIF Profile Editor</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout15</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QListBox">
+ <item>
+ <property name="text">
+ <string></string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_profileListBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="variableWidth">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>profileTabs</cstring>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tabGeneral</cstring>
+ </property>
+ <attribute name="title">
+ <string>General</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout9</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel2_2_3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>140</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Void mark</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel2_2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>140</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Opening Balance text</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>m_editOpeningBalance</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>140</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Type field text</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="3" column="1">
+ <property name="name">
+ <cstring>m_editAccountDelimiter</cstring>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="4" column="1">
+ <property name="name">
+ <cstring>m_editVoidMark</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel2_2_2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>140</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Account delimiter</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>m_editType</cstring>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>m_editDescription</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>140</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Description</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_attemptMatch</cstring>
+ </property>
+ <property name="text">
+ <string>Attempt to match similar transactions</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer12</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tabDate</cstring>
+ </property>
+ <attribute name="title">
+ <string>Date</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout43</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout36</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KComboBox" row="0" column="1">
+ <property name="name">
+ <cstring>m_editDateFormat</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>The format of the dates in the QIF file.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>140</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Date Format</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>The format of the dates in the QIF file.</string>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="1" column="1">
+ <property name="name">
+ <cstring>m_editApostrophe</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>If a QIF file contains date entries with years represented with two digits then either an apostrophe or a slash may be used to delimit the year in the dates for certain centuries. This enables 1905 to be distinguished from 2005. Specify here which range of years will have year delimited by an apostrophe (eg. for Quicken this is usually 1900-1949).</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>140</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Apostrophe Handling</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>If a QIF file contains date entries with years represented with two digits then either an apostrophe or a slash may be used to delimit the year in the dates for certain centuries. This enables 1905 to be distinguished from 2005. Specify here which range of years will have year delimited by an apostrophe (eg. for Quicken this is usually 1900-1949).</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer9</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>90</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer8</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>80</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tabMoney</cstring>
+ </property>
+ <attribute name="title">
+ <string>Amounts</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QListView">
+ <column>
+ <property name="text">
+ <string>Field</string>
+ </property>
+ <property name="clickable">
+ <bool>false</bool>
+ </property>
+ <property name="resizable">
+ <bool>false</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>QIF-Record</string>
+ </property>
+ <property name="clickable">
+ <bool>false</bool>
+ </property>
+ <property name="resizable">
+ <bool>false</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Decimal Symbol</string>
+ </property>
+ <property name="clickable">
+ <bool>false</bool>
+ </property>
+ <property name="resizable">
+ <bool>false</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Thousand Delimiter</string>
+ </property>
+ <property name="clickable">
+ <bool>false</bool>
+ </property>
+ <property name="resizable">
+ <bool>false</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>SortColumnInvisible</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <item>
+ <property name="text">
+ <string>Value</string>
+ </property>
+ <property name="text">
+ <string>T</string>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="text">
+ <string>0</string>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Split-Value</string>
+ </property>
+ <property name="text">
+ <string>$</string>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Commission</string>
+ </property>
+ <property name="text">
+ <string>O</string>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="text">
+ <string>2</string>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Price</string>
+ </property>
+ <property name="text">
+ <string>I</string>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="text">
+ <string>3</string>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Quantity</string>
+ </property>
+ <property name="text">
+ <string>Q</string>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="text">
+ <string>4</string>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_editAmounts</cstring>
+ </property>
+ <property name="hScrollBarMode">
+ <enum>AlwaysOff</enum>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="defaultRenameAction">
+ <enum>Accept</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout41</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout40</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KComboBox" row="1" column="1">
+ <property name="name">
+ <cstring>m_thousandsBox</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Decimal Symbol</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel1_3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Thousands Separator</string>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="0" column="1">
+ <property name="name">
+ <cstring>m_decimalBox</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer7</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>100</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer8_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tabFilter</cstring>
+ </property>
+ <attribute name="title">
+ <string>Filter</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout14</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel1_4_2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>140</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Output filter location</string>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="0" column="1">
+ <property name="name">
+ <cstring>m_editInputFilterLocation</cstring>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="2" column="1">
+ <property name="name">
+ <cstring>m_editOutputFilterLocation</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel1_4_3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>140</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Input filter file type</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>m_editInputFilterFileType</cstring>
+ </property>
+ <property name="text">
+ <string>*.qif</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1_4</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>140</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Input filter location</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer9_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>90</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout14</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_helpButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Help</string>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>11</number>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_newButton</cstring>
+ </property>
+ <property name="text">
+ <string>New</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_deleteButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Delete</string>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>22</number>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_renameButton</cstring>
+ </property>
+ <property name="text">
+ <string>Rename</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>104</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_resetButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Reset</string>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>21</number>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_okButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_cancelButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>2</number>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<tabstops>
+ <tabstop>m_profileListBox</tabstop>
+ <tabstop>profileTabs</tabstop>
+ <tabstop>m_editDescription</tabstop>
+ <tabstop>m_editType</tabstop>
+ <tabstop>m_editOpeningBalance</tabstop>
+ <tabstop>m_editAccountDelimiter</tabstop>
+ <tabstop>m_editVoidMark</tabstop>
+ <tabstop>m_helpButton</tabstop>
+ <tabstop>m_newButton</tabstop>
+ <tabstop>m_deleteButton</tabstop>
+ <tabstop>m_renameButton</tabstop>
+ <tabstop>m_resetButton</tabstop>
+ <tabstop>m_okButton</tabstop>
+ <tabstop>m_cancelButton</tabstop>
+ <tabstop>m_editDateFormat</tabstop>
+ <tabstop>m_editApostrophe</tabstop>
+ <tabstop>m_decimalBox</tabstop>
+ <tabstop>m_thousandsBox</tabstop>
+ <tabstop>m_editAmounts</tabstop>
+ <tabstop>m_editInputFilterLocation</tabstop>
+ <tabstop>m_editOutputFilterLocation</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/settings/Makefile.am b/kmymoney2/dialogs/settings/Makefile.am
new file mode 100644
index 0000000..f296c11
--- /dev/null
+++ b/kmymoney2/dialogs/settings/Makefile.am
@@ -0,0 +1,25 @@
+noinst_LIBRARIES = libsettings.a
+KDE_OPTIONS = noautodist
+
+INCLUDES = $(all_includes) -I$(top_srcdir) -I.
+
+libsettings_a_METASOURCES = AUTO
+
+libsettings_a_SOURCES = ksettingsgeneraldecl.ui ksettingsgeneral.cpp \
+ ksettingsregisterdecl.ui ksettingsregister.cpp \
+ ksettingsgpgdecl.ui ksettingsgpg.cpp \
+ ksettingscolorsdecl.ui ksettingscolors.cpp \
+ ksettingsfontsdecl.ui ksettingsfonts.cpp \
+ ksettingsschedulesdecl.ui ksettingsschedules.cpp \
+ ksettingsonlinequotesdecl.ui ksettingsonlinequotes.cpp \
+ ksettingshomedecl.ui ksettingshome.cpp \
+ ksettingsforecastdecl.ui ksettingsforecast.cpp \
+ ksettingsplugins.cpp
+
+EXTRA_DIST = ksettingsgeneraldecl.ui ksettingsregisterdecl.ui ksettingsgpgdecl.ui ksettingscolorsdecl.ui ksettingsfontsdecl.ui ksettingsschedulesdecl.ui ksettingsonlinequotesdecl.ui ksettingshomedecl.ui ksettingsforecastdecl.ui
+
+DISTCLEANFILES= ksettingsgeneraldecl.cpp ksettingsgeneraldecl.h ksettingsregisterdecl.cpp ksettingsregisterdecl.h ksettingsgpgdecl.cpp ksettingsgpgdecl.h ksettingscolorsdecl.cpp ksettingscolorsdecl.h ksettingsfontsdecl.cpp ksettingsfontsdecl.h ksettingsschedulesdecl.cpp ksettingsschedulesdecl.h ksettingsonlinequotesdecl.cpp ksettingsonlinequotesdecl.h ksettingshomedecl.cpp ksettingshomedecl.h ksettingsforecastdecl.cpp ksettingsforecastdecl.h
+
+noinst_HEADERS = ksettingsgeneral.h ksettingsregister.h ksettingsgpg.h ksettingscolors.h ksettingsfonts.h ksettingsschedules.h ksettingsonlinequotes.h ksettingshome.h ksettingsforecast.h ksettingsplugins.h
+
+messages: rc.cpp
diff --git a/kmymoney2/dialogs/settings/ksettingscolors.cpp b/kmymoney2/dialogs/settings/ksettingscolors.cpp
new file mode 100644
index 0000000..727241c
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingscolors.cpp
@@ -0,0 +1,37 @@
+/***************************************************************************
+ ksettingscolors.cpp
+ --------------------
+ copyright : (C) 2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "ksettingscolors.h"
+
+KSettingsColors::KSettingsColors(QWidget* parent, const char* name) :
+ KSettingsColorsDecl(parent, name)
+{
+}
+
+KSettingsColors::~KSettingsColors()
+{
+}
+
+#include "ksettingscolors.moc"
diff --git a/kmymoney2/dialogs/settings/ksettingscolors.h b/kmymoney2/dialogs/settings/ksettingscolors.h
new file mode 100644
index 0000000..896ad85
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingscolors.h
@@ -0,0 +1,40 @@
+/***************************************************************************
+ ksettingscolors.h
+ -------------------
+ copyright : (C) 2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KSETTINGSCOLORS_H
+#define KSETTINGSCOLORS_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoney2/dialogs/settings/ksettingscolorsdecl.h"
+
+class KSettingsColors : public KSettingsColorsDecl
+{
+ Q_OBJECT
+
+public:
+ KSettingsColors(QWidget* parent = 0, const char* name = 0);
+ ~KSettingsColors();
+};
+#endif
+
diff --git a/kmymoney2/dialogs/settings/ksettingscolorsdecl.ui b/kmymoney2/dialogs/settings/ksettingscolorsdecl.ui
new file mode 100644
index 0000000..2d4d15b
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingscolorsdecl.ui
@@ -0,0 +1,406 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KSettingsColorsDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KSettingsColorsDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>453</width>
+ <height>402</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Color settings</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>tabWidget2</cstring>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Foreground</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox3</cstring>
+ </property>
+ <property name="title">
+ <string>Text colors</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Grid color</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel1_3</cstring>
+ </property>
+ <property name="text">
+ <string>Erronous transaction</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Value with missing conversion rate</string>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="2" column="1">
+ <property name="name">
+ <cstring>kcfg_listMissingConversionRate</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="color">
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>255</blue>
+ </color>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="3" column="1">
+ <property name="name">
+ <cstring>kcfg_listNegativeValueColor</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="color">
+ <color>
+ <red>255</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>Negative value</string>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="1" column="1">
+ <property name="name">
+ <cstring>kcfg_listErronousTransactionColor</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="color">
+ <color>
+ <red>255</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="0" column="1">
+ <property name="name">
+ <cstring>kcfg_listGridColor</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="color">
+ <color>
+ <red>154</red>
+ <green>154</green>
+ <blue>154</blue>
+ </color>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Background</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_useSystemColors</cstring>
+ </property>
+ <property name="text">
+ <string>Use system colors</string>
+ </property>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>m_individualColorFrame</cstring>
+ </property>
+ <property name="title">
+ <string>List background colors</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Normal</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Alternate</string>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="1" column="1">
+ <property name="name">
+ <cstring>kcfg_listColor</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="color">
+ <color>
+ <red>240</red>
+ <green>240</green>
+ <blue>240</blue>
+ </color>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="0" column="1">
+ <property name="name">
+ <cstring>kcfg_listBGColor</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="color">
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox5</cstring>
+ </property>
+ <property name="title">
+ <string>Special background colors</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1_5</cstring>
+ </property>
+ <property name="text">
+ <string>Ledger group separator</string>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="0" column="1">
+ <property name="name">
+ <cstring>kcfg_groupMarkerColor</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="color">
+ <color>
+ <red>255</red>
+ <green>170</green>
+ <blue>0</blue>
+ </color>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>Required field</string>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="1" column="1">
+ <property name="name">
+ <cstring>kcfg_requiredFieldColor</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="color">
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>221</blue>
+ </color>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel1_4</cstring>
+ </property>
+ <property name="text">
+ <string>Imported transaction</string>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="2" column="1">
+ <property name="name">
+ <cstring>kcfg_importedTransactionColor</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="color">
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>0</blue>
+ </color>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Matched transaction</string>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="3" column="1">
+ <property name="name">
+ <cstring>kcfg_matchedTransactionColor</cstring>
+ </property>
+ <property name="paletteBackgroundColor">
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>221</blue>
+ </color>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="color">
+ <color>
+ <red>152</red>
+ <green>251</green>
+ <blue>152</blue>
+ </color>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>kcfg_useSystemColors</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>m_individualColorFrame</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/settings/ksettingsfonts.cpp b/kmymoney2/dialogs/settings/ksettingsfonts.cpp
new file mode 100644
index 0000000..a4aef71
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingsfonts.cpp
@@ -0,0 +1,37 @@
+/***************************************************************************
+ ksettingsfonts.cpp
+ --------------------
+ copyright : (C) 2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "ksettingsfonts.h"
+
+KSettingsFonts::KSettingsFonts(QWidget* parent, const char* name) :
+ KSettingsFontsDecl(parent, name)
+{
+}
+
+KSettingsFonts::~KSettingsFonts()
+{
+}
+
+#include "ksettingsfonts.moc"
diff --git a/kmymoney2/dialogs/settings/ksettingsfonts.h b/kmymoney2/dialogs/settings/ksettingsfonts.h
new file mode 100644
index 0000000..40cb9de
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingsfonts.h
@@ -0,0 +1,40 @@
+/***************************************************************************
+ ksettingsfonts.h
+ -------------------
+ copyright : (C) 2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KSETTINGSFONTS_H
+#define KSETTINGSFONTS_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoney2/dialogs/settings/ksettingsfontsdecl.h"
+
+class KSettingsFonts : public KSettingsFontsDecl
+{
+ Q_OBJECT
+
+public:
+ KSettingsFonts(QWidget* parent = 0, const char* name = 0);
+ ~KSettingsFonts();
+};
+#endif
+
diff --git a/kmymoney2/dialogs/settings/ksettingsfontsdecl.ui b/kmymoney2/dialogs/settings/ksettingsfontsdecl.ui
new file mode 100644
index 0000000..cbaefeb
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingsfontsdecl.ui
@@ -0,0 +1,131 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KSettingsFontsDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KSettingsFontsDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>398</width>
+ <height>222</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Font settings</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_useSystemFont</cstring>
+ </property>
+ <property name="text">
+ <string>Use system fonts</string>
+ </property>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>m_individualFontsFrame</cstring>
+ </property>
+ <property name="title">
+ <string>Individual font settings</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KFontRequester" row="0" column="2">
+ <property name="name">
+ <cstring>kcfg_listCellFont</cstring>
+ </property>
+ </widget>
+ <widget class="KFontRequester" row="1" column="2">
+ <property name="name">
+ <cstring>kcfg_listHeaderFont</cstring>
+ </property>
+ </widget>
+ <spacer row="0" column="1">
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>110</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer row="1" column="1">
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>100</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Cell font</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Header font</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>30</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>kcfg_useSystemFont</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>m_individualFontsFrame</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/settings/ksettingsforecast.cpp b/kmymoney2/dialogs/settings/ksettingsforecast.cpp
new file mode 100644
index 0000000..0a74252
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingsforecast.cpp
@@ -0,0 +1,37 @@
+/***************************************************************************
+ ksettingsforecast.cpp
+ --------------------
+ copyright : (C) 2007 by Alvaro Soliverez
+ email : asoliverez@gmail.com
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "ksettingsforecast.h"
+
+KSettingsForecast::KSettingsForecast(QWidget* parent, const char* name) :
+ KSettingsForecastDecl(parent, name)
+{
+}
+
+KSettingsForecast::~KSettingsForecast()
+{
+}
+
+#include "ksettingsforecast.moc"
diff --git a/kmymoney2/dialogs/settings/ksettingsforecast.h b/kmymoney2/dialogs/settings/ksettingsforecast.h
new file mode 100644
index 0000000..7195eee
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingsforecast.h
@@ -0,0 +1,41 @@
+/***************************************************************************
+ ksettingsforecast.h
+ -------------------
+ copyright : (C) 2007 by Alvaro Soliverez
+ email : asoliverez@gmail.com
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KSETTINGSFORECAST_H
+#define KSETTINGSFORECAST_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoney2/dialogs/settings/ksettingsforecastdecl.h"
+
+class KSettingsForecast : public KSettingsForecastDecl
+{
+ Q_OBJECT
+
+public:
+ KSettingsForecast(QWidget* parent = 0, const char* name = 0);
+ ~KSettingsForecast();
+};
+#endif
+
diff --git a/kmymoney2/dialogs/settings/ksettingsforecastdecl.ui b/kmymoney2/dialogs/settings/ksettingsforecastdecl.ui
new file mode 100644
index 0000000..c412f81
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingsforecastdecl.ui
@@ -0,0 +1,268 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KSettingsForecastDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KSettingsForecastDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>497</width>
+ <height>379</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Forecast Settings</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox" row="0" column="0">
+ <property name="name">
+ <cstring>groupBox6</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>layout7</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QSpinBox" row="1" column="1">
+ <property name="name">
+ <cstring>kcfg_forecastAccountCycle</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Number of Days of Account Cycle:</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="0" column="1">
+ <property name="name">
+ <cstring>kcfg_forecastDays</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Day of Month to start Forecast:</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="2" column="1">
+ <property name="name">
+ <cstring>kcfg_beginForecastDay</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Number of Days to Forecast:</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer row="0" column="1">
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>133</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <widget class="QButtonGroup" row="1" column="0">
+ <property name="name">
+ <cstring>kcfg_forecastMethod</cstring>
+ </property>
+ <property name="title">
+ <string>Forecast Method</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>radioButton9</cstring>
+ </property>
+ <property name="text">
+ <string>Scheduled and Future Transactions</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>radioButton10</cstring>
+ </property>
+ <property name="text">
+ <string>History-based</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>1</number>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox" row="2" column="0">
+ <property name="name">
+ <cstring>groupBox3</cstring>
+ </property>
+ <property name="title">
+ <string>History-based settings</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Number of Cycles to use in Forecast:</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>kcfg_forecastCycles</cstring>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer7</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>130</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ <widget class="QButtonGroup" row="1" column="0">
+ <property name="name">
+ <cstring>kcfg_historyMethod</cstring>
+ </property>
+ <property name="title">
+ <string>History Forecast Method</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>radioButton11</cstring>
+ </property>
+ <property name="text">
+ <string>Simple Moving Average</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>radioButton12</cstring>
+ </property>
+ <property name="text">
+ <string>Weighted Moving Average</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>radioButton13</cstring>
+ </property>
+ <property name="text">
+ <string>Linear Regression</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>2</number>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+ </widget>
+ </grid>
+ </widget>
+ <spacer row="1" column="0">
+ <property name="name">
+ <cstring>spacer10</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/settings/ksettingsgeneral.cpp b/kmymoney2/dialogs/settings/ksettingsgeneral.cpp
new file mode 100644
index 0000000..5acdd08
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingsgeneral.cpp
@@ -0,0 +1,63 @@
+/***************************************************************************
+ ksettingsgeneral.cpp
+ --------------------
+ copyright : (C) 2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlabel.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klineedit.h>
+#include <klistview.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/kmymoneydateinput.h>
+#include "ksettingsgeneral.h"
+
+KSettingsGeneral::KSettingsGeneral(QWidget* parent, const char* name) :
+ KSettingsGeneralDecl(parent, name)
+{
+ // hide the internally used date field
+ kcfg_StartDate->hide();
+ kcfg_hiddenViews->hide();
+
+ // for now, we don't show the widgets for view selection
+ m_viewLabel->hide();
+ m_viewList->hide();
+
+ // setup connections, so that the sort optios get loaded once the edit fields are filled
+ connect(kcfg_StartDate, SIGNAL(valueChanged(const QDate&)), this, SLOT(slotLoadStartDate(const QDate&)));
+
+ // setup connections, so that changes by the user are forwarded to the (hidden) edit fields
+ connect(m_startDateEdit, SIGNAL(dateChanged(const QDate&)), kcfg_StartDate, SLOT(setDate(const QDate&)));
+}
+
+KSettingsGeneral::~KSettingsGeneral()
+{
+}
+
+void KSettingsGeneral::slotLoadStartDate(const QDate&)
+{
+ // only need this once
+ disconnect(kcfg_StartDate, SIGNAL(valueChanged(const QDate&)), this, SLOT(slotLoadStartDate(const QDate&)));
+ m_startDateEdit->setDate(kcfg_StartDate->date());
+}
+
+#include "ksettingsgeneral.moc"
diff --git a/kmymoney2/dialogs/settings/ksettingsgeneral.h b/kmymoney2/dialogs/settings/ksettingsgeneral.h
new file mode 100644
index 0000000..3bd0992
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingsgeneral.h
@@ -0,0 +1,44 @@
+/***************************************************************************
+ ksettingsgeneral.h
+ -------------------
+ copyright : (C) 2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KSETTINGSGENERAL_H
+#define KSETTINGSGENERAL_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoney2/dialogs/settings/ksettingsgeneraldecl.h"
+
+class KSettingsGeneral : public KSettingsGeneralDecl
+{
+ Q_OBJECT
+
+public:
+ KSettingsGeneral(QWidget* parent = 0, const char* name = 0);
+ ~KSettingsGeneral();
+
+protected slots:
+ void slotLoadStartDate(const QDate&);
+
+};
+#endif
+
diff --git a/kmymoney2/dialogs/settings/ksettingsgeneraldecl.ui b/kmymoney2/dialogs/settings/ksettingsgeneraldecl.ui
new file mode 100644
index 0000000..9eeb181
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingsgeneraldecl.ui
@@ -0,0 +1,646 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KSettingsGeneralDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KSettingsGeneralDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>614</width>
+ <height>438</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>General Settings</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>tabWidget2</cstring>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Global</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>kcfg_StartLastViewSelected</cstring>
+ </property>
+ <property name="title">
+ <string>Startup page options</string>
+ </property>
+ <property name="exclusive">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>radioButton1</cstring>
+ </property>
+ <property name="text">
+ <string>Start with homepage</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>radioButton2</cstring>
+ </property>
+ <property name="text">
+ <string>Start with last selected view</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>1</number>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox1</cstring>
+ </property>
+ <property name="title">
+ <string>Precision settings</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Price precision</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>kcfg_PricePrecision</cstring>
+ </property>
+ <property name="maxValue">
+ <number>10</number>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>digits</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>61</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox3</cstring>
+ </property>
+ <property name="title">
+ <string>Autosave options</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_AutoSaveFile</cstring>
+ </property>
+ <property name="text">
+ <string>Autosave periodically</string>
+ </property>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>m_periodFrame</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Plain</enum>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>kcfg_AutoSavePeriod</cstring>
+ </property>
+ <property name="maxValue">
+ <number>60</number>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>minutes</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>354</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox6</cstring>
+ </property>
+ <property name="title">
+ <string>Fiscal Year</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Your fiscal year starts on</string>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox">
+ <property name="name">
+ <cstring>kcfg_FiscalYearBeginDay</cstring>
+ </property>
+ </widget>
+ <widget class="KComboBox">
+ <item>
+ <property name="text">
+ <string>January</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>February</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>March</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>April</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>May</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>June</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>July</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>August</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>September</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>October</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>November</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>December</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>kcfg_FiscalYearBegin</cstring>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer11</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>90</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Views</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_syncLedgerInvestment</cstring>
+ </property>
+ <property name="text">
+ <string>Synchronize account selection of ledger and investment view</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>kcfg_hiddenViews</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_viewLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Check the views you want to enable, uncheck those you want to hide, because you don't need the functionality.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <widget class="KListView">
+ <property name="name">
+ <cstring>m_viewList</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>2</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>kcfg_iconSize</cstring>
+ </property>
+ <property name="title">
+ <string>Icon size of navigation bar</string>
+ </property>
+ <property name="exclusive">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton" row="0" column="0">
+ <property name="name">
+ <cstring>radioButton3</cstring>
+ </property>
+ <property name="text">
+ <string>Micro (16px)</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton" row="1" column="0">
+ <property name="name">
+ <cstring>radioButton4</cstring>
+ </property>
+ <property name="text">
+ <string>Small (32px)</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton" row="0" column="1">
+ <property name="name">
+ <cstring>radioButton5</cstring>
+ </property>
+ <property name="text">
+ <string>Normal (48px)</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QRadioButton" row="1" column="1">
+ <property name="name">
+ <cstring>radioButton6</cstring>
+ </property>
+ <property name="text">
+ <string>Large (64px)</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_showTitleBar</cstring>
+ </property>
+ <property name="text">
+ <string>Show title bar on each page</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer7</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>TabPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Filter</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox2</cstring>
+ </property>
+ <property name="title">
+ <string>Accounts / Categories</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_HideUnusedCategory</cstring>
+ </property>
+ <property name="text">
+ <string>Don't show unused categories</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This option hides all categories in the categories view that are not used in at least a single transaction. They are still shown in the category selection lists.</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_HideClosedAccounts</cstring>
+ </property>
+ <property name="text">
+ <string>Don't show closed accounts</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This option hides all accounts that have been closed by the user in views and selection lists.
+
+You can use &lt;b&gt;View/Show all accounts&lt;/b&gt; to temporarily show hidden accounts in the views.</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_ExpertMode</cstring>
+ </property>
+ <property name="text">
+ <string>Show equity accounts</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox4</cstring>
+ </property>
+ <property name="title">
+ <string>Schedules</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_HideFinishedSchedules</cstring>
+ </property>
+ <property name="text">
+ <string>Don't show finished schedules</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This option hides all finished schedules in the schedules view.</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox5</cstring>
+ </property>
+ <property name="title">
+ <string>Transactions</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1_3</cstring>
+ </property>
+ <property name="text">
+ <string>Don't show transactions prior to</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyDateInput">
+ <property name="name">
+ <cstring>m_startDateEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QDateEdit">
+ <property name="name">
+ <cstring>kcfg_StartDate</cstring>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer10</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>63</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_HideReconciledTransactions</cstring>
+ </property>
+ <property name="text">
+ <string>Don't show reconciled transactions</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This option hides all reconciled transactions in the ledger view.</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>30</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<connections>
+ <connection>
+ <sender>kcfg_AutoSaveFile</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>m_periodFrame</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/settings/ksettingsgpg.cpp b/kmymoney2/dialogs/settings/ksettingsgpg.cpp
new file mode 100644
index 0000000..2dba83e
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingsgpg.cpp
@@ -0,0 +1,200 @@
+/***************************************************************************
+ ksettingsgpg.cpp
+ --------------------
+ copyright : (C) 2005, 2008 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qgroupbox.h>
+#include <qcheckbox.h>
+#include <qregexp.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kled.h>
+#include <klineedit.h>
+#include <keditlistbox.h>
+#include <kcombobox.h>
+#include <kmessagebox.h>
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "ksettingsgpg.h"
+#include <kmymoney/kgpgfile.h>
+
+#define RECOVER_KEY_ID "0xD2B08440"
+#define RECOVER_KEY_ID_FULL "59B0F826D2B08440"
+
+KSettingsGpg::KSettingsGpg(QWidget* parent, const char* name) :
+ KSettingsGpgDecl(parent, name),
+ m_checkCount(0),
+ m_needCheckList(true),
+ m_listOk(false)
+{
+ setEnabled(KGPGFile::GPGAvailable());
+
+ // don't show the widget in which the master key is actually kept
+ kcfg_GpgRecipient->hide();
+
+ connect(kcfg_WriteDataEncrypted, SIGNAL(toggled(bool)), this, SLOT(slotStatusChanged(bool)));
+ connect(m_masterKeyCombo, SIGNAL(activated(int)), this, SLOT(slotIdChanged()));
+ connect(kcfg_GpgRecipientList, SIGNAL(changed()), this, SLOT(slotIdChanged()));
+ connect(kcfg_GpgRecipientList, SIGNAL(added(const QString&)), this, SLOT(slotKeyListChanged()));
+ connect(kcfg_GpgRecipientList, SIGNAL(removed(const QString&)), this, SLOT(slotKeyListChanged()));
+
+ // Initial state setup
+ slotStatusChanged(kcfg_WriteDataEncrypted->isChecked());
+}
+
+KSettingsGpg::~KSettingsGpg()
+{
+}
+
+void KSettingsGpg::slotKeyListChanged(void)
+{
+ m_needCheckList = true;
+ slotIdChanged();
+}
+
+void KSettingsGpg::slotIdChanged(void)
+{
+ // this looks a bit awkward. Here's why: KGPGFile::keyAvailable() starts
+ // an external task and processes UI events while it waits for the external
+ // process to finish. Thus, the first time we get here, the external process
+ // is started and the user may press a second key which calls this routine
+ // again.
+ //
+ // The second invocation is counted, but the check is not started until the
+ // first one finishes. Once the external process finishes, we check if we
+ // were called in the meantime and restart the check.
+ if(++m_checkCount == 1) {
+ while(1) {
+ // first we check the current edit field if filled
+ bool keysOk = true;
+ if(!kcfg_GpgRecipientList->currentText().isEmpty()) {
+ keysOk = KGPGFile::keyAvailable(kcfg_GpgRecipientList->currentText());
+ }
+
+ // if it is available, then scan the current list if we need to
+ if(keysOk) {
+ if(m_needCheckList) {
+ QStringList keys = kcfg_GpgRecipientList->items();
+ QStringList::const_iterator it_s;
+ for(it_s = keys.begin(); keysOk && it_s != keys.end(); ++it_s) {
+ if(!KGPGFile::keyAvailable(*it_s))
+ keysOk = false;
+ }
+ m_listOk = keysOk;
+ m_needCheckList = false;
+
+ } else {
+ keysOk = m_listOk;
+ }
+ }
+
+ // did we receive some more requests to check?
+ if(m_checkCount > 1) {
+ m_checkCount = 1;
+ continue;
+ }
+
+ // if we have a master key, we store it in the hidden widget
+ if(m_masterKeyCombo->currentItem() != 0) {
+ QRegExp keyExp(".* \\((.*)\\)");
+ if(keyExp.search(m_masterKeyCombo->currentText()) != -1) {
+ kcfg_GpgRecipient->setText(keyExp.cap(1));
+ }
+ }
+
+ m_userKeysFound->setState(static_cast<KLed::State>(keysOk && (kcfg_GpgRecipientList->items().count() != 0) ? KLed::On : KLed::Off));
+ break;
+ }
+
+ --m_checkCount;
+ }
+}
+
+void KSettingsGpg::show(void)
+{
+ QString masterKey;
+
+ if(m_masterKeyCombo->currentItem() != 0) {
+ QRegExp keyExp(".* \\((.*)\\)");
+ if(keyExp.search(m_masterKeyCombo->currentText()) != -1) {
+ masterKey = keyExp.cap(1);
+ }
+ } else
+ masterKey = kcfg_GpgRecipient->text();
+
+ // fill the secret key combobox with a fresh list
+ m_masterKeyCombo->clear();
+ QStringList keyList;
+ KGPGFile::secretKeyList(keyList);
+
+ for(QStringList::iterator it = keyList.begin(); it != keyList.end(); ++it) {
+ QStringList fields = QStringList::split(":", *it);
+ if(fields[0] != RECOVER_KEY_ID_FULL) {
+ // replace parenthesis in name field with brackets
+ QString name = fields[1];
+ name.replace('(', "[");
+ name.replace(')', "]");
+ name = QString("%1 (0x%2)").arg(name).arg(fields[0]);
+ m_masterKeyCombo->insertItem(name);
+ if(name.contains(masterKey))
+ m_masterKeyCombo->setCurrentItem(name);
+ }
+ }
+
+ // if we don't have at least one secret key, we turn off encryption
+ if(keyList.isEmpty()) {
+ setEnabled(false);
+ kcfg_WriteDataEncrypted->setChecked(false);
+ }
+
+ slotStatusChanged(kcfg_WriteDataEncrypted->isChecked());
+ KSettingsGpgDecl::show();
+}
+
+void KSettingsGpg::slotStatusChanged(bool state)
+{
+ static bool oncePerSession = true;
+ if(state && !KGPGFile::GPGAvailable())
+ state = false;
+
+ if((state == true) && (oncePerSession == true) && isVisible()) {
+ KMessageBox::information(this, QString("<qt>%1</qt>").arg(i18n("You have turned on the GPG encryption support. This means, that new files will be stored encrypted. Existing files will not be encrypted automatically. To achieve encryption of existing files, please use the <b>File/Save as...</b> feature and store the file under a different name. Once confident with the result, feel free to delete the old file and rename the encrypted one to the old name.")), i18n("GPG encryption activated"), "GpgEncryptionActivated");
+ oncePerSession = false;
+ }
+
+ m_idGroup->setEnabled(state);
+ kcfg_EncryptRecover->setEnabled(state);
+ m_masterKeyCombo->setEnabled(state);
+ kcfg_GpgRecipientList->setEnabled(state);
+
+ if(state) {
+ m_recoverKeyFound->setState((KLed::State) (KGPGFile::keyAvailable(RECOVER_KEY_ID) ? KLed::On : KLed::Off));
+ kcfg_EncryptRecover->setEnabled(m_recoverKeyFound->state() == KLed::On);
+ slotIdChanged();
+
+ } else {
+ m_recoverKeyFound->setState(KLed::Off);
+ m_userKeysFound->setState(KLed::Off);
+ }
+}
+
+#include "ksettingsgpg.moc"
diff --git a/kmymoney2/dialogs/settings/ksettingsgpg.h b/kmymoney2/dialogs/settings/ksettingsgpg.h
new file mode 100644
index 0000000..ecea6ab
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingsgpg.h
@@ -0,0 +1,54 @@
+/***************************************************************************
+ ksettingsgpg.h
+ -------------------
+ copyright : (C) 2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KSETTINGSGPG_H
+#define KSETTINGSGPG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoney2/dialogs/settings/ksettingsgpgdecl.h"
+
+class KSettingsGpg : public KSettingsGpgDecl
+{
+ Q_OBJECT
+
+public:
+ KSettingsGpg(QWidget* parent = 0, const char* name = 0);
+ ~KSettingsGpg();
+
+public slots:
+ void show(void);
+
+protected slots:
+ void slotStatusChanged(bool state);
+ void slotIdChanged(void);
+ void slotKeyListChanged(void);
+
+private:
+ int m_checkCount;
+ bool m_needCheckList;
+ bool m_listOk;
+};
+#endif
+
diff --git a/kmymoney2/dialogs/settings/ksettingsgpgdecl.ui b/kmymoney2/dialogs/settings/ksettingsgpgdecl.ui
new file mode 100644
index 0000000..15d3bbe
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingsgpgdecl.ui
@@ -0,0 +1,238 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KSettingsGpgDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KSettingsGpgDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>601</width>
+ <height>418</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>GPG encryption settings</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This page allows you to set the parameters for encrypted file storage of your &lt;b&gt;KMyMoney&lt;/b&gt; data based on &lt;b&gt;GPG&lt;/b&gt;.&lt;p&gt;
+Access to the settings is disabled if &lt;b&gt;GPG&lt;/b&gt; could not be detected on your system. In this case, please make sure that &lt;b&gt;GPG&lt;/b&gt; is working properly for the current user.&lt;p&gt;
+The &lt;i&gt;additional recovery encryption&lt;/i&gt; is only accessible, if the necessary key for &lt;b&gt;kmymoney-recover@users.sourceforge.net&lt;/b&gt; with id 0x8AFDDC8E is found in your keyring.</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_WriteDataEncrypted</cstring>
+ </property>
+ <property name="text">
+ <string>Use GPG encryption</string>
+ </property>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>m_idGroup</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="title">
+ <string>GPG encryption</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>Your key</string>
+ </property>
+ </widget>
+ <widget class="KComboBox">
+ <property name="name">
+ <cstring>m_masterKeyCombo</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This combo box lists all the secret keys you have in your keyring. Select the one you want to use for encryption when saving to a file.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>kcfg_GpgRecipient</cstring>
+ </property>
+ </widget>
+ <widget class="KEditListBox">
+ <property name="name">
+ <cstring>kcfg_GpgRecipientList</cstring>
+ </property>
+ <property name="title">
+ <string>Additonal keys</string>
+ </property>
+ <property name="checkable">
+ <bool>false</bool>
+ </property>
+ <property name="buttons">
+ <set>Remove|Add</set>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Enter the id of the key you want to use for data encryption. This can either be an e-mail address or the hexadecimal key id. In case of the key id don't forget the leading 0x.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KLed">
+ <property name="name">
+ <cstring>m_userKeysFound</cstring>
+ </property>
+ <property name="shape">
+ <enum>Circular</enum>
+ </property>
+ <property name="look">
+ <enum>Sunken</enum>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This symbol denotes, if the key for the given user id has been found in your keyring. It is green when found, dark otherwise.</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Keys for all of the above user ids found</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>50</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KLed">
+ <property name="name">
+ <cstring>m_recoverKeyFound</cstring>
+ </property>
+ <property name="shape">
+ <enum>Circular</enum>
+ </property>
+ <property name="look">
+ <enum>Sunken</enum>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This symbol denotes, if the KMyMoney recovery key has been found in your keyring. It is green when found, dark otherwise.</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Recover Key available in keyring</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_EncryptRecover</cstring>
+ </property>
+ <property name="text">
+ <string>Also encrypt with KMyMoney's recover key</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>You can specify to encrypt the data also with the KMyMoney recover key. Only the core KMyMoney developers are in posession of the respective private key required to read back such encrypted data.&lt;p&gt;
+
+This mechanism is provided for the case that you have lost your key and cannot access your data anymore. With this option activated, the KMyMoney developers can decrypt the data and supply you with it in a readable form. Please be prepared, that you have to answer a few detailed questions about the contents of your data before we will send it out..</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>30</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/settings/ksettingshome.cpp b/kmymoney2/dialogs/settings/ksettingshome.cpp
new file mode 100644
index 0000000..d2f471b
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingshome.cpp
@@ -0,0 +1,173 @@
+/***************************************************************************
+ ksettingshome.cpp
+ --------------------
+ copyright : (C) 2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstringlist.h>
+#include <qheader.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klistview.h>
+#include <kpushbutton.h>
+#include <kglobalsettings.h>
+#include <kglobal.h>
+#include <kiconloader.h>
+#include <klocale.h>
+#include <ktextedit.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "ksettingshome.h"
+#include "kmymoney2/kmymoneyglobalsettings.h"
+#include "kmymoney2/kmymoneyutils.h"
+
+KSettingsHome::KSettingsHome(QWidget* parent, const char* name) :
+ KSettingsHomeDecl(parent, name),
+ m_noNeedToUpdateList(false)
+{
+ m_homePageList->addColumn("");
+ m_homePageList->setSorting(-1);
+ m_homePageList->header()->hide();
+ m_homePageList->setAllColumnsShowFocus(true);
+
+ KIconLoader* il = KGlobal::iconLoader();
+ KGuiItem upButtonItem( i18n( "&Up" ),
+ QIconSet(il->loadIcon("up", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Move selected item up"),
+ i18n("Use this to move the selected item up by one position in the list."));
+ KGuiItem downButtonItem( i18n( "&Down" ),
+ QIconSet(il->loadIcon("down", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Move selected item down"),
+ i18n("Use this to move the selected item down by one position in the list."));
+
+ m_upButton->setGuiItem(upButtonItem);
+ m_upButton->setEnabled(false);
+ m_downButton->setGuiItem(downButtonItem);
+ m_downButton->setEnabled(false);
+
+ // connect this, so that the list gets loaded once the edit field is filled
+ connect(kcfg_ItemList, SIGNAL(textChanged()), this, SLOT(slotLoadItems()));
+
+ connect(m_homePageList, SIGNAL(selectionChanged(QListViewItem*)),
+ this, SLOT(slotSelectHomePageItem(QListViewItem *)));
+ connect(m_homePageList, SIGNAL(pressed(QListViewItem*)), this, SLOT(slotUpdateItemList()));
+
+ connect(m_upButton, SIGNAL(clicked()), this, SLOT(slotMoveUp()));
+ connect(m_downButton, SIGNAL(clicked()), this, SLOT(slotMoveDown()));
+
+ // Don't show it to the user, we only need it to load and save the settings
+ kcfg_ItemList->hide();
+}
+
+KSettingsHome::~KSettingsHome()
+{
+}
+
+void KSettingsHome::slotLoadItems(void)
+{
+ if(m_noNeedToUpdateList)
+ return;
+
+ QStringList list = KMyMoneyGlobalSettings::itemList();
+ QStringList::ConstIterator it;
+ int w = 0;
+ m_homePageList->clear();
+ QCheckListItem *sel = 0;
+
+ QFontMetrics fm( KGlobalSettings::generalFont());
+ QCheckListItem* last = 0;
+
+ for(it = list.begin(); it != list.end(); ++it) {
+ int idx = (*it).toInt();
+ // skip over unknown item entries
+ if(idx == 0)
+ continue;
+ bool enabled = idx > 0;
+ if(!enabled) idx = -idx;
+ QCheckListItem* item = new QCheckListItem(m_homePageList, KMyMoneyUtils::homePageItemToString(idx), QCheckListItem::CheckBox);
+ if(last)
+ item->moveItem(last);
+
+ // qDebug("Adding %s", item->text(0).latin1());
+ item->setOn(enabled);
+ if(item->width(fm, m_homePageList, 0) > w)
+ w = item->width(fm, m_homePageList, 0);
+
+ if(sel == 0)
+ sel = item;
+ last = item;
+ }
+
+ if(sel) {
+ m_homePageList->setSelected(sel, true);
+ slotSelectHomePageItem(sel);
+ }
+}
+
+void KSettingsHome::slotUpdateItemList(void)
+{
+ QString list;
+ QListViewItem *it;
+
+ for(it = m_homePageList->firstChild(); it; ) {
+ int item = KMyMoneyUtils::stringToHomePageItem(it->text(0));
+ if(!(static_cast<QCheckListItem*>(it)->isOn()))
+ item = -item;
+ list += QString::number(item);
+ it = it->nextSibling();
+ if(it)
+ list += ",";
+ }
+
+ // don't update the list
+ m_noNeedToUpdateList = true;
+ kcfg_ItemList->setText(list);
+ m_noNeedToUpdateList = false;
+}
+
+void KSettingsHome::slotSelectHomePageItem(QListViewItem *item)
+{
+ m_upButton->setEnabled(m_homePageList->firstChild() != item);
+ m_downButton->setEnabled(item->nextSibling());
+}
+
+void KSettingsHome::slotMoveUp(void)
+{
+ QListViewItem *item = m_homePageList->currentItem();
+ QListViewItem *prev = item->itemAbove();
+ if(prev) {
+ prev->moveItem(item);
+ slotSelectHomePageItem(item);
+ slotUpdateItemList();
+ }
+}
+
+void KSettingsHome::slotMoveDown(void)
+{
+ QListViewItem *item = m_homePageList->currentItem();
+ QListViewItem *next = item->nextSibling();
+ if(next) {
+ item->moveItem(next);
+ slotSelectHomePageItem(item);
+ slotUpdateItemList();
+ }
+}
+
+#include "ksettingshome.moc"
diff --git a/kmymoney2/dialogs/settings/ksettingshome.h b/kmymoney2/dialogs/settings/ksettingshome.h
new file mode 100644
index 0000000..c461210
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingshome.h
@@ -0,0 +1,52 @@
+/***************************************************************************
+ ksettingshome.h
+ -------------------
+ copyright : (C) 2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KSETTINGSHOME_H
+#define KSETTINGSHOME_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+class QListViewItem;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoney2/dialogs/settings/ksettingshomedecl.h"
+
+class KSettingsHome : public KSettingsHomeDecl
+{
+ Q_OBJECT
+
+public:
+ KSettingsHome(QWidget* parent = 0, const char* name = 0);
+ ~KSettingsHome();
+
+protected slots:
+ void slotLoadItems(void);
+ void slotUpdateItemList(void);
+ void slotSelectHomePageItem(QListViewItem *);
+ void slotMoveUp(void);
+ void slotMoveDown(void);
+
+private:
+ bool m_noNeedToUpdateList;
+};
+#endif
+
diff --git a/kmymoney2/dialogs/settings/ksettingshomedecl.ui b/kmymoney2/dialogs/settings/ksettingshomedecl.ui
new file mode 100644
index 0000000..49f6251
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingshomedecl.ui
@@ -0,0 +1,231 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KSettingsHomeDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KSettingsHomeDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>659</width>
+ <height>414</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Homepage Settings</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout9</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="2">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_upButton</cstring>
+ </property>
+ <property name="text">
+ <string>Up</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_downButton</cstring>
+ </property>
+ <property name="text">
+ <string>Down</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer15</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>70</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <spacer row="0" column="3">
+ <property name="name">
+ <cstring>spacer16</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>80</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="1" column="2" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Selected entries are shown on the home page of the application.&lt;p&gt;
+Use the buttons and checkboxes to customize the layout of the home page.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <widget class="KTextEdit" row="0" column="0" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>kcfg_ItemList</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="KListView" row="0" column="1" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>m_homePageList</cstring>
+ </property>
+ <property name="fullWidth">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupbox</cstring>
+ </property>
+ <property name="title">
+ <string>Homepage/Summary page font scaling</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>percentageLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Percentage of default font size:</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>kcfg_RememberFontSize</cstring>
+ </property>
+ <property name="text">
+ <string>Remember font size when leaving the program if manually changed with mouse-wheel</string>
+ </property>
+ </widget>
+ <widget class="KIntNumInput" row="0" column="1">
+ <property name="name">
+ <cstring>kcfg_FontSizePercentage</cstring>
+ </property>
+ <property name="value">
+ <number>100</number>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ <property name="maxValue">
+ <number>1000</number>
+ </property>
+ </widget>
+ <spacer row="0" column="2">
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupbox2</cstring>
+ </property>
+ <property name="title">
+ <string>Information display</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox" row="0" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>kcfg_ShowLimitInfo</cstring>
+ </property>
+ <property name="text">
+ <string>Show Account Limit Information</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/settings/ksettingsonlinequotes.cpp b/kmymoney2/dialogs/settings/ksettingsonlinequotes.cpp
new file mode 100644
index 0000000..db4dc1e
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingsonlinequotes.cpp
@@ -0,0 +1,219 @@
+/***************************************************************************
+ kmymoneyonlinequoteconfig.cpp - description
+ -------------------
+ begin : Thu Dec 30 2004
+ copyright : (C) 2004 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qregexp.h>
+#include <qcheckbox.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kconfig.h>
+#include <kglobal.h>
+#include <klocale.h>
+#include <klistview.h>
+#include <kiconloader.h>
+#include <kguiitem.h>
+#include <kpushbutton.h>
+#include <klineedit.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "ksettingsonlinequotes.h"
+#include "kmymoney2/converter/webpricequote.h"
+
+KSettingsOnlineQuotes::KSettingsOnlineQuotes(QWidget *parent, const char *name )
+ : KSettingsOnlineQuotesDecl(parent, name)
+{
+ QStringList groups = WebPriceQuote::quoteSources();
+
+ loadList(true /*updateResetList*/);
+
+ m_updateButton->setEnabled(false);
+
+ KIconLoader* il = KGlobal::iconLoader();
+ KGuiItem updateButtenItem( i18n("&Update" ),
+ QIconSet(il->loadIcon("button_ok", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Accepts the entered data and stores it"),
+ i18n("Use this to accept the modified data."));
+ m_updateButton->setGuiItem(updateButtenItem);
+
+ KGuiItem deleteButtenItem( i18n( "&Delete" ),
+ QIconSet(il->loadIcon("editdelete", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Delete the selected source entry"),
+ i18n("Use this to delete the selected online source entry"));
+ m_deleteButton->setGuiItem(deleteButtenItem);
+
+ KGuiItem newButtenItem( i18n( "&New..." ),
+ QIconSet(il->loadIcon("filenew", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Create a new source entry for online quotes"),
+ i18n("Use this to create a new entry for online quotes"));
+ m_newButton->setGuiItem(newButtenItem);
+
+ connect(m_updateButton, SIGNAL(clicked()), this, SLOT(slotUpdateEntry()));
+ connect(m_newButton, SIGNAL(clicked()), this, SLOT(slotNewEntry()));
+
+ connect(m_quoteSourceList, SIGNAL(selectionChanged(QListViewItem*)), this, SLOT(slotLoadWidgets(QListViewItem*)));
+ connect(m_quoteSourceList, SIGNAL(clicked(QListViewItem*)), this, SLOT(slotLoadWidgets(QListViewItem*)));
+ connect(m_quoteSourceList, SIGNAL(itemRenamed(QListViewItem*,const QString&,int)), this, SLOT(slotEntryRenamed(QListViewItem*,const QString&,int)));
+
+ connect(m_editURL, SIGNAL(textChanged(const QString&)), this, SLOT(slotEntryChanged()));
+ connect(m_editSymbol, SIGNAL(textChanged(const QString&)), this, SLOT(slotEntryChanged()));
+ connect(m_editDate, SIGNAL(textChanged(const QString&)), this, SLOT(slotEntryChanged()));
+ connect(m_editDateFormat, SIGNAL(textChanged(const QString&)), this, SLOT(slotEntryChanged()));
+ connect(m_editPrice, SIGNAL(textChanged(const QString&)), this, SLOT(slotEntryChanged()));
+ connect(m_skipStripping, SIGNAL(toggled(bool)), this, SLOT(slotEntryChanged()));
+
+ // FIXME deleting a source is not yet implemented
+ m_deleteButton->setEnabled(false);
+}
+
+void KSettingsOnlineQuotes::loadList(const bool updateResetList)
+{
+ QStringList groups = WebPriceQuote::quoteSources();
+
+ if(updateResetList)
+ m_resetList.clear();
+ m_quoteSourceList->clear();
+ QStringList::Iterator it;
+ for(it = groups.begin(); it != groups.end(); ++it) {
+ new QListViewItem(m_quoteSourceList, *it);
+ if(updateResetList)
+ m_resetList += WebPriceQuoteSource(*it);
+ }
+
+ QListViewItem* first = m_quoteSourceList->firstChild();
+ if(first)
+ m_quoteSourceList->setSelected(first, true);
+ slotLoadWidgets(first);
+
+ m_newButton->setEnabled(m_quoteSourceList->findItem(i18n("New Quote Source"), 0) == 0);
+}
+
+void KSettingsOnlineQuotes::resetConfig(void)
+{
+ QStringList::ConstIterator it;
+ QStringList groups = WebPriceQuote::quoteSources();
+
+ // delete all currently defined entries
+ for(it = groups.begin(); it != groups.end(); ++it) {
+ WebPriceQuoteSource(*it).remove();
+ }
+
+ // and write back the one's from the reset list
+ QValueList<WebPriceQuoteSource>::ConstIterator itr;
+ for(itr = m_resetList.begin(); itr != m_resetList.end(); ++itr) {
+ (*itr).write();
+ }
+
+ loadList();
+}
+
+void KSettingsOnlineQuotes::slotLoadWidgets(QListViewItem* item)
+{
+ m_editURL->setEnabled(true);
+ m_editSymbol->setEnabled(true);
+ m_editPrice->setEnabled(true);
+ m_editDate->setEnabled(true);
+ m_editDateFormat->setEnabled(true);
+ m_skipStripping->setEnabled(true);
+ m_editURL->setText(QString());
+ m_editSymbol->setText(QString());
+ m_editPrice->setText(QString());
+ m_editDate->setText(QString());
+ m_editDateFormat->setText(QString());
+
+ if(item) {
+ m_currentItem = WebPriceQuoteSource(item->text(0));
+ m_editURL->setText(m_currentItem.m_url);
+ m_editSymbol->setText(m_currentItem.m_sym);
+ m_editPrice->setText(m_currentItem.m_price);
+ m_editDate->setText(m_currentItem.m_date);
+ m_editDateFormat->setText(m_currentItem.m_dateformat);
+ m_skipStripping->setChecked(m_currentItem.m_skipStripping);
+ } else {
+ m_editURL->setEnabled(false);
+ m_editSymbol->setEnabled(false);
+ m_editPrice->setEnabled(false);
+ m_editDate->setEnabled(false);
+ m_editDateFormat->setEnabled(false);
+ m_skipStripping->setEnabled(false);
+ }
+
+ m_updateButton->setEnabled(false);
+
+}
+
+void KSettingsOnlineQuotes::slotEntryChanged(void)
+{
+ bool modified = m_editURL->text() != m_currentItem.m_url
+ || m_editSymbol->text() != m_currentItem.m_sym
+ || m_editDate->text() != m_currentItem.m_date
+ || m_editDateFormat->text() != m_currentItem.m_dateformat
+ || m_editPrice->text() != m_currentItem.m_price
+ || m_skipStripping->isChecked() != m_currentItem.m_skipStripping;
+
+ m_updateButton->setEnabled(modified);
+}
+
+void KSettingsOnlineQuotes::slotUpdateEntry(void)
+{
+ m_currentItem.m_url = m_editURL->text();
+ m_currentItem.m_sym = m_editSymbol->text();
+ m_currentItem.m_date = m_editDate->text();
+ m_currentItem.m_dateformat = m_editDateFormat->text();
+ m_currentItem.m_price = m_editPrice->text();
+ m_currentItem.m_skipStripping = m_skipStripping->isChecked();
+ m_currentItem.write();
+ slotEntryChanged();
+}
+
+void KSettingsOnlineQuotes::slotNewEntry(void)
+{
+ WebPriceQuoteSource newSource(i18n("New Quote Source"));
+ newSource.write();
+ loadList();
+ QListViewItem* item = m_quoteSourceList->findItem(i18n("New Quote Source"), 0);
+ if(item) {
+ m_quoteSourceList->setSelected(item, true);
+ slotLoadWidgets(item);
+ }
+}
+
+void KSettingsOnlineQuotes::slotEntryRenamed(QListViewItem* item, const QString& text, int /* col */)
+{
+ int nameCount = 0;
+ QListViewItemIterator it(m_quoteSourceList);
+ while(it.current()) {
+ if(it.current()->text(0) == text)
+ ++nameCount;
+ ++it;
+ }
+
+ // Make sure we get a non-empty and unique name
+ if(text.length() > 0 && nameCount == 1) {
+ m_currentItem.rename(text);
+ } else {
+ item->setText(0, m_currentItem.m_name);
+ }
+ m_newButton->setEnabled(m_quoteSourceList->findItem(i18n("New Quote Source"), 0) == 0);
+}
+
+#include "ksettingsonlinequotes.moc"
diff --git a/kmymoney2/dialogs/settings/ksettingsonlinequotes.h b/kmymoney2/dialogs/settings/ksettingsonlinequotes.h
new file mode 100644
index 0000000..8c0b6f0
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingsonlinequotes.h
@@ -0,0 +1,59 @@
+/***************************************************************************
+ kmymoneyonlinequoteconfig.h - description
+ -------------------
+ begin : Thu Dec 30 2004
+ copyright : (C) 2004 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KSETTINGSONLINEQUOTES_H
+#define KSETTINGSONLINEQUOTES_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoney2/dialogs/settings/ksettingsonlinequotesdecl.h"
+#include "kmymoney2/converter/webpricequote.h"
+
+class KSettingsOnlineQuotes : public KSettingsOnlineQuotesDecl
+{
+ Q_OBJECT
+public:
+ KSettingsOnlineQuotes(QWidget* parent = 0, const char *name = 0);
+ virtual ~KSettingsOnlineQuotes() {}
+
+ void writeConfig(void) {}
+ void readConfig(void) {}
+ void resetConfig(void);
+
+protected slots:
+ void slotUpdateEntry(void);
+ void slotLoadWidgets(QListViewItem* item);
+ void slotEntryChanged(void);
+ void slotNewEntry(void);
+ void slotEntryRenamed(QListViewItem* item, const QString& text, int col);
+
+protected:
+ void loadList(const bool updateResetList = false);
+
+private:
+ QValueList<WebPriceQuoteSource> m_resetList;
+ WebPriceQuoteSource m_currentItem;
+};
+
+#endif
diff --git a/kmymoney2/dialogs/settings/ksettingsonlinequotesdecl.ui b/kmymoney2/dialogs/settings/ksettingsonlinequotesdecl.ui
new file mode 100644
index 0000000..3077b78
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingsonlinequotesdecl.ui
@@ -0,0 +1,234 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KSettingsOnlineQuotesDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KSettingsOnlineQuotesDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>512</width>
+ <height>442</height>
+ </rect>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="caption">
+ <string>Online Quotes</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KListView">
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>m_quoteSourceList</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="defaultRenameAction">
+ <enum>Accept</enum>
+ </property>
+ <property name="itemsRenameable">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupParsing</cstring>
+ </property>
+ <property name="title">
+ <string>Details</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;i&gt;Enter regular expressions which can be used to parse the data returned from the URL entered above. The symbol, price, and date must be found in the quote data to be usable. You may also try the KMyMoney user's mailinglist at &lt;a href="mailto:kmymoney2-user@lists.sourceforge.net"&gt;kmymoney2-user@lists.sourceforge.net&lt;/a&gt; to find what settings work for other users in your country.&lt;/i&gt;</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Date</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Symbol</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="1" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>m_editSymbol</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Regular Expression to extract the symbol from the downloaded data</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="2" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>m_editPrice</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Regular Expression to extract the price from the downloaded data</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="0" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>m_editURL</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>URL to be used to download the quote</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Enter the URL from which stock quotes will be fetched. &lt;b&gt;%1&lt;/b&gt; will be replaced with the symbol for the security being quoted. For currency conversions, &lt;b&gt;%2&lt;/b&gt; will be replaced with the currency to be quoted and &lt;b&gt;%1&lt;/b&gt; with the currency the quote is based on.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Price</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="3" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>m_editDate</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Regular Expression to extract the date from the downloaded data</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>textLabel4_2</cstring>
+ </property>
+ <property name="text">
+ <string>Date Format</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>URL</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="4" column="1">
+ <property name="name">
+ <cstring>m_editDateFormat</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Regular Expression to extract the date from the downloaded data</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="4" column="2">
+ <property name="name">
+ <cstring>m_skipStripping</cstring>
+ </property>
+ <property name="text">
+ <string>Skip HTML stripping</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;p&gt;For easier processing of the data returned by the online source, KMyMoney usually strips unused parts before it is parsed with the regular expressions. If matching of the fields relies on those items, then use this option to turn stripping off.&lt;/p&gt;
+
+&lt;p&gt;The following items are usually removed by stripping:
+
+&lt;ul&gt;
+&lt;li&gt;HTML tags such as &lt;b&gt;&amp;lt;tag&amp;gt;&lt;/b&gt;&lt;/li&gt;
+&lt;li&gt;&amp; encoded characters such as &lt;b&gt;&amp;amp;nbsp;&lt;/b&gt;&lt;/li&gt;
+&lt;li&gt;duplicate whitespace&lt;/li&gt;
+&lt;/ul&gt;
+&lt;/p&gt;</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout15</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_newButton</cstring>
+ </property>
+ <property name="text">
+ <string>New</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_deleteButton</cstring>
+ </property>
+ <property name="text">
+ <string>Delete</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>240</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_updateButton</cstring>
+ </property>
+ <property name="text">
+ <string>Update</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/settings/ksettingsplugins.cpp b/kmymoney2/dialogs/settings/ksettingsplugins.cpp
new file mode 100644
index 0000000..0887315
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingsplugins.cpp
@@ -0,0 +1,66 @@
+/***************************************************************************
+ ksettingsplugins.cpp
+ -------------------
+ begin : Thu Feb 12 2009
+ copyright : (C) 2009 Cristian Onet
+ email : onet.cristian@gmail.com
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlayout.h>
+#include <qstring.h>
+#include <qlabel.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kdialog.h>
+#include <kpluginselector.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoney2/plugins/pluginloader.h"
+#include "ksettingsplugins.h"
+
+KSettingsPlugins::KSettingsPlugins(QWidget* parent)
+ : QWidget(parent)
+{
+ QVBoxLayout *layout = new QVBoxLayout(this);
+ KMyMoneyPlugin::PluginLoader::instance()->pluginSelectorWidget()->reparent(this, QPoint());
+ layout->addWidget(KMyMoneyPlugin::PluginLoader::instance()->pluginSelectorWidget());
+ layout->setSpacing(KDialog::spacingHint());
+}
+
+KSettingsPlugins::~KSettingsPlugins()
+{
+}
+
+void KSettingsPlugins::slotLoadPlugins()
+{
+ KMyMoneyPlugin::PluginLoader::instance()->pluginSelectorWidget()->load();
+}
+
+void KSettingsPlugins::slotSavePlugins()
+{
+ KMyMoneyPlugin::PluginLoader::instance()->pluginSelectorWidget()->save();
+}
+
+void KSettingsPlugins::slotDefaultsPlugins()
+{
+ KMyMoneyPlugin::PluginLoader::instance()->pluginSelectorWidget()->defaults();
+}
+
+#include "ksettingsplugins.moc"
diff --git a/kmymoney2/dialogs/settings/ksettingsplugins.h b/kmymoney2/dialogs/settings/ksettingsplugins.h
new file mode 100644
index 0000000..9c36f67
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingsplugins.h
@@ -0,0 +1,47 @@
+/***************************************************************************
+ ksettingsplugins.h
+ -------------------
+ begin : Thu Feb 12 2009
+ copyright : (C) 2009 Cristian Onet
+ email : onet.cristian@gmail.com
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KSETTINGSPLUGINS_H
+#define KSETTINGSPLUGINS_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+class KSettingsPlugins : public QWidget
+{
+ Q_OBJECT
+
+public:
+
+ KSettingsPlugins(QWidget* parent = 0);
+ ~KSettingsPlugins();
+
+public slots:
+ void slotLoadPlugins();
+ void slotSavePlugins();
+ void slotDefaultsPlugins();
+};
+
+#endif // KSETTINGSPLUGINS_H
diff --git a/kmymoney2/dialogs/settings/ksettingsregister.cpp b/kmymoney2/dialogs/settings/ksettingsregister.cpp
new file mode 100644
index 0000000..9f1fda2
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingsregister.cpp
@@ -0,0 +1,75 @@
+/***************************************************************************
+ ksettingsregister.cpp
+ --------------------
+ copyright : (C) 2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <ktextedit.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "ksettingsregister.h"
+#include <kmymoney/transactionsortoption.h>
+
+KSettingsRegister::KSettingsRegister(QWidget* parent, const char* name) :
+ KSettingsRegisterDecl(parent, name)
+{
+ // hide the internally used text fields
+ kcfg_sortNormalView->hide();
+ kcfg_sortReconcileView->hide();
+ kcfg_sortSearchView->hide();
+
+ // setup connections, so that the sort optios get loaded once the edit fields are filled
+ connect(kcfg_sortNormalView, SIGNAL(textChanged()), this, SLOT(slotLoadNormal()));
+ connect(kcfg_sortReconcileView, SIGNAL(textChanged()), this, SLOT(slotLoadReconcile()));
+ connect(kcfg_sortSearchView, SIGNAL(textChanged()), this, SLOT(slotLoadSearch()));
+
+ // setup connections, so that changes by the user are forwarded to the (hidden) edit fields
+ connect(m_sortNormalView, SIGNAL(settingsChanged(const QString&)), kcfg_sortNormalView, SLOT(setText(const QString&)));
+ connect(m_sortReconcileView, SIGNAL(settingsChanged(const QString&)), kcfg_sortReconcileView, SLOT(setText(const QString&)));
+ connect(m_sortSearchView, SIGNAL(settingsChanged(const QString&)), kcfg_sortSearchView, SLOT(setText(const QString&)));
+}
+
+KSettingsRegister::~KSettingsRegister()
+{
+}
+
+void KSettingsRegister::slotLoadNormal(void)
+{
+ // only need this once
+ disconnect(kcfg_sortNormalView, SIGNAL(textChanged()), this, SLOT(slotLoadNormal()));
+ m_sortNormalView->setSettings(kcfg_sortNormalView->text());
+}
+
+void KSettingsRegister::slotLoadReconcile(void)
+{
+ // only need this once
+ disconnect(kcfg_sortReconcileView, SIGNAL(textChanged()), this, SLOT(slotLoadReconcile()));
+ m_sortReconcileView->setSettings(kcfg_sortReconcileView->text());
+}
+
+void KSettingsRegister::slotLoadSearch(void)
+{
+ // only need this once
+ disconnect(kcfg_sortSearchView, SIGNAL(textChanged()), this, SLOT(slotLoadSearch()));
+ m_sortSearchView->setSettings(kcfg_sortSearchView->text());
+}
+
+#include "ksettingsregister.moc"
diff --git a/kmymoney2/dialogs/settings/ksettingsregister.h b/kmymoney2/dialogs/settings/ksettingsregister.h
new file mode 100644
index 0000000..bcad7eb
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingsregister.h
@@ -0,0 +1,45 @@
+/***************************************************************************
+ ksettingsregister.h
+ -------------------
+ copyright : (C) 2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KSETTINGSREGISTER_H
+#define KSETTINGSREGISTER_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoney2/dialogs/settings/ksettingsregisterdecl.h"
+
+class KSettingsRegister : public KSettingsRegisterDecl
+{
+ Q_OBJECT
+
+public:
+ KSettingsRegister(QWidget* parent = 0, const char* name = 0);
+ ~KSettingsRegister();
+
+protected slots:
+ void slotLoadNormal(void);
+ void slotLoadReconcile(void);
+ void slotLoadSearch(void);
+};
+#endif
+
diff --git a/kmymoney2/dialogs/settings/ksettingsregisterdecl.ui b/kmymoney2/dialogs/settings/ksettingsregisterdecl.ui
new file mode 100644
index 0000000..c03807e
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingsregisterdecl.ui
@@ -0,0 +1,549 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KSettingsRegisterDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KSettingsRegisterDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>632</width>
+ <height>403</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Register settings</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Display</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_ShowGrid</cstring>
+ </property>
+ <property name="text">
+ <string>Show a grid in the register</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_LedgerLens</cstring>
+ </property>
+ <property name="text">
+ <string>Use the ledger lens</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Using the ledger lens shows the details for the transaction that has focus in the ledger. Usually, when using the transaction form, only a one line summary is displayed for each transaction as the details are shown in the form.</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_TransactionForm</cstring>
+ </property>
+ <property name="text">
+ <string>Show transaction form</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_AlwaysShowNrField</cstring>
+ </property>
+ <property name="text">
+ <string>Always show a No. field</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_ShowFancyMarker</cstring>
+ </property>
+ <property name="text">
+ <string>Show group header between transactions</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Draws a larger header above each group of transaction. The grouping depends on the current sort order.</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_ShowFiscalMarker</cstring>
+ </property>
+ <property name="text">
+ <string>Show header for the previous and current fiscal year</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>sorting</cstring>
+ </property>
+ <attribute name="title">
+ <string>Sorting</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>tabWidget3</cstring>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Normal view</string>
+ </attribute>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KTextEdit">
+ <property name="name">
+ <cstring>kcfg_sortNormalView</cstring>
+ </property>
+ </widget>
+ <widget class="TransactionSortOption">
+ <property name="name">
+ <cstring>m_sortNormalView</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Reconciliation view</string>
+ </attribute>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KTextEdit">
+ <property name="name">
+ <cstring>kcfg_sortReconcileView</cstring>
+ </property>
+ </widget>
+ <widget class="TransactionSortOption">
+ <property name="name">
+ <cstring>m_sortReconcileView</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>TabPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Search view</string>
+ </attribute>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KTextEdit">
+ <property name="name">
+ <cstring>kcfg_sortSearchView</cstring>
+ </property>
+ </widget>
+ <widget class="TransactionSortOption">
+ <property name="name">
+ <cstring>m_sortSearchView</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </widget>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Use the &lt;i&gt;left&lt;/i&gt; and &lt;i&gt;right&lt;/i&gt; buttons to add and remove sort options. Use the &lt;i&gt;up&lt;/i&gt; and &lt;i&gt;down&lt;/i&gt; buttons to modify the sort order. Double-Click a selected entry to toggle the sort order between &lt;i&gt;ascending&lt;/i&gt; and &lt;i&gt;descending&lt;/i&gt;.</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>TabPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Data entry</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_CopyTypeToNr</cstring>
+ </property>
+ <property name="text">
+ <string>Insert transaction type into No. field for new transactions</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_AutoIncCheckNumber</cstring>
+ </property>
+ <property name="text">
+ <string>Auto increment check number</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_FocusChangeIsEnter</cstring>
+ </property>
+ <property name="text">
+ <string>Keep changes when selecting a different transaction/split</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_EnterMovesBetweenFields</cstring>
+ </property>
+ <property name="text">
+ <string>Use Enter to move between fields</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_stringMatchFromStart</cstring>
+ </property>
+ <property name="text">
+ <string>Match names from start</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Mark this option, if you always want to match names e.g. for payees from the start. If unset, any substring is matched.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Default reconciliation state</string>
+ </property>
+ </widget>
+ <widget class="KComboBox">
+ <item>
+ <property name="text">
+ <string>Not reconciled</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Cleared</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Reconciled</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>kcfg_defaultReconciliationState</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Default reconciliation state for transactions entered during reconciliation of an account</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer15</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>31</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>kcfg_AutoFillTransaction</cstring>
+ </property>
+ <property name="title">
+ <string>Autofill</string>
+ </property>
+ <property name="exclusive">
+ <bool>false</bool>
+ </property>
+ <property name="selectedId" stdset="0">
+ <number>-1</number>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>radioButton1</cstring>
+ </property>
+ <property name="text">
+ <string>No Autofill</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Don't do autofill of transaction data at all.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>radioButton2</cstring>
+ </property>
+ <property name="text">
+ <string>Same transaction if amount differs less than</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Collect all transactions for the given payee. Treat all transactions that refer to the same category and have an amount with +/- X % as identical. If more than one transaction is found, a list of them is presented to the user.
+
+Selecting 0% will list all transactions.</string>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox">
+ <property name="name">
+ <cstring>kcfg_AutoFillDifference</cstring>
+ </property>
+ <property name="maxValue">
+ <number>100</number>
+ </property>
+ <property name="value">
+ <number>10</number>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Two transactions are usually treated identical for autofill, if they refer the same accounts. They are treated as different transactions though, when their amount varies by more than the percentage given here.</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>percent.</string>
+ <comment>Same transaction if amount differs less than percent.</comment>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>radioButton3</cstring>
+ </property>
+ <property name="text">
+ <string>with previously most often used transaction for the payee</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>The data of the last transaction assigned to the category used most often for this payee is autofilled into the transaction editor.</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>TabPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Import</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>Match transactions within days</string>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox">
+ <property name="name">
+ <cstring>kcfg_matchInterval</cstring>
+ </property>
+ <property name="buttonSymbols">
+ <enum>UpDownArrows</enum>
+ </property>
+ <property name="maxValue">
+ <number>99</number>
+ </property>
+ <property name="minValue">
+ <number>0</number>
+ </property>
+ <property name="value">
+ <number>4</number>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Search for matching transactions within the range of the posting date of the imported transaction +/- the number of given days.</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer13</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>61</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_askForPayeeCategory</cstring>
+ </property>
+ <property name="text">
+ <string>Ask for a new payee's default category</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Whenever a new payee is detected during import of a statement, the user will be asked to assign a default category for this user when this option is selected.</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer14</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>60</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/settings/ksettingsschedules.cpp b/kmymoney2/dialogs/settings/ksettingsschedules.cpp
new file mode 100644
index 0000000..6f9a77c
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingsschedules.cpp
@@ -0,0 +1,37 @@
+/***************************************************************************
+ ksettingsschedules.cpp
+ --------------------
+ copyright : (C) 2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "ksettingsschedules.h"
+
+KSettingsSchedules::KSettingsSchedules(QWidget* parent, const char* name) :
+ KSettingsSchedulesDecl(parent, name)
+{
+}
+
+KSettingsSchedules::~KSettingsSchedules()
+{
+}
+
+#include "ksettingsschedules.moc"
diff --git a/kmymoney2/dialogs/settings/ksettingsschedules.h b/kmymoney2/dialogs/settings/ksettingsschedules.h
new file mode 100644
index 0000000..caa7d33
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingsschedules.h
@@ -0,0 +1,41 @@
+/***************************************************************************
+ ksettingsschedules.h
+ -------------------
+ copyright : (C) 2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KSETTINGSSCHEDULES_H
+#define KSETTINGSSCHEDULES_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoney2/dialogs/settings/ksettingsschedulesdecl.h"
+
+class KSettingsSchedules : public KSettingsSchedulesDecl
+{
+ Q_OBJECT
+
+public:
+ KSettingsSchedules(QWidget* parent = 0, const char* name = 0);
+ ~KSettingsSchedules();
+};
+#endif
+
diff --git a/kmymoney2/dialogs/settings/ksettingsschedulesdecl.ui b/kmymoney2/dialogs/settings/ksettingsschedulesdecl.ui
new file mode 100644
index 0000000..fca9aa9
--- /dev/null
+++ b/kmymoney2/dialogs/settings/ksettingsschedulesdecl.ui
@@ -0,0 +1,145 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KSettingsSchedulesDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KSettingsSchedulesDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>482</width>
+ <height>236</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Schedule Settings</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox6</cstring>
+ </property>
+ <property name="title">
+ <string>Startup options</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kcfg_CheckSchedule</cstring>
+ </property>
+ <property name="text">
+ <string>Check schedules on startup</string>
+ </property>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>m_dayCountFrame</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="frameShape">
+ <enum>StyledPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Enter transactions this number of days in advance</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>kcfg_CheckSchedulePreview</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Number of days to preview schedules in ledger</string>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox">
+ <property name="name">
+ <cstring>kcfg_SchedulePreview</cstring>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>41</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer10</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<connections>
+ <connection>
+ <sender>kcfg_CheckSchedule</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>m_dayCountFrame</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/dialogs/transactioneditor.cpp b/kmymoney2/dialogs/transactioneditor.cpp
new file mode 100644
index 0000000..c53d3c6
--- /dev/null
+++ b/kmymoney2/dialogs/transactioneditor.cpp
@@ -0,0 +1,2156 @@
+/***************************************************************************
+ transactioneditor.cpp
+ ----------
+ begin : Wed Jun 07 2006
+ copyright : (C) 2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlabel.h>
+#include <qapplication.h>
+#include <qeventloop.h>
+#include <qradiobutton.h>
+#include <qbuttongroup.h>
+#include <qtooltip.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kglobal.h>
+#include <ktextedit.h>
+#include <klocale.h>
+#include <kcombobox.h>
+#include <kpushbutton.h>
+#include <kmessagebox.h>
+#include <kstdguiitem.h>
+#include <kiconloader.h>
+#include <kguiitem.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/transactioneditor.h>
+#include <kmymoney/kmymoneycategory.h>
+#include <kmymoney/kmymoneydateinput.h>
+#include <kmymoney/kmymoneyedit.h>
+#include <kmymoney/kmymoneylineedit.h>
+#include <kmymoney/kmymoneyaccountcompletion.h>
+#include <kmymoney/kmymoneyaccountselector.h>
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/kmymoneyutils.h>
+#include <kmymoney/transactionform.h>
+#include <kmymoney/kmymoneyglobalsettings.h>
+
+#include "../dialogs/ksplittransactiondlg.h"
+#include "../dialogs/kcurrencycalculator.h"
+#include "../dialogs/kselecttransactionsdlg.h"
+
+using namespace KMyMoneyRegister;
+using namespace KMyMoneyTransactionForm;
+
+TransactionEditor::TransactionEditor(TransactionEditorContainer* regForm, KMyMoneyRegister::Transaction* item, const KMyMoneyRegister::SelectedTransactions& list, const QDate& lastPostDate) :
+ m_transactions(list),
+ m_regForm(regForm),
+ m_item(item),
+ m_transaction(item->transaction()),
+ m_split(item->split()),
+ m_lastPostDate(lastPostDate),
+ m_openEditSplits(false)
+{
+ m_item->startEditMode();
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotUpdateAccount()));
+}
+
+TransactionEditor::~TransactionEditor()
+{
+ // Make sure the widgets do not send out signals to the editor anymore
+ // After all, the editor is about to die
+ QMap<QString, QWidget*>::iterator it_w;
+ for(it_w = m_editWidgets.begin(); it_w != m_editWidgets.end(); ++it_w) {
+ (*it_w)->disconnect(this);
+ }
+
+ m_regForm->removeEditWidgets(m_editWidgets);
+ m_item->leaveEditMode();
+ emit finishEdit(m_transactions);
+}
+
+void TransactionEditor::slotUpdateAccount(const QString& id)
+{
+ m_account = MyMoneyFile::instance()->account(id);
+ setupPrecision();
+}
+
+void TransactionEditor::slotUpdateAccount(void)
+{
+ // reload m_account as it might have been changed
+ m_account = MyMoneyFile::instance()->account(m_account.id());
+ setupPrecision();
+}
+
+void TransactionEditor::setupPrecision(void)
+{
+ const int prec = (m_account.id().isEmpty()) ? 2 : MyMoneyMoney::denomToPrec(m_account.fraction());
+ QStringList widgets = QStringList::split(",", "amount,deposit,payment");
+ QStringList::const_iterator it_w;
+ for(it_w = widgets.begin(); it_w != widgets.end(); ++it_w) {
+ QWidget * w;
+ if((w = haveWidget(*it_w)) != 0) {
+ dynamic_cast<kMyMoneyEdit*>(w)->setPrecision(prec);
+ }
+ }
+}
+
+void TransactionEditor::setup(QWidgetList& tabOrderWidgets, const MyMoneyAccount& account, KMyMoneyRegister::Action action)
+{
+ m_account = account;
+ m_initialAction = action;
+ createEditWidgets();
+ m_regForm->arrangeEditWidgets(m_editWidgets, m_item);
+ m_regForm->tabOrder(tabOrderWidgets, m_item);
+ QWidget* w = haveWidget("tabbar");
+ if(w)
+ tabOrderWidgets.append(w);
+ loadEditWidgets(action);
+ m_editWidgets.removeOrphans();
+ clearFinalWidgets();
+ setupFinalWidgets();
+ slotUpdateButtonState();
+}
+
+void TransactionEditor::clearFinalWidgets(void)
+{
+ m_finalEditWidgets.clear();
+}
+
+void TransactionEditor::addFinalWidget(const QWidget* w)
+{
+ if(w) {
+ m_finalEditWidgets << w;
+ }
+}
+
+void TransactionEditor::slotReloadEditWidgets(void)
+{
+}
+
+bool TransactionEditor::eventFilter(QObject* o, QEvent* e)
+{
+ bool rc = false;
+ if(o == haveWidget("number")) {
+ if(e->type() == QEvent::MouseButtonDblClick) {
+ emit assignNumber();
+ rc = true;
+ }
+ }
+
+ // if the object is a widget, the event is a key press event and
+ // the object is one of our edit widgets, then ....
+ if(o->isWidgetType()
+ && (e->type() == QEvent::KeyPress)
+ && m_editWidgets.values().contains(dynamic_cast<QWidget*>(o))) {
+ QKeyEvent* k = dynamic_cast<QKeyEvent*>(e);
+ if((k->state() & Qt::KeyButtonMask) == 0) {
+ bool isFinal = false;
+ QValueList<const QWidget*>::const_iterator it_w;
+ switch(k->key()) {
+ case Qt::Key_Return:
+ case Qt::Key_Enter:
+ // we check, if the object is one of the m_finalEditWidgets and if it's
+ // a kMyMoneyEdit object that the value is not 0. If any of that is the
+ // case, it's the final object. In other cases, we convert the enter
+ // key into a TAB key to move between the fields. Of course, we only need
+ // to do this as long as the appropriate option is set. In all other cases,
+ // we treat the return/enter key as such.
+ if(KMyMoneyGlobalSettings::enterMovesBetweenFields()) {
+ for(it_w = m_finalEditWidgets.begin(); !isFinal && it_w != m_finalEditWidgets.end(); ++it_w) {
+ if(*it_w == o) {
+ if(dynamic_cast<const kMyMoneyEdit*>(*it_w)) {
+ isFinal = !(dynamic_cast<const kMyMoneyEdit*>(*it_w)->value().isZero());
+ } else
+ isFinal = true;
+ }
+ }
+ } else
+ isFinal = true;
+
+ // for the non-final objects, we treat the return key as a TAB
+ if(!isFinal) {
+ QKeyEvent evt(e->type(),
+ Key_Tab, 0, k->state(), QString::null,
+ k->isAutoRepeat(), k->count());
+
+ QApplication::sendEvent( o, &evt );
+ // in case of a category item and the split button is visible
+ // send a second event so that we get passed the button.
+ if(dynamic_cast<KMyMoneyCategory*>(o) && dynamic_cast<KMyMoneyCategory*>(o)->splitButton())
+ QApplication::sendEvent( o, &evt );
+
+ } else {
+ QTimer::singleShot(0, this, SIGNAL(returnPressed()));
+ }
+ // don't process any further
+ rc = true;
+ break;
+
+ case Qt::Key_Escape:
+ QTimer::singleShot(0, this, SIGNAL(escapePressed()));
+ break;
+ }
+ }
+ }
+ return rc;
+}
+
+void TransactionEditor::slotNumberChanged(const QString& txt)
+{
+ kMyMoneyLineEdit* number = dynamic_cast<kMyMoneyLineEdit*>(haveWidget("number"));
+
+ if(number) {
+ if(MyMoneyFile::instance()->checkNoUsed(m_account.id(), txt)) {
+ if(KMessageBox::questionYesNo(m_regForm, QString("<qt>")+i18n("The number <b>%1</b> has already been used in account <b>%2</b>. Do you want to replace it with the next available number?").arg(txt).arg(m_account.name())+QString("</qt>"), i18n("Duplicate number")) == KMessageBox::Yes) {
+ number->loadText(KMyMoneyUtils::nextCheckNumber(m_account));
+ }
+ }
+ }
+}
+
+void TransactionEditor::slotUpdateButtonState(void)
+{
+ QString reason;
+ emit transactionDataSufficient(isComplete(reason));
+}
+
+QWidget* TransactionEditor::haveWidget(const QString& name) const
+{
+ return m_editWidgets.haveWidget(name);
+}
+
+int TransactionEditor::slotEditSplits(void)
+{
+ return QDialog::Rejected;
+}
+
+#if 0
+ // If we deal with multiple currencies we make sure, that for
+ // transactions with two splits, the transaction's commodity is the
+ // currency of the currently selected account. This saves us from a
+ // lot of grieve later on.
+ // Editing a transaction which has more than two splits and a commodity
+ // that differs from the currency of the current selected account is
+ // not a good idea. We will warn the user and give him a hint if there
+ // is an account where he can perfom the edit operation much better.
+ if(m_transaction.commodity() != m_account.currencyId()) {
+ if(m_transaction.splitCount() == 2) {
+ // in case of two splits, it's easy. We just have to switch the
+ // transactions commodity. Let's assume the following scenario:
+ // - transactions commodity is CA
+ // - account's currencyId is CB
+ // - second split is of course in CA (otherwise we have a real problem)
+ // - Value is V in both splits
+ // - Shares in this account's split is SB
+ // - Shares in the other account's split is SA (and equal to V)
+ //
+ // We do the following:
+ // - change transactions commodity to CB
+ // - set V in both splits to SB
+ // - modify the splits in the transaction
+ try {
+ MyMoneySplit split = m_transaction.splitByAccount(m_account.id(), false);
+ m_transaction.setCommodity(m_account.currencyId());
+ m_split.setValue(m_split.shares());
+ split.setValue(-m_split.shares());
+ m_transaction.modifySplit(m_split);
+ m_transaction.modifySplit(split);
+
+ if(m_transactionPtr) {
+ KMyMoneyTransaction k(m_transaction);
+ k.setSplitId(m_split.id());
+ *m_transactionPtr = k;
+ }
+ } catch(MyMoneyException *e) {
+ qDebug("Unable to update commodity to second splits currency in %s: '%s'", m_transaction.id().data(), e->what().data());
+ delete e;
+ }
+
+ } else {
+ // Find a suitable account
+ MyMoneySecurity sec = MyMoneyFile::instance()->currency(m_transaction.commodity());
+ MyMoneyAccount acc;
+ for(it = m_transaction.splits().begin(); it != m_transaction.splits().end(); ++it) {
+ if((*it).id() == m_split.id())
+ continue;
+ acc = MyMoneyFile::instance()->account((*it).accountId());
+ if((acc.accountGroup() == MyMoneyAccount::Asset
+ || acc.accountGroup() == MyMoneyAccount::Liability)
+ && acc.accountType() != MyMoneyAccount::Stock) {
+ if(m_transaction.commodity() == acc.currencyId())
+ break;
+ }
+ acc = MyMoneyAccount();
+ }
+ QString msg;
+ msg = QString("<p>")+i18n("This transaction has more than two splits and is based on a different currency (%1). Using this account to modify the transaction is currently not very well supported by KMyMoney and may result in false results.").arg(sec.name())+QString(" ");
+ if(acc.id().isEmpty()) {
+ msg += i18n("KMyMoney was not able to find a more appropriate account to edit this transaction. Nevertheless, you are allowed to modify the transaction. If you don't want to edit this transaction, please cancel from editing next.");
+ } else {
+ msg += i18n("Using e.g. <b>%1</b> to edit this transaction is a better choice. Nevertheless, you are allowed to modify the transaction. If you want to use the suggested account instead, please cancel from editing next and change the view to the suggested account.").arg(acc.name());
+ }
+ KMessageBox::information(0, msg);
+ }
+ }
+#endif
+
+void TransactionEditor::setTransaction(const MyMoneyTransaction& t, const MyMoneySplit& s)
+{
+ m_transaction = t;
+ m_split = s;
+ loadEditWidgets();
+}
+
+bool TransactionEditor::fixTransactionCommodity(const MyMoneyAccount& account)
+{
+ bool rc = true;
+ bool firstTimeMultiCurrency = true;
+ m_account = account;
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ // determine the max fraction for this account
+ MyMoneySecurity sec = file->security(m_account.currencyId());
+ int fract = m_account.fraction();
+
+ // scan the list of selected transactions
+ KMyMoneyRegister::SelectedTransactions::iterator it_t;
+ for(it_t = m_transactions.begin(); (rc == true) && (it_t != m_transactions.end()); ++it_t) {
+ // there was a time when the schedule editor did not setup the transaction commodity
+ // let's give a helping hand here for those old schedules
+ if((*it_t).transaction().commodity().isEmpty())
+ (*it_t).transaction().setCommodity(m_account.currencyId());
+ // we need to check things only if a different commodity is used
+ if(m_account.currencyId() != (*it_t).transaction().commodity()) {
+ MyMoneySecurity osec = file->security((*it_t).transaction().commodity());
+ switch((*it_t).transaction().splitCount()) {
+ case 0:
+ // new transaction, guess nothing's here yet ;)
+ break;
+
+ case 1:
+ try {
+ // make sure, that the value is equal to the shares, don't forget our own copy
+ MyMoneySplit& splitB = (*it_t).split(); // reference usage wanted here
+ if(m_split == splitB)
+ m_split.setValue(splitB.shares());
+ splitB.setValue(splitB.shares());
+ (*it_t).transaction().modifySplit(splitB);
+
+ } catch(MyMoneyException *e) {
+ qDebug("Unable to update commodity to second splits currency in %s: '%s'", (*it_t).transaction().id().data(), e->what().data());
+ delete e;
+ }
+ break;
+
+ case 2:
+ // If we deal with multiple currencies we make sure, that for
+ // transactions with two splits, the transaction's commodity is the
+ // currency of the currently selected account. This saves us from a
+ // lot of grieve later on. We just have to switch the
+ // transactions commodity. Let's assume the following scenario:
+ // - transactions commodity is CA
+ // - splitB and account's currencyId is CB
+ // - splitA is of course in CA (otherwise we have a real problem)
+ // - Value is V in both splits
+ // - Shares in splitB is SB
+ // - Shares in splitA is SA (and equal to V)
+ //
+ // We do the following:
+ // - change transactions commodity to CB
+ // - set V in both splits to SB
+ // - modify the splits in the transaction
+ try {
+ // retrieve the splits
+ MyMoneySplit& splitB = (*it_t).split(); // reference usage wanted here
+ MyMoneySplit splitA = (*it_t).transaction().splitByAccount(m_account.id(), false);
+
+ // - set V in both splits to SB. Don't forget our own copy
+ if(m_split == splitB) {
+ m_split.setValue(splitB.shares());
+ }
+ splitB.setValue(splitB.shares());
+ splitA.setValue(-splitB.shares());
+ (*it_t).transaction().modifySplit(splitA);
+ (*it_t).transaction().modifySplit(splitB);
+
+ } catch(MyMoneyException *e) {
+ qDebug("Unable to update commodity to second splits currency in %s: '%s'", (*it_t).transaction().id().data(), e->what().data());
+ delete e;
+ }
+ break;
+
+ default:
+ // TODO: use new logic by adjusting all splits by the price
+ // extracted from the selected split. Inform the user that
+ // this will happen and allow him to stop the processing (rc = false)
+
+ try {
+ QString msg;
+ if(firstTimeMultiCurrency) {
+ firstTimeMultiCurrency = false;
+ if(!isMultiSelection()) {
+ msg = i18n("This transaction has more than two splits and is originally based on a different currency (%1). Using this account to modify the transaction may result in rounding errors. Do you want to continue?").arg(osec.name());
+ } else {
+ msg = i18n("At least one of the selected transactions has more than two splits and is originally based on a different currency (%1). Using this account to modify the transactions may result in rounding errors. Do you want to continue?").arg(osec.name());
+ }
+
+ if(KMessageBox::warningContinueCancel(0, QString("<qt>%1</qt>").arg(msg)) == KMessageBox::Cancel) {
+ rc = false;
+ }
+ }
+
+ if(rc == true) {
+ MyMoneyMoney price;
+ if(!(*it_t).split().shares().isZero() && !(*it_t).split().value().isZero())
+ price = (*it_t).split().shares() / (*it_t).split().value();
+ QValueList<MyMoneySplit>::iterator it_s;
+ MyMoneySplit& mySplit = (*it_t).split();
+ for(it_s = (*it_t).transaction().splits().begin(); it_s != (*it_t).transaction().splits().end(); ++it_s) {
+ MyMoneySplit s = (*it_s);
+ if(s == mySplit) {
+ s.setValue(s.shares());
+ if(mySplit == m_split) {
+ m_split = s;
+ }
+ mySplit = s;
+ } else {
+ s.setValue((s.value() * price).convert(fract));
+ }
+ (*it_t).transaction().modifySplit(s);
+ }
+ }
+ } catch(MyMoneyException *e) {
+ qDebug("Unable to update commodity of split currency in %s: '%s'", (*it_t).transaction().id().data(), e->what().data());
+ delete e;
+ }
+ break;
+ }
+
+ // set the transaction's ommodity to this account's currency
+ (*it_t).transaction().setCommodity(m_account.currencyId());
+
+ // update our copy of the transaction that has the focus
+ if((*it_t).transaction().id() == m_transaction.id()) {
+ m_transaction = (*it_t).transaction();
+ }
+ }
+ }
+ return rc;
+}
+
+void TransactionEditor::assignNextNumber(void)
+{
+ if(canAssignNumber()) {
+ kMyMoneyLineEdit* number = dynamic_cast<kMyMoneyLineEdit*>(haveWidget("number"));
+ number->loadText(KMyMoneyUtils::nextCheckNumber(m_account));
+ }
+}
+
+bool TransactionEditor::canAssignNumber(void) const
+{
+ kMyMoneyLineEdit* number = dynamic_cast<kMyMoneyLineEdit*>(haveWidget("number"));
+ return (number != 0) && (number->text().isEmpty());
+}
+
+void TransactionEditor::setupCategoryWidget(KMyMoneyCategory* category, const QValueList<MyMoneySplit>& splits, QString& categoryId, const char* splitEditSlot, bool /* allowObjectCreation */)
+{
+ disconnect(category, SIGNAL(focusIn()), this, splitEditSlot);
+#if 0
+ // FIXME must deal with the logic that suppressObjectCreation is
+ // automatically turned off when the createItem() signal is connected
+ if(allowObjectCreation)
+ category->setSuppressObjectCreation(false);
+#endif
+
+ switch(splits.count()) {
+ case 0:
+ categoryId = QString();
+ if(!category->currentText().isEmpty()) {
+ category->setCurrentText();
+ // make sure, we don't see the selector
+ category->completion()->hide();
+ }
+ category->completion()->setSelected(QString());
+ break;
+
+ case 1:
+ categoryId = splits[0].accountId();
+ category->completion()->setSelected(categoryId);
+ category->slotItemSelected(categoryId);
+ break;
+
+ default:
+ categoryId = QString();
+ category->setSplitTransaction();
+ connect(category, SIGNAL(focusIn()), this, splitEditSlot);
+#if 0
+ // FIXME must deal with the logic that suppressObjectCreation is
+ // automatically turned off when the createItem() signal is connected
+ if(allowObjectCreation)
+ category->setSuppressObjectCreation(true);
+#endif
+ break;
+ }
+}
+
+bool TransactionEditor::enterTransactions(QString& newId, bool askForSchedule, bool suppressBalanceWarnings)
+{
+ newId = QString();
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ // make sure to run through all stuff that is tied to 'focusout events'.
+ m_regForm->parentWidget()->setFocus();
+ QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput, 10);
+
+ // we don't need to update our widgets anymore, so we just disconnect the signal
+ disconnect(file, SIGNAL(dataChanged()), this, SLOT(slotReloadEditWidgets()));
+
+ KMyMoneyRegister::SelectedTransactions::iterator it_t;
+ MyMoneyTransaction t;
+ bool newTransactionCreated = false;
+
+ // make sure, that only a single new transaction can be created.
+ // we need to update m_transactions to contain the new transaction
+ // which is then stored in the variable t when we leave the loop.
+ // m_transactions will be sent out in finishEdit() and forces
+ // the new transaction to be selected in the ledger view
+
+ // collect the transactions to be stored in the engine in a local
+ // list first, so that the user has a chance to interrupt the storage
+ // process
+ QValueList<MyMoneyTransaction> list;
+ bool storeTransactions = true;
+
+ // collect transactions
+ for(it_t = m_transactions.begin(); storeTransactions && !newTransactionCreated && it_t != m_transactions.end(); ++it_t) {
+ storeTransactions = createTransaction(t, (*it_t).transaction(), (*it_t).split());
+ // if the transaction was created successfully, append it to the list
+ if(storeTransactions)
+ list.append(t);
+
+ // if we created a new transaction keep that in mind
+ if(t.id().isEmpty())
+ newTransactionCreated = true;
+ }
+
+ // if not interrupted by user, continue to store them in the engine
+ if(storeTransactions) {
+ int i = 0;
+ emit statusMsg(i18n("Storing transactions"));
+ emit statusProgress(0, list.count());
+
+ MyMoneyFileTransaction ft;
+
+ try {
+ QValueList<MyMoneyTransaction>::iterator it_ts;
+ QMap<QString, bool> minBalanceEarly;
+ QMap<QString, bool> minBalanceAbsolute;
+ QMap<QString, bool> maxCreditEarly;
+ QMap<QString, bool> maxCreditAbsolute;
+ QMap<QString, bool> accountIds;
+
+ for(it_ts = list.begin(); it_ts != list.end(); ++it_ts) {
+ // if we have a categorization, make sure we remove
+ // the 'imported' flag automagically
+ if((*it_ts).splitCount() > 1)
+ (*it_ts).setImported(false);
+
+ // create information about min and max balances
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = (*it_ts).splits().begin(); it_s != (*it_ts).splits().end(); ++it_s) {
+ MyMoneyAccount acc = file->account((*it_s).accountId());
+ accountIds[acc.id()] = true;
+ MyMoneyMoney balance = file->balance(acc.id());
+ if(!acc.value("minBalanceEarly").isEmpty()) {
+ minBalanceEarly[acc.id()] = balance < MyMoneyMoney(acc.value("minBalanceEarly"));
+ }
+ if(!acc.value("minBalanceAbsolute").isEmpty()) {
+ minBalanceAbsolute[acc.id()] = balance < MyMoneyMoney(acc.value("minBalanceAbsolute"));
+ minBalanceEarly[acc.id()] = false;
+ }
+ if(!acc.value("maxCreditEarly").isEmpty()) {
+ maxCreditEarly[acc.id()] = balance < MyMoneyMoney(acc.value("maxCreditEarly"));
+ }
+ if(!acc.value("maxCreditAbsolute").isEmpty()) {
+ maxCreditAbsolute[acc.id()] = balance < MyMoneyMoney(acc.value("maxCreditAbsolute"));
+ maxCreditEarly[acc.id()] = false;
+ }
+ }
+
+ if((*it_ts).id().isEmpty()) {
+ bool enter = true;
+ if(askForSchedule && (*it_ts).postDate() > QDate::currentDate()) {
+ KGuiItem enterItem;
+ KIconLoader* il = KGlobal::iconLoader();
+ KGuiItem enterButton( i18n("&Enter" ),
+ QIconSet(il->loadIcon("kontact_journal", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Accepts the entered data and stores it"),
+ i18n("Use this to enter the transaction into the ledger."));
+ KGuiItem scheduleButton( i18n("&Schedule" ),
+ QIconSet(il->loadIcon("kontact_date", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Accepts the entered data and stores it as schedule"),
+ i18n("Use this to schedule the transaction for later entry into the ledger."));
+
+ enter = KMessageBox::questionYesNo(m_regForm, QString("<qt>%1</qt>").arg(i18n("The transaction you are about to enter has a post date in the future.<br/><br/>Do you want to enter it in the ledger or add it to the schedules?")), i18n("Dialog caption for 'Enter or schedule' dialog", "Enter or schedule?"), enterButton, scheduleButton, "EnterOrScheduleTransactionInFuture") == KMessageBox::Yes;
+ }
+ if(enter) {
+ // add new transaction
+ file->addTransaction(*it_ts);
+ // pass the newly assigned id on to the caller
+ newId = (*it_ts).id();
+ // refresh account and transaction object because they might have changed
+ m_account = file->account(m_account.id());
+ t = (*it_ts);
+
+ // if a new transaction has a valid number, keep it with the account
+ QString number = (*it_ts).splits()[0].number();
+ if(!number.isEmpty()) {
+ m_account.setValue("lastNumberUsed", number);
+ file->modifyAccount(m_account);
+ }
+
+ } else {
+ // turn object creation on, so that moving the focus does
+ // not screw up the dialog that might be popping up
+ emit objectCreation(true);
+ emit scheduleTransaction(*it_ts, MyMoneySchedule::OCCUR_ONCE);
+ emit objectCreation(false);
+
+ newTransactionCreated = false;
+ }
+
+ // send out the post date of this transaction
+ emit lastPostDateUsed((*it_ts).postDate());
+ } else {
+ // modify existing transaction
+ file->modifyTransaction(*it_ts);
+ }
+ }
+ emit statusProgress(i++, 0);
+
+ // update m_transactions to contain the newly created transaction so that
+ // it is selected as the current one
+ // we need to do that before we commit the transaction to the engine
+ // as we need it during the update of the views that is caused by committing already.
+ if(newTransactionCreated) {
+ m_transactions.clear();
+ MyMoneySplit s;
+ // a transaction w/o a single split should not exist and adding it
+ // should throw an exception in MyMoneyFile::addTransaction, but we
+ // remain on the save side of things to check for it
+ if(t.splitCount() > 0)
+ s = t.splits()[0];
+ KMyMoneyRegister::SelectedTransaction st(t, s);
+ m_transactions.append(st);
+ }
+
+ ft.commit();
+
+ // now analyse the balances and spit out warnings to the user
+ QMap<QString, bool>::const_iterator it_a;
+
+ if(!suppressBalanceWarnings) {
+ for(it_a = accountIds.begin(); it_a != accountIds.end(); ++it_a) {
+ QString msg;
+ MyMoneyAccount acc = file->account(it_a.key());
+ MyMoneyMoney balance = file->balance(acc.id());
+ const MyMoneySecurity& sec = file->security(acc.currencyId());
+ QString key;
+ key = "minBalanceEarly";
+ if(!acc.value(key).isEmpty()) {
+ if(minBalanceEarly[acc.id()] == false && balance < MyMoneyMoney(acc.value(key))) {
+ msg = QString("<qt>%1</qt>").arg(i18n("The balance of account <b>%1</b> dropped below the warning balance of %2.").arg(acc.name(), MyMoneyMoney(acc.value(key)).formatMoney(acc, sec)));
+ }
+ }
+ key = "minBalanceAbsolute";
+ if(!acc.value(key).isEmpty()) {
+ if(minBalanceAbsolute[acc.id()] == false && balance < MyMoneyMoney(acc.value(key))) {
+ msg = QString("<qt>%1</qt>").arg(i18n("The balance of account <b>%1</b> dropped below the minimum balance of %2.").arg(acc.name(), MyMoneyMoney(acc.value(key)).formatMoney(acc, sec)));
+ }
+ }
+ key = "maxCreditEarly";
+ if(!acc.value(key).isEmpty()) {
+ if(maxCreditEarly[acc.id()] == false && balance < MyMoneyMoney(acc.value(key))) {
+ msg = QString("<qt>%1</qt>").arg(i18n("The balance of account <b>%1</b> dropped below the maximum credit warning limit of %2.").arg(acc.name(), MyMoneyMoney(acc.value(key)).formatMoney(acc, sec)));
+ }
+ }
+ key = "maxCreditAbsolute";
+ if(!acc.value(key).isEmpty()) {
+ if(maxCreditAbsolute[acc.id()] == false && balance < MyMoneyMoney(acc.value(key))) {
+ msg = QString("<qt>%1</qt>").arg(i18n("The balance of account <b>%1</b> dropped below the maximum credit limit of %2.").arg(acc.name(), MyMoneyMoney(acc.value(key)).formatMoney(acc, sec)));
+ }
+ }
+
+ if(!msg.isEmpty()) {
+ emit balanceWarning(m_regForm, acc, msg);
+ }
+ }
+ }
+ } catch(MyMoneyException * e) {
+ qDebug("Unable to store transaction within engine: %s", e->what().latin1());
+ delete e;
+ newTransactionCreated = false;
+ }
+
+ emit statusProgress(-1, -1);
+ emit statusMsg(QString());
+
+ }
+ return storeTransactions;
+}
+
+
+StdTransactionEditor::StdTransactionEditor()
+{
+}
+
+StdTransactionEditor::StdTransactionEditor(TransactionEditorContainer* regForm, KMyMoneyRegister::Transaction* item, const KMyMoneyRegister::SelectedTransactions& list, const QDate& lastPostDate) :
+ TransactionEditor(regForm, item, list, lastPostDate),
+ m_inUpdateVat(false)
+{
+}
+
+StdTransactionEditor::~StdTransactionEditor()
+{
+ KMyMoneyTransactionForm::TransactionForm* form = dynamic_cast<KMyMoneyTransactionForm::TransactionForm*>(m_regForm);
+ if(form) {
+ form->enableTabBar(true);
+ }
+}
+
+bool StdTransactionEditor::eventFilter(QObject* o, QEvent* e)
+{
+ bool rc = TransactionEditor::eventFilter(o, e);
+
+#if 0
+ // this is sofar dead code here, as the focus out event for Comboboxes
+ // never comes along here. I don't know why (ipwizard - 2009-10-03)
+ if((e->type() == QEvent::FocusOut)
+ && (haveWidget("payee") == dynamic_cast<QWidget*>(o))) {
+ // loosing the focus on the payee widget?
+ qDebug("Loosing focus on payee");
+ KMyMoneyPayeeCombo* p = dynamic_cast<KMyMoneyPayeeCombo*>(haveWidget("payee"));
+ if(!p->selectedItem().isEmpty())
+ slotUpdatePayee(p->selectedItem());
+ }
+#endif
+ return rc;
+}
+
+void StdTransactionEditor::createEditWidgets(void)
+{
+ KMyMoneyCategory* account = new KMyMoneyCategory;
+ account->setHint(i18n("Account"));
+ m_editWidgets["account"] = account;
+ connect(account, SIGNAL(textChanged(const QString&)), this, SLOT(slotUpdateButtonState()));
+ connect(account, SIGNAL(itemSelected(const QString&)), this, SLOT(slotUpdateAccount(const QString&)));
+
+ KMyMoneyPayeeCombo* payee = new KMyMoneyPayeeCombo;
+ payee->setHint(i18n("Payer/Receiver"));
+ m_editWidgets["payee"] = payee;
+ connect(payee, SIGNAL(textChanged(const QString&)), this, SLOT(slotUpdateButtonState()));
+ connect(payee, SIGNAL(createItem(const QString&, QString&)), this, SIGNAL(createPayee(const QString&, QString&)));
+ connect(payee, SIGNAL(objectCreation(bool)), this, SIGNAL(objectCreation(bool)));
+ connect(payee, SIGNAL(itemSelected(const QString&)), this, SLOT(slotUpdatePayee(const QString&)));
+
+ KMyMoneyCategory* category = new KMyMoneyCategory(0, 0, true);
+ category->setHint(i18n("Category/Account"));
+ m_editWidgets["category"] = category;
+ connect(category, SIGNAL(itemSelected(const QString&)), this, SLOT(slotUpdateCategory(const QString&)));
+ connect(category, SIGNAL(textChanged(const QString&)), this, SLOT(slotUpdateButtonState()));
+ connect(category, SIGNAL(createItem(const QString&, QString&)), this, SLOT(slotCreateCategory(const QString&, QString&)));
+ connect(category, SIGNAL(objectCreation(bool)), this, SIGNAL(objectCreation(bool)));
+ connect(category->splitButton(), SIGNAL(clicked()), this, SLOT(slotEditSplits()));
+ category->splitButton()->setDisabled(true);
+
+ KTextEdit* memo = new KTextEdit;
+ memo->setTabChangesFocus(true);
+ m_editWidgets["memo"] = memo;
+
+ bool showNumberField = true;
+ switch(m_account.accountType()) {
+ case MyMoneyAccount::Savings:
+ case MyMoneyAccount::Cash:
+ case MyMoneyAccount::Loan:
+ case MyMoneyAccount::AssetLoan:
+ case MyMoneyAccount::Asset:
+ case MyMoneyAccount::Liability:
+ case MyMoneyAccount::Equity:
+ showNumberField = KMyMoneyGlobalSettings::alwaysShowNrField();
+ break;
+
+ case MyMoneyAccount::Income:
+ case MyMoneyAccount::Expense:
+ showNumberField = false;
+ break;
+
+ default:
+ break;
+ }
+
+ if(showNumberField) {
+ kMyMoneyLineEdit* number = new kMyMoneyLineEdit;
+ number->setHint(i18n("Number"));
+ m_editWidgets["number"] = number;
+ connect(number, SIGNAL(lineChanged(const QString&)), this, SLOT(slotNumberChanged(const QString&)));
+ // number->installEventFilter(this);
+ }
+
+ m_editWidgets["postdate"] = new kMyMoneyDateInput;
+ connect(m_editWidgets["postdate"], SIGNAL(dateChanged(const QDate&)), this, SLOT(slotUpdateButtonState()));
+
+ kMyMoneyEdit* value = new kMyMoneyEdit;
+ m_editWidgets["amount"] = value;
+ value->setResetButtonVisible(false);
+ connect(value, SIGNAL(valueChanged(const QString&)), this, SLOT(slotUpdateAmount(const QString&)));
+ connect(value, SIGNAL(textChanged(const QString&)), this, SLOT(slotUpdateButtonState()));
+
+ value = new kMyMoneyEdit;
+ m_editWidgets["payment"] = value;
+ value->setResetButtonVisible(false);
+ connect(value, SIGNAL(valueChanged(const QString&)), this, SLOT(slotUpdatePayment(const QString&)));
+ connect(value, SIGNAL(textChanged(const QString&)), this, SLOT(slotUpdateButtonState()));
+
+ value = new kMyMoneyEdit;
+ m_editWidgets["deposit"] = value;
+ value->setResetButtonVisible(false);
+ connect(value, SIGNAL(valueChanged(const QString&)), this, SLOT(slotUpdateDeposit(const QString&)));
+ connect(value, SIGNAL(textChanged(const QString&)), this, SLOT(slotUpdateButtonState()));
+
+ KMyMoneyCashFlowCombo* cashflow = new KMyMoneyCashFlowCombo(0, 0, m_account.accountGroup());
+ m_editWidgets["cashflow"] = cashflow;
+ connect(cashflow, SIGNAL(directionSelected(KMyMoneyRegister::CashFlowDirection)), this, SLOT(slotUpdateCashFlow(KMyMoneyRegister::CashFlowDirection)));
+ connect(cashflow, SIGNAL(directionSelected(KMyMoneyRegister::CashFlowDirection)), this, SLOT(slotUpdateButtonState()));
+
+ KMyMoneyReconcileCombo* reconcile = new KMyMoneyReconcileCombo;
+ m_editWidgets["status"] = reconcile;
+ connect(reconcile, SIGNAL(itemSelected(const QString&)), this, SLOT(slotUpdateButtonState()));
+
+ KMyMoneyRegister::QWidgetContainer::iterator it_w;
+ for(it_w = m_editWidgets.begin(); it_w != m_editWidgets.end(); ++it_w) {
+ (*it_w)->installEventFilter(this);
+ }
+ // if we don't have more than 1 selected transaction, we don't need
+ // the "don't change" item in some of the combo widgets
+ if(!isMultiSelection()) {
+ reconcile->removeDontCare();
+ cashflow->removeDontCare();
+ }
+
+ QLabel* label;
+ m_editWidgets["category-label"] = label = new QLabel(i18n("Category"), 0);
+ label->setAlignment(Qt::AlignVCenter | Qt::DontClip);
+
+ // create a copy of tabbar above the form (if we are created for a form)
+ KMyMoneyTransactionForm::TransactionForm* form = dynamic_cast<KMyMoneyTransactionForm::TransactionForm*>(m_regForm);
+ if(form) {
+ form->enableTabBar(false);
+ KMyMoneyTransactionForm::TabBar* tabbar = new KMyMoneyTransactionForm::TabBar;
+ m_editWidgets["tabbar"] = tabbar;
+ tabbar->copyTabs(form->tabBar());
+ connect(tabbar, SIGNAL(tabSelected(int)), this, SLOT(slotUpdateAction(int)));
+ }
+
+ label = new QLabel(i18n("Date"), 0);
+ label->setAlignment(Qt::AlignVCenter | Qt::DontClip);
+ m_editWidgets["date-label"] = label;
+
+ label = new QLabel(i18n("Number"), 0);
+ label->setAlignment(Qt::AlignVCenter | Qt::DontClip);
+ m_editWidgets["number-label"] = label;
+
+ setupPrecision();
+}
+
+void StdTransactionEditor::setupCategoryWidget(QString& categoryId)
+{
+ TransactionEditor::setupCategoryWidget(dynamic_cast<KMyMoneyCategory*>(m_editWidgets["category"]), m_splits, categoryId, SLOT(slotEditSplits()));
+
+ if(m_splits.count() == 1)
+ m_shares = m_splits[0].shares();
+}
+
+bool StdTransactionEditor::isTransfer(const QString& accId1, const QString& accId2) const
+{
+ if(accId1.isEmpty() || accId2.isEmpty())
+ return false;
+
+ return MyMoneyFile::instance()->account(accId1).isIncomeExpense() == MyMoneyFile::instance()->account(accId2).isIncomeExpense();
+}
+
+void StdTransactionEditor::loadEditWidgets(KMyMoneyRegister::Action action)
+{
+ // don't kick off VAT processing from here
+ m_inUpdateVat = true;
+
+ QMap<QString, QWidget*>::const_iterator it_w;
+ QWidget* w;
+ AccountSet aSet;
+
+ // load the account widget
+ KMyMoneyCategory* account = dynamic_cast<KMyMoneyCategory*>(haveWidget("account"));
+ if(account) {
+ aSet.addAccountGroup(MyMoneyAccount::Asset);
+ aSet.addAccountGroup(MyMoneyAccount::Liability);
+ aSet.removeAccountType(MyMoneyAccount::AssetLoan);
+ aSet.removeAccountType(MyMoneyAccount::CertificateDep);
+ aSet.removeAccountType(MyMoneyAccount::Investment);
+ aSet.removeAccountType(MyMoneyAccount::Stock);
+ aSet.removeAccountType(MyMoneyAccount::MoneyMarket);
+ aSet.removeAccountType(MyMoneyAccount::Loan);
+ aSet.load(account->selector());
+ account->completion()->setSelected(m_account.id());
+ account->slotItemSelected(m_account.id());
+ }
+
+ // load the payee widget
+ KMyMoneyPayeeCombo* payee = dynamic_cast<KMyMoneyPayeeCombo*>(m_editWidgets["payee"]);
+ payee->loadPayees(MyMoneyFile::instance()->payeeList());
+
+ // load the category widget
+ KMyMoneyCategory* category = dynamic_cast<KMyMoneyCategory*>(m_editWidgets["category"]);
+ disconnect(category, SIGNAL(focusIn()), this, SLOT(slotEditSplits()));
+
+ // check if the current transaction has a reference to an equity account
+ bool haveEquityAccount = false;
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = m_transaction.splits().begin(); !haveEquityAccount && it_s != m_transaction.splits().end(); ++it_s) {
+ MyMoneyAccount acc = MyMoneyFile::instance()->account((*it_s).accountId());
+ if(acc.accountType() == MyMoneyAccount::Equity)
+ haveEquityAccount = true;
+ }
+
+ aSet.clear();
+ aSet.addAccountGroup(MyMoneyAccount::Asset);
+ aSet.addAccountGroup(MyMoneyAccount::Liability);
+ aSet.addAccountGroup(MyMoneyAccount::Income);
+ aSet.addAccountGroup(MyMoneyAccount::Expense);
+ if(KMyMoneyGlobalSettings::expertMode() || haveEquityAccount)
+ aSet.addAccountGroup(MyMoneyAccount::Equity);
+
+ aSet.removeAccountType(MyMoneyAccount::CertificateDep);
+ aSet.removeAccountType(MyMoneyAccount::Investment);
+ aSet.removeAccountType(MyMoneyAccount::Stock);
+ aSet.removeAccountType(MyMoneyAccount::MoneyMarket);
+ aSet.load(category->selector());
+
+ // if an account is specified then remove it from the widget so that the user
+ // cannot create a transfer with from and to account being the same account
+ if(!m_account.id().isEmpty())
+ category->selector()->removeItem(m_account.id());
+
+ if(!isMultiSelection()) {
+ dynamic_cast<KTextEdit*>(m_editWidgets["memo"])->setText(m_split.memo());
+ if(m_transaction.postDate().isValid())
+ dynamic_cast<kMyMoneyDateInput*>(m_editWidgets["postdate"])->setDate(m_transaction.postDate());
+ else if(m_lastPostDate.isValid())
+ dynamic_cast<kMyMoneyDateInput*>(m_editWidgets["postdate"])->setDate(m_lastPostDate);
+ else
+ dynamic_cast<kMyMoneyDateInput*>(m_editWidgets["postdate"])->setDate(QDate::currentDate());
+
+ if((w = haveWidget("number")) != 0) {
+ dynamic_cast<kMyMoneyLineEdit*>(w)->loadText(m_split.number());
+ if(m_transaction.id().isEmpty() // new transaction
+ && dynamic_cast<kMyMoneyLineEdit*>(w)->text().isEmpty() // no number filled in
+ && m_account.accountType() == MyMoneyAccount::Checkings // checkings account
+ && KMyMoneyGlobalSettings::autoIncCheckNumber()) { // and auto inc number turned on?
+ assignNextNumber();
+ }
+ }
+ dynamic_cast<KMyMoneyReconcileCombo*>(m_editWidgets["status"])->setState(m_split.reconcileFlag());
+
+ QString payeeId = m_split.payeeId();
+ if(!payeeId.isEmpty()) {
+ payee->setSelectedItem(payeeId);
+ }
+
+ m_splits.clear();
+ if(m_transaction.splitCount() < 2) {
+ category->completion()->setSelected(QString());
+ } else {
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = m_transaction.splits().begin(); it_s != m_transaction.splits().end(); ++it_s) {
+ if((*it_s) == m_split)
+ continue;
+ m_splits.append(*it_s);
+ }
+ }
+ QString categoryId;
+ setupCategoryWidget(categoryId);
+
+ if((w = haveWidget("cashflow")) != 0) {
+ KMyMoneyCashFlowCombo* cashflow = dynamic_cast<KMyMoneyCashFlowCombo*>(w);
+ cashflow->setDirection(m_split.value().isNegative() ? KMyMoneyRegister::Payment : KMyMoneyRegister::Deposit);
+ }
+
+ if((w = haveWidget("category-label")) != 0) {
+ QLabel *categoryLabel = dynamic_cast<QLabel*>(w);
+ if(isTransfer(m_split.accountId(), categoryId)) {
+ if(m_split.value().isPositive())
+ categoryLabel->setText(i18n("Transfer from"));
+ else
+ categoryLabel->setText(i18n("Transfer to"));
+ }
+ }
+
+ MyMoneyMoney value = m_split.shares();
+
+ if(haveWidget("deposit")) {
+ if(m_split.shares().isNegative()) {
+ dynamic_cast<kMyMoneyEdit*>(m_editWidgets["deposit"])->loadText("");
+ dynamic_cast<kMyMoneyEdit*>(m_editWidgets["payment"])->setValue(value.abs());
+ } else {
+ dynamic_cast<kMyMoneyEdit*>(m_editWidgets["deposit"])->setValue(value.abs());
+ dynamic_cast<kMyMoneyEdit*>(m_editWidgets["payment"])->loadText("");
+ }
+ }
+ if((w = haveWidget("amount")) != 0) {
+ dynamic_cast<kMyMoneyEdit*>(w)->setValue(value.abs());
+ }
+
+ slotUpdateCategory(categoryId);
+
+ // try to preset for specific action if a new transaction is being started
+ if(m_transaction.id().isEmpty()) {
+ if((w = haveWidget("category-label")) != 0) {
+ TabBar* tabbar = dynamic_cast<TabBar*>(haveWidget("tabbar"));
+ if(action == KMyMoneyRegister::ActionNone) {
+ if(tabbar) {
+ action = static_cast<KMyMoneyRegister::Action>(tabbar->currentTab());
+ }
+ }
+ if(action != KMyMoneyRegister::ActionNone) {
+ QLabel *categoryLabel = dynamic_cast<QLabel*>(w);
+ if(action == KMyMoneyRegister::ActionTransfer) {
+ if(m_split.value().isPositive())
+ categoryLabel->setText(i18n("Transfer from"));
+ else
+ categoryLabel->setText(i18n("Transfer to"));
+ }
+ if((w = haveWidget("cashflow")) != 0) {
+ KMyMoneyCashFlowCombo* cashflow = dynamic_cast<KMyMoneyCashFlowCombo*>(w);
+ if(action == KMyMoneyRegister::ActionDeposit || (action == KMyMoneyRegister::ActionTransfer && m_split.value().isPositive()))
+ cashflow->setDirection(KMyMoneyRegister::Deposit);
+ else
+ cashflow->setDirection(KMyMoneyRegister::Payment);
+ }
+ if(tabbar) {
+ tabbar->setCurrentTab(action);
+ }
+ }
+ }
+ } else {
+ TabBar* tabbar = dynamic_cast<TabBar*>(haveWidget("tabbar"));
+ if(tabbar) {
+ if(!isTransfer(m_split.accountId(), categoryId)) {
+ tabbar->setCurrentTab(m_split.value().isNegative() ? KMyMoneyRegister::ActionWithdrawal : KMyMoneyRegister::ActionDeposit);
+ } else {
+ tabbar->setCurrentTab(KMyMoneyRegister::ActionTransfer);
+ }
+ }
+ }
+
+ } else {
+ dynamic_cast<kMyMoneyDateInput*>(m_editWidgets["postdate"])->loadDate(QDate());
+ dynamic_cast<KMyMoneyReconcileCombo*>(m_editWidgets["status"])->setState(MyMoneySplit::Unknown);
+ if(haveWidget("deposit")) {
+ dynamic_cast<kMyMoneyEdit*>(m_editWidgets["deposit"])->loadText("");
+ dynamic_cast<kMyMoneyEdit*>(m_editWidgets["deposit"])->setAllowEmpty();
+ dynamic_cast<kMyMoneyEdit*>(m_editWidgets["payment"])->loadText("");
+ dynamic_cast<kMyMoneyEdit*>(m_editWidgets["payment"])->setAllowEmpty();
+ }
+ if((w = haveWidget("amount")) != 0) {
+ dynamic_cast<kMyMoneyEdit*>(w)->loadText("");
+ dynamic_cast<kMyMoneyEdit*>(w)->setAllowEmpty();
+ }
+
+ if((w = haveWidget("cashflow")) != 0) {
+ KMyMoneyCashFlowCombo* cashflow = dynamic_cast<KMyMoneyCashFlowCombo*>(w);
+ cashflow->setDirection(KMyMoneyRegister::Unknown);
+ }
+ if((w = haveWidget("tabbar")) != 0) {
+ w->setEnabled(false);
+ }
+
+ category->completion()->setSelected(QString());
+ }
+
+ // allow kick off VAT processing again
+ m_inUpdateVat = false;
+}
+
+QWidget* StdTransactionEditor::firstWidget(void) const
+{
+ QWidget* w = 0;
+ if(m_initialAction != KMyMoneyRegister::ActionNone)
+ w = haveWidget("payee");
+ return w;
+}
+
+void StdTransactionEditor::slotReloadEditWidgets(void)
+{
+ // reload category widget
+ KMyMoneyCategory* category = dynamic_cast<KMyMoneyCategory*>(m_editWidgets["category"]);
+ QString categoryId = category->selectedItem();
+
+ AccountSet aSet;
+ aSet.addAccountGroup(MyMoneyAccount::Asset);
+ aSet.addAccountGroup(MyMoneyAccount::Liability);
+ aSet.addAccountGroup(MyMoneyAccount::Income);
+ aSet.addAccountGroup(MyMoneyAccount::Expense);
+ if(KMyMoneyGlobalSettings::expertMode())
+ aSet.addAccountGroup(MyMoneyAccount::Equity);
+ aSet.load(category->selector());
+
+ // if an account is specified then remove it from the widget so that the user
+ // cannot create a transfer with from and to account being the same account
+ if(!m_account.id().isEmpty())
+ category->selector()->removeItem(m_account.id());
+
+ if(!categoryId.isEmpty())
+ category->setSelectedItem(categoryId);
+
+
+ // reload payee widget
+ KMyMoneyPayeeCombo* payee = dynamic_cast<KMyMoneyPayeeCombo*>(m_editWidgets["payee"]);
+ QString payeeId = payee->selectedItem();
+
+ payee->loadPayees(MyMoneyFile::instance()->payeeList());
+
+ if(!payeeId.isEmpty()) {
+ payee->setSelectedItem(payeeId);
+ }
+}
+
+void StdTransactionEditor::slotUpdatePayee(const QString& payeeId)
+{
+ // we have a new payee assigned to this transaction.
+ // retrieve some information about the state of the category widget
+ KMyMoneyCategory* category = dynamic_cast<KMyMoneyCategory*>(m_editWidgets["category"]);
+ QStringList list;
+ category->selectedItems(list);
+
+ // If payee has associated default account (category), set that now if
+ // category is not filled
+ const MyMoneyPayee& payeeObj = MyMoneyFile::instance()->payee(payeeId);
+ if (payeeObj.defaultAccountEnabled() && list.isEmpty()) {
+ KMyMoneyCategory* category = dynamic_cast<KMyMoneyCategory*>(m_editWidgets["category"]);
+ category->slotItemSelected(payeeObj.defaultAccountId());
+ return;
+ }
+
+ // in case there is no category assigned, no value entered and no
+ // memo available, we search for the last transaction of this payee
+ // in the account.
+ if(m_transaction.id().isEmpty()
+ && m_splits.count() == 0
+ && KMyMoneyGlobalSettings::autoFillTransaction() != 0
+ && list.isEmpty()) {
+ // check if memo is empty
+ KTextEdit* memo = dynamic_cast<KTextEdit*>(m_editWidgets["memo"]);
+ if(memo && !memo->text().isEmpty())
+ return;
+
+ // check if all value fields are empty
+ kMyMoneyEdit* amount;
+ QStringList fields;
+ fields << "amount" << "payment" << "deposit";
+ QStringList::const_iterator it_f;
+ for(it_f = fields.begin(); it_f != fields.end(); ++it_f) {
+ amount = dynamic_cast<kMyMoneyEdit*>(haveWidget(*it_f));
+ if(amount && !amount->value().isZero())
+ return;
+ }
+
+#if 0
+ // Tony mentioned, that autofill does not work when he changed the date. Well,
+ // that certainly makes sense when you enter transactions in register mode as
+ // opposed to form mode, because the date field is located prior to the date
+ // field in the tab order of the widgets and the user might have already
+ // changed it.
+ //
+ // So I commented out the code that checks the date but left it in for reference.
+ // (ipwizard, 2008-04-07)
+
+ // check if date has been altered by user
+ kMyMoneyDateInput* postDate = dynamic_cast<kMyMoneyDateInput*>(m_editWidgets["postdate"]);
+ if((m_lastPostDate.isValid() && (postDate->date() != m_lastPostDate))
+ || (!m_lastPostDate.isValid() && (postDate->date() != QDate::currentDate())))
+ return;
+#endif
+
+ // if we got here, we have to autofill
+ autoFill(payeeId);
+ }
+}
+
+MyMoneyMoney StdTransactionEditor::shares(const MyMoneyTransaction& t) const
+{
+ MyMoneyMoney result;
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = t.splits().begin(); it_s != t.splits().end(); ++it_s) {
+ if((*it_s).accountId() == m_account.id()) {
+ result += (*it_s).shares();
+ }
+ }
+ return result;
+}
+
+struct uniqTransaction {
+ const MyMoneyTransaction* t;
+ int cnt;
+};
+
+void StdTransactionEditor::autoFill(const QString& payeeId)
+{
+ QValueList<QPair<MyMoneyTransaction, MyMoneySplit> > list;
+ MyMoneyTransactionFilter filter(m_account.id());
+ filter.addPayee(payeeId);
+ MyMoneyFile::instance()->transactionList(list, filter);
+ if(!list.empty()) {
+ // ok, we found at least one previous transaction. now we clear out
+ // what we have collected so far and add those splits from
+ // the previous transaction.
+ QValueList<QPair<MyMoneyTransaction, MyMoneySplit> >::const_iterator it_t;
+ QMap<QString, struct uniqTransaction> uniqList;
+
+ // collect the transactions and see if we have any duplicates
+ for(it_t = list.begin(); it_t != list.end(); ++it_t) {
+ QString key = (*it_t).first.accountSignature();
+ int cnt = 0;
+ QMap<QString, struct uniqTransaction>::iterator it_u;
+ do {
+ QString ukey = QString("%1-%2").arg(key).arg(cnt);
+ it_u = uniqList.find(ukey);
+ if(it_u == uniqList.end()) {
+ uniqList[ukey].t = &((*it_t).first);
+ uniqList[ukey].cnt = 1;
+ } else if (KMyMoneyGlobalSettings::autoFillTransaction() == 1) {
+ // we already have a transaction with this signature. we must
+ // now check, if we should really treat it as a duplicate according
+ // to the value comparison delta.
+ MyMoneyMoney s1 = shares(*((*it_u).t));
+ MyMoneyMoney s2 = shares((*it_t).first);
+ if(s2.abs() > s1.abs()) {
+ MyMoneyMoney t(s1);
+ s1 = s2;
+ s2 = t;
+ }
+ MyMoneyMoney diff;
+ if(s2.isZero())
+ diff = s1.abs();
+ else
+ diff = ((s1 - s2) / s2).convert(10000);
+ if(diff.isPositive() && diff <= MyMoneyMoney(KMyMoneyGlobalSettings::autoFillDifference(),100)) {
+ uniqList[ukey].t = &((*it_t).first);
+ break; // end while loop
+ }
+ } else if (KMyMoneyGlobalSettings::autoFillTransaction() == 2) {
+ (*it_u).cnt++;
+ break; // end while loop
+ }
+ ++cnt;
+ } while(it_u != uniqList.end());
+
+ }
+
+ MyMoneyTransaction t;
+ if (KMyMoneyGlobalSettings::autoFillTransaction() != 2) {
+#if 0
+ // I removed this code to allow cancellation of an autofill if
+ // it does not match even if there is only a single matching
+ // transaction for the payee in question. In case, we want to revert
+ // to the old behavior, don't forget to uncomment the closing
+ // brace further down in the code as well. (ipwizard 2009-01-16)
+ if(uniqList.count() == 1) {
+ t = list.last().first;
+ } else {
+#endif
+ KSelectTransactionsDlg dlg(m_account, m_regForm);
+ dlg.setCaption(i18n("Select autofill transaction"));
+
+ QMap<QString, struct uniqTransaction>::const_iterator it_u;
+ for(it_u = uniqList.begin(); it_u != uniqList.end(); ++it_u) {
+ dlg.addTransaction(*(*it_u).t);
+ }
+
+ // setup sort order
+ dlg.m_register->setSortOrder("1,-9,-4");
+ // sort the transactions according to the sort setting
+ dlg.m_register->sortItems();
+
+ // and select the last item
+ if(dlg.m_register->lastItem())
+ dlg.m_register->selectItem(dlg.m_register->lastItem());
+
+ if(dlg.exec() == QDialog::Accepted) {
+ t = dlg.transaction();
+ }
+#if 0
+ }
+#endif
+ } else {
+ int maxCnt = 0;
+ QMap<QString, struct uniqTransaction>::const_iterator it_u;
+ for(it_u = uniqList.begin(); it_u != uniqList.end(); ++it_u) {
+ if((*it_u).cnt > maxCnt) {
+ t = *(*it_u).t;
+ maxCnt = (*it_u).cnt;
+ }
+ }
+ }
+
+ if(t != MyMoneyTransaction()) {
+ m_transaction.removeSplits();
+ m_split = MyMoneySplit();
+ MyMoneySplit otherSplit;
+ QValueList<MyMoneySplit>::ConstIterator it;
+ for(it = t.splits().begin(); it != t.splits().end(); ++it) {
+ MyMoneySplit s(*it);
+ s.setReconcileFlag(MyMoneySplit::NotReconciled);
+ s.setReconcileDate(QDate());
+ s.clearId();
+ s.setBankID(QString());
+ // older versions of KMyMoney used to set the action
+ // we don't need this anymore
+ if(s.action() != MyMoneySplit::ActionAmortization
+ && s.action() != MyMoneySplit::ActionInterest) {
+ s.setAction(QString());
+ }
+
+ // FIXME update check number. The old comment contained
+ //
+ // <quote>
+ // If a check number is already specified by the user it is
+ // used. If the input field is empty and the previous transaction
+ // contains a checknumber, the next usuable check no will be assigned
+ // to the transaction.
+ // </quote>
+
+ kMyMoneyLineEdit* editNr = dynamic_cast<kMyMoneyLineEdit*>(haveWidget("number"));
+ if(editNr && !editNr->text().isEmpty()) {
+ s.setNumber(editNr->text());
+ } else if(!s.number().isEmpty()) {
+ s.setNumber(KMyMoneyUtils::nextCheckNumber(m_account));
+ }
+
+ // if the transaction has exactly two splits, remove
+ // the memo text of the split that does not reference
+ // the current account. This allows the user to change
+ // the autofilled memo text which will then also be used
+ // in this split. See createTransaction() for this logic.
+ if(s.accountId() != m_account.id() && t.splitCount() == 2)
+ s.setMemo(QString());
+
+ m_transaction.addSplit(s);
+ if(s.accountId() == m_account.id() && m_split == MyMoneySplit()) {
+ m_split = s;
+ } else {
+ otherSplit = s;
+ }
+ }
+
+ // make sure to extract the right action
+ KMyMoneyRegister::Action action;
+ action = m_split.shares().isNegative() ? KMyMoneyRegister::ActionWithdrawal : KMyMoneyRegister::ActionDeposit;
+
+ if(m_transaction.splitCount() == 2) {
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(otherSplit.accountId());
+ if(acc.isAssetLiability())
+ action = KMyMoneyRegister::ActionTransfer;
+ }
+
+ // now setup the widgets with the new data but keep the date
+ QDate date = dynamic_cast<kMyMoneyDateInput*>(m_editWidgets["postdate"])->date();
+ loadEditWidgets(action);
+ dynamic_cast<kMyMoneyDateInput*>(m_editWidgets["postdate"])->setDate(date);
+ }
+ }
+
+ // focus jumps into the category field
+ QWidget* w;
+ if((w = haveWidget("payee")) != 0) {
+ w->setFocus();
+ }
+}
+
+void StdTransactionEditor::slotUpdateAction(int action)
+{
+ TabBar* tabbar = dynamic_cast<TabBar*>(haveWidget("tabbar"));
+ if(tabbar) {
+ QLabel* categoryLabel = dynamic_cast<QLabel*>(haveWidget("category-label"));
+ KMyMoneyCashFlowCombo* cashflow = dynamic_cast<KMyMoneyCashFlowCombo*>(m_editWidgets["cashflow"]);
+ switch(action) {
+ case KMyMoneyRegister::ActionDeposit:
+ categoryLabel->setText(i18n("Category"));
+ cashflow->setDirection(KMyMoneyRegister::Deposit);
+ break;
+ case KMyMoneyRegister::ActionTransfer:
+ categoryLabel->setText(i18n("Transfer from"));
+ slotUpdateCashFlow(cashflow->direction());
+ break;
+ case KMyMoneyRegister::ActionWithdrawal:
+ categoryLabel->setText(i18n("Category"));
+ cashflow->setDirection(KMyMoneyRegister::Payment);
+ break;
+ }
+ }
+}
+
+void StdTransactionEditor::slotUpdateCashFlow(KMyMoneyRegister::CashFlowDirection dir)
+{
+ QLabel* categoryLabel = dynamic_cast<QLabel*>(haveWidget("category-label"));
+
+ // qDebug("Update cashflow to %d", dir);
+ if(categoryLabel) {
+ TabBar* tabbar = dynamic_cast<TabBar*>(haveWidget("tabbar"));
+ if(categoryLabel->text() != i18n("Category")) {
+ tabbar->setCurrentTab(KMyMoneyRegister::ActionTransfer);
+ if(dir == KMyMoneyRegister::Deposit) {
+ categoryLabel->setText(i18n("Transfer from"));
+ } else {
+ categoryLabel->setText(i18n("Transfer to"));
+ }
+ } else {
+ if(dir == KMyMoneyRegister::Deposit)
+ tabbar->setCurrentTab(KMyMoneyRegister::ActionDeposit);
+ else
+ tabbar->setCurrentTab(KMyMoneyRegister::ActionWithdrawal);
+ }
+ }
+}
+
+void StdTransactionEditor::slotUpdateCategory(const QString& id)
+{
+ QLabel *categoryLabel = dynamic_cast<QLabel*>(haveWidget("category-label"));
+ // qDebug("Update category to %s", id.data());
+
+ if(categoryLabel) {
+ TabBar* tabbar = dynamic_cast<TabBar*>(haveWidget("tabbar"));
+ kMyMoneyEdit* amount = dynamic_cast<kMyMoneyEdit*>(m_editWidgets["amount"]);
+ MyMoneyMoney val = amount->value();
+
+ if(categoryLabel->text() == i18n("Transfer from")) {
+ val = -val;
+ } else {
+ val = val.abs();
+ }
+
+ if(tabbar) {
+ tabbar->tab(KMyMoneyRegister::ActionTransfer)->setEnabled(true);
+ tabbar->tab(KMyMoneyRegister::ActionDeposit)->setEnabled(true);
+ tabbar->tab(KMyMoneyRegister::ActionWithdrawal)->setEnabled(true);
+ }
+
+ if(!id.isEmpty()) {
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(id);
+ if(acc.isAssetLiability()
+ || acc.accountGroup() == MyMoneyAccount::Equity) {
+ if(tabbar) {
+ tabbar->tab(KMyMoneyRegister::ActionDeposit)->setEnabled(false);
+ tabbar->tab(KMyMoneyRegister::ActionWithdrawal)->setEnabled(false);
+ }
+ // only change the label if an amount is already filled in
+ if(!val.isZero()) {
+ if(val.isNegative())
+ categoryLabel->setText(i18n("Transfer from"));
+ else
+ categoryLabel->setText(i18n("Transfer to"));
+ }
+ } else {
+ if(tabbar)
+ tabbar->tab(KMyMoneyRegister::ActionTransfer)->setEnabled(false);
+ categoryLabel->setText(i18n("Category"));
+ }
+ updateAmount(val.abs());
+ } else {
+ KMyMoneyCategory* category = dynamic_cast<KMyMoneyCategory*>(m_editWidgets["category"]);
+ if(!category->currentText().isEmpty() && tabbar)
+ tabbar->tab(KMyMoneyRegister::ActionTransfer)->setEnabled(false);
+ categoryLabel->setText(i18n("Category"));
+ }
+ if(tabbar)
+ tabbar->update();
+ }
+ updateVAT(false);
+}
+
+void StdTransactionEditor::slotUpdatePayment(const QString& txt)
+{
+ MyMoneyMoney val(txt);
+
+ if(val.isNegative()) {
+ dynamic_cast<kMyMoneyEdit*>(m_editWidgets["deposit"])->setValue(val.abs());
+ dynamic_cast<kMyMoneyEdit*>(m_editWidgets["payment"])->clearText();
+ } else {
+ dynamic_cast<kMyMoneyEdit*>(m_editWidgets["deposit"])->clearText();
+ }
+ updateVAT();
+}
+
+void StdTransactionEditor::slotUpdateDeposit(const QString& txt)
+{
+ MyMoneyMoney val(txt);
+ if(val.isNegative()) {
+ dynamic_cast<kMyMoneyEdit*>(m_editWidgets["payment"])->setValue(val.abs());
+ dynamic_cast<kMyMoneyEdit*>(m_editWidgets["deposit"])->clearText();
+ } else {
+ dynamic_cast<kMyMoneyEdit*>(m_editWidgets["payment"])->clearText();
+ }
+ updateVAT();
+}
+
+void StdTransactionEditor::slotUpdateAmount(const QString& txt)
+{
+ // qDebug("Update amount to %s", txt.data());
+ MyMoneyMoney val(txt);
+ updateAmount(val);
+ updateVAT(true);
+}
+
+void StdTransactionEditor::updateAmount(const MyMoneyMoney& val)
+{
+ QLabel *categoryLabel = dynamic_cast<QLabel*>(haveWidget("category-label"));
+ if(categoryLabel) {
+ KMyMoneyCashFlowCombo* cashflow = dynamic_cast<KMyMoneyCashFlowCombo*>(m_editWidgets["cashflow"]);
+
+ if(val.isNegative()) {
+ if(categoryLabel->text() != i18n("Category")) {
+ if(categoryLabel->text() == i18n("Transfer from")) {
+ categoryLabel->setText(i18n("Transfer to"));
+ cashflow->setDirection(KMyMoneyRegister::Payment);
+ } else {
+ categoryLabel->setText(i18n("Transfer from"));
+ cashflow->setDirection(KMyMoneyRegister::Deposit);
+ }
+ } else {
+ if(cashflow->direction() == KMyMoneyRegister::Deposit)
+ cashflow->setDirection(KMyMoneyRegister::Payment);
+ else
+ cashflow->setDirection(KMyMoneyRegister::Deposit);
+ slotUpdateCashFlow(cashflow->direction());
+ }
+ dynamic_cast<kMyMoneyEdit*>(m_editWidgets["amount"])->setValue(val.abs());
+ }
+ }
+}
+
+void StdTransactionEditor::updateVAT(bool amountChanged)
+{
+ // make sure that we don't do this recursively
+ if(m_inUpdateVat)
+ return;
+
+ // we don't do anything if we have multiple transactions selected
+ if(isMultiSelection())
+ return;
+
+ // if auto vat assignment for this account is turned off
+ // we don't care about taxes
+ if(m_account.value("NoVat") == "Yes")
+ return;
+
+ // more splits than category and tax are not supported
+ if(m_splits.count() > 2)
+ return;
+
+ // in order to do anything, we need an amount
+ MyMoneyMoney amount, newAmount;
+ bool amountOk;
+ amount = amountFromWidget(&amountOk);
+ if(!amountOk)
+ return;
+
+ // If the transaction has a tax and a category split, remove the tax split
+ if(m_splits.count() == 2) {
+ newAmount = removeVatSplit();
+ if(m_splits.count() == 2) // not removed?
+ return;
+
+ } else {
+ // otherwise, we need a category
+ KMyMoneyCategory* category = dynamic_cast<KMyMoneyCategory*>(m_editWidgets["category"]);
+ if(category->selectedItem().isEmpty())
+ return;
+
+ // if no VAT account is associated with this category/account, then we bail out
+ MyMoneyAccount cat = MyMoneyFile::instance()->account(category->selectedItem());
+ if(cat.value("VatAccount").isEmpty())
+ return;
+
+ newAmount = amount;
+ }
+
+ // seems we have everything we need
+ if(amountChanged)
+ newAmount = amount;
+
+ MyMoneyTransaction transaction;
+ if(createTransaction(transaction, m_transaction, m_split)) {
+ if(addVatSplit(transaction, newAmount)) {
+ m_transaction = transaction;
+ m_split = m_transaction.splits()[0];
+
+ loadEditWidgets();
+
+ // if we made this a split transaction, then move the
+ // focus to the memo field
+ if(qApp->focusWidget() == haveWidget("category")) {
+ QWidget* w = haveWidget("memo");
+ if(w)
+ w->setFocus();
+ }
+ }
+ }
+}
+
+bool StdTransactionEditor::addVatSplit(MyMoneyTransaction& tr, const MyMoneyMoney& amount)
+{
+ if(tr.splitCount() != 2)
+ return false;
+
+ bool rc = false;
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ try {
+ MyMoneySplit cat; // category
+ MyMoneySplit tax; // tax
+
+ // extract the category split from the transaction
+ MyMoneyAccount category = file->account(tr.splitByAccount(m_account.id(), false).accountId());
+ if(category.value("VatAccount").isEmpty())
+ return false;
+ MyMoneyAccount vatAcc = file->account(category.value("VatAccount").latin1());
+ const MyMoneySecurity& asec = file->security(m_account.currencyId());
+ const MyMoneySecurity& csec = file->security(category.currencyId());
+ const MyMoneySecurity& vsec = file->security(vatAcc.currencyId());
+ if(asec.id() != csec.id() || asec.id() != vsec.id()) {
+ qDebug("Auto VAT assignment only works if all three accounts use the same currency.");
+ return false;
+ }
+
+ MyMoneyMoney vatRate(vatAcc.value("VatRate"));
+ MyMoneyMoney gv, nv; // gross value, net value
+ int fract = m_account.fraction();
+
+ if(!vatRate.isZero()) {
+
+ tax.setAccountId(vatAcc.id());
+
+ // qDebug("vat amount is '%s'", category.value("VatAmount").latin1());
+ if(category.value("VatAmount").lower() != QString("net")) {
+ // split value is the gross value
+ gv = amount;
+ nv = gv / (MyMoneyMoney(1,1) + vatRate);
+ MyMoneySplit catSplit = tr.splitByAccount(m_account.id(), false);
+ catSplit.setShares(-nv.convert(fract));
+ catSplit.setValue(catSplit.shares());
+ tr.modifySplit(catSplit);
+
+ } else {
+ // split value is the net value
+ nv = amount;
+ gv = nv * (MyMoneyMoney(1,1) + vatRate);
+ MyMoneySplit accSplit = tr.splitByAccount(m_account.id());
+ accSplit.setValue(gv.convert(fract));
+ accSplit.setShares(accSplit.value());
+ tr.modifySplit(accSplit);
+ }
+
+ tax.setValue(-(gv - nv).convert(fract));
+ tax.setShares(tax.value());
+ tr.addSplit(tax);
+ rc = true;
+ }
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+ return rc;
+}
+
+MyMoneyMoney StdTransactionEditor::removeVatSplit(void)
+{
+ // we only deal with splits that have three splits
+ if(m_splits.count() != 2)
+ return amountFromWidget();
+
+ MyMoneySplit c; // category split
+ MyMoneySplit t; // tax split
+
+ bool netValue = false;
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = m_splits.begin(); it_s != m_splits.end(); ++it_s) {
+ MyMoneyAccount acc = MyMoneyFile::instance()->account((*it_s).accountId());
+ if(!acc.value("VatAccount").isEmpty()) {
+ netValue = (acc.value("VatAmount").lower() == "net");
+ c = (*it_s);
+ } else if(!acc.value("VatRate").isEmpty()) {
+ t = (*it_s);
+ }
+ }
+
+ // bail out if not all splits are setup
+ if(c.id().isEmpty() || t.id().isEmpty())
+ return amountFromWidget();
+
+ MyMoneyMoney amount;
+ // reduce the splits
+ if(netValue) {
+ amount = -c.shares();
+ } else {
+ amount = -(c.shares() + t.shares());
+ }
+
+ // remove tax split from the list, ...
+ m_splits.clear();
+ m_splits.append(c);
+
+ // ... make sure that the widget is updated ...
+ // block the signals to avoid popping up the split editor dialog
+ // for nothing
+ m_editWidgets["category"]->blockSignals(true);
+ QString id;
+ setupCategoryWidget(id);
+ m_editWidgets["category"]->blockSignals(false);
+
+ // ... and return the updated amount
+ return amount;
+}
+
+bool StdTransactionEditor::isComplete(QString& reason) const
+{
+ reason = QString();
+ // reason.clear(); // for Qt4
+
+ QMap<QString, QWidget*>::const_iterator it_w;
+ kMyMoneyDateInput* postDate = dynamic_cast<kMyMoneyDateInput*>(m_editWidgets["postdate"]);
+ if(postDate) {
+ postDate->markAsBadDate();
+ QToolTip::remove(postDate);
+ if(postDate->date().isValid() && (postDate->date() < m_account.openingDate())) {
+ postDate->markAsBadDate(true, KMyMoneyGlobalSettings::listNegativeValueColor());
+ reason = i18n("Cannot enter transaction with postdate prior to account's opening date.");
+ QToolTip::add(postDate, reason);
+ return false;
+ }
+ }
+
+ for(it_w = m_editWidgets.begin(); it_w != m_editWidgets.end(); ++it_w) {
+ KMyMoneyPayeeCombo* payee = dynamic_cast<KMyMoneyPayeeCombo*>(*it_w);
+ KMyMoneyCategory* category = dynamic_cast<KMyMoneyCategory*>(*it_w);
+ kMyMoneyEdit* amount = dynamic_cast<kMyMoneyEdit*>(*it_w);
+ KMyMoneyReconcileCombo* reconcile = dynamic_cast<KMyMoneyReconcileCombo*>(*it_w);
+ KMyMoneyCashFlowCombo* cashflow = dynamic_cast<KMyMoneyCashFlowCombo*>(*it_w);
+
+ if(payee && !(payee->currentText().isEmpty()))
+ break;
+
+ if(category && !category->lineEdit()->text().isEmpty())
+ break;
+
+ if(amount && !(amount->value().isZero()))
+ break;
+
+ // the following two widgets are only checked if we are editing multiple transactions
+ if(isMultiSelection()) {
+ if(reconcile && reconcile->state() != MyMoneySplit::Unknown)
+ break;
+
+ if(cashflow && cashflow->direction() != KMyMoneyRegister::Unknown)
+ break;
+ }
+ }
+ return it_w != m_editWidgets.end();
+}
+
+void StdTransactionEditor::slotCreateCategory(const QString& name, QString& id)
+{
+ MyMoneyAccount acc, parent;
+ acc.setName(name);
+
+ KMyMoneyCashFlowCombo* cashflow = dynamic_cast<KMyMoneyCashFlowCombo*>(haveWidget("cashflow"));
+ if(cashflow) {
+ // form based input
+ if(cashflow->direction() == KMyMoneyRegister::Deposit)
+ parent = MyMoneyFile::instance()->income();
+ else
+ parent = MyMoneyFile::instance()->expense();
+
+ } else if(haveWidget("deposit")) {
+ // register based input
+ kMyMoneyEdit* deposit = dynamic_cast<kMyMoneyEdit*>(m_editWidgets["deposit"]);
+ if(deposit->value().isPositive())
+ parent = MyMoneyFile::instance()->income();
+ else
+ parent = MyMoneyFile::instance()->expense();
+
+ } else
+ parent = MyMoneyFile::instance()->expense();
+
+ // TODO extract possible first part of a hierarchy and check if it is one
+ // of our top categories. If so, remove it and select the parent
+ // according to this information.
+
+ emit createCategory(acc, parent);
+
+ // return id
+ id = acc.id();
+}
+
+int StdTransactionEditor::slotEditSplits(void)
+{
+ int rc = QDialog::Rejected;
+
+ if(!m_openEditSplits) {
+ // only get in here in a single instance
+ m_openEditSplits = true;
+
+ // force focus change to update all data
+ QWidget* w = dynamic_cast<KMyMoneyCategory*>(m_editWidgets["category"])->splitButton();
+ if(w)
+ w->setFocus();
+
+ kMyMoneyEdit* amount = dynamic_cast<kMyMoneyEdit*>(haveWidget("amount"));
+ kMyMoneyEdit* deposit = dynamic_cast<kMyMoneyEdit*>(haveWidget("deposit"));
+ kMyMoneyEdit* payment = dynamic_cast<kMyMoneyEdit*>(haveWidget("payment"));
+ KMyMoneyCashFlowCombo* cashflow = 0;
+ KMyMoneyRegister::CashFlowDirection dir = KMyMoneyRegister::Unknown;
+ bool isValidAmount = false;
+
+ if(amount) {
+ isValidAmount = amount->lineedit()->text().length() != 0;
+ cashflow = dynamic_cast<KMyMoneyCashFlowCombo*>(haveWidget("cashflow"));
+ if(cashflow)
+ dir = cashflow->direction();
+
+ } else {
+ if(deposit) {
+ if (deposit->lineedit()->text().length() != 0) {
+ isValidAmount = true;
+ dir = KMyMoneyRegister::Deposit;
+ }
+ }
+ if(payment) {
+ if (payment->lineedit()->text().length() != 0) {
+ isValidAmount = true;
+ dir = KMyMoneyRegister::Payment;
+ }
+ }
+ if(!deposit || !payment) {
+ qDebug("Internal error: deposit(%p) & payment(%p) widgets not found but required", deposit, payment);
+ return rc;
+ }
+ }
+
+ if(dir == KMyMoneyRegister::Unknown)
+ dir = KMyMoneyRegister::Payment;
+
+ MyMoneyTransaction transaction;
+ if(createTransaction(transaction, m_transaction, m_split)) {
+ MyMoneyMoney value;
+
+ KSplitTransactionDlg* dlg = new KSplitTransactionDlg(transaction,
+ transaction.splits()[0],
+ m_account,
+ isValidAmount,
+ dir == KMyMoneyRegister::Deposit,
+ 0,
+ m_priceInfo,
+ m_regForm);
+ connect(dlg, SIGNAL(objectCreation(bool)), this, SIGNAL(objectCreation(bool)));
+ connect(dlg, SIGNAL(createCategory(MyMoneyAccount&, const MyMoneyAccount&)), this, SIGNAL(createCategory(MyMoneyAccount&, const MyMoneyAccount&)));
+
+ if((rc = dlg->exec()) == QDialog::Accepted) {
+ m_transaction = dlg->transaction();
+ m_split = m_transaction.splits()[0];
+ loadEditWidgets();
+ }
+
+ delete dlg;
+ }
+
+ // focus jumps into the memo field
+ if((w = haveWidget("memo")) != 0) {
+ w->setFocus();
+ }
+
+ m_openEditSplits = false;
+ }
+
+ return rc;
+}
+
+void StdTransactionEditor::checkPayeeInSplit(MyMoneySplit& s, const QString& payeeId)
+{
+ if(s.accountId().isEmpty())
+ return;
+
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(s.accountId());
+ if(acc.isIncomeExpense()) {
+ s.setPayeeId(payeeId);
+ } else {
+ if(s.payeeId().isEmpty())
+ s.setPayeeId(payeeId);
+ }
+}
+
+MyMoneyMoney StdTransactionEditor::amountFromWidget(bool* update) const
+{
+ bool updateValue = false;
+ MyMoneyMoney value;
+
+ KMyMoneyCashFlowCombo* cashflow = dynamic_cast<KMyMoneyCashFlowCombo*>(haveWidget("cashflow"));
+ if(cashflow) {
+ // form based input
+ kMyMoneyEdit* amount = dynamic_cast<kMyMoneyEdit*>(m_editWidgets["amount"]);
+ // if both fields do not contain changes -> no need to update
+ if(cashflow->direction() != KMyMoneyRegister::Unknown
+ && !amount->lineedit()->text().isEmpty())
+ updateValue = true;
+ value = amount->value();
+ if(cashflow->direction() == KMyMoneyRegister::Payment)
+ value = -value;
+
+ } else if(haveWidget("deposit")) {
+ // register based input
+ kMyMoneyEdit* deposit = dynamic_cast<kMyMoneyEdit*>(m_editWidgets["deposit"]);
+ kMyMoneyEdit* payment = dynamic_cast<kMyMoneyEdit*>(m_editWidgets["payment"]);
+ // if both fields do not contain text -> no need to update
+ if(!(deposit->lineedit()->text().isEmpty() && payment->lineedit()->text().isEmpty()))
+ updateValue = true;
+
+ if(deposit->value().isPositive())
+ value = deposit->value();
+ else
+ value = -(payment->value());
+ }
+
+ if(update)
+ *update = updateValue;
+
+ // determine the max fraction for this account and
+ // adjust the value accordingly
+ return value.convert(m_account.fraction());
+}
+
+bool StdTransactionEditor::createTransaction(MyMoneyTransaction& t, const MyMoneyTransaction& torig, const MyMoneySplit& sorig, bool skipPriceDialog)
+{
+ // extract price info from original transaction
+ m_priceInfo.clear();
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ if(!torig.id().isEmpty()) {
+ for(it_s = torig.splits().begin(); it_s != torig.splits().end(); ++it_s) {
+ if((*it_s).id() != sorig.id()) {
+ MyMoneyAccount cat = MyMoneyFile::instance()->account((*it_s).accountId());
+ if(cat.currencyId() != m_account.currencyId()) {
+ if(!(*it_s).shares().isZero() && !(*it_s).value().isZero()) {
+ m_priceInfo[cat.currencyId()] = ((*it_s).shares() / (*it_s).value()).reduce();
+ }
+ }
+ }
+ }
+ }
+
+ t = torig;
+
+ t.removeSplits();
+ t.setCommodity(m_account.currencyId());
+
+ kMyMoneyDateInput* postDate = dynamic_cast<kMyMoneyDateInput*>(m_editWidgets["postdate"]);
+ if(postDate->date().isValid()) {
+ t.setPostDate(postDate->date());
+ }
+
+ // we start with the previous values, make sure we can add them later on
+ MyMoneySplit s0 = sorig;
+ s0.clearId();
+
+ // make sure we reference this account here
+ s0.setAccountId(m_account.id());
+
+ // memo and number field are special: if we have multiple transactions selected
+ // and the edit field is empty, we treat it as "not modified".
+ // FIXME a better approach would be to have a 'dirty' flag with the widgets
+ // which identifies if the originally loaded value has been modified
+ // by the user
+ KTextEdit* memo = dynamic_cast<KTextEdit*>(m_editWidgets["memo"]);
+ if(memo) {
+ if(!isMultiSelection() || (isMultiSelection() && !memo->text().isEmpty() ) )
+ s0.setMemo(memo->text());
+ }
+
+ kMyMoneyLineEdit* number = dynamic_cast<kMyMoneyLineEdit*>(haveWidget("number"));
+ if(number) {
+ if(!isMultiSelection() || (isMultiSelection() && !number->text().isEmpty() ) )
+ s0.setNumber(number->text());
+ }
+
+ KMyMoneyPayeeCombo* payee = dynamic_cast<KMyMoneyPayeeCombo*>(m_editWidgets["payee"]);
+ QString payeeId;
+ if(!isMultiSelection() || (isMultiSelection() && !payee->currentText().isEmpty())) {
+ payeeId = payee->selectedItem();
+ s0.setPayeeId(payeeId);
+ }
+
+ bool updateValue;
+ MyMoneyMoney value = amountFromWidget(&updateValue);
+
+ if(updateValue) {
+ // for this account, the shares and value is the same
+ s0.setValue(value);
+ s0.setShares(value);
+ } else {
+ value = s0.value();
+ }
+
+ // if we mark the split reconciled here, we'll use today's date if no reconciliation date is given
+ KMyMoneyReconcileCombo* status = dynamic_cast<KMyMoneyReconcileCombo*>(m_editWidgets["status"]);
+ if(status->state() != MyMoneySplit::Unknown)
+ s0.setReconcileFlag(status->state());
+
+ if(s0.reconcileFlag() == MyMoneySplit::Reconciled && !s0.reconcileDate().isValid())
+ s0.setReconcileDate(QDate::currentDate());
+
+ checkPayeeInSplit(s0, payeeId);
+
+ // add the split to the transaction
+ t.addSplit(s0);
+
+ // if we have no other split we create it
+ // if we have none or only one other split, we reconstruct it here
+ // if we have more than one other split, we take them as they are
+ // make sure to perform all those changes on a local copy
+ QValueList<MyMoneySplit> splits = m_splits;
+
+ MyMoneySplit s1;
+ if(splits.count() == 0) {
+ s1.setMemo(s0.memo());
+ splits.append(s1);
+
+ // make sure we will fill the value and share fields later on
+ updateValue = true;
+ }
+
+ // FIXME in multiSelection we currently only support transactions with one
+ // or two splits. So we check the original transaction and extract the other
+ // split or create it
+ if(isMultiSelection()) {
+ if(torig.splitCount() == 2) {
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = torig.splits().begin(); it_s != torig.splits().end(); ++it_s) {
+ if((*it_s).id() == sorig.id())
+ continue;
+ s1 = *it_s;
+ s1.clearId();
+ break;
+ }
+ }
+ } else {
+ if(splits.count() == 1) {
+ s1 = splits[0];
+ s1.clearId();
+ }
+ }
+
+ if(isMultiSelection() || splits.count() == 1) {
+ KMyMoneyCategory* category = dynamic_cast<KMyMoneyCategory*>(m_editWidgets["category"]);
+ if(!isMultiSelection() || (isMultiSelection() && !category->currentText().isEmpty())) {
+ s1.setAccountId(category->selectedItem());
+ }
+
+ // if the first split has a memo but the second split is empty,
+ // we just copy the memo text over
+ if(memo) {
+ if(!isMultiSelection() || (isMultiSelection() && !memo->text().isEmpty())) {
+ // if the memo is filled, we check if the
+ // account referenced by s1 is a regular account or a category.
+ // in case of a regular account, we just leave the memo as is
+ // in case of a category we simply copy the new value over the old.
+ // in case we don't even have an account id, we just skip because
+ // the split will be removed later on anyway.
+ if(!s1.memo().isEmpty()) {
+ if(!s1.accountId().isEmpty()) {
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(s1.accountId());
+ if(acc.isIncomeExpense()) {
+ s1.setMemo(s0.memo());
+ }
+ }
+ } else {
+ s1.setMemo(s0.memo());
+ }
+ }
+ }
+
+ if(updateValue && !s1.accountId().isEmpty()) {
+ s1.setValue(-value);
+ MyMoneyMoney shares;
+ if(!skipPriceDialog) {
+ if(!KCurrencyCalculator::setupSplitPrice(shares, t, s1, m_priceInfo, m_regForm))
+ return false;
+ } else {
+ MyMoneyAccount cat = MyMoneyFile::instance()->account(s1.accountId());
+ if(m_priceInfo.find(cat.currencyId()) != m_priceInfo.end()) {
+ shares = (s1.value() * m_priceInfo[cat.currencyId()]).reduce().convert(cat.fraction());
+ }
+ else
+ shares = s1.value();
+ }
+ s1.setShares(shares);
+ }
+
+ checkPayeeInSplit(s1, payeeId);
+
+ if(!s1.accountId().isEmpty())
+ t.addSplit(s1);
+
+ } else {
+ QValueList<MyMoneySplit>::iterator it_s;
+ for(it_s = splits.begin(); it_s != splits.end(); ++it_s) {
+ s1 = *it_s;
+ s1.clearId();
+ checkPayeeInSplit(s1, payeeId);
+ t.addSplit(s1);
+ }
+ }
+ return true;
+}
+
+void StdTransactionEditor::setupFinalWidgets(void)
+{
+ addFinalWidget(haveWidget("deposit"));
+ addFinalWidget(haveWidget("payment"));
+ addFinalWidget(haveWidget("amount"));
+ addFinalWidget(haveWidget("status"));
+}
+
+void StdTransactionEditor::slotUpdateAccount(const QString& id)
+{
+ TransactionEditor::slotUpdateAccount(id);
+ KMyMoneyCategory* category = dynamic_cast<KMyMoneyCategory*>(m_editWidgets["category"]);
+ if(category && category->splitButton()) {
+ category->splitButton()->setDisabled(id.isEmpty());
+ }
+}
+
+#include "transactioneditor.moc"
+
diff --git a/kmymoney2/dialogs/transactioneditor.h b/kmymoney2/dialogs/transactioneditor.h
new file mode 100644
index 0000000..bf47598
--- /dev/null
+++ b/kmymoney2/dialogs/transactioneditor.h
@@ -0,0 +1,416 @@
+/***************************************************************************
+ transactioneditor.h
+ ----------
+ begin : Wed Jun 07 2006
+ copyright : (C) 2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef TRANSACTIONEDITOR_H
+#define TRANSACTIONEDITOR_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qobject.h>
+#include <qwidgetlist.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyscheduled.h>
+#include <kmymoney/transactioneditorcontainer.h>
+#include <kmymoney/register.h>
+
+class KCurrencyExchange;
+class KMyMoneyCategory;
+
+class TransactionEditor : public QObject
+{
+ Q_OBJECT
+public:
+ TransactionEditor() {}
+ TransactionEditor(TransactionEditorContainer* regForm, KMyMoneyRegister::Transaction* item, const KMyMoneyRegister::SelectedTransactions& list, const QDate& lastPostDate);
+ virtual ~TransactionEditor();
+
+ /**
+ * This method is used as a helper because virtual methods cannot be
+ * called within a constructor. Thus setup() should be called immediately
+ * after a TransactionEditor() object or one of its derivatives is
+ * constructed. The parameter @a account identifies the account that
+ * is currently opened in the calling ledger view.
+ *
+ * This account will not be included in category sets. The default is
+ * no account so all will be shown. I have no idea anymore, what I
+ * tried to say with the first sentence above. :( Maybe this is crap.
+ *
+ * @param tabOrderWidgets QWidgetList which will be filled with the pointers
+ * to the editWidgets in their tab order
+ * @param account account that is currently shown in the calling ledger view
+ * @param action default action (defaults to ActionNone).
+ */
+ void setup(QWidgetList& tabOrderWidgets, const MyMoneyAccount& account = MyMoneyAccount(), KMyMoneyRegister::Action action = KMyMoneyRegister::ActionNone);
+
+ /**
+ * Enter the transactions into the ledger. In case of a newly created
+ * transaction @a newId contains the assigned id. In case @a askForSchedule
+ * is true (the default), the user will be asked if he wants to enter new
+ * transactions with a post date in the future into the ledger or rather
+ * create a schedule for them. In case @a suppressBalanceWarnings is @p false
+ * (the default) a warning will be displayed when the balance crosses the minimum
+ * or maximum balance settings for the account.
+ */
+ virtual bool enterTransactions(QString& newId, bool askForSchedule = true, bool suppressBalanceWarnings = false);
+
+ /**
+ * This method creates a transaction based on the contents of the current widgets,
+ * the splits in m_split in single selection mode or an existing transaction/split
+ * and the contents of the widgets in multi selection mode.
+ *
+ * The split referencing the current account is returned as the first split in the
+ * transaction's split list.
+ *
+ * @param t reference to created transaction
+ * @param torig the original transaction
+ * @param sorig the original split
+ * @param skipPriceDialog if @p true the user will not be requested for price information
+ * (defaults to @p false)
+ *
+ * @return @p false if aborted by user, @p true otherwise
+ *
+ * @note Usually not used directly. If unsure, use enterTransactions() instead.
+ */
+ virtual bool createTransaction(MyMoneyTransaction& t, const MyMoneyTransaction& torig, const MyMoneySplit& sorig, bool skipPriceDialog = false) = 0;
+
+ /**
+ * This method returns information about the completeness of the data
+ * entered. This can be used to control the availability of the
+ * 'Enter transaction' action.
+ *
+ * @retval true if entering the transaction into the engine
+ * @retval false if not enough information is present to enter the
+ * transaction into the engine
+ *
+ * @param reason will be filled with a string about the reason why the
+ * completeness is not reached. Empty if the return value
+ * is @c true.
+ *
+ * @sa transactionDataSufficient()
+ */
+ virtual bool isComplete(QString& reason) const = 0;
+
+ /**
+ * This method returns information if the editor is started with multiple transactions
+ * being selected or not.
+ *
+ * @retval false only a single transaction was selected when the editor was started
+ * @retval true multiple transactions were selected when the editor was started
+ */
+ virtual bool isMultiSelection(void) const { return m_transactions.count() > 1; }
+
+ virtual bool fixTransactionCommodity(const MyMoneyAccount& account);
+
+ virtual bool canAssignNumber(void) const;
+ virtual void assignNextNumber(void);
+
+ /**
+ * Returns a pointer to the widget that should receive
+ * the focus after the editor has been started.
+ */
+ virtual QWidget* firstWidget(void) const = 0;
+
+ /**
+ * Returns a pointer to a widget by name
+ */
+ QWidget* haveWidget(const QString& name) const;
+
+ void setTransaction(const MyMoneyTransaction& t, const MyMoneySplit& s);
+
+ bool eventFilter(QObject* o, QEvent* e);
+
+ const MyMoneyAccount& account(void) const { return m_account; }
+
+ void clearFinalWidgets(void);
+
+ void addFinalWidget(const QWidget*);
+
+public slots:
+ void slotReloadEditWidgets(void);
+
+ /**
+ * The default implementation returns QDialog::Rejected
+ */
+ virtual int slotEditSplits(void);
+
+ /**
+ * Modify the account which the transaction should be based on. The
+ * initial value for the account is passed during setup().
+ *
+ * @param id of the account to be used
+ */
+ void slotUpdateAccount(const QString& id);
+
+protected:
+ virtual void createEditWidgets(void) = 0;
+ virtual void setupFinalWidgets(void) = 0;
+ virtual void loadEditWidgets(KMyMoneyRegister::Action action = KMyMoneyRegister::ActionNone) = 0;
+ void setupCategoryWidget(KMyMoneyCategory* category, const QValueList<MyMoneySplit>& splits, QString& categoryId, const char* splitEditSlot, bool allowObjectCreation = true);
+
+ /**
+ * This method sets the precision of the value widgets to reflect
+ * the account in m_account. If m_account has no id, the precision
+ * defaults to 2.
+ */
+ void setupPrecision(void);
+
+protected slots:
+ virtual void slotUpdateButtonState(void);
+ virtual void slotUpdateAccount(void);
+ virtual void slotNumberChanged(const QString&);
+
+signals:
+ /**
+ * This signal is sent out by the destructor to inform other entities
+ * that editing has been finished. The parameter @a t contains the list
+ * of transactions that were processed.
+ */
+ void finishEdit(const KMyMoneyRegister::SelectedTransactions& t);
+
+ /**
+ * This signal is sent out whenever enough data is present to enter the
+ * transaction into the ledger. This signal can be used to control the
+ * KAction which implements entering the transaction.
+ *
+ * @sa isComplete()
+ *
+ * @param state @a true if enough data is present, @a false otherwise.
+ */
+ void transactionDataSufficient(bool state);
+
+ /**
+ * This signal is sent out, when a new payee needs to be created
+ * @sa KMyMoneyCombo::createItem()
+ *
+ * @param txt The name of the payee to be created
+ * @param id A connected slot should store the id of the created object in this variable
+ */
+ void createPayee(const QString& txt, QString& id);
+
+ /**
+ * This signal is sent out, when a new category needs to be created
+ * Depending on the setting of either a payment or deposit, the parent
+ * account will be preset to Expense or Income.
+ *
+ * @param account reference to account info. Will be filled by called slot
+ * @param parent reference to parent account
+ */
+ void createCategory(MyMoneyAccount& account, const MyMoneyAccount& parent);
+
+ /**
+ * This signal is sent out, when a new security (e.g. stock )needs to be created
+ * @a Parent should be the investment account under which the security account
+ * will be created.
+ *
+ * @param account reference to account info. Will be filled by called slot
+ * @param parent reference to parent account
+ */
+ void createSecurity(MyMoneyAccount& account, const MyMoneyAccount& parent);
+
+ /**
+ * Signal is emitted, if any of the widgets enters (@a state equals @a true)
+ * or leaves (@a state equals @a false) object creation mode.
+ *
+ * @param state Enter (@a true) or leave (@a false) object creation
+ */
+ void objectCreation(bool state);
+
+ void statusMsg(const QString& txt);
+
+ void statusProgress(int cnt, int base);
+
+ /**
+ * This signal is sent out for each newly added transaction
+ *
+ * @param date the post date of the newly created transaction
+ */
+ void lastPostDateUsed(const QDate& date);
+
+ /**
+ * This signal is sent out, if the user decides to schedule the transaction @a t
+ * rather then adding it to the ledger right away.
+ */
+ void scheduleTransaction(const MyMoneyTransaction& t, MyMoneySchedule::occurenceE occurence);
+
+ /**
+ * This signal is sent out, if the user double clicks the number field
+ */
+ void assignNumber(void);
+
+ /**
+ * This signal is sent out, if the user has pressed the ESC key.
+ */
+ void escapePressed(void);
+
+ /**
+ * This signal is sent out, if the user has pressed the Return or Enter
+ * key and asks to end editing the transaction
+ */
+ void returnPressed(void);
+
+ /**
+ * This signal is sent out, if any of the balance warning levels
+ * for @p account has been reached. @p msg contains the message text.
+ * @p parent points to the parent widget to be used for the warning message box.
+ */
+ void balanceWarning(QWidget* parent, const MyMoneyAccount& account, const QString& msg);
+
+protected:
+ QValueList<MyMoneySplit> m_splits;
+ KMyMoneyRegister::SelectedTransactions m_transactions;
+ QValueList<const QWidget*> m_finalEditWidgets;
+ TransactionEditorContainer* m_regForm;
+ KMyMoneyRegister::Transaction* m_item;
+ KMyMoneyRegister::QWidgetContainer m_editWidgets;
+ MyMoneyAccount m_account;
+ MyMoneyTransaction m_transaction;
+ MyMoneySplit m_split;
+ QDate m_lastPostDate;
+ QMap<QString, MyMoneyMoney> m_priceInfo;
+ KMyMoneyRegister::Action m_initialAction;
+ bool m_openEditSplits;
+};
+
+
+class StdTransactionEditor : public TransactionEditor
+{
+ Q_OBJECT
+public:
+ StdTransactionEditor();
+ StdTransactionEditor(TransactionEditorContainer* regForm, KMyMoneyRegister::Transaction* item, const KMyMoneyRegister::SelectedTransactions& list, const QDate& lastPostDate);
+ ~StdTransactionEditor();
+
+ bool isComplete(QString& reason) const;
+ QWidget* firstWidget(void) const;
+
+ bool eventFilter(QObject* o, QEvent* e);
+
+ /**
+ * This method creates a transaction based on the contents of the current widgets,
+ * the splits in m_split in single selection mode or an existing transaction/split
+ * and the contents of the widgets in multi selection mode.
+ *
+ * The split referencing the current account is returned as the first split in the
+ * transaction's split list.
+ *
+ * @param t reference to created transaction
+ * @param torig the original transaction
+ * @param sorig the original split
+ * @param skipPriceDialog if @p true the user will not be requested for price information
+ * (defaults to @p false)
+ *
+ * @return @p false if aborted by user, @p true otherwise
+ *
+ * @note Usually not used directly. If unsure, use enterTransactions() instead.
+ */
+ bool createTransaction(MyMoneyTransaction& t, const MyMoneyTransaction& torig, const MyMoneySplit& sorig, bool skipPriceDialog = false);
+
+public slots:
+ int slotEditSplits(void);
+ void slotUpdateAmount(const QString&);
+
+protected slots:
+ void slotReloadEditWidgets(void);
+ void slotUpdatePayment(const QString&);
+ void slotUpdateDeposit(const QString&);
+ void slotUpdateCategory(const QString&);
+ void slotUpdatePayee(const QString&);
+ void slotUpdateCashFlow(KMyMoneyRegister::CashFlowDirection);
+ void slotCreateCategory(const QString&, QString&);
+ void slotUpdateAction(int action);
+ void slotUpdateAccount(const QString& id);
+
+protected:
+ /**
+ * This method creates all necessary widgets for this transaction editor.
+ * All signals will be connected to the relevant slots.
+ */
+ void createEditWidgets(void);
+
+ /**
+ * This method (re-)loads the widgets with the transaction information
+ * contained in @a m_transaction and @a m_split.
+ *
+ * @param action preset the edit wigdets for @a action if no transaction
+ * is present
+ */
+ void loadEditWidgets(KMyMoneyRegister::Action action = KMyMoneyRegister::ActionNone);
+
+ void setupCategoryWidget(QString&);
+ void updateAmount(const MyMoneyMoney& value);
+ bool isTransfer(const QString& accId1, const QString& accId2) const;
+
+ void checkPayeeInSplit(MyMoneySplit& s, const QString& payeeId);
+
+ /**
+ * This method fills the editor widgets with the last transaction
+ * that can be found for payee @a payeeId in the account @a m_account.
+ */
+ void autoFill(const QString& payeeId);
+
+ /**
+ * Extracts the amount of the transaction from the widgets depending
+ * if form or register based input method is used.
+ * Returns if an amount has been found in @a update.
+ *
+ * @param update pointer to update information flag
+ * @return amount of transaction (deposit positive, payment negative)
+ */
+ MyMoneyMoney amountFromWidget(bool* update = 0) const;
+
+ /**
+ * Create or update a VAT split
+ */
+ void updateVAT(bool amountChanged = true);
+
+ MyMoneyMoney removeVatSplit(void);
+
+ /**
+ * This method adds a VAT split to transaction @a tr if necessary.
+ *
+ * @param tr transaction that the split should be added to
+ * @param amount Amount to be used for the calculation. Depending upon the
+ * setting of the resp. category, this value is treated as
+ * either gross or net value.
+ * @retval false VAT split has not been added
+ * @retval true VAT split has been added
+ */
+ bool addVatSplit(MyMoneyTransaction& tr, const MyMoneyMoney& amount);
+
+ void setupFinalWidgets(void);
+
+ /**
+ * This method returns the sum of all splits of transaction @a t that
+ * reference account m_account.
+ */
+ MyMoneyMoney shares(const MyMoneyTransaction& t) const;
+
+private:
+ MyMoneyMoney m_shares;
+ bool m_inUpdateVat;
+};
+
+
+#endif
diff --git a/kmymoney2/dialogs/transactionmatcher.cpp b/kmymoney2/dialogs/transactionmatcher.cpp
new file mode 100644
index 0000000..5b8d4b5
--- /dev/null
+++ b/kmymoney2/dialogs/transactionmatcher.cpp
@@ -0,0 +1,361 @@
+/***************************************************************************
+ transactionmatcher.cpp
+ ----------
+ begin : Tue Jul 08 2008
+ copyright : (C) 2008 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "transactionmatcher.h"
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/mymoneyscheduled.h>
+#include <kmymoney/kmymoneyutils.h>
+
+TransactionMatcher::TransactionMatcher(const MyMoneyAccount& acc) :
+ m_account(acc),
+ m_days(3)
+{
+}
+
+void TransactionMatcher::match(MyMoneyTransaction tm, MyMoneySplit sm, MyMoneyTransaction ti, MyMoneySplit si, bool allowImportedTransactions)
+{
+ const MyMoneySecurity& sec = MyMoneyFile::instance()->security(m_account.currencyId());
+
+ // Now match the transactions.
+ //
+ // 'Matching' the transactions entails DELETING the end transaction,
+ // and MODIFYING the start transaction as needed.
+ //
+ // There are a variety of ways that a transaction can conflict.
+ // Post date, splits, amount are the ones that seem to matter.
+ // TODO: Handle these conflicts intelligently, at least warning
+ // the user, or better yet letting the user choose which to use.
+ //
+ // For now, we will just use the transaction details from the start
+ // transaction. The only thing we'll take from the end transaction
+ // are the bank ID's.
+ //
+ // What we have to do here is iterate over the splits in the end
+ // transaction, and find the corresponding split in the start
+ // transaction. If there is a bankID in the end split but not the
+ // start split, add it to the start split. If there is a bankID
+ // in BOTH, then this transaction cannot be merged (both transactions
+ // were imported!!) If the corresponding start split cannot be
+ // found and the end split has a bankID, we should probably just fail.
+ // Although we could ADD it to the transaction.
+
+ // ipwizard: Don't know if iterating over the transactions is a good idea.
+ // In case of a split transaction recorded with KMyMoney and the transaction
+ // data being imported consisting only of a single category assignment, this
+ // does not make much sense. The same applies for investment transactions
+ // stored in KMyMoney against imported transactions. I think a better solution
+ // is to just base the match on the splits referencing the same (currently
+ // selected) account.
+
+ // verify, that tm is a manually (non-matched) transaction and ti an imported one
+ if(sm.isMatched() || (!allowImportedTransactions && tm.isImported()))
+ throw new MYMONEYEXCEPTION(i18n("First transaction does not match requirement for matching"));
+ if(!ti.isImported())
+ throw new MYMONEYEXCEPTION(i18n("Second transaction does not match requirement for matching"));
+
+ // verify that the amounts are the same, otherwise we should not be matching!
+ if(sm.shares() != si.shares()) {
+ throw new MYMONEYEXCEPTION(i18n("Splits for %1 have conflicting values (%2,%3)").arg(m_account.name()).arg(sm.shares().formatMoney(m_account, sec), si.shares().formatMoney(m_account, sec)));
+ }
+
+ // ipwizard: I took over the code to keep the bank id found in the endMatchTransaction
+ // This might not work for QIF imports as they don't setup this information. It sure
+ // makes sense for OFX and HBCI.
+ const QString& bankID = si.bankID();
+ if (!bankID.isEmpty()) {
+ try {
+ if (sm.bankID().isEmpty() ) {
+ sm.setBankID( bankID );
+ tm.modifySplit(sm);
+ } else if(sm.bankID() != bankID) {
+ throw new MYMONEYEXCEPTION(i18n("Both of these transactions have been imported into %1. Therefore they cannot be matched. Matching works with one imported transaction and one non-imported transaction.").arg(m_account.name()));
+ }
+ } catch(MyMoneyException *e) {
+ QString estr = e->what();
+ delete e;
+ throw new MYMONEYEXCEPTION(i18n("Unable to match all splits (%1)").arg(estr));
+ }
+ }
+
+#if 0 // Ace's original code
+ // TODO (Ace) Add in another error to catch the case where a user
+ // tries to match two hand-entered transactions.
+ QValueList<MyMoneySplit> endSplits = endMatchTransaction.splits();
+ QValueList<MyMoneySplit>::const_iterator it_split = endSplits.begin();
+ while (it_split != endSplits.end())
+ {
+ // find the corresponding split in the start transaction
+ MyMoneySplit startSplit;
+ QString accountid = (*it_split).accountId();
+ try
+ {
+ startSplit = startMatchTransaction.splitByAccount( accountid );
+ }
+ // only exception is thrown if we cannot find a split like this
+ catch(MyMoneyException *e)
+ {
+ delete e;
+ startSplit = (*it_split);
+ startSplit.clearId();
+ startMatchTransaction.addSplit(startSplit);
+ }
+
+ // verify that the amounts are the same, otherwise we should not be
+ // matching!
+ if ( (*it_split).value() != startSplit.value() )
+ {
+ QString accountname = MyMoneyFile::instance()->account(accountid).name();
+ throw new MYMONEYEXCEPTION(i18n("Splits for %1 have conflicting values (%2,%3)").arg(accountname).arg((*it_split).value().formatMoney(),startSplit.value().formatMoney()));
+ }
+
+ QString bankID = (*it_split).bankID();
+ if ( ! bankID.isEmpty() )
+ {
+ try
+ {
+ if ( startSplit.bankID().isEmpty() )
+ {
+ startSplit.setBankID( bankID );
+ startMatchTransaction.modifySplit(startSplit);
+ }
+ else
+ {
+ QString accountname = MyMoneyFile::instance()->account(accountid).name();
+ throw new MYMONEYEXCEPTION(i18n("Both of these transactions have been imported into %1. Therefore they cannot be matched. Matching works with one imported transaction and one non-imported transaction.").arg(accountname));
+ }
+ }
+ catch(MyMoneyException *e)
+ {
+ QString estr = e->what();
+ delete e;
+ throw new MYMONEYEXCEPTION(i18n("Unable to match all splits (%1)").arg(estr));
+ }
+ }
+ ++it_split;
+ }
+#endif
+
+ // mark the split as cleared if it does not have a reconciliation information yet
+ if(sm.reconcileFlag() == MyMoneySplit::NotReconciled) {
+ sm.setReconcileFlag(MyMoneySplit::Cleared);
+ }
+
+ // if we don't have a payee assigned to the manually entered transaction
+ // we use the one we found in the imported transaction
+ if(sm.payeeId().isEmpty() && !si.payeeId().isEmpty()) {
+ sm.setValue("kmm-orig-payee", sm.payeeId());
+ sm.setPayeeId(si.payeeId());
+ }
+
+ // We use the imported postdate and keep the previous one for unmatch
+ if(tm.postDate() != ti.postDate()) {
+ sm.setValue("kmm-orig-postdate", tm.postDate().toString(Qt::ISODate));
+ tm.setPostDate(ti.postDate());
+ }
+
+ // combine the two memos into one
+ QString memo = sm.memo();
+ if(!si.memo().isEmpty() && si.memo() != memo) {
+ sm.setValue("kmm-orig-memo", memo);
+ if(!memo.isEmpty())
+ memo += "\n";
+ memo += si.memo();
+ }
+ sm.setMemo(memo);
+
+ // remember the split we matched
+ sm.setValue("kmm-match-split", si.id());
+
+ sm.addMatch(ti);
+ tm.modifySplit(sm);
+
+ MyMoneyFile::instance()->modifyTransaction(tm);
+ // Delete the end transaction if it was stored in the engine
+ if(!ti.id().isEmpty())
+ MyMoneyFile::instance()->removeTransaction(ti);
+}
+
+void TransactionMatcher::unmatch(const MyMoneyTransaction& _t, const MyMoneySplit& _s)
+{
+ if(_s.isMatched()) {
+ MyMoneyTransaction tm(_t);
+ MyMoneySplit sm(_s);
+ MyMoneyTransaction ti(sm.matchedTransaction());
+ MyMoneySplit si;
+ // if we don't have a split, then we don't have a memo
+ try {
+ si = ti.splitById(sm.value("kmm-match-split"));
+ } catch(MyMoneyException* e) {
+ delete e;
+ }
+ sm.removeMatch();
+
+ // restore the postdate if modified
+ if(!sm.value("kmm-orig-postdate").isEmpty()) {
+ tm.setPostDate(QDate::fromString(sm.value("kmm-orig-postdate"), Qt::ISODate));
+ }
+
+ // restore payee if modified
+ if(!sm.value("kmm-orig-payee").isEmpty()) {
+ sm.setPayeeId(sm.value("kmm-orig-payee"));
+ }
+
+ // restore memo if modified
+ if(!sm.value("kmm-orig-memo").isEmpty()) {
+ sm.setMemo(sm.value("kmm-orig-memo"));
+ }
+
+ sm.deletePair("kmm-orig-postdate");
+ sm.deletePair("kmm-orig-payee");
+ sm.deletePair("kmm-orig-memo");
+ sm.deletePair("kmm-match-split");
+ tm.modifySplit(sm);
+
+ MyMoneyFile::instance()->modifyTransaction(tm);
+ MyMoneyFile::instance()->addTransaction(ti);
+ }
+}
+
+void TransactionMatcher::accept(const MyMoneyTransaction& _t, const MyMoneySplit& _s)
+{
+ if(_s.isMatched()) {
+ MyMoneyTransaction tm(_t);
+ MyMoneySplit sm(_s);
+ sm.removeMatch();
+ sm.deletePair("kmm-orig-postdate");
+ sm.deletePair("kmm-orig-payee");
+ sm.deletePair("kmm-orig-memo");
+ sm.deletePair("kmm-match-split");
+ tm.modifySplit(sm);
+
+ MyMoneyFile::instance()->modifyTransaction(tm);
+ }
+}
+
+void TransactionMatcher::checkTransaction(const MyMoneyTransaction& tm, const MyMoneyTransaction& ti, const MyMoneySplit& si, QPair<MyMoneyTransaction, MyMoneySplit>& lastMatch, TransactionMatcher::autoMatchResultE& result, int variation) const
+{
+ Q_UNUSED(ti);
+
+
+ const QValueList<MyMoneySplit>& splits = tm.splits();
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = splits.begin(); it_s != splits.end(); ++it_s) {
+ MyMoneyMoney upper((*it_s).shares());
+ MyMoneyMoney lower(upper);
+ if((variation > 0) && (variation < 100)) {
+ lower = lower - (lower.abs() * MyMoneyMoney(variation, 100));
+ upper = upper + (upper.abs() * MyMoneyMoney(variation, 100));
+ }
+ // we only check for duplicates / matches if the sign
+ // of the amount for this split is identical
+ if((si.shares() >= lower) && (si.shares() <= upper)) {
+ // check for duplicate (we can only do that, if we have a bankID)
+ if(!si.bankID().isEmpty()) {
+ if((*it_s).bankID() == si.bankID()) {
+ lastMatch = QPair<MyMoneyTransaction, MyMoneySplit>(tm, *it_s);
+ result = matchedDuplicate;
+ break;
+ }
+ // in case the stored split already has a bankid
+ // assigned, it must be a different one and therefore
+ // will certainly not match
+ if(!(*it_s).bankID().isEmpty())
+ continue;
+ }
+ // check if this is the one that matches
+ if((*it_s).accountId() == si.accountId()
+ && (si.shares() >= lower) && (si.shares() <= upper)
+ && !(*it_s).isMatched()) {
+ if(tm.postDate() == ti.postDate()) {
+ lastMatch = QPair<MyMoneyTransaction, MyMoneySplit>(tm, *it_s);
+ result = matchedExact;
+ } else if(result != matchedExact) {
+ lastMatch = QPair<MyMoneyTransaction, MyMoneySplit>(tm, *it_s);
+ result = matched;
+ }
+ }
+ }
+ }
+}
+
+MyMoneyObject const * TransactionMatcher::findMatch(const MyMoneyTransaction& ti, const MyMoneySplit& si, MyMoneySplit& sm, autoMatchResultE& result)
+{
+ result = notMatched;
+ sm = MyMoneySplit();
+
+ MyMoneyTransactionFilter filter(si.accountId());
+ filter.setReportAllSplits(false);
+ filter.setDateFilter(ti.postDate().addDays(-m_days), ti.postDate().addDays(m_days));
+ filter.setAmountFilter(si.shares(), si.shares());
+
+ QValueList<QPair<MyMoneyTransaction, MyMoneySplit> > list;
+ MyMoneyFile::instance()->transactionList(list, filter);
+
+ // parse list
+ QValueList<QPair<MyMoneyTransaction, MyMoneySplit> >::iterator it_l;
+ QPair<MyMoneyTransaction, MyMoneySplit> lastMatch;
+
+ for(it_l = list.begin(); (result != matchedDuplicate) && (it_l != list.end()); ++it_l) {
+ // just skip myself
+ if((*it_l).first.id() == ti.id()) {
+ continue;
+ }
+
+ checkTransaction((*it_l).first, ti, si, lastMatch, result);
+ }
+
+ MyMoneyObject* rc = 0;
+ if(result != notMatched) {
+ sm = lastMatch.second;
+ rc = new MyMoneyTransaction(lastMatch.first);
+
+ } else {
+ // if we did not find anything, we need to scan for scheduled transactions
+ QValueList<MyMoneySchedule> list;
+ QValueList<MyMoneySchedule>::iterator it_sch;
+ // find all schedules that have a reference to the current account
+ list = MyMoneyFile::instance()->scheduleList(m_account.id());
+ for(it_sch = list.begin(); (result != matched && result != matchedExact) && (it_sch != list.end()); ++it_sch) {
+ // get the next due date adjusted by the weekend switch
+ QDate nextDueDate = (*it_sch).nextDueDate();
+ if((*it_sch).isOverdue() ||
+ (nextDueDate >= ti.postDate().addDays(-m_days)
+ && nextDueDate <= ti.postDate().addDays(m_days))) {
+ MyMoneyTransaction st = KMyMoneyUtils::scheduledTransaction(*it_sch);
+ checkTransaction(st, ti, si, lastMatch, result, (*it_sch).variation());
+ if(result == matched || result == matchedExact) {
+ sm = lastMatch.second;
+ rc = new MyMoneySchedule(*it_sch);
+ }
+ }
+ }
+ }
+
+ return rc;
+}
+
diff --git a/kmymoney2/dialogs/transactionmatcher.h b/kmymoney2/dialogs/transactionmatcher.h
new file mode 100644
index 0000000..e5e036c
--- /dev/null
+++ b/kmymoney2/dialogs/transactionmatcher.h
@@ -0,0 +1,145 @@
+/***************************************************************************
+ transactionmatcher.h
+ ----------
+ begin : Tue Jul 08 2008
+ copyright : (C) 2008 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef TRANSACTIONMATCHER_H
+#define TRANSACTIONMATCHER_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneytransaction.h>
+#include <kmymoney/mymoneyaccount.h>
+class MyMoneySchedule;
+
+class TransactionMatcher
+{
+public:
+ typedef enum {
+ notMatched = 0, ///< no matching transaction found
+ matched, ///< matching transaction found
+ matchedExact, ///< matching transaction found with exact same date
+ matchedDuplicate ///< duplicate matching transaction found
+ } autoMatchResultE;
+
+ TransactionMatcher(const MyMoneyAccount& acc);
+
+ /**
+ * This method matches the manual entered transaction @p tm with the imported
+ * transaction @p ti based on the splits @p sm and @p si. If the match can be applied,
+ * MyMoneyTransaction::addMatch() is used to include @p ti inside @p tm and the
+ * engine data (MyMoneyFile) is updated. A possible bankid found in the imported
+ * split is carried over into the manual transaction.
+ *
+ * The following things will be done in case of a match:
+ *
+ * - if the postdate differs between the two transactions
+ * - the postdate of the manual entered transaction is stored in kmm-orig-postdate
+ * - the postdate of the imported transaction is assigned to the resulting transaction
+ * - if the payee differs between the two splits
+ * - the payee of the manual split is stored in kmm-orig-payee
+ * - the payee of the imported split is assigned to the resulting split
+ * - if the reconciliation state is not-reconciled
+ * - the reconciliation state is set to cleared
+ * - the bankid of the imported transaction is assigned to the resulting transaction
+ * - the resulting transaction will be updated and the imported transaction removed
+ * from the engine
+ *
+ * The application of the match depends on the following items:
+ *
+ * - both share values of @p sm and @p si must be identical
+ * - @p tm must be a non-imported (see below), non-matched transaction
+ * - @p ti must be an imported transaction
+ *
+ * If @p allowImportedTransactions is true, @p tm may be an imported transaction. The
+ * default of @p allowImportedTransactions is @p false.
+ *
+ * In case of errors, an exception is thrown.
+ */
+ void match(MyMoneyTransaction tm, MyMoneySplit sm, MyMoneyTransaction ti, MyMoneySplit si, bool allowImportedTransactions = false);
+
+ /**
+ * This method is used to unmatch a previously matched transaction (see match() and findMatch() )
+ * and restore the original and imported transaction in the engine.
+ *
+ * The following things will be done in case @p t is a matched transaction:
+ *
+ * - the enclosed imported transaction is extracted and restored
+ * - if the kvp contains a kmm-orig-payee record
+ * - the payee is updated to this value if it still exists, otherwise the payee is left empty
+ * - if the kvp contains a kmm-orig-postdate record
+ * - the postdate of the transaction is changed to the value stored in this record
+ * - a matching bankid is removed from the transaction
+ * - the resulting transaction will be updated and the imported transaction inserted
+ * into the engine
+ *
+ * In case of errors, an exception is thrown.
+ */
+ void unmatch(const MyMoneyTransaction& t, const MyMoneySplit& s);
+
+ /**
+ * This method is used to accept a previously matched transaction (see match() and findMatch())
+ *
+ * The following things will be done in case @p _t is a matched transaction
+ *
+ * - the enclosed imported transaction is removed
+ * - the kvps kmm-orig-payee and kmm-orig-postdate are removed
+ * - the resulting transaction will be updated
+ *
+ * In case of errors, an exception is thrown
+ */
+ void accept(const MyMoneyTransaction& t, const MyMoneySplit& s);
+
+ /**
+ * This method is used to automatically find a matching transaction in the ledger or the schedules.
+ * It should also detect duplicate imports according to the splits bankid.
+ *
+ * To be designed
+ *
+ * @param ti the imported transaction we want to match
+ * @param si the split of that transaction referencing the account we import into
+ * @param sm the split of the object returned that matches the split @a si. In case
+ * the returned pointer is not 0 this object contains the split. In other
+ * cases it contains an empty MyMoneySplit.
+ * @param result reference to the result details
+ *
+ * @returns pointer to MyMoneyObject (either a MyMoneyTransaction or a MyMoneySchedule). The
+ * caller of this method becomes the owner of the object pointed to and is responsible
+ * to delete the object
+ */
+ MyMoneyObject const * findMatch(const MyMoneyTransaction& ti, const MyMoneySplit& si, MyMoneySplit& sm, autoMatchResultE& result);
+
+ /**
+ * Sets the number of @a days to look for matching transactions. The default after object creation is 3 days.
+ */
+ void setMatchWindow(int days) { m_days = days; }
+
+private:
+ void checkTransaction(const MyMoneyTransaction& tm, const MyMoneyTransaction& ti, const MyMoneySplit& si, QPair<MyMoneyTransaction, MyMoneySplit>& lastMatch, autoMatchResultE& result, int variation = 0) const;
+
+private:
+ MyMoneyAccount m_account;
+ int m_days;
+};
+
+
+#endif
diff --git a/kmymoney2/export.h b/kmymoney2/export.h
new file mode 100644
index 0000000..1e8c3aa
--- /dev/null
+++ b/kmymoney2/export.h
@@ -0,0 +1,37 @@
+/*
+ This file is part of kmymoney2 project
+ Copyright (c) 2005 Laurent Montel <montel@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#ifndef _KMYMONEY_EXPORT_H
+#define _KMYMONEY_EXPORT_H
+
+#include <kdeversion.h>
+
+#if KDE_IS_VERSION(3,2,90)
+ #ifdef __KDE_HAVE_GCC_VISIBILITY
+ #include <kdemacros.h>
+ #define KMYMONEY_EXPORT KDE_EXPORT
+ #else
+ #define KMYMONEY_EXPORT
+ #endif
+#else
+ #define KMYMONEY_EXPORT
+#endif
+#endif /* _KMYMONEY_EXPORT_H */
+
diff --git a/kmymoney2/hi128-app-kmymoney2.png b/kmymoney2/hi128-app-kmymoney2.png
new file mode 100644
index 0000000..8831c89
--- /dev/null
+++ b/kmymoney2/hi128-app-kmymoney2.png
Binary files differ
diff --git a/kmymoney2/hi16-app-kmymoney2.png b/kmymoney2/hi16-app-kmymoney2.png
new file mode 100644
index 0000000..602dfe2
--- /dev/null
+++ b/kmymoney2/hi16-app-kmymoney2.png
Binary files differ
diff --git a/kmymoney2/hi32-app-kmymoney2.png b/kmymoney2/hi32-app-kmymoney2.png
new file mode 100644
index 0000000..2c094bd
--- /dev/null
+++ b/kmymoney2/hi32-app-kmymoney2.png
Binary files differ
diff --git a/kmymoney2/hi48-app-kmymoney2.png b/kmymoney2/hi48-app-kmymoney2.png
new file mode 100644
index 0000000..5d3dd78
--- /dev/null
+++ b/kmymoney2/hi48-app-kmymoney2.png
Binary files differ
diff --git a/kmymoney2/hi64-app-kmymoney2.png b/kmymoney2/hi64-app-kmymoney2.png
new file mode 100644
index 0000000..c92938c
--- /dev/null
+++ b/kmymoney2/hi64-app-kmymoney2.png
Binary files differ
diff --git a/kmymoney2/html/Makefile.am b/kmymoney2/html/Makefile.am
new file mode 100644
index 0000000..0d37ad0
--- /dev/null
+++ b/kmymoney2/html/Makefile.am
@@ -0,0 +1,23 @@
+KDE_OPTIONS = noautodist
+
+SUBDIRS = images
+
+HOMEPAGES = home_pt_BR.html home_de.html home_es.html home_fr.html home_gl.html home.html home_it.html home_nl.html home_ro.html home_ru.html home_tr.html home_pt.html
+
+WHATSNEWPAGES = whats_new_pt_BR.html whats_new_de.html whats_new_es.html whats_new_fr.html whats_new_gl.html whats_new.html whats_new_it.html whats_new_nl.html whats_new_ro.html whats_new_ru.html whats_new_tr.html
+
+EXTRA_DIST = $(HOMEPAGES) $(WHATSNEWPAGES) kmymoney2.css welcome.css
+
+LOCAL_DIR = kmymoney2/html
+
+install-data-local:
+ $(mkinstalldirs) $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR)
+ for file in $(EXTRA_DIST); do \
+ $(INSTALL_DATA) $(srcdir)/$$file $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR); \
+ done
+
+uninstall-local:
+ for file in $(EXTRA_DIST); do \
+ rm -f $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR)/$$file; \
+ done
+
diff --git a/kmymoney2/html/home.html b/kmymoney2/html/home.html
new file mode 100644
index 0000000..cf7e00e
--- /dev/null
+++ b/kmymoney2/html/home.html
@@ -0,0 +1,59 @@
+<!--
+***************************************************************************************
+3/23/2005 KMyMoney Welcome Page
+Robert Wadley rob<at>robntina.fastmail.us
+David Wadley mail<at>davidwadley.com
+
+***************************************************************************************
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <title>Untitled Document</title>
+ <meta http-equiv="Content-Type"
+ content="text/html; charset=iso-8859-1">
+ <link href="welcome.css" rel="stylesheet" type="text/css">
+
+</head>
+<body>
+<!--"background_image", if enabled, displays an image in the background of this page.
+If you wish to use a background, un-comment the following line -->
+<img id="background_image" src="images/background.png" height="100%">
+<img id="KMyMoneyLogo" src="images/trans_logo.png">
+<h3 id="title">Welcome to KMyMoney</h3>
+<h4 id="subtitle">The free, easy to use, personal finance manager for KDE</h4>
+<!--p id="tagline">Personal Finance Software</p-->
+<div id="returnLink"><a href="/home"><img src="images/backarrow.png">Go to My Financial Summary</a></div>
+<div id="topleft">
+<div id="topright"><img src="images/spacer.png"></div><!--topright-->
+<div id="rightborder">
+<table style="width: 100%;">
+ <tbody>
+ <tr>
+ <td></td>
+ <!-- <td style="height: 150px; width: 380px;"> -->
+ <td style="height: 150px;">
+ <div id="welcomeMenu">
+<h4>Start with one of the following activities...</h4>
+ <ul>
+ <li><img src="images/filenew.png"><a href="/action?id=file_new">Get started and setup my accounts</a></li>
+ <li><img src="images/kmymoneydata.png"><a href="/action?id=file_open">Open an existing KMyMoney data file</a></li>
+ <li><img src="images/manual.png"><a href="/action?id=help_contents">Learn how to use KMyMoney</a></li>
+ <li><img src="images/konqueror.png"><a href="http://kmymoney2.sf.net">Visit the KMyMoney website</a></li>
+ <li><img src="images/about_kde.png"><a href="http://forum.kde.org/viewforum.php?f=69">Get help from the KMyMoney community</a></li>
+ <li><img src="images/messagebox_info.png"><a href="/welcome?mode=whatsnew">See what's new in this version</a></li>
+ </ul>
+ </div><!--welcomeMenu-->
+ </td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+</div><!--rightborder-->
+<div id="bottomleft">
+<div id="bottomright"></div><!--bottomright-->
+</div><!--bottomleft-->
+</div><!--topleft-->
+</body>
+</html>
diff --git a/kmymoney2/html/home_de.html b/kmymoney2/html/home_de.html
new file mode 100644
index 0000000..a3bf0c6
--- /dev/null
+++ b/kmymoney2/html/home_de.html
@@ -0,0 +1,58 @@
+<!--
+******************************************************************************
+3/23/2005 KMyMoney Welcome Page
+Robert Wadley rob<at>robntina.fastmail.us
+David Wadley mail<at>davidwadley.com
+Thomas Baumgart ipwizard<at>users.sourceforge.net
+******************************************************************************
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <title>Untitled Document</title>
+ <meta http-equiv="Content-Type"
+ content="text/html; charset=utf-8">
+ <link href="welcome.css" rel="stylesheet" type="text/css">
+</head>
+<body>
+<!--"background_image", if enabled, displays an image in the background of this page.
+If you wish to use a background, un-comment the following line -->
+<img id="background_image" src="images/background.png" height="100%">
+<img id="KMyMoneyLogo" src="images/trans_logo.png">
+<h3 id="title">Willkommen bei KMyMoney</h3>
+<h4 id="subtitle">Ihrem persönlichen Finanzassistenten</h4>
+<!--p id="tagline">Personal Finance Software</p-->
+<div id="returnLink"><a href="/home"><img src="images/backarrow.png">Zur Finanzübersicht</a></div>
+<div id="topleft">
+<div id="topright"><img src="images/spacer.png"></div>
+<div id="rightborder">
+<table style="width: 100%;">
+ <tbody>
+ <tr>
+ <td></td>
+ <!-- <td style="height: 150px; width: 380px;"> -->
+ <td style="height: 150px;">
+ <div id="welcomeMenu">
+ <h4>Beginne mit einer der folgenden Aktivitäten...</h4>
+ <ul>
+ <li><img src="images/filenew.png"><a href="/action?id=file_new">Erzeuge eine neue KMyMoney Datei</a></li>
+ <li><img src="images/kmymoneydata.png"><a href="/action?id=file_open">Öffne eine bestehende KMyMoney Datei</a></li>
+ <li><img src="images/manual.png"><a href="/action?id=help_contents">Lerne mit KMyMoney umzugehen</a></li>
+ <li><img src="images/konqueror.png"><a href="http://kmymoney2.sf.net">Besuche die KMyMoney website</a></li>
+ <li><img src="images/about_kde.png"><a href="http://forum.kde.org/viewforum.php?f=69">Erhalte Hilfe von der KMyMoney Community</a></li>
+ <li><img src="images/messagebox_info.png"><a href="/welcome?mode=whatsnew">Übersicht der neuen Funktionen dieser Version</a></li>
+ </ul>
+ </div><!--welcomeMenu-->
+ </td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+</div><!--rightborder-->
+<div id="bottomleft">
+<div id="bottomright"></div><!--bottomright-->
+</div><!--bottomleft-->
+</div><!--topleft-->
+</body>
+</html>
diff --git a/kmymoney2/html/home_es.html b/kmymoney2/html/home_es.html
new file mode 100644
index 0000000..78831fa
--- /dev/null
+++ b/kmymoney2/html/home_es.html
@@ -0,0 +1,58 @@
+<!--
+***************************************************************************************
+3/23/2005 KMyMoney Welcome Page
+Robert Wadley rob<at>robntina.fastmail.us
+David Wadley mail<at>davidwadley.com
+
+***************************************************************************************
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <title>Untitled Document</title>
+ <meta http-equiv="Content-Type"
+ content="text/html; charset=iso-8859-1">
+ <link href="welcome.css" rel="stylesheet" type="text/css">
+
+</head>
+<body>
+<!--"background_image", if enabled, displays an image in the background of this page.
+If you wish to use a background, un-comment the following line -->
+<img id="background_image" src="images/background.png" height="100%">
+<img id="KMyMoneyLogo" src="images/trans_logo.png">
+<h3 id="title" style="font-size: 20px;">Bienvenido a KMyMoney</h3>
+<h4 id="subtitle">Software de Gesti&oacute;n de Finanzas Personales</h4>
+
+<div id="returnLink"><a href="/home"><img src="images/backarrow.png">Ir a Mi Resumen Financiero</a></div>
+<div id="topleft">
+<div id="topright"><img src="images/spacer.png"></div>
+<div id="rightborder">
+<table style="width: 100%;">
+ <tbody>
+ <tr>
+ <td></td>
+ <!-- <td style="height: 150px; width: 380px;"> -->
+ <td style="height: 150px;">
+ <div id="welcomeMenu">
+ <ul>
+ <li><img src="images/filenew.png"><a href="/action?id=file_new">Crear un nuevo archivo de datos de KMyMoney</a></li>
+ <li><img src="images/kmymoneydata.png"><a href="/action?id=file_open">Utilizar un archivos existente de datos de KMyMoney</a></li>
+ <li><img src="images/manual.png"><a href="/action?id=help_contents">Aprender a usar KMyMoney</a></li>
+ <li><img src="images/konqueror.png"><a href="http://kmymoney2.sf.net">Visitar el sitio web de KMyMoney</a></li>
+ <li><img src="images/about_kde.png"><a href="http://forum.kde.org/viewforum.php?f=69">Obtener ayuda de la comunidad de KMyMoney</a></li>
+ <li><img src="images/messagebox_info.png"><a href="/welcome?mode=whatsnew">Ver lo nuevo en esta versi&oacute;n</a></li>
+ </ul>
+ </div>
+ </td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<div id="bottomleft">
+<div id="bottomright"></div>
+</div>
+</div>
+</body>
+</html>
diff --git a/kmymoney2/html/home_fr.html b/kmymoney2/html/home_fr.html
new file mode 100644
index 0000000..6f46322
--- /dev/null
+++ b/kmymoney2/html/home_fr.html
@@ -0,0 +1,61 @@
+<!--
+***************************************************************************************
+3/23/2005 KMyMoney Welcome Page
+Robert Wadley rob<at>robntina.fastmail.us
+David Wadley mail<at>davidwadley.com
+
+***************************************************************************************
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <title>Untitled Document</title>
+ <meta http-equiv="Content-Type"
+ content="text/html; charset=iso-8859-1">
+ <link href="welcome.css" rel="stylesheet" type="text/css">
+
+</head>
+<body>
+<!--"background_image", if enabled, displays an image in the background of this page.
+If you wish to use a background, un-comment the following line -->
+<img id="background_image" src="images/background.png" height="100%">
+<img id="KMyMoneyLogo" src="images/trans_logo.png">
+<h3 id="title" style="font-size: 20px;">Bienvenue dans KMyMoney</h3>
+<h4 id="subtitle">Logiciel de comptabilit� personnelle</h4>
+
+<div id="returnLink"><a href="/home"><img src="images/backarrow.png">Acc�der � mon r�sum� financier</a></div>
+<div id="topleft">
+<div id="topright"><img src="images/spacer.png"></div>
+<div id="rightborder">
+<table style="width: 100%;">
+ <tbody>
+ <tr>
+ <td></td>
+ <td style="height: 150px; width: 380px;">
+ <div id="welcomeMenu">
+ <ul>
+ <li><img src="images/filenew.png"><a href="/action?id=file_new">Cr�er un nouveau fichier KMyMoney</a></li>
+ <li><img src="images/kmymoneydata.png"><a href="/action?id=file_open">Utiliser un fichier KMyMoney existant</a></li>
+ <li><img src="images/manual.png"><a href="/action?id=help_contents">Apprendre � utiliser KMyMoney</a></li>
+ <li><img src="images/konqueror.png"><a href="http://kmymoney2.sf.net">Visiter le site web de KMyMoney</a></li>
+ <li><img src="images/about_kde.png"><a href="http://forum.kde.org/viewforum.php?f=69">Obtenir de l'aide de la communaut� KMyMoney</a></li>
+ <li><img src="images/messagebox_info.png"><a href="/welcome?mode=whatsnew">Voir les nouveaut�s de cette version</a></li>
+ </ul>
+ </div>
+ </td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<div id="bottomleft">
+<div id="bottomright"></div>
+</div>
+</div>
+</body>
+</html>
+
+
+
+
diff --git a/kmymoney2/html/home_gl.html b/kmymoney2/html/home_gl.html
new file mode 100644
index 0000000..09210fc
--- /dev/null
+++ b/kmymoney2/html/home_gl.html
@@ -0,0 +1,57 @@
+<!--
+***************************************************************************************
+3/23/2005 KMyMoney Welcome Page
+Robert Wadley rob<at>robntina.fastmail.us
+David Wadley mail<at>davidwadley.com
+
+***************************************************************************************
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <title>Documento sen título</title>
+ <meta http-equiv="Content-Type"
+ content="text/html; charset=iso-8859-1">
+ <link href="welcome.css" rel="stylesheet" type="text/css">
+</head>
+<body>
+<!--"background_image", if enabled, displays an image in the background of this page.
+If you wish to use a background, un-comment the following line -->
+<img id="background_image" src="images/background.png" height="100%">
+<img id="KMyMoneyLogo" src="images/trans_logo.png">
+<h3 id="title" style="font-size: 20px;">Benvido a KMyMoney</h3>
+<h4 id="subtitle">O xestor das s&uacute;as finanzas</h4>
+
+<div id="returnLink"><a href="/home"><img src="images/backarrow.png">Ir ao resumo financeiro</a></div>
+<div id="topleft">
+<div id="topright"><img src="images/spacer.png"></div>
+<div id="rightborder">
+<table style="width: 100%;">
+ <tbody>
+ <tr>
+ <td></td>
+ <!-- <td style="height: 150px; width: 380px;"> -->
+ <td style="height: 150px;">
+ <div id="welcomeMenu">
+ <ul>
+ <li><img src="images/filenew.png"><a href="/action?id=file_new">Criar un ficheiro novo</a></li>
+ <li><img src="images/kmymoneydata.png"><a href="/action?id=file_open">Abrir un ficheiro de KMyMoney</a></li>
+ <li><img src="images/manual.png"><a href="/action?id=help_contents">Aprender a utilizar KMyMoney</a></li>
+ <li><img src="images/konqueror.png"><a href="http://kmymoney2.sf.net">Visitar a web do proxecto</a></li>
+ <li><img src="images/about_kde.png"><a href="http://forum.kde.org/viewforum.php?f=69">Get help from the KMyMoney community</a></li>
+ <li><img src="images/messagebox_info.png"><a href="/welcome?mode=whatsnew">Ver as novidades desta versi&oacute;n</a></li>
+ </ul>
+ </div>
+ </td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<div id="bottomleft">
+<div id="bottomright"></div>
+</div>
+</div>
+</body>
+</html>
diff --git a/kmymoney2/html/home_it.html b/kmymoney2/html/home_it.html
new file mode 100644
index 0000000..ab9d4ea
--- /dev/null
+++ b/kmymoney2/html/home_it.html
@@ -0,0 +1,59 @@
+<!--
+***************************************************************************************
+3/23/2005 KMyMoney Welcome Page
+Robert Wadley rob<at>robntina.fastmail.us
+David Wadley mail<at>davidwadley.com
+
+***************************************************************************************
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <title>Documento senza titolo</title>
+ <meta http-equiv="Content-Type"
+ content="text/html; charset=iso-8859-1">
+ <link href="welcome.css" rel="stylesheet" type="text/css">
+
+</head>
+<body>
+<!--"background_image", if enabled, displays an image in the background of this page.
+If you wish to use a background, un-comment the following line -->
+<img id="background_image" src="images/background.png" height="100%">
+<img id="KMyMoneyLogo" src="images/trans_logo.png">
+<h3 id="title">Benvenuti in KMyMoney</h3>
+<h4 id="subtitle">Il gestore delle finanze personali per KDE libero e facile da utilizzare</h4>
+<!--p id="tagline">Personal Finance Software</p-->
+<div id="returnLink"><a href="/home"><img src="images/backarrow.png">Vai al Riepilogo finanziario</a></div>
+<div id="topleft">
+<div id="topright"><img src="images/spacer.png"></div><!--topright-->
+<div id="rightborder">
+<table style="width: 100%;">
+ <tbody>
+ <tr>
+ <td></td>
+ <!-- <td style="height: 150px; width: 380px;"> -->
+ <td style="height: 150px;">
+ <div id="welcomeMenu">
+<h4>Inizia con una delle seguenti attivit...</h4>
+ <ul>
+ <li><img src="images/filenew.png"><a href="/action?id=file_new">Inizia e configura i miei conti</a></li>
+ <li><img src="images/kmymoneydata.png"><a href="/action?id=file_open">Apri un file dati esistente di KMyMoney</a></li>
+ <li><img src="images/manual.png"><a href="/action?id=help_contents">Impara a utilizzare KMyMoney</a></li>
+ <li><img src="images/konqueror.png"><a href="http://kmymoney2.sf.net">Visita il sito web di KMyMoney</a></li>
+ <li><img src="images/about_kde.png"><a href="http://forum.kde.org/viewforum.php?f=69">Ottieni aiuto dalla comunit di KMyMoney</a></li>
+ <li><img src="images/messagebox_info.png"><a href="/welcome?mode=whatsnew">Leggi le novit di questa versione</a></li>
+ </ul>
+ </div><!--welcomeMenu-->
+ </td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+</div><!--rightborder-->
+<div id="bottomleft">
+<div id="bottomright"></div><!--bottomright-->
+</div><!--bottomleft-->
+</div><!--topleft-->
+</body>
+</html>
diff --git a/kmymoney2/html/home_nl.html b/kmymoney2/html/home_nl.html
new file mode 100644
index 0000000..531fd24
--- /dev/null
+++ b/kmymoney2/html/home_nl.html
@@ -0,0 +1,58 @@
+<!--
+***************************************************************************************
+3/23/2005 KMyMoney Welcome Page
+Robert Wadley rob<at>robntina.fastmail.us
+David Wadley mail<at>davidwadley.com
+
+***************************************************************************************
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <title>Untitled Document</title>
+ <meta http-equiv="Content-Type"
+ content="text/html; charset=iso-8859-1">
+ <link href="welcome.css" rel="stylesheet" type="text/css">
+
+</head>
+<body>
+<!--"background_image", if enabled, displays an image in the background of this page.
+If you wish to use a background, un-comment the following line -->
+<img id="background_image" src="images/background.png" height="100%">
+<img id="KMyMoneyLogo" src="images/trans_logo.png">
+<h3 id="title">Welkom bij KMyMoney</h3>
+<h4 id="subtitle">Persoonlijke Financi&euml;le Software</h4>
+
+<div id="returnLink"><a href="/home"><img src="images/backarrow.png">Ga naar mijn Financi&euml;le Samenvatting</a></div>
+<div id="topleft">
+<div id="topright"><img src="images/spacer.png"></div>
+<div id="rightborder">
+<table style="width: 100%;">
+ <tbody>
+ <tr>
+ <td></td>
+ <!-- <td style="height: 150px; width: 380px;"> -->
+ <td style="height: 150px;">
+ <div id="welcomeMenu">
+ <ul>
+ <li><img src="images/filenew.png"><a href="/action?id=file_new">Cre&euml;er een nieuw KMyMoney bestand</a></li>
+ <li><img src="images/kmymoneydata.png"><a href="/action?id=file_open">Open een bestaand KMyMoney bestand</a></li>
+ <li><img src="images/manual.png"><a href="/action?id=help_contents">Leer hoe je KMyMoney gebruikt</a></li>
+ <li><img src="images/konqueror.png"><a href="http://kmymoney2.sf.net">Bezoek de KMyMoney website</a></li>
+ <li><img src="images/about_kde.png"><a href="http://forum.kde.org/viewforum.php?f=69">Vraag hulp aan de KMyMoney community</a></li>
+ <li><img src="images/messagebox_info.png"><a href="/welcome?mode=whatsnew">Nieuw in deze versie</a></li>
+ </ul>
+ </div>
+ </td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<div id="bottomleft">
+<div id="bottomright"></div>
+</div>
+</div>
+</body>
+</html>
diff --git a/kmymoney2/html/home_pt.html b/kmymoney2/html/home_pt.html
new file mode 100644
index 0000000..948290e
--- /dev/null
+++ b/kmymoney2/html/home_pt.html
@@ -0,0 +1,57 @@
+<!--
+***************************************************************************************
+3/23/2005 KMyMoney Welcome Page
+Robert Wadley rob<at>robntina.fastmail.us
+David Wadley mail<at>davidwadley.com
+
+***************************************************************************************
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <title>Untitled Document</title>
+ <meta http-equiv="Content-Type"
+ content="text/html; charset=iso-8859-1">
+ <link href="welcome.css" rel="stylesheet" type="text/css">
+
+</head>
+<body>
+<!--"background_image", if enabled, displays an image in the background of this page.
+If you wish to use a background, un-comment the following line -->
+<img id="background_image" src="images/background.png" height="100%">
+<img id="KMyMoneyLogo" src="images/trans_logo.png">
+<h3 id="title">Bemvindo ao KMyMoney</h3>
+<h4 id="subtitle">Gestor de Finanas Pessoais</h4>
+
+<div id="returnLink"><a href="/home"><img src="images/backarrow.png">Aceder ao meu resumo financeiro</a></div>
+<div id="topleft">
+<div id="topright"><img src="images/spacer.png"></div>
+<div id="rightborder">
+<table style="width: 100%;">
+ <tbody>
+ <tr>
+ <td></td>
+ <!-- <td style="height: 150px; width: 380px;"> -->
+ <td style="height: 150px;">
+ <div id="welcomeMenu">
+ <ul>
+ <li><img src="images/filenew.png"><a href="/action?id=file_new">Criar um novo ficheiro de dados KMyMoney</a></li>
+ <li><img src="images/kmymoneydata.png"><a href="/action?id=file_open">Abrir um ficheiro de dados KMyMoney</a></li>
+ <li><img src="images/manual.png"><a href="/action?id=help_contents">Aprender a utilizar o KMyMoney</a></li>
+ <li><img src="images/konqueror.png"><a href="http://kmymoney2.sf.net">Visitar o site internet do KMyMoney</a></li>
+ <li><img src="images/messagebox_info.png"><a href="/welcome?mode=whatsnew">Ver as novidades de esta verso</a></li>
+ </ul>
+ </div>
+ </td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<div id="bottomleft">
+<div id="bottomright"></div>
+</div>
+</div>
+</body>
+</html>
diff --git a/kmymoney2/html/home_pt_BR.html b/kmymoney2/html/home_pt_BR.html
new file mode 100644
index 0000000..ab2a30a
--- /dev/null
+++ b/kmymoney2/html/home_pt_BR.html
@@ -0,0 +1,58 @@
+<!--
+***************************************************************************************
+3/23/2005 KMyMoney Welcome Page
+Robert Wadley rob<at>robntina.fastmail.us
+David Wadley mail<at>davidwadley.com
+
+***************************************************************************************
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <title>Pgina Inicial</title>
+ <meta http-equiv="Content-Type"
+ content="text/html; charset=iso-8859-1">
+ <link href="welcome.css" rel="stylesheet" type="text/css">
+
+</head>
+<body>
+<!--"background_image", if enabled, displays an image in the background of this page.
+If you wish to use a background, un-comment the following line -->
+<img id="background_image" src="images/background.png" height="100%">
+<img id="KMyMoneyLogo" src="images/trans_logo.png">
+<h3 id="title">Bem Vindo ao KMyMoney</h3>
+<h4 id="subtitle">Software de Finanas Pessoais</h4>
+
+<div id="returnLink"><a href="/home"><img src="images/backarrow.png">Ir para o Meu Resumo Financeiro</a></div>
+<div id="topleft">
+<div id="topright"><img src="images/spacer.png"></div>
+<div id="rightborder">
+<table style="width: 100%;">
+ <tbody>
+ <tr>
+ <td></td>
+ <!-- <td style="height: 150px; width: 380px;"> -->
+ <td style="height: 150px;">
+ <div id="welcomeMenu">
+ <ul>
+ <li><img src="images/filenew.png"><a href="/action?id=file_new">Criar um novo arquivo de dados do KMyMoney</a></li>
+ <li><img src="images/kmymoneydata.png"><a href="/action?id=file_open">Abrir um arquivo de dados existente do KMyMoney</a></li>
+ <li><img src="images/manual.png"><a href="/action?id=help_contents">Aprender como usar o KMyMoney</a></li>
+ <li><img src="images/konqueror.png"><a href="http://kmymoney2.sf.net">Visitar a pgina Web do KMyMoney</a></li>
+ <li><img src="images/about_kde.png"><a href="http://forum.kde.org/viewforum.php?f=69">Obter ajuda da comunidade do KMyMoney</a></li>
+ <li><img src="images/messagebox_info.png"><a href="/welcome?mode=whatsnew">Ver as novidades desta verso</a></li>
+ </ul>
+ </div>
+ </td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<div id="bottomleft">
+<div id="bottomright"></div>
+</div>
+</div>
+</body>
+</html>
diff --git a/kmymoney2/html/home_ro.html b/kmymoney2/html/home_ro.html
new file mode 100644
index 0000000..948748f
--- /dev/null
+++ b/kmymoney2/html/home_ro.html
@@ -0,0 +1,58 @@
+<!--
+***************************************************************************************
+3/23/2005 KMyMoney Welcome Page
+Robert Wadley rob<at>robntina.fastmail.us
+David Wadley mail<at>davidwadley.com
+
+***************************************************************************************
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <title>Bine aţi venit în KMyMoney</title>
+ <meta http-equiv="Content-Type"
+ content="text/html; charset=utf-8">
+ <link href="welcome.css" rel="stylesheet" type="text/css">
+
+</head>
+<body>
+<!--"background_image", if enabled, displays an image in the background of this page.
+If you wish to use a background, un-comment the following line -->
+<img id="background_image" src="images/background.png" height="100%">
+<img id="KMyMoneyLogo" src="images/trans_logo.png">
+<h3 id="title">Bine aţi venit în KMyMoney</h3>
+<h4 id="subtitle">Aplicaţie pentru gestionarea finanţelor personale</h4>
+
+<div id="returnLink"><a href="/home"><img src="images/backarrow.png">Du-te la sumarul meu finaciar</a></div>
+<div id="topleft">
+<div id="topright"><img src="images/spacer.png"></div>
+<div id="rightborder">
+<table style="width: 100%;">
+ <tbody>
+ <tr>
+ <td></td>
+ <!-- <td style="height: 150px; width: 380px;"> -->
+ <td style="height: 150px;">
+ <div id="welcomeMenu">
+ <ul>
+ <li><img src="images/filenew.png"><a href="/action?id=file_new">Creaţi un fişier de date KMyMoney nou</a></li>
+ <li><img src="images/kmymoneydata.png"><a href="/action?id=file_open">Folosiţi un fişier de date KMyMoney existent</a></li>
+ <li><img src="images/manual.png"><a href="/action?id=help_contents">Învăţaţi cum se foloseşte KMyMoney</a></li>
+ <li><img src="images/konqueror.png"><a href="http://kmymoney2.sf.net">Vizitaţi siteul KMyMoney</a></li>
+ <li><img src="images/about_kde.png"><a href="http://forum.kde.org/viewforum.php?f=69">Cereţi ajutorul comunutăţii KMyMoney</a></li>
+ <li><img src="images/messagebox_info.png"><a href="/welcome?mode=whatsnew">Vizualizaţi noutăţile din această versiune</a></li>
+ </ul>
+ </div>
+ </td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<div id="bottomleft">
+<div id="bottomright"></div>
+</div>
+</div>
+</body>
+</html>
diff --git a/kmymoney2/html/home_ru.html b/kmymoney2/html/home_ru.html
new file mode 100644
index 0000000..9046c70
--- /dev/null
+++ b/kmymoney2/html/home_ru.html
@@ -0,0 +1,56 @@
+<!--
+***************************************************************************************
+16.03.2007 KMyMoney Welcome Page on Russian
+Andrey Cherepanov sibskull<at>mail.ru
+
+***************************************************************************************
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <title>Страница приветствия</title>
+ <meta http-equiv="Content-Type"
+ content="text/html; charset=utf-8">
+ <link href="welcome.css" rel="stylesheet" type="text/css">
+
+</head>
+<body>
+<!--"background_image", if enabled, displays an image in the background of this page.
+If you wish to use a background, un-comment the following line -->
+<img id="background_image" src="images/background.png" height="100%">
+<img id="KMyMoneyLogo" src="images/trans_logo.png">
+<h3 id="title">Добро пожаловать в KMyMoney</h3>
+<h4 id="subtitle">Программа учёта финансов</h4>
+
+<div id="returnLink"><img src="images/backarrow.png" style="vertical-align: middle; "> <a href="/home">Сводное финансовое состояние</a></div>
+<div id="topleft">
+<div id="topright"><img src="images/spacer.png"></div>
+<div id="rightborder">
+<table style="width: 100%;">
+ <tbody>
+ <tr>
+ <td></td>
+ <td style="height: 150px;">
+ <div id="welcomeMenu">
+ <ul>
+ <li><img src="images/filenew.png"><a href="/action?id=file_new">Создать новый файл и настроить счета</a></li>
+ <li><img src="images/kmymoneydata.png"><a href="/action?id=file_open">Открыть существующий файл</a></li>
+ <li><img src="images/manual.png"><a href="/action?id=help_contents">Руководство пользователя</a> (на английском языке)</li>
+ <li><img src="images/konqueror.png"><a href="http://kmymoney2.sf.net">Веб-сайт KMyMoney</a> (на английском языке)</li>
+ <li><img src="images/about_kde.png"><a href="http://forum.kde.org/viewforum.php?f=69">Форум сообщества пользователей KMyMoney</a> (на английском языке)</li>
+ <li><img src="images/messagebox_info.png"><a href="/welcome?mode=whatsnew">Изменения в этой версии</a></li>
+ </ul>
+ </div>
+ </td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<div id="bottomleft">
+<div id="bottomright"></div>
+</div>
+</div>
+</body>
+</html>
diff --git a/kmymoney2/html/home_tr.html b/kmymoney2/html/home_tr.html
new file mode 100644
index 0000000..275226d
--- /dev/null
+++ b/kmymoney2/html/home_tr.html
@@ -0,0 +1,57 @@
+<!--
+***************************************************************************************
+3/23/2005 KMyMoney Welcome Page
+Robert Wadley rob<at>robntina.fastmail.us
+David Wadley mail<at>davidwadley.com
+
+***************************************************************************************
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <title>Untitled Document</title>
+ <meta http-equiv="Content-Type"
+ content="text/html; charset=iso-8859-9">
+ <link href="welcome.css" rel="stylesheet" type="text/css">
+
+</head>
+<body>
+<!--"background_image", if enabled, displays an image in the background of this page.
+If you wish to use a background, un-comment the following line -->
+<img id="background_image" src="images/background.png" height="100%">
+<img id="KMyMoneyLogo" src="images/trans_logo.png">
+<h3 id="title">KMyMoney Uygulamasna Hogeldiniz</h3>
+<h4 id="subtitle">Kiisel Finans Uygulamas</h4>
+
+<div id="returnLink"><a href="/home"><img src="images/backarrow.png">Finansal zetim Sayfasna Git</a></div>
+<div id="topleft">
+<div id="topright"><img src="images/spacer.png"></div>
+<div id="rightborder">
+<table style="width: 100%;">
+ <tbody>
+ <tr>
+ <td></td>
+ <td style="height: 150px; width: 380px;">
+ <div id="welcomeMenu">
+ <ul>
+ <li><img src="images/filenew.png"><a href="/action?id=file_new">Yeni KMyMoney veri dosyas olutur</a></li>
+ <li><img src="images/kmymoneydata.png"><a href="/action?id=file_open">Bir KMyMoney veri dosyas kullan</a></li>
+ <li><img src="images/manual.png"><a href="/action?id=help_contents">KMyMoney kullanm klavuzu</a></li>
+ <li><img src="images/konqueror.png"><a href="http://kmymoney2.sf.net">KMyMoney websitesine git</a></li>
+ <li><img src="images/about_kde.png"><a href="http://forum.kde.org/viewforum.php?f=69">Get help from the KMyMoney community</a></li>
+ <li><img src="images/messagebox_info.png"><a href="/welcome?mode=whatsnew"> Bu srmdeki yenilikler sayfasna git</a></li>
+ </ul>
+ </div>
+ </td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<div id="bottomleft">
+<div id="bottomright"></div>
+</div>
+</div>
+</body>
+</html>
diff --git a/kmymoney2/html/images/Makefile.am b/kmymoney2/html/images/Makefile.am
new file mode 100644
index 0000000..94e4531
--- /dev/null
+++ b/kmymoney2/html/images/Makefile.am
@@ -0,0 +1,20 @@
+####### kdevelop will overwrite this part!!! (begin)##########
+
+KDE_OPTIONS = noautodist
+
+EXTRA_DIST = backarrow.png background.png bc.png bl.png bottomleft.png bottomright.png br.png center.png filenew.png kmymoneydata.png konqueror.png lc.png manual.png messagebox_info.png original-trans_logo.png rc.png rightborder.png spacer.png tc.png title-center.png title-left.png title-right.png tl.png topleft.png topright.png trans_logo.png tr.png spacer.gif shadow.png currencyflourish.png top-shadow.png arrow.png bg-texture.png about_kde.png
+
+LOCAL_DIR = kmymoney2/html/images
+
+install-data-local:
+ $(mkinstalldirs) $(DESTDIR)$(kde_datadir)/kmymoney2/html/images
+ for file in $(EXTRA_DIST); do \
+ $(INSTALL_DATA) $(srcdir)/$$file $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR); \
+ done
+
+uninstall-local:
+ for file in $(EXTRA_DIST); do \
+ rm -f $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR)/$$file; \
+ done
+
+####### kdevelop will overwrite this part!!! (end)############
diff --git a/kmymoney2/html/images/about_kde.png b/kmymoney2/html/images/about_kde.png
new file mode 100644
index 0000000..a0f2439
--- /dev/null
+++ b/kmymoney2/html/images/about_kde.png
Binary files differ
diff --git a/kmymoney2/html/images/arrow.png b/kmymoney2/html/images/arrow.png
new file mode 100644
index 0000000..aaa00d5
--- /dev/null
+++ b/kmymoney2/html/images/arrow.png
Binary files differ
diff --git a/kmymoney2/html/images/backarrow.png b/kmymoney2/html/images/backarrow.png
new file mode 100644
index 0000000..80c9703
--- /dev/null
+++ b/kmymoney2/html/images/backarrow.png
Binary files differ
diff --git a/kmymoney2/html/images/background.png b/kmymoney2/html/images/background.png
new file mode 100644
index 0000000..fec81ec
--- /dev/null
+++ b/kmymoney2/html/images/background.png
Binary files differ
diff --git a/kmymoney2/html/images/bc.png b/kmymoney2/html/images/bc.png
new file mode 100644
index 0000000..d2f1a11
--- /dev/null
+++ b/kmymoney2/html/images/bc.png
Binary files differ
diff --git a/kmymoney2/html/images/bg-texture.png b/kmymoney2/html/images/bg-texture.png
new file mode 100644
index 0000000..e71ad16
--- /dev/null
+++ b/kmymoney2/html/images/bg-texture.png
Binary files differ
diff --git a/kmymoney2/html/images/bl.png b/kmymoney2/html/images/bl.png
new file mode 100644
index 0000000..a84c1d6
--- /dev/null
+++ b/kmymoney2/html/images/bl.png
Binary files differ
diff --git a/kmymoney2/html/images/bottomleft.png b/kmymoney2/html/images/bottomleft.png
new file mode 100644
index 0000000..57c6c57
--- /dev/null
+++ b/kmymoney2/html/images/bottomleft.png
Binary files differ
diff --git a/kmymoney2/html/images/bottomright.png b/kmymoney2/html/images/bottomright.png
new file mode 100644
index 0000000..e35125b
--- /dev/null
+++ b/kmymoney2/html/images/bottomright.png
Binary files differ
diff --git a/kmymoney2/html/images/br.png b/kmymoney2/html/images/br.png
new file mode 100644
index 0000000..c1e7f51
--- /dev/null
+++ b/kmymoney2/html/images/br.png
Binary files differ
diff --git a/kmymoney2/html/images/center.png b/kmymoney2/html/images/center.png
new file mode 100644
index 0000000..fcf4a9a
--- /dev/null
+++ b/kmymoney2/html/images/center.png
Binary files differ
diff --git a/kmymoney2/html/images/currencyflourish.png b/kmymoney2/html/images/currencyflourish.png
new file mode 100644
index 0000000..2a7e924
--- /dev/null
+++ b/kmymoney2/html/images/currencyflourish.png
Binary files differ
diff --git a/kmymoney2/html/images/filenew.png b/kmymoney2/html/images/filenew.png
new file mode 100644
index 0000000..1da021f
--- /dev/null
+++ b/kmymoney2/html/images/filenew.png
Binary files differ
diff --git a/kmymoney2/html/images/kmymoneydata.png b/kmymoney2/html/images/kmymoneydata.png
new file mode 100644
index 0000000..bb3f937
--- /dev/null
+++ b/kmymoney2/html/images/kmymoneydata.png
Binary files differ
diff --git a/kmymoney2/html/images/konqueror.png b/kmymoney2/html/images/konqueror.png
new file mode 100644
index 0000000..fe7af79
--- /dev/null
+++ b/kmymoney2/html/images/konqueror.png
Binary files differ
diff --git a/kmymoney2/html/images/lc.png b/kmymoney2/html/images/lc.png
new file mode 100644
index 0000000..58a904c
--- /dev/null
+++ b/kmymoney2/html/images/lc.png
Binary files differ
diff --git a/kmymoney2/html/images/manual.png b/kmymoney2/html/images/manual.png
new file mode 100644
index 0000000..04b3070
--- /dev/null
+++ b/kmymoney2/html/images/manual.png
Binary files differ
diff --git a/kmymoney2/html/images/messagebox_info.png b/kmymoney2/html/images/messagebox_info.png
new file mode 100644
index 0000000..6e21f06
--- /dev/null
+++ b/kmymoney2/html/images/messagebox_info.png
Binary files differ
diff --git a/kmymoney2/html/images/original-trans_logo.png b/kmymoney2/html/images/original-trans_logo.png
new file mode 100644
index 0000000..25ea91f
--- /dev/null
+++ b/kmymoney2/html/images/original-trans_logo.png
Binary files differ
diff --git a/kmymoney2/html/images/rc.png b/kmymoney2/html/images/rc.png
new file mode 100644
index 0000000..198aff0
--- /dev/null
+++ b/kmymoney2/html/images/rc.png
Binary files differ
diff --git a/kmymoney2/html/images/rightborder.png b/kmymoney2/html/images/rightborder.png
new file mode 100644
index 0000000..fd29307
--- /dev/null
+++ b/kmymoney2/html/images/rightborder.png
Binary files differ
diff --git a/kmymoney2/html/images/shadow.png b/kmymoney2/html/images/shadow.png
new file mode 100644
index 0000000..5e6ff3d
--- /dev/null
+++ b/kmymoney2/html/images/shadow.png
Binary files differ
diff --git a/kmymoney2/html/images/spacer.gif b/kmymoney2/html/images/spacer.gif
new file mode 100644
index 0000000..fc25609
--- /dev/null
+++ b/kmymoney2/html/images/spacer.gif
Binary files differ
diff --git a/kmymoney2/html/images/spacer.png b/kmymoney2/html/images/spacer.png
new file mode 100644
index 0000000..8bcb60d
--- /dev/null
+++ b/kmymoney2/html/images/spacer.png
Binary files differ
diff --git a/kmymoney2/html/images/tc.png b/kmymoney2/html/images/tc.png
new file mode 100644
index 0000000..a93334c
--- /dev/null
+++ b/kmymoney2/html/images/tc.png
Binary files differ
diff --git a/kmymoney2/html/images/title-center.png b/kmymoney2/html/images/title-center.png
new file mode 100644
index 0000000..3b3cec9
--- /dev/null
+++ b/kmymoney2/html/images/title-center.png
Binary files differ
diff --git a/kmymoney2/html/images/title-left.png b/kmymoney2/html/images/title-left.png
new file mode 100644
index 0000000..8c20d8a
--- /dev/null
+++ b/kmymoney2/html/images/title-left.png
Binary files differ
diff --git a/kmymoney2/html/images/title-right.png b/kmymoney2/html/images/title-right.png
new file mode 100644
index 0000000..3938c54
--- /dev/null
+++ b/kmymoney2/html/images/title-right.png
Binary files differ
diff --git a/kmymoney2/html/images/tl.png b/kmymoney2/html/images/tl.png
new file mode 100644
index 0000000..3e0156c
--- /dev/null
+++ b/kmymoney2/html/images/tl.png
Binary files differ
diff --git a/kmymoney2/html/images/top-shadow.png b/kmymoney2/html/images/top-shadow.png
new file mode 100644
index 0000000..b59c952
--- /dev/null
+++ b/kmymoney2/html/images/top-shadow.png
Binary files differ
diff --git a/kmymoney2/html/images/topleft.png b/kmymoney2/html/images/topleft.png
new file mode 100644
index 0000000..a15cf15
--- /dev/null
+++ b/kmymoney2/html/images/topleft.png
Binary files differ
diff --git a/kmymoney2/html/images/topright.png b/kmymoney2/html/images/topright.png
new file mode 100644
index 0000000..9ad46c9
--- /dev/null
+++ b/kmymoney2/html/images/topright.png
Binary files differ
diff --git a/kmymoney2/html/images/tr.png b/kmymoney2/html/images/tr.png
new file mode 100644
index 0000000..fa73979
--- /dev/null
+++ b/kmymoney2/html/images/tr.png
Binary files differ
diff --git a/kmymoney2/html/images/trans_logo.png b/kmymoney2/html/images/trans_logo.png
new file mode 100644
index 0000000..0d73e2c
--- /dev/null
+++ b/kmymoney2/html/images/trans_logo.png
Binary files differ
diff --git a/kmymoney2/html/kmymoney2.css b/kmymoney2/html/kmymoney2.css
new file mode 100644
index 0000000..a18dfde
--- /dev/null
+++ b/kmymoney2/html/kmymoney2.css
@@ -0,0 +1,370 @@
+
+@media screen {
+
+ A.el { text-decoration: none; }
+ A.elRef { font-weight: bold }
+ A.code { text-decoration: none; font-weight: normal; color: #4C59A6 }
+ A.codeRef { font-weight: normal; color: #4C59A6 }
+ A:hover { text-decoration: none; font-weight: normal; color: #4C59A6 }
+
+ body {
+ background-color: Window;
+ color:WindowText;
+ font-family: verdana, arial, sans-serif;
+ }
+
+ .setcolor { /*sets color of some spacing elements (such as the column between assets and liabilities) to the desired color*/
+ background-color:Window;
+}
+
+body#summaryview { /* set body attributes that affect only the summary view (and not reports) */
+ background: url(./images/bg-texture.png) repeat fixed;
+}
+
+
+#vieweffect { /* creates a dropshadow at the top of the view creating a resessed effect */
+ background: url(./images/top-shadow.png) repeat-x top;
+ margin:0px -10px 0px -10px;
+ position:fixed;
+ top:-5px;
+ width:100%;
+ height:20px;
+ z-index:50;
+}
+
+ #summarytitle { /* "your financial summary" title on summary page */
+ display:block;
+ margin-bottom:6px;
+ text-align: right;
+ color:WindowText;
+ Font-size:20px;
+ padding:10px 15px 15px 0;
+ }
+
+ .shadow {/*wraps .displayblock -can be used for special decorative effects like a drop shadow */
+ background: url(./images/shadow.png) no-repeat bottom right;
+ margin:0px 5px 30px 15px;
+ }
+
+ .displayblock {/*ties together a summary header and a table into a single content block*/
+ display:block;
+ position:relative;
+ top:-6px;
+ left:-6px;
+ background-color: Window;
+ border-right: 1px solid gray;
+ border-bottom: 1px solid gray;
+ border-left: 1px solid lightgrey;
+/*border:1px solid WindowText;*/
+ padding: 0px;
+ }
+
+ .summaryheader { /*section labels over each table in the financial summary*/
+ background: HighLight url(./images/currencyflourish.png) no-repeat bottom right;
+ color:HighLightText;
+ Font-size:1.2em;
+ font-weight:bold;
+ padding:5px 10px;
+ }
+
+ .summarytable { /*the tables in the financial summary */
+ padding:5px;
+ }
+
+ .summarytable td { /*style <td> in the tables in the financial summary */
+ padding:5px 10px;
+ border-left: medium solid Window;
+ border-right: medium solid window;
+ color:WindowText;
+ }
+
+ .itemtitle { /*<tr> -additional label for table headers. example "Assets" and "Liabilities"*/
+ color:HighLight;
+ Font-weight:bold;
+ }
+
+ .itemtitle td { /*<td> table data cells related to .itemtitle*/
+ padding:0px 10px 0px 10px;
+ border-left: 0px;
+ border-right: 0px;
+ font-size:1.2em;
+ }
+
+ .item { /*<tr> -item labels (table headers) for sections in the financial summary */
+ font-weight:bold;
+ color:WindowText;
+ }
+
+ .item td { /*<td> table data cells related to .item*/
+ border-left: 0px;
+ border-right: 0px;
+ border-bottom:3px solid WindowText;
+ }
+
+ .warningtitle { /*<tr> -set warning background color -overdue payments -items of this class also belong to the class called "itemtitle"*/
+ color:red;/*set programatically, not by css*/
+ background-color: infobackground;
+ }
+
+ .warning { /*<tr> -set warning background color -items of this class also belong to the class called "item"*/
+ background-color: infobackground;
+ }
+
+ th.left, td.left {/*rule to align table header and table data cells*/
+ text-align: left;
+ }
+
+ th.right, td.right {/*rule to align table header and table data cells*/
+ text-align: right;
+ }
+
+ th.center, td.center {/*rule to align table header and table data cells*/
+ text-align: center;
+ }
+
+ .gap { /* used for spacing in financial summary and reports if needed -match to background color of body if you don't want it to show.*/
+
+ }
+
+/***********************************************************/
+/* These affect only the reports found in the reports view */
+
+ h2.report { /* header -title on report pages */
+ font-size: 18px;
+ font-family: verdana, arial, sans-serif;
+ margin-right: 10px;
+ margin-left: 10px;
+ margin-top: 10px;
+ margin-bottom: 10px;
+ text-align: center;
+ color:WindowText;
+ }
+
+ .itemheader { /*column labels in reports */
+ font-family: verdana, arial, helvetica, sans-serif;
+ font-weight: bold;
+ background-color: Window;
+ color: WindowText;
+ padding-top: 5px;
+ padding-left: 20px;
+ padding-bottom: 5px;
+ }
+
+ div.subtitle { /*subtitle of each report page*/
+ text-align: center;
+ color:WindowText;
+ }
+
+ table.report {/*center the report*/
+ margin-left:auto;
+ margin-right:auto;
+ }
+
+ table.report th {/*styles table header cells*/
+ padding: 0.5em 0.5em;
+ }
+
+ table.report td {/*styles table cells- but not background color*/
+ font-size: 9pt;
+ padding: 0 0.5em;
+ text-align: right;
+ }
+
+ table.report td.leftborder {/*does not appear to be in use*/
+ border-left: 1px solid;
+ }
+
+ table.report td.left {/*far left column*/
+ text-align: left;
+ }
+
+ table.report td.left0 {/*does not appear to be in use*/
+ text-align: left;
+ }
+
+ table.report td.left1 {/*does not appear to be in use*/
+ text-align: left;
+ text-indent: 1.0em;
+ }
+
+ table.report td.left2 {/*does not appear to be in use*/
+ text-align: left;
+ text-indent: 2.0em;
+ }
+
+ table.report tr#subtotal td {/*line separating row groups*/
+ border-bottom: 1px solid black;
+ font-weight: normal;
+ }
+
+table.report tr#solo td {/*line separating rows that are not groups*/
+ border-bottom: 1px solid black;
+ font-weight: normal;
+ }
+
+table.report tr#topparent td.left {/*parent label for each row group containing children*/
+ font-weight: bold;
+ }
+
+ table.report tr#solo td.left {/*label for each row group _not_ containing children*/
+ font-weight: bold;
+ }
+
+ table.report tr.sectionheader td { /* label (title) of each section -subtotals -for example 'Income' and 'Expenses' */
+ font-weight: bold;
+ padding: 0.5em 0.5em 0 0.5em;
+ color:WindowText;
+ }
+
+ table.report tr.sectionfooter td { /* totals for each section -subtotals */
+ border-top: 1px solid black;
+ padding: 0 0.5em 0.5em 0.5em;
+ color:WindowText;
+ }
+
+ table.report tr.reportfooter td { /* "Grand Total" totals" */
+ border-bottom: 1px solid black;
+ border-top: 1px solid black;
+ padding: 0 0.5em 0 0.5em;
+ color:WindowText;
+ }
+
+ table.report tr.reportfooter td.left { /* "Grand Total" label in the left column */
+ font-weight: bold;
+ color:WindowText;
+ }
+
+ table.report tr.spacer td {/*used to make a table row act as a spacer when needed*/
+ font-size: 4pt;
+ padding: 1em 0;
+ }
+}
+
+@media print {
+
+ body { background: white; margin: 0; padding: 0 }
+ body { font-family: helvetica, arial; font-size: 10pt }
+ td,th { font-family: helvetica, arial; font-size: 9pt }
+
+ thead { display: table-header-group }
+ tbody { display: table-row-group }
+ tfoot { display: table-footer-group }
+ tr { page-break-inside: avoid }
+
+ div.gap { display: none }
+ .spacer { display: none }
+
+ h2.report,
+ div.subtitle { margin: 6pt; padding: 0; text-align: center }
+ div.subtitle { margin-bottom: 18pt }
+
+ table { border-collapse: separate; border-spacing: 1px; }
+ table { margin-left: auto; margin-right: auto }
+ td { vertical-align: baseline }
+
+ table.report {/*center the report*/
+ margin-left:auto;
+ margin-right:auto;
+ }
+
+ table.report th {/*styles table header cells*/
+ padding: 0.5em 0.5em;
+ }
+
+ table.report td {/*styles table cells- but not background color*/
+ text-align: right;
+ }
+ table.report td.left {/*far left column*/
+ text-align: left;
+ }
+
+ table.report td.left0 {/*does not appear to be in use*/
+ text-align: left;
+ }
+
+ table.report td.left1 {/*does not appear to be in use*/
+ text-align: left;
+ text-indent: 1.0em;
+ }
+
+ table.report td.left2 {/*does not appear to be in use*/
+ text-align: left;
+ text-indent: 2.0em;
+ }
+
+ table.report tr#subtotal td {/*line separating row groups*/
+ border-bottom: 1px solid black;
+ font-weight: normal;
+ }
+
+table.report tr#solo td {/*line separating rows that are not groups*/
+ border-bottom: 1px solid black;
+ font-weight: normal;
+ }
+
+table.report tr#topparent td.left {/*parent label for each row group containing children*/
+ font-weight: bold;
+ }
+
+ table.report tr#solo td.left {/*label for each row group _not_ containing children*/
+ font-weight: bold;
+ }
+
+ th { border-bottom: 1pt solid black }
+/* th { background: #cccccc } */
+ tr.item0 td { background: #f2f2ff }
+ tr.item1 td { background: #f2fff2 }
+ tr.row-even td { background: #f2f2ff }
+ tr.row-odd td { background: #f2fff2 }
+
+ tr.item0 td,
+ tr.item1 td,
+ tr.itemA td,
+ tr.itemZ td { font-style: italic }
+
+ td.left0,
+ td.left1,
+ td.left2,
+ td.left { text-align: left }
+ td.center { text-align: center }
+ td.right { text-align: right }
+ td, th { padding: 2pt 4pt }
+
+ tr.sectionheader td.left,
+ tr.sectionfooter td.left,
+ tr.sectionheader td.left0,
+ tr.sectionfooter td.left0 {
+ padding-top: 12pt; font-size: 1.1em; font-weight: bold
+ }
+
+ tr.sectionheader td.left1,
+ tr.sectionfooter td.left1,
+ tr.sectionheader td.left2,
+ tr.sectionfooter td.left2 {
+ padding-top: 6pt; font-size: 0.9em; font-weight: bold
+ }
+
+ tr.reportfooter td.left {
+ padding-top: 12pt; font-size: 1.1em; font-weight: bold
+ }
+
+ #subtotal { font-style: italic }
+/* #topparent td, #solo td { border-top: 1px solid gray } */
+}
+
+tr.item0 td,tr.item1 td,tr.itemA td,tr.itemZ td {
+ font-style: italic;
+ }
+
+tr.itemA td {
+ border-bottom: 1px dotted gray;
+ }
+
+tr.itemZ td {
+ border-top: 1px dotted gray;
+ }
+
+.item0 .value,.item1 .value {
+ padding-right: 2em;
+ }
+
diff --git a/kmymoney2/html/welcome.css b/kmymoney2/html/welcome.css
new file mode 100644
index 0000000..aa0c7c4
--- /dev/null
+++ b/kmymoney2/html/welcome.css
@@ -0,0 +1,171 @@
+/*******************************************************************
+3/23/2005 KMyMoney Welcome Page
+Robert Wadley rob<at>robntina.fastmail.us
+David Wadley mail<at>davidwadley.com
+********************************************************************/
+
+
+body {
+ background-color: highlight;
+ margin-top:100px;
+ }
+
+
+#background_image {
+ z-index: -10;
+ position:absolute;
+ left:0px;
+ top:0px;
+ width:100%;
+ }
+
+
+#KMyMoneyLogo {
+ position:absolute;
+ top:12px;
+ left:25px;
+ z-index: 10;
+ }
+
+/*line of text under logo("Personal Finance Software")*/
+
+#tagline {
+ position:absolute;
+ top:55px;
+ left:25px;
+ font-family:bitstream vera sans, verdana, sans;
+ font-size:8px;
+ color: highlighttext;
+ }
+
+/*("Welcome to KMyMoney","What's New in...")*/
+
+#title {
+ font-family:bitstream vera sans, verdana, sans;
+ line-height:1em;
+ font-size: 20px;
+ position:absolute;
+ top:-3px;
+ right:25px;
+ color:highlighttext;
+ }
+
+#subtitle {
+ font-family:bitstream vera sans, verdana, sans;
+ line-height:1em;
+ font-size: 10px;
+ position:absolute;
+ top:30px;
+ right:25px;
+ color:highlighttext;
+ }
+
+
+/*link under title, "Goto My Financial Summary"etc.*/
+
+#summaryLink, #returnLink {
+ position:absolute;
+ top:75px;
+ left:6%;
+ color:highlighttext;
+ }
+
+
+#returnLink img {
+ vertical-align:middle;
+ position:relative;
+ margin-right: 5px;
+ top:-3px;
+ }
+
+
+#summaryLink a, #returnLink a {
+ color:highlighttext;
+ text-decoration:none;
+ }
+
+
+#summaryLink a:hover, #returnLink a:hover {
+ color:highlighttext;
+ text-decoration:underline;
+ }
+
+
+
+/*start content box frame*/
+
+#topleft {
+ background:
+url(./images/topleft.png) no-repeat left top;
+ width:87%;
+ margin-left:5%;
+ margin-right:5%;
+
+ }
+#topright {
+ background:url(./images/topright.png)
+ top right no-repeat;
+ position: relative;
+ right:-22px;
+ padding-top: 20px;
+ }
+
+#rightborder {
+ background: url(./images/rightborder.png)
+ top right repeat-y;
+ position: relative;
+ right:-22px;
+ padding-right: 22px;
+ margin-bottom: -91px;/*appears to adjust margin below content*/
+ }
+
+#bottomleft {
+ background:
+ url(./images/bottomleft.png)
+ bottom left no-repeat;
+ position: relative;
+ top: 91px;
+padding-top: 0px;
+
+ }
+
+#bottomright {
+ background: url(./images/bottomright.png)
+ bottom right no-repeat;
+ position: relative;
+ right:-22px;
+ padding-top: 91px;
+ }
+
+/* end content box frame */
+
+
+/* list of links on welcome page */
+
+#welcomeMenu ul {
+ list-style-type:none;
+ /*removes default bullets*/
+ }
+
+
+#welcomeMenu li {
+ margin-bottom: 10px;
+ /*adds space between lines*/ color: black;
+ }
+
+
+#welcomeMenu span:hover {
+ text-decoration:underline;
+ /*sets hover attributes*/
+ }
+
+/* replacement bullets */
+
+#welcomeMenu img {
+ vertical-align:middle;
+ position:relative;
+ margin-right: 5px;
+ top: -2px;
+ }
+
+ \ No newline at end of file
diff --git a/kmymoney2/html/whats_new.html b/kmymoney2/html/whats_new.html
new file mode 100644
index 0000000..4aa393c
--- /dev/null
+++ b/kmymoney2/html/whats_new.html
@@ -0,0 +1,97 @@
+<!--
+***************************************************************************************
+3/23/2005 KMyMoney What's New Page
+Robert Wadley rob<at>robntina.fastmail.us
+David Wadley mail<at>davidwadley.com
+
+***************************************************************************************
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Untitled Document</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<link href="welcome.css" rel="stylesheet" type="text/css">
+</head>
+
+<body>
+<!--"background_image", if enabled, displays an image in the background of this page.
+If you wish to use a background, un-comment the following line -->
+<img id="background_image" src="images/background.png" height="100%">
+<img id="KMyMoneyLogo" src="images/trans_logo.png">
+ <h3 id="title">What's new in KMyMoney 1.0</h3>
+ <!--p id="tagline">Personal Finance Software</p-->
+ <div id="returnLink"><img src="images/backarrow.png"><a href="/welcome">Return to the Welcome page</a></div>
+
+
+<div id="topleft">
+ <div id="topright"><img src="images/spacer.gif"></div>
+ <div id="rightborder"><table><tr><td>
+<!-- This is where the content should be put to show up inside the decorative frame-->
+<!-- Begin content -->
+
+
+<p>The KMyMoney development team is pleased to announce a major step forward for what has been described as "the BEST personal finance manager for FREE users". With over 3 years of development, this new stable release has a lot of new features and a refreshed user interface.</p>
+
+<h4>What's new since version 0.9.3:</h4>
+<ul>
+<li>A new look and feel, and a new set of icons</li>
+<li>Added investment price reports, investment moving average price</li>
+<li>Added GUI option for expert mode</li>
+<li>Improved scheduled occurrences support</li>
+<li>Improved support for CMake</li>
+<li>Improved text filter for transactions</li>
+<li>Improved charts look and feel</li>
+<li>Improved DB support and performance</li>
+<li>Improved QIF and OFX support</li>
+<li>Updated documentation</li>
+<li>Updated translations</li>
+<li>A lot of bug fixing and polishing rough edges to make this an outstanding release</li>
+</ul>
+
+<h4>What's new since version 0.8.9:</h4>
+<ul>
+<li>Home Page. Improved reports are available on the home page to give a quick glance on your financial situation</li>
+<li>Appearance. A refreshed home page and a new set of icons have been exclusively designed to celebrate the 1.0 release</li>
+<li>Budgets. A new budget feature allows you to specify your future expectations of income and expenditure, and then to compare your actual performance against these. You can use your historical data to have KMyMoney create a basic budget for you. Budget reports can be displayed as charts if desired. Monthly budget overruns can be displayed on your home page, but can be removed if you find it too depressing</li>
+<li>Forecasts. A forecast can be produced of the future balances of your critical accounts, based either on regular scheduled transactions or your historical data</li>
+<li>Reports. Forecast, Schedule Information, Account Information, Loan Information, Reconciliation, Cash Flow, Investment Price, and Investment Moving Average Price</li>
+<li>Charts. Many of the reports produced by KMyMoney may now be displayed in chart form. Line, bar, stacked bar, pie and ring charts are supported where appropriate</li>
+<li>Schedules. More flexible occurrence periods</li>
+<li>Importer. A totally re-written Quicken (QIF) file importer and an improved GnuCash file importer. Also added OFX support for money market accounts</li>
+<li>PGP encryption. Added support for more than one key</li>
+<li>Database. The optional use of a database for data storage is supported (MySQL, PostgreSQL and SQLite version 3 have been extensively tested)</li>
+<li>CMake. Added support for compilation and tests</li>
+<li>Translations. Added translations for Swedish, Simplified Chinese, Turkish, Romanian, and Finnish</li>
+</ul>
+
+<p>Many enhancements have been made to existing functionality, to improve your user experience. Among the foremost of these are the following:</p>
+
+<ul>
+<li>User interface. Several new options have been provided to enable you to configure KMyMoney to your personal requirements. Multiple user interface improvements</li>
+<li>Accounts. New 'wizards' have been produced to simplify the setting up of new accounts, and complicated situations such as loans and mortgages. One wizard in particular will guide first time users through the setting up of their new file, and template lists of frequently-used accounts and categories are supplied, often tailored to nationality. Defunct accounts may now be marked as closed, so that they no longer clutter up your screens, though they are still available for viewing if required. Allow creation of additional Equity accounts and editing of Equity transactions. Added hierarchy management to New Account wizard. Warning messages can be displayed if the balance on an account exceeds, or falls below, a given value</li>
+<li>Currencies. Added Euro support for Slovakia. Better support for multiple currencies</li>
+<li>Ledgers. The views of the various ledgers have been revamped to provide better performance, and more facilities for sorting and searching transactions, including a 'quick search' option. A new multiple transaction selection function will allow you to do some 'bulk' changing of transactions. A new, more comprehensive, transaction autofill facility, based on payee name, has been introduced</li>
+<li>Payees. Deletion of 'non-empty' payees and categories is now allowed, with the transactions being re-assigned as required</li>
+<li>Schedules. Changes have been made to simplify the entry and maintenance of your regular scheduled transactions. Allow direct editing and entering of schedules from Home page. Allow viewing and entering schedules on the Ledger View</li>
+<li>Reports. Improved text filter for transactions. Various fixes related to Loans, and Budget reports. Some new reports have been added, new levels of detail have been included, and many of them have also been made more configurable. There have also been a lot of fixes related to multi-currency reports. Improved calculation of returns and multiple currencies in investment reports</li>
+<li>Online update. If you use OFX or HBCI for online banking, your setup has been made easier, and a manual transaction matching facility should simplify reconciliation of your downloaded statements. There is support for new versions of AqBanking and libofx, providing more flexibility and reliability. Improved QIF and OFX support, with significant improvements to the OFX import process. Improvements and enhancements to matching and error handling, among others. Improved investment transaction and online update dialog</li>
+<li>Improved documentation and README files</li>
+<li>Updated translations for Spanish, Argentinian Spanish, Brazilian Portuguese, simplified Chinese, Czech, Dutch, French, Galician, German, Italian and Portuguese</li>
+<li>Lots of code cleanup</li>
+<li>A lot of bug fixing and polishing rough edges to make this an outstanding release</li>
+</ul>
+
+<p>Let us know what you think. We hope that you enjoy using this version of KMyMoney.</p> <p>Please let us know about any abnormal behavior in the program by selecting <a href="/action?id=help_report_bug">"Report bug..."</a> from the help menu or by sending an e-mail to the developers mailing list. <font color="blue"><a href="mailto:kmymoney2-developer@lists.sourceforge.net">kmymoney2-developer@lists.sourceforge.net</a></font></p>
+<p><div align="right">The KMyMoney Development Team</div></p>
+<!-- End content -->
+ </td></tr></table>
+ </div>
+ <div id="bottomleft"><div id="bottomright"></div>
+ </div>
+</div>
+<div style="margin-bottom: 65px"></div>
+</body>
+</html>
diff --git a/kmymoney2/html/whats_new_de.html b/kmymoney2/html/whats_new_de.html
new file mode 100644
index 0000000..c8bfc88
--- /dev/null
+++ b/kmymoney2/html/whats_new_de.html
@@ -0,0 +1,97 @@
+<!--
+*****************************************************************************
+3/23/2005 KMyMoney What's New Page
+Robert Wadley rob<at>robntina.fastmail.us
+David Wadley mail<at>davidwadley.com
+Thomas Baumgart ipwizard<at>users.sourceforge.net
+*****************************************************************************
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Untitled Document</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link href="welcome.css" rel="stylesheet" type="text/css">
+</head>
+
+<body>
+<!--"background_image", if enabled, displays an image in the background of this page.
+If you wish to use a background, un-comment the following line -->
+<img id="background_image" src="images/background.png" height="100%">
+<img id="KMyMoneyLogo" src="images/trans_logo.png">
+ <h3 id="title" style="font-size: 20px;">Was ist neu in diesem Release</h3>
+ <!-- <p id="tagline">Pers&ouml;nliche Finanzmanagement Software</p> -->
+ <div id="returnLink"><a href="/welcome"><img src="images/backarrow.png">Zurück zur Startseite</a></div>
+
+
+<div id="topleft">
+ <div id="topright"><img src="images/spacer.gif"></div>
+ <div id="rightborder"><table><tr><td>
+<!-- This is where the content should be put to show up inside the decorative frame-->
+<!-- Begin content -->
+
+
+<p>Das KMyMoney Entwicklerteam ist erfreut, einen Meilenstein in der Entwicklung des als "Bester persönlicher Finanzmanager für freie Benutzer" bezeichneten Programmes zu präsentieren. Nach 3 Jahren Entwicklungszeit hat diese Version viele neue Funktionen, eine überarbeitete Benutzerschnittstelle.</p>
+
+<h4>Was ist neu seit 0.9.3:</h4>
+<ul>
+<li>Neue Benutzerschnittstelle und neue Icons</li>
+<li>Neue Investmentberichte für Kurshistorie und investment moving average price</li>
+<li>GUI option für Experten Modus</li>
+<li>Überarbeitete Auswahl von Zahlungswiederholungen</li>
+<li>Überarbeitete Unterstützung von CMake</li>
+<li>Überarbeitete Buchungsfilter</li>
+<li>Überarbeitete Berichtsgrafiken</li>
+<li>Verbesserte und performantere Datenbank Unterstützung</li>
+<li>Verbesserte Unterstützung für QIF und OFX Import</li>
+<li>Aktualisierte Dokumentation</li>
+<li>Aktualisierte Übersetzungen</li>
+<li>Viele Fehlerkorrekturen und Verbesserungen um ein ultimatives Release zu präsentieren</li>
+</ul>
+
+<h4>Was ist neu seit 0.8.9:</h4>
+<ul>
+<li>Startseite. Improved reports are available on the home page to give a quick glance on your financial situation</li>
+<li>Appearance. A refreshed home page and a new set of icons have been exclusively designed to celebrate the 1.0 release</li>
+<li>Budgets. A new budget feature allows you to specify your future expectations of income and expenditure, and then to compare your actual performance against these. You can use your historical data to have KMyMoney create a basic budget for you. Budget reports can be displayed as charts if desired. Monthly budget overruns can be displayed on your home page, but can be removed if you find it too depressing</li>
+<li>Forecasts. A forecast can be produced of the future balances of your critical accounts, based either on regular scheduled transactions or your historical data</li>
+<li>Reports. Forecast, Schedule Information, Account Information, Loan Information, Reconciliation, Cash Flow, Investment Price, and Investment Moving Average Price</li>
+<li>Charts. Many of the reports produced by KMyMoney may now be displayed in chart form. Line, bar, stacked bar, pie and ring charts are supported where appropriate</li>
+<li>Schedules. More flexible occurrence periods</li>
+<li>Importer. A totally re-written Quicken (QIF) file importer and an improved GnuCash file importer. Also added OFX support for money market accounts</li>
+<li>PGP encryption. Added support for more than one key</li>
+<li>Database. The optional use of a database for data storage is supported (MySQL, PostgreSQL and SQLite version 3 have been extensively tested)</li>
+<li>CMake. Added support for compilation and tests</li>
+<li>Translations. Added translations for Swedish, Simplified Chinese, Turkish, Romanian, and Finnish</li>
+</ul>
+
+<p>Many enhancements have been made to existing functionality, to improve your user experience. Among the foremost of these are the following:</p>
+
+<ul>
+<li>User interface. Several new options have been provided to enable you to configure KMyMoney to your personal requirements. Multiple user interface improvements</li>
+<li>Accounts. New 'wizards' have been produced to simplify the setting up of new accounts, and complicated situations such as loans and mortgages. One wizard in particular will guide first time users through the setting up of their new file, and template lists of frequently-used accounts and categories are supplied, often tailored to nationality. Defunct accounts may now be marked as closed, so that they no longer clutter up your screens, though they are still available for viewing if required. Allow creation of additional Equity accounts and editing of Equity transactions. Added hierarchy management to New Account wizard. Warning messages can be displayed if the balance on an account exceeds, or falls below, a given value</li>
+<li>Currencies. Added Euro support for Slovakia. Better support for multiple currencies</li>
+<li>Ledgers. The views of the various ledgers have been revamped to provide better performance, and more facilities for sorting and searching transactions, including a 'quick search' option. A new multiple transaction selection function will allow you to do some 'bulk' changing of transactions. A new, more comprehensive, transaction autofill facility, based on payee name, has been introduced</li>
+<li>Payees. Deletion of 'non-empty' payees and categories is now allowed, with the transactions being re-assigned as required</li>
+<li>Schedules. Changes have been made to simplify the entry and maintenance of your regular scheduled transactions. Allow direct editing and entering of schedules from Home page. Allow viewing and entering schedules on the Ledger View</li>
+<li>Reports. Improved text filter for transactions. Various fixes related to Loans, and Budget reports. Some new reports have been added, new levels of detail have been included, and many of them have also been made more configurable. There have also been a lot of fixes related to multi-currency reports. Improved calculation of returns and multiple currencies in investment reports</li>
+<li>Online update. If you use OFX or HBCI for online banking, your setup has been made easier, and a manual transaction matching facility should simplify reconciliation of your downloaded statements. There is support for new versions of AqBanking and libofx, providing more flexibility and reliability. Improved QIF and OFX support, with significant improvements to the OFX import process. Improvements and enhancements to matching and error handling, among others. Improved investment transaction and online update dialog</li>
+<li>Improved documentation and README files</li>
+<li>Updated translations for Spanish, Argentinian Spanish, Brazilian Portuguese, simplified Chinese, Czech, Dutch, French, Galician, German, Italian and Portuguese</li>
+<li>Lots of code cleanup</li>
+<li>A lot of bug fixing and polishing rough edges to make this an outstanding release</li>
+</ul>
+
+<p>Let us know what you think. We hope that you enjoy using this version of KMyMoney.</p> <p>Please let us know about any abnormal behavior in the program by selecting <a href="/action?id=help_report_bug">"Report bug..."</a> from the help menu or by sending an e-mail to the developers mailing list. <font color="blue"><a href="mailto:kmymoney2-developer@lists.sourceforge.net">kmymoney2-developer@lists.sourceforge.net</a></font></p>
+<p><div align="right">Das KMyMoney Entwickler Team</div></p>
+<!-- End content -->
+ </td></tr></table>
+ </div>
+ <div id="bottomleft"><div id="bottomright"></div>
+ </div>
+</div>
+<div style="margin-bottom: 65px"></div>
+</body>
+</html>
diff --git a/kmymoney2/html/whats_new_es.html b/kmymoney2/html/whats_new_es.html
new file mode 100644
index 0000000..0472fa9
--- /dev/null
+++ b/kmymoney2/html/whats_new_es.html
@@ -0,0 +1,99 @@
+<!--
+***************************************************************************************
+3/23/2005 KMyMoney What's New Page
+Robert Wadley rob<at>robntina.fastmail.us
+David Wadley mail<at>davidwadley.com
+
+***************************************************************************************
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Untitled Document</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<link href="welcome.css" rel="stylesheet" type="text/css">
+</head>
+
+<body>
+<!--"background_image", if enabled, displays an image in the background of this page.
+If you wish to use a background, un-comment the following line -->
+<!-- <img id="background_image" src="images/background.png" height="900 px"> -->
+<img id="background_image" src="images/background.png" height="100%">
+<img id="KMyMoneyLogo" src="images/trans_logo.png">
+ <h3 id="title" style="font-size: 20px;">Novedades en la versi&oacute;n 1.0</h3>
+ <!--p id="tagline">Software de Finanzas Personales</p -->
+ <div id="returnLink"><img src="images/backarrow.png"><a href="/welcome">Regresar a la p&aacute;gina de Bienvenida</a></div>
+
+
+<div id="topleft">
+ <div id="topright"><img src="images/spacer.gif"></div>
+ <div id="rightborder"><table><tr><td>
+<!-- This is where the content should be put to show up inside the decorative frame-->
+<!-- Begin content -->
+
+<p>El equipo de desarrollo de KMyMoney est&aacute; encantado de anunciar un gran avance para lo que ha sido descripto como "el MEJOR gestor de finanzas personales para usuarios LIBRES". Con m&aacute;s de 3 a&ntilde;os de desarrollo, esta nueva versi&oacute;n estable tiene gran cantidad de nuevas caracter&iacute;sticas y una interfaz de usuario renovada.</p>
+
+<h4>Novedades desde la versi&oacute;n 0.9.3:</h4>
+<ul>
+<li>Una nueva apariencia y un nuevo conjunto de iconos</li>
+<li>Nuevos reportes de precio y precio m&oacute;vil de inversiones</li>
+<li>Nueva opci&oacute;n gr&aacute;fica para configurar el modo experto</li>
+<li>Mejoras en las ocurrencias de los asientos planificados</li>
+<li>Mejoras en el soporte de CMake</li>
+<li>Mejoras en el filtro de texto de asientos</li>
+<li>Mejoras en la apariencia de los gr&aacute;ficos</li>
+<li>Mejor soporte y desempe&ntilde;o de la base de datos</li>
+<li>Mejor soporte de QIF y OFX</li>
+<li>Documentaci&oacute;n actualizada</li>
+<li>Traducciones actualizadas</li>
+<li>Gran cantidad de arreglos y pulido general, para que esta sea una excelente versi&oacute;n</li>
+</ul>
+
+<h4>Novedades desde la versi&oacute;n 0.8.9:</h4>
+<ul>
+<li>P&aacute;gina de inicio. Mejores reportes disponibles al inicio para brindarle una mirada rapida de su situaci&oacute;n financiera</li>
+<li>Apariencia. Una p&aacute;gina de inicio renovada y un nuevo conjunto de iconos han sido dise&ntilde;ados exclusivamente para la versi&oacute;n 1.0</li>
+<li>Presupuestos. Una nueva opci&oacute;n de presupuesto permite especificar sus expectativas de ingresos y gastos y luego comparar su desempe&ntilde;o real contra &eacute;stas. Puede utilizar sus datos hist&oacute;ricos para que KMyMoney cree un presupuesto b&aacute;sico para usted. Los reportes de presupuesto incluyen gráficos. Los excedentes del presupuesto mensual pueden mostrarse en la p&aacute;gina de inicio, pero pueden ocultarse si no son de su agrado</li>
+<li>Pron&oacute;stico. Se puede realizar un pron&oacute;stico de los saldos de sus cuentas cr&iacute;ticas, basado en sus planificaciones o en sus datos hist&oacute;ricos</li>
+<li>Reportes. Pron&oacute;stico, Informaci&oacute;n de Planificaciones, Informaci&oacute;n de Cuentas, Reconciliaci&oacute;n, Flujo de Caja, Precio de Inversiones y Precio Promedio M&oacute;vil de Inversiones</li>
+<li>Gr&aacute;ficos. Muchos de los reportes producidos por KMyMoney ahora pueden ser mostrados en forma gr&aacute;fica. Se pueden utilizar barras, barras apiladas, tortas gr&aacute;ficos de anillo.</li>
+<li>Planificaciones. Periodos de ocurrencia m&aacute;s flexibles</li>
+<li>Importador. Se reescribi&oacute; totalmente el importador de archivos de Quicken (QIF) y se mejoroacute; el importador de archivos de GNUCash. Se agreg&oacute; soporte de OFX para cuentas del mercado de divisas.</li>
+<li>Codificaci&oacute;n PGP. Se agreg&oacute; soporte para m&aacute;s de una clave</li>
+<li>Base de datos. Se soporta el uso opcional de una base de datos para almacenamiento (se han probado MySQL, PostgreSQL y SQLite)</li>
+<li>CMake. Se agreg&oacute; soporte para compilaci&oacute;n y pruebas</li>
+<li>Traducciones. Se agregaron traducciones para sueco, chino simplificado, rumano y fin&eacute;s</li>
+</ul>
+
+<p>Se han hecho muchas mejoras a la funcionalidad existente, para mejorar la experiencia del usuario. De ellas, las m&aacute;s importante son las siguientes:</p>
+
+<ul>
+<li>Interfaz de usuario. Varias nuevas opciones para permitirle configurar KMyMoney seg&uacute;n sus necesidades. M&uacute;ltiples mejoras a la interaz de usuario</li>
+<li>Cuentas. Nuevos asistentes para simplificar la configuraci&oacute;n de nuevas cuentas y situaciones complejas como pr&eacute;stamos y prendas. Un asistente que gu&iacute;a a los nuevos usuarios a trav&eacute;s de la configuraci&oacute;n de un archivo nuevo y las plantillas de cuentas y categor&iacute;as m&aacute;s usadas, a menudo adecuadas por nacionalidad. Las cuentas obsoletas ahora pueden ser marcadas como cerradas, para liberar espacio en las pantallas, aunque todav&iacute;a se pueden ver si es requerido. Se pueden crear cuentas patrimoniales adicionales y editar asientos de patrimonio. El asistente de nueva cuenta ahora tiene configuraci&oacute;n de jerarqu&iacute;a. Mensajes de advertencia avisan cuando el saldo de una cuenta est&aacute; por fuera de los valores fijados</li>
+<li>Divisas. Se agreg&oacute; el Euro para Eslovaquia. Mejor soporte para m&uacute;ltiples divisas</li>
+<li>Libros mayores. Vistas renovadas para brindar mejor desempe&ntilde;o y m&aacute;s facilidades para ordenar y buscar asientos, incluyendo opciones de b&uacute;squeda r&aacute;pida. La selecci&oacute;n m&uacute;ltiple de asientos permite la modificaci&oacute;n masiva de asientos. Nueva facilidad de autocompletado de asientos a partir del nombre del beneficiario</li>
+<li>Beneficiarios. Borrar beneficiarios y categor&iacute;as ahora est&aacute; soportado, reasignando los asientos</li>
+<li>Planificaciones. Se simplific&oacute; el ingreso y mantenimiento de las planificaciones. Se pueden ingresar y editar las planificaciones desde la p&aacute;gina de inicio y desde los libros mayores</li>
+<li>Reportes. Filtro de texto de asientos mejorado. Varios arreglos relacionados a reportes de pr&eacute;stamo y presupuesto. Se agregaron nuevos reportes, nuevos niveles de detalle y mayores opciones de configuraci&oacute;n de los reportes. Muchos arreglos en los reportes multidivisas. Mejor c&aacute;lculo de retorno y divisas en los reportes de inversiones</li>
+<li>Actualizaci&oacute;n online. Para aquellos que utilizan OFX &oacute; HBCI para banca online, la configuraci&oacute;n es m&aacute;s f&aacute;cil y la funcionalidad de conciliaci&oacute;n manual simplifica la reconciliaci&oacute;n de los resumenes. Hay soporte para nuevas versiones de AqBanking y libofx, brindando m&aacute;s flexibilidad y confiabilidad. Soporte de OFX y QIF mejorado, con mejoras significativas al proceso de importaci&oacute;n de OFX. Mejoras y agregados a la conciliaci&oacute;n y el manejo de errores, entre otros. Mejores cuadros de di&aacute;logo para asientos de inversiones y actualizaci&oacute;n online</li>
+<li>Mejores archivos de documentaci&oacute;n y README</li>
+<li>Traducciones actualizadas para espa&ntilde;ol, espa&ntilde;ol argentina, portugu&eacute;s brasileroo, chino simplificado, checo, holand&eacute;s, franc&eacute;s, gallego, alem&aacute;n, italiano y portugu&eacute;s</li>
+<li>Mucha limpieza de c&oacute;digo</li>
+<li>Gran cantidad de arreglos y pulido general, para que esta sea una excelente versi&oacute;n</li>
+</ul>
+
+
+<p>H&aacute;ganos saber lo que opina. Esperamos que disfrute esta versi&oacute;n de KMyMoney.</p> <p>Por favor, h&aacute;ganos saber de cualquier comportamiento anormal en el programa, seleccionando <a href="/action?id=help_report_bug">"Reportar error..."</a> del men&uacute; de Ayuda, o enviando un correo a la lista de distribuci&oacute;n de los desarrolladores. <font color="blue"><a href="mailto:kmymoney2-developer@lists.sourceforge.net">kmymoney2-developer@lists.sourceforge.net</a></font></p>
+<p><div align="right">El Equipo de Desarrollo de KMyMoney</div></p>
+<!-- End content -->
+ </td></tr></table>
+ </div>
+ <div id="bottomleft"><div id="bottomright"></div>
+ </div>
+</div>
+<div style="margin-bottom: 65px"></div>
+</body>
+</html>
+ \ No newline at end of file
diff --git a/kmymoney2/html/whats_new_fr.html b/kmymoney2/html/whats_new_fr.html
new file mode 100644
index 0000000..bd0f99a
--- /dev/null
+++ b/kmymoney2/html/whats_new_fr.html
@@ -0,0 +1,104 @@
+<!--
+***************************************************************************************
+3/23/2005 KMyMoney What's New Page
+Robert Wadley rob<at>robntina.fastmail.us
+David Wadley mail<at>davidwadley.com
+
+***************************************************************************************
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Untitled Document</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15">
+<link href="welcome.css" rel="stylesheet" type="text/css">
+</head>
+
+<body>
+<!--"background_image", if enabled, displays an image in the background of this page.
+If you wish to use a background, un-comment the following line -->
+<!-- <img id="background_image" src="images/background.png" height="900 px"> -->
+<img id="KMyMoneyLogo" src="images/trans_logo.png">
+ <h3 id="title" style="font-size: 20px;">Nouveauts de cette version</h3>
+ <p id="tagline">Logiciel de comptabilit personnelle</p>
+ <div id="returnLink"><img src="images/backarrow.png"><a href="/welcome">Retour vers la page d'accueil</a></div>
+
+
+<div id="topleft">
+ <div id="topright"><img src="images/spacer.gif"></div>
+ <div id="rightborder"><table><tr><td>
+<!-- This is where the content should be put to show up inside the decorative frame-->
+<!-- Begin content -->
+<p><b>Ceci est une version de dveloppement</b>, du coup certaines nouvelles fonctionalits peuvent ne pas tre pleinement fonctionnelles.
+De telles version sont aussi dcrites comme <em>'instables'</em>, il est du coup recommand de garder plusieurs sauvegardes de vos fichiers, y compris de celui en version 0.8. <br>Ceci tant dit, la plupart de dveloppeurs l'utilisent quotidiennement dj depuis bien longtemps!</p>
+
+
+<h4>Notes pour la version 0.9.2 : </h4>
+<ul>
+<LI>Amliorations des importations OFX et HBCI, qui incluent une correspondance automatique des oprations avec une gestion des erreurs, entre autres,</LI>
+<LI>Support de l'OFX pour les comptes boursiers,</LI>
+<LI>Support de plus d'une cl de criptage PGP,</LI>
+<LI>Nouveaux rapports : Prvisions, Oprations Futures, Information sur les Comptes, Factures et Rapprochement,</LI>
+<LI>Gestion de la hirarchie dans l'assistant "Nouveau Compte",</LI>
+<LI>Nouvelles traductions : sudois, chinois, turc et roumain,</LI>
+<LI>Un premier support de la compilation par CMake,</LI>
+
+<LI>Permettre la cration de nouveaux comptes d'actions et l'dition
+ des oprations sur les actions,</LI>
+<li>Permettre directement l'dition et la saisie des chances partir
+ de la page d'Accueil,</li>
+
+ <li>Permettre la saisie et l'dition des chances dans la vue Registre, </li>
+
+ <li>Amlioration de la page d'Accueil et ajout d'informations
+ au Rsum Financier et aux Paiements,</li>
+
+ <li>Amlioration du calcul des gains et sur les multiples monnaies dans
+ les rapports sur les investissements,</li>
+
+ <li>Amlioration des fentres de dialogues pour les oprations d'investissements
+ et la mise jour en ligne,</li>
+
+ <li>Amlioration de la mise en page de la vue Prvisions,</li>
+
+ <li>Amlioration de l'interface DB, qui est encore en phase de test,</li>
+
+ <li>Amlioration de la documentation et des fichiers README,</li>
+
+ <li>De nombreuses simplifications de code,</li>
+
+ <li>Mise jour des traductions : argentin, allemand, nerlandais,
+ portugais, brsilien, italien, franais, espagnol,</li>
+
+ <li>De nombreux bugs corrigs dans plusieurs domaines : catgories, recherche,
+ registre, rapports, navigation l'aide du clavier, calculatrice, budgets,
+ importation, chances, comptes, prts,</li>
+
+</ul>
+
+
+<p>
+Essayez les nouvelles fonctionnalits et faites-nous savoir ce que vous en pensez.
+Nous esprons que vous apprciez cette nouvelle version de KMyMoney.
+Bien que nous ayons fait de notre mieux pour supprimer les erreurs dans cette version, il
+se peut qu'il en reste.
+S'il vous plat, avertissez-nous de tout comportement anormal du programme en
+slectionnant <a href="/action?id=help_report_bug">"Rapporter un bug..."</a>
+dans le menu "Aide" ou en envoyant un mail la liste de diffusion des dveloppeurs :
+<font color="blue"><a href="mailto:kmymoney2-developer@lists.sourceforge.net">kmymoney2-developer@lists.sourceforge.net</a></font></p>
+
+<p><div align="right">L'quipe de dveloppement de KMyMoney</div></p>
+<!-- End content -->
+ </td></tr></table>
+ </div>
+ <div id="bottomleft"><div id="bottomright"></div>
+ </div>
+</div>
+<div style="margin-bottom: 65px"></div>
+</body>
+</html>
+
+
+
diff --git a/kmymoney2/html/whats_new_gl.html b/kmymoney2/html/whats_new_gl.html
new file mode 100644
index 0000000..e0d7e61
--- /dev/null
+++ b/kmymoney2/html/whats_new_gl.html
@@ -0,0 +1,65 @@
+<!--
+***************************************************************************************
+3/23/2005 KMyMoney What's New Page
+Robert Wadley rob<at>robntina.fastmail.us
+David Wadley mail<at>davidwadley.com
+
+***************************************************************************************
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Untitled Document</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<link href="welcome.css" rel="stylesheet" type="text/css">
+</head>
+
+<body>
+<!--"background_image", if enabled, displays an image in the background of this page.
+If you wish to use a background, un-comment the following line -->
+<!-- <img id="background_image" src="images/background.png" height="900 px"> -->
+<img id="KMyMoneyLogo" src="images/trans_logo.png">
+ <h3 id="title" style="font-size: 20px;">Novidades na versin 0.8</h3>
+ <p id="tagline">Software de Finanzas Persoais</p>
+ <div id="returnLink"><img src="images/backarrow.png"><a href="/welcome">Voltar pxina de benvida</a></div>
+
+
+<div id="topleft">
+ <div id="topright"><img src="images/spacer.gif"></div>
+ <div id="rightborder"><table><tr><td>
+<!-- This is where the content should be put to show up inside the decorative frame-->
+<!-- Begin content -->
+<p>Estivo-se traballando moi duro para facer esta versin mellor e mais fcil de usar no dia a dia.
+Foron engadidas multiples caractersticas novas e fixeron-se abundantes melloras. Confiamos en que goste
+do resultado.</p>
+
+<p>Estas son algunhas das novas caractersticas desta versin:</p>
+
+<ul>
+<LI>Investimentos </LI>
+<LI>Informes </LI>
+<LI>Multiples divisas </LI>
+<LI>Conversor de arquivos GnuCash </LI>
+<LI>Importazn OFX </LI>
+<LI>Web Connect</LI>
+<LI>Aspeito mellorado -incluindo novas iconas.</LI>
+<LI>Cifrado dos Arquivos de Dados </LI>
+<LI>Calculadora para a introduzn de importes </LI>
+<LI>Cotizazns online de Aczns e Divisas </LI>
+<LI>Recursos para xestionar o IVE </LI>
+<LI>Permite escreber plugins de importazn </LI>
+<LI>Formato de Arquivo &quot;Annimo&quot; para facilitar a depurazn de erros </LI>
+</ul>
+<p>Prove as novas caractersticas e faga-nos chegar a sua opinin. Esperamos que desfrute usando esta nova versin de KMyMoney. Apesar de que fixemos o posbel para eliminar os erros que pudese haber nesta versin, seguramente quedan alguns. Por favor, faga-nos saber calquer comportamento anormal no programa mediante a opzn <a href="/action?id=help_report_bug">"Informar de erro..."</a> do menu axuda ou enviando un e-mail lista de correo dos desenvolventes. <font color="blue"><a href="mailto:kmymoney2-developer@lists.sourceforge.net">kmymoney2-developer@lists.sourceforge.net</a></font></p>
+<p><div align="right">A Equipa de Desenvolvimento de KMyMoney</div></p>
+<!-- End content -->
+ </td></tr></table>
+ </div>
+ <div id="bottomleft"><div id="bottomright"></div>
+ </div>
+</div>
+<div style="margin-bottom: 65px"></div>
+</body>
+</html>
diff --git a/kmymoney2/html/whats_new_it.html b/kmymoney2/html/whats_new_it.html
new file mode 100644
index 0000000..5d03b11
--- /dev/null
+++ b/kmymoney2/html/whats_new_it.html
@@ -0,0 +1,97 @@
+<!--
+***************************************************************************************
+3/23/2005 KMyMoney What's New Page
+Robert Wadley rob<at>robntina.fastmail.us
+David Wadley mail<at>davidwadley.com
+
+***************************************************************************************
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Documento senza titolo</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<link href="welcome.css" rel="stylesheet" type="text/css">
+</head>
+
+<body>
+<!--"background_image", if enabled, displays an image in the background of this page.
+If you wish to use a background, un-comment the following line -->
+<img id="background_image" src="images/background.png" height="100%">
+<img id="KMyMoneyLogo" src="images/trans_logo.png">
+ <h3 id="title">Novit di KMyMoney 1.0</h3>
+ <!--p id="tagline">Personal Finance Software</p-->
+ <div id="returnLink"><img src="images/backarrow.png"><a href="/welcome">Ritorna alla pagina di benvenuto</a></div>
+
+
+<div id="topleft">
+ <div id="topright"><img src="images/spacer.gif"></div>
+ <div id="rightborder"><table><tr><td>
+<!-- This is where the content should be put to show up inside the decorative frame-->
+<!-- Begin content -->
+
+
+<p>Gli sviluppatori di KMyMoney ha il piacere di annunciare un passo importante verso ci che stato descritto come "il MIGLIORE gestore delle finanze personali per gli utenti LIBERI". Con oltre 3 anni di sviluppo, questa nuova versione ha numerose nuove funzionalit e un'interfaccia utente aggiornata.</p>
+
+<h4>Novit rispetto alla versione 0.9.3:</h4>
+<ul>
+<li>Un nuovo aspetto, con nuove icone</li>
+<li>Aggiunti i report dei prezzi d'investimento e della media mobile del prezzo d'investimento</li>
+<li>Aggiunta un'opzione all'interfaccia grafica per la modalit esperta</li>
+<li>Migliorato il supporto alle ricorrenze pianificate</li>
+<li>Migliorato il supporto a CMake</li>
+<li>Migliorato il filtro di testo per le transazioni</li>
+<li>Migliorato l'aspetto dei grafici</li>
+<li>Migliorato il supporto di database e prestazioni</li>
+<li>Migliorato il supporto QIF e OFX</li>
+<li>Documentazione aggiornata</li>
+<li>Traduzioni aggiornate</li>
+<li>Numerosi bug corretti ed eliminate alcune imprecisioni per regalarvi una versione eccezionale</li>
+</ul>
+
+<h4>Novit rispetto alla versione 0.8.9:</h4>
+<ul>
+<li>Pagina principale. Report migliorati sono disponibili nella pagina principale per fornire una rapida panoramica della situazione finanziaria</li>
+<li>Aspetto. Una pagina principale aggiornata e nuove icone disegnate esclusivamente per celebrare il rilascio della 1.0</li>
+<li>Budget. Una nuova funzionalit di budget consente di specificare le aspettative future di entrate e uscite, per poi confrontare i risultati attuali con tali previsioni. KMyMoney pu utilizzare i dati storici per generare un budget base al posto vostro. I report di budget possono essere visualizzati come grafici se lo si desidera. Gli sforamenti mensili di budget possono essere visualizzati nella pagina principale, ma possono essere rimossi se ritenuti deprimenti</li>
+<li>Previsioni. Pu essere prodotta una previsione dei bilanci futuri dei conti critici, basata su transazioni regolarmente pianificate o su dati storici</li>
+<li>Report. Previsione, Informazioni sulla pianificazione, Informazioni sul conto, Informazioni sul prestito, Riconciliazione, Contante, Prezzo d'investimento e Media mobile del prezzo d'investimento</li>
+<li>Grafici. Molti dei report prodotti da KMyMoney ora possono essere rappresentati sotto forma di grafico. Linee, barre, barre sovrapposte, torte e grafici ad anelli sono supportati nei casi appropriati</li>
+<li>Pianificazioni. Periodi di ricorrenza pi flessibili</li>
+<li>Importatore. Un importatore di file Quicken (QIF) completamente riscritto e un importatore migliorato di file GnuCash. Aggiunto anche il supporto OFX per i conti di mercato monetario</li>
+<li>Cifratura PGP. Aggiunto il supporto per pi di una chiave</li>
+<li>Database. L'impiego facoltativo di un database per conservare i dati supportato (MySQL, PostgreSQL e SQLite versione 3 sono stati ampiamente testati)</li>
+<li>CMake. Aggiunto il supporto per compilazione e test</li>
+<li>Traduzioni. Aggiunte traduzioni per Svedese, Cinese semplificato, Turco, Rumeno e Finlandese</li>
+</ul>
+
+<p>Molte modifiche sono state apportate alle funzionalit esistenti, per accrescere il livello di esperienza dell'utente. Tra le principali sono le seguenti:</p>
+
+<ul>
+<li>Interfaccia utente. Sono state fornite numerose nuove opzioni per consentire una configurazione di KMyMoney a seconda delle proprie necessit. Diversi miglioramenti dell'interfaccia utente</li>
+<li>Conti. Sono state create nuove 'procedure guidate' per semplificare la configurazione di nuovi conti, e operazioni complesse quali prestiti e mutui. Una procedura guidata in particolare assister i novizi nell'impostazione del nuovo file, e sono forniti elenchi di modelli di conto utilizzati di frequente e categorie, spesso adattati alla nazionalit. I conti cessati ora possono essere marcati come chiusi, per mantenere uno schermo pi ordinato, anche se saranno ancora visualizzabili su richiesta. Consente la creazione di conti di capitale aggiuntivi e la modifica delle transazioni di capitale. Aggiunta una gestione gerarchica alla procedura di creazione di un nuovo conto. Messaggi di avviso possono essere visualizzati se il bilancio di un conto eccede, o scende al di sotto, di un determinato valore</li>
+<li>Valute. Aggiunto il supporto all'Euro per la Slovacchia. Supporto migliorato in caso di valute multiple</li>
+<li>Libri mastro. Le viste dei diversi libri mastro sono state ridisegnate per fornire prestazioni migliori, e altri strumenti di ordinamento e ricerca delle transazioni, inclusa un'opzione di 'ricerca rapida'. Una nuova funzione di selezione di transazioni multiple consentir di effettuare alcune modifiche 'in massa' delle transazioni. Un nuovo strumento, pi completo, di completamento automatico delle transazioni, basato sul nome del creditore, stato introdotto</li>
+<li>Creditori. L'eliminazione di creditori 'non-vuoti' e di categorie ora permessa, con il conseguente riassegnamento delle transazioni</li>
+<li>Pianificazioni. Modifiche sono state apportate per semplificare l'inserimento e la gestione delle transazioni regolarmente pianificate. Consente la modifica diretta e l'inserimento di pianificazioni dalla pagina principale. Consente la visualizzazione e l'inserimento di pianificazioni nella vista Libro mastro</li>
+<li>Report. Filtro di testo migliorato per le transazioni. Diverse correzioni relative ai report Prestiti e Budget. Sono stati aggiunti alcuni nuovi report, nuovi livelli di dettaglio sono stati inclusi, e molti di essi sono stati resi maggiormente configurabili. Molte correzioni sono state apportate ai report a valuta multipla. Migliorato il calcolo di rendimento e valute multiple nei report d'investimento</li>
+<li>Aggiornamento in linea. Se utilizzate OFX o HBCI per l'online banking, la configurazione stata semplificata, e uno strumento di verifica manuale delle transazioni dovrebbe semplificare la riconciliazione degli estratti conto scaricati. Introdotto il supporto per le nuove versioni di AqBanking e libofx, che forniscono maggiore flessibilit e affidabilit. Migliorato il supporto QIF e OFX, con aggiornamenti significativi del processo di importazione OFX. Tra gli altri miglioramenti, il rilevamento e la gestione degli errori. Transazioni d'investimento migliorare e finestra di dialogo per l'aggiornamento in linea</li>
+<li>Migliorata la documentazione e i file README</li>
+<li>Traduzioni aggiornate per Spagnolo, Spagnolo argentino, Portoghese brasiliano, Cinese semplificato, Ceco, Olandese, Francese, Galiziano, Tedesco, Italiano e Portoghese</li>
+<li>Pulizia del codice</li>
+<li>Numerosi bug corretti ed eliminate alcune imprecisioni per regalarvi una versione eccezionale</li>
+</ul>
+
+<p>Fateci sapere cosa ne pensate. Speriamo che questa nuova versione di KMyMoney sia di vostro gradimento.</p> <p>Vi preghiamo di segnalarci qualsiasi comportamento anomalo del programma selezionando "Segnala un bug..." dal menu Aiuto o inviando un'email alla lista di distribuzione degli sviluppatori. <font color="blue"><a href="mailto:kmymoney2-developer@lists.sourceforge.net">kmymoney2-developer@lists.sourceforge.net</a></font></p>
+<p><div align="right">Gli sviluppatori di KMyMoney</div></p>
+<!-- End content -->
+ </td></tr></table>
+ </div>
+ <div id="bottomleft"><div id="bottomright"></div>
+ </div>
+</div>
+<div style="margin-bottom: 65px"></div>
+</body>
+</html>
diff --git a/kmymoney2/html/whats_new_nl.html b/kmymoney2/html/whats_new_nl.html
new file mode 100644
index 0000000..8701cba
--- /dev/null
+++ b/kmymoney2/html/whats_new_nl.html
@@ -0,0 +1,63 @@
+<!--
+***************************************************************************************
+3/23/2005 KMyMoney What's New Page
+Robert Wadley rob<at>robntina.fastmail.us
+David Wadley mail<at>davidwadley.com
+
+***************************************************************************************
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Untitled Document</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<link href="welcome.css" rel="stylesheet" type="text/css">
+</head>
+
+<body>
+<!--"background_image", if enabled, displays an image in the background of this page.
+If you wish to use a background, un-comment the following line -->
+<!-- <img id="background_image" src="images/background.png" height="900 px"> -->
+<img id="KMyMoneyLogo" src="images/trans_logo.png">
+ <h3 id="title" style="font-size: 20px;">Wat is nieuwe in deze versie</h3>
+ <p id="tagline">Persoonlijke Financi&euml;le Software</p>
+ <div id="returnLink"><img src="images/backarrow.png"><a href="/welcome">Ga terug naar de startpagina</a></div>
+
+
+<div id="topleft">
+ <div id="topright"><img src="images/spacer.gif"></div>
+ <div id="rightborder"><table><tr><td>
+<!-- This is where the content should be put to show up inside the decorative frame-->
+<!-- Begin content -->
+<p>Er is hard gewerkt om deze versie nog beter en makkelijker in het gebruik te maken. Er zijn vele nieuwe mogelijkheden en verbeteringen toegevoegd.
+Wij zijn er zeker van dat u blij zult zijn met deze nieuwe versie van KMyMoney.</p>
+
+<p>Een korte samenvatting van de nieuwe mogelijkheden in deze versie:</p>
+
+<ul>
+<LI>Investeringen </LI>
+<LI>Rapporten </LI>
+<LI>Gebruik van meerdere valuta </LI>
+<LI>GnuCash Bestands Converter </LI>
+<LI>OFX Importeer functie </LI>
+<LI>Internet Connectie </LI>
+<LI>Verbeterde look and feel -inclusief nieuwe iconen.</LI>
+<LI>Versleuteling van bestanden </LI>
+<LI>Rekenmachine widget bij het invoeren van getallen </LI>
+<LI>Online Koersen voor aandelen &amp; Valuta </LI>
+<LI>Ondersteuning voor BTW </LI>
+<LI>Mogelijkheid zelf importeer plugins te maken </LI>
+</ul>
+<p>Probeer de nieuwe mogelijkheden en laat ons weten wat u er van vindt. We hopen dat u veel plezier beleeft aan het gebruik van deze nieuwe versie van KMyMoney. Uiteraard hebben wij ons uiterste best gedaan alle fouten te vermijden in deze versie, het blijft echter mogelijk dat er toch iets niet goed gaat. Laat ons a.u.b. weten als er iets abnormaals gebeurt via <a href="/action?id=help_report_bug">"Bug rapporteren..."</a> in het help menu of door het zenden van een e-mail naar de ontwikkelaars via mailadres <font color="blue"><a href="mailto:kmymoney2-developer@lists.sourceforge.net">kmymoney2-developer@lists.sourceforge.net</a></font></p>
+<p><div align="right">Het KMyMoney Ontwikkel Team</div></p>
+<!-- End content -->
+ </td></tr></table>
+ </div>
+ <div id="bottomleft"><div id="bottomright"></div>
+ </div>
+</div>
+<div style="margin-bottom: 65px"></div>
+</body>
+</html>
diff --git a/kmymoney2/html/whats_new_pt_BR.html b/kmymoney2/html/whats_new_pt_BR.html
new file mode 100644
index 0000000..0ad86a4
--- /dev/null
+++ b/kmymoney2/html/whats_new_pt_BR.html
@@ -0,0 +1,98 @@
+<!--
+***************************************************************************************
+3/23/2005 KMyMoney What's New Page
+Robert Wadley rob<at>robntina.fastmail.us
+David Wadley mail<at>davidwadley.com
+
+***************************************************************************************
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>O que h de novo</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<link href="welcome.css" rel="stylesheet" type="text/css">
+</head>
+
+<body>
+<!--"background_image", if enabled, displays an image in the background of this page.
+If you wish to use a background, un-comment the following line -->
+<img id="background_image" src="images/background.png" height="100%">
+<img id="KMyMoneyLogo" src="images/trans_logo.png">
+ <h3 id="title">O que h de novo no KMyMoney 1.0</h3>
+ <!--p id="tagline">Personal Finance Software</p-->
+ <div id="returnLink"><img src="images/backarrow.png"><a href="/welcome">Retornar Pgina Inicial</a></div>
+
+
+<div id="topleft">
+ <div id="topright"><img src="images/spacer.gif"></div>
+ <div id="rightborder"><table><tr><td>
+<!-- This is where the content should be put to show up inside the decorative frame-->
+<!-- Begin content -->
+
+
+<p>A equipe de desenvolvimento do KMyMoney tem o prazor de anunciar um passo importante frente para o que tem sido descrito como "o MELHOR gerenciador de finanas pessoais para usurios LIVRES". Com mais de 3 anos de desenvolvimento, esta nova verso estvel possui diversos recursos novos e uma interface com o usurio renovada.</p>
+
+<h4>O que h de novo desde a verso 0.9.3:</h4>
+<ul>
+<li>Uma nova aparncia e um novo conjunto de cones</li>
+<li>Adicionado relatrios de cotao de investimentos e cotao mdia de investimentos</li>
+<li>Adicionado uma opo na interface para um modo avanado</li>
+<li>Melhorado o suporte a agendamentos</li>
+<li>Melhorado o suporte ao CMake</li>
+<li>Melhorado o filtro de texto para transaes</li>
+<li>Melhorada a aparncia dos grficos</li>
+<li>Melhorado o suporte e o desempenho ao acesso ao banco de dados</li>
+<li>Melhorado o suporte ao QIF e OFX</li>
+<li>Documentao atualizada</li>
+<li>Traduo atualizada</li>
+<li>Diversas correes de erros e polimento de arestas para tornar esta verso excelente</li>
+</ul>
+
+<h4>O que h de novo desde a verso 0.8.9:</h4>
+
+<ul>
+<li>Pgina Inicial. Relatrios melhorados esto disponveis na pgina inicial para fornecer uma rpida viso de sua situao financeira</li>
+<li>Aparncia. Uma pgina inicial renovada e um novo conjunto de cones foi exclusivamente desenhado para celebrar a verso 1.0</li>
+<li>Oramentos. Um novo recuro de oramento permite que voc especifique suas expectativas para rendimentos e gastos, e ento comparar seu desempenho atual em relao a estas expectativas. Voc pode usar seus dados de histrico para fazer com que o KMyMoney crie um oramento bsico para voc. Os relatrios de oramentos podem ser exibidos em sua pgina inicial, mas podem ser removidos se voc ach-los muito deprimentes</li>
+<li>Estimativas. Uma estimativa pode ser produzida para balanos futuros de suas contas crticas, baseadas seja nas transaes normais agendadas, seja nos dados do seu histrico</li>
+<li>Relatrios, Estimativas, Informaes de Agendamento, Informaes de Conta, Informaes de Emprstimos, Reconciliao, Fluxo de Caixa, Cotao de Investimento, e Tendncia de Cotao Mdia de Investimento</li>
+<li>Grficos. Muitos dos relatrios produzidos pelo KMyMoney podem agora ser exibidos na forma de grficos. Grficos tipo linha, barra, barra empilhada, pizza e anis so suportados quando apropriados</li>
+<li>Agendamentos. Perodos de ocorrncia mais flexveis</li>
+<li>Importao. Um filtro de importao totalmente re-escrito para o Quicken (QIF) e um filtro de importao melhorado para o GnuCash. Foi tambm adicionado suporte ao OFX para contas do mercado de aes</li>
+<li>Criptografia PGP. Adicionado suporte para mais de uma chave</li>
+<li>Banco de dados. O uso otimizado de um banco de dados para armazenamento de daods suportado (MySQL, PostgreSQL e SQLite na verso 3 foram extensivamente testados)</li>
+<li>CMake. Adicionado suporte para compilao e testes</li>
+<li>Tradues. Adicionado tradues para o Sueco, Chins Simplificado, Turco, Romeno e Finlands</li>
+</ul>
+
+<p>Muitas melhorias foram feitas nas funcionalidades existentes, de modo a melhorar a experincia do usurio. Dentre elas, as mais destacadas so as seguintes:</p>
+
+<ul>
+<li>Interface com o usurio. Diversas novas opes foram fornecidas para possibilitar que voc configure o KMyMoney para as suas preferncias pessoais. Melhorias na interface para mltiplos usurios</li>
+<li>Contas. Novos 'assistentes' foram produzidos para simplificar a configurao de contas novas, e situaes complicadas como emprstimos e hipotecas. Um assistente em particular guiar os usurios iniciantes atravs do processo de configurao de um novo arquivo, com uma lista de modelos das contas mais frequentemente usadas juntamente com categorias, frequentemente adequadas ao pas do usurio. Contas mortas podem agora serem marcadas como fechadas, de modo que elas no poluam mais sua tela, apesar de permanecerem disponveis para consulta caso necessrio. Permite a criao de contas de Participao nos Lucros adicionais e editar as transaes nesta conta. Adicionado o gerenciamento da hierarquia para o assistente de Nova Conta. Mensagens de alerta podem ser exibidas se o balano de uma conta exceder, ou ficar abaixo de um determinado valor</li>
+<li>Moedas. Adicionado o suporte ao Euro para a Eslovquia. Melhor suporte para mltiplas moedas</li>
+<li>Livros de registro. As vises dos diversos livros foram reformadas para fornecer melhor desempenho e mais facilidades para ordenao e busca de transaes, incluindo uma opo de 'busca rpida'. Uma nova funo de seleo mltipla de transaes permitir que voc realize algumas mudanas em 'lote' das transaes. Um novo e mais abrangente recurso de autocompletamento de transaes, baseado no nome do beneficirio, foi introduzido</li>
+<li>Beneficirios. Excluso de beneficirios e categorias 'no-vazias' no permitida, com as transaes sendo re-atribudas quando necessrio</li>
+<li>Agendamentos. Mudanas foram feitas para simplificar a entrada e manuteno de suas transaes agendadas regulares. Permite a edio direta e insero de agendamentos a partir da Pgina Inicial. Permite a visualizao e insero de agendamentos a partir da Viso do Livro de Registro</li>
+<li>Relatrios. Filtro de texto para transaes melhorado. Vrias correes relacionadas a Emprstimos e relatrios de Oramento. Alguns novos relatrios foram adicionados, novos nveis de detalhes foram includos e muitos deles tambm se tornaram mais personalizveis. Existem tambm diversas correes relacionadas com relatrios em mltiplas moedas. Melhorado o clculo do retorno em mltiplas moedas nos relatrios de investimentos</li>
+<li>Atualizao Online. Se voc usa o OFX ou o HBCI para banco online, sua configura~ao foi facilitada, e o recurso de correspondncia manual de transao deve simplificar a reconciliao dos extratos baixados. Melhoria do suporte ao QIF e OFX support, com melhorias significativas do processo de importao do OFX. Melhorias e novos recursos para correspondncia e manipulao de erros, dentre outros. Melhoria na janela de atualizao online de transaes de investimento</li>
+<li>Melhoria na documentao e no arquivo README</li>
+<li>Atualizao das tradues para o Espanhol, Espanhol da Argentina, Portugus do Brasil, Chins Simplificado, Tcheco, Holands, Francs, Galego, Alemo, Italiano e Portugus</li>
+<li>Limpeza do cdigo</li>
+<li>Diversas correes de erros e polimento de arestas para tornar esta verso excelente</li>
+</ul>
+
+<p>Diga-no o que voc acha. Ns esperamos que voc aprecie esta verso do KMyMoney.</p> <p>Por favor, informe-nos sobre qualquer comportamento anormal no programa selecionando a opo <a href="/action?id=help_report_bug">"Relatar falha..."</a> do menu de ajuda ou enviando um e-mail para a lista de correio dos desenvolvedores. <font color="blue"><a href="mailto:kmymoney2-developer@lists.sourceforge.net">kmymoney2-developer@lists.sourceforge.net</a></font></p>
+<p><div align="right">A Equipe de Desenvolvimento do KMyMoney</div></p>
+<!-- End content -->
+ </td></tr></table>
+ </div>
+ <div id="bottomleft"><div id="bottomright"></div>
+ </div>
+</div>
+<div style="margin-bottom: 65px"></div>
+</body>
+</html> \ No newline at end of file
diff --git a/kmymoney2/html/whats_new_ro.html b/kmymoney2/html/whats_new_ro.html
new file mode 100644
index 0000000..61ecb0b
--- /dev/null
+++ b/kmymoney2/html/whats_new_ro.html
@@ -0,0 +1,97 @@
+<!--
+***************************************************************************************
+3/23/2005 KMyMoney What's New Page
+Robert Wadley rob<at>robntina.fastmail.us
+David Wadley mail<at>davidwadley.com
+
+***************************************************************************************
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Ce este nou în această versiune</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link href="welcome.css" rel="stylesheet" type="text/css">
+</head>
+
+<body>
+<!--"background_image", if enabled, displays an image in the background of this page.
+If you wish to use a background, un-comment the following line -->
+<img id="background_image" src="images/background.png" height="100%">
+<img id="KMyMoneyLogo" src="images/trans_logo.png">
+ <h3 id="title">Ce este nou în KMyMoney 1.0</h3>
+ <!--p id="tagline">Personal Finance Software</p-->
+ <div id="returnLink"><img src="images/backarrow.png"><a href="/welcome">Întoarcere la pagina de bun venit</a></div>
+
+
+<div id="topleft">
+ <div id="topright"><img src="images/spacer.gif"></div>
+ <div id="rightborder"><table><tr><td>
+<!-- This is where the content should be put to show up inside the decorative frame-->
+<!-- Begin content -->
+
+
+<p>Echipa de dezvoltare KMyMoney are plăcerea să anunţe un pas înainte important spre ceea ce a fost descris ca "CEA MAI BUNĂ aplicaţie de finanţe personale pentru utilizatorii de SOFTWARE LIBER". Cu peste 3 ani de dezvoltare, această nouă versiune stabilă are o mulţime de caracteristici noi, precum şi o interfaţă de utilizator reîmprospãtatã.</p>
+
+<h4>Noutăţi faţă de versiunea 0.9.3:</h4>
+<ul>
+<li>Un aspect şi un set de pictograme nou</li>
+<li>S-a adăugat un raport pentru cotaţiile investiţiilor cu posibilitatea vizualizării mediei mobile a cotaţiilor</li>
+<li>S-a adăugat o opţiune în interfaţă pentru a activa modul expert</li>
+<li>S-au îmbunătăţit variantele de perioade de recurenţă a plăţilor programate</li>
+<li>S-a îmbunătăţit compilarea cu CMake</li>
+<li>S-a îmbunătăţit filtrarea după text a tranzacţiilor</li>
+<li>S-a îmbunătăţit aspectul graficelor</li>
+<li>S-a îmbunătăţit performanţa în cazul folosirii unei baze de date</li>
+<li>S-a îmbunătăţit procesarea fişierelor în formatele de date QIF şi OFX</li>
+<li>S-a actualizat documentaţia (în engleză)</li>
+<li>S-au actualizat traducerile</li>
+<li>Au fost corectate multe probleme ceea ce face din această versiune una remarcabilă</li>
+</ul>
+
+<h4>Noutăţi faţă de versiunea 0.8.9:</h4>
+<ul>
+<li>Pagina de start: Sunt disponibile rapoarte îmbunătăţite pentru a vă oferi o prezentare rapidă a situaţiei financiare</li>
+<li>Aspectul: O nouă înfăţişare a paginii de start şi un nou set de pictograme au fost concepute exclusiv pentru a celebra versiunea 1.0</li>
+<li>Bugete. A fost adăugată o nouă funcţionalitate care vă permite să specificaţi aşteptările dumneavoastră viitoare de venituri şi cheltuieli, şi apoi să comparaţi performanţa reală a dumneavoastră faţă de acestea. Puteţi utiliza datele istorice din KMyMoney pentru a vă crea un buget de bază. Rapoartele despre buget pot fi afişate ca grafice, dacă doriţi. Depăşirile lunare de buget pot fi afişate pe pagina de start, dar pot fi eliminate dacă vi se par prea deprimante</li>
+<li>Estimări. O estimare poate fi produsă pentru soldurile conturilor dumneavoastră critice, aceasta poate fi bazată fie pe tranzacţiile programate fie pe date istorice</li>
+<li>Rapoarte. Bugete, Programări, Conturi, Împrumuturi, Reconciliere, Flux financiar, Cotaţii investiţii şi Media mobilă a cotaţiilor investiţiilor</li>
+<li>Grafice. Multe din rapoartele prezentate de către KMyMoney pot fi acum afişate în formă grafică. Grafice de tip linie, bară, bare aranjate, circular şi inel sunt acceptate, dacă este cazul</li>
+<li>Tranzacţii programate. S-au introdus perioade de recurenţă a plăţilor programate mai flexibile</li>
+<li>Import de date. Un modul de import Quicken (QIF) total rescris şi o mai bună tratare a importului de date din GnuCash. De asemenea, s-a adăugat suport OFX pentru conturile de pe piaţa monetară</li>
+<li>Cripatre PGP. Posibilitatea criptării cu mai multe chei</li>
+<li>Baza de date. Utilizarea opţională a unei baze de date pentru stocarea datelor (MySQL, PostgreSQL şi SQLite versiunea 3 au fost testate pe scară largă)</li>
+<li>CMake. Compilarea şi rularea testelor</li>
+<li>Tranduceri. S-au adăugat tracuceri în suedeză, chineză simplificată, turcă, română şi finlandeză</li>
+</ul>
+
+<p>S-au făcut multe îmbunătăţiri la funcţionalitatea existentă, pentru a îmbunătăţi satisfacţia utilizatorului. Printre cele mai semnificative dintre acestea sunt următoarele:</p>
+
+<ul>
+<li>Interfaţa cu utilizatorul. Au fost adăugate mai multe opţiuni noi pentru a vă permite să configuraţi KMyMoney conform cerinţelor dumneavoastră. S-au adus îmbunătăţiri multiple la interfaţa cu utilizatorul</li>
+<li>Conturi. Au fost adăugate "Experţi" pentru a simplifica crearea de conturi noi, şi situaţii complicate, cum ar fi împrumuturi şi credite ipotecare. Un expert de prima pornire va îndruma utilizatorii pentru prima dată prin creearea unui fişier nou, precum şi a conturilor şi categoriilor utilizate frecvent pentru care sunt furnizate şabloane, de multe ori adaptate la cetăţenie. Conturi nefolosite pot fi acum marcate ca fiind închise, astfel încât acestea să nu mai apară în ecrane, totuşi acestea vor fi disponibile pentru vizualizare, dacă este necesar. Se permite crearea de conturi de capital şi editarea tranzacţiilor de capital . S-a adăugat gestionarea ierarhiei din expertul de creeare a unui cont nou. Pot fi afişate mesaje de avertizare în cazul în care soldul unui cont este sub, depăşeşte sau are o anumită valoare</li>
+<li>Monede. S-a adăgat moneda Euro pentru Slovacia. S-a îmbunătăţit modul de lucru cu mai multe monede</li>
+<li>Registre. Modurile de vizualizare ale diferitelor registre au fost renovate pentru a oferi o performanţă mai bună, şi mai multe facilităţi pentru sortarea şi căutarea tranzacţiilor, inclusiv o funcţionalitate de "căutare rapidă". Un nouă functionalitate ce permite alegerea a mai multe tranzactii vă va permite efectuarea unor operaţii de modificare a tranzacţiilor în grup. O nouă, mai cuprinzătoare, funcţionalitate de completare automată a tranzacţiei, bazat pe numele beneficiarului, a fost introdusă</li>
+<li>Beneficiari/Plătitori. Ştergerea beneficiarilor şi categoriilor care mai sunt referite în tranzacţii acum este permisă, iar tranzacţiile afectate sunt reasignate corespunzător</li>
+<li>Tranzacţii programate. Au fost făcute modificări pentru a simplifica introducerea şi întreţinerea a tranzacţiilor programate. Se permite modificarea directă şi introducerea tranzacţiilor programate din prima pagină. Se permite vizualizarea şi introducerea a tranzacţiilor programate din registre</li>
+<li>Rapoarte. S-a îmbunătăţit filtrul text a tranzacţiilor. Diverse erori legate de rapoarte de împrumuturi şi bugete au fost corectate. S-au adăugat rapoarte noi, au fost incluse niveluri noi de detaliu şi multe rapoarte s-au făcut mai configurabile. Au fost, de asemenea, o mulţime de remedieri legate de rapoartele multi-valută. S-a îmbunătăţit calcularea câştigurilor în rapoartele de investiţii</li>
+<li>Actualizare on-line. Dacă utilizaţi OFX sau HBCI pentru online banking, configurarea a fost făcută mai uşoară, şi o funcţionalitate de potrivire manuală a tranzacţiei ar trebui să simplifice reconcilierea extraselor de cont descărcate. Aplicaţia este compatibilă cu noile versiuni ale AqBanking şi libofx, oferind o mai mare flexibilitate şi fiabilitate. S-a îmbunătăţit importul datelor în format QIF şi OFX, cu îmbunătăţiri semnificative în procesul de import OFX. Îmbunătăţirile ale operaţiei de portivire a tranzacţiilor şi tratarea erorilor, printre altele. A fost îmbunătăţit dialogul de investiţii şi de actualizare a tranzacţiilor online</li>
+<li>S-a îmbunătăţit documentaţia (în engleză) şi fişierele README</li>
+<li>S-au actualizat traducerile în spaniolă, spaniola argentiniană, portugheza braziliană, chineza simplificată, cehă, olandeză, franceză, galiţiană, germană, italiană şi portugheză</li>
+<li>S-a îmbunătăţit codul sursă</li>
+<li>Au fost corectate multe probleme ceea ce face din această versiune una remarcabilă</li>
+</ul>
+
+<p>Spuneţi-ne părerea dumneavoastră. Sperăm că vă va face plăcere folosirea acestei versiuni a aplicaţiei KMyMoney.</p>Vă rugăm să ne aduceţi la cunoştintă orice comportament anormal folosind <a href="/action?id=help_report_bug">"Raportează o eroare..."</a> din meniul de ajutor sau trimiţând o scrisoare electronică la lista dezvoltatorilor aplicaţiei. <font color="blue"><a href="mailto:kmymoney2-developer@lists.sourceforge.net">kmymoney2-developer@lists.sourceforge.net</a></font></p>
+<p><div align="right">Echipa de dezvoltare KMyMoney</div></p>
+<!-- End content -->
+ </td></tr></table>
+ </div>
+ <div id="bottomleft"><div id="bottomright"></div>
+ </div>
+</div>
+<div style="margin-bottom: 65px"></div>
+</body>
+</html>
diff --git a/kmymoney2/html/whats_new_ru.html b/kmymoney2/html/whats_new_ru.html
new file mode 100644
index 0000000..c5afafb
--- /dev/null
+++ b/kmymoney2/html/whats_new_ru.html
@@ -0,0 +1,76 @@
+<!--
+***************************************************************************************
+16.03.2007 KMyMoney What's New Page on Russian
+Andrey Cherepanov sibskull<at>mail.ru
+
+***************************************************************************************
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Untitled Document</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link href="welcome.css" rel="stylesheet" type="text/css">
+</head>
+
+<body>
+<!--"background_image", if enabled, displays an image in the background of this page.
+If you wish to use a background, un-comment the following line -->
+<img id="background_image" src="images/background.png" height="900 px">
+<img id="KMyMoneyLogo" src="images/trans_logo.png">
+ <h3 id="title" style="font-size: 20px;">Что нового в KMyMoney 1.0</h3>
+ <p id="tagline">Программа учёта финансов</p>
+ <div id="returnLink"><img src="images/backarrow.png"> <a href="/welcome">Страница приветствия</a></div>
+
+
+<div id="topleft">
+ <div id="topright"><img src="images/spacer.gif"></div>
+ <div id="rightborder"><table><tr><td>
+<!-- This is where the content should be put to show up inside the decorative frame-->
+<!-- Begin content -->
+<p>Команда разработчиков KMyMoney делает большой шаг навстречу пользователям к своей цели — созданию <strong>лучшей программы управления персональными финансами для свободных людей</strong>. После трёх лет разработки новая стабильная версия имеет множество новых возможностей и новый интерфейс пользователя.</p>
+
+<h4>Новые возможности с версии 0.9.3</h4>
+<ul>
+<li>Новый интерфейс и новые значки</li>
+<li>Отчёты о стоимости ценных бумаг и динамике изменения этой стоимости</li>
+<li>Экспертный режим интерфейса</li>
+<li>Улучшенная поддержка периодических платежей</li>
+<li>Улучшенный фильтр по операциям</li>
+<li>Более приятный внешний вид диаграмм</li>
+<li>Улучшенная поддержка и производительность работы с базой данных</li>
+<li>Улучшенная поддержка QIF и OFX</li>
+<li>Обновления документации</li>
+<li>Обновление переводов</li>
+<li>Исправление множества ошибок</li>
+</ul>
+
+<h4>Новые возможности с версии 0.8.9</h4>
+<ul>
+<li>Множество новых отчётов в сводке</li>
+<li>Эксклюзивный набор значков и оформление к версии 1.0</li>
+<li>Поддержка бюджетов для планирования будущих доходов и затрат и сравнения с реальными данными. Бюджет может быть создан автоматически на основании данных прошлых периодов.</li>
+<li>Прогноз будущих остатков на счетах</li>
+<li>Новые отчёты: прогнозы, платежи, информация о счёте или кредите, сверка, денежный поток, стоимость ценных бумаг и график её изменения</li>
+<li>Диаграммы. Теперь множество отчётов могут быть показаны не только в табличной форме, но и в виде диаграммы.</li>
+<li>Полностью переделанный модуль импорта из файлов Quicken (QIF) и GnuCash. Добавлена поддержка формата OFX.</li>
+<li>Шифрование одним или несколькими ключами PGP</li>
+<li>Использование для хранения данных сервера баз данных (проверялось на MySQL, PostgreSQL и SQLite версии 3)</li>
+<li>Добавлены переводы интерфейса программы на шведский, упрощённый китайский, турецкий, румынский и финский языки</li>
+</ul>
+
+<p>Опробуйте новые возможности и дайте нам знать о вашем мнении по их поводу. Мы надеемся, что вы получите удовольствие от новой версии KMyMoney. Если же вы обнаружите ошибки при работе программы, используйте пункт «<a href="/action?id=help_report_bug">Сообщить об ошибке...</a>» в меню «Справка», или направьте письмо в наш список рассылки: <font color="blue"><a href="mailto:kmymoney2-developer@lists.sourceforge.net">kmymoney2-developer@lists.sourceforge.net</a></font></p>
+<p>Перевод на русский: Николай Шафоростов и Андрей Черепанов. Замечания по переводу направляйте по адресу: <font color="blue"><a href="mailto:kde-russian@lists.kde.ru">kde-russian@lists.kde.ru</a></font></p>
+<p><div align="right" style="font-style: italic;">Команда разработчиков KMyMoney</div></p>
+
+<!-- End content -->
+ </td></tr></table>
+ </div>
+ <div id="bottomleft"><div id="bottomright"></div>
+ </div>
+</div>
+<div style="margin-bottom: 65px"></div>
+</body>
+</html>
diff --git a/kmymoney2/html/whats_new_tr.html b/kmymoney2/html/whats_new_tr.html
new file mode 100644
index 0000000..0ad00a0
--- /dev/null
+++ b/kmymoney2/html/whats_new_tr.html
@@ -0,0 +1,63 @@
+<!--
+***************************************************************************************
+3/23/2005 KMyMoney What's New Page
+Robert Wadley rob<at>robntina.fastmail.us
+David Wadley mail<at>davidwadley.com
+
+***************************************************************************************
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>Untitled Document</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9">
+<link href="welcome.css" rel="stylesheet" type="text/css">
+</head>
+
+<body>
+<!--"background_image", if enabled, displays an image in the background of this page.
+If you wish to use a background, un-comment the following line -->
+<!-- <img id="background_image" src="images/background.png" height="900 px"> -->
+<img id="KMyMoneyLogo" src="images/trans_logo.png">
+ <h3 id="title" style="font-size: 20px;">Srm 0.8 Yenilikleri</h3>
+ <p id="tagline">Kiisel Finans Uygulamas</p>
+ <div id="returnLink"><img src="images/backarrow.png"><a href="/welcome">Hogeldiniz Sayfasna Geri Dn</a></div>
+
+
+<div id="topleft">
+ <div id="topright"><img src="images/spacer.gif"></div>
+ <div id="rightborder"><table><tr><td>
+<!-- This is where the content should be put to show up inside the decorative frame-->
+<!-- Begin content -->
+<p>Bu srm daha iyi ve daha kolay kullanlabilir olmas iin ok sk alyoruz. Bu srme bir ok yeni zellik ve gelitirimeler ekledik. Kendimize gveniyoruz, grdnz bu yeni srmden holanacaksnz.</p>
+
+<p>Bu srmde bulabileceiniz yeni zellikler:</p>
+
+<ul>
+<LI>Yatrmlar </LI>
+<LI>Raporlar </LI>
+<LI>oklu Para Birimi </LI>
+<LI>GnuCash Dosya Dntrcs </LI>
+<LI>OFX eri Aktarcs </LI>
+<LI>Web Balants </LI>
+<LI>Gelitirilmi yeni grnm ve yeni simge seti </LI>
+<LI>Veri Dosyalar ifrelemesi </LI>
+<LI>Deerleri girerken alan hesap makinesi </LI>
+<LI>Stok &amp; Para Birimleri iin evrimii aktarm zellii </LI>
+<LI>VAT Destei </LI>
+<LI>eri aktarm eklentileri yazabilme zellii. </LI>
+<LI>Hata ayklamaya yardmc olan &quot;Anonim&quot; Dosya biemi </LI>
+</ul>
+<p>Ltfen yeni zellikleri deneyin ve ne dndnz bize bildirin. KMyMoney uygulamasnn bu yeni srmn kullanmaktan holanacanz umuyoruz. Bu srmde hatalar dzeltmek iin elimizden gelenin en iyisini yaptk ancak tabii ki tm hatalar yakalayamam olabiliriz. Ltfen <a href="/action?id=help_report_bug">"Hata raporlayn..."</a> balantsn kullanarak ya da gelitirici e-posta listesine <font color="blue"><a href="mailto:kmymoney2-developer@lists.sourceforge.net">kmymoney2-developer@lists.sourceforge.net</a></font> bir e-posta gndererek programn gstermi olduu anormal davranlar bildirin.</p>
+<p><div align="right">KMyMoney Gelitirme Ekibi</div></p>
+<!-- End content -->
+ </td></tr></table>
+ </div>
+ <div id="bottomleft"><div id="bottomright"></div>
+ </div>
+</div>
+<div style="margin-bottom: 65px"></div>
+</body>
+</html>
diff --git a/kmymoney2/icons/Makefile.am b/kmymoney2/icons/Makefile.am
new file mode 100644
index 0000000..2d9d0cd
--- /dev/null
+++ b/kmymoney2/icons/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = hicolor oxygen Tango
diff --git a/kmymoney2/icons/Tango/128x128/Makefile.am b/kmymoney2/icons/Tango/128x128/Makefile.am
new file mode 100644
index 0000000..284a700
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = apps
diff --git a/kmymoney2/icons/Tango/128x128/apps/Makefile.am b/kmymoney2/icons/Tango/128x128/apps/Makefile.am
new file mode 100644
index 0000000..15cef33
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/Makefile.am
@@ -0,0 +1,6 @@
+icondir=$(kde_icondir)/Tango/128x128/apps
+
+icon_DATA = account_add.png account.png accounts.png account-types_asset.png account-types_cash.png account-types_checking.png account-types_closed.png account-types_credit-card.png account-types_expense.png account-types_income.png account-types_investments.png account-types_liability.png account-types_loan.png account-types_savings.png budget.png categories.png forcast.png institution_add.png institutions.png investments.png ledger.png onlinebanking.png payee.png reconcile.png report.png schedule.png transaction_find.png
+
+EXTRA_DIST = $(icon_DATA)
+
diff --git a/kmymoney2/icons/Tango/128x128/apps/account-types_asset.png b/kmymoney2/icons/Tango/128x128/apps/account-types_asset.png
new file mode 100644
index 0000000..1ccec0f
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/account-types_asset.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/account-types_cash.png b/kmymoney2/icons/Tango/128x128/apps/account-types_cash.png
new file mode 100644
index 0000000..306ebd3
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/account-types_cash.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/account-types_checking.png b/kmymoney2/icons/Tango/128x128/apps/account-types_checking.png
new file mode 100644
index 0000000..91923ec
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/account-types_checking.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/account-types_closed.png b/kmymoney2/icons/Tango/128x128/apps/account-types_closed.png
new file mode 100644
index 0000000..e2d054f
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/account-types_closed.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/account-types_credit-card.png b/kmymoney2/icons/Tango/128x128/apps/account-types_credit-card.png
new file mode 100644
index 0000000..46aba46
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/account-types_credit-card.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/account-types_expense.png b/kmymoney2/icons/Tango/128x128/apps/account-types_expense.png
new file mode 100644
index 0000000..be964ba
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/account-types_expense.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/account-types_income.png b/kmymoney2/icons/Tango/128x128/apps/account-types_income.png
new file mode 100644
index 0000000..e9b725f
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/account-types_income.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/account-types_investments.png b/kmymoney2/icons/Tango/128x128/apps/account-types_investments.png
new file mode 100644
index 0000000..fda644c
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/account-types_investments.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/account-types_liability.png b/kmymoney2/icons/Tango/128x128/apps/account-types_liability.png
new file mode 100644
index 0000000..58e81b6
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/account-types_liability.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/account-types_loan.png b/kmymoney2/icons/Tango/128x128/apps/account-types_loan.png
new file mode 100644
index 0000000..3526151
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/account-types_loan.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/account-types_savings.png b/kmymoney2/icons/Tango/128x128/apps/account-types_savings.png
new file mode 100644
index 0000000..2466abb
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/account-types_savings.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/account.png b/kmymoney2/icons/Tango/128x128/apps/account.png
new file mode 100644
index 0000000..539122b
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/account.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/account_add.png b/kmymoney2/icons/Tango/128x128/apps/account_add.png
new file mode 100644
index 0000000..15c314f
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/account_add.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/accounts.png b/kmymoney2/icons/Tango/128x128/apps/accounts.png
new file mode 100644
index 0000000..539122b
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/accounts.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/budget.png b/kmymoney2/icons/Tango/128x128/apps/budget.png
new file mode 100644
index 0000000..b693b1f
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/budget.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/categories.png b/kmymoney2/icons/Tango/128x128/apps/categories.png
new file mode 100644
index 0000000..0c917ba
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/categories.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/forcast.png b/kmymoney2/icons/Tango/128x128/apps/forcast.png
new file mode 100644
index 0000000..edcdd62
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/forcast.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/institution_add.png b/kmymoney2/icons/Tango/128x128/apps/institution_add.png
new file mode 100644
index 0000000..5aeef7a
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/institution_add.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/institutions.png b/kmymoney2/icons/Tango/128x128/apps/institutions.png
new file mode 100644
index 0000000..b9b4565
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/institutions.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/investments.png b/kmymoney2/icons/Tango/128x128/apps/investments.png
new file mode 100644
index 0000000..e2b1e7c
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/investments.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/ledger.png b/kmymoney2/icons/Tango/128x128/apps/ledger.png
new file mode 100644
index 0000000..7f413ac
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/ledger.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/onlinebanking.png b/kmymoney2/icons/Tango/128x128/apps/onlinebanking.png
new file mode 100644
index 0000000..3118fc7
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/onlinebanking.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/payee.png b/kmymoney2/icons/Tango/128x128/apps/payee.png
new file mode 100644
index 0000000..f6eb0bf
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/payee.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/reconcile.png b/kmymoney2/icons/Tango/128x128/apps/reconcile.png
new file mode 100644
index 0000000..8117c68
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/reconcile.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/report.png b/kmymoney2/icons/Tango/128x128/apps/report.png
new file mode 100644
index 0000000..08aae7a
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/report.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/schedule.png b/kmymoney2/icons/Tango/128x128/apps/schedule.png
new file mode 100644
index 0000000..2d0176c
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/schedule.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/128x128/apps/transaction_find.png b/kmymoney2/icons/Tango/128x128/apps/transaction_find.png
new file mode 100644
index 0000000..0cbb968
--- /dev/null
+++ b/kmymoney2/icons/Tango/128x128/apps/transaction_find.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/Makefile.am b/kmymoney2/icons/Tango/16x16/Makefile.am
new file mode 100644
index 0000000..2af9bf4
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = actions
diff --git a/kmymoney2/icons/Tango/16x16/actions/Makefile.am b/kmymoney2/icons/Tango/16x16/actions/Makefile.am
new file mode 100644
index 0000000..18bb033
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/Makefile.am
@@ -0,0 +1,6 @@
+icondir=$(kde_icondir)/Tango/16x16/actions
+
+icon_DATA = account_add.png account.png accounts.png account-types_asset.png account-types_cash.png account-types_checking.png account-types_closed.png account-types_credit-card.png account-types_expense.png account-types_income.png account-types_investments.png account-types_liability.png account-types_loan.png account-types_savings.png backup.png bank.png budget.png categories.png close_window.png delete.png forcast.png hide_categories.png hide_reconciled.png institution_add.png institutions.png investments.png ledger.png onlinebanking.png payee.png personal_data.png reconcile.png report.png schedule.png split_transaction.png transaction_find.png view_info.png
+
+EXTRA_DIST = $(icon_DATA)
+
diff --git a/kmymoney2/icons/Tango/16x16/actions/account-types_asset.png b/kmymoney2/icons/Tango/16x16/actions/account-types_asset.png
new file mode 100644
index 0000000..30d60a4
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/account-types_asset.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/account-types_cash.png b/kmymoney2/icons/Tango/16x16/actions/account-types_cash.png
new file mode 100644
index 0000000..7b3e7ed
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/account-types_cash.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/account-types_checking.png b/kmymoney2/icons/Tango/16x16/actions/account-types_checking.png
new file mode 100644
index 0000000..93a0800
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/account-types_checking.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/account-types_closed.png b/kmymoney2/icons/Tango/16x16/actions/account-types_closed.png
new file mode 100644
index 0000000..750867f
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/account-types_closed.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/account-types_credit-card.png b/kmymoney2/icons/Tango/16x16/actions/account-types_credit-card.png
new file mode 100644
index 0000000..4cbb7ce
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/account-types_credit-card.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/account-types_expense.png b/kmymoney2/icons/Tango/16x16/actions/account-types_expense.png
new file mode 100644
index 0000000..919b445
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/account-types_expense.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/account-types_income.png b/kmymoney2/icons/Tango/16x16/actions/account-types_income.png
new file mode 100644
index 0000000..e1c57f6
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/account-types_income.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/account-types_investments.png b/kmymoney2/icons/Tango/16x16/actions/account-types_investments.png
new file mode 100644
index 0000000..d37dfec
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/account-types_investments.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/account-types_liability.png b/kmymoney2/icons/Tango/16x16/actions/account-types_liability.png
new file mode 100644
index 0000000..2caca98
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/account-types_liability.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/account-types_loan.png b/kmymoney2/icons/Tango/16x16/actions/account-types_loan.png
new file mode 100644
index 0000000..31b6e4d
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/account-types_loan.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/account-types_savings.png b/kmymoney2/icons/Tango/16x16/actions/account-types_savings.png
new file mode 100644
index 0000000..c9cea17
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/account-types_savings.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/account.png b/kmymoney2/icons/Tango/16x16/actions/account.png
new file mode 100644
index 0000000..6abefad
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/account.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/account_add.png b/kmymoney2/icons/Tango/16x16/actions/account_add.png
new file mode 100644
index 0000000..60f7c95
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/account_add.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/accounts.png b/kmymoney2/icons/Tango/16x16/actions/accounts.png
new file mode 100644
index 0000000..6abefad
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/accounts.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/backup.png b/kmymoney2/icons/Tango/16x16/actions/backup.png
new file mode 100644
index 0000000..8ab6b2a
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/backup.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/bank.png b/kmymoney2/icons/Tango/16x16/actions/bank.png
new file mode 100644
index 0000000..6abefad
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/bank.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/budget.png b/kmymoney2/icons/Tango/16x16/actions/budget.png
new file mode 100644
index 0000000..7c34fa9
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/budget.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/categories.png b/kmymoney2/icons/Tango/16x16/actions/categories.png
new file mode 100644
index 0000000..df5aef8
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/categories.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/close_window.png b/kmymoney2/icons/Tango/16x16/actions/close_window.png
new file mode 100644
index 0000000..50003a4
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/close_window.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/delete.png b/kmymoney2/icons/Tango/16x16/actions/delete.png
new file mode 100644
index 0000000..a51e735
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/delete.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/forcast.png b/kmymoney2/icons/Tango/16x16/actions/forcast.png
new file mode 100644
index 0000000..2782f0d
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/forcast.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/hide_categories.png b/kmymoney2/icons/Tango/16x16/actions/hide_categories.png
new file mode 100644
index 0000000..0907303
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/hide_categories.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/hide_reconciled.png b/kmymoney2/icons/Tango/16x16/actions/hide_reconciled.png
new file mode 100644
index 0000000..385fb72
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/hide_reconciled.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/institution_add.png b/kmymoney2/icons/Tango/16x16/actions/institution_add.png
new file mode 100644
index 0000000..fac686d
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/institution_add.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/institutions.png b/kmymoney2/icons/Tango/16x16/actions/institutions.png
new file mode 100644
index 0000000..b32b276
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/institutions.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/investments.png b/kmymoney2/icons/Tango/16x16/actions/investments.png
new file mode 100644
index 0000000..44f14de
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/investments.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/ledger.png b/kmymoney2/icons/Tango/16x16/actions/ledger.png
new file mode 100644
index 0000000..6606bfa
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/ledger.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/onlinebanking.png b/kmymoney2/icons/Tango/16x16/actions/onlinebanking.png
new file mode 100644
index 0000000..be48459
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/onlinebanking.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/payee.png b/kmymoney2/icons/Tango/16x16/actions/payee.png
new file mode 100644
index 0000000..24d6d2d
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/payee.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/personal_data.png b/kmymoney2/icons/Tango/16x16/actions/personal_data.png
new file mode 100644
index 0000000..da8ddd9
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/personal_data.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/reconcile.png b/kmymoney2/icons/Tango/16x16/actions/reconcile.png
new file mode 100644
index 0000000..70fd366
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/reconcile.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/report.png b/kmymoney2/icons/Tango/16x16/actions/report.png
new file mode 100644
index 0000000..5288b75
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/report.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/schedule.png b/kmymoney2/icons/Tango/16x16/actions/schedule.png
new file mode 100644
index 0000000..ad4cd49
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/schedule.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/split_transaction.png b/kmymoney2/icons/Tango/16x16/actions/split_transaction.png
new file mode 100644
index 0000000..0602343
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/split_transaction.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/transaction_find.png b/kmymoney2/icons/Tango/16x16/actions/transaction_find.png
new file mode 100644
index 0000000..e3e5c66
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/transaction_find.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/16x16/actions/view_info.png b/kmymoney2/icons/Tango/16x16/actions/view_info.png
new file mode 100644
index 0000000..22b3e6e
--- /dev/null
+++ b/kmymoney2/icons/Tango/16x16/actions/view_info.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/Makefile.am b/kmymoney2/icons/Tango/22x22/Makefile.am
new file mode 100644
index 0000000..2af9bf4
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = actions
diff --git a/kmymoney2/icons/Tango/22x22/actions/Makefile.am b/kmymoney2/icons/Tango/22x22/actions/Makefile.am
new file mode 100644
index 0000000..006feff
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/Makefile.am
@@ -0,0 +1,6 @@
+icondir=$(kde_icondir)/Tango/22x22/actions
+
+icon_DATA = account_add.png account.png accounts.png account-types_asset.png account-types_cash.png account-types_checking.png account-types_closed.png account-types_credit-card.png account-types_expense.png account-types_income.png account-types_investments.png account-types_liability.png account-types_loan.png account-types_savings.png attention.png backup.png bank.png budget.png categories.png close_window.png delete.png forcast.png hide_categories.png hide_reconciled.png institution_add.png institutions.png investments.png ledger.png onlinebanking.png payee.png personal_data.png reconcile.png report.png schedule.png transaction_find.png view_info.png
+
+EXTRA_DIST = $(icon_DATA)
+
diff --git a/kmymoney2/icons/Tango/22x22/actions/account-types_asset.png b/kmymoney2/icons/Tango/22x22/actions/account-types_asset.png
new file mode 100644
index 0000000..00c42d7
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/account-types_asset.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/account-types_cash.png b/kmymoney2/icons/Tango/22x22/actions/account-types_cash.png
new file mode 100644
index 0000000..5e2f200
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/account-types_cash.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/account-types_checking.png b/kmymoney2/icons/Tango/22x22/actions/account-types_checking.png
new file mode 100644
index 0000000..e4edf0d
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/account-types_checking.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/account-types_closed.png b/kmymoney2/icons/Tango/22x22/actions/account-types_closed.png
new file mode 100644
index 0000000..6522b4d
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/account-types_closed.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/account-types_credit-card.png b/kmymoney2/icons/Tango/22x22/actions/account-types_credit-card.png
new file mode 100644
index 0000000..eb6991e
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/account-types_credit-card.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/account-types_expense.png b/kmymoney2/icons/Tango/22x22/actions/account-types_expense.png
new file mode 100644
index 0000000..c1eb600
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/account-types_expense.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/account-types_income.png b/kmymoney2/icons/Tango/22x22/actions/account-types_income.png
new file mode 100644
index 0000000..2a8926a
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/account-types_income.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/account-types_investments.png b/kmymoney2/icons/Tango/22x22/actions/account-types_investments.png
new file mode 100644
index 0000000..f062668
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/account-types_investments.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/account-types_liability.png b/kmymoney2/icons/Tango/22x22/actions/account-types_liability.png
new file mode 100644
index 0000000..7b520c5
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/account-types_liability.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/account-types_loan.png b/kmymoney2/icons/Tango/22x22/actions/account-types_loan.png
new file mode 100644
index 0000000..ea41eee
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/account-types_loan.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/account-types_savings.png b/kmymoney2/icons/Tango/22x22/actions/account-types_savings.png
new file mode 100644
index 0000000..2a097d2
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/account-types_savings.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/account.png b/kmymoney2/icons/Tango/22x22/actions/account.png
new file mode 100644
index 0000000..57cc544
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/account.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/account_add.png b/kmymoney2/icons/Tango/22x22/actions/account_add.png
new file mode 100644
index 0000000..3d9c30c
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/account_add.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/accounts.png b/kmymoney2/icons/Tango/22x22/actions/accounts.png
new file mode 100644
index 0000000..57cc544
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/accounts.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/attention.png b/kmymoney2/icons/Tango/22x22/actions/attention.png
new file mode 100644
index 0000000..e118279
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/attention.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/backup.png b/kmymoney2/icons/Tango/22x22/actions/backup.png
new file mode 100644
index 0000000..688c0d7
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/backup.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/bank.png b/kmymoney2/icons/Tango/22x22/actions/bank.png
new file mode 100644
index 0000000..57cc544
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/bank.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/budget.png b/kmymoney2/icons/Tango/22x22/actions/budget.png
new file mode 100644
index 0000000..61fe40b
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/budget.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/categories.png b/kmymoney2/icons/Tango/22x22/actions/categories.png
new file mode 100644
index 0000000..292bde6
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/categories.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/close_window.png b/kmymoney2/icons/Tango/22x22/actions/close_window.png
new file mode 100644
index 0000000..9108ee7
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/close_window.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/delete.png b/kmymoney2/icons/Tango/22x22/actions/delete.png
new file mode 100644
index 0000000..1fe162e
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/delete.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/forcast.png b/kmymoney2/icons/Tango/22x22/actions/forcast.png
new file mode 100644
index 0000000..1f27a83
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/forcast.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/hide_categories.png b/kmymoney2/icons/Tango/22x22/actions/hide_categories.png
new file mode 100644
index 0000000..e1bb722
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/hide_categories.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/hide_reconciled.png b/kmymoney2/icons/Tango/22x22/actions/hide_reconciled.png
new file mode 100644
index 0000000..4e59757
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/hide_reconciled.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/institution_add.png b/kmymoney2/icons/Tango/22x22/actions/institution_add.png
new file mode 100644
index 0000000..c8bc1ce
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/institution_add.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/institutions.png b/kmymoney2/icons/Tango/22x22/actions/institutions.png
new file mode 100644
index 0000000..88132f3
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/institutions.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/investments.png b/kmymoney2/icons/Tango/22x22/actions/investments.png
new file mode 100644
index 0000000..3647471
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/investments.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/ledger.png b/kmymoney2/icons/Tango/22x22/actions/ledger.png
new file mode 100644
index 0000000..de58168
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/ledger.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/onlinebanking.png b/kmymoney2/icons/Tango/22x22/actions/onlinebanking.png
new file mode 100644
index 0000000..d6eb180
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/onlinebanking.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/payee.png b/kmymoney2/icons/Tango/22x22/actions/payee.png
new file mode 100644
index 0000000..28173b7
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/payee.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/personal_data.png b/kmymoney2/icons/Tango/22x22/actions/personal_data.png
new file mode 100644
index 0000000..96f7333
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/personal_data.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/reconcile.png b/kmymoney2/icons/Tango/22x22/actions/reconcile.png
new file mode 100644
index 0000000..1e1d0dd
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/reconcile.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/report.png b/kmymoney2/icons/Tango/22x22/actions/report.png
new file mode 100644
index 0000000..f3fc218
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/report.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/schedule.png b/kmymoney2/icons/Tango/22x22/actions/schedule.png
new file mode 100644
index 0000000..0fc38fb
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/schedule.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/transaction_find.png b/kmymoney2/icons/Tango/22x22/actions/transaction_find.png
new file mode 100644
index 0000000..e74509e
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/transaction_find.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/22x22/actions/view_info.png b/kmymoney2/icons/Tango/22x22/actions/view_info.png
new file mode 100644
index 0000000..30835cb
--- /dev/null
+++ b/kmymoney2/icons/Tango/22x22/actions/view_info.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/Makefile.am b/kmymoney2/icons/Tango/32x32/Makefile.am
new file mode 100644
index 0000000..284a700
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = apps
diff --git a/kmymoney2/icons/Tango/32x32/apps/Makefile.am b/kmymoney2/icons/Tango/32x32/apps/Makefile.am
new file mode 100644
index 0000000..520b4eb
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/Makefile.am
@@ -0,0 +1,6 @@
+icondir=$(kde_icondir)/Tango/32x32/apps
+
+icon_DATA = account_add.png account.png accounts.png account-types_asset.png account-types_cash.png account-types_checking.png account-types_closed.png account-types_credit-card.png account-types_expense.png account-types_income.png account-types_investments.png account-types_liability.png account-types_loan.png account-types_savings.png budget.png categories.png forcast.png institution_add.png institutions.png investments.png ledger.png onlinebanking.png payee.png reconcile.png report.png schedule.png transaction_find.png
+
+EXTRA_DIST = $(icon_DATA)
+
diff --git a/kmymoney2/icons/Tango/32x32/apps/account-types_asset.png b/kmymoney2/icons/Tango/32x32/apps/account-types_asset.png
new file mode 100644
index 0000000..43bbf76
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/account-types_asset.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/account-types_cash.png b/kmymoney2/icons/Tango/32x32/apps/account-types_cash.png
new file mode 100644
index 0000000..25bdbde
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/account-types_cash.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/account-types_checking.png b/kmymoney2/icons/Tango/32x32/apps/account-types_checking.png
new file mode 100644
index 0000000..85c2a61
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/account-types_checking.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/account-types_closed.png b/kmymoney2/icons/Tango/32x32/apps/account-types_closed.png
new file mode 100644
index 0000000..f393974
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/account-types_closed.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/account-types_credit-card.png b/kmymoney2/icons/Tango/32x32/apps/account-types_credit-card.png
new file mode 100644
index 0000000..114ccd9
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/account-types_credit-card.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/account-types_expense.png b/kmymoney2/icons/Tango/32x32/apps/account-types_expense.png
new file mode 100644
index 0000000..cb8232c
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/account-types_expense.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/account-types_income.png b/kmymoney2/icons/Tango/32x32/apps/account-types_income.png
new file mode 100644
index 0000000..cb9390d
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/account-types_income.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/account-types_investments.png b/kmymoney2/icons/Tango/32x32/apps/account-types_investments.png
new file mode 100644
index 0000000..1a0a2c4
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/account-types_investments.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/account-types_liability.png b/kmymoney2/icons/Tango/32x32/apps/account-types_liability.png
new file mode 100644
index 0000000..c12fc50
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/account-types_liability.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/account-types_loan.png b/kmymoney2/icons/Tango/32x32/apps/account-types_loan.png
new file mode 100644
index 0000000..ccc94d6
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/account-types_loan.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/account-types_savings.png b/kmymoney2/icons/Tango/32x32/apps/account-types_savings.png
new file mode 100644
index 0000000..1c5defb
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/account-types_savings.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/account.png b/kmymoney2/icons/Tango/32x32/apps/account.png
new file mode 100644
index 0000000..1aa6524
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/account.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/account_add.png b/kmymoney2/icons/Tango/32x32/apps/account_add.png
new file mode 100644
index 0000000..0843acb
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/account_add.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/accounts.png b/kmymoney2/icons/Tango/32x32/apps/accounts.png
new file mode 100644
index 0000000..1aa6524
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/accounts.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/budget.png b/kmymoney2/icons/Tango/32x32/apps/budget.png
new file mode 100644
index 0000000..3a9e1d1
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/budget.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/categories.png b/kmymoney2/icons/Tango/32x32/apps/categories.png
new file mode 100644
index 0000000..2b8b6ab
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/categories.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/forcast.png b/kmymoney2/icons/Tango/32x32/apps/forcast.png
new file mode 100644
index 0000000..90b6a9f
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/forcast.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/institution_add.png b/kmymoney2/icons/Tango/32x32/apps/institution_add.png
new file mode 100644
index 0000000..e8afbc7
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/institution_add.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/institutions.png b/kmymoney2/icons/Tango/32x32/apps/institutions.png
new file mode 100644
index 0000000..6f647a5
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/institutions.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/investments.png b/kmymoney2/icons/Tango/32x32/apps/investments.png
new file mode 100644
index 0000000..eb003cc
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/investments.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/ledger.png b/kmymoney2/icons/Tango/32x32/apps/ledger.png
new file mode 100644
index 0000000..28e81e5
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/ledger.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/onlinebanking.png b/kmymoney2/icons/Tango/32x32/apps/onlinebanking.png
new file mode 100644
index 0000000..fdff8a9
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/onlinebanking.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/payee.png b/kmymoney2/icons/Tango/32x32/apps/payee.png
new file mode 100644
index 0000000..221eea8
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/payee.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/reconcile.png b/kmymoney2/icons/Tango/32x32/apps/reconcile.png
new file mode 100644
index 0000000..3ec2a25
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/reconcile.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/report.png b/kmymoney2/icons/Tango/32x32/apps/report.png
new file mode 100644
index 0000000..656241f
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/report.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/schedule.png b/kmymoney2/icons/Tango/32x32/apps/schedule.png
new file mode 100644
index 0000000..24ea0c1
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/schedule.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/32x32/apps/transaction_find.png b/kmymoney2/icons/Tango/32x32/apps/transaction_find.png
new file mode 100644
index 0000000..268d367
--- /dev/null
+++ b/kmymoney2/icons/Tango/32x32/apps/transaction_find.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/Makefile.am b/kmymoney2/icons/Tango/48x48/Makefile.am
new file mode 100644
index 0000000..284a700
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = apps
diff --git a/kmymoney2/icons/Tango/48x48/apps/Makefile.am b/kmymoney2/icons/Tango/48x48/apps/Makefile.am
new file mode 100644
index 0000000..181791a
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/Makefile.am
@@ -0,0 +1,6 @@
+icondir=$(kde_icondir)/Tango/48x48/apps
+
+icon_DATA = account_add.png account.png accounts.png account-types_asset.png account-types_cash.png account-types_checking.png account-types_closed.png account-types_credit-card.png account-types_expense.png account-types_income.png account-types_investments.png account-types_liability.png account-types_loan.png account-types_savings.png budget.png categories.png forcast.png institution_add.png institutions.png investments.png ledger.png onlinebanking.png payee.png reconcile.png report.png schedule.png transaction_find.png
+
+EXTRA_DIST = $(icon_DATA)
+
diff --git a/kmymoney2/icons/Tango/48x48/apps/account-types_asset.png b/kmymoney2/icons/Tango/48x48/apps/account-types_asset.png
new file mode 100644
index 0000000..4384b29
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/account-types_asset.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/account-types_cash.png b/kmymoney2/icons/Tango/48x48/apps/account-types_cash.png
new file mode 100644
index 0000000..ee6dae4
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/account-types_cash.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/account-types_checking.png b/kmymoney2/icons/Tango/48x48/apps/account-types_checking.png
new file mode 100644
index 0000000..ce5e840
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/account-types_checking.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/account-types_closed.png b/kmymoney2/icons/Tango/48x48/apps/account-types_closed.png
new file mode 100644
index 0000000..bfb04ac
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/account-types_closed.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/account-types_credit-card.png b/kmymoney2/icons/Tango/48x48/apps/account-types_credit-card.png
new file mode 100644
index 0000000..cc6dd0e
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/account-types_credit-card.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/account-types_expense.png b/kmymoney2/icons/Tango/48x48/apps/account-types_expense.png
new file mode 100644
index 0000000..02b0412
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/account-types_expense.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/account-types_income.png b/kmymoney2/icons/Tango/48x48/apps/account-types_income.png
new file mode 100644
index 0000000..75c5a80
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/account-types_income.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/account-types_investments.png b/kmymoney2/icons/Tango/48x48/apps/account-types_investments.png
new file mode 100644
index 0000000..a567478
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/account-types_investments.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/account-types_liability.png b/kmymoney2/icons/Tango/48x48/apps/account-types_liability.png
new file mode 100644
index 0000000..ffbecbd
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/account-types_liability.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/account-types_loan.png b/kmymoney2/icons/Tango/48x48/apps/account-types_loan.png
new file mode 100644
index 0000000..cdf60d9
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/account-types_loan.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/account-types_savings.png b/kmymoney2/icons/Tango/48x48/apps/account-types_savings.png
new file mode 100644
index 0000000..5eaf97d
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/account-types_savings.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/account.png b/kmymoney2/icons/Tango/48x48/apps/account.png
new file mode 100644
index 0000000..a8dedf0
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/account.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/account_add.png b/kmymoney2/icons/Tango/48x48/apps/account_add.png
new file mode 100644
index 0000000..66f5f58
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/account_add.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/accounts.png b/kmymoney2/icons/Tango/48x48/apps/accounts.png
new file mode 100644
index 0000000..a8dedf0
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/accounts.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/budget.png b/kmymoney2/icons/Tango/48x48/apps/budget.png
new file mode 100644
index 0000000..607d504
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/budget.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/categories.png b/kmymoney2/icons/Tango/48x48/apps/categories.png
new file mode 100644
index 0000000..54c1080
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/categories.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/forcast.png b/kmymoney2/icons/Tango/48x48/apps/forcast.png
new file mode 100644
index 0000000..a034aa6
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/forcast.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/institution_add.png b/kmymoney2/icons/Tango/48x48/apps/institution_add.png
new file mode 100644
index 0000000..9b5d8e6
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/institution_add.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/institutions.png b/kmymoney2/icons/Tango/48x48/apps/institutions.png
new file mode 100644
index 0000000..c79156b
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/institutions.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/investments.png b/kmymoney2/icons/Tango/48x48/apps/investments.png
new file mode 100644
index 0000000..24db317
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/investments.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/ledger.png b/kmymoney2/icons/Tango/48x48/apps/ledger.png
new file mode 100644
index 0000000..1af0f1d
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/ledger.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/onlinebanking.png b/kmymoney2/icons/Tango/48x48/apps/onlinebanking.png
new file mode 100644
index 0000000..4eba265
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/onlinebanking.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/payee.png b/kmymoney2/icons/Tango/48x48/apps/payee.png
new file mode 100644
index 0000000..5c78ae9
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/payee.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/reconcile.png b/kmymoney2/icons/Tango/48x48/apps/reconcile.png
new file mode 100644
index 0000000..c48b588
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/reconcile.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/report.png b/kmymoney2/icons/Tango/48x48/apps/report.png
new file mode 100644
index 0000000..cc54a41
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/report.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/schedule.png b/kmymoney2/icons/Tango/48x48/apps/schedule.png
new file mode 100644
index 0000000..5572b8f
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/schedule.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/48x48/apps/transaction_find.png b/kmymoney2/icons/Tango/48x48/apps/transaction_find.png
new file mode 100644
index 0000000..6293d9e
--- /dev/null
+++ b/kmymoney2/icons/Tango/48x48/apps/transaction_find.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/Makefile.am b/kmymoney2/icons/Tango/64x64/Makefile.am
new file mode 100644
index 0000000..284a700
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = apps
diff --git a/kmymoney2/icons/Tango/64x64/apps/Makefile.am b/kmymoney2/icons/Tango/64x64/apps/Makefile.am
new file mode 100644
index 0000000..f0b1d9a
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/Makefile.am
@@ -0,0 +1,6 @@
+icondir=$(kde_icondir)/Tango/64x64/apps
+
+icon_DATA = account_add.png account.png accounts.png account-types_asset.png account-types_cash.png account-types_checking.png account-types_closed.png account-types_credit-card.png account-types_expense.png account-types_income.png account-types_investments.png account-types_liability.png account-types_loan.png account-types_savings.png budget.png categories.png forcast.png institution_add.png institutions.png investments.png ledger.png onlinebanking.png payee.png reconcile.png report.png schedule.png transaction_find.png
+
+EXTRA_DIST = $(icon_DATA)
+
diff --git a/kmymoney2/icons/Tango/64x64/apps/account-types_asset.png b/kmymoney2/icons/Tango/64x64/apps/account-types_asset.png
new file mode 100644
index 0000000..af17498
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/account-types_asset.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/account-types_cash.png b/kmymoney2/icons/Tango/64x64/apps/account-types_cash.png
new file mode 100644
index 0000000..82ad69b
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/account-types_cash.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/account-types_checking.png b/kmymoney2/icons/Tango/64x64/apps/account-types_checking.png
new file mode 100644
index 0000000..8608763
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/account-types_checking.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/account-types_closed.png b/kmymoney2/icons/Tango/64x64/apps/account-types_closed.png
new file mode 100644
index 0000000..6700e0b
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/account-types_closed.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/account-types_credit-card.png b/kmymoney2/icons/Tango/64x64/apps/account-types_credit-card.png
new file mode 100644
index 0000000..61af127
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/account-types_credit-card.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/account-types_expense.png b/kmymoney2/icons/Tango/64x64/apps/account-types_expense.png
new file mode 100644
index 0000000..90bde8f
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/account-types_expense.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/account-types_income.png b/kmymoney2/icons/Tango/64x64/apps/account-types_income.png
new file mode 100644
index 0000000..c7a5a00
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/account-types_income.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/account-types_investments.png b/kmymoney2/icons/Tango/64x64/apps/account-types_investments.png
new file mode 100644
index 0000000..115deab
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/account-types_investments.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/account-types_liability.png b/kmymoney2/icons/Tango/64x64/apps/account-types_liability.png
new file mode 100644
index 0000000..cf4f813
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/account-types_liability.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/account-types_loan.png b/kmymoney2/icons/Tango/64x64/apps/account-types_loan.png
new file mode 100644
index 0000000..f60fca9
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/account-types_loan.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/account-types_savings.png b/kmymoney2/icons/Tango/64x64/apps/account-types_savings.png
new file mode 100644
index 0000000..a5217c1
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/account-types_savings.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/account.png b/kmymoney2/icons/Tango/64x64/apps/account.png
new file mode 100644
index 0000000..63ad620
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/account.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/account_add.png b/kmymoney2/icons/Tango/64x64/apps/account_add.png
new file mode 100644
index 0000000..4f94e1e
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/account_add.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/accounts.png b/kmymoney2/icons/Tango/64x64/apps/accounts.png
new file mode 100644
index 0000000..63ad620
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/accounts.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/budget.png b/kmymoney2/icons/Tango/64x64/apps/budget.png
new file mode 100644
index 0000000..f89c5f1
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/budget.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/categories.png b/kmymoney2/icons/Tango/64x64/apps/categories.png
new file mode 100644
index 0000000..e5d039a
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/categories.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/forcast.png b/kmymoney2/icons/Tango/64x64/apps/forcast.png
new file mode 100644
index 0000000..2a926a5
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/forcast.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/institution_add.png b/kmymoney2/icons/Tango/64x64/apps/institution_add.png
new file mode 100644
index 0000000..f6f8efb
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/institution_add.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/institutions.png b/kmymoney2/icons/Tango/64x64/apps/institutions.png
new file mode 100644
index 0000000..3ec4dc6
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/institutions.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/investments.png b/kmymoney2/icons/Tango/64x64/apps/investments.png
new file mode 100644
index 0000000..43ccdb4
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/investments.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/ledger.png b/kmymoney2/icons/Tango/64x64/apps/ledger.png
new file mode 100644
index 0000000..0d6c083
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/ledger.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/onlinebanking.png b/kmymoney2/icons/Tango/64x64/apps/onlinebanking.png
new file mode 100644
index 0000000..15f9648
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/onlinebanking.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/payee.png b/kmymoney2/icons/Tango/64x64/apps/payee.png
new file mode 100644
index 0000000..75e86af
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/payee.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/reconcile.png b/kmymoney2/icons/Tango/64x64/apps/reconcile.png
new file mode 100644
index 0000000..07ba00e
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/reconcile.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/report.png b/kmymoney2/icons/Tango/64x64/apps/report.png
new file mode 100644
index 0000000..d30c9b3
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/report.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/schedule.png b/kmymoney2/icons/Tango/64x64/apps/schedule.png
new file mode 100644
index 0000000..b8882c6
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/schedule.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/64x64/apps/transaction_find.png b/kmymoney2/icons/Tango/64x64/apps/transaction_find.png
new file mode 100644
index 0000000..af7c0f1
--- /dev/null
+++ b/kmymoney2/icons/Tango/64x64/apps/transaction_find.png
Binary files differ
diff --git a/kmymoney2/icons/Tango/Makefile.am b/kmymoney2/icons/Tango/Makefile.am
new file mode 100644
index 0000000..a088af8
--- /dev/null
+++ b/kmymoney2/icons/Tango/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = 16x16 48x48 32x32 128x128 scalable 64x64 22x22
diff --git a/kmymoney2/icons/Tango/scalable/Makefile.am b/kmymoney2/icons/Tango/scalable/Makefile.am
new file mode 100644
index 0000000..1159059
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/Makefile.am
@@ -0,0 +1,6 @@
+icondir=$(kde_icondir)/Tango/scalable
+
+icon_DATA = account_add.svgz accounts.svgz account.svgz account-types_asset.svgz account-types_cash.svgz account-types_checking.svgz account-types_closed.svgz account-types_credit-card.svgz account-types_expense.svgz account-types_income.svgz account-types_investments.svgz account-types_liability.svgz account-types_loan.svgz account-types_savings.svgz backup.svgz bank.svgz budget.svgz categories.svgz forcast.svgz hide_categories.svgz hide_reconciled.svgz institution_add.svgz institutions.svgz investments.svgz ledger.svgz onlinebanking.svgz payee.svgz personal_data.svgz reconcile.svgz report.svgz schedule.svgz transaction_find.svgz view_info.svgz
+
+EXTRA_DIST = $(icon_DATA)
+
diff --git a/kmymoney2/icons/Tango/scalable/account-types_asset.svgz b/kmymoney2/icons/Tango/scalable/account-types_asset.svgz
new file mode 100644
index 0000000..b4a0039
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/account-types_asset.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/account-types_cash.svgz b/kmymoney2/icons/Tango/scalable/account-types_cash.svgz
new file mode 100644
index 0000000..1b9060c
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/account-types_cash.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/account-types_checking.svgz b/kmymoney2/icons/Tango/scalable/account-types_checking.svgz
new file mode 100644
index 0000000..00f97b3
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/account-types_checking.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/account-types_closed.svgz b/kmymoney2/icons/Tango/scalable/account-types_closed.svgz
new file mode 100644
index 0000000..619992c
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/account-types_closed.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/account-types_credit-card.svgz b/kmymoney2/icons/Tango/scalable/account-types_credit-card.svgz
new file mode 100644
index 0000000..3c0e50d
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/account-types_credit-card.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/account-types_expense.svgz b/kmymoney2/icons/Tango/scalable/account-types_expense.svgz
new file mode 100644
index 0000000..290a7c0
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/account-types_expense.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/account-types_income.svgz b/kmymoney2/icons/Tango/scalable/account-types_income.svgz
new file mode 100644
index 0000000..57f7cdb
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/account-types_income.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/account-types_investments.svgz b/kmymoney2/icons/Tango/scalable/account-types_investments.svgz
new file mode 100644
index 0000000..d152c2d
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/account-types_investments.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/account-types_liability.svgz b/kmymoney2/icons/Tango/scalable/account-types_liability.svgz
new file mode 100644
index 0000000..2ff3771
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/account-types_liability.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/account-types_loan.svgz b/kmymoney2/icons/Tango/scalable/account-types_loan.svgz
new file mode 100644
index 0000000..00efd5e
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/account-types_loan.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/account-types_savings.svgz b/kmymoney2/icons/Tango/scalable/account-types_savings.svgz
new file mode 100644
index 0000000..f56f44e
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/account-types_savings.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/account.svgz b/kmymoney2/icons/Tango/scalable/account.svgz
new file mode 100644
index 0000000..fe49ce8
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/account.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/account_add.svgz b/kmymoney2/icons/Tango/scalable/account_add.svgz
new file mode 100644
index 0000000..e1f33d2
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/account_add.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/accounts.svgz b/kmymoney2/icons/Tango/scalable/accounts.svgz
new file mode 100644
index 0000000..fe49ce8
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/accounts.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/backup.svgz b/kmymoney2/icons/Tango/scalable/backup.svgz
new file mode 100644
index 0000000..bc31903
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/backup.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/bank.svgz b/kmymoney2/icons/Tango/scalable/bank.svgz
new file mode 100644
index 0000000..fe49ce8
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/bank.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/budget.svgz b/kmymoney2/icons/Tango/scalable/budget.svgz
new file mode 100644
index 0000000..f17906a
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/budget.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/categories.svgz b/kmymoney2/icons/Tango/scalable/categories.svgz
new file mode 100644
index 0000000..dea910a
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/categories.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/forcast.svgz b/kmymoney2/icons/Tango/scalable/forcast.svgz
new file mode 100644
index 0000000..d156f0f
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/forcast.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/hide_categories.svgz b/kmymoney2/icons/Tango/scalable/hide_categories.svgz
new file mode 100644
index 0000000..74a5264
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/hide_categories.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/hide_reconciled.svgz b/kmymoney2/icons/Tango/scalable/hide_reconciled.svgz
new file mode 100644
index 0000000..a483b48
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/hide_reconciled.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/institution_add.svgz b/kmymoney2/icons/Tango/scalable/institution_add.svgz
new file mode 100644
index 0000000..2c91c73
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/institution_add.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/institutions.svgz b/kmymoney2/icons/Tango/scalable/institutions.svgz
new file mode 100644
index 0000000..5733e25
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/institutions.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/investments.svgz b/kmymoney2/icons/Tango/scalable/investments.svgz
new file mode 100644
index 0000000..d152c2d
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/investments.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/ledger.svgz b/kmymoney2/icons/Tango/scalable/ledger.svgz
new file mode 100644
index 0000000..2302d00
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/ledger.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/onlinebanking.svgz b/kmymoney2/icons/Tango/scalable/onlinebanking.svgz
new file mode 100644
index 0000000..f1032c0
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/onlinebanking.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/payee.svgz b/kmymoney2/icons/Tango/scalable/payee.svgz
new file mode 100644
index 0000000..c039c79
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/payee.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/personal_data.svgz b/kmymoney2/icons/Tango/scalable/personal_data.svgz
new file mode 100644
index 0000000..6438c3a
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/personal_data.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/reconcile.svgz b/kmymoney2/icons/Tango/scalable/reconcile.svgz
new file mode 100644
index 0000000..7025964
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/reconcile.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/report.svgz b/kmymoney2/icons/Tango/scalable/report.svgz
new file mode 100644
index 0000000..ca68980
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/report.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/schedule.svgz b/kmymoney2/icons/Tango/scalable/schedule.svgz
new file mode 100644
index 0000000..d7007a5
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/schedule.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/transaction_find.svgz b/kmymoney2/icons/Tango/scalable/transaction_find.svgz
new file mode 100644
index 0000000..343e90f
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/transaction_find.svgz
Binary files differ
diff --git a/kmymoney2/icons/Tango/scalable/view_info.svgz b/kmymoney2/icons/Tango/scalable/view_info.svgz
new file mode 100644
index 0000000..faf451d
--- /dev/null
+++ b/kmymoney2/icons/Tango/scalable/view_info.svgz
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/Makefile.am b/kmymoney2/icons/hicolor/16x16/Makefile.am
new file mode 100644
index 0000000..cb1ac82
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/Makefile.am
@@ -0,0 +1,8 @@
+SUBDIRS = actions
+
+LOCAL_DIR=kmymoney2/icons/hicolor/16x16
+
+uninstall-local:
+ for i in $(SUBDIRS); do \
+ rm -rf $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR)/$$i; \
+ done
diff --git a/kmymoney2/icons/hicolor/16x16/actions/Makefile.am b/kmymoney2/icons/hicolor/16x16/actions/Makefile.am
new file mode 100644
index 0000000..6073bb0
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/Makefile.am
@@ -0,0 +1,17 @@
+
+LOCAL_DIR=kmymoney2/icons/hicolor/16x16/actions
+
+FILES = bank.png categories.png pay_edit.png transaction_export.png transaction_find.png transaction_import.png reconcile.png backup.png close_window.png delete.png personal_data.png transaction.png view_info.png account_add.png account_open.png ledger.png account-type_asset.png account-type_liability.png account-type_expense.png account-type_income.png institution_add.png unreconciled.png hide_categories.png hide_reconciled.png update_prices.png split_transaction.png
+
+install-data-local:
+ $(mkinstalldirs) $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR)
+ for file in $(FILES); do \
+ $(INSTALL_DATA) $(srcdir)/$$file $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR); \
+ done
+
+
+uninstall-local:
+ for file in $(FILES); do \
+ rm -f $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR)/$$file; \
+ done
+
diff --git a/kmymoney2/icons/hicolor/16x16/actions/account-type_asset.png b/kmymoney2/icons/hicolor/16x16/actions/account-type_asset.png
new file mode 100644
index 0000000..fdfff9f
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/account-type_asset.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/actions/account-type_expense.png b/kmymoney2/icons/hicolor/16x16/actions/account-type_expense.png
new file mode 100644
index 0000000..1ae99e9
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/account-type_expense.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/actions/account-type_income.png b/kmymoney2/icons/hicolor/16x16/actions/account-type_income.png
new file mode 100644
index 0000000..7cb9c7a
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/account-type_income.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/actions/account-type_liability.png b/kmymoney2/icons/hicolor/16x16/actions/account-type_liability.png
new file mode 100644
index 0000000..3c083f3
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/account-type_liability.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/actions/account_add.png b/kmymoney2/icons/hicolor/16x16/actions/account_add.png
new file mode 100644
index 0000000..8f826ce
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/account_add.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/actions/account_open.png b/kmymoney2/icons/hicolor/16x16/actions/account_open.png
new file mode 100644
index 0000000..9d58c5c
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/account_open.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/actions/backup.png b/kmymoney2/icons/hicolor/16x16/actions/backup.png
new file mode 100644
index 0000000..71dab66
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/backup.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/actions/bank.png b/kmymoney2/icons/hicolor/16x16/actions/bank.png
new file mode 100644
index 0000000..4918b7f
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/bank.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/actions/categories.png b/kmymoney2/icons/hicolor/16x16/actions/categories.png
new file mode 100644
index 0000000..5dda50f
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/categories.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/actions/close_window.png b/kmymoney2/icons/hicolor/16x16/actions/close_window.png
new file mode 100644
index 0000000..50003a4
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/close_window.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/actions/delete.png b/kmymoney2/icons/hicolor/16x16/actions/delete.png
new file mode 100644
index 0000000..a51e735
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/delete.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/actions/hide_categories.png b/kmymoney2/icons/hicolor/16x16/actions/hide_categories.png
new file mode 100644
index 0000000..5cc1c35
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/hide_categories.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/actions/hide_reconciled.png b/kmymoney2/icons/hicolor/16x16/actions/hide_reconciled.png
new file mode 100644
index 0000000..4800c1e
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/hide_reconciled.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/actions/institution_add.png b/kmymoney2/icons/hicolor/16x16/actions/institution_add.png
new file mode 100644
index 0000000..7379d45
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/institution_add.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/actions/ledger.png b/kmymoney2/icons/hicolor/16x16/actions/ledger.png
new file mode 100644
index 0000000..e5fd55d
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/ledger.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/actions/pay_edit.png b/kmymoney2/icons/hicolor/16x16/actions/pay_edit.png
new file mode 100644
index 0000000..7b26ed5
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/pay_edit.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/actions/personal_data.png b/kmymoney2/icons/hicolor/16x16/actions/personal_data.png
new file mode 100644
index 0000000..937c61f
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/personal_data.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/actions/reconcile.png b/kmymoney2/icons/hicolor/16x16/actions/reconcile.png
new file mode 100644
index 0000000..1433cc3
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/reconcile.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/actions/split_transaction.png b/kmymoney2/icons/hicolor/16x16/actions/split_transaction.png
new file mode 100644
index 0000000..0602343
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/split_transaction.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/actions/transaction.png b/kmymoney2/icons/hicolor/16x16/actions/transaction.png
new file mode 100644
index 0000000..3e12f68
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/transaction.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/actions/transaction_export.png b/kmymoney2/icons/hicolor/16x16/actions/transaction_export.png
new file mode 100644
index 0000000..78f390e
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/transaction_export.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/actions/transaction_find.png b/kmymoney2/icons/hicolor/16x16/actions/transaction_find.png
new file mode 100644
index 0000000..1066d61
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/transaction_find.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/actions/transaction_import.png b/kmymoney2/icons/hicolor/16x16/actions/transaction_import.png
new file mode 100644
index 0000000..bf4eb18
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/transaction_import.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/actions/unreconciled.png b/kmymoney2/icons/hicolor/16x16/actions/unreconciled.png
new file mode 100644
index 0000000..e7f7c28
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/unreconciled.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/actions/update_prices.png b/kmymoney2/icons/hicolor/16x16/actions/update_prices.png
new file mode 100644
index 0000000..9122c95
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/update_prices.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/16x16/actions/view_info.png b/kmymoney2/icons/hicolor/16x16/actions/view_info.png
new file mode 100644
index 0000000..882ec10
--- /dev/null
+++ b/kmymoney2/icons/hicolor/16x16/actions/view_info.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/Makefile.am b/kmymoney2/icons/hicolor/22x22/Makefile.am
new file mode 100644
index 0000000..13a8aee
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/Makefile.am
@@ -0,0 +1,8 @@
+SUBDIRS = actions
+
+LOCAL_DIR=kmymoney2/icons/hicolor/22x22
+
+uninstall-local:
+ for i in $(SUBDIRS); do \
+ rm -rf $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR)/$$i; \
+ done
diff --git a/kmymoney2/icons/hicolor/22x22/actions/Makefile.am b/kmymoney2/icons/hicolor/22x22/actions/Makefile.am
new file mode 100644
index 0000000..6344545
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/Makefile.am
@@ -0,0 +1,17 @@
+
+LOCAL_DIR=kmymoney2/icons/hicolor/22x22/actions
+
+FILES = bank.png categories.png pay_edit.png transaction_export.png transaction_find.png transaction_import.png reconcile.png backup.png close_window.png delete.png personal_data.png transaction.png view_info.png account_add.png account_open.png ledger.png account-types_asset.png account-types_liability.png account-types_expense.png account-types_income.png institution_add.png unreconciled.png account-types_closed.png hide_categories.png hide_reconciled.png update_prices.png account-types_reconcile.png attention.png account-types_online.png
+
+install-data-local:
+ $(mkinstalldirs) $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR)
+ for file in $(FILES); do \
+ $(INSTALL_DATA) $(srcdir)/$$file $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR); \
+ done
+
+
+uninstall-local:
+ for file in $(FILES); do \
+ rm -f $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR)/$$file; \
+ done
+
diff --git a/kmymoney2/icons/hicolor/22x22/actions/account-types_asset.png b/kmymoney2/icons/hicolor/22x22/actions/account-types_asset.png
new file mode 100644
index 0000000..0483be2
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/account-types_asset.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/account-types_closed.png b/kmymoney2/icons/hicolor/22x22/actions/account-types_closed.png
new file mode 100644
index 0000000..6ace80a
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/account-types_closed.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/account-types_expense.png b/kmymoney2/icons/hicolor/22x22/actions/account-types_expense.png
new file mode 100644
index 0000000..9379f83
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/account-types_expense.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/account-types_income.png b/kmymoney2/icons/hicolor/22x22/actions/account-types_income.png
new file mode 100644
index 0000000..2a22b28
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/account-types_income.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/account-types_liability.png b/kmymoney2/icons/hicolor/22x22/actions/account-types_liability.png
new file mode 100644
index 0000000..9e750e2
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/account-types_liability.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/account-types_online.png b/kmymoney2/icons/hicolor/22x22/actions/account-types_online.png
new file mode 100644
index 0000000..22fb143
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/account-types_online.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/account-types_reconcile.png b/kmymoney2/icons/hicolor/22x22/actions/account-types_reconcile.png
new file mode 100644
index 0000000..690abb2
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/account-types_reconcile.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/account_add.png b/kmymoney2/icons/hicolor/22x22/actions/account_add.png
new file mode 100644
index 0000000..271d3f8
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/account_add.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/account_open.png b/kmymoney2/icons/hicolor/22x22/actions/account_open.png
new file mode 100644
index 0000000..8c27082
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/account_open.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/attention.png b/kmymoney2/icons/hicolor/22x22/actions/attention.png
new file mode 100644
index 0000000..e118279
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/attention.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/backup.png b/kmymoney2/icons/hicolor/22x22/actions/backup.png
new file mode 100644
index 0000000..7fe56b6
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/backup.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/bank.png b/kmymoney2/icons/hicolor/22x22/actions/bank.png
new file mode 100644
index 0000000..fa494ff
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/bank.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/categories.png b/kmymoney2/icons/hicolor/22x22/actions/categories.png
new file mode 100644
index 0000000..0804448
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/categories.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/cleared.png b/kmymoney2/icons/hicolor/22x22/actions/cleared.png
new file mode 100644
index 0000000..b5690c9
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/cleared.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/close_window.png b/kmymoney2/icons/hicolor/22x22/actions/close_window.png
new file mode 100644
index 0000000..9108ee7
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/close_window.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/delete.png b/kmymoney2/icons/hicolor/22x22/actions/delete.png
new file mode 100644
index 0000000..1fe162e
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/delete.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/hide_categories.png b/kmymoney2/icons/hicolor/22x22/actions/hide_categories.png
new file mode 100644
index 0000000..b044e16
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/hide_categories.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/hide_reconciled.png b/kmymoney2/icons/hicolor/22x22/actions/hide_reconciled.png
new file mode 100644
index 0000000..1bcd345
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/hide_reconciled.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/institution_add.png b/kmymoney2/icons/hicolor/22x22/actions/institution_add.png
new file mode 100644
index 0000000..ac1d258
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/institution_add.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/ledger.png b/kmymoney2/icons/hicolor/22x22/actions/ledger.png
new file mode 100644
index 0000000..49477da
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/ledger.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/pay_edit.png b/kmymoney2/icons/hicolor/22x22/actions/pay_edit.png
new file mode 100644
index 0000000..2d82c6b
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/pay_edit.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/personal_data.png b/kmymoney2/icons/hicolor/22x22/actions/personal_data.png
new file mode 100644
index 0000000..5ae2d71
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/personal_data.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/reconcile.png b/kmymoney2/icons/hicolor/22x22/actions/reconcile.png
new file mode 100644
index 0000000..80911e6
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/reconcile.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/report-bar.png b/kmymoney2/icons/hicolor/22x22/actions/report-bar.png
new file mode 100644
index 0000000..b2d1782
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/report-bar.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/report-line.png b/kmymoney2/icons/hicolor/22x22/actions/report-line.png
new file mode 100644
index 0000000..9d506dc
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/report-line.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/report-pie.png b/kmymoney2/icons/hicolor/22x22/actions/report-pie.png
new file mode 100644
index 0000000..0cd8577
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/report-pie.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/report-solid.png b/kmymoney2/icons/hicolor/22x22/actions/report-solid.png
new file mode 100644
index 0000000..d89cd7b
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/report-solid.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/report-text.png b/kmymoney2/icons/hicolor/22x22/actions/report-text.png
new file mode 100644
index 0000000..5d53e1a
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/report-text.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/set_as.png b/kmymoney2/icons/hicolor/22x22/actions/set_as.png
new file mode 100644
index 0000000..b5690c9
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/set_as.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/transaction.png b/kmymoney2/icons/hicolor/22x22/actions/transaction.png
new file mode 100644
index 0000000..b95eafd
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/transaction.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/transaction_export.png b/kmymoney2/icons/hicolor/22x22/actions/transaction_export.png
new file mode 100644
index 0000000..fe7681f
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/transaction_export.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/transaction_find.png b/kmymoney2/icons/hicolor/22x22/actions/transaction_find.png
new file mode 100644
index 0000000..4cba2df
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/transaction_find.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/transaction_import.png b/kmymoney2/icons/hicolor/22x22/actions/transaction_import.png
new file mode 100644
index 0000000..ebd7d85
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/transaction_import.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/unreconciled.png b/kmymoney2/icons/hicolor/22x22/actions/unreconciled.png
new file mode 100644
index 0000000..004a3ec
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/unreconciled.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/update_prices.png b/kmymoney2/icons/hicolor/22x22/actions/update_prices.png
new file mode 100644
index 0000000..a69578a
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/update_prices.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/22x22/actions/view_info.png b/kmymoney2/icons/hicolor/22x22/actions/view_info.png
new file mode 100644
index 0000000..e4a9962
--- /dev/null
+++ b/kmymoney2/icons/hicolor/22x22/actions/view_info.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/32x32/Makefile.am b/kmymoney2/icons/hicolor/32x32/Makefile.am
new file mode 100644
index 0000000..1907dee
--- /dev/null
+++ b/kmymoney2/icons/hicolor/32x32/Makefile.am
@@ -0,0 +1,8 @@
+SUBDIRS = apps
+
+LOCAL_DIR=kmymoney2/icons/hicolor/32x32
+
+uninstall-local:
+ for i in $(SUBDIRS); do \
+ rm -rf $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR)/$$i; \
+ done
diff --git a/kmymoney2/icons/hicolor/32x32/apps/Makefile.am b/kmymoney2/icons/hicolor/32x32/apps/Makefile.am
new file mode 100644
index 0000000..adab201
--- /dev/null
+++ b/kmymoney2/icons/hicolor/32x32/apps/Makefile.am
@@ -0,0 +1,18 @@
+
+LOCAL_DIR = kmymoney2/icons/hicolor/32x32/apps
+
+FILES = accounts.png account-types_asset.png account-types_cash.png account-types_checking.png account-types_credit-card.png account-types_investments.png account-types_liability.png account-types_loan.png account-types_savings.png categories.png forcast.png home.png institutions.png investments.png ledger.png payee.png report.png schedule.png onlinebanking.png budget.png account-types_reconciled.png
+
+install-data-local:
+ $(mkinstalldirs) $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR)
+ for file in $(FILES); do \
+ $(INSTALL_DATA) $(srcdir)/$$file $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR); \
+ done
+
+
+uninstall-local:
+ for file in $(FILES); do \
+ rm -f $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR)/$$file; \
+ done
+
+
diff --git a/kmymoney2/icons/hicolor/32x32/apps/account-types_asset.png b/kmymoney2/icons/hicolor/32x32/apps/account-types_asset.png
new file mode 100644
index 0000000..62b30fb
--- /dev/null
+++ b/kmymoney2/icons/hicolor/32x32/apps/account-types_asset.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/32x32/apps/account-types_cash.png b/kmymoney2/icons/hicolor/32x32/apps/account-types_cash.png
new file mode 100644
index 0000000..b10c8cc
--- /dev/null
+++ b/kmymoney2/icons/hicolor/32x32/apps/account-types_cash.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/32x32/apps/account-types_checking.png b/kmymoney2/icons/hicolor/32x32/apps/account-types_checking.png
new file mode 100644
index 0000000..92820ff
--- /dev/null
+++ b/kmymoney2/icons/hicolor/32x32/apps/account-types_checking.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/32x32/apps/account-types_credit-card.png b/kmymoney2/icons/hicolor/32x32/apps/account-types_credit-card.png
new file mode 100644
index 0000000..6636200
--- /dev/null
+++ b/kmymoney2/icons/hicolor/32x32/apps/account-types_credit-card.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/32x32/apps/account-types_investments.png b/kmymoney2/icons/hicolor/32x32/apps/account-types_investments.png
new file mode 100644
index 0000000..57e0d65
--- /dev/null
+++ b/kmymoney2/icons/hicolor/32x32/apps/account-types_investments.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/32x32/apps/account-types_liability.png b/kmymoney2/icons/hicolor/32x32/apps/account-types_liability.png
new file mode 100644
index 0000000..93ff071
--- /dev/null
+++ b/kmymoney2/icons/hicolor/32x32/apps/account-types_liability.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/32x32/apps/account-types_loan.png b/kmymoney2/icons/hicolor/32x32/apps/account-types_loan.png
new file mode 100644
index 0000000..6e475cc
--- /dev/null
+++ b/kmymoney2/icons/hicolor/32x32/apps/account-types_loan.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/32x32/apps/account-types_reconciled.png b/kmymoney2/icons/hicolor/32x32/apps/account-types_reconciled.png
new file mode 100644
index 0000000..3be1a71
--- /dev/null
+++ b/kmymoney2/icons/hicolor/32x32/apps/account-types_reconciled.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/32x32/apps/account-types_savings.png b/kmymoney2/icons/hicolor/32x32/apps/account-types_savings.png
new file mode 100644
index 0000000..6a528a3
--- /dev/null
+++ b/kmymoney2/icons/hicolor/32x32/apps/account-types_savings.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/32x32/apps/accounts.png b/kmymoney2/icons/hicolor/32x32/apps/accounts.png
new file mode 100644
index 0000000..86199c4
--- /dev/null
+++ b/kmymoney2/icons/hicolor/32x32/apps/accounts.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/32x32/apps/budget.png b/kmymoney2/icons/hicolor/32x32/apps/budget.png
new file mode 100644
index 0000000..3d39241
--- /dev/null
+++ b/kmymoney2/icons/hicolor/32x32/apps/budget.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/32x32/apps/categories.png b/kmymoney2/icons/hicolor/32x32/apps/categories.png
new file mode 100644
index 0000000..dd030a7
--- /dev/null
+++ b/kmymoney2/icons/hicolor/32x32/apps/categories.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/32x32/apps/forcast.png b/kmymoney2/icons/hicolor/32x32/apps/forcast.png
new file mode 100644
index 0000000..43df58a
--- /dev/null
+++ b/kmymoney2/icons/hicolor/32x32/apps/forcast.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/32x32/apps/home.png b/kmymoney2/icons/hicolor/32x32/apps/home.png
new file mode 100644
index 0000000..baa8912
--- /dev/null
+++ b/kmymoney2/icons/hicolor/32x32/apps/home.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/32x32/apps/institutions.png b/kmymoney2/icons/hicolor/32x32/apps/institutions.png
new file mode 100644
index 0000000..7a46aff
--- /dev/null
+++ b/kmymoney2/icons/hicolor/32x32/apps/institutions.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/32x32/apps/investments.png b/kmymoney2/icons/hicolor/32x32/apps/investments.png
new file mode 100644
index 0000000..8dd81fe
--- /dev/null
+++ b/kmymoney2/icons/hicolor/32x32/apps/investments.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/32x32/apps/ledger.png b/kmymoney2/icons/hicolor/32x32/apps/ledger.png
new file mode 100644
index 0000000..e93b6c7
--- /dev/null
+++ b/kmymoney2/icons/hicolor/32x32/apps/ledger.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/32x32/apps/onlinebanking.png b/kmymoney2/icons/hicolor/32x32/apps/onlinebanking.png
new file mode 100644
index 0000000..9190f0a
--- /dev/null
+++ b/kmymoney2/icons/hicolor/32x32/apps/onlinebanking.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/32x32/apps/payee.png b/kmymoney2/icons/hicolor/32x32/apps/payee.png
new file mode 100644
index 0000000..ce926ac
--- /dev/null
+++ b/kmymoney2/icons/hicolor/32x32/apps/payee.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/32x32/apps/report.png b/kmymoney2/icons/hicolor/32x32/apps/report.png
new file mode 100644
index 0000000..fd3094d
--- /dev/null
+++ b/kmymoney2/icons/hicolor/32x32/apps/report.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/32x32/apps/schedule.png b/kmymoney2/icons/hicolor/32x32/apps/schedule.png
new file mode 100644
index 0000000..aa8d318
--- /dev/null
+++ b/kmymoney2/icons/hicolor/32x32/apps/schedule.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/48x48/Makefile.am b/kmymoney2/icons/hicolor/48x48/Makefile.am
new file mode 100644
index 0000000..d18fb92
--- /dev/null
+++ b/kmymoney2/icons/hicolor/48x48/Makefile.am
@@ -0,0 +1,8 @@
+SUBDIRS = apps
+
+LOCAL_DIR=kmymoney2/icons/hicolor/48x48
+
+uninstall-local:
+ for i in $(SUBDIRS); do \
+ rm -rf $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR)/$$i; \
+ done
diff --git a/kmymoney2/icons/hicolor/48x48/apps/Makefile.am b/kmymoney2/icons/hicolor/48x48/apps/Makefile.am
new file mode 100644
index 0000000..cd9f057
--- /dev/null
+++ b/kmymoney2/icons/hicolor/48x48/apps/Makefile.am
@@ -0,0 +1,18 @@
+
+LOCAL_DIR = kmymoney2/icons/hicolor/48x48/apps
+
+FILES = accounts.png account-types_asset.png account-types_cash.png account-types_checking.png account-types_credit-card.png account-types_investment.png account-types_liability.png account-types_loan.png account-types_savings.png categories.png forcast.png home.png institutions.png investments.png ledger.png payee.png report.png schedule.png onlinebanking.png budget.png
+
+install-data-local:
+ $(mkinstalldirs) $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR)
+ for file in $(FILES); do \
+ $(INSTALL_DATA) $(srcdir)/$$file $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR); \
+ done
+
+
+uninstall-local:
+ for file in $(FILES); do \
+ rm -f $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR)/$$file; \
+ done
+
+
diff --git a/kmymoney2/icons/hicolor/48x48/apps/account-types_asset.png b/kmymoney2/icons/hicolor/48x48/apps/account-types_asset.png
new file mode 100644
index 0000000..fc2a8a9
--- /dev/null
+++ b/kmymoney2/icons/hicolor/48x48/apps/account-types_asset.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/48x48/apps/account-types_cash.png b/kmymoney2/icons/hicolor/48x48/apps/account-types_cash.png
new file mode 100644
index 0000000..d9ba5f7
--- /dev/null
+++ b/kmymoney2/icons/hicolor/48x48/apps/account-types_cash.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/48x48/apps/account-types_checking.png b/kmymoney2/icons/hicolor/48x48/apps/account-types_checking.png
new file mode 100644
index 0000000..5e7c3f3
--- /dev/null
+++ b/kmymoney2/icons/hicolor/48x48/apps/account-types_checking.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/48x48/apps/account-types_credit-card.png b/kmymoney2/icons/hicolor/48x48/apps/account-types_credit-card.png
new file mode 100644
index 0000000..5d73911
--- /dev/null
+++ b/kmymoney2/icons/hicolor/48x48/apps/account-types_credit-card.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/48x48/apps/account-types_investment.png b/kmymoney2/icons/hicolor/48x48/apps/account-types_investment.png
new file mode 100644
index 0000000..d2c7101
--- /dev/null
+++ b/kmymoney2/icons/hicolor/48x48/apps/account-types_investment.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/48x48/apps/account-types_liability.png b/kmymoney2/icons/hicolor/48x48/apps/account-types_liability.png
new file mode 100644
index 0000000..5971fbc
--- /dev/null
+++ b/kmymoney2/icons/hicolor/48x48/apps/account-types_liability.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/48x48/apps/account-types_loan.png b/kmymoney2/icons/hicolor/48x48/apps/account-types_loan.png
new file mode 100644
index 0000000..e0ef75d
--- /dev/null
+++ b/kmymoney2/icons/hicolor/48x48/apps/account-types_loan.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/48x48/apps/account-types_savings.png b/kmymoney2/icons/hicolor/48x48/apps/account-types_savings.png
new file mode 100644
index 0000000..421b049
--- /dev/null
+++ b/kmymoney2/icons/hicolor/48x48/apps/account-types_savings.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/48x48/apps/accounts.png b/kmymoney2/icons/hicolor/48x48/apps/accounts.png
new file mode 100644
index 0000000..46bb27a
--- /dev/null
+++ b/kmymoney2/icons/hicolor/48x48/apps/accounts.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/48x48/apps/budget.png b/kmymoney2/icons/hicolor/48x48/apps/budget.png
new file mode 100644
index 0000000..84c78a0
--- /dev/null
+++ b/kmymoney2/icons/hicolor/48x48/apps/budget.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/48x48/apps/categories.png b/kmymoney2/icons/hicolor/48x48/apps/categories.png
new file mode 100644
index 0000000..3763121
--- /dev/null
+++ b/kmymoney2/icons/hicolor/48x48/apps/categories.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/48x48/apps/forcast.png b/kmymoney2/icons/hicolor/48x48/apps/forcast.png
new file mode 100644
index 0000000..7c220ca
--- /dev/null
+++ b/kmymoney2/icons/hicolor/48x48/apps/forcast.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/48x48/apps/home.png b/kmymoney2/icons/hicolor/48x48/apps/home.png
new file mode 100644
index 0000000..d08e6ab
--- /dev/null
+++ b/kmymoney2/icons/hicolor/48x48/apps/home.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/48x48/apps/institutions.png b/kmymoney2/icons/hicolor/48x48/apps/institutions.png
new file mode 100644
index 0000000..c5fe486
--- /dev/null
+++ b/kmymoney2/icons/hicolor/48x48/apps/institutions.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/48x48/apps/investments.png b/kmymoney2/icons/hicolor/48x48/apps/investments.png
new file mode 100644
index 0000000..a8f9970
--- /dev/null
+++ b/kmymoney2/icons/hicolor/48x48/apps/investments.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/48x48/apps/ledger.png b/kmymoney2/icons/hicolor/48x48/apps/ledger.png
new file mode 100644
index 0000000..49a7f09
--- /dev/null
+++ b/kmymoney2/icons/hicolor/48x48/apps/ledger.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/48x48/apps/onlinebanking.png b/kmymoney2/icons/hicolor/48x48/apps/onlinebanking.png
new file mode 100644
index 0000000..b85a090
--- /dev/null
+++ b/kmymoney2/icons/hicolor/48x48/apps/onlinebanking.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/48x48/apps/payee.png b/kmymoney2/icons/hicolor/48x48/apps/payee.png
new file mode 100644
index 0000000..75807e5
--- /dev/null
+++ b/kmymoney2/icons/hicolor/48x48/apps/payee.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/48x48/apps/report.png b/kmymoney2/icons/hicolor/48x48/apps/report.png
new file mode 100644
index 0000000..94369c6
--- /dev/null
+++ b/kmymoney2/icons/hicolor/48x48/apps/report.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/48x48/apps/schedule.png b/kmymoney2/icons/hicolor/48x48/apps/schedule.png
new file mode 100644
index 0000000..ed65196
--- /dev/null
+++ b/kmymoney2/icons/hicolor/48x48/apps/schedule.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/64x64/Makefile.am b/kmymoney2/icons/hicolor/64x64/Makefile.am
new file mode 100644
index 0000000..e5c1f4d
--- /dev/null
+++ b/kmymoney2/icons/hicolor/64x64/Makefile.am
@@ -0,0 +1,8 @@
+SUBDIRS = apps
+
+LOCAL_DIR=kmymoney2/icons/hicolor/64x64
+
+uninstall-local:
+ for i in $(SUBDIRS); do \
+ rm -rf $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR)/$$i; \
+ done
diff --git a/kmymoney2/icons/hicolor/64x64/apps/Makefile.am b/kmymoney2/icons/hicolor/64x64/apps/Makefile.am
new file mode 100644
index 0000000..7b8afca
--- /dev/null
+++ b/kmymoney2/icons/hicolor/64x64/apps/Makefile.am
@@ -0,0 +1,18 @@
+
+LOCAL_DIR = kmymoney2/icons/hicolor/64x64/apps
+
+FILES = accounts.png account-types_asset.png account-types_cash.png account-types_checking.png account-types_credit-card.png account-types_investments.png account-types_liability.png account-types_loan.png account-types_savings.png categories.png forcast.png home.png institutions.png investments.png ledger.png payee.png report.png schedule.png onlinebanking.png budget.png
+
+install-data-local:
+ $(mkinstalldirs) $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR)
+ for file in $(FILES); do \
+ $(INSTALL_DATA) $(srcdir)/$$file $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR); \
+ done
+
+
+uninstall-local:
+ for file in $(FILES); do \
+ rm -f $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR)/$$file; \
+ done
+
+
diff --git a/kmymoney2/icons/hicolor/64x64/apps/account-types_asset.png b/kmymoney2/icons/hicolor/64x64/apps/account-types_asset.png
new file mode 100644
index 0000000..0eff909
--- /dev/null
+++ b/kmymoney2/icons/hicolor/64x64/apps/account-types_asset.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/64x64/apps/account-types_cash.png b/kmymoney2/icons/hicolor/64x64/apps/account-types_cash.png
new file mode 100644
index 0000000..397780b
--- /dev/null
+++ b/kmymoney2/icons/hicolor/64x64/apps/account-types_cash.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/64x64/apps/account-types_checking.png b/kmymoney2/icons/hicolor/64x64/apps/account-types_checking.png
new file mode 100644
index 0000000..56b3ae5
--- /dev/null
+++ b/kmymoney2/icons/hicolor/64x64/apps/account-types_checking.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/64x64/apps/account-types_credit-card.png b/kmymoney2/icons/hicolor/64x64/apps/account-types_credit-card.png
new file mode 100644
index 0000000..12e5788
--- /dev/null
+++ b/kmymoney2/icons/hicolor/64x64/apps/account-types_credit-card.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/64x64/apps/account-types_investments.png b/kmymoney2/icons/hicolor/64x64/apps/account-types_investments.png
new file mode 100644
index 0000000..b345061
--- /dev/null
+++ b/kmymoney2/icons/hicolor/64x64/apps/account-types_investments.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/64x64/apps/account-types_liability.png b/kmymoney2/icons/hicolor/64x64/apps/account-types_liability.png
new file mode 100644
index 0000000..92d0d75
--- /dev/null
+++ b/kmymoney2/icons/hicolor/64x64/apps/account-types_liability.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/64x64/apps/account-types_loan.png b/kmymoney2/icons/hicolor/64x64/apps/account-types_loan.png
new file mode 100644
index 0000000..93cac29
--- /dev/null
+++ b/kmymoney2/icons/hicolor/64x64/apps/account-types_loan.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/64x64/apps/account-types_savings.png b/kmymoney2/icons/hicolor/64x64/apps/account-types_savings.png
new file mode 100644
index 0000000..5f6f96f
--- /dev/null
+++ b/kmymoney2/icons/hicolor/64x64/apps/account-types_savings.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/64x64/apps/accounts.png b/kmymoney2/icons/hicolor/64x64/apps/accounts.png
new file mode 100644
index 0000000..ca002c9
--- /dev/null
+++ b/kmymoney2/icons/hicolor/64x64/apps/accounts.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/64x64/apps/budget.png b/kmymoney2/icons/hicolor/64x64/apps/budget.png
new file mode 100644
index 0000000..9177851
--- /dev/null
+++ b/kmymoney2/icons/hicolor/64x64/apps/budget.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/64x64/apps/categories.png b/kmymoney2/icons/hicolor/64x64/apps/categories.png
new file mode 100644
index 0000000..11efdd4
--- /dev/null
+++ b/kmymoney2/icons/hicolor/64x64/apps/categories.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/64x64/apps/forcast.png b/kmymoney2/icons/hicolor/64x64/apps/forcast.png
new file mode 100644
index 0000000..92cb9cd
--- /dev/null
+++ b/kmymoney2/icons/hicolor/64x64/apps/forcast.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/64x64/apps/home.png b/kmymoney2/icons/hicolor/64x64/apps/home.png
new file mode 100644
index 0000000..acf3e4a
--- /dev/null
+++ b/kmymoney2/icons/hicolor/64x64/apps/home.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/64x64/apps/institutions.png b/kmymoney2/icons/hicolor/64x64/apps/institutions.png
new file mode 100644
index 0000000..36db2d9
--- /dev/null
+++ b/kmymoney2/icons/hicolor/64x64/apps/institutions.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/64x64/apps/investments.png b/kmymoney2/icons/hicolor/64x64/apps/investments.png
new file mode 100644
index 0000000..9558979
--- /dev/null
+++ b/kmymoney2/icons/hicolor/64x64/apps/investments.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/64x64/apps/ledger.png b/kmymoney2/icons/hicolor/64x64/apps/ledger.png
new file mode 100644
index 0000000..54c08d4
--- /dev/null
+++ b/kmymoney2/icons/hicolor/64x64/apps/ledger.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/64x64/apps/onlinebanking.png b/kmymoney2/icons/hicolor/64x64/apps/onlinebanking.png
new file mode 100644
index 0000000..719895c
--- /dev/null
+++ b/kmymoney2/icons/hicolor/64x64/apps/onlinebanking.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/64x64/apps/payee.png b/kmymoney2/icons/hicolor/64x64/apps/payee.png
new file mode 100644
index 0000000..840afa9
--- /dev/null
+++ b/kmymoney2/icons/hicolor/64x64/apps/payee.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/64x64/apps/report.png b/kmymoney2/icons/hicolor/64x64/apps/report.png
new file mode 100644
index 0000000..580af91
--- /dev/null
+++ b/kmymoney2/icons/hicolor/64x64/apps/report.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/64x64/apps/schedule.png b/kmymoney2/icons/hicolor/64x64/apps/schedule.png
new file mode 100644
index 0000000..d5b7912
--- /dev/null
+++ b/kmymoney2/icons/hicolor/64x64/apps/schedule.png
Binary files differ
diff --git a/kmymoney2/icons/hicolor/Makefile.am b/kmymoney2/icons/hicolor/Makefile.am
new file mode 100644
index 0000000..e831a2c
--- /dev/null
+++ b/kmymoney2/icons/hicolor/Makefile.am
@@ -0,0 +1,8 @@
+SUBDIRS = 16x16 22x22 32x32 48x48 64x64
+
+LOCAL_DIR=kmymoney2/icons/hicolor
+
+uninstall-local:
+ for i in $(SUBDIRS); do \
+ rm -rf $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR)/$$i; \
+ done
diff --git a/kmymoney2/icons/oxygen/128x128/Makefile.am b/kmymoney2/icons/oxygen/128x128/Makefile.am
new file mode 100644
index 0000000..284a700
--- /dev/null
+++ b/kmymoney2/icons/oxygen/128x128/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = apps
diff --git a/kmymoney2/icons/oxygen/128x128/apps/Makefile.am b/kmymoney2/icons/oxygen/128x128/apps/Makefile.am
new file mode 100644
index 0000000..38545b3
--- /dev/null
+++ b/kmymoney2/icons/oxygen/128x128/apps/Makefile.am
@@ -0,0 +1,6 @@
+icondir=$(kde_icondir)/oxygen/128x128/apps
+
+icon_DATA = account-add.png accounts.png account-types_asset.png account-types_cash.png account-types_checking.png account-types_closed.png account-types_credit-card.png account-types_investments.png account-types_liability.png account-types_loan.png budget.png categories.png forcast.png institutions.png investments.png ledger.png onlinebanking.png payee.png reconcile.png report.png schedule.png transaction_find.png
+
+EXTRA_DIST = $(icon_DATA)
+
diff --git a/kmymoney2/icons/oxygen/128x128/apps/account-add.png b/kmymoney2/icons/oxygen/128x128/apps/account-add.png
new file mode 100644
index 0000000..6ee87e4
--- /dev/null
+++ b/kmymoney2/icons/oxygen/128x128/apps/account-add.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/128x128/apps/account-types_asset.png b/kmymoney2/icons/oxygen/128x128/apps/account-types_asset.png
new file mode 100644
index 0000000..926bb0f
--- /dev/null
+++ b/kmymoney2/icons/oxygen/128x128/apps/account-types_asset.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/128x128/apps/account-types_cash.png b/kmymoney2/icons/oxygen/128x128/apps/account-types_cash.png
new file mode 100644
index 0000000..42e858e
--- /dev/null
+++ b/kmymoney2/icons/oxygen/128x128/apps/account-types_cash.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/128x128/apps/account-types_checking.png b/kmymoney2/icons/oxygen/128x128/apps/account-types_checking.png
new file mode 100644
index 0000000..856dc8d
--- /dev/null
+++ b/kmymoney2/icons/oxygen/128x128/apps/account-types_checking.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/128x128/apps/account-types_closed.png b/kmymoney2/icons/oxygen/128x128/apps/account-types_closed.png
new file mode 100644
index 0000000..0a2424b
--- /dev/null
+++ b/kmymoney2/icons/oxygen/128x128/apps/account-types_closed.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/128x128/apps/account-types_credit-card.png b/kmymoney2/icons/oxygen/128x128/apps/account-types_credit-card.png
new file mode 100644
index 0000000..442914c
--- /dev/null
+++ b/kmymoney2/icons/oxygen/128x128/apps/account-types_credit-card.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/128x128/apps/account-types_investments.png b/kmymoney2/icons/oxygen/128x128/apps/account-types_investments.png
new file mode 100644
index 0000000..3409195
--- /dev/null
+++ b/kmymoney2/icons/oxygen/128x128/apps/account-types_investments.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/128x128/apps/account-types_liability.png b/kmymoney2/icons/oxygen/128x128/apps/account-types_liability.png
new file mode 100644
index 0000000..d2a12ee
--- /dev/null
+++ b/kmymoney2/icons/oxygen/128x128/apps/account-types_liability.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/128x128/apps/account-types_loan.png b/kmymoney2/icons/oxygen/128x128/apps/account-types_loan.png
new file mode 100644
index 0000000..5b61797
--- /dev/null
+++ b/kmymoney2/icons/oxygen/128x128/apps/account-types_loan.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/128x128/apps/accounts.png b/kmymoney2/icons/oxygen/128x128/apps/accounts.png
new file mode 100644
index 0000000..a331570
--- /dev/null
+++ b/kmymoney2/icons/oxygen/128x128/apps/accounts.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/128x128/apps/budget.png b/kmymoney2/icons/oxygen/128x128/apps/budget.png
new file mode 100644
index 0000000..1e933ca
--- /dev/null
+++ b/kmymoney2/icons/oxygen/128x128/apps/budget.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/128x128/apps/categories.png b/kmymoney2/icons/oxygen/128x128/apps/categories.png
new file mode 100644
index 0000000..f798b1c
--- /dev/null
+++ b/kmymoney2/icons/oxygen/128x128/apps/categories.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/128x128/apps/forcast.png b/kmymoney2/icons/oxygen/128x128/apps/forcast.png
new file mode 100644
index 0000000..03b571a
--- /dev/null
+++ b/kmymoney2/icons/oxygen/128x128/apps/forcast.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/128x128/apps/institutions.png b/kmymoney2/icons/oxygen/128x128/apps/institutions.png
new file mode 100644
index 0000000..e40889c
--- /dev/null
+++ b/kmymoney2/icons/oxygen/128x128/apps/institutions.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/128x128/apps/investments.png b/kmymoney2/icons/oxygen/128x128/apps/investments.png
new file mode 100644
index 0000000..3409195
--- /dev/null
+++ b/kmymoney2/icons/oxygen/128x128/apps/investments.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/128x128/apps/ledger.png b/kmymoney2/icons/oxygen/128x128/apps/ledger.png
new file mode 100644
index 0000000..442079a
--- /dev/null
+++ b/kmymoney2/icons/oxygen/128x128/apps/ledger.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/128x128/apps/onlinebanking.png b/kmymoney2/icons/oxygen/128x128/apps/onlinebanking.png
new file mode 100644
index 0000000..b887aaa
--- /dev/null
+++ b/kmymoney2/icons/oxygen/128x128/apps/onlinebanking.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/128x128/apps/payee.png b/kmymoney2/icons/oxygen/128x128/apps/payee.png
new file mode 100644
index 0000000..ad77914
--- /dev/null
+++ b/kmymoney2/icons/oxygen/128x128/apps/payee.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/128x128/apps/reconcile.png b/kmymoney2/icons/oxygen/128x128/apps/reconcile.png
new file mode 100644
index 0000000..8120fec
--- /dev/null
+++ b/kmymoney2/icons/oxygen/128x128/apps/reconcile.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/128x128/apps/report.png b/kmymoney2/icons/oxygen/128x128/apps/report.png
new file mode 100644
index 0000000..6b5ba61
--- /dev/null
+++ b/kmymoney2/icons/oxygen/128x128/apps/report.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/128x128/apps/schedule.png b/kmymoney2/icons/oxygen/128x128/apps/schedule.png
new file mode 100644
index 0000000..ed998b5
--- /dev/null
+++ b/kmymoney2/icons/oxygen/128x128/apps/schedule.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/128x128/apps/transaction_find.png b/kmymoney2/icons/oxygen/128x128/apps/transaction_find.png
new file mode 100644
index 0000000..cbf37ed
--- /dev/null
+++ b/kmymoney2/icons/oxygen/128x128/apps/transaction_find.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/16x16/Makefile.am b/kmymoney2/icons/oxygen/16x16/Makefile.am
new file mode 100644
index 0000000..2af9bf4
--- /dev/null
+++ b/kmymoney2/icons/oxygen/16x16/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = actions
diff --git a/kmymoney2/icons/oxygen/16x16/actions/Makefile.am b/kmymoney2/icons/oxygen/16x16/actions/Makefile.am
new file mode 100644
index 0000000..5d79467
--- /dev/null
+++ b/kmymoney2/icons/oxygen/16x16/actions/Makefile.am
@@ -0,0 +1,6 @@
+icondir=$(kde_icondir)/oxygen/16x16/actions
+
+icon_DATA = accounts.png account-types_asset.png account-types_cash.png account-types_checking.png account-types_closed.png account-types_credit-card.png account-types_expense.png account-types_income.png account-types_investments.png account-types_liability.png account-types_loan.png account-types_savings.png budget.png forcast.png institutions.png investments.png ledger.png onlinebanking.png payee.png report.png schedule.png
+
+EXTRA_DIST = $(icon_DATA)
+
diff --git a/kmymoney2/icons/oxygen/16x16/actions/account-types_asset.png b/kmymoney2/icons/oxygen/16x16/actions/account-types_asset.png
new file mode 100644
index 0000000..cd85608
--- /dev/null
+++ b/kmymoney2/icons/oxygen/16x16/actions/account-types_asset.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/16x16/actions/account-types_cash.png b/kmymoney2/icons/oxygen/16x16/actions/account-types_cash.png
new file mode 100644
index 0000000..39b0e00
--- /dev/null
+++ b/kmymoney2/icons/oxygen/16x16/actions/account-types_cash.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/16x16/actions/account-types_checking.png b/kmymoney2/icons/oxygen/16x16/actions/account-types_checking.png
new file mode 100644
index 0000000..595f832
--- /dev/null
+++ b/kmymoney2/icons/oxygen/16x16/actions/account-types_checking.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/16x16/actions/account-types_closed.png b/kmymoney2/icons/oxygen/16x16/actions/account-types_closed.png
new file mode 100644
index 0000000..0d26c8e
--- /dev/null
+++ b/kmymoney2/icons/oxygen/16x16/actions/account-types_closed.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/16x16/actions/account-types_credit-card.png b/kmymoney2/icons/oxygen/16x16/actions/account-types_credit-card.png
new file mode 100644
index 0000000..3445468
--- /dev/null
+++ b/kmymoney2/icons/oxygen/16x16/actions/account-types_credit-card.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/16x16/actions/account-types_expense.png b/kmymoney2/icons/oxygen/16x16/actions/account-types_expense.png
new file mode 100644
index 0000000..17e5b10
--- /dev/null
+++ b/kmymoney2/icons/oxygen/16x16/actions/account-types_expense.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/16x16/actions/account-types_income.png b/kmymoney2/icons/oxygen/16x16/actions/account-types_income.png
new file mode 100644
index 0000000..3bd0bd8
--- /dev/null
+++ b/kmymoney2/icons/oxygen/16x16/actions/account-types_income.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/16x16/actions/account-types_investments.png b/kmymoney2/icons/oxygen/16x16/actions/account-types_investments.png
new file mode 100644
index 0000000..9296d9a
--- /dev/null
+++ b/kmymoney2/icons/oxygen/16x16/actions/account-types_investments.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/16x16/actions/account-types_liability.png b/kmymoney2/icons/oxygen/16x16/actions/account-types_liability.png
new file mode 100644
index 0000000..b28cb08
--- /dev/null
+++ b/kmymoney2/icons/oxygen/16x16/actions/account-types_liability.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/16x16/actions/account-types_loan.png b/kmymoney2/icons/oxygen/16x16/actions/account-types_loan.png
new file mode 100644
index 0000000..1dbd958
--- /dev/null
+++ b/kmymoney2/icons/oxygen/16x16/actions/account-types_loan.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/16x16/actions/account-types_savings.png b/kmymoney2/icons/oxygen/16x16/actions/account-types_savings.png
new file mode 100644
index 0000000..444088b
--- /dev/null
+++ b/kmymoney2/icons/oxygen/16x16/actions/account-types_savings.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/16x16/actions/accounts.png b/kmymoney2/icons/oxygen/16x16/actions/accounts.png
new file mode 100644
index 0000000..5c2c5b2
--- /dev/null
+++ b/kmymoney2/icons/oxygen/16x16/actions/accounts.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/16x16/actions/budget.png b/kmymoney2/icons/oxygen/16x16/actions/budget.png
new file mode 100644
index 0000000..2234dae
--- /dev/null
+++ b/kmymoney2/icons/oxygen/16x16/actions/budget.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/16x16/actions/forcast.png b/kmymoney2/icons/oxygen/16x16/actions/forcast.png
new file mode 100644
index 0000000..0685923
--- /dev/null
+++ b/kmymoney2/icons/oxygen/16x16/actions/forcast.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/16x16/actions/institutions.png b/kmymoney2/icons/oxygen/16x16/actions/institutions.png
new file mode 100644
index 0000000..5dd8bd0
--- /dev/null
+++ b/kmymoney2/icons/oxygen/16x16/actions/institutions.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/16x16/actions/investments.png b/kmymoney2/icons/oxygen/16x16/actions/investments.png
new file mode 100644
index 0000000..9296d9a
--- /dev/null
+++ b/kmymoney2/icons/oxygen/16x16/actions/investments.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/16x16/actions/ledger.png b/kmymoney2/icons/oxygen/16x16/actions/ledger.png
new file mode 100644
index 0000000..9f9ee21
--- /dev/null
+++ b/kmymoney2/icons/oxygen/16x16/actions/ledger.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/16x16/actions/onlinebanking.png b/kmymoney2/icons/oxygen/16x16/actions/onlinebanking.png
new file mode 100644
index 0000000..a15e2b1
--- /dev/null
+++ b/kmymoney2/icons/oxygen/16x16/actions/onlinebanking.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/16x16/actions/payee.png b/kmymoney2/icons/oxygen/16x16/actions/payee.png
new file mode 100644
index 0000000..2fc7a99
--- /dev/null
+++ b/kmymoney2/icons/oxygen/16x16/actions/payee.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/16x16/actions/report.png b/kmymoney2/icons/oxygen/16x16/actions/report.png
new file mode 100644
index 0000000..e1d833f
--- /dev/null
+++ b/kmymoney2/icons/oxygen/16x16/actions/report.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/16x16/actions/schedule.png b/kmymoney2/icons/oxygen/16x16/actions/schedule.png
new file mode 100644
index 0000000..b8e106a
--- /dev/null
+++ b/kmymoney2/icons/oxygen/16x16/actions/schedule.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/22x22/Makefile.am b/kmymoney2/icons/oxygen/22x22/Makefile.am
new file mode 100644
index 0000000..2af9bf4
--- /dev/null
+++ b/kmymoney2/icons/oxygen/22x22/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = actions
diff --git a/kmymoney2/icons/oxygen/22x22/actions/Makefile.am b/kmymoney2/icons/oxygen/22x22/actions/Makefile.am
new file mode 100644
index 0000000..71e81ad
--- /dev/null
+++ b/kmymoney2/icons/oxygen/22x22/actions/Makefile.am
@@ -0,0 +1,6 @@
+icondir=$(kde_icondir)/oxygen/22x22/actions
+
+icon_DATA = accounts.png account-types_cash.png account-types_checking.png account-types_credit-card.png account-types_investments.png account-types_loan.png account-types_savings.png budget.png forcast.png institutions.png investments.png ledger.png onlinebanking.png payee.png report.png schedule.png
+
+EXTRA_DIST = $(icon_DATA)
+
diff --git a/kmymoney2/icons/oxygen/22x22/actions/account-types_cash.png b/kmymoney2/icons/oxygen/22x22/actions/account-types_cash.png
new file mode 100644
index 0000000..f59a6f8
--- /dev/null
+++ b/kmymoney2/icons/oxygen/22x22/actions/account-types_cash.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/22x22/actions/account-types_checking.png b/kmymoney2/icons/oxygen/22x22/actions/account-types_checking.png
new file mode 100644
index 0000000..94c7ed3
--- /dev/null
+++ b/kmymoney2/icons/oxygen/22x22/actions/account-types_checking.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/22x22/actions/account-types_credit-card.png b/kmymoney2/icons/oxygen/22x22/actions/account-types_credit-card.png
new file mode 100644
index 0000000..ba62cb7
--- /dev/null
+++ b/kmymoney2/icons/oxygen/22x22/actions/account-types_credit-card.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/22x22/actions/account-types_investments.png b/kmymoney2/icons/oxygen/22x22/actions/account-types_investments.png
new file mode 100644
index 0000000..6436870
--- /dev/null
+++ b/kmymoney2/icons/oxygen/22x22/actions/account-types_investments.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/22x22/actions/account-types_loan.png b/kmymoney2/icons/oxygen/22x22/actions/account-types_loan.png
new file mode 100644
index 0000000..3600c8d
--- /dev/null
+++ b/kmymoney2/icons/oxygen/22x22/actions/account-types_loan.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/22x22/actions/account-types_savings.png b/kmymoney2/icons/oxygen/22x22/actions/account-types_savings.png
new file mode 100644
index 0000000..6dc8194
--- /dev/null
+++ b/kmymoney2/icons/oxygen/22x22/actions/account-types_savings.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/22x22/actions/accounts.png b/kmymoney2/icons/oxygen/22x22/actions/accounts.png
new file mode 100644
index 0000000..d71e2c2
--- /dev/null
+++ b/kmymoney2/icons/oxygen/22x22/actions/accounts.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/22x22/actions/budget.png b/kmymoney2/icons/oxygen/22x22/actions/budget.png
new file mode 100644
index 0000000..9720dc4
--- /dev/null
+++ b/kmymoney2/icons/oxygen/22x22/actions/budget.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/22x22/actions/forcast.png b/kmymoney2/icons/oxygen/22x22/actions/forcast.png
new file mode 100644
index 0000000..f8f6fce
--- /dev/null
+++ b/kmymoney2/icons/oxygen/22x22/actions/forcast.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/22x22/actions/institutions.png b/kmymoney2/icons/oxygen/22x22/actions/institutions.png
new file mode 100644
index 0000000..06e2edc
--- /dev/null
+++ b/kmymoney2/icons/oxygen/22x22/actions/institutions.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/22x22/actions/investments.png b/kmymoney2/icons/oxygen/22x22/actions/investments.png
new file mode 100644
index 0000000..6436870
--- /dev/null
+++ b/kmymoney2/icons/oxygen/22x22/actions/investments.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/22x22/actions/ledger.png b/kmymoney2/icons/oxygen/22x22/actions/ledger.png
new file mode 100644
index 0000000..6d67daa
--- /dev/null
+++ b/kmymoney2/icons/oxygen/22x22/actions/ledger.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/22x22/actions/onlinebanking.png b/kmymoney2/icons/oxygen/22x22/actions/onlinebanking.png
new file mode 100644
index 0000000..aa8efea
--- /dev/null
+++ b/kmymoney2/icons/oxygen/22x22/actions/onlinebanking.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/22x22/actions/payee.png b/kmymoney2/icons/oxygen/22x22/actions/payee.png
new file mode 100644
index 0000000..3d669e6
--- /dev/null
+++ b/kmymoney2/icons/oxygen/22x22/actions/payee.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/22x22/actions/report.png b/kmymoney2/icons/oxygen/22x22/actions/report.png
new file mode 100644
index 0000000..d6c319d
--- /dev/null
+++ b/kmymoney2/icons/oxygen/22x22/actions/report.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/22x22/actions/schedule.png b/kmymoney2/icons/oxygen/22x22/actions/schedule.png
new file mode 100644
index 0000000..0fe35ad
--- /dev/null
+++ b/kmymoney2/icons/oxygen/22x22/actions/schedule.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/32x32/Makefile.am b/kmymoney2/icons/oxygen/32x32/Makefile.am
new file mode 100644
index 0000000..284a700
--- /dev/null
+++ b/kmymoney2/icons/oxygen/32x32/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = apps
diff --git a/kmymoney2/icons/oxygen/32x32/apps/Makefile.am b/kmymoney2/icons/oxygen/32x32/apps/Makefile.am
new file mode 100644
index 0000000..ef08a86
--- /dev/null
+++ b/kmymoney2/icons/oxygen/32x32/apps/Makefile.am
@@ -0,0 +1,6 @@
+icondir=$(kde_icondir)/oxygen/32x32/apps
+
+icon_DATA = account_add.png account-types_closed.png account-types_expense.png account-types_income.png institution_add.png reconcile.png transaction_find.png report.png budget.png ledger.png accounts.png forcast.png onlinebanking.png investments.png schedule.png categories.png payee.png institutions.png
+
+EXTRA_DIST = $(icon_DATA)
+
diff --git a/kmymoney2/icons/oxygen/32x32/apps/account-types_closed.png b/kmymoney2/icons/oxygen/32x32/apps/account-types_closed.png
new file mode 100644
index 0000000..14c3bb2
--- /dev/null
+++ b/kmymoney2/icons/oxygen/32x32/apps/account-types_closed.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/32x32/apps/account-types_expense.png b/kmymoney2/icons/oxygen/32x32/apps/account-types_expense.png
new file mode 100644
index 0000000..47412a2
--- /dev/null
+++ b/kmymoney2/icons/oxygen/32x32/apps/account-types_expense.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/32x32/apps/account-types_income.png b/kmymoney2/icons/oxygen/32x32/apps/account-types_income.png
new file mode 100644
index 0000000..e62a0e2
--- /dev/null
+++ b/kmymoney2/icons/oxygen/32x32/apps/account-types_income.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/32x32/apps/account_add.png b/kmymoney2/icons/oxygen/32x32/apps/account_add.png
new file mode 100644
index 0000000..fabdcbc
--- /dev/null
+++ b/kmymoney2/icons/oxygen/32x32/apps/account_add.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/32x32/apps/accounts.png b/kmymoney2/icons/oxygen/32x32/apps/accounts.png
new file mode 100644
index 0000000..6745ef4
--- /dev/null
+++ b/kmymoney2/icons/oxygen/32x32/apps/accounts.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/32x32/apps/budget.png b/kmymoney2/icons/oxygen/32x32/apps/budget.png
new file mode 100644
index 0000000..943b9f6
--- /dev/null
+++ b/kmymoney2/icons/oxygen/32x32/apps/budget.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/32x32/apps/categories.png b/kmymoney2/icons/oxygen/32x32/apps/categories.png
new file mode 100644
index 0000000..8a07415
--- /dev/null
+++ b/kmymoney2/icons/oxygen/32x32/apps/categories.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/32x32/apps/forcast.png b/kmymoney2/icons/oxygen/32x32/apps/forcast.png
new file mode 100644
index 0000000..bf45b5c
--- /dev/null
+++ b/kmymoney2/icons/oxygen/32x32/apps/forcast.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/32x32/apps/institution_add.png b/kmymoney2/icons/oxygen/32x32/apps/institution_add.png
new file mode 100644
index 0000000..114e171
--- /dev/null
+++ b/kmymoney2/icons/oxygen/32x32/apps/institution_add.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/32x32/apps/institutions.png b/kmymoney2/icons/oxygen/32x32/apps/institutions.png
new file mode 100644
index 0000000..85cb0df
--- /dev/null
+++ b/kmymoney2/icons/oxygen/32x32/apps/institutions.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/32x32/apps/investments.png b/kmymoney2/icons/oxygen/32x32/apps/investments.png
new file mode 100644
index 0000000..7ffc1c3
--- /dev/null
+++ b/kmymoney2/icons/oxygen/32x32/apps/investments.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/32x32/apps/ledger.png b/kmymoney2/icons/oxygen/32x32/apps/ledger.png
new file mode 100644
index 0000000..33bb0be
--- /dev/null
+++ b/kmymoney2/icons/oxygen/32x32/apps/ledger.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/32x32/apps/onlinebanking.png b/kmymoney2/icons/oxygen/32x32/apps/onlinebanking.png
new file mode 100644
index 0000000..5a3ec01
--- /dev/null
+++ b/kmymoney2/icons/oxygen/32x32/apps/onlinebanking.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/32x32/apps/payee.png b/kmymoney2/icons/oxygen/32x32/apps/payee.png
new file mode 100644
index 0000000..3ce240f
--- /dev/null
+++ b/kmymoney2/icons/oxygen/32x32/apps/payee.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/32x32/apps/reconcile.png b/kmymoney2/icons/oxygen/32x32/apps/reconcile.png
new file mode 100644
index 0000000..01ae342
--- /dev/null
+++ b/kmymoney2/icons/oxygen/32x32/apps/reconcile.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/32x32/apps/report.png b/kmymoney2/icons/oxygen/32x32/apps/report.png
new file mode 100644
index 0000000..e08a6b2
--- /dev/null
+++ b/kmymoney2/icons/oxygen/32x32/apps/report.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/32x32/apps/schedule.png b/kmymoney2/icons/oxygen/32x32/apps/schedule.png
new file mode 100644
index 0000000..7d144b7
--- /dev/null
+++ b/kmymoney2/icons/oxygen/32x32/apps/schedule.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/32x32/apps/transaction_find.png b/kmymoney2/icons/oxygen/32x32/apps/transaction_find.png
new file mode 100644
index 0000000..0761a3a
--- /dev/null
+++ b/kmymoney2/icons/oxygen/32x32/apps/transaction_find.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/48x48/Makefile.am b/kmymoney2/icons/oxygen/48x48/Makefile.am
new file mode 100644
index 0000000..284a700
--- /dev/null
+++ b/kmymoney2/icons/oxygen/48x48/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = apps
diff --git a/kmymoney2/icons/oxygen/48x48/apps/Makefile.am b/kmymoney2/icons/oxygen/48x48/apps/Makefile.am
new file mode 100644
index 0000000..49b0488
--- /dev/null
+++ b/kmymoney2/icons/oxygen/48x48/apps/Makefile.am
@@ -0,0 +1,6 @@
+icondir=$(kde_icondir)/oxygen/48x48/apps
+
+icon_DATA = account_add.png account-types_closed.png account-types_expense.png account-types_income.png institution_add.png reconcile.png transaction_find.png report.png budget.png ledger.png accounts.png forcast.png onlinebanking.png investments.png schedule.png categories.png payee.png institutions.png
+
+EXTRA_DIST = $(icon_DATA)
+
diff --git a/kmymoney2/icons/oxygen/48x48/apps/account-types_closed.png b/kmymoney2/icons/oxygen/48x48/apps/account-types_closed.png
new file mode 100644
index 0000000..be93882
--- /dev/null
+++ b/kmymoney2/icons/oxygen/48x48/apps/account-types_closed.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/48x48/apps/account-types_expense.png b/kmymoney2/icons/oxygen/48x48/apps/account-types_expense.png
new file mode 100644
index 0000000..d768b20
--- /dev/null
+++ b/kmymoney2/icons/oxygen/48x48/apps/account-types_expense.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/48x48/apps/account-types_income.png b/kmymoney2/icons/oxygen/48x48/apps/account-types_income.png
new file mode 100644
index 0000000..77b8919
--- /dev/null
+++ b/kmymoney2/icons/oxygen/48x48/apps/account-types_income.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/48x48/apps/account_add.png b/kmymoney2/icons/oxygen/48x48/apps/account_add.png
new file mode 100644
index 0000000..4d2ed78
--- /dev/null
+++ b/kmymoney2/icons/oxygen/48x48/apps/account_add.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/48x48/apps/accounts.png b/kmymoney2/icons/oxygen/48x48/apps/accounts.png
new file mode 100644
index 0000000..089b9ee
--- /dev/null
+++ b/kmymoney2/icons/oxygen/48x48/apps/accounts.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/48x48/apps/budget.png b/kmymoney2/icons/oxygen/48x48/apps/budget.png
new file mode 100644
index 0000000..2bb6ace
--- /dev/null
+++ b/kmymoney2/icons/oxygen/48x48/apps/budget.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/48x48/apps/categories.png b/kmymoney2/icons/oxygen/48x48/apps/categories.png
new file mode 100644
index 0000000..6c6954f
--- /dev/null
+++ b/kmymoney2/icons/oxygen/48x48/apps/categories.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/48x48/apps/forcast.png b/kmymoney2/icons/oxygen/48x48/apps/forcast.png
new file mode 100644
index 0000000..047caa0
--- /dev/null
+++ b/kmymoney2/icons/oxygen/48x48/apps/forcast.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/48x48/apps/institution_add.png b/kmymoney2/icons/oxygen/48x48/apps/institution_add.png
new file mode 100644
index 0000000..3b4f0ed
--- /dev/null
+++ b/kmymoney2/icons/oxygen/48x48/apps/institution_add.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/48x48/apps/institutions.png b/kmymoney2/icons/oxygen/48x48/apps/institutions.png
new file mode 100644
index 0000000..ac82c53
--- /dev/null
+++ b/kmymoney2/icons/oxygen/48x48/apps/institutions.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/48x48/apps/investments.png b/kmymoney2/icons/oxygen/48x48/apps/investments.png
new file mode 100644
index 0000000..c7ebb67
--- /dev/null
+++ b/kmymoney2/icons/oxygen/48x48/apps/investments.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/48x48/apps/ledger.png b/kmymoney2/icons/oxygen/48x48/apps/ledger.png
new file mode 100644
index 0000000..7ac3aed
--- /dev/null
+++ b/kmymoney2/icons/oxygen/48x48/apps/ledger.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/48x48/apps/onlinebanking.png b/kmymoney2/icons/oxygen/48x48/apps/onlinebanking.png
new file mode 100644
index 0000000..a24e339
--- /dev/null
+++ b/kmymoney2/icons/oxygen/48x48/apps/onlinebanking.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/48x48/apps/payee.png b/kmymoney2/icons/oxygen/48x48/apps/payee.png
new file mode 100644
index 0000000..9e121f1
--- /dev/null
+++ b/kmymoney2/icons/oxygen/48x48/apps/payee.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/48x48/apps/reconcile.png b/kmymoney2/icons/oxygen/48x48/apps/reconcile.png
new file mode 100644
index 0000000..063b7e7
--- /dev/null
+++ b/kmymoney2/icons/oxygen/48x48/apps/reconcile.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/48x48/apps/report.png b/kmymoney2/icons/oxygen/48x48/apps/report.png
new file mode 100644
index 0000000..583f340
--- /dev/null
+++ b/kmymoney2/icons/oxygen/48x48/apps/report.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/48x48/apps/schedule.png b/kmymoney2/icons/oxygen/48x48/apps/schedule.png
new file mode 100644
index 0000000..80d890d
--- /dev/null
+++ b/kmymoney2/icons/oxygen/48x48/apps/schedule.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/48x48/apps/transaction_find.png b/kmymoney2/icons/oxygen/48x48/apps/transaction_find.png
new file mode 100644
index 0000000..922eb4c
--- /dev/null
+++ b/kmymoney2/icons/oxygen/48x48/apps/transaction_find.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/64x64/Makefile.am b/kmymoney2/icons/oxygen/64x64/Makefile.am
new file mode 100644
index 0000000..284a700
--- /dev/null
+++ b/kmymoney2/icons/oxygen/64x64/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = apps
diff --git a/kmymoney2/icons/oxygen/64x64/apps/Makefile.am b/kmymoney2/icons/oxygen/64x64/apps/Makefile.am
new file mode 100644
index 0000000..8e64c24
--- /dev/null
+++ b/kmymoney2/icons/oxygen/64x64/apps/Makefile.am
@@ -0,0 +1,6 @@
+icondir=$(kde_icondir)/oxygen/64x64/apps
+
+icon_DATA = account-add.png account-types_closed.png reconcile.png transaction_find.png report.png budget.png ledger.png accounts.png forcast.png onlinebanking.png investments.png schedule.png categories.png payee.png institutions.png
+
+EXTRA_DIST = $(icon_DATA)
+
diff --git a/kmymoney2/icons/oxygen/64x64/apps/account-add.png b/kmymoney2/icons/oxygen/64x64/apps/account-add.png
new file mode 100644
index 0000000..58a6219
--- /dev/null
+++ b/kmymoney2/icons/oxygen/64x64/apps/account-add.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/64x64/apps/account-types_closed.png b/kmymoney2/icons/oxygen/64x64/apps/account-types_closed.png
new file mode 100644
index 0000000..912a531
--- /dev/null
+++ b/kmymoney2/icons/oxygen/64x64/apps/account-types_closed.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/64x64/apps/accounts.png b/kmymoney2/icons/oxygen/64x64/apps/accounts.png
new file mode 100644
index 0000000..10d5da1
--- /dev/null
+++ b/kmymoney2/icons/oxygen/64x64/apps/accounts.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/64x64/apps/budget.png b/kmymoney2/icons/oxygen/64x64/apps/budget.png
new file mode 100644
index 0000000..a0d5753
--- /dev/null
+++ b/kmymoney2/icons/oxygen/64x64/apps/budget.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/64x64/apps/categories.png b/kmymoney2/icons/oxygen/64x64/apps/categories.png
new file mode 100644
index 0000000..8d225bb
--- /dev/null
+++ b/kmymoney2/icons/oxygen/64x64/apps/categories.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/64x64/apps/forcast.png b/kmymoney2/icons/oxygen/64x64/apps/forcast.png
new file mode 100644
index 0000000..17e3c98
--- /dev/null
+++ b/kmymoney2/icons/oxygen/64x64/apps/forcast.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/64x64/apps/institutions.png b/kmymoney2/icons/oxygen/64x64/apps/institutions.png
new file mode 100644
index 0000000..52a5cc0
--- /dev/null
+++ b/kmymoney2/icons/oxygen/64x64/apps/institutions.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/64x64/apps/investments.png b/kmymoney2/icons/oxygen/64x64/apps/investments.png
new file mode 100644
index 0000000..94d06c8
--- /dev/null
+++ b/kmymoney2/icons/oxygen/64x64/apps/investments.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/64x64/apps/ledger.png b/kmymoney2/icons/oxygen/64x64/apps/ledger.png
new file mode 100644
index 0000000..dbfb0a4
--- /dev/null
+++ b/kmymoney2/icons/oxygen/64x64/apps/ledger.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/64x64/apps/onlinebanking.png b/kmymoney2/icons/oxygen/64x64/apps/onlinebanking.png
new file mode 100644
index 0000000..dc7cca1
--- /dev/null
+++ b/kmymoney2/icons/oxygen/64x64/apps/onlinebanking.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/64x64/apps/payee.png b/kmymoney2/icons/oxygen/64x64/apps/payee.png
new file mode 100644
index 0000000..320bc71
--- /dev/null
+++ b/kmymoney2/icons/oxygen/64x64/apps/payee.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/64x64/apps/reconcile.png b/kmymoney2/icons/oxygen/64x64/apps/reconcile.png
new file mode 100644
index 0000000..6c92d5d
--- /dev/null
+++ b/kmymoney2/icons/oxygen/64x64/apps/reconcile.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/64x64/apps/report.png b/kmymoney2/icons/oxygen/64x64/apps/report.png
new file mode 100644
index 0000000..3da4358
--- /dev/null
+++ b/kmymoney2/icons/oxygen/64x64/apps/report.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/64x64/apps/schedule.png b/kmymoney2/icons/oxygen/64x64/apps/schedule.png
new file mode 100644
index 0000000..54e63fe
--- /dev/null
+++ b/kmymoney2/icons/oxygen/64x64/apps/schedule.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/64x64/apps/transaction_find.png b/kmymoney2/icons/oxygen/64x64/apps/transaction_find.png
new file mode 100644
index 0000000..b1f40da
--- /dev/null
+++ b/kmymoney2/icons/oxygen/64x64/apps/transaction_find.png
Binary files differ
diff --git a/kmymoney2/icons/oxygen/Makefile.am b/kmymoney2/icons/oxygen/Makefile.am
new file mode 100644
index 0000000..a088af8
--- /dev/null
+++ b/kmymoney2/icons/oxygen/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = 16x16 48x48 32x32 128x128 scalable 64x64 22x22
diff --git a/kmymoney2/icons/oxygen/scalable/Makefile.am b/kmymoney2/icons/oxygen/scalable/Makefile.am
new file mode 100644
index 0000000..4953a83
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/Makefile.am
@@ -0,0 +1,6 @@
+icondir=$(kde_icondir)/oxygen/scalable
+
+icon_DATA = account-add.svgz accounts.svgz account-types_asset.svgz account-types_checking.svgz account-types_cash.svgz account-types_closed.svgz account-types_credit-card.svgz account-types_expense.svgz account-types_income.svgz account-types_investments.svgz account-types_liability.svgz account-types_loan.svgz account-types_savings.svgz budget.svgz categories.svgz forcast.svgz hide_categories.svgz hide_reconciled.svgz institution_add.svgz institutions.svgz investments.svgz ledger.svgz onlinebanking.svgz payee.svgz personal_data.svgz reconcile.svgz report.svgz schedule.svgz transaction_find.svgz
+
+EXTRA_DIST = $(icon_DATA)
+
diff --git a/kmymoney2/icons/oxygen/scalable/account-add.svgz b/kmymoney2/icons/oxygen/scalable/account-add.svgz
new file mode 100644
index 0000000..ebd43f0
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/account-add.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/account-types_asset.svgz b/kmymoney2/icons/oxygen/scalable/account-types_asset.svgz
new file mode 100644
index 0000000..5d72b8f
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/account-types_asset.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/account-types_cash.svgz b/kmymoney2/icons/oxygen/scalable/account-types_cash.svgz
new file mode 100644
index 0000000..ca891a3
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/account-types_cash.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/account-types_checking.svgz b/kmymoney2/icons/oxygen/scalable/account-types_checking.svgz
new file mode 100644
index 0000000..8102c31
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/account-types_checking.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/account-types_closed.svgz b/kmymoney2/icons/oxygen/scalable/account-types_closed.svgz
new file mode 100644
index 0000000..64e1ad8
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/account-types_closed.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/account-types_credit-card.svgz b/kmymoney2/icons/oxygen/scalable/account-types_credit-card.svgz
new file mode 100644
index 0000000..efea607
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/account-types_credit-card.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/account-types_expense.svgz b/kmymoney2/icons/oxygen/scalable/account-types_expense.svgz
new file mode 100644
index 0000000..16d1370
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/account-types_expense.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/account-types_income.svgz b/kmymoney2/icons/oxygen/scalable/account-types_income.svgz
new file mode 100644
index 0000000..74f6575
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/account-types_income.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/account-types_investments.svgz b/kmymoney2/icons/oxygen/scalable/account-types_investments.svgz
new file mode 100644
index 0000000..5d49b27
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/account-types_investments.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/account-types_liability.svgz b/kmymoney2/icons/oxygen/scalable/account-types_liability.svgz
new file mode 100644
index 0000000..af9a682
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/account-types_liability.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/account-types_loan.svgz b/kmymoney2/icons/oxygen/scalable/account-types_loan.svgz
new file mode 100644
index 0000000..24b0f41
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/account-types_loan.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/account-types_savings.svgz b/kmymoney2/icons/oxygen/scalable/account-types_savings.svgz
new file mode 100644
index 0000000..d10fe7e
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/account-types_savings.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/accounts.svgz b/kmymoney2/icons/oxygen/scalable/accounts.svgz
new file mode 100644
index 0000000..961ba6d
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/accounts.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/budget.svgz b/kmymoney2/icons/oxygen/scalable/budget.svgz
new file mode 100644
index 0000000..9c7e78d
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/budget.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/categories.svgz b/kmymoney2/icons/oxygen/scalable/categories.svgz
new file mode 100644
index 0000000..588dd39
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/categories.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/forcast.svgz b/kmymoney2/icons/oxygen/scalable/forcast.svgz
new file mode 100644
index 0000000..84aca85
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/forcast.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/hide_categories.svgz b/kmymoney2/icons/oxygen/scalable/hide_categories.svgz
new file mode 100644
index 0000000..a3280fa
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/hide_categories.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/hide_reconciled.svgz b/kmymoney2/icons/oxygen/scalable/hide_reconciled.svgz
new file mode 100644
index 0000000..ccd94a6
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/hide_reconciled.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/institution_add.svgz b/kmymoney2/icons/oxygen/scalable/institution_add.svgz
new file mode 100644
index 0000000..745bfc8
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/institution_add.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/institutions.svgz b/kmymoney2/icons/oxygen/scalable/institutions.svgz
new file mode 100644
index 0000000..e38ca0e
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/institutions.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/investments.svgz b/kmymoney2/icons/oxygen/scalable/investments.svgz
new file mode 100644
index 0000000..5d49b27
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/investments.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/ledger.svgz b/kmymoney2/icons/oxygen/scalable/ledger.svgz
new file mode 100644
index 0000000..2128284
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/ledger.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/onlinebanking.svgz b/kmymoney2/icons/oxygen/scalable/onlinebanking.svgz
new file mode 100644
index 0000000..928c46c
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/onlinebanking.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/payee.svgz b/kmymoney2/icons/oxygen/scalable/payee.svgz
new file mode 100644
index 0000000..9287d85
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/payee.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/personal_data.svgz b/kmymoney2/icons/oxygen/scalable/personal_data.svgz
new file mode 100644
index 0000000..7a5b34d
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/personal_data.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/reconcile.svgz b/kmymoney2/icons/oxygen/scalable/reconcile.svgz
new file mode 100644
index 0000000..a4b501e
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/reconcile.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/report.svgz b/kmymoney2/icons/oxygen/scalable/report.svgz
new file mode 100644
index 0000000..e2c46b6
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/report.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/schedule.svgz b/kmymoney2/icons/oxygen/scalable/schedule.svgz
new file mode 100644
index 0000000..c725c9c
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/schedule.svgz
Binary files differ
diff --git a/kmymoney2/icons/oxygen/scalable/transaction_find.svgz b/kmymoney2/icons/oxygen/scalable/transaction_find.svgz
new file mode 100644
index 0000000..a74f620
--- /dev/null
+++ b/kmymoney2/icons/oxygen/scalable/transaction_find.svgz
Binary files differ
diff --git a/kmymoney2/kmymoney2.cpp b/kmymoney2/kmymoney2.cpp
new file mode 100644
index 0000000..40cc1d6
--- /dev/null
+++ b/kmymoney2/kmymoney2.cpp
@@ -0,0 +1,6209 @@
+/***************************************************************************
+ kmymoney2.cpp
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes
+ (C) 2007 by Thomas Baumgart
+ email : mte@users.sourceforge.net
+ ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "kdecompat.h"
+
+// ----------------------------------------------------------------------------
+// Std C++ / STL Includes
+
+#include <typeinfo>
+#include <cstdio>
+#include <iostream>
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qdir.h>
+#include <qprinter.h>
+#include <qlayout.h>
+#include <qsignalmapper.h>
+#include <qclipboard.h> // temp for problem 1105503
+#include <qdatetime.h> // only for performance tests
+#include <qtimer.h>
+#include <qsqlpropertymap.h>
+#include <qvbox.h>
+#include <qeventloop.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kdebug.h>
+#include <kapplication.h>
+#include <kshortcut.h>
+#include <kiconloader.h>
+#include <kmessagebox.h>
+#include <kfiledialog.h>
+#include <kmenubar.h>
+#include <klocale.h>
+#include <kconfig.h>
+#include <kstdaction.h>
+#include <kglobal.h>
+#include <kstandarddirs.h>
+#include <kstatusbar.h>
+#include <ktip.h>
+#include <kkeydialog.h>
+#include <kprogress.h>
+#include <kio/netaccess.h>
+#include <dcopclient.h>
+#include <kstartupinfo.h>
+#include <kparts/componentfactory.h>
+#include <krun.h>
+#include <kconfigdialog.h>
+#include <kinputdialog.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoney2.h"
+#include "kmymoneyglobalsettings.h"
+#include "kmymoney2_stub.h"
+
+#include "dialogs/kstartdlg.h"
+#include "dialogs/settings/ksettingsgeneral.h"
+#include "dialogs/settings/ksettingsregister.h"
+#include "dialogs/settings/ksettingsgpg.h"
+#include "dialogs/settings/ksettingscolors.h"
+#include "dialogs/settings/ksettingsfonts.h"
+#include "dialogs/settings/ksettingsschedules.h"
+#include "dialogs/settings/ksettingsonlinequotes.h"
+#include "dialogs/settings/ksettingshome.h"
+#include "dialogs/settings/ksettingsforecast.h"
+#include "dialogs/settings/ksettingsplugins.h"
+#include "dialogs/kbackupdlg.h"
+#include "dialogs/kexportdlg.h"
+#include "dialogs/kimportdlg.h"
+#include "dialogs/mymoneyqifprofileeditor.h"
+#include "dialogs/kenterscheduledlg.h"
+#include "dialogs/kconfirmmanualenterdlg.h"
+#include "dialogs/kmymoneypricedlg.h"
+#include "dialogs/kcurrencyeditdlg.h"
+#include "dialogs/kequitypriceupdatedlg.h"
+#include "dialogs/ksecuritylisteditor.h"
+#include "dialogs/kmymoneyfileinfodlg.h"
+#include "dialogs/kfindtransactiondlg.h"
+#include "dialogs/knewbankdlg.h"
+#include "dialogs/knewinvestmentwizard.h"
+#include "dialogs/knewaccountdlg.h"
+#include "dialogs/knewfiledlg.h"
+#include "dialogs/kselectdatabasedlg.h"
+#include "dialogs/kcurrencycalculator.h"
+#include "dialogs/keditscheduledlg.h"
+#include "dialogs/knewloanwizard.h"
+#include "dialogs/keditloanwizard.h"
+#include "dialogs/kpayeereassigndlg.h"
+#include "dialogs/kcategoryreassigndlg.h"
+#include "dialogs/kmergetransactionsdlg.h"
+#include "dialogs/kendingbalancedlg.h"
+#include "dialogs/kbalancechartdlg.h"
+#include "dialogs/kplugindlg.h"
+#include "dialogs/kloadtemplatedlg.h"
+#include "dialogs/kgpgkeyselectiondlg.h"
+#include "dialogs/transactionmatcher.h"
+#include "wizards/newuserwizard/knewuserwizard.h"
+#include "wizards/newaccountwizard/knewaccountwizard.h"
+#include "dialogs/kbalancewarning.h"
+
+#include "widgets/kmymoneycombo.h"
+#include "widgets/kmymoneycompletion.h"
+
+#include "views/kmymoneyview.h"
+
+#include "mymoney/mymoneyutils.h"
+#include "mymoney/mymoneystatement.h"
+#include "mymoney/storage/mymoneystoragedump.h"
+#include "mymoney/mymoneyforecast.h"
+
+#include "converter/mymoneyqifwriter.h"
+#include "converter/mymoneyqifreader.h"
+#include "converter/mymoneystatementreader.h"
+#include "converter/mymoneytemplate.h"
+
+#include "plugins/interfaces/kmmviewinterface.h"
+#include "plugins/interfaces/kmmstatementinterface.h"
+#include "plugins/interfaces/kmmimportinterface.h"
+#include "plugins/pluginloader.h"
+
+#include <libkgpgfile/kgpgfile.h>
+
+#include <kmymoney/transactioneditor.h>
+#include <kmymoney/kmymoneylistviewitem.h>
+
+#include "kmymoneyutils.h"
+#include "kdecompat.h"
+
+#define RECOVER_KEY_ID "59B0F826D2B08440"
+#define ID_STATUS_MSG 1
+
+class KMyMoney2App::Private
+{
+public:
+ Private() :
+ m_ft(0), m_moveToAccountSelector(0), statementXMLindex(0), m_collectingStatements(false)
+ {}
+ void unlinkStatementXML(void);
+ void moveInvestmentTransaction(const QString& fromId,
+ const QString& toId,
+ const MyMoneyTransaction& t);
+
+ MyMoneyFileTransaction* m_ft;
+ kMyMoneyAccountSelector* m_moveToAccountSelector;
+ int statementXMLindex;
+ KBalanceWarning* m_balanceWarning;
+
+ bool m_collectingStatements;
+ QStringList m_statementResults;
+ KMyMoneyPlugin::PluginLoader* m_pluginLoader;
+ QString m_lastPayeeEntered;
+};
+
+KMyMoney2App::KMyMoney2App(QWidget * /*parent*/ , const char* name) :
+ KMainWindow(0, name),
+ DCOPObject("kmymoney2app"),
+ d(new Private),
+ myMoneyView(0),
+ m_searchDlg(0),
+ m_autoSaveTimer(0),
+ m_inAutoSaving(false),
+ m_saveEncrypted(0),
+ m_transactionEditor(0),
+ m_endingBalanceDlg(0)
+{
+ ::timetrace("start kmymoney2app constructor");
+ // preset the pointer because we need it during the course of this constructor
+ kmymoney2 = this;
+ config = kapp->config();
+
+ MyMoneyTransactionFilter::setFiscalYearStart(KMyMoneyGlobalSettings::firstFiscalMonth(), KMyMoneyGlobalSettings::firstFiscalDay());
+
+ updateCaption(true);
+
+ QFrame* frame = new QFrame(this);
+ frame->setFrameStyle(QFrame::NoFrame);
+ // values for margin (11) and spacing(6) taken from KDialog implementation
+ QBoxLayout* layout = new QBoxLayout(frame, QBoxLayout::TopToBottom, 2, 6);
+
+ ::timetrace("init statusbar");
+ initStatusBar();
+ ::timetrace("init actions");
+ initActions();
+
+ initDynamicMenus();
+
+ ::timetrace("create view");
+ myMoneyView = new KMyMoneyView(frame, "KMyMoneyView");
+ layout->addWidget(myMoneyView, 10);
+ connect(myMoneyView, SIGNAL(aboutToShowPage(QWidget*)), this, SLOT(slotResetSelections()));
+
+ ///////////////////////////////////////////////////////////////////
+ // call inits to invoke all other construction parts
+ ::timetrace("init options");
+ readOptions();
+
+#if 0
+ m_pluginSignalMapper = new QSignalMapper( this );
+ connect( m_pluginSignalMapper, SIGNAL( mapped( const QString& ) ), this, SLOT( slotPluginImport( const QString& ) ) );
+#endif
+
+ // now initialize the plugin structure
+ ::timetrace("load plugins");
+ createInterfaces();
+ loadPlugins();
+
+ setCentralWidget(frame);
+
+ ::timetrace("done");
+
+ connect(&proc,SIGNAL(processExited(KProcess *)),this,SLOT(slotProcessExited()));
+
+ // force to show the home page if the file is closed
+ connect(action("view_show_transaction_detail"), SIGNAL(toggled(bool)), myMoneyView, SLOT(slotShowTransactionDetail(bool)));
+
+ m_backupState = BACKUP_IDLE;
+
+ m_qifReader = 0;
+ m_smtReader = 0;
+
+ m_autoSaveEnabled = KMyMoneyGlobalSettings::autoSaveFile();
+ m_autoSavePeriod = KMyMoneyGlobalSettings::autoSavePeriod();
+
+ m_autoSaveTimer = new QTimer(this);
+ connect(m_autoSaveTimer, SIGNAL(timeout()), this, SLOT(slotAutoSave()));
+
+ // make sure, we get a note when the engine changes state
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotDataChanged()));
+
+ // make sure we have a balance warning object
+ d->m_balanceWarning = new KBalanceWarning(this);
+
+ // kickstart date change timer
+ slotDateChanged();
+}
+
+KMyMoney2App::~KMyMoney2App()
+{
+ delete m_searchDlg;
+ delete m_qifReader;
+ delete m_transactionEditor;
+ delete m_endingBalanceDlg;
+ delete d->m_moveToAccountSelector;
+ delete d;
+ delete myMoneyView;
+}
+
+const KURL KMyMoney2App::lastOpenedURL(void)
+{
+ KURL url = m_startDialog ? KURL() : m_fileName;
+
+ if(!url.isValid())
+ {
+ url = readLastUsedFile();
+ }
+
+ ready();
+
+ return url;
+}
+
+void KMyMoney2App::initDynamicMenus(void)
+{
+ QWidget* w = factory()->container("transaction_move_menu", this);
+ QPopupMenu *menu = dynamic_cast<QPopupMenu*>(w);
+ if(menu) {
+ d->m_moveToAccountSelector = new kMyMoneyAccountSelector(menu, 0, 0, false);
+ menu->insertItem(d->m_moveToAccountSelector);
+ connect(d->m_moveToAccountSelector, SIGNAL(itemSelected(const QString&)), this, SLOT(slotMoveToAccount(const QString&)));
+ connect(this, SIGNAL(accountSelected(const MyMoneyAccount&)), this, SLOT(slotUpdateMoveToAccountMenu()));
+ connect(this, SIGNAL(transactionsSelected(const KMyMoneyRegister::SelectedTransactions&)), this, SLOT(slotUpdateMoveToAccountMenu()));
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotUpdateMoveToAccountMenu()));
+ }
+}
+
+void KMyMoney2App::initActions(void)
+{
+ KAction* p;
+
+ // *************
+ // The File menu
+ // *************
+ KStdAction::openNew(this, SLOT(slotFileNew()), actionCollection());
+ KStdAction::open(this, SLOT(slotFileOpen()), actionCollection());
+ KStdAction::openRecent(this, SLOT(slotFileOpenRecent(const KURL&)), actionCollection());
+ KStdAction::save(this, SLOT(slotFileSave()), actionCollection());
+ KStdAction::saveAs(this, SLOT(slotFileSaveAs()), actionCollection());
+ KStdAction::close(this, SLOT(slotFileClose()), actionCollection());
+ KStdAction::quit(this, SLOT(slotFileQuit()), actionCollection());
+ KStdAction::print(this, SLOT(slotPrintView()), actionCollection());
+
+ new KAction(i18n("Open database..."), "",0,this,SLOT(slotOpenDatabase()),actionCollection(),"open_database");
+ new KAction(i18n("Save as database..."), "",0,this,SLOT(slotSaveAsDatabase()),actionCollection(),"saveas_database");
+ new KAction(i18n("Backup..."), "backup",0,this,SLOT(slotFileBackup()),actionCollection(),"file_backup");
+ new KAction(i18n("QIF..."), "", 0, this, SLOT(slotQifImport()), actionCollection(), "file_import_qif");
+ new KAction(i18n("Gnucash..."), "", 0, this, SLOT(slotGncImport()), actionCollection(), "file_import_gnc");
+ new KAction(i18n("Statement file..."), "", 0, this, SLOT(slotStatementImport()), actionCollection(), "file_import_statement");
+
+ new KAction(i18n("Account Template..."), "", 0, this, SLOT(slotLoadAccountTemplates()), actionCollection(), "file_import_template");
+ new KAction(i18n("Account Template..."), "", 0, this, SLOT(slotSaveAccountTemplates()), actionCollection(), "file_export_template");
+ new KAction(i18n("QIF..."), "", 0, this, SLOT(slotQifExport()), actionCollection(), "file_export_qif");
+ new KAction(i18n("Personal Data..."), "personal_data", 0, this, SLOT(slotFileViewPersonal()), actionCollection(), "view_personal_data");
+
+#if KMM_DEBUG
+ new KAction(i18n("Dump Memory"), "", 0, this, SLOT(slotFileFileInfo()), actionCollection(), "file_dump");
+#endif
+ new KAction(i18n("File-Information..."), "info", 0, this, SLOT(slotFileInfoDialog()), actionCollection(), "view_file_info");
+
+ // *************
+ // The Edit menu
+ // *************
+ new KAction(i18n("Find transaction..."), "transaction_find", KShortcut("Ctrl+F"), this, SLOT(slotFindTransaction()), actionCollection(), "edit_find_transaction");
+
+ // *************
+ // The View menu
+ // *************
+ new KToggleAction(i18n("Show Transaction Detail"), KShortcut("Ctrl+T"), actionCollection(), "view_show_transaction_detail");
+ new KToggleAction(i18n("Hide reconciled transactions"), "hide_reconciled", KShortcut("Ctrl+R"), this, SLOT(slotHideReconciledTransactions()), actionCollection(), "view_hide_reconciled_transactions");
+ new KToggleAction(i18n("Hide unused categories"), "hide_categories", KShortcut("Ctrl+U"), this, SLOT(slotHideUnusedCategories()), actionCollection(), "view_hide_unused_categories");
+ new KToggleAction(i18n("Show all accounts"), "", KShortcut("Ctrl+Shift+A"), this, SLOT(slotShowAllAccounts()), actionCollection(), "view_show_all_accounts");
+
+ // *********************
+ // The institutions menu
+ // *********************
+ new KAction(i18n("New institution..."), "institution_add", 0, this, SLOT(slotInstitutionNew()), actionCollection(), "institution_new");
+ new KAction(i18n("Edit institution..."), "edit", 0, this, SLOT(slotInstitutionEdit()), actionCollection(), "institution_edit");
+ new KAction(i18n("Delete institution..."), "delete", 0, this, SLOT(slotInstitutionDelete()), actionCollection(), "institution_delete");
+
+ // *****************
+ // The accounts menu
+ // *****************
+ new KAction(i18n("New account..."), "account_add", 0, this, SLOT(slotAccountNew()), actionCollection(), "account_new");
+ // note : action "category_new" is included in this menu but defined below
+ new KAction(i18n("Open ledger"), "ledger", 0, this, SLOT(slotAccountOpen()), actionCollection(), "account_open");
+ new KAction(i18n("Reconcile..."), "reconcile", KShortcut("Ctrl+Shift+R"), this, SLOT(slotAccountReconcileStart()), actionCollection(), "account_reconcile");
+ new KAction(i18n("Finish reconciliation", "Finish"), "player_end", 0, this, SLOT(slotAccountReconcileFinish()), actionCollection(), "account_reconcile_finish");
+ new KAction(i18n("Postpone reconciliation", "Postpone"), "player_pause", 0, this, SLOT(slotAccountReconcilePostpone()), actionCollection(), "account_reconcile_postpone");
+ new KAction(i18n("Edit account..."), "edit", 0, this, SLOT(slotAccountEdit()), actionCollection(), "account_edit");
+ new KAction(i18n("Delete account..."), "delete", 0, this, SLOT(slotAccountDelete()), actionCollection(), "account_delete");
+ new KAction(i18n("Close account"), "", 0, this, SLOT(slotAccountClose()), actionCollection(), "account_close");
+ new KAction(i18n("Reopen account"), "", 0, this, SLOT(slotAccountReopen()), actionCollection(), "account_reopen");
+ new KAction(i18n("Transaction report"), "view_info", 0, this, SLOT(slotAccountTransactionReport()), actionCollection(), "account_transaction_report");
+#ifdef HAVE_KDCHART
+ new KAction(i18n("Show balance chart..."), "kchart_chrt", 0, this, SLOT(slotAccountChart()), actionCollection(), "account_chart");
+#endif
+ new KAction(i18n("Map to online account"), "news_subscribe", 0, this, SLOT(slotAccountMapOnline()), actionCollection(), "account_online_map");
+ new KAction(i18n("Unmap account"), "", 0, this, SLOT(slotAccountUnmapOnline()), actionCollection(), "account_online_unmap");
+ KActionMenu* menu = new KActionMenu(i18n("Update"), QIconSet(KGlobal::iconLoader()->loadIcon("reload", KIcon::Small,
+ KIcon::SizeSmall)), actionCollection(), "account_online_update_menu");
+ // activating the menu button is the same as selecting the current account
+ connect( menu, SIGNAL( activated() ), this, SLOT(slotAccountUpdateOnline()));
+ menu->insert(new KAction(i18n("Update account..."), "", 0, this, SLOT(slotAccountUpdateOnline()), actionCollection(), "account_online_update"));
+ menu->insert(new KAction(i18n("Update all accounts..."), "", 0, this, SLOT(slotAccountUpdateOnlineAll()), actionCollection(), "account_online_update_all"));
+
+ // *******************
+ // The categories menu
+ // *******************
+ new KAction(i18n("New category..."), "account_add", 0, this, SLOT(slotCategoryNew()), actionCollection(), "category_new");
+ new KAction(i18n("Edit category..."), "edit", 0, this, SLOT(slotAccountEdit()), actionCollection(), "category_edit");
+ new KAction(i18n("Delete category..."), "delete", 0, this, SLOT(slotAccountDelete()), actionCollection(), "category_delete");
+
+
+ // **************
+ // The tools menu
+ // **************
+ new KAction(i18n("QIF Profile Editor..."), "edit", 0, this, SLOT(slotQifProfileEditor()), actionCollection(), "tools_qif_editor");
+ new KAction(i18n("Securities..."), "", 0, this, SLOT(slotSecurityEditor()), actionCollection(), "tools_security_editor");
+ new KAction(i18n("Currencies..."), "", 0, this, SLOT(slotCurrencyDialog()), actionCollection(), "tools_currency_editor");
+ new KAction(i18n("Prices..."), "", 0, this, SLOT(slotPriceDialog()), actionCollection(), "tools_price_editor");
+ new KAction(i18n("Update Stock and Currency Prices..."), "", 0, this, SLOT(slotEquityPriceUpdate()), actionCollection(), "tools_update_prices");
+ new KAction(i18n("Consistency Check"), "", 0, this, SLOT(slotFileConsitencyCheck()), actionCollection(), "tools_consistency_check");
+ new KAction(i18n("Performance-Test"), "fork", 0, this, SLOT(slotPerformanceTest()), actionCollection(), "tools_performancetest");
+ new KAction(i18n("KCalc..."), "kcalc", 0, this, SLOT(slotToolsStartKCalc()), actionCollection(), "tools_kcalc");
+
+ // *****************
+ // The settings menu
+ // *****************
+ KStdAction::preferences(this, SLOT( slotSettings() ), actionCollection());
+ new KAction(i18n("Enable all messages"), "", 0, this, SLOT(slotEnableMessages()), actionCollection(), "settings_enable_messages");
+ new KAction(i18n("KDE language settings..."), "", 0, this, SLOT(slotKDELanguageSettings()), actionCollection(), "settings_language");
+
+ // *************
+ // The help menu
+ // *************
+ new KAction(i18n("&Show tip of the day"), "idea", 0, this, SLOT(slotShowTipOfTheDay()), actionCollection(), "help_show_tip");
+
+ // ***************************
+ // Actions w/o main menu entry
+ // ***************************
+ new KAction(i18n("New transaction button", "New"), "filenew", QKeySequence(Qt::CTRL | Qt::Key_Insert), this, SLOT(slotTransactionsNew()), actionCollection(), "transaction_new");
+
+ // we use Return as the same shortcut for Edit and Enter. Therefore, we don't allow
+ // to change them (The standard KDE dialog complains anyway if you want to assign
+ // the same shortcut to two actions)
+ p = new KAction(i18n("Edit transaction button", "Edit"), "edit", 0, this, SLOT(slotTransactionsEdit()), actionCollection(), "transaction_edit");
+ p->setShortcutConfigurable(false);
+ p = new KAction(i18n("Enter transaction", "Enter"), "button_ok", 0, this, SLOT(slotTransactionsEnter()), actionCollection(), "transaction_enter");
+ p->setShortcutConfigurable(false);
+
+ new KAction(i18n("Edit split button", "Edit splits"), "split_transaction", 0, this, SLOT(slotTransactionsEditSplits()), actionCollection(), "transaction_editsplits");
+ new KAction(i18n("Cancel transaction edit", "Cancel"), "button_cancel", 0, this, SLOT(slotTransactionsCancel()), actionCollection(), "transaction_cancel");
+ new KAction(i18n("Delete transaction", "Delete"), "delete", 0, this, SLOT(slotTransactionsDelete()), actionCollection(), "transaction_delete");
+ new KAction(i18n("Duplicate transaction", "Duplicate"), "editcopy", 0, this, SLOT(slotTransactionDuplicate()), actionCollection(), "transaction_duplicate");
+
+ new KAction(i18n("Button text for match transaction", "Match"), "stop", 0, this, SLOT(slotTransactionMatch()), actionCollection(), "transaction_match");
+ new KAction(i18n("Accept 'imported' and 'matched' transaction", "Accept"), "apply", 0, this, SLOT(slotTransactionsAccept()), actionCollection(), "transaction_accept");
+
+ new KAction(i18n("Toggle reconciliation flag", "Toggle"), 0, KShortcut("Ctrl+Space"), this, SLOT(slotToggleReconciliationFlag()), actionCollection(), "transaction_mark_toggle");
+ new KAction(i18n("Mark transaction cleared", "Cleared"), 0, KShortcut("Ctrl+Alt+Space"), this, SLOT(slotMarkTransactionCleared()), actionCollection(), "transaction_mark_cleared");
+ new KAction(i18n("Mark transaction reconciled", "Reconciled"), "", KShortcut("Ctrl+Shift+Space"), this, SLOT(slotMarkTransactionReconciled()), actionCollection(), "transaction_mark_reconciled");
+ new KAction(i18n("Mark transaction not reconciled", "Not reconciled"), "", 0, this, SLOT(slotMarkTransactionNotReconciled()), actionCollection(), "transaction_mark_notreconciled");
+ new KAction(i18n("Select all transactions", "Select all"), 0, KShortcut("Ctrl+A"), this, SIGNAL(selectAllTransactions()), actionCollection(), "transaction_select_all");
+
+ new KAction(i18n("Goto account"), "goto", 0, this, SLOT(slotTransactionGotoAccount()), actionCollection(), "transaction_goto_account");
+ new KAction(i18n("Goto payee"), "goto", 0, this, SLOT(slotTransactionGotoPayee()), actionCollection(), "transaction_goto_payee");
+ new KAction(i18n("Create scheduled transaction..."), "bookmark_add", 0, this, SLOT(slotTransactionCreateSchedule()), actionCollection(), "transaction_create_schedule");
+ new KAction(i18n("Assign next number"), "", KShortcut("Ctrl+Shift+N"), this, SLOT(slotTransactionAssignNumber()), actionCollection(), "transaction_assign_number");
+ new KAction(i18n("Combine transactions", "Combine"), "", 0, this, SLOT(slotTransactionCombine()), actionCollection(), "transaction_combine");
+
+ new KAction(i18n("New investment"), "filenew", 0, this, SLOT(slotInvestmentNew()), actionCollection(), "investment_new");
+ new KAction(i18n("Edit investment..."), "edit", 0, this, SLOT(slotInvestmentEdit()), actionCollection(), "investment_edit");
+ new KAction(i18n("Delete investment..."), "delete", 0, this, SLOT(slotInvestmentDelete()), actionCollection(), "investment_delete");
+ new KAction(i18n("Online price update..."), "", 0, this, SLOT(slotOnlinePriceUpdate()), actionCollection(), "investment_online_price_update");
+ new KAction(i18n("Manual price update..."), "", 0, this, SLOT(slotManualPriceUpdate()), actionCollection(), "investment_manual_price_update");
+
+ new KAction(i18n("New scheduled transaction..."), "filenew", 0, this, SLOT(slotScheduleNew()), actionCollection(), "schedule_new");
+ new KAction(i18n("Edit scheduled transaction..."), "edit", 0, this, SLOT(slotScheduleEdit()), actionCollection(), "schedule_edit");
+ new KAction(i18n("Delete scheduled transaction..."), "delete", 0, this, SLOT(slotScheduleDelete()), actionCollection(), "schedule_delete");
+ new KAction(i18n("Duplicate scheduled transaction"), "editcopy", 0, this, SLOT(slotScheduleDuplicate()), actionCollection(), "schedule_duplicate");
+ new KAction(i18n("Enter next transaction..."), "key_enter", 0, this, SLOT(slotScheduleEnter()), actionCollection(), "schedule_enter");
+ new KAction(i18n("Skip next transaction..."), "player_fwd", 0, this, SLOT(slotScheduleSkip()), actionCollection(), "schedule_skip");
+
+ new KAction(i18n("New payee"), "filenew", 0, this, SLOT(slotPayeeNew()), actionCollection(), "payee_new");
+ new KAction(i18n("Rename payee"), "edit", 0, this, SIGNAL(payeeRename()), actionCollection(), "payee_rename");
+ new KAction(i18n("Delete payee"), "delete", 0, this, SLOT(slotPayeeDelete()), actionCollection(), "payee_delete");
+
+ new KAction(i18n("New budget"), "filenew", 0, this, SLOT(slotBudgetNew()), actionCollection(), "budget_new");
+ new KAction(i18n("Rename budget"), "edit", 0, this, SIGNAL(budgetRename()), actionCollection(), "budget_rename");
+ new KAction(i18n("Delete budget"), "delete", 0, this, SLOT(slotBudgetDelete()), actionCollection(), "budget_delete");
+ new KAction(i18n("Copy budget"), "editcopy", 0, this, SLOT(slotBudgetCopy()), actionCollection(), "budget_copy");
+ new KAction(i18n("Change budget year"), "", 0, this, SLOT(slotBudgetChangeYear()), actionCollection(), "budget_change_year");
+ new KAction(i18n("Budget based on forecast", "Forecast"), "forcast", 0, this, SLOT(slotBudgetForecast()), actionCollection(), "budget_forecast");
+
+ // ************************
+ // Currency actions
+ // ************************
+ new KAction(i18n("New currency"), "filenew", 0, this, SLOT(slotCurrencyNew()), actionCollection(), "currency_new");
+ new KAction(i18n("Rename currency"), "edit", 0, this, SIGNAL(currencyRename()), actionCollection(), "currency_rename");
+ new KAction(i18n("Delete currency"), "delete", 0, this, SLOT(slotCurrencyDelete()), actionCollection(), "currency_delete");
+ new KAction(i18n("Select as base currency"), "kmymoney2", 0, this, SLOT(slotCurrencySetBase()), actionCollection(), "currency_setbase");
+
+#ifdef KMM_DEBUG
+ new KAction("Test new feature", "", KShortcut("Ctrl+G"), this, SLOT(slotNewFeature()), actionCollection(), "new_user_wizard");
+ new KToggleAction("Debug Traces", "", 0, this, SLOT(slotToggleTraces()), actionCollection(), "debug_traces");
+ new KToggleAction("Debug Timers", "", 0, this, SLOT(slotToggleTimers()), actionCollection(), "debug_timers");
+#endif
+ // ************************
+ // Currently unused actions
+ // ************************
+#if 0
+ new KToolBarPopupAction(i18n("View back"), "back", 0, this, SLOT(slotShowPreviousView()), actionCollection(), "go_back");
+ new KToolBarPopupAction(i18n("View forward"), "forward", 0, this, SLOT(slotShowNextView()), actionCollection(), "go_forward");
+
+ action("go_back")->setEnabled(false);
+ action("go_forward")->setEnabled(false);
+#endif
+
+ // Setup transaction detail switch
+ toggleAction("view_show_transaction_detail")->setChecked(KMyMoneyGlobalSettings::showRegisterDetailed());
+ toggleAction("view_hide_reconciled_transactions")->setChecked(KMyMoneyGlobalSettings::hideReconciledTransactions());
+ toggleAction("view_hide_unused_categories")->setChecked(KMyMoneyGlobalSettings::hideUnusedCategory());
+ toggleAction("view_show_all_accounts")->setChecked(false);
+
+ // use the absolute path to your kmymoney2ui.rc file for testing purpose in createGUI();
+ // createGUI(QString::null, false);
+ setupGUI();
+}
+
+void KMyMoney2App::dumpActions(void) const
+{
+ KActionPtrList list = actionCollection()->actions();
+ KActionPtrList::const_iterator it;
+ for(it = list.begin(); it != list.end(); ++it) {
+ std::cout << (*it)->name() << ": " << (*it)->text() << std::endl;
+ }
+}
+
+KAction* KMyMoney2App::action(const QString& actionName) const
+{
+ static KShortcut shortcut("");
+ static KAction dummyAction(QString("Dummy"), QString(), shortcut, static_cast<const QObject*>(this), 0, static_cast<KActionCollection*>(0), "");
+
+ KAction* p = actionCollection()->action(actionName.latin1());
+ if(p)
+ return p;
+
+ qWarning("Action with name '%s' not found!", actionName.latin1());
+ return &dummyAction;
+}
+
+KToggleAction* KMyMoney2App::toggleAction(const QString& actionName) const
+{
+ static KShortcut shortcut("");
+ static KToggleAction dummyAction(QString("Dummy"), QString(), shortcut, static_cast<const QObject*>(this), 0, static_cast<KActionCollection*>(0), "");
+
+ KAction* q = actionCollection()->action(actionName.latin1());
+
+ if(q) {
+ KToggleAction* p = dynamic_cast<KToggleAction*>(q);
+ if(!p) {
+ qWarning("Action '%s' is not of type KToggleAction", actionName.latin1());
+ p = &dummyAction;
+ }
+ return p;
+ }
+
+ qWarning("Action with name '%s' not found!", actionName.latin1());
+ return &dummyAction;
+}
+
+
+void KMyMoney2App::initStatusBar(void)
+{
+ ///////////////////////////////////////////////////////////////////
+ // STATUSBAR
+
+ statusBar()->insertItem("", ID_STATUS_MSG);
+ ready();
+
+ // Initialization of progress bar taken from KDevelop ;-)
+ progressBar = new KProgress(statusBar());
+ progressBar->setFrameStyle(QFrame::NoFrame | QFrame::Plain);
+ progressBar->setMargin(0);
+ progressBar->setLineWidth(0);
+ progressBar->setBackgroundMode(QWidget::PaletteBackground);
+ statusBar()->addWidget(progressBar);
+ progressBar->setFixedHeight(progressBar->sizeHint().height() - 8);
+
+ // hide the progress bar for now
+ slotStatusProgressBar(-1, -1);
+}
+
+void KMyMoney2App::saveOptions(void)
+{
+ config->setGroup("General Options");
+ config->writeEntry("Geometry", size());
+ // config->writeEntry("Show Statusbar", toggleAction("options_show_statusbar")->isChecked());
+ // toolBar("mainToolBar")->saveSettings(config, "mainToolBar");
+
+ dynamic_cast<KRecentFilesAction*>(action("file_open_recent"))->saveEntries(config,"Recent Files");
+}
+
+
+void KMyMoney2App::readOptions(void)
+{
+ config->setGroup("General Options");
+
+ toggleAction("view_hide_reconciled_transactions")->setChecked(KMyMoneyGlobalSettings::hideReconciledTransactions());
+ toggleAction("view_hide_unused_categories")->setChecked(KMyMoneyGlobalSettings::hideUnusedCategory());
+
+ // initialize the recent file list
+ KRecentFilesAction *p = dynamic_cast<KRecentFilesAction*>(action("file_open_recent"));
+ if(p)
+ p->loadEntries(config,"Recent Files");
+
+ QSize defaultSize(800, 600);
+ QSize size=config->readSizeEntry("Geometry", &defaultSize);
+ if(!size.isEmpty())
+ {
+ resize(size);
+ }
+
+ // Startdialog is written in the settings dialog
+ m_startDialog = config->readBoolEntry("StartDialog", true);
+
+ config->setGroup("Schedule Options");
+ m_bCheckSchedules = config->readBoolEntry("CheckSchedules", true);
+}
+
+void KMyMoney2App::resizeEvent(QResizeEvent* ev)
+{
+ KMainWindow::resizeEvent(ev);
+ updateCaption(true);
+}
+
+bool KMyMoney2App::queryClose(void)
+{
+ if(!isReady())
+ return false;
+
+ if (myMoneyView->dirty()) {
+ int ans = KMessageBox::warningYesNoCancel(this, i18n("KMyMoney file needs saving. Save ?"));
+ if (ans==KMessageBox::Cancel)
+ return false;
+ else if (ans==KMessageBox::Yes)
+ return slotFileSave();
+ }
+ if (myMoneyView->isDatabase())
+ slotFileClose(); // close off the database
+ return true;
+}
+
+bool KMyMoney2App::queryExit(void)
+{
+ saveOptions();
+
+ return true;
+}
+
+/////////////////////////////////////////////////////////////////////
+// SLOT IMPLEMENTATION
+/////////////////////////////////////////////////////////////////////
+void KMyMoney2App::slotFileInfoDialog(void)
+{
+ KMyMoneyFileInfoDlg dlg(0);
+ dlg.exec();
+}
+
+void KMyMoney2App::slotPerformanceTest(void)
+{
+ // dump performance report to stderr
+
+ int measurement[2];
+ QTime timer;
+ MyMoneyAccount acc;
+
+ qDebug("--- Starting performance tests ---");
+
+ // AccountList
+ MyMoneyFile::instance()->preloadCache();
+ measurement[0] = measurement[1] = 0;
+ timer.start();
+ for(int i = 0; i < 1000; ++i) {
+ QValueList<MyMoneyAccount> list;
+ MyMoneyFile::instance()->accountList(list);
+ measurement[i != 0] = timer.elapsed();
+ }
+ std::cerr << "accountList()" << std::endl;
+ std::cerr << "First time: " << measurement[0] << " msec" << std::endl;
+ std::cerr << "Total time: " << (measurement[0] + measurement[1]) << " msec" << std::endl;
+ std::cerr << "Average : " << (measurement[0] + measurement[1]) / 1000 << " msec" << std::endl;
+
+ // Balance of asset account(s)
+ MyMoneyFile::instance()->preloadCache();
+ measurement[0] = measurement[1] = 0;
+ acc = MyMoneyFile::instance()->asset();
+ for(int i = 0; i < 1000; ++i) {
+ timer.start();
+ MyMoneyMoney result = MyMoneyFile::instance()->balance(acc.id());
+ measurement[i != 0] += timer.elapsed();
+ }
+ std::cerr << "balance(Asset)" << std::endl;
+ std::cerr << "First time: " << measurement[0] << " msec" << std::endl;
+ std::cerr << "Average : " << (measurement[0] + measurement[1]) / 1000 << " msec" << std::endl;
+
+ // total balance of asset account
+ MyMoneyFile::instance()->preloadCache();
+ measurement[0] = measurement[1] = 0;
+ acc = MyMoneyFile::instance()->asset();
+ for(int i = 0; i < 1000; ++i) {
+ timer.start();
+ MyMoneyMoney result = MyMoneyFile::instance()->totalBalance(acc.id());
+ measurement[i != 0] += timer.elapsed();
+ }
+ std::cerr << "totalBalance(Asset)" << std::endl;
+ std::cerr << "First time: " << measurement[0] << " msec" << std::endl;
+ std::cerr << "Average : " << (measurement[0] + measurement[1]) / 1000 << " msec" << std::endl;
+
+ // Balance of expense account(s)
+ MyMoneyFile::instance()->preloadCache();
+ measurement[0] = measurement[1] = 0;
+ acc = MyMoneyFile::instance()->expense();
+ for(int i = 0; i < 1000; ++i) {
+ timer.start();
+ MyMoneyMoney result = MyMoneyFile::instance()->balance(acc.id());
+ measurement[i != 0] += timer.elapsed();
+ }
+ std::cerr << "balance(Expense)" << std::endl;
+ std::cerr << "First time: " << measurement[0] << " msec" << std::endl;
+ std::cerr << "Average : " << (measurement[0] + measurement[1]) / 1000 << " msec" << std::endl;
+
+ // total balance of expense account
+ MyMoneyFile::instance()->preloadCache();
+ measurement[0] = measurement[1] = 0;
+ acc = MyMoneyFile::instance()->expense();
+ timer.start();
+ for(int i = 0; i < 1000; ++i) {
+ MyMoneyMoney result = MyMoneyFile::instance()->totalBalance(acc.id());
+ measurement[i != 0] = timer.elapsed();
+ }
+ std::cerr << "totalBalance(Expense)" << std::endl;
+ std::cerr << "First time: " << measurement[0] << " msec" << std::endl;
+ std::cerr << "Total time: " << (measurement[0] + measurement[1]) << " msec" << std::endl;
+ std::cerr << "Average : " << (measurement[0] + measurement[1]) / 1000 << " msec" << std::endl;
+
+ // transaction list
+ MyMoneyFile::instance()->preloadCache();
+ measurement[0] = measurement[1] = 0;
+ if(MyMoneyFile::instance()->asset().accountCount()) {
+ MyMoneyTransactionFilter filter(MyMoneyFile::instance()->asset().accountList()[0]);
+ filter.setDateFilter(QDate(), QDate::currentDate());
+ QValueList<MyMoneyTransaction> list;
+
+ timer.start();
+ for(int i = 0; i < 100; ++i) {
+ list = MyMoneyFile::instance()->transactionList(filter);
+ measurement[i != 0] = timer.elapsed();
+ }
+ std::cerr << "transactionList()" << std::endl;
+ std::cerr << "First time: " << measurement[0] << " msec" << std::endl;
+ std::cerr << "Total time: " << (measurement[0] + measurement[1]) << " msec" << std::endl;
+ std::cerr << "Average : " << (measurement[0] + measurement[1]) / 100 << " msec" << std::endl;
+ }
+
+ // transaction list
+ MyMoneyFile::instance()->preloadCache();
+ measurement[0] = measurement[1] = 0;
+ if(MyMoneyFile::instance()->asset().accountCount()) {
+ MyMoneyTransactionFilter filter(MyMoneyFile::instance()->asset().accountList()[0]);
+ filter.setDateFilter(QDate(), QDate::currentDate());
+ QValueList<MyMoneyTransaction> list;
+
+ timer.start();
+ for(int i = 0; i < 100; ++i) {
+ MyMoneyFile::instance()->transactionList(list, filter);
+ measurement[i != 0] = timer.elapsed();
+ }
+ std::cerr << "transactionList(list)" << std::endl;
+ std::cerr << "First time: " << measurement[0] << " msec" << std::endl;
+ std::cerr << "Total time: " << (measurement[0] + measurement[1]) << " msec" << std::endl;
+ std::cerr << "Average : " << (measurement[0] + measurement[1]) / 100 << " msec" << std::endl;
+ }
+ MyMoneyFile::instance()->preloadCache();
+}
+
+void KMyMoney2App::slotFileNew(void)
+{
+ KMSTATUS(i18n("Creating new document..."));
+
+ slotFileClose();
+
+ if(!myMoneyView->fileOpen()) {
+ // next line required until we move all file handling out of KMyMoneyView
+ myMoneyView->newFile();
+
+ m_fileName = KURL();
+ updateCaption();
+
+ // before we create the wizard, we need to preload the currencies
+ MyMoneyFileTransaction ft;
+ myMoneyView->loadDefaultCurrencies();
+ myMoneyView->loadAncientCurrencies();
+ ft.commit();
+
+ NewUserWizard::Wizard *wizard = new NewUserWizard::Wizard();
+
+ if(wizard->exec() == QDialog::Accepted) {
+ MyMoneyFile* file = MyMoneyFile::instance();
+ ft.restart();
+ try {
+ // store the user info
+ file->setUser(wizard->user());
+
+ // setup base currency
+ file->setBaseCurrency(wizard->baseCurrency());
+
+ // create a possible institution
+ MyMoneyInstitution inst = wizard->institution();
+ if(inst.name().length()) {
+ file->addInstitution(inst);
+ }
+
+ // create a possible checking account
+ MyMoneyAccount acc = wizard->account();
+ if(acc.name().length()) {
+ acc.setInstitutionId(inst.id());
+ MyMoneyAccount asset = file->asset();
+ file->addAccount(acc, asset);
+
+ // create possible opening balance transaction
+ if(!wizard->openingBalance().isZero()) {
+ file->createOpeningBalanceTransaction(acc, wizard->openingBalance());
+ }
+ }
+
+ // import the account templates
+ QValueList<MyMoneyTemplate> templates = wizard->templates();
+ QValueList<MyMoneyTemplate>::iterator it_t;
+ for(it_t = templates.begin(); it_t != templates.end(); ++it_t) {
+ (*it_t).importTemplate(&progressCallback);
+ }
+
+ m_fileName = KURL(wizard->url());
+ ft.commit();
+ KMyMoneyGlobalSettings::setFirstTimeRun(false);
+
+ // FIXME This is a bit clumsy. We re-read the freshly
+ // created file to be able to run through all the
+ // fixup logic and then save it to keep the modified
+ // flag off.
+ slotFileSave();
+ myMoneyView->readFile(m_fileName);
+ slotFileSave();
+
+ // now keep the filename in the recent files used list
+ KRecentFilesAction *p = dynamic_cast<KRecentFilesAction*>(action("file_open_recent"));
+ if(p)
+ p->addURL( m_fileName );
+ writeLastUsedFile(m_fileName.url());
+
+ } catch(MyMoneyException* e) {
+ delete e;
+ // next line required until we move all file handling out of KMyMoneyView
+ myMoneyView->closeFile();
+ }
+
+ } else {
+ // next line required until we move all file handling out of KMyMoneyView
+ myMoneyView->closeFile();
+ }
+ delete wizard;
+ updateCaption();
+
+ emit fileLoaded(m_fileName);
+ }
+}
+
+KURL KMyMoney2App::selectFile(const QString& title, const QString& _path, const QString& mask, KFile::Mode mode)
+{
+ KURL url;
+ QString path(_path);
+
+ if(path.isEmpty())
+ path = KGlobalSettings::documentPath();
+
+ KFileDialog* dialog = new KFileDialog(path, mask, this, title, true);
+ dialog->setMode(mode);
+
+ if(dialog->exec() == QDialog::Accepted) {
+ url = dialog->selectedURL();
+ }
+ delete dialog;
+
+ return url;
+}
+
+// General open
+void KMyMoney2App::slotFileOpen(void)
+{
+ KMSTATUS(i18n("Open a file."));
+
+ KFileDialog* dialog = new KFileDialog(KGlobalSettings::documentPath(),
+ i18n("%1|KMyMoney files\n%2|All files (*.*)").arg("*.kmy *.xml").arg("*"),
+ this, i18n("Open File..."), true);
+ dialog->setMode(KFile::File | KFile::ExistingOnly);
+
+ if(dialog->exec() == QDialog::Accepted) {
+ slotFileOpenRecent(dialog->selectedURL());
+ }
+ delete dialog;
+}
+
+void KMyMoney2App::slotOpenDatabase(void)
+{
+ KMSTATUS(i18n("Open a file."));
+ KSelectDatabaseDlg dialog;
+ dialog.setMode(IO_ReadWrite);
+
+ if(dialog.exec() == QDialog::Accepted) {
+ slotFileOpenRecent(dialog.selectedURL());
+ }
+}
+
+bool KMyMoney2App::isImportableFile( const KURL& url )
+{
+ bool result = false;
+
+ // Iterate through the plugins and see if there's a loaded plugin who can handle it
+ QMap<QString,KMyMoneyPlugin::ImporterPlugin*>::const_iterator it_plugin = m_importerPlugins.begin();
+ while ( it_plugin != m_importerPlugins.end() )
+ {
+ if ( (*it_plugin)->isMyFormat(url.path()) )
+ {
+ result = true;
+ break;
+ }
+ ++it_plugin;
+ }
+
+ // If we did not find a match, try importing it as a KMM statement file,
+ // which is really just for testing. the statement file is not exposed
+ // to users.
+ if ( it_plugin == m_importerPlugins.end() )
+ if ( MyMoneyStatement::isStatementFile( url.path() ) )
+ result = true;
+
+ // Place code here to test for QIF and other locally-supported formats
+ // (i.e. not a plugin). If you add them here, be sure to add it to
+ // the webConnect function.
+
+ return result;
+}
+
+void KMyMoney2App::slotFileOpenRecent(const KURL& url)
+{
+ KMSTATUS(i18n("Loading file..."));
+ KURL lastFile = m_fileName;
+
+ // check if there are other instances which might have this file open
+ QValueList<QCString> list = instanceList();
+ QValueList<QCString>::ConstIterator it;
+ bool duplicate = false;
+
+ for(it = list.begin(); duplicate == false && it != list.end(); ++it) {
+ KMyMoney2App_stub* remoteApp = new KMyMoney2App_stub(kapp->dcopClient(), (*it), "kmymoney2app");
+ QString remoteFile = remoteApp->filename();
+ if(!remoteApp->ok()) {
+ qDebug("DCOP error while calling app->filename()");
+ } else {
+ if(remoteFile == url.url()) {
+ duplicate = true;
+ }
+ }
+ delete remoteApp;
+ }
+
+ if(!duplicate) {
+
+#if KDE_IS_VERSION(3,2,0)
+ if((url.protocol() == "sql") || (url.isValid() && KIO::NetAccess::exists(url, true, this))) {
+#else
+ if((url.protocol() == "sql") || (url.isValid() && KIO::NetAccess::exists(url))) {
+#endif
+ KURL dburl = url;
+ // check if a password is needed. it may be if the URL came from the last/recent file list
+ if ((dburl.queryItem("secure") == "yes") && dburl.pass().isEmpty()) {
+ KSelectDatabaseDlg dialog(dburl);
+ dialog.setMode(IO_ReadWrite);
+
+ if(dialog.exec() == QDialog::Accepted) dburl = dialog.selectedURL();
+ }
+ slotFileClose();
+ if(!myMoneyView->fileOpen()) {
+ if(myMoneyView->readFile(dburl)) {
+ if((myMoneyView->isNativeFile())) {
+ m_fileName = dburl;
+ KRecentFilesAction *p = dynamic_cast<KRecentFilesAction*>(action("file_open_recent"));
+ if(p)
+ p->addURL(dburl.prettyURL(0, KURL::StripFileProtocol));
+ writeLastUsedFile(dburl.prettyURL(0, KURL::StripFileProtocol));
+ } else {
+ m_fileName = KURL(); // imported files have no filename
+ }
+ ::timetrace("Start checking schedules");
+ // Check the schedules
+ slotCheckSchedules();
+ ::timetrace("Done checking schedules");
+ }
+
+ updateCaption();
+ ::timetrace("Announcing new filename");
+ emit fileLoaded(m_fileName);
+ ::timetrace("Announcing new filename done");
+ }
+ } else {
+ slotFileClose();
+ KMessageBox::sorry(this, QString("<p>")+i18n("<b>%1</b> is either an invalid filename or the file does not exist. You can open another file or create a new one.").arg(url.prettyURL(0, KURL::StripFileProtocol)), i18n("File not found"));
+ }
+ } else {
+ KMessageBox::sorry(this, QString("<p>")+i18n("File <b>%1</b> is already opened in another instance of KMyMoney").arg(url.prettyURL(0, KURL::StripFileProtocol)), i18n("Duplicate open"));
+ }
+}
+
+bool KMyMoney2App::slotFileSave(void)
+{
+ // if there's nothing changed, there's no need to save anything
+ if(!myMoneyView->dirty())
+ return true;
+
+ bool rc = false;
+
+ KMSTATUS(i18n("Saving file..."));
+
+ if (m_fileName.isEmpty())
+ return slotFileSaveAs();
+
+ /*if (myMoneyView->isDatabase()) {
+ rc = myMoneyView->saveDatabase(m_fileName);
+ // the 'save' function is no longer relevant for a database*/
+ setEnabled(false);
+ rc = myMoneyView->saveFile(m_fileName, MyMoneyFile::instance()->value("kmm-encryption-key"));
+ setEnabled(true);
+
+ m_autoSaveTimer->stop();
+
+ updateCaption();
+ return rc;
+}
+
+void KMyMoney2App::slotFileSaveAsFilterChanged(const QString& filter)
+{
+ if(m_saveEncrypted) {
+ if(filter != "*.kmy") {
+ m_saveEncrypted->setCurrentItem(0);
+ m_saveEncrypted->setEnabled(false);
+ } else {
+ m_saveEncrypted->setEnabled(true);
+ }
+ }
+}
+
+void KMyMoney2App::slotManageGpgKeys(void)
+{
+ KGpgKeySelectionDlg dlg(this);
+ dlg.setKeys(m_additionalGpgKeys);
+ if(dlg.exec() == QDialog::Accepted) {
+ m_additionalGpgKeys = dlg.keys();
+ m_additionalKeyLabel->setText(i18n("Additional encryption key(s) to be used: %1").arg(m_additionalGpgKeys.count()));
+ }
+}
+
+void KMyMoney2App::slotKeySelected(int idx)
+{
+ int cnt = 0;
+ if(idx != 0) {
+ cnt = m_additionalGpgKeys.count();
+ }
+ m_additionalKeyLabel->setEnabled(idx != 0);
+ m_additionalKeyButton->setEnabled(idx != 0);
+ m_additionalKeyLabel->setText(i18n("Additional encryption key(s) to be used: %1").arg(cnt));
+}
+
+bool KMyMoney2App::slotFileSaveAs(void)
+{
+ bool rc = false;
+ // in event of it being a database, ensure that all data is read into storage for saveas
+ if (myMoneyView->isDatabase())
+ dynamic_cast<IMyMoneySerialize*> (MyMoneyFile::instance()->storage())->fillStorage();
+ KMSTATUS(i18n("Saving file with a new filename..."));
+ QString prevDir= ""; // don't prompt file name if not a native file
+ if (myMoneyView->isNativeFile())
+ prevDir = readLastUsedDir();
+
+ // fill the additional key list with the default
+ m_additionalGpgKeys = KMyMoneyGlobalSettings::gpgRecipientList();
+
+ QVBox* vbox = new QVBox();
+ if(KGPGFile::GPGAvailable()) {
+ QHBox* keyBox = new QHBox(vbox);
+ new QLabel(i18n("Encryption key to be used"), keyBox);
+ m_saveEncrypted = new KComboBox(keyBox);
+
+ QHBox* labelBox = new QHBox(vbox);
+ m_additionalKeyLabel = new QLabel(i18n("Additional encryption key(s) to be used: %1").arg(m_additionalGpgKeys.count()), labelBox);
+ m_additionalKeyButton = new KPushButton(i18n("Manage additional keys"), labelBox);
+ connect(m_additionalKeyButton, SIGNAL(clicked()), this, SLOT(slotManageGpgKeys()));
+ connect(m_saveEncrypted, SIGNAL(activated(int)), this, SLOT(slotKeySelected(int)));
+
+ // fill the secret key list and combo box
+ QStringList keyList;
+ KGPGFile::secretKeyList(keyList);
+ m_saveEncrypted->insertItem(i18n("No encryption"));
+
+ for(QStringList::iterator it = keyList.begin(); it != keyList.end(); ++it) {
+ QStringList fields = QStringList::split(":", *it);
+ if(fields[0] != RECOVER_KEY_ID) {
+ // replace parenthesis in name field with brackets
+ QString name = fields[1];
+ name.replace('(', "[");
+ name.replace(')', "]");
+ name = QString("%1 (0x%2)").arg(name).arg(fields[0]);
+ m_saveEncrypted->insertItem(name);
+ if(name.contains(KMyMoneyGlobalSettings::gpgRecipient())) {
+ m_saveEncrypted->setCurrentItem(name);
+ }
+ }
+ }
+ }
+
+ // the following code is copied from KFileDialog::getSaveFileName,
+ // adjust to our local needs (filetypes etc.) and
+ // enhanced to show the m_saveEncrypted combo box
+ bool specialDir = prevDir.at(0) == ':';
+ KFileDialog dlg( specialDir ? prevDir : QString::null,
+ QString("%1|%2\n").arg("*.kmy").arg(i18n("KMyMoney (Filefilter)", "KMyMoney files")) +
+ QString("%1|%2\n").arg("*.xml").arg(i18n("XML (Filefilter)", "XML files")) +
+ QString("%1|%2\n").arg("*.anon.xml").arg(i18n("Anonymous (Filefilter)", "Anonymous files")) +
+ QString("%1|%2\n").arg("*").arg(i18n("All files")),
+ this, "filedialog", true, vbox);
+ connect(&dlg, SIGNAL(filterChanged(const QString&)), this, SLOT(slotFileSaveAsFilterChanged(const QString&)));
+
+ if ( !specialDir )
+ dlg.setSelection( prevDir ); // may also be a filename
+
+ dlg.setOperationMode( KFileDialog::Saving );
+ dlg.setCaption(i18n("Save As"));
+
+ if(dlg.exec() == QDialog::Accepted) {
+
+ KURL newURL = dlg.selectedURL();
+ if (!newURL.isEmpty()) {
+ QString newName = newURL.prettyURL(0, KURL::StripFileProtocol);
+
+ // end of copy
+
+ // find last . delimiter
+ int nLoc = newName.findRev('.');
+ if(nLoc != -1)
+ {
+ QString strExt, strTemp;
+ strTemp = newName.left(nLoc + 1);
+ strExt = newName.right(newName.length() - (nLoc + 1));
+ if((strExt.find("kmy", 0, FALSE) == -1) && (strExt.find("xml", 0, FALSE) == -1))
+ {
+
+ strTemp.append("kmy");
+ //append to make complete file name
+ newName = strTemp;
+ }
+ }
+ else
+ {
+ newName.append(".kmy");
+ }
+
+ if(okToWriteFile(newName)) {
+ KRecentFilesAction *p = dynamic_cast<KRecentFilesAction*>(action("file_open_recent"));
+ if(p)
+ p->addURL( newName );
+
+ setEnabled(false);
+ // If this is the anonymous file export, just save it, don't actually take the
+ // name, or remember it! Don't even try to encrypt it
+ if (newName.right(9).lower() == ".anon.xml")
+ {
+ rc = myMoneyView->saveFile(newName);
+ }
+ else
+ {
+
+ m_fileName = newName;
+ QString encryptionKeys;
+ if(m_saveEncrypted && m_saveEncrypted->currentItem() != 0) {
+ QRegExp keyExp(".* \\((.*)\\)");
+ if(keyExp.search(m_saveEncrypted->currentText()) != -1) {
+ encryptionKeys = keyExp.cap(1);
+ }
+ if(!m_additionalGpgKeys.isEmpty()) {
+ if(!encryptionKeys.isEmpty())
+ encryptionKeys += ",";
+ encryptionKeys += m_additionalGpgKeys.join(",");
+ }
+ }
+ rc = myMoneyView->saveFile(newName, encryptionKeys);
+ //write the directory used for this file as the default one for next time.
+ writeLastUsedDir(newName);
+ writeLastUsedFile(newName);
+ }
+ m_autoSaveTimer->stop();
+ setEnabled(true);
+ }
+ }
+ }
+
+ updateCaption();
+ return rc;
+}
+
+bool KMyMoney2App::slotSaveAsDatabase(void)
+{
+
+ bool rc = false;
+ // in event of it being a database, ensure that all data is read into storage for saveas
+ if (myMoneyView->isDatabase())
+ dynamic_cast<IMyMoneySerialize*> (MyMoneyFile::instance()->storage())->fillStorage();
+ KMSTATUS(i18n("Saving file to database..."));
+ KSelectDatabaseDlg dialog;
+ dialog.setMode(IO_WriteOnly);
+ KURL oldUrl = m_fileName.isEmpty() ? lastOpenedURL() : m_fileName;
+ KURL url = oldUrl;
+
+ while (oldUrl == url && dialog.exec() == QDialog::Accepted) {
+ url = dialog.selectedURL();
+ // If the protocol is SQL for the old and new, and the hostname and database names match
+ // Let the user know that the current database cannot be saved on top of itself.
+ if (url.protocol() == "sql" && oldUrl.protocol() == "sql"
+ && oldUrl.host() == url.host()
+ && oldUrl.queryItem("driver") == url.queryItem("driver")
+ && oldUrl.path().right(oldUrl.path().length() - 1) == url.path().right(url.path().length() - 1)) {
+ KMessageBox::sorry(this, i18n("Cannot save to current database."));
+ } else {
+ rc = myMoneyView->saveAsDatabase(url);
+ }
+ }
+ if (rc) {
+ KRecentFilesAction *p = dynamic_cast<KRecentFilesAction*>(action("file_open_recent"));
+ if(p)
+ p->addURL(url.prettyURL(0, KURL::StripFileProtocol));
+ writeLastUsedFile(url.prettyURL(0, KURL::StripFileProtocol));
+ }
+ m_autoSaveTimer->stop();
+ updateCaption();
+ return rc;
+}
+
+void KMyMoney2App::slotFileCloseWindow(void)
+{
+ KMSTATUS(i18n("Closing window..."));
+
+ if (myMoneyView->dirty()) {
+ int answer = KMessageBox::warningYesNoCancel(this, i18n("The file has been changed, save it ?"));
+ if (answer == KMessageBox::Cancel)
+ return;
+ else if (answer == KMessageBox::Yes)
+ slotFileSave();
+ }
+ close();
+}
+
+void KMyMoney2App::slotFileClose(void)
+{
+ bool okToSelect = true;
+
+ // check if transaction editor is open and ask user what he wants to do
+ slotTransactionsCancelOrEnter(okToSelect);
+
+ if(!okToSelect)
+ return;
+
+ // no update status here, as we might delete the status too early.
+ if (myMoneyView->dirty()) {
+ int answer = KMessageBox::warningYesNoCancel(this, i18n("The file has been changed, save it ?"));
+ if (answer == KMessageBox::Cancel)
+ return;
+ else if (answer == KMessageBox::Yes)
+ slotFileSave();
+ }
+
+ slotSelectAccount();
+ slotSelectInstitution();
+ slotSelectInvestment();
+ slotSelectSchedule();
+ slotSelectCurrency();
+ slotSelectBudget(QValueList<MyMoneyBudget>());
+ slotSelectPayees(QValueList<MyMoneyPayee>());
+ slotSelectTransactions(KMyMoneyRegister::SelectedTransactions());
+
+ m_reconciliationAccount = MyMoneyAccount();
+ myMoneyView->finishReconciliation(m_reconciliationAccount);
+
+ myMoneyView->closeFile();
+ m_fileName = KURL();
+ updateCaption();
+
+ // just create a new balance warning object
+ delete d->m_balanceWarning;
+ d->m_balanceWarning = new KBalanceWarning(this);
+
+ emit fileLoaded(m_fileName);
+}
+
+void KMyMoney2App::slotFileQuit(void)
+{
+ // don't modify the status message here as this will prevent quit from working!!
+ // See the beginning of queryClose() and isReady() why. Thomas Baumgart 2005-10-17
+
+ KMainWindow* w = 0;
+
+ if(memberList) {
+
+ for(w=memberList->first(); w!=0; w=memberList->next()) {
+ // only close the window if the closeEvent is accepted. If the user presses Cancel on the saveModified() dialog,
+
+ // the window and the application stay open.
+ if(!w->close())
+ break;
+ }
+ // We will only quit if all windows were processed and not cancelled
+ if(w == 0)
+ kapp->quit();
+
+ } else
+ kapp->quit();
+}
+
+void KMyMoney2App::slotHideReconciledTransactions(void)
+{
+ KMyMoneyGlobalSettings::setHideReconciledTransactions(toggleAction("view_hide_reconciled_transactions")->isChecked());
+ myMoneyView->slotRefreshViews();
+}
+
+void KMyMoney2App::slotHideUnusedCategories(void)
+{
+ KMyMoneyGlobalSettings::setHideUnusedCategory(toggleAction("view_hide_unused_categories")->isChecked());
+ myMoneyView->slotRefreshViews();
+}
+
+void KMyMoney2App::slotShowAllAccounts(void)
+{
+ myMoneyView->slotRefreshViews();
+}
+
+void KMyMoney2App::slotToggleTraces(void)
+{
+ MyMoneyTracer::onOff(toggleAction("debug_traces")->isChecked() ? 1 : 0);
+}
+
+void KMyMoney2App::slotToggleTimers(void)
+{
+ extern bool timersOn; // main.cpp
+ timersOn = toggleAction("debug_timers")->isChecked();
+}
+
+const QString KMyMoney2App::slotStatusMsg(const QString &text)
+{
+ ///////////////////////////////////////////////////////////////////
+ // change status message permanently
+ QString msg = m_statusMsg;
+
+ m_statusMsg = text;
+ if(m_statusMsg.isEmpty())
+ m_statusMsg = i18n("Ready.");
+ statusBar()->clear();
+ statusBar()->changeItem(text, ID_STATUS_MSG);
+ return msg;
+}
+
+void KMyMoney2App::ready(void)
+{
+ slotStatusMsg(QString());
+}
+
+bool KMyMoney2App::isReady(void)
+{
+ return m_statusMsg == i18n("Ready.");
+}
+
+void KMyMoney2App::slotStatusProgressBar(int current, int total)
+{
+ if(total == -1 && current == -1) { // reset
+ progressBar->reset();
+ progressBar->hide();
+ m_nextUpdate = 0;
+
+ } else if(total != 0) { // init
+ progressBar->setTotalSteps(total);
+ progressBar->show();
+
+ // make sure, we don't waste too much time for updateing the screen.
+ // if we have more than 1000 steps, we update the progress bar
+ // every 100 steps. If we have less, we allow to update
+ // every 10 steps.
+ m_progressUpdate = 1;
+ if(total > 100)
+ m_progressUpdate = 10;
+ if(total > 1000)
+ m_progressUpdate = 100;
+ m_nextUpdate = 0;
+
+ } else { // update
+ if(current > m_nextUpdate) {
+ progressBar->setProgress(current);
+ QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput, 10);
+ m_nextUpdate += m_progressUpdate;
+ }
+ }
+}
+
+void KMyMoney2App::progressCallback(int current, int total, const QString& msg)
+{
+ if(!msg.isEmpty())
+ kmymoney2->slotStatusMsg(msg);
+
+ kmymoney2->slotStatusProgressBar(current, total);
+}
+
+void KMyMoney2App::slotFileViewPersonal(void)
+{
+ if ( !myMoneyView->fileOpen() ) {
+ KMessageBox::information(this, i18n("No KMyMoneyFile open"));
+ return;
+ }
+
+ KMSTATUS(i18n("Viewing personal data..."));
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyPayee user = file->user();
+
+ KNewFileDlg newFileDlg(user.name(), user.address(),
+ user.city(), user.state(), user.postcode(), user.telephone(),
+ user.email(), this, "NewFileDlg", i18n("Edit Personal Data"));
+
+ if (newFileDlg.exec() == QDialog::Accepted)
+ {
+ user.setName(newFileDlg.userNameText);
+ user.setAddress(newFileDlg.userStreetText);
+ user.setCity(newFileDlg.userTownText);
+ user.setState(newFileDlg.userCountyText);
+ user.setPostcode(newFileDlg.userPostcodeText);
+ user.setTelephone(newFileDlg.userTelephoneText);
+ user.setEmail(newFileDlg.userEmailText);
+ MyMoneyFileTransaction ft;
+ try {
+ file->setUser(user);
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ KMessageBox::information(this, i18n("Unable to store user information: %1").arg(e->what()));
+ delete e;
+ }
+ }
+}
+
+void KMyMoney2App::slotFileFileInfo(void)
+{
+ if ( !myMoneyView->fileOpen() ) {
+ KMessageBox::information(this, i18n("No KMyMoneyFile open"));
+ return;
+ }
+
+ QFile g( "kmymoney2.dump" );
+ g.open( IO_WriteOnly );
+ QDataStream st(&g);
+ MyMoneyStorageDump dumper;
+ dumper.writeStream(st, dynamic_cast<IMyMoneySerialize*> (MyMoneyFile::instance()->storage()));
+ g.close();
+}
+
+void KMyMoney2App::slotLoadAccountTemplates(void)
+{
+ KMSTATUS(i18n("Importing account templates."));
+
+ int rc;
+ KLoadTemplateDlg* dlg = new KLoadTemplateDlg();
+ if((rc = dlg->exec()) == QDialog::Accepted) {
+ MyMoneyFileTransaction ft;
+ try {
+ // import the account templates
+ QValueList<MyMoneyTemplate> templates = dlg->templates();
+ QValueList<MyMoneyTemplate>::iterator it_t;
+ for(it_t = templates.begin(); it_t != templates.end(); ++it_t) {
+ (*it_t).importTemplate(&progressCallback);
+ }
+ ft.commit();
+ } catch(MyMoneyException* e) {
+ KMessageBox::detailedSorry(0, i18n("Error"), i18n("Unable to import template(s): %1, thrown in %2:%3").arg(e->what()).arg(e->file()).arg(e->line()));
+ delete e;
+ }
+ }
+ delete dlg;
+}
+
+void KMyMoney2App::slotSaveAccountTemplates(void)
+{
+ KMSTATUS(i18n("Exporting account templates."));
+
+ QString newName = KFileDialog::getSaveFileName(KGlobalSettings::documentPath(),
+ i18n("*.kmt|KMyMoney template files\n"
+ "*.*|All files"), this, i18n("Save as..."));
+ //
+ // If there is no file extension, then append a .kmt at the end of the file name.
+ // If there is a file extension, make sure it is .kmt, delete any others.
+ //
+ if(!newName.isEmpty())
+ {
+ // find last . delimiter
+ int nLoc = newName.findRev('.');
+ if(nLoc != -1)
+ {
+ QString strExt, strTemp;
+ strTemp = newName.left(nLoc + 1);
+ strExt = newName.right(newName.length() - (nLoc + 1));
+ if((strExt.find("kmt", 0, FALSE) == -1))
+ {
+ strTemp.append("kmt");
+ //append to make complete file name
+ newName = strTemp;
+ }
+ }
+ else
+ {
+ newName.append(".kmt");
+ }
+
+ if(okToWriteFile(newName)) {
+ MyMoneyTemplate templ;
+ templ.exportTemplate(&progressCallback);
+ templ.saveTemplate(newName);
+ }
+ }
+}
+
+void KMyMoney2App::slotQifImport(void)
+{
+ if(m_qifReader == 0) {
+ // FIXME: the menu entry for qif import should be disabled here
+
+ KImportDlg* dlg = new KImportDlg(0);
+
+ if(dlg->exec()) {
+ KMSTATUS(i18n("Importing file..."));
+ m_qifReader = new MyMoneyQifReader;
+
+ // remove all kmm-statement-#.txt files
+ d->unlinkStatementXML();
+
+ connect(m_qifReader, SIGNAL(importFinished()), this, SLOT(slotQifImportFinished()));
+
+ m_qifReader->setURL(dlg->filename());
+
+ m_qifReader->setProfile(dlg->profile());
+ m_qifReader->setCategoryMapping(dlg->m_typeComboBox->currentItem() == 0);
+ m_qifReader->setProgressCallback(&progressCallback);
+
+ // disable all standard widgets during the import
+ setEnabled(false);
+
+ d->m_ft = new MyMoneyFileTransaction();
+ d->m_collectingStatements = true;
+ d->m_statementResults.clear();
+ m_qifReader->startImport();
+ }
+ delete dlg;
+
+ slotUpdateActions();
+ }
+}
+
+void KMyMoney2App::slotQifImportFinished(void)
+{
+ if(m_qifReader != 0) {
+ m_qifReader->finishImport();
+ d->m_ft->commit();
+ d->m_collectingStatements = false;
+
+ KMessageBox::informationList(this, i18n("The statements have been processed with the following results:"), d->m_statementResults, i18n("Statement stats"));
+
+#if 0
+ // fixme: re-enable the QIF import menu options
+ if(m_qifReader->finishImport()) {
+ if(verifyImportedData(m_qifReader->account())) {
+ // keep the new data set, destroy the backup copy
+ delete m_engineBackup;
+ m_engineBackup = 0;
+ }
+ }
+
+ if(m_engineBackup != 0) {
+ // user cancelled, destroy the updated set and keep the backup copy
+ IMyMoneyStorage* data = file->storage();
+
+
+ if(data != 0) {
+ file->detachStorage(data);
+ delete data;
+ }
+ file->attachStorage(m_engineBackup);
+ m_engineBackup = 0;
+
+ }
+#endif
+
+ // update the views as they might still contain invalid data
+ // from the import session. The same applies for the window caption
+ myMoneyView->slotRefreshViews();
+ updateCaption();
+
+ delete m_qifReader;
+ m_qifReader = 0;
+ }
+ delete d->m_ft;
+ d->m_ft = 0;
+
+ slotStatusProgressBar(-1, -1);
+ ready();
+
+ // re-enable all standard widgets
+ setEnabled(true);
+ slotUpdateActions();
+}
+
+void KMyMoney2App::slotGncImport(void)
+{
+ if (myMoneyView->fileOpen()) {
+ switch (KMessageBox::questionYesNoCancel (0,
+ i18n("You cannot import GnuCash data into an existing file. Do you wish to save this file?"), PACKAGE)) {
+ case KMessageBox::Yes:
+ slotFileSave();
+ break;
+ case KMessageBox::No:
+ myMoneyView->closeFile();
+ m_fileName = KURL();
+ break;
+ default:
+ return;
+ }
+ }
+
+ KMSTATUS(i18n("Importing a Gnucash file."));
+
+ KFileDialog* dialog = new KFileDialog(KGlobalSettings::documentPath(),
+ i18n("%1|Gnucash files\n%2|All files (*.*)").arg("*").arg("*"),
+ this, i18n("Import Gnucash file..."), true);
+ dialog->setMode(KFile::File | KFile::ExistingOnly);
+
+ if(dialog->exec() == QDialog::Accepted) {
+// slotFileClose();
+// if(myMoneyView->fileOpen())
+// return;
+
+ // call the importer
+ myMoneyView->readFile(dialog->selectedURL());
+ // imported files don't have a name
+ m_fileName = KURL();
+
+ updateCaption();
+ emit fileLoaded(m_fileName);
+ }
+ delete dialog;
+
+}
+
+void KMyMoney2App::slotAccountChart(void)
+{
+#ifdef HAVE_KDCHART
+ if(!m_selectedAccount.id().isEmpty()) {
+ KBalanceChartDlg dlg(m_selectedAccount, this);
+ dlg.exec();
+ }
+#endif
+}
+
+
+//
+// KMyMoney2App::slotStatementImport() is for testing only. The MyMoneyStatement
+// is not intended to be exposed to users in XML form.
+//
+
+void KMyMoney2App::slotStatementImport(void)
+{
+ bool result = false;
+ KMSTATUS(i18n("Importing an XML Statement."));
+
+ KFileDialog* dialog = new KFileDialog(KGlobalSettings::documentPath(),
+ i18n("%1|XML files\n%2|All files (*.*)").arg("*.xml").arg("*.*"),
+ this, i18n("Import XML Statement..."), true);
+ dialog->setMode(KFile::File | KFile::ExistingOnly);
+
+ if(dialog->exec() == QDialog::Accepted)
+ {
+ result = slotStatementImport(dialog->selectedURL().path());
+
+/* QFile f( dialog->selectedURL().path() );
+ f.open( IO_ReadOnly );
+ QString error = "Unable to parse file";
+ QDomDocument* doc = new QDomDocument;
+ if(doc->setContent(&f, FALSE))
+ {
+ if ( doc->doctype().name() == "KMYMONEY-STATEMENT" )
+ {
+ QDomElement rootElement = doc->documentElement();
+ if(!rootElement.isNull())
+ {
+ QDomNode child = rootElement.firstChild();
+ if(!child.isNull() && child.isElement())
+ {
+ MyMoneyStatement s;
+ if ( s.read(child.toElement()) )
+ result = slotStatementImport(s);
+ else
+ error = "File does not contain any statements";
+ }
+ }
+ }
+ else
+ error = "File is not a KMyMoney Statement";
+ }
+ delete doc;
+
+ if ( !result )
+ {
+ QMessageBox::critical( this, i18n("Critical Error"), i18n("Unable to read file %1: %2").arg( dialog->selectedURL().path()).arg(error), QMessageBox::Ok, 0 );
+
+ }*/
+ }
+ delete dialog;
+
+ if ( !result )
+ {
+ // re-enable all standard widgets
+ setEnabled(true);
+ }
+}
+
+bool KMyMoney2App::slotStatementImport(const QString& url)
+{
+ bool result = false;
+ MyMoneyStatement s;
+ if ( MyMoneyStatement::readXMLFile( s, url ) )
+ result = slotStatementImport(s);
+ else
+ KMessageBox::error(this, i18n("Error importing %1: This file is not a valid KMM statement file.").arg(url), i18n("Invalid Statement"));
+
+ return result;
+}
+
+bool KMyMoney2App::slotStatementImport(const MyMoneyStatement& s)
+{
+ bool result = false;
+
+ // keep a copy of the statement
+ MyMoneyStatement::writeXMLFile(s, QString("/home/thb/kmm-statement-%1.txt").arg(d->statementXMLindex++));
+
+ // we use an object on the heap here, so that we can check the presence
+ // of it during slotUpdateActions() by looking at the pointer.
+ m_smtReader = new MyMoneyStatementReader;
+ m_smtReader->setAutoCreatePayee(true);
+ m_smtReader->setProgressCallback(&progressCallback);
+
+ // disable all standard widgets during the import
+ setEnabled(false);
+
+ QStringList messages;
+ result = m_smtReader->import(s, messages);
+
+ bool transactionAdded = m_smtReader->anyTransactionAdded();
+
+ // get rid of the statement reader and tell everyone else
+ // about the destruction by setting the pointer to zero
+ delete m_smtReader;
+ m_smtReader = 0;
+
+ slotStatusProgressBar(-1, -1);
+ ready();
+
+ // re-enable all standard widgets
+ setEnabled(true);
+
+ if(!d->m_collectingStatements)
+ KMessageBox::informationList(this, i18n("The statement has been processed with the following results:"), messages, i18n("Statement stats"));
+ else if(transactionAdded)
+ d->m_statementResults += messages;
+
+ return result;
+}
+
+void KMyMoney2App::slotQifExport(void)
+{
+ KMSTATUS(i18n("Exporting file..."));
+
+ KExportDlg* dlg = new KExportDlg(0);
+
+ if(dlg->exec()) {
+ if(okToWriteFile(dlg->filename())) {
+ MyMoneyQifWriter writer;
+ connect(&writer, SIGNAL(signalProgress(int, int)), this, SLOT(slotStatusProgressBar(int, int)));
+
+ writer.write(dlg->filename(), dlg->profile(), dlg->accountId(),
+ dlg->accountSelected(), dlg->categorySelected(),
+ dlg->startDate(), dlg->endDate());
+ }
+ }
+ delete dlg;
+}
+
+bool KMyMoney2App::okToWriteFile(const KURL& url)
+{
+ // check if the file exists and warn the user
+ bool reallySaveFile = true;
+
+ if(KIO::NetAccess::exists(url, true, this)) {
+ if(KMessageBox::warningYesNo(this, QString("<qt>")+i18n("The file <b>%1</b> already exists. Do you really want to override it?").arg(url.prettyURL(0, KURL::StripFileProtocol))+QString("</qt>"), i18n("File already exists")) != KMessageBox::Yes)
+ reallySaveFile = false;
+ }
+ return reallySaveFile;
+}
+
+void KMyMoney2App::slotSettings(void)
+{
+ // if we already have an instance of the settings dialog, then use it
+ if(KConfigDialog::showDialog("KMyMoney-Settings"))
+ return;
+
+ // otherwise, we have to create it
+ KConfigDialog* dlg = new KConfigDialog(this, "KMyMoney-Settings", KMyMoneyGlobalSettings::self(),
+ KDialogBase::IconList, KDialogBase::Default | KDialogBase::Ok | KDialogBase::Cancel | KDialogBase::Help, KDialogBase::Ok, true);
+
+ // create the pages ...
+ KSettingsGeneral* generalPage = new KSettingsGeneral();
+ KSettingsRegister* registerPage = new KSettingsRegister();
+ KSettingsHome* homePage = new KSettingsHome();
+ KSettingsSchedules* schedulesPage = new KSettingsSchedules();
+ KSettingsGpg* encryptionPage = new KSettingsGpg();
+ KSettingsColors* colorsPage = new KSettingsColors();
+ KSettingsFonts* fontsPage = new KSettingsFonts();
+ KSettingsOnlineQuotes* onlineQuotesPage = new KSettingsOnlineQuotes();
+ KSettingsForecast* forecastPage = new KSettingsForecast();
+ KSettingsPlugins* pluginsPage = new KSettingsPlugins();
+
+ // ... and add them to the dialog
+ dlg->addPage(generalPage, i18n("General"), "misc");
+ dlg->addPage(registerPage, i18n("Register"), "ledger");
+ dlg->addPage(homePage, i18n("Home"), "home");
+ dlg->addPage(schedulesPage, i18n("Scheduled\ntransactions"), "schedule");
+ dlg->addPage(encryptionPage, i18n("Encryption"), "kgpg");
+ dlg->addPage(colorsPage, i18n("Colors"), "colorscm");
+ dlg->addPage(fontsPage, i18n("Fonts"), "font");
+ dlg->addPage(onlineQuotesPage, i18n("Online Quotes"), "network_local");
+ dlg->addPage(forecastPage, i18n("Forecast"), "forcast");
+ dlg->addPage(pluginsPage, i18n("Plugins"), "connect_no");
+
+ connect(dlg, SIGNAL(settingsChanged()), this, SLOT(slotUpdateConfiguration()));
+ connect(dlg, SIGNAL(okClicked()), pluginsPage, SLOT(slotSavePlugins()));
+ connect(dlg, SIGNAL(defaultClicked()), pluginsPage, SLOT(slotDefaultsPlugins()));
+
+ dlg->show();
+}
+
+void KMyMoney2App::slotUpdateConfiguration(void)
+{
+ MyMoneyTransactionFilter::setFiscalYearStart(KMyMoneyGlobalSettings::firstFiscalMonth(), KMyMoneyGlobalSettings::firstFiscalDay());
+
+ myMoneyView->slotRefreshViews();
+
+ // re-read autosave configuration
+ m_autoSaveEnabled = KMyMoneyGlobalSettings::autoSaveFile();
+ m_autoSavePeriod = KMyMoneyGlobalSettings::autoSavePeriod();
+
+ // stop timer if turned off but running
+ if(m_autoSaveTimer->isActive() && !m_autoSaveEnabled) {
+ m_autoSaveTimer->stop();
+ }
+ // start timer if turned on and needed but not running
+ if(!m_autoSaveTimer->isActive() && m_autoSaveEnabled && myMoneyView->dirty()) {
+ m_autoSaveTimer->start(m_autoSavePeriod * 60 * 1000, true);
+ }
+}
+
+/** Init wizard dialog */
+bool KMyMoney2App::initWizard(void)
+{
+ KStartDlg start;
+ if (start.exec()) {
+ slotFileClose();
+ if (start.isNewFile()) {
+ slotFileNew();
+ } else if (start.isOpenFile()) {
+ KURL url;
+ url = start.getURL();
+
+ m_fileName = url.url();
+ slotFileOpenRecent(url);
+ } else { // Wizard / Template
+ m_fileName = start.getURL();
+ }
+
+ //save off directory as the last one used.
+ if(m_fileName.isLocalFile() && m_fileName.hasPath())
+ {
+ writeLastUsedDir(m_fileName.path(0));
+ writeLastUsedFile(m_fileName.path(0));
+ }
+
+ return true;
+
+ } else {
+ // cancel clicked so post an exit call
+ return false;
+ }
+}
+
+/** No descriptions */
+void KMyMoney2App::slotFileBackup(void)
+{
+ // Save the file first so isLocalFile() works
+ if (myMoneyView && myMoneyView->dirty())
+
+ {
+ if (KMessageBox::questionYesNo(this, i18n("The file must be saved first "
+ "before it can be backed up. Do you want to continue?")) == KMessageBox::No)
+ {
+ return;
+
+ }
+
+ slotFileSave();
+ }
+
+
+
+ if ( m_fileName.isEmpty() )
+ return;
+
+ if(!m_fileName.isLocalFile()) {
+ KMessageBox::sorry(this,
+ i18n("The current implementation of the backup functionality only supports local files as source files! Your current source file is '%1'.")
+ .arg(m_fileName.url()),
+
+ i18n("Local files only"));
+ return;
+ }
+
+ KBackupDlg *backupDlg = new KBackupDlg(this,0/*,true*/);
+ int returncode = backupDlg->exec();
+ if(returncode)
+ {
+
+ m_backupMount = backupDlg->mountCheckBox->isChecked();
+ proc.clearArguments();
+ m_backupState = BACKUP_MOUNTING;
+ m_mountpoint = backupDlg->txtMountPoint->text();
+
+ if (m_backupMount) {
+ progressCallback(0, 300, i18n("Mounting %1").arg(m_mountpoint));
+ proc << "mount";
+ proc << m_mountpoint;
+ proc.start();
+
+ } else {
+ // If we don't have to mount a device, we just issue
+ // a dummy command to start the copy operation
+ progressCallback(0, 300, "");
+ proc << "echo";
+ proc.start();
+ }
+
+ }
+
+ delete backupDlg;
+}
+
+
+/** No descriptions */
+void KMyMoney2App::slotProcessExited(void)
+{
+ switch(m_backupState) {
+ case BACKUP_MOUNTING:
+
+ if(proc.normalExit() && proc.exitStatus() == 0) {
+ proc.clearArguments();
+ QString today;
+ today.sprintf("-%04d-%02d-%02d.kmy",
+ QDate::currentDate().year(),
+ QDate::currentDate().month(),
+ QDate::currentDate().day());
+ QString backupfile = m_mountpoint + "/" + m_fileName.fileName(false);
+ KMyMoneyUtils::appendCorrectFileExt(backupfile, today);
+
+ // check if file already exists and ask what to do
+ m_backupResult = 0;
+ QFile f(backupfile);
+ if (f.exists()) {
+ int answer = KMessageBox::warningContinueCancel(this, i18n("Backup file for today exists on that device. Replace ?"), i18n("Backup"), i18n("&Replace"));
+ if (answer == KMessageBox::Cancel) {
+ m_backupResult = 1;
+
+ if (m_backupMount) {
+ progressCallback(250, 0, i18n("Unmounting %1").arg(m_mountpoint));
+ proc.clearArguments();
+ proc << "umount";
+ proc << m_mountpoint;
+ m_backupState = BACKUP_UNMOUNTING;
+ proc.start();
+ } else {
+ m_backupState = BACKUP_IDLE;
+ progressCallback(-1, -1, QString());
+ ready();
+ }
+ }
+ }
+
+ if(m_backupResult == 0) {
+ progressCallback(50, 0, i18n("Writing %1").arg(backupfile));
+ proc << "cp" << "-f" << m_fileName.path(0) << backupfile;
+ m_backupState = BACKUP_COPYING;
+ proc.start();
+ }
+
+ } else {
+ KMessageBox::information(this, i18n("Error mounting device"), i18n("Backup"));
+ m_backupResult = 1;
+ if (m_backupMount) {
+ progressCallback(250, 0, i18n("Unmounting %1").arg(m_mountpoint));
+ proc.clearArguments();
+ proc << "umount";
+ proc << m_mountpoint;
+ m_backupState = BACKUP_UNMOUNTING;
+ proc.start();
+
+ } else {
+ m_backupState = BACKUP_IDLE;
+ progressCallback(-1, -1, QString());
+ ready();
+ }
+ }
+ break;
+
+ case BACKUP_COPYING:
+ if(proc.normalExit() && proc.exitStatus() == 0) {
+
+ if (m_backupMount) {
+ progressCallback(250, 0, i18n("Unmounting %1").arg(m_mountpoint));
+ proc.clearArguments();
+ proc << "umount";
+ proc << m_mountpoint;
+ m_backupState = BACKUP_UNMOUNTING;
+ proc.start();
+ } else {
+ progressCallback(300, 0, i18n("Done"));
+ KMessageBox::information(this, i18n("File successfully backed up"), i18n("Backup"));
+ m_backupState = BACKUP_IDLE;
+ progressCallback(-1, -1, QString());
+ ready();
+ }
+ } else {
+ qDebug("cp exit status is %d", proc.exitStatus());
+ m_backupResult = 1;
+ KMessageBox::information(this, i18n("Error copying file to device"), i18n("Backup"));
+
+ if (m_backupMount) {
+ progressCallback(250, 0, i18n("Unmounting %1").arg(m_mountpoint));
+ proc.clearArguments();
+ proc << "umount";
+ proc << m_mountpoint;
+ m_backupState = BACKUP_UNMOUNTING;
+ proc.start();
+
+
+ } else {
+ m_backupState = BACKUP_IDLE;
+ progressCallback(-1, -1, QString());
+ ready();
+ }
+ }
+ break;
+
+
+ case BACKUP_UNMOUNTING:
+ if(proc.normalExit() && proc.exitStatus() == 0) {
+
+ progressCallback(300, 0, i18n("Done"));
+ if(m_backupResult == 0)
+ KMessageBox::information(this, i18n("File successfully backed up"), i18n("Backup"));
+ } else {
+ KMessageBox::information(this, i18n("Error unmounting device"), i18n("Backup"));
+ }
+ m_backupState = BACKUP_IDLE;
+ progressCallback(-1, -1, QString());
+ ready();
+ break;
+
+ default:
+ qWarning("Unknown state for backup operation!");
+ progressCallback(-1, -1, QString());
+ ready();
+ break;
+ }
+}
+
+void KMyMoney2App::slotFileNewWindow(void)
+{
+ KMyMoney2App *newWin = new KMyMoney2App;
+
+ newWin->show();
+}
+
+void KMyMoney2App::slotShowTipOfTheDay(void)
+{
+ KTipDialog::showTip(myMoneyView, "", true);
+}
+
+void KMyMoney2App::slotShowPreviousView(void)
+{
+
+}
+
+void KMyMoney2App::slotShowNextView(void)
+{
+
+}
+
+void KMyMoney2App::slotQifProfileEditor(void)
+{
+ MyMoneyQifProfileEditor* editor = new MyMoneyQifProfileEditor(true, this, "QIF Profile Editor");
+
+
+ editor->exec();
+
+ delete editor;
+
+}
+
+void KMyMoney2App::slotToolsStartKCalc(void)
+{
+ QString cmd = KMyMoneyGlobalSettings::externalCalculator();
+ // if none is present, we fall back to the default
+ if(cmd.isEmpty())
+ cmd = "kcalc";
+ KRun::runCommand(cmd);
+}
+
+void KMyMoney2App::slotFindTransaction(void)
+{
+ if(m_searchDlg == 0) {
+ m_searchDlg = new KFindTransactionDlg();
+ connect(m_searchDlg, SIGNAL(destroyed()), this, SLOT(slotCloseSearchDialog()));
+ connect(m_searchDlg, SIGNAL(transactionSelected(const QString&, const QString&)),
+ myMoneyView, SLOT(slotLedgerSelected(const QString&, const QString&)));
+ }
+ m_searchDlg->show();
+ m_searchDlg->raise();
+ m_searchDlg->setActiveWindow();
+}
+
+void KMyMoney2App::slotCloseSearchDialog(void)
+{
+ if(m_searchDlg)
+ m_searchDlg->deleteLater();
+ m_searchDlg = 0;
+}
+
+void KMyMoney2App::createInstitution(MyMoneyInstitution& institution)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ MyMoneyFileTransaction ft;
+
+ try {
+ file->addInstitution(institution);
+ ft.commit();
+
+ } catch (MyMoneyException *e) {
+ KMessageBox::information(this, i18n("Cannot add institution: %1").arg(e->what()));
+ delete e;
+ }
+}
+
+void KMyMoney2App::slotInstitutionNew(void)
+{
+ MyMoneyInstitution institution;
+ slotInstitutionNew(institution);
+}
+
+void KMyMoney2App::slotInstitutionNew(MyMoneyInstitution& institution)
+{
+ institution.clearId();
+ KNewBankDlg dlg(institution);
+ if (dlg.exec()) {
+ institution = dlg.institution();
+ createInstitution(institution);
+ }
+}
+
+void KMyMoney2App::slotInstitutionEdit(const MyMoneyObject& obj)
+{
+ if(typeid(obj) != typeid(MyMoneyInstitution))
+ return;
+
+ try {
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ //grab a pointer to the view, regardless of it being a account or institution view.
+ MyMoneyInstitution institution = file->institution(m_selectedInstitution.id());
+
+ // bankSuccess is not checked anymore because m_file->institution will throw anyway
+ KNewBankDlg dlg(institution);
+ if (dlg.exec()) {
+ MyMoneyFileTransaction ft;
+ try {
+ file->modifyInstitution(dlg.institution());
+ ft.commit();
+ slotSelectInstitution(file->institution(dlg.institution().id()));
+
+ } catch(MyMoneyException *e) {
+ KMessageBox::information(this, i18n("Unable to store institution: %1").arg(e->what()));
+ delete e;
+ }
+ }
+
+ } catch(MyMoneyException *e) {
+ if(!obj.id().isEmpty())
+ KMessageBox::information(this, i18n("Unable to edit institution: %1").arg(e->what()));
+ delete e;
+ }
+}
+
+void KMyMoney2App::slotInstitutionDelete(void)
+{
+ MyMoneyFile *file = MyMoneyFile::instance();
+ try {
+
+ MyMoneyInstitution institution = file->institution(m_selectedInstitution.id());
+ if ((KMessageBox::questionYesNo(this, QString("<p>")+i18n("Do you really want to delete institution <b>%1</b> ?").arg(institution.name()))) == KMessageBox::No)
+ return;
+ MyMoneyFileTransaction ft;
+
+ try {
+ file->removeInstitution(institution);
+ ft.commit();
+ } catch (MyMoneyException *e) {
+ KMessageBox::information(this, i18n("Unable to delete institution: %1").arg(e->what()));
+ delete e;
+ }
+ } catch (MyMoneyException *e) {
+ KMessageBox::information(this, i18n("Unable to delete institution: %1").arg(e->what()));
+ delete e;
+ }
+}
+
+const MyMoneyAccount& KMyMoney2App::findAccount(const MyMoneyAccount& acc, const MyMoneyAccount& parent) const
+{
+ static MyMoneyAccount nullAccount;
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+ QValueList<MyMoneyAccount> parents;
+ try {
+ // search by id
+ if(!acc.id().isEmpty()) {
+ return file->account(acc.id());
+ }
+ // collect the parents. in case parent does not have an id, we scan the all top-level accounts
+ if(parent.id().isEmpty()) {
+ parents << file->asset();
+ parents << file->liability();
+ parents << file->income();
+ parents << file->expense();
+ parents << file->equity();
+ } else {
+ parents << parent;
+ }
+ QValueList<MyMoneyAccount>::const_iterator it_p;
+ for(it_p = parents.begin(); it_p != parents.end(); ++it_p) {
+ MyMoneyAccount parentAccount = *it_p;
+ // search by name (allow hierarchy)
+ int pos;
+ // check for ':' in the name and use it as separator for a hierarchy
+ QString name = acc.name();
+ while((pos = name.find(MyMoneyFile::AccountSeperator)) != -1) {
+ QString part = name.left(pos);
+ QString remainder = name.mid(pos+1);
+ const MyMoneyAccount& existingAccount = file->subAccountByName(parentAccount, part);
+ if(existingAccount.id().isEmpty()) {
+ return existingAccount;
+ }
+ parentAccount = existingAccount;
+ name = remainder;
+ }
+ const MyMoneyAccount& existingAccount = file->subAccountByName(parentAccount, name);
+ if(!existingAccount.id().isEmpty()) {
+ if(acc.accountType() != MyMoneyAccount::UnknownAccountType) {
+ if(acc.accountType() != existingAccount.accountType())
+ continue;
+ }
+ return existingAccount;
+ }
+ }
+ } catch (MyMoneyException *e) {
+ KMessageBox::error(0, i18n("Unable to find account: %1").arg(e->what()));
+ delete e;
+ }
+ return nullAccount;
+}
+
+void KMyMoney2App::createAccount(MyMoneyAccount& newAccount, MyMoneyAccount& parentAccount, MyMoneyAccount& brokerageAccount, MyMoneyMoney openingBal)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ // make sure we have a currency. If none is assigned, we assume base currency
+ if(newAccount.currencyId().isEmpty())
+ newAccount.setCurrencyId(file->baseCurrency().id());
+
+ MyMoneyFileTransaction ft;
+ try
+ {
+ int pos;
+ // check for ':' in the name and use it as separator for a hierarchy
+ while((pos = newAccount.name().find(MyMoneyFile::AccountSeperator)) != -1) {
+ QString part = newAccount.name().left(pos);
+ QString remainder = newAccount.name().mid(pos+1);
+ const MyMoneyAccount& existingAccount = file->subAccountByName(parentAccount, part);
+ if(existingAccount.id().isEmpty()) {
+ newAccount.setName(part);
+
+ file->addAccount(newAccount, parentAccount);
+ parentAccount = newAccount;
+ } else {
+ parentAccount = existingAccount;
+ }
+ newAccount.setParentAccountId(QString()); // make sure, there's no parent
+ newAccount.clearId(); // and no id set for adding
+ newAccount.removeAccountIds(); // and no sub-account ids
+ newAccount.setName(remainder);
+ }
+
+ const MyMoneySecurity& sec = file->security(newAccount.currencyId());
+ // Check the opening balance
+ if (openingBal.isPositive() && newAccount.accountGroup() == MyMoneyAccount::Liability)
+ {
+ QString message = i18n("This account is a liability and if the "
+ "opening balance represents money owed, then it should be negative. "
+ "Negate the amount?\n\n"
+ "Please click Yes to change the opening balance to %1,\n"
+ "Please click No to leave the amount as %2,\n"
+ "Please click Cancel to abort the account creation.")
+ .arg((-openingBal).formatMoney(newAccount, sec))
+ .arg(openingBal.formatMoney(newAccount, sec));
+
+ int ans = KMessageBox::questionYesNoCancel(this, message);
+ if (ans == KMessageBox::Yes) {
+ openingBal = -openingBal;
+
+ } else if (ans == KMessageBox::Cancel)
+ return;
+ }
+
+ file->addAccount(newAccount, parentAccount);
+
+ // in case of a loan account, we add the initial payment
+ if((newAccount.accountType() == MyMoneyAccount::Loan
+ || newAccount.accountType() == MyMoneyAccount::AssetLoan)
+ && !newAccount.value("kmm-loan-payment-acc").isEmpty()
+ && !newAccount.value("kmm-loan-payment-date").isEmpty()) {
+ MyMoneyAccountLoan acc(newAccount);
+ MyMoneyTransaction t;
+ MyMoneySplit a, b;
+ a.setAccountId(acc.id());
+ b.setAccountId(acc.value("kmm-loan-payment-acc").latin1());
+ a.setValue(acc.loanAmount());
+ if(acc.accountType() == MyMoneyAccount::Loan)
+ a.setValue(-a.value());
+
+ a.setShares(a.value());
+ b.setValue(-a.value());
+ b.setShares(b.value());
+ a.setMemo(i18n("Loan payout"));
+ b.setMemo(i18n("Loan payout"));
+ t.setPostDate(QDate::fromString(acc.value("kmm-loan-payment-date"), Qt::ISODate));
+ newAccount.deletePair("kmm-loan-payment-acc");
+ newAccount.deletePair("kmm-loan-payment-date");
+ MyMoneyFile::instance()->modifyAccount(newAccount);
+
+ t.addSplit(a);
+ t.addSplit(b);
+ file->addTransaction(t);
+ file->createOpeningBalanceTransaction(newAccount, openingBal);
+
+ // in case of an investment account we check if we should create
+ // a brokerage account
+ } else if(newAccount.accountType() == MyMoneyAccount::Investment
+ && !brokerageAccount.name().isEmpty()) {
+ file->addAccount(brokerageAccount, parentAccount);
+
+ // set a link from the investment account to the brokerage account
+ file->modifyAccount(newAccount);
+ file->createOpeningBalanceTransaction(brokerageAccount, openingBal);
+
+ } else
+ file->createOpeningBalanceTransaction(newAccount, openingBal);
+
+ ft.commit();
+ }
+ catch (MyMoneyException *e)
+ {
+ KMessageBox::information(this, i18n("Unable to add account: %1").arg(e->what()));
+ delete e;
+ }
+}
+
+void KMyMoney2App::slotCategoryNew(const QString& name, QString& id)
+{
+ MyMoneyAccount account;
+ account.setName(name);
+
+ slotCategoryNew(account, MyMoneyFile::instance()->expense());
+
+ id = account.id();
+}
+
+void KMyMoney2App::slotCategoryNew(MyMoneyAccount& account, const MyMoneyAccount& parent)
+{
+ if(KMessageBox::questionYesNo(this,
+ QString("<qt>%1</qt>").arg(i18n("The category <b>%1</b> currently does not exist. Do you want to create it?<p><i>The parent account will default to <b>%2</b> but can be changed in the following dialog</i>.").arg(account.name()).arg(parent.name())), i18n("Create category"),
+ KStdGuiItem::yes(), KStdGuiItem::no(), "CreateNewCategories") == KMessageBox::Yes) {
+ createCategory(account, parent);
+ } else {
+ // we should not keep the 'no' setting because that can confuse people like
+ // I have seen in some usability tests. So we just delete it right away.
+ KConfig *kconfig = KGlobal::config();
+ if(kconfig) {
+ kconfig->setGroup(QString::fromLatin1("Notification Messages"));
+ kconfig->deleteEntry(QString::fromLatin1("CreateNewCategories"));
+ }
+ }
+}
+
+void KMyMoney2App::slotCategoryNew(void)
+{
+ MyMoneyAccount parent;
+ MyMoneyAccount account;
+
+ // Preselect the parent account by looking at the current selected account/category
+ if(!m_selectedAccount.id().isEmpty() && m_selectedAccount.isIncomeExpense()) {
+ MyMoneyFile* file = MyMoneyFile::instance();
+ try {
+ parent = file->account(m_selectedAccount.id());
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+ }
+
+ createCategory(account, parent);
+}
+
+void KMyMoney2App::createCategory(MyMoneyAccount& account, const MyMoneyAccount& parent)
+{
+ if(!parent.id().isEmpty()) {
+ try {
+ // make sure parent account exists
+ MyMoneyFile::instance()->account(parent.id());
+ account.setParentAccountId(parent.id());
+ account.setAccountType( parent.accountType() );
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+ }
+
+ KNewAccountDlg dialog(account, false, true, 0, 0, i18n("Create a new Category"));
+
+ if(dialog.exec() == QDialog::Accepted) {
+ MyMoneyAccount parentAccount, brokerageAccount;
+ account = dialog.account();
+ parentAccount = dialog.parentAccount();
+
+ createAccount(account, parentAccount, brokerageAccount, MyMoneyMoney(0,1));
+ }
+}
+
+void KMyMoney2App::slotAccountNew(void)
+{
+ MyMoneyAccount acc;
+ acc.setOpeningDate(QDate::currentDate());
+
+ slotAccountNew(acc);
+}
+
+void KMyMoney2App::slotAccountNew(MyMoneyAccount& account)
+{
+ NewAccountWizard::Wizard* wizard = new NewAccountWizard::Wizard();
+ connect(wizard, SIGNAL(createInstitution(MyMoneyInstitution&)), this, SLOT(slotInstitutionNew(MyMoneyInstitution&)));
+ connect(wizard, SIGNAL(createAccount(MyMoneyAccount&)), this, SLOT(slotAccountNew(MyMoneyAccount&)));
+ connect(wizard, SIGNAL(createPayee(const QString&, QString&)), this, SLOT(slotPayeeNew(const QString&, QString&)));
+ connect(wizard, SIGNAL(createCategory(MyMoneyAccount&, const MyMoneyAccount&)), this, SLOT(slotCategoryNew(MyMoneyAccount&, const MyMoneyAccount&)));
+
+ wizard->setAccount(account);
+
+ if(wizard->exec() == QDialog::Accepted) {
+ MyMoneyAccount acc = wizard->account();
+ if(!(acc == MyMoneyAccount())) {
+ MyMoneyFileTransaction ft;
+ MyMoneyFile* file = MyMoneyFile::instance();
+ try {
+ // create the account
+ MyMoneyAccount parent = wizard->parentAccount();
+ file->addAccount(acc, parent);
+
+ // tell the wizard about the account id which it
+ // needs to create a possible schedule and transactions
+ wizard->setAccount(acc);
+
+ // store a possible conversion rate for the currency
+ if(acc.currencyId() != file->baseCurrency().id()) {
+ file->addPrice(wizard->conversionRate());
+ }
+
+ // create the opening balance transaction if any
+ file->createOpeningBalanceTransaction(acc, wizard->openingBalance());
+ // create the payout transaction for loans if any
+ MyMoneyTransaction payoutTransaction = wizard->payoutTransaction();
+ if(payoutTransaction.splits().count() > 0) {
+ file->addTransaction(payoutTransaction);
+ }
+
+ // create a brokerage account if selected
+ MyMoneyAccount brokerageAccount = wizard->brokerageAccount();
+ if(!(brokerageAccount == MyMoneyAccount())) {
+ file->addAccount(brokerageAccount, parent);
+ }
+
+ // create a possible schedule
+ MyMoneySchedule sch = wizard->schedule();
+ if(!(sch == MyMoneySchedule())) {
+ MyMoneyFile::instance()->addSchedule(sch);
+ if(acc.isLoan()) {
+ MyMoneyAccountLoan accLoan = MyMoneyFile::instance()->account(acc.id());
+ accLoan.setSchedule(sch.id());
+ acc = accLoan;
+ MyMoneyFile::instance()->modifyAccount(acc);
+ }
+ }
+ ft.commit();
+ account = acc;
+ } catch (MyMoneyException *e) {
+ KMessageBox::error(this, i18n("Unable to create account: %1").arg(e->what()));
+ }
+ }
+ }
+ delete wizard;
+}
+
+void KMyMoney2App::slotInvestmentNew(MyMoneyAccount& account, const MyMoneyAccount& parent)
+{
+ QString dontShowAgain = "CreateNewInvestments";
+ if(KMessageBox::questionYesNo(this,
+ QString("<qt>")+i18n("The security <b>%1</b> currently does not exist as sub-account of <b>%2</b>. "
+ "Do you want to create it?").arg(account.name()).arg(parent.name())+QString("</qt>"), i18n("Create security"),
+ KStdGuiItem::yes(), KStdGuiItem::no(), dontShowAgain) == KMessageBox::Yes) {
+ KNewInvestmentWizard dlg;
+ dlg.setName(account.name());
+ if(dlg.exec() == QDialog::Accepted) {
+ dlg.createObjects(parent.id());
+ account = dlg.account();
+ }
+ } else {
+ // in case the user said no but turned on the don't show again selection, we will enable
+ // the message no matter what. Otherwise, the user is not able to use this feature
+ // in the future anymore.
+ KMessageBox::enableMessage(dontShowAgain);
+ }
+}
+
+void KMyMoney2App::slotInvestmentNew(void)
+{
+ KNewInvestmentWizard dlg;
+ if(dlg.exec() == QDialog::Accepted) {
+ dlg.createObjects(m_selectedAccount.id());
+ }
+}
+
+void KMyMoney2App::slotInvestmentEdit(void)
+{
+ KNewInvestmentWizard dlg(m_selectedInvestment);
+ if(dlg.exec() == QDialog::Accepted) {
+ dlg.createObjects(m_selectedAccount.id());
+ }
+}
+
+void KMyMoney2App::slotInvestmentDelete(void)
+{
+ if(KMessageBox::questionYesNo(this, QString("<p>")+i18n("Do you really want to delete the investment <b>%1</b>?").arg(m_selectedInvestment.name()), i18n("Delete investment"), KStdGuiItem::yes(), KStdGuiItem::no(), "DeleteInvestment") == KMessageBox::Yes) {
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyFileTransaction ft;
+ try {
+ file->removeAccount(m_selectedInvestment);
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ KMessageBox::information(this, i18n("Unable to delete investment: %1").arg(e->what()));
+ delete e;
+ }
+ } else {
+ // we should not keep the 'no' setting because that can confuse people like
+ // I have seen in some usability tests. So we just delete it right away.
+ KConfig *kconfig = KGlobal::config();
+ if(kconfig) {
+ kconfig->setGroup(QString::fromLatin1("Notification Messages"));
+ kconfig->deleteEntry(QString::fromLatin1("DeleteInvestment"));
+ }
+ }
+}
+
+void KMyMoney2App::slotOnlinePriceUpdate(void)
+{
+ if(!m_selectedInvestment.id().isEmpty()) {
+ KEquityPriceUpdateDlg dlg(0, m_selectedInvestment.currencyId());
+ if(dlg.exec() == QDialog::Accepted)
+ dlg.storePrices();
+ }
+}
+
+void KMyMoney2App::slotManualPriceUpdate(void)
+{
+ if(!m_selectedInvestment.id().isEmpty()) {
+ try {
+ MyMoneySecurity security = MyMoneyFile::instance()->security(m_selectedInvestment.currencyId());
+ MyMoneySecurity currency = MyMoneyFile::instance()->security(security.tradingCurrency());
+ MyMoneyPrice price = MyMoneyFile::instance()->price(security.id(), currency.id());
+ signed64 fract = MyMoneyMoney::precToDenom(KMyMoneyGlobalSettings::pricePrecision());
+
+ KCurrencyCalculator calc(security, currency, MyMoneyMoney(1,1), price.rate(currency.id()), price.date(), fract);
+ calc.setupPriceEditor();
+
+ // The dialog takes care of adding the price if necessary
+ calc.exec();
+ } catch(MyMoneyException* e) {
+ qDebug("Error in price update: %s", e->what().data());
+ delete e;
+ }
+ }
+}
+
+void KMyMoney2App::createSchedule(MyMoneySchedule newSchedule, MyMoneyAccount& newAccount)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ // Add the schedule only if one exists
+ //
+ // Remember to modify the first split to reference the newly created account
+ if (!newSchedule.name().isEmpty())
+ {
+ try
+ {
+ // We assume at least 2 splits in the transaction
+ MyMoneyTransaction t = newSchedule.transaction();
+ if(t.splitCount() < 2) {
+ throw new MYMONEYEXCEPTION("Transaction for schedule has less than 2 splits!");
+ }
+#if 0
+ // now search the split that does not have an account reference
+ // and set it up to be the one of the account we just added
+ // to the account pool. Note: the schedule code used to leave
+ // this always the first split, but the loan code leaves it as
+ // the second one. So I thought, searching is a good alternative ....
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ for(it_s = t.splits().begin(); it_s != t.splits().end(); ++it_s) {
+ if((*it_s).accountId().isEmpty()) {
+ MyMoneySplit s = (*it_s);
+ s.setAccountId(newAccount.id());
+ t.modifySplit(s);
+ break;
+ }
+ }
+ newSchedule.setTransaction(t);
+#endif
+
+ MyMoneyFileTransaction ft;
+ try {
+ file->addSchedule(newSchedule);
+
+ // in case of a loan account, we keep a reference to this
+ // schedule in the account
+ if(newAccount.accountType() == MyMoneyAccount::Loan
+ || newAccount.accountType() == MyMoneyAccount::AssetLoan) {
+ newAccount.setValue("schedule", newSchedule.id());
+ file->modifyAccount(newAccount);
+ }
+ ft.commit();
+ } catch (MyMoneyException *e) {
+ KMessageBox::information(this, i18n("Unable to add scheduled transaction: "), e->what());
+ delete e;
+ }
+ }
+ catch (MyMoneyException *e)
+ {
+ KMessageBox::information(this, i18n("Unable to add scheduled transaction: "), e->what());
+ delete e;
+ }
+ }
+}
+
+bool KMyMoney2App::exchangeAccountInTransaction(MyMoneyTransaction& _t, const QString& fromId, const QString& toId)
+{
+ bool rc = false;
+ MyMoneyTransaction t(_t);
+ QValueList<MyMoneySplit>::iterator it_s;
+ for(it_s = t.splits().begin(); it_s != t.splits().end(); ++it_s) {
+ if((*it_s).accountId() == fromId) {
+ (*it_s).setAccountId(toId);
+ _t.modifySplit(*it_s);
+ rc = true;
+ }
+ }
+ return rc;
+}
+
+void KMyMoney2App::slotAccountDelete(void)
+{
+ if (m_selectedAccount.id().isEmpty())
+ return; // need an account ID
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+ // can't delete standard accounts or account which still have transactions assigned
+ if (file->isStandardAccount(m_selectedAccount.id()))
+ return;
+
+ // check if the account is referenced by a transaction or schedule
+ MyMoneyFileBitArray skip(IMyMoneyStorage::MaxRefCheckBits);
+ skip.fill(false);
+ skip.setBit(IMyMoneyStorage::RefCheckAccount);
+ skip.setBit(IMyMoneyStorage::RefCheckInstitution);
+ skip.setBit(IMyMoneyStorage::RefCheckPayee);
+ skip.setBit(IMyMoneyStorage::RefCheckSecurity);
+ skip.setBit(IMyMoneyStorage::RefCheckCurrency);
+ skip.setBit(IMyMoneyStorage::RefCheckPrice);
+ bool hasReference = file->isReferenced(m_selectedAccount, skip);
+
+ // make sure we only allow transactions in a 'category' (income/expense account)
+ switch(m_selectedAccount.accountType()) {
+ case MyMoneyAccount::Income:
+ case MyMoneyAccount::Expense:
+ break;
+
+ default:
+ // if the account is still referenced
+ if(hasReference) {
+ return;
+ }
+ break;
+ }
+
+ // if we get here and still have transactions referencing the account, we
+ // need to check with the user to possibly re-assign them to a different account
+ bool needAskUser = true;
+ bool exit = false;
+
+ MyMoneyFileTransaction ft;
+
+ if(hasReference) {
+ // show transaction reassignment dialog
+
+ needAskUser = false;
+ KCategoryReassignDlg* dlg = new KCategoryReassignDlg(this);
+ QString categoryId = dlg->show(m_selectedAccount);
+ delete dlg; // and kill the dialog
+ if (categoryId.isEmpty())
+ return; // the user aborted the dialog, so let's abort as well
+
+ MyMoneyAccount newCategory = file->account(categoryId);
+ try {
+ {
+ KMSTATUS(i18n("Adjusting transactions..."));
+ /*
+ m_selectedAccount.id() is the old id, categoryId the new one
+ Now search all transactions and schedules that reference m_selectedAccount.id()
+ and replace that with categoryId.
+ */
+ // get the list of all transactions that reference the old account
+ MyMoneyTransactionFilter filter(m_selectedAccount.id());
+ filter.setReportAllSplits(false);
+ QValueList<MyMoneyTransaction> tlist;
+ QValueList<MyMoneyTransaction>::iterator it_t;
+ file->transactionList(tlist, filter);
+
+ slotStatusProgressBar(0, tlist.count());
+ int cnt = 0;
+ for(it_t = tlist.begin(); it_t != tlist.end(); ++it_t) {
+ slotStatusProgressBar(++cnt, 0);
+ MyMoneyTransaction t = (*it_t);
+ if(exchangeAccountInTransaction(t, m_selectedAccount.id(), categoryId))
+ file->modifyTransaction(t);
+ }
+ slotStatusProgressBar(tlist.count(), 0);
+ }
+ // now fix all schedules
+ {
+ KMSTATUS(i18n("Adjusting scheduled transactions..."));
+ QValueList<MyMoneySchedule> slist = file->scheduleList(m_selectedAccount.id());
+ QValueList<MyMoneySchedule>::iterator it_s;
+
+ int cnt = 0;
+ slotStatusProgressBar(0, slist.count());
+ for(it_s = slist.begin(); it_s != slist.end(); ++it_s) {
+ slotStatusProgressBar(++cnt, 0);
+ MyMoneyTransaction t = (*it_s).transaction();
+ if(exchangeAccountInTransaction(t, m_selectedAccount.id(), categoryId)) {
+ (*it_s).setTransaction(t);
+ file->modifySchedule(*it_s);
+ }
+ }
+ slotStatusProgressBar(slist.count(), 0);
+ }
+ // now fix all budgets
+ {
+ KMSTATUS(i18n("Adjusting budgets..."));
+ QValueList<MyMoneyBudget> blist = file->budgetList();
+ QValueList<MyMoneyBudget>::const_iterator it_b;
+ for(it_b = blist.begin(); it_b != blist.end(); ++it_b) {
+ if((*it_b).hasReferenceTo(m_selectedAccount.id())) {
+ MyMoneyBudget b = (*it_b);
+ MyMoneyBudget::AccountGroup fromBudget = b.account(m_selectedAccount.id());
+ MyMoneyBudget::AccountGroup toBudget = b.account(categoryId);
+ toBudget += fromBudget;
+ b.setAccount(toBudget, toBudget.id());
+ b.removeReference(m_selectedAccount.id());
+ file->modifyBudget(b);
+
+ }
+ }
+ slotStatusProgressBar(blist.count(), 0);
+ }
+ } catch(MyMoneyException *e) {
+ KMessageBox::error( this, i18n("Unable to exchange category <b>%1</b> with category <b>%2</b>. Reason: %3").arg(m_selectedAccount.name()).arg(newCategory.name()).arg(e->what()));
+ delete e;
+ exit = true;
+ }
+ slotStatusProgressBar(-1, -1);
+ }
+
+ if(exit)
+ return;
+
+ // at this point, we must not have a reference to the account
+ // to be deleted anymore
+ switch(m_selectedAccount.accountGroup()) {
+ // special handling for categories to allow deleting of empty subcategories
+ case MyMoneyAccount::Income:
+ case MyMoneyAccount::Expense:
+ { // open a compound statement here to be able to declare variables
+ // which would otherwise not work within a case label.
+
+ // case A - only a single, unused category without subcats selected
+ if (m_selectedAccount.accountList().isEmpty()) {
+ if (!needAskUser || (KMessageBox::questionYesNo(this, QString("<qt>")+i18n("Do you really want to delete category <b>%1</b>?").arg(m_selectedAccount.name())+QString("</qt>")) == KMessageBox::Yes)) {
+ try {
+ file->removeAccount(m_selectedAccount);
+ m_selectedAccount.clearId();
+ slotUpdateActions();
+ ft.commit();
+ } catch(MyMoneyException* e) {
+ KMessageBox::error( this, QString("<qt>")+i18n("Unable to delete category <b>%1</b>. Cause: %2").arg(m_selectedAccount.name()).arg(e->what())+QString("</qt>"));
+ delete e;
+ }
+ }
+ return;
+ }
+ // case B - we have some subcategories, maybe the user does not want to
+ // delete them all, but just the category itself?
+ MyMoneyAccount parentAccount = file->account(m_selectedAccount.parentAccountId());
+
+ QStringList accountsToReparent;
+ int result = KMessageBox::questionYesNoCancel(this, QString("<qt>")+
+ i18n("Do you want to delete category <b>%1</b> with all its sub-categories or only "
+ "the category itself? If you only delete the category itself, all its sub-categories "
+ "will be made sub-categories of <b>%2</b>.").arg(m_selectedAccount.name()).arg(parentAccount.name())+QString("</qt>"),
+ QString::null,
+ KGuiItem(i18n("Delete all")),
+ KGuiItem(i18n("Just the category")));
+ if (result == KMessageBox::Cancel)
+ return; // cancel pressed? ok, no delete then...
+ // "No" means "Just the category" and that means we need to reparent all subaccounts
+ bool need_confirmation = false;
+ // case C - User only wants to delete the category itself
+ if (result == KMessageBox::No)
+ accountsToReparent = m_selectedAccount.accountList();
+ else {
+ // case D - User wants to delete all subcategories, now check all subcats of
+ // m_selectedAccount and remember all that cannot be deleted and
+ // must be "reparented"
+ for (QStringList::const_iterator it = m_selectedAccount.accountList().begin();
+ it != m_selectedAccount.accountList().end(); ++it)
+ {
+ // reparent account if a transaction is assigned
+ if (file->transactionCount(*it)!=0)
+ accountsToReparent.push_back(*it);
+ else if (!file->account(*it).accountList().isEmpty()) {
+ // or if we have at least one sub-account that is used for transactions
+ if (!file->hasOnlyUnusedAccounts(file->account(*it).accountList())) {
+ accountsToReparent.push_back(*it);
+ //kdDebug() << "subaccount not empty" << endl;
+ }
+ }
+ }
+ if (!accountsToReparent.isEmpty())
+ need_confirmation = true;
+ }
+ if (!accountsToReparent.isEmpty() && need_confirmation) {
+ if (KMessageBox::questionYesNo(this, QString("<p>")+i18n("Some sub-categories of category <b>%1</b> cannot "
+ "be deleted, because they are still used. They will be made sub-categories of <b>%2</b>. Proceed?").arg(m_selectedAccount.name()).arg(parentAccount.name())) != KMessageBox::Yes) {
+ return; // user gets wet feet...
+ }
+ }
+ // all good, now first reparent selected sub-categories
+ try {
+ MyMoneyAccount parent = file->account(m_selectedAccount.parentAccountId());
+ for (QStringList::const_iterator it = accountsToReparent.begin(); it != accountsToReparent.end(); ++it) {
+ MyMoneyAccount child = file->account(*it);
+ file->reparentAccount(child, parent);
+ }
+ // reload the account because the sub-account list might have changed
+ m_selectedAccount = file->account(m_selectedAccount.id());
+ // now recursively delete remaining sub-categories
+ file->removeAccountList(m_selectedAccount.accountList());
+ // don't forget to update m_selectedAccount, because we still have a copy of
+ // the old account list, which is no longer valid
+ m_selectedAccount = file->account(m_selectedAccount.id());
+ } catch(MyMoneyException* e) {
+ KMessageBox::error( this, QString("<qt>")+i18n("Unable to delete a sub-category of category <b>%1</b>. Reason: %2").arg(m_selectedAccount.name()).arg(e->what())+QString("</qt>"));
+ delete e;
+ return;
+ }
+ }
+ break; // the category/account is deleted after the switch
+
+ default:
+ if (!m_selectedAccount.accountList().isEmpty())
+ return; // can't delete accounts which still have subaccounts
+
+ if (KMessageBox::questionYesNo(this, QString("<p>")+i18n("Do you really want to "
+ "delete account <b>%1</b>?").arg(m_selectedAccount.name())) != KMessageBox::Yes) {
+ return; // ok, you don't want to? why did you click then, hmm?
+ }
+ } // switch;
+
+ try {
+ file->removeAccount(m_selectedAccount);
+ m_selectedAccount.clearId();
+ slotUpdateActions();
+ ft.commit();
+ } catch(MyMoneyException* e) {
+ KMessageBox::error( this, i18n("Unable to delete account '%1'. Cause: %2").arg(m_selectedAccount.name()).arg(e->what()));
+ delete e;
+ }
+}
+
+void KMyMoney2App::slotAccountEdit(void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ if(!m_selectedAccount.id().isEmpty()) {
+ if(!file->isStandardAccount(m_selectedAccount.id())) {
+ if(m_selectedAccount.accountType() != MyMoneyAccount::Loan
+ && m_selectedAccount.accountType() != MyMoneyAccount::AssetLoan) {
+ QString caption;
+ bool category = false;
+ switch(MyMoneyAccount::accountGroup(m_selectedAccount.accountType())) {
+ default:
+ caption = i18n("Edit account '%1'").arg(m_selectedAccount.name());
+ break;
+
+ case MyMoneyAccount::Expense:
+ case MyMoneyAccount::Income:
+ caption = i18n("Edit category '%1'").arg(m_selectedAccount.name());
+ category = true;
+ break;
+ }
+ QString tid = file->openingBalanceTransaction(m_selectedAccount);
+ MyMoneyTransaction t;
+ MyMoneySplit s0, s1;
+ KNewAccountDlg dlg(m_selectedAccount, true, category, 0, 0, caption);
+
+ if(category || m_selectedAccount.accountType() == MyMoneyAccount::Investment) {
+ dlg.setOpeningBalanceShown(false);
+ } else {
+ if(!tid.isEmpty()) {
+ try {
+ t = file->transaction(tid);
+ s0 = t.splitByAccount(m_selectedAccount.id());
+ s1 = t.splitByAccount(m_selectedAccount.id(), false);
+ dlg.setOpeningBalance(s0.shares());
+ if(m_selectedAccount.accountGroup() == MyMoneyAccount::Liability) {
+ dlg.setOpeningBalance(-s0.shares());
+ }
+ } catch(MyMoneyException *e) {
+ kdDebug(2) << "Error retrieving opening balance transaction " << tid << ": " << e->what() << "\n";
+ tid = QString();
+ delete e;
+ }
+ }
+ }
+
+ // check for online modules
+ QMap<QString, KMyMoneyPlugin::OnlinePlugin *>::const_iterator it_plugin = m_onlinePlugins.end();
+ const MyMoneyKeyValueContainer& kvp = m_selectedAccount.onlineBankingSettings();
+ if(!kvp["provider"].isEmpty()) {
+ // if we have an online provider for this account, we need to check
+ // that we have the corresponding plugin. If that exists, we ask it
+ // to provide an additional tab for the account editor.
+ it_plugin = m_onlinePlugins.find(kvp["provider"]);
+ if(it_plugin != m_onlinePlugins.end()) {
+ QString name;
+ QWidget *w = 0;
+ w = (*it_plugin)->accountConfigTab(m_selectedAccount, name);
+ dlg.addTab(w, name);
+ }
+ }
+
+ if (dlg.exec() == QDialog::Accepted) {
+ try {
+ MyMoneyFileTransaction ft;
+
+ MyMoneyAccount account = dlg.account();
+ MyMoneyAccount parent = dlg.parentAccount();
+ if(it_plugin != m_onlinePlugins.end()) {
+ account.setOnlineBankingSettings((*it_plugin)->onlineBankingSettings(account.onlineBankingSettings()));
+ }
+ MyMoneyMoney bal = dlg.openingBalance();
+ if(m_selectedAccount.accountGroup() == MyMoneyAccount::Liability) {
+ bal = -bal;
+ }
+
+ // we need to modify first, as reparent would override all other changes
+ file->modifyAccount(account);
+ if(account.parentAccountId() != parent.id()) {
+ file->reparentAccount(account, parent);
+ }
+ if(!tid.isEmpty() && dlg.openingBalance().isZero()) {
+ file->removeTransaction(t);
+
+ } else if(!tid.isEmpty() && !dlg.openingBalance().isZero()) {
+ s0.setShares(bal);
+ s0.setValue(bal);
+ t.modifySplit(s0);
+ s1.setShares(-bal);
+ s1.setValue(-bal);
+ t.modifySplit(s1);
+ file->modifyTransaction(t);
+
+ } else if(tid.isEmpty() && !dlg.openingBalance().isZero()){
+ file->createOpeningBalanceTransaction(m_selectedAccount, bal);
+ }
+
+ ft.commit();
+
+ // reload the account object as it might have changed in the meantime
+ slotSelectAccount(file->account(account.id()));
+
+ } catch(MyMoneyException* e) {
+ KMessageBox::error( this, i18n("Unable to modify account '%1'. Cause: %2").arg(m_selectedAccount.name()).arg(e->what()));
+ delete e;
+ }
+ }
+ } else {
+ KEditLoanWizard* wizard = new KEditLoanWizard(m_selectedAccount);
+ connect(wizard, SIGNAL(newCategory(MyMoneyAccount&)), this, SLOT(slotCategoryNew(MyMoneyAccount&)));
+ connect(wizard, SIGNAL(createPayee(const QString&, QString&)), this, SLOT(slotPayeeNew(const QString&, QString&)));
+ if(wizard->exec() == QDialog::Accepted) {
+ MyMoneySchedule sch = file->schedule(m_selectedAccount.value("schedule").latin1());
+ if(!(m_selectedAccount == wizard->account())
+ || !(sch == wizard->schedule())) {
+ MyMoneyFileTransaction ft;
+ try {
+ file->modifyAccount(wizard->account());
+ sch = wizard->schedule();
+ try {
+ file->schedule(sch.id());
+ file->modifySchedule(sch);
+ ft.commit();
+ } catch (MyMoneyException *e) {
+ try {
+ file->addSchedule(sch);
+ ft.commit();
+ } catch (MyMoneyException *f) {
+ qDebug("Cannot add schedule: '%s'", f->what().data());
+ delete f;
+ }
+ delete e;
+ }
+ } catch(MyMoneyException *e) {
+ qDebug("Unable to modify account %s: '%s'", m_selectedAccount.name().data(),
+ e->what().data());
+ delete e;
+ }
+ }
+ }
+ delete wizard;
+ }
+ }
+ }
+}
+
+void KMyMoney2App::slotAccountReconcileStart(void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyAccount account;
+
+ // we cannot reconcile standard accounts
+ if(!file->isStandardAccount(m_selectedAccount.id())) {
+ // check if we can reconcile this account
+ // it make's sense for asset and liability accounts
+ try {
+#if 0
+ // check if we have overdue schedules for this account
+ QValueList<MyMoneySchedule> schedules = file->scheduleList(m_selectedAccount.id(), MyMoneySchedule::TYPE_ANY, MyMoneySchedule::OCCUR_ANY, MyMoneySchedule::STYPE_ANY, QDate(), QDate(), true);
+ if(schedules.count() > 0) {
+ if(KMessageBox::questionYesNo(this, i18n("KMyMoney has detected some overdue scheduled transactions for this account. Do you want to enter those scheduled transactions now?"), i18n("Scheduled transactions found")) == KMessageBox::Yes) {
+
+ QMap<QString, bool> skipMap;
+ bool processedOne;
+ KMyMoneyUtils::EnterScheduleResultCodeE rc = KMyMoneyUtils::Enter;
+ do {
+ processedOne = false;
+ QValueList<MyMoneySchedule>::const_iterator it_sch;
+ for(it_sch = schedules.begin(); (rc != KMyMoneyUtils::Cancel) && (it_sch != schedules.end()); ++it_sch) {
+ MyMoneySchedule sch(*(it_sch));
+
+ // and enter it if it is not on the skip list
+ if(skipMap.find((*it_sch).id()) == skipMap.end()) {
+ rc = enterSchedule(sch, false, true);
+ if(rc == KMyMoneyUtils::Ignore) {
+ skipMap[(*it_sch).id()] = true;
+ }
+ }
+ }
+
+ // reload list (maybe this schedule needs to be added again)
+ schedules = file->scheduleList(m_selectedAccount.id(), MyMoneySchedule::TYPE_ANY, MyMoneySchedule::OCCUR_ANY, MyMoneySchedule::STYPE_ANY, QDate(), QDate(), true);
+ } while(processedOne);
+ }
+ }
+#endif
+
+ account = file->account(m_selectedAccount.id());
+ // get rid of previous run.
+ if(m_endingBalanceDlg)
+ delete m_endingBalanceDlg;
+ m_endingBalanceDlg = new KEndingBalanceDlg(account, this);
+ if(account.isAssetLiability()) {
+ connect(m_endingBalanceDlg, SIGNAL(createPayee(const QString&, QString&)), this, SLOT(slotPayeeNew(const QString&, QString&)));
+ connect(m_endingBalanceDlg, SIGNAL(createCategory(MyMoneyAccount&, const MyMoneyAccount&)), this, SLOT(slotCategoryNew(MyMoneyAccount&, const MyMoneyAccount&)));
+
+ if(m_endingBalanceDlg->exec() == QDialog::Accepted) {
+ if(myMoneyView->startReconciliation(account, m_endingBalanceDlg->statementDate(), m_endingBalanceDlg->endingBalance())) {
+
+ // check if the user requests us to create interest
+ // or charge transactions.
+ MyMoneyTransaction ti = m_endingBalanceDlg->interestTransaction();
+ MyMoneyTransaction tc = m_endingBalanceDlg->chargeTransaction();
+ MyMoneyFileTransaction ft;
+ try {
+ if(ti != MyMoneyTransaction()) {
+ MyMoneyFile::instance()->addTransaction(ti);
+ }
+ if(tc != MyMoneyTransaction()) {
+ MyMoneyFile::instance()->addTransaction(tc);
+ }
+ ft.commit();
+
+ } catch(MyMoneyException *e) {
+ qWarning("interest transaction not stored: '%s'", e->what().data());
+ delete e;
+ }
+
+ // reload the account object as it might have changed in the meantime
+ m_reconciliationAccount = file->account(account.id());
+ slotUpdateActions();
+ }
+ }
+ }
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+ }
+}
+
+void KMyMoney2App::slotAccountReconcileFinish(void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ if(!m_reconciliationAccount.id().isEmpty()) {
+ // retrieve list of all transactions that are not reconciled or cleared
+ QValueList<QPair<MyMoneyTransaction, MyMoneySplit> > transactionList;
+ MyMoneyTransactionFilter filter(m_reconciliationAccount.id());
+ filter.addState(MyMoneyTransactionFilter::cleared);
+ filter.addState(MyMoneyTransactionFilter::notReconciled);
+ filter.setDateFilter(QDate(), m_endingBalanceDlg->statementDate());
+ filter.setConsiderCategory(false);
+ filter.setReportAllSplits(true);
+ file->transactionList(transactionList, filter);
+
+ MyMoneyMoney balance = MyMoneyFile::instance()->balance(m_reconciliationAccount.id(), m_endingBalanceDlg->statementDate());
+ MyMoneyMoney actBalance, clearedBalance;
+ actBalance = clearedBalance = balance;
+
+ // walk the list of transactions to figure out the balance(s)
+ QValueList<QPair<MyMoneyTransaction, MyMoneySplit> >::const_iterator it;
+ for(it = transactionList.begin(); it != transactionList.end(); ++it) {
+ if((*it).second.reconcileFlag() == MyMoneySplit::NotReconciled) {
+ clearedBalance -= (*it).second.shares();
+ }
+ }
+
+ if(m_endingBalanceDlg->endingBalance() != clearedBalance) {
+ QString message = i18n("You are about to finish the reconciliation of this account with a difference between your bank statement and the transactions marked as cleared.\n"
+ "Are you sure you want to finish the reconciliation ?");
+ if (KMessageBox::questionYesNo(this, message, i18n("Confirm end of reconciliation"), KStdGuiItem::yes(), KStdGuiItem::no()) == KMessageBox::No)
+ return;
+ }
+
+ MyMoneyFileTransaction ft;
+
+ // refresh object
+ m_reconciliationAccount = file->account(m_reconciliationAccount.id());
+
+ // Turn off reconciliation mode
+ myMoneyView->finishReconciliation(m_reconciliationAccount);
+
+ m_reconciliationAccount.setValue("lastStatementBalance", m_endingBalanceDlg->endingBalance().toString());
+ m_reconciliationAccount.setLastReconciliationDate(m_endingBalanceDlg->statementDate());
+
+ m_reconciliationAccount.deletePair("lastReconciledBalance");
+ m_reconciliationAccount.deletePair("statementBalance");
+ m_reconciliationAccount.deletePair("statementDate");
+
+ try {
+ // update the account data
+ file->modifyAccount(m_reconciliationAccount);
+
+ /*
+ // collect the list of cleared splits for this account
+ filter.clear();
+ filter.addAccount(m_reconciliationAccount.id());
+ filter.addState(MyMoneyTransactionFilter::cleared);
+ filter.setConsiderCategory(false);
+ filter.setReportAllSplits(true);
+ file->transactionList(transactionList, filter);
+ */
+
+ // walk the list of transactions/splits and mark the cleared ones as reconciled
+ QValueList<QPair<MyMoneyTransaction, MyMoneySplit> >::iterator it;
+
+ for(it = transactionList.begin(); it != transactionList.end(); ++it) {
+ MyMoneySplit sp = (*it).second;
+ // skip the ones that are not marked cleared
+ if(sp.reconcileFlag() != MyMoneySplit::Cleared)
+ continue;
+
+ // always retrieve a fresh copy of the transaction because we
+ // might have changed it already with another split
+ MyMoneyTransaction t = file->transaction((*it).first.id());
+ sp.setReconcileFlag(MyMoneySplit::Reconciled);
+ sp.setReconcileDate(m_endingBalanceDlg->statementDate());
+ t.modifySplit(sp);
+
+ // update the engine ...
+ file->modifyTransaction(t);
+
+ // ... and the list
+ (*it) = qMakePair(t, sp);
+ }
+ ft.commit();
+
+ // reload account data from engine as the data might have changed in the meantime
+ m_reconciliationAccount = file->account(m_reconciliationAccount.id());
+ emit accountReconciled(m_reconciliationAccount,
+ m_endingBalanceDlg->statementDate(),
+ m_endingBalanceDlg->previousBalance(),
+ m_endingBalanceDlg->endingBalance(),
+ transactionList);
+
+ } catch(MyMoneyException *e) {
+ qDebug("Unexpected exception when setting cleared to reconcile");
+ delete e;
+ }
+ }
+ // Turn off reconciliation mode
+ m_reconciliationAccount = MyMoneyAccount();
+ slotUpdateActions();
+}
+
+void KMyMoney2App::slotAccountReconcilePostpone(void)
+{
+ MyMoneyFileTransaction ft;
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ if(!m_reconciliationAccount.id().isEmpty()) {
+ // refresh object
+ m_reconciliationAccount = file->account(m_reconciliationAccount.id());
+
+ // Turn off reconciliation mode
+ myMoneyView->finishReconciliation(m_reconciliationAccount);
+
+ m_reconciliationAccount.setValue("lastReconciledBalance", m_endingBalanceDlg->previousBalance().toString());
+ m_reconciliationAccount.setValue("statementBalance", m_endingBalanceDlg->endingBalance().toString());
+ m_reconciliationAccount.setValue("statementDate", m_endingBalanceDlg->statementDate().toString(Qt::ISODate));
+
+ try {
+ file->modifyAccount(m_reconciliationAccount);
+ ft.commit();
+ m_reconciliationAccount = MyMoneyAccount();
+ slotUpdateActions();
+ } catch(MyMoneyException *e) {
+ qDebug("Unexpected exception when setting last reconcile info into account");
+ delete e;
+ ft.rollback();
+ m_reconciliationAccount = file->account(m_reconciliationAccount.id());
+ }
+ }
+}
+
+void KMyMoney2App::slotAccountOpen(const MyMoneyObject& obj)
+{
+ if(typeid(obj) != typeid(MyMoneyAccount))
+ return;
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+ QString id = m_selectedAccount.id();
+
+ // if the caller passed a non-empty object, we need to select that
+ if(!obj.id().isEmpty()) {
+ id = obj.id();
+ }
+
+ // we cannot reconcile standard accounts
+ if(!file->isStandardAccount(id)) {
+ // check if we can open this account
+ // currently it make's sense for asset and liability accounts
+ try {
+ MyMoneyAccount account = file->account(id);
+ myMoneyView->slotLedgerSelected(account.id());
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+ }
+}
+
+bool KMyMoney2App::canCloseAccount(const MyMoneyAccount& acc) const
+{
+ // balance must be zero
+ if(!acc.balance().isZero())
+ return false;
+
+ // all children must be already closed
+ QStringList::const_iterator it_a;
+ for(it_a = acc.accountList().begin(); it_a != acc.accountList().end(); ++it_a) {
+ MyMoneyAccount a = MyMoneyFile::instance()->account(*it_a);
+ if(!a.isClosed()) {
+ return false;
+ }
+ }
+
+ // there must be no unfinished schedule referencing the account
+ QValueList<MyMoneySchedule> list = MyMoneyFile::instance()->scheduleList();
+ QValueList<MyMoneySchedule>::const_iterator it_l;
+ for(it_l = list.begin(); it_l != list.end(); ++it_l) {
+ if((*it_l).isFinished())
+ continue;
+ if((*it_l).hasReferenceTo(acc.id()))
+ return false;
+ }
+ return true;
+}
+
+void KMyMoney2App::slotAccountClose(void)
+{
+ MyMoneyAccount a;
+ if(!m_selectedInvestment.id().isEmpty())
+ a = m_selectedInvestment;
+ else if(!m_selectedAccount.id().isEmpty())
+ a = m_selectedAccount;
+ if(a.id().isEmpty())
+ return; // need an account ID
+
+ MyMoneyFileTransaction ft;
+ try {
+ a.setClosed(true);
+ MyMoneyFile::instance()->modifyAccount(a);
+ ft.commit();
+ if(KMyMoneyGlobalSettings::hideClosedAccounts()) {
+ KMessageBox::information(this, QString("<qt>")+i18n("You have closed this account. It remains in the system because you have transactions which still refer to it, but is not shown in the views. You can make it visible again by going to the View menu and selecting <b>Show all accounts</b> or by unselecting the <b>Don't show closed accounts</b> setting.")+QString("</qt>"), i18n("Information"), "CloseAccountInfo");
+ }
+ } catch(MyMoneyException* e) {
+ delete e;
+ }
+}
+
+void KMyMoney2App::slotAccountReopen(void)
+{
+ MyMoneyAccount a;
+ if(!m_selectedInvestment.id().isEmpty())
+ a = m_selectedInvestment;
+ else if(!m_selectedAccount.id().isEmpty())
+ a = m_selectedAccount;
+ if(a.id().isEmpty())
+ return; // need an account ID
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyFileTransaction ft;
+ try {
+ while(a.isClosed()) {
+ a.setClosed(false);
+ file->modifyAccount(a);
+ a = file->account(a.parentAccountId());
+ }
+ ft.commit();
+ } catch(MyMoneyException* e) {
+ delete e;
+ }
+}
+
+void KMyMoney2App::slotReparentAccount(const MyMoneyAccount& _src, const MyMoneyInstitution& _dst)
+{
+ MyMoneyAccount src(_src);
+ src.setInstitutionId(_dst.id());
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyFile::instance()->modifyAccount(src);
+ ft.commit();
+ } catch(MyMoneyException* e) {
+ KMessageBox::sorry(this, QString("<p>")+i18n("<b>%1</b> cannot be moved to institution <b>%2</b>. Reason: %3").arg(src.name()).arg(_dst.name()).arg(e->what()));
+ delete e;
+ }
+}
+
+void KMyMoney2App::slotReparentAccount(const MyMoneyAccount& _src, const MyMoneyAccount& _dst)
+{
+ MyMoneyAccount src(_src);
+ MyMoneyAccount dst(_dst);
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyFile::instance()->reparentAccount(src, dst);
+ ft.commit();
+ } catch(MyMoneyException* e) {
+ KMessageBox::sorry(this, QString("<p>")+i18n("<b>%1</b> cannot be moved to <b>%2</b>. Reason: %3").arg(src.name()).arg(dst.name()).arg(e->what()));
+ delete e;
+ }
+}
+
+void KMyMoney2App::slotAccountTransactionReport(void)
+{
+ // Generate a transaction report that contains transactions for only the
+ // currently selected account.
+ if(!m_selectedAccount.id().isEmpty()) {
+ MyMoneyReport report(
+ MyMoneyReport::eAccount,
+ MyMoneyReport::eQCnumber|MyMoneyReport::eQCpayee|MyMoneyReport::eQCcategory,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailAll,
+ i18n("%1 YTD Account Transactions").arg(m_selectedAccount.name()),
+ i18n("Generated Report")
+ );
+ report.setGroup(i18n("Transactions"));
+ report.addAccount(m_selectedAccount.id());
+
+ myMoneyView->slotShowReport(report);
+ }
+}
+
+void KMyMoney2App::slotScheduleNew(void)
+{
+ slotScheduleNew(MyMoneyTransaction());
+}
+
+void KMyMoney2App::slotScheduleNew(const MyMoneyTransaction& _t, MyMoneySchedule::occurenceE occurence)
+{
+ MyMoneySchedule schedule;
+ schedule.setOccurence(occurence);
+
+ // if the schedule is based on an existing transaction,
+ // we take the post date and project it to the next
+ // schedule in a month.
+ if(_t != MyMoneyTransaction()) {
+ MyMoneyTransaction t(_t);
+ if(occurence != MyMoneySchedule::OCCUR_ONCE)
+ t.setPostDate(schedule.nextPayment(t.postDate()));
+ schedule.setTransaction(t);
+ }
+
+ KEditScheduleDlg dlg(schedule, this);
+ TransactionEditor* transactionEditor = dlg.startEdit();
+ if(transactionEditor) {
+ if(dlg.exec() == QDialog::Accepted) {
+ MyMoneyFileTransaction ft;
+ try {
+ schedule = dlg.schedule();
+ MyMoneyFile::instance()->addSchedule(schedule);
+ ft.commit();
+
+ } catch (MyMoneyException *e) {
+ KMessageBox::error(this, i18n("Unable to add scheduled transaction: %1").arg(e->what()), i18n("Add scheduled transaction"));
+ delete e;
+ }
+ }
+ }
+ delete transactionEditor;
+}
+
+void KMyMoney2App::slotScheduleEdit(void)
+{
+ if (!m_selectedSchedule.id().isEmpty()) {
+ try {
+ MyMoneySchedule schedule = MyMoneyFile::instance()->schedule(m_selectedSchedule.id());
+
+ KEditScheduleDlg* sched_dlg = 0;
+ KEditLoanWizard* loan_wiz = 0;
+
+
+ switch (schedule.type()) {
+ case MyMoneySchedule::TYPE_BILL:
+ case MyMoneySchedule::TYPE_DEPOSIT:
+ case MyMoneySchedule::TYPE_TRANSFER:
+ sched_dlg = new KEditScheduleDlg(schedule, this);
+ m_transactionEditor = sched_dlg->startEdit();
+ if(m_transactionEditor) {
+ if(sched_dlg->exec() == QDialog::Accepted) {
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneySchedule sched = sched_dlg->schedule();
+ // Check whether the new Schedule Date
+ // is at or before the lastPaymentDate
+ // If it is, ask the user whether to clear the
+ // lastPaymentDate
+ const QDate& next = sched.nextDueDate();
+ const QDate& last = sched.lastPayment();
+ if ( next.isValid() && last.isValid() && next <= last ) {
+ // Entered a date effectively no later
+ // than previous payment. Date would be
+ // updated automatically so we probably
+ // want to clear it. Let's ask the user.
+ if(KMessageBox::questionYesNo(this, QString("<qt>")+i18n("You have entered a scheduled transaction date of <b>%1</b>. Because the scheduled transaction was last paid on <b>%2</b>, KMyMoney will automatically adjust the scheduled transaction date to the next date unless the last payment date is reset. Do you want to reset the last payment date?").arg(KGlobal::locale()->formatDate(next, true)).arg(KGlobal::locale()->formatDate(last, true))+QString("</qt>"),i18n("Reset Last Payment Date" ), KStdGuiItem::yes(), KStdGuiItem::no()) == KMessageBox::Yes) {
+ sched.setLastPayment( QDate() );
+ }
+ }
+ MyMoneyFile::instance()->modifySchedule(sched);
+ // delete the editor before we emit the dataChanged() signal from the
+ // engine. Calling this twice in a row does not hurt.
+ deleteTransactionEditor();
+ ft.commit();
+ } catch (MyMoneyException *e) {
+ KMessageBox::detailedSorry(this, i18n("Unable to modify scheduled transaction '%1'").arg(m_selectedSchedule.name()), e->what());
+ delete e;
+ }
+ }
+ deleteTransactionEditor();
+ }
+ delete sched_dlg;
+ break;
+
+ case MyMoneySchedule::TYPE_LOANPAYMENT:
+ loan_wiz = new KEditLoanWizard(schedule.account(2));
+ connect(loan_wiz, SIGNAL(newCategory(MyMoneyAccount&)), this, SLOT(slotCategoryNew(MyMoneyAccount&)));
+ connect(loan_wiz, SIGNAL(createPayee(const QString&, QString&)), this, SLOT(slotPayeeNew(const QString&, QString&)));
+ if (loan_wiz->exec() == QDialog::Accepted) {
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyFile::instance()->modifySchedule(loan_wiz->schedule());
+ MyMoneyFile::instance()->modifyAccount(loan_wiz->account());
+ ft.commit();
+ } catch (MyMoneyException *e) {
+ KMessageBox::detailedSorry(this, i18n("Unable to modify scheduled transaction '%1'").arg(m_selectedSchedule.name()), e->what());
+ delete e;
+ }
+ }
+ delete loan_wiz;
+ break;
+
+ case MyMoneySchedule::TYPE_ANY:
+ break;
+ }
+
+ } catch (MyMoneyException *e) {
+ KMessageBox::detailedSorry(this, i18n("Unable to modify scheduled transaction '%1'").arg(m_selectedSchedule.name()), e->what());
+ delete e;
+ }
+ }
+}
+
+void KMyMoney2App::slotScheduleDelete(void)
+{
+ if (!m_selectedSchedule.id().isEmpty()) {
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneySchedule sched = MyMoneyFile::instance()->schedule(m_selectedSchedule.id());
+ QString msg = QString("<p>")+i18n("Are you sure you want to delete the scheduled transaction <b>%1</b>?").arg(m_selectedSchedule.name());
+ if(sched.type() == MyMoneySchedule::TYPE_LOANPAYMENT) {
+ msg += QString(" ");
+ msg += i18n("In case of loan payments it is currently not possible to recreate the scheduled transaction.");
+ }
+ if (KMessageBox::questionYesNo(this, msg) == KMessageBox::No)
+ return;
+
+ MyMoneyFile::instance()->removeSchedule(sched);
+ ft.commit();
+
+ } catch (MyMoneyException *e) {
+ KMessageBox::detailedSorry(this, i18n("Unable to remove scheduled transaction '%1'").arg(m_selectedSchedule.name()), e->what());
+ delete e;
+ }
+ }
+}
+
+void KMyMoney2App::slotScheduleDuplicate(void)
+{
+ // since we may jump here via code, we have to make sure to react only
+ // if the action is enabled
+ if(kmymoney2->action("schedule_duplicate")->isEnabled()) {
+ MyMoneySchedule sch = m_selectedSchedule;
+ sch.clearId();
+ sch.setLastPayment(QDate());
+ sch.setName(i18n("Copy of scheduled transaction name", "Copy of %1").arg(sch.name()));
+
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyFile::instance()->addSchedule(sch);
+ ft.commit();
+
+ // select the new schedule in the view
+ if(!m_selectedSchedule.id().isEmpty())
+ myMoneyView->slotScheduleSelected(sch.id());
+
+ } catch(MyMoneyException* e) {
+ KMessageBox::detailedSorry(0, i18n("Error"), i18n("Unable to duplicate transaction(s): %1, thrown in %2:%3").arg(e->what()).arg(e->file()).arg(e->line()));
+ delete e;
+ }
+ }
+}
+
+void KMyMoney2App::slotScheduleSkip(void)
+{
+ if (!m_selectedSchedule.id().isEmpty()) {
+ try {
+ MyMoneySchedule schedule = MyMoneyFile::instance()->schedule(m_selectedSchedule.id());
+ if(!schedule.isFinished()) {
+ if(schedule.occurence() != MyMoneySchedule::OCCUR_ONCE) {
+ QDate next = schedule.nextDueDate();
+ if(!schedule.isFinished() && (KMessageBox::questionYesNo(this, QString("<qt>")+i18n("Do you really want to skip the <b>%1</b> transaction scheduled for <b>%2</b>?").arg(schedule.name(), KGlobal::locale()->formatDate(next, true))+QString("</qt>"))) == KMessageBox::Yes) {
+ MyMoneyFileTransaction ft;
+ schedule.setLastPayment(next);
+ schedule.setNextDueDate(schedule.nextPayment(next));
+ MyMoneyFile::instance()->modifySchedule(schedule);
+ ft.commit();
+ }
+ }
+ }
+ } catch (MyMoneyException *e) {
+ KMessageBox::detailedSorry(this, QString("<qt>")+i18n("Unable to skip scheduled transaction <b>%1</b>.").arg(m_selectedSchedule.name())+QString("</qt>"), e->what());
+ delete e;
+ }
+ }
+}
+
+void KMyMoney2App::slotScheduleEnter(void)
+{
+ if (!m_selectedSchedule.id().isEmpty()) {
+ try {
+ MyMoneySchedule schedule = MyMoneyFile::instance()->schedule(m_selectedSchedule.id());
+ enterSchedule(schedule);
+ } catch (MyMoneyException *e) {
+ KMessageBox::detailedSorry(this, i18n("Unknown scheduled transaction '%1'").arg(m_selectedSchedule.name()), e->what());
+ delete e;
+ }
+ }
+}
+
+KMyMoneyUtils::EnterScheduleResultCodeE KMyMoney2App::enterSchedule(MyMoneySchedule& schedule, bool autoEnter, bool extendedKeys)
+{
+ KMyMoneyUtils::EnterScheduleResultCodeE rc = KMyMoneyUtils::Cancel;
+ if (!schedule.id().isEmpty()) {
+ try {
+ schedule = MyMoneyFile::instance()->schedule(schedule.id());
+ QDate origDueDate = schedule.nextDueDate();
+
+ KEnterScheduleDlg dlg(this, schedule);
+ dlg.showExtendedKeys(extendedKeys);
+
+ m_transactionEditor = dlg.startEdit();
+ if(m_transactionEditor) {
+ MyMoneyTransaction torig, taccepted;
+ m_transactionEditor->createTransaction(torig, dlg.transaction(), schedule.transaction().splits()[0], true);
+ // force actions to be available no matter what (will be updated according to the state during
+ // slotTransactionsEnter or slotTransactionsCancel)
+ kmymoney2->action("transaction_cancel")->setEnabled(true);
+ kmymoney2->action("transaction_enter")->setEnabled(true);
+
+ KConfirmManualEnterDlg::Action action = KConfirmManualEnterDlg::ModifyOnce;
+ if(!autoEnter || !schedule.isFixed()) {
+ for(;;) {
+ rc = KMyMoneyUtils::Cancel;
+ if(dlg.exec() == QDialog::Accepted) {
+ rc = dlg.resultCode();
+ if(rc == KMyMoneyUtils::Enter) {
+ m_transactionEditor->createTransaction(taccepted, torig, torig.splits()[0], true);
+ // make sure to suppress comparison of some data: postDate
+ torig.setPostDate(taccepted.postDate());
+ if(torig != taccepted) {
+ KConfirmManualEnterDlg cdlg(schedule, this);
+ cdlg.loadTransactions(torig, taccepted);
+ if(cdlg.exec() == QDialog::Accepted) {
+ action = cdlg.action();
+ break;
+ }
+ // the user has choosen 'cancel' during confirmation,
+ // we go back to the editor
+ continue;
+ }
+ } else if(rc == KMyMoneyUtils::Skip) {
+ slotTransactionsCancel();
+ slotScheduleSkip();
+ } else {
+ slotTransactionsCancel();
+ }
+ } else {
+ if(autoEnter) {
+ if(KMessageBox::warningYesNo(this, i18n("Are you sure you wish to stop this scheduled transaction from being entered into the register?\n\nKMyMoney will prompt you again next time it starts unless you manually enter it later.")) == KMessageBox::No) {
+ // the user has choosen 'No' for the above question,
+ // we go back to the editor
+ continue;
+ }
+ }
+ slotTransactionsCancel();
+ }
+ break;
+ }
+ }
+
+ // if we still have the editor around here, the user did not cancel
+ if(m_transactionEditor) {
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyTransaction t;
+ // add the new transaction
+ switch(action) {
+ case KConfirmManualEnterDlg::UseOriginal:
+ // setup widgets with original transaction data
+ m_transactionEditor->setTransaction(dlg.transaction(), dlg.transaction().splits()[0]);
+ // and create a transaction based on that data
+ taccepted = MyMoneyTransaction();
+ m_transactionEditor->createTransaction(taccepted, dlg.transaction(), dlg.transaction().splits()[0], true);
+ break;
+
+ case KConfirmManualEnterDlg::ModifyAlways:
+ schedule.setTransaction(taccepted);
+ break;
+
+ case KConfirmManualEnterDlg::ModifyOnce:
+ break;
+ }
+
+ QString newId;
+ connect(m_transactionEditor, SIGNAL(balanceWarning(QWidget*, const MyMoneyAccount&, const QString&)), d->m_balanceWarning, SLOT(slotShowMessage(QWidget*, const MyMoneyAccount&, const QString&)));
+ if(m_transactionEditor->enterTransactions(newId, false)) {
+ if(!newId.isEmpty()) {
+ MyMoneyTransaction t = MyMoneyFile::instance()->transaction(newId);
+ schedule.setLastPayment(t.postDate());
+ }
+ schedule.setNextDueDate(schedule.nextPayment(origDueDate));
+ MyMoneyFile::instance()->modifySchedule(schedule);
+ rc = KMyMoneyUtils::Enter;
+
+ // delete the editor before we emit the dataChanged() signal from the
+ // engine. Calling this twice in a row does not hurt.
+ deleteTransactionEditor();
+ ft.commit();
+ }
+ } catch (MyMoneyException *e) {
+ KMessageBox::detailedSorry(this, i18n("Unable to enter scheduled transaction '%1'").arg(m_selectedSchedule.name()), e->what());
+ delete e;
+ }
+ deleteTransactionEditor();
+ }
+ }
+ } catch (MyMoneyException *e) {
+ KMessageBox::detailedSorry(this, i18n("Unable to enter scheduled transaction '%1'").arg(m_selectedSchedule.name()), e->what());
+ delete e;
+ }
+ }
+ return rc;
+}
+
+void KMyMoney2App::slotPayeeNew(const QString& newnameBase, QString& id)
+{
+ bool doit = true;
+
+ if(newnameBase != i18n("New Payee")) {
+ // Ask the user if that is what he intended to do?
+ QString msg = QString("<qt>") + i18n("Do you want to add <b>%1</b> as payer/receiver ?").arg(newnameBase) + QString("</qt>");
+ const QString dontAskAgain = QString::fromLatin1("NewPayee");
+ if(KMessageBox::questionYesNo(this, msg, i18n("New payee/receiver"), KStdGuiItem::yes(), KStdGuiItem::no(), dontAskAgain) == KMessageBox::No) {
+ doit = false;
+ // we should not keep the 'no' setting because that can confuse people like
+ // I have seen in some usability tests. So we just delete it right away.
+ KConfig *kconfig = KGlobal::config();
+ if(kconfig) {
+ kconfig->setGroup(QString::fromLatin1("Notification Messages"));
+ kconfig->deleteEntry(dontAskAgain);
+ }
+ }
+ }
+
+ if(doit) {
+ MyMoneyFileTransaction ft;
+ try {
+ QString newname(newnameBase);
+ // adjust name until a unique name has been created
+ int count = 0;
+ for(;;) {
+ try {
+ MyMoneyFile::instance()->payeeByName(newname);
+ newname = QString("%1 [%2]").arg(newnameBase).arg(++count);
+ } catch(MyMoneyException* e) {
+ delete e;
+ break;
+ }
+ }
+
+ MyMoneyPayee p;
+ p.setName(newname);
+ MyMoneyFile::instance()->addPayee(p);
+ id = p.id();
+ ft.commit();
+ } catch (MyMoneyException *e) {
+ KMessageBox::detailedSorry(this, i18n("Unable to add payee"),
+ QString("%1 thrown in %2:%3").arg(e->what()).arg(e->file()).arg(e->line()));
+ delete e;
+ }
+ }
+}
+
+void KMyMoney2App::slotPayeeNew(void)
+{
+ QString id;
+ slotPayeeNew(i18n("New Payee"), id);
+
+ // the callbacks should have made sure, that the payees view has been
+ // updated already. So we search for the id in the list of items
+ // and select it.
+ emit payeeCreated(id);
+}
+
+bool KMyMoney2App::payeeInList(const QValueList<MyMoneyPayee>& list, const QString& id) const
+{
+ bool rc = false;
+ QValueList<MyMoneyPayee>::const_iterator it_p = list.begin();
+ while(it_p != list.end()) {
+ if((*it_p).id() == id) {
+ rc = true;
+ break;
+ }
+ ++it_p;
+ }
+ return rc;
+}
+
+void KMyMoney2App::slotPayeeDelete(void)
+{
+ if(m_selectedPayees.isEmpty())
+ return; // shouldn't happen
+
+ MyMoneyFile * file = MyMoneyFile::instance();
+
+ // first create list with all non-selected payees
+ QValueList<MyMoneyPayee> remainingPayees = file->payeeList();
+ QValueList<MyMoneyPayee>::iterator it_p;
+ for(it_p = remainingPayees.begin(); it_p != remainingPayees.end(); ) {
+ if(m_selectedPayees.find(*it_p) != m_selectedPayees.end()) {
+ it_p = remainingPayees.erase(it_p);
+ } else {
+ ++it_p;
+ }
+ }
+
+ // get confirmation from user
+ QString prompt;
+ if (m_selectedPayees.size() == 1)
+ prompt = QString("<p>")+i18n("Do you really want to remove the payee <b>%1</b>?").arg(m_selectedPayees.front().name());
+ else
+ prompt = i18n("Do you really want to remove all selected payees?");
+
+ if (KMessageBox::questionYesNo(this, prompt, i18n("Remove Payee"))==KMessageBox::No)
+ return;
+
+ MyMoneyFileTransaction ft;
+ try {
+ // create a transaction filter that contains all payees selected for removal
+ MyMoneyTransactionFilter f = MyMoneyTransactionFilter();
+ for (QValueList<MyMoneyPayee>::const_iterator it = m_selectedPayees.begin();
+ it != m_selectedPayees.end(); ++it) {
+ f.addPayee( (*it).id() );
+ }
+ // request a list of all transactions that still use the payees in question
+ QValueList<MyMoneyTransaction> translist = file->transactionList(f);
+// kdDebug() << "[KPayeesView::slotDeletePayee] " << translist.count() << " transaction still assigned to payees" << endl;
+
+ // now get a list of all schedules that make use of one of the payees
+ QValueList<MyMoneySchedule> all_schedules = file->scheduleList();
+ QValueList<MyMoneySchedule> used_schedules;
+ for (QValueList<MyMoneySchedule>::ConstIterator it = all_schedules.begin();
+ it != all_schedules.end(); ++it)
+ {
+ // loop over all splits in the transaction of the schedule
+ for (QValueList<MyMoneySplit>::ConstIterator s_it = (*it).transaction().splits().begin();
+ s_it != (*it).transaction().splits().end(); ++s_it)
+ {
+ // is the payee in the split to be deleted?
+ if(payeeInList(m_selectedPayees, (*s_it).payeeId())) {
+ used_schedules.push_back(*it); // remember this schedule
+ break;
+ }
+ }
+ }
+// kdDebug() << "[KPayeesView::slotDeletePayee] " << used_schedules.count() << " schedules use one of the selected payees" << endl;
+
+ MyMoneyPayee newPayee;
+ bool addToMatchList = false;
+ // if at least one payee is still referenced, we need to reassign its transactions first
+ if (!translist.isEmpty() || !used_schedules.isEmpty()) {
+ // show error message if no payees remain
+ if (remainingPayees.isEmpty()) {
+ KMessageBox::sorry(this, i18n("At least one transaction/scheduled transaction is still referenced by a payee. "
+ "Currently you have all payees selected. However, at least one payee must remain so "
+ "that the transaction/scheduled transaction can be reassigned."));
+ return;
+ }
+
+ // show transaction reassignment dialog
+ KPayeeReassignDlg * dlg = new KPayeeReassignDlg(this);
+ QString payee_id = dlg->show(remainingPayees);
+ addToMatchList = dlg->addToMatchList();
+ delete dlg; // and kill the dialog
+ if (payee_id.isEmpty())
+ return; // the user aborted the dialog, so let's abort as well
+
+ newPayee = file->payee(payee_id);
+
+ // TODO : check if we have a report that explicitely uses one of our payees
+ // and issue an appropriate warning
+ try {
+ QValueList<MyMoneySplit>::iterator s_it;
+ // now loop over all transactions and reassign payee
+ for (QValueList<MyMoneyTransaction>::iterator it = translist.begin(); it != translist.end(); ++it) {
+ // create a copy of the splits list in the transaction
+ QValueList<MyMoneySplit> splits = (*it).splits();
+ // loop over all splits
+ for (s_it = splits.begin(); s_it != splits.end(); ++s_it) {
+ // if the split is assigned to one of the selected payees, we need to modify it
+ if(payeeInList(m_selectedPayees, (*s_it).payeeId())) {
+ (*s_it).setPayeeId(payee_id); // first modify payee in current split
+ // then modify the split in our local copy of the transaction list
+ (*it).modifySplit(*s_it); // this does not modify the list object 'splits'!
+ }
+ } // for - Splits
+ file->modifyTransaction(*it); // modify the transaction in the MyMoney object
+ } // for - Transactions
+
+ // now loop over all schedules and reassign payees
+ for (QValueList<MyMoneySchedule>::iterator it = used_schedules.begin();
+ it != used_schedules.end(); ++it)
+ {
+ // create copy of transaction in current schedule
+ MyMoneyTransaction trans = (*it).transaction();
+ // create copy of lists of splits
+ QValueList<MyMoneySplit> splits = trans.splits();
+ for (s_it = splits.begin(); s_it != splits.end(); ++s_it) {
+ if(payeeInList(m_selectedPayees, (*s_it).payeeId())) {
+ (*s_it).setPayeeId(payee_id);
+ trans.modifySplit(*s_it); // does not modify the list object 'splits'!
+ }
+ } // for - Splits
+ // store transaction in current schedule
+ (*it).setTransaction(trans);
+ file->modifySchedule(*it); // modify the schedule in the MyMoney engine
+ } // for - Schedules
+ } catch(MyMoneyException *e) {
+ KMessageBox::detailedSorry(0, i18n("Unable to reassign payee of transaction/split"),
+ (e->what() + " " + i18n("thrown in") + " " + e->file()+ ":%1").arg(e->line()));
+ delete e;
+ }
+ } // if !translist.isEmpty()
+
+ bool ignorecase;
+ QStringList payeeNames;
+ MyMoneyPayee::payeeMatchType matchType = newPayee.matchData(ignorecase, payeeNames);
+ QStringList deletedPayeeNames;
+
+ // now loop over all selected payees and remove them
+ for (QValueList<MyMoneyPayee>::iterator it = m_selectedPayees.begin();
+ it != m_selectedPayees.end(); ++it) {
+ if(addToMatchList) {
+ deletedPayeeNames << (*it).name();
+ }
+ file->removePayee(*it);
+ }
+
+ // if we initially have no matching turned on, we just ignore the case (default)
+ if(matchType == MyMoneyPayee::matchDisabled)
+ ignorecase = true;
+
+ // update the destination payee if this was requested by the user
+ if(addToMatchList && deletedPayeeNames.count() > 0) {
+ // add new names to the list
+ // TODO: it would be cool to somehow shrink the list to make better use
+ // of regular expressions at this point. For now, we leave this task
+ // to the user himeself.
+ QStringList::const_iterator it_n;
+ for(it_n = deletedPayeeNames.begin(); it_n != deletedPayeeNames.end(); ++it_n) {
+ if(matchType == MyMoneyPayee::matchKey) {
+ // make sure we really need it and it is not caught by an existing regexp
+ QStringList::const_iterator it_k;
+ for(it_k = payeeNames.begin(); it_k != payeeNames.end(); ++it_k) {
+ QRegExp exp(*it_k, ignorecase);
+ if(exp.search(*it_n) != -1)
+ break;
+ }
+ if(it_k == payeeNames.end())
+ payeeNames << QRegExp::escape(*it_n);
+ } else if(payeeNames.contains(*it_n) == 0)
+ payeeNames << QRegExp::escape(*it_n);
+ }
+
+ // and update the payee in the engine context
+ // make sure to turn on matching for this payee in the right mode
+ newPayee.setMatchData(MyMoneyPayee::matchKey, ignorecase, payeeNames);
+ file->modifyPayee(newPayee);
+ }
+ ft.commit();
+
+ // If we just deleted the payees, they sure don't exist anymore
+ slotSelectPayees(QValueList<MyMoneyPayee>());
+
+ } catch(MyMoneyException *e) {
+ KMessageBox::detailedSorry(0, i18n("Unable to remove payee(s)"),
+ (e->what() + " " + i18n("thrown in") + " " + e->file()+ ":%1").arg(e->line()));
+ delete e;
+ }
+}
+
+void KMyMoney2App::slotCurrencyNew(void)
+{
+ QString sid = KInputDialog::getText(i18n("New currency"), i18n("Enter ISO 4217 code for the new currency"), QString::null, 0, 0, 0, 0, ">AAA");
+ if(!sid.isEmpty()) {
+ QString id(sid);
+ MyMoneySecurity currency(id, i18n("New currency"));
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyFile::instance()->addCurrency(currency);
+ ft.commit();
+ } catch(MyMoneyException* e) {
+ KMessageBox::sorry(this, i18n("Cannot create new currency. %1").arg(e->what()), i18n("New currency"));
+ delete e;
+ }
+ emit currencyCreated(id);
+ }
+}
+
+void KMyMoney2App::slotCurrencyRename(QListViewItem* item, int, const QString& txt)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ KMyMoneyListViewItem* p = static_cast<KMyMoneyListViewItem *>(item);
+
+ try {
+ if(txt != m_selectedCurrency.name()) {
+ MyMoneySecurity currency = file->currency(p->id());
+ currency.setName(txt);
+ MyMoneyFileTransaction ft;
+ try {
+ file->modifyCurrency(currency);
+ m_selectedCurrency = currency;
+ ft.commit();
+ } catch(MyMoneyException* e) {
+ KMessageBox::sorry(this, i18n("Cannot rename currency. %1").arg(e->what()), i18n("Rename currency"));
+ delete e;
+ }
+ }
+ } catch(MyMoneyException *e) {
+ KMessageBox::sorry(this, i18n("Cannot rename currency. %1").arg(e->what()), i18n("Rename currency"));
+ delete e;
+ }
+}
+
+void KMyMoney2App::slotCurrencyDelete(void)
+{
+ if(!m_selectedCurrency.id().isEmpty()) {
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyFile::instance()->removeCurrency(m_selectedCurrency);
+ ft.commit();
+ } catch(MyMoneyException* e) {
+ KMessageBox::sorry(this, i18n("Cannot delete currency %1. %2").arg(m_selectedCurrency.name()).arg(e->what()), i18n("Delete currency"));
+ delete e;
+ }
+ }
+}
+
+void KMyMoney2App::slotCurrencySetBase(void)
+{
+ if(!m_selectedCurrency.id().isEmpty()) {
+ if(m_selectedCurrency.id() != MyMoneyFile::instance()->baseCurrency().id()) {
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyFile::instance()->setBaseCurrency(m_selectedCurrency);
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ KMessageBox::sorry(this, i18n("Cannot set %1 as base currency: %2").arg(m_selectedCurrency.name()).arg(e->what()), i18n("Set base currency"));
+ delete e;
+ }
+ }
+ }
+}
+
+void KMyMoney2App::slotBudgetNew(void)
+{
+ QDate date = QDate::currentDate(Qt::LocalTime);
+ date.setYMD(date.year(), 1, 1);
+ QString newname = i18n("Budget %1").arg(QString::number(date.year()));
+
+ MyMoneyBudget budget;
+
+ // make sure we have a unique name
+ try {
+ int i=1;
+ // Exception thrown when the name is not found
+ while (1) {
+ MyMoneyFile::instance()->budgetByName(newname);
+ newname = i18n("Budget %1 (%2)").arg(QString::number(date.year()), QString::number(i++));
+ }
+ } catch(MyMoneyException *e) {
+ // all ok, the name is unique
+ delete e;
+ }
+
+ MyMoneyFileTransaction ft;
+ try {
+ budget.setName(newname);
+ budget.setBudgetStart(date);
+
+ MyMoneyFile::instance()->addBudget(budget);
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ KMessageBox::detailedSorry(0, i18n("Error"), i18n("Unable to add budget: %1, thrown in %2:%3").arg(e->what()).arg(e->file()).arg(e->line()));
+ delete e;
+ }
+}
+
+void KMyMoney2App::slotBudgetDelete(void)
+{
+ if(m_selectedBudgets.isEmpty())
+ return; // shouldn't happen
+
+ MyMoneyFile * file = MyMoneyFile::instance();
+
+ // get confirmation from user
+ QString prompt;
+ if (m_selectedBudgets.size() == 1)
+ prompt = QString("<p>")+i18n("Do you really want to remove the budget <b>%1</b>?").arg(m_selectedBudgets.front().name());
+ else
+ prompt = i18n("Do you really want to remove all selected budgets?");
+
+ if (KMessageBox::questionYesNo(this, prompt, i18n("Remove Budget"))==KMessageBox::No)
+ return;
+
+ MyMoneyFileTransaction ft;
+ try {
+ // now loop over all selected budgets and remove them
+ for (QValueList<MyMoneyBudget>::iterator it = m_selectedBudgets.begin();
+ it != m_selectedBudgets.end(); ++it) {
+ file->removeBudget(*it);
+ }
+ ft.commit();
+
+ } catch(MyMoneyException *e) {
+ KMessageBox::detailedSorry(0, i18n("Error"), i18n("Unable to remove budget: %1, thrown in %2:%3"). arg(e->what()).arg(e->file()).arg(e->line()));
+ delete e;
+ }
+}
+
+void KMyMoney2App::slotBudgetCopy(void)
+{
+ if(m_selectedBudgets.size() == 1) {
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyBudget budget = m_selectedBudgets[0];
+ budget.clearId();
+ budget.setName(i18n("Copy of %1").arg(budget.name()));
+
+ MyMoneyFile::instance()->addBudget(budget);
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ KMessageBox::detailedSorry(0, i18n("Error"), i18n("Unable to add budget: %1, thrown in %2:%3").arg(e->what()).arg(e->file()).arg(e->line()));
+ delete e;
+ }
+ }
+}
+
+void KMyMoney2App::slotBudgetChangeYear(void)
+{
+ if(m_selectedBudgets.size() == 1) {
+ QStringList years;
+ int current = 0;
+ bool haveCurrent = false;
+ MyMoneyBudget budget = *(m_selectedBudgets.begin());
+ for(int i = (QDate::currentDate().year()-3); i < (QDate::currentDate().year()+5); ++i) {
+ years << QString("%1").arg(i);
+ if(i == budget.budgetStart().year()) {
+ haveCurrent = true;
+ }
+ if(!haveCurrent)
+ ++current;
+ }
+ if(!haveCurrent)
+ current = 0;
+ bool ok = false;
+
+ QString yearString = KInputDialog::getItem(i18n("Select year"), i18n("Budget year"), years, current, false, &ok, this);
+
+ if(ok) {
+ int year = yearString.toInt(0, 0);
+ QDate newYear = QDate(year, 1, 1);
+ if(newYear != budget.budgetStart()) {
+ MyMoneyFileTransaction ft;
+ try {
+ budget.setBudgetStart(newYear);
+ MyMoneyFile::instance()->modifyBudget(budget);
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ KMessageBox::detailedSorry(0, i18n("Error"), i18n("Unable to modify budget: %1, thrown in %2:%3"). arg(e->what()).arg(e->file()).arg(e->line()));
+ delete e;
+ }
+ }
+ }
+ }
+}
+
+void KMyMoney2App::slotBudgetForecast(void)
+{
+ if(m_selectedBudgets.size() == 1) {
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyBudget budget = m_selectedBudgets[0];
+ bool calcBudget = budget.getaccounts().count() == 0;
+ if(!calcBudget) {
+ if(KMessageBox::warningContinueCancel(0, i18n("The current budget already contains data. Continuing will replace all current values of this budget."), i18n("Warning")) == KMessageBox::Continue)
+ calcBudget = true;
+ }
+
+ if(calcBudget) {
+ QDate historyStart;
+ QDate historyEnd;
+ QDate budgetStart;
+ QDate budgetEnd;
+
+ budgetStart = budget.budgetStart();
+ budgetEnd = budgetStart.addYears(1).addDays(-1);
+ historyStart = budgetStart.addYears(-1);
+ historyEnd = budgetEnd.addYears(-1);
+
+ MyMoneyForecast forecast;
+ forecast.createBudget(budget, historyStart, historyEnd, budgetStart, budgetEnd, true);
+
+ MyMoneyFile::instance()->modifyBudget(budget);
+ ft.commit();
+ }
+ } catch(MyMoneyException *e) {
+ KMessageBox::detailedSorry(0, i18n("Error"), i18n("Unable to modify budget: %1, thrown in %2:%3").arg(e->what()).arg(e->file()).arg(e->line()));
+ delete e;
+ }
+ }
+}
+
+void KMyMoney2App::slotKDELanguageSettings(void)
+{
+ KMessageBox::information(this, i18n("Please be aware that changes made in the following dialog affect all KDE applications not only KMyMoney."), i18n("Warning"), "LanguageSettingsWarning");
+
+ QStringList args;
+ args << "language";
+ QString error;
+ int pid;
+
+ KApplication::kdeinitExec("kcmshell", args, &error, &pid);
+}
+
+void KMyMoney2App::slotNewFeature(void)
+{
+ // accounts
+ // transactions
+ // budgets
+ // currency
+ // institutions
+ // payees
+ // schedules
+
+ // slotStatementImport();
+#if 0
+ if(m_selectedBudgets.size() == 1) {
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyBudget budget = m_selectedBudgets[0];
+ bool calcBudget = budget.getaccounts().count() == 0;
+ if(!calcBudget) {
+ if(KMessageBox::warningContinueCancel(0, i18n("The current budget already contains data. Continuing will replace all current values of this budget."), i18n("Warning")) == KMessageBox::Continue)
+ calcBudget = true;
+ }
+
+ if(calcBudget) {
+ QDate historyStart;
+ QDate historyEnd;
+ QDate budgetStart;
+ QDate budgetEnd;
+
+ budgetStart = budget.budgetStart();
+ budgetEnd = budgetStart.addYears(1).addDays(-1);
+ historyStart = budgetStart.addYears(-1);
+ historyEnd = budgetEnd.addYears(-1);
+
+ MyMoneyForecast forecast;
+ budget = forecast.createBudget (historyStart, historyEnd, budgetStart, budgetEnd, true);
+
+ budget.setName(m_selectedBudgets[0].name());
+ MyMoneyFile::instance()->removeBudget(m_selectedBudgets[0]);
+ MyMoneyFile::instance()->addBudget(budget);
+ ft.commit();
+ }
+ } catch(MyMoneyException *e) {
+ KMessageBox::detailedSorry(0, i18n("Error"), i18n("Unable to modify budget: %1, thrown in %2:%3").arg(e->what()).arg(e->file()).arg(e->line()));
+ delete e;
+ }
+ }
+#endif
+}
+
+void KMyMoney2App::slotTransactionsDelete(void)
+{
+ // since we may jump here via code, we have to make sure to react only
+ // if the action is enabled
+ if(!kmymoney2->action("transaction_delete")->isEnabled())
+ return;
+ if(m_selectedTransactions.count() == 0)
+ return;
+ if(m_selectedTransactions.warnLevel() == 1) {
+ if(KMessageBox::warningContinueCancel(0,
+ i18n(
+ "At least one split of the selected transactions has been reconciled. "
+ "Do you wish to delete the transactions anyway?"
+ ),
+ i18n("Transaction already reconciled"), KStdGuiItem::cont(),
+ "DeleteReconciledTransaction") == KMessageBox::Cancel)
+ return;
+ }
+ QString msg;
+ if(m_selectedTransactions.count() == 1) {
+ msg = i18n("Do you really want to delete the selected transaction?");
+ } else {
+ msg = i18n("Do you really want to delete all %1 selected transactions?").arg(m_selectedTransactions.count());
+ }
+ if(KMessageBox::questionYesNo(this, msg, i18n("Delete transaction")) == KMessageBox::Yes) {
+ KMSTATUS(i18n("Deleting transactions"));
+ doDeleteTransactions();
+ }
+}
+
+void KMyMoney2App::slotTransactionDuplicate(void)
+{
+ // since we may jump here via code, we have to make sure to react only
+ // if the action is enabled
+ if(kmymoney2->action("transaction_duplicate")->isEnabled()) {
+ KMyMoneyRegister::SelectedTransactions list = m_selectedTransactions;
+ KMyMoneyRegister::SelectedTransactions::iterator it_t;
+
+ int i = 0;
+ int cnt = m_selectedTransactions.count();
+ KMSTATUS(i18n("Duplicating transactions"));
+ slotStatusProgressBar(0, cnt);
+ MyMoneyFileTransaction ft;
+ MyMoneyTransaction lt;
+ try {
+ for(it_t = list.begin(); it_t != list.end(); ++it_t) {
+ MyMoneyTransaction t = (*it_t).transaction();
+ QValueList<MyMoneySplit>::iterator it_s;
+ // wipe out any reconciliation information
+ for(it_s = t.splits().begin(); it_s != t.splits().end(); ++it_s) {
+ (*it_s).setReconcileFlag(MyMoneySplit::NotReconciled);
+ (*it_s).setReconcileDate(QDate());
+ (*it_s).setBankID(QString());
+ }
+ // clear invalid data
+ t.setEntryDate(QDate());
+ t.clearId();
+ // and set the post date to today
+ t.setPostDate(QDate::currentDate());
+
+ MyMoneyFile::instance()->addTransaction(t);
+ lt = t;
+ slotStatusProgressBar(i++, 0);
+ }
+ ft.commit();
+
+ // select the new transaction in the ledger
+ if(!m_selectedAccount.id().isEmpty())
+ myMoneyView->slotLedgerSelected(m_selectedAccount.id(), lt.id());
+
+ } catch(MyMoneyException* e) {
+ KMessageBox::detailedSorry(0, i18n("Error"), i18n("Unable to duplicate transaction(s): %1, thrown in %2:%3").arg(e->what()).arg(e->file()).arg(e->line()));
+ delete e;
+ }
+ // switch off the progress bar
+ slotStatusProgressBar(-1, -1);
+ }
+}
+
+void KMyMoney2App::doDeleteTransactions(void)
+{
+ KMyMoneyRegister::SelectedTransactions list = m_selectedTransactions;
+ KMyMoneyRegister::SelectedTransactions::const_iterator it_t;
+ int cnt = list.count();
+ int i = 0;
+ slotStatusProgressBar(0, cnt);
+ MyMoneyFileTransaction ft;
+ MyMoneyFile* file = MyMoneyFile::instance();
+ try {
+ for(it_t = list.begin(); it_t != list.end(); ++it_t) {
+ // only remove those transactions that do not reference a closed account
+ if(!file->referencesClosedAccount((*it_t).transaction()))
+ file->removeTransaction((*it_t).transaction());
+ slotStatusProgressBar(i++, 0);
+ }
+ ft.commit();
+ } catch(MyMoneyException* e) {
+ KMessageBox::detailedSorry(0, i18n("Error"), i18n("Unable to delete transaction(s): %1, thrown in %2:%3").arg(e->what()).arg(e->file()).arg(e->line()));
+ delete e;
+ }
+ slotStatusProgressBar(-1, -1);
+}
+
+void KMyMoney2App::slotTransactionsNew(void)
+{
+ // since we jump here via code, we have to make sure to react only
+ // if the action is enabled
+ if(kmymoney2->action("transaction_new")->isEnabled()) {
+ if(myMoneyView->createNewTransaction()) {
+ m_transactionEditor = myMoneyView->startEdit(m_selectedTransactions);
+ KMyMoneyPayeeCombo* payeeEdit = dynamic_cast<KMyMoneyPayeeCombo*>(m_transactionEditor->haveWidget("payee"));
+ if(payeeEdit
+ && !d->m_lastPayeeEntered.isEmpty()
+ && KMyMoneyGlobalSettings::autoReusePayee()) {
+ // in case we entered a new transaction before and used a payee,
+ // we reuse it here. Save the text to the edit widget, select it
+ // so that hitting any character will start entering another payee.
+ // close the completion list
+ payeeEdit->setCurrentText(d->m_lastPayeeEntered);
+ payeeEdit->completion()->slotMakeCompletion(d->m_lastPayeeEntered);
+ QStringList payeeId;
+ payeeEdit->selector()->selectedItems(payeeId);
+ if(payeeId.count() == 1) {
+ payeeEdit->setSelectedItem(payeeId[0]);
+ }
+ payeeEdit->lineEdit()->selectAll();
+ payeeEdit->completion()->hide();
+ }
+ if(m_transactionEditor) {
+ connect(m_transactionEditor, SIGNAL(statusProgress(int, int)), this, SLOT(slotStatusProgressBar(int, int)));
+ connect(m_transactionEditor, SIGNAL(statusMsg(const QString&)), this, SLOT(slotStatusMsg(const QString&)));
+ connect(m_transactionEditor, SIGNAL(scheduleTransaction(const MyMoneyTransaction&, MyMoneySchedule::occurenceE)), this, SLOT(slotScheduleNew(const MyMoneyTransaction&, MyMoneySchedule::occurenceE)));
+ connect(m_transactionEditor, SIGNAL(transactionDataSufficient(bool)), this, SLOT(slotUpdateActions()));
+ }
+ slotUpdateActions();
+ }
+ }
+}
+
+void KMyMoney2App::slotTransactionsEdit(void)
+{
+ // qDebug("KMyMoney2App::slotTransactionsEdit()");
+ // since we jump here via code, we have to make sure to react only
+ // if the action is enabled
+ if(kmymoney2->action("transaction_edit")->isEnabled()) {
+ // as soon as we edit a transaction, we don't remember the last payee entered
+ d->m_lastPayeeEntered = QString();
+ m_transactionEditor = myMoneyView->startEdit(m_selectedTransactions);
+ connect(m_transactionEditor, SIGNAL(transactionDataSufficient(bool)), this, SLOT(slotUpdateActions()));
+ slotUpdateActions();
+ }
+}
+
+void KMyMoney2App::deleteTransactionEditor(void)
+{
+ // make sure, we don't use the transaction editor pointer
+ // anymore from now on
+ TransactionEditor* p = m_transactionEditor;
+ m_transactionEditor = 0;
+ delete p;
+}
+
+void KMyMoney2App::slotTransactionsEditSplits(void)
+{
+ // since we jump here via code, we have to make sure to react only
+ // if the action is enabled
+ if(kmymoney2->action("transaction_editsplits")->isEnabled()) {
+ // as soon as we edit a transaction, we don't remember the last payee entered
+ d->m_lastPayeeEntered = QString();
+ m_transactionEditor = myMoneyView->startEdit(m_selectedTransactions);
+ slotUpdateActions();
+
+ if(m_transactionEditor) {
+ if(m_transactionEditor->slotEditSplits() == QDialog::Accepted) {
+ MyMoneyFileTransaction ft;
+ try {
+ QString id;
+ connect(m_transactionEditor, SIGNAL(balanceWarning(QWidget*, const MyMoneyAccount&, const QString&)), d->m_balanceWarning, SLOT(slotShowMessage(QWidget*, const MyMoneyAccount&, const QString&)));
+ m_transactionEditor->enterTransactions(id);
+ ft.commit();
+ } catch(MyMoneyException* e) {
+ KMessageBox::detailedSorry(0, i18n("Error"), i18n("Unable to modify transaction: %1, thrown in %2:%3").arg(e->what()).arg(e->file()).arg(e->line()));
+ delete e;
+ }
+ }
+ }
+ deleteTransactionEditor();
+ slotUpdateActions();
+ }
+}
+
+void KMyMoney2App::slotTransactionsCancel(void)
+{
+ // since we jump here via code, we have to make sure to react only
+ // if the action is enabled
+ if(kmymoney2->action("transaction_cancel")->isEnabled()) {
+ // make sure, we block the enter function
+ action("transaction_enter")->setEnabled(false);
+ // qDebug("KMyMoney2App::slotTransactionsCancel");
+ deleteTransactionEditor();
+ slotUpdateActions();
+ }
+}
+
+void KMyMoney2App::slotTransactionsEnter(void)
+{
+ // since we jump here via code, we have to make sure to react only
+ // if the action is enabled
+ if(kmymoney2->action("transaction_enter")->isEnabled()) {
+ // qDebug("KMyMoney2App::slotTransactionsEnter");
+ if(m_transactionEditor) {
+ QString accountId = m_selectedAccount.id();
+ QString newId;
+ connect(m_transactionEditor, SIGNAL(balanceWarning(QWidget*, const MyMoneyAccount&, const QString&)), d->m_balanceWarning, SLOT(slotShowMessage(QWidget*, const MyMoneyAccount&, const QString&)));
+ if(m_transactionEditor->enterTransactions(newId)) {
+ KMyMoneyPayeeCombo* payeeEdit = dynamic_cast<KMyMoneyPayeeCombo*>(m_transactionEditor->haveWidget("payee"));
+ if(payeeEdit && !newId.isEmpty()) {
+ d->m_lastPayeeEntered = payeeEdit->currentText();
+ }
+ deleteTransactionEditor();
+ }
+ if(!newId.isEmpty()) {
+ myMoneyView->slotLedgerSelected(accountId, newId);
+ }
+ }
+ slotUpdateActions();
+ }
+}
+
+void KMyMoney2App::slotTransactionsCancelOrEnter(bool& okToSelect)
+{
+ static bool oneTime = false;
+ if(!oneTime) {
+ oneTime = true;
+ QString dontShowAgain = "CancelOrEditTransaction";
+ // qDebug("KMyMoney2App::slotCancelOrEndEdit");
+ if(m_transactionEditor) {
+ if(KMyMoneyGlobalSettings::focusChangeIsEnter() && kmymoney2->action("transaction_enter")->isEnabled()) {
+ slotTransactionsEnter();
+ } else {
+ // okToSelect is preset to true if a cancel of the dialog is useful and false if it is not
+ int rc;
+ if(okToSelect == true) {
+ rc = KMessageBox::warningYesNoCancel(0, QString("<p>")+i18n("Do you really want to cancel editing this transaction without saving it?<p>- <b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the transaction prior to cancelling and<br>- <b>Cancel</b> returns to the transaction editor.<p>You can also select an option to save the transaction automatically when e.g. selecting another transaction."), i18n("Cancel transaction edit"), KStdGuiItem::yes(), KStdGuiItem::no(), dontShowAgain);
+
+ } else {
+ rc = KMessageBox::warningYesNo(0, QString("<p>")+i18n("Do you really want to cancel editing this transaction without saving it?<p>- <b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the transaction prior to cancelling.<p>You can also select an option to save the transaction automatically when e.g. selecting another transaction."), i18n("Cancel transaction edit"), KStdGuiItem::yes(), KStdGuiItem::no(), dontShowAgain);
+ }
+
+ switch(rc) {
+ case KMessageBox::Yes:
+ slotTransactionsCancel();
+ break;
+ case KMessageBox::No:
+ slotTransactionsEnter();
+ // make sure that we'll see this message the next time no matter
+ // if the user has chosen the 'Don't show again' checkbox
+ KMessageBox::enableMessage(dontShowAgain);
+ break;
+ case KMessageBox::Cancel:
+ // make sure that we'll see this message the next time no matter
+ // if the user has chosen the 'Don't show again' checkbox
+ KMessageBox::enableMessage(dontShowAgain);
+ okToSelect = false;
+ break;
+ }
+ }
+ }
+ oneTime = false;
+ }
+}
+
+void KMyMoney2App::slotToggleReconciliationFlag(void)
+{
+ markTransaction(MyMoneySplit::Unknown);
+}
+
+void KMyMoney2App::slotMarkTransactionCleared(void)
+{
+ markTransaction(MyMoneySplit::Cleared);
+}
+
+void KMyMoney2App::slotMarkTransactionReconciled(void)
+{
+ markTransaction(MyMoneySplit::Reconciled);
+}
+
+void KMyMoney2App::slotMarkTransactionNotReconciled(void)
+{
+ markTransaction(MyMoneySplit::NotReconciled);
+}
+
+void KMyMoney2App::markTransaction(MyMoneySplit::reconcileFlagE flag)
+{
+ KMyMoneyRegister::SelectedTransactions list = m_selectedTransactions;
+ KMyMoneyRegister::SelectedTransactions::const_iterator it_t;
+ int cnt = list.count();
+ int i = 0;
+ slotStatusProgressBar(0, cnt);
+ MyMoneyFileTransaction ft;
+ try {
+ for(it_t = list.begin(); it_t != list.end(); ++it_t) {
+ // turn on signals before we modify the last entry in the list
+ cnt--;
+ MyMoneyFile::instance()->blockSignals(cnt != 0);
+
+ // get a fresh copy
+ MyMoneyTransaction t = MyMoneyFile::instance()->transaction((*it_t).transaction().id());
+ MyMoneySplit sp = t.splitById((*it_t).split().id());
+ if(sp.reconcileFlag() != flag) {
+ if(flag == MyMoneySplit::Unknown) {
+ if(m_reconciliationAccount.id().isEmpty()) {
+ // in normal mode we cycle through all states
+ switch(sp.reconcileFlag()) {
+ case MyMoneySplit::NotReconciled:
+ sp.setReconcileFlag(MyMoneySplit::Cleared);
+ break;
+ case MyMoneySplit::Cleared:
+ sp.setReconcileFlag(MyMoneySplit::Reconciled);
+ break;
+ case MyMoneySplit::Reconciled:
+ sp.setReconcileFlag(MyMoneySplit::NotReconciled);
+ break;
+ default:
+ break;
+ }
+ } else {
+ // in reconciliation mode we skip the reconciled state
+ switch(sp.reconcileFlag()) {
+ case MyMoneySplit::NotReconciled:
+ sp.setReconcileFlag(MyMoneySplit::Cleared);
+ break;
+ case MyMoneySplit::Cleared:
+ sp.setReconcileFlag(MyMoneySplit::NotReconciled);
+ break;
+ default:
+ break;
+ }
+ }
+ } else {
+ sp.setReconcileFlag(flag);
+ }
+
+ t.modifySplit(sp);
+ MyMoneyFile::instance()->modifyTransaction(t);
+ }
+ slotStatusProgressBar(i++, 0);
+ }
+ slotStatusProgressBar(-1, -1);
+ ft.commit();
+ } catch(MyMoneyException* e) {
+ KMessageBox::detailedSorry(0, i18n("Error"), i18n("Unable to modify transaction: %1, thrown in %2:%3").arg(e->what()).arg(e->file()).arg(e->line()));
+ delete e;
+ }
+}
+
+void KMyMoney2App::slotTransactionsAccept(void)
+{
+ KMyMoneyRegister::SelectedTransactions list = m_selectedTransactions;
+ KMyMoneyRegister::SelectedTransactions::const_iterator it_t;
+ int cnt = list.count();
+ int i = 0;
+ slotStatusProgressBar(0, cnt);
+ MyMoneyFileTransaction ft;
+ try {
+ for(it_t = list.begin(); it_t != list.end(); ++it_t) {
+ // reload transaction in case it got changed during the course of this loop
+ MyMoneyTransaction t = MyMoneyFile::instance()->transaction((*it_t).transaction().id());
+ if(t.isImported()) {
+ t.setImported(false);
+ if(!m_selectedAccount.id().isEmpty()) {
+ QValueList<MyMoneySplit> list = t.splits();
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = list.begin(); it_s != list.end(); ++it_s) {
+ if((*it_s).accountId() == m_selectedAccount.id()) {
+ if((*it_s).reconcileFlag() == MyMoneySplit::NotReconciled) {
+ MyMoneySplit s = (*it_s);
+ s.setReconcileFlag(MyMoneySplit::Cleared);
+ t.modifySplit(s);
+ }
+ }
+ }
+ }
+ MyMoneyFile::instance()->modifyTransaction(t);
+ }
+ if((*it_t).split().isMatched()) {
+ // reload split in case it got changed during the course of this loop
+ MyMoneySplit s = t.splitById((*it_t).split().id());
+ TransactionMatcher matcher(m_selectedAccount);
+ matcher.accept(t, s);
+ }
+ slotStatusProgressBar(i++, 0);
+ }
+ slotStatusProgressBar(-1, -1);
+ ft.commit();
+ } catch(MyMoneyException* e) {
+ KMessageBox::detailedSorry(0, i18n("Error"), i18n("Unable to accept transaction: %1, thrown in %2:%3").arg(e->what()).arg(e->file()).arg(e->line()));
+ delete e;
+ }
+}
+
+void KMyMoney2App::slotTransactionGotoAccount(void)
+{
+ if(!m_accountGoto.isEmpty()) {
+ try {
+ QString transactionId;
+ if(m_selectedTransactions.count() == 1) {
+ transactionId = m_selectedTransactions[0].transaction().id();
+ }
+ // make sure to pass a copy, as myMoneyView->slotLedgerSelected() overrides
+ // m_accountGoto while calling slotUpdateActions()
+ QString accountId = m_accountGoto;
+ myMoneyView->slotLedgerSelected(accountId, transactionId);
+ } catch(MyMoneyException* e) {
+ delete e;
+ }
+ }
+}
+
+void KMyMoney2App::slotTransactionGotoPayee(void)
+{
+ if(!m_payeeGoto.isEmpty()) {
+ try {
+ QString transactionId;
+ if(m_selectedTransactions.count() == 1) {
+ transactionId = m_selectedTransactions[0].transaction().id();
+ }
+ // make sure to pass copies, as myMoneyView->slotPayeeSelected() overrides
+ // m_payeeGoto and m_selectedAccount while calling slotUpdateActions()
+ QString payeeId = m_payeeGoto;
+ QString accountId = m_selectedAccount.id();
+ myMoneyView->slotPayeeSelected(payeeId, accountId, transactionId);
+ } catch(MyMoneyException* e) {
+ delete e;
+ }
+ }
+}
+
+void KMyMoney2App::slotTransactionCreateSchedule(void)
+{
+ if(m_selectedTransactions.count() == 1) {
+ // make sure to have the current selected split as first split in the schedule
+ MyMoneyTransaction t = m_selectedTransactions[0].transaction();
+ MyMoneySplit s = m_selectedTransactions[0].split();
+ QString splitId = s.id();
+ s.clearId();
+ s.setReconcileFlag(MyMoneySplit::NotReconciled);
+ s.setReconcileDate(QDate());
+ t.removeSplits();
+ t.addSplit(s);
+ const QValueList<MyMoneySplit>& splits = m_selectedTransactions[0].transaction().splits();
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = splits.begin(); it_s != splits.end(); ++it_s) {
+ if((*it_s).id() != splitId) {
+ MyMoneySplit s0 = (*it_s);
+ s0.clearId();
+ s0.setReconcileFlag(MyMoneySplit::NotReconciled);
+ s0.setReconcileDate(QDate());
+ t.addSplit(s0);
+ }
+ }
+ slotScheduleNew(t);
+ }
+}
+
+void KMyMoney2App::slotTransactionAssignNumber(void)
+{
+ if(m_transactionEditor)
+ m_transactionEditor->assignNextNumber();
+}
+
+void KMyMoney2App::slotTransactionCombine(void)
+{
+ qDebug("slotTransactionCombine() not implemented yet");
+}
+
+void KMyMoney2App::slotMoveToAccount(const QString& id)
+{
+ // close the menu, if it is still open
+ QWidget* w = factory()->container("transaction_move_menu", this);
+ if(w) {
+ if(w->isVisible()) {
+ w->close();
+ }
+ }
+
+ if(m_selectedTransactions.count() > 0) {
+ MyMoneyFileTransaction ft;
+ try {
+ KMyMoneyRegister::SelectedTransactions::const_iterator it_t;
+ for(it_t = m_selectedTransactions.begin(); it_t != m_selectedTransactions.end(); ++it_t) {
+ if (m_selectedAccount.accountType() == MyMoneyAccount::Investment) {
+ d->moveInvestmentTransaction(m_selectedAccount.id(), id,
+ (*it_t).transaction());
+ } else {
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ bool changed = false;
+ MyMoneyTransaction t = (*it_t).transaction();
+ for(it_s = (*it_t).transaction().splits().begin(); it_s != (*it_t).transaction().splits().end(); ++it_s) {
+ if((*it_s).accountId() == m_selectedAccount.id()) {
+ MyMoneySplit s = (*it_s);
+ s.setAccountId(id);
+ t.modifySplit(s);
+ changed = true;
+ }
+ }
+ if(changed) {
+ MyMoneyFile::instance()->modifyTransaction(t);
+ }
+ }
+ }
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+ }
+}
+
+// move a stock transaction from one investment account to another
+void KMyMoney2App::Private::moveInvestmentTransaction(const QString& fromId,
+ const QString& toId,
+ const MyMoneyTransaction& tx)
+{
+ MyMoneyAccount toInvAcc = MyMoneyFile::instance()->account(toId);
+ MyMoneyTransaction t(tx);
+ // first determine which stock we are dealing with.
+ // fortunately, investment transactions have only one stock involved
+ QString stockAccountId;
+ QString stockSecurityId;
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = t.splits().begin(); it_s != t.splits().end(); ++it_s) {
+ stockAccountId = (*it_s).accountId();
+ stockSecurityId =
+ MyMoneyFile::instance()->account(stockAccountId).currencyId();
+ if (!MyMoneyFile::instance()->security(stockSecurityId).isCurrency())
+ break;
+ }
+ // Now check the target investment account to see if it
+ // contains a stock with this id
+ QString newStockAccountId = QString();
+ QStringList accountList = toInvAcc.accountList();
+ QStringList::const_iterator it_a;
+ for (it_a = accountList.begin(); it_a != accountList.end(); ++it_a) {
+ if (MyMoneyFile::instance()->account((*it_a)).currencyId() ==
+ stockSecurityId) {
+ newStockAccountId = (*it_a);
+ break;
+ }
+ }
+ // if it doesn't exist, we need to add it as a copy of the old one
+ // no 'copyAccount()' function??
+ if (newStockAccountId.isEmpty()) {
+ MyMoneyAccount stockAccount =
+ MyMoneyFile::instance()->account(stockAccountId);
+ MyMoneyAccount newStock;
+ newStock.setName(stockAccount.name());
+ newStock.setNumber(stockAccount.number());
+ newStock.setDescription(stockAccount.description());
+ newStock.setInstitutionId(stockAccount.institutionId());
+ newStock.setOpeningDate(stockAccount.openingDate());
+ newStock.setAccountType(stockAccount.accountType());
+ newStock.setCurrencyId(stockAccount.currencyId());
+ newStock.setClosed(stockAccount.isClosed());
+ MyMoneyFile::instance()->addAccount(newStock, toInvAcc);
+ newStockAccountId = newStock.id();
+ }
+ // now update the split and the transaction
+ MyMoneySplit s = (*it_s);
+ s.setAccountId(newStockAccountId);
+ t.modifySplit(s);
+ MyMoneyFile::instance()->modifyTransaction(t);
+}
+
+void KMyMoney2App::slotUpdateMoveToAccountMenu(void)
+{
+ if(!m_selectedAccount.id().isEmpty()) {
+ AccountSet accountSet;
+ if(m_selectedAccount.accountType() == MyMoneyAccount::Investment) {
+ accountSet.addAccountType(MyMoneyAccount::Investment);
+ } else if(m_selectedAccount.isAssetLiability()) {
+ accountSet.addAccountType(MyMoneyAccount::Checkings);
+ accountSet.addAccountType(MyMoneyAccount::Savings);
+ accountSet.addAccountType(MyMoneyAccount::Cash);
+ accountSet.addAccountType(MyMoneyAccount::AssetLoan);
+ accountSet.addAccountType(MyMoneyAccount::CertificateDep);
+ accountSet.addAccountType(MyMoneyAccount::MoneyMarket);
+ accountSet.addAccountType(MyMoneyAccount::Asset);
+ accountSet.addAccountType(MyMoneyAccount::Currency);
+ accountSet.addAccountType(MyMoneyAccount::CreditCard);
+ accountSet.addAccountType(MyMoneyAccount::Loan);
+ accountSet.addAccountType(MyMoneyAccount::Liability);
+ } else if(m_selectedAccount.isIncomeExpense()) {
+ accountSet.addAccountType(MyMoneyAccount::Income);
+ accountSet.addAccountType(MyMoneyAccount::Expense);
+ }
+
+ accountSet.load(d->m_moveToAccountSelector);
+ // remove those accounts that we currently reference
+ KMyMoneyRegister::SelectedTransactions::const_iterator it_t;
+ for(it_t = m_selectedTransactions.begin(); it_t != m_selectedTransactions.end(); ++it_t) {
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = (*it_t).transaction().splits().begin(); it_s != (*it_t).transaction().splits().end(); ++it_s) {
+ d->m_moveToAccountSelector->removeItem((*it_s).accountId());
+ }
+ }
+ // remove those accounts from the list that are denominated
+ // in a different currency
+ // also remove the selected account itself
+ //(for investments, which will not have been removed above)
+ QStringList list = d->m_moveToAccountSelector->accountList();
+ QValueList<QString>::const_iterator it_a;
+ for(it_a = list.begin(); it_a != list.end(); ++it_a) {
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(*it_a);
+ if(acc.currencyId() != m_selectedAccount.currencyId())
+ d->m_moveToAccountSelector->removeItem((*it_a));
+ if (acc.id() == m_selectedAccount.id())
+ d->m_moveToAccountSelector->removeItem((*it_a));
+ }
+ // Now update the width of the list
+ d->m_moveToAccountSelector->setOptimizedWidth();
+ }
+}
+
+void KMyMoney2App::slotTransactionMatch(void)
+{
+ if(action("transaction_match")->text() == i18n("Button text for match transaction", "Match"))
+ transactionMatch();
+ else
+ transactionUnmatch();
+}
+
+void KMyMoney2App::transactionUnmatch(void)
+{
+ KMyMoneyRegister::SelectedTransactions::const_iterator it;
+ MyMoneyFileTransaction ft;
+ try {
+ for(it = m_selectedTransactions.begin(); it != m_selectedTransactions.end(); ++it) {
+ if((*it).split().isMatched()) {
+ TransactionMatcher matcher(m_selectedAccount);
+ matcher.unmatch((*it).transaction(), (*it).split());
+ }
+ }
+ ft.commit();
+
+ } catch(MyMoneyException *e) {
+ KMessageBox::detailedSorry(0, i18n("Unable to unmatch the selected transactions"), e->what() );
+ delete e;
+ }
+}
+
+void KMyMoney2App::transactionMatch(void)
+{
+ if(m_selectedTransactions.count() != 2)
+ return;
+
+ MyMoneyTransaction startMatchTransaction;
+ MyMoneyTransaction endMatchTransaction;
+ MyMoneySplit startSplit;
+ MyMoneySplit endSplit;
+
+ KMyMoneyRegister::SelectedTransactions::const_iterator it;
+ KMyMoneyRegister::SelectedTransactions toBeDeleted;
+ for(it = m_selectedTransactions.begin(); it != m_selectedTransactions.end(); ++it) {
+ if((*it).transaction().isImported()) {
+ endMatchTransaction = (*it).transaction();
+ endSplit = (*it).split();
+ toBeDeleted << *it;
+ } else if(!(*it).split().isMatched()) {
+ startMatchTransaction = (*it).transaction();
+ startSplit = (*it).split();
+ }
+ }
+
+#if 0
+ KMergeTransactionsDlg dlg(m_selectedAccount);
+ dlg.addTransaction(startMatchTransaction);
+ dlg.addTransaction(endMatchTransaction);
+ if (dlg.exec() == QDialog::Accepted)
+#endif
+ {
+ MyMoneyFileTransaction ft;
+ try
+ {
+ if(startMatchTransaction.id().isEmpty())
+ throw new MYMONEYEXCEPTION(i18n("No manually entered transaction selected for matching"));
+ if(endMatchTransaction.id().isEmpty())
+ throw new MYMONEYEXCEPTION(i18n("No imported transaction selected for matching"));
+
+ TransactionMatcher matcher(m_selectedAccount);
+ matcher.match(startMatchTransaction, startSplit, endMatchTransaction, endSplit);
+ ft.commit();
+ }
+ catch(MyMoneyException *e)
+ {
+ KMessageBox::detailedSorry(0, i18n("Unable to match the selected transactions"), e->what() );
+ delete e;
+ }
+ }
+}
+
+
+void KMyMoney2App::showContextMenu(const QString& containerName)
+{
+ QWidget* w = factory()->container(containerName, this);
+ QPopupMenu *menu = dynamic_cast<QPopupMenu*>(w);
+ if(menu)
+ menu->exec(QCursor::pos());
+}
+
+void KMyMoney2App::slotShowTransactionContextMenu(void)
+{
+ if(m_selectedTransactions.count() == 0 && m_selectedSchedule != MyMoneySchedule()) {
+ showContextMenu("schedule_context_menu");
+ } else {
+ showContextMenu("transaction_context_menu");
+ }
+}
+
+void KMyMoney2App::slotShowInvestmentContextMenu(void)
+{
+ showContextMenu("investment_context_menu");
+}
+
+void KMyMoney2App::slotShowScheduleContextMenu(void)
+{
+ showContextMenu("schedule_context_menu");
+}
+
+void KMyMoney2App::slotShowAccountContextMenu(const MyMoneyObject& obj)
+{
+// qDebug("KMyMoney2App::slotShowAccountContextMenu");
+ if(typeid(obj) != typeid(MyMoneyAccount))
+ return;
+
+ const MyMoneyAccount& acc = dynamic_cast<const MyMoneyAccount&>(obj);
+
+ // if the selected account is actually a stock account, we
+ // call the right slot instead
+ if(acc.isInvest()) {
+ showContextMenu("investment_context_menu");
+ } else if(acc.isIncomeExpense()){
+ showContextMenu("category_context_menu");
+ } else {
+ showContextMenu("account_context_menu");
+ }
+}
+
+void KMyMoney2App::slotShowInstitutionContextMenu(const MyMoneyObject& obj)
+{
+ if(typeid(obj) != typeid(MyMoneyInstitution))
+ return;
+
+ showContextMenu("institution_context_menu");
+}
+
+void KMyMoney2App::slotShowPayeeContextMenu(void)
+{
+ showContextMenu("payee_context_menu");
+}
+
+void KMyMoney2App::slotShowBudgetContextMenu(void)
+{
+ showContextMenu("budget_context_menu");
+}
+
+void KMyMoney2App::slotShowCurrencyContextMenu(void)
+{
+ showContextMenu("currency_context_menu");
+}
+
+void KMyMoney2App::slotPrintView(void)
+{
+ myMoneyView->slotPrintView();
+}
+
+void KMyMoney2App::updateCaption(bool skipActions)
+{
+ QString caption;
+
+ caption = m_fileName.filename(false);
+
+ if(caption.isEmpty() && myMoneyView && myMoneyView->fileOpen())
+ caption = i18n("Untitled");
+
+ // MyMoneyFile::instance()->dirty() throws an exception, if
+ // there's no storage object available. In this case, we
+ // assume that the storage object is not changed. Actually,
+ // this can only happen if we are newly created early on.
+ bool modified;
+ try {
+ modified = MyMoneyFile::instance()->dirty();
+ } catch(MyMoneyException *e) {
+ delete e;
+ modified = false;
+ skipActions = true;
+ }
+
+#if KMM_DEBUG
+ caption += QString(" (%1 x %2)").arg(width()).arg(height());
+#endif
+
+ caption = kapp->makeStdCaption(caption, false, modified);
+ if(caption.length() > 0)
+ caption += " - ";
+ caption += "KMyMoney";
+ setPlainCaption(caption);
+
+ if(!skipActions) {
+ myMoneyView->enableViews();
+ slotUpdateActions();
+ }
+}
+
+void KMyMoney2App::slotUpdateActions(void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ bool fileOpen = myMoneyView->fileOpen();
+ bool modified = file->dirty();
+ QWidget* w;
+
+ action("open_database")->setEnabled(true);
+ action("saveas_database")->setEnabled(fileOpen);
+ action("file_save")->setEnabled(modified && !myMoneyView->isDatabase());
+ action("file_save_as")->setEnabled(fileOpen);
+ action("file_close")->setEnabled(fileOpen);
+ action("view_personal_data")->setEnabled(fileOpen);
+ action("file_backup")->setEnabled(fileOpen && !myMoneyView->isDatabase());
+ action("file_print")->setEnabled(fileOpen && myMoneyView->canPrint());
+#if KMM_DEBUG
+ action("view_file_info")->setEnabled(fileOpen);
+ action("file_dump")->setEnabled(fileOpen);
+#endif
+
+ action("edit_find_transaction")->setEnabled(fileOpen);
+
+ bool importRunning = (m_qifReader != 0) || (m_smtReader != 0);
+ action("file_export_qif")->setEnabled(fileOpen && !importRunning);
+ action("file_import_qif")->setEnabled(fileOpen && !importRunning);
+ action("file_import_gnc")->setEnabled(!importRunning);
+ action("file_import_template")->setEnabled(fileOpen && !importRunning);
+ action("file_export_template")->setEnabled(fileOpen && !importRunning);
+
+
+ action("tools_security_editor")->setEnabled(fileOpen);
+ action("tools_currency_editor")->setEnabled(fileOpen);
+ action("tools_price_editor")->setEnabled(fileOpen);
+ action("tools_update_prices")->setEnabled(fileOpen);
+ action("tools_consistency_check")->setEnabled(fileOpen);
+
+ action("account_new")->setEnabled(fileOpen);
+ action("account_reconcile")->setEnabled(false);
+ action("account_reconcile_finish")->setEnabled(false);
+ action("account_reconcile_postpone")->setEnabled(false);
+ action("account_edit")->setEnabled(false);
+ action("account_delete")->setEnabled(false);
+ action("account_open")->setEnabled(false);
+ action("account_close")->setEnabled(false);
+ action("account_reopen")->setEnabled(false);
+ action("account_transaction_report")->setEnabled(false);
+ action("account_online_map")->setEnabled(false);
+ action("account_online_update")->setEnabled(false);
+ action("account_online_update_all")->setEnabled(false);
+ action("account_online_update_menu")->setEnabled(false);
+ action("account_online_unmap")->setEnabled(false);
+#ifdef HAVE_KDCHART
+ action("account_chart")->setEnabled(false);
+#endif
+
+ action("category_new")->setEnabled(fileOpen);
+ action("category_edit")->setEnabled(false);
+ action("category_delete")->setEnabled(false);
+
+ action("institution_new")->setEnabled(fileOpen);
+ action("institution_edit")->setEnabled(false);
+ action("institution_delete")->setEnabled(false);
+ action("investment_new")->setEnabled(false);
+ action("investment_edit")->setEnabled(false);
+ action("investment_delete")->setEnabled(false);
+ action("investment_online_price_update")->setEnabled(false);
+ action("investment_manual_price_update")->setEnabled(false);
+
+ action("schedule_edit")->setEnabled(false);
+ action("schedule_delete")->setEnabled(false);
+ action("schedule_enter")->setEnabled(false);
+ action("schedule_skip")->setEnabled(false);
+
+ action("payee_delete")->setEnabled(false);
+ action("payee_rename")->setEnabled(false);
+
+ action("budget_delete")->setEnabled(false);
+ action("budget_rename")->setEnabled(false);
+ action("budget_change_year")->setEnabled(false);
+ action("budget_new")->setEnabled(true);
+ action("budget_copy")->setEnabled(false);
+ action("budget_forecast")->setEnabled(false);
+
+ QString tooltip = i18n("Create a new transaction");
+ action("transaction_new")->setEnabled(fileOpen && myMoneyView->canCreateTransactions(KMyMoneyRegister::SelectedTransactions(), tooltip));
+ action("transaction_new")->setToolTip(tooltip);
+
+ action("transaction_edit")->setEnabled(false);
+ action("transaction_editsplits")->setEnabled(false);
+ action("transaction_enter")->setEnabled(false);
+ action("transaction_cancel")->setEnabled(false);
+ action("transaction_delete")->setEnabled(false);
+ action("transaction_match")->setEnabled(false);
+ action("transaction_match")->setText(i18n("Button text for match transaction", "Match"));
+ action("transaction_match")->setIcon("connect_creating");
+
+ action("transaction_accept")->setEnabled(false);
+ action("transaction_duplicate")->setEnabled(false);
+ action("transaction_mark_toggle")->setEnabled(false);
+ action("transaction_mark_cleared")->setEnabled(false);
+ action("transaction_mark_reconciled")->setEnabled(false);
+ action("transaction_mark_notreconciled")->setEnabled(false);
+ action("transaction_goto_account")->setEnabled(false);
+ action("transaction_goto_payee")->setEnabled(false);
+ action("transaction_assign_number")->setEnabled(false);
+ action("transaction_create_schedule")->setEnabled(false);
+ action("transaction_combine")->setEnabled(false);
+ action("transaction_select_all")->setEnabled(false);
+
+ action("schedule_new")->setEnabled(fileOpen);
+ action("schedule_edit")->setEnabled(false);
+ action("schedule_delete")->setEnabled(false);
+ action("schedule_duplicate")->setEnabled(false);
+ action("schedule_enter")->setEnabled(false);
+ action("schedule_skip")->setEnabled(false);
+
+ action("currency_new")->setEnabled(fileOpen);
+ action("currency_rename")->setEnabled(false);
+ action("currency_delete")->setEnabled(false);
+ action("currency_setbase")->setEnabled(false);
+
+ w = factory()->container("transaction_move_menu", this);
+ if(w)
+ w->setEnabled(false);
+
+ w = factory()->container("transaction_mark_menu", this);
+ if(w)
+ w->setEnabled(false);
+
+ w = factory()->container("transaction_context_mark_menu", this);
+ if(w)
+ w->setEnabled(false);
+
+ // FIXME for now it's always on, but we should only allow it, if we
+ // can select at least a single transaction
+ action("transaction_select_all")->setEnabled(true);
+ if(!m_selectedTransactions.isEmpty()) {
+ if(m_selectedTransactions.count() != 0) {
+ // enable 'delete transaction' only if at least one of the
+ // selected transactions does not reference a closed account
+ bool enable = false;
+ KMyMoneyRegister::SelectedTransactions::const_iterator it_t;
+ for(it_t = m_selectedTransactions.begin(); (enable == false) && (it_t != m_selectedTransactions.end()); ++it_t) {
+ enable = !file->referencesClosedAccount((*it_t).transaction());
+ }
+ action("transaction_delete")->setEnabled(enable);
+ }
+
+ if(!m_transactionEditor) {
+ tooltip = i18n("Duplicate the current selected transactions");
+ action("transaction_duplicate")->setEnabled(myMoneyView->canDuplicateTransactions(m_selectedTransactions, tooltip) && !m_selectedTransactions[0].transaction().id().isEmpty());
+ action("transaction_duplicate")->setToolTip(tooltip);
+ if(myMoneyView->canEditTransactions(m_selectedTransactions, tooltip)) {
+ action("transaction_edit")->setEnabled(true);
+ // editing splits is allowed only if we have one transaction selected
+ if(m_selectedTransactions.count() == 1) {
+ action("transaction_editsplits")->setEnabled(true);
+ }
+ if(m_selectedAccount.isAssetLiability() && m_selectedAccount.accountType() != MyMoneyAccount::Investment) {
+ action("transaction_create_schedule")->setEnabled(m_selectedTransactions.count() == 1);
+ }
+ }
+ action("transaction_edit")->setToolTip(tooltip);
+
+ if(!m_selectedAccount.isClosed()) {
+ w = factory()->container("transaction_move_menu", this);
+ if(w)
+ w->setEnabled(true);
+ }
+
+ w = factory()->container("transaction_mark_menu", this);
+ if(w)
+ w->setEnabled(true);
+
+ w = factory()->container("transaction_context_mark_menu", this);
+ if(w)
+ w->setEnabled(true);
+
+ // Allow marking the transaction if at least one is selected
+ action("transaction_mark_cleared")->setEnabled(true);
+ action("transaction_mark_reconciled")->setEnabled(true);
+ action("transaction_mark_notreconciled")->setEnabled(true);
+ action("transaction_mark_toggle")->setEnabled(true);
+
+ if(!m_accountGoto.isEmpty())
+ action("transaction_goto_account")->setEnabled(true);
+ if(!m_payeeGoto.isEmpty())
+ action("transaction_goto_payee")->setEnabled(true);
+
+ // Matching is enabled as soon as one regular and one imported transaction is selected
+ int matchedCount = 0;
+ int importedCount = 0;
+ KMyMoneyRegister::SelectedTransactions::const_iterator it;
+ for(it = m_selectedTransactions.begin(); it != m_selectedTransactions.end(); ++it) {
+ if((*it).transaction().isImported())
+ ++importedCount;
+ if((*it).split().isMatched())
+ ++matchedCount;
+ }
+
+ if(m_selectedTransactions.count() == 2 /* && action("transaction_edit")->isEnabled() */) {
+ if(importedCount == 1 && matchedCount == 0) {
+ action("transaction_match")->setEnabled(true);
+ }
+ }
+ if(importedCount != 0 || matchedCount != 0)
+ action("transaction_accept")->setEnabled(true);
+ if(matchedCount != 0) {
+ action("transaction_match")->setEnabled(true);
+ action("transaction_match")->setText(i18n("Button text for unmatch transaction", "Unmatch"));
+ action("transaction_match")->setIcon("stop");
+ }
+
+ if(m_selectedTransactions.count() > 1) {
+ action("transaction_combine")->setEnabled(true);
+ }
+ } else {
+ action("transaction_assign_number")->setEnabled(m_transactionEditor->canAssignNumber());
+ action("transaction_new")->setEnabled(false);
+ action("transaction_delete")->setEnabled(false);
+ QString reason;
+ action("transaction_enter")->setEnabled(m_transactionEditor->isComplete(reason));
+ action("transaction_enter")->setToolTip(reason);
+ action("transaction_cancel")->setEnabled(true);
+ }
+ }
+
+ QValueList<MyMoneyAccount> accList;
+ file->accountList(accList);
+ QValueList<MyMoneyAccount>::const_iterator it_a;
+ QMap<QString, KMyMoneyPlugin::OnlinePlugin*>::const_iterator it_p = m_onlinePlugins.end();
+ for(it_a = accList.begin(); (it_p == m_onlinePlugins.end()) && (it_a != accList.end()); ++it_a) {
+ if ( !(*it_a).onlineBankingSettings().value("provider").isEmpty() ) {
+ // check if provider is available
+ it_p = m_onlinePlugins.find((*it_a).onlineBankingSettings().value("provider"));
+ if(it_p != m_onlinePlugins.end()) {
+ QStringList protocols;
+ (*it_p)->protocols(protocols);
+ if(protocols.count() > 0) {
+ action("account_online_update_all")->setEnabled(true);
+ action("account_online_update_menu")->setEnabled(true);
+ }
+ }
+ }
+ }
+ MyMoneyFileBitArray skip(IMyMoneyStorage::MaxRefCheckBits);
+ if(!m_selectedAccount.id().isEmpty()) {
+ if(!file->isStandardAccount(m_selectedAccount.id())) {
+ switch(m_selectedAccount.accountGroup()) {
+ case MyMoneyAccount::Asset:
+ case MyMoneyAccount::Liability:
+ case MyMoneyAccount::Equity:
+ action("account_transaction_report")->setEnabled(true);
+ action("account_edit")->setEnabled(true);
+ action("account_delete")->setEnabled(!file->isReferenced(m_selectedAccount));
+ action("account_open")->setEnabled(true);
+ if(m_selectedAccount.accountGroup() != MyMoneyAccount::Equity) {
+ if(m_reconciliationAccount.id().isEmpty()) {
+ action("account_reconcile")->setEnabled(true);
+ } else {
+ if(!m_transactionEditor) {
+ action("account_reconcile_finish")->setEnabled(m_selectedAccount.id() == m_reconciliationAccount.id());
+ action("account_reconcile_postpone")->setEnabled(m_selectedAccount.id() == m_reconciliationAccount.id());
+ }
+ }
+ }
+
+ if(m_selectedAccount.accountType() == MyMoneyAccount::Investment)
+ action("investment_new")->setEnabled(true);
+
+ if(m_selectedAccount.isClosed())
+ action("account_reopen")->setEnabled(true);
+ else if(canCloseAccount(m_selectedAccount))
+ action("account_close")->setEnabled(true);
+
+ if ( !m_selectedAccount.onlineBankingSettings().value("provider").isEmpty() ) {
+ action("account_online_unmap")->setEnabled(true);
+ // check if provider is available
+ QMap<QString, KMyMoneyPlugin::OnlinePlugin*>::const_iterator it_p;
+ it_p = m_onlinePlugins.find(m_selectedAccount.onlineBankingSettings().value("provider"));
+ if(it_p != m_onlinePlugins.end()) {
+ QStringList protocols;
+ (*it_p)->protocols(protocols);
+ if(protocols.count() > 0) {
+ action("account_online_update")->setEnabled(true);
+ action("account_online_update_menu")->setEnabled(true);
+ }
+ }
+ } else
+ action("account_online_map")->setEnabled(m_onlinePlugins.count() > 0);
+
+#ifdef HAVE_KDCHART
+ action("account_chart")->setEnabled(true);
+#endif
+ break;
+
+ case MyMoneyAccount::Income :
+ case MyMoneyAccount::Expense :
+ action("category_edit")->setEnabled(true);
+ // enable delete action, if category/account itself is not referenced
+ // by any object except accounts, because we want to allow
+ // deleting of sub-categories. Also, we allow transactions, schedules and budgets
+ // to be present because we can re-assign them during the delete process
+ skip.fill(false);
+ skip.setBit(IMyMoneyStorage::RefCheckTransaction);
+ skip.setBit(IMyMoneyStorage::RefCheckAccount);
+ skip.setBit(IMyMoneyStorage::RefCheckSchedule);
+ skip.setBit(IMyMoneyStorage::RefCheckBudget);
+ action("category_delete")->setEnabled(!file->isReferenced(m_selectedAccount, skip));
+ action("account_open")->setEnabled(true);
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+
+ if(!m_selectedInstitution.id().isEmpty()) {
+ action("institution_edit")->setEnabled(true);
+ action("institution_delete")->setEnabled(!file->isReferenced(m_selectedInstitution));
+ }
+
+ if(!m_selectedInvestment.id().isEmpty()) {
+ action("investment_edit")->setEnabled(true);
+ action("investment_delete")->setEnabled(!file->isReferenced(m_selectedInvestment));
+ action("investment_manual_price_update")->setEnabled(true);
+ try {
+ MyMoneySecurity security = MyMoneyFile::instance()->security(m_selectedInvestment.currencyId());
+ if(!security.value("kmm-online-source").isEmpty())
+ action("investment_online_price_update")->setEnabled(true);
+
+ } catch(MyMoneyException *e) {
+ qDebug("Error retrieving security for investment %s: %s", m_selectedInvestment.name().data(), e->what().data());
+ delete e;
+ }
+ if(m_selectedInvestment.isClosed())
+ action("account_reopen")->setEnabled(true);
+ else if(canCloseAccount(m_selectedInvestment))
+ action("account_close")->setEnabled(true);
+ }
+
+ if(!m_selectedSchedule.id().isEmpty()) {
+ action("schedule_edit")->setEnabled(true);
+ action("schedule_duplicate")->setEnabled(true);
+ action("schedule_delete")->setEnabled(!file->isReferenced(m_selectedSchedule));
+ if(!m_selectedSchedule.isFinished()) {
+ action("schedule_enter")->setEnabled(true);
+ // a schedule with a single occurence cannot be skipped
+ if(m_selectedSchedule.occurence() != MyMoneySchedule::OCCUR_ONCE) {
+ action("schedule_skip")->setEnabled(true);
+ }
+ }
+ }
+
+ if(m_selectedPayees.count() >= 1) {
+ action("payee_rename")->setEnabled(m_selectedPayees.count() == 1);
+ action("payee_delete")->setEnabled(true);
+ }
+
+ if(m_selectedBudgets.count() >= 1) {
+ action("budget_delete")->setEnabled(true);
+ if(m_selectedBudgets.count() == 1) {
+ action("budget_change_year")->setEnabled(true);
+ action("budget_copy")->setEnabled(true);
+ action("budget_rename")->setEnabled(true);
+ action("budget_forecast")->setEnabled(true);
+ }
+ }
+
+ if(!m_selectedCurrency.id().isEmpty()) {
+ action("currency_rename")->setEnabled(true);
+ // no need to check each transaction. accounts are enough in this case
+ skip.fill(false);
+ skip.setBit(IMyMoneyStorage::RefCheckTransaction);
+ action("currency_delete")->setEnabled(!file->isReferenced(m_selectedCurrency, skip));
+ if(m_selectedCurrency.id() != file->baseCurrency().id())
+ action("currency_setbase")->setEnabled(true);
+ }
+}
+
+void KMyMoney2App::slotResetSelections(void)
+{
+ slotSelectAccount();
+ slotSelectInstitution();
+ slotSelectInvestment();
+ slotSelectSchedule();
+ slotSelectCurrency();
+ slotSelectPayees(QValueList<MyMoneyPayee>());
+ slotSelectBudget(QValueList<MyMoneyBudget>());
+ slotSelectTransactions(KMyMoneyRegister::SelectedTransactions());
+ slotUpdateActions();
+}
+
+void KMyMoney2App::slotSelectCurrency(const MyMoneySecurity& currency)
+{
+ m_selectedCurrency = currency;
+ slotUpdateActions();
+ emit currencySelected(m_selectedCurrency);
+}
+
+void KMyMoney2App::slotSelectBudget(const QValueList<MyMoneyBudget>& list)
+{
+ m_selectedBudgets = list;
+ slotUpdateActions();
+ emit budgetSelected(m_selectedBudgets);
+}
+
+void KMyMoney2App::slotSelectPayees(const QValueList<MyMoneyPayee>& list)
+{
+ m_selectedPayees = list;
+ slotUpdateActions();
+ emit payeesSelected(m_selectedPayees);
+}
+
+void KMyMoney2App::slotSelectTransactions(const KMyMoneyRegister::SelectedTransactions& list)
+{
+ // list can either contain a list of transactions or a single selected scheduled transaction
+ // in the latter case, the transaction id is actually the one of the schedule. In order
+ // to differentiate between the two, we just ask for the schedule. If we don't find one - because
+ // we passed the id of a real transaction - then we know that fact. We use the schedule here,
+ // because the list of schedules is kept in a cache by MyMoneyFile. This way, we save some trips
+ // to the backend which we would have to do if we check for the transaction.
+ m_selectedTransactions.clear();
+ m_selectedSchedule = MyMoneySchedule();
+
+ m_accountGoto = QString();
+ m_payeeGoto = QString();
+ if(list.count() > 0 && !list.first().isScheduled()) {
+ m_selectedTransactions = list;
+ if(list.count() == 1) {
+ const MyMoneySplit& sp = m_selectedTransactions[0].split();
+ if(!sp.payeeId().isEmpty()) {
+ try {
+ MyMoneyPayee payee = MyMoneyFile::instance()->payee(sp.payeeId());
+ if(!payee.name().isEmpty()) {
+ m_payeeGoto = payee.id();
+ QString name = payee.name();
+ name.replace(QRegExp("&(?!&)"), "&&");
+ action("transaction_goto_payee")->setText(i18n("Goto '%1'").arg(name));
+ }
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+ }
+ try {
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ const MyMoneyTransaction& t = m_selectedTransactions[0].transaction();
+ // search the first non-income/non-expense accunt and use it for the 'goto account'
+ const MyMoneySplit& sp = m_selectedTransactions[0].split();
+ for(it_s = t.splits().begin(); it_s != t.splits().end(); ++it_s) {
+ if((*it_s).id() != sp.id()) {
+ MyMoneyAccount acc = MyMoneyFile::instance()->account((*it_s).accountId());
+ if(!acc.isIncomeExpense()) {
+ // for stock accounts we show the portfolio account
+ if(acc.isInvest()) {
+ acc = MyMoneyFile::instance()->account(acc.parentAccountId());
+ }
+ m_accountGoto = acc.id();
+ QString name = acc.name();
+ name.replace(QRegExp("&(?!&)"), "&&");
+ action("transaction_goto_account")->setText(i18n("Goto '%1'").arg(name));
+ break;
+ }
+ }
+ }
+ } catch(MyMoneyException* e) {
+ delete e;
+ }
+ }
+
+ slotUpdateActions();
+ emit transactionsSelected(m_selectedTransactions);
+
+ } else if(list.count() > 0) {
+ slotSelectSchedule(MyMoneyFile::instance()->schedule(list.first().scheduleId()));
+
+ } else {
+ slotUpdateActions();
+ }
+
+ // make sure, we show some neutral menu entry if we don't have an object
+ if(m_payeeGoto.isEmpty())
+ action("transaction_goto_payee")->setText(i18n("Goto payee"));
+ if(m_accountGoto.isEmpty())
+ action("transaction_goto_account")->setText(i18n("Goto account"));
+}
+
+void KMyMoney2App::slotSelectInstitution(const MyMoneyObject& institution)
+{
+ if(typeid(institution) != typeid(MyMoneyInstitution))
+ return;
+
+ m_selectedInstitution = dynamic_cast<const MyMoneyInstitution&>(institution);
+ // qDebug("slotSelectInstitution('%s')", m_selectedInstitution.name().data());
+ slotUpdateActions();
+ emit institutionSelected(m_selectedInstitution);
+}
+
+void KMyMoney2App::slotSelectAccount(const MyMoneyObject& obj)
+{
+ if(typeid(obj) != typeid(MyMoneyAccount))
+ return;
+
+ m_selectedAccount = MyMoneyAccount();
+ const MyMoneyAccount& acc = dynamic_cast<const MyMoneyAccount&>(obj);
+ if(!acc.isInvest())
+ m_selectedAccount = acc;
+
+ // qDebug("slotSelectAccount('%s')", m_selectedAccount.name().data());
+ slotUpdateActions();
+ emit accountSelected(m_selectedAccount);
+}
+
+void KMyMoney2App::slotSelectInvestment(const MyMoneyObject& obj)
+{
+ if(typeid(obj) != typeid(MyMoneyAccount))
+ return;
+
+ // qDebug("slotSelectInvestment('%s')", account.name().data());
+ m_selectedInvestment = MyMoneyAccount();
+ const MyMoneyAccount& acc = dynamic_cast<const MyMoneyAccount&>(obj);
+ if(acc.isInvest())
+ m_selectedInvestment = acc;
+
+ slotUpdateActions();
+ emit investmentSelected(m_selectedInvestment);
+}
+
+void KMyMoney2App::slotSelectSchedule(const MyMoneySchedule& schedule)
+{
+ // qDebug("slotSelectSchedule('%s')", schedule.name().data());
+ m_selectedSchedule = schedule;
+ slotUpdateActions();
+ emit scheduleSelected(m_selectedSchedule);
+}
+
+void KMyMoney2App::slotDataChanged(void)
+{
+ // As this method is called everytime the MyMoneyFile instance
+ // notifies a modification, it's the perfect place to start the timer if needed
+ if (m_autoSaveEnabled && !m_autoSaveTimer->isActive()) {
+ m_autoSaveTimer->start(m_autoSavePeriod * 60 * 1000, true); //miliseconds
+ }
+ updateCaption();
+}
+
+void KMyMoney2App::slotCurrencyDialog(void)
+{
+ KCurrencyEditDlg dlg(this, "Currency Editor");
+ connect(&dlg, SIGNAL(selectObject(const MyMoneySecurity&)), this, SLOT(slotSelectCurrency(const MyMoneySecurity&)));
+ connect(&dlg, SIGNAL(openContextMenu(const MyMoneySecurity&)), this, SLOT(slotShowCurrencyContextMenu()));
+ connect(this, SIGNAL(currencyRename()), &dlg, SLOT(slotStartRename()));
+ connect(&dlg, SIGNAL(renameCurrency(QListViewItem*, int, const QString&)), this, SLOT(slotCurrencyRename(QListViewItem*,int,const QString&)));
+ connect(this, SIGNAL(currencyCreated(const QString&)), &dlg, SLOT(slotSelectCurrency(const QString&)));
+ connect(&dlg, SIGNAL(selectBaseCurrency(const MyMoneySecurity&)), this, SLOT(slotCurrencySetBase()));
+
+ dlg.exec();
+
+ slotSelectCurrency(MyMoneySecurity());
+}
+
+void KMyMoney2App::slotPriceDialog(void)
+{
+ KMyMoneyPriceDlg dlg(this, "Price Editor");
+ dlg.exec();
+}
+
+void KMyMoney2App::slotFileConsitencyCheck(void)
+{
+ KMSTATUS(i18n("Running consistency check..."));
+
+ QStringList msg;
+ MyMoneyFileTransaction ft;
+ try {
+ msg = MyMoneyFile::instance()->consistencyCheck();
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ msg = i18n("Consistency check failed: %1").arg(e->what());
+ delete e;
+ }
+
+ KMessageBox::warningContinueCancelList(0, "Result", msg, i18n("Consistency check result"));
+
+ updateCaption();
+}
+
+void KMyMoney2App::slotCheckSchedules(void)
+{
+ if(KMyMoneyGlobalSettings::checkSchedule() == true) {
+
+ KMSTATUS(i18n("Checking for overdue scheduled transactions..."));
+ MyMoneyFile *file = MyMoneyFile::instance();
+ QDate checkDate = QDate::currentDate().addDays(KMyMoneyGlobalSettings::checkSchedulePreview());
+
+ QValueList<MyMoneySchedule> scheduleList = file->scheduleList();
+ QValueList<MyMoneySchedule>::Iterator it;
+
+ KMyMoneyUtils::EnterScheduleResultCodeE rc = KMyMoneyUtils::Enter;
+ for (it=scheduleList.begin(); (it != scheduleList.end()) && (rc != KMyMoneyUtils::Cancel); ++it) {
+ // Get the copy in the file because it might be modified by commitTransaction
+ MyMoneySchedule schedule = file->schedule((*it).id());
+
+ if(schedule.autoEnter()) {
+ try {
+ while(!schedule.isFinished() && (schedule.nextDueDate() <= checkDate)
+ && rc != KMyMoneyUtils::Ignore
+ && rc != KMyMoneyUtils::Cancel) {
+ rc = enterSchedule(schedule, true, true);
+ schedule = file->schedule((*it).id()); // get a copy of the modified schedule
+ }
+ } catch(MyMoneyException* e) {
+ delete e;
+ }
+ }
+ }
+ updateCaption();
+ }
+}
+
+void KMyMoney2App::writeLastUsedDir(const QString& directory)
+{
+ //get global config object for our app.
+ KConfig *kconfig = KGlobal::config();
+ if(kconfig)
+ {
+ kconfig->setGroup("General Options");
+
+ //write path entry, no error handling since its void.
+ kconfig->writePathEntry("LastUsedDirectory", directory);
+ }
+}
+
+void KMyMoney2App::writeLastUsedFile(const QString& fileName)
+{
+ //get global config object for our app.
+ KConfig *kconfig = KGlobal::config();
+ if(kconfig)
+ {
+ kconfig->setGroup("General Options");
+
+ // write path entry, no error handling since its void.
+ // use a standard string, as fileName could contain a protocol
+ // e.g. file:/home/thb/....
+ kconfig->writeEntry("LastUsedFile", fileName);
+ }
+}
+
+QString KMyMoney2App::readLastUsedDir(void) const
+{
+ QString str;
+
+ //get global config object for our app.
+ KConfig *kconfig = KGlobal::config();
+ if(kconfig)
+ {
+ kconfig->setGroup("General Options");
+
+ //read path entry. Second parameter is the default if the setting is not found, which will be the default document path.
+ str = kconfig->readPathEntry("LastUsedDirectory", KGlobalSettings::documentPath());
+ // if the path stored is empty, we use the default nevertheless
+ if(str.isEmpty())
+ str = KGlobalSettings::documentPath();
+ }
+
+ return str;
+}
+
+QString KMyMoney2App::readLastUsedFile(void) const
+{
+ QString str;
+
+ // get global config object for our app.
+ KConfig *kconfig = KGlobal::config();
+ if(kconfig)
+ {
+ kconfig->setGroup("General Options");
+
+ // read filename entry.
+ str = kconfig->readEntry("LastUsedFile", "");
+ }
+
+ return str;
+}
+
+const QString KMyMoney2App::filename(void) const
+{
+ return m_fileName.url();
+}
+
+const QValueList<QCString> KMyMoney2App::instanceList(void) const
+{
+ QValueList<QCString> list;
+ QValueList<QCString> apps = kapp->dcopClient()->registeredApplications();
+ QValueList<QCString>::ConstIterator it;
+
+ for(it = apps.begin(); it != apps.end(); ++it) {
+ // skip over myself
+ if((*it) == kapp->dcopClient()->appId())
+ continue;
+ if((*it).find("kmymoney-") == 0) {
+ list += (*it);
+ }
+ }
+ return list;
+}
+
+void KMyMoney2App::slotEquityPriceUpdate(void)
+{
+ KEquityPriceUpdateDlg dlg(this);
+ if(dlg.exec() == QDialog::Accepted)
+ dlg.storePrices();
+}
+
+void KMyMoney2App::webConnect(const QString& url, const QCString& asn_id)
+{
+ //
+ // Web connect attempts to go through the known importers and see if the file
+ // can be importing using that method. If so, it will import it using that
+ // plugin
+ //
+
+ // Bring this window to the forefront. This method was suggested by
+ // Lubos Lunak <l.lunak@suse.cz> of the KDE core development team.
+ KStartupInfo::setNewStartupId(this, asn_id);
+
+ // Make sure we have an open file
+ if ( ! myMoneyView->fileOpen() &&
+ KMessageBox::warningContinueCancel(kmymoney2, i18n("You must first select a KMyMoney file before you can import a statement.")) == KMessageBox::Continue )
+ kmymoney2->slotFileOpen();
+
+ // only continue if the user really did open a file.
+ if ( myMoneyView->fileOpen() )
+ {
+ KMSTATUS(i18n("Importing a statement via Web Connect"));
+
+ // remove the statement files
+ d->unlinkStatementXML();
+
+ QMap<QString,KMyMoneyPlugin::ImporterPlugin*>::const_iterator it_plugin = m_importerPlugins.begin();
+ while ( it_plugin != m_importerPlugins.end() )
+ {
+ if ( (*it_plugin)->isMyFormat(url) )
+ {
+ QValueList<MyMoneyStatement> statements;
+ if (!(*it_plugin)->import(url) )
+ {
+ KMessageBox::error( this, i18n("Unable to import %1 using %2 plugin. The plugin returned the following error: %3").arg(url,(*it_plugin)->formatName(),(*it_plugin)->lastError()), i18n("Importing error"));
+ }
+
+ break;
+ }
+ ++it_plugin;
+ }
+
+ // If we did not find a match, try importing it as a KMM statement file,
+ // which is really just for testing. the statement file is not exposed
+ // to users.
+ if ( it_plugin == m_importerPlugins.end() )
+ if ( MyMoneyStatement::isStatementFile( url ) )
+ slotStatementImport(url);
+
+ }
+}
+
+void KMyMoney2App::slotEnableMessages(void)
+{
+ KMessageBox::enableAllMessages();
+ KMessageBox::information(this, i18n("All messages have been enabled."), i18n("All messages"));
+}
+
+void KMyMoney2App::slotSecurityEditor(void)
+{
+ KSecurityListEditor dlg(this, "KSecurityListEditor");
+ dlg.exec();
+}
+
+void KMyMoney2App::createInterfaces(void)
+{
+ // Sets up the plugin interface, and load the plugins
+ m_pluginInterface = new QObject( this, "_pluginInterface" );
+
+ new KMyMoneyPlugin::KMMViewInterface(this, myMoneyView, m_pluginInterface, "view interface");
+ new KMyMoneyPlugin::KMMStatementInterface(this, m_pluginInterface, "statement interface");
+ new KMyMoneyPlugin::KMMImportInterface(this, m_pluginInterface, "import interface");
+}
+
+void KMyMoney2App::loadPlugins(void)
+{
+ d->m_pluginLoader = new KMyMoneyPlugin::PluginLoader(this);
+
+ connect( d->m_pluginLoader, SIGNAL( plug(KPluginInfo*) ), this, SLOT( slotPluginPlug(KPluginInfo*) ) );
+ connect( d->m_pluginLoader, SIGNAL( unplug(KPluginInfo*) ), this, SLOT( slotPluginUnplug(KPluginInfo*) ) );
+
+ d->m_pluginLoader->loadPlugins();
+}
+
+void KMyMoney2App::slotPluginPlug(KPluginInfo* info)
+{
+ KMyMoneyPlugin::Plugin* plugin = d->m_pluginLoader->getPluginFromInfo(info);
+
+ // check for online plugin
+ KMyMoneyPlugin::OnlinePlugin* op = dynamic_cast<KMyMoneyPlugin::OnlinePlugin *>(plugin);
+ // check for importer plugin
+ KMyMoneyPlugin::ImporterPlugin* ip = dynamic_cast<KMyMoneyPlugin::ImporterPlugin *>(plugin);
+
+ // plug the plugin
+ guiFactory()->addClient(plugin);
+
+ if(op)
+ m_onlinePlugins[plugin->name()] = op;
+
+ if(ip)
+ m_importerPlugins[plugin->name()] = ip;
+
+ slotUpdateActions();
+}
+
+void KMyMoney2App::slotPluginUnplug(KPluginInfo* info)
+{
+ KMyMoneyPlugin::Plugin* plugin = d->m_pluginLoader->getPluginFromInfo(info);
+
+ // check for online plugin
+ KMyMoneyPlugin::OnlinePlugin* op = dynamic_cast<KMyMoneyPlugin::OnlinePlugin *>(plugin);
+ // check for importer plugin
+ KMyMoneyPlugin::ImporterPlugin* ip = dynamic_cast<KMyMoneyPlugin::ImporterPlugin *>(plugin);
+
+ // unplug the plugin
+ guiFactory()->removeClient(plugin);
+
+ if(op)
+ m_onlinePlugins.erase(plugin->name());
+
+ if(ip)
+ m_importerPlugins.erase(plugin->name());
+
+ slotUpdateActions();
+}
+
+void KMyMoney2App::slotAutoSave(void)
+{
+ if(!m_inAutoSaving) {
+ m_inAutoSaving = true;
+ KMSTATUS(i18n("Auto saving..."));
+
+ //calls slotFileSave if needed, and restart the timer
+ //it the file is not saved, reinitializes the countdown.
+ if (myMoneyView->dirty() && m_autoSaveEnabled) {
+ if (!slotFileSave() && m_autoSavePeriod > 0) {
+ m_autoSaveTimer->start(m_autoSavePeriod * 60 * 1000, true);
+ }
+ }
+
+ m_inAutoSaving = false;
+ }
+}
+
+void KMyMoney2App::slotDateChanged(void)
+{
+ QDateTime dt = QDateTime::currentDateTime();
+ QDateTime nextDay( QDate(dt.date().addDays(1)), QTime(0, 0, 0) );
+
+ QTimer::singleShot(dt.secsTo(nextDay)*1000, this, SLOT(slotDateChanged()));
+ myMoneyView->slotRefreshViews();
+}
+
+const MyMoneyAccount& KMyMoney2App::account(const QString& key, const QString& value) const
+{
+ QValueList<MyMoneyAccount> list;
+ QValueList<MyMoneyAccount>::const_iterator it_a;
+ MyMoneyFile::instance()->accountList(list);
+ QValueList<MyMoneyAccount> accList;
+ for(it_a = list.begin(); it_a != list.end(); ++it_a) {
+ const QString& id = (*it_a).onlineBankingSettings().value(key);
+ if(id.contains(value)) {
+ accList << MyMoneyFile::instance()->account((*it_a).id());
+ }
+ if(id == value) {
+ return MyMoneyFile::instance()->account((*it_a).id());
+ }
+ }
+ // if we did not find an exact match of the value, we take the one that partially
+ // matched, but only if not more than one matched partially.
+ if(accList.count() == 1) {
+ return accList[0];
+ }
+
+ // return reference to empty element
+ return MyMoneyFile::instance()->account(QString());
+}
+
+void KMyMoney2App::setAccountOnlineParameters(const MyMoneyAccount& _acc, const MyMoneyKeyValueContainer& kvps)
+{
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(_acc.id());
+ acc.setOnlineBankingSettings(kvps);
+ MyMoneyFile::instance()->modifyAccount(acc);
+ ft.commit();
+
+ } catch(MyMoneyException *e) {
+ KMessageBox::detailedSorry(0, i18n("Unable to setup online parameters for account ''%1'").arg(_acc.name()), e->what() );
+ delete e;
+ }
+}
+
+void KMyMoney2App::slotAccountUnmapOnline(void)
+{
+ // no account selected
+ if(m_selectedAccount.id().isEmpty())
+ return;
+
+ // not a mapped account
+ if(m_selectedAccount.onlineBankingSettings().value("provider").isEmpty())
+ return;
+
+ if(KMessageBox::warningYesNo(this, QString("<qt>%1</qt>").arg(i18n("Do you really want to remove the mapping of account <b>%1</b> to an online account? Depending on the details of the online banking method used, this action cannot be reverted.").arg(m_selectedAccount.name())), i18n("Remove mapping to online account")) == KMessageBox::Yes) {
+ MyMoneyFileTransaction ft;
+ try {
+ m_selectedAccount.setOnlineBankingSettings(MyMoneyKeyValueContainer());
+ // delete the kvp that is used in MyMoneyStatementReader too
+ // we should really get rid of it, but since I don't know what it
+ // is good for, I'll keep it around. (ipwizard)
+ m_selectedAccount.deletePair("StatementKey");
+ MyMoneyFile::instance()->modifyAccount(m_selectedAccount);
+ ft.commit();
+ } catch(MyMoneyException* e) {
+ KMessageBox::error(this, i18n("Unable to unmap account from online account: %1").arg(e->what()));
+ delete e;
+ }
+ }
+}
+
+void KMyMoney2App::slotAccountMapOnline(void)
+{
+ // no account selected
+ if(m_selectedAccount.id().isEmpty())
+ return;
+
+ // already an account mapped
+ if(!m_selectedAccount.onlineBankingSettings().value("provider").isEmpty())
+ return;
+
+ // check if user tries to map a brokerageAccount
+ if(m_selectedAccount.name().contains(i18n(" (Brokerage)"))) {
+ if(KMessageBox::warningContinueCancel(this, i18n("You try to map a brokerage account to an online account. This is usually not advisable. In general, the investment account should be mapped to the online account. Please cancel if you intended to map the investment account, continue otherwise"), i18n("Mapping brokerage account")) == KMessageBox::Cancel) {
+ return;
+ }
+ }
+
+ // if we have more than one provider display a dialog to select the current providers
+ KPluginDlg dlg(this);
+ dlg.setCaption(i18n("Select online banking plugin"));
+ dlg.closeButton->hide();
+ QString provider;
+ QMap<QString, KMyMoneyPlugin::OnlinePlugin*>::const_iterator it_p;
+ switch(m_onlinePlugins.count()) {
+ case 0:
+ break;
+ case 1:
+ provider = m_onlinePlugins.begin().key();
+ break;
+ default:
+ for(it_p = m_onlinePlugins.begin(); it_p != m_onlinePlugins.end(); ++it_p) {
+ QStringList protocolList;
+ (*it_p)->protocols(protocolList);
+ new KListViewItem(dlg.m_listView, it_p.key(), "Loaded", protocolList.join(", "));
+ }
+ if(dlg.exec() == QDialog::Accepted) {
+ if(dlg.m_listView->selectedItem()) {
+ provider = dlg.m_listView->selectedItem()->text(0);
+ }
+ }
+ break;
+ }
+
+ if(provider.isEmpty())
+ return;
+
+ // find the provider
+ it_p = m_onlinePlugins.find(provider);
+ if(it_p != m_onlinePlugins.end()) {
+ // plugin found, call it
+ MyMoneyKeyValueContainer settings;
+ if((*it_p)->mapAccount(m_selectedAccount, settings)) {
+ settings["provider"] = provider;
+ MyMoneyAccount acc(m_selectedAccount);
+ acc.setOnlineBankingSettings(settings);
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyFile::instance()->modifyAccount(acc);
+ ft.commit();
+ } catch(MyMoneyException* e) {
+ KMessageBox::error(this, i18n("Unable to map account to online account: %1").arg(e->what()));
+ delete e;
+ }
+ }
+ }
+}
+
+void KMyMoney2App::slotAccountUpdateOnlineAll(void)
+{
+ QValueList<MyMoneyAccount> accList;
+ MyMoneyFile::instance()->accountList(accList);
+ QValueList<MyMoneyAccount>::iterator it_a;
+ QMap<QString, KMyMoneyPlugin::OnlinePlugin*>::const_iterator it_p;
+ d->m_statementResults.clear();
+ d->m_collectingStatements = true;
+
+ // remove all those from the list, that don't have a 'provider' or the
+ // provider is not currently present
+ for(it_a = accList.begin(); it_a != accList.end();) {
+ if ((*it_a).onlineBankingSettings().value("provider").isEmpty()
+ || m_onlinePlugins.find((*it_a).onlineBankingSettings().value("provider")) == m_onlinePlugins.end() ) {
+ it_a = accList.remove(it_a);
+ } else
+ ++it_a;
+ }
+
+ // now work on the remaining list of accounts
+ int cnt = accList.count() - 1;
+ for(it_a = accList.begin(); it_a != accList.end(); ++it_a) {
+ it_p = m_onlinePlugins.find((*it_a).onlineBankingSettings().value("provider"));
+ (*it_p)->updateAccount(*it_a, cnt != 0);
+ --cnt;
+ }
+
+ d->m_collectingStatements = false;
+ if(!d->m_statementResults.isEmpty())
+ KMessageBox::informationList(this, i18n("The statements have been processed with the following results:"), d->m_statementResults, i18n("Statement stats"));
+}
+
+void KMyMoney2App::slotAccountUpdateOnline(void)
+{
+ // no account selected
+ if(m_selectedAccount.id().isEmpty())
+ return;
+
+ // no online account mapped
+ if(m_selectedAccount.onlineBankingSettings().value("provider").isEmpty())
+ return;
+
+ // find the provider
+ QMap<QString, KMyMoneyPlugin::OnlinePlugin*>::const_iterator it_p;
+ it_p = m_onlinePlugins.find(m_selectedAccount.onlineBankingSettings().value("provider"));
+ if(it_p != m_onlinePlugins.end()) {
+ // plugin found, call it
+ d->m_collectingStatements = true;
+ d->m_statementResults.clear();
+ (*it_p)->updateAccount(m_selectedAccount);
+ d->m_collectingStatements = false;
+ if(!d->m_statementResults.isEmpty())
+ KMessageBox::informationList(this, i18n("The statements have been processed with the following results:"), d->m_statementResults, i18n("Statement stats"));
+ }
+}
+
+KMStatus::KMStatus (const QString &text)
+{
+ m_prevText = kmymoney2->slotStatusMsg(text);
+}
+
+KMStatus::~KMStatus()
+{
+ kmymoney2->slotStatusMsg(m_prevText);
+}
+
+void KMyMoney2App::Private::unlinkStatementXML(void)
+{
+ QDir d("/home/thb", "kmm-statement*");
+ for(int i=0; i < d.count(); ++i) {
+ qDebug("Remove %s", d[i].data());
+ d.remove(QString("/home/thb/%1").arg(d[i]));
+ }
+ statementXMLindex = 0;
+}
+
+#include "kmymoney2.moc"
+// vim:cin:si:ai:et:ts=2:sw=2:
+
diff --git a/kmymoney2/kmymoney2.desktop b/kmymoney2/kmymoney2.desktop
new file mode 100644
index 0000000..aac7a69
--- /dev/null
+++ b/kmymoney2/kmymoney2.desktop
@@ -0,0 +1,23 @@
+[Desktop Entry]
+Name=KMyMoney
+GenericName=Personal Finance Manager
+GenericName[de]=Persönlicher Finanzassistent
+GenericName[fr]=Gestionnaire de finances personnelles
+GenericName[tr]=Kişisel Finans Yöneticisi
+GenericName[ro]=Gestionar de finanțe personale
+GenericName[ru]=Учёт финансов
+GenericName[zh_CN]=个人财务管理软件
+Exec=kmymoney2 %u
+Comment=Personal Finance Manager
+Comment[de]=Persönlicher Finanzassistent
+Comment[fr]=Gestionnaire de finances personnelles
+Comment[tr]=Kişisel Finans Yöneticisi
+Comment[ro]=Gestionar de finanțe personale
+Comment[ru]=Учёт финансов
+Comment[zh_CN]=个人财务管理软件
+MimeType=application/x-kmymoney;application/vnd.intu.qfx;application/x-ofx;
+Type=Application
+DocPath=kmymoney2/index.html
+Icon=kmymoney2
+ServiceTypes=
+Categories=Office;Finance;
diff --git a/kmymoney2/kmymoney2.h b/kmymoney2/kmymoney2.h
new file mode 100644
index 0000000..77d5c86
--- /dev/null
+++ b/kmymoney2/kmymoney2.h
@@ -0,0 +1,1306 @@
+/***************************************************************************
+ kmymoney2.h
+ -------------------
+ copyright : (C) 2000-2001 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+#ifndef KMYMONEY2_H
+#define KMYMONEY2_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qapplication.h>
+class QTimer;
+class QLabel;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kapplication.h>
+#include <kmainwindow.h>
+#include <kaccel.h>
+#include <kaction.h>
+#include <kprocess.h>
+#include <kurl.h>
+#include <kfile.h>
+#include <dcopobject.h>
+class KComboBox;
+class KPushButton;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneyscheduled.h>
+#include <kmymoney/mymoneyinstitution.h>
+#include <kmymoney/mymoneypayee.h>
+#include <kmymoney/mymoneybudget.h>
+#include <kmymoney/kmymoneyplugin.h>
+#include <kmymoney/register.h>
+#include <kmymoney/kmymoneyutils.h>
+
+class QSignalMapper;
+class KProgress;
+class KMyMoneyView;
+class MyMoneyQifReader;
+class MyMoneyStatementReader;
+class MyMoneyStatement;
+class IMyMoneyStorage;
+class KFindTransactionDlg;
+class TransactionEditor;
+class KEndingBalanceDlg;
+class KPluginInfo;
+
+namespace KMyMoneyPlugin { class ImporterPlugin; }
+
+/*! \mainpage KMyMoney Main Page for API documentation.
+ *
+ * \section intro Introduction
+ *
+ * This is the API documentation for KMyMoney. It should be used as a reference
+ * for KMyMoney developers and users who wish to see how KMyMoney works. This
+ * documentation will be kept up-to-date as development progresses and should be
+ * read for new features that have been developed in KMyMoney.
+ *
+ * The latest version of this document is available from the project's web-site
+ * at http://kmymoney2.sourceforge.net/ and is generated daily by doxygen reading
+ * the header files found in the CVS main branch.
+ */
+
+/**
+ * The base class for KMyMoney application windows. It sets up the main
+ * window and reads the config file as well as providing a menubar, toolbar
+ * and statusbar.
+ *
+ * @see KMyMoneyView
+ *
+ * @author Michael Edwardes 2000-2001
+ * @author Thomas Baumgart 2006-2008
+ *
+ * @short Main application class.
+ */
+class KMyMoney2App : public KMainWindow, public DCOPObject
+{
+ Q_OBJECT
+ K_DCOP
+
+protected slots:
+ void slotFileSaveAsFilterChanged(const QString& filter);
+
+ /**
+ * This slot is intended to be used as part of auto saving. This is used when the
+ * QTimer emits the timeout signal and simply checks that the file is dirty (has
+ * received modifications to it's contents), and call the apropriate method to
+ * save the file. Furthermore, re-starts the timer (possibly not needed).
+ * @author mvillarino 2005
+ * @see KMyMoney2App::slotDataChanged()
+ */
+ void slotAutoSave(void);
+
+ /**
+ * This slot re-enables all message for which the "Don't show again"
+ * option had been selected.
+ */
+ void slotEnableMessages(void);
+
+ /**
+ * Called when the user asks for file information.
+ */
+ void slotFileFileInfo(void);
+
+ void slotPerformanceTest(void);
+
+ /**
+ * Debugging only: turn on/off traces
+ */
+ void slotToggleTraces(void);
+
+ /**
+ * Debugging only: turn on/off timers
+ */
+ void slotToggleTimers(void);
+
+ /**
+ * Called when the user asks for the personal information.
+ */
+ void slotFileViewPersonal(void);
+
+ /**
+ * Called when the user wishes to import tab delimeted transactions
+ * into the current account. An account must be open for this to
+ * work. Calls KMyMoneyView::slotAccountImportAscii.
+ *
+ * @see MyMoneyAccount
+ */
+ void slotQifImport(void);
+
+ /**
+ * Called when a QIF import is finished.
+ */
+ void slotQifImportFinished(void);
+
+ /**
+ * Opens a file selector dialog for the user to choose an existing OFX
+ * file from the file system to be imported. This slot is expected to
+ * be called from the UI.
+ */
+ void slotGncImport(void);
+
+ /**
+ * Open a dialog with a chart of the balance for the currently selected
+ * account (m_selectedAccount). Return once the dialog is closed. Don't do
+ * anything if no account is selected or charts are not available.
+ */
+ void slotAccountChart(void);
+
+ /**
+ * Opens a file selector dialog for the user to choose an existing KMM
+ * statement file from the file system to be imported. This is for testing
+ * only. KMM statement files are not designed to be exposed to the user.
+ */
+ void slotStatementImport(void);
+
+ void slotLoadAccountTemplates(void);
+ void slotSaveAccountTemplates(void);
+
+ /**
+ * Called when the user wishes to export some transaction to a
+ * QIF formatted file. An account must be open for this to work.
+ * Uses MyMoneyQifWriter() for the actual output.
+ */
+ void slotQifExport(void);
+
+ /**
+ * Open up the application wide settings dialog.
+ *
+ * @see KSettingsDlg
+ */
+ void slotSettings(void);
+
+ /** No descriptions */
+ void slotFileBackup(void);
+
+ void slotShowTipOfTheDay(void);
+
+ void slotQifProfileEditor(void);
+
+ void slotShowPreviousView(void);
+
+ void slotShowNextView(void);
+
+ void slotSecurityEditor(void);
+
+ /**
+ * Brings up a dialog to let the user search for specific transaction(s). It then
+ * opens a results window to display those transactions.
+ */
+ void slotFindTransaction(void);
+
+ /**
+ * Destroys a possibly open the search dialog
+ */
+ void slotCloseSearchDialog(void);
+
+ /**
+ * Preloads the input dialog with the data of the current
+ * selected institution and brings up the input dialog
+ * and saves the information entered.
+ */
+ void slotInstitutionEdit(const MyMoneyObject& obj = MyMoneyInstitution());
+
+ /**
+ * Deletes the current selected institution.
+ */
+ void slotInstitutionDelete(void);
+
+ /**
+ * Brings up the new category editor and saves the information.
+ * The dialog will be preset with the name. The parent defaults to
+ * MyMoneyFile::expense()
+ *
+ * @param name Name of the account to be created. Could include a full hierarchy
+ * @param id reference to storage which will receive the id after successful creation
+ *
+ * @note Typically, this slot can be connected to the
+ * StdTransactionEditor::createCategory(const QString&, QString&) or
+ * KMyMoneyCombo::createItem(const QString&, QString&) signal.
+ */
+ void slotCategoryNew(const QString& name, QString& id);
+
+ /**
+ * Calls the print logic for the current view
+ */
+ void slotPrintView(void);
+
+ /**
+ * Create a new investment
+ */
+ void slotInvestmentNew(void);
+
+ /**
+ * Create a new investment in a given @p parent investment account
+ */
+ void slotInvestmentNew(MyMoneyAccount& account, const MyMoneyAccount& parent);
+
+ /**
+ * This slot opens the investment editor to edit the currently
+ * selected investment if possible
+ */
+ void slotInvestmentEdit(void);
+
+ /**
+ * Deletes the current selected investment.
+ */
+ void slotInvestmentDelete(void);
+
+ /**
+ * Performs online update for currently selected investment
+ */
+ void slotOnlinePriceUpdate(void);
+
+ /**
+ * Performs manual update for currently selected investment
+ */
+ void slotManualPriceUpdate(void);
+
+ /**
+ * Call this slot, if any configuration parameter has changed
+ */
+ void slotUpdateConfiguration(void);
+
+ /**
+ */
+ void slotPayeeNew(const QString& newnameBase, QString& id);
+ void slotPayeeNew(void);
+
+ /**
+ */
+ void slotPayeeDelete(void);
+
+ /**
+ */
+ void slotBudgetNew(void);
+
+ /**
+ */
+ void slotBudgetDelete(void);
+
+ /**
+ */
+ void slotBudgetCopy(void);
+
+ /**
+ */
+ void slotBudgetChangeYear(void);
+
+ /**
+ */
+ void slotBudgetForecast(void);
+
+ /**
+ */
+ void slotCurrencyNew(void);
+
+ /**
+ */
+ void slotCurrencyRename(QListViewItem* item, int, const QString& txt);
+
+ /**
+ */
+ void slotCurrencyDelete(void);
+
+ /**
+ */
+ void slotCurrencySetBase(void);
+
+ /**
+ * This slot is used to start new features during the development cycle
+ */
+ void slotNewFeature(void);
+
+ /**
+ */
+ void slotTransactionsNew(void);
+
+ /**
+ */
+ void slotTransactionsEdit(void);
+
+ /**
+ */
+ void slotTransactionsEditSplits(void);
+
+ /**
+ */
+ void slotTransactionsDelete(void);
+
+ /**
+ */
+ void slotTransactionsEnter(void);
+
+ /**
+ */
+ void slotTransactionsCancel(void);
+
+ /**
+ */
+ void slotTransactionsCancelOrEnter(bool& okToSelect);
+
+ /**
+ */
+ void slotTransactionDuplicate(void);
+
+ /**
+ */
+ void slotToggleReconciliationFlag(void);
+
+ /**
+ */
+ void slotMarkTransactionCleared(void);
+
+ /**
+ */
+ void slotMarkTransactionReconciled(void);
+
+ /**
+ */
+ void slotMarkTransactionNotReconciled(void);
+
+ /**
+ */
+ void slotTransactionGotoAccount(void);
+
+ /**
+ */
+ void slotTransactionGotoPayee(void);
+
+ /**
+ */
+ void slotTransactionCreateSchedule(void);
+
+ /**
+ */
+ void slotTransactionAssignNumber(void);
+
+ /**
+ */
+ void slotTransactionCombine(void);
+
+ /**
+ * Accept the selected transactions that are marked as 'imported' and remove the flag
+ */
+ void slotTransactionsAccept(void);
+
+ /**
+ * This slot triggers an update of all views and restarts
+ * a single shot timer to call itself again at beginning of
+ * the next day.
+ */
+ void slotDateChanged(void);
+
+ /**
+ * This slot will be called when the engine data changed
+ * and the application object needs to update it's state.
+ */
+ void slotDataChanged(void);
+
+ void slotMoveToAccount(const QString& id);
+
+ void slotUpdateMoveToAccountMenu(void);
+
+ /**
+ * This slot collects information for a new scheduled transaction
+ * based on transaction @a t and @a occurence and saves it in the engine.
+ */
+ void slotScheduleNew(const MyMoneyTransaction& t, MyMoneySchedule::occurenceE occurence = MyMoneySchedule::OCCUR_MONTHLY);
+
+ /**
+ */
+ void slotScheduleDuplicate(void);
+
+ void slotKDELanguageSettings(void);
+
+ void slotAccountMapOnline(void);
+ void slotAccountUnmapOnline(void);
+ void slotAccountUpdateOnline(void);
+ void slotAccountUpdateOnlineAll(void);
+
+ void slotManageGpgKeys(void);
+ void slotKeySelected(int idx);
+
+public:
+ /**
+ * This method checks if there is at least one asset or liability account
+ * in the current storage object. If not, it starts the new account wizard.
+ */
+ void createInitialAccount(void);
+
+ /**
+ * This method returns the last URL used or an empty URL
+ * depending on the option setting if the last file should
+ * be opened during startup or the open file dialog should
+ * be displayed.
+ *
+ * @return URL of last opened file or empty if the program
+ * should start with the open file dialog
+ */
+ const KURL lastOpenedURL(void);
+
+ /**
+ * construtor of KMyMoney2App, calls all init functions to create the application.
+ */
+ KMyMoney2App(QWidget* parent=0, const char* name=0);
+
+ /**
+ * Destructor
+ */
+ ~KMyMoney2App();
+
+ /** Init wizard dialog */
+ bool initWizard(void);
+
+ static void progressCallback(int current, int total, const QString&);
+
+ void writeLastUsedDir(const QString& directory);
+ QString readLastUsedDir(void) const;
+ void writeLastUsedFile(const QString& fileName);
+ QString readLastUsedFile(void) const;
+
+ /**
+ * Returns whether there is an importer available that can handle this file
+ */
+ bool isImportableFile( const KURL& url );
+
+ /**
+ * This method is used to update the caption of the application window.
+ * It set's the caption to "filename [modified] - KMyMoney".
+ *
+ * @param skipActions if true, the actions will not be updated. This
+ * is usually onyl required by some early calls when
+ * these widgets are not yet created (the default is false).
+ */
+ void updateCaption(bool skipActions = false);
+
+ /**
+ * This method returns a list of all 'other' dcop registered kmymoney processes.
+ * It's a subset of the return of DCOPclient()->registeredApplications().
+ *
+ * @retval QStringList of process ids
+ */
+ const QValueList<QCString> instanceList(void) const;
+
+ /**
+ * Dump a list of the names of all defined KActions to stdout.
+ */
+ void dumpActions(void) const;
+
+ /**
+ * Popup the context menu with the respective @p containerName.
+ * Valid container names are defined in kmymoney2ui.rc
+ */
+ void showContextMenu(const QString& containerName);
+
+ /**
+ * This method opens the category editor with the data found in @a account. The
+ * parent account is preset to @a parent but can be modified. If the user
+ * acknowledges, the category is created.
+ */
+ void createCategory(MyMoneyAccount& account, const MyMoneyAccount& parent);
+
+ /**
+ * This method returns the account for a given @a key - @a value pair.
+ * If the account is not found in the list of accounts, MyMoneyAccount()
+ * is returned.
+ */
+ const MyMoneyAccount& account(const QString& key, const QString& value) const;
+
+ /**
+ * This method set the online parameters stored in @a kvps with the
+ * account referenced by @a acc.
+ */
+ void setAccountOnlineParameters(const MyMoneyAccount& acc, const MyMoneyKeyValueContainer& kvps);
+
+ KURL selectFile(const QString& title, const QString& path, const QString& mask, KFile::Mode mode);
+
+ const MyMoneyAccount& findAccount(const MyMoneyAccount& acc, const MyMoneyAccount& parent) const;
+
+ void createAccount(MyMoneyAccount& newAccount, MyMoneyAccount& parentAccount, MyMoneyAccount& brokerageAccount, MyMoneyMoney openingBal);
+
+k_dcop:
+ // Note: Don't use e.g. filename(void) but use filename() because
+ // otherwise the kidl compiler produces uncompilable results.
+ const QString filename() const;
+
+ void webConnect(const QString&, const QCString& asn_id);
+
+ /**
+ * Checks if the file with the @a url already exists. If so,
+ * the user is asked if he/she wants to override the file.
+ * If the user's answer is negative, @p false will be returned.
+ * @p true will be returned in all other cases.
+ */
+ bool okToWriteFile(const KURL& url);
+
+ // QValueList<MyMoneyAccount> accountList() const;
+
+protected:
+ /** save general Options like all bar positions and status as well as the geometry and the recent file list to the configuration
+ * file
+ */
+ void saveOptions(void);
+
+ /**
+ * Creates the interfaces necessary for the plugins to work. Therefore,
+ * this method must be called prior to loadPlugins().
+ */
+ void createInterfaces(void);
+
+ /**
+ * load all available plugins. Make sure you have called createInterfaces()
+ * before you call this one.
+ */
+ void loadPlugins(void);
+
+ /** read general Options again and initialize all variables like the recent file list
+ */
+ void readOptions(void);
+
+ /** initializes the KActions of the application */
+ void initActions(void);
+
+ /** initializes the dynamic menus (account selectors) */
+ void initDynamicMenus(void);
+
+ /** sets up the statusbar for the main window by initialzing a statuslabel.
+ */
+ void initStatusBar(void);
+
+ /** queryClose is called by KTMainWindow on each closeEvent of a window. Against the
+ * default implementation (only returns true), this calles saveModified() on the document object to ask if the document shall
+ * be saved if Modified; on cancel the closeEvent is rejected.
+ * @see KTMainWindow#queryClose
+ * @see KTMainWindow#closeEvent
+ */
+ virtual bool queryClose(void);
+
+ /** queryExit is called by KTMainWindow when the last window of the application is going to be closed during the closeEvent().
+ * Against the default implementation that just returns true, this calls saveOptions() to save the settings of the last window's
+ * properties.
+ * @see KTMainWindow#queryExit
+ * @see KTMainWindow#closeEvent
+ */
+ virtual bool queryExit(void);
+
+ void slotCheckSchedules(void);
+
+ virtual void resizeEvent(QResizeEvent*);
+
+ void createSchedule(MyMoneySchedule newSchedule, MyMoneyAccount& newAccount);
+
+ /**
+ * This method checks, if an account can be closed or not. An account
+ * can be closed if:
+ *
+ * - the balance is zero and
+ * - all children are already closed and
+ * - there is no unfinished schedule referencing the account
+ *
+ * @param acc reference to MyMoneyAccount object in question
+ * @retval true account can be closed
+ * @retval false account cannot be closed
+ */
+ bool canCloseAccount(const MyMoneyAccount& acc) const;
+
+ /**
+ * Check if a list contains a payee with a given id
+ *
+ * @param list const reference to value list
+ * @param id const reference to id
+ *
+ * @retval true object has been found
+ * @retval false object is not in list
+ */
+ bool payeeInList(const QValueList<MyMoneyPayee>& list, const QString& id) const;
+
+ /**
+ * Mark the selected transactions as provided by @a flag. If
+ * flag is @a MyMoneySplit::Unknown, the future state depends
+ * on the current stat of the split's flag accoring to the
+ * following table:
+ *
+ * - NotReconciled --> Cleared
+ * - Cleared --> Reconciled
+ * - Reconciled --> NotReconciled
+ */
+ void markTransaction(MyMoneySplit::reconcileFlagE flag);
+
+ /**
+ * This method allows to enter the next scheduled transaction of
+ * the given schedule @a s. In case @a extendedKeys is @a true,
+ * the given schedule can also be skipped or ignored.
+ * If @a autoEnter is @a true and the schedule does not contain
+ * an estimated value, the schedule is entered as is without further
+ * interaction with the user. In all other cases, the user will
+ * be presented a dialog and allowed to adjust the values for this
+ * instance of the schedule.
+ *
+ * The transaction will be created and entered into the ledger
+ * and the schedule updated.
+ */
+ KMyMoneyUtils::EnterScheduleResultCodeE enterSchedule(MyMoneySchedule& s, bool autoEnter = false, bool extendedKeys = false);
+
+ /**
+ * Creates a new institution entry in the MyMoneyFile engine
+ *
+ * @param institution MyMoneyInstitution object containing the data of
+ * the institution to be created.
+ */
+ void createInstitution(MyMoneyInstitution& institution);
+
+ /**
+ * This method unmatches the currently selected transactions
+ */
+ void transactionUnmatch(void);
+
+ /**
+ * This method matches the currently selected transactions
+ */
+ void transactionMatch(void);
+
+public slots:
+ void slotFileInfoDialog(void);
+
+ /** */
+ void slotFileNew(void);
+
+ /** Open a new window */
+ void slotFileNewWindow(void);
+
+ /** open a file and load it into the document*/
+ void slotFileOpen(void);
+
+ /** opens a file from the recent files menu */
+
+ void slotFileOpenRecent(const KURL& url);
+
+ /** open a SQL database */
+ void slotOpenDatabase(void);
+
+ /**
+ * saves the current document. If it has no name yet, the user
+ * will be queried for it.
+ *
+ * @retval false save operation failed
+ * @retval true save operation was successful
+ */
+ bool slotFileSave(void);
+
+ /**
+ * ask the user for the filename and save the current document
+ *
+ * @retval false save operation failed
+ * @retval true save operation was successful
+ */
+ bool slotFileSaveAs(void);
+
+ /**
+ * ask the user to select a database and save the current document
+ *
+ * @retval false save operation failed
+ * @retval true save operation was successful
+ */
+ bool slotSaveAsDatabase(void);
+
+ /** asks for saving if the file is modified, then closes the actual file and window */
+ void slotFileCloseWindow(void);
+
+ /** asks for saving if the file is modified, then closes the actual file */
+ void slotFileClose(void);
+
+ /**
+ * closes all open windows by calling close() on each memberList item
+ * until the list is empty, then quits the application.
+ * If queryClose() returns false because the user canceled the
+ * saveModified() dialog, the closing breaks.
+ */
+ void slotFileQuit(void);
+
+ void slotFileConsitencyCheck(void);
+
+ /**
+ * fires up the price table editor
+ */
+ void slotPriceDialog(void);
+
+ /**
+ * fires up the currency table editor
+ */
+ void slotCurrencyDialog(void);
+
+ /**
+ * Toggles the hide reconciled transactions setting
+ */
+ void slotHideReconciledTransactions(void);
+
+ /**
+ * Toggles the hide unused categories setting
+ */
+ void slotHideUnusedCategories(void);
+
+ /**
+ * Toggles the show all accounts setting
+ */
+ void slotShowAllAccounts(void);
+
+
+ /**
+ * changes the statusbar contents for the standard label permanently,
+ * used to indicate current actions. Returns the previous value for
+ * 'stacked' usage.
+ *
+ * @param text the text that is displayed in the statusbar
+ */
+ const QString slotStatusMsg(const QString &text);
+
+ /**
+ * This method changes the progress bar in the status line according
+ * to the parameters @p current and @p total. The following special
+ * cases exist:
+ *
+ * - current = -1 and total = -1 will reset the progress bar
+ * - current = ?? and total != 0 will setup the 100% mark to @p total
+ * - current = xx and total == 0 will set the percentage
+ *
+ * @param current the current value with respect to the initialised
+ * 100% mark
+ * @param total the total value (100%)
+ */
+ void slotStatusProgressBar(int current, int total = 0);
+
+ /** No descriptions */
+ void slotProcessExited(void);
+
+ /**
+ * Called to update stock and currency prices from the user menu
+ */
+ void slotEquityPriceUpdate(void);
+
+ /**
+ * Imports a KMM statement into the engine, triggering the appropriate
+ * UI to handle account matching, payee creation, and someday
+ * payee and transaction matching.
+ */
+ bool slotStatementImport(const MyMoneyStatement& s);
+
+ /**
+ * Essentially similiar to the above slot, except this will load the file
+ * from disk first, given the URL.
+ */
+ bool slotStatementImport(const QString& url);
+
+ /**
+ * This slot starts the reconciliation of the currently selected account
+ */
+ void slotAccountReconcileStart(void);
+
+ /**
+ * This slot finishes a previously started reconciliation
+ */
+ void slotAccountReconcileFinish(void);
+
+ /**
+ * This slot postpones a previously started reconciliations
+ */
+ void slotAccountReconcilePostpone(void);
+
+ /**
+ * This slot deletes the currently selected account if possible
+ */
+ void slotAccountDelete(void);
+
+ /**
+ * This slot opens the account editor to edit the currently
+ * selected account if possible
+ */
+ void slotAccountEdit(void);
+
+ /**
+ * This slot opens the selected account in the ledger view
+ */
+ void slotAccountOpen(const MyMoneyObject& = MyMoneyAccount());
+
+ /**
+ * This slot closes the currently selected account if possible
+ */
+ void slotAccountClose(void);
+
+ /**
+ * This slot re-openes the currently selected account if possible
+ */
+ void slotAccountReopen(void);
+
+ /**
+ * This slot reparents account @p src to be a child of account @p dest
+ *
+ * @param src account to be reparented
+ * @param dest new parent
+ */
+ void slotReparentAccount(const MyMoneyAccount& src, const MyMoneyAccount& dest);
+
+ /**
+ * This slot reparents account @p src to be a held at institution @p dest
+ *
+ * @param src account to be reparented
+ * @param dest new parent institution
+ */
+ void slotReparentAccount(const MyMoneyAccount& src, const MyMoneyInstitution& dest);
+
+ /**
+ * This slot creates a transaction report for the selected account
+ * and opens it in the reports view.
+ */
+ void slotAccountTransactionReport(void);
+
+ /**
+ * This slot opens the account options menu at the current cursor
+ * position.
+ */
+ void slotShowAccountContextMenu(const MyMoneyObject&);
+
+ /**
+ * This slot opens the schedule options menu at the current cursor
+ * position.
+ */
+ void slotShowScheduleContextMenu(void);
+
+ /**
+ * This slot opens the institution options menu at the current cursor
+ * position.
+ */
+ void slotShowInstitutionContextMenu(const MyMoneyObject&);
+
+ /**
+ * This slot opens the investment options menu at the current cursor
+ * position.
+ */
+ void slotShowInvestmentContextMenu(void);
+
+ /**
+ * This slot opens the payee options menu at the current cursor
+ * position.
+ */
+ void slotShowPayeeContextMenu(void);
+
+ /**
+ * This slot opens the budget options menu at the current cursor
+ * position.
+ */
+ void slotShowBudgetContextMenu(void);
+
+ /**
+ * This slot opens the transaction options menu at the current cursor
+ * position.
+ */
+ void slotShowTransactionContextMenu(void);
+
+ /**
+ * This slot opens the currency options menu at the current cursor
+ * position.
+ */
+ void slotShowCurrencyContextMenu(void);
+
+ /**
+ * This slot collects information for a new scheduled transaction
+ * and saves it in the engine. @sa slotScheduleNew(const MyMoneyTransaction&)
+ */
+ void slotScheduleNew(void);
+
+ /**
+ * This slot allows to edit information the currently selected schedule
+ */
+ void slotScheduleEdit(void);
+
+ /**
+ * This slot allows to delete the currently selected schedule
+ */
+ void slotScheduleDelete(void);
+
+ /**
+ * This slot allows to enter the next scheduled transaction of
+ * the currently selected schedule
+ */
+ void slotScheduleEnter(void);
+
+ /**
+ * This slot allows to skip the next scheduled transaction of
+ * the currently selected schedule
+ */
+ void slotScheduleSkip(void);
+
+ /**
+ * This slot fires up the KCalc application
+ */
+ void slotToolsStartKCalc(void);
+
+ void slotResetSelections(void);
+
+ void slotSelectAccount(const MyMoneyObject& account = MyMoneyAccount());
+
+ void slotSelectInstitution(const MyMoneyObject& institution = MyMoneyInstitution());
+
+ void slotSelectInvestment(const MyMoneyObject& account = MyMoneyAccount());
+
+ void slotSelectSchedule(const MyMoneySchedule& schedule = MyMoneySchedule());
+
+ void slotSelectPayees(const QValueList<MyMoneyPayee>& list);
+
+ void slotSelectBudget(const QValueList<MyMoneyBudget>& list);
+
+ void slotSelectTransactions(const KMyMoneyRegister::SelectedTransactions& list);
+
+ void slotSelectCurrency(const MyMoneySecurity& currency = MyMoneySecurity());
+
+ void slotTransactionMatch(void);
+
+ /**
+ * Brings up the new account wizard and saves the information.
+ */
+ void slotAccountNew(void);
+ void slotAccountNew(MyMoneyAccount&);
+
+ /**
+ * Brings up the new category editor and saves the information.
+ */
+ void slotCategoryNew(void);
+
+ /**
+ * Brings up the new category editor and saves the information.
+ * The dialog will be preset with the name and parent account.
+ *
+ * @param account reference of category to be created. The @p name member
+ * should be filled by the caller. The object will be filled
+ * with additional information during the creation process
+ * esp. the @p id member.
+ * @param parent reference to parent account (defaults to none)
+ */
+ void slotCategoryNew(MyMoneyAccount& account, const MyMoneyAccount& parent = MyMoneyAccount());
+
+ /**
+ * This method updates all KAction items to the current state.
+ */
+ void slotUpdateActions(void);
+
+ /**
+ * Brings up the input dialog and saves the information.
+ */
+ void slotInstitutionNew(void);
+
+ /**
+ * Brings up the input dialog and saves the information. If
+ * the institution has been created, the @a id member is filled,
+ * otherwise it is empty.
+ *
+ * @param institution reference to data to be used to create the
+ * institution. id member will be updated.
+ */
+ void slotInstitutionNew(MyMoneyInstitution& institution);
+
+ /**
+ * Called whenever a plugin is plugged in
+ */
+ void slotPluginPlug(KPluginInfo*);
+
+ /**
+ * Called whenever a plugin is unplugged
+ */
+ void slotPluginUnplug(KPluginInfo*);
+
+private:
+ // bool verifyImportedData(const MyMoneyAccount& account);
+
+ /**
+ * Load the status bar with the 'ready' message. This is hold in a single
+ * place, so that is consistent with isReady().
+ */
+ void ready(void);
+
+ /**
+ * Check if the status bar contains the 'ready' message. The return
+ * value is used e.g. to detect if a quit operation is allowed or not.
+ *
+ * @retval true application is idle
+ * @retval false application is active working on a longer operation
+ */
+ bool isReady(void);
+
+ /**
+ * Delete a possibly existing transaction editor but make sure to remove
+ * any reference to it so that we avoid using a half-dead object
+ */
+ void deleteTransactionEditor(void);
+
+ /**
+ * delete all selected transactions w/o further questions
+ */
+ void doDeleteTransactions(void);
+
+ /**
+ * Exchanges all references in transaction @a _t to account @a fromId
+ * into references to account @a toId. Returns @a true if at least
+ * one split has been changed, @a false otherwise.
+ */
+ bool exchangeAccountInTransaction(MyMoneyTransaction& _t, const QString& fromId, const QString& toId);
+
+signals:
+ /**
+ * This signal is emitted when a new file is loaded. In the case file
+ * is closed, this signal is also emitted with an empty url.
+ */
+ void fileLoaded(const KURL& url);
+
+ /**
+ * This signal is emitted when a payee/list of payees has been selected by
+ * the GUI. If no payee is selected or the selection is removed,
+ * @p payees is identical to an empty QValueList. This signal is used
+ * by plugins to get information about changes.
+ */
+ void payeesSelected(const QValueList<MyMoneyPayee>& payees);
+
+ /**
+ * This signal is emitted when a transaction/list of transactions has been selected by
+ * the GUI. If no transaction is selected or the selection is removed,
+ * @p transactions is identical to an empty QValueList. This signal is used
+ * by plugins to get information about changes.
+ */
+ void transactionsSelected(const KMyMoneyRegister::SelectedTransactions& transactions);
+
+ /**
+ * This signal is sent out, when the user presses Ctrl+A or activates
+ * the Select all transactions action.
+ */
+ void selectAllTransactions(void);
+
+ /**
+ * This signal is emitted when a list of budgets has been selected by
+ * the GUI. If no budget is selected or the selection is removed,
+ * @a budget is identical to an empty QValueList. This signal is used
+ * by plugins to get information about changes.
+ */
+ void budgetSelected(const QValueList<MyMoneyBudget>& budget);
+ void budgetRename(void);
+
+ /**
+ * This signal is emitted when a new account has been selected by
+ * the GUI. If no account is selected or the selection is removed,
+ * @a account is identical to MyMoneyAccount(). This signal is used
+ * by plugins to get information about changes.
+ */
+ void accountSelected(const MyMoneyAccount& account);
+ void investmentSelected(const MyMoneyAccount& account);
+
+ /**
+ * This signal is emitted when a new institution has been selected by
+ * the GUI. If no institution is selected or the selection is removed,
+ * @a institution is identical to MyMoneyInstitution(). This signal is used
+ * by plugins to get information about changes.
+ */
+ void institutionSelected(const MyMoneyInstitution& institution);
+
+ /**
+ * This signal is emitted when a new schedule has been selected by
+ * the GUI. If no schedule is selected or the selection is removed,
+ * @a schedule is identical to MyMoneySchedule(). This signal is used
+ * by plugins to get information about changes.
+ */
+ void scheduleSelected(const MyMoneySchedule& schedule);
+
+ /**
+ * This signal is emitted when a new currency has been selected by
+ * the GUI. If no currency is selected or the selection is removed,
+ * @a currency is identical to MyMoneySecurity(). This signal is used
+ * by plugins to get information about changes.
+ */
+ void currencySelected(const MyMoneySecurity& currency);
+
+ void payeeRename(void);
+ void payeeCreated(const QString& id);
+
+ void currencyRename(void);
+ void currencyCreated(const QString& id);
+
+ void startMatchTransaction(const MyMoneyTransaction& t);
+ void cancelMatchTransaction(void);
+
+ /**
+ * This signal is emitted when an account has been successfully reconciled
+ * and all transactions are updated in the engine. It can be used by plugins
+ * to create reconciliation reports.
+ *
+ * @param account the account data
+ * @param date the reconciliation date as provided through the dialog
+ * @param startingBalance the starting balance as provided through the dialog
+ * @param endingBalance the ending balance as provided through the dialog
+ * @param transactionList reference to QValueList of QPair containing all
+ * transaction/split pairs processed by the reconciliation.
+ */
+ void accountReconciled(const MyMoneyAccount& account, const QDate& date, const MyMoneyMoney& startingBalance, const MyMoneyMoney& endingBalance, const QValueList<QPair<MyMoneyTransaction, MyMoneySplit> >& transactionList);
+
+public:
+ /**
+ * This method retrieves a pointer to a KAction object from actionCollection().
+ * If the action with the name @p actionName is not found, a pointer to
+ * a static non-configured KAction object is returned and a warning is
+ * printed to stderr.
+ *
+ * @param actionName name of the action to be retrieved
+ * @return pointer to KAction object (or derivative)
+ */
+ KAction* action(const QString& actionName) const;
+
+ /**
+ * This method is implemented for convenience. It returns a dynamic_cast-ed
+ * pointer to an action found in actionCollection().
+ * If the action with the name @p actionName is not found or the object
+ * is not of type KToggleAction, a pointer to a static non-configured
+ * KToggleAction object is returned and a warning is printed to stderr.
+ */
+ KToggleAction* toggleAction(const QString& actionName) const;
+
+
+private:
+ /// \internal d-pointer class.
+ class Private;
+ /*
+ * Actually, one should write "Private * const d" but that confuses the KIDL
+ * compiler in this context. It complains about the const keyword. So we leave
+ * it out here
+ */
+ /// \internal d-pointer instance.
+ Private* d;
+
+ /** the configuration object of the application */
+ KConfig *config;
+
+ QMap<QString,KMyMoneyPlugin::ImporterPlugin*> m_importerPlugins;
+
+ QMap<QString, KMyMoneyPlugin::OnlinePlugin*> m_onlinePlugins;
+
+ enum backupStateE {
+ BACKUP_IDLE = 0,
+ BACKUP_MOUNTING,
+ BACKUP_COPYING,
+ BACKUP_UNMOUNTING
+ };
+ /**
+ * The following variable represents the state while crafting a backup.
+ * It can have the following values
+ *
+ * - IDLE: the default value if not performing a backup
+ * - MOUNTING: when a mount command has been issued
+ * - COPYING: when a copy command has been issued
+ * - UNMOUNTING: when an unmount command has been issued
+ */
+ backupStateE m_backupState;
+
+ /**
+ * This variable keeps the result of the backup operation.
+ */
+ int m_backupResult;
+
+ /**
+ * This variable is set, when the user selected to mount/unmount
+ * the backup volume.
+ */
+ bool m_backupMount;
+
+ KProcess proc;
+
+ /// A pointer to the view holding the tabs.
+ KMyMoneyView *myMoneyView;
+
+ /// The URL of the file currently being edited when open.
+ KURL m_fileName;
+
+ bool m_startDialog;
+ QString m_mountpoint;
+
+ KProgress* progressBar;
+
+ QString m_statusMsg;
+
+ int m_progressUpdate;
+ int m_nextUpdate;
+
+ MyMoneyQifReader* m_qifReader;
+ MyMoneyStatementReader* m_smtReader;
+ KFindTransactionDlg* m_searchDlg;
+
+ bool m_bCheckSchedules;
+
+ KToolBarPopupAction* m_previousViewButton;
+ KToolBarPopupAction* m_nextViewButton;
+
+ QObject* m_pluginInterface;
+
+ MyMoneyAccount m_selectedAccount;
+ MyMoneyAccount m_reconciliationAccount;
+ MyMoneyAccount m_selectedInvestment;
+ MyMoneyInstitution m_selectedInstitution;
+ MyMoneySchedule m_selectedSchedule;
+ MyMoneySecurity m_selectedCurrency;
+ QValueList<MyMoneyPayee> m_selectedPayees;
+ QValueList<MyMoneyBudget> m_selectedBudgets;
+ KMyMoneyRegister::SelectedTransactions m_selectedTransactions;
+
+ // This is Auto Saving related
+ bool m_autoSaveEnabled;
+ QTimer* m_autoSaveTimer;
+ int m_autoSavePeriod;
+ bool m_inAutoSaving;
+
+ // Pointer to the combo box used for key selection during
+ // File/Save as
+ KComboBox* m_saveEncrypted;
+
+ // pointer to the current transaction editor
+ TransactionEditor* m_transactionEditor;
+
+ // Reconciliation dialog
+ KEndingBalanceDlg* m_endingBalanceDlg;
+
+ // id's that need to be remembered
+ QString m_accountGoto, m_payeeGoto;
+
+ QStringList m_additionalGpgKeys;
+ QLabel* m_additionalKeyLabel;
+ KPushButton* m_additionalKeyButton;
+};
+
+extern KMyMoney2App *kmymoney2;
+
+class KMStatus
+{
+public:
+ KMStatus (const QString &text);
+ ~KMStatus();
+private:
+ QString m_prevText;
+};
+
+#define KMSTATUS(msg) KMStatus _thisStatus(msg)
+
+#endif // KMYMONEY2_H
diff --git a/kmymoney2/kmymoney2.kcfg b/kmymoney2/kmymoney2.kcfg
new file mode 100644
index 0000000..c6f53f3
--- /dev/null
+++ b/kmymoney2/kmymoney2.kcfg
@@ -0,0 +1,381 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE kcfg SYSTEM "http://www.kde.org/standards/kcfg/1.0/kcfg.dtd">
+<kcfg>
+ <kcfgfile name="kmymoney2rc" />
+ <group name="General Options">
+ <entry name="AlwaysShowNrField" type="Bool">
+ <label>Always show a No. field in transaction form</label>
+ <default>false</default>
+ </entry>
+ <entry name="AutoFillTransaction" type="Int">
+ <label>Auto fill with previous transaction data</label>
+ <default>1</default>
+ </entry>
+ <entry name="AutoReusePayee" type="Bool">
+ <label>Prefill payee with previous used value</label>
+ <default>true</default>
+ </entry>
+ <entry name="AutoFillDifference" type="Int">
+ <label>Treat two transactions as identical, if amount differs less than</label>
+ <default>10</default>
+ </entry>
+ <entry name="AutoIncCheckNumber" type="Bool">
+ <label>Auto increment check number</label>
+ <default>true</default>
+ </entry>
+ <entry name="AutoSaveFile" type="Bool">
+ <label>Autosave file periodically</label>
+ <default>false</default>
+ </entry>
+ <entry name="AutoSavePeriod" type="Int">
+ <label>Autosave interval in minutes</label>
+ <default>10</default>
+ <min>0</min>
+ <max>60</max>
+ </entry>
+ <entry name="CheckSchedule" type="Bool">
+ <label>Check schedules upon startup</label>
+ <default>false</default>
+ </entry>
+ <entry name="CheckSchedulePreview" type="Int">
+ <label>Enter transactions this number of days in advance</label>
+ <default>0</default>
+ <min>0</min>
+ <max>999</max>
+ </entry>
+ <entry name="ExternalCalculator" type="String">
+ <label>Name of external calculator program</label>
+ <default>kcalc</default>
+ </entry>
+ <entry name="SchedulePreview" type="Int">
+ <label>Number of days to preview schedules in ledger</label>
+ <default>0</default>
+ <min>0</min>
+ <max>999</max>
+ </entry>
+ <entry name="CopyTypeToNr" type="Bool">
+ <label>Insert transaction type into No. field for new transactions</label>
+ <default>false</default>
+ </entry>
+ <entry name="FocusChangeIsEnter" type="Bool">
+ <label>Keep changes when selecting a different transaction/split</label>
+ <default>false</default>
+ </entry>
+ <entry name="EnterMovesBetweenFields" type="Bool">
+ <label>Using the Enter key moves between the fields</label>
+ <default>false</default>
+ </entry>
+ <entry name="LedgerLens" type="Bool">
+ <label>Use the ledger lens</label>
+ <default>false</default>
+ </entry>
+ <entry name="PricePrecision" type="Int">
+ <label>Price Precision</label>
+ <default>4</default>
+ <min>4</min>
+ <max>10</max>
+ </entry>
+ <entry name="PriceHistoryUpdate" type="Bool">
+ <label>Update price history</label>
+ <default>true</default>
+ </entry>
+ <entry name="TransactionForm" type="Bool">
+ <label>Show transaction form</label>
+ <default>true</default>
+ </entry>
+ <entry name="StartLastViewSelected" type="Int">
+ <label>Start with last selected view or homepage</label>
+ <default>0</default>
+ </entry>
+ <entry name="WriteDataEncrypted" type="Bool">
+ <label>Use GPG to encrypt data file</label>
+ <default>false</default>
+ </entry>
+ <entry name="EncryptRecover" type="Bool">
+ <label>Also encrypt against recover key</label>
+ <default>false</default>
+ </entry>
+ <entry name="GpgRecipient" type="String">
+ <label>GPG User ID (deprecated)</label>
+ </entry>
+ <entry name="GpgRecipientList" type="StringList">
+ <label>GPG User ID</label>
+ </entry>
+ <entry name="ExpertMode" type="Bool">
+ <label>Run in expert (accountant) mode</label>
+ <default>false</default>
+ </entry>
+ <entry name="ShowSplash" type="Bool">
+ <label>Show splash screen during startup</label>
+ <default>true</default>
+ </entry>
+ <entry name="syncLedgerInvestment" type="Bool">
+ <label>Synchronize account in ledger and investment view</label>
+ <default>true</default>
+ </entry>
+ <entry name="iconSize" type="Int">
+ <label>Icon size for view selection</label>
+ <default>2</default>
+ </entry>
+ <entry name="hiddenViews" type="String">
+ <label>list of hidden views</label>
+ <default/>
+ </entry>
+ <entry name="firstTimeRun" type="Bool">
+ <label>Firsttime switch to start new user wizard</label>
+ <default>true</default>
+ </entry>
+ <entry name="showTitleBar" type="Bool">
+ <label>Show title bar on each view</label>
+ <default>true</default>
+ </entry>
+ <entry name="stringMatchFromStart" type="Bool">
+ <label>Start string matches for e.g. payees at start of string</label>
+ <default>false</default>
+ </entry>
+ <entry name="stdTransactionFormTabOrder" type="String">
+ <label>Tab order of edit widgets in transaction form</label>
+ <default>account,cashflow,payee,category,memo,number,date,amount,state</default>
+ </entry>
+ <entry name="stdTransactionRegisterTabOrder" type="String">
+ <label>Tab order of edit widgets in register</label>
+ <default>number,date,payee,category,memo,payment,deposit,state</default>
+ </entry>
+ </group>
+ <group name="Homepage Options">
+ <entry name="ItemList" type="String">
+ <label>Order of items on homepage</label>
+ <default>8,1,2,3,4,5,6,7,-9,10</default>
+ </entry>
+ <entry name="FontSizePercentage" type="Int">
+ <label>Percentage of default font size used for home view HTML page</label>
+ <default>100</default>
+ </entry>
+ <entry name="RememberFontSize" type="Bool">
+ <label>Remember (manually adjusted) font size in home view on program end.</label>
+ <default>true</default>
+ </entry>
+ <entry name="ShowLimitInfo" type="Bool">
+ <label>Show account limit information on the Homepage</label>
+ <default>true</default>
+ </entry>
+ </group>
+ <group name="Investment Settings">
+ </group>
+ <group name="List Options">
+ <entry name="HideUnusedCategory" type="Bool">
+ <label>Hide unused categories</label>
+ <default>false</default>
+ </entry>
+ <entry name="HideClosedAccounts" type="Bool">
+ <label>Hide closed accounts</label>
+ <default>false</default>
+ </entry>
+ <entry name="HideFinishedSchedules" type="Bool">
+ <label>Hide finished schedules</label>
+ <default>false</default>
+ </entry>
+ <entry name="HideReconciledTransactions" type="Bool">
+ <label>Hide reconciled transactions</label>
+ <default>false</default>
+ </entry>
+ <entry name="ShowRegisterDetailed" type="Bool">
+ <label>Show all register entries in full detail</label>
+ <default>false</default>
+ </entry>
+ <entry name="ShowGrid" type="Bool">
+ <label>Show a grid in the register</label>
+ <default>true</default>
+ </entry>
+ <entry name="ShowFancyMarker" type="Bool">
+ <label>Show fancy group markers</label>
+ <default>true</default>
+ </entry>
+ <entry name="ShowFiscalMarker" type="Bool">
+ <label>Show fancy markers for previous and current fiscal year</label>
+ <default>true</default>
+ </entry>
+ <entry name="FiscalYearBegin" type="Int">
+ <label>Starting month of the fiscal year</label>
+ <default>0</default>
+ <min>0</min>
+ <max>11</max>
+ </entry>
+ <entry name="FiscalYearBeginDay" type="Int">
+ <label>Starting day of the fiscal year</label>
+ <default>1</default>
+ <min>1</min>
+ <max>28</max>
+ </entry>
+ <entry name="StartDate" type="DateTime">
+ <label>Start date</label>
+ <default>QDateTime::fromString("1900-01-01T00:00:00", Qt::ISODate)</default>
+ </entry>
+ <entry name="useSystemColors" type="Bool">
+ <label>Use system colors</label>
+ <default>false</default>
+ </entry>
+ <entry name="listColor" type="Color">
+ <label>List color</label>
+ <default>240,240,240</default>
+ </entry>
+ <entry name="listBGColor" type="Color">
+ <label>List background color</label>
+ <default>255,255,255</default>
+ </entry>
+ <entry name="listGridColor" type="Color">
+ <label>List grid color</label>
+ <default>154,154,154</default>
+ </entry>
+ <entry name="importedTransactionColor" type="Color">
+ <label>Background color for imported transactions</label>
+ <default>255,255,0</default>
+ </entry>
+ <entry name="matchedTransactionColor" type="Color">
+ <label>Background color for matched transactions</label>
+ <default>152,251,152</default>
+ </entry>
+ <entry name="listErronousTransactionColor" type="Color">
+ <label>List color for erronous transactions</label>
+ <default>255,0,0</default>
+ </entry>
+ <entry name="listMissingConversionRate" type="Color">
+ <label>List color for missing conversion rate</label>
+ <default>0,0,255</default>
+ </entry>
+ <entry name="listNegativeValueColor" type="Color">
+ <label>List color for negative values</label>
+ <default>255,0,0</default>
+ </entry>
+ <entry name="groupMarkerColor" type="Color">
+ <label>Background color for group marker</label>
+ <default>255,242,155</default>
+ </entry>
+ <entry name="requiredFieldColor" type="Color">
+ <label>Background color for required fields</label>
+ <default>255,255,221</default>
+ </entry>
+ <entry name="useSystemFont" type="Bool">
+ <label>Use system font</label>
+ <default>false</default>
+ </entry>
+ <entry name="listCellFont" type="Font">
+ <label>Cell font</label>
+ </entry>
+ <entry name="listHeaderFont" type="Font">
+ <label>Header font</label>
+ </entry>
+ <entry name="sortNormalView" type="String">
+ <label>Sort order of register in normal view</label>
+ <default>1,-9,-4</default>
+ </entry>
+ <entry name="sortReconcileView" type="String">
+ <label>Sort order of register in normal view</label>
+ <default>1,-4</default>
+ </entry>
+ <entry name="sortSearchView" type="String">
+ <label>Sort order of register in search dialog</label>
+ <default>1,-9,-4</default>
+ </entry>
+ <entry name="defaultReconciliationState" type="Int">
+ <label>Default reconciliation state for transactions entered during reconciliation</label>
+ <default>0</default>
+ </entry>
+ </group>
+ <group name="Import options">
+ <entry name="matchInterval" type="Int">
+ <label>Number of days (plus/minus) to search for matching transactions</label>
+ <default>4</default>
+ </entry>
+ <entry name="askForPayeeCategory" type="Bool">
+ <label>During import, ask for a new payee's default category</label>
+ <default>false</default>
+ </entry>
+ </group>
+ <group name="Schedule Options">
+ </group>
+ <group name="Forecast Options">
+ <entry name="forecastMethod" type="Int">
+ <label>Method to calculate forecast</label>
+ <default>0</default>
+ </entry>
+ <entry name="forecastDays" type="Int">
+ <label>Days to forecast</label>
+ <default>90</default>
+ <min>1</min>
+ <max>999</max>
+ </entry>
+ <entry name="forecastAccountCycle" type="Int">
+ <label>Days of normal account cycle</label>
+ <default>30</default>
+ <min>1</min>
+ <max>999</max>
+ </entry>
+ <entry name="forecastCycles" type="Int">
+ <label>Number of historic cycles to use in forecast</label>
+ <default>3</default>
+ <min>1</min>
+ <max>999</max>
+ </entry>
+ <entry name="beginForecastDay" type="Int">
+ <label>Day of month to start forecast</label>
+ <default>0</default>
+ <min>0</min>
+ <max>31</max>
+ </entry>
+ <entry name="historyMethod" type="Int">
+ <label>Method to calculate history-based forecast</label>
+ <default>1</default>
+ </entry>
+ <entry name="skipOpeningDate" type="Bool">
+ <label>Skip opening date when fetching transactions</label>
+ <default>true</default>
+ </entry>
+ <entry name="includeFutureTransactions" type="Bool">
+ <label>Include future transaction when using Schedule Forecast</label>
+ <default>true</default>
+ </entry>
+ <entry name="includeScheduledTransactions" type="Bool">
+ <label>Include scheduled transactions when using Schedule Forecast</label>
+ <default>true</default>
+ </entry>
+ </group>
+ <group name="QIF Options">
+ <entry name="qifCash" type="String">
+ <label>additional names for cash account</label>
+ <default>Bar</default>
+ </entry>
+ <entry name="qifBank" type="String">
+ <label>additional names for checking account</label>
+ <default>Banca,Banque</default>
+ </entry>
+ <entry name="qifCreditCard" type="String">
+ <label>additional names for credit card account</label>
+ <default>Kreditkarte</default>
+ </entry>
+ <entry name="qifAsset" type="String">
+ <label>additional names for asset account</label>
+ <default>And. Kto.</default>
+ </entry>
+ <entry name="qifOpeningBalance" type="String">
+ <label>additional names for opening balance payee</label>
+ <default>Eröffnungssaldo</default>
+ </entry>
+ <entry name="qifInvoice" type="String">
+ <label>additional names for invoice accounts</label>
+ <default>Rechnung</default>
+ </entry>
+ </group>
+ <group name="Account View Settings">
+ <entry name="showAccountsExpanded" type="Bool">
+ <label>Show accounts view expanded when loaded</label>
+ <default>false</default>
+ </entry>
+ </group>
+</kcfg>
+<!--
+ <entry name="" type="">
+ <label>...</label>
+ <default>...</default>
+ </entry>
+-->
diff --git a/kmymoney2/kmymoney2ui.rc b/kmymoney2/kmymoney2ui.rc
new file mode 100644
index 0000000..c39a76d
--- /dev/null
+++ b/kmymoney2/kmymoney2ui.rc
@@ -0,0 +1,260 @@
+<!DOCTYPE kpartgui>
+<kpartgui version="38" name="kmymoney2" >
+ <MenuBar>
+ <Menu name="file" >
+ <Action append="open_merge" name="open_database" />
+ <Action append="save_merge" name="saveas_database" />
+ <Menu icon="fileimport" append="save_merge" name="import" >
+ <text>&amp;Import</text>
+ <Action name="file_import_qif" />
+ <Action name="file_import_gnc" />
+ <MergeLocal name="import_merge"/>
+ <Separator/>
+ <Action name="file_import_template" />
+ </Menu>
+ <Menu icon="fileexport" append="save_merge" name="export" >
+ <text>E&amp;xport</text>
+ <Action name="file_export_qif" />
+ <Separator/>
+ <Action name="file_export_template" />
+ </Menu>
+ <Action name="file_backup" />
+ <Separator/>
+ <Action icon="personal_data" name="view_personal_data" />
+ <Action name="view_file_info" />
+ <Action icon="info" name="file_dump" />
+ </Menu>
+ <Menu name="edit" >
+ <Action icon="transaction_find" name="edit_find_transaction" />
+ </Menu>
+ <Menu name="view" >
+ <Action name="view_show_transaction_detail" />
+ <Action name="view_hide_reconciled_transactions" />
+ <Action name="view_hide_unused_categories" />
+ <Action name="view_show_all_accounts" />
+ </Menu>
+ <Menu name="institution" >
+ <text>&amp;Institution</text>
+ <Action icon="institution_add" name="institution_new" />
+ <Action name="institution_edit" />
+ <Action name="institution_delete" />
+ </Menu>
+ <Menu name="account" >
+ <text>&amp;Account</text>
+ <Action icon="account_add" name="account_new" />
+ <Action name="account_edit" />
+ <Action name="account_delete" />
+ <Action name="account_open" />
+ <Separator/>
+ <Action name="account_reconcile" />
+ <Action name="account_reconcile_postpone" />
+ <Action name="account_reconcile_finish" />
+ <Separator/>
+ <Action name="account_transaction_report" />
+ <Separator/>
+ <Action name="account_close" />
+ <Action name="account_reopen" />
+ <Separator/>
+ <Action name="account_online_unmap" />
+ <Action name="account_online_map" />
+ <Action name="account_online_update" />
+ <Action name="account_online_update_all" />
+ </Menu>
+ <Menu name="category" >
+ <text>&amp;Category</text>
+ <Action name="category_new" />
+ <Action name="category_edit" />
+ <Action name="category_delete" />
+ <Action name="account_open" />
+ </Menu>
+ <Menu name="transaction" >
+ <text>&amp;Transaction</text>
+ <Action name="transaction_new" />
+ <Action name="transaction_edit" />
+ <Action name="transaction_editsplits" />
+ <Action name="transaction_delete" />
+ <Action name="transaction_duplicate" />
+ <Menu name="transaction_mark_menu">
+ <text>Mark transaction as...</text>
+ <title>Mark transaction</title>
+ <Action name="transaction_mark_notreconciled"/>
+ <Action name="transaction_mark_cleared"/>
+ <Action name="transaction_mark_reconciled"/>
+ </Menu>
+ <Separator />
+ <Action name="transaction_goto_account"/>
+ <Action name="transaction_goto_payee"/>
+ <Action name="transaction_create_schedule"/>
+ <Separator />
+ <Action name="transaction_match" />
+ <Action name="transaction_accept" />
+ <Separator />
+ <Action name="transaction_select_all" />
+ </Menu>
+ <Merge/>
+ <Menu name="kmmtools" >
+ <Text>T&amp;ools</Text>
+ <Action name="tools_qif_editor" />
+ <Action name="tools_security_editor" />
+ <Action name="tools_currency_editor" />
+ <Action name="tools_price_editor" />
+ <Action name="tools_update_prices" />
+ <Action name="tools_consistency_check" />
+ <Action name="tools_performancetest" />
+ <Separator/>
+ <Action name="tools_plugin_list" />
+ <Action name="debug_traces" />
+ <Action name="debug_timers" />
+ </Menu>
+ <Menu name="settings" >
+ <Action append="show_merge" name="settings_enable_messages" />
+ <Action append="show_merge" name="settings_language"/>
+ </Menu>
+ <Menu name="help" >
+ <Action name="show_tip" />
+ </Menu>
+ </MenuBar>
+ <Menu name="account_context_menu">
+ <title>Account options</title>
+ <Action name="account_new" />
+ <Action name="category_new" />
+ <Action name="account_open" />
+ <Action name="account_edit" />
+ <Action name="account_delete" />
+ <Separator/>
+ <Action name="account_reconcile" />
+ <Action name="account_reconcile_postpone" />
+ <Action name="account_reconcile_finish" />
+ <Separator/>
+ <Action name="account_transaction_report" />
+ <Separator/>
+ <Action name="account_close" />
+ <Action name="account_reopen" />
+ <Separator/>
+ <Action name="account_online_unmap" />
+ <Action name="account_online_map" />
+ <Action name="account_online_update" />
+ <Separator/>
+ <Action name="investment_new" />
+ <Action name="investment_edit" />
+ <Action name="investment_delete" />
+ <Action name="investment_online_price_update" />
+ <Action name="investment_manual_price_update" />
+ </Menu>
+ <Menu name="category_context_menu">
+ <title>Category options</title>
+ <Action name="category_new" />
+ <Action name="category_edit" />
+ <Action name="category_delete" />
+ <Action name="account_open" />
+ </Menu>
+ <Menu name="institution_context_menu">
+ <title>Institution options</title>
+ <Action name="institution_new" />
+ <Action name="institution_edit" />
+ <Action name="institution_delete" />
+ <Separator />
+ <Action name="account_new"/>
+ </Menu>
+ <Menu name="payee_context_menu">
+ <title>Payee options</title>
+ <Action name="payee_new" />
+ <Action name="payee_rename" />
+ <Action name="payee_delete" />
+ </Menu>
+ <Menu name="budget_context_menu">
+ <title>Budget options</title>
+ <Action name="budget_new" />
+ <Action name="budget_rename" />
+ <Action name="budget_change_year" />
+ <Action name="budget_delete" />
+ <Action name="budget_copy" />
+ <Action name="budget_forecast" />
+ </Menu>
+ <Menu name="investment_context_menu">
+ <title>Investment options</title>
+ <Action name="investment_new" />
+ <Action name="investment_edit" />
+ <Action name="investment_delete" />
+ <Action name="investment_online_price_update" />
+ <Action name="investment_manual_price_update" />
+ <Separator />
+ <Action name="tools_update_prices" />
+ <Separator />
+ <Action name="account_close" />
+ <Action name="account_reopen" />
+ </Menu>
+ <Menu name="schedule_context_menu">
+ <title>Scheduled transactions options</title>
+ <Action name="schedule_new" />
+ <Action name="schedule_edit" />
+ <Action name="schedule_delete" />
+ <Action name="schedule_duplicate" />
+ <Separator />
+ <Action name="schedule_enter" />
+ <Action name="schedule_skip" />
+ </Menu>
+ <Menu name="schedule_create_menu">
+ <Action name="schedule_new_bill" />
+ <Action name="schedule_new_deposit" />
+ <Action name="schedule_new_transfer" />
+ </Menu>
+ <Menu name="transaction_context_menu">
+ <title>Transaction options</title>
+ <Action name="transaction_new" />
+ <Action name="transaction_edit" />
+ <Action name="transaction_editsplits" />
+ <Action name="transaction_delete" />
+ <Action name="transaction_duplicate" />
+ <Menu name="transaction_move_menu">
+ <text>Move transaction to...</text>
+ <title>Select account</title>
+ <ActionList name="transaction_move" />
+ </Menu>
+ <Menu name="transaction_context_mark_menu">
+ <text>Mark transaction as...</text>
+ <title>Mark transaction</title>
+ <Action name="transaction_mark_notreconciled"/>
+ <Action name="transaction_mark_cleared"/>
+ <Action name="transaction_mark_reconciled"/>
+ </Menu>
+ <Separator />
+ <Action name="transaction_goto_account"/>
+ <Action name="transaction_goto_payee"/>
+ <Action name="transaction_create_schedule"/>
+ <Separator />
+ <Action name="transaction_match" />
+ <Action name="transaction_accept" />
+ </Menu>
+ <Menu name="currency_context_menu">
+ <title>Currency options</title>
+ <Action name="currency_new" />
+ <Action name="currency_rename" />
+ <Action name="currency_delete" />
+ <Action name="currency_setbase" />
+ </Menu>
+ <Menu name="account_online_menu">
+ <Action name="account_online_update" />
+ <Action name="account_online_update_all" />
+ </Menu>
+ <ToolBar noMerge="1" name="mainToolBar" fullWidth="true" >
+ <text>Main Toolbar</text>
+ <Action name="file_new" />
+ <Action name="file_open" />
+ <Action name="file_save" />
+ <Action name="file_print" />
+ <Separator lineSeparator="true"/>
+ <Action name="institution_new" />
+ <Action name="account_new" />
+ <Separator lineSeparator="true"/>
+ <Action name="account_open" />
+ <Action name="account_edit" />
+ <Action name="account_reconcile" />
+ <Action name="account_online_update_menu" />
+ <Action name="account_chart" />
+ <Separator lineSeparator="true"/>
+ <Action name="edit_find_transaction" />
+ <Separator />
+ <Action name="tools_kcalc" />
+ </ToolBar>
+</kpartgui>
diff --git a/kmymoney2/kmymoney_wizard.png b/kmymoney2/kmymoney_wizard.png
new file mode 100644
index 0000000..be61ab7
--- /dev/null
+++ b/kmymoney2/kmymoney_wizard.png
Binary files differ
diff --git a/kmymoney2/kmymoneyglobalsettings.cpp b/kmymoney2/kmymoneyglobalsettings.cpp
new file mode 100644
index 0000000..2dcd964
--- /dev/null
+++ b/kmymoney2/kmymoneyglobalsettings.cpp
@@ -0,0 +1,96 @@
+/***************************************************************************
+ kmymoneyglobalsettings.cpp
+ -------------------
+ copyright : (C) 2006 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qregexp.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kglobalsettings.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/kmymoneyglobalsettings.h>
+
+QFont KMyMoneyGlobalSettings::listCellFont(void)
+{
+ if(useSystemFont()) {
+ return KGlobalSettings::generalFont();
+ } else {
+ return KMyMoneySettings::listCellFont();
+ }
+}
+
+QFont KMyMoneyGlobalSettings::listHeaderFont(void)
+{
+ if(useSystemFont()) {
+ QFont font = KGlobalSettings::generalFont();
+ font.setBold(true);
+ return font;
+ } else {
+ return KMyMoneySettings::listHeaderFont();
+ }
+}
+
+QColor KMyMoneyGlobalSettings::listColor(void)
+{
+ if(useSystemColors())
+ return KGlobalSettings::baseColor();
+ else
+ return KMyMoneySettings::listColor();
+}
+
+QColor KMyMoneyGlobalSettings::listBGColor(void)
+{
+ if(useSystemColors())
+ return KGlobalSettings::alternateBackgroundColor();
+ else
+ return KMyMoneySettings::listBGColor();
+}
+
+QStringList KMyMoneyGlobalSettings::itemList(void)
+{
+ bool prevValue = self()->useDefaults(true);
+ QStringList all = QStringList::split(",", KMyMoneySettings::itemList());
+ self()->useDefaults(prevValue);
+ QStringList list = QStringList::split(",", KMyMoneySettings::itemList());
+
+ // now add all from 'all' that are missing in 'list'
+ QRegExp exp("-?(\\d+)");
+ QStringList::iterator it_s;
+ for(it_s = all.begin(); it_s != all.end(); ++it_s) {
+ exp.search(*it_s);
+ if(!list.contains(exp.cap(1)) && !list.contains(QString("-%1").arg(exp.cap(1)))) {
+ list << *it_s;
+ }
+ }
+ return list;
+}
+
+int KMyMoneyGlobalSettings::firstFiscalMonth(void)
+{
+ return KMyMoneySettings::fiscalYearBegin()+1;
+}
+
+int KMyMoneyGlobalSettings::firstFiscalDay(void)
+{
+ return KMyMoneySettings::fiscalYearBeginDay();
+}
+
diff --git a/kmymoney2/kmymoneyglobalsettings.h b/kmymoney2/kmymoneyglobalsettings.h
new file mode 100644
index 0000000..16ca4a2
--- /dev/null
+++ b/kmymoney2/kmymoneyglobalsettings.h
@@ -0,0 +1,46 @@
+/***************************************************************************
+ kmymoneyglobalsettings.h
+ -------------------
+ copyright : (C) 2006 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYGLOBALSETTINGS_H
+#define KMYMONEYGLOBALSETTINGS_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/kmymoneysettings.h>
+
+class KMyMoneyGlobalSettings : public KMyMoneySettings
+{
+public:
+ static QFont listCellFont(void);
+ static QFont listHeaderFont(void);
+ static QColor listColor(void);
+ static QColor listBGColor(void);
+ static QStringList itemList(void);
+ static int firstFiscalMonth(void);
+ static int firstFiscalDay(void);
+};
+#endif
diff --git a/kmymoney2/kmymoneysettings.kcfgc b/kmymoney2/kmymoneysettings.kcfgc
new file mode 100644
index 0000000..baa39ae
--- /dev/null
+++ b/kmymoney2/kmymoneysettings.kcfgc
@@ -0,0 +1,4 @@
+File=kmymoney2.kcfg
+ClassName=KMyMoneySettings
+Singleton=true
+Mutators=true
diff --git a/kmymoney2/kmymoneytest.cpp b/kmymoney2/kmymoneytest.cpp
new file mode 100644
index 0000000..f3c7222
--- /dev/null
+++ b/kmymoney2/kmymoneytest.cpp
@@ -0,0 +1,231 @@
+/***************************************************************************
+ autotest.cpp
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "config.h"
+
+#include <iostream>
+#include <string>
+#include <stdexcept>
+
+/* required for Q_UNUSED( ) */
+#include <qglobal.h>
+
+#ifdef HAVE_LIBCPPUNIT
+
+#include <kcmdlineargs.h>
+#include <kapplication.h>
+
+#include "cppunit/TextTestRunner.h"
+#include "cppunit/TextTestResult.h"
+#include "cppunit/TestSuite.h"
+#include "cppunit/extensions/HelperMacros.h"
+
+#include "mymoney/mymoneyutils.h"
+
+#define private public
+#include "mymoney/mymoneysubject.h"
+#include "mymoney/mymoneyobserver.h"
+#undef private
+
+#include "mymoney/mymoneyexceptiontest.h"
+#include "mymoney/mymoneymoneytest.h"
+#include "mymoney/mymoneyobservertest.h"
+#include "mymoney/mymoneyinstitutiontest.h"
+#include "mymoney/mymoneysplittest.h"
+#include "mymoney/mymoneyaccounttest.h"
+#include "mymoney/mymoneytransactiontest.h"
+#include "mymoney/storage/mymoneyseqaccessmgrtest.h"
+#include "mymoney/storage/mymoneydatabasemgrtest.h"
+#include "mymoney/mymoneyfiletest.h"
+#include "mymoney/mymoneykeyvaluecontainertest.h"
+#include "mymoney/mymoneyscheduletest.h"
+#include "mymoney/mymoneyfinancialcalculatortest.h"
+#include "mymoney/mymoneysecuritytest.h"
+#include "mymoney/mymoneypricetest.h"
+#include "mymoney/mymoneyobjecttest.h"
+#include "mymoney/mymoneyforecasttest.h"
+#include "mymoney/mymoneypayeetest.h"
+
+#include "mymoney/storage/mymoneymaptest.h"
+
+#include "reports/pivottabletest.h"
+#include "reports/pivotgridtest.h"
+#include "reports/querytabletest.h"
+
+#include "converter/convertertest.h"
+
+#include "cppunit/TextTestProgressListener.h"
+
+class MyProgressListener : public CppUnit::TextTestProgressListener
+{
+ void startTest(CppUnit::Test *test) {
+ QString name = test->getName().c_str();
+ if(name.find('.') != -1) { // in CPPUNIT 1.8.0
+ name = name.mid(2); // cut off first 2 chars
+ name = name.left(name.find('.'));
+ } else if(name.find("::") != -1) { // in CPPUNIT 1.9.14
+ name = name.left(name.find("::"));
+ }
+ if(m_name != name) {
+ if(m_name != "")
+ std::cout << std::endl;
+ std::cout << "Running: " << name << std::endl;
+ m_name = name;
+ }
+ }
+private:
+ QString m_name;
+};
+
+void unexpectedException(MyMoneyException *e)
+{
+ std::string msg = "Unexpected exception: ";
+ msg += e->what().latin1();
+ msg += " thrown in ";
+ msg += e->file().latin1();
+ msg += ":";
+ char line[8];
+ sprintf(line, "%ld", e->line());
+ msg += line;
+ delete e;
+ CPPUNIT_FAIL(msg);
+}
+
+#endif // HAVE_LIBCPPUNIT
+
+int main(int testargc, char** testargv)
+{
+ int rc = 0;
+
+#ifdef HAVE_LIBCPPUNIT
+ static const KCmdLineOptions options[] =
+ {
+ { "+[test_suite]", ("Optionally specify a test suite"), 0 },
+ { "", ("Optional arguments are for ctest"), 0 },
+ KCmdLineLastOption // End of options.
+ };
+
+ // we seem to need a KApplication object to use KGlobal::locale()
+ KCmdLineArgs::init(testargc, testargv, testargv[0], "UNIT TESTS", "", "0.1");
+ KCmdLineArgs::addCmdLineOptions( options );
+ KApplication::disableAutoDcopRegistration();
+ KApplication app(false, false);
+
+#ifdef _CHECK_MEMORY
+ _CheckMemory_Init(0);
+#endif
+
+ // mymoney tests
+ //CPPUNIT_TEST_SUITE_REGISTRATION(KReportsViewTest);
+ CPPUNIT_TEST_SUITE_REGISTRATION(MyMoneyMapTest);
+ CPPUNIT_TEST_SUITE_REGISTRATION(ConverterTest);
+ CPPUNIT_TEST_SUITE_REGISTRATION(MyMoneyKeyValueContainerTest);
+ CPPUNIT_TEST_SUITE_REGISTRATION(MyMoneySplitTest);
+ CPPUNIT_TEST_SUITE_REGISTRATION(MyMoneyMoneyTest);
+ CPPUNIT_TEST_SUITE_REGISTRATION(MyMoneyAccountTest);
+ CPPUNIT_TEST_SUITE_REGISTRATION(MyMoneyScheduleTest);
+ CPPUNIT_TEST_SUITE_REGISTRATION(MyMoneyDatabaseMgrTest);
+ CPPUNIT_TEST_SUITE_REGISTRATION(MyMoneySeqAccessMgrTest);
+ CPPUNIT_TEST_SUITE_REGISTRATION(MyMoneyFileTest);
+ CPPUNIT_TEST_SUITE_REGISTRATION(MyMoneyObjectTest);
+ CPPUNIT_TEST_SUITE_REGISTRATION(MyMoneyInstitutionTest);
+ CPPUNIT_TEST_SUITE_REGISTRATION(MyMoneyFinancialCalculatorTest);
+ CPPUNIT_TEST_SUITE_REGISTRATION(MyMoneyTransactionTest);
+ CPPUNIT_TEST_SUITE_REGISTRATION(MyMoneySecurityTest);
+ CPPUNIT_TEST_SUITE_REGISTRATION(MyMoneyForecastTest);
+ CPPUNIT_TEST_SUITE_REGISTRATION(MyMoneyExceptionTest);
+ CPPUNIT_TEST_SUITE_REGISTRATION(MyMoneyObserverTest);
+ CPPUNIT_TEST_SUITE_REGISTRATION(MyMoneyPriceTest);
+ CPPUNIT_TEST_SUITE_REGISTRATION(MyMoneyPayeeTest);
+ CPPUNIT_TEST_SUITE_REGISTRATION(PivotGridTest);
+ CPPUNIT_TEST_SUITE_REGISTRATION(PivotTableTest);
+ CPPUNIT_TEST_SUITE_REGISTRATION(QueryTableTest);
+
+ // off we go
+ CppUnit::TestFactoryRegistry &registry =
+ CppUnit::TestFactoryRegistry::getRegistry();
+
+ // run all tests if no test is specified on the command line
+ // this way, CTest can perform each test individually
+ CppUnit::Test *suite = registry.makeTest();
+ if (testargc>1)
+ {
+ try
+ {
+ suite = suite->findTest(testargv[1]);
+ }
+ catch(const std::invalid_argument &ex)
+ {
+ // oh, cmake perfomed bad at guessing the correct test names.
+ std::cout << ex.what() << std::endl;
+ // we output that the test passed since the test is deactivated
+ return 0;
+ }
+ }
+
+ CppUnit::TextTestRunner* runner = new CppUnit::TextTestRunner();
+
+ runner->addTest(suite);
+
+ MyProgressListener progress;
+ CppUnit::TestResultCollector result;
+
+ runner->eventManager().addListener(&progress);
+ runner->eventManager().addListener(&result);
+
+ runner->run();
+ std::cout << "Tests were run with CPPUNIT version " CPPUNIT_VERSION << std::endl;
+
+ rc = result.wasSuccessful() ? 0 : 1;
+ delete runner;
+
+ // make sure to delete the singletons before we start memory checking
+ // to avoid false error reports
+ // delete MyMoneyFile::instance();
+
+#ifdef _CHECK_MEMORY
+ chkmem.CheckMemoryLeak( true );
+ _CheckMemory_End();
+#endif // _CHECK_MEMORY
+
+#else
+ std::cout << "libcppunit not installed. no automatic tests available."
+ << std::endl;
+#endif // HAVE_LIBCPPUNIT
+ return rc;
+}
+
+// required for the testcases (mymoneystoragesql references it)
+void timetrace(const char *txt)
+{
+ Q_UNUSED(txt);
+}
+
+#if 0
+#ifdef HAVE_LIBOFX
+
+// these symbols are needed when linking with libofx because it requires
+// these global symbols as part of its callback interface
+extern "C" {
+ void ofx_proc_security_cb() {}
+ void ofx_proc_transaction_cb() {}
+ void ofx_proc_statement_cb() {}
+ void ofx_proc_status_cb() {}
+ void ofx_proc_account_cb() {}
+}
+#endif
+#endif
+
diff --git a/kmymoney2/kmymoneyutils.cpp b/kmymoney2/kmymoneyutils.cpp
new file mode 100644
index 0000000..83cf113
--- /dev/null
+++ b/kmymoney2/kmymoneyutils.cpp
@@ -0,0 +1,480 @@
+/***************************************************************************
+ kmymoneyutils.cpp - description
+ -------------------
+ begin : Wed Feb 5 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Headers
+
+#include <klocale.h>
+#include <kglobal.h>
+#include <kiconloader.h>
+#include <kmessagebox.h>
+#include <kconfig.h>
+#include <kstandarddirs.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/mymoneyforecast.h>
+#include <kmymoney/kmymoneyglobalsettings.h>
+#include <kmymoney/investtransactioneditor.h>
+
+#include "kmymoneyutils.h"
+
+KMyMoneyUtils::KMyMoneyUtils()
+{
+}
+
+KMyMoneyUtils::~KMyMoneyUtils()
+{
+}
+
+const QString KMyMoneyUtils::accountTypeToString(const MyMoneyAccount::accountTypeE accountType)
+{
+ return MyMoneyAccount::accountTypeToString(accountType);
+}
+
+MyMoneyAccount::accountTypeE KMyMoneyUtils::stringToAccountType(const QString& type)
+{
+ MyMoneyAccount::accountTypeE rc = MyMoneyAccount::UnknownAccountType;
+ QString tmp = type.lower();
+
+ if(tmp == i18n("Checking").lower())
+ rc = MyMoneyAccount::Checkings;
+ else if(tmp == i18n("Savings").lower())
+ rc = MyMoneyAccount::Savings;
+ else if(tmp == i18n("Credit Card").lower())
+ rc = MyMoneyAccount::CreditCard;
+ else if(tmp == i18n("Cash").lower())
+ rc = MyMoneyAccount::Cash;
+ else if(tmp == i18n("Loan").lower())
+ rc = MyMoneyAccount::Loan;
+ else if(tmp == i18n("Certificate of Deposit").lower())
+ rc = MyMoneyAccount::CertificateDep;
+ else if(tmp == i18n("Investment").lower())
+ rc = MyMoneyAccount::Investment;
+ else if(tmp == i18n("Money Market").lower())
+ rc = MyMoneyAccount::MoneyMarket;
+ else if(tmp == i18n("Asset").lower())
+ rc = MyMoneyAccount::Asset;
+ else if(tmp == i18n("Liability").lower())
+ rc = MyMoneyAccount::Liability;
+ else if(tmp == i18n("Currency").lower())
+ rc = MyMoneyAccount::Currency;
+ else if(tmp == i18n("Income").lower())
+ rc = MyMoneyAccount::Income;
+ else if(tmp == i18n("Expense").lower())
+ rc = MyMoneyAccount::Expense;
+ else if(tmp == i18n("Investment Loan").lower())
+ rc = MyMoneyAccount::AssetLoan;
+ else if(tmp == i18n("Stock").lower())
+ rc = MyMoneyAccount::Stock;
+ else if(tmp == i18n("Equity").lower())
+ rc = MyMoneyAccount::Equity;
+
+ return rc;
+}
+
+MyMoneySecurity::eSECURITYTYPE KMyMoneyUtils::stringToSecurity(const QString& txt)
+{
+ MyMoneySecurity::eSECURITYTYPE rc = MyMoneySecurity::SECURITY_NONE;
+ QString tmp = txt.lower();
+
+ if(tmp == i18n("Stock").lower())
+ rc = MyMoneySecurity::SECURITY_STOCK;
+ else if(tmp == i18n("Mutual Fund").lower())
+ rc = MyMoneySecurity::SECURITY_MUTUALFUND;
+ else if(tmp == i18n("Bond").lower())
+ rc = MyMoneySecurity::SECURITY_BOND;
+ else if(tmp == i18n("Currency").lower())
+ rc = MyMoneySecurity::SECURITY_CURRENCY;
+
+ return rc;
+}
+
+const QString KMyMoneyUtils::securityTypeToString(const MyMoneySecurity::eSECURITYTYPE securityType)
+{
+ return i18n(MyMoneySecurity::securityTypeToString(securityType));
+}
+
+const QString KMyMoneyUtils::occurenceToString(const MyMoneySchedule::occurenceE occurence)
+{
+ return i18n(MyMoneySchedule::occurenceToString(occurence));
+}
+
+const QString KMyMoneyUtils::paymentMethodToString(MyMoneySchedule::paymentTypeE paymentType)
+{
+ return i18n(MyMoneySchedule::paymentMethodToString(paymentType));
+}
+
+const QString KMyMoneyUtils::weekendOptionToString(MyMoneySchedule::weekendOptionE weekendOption)
+{
+ return i18n(MyMoneySchedule::weekendOptionToString(weekendOption));
+}
+
+const QString KMyMoneyUtils::scheduleTypeToString(MyMoneySchedule::typeE type)
+{
+ return i18n(MyMoneySchedule::scheduleTypeToString(type));
+}
+
+KGuiItem KMyMoneyUtils::scheduleNewGuiItem(void)
+{
+ KIconLoader *ic = KGlobal::iconLoader();
+
+ KGuiItem splitGuiItem( i18n("&New Schedule..."),
+ QIconSet(ic->loadIcon("filenew", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Create a new schedule."),
+ i18n("Use this to create a new schedule."));
+
+ return splitGuiItem;
+}
+
+KGuiItem KMyMoneyUtils::accountsFilterGuiItem(void)
+{
+ KIconLoader *ic = KGlobal::iconLoader();
+
+ KGuiItem splitGuiItem( i18n("&Filter"),
+ QIconSet(ic->loadIcon("filter", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Filter out accounts"),
+ i18n("Use this to filter out accounts"));
+
+ return splitGuiItem;
+}
+
+QPixmap KMyMoneyUtils::billScheduleIcon(int size)
+{
+ KIconLoader *ic = KGlobal::iconLoader();
+ return ic->loadIcon("billschedule", KIcon::User, size);
+}
+
+QPixmap KMyMoneyUtils::depositScheduleIcon(int size)
+{
+ KIconLoader *ic = KGlobal::iconLoader();
+ return ic->loadIcon("depositschedule", KIcon::User, size);
+}
+
+QPixmap KMyMoneyUtils::transferScheduleIcon(int size)
+{
+ KIconLoader *ic = KGlobal::iconLoader();
+ return ic->loadIcon("transferschedule", KIcon::User, size);
+}
+
+QPixmap KMyMoneyUtils::scheduleIcon(int size)
+{
+ KIconLoader *ic = KGlobal::iconLoader();
+ return ic->loadIcon("schedule", KIcon::User, size);
+}
+
+const char* homePageItems[] = {
+ I18N_NOOP("Payments"),
+ I18N_NOOP("Preferred accounts"),
+ I18N_NOOP("Payment accounts"),
+ I18N_NOOP("Favorite reports"),
+ I18N_NOOP("Forecast (schedule)"),
+ I18N_NOOP("Networth forecast"),
+ I18N_NOOP("Forecast (history)"),
+ I18N_NOOP("Assets and Liabilities"),
+ I18N_NOOP("Budget"),
+ I18N_NOOP("CashFlow"),
+ // insert new items above this comment
+ 0
+};
+
+const QString KMyMoneyUtils::homePageItemToString(const int idx)
+{
+ QString rc;
+ if(abs(idx) > 0 && abs(idx) < static_cast<int>(sizeof(homePageItems)/sizeof(homePageItems[0]))) {
+ rc = i18n(homePageItems[abs(idx-1)]);
+ }
+ return rc;
+}
+
+int KMyMoneyUtils::stringToHomePageItem(const QString& txt)
+{
+ int idx = 0;
+ for(idx = 0; homePageItems[idx] != 0; ++idx) {
+ if(txt == i18n(homePageItems[idx]))
+ return idx+1;
+ }
+ return 0;
+}
+
+bool KMyMoneyUtils::appendCorrectFileExt(QString& str, const QString& strExtToUse)
+{
+ bool rc = false;
+
+ if(!str.isEmpty()) {
+ //find last . delminator
+ int nLoc = str.findRev('.');
+ if(nLoc != -1) {
+ QString strExt, strTemp;
+ strTemp = str.left(nLoc + 1);
+ strExt = str.right(str.length() - (nLoc + 1));
+ if(strExt.find(strExtToUse, 0, FALSE) == -1) {
+ // if the extension given contains a period, we remove our's
+ if(strExtToUse.find('.') != -1)
+ strTemp = strTemp.left(strTemp.length()-1);
+ //append extension to make complete file name
+ strTemp.append(strExtToUse);
+ str = strTemp;
+ rc = true;
+ }
+ } else {
+ str.append(".");
+ str.append(strExtToUse);
+ rc = true;
+ }
+ }
+ return rc;
+}
+
+void KMyMoneyUtils::checkConstants(void)
+{
+ Q_ASSERT(static_cast<int>(KLocale::ParensAround) == static_cast<int>(MyMoneyMoney::ParensAround));
+ Q_ASSERT(static_cast<int>(KLocale::BeforeQuantityMoney) == static_cast<int>(MyMoneyMoney::BeforeQuantityMoney));
+ Q_ASSERT(static_cast<int>(KLocale::AfterQuantityMoney) == static_cast<int>(MyMoneyMoney::AfterQuantityMoney));
+ Q_ASSERT(static_cast<int>(KLocale::BeforeMoney) == static_cast<int>(MyMoneyMoney::BeforeMoney));
+ Q_ASSERT(static_cast<int>(KLocale::AfterMoney) == static_cast<int>(MyMoneyMoney::AfterMoney));
+}
+
+QString KMyMoneyUtils::variableCSS(void)
+{
+ QColor tcolor = KGlobalSettings::textColor();
+
+ QString css;
+ css += "<style type=\"text/css\">\n<!--\n";
+ css += QString(".row-even, .item0 { background-color: %1; color: %2 }\n")
+ .arg((KMyMoneyGlobalSettings::listBGColor()).name()).arg(tcolor.name());
+ css += QString(".row-odd, .item1 { background-color: %1; color: %2 }\n")
+ .arg((KMyMoneyGlobalSettings::listColor()).name()).arg(tcolor.name());
+ css += "-->\n</style>\n";
+ return css;
+}
+
+QString KMyMoneyUtils::findResource(const char* type, const QString& filename)
+{
+ QString language = KGlobal::locale()->language();
+ QString country = KGlobal::locale()->country();
+ QString rc, mask;
+
+ // check that the placeholder is present
+ if(!filename.find("%1")) {
+ qWarning("%%1 not found in '%s'", filename.latin1());
+ return filename;
+ }
+
+ // search the given resource
+ mask = filename.arg("_%1.%2");
+ rc = KGlobal::dirs()->findResource(type, mask.arg(country).arg(language));
+ if(rc.isEmpty()) {
+ mask = filename.arg("_%1");
+ rc = KGlobal::dirs()->findResource(type, mask.arg(language));
+ }
+ if(rc.isEmpty()) {
+ // qDebug(QString("html/home_%1.html not found").arg(country).latin1());
+ rc = KGlobal::dirs()->findResource(type, mask.arg(country));
+ }
+ if(rc.isEmpty()) {
+ rc = KGlobal::dirs()->findResource(type, filename.arg(""));
+ }
+
+ if(rc.isEmpty()) {
+ qWarning("No resource found for (%s,%s)", type, filename.latin1());
+ }
+ return rc;
+}
+
+const MyMoneySplit KMyMoneyUtils::stockSplit(const MyMoneyTransaction& t)
+{
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ MyMoneySplit investmentAccountSplit;
+ for(it_s = t.splits().begin(); it_s != t.splits().end(); ++it_s) {
+ if(!(*it_s).accountId().isEmpty()) {
+ MyMoneyAccount acc = MyMoneyFile::instance()->account((*it_s).accountId());
+ if(acc.isInvest()) {
+ return *it_s;
+ }
+ // if we have a reference to an investment account, we remember it here
+ if(acc.accountType() == MyMoneyAccount::Investment)
+ investmentAccountSplit = *it_s;
+ }
+ }
+ // if we haven't found a stock split, we see if we've seen
+ // an investment account on the way. If so, we return it.
+ if(!investmentAccountSplit.id().isEmpty())
+ return investmentAccountSplit;
+
+ // if none was found, we return an empty split.
+ return MyMoneySplit();
+}
+
+KMyMoneyUtils::transactionTypeE KMyMoneyUtils::transactionType(const MyMoneyTransaction& t)
+{
+ if(!stockSplit(t).id().isEmpty())
+ return InvestmentTransaction;
+
+ if(t.splitCount() < 2) {
+ return Unknown;
+ } else if(t.splitCount() > 2) {
+ // FIXME check for loan transaction here
+ return SplitTransaction;
+ }
+ QString ida, idb;
+ ida = t.splits()[0].accountId();
+ idb = t.splits()[1].accountId();
+ if(ida.isEmpty() || idb.isEmpty())
+ return Unknown;
+
+ MyMoneyAccount a, b;
+ a = MyMoneyFile::instance()->account(ida);
+ b = MyMoneyFile::instance()->account(idb);
+ if((a.accountGroup() == MyMoneyAccount::Asset
+ || a.accountGroup() == MyMoneyAccount::Liability)
+ && (b.accountGroup() == MyMoneyAccount::Asset
+ || b.accountGroup() == MyMoneyAccount::Liability))
+ return Transfer;
+ return Normal;
+}
+
+void KMyMoneyUtils::calculateAutoLoan(const MyMoneySchedule& schedule, MyMoneyTransaction& transaction, const QMap<QString, MyMoneyMoney>& balances)
+{
+ try {
+ MyMoneyForecast::calculateAutoLoan(schedule, transaction, balances);
+ } catch (MyMoneyException* e) {
+ KMessageBox::detailedError(0, i18n("Unable to load schedule details"), e->what());
+ delete e;
+ }
+}
+
+QString KMyMoneyUtils::nextCheckNumber(const MyMoneyAccount& acc)
+{
+ // determine next check number
+ QString number;
+ QRegExp exp(QString("(.*\\D)?(\\d+)(\\D.*)?"));
+ if(exp.search(acc.value("lastNumberUsed")) != -1) {
+ number = QString("%1%2%3").arg(exp.cap(1)).arg(exp.cap(2).toULongLong() + 1).arg(exp.cap(3));
+ } else {
+ number = "1";
+ }
+ return number;
+}
+
+QString KMyMoneyUtils::reconcileStateToString(MyMoneySplit::reconcileFlagE flag, bool text)
+{
+ QString txt;
+ if(text) {
+ switch(flag) {
+ case MyMoneySplit::NotReconciled:
+ txt = i18n("Reconcile state 'Not reconciled'", "Not reconciled");
+ break;
+ case MyMoneySplit::Cleared:
+ txt = i18n("Reconcile state 'Cleared'", "Cleared");
+ break;
+ case MyMoneySplit::Reconciled:
+ txt = i18n("Reconcile state 'Reconciled'", "Reconciled");
+ break;
+ case MyMoneySplit::Frozen:
+ txt = i18n("Reconcile state 'Frozen'", "Frozen");
+ break;
+ default:
+ txt = i18n("Unknown");
+ break;
+ }
+ } else {
+ switch(flag) {
+ case MyMoneySplit::NotReconciled:
+ break;
+ case MyMoneySplit::Cleared:
+ txt = i18n("Reconcile flag C", "C");
+ break;
+ case MyMoneySplit::Reconciled:
+ txt = i18n("Reconcile flag R", "R");
+ break;
+ case MyMoneySplit::Frozen:
+ txt = i18n("Reconcile flag F", "F");
+ break;
+ default:
+ txt = i18n("Flag for unknown reconciliation state", "?");
+ break;
+ }
+ }
+ return txt;
+}
+
+MyMoneyTransaction KMyMoneyUtils::scheduledTransaction(const MyMoneySchedule& schedule)
+{
+ MyMoneyTransaction t = schedule.transaction();
+
+ try {
+ if (schedule.type() == MyMoneySchedule::TYPE_LOANPAYMENT) {
+ calculateAutoLoan(schedule, t, QMap<QString, MyMoneyMoney>());
+ }
+ } catch (MyMoneyException* e) {
+ qDebug("Unable to load schedule details for '%s' during transaction match: %s", schedule.name().data(), e->what().data());
+ delete e;
+ }
+
+ t.clearId();
+ t.setEntryDate(QDate());
+ return t;
+}
+
+void KMyMoneyUtils::previouslyUsedCategories(const QString& investmentAccount, QString& feesId, QString& interestId)
+{
+ feesId = interestId = QString();
+ MyMoneyFile* file = MyMoneyFile::instance();
+ try {
+ MyMoneyAccount acc = file->account(investmentAccount);
+ MyMoneyTransactionFilter filter(investmentAccount);
+ filter.setReportAllSplits(false);
+ // since we assume an investment account here, we need to collect the stock accounts as well
+ filter.addAccount(acc.accountList());
+ QValueList< QPair<MyMoneyTransaction, MyMoneySplit> > list;
+ file->transactionList(list, filter);
+ QValueList< QPair<MyMoneyTransaction, MyMoneySplit> >::const_iterator it_t;
+ for(it_t = list.begin(); it_t != list.end(); ++it_t) {
+ const MyMoneyTransaction& t = (*it_t).first;
+ const MyMoneySplit&s = (*it_t).second;
+ MyMoneySplit assetAccountSplit;
+ QValueList<MyMoneySplit> feeSplits;
+ QValueList<MyMoneySplit> interestSplits;
+ MyMoneySecurity security;
+ MyMoneySecurity currency;
+ MyMoneySplit::investTransactionTypeE transactionType;
+ InvestTransactionEditor::dissectTransaction(t, s, assetAccountSplit, feeSplits, interestSplits, security, currency, transactionType);
+ if(feeSplits.count() == 1) {
+ feesId = feeSplits.first().accountId();
+ }
+ if(interestSplits.count() == 1) {
+ interestId = interestSplits.first().accountId();
+ }
+ }
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+
+}
+
+
diff --git a/kmymoney2/kmymoneyutils.h b/kmymoney2/kmymoneyutils.h
new file mode 100644
index 0000000..8acb5c4
--- /dev/null
+++ b/kmymoney2/kmymoneyutils.h
@@ -0,0 +1,382 @@
+/***************************************************************************
+ kmymoneyutils.h - description
+ -------------------
+ begin : Wed Feb 5 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYUTILS_H
+#define KMYMONEYUTILS_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qcolor.h>
+#include <qfont.h>
+
+// ----------------------------------------------------------------------------
+// KDE Headers
+
+#include <kguiitem.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneysecurity.h>
+#include <kmymoney/mymoneyscheduled.h>
+#include <kmymoney/mymoneytransaction.h>
+
+/**
+ * @author Thomas Baumgart
+ */
+
+class KMyMoneyUtils
+{
+public:
+ /**
+ * This enum is used to describe the bits of an account type filter mask.
+ * Each bit is used to define a specific account class. Multiple classes
+ * can be specified by OR'ing multiple entries. The special entry @p last
+ * marks the left most bit in the mask and is used by scanners of this
+ * bitmask to determine the end of processing.
+ */
+ enum categoryTypeE {
+ none = 0x00, ///< no account class selected
+ liability = 0x01, ///< liability accounts selected
+ asset = 0x02, ///< asset accounts selected
+ expense = 0x04, ///< expense accounts selected
+ income = 0x08, ///< income accounts selected
+ equity = 0x10, ///< equity accounts selected
+ last = 0x20 ///< the leftmost bit in the mask
+ };
+
+ enum transactionTypeE {
+ /**
+ * Unknown transaction type (e.g. used for a transaction with only
+ * a single split)
+ */
+ Unknown,
+
+ /**
+ * A 'normal' transaction is one that consists out two splits: one
+ * referencing an income/expense account, the other referencing
+ * an asset/liability account.
+ */
+ Normal,
+
+ /**
+ * A transfer denotes a transaction consisting of two splits.
+ * Both of the splits reference an asset/liability
+ * account.
+ */
+ Transfer,
+
+ /**
+ * Whenever a transaction consists of more than 2 splits,
+ * it is treated as 'split transaction'.
+ */
+ SplitTransaction,
+
+ /**
+ * This transaction denotes a specific transaction where
+ * a loan account is involved. Ususally, a special dialog
+ * is used to modify this transaction.
+ */
+ LoanPayment,
+
+ /**
+ * This transaction denotes a specific transaction where
+ * an investment is involved. Ususally, a special dialog
+ * is used to modify this transaction.
+ */
+ InvestmentTransaction
+ };
+
+ enum EnterScheduleResultCodeE {
+ Cancel = 0, // cancel the operation
+ Enter, // enter the schedule
+ Skip, // skip the schedule
+ Ignore // ignore the schedule
+ };
+
+ static const int maxHomePageItems = 5;
+
+ KMyMoneyUtils();
+ ~KMyMoneyUtils();
+
+ /**
+ * This method is used to convert the internal representation of
+ * an account type into a human readable format
+ *
+ * @param accountType numerical representation of the account type.
+ * For possible values, see MyMoneyAccount::accountTypeE
+ * @return QString representing the human readable form translated according to the language cataglogue
+ *
+ * @sa MyMoneyAccount::accountTypeToString()
+ */
+ static const QString accountTypeToString(const MyMoneyAccount::accountTypeE accountType);
+
+ /**
+ * This method is used to convert an account type from it's
+ * string form to the internal used numeric value.
+ *
+ * @param type reference to a QString containing the string to convert
+ * @return accountTypeE containing the internal used numeric value. For possible
+ * values see MyMoneyAccount::accountTypeE
+ */
+ static MyMoneyAccount::accountTypeE stringToAccountType(const QString& type);
+
+ /**
+ * This method is used to convert a security type from it's
+ * string form to the internal used numeric value.
+ *
+ * @param txt reference to a QString containing the string to convert
+ * @return eSECURITYTYPE containing the internal used numeric value. For possible
+ * values see MyMoneySecurity::eSECURITYTYPE
+ */
+ static MyMoneySecurity::eSECURITYTYPE stringToSecurity(const QString& txt);
+
+ /**
+ * This method is used to convert the internal representation of
+ * an security type into a human readable format
+ *
+ * @param securityType enumerated representation of the security type.
+ * For possible values, see MyMoneySecurity::eSECURITYTYPE
+ * @return QString representing the human readable form translated according to the language cataglogue
+ *
+ * @sa MyMoneySecurity::securityTypeToString()
+ */
+ static const QString securityTypeToString(const MyMoneySecurity::eSECURITYTYPE securityType);
+
+ /**
+ * This method is used to convert the occurence type from it's
+ * internal representation into a human readable format.
+ *
+ * @param occurence numerical representation of the MyMoneySchedule
+ * occurence type
+ *
+ * @return QString representing the human readable format translated according to the language cataglogue
+ *
+ * @sa MyMoneySchedule::occurenceToString()
+ *
+ * @deprecated Use i18n(MyMoneySchedule::occurenceToString(occurence)) instead
+ */
+ static const QString occurenceToString(const MyMoneySchedule::occurenceE occurence);
+
+ /**
+ * This method is used to convert the payment type from it's
+ * internal representation into a human readable format.
+ *
+ * @param paymentType numerical representation of the MyMoneySchedule
+ * payment type
+ *
+ * @return QString representing the human readable format translated according to the language cataglogue
+ *
+ * @sa MyMoneySchedule::paymentMethodToString()
+ */
+ static const QString paymentMethodToString(MyMoneySchedule::paymentTypeE paymentType);
+
+ /**
+ * This method is used to convert the schedule weekend option from it's
+ * internal representation into a human readable format.
+ *
+ * @param weekendOption numerical representation of the MyMoneySchedule
+ * weekend option
+ *
+ * @return QString representing the human readable format translated according to the language cataglogue
+ *
+ * @sa MyMoneySchedule::weekendOptionToString()
+ */
+ static const QString weekendOptionToString(MyMoneySchedule::weekendOptionE weekendOption);
+
+ /**
+ * This method is used to convert the schedule type from it's
+ * internal representation into a human readable format.
+ *
+ * @param type numerical representation of the MyMoneySchedule
+ * schedule type
+ *
+ * @return QString representing the human readable format translated according to the language cataglogue
+ *
+ * @sa MyMoneySchedule::scheduleTypeToString()
+ */
+ static const QString scheduleTypeToString(MyMoneySchedule::typeE type);
+
+ /**
+ * This method is used to convert a numeric index of an item
+ * represented on the home page into it's string form.
+ *
+ * @param idx numeric index of item
+ *
+ * @return QString with text of this item
+ */
+ static const QString homePageItemToString(const int idx);
+
+ /**
+ * This method is used to convert the name of a home page item
+ * to it's internal numerical representation
+ *
+ * @param txt QString reference of the items name
+ *
+ * @retval 0 @p txt is unknown
+ * @retval >0 numeric value for @p txt
+ */
+ static int stringToHomePageItem(const QString& txt);
+
+ /**
+ * Retrieve a KDE KGuiItem for the new schedule button.
+ *
+ * @return The KGuiItem that can be used to display the icon and text
+ */
+ static KGuiItem scheduleNewGuiItem(void);
+
+ /**
+ * Retrieve a KDE KGuiItem for the account filter button
+ *
+ * @return The KGuiItem that can be used to display the icon and text
+ */
+ static KGuiItem accountsFilterGuiItem(void);
+
+ /**
+ * This method adds the file extension passed as argument @p extension
+ * to the end of the file name passed as argument @p name if it is not present.
+ * If @p name contains an extension it will be removed.
+ *
+ * @param name filename to be checked
+ * @param extension extension to be added (w/o the dot)
+ *
+ * @retval true if @p name was changed
+ * @retval false if @p name remained unchanged
+ */
+ static bool appendCorrectFileExt(QString& name, const QString& extension);
+
+ static QPixmap billScheduleIcon(int size);
+ static QPixmap depositScheduleIcon(int size);
+ static QPixmap transferScheduleIcon(int size);
+ static QPixmap scheduleIcon(int size);
+
+ /**
+ * Check that internal MyMoney engine constants use the same
+ * values as the KDE constants.
+ */
+ static void checkConstants(void);
+
+ static QString variableCSS(void);
+
+ /**
+ * This method searches a KDE specific resource and applies country and
+ * language settings during the search. Therefore, the parameter @p filename must contain
+ * the characters '%1' which gets replaced with the language/country values.
+ *
+ * The search is performed in the following order (stopped immediately if a file was found):
+ * - @c \%1 is replaced with <tt>_\<country\>.\<language\></tt>
+ * - @c \%1 is replaced with <tt>_\<language\></tt>
+ * - @c \%1 is replaced with <tt>_\<country\></tt>
+ * - @c \%1 is replaced with the empty string
+ *
+ * @c \<country\> and @c \<language\> denote the respective KDE settings.
+ *
+ * Example: The KDE settings for country is Spain (es) and language is set
+ * to Galician (gl). The code for looking up a file looks like this:
+ *
+ * @code
+ *
+ * :
+ * QString fname = KMyMoneyUtils::findResource("appdata", "html/home%1.html")
+ * :
+ *
+ * @endcode
+ *
+ * The method calls KStandardDirs::findResource() with the following values for the
+ * parameter @p filename:
+ *
+ * - <tt>html/home_es.gl.html</tt>
+ * - <tt>html/home_gl.html</tt>
+ * - <tt>html/home_es.html</tt>
+ * - <tt>html/home.html</tt>
+ *
+ * @note See KStandardDirs::findResource() for details on the parameters
+ */
+ static QString findResource(const char* type, const QString& filename);
+
+ /**
+ * This method returns the split referencing a stock account if
+ * one exists in the transaction passed as @p t. If none is present
+ * in @p t, an empty MyMoneySplit() object will be returned.
+ *
+ * @param t transaction to be checked for a stock account
+ * @return MyMoneySplit object referencing a stock account or an
+ * empty MyMoneySplit object.
+ */
+ static const MyMoneySplit stockSplit(const MyMoneyTransaction& t);
+
+ /**
+ * This method analyses the splits of a transaction and returns
+ * the type of transaction. Possible values are defined by the
+ * KMyMoneyUtils::transactionTypeE enum.
+ *
+ * @param t const reference to the transaction
+ *
+ * @return KMyMoneyUtils::transactionTypeE value of the action
+ */
+ static transactionTypeE transactionType(const MyMoneyTransaction& t);
+
+ /**
+ * This method modifies a scheduled loan transaction such that all
+ * references to automatic calculated values are resolved to actual values.
+ *
+ * @param schedule const reference to the schedule the transaction is based on
+ * @param transaction reference to the transaction to be checked and modified
+ * @param balances QMap of (account-id,balance) pairs to be used as current balance
+ * for the calculation of interest. If map is empty, the engine
+ * will be interrogated for current balances.
+ */
+ static void calculateAutoLoan(const MyMoneySchedule& schedule, MyMoneyTransaction& transaction, const QMap<QString, MyMoneyMoney>& balances);
+
+ /**
+ * Return next check number for account @a acc.
+ */
+ static QString nextCheckNumber(const MyMoneyAccount& acc);
+
+ /**
+ * Returns the text representing the reconcile flag. If @a text is @p true
+ * then the full text will be returned otherwise a short form (usually one character).
+ */
+ static QString reconcileStateToString(MyMoneySplit::reconcileFlagE flag, bool text = false);
+
+ /**
+ * Returns the transaction for @a schedule. In case of a loan payment the
+ * transaction will be modified by calculateAutoLoan().
+ * The ID of the transaction as well as the entryDate will be reset.
+ *
+ * @returns adjusted transaction
+ */
+ static MyMoneyTransaction scheduledTransaction(const MyMoneySchedule& schedule);
+
+ /**
+ * This method tries to figure out the category to be used for fees and interest
+ * from previous transactions in the given @a investmentAccount and returns the
+ * ids of those categories in @a feesId and @a interestId. The last used category
+ * will be returned.
+ */
+ static void previouslyUsedCategories(const QString& investmentAccount, QString& feesId, QString& interestId);
+
+};
+
+#endif
diff --git a/kmymoney2/kstartuplogo.cpp b/kmymoney2/kstartuplogo.cpp
new file mode 100644
index 0000000..566f8ad
--- /dev/null
+++ b/kmymoney2/kstartuplogo.cpp
@@ -0,0 +1,113 @@
+/***************************************************************************
+ kstartuplogo.cpp
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include <kdecompat.h>
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qapplication.h>
+#include <qpixmap.h>
+#include <qframe.h>
+#include <qpainter.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kglobal.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+#include <kapplication.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kstartuplogo.h"
+#include "kmymoneyglobalsettings.h"
+
+class KStartupSplash::Private
+{
+ public:
+ QString message;
+ QColor color;
+ int align;
+};
+
+KStartupSplash::KStartupSplash(const QPixmap &pixmap, WFlags f) :
+ KSplashScreen(pixmap, f),
+ d(new Private)
+{
+}
+
+KStartupSplash::~KStartupSplash()
+{
+ delete d;
+}
+
+void KStartupSplash::message( const QString &message, int alignment, const QColor &color)
+{
+ d->message = message;
+ d->align = alignment;
+ d->color = color;
+ // the next line causes the base class signal management to happen
+ // and also forces a repaint
+ KSplashScreen::clear();
+}
+
+void KStartupSplash::drawContents( QPainter *painter )
+{
+ painter->setPen( d->color );
+ QRect r = rect();
+ r.setRect( r.x() + 15, r.y() + r.height() - 28, r.width() - 20, 20 );
+ painter->drawText( r, d->align, d->message);
+}
+
+KStartupLogo::KStartupLogo() :
+ QObject(0, 0),
+ m_splash(0)
+{
+ // splash screen setting
+ if(!KMyMoneyGlobalSettings::showSplash())
+ return;
+
+ QString filename = KGlobal::dirs()->findResource("appdata", "pics/startlogo.png");
+ QPixmap splashPixmap(filename);
+
+ if(!splashPixmap.isNull()) {
+ QPixmap backGround(splashPixmap);
+ backGround.fill(KGlobalSettings::highlightColor());
+ bitBlt ( &backGround, 0, 0, &splashPixmap, 0, 0, splashPixmap.width(), splashPixmap.height(), Qt::CopyROP );
+
+ KStartupSplash* splash = new KStartupSplash(backGround);
+ splash->setFixedSize(backGround.size());
+
+ // FIXME: I added the 'Loading file...' message here, because this was the only
+ // existing string we have and I did not want to change the strings. We should
+ // change that in the future.
+ splash->message(i18n("Loading..."), AlignLeft, white);
+
+ splash->show();
+ splash->repaint();
+ m_splash = splash;
+ }
+}
+
+KStartupLogo::~KStartupLogo()
+{
+ delete m_splash;
+}
+
+#include "kstartuplogo.moc"
diff --git a/kmymoney2/kstartuplogo.h b/kmymoney2/kstartuplogo.h
new file mode 100644
index 0000000..2d3b305
--- /dev/null
+++ b/kmymoney2/kstartuplogo.h
@@ -0,0 +1,62 @@
+/***************************************************************************
+ kstartuplogo.h
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KSTARTUPLOGO_H
+#define KSTARTUPLOGO_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+#include <qguardedptr.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <ksplashscreen.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+class KStartupSplash : public KSplashScreen
+{
+ Q_OBJECT
+ public:
+ KStartupSplash(const QPixmap &pixmap, WFlags f = 0);
+ ~KStartupSplash();
+ void message( const QString &message, int alignment = AlignLeft, const QColor &color = black);
+
+ protected:
+ void drawContents(QPainter *p);
+
+ private:
+ class Private;
+ Private *d;
+};
+
+// Simple class that just shows a picture
+class KStartupLogo : public QObject
+{
+ Q_OBJECT
+public:
+ KStartupLogo();
+ ~KStartupLogo();
+
+private:
+ QGuardedPtr<QWidget> m_splash;
+};
+
+#endif
diff --git a/kmymoney2/lo16-app-kmymoney2.png b/kmymoney2/lo16-app-kmymoney2.png
new file mode 100644
index 0000000..5a245b7
--- /dev/null
+++ b/kmymoney2/lo16-app-kmymoney2.png
Binary files differ
diff --git a/kmymoney2/lo32-app-kmymoney2.png b/kmymoney2/lo32-app-kmymoney2.png
new file mode 100644
index 0000000..2c094bd
--- /dev/null
+++ b/kmymoney2/lo32-app-kmymoney2.png
Binary files differ
diff --git a/kmymoney2/main.cpp b/kmymoney2/main.cpp
new file mode 100644
index 0000000..008210d
--- /dev/null
+++ b/kmymoney2/main.cpp
@@ -0,0 +1,315 @@
+/***************************************************************************
+ main.cpp
+ -------------------
+ copyright : (C) 2001 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidgetlist.h>
+#include <qdatetime.h>
+#include <qstringlist.h>
+#include <qeventloop.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kcmdlineargs.h>
+#include <kaboutdata.h>
+#include <klocale.h>
+#include <ktip.h>
+#include <dcopclient.h>
+#include <kmessagebox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoney/mymoneyfile.h"
+#include "kmymoney2.h"
+#include "kstartuplogo.h"
+#include "kmymoneyutils.h"
+#include "kmymoneyglobalsettings.h"
+
+static const char *description =
+ I18N_NOOP("\nKMyMoney, the Personal Finance Manager for KDE.\n\nPlease consider contributing to this project with code and/or suggestions.");
+
+static KCmdLineOptions options[] =
+{
+ { "lang <lang-code>", I18N_NOOP("language to be used"), 0 },
+ { "n", I18N_NOOP("don't open last used file"), 0},
+ { "timers", I18N_NOOP("enable performance timers"), 0},
+
+#if KMM_DEBUG
+ // The following options are only available when compiled in debug mode
+ { "trace", I18N_NOOP("turn on program traces"), 0},
+ { "dump-actions", I18N_NOOP("dump the names of all defined KAction objects to stdout and quit"), 0},
+#endif
+
+ // INSERT YOUR COMMANDLINE OPTIONS HERE
+ { "+[File]", I18N_NOOP("file to open"), 0 },
+ KCmdLineLastOption
+};
+
+QTime timer;
+bool timersOn = false;
+
+KMyMoney2App* kmymoney2;
+
+static KCmdLineArgs* args = 0;
+
+static void _cleanup(void)
+{
+#ifdef _CHECK_MEMORY
+ chkmem.CheckMemoryLeak( false );
+ _CheckMemory_End();
+#endif
+}
+
+int main(int argc, char *argv[])
+{
+ timer.start();
+
+ QString feature;
+
+#ifdef _CHECK_MEMORY
+ feature += "\t- " I18N_NOOP("Memory leakage detection") "\n";
+#endif
+
+ if(!feature.isEmpty())
+ feature = I18N_NOOP("Compiled with the following settings:\n") + feature;
+
+ KAboutData aboutData( "kmymoney2", I18N_NOOP("KMyMoney"),
+ VERSION, description, KAboutData::License_GPL,
+ "(c) 2000-2009 The KMyMoney development team", feature,
+ "http://kmymoney2.sourceforge.net/",
+ "kmymoney2-developer@lists.sourceforge.net");
+
+ aboutData.addAuthor("Michael Edwardes.", I18N_NOOP("Initial idea, much initial source code, Project admin"), "mte@users.sourceforge.net");
+ aboutData.addAuthor("Thomas Baumgart", I18N_NOOP("Core engine, Release Manager, Project admin"), "ipwizard@users.sourceforge.net");
+ aboutData.addAuthor("Ace Jones", I18N_NOOP("Reporting logic, OFX Import"), "acejones@users.sourceforge.net");
+ aboutData.addAuthor("Tony Bloomfield", I18N_NOOP("Database backend, maintainer stable branch"), "tonybloom@users.sourceforge.net");
+ aboutData.addAuthor("Alvaro Soliverez", I18N_NOOP("Forecast, Reports"), "asoliverez@gmail.com");
+ aboutData.addAuthor("Felix Rodriguez", I18N_NOOP("Project Admin"), "frodriguez@users.sourceforge.net");
+ aboutData.addAuthor("John C", I18N_NOOP("Developer"), "tacoturtle@users.sourceforge.net");
+ aboutData.addAuthor("Fernando Vilas", I18N_NOOP("Database backend"), "fvilas@iname.com");
+
+ aboutData.addCredit("Kevin Tambascio", I18N_NOOP("Initial investment support"), "ktambascio@users.sourceforge.net");
+ aboutData.addCredit("Javier Campos Morales", I18N_NOOP("Developer & Artist"), "javi_c@users.sourceforge.net");
+ aboutData.addCredit("Robert Wadley", I18N_NOOP("Icons & splash screen"), "rob@robntina.fastmail.us");
+ aboutData.addCredit("Laurent Montel", I18N_NOOP("Patches"), "montel@kde.org");
+ aboutData.addCredit("Wolfgang Rohdewald", I18N_NOOP("Patches"), "woro@users.sourceforge.net");
+
+ KCmdLineArgs::init( argc, argv, &aboutData );
+ KCmdLineArgs::addCmdLineOptions( options ); // Add our own options.
+
+ // create the singletons before we start memory checking
+ // to avoid false error reports
+ MyMoneyFile::instance();
+
+#ifdef _CHECK_MEMORY
+ _CheckMemory_Init(0);
+#endif
+ atexit(_cleanup);
+
+ KMyMoneyUtils::checkConstants();
+
+ KApplication* a = new KApplication();
+
+ if(KGlobal::locale()->monetaryDecimalSymbol().isEmpty()) {
+ KMessageBox::error(0, i18n("The monetary decimal symbol is not correctly set in the KDE Control Center's Country/Region & Language settings. Please set it to a reasonable value and start KMyMoney again."), i18n("Invalid settings"));
+ delete a;
+ exit(1);
+ }
+
+ // show startup logo
+ KStartupLogo* splash = new KStartupLogo();
+ a->processEvents();
+
+ args = KCmdLineArgs::parsedArgs();
+
+ // setup the MyMoneyMoney locale settings according to the KDE settings
+ MyMoneyMoney::setThousandSeparator(*(KGlobal::locale()->monetaryThousandsSeparator().latin1()));
+ MyMoneyMoney::setDecimalSeparator(*(KGlobal::locale()->monetaryDecimalSymbol().latin1()));
+ MyMoneyMoney::setNegativeMonetarySignPosition(static_cast<MyMoneyMoney::signPosition>(KGlobal::locale()->negativeMonetarySignPosition()));
+ MyMoneyMoney::setPositiveMonetarySignPosition(static_cast<MyMoneyMoney::signPosition>(KGlobal::locale()->positiveMonetarySignPosition()));
+ MyMoneyMoney::setNegativePrefixCurrencySymbol(KGlobal::locale()->negativePrefixCurrencySymbol());
+ MyMoneyMoney::setPositivePrefixCurrencySymbol(KGlobal::locale()->positivePrefixCurrencySymbol());
+
+ QCString language = args->getOption("lang");
+ if(!language.isEmpty()) {
+ if(!KGlobal::locale()->setLanguage(language)) {
+ qWarning("Unable to select language '%s'. This has one of two reasons:\n\ta) the standard KDE message catalogue is not installed\n\tb) the KMyMoney message catalogue is not installed", language.data());
+ }
+ }
+
+#if KMM_DEBUG
+ if(args->isSet("trace"))
+ MyMoneyTracer::on();
+ timersOn = args->isSet("timers");
+#endif
+
+ kmymoney2 = 0;
+ kmymoney2 = new KMyMoney2App();
+ a->setMainWidget( kmymoney2 );
+
+#if KMM_DEBUG
+ if(args->isSet("dump-actions")) {
+ kmymoney2->dumpActions();
+
+ // Before we delete the application, we make sure that we destroy all
+ // widgets by running the event loop for some time to catch all those
+ // widgets that are requested to be destroyed using the deleteLater() method.
+ QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput, 10);
+
+ delete kmymoney2;
+ delete splash;
+ delete a;
+ exit(0);
+ }
+#endif
+
+ int rc = 0;
+ try {
+ do {
+ // connect to DCOP server
+ DCOPClient* client = a->dcopClient();
+ if(client->registerAs("kmymoney", true) != false) {
+ const QCStringList instances = kmymoney2->instanceList();
+ if(instances.count() > 0) {
+
+ // If the user launches a second copy of the app and includes a file to
+ // open, they are probably attempting a "WebConnect" session. In this case,
+ // we'll check to make sure it's an importable file that's passed in, and if so, we'll
+ // notify the primary instance of the file and kill ourselves.
+
+ if(args->count() > 0) {
+ KURL url = args->url(0);
+ if ( kmymoney2->isImportableFile( url.path() ) )
+ {
+ // if there are multiple instances, we'll send this to the first one
+ QCString primary = instances[0];
+
+ // send a message to the primary client to import this file
+ QByteArray data;
+ QDataStream arg(data, IO_WriteOnly);
+ arg << url.path();
+ arg << kapp->startupId();
+ if (!client->send(primary, "kmymoney2app", "webConnect(QString,QCString)",data))
+ qDebug("Unable to launch WebConnect via DCOP.");
+
+ // Before we delete the application, we make sure that we destroy all
+ // widgets by running the event loop for some time to catch all those
+ // widgets that are requested to be destroyed using the deleteLater() method.
+ QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput, 10);
+
+ delete kmymoney2;
+ delete splash;
+ break;
+ }
+ }
+
+ if(KMessageBox::questionYesNo(0, i18n("Another instance of KMyMoney is already running. Do you want to quit?")) == KMessageBox::Yes) {
+ rc = 1;
+ delete kmymoney2;
+ delete splash;
+ break;
+ }
+ }
+ } else {
+ qDebug("DCOP registration failed. Some functions are not available.");
+ }
+
+ kmymoney2->show();
+ kmymoney2->setEnabled(false);
+
+ delete splash;
+
+ // force complete paint of widgets
+ qApp->processEvents();
+
+ QString importfile;
+ KURL url;
+ // make sure, we take the file provided on the command
+ // line before we go and open the last one used
+ if(args->count() > 0) {
+ url = args->url(0);
+
+ // Check to see if this is an importable file, as opposed to a loadable
+ // file. If it is importable, what we really want to do is load the
+ // last used file anyway and then immediately import this file. This
+ // implements a "web connect" session where there is not already an
+ // instance of the program running.
+
+ if ( kmymoney2->isImportableFile( url.path() ) )
+ {
+ importfile = url.path();
+ url = kmymoney2->readLastUsedFile();
+ }
+
+ } else {
+ url = kmymoney2->readLastUsedFile();
+ }
+
+ KTipDialog::showTip(kmymoney2, "", false);
+ if(url.isValid() && !args->isSet("n")) {
+ kmymoney2->slotFileOpenRecent(url);
+ } else if(KMyMoneyGlobalSettings::firstTimeRun()) {
+ kmymoney2->slotFileNew();
+ }
+ KMyMoneyGlobalSettings::setFirstTimeRun(false);
+
+ if ( ! importfile.isEmpty() )
+ kmymoney2->webConnect( importfile, kapp->startupId() );
+
+ if(kmymoney2 != 0) {
+ kmymoney2->updateCaption();
+ args->clear();
+ kmymoney2->setEnabled(true);
+ rc = a->exec();
+ }
+ } while(0);
+ } catch(MyMoneyException *e) {
+ KMessageBox::detailedError(0, i18n("Uncaught error. Please report the details to the developers"),
+ QString("%1 in file %2 line %3").arg(e->what()).arg(e->file()).arg(e->line()));
+ throw e;
+ }
+
+ delete a;
+
+ return rc;
+}
+
+void timestamp(char *txt)
+{
+ if(timersOn)
+ {
+ qDebug("Time(%s): %d", txt, timer.elapsed());
+ }
+}
+
+void timetrace(const char *txt)
+{
+ if(timersOn)
+ {
+ qDebug("Timer(%s): %d elapsed", txt, timer.elapsed());
+ timer.restart();
+ }
+}
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/mimetype_kmy_128x128.png b/kmymoney2/mimetype_kmy_128x128.png
new file mode 100644
index 0000000..b7b0775
--- /dev/null
+++ b/kmymoney2/mimetype_kmy_128x128.png
Binary files differ
diff --git a/kmymoney2/mimetype_kmy_16x16.png b/kmymoney2/mimetype_kmy_16x16.png
new file mode 100644
index 0000000..6ba3367
--- /dev/null
+++ b/kmymoney2/mimetype_kmy_16x16.png
Binary files differ
diff --git a/kmymoney2/mimetype_kmy_32x32.png b/kmymoney2/mimetype_kmy_32x32.png
new file mode 100644
index 0000000..13a8bd2
--- /dev/null
+++ b/kmymoney2/mimetype_kmy_32x32.png
Binary files differ
diff --git a/kmymoney2/mimetype_kmy_48x48.png b/kmymoney2/mimetype_kmy_48x48.png
new file mode 100644
index 0000000..d362bf4
--- /dev/null
+++ b/kmymoney2/mimetype_kmy_48x48.png
Binary files differ
diff --git a/kmymoney2/mimetype_kmy_64x64.png b/kmymoney2/mimetype_kmy_64x64.png
new file mode 100644
index 0000000..f045903
--- /dev/null
+++ b/kmymoney2/mimetype_kmy_64x64.png
Binary files differ
diff --git a/kmymoney2/misc/Makefile.am b/kmymoney2/misc/Makefile.am
new file mode 100644
index 0000000..d078911
--- /dev/null
+++ b/kmymoney2/misc/Makefile.am
@@ -0,0 +1,19 @@
+KDE_OPTIONS = noautodist
+
+SUBDIRS =
+
+EXTRA_DIST = financequote.pl
+
+LOCAL_DIR = kmymoney2/misc
+
+install-data-local:
+ $(mkinstalldirs) $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR)
+ for file in $(EXTRA_DIST); do \
+ $(INSTALL_DATA) $(srcdir)/$$file $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR); \
+ done
+
+uninstall-local:
+ for file in $(EXTRA_DIST); do \
+ rm -f $(DESTDIR)$(kde_datadir)/$(LOCAL_DIR)/$$file; \
+ done
+
diff --git a/kmymoney2/misc/financequote.pl b/kmymoney2/misc/financequote.pl
new file mode 100644
index 0000000..201c342
--- /dev/null
+++ b/kmymoney2/misc/financequote.pl
@@ -0,0 +1,117 @@
+######################################################################
+### financequote.pl - KMyMoney interface to Finance::Quote
+###
+### derived from GnuCash finance-quote-helper script which is
+### Copyright 2001 Rob Browning <rlb@cs.utexas.edu>
+###
+### 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, contact:
+###
+### Free Software Foundation Voice: +1-617-542-5942
+### 59 Temple Place - Suite 330 Fax: +1-617-542-2652
+### Boston, MA 02111-1307, USA gnu@gnu.org
+######################################################################
+
+use diagnostics; # while testing
+use strict;
+use Data::Dumper;
+
+my $prgnam = "kmymoneyfq.pl";
+my $version = "1.00";
+# perl modules required by this routine and Finance::Quote
+my @modules = qw(Date::Manip Finance::Quote LWP XML::Parser XML::Writer);
+
+# main - check command line arguments
+
+my $testonly;
+my $listonly;
+# analyze the arguments
+foreach my $arg (@ARGV) {
+ my $listopt = "-l"; # I had a much slicker way of doing this but it stopped working...
+ my $testopt = "-t";
+ $testonly = 1 if $arg =~ $testopt;
+ $listonly = 1 if $arg =~ $listopt;
+}
+
+# test call; check that all required modules are present
+if ($testonly) {
+ my @absent_modules; # to build list of missing modules
+
+ foreach my $module (@modules) {
+ if (!eval "require $module") {
+ push (@absent_modules, $module);
+ }
+ }
+ if (@absent_modules) {
+ foreach my $module (@absent_modules) {
+ print STDERR " ".$module."\n";
+ }
+ exit 254; # missing modules exit code for kmymoney
+ }
+ exit 0;
+}
+
+# load the required modules
+foreach my $module (@modules) {
+ eval "require $module";
+ $module->import();
+}
+
+# create a finance quote object and set required parameters
+my $q = Finance::Quote->new();
+$q->set_currency(); # disable any currency conversion
+$q->timeout(60); # timeout 60 seconds
+$q->failover(0); # disable failover
+
+# process call for exchange list only
+if ($listonly) {
+ my @sources = $q->sources();
+ foreach my $source (@sources) {
+ print "$source\n";
+ }
+ exit 0;
+}
+
+my $source = $ARGV[0];
+my $symbol = $ARGV[1];
+
+#print "\tfinding price for <$symbol> from <$source>\n";
+my %qhash = $q->fetch($source, $symbol); # get price data from F::Q
+#my %qhash = ("RHATsuccess" => 1, "RHATdate" => "4/4/2004", "RHATcurrency" => "USD",
+ #"RHATbid" => "25.55", "RHATask" => "26.04");
+#print Dumper(%qhash);
+my $errcode;
+$errcode = 0;
+
+if (!%qhash) { $errcode = 1;} # no data from fq (?bad exchange?)
+ elsif ($qhash {$symbol, "success"} != 1) {$errcode = 2;} # got data but quote failed (?bad symbol?)
+ elsif (!$qhash{$symbol, "last"}) {$errcode = 3;} # can't find a price (?hmmm?)
+if ($errcode != 0) {
+ print "Error " => "$errcode";
+} else {
+ # extract the date and convert from m/d/yyyy to yyyy-mm-dd
+ my ($usdate, $month, $day, $year, $yyyymmdd);
+ $usdate = $qhash{$symbol, "date"};
+ ($month,$day,$year) = ($usdate =~ /([0-9]+)\/([0-9]+)\/([0-9]+)/);
+ # i'm sure I can do the folowing with a regex but I'm just too idle...
+ $month = "0$month" if ($month < 9);
+ $day = "0$day" if ($day < 9);
+ $yyyymmdd = "$year-$month-$day";
+ # and the price
+ # (tried having bid and ask here, but could be undef for some stocks (IBM)
+ # and looked pretty unrealistic for others (e.g. RHAT on 15/5/04 was 12.09-38.32!))
+ my $price = $qhash {$symbol, "last"};
+
+ print "\"$symbol\",\"$yyyymmdd\",\"$price\"";
+}
+
diff --git a/kmymoney2/mymoney/Makefile.am b/kmymoney2/mymoney/Makefile.am
new file mode 100644
index 0000000..84ec924
--- /dev/null
+++ b/kmymoney2/mymoney/Makefile.am
@@ -0,0 +1,50 @@
+KDE_OPTIONS = noautodist
+
+#
+# The LIBVERSION setting controls the libtool versioning system for shared
+# libraries. It is constructed out of the triplet CURRENT:REVISION:AGE.
+#
+# Here are the rules on howto update the version info:
+#
+# 1. Update the version information only immediately before a public
+# release of your software. More frequent updates are unnecessary,
+# and only guarantee that the current interface number gets larger
+# faster.
+#
+# 2. If the library source code has changed at all since the last
+# update, then increment REVISION (`C:R:A' becomes `C:r+1:A').
+#
+# 3. If any interfaces have been added, removed, or changed since the
+# last update, increment CURRENT, and set REVISION to 0.
+#
+# 4. If any interfaces have been added since the last public release,
+# then increment AGE.
+#
+# 5. If any interfaces have been removed since the last public release,
+# then set AGE to 0.
+#
+# The above information is copied from 'info libtool'.
+
+LIBVERSION=5:0:0
+
+INCLUDES = $(all_includes) -I$(top_srcdir) -I.
+lib_LTLIBRARIES = libkmm_mymoney.la
+
+libkmm_mymoney_la_METASOURCES = AUTO
+
+libkmm_mymoney_la_SOURCES = mymoneymoney.cpp mymoneyfinancialcalculator.cpp mymoneytransactionfilter.cpp mymoneyobject.cpp mymoneykeyvaluecontainer.cpp mymoneyobserver.cpp mymoneysubject.cpp mymoneysplit.cpp mymoneyinstitution.cpp mymoneyexception.cpp mymoneyinvesttransaction.cpp mymoneyutils.cpp mymoneysecurity.cpp mymoneytransaction.cpp mymoneyscheduled.cpp mymoneypayee.cpp mymoneyfile.cpp mymoneycategory.cpp mymoneyaccount.cpp mymoneyreport.cpp mymoneystatement.cpp mymoneyprice.cpp mymoneybudget.cpp mymoneyobjectcontainer.cpp mymoneyforecast.cpp
+libkmm_mymoney_la_LDFLAGS = $(all_libraries) -version-info $(LIBVERSION)
+
+SUBDIRS = storage
+
+instdir=$(includedir)/kmymoney
+inst_HEADERS = mymoneyobject.h mymoneyaccount.h mymoneycategory.h mymoneyexception.h mymoneyfile.h mymoneyfinancialcalculator.h mymoneyinstitution.h mymoneyinvesttransaction.h mymoneykeyvaluecontainer.h mymoneymoney.h mymoneyobserver.h mymoneypayee.h mymoneyprice.h mymoneyreport.h mymoneyscheduled.h mymoneysecurity.h mymoneysplit.h mymoneystatement.h mymoneysubject.h mymoneytransactionfilter.h mymoneytransaction.h mymoneyutils.h mymoneybudget.h mymoneyobjectcontainer.h mymoneyforecast.h
+
+noinst_HEADERS = autotest.h mymoneyaccounttest.h mymoneyfinancialcalculatortest.h mymoneykeyvaluecontainertest.h mymoneyexceptiontest.h mymoneyfiletest.h mymoneyinstitutiontest.h mymoneymoneytest.h mymoneyobservertest.h mymoneyscheduletest.h mymoneysplittest.h mymoneysecuritytest.h mymoneytransactiontest.h mymoneypricetest.h mymoneyobjecttest.h mymoneyforecasttest.h mymoneypayeetest.h
+
+if CPPUNIT
+check_LIBRARIES = libmymoneytest.a
+
+libmymoneytest_a_SOURCES = mymoneytransactiontest.cpp mymoneysplittest.cpp mymoneymoneytest.cpp mymoneyfiletest.cpp mymoneyaccounttest.cpp mymoneyexceptiontest.cpp mymoneyinstitutiontest.cpp mymoneykeyvaluecontainertest.cpp mymoneyscheduletest.cpp mymoneyfinancialcalculatortest.cpp mymoneysecuritytest.cpp mymoneypricetest.cpp mymoneyobjecttest.cpp mymoneyforecasttest.cpp mymoneypayeetest.cpp
+endif
+
diff --git a/kmymoney2/mymoney/autotest.h b/kmymoney2/mymoney/autotest.h
new file mode 100644
index 0000000..31b372f
--- /dev/null
+++ b/kmymoney2/mymoney/autotest.h
@@ -0,0 +1,24 @@
+/***************************************************************************
+ autotest.h
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef __AUTOTEST_H
+#define __AUTOTEST_H
+
+#include "mymoneyexception.h"
+
+void unexpectedException(MyMoneyException *e);
+
+#endif // __AUTOTEST_H
diff --git a/kmymoney2/mymoney/mymoneyaccount.cpp b/kmymoney2/mymoney/mymoneyaccount.cpp
new file mode 100644
index 0000000..8c304cd
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyaccount.cpp
@@ -0,0 +1,744 @@
+/***************************************************************************
+ mymoneyaccount.cpp
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes
+ (C) 2002 by Thomas Baumagrt
+ email : mte@users.sourceforge.net
+ ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qregexp.h>
+#include <kstandarddirs.h>
+#include <kiconloader.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyexception.h>
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneysplit.h>
+
+MyMoneyAccount::MyMoneyAccount() :
+ m_fraction(-1)
+{
+ m_accountType = UnknownAccountType;
+}
+
+MyMoneyAccount::~MyMoneyAccount()
+{
+}
+
+MyMoneyAccount::MyMoneyAccount(const QString& id, const MyMoneyAccount& right) :
+ MyMoneyObject(id)
+{
+ *this = right;
+ setId(id);
+}
+
+MyMoneyAccount::MyMoneyAccount(const QDomElement& node) :
+ MyMoneyObject(node),
+ MyMoneyKeyValueContainer(node.elementsByTagName("KEYVALUEPAIRS").item(0).toElement()),
+ m_fraction(-1)
+{
+ if("ACCOUNT" != node.tagName())
+ throw new MYMONEYEXCEPTION("Node was not ACCOUNT");
+
+ setName(node.attribute("name"));
+
+ // qDebug("Reading information for account %s", acc.name().data());
+
+ setParentAccountId(QStringEmpty(node.attribute("parentaccount")));
+ setLastModified(stringToDate(QStringEmpty(node.attribute("lastmodified"))));
+ setLastReconciliationDate(stringToDate(QStringEmpty(node.attribute("lastreconciled"))));
+
+ if(!m_lastReconciliationDate.isValid()) {
+ // for some reason, I was unable to access our own kvp at this point through
+ // the value() method. It always returned empty strings. The workaround for
+ // this is to construct a local kvp the same way as we have done before and
+ // extract the value from it.
+ //
+ // Since we want to get rid of the lastStatementDate record anyway, this seems
+ // to be ok for now. (ipwizard - 2008-08-14)
+ QString txt = MyMoneyKeyValueContainer(node.elementsByTagName("KEYVALUEPAIRS").item(0).toElement()).value("lastStatementDate");
+ if(!txt.isEmpty()) {
+ setLastReconciliationDate(QDate::fromString(txt, Qt::ISODate));
+ }
+ }
+
+ setInstitutionId(QStringEmpty(node.attribute("institution")));
+ setNumber(QStringEmpty(node.attribute("number")));
+ setOpeningDate(stringToDate(QStringEmpty(node.attribute("opened"))));
+ setCurrencyId(QStringEmpty(node.attribute("currency")));
+
+ QString tmp = QStringEmpty(node.attribute("type"));
+ bool bOK = false;
+ int type = tmp.toInt(&bOK);
+ if(bOK) {
+ setAccountType(static_cast<MyMoneyAccount::accountTypeE>(type));
+ } else {
+ qWarning("XMLREADER: Account %s had invalid or no account type information.", name().data());
+ }
+
+ if(node.hasAttribute("openingbalance")) {
+ if(!MyMoneyMoney(node.attribute("openingbalance")).isZero()) {
+ QString msg = i18n("Account %1 contains an opening balance. Please use a KMyMoney version >= 0.8 and < 0.9 to correct the problem.").arg(m_name);
+ throw new MYMONEYEXCEPTION(msg);
+ }
+ }
+ setDescription(node.attribute("description"));
+
+ m_id = QStringEmpty(node.attribute("id"));
+ // qDebug("Account %s has id of %s, type of %d, parent is %s.", acc.name().data(), id.data(), type, acc.parentAccountId().data());
+
+ // Process any Sub-Account information found inside the account entry.
+ m_accountList.clear();
+ QDomNodeList nodeList = node.elementsByTagName("SUBACCOUNTS");
+ if(nodeList.count() > 0) {
+ nodeList = nodeList.item(0).toElement().elementsByTagName("SUBACCOUNT");
+ for(unsigned int i = 0; i < nodeList.count(); ++i) {
+ addAccountId(QString(nodeList.item(i).toElement().attribute("id")));
+ }
+ }
+
+ nodeList = node.elementsByTagName("ONLINEBANKING");
+ if(nodeList.count() > 0) {
+ QDomNamedNodeMap attributes = nodeList.item(0).toElement().attributes();
+ for(unsigned int i = 0; i < attributes.count(); ++i) {
+ const QDomAttr& it_attr = attributes.item(i).toAttr();
+ m_onlineBankingSettings.setValue(it_attr.name().utf8(), it_attr.value());
+ }
+ }
+
+}
+
+void MyMoneyAccount::setName(const QString& name)
+{
+ m_name = name;
+}
+
+void MyMoneyAccount::setNumber(const QString& number)
+{
+ m_number = number;
+}
+
+void MyMoneyAccount::setDescription(const QString& desc)
+{
+ m_description = desc;
+}
+
+void MyMoneyAccount::setInstitutionId(const QString& id)
+{
+ m_institution = id;
+}
+
+void MyMoneyAccount::setLastModified(const QDate& date)
+{
+ m_lastModified = date;
+}
+
+void MyMoneyAccount::setOpeningDate(const QDate& date)
+{
+ m_openingDate = date;
+}
+
+void MyMoneyAccount::setLastReconciliationDate(const QDate& date)
+{
+ // FIXME: for a limited time (maybe until we delivered 1.0) we
+ // keep the last reconciliation date also in the KVP for backward
+ // compatability. After that, the setValue() statemetn should be removed
+ // and the XML ctor should remove the value completely from the KVP
+ setValue("lastStatementDate", date.toString(Qt::ISODate));
+ m_lastReconciliationDate = date;
+}
+
+void MyMoneyAccount::setParentAccountId(const QString& parent)
+{
+ m_parentAccount = parent;
+}
+
+void MyMoneyAccount::setAccountType(const accountTypeE type)
+{
+ m_accountType = type;
+}
+
+void MyMoneyAccount::addAccountId(const QString& account)
+{
+ if(!m_accountList.contains(account))
+ m_accountList += account;
+}
+
+void MyMoneyAccount::removeAccountIds(void)
+{
+ m_accountList.clear();
+}
+
+void MyMoneyAccount::removeAccountId(const QString& account)
+{
+ QStringList::Iterator it;
+
+ it = m_accountList.find(account);
+ if(it != m_accountList.end())
+ m_accountList.remove(it);
+}
+
+MyMoneyAccount::accountTypeE MyMoneyAccount::accountGroup(MyMoneyAccount::accountTypeE type)
+{
+ switch(type) {
+ case MyMoneyAccount::Checkings:
+ case MyMoneyAccount::Savings:
+ case MyMoneyAccount::Cash:
+ case MyMoneyAccount::Currency:
+ case MyMoneyAccount::Investment:
+ case MyMoneyAccount::MoneyMarket:
+ case MyMoneyAccount::CertificateDep:
+ case MyMoneyAccount::AssetLoan:
+ case MyMoneyAccount::Stock:
+ return MyMoneyAccount::Asset;
+
+ case MyMoneyAccount::CreditCard:
+ case MyMoneyAccount::Loan:
+ return MyMoneyAccount::Liability;
+
+ default:
+ return type;
+ }
+}
+
+bool MyMoneyAccount::operator == (const MyMoneyAccount& right) const
+{
+ return (MyMoneyKeyValueContainer::operator==(right) &&
+ MyMoneyObject::operator==(right) &&
+ (m_accountList == right.m_accountList) &&
+ (m_accountType == right.m_accountType) &&
+ (m_lastModified == right.m_lastModified) &&
+ (m_lastReconciliationDate == right.m_lastReconciliationDate) &&
+ ((m_name.length() == 0 && right.m_name.length() == 0) || (m_name == right.m_name)) &&
+ ((m_number.length() == 0 && right.m_number.length() == 0) || (m_number == right.m_number)) &&
+ ((m_description.length() == 0 && right.m_description.length() == 0) || (m_description == right.m_description)) &&
+ (m_openingDate == right.m_openingDate) &&
+ (m_parentAccount == right.m_parentAccount) &&
+ (m_currencyId == right.m_currencyId) &&
+ (m_institution == right.m_institution) );
+}
+
+MyMoneyAccount::accountTypeE MyMoneyAccount::accountGroup(void) const
+{
+ return accountGroup(m_accountType);
+}
+
+void MyMoneyAccount::setCurrencyId(const QString& id)
+{
+ m_currencyId = id;
+}
+
+bool MyMoneyAccount::isAssetLiability(void) const
+{
+ return accountGroup() == Asset || accountGroup() == Liability;
+}
+
+bool MyMoneyAccount::isIncomeExpense(void) const
+{
+ return accountGroup() == Income || accountGroup() == Expense;
+}
+
+bool MyMoneyAccount::isLoan(void) const
+{
+ return accountType() == Loan || accountType() == AssetLoan;
+}
+
+bool MyMoneyAccount::isInvest(void) const
+{
+ return accountType() == Stock;
+}
+
+
+MyMoneyAccountLoan::MyMoneyAccountLoan(const MyMoneyAccount& acc)
+ : MyMoneyAccount(acc)
+{
+}
+
+const MyMoneyMoney MyMoneyAccountLoan::loanAmount(void) const
+{
+ return MyMoneyMoney(value("loan-amount"));
+}
+
+void MyMoneyAccountLoan::setLoanAmount(const MyMoneyMoney& amount)
+{
+ setValue("loan-amount", amount.toString());
+}
+
+const MyMoneyMoney MyMoneyAccountLoan::interestRate(const QDate& date) const
+{
+ MyMoneyMoney rate;
+ QString key;
+ QString val;
+
+ if(!date.isValid())
+ return rate;
+
+ key.sprintf("ir-%04d-%02d-%02d", date.year(), date.month(), date.day());
+
+ QRegExp regExp("ir-(\\d{4})-(\\d{2})-(\\d{2})");
+
+ QMap<QString, QString>::ConstIterator it;
+
+ for(it = pairs().begin(); it != pairs().end(); ++it) {
+ if(regExp.search(it.key()) > -1) {
+ if(qstrcmp(it.key(),key) <= 0)
+ val = *it;
+ else
+ break;
+
+ } else if(!val.isEmpty())
+ break;
+ }
+
+ if(!val.isEmpty()) {
+ rate = MyMoneyMoney(val);
+ }
+
+ return rate;
+}
+
+void MyMoneyAccountLoan::setInterestRate(const QDate& date, const MyMoneyMoney& value)
+{
+ if(!date.isValid())
+ return;
+
+ QString key;
+ key.sprintf("ir-%04d-%02d-%02d", date.year(), date.month(), date.day());
+ setValue(key, value.toString());
+}
+
+MyMoneyAccountLoan::interestDueE MyMoneyAccountLoan::interestCalculation(void) const
+{
+ QString payTime(value("interest-calculation"));
+ if(payTime == "paymentDue")
+ return paymentDue;
+ return paymentReceived;
+}
+
+void MyMoneyAccountLoan::setInterestCalculation(const MyMoneyAccountLoan::interestDueE onReception)
+{
+ if(onReception == paymentDue)
+ setValue("interest-calculation", "paymentDue");
+ else
+ setValue("interest-calculation", "paymentReceived");
+}
+
+const QDate MyMoneyAccountLoan::nextInterestChange(void) const
+{
+ QDate rc;
+
+ QRegExp regExp("(\\d{4})-(\\d{2})-(\\d{2})");
+ if(regExp.search(value("interest-nextchange")) != -1) {
+ rc.setYMD(regExp.cap(1).toInt(), regExp.cap(2).toInt(), regExp.cap(3).toInt());
+ }
+ return rc;
+}
+
+void MyMoneyAccountLoan::setNextInterestChange(const QDate& date)
+{
+ setValue("interest-nextchange", date.toString(Qt::ISODate));
+}
+
+int MyMoneyAccountLoan::interestChangeFrequency(int* unit) const
+{
+ int rc = -1;
+
+ if(unit)
+ *unit = 1;
+
+ QRegExp regExp("(\\d+)/(\\d{1})");
+ if(regExp.search(value("interest-changefrequency")) != -1) {
+ rc = regExp.cap(1).toInt();
+ if(unit != 0) {
+ *unit = regExp.cap(2).toInt();
+ }
+ }
+ return rc;
+}
+
+void MyMoneyAccountLoan::setInterestChangeFrequency(const int amount, const int unit)
+{
+ QString val;
+ val.sprintf("%d/%d", amount, unit);
+ setValue("interest-changeFrequency", val);
+}
+
+const QString MyMoneyAccountLoan::schedule(void) const
+{
+ return QString(value("schedule").latin1());
+}
+
+void MyMoneyAccountLoan::setSchedule(const QString& sched)
+{
+ setValue("schedule", sched);
+}
+
+bool MyMoneyAccountLoan::fixedInterestRate(void) const
+{
+ // make sure, that an empty kvp element returns true
+ return !(value("fixed-interest") == "no");
+}
+
+void MyMoneyAccountLoan::setFixedInterestRate(const bool fixed)
+{
+ setValue("fixed-interest", fixed ? "yes" : "no");
+ if(fixed) {
+ deletePair("interest-nextchange");
+ deletePair("interest-changeFrequency");
+ }
+}
+
+const MyMoneyMoney MyMoneyAccountLoan::finalPayment(void) const
+{
+ return MyMoneyMoney(value("final-payment"));
+}
+
+void MyMoneyAccountLoan::setFinalPayment(const MyMoneyMoney& finalPayment)
+{
+ setValue("final-payment", finalPayment.toString());
+}
+
+unsigned int MyMoneyAccountLoan::term(void) const
+{
+ return value("term").toUInt();
+}
+
+void MyMoneyAccountLoan::setTerm(const unsigned int payments)
+{
+ setValue("term", QString::number(payments));
+}
+
+const MyMoneyMoney MyMoneyAccountLoan::periodicPayment(void) const
+{
+ return MyMoneyMoney(value("periodic-payment"));
+}
+
+void MyMoneyAccountLoan::setPeriodicPayment(const MyMoneyMoney& payment)
+{
+ setValue("periodic-payment", payment.toString());
+}
+
+const QString MyMoneyAccountLoan::payee(void) const
+{
+ return value("payee");
+}
+
+void MyMoneyAccountLoan::setPayee(const QString& payee)
+{
+ setValue("payee", payee);
+}
+
+const QString MyMoneyAccountLoan::interestAccountId(void) const
+{
+ return QString();
+}
+
+void MyMoneyAccountLoan::setInterestAccountId(const QString& /* id */)
+{
+
+}
+
+bool MyMoneyAccountLoan::hasReferenceTo(const QString& id) const
+{
+ return MyMoneyAccount::hasReferenceTo(id)
+ || (id == payee())
+ || (id == schedule());
+}
+
+void MyMoneyAccountLoan::setInterestCompounding(int frequency)
+{
+ setValue("compoundingFrequency", QString("%1").arg(frequency));
+}
+
+int MyMoneyAccountLoan::interestCompounding(void) const
+{
+ return value("compoundingFrequency").toInt();
+}
+
+void MyMoneyAccount::writeXML(QDomDocument& document, QDomElement& parent) const
+{
+ QDomElement el = document.createElement("ACCOUNT");
+
+ writeBaseXML(document, el);
+
+ el.setAttribute("parentaccount", parentAccountId());
+ el.setAttribute("lastreconciled", dateToString(lastReconciliationDate()));
+ el.setAttribute("lastmodified", dateToString(lastModified()));
+ el.setAttribute("institution", institutionId());
+ el.setAttribute("opened", dateToString(openingDate()));
+ el.setAttribute("number", number());
+ // el.setAttribute("openingbalance", openingBalance().toString());
+ el.setAttribute("type", accountType());
+ el.setAttribute("name", name());
+ el.setAttribute("description", description());
+ if(!currencyId().isEmpty())
+ el.setAttribute("currency", currencyId());
+
+ //Add in subaccount information, if this account has subaccounts.
+ if(accountCount())
+ {
+ QDomElement subAccounts = document.createElement("SUBACCOUNTS");
+ QStringList::ConstIterator it;
+ for(it = accountList().begin(); it != accountList().end(); ++it)
+ {
+ QDomElement temp = document.createElement("SUBACCOUNT");
+ temp.setAttribute("id", (*it));
+ subAccounts.appendChild(temp);
+ }
+
+ el.appendChild(subAccounts);
+ }
+
+ // Write online banking settings
+ if(m_onlineBankingSettings.pairs().count()) {
+ QDomElement onlinesettings = document.createElement("ONLINEBANKING");
+ QMap<QString,QString>::const_iterator it_key = m_onlineBankingSettings.pairs().begin();
+ while ( it_key != m_onlineBankingSettings.pairs().end() ) {
+ onlinesettings.setAttribute(it_key.key(), it_key.data());
+ ++it_key;
+ }
+ el.appendChild(onlinesettings);
+ }
+
+ // FIXME drop the lastStatementDate record from the KVP when it is
+ // not stored there after setLastReconciliationDate() has been changed
+ // See comment there when this will happen
+ // deletePair("lastStatementDate");
+
+
+ //Add in Key-Value Pairs for accounts.
+ MyMoneyKeyValueContainer::writeXML(document, el);
+
+ parent.appendChild(el);
+}
+
+bool MyMoneyAccount::hasReferenceTo(const QString& id) const
+{
+ return (id == m_institution) || (id == m_parentAccount) || (id == m_currencyId);
+}
+
+void MyMoneyAccount::setOnlineBankingSettings(const MyMoneyKeyValueContainer& values)
+{
+ m_onlineBankingSettings = values;
+}
+
+const MyMoneyKeyValueContainer& MyMoneyAccount::onlineBankingSettings(void) const
+{
+ return m_onlineBankingSettings;
+}
+
+void MyMoneyAccount::setClosed(bool closed)
+{
+ if(closed)
+ setValue("mm-closed", "yes");
+ else
+ deletePair("mm-closed");
+}
+
+bool MyMoneyAccount::isClosed(void) const
+{
+ return !(value("mm-closed").isEmpty());
+}
+
+int MyMoneyAccount::fraction(const MyMoneySecurity& sec) const
+{
+ int fraction;
+ if(m_accountType == Cash)
+ fraction = sec.smallestCashFraction();
+ else
+ fraction = sec.smallestAccountFraction();
+ return fraction;
+}
+
+int MyMoneyAccount::fraction(const MyMoneySecurity& sec)
+{
+ if(m_accountType == Cash)
+ m_fraction = sec.smallestCashFraction();
+ else
+ m_fraction = sec.smallestAccountFraction();
+ return m_fraction;
+}
+
+int MyMoneyAccount::fraction(void) const
+{
+ Q_ASSERT(m_fraction != -1);
+
+ return m_fraction;
+}
+
+bool MyMoneyAccount::isCategory(void) const
+{
+ return m_accountType == Income || m_accountType == Expense;
+}
+
+QString MyMoneyAccount::brokerageName(void) const
+{
+ if(m_accountType == Investment)
+ return QString("%1 (%2)").arg(m_name, i18n("Brokerage (suffix for account names)", "Brokerage"));
+ return m_name;
+}
+
+void MyMoneyAccount::adjustBalance(const MyMoneySplit& s, bool reverse)
+{
+ if(s.action() == MyMoneySplit::ActionSplitShares) {
+ if(reverse)
+ m_balance = m_balance / s.shares();
+ else
+ m_balance = m_balance * s.shares();
+ } else {
+ if(reverse)
+ m_balance -= s.shares();
+ else
+ m_balance += s.shares();
+ }
+
+}
+
+QPixmap MyMoneyAccount::accountPixmap(bool reconcileFlag, int size) const
+{
+ QString icon;
+ switch(accountType()) {
+ default:
+ if(accountGroup() == MyMoneyAccount::Asset)
+ icon = "account-types_asset";
+ else
+ icon = "account-types_liability";
+ break;
+
+ case MyMoneyAccount::Investment:
+ case MyMoneyAccount::Stock:
+ case MyMoneyAccount::MoneyMarket:
+ case MyMoneyAccount::CertificateDep:
+ icon = "account-types_investments";
+ break;
+
+ case MyMoneyAccount::Checkings:
+ icon = "account-types_checking";
+ break;
+ case MyMoneyAccount::Savings:
+ icon = "account-types_savings";
+ break;
+
+ case MyMoneyAccount::AssetLoan:
+ case MyMoneyAccount::Loan:
+ icon = "account-types_loan";
+ break;
+
+ case MyMoneyAccount::CreditCard:
+ icon = "account-types_credit-card";
+ break;
+
+ case MyMoneyAccount::Asset:
+ icon = "account-types_asset";
+ break;
+
+ case MyMoneyAccount::Cash:
+ icon = "account-types_cash";
+ break;
+
+ case MyMoneyAccount::Income:
+ icon = "account-types_income";
+ break;
+
+ case MyMoneyAccount::Expense:
+ icon = "account-types_expense";
+ break;
+
+ case MyMoneyAccount::Equity:
+ icon = "account";
+ break;
+ }
+
+ QPixmap result = DesktopIcon(icon, size);
+ if(isClosed()) {
+ QPixmap ovly = DesktopIcon("account-types_closed", size);
+ bitBlt(&result, 0, 0, &ovly, 0, 0, ovly.width(), ovly.height(), Qt::CopyROP, false);
+ } else if(reconcileFlag) {
+ QPixmap ovly = DesktopIcon("account-types_reconcile.png", size);
+ bitBlt(&result, 0, 0, &ovly, 0, 0, ovly.width(), ovly.height(), Qt::CopyROP, false);
+ } else if(!onlineBankingSettings().value("provider").isEmpty()) {
+ QPixmap ovly = DesktopIcon("account-types_online.png", size);
+ bitBlt(&result, 0, 0, &ovly, 0, 0, ovly.width(), ovly.height(), Qt::CopyROP, false);
+ }
+ return result;
+}
+
+QString MyMoneyAccount::accountTypeToString(const MyMoneyAccount::accountTypeE accountType)
+{
+ QString returnString;
+
+ switch (accountType) {
+ case MyMoneyAccount::Checkings:
+ returnString = i18n("Checking");
+ break;
+ case MyMoneyAccount::Savings:
+ returnString = i18n("Savings");
+ break;
+ case MyMoneyAccount::CreditCard:
+ returnString = i18n("Credit Card");
+ break;
+ case MyMoneyAccount::Cash:
+ returnString = i18n("Cash");
+ break;
+ case MyMoneyAccount::Loan:
+ returnString = i18n("Loan");
+ break;
+ case MyMoneyAccount::CertificateDep:
+ returnString = i18n("Certificate of Deposit");
+ break;
+ case MyMoneyAccount::Investment:
+ returnString = i18n("Investment");
+ break;
+ case MyMoneyAccount::MoneyMarket:
+ returnString = i18n("Money Market");
+ break;
+ case MyMoneyAccount::Asset:
+ returnString = i18n("Asset");
+ break;
+ case MyMoneyAccount::Liability:
+ returnString = i18n("Liability");
+ break;
+ case MyMoneyAccount::Currency:
+ returnString = i18n("Currency");
+ break;
+ case MyMoneyAccount::Income:
+ returnString = i18n("Income");
+ break;
+ case MyMoneyAccount::Expense:
+ returnString = i18n("Expense");
+ break;
+ case MyMoneyAccount::AssetLoan:
+ returnString = i18n("Investment Loan");
+ break;
+ case MyMoneyAccount::Stock:
+ returnString = i18n("Stock");
+ break;
+ case MyMoneyAccount::Equity:
+ returnString = i18n("Equity");
+ break;
+ default:
+ returnString = i18n("Unknown");
+ }
+
+ return returnString;
+}
diff --git a/kmymoney2/mymoney/mymoneyaccount.h b/kmymoney2/mymoney/mymoneyaccount.h
new file mode 100644
index 0000000..333c500
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyaccount.h
@@ -0,0 +1,692 @@
+/***************************************************************************
+ mymoneyaccount.h
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYACCOUNT_H
+#define MYMONEYACCOUNT_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstring.h>
+#include <qdatetime.h>
+#include <qvaluelist.h>
+#include <qstringlist.h>
+#include <qdom.h>
+#include <qpixmap.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneymoney.h>
+#include <kmymoney/mymoneyobject.h>
+#include <kmymoney/mymoneykeyvaluecontainer.h>
+#include <kmymoney/mymoneysecurity.h>
+#include <kmymoney/export.h>
+#include "mymoneyutils.h"
+class MyMoneyTransaction;
+class MyMoneyInstitution;
+class MyMoneySplit;
+class MyMoneyObjectContainer;
+
+/**
+ * A representation of an account.
+ * This object represents any type of account, those held at an
+ * institution as well as the accounts used for double entry
+ * accounting.
+ *
+ * Currently, the following account types are known:
+ *
+ * @li UnknownAccountType
+ * @li Checkings
+ * @li Savings
+ * @li Cash
+ * @li CreditCard
+ * @li Loan (collected)
+ * @li CertificateDep
+ * @li Investment
+ * @li MoneyMarket
+ * @li Currency
+ * @li Asset
+ * @li Liability
+ * @li Income
+ * @li Expense
+ * @li Loan (given)
+ * @li Equity
+ *
+ * @see MyMoneyInstitution
+ * @see MyMoneyFile
+ *
+ * @author Michael Edwardes 2000-2001
+ * @author Thomas Baumgart 2002
+ *
+**/
+class KMYMONEY_EXPORT MyMoneyAccount : public MyMoneyObject, public MyMoneyKeyValueContainer
+{
+ friend class MyMoneyObjectContainer;
+public:
+
+ /**
+ * Account types currently supported.
+ */
+ typedef enum _accountTypeE {
+ UnknownAccountType=0, /**< For error handling */
+ Checkings, /**< Standard checking account */
+ Savings, /**< Typical savings account */
+ Cash, /**< Denotes a shoe-box or pillowcase stuffed
+ with cash */
+ CreditCard, /**< Credit card accounts */
+ Loan, /**< Loan and mortgage accounts (liability) */
+ CertificateDep, /**< Certificates of Deposit */
+ Investment, /**< Investment account */
+ MoneyMarket, /**< Money Market Account */
+ Asset, /**< Denotes a generic asset account.*/
+ Liability, /**< Denotes a generic liability account.*/
+ Currency, /**< Denotes a currency trading account. */
+ Income, /**< Denotes an income account */
+ Expense, /**< Denotes an expense account */
+ AssetLoan, /**< Denotes a loan (asset of the owner of this object) */
+ Stock, /**< Denotes an security account as sub-account for an investment */
+ Equity, /**< Denotes an equity account e.g. opening/closeing balance */
+
+ /* insert new account types above this line */
+ MaxAccountTypes /**< Denotes the number of different account types */
+ }accountTypeE;
+
+ /**
+ * This is the constructor for a new empty account
+ */
+ MyMoneyAccount();
+
+ /**
+ * This is the constructor for a new account known to the current file
+ * This is the only constructor that will set the attribute m_openingDate
+ * to a correct value.
+ *
+ * @param id id assigned to the account
+ * @param right account definition
+ */
+ MyMoneyAccount(const QString& id, const MyMoneyAccount& right);
+
+ /**
+ * This is the constructor for an account that is described by a
+ * QDomElement (e.g. from a file).
+ *
+ * @param el const reference to the QDomElement from which to
+ * create the object
+ */
+ MyMoneyAccount(const QDomElement& el);
+
+ /**
+ * This is the destructor for any MyMoneyAccount object
+ */
+ ~MyMoneyAccount();
+
+ /**
+ * This operator tests for equality of two MyMoneyAccount objects
+ */
+ bool operator == (const MyMoneyAccount &) const;
+
+ /**
+ * This converts the account type into one of the four
+ * major account types liability, asset, expense or income.
+ *
+ * The current assignment is as follows:
+ *
+ * - Asset
+ * - Asset
+ * - Checkings
+ * - Savings
+ * - Cash
+ * - Currency
+ * - Investment
+ * - MoneyMarket
+ * - CertificateDep
+ * - AssetLoan
+ * - Stock
+ *
+ * - Liability
+ * - Liability
+ * - CreditCard
+ * - Loan
+ *
+ * - Income
+ * - Income
+ *
+ * - Expense
+ * - Expense
+ *
+ * @param type actual account type
+ * @return accountTypeE of major account type
+ */
+ static MyMoneyAccount::accountTypeE accountGroup(MyMoneyAccount::accountTypeE type);
+
+ MyMoneyAccount::accountTypeE accountGroup(void) const;
+
+ /**
+ * This method returns the id of the MyMoneyInstitution object this account
+ * belongs to.
+ * @return id of MyMoneyInstitution object. QString() if it is
+ * an internal account
+ * @see setInstitution
+ */
+ const QString& institutionId(void) const { return m_institution; }
+
+ /**
+ * This method returns the name of the account
+ * @return name of account
+ * @see setName()
+ */
+ const QString& name(void) const { return m_name; }
+
+ /**
+ * This method returns the number of the account at the institution
+ * @return number of account at the institution
+ * @see setNumber
+ */
+ const QString& number(void) const { return m_number; }
+
+ /**
+ * This method returns the descriptive text of the account.
+ * @return description of account
+ * @see setDescription
+ */
+ const QString& description(void) const { return m_description; }
+
+ /**
+ * This method returns the opening date of this account
+ * @return date of opening of this account as const QDate value
+ * @see setOpeningDate()
+ */
+ const QDate& openingDate(void) const { return m_openingDate; }
+
+ /**
+ * This method returns the date of the last reconciliation of this account
+ * @return date of last reconciliation as const QDate value
+ * @see setLastReconciliationDate
+ */
+ const QDate& lastReconciliationDate(void) const { return m_lastReconciliationDate; }
+
+ /**
+ * This method returns the date the account was last modified
+ * @return date of last modification as const QDate value
+ * @see setLastModified
+ */
+ const QDate& lastModified(void) const { return m_lastModified; }
+
+ /**
+ * This method is used to return the ID of the parent account
+ * @return QString with the ID of the parent of this account
+ */
+ const QString& parentAccountId(void) const { return m_parentAccount; };
+
+ /**
+ * This method returns the list of the account id's of
+ * subordinate accounts
+ * @return QStringList account ids
+ */
+ const QStringList& accountList(void) const { return m_accountList; };
+
+ /**
+ * This method returns the number of entries in the m_accountList
+ * @return number of entries in the accountList
+ */
+ int accountCount(void) const { return m_accountList.count(); };
+
+ /**
+ * This method is used to add an account id as sub-ordinate account
+ * @param account const QString reference to account ID
+ */
+ void addAccountId(const QString& account);
+
+ /**
+ * This method is used to remove an account from the list of
+ * sub-ordinate accounts.
+ * @param account const QString reference to account ID to be removed
+ */
+ void removeAccountId(const QString& account);
+
+ /**
+ * This method is used to remove all accounts from the list of
+ * sub-ordinate accounts.
+ */
+ void removeAccountIds(void);
+
+ /**
+ * This method is used to modify the date of the last
+ * modification access.
+ * @param date date of last modification
+ * @see lastModified
+ */
+ void setLastModified(const QDate& date);
+
+ /**
+ * This method is used to set the name of the account
+ * @param name name of the account
+ * @see name
+ */
+ void setName(const QString& name);
+
+ /**
+ * This method is used to set the number of the account at the institution
+ * @param number number of the account
+ * @see number
+ */
+ void setNumber(const QString& number);
+
+ /**
+ * This method is used to set the descriptive text of the account
+ *
+ * @param desc text that serves as description
+ * @see setDescription
+ */
+ void setDescription(const QString& desc);
+
+ /**
+ * This method is used to set the id of the institution this account
+ * belongs to.
+ *
+ * @param id id of the institution this account belongs to
+ * @see institution
+ */
+ void setInstitutionId(const QString& id);
+
+ /**
+ * This method is used to set the opening date information of an
+ * account.
+ *
+ * @param date QDate of opening date
+ * @see openingDate
+ */
+ void setOpeningDate(const QDate& date);
+
+ /**
+ * This method is used to set the date of the last reconciliation
+ * of an account.
+ * @param date QDate of last reconciliation
+ * @see lastReconciliationDate
+ */
+ void setLastReconciliationDate(const QDate& date);
+
+ /**
+ * This method is used to change the account type
+ *
+ * @param type account type
+ */
+ void setAccountType(const accountTypeE type);
+
+ /**
+ * This method is used to set a new parent account id
+ * @param parent QString reference to new parent account
+ */
+ void setParentAccountId(const QString& parent);
+
+ /**
+ * This method is used to update m_lastModified to the current date
+ */
+ void touch(void) { setLastModified(QDate::currentDate()); }
+
+ /**
+ * This method returns the type of the account.
+ */
+ accountTypeE accountType(void) const { return m_accountType; }
+
+ /**
+ * This method retrieves the id of the currency used with this account.
+ * If the return value is empty, the base currency should be used.
+ *
+ * @return id of currency
+ */
+ const QString& currencyId(void) const { return m_currencyId; };
+
+ /**
+ * This method sets the id of the currency used with this account.
+ *
+ * @param id ID of currency to be associated with this account.
+ */
+ void setCurrencyId(const QString& id);
+
+ void writeXML(QDomDocument& document, QDomElement& parent) const;
+
+ /**
+ * This method checks if a reference to the given object exists. It returns,
+ * a @p true if the object is referencing the one requested by the
+ * parameter @p id. If it does not, this method returns @p false.
+ *
+ * @param id id of the object to be checked for references
+ * @retval true This object references object with id @p id.
+ * @retval false This object does not reference the object with id @p id.
+ */
+ virtual bool hasReferenceTo(const QString& id) const;
+
+ /**
+ * This member returns the balance of this account based on
+ * all transactions stored in the journal.
+ */
+ const MyMoneyMoney& balance(void) const { return m_balance; }
+
+ /**
+ * This method adjusts the balance of this account
+ * according to the difference contained in the split @p s.
+ * If the s.action() is MyMoneySplit::ActionSplitShares then
+ * the balance will be adjusted accordingly.
+ *
+ * @param s const reference to MyMoneySplit object containing the
+ * value to be added/subtracted to/from the balance
+ * @param reverse add (false) or subtract (true) the shares contained in the split.
+ * It also affects the balance for share splits in the opposite direction.
+ */
+ void adjustBalance(const MyMoneySplit& s, bool reverse = false);
+
+ /**
+ * This method sets the balance of this account
+ * according to the value provided by @p val.
+ *
+ * @param val const reference to MyMoneyMoney object containing the
+ * value to be assigned to the balance
+ */
+ void setBalance(const MyMoneyMoney& val) { m_balance = val; }
+
+ /**
+ * This method sets the kvp's for online banking with this account
+ *
+ * @param values The container of kvp's needed when connecting to this account
+ */
+ void setOnlineBankingSettings(const MyMoneyKeyValueContainer& values);
+
+ /**
+ * This method retrieves the kvp's for online banking with this account
+ *
+ * @return The container of kvp's needed when connecting to this account
+ */
+ const MyMoneyKeyValueContainer& onlineBankingSettings(void) const;
+
+ /**
+ * This method sets the closed flag for the account. This is just
+ * an informational flag for the application. It has no other influence
+ * on the behaviour of the account object. The default for
+ * new objects @p open.
+ *
+ * @param isClosed mark the account closed (@p true) or open (@p false).
+ */
+ void setClosed(bool isClosed);
+
+ /**
+ * Return the closed flag for the account.
+ *
+ * @retval false account is marked open (the default for new accounts)
+ * @retval true account is marked closed
+ */
+ bool isClosed(void) const;
+
+ /**
+ * returns the applicable smallest fraction for this account
+ * for the given security based on the account type. At the same
+ * time, m_fraction is updated to the value returned.
+ *
+ * @param sec const reference to currency (security)
+ *
+ * @retval sec.smallestCashFraction() for account type Cash
+ * @retval sec.smallestAccountFraction() for all other account types
+ */
+ int fraction(const MyMoneySecurity& sec);
+
+ /**
+ * Same as the above method, but does not modify m_fraction.
+ */
+ int fraction(const MyMoneySecurity& sec) const;
+
+ /**
+ * This method returns the stored value for the fraction of this
+ * account or -1 if not initialized. It can be initialized by
+ * calling fraction(const MyMoneySecurity& sec) once.
+ *
+ * @note Don't use this method outside of KMyMoney application context (eg. testcases).
+ * Use the above method instead.
+ */
+ int fraction(void) const;
+
+ /**
+ * This method returns @a true if the account type is
+ * either Income or Expense
+ *
+ * @retval true account is of type income or expense
+ * @retval false for all other account types
+ *
+ * @deprecated use isIncomeExpense() instead
+ */
+ bool isCategory(void) const __attribute__ ((deprecated));
+
+ /**
+ * This method returns @a true if the account type is
+ * either Income or Expense
+ *
+ * @retval true account is of type income or expense
+ * @retval false for all other account types
+ */
+ bool isIncomeExpense(void) const;
+
+ /**
+ * This method returns @a true if the account type is
+ * either Asset or Liability
+ *
+ * @retval true account is of type asset or liability
+ * @retval false for all other account types
+ */
+ bool isAssetLiability(void) const;
+
+ /**
+ * This method returns @a true if the account type is
+ * either AssetLoan or Loan
+ *
+ * @retval true account is of type Loan or AssetLoan
+ * @retval false for all other account types
+ */
+ bool isLoan(void) const;
+
+ /**
+ * This method returns @a true if the account type is
+ * Stock
+ *
+ * @retval true account is of type Stock
+ * @retval false for all other account types
+ */
+ bool isInvest(void) const;
+
+ /**
+ * This method returns a name that has a brokerage suffix of
+ * the current name. It only works on investment accounts and
+ * returns the name for all other cases.
+ */
+ QString brokerageName(void) const;
+
+ /**
+ * @param size is a hint for the size of the icon
+ * @return a pixmap using DesktopIcon for the account type
+ */
+ QPixmap accountPixmap(bool reconcileFlag = false, int size = 0) const;
+
+ /**
+ * This method is used to convert the internal representation of
+ * an account type into a human readable format
+ *
+ * @param accountType numerical representation of the account type.
+ * For possible values, see MyMoneyAccount::accountTypeE
+ * @return QString representing the human readable form
+ */
+ static QString accountTypeToString(const MyMoneyAccount::accountTypeE accountType);
+
+ KMYMONEY_EXPORT QDataStream &operator<<( const MyMoneyAccount & );
+ KMYMONEY_EXPORT QDataStream &operator>>( MyMoneyAccount & );
+
+private:
+ /**
+ * This member variable identifies the type of account
+ */
+ accountTypeE m_accountType;
+
+ /**
+ * This member variable keeps the ID of the MyMoneyInstitution object
+ * that this object belongs to.
+ */
+ QString m_institution;
+
+ /**
+ * This member variable keeps the name of the account
+ * It is solely for documentation purposes and it's contents is not
+ * used otherwise by the mymoney-engine.
+ */
+ QString m_name;
+
+ /**
+ * This member variable keeps the account number at the institution
+ * It is solely for documentation purposes and it's contents is not
+ * used otherwise by the mymoney-engine.
+ */
+ QString m_number;
+
+ /**
+ * This member variable is a description of the account.
+ * It is solely for documentation purposes and it's contents is not
+ * used otherwise by the mymoney-engine.
+ */
+ QString m_description;
+
+ /**
+ * This member variable keeps the date when the account
+ * was last modified.
+ */
+ QDate m_lastModified;
+
+ /**
+ * This member variable keeps the date when the
+ * account was created as an object in a MyMoneyFile
+ */
+ QDate m_openingDate;
+
+ /**
+ * This member variable keeps the date of the last
+ * reconciliation of this account
+ */
+ QDate m_lastReconciliationDate;
+
+ /**
+ * This member holds the ID's of all sub-ordinate accounts
+ */
+ QStringList m_accountList;
+
+ /**
+ * This member contains the ID of the parent account
+ */
+ QString m_parentAccount;
+
+ /**
+ * This member contains the ID of the currency associated with this account
+ */
+ QString m_currencyId;
+
+ /**
+ * This member holds the balance of all transactions stored in the journal
+ * for this account.
+ */
+ MyMoneyMoney m_balance;
+
+ /**
+ * This member variable keeps the set of kvp's needed to establish
+ * online banking sessions to this account.
+ */
+ MyMoneyKeyValueContainer m_onlineBankingSettings;
+
+ /**
+ * This member keeps the fraction for the account. It is filled by MyMoneyFile
+ * when set to -1. See also @sa fraction(const MyMoneySecurity&).
+ */
+ int m_fraction;
+
+};
+
+/**
+ * This class is a convenience class to access data for loan accounts.
+ * It does contain the same member variables as a MyMoneyAccount object,
+ * but serves a set of getter/setter methods to ease the access to
+ * laon relevant data stored in the key value container of the MyMoneyAccount
+ * object.
+ */
+class KMYMONEY_EXPORT MyMoneyAccountLoan : public MyMoneyAccount
+{
+public:
+ enum interestDueE {
+ paymentDue = 0,
+ paymentReceived
+ };
+
+ enum interestChangeUnitE {
+ changeDaily = 0,
+ changeWeekly,
+ changeMonthly,
+ changeYearly
+ };
+
+ MyMoneyAccountLoan() {}
+ MyMoneyAccountLoan(const MyMoneyAccount&);
+ ~MyMoneyAccountLoan() {}
+
+ const MyMoneyMoney loanAmount(void) const;
+ void setLoanAmount(const MyMoneyMoney& amount);
+ const MyMoneyMoney interestRate(const QDate& date) const;
+ void setInterestRate(const QDate& date, const MyMoneyMoney& rate);
+ interestDueE interestCalculation(void) const;
+ void setInterestCalculation(const interestDueE onReception);
+ const QDate nextInterestChange(void) const;
+ void setNextInterestChange(const QDate& date);
+ const QString schedule(void) const;
+ void setSchedule(const QString& sched);
+ bool fixedInterestRate(void) const;
+ void setFixedInterestRate(const bool fixed);
+ const MyMoneyMoney finalPayment(void) const;
+ void setFinalPayment(const MyMoneyMoney& finalPayment);
+ unsigned int term(void) const;
+ void setTerm(const unsigned int payments);
+ int interestChangeFrequency(int* unit = 0) const;
+ void setInterestChangeFrequency(const int amount, const int unit);
+ const MyMoneyMoney periodicPayment(void) const;
+ void setPeriodicPayment(const MyMoneyMoney& payment);
+ int interestCompounding(void) const;
+ void setInterestCompounding(int frequency);
+ const QString payee(void) const;
+ void setPayee(const QString& payee);
+ const QString interestAccountId(void) const;
+ void setInterestAccountId(const QString& id);
+
+ /**
+ * This method checks if a reference to the given object exists. It returns,
+ * a @p true if the object is referencing the one requested by the
+ * parameter @p id. If it does not, this method returns @p false.
+ *
+ * @param id id of the object to be checked for references
+ * @retval true This object references object with id @p id.
+ * @retval false This object does not reference the object with id @p id.
+ */
+ virtual bool hasReferenceTo(const QString& id) const;
+
+};
+
+#endif
+
+
diff --git a/kmymoney2/mymoney/mymoneyaccounttest.cpp b/kmymoney2/mymoney/mymoneyaccounttest.cpp
new file mode 100644
index 0000000..1384c5c
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyaccounttest.cpp
@@ -0,0 +1,589 @@
+/***************************************************************************
+ mymoneyaccounttest.cpp
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "mymoneyaccounttest.h"
+#include <kmymoney/mymoneyexception.h>
+#include <kmymoney/mymoneysplit.h>
+
+MyMoneyAccountTest::MyMoneyAccountTest()
+{
+}
+
+
+void MyMoneyAccountTest::setUp () {
+}
+
+void MyMoneyAccountTest::tearDown () {
+}
+
+void MyMoneyAccountTest::testEmptyConstructor() {
+ MyMoneyAccount a;
+
+ CPPUNIT_ASSERT(a.id().isEmpty());
+ CPPUNIT_ASSERT(a.name().isEmpty());
+ CPPUNIT_ASSERT(a.accountType() == MyMoneyAccount::UnknownAccountType);
+ CPPUNIT_ASSERT(a.openingDate() == QDate());
+ CPPUNIT_ASSERT(a.lastModified() == QDate());
+ CPPUNIT_ASSERT(a.lastReconciliationDate() == QDate());
+ CPPUNIT_ASSERT(a.accountList().count() == 0);
+ CPPUNIT_ASSERT(a.balance().isZero());
+}
+
+void MyMoneyAccountTest::testConstructor() {
+ QString id = "A000001";
+ QString institutionid = "B000001";
+ QString parent = "Parent";
+ MyMoneyAccount r;
+ MyMoneySplit s;
+ r.setAccountType(MyMoneyAccount::Asset);
+ r.setOpeningDate(QDate::currentDate());
+ r.setLastModified(QDate::currentDate());
+ r.setDescription("Desc");
+ r.setNumber("465500");
+ r.setParentAccountId(parent);
+ r.setValue(QString("key"), "value");
+ s.setShares(MyMoneyMoney(1,1));
+ r.adjustBalance(s);
+ CPPUNIT_ASSERT(r.m_kvp.count() == 1);
+ CPPUNIT_ASSERT(r.value("key") == "value");
+
+ MyMoneyAccount a(id, r);
+
+ CPPUNIT_ASSERT(a.id() == id);
+ CPPUNIT_ASSERT(a.institutionId().isEmpty());
+ CPPUNIT_ASSERT(a.accountType() == MyMoneyAccount::Asset);
+ CPPUNIT_ASSERT(a.openingDate() == QDate::currentDate());
+ CPPUNIT_ASSERT(a.lastModified() == QDate::currentDate());
+ CPPUNIT_ASSERT(a.number() == "465500");
+ CPPUNIT_ASSERT(a.description() == "Desc");
+ CPPUNIT_ASSERT(a.accountList().count() == 0);
+ CPPUNIT_ASSERT(a.parentAccountId() == "Parent");
+ CPPUNIT_ASSERT(a.balance() == MyMoneyMoney(1,1));
+
+ QMap<QString, QString> copy;
+ copy = r.pairs();
+ CPPUNIT_ASSERT(copy.count() == 1);
+ CPPUNIT_ASSERT(copy[QString("key")] == "value");
+}
+
+void MyMoneyAccountTest::testSetFunctions() {
+ MyMoneyAccount a;
+
+ QDate today(QDate::currentDate());
+ CPPUNIT_ASSERT(a.name().isEmpty());
+ CPPUNIT_ASSERT(a.lastModified() == QDate());
+ CPPUNIT_ASSERT(a.description().isEmpty());
+
+ a.setName("Account");
+ a.setInstitutionId("Institution1");
+ a.setLastModified(today);
+ a.setDescription("Desc");
+ a.setNumber("123456");
+ a.setAccountType(MyMoneyAccount::MoneyMarket);
+
+ CPPUNIT_ASSERT(a.name() == "Account");
+ CPPUNIT_ASSERT(a.institutionId() == "Institution1");
+ CPPUNIT_ASSERT(a.lastModified() == today);
+ CPPUNIT_ASSERT(a.description() == "Desc");
+ CPPUNIT_ASSERT(a.number() == "123456");
+ CPPUNIT_ASSERT(a.accountType() == MyMoneyAccount::MoneyMarket);
+}
+
+void MyMoneyAccountTest::testCopyConstructor() {
+ QString id = "A000001";
+ QString institutionid = "B000001";
+ QString parent = "ParentAccount";
+ MyMoneyAccount r;
+ r.setAccountType(MyMoneyAccount::Expense);
+ r.setOpeningDate(QDate::currentDate());
+ r.setLastModified(QDate::currentDate());
+ r.setName("Account");
+ r.setInstitutionId("Inst1");
+ r.setDescription("Desc1");
+ r.setNumber("Number");
+ r.setParentAccountId(parent);
+ r.setValue("Key", "Value");
+
+ MyMoneyAccount a(id, r);
+ a.setInstitutionId(institutionid);
+
+ MyMoneyAccount b(a);
+
+ CPPUNIT_ASSERT(b.name() == "Account");
+ CPPUNIT_ASSERT(b.institutionId() == institutionid);
+ CPPUNIT_ASSERT(b.accountType() == MyMoneyAccount::Expense);
+ CPPUNIT_ASSERT(b.lastModified() == QDate::currentDate());
+ CPPUNIT_ASSERT(b.openingDate() == QDate::currentDate());
+ CPPUNIT_ASSERT(b.description() == "Desc1");
+ CPPUNIT_ASSERT(b.number() == "Number");
+ CPPUNIT_ASSERT(b.parentAccountId() == "ParentAccount");
+
+ CPPUNIT_ASSERT(b.value("Key") == "Value");
+}
+
+void MyMoneyAccountTest::testAssignmentConstructor() {
+ MyMoneyAccount a;
+ a.setAccountType(MyMoneyAccount::Checkings);
+ a.setName("Account");
+ a.setInstitutionId("Inst1");
+ a.setDescription("Bla");
+ a.setNumber("assigned Number");
+ a.setValue("Key", "Value");
+ a.addAccountId("ChildAccount");
+
+ MyMoneyAccount b;
+
+ b.setLastModified(QDate::currentDate());
+
+ b = a;
+
+ CPPUNIT_ASSERT(b.name() == "Account");
+ CPPUNIT_ASSERT(b.institutionId() == "Inst1");
+ CPPUNIT_ASSERT(b.accountType() == MyMoneyAccount::Checkings);
+ CPPUNIT_ASSERT(b.lastModified() == QDate());
+ CPPUNIT_ASSERT(b.openingDate() == a.openingDate());
+ CPPUNIT_ASSERT(b.description() == "Bla");
+ CPPUNIT_ASSERT(b.number() == "assigned Number");
+ CPPUNIT_ASSERT(b.value("Key") == "Value");
+ CPPUNIT_ASSERT(b.accountList().count() == 1);
+ CPPUNIT_ASSERT(b.accountList()[0] == "ChildAccount");
+}
+
+void MyMoneyAccountTest::testAdjustBalance() {
+ MyMoneyAccount a;
+ MyMoneySplit s;
+ s.setShares(MyMoneyMoney(3,1));
+ a.adjustBalance(s);
+ CPPUNIT_ASSERT(a.balance() == MyMoneyMoney(3,1));
+ s.setShares(MyMoneyMoney(5,1));
+ a.adjustBalance(s, true);
+ CPPUNIT_ASSERT(a.balance() == MyMoneyMoney(-2,1));
+ s.setShares(MyMoneyMoney(2,1));
+ s.setAction(MyMoneySplit::ActionSplitShares);
+ a.adjustBalance(s);
+ CPPUNIT_ASSERT(a.balance() == MyMoneyMoney(-4,1));
+ s.setShares(MyMoneyMoney(4,1));
+ s.setAction(QString());
+ a.adjustBalance(s);
+ CPPUNIT_ASSERT(a.balance().isZero());
+}
+
+void MyMoneyAccountTest::testSubAccounts()
+{
+ MyMoneyAccount a;
+ a.setAccountType(MyMoneyAccount::Checkings);
+
+ a.addAccountId("Subaccount1");
+ CPPUNIT_ASSERT(a.accountList().count() == 1);
+ a.addAccountId("Subaccount1");
+ CPPUNIT_ASSERT(a.accountList().count() == 1);
+ a.addAccountId("Subaccount2");
+ CPPUNIT_ASSERT(a.accountList().count() == 2);
+
+}
+
+void MyMoneyAccountTest::testEquality()
+{
+ MyMoneyAccount a;
+
+ a.setLastModified(QDate::currentDate());
+ a.setName("Name");
+ a.setNumber("Number");
+ a.setDescription("Desc");
+ a.setInstitutionId("I-ID");
+ a.setOpeningDate(QDate::currentDate());
+ a.setLastReconciliationDate(QDate::currentDate());
+ a.setAccountType(MyMoneyAccount::Asset);
+ a.setParentAccountId("P-ID");
+ a.setId("A-ID");
+ a.setCurrencyId("C-ID");
+ a.setValue("Key", "Value");
+
+ MyMoneyAccount b;
+
+ b = a;
+ CPPUNIT_ASSERT(b == a);
+
+ a.setName("Noname");
+ CPPUNIT_ASSERT(!(b == a));
+ b = a;
+
+ a.setLastModified(QDate::currentDate().addDays(-1));
+ CPPUNIT_ASSERT(!(b == a));
+ b = a;
+
+ a.setNumber("Nonumber");
+ CPPUNIT_ASSERT(!(b == a));
+ b = a;
+
+ a.setDescription("NoDesc");
+ CPPUNIT_ASSERT(!(b == a));
+ b = a;
+
+ a.setInstitutionId("I-noID");
+ CPPUNIT_ASSERT(!(b == a));
+ b = a;
+
+ a.setOpeningDate(QDate::currentDate().addDays(-1));
+ CPPUNIT_ASSERT(!(b == a));
+ b = a;
+
+ a.setLastReconciliationDate(QDate::currentDate().addDays(-1));
+ CPPUNIT_ASSERT(!(b == a));
+ b = a;
+
+ a.setAccountType(MyMoneyAccount::Liability);
+ CPPUNIT_ASSERT(!(b == a));
+ b = a;
+
+ a.setParentAccountId("P-noID");
+ CPPUNIT_ASSERT(!(b == a));
+ b = a;
+
+ a.setId("A-noID");
+ CPPUNIT_ASSERT(!(b == a));
+ b = a;
+
+ a.setCurrencyId("C-noID");
+ CPPUNIT_ASSERT(!(b == a));
+ b = a;
+
+ a.setValue("Key", "noValue");
+ CPPUNIT_ASSERT(!(b == a));
+ b = a;
+
+ a.setValue("noKey", "Value");
+ CPPUNIT_ASSERT(!(b == a));
+ b = a;
+
+}
+
+void MyMoneyAccountTest::testWriteXML() {
+ QString id = "A000001";
+ QString institutionid = "B000001";
+ QString parent = "Parent";
+
+ MyMoneyAccount r;
+ r.setAccountType(MyMoneyAccount::Asset);
+ r.setOpeningDate(QDate::currentDate());
+ r.setLastModified(QDate::currentDate());
+ r.setDescription("Desc");
+ r.setName("AccountName");
+ r.setNumber("465500");
+ r.setParentAccountId(parent);
+ r.setInstitutionId(institutionid);
+ r.setValue(QString("key"), "value");
+ r.addAccountId("A000002");
+ // CPPUNIT_ASSERT(r.m_kvp.count() == 1);
+ // CPPUNIT_ASSERT(r.value("key") == "value");
+
+ MyMoneyAccount a(id, r);
+
+ QDomDocument doc("TEST");
+ QDomElement el = doc.createElement("ACCOUNT-CONTAINER");
+ doc.appendChild(el);
+ a.writeXML(doc, el);
+
+ QString ref = QString(
+ "<!DOCTYPE TEST>\n"
+ "<ACCOUNT-CONTAINER>\n"
+ " <ACCOUNT parentaccount=\"Parent\" lastmodified=\"%1\" lastreconciled=\"\" institution=\"B000001\" number=\"465500\" opened=\"%2\" type=\"9\" id=\"A000001\" name=\"AccountName\" description=\"Desc\" >\n"
+ " <SUBACCOUNTS>\n"
+ " <SUBACCOUNT id=\"A000002\" />\n"
+ " </SUBACCOUNTS>\n"
+ " <KEYVALUEPAIRS>\n"
+ " <PAIR key=\"key\" value=\"value\" />\n"
+ " </KEYVALUEPAIRS>\n"
+ " </ACCOUNT>\n"
+ "</ACCOUNT-CONTAINER>\n").
+ arg(QDate::currentDate().toString(Qt::ISODate)).arg(QDate::currentDate().toString(Qt::ISODate));
+
+ CPPUNIT_ASSERT(doc.toString() == ref);
+}
+
+void MyMoneyAccountTest::testReadXML() {
+ MyMoneyAccount a;
+ QString ref_ok = QString(
+ "<!DOCTYPE TEST>\n"
+ "<ACCOUNT-CONTAINER>\n"
+ " <ACCOUNT parentaccount=\"Parent\" lastmodified=\"%1\" lastreconciled=\"\" institution=\"B000001\" number=\"465500\" opened=\"%2\" type=\"9\" id=\"A000001\" name=\"AccountName\" description=\"Desc\" >\n"
+ " <SUBACCOUNTS>\n"
+ " <SUBACCOUNT id=\"A000002\" />\n"
+ " <SUBACCOUNT id=\"A000003\" />\n"
+ " </SUBACCOUNTS>\n"
+ " <KEYVALUEPAIRS>\n"
+ " <PAIR key=\"key\" value=\"value\" />\n"
+ " <PAIR key=\"Key\" value=\"Value\" />\n"
+ " </KEYVALUEPAIRS>\n"
+ " </ACCOUNT>\n"
+ "</ACCOUNT-CONTAINER>\n").
+ arg(QDate::currentDate().toString(Qt::ISODate)).arg(QDate::currentDate().toString(Qt::ISODate));
+
+ QString ref_false = QString(
+ "<!DOCTYPE TEST>\n"
+ "<ACCOUNT-CONTAINER>\n"
+ " <KACCOUNT parentaccount=\"Parent\" lastmodified=\"%1\" lastreconciled=\"\" institution=\"B000001\" number=\"465500\" opened=\"%2\" type=\"9\" id=\"A000001\" name=\"AccountName\" description=\"Desc\" >\n"
+ " <SUBACCOUNTS>\n"
+ " <SUBACCOUNT id=\"A000002\" />\n"
+ " <SUBACCOUNT id=\"A000003\" />\n"
+ " </SUBACCOUNTS>\n"
+ " <KEYVALUEPAIRS>\n"
+ " <PAIR key=\"key\" value=\"value\" />\n"
+ " <PAIR key=\"Key\" value=\"Value\" />\n"
+ " </KEYVALUEPAIRS>\n"
+ " </KACCOUNT>\n"
+ "</ACCOUNT-CONTAINER>\n").
+ arg(QDate::currentDate().toString(Qt::ISODate)).arg(QDate::currentDate().toString(Qt::ISODate));
+
+ QDomDocument doc;
+ QDomElement node;
+ doc.setContent(ref_false);
+ node = doc.documentElement().firstChild().toElement();
+
+ try {
+ a = MyMoneyAccount(node);
+ CPPUNIT_FAIL("Missing expected exception");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+
+ doc.setContent(ref_ok);
+ node = doc.documentElement().firstChild().toElement();
+
+ a.addAccountId("TEST");
+ a.setValue("KEY", "VALUE");
+
+ try {
+ a = MyMoneyAccount(node);
+ CPPUNIT_ASSERT(a.id() == "A000001");
+ CPPUNIT_ASSERT(a.m_name == "AccountName");
+ CPPUNIT_ASSERT(a.m_parentAccount == "Parent");
+ CPPUNIT_ASSERT(a.m_lastModified == QDate::currentDate());
+ CPPUNIT_ASSERT(a.m_lastReconciliationDate == QDate());
+ CPPUNIT_ASSERT(a.m_institution == "B000001");
+ CPPUNIT_ASSERT(a.m_number == "465500");
+ CPPUNIT_ASSERT(a.m_openingDate == QDate::currentDate());
+ CPPUNIT_ASSERT(a.m_accountType == MyMoneyAccount::Asset);
+ CPPUNIT_ASSERT(a.m_description == "Desc");
+ CPPUNIT_ASSERT(a.accountList().count() == 2);
+ CPPUNIT_ASSERT(a.accountList()[0] == "A000002");
+ CPPUNIT_ASSERT(a.accountList()[1] == "A000003");
+ CPPUNIT_ASSERT(a.pairs().count() == 3);
+ CPPUNIT_ASSERT(a.value("key") == "value");
+ CPPUNIT_ASSERT(a.value("Key") == "Value");
+ CPPUNIT_ASSERT(a.value("lastStatementDate").isEmpty());
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneyAccountTest::testHasReferenceTo(void)
+{
+ MyMoneyAccount a;
+
+ a.setInstitutionId("I0001");
+ a.addAccountId("A_001");
+ a.addAccountId("A_002");
+ a.setParentAccountId("A_Parent");
+ a.setCurrencyId("Currency");
+
+ CPPUNIT_ASSERT(a.hasReferenceTo("I0001") == true);
+ CPPUNIT_ASSERT(a.hasReferenceTo("I0002") == false);
+ CPPUNIT_ASSERT(a.hasReferenceTo("A_001") == false);
+ CPPUNIT_ASSERT(a.hasReferenceTo("A_Parent") == true);
+ CPPUNIT_ASSERT(a.hasReferenceTo("Currency") == true);
+}
+
+void MyMoneyAccountTest::testSetClosed(void)
+{
+ MyMoneyAccount a;
+
+ CPPUNIT_ASSERT(a.isClosed() == false);
+ a.setClosed(true);
+ CPPUNIT_ASSERT(a.isClosed() == true);
+ a.setClosed(false);
+ CPPUNIT_ASSERT(a.isClosed() == false);
+}
+
+void MyMoneyAccountTest::testIsIncomeExpense(void)
+{
+ MyMoneyAccount a;
+
+ a.setAccountType(MyMoneyAccount::UnknownAccountType);
+ CPPUNIT_ASSERT(a.isIncomeExpense() == false);
+
+ a.setAccountType(MyMoneyAccount::Checkings);
+ CPPUNIT_ASSERT(a.isIncomeExpense() == false);
+
+ a.setAccountType(MyMoneyAccount::Savings);
+ CPPUNIT_ASSERT(a.isIncomeExpense() == false);
+
+ a.setAccountType(MyMoneyAccount::Cash);
+ CPPUNIT_ASSERT(a.isIncomeExpense() == false);
+
+ a.setAccountType(MyMoneyAccount::CreditCard);
+ CPPUNIT_ASSERT(a.isIncomeExpense() == false);
+
+ a.setAccountType(MyMoneyAccount::Loan);
+ CPPUNIT_ASSERT(a.isIncomeExpense() == false);
+
+ a.setAccountType(MyMoneyAccount::CertificateDep);
+ CPPUNIT_ASSERT(a.isIncomeExpense() == false);
+
+ a.setAccountType(MyMoneyAccount::Investment);
+ CPPUNIT_ASSERT(a.isIncomeExpense() == false);
+
+ a.setAccountType(MyMoneyAccount::MoneyMarket);
+ CPPUNIT_ASSERT(a.isIncomeExpense() == false);
+
+ a.setAccountType(MyMoneyAccount::Asset);
+ CPPUNIT_ASSERT(a.isIncomeExpense() == false);
+
+ a.setAccountType(MyMoneyAccount::Liability);
+ CPPUNIT_ASSERT(a.isIncomeExpense() == false);
+
+ a.setAccountType(MyMoneyAccount::Currency);
+ CPPUNIT_ASSERT(a.isIncomeExpense() == false);
+
+ a.setAccountType(MyMoneyAccount::Income);
+ CPPUNIT_ASSERT(a.isIncomeExpense() == true);
+
+ a.setAccountType(MyMoneyAccount::Expense);
+ CPPUNIT_ASSERT(a.isIncomeExpense() == true);
+
+ a.setAccountType(MyMoneyAccount::AssetLoan);
+ CPPUNIT_ASSERT(a.isIncomeExpense() == false);
+
+ a.setAccountType(MyMoneyAccount::Stock);
+ CPPUNIT_ASSERT(a.isIncomeExpense() == false);
+
+ a.setAccountType(MyMoneyAccount::Equity);
+ CPPUNIT_ASSERT(a.isIncomeExpense() == false);
+}
+
+void MyMoneyAccountTest::testIsAssetLiability(void)
+{
+ MyMoneyAccount a;
+
+ a.setAccountType(MyMoneyAccount::UnknownAccountType);
+ CPPUNIT_ASSERT(a.isAssetLiability() == false);
+
+ a.setAccountType(MyMoneyAccount::Checkings);
+ CPPUNIT_ASSERT(a.isAssetLiability() == true);
+
+ a.setAccountType(MyMoneyAccount::Savings);
+ CPPUNIT_ASSERT(a.isAssetLiability() == true);
+
+ a.setAccountType(MyMoneyAccount::Cash);
+ CPPUNIT_ASSERT(a.isAssetLiability() == true);
+
+ a.setAccountType(MyMoneyAccount::CreditCard);
+ CPPUNIT_ASSERT(a.isAssetLiability() == true);
+
+ a.setAccountType(MyMoneyAccount::Loan);
+ CPPUNIT_ASSERT(a.isAssetLiability() == true);
+
+ a.setAccountType(MyMoneyAccount::CertificateDep);
+ CPPUNIT_ASSERT(a.isAssetLiability() == true);
+
+ a.setAccountType(MyMoneyAccount::Investment);
+ CPPUNIT_ASSERT(a.isAssetLiability() == true);
+
+ a.setAccountType(MyMoneyAccount::MoneyMarket);
+ CPPUNIT_ASSERT(a.isAssetLiability() == true);
+
+ a.setAccountType(MyMoneyAccount::Asset);
+ CPPUNIT_ASSERT(a.isAssetLiability() == true);
+
+ a.setAccountType(MyMoneyAccount::Liability);
+ CPPUNIT_ASSERT(a.isAssetLiability() == true);
+
+ a.setAccountType(MyMoneyAccount::Currency);
+ CPPUNIT_ASSERT(a.isAssetLiability() == true);
+
+ a.setAccountType(MyMoneyAccount::Income);
+ CPPUNIT_ASSERT(a.isAssetLiability() == false);
+
+ a.setAccountType(MyMoneyAccount::Expense);
+ CPPUNIT_ASSERT(a.isAssetLiability() == false);
+
+ a.setAccountType(MyMoneyAccount::AssetLoan);
+ CPPUNIT_ASSERT(a.isAssetLiability() == true);
+
+ a.setAccountType(MyMoneyAccount::Stock);
+ CPPUNIT_ASSERT(a.isAssetLiability() == true);
+
+ a.setAccountType(MyMoneyAccount::Equity);
+ CPPUNIT_ASSERT(a.isAssetLiability() == false);
+}
+
+void MyMoneyAccountTest::testIsLoan(void)
+{
+ MyMoneyAccount a;
+
+ a.setAccountType(MyMoneyAccount::UnknownAccountType);
+ CPPUNIT_ASSERT(a.isLoan() == false);
+
+ a.setAccountType(MyMoneyAccount::Checkings);
+ CPPUNIT_ASSERT(a.isLoan() == false);
+
+ a.setAccountType(MyMoneyAccount::Savings);
+ CPPUNIT_ASSERT(a.isLoan() == false);
+
+ a.setAccountType(MyMoneyAccount::Cash);
+ CPPUNIT_ASSERT(a.isLoan() == false);
+
+ a.setAccountType(MyMoneyAccount::CreditCard);
+ CPPUNIT_ASSERT(a.isLoan() == false);
+
+ a.setAccountType(MyMoneyAccount::Loan);
+ CPPUNIT_ASSERT(a.isLoan() == true);
+
+ a.setAccountType(MyMoneyAccount::CertificateDep);
+ CPPUNIT_ASSERT(a.isLoan() == false);
+
+ a.setAccountType(MyMoneyAccount::Investment);
+ CPPUNIT_ASSERT(a.isLoan() == false);
+
+ a.setAccountType(MyMoneyAccount::MoneyMarket);
+ CPPUNIT_ASSERT(a.isLoan() == false);
+
+ a.setAccountType(MyMoneyAccount::Asset);
+ CPPUNIT_ASSERT(a.isLoan() == false);
+
+ a.setAccountType(MyMoneyAccount::Liability);
+ CPPUNIT_ASSERT(a.isLoan() == false);
+
+ a.setAccountType(MyMoneyAccount::Currency);
+ CPPUNIT_ASSERT(a.isLoan() == false);
+
+ a.setAccountType(MyMoneyAccount::Income);
+ CPPUNIT_ASSERT(a.isLoan() == false);
+
+ a.setAccountType(MyMoneyAccount::Expense);
+ CPPUNIT_ASSERT(a.isLoan() == false);
+
+ a.setAccountType(MyMoneyAccount::AssetLoan);
+ CPPUNIT_ASSERT(a.isLoan() == true);
+
+ a.setAccountType(MyMoneyAccount::Stock);
+ CPPUNIT_ASSERT(a.isLoan() == false);
+
+ a.setAccountType(MyMoneyAccount::Equity);
+ CPPUNIT_ASSERT(a.isLoan() == false);
+}
+
diff --git a/kmymoney2/mymoney/mymoneyaccounttest.h b/kmymoney2/mymoney/mymoneyaccounttest.h
new file mode 100644
index 0000000..c2af080
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyaccounttest.h
@@ -0,0 +1,70 @@
+/***************************************************************************
+ mymoneyaccounttest.h
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef __MYMONEYACCOUNTTEST_H__
+#define __MYMONEYACCOUNTTEST_H__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#define private public
+#define protected public
+#include "mymoneyaccount.h"
+#undef private
+
+class MyMoneyAccountTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(MyMoneyAccountTest);
+ CPPUNIT_TEST(testEmptyConstructor);
+ CPPUNIT_TEST(testConstructor);
+ CPPUNIT_TEST(testSetFunctions);
+ CPPUNIT_TEST(testCopyConstructor);
+ CPPUNIT_TEST(testAssignmentConstructor);
+ CPPUNIT_TEST(testSubAccounts);
+ CPPUNIT_TEST(testEquality);
+ CPPUNIT_TEST(testWriteXML);
+ CPPUNIT_TEST(testReadXML);
+ CPPUNIT_TEST(testHasReferenceTo);
+ CPPUNIT_TEST(testAdjustBalance);
+ CPPUNIT_TEST(testSetClosed);
+ CPPUNIT_TEST(testIsIncomeExpense);
+ CPPUNIT_TEST(testIsAssetLiability);
+ CPPUNIT_TEST(testIsLoan);
+ CPPUNIT_TEST_SUITE_END();
+
+protected:
+ MyMoneyAccount *m;
+
+public:
+ MyMoneyAccountTest();
+ void setUp ();
+ void tearDown ();
+ void testEmptyConstructor();
+ void testConstructor();
+ void testSetFunctions();
+ void testCopyConstructor();
+ void testAssignmentConstructor();
+ void testSubAccounts();
+ void testEquality();
+ void testWriteXML();
+ void testReadXML();
+ void testHasReferenceTo();
+ void testAdjustBalance();
+ void testSetClosed();
+ void testIsIncomeExpense();
+ void testIsAssetLiability();
+ void testIsLoan();
+};
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneybudget.cpp b/kmymoney2/mymoney/mymoneybudget.cpp
new file mode 100644
index 0000000..46b8ca8
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneybudget.cpp
@@ -0,0 +1,354 @@
+/***************************************************************************
+ mymoneybudget.cpp
+ -------------------
+ begin : Sun July 4 2004
+ copyright : (C) 2004-2005 by Ace Jones
+ email : acejones@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstring.h>
+#include <qdom.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoneybudget.h"
+
+const QStringList MyMoneyBudget::AccountGroup::kBudgetLevelText = QStringList::split(",","none,monthly,monthbymonth,yearly,invalid",true);
+const int BUDGET_VERSION = 2;
+
+bool MyMoneyBudget::AccountGroup::isZero(void) const
+{
+ return (!m_budgetsubaccounts && m_budgetlevel == eMonthly && balance().isZero());
+}
+
+void MyMoneyBudget::AccountGroup::convertToMonthly(void)
+{
+ MyMoneyBudget::PeriodGroup period;
+
+ switch(m_budgetlevel) {
+ case eYearly:
+ case eMonthByMonth:
+ period = *(m_periods.begin()); // make him monthly
+ period.setAmount(balance() / MyMoneyMoney(12,1));
+ clearPeriods();
+ addPeriod(period.startDate(), period);
+ break;
+ default:
+ break;
+ }
+ m_budgetlevel = eMonthly;
+}
+
+void MyMoneyBudget::AccountGroup::convertToYearly(void)
+{
+ MyMoneyBudget::PeriodGroup period;
+
+ switch(m_budgetlevel) {
+ case eMonthByMonth:
+ case eMonthly:
+ period = *(m_periods.begin()); // make him monthly
+ period.setAmount(totalBalance());
+ clearPeriods();
+ addPeriod(period.startDate(), period);
+ break;
+ default:
+ break;
+ }
+ m_budgetlevel = eYearly;
+}
+
+void MyMoneyBudget::AccountGroup::convertToMonthByMonth(void)
+{
+ MyMoneyBudget::PeriodGroup period;
+ QDate date;
+
+ switch(m_budgetlevel) {
+ case eMonthByMonth:
+ case eMonthly:
+ period = *(m_periods.begin());
+ period.setAmount(totalBalance() / MyMoneyMoney(12,1));
+ clearPeriods();
+ date = period.startDate();
+ for(int i = 0; i < 12; ++i) {
+ addPeriod(date, period);
+ date = date.addMonths(1);
+ period.setStartDate(date);
+ }
+ break;
+ default:
+ break;
+ }
+ m_budgetlevel = eYearly;
+}
+
+MyMoneyBudget::AccountGroup MyMoneyBudget::AccountGroup::operator += (const MyMoneyBudget::AccountGroup& _r)
+{
+ MyMoneyBudget::AccountGroup r(_r);
+
+ // make both operands based on the same budget level
+ if(m_budgetlevel != r.m_budgetlevel) {
+ if(m_budgetlevel == eMonthly) { // my budget is monthly
+ if(r.m_budgetlevel == eYearly) { // his his yearly
+ r.convertToMonthly();
+ } else if(r.m_budgetlevel == eMonthByMonth) { // his is month by month
+ convertToMonthByMonth();
+ }
+ } else if(m_budgetlevel == eYearly) { // my budget is yearly
+ if(r.m_budgetlevel == eMonthly) { // his is monthly
+ r.convertToYearly();
+ } else if(r.m_budgetlevel == eMonthByMonth) { // his is month by month
+ convertToMonthByMonth();
+ }
+ } else if(m_budgetlevel == eMonthByMonth) { // my budget is month by month
+ r.convertToMonthByMonth();
+ }
+ }
+
+ // now both budgets should be of the same type and we simply need
+ // to iterate over the period list and add the values
+ QMap<QDate, MyMoneyBudget::PeriodGroup> periods = m_periods;
+ QMap<QDate, MyMoneyBudget::PeriodGroup> rPeriods = r.m_periods;
+ QMap<QDate, MyMoneyBudget::PeriodGroup>::const_iterator it_p;
+ QMap<QDate, MyMoneyBudget::PeriodGroup>::const_iterator it_pr;
+ m_periods.clear();
+ it_p = periods.begin();
+ it_pr = rPeriods.begin();
+ QDate date = (*it_p).startDate();
+ while(it_p != periods.end()) {
+ MyMoneyBudget::PeriodGroup period = *it_p;
+ if(it_pr != rPeriods.end()) {
+ period.setAmount(period.amount() + (*it_pr).amount());
+ ++it_pr;
+ }
+ addPeriod(date, period);
+ date = date.addMonths(1);
+ ++it_p;
+ }
+ return *this;
+}
+
+bool MyMoneyBudget::AccountGroup::operator == (const AccountGroup &r) const
+{
+ return (m_id == r.m_id
+ && m_budgetlevel == r.m_budgetlevel
+ && m_budgetsubaccounts == r.m_budgetsubaccounts
+ && m_periods.keys() == r.m_periods.keys()
+ && m_periods.values() == r.m_periods.values());
+}
+
+MyMoneyBudget::MyMoneyBudget(void) :
+ m_name("Unconfigured Budget")
+{
+}
+
+MyMoneyBudget::MyMoneyBudget(const QString& _name) :
+ m_name(_name)
+{
+}
+
+MyMoneyBudget::MyMoneyBudget(const QDomElement& node) :
+ MyMoneyObject(node)
+{
+ if(!read(node))
+ clearId();
+}
+
+MyMoneyBudget::MyMoneyBudget(const QString& id, const MyMoneyBudget& budget)
+{
+ *this = budget;
+ m_id = id;
+}
+
+MyMoneyBudget::~MyMoneyBudget()
+{
+}
+
+bool MyMoneyBudget::operator == (const MyMoneyBudget& right) const
+{
+ return (MyMoneyObject::operator==(right) &&
+ (m_accounts.count() == right.m_accounts.count()) &&
+ (m_accounts.keys() == right.m_accounts.keys()) &&
+ (m_accounts.values() == right.m_accounts.values()) &&
+ (m_name == right.m_name) &&
+ (m_start == right.m_start) );
+}
+
+void MyMoneyBudget::write(QDomElement& e, QDomDocument *doc) const
+{
+ writeBaseXML(*doc, e);
+
+ e.setAttribute("name", m_name);
+ e.setAttribute("start", m_start.toString(Qt::ISODate) );
+ e.setAttribute("version", BUDGET_VERSION);
+
+ QMap<QString, AccountGroup>::const_iterator it;
+ for(it = m_accounts.begin(); it != m_accounts.end(); ++it) {
+ // only add the account if there is a budget entered
+ if(!(*it).balance().isZero()) {
+ QDomElement domAccount = doc->createElement("ACCOUNT");
+ domAccount.setAttribute("id", it.key());
+ domAccount.setAttribute("budgetlevel", AccountGroup::kBudgetLevelText[it.data().budgetLevel()]);
+ domAccount.setAttribute("budgetsubaccounts", it.data().budgetSubaccounts());
+
+ const QMap<QDate, PeriodGroup> periods = it.data().getPeriods();
+ QMap<QDate, PeriodGroup>::const_iterator it_per;
+ for(it_per = periods.begin(); it_per != periods.end(); ++it_per) {
+ if(!(*it_per).amount().isZero()) {
+ QDomElement domPeriod = doc->createElement("PERIOD");
+
+ domPeriod.setAttribute("amount", (*it_per).amount().toString());
+ domPeriod.setAttribute("start", (*it_per).startDate().toString(Qt::ISODate));
+ domAccount.appendChild(domPeriod);
+ }
+ }
+
+ e.appendChild(domAccount);
+ }
+ }
+}
+
+bool MyMoneyBudget::read(const QDomElement& e)
+{
+ // The goal of this reading method is 100% backward AND 100% forward
+ // compatability. Any Budget ever created with any version of KMyMoney
+ // should be able to be loaded by this method (as long as it's one of the
+ // Budget types supported in this version, of course)
+
+ bool result = false;
+
+ if ("BUDGET" == e.tagName())
+ {
+ result = true;
+ m_name = e.attribute("name");
+ m_start = QDate::fromString(e.attribute("start"), Qt::ISODate);
+ m_id = e.attribute("id");
+
+ QDomNode child = e.firstChild();
+ while(!child.isNull() && child.isElement())
+ {
+ QDomElement c = child.toElement();
+
+ AccountGroup account;
+
+ if("ACCOUNT" == c.tagName()) {
+ if(c.hasAttribute("id"))
+ account.setId(c.attribute("id"));
+
+ if(c.hasAttribute("budgetlevel")) {
+ int i = AccountGroup::kBudgetLevelText.findIndex(c.attribute("budgetlevel"));
+ if ( i != -1 )
+ account.setBudgetLevel(static_cast<AccountGroup::eBudgetLevel>(i));
+ }
+
+ if(c.hasAttribute("budgetsubaccounts"))
+ account.setBudgetSubaccounts(c.attribute("budgetsubaccounts").toUInt());
+ }
+
+ QDomNode period = c.firstChild();
+ while(!period.isNull() && period.isElement())
+ {
+ QDomElement per = period.toElement();
+ PeriodGroup pGroup;
+
+ if("PERIOD" == per.tagName() && per.hasAttribute("amount") && per.hasAttribute("start"))
+ {
+ pGroup.setAmount( MyMoneyMoney(per.attribute("amount")) );
+ pGroup.setStartDate( QDate::fromString(per.attribute("start"), Qt::ISODate) );
+ account.addPeriod(pGroup.startDate(), pGroup);
+ }
+
+ period = period.nextSibling();
+ }
+
+ m_accounts[account.id()] = account;
+
+ child = child.nextSibling();
+ }
+ }
+
+ return result;
+}
+
+void MyMoneyBudget::writeXML(QDomDocument& document, QDomElement& parent) const
+{
+ QDomElement el = document.createElement("BUDGET");
+ write(el,&document);
+ parent.appendChild(el);
+}
+
+bool MyMoneyBudget::hasReferenceTo(const QString& id) const
+{
+ // return true if we have an assignment for this id
+ return (m_accounts.contains(id));
+}
+
+void MyMoneyBudget::removeReference(const QString& id)
+{
+ if(m_accounts.contains(id)) {
+ m_accounts.remove(id);
+ }
+}
+
+void MyMoneyBudget::setAccount(const AccountGroup &_account, const QString _id)
+{
+ if(_account.isZero()) {
+ m_accounts.remove(_id);
+ } else {
+ // make sure we store a correct id
+ AccountGroup account(_account);
+ if(account.id() != _id)
+ account.setId(_id);
+ m_accounts[_id] = account;
+ }
+}
+
+const MyMoneyBudget::AccountGroup& MyMoneyBudget::account(const QString _id) const
+{
+ static AccountGroup empty;
+
+ if ( m_accounts.contains(_id) )
+ return m_accounts[_id];
+ return empty;
+}
+
+void MyMoneyBudget::setBudgetStart(const QDate& _start)
+{
+ QDate oldDate = QDate(m_start.year(), m_start.month(), 1);
+ m_start = QDate(_start.year(), _start.month(), 1);
+ if(oldDate.isValid()) {
+ int adjust = ((m_start.year() - oldDate.year())*12) + (m_start.month() - oldDate.month());
+ QMap<QString, AccountGroup>::iterator it;
+ for(it = m_accounts.begin(); it != m_accounts.end(); ++it) {
+ const QMap<QDate, PeriodGroup> periods = (*it).getPeriods();
+ QMap<QDate, PeriodGroup>::const_iterator it_per;
+ (*it).clearPeriods();
+ for(it_per = periods.begin(); it_per != periods.end(); ++it_per) {
+ PeriodGroup pgroup = (*it_per);
+ pgroup.setStartDate(pgroup.startDate().addMonths(adjust));
+ (*it).addPeriod(pgroup.startDate(), pgroup);
+ }
+ }
+ }
+}
+
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/mymoney/mymoneybudget.h b/kmymoney2/mymoney/mymoneybudget.h
new file mode 100644
index 0000000..a2eea02
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneybudget.h
@@ -0,0 +1,269 @@
+/***************************************************************************
+ mymoneybudget.h
+ -------------------
+ begin : Sun Jan 22 2006
+ copyright : (C) 2006 by Darren Gould
+ email : darren_gould@gmx.de
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYBUDGET_H
+#define MYMONEYBUDGET_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qmap.h>
+#include <qvaluelist.h>
+#include <qstring.h>
+class QDomElement;
+class QDomDocument;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyobject.h>
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneymoney.h>
+#include <kmymoney/export.h>
+
+/**
+ * This class defines a Budget within the MyMoneyEngine. The Budget class
+ * contains all the configuration parameters needed to run a Budget, plus
+ * XML serialization.
+ *
+ * As noted above, this class only provides a Budget DEFINITION. The
+ * generation and presentation of the Budget itself are left to higher
+ * level classes.
+ *
+ * @author Darren Gould <darren_gould@gmx.de>
+ */
+class KMYMONEY_EXPORT MyMoneyBudget: public MyMoneyObject
+{
+public:
+ MyMoneyBudget(void);
+ ~MyMoneyBudget();
+ MyMoneyBudget(const QString& _name);
+ /**
+ * This constructor creates an object based on the data found in the
+ * QDomElement referenced by @p node. If problems arise, the @p id of
+ * the object is cleared (see MyMoneyObject::clearId()).
+ */
+ MyMoneyBudget(const QDomElement& node);
+
+ /**
+ * This constructor creates an object based on the data found in the
+ * MyMoneyBudget budget object.
+ */
+ MyMoneyBudget(const QString& id, const MyMoneyBudget& budget);
+
+ /**
+ * Helper class for MyMoneyBudget
+ *
+ * This is an abstraction of the PERIOD stored in the BUDGET/ACCOUNT tag in XML
+ *
+ * @author Darren Gould
+ */
+ class PeriodGroup
+ {
+ public:
+ // get functions
+ const QDate& startDate ( void ) const { return m_start; }
+ const MyMoneyMoney& amount( void ) const { return m_amount; }
+
+ // set functions
+ void setStartDate ( const QDate& _start ) { m_start = _start; }
+ void setAmount( const MyMoneyMoney& _amount ) { m_amount = _amount;}
+
+ bool operator == (const PeriodGroup &r) const { return (m_start == r.m_start && m_amount == r.m_amount); }
+
+ private:
+ QDate m_start;
+ MyMoneyMoney m_amount;
+ };
+
+ /**
+ * Helper class for MyMoneyBudget
+ *
+ * This is an abstraction of the Account Data stored in the BUDGET tag in XML
+ *
+ * @author Darren Gould
+ */
+ class AccountGroup
+ {
+ public:
+ typedef enum
+ {
+ eNone = 0,
+ eMonthly,
+ eMonthByMonth,
+ eYearly,
+ eMax
+ } eBudgetLevel;
+
+ static const QStringList kBudgetLevelText;
+
+ public:
+ AccountGroup() : m_budgetlevel(eNone), m_budgetsubaccounts(false) {}
+
+ // get functions
+ const QString& id( void ) const { return m_id; }
+ bool budgetSubaccounts( void ) const { return m_budgetsubaccounts; }
+ eBudgetLevel budgetLevel( void ) const { return m_budgetlevel; }
+ const PeriodGroup& period( const QDate &_date ) const { return m_periods[_date]; }
+ const QMap<QDate, PeriodGroup>& getPeriods( void ) const { return m_periods; }
+ void clearPeriods(void) { m_periods.clear(); }
+ const MyMoneyMoney balance( void ) const
+ {
+ MyMoneyMoney balance;
+
+ QMap<QDate, PeriodGroup>::const_iterator it;
+ for(it = m_periods.begin(); it != m_periods.end(); ++it)
+ {
+ balance += (*it).amount();
+ }
+ return balance;
+ };
+
+ const MyMoneyMoney totalBalance(void) const
+ {
+ MyMoneyMoney bal = balance();
+ switch(m_budgetlevel) {
+ default:
+ break;
+ case eMonthly:
+ bal = bal * 12;
+ break;
+ }
+ return bal;
+ }
+
+ // set functions
+ void setId( QString _id ) { m_id = _id; }
+ void setBudgetLevel( eBudgetLevel _level ) { m_budgetlevel = _level; }
+ void setBudgetSubaccounts( bool _b ) { m_budgetsubaccounts = _b; }
+ void addPeriod( const QDate& _date, PeriodGroup &period ) { m_periods[_date] = period; }
+
+ // This member adds the value of another account group
+ // m_budgetlevel is adjusted to the larger one of both
+ // m_budgetsubaccounts remains unaffected
+ AccountGroup operator += (const AccountGroup& r);
+
+ bool operator == (const AccountGroup &r) const;
+
+ bool isZero(void) const;
+
+ protected:
+ void convertToMonthly(void);
+ void convertToYearly(void);
+ void convertToMonthByMonth(void);
+
+ private:
+ QString m_id;
+
+ eBudgetLevel m_budgetlevel;
+ bool m_budgetsubaccounts;
+ QMap<QDate, PeriodGroup> m_periods;
+ };
+
+ /**
+ * This operator tests for equality of two MyMoneyBudget objects
+ */
+ bool operator == (const MyMoneyBudget &) const;
+
+ // Simple get operations
+ const QString& name(void) const { return m_name; }
+ const QDate& budgetStart(void) const { return m_start; }
+ QString id(void) const { return m_id; }
+ const AccountGroup & account(const QString _id) const;
+ bool contains(const QString _id) const { return m_accounts.contains(_id); }
+ QValueList<AccountGroup> getaccounts(void) const { return m_accounts.values(); }
+
+ // Simple set operations
+ void setName(const QString& _name) { m_name = _name; }
+ void setBudgetStart(const QDate& _start);
+ void setAccount(const AccountGroup &_account, const QString _id);
+
+ /**
+ * This method writes this Budget to the DOM element @p e,
+ * within the DOM document @p doc.
+ *
+ * @param e The element which should be populated with info from this Budget
+ * @param doc The document which we can use to create new sub-elements
+ * if needed
+ */
+ void write(QDomElement& e, QDomDocument *doc) const;
+
+ /**
+ * This method reads a Budget from the DOM element @p e, and
+ * populates this Budget with the results.
+ *
+ * @param e The element from which the Budget should be read
+ *
+ * @return bool True if a Budget was successfully loaded from the
+ * element @p e. If false is returned, the contents of this Budget
+ * object are undefined.
+ */
+ bool read(const QDomElement& e);
+
+ /**
+ * This method creates a QDomElement for the @p document
+ * under the parent node @p parent. (This version overwrites the
+ * MMObject base class.)
+ *
+ * @param document reference to QDomDocument
+ * @param parent reference to QDomElement parent node
+ */
+ virtual void writeXML(QDomDocument& document, QDomElement& parent) const;
+
+ /**
+ * This method checks if a reference to the given object exists. It returns,
+ * a @p true if the object is referencing the one requested by the
+ * parameter @p id and the balance() returned is zero.
+ * If it does not, this method returns @p false.
+ *
+ * @param id id of the object to be checked for references
+ * @retval true This object references object with id @p id.
+ * @retval false This object does not reference the object with id @p id.
+ */
+ virtual bool hasReferenceTo(const QString& id) const;
+
+ /**
+ * This member removes all references to object identified by @p id. Used
+ * to remove objects which are about to be removed from the engine.
+ */
+ void removeReference(const QString& id);
+
+private:
+ /**
+ * The user-assigned name of the Budget
+ */
+ QString m_name;
+
+ /**
+ * The user-assigned year of the Budget
+ */
+ QDate m_start;
+
+ /**
+ * Map the budgeted accounts
+ *
+ * Each account Id is stored against the AccountGroup information
+ */
+ QMap<QString, AccountGroup> m_accounts;
+};
+
+#endif // MYMONEYBudget_H
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/mymoney/mymoneycategory.cpp b/kmymoney2/mymoney/mymoneycategory.cpp
new file mode 100644
index 0000000..5bf55ab
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneycategory.cpp
@@ -0,0 +1,170 @@
+/***************************************************************************
+ mymoneycategory.cpp
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "mymoneycategory.h"
+
+MyMoneyCategory::MyMoneyCategory()
+{
+ m_income = true;
+}
+
+MyMoneyCategory::MyMoneyCategory(const bool income, const QString name)
+{
+ m_income = income;
+ m_name = name;
+}
+
+MyMoneyCategory::MyMoneyCategory(const bool income, const QString name, QStringList minors)
+{
+ m_income = income;
+ m_name = name;
+ m_minorCategories = minors;
+}
+
+MyMoneyCategory::~MyMoneyCategory()
+{
+}
+
+// Functions use the find method to search the list
+bool MyMoneyCategory::addMinorCategory(const QString val)
+{
+ if (val.isEmpty() || val.isNull())
+ return false;
+
+ if (m_minorCategories.find(val) == m_minorCategories.end()) {
+ m_minorCategories.append(val);
+ return true;
+ }
+
+ return false;
+}
+
+bool MyMoneyCategory::removeMinorCategory(const QString val)
+{
+ if (val.isEmpty() || val.isNull())
+ return false;
+
+ if (m_minorCategories.find(val) != m_minorCategories.end()) {
+ m_minorCategories.remove(val);
+ return true;
+ }
+
+ return false;
+}
+
+bool MyMoneyCategory::renameMinorCategory(const QString oldVal, const QString newVal)
+{
+ if (oldVal.isEmpty() || oldVal.isNull() || newVal.isEmpty() || newVal.isNull())
+ return false;
+
+ if (m_minorCategories.find(oldVal) != m_minorCategories.end() &&
+ m_minorCategories.find(newVal) == m_minorCategories.end() ) {
+
+ m_minorCategories.remove(oldVal);
+ return addMinorCategory(newVal);
+ }
+
+ return false;
+}
+
+bool MyMoneyCategory::addMinorCategory(QStringList values)
+{
+ for (QStringList::Iterator it = values.begin(); it!=values.end(); ++it) {
+ addMinorCategory(*it);
+ }
+
+ return true;
+}
+
+bool MyMoneyCategory::setMinorCategories(QStringList values)
+{
+ m_minorCategories.clear();
+ return addMinorCategory(values);
+}
+
+bool MyMoneyCategory::removeAllMinors(void)
+{
+ m_minorCategories.clear();
+ return true;
+}
+
+QString MyMoneyCategory::firstMinor(void)
+{
+ return m_minorCategories.first();
+}
+
+MyMoneyCategory::MyMoneyCategory(const MyMoneyCategory& right)
+{
+ m_income = right.m_income;
+ m_name = right.m_name;
+ m_minorCategories.clear();
+ m_minorCategories = right.m_minorCategories;
+}
+
+MyMoneyCategory& MyMoneyCategory::operator = (const MyMoneyCategory& right)
+{
+ m_income = right.m_income;
+ m_name = right.m_name;
+ m_minorCategories.clear();
+ m_minorCategories = right.m_minorCategories;
+ return *this;
+}
+
+QDataStream &operator<<(QDataStream &s, MyMoneyCategory &category)
+{
+ if (category.m_income)
+ s << (Q_INT32)1;
+ else
+ s << (Q_INT32)0;
+
+ s << category.m_name;
+
+ s << (Q_UINT32)category.m_minorCategories.count();
+ for (QStringList::Iterator it = category.m_minorCategories.begin(); it!=category.m_minorCategories.end(); ++it) {
+ s << (*it);
+ }
+
+ return s;
+}
+
+QDataStream &operator>>(QDataStream &s, MyMoneyCategory &category)
+{
+ Q_INT32 inc;
+ s >> inc;
+ if (inc==0)
+ category.m_income = false;
+ else
+ category.m_income = true;
+
+ s >> category.m_name;
+
+ Q_UINT32 minorCount;
+ QString buffer;
+
+ s >> minorCount;
+ category.m_minorCategories.clear();
+ for (unsigned int i=0; i<minorCount; i++) {
+ s >> buffer;
+ category.m_minorCategories.append(buffer);
+ }
+
+ return s;
+}
+
+void MyMoneyCategory::clear(void)
+{
+ m_minorCategories.clear();
+}
diff --git a/kmymoney2/mymoney/mymoneycategory.h b/kmymoney2/mymoney/mymoneycategory.h
new file mode 100644
index 0000000..3f4babc
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneycategory.h
@@ -0,0 +1,68 @@
+/***************************************************************************
+ mymoneycategory.h
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYCATEGORY_H
+#define MYMONEYCATEGORY_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstring.h>
+#include <qstringlist.h>
+
+/**
+ * @deprecated This class represents an Income or Expense category. Please don't
+ * use it anymore, as it will be removed sooner or later.
+ */
+class MyMoneyCategory {
+ bool m_income; // if false, m_income == expense
+ QString m_name;
+ QStringList m_minorCategories;
+
+ friend QDataStream &operator<<(QDataStream &, MyMoneyCategory &);
+ friend QDataStream &operator>>(QDataStream &, MyMoneyCategory &);
+
+public:
+ MyMoneyCategory();
+ MyMoneyCategory(const bool income, const QString name);
+ MyMoneyCategory(const bool income, const QString name, QStringList minors);
+ ~MyMoneyCategory();
+
+ // Simple get operations
+ QString name(void) { return m_name; }
+ QStringList& minorCategories(void) { return m_minorCategories; }
+
+ // Simple set operations
+ bool isIncome(void) { return m_income; }
+ void setIncome(const bool val) { m_income = val; }
+ void setName(const QString val) { m_name = val; }
+
+ bool setMinorCategories(QStringList values);
+ bool addMinorCategory(const QString val);
+ bool removeMinorCategory(const QString val);
+ bool renameMinorCategory(const QString oldVal, const QString newVal);
+ bool addMinorCategory(QStringList values);
+ bool removeAllMinors(void);
+ QString firstMinor(void);
+
+ void clear(void);
+
+ // Copy constructors
+ MyMoneyCategory(const MyMoneyCategory&);
+ MyMoneyCategory& operator = (const MyMoneyCategory&);
+};
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneyexception.cpp b/kmymoney2/mymoney/mymoneyexception.cpp
new file mode 100644
index 0000000..6b61e67
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyexception.cpp
@@ -0,0 +1,35 @@
+/***************************************************************************
+ mymoneyexception.cpp - description
+ -------------------
+ begin : Sun Apr 28 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "mymoneyexception.h"
+
+MyMoneyException::MyMoneyException(const QString& msg, const QString& file, const unsigned long line)
+{
+ // qDebug("MyMoneyException(%s,%s,%d)", msg.data(), file.data(), line);
+ m_msg = msg;
+ m_file = file;
+ m_line = line;
+}
+
+MyMoneyException::~MyMoneyException()
+{
+}
diff --git a/kmymoney2/mymoney/mymoneyexception.h b/kmymoney2/mymoney/mymoneyexception.h
new file mode 100644
index 0000000..68cf2af
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyexception.h
@@ -0,0 +1,115 @@
+/***************************************************************************
+ mymoneyexception.h - description
+ -------------------
+ begin : Sun Apr 28 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYEXCEPTION_H
+#define MYMONEYEXCEPTION_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstring.h>
+#include <kmymoney/export.h>
+/**
+ * @file
+ * @author Thomas Baumgart
+ */
+
+/**
+ * This class describes an exception that is thrown by the engine
+ * in case of a failure.
+ */
+class KMYMONEY_EXPORT MyMoneyException {
+public:
+
+/**
+ * @def MYMONEYEXCEPTION(text)
+ * This is the preferred constructor to create a new exception
+ * object. It automatically inserts the filename and the source
+ * code line into the object upon creation.
+ *
+ * It is equivilant to MyMoneyException(text, __FILE__, __LINE__)
+ */
+#define MYMONEYEXCEPTION(a) MyMoneyException(a, __FILE__, __LINE__)
+
+ /**
+ * The constructor to create a new MyMoneyException object.
+ *
+ * @param msg reference to QString containing the message
+ * @param file reference to QString containing the name of the sourcefile where
+ * the exception was thrown
+ * @param line unsigned long containing the line number of the line where
+ * the exception was thrown in the file.
+ *
+ * An easier way to use this constructor is to use the macro
+ * MYMONEYEXCEPTION(text) instead. It automatically assigns the file
+ * and line parameter to the correct values.
+ */
+ MyMoneyException(const QString& msg, const QString& file, const unsigned long line);
+
+ ~MyMoneyException();
+
+ /**
+ * This method is used to return the message that was passed
+ * during the creation of the exception object.
+ *
+ * @return reference to QString containing the message
+ */
+ const QString& what(void) const { return m_msg; };
+
+ /**
+ * This method is used to return the filename that was passed
+ * during the creation of the exception object.
+ *
+ * @return reference to QString containing the filename
+ */
+ const QString& file(void) const { return m_file; };
+
+ /**
+ * This method is used to return the linenumber that was passed
+ * during the creation of the exception object.
+ *
+ * @return long integer containing the line number
+ */
+ unsigned long line(void) const { return m_line; };
+
+private:
+ /**
+ * This member variable holds the message
+ */
+ QString m_msg;
+
+ /**
+ * This member variable holds the filename
+ */
+ QString m_file;
+
+ /**
+ * This member variable holds the line number
+ */
+ unsigned long m_line;
+};
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneyexceptiontest.cpp b/kmymoney2/mymoney/mymoneyexceptiontest.cpp
new file mode 100644
index 0000000..9d036ff
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyexceptiontest.cpp
@@ -0,0 +1,51 @@
+
+/***************************************************************************
+ mymoneyexceptiontest.cpp
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "mymoneyexceptiontest.h"
+
+MyMoneyExceptionTest::MyMoneyExceptionTest()
+{
+}
+
+
+void MyMoneyExceptionTest::setUp()
+{
+}
+
+void MyMoneyExceptionTest::tearDown()
+{
+}
+
+void MyMoneyExceptionTest::testDefaultConstructor()
+{
+ MyMoneyException *e = new MYMONEYEXCEPTION("Message");
+ CPPUNIT_ASSERT(e->what() == "Message");
+ CPPUNIT_ASSERT(e->line() == __LINE__-2);
+ CPPUNIT_ASSERT(e->file() == __FILE__);
+ delete e;
+}
+
+void MyMoneyExceptionTest::testConstructor()
+{
+ MyMoneyException *e = new MyMoneyException("New message",
+ "Joe's file", 1234);
+ CPPUNIT_ASSERT(e->what() == "New message");
+ CPPUNIT_ASSERT(e->line() == 1234);
+ CPPUNIT_ASSERT(e->file() == "Joe's file");
+ delete e;
+}
+
diff --git a/kmymoney2/mymoney/mymoneyexceptiontest.h b/kmymoney2/mymoney/mymoneyexceptiontest.h
new file mode 100644
index 0000000..95dbe48
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyexceptiontest.h
@@ -0,0 +1,47 @@
+/***************************************************************************
+ mymoneyexceptiontest.h
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef __MYMONEYEXCEPTIONTEST_H__
+#define __MYMONEYEXCEPTIONTEST_H__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#define private public
+#include "mymoneyutils.h"
+#include "mymoneyexception.h"
+#undef private
+
+class MyMoneyExceptionTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(MyMoneyExceptionTest);
+ CPPUNIT_TEST(testDefaultConstructor);
+ CPPUNIT_TEST(testConstructor);
+ CPPUNIT_TEST_SUITE_END();
+
+protected:
+public:
+ MyMoneyExceptionTest();
+
+
+ void setUp();
+
+ void tearDown();
+
+ void testDefaultConstructor();
+
+ void testConstructor();
+
+};
+#endif
diff --git a/kmymoney2/mymoney/mymoneyfile.cpp b/kmymoney2/mymoney/mymoneyfile.cpp
new file mode 100644
index 0000000..3245746
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyfile.cpp
@@ -0,0 +1,2332 @@
+/***************************************************************************
+ mymoneyfile.cpp
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes
+ (C) 2002, 2007-2008 by Thomas Baumgart
+ email : mte@users.sourceforge.net
+ ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstring.h>
+#include <qdatetime.h>
+#include <qvaluelist.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kdebug.h>
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include "storage/mymoneyseqaccessmgr.h"
+#include "mymoneyfile.h"
+#include "mymoneyreport.h"
+#include "mymoneybudget.h"
+#include "mymoneyprice.h"
+#include "mymoneyobjectcontainer.h"
+
+#ifndef HAVE_CONFIG_H
+#define VERSION "UNKNOWN"
+#else
+#include "config.h"
+#endif
+
+const QString MyMoneyFile::OpeningBalancesPrefix = I18N_NOOP("Opening Balances");
+const QString MyMoneyFile::AccountSeperator = ":";
+
+// include the following line to get a 'cout' for debug purposes
+// #include <iostream>
+MyMoneyFile* MyMoneyFile::_instance = 0;
+
+class MyMoneyFile::Private
+{
+public:
+ Private() :
+ m_inTransaction(false)
+ {}
+
+ bool m_inTransaction;
+ MyMoneySecurity m_baseCurrency;
+ MyMoneyObjectContainer m_cache;
+ MyMoneyPriceList m_priceCache;
+
+ /**
+ * This member keeps a list of ids to notify after an
+ * operation is completed. The boolean is used as follows
+ * during processing of the list:
+ *
+ * false - don't reload the object immediately
+ * true - reload the object immediately
+ */
+ QMap<QString, bool> m_notificationList;
+
+};
+
+MyMoneyFile MyMoneyFile::file;
+
+MyMoneyFile::MyMoneyFile() :
+ d(new Private)
+{
+ m_storage = 0;
+}
+
+MyMoneyFile::~MyMoneyFile()
+{
+ _instance = 0;
+ delete m_storage;
+ delete d;
+}
+
+MyMoneyFile::MyMoneyFile(IMyMoneyStorage *storage) :
+ d(new Private)
+{
+ m_storage = 0;
+ attachStorage(storage);
+}
+
+void MyMoneyFile::attachStorage(IMyMoneyStorage* const storage)
+{
+ if(m_storage != 0)
+ throw new MYMONEYEXCEPTION("Storage already attached");
+
+ if(storage == 0)
+ throw new MYMONEYEXCEPTION("Storage must not be 0");
+
+ m_storage = storage;
+
+ // force reload of base currency
+ d->m_baseCurrency = MyMoneySecurity();
+
+ // and the whole cache
+ d->m_cache.clear(storage);
+ d->m_priceCache.clear();
+ preloadCache();
+
+ // notify application about new data availability
+ emit dataChanged();
+}
+
+void MyMoneyFile::detachStorage(IMyMoneyStorage* const /* storage */)
+{
+ d->m_cache.clear();
+ d->m_priceCache.clear();
+ m_storage = 0;
+}
+
+void MyMoneyFile::startTransaction(void)
+{
+ checkStorage();
+ if(d->m_inTransaction) {
+ throw new MYMONEYEXCEPTION("Already started a transaction!");
+ }
+
+ m_storage->startTransaction();
+ d->m_inTransaction = true;
+}
+
+bool MyMoneyFile::hasTransaction(void) const
+{
+ return d->m_inTransaction;
+}
+
+void MyMoneyFile::checkTransaction(const char* txt) const
+{
+ checkStorage();
+ if(!d->m_inTransaction) {
+ throw new MYMONEYEXCEPTION(QString("No transaction started for %1").arg(txt));
+ }
+}
+
+void MyMoneyFile::commitTransaction(void)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ bool changed = m_storage->commitTransaction();
+ d->m_inTransaction = false;
+ preloadCache();
+ if(changed) {
+ emit dataChanged();
+ }
+}
+
+void MyMoneyFile::rollbackTransaction(void)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ m_storage->rollbackTransaction();
+ d->m_inTransaction = false;
+ preloadCache();
+}
+
+void MyMoneyFile::addInstitution(MyMoneyInstitution& institution)
+{
+ // perform some checks to see that the institution stuff is OK. For
+ // now we assume that the institution must have a name, the ID is not set
+ // and it does not have a parent (MyMoneyFile).
+
+ if(institution.name().length() == 0
+ || institution.id().length() != 0)
+ throw new MYMONEYEXCEPTION("Not a new institution");
+
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ m_storage->addInstitution(institution);
+
+ d->m_cache.preloadInstitution(institution);
+}
+
+void MyMoneyFile::modifyInstitution(const MyMoneyInstitution& institution)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ m_storage->modifyInstitution(institution);
+
+ addNotification(institution.id());
+}
+
+void MyMoneyFile::modifyTransaction(const MyMoneyTransaction& transaction)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ const MyMoneyTransaction* t = &transaction;
+ MyMoneyTransaction tCopy;
+
+ // now check the splits
+ bool loanAccountAffected = false;
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ for(it_s = transaction.splits().begin(); it_s != transaction.splits().end(); ++it_s) {
+ // the following line will throw an exception if the
+ // account does not exist
+ MyMoneyAccount acc = MyMoneyFile::account((*it_s).accountId());
+ if(acc.id().isEmpty())
+ throw new MYMONEYEXCEPTION("Cannot store split with no account assigned");
+ if(isStandardAccount((*it_s).accountId()))
+ throw new MYMONEYEXCEPTION("Cannot store split referencing standard account");
+ if(acc.isLoan() && ((*it_s).action() == MyMoneySplit::ActionTransfer))
+ loanAccountAffected = true;
+ }
+
+ // change transfer splits between asset/liability and loan accounts
+ // into amortization splits
+ if(loanAccountAffected) {
+ tCopy = transaction;
+ QValueList<MyMoneySplit> list = transaction.splits();
+ for(it_s = list.begin(); it_s != list.end(); ++it_s) {
+ if((*it_s).action() == MyMoneySplit::ActionTransfer) {
+ MyMoneyAccount acc = MyMoneyFile::account((*it_s).accountId());
+
+ if(acc.isAssetLiability()) {
+ MyMoneySplit s = (*it_s);
+ s.setAction(MyMoneySplit::ActionAmortization);
+ tCopy.modifySplit(s);
+ t = &tCopy;
+ }
+ }
+ }
+ }
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ // get the current setting of this transaction
+ MyMoneyTransaction tr = MyMoneyFile::transaction(transaction.id());
+
+ // scan the splits again to update notification list
+ // and mark all accounts that are referenced
+ for(it_s = tr.splits().begin(); it_s != tr.splits().end(); ++it_s) {
+ addNotification((*it_s).accountId());
+ addNotification((*it_s).payeeId());
+ }
+
+ // perform modification
+ m_storage->modifyTransaction(*t);
+
+ // and mark all accounts that are referenced
+ for(it_s = t->splits().begin(); it_s != t->splits().end(); ++it_s) {
+ addNotification((*it_s).accountId());
+ addNotification((*it_s).payeeId());
+ }
+}
+
+void MyMoneyFile::modifyAccount(const MyMoneyAccount& _account)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ MyMoneyAccount account(_account);
+
+ MyMoneyAccount acc = MyMoneyFile::account(account.id());
+
+ // check that for standard accounts only specific parameters are changed
+ if(isStandardAccount(account.id())) {
+ // make sure to use the stuff we found on file
+ account = acc;
+
+ // and only use the changes that are allowed
+ account.setName(_account.name());
+ account.setCurrencyId(_account.currencyId());
+
+ // now check that it is the same
+ if(!(account == _account))
+ throw new MYMONEYEXCEPTION("Unable to modify the standard account groups");
+ }
+
+ if(account.accountType() != acc.accountType())
+ throw new MYMONEYEXCEPTION("Unable to change account type");
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ // if the account was moved to another insitution, we notify
+ // the old one as well as the new one and the structure change
+ if(acc.institutionId() != account.institutionId()) {
+ MyMoneyInstitution inst;
+ if(!acc.institutionId().isEmpty()) {
+ inst = institution(acc.institutionId());
+ inst.removeAccountId(acc.id());
+ modifyInstitution(inst);
+ }
+ if(!account.institutionId().isEmpty()) {
+ inst = institution(account.institutionId());
+ inst.addAccountId(acc.id());
+ modifyInstitution(inst);
+ }
+ addNotification(acc.institutionId());
+ addNotification(account.institutionId());
+ }
+
+ m_storage->modifyAccount(account);
+
+ addNotification(account.id());
+}
+
+void MyMoneyFile::reparentAccount(MyMoneyAccount &account, MyMoneyAccount& parent)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // check that it's not one of the standard account groups
+ if(isStandardAccount(account.id()))
+ throw new MYMONEYEXCEPTION("Unable to reparent the standard account groups");
+
+ if(account.accountGroup() == parent.accountGroup()
+ || (account.accountType() == MyMoneyAccount::Income && parent.accountType() == MyMoneyAccount::Expense)
+ || (account.accountType() == MyMoneyAccount::Expense && parent.accountType() == MyMoneyAccount::Income)) {
+
+ if(account.isInvest() && parent.accountType() != MyMoneyAccount::Investment)
+ throw new MYMONEYEXCEPTION("Unable to reparent Stock to non-investment account");
+
+ if(parent.accountType() == MyMoneyAccount::Investment && !account.isInvest())
+ throw new MYMONEYEXCEPTION("Unable to reparent non-stock to investment account");
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ // keep a notification of the current parent
+ addNotification(account.parentAccountId());
+
+ m_storage->reparentAccount(account, parent);
+
+ // and also keep one for the account itself and the new parent
+ addNotification(account.id());
+ addNotification(parent.id());
+
+ } else
+ throw new MYMONEYEXCEPTION("Unable to reparent to different account type");
+}
+
+const MyMoneyInstitution& MyMoneyFile::institution(const QString& id) const
+{
+ return d->m_cache.institution(id);
+}
+
+const MyMoneyAccount& MyMoneyFile::account(const QString& id) const
+{
+ return d->m_cache.account(id);
+}
+
+const MyMoneyAccount& MyMoneyFile::subAccountByName(const MyMoneyAccount& acc, const QString& name) const
+{
+ static MyMoneyAccount nullAccount;
+
+ QValueList<QString>::const_iterator it_a;
+ for(it_a = acc.accountList().begin(); it_a != acc.accountList().end(); ++it_a) {
+ const MyMoneyAccount& sacc = account(*it_a);
+ if(sacc.name() == name)
+ return sacc;
+ }
+ return nullAccount;
+}
+
+const MyMoneyAccount& MyMoneyFile::accountByName(const QString& name) const
+{
+ return d->m_cache.accountByName(name);
+}
+
+void MyMoneyFile::removeTransaction(const MyMoneyTransaction& transaction)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ // get the engine's idea about this transaction
+ MyMoneyTransaction tr = MyMoneyFile::transaction(transaction.id());
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+
+ // scan the splits again to update notification list
+ for(it_s = tr.splits().begin(); it_s != tr.splits().end(); ++it_s) {
+ MyMoneyAccount acc = account((*it_s).accountId());
+ if(acc.isClosed())
+ throw new MYMONEYEXCEPTION(i18n("Cannot remove transaction that references a closed account."));
+ addNotification((*it_s).accountId());
+ addNotification((*it_s).payeeId());
+ }
+
+ m_storage->removeTransaction(transaction);
+}
+
+
+bool MyMoneyFile::hasActiveSplits(const QString& id) const
+{
+ checkStorage();
+
+ return m_storage->hasActiveSplits(id);
+}
+
+bool MyMoneyFile::isStandardAccount(const QString& id) const
+{
+ checkStorage();
+
+ return m_storage->isStandardAccount(id);
+}
+
+void MyMoneyFile::setAccountName(const QString& id, const QString& name) const
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ m_storage->setAccountName(id, name);
+}
+
+void MyMoneyFile::removeAccount(const MyMoneyAccount& account)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ MyMoneyAccount parent;
+ MyMoneyAccount acc;
+ MyMoneyInstitution institution;
+
+ // check that the account and its parent exist
+ // this will throw an exception if the id is unknown
+ acc = MyMoneyFile::account(account.id());
+ parent = MyMoneyFile::account(account.parentAccountId());
+ if(!acc.institutionId().isEmpty())
+ institution = MyMoneyFile::institution(acc.institutionId());
+
+ // check that it's not one of the standard account groups
+ if(isStandardAccount(account.id()))
+ throw new MYMONEYEXCEPTION("Unable to remove the standard account groups");
+
+ if(hasActiveSplits(account.id())) {
+ throw new MYMONEYEXCEPTION("Unable to remove account with active splits");
+ }
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ // collect all sub-ordinate accounts for notification
+ QStringList::ConstIterator it;
+ for(it = acc.accountList().begin(); it != acc.accountList().end(); ++it)
+ addNotification(*it);
+ // don't forget the parent and a possible institution
+ addNotification(parent.id());
+ addNotification(account.institutionId());
+
+ if(!institution.id().isEmpty()) {
+ institution.removeAccountId(account.id());
+ m_storage->modifyInstitution(institution);
+ }
+ acc.setInstitutionId(QString());
+
+ m_storage->removeAccount(acc);
+ addNotification(acc.id(), false);
+ d->m_cache.clear(acc.id());
+}
+
+void MyMoneyFile::removeAccountList(const QStringList& account_list, unsigned int level) {
+ if (level > 100)
+ throw new MYMONEYEXCEPTION("Too deep recursion in [MyMoneyFile::removeAccountList]!");
+
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // upon entry, we check that we could proceed with the operation
+ if(!level) {
+ if(!hasOnlyUnusedAccounts(account_list, 0))
+ throw new MYMONEYEXCEPTION("One or more accounts cannot be removed");
+
+ // NOTE: We don't use a MyMoneyNotifier here, but rather clear the whole cache
+ d->m_cache.clear();
+ }
+
+ // process all accounts in the list and test if they have transactions assigned
+ for (QStringList::const_iterator it = account_list.begin(); it != account_list.end(); ++it) {
+ MyMoneyAccount a = m_storage->account(*it);
+ //kdDebug() << "Deleting account '"<< a.name() << "'" << endl;
+
+ // first remove all sub-accounts
+ if (!a.accountList().isEmpty())
+ removeAccountList(a.accountList(), level+1);
+
+ // then remove account itself, but we first have to get
+ // rid of the account list that is still stored in
+ // the MyMoneyAccount object. Easiest way is to get a fresh copy.
+ a = m_storage->account(*it);
+ //kdDebug() << "Deleting account '"<< a2.name() << "' itself" << endl;
+ m_storage->removeAccount(a);
+ }
+}
+
+bool MyMoneyFile::hasOnlyUnusedAccounts(const QStringList& account_list, unsigned int level)
+{
+ if (level > 100)
+ throw new MYMONEYEXCEPTION("Too deep recursion in [MyMoneyFile::hasOnlyUnusedAccounts]!");
+ // process all accounts in the list and test if they have transactions assigned
+ for (QStringList::const_iterator it = account_list.begin(); it != account_list.end(); ++it) {
+ if (transactionCount(*it) != 0)
+ return false; // the current account has a transaction assigned
+ if (!hasOnlyUnusedAccounts(account(*it).accountList(), level+1))
+ return false; // some sub-account has a transaction assigned
+ }
+ return true; // all subaccounts unused
+}
+
+
+void MyMoneyFile::removeInstitution(const MyMoneyInstitution& institution)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ QValueList<QString>::ConstIterator it_a;
+ MyMoneyInstitution inst = MyMoneyFile::institution(institution.id());
+
+ bool blocked = signalsBlocked();
+ blockSignals(true);
+ for(it_a = inst.accountList().begin(); it_a != inst.accountList().end(); ++it_a) {
+ MyMoneyAccount acc = account(*it_a);
+ acc.setInstitutionId(QString());
+ modifyAccount(acc);
+ }
+ blockSignals(blocked);
+
+ m_storage->removeInstitution(institution);
+
+ addNotification(institution.id(), false);
+}
+
+void MyMoneyFile::addAccount(MyMoneyAccount& account, MyMoneyAccount& parent)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ MyMoneyInstitution institution;
+
+ // perform some checks to see that the account stuff is OK. For
+ // now we assume that the account must have a name, has no
+ // transaction and sub-accounts and parent account
+ // it's own ID is not set and it does not have a pointer to (MyMoneyFile)
+
+ if(account.name().length() == 0)
+ throw new MYMONEYEXCEPTION("Account has no name");
+
+ if(account.id().length() != 0)
+ throw new MYMONEYEXCEPTION("New account must have no id");
+
+ if(account.accountList().count() != 0)
+ throw new MYMONEYEXCEPTION("New account must have no sub-accounts");
+
+ if(!account.parentAccountId().isEmpty())
+ throw new MYMONEYEXCEPTION("New account must have no parent-id");
+
+ if(account.accountType() == MyMoneyAccount::UnknownAccountType)
+ throw new MYMONEYEXCEPTION("Account has invalid type");
+
+ // make sure, that the parent account exists
+ // if not, an exception is thrown. If it exists,
+ // get a copy of the current data
+ MyMoneyAccount acc = MyMoneyFile::account(parent.id());
+
+#if 0
+ // TODO: remove the following code as we now can have multiple accounts
+ // with the same name even in the same hierarchy position of the account tree
+ //
+ // check if the selected name is currently not among the child accounts
+ // if we find one, then return it as the new account
+ QStringList::const_iterator it_a;
+ for(it_a = acc.accountList().begin(); it_a != acc.accountList().end(); ++it_a) {
+ MyMoneyAccount a = MyMoneyFile::account(*it_a);
+ if(account.name() == a.name()) {
+ account = a;
+ return;
+ }
+ }
+#endif
+
+ // FIXME: make sure, that the parent has the same type
+ // I left it out here because I don't know, if there is
+ // a tight coupling between e.g. checking accounts and the
+ // class asset. It certainly does not make sense to create an
+ // expense account under an income account. Maybe it does, I don't know.
+
+ // We enforce, that a stock account can never be a parent and
+ // that the parent for a stock account must be an investment. Also,
+ // an investment cannot have another investment account as it's parent
+ if(parent.isInvest())
+ throw new MYMONEYEXCEPTION("Stock account cannot be parent account");
+
+ if(account.isInvest() && parent.accountType() != MyMoneyAccount::Investment)
+ throw new MYMONEYEXCEPTION("Stock account must have investment account as parent ");
+
+ if(!account.isInvest() && parent.accountType() == MyMoneyAccount::Investment)
+ throw new MYMONEYEXCEPTION("Investment account can only have stock accounts as children");
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ // if an institution is set, verify that it exists
+ if(account.institutionId().length() != 0) {
+ // check the presence of the institution. if it
+ // does not exist, an exception is thrown
+ institution = MyMoneyFile::institution(account.institutionId());
+ }
+
+
+ if(!account.openingDate().isValid()) {
+ account.setOpeningDate(QDate::currentDate());
+ }
+
+ account.setParentAccountId(parent.id());
+
+ m_storage->addAccount(account);
+ m_storage->addAccount(parent, account);
+
+ if(account.institutionId().length() != 0) {
+ institution.addAccountId(account.id());
+ m_storage->modifyInstitution(institution);
+ addNotification(institution.id());
+ }
+
+ d->m_cache.preloadAccount(account);
+ addNotification(parent.id());
+}
+
+MyMoneyTransaction MyMoneyFile::createOpeningBalanceTransaction(const MyMoneyAccount& acc, const MyMoneyMoney& balance)
+{
+ MyMoneyTransaction t;
+ // if the opening balance is not zero, we need
+ // to create the respective transaction
+ if(!balance.isZero()) {
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ MyMoneySecurity currency = security(acc.currencyId());
+ MyMoneyAccount openAcc = openingBalanceAccount(currency);
+
+ if(openAcc.openingDate() > acc.openingDate()) {
+ openAcc.setOpeningDate(acc.openingDate());
+ modifyAccount(openAcc);
+ }
+
+ MyMoneySplit s;
+
+ t.setPostDate(acc.openingDate());
+ t.setCommodity(acc.currencyId());
+
+ s.setAccountId(acc.id());
+ s.setShares(balance);
+ s.setValue(balance);
+ t.addSplit(s);
+
+ s.clearId();
+ s.setAccountId(openAcc.id());
+ s.setShares(-balance);
+ s.setValue(-balance);
+ t.addSplit(s);
+
+ addTransaction(t);
+ }
+ return t;
+}
+
+QString MyMoneyFile::openingBalanceTransaction(const MyMoneyAccount& acc) const
+{
+ QString result;
+
+ MyMoneySecurity currency = security(acc.currencyId());
+ MyMoneyAccount openAcc;
+
+ try
+ {
+ openAcc = openingBalanceAccount(currency);
+ }
+ catch(MyMoneyException *e)
+ {
+ delete e;
+ return result;
+ }
+
+ // Iterate over all the opening balance transactions for this currency
+ MyMoneyTransactionFilter filter;
+ filter.addAccount(openAcc.id());
+ QValueList<MyMoneyTransaction> transactions = transactionList(filter);
+ QValueList<MyMoneyTransaction>::const_iterator it_t = transactions.begin();
+ while ( it_t != transactions.end() )
+ {
+ try
+ {
+ // Test whether the transaction also includes a split into
+ // this account
+ (*it_t).splitByAccount(acc.id(), true /*match*/);
+
+ // If so, we have a winner!
+ result = (*it_t).id();
+ break;
+ }
+ catch(MyMoneyException *e)
+ {
+ // If not, keep searching
+ ++it_t;
+ delete e;
+ }
+ }
+
+ return result;
+}
+
+const MyMoneyAccount MyMoneyFile::openingBalanceAccount(const MyMoneySecurity& security)
+{
+ if(!security.isCurrency())
+ throw new MYMONEYEXCEPTION("Opening balance for non currencies not supported");
+
+ try
+ {
+ return openingBalanceAccount_internal(security);
+ }
+ catch(MyMoneyException *e)
+ {
+ delete e;
+ MyMoneyFileTransaction ft;
+ MyMoneyAccount acc;
+
+ try {
+ acc = createOpeningBalanceAccount(security);
+ ft.commit();
+
+ } catch(MyMoneyException* e) {
+ qDebug("Unable to create opening balance account for security %s", security.id().data());
+ delete e;
+ }
+ return acc;
+ }
+}
+
+const MyMoneyAccount MyMoneyFile::openingBalanceAccount(const MyMoneySecurity& security) const
+{
+ return openingBalanceAccount_internal(security);
+}
+
+const MyMoneyAccount MyMoneyFile::openingBalanceAccount_internal(const MyMoneySecurity& security) const
+{
+ if(!security.isCurrency())
+ throw new MYMONEYEXCEPTION("Opening balance for non currencies not supported");
+
+ MyMoneyAccount acc;
+ QRegExp match(QString("^%1").arg(i18n(MyMoneyFile::OpeningBalancesPrefix)));
+
+ QValueList<MyMoneyAccount> accounts;
+ QValueList<MyMoneyAccount>::Iterator it;
+
+ accountList(accounts, equity().accountList(), true);
+
+ for(it = accounts.begin(); it != accounts.end(); ++it) {
+ if(match.search((*it).name()) != -1) {
+ if((*it).currencyId() == security.id()) {
+ acc = *it;
+ break;
+ }
+ }
+ }
+
+ if(acc.id().isEmpty()) {
+ throw new MYMONEYEXCEPTION(QString("No opening balance account for %1").arg(security.tradingSymbol()));
+ }
+
+ return acc;
+}
+
+const MyMoneyAccount MyMoneyFile::createOpeningBalanceAccount(const MyMoneySecurity& security)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ MyMoneyAccount acc;
+ QString name(i18n(MyMoneyFile::OpeningBalancesPrefix));
+ if(security.id() != baseCurrency().id()) {
+ name += QString(" (%1)").arg(security.id());
+ }
+ acc.setName(name);
+ acc.setAccountType(MyMoneyAccount::Equity);
+ acc.setCurrencyId(security.id());
+
+ MyMoneyAccount parent = equity();
+ this->addAccount(acc, parent);
+ return acc;
+}
+
+void MyMoneyFile::addTransaction(MyMoneyTransaction& transaction)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ // perform some checks to see that the transaction stuff is OK. For
+ // now we assume that
+ // * no ids are assigned
+ // * the date valid (must not be empty)
+ // * the referenced accounts in the splits exist
+
+ // first perform all the checks
+ if(!transaction.id().isEmpty())
+ throw new MYMONEYEXCEPTION("Unable to add transaction with id set");
+ if(!transaction.postDate().isValid())
+ throw new MYMONEYEXCEPTION("Unable to add transaction with invalid postdate");
+
+ // now check the splits
+ bool loanAccountAffected = false;
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ for(it_s = transaction.splits().begin(); it_s != transaction.splits().end(); ++it_s) {
+ // the following line will throw an exception if the
+ // account does not exist or is one of the standard accounts
+ MyMoneyAccount acc = MyMoneyFile::account((*it_s).accountId());
+ if(acc.id().isEmpty())
+ throw new MYMONEYEXCEPTION("Cannot add split with no account assigned");
+ if(acc.isLoan())
+ loanAccountAffected = true;
+ if(isStandardAccount((*it_s).accountId()))
+ throw new MYMONEYEXCEPTION("Cannot add split referencing standard account");
+ }
+
+ // change transfer splits between asset/liability and loan accounts
+ // into amortization splits
+ if(loanAccountAffected) {
+ QValueList<MyMoneySplit> list = transaction.splits();
+ for(it_s = list.begin(); it_s != list.end(); ++it_s) {
+ if((*it_s).action() == MyMoneySplit::ActionTransfer) {
+ MyMoneyAccount acc = MyMoneyFile::account((*it_s).accountId());
+
+ if(acc.isAssetLiability()) {
+ MyMoneySplit s = (*it_s);
+ s.setAction(MyMoneySplit::ActionAmortization);
+ transaction.modifySplit(s);
+ }
+ }
+ }
+ }
+
+ // check that we have a commodity
+ if(transaction.commodity().isEmpty()) {
+ transaction.setCommodity(baseCurrency().id());
+ }
+
+ // then add the transaction to the file global pool
+ m_storage->addTransaction(transaction);
+
+ // scan the splits again to update notification list
+ for(it_s = transaction.splits().begin(); it_s != transaction.splits().end(); ++it_s) {
+ addNotification((*it_s).accountId());
+ addNotification((*it_s).payeeId());
+ }
+}
+
+const MyMoneyTransaction MyMoneyFile::transaction(const QString& id) const
+{
+ checkStorage();
+
+ return m_storage->transaction(id);
+}
+
+const MyMoneyTransaction MyMoneyFile::transaction(const QString& account, const int idx) const
+{
+ checkStorage();
+
+ return m_storage->transaction(account, idx);
+}
+
+void MyMoneyFile::addPayee(MyMoneyPayee& payee)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ m_storage->addPayee(payee);
+
+ d->m_cache.preloadPayee(payee);
+}
+
+const MyMoneyPayee& MyMoneyFile::payee(const QString& id) const
+{
+ return d->m_cache.payee(id);
+}
+
+const MyMoneyPayee& MyMoneyFile::payeeByName(const QString& name) const
+{
+ checkStorage();
+
+ return d->m_cache.payee(m_storage->payeeByName(name).id());
+}
+
+void MyMoneyFile::modifyPayee(const MyMoneyPayee& payee)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ addNotification(payee.id());
+
+ m_storage->modifyPayee(payee);
+}
+
+void MyMoneyFile::removePayee(const MyMoneyPayee& payee)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ m_storage->removePayee(payee);
+
+ addNotification(payee.id(), false);
+}
+
+void MyMoneyFile::accountList(QValueList<MyMoneyAccount>& list, const QStringList& idlist, const bool recursive) const
+{
+ if(idlist.isEmpty()) {
+ d->m_cache.account(list);
+
+#if 0
+ // TODO: I have no idea what this was good for, but it caused the networth report
+ // to show double the numbers so I commented it out (ipwizard, 2008-05-24)
+ if (m_storage && (list.isEmpty() || list.size() != m_storage->accountCount())) {
+ m_storage->accountList(list);
+ d->m_cache.preloadAccount(list);
+ }
+#endif
+
+ QValueList<MyMoneyAccount>::Iterator it;
+ QValueList<MyMoneyAccount>::Iterator next;
+ for(it = list.begin(); it != list.end(); ) {
+ if(isStandardAccount( (*it).id() )) {
+ it = list.erase(it);
+ } else {
+ ++it;
+ }
+ }
+ } else {
+ QValueList<MyMoneyAccount>::ConstIterator it;
+ QValueList<MyMoneyAccount> list_a;
+ d->m_cache.account(list_a);
+
+ for(it = list_a.begin(); it != list_a.end(); ++it) {
+ if(!isStandardAccount((*it).id())) {
+ if(idlist.findIndex((*it).id()) != -1) {
+ list.append(*it);
+ if(recursive == true) {
+ accountList(list, (*it).accountList(), true);
+ }
+ }
+ }
+ }
+ }
+}
+
+void MyMoneyFile::institutionList(QValueList<MyMoneyInstitution>& list) const
+{
+ d->m_cache.institution(list);
+}
+
+const QValueList<MyMoneyInstitution> MyMoneyFile::institutionList(void) const
+{
+ QValueList<MyMoneyInstitution> list;
+ institutionList(list);
+ return list;
+}
+
+// general get functions
+const MyMoneyPayee MyMoneyFile::user(void) const { checkStorage(); return m_storage->user(); }
+
+// general set functions
+void MyMoneyFile::setUser(const MyMoneyPayee& user)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ m_storage->setUser(user);
+}
+
+bool MyMoneyFile::dirty(void) const
+{
+ if(!m_storage)
+ return false;
+
+ return m_storage->dirty();
+}
+
+void MyMoneyFile::setDirty(void) const
+{
+ checkStorage();
+
+ m_storage->setDirty();
+}
+
+unsigned int MyMoneyFile::accountCount(void) const
+{
+ checkStorage();
+
+ return m_storage->accountCount();
+}
+
+void MyMoneyFile::ensureDefaultCurrency(MyMoneyAccount& acc) const
+{
+ if(acc.currencyId().isEmpty()) {
+ if(!baseCurrency().id().isEmpty())
+ acc.setCurrencyId(baseCurrency().id());
+ }
+}
+
+const MyMoneyAccount& MyMoneyFile::liability(void) const
+{
+ checkStorage();
+
+ return d->m_cache.account (STD_ACC_LIABILITY);
+}
+
+const MyMoneyAccount& MyMoneyFile::asset(void) const
+{
+ checkStorage();
+
+ return d->m_cache.account (STD_ACC_ASSET);
+}
+
+const MyMoneyAccount& MyMoneyFile::expense(void) const
+{
+ checkStorage();
+
+ return d->m_cache.account (STD_ACC_EXPENSE);
+}
+
+const MyMoneyAccount& MyMoneyFile::income(void) const
+{
+ checkStorage();
+
+ return d->m_cache.account (STD_ACC_INCOME);
+}
+
+const MyMoneyAccount& MyMoneyFile::equity(void) const
+{
+ checkStorage();
+
+ return d->m_cache.account (STD_ACC_EQUITY);
+}
+
+unsigned int MyMoneyFile::transactionCount(const QString& account) const
+{
+ checkStorage();
+
+ return m_storage->transactionCount(account);
+}
+
+const QMap<QString, unsigned long> MyMoneyFile::transactionCountMap(void) const
+{
+ checkStorage();
+
+ return m_storage->transactionCountMap();
+}
+
+unsigned int MyMoneyFile::institutionCount(void) const
+{
+ checkStorage();
+
+ return m_storage->institutionCount();
+}
+
+const MyMoneyMoney MyMoneyFile::balance(const QString& id, const QDate& date) const
+{
+ checkStorage();
+
+ return m_storage->balance(id, date);
+}
+
+const MyMoneyMoney MyMoneyFile::totalBalance(const QString& id, const QDate& date) const
+{
+ checkStorage();
+
+ return m_storage->totalBalance(id, date);
+}
+
+void MyMoneyFile::warningMissingRate(const QString& fromId, const QString& toId) const
+{
+ MyMoneySecurity from, to;
+ try {
+ from = security(fromId);
+ to = security(toId);
+ qWarning("Missing price info for conversion from %s to %s", from.name().latin1(), to.name().latin1());
+
+ } catch(MyMoneyException *e) {
+ qFatal("Missing security caught in MyMoneyFile::warningMissingRate(): %s(%ld) %s", e->file().data(), e->line(), e->what().data());
+ delete e;
+ }
+}
+
+void MyMoneyFile::notify(void)
+{
+ QMap<QString, bool>::ConstIterator it;
+ for(it = d->m_notificationList.begin(); it != d->m_notificationList.end(); ++it) {
+ if(*it)
+ d->m_cache.refresh(it.key());
+ else
+ d->m_cache.clear(it.key());
+ }
+ clearNotification();
+}
+
+void MyMoneyFile::addNotification(const QString& id, bool reload)
+{
+ if(!id.isEmpty())
+ d->m_notificationList[id] = reload;
+}
+
+void MyMoneyFile::clearNotification()
+{
+ // reset list to be empty
+ d->m_notificationList.clear();
+}
+
+void MyMoneyFile::transactionList(QValueList<QPair<MyMoneyTransaction, MyMoneySplit> >& list, MyMoneyTransactionFilter& filter) const
+{
+ checkStorage();
+ m_storage->transactionList(list, filter);
+}
+
+void MyMoneyFile::transactionList(QValueList<MyMoneyTransaction>& list, MyMoneyTransactionFilter& filter) const
+{
+ checkStorage();
+ m_storage->transactionList(list, filter);
+}
+
+const QValueList<MyMoneyTransaction> MyMoneyFile::transactionList(MyMoneyTransactionFilter& filter) const
+{
+ QValueList<MyMoneyTransaction> list;
+ transactionList(list, filter);
+ return list;
+}
+
+const QValueList<MyMoneyPayee> MyMoneyFile::payeeList(void) const
+{
+ QValueList<MyMoneyPayee> list;
+ d->m_cache.payee(list);
+ return list;
+}
+
+QString MyMoneyFile::accountToCategory(const QString& accountId, bool includeStandardAccounts) const
+{
+ MyMoneyAccount acc;
+ QString rc;
+
+ if(!accountId.isEmpty()) {
+ acc = account(accountId);
+ do {
+ if(!rc.isEmpty())
+ rc = AccountSeperator + rc;
+ rc = acc.name() + rc;
+ acc = account(acc.parentAccountId());
+ } while(!acc.id().isEmpty() && (includeStandardAccounts || !isStandardAccount(acc.id())));
+ }
+ return rc;
+}
+
+QString MyMoneyFile::categoryToAccount(const QString& category, MyMoneyAccount::accountTypeE type) const
+{
+ QString id;
+
+ // search the category in the expense accounts and if it is not found, try
+ // to locate it in the income accounts
+ if(type == MyMoneyAccount::UnknownAccountType
+ || type == MyMoneyAccount::Expense) {
+ id = locateSubAccount(MyMoneyFile::instance()->expense(), category);
+ }
+
+ if((id.isEmpty() && type == MyMoneyAccount::UnknownAccountType)
+ || type == MyMoneyAccount::Income) {
+ id = locateSubAccount(MyMoneyFile::instance()->income(), category);
+ }
+
+ return id;
+}
+
+QString MyMoneyFile::nameToAccount(const QString& name) const
+{
+ QString id;
+
+ // search the category in the asset accounts and if it is not found, try
+ // to locate it in the liability accounts
+ id = locateSubAccount(MyMoneyFile::instance()->asset(), name);
+ if(id.isEmpty())
+ id = locateSubAccount(MyMoneyFile::instance()->liability(), name);
+
+ return id;
+}
+
+QString MyMoneyFile::parentName(const QString& name) const
+{
+ return name.section(AccountSeperator, 0, -2);
+}
+
+QString MyMoneyFile::locateSubAccount(const MyMoneyAccount& base, const QString& category) const
+{
+ MyMoneyAccount nextBase;
+ QString level, remainder;
+ level = category.section(AccountSeperator, 0, 0);
+ remainder = category.section(AccountSeperator, 1);
+
+ QStringList list = base.accountList();
+ QStringList::ConstIterator it_a;
+
+ for(it_a = list.begin(); it_a != list.end(); ++it_a) {
+ nextBase = account(*it_a);
+ if(nextBase.name() == level) {
+ if(remainder.isEmpty()) {
+ return nextBase.id();
+ }
+ return locateSubAccount(nextBase, remainder);
+ }
+ }
+ return QString();
+}
+
+QString MyMoneyFile::value(const QString& key) const
+{
+ checkStorage();
+
+ return m_storage->value(key);
+}
+
+void MyMoneyFile::setValue(const QString& key, const QString& val)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ m_storage->setValue(key, val);
+}
+
+void MyMoneyFile::deletePair(const QString& key)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ m_storage->deletePair(key);
+}
+
+void MyMoneyFile::addSchedule(MyMoneySchedule& sched)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ MyMoneyTransaction transaction = sched.transaction();
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = transaction.splits().begin(); it_s != transaction.splits().end(); ++it_s) {
+ // the following line will throw an exception if the
+ // account does not exist or is one of the standard accounts
+ MyMoneyAccount acc = MyMoneyFile::account((*it_s).accountId());
+ if(acc.id().isEmpty())
+ throw new MYMONEYEXCEPTION("Cannot add split with no account assigned");
+ if(isStandardAccount((*it_s).accountId()))
+ throw new MYMONEYEXCEPTION("Cannot add split referencing standard account");
+ }
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ m_storage->addSchedule(sched);
+}
+
+void MyMoneyFile::modifySchedule(const MyMoneySchedule& sched)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ MyMoneyTransaction transaction = sched.transaction();
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = transaction.splits().begin(); it_s != transaction.splits().end(); ++it_s) {
+ // the following line will throw an exception if the
+ // account does not exist or is one of the standard accounts
+ MyMoneyAccount acc = MyMoneyFile::account((*it_s).accountId());
+ if(acc.id().isEmpty())
+ throw new MYMONEYEXCEPTION("Cannot store split with no account assigned");
+ if(isStandardAccount((*it_s).accountId()))
+ throw new MYMONEYEXCEPTION("Cannot store split referencing standard account");
+ }
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ m_storage->modifySchedule(sched);
+
+ addNotification(sched.id());
+}
+
+void MyMoneyFile::removeSchedule(const MyMoneySchedule& sched)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ m_storage->removeSchedule(sched);
+
+ addNotification(sched.id(), false);
+}
+
+const MyMoneySchedule MyMoneyFile::schedule(const QString& id) const
+{
+ return d->m_cache.schedule(id);
+}
+
+const QValueList<MyMoneySchedule> MyMoneyFile::scheduleList(
+ const QString& accountId,
+ const MyMoneySchedule::typeE type,
+ const MyMoneySchedule::occurenceE occurence,
+ const MyMoneySchedule::paymentTypeE paymentType,
+ const QDate& startDate,
+ const QDate& endDate,
+ const bool overdue) const
+{
+ checkStorage();
+
+ return m_storage->scheduleList(accountId, type, occurence, paymentType, startDate, endDate, overdue);
+}
+
+
+const QStringList MyMoneyFile::consistencyCheck(void)
+{
+ QValueList<MyMoneyAccount> list;
+ QValueList<MyMoneyAccount>::Iterator it_a;
+ QValueList<MyMoneySchedule>::Iterator it_sch;
+ QValueList<MyMoneyPayee>::Iterator it_p;
+ QValueList<MyMoneyTransaction>::Iterator it_t;
+ QValueList<MyMoneyReport>::Iterator it_r;
+ QStringList accountRebuild;
+ QStringList::ConstIterator it_c;
+
+ QMap<QString, bool> interestAccounts;
+
+ MyMoneyAccount parent;
+ MyMoneyAccount child;
+ MyMoneyAccount toplevel;
+
+ QString parentId;
+ QStringList rc;
+
+ int problemCount = 0;
+ int unfixedCount = 0;
+ QString problemAccount;
+
+ // check that we have a storage object
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ // get the current list of accounts
+ accountList(list);
+ // add the standard accounts
+ list << MyMoneyFile::instance()->asset();
+ list << MyMoneyFile::instance()->liability();
+ list << MyMoneyFile::instance()->income();
+ list << MyMoneyFile::instance()->expense();
+
+ for(it_a = list.begin(); it_a != list.end(); ++it_a) {
+ // no more checks for standard accounts
+ if(isStandardAccount((*it_a).id())) {
+ continue;
+ }
+
+ switch((*it_a).accountGroup()) {
+ case MyMoneyAccount::Asset:
+ toplevel = asset();
+ break;
+ case MyMoneyAccount::Liability:
+ toplevel = liability();
+ break;
+ case MyMoneyAccount::Expense:
+ toplevel = expense();
+ break;
+ case MyMoneyAccount::Income:
+ toplevel = income();
+ break;
+ case MyMoneyAccount::Equity:
+ toplevel = equity();
+ break;
+ default:
+ qWarning("%s:%d This should never happen!", __FILE__ , __LINE__);
+ break;
+ }
+
+ // check for loops in the hierarchy
+ parentId = (*it_a).parentAccountId();
+ try {
+ bool dropOut = false;
+ while(!isStandardAccount(parentId) && !dropOut) {
+ parent = account(parentId);
+ if(parent.id() == (*it_a).id()) {
+ // parent loops, so we need to re-parent to toplevel account
+ // find parent account in our list
+ problemCount++;
+ QValueList<MyMoneyAccount>::Iterator it_b;
+ for(it_b = list.begin(); it_b != list.end(); ++it_b) {
+ if((*it_b).id() == parent.id()) {
+ if(problemAccount != (*it_a).name()) {
+ problemAccount = (*it_a).name();
+ rc << i18n("* Problem with account '%1'").arg(problemAccount);
+ rc << i18n(" * Loop detected between this account and account '%2'.").arg((*it_b).name());
+ rc << i18n(" Reparenting account '%2' to top level account '%1'.").arg(toplevel.name(), (*it_a).name());
+ (*it_a).setParentAccountId(toplevel.id());
+ if(accountRebuild.contains(toplevel.id()) == 0)
+ accountRebuild << toplevel.id();
+ if(accountRebuild.contains((*it_a).id()) == 0)
+ accountRebuild << (*it_a).id();
+ dropOut = true;
+ break;
+ }
+ }
+ }
+ }
+ parentId = parent.parentAccountId();
+ }
+
+ } catch(MyMoneyException *e) {
+ // if we don't know about a parent, we catch it later
+ delete e;
+ }
+
+ // check that the parent exists
+ parentId = (*it_a).parentAccountId();
+ try {
+ parent = account(parentId);
+ if((*it_a).accountGroup() != parent.accountGroup()) {
+ problemCount++;
+ if(problemAccount != (*it_a).name()) {
+ problemAccount = (*it_a).name();
+ rc << i18n("* Problem with account '%1'").arg(problemAccount);
+ }
+ // the parent belongs to a different group, so we reconnect to the
+ // master group account (asset, liability, etc) to which this account
+ // should belong and update it in the engine.
+ rc << i18n(" * Parent account '%1' belongs to a different group.").arg(parent.name());
+ rc << i18n(" New parent account is the top level account '%1'.").arg(toplevel.name());
+ (*it_a).setParentAccountId(toplevel.id());
+
+ // make sure to rebuild the sub-accounts of the top account
+ // and the one we removed this account from
+ if(accountRebuild.contains(toplevel.id()) == 0)
+ accountRebuild << toplevel.id();
+ if(accountRebuild.contains(parent.id()) == 0)
+ accountRebuild << parent.id();
+ } else if(!parent.accountList().contains((*it_a).id())) {
+ problemCount++;
+ if(problemAccount != (*it_a).name()) {
+ problemAccount = (*it_a).name();
+ rc << i18n("* Problem with account '%1'").arg(problemAccount);
+ }
+ // parent exists, but does not have a reference to the account
+ rc << i18n(" * Parent account '%1' does not contain '%2' as sub-account.").arg(parent.name(), problemAccount);
+ if(accountRebuild.contains(parent.id()) == 0)
+ accountRebuild << parent.id();
+ }
+ } catch(MyMoneyException *e) {
+ delete e;
+ // apparently, the parent does not exist anymore. we reconnect to the
+ // master group account (asset, liability, etc) to which this account
+ // should belong and update it in the engine.
+ problemCount++;
+ if(problemAccount != (*it_a).name()) {
+ problemAccount = (*it_a).name();
+ rc << i18n("* Problem with account '%1'").arg(problemAccount);
+ }
+ rc << i18n(" * The parent with id %1 does not exist anymore.").arg(parentId);
+ rc << i18n(" New parent account is the top level account '%1'.").arg(toplevel.name());
+ (*it_a).setParentAccountId(toplevel.id());
+
+ addNotification((*it_a).id());
+
+ // make sure to rebuild the sub-accounts of the top account
+ if(accountRebuild.contains(toplevel.id()) == 0)
+ accountRebuild << toplevel.id();
+ }
+
+ // now check that all the children exist and have the correct type
+ for(it_c = (*it_a).accountList().begin(); it_c != (*it_a).accountList().end(); ++it_c) {
+ // check that the child exists
+ try {
+ child = account(*it_c);
+ } catch(MyMoneyException *e) {
+ problemCount++;
+ if(problemAccount != (*it_a).name()) {
+ problemAccount = (*it_a).name();
+ rc << i18n("* Problem with account '%1'").arg(problemAccount);
+ }
+ rc << i18n(" * Child account with id %1 does not exist anymore.").arg(*it_c);
+ rc << i18n(" The child account list will be reconstructed.");
+ if(accountRebuild.contains((*it_a).id()) == 0)
+ accountRebuild << (*it_a).id();
+ }
+ }
+
+ // see if it is a loan account. if so, remember the assigned interest account
+ if((*it_a).isLoan()) {
+ const MyMoneyAccountLoan* loan = dynamic_cast<MyMoneyAccountLoan*>(&(*it_a));
+ if(!loan->interestAccountId().isEmpty())
+ interestAccounts[loan->interestAccountId()] = true;
+ }
+
+ // if the account was modified, we need to update it in the engine
+ if(!(m_storage->account((*it_a).id()) == (*it_a))) {
+ try {
+ m_storage->modifyAccount(*it_a, true);
+ addNotification((*it_a).id());
+ } catch (MyMoneyException *e) {
+ delete e;
+ rc << i18n(" * Unable to update account data in engine.");
+ return rc;
+ }
+ }
+ }
+
+ if(accountRebuild.count() != 0) {
+ rc << i18n("* Reconstructing the child lists for");
+ }
+
+ // clear the affected lists
+ for(it_a = list.begin(); it_a != list.end(); ++it_a) {
+ if(accountRebuild.contains((*it_a).id())) {
+ rc << QString(" %1").arg((*it_a).name());
+ // clear the account list
+ for(it_c = (*it_a).accountList().begin(); it_c != (*it_a).accountList().end();) {
+ (*it_a).removeAccountId(*it_c);
+ it_c = (*it_a).accountList().begin();
+ }
+ }
+ }
+
+ // reconstruct the lists
+ for(it_a = list.begin(); it_a != list.end(); ++it_a) {
+ QValueList<MyMoneyAccount>::Iterator it;
+ parentId = (*it_a).parentAccountId();
+ if(accountRebuild.contains(parentId)) {
+ for(it = list.begin(); it != list.end(); ++it) {
+ if((*it).id() == parentId) {
+ (*it).addAccountId((*it_a).id());
+ break;
+ }
+ }
+ }
+ }
+
+ // update the engine objects
+ for(it_a = list.begin(); it_a != list.end(); ++it_a) {
+ if(accountRebuild.contains((*it_a).id())) {
+ try {
+ m_storage->modifyAccount(*it_a, true);
+ addNotification((*it_a).id());
+ } catch (MyMoneyException *e) {
+ delete e;
+ rc << i18n(" * Unable to update account data for account %1 in engine").arg((*it_a).name());
+ }
+ }
+ }
+
+ // For some reason, files exist with invalid ids. This has been found in the payee id
+ // so we fix them here
+ QValueList<MyMoneyPayee> pList = payeeList();
+ QMap<QString, QString>payeeConversionMap;
+
+ for(it_p = pList.begin(); it_p != pList.end(); ++it_p) {
+ if((*it_p).id().length() > 7) {
+ // found one of those with an invalid ids
+ // create a new one and store it in the map.
+ MyMoneyPayee payee = (*it_p);
+ payee.clearId();
+ m_storage->addPayee(payee);
+ payeeConversionMap[(*it_p).id()] = payee.id();
+ rc << i18n(" * Payee %1 recreated with fixed id").arg(payee.name());
+ ++problemCount;
+ }
+ }
+
+ // Fix the transactions
+ QValueList<MyMoneyTransaction> tList;
+ MyMoneyTransactionFilter filter;
+ filter.setReportAllSplits(false);
+ m_storage->transactionList(tList, filter);
+ // Generate the list of interest accounts
+ for(it_t = tList.begin(); it_t != tList.end(); ++it_t) {
+ const MyMoneyTransaction& t = (*it_t);
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = t.splits().begin(); it_s != t.splits().end(); ++it_s) {
+ if((*it_s).action() == MyMoneySplit::ActionInterest)
+ interestAccounts[(*it_s).accountId()] = true;
+ }
+ }
+ for(it_t = tList.begin(); it_t != tList.end(); ++it_t) {
+ MyMoneyTransaction t = (*it_t);
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ bool tChanged = false;
+ for(it_s = t.splits().begin(); it_s != t.splits().end(); ++it_s) {
+ bool sChanged = false;
+ MyMoneySplit s = (*it_s);
+ if(payeeConversionMap.find((*it_s).payeeId()) != payeeConversionMap.end()) {
+ s.setPayeeId(payeeConversionMap[s.payeeId()]);
+ sChanged = true;
+ rc << i18n(" * Payee id updated in split of transaction '%1'.").arg(t.id());
+ ++problemCount;
+ }
+
+ // make sure, that shares and value have the same number if they
+ // represent the same currency.
+ try {
+ const MyMoneyAccount& acc = this->account(s.accountId());
+ if(t.commodity() == acc.currencyId()
+ && s.shares().reduce() != s.value().reduce()) {
+ // use the value as master if the transaction is balanced
+ if(t.splitSum().isZero()) {
+ s.setShares(s.value());
+ rc << i18n(" * shares set to value in split of transaction '%1'.").arg(t.id());
+ } else {
+ s.setValue(s.shares());
+ rc << i18n(" * value set to shares in split of transaction '%1'.").arg(t.id());
+ }
+ sChanged = true;
+ ++problemCount;
+ }
+ } catch(MyMoneyException *e) {
+ rc << i18n(" * Split %2 in transaction '%1' contains a reference to invalid account %3. Please fix manually.").arg(t.id(), (*it_s).id(), (*it_s).accountId());
+ ++problemCount;
+ ++unfixedCount;
+ delete e;
+ }
+
+ // make sure the interest splits are marked correct as such
+ if(interestAccounts.find(s.accountId()) != interestAccounts.end()
+ && s.action() != MyMoneySplit::ActionInterest) {
+ s.setAction(MyMoneySplit::ActionInterest);
+ sChanged = true;
+ rc << i18n(" * action marked as interest in split of transaction '%1'.").arg(t.id());
+ ++problemCount;
+ }
+
+ if(sChanged) {
+ tChanged = true;
+ t.modifySplit(s);
+ }
+ }
+ if(tChanged) {
+ m_storage->modifyTransaction(t);
+ }
+ }
+
+ // Fix the schedules
+ QValueList<MyMoneySchedule> schList = scheduleList();
+ for(it_sch = schList.begin(); it_sch != schList.end(); ++it_sch) {
+ MyMoneySchedule sch = (*it_sch);
+ MyMoneyTransaction t = sch.transaction();
+ bool tChanged = false;
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = t.splits().begin(); it_s != t.splits().end(); ++it_s) {
+ MyMoneySplit s = (*it_s);
+ bool sChanged = false;
+ if(payeeConversionMap.find((*it_s).payeeId()) != payeeConversionMap.end()) {
+ s.setPayeeId(payeeConversionMap[s.payeeId()]);
+ sChanged = true;
+ rc << i18n(" * Payee id updated in split of schedule '%1'.").arg((*it_sch).name());
+ ++problemCount;
+ }
+ if(!(*it_s).value().isZero() && (*it_s).shares().isZero()) {
+ s.setShares(s.value());
+ sChanged = true;
+ rc << i18n(" * Split in scheduled transaction '%1' contained value != 0 and shares == 0.").arg((*it_sch).name());
+ rc << i18n(" Shares set to value.");
+ ++problemCount;
+ }
+
+ // make sure, we don't have a bankid stored with a split in a schedule
+ if(!(*it_s).bankID().isEmpty()) {
+ s.setBankID(QString());
+ sChanged = true;
+ rc << i18n(" * Removed bankid from split in scheduled transaction '%1'.").arg((*it_sch).name());
+ ++problemCount;
+ }
+
+ // make sure, that shares and value have the same number if they
+ // represent the same currency.
+ try {
+ const MyMoneyAccount& acc = this->account(s.accountId());
+ if(t.commodity() == acc.currencyId()
+ && s.shares().reduce() != s.value().reduce()) {
+ // use the value as master if the transaction is balanced
+ if(t.splitSum().isZero()) {
+ s.setShares(s.value());
+ rc << i18n(" * shares set to value in split in schedule '%1'.").arg((*it_sch).name());
+ } else {
+ s.setValue(s.shares());
+ rc << i18n(" * value set to shares in split in schedule '%1'.").arg((*it_sch).name());
+ }
+ sChanged = true;
+ ++problemCount;
+ }
+ } catch(MyMoneyException *e) {
+ rc << i18n(" * Split %2 in schedule '%1' contains a reference to invalid account %3. Please fix manually.").arg((*it_sch).name(), (*it_s).id(), (*it_s).accountId());
+ ++problemCount;
+ ++unfixedCount;
+ delete e;
+ }
+ if(sChanged) {
+ t.modifySplit(s);
+ tChanged = true;
+ }
+ }
+ if(tChanged) {
+ sch.setTransaction(t);
+ m_storage->modifySchedule(sch);
+ }
+ }
+
+ // Fix the reports
+ QValueList<MyMoneyReport> rList = reportList();
+ for(it_r = rList.begin(); it_r != rList.end(); ++it_r) {
+ MyMoneyReport r = *it_r;
+ QStringList pList;
+ QStringList::Iterator it_p;
+ (*it_r).payees(pList);
+ bool rChanged = false;
+ for(it_p = pList.begin(); it_p != pList.end(); ++it_p) {
+ if(payeeConversionMap.find(*it_p) != payeeConversionMap.end()) {
+ rc << i18n(" * Payee id updated in report '%1'.").arg((*it_r).name());
+ ++problemCount;
+ r.removeReference(*it_p);
+ r.addPayee(payeeConversionMap[*it_p]);
+ rChanged = true;
+ }
+ }
+ if(rChanged) {
+ m_storage->modifyReport(r);
+ }
+ }
+
+ // erase old payee ids
+ QMap<QString, QString>::Iterator it_m;
+ for(it_m = payeeConversionMap.begin(); it_m != payeeConversionMap.end(); ++it_m) {
+ MyMoneyPayee payee = this->payee(it_m.key());
+ removePayee(payee);
+ rc << i18n(" * Payee '%1' removed.").arg(payee.id());
+ ++problemCount;
+ }
+
+ // add more checks here
+
+ if(problemCount == 0)
+ rc << i18n("Finish! Data is consistent.");
+ else
+ rc << i18n("Finish! %1 problem(s) corrected. %2 problem(s) still present.")
+ .arg(problemCount).arg(unfixedCount);
+
+ return rc;
+}
+
+QString MyMoneyFile::createCategory(const MyMoneyAccount& base, const QString& name)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ MyMoneyAccount parent = base;
+ QString categoryText;
+
+ if(base.id() != expense().id() && base.id() != income().id())
+ throw new MYMONEYEXCEPTION("Invalid base category");
+
+ QStringList subAccounts = QStringList::split(AccountSeperator, name);
+ QStringList::Iterator it;
+ for (it = subAccounts.begin(); it != subAccounts.end(); ++it)
+ {
+ MyMoneyAccount categoryAccount;
+
+ categoryAccount.setName(*it);
+ categoryAccount.setAccountType(base.accountType());
+
+ if (it == subAccounts.begin())
+ categoryText += *it;
+ else
+ categoryText += (AccountSeperator + *it);
+
+ // Only create the account if it doesn't exist
+ try
+ {
+ QString categoryId = categoryToAccount(categoryText);
+ if (categoryId.isEmpty())
+ addAccount(categoryAccount, parent);
+ else
+ {
+ categoryAccount = account(categoryId);
+ }
+ }
+ catch (MyMoneyException *e)
+ {
+ qDebug("Unable to add account %s, %s, %s: %s",
+ categoryAccount.name().latin1(),
+ parent.name().latin1(),
+ categoryText.latin1(),
+ e->what().latin1());
+ delete e;
+ }
+
+ parent = categoryAccount;
+ }
+
+ return categoryToAccount(name);
+}
+
+const QValueList<MyMoneySchedule> MyMoneyFile::scheduleListEx( int scheduleTypes,
+ int scheduleOcurrences,
+ int schedulePaymentTypes,
+ QDate startDate,
+ const QStringList& accounts) const
+{
+ checkStorage();
+
+ return m_storage->scheduleListEx(scheduleTypes, scheduleOcurrences, schedulePaymentTypes, startDate, accounts);
+}
+
+void MyMoneyFile::addSecurity(MyMoneySecurity& security)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ m_storage->addSecurity(security);
+
+ d->m_cache.preloadSecurity(security);
+}
+
+void MyMoneyFile::modifySecurity(const MyMoneySecurity& security)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ m_storage->modifySecurity(security);
+
+ addNotification(security.id());
+}
+
+void MyMoneyFile::removeSecurity(const MyMoneySecurity& security)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ m_storage->removeSecurity(security);
+
+ addNotification(security.id(), false);
+}
+
+const MyMoneySecurity& MyMoneyFile::security(const QString& id) const
+{
+ if(id.isEmpty())
+ return baseCurrency();
+
+ return d->m_cache.security(id);
+}
+
+const QValueList<MyMoneySecurity> MyMoneyFile::securityList(void) const
+{
+ checkStorage();
+
+ return m_storage->securityList();
+}
+
+void MyMoneyFile::addCurrency(const MyMoneySecurity& currency)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ m_storage->addCurrency(currency);
+
+ // we can't really use addNotification here, because there is
+ // a difference in currency and security handling. So we just
+ // preload the object right here.
+ d->m_cache.preloadSecurity(currency);
+}
+
+void MyMoneyFile::modifyCurrency(const MyMoneySecurity& currency)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ // force reload of base currency object
+ if(currency.id() == d->m_baseCurrency.id())
+ d->m_baseCurrency.clearId();
+
+ m_storage->modifyCurrency(currency);
+
+ addNotification(currency.id());
+}
+
+void MyMoneyFile::removeCurrency(const MyMoneySecurity& currency)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ if(currency.id() == d->m_baseCurrency.id()) {
+ throw new MYMONEYEXCEPTION("Cannot delete base currency.");
+ }
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ m_storage->removeCurrency(currency);
+
+ addNotification(currency.id(), false);
+}
+
+const MyMoneySecurity& MyMoneyFile::currency(const QString& id) const
+{
+ if(id.isEmpty())
+ return baseCurrency();
+
+ const MyMoneySecurity& curr = d->m_cache.security(id);
+ if(curr.id().isEmpty())
+ throw new MYMONEYEXCEPTION("Currency not found.");
+ return curr;
+}
+
+const QValueList<MyMoneySecurity> MyMoneyFile::currencyList(void) const
+{
+ checkStorage();
+
+ return m_storage->currencyList();
+}
+
+const QString& MyMoneyFile::foreignCurrency(const QString& first, const QString& second) const
+{
+ if(baseCurrency().id() == second)
+ return first;
+ return second;
+}
+
+const MyMoneySecurity& MyMoneyFile::baseCurrency(void) const
+{
+ if(d->m_baseCurrency.id().isEmpty()) {
+ QString id = QString(value("kmm-baseCurrency"));
+ if(!id.isEmpty())
+ d->m_baseCurrency = currency(id);
+ }
+
+ return d->m_baseCurrency;
+}
+
+void MyMoneyFile::setBaseCurrency(const MyMoneySecurity& curr)
+{
+ // make sure the currency exists
+ MyMoneySecurity c = currency(curr.id());
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ if(c.id() != d->m_baseCurrency.id()) {
+ setValue("kmm-baseCurrency", curr.id());
+ // force reload of base currency cache
+ d->m_baseCurrency = MyMoneySecurity();
+ }
+}
+
+void MyMoneyFile::addPrice(const MyMoneyPrice& price)
+{
+ if(price.rate(QString()).isZero())
+ return;
+
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ m_storage->addPrice(price);
+}
+
+void MyMoneyFile::removePrice(const MyMoneyPrice& price)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ m_storage->removePrice(price);
+}
+
+const MyMoneyPrice MyMoneyFile::price(const QString& fromId, const QString& toId, const QDate& date, const bool exactDate) const
+{
+ checkStorage();
+
+ QString to(toId);
+ if(to.isEmpty())
+ to = value("kmm-baseCurrency");
+ // if some id is missing, we can return an empty price object
+ if(fromId.isEmpty() || to.isEmpty())
+ return MyMoneyPrice();
+
+ // we don't search our tables if someone asks stupid stuff
+ if(fromId == toId) {
+ return MyMoneyPrice(fromId, toId, date, MyMoneyMoney(1,1), "KMyMoney");
+ }
+
+ // search 'from-to' rate
+ MyMoneyPrice rc = m_storage->price(fromId, to, date, exactDate);
+ if(!rc.isValid()) {
+ // not found, search 'to-fron' rate and use reciprocal value
+ rc = m_storage->price(to, fromId, date, exactDate);
+ }
+ return rc;
+}
+
+const MyMoneyPriceList MyMoneyFile::priceList(void) const
+{
+ checkStorage();
+
+ return m_storage->priceList();
+}
+
+bool MyMoneyFile::hasAccount(const QString& id, const QString& name) const
+{
+ MyMoneyAccount acc = d->m_cache.account(id);
+ QStringList list = acc.accountList();
+ QStringList::ConstIterator it;
+ bool rc = false;
+ for(it = list.begin(); rc == false && it != list.end(); ++it) {
+ MyMoneyAccount a = d->m_cache.account(*it);
+ if(a.name() == name)
+ rc = true;
+ }
+ return rc;
+}
+
+const QValueList<MyMoneyReport> MyMoneyFile::reportList( void ) const
+{
+ checkStorage();
+
+ return m_storage->reportList();
+}
+
+void MyMoneyFile::addReport( MyMoneyReport& report )
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ m_storage->addReport( report );
+}
+
+void MyMoneyFile::modifyReport( const MyMoneyReport& report )
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ m_storage->modifyReport( report );
+
+ addNotification(report.id());
+}
+
+unsigned MyMoneyFile::countReports(void) const
+{
+ checkStorage();
+
+ return m_storage->countReports();
+}
+
+const MyMoneyReport MyMoneyFile::report( const QString& id ) const
+{
+ checkStorage();
+
+ return m_storage->report(id);
+}
+
+void MyMoneyFile::removeReport(const MyMoneyReport& report)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+ MyMoneyNotifier notifier(this);
+
+ m_storage->removeReport(report);
+
+ addNotification(report.id(), false);
+}
+
+
+const QValueList<MyMoneyBudget> MyMoneyFile::budgetList( void ) const
+{
+ checkStorage();
+
+ return m_storage->budgetList();
+}
+
+void MyMoneyFile::addBudget( MyMoneyBudget& budget )
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ m_storage->addBudget( budget );
+}
+
+const MyMoneyBudget MyMoneyFile::budgetByName(const QString& name) const
+{
+ checkStorage();
+
+ return m_storage->budgetByName(name);
+}
+
+void MyMoneyFile::modifyBudget( const MyMoneyBudget& budget )
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+
+ // clear all changed objects from cache
+ MyMoneyNotifier notifier(this);
+
+ m_storage->modifyBudget( budget );
+
+ addNotification(budget.id());
+}
+
+unsigned MyMoneyFile::countBudgets(void) const
+{
+ checkStorage();
+
+ return m_storage->countBudgets();
+}
+
+const MyMoneyBudget MyMoneyFile::budget( const QString& id ) const
+{
+ checkStorage();
+
+ return m_storage->budget(id);
+}
+
+void MyMoneyFile::removeBudget(const MyMoneyBudget& budget)
+{
+ checkTransaction(__PRETTY_FUNCTION__);
+ MyMoneyNotifier notifier(this);
+
+ m_storage->removeBudget(budget);
+
+ addNotification(budget.id(), false);
+}
+
+
+
+bool MyMoneyFile::isReferenced(const MyMoneyObject& obj, const MyMoneyFileBitArray& skipChecks) const
+{
+ checkStorage();
+ return m_storage->isReferenced(obj, skipChecks);
+}
+
+bool MyMoneyFile::checkNoUsed(const QString& accId, const QString& no) const
+{
+ // by definition, an empty string or a non-numeric string is not used
+ QRegExp exp(QString("(.*\\D)?(\\d+)(\\D.*)?"));
+ if(no.isEmpty() || exp.search(no) == -1)
+ return false;
+
+ MyMoneyTransactionFilter filter;
+ filter.addAccount(accId);
+ QValueList<MyMoneyTransaction> transactions = transactionList(filter);
+ QValueList<MyMoneyTransaction>::const_iterator it_t = transactions.begin();
+ while ( it_t != transactions.end() ) {
+ try {
+ MyMoneySplit split;
+ // Test whether the transaction also includes a split into
+ // this account
+ split = (*it_t).splitByAccount(accId, true /*match*/);
+ if(!split.number().isEmpty() && split.number() == no)
+ return true;
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+ ++it_t;
+ }
+ return false;
+}
+
+QString MyMoneyFile::highestCheckNo(const QString& accId) const
+{
+ unsigned64 lno = 0, cno;
+ QString no;
+ MyMoneyTransactionFilter filter;
+ filter.addAccount(accId);
+ QValueList<MyMoneyTransaction> transactions = transactionList(filter);
+ QValueList<MyMoneyTransaction>::const_iterator it_t = transactions.begin();
+ while ( it_t != transactions.end() ) {
+ try {
+ // Test whether the transaction also includes a split into
+ // this account
+ MyMoneySplit split = (*it_t).splitByAccount(accId, true /*match*/);
+ if(!split.number().isEmpty()) {
+ // non-numerical values stored in number will return 0 in the next line
+ cno = split.number().toULongLong();
+ if(cno > lno) {
+ lno = cno;
+ no = split.number();
+ }
+ }
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+ ++it_t;
+ }
+ return no;
+}
+
+void MyMoneyFile::clearCache(void)
+{
+ checkStorage();
+ m_storage->clearCache();
+ d->m_cache.clear();
+}
+
+void MyMoneyFile::preloadCache(void)
+{
+ checkStorage();
+
+ d->m_cache.clear();
+ QValueList<MyMoneyAccount> a_list;
+ m_storage->accountList(a_list);
+ d->m_cache.preloadAccount(a_list);
+ d->m_cache.preloadPayee(m_storage->payeeList());
+ d->m_cache.preloadInstitution(m_storage->institutionList());
+ d->m_cache.preloadSecurity(m_storage->securityList() + m_storage->currencyList());
+ d->m_cache.preloadSchedule(m_storage->scheduleList());
+}
+
+bool MyMoneyFile::isTransfer(const MyMoneyTransaction& t) const
+{
+ bool rc = false;
+ if(t.splitCount() == 2) {
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = t.splits().begin(); it_s != t.splits().end(); ++it_s) {
+ MyMoneyAccount acc = account((*it_s).accountId());
+ if(acc.isIncomeExpense())
+ break;
+ }
+ if(it_s == t.splits().end())
+ rc = true;
+ }
+ return rc;
+}
+
+bool MyMoneyFile::referencesClosedAccount(const MyMoneyTransaction& t) const
+{
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ const QValueList<MyMoneySplit>& list = t.splits();
+ for(it_s = list.begin(); it_s != list.end(); ++it_s) {
+ if(referencesClosedAccount(*it_s))
+ break;
+ }
+ return it_s != list.end();
+}
+
+bool MyMoneyFile::referencesClosedAccount(const MyMoneySplit& s) const
+{
+ if(s.accountId().isEmpty())
+ return false;
+
+ try {
+ return account(s.accountId()).isClosed();
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+ return false;
+}
+
+MyMoneyFileTransaction::MyMoneyFileTransaction() :
+ m_isNested(MyMoneyFile::instance()->hasTransaction()),
+ m_needRollback(!m_isNested)
+{
+ if(!m_isNested)
+ MyMoneyFile::instance()->startTransaction();
+}
+
+MyMoneyFileTransaction::~MyMoneyFileTransaction()
+{
+ rollback();
+}
+
+void MyMoneyFileTransaction::restart(void)
+{
+ rollback();
+
+ m_needRollback = !m_isNested;
+ if(!m_isNested)
+ MyMoneyFile::instance()->startTransaction();
+}
+
+void MyMoneyFileTransaction::commit(void)
+{
+ if(!m_isNested)
+ MyMoneyFile::instance()->commitTransaction();
+ m_needRollback = false;
+}
+
+void MyMoneyFileTransaction::rollback(void)
+{
+ if(m_needRollback)
+ MyMoneyFile::instance()->rollbackTransaction();
+ m_needRollback = false;
+}
+
+
+#include "mymoneyfile.moc"
diff --git a/kmymoney2/mymoney/mymoneyfile.h b/kmymoney2/mymoney/mymoneyfile.h
new file mode 100644
index 0000000..39552c9
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyfile.h
@@ -0,0 +1,1470 @@
+/***************************************************************************
+ mymoneyfile.h
+ -------------------
+ copyright : (C) 2002, 2007 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYFILE_H
+#define MYMONEYFILE_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qobject.h>
+#include <qstring.h>
+#include <qmap.h>
+#include <qvaluelist.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/imymoneystorage.h>
+#include <kmymoney/mymoneyexception.h>
+#include <kmymoney/mymoneyutils.h>
+#include <kmymoney/mymoneyinstitution.h>
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneytransaction.h>
+#include <kmymoney/mymoneypayee.h>
+#include <kmymoney/mymoneykeyvaluecontainer.h>
+#include <kmymoney/mymoneysecurity.h>
+#include <kmymoney/mymoneyprice.h>
+#include <kmymoney/mymoneyreport.h>
+#include <kmymoney/mymoneybudget.h>
+#include <kmymoney/mymoneyscheduled.h>
+#include <kmymoney/export.h>
+
+/**
+ * @author Thomas Baumgart, Michael Edwardes, Kevin Tambascio
+ */
+
+class IMyMoneyStorage;
+class MyMoneyTransactionFilter;
+
+/**
+ * This class represents the interface to the MyMoney engine.
+ * For historical reasons it is still called MyMoneyFile.
+ * It is implemented using the singleton pattern and thus only
+ * exists once for each running instance of an application.
+ *
+ * The instance of the MyMoneyFile object is accessed as follows:
+ *
+ * @code
+ * MyMoneyFile *file = MyMoneyFile::instance();
+ * file->anyMemberFunction();
+ * @endcode
+ *
+ * The first line of the above code creates a unique MyMoneyFile
+ * object if it is called for the first time ever. All subsequent
+ * calls to this functions return a pointer to the object created
+ * during the first call.
+ *
+ * As the MyMoneyFile object represents the business logic, a storage
+ * manager must be attached to it. This mechanism allows to use different
+ * access methods to store the objects. The interface to access such an
+ * storage manager is defined in the class IMyMoneyStorage. The methods
+ * attachStorage() and detachStorage() are used to attach/detach a
+ * storage manager object. The following code can be used to create a
+ * functional MyMoneyFile instance:
+ *
+ * @code
+ * IMyMoneyStorage *storage = ....
+ * MyMoneyFile *file = MyMoneyFile::instance();
+ * file->attachStorage(storage);
+ * @endcode
+ *
+ * The methods addAccount(), modifyAccount() and removeAccount() implement the
+ * general account maintenance functions. The method reparentAccount() is
+ * available to move an account from one superordinate account to another.
+ * account() and accountList() are used to retrieve a single instance or a
+ * QValueList of MyMoneyAccount objects.
+ *
+ * The methods addInstitution(), modifyInstitution() and removeInstitution()
+ * implement the general institution maintenance functions. institution() and
+ * institutionList() are used to retrieve a single instance or a
+ * QValueList of MyMoneyInstitution objects.
+ *
+ * The methods addPayee(), modifyPayee() and removePayee()
+ * implement the general institution maintenance functions.
+ * payee() and payeeList() are used to retrieve a single instance or a
+ * QValueList of MyMoneyPayee objects.
+ *
+ * The methods addTransaction(), modifyTransaction() and removeTransaction()
+ * implement the general transaction maintenance functions.
+ * transaction() and transactionList() are used to retrieve
+ * a single instance or a QValueList of MyMoneyTransaction objects.
+ *
+ * The methods addSecurity(), modifySecurity() and removeSecurity()
+ * implement the general access to equities held in the engine.
+ *
+ * The methods addCurrency(), modifyCurrency() and removeCurrency()
+ * implement the general access to multiple currencies held in the engine.
+ * The methods baseCurrency() and setBaseCurrency() allow to retrieve/set
+ * the currency selected by the user as base currency. If a currency
+ * reference is emtpy, it will usually be interpreted as baseCurrency().
+ *
+ * The methods liability(), asset(), expense(), income() and equity() are
+ * used to retrieve the five standard accounts. isStandardAccount()
+ * checks if a given accountId references one of the or not.
+ * setAccountName() is used to specify a name for the standard accounts
+ * from the GUI.
+ *
+ * The MyMoneyFile object emits the dataChanged() signal when data
+ * has been changed.
+ *
+ * For abritrary values that have to be stored with the storage object
+ * but are of importance to the application only, the object is derived
+ * for MyMoneyKeyValueContainer which provides a container to store
+ * these values indexed by an alphanumeric key.
+ *
+ * @exception MyMoneyException is thrown whenever an error occurs
+ * while the engine code is running. The MyMoneyException:: object
+ * describes the problem.
+ */
+class KMYMONEY_EXPORT MyMoneyFile : public QObject
+{
+ Q_OBJECT
+public:
+
+ class MyMoneyNotifier
+ {
+ public:
+ MyMoneyNotifier(MyMoneyFile* file) { m_file = file; m_file->clearNotification(); };
+ ~MyMoneyNotifier() { m_file->notify(); };
+ private:
+ MyMoneyFile* m_file;
+ };
+
+ friend class MyMoneyNotifier;
+
+ /**
+ * This is the function to access the MyMoneyFile object.
+ * It returns a pointer to the single instance of the object.
+ */
+ static inline MyMoneyFile* instance() { return &file; }
+
+ /**
+ * This is the destructor for any MyMoneyFile object
+ */
+ ~MyMoneyFile();
+
+ /**
+ * @deprecated This is a convenience constructor. Do not use it anymore.
+ * It will be deprecated in a future version of the engine.
+ *
+ * @param storage pointer to object that implements the IMyMoneyStorage
+ * interface.
+ */
+ MyMoneyFile(IMyMoneyStorage *storage);
+
+ // general get functions
+ const MyMoneyPayee user(void) const;
+
+ // general set functions
+ void setUser(const MyMoneyPayee& user);
+
+ /**
+ * This method is used to attach a storage object to the MyMoneyFile object
+ * Without an attached storage object, the MyMoneyFile object is
+ * of no use.
+ *
+ * After successful completion, the dataChanged() signal is emitted.
+ *
+ * In case of an error condition, an exception is thrown.
+ * The following error conditions are checked:
+ *
+ * - @a storage is not equal to 0
+ * - there is no other @a storage object attached (use detachStorage()
+ * to revert the attachStorage() operation.
+ *
+ * @param storage pointer to object that implements the IMyMoneyStorage
+ * interface.
+ *
+ * @sa detachStorage()
+ */
+ void attachStorage(IMyMoneyStorage* const storage);
+
+ /**
+ * This method is used to detach a previously attached storage
+ * object from the MyMoneyFile object. If no storage object
+ * is attached to the engine, this is a NOP.
+ *
+ * @param storage pointer to object that implements the IMyMoneyStorage
+ * interface.
+ *
+ * @sa attachStorage()
+ */
+ void detachStorage(IMyMoneyStorage* const storage = 0);
+
+ /**
+ * This method returns whether a storage is currently attached to
+ * the engine or not.
+ *
+ * @return true if storage object is attached, false otherwise
+ */
+ bool storageAttached(void) const { return m_storage != 0; };
+
+ /**
+ * This method returns a pointer to the storage object
+ *
+ * @return const pointer to the current attached storage object.
+ * If no object is attached, returns 0.
+ */
+ IMyMoneyStorage* storage(void) const { return m_storage; };
+
+ /**
+ * This method must be called before any single change or a series of changes
+ * in the underlying storage area is performed.
+ * Once all changes are complete (i.e. the transaction is completed),
+ * commitTransaction() must be called to finalize all changes. If an error occurs
+ * during the processing of the changes call rollbackTransaction() to undo the
+ * changes done so far.
+ */
+ void startTransaction(void);
+
+ /**
+ * This method returns whether a transaction has been started (@a true)
+ * or not (@a false).
+ */
+ bool hasTransaction(void) const;
+
+ /**
+ * @sa startTransaction()
+ */
+ void commitTransaction(void);
+
+ /**
+ * @sa startTransaction()
+ */
+ void rollbackTransaction(void);
+
+ /**
+ * This method is used to return the standard liability account
+ * @return MyMoneyAccount liability account(group)
+ */
+ const MyMoneyAccount& liability(void) const;
+
+ /**
+ * This method is used to return the standard asset account
+ * @return MyMoneyAccount asset account(group)
+ */
+ const MyMoneyAccount& asset(void) const;
+
+ /**
+ * This method is used to return the standard expense account
+ * @return MyMoneyAccount expense account(group)
+ */
+ const MyMoneyAccount& expense(void) const;
+
+ /**
+ * This method is used to return the standard income account
+ * @return MyMoneyAccount income account(group)
+ */
+ const MyMoneyAccount& income(void) const;
+
+ /**
+ * This method is used to return the standard equity account
+ * @return MyMoneyAccount equity account(group)
+ */
+ const MyMoneyAccount& equity(void) const;
+
+ /**
+ * This method returns the account information for the opening
+ * balances account for the given @p security. If the respective
+ * account does not exist, it will be created. The name is constructed
+ * using MyMoneyFile::OpeningBalancesPrefix and appending " (xxx)" in
+ * case the @p security is not the baseCurrency(). The account created
+ * will be a sub-account of the standard equity account provided by equity().
+ *
+ * @param security Security for which the account is searched
+ *
+ * @return The opening balance account
+ *
+ * @note No notifications will be sent!
+ */
+ const MyMoneyAccount openingBalanceAccount(const MyMoneySecurity& security);
+
+ /**
+ * This method is essentially the same as the above, except it works on
+ * const objects. If there is no opening balance account, this method
+ * WILL NOT create one. Instead it will thrown an exception.
+ *
+ * @param security Security for which the account is searched
+ *
+ * @return The opening balance account
+ *
+ * @note No notifications will be sent!
+ */
+ const MyMoneyAccount openingBalanceAccount(const MyMoneySecurity& security) const;
+
+ /**
+ * Create an opening balance transaction for the account @p acc
+ * with a value of @p balance. If the corresponding opening balance account
+ * for the account's currency does not exist it will be created. If it exists
+ * and it's opening date is later than the opening date of @p acc,
+ * the opening date of the opening balances account will be adjusted to the
+ * one of @p acc.
+ *
+ * @param acc reference to account for which the opening balance transaction
+ * should be created
+ * @param balance reference to the value of the opening balance transaction
+ *
+ * @returns The created MyMoneyTransaction object. In case no transaction has been
+ * created, the id of the object is empty.
+ */
+ MyMoneyTransaction createOpeningBalanceTransaction(const MyMoneyAccount& acc, const MyMoneyMoney& balance);
+
+ /**
+ * Retrieve the opening balance transaction for the account @p acc.
+ * If there is no opening balance transaction, QString() will be returned.
+ *
+ * @param acc reference to account for which the opening balance transaction
+ * should be retrieved
+ * @return QString id for the transaction, or QString() if no transaction exists
+ */
+ QString openingBalanceTransaction(const MyMoneyAccount& acc) const;
+
+ /**
+ * This method returns an indicator if the MyMoneyFile object has been
+ * changed after it has last been saved to permanent storage.
+ *
+ * @return true if changed, false if not
+ */
+ bool dirty(void) const;
+
+ /**
+ * This method is used to force the attached storage object to
+ * be dirty. This is used by the application to re-set the dirty
+ * flag after a failed upload to a server when the save operation
+ * to a local temp file was OK.
+ */
+ void setDirty(void) const;
+
+ /**
+ * Adds an institution to the file-global institution pool. A
+ * respective institution-ID will be generated for this object.
+ * The ID is stored as QString in the object passed as argument.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param institution The complete institution information in a
+ * MyMoneyInstitution object
+ */
+ void addInstitution(MyMoneyInstitution& institution);
+
+ /**
+ * Modifies an already existing institution in the file global
+ * institution pool.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param institution The complete new institution information
+ */
+ void modifyInstitution(const MyMoneyInstitution& institution);
+
+ /**
+ * Deletes an existing institution from the file global institution pool
+ * Also modifies the accounts that reference this institution as
+ * their institution.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param institution institution to be deleted.
+ */
+ void removeInstitution(const MyMoneyInstitution& institution);
+
+ /**
+ * Adds an account to the file-global account pool. A respective
+ * account-ID will be generated within this record. The modified
+ * members of @a account will be updated.
+ *
+ * A few parameters of the account to be added are checked against
+ * the following conditions. If they do not match, an exception is
+ * thrown.
+ *
+ * An account must match the following conditions:
+ *
+ * a) the account must have a name with length > 0
+ * b) the account must not have an id assigned
+ * c) the transaction list must be empty
+ * d) the account must not have any sub-ordinate accounts
+ * e) the account must have no parent account
+ * f) the account must not have any reference to a MyMoneyFile object
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param account The complete account information in a MyMoneyAccount object
+ * @param parent The complete account information of the parent account
+ */
+ void addAccount(MyMoneyAccount& account, MyMoneyAccount& parent);
+
+ /**
+ * Modifies an already existing account in the file global account pool.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param account reference to the new account information
+ */
+ void modifyAccount(const MyMoneyAccount& account);
+
+ /**
+ * This method re-parents an existing account
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param account MyMoneyAccount reference to account to be re-parented
+ * @param parent MyMoneyAccount reference to new parent account
+ */
+ void reparentAccount(MyMoneyAccount &account, MyMoneyAccount& parent);
+
+ /**
+ * moves splits from one account to another
+ *
+ * @param oldAccount id of the current account
+ * @param newAccount if of the new account
+ *
+ * @return the number of modified splits
+ */
+ unsigned int moveSplits(const QString& oldAccount, const QString& newAccount);
+
+ /**
+ * This method is used to determince, if the account with the
+ * given ID is referenced by any split in m_transactionList.
+ *
+ * @param id id of the account to be checked for
+ * @return true if account is referenced, false otherwise
+ */
+ bool hasActiveSplits(const QString& id) const;
+
+ /**
+ * This method is used to check whether a given
+ * account id references one of the standard accounts or not.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param id account id
+ * @return true if account-id is one of the standards, false otherwise
+ */
+ bool isStandardAccount(const QString& id) const;
+
+ /**
+ * Returns @a true, if transaction @p t is a transfer transaction.
+ * A transfer transaction has two splits, both referencing either
+ * an asset, a liability or an equity account.
+ */
+ bool isTransfer(const MyMoneyTransaction& t) const;
+
+ /**
+ * This method is used to set the name for the specified standard account
+ * within the storage area. An exception will be thrown, if an error
+ * occurs
+ *
+ * @param id QString reference to one of the standard accounts.
+ * @param name QString reference to the name to be set
+ *
+ */
+ void setAccountName(const QString& id, const QString& name) const;
+
+ /**
+ * Deletes an existing account from the file global account pool
+ * This method only allows to remove accounts that are not
+ * referenced by any split. Use moveSplits() to move splits
+ * to another account. An exception is thrown in case of a
+ * problem.
+ *
+ * @param account reference to the account to be deleted.
+ */
+ void removeAccount(const MyMoneyAccount& account);
+
+ /**
+ * Deletes existing accounts and their subaccounts recursivly
+ * from the global account pool.
+ * This method expects that all accounts and their subaccounts
+ * are no longer assigned to any transactions or splits.
+ * An exception is thrown in case of a problem deleting an account.
+ *
+ * The optional parameter level is used to keep track of the recursion level.
+ * If the recursion level exceeds 100 (some arbitrary number which seems a good
+ * maximum), an exception is thrown.
+ *
+ * @param account_list Reference to a list of account IDs to be deleted.
+ * @param level Parameter to keep track of recursion level (do not pass a value here).
+ */
+ void removeAccountList(const QStringList& account_list, unsigned int level = 0);
+
+ /**
+ * This member function checks all accounts identified by account_list
+ * and their subaccounts wether they are assigned to transactions/splits or not.
+ * The function calls itself recursively with the list of sub-accounts of
+ * the currently processed account.
+ *
+ * The optional parameter level is used to keep track of the recursion level.
+ * If the recursion level exceeds 100 (some arbitrary number which seems a good
+ * maximum), an exception is thrown.
+ *
+ * @param account_list A QStringList with account IDs that need to be checked.
+ * @param level (optional) Optional parameter to indicate recursion level.
+ * @return Returns 'false' if at least one account has been found that
+ * is still referenced by a transaction.
+ */
+ bool hasOnlyUnusedAccounts(const QStringList& account_list, unsigned int level = 0);
+
+ /**
+ * Adds a transaction to the file-global transaction pool. A respective
+ * transaction-ID will be generated for this object. The ID is stored
+ * as QString in the object passed as argument.
+ * Splits must reference valid accounts and valid payees. The payee
+ * id can be empty.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param transaction reference to the transaction
+ */
+ void addTransaction(MyMoneyTransaction& transaction);
+
+ /**
+ * This method is used to update a specific transaction in the
+ * transaction pool of the MyMoneyFile object.
+ * Splits must reference valid accounts and valid payees. The payee
+ * id can be empty.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param transaction reference to transaction to be changed
+ */
+ void modifyTransaction(const MyMoneyTransaction& transaction);
+
+ /**
+ * This method is used to extract a transaction from the file global
+ * transaction pool through an id. In case of an invalid id, an
+ * exception will be thrown.
+ *
+ * @param id id of transaction as QString.
+ * @return reference to the requested transaction
+ */
+ const MyMoneyTransaction transaction(const QString& id) const;
+
+ /**
+ * This method is used to extract a transaction from the file global
+ * transaction pool through an index into an account.
+ *
+ * @param account id of the account as QString
+ * @param idx number of transaction in this account
+ * @return reference to MyMoneyTransaction object
+ */
+ const MyMoneyTransaction transaction(const QString& account, const int idx) const;
+
+ /**
+ * This method is used to pull a list of transactions from the file
+ * global transaction pool. It returns all those transactions
+ * that match the filter passed as argument. If the filter is empty,
+ * the whole journal will be returned.
+ * The list returned is sorted according to the transactions posting date.
+ * If more than one transaction exists for the same date, the order among
+ * them is undefined.
+ *
+ * @param filter MyMoneyTransactionFilter object with the match criteria
+ *
+ * @return set of transactions in form of a QValueList<MyMoneyTransaction>
+ */
+ const QValueList<MyMoneyTransaction> transactionList(MyMoneyTransactionFilter& filter) const;
+
+ void transactionList(QValueList<MyMoneyTransaction>& list, MyMoneyTransactionFilter& filter) const;
+
+ void transactionList(QValueList<QPair<MyMoneyTransaction, MyMoneySplit> >& list, MyMoneyTransactionFilter& filter) const;
+
+ /**
+ * This method is used to remove a transaction from the transaction
+ * pool (journal).
+ *
+ * @param transaction const reference to transaction to be deleted
+ */
+ void removeTransaction(const MyMoneyTransaction& transaction);
+
+ /**
+ * This method is used to return the actual balance of an account
+ * without it's sub-ordinate accounts. If a @p date is presented,
+ * the balance at the beginning of this date (not including any
+ * transaction on this date) is returned. Otherwise all recorded
+ * transactions are included in the balance.
+ *
+ * @param id id of the account in question
+ * @param date return balance for specific date (default = QDate())
+ * @return balance of the account as MyMoneyMoney object
+ */
+ const MyMoneyMoney balance(const QString& id, const QDate& date = QDate()) const;
+
+ /**
+ * This method is used to return the actual balance of an account
+ * including it's sub-ordinate accounts. If a @p date is presented,
+ * the balance at the beginning of this date (not including any
+ * transaction on this date) is returned. Otherwise all recorded
+ * transactions are included in the balance.
+ *
+ * @param id id of the account in question
+ * @param date return balance for specific date (default = QDate())
+ * @return balance of the account as MyMoneyMoney object
+ */
+ const MyMoneyMoney totalBalance(const QString& id, const QDate& date = QDate()) const;
+
+ /**
+ * This method returns the number of transactions currently known to file
+ * in the range 0..MAXUINT
+ *
+ * @param account QString reference to account id. If account is empty
+ + all transactions (the journal) will be counted. If account
+ * is not empty it returns the number of transactions
+ * that have splits in this account.
+ *
+ * @return number of transactions in journal/account
+ */
+ unsigned int transactionCount(const QString& account = QString()) const;
+
+ /**
+ * This method returns a QMap filled with the number of transactions
+ * per account. The account id serves as index into the map. If one
+ * needs to have all transactionCounts() for many accounts, this method
+ * is faster than calling transactionCount(const QString& account) many
+ * times.
+ *
+ * @return QMap with numbers of transactions per account
+ */
+ const QMap<QString, unsigned long> transactionCountMap(void) const;
+
+ /**
+ * This method returns the number of institutions currently known to file
+ * in the range 0..MAXUINT
+ *
+ * @return number of institutions known to file
+ */
+ unsigned int institutionCount(void) const;
+
+ /**
+ * This method returns the number of accounts currently known to file
+ * in the range 0..MAXUINT
+ *
+ * @return number of accounts currently known inside a MyMoneyFile object
+ */
+ unsigned int accountCount(void) const;
+
+ /**
+ * Returns the institution of a given ID
+ *
+ * @param id id of the institution to locate
+ * @return MyMoneyInstitution object filled with data. If the institution
+ * could not be found, an exception will be thrown
+ */
+ const MyMoneyInstitution& institution(const QString& id) const;
+
+ /**
+ * This method returns a list of the institutions
+ * inside a MyMoneyFile object
+ *
+ * @param list reference to the list. It will be cleared by this method first
+ */
+ void institutionList(QValueList<MyMoneyInstitution>& list) const;
+
+ /**
+ * This method returns a list of the institutions
+ * inside a MyMoneyFile object. This is a convenience method
+ * to the one above
+ *
+ * @return QValueList containing the institution objects
+ */
+ const QValueList<MyMoneyInstitution> institutionList(void) const;
+
+ /**
+ * Returns the account addressed by its id.
+ *
+ * @param id id of the account to locate.
+ * @return MyMoneyAccount object carrying the @p id. An exception is thrown
+ * if the id is unknown
+ */
+ const MyMoneyAccount& account(const QString& id) const;
+
+ /**
+ * Returns the account addressed by its name.
+ *
+ * @param name name of the account to locate.
+ * @return First MyMoneyAccount object found carrying the @p name.
+ * An empty MyMoneyAccount object will be returned if the name is not found.
+ */
+ const MyMoneyAccount& accountByName(const QString& name) const;
+
+ /**
+ * Returns the sub-account addressed by its name.
+ *
+ * @param acc account to search in
+ * @param name name of the account to locate.
+ * @return First MyMoneyAccount object found carrying the @p name.
+ * An empty MyMoneyAccount object will be returned if the name is not found.
+ */
+ const MyMoneyAccount& subAccountByName(const MyMoneyAccount& acc, const QString& name) const;
+
+ /**
+ * This method returns a list of accounts inside a MyMoneyFile object.
+ * An optional parameter is a list of id's. If this list is emtpy (the default)
+ * the returned list contains all accounts, otherwise only those referenced
+ * in the id-list.
+ *
+ * @param list reference to QValueList receiving the account objects
+ * @param idlist QStringList of account ids of those accounts that
+ * should be returned. If this list is empty, all accounts
+ * currently known will be returned.
+ *
+ * @param recursive if @p true, then recurse in all found accounts. The default is @p false
+ */
+ void accountList(QValueList<MyMoneyAccount>& list, const QStringList& idlist = QStringList(), const bool recursive = false) const;
+
+ /**
+ * This method is used to convert an account id to a string representation
+ * of the names which can be used as a category description. If the account
+ * is part of a hierarchy, the category name will be the concatenation of
+ * the single account names seperated by MyMoneyAccount::AccountSeperator.
+ *
+ * @param accountId QString reference of the account's id
+ * @param includeStandardAccounts if true, the standard top account will be part
+ * of the name, otherwise it will not be included (default is @c false)
+ *
+ * @return QString of the constructed name.
+ */
+ QString accountToCategory(const QString& accountId, bool includeStandardAccounts = false) const;
+
+ /**
+ * This method is used to convert a string representing a category to
+ * an account id. A category can be the concatenation of multiple accounts
+ * representing a hierarchy of accounts. They have to be seperated by
+ * MyMoneyAccount::AccountSeperator.
+ *
+ * @param category const reference to QString containing the category
+ * @param type account type if a specific type is required (defaults to UnknownAccountType)
+ *
+ * @return QString of the corresponding account. If account was not found
+ * the return value will be an empty string.
+ */
+ QString categoryToAccount(const QString& category, MyMoneyAccount::accountTypeE type = MyMoneyAccount::UnknownAccountType) const;
+
+ /**
+ * This method is used to convert a string representing an asset or
+ * liability account to an account id. An account name can be the
+ * concatenation of multiple accounts representing a hierarchy of
+ * accounts. They have to be seperated by MyMoneyAccount::AccountSeperator.
+ *
+ * @param name const reference to QString containing the account name
+ *
+ * @return QString of the corresponding account. If account was not found
+ * the return value will be an empty string.
+ */
+ QString nameToAccount(const QString& name) const;
+
+ /**
+ * This method is used to extract the parent part of an account hierarchy
+ * name who's parts are seperated by MyMoneyAccount::AccountSeperator.
+ *
+ * @param name full account name
+ * @return parent name (full account name excluding the last part)
+ */
+ QString parentName(const QString& name) const;
+
+ /**
+ * This method is used to create a new payee
+ *
+ * An exception will be thrown upon error conditions
+ *
+ * @param payee MyMoneyPayee reference to payee information
+ */
+ void addPayee(MyMoneyPayee& payee);
+
+ /**
+ * This method is used to retrieve information about a payee
+ * An exception will be thrown upon error conditions.
+ *
+ * @param id QString reference to id of payee
+ *
+ * @return MyMoneyPayee object of payee
+ */
+ const MyMoneyPayee& payee(const QString& id) const;
+
+ /**
+ * This method is used to retrieve the id to a corresponding
+ * name of a payee/receiver.
+ * An exception will be thrown upon error conditions.
+ *
+ * @param payee QString reference to name of payee
+ *
+ * @return MyMoneyPayee object of payee
+ */
+ const MyMoneyPayee& payeeByName(const QString& payee) const;
+
+ /**
+ * This method is used to modify an existing payee
+ *
+ * An exception will be thrown upon error conditions
+ *
+ * @param payee MyMoneyPayee reference to payee information
+ */
+ void modifyPayee(const MyMoneyPayee& payee);
+
+ /**
+ * This method is used to remove an existing payee.
+ * An error condition occurs, if the payee is still referenced
+ * by a split.
+ *
+ * An exception will be thrown upon error conditions
+ *
+ * @param payee MyMoneyPayee reference to payee information
+ */
+ void removePayee(const MyMoneyPayee& payee);
+
+ /**
+ * This method returns a list of the payees
+ * inside a MyMoneyStorage object
+ *
+ * @return QValueList<MyMoneyPayee> containing the payee information
+ */
+ const QValueList<MyMoneyPayee> payeeList(void) const;
+
+ /**
+ * This method is used to extract a value from the storage's
+ * KeyValueContainer. For details see MyMoneyKeyValueContainer::value().
+ *
+ * @param key const reference to QString containing the key
+ * @return QString containing the value
+ */
+ QString value(const QString& key) const;
+
+ /**
+ * This method is used to set a value in the storage's
+ * KeyValueContainer. For details see MyMoneyKeyValueContainer::setValue().
+ *
+ * @param key const reference to QString containing the key
+ * @param val const reference to QString containing the value
+ *
+ * @note Keys starting with the leadin @p kmm- are reserved for internal use
+ * by the MyMoneyFile object.
+ */
+ void setValue(const QString& key, const QString& val);
+
+ /**
+ * This method is used to delete a key-value-pair from the
+ * storage's KeyValueContainer identified by the parameter
+ * @p key. For details see MyMoneyKeyValueContainer::deletePair().
+ *
+ * @param key const reference to QString containing the key
+ */
+ void deletePair(const QString& key);
+
+ /**
+ * This method is used to add a scheduled transaction to the engine.
+ * It must be sure, that the id of the object is not filled. When the
+ * method returns to the caller, the id will be filled with the
+ * newly created object id value.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param sched reference to the MyMoneySchedule object
+ */
+ void addSchedule(MyMoneySchedule& sched);
+
+ /**
+ * This method is used to modify an existing MyMoneySchedule
+ * object. Therefor, the id attribute of the object must be set.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param sched const reference to the MyMoneySchedule object to be updated
+ */
+ void modifySchedule(const MyMoneySchedule& sched);
+
+ /**
+ * This method is used to remove an existing MyMoneySchedule object
+ * from the engine. The id attribute of the object must be set.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param sched const reference to the MyMoneySchedule object to be updated
+ */
+ void removeSchedule(const MyMoneySchedule& sched);
+
+ /**
+ * This method is used to retrieve a single MyMoneySchedule object.
+ * The id of the object must be supplied in the parameter @p id.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param id QString containing the id of the MyMoneySchedule object
+ * @return MyMoneySchedule object
+ */
+ const MyMoneySchedule schedule(const QString& id) const;
+
+ /**
+ * This method is used to extract a list of scheduled transactions
+ * according to the filter criteria passed as arguments.
+ *
+ * @param accountId only search for scheduled transactions that reference
+ * account @p accountId. If accountId is the empty string,
+ * this filter is off. Default is @p QString().
+ * @param type only schedules of type @p type are searched for.
+ * See MyMoneySchedule::typeE for details.
+ * Default is MyMoneySchedule::TYPE_ANY
+ * @param occurence only schedules of occurence type @p occurence are searched for.
+ * See MyMoneySchedule::occurenceE for details.
+ * Default is MyMoneySchedule::OCCUR_ANY
+ * @param paymentType only schedules of payment method @p paymentType
+ * are searched for.
+ * See MyMoneySchedule::paymentTypeE for details.
+ * Default is MyMoneySchedule::STYPE_ANY
+ * @param startDate only schedules with payment dates after @p startDate
+ * are searched for. Default is all dates (QDate()).
+ * @param endDate only schedules with payment dates ending prior to @p endDate
+ * are searched for. Default is all dates (QDate()).
+ * @param overdue if true, only those schedules that are overdue are
+ * searched for. Default is false (all schedules will be returned).
+ *
+ * @return const QValueList<MyMoneySchedule> list of schedule objects.
+ */
+ const QValueList<MyMoneySchedule> scheduleList(const QString& accountId = QString(),
+ const MyMoneySchedule::typeE type = MyMoneySchedule::TYPE_ANY,
+ const MyMoneySchedule::occurenceE occurence = MyMoneySchedule::OCCUR_ANY,
+ const MyMoneySchedule::paymentTypeE paymentType = MyMoneySchedule::STYPE_ANY,
+ const QDate& startDate = QDate(),
+ const QDate& endDate = QDate(),
+ const bool overdue = false) const;
+
+ const QStringList consistencyCheck(void);
+
+ /**
+ * MyMoneyFile::OpeningBalancesPrefix is a special string used
+ * to generate the name for opening balances accounts. See openingBalanceAccount()
+ * for details.
+ */
+ static const QString OpeningBalancesPrefix;
+
+ /**
+ * MyMoneyFile::AccountSeperator is used as the seperator
+ * between account names to form a hierarchy.
+ */
+ static const QString AccountSeperator;
+
+ /**
+ * createCategory creates a category from a text name.
+ *
+ * The whole account hierarchy is created if it doesnt
+ * already exist. e.g if name = Bills:Credit Card and
+ * base = expense(), Bills will first be checked to see if
+ * it exists and created if not. Credit Card will then
+ * be created with Bills as it's parent. The Credit Card account
+ * will have it's id returned.
+ *
+ * @param base The base account (expense or income)
+ * @param name The category to create
+ *
+ * @return The category account id or empty on error.
+ *
+ * @exception An exception will be thrown, if @p base is not equal
+ * expense() or income().
+ **/
+ QString createCategory(const MyMoneyAccount& base, const QString& name);
+
+ const QValueList<MyMoneySchedule> scheduleListEx( int scheduleTypes,
+ int scheduleOcurrences,
+ int schedulePaymentTypes,
+ QDate startDate,
+ const QStringList& accounts=QStringList()) const;
+
+ /**
+ * This method is used to add a new security object to the engine.
+ * The ID of the object is the trading symbol, so there is no need for an additional
+ * ID since the symbol is guaranteed to be unique.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param security reference to the MyMoneySecurity object
+ */
+ void addSecurity(MyMoneySecurity& security);
+
+ /**
+ * This method is used to modify an existing MyMoneySchedule
+ * object.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param security reference to the MyMoneySecurity object to be updated
+ */
+ void modifySecurity(const MyMoneySecurity& security);
+
+ /**
+ * This method is used to remove an existing MyMoneySecurity object
+ * from the engine.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param security reference to the MyMoneySecurity object to be removed
+ */
+ void removeSecurity(const MyMoneySecurity& security);
+
+ /**
+ * This method is used to retrieve a single MyMoneySecurity object.
+ * The id of the object must be supplied in the parameter @p id.
+ * If no security with the given id is found, then a corresponding
+ * currency is searched. If @p id is empty, the baseCurrency() is returned.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param id QString containing the id of the MyMoneySecurity object
+ * @return MyMoneySecurity object
+ */
+ const MyMoneySecurity& security(const QString& id) const;
+
+ /**
+ * This method is used to retrieve a list of all MyMoneySecurity objects.
+ */
+ const QValueList<MyMoneySecurity> securityList(void) const;
+
+ /**
+ * This method is used to add a new currency object to the engine.
+ * The ID of the object is the trading symbol, so there is no need for an additional
+ * ID since the symbol is guaranteed to be unique.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param currency reference to the MyMoneySecurity object
+ */
+ void addCurrency(const MyMoneySecurity& currency);
+
+ /**
+ * This method is used to modify an existing MyMoneySecurity
+ * object.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param currency reference to the MyMoneySecurity object
+ */
+ void modifyCurrency(const MyMoneySecurity& currency);
+
+ /**
+ * This method is used to remove an existing MyMoneySecurity object
+ * from the engine.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param currency reference to the MyMoneySecurity object
+ */
+ void removeCurrency(const MyMoneySecurity& currency);
+
+ /**
+ * This method is used to retrieve a single MyMoneySchedule object.
+ * The id of the object must be supplied in the parameter @p id.
+ * If @p id is empty, this method returns baseCurrency().
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param id QString containing the id of the MyMoneySchedule object
+ * @return MyMoneySchedule object
+ */
+ const MyMoneySecurity& currency(const QString& id) const;
+
+ /**
+ * This method is used to retrieve the list of all currencies
+ * known to the engine.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @return QValueList of all MyMoneySecurity objects.
+ */
+ const QValueList<MyMoneySecurity> currencyList(void) const;
+
+ /**
+ * This method retrieves a MyMoneySecurity object representing
+ * the selected base currency. If the base currency is not
+ * selected (e.g. due to a previous call to setBaseCurrency())
+ * a standard MyMoneySecurity object will be returned. See
+ * MyMoneySecurity() for details.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @return MyMoneySecurity describing base currency
+ */
+ const MyMoneySecurity& baseCurrency(void) const;
+
+ /**
+ * This method returns the foreign currency of the given two
+ * currency ids. If second is the base currency id then @a first
+ * is returned otherwise @a second is returned.
+ */
+ const QString& foreignCurrency(const QString& first, const QString& second) const;
+
+ /**
+ * This method allows to select the base currency. It does
+ * not perform any changes to the data in the engine. It merely
+ * stores a reference to the base currency. The currency
+ * passed as argument must exist in the engine.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param currency
+ */
+ void setBaseCurrency(const MyMoneySecurity& currency);
+
+ /**
+ * This method adds/replaces a price to/from the price list
+ */
+ void addPrice(const MyMoneyPrice& price);
+
+ /**
+ * This method removes a price from the price list
+ */
+ void removePrice(const MyMoneyPrice& price);
+
+ /**
+ * This method is used to retrieve a price for a specific security
+ * on a specific date. If there is no price for this date, the last
+ * known price for this currency is used. If no price information
+ * is available, 1.0 will be returned as price.
+ *
+ * @param fromId the id of the currency in question
+ * @param toId the id of the currency to convert to (if emtpy, baseCurrency)
+ * @param date the date for which the price should be returned (default = today)
+ * @param exactDate if true, entry for date must exist, if false any price information
+ * with a date less or equal to @p date will be returned
+ *
+ * @return price found as MyMoneyPrice object
+ * @note This throws an exception when the base currency is not set and toId is empty
+ */
+ const MyMoneyPrice price(const QString& fromId, const QString& toId = QString(), const QDate& date = QDate::currentDate(), const bool exactDate = false) const;
+
+ /**
+ * This method returns a list of all prices.
+ *
+ * @return MyMoneyPriceList of all MyMoneyPrice objects.
+ */
+ const MyMoneyPriceList priceList(void) const;
+
+ /**
+ * This method allows to interrogate the engine, if a known account
+ * with id @p id has a subaccount with the name @p name.
+ *
+ * @param id id of the account to look at
+ * @param name account name that needs to be searched force
+ * @retval true account with name @p name found as subaccounts
+ * @retval false no subaccount present with that name
+ */
+ bool hasAccount(const QString& id, const QString& name) const;
+
+ /**
+ * This method is used to retrieve the list of all reports
+ * known to the engine.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @return QValueList of all MyMoneyReport objects.
+ */
+ const QValueList<MyMoneyReport> reportList( void ) const;
+
+ /**
+ * Adds a report to the file-global institution pool. A
+ * respective report-ID will be generated for this object.
+ * The ID is stored as QString in the object passed as argument.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param report The complete report information in a
+ * MyMoneyReport object
+ */
+ void addReport( MyMoneyReport& report );
+
+ /**
+ * Modifies an already existing report in the file global
+ * report pool.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param report The complete new report information
+ */
+ void modifyReport( const MyMoneyReport& report );
+
+ /**
+ * This method returns the number of reports currently known to file
+ * in the range 0..MAXUINT
+ *
+ * @return number of reports known to file
+ */
+ unsigned countReports( void ) const;
+
+ /**
+ * This method is used to retrieve a single MyMoneyReport object.
+ * The id of the object must be supplied in the parameter @p id.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param id QString containing the id of the MyMoneyReport object
+ * @return MyMoneyReport object
+ */
+ const MyMoneyReport report( const QString& id ) const;
+
+ /**
+ * This method is used to remove an existing MyMoneyReport object
+ * from the engine. The id attribute of the object must be set.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param report const reference to the MyMoneyReport object to be updated
+ */
+ void removeReport(const MyMoneyReport& report);
+
+ /**
+ * This method is used to retrieve the list of all budgets
+ * known to the engine.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @return QValueList of all MyMoneyBudget objects.
+ */
+ const QValueList<MyMoneyBudget> budgetList( void ) const;
+
+ /**
+ * Adds a budget to the file-global institution pool. A
+ * respective budget-ID will be generated for this object.
+ * The ID is stored as QString in the object passed as argument.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param budget The complete budget information in a
+ * MyMoneyBudget object
+ */
+ void addBudget( MyMoneyBudget& budget );
+
+
+ /**
+ * This method is used to retrieve the id to a corresponding
+ * name of a budget.
+ * An exception will be thrown upon error conditions.
+ *
+ * @param budget QString reference to name of budget
+ *
+ * @return MyMoneyBudget refernce to object of budget
+ */
+ const MyMoneyBudget budgetByName(const QString& budget) const;
+
+
+ /**
+ * Modifies an already existing budget in the file global
+ * budget pool.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param budget The complete new budget information
+ */
+ void modifyBudget( const MyMoneyBudget& budget );
+
+ /**
+ * This method returns the number of budgets currently known to file
+ * in the range 0..MAXUINT
+ *
+ * @return number of budgets known to file
+ */
+ unsigned countBudgets( void ) const;
+
+ /**
+ * This method is used to retrieve a single MyMoneyBudget object.
+ * The id of the object must be supplied in the parameter @p id.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param id QString containing the id of the MyMoneyBudget object
+ * @return MyMoneyBudget object
+ */
+ const MyMoneyBudget budget( const QString& id ) const;
+
+ /**
+ * This method is used to remove an existing MyMoneyBudget object
+ * from the engine. The id attribute of the object must be set.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param budget const reference to the MyMoneyBudget object to be updated
+ */
+ void removeBudget(const MyMoneyBudget& budget);
+
+
+ /**
+ * This method checks, if the given @p object is referenced
+ * by another engine object.
+ *
+ * @param obj const reference to object to be checked
+ * @param skipCheck MyMoneyFileBitArray with ReferenceCheckBits set for which
+ * the check should be skipped
+ *
+ * @retval false @p object is not referenced
+ * @retval true @p institution is referenced
+ */
+ bool isReferenced(const MyMoneyObject& obj, const MyMoneyFileBitArray& skipCheck = MyMoneyFileBitArray()) const;
+
+ /**
+ * Returns true if any of the accounts referenced by the splits
+ * of transaction @a t is closed.
+ */
+ bool referencesClosedAccount(const MyMoneyTransaction& t) const;
+
+ /**
+ * Returns true if the accounts referenced by the split @a s is closed.
+ */
+ bool referencesClosedAccount(const MyMoneySplit& s) const;
+
+ /**
+ * This method checks if the given check no &p no is used in
+ * a transaction referencing account &p accId. If @p accId is empty,
+ * @p false is returned.
+ *
+ * @param accId id of account to checked
+ * @param no check number to be verified if used or not
+ * @retval false @p no is not in use
+ * @retval true @p no is already assigned
+ */
+ bool checkNoUsed(const QString& accId, const QString& no) const;
+
+ /**
+ * This method returns the highest assigned check no for
+ * account @p accId.
+ *
+ * @param accId id of account to be scanned
+ * @return highest check no. used
+ */
+ QString highestCheckNo(const QString& accId) const;
+
+ /**
+ * Clear all internal caches (used internally for performance measurements)
+ */
+ void clearCache(void);
+
+ void forceDataChanged(void) { emit dataChanged(); }
+
+ void preloadCache(void);
+
+protected:
+ /**
+ * This is the constructor for a new empty file description
+ */
+ MyMoneyFile();
+
+signals:
+ /**
+ * This signal is emitted whenever any data has been changed in the engine
+ * via any of the methods of this object
+ */
+ void dataChanged(void);
+
+private:
+ static MyMoneyFile file;
+
+ MyMoneyFile& operator=(MyMoneyFile&); // not allowed for singleton
+ MyMoneyFile(const MyMoneyFile&); // not allowed for singleton
+
+ QString locateSubAccount(const MyMoneyAccount& base, const QString& category) const;
+
+ void ensureDefaultCurrency(MyMoneyAccount& acc) const;
+
+ void warningMissingRate(const QString& fromId, const QString& toId) const;
+
+ /**
+ * This method creates an opening balances account. The name is constructed
+ * using MyMoneyFile::OpeningBalancesPrefix and appending " (xxx)" in
+ * case the @p security is not the baseCurrency(). The account created
+ * will be a sub-account of the standard equity account provided by equity().
+ *
+ * @param security Security for which the account is searched
+ */
+ const MyMoneyAccount createOpeningBalanceAccount(const MyMoneySecurity& security);
+
+ const MyMoneyAccount openingBalanceAccount_internal(const MyMoneySecurity& security) const;
+
+private:
+ /**
+ * This method is used to add an id to the list of objects
+ * to be removed from the cache. If id is empty, then nothing is added to the list.
+ *
+ * @param id id of object to be notified
+ * @param reload reload the object (@c true) or not (@c false). The default is @c true
+ * @see attach, detach
+ */
+ void addNotification(const QString& id, bool reload = true);
+
+ /**
+ * This method is used to clear the notification list
+ */
+ void clearNotification(void);
+
+ /**
+ * This method is used to clear all
+ * objects mentioned in m_notificationList from the cache.
+ */
+ void notify(void);
+
+ /**
+ * This method checks if a storage object is attached and
+ * throws and exception if not.
+ */
+ inline void checkStorage(void) const {
+ if(m_storage == 0)
+ throw new MYMONEYEXCEPTION("No storage object attached to MyMoneyFile");
+ }
+
+ /**
+ * This method checks that a transaction has been started with
+ * startTransaction() and throws an exception otherwise. Calls
+ * checkStorage() to make sure a storage object is present and attached.
+ */
+ void checkTransaction(const char* txt) const;
+
+private:
+ /**
+ * This member points to the storage strategy
+ */
+ IMyMoneyStorage *m_storage;
+
+ /// \internal d-pointer class.
+ class Private;
+ /// \internal d-pointer instance.
+ Private* const d;
+
+ static MyMoneyFile* _instance;
+};
+
+class KMYMONEY_EXPORT MyMoneyFileTransaction
+{
+public:
+ MyMoneyFileTransaction();
+ ~MyMoneyFileTransaction();
+
+ /**
+ * Commit the current transaction.
+ *
+ * @warning Make sure not to use any variable that might have been altered by
+ * the transaction. Please keep in mind, that changing transactions
+ * can also affect account objects. If you still need those variables
+ * just reload them from the engine.
+ */
+ void commit(void);
+ void rollback(void);
+ void restart(void);
+
+private:
+ bool m_isNested;
+ bool m_needRollback;
+};
+
+#endif
+
diff --git a/kmymoney2/mymoney/mymoneyfiletest.cpp b/kmymoney2/mymoney/mymoneyfiletest.cpp
new file mode 100644
index 0000000..e081fa0
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyfiletest.cpp
@@ -0,0 +1,1550 @@
+/***************************************************************************
+ mymoneyfiletest.cpp
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "mymoneyfiletest.h"
+#include <iostream>
+
+#include <memory>
+#include <unistd.h>
+#include <qfile.h>
+#include <qdatastream.h>
+
+MyMoneyFileTest:: MyMoneyFileTest () {}
+
+
+void MyMoneyFileTest::setUp () {
+ storage = new MyMoneySeqAccessMgr;
+ m = MyMoneyFile::instance();
+ m->attachStorage(storage);
+}
+
+void MyMoneyFileTest::tearDown () {
+ m->detachStorage(storage);
+ delete storage;
+}
+
+void MyMoneyFileTest::testEmptyConstructor() {
+ MyMoneyPayee user = m->user();
+
+ CPPUNIT_ASSERT(user.name().isEmpty());
+ CPPUNIT_ASSERT(user.address().isEmpty());
+ CPPUNIT_ASSERT(user.city().isEmpty());
+ CPPUNIT_ASSERT(user.state().isEmpty());
+ CPPUNIT_ASSERT(user.postcode().isEmpty());
+ CPPUNIT_ASSERT(user.telephone().isEmpty());
+ CPPUNIT_ASSERT(user.email().isEmpty());
+
+ CPPUNIT_ASSERT(m->institutionCount() == 0);
+ CPPUNIT_ASSERT(m->dirty() == false);
+ CPPUNIT_ASSERT(m->accountCount() == 5);
+}
+
+void MyMoneyFileTest::testAddOneInstitution() {
+ MyMoneyInstitution institution;
+
+ institution.setName("institution1");
+ institution.setTown("town");
+ institution.setStreet("street");
+ institution.setPostcode("postcode");
+ institution.setTelephone("telephone");
+ institution.setManager("manager");
+ institution.setSortcode("sortcode");
+
+ // MyMoneyInstitution institution_file("", institution);
+ MyMoneyInstitution institution_id("I000002", institution);
+ MyMoneyInstitution institution_noname(institution);
+ institution_noname.setName(QString());
+
+ QString id;
+
+ CPPUNIT_ASSERT(m->institutionCount() == 0);
+ storage->m_dirty = false;
+
+ MyMoneyFileTransaction ft;
+ try {
+ m->addInstitution(institution);
+ ft.commit();
+ CPPUNIT_ASSERT(institution.id() == "I000001");
+ CPPUNIT_ASSERT(m->institutionCount() == 1);
+ CPPUNIT_ASSERT(m->dirty() == true);
+ } catch(MyMoneyException *e) {
+ CPPUNIT_FAIL("Unexpected exception");
+ delete e;
+ }
+
+ ft.restart();
+ try {
+ m->addInstitution(institution_id);
+ CPPUNIT_FAIL("Missing expected exception");
+ } catch(MyMoneyException *e) {
+ ft.commit();
+ CPPUNIT_ASSERT(m->institutionCount() == 1);
+ delete e;
+ }
+
+ ft.restart();
+ try {
+ m->addInstitution(institution_noname);
+ CPPUNIT_FAIL("Missing expected exception");
+ } catch(MyMoneyException *e) {
+ ft.commit();
+ CPPUNIT_ASSERT(m->institutionCount() == 1);
+ delete e;
+ }
+}
+
+void MyMoneyFileTest::testAddTwoInstitutions() {
+ testAddOneInstitution();
+ MyMoneyInstitution institution;
+ institution.setName("institution2");
+ institution.setTown("town");
+ institution.setStreet("street");
+ institution.setPostcode("postcode");
+ institution.setTelephone("telephone");
+ institution.setManager("manager");
+ institution.setSortcode("sortcode");
+
+ QString id;
+
+ storage->m_dirty = false;
+ MyMoneyFileTransaction ft;
+ try {
+ m->addInstitution(institution);
+ ft.commit();
+
+ CPPUNIT_ASSERT(institution.id() == "I000002");
+ CPPUNIT_ASSERT(m->institutionCount() == 2);
+ CPPUNIT_ASSERT(m->dirty() == true);
+ } catch(MyMoneyException *e) {
+ CPPUNIT_FAIL("Unexpected exception");
+ delete e;
+ }
+
+ storage->m_dirty = false;
+
+ try {
+ institution = m->institution("I000001");
+ CPPUNIT_ASSERT(institution.id() == "I000001");
+ CPPUNIT_ASSERT(m->institutionCount() == 2);
+ CPPUNIT_ASSERT(m->dirty() == false);
+
+ institution = m->institution("I000002");
+ CPPUNIT_ASSERT(institution.id() == "I000002");
+ CPPUNIT_ASSERT(m->institutionCount() == 2);
+ CPPUNIT_ASSERT(m->dirty() == false);
+ } catch (MyMoneyException *e) {
+ CPPUNIT_FAIL("Unexpected exception");
+ delete e;
+ }
+}
+
+void MyMoneyFileTest::testRemoveInstitution() {
+ testAddTwoInstitutions();
+
+ MyMoneyInstitution i;
+
+ CPPUNIT_ASSERT(m->institutionCount() == 2);
+
+ i = m->institution("I000001");
+ CPPUNIT_ASSERT(i.id() == "I000001");
+ CPPUNIT_ASSERT(i.accountCount() == 0);
+
+ storage->m_dirty = false;
+ MyMoneyFileTransaction ft;
+ try {
+ m->removeInstitution(i);
+ ft.commit();
+ CPPUNIT_ASSERT(m->institutionCount() == 1);
+ CPPUNIT_ASSERT(m->dirty() == true);
+ } catch (MyMoneyException *e) {
+ CPPUNIT_FAIL("Unexpected exception");
+ delete e;
+ }
+
+ storage->m_dirty = false;
+
+ try {
+ m->institution("I000001");
+ CPPUNIT_FAIL("Missing expected exception");
+ } catch(MyMoneyException *e) {
+ CPPUNIT_ASSERT(m->institutionCount() == 1);
+ CPPUNIT_ASSERT(m->dirty() == false);
+ delete e;
+ }
+
+ ft.restart();
+ try {
+ m->removeInstitution(i);
+ CPPUNIT_FAIL("Missing expected exception");
+ } catch(MyMoneyException *e) {
+ ft.commit();
+ CPPUNIT_ASSERT(m->institutionCount() == 1);
+ CPPUNIT_ASSERT(m->dirty() == false);
+ delete e;
+ }
+}
+
+void MyMoneyFileTest::testInstitutionRetrieval () {
+
+ testAddOneInstitution();
+
+ storage->m_dirty = false;
+
+ MyMoneyInstitution institution;
+
+ CPPUNIT_ASSERT(m->institutionCount() == 1);
+
+ try {
+ institution = m->institution("I000001");
+ CPPUNIT_ASSERT(institution.id() == "I000001");
+ CPPUNIT_ASSERT(m->institutionCount() == 1);
+ } catch (MyMoneyException *e) {
+ CPPUNIT_FAIL("Unexpected exception");
+ delete e;
+ }
+
+ try {
+ institution = m->institution("I000002");
+ CPPUNIT_FAIL("Missing expected exception");
+ } catch(MyMoneyException *e) {
+ CPPUNIT_ASSERT(m->institutionCount() == 1);
+ delete e;
+ }
+
+ CPPUNIT_ASSERT(m->dirty() == false);
+}
+
+void MyMoneyFileTest::testInstitutionListRetrieval () {
+ QValueList<MyMoneyInstitution> list;
+
+ storage->m_dirty = false;
+ list = m->institutionList();
+ CPPUNIT_ASSERT(m->dirty() == false);
+ CPPUNIT_ASSERT(list.count() == 0);
+
+ testAddTwoInstitutions();
+
+ storage->m_dirty = false;
+ list = m->institutionList();
+ CPPUNIT_ASSERT(m->dirty() == false);
+ CPPUNIT_ASSERT(list.count() == 2);
+
+ QValueList<MyMoneyInstitution>::ConstIterator it;
+ it = list.begin();
+
+ CPPUNIT_ASSERT((*it).name() == "institution1");
+ ++it;
+ CPPUNIT_ASSERT((*it).name() == "institution2");
+ ++it;
+ CPPUNIT_ASSERT(it == list.end());
+}
+
+void MyMoneyFileTest::testInstitutionModify() {
+ testAddTwoInstitutions();
+ MyMoneyInstitution institution;
+
+ institution = m->institution("I000001");
+ institution.setStreet("new street");
+ institution.setTown("new town");
+ institution.setPostcode("new postcode");
+ institution.setTelephone("new telephone");
+ institution.setManager("new manager");
+ institution.setName("new name");
+ institution.setSortcode("new sortcode");
+
+ storage->m_dirty = false;
+
+ MyMoneyFileTransaction ft;
+ try {
+ m->modifyInstitution(institution);
+ ft.commit();
+ CPPUNIT_ASSERT(institution.id() == "I000001");
+ CPPUNIT_ASSERT(m->institutionCount() == 2);
+ CPPUNIT_ASSERT(m->dirty() == true);
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ MyMoneyInstitution newInstitution;
+ newInstitution = m->institution("I000001");
+
+ CPPUNIT_ASSERT(newInstitution.id() == "I000001");
+ CPPUNIT_ASSERT(newInstitution.street() == "new street");
+ CPPUNIT_ASSERT(newInstitution.town() == "new town");
+ CPPUNIT_ASSERT(newInstitution.postcode() == "new postcode");
+ CPPUNIT_ASSERT(newInstitution.telephone() == "new telephone");
+ CPPUNIT_ASSERT(newInstitution.manager() == "new manager");
+ CPPUNIT_ASSERT(newInstitution.name() == "new name");
+ CPPUNIT_ASSERT(newInstitution.sortcode() == "new sortcode");
+
+ storage->m_dirty = false;
+
+ ft.restart();
+ MyMoneyInstitution failInstitution2("I000003", newInstitution);
+ try {
+ m->modifyInstitution(failInstitution2);
+ CPPUNIT_FAIL("Exception expected");
+ } catch(MyMoneyException *e) {
+ ft.commit();
+ delete e;
+ CPPUNIT_ASSERT(failInstitution2.id() == "I000003");
+ CPPUNIT_ASSERT(m->institutionCount() == 2);
+ CPPUNIT_ASSERT(m->dirty() == false);
+ }
+}
+
+void MyMoneyFileTest::testSetFunctions() {
+ MyMoneyPayee user = m->user();
+
+ CPPUNIT_ASSERT(user.name().isEmpty());
+ CPPUNIT_ASSERT(user.address().isEmpty());
+ CPPUNIT_ASSERT(user.city().isEmpty());
+ CPPUNIT_ASSERT(user.state().isEmpty());
+ CPPUNIT_ASSERT(user.postcode().isEmpty());
+ CPPUNIT_ASSERT(user.telephone().isEmpty());
+ CPPUNIT_ASSERT(user.email().isEmpty());
+
+ MyMoneyFileTransaction ft;
+ storage->m_dirty = false;
+ user.setName("Name");
+ m->setUser(user);
+ CPPUNIT_ASSERT(m->dirty() == true);
+ storage->m_dirty = false;
+ user.setAddress("Street");
+ m->setUser(user);
+ CPPUNIT_ASSERT(m->dirty() == true);
+ storage->m_dirty = false;
+ user.setCity("Town");
+ m->setUser(user);
+ CPPUNIT_ASSERT(m->dirty() == true);
+ storage->m_dirty = false;
+ user.setState("County");
+ m->setUser(user);
+ CPPUNIT_ASSERT(m->dirty() == true);
+ storage->m_dirty = false;
+ user.setPostcode("Postcode");
+ m->setUser(user);
+ CPPUNIT_ASSERT(m->dirty() == true);
+ storage->m_dirty = false;
+ user.setTelephone("Telephone");
+ m->setUser(user);
+ CPPUNIT_ASSERT(m->dirty() == true);
+ storage->m_dirty = false;
+ user.setEmail("Email");
+ m->setUser(user);
+ CPPUNIT_ASSERT(m->dirty() == true);
+ storage->m_dirty = false;
+
+ ft.commit();
+ user = m->user();
+ CPPUNIT_ASSERT(user.name() == "Name");
+ CPPUNIT_ASSERT(user.address() == "Street");
+ CPPUNIT_ASSERT(user.city() == "Town");
+ CPPUNIT_ASSERT(user.state() == "County");
+ CPPUNIT_ASSERT(user.postcode() == "Postcode");
+ CPPUNIT_ASSERT(user.telephone() == "Telephone");
+ CPPUNIT_ASSERT(user.email() == "Email");
+}
+
+void MyMoneyFileTest::testAddAccounts() {
+ testAddTwoInstitutions();
+ MyMoneyAccount a, b, c;
+ a.setAccountType(MyMoneyAccount::Checkings);
+ b.setAccountType(MyMoneyAccount::Checkings);
+
+ MyMoneyInstitution institution;
+
+ storage->m_dirty = false;
+
+ CPPUNIT_ASSERT(m->accountCount() == 5);
+
+ institution = m->institution("I000001");
+ CPPUNIT_ASSERT(institution.id() == "I000001");
+
+ a.setName("Account1");
+ a.setInstitutionId(institution.id());
+
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyAccount parent = m->asset();
+ m->addAccount(a, parent);
+ ft.commit();
+ CPPUNIT_ASSERT(m->accountCount() == 6);
+ CPPUNIT_ASSERT(a.parentAccountId() == "AStd::Asset");
+ CPPUNIT_ASSERT(a.id() == "A000001");
+ CPPUNIT_ASSERT(a.institutionId() == "I000001");
+ CPPUNIT_ASSERT(m->dirty() == true);
+ CPPUNIT_ASSERT(m->asset().accountList().count() == 1);
+ CPPUNIT_ASSERT(m->asset().accountList()[0] == "A000001");
+
+ institution = m->institution("I000001");
+ CPPUNIT_ASSERT(institution.accountCount() == 1);
+ CPPUNIT_ASSERT(institution.accountList()[0] == "A000001");
+
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception!");
+ }
+
+ // try to add this account again, should not work
+ ft.restart();
+ try {
+ MyMoneyAccount parent = m->asset();
+ m->addAccount(a, parent);
+ CPPUNIT_FAIL("Expecting exception!");
+ } catch(MyMoneyException *e) {
+ ft.commit();
+ delete e;
+ }
+
+ // check that we can modify the local object and
+ // reload it from the file
+ a.setName("AccountX");
+ a = m->account("A000001");
+ CPPUNIT_ASSERT(a.name() == "Account1");
+
+ storage->m_dirty = false;
+
+ // check if we can get the same info to a different object
+ c = m->account("A000001");
+ CPPUNIT_ASSERT(c.accountType() == MyMoneyAccount::Checkings);
+ CPPUNIT_ASSERT(c.id() == "A000001");
+ CPPUNIT_ASSERT(c.name() == "Account1");
+ CPPUNIT_ASSERT(c.institutionId() == "I000001");
+
+ CPPUNIT_ASSERT(m->dirty() == false);
+
+ // add a second account
+ institution = m->institution("I000002");
+ b.setName("Account2");
+ b.setInstitutionId(institution.id());
+ ft.restart();
+ try {
+ MyMoneyAccount parent = m->asset();
+ m->addAccount(b, parent);
+ ft.commit();
+ CPPUNIT_ASSERT(m->dirty() == true);
+ CPPUNIT_ASSERT(b.id() == "A000002");
+ CPPUNIT_ASSERT(b.parentAccountId() == "AStd::Asset");
+ CPPUNIT_ASSERT(m->accountCount() == 7);
+
+ institution = m->institution("I000001");
+ CPPUNIT_ASSERT(institution.accountCount() == 1);
+ CPPUNIT_ASSERT(institution.accountList()[0] == "A000001");
+
+ institution = m->institution("I000002");
+ CPPUNIT_ASSERT(institution.accountCount() == 1);
+ CPPUNIT_ASSERT(institution.accountList()[0] == "A000002");
+
+ CPPUNIT_ASSERT(m->asset().accountList().count() == 2);
+ CPPUNIT_ASSERT(m->asset().accountList()[0] == "A000001");
+ CPPUNIT_ASSERT(m->asset().accountList()[1] == "A000002");
+
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception!");
+ }
+
+ MyMoneyAccount p;
+
+ p = m->account("A000002");
+ CPPUNIT_ASSERT(p.accountType() == MyMoneyAccount::Checkings);
+ CPPUNIT_ASSERT(p.id() == "A000002");
+ CPPUNIT_ASSERT(p.name() == "Account2");
+ CPPUNIT_ASSERT(p.institutionId() == "I000002");
+}
+
+void MyMoneyFileTest::testModifyAccount() {
+ testAddAccounts();
+ storage->m_dirty = false;
+
+ MyMoneyAccount p = m->account("A000001");
+ MyMoneyInstitution institution;
+
+ CPPUNIT_ASSERT(p.accountType() == MyMoneyAccount::Checkings);
+ CPPUNIT_ASSERT(p.name() == "Account1");
+
+ p.setName("New account name");
+ MyMoneyFileTransaction ft;
+ try {
+ m->modifyAccount(p);
+ ft.commit();
+
+ CPPUNIT_ASSERT(m->dirty() == true);
+ CPPUNIT_ASSERT(m->accountCount() == 7);
+ CPPUNIT_ASSERT(p.accountType() == MyMoneyAccount::Checkings);
+ CPPUNIT_ASSERT(p.name() == "New account name");
+
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception!");
+ }
+ storage->m_dirty = false;
+
+ // try to move account to new institution
+ p.setInstitutionId("I000002");
+ ft.restart();
+ try {
+ m->modifyAccount(p);
+ ft.commit();
+
+ CPPUNIT_ASSERT(m->dirty() == true);
+ CPPUNIT_ASSERT(m->accountCount() == 7);
+ CPPUNIT_ASSERT(p.accountType() == MyMoneyAccount::Checkings);
+ CPPUNIT_ASSERT(p.name() == "New account name");
+ CPPUNIT_ASSERT(p.institutionId() == "I000002");
+
+ institution = m->institution("I000001");
+ CPPUNIT_ASSERT(institution.accountCount() == 0);
+
+ institution = m->institution("I000002");
+ CPPUNIT_ASSERT(institution.accountCount() == 2);
+ CPPUNIT_ASSERT(institution.accountList()[0] == "A000002");
+ CPPUNIT_ASSERT(institution.accountList()[1] == "A000001");
+
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception!");
+ }
+ storage->m_dirty = false;
+
+ // try to fool engine a bit
+ p.setParentAccountId("A000001");
+ ft.restart();
+ try {
+ m->modifyAccount(p);
+ CPPUNIT_FAIL("Expecting exception!");
+ } catch(MyMoneyException *e) {
+ ft.commit();
+ delete e;
+ }
+}
+
+void MyMoneyFileTest::testReparentAccount() {
+ testAddAccounts();
+ storage->m_dirty = false;
+
+ MyMoneyAccount p = m->account("A000001");
+ MyMoneyAccount q = m->account("A000002");
+ MyMoneyAccount o = m->account(p.parentAccountId());
+
+ // make A000001 a child of A000002
+ MyMoneyFileTransaction ft;
+ try {
+ CPPUNIT_ASSERT(p.parentAccountId() != q.id());
+ CPPUNIT_ASSERT(o.accountCount() == 2);
+ CPPUNIT_ASSERT(q.accountCount() == 0);
+ m->reparentAccount(p, q);
+ ft.commit();
+ CPPUNIT_ASSERT(m->dirty() == true);
+ CPPUNIT_ASSERT(p.parentAccountId() == q.id());
+ CPPUNIT_ASSERT(q.accountCount() == 1);
+ CPPUNIT_ASSERT(q.id() == "A000002");
+ CPPUNIT_ASSERT(p.id() == "A000001");
+ CPPUNIT_ASSERT(q.accountList()[0] == p.id());
+
+ o = m->account(o.id());
+ CPPUNIT_ASSERT(o.accountCount() == 1);
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception!");
+ }
+}
+
+void MyMoneyFileTest::testRemoveStdAccount(const MyMoneyAccount& acc) {
+ QString txt("Exception expected while removing account ");
+ txt += acc.id();
+ MyMoneyFileTransaction ft;
+ try {
+ m->removeAccount(acc);
+ CPPUNIT_FAIL(txt.latin1());
+ } catch(MyMoneyException *e) {
+ ft.commit();
+ delete e;
+ }
+}
+
+void MyMoneyFileTest::testRemoveAccount() {
+ MyMoneyInstitution institution;
+
+ testAddAccounts();
+ CPPUNIT_ASSERT(m->accountCount() == 7);
+ storage->m_dirty = false;
+
+ QString id;
+ MyMoneyAccount p = m->account("A000001");
+
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyAccount q("Ainvalid", p);
+ m->removeAccount(q);
+ CPPUNIT_FAIL("Exception expected!");
+ } catch(MyMoneyException *e) {
+ ft.commit();
+ delete e;
+ }
+
+ ft.restart();
+ try {
+ m->removeAccount(p);
+ ft.commit();
+ CPPUNIT_ASSERT(m->dirty() == true);
+ CPPUNIT_ASSERT(m->accountCount() == 6);
+ institution = m->institution("I000001");
+ CPPUNIT_ASSERT(institution.accountCount() == 0);
+ CPPUNIT_ASSERT(m->asset().accountList().count() == 1);
+
+ institution = m->institution("I000002");
+ CPPUNIT_ASSERT(institution.accountCount() == 1);
+
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception!");
+ }
+
+ // Check that the standard account-groups cannot be removed
+ testRemoveStdAccount(m->liability());
+ testRemoveStdAccount(m->asset());
+ testRemoveStdAccount(m->expense());
+ testRemoveStdAccount(m->income());
+}
+
+void MyMoneyFileTest::testRemoveAccountTree() {
+ testReparentAccount();
+ MyMoneyAccount a = m->account("A000002");
+
+ MyMoneyFileTransaction ft;
+ // remove the account
+ try {
+ m->removeAccount(a);
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception!");
+ }
+ CPPUNIT_ASSERT(m->accountCount() == 6);
+
+ // make sure it's gone
+ try {
+ m->account("A000002");
+ CPPUNIT_FAIL("Exception expected!");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+
+ // make sure that children are re-parented to parent account
+ try {
+ a = m->account("A000001");
+ CPPUNIT_ASSERT(a.parentAccountId() == m->asset().id());
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception!");
+ }
+
+}
+
+void MyMoneyFileTest::testAccountListRetrieval () {
+ QValueList<MyMoneyAccount> list;
+
+ storage->m_dirty = false;
+ m->accountList(list);
+ CPPUNIT_ASSERT(m->dirty() == false);
+ CPPUNIT_ASSERT(list.count() == 0);
+
+ testAddAccounts();
+
+ storage->m_dirty = false;
+ list.clear();
+ m->accountList(list);
+ CPPUNIT_ASSERT(m->dirty() == false);
+ CPPUNIT_ASSERT(list.count() == 2);
+
+ CPPUNIT_ASSERT(list[0].accountType() == MyMoneyAccount::Checkings);
+ CPPUNIT_ASSERT(list[1].accountType() == MyMoneyAccount::Checkings);
+}
+
+void MyMoneyFileTest::testAddTransaction () {
+ testAddAccounts();
+ MyMoneyTransaction t, p;
+
+ MyMoneyAccount exp1;
+ exp1.setAccountType(MyMoneyAccount::Expense);
+ exp1.setName("Expense1");
+ MyMoneyAccount exp2;
+ exp2.setAccountType(MyMoneyAccount::Expense);
+ exp2.setName("Expense2");
+
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyAccount parent = m->expense();
+ m->addAccount(exp1, parent);
+ m->addAccount(exp2, parent);
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception!");
+ }
+
+ // fake the last modified flag to check that the
+ // date is updated when we add the transaction
+ MyMoneyAccount a = m->account("A000001");
+ a.setLastModified(QDate(1,2,3));
+ ft.restart();
+ try {
+ m->modifyAccount(a);
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception!");
+ }
+ ft.restart();
+
+ CPPUNIT_ASSERT(m->accountCount() == 9);
+ a = m->account("A000001");
+ CPPUNIT_ASSERT(a.lastModified() == QDate(1,2,3));
+
+ // construct a transaction and add it to the pool
+ t.setPostDate(QDate(2002,2,1));
+ t.setMemo("Memotext");
+
+ MyMoneySplit split1;
+ MyMoneySplit split2;
+
+ split1.setAccountId("A000001");
+ split1.setShares(-1000);
+ split1.setValue(-1000);
+ split2.setAccountId("A000003");
+ split2.setValue(1000);
+ split2.setShares(1000);
+ try {
+ t.addSplit(split1);
+ t.addSplit(split2);
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception!");
+ }
+
+/*
+ // FIXME: we don't have a payee and a number field right now
+ // guess we should have a number field per split, don't know
+ // about the payee
+ t.setMethod(MyMoneyCheckingTransaction::Withdrawal);
+ t.setPayee("Thomas Baumgart");
+ t.setNumber("1234");
+ t.setState(MyMoneyCheckingTransaction::Cleared);
+*/
+ storage->m_dirty = false;
+
+ ft.restart();
+ try {
+ m->addTransaction(t);
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception!");
+ }
+ ft.restart();
+
+ CPPUNIT_ASSERT(t.id() == "T000000000000000001");
+ CPPUNIT_ASSERT(t.postDate() == QDate(2002,2,1));
+ CPPUNIT_ASSERT(t.entryDate() == QDate::currentDate());
+ CPPUNIT_ASSERT(m->dirty() == true);
+
+ // check the balance of the accounts
+ a = m->account("A000001");
+ CPPUNIT_ASSERT(a.lastModified() == QDate::currentDate());
+ CPPUNIT_ASSERT(a.balance() == MyMoneyMoney(-1000));
+
+ MyMoneyAccount b = m->account("A000003");
+ CPPUNIT_ASSERT(b.lastModified() == QDate::currentDate());
+ CPPUNIT_ASSERT(b.balance() == MyMoneyMoney(1000));
+
+ storage->m_dirty = false;
+
+ // locate transaction in MyMoneyFile via id
+
+ try {
+ p = m->transaction("T000000000000000001");
+ CPPUNIT_ASSERT(p.splitCount() == 2);
+ CPPUNIT_ASSERT(p.memo() == "Memotext");
+ CPPUNIT_ASSERT(p.splits()[0].accountId() == "A000001");
+ CPPUNIT_ASSERT(p.splits()[1].accountId() == "A000003");
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception!");
+ }
+
+ // check if it's in the account(s) as well
+
+ try {
+ p = m->transaction("A000001", 0);
+ CPPUNIT_ASSERT(p.id() == "T000000000000000001");
+ CPPUNIT_ASSERT(p.splitCount() == 2);
+ CPPUNIT_ASSERT(p.memo() == "Memotext");
+ CPPUNIT_ASSERT(p.splits()[0].accountId() == "A000001");
+ CPPUNIT_ASSERT(p.splits()[1].accountId() == "A000003");
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception!");
+ }
+
+ try {
+ p = m->transaction("A000003", 0);
+ CPPUNIT_ASSERT(p.id() == "T000000000000000001");
+ CPPUNIT_ASSERT(p.splitCount() == 2);
+ CPPUNIT_ASSERT(p.memo() == "Memotext");
+ CPPUNIT_ASSERT(p.splits()[0].accountId() == "A000001");
+ CPPUNIT_ASSERT(p.splits()[1].accountId() == "A000003");
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception!");
+ }
+}
+
+void MyMoneyFileTest::testIsStandardAccount() {
+ CPPUNIT_ASSERT(m->isStandardAccount(m->liability().id()) == true);
+ CPPUNIT_ASSERT(m->isStandardAccount(m->asset().id()) == true);
+ CPPUNIT_ASSERT(m->isStandardAccount(m->expense().id()) == true);
+ CPPUNIT_ASSERT(m->isStandardAccount(m->income().id()) == true);
+ CPPUNIT_ASSERT(m->isStandardAccount("A00001") == false);
+}
+
+void MyMoneyFileTest::testHasActiveSplits() {
+ testAddTransaction();
+
+ CPPUNIT_ASSERT(m->hasActiveSplits("A000001") == true);
+ CPPUNIT_ASSERT(m->hasActiveSplits("A000002") == false);
+}
+
+void MyMoneyFileTest::testModifyTransactionSimple() {
+ // this will test that we can modify the basic attributes
+ // of a transaction
+ testAddTransaction();
+
+ MyMoneyTransaction t = m->transaction("T000000000000000001");
+ t.setMemo("New Memotext");
+ storage->m_dirty = false;
+
+ MyMoneyFileTransaction ft;
+ try {
+ m->modifyTransaction(t);
+ ft.commit();
+ t = m->transaction("T000000000000000001");
+ CPPUNIT_ASSERT(t.memo() == "New Memotext");
+ CPPUNIT_ASSERT(m->dirty() == true);
+
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception!");
+ }
+}
+
+void MyMoneyFileTest::testModifyTransactionNewPostDate() {
+ // this will test that we can modify the basic attributes
+ // of a transaction
+ testAddTransaction();
+
+ MyMoneyTransaction t = m->transaction("T000000000000000001");
+ t.setPostDate(QDate(2004,2,1));
+ storage->m_dirty = false;
+
+ MyMoneyFileTransaction ft;
+ try {
+ m->modifyTransaction(t);
+ ft.commit();
+ t = m->transaction("T000000000000000001");
+ CPPUNIT_ASSERT(t.postDate() == QDate(2004,2,1));
+ t = m->transaction("A000001", 0);
+ CPPUNIT_ASSERT(t.id() == "T000000000000000001");
+ CPPUNIT_ASSERT(m->dirty() == true);
+
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception!");
+ }
+}
+
+void MyMoneyFileTest::testModifyTransactionNewAccount() {
+ // this will test that we can modify the basic attributes
+ // of a transaction
+ testAddTransaction();
+
+ MyMoneyTransaction t = m->transaction("T000000000000000001");
+ MyMoneySplit s;
+ s = t.splits()[0];
+ s.setAccountId("A000002");
+ t.modifySplit(s);
+
+ storage->m_dirty = false;
+ MyMoneyFileTransaction ft;
+ try {
+/* removed with MyMoneyAccount::Transaction
+ CPPUNIT_ASSERT(m->account("A000001").transactionCount() == 1);
+ CPPUNIT_ASSERT(m->account("A000002").transactionCount() == 0);
+ CPPUNIT_ASSERT(m->account("A000003").transactionCount() == 1);
+*/
+ MyMoneyTransactionFilter f1("A000001");
+ MyMoneyTransactionFilter f2("A000002");
+ MyMoneyTransactionFilter f3("A000003");
+ CPPUNIT_ASSERT(m->transactionList(f1).count() == 1);
+ CPPUNIT_ASSERT(m->transactionList(f2).count() == 0);
+ CPPUNIT_ASSERT(m->transactionList(f3).count() == 1);
+
+ m->modifyTransaction(t);
+ ft.commit();
+ t = m->transaction("T000000000000000001");
+ CPPUNIT_ASSERT(t.postDate() == QDate(2002,2,1));
+ t = m->transaction("A000002", 0);
+ CPPUNIT_ASSERT(m->dirty() == true);
+/* removed with MyMoneyAccount::Transaction
+ CPPUNIT_ASSERT(m->account("A000001").transactionCount() == 0);
+ CPPUNIT_ASSERT(m->account("A000002").transactionCount() == 1);
+ CPPUNIT_ASSERT(m->account("A000003").transactionCount() == 1);
+*/
+ CPPUNIT_ASSERT(m->transactionList(f1).count() == 0);
+ CPPUNIT_ASSERT(m->transactionList(f2).count() == 1);
+ CPPUNIT_ASSERT(m->transactionList(f3).count() == 1);
+
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception!");
+ }
+}
+
+void MyMoneyFileTest::testRemoveTransaction () {
+ testModifyTransactionNewPostDate();
+
+ MyMoneyTransaction t;
+ t = m->transaction("T000000000000000001");
+
+ storage->m_dirty = false;
+ MyMoneyFileTransaction ft;
+ try {
+ m->removeTransaction(t);
+ ft.commit();
+ CPPUNIT_ASSERT(m->dirty() == true);
+ CPPUNIT_ASSERT(m->transactionCount() == 0);
+/* removed with MyMoneyAccount::Transaction
+ CPPUNIT_ASSERT(m->account("A000001").transactionCount() == 0);
+ CPPUNIT_ASSERT(m->account("A000002").transactionCount() == 0);
+ CPPUNIT_ASSERT(m->account("A000003").transactionCount() == 0);
+*/
+ MyMoneyTransactionFilter f1("A000001");
+ MyMoneyTransactionFilter f2("A000002");
+ MyMoneyTransactionFilter f3("A000003");
+ CPPUNIT_ASSERT(m->transactionList(f1).count() == 0);
+ CPPUNIT_ASSERT(m->transactionList(f2).count() == 0);
+ CPPUNIT_ASSERT(m->transactionList(f3).count() == 0);
+
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception!");
+ }
+}
+
+/*
+ * This function is currently not implemented. It's kind of tricky
+ * because it modifies a lot of objects in a single call. This might
+ * be a problem for the undo/redo stuff. That's why I left it out in
+ * the first run. We migh add it, if we need it.
+ * /
+void testMoveSplits() {
+ testModifyTransactionNewPostDate();
+
+ CPPUNIT_ASSERT(m->account("A000001").transactionCount() == 1);
+ CPPUNIT_ASSERT(m->account("A000002").transactionCount() == 0);
+ CPPUNIT_ASSERT(m->account("A000003").transactionCount() == 1);
+
+ try {
+ m->moveSplits("A000001", "A000002");
+ CPPUNIT_ASSERT(m->account("A000001").transactionCount() == 0);
+ CPPUNIT_ASSERT(m->account("A000002").transactionCount() == 1);
+ CPPUNIT_ASSERT(m->account("A000003").transactionCount() == 1);
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception!");
+ }
+}
+*/
+
+void MyMoneyFileTest::testBalanceTotal() {
+ testAddTransaction();
+ MyMoneyTransaction t;
+
+ // construct a transaction and add it to the pool
+ t.setPostDate(QDate(2002,2,1));
+ t.setMemo("Memotext");
+
+ MyMoneySplit split1;
+ MyMoneySplit split2;
+
+ MyMoneyFileTransaction ft;
+ try {
+ split1.setAccountId("A000002");
+ split1.setShares(-1000);
+ split1.setValue(-1000);
+ split2.setAccountId("A000004");
+ split2.setValue(1000);
+ split2.setShares(1000);
+ t.addSplit(split1);
+ t.addSplit(split2);
+ m->addTransaction(t);
+ ft.commit();
+ ft.restart();
+ CPPUNIT_ASSERT(t.id() == "T000000000000000002");
+ CPPUNIT_ASSERT(m->totalBalance("A000001") == MyMoneyMoney(-1000));
+ CPPUNIT_ASSERT(m->totalBalance("A000002") == MyMoneyMoney(-1000));
+
+ MyMoneyAccount p = m->account("A000001");
+ MyMoneyAccount q = m->account("A000002");
+ m->reparentAccount(p, q);
+ ft.commit();
+ CPPUNIT_ASSERT(m->totalBalance("A000001") == MyMoneyMoney(-1000));
+ CPPUNIT_ASSERT(m->totalBalance("A000002") == MyMoneyMoney(-2000));
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception!");
+ }
+}
+
+void MyMoneyFileTest::testSetAccountName() {
+ MyMoneyFileTransaction ft;
+ try {
+ m->setAccountName(STD_ACC_LIABILITY, "Verbindlichkeiten");
+ ft.commit();
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+ ft.restart();
+ try {
+ m->setAccountName(STD_ACC_ASSET, "Vermögen");
+ ft.commit();
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+ ft.restart();
+ try {
+ m->setAccountName(STD_ACC_EXPENSE, "Ausgaben");
+ ft.commit();
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+ ft.restart();
+ try {
+ m->setAccountName(STD_ACC_INCOME, "Einnahmen");
+ ft.commit();
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+ ft.restart();
+
+ CPPUNIT_ASSERT(m->liability().name() == "Verbindlichkeiten");
+ CPPUNIT_ASSERT(m->asset().name() == "Vermögen");
+ CPPUNIT_ASSERT(m->expense().name() == "Ausgaben");
+ CPPUNIT_ASSERT(m->income().name() == "Einnahmen");
+
+ try {
+ m->setAccountName("A000001", "New account name");
+ ft.commit();
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+}
+
+void MyMoneyFileTest::testAddPayee() {
+ MyMoneyPayee p;
+
+ p.setName("THB");
+ CPPUNIT_ASSERT(m->dirty() == false);
+ MyMoneyFileTransaction ft;
+ try {
+ m->addPayee(p);
+ ft.commit();
+ CPPUNIT_ASSERT(m->dirty() == true);
+ CPPUNIT_ASSERT(p.id() == "P000001");
+
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneyFileTest::testModifyPayee() {
+ MyMoneyPayee p;
+
+ testAddPayee();
+
+ p = m->payee("P000001");
+ p.setName("New name");
+ MyMoneyFileTransaction ft;
+ try {
+ m->modifyPayee(p);
+ ft.commit();
+ p = m->payee("P000001");
+ CPPUNIT_ASSERT(p.name() == "New name");
+
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneyFileTest::testRemovePayee() {
+ MyMoneyPayee p;
+
+ testAddPayee();
+ CPPUNIT_ASSERT(m->payeeList().count() == 1);
+
+ p = m->payee("P000001");
+ MyMoneyFileTransaction ft;
+ try {
+ m->removePayee(p);
+ ft.commit();
+ CPPUNIT_ASSERT(m->payeeList().count() == 0);
+
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneyFileTest::testAddTransactionStd() {
+ testAddAccounts();
+ MyMoneyTransaction t, p;
+ MyMoneyAccount a;
+
+ a = m->account("A000001");
+
+ // construct a transaction and add it to the pool
+ t.setPostDate(QDate(2002,2,1));
+ t.setMemo("Memotext");
+
+ MyMoneySplit split1;
+ MyMoneySplit split2;
+
+ split1.setAccountId("A000001");
+ split1.setShares(-1000);
+ split1.setValue(-1000);
+ split2.setAccountId(STD_ACC_EXPENSE);
+ split2.setValue(1000);
+ split2.setShares(1000);
+ try {
+ t.addSplit(split1);
+ t.addSplit(split2);
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception!");
+ }
+
+/*
+ // FIXME: we don't have a payee and a number field right now
+ // guess we should have a number field per split, don't know
+ // about the payee
+ t.setMethod(MyMoneyCheckingTransaction::Withdrawal);
+ t.setPayee("Thomas Baumgart");
+ t.setNumber("1234");
+ t.setState(MyMoneyCheckingTransaction::Cleared);
+*/
+ storage->m_dirty = false;
+
+ MyMoneyFileTransaction ft;
+ try {
+ m->addTransaction(t);
+ ft.commit();
+ CPPUNIT_FAIL("Missing expected exception!");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+
+ CPPUNIT_ASSERT(m->dirty() == false);
+}
+
+void MyMoneyFileTest::testAttachStorage() {
+ IMyMoneyStorage *store = new MyMoneySeqAccessMgr;
+ MyMoneyFile *file = new MyMoneyFile;
+
+ CPPUNIT_ASSERT(file->storageAttached() == false);
+ try {
+ file->attachStorage(store);
+ CPPUNIT_ASSERT(file->storageAttached() == true);
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception!");
+ }
+
+ try {
+ file->attachStorage(store);
+ CPPUNIT_FAIL("Exception expected!");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+
+ try {
+ file->attachStorage(0);
+ CPPUNIT_FAIL("Exception expected!");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+
+ try {
+ file->detachStorage(store);
+ CPPUNIT_ASSERT(file->storageAttached() == false);
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception!");
+ }
+
+ delete store;
+ delete file;
+}
+
+
+void MyMoneyFileTest::testAccount2Category() {
+ testReparentAccount();
+ CPPUNIT_ASSERT(m->accountToCategory("A000001") == "Account2:Account1");
+ CPPUNIT_ASSERT(m->accountToCategory("A000002") == "Account2");
+}
+
+void MyMoneyFileTest::testCategory2Account() {
+ testAddTransaction();
+ MyMoneyAccount a = m->account("A000003");
+ MyMoneyAccount b = m->account("A000004");
+
+ MyMoneyFileTransaction ft;
+ try {
+ m->reparentAccount(b, a);
+ ft.commit();
+ CPPUNIT_ASSERT(m->categoryToAccount("Expense1") == "A000003");
+ CPPUNIT_ASSERT(m->categoryToAccount("Expense1:Expense2") == "A000004");
+ CPPUNIT_ASSERT(m->categoryToAccount("Acc2").isEmpty());
+ } catch(MyMoneyException *e) {
+ unexpectedException(e);
+ }
+}
+
+void MyMoneyFileTest::testAttachedStorage() {
+ CPPUNIT_ASSERT(m->storageAttached() == true);
+ CPPUNIT_ASSERT(m->storage() != 0);
+ IMyMoneyStorage *p = m->storage();
+ m->detachStorage(p);
+ CPPUNIT_ASSERT(m->storageAttached() == false);
+ CPPUNIT_ASSERT(m->storage() == 0);
+ m->attachStorage(p);
+ CPPUNIT_ASSERT(m->storageAttached() == true);
+ CPPUNIT_ASSERT(m->storage() != 0);
+}
+
+void MyMoneyFileTest::testHasAccount() {
+ testAddAccounts();
+
+ MyMoneyAccount a, b;
+ a.setAccountType(MyMoneyAccount::Checkings);
+ a.setName("Account3");
+ b = m->account("A000001");
+ MyMoneyFileTransaction ft;
+ try {
+ m->addAccount(a, b);
+ ft.commit();
+ CPPUNIT_ASSERT(m->accountCount() == 8);
+ CPPUNIT_ASSERT(a.parentAccountId() == "A000001");
+ CPPUNIT_ASSERT(m->hasAccount("A000001", "Account3") == true);
+ CPPUNIT_ASSERT(m->hasAccount("A000001", "Account2") == false);
+ CPPUNIT_ASSERT(m->hasAccount("A000002", "Account3") == false);
+ } catch(MyMoneyException *e) {
+ unexpectedException(e);
+ }
+}
+
+void MyMoneyFileTest::testAddEquityAccount() {
+ MyMoneyAccount i;
+ i.setName("Investment");
+ i.setAccountType(MyMoneyAccount::Investment);
+
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyAccount parent = m->asset();
+ m->addAccount(i, parent);
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ unexpectedException(e);
+ }
+ // keep a copy for later use
+ m_inv = i;
+
+ // make sure, that only equity accounts can be children to it
+ MyMoneyAccount a;
+ a.setName("Testaccount");
+ QValueList<MyMoneyAccount::accountTypeE> list;
+ list << MyMoneyAccount::Checkings;
+ list << MyMoneyAccount::Savings;
+ list << MyMoneyAccount::Cash;
+ list << MyMoneyAccount::CreditCard;
+ list << MyMoneyAccount::Loan;
+ list << MyMoneyAccount::CertificateDep;
+ list << MyMoneyAccount::Investment;
+ list << MyMoneyAccount::MoneyMarket;
+ list << MyMoneyAccount::Asset;
+ list << MyMoneyAccount::Liability;
+ list << MyMoneyAccount::Currency;
+ list << MyMoneyAccount::Income;
+ list << MyMoneyAccount::Expense;
+ list << MyMoneyAccount::AssetLoan;
+
+ QValueList<MyMoneyAccount::accountTypeE>::Iterator it;
+ for(it = list.begin(); it != list.end(); ++it) {
+ a.setAccountType(*it);
+ ft.restart();
+ try {
+ char msg[100];
+ m->addAccount(a, i);
+ sprintf(msg, "Can add non-equity type %d to investment", *it);
+ CPPUNIT_FAIL(msg);
+ } catch(MyMoneyException *e) {
+ ft.commit();
+ delete e;
+ }
+ }
+ ft.restart();
+ try {
+ a.setName("Teststock");
+ a.setAccountType(MyMoneyAccount::Stock);
+ m->addAccount(a,i);
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ unexpectedException(e);
+ }
+}
+
+void MyMoneyFileTest::testReparentEquity() {
+ testAddEquityAccount();
+ testAddEquityAccount();
+ MyMoneyAccount parent;
+
+ // check the bad cases
+ QValueList<MyMoneyAccount::accountTypeE> list;
+ list << MyMoneyAccount::Checkings;
+ list << MyMoneyAccount::Savings;
+ list << MyMoneyAccount::Cash;
+ list << MyMoneyAccount::CertificateDep;
+ list << MyMoneyAccount::MoneyMarket;
+ list << MyMoneyAccount::Asset;
+ list << MyMoneyAccount::AssetLoan;
+ list << MyMoneyAccount::Currency;
+ parent = m->asset();
+ testReparentEquity(list, parent);
+
+ list.clear();
+ list << MyMoneyAccount::CreditCard;
+ list << MyMoneyAccount::Loan;
+ list << MyMoneyAccount::Liability;
+ parent = m->liability();
+ testReparentEquity(list, parent);
+
+ list.clear();
+ list << MyMoneyAccount::Income;
+ parent = m->income();
+ testReparentEquity(list, parent);
+
+ list.clear();
+ list << MyMoneyAccount::Expense;
+ parent = m->expense();
+ testReparentEquity(list, parent);
+
+ // now check the good case
+ MyMoneyAccount stock = m->account("A000002");
+ MyMoneyAccount inv = m->account(m_inv.id());
+ MyMoneyFileTransaction ft;
+ try {
+ m->reparentAccount(stock, inv);
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ unexpectedException(e);
+ }
+}
+
+void MyMoneyFileTest::testReparentEquity(QValueList<MyMoneyAccount::accountTypeE>& list, MyMoneyAccount& parent)
+{
+ MyMoneyAccount a;
+ MyMoneyAccount stock = m->account("A000002");
+
+ QValueList<MyMoneyAccount::accountTypeE>::Iterator it;
+ MyMoneyFileTransaction ft;
+ for(it = list.begin(); it != list.end(); ++it) {
+ a.setName(QString("Testaccount %1").arg(*it));
+ a.setAccountType(*it);
+ try {
+ m->addAccount(a, parent);
+ char msg[100];
+ m->reparentAccount(stock, a);
+ sprintf(msg, "Can reparent stock to non-investment type %d account", *it);
+ CPPUNIT_FAIL(msg);
+ } catch(MyMoneyException *e) {
+ ft.commit();
+ delete e;
+ }
+ ft.restart();
+ }
+}
+
+void MyMoneyFileTest::testBaseCurrency(void)
+{
+ MyMoneySecurity base("EUR", "Euro", QChar(0x20ac));
+ MyMoneySecurity ref;
+
+ // make sure, no base currency is set
+ try {
+ ref = m->baseCurrency();
+ CPPUNIT_ASSERT(ref.id().isEmpty());
+ } catch(MyMoneyException *e) {
+ unexpectedException(e);
+ }
+
+ // make sure, we cannot assign an unknown currency
+ try {
+ m->setBaseCurrency(base);
+ CPPUNIT_FAIL("Missing expected exception");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+
+ MyMoneyFileTransaction ft;
+ // add the currency and try again
+ try {
+ m->addCurrency(base);
+ m->setBaseCurrency(base);
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ unexpectedException(e);
+ }
+ ft.restart();
+
+ // make sure, the base currency is set
+ try {
+ ref = m->baseCurrency();
+ CPPUNIT_ASSERT(ref.id() == "EUR");
+ CPPUNIT_ASSERT(ref.name() == "Euro");
+ CPPUNIT_ASSERT(ref.tradingSymbol() == QChar(0x20ac));
+ } catch(MyMoneyException *e) {
+ unexpectedException(e);
+ }
+
+ // check if it gets reset when attaching a new storage
+ m->detachStorage(storage);
+
+ MyMoneySeqAccessMgr* newStorage = new MyMoneySeqAccessMgr;
+ m->attachStorage(newStorage);
+
+ ref = m->baseCurrency();
+ CPPUNIT_ASSERT(ref.id().isEmpty());
+
+ m->detachStorage(newStorage);
+ delete newStorage;
+
+ m->attachStorage(storage);
+ ref = m->baseCurrency();
+ CPPUNIT_ASSERT(ref.id() == "EUR");
+ CPPUNIT_ASSERT(ref.name() == "Euro");
+ CPPUNIT_ASSERT(ref.tradingSymbol() == QChar(0x20ac));
+}
+
+void MyMoneyFileTest::testOpeningBalanceNoBase(void)
+{
+ MyMoneyAccount openingAcc;
+ MyMoneySecurity base;
+
+ try {
+ base = m->baseCurrency();
+ openingAcc = m->openingBalanceAccount(base);
+ CPPUNIT_FAIL("Missing expected exception");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+}
+
+void MyMoneyFileTest::testOpeningBalance(void)
+{
+ MyMoneyAccount openingAcc;
+ MyMoneySecurity second("USD", "US Dollar", "$");
+ testBaseCurrency();
+
+ try {
+ openingAcc = m->openingBalanceAccount(m->baseCurrency());
+ CPPUNIT_ASSERT(openingAcc.parentAccountId() == m->equity().id());
+ CPPUNIT_ASSERT(openingAcc.name() == MyMoneyFile::OpeningBalancesPrefix);
+ CPPUNIT_ASSERT(openingAcc.openingDate() == QDate::currentDate());
+ } catch(MyMoneyException *e) {
+ unexpectedException(e);
+ }
+
+ // add a second currency
+ MyMoneyFileTransaction ft;
+ try {
+ m->addCurrency(second);
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ unexpectedException(e);
+ }
+
+ QString refName = QString("%1 (%2)").arg(MyMoneyFile::OpeningBalancesPrefix).arg("USD");
+ try {
+ openingAcc = m->openingBalanceAccount(second);
+ CPPUNIT_ASSERT(openingAcc.parentAccountId() == m->equity().id());
+ CPPUNIT_ASSERT(openingAcc.name() == refName);
+ CPPUNIT_ASSERT(openingAcc.openingDate() == QDate::currentDate());
+ } catch(MyMoneyException *e) {
+ unexpectedException(e);
+ }
+}
+
+void MyMoneyFileTest::testModifyStdAccount() {
+ CPPUNIT_ASSERT(m->asset().currencyId().isEmpty());
+ CPPUNIT_ASSERT(m->asset().name() == "Asset");
+ testBaseCurrency();
+ CPPUNIT_ASSERT(m->asset().currencyId().isEmpty());
+ CPPUNIT_ASSERT(!m->baseCurrency().id().isEmpty());
+
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyAccount acc = m->asset();
+ acc.setName("Anlagen");
+ acc.setCurrencyId(m->baseCurrency().id());
+ m->modifyAccount(acc);
+ ft.commit();
+
+ CPPUNIT_ASSERT(m->asset().name() == "Anlagen");
+ CPPUNIT_ASSERT(m->asset().currencyId() == m->baseCurrency().id());
+ } catch(MyMoneyException *e) {
+ unexpectedException(e);
+ }
+
+ ft.restart();
+ try {
+ MyMoneyAccount acc = m->asset();
+ acc.setNumber("Test");
+ m->modifyAccount(acc);
+ CPPUNIT_FAIL("Missing expected exception");
+ } catch(MyMoneyException *e) {
+ ft.rollback();
+ delete e;
+ }
+
+}
diff --git a/kmymoney2/mymoney/mymoneyfiletest.h b/kmymoney2/mymoney/mymoneyfiletest.h
new file mode 100644
index 0000000..b54af25
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyfiletest.h
@@ -0,0 +1,128 @@
+/***************************************************************************
+ mymoneyfiletest.h
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef __MYMONEYFILETEST_H__
+#define __MYMONEYFILETEST_H__
+
+#include <cppunit/extensions/HelperMacros.h>
+#include "autotest.h"
+
+#define private public
+#define protected public
+#include "mymoneyfile.h"
+#include "storage/mymoneyseqaccessmgr.h"
+#undef private
+#undef protected
+
+class MyMoneyFileTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(MyMoneyFileTest);
+ CPPUNIT_TEST(testEmptyConstructor);
+ CPPUNIT_TEST(testAddOneInstitution);
+ CPPUNIT_TEST(testAddTwoInstitutions);
+ CPPUNIT_TEST(testInstitutionRetrieval);
+ CPPUNIT_TEST(testRemoveInstitution);
+ CPPUNIT_TEST(testInstitutionListRetrieval);
+ CPPUNIT_TEST(testInstitutionModify);
+ CPPUNIT_TEST(testSetFunctions);
+ CPPUNIT_TEST(testAddAccounts);
+ CPPUNIT_TEST(testModifyAccount);
+ CPPUNIT_TEST(testModifyStdAccount);
+ CPPUNIT_TEST(testReparentAccount);
+ CPPUNIT_TEST(testRemoveAccount);
+ CPPUNIT_TEST(testRemoveAccountTree);
+ CPPUNIT_TEST(testAccountListRetrieval);
+ CPPUNIT_TEST(testAddTransaction);
+ CPPUNIT_TEST(testHasActiveSplits);
+ CPPUNIT_TEST(testIsStandardAccount);
+ CPPUNIT_TEST(testModifyTransactionSimple);
+ CPPUNIT_TEST(testModifyTransactionNewPostDate);
+ CPPUNIT_TEST(testModifyTransactionNewAccount);
+ CPPUNIT_TEST(testRemoveTransaction);
+ CPPUNIT_TEST(testBalanceTotal);
+ CPPUNIT_TEST(testSetAccountName);
+ CPPUNIT_TEST(testAddPayee);
+ CPPUNIT_TEST(testModifyPayee);
+ CPPUNIT_TEST(testRemovePayee);
+ CPPUNIT_TEST(testAddTransactionStd);
+ CPPUNIT_TEST(testAttachStorage);
+ CPPUNIT_TEST(testAccount2Category);
+ CPPUNIT_TEST(testCategory2Account);
+ CPPUNIT_TEST(testAttachedStorage);
+ CPPUNIT_TEST(testHasAccount);
+ CPPUNIT_TEST(testAddEquityAccount);
+ CPPUNIT_TEST(testReparentEquity);
+ CPPUNIT_TEST(testBaseCurrency);
+ CPPUNIT_TEST(testOpeningBalanceNoBase);
+ CPPUNIT_TEST(testOpeningBalance);
+#if 0
+ CPPUNIT_TEST(testMoveSplits);
+#endif
+ CPPUNIT_TEST_SUITE_END();
+protected:
+ MyMoneyFile *m;
+ MyMoneySeqAccessMgr* storage;
+ MyMoneyAccount m_inv;
+
+public:
+ MyMoneyFileTest ();
+
+ void setUp ();
+ void tearDown ();
+ void testEmptyConstructor();
+ void testAddOneInstitution();
+ void testAddTwoInstitutions();
+ void testRemoveInstitution();
+ void testInstitutionRetrieval ();
+ void testInstitutionListRetrieval ();
+ void testInstitutionModify();
+ void testSetFunctions();
+ void testAddAccounts();
+ void testModifyAccount();
+ void testModifyStdAccount();
+ void testReparentAccount();
+ void testRemoveAccount();
+ void testRemoveAccountTree();
+ void testAccountListRetrieval ();
+ void testAddTransaction ();
+ void testIsStandardAccount();
+ void testHasActiveSplits();
+ void testModifyTransactionSimple();
+ void testModifyTransactionNewPostDate();
+ void testModifyTransactionNewAccount();
+ void testRemoveTransaction ();
+ void testBalanceTotal();
+ void testSetAccountName();
+ void testAddPayee();
+ void testModifyPayee();
+ void testRemovePayee();
+ void testAddTransactionStd();
+ void testAttachStorage();
+ void testAccount2Category();
+ void testCategory2Account();
+ void testAttachedStorage();
+ void testHasAccount();
+ void testAddEquityAccount();
+ void testReparentEquity();
+ void testReparentEquity(QValueList<MyMoneyAccount::accountTypeE>& list, MyMoneyAccount& parent);
+ void testBaseCurrency();
+ void testOpeningBalanceNoBase();
+ void testOpeningBalance();
+
+private:
+ void testRemoveStdAccount(const MyMoneyAccount& acc);
+};
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneyfinancialcalculator.cpp b/kmymoney2/mymoney/mymoneyfinancialcalculator.cpp
new file mode 100644
index 0000000..d6686a6
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyfinancialcalculator.cpp
@@ -0,0 +1,348 @@
+/***************************************************************************
+ mymoneyfinancialcalculator.cpp - description
+ -------------------
+ begin : Tue Oct 21 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include <math.h>
+#include <stdio.h>
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+
+#include "mymoneyfinancialcalculator.h"
+#include "mymoneyexception.h"
+
+// #ifndef HAVE_ROUND
+// #undef roundl
+// #define roundl(a) rnd(a)
+
+FCALC_DOUBLE MyMoneyFinancialCalculator::rnd(const FCALC_DOUBLE x) const
+{
+ FCALC_DOUBLE r,f;
+
+ if(m_prec > 0) {
+#ifdef HAVE_ROUND
+ f = powl(10.0, m_prec);
+ r = roundl(x * f)/f;
+#else
+ char buf[50];
+#if HAVE_LONG_DOUBLE
+ sprintf (buf, "%.*Lf", m_prec, x);
+ sscanf (buf, "%Lf", &r);
+#else
+ sprintf (buf, "%.*f", m_prec, x);
+ sscanf (buf, "%lf", &r);
+#endif
+#endif
+ } else
+ r = roundl(x);
+ return r;
+}
+// #endif
+
+static inline FCALC_DOUBLE dabs(const FCALC_DOUBLE x)
+{
+ return (x >= 0.0) ? x : -x;
+}
+
+MyMoneyFinancialCalculator::MyMoneyFinancialCalculator()
+{
+ setPrec();
+ setPF();
+ setCF();
+ setBep();
+ setDisc();
+
+ setNpp(0.0);
+ setIr(0.0);
+ setPv(0.0);
+ setPmt(0.0);
+ setFv(0.0);
+
+ // clear the mask
+ m_mask = 0;
+}
+
+MyMoneyFinancialCalculator::~MyMoneyFinancialCalculator()
+{
+}
+
+void MyMoneyFinancialCalculator::setPrec(const unsigned short prec)
+{
+ m_prec = prec;
+}
+
+void MyMoneyFinancialCalculator::setPF(const unsigned short PF)
+{
+ m_PF = PF;
+}
+
+void MyMoneyFinancialCalculator::setCF(const unsigned short CF)
+{
+ m_CF = CF;
+}
+
+void MyMoneyFinancialCalculator::setBep(const bool bep)
+{
+ m_bep = bep;
+}
+
+void MyMoneyFinancialCalculator::setDisc(const bool disc)
+{
+ m_disc = disc;
+}
+
+void MyMoneyFinancialCalculator::setIr(const FCALC_DOUBLE ir)
+{
+ m_ir = ir;
+ m_mask |= IR_SET;
+}
+
+void MyMoneyFinancialCalculator::setPv(const FCALC_DOUBLE pv)
+{
+ m_pv = pv;
+ m_mask |= PV_SET;
+}
+
+void MyMoneyFinancialCalculator::setPmt(const FCALC_DOUBLE pmt)
+{
+ m_pmt = pmt;
+ m_mask |= PMT_SET;
+}
+
+void MyMoneyFinancialCalculator::setNpp(const FCALC_DOUBLE npp)
+{
+ m_npp = npp;
+ m_mask |= NPP_SET;
+}
+
+void MyMoneyFinancialCalculator::setFv(const FCALC_DOUBLE fv)
+{
+ m_fv = fv;
+ m_mask |= FV_SET;
+}
+
+FCALC_DOUBLE MyMoneyFinancialCalculator::numPayments(void)
+{
+ const unsigned short mask = PV_SET | IR_SET | PMT_SET | FV_SET;
+
+ if((m_mask & mask) != mask)
+ throw new MYMONEYEXCEPTION("Not all parameters set for calculation of numPayments");
+
+ FCALC_DOUBLE eint = eff_int();
+ FCALC_DOUBLE CC = _Cx(eint);
+
+ CC = (CC - m_fv) / (CC + m_pv);
+ m_npp = (CC > 0.0) ? logl (CC) / logl (eint +1.0) : 0.0;
+
+ m_mask |= NPP_SET;
+ return m_npp;
+}
+
+FCALC_DOUBLE MyMoneyFinancialCalculator::payment(void)
+{
+ const unsigned short mask = PV_SET | IR_SET | NPP_SET | FV_SET;
+
+ if((m_mask & mask) != mask)
+ throw new MYMONEYEXCEPTION("Not all parameters set for calculation of payment");
+
+ FCALC_DOUBLE eint = eff_int();
+ FCALC_DOUBLE AA = _Ax(eint);
+ FCALC_DOUBLE BB = _Bx(eint);
+
+ m_pmt = -rnd((m_fv + m_pv * (AA + 1.0)) / (AA * BB));
+ //m_pmt = -floorl((m_fv + m_pv * (AA + 1.0)) / (AA * BB));
+
+ m_mask |= PMT_SET;
+ return m_pmt;
+}
+
+FCALC_DOUBLE MyMoneyFinancialCalculator::presentValue(void)
+{
+ const unsigned short mask = PMT_SET | IR_SET | NPP_SET | FV_SET;
+
+ if((m_mask & mask) != mask)
+ throw new MYMONEYEXCEPTION("Not all parameters set for calculation of payment");
+
+ FCALC_DOUBLE eint = eff_int();
+ FCALC_DOUBLE AA = _Ax(eint);
+ FCALC_DOUBLE CC = _Cx(eint);
+
+ m_pv = rnd(-(m_fv + (AA * CC)) / (AA + 1.0));
+
+ m_mask |= PV_SET;
+ return m_pv;
+}
+
+FCALC_DOUBLE MyMoneyFinancialCalculator::futureValue(void)
+{
+ const unsigned short mask = PMT_SET | IR_SET | NPP_SET | PV_SET;
+
+ if((m_mask & mask) != mask)
+ throw new MYMONEYEXCEPTION("Not all parameters set for calculation of payment");
+
+ FCALC_DOUBLE eint = eff_int();
+ FCALC_DOUBLE AA = _Ax(eint);
+ FCALC_DOUBLE CC = _Cx(eint);
+ m_fv = rnd(-(m_pv + AA * (m_pv + CC)));
+
+ m_mask |= FV_SET;
+ return m_fv;
+}
+
+FCALC_DOUBLE MyMoneyFinancialCalculator::interestRate(void)
+{
+ FCALC_DOUBLE eint = 0.0;
+ FCALC_DOUBLE a = 0.0;
+ FCALC_DOUBLE dik = 0.0;
+
+ const FCALC_DOUBLE ratio = 1e4;
+ int ri;
+
+ if (m_pmt == 0.0) {
+ eint = powl ((dabs (m_fv) / dabs (m_pv)), (1.0 / m_npp)) - 1.0;
+ } else {
+ if ((m_pmt * m_fv) < 0.0) {
+ if(m_pv)
+ a = -1.0;
+ else
+ a = 1.0;
+ eint =
+ dabs ((m_fv + a * m_npp * m_pmt) /
+ (3.0 *
+ ((m_npp - 1.0) * (m_npp - 1.0) * m_pmt + m_pv -
+ m_fv)));
+ } else {
+ if ((m_pv * m_pmt) < 0.0) {
+ eint = dabs ((m_npp * m_pmt + m_pv + m_fv) / (m_npp * m_pv));
+ } else {
+ a = dabs (m_pmt / (dabs(m_pv) + dabs(m_fv)));
+ eint = a + 1.0 / (a * m_npp * m_npp * m_npp);
+ }
+ }
+ do {
+ try {
+ dik = _fi(eint) / _fip(eint);
+ eint -= dik;
+ } catch(MyMoneyException *e) {
+ delete e;
+ eint = 0;
+ }
+ (void) modfl(ratio * (dik / eint), &a);
+ ri = static_cast<unsigned> (a);
+ }
+ while (ri);
+ }
+ m_mask |= IR_SET;
+ m_ir = rnd(nom_int(eint) * 100.0);
+ return m_ir;
+}
+
+FCALC_DOUBLE MyMoneyFinancialCalculator::_fi(const FCALC_DOUBLE eint) const
+{
+ return _Ax(eint) * (m_pv + _Cx(eint)) + m_pv + m_fv;
+}
+
+FCALC_DOUBLE MyMoneyFinancialCalculator::_fip(const FCALC_DOUBLE eint) const
+{
+ double AA = _Ax(eint);
+ double CC = _Cx(eint);
+ double D = (AA + 1.0) / (eint + 1.0);
+
+ return m_npp *(m_pv + CC) * D - (AA * CC) / eint;
+}
+
+FCALC_DOUBLE MyMoneyFinancialCalculator::_Ax(const FCALC_DOUBLE eint) const
+{
+ return powl ((eint + 1.0), m_npp) - 1.0;
+}
+
+FCALC_DOUBLE MyMoneyFinancialCalculator::_Bx(const FCALC_DOUBLE eint) const
+{
+ if(eint == 0.0)
+ throw new MYMONEYEXCEPTION("Zero interest");
+
+ if(m_bep == false)
+ return static_cast<FCALC_DOUBLE>(1.0) / eint;
+
+ return (eint + 1.0) / eint;
+}
+
+FCALC_DOUBLE MyMoneyFinancialCalculator::_Cx(const FCALC_DOUBLE eint) const
+{
+ return m_pmt * _Bx(eint);
+}
+
+FCALC_DOUBLE MyMoneyFinancialCalculator::eff_int(void) const
+{
+ FCALC_DOUBLE nint = m_ir / 100.0;
+ FCALC_DOUBLE eint;
+
+ if(m_disc) { // periodically compound?
+ if(m_CF == m_PF) { // same frequency?
+ eint = nint / static_cast<FCALC_DOUBLE>(m_CF);
+
+ } else {
+ eint = powl((static_cast<FCALC_DOUBLE>(1.0) + (nint / static_cast<FCALC_DOUBLE>(m_CF))),
+ (static_cast<FCALC_DOUBLE>(m_CF) / static_cast<FCALC_DOUBLE>(m_PF))) - 1.0;
+
+ }
+
+ } else {
+ eint = expl(nint / static_cast<FCALC_DOUBLE>(m_PF)) - 1.0;
+ }
+
+ return eint;
+}
+
+FCALC_DOUBLE MyMoneyFinancialCalculator::nom_int(const FCALC_DOUBLE eint) const
+{
+ FCALC_DOUBLE nint;
+
+ if(m_disc) {
+ if(m_CF == m_PF) {
+ nint = m_CF * eint;
+
+ } else {
+ nint = m_CF * (powl ((eint + 1.0), (static_cast<FCALC_DOUBLE>(m_PF) / static_cast<FCALC_DOUBLE>(m_CF))) - 1.0);
+ }
+ } else
+ nint = logl (powl (eint + 1.0, m_PF));
+
+ return nint;
+}
+
+FCALC_DOUBLE MyMoneyFinancialCalculator::interestDue(void) const
+{
+ FCALC_DOUBLE eint = eff_int();
+
+ return (m_pv + (m_bep ? m_pmt : 0.0)) * eint;
+}
+
diff --git a/kmymoney2/mymoney/mymoneyfinancialcalculator.h b/kmymoney2/mymoney/mymoneyfinancialcalculator.h
new file mode 100644
index 0000000..c603d12
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyfinancialcalculator.h
@@ -0,0 +1,317 @@
+/***************************************************************************
+ mymoneyfinancialcalculator.h - description
+ -------------------
+ begin : Tue Oct 21 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYFINANCIALCALCULATOR_H
+#define MYMONEYFINANCIALCALCULATOR_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <cmath>
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/export.h>
+
+#ifdef _GLIBCPP_HAVE_MODFL
+#define HAVE_LONG_DOUBLE 1
+#endif
+
+#ifndef HAVE_LONG_DOUBLE
+#define HAVE_LONG_DOUBLE 0
+#endif
+
+#if HAVE_LONG_DOUBLE
+#define FCALC_DOUBLE long double
+#else
+#define FCALC_DOUBLE double
+#define modfl(a,b) modf(a,b)
+#define roundl(a) round(a)
+#define powl(a,b) pow(a,b)
+#define expl(a) exp(a)
+#define logl(a) log(a)
+#define floorl(a) floor(a)
+#define fabsl(a) fabs(a)
+#endif
+
+/**
+ * @author Thomas Baumgart
+ */
+
+/**
+ * This class implements the financial calculator as found in GNUCash.
+ * For a detailed description of the algorithms see
+ * gnucash-1.8.5/src/doc/finutil.html.
+ */
+class KMYMONEY_EXPORT MyMoneyFinancialCalculator
+{
+public:
+ MyMoneyFinancialCalculator();
+ ~MyMoneyFinancialCalculator();
+
+ /**
+ * This method calculates the number of payments required to amortize
+ * the loan. ir, pv, fv and pmt must be set. It sets the member variable
+ * m_npp with the calculated value.
+ *
+ * @return number of periodic payments
+ *
+ * @exception If one of the required values is not set, a MyMoneyException
+ * will be thrown
+ */
+ FCALC_DOUBLE numPayments();
+
+ /**
+ * This method calculates the amount of the payment (amortization and interest)
+ * for the loan. ir, pv, fv and npp must be set. It sets the member variable
+ * m_pmt with the calculated value.
+ *
+ * @return amount of payment
+ *
+ * @exception If one of the required values is not set, a MyMoneyException
+ * will be thrown
+ */
+ FCALC_DOUBLE payment();
+
+ /**
+ * This method calculates the present value
+ * for the loan. ir, pmt, fv and npp must be set. It sets the member variable
+ * m_pv with the calculated value.
+ *
+ * @return present value of loan
+ *
+ * @exception If one of the required values is not set, a MyMoneyException
+ * will be thrown
+ */
+ FCALC_DOUBLE presentValue();
+
+ /**
+ * This method calculates the future value
+ * for the loan. ir, pmt, pv and npp must be set. It sets the member variable
+ * m_fv with the calculated value.
+ *
+ * @return future value of loan
+ *
+ * @exception If one of the required values is not set, a MyMoneyException
+ * will be thrown
+ */
+ FCALC_DOUBLE futureValue();
+
+ /**
+ * This method calculates the nominal interest rate
+ * for the loan. fv, pmt, pv and npp must be set. It sets the member variable
+ * m_ir with the calculated value.
+ *
+ * @return interest rate of the loan
+ *
+ * @exception If one of the required values is not set, a MyMoneyException
+ * will be thrown
+ */
+ FCALC_DOUBLE interestRate();
+
+ /**
+ * This method calculates the interest due for the next payment according
+ * to the equation
+ *
+ * id[n] = (pv[n-1] + (X * pmt)) * i
+ *
+ * with
+ *
+ * - pv[n-1]\n
+ * the present value at the end of the last period
+ * - X\n
+ * 0 for end of period payments, 1 for beginning of period payments
+ * - pmt\n
+ * the periodic payment amount and
+ * - i\n
+ * the effective interest rate
+ *
+ * pv[n-1] will be the value as set with setPv(), i will be calculated
+ * from the nominal interest rate as set with setIr(), pmt will be the
+ * value as set with setPmt() and X is determined by the argument to
+ * setBep().
+ *
+ * @return the interest amount
+ */
+ FCALC_DOUBLE interestDue(void) const;
+
+ /**
+ * This method sets the rounding precision to @p prec fractional
+ * digits. The default of @p is 2. Rounding is applied to pv, pmt
+ * and fv.
+ *
+ * @param prec Number of fractional digits after rounding.
+ */
+ void setPrec(const unsigned short prec = 2);
+
+ /**
+ * This method sets the number of payment periods to the value
+ * passed in parameter @p npp. The length of a period is controlled
+ * via setPF().
+ *
+ * @param npp number of payment periods
+ */
+ void setNpp(const FCALC_DOUBLE npp);
+
+ FCALC_DOUBLE npp(void) const { return m_npp; };
+
+ /**
+ * This method sets the payment frequency. The parameter @p PF
+ * specifies the payments per year.
+ *
+ * - 1 == annual
+ * - 2 == semi-annual
+ * - 3 == tri-annual
+ * - 4 == quaterly
+ * - 6 == bi-monthly
+ * - 12 == monthly
+ * - 24 == semi-monthly
+ * - 26 == bi-weekly
+ * - 52 == weekly
+ * - 360 == daily
+ * - 365 == daily
+ *
+ * @param PF length of payment period (default is 12 - monthly)
+ */
+ void setPF(const unsigned short PF = 12);
+
+ /**
+ * This method sets the compounding frequency. The parameter @p CF
+ * specifies the compounding period per year.
+ *
+ * - 1 == annual
+ * - 2 == semi-annual
+ * - 3 == tri-annual
+ * - 4 == quaterly
+ * - 6 == bi-monthly
+ * - 12 == monthly
+ * - 24 == semi-monthly
+ * - 26 == bi-weekly
+ * - 52 == weekly
+ * - 360 == daily
+ * - 365 == daily
+ *
+ * @param CF length of compounding period (default is 12 - monthly)
+ */
+ void setCF(const unsigned short CF = 12);
+
+ /**
+ * This method controls whether the interest will be calculated
+ * at the end of the payment period of at it's beginning.
+ *
+ * @param bep if @p false (default) then the interest is due at the
+ * end of the payment period, if @p true at it's beginning.
+ */
+ void setBep(const bool bep = false);
+
+ /**
+ * This method controls whether the interest is compounded in periods
+ * or continously.
+ *
+ * @param disc if @p true (default) then the interest is compounded in
+ * periods, if @p false continously.
+ */
+ void setDisc(const bool disc = true);
+
+ /**
+ * This method sets the nominal interest rate to the value passed
+ * in the argument @p ir.
+ *
+ * @param ir nominal interest rate
+ */
+ void setIr(const FCALC_DOUBLE ir);
+
+ FCALC_DOUBLE ir(void) const { return m_ir; };
+
+ /**
+ * This method sets the present value to the value passed
+ * in the argument @p pv.
+ *
+ * @param pv present value
+ */
+ void setPv(const FCALC_DOUBLE pv);
+
+ FCALC_DOUBLE pv(void) const { return m_pv; };
+
+ /**
+ * This method sets the payment amount to the value passed
+ * in the argument @p pmt.
+ *
+ * @param pmt payment amount
+ */
+ void setPmt(const FCALC_DOUBLE pmt);
+
+ FCALC_DOUBLE pmt(void) const { return m_pmt; };
+
+ /**
+ * This method sets the future value to the value passed
+ * in the argument @p fv.
+ *
+ * @param fv future value
+ */
+ void setFv(const FCALC_DOUBLE fv);
+
+ FCALC_DOUBLE fv(void) const { return m_fv; };
+
+private:
+ FCALC_DOUBLE eff_int(void) const;
+ FCALC_DOUBLE nom_int(const FCALC_DOUBLE eint) const;
+ FCALC_DOUBLE rnd(const FCALC_DOUBLE x) const;
+
+ FCALC_DOUBLE _Ax(const FCALC_DOUBLE eint) const;
+ FCALC_DOUBLE _Bx(const FCALC_DOUBLE eint) const;
+ FCALC_DOUBLE _Cx(const FCALC_DOUBLE eint) const;
+ FCALC_DOUBLE _fi(const FCALC_DOUBLE eint) const;
+ FCALC_DOUBLE _fip(const FCALC_DOUBLE eint) const;
+
+private:
+ FCALC_DOUBLE m_ir; // nominal interest rate
+ FCALC_DOUBLE m_pv; // present value
+ FCALC_DOUBLE m_pmt; // periodic payment
+ FCALC_DOUBLE m_fv; // future value
+ FCALC_DOUBLE m_npp; // number of payment periods
+
+ unsigned short m_CF; // compounding frequency
+ unsigned short m_PF; // payment frequency
+
+ unsigned short m_prec; // precision for roundoff for pv, pmt and fv
+ // i is not rounded, n is integer
+
+ bool m_bep; // beginning/end of period payment flag
+ bool m_disc; // discrete/continous compounding flag
+
+ unsigned short m_mask; // available value mask
+ #define PV_SET 0x0001
+ #define IR_SET 0x0002
+ #define PMT_SET 0x0004
+ #define NPP_SET 0x0008
+ #define FV_SET 0x0010
+};
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneyfinancialcalculatortest.cpp b/kmymoney2/mymoney/mymoneyfinancialcalculatortest.cpp
new file mode 100644
index 0000000..fa5b1a3
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyfinancialcalculatortest.cpp
@@ -0,0 +1,189 @@
+/***************************************************************************
+ mymoneyfinancialcalculatortest.cpp
+ -------------------
+ copyright : (C) 2003 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+#include <iostream>
+
+#include <math.h>
+#include "mymoneymoney.h"
+#include "mymoneyfinancialcalculatortest.h"
+
+MyMoneyFinancialCalculatorTest::MyMoneyFinancialCalculatorTest () {}
+
+
+void MyMoneyFinancialCalculatorTest::setUp () {
+ m = new MyMoneyFinancialCalculator;
+}
+
+void MyMoneyFinancialCalculatorTest::tearDown () {
+ delete m;
+}
+
+void MyMoneyFinancialCalculatorTest::testEmptyConstructor() {
+ CPPUNIT_ASSERT(m->m_ir == 0.0);
+ CPPUNIT_ASSERT(m->m_pv == 0.0);
+ CPPUNIT_ASSERT(m->m_pmt == 0.0);
+ CPPUNIT_ASSERT(m->m_fv == 0.0);
+ CPPUNIT_ASSERT(m->m_npp == 0);
+ CPPUNIT_ASSERT(m->m_CF == 12);
+ CPPUNIT_ASSERT(m->m_PF == 12);
+ CPPUNIT_ASSERT(m->m_prec == 2);
+ CPPUNIT_ASSERT(m->m_bep == false);
+ CPPUNIT_ASSERT(m->m_disc == true);
+ CPPUNIT_ASSERT(m->m_mask == 0);
+}
+
+void MyMoneyFinancialCalculatorTest::testSetPrec() {
+ m->setPrec(3);
+ CPPUNIT_ASSERT(m->m_prec == 3);
+}
+
+void MyMoneyFinancialCalculatorTest::testSetNpp() {
+ m->setNpp(20);
+ CPPUNIT_ASSERT(m->m_npp == 20);
+ CPPUNIT_ASSERT(m->m_mask == NPP_SET);
+}
+
+void MyMoneyFinancialCalculatorTest::testSetPF() {
+ m->setPF(1);
+ CPPUNIT_ASSERT(m->m_PF == 1);
+ m->setPF();
+ CPPUNIT_ASSERT(m->m_PF == 12);
+}
+
+void MyMoneyFinancialCalculatorTest::testSetCF() {
+ m->setCF(1);
+ CPPUNIT_ASSERT(m->m_CF == 1);
+ m->setCF();
+ CPPUNIT_ASSERT(m->m_CF == 12);
+}
+
+void MyMoneyFinancialCalculatorTest::testSetBep() {
+ m->setBep(true);
+ CPPUNIT_ASSERT(m->m_bep == true);
+ m->setBep();
+ CPPUNIT_ASSERT(m->m_bep == false);
+}
+
+void MyMoneyFinancialCalculatorTest::testSetDisc() {
+ m->setDisc(false);
+ CPPUNIT_ASSERT(m->m_disc == false);
+ m->setDisc();
+ CPPUNIT_ASSERT(m->m_disc == true);
+}
+
+void MyMoneyFinancialCalculatorTest::testSetIr() {
+ m->setIr(12.3);
+ CPPUNIT_ASSERT(m->m_ir == 12.3);
+ CPPUNIT_ASSERT(m->m_mask == IR_SET);
+}
+
+void MyMoneyFinancialCalculatorTest::testSetPv() {
+ m->setPv(23.4);
+ CPPUNIT_ASSERT(m->m_pv == 23.4);
+ CPPUNIT_ASSERT(m->m_mask == PV_SET);
+}
+
+void MyMoneyFinancialCalculatorTest::testSetPmt() {
+ m->setPmt(34.5);
+ CPPUNIT_ASSERT(m->m_pmt == 34.5);
+ CPPUNIT_ASSERT(m->m_mask == PMT_SET);
+}
+
+void MyMoneyFinancialCalculatorTest::testSetFv() {
+ m->setFv(45.6);
+ CPPUNIT_ASSERT(m->m_fv == 45.6);
+ CPPUNIT_ASSERT(m->m_mask == FV_SET);
+}
+
+void MyMoneyFinancialCalculatorTest::testCombinedSet() {
+ m->setNpp(20);
+ m->setIr(12.3);
+ m->setPv(23.4);
+ m->setPmt(34.5);
+ m->setFv(45.6);
+
+ CPPUNIT_ASSERT(m->m_mask == (NPP_SET | PV_SET | IR_SET | PMT_SET | FV_SET));
+}
+
+void MyMoneyFinancialCalculatorTest::testNumPayments() {
+ m->setPF(12);
+ m->setCF(12);
+ try {
+ m->numPayments();
+ CPPUNIT_FAIL("Missing expected exception");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+
+ try {
+ m->setPv(-80000.0);
+ m->numPayments();
+ CPPUNIT_FAIL("Missing expected exception");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+
+ try {
+ m->setIr(12.0);
+ m->numPayments();
+ CPPUNIT_FAIL("Missing expected exception");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+
+ try {
+ m->setPmt(7108.0);
+ m->numPayments();
+ CPPUNIT_FAIL("Missing expected exception");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+
+ try {
+ m->setFv(0.0);
+ m->numPayments();
+ } catch (MyMoneyException *e) {
+ CPPUNIT_FAIL("Unexpected exception");
+ delete e;
+ }
+
+ CPPUNIT_ASSERT(roundl(m->m_npp) == 12);
+}
+
+void MyMoneyFinancialCalculatorTest::testUseCase1() {
+ m->setPv(-300000.0);
+ m->setIr(5.0);
+ m->setNpp(360);
+ m->setFv(0.0);
+ m->setPF(12);
+ MyMoneyMoney res(m->payment());
+ CPPUNIT_ASSERT(res == MyMoneyMoney(161046,100));
+
+ res = MyMoneyMoney(m->futureValue());
+ CPPUNIT_ASSERT(res == MyMoneyMoney(405,100));
+}
+
+void MyMoneyFinancialCalculatorTest::testUseCase2() {
+ m->setPv(-320000.0);
+ m->setIr(5.0);
+ m->setNpp(360);
+ m->setFv(0.0);
+ m->setPF(12);
+ MyMoneyMoney res(m->payment());
+ CPPUNIT_ASSERT(res == MyMoneyMoney(171783,100));
+
+ res = MyMoneyMoney(m->futureValue());
+ CPPUNIT_ASSERT(res == MyMoneyMoney(-67,100));
+}
diff --git a/kmymoney2/mymoney/mymoneyfinancialcalculatortest.h b/kmymoney2/mymoney/mymoneyfinancialcalculatortest.h
new file mode 100644
index 0000000..f1d6b3b
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyfinancialcalculatortest.h
@@ -0,0 +1,72 @@
+/***************************************************************************
+ mymoneyfinancialcalculatortest.h
+ -------------------
+ copyright : (C) 2003 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef __MYMONEYFINANCIALCALCULATORTEST_H__
+#define __MYMONEYFINANCIALCALCULATORTEST_H__
+
+#include <cppunit/extensions/HelperMacros.h>
+#include "autotest.h"
+
+#define private public
+#define protected public
+#include "mymoneyfinancialcalculator.h"
+#undef private
+#undef protected
+
+class MyMoneyFinancialCalculatorTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(MyMoneyFinancialCalculatorTest);
+ CPPUNIT_TEST(testEmptyConstructor);
+ CPPUNIT_TEST(testSetPrec);
+ CPPUNIT_TEST(testSetNpp);
+ CPPUNIT_TEST(testSetPF);
+ CPPUNIT_TEST(testSetCF);
+ CPPUNIT_TEST(testSetBep);
+ CPPUNIT_TEST(testSetDisc);
+ CPPUNIT_TEST(testSetIr);
+ CPPUNIT_TEST(testSetPv);
+ CPPUNIT_TEST(testSetPmt);
+ CPPUNIT_TEST(testSetFv);
+ CPPUNIT_TEST(testCombinedSet);
+ CPPUNIT_TEST(testNumPayments);
+ CPPUNIT_TEST(testUseCase1);
+ CPPUNIT_TEST(testUseCase2);
+ CPPUNIT_TEST_SUITE_END();
+protected:
+ MyMoneyFinancialCalculator *m;
+
+public:
+ MyMoneyFinancialCalculatorTest ();
+
+ void setUp ();
+ void tearDown ();
+ void testEmptyConstructor();
+ void testSetPrec();
+ void testSetNpp();
+ void testSetPF();
+ void testSetCF();
+ void testSetBep();
+ void testSetDisc();
+ void testSetIr();
+ void testSetPv();
+ void testSetPmt();
+ void testSetFv();
+ void testCombinedSet();
+ void testNumPayments();
+ void testUseCase1();
+ void testUseCase2();
+};
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneyforecast.cpp b/kmymoney2/mymoney/mymoneyforecast.cpp
new file mode 100644
index 0000000..56125ea
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyforecast.cpp
@@ -0,0 +1,1340 @@
+/***************************************************************************
+ mymoneyforecast.cpp
+ -------------------
+ begin : Wed May 30 2007
+ copyright : (C) 2007 by Alvaro Soliverez
+ email : asoliverez@gmail.com
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstring.h>
+#include <qdatetime.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+#include <kdebug.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoneyforecast.h"
+#include "../kmymoneyglobalsettings.h"
+#include "mymoneyfile.h"
+#include "mymoneytransactionfilter.h"
+#include "mymoneyfinancialcalculator.h"
+
+MyMoneyForecast::MyMoneyForecast() :
+ m_forecastMethod(0),
+ m_historyMethod(0),
+ m_skipOpeningDate(true),
+ m_includeUnusedAccounts(false),
+ m_forecastDone(false)
+{
+ setForecastCycles(KMyMoneyGlobalSettings::forecastCycles());
+ setAccountsCycle(KMyMoneyGlobalSettings::forecastAccountCycle());
+ setHistoryStartDate(QDate::currentDate().addDays(-forecastCycles()*accountsCycle()));
+ setHistoryEndDate(QDate::currentDate().addDays(-1));
+ setForecastDays(KMyMoneyGlobalSettings::forecastDays());
+ setBeginForecastDay(KMyMoneyGlobalSettings::beginForecastDay());
+ setForecastMethod(KMyMoneyGlobalSettings::forecastMethod());
+ setHistoryMethod(KMyMoneyGlobalSettings::historyMethod());
+ setIncludeFutureTransactions(KMyMoneyGlobalSettings::includeFutureTransactions());
+ setIncludeScheduledTransactions(KMyMoneyGlobalSettings::includeScheduledTransactions());
+}
+
+
+void MyMoneyForecast::doForecast()
+{
+ int fDays = calculateBeginForecastDay();
+ int fMethod = forecastMethod();
+ int fAccCycle = accountsCycle();
+ int fCycles = forecastCycles();
+
+ //validate settings
+ if(fAccCycle < 1
+ || fCycles < 1
+ || fDays < 1)
+ {
+ throw new MYMONEYEXCEPTION("Illegal settings when calling doForecast. Settings must be higher than 0");
+ }
+
+ //initialize global variables
+ setForecastDays(fDays);
+ setForecastStartDate(QDate::currentDate().addDays(1));
+ setForecastEndDate(QDate::currentDate().addDays(fDays));
+ setAccountsCycle(fAccCycle);
+ setForecastCycles(fCycles);
+ setHistoryStartDate(forecastCycles() * accountsCycle());
+ setHistoryEndDate(QDate::currentDate().addDays(-1)); //yesterday
+
+ //clear all data before calculating
+ m_accountListPast.clear();
+ m_accountList.clear();
+ m_accountTrendList.clear();
+
+ //set forecast accounts
+ setForecastAccountList();
+
+ switch(fMethod)
+ {
+ case eScheduled:
+ doFutureScheduledForecast();
+ calculateScheduledDailyBalances();
+ break;
+ case eHistoric:
+ pastTransactions();
+ calculateHistoricDailyBalances();
+ break;
+ default:
+ break;
+ }
+
+ //flag the forecast as done
+ m_forecastDone = true;
+}
+
+MyMoneyForecast::~MyMoneyForecast()
+{
+}
+
+void MyMoneyForecast::pastTransactions()
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyTransactionFilter filter;
+
+ filter.setDateFilter(historyStartDate(), historyEndDate());
+ filter.setReportAllSplits(false);
+
+ QValueList<MyMoneyTransaction> transactions = file->transactionList(filter);
+ QValueList<MyMoneyTransaction>::const_iterator it_t = transactions.begin();
+
+ //Check past transactions
+ for(; it_t != transactions.end(); ++it_t ) {
+ const QValueList<MyMoneySplit>& splits = (*it_t).splits();
+ QValueList<MyMoneySplit>::const_iterator it_s = splits.begin();
+ for(; it_s != splits.end(); ++it_s ) {
+ if(!(*it_s).shares().isZero()) {
+ MyMoneyAccount acc = file->account((*it_s).accountId());
+
+ //workaround for stock accounts which have faulty opening dates
+ QDate openingDate;
+ if(acc.accountType() == MyMoneyAccount::Stock) {
+ MyMoneyAccount parentAccount = file->account(acc.parentAccountId());
+ openingDate = parentAccount.openingDate();
+ } else {
+ openingDate = acc.openingDate();
+ }
+
+ if(isForecastAccount(acc) //If it is one of the accounts we are checking, add the amount of the transaction
+ && ( (openingDate < (*it_t).postDate() && skipOpeningDate())
+ || !skipOpeningDate() ) ){ //don't take the opening day of the account to calculate balance
+ dailyBalances balance;
+ //FIXME deal with leap years
+ balance = m_accountListPast[acc.id()];
+ if(acc.accountType() == MyMoneyAccount::Income) {//if it is income, the balance is stored as negative number
+ balance[(*it_t).postDate()] += ((*it_s).shares() * MyMoneyMoney(-1, 1));
+ } else {
+ balance[(*it_t).postDate()] += (*it_s).shares();
+ }
+ // check if this is a new account for us
+ m_accountListPast[acc.id()] = balance;
+ }
+ }
+ }
+ }
+
+ //purge those accounts with no transactions on the period
+ if(isIncludingUnusedAccounts() == false)
+ purgeForecastAccountsList(m_accountListPast);
+
+ //calculate running sum
+ QMap<QString, QString>::Iterator it_n;
+ for(it_n = m_nameIdx.begin(); it_n != m_nameIdx.end(); ++it_n) {
+ MyMoneyAccount acc = file->account(*it_n);
+ m_accountListPast[acc.id()][historyStartDate().addDays(-1)] = file->balance(acc.id(), historyStartDate().addDays(-1));
+ for(QDate it_date = historyStartDate(); it_date <= historyEndDate(); ) {
+ m_accountListPast[acc.id()][it_date] += m_accountListPast[acc.id()][it_date.addDays(-1)]; //Running sum
+ it_date = it_date.addDays(1);
+ }
+ }
+
+ //adjust value of investments to deep currency
+ for ( it_n = m_nameIdx.begin(); it_n != m_nameIdx.end(); ++it_n ) {
+ MyMoneyAccount acc = file->account ( *it_n );
+
+ if ( acc.isInvest() ) {
+ //get the id of the security for that account
+ MyMoneySecurity undersecurity = file->security ( acc.currencyId() );
+ if ( ! undersecurity.isCurrency() ) //only do it if the security is not an actual currency
+ {
+ MyMoneyMoney rate = MyMoneyMoney ( 1, 1 ); //set the default value
+ MyMoneyPrice price;
+
+ for ( QDate it_date = historyStartDate().addDays(-1) ; it_date <= historyEndDate();) {
+ //get the price for the tradingCurrency that day
+ price = file->price ( undersecurity.id(), undersecurity.tradingCurrency(), it_date );
+ if ( price.isValid() )
+ {
+ rate = price.rate ( undersecurity.tradingCurrency() );
+ }
+ //value is the amount of shares multiplied by the rate of the deep currency
+ m_accountListPast[acc.id() ][it_date] = m_accountListPast[acc.id() ][it_date] * rate;
+ it_date = it_date.addDays(1);
+ }
+ }
+ }
+ }
+}
+
+bool MyMoneyForecast::isForecastAccount(const MyMoneyAccount& acc)
+{
+ if(m_nameIdx.isEmpty())
+ {
+ setForecastAccountList();
+ }
+ QMap<QString, QString>::Iterator it_n;
+ for(it_n = m_nameIdx.begin(); it_n != m_nameIdx.end(); ++it_n) {
+ if(*it_n == acc.id())
+ {
+ return true;
+ }
+ }
+ return false;
+}
+
+void MyMoneyForecast::calculateAccountTrendList()
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ int auxForecastTerms;
+ int totalWeight = 0;
+
+ //Calculate account trends
+ QMap<QString, QString>::Iterator it_n;
+ for(it_n = m_nameIdx.begin(); it_n != m_nameIdx.end(); ++it_n) {
+ MyMoneyAccount acc = file->account(*it_n);
+ m_accountTrendList[acc.id()][0] = MyMoneyMoney(0,1); // for today, the trend is 0
+
+ auxForecastTerms = forecastCycles();
+ if(skipOpeningDate()) {
+
+ QDate openingDate;
+ if(acc.accountType() == MyMoneyAccount::Stock) {
+ MyMoneyAccount parentAccount = file->account(acc.parentAccountId());
+ openingDate = parentAccount.openingDate();
+ } else {
+ openingDate = acc.openingDate();
+ }
+
+ if(openingDate > historyStartDate() ) { //if acc opened after forecast period
+ auxForecastTerms = 1 + ((openingDate.daysTo(historyEndDate()) + 1)/ accountsCycle()); // set forecastTerms to a lower value, to calculate only based on how long this account was opened
+ }
+ }
+
+ switch (historyMethod())
+ {
+ //moving average
+ case 0:
+ {
+ for(int t_day = 1; t_day <= accountsCycle(); t_day++)
+ m_accountTrendList[acc.id()][t_day] = accountMovingAverage(acc, t_day, auxForecastTerms); //moving average
+ break;
+ }
+ //weighted moving average
+ case 1:
+ {
+ //calculate total weight for moving average
+ if(auxForecastTerms == forecastCycles()) {
+ totalWeight = (auxForecastTerms * (auxForecastTerms + 1))/2; //totalWeight is the triangular number of auxForecastTerms
+ } else {
+ //if only taking a few periods, totalWeight is the sum of the weight for most recent periods
+ for(int i = 1, w = forecastCycles(); i <= auxForecastTerms; ++i, --w)
+ totalWeight += w;
+ }
+ for(int t_day = 1; t_day <= accountsCycle(); t_day++)
+ m_accountTrendList[acc.id()][t_day] = accountWeightedMovingAverage(acc, t_day, totalWeight);
+ break;
+ }
+ case 2:
+ {
+ //calculate mean term
+ MyMoneyMoney meanTerms = MyMoneyMoney((auxForecastTerms * (auxForecastTerms + 1))/2, 1) / MyMoneyMoney(auxForecastTerms, 1);
+
+ for(int t_day = 1; t_day <= accountsCycle(); t_day++)
+ m_accountTrendList[acc.id()][t_day] = accountLinearRegression(acc, t_day, auxForecastTerms, meanTerms);
+ break;
+ }
+ default:
+ break;
+ }
+ }
+}
+
+QValueList<MyMoneyAccount> MyMoneyForecast::forecastAccountList(void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ QValueList<MyMoneyAccount> accList;
+ //Get all accounts from the file and check if they are of the right type to calculate forecast
+ file->accountList(accList);
+ QValueList<MyMoneyAccount>::iterator accList_t = accList.begin();
+ for(; accList_t != accList.end(); ) {
+ MyMoneyAccount acc = *accList_t;
+ if(acc.isClosed() //check the account is not closed
+ || (!acc.isAssetLiability()) ) {
+ //|| (acc.accountType() == MyMoneyAccount::Investment) ) {//check that it is not an Investment account and only include Stock accounts
+ accList.remove(accList_t); //remove the account if it is not of the correct type
+ accList_t = accList.begin();
+ } else {
+ ++accList_t;
+ }
+ }
+ return accList;
+}
+
+QValueList<MyMoneyAccount> MyMoneyForecast::accountList(void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ QValueList<MyMoneyAccount> accList;
+ QStringList emptyStringList;
+ //Get all accounts from the file and check if they are present
+ file->accountList(accList, emptyStringList, false);
+ QValueList<MyMoneyAccount>::iterator accList_t = accList.begin();
+ for(; accList_t != accList.end(); ) {
+ MyMoneyAccount acc = *accList_t;
+ if(!isForecastAccount( acc ) ) {
+ accList.remove(accList_t); //remove the account
+ accList_t = accList.begin();
+ } else {
+ ++accList_t;
+ }
+ }
+ return accList;
+}
+
+MyMoneyMoney MyMoneyForecast::calculateAccountTrend(const MyMoneyAccount& acc, int trendDays)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyTransactionFilter filter;
+ MyMoneyMoney netIncome;
+ QDate startDate;
+ QDate openingDate = acc.openingDate();
+
+ //validate arguments
+ if(trendDays < 1)
+ {
+ throw new MYMONEYEXCEPTION("Illegal arguments when calling calculateAccountTrend. trendDays must be higher than 0");
+ }
+
+ //If it is a new account, we don't take into account the first day
+ //because it is usually a weird one and it would mess up the trend
+ if(openingDate.daysTo(QDate::currentDate())<trendDays){
+ startDate = (acc.openingDate()).addDays(1);
+ }
+ else {
+ startDate = QDate::currentDate().addDays(-trendDays);
+ }
+ //get all transactions for the period
+ filter.setDateFilter(startDate, QDate::currentDate());
+ if(acc.accountGroup() == MyMoneyAccount::Income
+ || acc.accountGroup() == MyMoneyAccount::Expense) {
+ filter.addCategory(acc.id());
+ } else {
+ filter.addAccount(acc.id());
+ }
+
+ filter.setReportAllSplits(false);
+ QValueList<MyMoneyTransaction> transactions = file->transactionList(filter);
+ QValueList<MyMoneyTransaction>::const_iterator it_t = transactions.begin();
+
+ //add all transactions for that account
+ for(; it_t != transactions.end(); ++it_t ) {
+ const QValueList<MyMoneySplit>& splits = (*it_t).splits();
+ QValueList<MyMoneySplit>::const_iterator it_s = splits.begin();
+ for(; it_s != splits.end(); ++it_s ) {
+ if(!(*it_s).shares().isZero()) {
+ if(acc.id()==(*it_s).accountId()) netIncome += (*it_s).value();
+ }
+ }
+ }
+
+ //calculate trend of the account in the past period
+ MyMoneyMoney accTrend;
+
+ //don't take into account the first day of the account
+ if(openingDate.daysTo(QDate::currentDate())<trendDays) {
+ accTrend = netIncome/MyMoneyMoney(openingDate.daysTo(QDate::currentDate())-1,1);
+ } else {
+ accTrend = netIncome/MyMoneyMoney(trendDays,1);
+ }
+ return accTrend;
+}
+
+MyMoneyMoney MyMoneyForecast::accountMovingAverage(const MyMoneyAccount &acc, const int trendDay, const int forecastTerms)
+{
+ //Calculate a daily trend for the account based on the accounts of a given number of terms
+ //With a term of 1 month and 3 terms, it calculates the trend taking the transactions occurred at that day and the day before,
+ //for the last 3 months
+ MyMoneyMoney balanceVariation;
+
+ for(int it_terms = 0; (trendDay+(accountsCycle()*it_terms)) <= historyDays(); ++it_terms) //sum for each term
+ {
+ MyMoneyMoney balanceBefore = m_accountListPast[acc.id()][historyStartDate().addDays(trendDay+(accountsCycle()*it_terms)-2)]; //get balance for the day before
+ MyMoneyMoney balanceAfter = m_accountListPast[acc.id()][historyStartDate().addDays(trendDay+(accountsCycle()*it_terms)-1)];
+ balanceVariation += (balanceAfter - balanceBefore); //add the balance variation between days
+ }
+ //calculate average of the variations
+ return (balanceVariation / MyMoneyMoney(forecastTerms,1)).convert(10000);
+}
+
+MyMoneyMoney MyMoneyForecast::accountWeightedMovingAverage(const MyMoneyAccount &acc, const int trendDay, const int totalWeight)
+{
+ MyMoneyMoney balanceVariation;
+
+ for(int it_terms = 0, weight = 1; (trendDay+(accountsCycle()*it_terms)) <= historyDays(); ++it_terms, ++weight) //sum for each term multiplied by weight
+ {
+ MyMoneyMoney balanceBefore = m_accountListPast[acc.id()][historyStartDate().addDays(trendDay+(accountsCycle()*it_terms)-2)]; //get balance for the day before
+ MyMoneyMoney balanceAfter = m_accountListPast[acc.id()][historyStartDate().addDays(trendDay+(accountsCycle()*it_terms)-1)];
+ balanceVariation += ( (balanceAfter - balanceBefore) * MyMoneyMoney(weight, 1) ); //add the balance variation between days multiplied by its weight
+ }
+ //calculate average of the variations
+ return (balanceVariation / MyMoneyMoney(totalWeight, 1)).convert(10000);
+}
+
+MyMoneyMoney MyMoneyForecast::accountLinearRegression(const MyMoneyAccount &acc, const int trendDay, const int actualTerms, const MyMoneyMoney meanTerms)
+{
+ MyMoneyMoney meanBalance, totalBalance, totalTerms;
+ totalTerms = MyMoneyMoney(actualTerms, 1);
+
+ //calculate mean balance
+ for(int it_terms = forecastCycles() - actualTerms; (trendDay+(accountsCycle()*it_terms)) <= historyDays(); ++it_terms) //sum for each term
+ {
+ totalBalance += m_accountListPast[acc.id()][historyStartDate().addDays(trendDay+(accountsCycle()*it_terms)-1)];
+ }
+ meanBalance = totalBalance / MyMoneyMoney(actualTerms,1);
+ meanBalance = meanBalance.convert(10000);
+
+ //calculate b1
+
+ //first calculate x - mean x multiplied by y - mean y
+ MyMoneyMoney totalXY, totalSqX;
+ for(int it_terms = forecastCycles() - actualTerms, term = 1; (trendDay+(accountsCycle()*it_terms)) <= historyDays(); ++it_terms, ++term) //sum for each term
+ {
+ MyMoneyMoney balance = m_accountListPast[acc.id()][historyStartDate().addDays(trendDay+(accountsCycle()*it_terms)-1)];
+
+ MyMoneyMoney balMeanBal = balance - meanBalance;
+ MyMoneyMoney termMeanTerm = (MyMoneyMoney(term, 1) - meanTerms);
+
+ totalXY += (balMeanBal * termMeanTerm).convert(10000);
+
+ totalSqX += (termMeanTerm * termMeanTerm).convert(10000);
+ }
+ totalXY = (totalXY / MyMoneyMoney(actualTerms,1)).convert(10000);
+ totalSqX = (totalSqX / MyMoneyMoney(actualTerms,1)).convert(10000);
+
+ //check zero
+ if(totalSqX.isZero())
+ return MyMoneyMoney(0,1);
+
+ MyMoneyMoney linReg = (totalXY/totalSqX).convert(10000);
+
+ return linReg;
+}
+
+void MyMoneyForecast::calculateHistoricDailyBalances()
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ calculateAccountTrendList();
+
+ //Calculate account daily balances
+ QMap<QString, QString>::ConstIterator it_n;
+ for(it_n = m_nameIdx.begin(); it_n != m_nameIdx.end(); ++it_n) {
+ MyMoneyAccount acc = file->account(*it_n);
+
+ //set the starting balance of the account
+ setStartingBalance(acc);
+
+ switch(historyMethod()) {
+ case 0:
+ case 1:
+ {
+ for(QDate f_day = forecastStartDate(); f_day <= forecastEndDate(); ) {
+ for(int t_day = 1; t_day <= accountsCycle(); ++t_day) {
+ MyMoneyMoney balanceDayBefore = m_accountList[acc.id()][(f_day.addDays(-1))];//balance of the day before
+ MyMoneyMoney accountDailyTrend = m_accountTrendList[acc.id()][t_day]; //trend for that day
+ //balance of the day is the balance of the day before multiplied by the trend for the day
+ m_accountList[acc.id()][f_day] = balanceDayBefore;
+ m_accountList[acc.id()][f_day] += accountDailyTrend; //movement trend for that particular day
+ m_accountList[acc.id()][f_day] = m_accountList[acc.id()][f_day].convert(acc.fraction());
+ //m_accountList[acc.id()][f_day] += m_accountListPast[acc.id()][f_day.addDays(-historyDays())];
+ f_day = f_day.addDays(1);
+ }
+ }
+ }
+ break;
+ case 2:
+ {
+ QDate baseDate = QDate::currentDate().addDays(-accountsCycle());
+ for(int t_day = 1; t_day <= accountsCycle(); ++t_day) {
+ int f_day = 1;
+ QDate fDate = baseDate.addDays(accountsCycle()+1);
+ while (fDate <= forecastEndDate()) {
+
+ //the calculation is based on the balance for the last month, that is then multiplied by the trend
+ m_accountList[acc.id()][fDate] = m_accountListPast[acc.id()][baseDate] + (m_accountTrendList[acc.id()][t_day] * MyMoneyMoney(f_day,1));
+ m_accountList[acc.id()][fDate] = m_accountList[acc.id()][fDate].convert(acc.fraction());
+ ++f_day;
+ fDate = baseDate.addDays(accountsCycle() * f_day);
+ }
+ baseDate = baseDate.addDays(1);
+ }
+ }
+ }
+ }
+}
+
+MyMoneyMoney MyMoneyForecast::forecastBalance(const MyMoneyAccount& acc, QDate forecastDate)
+{
+
+ dailyBalances balance;
+ MyMoneyMoney MM_amount = MyMoneyMoney(0,1);
+
+ //Check if acc is not a forecast account, return 0
+ if ( !isForecastAccount ( acc ) )
+ {
+ return MM_amount;
+ }
+
+ balance = m_accountList[acc.id() ];
+ if ( balance.contains ( forecastDate ) )
+ { //if the date is not in the forecast, it returns 0
+ MM_amount = m_accountList[acc.id() ][forecastDate];
+ }
+ return MM_amount;
+}
+
+/**
+ * Returns the forecast balance trend for account @a acc for offset @p int
+ * offset is days from current date, inside forecast days.
+ * Returns 0 if offset not in range of forecast days.
+ */
+MyMoneyMoney MyMoneyForecast::forecastBalance (const MyMoneyAccount& acc, int offset )
+{
+ QDate forecastDate = QDate::currentDate().addDays(offset);
+ return forecastBalance(acc, forecastDate);
+}
+
+void MyMoneyForecast::doFutureScheduledForecast(void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ if(isIncludingFutureTransactions())
+ addFutureTransactions();
+
+ if(isIncludingScheduledTransactions())
+ addScheduledTransactions();
+
+ //do not show accounts with no transactions
+ if(!isIncludingUnusedAccounts())
+ purgeForecastAccountsList(m_accountList);
+
+ //adjust value of investments to deep currency
+ QMap<QString, QString>::ConstIterator it_n;
+ for ( it_n = m_nameIdx.begin(); it_n != m_nameIdx.end(); ++it_n ) {
+ MyMoneyAccount acc = file->account ( *it_n );
+
+ if ( acc.isInvest() ) {
+ //get the id of the security for that account
+ MyMoneySecurity undersecurity = file->security ( acc.currencyId() );
+
+ //only do it if the security is not an actual currency
+ if ( ! undersecurity.isCurrency() )
+ {
+ //set the default value
+ MyMoneyMoney rate = MyMoneyMoney ( 1, 1 );
+ MyMoneyPrice price;
+
+ for (QDate it_day = QDate::currentDate(); it_day <= forecastEndDate(); ) {
+ //get the price for the tradingCurrency that day
+ price = file->price ( undersecurity.id(), undersecurity.tradingCurrency(), it_day );
+ if ( price.isValid() )
+ {
+ rate = price.rate ( undersecurity.tradingCurrency() );
+ }
+ //value is the amount of shares multiplied by the rate of the deep currency
+ m_accountList[acc.id() ][it_day] = m_accountList[acc.id() ][it_day] * rate;
+ it_day = it_day.addDays(1);
+ }
+ }
+ }
+ }
+}
+
+void MyMoneyForecast::addFutureTransactions(void)
+{
+ MyMoneyTransactionFilter filter;
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ // collect and process all transactions that have already been entered but
+ // are located in the future.
+ filter.setDateFilter(forecastStartDate(), forecastEndDate());
+ filter.setReportAllSplits(false);
+
+ QValueList<MyMoneyTransaction> transactions = file->transactionList(filter);
+ QValueList<MyMoneyTransaction>::const_iterator it_t = transactions.begin();
+
+ for(; it_t != transactions.end(); ++it_t ) {
+ const QValueList<MyMoneySplit>& splits = (*it_t).splits();
+ QValueList<MyMoneySplit>::const_iterator it_s = splits.begin();
+ for(; it_s != splits.end(); ++it_s ) {
+ if(!(*it_s).shares().isZero()) {
+ MyMoneyAccount acc = file->account((*it_s).accountId());
+ if(isForecastAccount(acc)) {
+ dailyBalances balance;
+ balance = m_accountList[acc.id()];
+ //if it is income, the balance is stored as negative number
+ if(acc.accountType() == MyMoneyAccount::Income) {
+ balance[(*it_t).postDate()] += ((*it_s).shares() * MyMoneyMoney(-1, 1));
+ } else {
+ balance[(*it_t).postDate()] += (*it_s).shares();
+ }
+ m_accountList[acc.id()] = balance;
+ }
+ }
+ }
+ }
+
+#if 0
+ QFile trcFile("forecast.csv");
+ trcFile.open(IO_WriteOnly);
+ QTextStream s(&trcFile);
+
+ {
+ s << "Already present transactions\n";
+ QMap<QString, dailyBalances>::Iterator it_a;
+ QMap<QString, QString>::ConstIterator it_n;
+ for(it_n = m_nameIdx.begin(); it_n != m_nameIdx.end(); ++it_n) {
+ MyMoneyAccount acc = file->account(*it_n);
+ it_a = m_accountList.find(*it_n);
+ s << "\"" << acc.name() << "\",";
+ for(int i = 0; i < 90; ++i) {
+ s << "\"" << (*it_a)[i].formatMoney("") << "\",";
+ }
+ s << "\n";
+ }
+}
+#endif
+
+}
+
+void MyMoneyForecast::addScheduledTransactions (void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ // now process all the schedules that may have an impact
+ QValueList<MyMoneySchedule> schedule;
+
+ schedule = file->scheduleList("", MyMoneySchedule::TYPE_ANY, MyMoneySchedule::OCCUR_ANY, MyMoneySchedule::STYPE_ANY,
+ QDate::currentDate(), forecastEndDate());
+ if(schedule.count() > 0) {
+ QValueList<MyMoneySchedule>::Iterator it;
+ do {
+ qBubbleSort(schedule);
+ it = schedule.begin();
+ if(it == schedule.end())
+ break;
+
+ if((*it).isFinished()) {
+ schedule.erase(it);
+ continue;
+ }
+
+ QDate date = (*it).nextPayment((*it).lastPayment());
+ if(!date.isValid()) {
+ schedule.remove(it);
+ continue;
+ }
+
+ QDate nextDate = (*it).adjustedNextPayment((*it).lastPayment());
+ if (nextDate > forecastEndDate()) {
+ // We're done with this schedule, let's move on to the next
+ schedule.remove(it);
+ continue;
+ }
+
+ // found the next schedule. process it
+
+ MyMoneyAccount acc = (*it).account();
+
+ if(!acc.id().isEmpty()) {
+ try {
+ if(acc.accountType() != MyMoneyAccount::Investment) {
+ MyMoneyTransaction t = (*it).transaction();
+
+ // only process the entry, if it is still active
+ if(!(*it).isFinished() && nextDate != QDate()) {
+ // make sure we have all 'starting balances' so that the autocalc works
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ QMap<QString, MyMoneyMoney> balanceMap;
+
+ for(it_s = t.splits().begin(); it_s != t.splits().end(); ++it_s ) {
+ MyMoneyAccount acc = file->account((*it_s).accountId());
+ if(isForecastAccount(acc)) {
+ // collect all overdues on the first day
+ QDate forecastDate = nextDate;
+ if(QDate::currentDate() >= nextDate)
+ forecastDate = QDate::currentDate().addDays(1);
+
+ dailyBalances balance;
+ balance = m_accountList[acc.id()];
+ for(QDate f_day = QDate::currentDate(); f_day < forecastDate; ) {
+ balanceMap[acc.id()] += m_accountList[acc.id()][f_day];
+ f_day = f_day.addDays(1);
+ }
+ }
+ }
+
+ // take care of the autoCalc stuff
+ calculateAutoLoan(*it, t, balanceMap);
+
+ // now add the splits to the balances
+ for(it_s = t.splits().begin(); it_s != t.splits().end(); ++it_s ) {
+ MyMoneyAccount acc = file->account((*it_s).accountId());
+ if(isForecastAccount(acc)) {
+ dailyBalances balance;
+ balance = m_accountList[acc.id()];
+ //int offset = QDate::currentDate().daysTo(nextDate);
+ //if(offset <= 0) { // collect all overdues on the first day
+ // offset = 1;
+ //}
+ // collect all overdues on the first day
+ QDate forecastDate = nextDate;
+ if(QDate::currentDate() >= nextDate)
+ forecastDate = QDate::currentDate().addDays(1);
+
+ if(acc.accountType() == MyMoneyAccount::Income) {
+ balance[forecastDate] += ((*it_s).shares() * MyMoneyMoney(-1, 1));
+ } else {
+ balance[forecastDate] += (*it_s).shares();
+ }
+ m_accountList[acc.id()] = balance;
+ }
+ }
+ }
+ }
+ (*it).setLastPayment(date);
+
+ } catch(MyMoneyException* e) {
+ kdDebug(2) << __func__ << " Schedule " << (*it).id() << " (" << (*it).name() << "): " << e->what() << endl;
+
+ schedule.remove(it);
+ delete e;
+ }
+ } else {
+ // remove schedule from list
+ schedule.remove(it);
+ }
+ }
+ while(1);
+ }
+
+#if 0
+{
+ s << "\n\nAdded scheduled transactions\n";
+ QMap<QString, dailyBalances>::Iterator it_a;
+ QMap<QString, QString>::ConstIterator it_n;
+ for(it_n = m_nameIdx.begin(); it_n != m_nameIdx.end(); ++it_n) {
+ MyMoneyAccount acc = file->account(*it_n);
+ it_a = m_accountList.find(*it_n);
+ s << "\"" << acc.name() << "\",";
+ for(int i = 0; i < 90; ++i) {
+ s << "\"" << (*it_a)[i].formatMoney("") << "\",";
+ }
+ s << "\n";
+}
+}
+#endif
+}
+
+void MyMoneyForecast::calculateScheduledDailyBalances (void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ //Calculate account daily balances
+ QMap<QString, QString>::ConstIterator it_n;
+ for(it_n = m_nameIdx.begin(); it_n != m_nameIdx.end(); ++it_n) {
+ MyMoneyAccount acc = file->account(*it_n);
+
+ //set the starting balance of the account
+ setStartingBalance(acc);
+
+ for(QDate f_day = forecastStartDate(); f_day <= forecastEndDate(); ) {
+ MyMoneyMoney balanceDayBefore = m_accountList[acc.id()][(f_day.addDays(-1))];//balance of the day before
+ m_accountList[acc.id()][f_day] += balanceDayBefore; //running sum
+ f_day = f_day.addDays(1);
+ }
+ }
+
+
+}
+
+int MyMoneyForecast::daysToMinimumBalance(const MyMoneyAccount& acc)
+{
+ QString minimumBalance = acc.value("minBalanceAbsolute");
+ MyMoneyMoney minBalance = MyMoneyMoney(minimumBalance);
+ dailyBalances balance;
+
+ //Check if acc is not a forecast account, return -1
+ if(!isForecastAccount(acc)) {
+ return -1;
+ }
+
+ balance = m_accountList[acc.id()];
+
+ for(QDate it_day = QDate::currentDate() ; it_day <= forecastEndDate(); ) {
+ if(minBalance > balance[it_day]) {
+ return QDate::currentDate().daysTo(it_day);
+ }
+ it_day = it_day.addDays(1);
+ }
+ return -1;
+}
+
+int MyMoneyForecast::daysToZeroBalance(const MyMoneyAccount& acc)
+{
+ dailyBalances balance;
+
+ //Check if acc is not a forecast account, return -1
+ if(!isForecastAccount(acc)) {
+ return -2;
+ }
+
+ balance = m_accountList[acc.id()];
+
+ if (acc.accountGroup() == MyMoneyAccount::Asset) {
+ for (QDate it_day = QDate::currentDate() ; it_day <= forecastEndDate(); )
+ {
+ if ( balance[it_day] < MyMoneyMoney ( 0, 1 ) )
+ {
+ return QDate::currentDate().daysTo(it_day);
+ }
+ it_day = it_day.addDays(1);
+ }
+ } else if (acc.accountGroup() == MyMoneyAccount::Liability) {
+ for (QDate it_day = QDate::currentDate() ; it_day <= forecastEndDate(); )
+ {
+ if ( balance[it_day] > MyMoneyMoney ( 0, 1 ) )
+ {
+ return QDate::currentDate().daysTo(it_day);
+ }
+ it_day = it_day.addDays(1);
+ }
+ }
+ return -1;
+}
+
+void MyMoneyForecast::setForecastAccountList(void)
+{
+
+ //get forecast accounts
+ QValueList<MyMoneyAccount> accList;
+ accList = forecastAccountList();
+
+ QValueList<MyMoneyAccount>::const_iterator accList_t = accList.begin();
+ for(; accList_t != accList.end(); ++accList_t ) {
+ MyMoneyAccount acc = *accList_t;
+ // check if this is a new account for us
+ if(m_nameIdx[acc.id()] != acc.id()) {
+ m_nameIdx[acc.id()] = acc.id();
+ }
+ }
+}
+
+MyMoneyMoney MyMoneyForecast::accountCycleVariation(const MyMoneyAccount& acc)
+{
+ MyMoneyMoney cycleVariation;
+
+ if (forecastMethod() == eHistoric) {
+ for(int t_day = 1; t_day <= accountsCycle() ; ++t_day) {
+ cycleVariation += m_accountTrendList[acc.id()][t_day];
+ }
+ }
+ return cycleVariation;
+}
+
+MyMoneyMoney MyMoneyForecast::accountTotalVariation(const MyMoneyAccount& acc)
+{
+ MyMoneyMoney totalVariation;
+
+ totalVariation = forecastBalance(acc, forecastEndDate()) - forecastBalance(acc, QDate::currentDate());
+ return totalVariation;
+}
+
+QValueList<QDate> MyMoneyForecast::accountMinimumBalanceDateList(const MyMoneyAccount& acc)
+{
+ QValueList<QDate> minBalanceList;
+ int daysToBeginDay;
+
+ daysToBeginDay = QDate::currentDate().daysTo(beginForecastDate());
+
+ for(int t_cycle = 0; ((t_cycle * accountsCycle()) + daysToBeginDay) < forecastDays() ; ++t_cycle) {
+ MyMoneyMoney minBalance = forecastBalance(acc, (t_cycle * accountsCycle() + daysToBeginDay));
+ QDate minDate = QDate::currentDate().addDays(t_cycle * accountsCycle() + daysToBeginDay);
+ for(int t_day = 1; t_day <= accountsCycle() ; ++t_day) {
+ if( minBalance > forecastBalance(acc, (t_cycle * accountsCycle()) + daysToBeginDay + t_day) ) {
+ minBalance = forecastBalance(acc, (t_cycle * accountsCycle()) + daysToBeginDay + t_day );
+ minDate = QDate::currentDate().addDays( (t_cycle * accountsCycle()) + daysToBeginDay + t_day);
+ }
+ }
+ minBalanceList.append(minDate);
+ }
+ return minBalanceList;
+}
+
+QValueList<QDate> MyMoneyForecast::accountMaximumBalanceDateList(const MyMoneyAccount& acc)
+{
+ QValueList<QDate> maxBalanceList;
+ int daysToBeginDay;
+
+ daysToBeginDay = QDate::currentDate().daysTo(beginForecastDate());
+
+ for(int t_cycle = 0; ((t_cycle * accountsCycle()) + daysToBeginDay) < forecastDays() ; ++t_cycle) {
+ MyMoneyMoney maxBalance = forecastBalance(acc, ((t_cycle * accountsCycle()) + daysToBeginDay));
+ QDate maxDate = QDate::currentDate().addDays((t_cycle * accountsCycle()) + daysToBeginDay);
+
+ for(int t_day = 0; t_day < accountsCycle() ; ++t_day) {
+ if( maxBalance < forecastBalance(acc, (t_cycle * accountsCycle()) + daysToBeginDay + t_day) ) {
+ maxBalance = forecastBalance(acc, (t_cycle * accountsCycle()) + daysToBeginDay + t_day );
+ maxDate = QDate::currentDate().addDays((t_cycle * accountsCycle()) + daysToBeginDay + t_day);
+ }
+ }
+ maxBalanceList.append(maxDate);
+ }
+ return maxBalanceList;
+}
+
+MyMoneyMoney MyMoneyForecast::accountAverageBalance(const MyMoneyAccount& acc)
+{
+ MyMoneyMoney totalBalance;
+ for(int f_day = 1; f_day <= forecastDays() ; ++f_day) {
+ totalBalance += forecastBalance(acc, f_day);
+ }
+ return totalBalance / MyMoneyMoney( forecastDays(), 1);
+}
+
+int MyMoneyForecast::calculateBeginForecastDay()
+{
+ int fDays = forecastDays();
+ int beginDay = beginForecastDay();
+ int accCycle = accountsCycle();
+ QDate beginDate;
+
+ //if 0, beginDate is current date and forecastDays remains unchanged
+ if(beginDay == 0) {
+ setBeginForecastDate(QDate::currentDate());
+ return fDays;
+ }
+
+ //adjust if beginDay more than days of current month
+ if(QDate::currentDate().daysInMonth() < beginDay)
+ beginDay = QDate::currentDate().daysInMonth();
+
+ //if beginDay still to come, calculate and return
+ if(QDate::currentDate().day() <= beginDay) {
+ beginDate = QDate( QDate::currentDate().year(), QDate::currentDate().month(), beginDay);
+ fDays += QDate::currentDate().daysTo(beginDate);
+ setBeginForecastDate(beginDate);
+ return fDays;
+ }
+
+ //adjust beginDay for next month
+ if(QDate::currentDate().addMonths(1).daysInMonth() < beginDay)
+ beginDay = QDate::currentDate().addMonths(1).daysInMonth();
+
+ //if beginDay of next month comes before 1 interval, use beginDay next month
+ if(QDate::currentDate().addDays(accCycle) >=
+ (QDate(QDate::currentDate().addMonths(1).year(), QDate::currentDate().addMonths(1).month(), 1).addDays(beginDay-1) ) )
+ {
+ beginDate = QDate(QDate::currentDate().addMonths(1).year(), QDate::currentDate().addMonths(1).month(), 1).addDays(beginDay-1);
+ fDays += QDate::currentDate().daysTo(beginDate);
+ }
+ else //add intervals to current beginDay and take the first after current date
+ {
+ beginDay = ((((QDate::currentDate().day()-beginDay)/accCycle) + 1) * accCycle) + beginDay;
+ beginDate = QDate::currentDate().addDays(beginDay - QDate::currentDate().day());
+ fDays += QDate::currentDate().daysTo(beginDate);
+ }
+
+ setBeginForecastDate(beginDate);
+ return fDays;
+}
+
+void MyMoneyForecast::purgeForecastAccountsList(QMap<QString, dailyBalances>& accountList)
+{
+ QMap<QString, QString>::Iterator it_n;
+ for ( it_n = m_nameIdx.begin(); it_n != m_nameIdx.end(); ) {
+ if(!accountList.contains(*it_n)) {
+ m_nameIdx.remove(it_n);
+ it_n = m_nameIdx.begin();
+ } else
+ ++it_n;
+ }
+}
+
+void MyMoneyForecast::createBudget ( MyMoneyBudget& budget, QDate historyStart, QDate historyEnd, QDate budgetStart, QDate budgetEnd, const bool returnBudget )
+{
+ // clear all data except the id and name
+ QString name = budget.name();
+ budget = MyMoneyBudget(budget.id(), MyMoneyBudget());
+ budget.setName(name);
+
+ //check parameters
+ if ( historyStart > historyEnd ||
+ budgetStart > budgetEnd ||
+ budgetStart <= historyEnd )
+ {
+ throw new MYMONEYEXCEPTION ( "Illegal parameters when trying to create budget" );
+ }
+
+ //get forecast method
+ int fMethod = forecastMethod();
+
+ //set start date to 1st of month and end dates to last day of month, since we deal with full months in budget
+ historyStart = QDate ( historyStart.year(), historyStart.month(), 1 );
+ historyEnd = QDate ( historyEnd.year(), historyEnd.month(), historyEnd.daysInMonth() );
+ budgetStart = QDate ( budgetStart.year(), budgetStart.month(), 1 );
+ budgetEnd = QDate ( budgetEnd.year(), budgetEnd.month(), budgetEnd.daysInMonth() );
+
+ //set forecast parameters
+ setHistoryStartDate ( historyStart );
+ setHistoryEndDate ( historyEnd );
+ setForecastStartDate ( budgetStart );
+ setForecastEndDate ( budgetEnd );
+ setForecastDays ( budgetStart.daysTo ( budgetEnd ) + 1 );
+ if ( budgetStart.daysTo ( budgetEnd ) > historyStart.daysTo ( historyEnd ) ) { //if history period is shorter than budget, use that one as the trend length
+ setAccountsCycle ( historyStart.daysTo ( historyEnd ) ); //we set the accountsCycle to the base timeframe we will use to calculate the average (eg. 180 days, 365, etc)
+ } else { //if one timeframe is larger than the other, but not enough to be 1 time larger, we take the lowest value
+ setAccountsCycle ( budgetStart.daysTo ( budgetEnd ) );
+ }
+ setForecastCycles ( ( historyStart.daysTo ( historyEnd ) / accountsCycle() ) );
+ if ( forecastCycles() == 0 ) //the cycles must be at least 1
+ setForecastCycles ( 1 );
+
+ //do not skip opening date
+ setSkipOpeningDate ( false );
+
+ //clear and set accounts list we are going to use. Categories, in this case
+ m_nameIdx.clear();
+ setBudgetAccountList();
+
+ //calculate budget according to forecast method
+ switch(fMethod)
+ {
+ case eScheduled:
+ doFutureScheduledForecast();
+ calculateScheduledMonthlyBalances();
+ break;
+ case eHistoric:
+ pastTransactions(); //get all transactions for history period
+ calculateAccountTrendList();
+ calculateHistoricMonthlyBalances(); //add all balances of each month and put at the 1st day of each month
+ break;
+ default:
+ break;
+ }
+
+ //flag the forecast as done
+ m_forecastDone = true;
+
+ //only fill the budget if it is going to be used
+ if ( returnBudget ) {
+ //setup the budget itself
+ MyMoneyFile* file = MyMoneyFile::instance();
+ budget.setBudgetStart ( budgetStart );
+
+ //go through all the accounts and add them to budget
+ QMap<QString, QString>::ConstIterator it_nc;
+ for ( it_nc = m_nameIdx.begin(); it_nc != m_nameIdx.end(); ++it_nc ) {
+ MyMoneyAccount acc = file->account ( *it_nc );
+
+ MyMoneyBudget::AccountGroup budgetAcc;
+ budgetAcc.setId ( acc.id() );
+ budgetAcc.setBudgetLevel ( MyMoneyBudget::AccountGroup::eMonthByMonth );
+
+ for ( QDate f_date = forecastStartDate(); f_date <= forecastEndDate(); ) {
+ MyMoneyBudget::PeriodGroup period;
+
+ //add period to budget account
+ period.setStartDate ( f_date );
+ period.setAmount ( forecastBalance ( acc, f_date ) );
+ budgetAcc.addPeriod ( f_date, period );
+
+ //next month
+ f_date = f_date.addMonths ( 1 );
+ }
+ //add budget account to budget
+ budget.setAccount ( budgetAcc, acc.id() );
+ }
+ }
+}
+
+void MyMoneyForecast::setBudgetAccountList(void)
+{
+ //get budget accounts
+ QValueList<MyMoneyAccount> accList;
+ accList = budgetAccountList();
+
+ QValueList<MyMoneyAccount>::const_iterator accList_t = accList.begin();
+ for(; accList_t != accList.end(); ++accList_t ) {
+ MyMoneyAccount acc = *accList_t;
+ // check if this is a new account for us
+ if(m_nameIdx[acc.id()] != acc.id()) {
+ m_nameIdx[acc.id()] = acc.id();
+ }
+ }
+}
+
+QValueList<MyMoneyAccount> MyMoneyForecast::budgetAccountList(void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ QValueList<MyMoneyAccount> accList;
+ QStringList emptyStringList;
+ //Get all accounts from the file and check if they are of the right type to calculate forecast
+ file->accountList(accList, emptyStringList, false);
+ QValueList<MyMoneyAccount>::iterator accList_t = accList.begin();
+ for(; accList_t != accList.end(); ) {
+ MyMoneyAccount acc = *accList_t;
+ if(acc.isClosed() //check the account is not closed
+ || (!acc.isIncomeExpense()) ) {
+ accList.remove(accList_t); //remove the account if it is not of the correct type
+ accList_t = accList.begin();
+ } else {
+ ++accList_t;
+ }
+ }
+ return accList;
+}
+
+void MyMoneyForecast::calculateHistoricMonthlyBalances()
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ //Calculate account monthly balances
+ QMap<QString, QString>::ConstIterator it_n;
+ for(it_n = m_nameIdx.begin(); it_n != m_nameIdx.end(); ++it_n) {
+ MyMoneyAccount acc = file->account(*it_n);
+
+ for( QDate f_date = forecastStartDate(); f_date <= forecastEndDate(); ) {
+ for(int f_day = 1; f_day <= accountsCycle() && f_date <= forecastEndDate(); ++f_day) {
+ MyMoneyMoney accountDailyTrend = m_accountTrendList[acc.id()][f_day]; //trend for that day
+ //check for leap year
+ if(f_date.month() == 2 && f_date.day() == 29)
+ f_date = f_date.addDays(1); //skip 1 day
+ m_accountList[acc.id()][QDate(f_date.year(), f_date.month(), 1)] += accountDailyTrend; //movement trend for that particular day
+ f_date = f_date.addDays(1);
+ }
+ }
+ }
+}
+
+void MyMoneyForecast::calculateScheduledMonthlyBalances()
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+//Calculate account monthly balances
+ QMap<QString, QString>::ConstIterator it_n;
+ for(it_n = m_nameIdx.begin(); it_n != m_nameIdx.end(); ++it_n) {
+ MyMoneyAccount acc = file->account(*it_n);
+
+ for( QDate f_date = forecastStartDate(); f_date <= forecastEndDate(); f_date = f_date.addDays(1) ) {
+ //get the trend for the day
+ MyMoneyMoney accountDailyBalance = m_accountList[acc.id()][f_date];
+
+ //do not add if it is the beginning of the month
+ //otherwise we end up with duplicated values as reported by Marko Käning
+ if(f_date != QDate(f_date.year(), f_date.month(), 1) )
+ m_accountList[acc.id()][QDate(f_date.year(), f_date.month(), 1)] += accountDailyBalance;
+ }
+ }
+}
+
+void MyMoneyForecast::setStartingBalance(const MyMoneyAccount &acc)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ //Get current account balance
+ if ( acc.isInvest() ) { //investments require special treatment
+ //get the security id of that account
+ MyMoneySecurity undersecurity = file->security ( acc.currencyId() );
+
+ //only do it if the security is not an actual currency
+ if ( ! undersecurity.isCurrency() )
+ {
+ //set the default value
+ MyMoneyMoney rate = MyMoneyMoney ( 1, 1 );
+ //get te
+ MyMoneyPrice price = file->price ( undersecurity.id(), undersecurity.tradingCurrency(), QDate::currentDate() );
+ if ( price.isValid() )
+ {
+ rate = price.rate ( undersecurity.tradingCurrency() );
+ }
+ m_accountList[acc.id()][QDate::currentDate()] = file->balance(acc.id(), QDate::currentDate()) * rate;
+ }
+ } else {
+ m_accountList[acc.id()][QDate::currentDate()] = file->balance(acc.id(), QDate::currentDate());
+ }
+
+ //if the method is linear regression, we have to add the opening balance to m_accountListPast
+ if(forecastMethod() == eHistoric && historyMethod() == 2) {
+ //FIXME workaround for stock opening dates
+ QDate openingDate;
+ if(acc.accountType() == MyMoneyAccount::Stock) {
+ MyMoneyAccount parentAccount = file->account(acc.parentAccountId());
+ openingDate = parentAccount.openingDate();
+ } else {
+ openingDate = acc.openingDate();
+ }
+
+ //add opening balance only if it opened after the history start
+ if(openingDate >= historyStartDate()) {
+
+ MyMoneyMoney openingBalance;
+
+ openingBalance = file->balance(acc.id(), openingDate);
+
+ //calculate running sum
+ for(QDate it_date = openingDate; it_date <= historyEndDate(); it_date = it_date.addDays(1) ) {
+ //investments require special treatment
+ if ( acc.isInvest() ) {
+ //get the security id of that account
+ MyMoneySecurity undersecurity = file->security ( acc.currencyId() );
+
+ //only do it if the security is not an actual currency
+ if ( ! undersecurity.isCurrency() )
+ {
+ //set the default value
+ MyMoneyMoney rate = MyMoneyMoney ( 1, 1 );
+
+ //get the rate for that specific date
+ MyMoneyPrice price = file->price ( undersecurity.id(), undersecurity.tradingCurrency(), it_date );
+ if ( price.isValid() )
+ {
+ rate = price.rate ( undersecurity.tradingCurrency() );
+ }
+ m_accountListPast[acc.id()][it_date] += openingBalance * rate;
+ }
+ } else {
+ m_accountListPast[acc.id()][it_date] += openingBalance;
+ }
+ }
+ }
+ }
+}
+
+void MyMoneyForecast::calculateAutoLoan(const MyMoneySchedule& schedule, MyMoneyTransaction& transaction, const QMap<QString, MyMoneyMoney>& balances)
+{
+ if (schedule.type() == MyMoneySchedule::TYPE_LOANPAYMENT) {
+
+ //get amortization and interest autoCalc splits
+ MyMoneySplit amortizationSplit = transaction.amortizationSplit();
+ MyMoneySplit interestSplit = transaction.interestSplit();
+
+ if(!amortizationSplit.id().isEmpty() && !interestSplit.id().isEmpty()) {
+ MyMoneyAccountLoan acc(MyMoneyFile::instance()->account(amortizationSplit.accountId()));
+ MyMoneyFinancialCalculator calc;
+ QDate dueDate;
+
+ // FIXME: setup dueDate according to when the interest should be calculated
+ // current implementation: take the date of the next payment according to
+ // the schedule. If the calculation is based on the payment reception, and
+ // the payment is overdue then take the current date
+ dueDate = schedule.nextDueDate();
+ if(acc.interestCalculation() == MyMoneyAccountLoan::paymentReceived) {
+ if(dueDate < QDate::currentDate())
+ dueDate = QDate::currentDate();
+ }
+
+ // we need to calculate the balance at the time the payment is due
+
+ MyMoneyMoney balance;
+ if(balances.count() == 0)
+ balance = MyMoneyFile::instance()->balance(acc.id(), dueDate.addDays(-1));
+ else
+ balance = balances[acc.id()];
+
+ /*
+ QValueList<MyMoneyTransaction> list;
+ QValueList<MyMoneyTransaction>::ConstIterator it;
+ MyMoneySplit split;
+ MyMoneyTransactionFilter filter(acc.id());
+
+ filter.setDateFilter(QDate(), dueDate.addDays(-1));
+ list = MyMoneyFile::instance()->transactionList(filter);
+
+ for(it = list.begin(); it != list.end(); ++it) {
+ try {
+ split = (*it).splitByAccount(acc.id());
+ balance += split.value();
+
+ } catch(MyMoneyException *e) {
+ // account is not referenced within this transaction
+ delete e;
+ }
+ }
+ */
+
+ // FIXME: for now, we only support interest calculation at the end of the period
+ calc.setBep();
+ // FIXME: for now, we only support periodic compounding
+ calc.setDisc();
+
+ calc.setPF(MyMoneySchedule::eventsPerYear(schedule.occurence()));
+ MyMoneySchedule::occurenceE compoundingOccurence = static_cast<MyMoneySchedule::occurenceE>(acc.interestCompounding());
+ if(compoundingOccurence == MyMoneySchedule::OCCUR_ANY)
+ compoundingOccurence = schedule.occurence();
+
+ calc.setCF(MyMoneySchedule::eventsPerYear(compoundingOccurence));
+
+ calc.setPv(balance.toDouble());
+ calc.setIr(static_cast<FCALC_DOUBLE> (acc.interestRate(dueDate).abs().toDouble()));
+ calc.setPmt(acc.periodicPayment().toDouble());
+
+ MyMoneyMoney interest(calc.interestDue()), amortization;
+ interest = interest.abs(); // make sure it's positive for now
+ amortization = acc.periodicPayment() - interest;
+
+ if(acc.accountType() == MyMoneyAccount::AssetLoan) {
+ interest = -interest;
+ amortization = -amortization;
+ }
+
+ amortizationSplit.setShares(amortization);
+ interestSplit.setShares(interest);
+
+ // FIXME: for now we only assume loans to be in the currency of the transaction
+ amortizationSplit.setValue(amortization);
+ interestSplit.setValue(interest);
+
+ transaction.modifySplit(amortizationSplit);
+ transaction.modifySplit(interestSplit);
+ }
+ }
+}
+
diff --git a/kmymoney2/mymoney/mymoneyforecast.h b/kmymoney2/mymoney/mymoneyforecast.h
new file mode 100644
index 0000000..f69e596
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyforecast.h
@@ -0,0 +1,408 @@
+/***************************************************************************
+ mymoneyforecast.h
+ -------------------
+ begin : Wed May 30 2007
+ copyright : (C) 2007 by Alvaro Soliverez
+ email : asoliverez@gmail.com
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYFORECAST_H
+#define MYMONEYFORECAST_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qmap.h>
+#include <qvaluelist.h>
+#include <qstring.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyobject.h>
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneymoney.h>
+#include <kmymoney/mymoneyscheduled.h>
+#include <kmymoney/export.h>
+#include "mymoneybudget.h"
+
+/**
+ *
+ *
+ * @author Alvaro Soliverez <asoliverez@gmail.com>
+ */
+
+class MyMoneyForecast
+{
+public:
+ MyMoneyForecast();
+ ~MyMoneyForecast();
+
+ /**
+ * calculate forecast based on historic transactions
+ */
+ void doForecast();
+
+ /**
+ * Returns the list of accounts to be forecast.
+ */
+ QValueList<MyMoneyAccount> accountList(void);
+
+ /**
+ * Returns the balance trend for account @a acc based on a number of days @p forecastDays
+ * Collects and processes all transactions in the past for the
+ * same period of forecast and calculates the balance trend
+ */
+ static MyMoneyMoney calculateAccountTrend(const MyMoneyAccount& acc, int forecastDays);
+
+ /**
+ * Returns the forecast balance trend for account @a acc for day @p QDate
+ */
+ MyMoneyMoney forecastBalance(const MyMoneyAccount& acc, QDate forecastDate);
+
+ /**
+ * Returns the forecast balance trend for account @a acc for offset @p int
+ * offset is days from current date, inside forecast days.
+ * Returns 0 if offset not in range of forecast days.
+ */
+ MyMoneyMoney forecastBalance(const MyMoneyAccount& acc, int offset);
+
+ /**
+ * Returns true if an account @a acc is an account to be forecast
+ */
+ bool isForecastAccount(const MyMoneyAccount& acc);
+
+ /**
+ * returns the number of days when a given account is forecast to be below minimum balance
+ * returns -1 if it will not be below minimum balance in the forecast period
+ */
+ int daysToMinimumBalance(const MyMoneyAccount& acc);
+
+ /**
+ * returns the number of days when a given account is forecast to be below zero if it is an asset accounts
+ * or above zero if it is a liability account
+ * returns -1 if it will not happen in the forecast period
+ */
+ int daysToZeroBalance(const MyMoneyAccount& acc);
+
+ /**
+ * amount of variation of a given account in one cycle
+ */
+ MyMoneyMoney accountCycleVariation(const MyMoneyAccount& acc);
+
+ /**
+ * amount of variation of a given account for the whole forecast period
+ */
+ MyMoneyMoney accountTotalVariation(const MyMoneyAccount& acc);
+
+ /**
+ * returns a list of the dates where the account was on its lowest balance in each cycle
+ */
+ QValueList<QDate> accountMinimumBalanceDateList(const MyMoneyAccount& acc);
+
+ /**
+ * returns a list of the dates where the account was on its highest balance in each cycle
+ */
+ QValueList<QDate> accountMaximumBalanceDateList(const MyMoneyAccount& acc);
+
+ /**
+ * returns the average balance of the account within the forecast period
+ */
+ MyMoneyMoney accountAverageBalance(const MyMoneyAccount& acc);
+
+ /**
+ * creates a budget based on the history of a given timeframe
+ */
+ void createBudget(MyMoneyBudget& budget, QDate historyStart, QDate historyEnd, QDate budgetStart, QDate budgetEnd, const bool returnBudget);
+
+ /**
+ * number of days to go back in history to calculate forecast
+ */
+ int historyDays(void) const { return (m_historyStartDate.daysTo(m_historyEndDate) + 1); }
+
+ void setAccountsCycle(int accountsCycle) { m_accountsCycle = accountsCycle; }
+ void setForecastCycles(int forecastCycles) { m_forecastCycles = forecastCycles; }
+ void setForecastDays(int forecastDays) { m_forecastDays = forecastDays; }
+ void setBeginForecastDate(QDate beginForecastDate) { m_beginForecastDate = beginForecastDate; }
+ void setBeginForecastDay(int beginDay) { m_beginForecastDay = beginDay; }
+ void setForecastMethod(int forecastMethod) { m_forecastMethod = forecastMethod; }
+ void setHistoryStartDate(QDate historyStartDate) { m_historyStartDate = historyStartDate; }
+ void setHistoryEndDate(QDate historyEndDate) { m_historyEndDate = historyEndDate; }
+ void setHistoryStartDate(int daysToStartDate) { setHistoryStartDate(QDate::currentDate().addDays(-daysToStartDate)); }
+ void setHistoryEndDate(int daysToEndDate) { setHistoryEndDate(QDate::currentDate().addDays(-daysToEndDate)); }
+ void setForecastStartDate(QDate _startDate) { m_forecastStartDate = _startDate; }
+ void setForecastEndDate(QDate _endDate) { m_forecastEndDate = _endDate; }
+ void setSkipOpeningDate(bool _skip) { m_skipOpeningDate = _skip; }
+ void setHistoryMethod(int historyMethod) { m_historyMethod = historyMethod; }
+ void setIncludeUnusedAccounts(bool _bool) { m_includeUnusedAccounts = _bool; }
+ void setForecastDone(bool _bool) { m_forecastDone = _bool; }
+ void setIncludeFutureTransactions(bool _bool) { m_includeFutureTransactions = _bool; }
+ void setIncludeScheduledTransactions(bool _bool) { m_includeScheduledTransactions = _bool; }
+
+ int accountsCycle(void) const { return m_accountsCycle; }
+ int forecastCycles(void) const { return m_forecastCycles; }
+ int forecastDays(void) const { return m_forecastDays; }
+ QDate beginForecastDate(void) const { return m_beginForecastDate; }
+ int beginForecastDay(void) const { return m_beginForecastDay; }
+ int forecastMethod(void) const { return m_forecastMethod; }
+ QDate historyStartDate(void) const { return m_historyStartDate; }
+ QDate historyEndDate(void) const { return m_historyEndDate; }
+ QDate forecastStartDate(void) const { return m_forecastStartDate; }
+ QDate forecastEndDate(void) const { return m_forecastEndDate; }
+ bool skipOpeningDate(void) const { return m_skipOpeningDate; }
+ int historyMethod(void) const { return m_historyMethod; }
+ bool isIncludingUnusedAccounts(void) const { return m_includeUnusedAccounts; }
+ bool isForecastDone(void) const { return m_forecastDone; }
+ bool isIncludingFutureTransactions(void) const { return m_includeFutureTransactions; }
+ bool isIncludingScheduledTransactions(void) const { return m_includeScheduledTransactions; }
+
+ /**
+ * This method modifies a scheduled loan transaction such that all
+ * references to automatic calculated values are resolved to actual values.
+ *
+ * @param schedule const reference to the schedule the transaction is based on
+ * @param transaction reference to the transaction to be checked and modified
+ * @param balances QMap of (account-id,balance) pairs to be used as current balance
+ * for the calculation of interest. If map is empty, the engine
+ * will be interrogated for current balances.
+ */
+ static void calculateAutoLoan(const MyMoneySchedule& schedule, MyMoneyTransaction& transaction, const QMap<QString, MyMoneyMoney>& balances);
+
+private:
+
+ enum EForecastMethod {eScheduled = 0, eHistoric = 1 };
+
+ /**
+ * daily balances of an account
+ */
+ typedef QMap<QDate, MyMoneyMoney> dailyBalances;
+
+ /**
+ * map of trends of an account
+ */
+ typedef QMap<int, MyMoneyMoney> trendBalances;
+
+ /**
+ * Returns the list of accounts to be forecast. Only Asset and Liability are returned.
+ */
+ static QValueList<MyMoneyAccount> forecastAccountList(void);
+
+ /**
+ * Returns the list of accounts to create a budget. Only Income and Expenses are returned.
+ */
+ QValueList<MyMoneyAccount> budgetAccountList(void);
+
+ /**
+ * calculate daily forecast balance based on historic transactions
+ */
+ void calculateHistoricDailyBalances(void);
+
+ /**
+ * calculate monthly budget balance based on historic transactions
+ */
+ void calculateHistoricMonthlyBalances();
+
+ /**
+ * calculate monthly budget balance based on historic transactions
+ */
+ void calculateScheduledMonthlyBalances();
+
+ /**
+ * calculate forecast based on future and scheduled transactions
+ */
+ void doFutureScheduledForecast(void);
+
+ /**
+ * add future transactions to forecast
+ */
+ void addFutureTransactions(void);
+
+ /**
+ * add scheduled transactions to forecast
+ */
+ void addScheduledTransactions (void);
+
+ /**
+ * calculate daily forecast balance based on future and scheduled transactions
+ */
+ void calculateScheduledDailyBalances(void);
+
+ /**
+ * set the starting balance for an accounts
+ */
+ void setStartingBalance(const MyMoneyAccount& acc);
+
+ /**
+ * Returns the day moving average for the account @a acc based on the daily balances of a given number of @p forecastTerms
+ * It returns the moving average for a given @p trendDay of the forecastTerm
+ * With a term of 1 month and 3 terms, it calculates the trend taking the transactions occured
+ * at that day and the day before,for the last 3 months
+ */
+ MyMoneyMoney accountMovingAverage(const MyMoneyAccount& acc, const int trendDay, const int forecastTerms);
+
+ /**
+ * Returns the weighted moving average for a given @p trendDay
+ */
+ MyMoneyMoney accountWeightedMovingAverage(const MyMoneyAccount& acc, const int trendDay, const int totalWeight);
+
+ /**
+ * Returns the linear regression for a given @p trendDay
+ */
+ MyMoneyMoney accountLinearRegression(const MyMoneyAccount &acc, const int trendDay, const int totalWeight, const MyMoneyMoney meanTerms);
+
+ /**
+ * calculate daily forecast trend based on historic transactions
+ */
+ void calculateAccountTrendList(void);
+
+ /**
+ * set the internal list of accounts to be forecast
+ */
+ void setForecastAccountList(void);
+
+ /**
+ * set the internal list of accounts to create a budget
+ */
+ void setBudgetAccountList(void);
+
+ /**
+ * get past transactions for the accounts to be forecast
+ */
+ void pastTransactions(void);
+
+ /**
+ * calculate the day to start forecast and sets the begin date
+ * The quantity of forecast days will be counted from this date
+ * Depends on the values of begin day and accounts cycle
+ * The rules to calculate begin day are as follows:
+ * - if beginDay is 0, begin date is current date
+ * - if the day of the month set by beginDay has not passed, that will be used
+ * - if adding an account cycle to beginDay, will not go past the beginDay of next month,
+ * that date will be used, otherwise it will add account cycle to beginDay until it is past current date
+ * It returns the total amount of Forecast Days from current date.
+ */
+ int calculateBeginForecastDay();
+
+ /**
+ * remove accounts from the list if the accounts has no transactions in the forecast timeframe.
+ * Used for scheduled-forecast method.
+ */
+ void purgeForecastAccountsList(QMap<QString, dailyBalances>& accountList);
+
+ /**
+ * daily forecast balance of accounts
+ */
+ QMap<QString, dailyBalances> m_accountList;
+
+ /**
+ * daily past balance of accounts
+ */
+ QMap<QString, dailyBalances> m_accountListPast;
+
+ /**
+ * daily forecast trends of accounts
+ */
+ QMap<QString, trendBalances> m_accountTrendList;
+
+ /**
+ * list of forecast accounts
+ */
+ QMap<QString, QString> m_nameIdx;
+
+ /**
+ * cycle of accounts in days
+ */
+ int m_accountsCycle;
+
+ /**
+ * number of cycles to use in forecast
+ */
+ int m_forecastCycles;
+
+ /**
+ * number of days to forecast
+ */
+ int m_forecastDays;
+
+ /**
+ * date to start forecast
+ */
+ QDate m_beginForecastDate;
+
+ /**
+ * day to start forecast
+ */
+ int m_beginForecastDay;
+
+ /**
+ * forecast method
+ */
+ int m_forecastMethod;
+
+ /**
+ * history method
+ */
+ int m_historyMethod;
+
+ /**
+ * start date of history
+ */
+ QDate m_historyStartDate;
+
+ /**
+ * end date of history
+ */
+ QDate m_historyEndDate;
+
+ /**
+ * start date of forecast
+ */
+ QDate m_forecastStartDate;
+
+ /**
+ * end date of forecast
+ */
+ QDate m_forecastEndDate;
+
+ /**
+ * skip opening date when fetching transactions of an account
+ */
+ bool m_skipOpeningDate;
+
+ /**
+ * include accounts with no transactions in the forecast timeframe. default is false.
+ */
+ bool m_includeUnusedAccounts;
+
+ /**
+ * forecast already done
+ */
+ bool m_forecastDone;
+
+ /**
+ * include future transactions when doing a scheduled-based forecast
+ */
+ bool m_includeFutureTransactions;
+
+ /**
+ * include scheduled transactions when doing a scheduled-based forecast
+ */
+ bool m_includeScheduledTransactions;
+
+};
+
+#endif // MYMONEYFORECAST_H
+
diff --git a/kmymoney2/mymoney/mymoneyforecasttest.cpp b/kmymoney2/mymoney/mymoneyforecasttest.cpp
new file mode 100644
index 0000000..dbe96ac
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyforecasttest.cpp
@@ -0,0 +1,977 @@
+/***************************************************************************
+ mymoneyforecasttest.cpp
+ -------------------
+ copyright : (C) 2007 by Alvaro Soliverez
+ email : asoliverez@gmail.com
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "mymoneyforecasttest.h"
+
+#include <iostream>
+#include <qvaluelist.h>
+
+#include "mymoneybudget.h"
+
+#include <kmymoney/mymoneyexception.h>
+
+#include "../kmymoneyglobalsettings.h"
+#include "../mymoney/storage/mymoneystoragedump.h"
+#include "../mymoney/storage/mymoneystoragexml.h"
+#include "../reports/reportstestcommon.h"
+
+
+using namespace test;
+
+MyMoneyForecastTest::MyMoneyForecastTest()
+{
+ this->moT1 = MyMoneyMoney(57,1);
+ this->moT2 = MyMoneyMoney(63,1);
+ this->moT3 = MyMoneyMoney(84,1);
+ this->moT4 = MyMoneyMoney(62,1);
+ this->moT5 = MyMoneyMoney(104,1);
+}
+
+
+void MyMoneyForecastTest::setUp () {
+
+ //all this has been taken from pivottabletest.cpp, by Thomas Baumgart and Ace Jones
+
+ storage = new MyMoneySeqAccessMgr;
+ file = MyMoneyFile::instance();
+ file->attachStorage(storage);
+
+ MyMoneyFileTransaction ft;
+ file->addCurrency(MyMoneySecurity("CAD", "Canadian Dollar", "C$"));
+ file->addCurrency(MyMoneySecurity("USD", "US Dollar", "$"));
+ file->addCurrency(MyMoneySecurity("JPY", "Japanese Yen", QChar(0x00A5), 100, 1));
+ file->addCurrency(MyMoneySecurity("GBP", "British Pound", "#"));
+ file->setBaseCurrency(file->currency("USD"));
+
+ MyMoneyPayee payeeTest("Test Payee");
+ file->addPayee(payeeTest);
+ MyMoneyPayee payeeTest2("Alvaro Soliverez");
+ file->addPayee(payeeTest2);
+
+ acAsset = (MyMoneyFile::instance()->asset().id());
+ acLiability = (MyMoneyFile::instance()->liability().id());
+ acExpense = (MyMoneyFile::instance()->expense().id());
+ acIncome = (MyMoneyFile::instance()->income().id());
+ acChecking = makeAccount(QString("Checking Account"),MyMoneyAccount::Checkings,moCheckingOpen,QDate(2004,5,15),acAsset, "USD");
+ acCredit = makeAccount(QString("Credit Card"),MyMoneyAccount::CreditCard,moCreditOpen,QDate(2004,7,15),acLiability, "USD");
+ acSolo = makeAccount(QString("Solo"),MyMoneyAccount::Expense,0,QDate(2004,1,11),acExpense, "USD");
+ acParent = makeAccount(QString("Parent"),MyMoneyAccount::Expense,0,QDate(2004,1,11),acExpense, "USD");
+ acChild = makeAccount(QString("Child"),MyMoneyAccount::Expense,0,QDate(2004,2,11),acParent, "USD");
+ acForeign = makeAccount(QString("Foreign"),MyMoneyAccount::Expense,0,QDate(2004,1,11),acExpense, "USD");
+ acInvestment = makeAccount("Investment",MyMoneyAccount::Investment,moZero,QDate(2004,1,1),acAsset, "USD");
+
+ acSecondChild = makeAccount(QString("Second Child"),MyMoneyAccount::Expense,0,QDate(2004,2,11),acParent, "USD");
+ acGrandChild1 = makeAccount(QString("Grand Child 1"),MyMoneyAccount::Expense,0,QDate(2004,2,11),acChild, "USD");
+ acGrandChild2 = makeAccount(QString("Grand Child 2"),MyMoneyAccount::Expense,0,QDate(2004,2,11),acChild, "USD");
+
+ //this account added to have an account to test opening date calculations
+ acCash = makeAccount(QString("Cash"),MyMoneyAccount::Cash,moCreditOpen,QDate::currentDate().addDays(-2),acAsset, "USD");
+
+
+ MyMoneyInstitution i("Bank of the World","","","","","","");
+ file->addInstitution(i);
+ inBank = i.id();
+ ft.commit();
+
+}
+
+void MyMoneyForecastTest::tearDown () {
+ file->detachStorage(storage);
+ delete storage;
+}
+
+void MyMoneyForecastTest::testEmptyConstructor() {
+ MyMoneyForecast a;
+ MyMoneyAccount b;
+
+ int f = a.forecastBalance(b, QDate::currentDate());
+
+ CPPUNIT_ASSERT(f == 0);
+ CPPUNIT_ASSERT(!a.isForecastAccount(b));
+ CPPUNIT_ASSERT(a.forecastBalance(b, QDate::currentDate()) == MyMoneyMoney(0,1));
+ CPPUNIT_ASSERT(a.daysToMinimumBalance(b) == -1);
+ CPPUNIT_ASSERT(a.daysToZeroBalance(b) == -2);
+ CPPUNIT_ASSERT(a.forecastDays() == KMyMoneyGlobalSettings::forecastDays());
+ CPPUNIT_ASSERT(a.accountsCycle() == KMyMoneyGlobalSettings::forecastAccountCycle());
+ CPPUNIT_ASSERT(a.forecastCycles() == KMyMoneyGlobalSettings::forecastCycles());
+ CPPUNIT_ASSERT(a.historyStartDate() == QDate::currentDate().addDays(-KMyMoneyGlobalSettings::forecastCycles()*KMyMoneyGlobalSettings::forecastAccountCycle()));
+ CPPUNIT_ASSERT(a.historyEndDate() == QDate::currentDate().addDays(-1));
+ CPPUNIT_ASSERT(a.historyDays() == KMyMoneyGlobalSettings::forecastAccountCycle() * KMyMoneyGlobalSettings::forecastCycles());
+}
+
+
+void MyMoneyForecastTest::testDoForecastInit() {
+ MyMoneyForecast a;
+
+ a.doForecast();
+ /*
+ //check the illegal argument validation
+ try {
+ KMyMoneyGlobalSettings::setForecastDays(-10);
+ a.doForecast();
+ }
+ catch (MyMoneyException *e)
+ {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+ try {
+ KMyMoneyGlobalSettings::setForecastAccountCycle(-20);
+ a.doForecast();
+ }
+ catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+ try {
+ KMyMoneyGlobalSettings::setForecastCycles(-10);
+ a.doForecast();
+ }
+ catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ try {
+ KMyMoneyGlobalSettings::setForecastAccountCycle(0);
+ a.doForecast();
+ }
+ catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+ try {
+ KMyMoneyGlobalSettings::setForecastDays(0);
+ KMyMoneyGlobalSettings::setForecastCycles(0);
+ KMyMoneyGlobalSettings::setForecastAccountCycle(0);
+ a.doForecast();
+ }
+ catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_ASSERT("Unexpected exception");
+ }*/
+}
+
+//test that it forecasts correctly with transactions in the period of forecast
+void MyMoneyForecastTest::testDoForecast() {
+ //set up environment
+ MyMoneyForecast a;
+
+ MyMoneyAccount a_checking = file->account(acChecking);
+ MyMoneyAccount a_credit = file->account(acCredit);
+
+ //test empty forecast
+ a.doForecast(); //this is just to check nothing goes wrong if forecast is run agains an empty template
+
+ //setup some transactions
+ TransactionHelper t1( QDate::currentDate().addDays(-1), MyMoneySplit::ActionWithdrawal, this->moT1, acChecking, acSolo);
+ TransactionHelper t2( QDate::currentDate().addDays(-1), MyMoneySplit::ActionDeposit, -(this->moT2), acCredit, acParent);
+ TransactionHelper t3( QDate::currentDate().addDays(-1), MyMoneySplit::ActionTransfer, this->moT1, acCredit, acChecking);
+
+ a.setForecastMethod(1);
+ a.setForecastDays(3);
+ a.setAccountsCycle(1);
+ a.setForecastCycles(1);
+ a.setBeginForecastDay(0);
+ a.setHistoryMethod(0); //moving average
+ a.doForecast();
+
+ //checking didn't have balance variations, so the forecast should be equal to the current balance
+ MyMoneyMoney b_checking = file->balance(a_checking.id(), QDate::currentDate());
+
+ CPPUNIT_ASSERT(a.forecastBalance(a_checking, QDate::currentDate().addDays(1))==b_checking);
+ CPPUNIT_ASSERT(a.forecastBalance(a_checking, QDate::currentDate().addDays(2))==b_checking);
+ CPPUNIT_ASSERT(a.forecastBalance(a_checking, QDate::currentDate().addDays(3))==b_checking);
+ CPPUNIT_ASSERT(a.forecastBalance(a_checking, QDate::currentDate())==b_checking);
+ //credit had a variation so the forecast should be different for each day
+ MyMoneyMoney b_credit = file->balance(a_credit.id(), QDate::currentDate());
+
+ CPPUNIT_ASSERT(a.forecastBalance(a_credit, 0) == b_credit);
+ CPPUNIT_ASSERT(a.forecastBalance(a_credit, QDate::currentDate().addDays(1)) == (b_credit+(moT2-moT1)));
+ CPPUNIT_ASSERT(a.forecastBalance(a_credit, QDate::currentDate().addDays(2)) == (b_credit+((moT2-moT1)*2)));
+ CPPUNIT_ASSERT(a.forecastBalance(a_credit, QDate::currentDate().addDays(3)) == b_credit+((moT2-moT1)*3));
+
+ a.setHistoryMethod(1); //weighted moving average
+ a.doForecast();
+
+ CPPUNIT_ASSERT(a.forecastBalance(a_credit, 0) == b_credit);
+ CPPUNIT_ASSERT(a.forecastBalance(a_credit, QDate::currentDate().addDays(1)) == (b_credit+(moT2-moT1)));
+ CPPUNIT_ASSERT(a.forecastBalance(a_credit, QDate::currentDate().addDays(2)) == (b_credit+((moT2-moT1)*2)));
+ CPPUNIT_ASSERT(a.forecastBalance(a_credit, QDate::currentDate().addDays(3)) == b_credit+((moT2-moT1)*3));
+
+ //insert transactions outside the forecast period. The calculation should be the same.
+ TransactionHelper t4( QDate::currentDate().addDays(-2), MyMoneySplit::ActionDeposit, -moT2, acCredit, acParent );
+ TransactionHelper t5( QDate::currentDate().addDays(-10), MyMoneySplit::ActionDeposit, -moT2, acCredit, acParent );
+ TransactionHelper t6( QDate::currentDate().addDays(-3), MyMoneySplit::ActionDeposit, -moT2, acCredit, acParent );
+
+ a.setForecastMethod(1);
+ a.setForecastDays(3);
+ a.setAccountsCycle(1);
+ a.setForecastCycles(1);
+ a.setBeginForecastDay(0);
+ a.setHistoryMethod(0); //moving average
+ a.doForecast();
+ //check forecast
+ b_credit = file->balance(a_credit.id(), QDate::currentDate());
+ MyMoneyMoney b_credit_1_exp = (b_credit+((moT2-moT1)));
+ MyMoneyMoney b_credit_2 = a.forecastBalance(a_credit, QDate::currentDate().addDays(2));
+ MyMoneyMoney b_credit_2_exp = (b_credit+((moT2-moT1)*2));
+ CPPUNIT_ASSERT(a.forecastBalance(a_credit, QDate::currentDate())==file->balance(a_credit.id(), QDate::currentDate()));
+ CPPUNIT_ASSERT(a.forecastBalance(a_credit, QDate::currentDate().addDays(1))==b_credit+(moT2-moT1));
+ CPPUNIT_ASSERT(a.forecastBalance(a_credit, QDate::currentDate().addDays(2))==b_credit+((moT2-moT1)*2));
+ CPPUNIT_ASSERT(a.forecastBalance(a_credit, QDate::currentDate().addDays(3))==b_credit+((moT2-moT1)*3));
+
+ //test weighted moving average
+ a.setForecastMethod(1);
+ a.setForecastDays(3);
+ a.setAccountsCycle(1);
+ a.setForecastCycles(3);
+ a.setBeginForecastDay(0);
+ a.setHistoryMethod(1);
+ a.doForecast();
+
+ CPPUNIT_ASSERT(a.forecastBalance(a_credit, 0) == b_credit);
+ CPPUNIT_ASSERT(a.forecastBalance(a_credit, QDate::currentDate().addDays(1)) == (b_credit+(((moT2-moT1)*3+moT2*2+moT2)/MyMoneyMoney(6,1))));
+
+}
+
+void MyMoneyForecastTest::testGetForecastAccountList()
+{
+ MyMoneyForecast a;
+ MyMoneyAccount a_checking = file->account(acChecking);
+ MyMoneyAccount a_parent = file->account(acParent);
+ QValueList<MyMoneyAccount> b;
+
+ b = a.forecastAccountList();
+ //check that it contains asset account, but not expense accounts
+ CPPUNIT_ASSERT(b.contains(a_checking));
+ CPPUNIT_ASSERT(!b.contains(a_parent));
+
+}
+
+void MyMoneyForecastTest::testCalculateAccountTrend()
+{
+ //set up environment
+ TransactionHelper t1( QDate::currentDate().addDays(-3), MyMoneySplit::ActionDeposit, -moT2, acChecking, acSolo );
+ MyMoneyAccount a_checking = file->account(acChecking);
+
+ //test invalid arguments
+
+ try {
+ MyMoneyForecast::calculateAccountTrend(a_checking, 0);
+ }
+ catch (MyMoneyException *e) {
+ CPPUNIT_ASSERT(e->what().compare("Illegal arguments when calling calculateAccountTrend. trendDays must be higher than 0") == 0);
+ delete e;
+ }
+ try {
+ MyMoneyForecast::calculateAccountTrend(a_checking, -10);
+ }
+ catch (MyMoneyException *e) {
+ CPPUNIT_ASSERT(e->what().compare("Illegal arguments when calling calculateAccountTrend. trendDays must be higher than 0") == 0);
+ delete e;
+ }
+
+ //test that it calculates correctly
+ CPPUNIT_ASSERT(MyMoneyForecast::calculateAccountTrend(a_checking ,3) == moT2/MyMoneyMoney(3,1));
+
+ //test that it works for all kind of accounts
+ MyMoneyAccount a_solo = file->account(acSolo);
+ MyMoneyMoney soloTrend = MyMoneyForecast::calculateAccountTrend(a_solo,3);
+ MyMoneyMoney soloTrendExp = -moT2/MyMoneyMoney(3,1);
+ CPPUNIT_ASSERT(MyMoneyForecast::calculateAccountTrend(a_solo,3) == -moT2/MyMoneyMoney(3,1));
+
+ //test that it does not take into account the transactions of the opening date of the account
+ MyMoneyAccount a_cash = file->account(acCash);
+ TransactionHelper t2( QDate::currentDate().addDays(-2), MyMoneySplit::ActionDeposit, moT2, acCash, acParent );
+ TransactionHelper t3( QDate::currentDate().addDays(-1), MyMoneySplit::ActionDeposit, moT1, acCash, acParent );
+ CPPUNIT_ASSERT(MyMoneyForecast::calculateAccountTrend(a_cash,3) == -moT1);
+
+}
+
+void MyMoneyForecastTest::testGetForecastBalance()
+{
+ //set up environment
+ MyMoneyForecast a;
+
+ TransactionHelper t1( QDate::currentDate().addDays(-1), MyMoneySplit::ActionWithdrawal, this->moT1, acChecking, acSolo);
+ TransactionHelper t2( QDate::currentDate().addDays(-1), MyMoneySplit::ActionDeposit, -(this->moT2), acCredit, acParent);
+ TransactionHelper t3( QDate::currentDate().addDays(-1), MyMoneySplit::ActionTransfer, this->moT1, acCredit, acChecking);
+
+ a.setForecastMethod(1);
+ a.setForecastDays(3);
+ a.setAccountsCycle(1);
+ a.setForecastCycles(1);
+ a.setHistoryMethod(0);
+ a.doForecast();
+
+ MyMoneyAccount a_checking = file->account(acChecking);
+ MyMoneyAccount a_credit = file->account(acCredit);
+
+ //test invalid arguments
+ CPPUNIT_ASSERT(a.forecastBalance(a_checking, QDate::currentDate().addDays(-1))==MyMoneyMoney(0,1));
+ CPPUNIT_ASSERT(a.forecastBalance(a_checking, QDate::currentDate().addDays(-10))==MyMoneyMoney(0,1));
+ CPPUNIT_ASSERT(a.forecastBalance(a_checking, -1)==MyMoneyMoney(0,1));
+ CPPUNIT_ASSERT(a.forecastBalance(a_checking, -100)==MyMoneyMoney(0,1));
+
+ //test a date outside the forecast days
+ CPPUNIT_ASSERT(a.forecastBalance(a_checking, QDate::currentDate().addDays(4))==MyMoneyMoney(0,1));
+ CPPUNIT_ASSERT(a.forecastBalance(a_checking, 4)==MyMoneyMoney(0,1));
+ CPPUNIT_ASSERT(a.forecastBalance(a_checking, QDate::currentDate().addDays(10))==MyMoneyMoney(0,1));
+ CPPUNIT_ASSERT(a.forecastBalance(a_checking, 10)==MyMoneyMoney(0,1));
+
+ //test it returns valid results
+ MyMoneyMoney b_credit = file->balance(a_credit.id(), QDate::currentDate());
+ CPPUNIT_ASSERT(a.forecastBalance(a_credit, QDate::currentDate())==file->balance(a_credit.id(), QDate::currentDate()));
+ CPPUNIT_ASSERT(a.forecastBalance(a_credit, QDate::currentDate().addDays(1))==b_credit+(moT2-moT1));
+ CPPUNIT_ASSERT(a.forecastBalance(a_credit, QDate::currentDate().addDays(2))==b_credit+((moT2-moT1)*2));
+ CPPUNIT_ASSERT(a.forecastBalance(a_credit, QDate::currentDate().addDays(3))==b_credit+((moT2-moT1)*3));
+}
+
+void MyMoneyForecastTest::testIsForecastAccount()
+{
+ MyMoneyForecast a;
+
+ MyMoneyAccount a_checking = file->account(acChecking);
+ MyMoneyAccount a_solo = file->account(acSolo);
+ MyMoneyAccount a_investment = file->account(acInvestment);
+
+ //test an invalid account
+ CPPUNIT_ASSERT(a.isForecastAccount(a_solo)==false);
+ CPPUNIT_ASSERT(a.isForecastAccount(a_investment)==true);
+
+ //test a valid account
+ CPPUNIT_ASSERT(a.isForecastAccount(a_checking)==true);
+
+}
+
+void MyMoneyForecastTest::testDoFutureScheduledForecast()
+{
+ //set up future transactions
+ MyMoneyForecast a;
+
+ MyMoneyAccount a_cash = file->account(acCash);
+ TransactionHelper t1( QDate::currentDate().addDays(1), MyMoneySplit::ActionDeposit, -moT1, acCash, acParent );
+ TransactionHelper t2( QDate::currentDate().addDays(2), MyMoneySplit::ActionDeposit, -moT2, acCash, acParent );
+ TransactionHelper t3( QDate::currentDate().addDays(3), MyMoneySplit::ActionDeposit, -moT3, acCash, acParent );
+ TransactionHelper t4( QDate::currentDate().addDays(10), MyMoneySplit::ActionDeposit, -moT4, acCash, acParent );
+
+ a.setForecastMethod(0);
+ a.setForecastDays(3);
+ a.setAccountsCycle(1);
+ a.setForecastCycles(1);
+ a.doForecast();
+
+ MyMoneyMoney b_cash = file->balance(a_cash.id(), QDate::currentDate());
+
+ //test valid results
+ CPPUNIT_ASSERT(a.forecastBalance(a_cash, QDate::currentDate())==b_cash);
+ CPPUNIT_ASSERT(a.forecastBalance(a_cash, QDate::currentDate().addDays(1))==b_cash+moT1);
+ CPPUNIT_ASSERT(a.forecastBalance(a_cash, QDate::currentDate().addDays(2))==b_cash+moT1+moT2);
+ CPPUNIT_ASSERT(a.forecastBalance(a_cash, QDate::currentDate().addDays(3))==b_cash+moT1+moT2+moT3);
+}
+
+void MyMoneyForecastTest::testScheduleForecast()
+{
+ //set up schedule environment for testing
+ MyMoneyAccount a_cash = file->account(acCash);
+ MyMoneyAccount a_parent = file->account(acParent);
+
+ MyMoneyFileTransaction ft;
+ MyMoneySchedule sch( "A Name",
+ MyMoneySchedule::TYPE_BILL,
+ MyMoneySchedule::OCCUR_WEEKLY, 1,
+ MyMoneySchedule::STYPE_DIRECTDEBIT,
+ QDate::currentDate().addDays(1),
+ QDate(),
+ true,
+ true);
+
+ MyMoneyTransaction t;
+ t.setPostDate(QDate::currentDate().addDays(1));
+ t.setEntryDate(QDate::currentDate().addDays(1));
+ //t.setId("T000000000000000001");
+ t.setBankID("BID");
+ t.setMemo("Wohnung:Miete");
+ t.setCommodity("USD");
+ t.setValue("key", "value");
+
+ MyMoneySplit s;
+ s.setPayeeId("P000001");
+ s.setShares(moT2);
+ s.setValue(moT2);
+ s.setAccountId(a_parent.id());
+ s.setBankID("SPID1");
+ s.setReconcileFlag(MyMoneySplit::Reconciled);
+ t.addSplit(s);
+
+ s.setPayeeId("P000001");
+ s.setShares(-moT2);
+ s.setValue(-moT2);
+ s.setAccountId(a_cash.id());
+ s.setBankID("SPID2");
+ s.setReconcileFlag(MyMoneySplit::Cleared);
+ s.clearId();
+ t.addSplit(s);
+
+ sch.setTransaction(t);
+
+ file->addSchedule(sch);
+ ft.commit();
+
+ MyMoneyFileTransaction ft3;
+ MyMoneySchedule sch3( "A Name1",
+ MyMoneySchedule::TYPE_BILL,
+ MyMoneySchedule::OCCUR_WEEKLY, 1,
+ MyMoneySchedule::STYPE_DIRECTDEBIT,
+ QDate::currentDate().addDays(5),
+ QDate(),
+ true,
+ true);
+
+ //sch.setLastPayment(QDate::currentDate());
+ //sch.recordPayment(QDate::currentDate().addDays(1));
+ //sch.setId("SCH0001");
+
+ MyMoneyTransaction t3;
+ t3.setPostDate(QDate::currentDate().addDays(5));
+ t3.setEntryDate(QDate::currentDate().addDays(5));
+ //t.setId("T000000000000000001");
+ t3.setBankID("BID");
+ t3.setMemo("Wohnung:Miete");
+ t3.setCommodity("USD");
+ t3.setValue("key", "value");
+
+ MyMoneySplit s3;
+ s3.setPayeeId("P000001");
+ s3.setShares(moT2);
+ s3.setValue(moT2);
+ s3.setAccountId(a_parent.id());
+ s3.setBankID("SPID1");
+ s3.setReconcileFlag(MyMoneySplit::Reconciled);
+ t3.addSplit(s3);
+
+ s3.setPayeeId("P000001");
+ s3.setShares(-moT2);
+ s3.setValue(-moT2);
+ s3.setAccountId(a_cash.id());
+ s3.setBankID("SPID2");
+ s3.setReconcileFlag(MyMoneySplit::Cleared);
+ s3.clearId();
+ t3.addSplit(s3);
+
+ sch3.setTransaction(t3);
+
+ file->addSchedule(sch3);
+ ft3.commit();
+
+
+ MyMoneyFileTransaction ft2;
+ MyMoneySchedule sch2( "A Name2",
+ MyMoneySchedule::TYPE_BILL,
+ MyMoneySchedule::OCCUR_WEEKLY, 1,
+ MyMoneySchedule::STYPE_DIRECTDEBIT,
+ QDate::currentDate().addDays(2),
+ QDate(),
+ true,
+ true);
+
+ //sch.setLastPayment(QDate::currentDate());
+ //sch.recordPayment(QDate::currentDate().addDays(1));
+ //sch.setId("SCH0001");
+
+ MyMoneyTransaction t2;
+ t2.setPostDate(QDate::currentDate().addDays(2));
+ t2.setEntryDate(QDate::currentDate().addDays(2));
+ //t.setId("T000000000000000001");
+ t2.setBankID("BID");
+ t2.setMemo("Wohnung:Miete");
+ t2.setCommodity("USD");
+ t2.setValue("key", "value");
+
+ MyMoneySplit s2;
+ s2.setPayeeId("P000001");
+ s2.setShares(moT1);
+ s2.setValue(moT1);
+ s2.setAccountId(a_parent.id());
+ s2.setBankID("SPID1");
+ s2.setReconcileFlag(MyMoneySplit::Reconciled);
+ t2.addSplit(s2);
+
+ s2.setPayeeId("P000001");
+ s2.setShares(-moT1);
+ s2.setValue(-moT1);
+ s2.setAccountId(a_cash.id());
+ s2.setBankID("SPID2");
+ s2.setReconcileFlag(MyMoneySplit::Cleared);
+ s2.clearId();
+ t2.addSplit(s2);
+
+ sch2.setTransaction(t2);
+
+ file->addSchedule(sch2);
+
+ ft2.commit();
+
+ //run forecast
+ MyMoneyForecast a;
+ a.setForecastMethod(0);
+ a.setForecastDays(3);
+ a.setAccountsCycle(1);
+ a.setForecastCycles(1);
+ a.doForecast();
+
+ //check result for single schedule
+ MyMoneyMoney b_cash = file->balance(a_cash.id(), QDate::currentDate());
+ MyMoneyMoney b_cash1 = a.forecastBalance(a_cash, QDate::currentDate().addDays(1));
+
+ //test valid results
+ CPPUNIT_ASSERT(a.forecastBalance(a_cash, QDate::currentDate())==b_cash);
+ CPPUNIT_ASSERT(a.forecastBalance(a_cash, QDate::currentDate().addDays(1))==b_cash-moT2);
+ CPPUNIT_ASSERT(a.forecastBalance(a_cash, QDate::currentDate().addDays(2))==b_cash-moT2-moT1);
+}
+
+
+void MyMoneyForecastTest::testDaysToMinimumBalance()
+{
+ //setup environment
+ MyMoneyForecast a;
+
+ MyMoneyAccount a_cash = file->account(acCash);
+ MyMoneyAccount a_credit = file->account(acCredit);
+ MyMoneyAccount a_parent = file->account(acParent);
+ a_cash.setValue("minBalanceAbsolute", "50");
+ a_credit.setValue("minBalanceAbsolute", "50");
+ TransactionHelper t1( QDate::currentDate().addDays(-1), MyMoneySplit::ActionDeposit, -moT1, acCash, acParent );
+ TransactionHelper t2( QDate::currentDate().addDays(2), MyMoneySplit::ActionDeposit, moT2, acCash, acParent );
+ TransactionHelper t3( QDate::currentDate().addDays(-1), MyMoneySplit::ActionWithdrawal, -moT1, acCredit, acParent );
+ TransactionHelper t4( QDate::currentDate().addDays(4), MyMoneySplit::ActionWithdrawal, moT5, acCredit, acParent );
+
+ a.setForecastMethod(0);
+ a.setForecastDays(3);
+ a.setAccountsCycle(1);
+ a.setForecastCycles(1);
+ a.setBeginForecastDay(0);
+ a.doForecast();
+
+ //test invalid arguments
+ MyMoneyAccount nullAcc;
+ CPPUNIT_ASSERT(a.daysToMinimumBalance(nullAcc) == -1);
+
+ //test when not a forecast account
+ CPPUNIT_ASSERT(a.daysToMinimumBalance(a_parent) == -1);
+
+ //test it warns when inside the forecast period
+ CPPUNIT_ASSERT(a.daysToMinimumBalance(a_cash) == 2);
+
+ //test it does not warn when it will be outside of the forecast period
+ CPPUNIT_ASSERT(a.daysToMinimumBalance(a_credit) == -1);
+}
+void MyMoneyForecastTest::testDaysToZeroBalance()
+{
+ //set up environment
+ MyMoneyAccount a_Solo = file->account(acSolo);
+ MyMoneyAccount a_Cash = file->account(acCash);
+ MyMoneyAccount a_Credit = file->account(acCredit);
+
+ //MyMoneyFileTransaction ft;
+ TransactionHelper t1( QDate::currentDate().addDays(2), MyMoneySplit::ActionWithdrawal, -moT1, acChecking, acSolo );
+ TransactionHelper t2( QDate::currentDate().addDays(2), MyMoneySplit::ActionTransfer, (moT5), acCash, acCredit );
+ TransactionHelper t3( QDate::currentDate().addDays(2), MyMoneySplit::ActionWithdrawal, (moT5*100), acCredit, acParent );
+ //ft.commit();
+
+ MyMoneyForecast a;
+ a.setForecastMethod(0);
+ a.setForecastDays(30);
+ a.setAccountsCycle(1);
+ a.setForecastCycles(3);
+ a.doForecast();
+
+ //test invalid arguments
+ MyMoneyAccount nullAcc;
+ try {
+ a.daysToZeroBalance(nullAcc);
+ }
+ catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ //test when not a forecast account
+ MyMoneyAccount a_solo = file->account(acSolo);
+ int iSolo = a.daysToZeroBalance(a_Solo);
+
+ CPPUNIT_ASSERT(iSolo == -2);
+
+ //test it warns when inside the forecast period
+
+ MyMoneyMoney fCash = a.forecastBalance(a_Cash, QDate::currentDate().addDays(2));
+
+ CPPUNIT_ASSERT(a.daysToZeroBalance(a_Cash) == 2);
+
+ //test it does not warn when it will be outside of the forecast period
+
+}
+
+void MyMoneyForecastTest::testSkipOpeningDate()
+{
+ //set up environment
+ MyMoneyForecast a;
+
+ TransactionHelper t1( QDate::currentDate().addDays(-2), MyMoneySplit::ActionWithdrawal, this->moT1, acCash, acSolo);
+ TransactionHelper t2( QDate::currentDate().addDays(-1), MyMoneySplit::ActionWithdrawal, this->moT2, acCash, acSolo);
+
+ a.setForecastMethod(1);
+ a.setForecastDays(3);
+ a.setAccountsCycle(2);
+ a.setForecastCycles(1);
+ a.setHistoryMethod(0);
+ a.doForecast();
+
+ MyMoneyAccount a_cash = file->account(acCash);
+
+ //test it has no variation because it skipped the variation of the opening date
+ MyMoneyMoney b_cash = file->balance(a_cash.id(), QDate::currentDate());
+ CPPUNIT_ASSERT(a.skipOpeningDate() == true);
+ CPPUNIT_ASSERT(a.forecastBalance(a_cash, QDate::currentDate())==b_cash);
+ CPPUNIT_ASSERT(a.forecastBalance(a_cash, QDate::currentDate().addDays(1))==b_cash);
+ CPPUNIT_ASSERT(a.forecastBalance(a_cash, QDate::currentDate().addDays(2))==b_cash-moT2);
+ CPPUNIT_ASSERT(a.forecastBalance(a_cash, QDate::currentDate().addDays(3))==b_cash-moT2);
+}
+
+void MyMoneyForecastTest::testAccountMinimumBalanceDateList() {
+
+ //set up environment
+ MyMoneyForecast a;
+
+ TransactionHelper t1( QDate::currentDate().addDays(-2), MyMoneySplit::ActionWithdrawal, this->moT1, acCash, acSolo);
+ TransactionHelper t2( QDate::currentDate().addDays(-1), MyMoneySplit::ActionWithdrawal, this->moT2, acCash, acSolo);
+
+ a.setForecastMethod(1);
+ a.setForecastDays(6);
+ a.setAccountsCycle(2);
+ a.setForecastCycles(3);
+ a.setHistoryMethod(0);
+ a.setBeginForecastDay(QDate::currentDate().addDays(1).day());
+ a.doForecast();
+
+ MyMoneyAccount a_cash = file->account(acCash);
+
+ //test
+ QValueList<QDate> dateList;
+ dateList = a.accountMinimumBalanceDateList(a_cash);
+
+ QValueList<QDate>::iterator it = dateList.begin();
+
+ QDate minDate = *it;
+
+ CPPUNIT_ASSERT(minDate==QDate::currentDate().addDays(2));
+ it++;
+ minDate = *it;
+ CPPUNIT_ASSERT(minDate==QDate::currentDate().addDays(4));
+ it++;
+ minDate = *it;
+ CPPUNIT_ASSERT(minDate==QDate::currentDate().addDays(6));
+
+}
+
+void MyMoneyForecastTest::testAccountMaximumBalanceDateList() {
+ //set up environment
+ MyMoneyForecast a;
+
+ TransactionHelper t1( QDate::currentDate().addDays(-2), MyMoneySplit::ActionWithdrawal, this->moT1, acCash, acSolo);
+ TransactionHelper t2( QDate::currentDate().addDays(-1), MyMoneySplit::ActionWithdrawal, this->moT2, acCash, acSolo);
+
+ a.setForecastMethod(1);
+ a.setForecastDays(6);
+ a.setAccountsCycle(2);
+ a.setForecastCycles(3);
+ a.setHistoryMethod(0);
+ a.setBeginForecastDay(QDate::currentDate().addDays(1).day());
+ a.doForecast();
+
+ MyMoneyAccount a_cash = file->account(acCash);
+
+ //test
+ QValueList<QDate> dateList;
+ dateList = a.accountMaximumBalanceDateList(a_cash);
+
+ QValueList<QDate>::iterator it = dateList.begin();
+
+ QDate maxDate = *it;
+
+ CPPUNIT_ASSERT(maxDate==QDate::currentDate().addDays(1));
+ it++;
+ maxDate = *it;
+ CPPUNIT_ASSERT(maxDate==QDate::currentDate().addDays(3));
+ it++;
+ maxDate = *it;
+ CPPUNIT_ASSERT(maxDate==QDate::currentDate().addDays(5));
+
+
+}
+
+void MyMoneyForecastTest::testAccountAverageBalance() {
+ //set up environment
+ MyMoneyForecast a;
+
+ TransactionHelper t1( QDate::currentDate().addDays(-2), MyMoneySplit::ActionWithdrawal, this->moT1, acCash, acSolo);
+ TransactionHelper t2( QDate::currentDate().addDays(-1), MyMoneySplit::ActionWithdrawal, this->moT2, acCash, acSolo);
+
+ a.setForecastMethod(1);
+ a.setForecastDays(3);
+ a.setAccountsCycle(2);
+ a.setForecastCycles(1);
+ a.setBeginForecastDay(0);
+ a.doForecast();
+
+ MyMoneyAccount a_cash = file->account(acCash);
+
+ //test
+ MyMoneyMoney b_cash1 = a.forecastBalance(a_cash, QDate::currentDate().addDays(1));
+ MyMoneyMoney b_cash2 = a.forecastBalance(a_cash, QDate::currentDate().addDays(2));
+ MyMoneyMoney b_cash3 = a.forecastBalance(a_cash, QDate::currentDate().addDays(3));
+
+ MyMoneyMoney average = (b_cash1 + b_cash2 +b_cash3)/MyMoneyMoney(3,1);
+
+
+ CPPUNIT_ASSERT(a.accountAverageBalance(a_cash)==average);
+}
+
+void MyMoneyForecastTest::testBeginForecastDate() {
+ //set up environment
+ MyMoneyForecast a;
+ QDate beginDate;
+ int beginDay;
+
+ a.setForecastMethod(1);
+ a.setForecastDays(90);
+ a.setAccountsCycle(14);
+ a.setForecastCycles(3);
+ a.setBeginForecastDay(0);
+ a.doForecast();
+
+ //test when using old method without begin day
+ CPPUNIT_ASSERT(QDate::currentDate() == a.beginForecastDate());
+
+ //setup begin to last day of month
+ a.setBeginForecastDay(31);
+ beginDay = a.beginForecastDay();
+ a.doForecast();
+
+ //test
+ if(QDate::currentDate().day() < beginDay)
+ {
+ if(QDate::currentDate().daysInMonth() < beginDay)
+ beginDay = QDate::currentDate().daysInMonth();
+
+ beginDate = QDate(QDate::currentDate().year(), QDate::currentDate().month(), beginDay);
+
+ CPPUNIT_ASSERT(beginDate == a.beginForecastDate());
+ }
+
+ //setup begin day to same date
+ a.setBeginForecastDay(QDate::currentDate().day());
+ beginDay = a.beginForecastDay();
+ a.doForecast();
+
+ CPPUNIT_ASSERT(QDate::currentDate() == a.beginForecastDate());
+
+ //setup to first day of month with small interval
+ a.setBeginForecastDay(1);
+ a.setAccountsCycle(1);
+ beginDay = a.beginForecastDay();
+ a.doForecast();
+
+ //test
+ if(QDate::currentDate() == a.beginForecastDate()) {
+ CPPUNIT_ASSERT(QDate::currentDate() == a.beginForecastDate());
+ } else {
+ beginDay = ((((QDate::currentDate().day() - beginDay)/a.accountsCycle()) + 1) * a.accountsCycle()) + beginDay;
+ if(beginDay > QDate::currentDate().daysInMonth())
+ beginDay = QDate::currentDate().daysInMonth();
+ beginDate = QDate(QDate::currentDate().year(), QDate::currentDate().month(), beginDay);
+ if(QDate::currentDate().day() == QDate::currentDate().daysInMonth() ) {
+ std::cout << std::endl << "testBeginForecastDate(): test of first day of month with small interval skipped because it is the last day of month" << std::endl;
+ } else {
+ CPPUNIT_ASSERT(beginDate == a.beginForecastDate());
+ }
+ }
+
+ //setup to test when current date plus cycle equals begin day
+ a.setAccountsCycle(14);
+ beginDay = QDate::currentDate().addDays(14).day();
+ a.setBeginForecastDay(beginDay);
+ beginDate = QDate::currentDate().addDays(14);
+ a.doForecast();
+
+ //test
+ CPPUNIT_ASSERT(beginDate == a.beginForecastDate());
+
+ //setup to test when the begin day will be next month
+ a.setBeginForecastDay(1);
+ a.setAccountsCycle(40);
+ a.doForecast();
+
+ beginDate = QDate(QDate::currentDate().addMonths(1).year(), QDate::currentDate().addMonths(1).month(), 1);
+
+ //test
+ if(QDate::currentDate().day() > 1) {
+ CPPUNIT_ASSERT(beginDate == a.beginForecastDate());
+ } else {
+ //test is not valid if today is 1st of month
+ std::cout << std::endl << "testBeginForecastDate(): test of first day of month skipped because current day is 1st of month" << std::endl;
+ }
+}
+
+ void MyMoneyForecastTest::testHistoryDays(void)
+{
+ MyMoneyForecast a;
+
+ CPPUNIT_ASSERT(a.historyStartDate() == QDate::currentDate().addDays(-a.forecastCycles()*a.accountsCycle()) );
+ CPPUNIT_ASSERT(a.historyEndDate() == QDate::currentDate().addDays(-1) );
+ CPPUNIT_ASSERT(a.historyDays() == a.forecastCycles()*a.accountsCycle());
+
+ a.setForecastMethod(1);
+ a.setForecastDays(90);
+ a.setAccountsCycle(14);
+ a.setForecastCycles(3);
+ a.setBeginForecastDay(0);
+ a.doForecast();
+
+ CPPUNIT_ASSERT(a.historyStartDate() == QDate::currentDate().addDays(-14*3) );
+ CPPUNIT_ASSERT(a.historyDays() == (14*3));
+ CPPUNIT_ASSERT(a.historyEndDate() == (QDate::currentDate().addDays(-1)) );
+}
+
+void MyMoneyForecastTest::testCreateBudget()
+{
+ //set up environment
+ MyMoneyForecast a;
+ MyMoneyForecast b;
+ MyMoneyBudget budget;
+
+ TransactionHelper t1( QDate(2005, 1, 3), MyMoneySplit::ActionWithdrawal, this->moT1, acCash, acSolo);
+ TransactionHelper t2( QDate(2005, 1, 15), MyMoneySplit::ActionWithdrawal, this->moT2, acCash, acParent);
+ TransactionHelper t3( QDate(2005, 1, 30), MyMoneySplit::ActionWithdrawal, this->moT3, acCash, acSolo);
+ TransactionHelper t4( QDate(2006, 1, 25), MyMoneySplit::ActionWithdrawal, this->moT4, acCash, acParent);
+ TransactionHelper t5( QDate(2005, 4, 3), MyMoneySplit::ActionWithdrawal, this->moT1, acCash, acSolo);
+ TransactionHelper t6( QDate(2006, 5, 15), MyMoneySplit::ActionWithdrawal, this->moT2, acCash, acParent);
+ TransactionHelper t7( QDate(2005, 8, 3), MyMoneySplit::ActionWithdrawal, this->moT3, acCash, acSolo);
+ TransactionHelper t8( QDate(2006, 9, 15), MyMoneySplit::ActionWithdrawal, this->moT4, acCash, acParent);
+
+ a.setHistoryMethod(0);
+ a.setForecastMethod(1);
+ a.createBudget(budget, QDate(2005, 1, 1), QDate(2006, 12, 31), QDate(2007, 1, 1), QDate(2007, 12, 31), true);
+
+ //test
+ MyMoneyAccount a_solo = file->account(acSolo);
+ MyMoneyAccount a_parent = file->account(acParent);
+
+ //test it has no variation because it skipped the variation of the opening date
+ CPPUNIT_ASSERT(a.forecastBalance(a_solo, QDate(2007, 1, 1)) == ((moT1+moT3)/MyMoneyMoney(2, 1)));
+ CPPUNIT_ASSERT(a.forecastBalance(a_parent, QDate(2007, 1, 1)) == ((moT2+moT4)/MyMoneyMoney(2, 1)));
+ CPPUNIT_ASSERT(a.forecastBalance(a_solo, QDate(2007, 4, 1)) == ((moT1)/MyMoneyMoney(2, 1)));
+ CPPUNIT_ASSERT(a.forecastBalance(a_parent, QDate(2007, 5, 1)) == ((moT2)/MyMoneyMoney(2, 1)));
+ CPPUNIT_ASSERT(a.forecastBalance(a_solo, QDate(2007, 8, 1)) == ((moT3)/MyMoneyMoney(2, 1)));
+ CPPUNIT_ASSERT(a.forecastBalance(a_parent, QDate(2007, 9, 1)) == ((moT4)/MyMoneyMoney(2, 1)));
+ //test the budget object returned by the method
+ CPPUNIT_ASSERT(budget.account(a_parent.id()).period(QDate(2007, 9, 1)).amount() == ((moT4)/MyMoneyMoney(2, 1)));
+
+ //setup test for a length lower than a year
+ b.setForecastMethod(1);
+ b.setHistoryMethod(0);
+ b.createBudget(budget, QDate(2005, 1, 1), QDate(2005, 6, 30), QDate(2007, 1, 1), QDate(2007, 6, 30), true);
+
+ //test
+ CPPUNIT_ASSERT(b.forecastBalance(a_solo, QDate(2007, 1, 1)) == (moT1+moT3));
+ CPPUNIT_ASSERT(b.forecastBalance(a_parent, QDate(2007, 1, 1)) == (moT2));
+ CPPUNIT_ASSERT(b.forecastBalance(a_solo, QDate(2007, 4, 1)) == (moT1));
+ CPPUNIT_ASSERT(b.forecastBalance(a_parent, QDate(2007, 5, 1)) == (MyMoneyMoney(0, 1)));
+
+ //set up schedule environment for testing
+ MyMoneyAccount a_cash = file->account(acCash);
+
+ MyMoneyFileTransaction ft;
+ MyMoneySchedule sch( "A Name",
+ MyMoneySchedule::TYPE_BILL,
+ MyMoneySchedule::OCCUR_MONTHLY, 1,
+ MyMoneySchedule::STYPE_DIRECTDEBIT,
+ QDate::currentDate(),
+ QDate(),
+ true,
+ true);
+
+ MyMoneyTransaction t10;
+ t10.setPostDate(QDate::currentDate().addMonths(1));
+ t10.setEntryDate(QDate::currentDate().addMonths(1));
+ //t.setId("T000000000000000001");
+ t10.setBankID("BID");
+ t10.setMemo("Wohnung:Miete");
+ t10.setCommodity("USD");
+ t10.setValue("key", "value");
+
+ MyMoneySplit s;
+ s.setPayeeId("P000001");
+ s.setShares(moT2);
+ s.setValue(moT2);
+ s.setAccountId(a_parent.id());
+ s.setBankID("SPID1");
+ s.setReconcileFlag(MyMoneySplit::Reconciled);
+ t10.addSplit(s);
+
+ s.setPayeeId("P000001");
+ s.setShares(-moT2);
+ s.setValue(-moT2);
+ s.setAccountId(a_cash.id());
+ s.setBankID("SPID2");
+ s.setReconcileFlag(MyMoneySplit::Cleared);
+ s.clearId();
+ t10.addSplit(s);
+
+ sch.setTransaction(t10);
+
+ file->addSchedule(sch);
+ ft.commit();
+
+ //run forecast
+ MyMoneyForecast c;
+ c.setForecastMethod(0);
+ c.setForecastCycles(1);
+ c.createBudget(budget, QDate::currentDate().addYears(-2), QDate::currentDate().addYears(-1), QDate::currentDate().addMonths(-2), QDate::currentDate().addMonths(6), true);
+
+ MyMoneyMoney c_parent = c.forecastBalance(a_parent, QDate(QDate::currentDate().addMonths(1).year(), QDate::currentDate().addMonths(1).month(), 1) );
+
+ //test valid results
+ CPPUNIT_ASSERT(c.forecastBalance(a_parent, QDate(QDate::currentDate().addMonths(1).year(), QDate::currentDate().addMonths(1).month(), 1) ) == (moT2));
+}
+
+void MyMoneyForecastTest::testLinearRegression() {
+ //set up environment
+ MyMoneyForecast a;
+
+ MyMoneyAccount a_checking = file->account(acChecking);
+ MyMoneyAccount a_credit = file->account(acCredit);
+
+ //setup some transactions
+ TransactionHelper t1( QDate::currentDate().addDays(-1), MyMoneySplit::ActionWithdrawal, this->moT1, acChecking, acSolo);
+ TransactionHelper t2( QDate::currentDate().addDays(-1), MyMoneySplit::ActionDeposit, -(this->moT2), acCredit, acParent);
+ TransactionHelper t3( QDate::currentDate().addDays(-1), MyMoneySplit::ActionTransfer, this->moT1, acCredit, acChecking);
+
+//TODO Add tests specific for linear regression
+
+
+}
diff --git a/kmymoney2/mymoney/mymoneyforecasttest.h b/kmymoney2/mymoney/mymoneyforecasttest.h
new file mode 100644
index 0000000..9ec2ae9
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyforecasttest.h
@@ -0,0 +1,96 @@
+/***************************************************************************
+ mymoneyforecasttest.h
+ -------------------
+ copyright : (C) 2007 by Alvaro Soliverez
+ email : asoliverez@gmail.com
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef __MYMONEYFORECASTTEST_H__
+#define __MYMONEYFORECASTTEST_H__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include "../mymoney/mymoneyfile.h"
+#include "../mymoney/storage/mymoneyseqaccessmgr.h"
+
+#define private public
+#include "mymoneyforecast.h"
+#undef private
+
+
+class MyMoneyForecastTest : public CppUnit::TestFixture
+{
+ CPPUNIT_TEST_SUITE ( MyMoneyForecastTest );
+ CPPUNIT_TEST ( testEmptyConstructor );
+ CPPUNIT_TEST ( testDoForecast );
+ CPPUNIT_TEST ( testDoForecastInit );
+ CPPUNIT_TEST ( testGetForecastAccountList );
+ CPPUNIT_TEST ( testCalculateAccountTrend );
+ CPPUNIT_TEST ( testGetForecastBalance );
+ CPPUNIT_TEST ( testIsForecastAccount );
+ CPPUNIT_TEST ( testDoFutureScheduledForecast );
+ CPPUNIT_TEST ( testDaysToMinimumBalance );
+ CPPUNIT_TEST ( testDaysToZeroBalance );
+ CPPUNIT_TEST ( testScheduleForecast );
+ CPPUNIT_TEST ( testSkipOpeningDate );
+ CPPUNIT_TEST ( testAccountMinimumBalanceDateList );
+ CPPUNIT_TEST ( testAccountMaximumBalanceDateList );
+ CPPUNIT_TEST ( testAccountAverageBalance );
+ CPPUNIT_TEST ( testBeginForecastDate );
+ CPPUNIT_TEST ( testHistoryDays );
+ CPPUNIT_TEST ( testCreateBudget );
+ CPPUNIT_TEST ( testLinearRegression );
+ CPPUNIT_TEST_SUITE_END();
+
+
+
+ public:
+ MyMoneyForecastTest();
+ void setUp ();
+ void tearDown ();
+ void testEmptyConstructor();
+ void testDoForecast();
+ void testDoForecastInit();
+ void testGetForecastAccountList();
+ void testCalculateAccountTrend();
+ void testGetForecastBalance();
+ void testIsForecastAccount();
+ void testDoFutureScheduledForecast();
+ void testDaysToMinimumBalance();
+ void testDaysToZeroBalance();
+ void testScheduleForecast();
+ void testSkipOpeningDate();
+ void testAccountMinimumBalanceDateList();
+ void testAccountMaximumBalanceDateList();
+ void testAccountAverageBalance();
+ void testBeginForecastDate();
+ void testHistoryDays();
+ void testCreateBudget();
+ void testLinearRegression();
+
+ protected:
+ MyMoneyForecast *m;
+
+ private:
+ MyMoneyAccount *account;
+
+ MyMoneySeqAccessMgr* storage;
+ MyMoneyFile* file;
+
+ MyMoneyMoney moT1;
+ MyMoneyMoney moT2;
+ MyMoneyMoney moT3;
+ MyMoneyMoney moT4;
+ MyMoneyMoney moT5;
+};
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneyinstitution.cpp b/kmymoney2/mymoney/mymoneyinstitution.cpp
new file mode 100644
index 0000000..9969ee7
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyinstitution.cpp
@@ -0,0 +1,182 @@
+/***************************************************************************
+ mymoneyinstitution.cpp
+ -------------------
+ copyright : (C) 2001 by Michael Edwardes,
+ 2002-2005 by Thomas Baumgart
+ email : mte@users.sourceforge.net,
+ ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+#include <kglobal.h>
+#include <kstandarddirs.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoneyinstitution.h"
+#include <kmymoney/mymoneyexception.h>
+
+MyMoneyInstitution::MyMoneyInstitution()
+{
+}
+
+MyMoneyInstitution::MyMoneyInstitution(const QString& id, const MyMoneyInstitution& right) :
+ MyMoneyObject(id)
+{
+ *this = right;
+ m_id = id;
+}
+
+MyMoneyInstitution::MyMoneyInstitution(const QString& name,
+ const QString& town,
+ const QString& street,
+ const QString& postcode,
+ const QString& telephone,
+ const QString& manager,
+ const QString& sortcode)
+{
+ clearId();
+ m_name = name;
+ m_town = town;
+ m_street = street;
+ m_postcode = postcode;
+ m_telephone = telephone;
+ m_manager = manager;
+ m_sortcode = sortcode;
+}
+
+MyMoneyInstitution::MyMoneyInstitution(const QDomElement& node) :
+ MyMoneyObject(node),
+ MyMoneyKeyValueContainer(node.elementsByTagName("KEYVALUEPAIRS").item(0).toElement())
+{
+ if("INSTITUTION" != node.tagName())
+ throw new MYMONEYEXCEPTION("Node was not INSTITUTION");
+
+ m_sortcode = node.attribute("sortcode");
+ m_name = node.attribute("name");
+ m_manager = node.attribute("manager");
+
+ QDomNodeList nodeList = node.elementsByTagName("ADDRESS");
+ if(nodeList.count() == 0) {
+ QString msg = QString("No ADDRESS in institution %1").arg(m_name);
+ throw new MYMONEYEXCEPTION(msg);
+ }
+
+ QDomElement addrNode = nodeList.item(0).toElement();
+ m_street = addrNode.attribute("street");
+ m_town = addrNode.attribute("city");
+ m_postcode = addrNode.attribute("zip");
+ m_telephone = addrNode.attribute("telephone");
+
+ m_accountList.clear();
+
+ nodeList = node.elementsByTagName("ACCOUNTIDS");
+ if(nodeList.count() > 0) {
+ nodeList = nodeList.item(0).toElement().elementsByTagName("ACCOUNTID");
+ for(unsigned int i = 0; i < nodeList.count(); ++i) {
+ m_accountList << nodeList.item(i).toElement().attribute("id");
+ }
+ }
+}
+
+MyMoneyInstitution::~MyMoneyInstitution()
+{
+}
+
+void MyMoneyInstitution::addAccountId(const QString& account)
+{
+ // only add this account if it is not yet presently in the list
+ if(m_accountList.contains(account) == 0)
+ m_accountList.append(account);
+}
+
+QString MyMoneyInstitution::removeAccountId(const QString& account)
+{
+ QStringList::Iterator pos;
+ QString rc;
+
+ pos = m_accountList.find(account);
+ if(pos != m_accountList.end()) {
+ m_accountList.remove(pos);
+ rc = account;
+ }
+ return rc;
+}
+
+bool MyMoneyInstitution::operator < (const MyMoneyInstitution& right) const
+{
+ return m_name < right.m_name;
+}
+
+bool MyMoneyInstitution::operator == (const MyMoneyInstitution& right) const
+{
+ if (MyMoneyObject::operator==(right) &&
+ ((m_name.length() == 0 && right.m_name.length() == 0) || (m_name == right.m_name)) &&
+ ((m_town.length() == 0 && right.m_town.length() == 0) || (m_town == right.m_town)) &&
+ ((m_street.length() == 0 && right.m_street.length() == 0) || (m_street == right.m_street)) &&
+ ((m_postcode.length() == 0 && right.m_postcode.length() == 0) || (m_postcode == right.m_postcode)) &&
+ ((m_telephone.length() == 0 && right.m_telephone.length() == 0) || (m_telephone == right.m_telephone)) &&
+ ((m_sortcode.length() == 0 && right.m_sortcode.length() == 0) || (m_sortcode == right.m_sortcode)) &&
+ ((m_manager.length() == 0 && right.m_manager.length() == 0) || (m_manager == right.m_manager)) &&
+ (m_accountList == right.m_accountList) ) {
+ return true;
+ } else
+ return false;
+}
+
+void MyMoneyInstitution::writeXML(QDomDocument& document, QDomElement& parent) const
+{
+ QDomElement el = document.createElement("INSTITUTION");
+
+ writeBaseXML(document, el);
+
+ el.setAttribute("name", m_name);
+ el.setAttribute("manager", m_manager);
+ el.setAttribute("sortcode", m_sortcode);
+
+ QDomElement address = document.createElement("ADDRESS");
+ address.setAttribute("street", m_street);
+ address.setAttribute("city", m_town);
+ address.setAttribute("zip", m_postcode);
+ address.setAttribute("telephone", m_telephone);
+ el.appendChild(address);
+
+
+ QDomElement accounts = document.createElement("ACCOUNTIDS");
+ for(QStringList::ConstIterator it = accountList().begin(); it != accountList().end(); ++it){
+ QDomElement temp = document.createElement("ACCOUNTID");
+ temp.setAttribute("id", (*it));
+ accounts.appendChild(temp);
+ }
+ el.appendChild(accounts);
+
+ //Add in Key-Value Pairs for institutions.
+ MyMoneyKeyValueContainer::writeXML(document, el);
+
+ parent.appendChild(el);
+}
+
+bool MyMoneyInstitution::hasReferenceTo(const QString& /* id */) const
+{
+ bool rc = false;
+ return rc;
+}
+
+QPixmap MyMoneyInstitution::pixmap() const {
+ return QPixmap(KGlobal::dirs()->findResource("appdata",QString( "icons/hicolor/22x22/actions/%1.png").arg("bank")));
+}
+
diff --git a/kmymoney2/mymoney/mymoneyinstitution.h b/kmymoney2/mymoney/mymoneyinstitution.h
new file mode 100644
index 0000000..35b44c5
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyinstitution.h
@@ -0,0 +1,206 @@
+/***************************************************************************
+ mymoneyinstitution.h
+ -------------------
+ copyright : (C) 2002-2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYINSTITUTION_H
+#define MYMONEYINSTITUTION_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstring.h>
+#include <qmap.h>
+#include <qstringlist.h>
+#include <qpixmap.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoneyutils.h"
+#include <kmymoney/mymoneyobject.h>
+#include <kmymoney/mymoneykeyvaluecontainer.h>
+#include <kmymoney/export.h>
+
+class MyMoneyFile;
+class MyMoneyMoney;
+
+/**
+ * This class represents a Bank contained within a MyMoneyFile object
+ *
+ * @author Thomas Baumgart
+ */
+class KMYMONEY_EXPORT MyMoneyInstitution : public MyMoneyObject, public MyMoneyKeyValueContainer
+{
+public:
+ /**
+ * This is the constructor for a new empty institution description
+ */
+ MyMoneyInstitution();
+
+ /**
+ * This is the constructor used by an application to fill the
+ * values required for a new institution. This object should then be
+ * passed to @see MyMoneyFile::addInstitution
+ */
+ MyMoneyInstitution(const QString& name,
+ const QString& city,
+ const QString& street,
+ const QString& postcode,
+ const QString& telephone,
+ const QString& manager,
+ const QString& sortCode);
+
+ /**
+ * This is the destructor for any MyMoneyInstitution object
+ */
+ ~MyMoneyInstitution();
+
+ /**
+ * This is the constructor for a new institution known to the current file
+ *
+ * @param id id assigned to the new institution object
+ * @param right institution definition
+ */
+ MyMoneyInstitution(const QString& id, const MyMoneyInstitution& right);
+
+ /**
+ * This is the constructor for an institution that is described by a
+ * QDomElement (e.g. from a file).
+ *
+ * @param el const reference to the QDomElement from which to
+ * create the object
+ */
+ MyMoneyInstitution(const QDomElement& el);
+
+ const QString& manager(void) const { return m_manager; }
+ const QString& name(void) const { return m_name; }
+ const QString& postcode(void) const { return m_postcode; }
+ const QString& street(void) const { return m_street; }
+ const QString& telephone(void) const { return m_telephone; }
+ const QString& town(void) const { return m_town; }
+ const QString& city(void) const { return town(); }
+ const QString& sortcode(void) const { return m_sortcode; }
+
+ void setManager(QString manager) { m_manager = manager; }
+ void setName(QString name) { m_name = name; }
+ void setPostcode(QString code) { m_postcode = code; }
+ void setStreet(QString street) { m_street = street; }
+ void setTelephone(QString tel) { m_telephone = tel; }
+ void setTown(QString town) { m_town = town; }
+ void setCity(QString town) { setTown(town); }
+ void setSortcode(QString code) { m_sortcode = code; }
+
+ /**
+ * This method adds the id of an account to the account list of
+ * this institution It is verified, that the account is only
+ * mentioned once.
+ *
+ * @param account id of the account to be added
+ */
+ void addAccountId(const QString& account);
+
+ /**
+ * This method deletes the id of an account from the account list
+ * of this institution
+ *
+ * @param account id of the account to be deleted
+ * @return id of account deleted, otherwise empty string
+ */
+ QString removeAccountId(const QString& account);
+
+ /**
+ * This method is used to return the set of accounts known to
+ * this institution
+ * return QStringList of account ids
+ */
+ const QStringList& accountList(void) const { return m_accountList; }
+
+ /**
+ * This method returns the number of accounts known to
+ * this institution
+ * @return number of accounts
+ */
+ unsigned int accountCount(void) const { return m_accountList.count(); }
+
+ bool operator == (const MyMoneyInstitution&) const;
+ bool operator < (const MyMoneyInstitution& right) const;
+
+ void writeXML(QDomDocument& document, QDomElement& parent) const;
+
+ /**
+ * This method checks if a reference to the given object exists. It returns,
+ * a @p true if the object is referencing the one requested by the
+ * parameter @p id. If it does not, this method returns @p false.
+ *
+ * @param id id of the object to be checked for references
+ * @retval true This object references object with id @p id.
+ * @retval false This object does not reference the object with id @p id.
+ */
+ virtual bool hasReferenceTo(const QString& id) const;
+
+ QPixmap pixmap() const;
+
+private:
+ // Bank 'fields'
+ /**
+ * This member variable keeps the name of the institution
+ */
+ QString m_name;
+
+ /**
+ * This member variable keeps the city of the institution
+ */
+ QString m_town;
+
+ /**
+ * This member variable keeps the street of the institution
+ */
+ QString m_street;
+
+ /**
+ * This member variable keeps the zip-code of the institution
+ */
+ QString m_postcode;
+
+ /**
+ * This member variable keeps the telephone number of the institution
+ */
+ QString m_telephone;
+
+ /**
+ * This member variable keeps the name of the representative of
+ * the institution
+ */
+ QString m_manager;
+
+ /**
+ * This member variable keeps the sort code of the institution.
+ * FIXME: I have no idea
+ * what it is good for. I keep it because it was in the old engine.
+ */
+ QString m_sortcode;
+
+ /**
+ * This member variable keeps the sorted list of the account ids
+ * available at this institution
+ */
+ QStringList m_accountList;
+};
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneyinstitutiontest.cpp b/kmymoney2/mymoney/mymoneyinstitutiontest.cpp
new file mode 100644
index 0000000..ce707ec
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyinstitutiontest.cpp
@@ -0,0 +1,296 @@
+/***************************************************************************
+ mymoneyinstitutiontest.cpp
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "mymoneyinstitutiontest.h"
+#include <kmymoney/mymoneyexception.h>
+
+MyMoneyInstitutionTest::MyMoneyInstitutionTest()
+{
+}
+
+
+void MyMoneyInstitutionTest::setUp () {
+ m = new MyMoneyInstitution();
+ n = new MyMoneyInstitution("name", "town", "street", "postcode",
+ "telephone", "manager", "sortcode");
+}
+
+void MyMoneyInstitutionTest::tearDown () {
+ delete m;
+ delete n;
+}
+
+void MyMoneyInstitutionTest::testEmptyConstructor() {
+ CPPUNIT_ASSERT(m->id().isEmpty());
+ CPPUNIT_ASSERT(m->street().isEmpty());
+ CPPUNIT_ASSERT(m->town().isEmpty());
+ CPPUNIT_ASSERT(m->postcode().isEmpty());
+ CPPUNIT_ASSERT(m->telephone().isEmpty());
+ CPPUNIT_ASSERT(m->manager().isEmpty());
+
+ CPPUNIT_ASSERT(m->accountCount() == 0);
+}
+
+void MyMoneyInstitutionTest::testSetFunctions() {
+ m->setStreet("street");
+ m->setTown("town");
+ m->setPostcode("postcode");
+ m->setTelephone("telephone");
+ m->setManager("manager");
+ m->setName("name");
+
+ CPPUNIT_ASSERT(m->id().isEmpty());
+ CPPUNIT_ASSERT(m->street() == "street");
+ CPPUNIT_ASSERT(m->town() == "town");
+ CPPUNIT_ASSERT(m->postcode() == "postcode");
+ CPPUNIT_ASSERT(m->telephone() == "telephone");
+ CPPUNIT_ASSERT(m->manager() == "manager");
+ CPPUNIT_ASSERT(m->name() == "name");
+}
+
+void MyMoneyInstitutionTest::testNonemptyConstructor() {
+ CPPUNIT_ASSERT(n->id().isEmpty());
+ CPPUNIT_ASSERT(n->street() == "street");
+ CPPUNIT_ASSERT(n->town() == "town");
+ CPPUNIT_ASSERT(n->postcode() == "postcode");
+ CPPUNIT_ASSERT(n->telephone() == "telephone");
+ CPPUNIT_ASSERT(n->manager() == "manager");
+ CPPUNIT_ASSERT(n->name() == "name");
+ CPPUNIT_ASSERT(n->sortcode() == "sortcode");
+}
+
+void MyMoneyInstitutionTest::testCopyConstructor() {
+ MyMoneyInstitution* n1 = new MyMoneyInstitution("GUID1", *n);
+ MyMoneyInstitution n2(*n1);
+
+ CPPUNIT_ASSERT(*n1 == n2);
+
+ delete n1;
+}
+
+void MyMoneyInstitutionTest::testMyMoneyFileConstructor() {
+ MyMoneyInstitution *t = new MyMoneyInstitution("GUID", *n);
+
+ CPPUNIT_ASSERT(t->id() == "GUID");
+
+ CPPUNIT_ASSERT(t->street() == "street");
+ CPPUNIT_ASSERT(t->town() == "town");
+ CPPUNIT_ASSERT(t->postcode() == "postcode");
+ CPPUNIT_ASSERT(t->telephone() == "telephone");
+ CPPUNIT_ASSERT(t->manager() == "manager");
+ CPPUNIT_ASSERT(t->name() == "name");
+ CPPUNIT_ASSERT(t->sortcode() == "sortcode");
+
+ delete t;
+}
+
+void MyMoneyInstitutionTest::testEquality () {
+ MyMoneyInstitution t("name", "town", "street", "postcode",
+ "telephone", "manager", "sortcode");
+
+ CPPUNIT_ASSERT(t == *n);
+ t.setStreet("x");
+ CPPUNIT_ASSERT(!(t == *n));
+ t.setStreet("street");
+ CPPUNIT_ASSERT(t == *n);
+ t.setName("x");
+ CPPUNIT_ASSERT(!(t == *n));
+ t.setName("name");
+ CPPUNIT_ASSERT(t == *n);
+ t.setTown("x");
+ CPPUNIT_ASSERT(!(t == *n));
+ t.setTown("town");
+ CPPUNIT_ASSERT(t == *n);
+ t.setPostcode("x");
+ CPPUNIT_ASSERT(!(t == *n));
+ t.setPostcode("postcode");
+ CPPUNIT_ASSERT(t == *n);
+ t.setTelephone("x");
+ CPPUNIT_ASSERT(!(t == *n));
+ t.setTelephone("telephone");
+ CPPUNIT_ASSERT(t == *n);
+ t.setManager("x");
+ CPPUNIT_ASSERT(!(t == *n));
+ t.setManager("manager");
+ CPPUNIT_ASSERT(t == *n);
+
+ MyMoneyInstitution* n1 = new MyMoneyInstitution("GUID1", *n);
+ MyMoneyInstitution* n2 = new MyMoneyInstitution("GUID1", *n);
+
+ n1->addAccountId("A000001");
+ n2->addAccountId("A000001");
+
+ CPPUNIT_ASSERT(*n1 == *n2);
+
+ delete n1;
+ delete n2;
+}
+
+void MyMoneyInstitutionTest::testInequality () {
+ MyMoneyInstitution* n1 = new MyMoneyInstitution("GUID0", *n);
+ MyMoneyInstitution* n2 = new MyMoneyInstitution("GUID1", *n);
+ MyMoneyInstitution* n3 = new MyMoneyInstitution("GUID2", *n);
+ MyMoneyInstitution* n4 = new MyMoneyInstitution("GUID2", *n);
+
+ CPPUNIT_ASSERT(!(*n1 == *n2));
+ CPPUNIT_ASSERT(!(*n1 == *n3));
+ CPPUNIT_ASSERT(*n3 == *n4);
+
+ n3->addAccountId("A000001");
+ n4->addAccountId("A000002");
+ CPPUNIT_ASSERT(!(*n3 == *n4));
+
+ delete n1;
+ delete n2;
+ delete n3;
+ delete n4;
+}
+
+void MyMoneyInstitutionTest::testAccountIDList () {
+ MyMoneyInstitution institution;
+ QStringList list;
+ QString id;
+
+ // list must be empty
+ list = institution.accountList();
+ CPPUNIT_ASSERT(list.count() == 0);
+
+ // add one account
+ institution.addAccountId("A000002");
+ list = institution.accountList();
+ CPPUNIT_ASSERT(list.count() == 1);
+ CPPUNIT_ASSERT(list.contains("A000002") == 1);
+
+ // adding same account shouldn't make a difference
+ institution.addAccountId("A000002");
+ list = institution.accountList();
+ CPPUNIT_ASSERT(list.count() == 1);
+ CPPUNIT_ASSERT(list.contains("A000002") == 1);
+
+ // now add another account
+ institution.addAccountId("A000001");
+ list = institution.accountList();
+ CPPUNIT_ASSERT(list.count() == 2);
+ CPPUNIT_ASSERT(list.contains("A000002") == 1);
+ CPPUNIT_ASSERT(list.contains("A000001") == 1);
+
+ id = institution.removeAccountId("A000001");
+ CPPUNIT_ASSERT(id == "A000001");
+ list = institution.accountList();
+ CPPUNIT_ASSERT(list.count() == 1);
+ CPPUNIT_ASSERT(list.contains("A000002") == 1);
+
+}
+
+void MyMoneyInstitutionTest::testWriteXML() {
+ MyMoneyKeyValueContainer kvp;
+
+ n->addAccountId("A000001");
+ n->addAccountId("A000003");
+ n->setValue(QString("key"), "value");
+
+ QDomDocument doc("TEST");
+ QDomElement el = doc.createElement("INSTITUTION-CONTAINER");
+ doc.appendChild(el);
+
+ MyMoneyInstitution i("I00001", *n);
+
+ i.writeXML(doc, el);
+
+ QString ref = QString(
+ "<!DOCTYPE TEST>\n"
+ "<INSTITUTION-CONTAINER>\n"
+ " <INSTITUTION sortcode=\"sortcode\" id=\"I00001\" manager=\"manager\" name=\"name\" >\n"
+ " <ADDRESS street=\"street\" zip=\"postcode\" city=\"town\" telephone=\"telephone\" />\n"
+ " <ACCOUNTIDS>\n"
+ " <ACCOUNTID id=\"A000001\" />\n"
+ " <ACCOUNTID id=\"A000003\" />\n"
+ " </ACCOUNTIDS>\n"
+ " <KEYVALUEPAIRS>\n"
+ " <PAIR key=\"key\" value=\"value\" />\n"
+ " </KEYVALUEPAIRS>\n"
+ " </INSTITUTION>\n"
+ "</INSTITUTION-CONTAINER>\n");
+
+ CPPUNIT_ASSERT(doc.toString() == ref);
+}
+
+void MyMoneyInstitutionTest::testReadXML() {
+ MyMoneyInstitution i;
+ QString ref_ok = QString(
+ "<!DOCTYPE TEST>\n"
+ "<INSTITUTION-CONTAINER>\n"
+ " <INSTITUTION sortcode=\"sortcode\" id=\"I00001\" manager=\"manager\" name=\"name\" >\n"
+ " <ADDRESS street=\"street\" zip=\"postcode\" city=\"town\" telephone=\"telephone\" />\n"
+ " <ACCOUNTIDS>\n"
+ " <ACCOUNTID id=\"A000001\" />\n"
+ " <ACCOUNTID id=\"A000003\" />\n"
+ " </ACCOUNTIDS>\n"
+ " <KEYVALUEPAIRS>\n"
+ " <PAIR key=\"key\" value=\"value\" />\n"
+ " </KEYVALUEPAIRS>\n"
+ " </INSTITUTION>\n"
+ "</INSTITUTION-CONTAINER>\n");
+
+ QString ref_false = QString(
+ "<!DOCTYPE TEST>\n"
+ "<INSTITUTION-CONTAINER>\n"
+ " <KINSTITUTION sortcode=\"sortcode\" id=\"I00001\" manager=\"manager\" name=\"name\" >\n"
+ " <ADDRESS street=\"street\" zip=\"postcode\" city=\"town\" telephone=\"telephone\" />\n"
+ " <ACCOUNTIDS>\n"
+ " <ACCOUNTID id=\"A000001\" />\n"
+ " <ACCOUNTID id=\"A000003\" />\n"
+ " </ACCOUNTIDS>\n"
+ " </KINSTITUTION>\n"
+ "</INSTITUTION-CONTAINER>\n");
+
+ QDomDocument doc;
+ QDomElement node;
+
+ doc.setContent(ref_false);
+ node = doc.documentElement().firstChild().toElement();
+ try {
+ i = MyMoneyInstitution(node);
+ CPPUNIT_FAIL("Missing expected exception");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+
+ i.addAccountId("TEST");
+
+ doc.setContent(ref_ok);
+ node = doc.documentElement().firstChild().toElement();
+ try {
+ QStringList alist;
+ alist << "A000001" << "A000003";
+ i = MyMoneyInstitution(node);
+
+ CPPUNIT_ASSERT(i.sortcode() == "sortcode");
+ CPPUNIT_ASSERT(i.id() == "I00001");
+ CPPUNIT_ASSERT(i.manager() == "manager");
+ CPPUNIT_ASSERT(i.name() == "name");
+ CPPUNIT_ASSERT(i.street() == "street");
+ CPPUNIT_ASSERT(i.postcode() == "postcode");
+ CPPUNIT_ASSERT(i.city() == "town");
+ CPPUNIT_ASSERT(i.telephone() == "telephone");
+ CPPUNIT_ASSERT(i.accountList() == alist);
+ CPPUNIT_ASSERT(i.value(QString("key")) == "value");
+
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
diff --git a/kmymoney2/mymoney/mymoneyinstitutiontest.h b/kmymoney2/mymoney/mymoneyinstitutiontest.h
new file mode 100644
index 0000000..8954d6a
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyinstitutiontest.h
@@ -0,0 +1,61 @@
+
+/***************************************************************************
+ mymoneyinstitutiontest.h
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef __MYMONEYINSTITUTIONTEST_H__
+#define __MYMONEYINSTITUTIONTEST_H__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#define private public
+#include "mymoneyinstitution.h"
+#undef private
+
+class MyMoneyInstitutionTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(MyMoneyInstitutionTest);
+ CPPUNIT_TEST(testEmptyConstructor);
+ CPPUNIT_TEST(testSetFunctions);
+ CPPUNIT_TEST(testNonemptyConstructor);
+ CPPUNIT_TEST(testCopyConstructor);
+ CPPUNIT_TEST(testMyMoneyFileConstructor);
+ CPPUNIT_TEST(testEquality);
+ CPPUNIT_TEST(testInequality);
+ CPPUNIT_TEST(testAccountIDList);
+ CPPUNIT_TEST(testWriteXML);
+ CPPUNIT_TEST(testReadXML);
+ CPPUNIT_TEST_SUITE_END();
+
+protected:
+ MyMoneyInstitution *m, *n;
+
+public:
+ MyMoneyInstitutionTest();
+
+ void setUp ();
+ void tearDown ();
+ void testEmptyConstructor();
+ void testSetFunctions();
+ void testNonemptyConstructor();
+ void testCopyConstructor();
+ void testMyMoneyFileConstructor();
+ void testEquality ();
+ void testInequality ();
+ void testAccountIDList ();
+ void testWriteXML();
+ void testReadXML();
+};
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneyinvesttransaction.cpp b/kmymoney2/mymoney/mymoneyinvesttransaction.cpp
new file mode 100644
index 0000000..a7cf082
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyinvesttransaction.cpp
@@ -0,0 +1,42 @@
+/***************************************************************************
+ mymoneyinvesttransaction.cpp - description
+ -------------------
+ begin : Sun Feb 3 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "mymoneyinvesttransaction.h"
+
+#if 0
+MyMoneyInvestTransaction::MyMoneyInvestTransaction(MyMoneyAccount *parent, const long id, transactionMethod method, const QString& number, const QString& memo,
+ const MyMoneyMoney& amount, const QDate& date, const QString& categoryMajor, const QString& categoryMinor, const QString& atmName,
+ const QString& fromTo, const QString& bankFrom, const QString& bankTo, stateE state)
+ : MyMoneyTransaction(parent, id, method, number, memo, amount, date, categoryMajor, categoryMinor, atmName, fromTo, bankFrom, bankTo, state)
+{
+
+}
+
+MyMoneyInvestTransaction::MyMoneyInvestTransaction()
+{
+}
+
+MyMoneyInvestTransaction::~MyMoneyInvestTransaction()
+{
+}
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneyinvesttransaction.h b/kmymoney2/mymoney/mymoneyinvesttransaction.h
new file mode 100644
index 0000000..59f5d5b
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyinvesttransaction.h
@@ -0,0 +1,43 @@
+/***************************************************************************
+ mymoneyinvesttransaction.h - description
+ -------------------
+ begin : Sun Feb 3 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYINVESTTRANSACTION_H
+#define MYMONEYINVESTTRANSACTION_H
+
+#include "mymoneytransaction.h"
+
+#if 0
+/**
+ *@author Kevin Tambascio
+ */
+
+class MyMoneyInvestTransaction : public MyMoneyTransaction {
+public:
+ MyMoneyInvestTransaction();
+ MyMoneyInvestTransaction(MyMoneyAccount *parent, const long id, transactionMethod method, const QString& number, const QString& memo,
+ const MyMoneyMoney& amount, const QDate& date, const QString& categoryMajor, const QString& categoryMinor, const QString& atmName,
+ const QString& fromTo, const QString& bankFrom, const QString& bankTo, stateE state);
+ ~MyMoneyInvestTransaction();
+};
+#endif
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneykeyvaluecontainer.cpp b/kmymoney2/mymoney/mymoneykeyvaluecontainer.cpp
new file mode 100644
index 0000000..4df855b
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneykeyvaluecontainer.cpp
@@ -0,0 +1,120 @@
+/***************************************************************************
+ mymoneykeyvaluecontainer.cpp
+ -------------------
+ begin : Sun Nov 10 2002
+ copyright : (C) 2002-2005 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneykeyvaluecontainer.h>
+#include <kmymoney/mymoneyexception.h>
+
+MyMoneyKeyValueContainer::MyMoneyKeyValueContainer()
+{
+}
+
+MyMoneyKeyValueContainer::MyMoneyKeyValueContainer(const QDomElement& node)
+{
+ if(!node.isNull()) {
+ if("KEYVALUEPAIRS" != node.tagName())
+ throw new MYMONEYEXCEPTION("Node was not KEYVALUEPAIRS");
+
+ m_kvp.clear();
+
+ QDomNodeList nodeList = node.elementsByTagName("PAIR");
+ for(unsigned int i = 0; i < nodeList.count(); ++i) {
+ const QDomElement& el(nodeList.item(i).toElement());
+ m_kvp[el.attribute("key")] = el.attribute("value");
+ }
+ }
+}
+
+MyMoneyKeyValueContainer::~MyMoneyKeyValueContainer()
+{
+}
+
+const QString& MyMoneyKeyValueContainer::value(const QString& key) const
+{
+ QMap<QString, QString>::ConstIterator it;
+
+ it = m_kvp.find(key);
+ if(it != m_kvp.end())
+ return (*it);
+ return QString::null;
+}
+
+void MyMoneyKeyValueContainer::setValue(const QString& key, const QString& value)
+{
+ m_kvp[key] = value;
+}
+
+
+void MyMoneyKeyValueContainer::setPairs(const QMap<QString, QString>& list)
+{
+ m_kvp = list;
+}
+
+void MyMoneyKeyValueContainer::deletePair(const QString& key)
+{
+ QMap<QString, QString>::Iterator it;
+
+ it = m_kvp.find(key);
+ if(it != m_kvp.end())
+ m_kvp.remove(it);
+}
+
+void MyMoneyKeyValueContainer::clear(void)
+{
+ m_kvp.clear();
+}
+
+bool MyMoneyKeyValueContainer::operator == (const MyMoneyKeyValueContainer& right) const
+{
+ QMap<QString, QString>::ConstIterator it_a, it_b;
+
+ it_a = m_kvp.begin();
+ it_b = right.m_kvp.begin();
+
+ while(it_a != m_kvp.end() && it_b != right.m_kvp.end()) {
+ if(it_a.key() != it_b.key()
+ || (((*it_a).length() != 0 || (*it_b).length() != 0) && *it_a != *it_b))
+ return false;
+ ++it_a;
+ ++it_b;
+ }
+
+ return (it_a == m_kvp.end() && it_b == right.m_kvp.end());
+}
+
+void MyMoneyKeyValueContainer::writeXML(QDomDocument& document, QDomElement& parent) const
+{
+ if(m_kvp.count() != 0) {
+ QDomElement el = document.createElement("KEYVALUEPAIRS");
+
+ QMap<QString, QString>::ConstIterator it;
+ for(it = m_kvp.begin(); it != m_kvp.end(); ++it)
+ {
+ QDomElement pair = document.createElement("PAIR");
+ pair.setAttribute("key", it.key());
+ pair.setAttribute("value", it.data());
+ el.appendChild(pair);
+ }
+
+ parent.appendChild(el);
+ }
+}
diff --git a/kmymoney2/mymoney/mymoneykeyvaluecontainer.h b/kmymoney2/mymoney/mymoneykeyvaluecontainer.h
new file mode 100644
index 0000000..fa045b9
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneykeyvaluecontainer.h
@@ -0,0 +1,139 @@
+/***************************************************************************
+ mymoneykeyvaluecontainer.h
+ -------------------
+ begin : Sun Nov 10 2002
+ copyright : (C) 2000-2005 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYKEYVALUECONTAINER_H
+#define MYMONEYKEYVALUECONTAINER_H
+
+
+/**
+ * @author Thomas Baumgart
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstring.h>
+#include <qmap.h>
+#include <qdom.h>
+#include <kmymoney/export.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+
+/**
+ * This class implements a container for key/value pairs. This is used
+ * to store an arbitrary number of attributes with any of the engine
+ * object. The container can also be used to have attributes that are
+ * attached to this object only for a limited time (e.g. between
+ * start of reconciliation end it's end).
+ *
+ * To give any class the ability to have a key/value pair container,
+ * just derive the class from this one. See MyMoneyAccount as an example.
+ */
+class KMYMONEY_EXPORT MyMoneyKeyValueContainer
+{
+public:
+ MyMoneyKeyValueContainer();
+ MyMoneyKeyValueContainer(const QDomElement& node);
+
+ ~MyMoneyKeyValueContainer();
+
+ /**
+ * This method can be used to retrieve the value for a specific @p key.
+ * If the key is unknown in this container, an empty string will be returned.
+ *
+ * @param key const reference to QString with the key to search for
+ * @return reference to value of this key. If the key does not exist,
+ * an emtpy string is returned.
+ */
+ const QString& value(const QString& key) const;
+
+ /**
+ * This method is used to add a key/value pair to the container or
+ * modify an existing pair.
+ *
+ * @param key const reference to QString with the key to search for
+ * @param value const reference to QString with the value for this key
+ */
+ void setValue(const QString& key, const QString& value);
+
+ /**
+ * This method is used to remove an existing key/value pair from the
+ * container. If the key does not exist, the container is not changed.
+ *
+ * @param key const reference to QString with the key to remove
+ */
+ void deletePair(const QString& key);
+
+ /**
+ * This method clears all pairs currently in the container.
+ */
+ void clear(void);
+
+ /**
+ * This method is used to retrieve the whole set of key/value pairs
+ * from the container. It is meant to be used for permanent storage
+ * functionality.
+ *
+ * @return QMap<QString, QString> containing all key/value pairs of
+ * this container.
+ */
+ const QMap<QString, QString>& pairs(void) const { return m_kvp; };
+
+ /**
+ * This method is used to initially store a set of key/value pairs
+ * in the container. It is meant to be used for loading functionality
+ * from permanent storage.
+ *
+ * @param list const QMap<QString, QString> containing the set of
+ * key/value pairs to be loaded into the container.
+ *
+ * @note All existing key/value pairs in the container will be deleted.
+ */
+ void setPairs(const QMap<QString, QString>& list);
+
+ /**
+ * This operator tests for equality of two MyMoneyKeyValueContainer objects
+ */
+ bool operator == (const MyMoneyKeyValueContainer &) const;
+
+ const QString& operator[] ( const QString& k ) const { return value(k); }
+
+ QString& operator[] ( const QString& k) { return m_kvp[k]; }
+
+ /**
+ * This method creates a QDomElement for the @p document
+ * under the parent node @p parent.
+ *
+ * @param document reference to QDomDocument
+ * @param parent reference to QDomElement parent node
+ */
+ void writeXML(QDomDocument& document, QDomElement& parent) const;
+
+private:
+ /**
+ * This member variable represents the container of key/value pairs.
+ */
+ QMap<QString, QString> m_kvp;
+};
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneykeyvaluecontainertest.cpp b/kmymoney2/mymoney/mymoneykeyvaluecontainertest.cpp
new file mode 100644
index 0000000..6d3d1db
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneykeyvaluecontainertest.cpp
@@ -0,0 +1,189 @@
+/***************************************************************************
+ mymoneykeyvaluecontainertest.cpp
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "mymoneykeyvaluecontainertest.h"
+#include <kmymoney/mymoneyexception.h>
+
+MyMoneyKeyValueContainerTest::MyMoneyKeyValueContainerTest()
+{
+}
+
+
+void MyMoneyKeyValueContainerTest::setUp () {
+ m = new MyMoneyKeyValueContainer;
+}
+
+void MyMoneyKeyValueContainerTest::tearDown () {
+ delete m;
+}
+
+void MyMoneyKeyValueContainerTest::testEmptyConstructor() {
+ CPPUNIT_ASSERT(m->m_kvp.count() == 0);
+}
+
+void MyMoneyKeyValueContainerTest::testRetrieveValue() {
+ // load a value into the container
+ m->m_kvp["Key"] = "Value";
+ // make sure it's there
+ CPPUNIT_ASSERT(m->m_kvp.count() == 1);
+ CPPUNIT_ASSERT(m->m_kvp["Key"] == "Value");
+ // now check that the access function works
+ CPPUNIT_ASSERT(m->value("Key") == "Value");
+ CPPUNIT_ASSERT(m->value("key").isEmpty());
+}
+
+void MyMoneyKeyValueContainerTest::testSetValue() {
+ m->setValue("Key", "Value");
+ CPPUNIT_ASSERT(m->m_kvp.count() == 1);
+ CPPUNIT_ASSERT(m->m_kvp["Key"] == "Value");
+}
+
+void MyMoneyKeyValueContainerTest::testDeletePair() {
+ m->setValue("Key", "Value");
+ m->setValue("key", "value");
+ CPPUNIT_ASSERT(m->m_kvp.count() == 2);
+ m->deletePair("Key");
+ CPPUNIT_ASSERT(m->m_kvp.count() == 1);
+ CPPUNIT_ASSERT(m->value("Key").isEmpty());
+ CPPUNIT_ASSERT(m->value("key") == "value");
+}
+
+void MyMoneyKeyValueContainerTest::testClear() {
+ m->setValue("Key", "Value");
+ m->setValue("key", "value");
+ CPPUNIT_ASSERT(m->m_kvp.count() == 2);
+ m->clear();
+ CPPUNIT_ASSERT(m->m_kvp.count() == 0);
+}
+
+void MyMoneyKeyValueContainerTest::testRetrieveList() {
+ QMap<QString, QString> copy;
+
+ copy = m->pairs();
+ CPPUNIT_ASSERT(copy.count() == 0);
+ m->setValue("Key", "Value");
+ m->setValue("key", "value");
+ copy = m->pairs();
+ CPPUNIT_ASSERT(copy.count() == 2);
+ CPPUNIT_ASSERT(copy["Key"] == "Value");
+ CPPUNIT_ASSERT(copy["key"] == "value");
+}
+
+void MyMoneyKeyValueContainerTest::testLoadList() {
+ m->setValue("Key", "Value");
+ m->setValue("key", "value");
+
+ CPPUNIT_ASSERT(m->m_kvp.count() == 2);
+ CPPUNIT_ASSERT(m->m_kvp["Key"] == "Value");
+ CPPUNIT_ASSERT(m->m_kvp["key"] == "value");
+}
+
+void MyMoneyKeyValueContainerTest::testWriteXML() {
+ m->setValue("Key", "Value");
+ m->setValue("key", "value");
+
+ QDomDocument doc("TEST");
+ QDomElement el = doc.createElement("KVP-CONTAINER");
+ doc.appendChild(el);
+ m->writeXML(doc, el);
+
+ QString ref(
+ "<!DOCTYPE TEST>\n"
+ "<KVP-CONTAINER>\n"
+ " <KEYVALUEPAIRS>\n"
+ " <PAIR key=\"Key\" value=\"Value\" />\n"
+ " <PAIR key=\"key\" value=\"value\" />\n"
+ " </KEYVALUEPAIRS>\n"
+ "</KVP-CONTAINER>\n");
+
+ CPPUNIT_ASSERT(doc.toString() == ref);
+}
+
+void MyMoneyKeyValueContainerTest::testReadXML() {
+ m->setValue("Key", "Value");
+ m->setValue("key", "value");
+
+ QString ref_ok(
+ "<!DOCTYPE TEST>\n"
+ "<KVP-CONTAINER>\n"
+ " <KEYVALUEPAIRS>\n"
+ " <PAIR key=\"key\" value=\"Value\" />\n"
+ " <PAIR key=\"Key\" value=\"value\" />\n"
+ " </KEYVALUEPAIRS>\n"
+ "</KVP-CONTAINER>\n");
+
+ QString ref_false(
+ "<!DOCTYPE TEST>\n"
+ "<KVP-CONTAINER>\n"
+ " <KEYVALUE-PAIRS>\n"
+ " <PAIR key=\"key\" value=\"Value\" />\n"
+ " <PAIR key=\"Key\" value=\"value\" />\n"
+ " </KEYVALUE-PAIRS>\n"
+ "</KVP-CONTAINER>\n");
+
+
+ QDomDocument doc;
+ QDomElement node;
+ doc.setContent(ref_false);
+ node = doc.documentElement().firstChild().toElement();
+
+ // make sure, an empty node does not trigger an exception
+ try {
+ MyMoneyKeyValueContainer k(QDomNode());
+ } catch(MyMoneyException *e) {
+ CPPUNIT_FAIL("Unexpected exception");
+ delete e;
+ }
+
+ try {
+ MyMoneyKeyValueContainer k(node);
+ CPPUNIT_FAIL("Missing expected exception");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+
+ doc.setContent(ref_ok);
+ node = doc.documentElement().firstChild().toElement();
+ try {
+ MyMoneyKeyValueContainer k(node);
+ CPPUNIT_ASSERT(k.m_kvp.count() == 2);
+ CPPUNIT_ASSERT(k.value("key") == "Value");
+ CPPUNIT_ASSERT(k.value("Key") == "value");
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneyKeyValueContainerTest::testArrayRead()
+{
+ MyMoneyKeyValueContainer kvp;
+ const MyMoneyKeyValueContainer& ckvp = kvp;
+ CPPUNIT_ASSERT(kvp.pairs().count() == 0);
+ CPPUNIT_ASSERT(ckvp["Key"].isEmpty());
+ CPPUNIT_ASSERT(kvp.pairs().count() == 0);
+ kvp.setValue("Key", "Value");
+ CPPUNIT_ASSERT(kvp["Key"] == "Value");
+}
+
+void MyMoneyKeyValueContainerTest::testArrayWrite()
+{
+ MyMoneyKeyValueContainer kvp;
+ kvp["Key"] = "Value";
+ CPPUNIT_ASSERT(kvp.pairs().count() == 1);
+ CPPUNIT_ASSERT(kvp.value("Key") == "Value");
+}
+
diff --git a/kmymoney2/mymoney/mymoneykeyvaluecontainertest.h b/kmymoney2/mymoney/mymoneykeyvaluecontainertest.h
new file mode 100644
index 0000000..d2d89d8
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneykeyvaluecontainertest.h
@@ -0,0 +1,61 @@
+/***************************************************************************
+ mymoneykeyvaluecontainertest.h
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef __MYMONEYKEYVALUECONTAINERTEST_H__
+#define __MYMONEYKEYVALUECONTAINERTEST_H__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#define private public
+#include "mymoneykeyvaluecontainer.h"
+#undef private
+
+class MyMoneyKeyValueContainerTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(MyMoneyKeyValueContainerTest);
+ CPPUNIT_TEST(testEmptyConstructor);
+ CPPUNIT_TEST(testRetrieveValue);
+ CPPUNIT_TEST(testSetValue);
+ CPPUNIT_TEST(testDeletePair);
+ CPPUNIT_TEST(testClear);
+ CPPUNIT_TEST(testRetrieveList);
+ CPPUNIT_TEST(testLoadList);
+ CPPUNIT_TEST(testWriteXML);
+ CPPUNIT_TEST(testReadXML);
+ CPPUNIT_TEST(testArrayRead);
+ CPPUNIT_TEST(testArrayWrite);
+ CPPUNIT_TEST_SUITE_END();
+
+protected:
+ MyMoneyKeyValueContainer *m;
+
+public:
+ MyMoneyKeyValueContainerTest();
+ void setUp ();
+ void tearDown ();
+ void testEmptyConstructor();
+ void testRetrieveValue();
+ void testSetValue();
+ void testDeletePair();
+ void testClear();
+ void testRetrieveList();
+ void testLoadList();
+ void testArrayRead();
+ void testArrayWrite();
+ void testWriteXML();
+ void testReadXML();
+};
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneymoney.cpp b/kmymoney2/mymoney/mymoneymoney.cpp
new file mode 100644
index 0000000..993a872
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneymoney.cpp
@@ -0,0 +1,794 @@
+/***************************************************************************
+ mymoneymymoney.cpp - description
+ -------------------
+ begin : Thu Feb 21 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// make sure, that this is defined before we even include any other header file
+#ifndef __STDC_LIMIT_MACROS
+ #define __STDC_LIMIT_MACROS // force definition of min and max values
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qregexp.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoneymoney.h"
+#include "mymoneyaccount.h"
+#include "mymoneysecurity.h"
+
+unsigned char MyMoneyMoney::_thousandSeparator = ',';
+unsigned char MyMoneyMoney::_decimalSeparator = '.';
+MyMoneyMoney::signPosition MyMoneyMoney::_negativeMonetarySignPosition = BeforeQuantityMoney;
+MyMoneyMoney::signPosition MyMoneyMoney::_positiveMonetarySignPosition = BeforeQuantityMoney;
+bool MyMoneyMoney::_negativePrefixCurrencySymbol = false;
+bool MyMoneyMoney::_positivePrefixCurrencySymbol = false;
+
+MyMoneyMoney::fileVersionE MyMoneyMoney::_fileVersion = MyMoneyMoney::FILE_4_BYTE_VALUE;
+
+MyMoneyMoney MyMoneyMoney::maxValue = MyMoneyMoney(INT64_MAX,100);
+MyMoneyMoney MyMoneyMoney::minValue = MyMoneyMoney(INT64_MIN,100);
+MyMoneyMoney MyMoneyMoney::autoCalc = MyMoneyMoney(INT64_MIN+1,100);
+
+void MyMoneyMoney::setNegativePrefixCurrencySymbol(const bool flag)
+{
+ _negativePrefixCurrencySymbol = flag;
+}
+
+void MyMoneyMoney::setPositivePrefixCurrencySymbol(const bool flag)
+{
+ _positivePrefixCurrencySymbol = flag;
+}
+
+void MyMoneyMoney::setNegativeMonetarySignPosition(const signPosition pos)
+{
+ _negativeMonetarySignPosition = pos;
+}
+
+MyMoneyMoney::signPosition MyMoneyMoney::negativeMonetarySignPosition(void)
+{
+ return _negativeMonetarySignPosition;
+}
+
+void MyMoneyMoney::setPositiveMonetarySignPosition(const signPosition pos)
+{
+ _positiveMonetarySignPosition = pos;
+}
+
+MyMoneyMoney::signPosition MyMoneyMoney::positiveMonetarySignPosition(void)
+{
+ return _positiveMonetarySignPosition;
+}
+
+void MyMoneyMoney::setThousandSeparator(const unsigned char separator)
+{
+ if(separator != ' ')
+ _thousandSeparator = separator;
+ else
+ _thousandSeparator = 0;
+}
+
+unsigned char MyMoneyMoney::thousandSeparator(void)
+{
+ return _thousandSeparator;
+}
+
+void MyMoneyMoney::setDecimalSeparator(const unsigned char separator)
+{
+ if(separator != ' ')
+ _decimalSeparator = separator;
+ else
+ _decimalSeparator = 0;
+}
+
+unsigned char MyMoneyMoney::decimalSeparator(void)
+{
+ return _decimalSeparator;
+}
+
+void MyMoneyMoney::setFileVersion(fileVersionE version)
+{
+ _fileVersion = version;
+}
+
+MyMoneyMoney::MyMoneyMoney(const QString& pszAmount)
+{
+ m_num = 0;
+ m_denom = 1;
+
+ // an empty string is zero
+ if (pszAmount.isEmpty())
+ return;
+
+ // take care of prices given in the form "8 5/16"
+ // and our own internal represenation
+ QRegExp regExp("^((\\d+)\\s+|-)?(\\d+)/(\\d+)");
+ // +-#2-+ +-#3-+ +-#4-+
+ // +-----#1-----+
+ if (regExp.search(pszAmount) > -1) {
+ m_num = regExp.cap(3).toLongLong();
+ m_denom = regExp.cap(4).toLongLong();
+ const QString& part1 = regExp.cap(1);
+ if(!part1.isEmpty()) {
+ if(part1 == QString("-")) {
+ m_num = -m_num;
+
+ } else {
+ *this += MyMoneyMoney(regExp.cap(2));
+ }
+ }
+ return;
+ }
+
+ QString res = pszAmount;
+ // get rid of anything that is not
+ // a) numeric
+ // b) _decimalSeparator
+ // c) negative indicator
+ QString validChars = QString("\\d%1").arg(QChar(decimalSeparator()));
+ // we need to escape the minus sign here, because later on it will be
+ // part of "\d,-()" and that does not work. It needs to be "\d,\-()"
+ // And we need two of them, because we're in C
+ QString negChars("\\-");
+ if(_negativeMonetarySignPosition == ParensAround) {
+ // Since we want to allow '-' as well as '()' for negative entry
+ // we just add the parens here.
+ negChars += "()";
+ }
+ validChars += negChars;
+ // qDebug("0: '%s'", validChars.data());
+
+ QRegExp invChars(QString("[^%1]").arg(validChars));
+ // qDebug("1: '%s'", res.data());
+ res.remove(invChars);
+
+ QRegExp negCharSet(QString("[%1]").arg(negChars));
+ bool isNegative = false;
+ if(res.find(negCharSet) != -1) {
+ isNegative = true;
+ res.remove(negCharSet);
+ }
+ // qDebug("2: '%s' %s", res.data(), isNegative ? "(-)" : "");
+ int pos;
+
+ // qDebug("3: '%s'", res.data());
+ if((pos = res.find(_decimalSeparator)) != -1) {
+ // make sure, we get the denominator right
+ m_denom = precToDenom(res.length() - pos - 1);
+
+ // now remove the decimal symbol
+ res.remove(pos, 1);
+ }
+ // qDebug("4: '%s'", res.data());
+ if(res.length() > 0)
+ m_num = atoll( res );
+
+ if(isNegative)
+ m_num = -m_num;
+}
+
+QString MyMoneyMoney::formatMoney(int denom, bool showThousandSeparator) const
+{
+ return formatMoney("", denomToPrec(denom), showThousandSeparator);
+}
+
+QString MyMoneyMoney::formatMoney(const MyMoneyAccount& acc, const MyMoneySecurity& sec, bool showThousandSeparator) const
+{
+ return formatMoney(sec.tradingSymbol(), denomToPrec(acc.fraction()), showThousandSeparator);
+}
+
+QString MyMoneyMoney::formatMoney(const MyMoneySecurity& sec, bool showThousandSeparator) const
+{
+ return formatMoney(sec.tradingSymbol(), denomToPrec(sec.smallestAccountFraction()), showThousandSeparator);
+}
+
+QString MyMoneyMoney::formatMoney(const QString& currency, const int prec, bool showThousandSeparator) const
+{
+ QString res;
+ QString tmpCurrency = currency;
+ int tmpPrec = prec;
+ signed64 denom = 1;
+ signed64 m_64Value;
+
+ // if prec == -1 we want the maximum possible but w/o trailing zeroes
+ if(tmpPrec > -1) {
+ while(tmpPrec--) {
+ denom *= 10;
+ }
+ } else {
+ // fix it to a max of 8 digits on the right side for now
+ denom = 100000000;
+ }
+
+ m_64Value = convert(denom).m_num;
+
+ // Once we really support multiple currencies then this method will
+ // be much better than using KGlobal::locale()->formatMoney.
+ bool bNegative = false;
+ signed64 left = m_64Value / denom;
+ signed64 right = m_64Value % denom;
+
+ if (right < 0){
+ right = -right;
+ bNegative = true;
+ }
+ if (left < 0) {
+ left = -left;
+ bNegative = true;
+ }
+
+ if(left & 0xFFFFFFFF00000000LL) {
+ signed64 tmp = left;
+
+ // QString.sprintf("%Ld") did not work :-(, so I had to
+ // do it the old ugly way.
+ while(tmp) {
+ res.insert(0, QString("%1").arg(static_cast<int>(tmp % 10)));
+ tmp /= 10;
+ }
+
+ } else
+ res = QString("%1").arg((long)left);
+
+ if(showThousandSeparator) {
+ int pos = res.length();
+ while((0 < (pos -= 3)) && thousandSeparator())
+ res.insert(pos, thousandSeparator());
+ }
+
+ if(prec > 0 || (prec == -1 && right != 0)) {
+ if(decimalSeparator())
+ res += decimalSeparator();
+
+ // using
+ //
+ // res += QString("%1").arg(right).rightJustify(prec, '0', true);
+ //
+ // caused some weird results if right was rather large. Eg: right being
+ // 666600000 should have appended a 0, but instead it prepended a 0. With
+ // res being "2," the result wasn't "2,6666000000" as expected, but rather
+ // "2,0666600000" which was not usable. The code below works for me.
+ QString rs = QString("%1").arg(right);
+ if(prec != -1)
+ rs = rs.rightJustify(prec, '0', true);
+ else {
+ rs = rs.rightJustify(8, '0', true);
+ // no trailing zeroes or decimal separators
+ while(rs.endsWith("0"))
+ rs.truncate(rs.length()-1);
+ while(rs.endsWith(QChar(decimalSeparator())))
+ rs.truncate(rs.length()-1);
+ }
+ res += rs;
+ }
+
+ signPosition signpos = bNegative ? _negativeMonetarySignPosition : _positiveMonetarySignPosition;
+ QString sign = bNegative ? "-" : "";
+
+ switch(signpos) {
+ case ParensAround:
+ res.prepend('(');
+ res.append(')');
+ break;
+ case BeforeQuantityMoney:
+ res.prepend(sign);
+ break;
+ case AfterQuantityMoney:
+ res.append(sign);
+ break;
+ case BeforeMoney:
+ tmpCurrency.prepend(sign);
+ break;
+ case AfterMoney:
+ tmpCurrency.append(sign);
+ break;
+ }
+ if(!tmpCurrency.isEmpty()) {
+ if(bNegative ? _negativePrefixCurrencySymbol : _positivePrefixCurrencySymbol){
+ res.prepend(' ');
+ res.prepend(tmpCurrency);
+ } else {
+ res.append(' ');
+ res.append(tmpCurrency);
+ }
+ }
+
+ return res;
+}
+
+const QString MyMoneyMoney::toString(void) const
+{
+ signed64 tmp = m_num < 0 ? - m_num : m_num;
+ QString res;
+ QString resf;
+
+ // QString.sprintf("%Ld") did not work :-(, so I had to
+ // do it the old ugly way.
+ while(tmp) {
+ res.prepend(QString("%1").arg(static_cast<int>(tmp % 10)));
+ tmp /= 10;
+ }
+ if(res.isEmpty())
+ res = QString("0");
+
+ if(m_num < 0)
+ res.prepend('-');
+
+ tmp = m_denom;
+ while(tmp) {
+ resf.prepend(QString("%1").arg(static_cast<int>(tmp % 10)));
+ tmp /= 10;
+ }
+ return res + "/" + resf;
+}
+
+QDataStream &operator<<(QDataStream &s, const MyMoneyMoney &_money)
+{
+ // We WILL lose data here if the user has more than 2 billion pounds :-(
+ // QT defined it here as long:
+ // qglobal.h:typedef long Q_INT64;
+
+ MyMoneyMoney money = _money.convert(100);
+
+ switch(MyMoneyMoney::_fileVersion) {
+ case MyMoneyMoney::FILE_4_BYTE_VALUE:
+ if(money.m_num & 0xffffffff00000000LL)
+ qWarning("Lost data while writing out MyMoneyMoney object using deprecated 4 byte writer");
+
+ s << static_cast<Q_INT32> (money.m_num & 0xffffffff);
+ break;
+
+ default:
+ qDebug("Unknown file version while writing MyMoneyMoney object! Use FILE_8_BYTE_VALUE");
+ // tricky fall through here
+
+ case MyMoneyMoney::FILE_8_BYTE_VALUE:
+ s << static_cast<Q_INT32> (money.m_num >> 32);
+ s << static_cast<Q_INT32> (money.m_num & 0xffffffff);
+ break;
+ }
+ return s;
+}
+
+QDataStream &operator>>(QDataStream &s, MyMoneyMoney &money)
+{
+ Q_INT32 tmp;
+ switch(MyMoneyMoney::_fileVersion) {
+ case MyMoneyMoney::FILE_4_BYTE_VALUE:
+ s >> tmp;
+ money.m_num = static_cast<signed64> (tmp);
+ money.m_denom = 100;
+ break;
+
+ default:
+ qDebug("Unknown file version while writing MyMoneyMoney object! FILE_8_BYTE_VALUE assumed");
+ // tricky fall through here
+
+ case MyMoneyMoney::FILE_8_BYTE_VALUE:
+ s >> tmp;
+ money.m_num = static_cast<signed64> (tmp);
+ money.m_num <<= 32;
+ s >> tmp;
+ money.m_num |= static_cast<signed64> (tmp);
+ money.m_denom = 100;
+ break;
+ }
+ return s;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Name: operator+
+// Purpose: Addition operator - adds the input amount to the object
+// Returns: The current object
+// Throws: Nothing.
+// Arguments: b - MyMoneyMoney object to be added
+//
+////////////////////////////////////////////////////////////////////////////////
+MyMoneyMoney MyMoneyMoney::operator+( const MyMoneyMoney& _b) const
+{
+ MyMoneyMoney a(*this);
+ MyMoneyMoney b(_b);
+ MyMoneyMoney sum;
+ signed64 lcd;
+
+ if(a.m_denom < 0) {
+ a.m_num *= a.m_denom;
+ a.m_denom = 1;
+ }
+ if(b.m_denom < 0) {
+ b.m_num *= b.m_denom;
+ b.m_denom = 1;
+ }
+
+ if(a.m_denom == b.m_denom) {
+ sum.m_num = a.m_num + b.m_num;
+ sum.m_denom = a.m_denom;
+ } else {
+ lcd = a.getLcd(b);
+ sum.m_num = a.m_num*(lcd/a.m_denom) + b.m_num*(lcd/b.m_denom);
+ sum.m_denom = lcd;
+ }
+ return sum;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Name: operator-
+// Purpose: Addition operator - subtracts the input amount from the object
+// Returns: The current object
+// Throws: Nothing.
+// Arguments: AmountInPence - MyMoneyMoney object to be subtracted
+//
+////////////////////////////////////////////////////////////////////////////////
+MyMoneyMoney MyMoneyMoney::operator-( const MyMoneyMoney& _b) const
+{
+ MyMoneyMoney a(*this);
+ MyMoneyMoney b(_b);
+ MyMoneyMoney diff;
+ signed64 lcd;
+
+ if(a.m_denom < 0) {
+ a.m_num *= a.m_denom;
+ a.m_denom = 1;
+ }
+ if(b.m_denom < 0) {
+ b.m_num *= b.m_denom;
+ b.m_denom = 1;
+ }
+
+ if(a.m_denom == b.m_denom) {
+ diff.m_num = a.m_num - b.m_num;
+ diff.m_denom = a.m_denom;
+ } else {
+ lcd = a.getLcd(b);
+ diff.m_num = a.m_num*(lcd/a.m_denom) - b.m_num*(lcd/b.m_denom);
+ diff.m_denom = lcd;
+ }
+ return diff;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Name: operator*
+// Purpose: Multiplication operator - multiplies the input amount to the object
+// Returns: The current object
+// Throws: Nothing.
+// Arguments: b - MyMoneyMoney object to be multiplied
+//
+////////////////////////////////////////////////////////////////////////////////
+MyMoneyMoney MyMoneyMoney::operator*( const MyMoneyMoney& _b ) const
+{
+ MyMoneyMoney a(*this);
+ MyMoneyMoney b(_b);
+ MyMoneyMoney product;
+
+ if(a.m_denom < 0) {
+ a.m_num *= a.m_denom;
+ a.m_denom = 1;
+ }
+ if(b.m_denom < 0) {
+ b.m_num *= b.m_denom;
+ b.m_denom = 1;
+ }
+
+ product.m_num = a.m_num * b.m_num;
+ product.m_denom = a.m_denom * b.m_denom;
+
+ if(product.m_denom < 0) {
+ product.m_num = -product.m_num;
+ product.m_denom = -product.m_denom;
+ }
+ return product;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Name: operator/
+// Purpose: Division operator - divides the object by the input amount
+// Returns: The current object
+// Throws: Nothing.
+// Arguments: b - MyMoneyMoney object to be used as dividend
+//
+////////////////////////////////////////////////////////////////////////////////
+MyMoneyMoney MyMoneyMoney::operator / ( const MyMoneyMoney& _b ) const
+{
+ MyMoneyMoney a(*this);
+ MyMoneyMoney b(_b);
+ MyMoneyMoney quotient;
+ signed64 lcd;
+
+ if(a.m_denom < 0) {
+ a.m_num *= a.m_denom;
+ a.m_denom = 1;
+ }
+ if(b.m_denom < 0) {
+ b.m_num *= b.m_denom;
+ b.m_denom = 1;
+ }
+
+ if(a.m_denom == b.m_denom) {
+ quotient.m_num = a.m_num;
+ quotient.m_denom = b.m_num;
+ }
+ else {
+ /* ok, convert to the lcd and compute from there... */
+ lcd = a.getLcd(b);
+ quotient.m_num = a.m_num*(lcd/a.m_denom);
+ quotient.m_denom = b.m_num*(lcd/b.m_denom);
+ }
+
+ if(quotient.m_denom < 0) {
+ quotient.m_num = -quotient.m_num;
+ quotient.m_denom = -quotient.m_denom;
+ }
+
+ Q_ASSERT(quotient.m_denom != 0);
+
+ return quotient;
+}
+
+signed64 MyMoneyMoney::getLcd(const MyMoneyMoney& b) const
+{
+ signed64 current_divisor = 2;
+ signed64 max_square;
+ signed64 three_count = 0;
+ signed64 small_denom;
+ signed64 big_denom;
+
+ if(b.m_denom < m_denom) {
+ small_denom = b.m_denom;
+ big_denom = m_denom;
+ }
+ else {
+ small_denom = m_denom;
+ big_denom = b.m_denom;
+ }
+
+ /* special case: smaller divides smoothly into larger */
+ if((big_denom % small_denom) == 0) {
+ return big_denom;
+ }
+
+ max_square = small_denom;
+
+ /* the LCM algorithm : factor out the union of the prime factors of the
+ * two args and then multiply the remainders together.
+ *
+ * To do this, we find the successive prime factors of the smaller
+ * denominator and eliminate them from both the smaller and larger
+ * denominator (so we only count factors on a one-on-one basis),
+ * then multiply the original smaller by the remains of the larger.
+ *
+ * I.e. LCM 100,96875 == 2*2*5*5,31*5*5*5*5 = 2*2,31*5*5
+ * answer: multiply 100 by 31*5*5 == 387500
+ */
+ while((current_divisor * current_divisor) <= max_square) {
+ if(((small_denom % current_divisor) == 0) &&
+ ((big_denom % current_divisor) == 0)) {
+ big_denom = big_denom / current_divisor;
+ small_denom = small_denom / current_divisor;
+ }
+ else {
+ if(current_divisor == 2) {
+ current_divisor++;
+ }
+ else if(three_count == 3) {
+ current_divisor += 4;
+ three_count = 1;
+ }
+ else {
+ current_divisor += 2;
+ three_count++;
+ }
+ }
+
+ if((current_divisor > small_denom) ||
+ (current_divisor > big_denom)) {
+ break;
+ }
+ }
+
+ /* max_sqaure is the original small_denom */
+ return max_square * big_denom;
+}
+
+const MyMoneyMoney MyMoneyMoney::convert(const signed64 _denom, const roundingMethod how) const
+{
+ MyMoneyMoney out(*this);
+ MyMoneyMoney in (*this);
+ MyMoneyMoney temp;
+
+ signed64 denom = _denom;
+ signed64 temp_bc;
+ signed64 temp_a;
+ signed64 remainder;
+ signed64 sign;
+ int denom_neg=0;
+
+ if(m_denom != denom) {
+ /* if the denominator of the input value is negative, get rid of that. */
+ if(m_denom < 0) {
+ in.m_num = in.m_num * (- in.m_denom);
+ in.m_denom = 1;
+ }
+
+ sign = (in.m_num < 0) ? -1 : 1;
+
+ /* if the denominator is less than zero, we are to interpret it as
+ * the reciprocal of its magnitude. */
+ if(denom < 0) {
+ denom = - denom;
+ denom_neg = 1;
+ temp_a = (in.m_num < 0) ? -in.m_num : in.m_num;
+ temp_bc = in.m_denom * denom;
+ remainder = in.m_num % temp_bc;
+ out.m_num = in.m_num / temp_bc;
+ out.m_denom = -denom;
+ }
+ else {
+ /* do all the modulo and int division on positive values to make
+ * things a little clearer. Reduce the fraction denom/in.denom to
+ * help with range errors (FIXME : need bigger intermediate rep) */
+ temp.m_num = denom;
+ temp.m_denom = in.m_denom;
+ temp = temp.reduce();
+
+ out.m_num = in.m_num * temp.m_num;
+ out.m_num = (out.m_num < 0) ? -out.m_num : out.m_num;
+ remainder = out.m_num % temp.m_denom;
+ out.m_num = out.m_num / temp.m_denom;
+ out.m_denom = denom;
+ }
+
+ if(remainder > 0) {
+ switch(how) {
+ case RndFloor:
+ if(sign < 0) {
+ out.m_num = out.m_num + 1;
+ }
+ break;
+
+ case RndCeil:
+ if(sign > 0) {
+ out.m_num = out.m_num + 1;
+ }
+ break;
+
+ case RndTrunc:
+ break;
+
+ case RndPromote:
+ out.m_num = out.m_num + 1;
+ break;
+
+ case RndHalfDown:
+ if(denom_neg) {
+ if((2 * remainder) > in.m_denom*denom) {
+ out.m_num = out.m_num + 1;
+ }
+ }
+ else if((2 * remainder) > temp.m_denom) {
+ out.m_num = out.m_num + 1;
+ }
+ break;
+
+ case RndHalfUp:
+ if(denom_neg) {
+ if((2 * remainder) >= in.m_denom*denom) {
+ out.m_num = out.m_num + 1;
+ }
+ }
+ else if((2 * remainder ) >= temp.m_denom) {
+ out.m_num = out.m_num + 1;
+ }
+ break;
+
+ case RndRound:
+ if(denom_neg) {
+ if((2 * remainder) > in.m_denom*denom) {
+ out.m_num = out.m_num + 1;
+ }
+ else if((2 * remainder) == in.m_denom*denom) {
+ if(out.m_num % 2) {
+ out.m_num = out.m_num + 1;
+ }
+ }
+ }
+ else {
+ if((2 * remainder ) > temp.m_denom) {
+ out.m_num = out.m_num + 1;
+ }
+ else if((2 * remainder) == temp.m_denom) {
+ if(out.m_num % 2) {
+ out.m_num = out.m_num + 1;
+ }
+ }
+ }
+ break;
+
+ case RndNever:
+ qWarning("MyMoneyMoney: have remainder \"%Ld/%Ld\"->convert(%Ld, %d)",
+ m_num, m_denom, _denom, how);
+ break;
+ }
+ }
+ out.m_num = (sign > 0) ? out.m_num : (-out.m_num);
+ }
+
+ return out;
+}
+
+/********************************************************************
+ * gnc_numeric_reduce
+ * reduce a fraction by GCF elimination. This is NOT done as a
+ * part of the arithmetic API unless GNC_DENOM_REDUCE is specified
+ * as the output denominator.
+ ********************************************************************/
+const MyMoneyMoney MyMoneyMoney::reduce(void) const
+{
+ MyMoneyMoney out;
+ signed64 t;
+ signed64 num = (m_num < 0) ? (- m_num) : m_num ;
+ signed64 denom = m_denom;
+
+ /* the strategy is to use euclid's algorithm */
+ while (denom > 0) {
+ t = num % denom;
+ num = denom;
+ denom = t;
+ }
+ /* num = gcd */
+
+ /* all calculations are done on positive num, since it's not
+ * well defined what % does for negative values */
+ out.m_num = m_num / num;
+ out.m_denom = m_denom / num;
+ return out;
+}
+
+signed64 MyMoneyMoney::precToDenom(int prec)
+{
+ signed64 denom = 1;
+
+ while(prec--)
+ denom *= 10;
+
+ return denom;
+}
+
+double MyMoneyMoney::toDouble(void) const
+{
+ return static_cast<double>(m_num) / static_cast<double>(m_denom);
+}
+
+int MyMoneyMoney::denomToPrec(signed64 fract)
+{
+ int rc = 0;
+ while(fract > 1) {
+ rc++;
+ fract /= 10;
+ }
+ return rc;
+}
+
+MyMoneyMoney::operator int() const
+{
+ return static_cast<int> (m_num / m_denom);
+}
diff --git a/kmymoney2/mymoney/mymoneymoney.h b/kmymoney2/mymoney/mymoneymoney.h
new file mode 100644
index 0000000..74235c7
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneymoney.h
@@ -0,0 +1,612 @@
+/***************************************************************************
+ mymoneymoney.h
+ -------------------
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+#ifndef _MYMONEYMONEY_H
+#define _MYMONEYMONEY_H
+
+#include <stdlib.h>
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifndef HAVE_ATOLL
+# ifdef HAVE_STRTOLL
+# define atoll(a) strtoll(a, 0, 10)
+# endif
+#endif
+
+#include <cmath>
+
+#ifdef _GLIBCPP_HAVE_MODFL
+#define HAVE_LONG_DOUBLE 1
+#endif
+
+#ifndef HAVE_LONG_DOUBLE
+#define HAVE_LONG_DOUBLE 0
+#endif
+
+// So we can save this object
+#include <qstring.h>
+#include <qdatastream.h>
+#include <kmymoney/export.h>
+#include <kmymoney/mymoneyexception.h>
+
+// Check for standard definitions
+#ifdef HAVE_STDINT_H
+ #ifndef __STDC_LIMIT_MACROS
+ #define __STDC_LIMIT_MACROS // force definition of min and max values
+ #endif
+ #include <stdint.h>
+#else
+ #include <limits.h>
+ #define INT64_MAX LLONG_MAX
+ #define INT64_MIN LLONG_MIN
+#endif
+
+typedef int64_t signed64;
+typedef uint64_t unsigned64;
+
+class MyMoneyAccount;
+class MyMoneySecurity;
+
+/**
+ * This class represents a value within the MyMoney Engine
+ *
+ * @author Michael Edwardes
+ */
+class KMYMONEY_EXPORT MyMoneyMoney
+{
+public:
+ enum fileVersionE {
+ FILE_4_BYTE_VALUE = 0,
+ FILE_8_BYTE_VALUE
+ };
+
+ enum signPosition {
+ // keep those in sync with the ones defined in klocale.h
+ ParensAround = 0,
+ BeforeQuantityMoney = 1,
+ AfterQuantityMoney = 2,
+ BeforeMoney = 3,
+ AfterMoney = 4
+ };
+
+ enum roundingMethod {
+ RndNever = 0,
+ RndFloor,
+ RndCeil,
+ RndTrunc,
+ RndPromote,
+ RndHalfDown,
+ RndHalfUp,
+ RndRound
+ };
+
+ // construction
+ MyMoneyMoney();
+ MyMoneyMoney( const int iAmount, const signed64 denom = 100 );
+ MyMoneyMoney( const QString& pszAmount );
+ MyMoneyMoney( const signed64 Amount, const signed64 denom = 100 );
+ MyMoneyMoney( const double dAmount, const signed64 denom = 100 );
+#if HAVE_LONG_DOUBLE
+ MyMoneyMoney( const long double dAmount, const signed64 denom = 100 );
+#endif
+
+ // copy constructor
+ MyMoneyMoney( const MyMoneyMoney& AmountInPence );
+
+ // signed64 value(const int prec = 2) const;
+ const MyMoneyMoney abs(void) const { return m_num < 0 ? -(*this) : *this; };
+
+ /**
+ * This method returns a formatted string according to the settings
+ * of _thousandSeparator, _decimalSeparator, _negativeMonetarySignPosition,
+ * _positiveMonetaryPosition, _negativePrefixCurrencySymbol and
+ * _positivePrefixCurrencySymbol. Those values can be modified using
+ * the appropriate set-methods.
+ *
+ * @param currency The currency symbol
+ * @param prec The number of fractional digits
+ * @param showThousandSeparator should the thousandSeparator symbol be inserted
+ * (@a true) or not (@a false) (default true)
+ */
+ QString formatMoney(const QString& currency, const int prec, bool showThousandSeparator = true) const;
+
+ /**
+ * This is a convenience method. It behaves exactly as the above one, but takes the information
+ * about currency symbol and precision out of the MyMoneySecurity and MyMoneyAccount objects
+ * @a acc and @a sec.
+ */
+ QString formatMoney(const MyMoneyAccount& acc, const MyMoneySecurity& sec, bool showThousandSeparator = true) const;
+
+ /**
+ * This is a convenience method. It behaves exactly as the above one, but takes the information
+ * about currency symbol and precision out of the MyMoneySecurity object @a sec.
+ */
+ QString formatMoney(const MyMoneySecurity& sec, bool showThousandSeparator = true) const;
+
+ /**
+ * This is a convenience method. It behaves exactly as the above one, but takes the information
+ * about precision out of the denomination @a denom. No currency symbol is shown. If you want
+ * to see a currency symbol, please use formatMoney(const MyMoneyAccount& acc, const MyMoneySecurity& sec, bool showThousandSeparator)
+ * instead.
+ *
+ * @note denom is often set to account.fraction(security).
+ */
+ QString formatMoney(int denom, bool showThousandSeparator = true) const;
+
+ /**
+ * This method is used to convert the smallest fraction information into
+ * the corresponding number of digits used for precision.
+ *
+ * @param fract smallest fractional part (e.g. 100 for cents)
+ * @return number of precision digits (e.g. 2 for cents)
+ */
+ static int denomToPrec(signed64 fract);
+
+ const QString toString(void) const;
+ const MyMoneyMoney convert(const signed64 denom = 100, const roundingMethod how = RndRound) const;
+ static signed64 precToDenom(int prec);
+ double toDouble(void) const;
+
+ static void setThousandSeparator(const unsigned char);
+ static void setDecimalSeparator(const unsigned char);
+ static void setNegativeMonetarySignPosition(const signPosition pos);
+ static void setPositiveMonetarySignPosition(const signPosition pos);
+ static void setNegativePrefixCurrencySymbol(const bool flags);
+ static void setPositivePrefixCurrencySymbol(const bool flags);
+
+ static unsigned char thousandSeparator(void);
+ static unsigned char decimalSeparator(void);
+ static signPosition negativeMonetarySignPosition(void);
+ static signPosition positiveMonetarySignPosition(void);
+ static void setFileVersion(const fileVersionE version);
+
+ // assignment
+ const MyMoneyMoney& operator=( const MyMoneyMoney& Amount );
+ const MyMoneyMoney& operator=( const QString& pszAmount );
+
+ // comparison
+ bool operator==( const MyMoneyMoney& Amount ) const;
+ bool operator!=( const MyMoneyMoney& Amount ) const;
+ bool operator<( const MyMoneyMoney& Amount ) const;
+ bool operator>( const MyMoneyMoney& Amount ) const;
+ bool operator<=( const MyMoneyMoney& Amount ) const;
+ bool operator>=( const MyMoneyMoney& Amount ) const;
+
+ bool operator==( const QString& pszAmount ) const;
+ bool operator!=( const QString& pszAmount ) const;
+ bool operator<( const QString& pszAmount ) const;
+ bool operator>( const QString& pszAmount ) const;
+ bool operator<=( const QString& pszAmount ) const;
+ bool operator>=( const QString& pszAmount ) const;
+
+ // calculation
+ MyMoneyMoney operator+( const MyMoneyMoney& Amount ) const;
+
+ MyMoneyMoney operator-( const MyMoneyMoney& Amount ) const;
+ MyMoneyMoney operator-( ) const;
+
+ MyMoneyMoney operator*( const MyMoneyMoney& factor ) const;
+ MyMoneyMoney operator*( int factor ) const;
+ MyMoneyMoney operator*( signed64 factor ) const;
+ MyMoneyMoney operator/( const MyMoneyMoney& Amount ) const;
+
+ // unary operators
+ MyMoneyMoney& operator+= ( const MyMoneyMoney& Amount );
+ MyMoneyMoney& operator-= ( const MyMoneyMoney& Amount );
+ MyMoneyMoney& operator/= ( const MyMoneyMoney& Amount );
+
+ // conversion
+ operator int() const;
+
+ static MyMoneyMoney maxValue;
+ static MyMoneyMoney minValue;
+ static MyMoneyMoney autoCalc;
+
+ bool isNegative() const { return (m_num < 0) ? true : false; }
+ bool isPositive() const { return (m_num > 0) ? true : false; }
+ bool isZero() const { return m_num == 0; }
+ bool isAutoCalc(void) const { return (*this == autoCalc); }
+
+ const MyMoneyMoney reduce(void) const;
+
+private:
+ signed64 m_num;
+ signed64 m_denom;
+
+ signed64 getLcd(const MyMoneyMoney& b) const;
+
+ KMYMONEY_EXPORT friend QDataStream &operator<<(QDataStream &, const MyMoneyMoney &);
+ KMYMONEY_EXPORT friend QDataStream &operator>>(QDataStream &, MyMoneyMoney &);
+
+ static unsigned char _thousandSeparator;
+ static unsigned char _decimalSeparator;
+ static signPosition _negativeMonetarySignPosition;
+ static signPosition _positiveMonetarySignPosition;
+ static bool _negativePrefixCurrencySymbol;
+ static bool _positivePrefixCurrencySymbol;
+ static MyMoneyMoney::fileVersionE _fileVersion;
+
+};
+
+//=============================================================================
+//
+// Inline functions
+//
+//=============================================================================
+
+////////////////////////////////////////////////////////////////////////////////
+// Name: MyMoneyMoney
+// Purpose: Constructor - constructs object set to 0.
+// Returns: None
+// Throws: Nothing.
+// Arguments: None
+//
+////////////////////////////////////////////////////////////////////////////////
+inline MyMoneyMoney::MyMoneyMoney()
+{
+ m_num = 0;
+ m_denom = 1;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Name: MyMoneyMoney
+// Purpose: Constructor - constructs object from an amount in a signed64 value
+// Returns: None
+// Throws: Nothing.
+// Arguments: Amount - signed 64 object containing amount
+// denom - denominator of the object
+//
+////////////////////////////////////////////////////////////////////////////////
+inline MyMoneyMoney::MyMoneyMoney(signed64 Amount, const signed64 denom)
+{
+ if(!denom)
+ throw new MYMONEYEXCEPTION("Denominator 0 not allowed!");
+
+ m_num = Amount;
+ m_denom = denom;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Name: MyMoneyMoney
+// Purpose: Constructor - constructs object from an amount in a double value
+// Returns: None
+// Throws: Nothing.
+// Arguments: dAmount - double object containing amount
+// denom - denominator of the object
+//
+////////////////////////////////////////////////////////////////////////////////
+inline MyMoneyMoney::MyMoneyMoney(const double dAmount, const signed64 denom)
+{
+ double adj = dAmount < 0 ? -0.5 : 0.5;
+ m_denom = denom;
+ m_num = (signed64) (dAmount * (double)m_denom + adj);
+}
+
+#if HAVE_LONG_DOUBLE
+////////////////////////////////////////////////////////////////////////////////
+// Name: MyMoneyMoney
+// Purpose: Constructor - constructs object from an amount in a long double value
+// Returns: None
+// Throws: Nothing.
+// Arguments: dAmount - long double object containing amount
+// denom - denominator of the object
+//
+////////////////////////////////////////////////////////////////////////////////
+inline MyMoneyMoney::MyMoneyMoney(const long double dAmount, const signed64 denom)
+{
+ long double adj = dAmount < 0 ? -0.5 : 0.5;
+ m_denom = denom;
+ m_num = static_cast<signed64> (dAmount * m_denom + adj);
+}
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+// Name: MyMoneyMoney
+// Purpose: Constructor - constructs object from an amount in a integer value
+// Returns: None
+// Throws: Nothing.
+// Arguments: iAmount - integer object containing amount
+// denom - denominator of the object
+//
+////////////////////////////////////////////////////////////////////////////////
+inline MyMoneyMoney::MyMoneyMoney(const int iAmount, const signed64 denom)
+{
+ if(!denom)
+ throw new MYMONEYEXCEPTION("Denominator 0 not allowed!");
+
+ m_num = static_cast<signed64>(iAmount);
+ m_denom = denom;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Name: MyMoneyMoney
+// Purpose: Copy Constructor - constructs object from another MyMoneyMoney object
+// Returns: None
+// Throws: Nothing.
+// Arguments: Amount - MyMoneyMoney object to be copied
+//
+////////////////////////////////////////////////////////////////////////////////
+inline MyMoneyMoney::MyMoneyMoney(const MyMoneyMoney& Amount)
+{
+ m_num = Amount.m_num;
+ m_denom = Amount.m_denom;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Name: operator=
+// Purpose: Assignment operator - modifies object from input MyMoneyMoney object
+// Returns: Const reference to the object
+// Throws: Nothing.
+// Arguments: Amount - MyMoneyMoney object to be modified from
+//
+////////////////////////////////////////////////////////////////////////////////
+inline const MyMoneyMoney& MyMoneyMoney::operator=(const MyMoneyMoney& Amount)
+{
+ m_num = Amount.m_num;
+ m_denom = Amount.m_denom;
+ return *this;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Name: operator=
+// Purpose: Assignment operator - modifies object from input NULL terminated
+// string
+// Returns: Const reference to the object
+// Throws: Nothing.
+// Arguments: pszAmount - NULL terminated string that contains amount
+//
+////////////////////////////////////////////////////////////////////////////////
+inline const MyMoneyMoney& MyMoneyMoney::operator=(const QString& pszAmount)
+{
+ *this = MyMoneyMoney( pszAmount );
+ return *this;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Name: operator==
+// Purpose: Compare equal operator - compares object with input MyMoneyMoney object
+// Returns: true if equal, otherwise false
+// Throws: Nothing.
+// Arguments: Amount - MyMoneyMoney object to be compared with
+//
+////////////////////////////////////////////////////////////////////////////////
+inline bool MyMoneyMoney::operator==(const MyMoneyMoney& Amount) const
+{
+ if(m_denom == Amount.m_denom)
+ return m_num == Amount.m_num;
+
+ if(m_num == 0 && Amount.m_num == 0)
+ return true;
+
+ return (*this - Amount).m_num == 0;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Name: operator!=
+// Purpose: Compare not equal operator - compares object with input MyMoneyMoney object
+// Returns: true if not equal, otherwise false
+// Throws: Nothing.
+// Arguments: Amount - MyMoneyMoney object to be compared with
+//
+////////////////////////////////////////////////////////////////////////////////
+inline bool MyMoneyMoney::operator!=(const MyMoneyMoney& Amount) const
+{
+ if(m_num == Amount.m_num && m_denom == Amount.m_denom)
+ return false;
+
+ return (*this - Amount).m_num != 0;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Name: operator<
+// Purpose: Compare less than operator - compares object with input MyMoneyMoney object
+// Returns: true if object less than input amount
+// Throws: Nothing.
+// Arguments: Amount - MyMoneyMoney object to be compared with
+//
+////////////////////////////////////////////////////////////////////////////////
+inline bool MyMoneyMoney::operator<(const MyMoneyMoney& Amount) const
+{
+ if(m_denom == Amount.m_denom)
+ return (m_num < Amount.m_num);
+
+ signed64 ab, ba;
+
+ ab = m_num * Amount.m_denom;
+ ba = m_denom * Amount.m_num;
+
+ return ( ab < ba ) ;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Name: operator>
+// Purpose: Compare greater than operator - compares object with input MyMoneyMoney
+// object
+// Returns: true if object greater than input amount
+// Throws: Nothing.
+// Arguments: Amount - MyMoneyMoney object to be compared with
+//
+////////////////////////////////////////////////////////////////////////////////
+inline bool MyMoneyMoney::operator>(const MyMoneyMoney& Amount) const
+{
+ if(m_denom == Amount.m_denom)
+ return (m_num > Amount.m_num);
+
+ signed64 ab, ba;
+
+ ab = m_num * Amount.m_denom;
+ ba = m_denom * Amount.m_num;
+
+ return ( ab > ba ) ;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Name: operator<=
+// Purpose: Compare less than equal to operator - compares object with input
+// MyMoneyMoney object
+// Returns: true if object less than or equal to input amount
+// Throws: Nothing.
+// Arguments: Amount - MyMoneyMoney object to be compared with
+//
+////////////////////////////////////////////////////////////////////////////////
+inline bool MyMoneyMoney::operator<=(const MyMoneyMoney& Amount) const
+{
+ if(m_denom == Amount.m_denom)
+ return (m_num <= Amount.m_num);
+
+ signed64 ab, ba;
+
+ ab = m_num * Amount.m_denom;
+ ba = m_denom * Amount.m_num;
+
+ return ( ab <= ba ) ;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Name: operator>=
+// Purpose: Compare greater than equal to operator - compares object with input
+// MyMoneyMoney object
+// Returns: true if object greater than or equal to input amount
+// Throws: Nothing.
+// Arguments: Amount - MyMoneyMoney object to be compared with
+//
+////////////////////////////////////////////////////////////////////////////////
+inline bool MyMoneyMoney::operator>=(const MyMoneyMoney& Amount) const
+{
+ if(m_denom == Amount.m_denom)
+ return (m_num >= Amount.m_num);
+
+ signed64 ab, ba;
+
+ ab = m_num * Amount.m_denom;
+ ba = m_denom * Amount.m_num;
+
+ return ( ab >= ba ) ;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Name: operator==
+// Purpose: Compare equal operator - compares object with input amount in a
+// NULL terminated string
+// Returns: true if equal, otherwise false
+// Throws: Nothing.
+// Arguments: pszAmount - NULL terminated string that contains amount
+//
+////////////////////////////////////////////////////////////////////////////////
+inline bool MyMoneyMoney::operator==(const QString& pszAmount) const
+{
+ MyMoneyMoney Amount( pszAmount );
+ return ( *this == Amount ) ;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Name: operator!=
+// Purpose: Compare not equal operator - compares object with input amount in
+// a NULL terminated string
+// Returns: true if not equal, otherwise false
+// Throws: Nothing.
+// Arguments: pszAmount - NULL terminated string that contains amount
+//
+////////////////////////////////////////////////////////////////////////////////
+inline bool MyMoneyMoney::operator!=(const QString& pszAmount) const
+{
+ MyMoneyMoney Amount( pszAmount );
+ return ( *this != Amount ) ;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Name: operator-
+// Purpose: Unary operator - returns the negative value from the object
+// Returns: The current object
+// Throws: Nothing.
+// Arguments: None
+//
+////////////////////////////////////////////////////////////////////////////////
+inline MyMoneyMoney MyMoneyMoney::operator-() const
+{
+ MyMoneyMoney result(*this);
+ result.m_num = -result.m_num;
+ return result;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Name: operator*
+// Purpose: Multiplication operator - multiplies the object with factor
+// Returns: The current object
+// Throws: Nothing.
+// Arguments: AmountInPence - signed64 object to be multiplied
+//
+////////////////////////////////////////////////////////////////////////////////
+inline MyMoneyMoney MyMoneyMoney::operator*(signed64 factor) const
+{
+ MyMoneyMoney result(*this);
+ result.m_num *= factor;
+ return result;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Name: operator*
+// Purpose: Multiplication operator - multiplies the object with factor
+// Returns: The current object
+// Throws: Nothing.
+// Arguments: AmountInPence - long object to be multiplied
+//
+////////////////////////////////////////////////////////////////////////////////
+inline MyMoneyMoney MyMoneyMoney::operator*(int factor) const
+{
+ MyMoneyMoney result(*this);
+ result.m_num *= factor;
+ return result;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Name: operator+=
+// Purpose: Addition operator - adds the input amount to the object together
+// Returns: Reference to the current object
+// Throws: Nothing.
+// Arguments: AmountInPence - MyMoneyMoney object to be added
+//
+////////////////////////////////////////////////////////////////////////////////
+inline MyMoneyMoney& MyMoneyMoney::operator+=(const MyMoneyMoney& AmountInPence)
+{
+ *this = *this + AmountInPence;
+ return *this;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Name: operator-=
+// Purpose: Subtraction operator - subtracts the input amount from the object
+// Returns: Reference to the current object
+// Throws: Nothing.
+// Arguments: AmountInPence - MyMoneyMoney object to be subtracted
+//
+////////////////////////////////////////////////////////////////////////////////
+inline MyMoneyMoney& MyMoneyMoney::operator-=(const MyMoneyMoney& AmountInPence)
+{
+ *this = *this - AmountInPence;
+ return *this;
+}
+
+inline MyMoneyMoney& MyMoneyMoney::operator/=(const MyMoneyMoney& AmountInPence)
+{
+ *this = *this / AmountInPence;
+ return *this;
+}
+
+#endif
+
diff --git a/kmymoney2/mymoney/mymoneymoneytest.cpp b/kmymoney2/mymoney/mymoneymoneytest.cpp
new file mode 100644
index 0000000..64c2961
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneymoneytest.cpp
@@ -0,0 +1,591 @@
+/***************************************************************************
+ mymoneymoneytest.cpp
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// make sure, that this is defined before we even include any other header file
+#ifndef __STDC_LIMIT_MACROS
+ #define __STDC_LIMIT_MACROS // force definition of min and max values
+#endif
+
+#include "mymoneymoneytest.h"
+#include "mymoneyexception.h"
+#include <iostream>
+#include <stdint.h>
+
+// make sure, we have the correct suffix
+#if SIZEOF_LONG == 8
+#define LLCONST(a) a ## L
+#else
+#define LLCONST(a) a ## LL
+#endif
+
+MyMoneyMoneyTest::MyMoneyMoneyTest()
+{
+}
+
+
+void MyMoneyMoneyTest::setUp()
+{
+ m_0 = new MyMoneyMoney(12);
+ m_1 = new MyMoneyMoney(-10);
+ m_2 = new MyMoneyMoney(2);
+ m_3 = new MyMoneyMoney(123,1);
+ m_4 = new MyMoneyMoney(1234,1000);
+ m_5 = new MyMoneyMoney(195883,100000);
+
+ MyMoneyMoney::setDecimalSeparator('.');
+ MyMoneyMoney::setThousandSeparator(',');
+ MyMoneyMoney::setNegativeMonetarySignPosition(MyMoneyMoney::BeforeQuantityMoney);
+}
+
+void MyMoneyMoneyTest::tearDown()
+{
+ delete m_0;
+ delete m_1;
+ delete m_2;
+ delete m_3;
+ delete m_4;
+ delete m_5;
+}
+
+void MyMoneyMoneyTest::testEmptyConstructor()
+{
+ MyMoneyMoney *m = new MyMoneyMoney();
+ CPPUNIT_ASSERT(m->m_num == 0);
+ CPPUNIT_ASSERT(m->m_denom == 1);
+ delete m;
+}
+
+void MyMoneyMoneyTest::testIntConstructor()
+{
+ CPPUNIT_ASSERT(m_0->m_num == 12);
+ CPPUNIT_ASSERT(m_0->m_denom == 100);
+
+ MyMoneyMoney a(123, 10000);
+ CPPUNIT_ASSERT(a.m_num == 123);
+ CPPUNIT_ASSERT(a.m_denom == 10000);
+}
+
+void MyMoneyMoneyTest::testAssignment()
+{
+ MyMoneyMoney *m = new MyMoneyMoney();
+ *m = *m_1;
+ CPPUNIT_ASSERT(m->m_num == -10);
+ CPPUNIT_ASSERT(m->m_denom == 100);
+#if 0
+ *m = 0;
+ CPPUNIT_ASSERT(m->m_num == 0);
+ CPPUNIT_ASSERT(m->m_denom == 100);
+
+ *m = 777888999;
+ CPPUNIT_ASSERT(m->m_num == 777888999);
+ CPPUNIT_ASSERT(m->m_denom == 100);
+
+ *m = (int)-5678;
+ CPPUNIT_ASSERT(m->m_num == -5678);
+ CPPUNIT_ASSERT(m->m_denom == 100);
+
+ *m = QString("-987");
+ CPPUNIT_ASSERT(m->m_num == -987);
+ CPPUNIT_ASSERT(m->m_denom == 1);
+
+ *m = QString("9998887776665554.44");
+ CPPUNIT_ASSERT(m->m_num == 999888777666555444LL);
+ CPPUNIT_ASSERT(m->m_denom == 100);
+
+ *m = QString("-99988877766655.444");
+ CPPUNIT_ASSERT(m->m_num == -99988877766655444LL);
+ CPPUNIT_ASSERT(m->m_denom == 1000);
+
+ *m = -666555444333222111LL;
+ CPPUNIT_ASSERT(m->m_num == -666555444333222111LL);
+ CPPUNIT_ASSERT(m->m_denom == 100);
+#endif
+ delete m;
+}
+
+void MyMoneyMoneyTest::testStringConstructor()
+{
+ MyMoneyMoney *m1 = new MyMoneyMoney("-999666555444");
+ CPPUNIT_ASSERT(m1->m_num == LLCONST(-999666555444));
+ CPPUNIT_ASSERT(m1->m_denom == 1);
+
+ MyMoneyMoney *m2 = new MyMoneyMoney("4445556669.99");
+ CPPUNIT_ASSERT(m2->m_num == LLCONST(444555666999));
+ CPPUNIT_ASSERT(m2->m_denom == 100);
+
+ delete m1;
+ delete m2;
+
+ m1 = new MyMoneyMoney("");
+ CPPUNIT_ASSERT(m1->m_num == LLCONST(0));
+ CPPUNIT_ASSERT(m1->m_denom == 1);
+ delete m1;
+
+ m1 = new MyMoneyMoney("1,123.");
+ CPPUNIT_ASSERT(m1->m_num == LLCONST(1123));
+ CPPUNIT_ASSERT(m1->m_denom == 1);
+ delete m1;
+
+ m1 = new MyMoneyMoney("123.1");
+ CPPUNIT_ASSERT(m1->m_num == LLCONST(1231));
+ CPPUNIT_ASSERT(m1->m_denom == 10);
+ delete m1;
+
+ m1 = new MyMoneyMoney("123.456");
+ CPPUNIT_ASSERT(m1->m_num == LLCONST(123456));
+ CPPUNIT_ASSERT(m1->m_denom == 1000);
+ delete m1;
+
+ m1 = new MyMoneyMoney("12345/100");
+ CPPUNIT_ASSERT(m1->m_num == LLCONST(12345));
+ CPPUNIT_ASSERT(m1->m_denom == 100);
+ delete m1;
+
+ MyMoneyMoney::setDecimalSeparator(',');
+ MyMoneyMoney::setThousandSeparator('.');
+ MyMoneyMoney::setNegativeMonetarySignPosition(MyMoneyMoney::ParensAround);
+ m1 = new MyMoneyMoney("x1.234,567 EUR");
+ CPPUNIT_ASSERT(m1->m_num == LLCONST(1234567));
+ CPPUNIT_ASSERT(m1->m_denom == 1000);
+ delete m1;
+
+ m1 = new MyMoneyMoney("x(1.234,567) EUR");
+ CPPUNIT_ASSERT(m1->m_num == LLCONST(-1234567));
+ CPPUNIT_ASSERT(m1->m_denom == 1000);
+ delete m1;
+
+ m1 = new MyMoneyMoney("1 5/8");
+ CPPUNIT_ASSERT(m1->m_num == LLCONST(13));
+ CPPUNIT_ASSERT(m1->m_denom == 8);
+ delete m1;
+}
+
+void MyMoneyMoneyTest::testConvert()
+{
+ MyMoneyMoney a("123.456");
+ MyMoneyMoney b = a.convert(100);
+ CPPUNIT_ASSERT(b.m_num == 12346);
+ CPPUNIT_ASSERT(b.m_denom == 100);
+ a = QString("-123.456");
+ b = a.convert(100);
+ CPPUNIT_ASSERT(b.m_num == -12346);
+ CPPUNIT_ASSERT(b.m_denom == 100);
+
+ a = QString("123.1");
+ b = a.convert(100);
+ CPPUNIT_ASSERT(b.m_num == 12310);
+ CPPUNIT_ASSERT(b.m_denom == 100);
+
+ a = QString("-73010.28");
+ b = QString("1.95583");
+ CPPUNIT_ASSERT((a * b).convert(100) == QString("-142795.70"));
+
+ a = QString("-142795.69");
+ CPPUNIT_ASSERT((a / b).convert(100) == QString("-73010.28"));
+}
+
+void MyMoneyMoneyTest::testEquality()
+{
+ CPPUNIT_ASSERT (*m_1 == *m_1);
+ CPPUNIT_ASSERT (!(*m_1 == *m_0));
+
+ MyMoneyMoney m1(LLCONST(999666555444));
+ MyMoneyMoney m2(LLCONST(999666555444));
+ CPPUNIT_ASSERT(m1 == m2);
+
+ MyMoneyMoney m3(LLCONST(-999666555444));
+ MyMoneyMoney m4(LLCONST(-999666555444));
+ CPPUNIT_ASSERT(m3 == m4);
+
+ MyMoneyMoney m5(1230,100);
+ MyMoneyMoney m6(123,10);
+ MyMoneyMoney m7(246,20);
+ CPPUNIT_ASSERT(m5 == m6);
+ CPPUNIT_ASSERT(m5 == m7);
+
+ CPPUNIT_ASSERT(m5 == QString("369/30"));
+
+ CPPUNIT_ASSERT(MyMoneyMoney::autoCalc == MyMoneyMoney::autoCalc);
+}
+
+void MyMoneyMoneyTest::testInequality()
+{
+ CPPUNIT_ASSERT (*m_1 != *m_0);
+ CPPUNIT_ASSERT (!(*m_1 != *m_1));
+
+ MyMoneyMoney m1(LLCONST(999666555444));
+ MyMoneyMoney m2(LLCONST(-999666555444));
+ CPPUNIT_ASSERT(m1 != m2);
+
+ MyMoneyMoney m3(LLCONST(-999666555444));
+ MyMoneyMoney m4(LLCONST(999666555444));
+ CPPUNIT_ASSERT(m3 != m4);
+
+ CPPUNIT_ASSERT(m4 != QString("999666555444"));
+
+ CPPUNIT_ASSERT(MyMoneyMoney::autoCalc != MyMoneyMoney(1,100));
+ CPPUNIT_ASSERT(MyMoneyMoney(1,100) != MyMoneyMoney::autoCalc);
+}
+
+
+void MyMoneyMoneyTest::testAddition()
+{
+ CPPUNIT_ASSERT (*m_0 + *m_1 == *m_2);
+
+ MyMoneyMoney m1(100);
+
+ // CPPUNIT_ASSERT((m1 + 50) == MyMoneyMoney(51,1));
+ // CPPUNIT_ASSERT((m1 + 1000000000) == MyMoneyMoney(1000000001,1));
+ // CPPUNIT_ASSERT((m1 + -50) == MyMoneyMoney(-49,1));
+
+ CPPUNIT_ASSERT((m1 += *m_0) == MyMoneyMoney(112));
+ // CPPUNIT_ASSERT((m1 += -12) == MyMoneyMoney(100));
+
+ // m1++;
+ // CPPUNIT_ASSERT(m1 == MyMoneyMoney(101));
+ // CPPUNIT_ASSERT((++m1) == MyMoneyMoney(102));
+
+ m1 = QString("123.20");
+ MyMoneyMoney m2(40, 1000);
+ CPPUNIT_ASSERT((m1 + m2) == QString("123.24"));
+
+ m1 += m2;
+ CPPUNIT_ASSERT(m1.m_num == 123240);
+ CPPUNIT_ASSERT(m1.m_denom == 1000);
+}
+
+void MyMoneyMoneyTest::testSubtraction()
+{
+ CPPUNIT_ASSERT (*m_2 - *m_1 == *m_0);
+
+ MyMoneyMoney m1(100);
+
+ // CPPUNIT_ASSERT((m1-50) == MyMoneyMoney(-49,1));
+ // CPPUNIT_ASSERT((m1-1000000000) == MyMoneyMoney(-999999999,1));
+ // CPPUNIT_ASSERT((m1 - -50) == MyMoneyMoney(51,1));
+
+ CPPUNIT_ASSERT((m1 -= *m_0) == MyMoneyMoney(88));
+ // CPPUNIT_ASSERT((m1 -= -12) == MyMoneyMoney(100));
+
+ // m1--;
+ // CPPUNIT_ASSERT(m1 == MyMoneyMoney(99));
+ // CPPUNIT_ASSERT((--m1) == MyMoneyMoney(98));
+
+ m1 = QString("123.20");
+ MyMoneyMoney m2(1, 5);
+ CPPUNIT_ASSERT((m1 - m2) == MyMoneyMoney(123,1));
+
+ m1 -= m2;
+ CPPUNIT_ASSERT(m1.m_num == 12300);
+ CPPUNIT_ASSERT(m1.m_denom == 100);
+}
+
+void MyMoneyMoneyTest::testMultiplication()
+{
+ MyMoneyMoney m1(100,1);
+
+ CPPUNIT_ASSERT((m1 * MyMoneyMoney(50,1)) == MyMoneyMoney(5000,1));
+ CPPUNIT_ASSERT((m1 * MyMoneyMoney(10000000,1)) == MyMoneyMoney(1000000000,1));
+ CPPUNIT_ASSERT((m1 * (*m_0)) == MyMoneyMoney(1200));
+
+ MyMoneyMoney m2 = QString("-73010.28");
+ m1 = QString("1.95583");
+ CPPUNIT_ASSERT((m1 * m2) == QString("-142795.6959324"));
+}
+
+void MyMoneyMoneyTest::testDivision()
+{
+ MyMoneyMoney m1(100);
+ CPPUNIT_ASSERT((m1 / MyMoneyMoney(50)) == MyMoneyMoney(2,1));
+
+ MyMoneyMoney m2 = QString("-142795.69");
+ m1 = QString("1.95583");
+ CPPUNIT_ASSERT((m2 / m1).convert(100000000) == QString("-73010.27696681"));
+
+ MyMoneyMoney m3 = MyMoneyMoney(0) / MyMoneyMoney(100);
+ CPPUNIT_ASSERT(m3.m_num == 0);
+ CPPUNIT_ASSERT(m3.m_denom != 0);
+}
+
+void MyMoneyMoneyTest::testSetDecimalSeparator()
+{
+ MyMoneyMoney m1(100000);
+ MyMoneyMoney m2(200000);
+
+ CPPUNIT_ASSERT(m1.formatMoney("", 2) == QString("1,000.00"));
+ CPPUNIT_ASSERT(MyMoneyMoney::decimalSeparator() == '.');
+
+ MyMoneyMoney::setDecimalSeparator(':');
+ CPPUNIT_ASSERT(m1.formatMoney("", 2) == QString("1,000:00"));
+ CPPUNIT_ASSERT(m2.formatMoney("", 2) == QString("2,000:00"));
+
+ CPPUNIT_ASSERT(MyMoneyMoney::decimalSeparator() == ':');
+}
+
+void MyMoneyMoneyTest::testSetThousandSeparator()
+{
+ MyMoneyMoney m1(100000);
+ MyMoneyMoney m2(200000);
+
+ CPPUNIT_ASSERT(m1.formatMoney("", 2) == QString("1,000.00"));
+ CPPUNIT_ASSERT(MyMoneyMoney::thousandSeparator() == ',');
+
+ MyMoneyMoney::setThousandSeparator(':');
+ CPPUNIT_ASSERT(m1.formatMoney("", 2) == QString("1:000.00"));
+ CPPUNIT_ASSERT(m2.formatMoney("", 2) == QString("2:000.00"));
+
+ CPPUNIT_ASSERT(MyMoneyMoney::thousandSeparator() == ':');
+}
+
+void MyMoneyMoneyTest::testFormatMoney()
+{
+ CPPUNIT_ASSERT(m_0->formatMoney("", 2) == QString("0.12"));
+ CPPUNIT_ASSERT(m_1->formatMoney("", 2) == QString("-0.10"));
+
+ MyMoneyMoney m1(10099);
+ CPPUNIT_ASSERT(m1.formatMoney("", 2) == QString("100.99"));
+
+ m1 = MyMoneyMoney(100,1);
+ CPPUNIT_ASSERT(m1.formatMoney("", 2) == QString("100.00"));
+ CPPUNIT_ASSERT(m1.formatMoney("", -1) == QString("100"));
+
+ m1 = m1 * 10;
+ CPPUNIT_ASSERT(m1.formatMoney("", 2) == QString("1,000.00"));
+ CPPUNIT_ASSERT(m1.formatMoney("", -1) == QString("1,000"));
+ CPPUNIT_ASSERT(m1.formatMoney("", -1, false) == QString("1000"));
+ CPPUNIT_ASSERT(m1.formatMoney("", 3, false) == QString("1000.000"));
+
+ m1 = MyMoneyMoney(INT64_MAX, 100);
+ CPPUNIT_ASSERT(m1.formatMoney("", 2) == QString("92,233,720,368,547,758.07"));
+ CPPUNIT_ASSERT(m1.formatMoney(100) == QString("92,233,720,368,547,758.07"));
+ CPPUNIT_ASSERT(m1.formatMoney("", 2, false) == QString("92233720368547758.07"));
+ CPPUNIT_ASSERT(m1.formatMoney(100, false) == QString("92233720368547758.07"));
+
+ m1 = MyMoneyMoney(INT64_MIN, 100);
+ CPPUNIT_ASSERT(m1.formatMoney("", 2) == QString("-92,233,720,368,547,758.08"));
+ CPPUNIT_ASSERT(m1.formatMoney(100) == QString("-92,233,720,368,547,758.08"));
+ CPPUNIT_ASSERT(m1.formatMoney("", 2, false) == QString("-92233720368547758.08"));
+ CPPUNIT_ASSERT(m1.formatMoney(100, false) == QString("-92233720368547758.08"));
+
+ m1 = MyMoneyMoney(1,5);
+ CPPUNIT_ASSERT(m1.formatMoney("", 2) == QString("0.20"));
+ CPPUNIT_ASSERT(m1.formatMoney(1000) == QString("0.200"));
+ CPPUNIT_ASSERT(m1.formatMoney(100) == QString("0.20"));
+ CPPUNIT_ASSERT(m1.formatMoney(10) == QString("0.2"));
+
+ m1 = MyMoneyMoney(13333,5000);
+ CPPUNIT_ASSERT(m1.formatMoney("", 10) == QString("2.6666000000"));
+
+ m1 = MyMoneyMoney(-1404,100);
+ CPPUNIT_ASSERT(m1.formatMoney("",-1) == QString("-14.04"));
+}
+
+void MyMoneyMoneyTest::testRelation()
+{
+ MyMoneyMoney m1(100);
+ MyMoneyMoney m2(50);
+ MyMoneyMoney m3(100);
+
+ // tests with same denominator
+ CPPUNIT_ASSERT(m1 > m2);
+ CPPUNIT_ASSERT(m2 < m1);
+
+ CPPUNIT_ASSERT(m1 <= m3);
+ CPPUNIT_ASSERT(m3 >= m1);
+ CPPUNIT_ASSERT(m1 <= m1);
+ CPPUNIT_ASSERT(m3 >= m3);
+
+ // tests with different denominator
+ m1 = QString("1/8");
+ m2 = QString("1/7");
+ CPPUNIT_ASSERT(m1 < m2);
+ CPPUNIT_ASSERT(m2 > m1);
+ m2 = QString("-1/7");
+ CPPUNIT_ASSERT(m2 < m1);
+ CPPUNIT_ASSERT(m1 > m2);
+ CPPUNIT_ASSERT(m1 >= m2);
+ CPPUNIT_ASSERT(m2 <= m1);
+
+ m1 = QString("-2/14");
+ CPPUNIT_ASSERT(m1 >= m2);
+ CPPUNIT_ASSERT(m1 <= m2);
+
+}
+
+void MyMoneyMoneyTest::testUnaryMinus()
+{
+ MyMoneyMoney m1(100);
+ MyMoneyMoney m2;
+
+ m2 = -m1;
+
+ CPPUNIT_ASSERT(m1 == MyMoneyMoney(100));
+ CPPUNIT_ASSERT(m2 == MyMoneyMoney(-100));
+}
+
+void MyMoneyMoneyTest::testDoubleConstructor()
+{
+ for(int i = -123456; i < 123456; ++i) {
+ double d = i;
+ MyMoneyMoney r(i);
+ d /= 100;
+ MyMoneyMoney t(d);
+ CPPUNIT_ASSERT(t == r);
+ }
+}
+
+void MyMoneyMoneyTest::testAbsoluteFunction()
+{
+ MyMoneyMoney m1(-100);
+ MyMoneyMoney m2(100);
+
+ CPPUNIT_ASSERT(m2.abs() == MyMoneyMoney(100));
+ CPPUNIT_ASSERT(m1.abs() == MyMoneyMoney(100));
+}
+
+void MyMoneyMoneyTest::testToString()
+{
+ MyMoneyMoney m1(-100);
+ MyMoneyMoney m2(1234);
+ MyMoneyMoney m3;
+
+ CPPUNIT_ASSERT(m1.toString() == QString("-100/100"));
+ CPPUNIT_ASSERT(m2.toString() == QString("1234/100"));
+ CPPUNIT_ASSERT(m3.toString() == QString("0/1"));
+}
+
+void MyMoneyMoneyTest::testNegativeSignPos(void)
+{
+ MyMoneyMoney m("-123456/100");
+
+ MyMoneyMoney::signPosition pos = MyMoneyMoney::negativeMonetarySignPosition();
+
+ MyMoneyMoney::setNegativePrefixCurrencySymbol(false);
+ MyMoneyMoney::setNegativeMonetarySignPosition(MyMoneyMoney::ParensAround);
+ CPPUNIT_ASSERT(m.formatMoney("CUR", 2) == "(1,234.56) CUR");
+ MyMoneyMoney::setNegativeMonetarySignPosition(MyMoneyMoney::BeforeQuantityMoney);
+ CPPUNIT_ASSERT(m.formatMoney("CUR", 2) == "-1,234.56 CUR");
+ MyMoneyMoney::setNegativeMonetarySignPosition(MyMoneyMoney::AfterQuantityMoney);
+ CPPUNIT_ASSERT(m.formatMoney("CUR", 2) == "1,234.56- CUR");
+ MyMoneyMoney::setNegativeMonetarySignPosition(MyMoneyMoney::BeforeMoney);
+ CPPUNIT_ASSERT(m.formatMoney("CUR", 2) == "1,234.56 -CUR");
+ MyMoneyMoney::setNegativeMonetarySignPosition(MyMoneyMoney::AfterMoney);
+ CPPUNIT_ASSERT(m.formatMoney("CUR", 2) == "1,234.56 CUR-");
+
+ MyMoneyMoney::setNegativePrefixCurrencySymbol(true);
+ MyMoneyMoney::setNegativeMonetarySignPosition(MyMoneyMoney::ParensAround);
+ CPPUNIT_ASSERT(m.formatMoney("CUR", 2) == "CUR (1,234.56)");
+ MyMoneyMoney::setNegativeMonetarySignPosition(MyMoneyMoney::BeforeQuantityMoney);
+ CPPUNIT_ASSERT(m.formatMoney("CUR", 2) == "CUR -1,234.56");
+ MyMoneyMoney::setNegativeMonetarySignPosition(MyMoneyMoney::AfterQuantityMoney);
+ CPPUNIT_ASSERT(m.formatMoney("CUR", 2) == "CUR 1,234.56-");
+ MyMoneyMoney::setNegativeMonetarySignPosition(MyMoneyMoney::BeforeMoney);
+ CPPUNIT_ASSERT(m.formatMoney("CUR", 2) == "-CUR 1,234.56");
+ MyMoneyMoney::setNegativeMonetarySignPosition(MyMoneyMoney::AfterMoney);
+ CPPUNIT_ASSERT(m.formatMoney("CUR", 2) == "CUR- 1,234.56");
+
+ MyMoneyMoney::setNegativeMonetarySignPosition(pos);
+}
+
+void MyMoneyMoneyTest::testPositiveSignPos(void)
+{
+ MyMoneyMoney m("123456/100");
+
+ MyMoneyMoney::signPosition pos = MyMoneyMoney::positiveMonetarySignPosition();
+
+ MyMoneyMoney::setPositivePrefixCurrencySymbol(false);
+ MyMoneyMoney::setPositiveMonetarySignPosition(MyMoneyMoney::ParensAround);
+ CPPUNIT_ASSERT(m.formatMoney("CUR", 2) == "(1,234.56) CUR");
+ MyMoneyMoney::setPositiveMonetarySignPosition(MyMoneyMoney::BeforeQuantityMoney);
+ CPPUNIT_ASSERT(m.formatMoney("CUR", 2) == "1,234.56 CUR");
+ MyMoneyMoney::setPositiveMonetarySignPosition(MyMoneyMoney::AfterQuantityMoney);
+ CPPUNIT_ASSERT(m.formatMoney("CUR", 2) == "1,234.56 CUR");
+ MyMoneyMoney::setPositiveMonetarySignPosition(MyMoneyMoney::BeforeMoney);
+ CPPUNIT_ASSERT(m.formatMoney("CUR", 2) == "1,234.56 CUR");
+ MyMoneyMoney::setPositiveMonetarySignPosition(MyMoneyMoney::AfterMoney);
+ CPPUNIT_ASSERT(m.formatMoney("CUR", 2) == "1,234.56 CUR");
+
+ MyMoneyMoney::setPositivePrefixCurrencySymbol(true);
+ MyMoneyMoney::setPositiveMonetarySignPosition(MyMoneyMoney::ParensAround);
+ CPPUNIT_ASSERT(m.formatMoney("CUR", 2) == "CUR (1,234.56)");
+ MyMoneyMoney::setPositiveMonetarySignPosition(MyMoneyMoney::BeforeQuantityMoney);
+ CPPUNIT_ASSERT(m.formatMoney("CUR", 2) == "CUR 1,234.56");
+ MyMoneyMoney::setPositiveMonetarySignPosition(MyMoneyMoney::AfterQuantityMoney);
+ CPPUNIT_ASSERT(m.formatMoney("CUR", 2) == "CUR 1,234.56");
+ MyMoneyMoney::setPositiveMonetarySignPosition(MyMoneyMoney::BeforeMoney);
+ CPPUNIT_ASSERT(m.formatMoney("CUR", 2) == "CUR 1,234.56");
+ MyMoneyMoney::setPositiveMonetarySignPosition(MyMoneyMoney::AfterMoney);
+ CPPUNIT_ASSERT(m.formatMoney("CUR", 2) == "CUR 1,234.56");
+
+ MyMoneyMoney::setPositiveMonetarySignPosition(pos);
+}
+
+void MyMoneyMoneyTest::testNegativeStringConstructor(void)
+{
+ MyMoneyMoney *m1;
+ MyMoneyMoney::setDecimalSeparator(',');
+ MyMoneyMoney::setThousandSeparator('.');
+ MyMoneyMoney::setNegativeMonetarySignPosition(MyMoneyMoney::ParensAround);
+ m1 = new MyMoneyMoney("x(1.234,567) EUR");
+ CPPUNIT_ASSERT(m1->m_num == LLCONST(-1234567));
+ CPPUNIT_ASSERT(m1->m_denom == 1000);
+ delete m1;
+ MyMoneyMoney::setNegativeMonetarySignPosition(MyMoneyMoney::BeforeQuantityMoney);
+ m1 = new MyMoneyMoney("x1.234,567- EUR");
+ CPPUNIT_ASSERT(m1->m_num == LLCONST(-1234567));
+ CPPUNIT_ASSERT(m1->m_denom == 1000);
+ delete m1;
+ m1 = new MyMoneyMoney("x1.234,567 -EUR");
+ CPPUNIT_ASSERT(m1->m_num == LLCONST(-1234567));
+ CPPUNIT_ASSERT(m1->m_denom == 1000);
+ delete m1;
+ m1 = new MyMoneyMoney("-1.234,567 EUR");
+ CPPUNIT_ASSERT(m1->m_num == LLCONST(-1234567));
+ CPPUNIT_ASSERT(m1->m_denom == 1000);
+ delete m1;
+}
+
+void MyMoneyMoneyTest::testReduce(void)
+{
+ MyMoneyMoney a(36488100, 1267390000);
+ MyMoneyMoney b(-a);
+
+ a = a.reduce();
+ CPPUNIT_ASSERT(a.m_num == 364881);
+ CPPUNIT_ASSERT(a.m_denom == 12673900);
+
+ b = b.reduce();
+ CPPUNIT_ASSERT(b.m_num == -364881);
+ CPPUNIT_ASSERT(b.m_denom == 12673900);
+}
+
+void MyMoneyMoneyTest::testZeroDenominator()
+{
+ try {
+ MyMoneyMoney m((int)1, 0);
+ CPPUNIT_FAIL("Missing expected exception");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+
+ try {
+ MyMoneyMoney m((signed64)1, 0);
+ CPPUNIT_FAIL("Missing expected exception");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+}
+
diff --git a/kmymoney2/mymoney/mymoneymoneytest.h b/kmymoney2/mymoney/mymoneymoneytest.h
new file mode 100644
index 0000000..ffb2c0e
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneymoneytest.h
@@ -0,0 +1,99 @@
+/***************************************************************************
+ mymoneymoneytest.h
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef __MYMONEYMONEYTEST_H__
+#define __MYMONEYMONEYTEST_H__
+
+// Check for standard definitions
+#ifdef HAVE_STDINT_H
+ #ifndef __STDC_LIMIT_MACROS
+ #define __STDC_LIMIT_MACROS // force definition of min and max values
+ #endif
+ #include <stdint.h>
+#else
+ #include <limits.h>
+ #define INT64_MAX LLONG_MAX
+ #define INT64_MIN LLONG_MIN
+#endif
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#define private public
+#include "mymoneymoney.h"
+#undef private
+
+class MyMoneyMoneyTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(MyMoneyMoneyTest);
+ CPPUNIT_TEST(testEmptyConstructor);
+ CPPUNIT_TEST(testIntConstructor);
+ CPPUNIT_TEST(testStringConstructor);
+ CPPUNIT_TEST(testAssignment);
+ CPPUNIT_TEST(testConvert);
+ CPPUNIT_TEST(testEquality);
+ CPPUNIT_TEST(testInequality);
+ CPPUNIT_TEST(testAddition);
+ CPPUNIT_TEST(testSubtraction);
+ CPPUNIT_TEST(testMultiplication);
+ CPPUNIT_TEST(testDivision);
+ CPPUNIT_TEST(testSetDecimalSeparator);
+ CPPUNIT_TEST(testSetThousandSeparator);
+ CPPUNIT_TEST(testFormatMoney);
+ CPPUNIT_TEST(testRelation);
+ CPPUNIT_TEST(testUnaryMinus);
+ CPPUNIT_TEST(testDoubleConstructor);
+ CPPUNIT_TEST(testAbsoluteFunction);
+ CPPUNIT_TEST(testToString);
+ CPPUNIT_TEST(testNegativeSignPos);
+ CPPUNIT_TEST(testPositiveSignPos);
+ CPPUNIT_TEST(testNegativeStringConstructor);
+ CPPUNIT_TEST(testReduce);
+ CPPUNIT_TEST(testZeroDenominator);
+ CPPUNIT_TEST_SUITE_END();
+
+protected:
+ MyMoneyMoney *m_0, *m_1, *m_2, *m_3, *m_4, *m_5;
+public:
+ MyMoneyMoneyTest();
+
+ void setUp();
+ void tearDown();
+ void testEmptyConstructor();
+ void testIntConstructor();
+ void testStringConstructor();
+ void testAssignment();
+ void testConvert();
+ void testEquality();
+ void testInequality();
+ void testAddition();
+ void testSubtraction();
+ void testMultiplication();
+ void testDivision();
+ void testFormatMoney();
+ void testSetDecimalSeparator();
+ void testSetThousandSeparator();
+ void testRelation();
+ void testUnaryMinus();
+ void testDoubleConstructor();
+ void testAbsoluteFunction();
+ void testToString();
+ void testNegativeSignPos();
+ void testPositiveSignPos();
+ void testNegativeStringConstructor();
+ void testReduce();
+ void testZeroDenominator();
+};
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneyobject.cpp b/kmymoney2/mymoney/mymoneyobject.cpp
new file mode 100644
index 0000000..7939ff0
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyobject.cpp
@@ -0,0 +1,74 @@
+/***************************************************************************
+ mymoneyobject.cpp
+ -------------------
+ copyright : (C) 2005 by Thomas Baumagrt
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoneyobject.h"
+#include "mymoneyutils.h"
+#include "mymoneyexception.h"
+
+const QString MyMoneyObject::m_emptyId;
+
+MyMoneyObject::MyMoneyObject(const QString& id)
+{
+ m_id = id;
+}
+
+MyMoneyObject::MyMoneyObject(const QDomElement& el, const bool forceId)
+{
+ m_id = QStringEmpty(el.attribute("id"));
+ if(m_id.length() == 0 && forceId)
+ throw new MYMONEYEXCEPTION("Node has no ID");
+}
+
+MyMoneyObject::MyMoneyObject()
+{
+}
+
+MyMoneyObject::~MyMoneyObject()
+{
+}
+
+void MyMoneyObject::setId(const QString& id)
+{
+ m_id = id;
+}
+
+bool MyMoneyObject::operator == (const MyMoneyObject& right) const
+{
+ return m_id == right.m_id;
+}
+
+void MyMoneyObject::clearId(void)
+{
+ m_id = QString();
+}
+
+const QString& MyMoneyObject::emptyId(void)
+{
+ return m_emptyId;
+}
+
+void MyMoneyObject::writeBaseXML(QDomDocument& document, QDomElement& el) const
+{
+ Q_UNUSED(document);
+
+ el.setAttribute("id", m_id);
+}
diff --git a/kmymoney2/mymoney/mymoneyobject.h b/kmymoney2/mymoney/mymoneyobject.h
new file mode 100644
index 0000000..d07296b
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyobject.h
@@ -0,0 +1,129 @@
+/***************************************************************************
+ mymoneyobject.h
+ -------------------
+ copyright : (C) 2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYOBJECT_H
+#define MYMONEYOBJECT_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstring.h>
+#include <qdom.h>
+#include <qdatetime.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/export.h>
+
+/**
+ * @author Thomas Baumgart
+ */
+
+/**
+ * This class represents the base class of all MyMoney objects.
+ */
+class KMYMONEY_EXPORT MyMoneyObject
+{
+public:
+ /**
+ * This is the constructor for the MyMoneyObject object
+ */
+ MyMoneyObject();
+
+ /**
+ * This is the destructor for the MyMoneyObject object
+ */
+ virtual ~MyMoneyObject();
+
+ /**
+ * This method retrieves the id of the object
+ *
+ * @return ID of object
+ */
+ const QString& id(void) const { return m_id; };
+
+ /**
+ * This method clears the id of the object
+ */
+ void clearId(void);
+
+ /**
+ * This method must be provided by all derived objects. It returns,
+ * a @p true if the object is referencing the one requested by the
+ * parameter @p id. If it does not, this method returns @p false.
+ *
+ * @param id id of the object to be checked for references
+ * @retval true This object references object with id @p id.
+ * @retval false This object does not reference the object with id @p id.
+ */
+ virtual bool hasReferenceTo(const QString& id) const = 0;
+
+ /**
+ * This method creates a QDomElement for the @p document
+ * under the parent node @p parent.
+ *
+ * @param document reference to QDomDocument
+ * @param parent reference to QDomElement parent node
+ */
+ virtual void writeXML(QDomDocument& document, QDomElement& parent) const = 0;
+
+ bool operator == (const MyMoneyObject& right) const;
+
+ static const QString& emptyId(void);
+
+protected:
+ /**
+ * This contructor assigns the id to the MyMoneyObject
+ *
+ * @param id ID of object
+ */
+ MyMoneyObject(const QString& id);
+
+ /**
+ * This contructor reads the id from the @p id attribute of the
+ * QDomElement.
+ *
+ * @param node const reference to the QDomElement from which to
+ * obtain the id of the object
+ * @param forceId flag to be able to suppress enforcement of an id
+ * defaults to true which requires the node to have an
+ * attribute with name @p id. If it does not contain such
+ * an attribute, an exception will be thrown. If @p forceId
+ * is false, no check for an id is performed. This will be
+ * used by objects, which are stored w/o id (eg. splits,
+ * transactions within schedules)
+ */
+ MyMoneyObject(const QDomElement& node, const bool forceId = true);
+
+ void setId(const QString& id) /* __attribute__ ((deprecated)) */;
+
+ /**
+ * This method writes out the members contained in this object.
+ */
+ void writeBaseXML(QDomDocument& document, QDomElement& el) const;
+
+protected:
+ QString m_id;
+ static const QString m_emptyId;
+};
+
+#endif
+
diff --git a/kmymoney2/mymoney/mymoneyobjectcontainer.cpp b/kmymoney2/mymoney/mymoneyobjectcontainer.cpp
new file mode 100644
index 0000000..666da3b
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyobjectcontainer.cpp
@@ -0,0 +1,218 @@
+/***************************************************************************
+ mymoneyobjectcontainer.cpp
+ -------------------
+ copyright : (C) 2006 by Thomas Baumagrt
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyobjectcontainer.h>
+
+MyMoneyObjectContainer::MyMoneyObjectContainer()
+{
+}
+
+MyMoneyObjectContainer::~MyMoneyObjectContainer()
+{
+ clear();
+}
+
+void MyMoneyObjectContainer::clear(IMyMoneyStorage* storage)
+{
+ // delete all objects
+ QMap<QString, MyMoneyObject const *>::const_iterator it;
+ for(it = m_map.begin(); it != m_map.end(); ++it) {
+ delete (*it);
+ }
+
+ // then delete the pointers to them
+ m_map.clear();
+
+ if(storage)
+ m_storage = storage;
+}
+
+void MyMoneyObjectContainer::clear(const QString& id)
+{
+ QMap<QString, MyMoneyObject const *>::iterator it;
+ it = m_map.find(id);
+ if(it != m_map.end()) {
+ delete (*it);
+ m_map.erase(it);
+ }
+}
+
+#define listMethod(a, T) \
+void MyMoneyObjectContainer::a(QValueList<T>& list) \
+{ \
+ QMap<QString, const MyMoneyObject*>::const_iterator it; \
+ for(it = m_map.begin(); it != m_map.end(); ++it) { \
+ const T* node = dynamic_cast<const T*>(*it); \
+ if(node) { \
+ list.append(*node); \
+ } \
+ } \
+}
+
+#define preloadListMethod(a, T) \
+void MyMoneyObjectContainer::preload##a(const QValueList<T>& list) \
+{ \
+ QValueList<T>::const_iterator it; \
+ for(it = list.begin(); it != list.end(); ++it) { \
+ delete m_map[(*it).id()]; \
+ m_map[(*it).id()] = new T(*it); \
+ } \
+}
+
+#define preloadMethod(a, T) \
+void MyMoneyObjectContainer::preload##a(const T& obj) \
+{ \
+ delete m_map[obj.id()]; \
+ m_map[obj.id()] = new T(obj); \
+}
+
+#define objectAccessMethod(a, T) \
+const T& MyMoneyObjectContainer::a(const QString& id) \
+{ \
+ static T nullElement; \
+ if(id.isEmpty()) \
+ return nullElement; \
+ QMap<QString, MyMoneyObject const *>::const_iterator it; \
+ it = m_map.find(id); \
+ if(it == m_map.end()) { \
+ /* not found, need to load from engine */ \
+ T x = m_storage->a(id); \
+ m_map[id] = new T(x); \
+ return dynamic_cast<const T&>(*m_map[id]); \
+ } \
+ return dynamic_cast<const T&>(*(*it)); \
+}
+
+void MyMoneyObjectContainer::account(QValueList<MyMoneyAccount>& list)
+{
+ QMap<QString, const MyMoneyObject*>::const_iterator it;
+ for(it = m_map.begin(); it != m_map.end(); ++it) {
+ const MyMoneyAccount* node = dynamic_cast<const MyMoneyAccount*>(*it);
+ if(node) {
+ assignFraction(const_cast<MyMoneyAccount*>(node));
+ list.append(*node);
+ }
+ }
+}
+
+const MyMoneyAccount& MyMoneyObjectContainer::account(const QString& id)
+{
+ static MyMoneyAccount nullElement;
+ if(id.isEmpty())
+ return nullElement;
+ QMap<QString, MyMoneyObject const *>::iterator it;
+ it = m_map.find(id);
+ if(it == m_map.end()) {
+ /* not found, need to load from engine */
+ MyMoneyAccount x = m_storage->account(id);
+ MyMoneyAccount* item = new MyMoneyAccount(x);
+ assignFraction(dynamic_cast<MyMoneyAccount*>(item));
+ m_map[id] = item;
+ return dynamic_cast<const MyMoneyAccount&>(*m_map[id]);
+ }
+ assignFraction(dynamic_cast<MyMoneyAccount*> (const_cast<MyMoneyObject*>(*it)));
+ return dynamic_cast<const MyMoneyAccount&>(*(*it));
+}
+
+void MyMoneyObjectContainer::assignFraction(MyMoneyAccount* acc)
+{
+ if(acc != 0 && acc->m_fraction == -1) {
+ const MyMoneySecurity& sec = security(acc->currencyId());
+ acc->fraction(sec);
+ }
+}
+
+const MyMoneyAccount& MyMoneyObjectContainer::accountByName(const QString& name) const
+{
+ static MyMoneyAccount nullElement;
+ QMap<QString, MyMoneyObject const *>::const_iterator it;
+ for(it = m_map.begin(); it != m_map.end(); ++it) {
+ const MyMoneyAccount* node = dynamic_cast<const MyMoneyAccount *>(*it);
+ if(node) {
+ if(node->name() == name)
+ return dynamic_cast<const MyMoneyAccount &>(*(*it));
+ }
+ }
+ return nullElement;
+}
+
+void MyMoneyObjectContainer::refresh(const QString& id)
+{
+ if(id.isEmpty())
+ return;
+
+ QMap<QString, MyMoneyObject const *>::const_iterator it;
+ it = m_map.find(id);
+ if(it != m_map.end()) {
+ const MyMoneyAccount* account = dynamic_cast<const MyMoneyAccount *>(*it);
+ const MyMoneyPayee* payee = dynamic_cast<const MyMoneyPayee *>(*it);
+ const MyMoneySecurity* security = dynamic_cast<const MyMoneySecurity *>(*it);
+ const MyMoneyInstitution* institution = dynamic_cast<const MyMoneyInstitution *>(*it);
+ const MyMoneySchedule* schedule = dynamic_cast<const MyMoneySchedule *>(*it);
+ delete *it;
+ if(account) {
+ const MyMoneyAccount& a = m_storage->account(id);
+ m_map[id] = new MyMoneyAccount(a);
+ } else if(security) {
+ const MyMoneySecurity& s = m_storage->security(id);
+ if(s.id().isEmpty()) {
+ const MyMoneySecurity& c = m_storage->currency(id);
+ m_map[id] = new MyMoneySecurity(c);
+ } else {
+ m_map[id] = new MyMoneySecurity(s);
+ }
+ } else if(payee) {
+ const MyMoneyPayee& p = m_storage->payee(id);
+ m_map[id] = new MyMoneyPayee(p);
+ } else if(institution) {
+ const MyMoneyInstitution& i = m_storage->institution(id);
+ m_map[id] = new MyMoneyInstitution(i);
+ } else if(schedule) {
+ const MyMoneySchedule& s = m_storage->schedule(id);
+ m_map[id] = new MyMoneySchedule(s);
+ } else {
+ qWarning("Ooops, should preload an unknown object with id '%s'", id.data());
+ }
+ return;
+ }
+}
+
+objectAccessMethod(schedule, MyMoneySchedule)
+objectAccessMethod(payee, MyMoneyPayee)
+objectAccessMethod(security, MyMoneySecurity)
+objectAccessMethod(institution, MyMoneyInstitution)
+
+preloadListMethod(Account, MyMoneyAccount)
+preloadListMethod(Payee, MyMoneyPayee)
+preloadListMethod(Institution, MyMoneyInstitution)
+preloadListMethod(Security, MyMoneySecurity)
+preloadListMethod(Schedule, MyMoneySchedule)
+
+preloadMethod(Account, MyMoneyAccount)
+preloadMethod(Security, MyMoneySecurity)
+preloadMethod(Payee, MyMoneyPayee)
+preloadMethod(Institution, MyMoneyInstitution)
+
+listMethod(payee, MyMoneyPayee)
+listMethod(institution, MyMoneyInstitution)
+
+#include "mymoneyobjectcontainer.moc"
diff --git a/kmymoney2/mymoney/mymoneyobjectcontainer.h b/kmymoney2/mymoney/mymoneyobjectcontainer.h
new file mode 100644
index 0000000..1f3b598
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyobjectcontainer.h
@@ -0,0 +1,99 @@
+/***************************************************************************
+ mymoneyobjectcontainer.h
+ -------------------
+ copyright : (C) 2006 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYOBJECTCONTAINER_H
+#define MYMONEYOBJECTCONTAINER_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qobject.h>
+#include <qstring.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/export.h>
+#include <kmymoney/mymoneytransaction.h>
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneyinstitution.h>
+#include <kmymoney/mymoneypayee.h>
+#include <kmymoney/mymoneyobject.h>
+#include <kmymoney/mymoneysecurity.h>
+#include <kmymoney/imymoneystorage.h>
+
+/**
+ * @author Thomas Baumgart
+ */
+
+/**
+ * This class represents a generic container for all MyMoneyObject derived objects.
+ */
+class KMYMONEY_EXPORT MyMoneyObjectContainer : public QObject
+{
+ Q_OBJECT
+public:
+ MyMoneyObjectContainer();
+ ~MyMoneyObjectContainer();
+
+ const MyMoneyAccount& account(const QString& id);
+ const MyMoneyPayee& payee(const QString& id);
+ const MyMoneySecurity& security(const QString& id);
+ const MyMoneyInstitution& institution(const QString& id);
+ const MyMoneySchedule& schedule(const QString& id);
+
+ void account(QValueList<MyMoneyAccount>& list);
+ void payee(QValueList<MyMoneyPayee>& list);
+ void institution(QValueList<MyMoneyInstitution>& list);
+
+ void preloadAccount(const QValueList<MyMoneyAccount>& list);
+ void preloadPayee(const QValueList<MyMoneyPayee>& list);
+ void preloadInstitution(const QValueList<MyMoneyInstitution>& list);
+ void preloadSecurity(const QValueList<MyMoneySecurity>& list);
+ void preloadSchedule(const QValueList<MyMoneySchedule>& list);
+
+ void preloadAccount(const MyMoneyAccount& account);
+ void preloadSecurity(const MyMoneySecurity& security);
+ void preloadPayee(const MyMoneyPayee& payee);
+ void preloadInstitution(const MyMoneyInstitution& institution);
+
+ void clear(const QString& id);
+ void clear(IMyMoneyStorage* storage = 0);
+
+ const MyMoneyAccount& accountByName(const QString& name) const;
+
+ /**
+ * This method refreshes an already existing object in the container
+ * with a copy from the engine. The object is identified by its @a id.
+ * If the object is unknown or the @a id is empty, nothing is done.
+ */
+ void refresh(const QString& id);
+
+private:
+ void assignFraction(MyMoneyAccount* acc);
+
+private:
+ QMap<QString, MyMoneyObject const *> m_map;
+ IMyMoneyStorage* m_storage;
+};
+
+#endif
+
+
diff --git a/kmymoney2/mymoney/mymoneyobjecttest.cpp b/kmymoney2/mymoney/mymoneyobjecttest.cpp
new file mode 100644
index 0000000..f7201a9
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyobjecttest.cpp
@@ -0,0 +1,73 @@
+/***************************************************************************
+ mymoneyobjecttest.cpp
+ -------------------
+ copyright : (C) 2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "mymoneyobjecttest.h"
+#include "mymoneyaccount.h"
+
+MyMoneyObjectTest::MyMoneyObjectTest()
+{
+}
+
+
+void MyMoneyObjectTest::setUp () {
+}
+
+void MyMoneyObjectTest::tearDown () {
+}
+
+void MyMoneyObjectTest::testEmptyConstructor() {
+ MyMoneyAccount a;
+ CPPUNIT_ASSERT(a.id().isEmpty());
+}
+
+void MyMoneyObjectTest::testConstructor() {
+ MyMoneyAccount a(QString("thb"), MyMoneyAccount());
+
+ CPPUNIT_ASSERT(!a.id().isEmpty());
+ CPPUNIT_ASSERT(a.id() == QString("thb"));
+}
+
+void MyMoneyObjectTest::testClearId() {
+ MyMoneyAccount a(QString("thb"), MyMoneyAccount());
+
+ CPPUNIT_ASSERT(!a.id().isEmpty());
+ a.clearId();
+ CPPUNIT_ASSERT(a.id().isEmpty());
+}
+
+void MyMoneyObjectTest::testCopyConstructor() {
+ MyMoneyAccount a(QString("thb"), MyMoneyAccount());
+ MyMoneyAccount b(a);
+
+ CPPUNIT_ASSERT(a.MyMoneyObject::operator==(b));
+}
+
+void MyMoneyObjectTest::testAssignmentConstructor() {
+ MyMoneyAccount a(QString("thb"), MyMoneyAccount());
+ MyMoneyAccount b = a;
+
+ CPPUNIT_ASSERT(a.MyMoneyObject::operator==(b));
+}
+
+void MyMoneyObjectTest::testEquality() {
+ MyMoneyAccount a(QString("thb"), MyMoneyAccount());
+ MyMoneyAccount b(QString("thb"), MyMoneyAccount());
+ MyMoneyAccount c(QString("ace"), MyMoneyAccount());
+
+ CPPUNIT_ASSERT(a.MyMoneyObject::operator==(b));
+ CPPUNIT_ASSERT(!(a.MyMoneyObject::operator==(c)));
+}
+
diff --git a/kmymoney2/mymoney/mymoneyobjecttest.h b/kmymoney2/mymoney/mymoneyobjecttest.h
new file mode 100644
index 0000000..0b99671
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyobjecttest.h
@@ -0,0 +1,50 @@
+/***************************************************************************
+ mymoneyobjecttest.h
+ -------------------
+ copyright : (C) 2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef __MYMONEYOBJECTTEST_H__
+#define __MYMONEYOBJECTTEST_H__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#define private public
+#include "mymoneyobject.h"
+#undef private
+
+class MyMoneyObjectTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(MyMoneyObjectTest);
+ CPPUNIT_TEST(testEmptyConstructor);
+ CPPUNIT_TEST(testConstructor);
+ CPPUNIT_TEST(testClearId);
+ CPPUNIT_TEST(testCopyConstructor);
+ CPPUNIT_TEST(testAssignmentConstructor);
+ CPPUNIT_TEST(testEquality);
+ CPPUNIT_TEST_SUITE_END();
+
+protected:
+
+public:
+ MyMoneyObjectTest();
+ void setUp ();
+ void tearDown ();
+ void testEmptyConstructor();
+ void testConstructor();
+ void testClearId();
+ void testCopyConstructor();
+ void testAssignmentConstructor();
+ void testEquality();
+};
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneyobserver.cpp b/kmymoney2/mymoney/mymoneyobserver.cpp
new file mode 100644
index 0000000..f343003
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyobserver.cpp
@@ -0,0 +1,30 @@
+/***************************************************************************
+ mymoneyobserver.cpp - description
+ -------------------
+ begin : Sat May 18 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "mymoneyobserver.h"
+
+MyMoneyObserver::MyMoneyObserver()
+{
+}
+MyMoneyObserver::~MyMoneyObserver()
+{
+}
diff --git a/kmymoney2/mymoney/mymoneyobserver.h b/kmymoney2/mymoney/mymoneyobserver.h
new file mode 100644
index 0000000..3e6c922
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyobserver.h
@@ -0,0 +1,55 @@
+/***************************************************************************
+ mymoneyobserver.h - description
+ -------------------
+ begin : Sat May 18 2002
+ copyright : (C) 2000-2005 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYOBSERVER_H
+#define MYMONEYOBSERVER_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/export.h>
+class MyMoneySubject;
+class QString;
+
+/**
+ * This is the base class to be used to construct an
+ * observer for usage in a subject/observer relationship
+ *
+ * @author Thomas Baumgart
+ */
+class KMYMONEY_EXPORT MyMoneyObserver {
+public:
+ virtual ~MyMoneyObserver();
+ virtual void update(const QString& id) = 0;
+
+protected:
+ MyMoneyObserver();
+};
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneyobservertest.h b/kmymoney2/mymoney/mymoneyobservertest.h
new file mode 100644
index 0000000..a806882
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyobservertest.h
@@ -0,0 +1,106 @@
+/***************************************************************************
+ mymoneyobservertest.h
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef __MYMONEYOBSERVERTEST_H__
+#define __MYMONEYOBSERVERTEST_H__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+class TestObserver : public MyMoneyObserver
+{
+public:
+ TestObserver() { m_updated = ""; }
+ void update(const QString& id) { m_updated = id; };
+ const QString& updated(void) { return m_updated; };
+ void reset(void) { m_updated = ""; };
+private:
+ QString m_updated;
+};
+
+class TestSubject : public MyMoneySubject
+{
+};
+
+class MyMoneyObserverTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(MyMoneyObserverTest);
+ CPPUNIT_TEST(testEmptySubject);
+ CPPUNIT_TEST(testAddObserver);
+ CPPUNIT_TEST(testRemoveObserver);
+ CPPUNIT_TEST(testNotifyObserver);
+ CPPUNIT_TEST(testNotifyMultipleObserver);
+ CPPUNIT_TEST_SUITE_END();
+
+protected:
+ TestSubject *subject;
+ TestObserver *observer1;
+ TestObserver *observer2;
+
+public:
+ MyMoneyObserverTest () {}
+
+
+void setUp () {
+ subject = new TestSubject;
+ observer1 = new TestObserver;
+ observer2 = new TestObserver;
+}
+
+void tearDown () {
+ delete observer1;
+ delete observer2;
+ delete subject;
+}
+
+void testEmptySubject() {
+ CPPUNIT_ASSERT(subject->m_observers.count() == 0);
+}
+
+void testAddObserver() {
+ subject->attach(observer1);
+ CPPUNIT_ASSERT(subject->m_observers.count() == 1);
+ CPPUNIT_ASSERT(subject->m_observers.at(0) == observer1);
+}
+
+void testRemoveObserver() {
+ testAddObserver();
+ subject->detach(observer1);
+ CPPUNIT_ASSERT(subject->m_observers.count() == 0);
+}
+
+void testNotifyObserver() {
+ testAddObserver();
+ CPPUNIT_ASSERT(observer1->updated() == "");
+ subject->notify("my id");
+ CPPUNIT_ASSERT(observer1->updated() == "my id");
+}
+
+void testNotifyMultipleObserver() {
+ testAddObserver();
+ subject->attach(observer2);
+ CPPUNIT_ASSERT(subject->m_observers.count() == 2);
+ CPPUNIT_ASSERT(subject->m_observers.at(0) == observer1);
+ CPPUNIT_ASSERT(subject->m_observers.at(1) == observer2);
+
+ CPPUNIT_ASSERT(observer1->updated() == "");
+ CPPUNIT_ASSERT(observer2->updated() == "");
+ subject->notify("my id");
+ CPPUNIT_ASSERT(observer1->updated() == "my id");
+ CPPUNIT_ASSERT(observer2->updated() == "my id");
+}
+
+};
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneypayee.cpp b/kmymoney2/mymoney/mymoneypayee.cpp
new file mode 100644
index 0000000..cbfbbb7
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneypayee.cpp
@@ -0,0 +1,220 @@
+/***************************************************************************
+ mymoneypayee.cpp
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes
+ (C) 2008 by Thomas Baumgart
+ email : mte@users.sourceforge.net
+ ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstringlist.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoneypayee.h"
+#include "mymoneyutils.h"
+#include <kmymoney/mymoneyexception.h>
+
+MyMoneyPayee MyMoneyPayee::null;
+
+MyMoneyPayee::MyMoneyPayee() :
+ m_matchingEnabled(false),
+ m_usingMatchKey(false),
+ m_matchKeyIgnoreCase(true)
+{
+}
+
+MyMoneyPayee::MyMoneyPayee(const QString& id, const MyMoneyPayee& payee) :
+ m_matchingEnabled(false),
+ m_usingMatchKey(false),
+ m_matchKeyIgnoreCase(true)
+{
+ *this = payee;
+ m_id = id;
+}
+
+MyMoneyPayee::MyMoneyPayee(const QString& name, const QString& address,
+ const QString& city, const QString& state, const QString& postcode,
+ const QString& telephone, const QString& email) :
+ m_matchingEnabled(false),
+ m_usingMatchKey(false),
+ m_matchKeyIgnoreCase(true)
+{
+ m_name = name;
+ m_address = address;
+ m_city = city;
+ m_state = state;
+ m_postcode = postcode;
+ m_telephone = telephone;
+ m_email = email;
+}
+
+MyMoneyPayee::MyMoneyPayee(const QDomElement& node) :
+ MyMoneyObject(node)
+{
+ if ("PAYEE" != node.tagName()) {
+ throw new MYMONEYEXCEPTION("Node was not PAYEE");
+ }
+
+ m_name = node.attribute("name");
+ m_reference = node.attribute("reference");
+ m_email = node.attribute("email");
+
+ m_matchingEnabled = node.attribute("matchingenabled","0").toUInt();
+ if ( m_matchingEnabled )
+ {
+ m_usingMatchKey = node.attribute("usingmatchkey","0").toUInt();
+ m_matchKeyIgnoreCase = node.attribute("matchignorecase","0").toUInt();
+ m_matchKey = node.attribute("matchkey");
+ }
+
+ if(node.hasAttribute("notes")) {
+ m_notes = node.attribute("notes");
+ }
+
+ if (node.hasAttribute("defaultaccountid")) {
+ m_defaultAccountId = node.attribute("defaultaccountid");
+ }
+
+ QDomNodeList nodeList = node.elementsByTagName("ADDRESS");
+ if(nodeList.count() == 0) {
+ QString msg = QString("No ADDRESS in payee %1").arg(m_name);
+ throw new MYMONEYEXCEPTION(msg);
+ }
+
+ QDomElement addrNode = nodeList.item(0).toElement();
+ m_address = addrNode.attribute("street");
+ m_city = addrNode.attribute("city");
+ m_postcode = addrNode.attribute("postcode");
+ m_state = addrNode.attribute("state");
+ m_telephone = addrNode.attribute("telephone");
+}
+
+MyMoneyPayee::~MyMoneyPayee()
+{
+}
+
+MyMoneyPayee::MyMoneyPayee(const MyMoneyPayee& right) :
+ MyMoneyObject(right)
+{
+ *this = right;
+}
+
+bool MyMoneyPayee::operator == (const MyMoneyPayee& right) const
+{
+ return (MyMoneyObject::operator==(right) &&
+ ((m_name.length() == 0 && right.m_name.length() == 0) || (m_name == right.m_name)) &&
+ ((m_address.length() == 0 && right.m_address.length() == 0) || (m_address == right.m_address)) &&
+ ((m_city.length() == 0 && right.m_city.length() == 0) || (m_city == right.m_city)) &&
+ ((m_state.length() == 0 && right.m_state.length() == 0) || (m_state == right.m_state)) &&
+ ((m_postcode.length() == 0 && right.m_postcode.length() == 0) || (m_postcode == right.m_postcode)) &&
+ ((m_telephone.length() == 0 && right.m_telephone.length() == 0) || (m_telephone == right.m_telephone)) &&
+ ((m_email.length() == 0 && right.m_email.length() == 0) || (m_email == right.m_email)) &&
+ (m_matchingEnabled == right.m_matchingEnabled) &&
+ (m_usingMatchKey == right.m_usingMatchKey) &&
+ (m_matchKeyIgnoreCase == right.m_matchKeyIgnoreCase) &&
+ ((m_matchKey.length() == 0 && right.m_matchKey.length() == 0) || m_matchKey == right.m_matchKey) &&
+ ((m_reference.length() == 0 && right.m_reference.length() == 0) || (m_reference == right.m_reference)) &&
+ ((m_defaultAccountId.length() == 0 && right.m_defaultAccountId.length() == 0) || m_defaultAccountId == right.m_defaultAccountId) );
+}
+
+void MyMoneyPayee::writeXML(QDomDocument& document, QDomElement& parent) const
+{
+ QDomElement el = document.createElement("PAYEE");
+
+ writeBaseXML(document, el);
+
+ el.setAttribute("name", m_name);
+ el.setAttribute("reference", m_reference);
+ el.setAttribute("email", m_email);
+ if(!m_notes.isEmpty())
+ el.setAttribute("notes", m_notes);
+
+ el.setAttribute("matchingenabled", m_matchingEnabled);
+ if ( m_matchingEnabled )
+ {
+ el.setAttribute("usingmatchkey", m_usingMatchKey);
+ el.setAttribute("matchignorecase", m_matchKeyIgnoreCase);
+ el.setAttribute("matchkey", m_matchKey);
+ }
+
+ if (!m_defaultAccountId.isEmpty()) {
+ el.setAttribute("defaultaccountid", m_defaultAccountId);
+ }
+
+ QDomElement address = document.createElement("ADDRESS");
+ address.setAttribute("street", m_address);
+ address.setAttribute("city", m_city);
+ address.setAttribute("postcode", m_postcode);
+ address.setAttribute("state", m_state);
+ address.setAttribute("telephone", m_telephone);
+
+ el.appendChild(address);
+
+ parent.appendChild(el);
+}
+
+bool MyMoneyPayee::hasReferenceTo(const QString& id) const
+{
+ return id == m_defaultAccountId;
+
+}
+
+MyMoneyPayee::payeeMatchType MyMoneyPayee::matchData(bool& ignorecase, QStringList& keys) const
+{
+ payeeMatchType type = matchDisabled;
+ keys.clear();
+ ignorecase = m_matchKeyIgnoreCase;
+
+ if ( m_matchingEnabled )
+ {
+ type = m_usingMatchKey ? matchKey : matchName;
+ if(type == matchKey)
+ keys = QStringList::split(";", m_matchKey);
+ }
+
+ return type;
+}
+
+MyMoneyPayee::payeeMatchType MyMoneyPayee::matchData(bool& ignorecase, QString& keyString) const
+{
+ QStringList keys;
+ payeeMatchType type = matchData(ignorecase, keys);
+ keyString = keys.join(";");
+ return type;
+}
+
+void MyMoneyPayee::setMatchData(payeeMatchType type, bool ignorecase, const QStringList& keys)
+{
+ m_matchingEnabled = (type != matchDisabled);
+ m_matchKeyIgnoreCase = ignorecase;
+ m_matchKey = QString();
+
+ if ( m_matchingEnabled )
+ {
+ m_usingMatchKey = (type == matchKey);
+ if ( m_usingMatchKey ) {
+ m_matchKey = keys.join(";");
+ }
+ }
+}
+
+void MyMoneyPayee::setMatchData(payeeMatchType type, bool ignorecase, const QString& keys)
+{
+ setMatchData(type, ignorecase, QStringList::split(";", keys));
+}
+
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/mymoney/mymoneypayee.h b/kmymoney2/mymoney/mymoneypayee.h
new file mode 100644
index 0000000..c2c711b
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneypayee.h
@@ -0,0 +1,206 @@
+/***************************************************************************
+ mymoneypayee.h
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes
+ 2005 by Thomas Baumgart
+ email : mte@users.sourceforge.net
+ ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYPAYEE_H
+#define MYMONEYPAYEE_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstring.h>
+class QStringList;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/export.h>
+#include <kmymoney/mymoneyobject.h>
+
+/**
+ * This class represents a payee or receiver within the MyMoney engine.
+ * Since it is not payee-specific, it is also used as a generic address
+ * book entry.
+ *
+ * @author Thomas Baumgart
+ */
+class KMYMONEY_EXPORT MyMoneyPayee : public MyMoneyObject
+{
+private:
+ // Simple fields
+ QString m_name;
+ QString m_address;
+ QString m_city;
+ QString m_state;
+ QString m_postcode;
+ QString m_telephone;
+ QString m_email;
+ QString m_notes;
+
+ // Transaction matching fields
+ bool m_matchingEnabled; //< Whether this payee should be matched at all
+ bool m_usingMatchKey; //< If so, whether a m_matchKey list is used (true), or just m_name is used (false)
+ bool m_matchKeyIgnoreCase; //< Whether to ignore the case of the match key or name
+
+ /**
+ * Semicolon separated list of matching keys used when trying to find a suitable
+ * payee for imported transactions.
+ */
+ QString m_matchKey;
+
+ // Category (account) matching fields
+ QString m_defaultAccountId;
+
+ /**
+ * This member keeps a reference to an external database
+ * (e.g. kaddressbook). It is the responsability of the
+ * application to format the reference string
+ * (e.g. encoding the name of the external database into the
+ * reference string).
+ * If no external database is available it should be kept
+ * empty by the application.
+ */
+ QString m_reference;
+
+public:
+ typedef enum {
+ matchDisabled = 0,
+ matchName,
+ matchKey
+ } payeeMatchType;
+
+ MyMoneyPayee();
+ MyMoneyPayee(const QString& id, const MyMoneyPayee& payee);
+ MyMoneyPayee(const QString& name,
+ const QString& address=QString::null,
+ const QString& city=QString::null,
+ const QString& state=QString::null,
+ const QString& postcode=QString::null,
+ const QString& telephone=QString::null,
+ const QString& email=QString::null);
+ /**
+ * This is the constructor for a payee that is described by a
+ * QDomElement (e.g. from a file).
+ *
+ * @param el const reference to the QDomElement from which to
+ * create the object
+ */
+ MyMoneyPayee(const QDomElement& el);
+
+ ~MyMoneyPayee();
+
+ // Simple get operations
+ QString name(void) const { return m_name; }
+ QString address(void) const { return m_address; }
+ QString city(void) const { return m_city; }
+ QString state(void) const { return m_state; }
+ QString postcode(void) const { return m_postcode; }
+ QString telephone(void) const { return m_telephone; }
+ QString email(void) const { return m_email; }
+ QString notes(void) const { return m_notes; }
+
+ const QString id(void) const { return m_id; };
+ const QString reference(void) const { return m_reference; };
+
+ // Simple set operations
+ void setName(const QString& val) { m_name = val; }
+ void setAddress(const QString& val) { m_address = val; }
+ void setCity(const QString& val) { m_city = val; }
+ void setState(const QString& val) { m_state = val; }
+ void setPostcode(const QString& val) { m_postcode = val; }
+ void setTelephone(const QString& val) { m_telephone = val; }
+ void setEmail(const QString& val) { m_email = val; }
+ void setNotes(const QString& val) { m_notes = val; }
+ void setReference(const QString& ref) { m_reference = ref; }
+
+ /**
+ * Get all match data in one call
+ *
+ * @param ignorecase Bool which will be replaced to indicate whether the match is
+ * case-sensitive (false) or case-insensitive (true)
+ * @param keys List of strings which will be replaced by the match key to use for this payee
+ *
+ * @return the matching type (see payeeMatchType for details)
+ */
+ payeeMatchType matchData(bool& ignorecase, QStringList& keys) const;
+
+ /**
+ * Set all match data in one call
+ *
+ * @param type matching type (see payeeMatchType for details)
+ * @param ignorecase Whether case should be ignored for the key/name match
+ * @param keys A list of keys themselves, if applicable
+ */
+ void setMatchData(payeeMatchType type, bool ignorecase, const QStringList& keys);
+
+ /**
+ * Get all match data in one call (overloaded version for database module)
+ *
+ * @param ignorecase Bool which will be replaced to indicate whether the match is
+ * case-sensitive (false) or case-insensitive (true)
+ * @param keyString A list of keys in single-string format, if applicable
+ *
+ * @return the matching type (see payeeMatchType for details)
+ */
+ payeeMatchType matchData(bool& ignorecase, QString& keyString) const;
+
+ /**
+ * Set all match data in one call (overloaded version for database module)
+ *
+ * @param type matching type (see payeeMatchType for details)
+ * @param ignorecase Whether case should be ignored for the key/name match
+ * @param keys A list of keys in single-string format, if applicable
+ */
+ void setMatchData(payeeMatchType type, bool ignorecase, const QString& keys);
+
+
+ bool defaultAccountEnabled() const { return !m_defaultAccountId.isEmpty(); }
+ const QString& defaultAccountId() const { return m_defaultAccountId; }
+ void setDefaultAccountId(const QString& id = QString()) {
+ m_defaultAccountId = id;
+ }
+
+ // Copy constructors
+ MyMoneyPayee(const MyMoneyPayee&);
+
+ // Equality operator
+ bool operator == (const MyMoneyPayee &) const;
+
+ void writeXML(QDomDocument& document, QDomElement& parent) const;
+
+ /**
+ * This method checks if a reference to the given object exists. It returns,
+ * a @p true if the object is referencing the one requested by the
+ * parameter @p id. If it does not, this method returns @p false.
+ *
+ * @param id id of the object to be checked for references
+ * @retval true This object references object with id @p id.
+ * @retval false This object does not reference the object with id @p id.
+ */
+ virtual bool hasReferenceTo(const QString& id) const;
+
+ static MyMoneyPayee null;
+};
+
+inline bool operator==(const MyMoneyPayee& lhs, const QString& rhs) { return lhs.id() == rhs; }
+
+#endif
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/mymoney/mymoneypayeetest.cpp b/kmymoney2/mymoney/mymoneypayeetest.cpp
new file mode 100644
index 0000000..601679c
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneypayeetest.cpp
@@ -0,0 +1,76 @@
+/***************************************************************************
+ mymoneypayeetest.cpp
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "mymoneypayeetest.h"
+#include <iostream>
+#include <fstream>
+using namespace std;
+
+MyMoneyPayeeTest:: MyMoneyPayeeTest () {
+}
+
+void MyMoneyPayeeTest::setUp () {
+}
+
+void MyMoneyPayeeTest::tearDown () {
+}
+
+void MyMoneyPayeeTest::testXml(){
+ QDomDocument doc;
+ QDomElement parent = doc.createElement("Test");
+ doc.appendChild(parent);
+ MyMoneyPayee payee1;
+ payee1.m_id = "some random id";//if the ID isn't set, w ethrow an exception
+ payee1.writeXML(doc,parent);
+ QString temp1 = "Account1";
+ payee1.setDefaultAccountId(temp1);
+ payee1.writeXML(doc,parent);
+ QString temp2 = "Account2";
+ payee1.setDefaultAccountId(temp2);
+ payee1.writeXML(doc,parent);
+ payee1.setDefaultAccountId();
+ payee1.writeXML(doc,parent);
+ QDomElement el = parent.firstChild().toElement();
+ CPPUNIT_ASSERT(!el.isNull());
+ MyMoneyPayee payee2(el);
+ CPPUNIT_ASSERT(!payee2.defaultAccountEnabled());
+ CPPUNIT_ASSERT(payee2.defaultAccountId().isEmpty());
+ el = el.nextSibling().toElement();
+ CPPUNIT_ASSERT(!el.isNull());
+ MyMoneyPayee payee3(el);
+ CPPUNIT_ASSERT(payee3.defaultAccountEnabled());
+ CPPUNIT_ASSERT(payee3.defaultAccountId()==temp1);
+ el = el.nextSibling().toElement();
+ CPPUNIT_ASSERT(!el.isNull());
+ MyMoneyPayee payee4(el);
+ CPPUNIT_ASSERT(payee4.defaultAccountEnabled());
+ CPPUNIT_ASSERT(payee4.defaultAccountId()==temp2);
+ el = el.nextSibling().toElement();
+ CPPUNIT_ASSERT(!el.isNull());
+ MyMoneyPayee payee5(el);
+ CPPUNIT_ASSERT(!payee5.defaultAccountEnabled());
+ CPPUNIT_ASSERT(payee5.defaultAccountId().isEmpty());
+}
+
+void MyMoneyPayeeTest::testDefaultAccount(){
+ MyMoneyPayee payee;
+ CPPUNIT_ASSERT(!payee.defaultAccountEnabled());
+ CPPUNIT_ASSERT(payee.defaultAccountId().isEmpty());
+ QString temp = "Account1";
+ payee.setDefaultAccountId(temp);
+ CPPUNIT_ASSERT(payee.defaultAccountEnabled());
+ CPPUNIT_ASSERT(payee.defaultAccountId()==temp);
+ payee.setDefaultAccountId();
+ CPPUNIT_ASSERT(!payee.defaultAccountEnabled());
+ CPPUNIT_ASSERT(payee.defaultAccountId().isEmpty());
+}
diff --git a/kmymoney2/mymoney/mymoneypayeetest.h b/kmymoney2/mymoney/mymoneypayeetest.h
new file mode 100644
index 0000000..baef561
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneypayeetest.h
@@ -0,0 +1,41 @@
+/***************************************************************************
+ mymoneypayeetest.h
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef __MYMONEYPAYEETEST_H__
+#define __MYMONEYPAYEETEST_H__
+
+#include <cppunit/extensions/HelperMacros.h>
+#include "autotest.h"
+
+#define private public
+#define protected public
+#include "mymoneypayee.h"
+#undef private
+#undef protected
+
+class MyMoneyPayeeTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(MyMoneyPayeeTest);
+ CPPUNIT_TEST(testXml);
+ CPPUNIT_TEST(testDefaultAccount);
+ CPPUNIT_TEST_SUITE_END();
+
+public:
+ MyMoneyPayeeTest ();
+
+ void setUp ();
+ void tearDown ();
+ void testXml();
+ void testDefaultAccount();
+};
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneyprice.cpp b/kmymoney2/mymoney/mymoneyprice.cpp
new file mode 100644
index 0000000..b674776
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyprice.cpp
@@ -0,0 +1,113 @@
+/***************************************************************************
+ mymoneyprice - description
+ -------------------
+ begin : Sun Nov 21 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+/**
+ * @author Thomas Baumgart
+ */
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoneyprice.h"
+#include "mymoneyexception.h"
+
+MyMoneyPrice::MyMoneyPrice() :
+ m_date(QDate())
+{
+}
+
+MyMoneyPrice::MyMoneyPrice(const QString& from, const QString& to, const QDomElement& node)
+{
+ if("PRICE" != node.tagName())
+ throw new MYMONEYEXCEPTION("Node was not PRICE");
+
+ m_fromSecurity = from;
+ m_toSecurity = to;
+
+ m_date = QDate::fromString(node.attribute("date"), Qt::ISODate);
+ m_rate = MyMoneyMoney(node.attribute("price"));
+ m_source = node.attribute("source");
+
+ if(!m_rate.isZero())
+ m_invRate = MyMoneyMoney(1,1) / m_rate;
+ else
+ qDebug("Price with zero value loaded");
+}
+
+MyMoneyPrice::MyMoneyPrice(const QString& from, const QString& to, const QDate& date, const MyMoneyMoney& rate, const QString& source) :
+ m_fromSecurity(from),
+ m_toSecurity(to),
+ m_date(date),
+ m_rate(rate),
+ m_source(source)
+{
+ if(!m_rate.isZero())
+ m_invRate = MyMoneyMoney(1,1) / m_rate;
+ else
+ qDebug("Price with zero value created");
+}
+
+MyMoneyPrice::~MyMoneyPrice()
+{
+}
+
+const MyMoneyMoney MyMoneyPrice::rate(const QString& id) const
+{
+ static MyMoneyMoney dummyPrice(1,1);
+
+ if(!isValid())
+ return dummyPrice;
+
+ if(id.isEmpty() || id == m_toSecurity)
+ return m_rate;
+ if(id == m_fromSecurity)
+ return m_invRate;
+
+ QString msg = QString("Unknown security id %1 for price info %2/%3.").arg(id).arg(m_fromSecurity).arg(m_toSecurity);
+ throw new MYMONEYEXCEPTION(msg);
+}
+
+bool MyMoneyPrice::isValid(void) const
+{
+ return (m_date.isValid() && !m_fromSecurity.isEmpty() && !m_toSecurity.isEmpty());
+}
+
+// Equality operator
+bool MyMoneyPrice::operator == (const MyMoneyPrice &right) const
+{
+ return ((m_date == right.m_date) &&
+ (m_rate == right.m_rate) &&
+ ((m_fromSecurity.length() == 0 && right.m_fromSecurity.length() == 0) || (m_fromSecurity == right.m_fromSecurity)) &&
+ ((m_toSecurity.length() == 0 && right.m_toSecurity.length() == 0) || (m_toSecurity == right.m_toSecurity)) &&
+ ((m_source.length() == 0 && right.m_source.length() == 0) || (m_source == right.m_source)));
+}
+
+bool MyMoneyPrice::hasReferenceTo(const QString& id) const
+{
+ return (id == m_fromSecurity) || (id == m_toSecurity);
+}
diff --git a/kmymoney2/mymoney/mymoneyprice.h b/kmymoney2/mymoney/mymoneyprice.h
new file mode 100644
index 0000000..faf6454
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyprice.h
@@ -0,0 +1,158 @@
+/***************************************************************************
+ mymoneyprice - description
+ -------------------
+ begin : Sun Nov 21 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYPRICE_H
+#define MYMONEYPRICE_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstring.h>
+#include <qdatetime.h>
+#include <qpair.h>
+#include <qmap.h>
+#include <qdom.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneymoney.h>
+#include <kmymoney/export.h>
+
+/**
+ * @author Thomas Baumgart
+ */
+
+/**
+ * This class represents an exchange rate of a security, currency or commodity
+ * based on another security, currency or commodity for a specific date.
+ * The term security is used in this class as a placeholder for all
+ * those previously mentioned items.
+ * In general, the other security is a currency.
+ *
+ * The securities and the rate form the following equation:
+ *
+ * @code
+ *
+ * toSecurity = rate * fromSecurity
+ *
+ * @endcode
+ *
+ * Using the @p rate() member function, one can retrieve the conversion rate based
+ * upon the @p toSecurity or the @p fromSecurity.
+ */
+class KMYMONEY_EXPORT MyMoneyPrice
+{
+public:
+ MyMoneyPrice();
+ MyMoneyPrice(const QString& from, const QString& to, const QDomElement& node);
+ MyMoneyPrice(const QString& from, const QString& to, const QDate& date, const MyMoneyMoney& rate, const QString& source = QString());
+ virtual ~MyMoneyPrice();
+
+ /**
+ * This method returns the price information based on the
+ * security referenced by @p id. If @p id is empty (default), the
+ * price is returned based on the toSecurity. If this price
+ * object is invalid (see isValid()) MyMoneyMoney(1,1) is returned.
+ *
+ * @param id return price to be the factor to be used to convert a value into
+ * the correcponding value in security @p id.
+ *
+ * @return returns the exchange rate (price) as MyMoneyMoney object.
+ *
+ * If @p id is not empty and does not match either security ids of this price
+ * an exception will be thrown.
+ *
+ * Example:
+ * Assume the following code, where you have a price object and
+ * and you wish to convert from an amount in GBP (@p valGBP) to ADF (@p valADF).
+ * Then your code will look like this:
+ *
+ * @code
+ *
+ * MyMoneyPrice price("ADF", "GBP", QDate(2005,9,20), MyMoneyMoney(1,3), "User");
+ * MyMoneyMoney valADF, valGBP(100,1);
+ *
+ * valADF = valGBP * price.rate("ADF");
+ *
+ * @endcode
+ *
+ * valADF will contain the value 300 after the assignment operation, because @p price.rate("ADF") returned
+ * @p 3/1 even though the price information kept with the object was @p 1/3, but based on the other
+ * conversion direction (from ADF to GBP).
+ */
+ const MyMoneyMoney rate(const QString& id) const;
+
+ const QDate& date(void) const { return m_date; };
+ const QString& source(void) const { return m_source; };
+ const QString& from(void) const { return m_fromSecurity; };
+ const QString& to(void) const { return m_toSecurity; };
+
+ /**
+ * Check whether the object is valid or not. A MyMoneyPrice object
+ * is valid if the date is valid and both security ids are set. In case
+ * of an invalid object, price() always returns 1.
+ *
+ * @retval true if price object is valid
+ * @retval false if price object is not valid
+ */
+ bool isValid(void) const;
+
+ // Equality operator
+ bool operator == (const MyMoneyPrice &) const;
+
+ // Inequality operator
+ bool operator != (const MyMoneyPrice &right) const { return !(operator == (right)); };
+
+ /**
+ * This method checks if a reference to the given object exists. It returns,
+ * a @p true if the object is referencing the one requested by the
+ * parameter @p id. If it does not, this method returns @p false.
+ *
+ * @param id id of the object to be checked for references
+ * @retval true This object references object with id @p id.
+ * @retval false This object does not reference the object with id @p id.
+ */
+ bool hasReferenceTo(const QString& id) const;
+
+private:
+ QString m_fromSecurity;
+ QString m_toSecurity;
+ QDate m_date;
+ MyMoneyMoney m_rate;
+ MyMoneyMoney m_invRate;
+ QString m_source;
+};
+
+
+typedef QPair<QString, QString> MyMoneySecurityPair;
+typedef QMap<QDate, MyMoneyPrice> MyMoneyPriceEntries;
+typedef QMap<MyMoneySecurityPair, MyMoneyPriceEntries> MyMoneyPriceList;
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneypricetest.cpp b/kmymoney2/mymoney/mymoneypricetest.cpp
new file mode 100644
index 0000000..203e9ca
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneypricetest.cpp
@@ -0,0 +1,90 @@
+/***************************************************************************
+ mymoneypricetest.cpp
+ -------------------
+ copyright : (C) 2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "mymoneypricetest.h"
+#include "mymoneyexception.h"
+
+MyMoneyPriceTest::MyMoneyPriceTest()
+{
+}
+
+
+void MyMoneyPriceTest::setUp()
+{
+ m = new MyMoneyPrice();
+}
+
+void MyMoneyPriceTest::tearDown()
+{
+ delete m;
+}
+
+void MyMoneyPriceTest::testDefaultConstructor()
+{
+ CPPUNIT_ASSERT(m->isValid() == false);
+}
+
+void MyMoneyPriceTest::testConstructor()
+{
+ MyMoneyPrice n(QString("from"), QString("to"), QDate(2005,9,23), MyMoneyMoney(1,3), QString("MySource"));
+
+ CPPUNIT_ASSERT(n.isValid() == true);
+ CPPUNIT_ASSERT(n.from() == QString("from"));
+ CPPUNIT_ASSERT(n.to() == QString("to"));
+ CPPUNIT_ASSERT(n.date() == QDate(2005,9,23));
+ CPPUNIT_ASSERT(n.source() == QString("MySource"));
+ CPPUNIT_ASSERT(n.rate("to") == MyMoneyMoney(1,3));
+}
+
+void MyMoneyPriceTest::testValidity()
+{
+ QString emptyId;
+ MyMoneyPrice n1(emptyId, QString("to"), QDate(2005,9,23), MyMoneyMoney(1,3), QString("MySource"));
+ MyMoneyPrice n2(QString("from"), emptyId, QDate(2005,9,23), MyMoneyMoney(1,3), QString("MySource"));
+ MyMoneyPrice n3(QString("from"), QString("to"), QDate(), MyMoneyMoney(1,3), QString("MySource"));
+ MyMoneyPrice n4(QString("from"), QString("to"), QDate(2005,9,23), MyMoneyMoney(1,3), QString("MySource"));
+
+ CPPUNIT_ASSERT(n1.isValid() == false);
+ CPPUNIT_ASSERT(n2.isValid() == false);
+ CPPUNIT_ASSERT(n3.isValid() == false);
+ CPPUNIT_ASSERT(n4.isValid() == true);
+}
+
+void MyMoneyPriceTest::testRate()
+{
+ MyMoneyPrice n1(QString("from"), QString("to"), QDate(2005,9,23), MyMoneyMoney(1,3), QString("MySource"));
+ MyMoneyPrice n2(QString("from"), QString("to"), QDate(), MyMoneyMoney(1,3), QString("MySource"));
+
+ try {
+ CPPUNIT_ASSERT(n1.rate("to") == MyMoneyMoney(1,3));
+ CPPUNIT_ASSERT(n1.rate("from") == MyMoneyMoney(3,1));
+ CPPUNIT_ASSERT(n1.rate(QString()) == MyMoneyMoney(1,3));
+
+ CPPUNIT_ASSERT(n2.isValid() == false);
+ CPPUNIT_ASSERT(n2.rate("to") == MyMoneyMoney(1,1));
+ } catch(MyMoneyException *e) {
+ CPPUNIT_FAIL("Unexpected exception");
+ delete e;
+ }
+
+ try {
+ n1.rate("unknown");
+ CPPUNIT_FAIL("Missing expected exception");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+}
+
diff --git a/kmymoney2/mymoney/mymoneypricetest.h b/kmymoney2/mymoney/mymoneypricetest.h
new file mode 100644
index 0000000..a153a94
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneypricetest.h
@@ -0,0 +1,48 @@
+/***************************************************************************
+ mymoneypricetest.h
+ -------------------
+ copyright : (C) 2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef __MYMONEYPRICETEST_H__
+#define __MYMONEYPRICETEST_H__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#define private public
+#include "mymoneyprice.h"
+#undef private
+
+class MyMoneyPriceTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(MyMoneyPriceTest);
+ CPPUNIT_TEST(testDefaultConstructor);
+ CPPUNIT_TEST(testConstructor);
+ CPPUNIT_TEST(testValidity);
+ CPPUNIT_TEST_SUITE_END();
+
+protected:
+ MyMoneyPrice* m;
+
+public:
+ MyMoneyPriceTest();
+
+ void setUp();
+ void tearDown();
+
+ void testDefaultConstructor();
+ void testConstructor();
+ void testValidity();
+ void testRate();
+
+};
+#endif
diff --git a/kmymoney2/mymoney/mymoneyreport.cpp b/kmymoney2/mymoney/mymoneyreport.cpp
new file mode 100644
index 0000000..63c4ca7
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyreport.cpp
@@ -0,0 +1,787 @@
+/***************************************************************************
+ mymoneyreport.cpp
+ -------------------
+ begin : Sun July 4 2004
+ copyright : (C) 2004-2005 by Ace Jones
+ email : acejones@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstring.h>
+#include <qdom.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoneyfile.h"
+#include "mymoneyreport.h"
+
+const QStringList MyMoneyReport::kRowTypeText = QStringList::split ( ",", "none,assetliability,expenseincome,category,topcategory,account,payee,month,week,topaccount,topaccount-account,equitytype,accounttype,institution,budget,budgetactual,schedule,accountinfo,accountloaninfo,accountreconcile,cashflow", true );
+const QStringList MyMoneyReport::kColumnTypeText = QStringList::split ( ",", "none,months,bimonths,quarters,4,5,6,weeks,8,9,10,11,years", true );
+
+// if you add names here, don't forget to update the bitmap for EQueryColumns
+// and shift the bit for eQCend one position to the left
+const QStringList MyMoneyReport::kQueryColumnsText = QStringList::split ( ",", "none,number,payee,category,memo,account,reconcileflag,action,shares,price,performance,loan,balance", true );
+
+const MyMoneyReport::EReportType MyMoneyReport::kTypeArray[] = { eNoReport, ePivotTable, ePivotTable, eQueryTable, eQueryTable, eQueryTable, eQueryTable, eQueryTable, eQueryTable, eQueryTable, eQueryTable, eQueryTable, eQueryTable, eQueryTable, ePivotTable, ePivotTable, eInfoTable, eInfoTable, eInfoTable, eQueryTable, eQueryTable, eNoReport };
+const QStringList MyMoneyReport::kDetailLevelText = QStringList::split ( ",", "none,all,top,group,total,invalid", true );
+const QStringList MyMoneyReport::kChartTypeText = QStringList::split ( ",", "none,line,bar,pie,ring,stackedbar,invalid", true );
+
+// This should live in mymoney/mymoneytransactionfilter.h
+static const QStringList kTypeText = QStringList::split ( ",", "all,payments,deposits,transfers,none" );
+static const QStringList kStateText = QStringList::split ( ",", "all,notreconciled,cleared,reconciled,frozen,none" );
+static const QStringList kDateLockText = QStringList::split ( ",", "alldates,untiltoday,currentmonth,currentyear,monthtodate,yeartodate,yeartomonth,lastmonth,lastyear,last7days,last30days,last3months,last6months,last12months,next7days,next30days,next3months,next6months,next12months,userdefined,last3tonext3months,last11Months,currentQuarter,lastQuarter,nextQuarter,currentFiscalYear,lastFiscalYear,today" );
+static const QStringList kAccountTypeText = QStringList::split ( ",", "unknown,checkings,savings,cash,creditcard,loan,certificatedep,investment,moneymarket,asset,liability,currency,income,expense,assetloan,stock,equity,invalid" );
+
+MyMoneyReport::MyMoneyReport() :
+ m_name ( "Unconfigured Pivot Table Report" ),
+ m_detailLevel ( eDetailNone ),
+ m_convertCurrency ( true ),
+ m_favorite ( false ),
+ m_tax ( false ),
+ m_investments ( false ),
+ m_loans ( false ),
+ m_reportType ( kTypeArray[eExpenseIncome] ),
+ m_rowType ( eExpenseIncome ),
+ m_columnType ( eMonths ),
+ m_columnsAreDays ( false ),
+ m_queryColumns ( eQCnone ),
+ m_dateLock ( userDefined ),
+ m_accountGroupFilter ( false ),
+ m_chartType ( eChartLine ),
+ m_chartDataLabels ( true ),
+ m_chartGridLines ( true ),
+ m_chartByDefault ( false ),
+ m_chartLineWidth ( 2 ),
+ m_includeSchedules ( false ),
+ m_includeTransfers ( false ),
+ m_includeBudgetActuals ( false ),
+ m_includeUnusedAccounts ( false ),
+ m_showRowTotals ( false ),
+ m_includeForecast ( false ),
+ m_includeMovingAverage ( false ),
+ m_includePrice ( false ),
+ m_includeAveragePrice ( false )
+{
+}
+
+MyMoneyReport::MyMoneyReport ( const QString& id, const MyMoneyReport& right ) :
+ MyMoneyObject ( id )
+{
+ *this = right;
+ setId ( id );
+}
+
+MyMoneyReport::MyMoneyReport ( ERowType _rt, unsigned _ct, dateOptionE _dl, EDetailLevel _ss, const QString& _name, const QString& _comment ) :
+ m_name ( _name ),
+ m_comment ( _comment ),
+ m_detailLevel ( _ss ),
+ m_convertCurrency ( true ),
+ m_favorite ( false ),
+ m_tax ( false ),
+ m_investments ( false ),
+ m_loans ( false ),
+ m_reportType ( kTypeArray[_rt] ),
+ m_rowType ( _rt ),
+ m_columnsAreDays ( false ),
+ m_dateLock ( _dl ),
+ m_accountGroupFilter ( false ),
+ m_chartType ( eChartLine ),
+ m_chartDataLabels ( true ),
+ m_chartGridLines ( true ),
+ m_chartByDefault ( false ),
+ m_chartLineWidth ( 2 ),
+ m_includeSchedules ( false ),
+ m_includeTransfers ( false ),
+ m_includeBudgetActuals ( false ),
+ m_includeUnusedAccounts ( false ),
+ m_showRowTotals ( false ),
+ m_includeForecast ( false ),
+ m_includeMovingAverage ( false ),
+ m_includePrice ( false ),
+ m_includeAveragePrice ( false )
+{
+ if ( m_reportType == ePivotTable )
+ m_columnType = static_cast<EColumnType> ( _ct );
+ if ( m_reportType == eQueryTable )
+ m_queryColumns = static_cast<EQueryColumns> ( _ct );
+ setDateFilter ( _dl );
+
+ if ( ( _rt > static_cast<ERowType> ( sizeof ( kTypeArray ) / sizeof ( kTypeArray[0] ) ) )
+ || ( m_reportType == eNoReport ) )
+ throw new MYMONEYEXCEPTION ( "Invalid report type" );
+
+ if ( _rt == MyMoneyReport::eAssetLiability )
+ {
+ addAccountGroup ( MyMoneyAccount::Asset );
+ addAccountGroup ( MyMoneyAccount::Liability );
+ m_showRowTotals = true;
+ }
+ if ( _rt == MyMoneyReport::eExpenseIncome )
+ {
+ addAccountGroup ( MyMoneyAccount::Expense );
+ addAccountGroup ( MyMoneyAccount::Income );
+ m_showRowTotals = true;
+ }
+ //FIXME take this out once we have sorted out all issues regarding budget of assets and liabilities -- asoliverez@gmail.com
+ if ( _rt == MyMoneyReport::eBudget || _rt == MyMoneyReport::eBudgetActual )
+ {
+ addAccountGroup ( MyMoneyAccount::Expense );
+ addAccountGroup ( MyMoneyAccount::Income );
+ }
+ if ( _rt == MyMoneyReport::eAccountInfo )
+ {
+ addAccountGroup ( MyMoneyAccount::Asset );
+ addAccountGroup ( MyMoneyAccount::Liability );
+ }
+ //cash flow reports show splits for all account groups
+ if ( _rt == MyMoneyReport::eCashFlow )
+ {
+ addAccountGroup ( MyMoneyAccount::Expense );
+ addAccountGroup ( MyMoneyAccount::Income );
+ addAccountGroup ( MyMoneyAccount::Asset );
+ addAccountGroup ( MyMoneyAccount::Liability );
+ }
+}
+
+MyMoneyReport::MyMoneyReport ( const QDomElement& node ) :
+ MyMoneyObject ( node )
+{
+ if ( !read ( node ) )
+ clearId();
+}
+
+void MyMoneyReport::clear ( void )
+{
+ m_accountGroupFilter = false;
+ m_accountGroups.clear();
+
+ MyMoneyTransactionFilter::clear();
+}
+
+void MyMoneyReport::validDateRange ( QDate& _db, QDate& _de )
+{
+ _db = fromDate();
+ _de = toDate();
+
+ // if either begin or end date are invalid we have one of the following
+ // possible date filters:
+ //
+ // a) begin date not set - first transaction until given end date
+ // b) end date not set - from given date until last transaction
+ // c) both not set - first transaction until last transaction
+ //
+ // If there is no transaction in the engine at all, we use the current
+ // year as the filter criteria.
+
+ if ( !_db.isValid() || !_de.isValid() ) {
+ QValueList<MyMoneyTransaction> list = MyMoneyFile::instance()->transactionList ( *this );
+ QDate tmpBegin, tmpEnd;
+
+ if ( !list.isEmpty() ) {
+ qHeapSort ( list );
+ tmpBegin = list.front().postDate();
+ tmpEnd = list.back().postDate();
+ } else {
+ tmpBegin = QDate ( QDate::currentDate().year(), 1, 1 ); // the first date in the file
+ tmpEnd = QDate ( QDate::currentDate().year(), 12, 31 );// the last date in the file
+ }
+ if ( !_db.isValid() )
+ _db = tmpBegin;
+ if ( !_de.isValid() )
+ _de = tmpEnd;
+ }
+ if ( _db > _de )
+ _db = _de;
+}
+
+void MyMoneyReport::setRowType ( ERowType _rt )
+{
+ m_rowType = _rt;
+ m_reportType = kTypeArray[_rt];
+
+ m_accountGroupFilter = false;
+ m_accountGroups.clear();
+
+ if ( _rt == MyMoneyReport::eAssetLiability )
+ {
+ addAccountGroup ( MyMoneyAccount::Asset );
+ addAccountGroup ( MyMoneyAccount::Liability );
+ }
+ if ( _rt == MyMoneyReport::eExpenseIncome )
+ {
+ addAccountGroup ( MyMoneyAccount::Expense );
+ addAccountGroup ( MyMoneyAccount::Income );
+ }
+}
+
+bool MyMoneyReport::accountGroups(QValueList<MyMoneyAccount::accountTypeE>& list) const
+
+{
+ bool result = m_accountGroupFilter;
+
+ if ( result )
+ {
+ QValueList<MyMoneyAccount::accountTypeE>::const_iterator it_group = m_accountGroups.begin();
+ while ( it_group != m_accountGroups.end() )
+ {
+ list += ( *it_group );
+ ++it_group;
+ }
+ }
+ return result;
+}
+
+void MyMoneyReport::addAccountGroup ( MyMoneyAccount::accountTypeE type )
+{
+ if ( !m_accountGroups.isEmpty() && type != MyMoneyAccount::UnknownAccountType ) {
+ if ( m_accountGroups.contains ( type ) )
+ return;
+ }
+ m_accountGroupFilter = true;
+ if ( type != MyMoneyAccount::UnknownAccountType )
+ m_accountGroups.push_back ( type );
+}
+
+bool MyMoneyReport::includesAccountGroup( MyMoneyAccount::accountTypeE type ) const
+{
+ bool result = ( ! m_accountGroupFilter )
+ || ( isIncludingTransfers() && m_rowType == MyMoneyReport::eExpenseIncome )
+ || m_accountGroups.contains ( type );
+
+ return result;
+}
+
+bool MyMoneyReport::includes( const MyMoneyAccount& acc ) const
+{
+ bool result = false;
+
+ if ( includesAccountGroup ( acc.accountGroup() ) )
+ {
+ switch ( acc.accountGroup() )
+ {
+ case MyMoneyAccount::Income:
+ case MyMoneyAccount::Expense:
+ if ( isTax() )
+ result = ( acc.value ( "Tax" ) == "Yes" ) && includesCategory ( acc.id() );
+ else
+ result = includesCategory ( acc.id() );
+ break;
+ case MyMoneyAccount::Asset:
+ case MyMoneyAccount::Liability:
+ if ( isLoansOnly() )
+ result = acc.isLoan() && includesAccount ( acc.id() );
+ else if ( isInvestmentsOnly() )
+ result = acc.isInvest() && includesAccount ( acc.id() );
+ else if ( isIncludingTransfers() && m_rowType == MyMoneyReport::eExpenseIncome )
+ // If transfers are included, ONLY include this account if it is NOT
+ // included in the report itself!!
+ result = ! includesAccount ( acc.id() );
+ else
+ result = includesAccount ( acc.id() );
+ break;
+ default:
+ result = includesAccount ( acc.id() );
+ }
+ }
+ return result;
+}
+
+void MyMoneyReport::write ( QDomElement& e, QDomDocument *doc, bool anonymous ) const
+{
+ // No matter what changes, be sure to have a 'type' attribute. Only change
+ // the major type if it becomes impossible to maintain compatability with
+ // older versions of the program as new features are added to the reports.
+ // Feel free to change the minor type every time a change is made here.
+
+ writeBaseXML ( *doc, e );
+
+ if ( anonymous )
+ {
+ e.setAttribute ( "name", m_id );
+ e.setAttribute ( "comment", QString ( m_comment ).fill ( 'x' ) );
+ }
+ else
+ {
+ e.setAttribute ( "name", m_name );
+ e.setAttribute ( "comment", m_comment );
+ }
+ e.setAttribute ( "group", m_group );
+ e.setAttribute ( "convertcurrency", m_convertCurrency );
+ e.setAttribute ( "favorite", m_favorite );
+ e.setAttribute ( "tax", m_tax );
+ e.setAttribute ( "investments", m_investments );
+ e.setAttribute ( "loans", m_loans );
+ e.setAttribute ( "rowtype", kRowTypeText[m_rowType] );
+ e.setAttribute ( "datelock", kDateLockText[m_dateLock] );
+ e.setAttribute ( "includeschedules", m_includeSchedules );
+ e.setAttribute ( "columnsaredays", m_columnsAreDays );
+ e.setAttribute ( "includestransfers", m_includeTransfers );
+ if ( !m_budgetId.isEmpty() )
+ e.setAttribute ( "budget", m_budgetId );
+ e.setAttribute ( "includesactuals", m_includeBudgetActuals );
+ e.setAttribute ( "includeunused", m_includeUnusedAccounts );
+ e.setAttribute ( "includesforecast", m_includeForecast );
+ e.setAttribute ( "includesprice", m_includePrice );
+ e.setAttribute ( "includesaverageprice", m_includeAveragePrice );
+ e.setAttribute ( "includesmovingaverage", m_includeMovingAverage );
+ if( m_includeMovingAverage )
+ e.setAttribute ( "movingaveragedays", m_movingAverageDays );
+
+ e.setAttribute ( "charttype", kChartTypeText[m_chartType] );
+ e.setAttribute ( "chartdatalabels", m_chartDataLabels );
+ e.setAttribute ( "chartgridlines", m_chartGridLines );
+ e.setAttribute ( "chartbydefault", m_chartByDefault );
+ e.setAttribute ( "chartlinewidth", m_chartLineWidth );
+
+ if ( m_reportType == ePivotTable )
+ {
+ e.setAttribute ( "type", "pivottable 1.15" );
+ e.setAttribute ( "detail", kDetailLevelText[m_detailLevel] );
+ e.setAttribute ( "columntype", kColumnTypeText[m_columnType] );
+ e.setAttribute ( "showrowtotals", m_showRowTotals );
+ }
+ else if ( m_reportType == eQueryTable )
+ {
+ e.setAttribute ( "type", "querytable 1.14" );
+
+ QStringList columns;
+ unsigned qc = m_queryColumns;
+ unsigned it_qc = eQCbegin;
+ unsigned index = 1;
+ while ( it_qc != eQCend )
+ {
+ if ( qc & it_qc )
+ columns += kQueryColumnsText[index];
+ it_qc *= 2;
+ index++;
+ }
+ e.setAttribute ( "querycolumns", columns.join ( "," ) );
+ }
+ else if ( m_reportType == eInfoTable )
+ {
+ e.setAttribute ( "type", "infotable 1.0" );
+ e.setAttribute ( "detail", kDetailLevelText[m_detailLevel] );
+ e.setAttribute ( "showrowtotals", m_showRowTotals );
+ }
+
+ //
+ // Text Filter
+ //
+
+ QRegExp textfilter;
+ if ( textFilter ( textfilter ) )
+ {
+ QDomElement f = doc->createElement ( "TEXT" );
+ f.setAttribute ( "pattern", textfilter.pattern() );
+ f.setAttribute ( "casesensitive", textfilter.caseSensitive() );
+ f.setAttribute ( "regex", !textfilter.wildcard() );
+ f.setAttribute ( "inverttext", m_invertText );
+ e.appendChild ( f );
+ }
+
+ //
+ // Type & State Filters
+ //
+ QValueList<int> typelist;
+ if ( types ( typelist ) && ! typelist.empty() )
+ {
+ // iterate over payees, and add each one
+ QValueList<int>::const_iterator it_type = typelist.begin();
+ while ( it_type != typelist.end() )
+ {
+ QDomElement p = doc->createElement ( "TYPE" );
+ p.setAttribute ( "type", kTypeText[*it_type] );
+ e.appendChild ( p );
+
+ ++it_type;
+ }
+ }
+
+ QValueList<int> statelist;
+ if ( states ( statelist ) && ! statelist.empty() )
+ {
+ // iterate over payees, and add each one
+ QValueList<int>::const_iterator it_state = statelist.begin();
+ while ( it_state != statelist.end() )
+ {
+ QDomElement p = doc->createElement ( "STATE" );
+ p.setAttribute ( "state", kStateText[*it_state] );
+ e.appendChild ( p );
+
+ ++it_state;
+ }
+ }
+ //
+ // Number Filter
+ //
+
+ QString nrFrom, nrTo;
+ if ( numberFilter ( nrFrom, nrTo ) )
+ {
+ QDomElement f = doc->createElement ( "NUMBER" );
+ f.setAttribute ( "from", nrFrom );
+ f.setAttribute ( "to", nrTo );
+ e.appendChild ( f );
+ }
+
+ //
+ // Amount Filter
+ //
+
+ MyMoneyMoney from, to;
+ if ( amountFilter ( from, to ) ) // bool getAmountFilter(MyMoneyMoney&,MyMoneyMoney&);
+ {
+ QDomElement f = doc->createElement ( "AMOUNT" );
+ f.setAttribute ( "from", from.toString() );
+ f.setAttribute ( "to", to.toString() );
+ e.appendChild ( f );
+ }
+
+ //
+ // Payees Filter
+ //
+
+ QStringList payeelist;
+ if ( payees ( payeelist ) )
+ {
+ if ( payeelist.empty() )
+ {
+ QDomElement p = doc->createElement ( "PAYEE" );
+ e.appendChild ( p );
+ }
+ else
+ {
+ // iterate over payees, and add each one
+ QStringList::const_iterator it_payee = payeelist.begin();
+ while ( it_payee != payeelist.end() )
+ {
+ QDomElement p = doc->createElement ( "PAYEE" );
+ p.setAttribute ( "id", *it_payee );
+ e.appendChild ( p );
+
+ ++it_payee;
+ }
+ }
+ }
+
+ //
+ // Account Groups Filter
+ //
+
+ QValueList<MyMoneyAccount::accountTypeE> accountgrouplist;
+ if ( accountGroups ( accountgrouplist ) )
+ {
+ // iterate over accounts, and add each one
+ QValueList<MyMoneyAccount::accountTypeE>::const_iterator it_group = accountgrouplist.begin();
+ while ( it_group != accountgrouplist.end() )
+ {
+ QDomElement p = doc->createElement ( "ACCOUNTGROUP" );
+ p.setAttribute ( "group", kAccountTypeText[*it_group] );
+ e.appendChild ( p );
+
+ ++it_group;
+ }
+ }
+
+ //
+ // Accounts Filter
+ //
+
+ QStringList accountlist;
+ if ( accounts ( accountlist ) )
+ {
+ // iterate over accounts, and add each one
+ QStringList::const_iterator it_account = accountlist.begin();
+ while ( it_account != accountlist.end() )
+ {
+ QDomElement p = doc->createElement ( "ACCOUNT" );
+ p.setAttribute ( "id", *it_account );
+ e.appendChild ( p );
+
+ ++it_account;
+ }
+ }
+
+ //
+ // Categories Filter
+ //
+
+ accountlist.clear();
+ if ( categories ( accountlist ) )
+ {
+ // iterate over accounts, and add each one
+ QStringList::const_iterator it_account = accountlist.begin();
+ while ( it_account != accountlist.end() )
+ {
+ QDomElement p = doc->createElement ( "CATEGORY" );
+ p.setAttribute ( "id", *it_account );
+ e.appendChild ( p );
+
+ ++it_account;
+ }
+ }
+
+ //
+ // Date Filter
+ //
+
+ if ( m_dateLock == userDefined )
+ {
+ QDate dateFrom, dateTo;
+ if ( dateFilter ( dateFrom, dateTo ) )
+ {
+ QDomElement f = doc->createElement ( "DATES" );
+ if ( dateFrom.isValid() )
+ f.setAttribute ( "from", dateFrom.toString ( Qt::ISODate ) );
+ if ( dateTo.isValid() )
+ f.setAttribute ( "to", dateTo.toString ( Qt::ISODate ) );
+ e.appendChild ( f );
+ }
+ }
+}
+
+bool MyMoneyReport::read ( const QDomElement& e )
+{
+ // The goal of this reading method is 100% backward AND 100% forward
+ // compatability. Any report ever created with any version of KMyMoney
+ // should be able to be loaded by this method (as long as it's one of the
+ // report types supported in this version, of course)
+
+ bool result = false;
+
+ if (
+ "REPORT" == e.tagName()
+ &&
+ (
+ ( e.attribute ( "type" ).find ( "pivottable 1." ) == 0 )
+ ||
+ ( e.attribute ( "type" ).find ( "querytable 1." ) == 0 )
+ ||
+ ( e.attribute ( "type" ).find ( "infotable 1." ) == 0 )
+ )
+ )
+ {
+ result = true;
+ clear();
+
+ int i;
+ m_name = e.attribute ( "name" );
+ m_comment = e.attribute ( "comment", "Extremely old report" );
+
+ //set report type
+ if(!e.attribute ( "type" ).find ( "pivottable" )) {
+ m_reportType = MyMoneyReport::ePivotTable;
+ } else if(!e.attribute ( "type" ).find ( "querytable" )) {
+ m_reportType = MyMoneyReport::eQueryTable;
+ } else if(!e.attribute ( "type" ).find ( "infotable" )) {
+ m_reportType = MyMoneyReport::eInfoTable;
+ } else {
+ m_reportType = MyMoneyReport::eNoReport;
+ }
+
+ // Removed the line that screened out loading reports that are called
+ // "Default Report". It's possible for the user to change the comment
+ // to this, and we'd hate for it to break as a result.
+ m_group = e.attribute ( "group" );
+ m_id = e.attribute ( "id" );
+
+ //check for reports with older settings which didn't have the detail attribute
+ if ( e.hasAttribute ( "detail" ) )
+ {
+ i = kDetailLevelText.findIndex ( e.attribute ( "detail", "all" ) );
+ if ( i != -1 )
+ m_detailLevel = static_cast<EDetailLevel> ( i );
+ } else if ( e.attribute ( "showsubaccounts", "0" ).toUInt() ) {
+ //set to show all accounts
+ m_detailLevel = eDetailAll;
+ } else {
+ //set to show the top level account instead
+ m_detailLevel = eDetailTop;
+ }
+
+ m_convertCurrency = e.attribute ( "convertcurrency", "1" ).toUInt();
+ m_favorite = e.attribute ( "favorite", "0" ).toUInt();
+ m_tax = e.attribute ( "tax", "0" ).toUInt();
+ m_investments = e.attribute ( "investments", "0" ).toUInt();
+ m_loans = e.attribute ( "loans", "0" ).toUInt();
+ m_includeSchedules = e.attribute ( "includeschedules", "0" ).toUInt();
+ m_columnsAreDays = e.attribute ( "columnsaredays", "0" ).toUInt();
+ m_includeTransfers = e.attribute ( "includestransfers", "0" ).toUInt();
+ if ( e.hasAttribute ( "budget" ) )
+ m_budgetId = e.attribute ( "budget" );
+ m_includeBudgetActuals = e.attribute ( "includesactuals", "0" ).toUInt();
+ m_includeUnusedAccounts = e.attribute ( "includeunused", "0" ).toUInt();
+ m_includeForecast = e.attribute ( "includesforecast", "0" ).toUInt();
+ m_includePrice = e.attribute ( "includesprice", "0" ).toUInt();
+ m_includeAveragePrice = e.attribute ( "includesaverageprice", "0" ).toUInt();
+ m_includeMovingAverage = e.attribute ( "includesmovingaverage", "0" ).toUInt();
+ if( m_includeMovingAverage )
+ m_movingAverageDays = e.attribute ( "movingaveragedays", "1" ).toUInt();
+
+ //only load chart data if it is a pivot table
+ if ( m_reportType == ePivotTable ) {
+ i = kChartTypeText.findIndex ( e.attribute ( "charttype" ) );
+
+ if ( i != -1 )
+ m_chartType = static_cast<EChartType> ( i );
+
+ //if it is invalid, set to first type
+ if (m_chartType == eChartEnd)
+ m_chartType = eChartLine;
+
+ m_chartDataLabels = e.attribute ( "chartdatalabels", "1" ).toUInt();
+ m_chartGridLines = e.attribute ( "chartgridlines", "1" ).toUInt();
+ m_chartByDefault = e.attribute ( "chartbydefault", "0" ).toUInt();
+ m_chartLineWidth = e.attribute ( "chartlinewidth", "2" ).toUInt();
+ } else {
+ m_chartType = static_cast<EChartType> ( 0 );
+ m_chartDataLabels = true;
+ m_chartGridLines = true;
+ m_chartByDefault = false;
+ m_chartLineWidth = 1;
+ }
+
+ QString datelockstr = e.attribute ( "datelock", "userdefined" );
+ // Handle the pivot 1.2/query 1.1 case where the values were saved as
+ // numbers
+ bool ok = false;
+ i = datelockstr.toUInt ( &ok );
+ if ( !ok )
+ {
+ i = kDateLockText.findIndex ( datelockstr );
+ if ( i == -1 )
+ i = userDefined;
+ }
+ setDateFilter ( static_cast<dateOptionE> ( i ) );
+
+ i = kRowTypeText.findIndex ( e.attribute ( "rowtype", "expenseincome" ) );
+ if ( i != -1 )
+ {
+ setRowType ( static_cast<ERowType> ( i ) );
+ // recent versions of KMyMoney always showed a total column for
+ // income/expense reports. We turn it on for backward compatability
+ // here. If the total column is turned off, the flag will be reset
+ // in the next step
+ if ( i == eExpenseIncome )
+ m_showRowTotals = true;
+ }
+ if ( e.hasAttribute ( "showrowtotals" ) )
+ m_showRowTotals = e.attribute ( "showrowtotals" ).toUInt();
+
+ i = kColumnTypeText.findIndex ( e.attribute ( "columntype", "months" ) );
+ if ( i != -1 )
+ setColumnType ( static_cast<EColumnType> ( i ) );
+
+ unsigned qc = 0;
+ QStringList columns = QStringList::split ( ",", e.attribute ( "querycolumns", "none" ) );
+ QStringList::const_iterator it_column = columns.begin();
+ while ( it_column != columns.end() )
+ {
+ i = kQueryColumnsText.findIndex ( *it_column );
+ if ( i > 0 )
+ qc |= ( 1 << ( i - 1 ) );
+
+ ++it_column;
+ }
+ setQueryColumns ( static_cast<EQueryColumns> ( qc ) );
+
+ QDomNode child = e.firstChild();
+ while ( !child.isNull() && child.isElement() )
+ {
+ QDomElement c = child.toElement();
+ if ( "TEXT" == c.tagName() && c.hasAttribute ( "pattern" ) )
+ {
+ setTextFilter ( QRegExp ( c.attribute ( "pattern" ), c.attribute ( "casesensitive", "1" ).toUInt(), !c.attribute ( "regex", "1" ).toUInt() ), c.attribute ( "inverttext", "0" ).toUInt() );
+ }
+ if ( "TYPE" == c.tagName() && c.hasAttribute ( "type" ) )
+ {
+ i = kTypeText.findIndex ( c.attribute ( "type" ) );
+ if ( i != -1 )
+ addType ( i );
+ }
+ if ( "STATE" == c.tagName() && c.hasAttribute ( "state" ) )
+ {
+ i = kStateText.findIndex ( c.attribute ( "state" ) );
+ if ( i != -1 )
+ addState ( i );
+ }
+ if ( "NUMBER" == c.tagName() )
+ {
+ setNumberFilter ( c.attribute ( "from" ), c.attribute ( "to" ) );
+ }
+ if ( "AMOUNT" == c.tagName() )
+ {
+ setAmountFilter ( MyMoneyMoney ( c.attribute ( "from", "0/100" ) ), MyMoneyMoney ( c.attribute ( "to", "0/100" ) ) );
+ }
+ if ( "DATES" == c.tagName() )
+ {
+ QDate from, to;
+ if ( c.hasAttribute ( "from" ) )
+ from = QDate::fromString ( c.attribute ( "from" ), Qt::ISODate );
+ if ( c.hasAttribute ( "to" ) )
+ to = QDate::fromString ( c.attribute ( "to" ), Qt::ISODate );
+ MyMoneyTransactionFilter::setDateFilter ( from, to );
+ }
+ if ( "PAYEE" == c.tagName() )
+ {
+ addPayee ( c.attribute ( "id" ) );
+ }
+ if ( "CATEGORY" == c.tagName() && c.hasAttribute ( "id" ) )
+ {
+ addCategory ( c.attribute ( "id" ) );
+ }
+ if ( "ACCOUNT" == c.tagName() && c.hasAttribute ( "id" ) )
+ {
+ addAccount ( c.attribute ( "id" ) );
+ }
+ if ( "ACCOUNTGROUP" == c.tagName() && c.hasAttribute ( "group" ) )
+ {
+ i = kAccountTypeText.findIndex ( c.attribute ( "group" ) );
+ if ( i != -1 )
+ addAccountGroup ( static_cast<MyMoneyAccount::accountTypeE> ( i ) );
+ }
+ child = child.nextSibling();
+ }
+ }
+ return result;
+}
+
+void MyMoneyReport::writeXML ( QDomDocument& document, QDomElement& parent ) const
+{
+ QDomElement el = document.createElement ( "REPORT" );
+ write ( el, &document, false );
+ parent.appendChild ( el );
+}
+
+bool MyMoneyReport::hasReferenceTo ( const QString& id ) const
+{
+ QStringList list;
+
+ // collect all ids
+ accounts ( list );
+ categories ( list );
+ payees ( list );
+
+ return ( list.contains ( id ) > 0 );
+}
+
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/mymoney/mymoneyreport.h b/kmymoney2/mymoney/mymoneyreport.h
new file mode 100644
index 0000000..e467179
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyreport.h
@@ -0,0 +1,497 @@
+/***************************************************************************
+ mymoneyreport.h
+ -------------------
+ begin : Sun July 4 2004
+ copyright : (C) 2004-2005 by Ace Jones
+ email : acejones@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYREPORT_H
+#define MYMONEYREPORT_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qmap.h>
+#include <qvaluelist.h>
+#include <qstring.h>
+class QDomElement;
+class QDomDocument;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include <kmymoney/mymoneyobject.h>
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneytransactionfilter.h>
+#include <kmymoney/export.h>
+
+/**
+ * This class defines a report within the MyMoneyEngine. The report class
+ * contains all the configuration parameters needed to run a report, plus
+ * XML serialization.
+ *
+ * A report is a transactionfilter, so any report can specify which
+ * transactions it's interested down to the most minute level of detail.
+ * It extends the transactionfilter by providing identification (name,
+ * comments, group type, etc) as well as layout information (what kind
+ * of layout should be used, how the rows & columns should be presented,
+ * currency converted, etc.)
+ *
+ * As noted above, this class only provides a report DEFINITION. The
+ * generation and presentation of the report itself are left to higher
+ * level classes.
+ *
+ * @author Ace Jones <acejones@users.sourceforge.net>
+ */
+
+class KMYMONEY_EXPORT MyMoneyReport: public MyMoneyObject, public MyMoneyTransactionFilter
+{
+public:
+ // When adding a new row type, be sure to add a corresponding entry in kTypeArray
+ enum ERowType { eNoRows = 0, eAssetLiability, eExpenseIncome, eCategory, eTopCategory, eAccount, ePayee, eMonth, eWeek, eTopAccount, eAccountByTopAccount, eEquityType, eAccountType, eInstitution, eBudget, eBudgetActual, eSchedule, eAccountInfo, eAccountLoanInfo, eAccountReconcile, eCashFlow};
+ enum EReportType { eNoReport = 0, ePivotTable, eQueryTable, eInfoTable };
+ enum EColumnType { eNoColumns = 0, eDays = 1, eMonths = 1, eBiMonths = 2, eQuarters = 3, eWeeks = 7, eYears = 12 };
+
+ // if you add bits to this bitmask, start with the value currently assigned to eQCend and update its value afterwards
+ // also don't forget to add column names to kQueryColumnsText in mymoneyreport.cpp
+ enum EQueryColumns { eQCnone = 0x0, eQCbegin = 0x1, eQCnumber = 0x1, eQCpayee = 0x2, eQCcategory = 0x4, eQCmemo = 0x8, eQCaccount = 0x10, eQCreconciled = 0x20, eQCaction = 0x40, eQCshares = 0x80, eQCprice = 0x100, eQCperformance = 0x200, eQCloan = 0x400, eQCbalance = 0x800, eQCend = 0x1000 };
+
+ enum EDetailLevel { eDetailNone = 0, eDetailAll, eDetailTop, eDetailGroup, eDetailTotal, eDetailEnd };
+ enum EChartType { eChartNone = 0, eChartLine, eChartBar, eChartPie, eChartRing, eChartStackedBar, eChartEnd };
+
+ static const QStringList kRowTypeText;
+ static const QStringList kColumnTypeText;
+ static const QStringList kQueryColumnsText;
+ static const QStringList kDetailLevelText;
+ static const QStringList kChartTypeText;
+ static const EReportType kTypeArray[];
+
+public:
+ MyMoneyReport(void);
+ MyMoneyReport(ERowType _rt, unsigned _ct, dateOptionE _dl, EDetailLevel _ss, const QString& _name, const QString& _comment );
+ MyMoneyReport(const QString& id, const MyMoneyReport& right);
+
+ /**
+ * This constructor creates an object based on the data found in the
+ * QDomElement referenced by @p node. If problems arise, the @p id of
+ * the object is cleared (see MyMoneyObject::clearId()).
+ */
+ MyMoneyReport(const QDomElement& node);
+
+ // Simple get operations
+ const QString& name(void) const { return m_name; }
+ bool isShowingRowTotals(void) const { return (m_showRowTotals); }
+ EReportType reportType(void) const { return m_reportType; }
+ ERowType rowType(void) const { return m_rowType; }
+ EColumnType columnType(void) const { return m_columnType; }
+ bool isRunningSum(void) const { return (m_rowType==eAssetLiability); }
+ bool isConvertCurrency(void) const { return m_convertCurrency; }
+ unsigned columnPitch(void) const { return static_cast<unsigned>(m_columnType); }
+ bool isShowingColumnTotals(void) const { return m_convertCurrency; }
+ const QString& comment( void ) const { return m_comment; }
+ EQueryColumns queryColumns(void) const { return m_queryColumns; }
+ const QString& group( void ) const { return m_group; }
+ bool isFavorite(void) const { return m_favorite; }
+ bool isTax(void) const { return m_tax; }
+ bool isInvestmentsOnly(void) const { return m_investments; }
+ bool isLoansOnly(void) const { return m_loans; }
+ EDetailLevel detailLevel(void) const { return m_detailLevel; }
+ EChartType chartType(void) const { return m_chartType; }
+ bool isChartDataLabels(void) const { return m_chartDataLabels; }
+ bool isChartGridLines(void) const { return m_chartGridLines; }
+ bool isChartByDefault(void) const { return m_chartByDefault; }
+ uint chartLineWidth(void) const { return m_chartLineWidth; }
+ bool isIncludingSchedules(void) const { return m_includeSchedules; }
+ bool isColumnsAreDays(void) const { return m_columnsAreDays; }
+ bool isIncludingTransfers(void) const { return m_includeTransfers; }
+ bool isIncludingUnusedAccounts(void) const { return m_includeUnusedAccounts; }
+ bool hasBudget(void) const { return !m_budgetId.isEmpty(); }
+ const QString& budget(void) const { return m_budgetId; }
+ bool isIncludingBudgetActuals(void) const { return m_includeBudgetActuals; }
+ bool isIncludingForecast(void) const { return m_includeForecast; }
+ bool isIncludingMovingAverage(void) const { return m_includeMovingAverage; }
+ int movingAverageDays(void) const { return m_movingAverageDays; }
+ bool isIncludingPrice(void) const { return m_includePrice; }
+ bool isIncludingAveragePrice(void) const { return m_includeAveragePrice; }
+ bool isUserDefined(void) const { return m_dateLock == userDefined; }
+
+ // Simple set operations
+ void setName(const QString& _s) { m_name = _s; }
+ void setConvertCurrency(bool _f) { m_convertCurrency = _f; }
+ void setRowType(ERowType _rt);
+ void setColumnType(EColumnType _ct) { m_columnType = _ct; }
+ void setComment( const QString& _comment ) { m_comment = _comment; }
+ void setGroup( const QString& _group ) { m_group = _group; }
+ void setFavorite(bool _f) { m_favorite = _f; }
+ void setQueryColumns( EQueryColumns _qc ) { m_queryColumns = _qc; }
+ void setTax(bool _f) { m_tax = _f; }
+ void setInvestmentsOnly(bool _f) { m_investments = _f; if (_f) m_loans = false; }
+ void setLoansOnly(bool _f) { m_loans = _f; if (_f) m_investments = false; }
+ void setDetailLevel( EDetailLevel _detail ) { m_detailLevel = _detail; }
+ void setChartType ( EChartType _type ) { m_chartType = _type; }
+ void setChartDataLabels ( bool _f ) { m_chartDataLabels = _f; }
+ void setChartGridLines ( bool _f ) { m_chartGridLines = _f; }
+ void setChartByDefault ( bool _f ) { m_chartByDefault = _f; }
+ void setChartLineWidth ( uint _f ) { m_chartLineWidth = _f; }
+ void setIncludingSchedules( bool _f ) { m_includeSchedules = _f; }
+ void setColumnsAreDays( bool _f ) { m_columnsAreDays = _f; }
+ void setIncludingTransfers( bool _f ) { m_includeTransfers = _f; }
+ void setIncludingUnusedAccounts( bool _f ) { m_includeUnusedAccounts = _f; }
+ void setShowingRowTotals( bool _f ) { m_showRowTotals = _f; }
+ void setIncludingBudgetActuals( bool _f ) { m_includeBudgetActuals = _f; }
+ void setIncludingForecast( bool _f ) { m_includeForecast = _f; }
+ void setIncludingMovingAverage( bool _f ) { m_includeMovingAverage = _f; }
+ void setMovingAverageDays( int _days ) { m_movingAverageDays = _days; }
+ void setIncludingPrice( bool _f ) { m_includePrice = _f; }
+ void setIncludingAveragePrice( bool _f ) { m_includeAveragePrice = _f; }
+
+ /**
+ * Sets the budget used for this report
+ *
+ * @param _budget The ID of the budget to use, or an empty string
+ * to indicate a budget is NOT included
+ * @param _fa Whether to display actual data alongside the budget.
+ * Setting to false means the report displays ONLY the budget itself.
+ * @warning For now, the budget ID is ignored. The budget id is
+ * simply checked for any non-empty string, and if so, hasBudget()
+ * will return true.
+ */
+ void setBudget( const QString& _budget, bool _fa = true ) { m_budgetId = _budget; m_includeBudgetActuals=_fa; }
+
+ /**
+ * This method allows you to clear the underlying transaction filter
+ */
+ void clear(void);
+
+ /**
+ * This method allows you to set the underlying transaction filter
+ *
+ * @param _filter The filter which should replace the existing transaction
+ * filter.
+ */
+ void assignFilter(const MyMoneyTransactionFilter& _filter) { MyMoneyTransactionFilter::operator=(_filter); }
+
+ /**
+ * Set the underlying date filter and LOCK that filter to the specified
+ * range. For example, if @p _u is "CurrentMonth", this report should always
+ * be updated to the current month no matter when the report is run.
+ *
+ * This updating is not entirely automatic, you should update it yourself by
+ * calling updateDateFilter.
+ *
+ * @param _u The date range constant (MyMoneyTransactionFilter::dateRangeE)
+ * which this report should be locked to.
+ */
+
+ void setDateFilter(dateOptionE _u)
+ {
+ m_dateLock = _u;
+ if (_u != userDefined)
+ MyMoneyTransactionFilter::setDateFilter( _u );
+ }
+
+ /**
+ * Set the underlying date filter using the start and end dates provided.
+ * Note that this does not LOCK to any range like setDateFilter(unsigned)
+ * above. It is just a reimplementation of the MyMoneyTransactionFilter
+ * version.
+ *
+ * @param _db The inclusive begin date of the date range
+ * @param _de The inclusive end date of the date range
+ */
+
+ void setDateFilter(const QDate& _db,const QDate& _de) { MyMoneyTransactionFilter::setDateFilter( _db,_de ); }
+
+ /**
+ * Set the underlying date filter using the 'date lock' property.
+ *
+ * Always call this function before executing the report to be sure that
+ * the date filters properly match the plain-language 'date lock'.
+ *
+ * For example, if the report is date-locked to "Current Month", and the
+ * last time you loaded or ran the report was in August, but it's now
+ * September, this function will update the date range to be September,
+ * as is proper.
+ */
+ void updateDateFilter(void) { if (m_dateLock != userDefined) MyMoneyTransactionFilter::setDateFilter(m_dateLock); }
+
+ /**
+ * Retrieves a VALID beginning & ending date for this report.
+ *
+ * The underlying date filter can return en empty QDate() for either the
+ * begin or end date or both. This is typically unacceptable for reports,
+ * which need the REAL begin and end date.
+ *
+ * This function gets the underlying date filter range, and if either is
+ * an empty QDate(), it determines the missing date from looking at all
+ * the transactions which match the underlying filter, and returning the
+ * date of the first or last transaction (as appropriate).
+ *
+ * @param _db The inclusive begin date of the date range
+ * @param _de The inclusive end date of the date range
+ */
+ void validDateRange(QDate& _db, QDate& _de);
+
+ /**
+ * This method turns on the account group filter and adds the
+ * @p type to the list of allowed groups.
+ *
+ * Note that account group filtering is handled differently
+ * than all the filters of the underlying class. This filter
+ * is meant to be applied to individual splits of matched
+ * transactions AFTER the underlying filter is used to find
+ * the matching transactions.
+ *
+ * @param type the account group to add to the allowed groups list
+ */
+ void addAccountGroup(MyMoneyAccount::accountTypeE type);
+
+ /**
+ * This method returns whether an account group filter has been set,
+ * and if so, it returns all the account groups set in the filter.
+ *
+ * @param list list to append account groups into
+ * @return return true if an account group filter has been set
+ */
+ bool accountGroups(QValueList<MyMoneyAccount::accountTypeE>& list) const;
+
+ /**
+ * This method returns whether the specified account group
+ * is allowed by the account groups filter.
+ *
+ * @param type group to append account groups into
+ * @return return true if an account group filter has been set
+ */
+ bool includesAccountGroup( MyMoneyAccount::accountTypeE type ) const;
+
+ /**
+ * This method is used to test whether a specific account
+ * passes the accountGroup test and either the Account or
+ * Category test, depending on which sort of Account it is.
+ *
+ * The m_tax and m_investments properties are also considered.
+ *
+ * @param acc the account in question
+ * @return true if account is in filter set, false otherwise
+ */
+ bool includes( const MyMoneyAccount& acc ) const;
+
+ /**
+ * This method writes this report to the DOM element @p e,
+ * within the DOM document @p doc.
+ *
+ * @param e The element which should be populated with info from this report
+ * @param doc The document which we can use to create new sub-elements
+ * if needed
+ * @param anonymous Whether the sensitive parts of the report should be
+ * masked
+ */
+ void write(QDomElement& e, QDomDocument *doc, bool anonymous=false) const;
+
+ /**
+ * This method reads a report from the DOM element @p e, and
+ * populates this report with the results.
+ *
+ * @param e The element from which the report should be read
+ *
+ * @return bool True if a report was successfully loaded from the
+ * element @p e. If false is returned, the contents of this report
+ * object are undefined.
+ */
+ bool read(const QDomElement& e);
+
+ /**
+ * This method creates a QDomElement for the @p document
+ * under the parent node @p parent. (This version overwrites the
+ * MMObject base class.)
+ *
+ * @param document reference to QDomDocument
+ * @param parent reference to QDomElement parent node
+ */
+ virtual void writeXML(QDomDocument& document, QDomElement& parent) const;
+
+ /**
+ * This method checks if a reference to the given object exists. It returns,
+ * a @p true if the object is referencing the one requested by the
+ * parameter @p id. If it does not, this method returns @p false.
+ *
+ * @param id id of the object to be checked for references
+ * @retval true This object references object with id @p id.
+ * @retval false This object does not reference the object with id @p id.
+ */
+ virtual bool hasReferenceTo(const QString& id) const;
+
+private:
+ /**
+ * The user-assigned name of the report
+ */
+ QString m_name;
+ /**
+ * The user-assigned comment for the report, in case they want to make
+ * additional notes for themselves about the report.
+ */
+ QString m_comment;
+ /**
+ * Where to group this report amongst the others in the UI view. This
+ * should be assigned by the UI system.
+ */
+ QString m_group;
+ /**
+ * How much detail to show in the accounts
+ */
+ enum EDetailLevel m_detailLevel;
+ /**
+ * Whether to convert all currencies to the base currency of the file (true).
+ * If this is false, it's up to the report generator to decide how to handle
+ * the currency.
+ */
+ bool m_convertCurrency;
+ /**
+ * Whether this is one of the users' favorite reports
+ */
+ bool m_favorite;
+ /**
+ * Whether this report should only include categories marked as "Tax"="Yes"
+ */
+ bool m_tax;
+ /**
+ * Whether this report should only include investment accounts
+ */
+ bool m_investments;
+ /**
+ * Whether this report should only include loan accounts
+ * Applies only to querytable reports. Mutually exclusive with
+ * m_investments.
+ */
+ bool m_loans;
+ /**
+ * What sort of algorithm should be used to run the report
+ */
+ enum EReportType m_reportType;
+ /**
+ * What sort of values should show up on the ROWS of this report
+ */
+ enum ERowType m_rowType;
+ /**
+ * What sort of values should show up on the COLUMNS of this report,
+ * in the case of a 'PivotTable' report. Really this is used more as a
+ * QUANTITY of months or days. Whether it's months or days is determiend
+ * by m_columnsAreDays.
+ */
+ enum EColumnType m_columnType;
+ /**
+ * Whether the base unit of columns of this report is days. Only applies to
+ * 'PivotTable' reports. If false, then columns are months or multiples thereof.
+ */
+ bool m_columnsAreDays;
+ /**
+ * What sort of values should show up on the COLUMNS of this report,
+ * in the case of a 'QueryTable' report
+ */
+ enum EQueryColumns m_queryColumns;
+
+ /**
+ * The plain-language description of what the date range should be locked
+ * to. 'userDefined' means NO locking, in any other case, the report
+ * will be adjusted to match the date lock. So if the date lock is
+ * 'currentMonth', the start and end dates of the underlying filter will
+ * be updated to whatever the current month is. This updating happens
+ * automatically when the report is loaded, and should also be done
+ * manually by calling updateDateFilter() before generating the report
+ */
+ dateOptionE m_dateLock;
+ /**
+ * Which account groups should be included in the report. This filter
+ * is applied to the individual splits AFTER a transaction has been
+ * matched using the underlying filter.
+ */
+ QValueList<MyMoneyAccount::accountTypeE> m_accountGroups;
+ /**
+ * Whether an account group filter has been set (see m_accountGroups)
+ */
+ bool m_accountGroupFilter;
+ /**
+ * What format should be used to draw this report as a chart
+ */
+ enum EChartType m_chartType;
+ /**
+ * Whether the value of individual data points should be drawn on the chart
+ */
+ bool m_chartDataLabels;
+ /**
+ * Whether grid lines should be drawn on the chart
+ */
+ bool m_chartGridLines;
+ /**
+ * Whether this report should be shown as a chart by default (otherwise it
+ * should be shown as a textual report)
+ */
+ bool m_chartByDefault;
+ /**
+ * Width of the chart lines
+ */
+ uint m_chartLineWidth;
+ /**
+ * Whether to include scheduled transactions
+ */
+ bool m_includeSchedules;
+ /**
+ * Whether to include transfers. Only applies to Income/Expense reports
+ */
+ bool m_includeTransfers;
+ /**
+ * The id of the budget associated with this report.
+ */
+ QString m_budgetId;
+ /**
+ * Whether this report should print the actual data to go along with
+ * the budget. This is only valid if the report has a budget.
+ */
+ bool m_includeBudgetActuals;
+ /**
+ * Whether this report should include all accounts and not only
+ * accounts with transactions.
+ */
+ bool m_includeUnusedAccounts;
+ /**
+ * Whether this report should include columns for row totals
+ */
+ bool m_showRowTotals;
+ /**
+ * Whether this report should include forecast balance
+ */
+ bool m_includeForecast;
+ /**
+ * Whether this report should include moving average
+ */
+ bool m_includeMovingAverage;
+ /**
+ * The amount of days that spans each moving average
+ */
+ int m_movingAverageDays;
+ /**
+ * Whether this report should include prices
+ */
+ bool m_includePrice;
+ /**
+ * Whether this report should include moving average prices
+ */
+ bool m_includeAveragePrice;
+
+
+
+};
+
+#endif // MYMONEYREPORT_H
diff --git a/kmymoney2/mymoney/mymoneyscheduled.cpp b/kmymoney2/mymoney/mymoneyscheduled.cpp
new file mode 100644
index 0000000..88b4c7b
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyscheduled.cpp
@@ -0,0 +1,1372 @@
+/***************************************************************************
+ mymoneyscheduled.cpp
+ -------------------
+ copyright : (C) 2000-2002 by Michael Edwardes
+ (C) 2007 by Thomas Baumgart
+ email : mte@users.sourceforge.net
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoneyscheduled.h"
+#include "mymoneyexception.h"
+#include "mymoneyfile.h"
+
+MyMoneySchedule::MyMoneySchedule() :
+ MyMoneyObject()
+{
+ // Set up the default values
+ m_occurence = OCCUR_ANY;
+ m_occurenceMultiplier = 1;
+ m_type = TYPE_ANY;
+ m_paymentType = STYPE_ANY;
+ m_fixed = false;
+ m_autoEnter = false;
+ m_startDate = QDate();
+ m_endDate = QDate();
+ m_lastPayment = QDate();
+ m_weekendOption = MoveNothing;
+}
+
+MyMoneySchedule::MyMoneySchedule(const QString& name, typeE type,
+ occurenceE occurence, int occurenceMultiplier,
+ paymentTypeE paymentType,
+ const QDate& /* startDate */,
+ const QDate& endDate,
+ bool fixed, bool autoEnter) :
+ MyMoneyObject()
+{
+ // Set up the default values
+ m_name = name;
+ m_occurence = occurence;
+ m_occurenceMultiplier = occurenceMultiplier;
+ simpleToCompoundOccurence(m_occurenceMultiplier,m_occurence);
+ m_type = type;
+ m_paymentType = paymentType;
+ m_fixed = fixed;
+ m_autoEnter = autoEnter;
+ m_startDate = QDate();
+ m_endDate = endDate;
+ m_lastPayment = QDate();
+ m_weekendOption = MoveNothing;
+}
+
+MyMoneySchedule::MyMoneySchedule(const QDomElement& node) :
+ MyMoneyObject(node)
+{
+ if("SCHEDULED_TX" != node.tagName())
+ throw new MYMONEYEXCEPTION("Node was not SCHEDULED_TX");
+
+ m_name = node.attribute("name");
+ m_startDate = stringToDate(node.attribute("startDate"));
+ m_endDate = stringToDate(node.attribute("endDate"));
+ m_lastPayment = stringToDate(node.attribute("lastPayment"));
+
+ m_type = static_cast<MyMoneySchedule::typeE>(node.attribute("type").toInt());
+ m_paymentType = static_cast<MyMoneySchedule::paymentTypeE>(node.attribute("paymentType").toInt());
+ m_occurence = static_cast<MyMoneySchedule::occurenceE>(node.attribute("occurence").toInt());
+ m_occurenceMultiplier = node.attribute("occurenceMultiplier", "1").toInt();
+ // Convert to compound occurence
+ simpleToCompoundOccurence(m_occurenceMultiplier,m_occurence);
+ m_autoEnter = static_cast<bool>(node.attribute("autoEnter").toInt());
+ m_fixed = static_cast<bool>(node.attribute("fixed").toInt());
+ m_weekendOption = static_cast<MyMoneySchedule::weekendOptionE>(node.attribute("weekendOption").toInt());
+
+ // read in the associated transaction
+ QDomNodeList nodeList = node.elementsByTagName("TRANSACTION");
+ if(nodeList.count() == 0)
+ throw new MYMONEYEXCEPTION("SCHEDULED_TX has no TRANSACTION node");
+
+ setTransaction(MyMoneyTransaction(nodeList.item(0).toElement(), false), true);
+
+ // some old versions did not remove the entry date and post date fields
+ // in the schedule. So if this is the case, we deal with a very old transaction
+ // and can't use the post date field as next due date. Hence, we wipe it out here
+ if(m_transaction.entryDate().isValid()) {
+ m_transaction.setPostDate(QDate());
+ m_transaction.setEntryDate(QDate());
+ }
+
+ // readin the recorded payments
+ nodeList = node.elementsByTagName("PAYMENTS");
+ if(nodeList.count() > 0) {
+ nodeList = nodeList.item(0).toElement().elementsByTagName("PAYMENT");
+ for(unsigned int i = 0; i < nodeList.count(); ++i) {
+ m_recordedPayments << stringToDate(nodeList.item(i).toElement().attribute("date"));
+ }
+ }
+
+ // if the next due date is not set (comes from old version)
+ // then set it up the old way
+ if(!nextDueDate().isValid() && !m_lastPayment.isValid()) {
+ m_transaction.setPostDate(m_startDate);
+ // clear it, because the schedule has never been used
+ m_startDate = QDate();
+ }
+
+ // There are reports that lastPayment and nextDueDate are identical or
+ // that nextDueDate is older than lastPayment. This could
+ // be caused by older versions of the application. In this case, we just
+ // clear out the nextDueDate and let it calculate from the lastPayment.
+ if(nextDueDate().isValid() && nextDueDate() <= m_lastPayment) {
+ m_transaction.setPostDate(QDate());
+ }
+
+ if(!nextDueDate().isValid()) {
+ m_transaction.setPostDate(m_startDate);
+ m_transaction.setPostDate(nextPayment(m_lastPayment.addDays(1)));
+ }
+}
+
+MyMoneySchedule::MyMoneySchedule(const QString& id, const MyMoneySchedule& right) :
+ MyMoneyObject(id)
+{
+ *this = right;
+ setId(id);
+}
+
+MyMoneySchedule::occurenceE MyMoneySchedule::occurence(void) const
+{
+ MyMoneySchedule::occurenceE occ = m_occurence;
+ int mult = m_occurenceMultiplier;
+ compoundToSimpleOccurence(mult, occ);
+ return occ;
+}
+
+void MyMoneySchedule::setStartDate(const QDate& date)
+{
+ m_startDate = date;
+}
+
+void MyMoneySchedule::setPaymentType(paymentTypeE type)
+{
+ m_paymentType = type;
+}
+
+void MyMoneySchedule::setFixed(bool fixed)
+{
+ m_fixed = fixed;
+}
+
+void MyMoneySchedule::setTransaction(const MyMoneyTransaction& transaction)
+{
+ setTransaction(transaction, false);
+}
+
+void MyMoneySchedule::setTransaction(const MyMoneyTransaction& transaction, bool noDateCheck)
+{
+ MyMoneyTransaction t = transaction;
+ if(!noDateCheck) {
+ // don't allow a transaction that has no due date
+ // if we get something like that, then we use the
+ // the current next due date. If that is also invalid
+ // we can't help it.
+ if(!t.postDate().isValid()) {
+ t.setPostDate(m_transaction.postDate());
+ }
+
+ if(!t.postDate().isValid())
+ return;
+ }
+
+ // make sure to clear out some unused information in scheduled transactions
+ // we need to do this for the case that the transaction passed as argument
+ // is a matched or imported transaction.
+ QValueList<MyMoneySplit> splits = t.splits();
+ if(splits.count() > 0) {
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = splits.begin(); it_s != splits.end(); ++it_s) {
+ MyMoneySplit s = *it_s;
+ // clear out the bankID
+ if(!(*it_s).bankID().isEmpty()) {
+ s.setBankID(QString());
+ t.modifySplit(s);
+ }
+
+ // only clear payees from second split onwards
+ if(it_s == splits.begin())
+ continue;
+
+ if(!(*it_s).payeeId().isEmpty()) {
+ // but only if the split references an income/expense category
+ MyMoneyFile* file = MyMoneyFile::instance();
+ // some unit tests don't have a storage attached, so we
+ // simply skip the test
+ // Don't check for accounts with an id of 'Phony-ID' which is used
+ // internally for non-existing accounts (during creation of accounts)
+ if(file->storageAttached() && s.accountId() != QString("Phony-ID")) {
+ MyMoneyAccount acc = file->account(s.accountId());
+ if(acc.isIncomeExpense()) {
+ s.setPayeeId(QString());
+ t.modifySplit(s);
+ }
+ }
+ }
+ }
+ }
+
+ m_transaction = t;
+ // make sure that the transaction does not have an id so that we can enter
+ // it into the engine
+ m_transaction.clearId();
+}
+
+void MyMoneySchedule::setEndDate(const QDate& date)
+{
+ m_endDate = date;
+}
+
+void MyMoneySchedule::setAutoEnter(bool autoenter)
+{
+ m_autoEnter = autoenter;
+}
+
+const QDate& MyMoneySchedule::startDate(void) const
+{
+ if(m_startDate.isValid())
+ return m_startDate;
+ return nextDueDate();
+}
+
+const QDate& MyMoneySchedule::nextDueDate(void) const
+{
+ return m_transaction.postDate();
+}
+
+QDate MyMoneySchedule::adjustedNextDueDate(void) const
+{
+ if(isFinished())
+ return QDate();
+
+ return adjustedDate(nextDueDate(), weekendOption());
+}
+
+QDate MyMoneySchedule::adjustedDate(QDate date, weekendOptionE option) const
+{
+ if (option == MyMoneySchedule::MoveNothing)
+ return date;
+
+ int step = 1;
+ if (option == MyMoneySchedule::MoveFriday)
+ step = -1;
+
+ while (date.dayOfWeek() > 5)
+ date = date.addDays(step);
+
+ return date;
+}
+
+void MyMoneySchedule::setNextDueDate(const QDate& date)
+{
+ if(date.isValid()) {
+ m_transaction.setPostDate(date);
+ m_startDate = date;
+ }
+}
+
+void MyMoneySchedule::setLastPayment(const QDate& date)
+{
+ // Delete all payments older than date
+ QValueList<QDate>::Iterator it;
+ QValueList<QDate> delList;
+
+ for (it=m_recordedPayments.begin(); it!=m_recordedPayments.end(); ++it)
+ {
+ if (*it < date || !date.isValid())
+ delList.append(*it);
+ }
+
+ for (it=delList.begin(); it!=delList.end(); ++it)
+ {
+ m_recordedPayments.remove(*it);
+ }
+
+ m_lastPayment = date;
+ if(!m_startDate.isValid())
+ m_startDate = date;
+}
+
+void MyMoneySchedule::setName(const QString& nm)
+{
+ m_name = nm;
+}
+
+void MyMoneySchedule::setOccurence(occurenceE occ)
+{
+ MyMoneySchedule::occurenceE occ2 = occ;
+ int mult = 1;
+ simpleToCompoundOccurence(mult, occ2);
+ setOccurencePeriod( occ2 );
+ setOccurenceMultiplier( mult );
+}
+
+void MyMoneySchedule::setOccurencePeriod(occurenceE occ)
+{
+ m_occurence = occ;
+}
+
+void MyMoneySchedule::setOccurenceMultiplier(int occmultiplier)
+{
+ m_occurenceMultiplier = occmultiplier < 1 ? 1 : occmultiplier;
+}
+
+void MyMoneySchedule::setType(typeE type)
+{
+ m_type = type;
+}
+
+void MyMoneySchedule::validate(bool id_check) const
+{
+ /* Check the supplied instance is valid...
+ *
+ * To be valid it must not have the id set and have the following fields set:
+ *
+ * m_occurence
+ * m_type
+ * m_startDate
+ * m_paymentType
+ * m_transaction
+ * the transaction must contain at least one split (two is better ;-) )
+ */
+ if (id_check && !m_id.isEmpty())
+ throw new MYMONEYEXCEPTION("ID for schedule not empty when required");
+
+ if(m_occurence == OCCUR_ANY)
+ throw new MYMONEYEXCEPTION("Invalid occurence type for schedule");
+
+ if(m_type == TYPE_ANY)
+ throw new MYMONEYEXCEPTION("Invalid type for schedule");
+
+ if(!nextDueDate().isValid())
+ throw new MYMONEYEXCEPTION("Invalid next due date for schedule");
+
+ if(m_paymentType == STYPE_ANY)
+ throw new MYMONEYEXCEPTION("Invalid payment type for schedule");
+
+ if(m_transaction.splitCount() == 0)
+ throw new MYMONEYEXCEPTION("Scheduled transaction does not contain splits");
+
+ // Check the payment types
+ switch (m_type)
+ {
+ case TYPE_BILL:
+ if (m_paymentType == STYPE_DIRECTDEPOSIT || m_paymentType == STYPE_MANUALDEPOSIT)
+ throw new MYMONEYEXCEPTION("Invalid payment type for bills");
+ break;
+
+ case TYPE_DEPOSIT:
+ if (m_paymentType == STYPE_DIRECTDEBIT || m_paymentType == STYPE_WRITECHEQUE)
+ throw new MYMONEYEXCEPTION("Invalid payment type for deposits");
+ break;
+
+ case TYPE_ANY:
+ throw new MYMONEYEXCEPTION("Invalid type ANY");
+ break;
+
+ case TYPE_TRANSFER:
+// if (m_paymentType == STYPE_DIRECTDEPOSIT || m_paymentType == STYPE_MANUALDEPOSIT)
+// return false;
+ break;
+
+ case TYPE_LOANPAYMENT:
+ break;
+ }
+}
+
+QDate MyMoneySchedule::adjustedNextPayment(const QDate& refDate) const
+{
+ QDate date(nextPayment(refDate));
+ return date.isValid() ? adjustedDate(date, weekendOption()) : date;
+}
+
+QDate MyMoneySchedule::nextPayment(const QDate& refDate) const
+{
+ // if the enddate is valid and it is before the reference date,
+ // then there will be no more payments.
+ if(m_endDate.isValid() && m_endDate < refDate) {
+ return QDate();
+ }
+
+ QDate paymentDate(nextDueDate());
+
+ if(refDate >= paymentDate) {
+ switch (m_occurence)
+ {
+ case OCCUR_ONCE:
+ // if the lastPayment is already set, then there will be no more payments
+ // otherwise, the start date is the payment date
+ if(m_lastPayment.isValid())
+ return QDate();
+ // if the only payment should have been prior to the reference date,
+ // then don't show it
+ if(paymentDate < refDate)
+ return QDate();
+ break;
+
+ case OCCUR_DAILY:
+ paymentDate = refDate.addDays(m_occurenceMultiplier);
+ break;
+
+ case OCCUR_WEEKLY:
+ {
+ int step = 7*m_occurenceMultiplier;
+ do {
+ paymentDate = paymentDate.addDays(step);
+ }
+ while (paymentDate <= refDate);
+ }
+ break;
+
+ case OCCUR_EVERYHALFMONTH:
+ do
+ {
+ paymentDate = addHalfMonths(paymentDate,m_occurenceMultiplier);
+ }
+ while (paymentDate <= refDate);
+ break;
+
+ case OCCUR_MONTHLY:
+ do {
+ paymentDate = paymentDate.addMonths(m_occurenceMultiplier);
+ fixDate(paymentDate);
+ }
+ while (paymentDate <= refDate);
+ break;
+
+ case OCCUR_YEARLY:
+ do {
+ paymentDate = paymentDate.addYears(m_occurenceMultiplier);
+ fixDate(paymentDate);
+ }
+ while (paymentDate <= refDate);
+ break;
+
+ case OCCUR_ANY:
+ default:
+ paymentDate = QDate();
+ break;
+ }
+ }
+ if(paymentDate.isValid()) {
+ if(m_endDate.isValid() && paymentDate > m_endDate)
+ paymentDate = QDate();
+ }
+
+ if (paymentDate.isValid() && m_recordedPayments.contains(paymentDate))
+ paymentDate = nextPayment(paymentDate);
+
+ return paymentDate;
+}
+
+QValueList<QDate> MyMoneySchedule::paymentDates(const QDate& _startDate, const QDate& _endDate) const
+{
+ QDate paymentDate(nextDueDate());
+ QValueList<QDate> theDates;
+
+ QDate endDate(_endDate);
+ if ( willEnd() && m_endDate < endDate )
+ endDate = m_endDate;
+
+ weekendOptionE option(weekendOption());
+ QDate start_date(adjustedDate(startDate(), option));
+ // if the period specified by the parameters and the period
+ // defined for this schedule don't overlap, then the list remains empty
+ if ((willEnd() && m_endDate < _startDate)
+ || start_date > endDate)
+ return theDates;
+
+ QDate date(adjustedDate(paymentDate, option));
+
+ switch (m_occurence)
+ {
+ case OCCUR_ONCE:
+ if (start_date >= _startDate && start_date <= endDate)
+ theDates.append(start_date);
+ break;
+
+ case OCCUR_DAILY:
+ while (date.isValid() && (date <= endDate))
+ {
+ if (date >= _startDate)
+ theDates.append(date);
+ paymentDate = paymentDate.addDays(m_occurenceMultiplier);
+ date = adjustedDate(paymentDate, option);
+ }
+ break;
+
+ case OCCUR_WEEKLY:
+ {
+ int step = 7*m_occurenceMultiplier;
+ while (date.isValid() && (date <= endDate))
+ {
+ if (date >= _startDate)
+ theDates.append(date);
+ paymentDate = paymentDate.addDays(step);
+ date = adjustedDate(paymentDate, option);
+ }
+ }
+ break;
+
+ case OCCUR_EVERYHALFMONTH:
+ while (date.isValid() && (date <= endDate))
+ {
+ if (date >= _startDate)
+ theDates.append(date);
+ paymentDate = addHalfMonths(paymentDate,m_occurenceMultiplier);
+ date = adjustedDate(paymentDate, option);
+ }
+ break;
+
+ case OCCUR_MONTHLY:
+ while (date.isValid() && (date <= endDate))
+ {
+ if (date >= _startDate)
+ theDates.append(date);
+ paymentDate = paymentDate.addMonths(m_occurenceMultiplier);
+ fixDate(paymentDate);
+ date = adjustedDate(paymentDate, option);
+ }
+ break;
+
+ case OCCUR_YEARLY:
+ while (date.isValid() && (date <= endDate))
+ {
+ if (date >= _startDate)
+ theDates.append(date);
+ paymentDate = paymentDate.addYears(m_occurenceMultiplier);
+ fixDate(paymentDate);
+ date = adjustedDate(paymentDate, option);
+ }
+ break;
+
+ case OCCUR_ANY:
+ default:
+ break;
+ }
+
+ return theDates;
+}
+
+bool MyMoneySchedule::operator <(const MyMoneySchedule& right) const
+{
+ return adjustedNextDueDate() < right.adjustedNextDueDate();
+}
+
+bool MyMoneySchedule::operator ==(const MyMoneySchedule& right) const
+{
+ if ( MyMoneyObject::operator==(right) &&
+ m_occurence == right.m_occurence &&
+ m_occurenceMultiplier == right.m_occurenceMultiplier &&
+ m_type == right.m_type &&
+ m_startDate == right.m_startDate &&
+ m_paymentType == right.m_paymentType &&
+ m_fixed == right.m_fixed &&
+ m_transaction == right.m_transaction &&
+ m_endDate == right.m_endDate &&
+ m_autoEnter == right.m_autoEnter &&
+ m_lastPayment == right.m_lastPayment &&
+ ((m_name.length() == 0 && right.m_name.length() == 0) || (m_name == right.m_name)))
+ return true;
+ return false;
+}
+
+int MyMoneySchedule::transactionsRemaining(void) const
+{
+ int counter=0;
+
+ if (m_endDate.isValid())
+ {
+ QValueList<QDate> dates = paymentDates(m_lastPayment, m_endDate);
+ // Dont include the last payment so -1
+ counter = dates.count();
+ }
+ return counter;
+}
+
+MyMoneyAccount MyMoneySchedule::account(int cnt) const
+{
+ QValueList<MyMoneySplit> splits = m_transaction.splits();
+ QValueList<MyMoneySplit>::ConstIterator it;
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyAccount acc;
+
+ // search the first asset or liability account
+ for(it = splits.begin(); it != splits.end() && (acc.id().isEmpty() || cnt); ++it) {
+ try {
+ acc = file->account((*it).accountId());
+ if(acc.isAssetLiability())
+ --cnt;
+
+ if(!cnt)
+ return acc;
+ } catch(MyMoneyException *e) {
+ qWarning("Schedule '%s' references unknown account '%s'", id().data(), (*it).accountId().data());
+ delete e;
+ return MyMoneyAccount();
+ }
+ }
+
+ return MyMoneyAccount();
+}
+
+QDate MyMoneySchedule::dateAfter(int transactions) const
+{
+ int counter=1;
+ QDate paymentDate(startDate());
+
+ if (transactions<=0)
+ return paymentDate;
+
+ switch (m_occurence)
+ {
+ case OCCUR_ONCE:
+ break;
+
+ case OCCUR_DAILY:
+ while (counter++ < transactions)
+ paymentDate = paymentDate.addDays(m_occurenceMultiplier);
+ break;
+
+ case OCCUR_WEEKLY:
+ {
+ int step = 7 * m_occurenceMultiplier;
+ while (counter++ < transactions)
+ paymentDate = paymentDate.addDays(step);
+ }
+ break;
+
+ case OCCUR_EVERYHALFMONTH:
+ paymentDate = addHalfMonths(paymentDate,m_occurenceMultiplier*(transactions-1));
+ break;
+
+ case OCCUR_MONTHLY:
+ while (counter++ < transactions)
+ paymentDate = paymentDate.addMonths(m_occurenceMultiplier);
+ break;
+
+ case OCCUR_YEARLY:
+ while (counter++ < transactions)
+ paymentDate = paymentDate.addYears(m_occurenceMultiplier);
+ break;
+
+ case OCCUR_ANY:
+ default:
+ break;
+ }
+
+ return paymentDate;
+}
+
+bool MyMoneySchedule::isOverdue() const
+{
+ if (isFinished())
+ return false;
+
+ if(adjustedNextDueDate() >= QDate::currentDate())
+ return false;
+
+ return true;
+}
+
+bool MyMoneySchedule::isFinished() const
+{
+ if(!m_lastPayment.isValid())
+ return false;
+
+ if (m_endDate.isValid()) {
+ if(m_lastPayment >= m_endDate
+ || !nextDueDate().isValid()
+ || nextDueDate() > m_endDate)
+ return true;
+ }
+
+ // Check to see if its a once off payment
+ if (m_occurence == MyMoneySchedule::OCCUR_ONCE)
+ return true;
+
+ return false;
+}
+
+bool MyMoneySchedule::hasRecordedPayment(const QDate& date) const
+{
+ // m_lastPayment should always be > recordedPayments()
+ if (m_lastPayment.isValid() && m_lastPayment >= date)
+ return true;
+
+ if (m_recordedPayments.contains(date))
+ return true;
+
+ return false;
+}
+
+void MyMoneySchedule::recordPayment(const QDate& date)
+{
+ m_recordedPayments.append(date);
+}
+
+void MyMoneySchedule::setWeekendOption(const weekendOptionE option)
+{
+ // make sure only valid values are used. Invalid defaults to MoveNothing.
+ switch(option) {
+ case MoveFriday:
+ case MoveMonday:
+ m_weekendOption = option;
+ break;
+
+ default:
+ m_weekendOption = MoveNothing;
+ break;
+ }
+}
+
+void MyMoneySchedule::fixDate(QDate& date) const
+{
+ QDate fixDate(m_startDate);
+ if(fixDate.isValid()
+ && date.day() != fixDate.day()
+ && QDate::isValid(date.year(), date.month(), fixDate.day())) {
+ date.setYMD(date.year(), date.month(), fixDate.day());
+ }
+}
+
+void MyMoneySchedule::writeXML(QDomDocument& document, QDomElement& parent) const
+{
+ QDomElement el = document.createElement("SCHEDULED_TX");
+
+ writeBaseXML(document, el);
+
+ el.setAttribute("name", m_name);
+ el.setAttribute("type", m_type);
+ el.setAttribute("occurence", m_occurence);
+ el.setAttribute("occurenceMultiplier", m_occurenceMultiplier);
+ el.setAttribute("paymentType", m_paymentType);
+ el.setAttribute("startDate", dateToString(m_startDate));
+ el.setAttribute("endDate", dateToString(m_endDate));
+ el.setAttribute("fixed", m_fixed);
+ el.setAttribute("autoEnter", m_autoEnter);
+ el.setAttribute("lastPayment", dateToString(m_lastPayment));
+ el.setAttribute("weekendOption", m_weekendOption);
+
+ //store the payment history for this scheduled task.
+ QValueList<QDate> payments = recordedPayments();
+ QValueList<QDate>::ConstIterator it;
+ QDomElement paymentsElement = document.createElement("PAYMENTS");
+ for (it=payments.begin(); it!=payments.end(); ++it) {
+ QDomElement paymentEntry = document.createElement("PAYMENT");
+ paymentEntry.setAttribute("date", dateToString(*it));
+ paymentsElement.appendChild(paymentEntry);
+ }
+ el.appendChild(paymentsElement);
+
+ //store the transaction data for this task.
+ m_transaction.writeXML(document, el);
+
+ parent.appendChild(el);
+}
+
+bool MyMoneySchedule::hasReferenceTo(const QString& id) const
+{
+ return m_transaction.hasReferenceTo(id);
+}
+
+QString MyMoneySchedule::occurenceToString() const
+{
+ return occurenceToString( occurenceMultiplier(), occurencePeriod() );
+}
+
+QString MyMoneySchedule::occurenceToString(occurenceE occurence)
+{
+ QString occurenceString = I18N_NOOP("Any");
+
+ if(occurence == MyMoneySchedule::OCCUR_ONCE)
+ occurenceString = I18N_NOOP("Once");
+ else if(occurence == MyMoneySchedule::OCCUR_DAILY)
+ occurenceString = I18N_NOOP("Daily");
+ else if(occurence == MyMoneySchedule::OCCUR_WEEKLY)
+ occurenceString = I18N_NOOP("Weekly");
+ else if(occurence == MyMoneySchedule::OCCUR_FORTNIGHTLY)
+ occurenceString = I18N_NOOP("Fortnightly");
+ else if(occurence == MyMoneySchedule::OCCUR_EVERYOTHERWEEK)
+ occurenceString = I18N_NOOP("Every other week");
+ else if(occurence == MyMoneySchedule::OCCUR_EVERYHALFMONTH)
+ occurenceString = I18N_NOOP("Every half month");
+ else if(occurence == MyMoneySchedule::OCCUR_EVERYTHREEWEEKS)
+ occurenceString = I18N_NOOP("Every three weeks");
+ else if(occurence == MyMoneySchedule::OCCUR_EVERYFOURWEEKS)
+ occurenceString = I18N_NOOP("Every four weeks");
+ else if(occurence == MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS)
+ occurenceString = I18N_NOOP("Every thirty days");
+ else if(occurence == MyMoneySchedule::OCCUR_MONTHLY)
+ occurenceString = I18N_NOOP("Monthly");
+ else if(occurence == MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS)
+ occurenceString = I18N_NOOP("Every eight weeks");
+ else if(occurence == MyMoneySchedule::OCCUR_EVERYOTHERMONTH)
+ occurenceString = I18N_NOOP("Every two months");
+ else if(occurence == MyMoneySchedule::OCCUR_EVERYTHREEMONTHS)
+ occurenceString = I18N_NOOP("Every three months");
+ else if(occurence == MyMoneySchedule::OCCUR_QUARTERLY)
+ occurenceString = I18N_NOOP("Quarterly");
+ else if(occurence == MyMoneySchedule::OCCUR_EVERYFOURMONTHS)
+ occurenceString = I18N_NOOP("Every four months");
+ else if(occurence == MyMoneySchedule::OCCUR_TWICEYEARLY)
+ occurenceString = I18N_NOOP("Twice yearly");
+ else if(occurence == MyMoneySchedule::OCCUR_YEARLY)
+ occurenceString = I18N_NOOP("Yearly");
+ else if(occurence == MyMoneySchedule::OCCUR_EVERYOTHERYEAR)
+ occurenceString = I18N_NOOP("Every other year");
+ return occurenceString;
+}
+
+QString MyMoneySchedule::occurenceToString(int mult, occurenceE type)
+{
+ QString occurenceString = I18N_NOOP("Any");
+
+ if (type == MyMoneySchedule::OCCUR_ONCE)
+ switch (mult)
+ {
+ case 1: occurenceString = I18N_NOOP("Once"); break;
+ default: occurenceString = I18N_NOOP(static_cast<QString>("%1 times").arg(mult));
+ }
+ else if(type == MyMoneySchedule::OCCUR_DAILY)
+ switch (mult)
+ {
+ case 1: occurenceString = I18N_NOOP("Daily"); break;
+ case 30: occurenceString = I18N_NOOP("Every thirty days"); break;
+ default: occurenceString = I18N_NOOP(static_cast<QString>("Every %1 days").arg(mult));
+ }
+ else if(type == MyMoneySchedule::OCCUR_WEEKLY)
+ switch (mult)
+ {
+ case 1: occurenceString = I18N_NOOP("Weekly"); break;
+ case 2: occurenceString = I18N_NOOP("Every other week"); break;
+ case 3: occurenceString = I18N_NOOP("Every three weeks"); break;
+ case 4: occurenceString = I18N_NOOP("Every four weeks"); break;
+ case 8: occurenceString = I18N_NOOP("Every eight weeks"); break;
+ default: occurenceString = I18N_NOOP(static_cast<QString>("Every %1 weeks").arg(mult));
+ }
+ else if(type == MyMoneySchedule::OCCUR_EVERYHALFMONTH)
+ switch (mult)
+ {
+ case 1: occurenceString = I18N_NOOP("Every half month"); break;
+ default: occurenceString = I18N_NOOP(static_cast<QString>("Every %1 half months").arg(mult));
+ }
+ else if(type == MyMoneySchedule::OCCUR_MONTHLY)
+ switch (mult)
+ {
+ case 1: occurenceString = I18N_NOOP("Monthly"); break;
+ case 2: occurenceString = I18N_NOOP("Every two months"); break;
+ case 3: occurenceString = I18N_NOOP("Every three months"); break;
+ case 4: occurenceString = I18N_NOOP("Every four months"); break;
+ case 6: occurenceString = I18N_NOOP("Twice yearly"); break;
+ default: occurenceString = I18N_NOOP(static_cast<QString>("Every %1 months").arg(mult));
+ }
+ else if(type == MyMoneySchedule::OCCUR_YEARLY)
+ switch (mult)
+ {
+ case 1: occurenceString = I18N_NOOP("Yearly"); break;
+ case 2: occurenceString = I18N_NOOP("Every other year"); break;
+ default: occurenceString = I18N_NOOP(static_cast<QString>("Every %1 years").arg(mult));
+ }
+ return occurenceString;
+}
+
+QString MyMoneySchedule::occurencePeriodToString(MyMoneySchedule::occurenceE type)
+{
+ QString occurenceString = I18N_NOOP("Any");
+
+ if(type == MyMoneySchedule::OCCUR_ONCE)
+ occurenceString = I18N_NOOP("Once");
+ else if(type == MyMoneySchedule::OCCUR_DAILY)
+ occurenceString = I18N_NOOP("Day");
+ else if(type == MyMoneySchedule::OCCUR_WEEKLY)
+ occurenceString = I18N_NOOP("Week");
+ else if(type == MyMoneySchedule::OCCUR_EVERYHALFMONTH)
+ occurenceString = I18N_NOOP("Half-month");
+ else if(type == MyMoneySchedule::OCCUR_MONTHLY)
+ occurenceString = I18N_NOOP("Month");
+ else if(type == MyMoneySchedule::OCCUR_YEARLY)
+ occurenceString = I18N_NOOP("Year");
+ return occurenceString;
+}
+
+QString MyMoneySchedule::scheduleTypeToString(MyMoneySchedule::typeE type)
+{
+ QString text;
+
+ switch (type) {
+ case MyMoneySchedule::TYPE_BILL:
+ text = I18N_NOOP("Bill");
+ break;
+ case MyMoneySchedule::TYPE_DEPOSIT:
+ text = I18N_NOOP("Deposit");
+ break;
+ case MyMoneySchedule::TYPE_TRANSFER:
+ text = I18N_NOOP("Transfer");
+ break;
+ case MyMoneySchedule::TYPE_LOANPAYMENT:
+ text = I18N_NOOP("Loan payment");
+ break;
+ case MyMoneySchedule::TYPE_ANY:
+ default:
+ text = I18N_NOOP("Unknown");
+ }
+ return text;
+}
+
+
+QString MyMoneySchedule::paymentMethodToString(MyMoneySchedule::paymentTypeE paymentType)
+{
+ QString text;
+
+ switch (paymentType) {
+ case MyMoneySchedule::STYPE_DIRECTDEBIT:
+ text = I18N_NOOP("Direct debit");
+ break;
+ case MyMoneySchedule::STYPE_DIRECTDEPOSIT:
+ text = I18N_NOOP("Direct deposit");
+ break;
+ case MyMoneySchedule::STYPE_MANUALDEPOSIT:
+ text = I18N_NOOP("Manual deposit");
+ break;
+ case MyMoneySchedule::STYPE_OTHER:
+ text = I18N_NOOP("Other");
+ break;
+ case MyMoneySchedule::STYPE_WRITECHEQUE:
+ text = I18N_NOOP("Write check");
+ break;
+ case MyMoneySchedule::STYPE_STANDINGORDER:
+ text = I18N_NOOP("Standing order");
+ break;
+ case MyMoneySchedule::STYPE_BANKTRANSFER:
+ text = I18N_NOOP("Bank transfer");
+ break;
+ case MyMoneySchedule::STYPE_ANY:
+ text = I18N_NOOP("Any (Error)");
+ break;
+ }
+ return text;
+}
+
+QString MyMoneySchedule::weekendOptionToString(MyMoneySchedule::weekendOptionE weekendOption)
+{
+ QString text;
+
+ switch (weekendOption) {
+ case MyMoneySchedule::MoveFriday:
+ text = I18N_NOOP("Change the date to the previous Friday");
+ break;
+ case MyMoneySchedule::MoveMonday:
+ text = I18N_NOOP("Change the date to the next Monday");
+ break;
+ case MyMoneySchedule::MoveNothing:
+ text = I18N_NOOP("Do Nothing");
+ break;
+ }
+ return text;
+}
+
+// until we don't have the means to store the value
+// of the variation, we default to 10% in case this
+// scheduled transaction is marked 'not fixed'.
+//
+// ipwizard 2009-04-18
+
+int MyMoneySchedule::variation(void) const
+{
+ int rc = 0;
+ if(!isFixed()) {
+ rc = 10;
+#if 0
+ QString var = value("kmm-variation");
+ if(!var.isEmpty())
+ rc = var.toInt();
+#endif
+ }
+ return rc;
+}
+
+void MyMoneySchedule::setVariation(int var)
+{
+#if 0
+ deletePair("kmm-variation");
+ if(var != 0)
+ setValue("kmm-variation", QString("%1").arg(var));
+#endif
+}
+
+int MyMoneySchedule::eventsPerYear(MyMoneySchedule::occurenceE occurence)
+{
+ int rc = 0;
+
+ switch(occurence) {
+ case MyMoneySchedule::OCCUR_DAILY:
+ rc = 365;
+ break;
+ case MyMoneySchedule::OCCUR_WEEKLY:
+ rc = 52;
+ break;
+ case MyMoneySchedule::OCCUR_FORTNIGHTLY:
+ rc = 26;
+ break;
+ case MyMoneySchedule::OCCUR_EVERYOTHERWEEK:
+ rc = 26;
+ break;
+ case MyMoneySchedule::OCCUR_EVERYHALFMONTH:
+ rc = 24;
+ break;
+ case MyMoneySchedule::OCCUR_EVERYTHREEWEEKS:
+ rc = 17;
+ break;
+ case MyMoneySchedule::OCCUR_EVERYFOURWEEKS:
+ rc = 13;
+ break;
+ case MyMoneySchedule::OCCUR_MONTHLY:
+ case MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS:
+ rc = 12;
+ break;
+ case MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS:
+ rc = 6;
+ break;
+ case MyMoneySchedule::OCCUR_EVERYOTHERMONTH:
+ rc = 6;
+ break;
+ case MyMoneySchedule::OCCUR_EVERYTHREEMONTHS:
+ case MyMoneySchedule::OCCUR_QUARTERLY:
+ rc = 4;
+ break;
+ case MyMoneySchedule::OCCUR_EVERYFOURMONTHS:
+ rc = 3;
+ break;
+ case MyMoneySchedule::OCCUR_TWICEYEARLY:
+ rc = 2;
+ break;
+ case MyMoneySchedule::OCCUR_YEARLY:
+ rc = 1;
+ break;
+ default:
+ qWarning("Occurence not supported by financial calculator");
+ }
+
+ return rc;
+}
+
+int MyMoneySchedule::daysBetweenEvents(MyMoneySchedule::occurenceE occurence)
+{
+ int rc = 0;
+
+ switch(occurence) {
+ case MyMoneySchedule::OCCUR_DAILY:
+ rc = 1;
+ break;
+ case MyMoneySchedule::OCCUR_WEEKLY:
+ rc = 7;
+ break;
+ case MyMoneySchedule::OCCUR_FORTNIGHTLY:
+ rc = 14;
+ break;
+ case MyMoneySchedule::OCCUR_EVERYOTHERWEEK:
+ rc = 14;
+ break;
+ case MyMoneySchedule::OCCUR_EVERYHALFMONTH:
+ rc = 15;
+ break;
+ case MyMoneySchedule::OCCUR_EVERYTHREEWEEKS:
+ rc = 21;
+ break;
+ case MyMoneySchedule::OCCUR_EVERYFOURWEEKS:
+ rc = 28;
+ break;
+ case MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS:
+ rc = 30;
+ break;
+ case MyMoneySchedule::OCCUR_MONTHLY:
+ rc = 30;
+ break;
+ case MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS:
+ rc = 56;
+ break;
+ case MyMoneySchedule::OCCUR_EVERYOTHERMONTH:
+ rc = 60;
+ break;
+ case MyMoneySchedule::OCCUR_EVERYTHREEMONTHS:
+ case MyMoneySchedule::OCCUR_QUARTERLY:
+ rc = 90;
+ break;
+ case MyMoneySchedule::OCCUR_EVERYFOURMONTHS:
+ rc = 120;
+ break;
+ case MyMoneySchedule::OCCUR_TWICEYEARLY:
+ rc = 180;
+ break;
+ case MyMoneySchedule::OCCUR_YEARLY:
+ rc = 360;
+ break;
+ default:
+ qWarning("Occurence not supported by financial calculator");
+ }
+
+ return rc;
+}
+
+QDate MyMoneySchedule::addHalfMonths( QDate date, int mult ) const
+{
+ QDate newdate = date;
+ int d, dm;
+ if ( mult > 0 )
+ {
+ d = newdate.day();
+ if ( d <= 12 )
+ {
+ if ( mult % 2 == 0 )
+ newdate = newdate.addMonths(mult>>1);
+ else
+ newdate = newdate.addMonths(mult>>1).addDays(15);
+ }
+ else
+ for ( int i = 0; i < mult; i++ )
+ {
+ if ( d <= 13 )
+ newdate = newdate.addDays(15);
+ else
+ {
+ dm = newdate.daysInMonth();
+ if ( d == 14 )
+ newdate = newdate.addDays(( dm < 30 ) ? dm - d : 15);
+ else if ( d == 15 )
+ newdate = newdate.addDays(dm - d);
+ else if ( d == dm )
+ newdate = newdate.addDays(15 - d).addMonths(1);
+ else
+ newdate = newdate.addDays(-15).addMonths(1);
+ }
+ d = newdate.day();
+ }
+ }
+ else if ( mult < 0 ) // Go backwards
+ for ( int i = 0; i > mult; i-- )
+ {
+ d = newdate.day();
+ dm = newdate.daysInMonth();
+ if ( d > 15 )
+ {
+ dm = newdate.daysInMonth();
+ newdate = newdate.addDays( (d == dm) ? 15 - dm : -15);
+ }
+ else if ( d <= 13 )
+ newdate = newdate.addMonths(-1).addDays(15);
+ else if ( d == 15 )
+ newdate = newdate.addDays(-15);
+ else // 14
+ {
+ newdate = newdate.addMonths(-1);
+ dm = newdate.daysInMonth();
+ newdate = newdate.addDays(( dm < 30 ) ? dm - d : 15 );
+ }
+ }
+ return newdate;
+}
+
+MyMoneySchedule::occurenceE MyMoneySchedule::stringToOccurence(const QString& text)
+{
+ MyMoneySchedule::occurenceE occurence = MyMoneySchedule::OCCUR_ANY;
+ QString tmp = text.lower();
+
+ if(tmp == i18n("Once").lower())
+ occurence = MyMoneySchedule::OCCUR_ONCE;
+ else if(tmp == i18n("Daily").lower())
+ occurence = MyMoneySchedule::OCCUR_DAILY;
+ else if(tmp == i18n("Weekly").lower())
+ occurence = MyMoneySchedule::OCCUR_WEEKLY;
+ else if(tmp == i18n("Fortnightly").lower())
+ occurence = MyMoneySchedule::OCCUR_FORTNIGHTLY;
+ else if(tmp == i18n("Every other week").lower())
+ occurence = MyMoneySchedule::OCCUR_EVERYOTHERWEEK;
+ else if(tmp == i18n("Every half month").lower())
+ occurence = MyMoneySchedule::OCCUR_EVERYHALFMONTH;
+ else if(tmp == i18n("Every three weeks").lower())
+ occurence = MyMoneySchedule::OCCUR_EVERYTHREEWEEKS;
+ else if(tmp == i18n("Every four weeks").lower())
+ occurence = MyMoneySchedule::OCCUR_EVERYFOURWEEKS;
+ else if(tmp == i18n("Every thirty days").lower())
+ occurence = MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS;
+ else if(tmp == i18n("Monthly").lower())
+ occurence = MyMoneySchedule::OCCUR_MONTHLY;
+ else if(tmp == i18n("Every eight weeks").lower())
+ occurence = MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS;
+ else if(tmp == i18n("Every two months").lower())
+ occurence = MyMoneySchedule::OCCUR_EVERYOTHERMONTH;
+ else if(tmp == i18n("Every three months").lower())
+ occurence = MyMoneySchedule::OCCUR_EVERYTHREEMONTHS;
+ else if(tmp == i18n("Quarterly").lower())
+ occurence = MyMoneySchedule::OCCUR_QUARTERLY;
+ else if(tmp == i18n("Every four months").lower())
+ occurence = MyMoneySchedule::OCCUR_EVERYFOURMONTHS;
+ else if(tmp == i18n("Twice yearly").lower())
+ occurence = MyMoneySchedule::OCCUR_TWICEYEARLY;
+ else if(tmp == i18n("Yearly").lower())
+ occurence = MyMoneySchedule::OCCUR_YEARLY;
+ else if(tmp == i18n("Every other year").lower())
+ occurence = MyMoneySchedule::OCCUR_EVERYOTHERYEAR;
+
+ return occurence;
+}
+
+/**
+ * Helper method to convert simple occurence to compound occurence + multiplier
+ *
+ * @param multiplier Returned by reference. Adjusted multiplier
+ * @param occurence Returned by reference. Occurence type
+ */
+void MyMoneySchedule::simpleToCompoundOccurence(int& multiplier,occurenceE& occurence)
+{
+ occurenceE newOcc = occurence;
+ int newMulti = 1;
+ if (occurence == MyMoneySchedule::OCCUR_ONCE ||
+ occurence == MyMoneySchedule::OCCUR_DAILY ||
+ occurence == MyMoneySchedule::OCCUR_WEEKLY ||
+ occurence == MyMoneySchedule::OCCUR_EVERYHALFMONTH ||
+ occurence == MyMoneySchedule::OCCUR_MONTHLY ||
+ occurence == MyMoneySchedule::OCCUR_YEARLY )
+ { // Already a base occurence and multiplier
+ }
+ else if(occurence == MyMoneySchedule::OCCUR_FORTNIGHTLY ||
+ occurence == MyMoneySchedule::OCCUR_EVERYOTHERWEEK)
+ {
+ newOcc = MyMoneySchedule::OCCUR_WEEKLY;
+ newMulti = 2;
+ }
+ else if(occurence == MyMoneySchedule::OCCUR_EVERYTHREEWEEKS)
+ {
+ newOcc = MyMoneySchedule::OCCUR_WEEKLY;
+ newMulti = 3;
+ }
+ else if(occurence == MyMoneySchedule::OCCUR_EVERYFOURWEEKS)
+ {
+ newOcc = MyMoneySchedule::OCCUR_WEEKLY;
+ newMulti = 4;
+ }
+ else if(occurence == MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS)
+ {
+ newOcc = MyMoneySchedule::OCCUR_DAILY;
+ newMulti = 30;
+ }
+ else if(occurence == MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS)
+ {
+ newOcc = MyMoneySchedule::OCCUR_WEEKLY;
+ newMulti = 8;
+ }
+ else if(occurence == MyMoneySchedule::OCCUR_EVERYOTHERMONTH)
+ {
+ newOcc = MyMoneySchedule::OCCUR_MONTHLY;
+ newMulti = 2;
+ }
+ else if(occurence == MyMoneySchedule::OCCUR_EVERYTHREEMONTHS ||
+ occurence == MyMoneySchedule::OCCUR_QUARTERLY )
+ {
+ newOcc = MyMoneySchedule::OCCUR_MONTHLY;
+ newMulti = 3;
+ }
+ else if(occurence == MyMoneySchedule::OCCUR_EVERYFOURMONTHS)
+ {
+ newOcc = MyMoneySchedule::OCCUR_MONTHLY;
+ newMulti = 4;
+ }
+ else if(occurence == MyMoneySchedule::OCCUR_TWICEYEARLY)
+ {
+ newOcc = MyMoneySchedule::OCCUR_MONTHLY;
+ newMulti = 6;
+ }
+ else if(occurence == MyMoneySchedule::OCCUR_EVERYOTHERYEAR)
+ {
+ newOcc = MyMoneySchedule::OCCUR_YEARLY;
+ newMulti = 2;
+ }
+ else // Unknown
+ {
+ newOcc = MyMoneySchedule::OCCUR_ANY;
+ newMulti = 1;
+ }
+ if (newOcc != occurence)
+ {
+ occurence = newOcc;
+ multiplier = newMulti == 1 ? multiplier : newMulti * multiplier;
+ }
+}
+
+/**
+ * Helper method to convert compound occurence + multiplier to simple occurence
+ *
+ * @param multiplier Returned by reference. Adjusted multiplier
+ * @param occurence Returned by reference. Occurence type
+ */
+void MyMoneySchedule::compoundToSimpleOccurence(int& multiplier,occurenceE& occurence)
+{
+ occurenceE newOcc = occurence;
+ if(occurence == MyMoneySchedule::OCCUR_ONCE)
+ { // Nothing to do
+ }
+ else if(occurence == MyMoneySchedule::OCCUR_DAILY)
+ {
+ switch (multiplier)
+ {
+ case 1: break;
+ case 30: newOcc = MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS; break;
+ }
+ }
+ else if(newOcc == MyMoneySchedule::OCCUR_WEEKLY)
+ {
+ switch (multiplier)
+ {
+ case 1: break;
+ case 2: newOcc = MyMoneySchedule::OCCUR_EVERYOTHERWEEK; break;
+ case 3: newOcc = MyMoneySchedule::OCCUR_EVERYTHREEWEEKS; break;
+ case 4: newOcc = MyMoneySchedule::OCCUR_EVERYFOURWEEKS; break;
+ case 8: newOcc = MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS; break;
+ }
+ }
+ else if(occurence == MyMoneySchedule::OCCUR_MONTHLY)
+ switch (multiplier)
+ {
+ case 1: break;
+ case 2: newOcc = MyMoneySchedule::OCCUR_EVERYOTHERMONTH; break;
+ case 3: newOcc = MyMoneySchedule::OCCUR_EVERYTHREEMONTHS; break;
+ case 4: newOcc = MyMoneySchedule::OCCUR_EVERYFOURMONTHS; break;
+ case 6: newOcc = MyMoneySchedule::OCCUR_TWICEYEARLY; break;
+ }
+ else if(occurence == MyMoneySchedule::OCCUR_EVERYHALFMONTH)
+ switch (multiplier)
+ {
+ case 1: break;
+ }
+ else if(occurence == MyMoneySchedule::OCCUR_YEARLY)
+ {
+ switch (multiplier)
+ {
+ case 1: break;
+ case 2: newOcc = MyMoneySchedule::OCCUR_EVERYOTHERYEAR; break;
+ }
+ }
+ if (occurence != newOcc ) // Changed to derived type
+ {
+ occurence = newOcc;
+ multiplier = 1;
+ }
+}
diff --git a/kmymoney2/mymoney/mymoneyscheduled.h b/kmymoney2/mymoney/mymoneyscheduled.h
new file mode 100644
index 0000000..46303b2
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyscheduled.h
@@ -0,0 +1,695 @@
+/***************************************************************************
+ mymoneyscheduled.h
+ -------------------
+ copyright : (C) 2000-2002 by Michael Edwardes
+ (C) 2007 by Thomas Baumgart
+ email : mte@users.sourceforge.net
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYSCHEDULED_H
+#define MYMONEYSCHEDULED_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstringlist.h>
+#include <qmap.h>
+#include <qdatetime.h>
+
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoneytransaction.h"
+#include "mymoneyaccount.h"
+#include <kmymoney/export.h>
+#include <kmymoney/mymoneyobject.h>
+
+class MyMoneyStorageANON;
+
+/**
+ * @author Michael Edwardes
+ */
+
+/**
+ * This class represents a schedule. (A series of bills, deposits or
+ * transfers).
+ *
+ * @short A class to represent a schedule.
+ * @see MyMoneyScheduled
+ */
+class KMYMONEY_EXPORT MyMoneySchedule : public MyMoneyObject
+{
+ friend class MyMoneyStorageANON;
+public:
+ /**
+ * This enum is used to describe all the possible schedule frequencies.
+ * The special entry, OCCUR_ANY, is used to combine all the other types.
+ */
+ enum occurenceE { OCCUR_ANY=0, OCCUR_ONCE=1, OCCUR_DAILY=2, OCCUR_WEEKLY=4, OCCUR_FORTNIGHTLY=8,
+ OCCUR_EVERYOTHERWEEK=16,
+ OCCUR_EVERYHALFMONTH=18,
+ OCCUR_EVERYTHREEWEEKS=20,
+ OCCUR_EVERYTHIRTYDAYS=30,
+ OCCUR_MONTHLY=32, OCCUR_EVERYFOURWEEKS=64,
+ OCCUR_EVERYEIGHTWEEKS=126,
+ OCCUR_EVERYOTHERMONTH=128, OCCUR_EVERYTHREEMONTHS=256,
+ OCCUR_TWICEYEARLY=1024, OCCUR_EVERYOTHERYEAR=2048, OCCUR_QUARTERLY=4096,
+ OCCUR_EVERYFOURMONTHS=8192, OCCUR_YEARLY=16384
+ };
+
+ /**
+ * This enum is used to describe the schedule type.
+ */
+ enum typeE { TYPE_ANY=0, TYPE_BILL=1, TYPE_DEPOSIT=2, TYPE_TRANSFER=4, TYPE_LOANPAYMENT=5 };
+
+ /**
+ * This enum is used to describe the schedule's payment type.
+ */
+ enum paymentTypeE { STYPE_ANY=0, STYPE_DIRECTDEBIT=1, STYPE_DIRECTDEPOSIT=2,
+ STYPE_MANUALDEPOSIT=4, STYPE_OTHER=8,
+ STYPE_WRITECHEQUE=16,
+ STYPE_STANDINGORDER=32,
+ STYPE_BANKTRANSFER=64 };
+
+ /**
+ * This enum is used by the auto-commit functionality.
+ *
+ * Depending upon the value of m_weekendOption the schedule can
+ * be entered on a different date
+ **/
+ enum weekendOptionE { MoveFriday=0, MoveMonday=1, MoveNothing=2 };
+
+ /**
+ * Standard constructor
+ */
+ MyMoneySchedule();
+
+ /**
+ * Constructor for initialising the object.
+ *
+ * Please note that the optional fields are not set and the transaction
+ * MUST be set before it can be used.
+ *
+ * @a startDate is not used anymore and internally set to QDate()
+ */
+ MyMoneySchedule(const QString& name, typeE type, occurenceE occurence, int occurenceMultiplier,
+ paymentTypeE paymentType, const QDate& startDate, const QDate& endDate, bool fixed, bool autoEnter);
+
+ MyMoneySchedule(const QDomElement& node);
+
+ MyMoneySchedule(const QString& id, const MyMoneySchedule& right);
+
+ /**
+ * Standard destructor
+ */
+ ~MyMoneySchedule() {}
+
+ /**
+ * Simple get method that returns the occurence frequency.
+ *
+ * @return occurenceE The instance frequency.
+ */
+ occurenceE occurence(void) const;
+
+ /**
+ * Simple get method that returns the occurence period
+ * multiplier and occurence
+ *
+ * @return occurenceE The instance period
+ *
+ */
+ occurenceE occurencePeriod(void) const { return m_occurence; }
+
+ /**
+ * Simple get method that returns the occurence period multiplier.
+ *
+ * @return int The frequency multiplier
+ */
+ int occurenceMultiplier(void) const { return m_occurenceMultiplier; }
+
+ /**
+ * Simple get method that returns the schedule type.
+ *
+ * @return typeE The instance type.
+ */
+ typeE type(void) const { return m_type; }
+
+ /**
+ * Simple get method that returns the schedule startDate. If
+ * the schedule has been executed once, the date of the first
+ * execution is returned. Otherwise, the next due date is
+ * returned.
+ *
+ * @return reference to QDate containing the start date.
+ */
+ const QDate& startDate(void) const;
+
+ /**
+ * Simple get method that returns the schedule paymentType.
+ *
+ * @return paymentTypeE The instance paymentType.
+ */
+ paymentTypeE paymentType(void) const { return m_paymentType; }
+
+ /**
+ * Simple get method that returns true if the schedule is fixed.
+ *
+ * @return bool To indicate whether the instance is fixed.
+ */
+ bool isFixed(void) const { return m_fixed; }
+
+ /**
+ * Simple get method that returns true if the schedule will end
+ * at some time.
+ *
+ * @return bool Indicates whether the instance will end.
+ */
+ bool willEnd(void) const { return m_endDate.isValid(); }
+
+ /**
+ * Simple get method that returns the number of transactions remaining.
+ *
+ * @return int The number of transactions remaining for the instance.
+ */
+ int transactionsRemaining(void) const;
+
+ /**
+ * Simple get method that returns the schedule end date.
+ *
+ * @return QDate The end date for the instance.
+ */
+ const QDate& endDate(void) const { return m_endDate; }
+
+ /**
+ * Simple get method that returns true if the transaction should be
+ * automatically entered into the register.
+ *
+ * @return bool Indicates whether the instance will be automatically entered.
+ */
+ bool autoEnter(void) const { return m_autoEnter; }
+
+ /**
+ * Simple get method that returns the transaction data for the schedule.
+ *
+ * @return MyMoneyTransaction The transaction data for the instance.
+ */
+ const MyMoneyTransaction& transaction(void) const { return m_transaction; }
+
+ /**
+ * Simple method that returns the schedules last payment. If the
+ * schedule has never been executed, QDate() will be returned.
+ *
+ * @return QDate The last payment for the schedule.
+ */
+ const QDate& lastPayment(void) const { return m_lastPayment; }
+
+ /**
+ * Simple method that returns the next due date for the schedule.
+ *
+ * @return reference to QDate containing the next due date.
+ *
+ * @note The date returned can represent a value that is past
+ * a possible end of the schedule. Make sure to consider
+ * the return value of isFinished() when using the value returned.
+ */
+ const QDate& nextDueDate(void) const;
+
+ /**
+ * This method adjusts returns the next due date adjusted
+ * according to the rules specified by the schedule's weekend option.
+ *
+ * @return QDate containing the adjusted next due date. If the
+ * schedule is finished (@sa isFinished()) then the method
+ * returns an invalid QDate.
+ *
+ * @sa weekendOption()
+ * @sa adjustedDate()
+ */
+ QDate adjustedNextDueDate(void) const;
+
+ /**
+ * This method adjusts returns the date adjusted according to the
+ * rules specified by the schedule's weekend option.
+ *
+ * @return QDate containing the adjusted date.
+ */
+ QDate adjustedDate(QDate date, weekendOptionE option) const;
+
+ /**
+ * Get the weekendOption that determines how the schedule check code
+ * will enter transactions that occur on a weekend.
+ *
+ * This not used by MyMoneySchedule but by the support code.
+ **/
+ weekendOptionE weekendOption(void) const { return m_weekendOption; }
+
+ /**
+ * Simple method that sets the frequency for the schedule.
+ *
+ * @param occ The new occurence (frequency).
+ * @return none
+ */
+ void setOccurence(occurenceE occ);
+
+ /**
+ * Simple method that sets the schedule period
+ *
+ * @param occ The new occurence period (frequency)
+ * @return none
+ */
+ void setOccurencePeriod(occurenceE occ);
+
+ /**
+ * Simple method that sets the frequency multiplier for the schedule.
+ *
+ * @param occmultiplier The new occurence (frequency) multiplier.
+ * @return none
+ */
+ void setOccurenceMultiplier(int occmultiplier);
+
+ /**
+ * Simple method that sets the type for the schedule.
+ *
+ * @param type The new type.
+ * @return none
+ */
+ void setType(typeE type);
+
+ /**
+ * Simple method that sets the start date for the schedule.
+ *
+ * @param date The new start date.
+ * @return none
+ */
+ void setStartDate(const QDate& date);
+
+ /**
+ * Simple method that sets the payment type for the schedule.
+ *
+ * @param type The new payment type.
+ * @return none
+ */
+ void setPaymentType(paymentTypeE type);
+
+ /**
+ * Simple method to set whether the schedule is fixed or not.
+ *
+ * @param fixed boolean to indicate whether the instance is fixed.
+ * @return none
+ */
+ void setFixed(bool fixed);
+
+ /**
+ * Simple method that sets the transaction for the schedule.
+ * The transaction must have a valid postDate set, otherwise
+ * it will not be accepted.
+ *
+ * @param transaction The new transaction.
+ * @return none
+ */
+ void setTransaction(const MyMoneyTransaction& transaction);
+
+ /**
+ * Simple set method to set the end date for the schedule.
+ *
+ * @param date The new end date.
+ * @return none
+ */
+ void setEndDate(const QDate& date);
+
+ /**
+ * Simple set method to set whether this transaction should be automatically
+ * entered into the journal whenever it is due.
+ *
+ * @param autoenter boolean to indicate whether we need to automatically
+ * enter the transaction.
+ * @return none
+ */
+ void setAutoEnter(bool autoenter);
+
+ /**
+ * Simple set method to set the schedule's next payment date.
+ *
+ * @param date The next payment date.
+ * @return none
+ */
+ void setNextDueDate(const QDate& date);
+
+ /**
+ * Simple set method to set the schedule's last payment. If
+ * this method is called for the first time on the object,
+ * the @a m_startDate member will be set to @a date as well.
+ *
+ * This method should be called whenever a schedule is entered or skipped.
+ *
+ * @param date The last payment date.
+ * @return none
+ */
+ void setLastPayment(const QDate& date);
+
+ /**
+ * Set the weekendOption that determines how the schedule check code
+ * will enter transactions that occur on a weekend. The following values
+ * are valid:
+ *
+ * - MoveNothing: don't modify date
+ * - MoveFriday: modify the date to the previous friday
+ * - MoveMonday: modify the date to the following monday
+ *
+ * If an invalid option is given, the option is set to MoveNothing.
+ *
+ * @param option See list in description
+ * @return none
+ *
+ * @note This not used by MyMoneySchedule but by the support code.
+ **/
+ void setWeekendOption(const weekendOptionE option);
+
+ /**
+ * Validates the schedule instance.
+ *
+ * Makes sure the paymentType matches the type and that the required
+ * fields have been set.
+ *
+ * @param id_check if @p true, the method will check for an empty id.
+ * if @p false, this check is skipped. Default is @p true.
+ *
+ * @return If this method returns, all checks are passed. Otherwise,
+ * it will throw a MyMoneyException object.
+ *
+ * @exception MyMoneyException with detailed error information is thrown
+ * in case of failure of any check.
+ */
+ void validate(bool id_check=true) const;
+
+ /**
+ * Calculates the date of the next payment adjusted according to the
+ * rules specified by the schedule's weekend option.
+ *
+ * @param refDate The reference date from which the next payment
+ * date will be calculated (defaults to current date)
+ *
+ * @return QDate The adjusted date the next payment is due. This date is
+ * always past @a refDate. In case of an error or if there
+ * are no more payments then an empty/invalid QDate() will
+ * be returned.
+ */
+ QDate adjustedNextPayment(const QDate& refDate = QDate::currentDate()) const;
+
+ /**
+ * Calculates the date of the next payment.
+ *
+ * @param refDate The reference date from which the next payment
+ * date will be calculated (defaults to current date)
+ *
+ * @return QDate The date the next payment is due. This date is
+ * always past @a refDate. In case of an error or
+ * if there is no more payments then an empty/invalid QDate()
+ * will be returned.
+ */
+ QDate nextPayment(const QDate& refDate = QDate::currentDate()) const;
+
+ /**
+ * Calculates the dates of the payment over a certain period of time.
+ *
+ * An empty list is returned for no payments or error.
+ *
+ * @param startDate The start date for the range calculations
+ * @param endDate The end date for the range calculations.
+ * @return QValueList<QDate> The dates on which the payments are due.
+ */
+ QValueList<QDate> paymentDates(const QDate& startDate, const QDate& endDate) const;
+
+ /**
+ * Returns the instances name
+ *
+ * @return The name
+ */
+ const QString& name(void) const { return m_name; }
+
+ /**
+ * Changes the instance name
+ *
+ * @param nm The new name
+ * @return none
+ */
+ void setName(const QString& nm);
+
+ bool operator ==(const MyMoneySchedule& right) const;
+ bool operator !=(const MyMoneySchedule& right) const { return ! operator==(right); }
+
+ bool operator <(const MyMoneySchedule& right) const;
+
+ MyMoneyAccount account(int cnt = 1) const;
+ MyMoneyAccount transferAccount(void) const { return account(2); };
+ QDate dateAfter(int transactions) const;
+
+ bool isOverdue() const;
+ bool isFinished() const;
+ bool hasRecordedPayment(const QDate&) const;
+ void recordPayment(const QDate&);
+ QValueList<QDate> recordedPayments(void) const { return m_recordedPayments; }
+
+ void writeXML(QDomDocument& document, QDomElement& parent) const;
+
+ /**
+ * This method checks if a reference to the given object exists. It returns,
+ * a @p true if the object is referencing the one requested by the
+ * parameter @p id. If it does not, this method returns @p false.
+ *
+ * @param id id of the object to be checked for references
+ * @retval true This object references object with id @p id.
+ * @retval false This object does not reference the object with id @p id.
+ */
+ virtual bool hasReferenceTo(const QString& id) const;
+
+ /**
+ * Returns the human-readable format of Schedule's occurence
+ *
+ * @return QString representing the human readable format
+ */
+ QString occurenceToString() const;
+
+ /**
+ * This method is used to convert the occurence type from it's
+ * internal representation into a human readable format.
+ *
+ * @param type numerical representation of the MyMoneySchedule
+ * occurence type
+ *
+ * @return QString representing the human readable format
+ */
+ static QString occurenceToString(occurenceE type);
+
+ /**
+ * This method is used to convert a multiplier and base occurence type
+ * from it's internal representation into a human readable format.
+ * When multiplier * occurence is equivalent to a simple occurence
+ * the method returns the same as occurenceToString of the simple occurence
+ *
+ * @param mult occurence multiplier
+ * @param type occurence period
+ *
+ * @return QString representing the human readable format
+ */
+ static QString occurenceToString(int mult, occurenceE type);
+
+ /**
+ * This method is used to convert an occurence period from
+ * it's internal representation into a human-readable format.
+ *
+ * @param type numerical representation of the MyMoneySchedule
+ * occurence type
+ *
+ * @return QString representing the human readable format
+ */
+ static QString occurencePeriodToString(occurenceE type);
+
+ /**
+ * This method is used to convert the payment type from it's
+ * internal representation into a human readable format.
+ *
+ * @param paymentType numerical representation of the MyMoneySchedule
+ * payment type
+ *
+ * @return QString representing the human readable format
+ */
+ static QString paymentMethodToString(MyMoneySchedule::paymentTypeE paymentType);
+
+ /**
+ * This method is used to convert the schedule weekend option from it's
+ * internal representation into a human readable format.
+ *
+ * @param weekendOption numerical representation of the MyMoneySchedule
+ * weekend option
+ *
+ * @return QString representing the human readable format
+ */
+ static QString weekendOptionToString(MyMoneySchedule::weekendOptionE weekendOption);
+
+ /**
+ * This method is used to convert the schedule type from it's
+ * internal representation into a human readable format.
+ *
+ * @param type numerical representation of the MyMoneySchedule
+ * schedule type
+ *
+ * @return QString representing the human readable format
+ */
+ static QString scheduleTypeToString(MyMoneySchedule::typeE type);
+
+ int variation(void) const;
+ void setVariation(int var);
+
+ /**
+ *
+ * Convert an occurence to the maximum number of events possible during a single
+ * calendar year.
+ * A fortnight is treated as 15 days.
+ *
+ * @param occurence The occurence
+ *
+ * @return int Number of days between events
+ */
+ static int eventsPerYear(MyMoneySchedule::occurenceE occurence);
+
+ /**
+ *
+ * Convert an occurence to the number of days between events
+ * Treats a month as 30 days.
+ * Treats a fortnight as 15 days.
+ *
+ * @param occurence The occurence
+ *
+ * @return int Number of days between events
+ */
+ static int daysBetweenEvents(MyMoneySchedule::occurenceE occurence);
+
+ /**
+ * Helper method to convert simple occurence to compound occurence + multiplier
+ *
+ * @param multiplier Returned by reference. Adjusted multiplier
+ * @param occurence Returned by reference. Occurence type
+ */
+ static void simpleToCompoundOccurence(int& multiplier,occurenceE& occurence);
+
+ /**
+ * Helper method to convert compound occurence + multiplier to simple occurence
+ *
+ * @param multiplier Returned by reference. Adjusted multiplier
+ * @param occurence Returned by reference. Occurence type
+ */
+ static void compoundToSimpleOccurence(int& multiplier,occurenceE& occurence);
+
+ /**
+ * This method is used to convert the occurence type from the
+ * human readable form into it's internal representation.
+ *
+ * @param text reference to QString representing the human readable format
+ * @return numerical representation of the occurence
+ */
+ static MyMoneySchedule::occurenceE stringToOccurence(const QString& text);
+
+private:
+ /**
+ * This method forces the day of the passed @p date to
+ * be the day of the start date of this schedule kept
+ * in m_startDate. It is internally used when calculating
+ * the payment dates over several periods.
+ *
+ * @param date reference to QDate object to be checked and adjusted
+ */
+ void fixDate(QDate& date) const;
+
+ /**
+ * Simple method that sets the transaction for the schedule.
+ * The transaction must have a valid postDate set, otherwise
+ * it will not be accepted. This test is bypassed, if @a noDateCheck
+ * is set to true
+ *
+ * @param transaction The new transaction.
+ * @param noDateCheck if @a true, the date check is bypassed
+ * @return none
+ */
+ void setTransaction(const MyMoneyTransaction& transaction, bool noDateCheck);
+
+ /**
+ * This method adds a number of Half Months to the given Date.
+ * This is used for OCCUR_EVERYHALFMONTH occurences.
+ * The addition uses the following rules to add a half month:
+ * Day 1-13: add 15 days
+ * Day 14: add 15 days (except February: the last day of the month)
+ * Day 15: last day of the month
+ * Day 16-29 (not last day in February): subtract 15 days and add 1 month
+ * 30 and last day: 15th of next month
+ *
+ * This calculation pairs days 1 to 12 with 16 to 27.
+ * Day 15 is paired with the last day of every month.
+ * Repeated addition has issues in the following cases:
+ * - Days 13 to 14 are paired with 28 to 29 until addition hits the last day of February
+ * after which the (15,last) pair will be used.
+ * - Addition from Day 30 leads immediately to the (15th,last) day pair.
+ *
+ * @param date The date
+ * @param mult The number of half months to add. Default is 1.
+ *
+ * @return QDate date with mult half months added
+ */
+ QDate addHalfMonths( QDate date, int mult = 1 ) const;
+
+private:
+ /// Its occurence
+ occurenceE m_occurence;
+
+ /// Its occurence multiplier
+ int m_occurenceMultiplier;
+
+ /// Its type
+ typeE m_type;
+
+ /// The date the schedule commences
+ QDate m_startDate;
+
+ /// The payment type
+ paymentTypeE m_paymentType;
+
+ /// Can the amount vary
+ bool m_fixed;
+
+ /// The, possibly estimated, amount plus all other relevant details
+ MyMoneyTransaction m_transaction;
+
+ /// The last transaction date if the schedule does end at a fixed date
+ QDate m_endDate;
+
+ /// Enter the transaction into the register automatically
+ bool m_autoEnter;
+
+ /// Internal date used for calculations
+ QDate m_lastPayment;
+
+ /// The name
+ QString m_name;
+
+ /// The recorded payments
+ QValueList<QDate> m_recordedPayments;
+
+ /// The weekend option
+ weekendOptionE m_weekendOption;
+};
+#endif
diff --git a/kmymoney2/mymoney/mymoneyscheduletest.cpp b/kmymoney2/mymoney/mymoneyscheduletest.cpp
new file mode 100644
index 0000000..0a4a380
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyscheduletest.cpp
@@ -0,0 +1,1909 @@
+/***************************************************************************
+ mymoneyscheduletest.cpp
+ -------------------
+ copyright : (C) 2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+// Include internationalization
+#include <klocale.h>
+
+#include "mymoneyscheduletest.h"
+
+#include "mymoneysplit.h"
+#include "mymoneymoney.h"
+
+#include <iostream>
+
+MyMoneyScheduleTest::MyMoneyScheduleTest()
+{
+}
+
+
+void MyMoneyScheduleTest::setUp () {
+}
+
+void MyMoneyScheduleTest::tearDown () {
+}
+
+void MyMoneyScheduleTest::testEmptyConstructor() {
+ MyMoneySchedule s;
+
+ CPPUNIT_ASSERT(s.id().isEmpty());
+ CPPUNIT_ASSERT(s.m_occurence == MyMoneySchedule::OCCUR_ANY);
+ CPPUNIT_ASSERT(s.m_type == MyMoneySchedule::TYPE_ANY);
+ CPPUNIT_ASSERT(s.m_paymentType == MyMoneySchedule::STYPE_ANY);
+ CPPUNIT_ASSERT(s.m_fixed == false);
+ CPPUNIT_ASSERT(!s.m_startDate.isValid());
+ CPPUNIT_ASSERT(!s.m_endDate.isValid());
+ CPPUNIT_ASSERT(!s.m_lastPayment.isValid());
+ CPPUNIT_ASSERT(s.m_autoEnter == false);
+ CPPUNIT_ASSERT(s.m_name.isEmpty());
+ CPPUNIT_ASSERT(s.willEnd() == false);
+}
+
+void MyMoneyScheduleTest::testConstructor() {
+ MyMoneySchedule s( "A Name",
+ MyMoneySchedule::TYPE_BILL,
+ MyMoneySchedule::OCCUR_WEEKLY, 1,
+ MyMoneySchedule::STYPE_DIRECTDEBIT,
+ QDate::currentDate(),
+ QDate(),
+ true,
+ true);
+
+ CPPUNIT_ASSERT(s.type() == MyMoneySchedule::TYPE_BILL);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_WEEKLY);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 1 );
+ CPPUNIT_ASSERT(s.paymentType() == MyMoneySchedule::STYPE_DIRECTDEBIT);
+ CPPUNIT_ASSERT(s.startDate() == QDate());
+ CPPUNIT_ASSERT(s.willEnd() == false);
+ CPPUNIT_ASSERT(s.isFixed() == true);
+ CPPUNIT_ASSERT(s.autoEnter() == true);
+ CPPUNIT_ASSERT(s.name() == "A Name");
+ CPPUNIT_ASSERT(!s.m_endDate.isValid());
+ CPPUNIT_ASSERT(!s.m_lastPayment.isValid());
+}
+
+void MyMoneyScheduleTest::testSetFunctions() {
+ MyMoneySchedule s;
+
+ s.setId("SCHED001");
+ CPPUNIT_ASSERT(s.id() == "SCHED001");
+
+ s.setType(MyMoneySchedule::TYPE_BILL);
+ CPPUNIT_ASSERT(s.type() == MyMoneySchedule::TYPE_BILL);
+
+ s.setEndDate(QDate::currentDate());
+ CPPUNIT_ASSERT(s.endDate() == QDate::currentDate());
+ CPPUNIT_ASSERT(s.willEnd() == true);
+}
+
+void MyMoneyScheduleTest::testCopyConstructor() {
+ MyMoneySchedule s;
+
+ s.setId("SCHED001");
+ s.setType(MyMoneySchedule::TYPE_BILL);
+
+ MyMoneySchedule s2(s);
+
+ CPPUNIT_ASSERT(s.id() == s2.id());
+ CPPUNIT_ASSERT(s.type() == s2.type());
+}
+
+void MyMoneyScheduleTest::testAssignmentConstructor() {
+ MyMoneySchedule s;
+
+ s.setId("SCHED001");
+ s.setType(MyMoneySchedule::TYPE_BILL);
+
+ MyMoneySchedule s2 = s;
+
+ CPPUNIT_ASSERT(s.id() == s2.id());
+ CPPUNIT_ASSERT(s.type() == s2.type());
+}
+
+void MyMoneyScheduleTest::testSingleton() {
+/*
+ MyMoneyScheduled *m = MyMoneyScheduled::instance();
+ CPPUNIT_ASSERT(m!=NULL);
+
+ CPPUNIT_ASSERT(m->m_instance != NULL);
+ CPPUNIT_ASSERT(m->m_nextId == 1);
+*/
+}
+
+void MyMoneyScheduleTest::testAddSchedule()
+{
+/*
+ MyMoneyScheduled *m = MyMoneyScheduled::instance();
+ CPPUNIT_ASSERT(m!=NULL);
+
+ try {
+
+ MyMoneySplit sp1;
+ sp1.setShares(MyMoneyMoney(1));
+ sp1.setValue(MyMoneyMoney(1));
+ sp1.setAccountId("MTE1");
+ sp1.setMemo("MTE1");
+ sp1.setPayeeId("MTE1");
+
+ MyMoneySplit sp2;
+ sp2.setShares(MyMoneyMoney(1));
+ sp2.setValue(MyMoneyMoney(1));
+ sp2.setAccountId("MTE2");
+ sp2.setMemo("MTE2");
+ sp2.setPayeeId("MTE2");
+
+ MyMoneyTransaction t;
+ t.addSplit(sp1);
+ t.addSplit(sp2);
+
+ MyMoneySchedule s1( "s1",
+ MyMoneySchedule::TYPE_BILL,
+ MyMoneySchedule::OCCUR_WEEKLY, 1,
+ MyMoneySchedule::STYPE_DIRECTDEBIT,
+ QDate(2001, 1, 1),
+ false,
+ true,
+ true);
+ s1.setTransaction(t);
+ MyMoneySchedule s2( "s2",
+ MyMoneySchedule::TYPE_DEPOSIT,
+ MyMoneySchedule::OCCUR_MONTHLY, 1,
+ MyMoneySchedule::STYPE_MANUALDEPOSIT,
+ QDate(2001, 2, 1),
+ false,
+ true,
+ true);
+ s2.setTransaction(t);
+ MyMoneySchedule s3( "s3",
+ MyMoneySchedule::TYPE_TRANSFER,
+ MyMoneySchedule::OCCUR_YEARLY, 1,
+ MyMoneySchedule::STYPE_WRITECHEQUE,
+ QDate(2001, 3, 1),
+ false,
+ true,
+ true);
+ s3.setTransaction(t);
+
+
+ m->addSchedule("A000001", s1);
+ m->addSchedule("A000001", s2);
+ m->addSchedule("A000001", s3);
+ } catch(MyMoneyException *e) {
+ char buf[256];
+ sprintf(buf, "Unexpected exception: %s", e->what().latin1());
+ CPPUNIT_FAIL(buf);
+ delete e;
+ }
+
+ CPPUNIT_ASSERT(m->m_nextId == 4);
+ CPPUNIT_ASSERT(m->m_accountsScheduled["A000001"].size() == 3);
+*/
+}
+
+void MyMoneyScheduleTest::testAnyScheduled()
+{
+/*
+ MyMoneyScheduled *m = MyMoneyScheduled::instance();
+ CPPUNIT_ASSERT(m!=NULL);
+
+ // Successes
+ CPPUNIT_ASSERT(m->anyScheduled("A000001"));
+ CPPUNIT_ASSERT(m->anyScheduled("A000001", MyMoneySchedule::TYPE_BILL));
+ CPPUNIT_ASSERT(m->anyScheduled("A000001", MyMoneySchedule::TYPE_DEPOSIT));
+ CPPUNIT_ASSERT(m->anyScheduled("A000001", MyMoneySchedule::TYPE_TRANSFER));
+ CPPUNIT_ASSERT(m->anyScheduled("A000001", MyMoneySchedule::TYPE_ANY,
+ MyMoneySchedule::OCCUR_MONTHLY));
+ CPPUNIT_ASSERT(m->anyScheduled("A000001", MyMoneySchedule::TYPE_ANY,
+ MyMoneySchedule::OCCUR_WEEKLY));
+ CPPUNIT_ASSERT(m->anyScheduled("A000001", MyMoneySchedule::TYPE_ANY,
+ MyMoneySchedule::OCCUR_YEARLY));
+ CPPUNIT_ASSERT(m->anyScheduled("A000001", MyMoneySchedule::TYPE_ANY,
+ MyMoneySchedule::OCCUR_ANY,
+ MyMoneySchedule::STYPE_DIRECTDEBIT));
+ CPPUNIT_ASSERT(m->anyScheduled("A000001", MyMoneySchedule::TYPE_ANY,
+ MyMoneySchedule::OCCUR_ANY,
+ MyMoneySchedule::STYPE_MANUALDEPOSIT));
+ CPPUNIT_ASSERT(m->anyScheduled("A000001", MyMoneySchedule::TYPE_ANY,
+ MyMoneySchedule::OCCUR_ANY,
+ MyMoneySchedule::STYPE_WRITECHEQUE));
+
+ // Failures
+ CPPUNIT_ASSERT(m->anyScheduled("A000001", MyMoneySchedule::TYPE_BILL,
+ MyMoneySchedule::OCCUR_MONTHLY) == false);
+*/
+}
+
+void MyMoneyScheduleTest::testOverdue()
+{
+ MyMoneySchedule sch_overdue;
+ MyMoneySchedule sch_intime;
+
+ // the following checks only work correctly, if currentDate() is
+ // between the 1st and 27th. If it is between 28th and 31st
+ // we don't perform them. Note: this should be fixed.
+ if(QDate::currentDate().day() > 27 || QDate::currentDate().day() == 1) {
+ std::cout << std::endl << "testOverdue() skipped because current day is between 28th and 2nd" << std::endl;
+ return;
+ }
+
+ QDate startDate = QDate::currentDate().addDays(-1).addMonths(-23);
+ QDate lastPaymentDate = QDate::currentDate().addDays(-1).addMonths(-1);
+
+ QString ref = QString(
+ "<!DOCTYPE TEST>\n"
+ "<SCHEDULE-CONTAINER>\n"
+ " <SCHEDULED_TX startDate=\"%1\" autoEnter=\"0\" weekendOption=\"2\" lastPayment=\"%2\" paymentType=\"8\" endDate=\"\" type=\"5\" id=\"SCH0002\" name=\"A Name\" fixed=\"0\" occurenceMultiplier=\"1\" occurence=\"32\" >\n"
+ " <PAYMENTS>\n"
+ " <PAYMENT date=\"%3\" />\n"
+ " </PAYMENTS>\n"
+ " <TRANSACTION postdate=\"\" memo=\"Wohnung:Miete\" id=\"\" commodity=\"EUR\" entrydate=\"\" >\n"
+ " <SPLITS>\n"
+ " <SPLIT payee=\"P000001\" reconciledate=\"\" shares=\"96379/100\" action=\"\" number=\"\" reconcileflag=\"2\" memo=\"\" value=\"96379/100\" account=\"A000076\" />\n"
+ " <SPLIT payee=\"P000001\" reconciledate=\"\" shares=\"-96379/100\" action=\"\" number=\"\" reconcileflag=\"1\" memo=\"\" value=\"-96379/100\" account=\"A000276\" />\n"
+ " </SPLITS>\n"
+ " <KEYVALUEPAIRS>\n"
+ " <PAIR key=\"key\" value=\"value\" />\n"
+ " </KEYVALUEPAIRS>\n"
+ " </TRANSACTION>\n"
+ " </SCHEDULED_TX>\n"
+ "</SCHEDULE-CONTAINER>\n");
+ QString ref_overdue = ref.arg(startDate.toString(Qt::ISODate))
+ .arg(lastPaymentDate.toString(Qt::ISODate))
+ .arg(lastPaymentDate.toString(Qt::ISODate));
+
+ QString ref_intime = ref.arg(startDate.addDays(1).toString(Qt::ISODate))
+ .arg(lastPaymentDate.addDays(1).toString(Qt::ISODate))
+ .arg(lastPaymentDate.addDays(1).toString(Qt::ISODate));
+
+ QDomDocument doc;
+ QDomElement node;
+
+ // std::cout << ref_intime << std::endl;
+ try {
+ doc.setContent(ref_overdue);
+ node = doc.documentElement().firstChild().toElement();
+ sch_overdue = MyMoneySchedule(node);
+ doc.setContent(ref_intime);
+ node = doc.documentElement().firstChild().toElement();
+ sch_intime = MyMoneySchedule(node);
+
+ CPPUNIT_ASSERT(sch_overdue.isOverdue() == true);
+ CPPUNIT_ASSERT(sch_intime.isOverdue() == false);
+
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+/*
+ MyMoneyScheduled *m = MyMoneyScheduled::instance();
+ CPPUNIT_ASSERT(m!=NULL);
+
+ try
+ {
+ CPPUNIT_ASSERT(m->anyOverdue("A000001"));
+ CPPUNIT_ASSERT(m->anyOverdue("A000001", MyMoneySchedule::TYPE_BILL));
+ CPPUNIT_ASSERT(m->anyOverdue("A000001", MyMoneySchedule::TYPE_TRANSFER));
+ CPPUNIT_ASSERT(m->anyOverdue("A000001", MyMoneySchedule::TYPE_DEPOSIT));
+ } catch(MyMoneyException *e) {
+ char buf[256];
+ sprintf(buf, "Unexpected exception: %s", e->what().latin1());
+ CPPUNIT_FAIL(buf);
+ delete e;
+ }
+*/
+}
+
+void MyMoneyScheduleTest::testGetSchedule()
+{
+/*
+ MyMoneyScheduled *m = MyMoneyScheduled::instance();
+ CPPUNIT_ASSERT(m!=NULL);
+
+ try
+ {
+ MyMoneySchedule s = m->getSchedule("A000001", "SCHED00002");
+
+ CPPUNIT_ASSERT(s.type() == MyMoneySchedule::TYPE_DEPOSIT);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_MONTHLY);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 1);
+ CPPUNIT_ASSERT(s.paymentType() == MyMoneySchedule::STYPE_MANUALDEPOSIT);
+ CPPUNIT_ASSERT(s.startDate() == QDate(2001, 2, 1));
+ CPPUNIT_ASSERT(s.willEnd() == false);
+ CPPUNIT_ASSERT(s.isFixed() == true);
+ CPPUNIT_ASSERT(s.autoEnter() == true);
+
+ MyMoneyTransaction t = s.transaction();
+ CPPUNIT_ASSERT(t.splitCount() == 2);
+
+ s = m->getSchedule("A000001", "SCHED00005");
+
+ CPPUNIT_FAIL("Exception expected while getting schedule SCHED00005");
+ } catch (MyMoneyException *e)
+ {
+ delete e;
+ }
+*/
+}
+
+void MyMoneyScheduleTest::testGetScheduled()
+{
+/*
+ MyMoneyScheduled *m = MyMoneyScheduled::instance();
+ CPPUNIT_ASSERT(m!=NULL);
+
+ try
+ {
+ QValueList<QString> testList;
+
+ testList = m->getScheduled("A000001");
+ CPPUNIT_ASSERT(testList.size() == 3);
+ CPPUNIT_ASSERT(testList[0] == "SCHED00001");
+ CPPUNIT_ASSERT(testList[1] == "SCHED00002");
+ CPPUNIT_ASSERT(testList[2] == "SCHED00003");
+
+ testList = m->getScheduled("A000001", MyMoneySchedule::TYPE_DEPOSIT);
+ CPPUNIT_ASSERT(testList.size() == 1);
+ CPPUNIT_ASSERT(testList[0] == "SCHED00002");
+
+ testList = m->getScheduled("A000001", MyMoneySchedule::TYPE_BILL);
+ CPPUNIT_ASSERT(testList.size() == 1);
+ CPPUNIT_ASSERT(testList[0] == "SCHED00001");
+
+ testList = m->getScheduled("A000001", MyMoneySchedule::TYPE_TRANSFER);
+ CPPUNIT_ASSERT(testList.size() == 1);
+ CPPUNIT_ASSERT(testList[0] == "SCHED00003");
+
+ testList = m->getScheduled("A000001", MyMoneySchedule::TYPE_DEPOSIT,
+ MyMoneySchedule::STYPE_MANUALDEPOSIT,
+ MyMoneySchedule::OCCUR_MONTHLY);
+ CPPUNIT_ASSERT(testList.size() == 1);
+ CPPUNIT_ASSERT(testList[0] == "SCHED00002");
+
+ testList = m->getScheduled("A000001", QDate(2001, 1, 1), QDate(2001, 2, 1));
+ CPPUNIT_ASSERT(testList.size() == 2);
+ CPPUNIT_ASSERT(testList[0] == "SCHED00001");
+ CPPUNIT_ASSERT(testList[1] == "SCHED00002");
+
+ } catch(MyMoneyException *e) {
+ char buf[256];
+ sprintf(buf, "Unexpected exception: %s", e->what().latin1());
+ CPPUNIT_FAIL(buf);
+ delete e;
+ }
+*/
+}
+
+void MyMoneyScheduleTest::testGetOverdue()
+{
+/*
+ MyMoneyScheduled *m = MyMoneyScheduled::instance();
+ CPPUNIT_ASSERT(m!=NULL);
+
+ try
+ {
+ QValueList<QString> testList;
+
+ testList = m->getOverdue("A000001");
+ CPPUNIT_ASSERT(testList.size() == 3);
+ CPPUNIT_ASSERT(testList[0] == "SCHED00001");
+ CPPUNIT_ASSERT(testList[1] == "SCHED00002");
+ CPPUNIT_ASSERT(testList[2] == "SCHED00003");
+
+ testList = m->getOverdue("A000001", MyMoneySchedule::TYPE_DEPOSIT);
+ CPPUNIT_ASSERT(testList.size() == 1);
+ CPPUNIT_ASSERT(testList[0] == "SCHED00002");
+
+ testList = m->getOverdue("A000001", MyMoneySchedule::TYPE_BILL);
+ CPPUNIT_ASSERT(testList.size() == 1);
+ CPPUNIT_ASSERT(testList[0] == "SCHED00001");
+
+ testList = m->getOverdue("A000001", MyMoneySchedule::TYPE_TRANSFER);
+ CPPUNIT_ASSERT(testList.size() == 1);
+ CPPUNIT_ASSERT(testList[0] == "SCHED00003");
+
+ testList = m->getOverdue("A000001", MyMoneySchedule::TYPE_DEPOSIT,
+ MyMoneySchedule::STYPE_MANUALDEPOSIT,
+ MyMoneySchedule::OCCUR_MONTHLY);
+ CPPUNIT_ASSERT(testList.size() == 1);
+ CPPUNIT_ASSERT(testList[0] == "SCHED00002");
+ } catch(MyMoneyException *e) {
+ char buf[256];
+ sprintf(buf, "Unexpected exception: %s", e->what().latin1());
+ CPPUNIT_FAIL(buf);
+ delete e;
+ }
+*/
+}
+
+void MyMoneyScheduleTest::testNextPayment()
+/*
+ * Test for a schedule where a payment hasn't yet been made.
+ * First payment is in the future.
+*/
+{
+ MyMoneySchedule sch;
+ QString future_sched = QString(
+ "<!DOCTYPE TEST>\n"
+ "<SCHEDULE-CONTAINER>\n"
+ "<SCHEDULED_TX startDate=\"2007-02-17\" autoEnter=\"1\" weekendOption=\"2\" lastPayment=\"\" paymentType=\"1\" endDate=\"\" type=\"1\" id=\"SCH000058\" name=\"Car Tax\" fixed=\"1\" occurenceMultiplier=\"1\" occurence=\"16384\" >\n"
+ " <PAYMENTS/>\n"
+ " <TRANSACTION postdate=\"\" memo=\"\" id=\"\" commodity=\"GBP\" entrydate=\"\" >\n"
+ " <SPLITS>\n"
+ " <SPLIT payee=\"P000044\" reconciledate=\"\" shares=\"-15000/100\" action=\"Withdrawal\" bankid=\"\" number=\"\" reconcileflag=\"0\" memo=\"\" value=\"-15000/100\" account=\"A000155\" />\n"
+ " <SPLIT payee=\"\" reconciledate=\"\" shares=\"15000/100\" action=\"Withdrawal\" bankid=\"\" number=\"\" reconcileflag=\"0\" memo=\"\" value=\"15000/100\" account=\"A000182\" />\n"
+ " </SPLITS>\n"
+ " <KEYVALUEPAIRS/>\n"
+ " </TRANSACTION>\n"
+ "</SCHEDULED_TX>\n"
+ "</SCHEDULE-CONTAINER>\n"
+ );
+
+ QDomDocument doc;
+ QDomElement node;
+ doc.setContent(future_sched);
+ node = doc.documentElement().firstChild().toElement();
+
+ try {
+ sch = MyMoneySchedule(node);
+ CPPUNIT_ASSERT(sch.nextPayment(QDate(2007,2,14)) == QDate(2007,2,17));
+ CPPUNIT_ASSERT(sch.nextPayment(QDate(2007,2,17)) == QDate(2008,2,17));
+ CPPUNIT_ASSERT(sch.nextPayment(QDate(2007,2,18)) == QDate(2008,2,17));
+
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+/*
+ MyMoneyScheduled *m = MyMoneyScheduled::instance();
+ CPPUNIT_ASSERT(m!=NULL);
+
+ try
+ {
+ MyMoneySchedule s1 = m->getSchedule("A000001", "SCHED00001");
+ MyMoneySchedule s2 = m->getSchedule("A000001", "SCHED00002");
+ MyMoneySchedule s3 = m->getSchedule("A000001", "SCHED00003");
+
+ QDate nextPayment1 = s1.nextPayment();
+ QDate nextPayment2 = s2.nextPayment();
+ QDate nextPayment3 = s3.nextPayment();
+
+ CPPUNIT_ASSERT(nextPayment1.year() != 1900);
+ CPPUNIT_ASSERT(nextPayment2.year() != 1900);
+ CPPUNIT_ASSERT(nextPayment3.year() != 1900);
+ } catch (MyMoneyException *e)
+ {
+ CPPUNIT_FAIL("Unexpected exception");
+ delete e;
+ }
+*/
+}
+
+void MyMoneyScheduleTest::testAddHalfMonths()
+{
+ // addHalfMonths is private
+ // Test a Schedule with occurence OCCUR_EVERYHALFMONTH using nextPayment
+ MyMoneySchedule s;
+ s.setStartDate(QDate(2007, 1, 1));
+ s.setOccurence(MyMoneySchedule::OCCUR_EVERYHALFMONTH);
+ s.setNextDueDate(s.startDate());
+ s.setLastPayment(s.startDate());
+
+ QString format("yyyy-MM-dd");
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-01-16" );
+ s.setNextDueDate(QDate(2007, 1, 2));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-01-17" );
+ s.setNextDueDate(QDate(2007, 1, 3));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-01-18" );
+ s.setNextDueDate(QDate(2007, 1, 4));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-01-19" );
+ s.setNextDueDate(QDate(2007, 1, 5));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-01-20" );
+ s.setNextDueDate(QDate(2007, 1, 6));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-01-21" );
+ s.setNextDueDate(QDate(2007, 1, 7));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-01-22" );
+ s.setNextDueDate(QDate(2007, 1, 8));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-01-23" );
+ s.setNextDueDate(QDate(2007, 1, 9));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-01-24" );
+ s.setNextDueDate(QDate(2007, 1, 10));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-01-25" );
+ s.setNextDueDate(QDate(2007, 1, 11));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-01-26" );
+ s.setNextDueDate(QDate(2007, 1, 12));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-01-27" );
+ s.setNextDueDate(QDate(2007, 1, 13));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-01-28" );
+ s.setNextDueDate(QDate(2007, 1, 14));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-01-29" );
+ // 15 -> Last Day
+ s.setNextDueDate(QDate(2007, 1, 15));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-01-31" );
+ s.setNextDueDate(QDate(2007, 1, 16));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-02-01" );
+ s.setNextDueDate(QDate(2007, 1, 17));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-02-02" );
+ s.setNextDueDate(QDate(2007, 1, 18));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-02-03" );
+ s.setNextDueDate(QDate(2007, 1, 19));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-02-04" );
+ s.setNextDueDate(QDate(2007, 1, 20));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-02-05" );
+ s.setNextDueDate(QDate(2007, 1, 21));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-02-06" );
+ s.setNextDueDate(QDate(2007, 1, 22));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-02-07" );
+ s.setNextDueDate(QDate(2007, 1, 23));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-02-08" );
+ s.setNextDueDate(QDate(2007, 1, 24));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-02-09" );
+ s.setNextDueDate(QDate(2007, 1, 25));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-02-10" );
+ s.setNextDueDate(QDate(2007, 1, 26));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-02-11" );
+ s.setNextDueDate(QDate(2007, 1, 27));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-02-12" );
+ s.setNextDueDate(QDate(2007, 1, 28));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-02-13" );
+ s.setNextDueDate(QDate(2007, 1, 29));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-02-14" );
+ // 30th,31st -> 15th
+ s.setNextDueDate(QDate(2007, 1, 30));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-02-15" );
+ s.setNextDueDate(QDate(2007, 1, 31));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-02-15" );
+ // 30th (last day)
+ s.setNextDueDate(QDate(2007, 4, 30));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2007-05-15" );
+ // 28th of February (Last day): to 15th
+ s.setNextDueDate(QDate(1900, 2, 28));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "1900-03-15" );
+ // 28th of February (Leap year): to 13th
+ s.setNextDueDate(QDate(2000, 2, 28));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2000-03-13" );
+ // 29th of February (Leap year)
+ s.setNextDueDate(QDate(2000, 2, 29));
+ CPPUNIT_ASSERT( s.nextPayment(s.nextDueDate()).toString(format) == "2000-03-15" );
+ // Add multiple transactions
+ s.setStartDate(QDate(2007, 1, 1));
+ CPPUNIT_ASSERT( s.dateAfter(2).toString(format) == "2007-01-16" );
+ CPPUNIT_ASSERT( s.dateAfter(3).toString(format) == "2007-02-01" );
+ CPPUNIT_ASSERT( s.dateAfter(4).toString(format) == "2007-02-16" );
+ s.setStartDate(QDate(2007, 1, 12));
+ CPPUNIT_ASSERT( s.dateAfter(2).toString(format) == "2007-01-27" );
+ CPPUNIT_ASSERT( s.dateAfter(3).toString(format) == "2007-02-12" );
+ CPPUNIT_ASSERT( s.dateAfter(4).toString(format) == "2007-02-27" );
+ CPPUNIT_ASSERT( s.dateAfter(5).toString(format) == "2007-03-12" );
+ s.setStartDate(QDate(2007, 1, 13));
+ CPPUNIT_ASSERT( s.dateAfter(2).toString(format) == "2007-01-28" );
+ CPPUNIT_ASSERT( s.dateAfter(3).toString(format) == "2007-02-13" );
+ CPPUNIT_ASSERT( s.dateAfter(4).toString(format) == "2007-02-28" );
+ CPPUNIT_ASSERT( s.dateAfter(5).toString(format) == "2007-03-15" );
+ s.setStartDate(QDate(2007, 1, 14));
+ CPPUNIT_ASSERT( s.dateAfter(2).toString(format) == "2007-01-29" );
+ CPPUNIT_ASSERT( s.dateAfter(3).toString(format) == "2007-02-14" );
+ CPPUNIT_ASSERT( s.dateAfter(4).toString(format) == "2007-02-28" );
+ CPPUNIT_ASSERT( s.dateAfter(5).toString(format) == "2007-03-15" );
+ s.setStartDate(QDate(2007, 1, 15));
+ CPPUNIT_ASSERT( s.dateAfter(2).toString(format) == "2007-01-31" );
+ CPPUNIT_ASSERT( s.dateAfter(3).toString(format) == "2007-02-15" );
+ CPPUNIT_ASSERT( s.dateAfter(4).toString(format) == "2007-02-28" );
+ CPPUNIT_ASSERT( s.dateAfter(5).toString(format) == "2007-03-15" );
+ s.setStartDate(QDate(2007, 1, 16));
+ CPPUNIT_ASSERT( s.dateAfter(2).toString(format) == "2007-02-01" );
+ CPPUNIT_ASSERT( s.dateAfter(3).toString(format) == "2007-02-16" );
+ CPPUNIT_ASSERT( s.dateAfter(4).toString(format) == "2007-03-01" );
+ CPPUNIT_ASSERT( s.dateAfter(5).toString(format) == "2007-03-16" );
+ s.setStartDate(QDate(2007, 1, 27));
+ CPPUNIT_ASSERT( s.dateAfter(2).toString(format) == "2007-02-12" );
+ CPPUNIT_ASSERT( s.dateAfter(3).toString(format) == "2007-02-27" );
+ CPPUNIT_ASSERT( s.dateAfter(4).toString(format) == "2007-03-12" );
+ CPPUNIT_ASSERT( s.dateAfter(5).toString(format) == "2007-03-27" );
+ s.setStartDate(QDate(2007, 1, 28));
+ CPPUNIT_ASSERT( s.dateAfter(2).toString(format) == "2007-02-13" );
+ CPPUNIT_ASSERT( s.dateAfter(3).toString(format) == "2007-02-28" );
+ CPPUNIT_ASSERT( s.dateAfter(4).toString(format) == "2007-03-15" );
+ CPPUNIT_ASSERT( s.dateAfter(5).toString(format) == "2007-03-31" );
+ s.setStartDate(QDate(2007, 1, 29));
+ CPPUNIT_ASSERT( s.dateAfter(2).toString(format) == "2007-02-14" );
+ CPPUNIT_ASSERT( s.dateAfter(3).toString(format) == "2007-02-28" );
+ CPPUNIT_ASSERT( s.dateAfter(4).toString(format) == "2007-03-15" );
+ CPPUNIT_ASSERT( s.dateAfter(5).toString(format) == "2007-03-31" );
+ s.setStartDate(QDate(2007, 1, 30));
+ CPPUNIT_ASSERT( s.dateAfter(2).toString(format) == "2007-02-15" );
+ CPPUNIT_ASSERT( s.dateAfter(3).toString(format) == "2007-02-28" );
+ CPPUNIT_ASSERT( s.dateAfter(4).toString(format) == "2007-03-15" );
+ CPPUNIT_ASSERT( s.dateAfter(5).toString(format) == "2007-03-31" );
+ s.setStartDate(QDate(2007, 1, 31));
+ CPPUNIT_ASSERT( s.dateAfter(2).toString(format) == "2007-02-15" );
+ CPPUNIT_ASSERT( s.dateAfter(3).toString(format) == "2007-02-28" );
+ CPPUNIT_ASSERT( s.dateAfter(4).toString(format) == "2007-03-15" );
+ CPPUNIT_ASSERT( s.dateAfter(5).toString(format) == "2007-03-31" );
+ s.setStartDate(QDate(2007, 4, 29));
+ CPPUNIT_ASSERT( s.dateAfter(2).toString(format) == "2007-05-14" );
+ CPPUNIT_ASSERT( s.dateAfter(3).toString(format) == "2007-05-29" );
+ CPPUNIT_ASSERT( s.dateAfter(4).toString(format) == "2007-06-14" );
+ CPPUNIT_ASSERT( s.dateAfter(5).toString(format) == "2007-06-29" );
+ s.setStartDate(QDate(2007, 4, 30));
+ CPPUNIT_ASSERT( s.dateAfter(2).toString(format) == "2007-05-15" );
+ CPPUNIT_ASSERT( s.dateAfter(3).toString(format) == "2007-05-31" );
+ CPPUNIT_ASSERT( s.dateAfter(4).toString(format) == "2007-06-15" );
+ CPPUNIT_ASSERT( s.dateAfter(5).toString(format) == "2007-06-30" );
+}
+
+void MyMoneyScheduleTest::testPaymentDates()
+{
+ MyMoneySchedule sch;
+ QString ref_ok = QString(
+ "<!DOCTYPE TEST>\n"
+ "<SCHEDULE-CONTAINER>\n"
+
+ "<SCHEDULED_TX startDate=\"2003-12-31\" autoEnter=\"1\" weekendOption=\"0\" lastPayment=\"2006-01-31\" paymentType=\"2\" endDate=\"\" type=\"2\" id=\"SCH000032\" name=\"DSL\" fixed=\"0\" occurenceMultiplier=\"1\" occurence=\"32\" >\n"
+ " <PAYMENTS/>\n"
+ " <TRANSACTION postdate=\"2006-02-28\" memo=\"\" id=\"\" commodity=\"EUR\" entrydate=\"\" >\n"
+ " <SPLITS>\n"
+ " <SPLIT payee=\"P000076\" reconciledate=\"\" shares=\"1200/100\" action=\"Deposit\" bankid=\"\" number=\"\" reconcileflag=\"0\" memo=\"\" value=\"1200/100\" account=\"A000076\" />\n"
+ " <SPLIT payee=\"\" reconciledate=\"\" shares=\"-1200/100\" action=\"Deposit\" bankid=\"\" number=\"\" reconcileflag=\"0\" memo=\"\" value=\"-1200/100\" account=\"A000009\" />\n"
+ " </SPLITS>\n"
+ " <KEYVALUEPAIRS/>\n"
+ " </TRANSACTION>\n"
+ "</SCHEDULED_TX>\n"
+
+ "</SCHEDULE-CONTAINER>\n"
+ );
+
+ QDomDocument doc;
+ QDomElement node;
+ doc.setContent(ref_ok);
+ node = doc.documentElement().firstChild().toElement();
+
+ QDate startDate(2006,1,28);
+ QDate endDate(2006,5,30);
+
+ try {
+ sch = MyMoneySchedule(node);
+ QDate nextPayment = sch.nextPayment(startDate);
+ QValueList<QDate> list = sch.paymentDates(nextPayment, endDate);
+ CPPUNIT_ASSERT(list.count() == 3);
+ CPPUNIT_ASSERT(list[0] == QDate(2006,2,28));
+ CPPUNIT_ASSERT(list[1] == QDate(2006,3,31));
+ // Would fall on a Sunday so gets moved back to 28th.
+ CPPUNIT_ASSERT(list[2] == QDate(2006,4,28));
+
+ // Add tests for each possible occurence.
+ // Check how paymentDates is meant to work
+ // Build a list of expected dates and compare
+ // MyMoneySchedule::OCCUR_ONCE
+ sch.setOccurence(MyMoneySchedule::OCCUR_ONCE);
+ startDate.setYMD(2009,1,1);
+ endDate.setYMD(2009,12,31);
+ sch.setStartDate(startDate);
+ sch.setNextDueDate(startDate);
+ list = sch.paymentDates(startDate,endDate);
+ CPPUNIT_ASSERT(list.count() == 1);
+ CPPUNIT_ASSERT(list[0] == QDate(2009,1,1));
+ // MyMoneySchedule::OCCUR_DAILY
+ sch.setOccurence(MyMoneySchedule::OCCUR_DAILY);
+ startDate.setYMD(2009,1,1);
+ endDate.setYMD(2009,1,5);
+ sch.setStartDate(startDate);
+ sch.setNextDueDate(startDate);
+ list = sch.paymentDates(startDate,endDate);
+ CPPUNIT_ASSERT(list.count() == 5);
+ CPPUNIT_ASSERT(list[0] == QDate(2009, 1, 1));
+ CPPUNIT_ASSERT(list[1] == QDate(2009, 1, 2));
+ // Would fall on Saturday so gets moved to 2nd.
+ CPPUNIT_ASSERT(list[2] == QDate(2009, 1, 2));
+ // Would fall on Sunday so gets moved to 2nd.
+ CPPUNIT_ASSERT(list[3] == QDate(2009, 1, 2));
+ CPPUNIT_ASSERT(list[4] == QDate(2009, 1, 5));
+ // MyMoneySchedule::OCCUR_DAILY with multiplier 2
+ sch.setOccurenceMultiplier(2);
+ list = sch.paymentDates(startDate.addDays(1),endDate);
+ CPPUNIT_ASSERT(list.count() == 2);
+ // Would fall on Sunday so gets moved to 2nd.
+ CPPUNIT_ASSERT(list[0] == QDate(2009, 1, 2));
+ CPPUNIT_ASSERT(list[1] == QDate(2009, 1, 5));
+ sch.setOccurenceMultiplier(1);
+ // MyMoneySchedule::OCCUR_WEEKLY
+ sch.setOccurence(MyMoneySchedule::OCCUR_WEEKLY);
+ startDate.setYMD(2009,1,6);
+ endDate.setYMD(2009,2,4);
+ sch.setStartDate(startDate);
+ sch.setNextDueDate(startDate);
+ list = sch.paymentDates(startDate,endDate);
+ CPPUNIT_ASSERT(list.count() == 5);
+ CPPUNIT_ASSERT(list[0] == QDate(2009, 1, 6));
+ CPPUNIT_ASSERT(list[1] == QDate(2009, 1,13));
+ CPPUNIT_ASSERT(list[2] == QDate(2009, 1,20));
+ CPPUNIT_ASSERT(list[3] == QDate(2009, 1,27));
+ CPPUNIT_ASSERT(list[4] == QDate(2009, 2, 3));
+ // MyMoneySchedule::OCCUR_EVERYOTHERWEEK
+ sch.setOccurence(MyMoneySchedule::OCCUR_EVERYOTHERWEEK);
+ startDate.setYMD(2009,2,5);
+ endDate.setYMD(2009,4,3);
+ sch.setStartDate(startDate);
+ sch.setNextDueDate(startDate);
+ list = sch.paymentDates(startDate,endDate);
+ CPPUNIT_ASSERT(list.count() == 5);
+ CPPUNIT_ASSERT(list[0] == QDate(2009, 2, 5));
+ CPPUNIT_ASSERT(list[1] == QDate(2009, 2,19));
+ CPPUNIT_ASSERT(list[2] == QDate(2009, 3, 5));
+ CPPUNIT_ASSERT(list[3] == QDate(2009, 3,19));
+ CPPUNIT_ASSERT(list[4] == QDate(2009, 4, 2));
+ // MyMoneySchedule::OCCUR_FORTNIGHTLY
+ sch.setOccurence(MyMoneySchedule::OCCUR_FORTNIGHTLY);
+ startDate.setYMD(2009,4,4);
+ endDate.setYMD(2009,5,31);
+ sch.setStartDate(startDate);
+ sch.setNextDueDate(startDate);
+ list = sch.paymentDates(startDate,endDate);
+ CPPUNIT_ASSERT(list.count() == 4);
+ // First one would fall on a Saturday and would get moved
+ // to 3rd which is before start date so is not in list.
+ // Would fall on a Saturday so gets moved to 17th.
+ CPPUNIT_ASSERT(list[0] == QDate(2009, 4,17));
+ // Would fall on a Saturday so gets moved to 1st.
+ CPPUNIT_ASSERT(list[1] == QDate(2009, 5, 1));
+ // Would fall on a Saturday so gets moved to 15th.
+ CPPUNIT_ASSERT(list[2] == QDate(2009, 5,15));
+ // Would fall on a Saturday so gets moved to 29th.
+ CPPUNIT_ASSERT(list[3] == QDate(2009, 5,29));
+ // MyMoneySchedule::OCCUR_EVERYHALFMONTH
+ sch.setOccurence(MyMoneySchedule::OCCUR_EVERYHALFMONTH);
+ startDate.setYMD(2009,6,1);
+ endDate.setYMD(2009,8,11);
+ sch.setStartDate(startDate);
+ sch.setNextDueDate(startDate);
+ list = sch.paymentDates(startDate,endDate);
+ CPPUNIT_ASSERT(list.count() == 5);
+ CPPUNIT_ASSERT(list[0] == QDate(2009, 6, 1));
+ CPPUNIT_ASSERT(list[1] == QDate(2009, 6,16));
+ CPPUNIT_ASSERT(list[2] == QDate(2009, 7, 1));
+ CPPUNIT_ASSERT(list[3] == QDate(2009, 7,16));
+ // Would fall on a Saturday so gets moved to 31st.
+ CPPUNIT_ASSERT(list[4] == QDate(2009, 7, 31));
+ // MyMoneySchedule::OCCUR_EVERYTHREEWEEKS
+ sch.setOccurence(MyMoneySchedule::OCCUR_EVERYTHREEWEEKS);
+ startDate.setYMD(2009,8,12);
+ endDate.setYMD(2009,11,12);
+ sch.setStartDate(startDate);
+ sch.setNextDueDate(startDate);
+ list = sch.paymentDates(startDate,endDate);
+ CPPUNIT_ASSERT(list.count() == 5);
+ CPPUNIT_ASSERT(list[0] == QDate(2009, 8,12));
+ CPPUNIT_ASSERT(list[1] == QDate(2009, 9, 2));
+ CPPUNIT_ASSERT(list[2] == QDate(2009, 9,23));
+ CPPUNIT_ASSERT(list[3] == QDate(2009,10,14));
+ CPPUNIT_ASSERT(list[4] == QDate(2009,11, 4));
+ // MyMoneySchedule::OCCUR_EVERYFOURWEEKS
+ sch.setOccurence(MyMoneySchedule::OCCUR_EVERYFOURWEEKS);
+ startDate.setYMD(2009,11,13);
+ endDate.setYMD(2010,3,13);
+ sch.setStartDate(startDate);
+ sch.setNextDueDate(startDate);
+ list = sch.paymentDates(startDate,endDate);
+ CPPUNIT_ASSERT(list.count() == 5);
+ CPPUNIT_ASSERT(list[0] == QDate(2009,11,13));
+ CPPUNIT_ASSERT(list[1] == QDate(2009,12,11));
+ CPPUNIT_ASSERT(list[2] == QDate(2010, 1, 8));
+ CPPUNIT_ASSERT(list[3] == QDate(2010, 2, 5));
+ CPPUNIT_ASSERT(list[4] == QDate(2010, 3, 5));
+ // MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS
+ sch.setOccurence(MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS);
+ startDate.setYMD(2010,3,19);
+ endDate.setYMD(2010,7,19);
+ sch.setStartDate(startDate);
+ sch.setNextDueDate(startDate);
+ list = sch.paymentDates(startDate,endDate);
+ CPPUNIT_ASSERT(list.count() == 5);
+ CPPUNIT_ASSERT(list[0] == QDate(2010, 3,19));
+ // Would fall on a Sunday so gets moved to 16th.
+ CPPUNIT_ASSERT(list[1] == QDate(2010, 4,16));
+ CPPUNIT_ASSERT(list[2] == QDate(2010, 5,18));
+ CPPUNIT_ASSERT(list[3] == QDate(2010, 6,17));
+ // Would fall on a Saturday so gets moved to 16th.
+ CPPUNIT_ASSERT(list[4] == QDate(2010, 7,16));
+ // MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS
+ sch.setOccurence(MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS);
+ startDate.setYMD(2010,7,26);
+ endDate.setYMD(2011,3,26);
+ sch.setStartDate(startDate);
+ sch.setNextDueDate(startDate);
+ list = sch.paymentDates(startDate,endDate);
+ CPPUNIT_ASSERT(list.count() == 5);
+ CPPUNIT_ASSERT(list[0] == QDate(2010, 7,26));
+ CPPUNIT_ASSERT(list[1] == QDate(2010, 9,20));
+ CPPUNIT_ASSERT(list[2] == QDate(2010,11,15));
+ CPPUNIT_ASSERT(list[3] == QDate(2011, 1,10));
+ CPPUNIT_ASSERT(list[4] == QDate(2011, 3, 7));
+ // MyMoneySchedule::OCCUR_EVERYOTHERMONTH
+ sch.setOccurence(MyMoneySchedule::OCCUR_EVERYOTHERMONTH);
+ startDate.setYMD(2011,3,14);
+ endDate.setYMD(2011,11,20);
+ sch.setStartDate(startDate);
+ sch.setNextDueDate(startDate);
+ list = sch.paymentDates(startDate,endDate);
+ CPPUNIT_ASSERT(list.count() == 5);
+ CPPUNIT_ASSERT(list[0] == QDate(2011, 3,14));
+ // Would fall on a Saturday so gets moved to 13th.
+ CPPUNIT_ASSERT(list[1] == QDate(2011, 5,13));
+ CPPUNIT_ASSERT(list[2] == QDate(2011, 7,14));
+ CPPUNIT_ASSERT(list[3] == QDate(2011, 9,14));
+ CPPUNIT_ASSERT(list[4] == QDate(2011,11,14));
+ // MyMoneySchedule::OCCUR_EVERYTHREEMONTHS
+ sch.setOccurence(MyMoneySchedule::OCCUR_EVERYTHREEMONTHS);
+ startDate.setYMD(2011,11,15);
+ endDate.setYMD(2012,11,19);
+ sch.setStartDate(startDate);
+ sch.setNextDueDate(startDate);
+ list = sch.paymentDates(startDate,endDate);
+ CPPUNIT_ASSERT(list.count() == 5);
+ CPPUNIT_ASSERT(list[0] == QDate(2011,11,15));
+ CPPUNIT_ASSERT(list[1] == QDate(2012, 2,15));
+ CPPUNIT_ASSERT(list[2] == QDate(2012, 5,15));
+ CPPUNIT_ASSERT(list[3] == QDate(2012, 8,15));
+ CPPUNIT_ASSERT(list[4] == QDate(2012,11,15));
+ // MyMoneySchedule::OCCUR_QUARTERLY
+ sch.setOccurence(MyMoneySchedule::OCCUR_QUARTERLY);
+ startDate.setYMD(2012,11,20);
+ endDate.setYMD(2013,11,23);
+ sch.setStartDate(startDate);
+ sch.setNextDueDate(startDate);
+ list = sch.paymentDates(startDate,endDate);
+ CPPUNIT_ASSERT(list.count() == 5);
+ CPPUNIT_ASSERT(list[0] == QDate(2012,11,20));
+ CPPUNIT_ASSERT(list[1] == QDate(2013, 2,20));
+ CPPUNIT_ASSERT(list[2] == QDate(2013, 5,20));
+ CPPUNIT_ASSERT(list[3] == QDate(2013, 8,20));
+ CPPUNIT_ASSERT(list[4] == QDate(2013,11,20));
+ // MyMoneySchedule::OCCUR_EVERYFOURMONTHS
+ sch.setOccurence(MyMoneySchedule::OCCUR_EVERYFOURMONTHS);
+ startDate.setYMD(2013,11,21);
+ endDate.setYMD(2015, 3,23);
+ sch.setStartDate(startDate);
+ sch.setNextDueDate(startDate);
+ list = sch.paymentDates(startDate,endDate);
+ CPPUNIT_ASSERT(list.count() == 5);
+ CPPUNIT_ASSERT(list[0] == QDate(2013,11,21));
+ CPPUNIT_ASSERT(list[1] == QDate(2014, 3,21));
+ CPPUNIT_ASSERT(list[2] == QDate(2014, 7,21));
+ CPPUNIT_ASSERT(list[3] == QDate(2014,11,21));
+ // Would fall on a Saturday so gets moved to 20th.
+ CPPUNIT_ASSERT(list[4] == QDate(2015, 3,20));
+ // MyMoneySchedule::OCCUR_TWICEYEARLY
+ sch.setOccurence(MyMoneySchedule::OCCUR_TWICEYEARLY);
+ startDate.setYMD(2015, 3,22);
+ endDate.setYMD(2017, 3,29);
+ sch.setStartDate(startDate);
+ sch.setNextDueDate(startDate);
+ list = sch.paymentDates(startDate,endDate);
+ CPPUNIT_ASSERT(list.count() == 4);
+ // First date would fall on a Sunday which would get moved
+ // to 20th which is before start date so not in list.
+ CPPUNIT_ASSERT(list[0] == QDate(2015, 9,22));
+ CPPUNIT_ASSERT(list[1] == QDate(2016, 3,22));
+ CPPUNIT_ASSERT(list[2] == QDate(2016, 9,22));
+ CPPUNIT_ASSERT(list[3] == QDate(2017, 3,22));
+ // MyMoneySchedule::OCCUR_YEARLY
+ sch.setOccurence(MyMoneySchedule::OCCUR_YEARLY);
+ startDate.setYMD(2017, 3,23);
+ endDate.setYMD(2021, 3,29);
+ sch.setStartDate(startDate);
+ sch.setNextDueDate(startDate);
+ list = sch.paymentDates(startDate,endDate);
+ CPPUNIT_ASSERT(list.count() == 5);
+ CPPUNIT_ASSERT(list[0] == QDate(2017, 3,23));
+ CPPUNIT_ASSERT(list[1] == QDate(2018, 3,23));
+ // Would fall on a Saturday so gets moved to 22nd.
+ CPPUNIT_ASSERT(list[2] == QDate(2019, 3,22));
+ CPPUNIT_ASSERT(list[3] == QDate(2020, 3,23));
+ CPPUNIT_ASSERT(list[4] == QDate(2021, 3,23));
+ // MyMoneySchedule::OCCUR_EVERYOTHERYEAR
+ sch.setOccurence(MyMoneySchedule::OCCUR_EVERYOTHERYEAR);
+ startDate.setYMD(2021, 3,24);
+ endDate.setYMD(2029, 3,30);
+ sch.setStartDate(startDate);
+ sch.setNextDueDate(startDate);
+ list = sch.paymentDates(startDate,endDate);
+ CPPUNIT_ASSERT(list.count() == 5);
+ CPPUNIT_ASSERT(list[0] == QDate(2021, 3,24));
+ CPPUNIT_ASSERT(list[1] == QDate(2023, 3,24));
+ CPPUNIT_ASSERT(list[2] == QDate(2025, 3,24));
+ CPPUNIT_ASSERT(list[3] == QDate(2027, 3,24));
+ // Would fall on a Saturday so gets moved to 23rd.
+ CPPUNIT_ASSERT(list[4] == QDate(2029, 3,23));
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+/*
+ MyMoneyScheduled *m = MyMoneyScheduled::instance();
+ CPPUNIT_ASSERT(m!=NULL);
+
+ try
+ {
+ MyMoneySchedule s1 = m->getSchedule("A000001", "SCHED00001");
+ MyMoneySchedule s2 = m->getSchedule("A000001", "SCHED00002");
+ MyMoneySchedule s3 = m->getSchedule("A000001", "SCHED00003");
+
+ QValueList<QDate> payments1 = s1.paymentDates(QDate(2001, 1, 1), QDate(2001, 2, 1));
+ QValueList<QDate> payments2 = s2.paymentDates(QDate(2001, 2, 1), QDate(2001, 6, 1));
+ QValueList<QDate> payments3 = s3.paymentDates(QDate(2001, 3, 1), QDate(2005, 3, 1));
+
+ CPPUNIT_ASSERT(payments1.size() == 5);
+ CPPUNIT_ASSERT(payments2.size() == 5);
+ CPPUNIT_ASSERT(payments3.size() == 5);
+ } catch (MyMoneyException *e)
+ {
+ CPPUNIT_FAIL("Unexpected exception");
+ delete e;
+ }
+*/
+}
+
+void MyMoneyScheduleTest::testReplaceSchedule()
+{
+/*
+ MyMoneyScheduled *m = MyMoneyScheduled::instance();
+ CPPUNIT_ASSERT(m!=NULL);
+
+ try
+ {
+ MyMoneySchedule s = m->getSchedule("A000001", "SCHED00002");
+ CPPUNIT_ASSERT(s.type() == MyMoneySchedule::TYPE_DEPOSIT);
+ s.setType(MyMoneySchedule::TYPE_TRANSFER);
+ m->replaceSchedule("A000001", "SCHED00002", s);
+ s = m->getSchedule("A000001", "SCHED00002");
+ CPPUNIT_ASSERT(s.type() == MyMoneySchedule::TYPE_TRANSFER);
+
+ } catch(MyMoneyException *e) {
+ char buf[256];
+ sprintf(buf, "Unexpected exception: %s", e->what().latin1());
+ CPPUNIT_FAIL(buf);
+ delete e;
+ }
+*/
+}
+
+void MyMoneyScheduleTest::testRemoveSchedule()
+{
+/*
+ MyMoneyScheduled *m = MyMoneyScheduled::instance();
+ CPPUNIT_ASSERT(m!=NULL);
+
+ try
+ {
+ QValueList<QString> testList;
+
+ testList = m->getScheduled("A000001");
+ CPPUNIT_ASSERT(testList.size() == 3);
+
+ m->removeSchedule("A000001", "SCHED00002");
+
+ testList = m->getScheduled("A000001");
+ CPPUNIT_ASSERT(testList.size() == 2);
+
+ m->getSchedule("A000001", "SCHED00002");
+
+ CPPUNIT_FAIL("Exception expected while getting schedule SCHED00002");
+ } catch (MyMoneyException *e)
+ {
+ delete e;
+ }
+*/
+}
+
+void MyMoneyScheduleTest::testWriteXML() {
+ MyMoneySchedule sch( "A Name",
+ MyMoneySchedule::TYPE_BILL,
+ MyMoneySchedule::OCCUR_WEEKLY, 123,
+ MyMoneySchedule::STYPE_DIRECTDEBIT,
+ QDate::currentDate(),
+ QDate(),
+ true,
+ true);
+
+ sch.setLastPayment(QDate::currentDate());
+ sch.recordPayment(QDate::currentDate());
+ sch.setId("SCH0001");
+
+ MyMoneyTransaction t;
+ t.setPostDate(QDate(2001,12,28));
+ t.setEntryDate(QDate(2003,9,29));
+ t.setId("T000000000000000001");
+ t.setMemo("Wohnung:Miete");
+ t.setCommodity("EUR");
+ t.setValue("key", "value");
+
+ MyMoneySplit s;
+ s.setPayeeId("P000001");
+ s.setShares(MyMoneyMoney(96379, 100));
+ s.setValue(MyMoneyMoney(96379, 100));
+ s.setAccountId("A000076");
+ s.setBankID("SPID1");
+ s.setReconcileFlag(MyMoneySplit::Reconciled);
+ t.addSplit(s);
+
+ s.setPayeeId("P000001");
+ s.setShares(MyMoneyMoney(-96379, 100));
+ s.setValue(MyMoneyMoney(-96379, 100));
+ s.setAccountId("A000276");
+ s.setBankID("SPID2");
+ s.setReconcileFlag(MyMoneySplit::Cleared);
+ s.clearId();
+ t.addSplit(s);
+
+ sch.setTransaction(t);
+
+ QDomDocument doc("TEST");
+ QDomElement el = doc.createElement("SCHEDULE-CONTAINER");
+ doc.appendChild(el);
+ sch.writeXML(doc, el);
+
+ QString ref = QString(
+ "<!DOCTYPE TEST>\n"
+ "<SCHEDULE-CONTAINER>\n"
+ " <SCHEDULED_TX startDate=\"%1\" autoEnter=\"1\" weekendOption=\"2\" lastPayment=\"%2\" paymentType=\"1\" endDate=\"\" type=\"1\" id=\"SCH0001\" name=\"A Name\" fixed=\"1\" occurenceMultiplier=\"123\" occurence=\"4\" >\n"
+ " <PAYMENTS>\n"
+ " <PAYMENT date=\"%3\" />\n"
+ " </PAYMENTS>\n"
+ " <TRANSACTION postdate=\"2001-12-28\" memo=\"Wohnung:Miete\" id=\"\" commodity=\"EUR\" entrydate=\"2003-09-29\" >\n"
+ " <SPLITS>\n"
+ " <SPLIT payee=\"P000001\" reconciledate=\"\" shares=\"96379/100\" action=\"\" bankid=\"\" number=\"\" reconcileflag=\"2\" memo=\"\" value=\"96379/100\" id=\"S0001\" account=\"A000076\" />\n"
+ " <SPLIT payee=\"P000001\" reconciledate=\"\" shares=\"-96379/100\" action=\"\" bankid=\"\" number=\"\" reconcileflag=\"1\" memo=\"\" value=\"-96379/100\" id=\"S0002\" account=\"A000276\" />\n"
+ " </SPLITS>\n"
+ " <KEYVALUEPAIRS>\n"
+ " <PAIR key=\"key\" value=\"value\" />\n"
+ " </KEYVALUEPAIRS>\n"
+ " </TRANSACTION>\n"
+ " </SCHEDULED_TX>\n"
+ "</SCHEDULE-CONTAINER>\n"
+ ).arg(QDate::currentDate().toString(Qt::ISODate))
+ .arg(QDate::currentDate().toString(Qt::ISODate))
+ .arg(QDate::currentDate().toString(Qt::ISODate));
+
+ CPPUNIT_ASSERT(doc.toString() == ref);
+}
+
+void MyMoneyScheduleTest::testReadXML() {
+ MyMoneySchedule sch;
+
+ QString ref_ok1 = QString(
+ "<!DOCTYPE TEST>\n"
+ "<SCHEDULE-CONTAINER>\n"
+ " <SCHEDULED_TX startDate=\"%1\" autoEnter=\"1\" weekendOption=\"2\" lastPayment=\"%2\" paymentType=\"1\" endDate=\"\" type=\"1\" id=\"SCH0002\" name=\"A Name\" fixed=\"1\" occurenceMultiplier=\"1\" occurence=\"4\" >\n"
+ " <PAYMENTS>\n"
+ " <PAYMENT date=\"%3\" />\n"
+ " </PAYMENTS>\n"
+ " <TRANSACTION postdate=\"2001-12-28\" memo=\"Wohnung:Miete\" id=\"\" commodity=\"EUR\" entrydate=\"2003-09-29\" >\n"
+ " <SPLITS>\n"
+ " <SPLIT payee=\"P000001\" reconciledate=\"\" shares=\"96379/100\" action=\"\" bankid=\"SPID1\" number=\"\" reconcileflag=\"2\" memo=\"\" value=\"96379/100\" account=\"A000076\" />\n"
+ " <SPLIT payee=\"P000001\" reconciledate=\"\" shares=\"-96379/100\" action=\"\" bankid=\"SPID2\" number=\"\" reconcileflag=\"1\" memo=\"\" value=\"-96379/100\" account=\"A000276\" />\n"
+ " </SPLITS>\n"
+ " <KEYVALUEPAIRS>\n"
+ " <PAIR key=\"key\" value=\"value\" />\n"
+ " </KEYVALUEPAIRS>\n"
+ " </TRANSACTION>\n"
+ " </SCHEDULED_TX>\n"
+ "</SCHEDULE-CONTAINER>\n"
+ ).arg(QDate::currentDate().toString(Qt::ISODate))
+ .arg(QDate::currentDate().toString(Qt::ISODate))
+ .arg(QDate::currentDate().toString(Qt::ISODate));
+
+ // diff to ref_ok1 is that we now have an empty entrydate
+ // in the transaction parameters
+ QString ref_ok2 = QString(
+ "<!DOCTYPE TEST>\n"
+ "<SCHEDULE-CONTAINER>\n"
+ " <SCHEDULED_TX startDate=\"%1\" autoEnter=\"1\" weekendOption=\"2\" lastPayment=\"%2\" paymentType=\"1\" endDate=\"\" type=\"1\" id=\"SCH0002\" name=\"A Name\" fixed=\"1\" occurenceMultiplier=\"1\" occurence=\"4\" >\n"
+ " <PAYMENTS>\n"
+ " <PAYMENT date=\"%3\" />\n"
+ " </PAYMENTS>\n"
+ " <TRANSACTION postdate=\"2001-12-28\" memo=\"Wohnung:Miete\" id=\"\" commodity=\"EUR\" entrydate=\"\" >\n"
+ " <SPLITS>\n"
+ " <SPLIT payee=\"P000001\" reconciledate=\"\" shares=\"96379/100\" action=\"\" bankid=\"SPID1\" number=\"\" reconcileflag=\"2\" memo=\"\" value=\"96379/100\" account=\"A000076\" />\n"
+ " <SPLIT payee=\"P000001\" reconciledate=\"\" shares=\"-96379/100\" action=\"\" bankid=\"SPID2\" number=\"\" reconcileflag=\"1\" memo=\"\" value=\"-96379/100\" account=\"A000276\" />\n"
+ " </SPLITS>\n"
+ " <KEYVALUEPAIRS>\n"
+ " <PAIR key=\"key\" value=\"value\" />\n"
+ " </KEYVALUEPAIRS>\n"
+ " </TRANSACTION>\n"
+ " </SCHEDULED_TX>\n"
+ "</SCHEDULE-CONTAINER>\n"
+ ).arg(QDate::currentDate().toString(Qt::ISODate))
+ .arg(QDate::currentDate().toString(Qt::ISODate))
+ .arg(QDate::currentDate().toString(Qt::ISODate));
+
+ QString ref_false = QString(
+ "<!DOCTYPE TEST>\n"
+ "<SCHEDULE-CONTAINER>\n"
+ " <SCHEDULE startDate=\"%1\" autoEnter=\"1\" weekendOption=\"2\" lastPayment=\"%2\" paymentType=\"1\" endDate=\"\" type=\"1\" id=\"SCH0002\" name=\"A Name\" fixed=\"1\" occurenceMultiplier=\"1\" occurence=\"4\" >\n"
+ " <PAYMENTS count=\"1\" >\n"
+ " <PAYMENT date=\"%3\" />\n"
+ " </PAYMENTS>\n"
+ " <TRANSACTION postdate=\"2001-12-28\" memo=\"Wohnung:Miete\" id=\"\" commodity=\"EUR\" entrydate=\"2003-09-29\" >\n"
+ " <SPLITS>\n"
+ " <SPLIT payee=\"P000001\" reconciledate=\"\" shares=\"96379/100\" action=\"\" bankid=\"SPID1\" number=\"\" reconcileflag=\"2\" memo=\"\" value=\"96379/100\" account=\"A000076\" />\n"
+ " <SPLIT payee=\"P000001\" reconciledate=\"\" shares=\"-96379/100\" action=\"\" bankid=\"SPID2\" number=\"\" reconcileflag=\"1\" memo=\"\" value=\"-96379/100\" account=\"A000276\" />\n"
+ " </SPLITS>\n"
+ " <KEYVALUEPAIRS>\n"
+ " <PAIR key=\"key\" value=\"value\" />\n"
+ " </KEYVALUEPAIRS>\n"
+ " </TRANSACTION>\n"
+ " </SCHEDULED_TX>\n"
+ "</SCHEDULE-CONTAINER>\n"
+ ).arg(QDate::currentDate().toString(Qt::ISODate))
+ .arg(QDate::currentDate().toString(Qt::ISODate))
+ .arg(QDate::currentDate().toString(Qt::ISODate));
+
+ QDomDocument doc;
+ QDomElement node;
+ doc.setContent(ref_false);
+ node = doc.documentElement().firstChild().toElement();
+
+ try {
+ sch = MyMoneySchedule(node);
+ CPPUNIT_FAIL("Missing expected exception");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+
+ doc.setContent(ref_ok1);
+ node = doc.documentElement().firstChild().toElement();
+
+
+ try {
+ sch = MyMoneySchedule(node);
+ CPPUNIT_ASSERT(sch.id() == "SCH0002");
+ CPPUNIT_ASSERT(sch.nextDueDate() == QDate::currentDate().addDays(7));
+ CPPUNIT_ASSERT(sch.startDate() == QDate::currentDate());
+ CPPUNIT_ASSERT(sch.endDate() == QDate());
+ CPPUNIT_ASSERT(sch.autoEnter() == true);
+ CPPUNIT_ASSERT(sch.isFixed() == true);
+ CPPUNIT_ASSERT(sch.weekendOption() == MyMoneySchedule::MoveNothing);
+ CPPUNIT_ASSERT(sch.lastPayment() == QDate::currentDate());
+ CPPUNIT_ASSERT(sch.paymentType() == MyMoneySchedule::STYPE_DIRECTDEBIT);
+ CPPUNIT_ASSERT(sch.type() == MyMoneySchedule::TYPE_BILL);
+ CPPUNIT_ASSERT(sch.name() == "A Name");
+ CPPUNIT_ASSERT(sch.occurence() == MyMoneySchedule::OCCUR_WEEKLY);
+ CPPUNIT_ASSERT(sch.occurenceMultiplier() == 1);
+ CPPUNIT_ASSERT(sch.nextDueDate() == sch.lastPayment().addDays(7));
+ CPPUNIT_ASSERT(sch.recordedPayments().count() == 1);
+ CPPUNIT_ASSERT(sch.recordedPayments()[0] == QDate::currentDate());
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ doc.setContent(ref_ok2);
+ node = doc.documentElement().firstChild().toElement();
+
+
+ try {
+ sch = MyMoneySchedule(node);
+ CPPUNIT_ASSERT(sch.id() == "SCH0002");
+ CPPUNIT_ASSERT(sch.nextDueDate() == QDate::currentDate().addDays(7));
+ CPPUNIT_ASSERT(sch.startDate() == QDate::currentDate());
+ CPPUNIT_ASSERT(sch.endDate() == QDate());
+ CPPUNIT_ASSERT(sch.autoEnter() == true);
+ CPPUNIT_ASSERT(sch.isFixed() == true);
+ CPPUNIT_ASSERT(sch.weekendOption() == MyMoneySchedule::MoveNothing);
+ CPPUNIT_ASSERT(sch.lastPayment() == QDate::currentDate());
+ CPPUNIT_ASSERT(sch.paymentType() == MyMoneySchedule::STYPE_DIRECTDEBIT);
+ CPPUNIT_ASSERT(sch.type() == MyMoneySchedule::TYPE_BILL);
+ CPPUNIT_ASSERT(sch.name() == "A Name");
+ CPPUNIT_ASSERT(sch.occurence() == MyMoneySchedule::OCCUR_WEEKLY);
+ CPPUNIT_ASSERT(sch.occurenceMultiplier() == 1);
+ CPPUNIT_ASSERT(sch.nextDueDate() == sch.lastPayment().addDays(7));
+ CPPUNIT_ASSERT(sch.recordedPayments().count() == 1);
+ CPPUNIT_ASSERT(sch.recordedPayments()[0] == QDate::currentDate());
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneyScheduleTest::testHasReferenceTo()
+{
+ MyMoneySchedule sch;
+ QString ref_ok = QString(
+ "<!DOCTYPE TEST>\n"
+ "<SCHEDULE-CONTAINER>\n"
+ " <SCHEDULED_TX startDate=\"%1\" autoEnter=\"1\" weekendOption=\"2\" lastPayment=\"%2\" paymentType=\"1\" endDate=\"\" type=\"1\" id=\"SCH0002\" name=\"A Name\" fixed=\"1\" occurenceMultiplier=\"1\" occurence=\"4\" >\n"
+ " <PAYMENTS>\n"
+ " <PAYMENT date=\"%3\" />\n"
+ " </PAYMENTS>\n"
+ " <TRANSACTION postdate=\"2001-12-28\" memo=\"Wohnung:Miete\" id=\"\" commodity=\"EUR\" entrydate=\"2003-09-29\" >\n"
+ " <SPLITS>\n"
+ " <SPLIT payee=\"P000001\" reconciledate=\"\" shares=\"96379/100\" action=\"\" number=\"\" reconcileflag=\"2\" memo=\"\" value=\"96379/100\" account=\"A000076\" />\n"
+ " <SPLIT payee=\"P000001\" reconciledate=\"\" shares=\"-96379/100\" action=\"\" number=\"\" reconcileflag=\"1\" memo=\"\" value=\"-96379/100\" account=\"A000276\" />\n"
+ " </SPLITS>\n"
+ " <KEYVALUEPAIRS>\n"
+ " <PAIR key=\"key\" value=\"value\" />\n"
+ " </KEYVALUEPAIRS>\n"
+ " </TRANSACTION>\n"
+ " </SCHEDULED_TX>\n"
+ "</SCHEDULE-CONTAINER>\n"
+ ).arg(QDate::currentDate().toString(Qt::ISODate))
+ .arg(QDate::currentDate().toString(Qt::ISODate))
+ .arg(QDate::currentDate().toString(Qt::ISODate));
+
+ QDomDocument doc;
+ QDomElement node;
+ doc.setContent(ref_ok);
+ node = doc.documentElement().firstChild().toElement();
+
+ try {
+ sch = MyMoneySchedule(node);
+
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ CPPUNIT_ASSERT(sch.hasReferenceTo("P000001") == true);
+ CPPUNIT_ASSERT(sch.hasReferenceTo("A000276") == true);
+ CPPUNIT_ASSERT(sch.hasReferenceTo("A000076") == true);
+ CPPUNIT_ASSERT(sch.hasReferenceTo("EUR") == true);
+}
+
+void MyMoneyScheduleTest::testAdjustedNextDueDate()
+{
+ MyMoneySchedule s;
+
+ QDate dueDate(2007,9,3); // start on a monday
+ for(int i = 0; i < 7; ++i) {
+ s.setNextDueDate(dueDate);
+ s.setWeekendOption(MyMoneySchedule::MoveNothing);
+ CPPUNIT_ASSERT(s.adjustedNextDueDate() == dueDate);
+
+ s.setWeekendOption(MyMoneySchedule::MoveFriday);
+ switch(i) {
+ case 5: // saturday
+ case 6: // sunday
+ break;
+ CPPUNIT_ASSERT(s.adjustedNextDueDate() == QDate(2007,9,7));
+ default:
+ CPPUNIT_ASSERT(s.adjustedNextDueDate() == dueDate);
+ break;
+ }
+
+ s.setWeekendOption(MyMoneySchedule::MoveMonday);
+ switch(i) {
+ case 5: // saturday
+ case 6: // sunday
+ CPPUNIT_ASSERT(s.adjustedNextDueDate() == QDate(2007,9,10));
+ break;
+ default:
+ CPPUNIT_ASSERT(s.adjustedNextDueDate() == dueDate);
+ break;
+ }
+ dueDate = dueDate.addDays(1);
+ }
+}
+
+void MyMoneyScheduleTest::testModifyNextDueDate(void)
+{
+ MyMoneySchedule s;
+ s.setStartDate(QDate(2007, 1, 1));
+ s.setOccurence(MyMoneySchedule::OCCUR_MONTHLY);
+ s.setNextDueDate(s.startDate().addMonths(1));
+ s.setLastPayment(s.startDate());
+
+ QValueList<QDate> dates;
+ dates = s.paymentDates(QDate(2007,2,1), QDate(2007,2,1));
+ CPPUNIT_ASSERT(s.nextDueDate() == QDate(2007,2,1));
+ CPPUNIT_ASSERT(dates.count() == 1);
+ CPPUNIT_ASSERT(dates[0] == QDate(2007,2,1));
+
+ s.setNextDueDate(QDate(2007,1,24));
+
+ dates = s.paymentDates(QDate(2007,2,1), QDate(2007,2,1));
+ CPPUNIT_ASSERT(s.nextDueDate() == QDate(2007,1,24));
+ CPPUNIT_ASSERT(dates.count() == 0);
+
+ dates = s.paymentDates(QDate(2007,1,24), QDate(2007,1,24));
+ CPPUNIT_ASSERT(dates.count() == 1);
+
+ dates = s.paymentDates(QDate(2007,1,24), QDate(2007,2,24));
+ CPPUNIT_ASSERT(dates.count() == 2);
+ CPPUNIT_ASSERT(dates[0] == QDate(2007,1,24));
+ CPPUNIT_ASSERT(dates[1] == QDate(2007,2,24));
+
+}
+
+void MyMoneyScheduleTest::testDaysBetweenEvents()
+{
+ CPPUNIT_ASSERT(MyMoneySchedule::daysBetweenEvents(MyMoneySchedule::OCCUR_ONCE) == 0);
+ CPPUNIT_ASSERT(MyMoneySchedule::daysBetweenEvents(MyMoneySchedule::OCCUR_DAILY) == 1);
+ CPPUNIT_ASSERT(MyMoneySchedule::daysBetweenEvents(MyMoneySchedule::OCCUR_WEEKLY) == 7);
+ CPPUNIT_ASSERT(MyMoneySchedule::daysBetweenEvents(MyMoneySchedule::OCCUR_EVERYOTHERWEEK) == 14);
+ CPPUNIT_ASSERT(MyMoneySchedule::daysBetweenEvents(MyMoneySchedule::OCCUR_FORTNIGHTLY) == 14);
+ CPPUNIT_ASSERT(MyMoneySchedule::daysBetweenEvents(MyMoneySchedule::OCCUR_EVERYHALFMONTH) == 15);
+ CPPUNIT_ASSERT(MyMoneySchedule::daysBetweenEvents(MyMoneySchedule::OCCUR_EVERYTHREEWEEKS) == 21);
+ CPPUNIT_ASSERT(MyMoneySchedule::daysBetweenEvents(MyMoneySchedule::OCCUR_EVERYFOURWEEKS) == 28);
+ CPPUNIT_ASSERT(MyMoneySchedule::daysBetweenEvents(MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS) == 30);
+ CPPUNIT_ASSERT(MyMoneySchedule::daysBetweenEvents(MyMoneySchedule::OCCUR_MONTHLY) == 30);
+ CPPUNIT_ASSERT(MyMoneySchedule::daysBetweenEvents(MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS) == 56);
+ CPPUNIT_ASSERT(MyMoneySchedule::daysBetweenEvents(MyMoneySchedule::OCCUR_EVERYOTHERMONTH) == 60);
+ CPPUNIT_ASSERT(MyMoneySchedule::daysBetweenEvents(MyMoneySchedule::OCCUR_EVERYTHREEMONTHS) == 90);
+ CPPUNIT_ASSERT(MyMoneySchedule::daysBetweenEvents(MyMoneySchedule::OCCUR_QUARTERLY) == 90);
+ CPPUNIT_ASSERT(MyMoneySchedule::daysBetweenEvents(MyMoneySchedule::OCCUR_EVERYFOURMONTHS) == 120);
+ CPPUNIT_ASSERT(MyMoneySchedule::daysBetweenEvents(MyMoneySchedule::OCCUR_TWICEYEARLY) == 180);
+ CPPUNIT_ASSERT(MyMoneySchedule::daysBetweenEvents(MyMoneySchedule::OCCUR_YEARLY) == 360);
+ CPPUNIT_ASSERT(MyMoneySchedule::daysBetweenEvents(MyMoneySchedule::OCCUR_EVERYOTHERYEAR) == 0);
+}
+
+void MyMoneyScheduleTest::testStringToOccurence()
+{
+ // For each occurenceE:
+ // test MyMoneySchedule::stringToOccurence(QString) == occurence
+ CPPUNIT_ASSERT( MyMoneySchedule::stringToOccurence(i18n("Once")) == MyMoneySchedule::OCCUR_ONCE );
+ CPPUNIT_ASSERT( MyMoneySchedule::stringToOccurence(i18n("Daily")) == MyMoneySchedule::OCCUR_DAILY );
+ CPPUNIT_ASSERT( MyMoneySchedule::stringToOccurence(i18n("Weekly")) == MyMoneySchedule::OCCUR_WEEKLY );
+ CPPUNIT_ASSERT( MyMoneySchedule::stringToOccurence(i18n("Every other week")) == MyMoneySchedule::OCCUR_EVERYOTHERWEEK );
+ CPPUNIT_ASSERT( MyMoneySchedule::stringToOccurence(i18n("Fortnightly")) == MyMoneySchedule::OCCUR_FORTNIGHTLY );
+ CPPUNIT_ASSERT( MyMoneySchedule::stringToOccurence(i18n("Every half month")) == MyMoneySchedule::OCCUR_EVERYHALFMONTH );
+ CPPUNIT_ASSERT( MyMoneySchedule::stringToOccurence(i18n("Every four weeks")) == MyMoneySchedule::OCCUR_EVERYFOURWEEKS );
+ CPPUNIT_ASSERT( MyMoneySchedule::stringToOccurence(i18n("Monthly")) == MyMoneySchedule::OCCUR_MONTHLY );
+ CPPUNIT_ASSERT( MyMoneySchedule::stringToOccurence(i18n("Every eight weeks")) == MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS );
+ CPPUNIT_ASSERT( MyMoneySchedule::stringToOccurence(i18n("Every two months")) == MyMoneySchedule::OCCUR_EVERYOTHERMONTH );
+ CPPUNIT_ASSERT( MyMoneySchedule::stringToOccurence(i18n("Every three months")) == MyMoneySchedule::OCCUR_EVERYTHREEMONTHS );
+ CPPUNIT_ASSERT( MyMoneySchedule::stringToOccurence(i18n("Quarterly")) == MyMoneySchedule::OCCUR_QUARTERLY );
+ CPPUNIT_ASSERT( MyMoneySchedule::stringToOccurence(i18n("Every four months")) == MyMoneySchedule::OCCUR_EVERYFOURMONTHS );
+ CPPUNIT_ASSERT( MyMoneySchedule::stringToOccurence(i18n("Twice yearly")) == MyMoneySchedule::OCCUR_TWICEYEARLY );
+ CPPUNIT_ASSERT( MyMoneySchedule::stringToOccurence(i18n("Yearly")) == MyMoneySchedule::OCCUR_YEARLY );
+ CPPUNIT_ASSERT( MyMoneySchedule::stringToOccurence(i18n("Every other year")) == MyMoneySchedule::OCCUR_EVERYOTHERYEAR );
+ // test occurence == stringToOccurence(i18n(occurenceToString(occurence)))
+ CPPUNIT_ASSERT( MyMoneySchedule::OCCUR_ONCE == MyMoneySchedule::stringToOccurence(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_ONCE))) );
+ CPPUNIT_ASSERT( MyMoneySchedule::OCCUR_DAILY == MyMoneySchedule::stringToOccurence(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_DAILY))) );
+ CPPUNIT_ASSERT( MyMoneySchedule::OCCUR_WEEKLY == MyMoneySchedule::stringToOccurence(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_WEEKLY))) );
+ CPPUNIT_ASSERT( MyMoneySchedule::OCCUR_EVERYOTHERWEEK == MyMoneySchedule::stringToOccurence(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYOTHERWEEK))) );
+ CPPUNIT_ASSERT( MyMoneySchedule::OCCUR_FORTNIGHTLY == MyMoneySchedule::stringToOccurence(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_FORTNIGHTLY))) );
+ CPPUNIT_ASSERT( MyMoneySchedule::OCCUR_EVERYHALFMONTH == MyMoneySchedule::stringToOccurence(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYHALFMONTH))) );
+ CPPUNIT_ASSERT( MyMoneySchedule::OCCUR_EVERYTHREEWEEKS == MyMoneySchedule::stringToOccurence(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYTHREEWEEKS))) );
+ CPPUNIT_ASSERT( MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS == MyMoneySchedule::stringToOccurence(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS))) );
+ CPPUNIT_ASSERT( MyMoneySchedule::OCCUR_EVERYTHREEWEEKS == MyMoneySchedule::stringToOccurence(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYTHREEWEEKS))) );
+ CPPUNIT_ASSERT( MyMoneySchedule::OCCUR_EVERYFOURWEEKS == MyMoneySchedule::stringToOccurence(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYFOURWEEKS))) );
+ CPPUNIT_ASSERT( MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS == MyMoneySchedule::stringToOccurence(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS))) );
+ CPPUNIT_ASSERT( MyMoneySchedule::OCCUR_MONTHLY == MyMoneySchedule::stringToOccurence(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_MONTHLY))) );
+ CPPUNIT_ASSERT( MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS == MyMoneySchedule::stringToOccurence(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS))) );
+ CPPUNIT_ASSERT( MyMoneySchedule::OCCUR_EVERYOTHERMONTH == MyMoneySchedule::stringToOccurence(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYOTHERMONTH))) );
+ CPPUNIT_ASSERT( MyMoneySchedule::OCCUR_EVERYTHREEMONTHS == MyMoneySchedule::stringToOccurence(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYTHREEMONTHS))) );
+ CPPUNIT_ASSERT( MyMoneySchedule::OCCUR_QUARTERLY == MyMoneySchedule::stringToOccurence(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_QUARTERLY))) );
+ CPPUNIT_ASSERT( MyMoneySchedule::OCCUR_EVERYFOURMONTHS == MyMoneySchedule::stringToOccurence(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYFOURMONTHS))) );
+ CPPUNIT_ASSERT( MyMoneySchedule::OCCUR_TWICEYEARLY == MyMoneySchedule::stringToOccurence(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_TWICEYEARLY))) );
+ CPPUNIT_ASSERT( MyMoneySchedule::OCCUR_YEARLY == MyMoneySchedule::stringToOccurence(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_YEARLY))) );
+ CPPUNIT_ASSERT( MyMoneySchedule::OCCUR_EVERYOTHERYEAR == MyMoneySchedule::stringToOccurence(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYOTHERYEAR))) );
+}
+void MyMoneyScheduleTest::testEventsPerYear()
+{
+ CPPUNIT_ASSERT(MyMoneySchedule::eventsPerYear(MyMoneySchedule::OCCUR_ONCE) == 0);
+ CPPUNIT_ASSERT(MyMoneySchedule::eventsPerYear(MyMoneySchedule::OCCUR_DAILY) == 365);
+ CPPUNIT_ASSERT(MyMoneySchedule::eventsPerYear(MyMoneySchedule::OCCUR_WEEKLY) == 52);
+ CPPUNIT_ASSERT(MyMoneySchedule::eventsPerYear(MyMoneySchedule::OCCUR_EVERYOTHERWEEK) == 26);
+ CPPUNIT_ASSERT(MyMoneySchedule::eventsPerYear(MyMoneySchedule::OCCUR_FORTNIGHTLY) == 26);
+ CPPUNIT_ASSERT(MyMoneySchedule::eventsPerYear(MyMoneySchedule::OCCUR_EVERYHALFMONTH) == 24);
+ CPPUNIT_ASSERT(MyMoneySchedule::eventsPerYear(MyMoneySchedule::OCCUR_EVERYTHREEWEEKS) == 17);
+ CPPUNIT_ASSERT(MyMoneySchedule::eventsPerYear(MyMoneySchedule::OCCUR_EVERYFOURWEEKS) == 13);
+ CPPUNIT_ASSERT(MyMoneySchedule::eventsPerYear(MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS) == 12);
+ CPPUNIT_ASSERT(MyMoneySchedule::eventsPerYear(MyMoneySchedule::OCCUR_MONTHLY) == 12);
+ CPPUNIT_ASSERT(MyMoneySchedule::eventsPerYear(MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS) == 6);
+ CPPUNIT_ASSERT(MyMoneySchedule::eventsPerYear(MyMoneySchedule::OCCUR_EVERYOTHERMONTH) == 6);
+ CPPUNIT_ASSERT(MyMoneySchedule::eventsPerYear(MyMoneySchedule::OCCUR_EVERYTHREEMONTHS) == 4);
+ CPPUNIT_ASSERT(MyMoneySchedule::eventsPerYear(MyMoneySchedule::OCCUR_QUARTERLY) == 4);
+ CPPUNIT_ASSERT(MyMoneySchedule::eventsPerYear(MyMoneySchedule::OCCUR_EVERYFOURMONTHS) == 3);
+ CPPUNIT_ASSERT(MyMoneySchedule::eventsPerYear(MyMoneySchedule::OCCUR_TWICEYEARLY) == 2);
+ CPPUNIT_ASSERT(MyMoneySchedule::eventsPerYear(MyMoneySchedule::OCCUR_YEARLY) == 1);
+ CPPUNIT_ASSERT(MyMoneySchedule::eventsPerYear(MyMoneySchedule::OCCUR_EVERYOTHERYEAR) == 0);
+}
+
+void MyMoneyScheduleTest::testOccurenceToString()
+{
+ // For each occurenceE test MyMoneySchedule::occurenceToString(occurenceE)
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_ONCE) == "Once" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_DAILY) == "Daily" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_WEEKLY) == "Weekly" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYOTHERWEEK) == "Every other week" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_FORTNIGHTLY) == "Fortnightly" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYHALFMONTH) == "Every half month" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYTHREEWEEKS) == "Every three weeks" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYFOURWEEKS) == "Every four weeks" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS) == "Every thirty days" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_MONTHLY) == "Monthly" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS) == "Every eight weeks" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYOTHERMONTH) == "Every two months" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYTHREEMONTHS) == "Every three months" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_QUARTERLY) == "Quarterly" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYFOURMONTHS) == "Every four months" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_TWICEYEARLY) == "Twice yearly" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_YEARLY) == "Yearly" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYOTHERYEAR) == "Every other year" );
+ // For each occurenceE set occurence and compare occurenceToString() with oTS(occurence())
+ MyMoneySchedule s;
+ s.setStartDate(QDate(2007, 1, 1));
+ s.setNextDueDate(s.startDate());
+ s.setLastPayment(s.startDate());
+ s.setOccurence(MyMoneySchedule::OCCUR_ONCE); CPPUNIT_ASSERT(s.occurenceToString() == "Once" );
+ s.setOccurence(MyMoneySchedule::OCCUR_DAILY); CPPUNIT_ASSERT(s.occurenceToString() == "Daily" );
+ s.setOccurence(MyMoneySchedule::OCCUR_WEEKLY); CPPUNIT_ASSERT(s.occurenceToString() == "Weekly" );
+ s.setOccurence(MyMoneySchedule::OCCUR_EVERYOTHERWEEK); CPPUNIT_ASSERT(s.occurenceToString() == "Every other week" );
+ // Fortnightly no longer used: Every other week used instead
+ s.setOccurence(MyMoneySchedule::OCCUR_FORTNIGHTLY); CPPUNIT_ASSERT(s.occurenceToString() == "Every other week" );
+ s.setOccurence(MyMoneySchedule::OCCUR_EVERYHALFMONTH); CPPUNIT_ASSERT(s.occurenceToString() == "Every half month" );
+ s.setOccurence(MyMoneySchedule::OCCUR_EVERYTHREEWEEKS); CPPUNIT_ASSERT(s.occurenceToString() == "Every three weeks" );
+ s.setOccurence(MyMoneySchedule::OCCUR_EVERYFOURWEEKS); CPPUNIT_ASSERT(s.occurenceToString() == "Every four weeks" );
+ s.setOccurence(MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS); CPPUNIT_ASSERT(s.occurenceToString() == "Every thirty days" );
+ s.setOccurence(MyMoneySchedule::OCCUR_MONTHLY); CPPUNIT_ASSERT(s.occurenceToString() == "Monthly" );
+ s.setOccurence(MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS); CPPUNIT_ASSERT(s.occurenceToString() == "Every eight weeks" );
+ s.setOccurence(MyMoneySchedule::OCCUR_EVERYOTHERMONTH); CPPUNIT_ASSERT(s.occurenceToString() == "Every two months" );
+ s.setOccurence(MyMoneySchedule::OCCUR_EVERYTHREEMONTHS); CPPUNIT_ASSERT(s.occurenceToString() == "Every three months" );
+ // Quarterly no longer used. Every three months used instead
+ s.setOccurence(MyMoneySchedule::OCCUR_QUARTERLY); CPPUNIT_ASSERT(s.occurenceToString() == "Every three months" );
+ s.setOccurence(MyMoneySchedule::OCCUR_EVERYFOURMONTHS); CPPUNIT_ASSERT(s.occurenceToString() == "Every four months" );
+ s.setOccurence(MyMoneySchedule::OCCUR_TWICEYEARLY); CPPUNIT_ASSERT(s.occurenceToString() == "Twice yearly" );
+ s.setOccurence(MyMoneySchedule::OCCUR_YEARLY); CPPUNIT_ASSERT(s.occurenceToString() == "Yearly" );
+ s.setOccurence(MyMoneySchedule::OCCUR_EVERYOTHERYEAR); CPPUNIT_ASSERT(s.occurenceToString() == "Every other year" );
+ // Test occurenceToString(mult,occ)
+ // Test all pairs equivalent to simple occurences: should return the same as occurenceToString(simpleOcc)
+ // TODO replace string with (mult,occ) call.
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_ONCE) == MyMoneySchedule::occurenceToString(1,MyMoneySchedule::OCCUR_ONCE) );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_DAILY) == MyMoneySchedule::occurenceToString(1,MyMoneySchedule::OCCUR_DAILY) );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_WEEKLY) == MyMoneySchedule::occurenceToString(1,MyMoneySchedule::OCCUR_WEEKLY) );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYOTHERWEEK) == MyMoneySchedule::occurenceToString(2,MyMoneySchedule::OCCUR_WEEKLY) );
+ // OCCUR_FORTNIGHTLY will no longer be used: only Every Other Week
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYHALFMONTH) == MyMoneySchedule::occurenceToString(1,MyMoneySchedule::OCCUR_EVERYHALFMONTH) );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYTHREEWEEKS) == MyMoneySchedule::occurenceToString(3,MyMoneySchedule::OCCUR_WEEKLY) );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYFOURWEEKS) == MyMoneySchedule::occurenceToString(4,MyMoneySchedule::OCCUR_WEEKLY) );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_MONTHLY) == MyMoneySchedule::occurenceToString(1,MyMoneySchedule::OCCUR_MONTHLY) );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS) == MyMoneySchedule::occurenceToString(8,MyMoneySchedule::OCCUR_WEEKLY) );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYOTHERMONTH) == MyMoneySchedule::occurenceToString(2,MyMoneySchedule::OCCUR_MONTHLY) );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYTHREEMONTHS) == MyMoneySchedule::occurenceToString(3,MyMoneySchedule::OCCUR_MONTHLY) );
+ // OCCUR_QUARTERLY will no longer be used: only Every Three Months
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYFOURMONTHS) == MyMoneySchedule::occurenceToString(4,MyMoneySchedule::OCCUR_MONTHLY) );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_TWICEYEARLY) == MyMoneySchedule::occurenceToString(6,MyMoneySchedule::OCCUR_MONTHLY) );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_YEARLY) == MyMoneySchedule::occurenceToString(1,MyMoneySchedule::OCCUR_YEARLY) );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYOTHERYEAR) == MyMoneySchedule::occurenceToString(2,MyMoneySchedule::OCCUR_YEARLY) );
+ // Test additional calls with other mult,occ
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(2,MyMoneySchedule::OCCUR_ONCE) == "2 times" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(2,MyMoneySchedule::OCCUR_DAILY) == "Every 2 days" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(5,MyMoneySchedule::OCCUR_WEEKLY) == "Every 5 weeks" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(2,MyMoneySchedule::OCCUR_EVERYHALFMONTH) == "Every 2 half months" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(5,MyMoneySchedule::OCCUR_MONTHLY) == "Every 5 months" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(3,MyMoneySchedule::OCCUR_YEARLY) == "Every 3 years" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(37,MyMoneySchedule::OCCUR_ONCE) == "37 times" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(43,MyMoneySchedule::OCCUR_DAILY) == "Every 43 days" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(61,MyMoneySchedule::OCCUR_WEEKLY) == "Every 61 weeks" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(73,MyMoneySchedule::OCCUR_EVERYHALFMONTH) == "Every 73 half months" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(83,MyMoneySchedule::OCCUR_MONTHLY) == "Every 83 months" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurenceToString(89,MyMoneySchedule::OCCUR_YEARLY) == "Every 89 years" );
+ // Test instance-level occurenceToString method is using occurencePeriod and multiplier
+ // For each base occurence set occurencePeriod and multiplier
+ s.setOccurencePeriod(MyMoneySchedule::OCCUR_ONCE); s.setOccurenceMultiplier(1);
+ s.setOccurence(MyMoneySchedule::OCCUR_ONCE);
+ s.setOccurenceMultiplier(1); CPPUNIT_ASSERT(s.occurenceToString() == "Once" );
+ s.setOccurenceMultiplier(2); CPPUNIT_ASSERT(s.occurenceToString() == "2 times" );
+ s.setOccurenceMultiplier(3); CPPUNIT_ASSERT(s.occurenceToString() == "3 times" );
+ s.setOccurencePeriod(MyMoneySchedule::OCCUR_DAILY);
+ s.setOccurenceMultiplier(1); CPPUNIT_ASSERT(s.occurenceToString() == "Daily" );
+ s.setOccurenceMultiplier(30); CPPUNIT_ASSERT(s.occurenceToString() == "Every thirty days" );
+ s.setOccurenceMultiplier(3); CPPUNIT_ASSERT(s.occurenceToString() == "Every 3 days" );
+ s.setOccurence(MyMoneySchedule::OCCUR_WEEKLY);
+ CPPUNIT_ASSERT(s.occurenceToString() == "Weekly" );
+ s.setOccurenceMultiplier(2); CPPUNIT_ASSERT(s.occurenceToString() == "Every other week" );
+ s.setOccurenceMultiplier(3); CPPUNIT_ASSERT(s.occurenceToString() == "Every three weeks" );
+ s.setOccurenceMultiplier(4); CPPUNIT_ASSERT(s.occurenceToString() == "Every four weeks" );
+ s.setOccurenceMultiplier(5); CPPUNIT_ASSERT(s.occurenceToString() == "Every 5 weeks" );
+ s.setOccurenceMultiplier(7); CPPUNIT_ASSERT(s.occurenceToString() == "Every 7 weeks" );
+ s.setOccurenceMultiplier(8); CPPUNIT_ASSERT(s.occurenceToString() == "Every eight weeks" );
+ s.setOccurenceMultiplier(9); CPPUNIT_ASSERT(s.occurenceToString() == "Every 9 weeks" );
+ s.setOccurence(MyMoneySchedule::OCCUR_EVERYHALFMONTH);
+ s.setOccurenceMultiplier(1); CPPUNIT_ASSERT(s.occurenceToString() == "Every half month" );
+ s.setOccurenceMultiplier(2); CPPUNIT_ASSERT(s.occurenceToString() == "Every 2 half months" );
+ s.setOccurence(MyMoneySchedule::OCCUR_MONTHLY);
+ s.setOccurenceMultiplier(1); CPPUNIT_ASSERT(s.occurenceToString() == "Monthly" );
+ s.setOccurenceMultiplier(2); CPPUNIT_ASSERT(s.occurenceToString() == "Every two months" );
+ s.setOccurenceMultiplier(3); CPPUNIT_ASSERT(s.occurenceToString() == "Every three months" );
+ s.setOccurenceMultiplier(4); CPPUNIT_ASSERT(s.occurenceToString() == "Every four months" );
+ s.setOccurenceMultiplier(5); CPPUNIT_ASSERT(s.occurenceToString() == "Every 5 months" );
+ s.setOccurenceMultiplier(6); CPPUNIT_ASSERT(s.occurenceToString() == "Twice yearly" );
+ s.setOccurenceMultiplier(7); CPPUNIT_ASSERT(s.occurenceToString() == "Every 7 months" );
+ s.setOccurence(MyMoneySchedule::OCCUR_YEARLY);
+ s.setOccurenceMultiplier(1); CPPUNIT_ASSERT(s.occurenceToString() == "Yearly" );
+ s.setOccurenceMultiplier(2); CPPUNIT_ASSERT(s.occurenceToString() == "Every other year" );
+ s.setOccurenceMultiplier(3); CPPUNIT_ASSERT(s.occurenceToString() == "Every 3 years" );
+}
+
+void MyMoneyScheduleTest::testOccurencePeriodToString()
+{
+ // For each occurenceE test MyMoneySchedule::occurencePeriodToString(occurenceE)
+ // Base occurences are translated
+ CPPUNIT_ASSERT(MyMoneySchedule::occurencePeriodToString(MyMoneySchedule::OCCUR_ONCE) == "Once" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurencePeriodToString(MyMoneySchedule::OCCUR_DAILY) == "Day" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurencePeriodToString(MyMoneySchedule::OCCUR_WEEKLY) == "Week" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurencePeriodToString(MyMoneySchedule::OCCUR_EVERYHALFMONTH) == "Half-month" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurencePeriodToString(MyMoneySchedule::OCCUR_MONTHLY) == "Month" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurencePeriodToString(MyMoneySchedule::OCCUR_YEARLY) == "Year" );
+ // All others are not translated so return Any
+ CPPUNIT_ASSERT(MyMoneySchedule::occurencePeriodToString(MyMoneySchedule::OCCUR_EVERYOTHERWEEK) == "Any" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurencePeriodToString(MyMoneySchedule::OCCUR_FORTNIGHTLY) == "Any" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurencePeriodToString(MyMoneySchedule::OCCUR_EVERYTHREEWEEKS) == "Any" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurencePeriodToString(MyMoneySchedule::OCCUR_EVERYFOURWEEKS) == "Any" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurencePeriodToString(MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS) == "Any" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurencePeriodToString(MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS) == "Any" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurencePeriodToString(MyMoneySchedule::OCCUR_EVERYOTHERMONTH) == "Any" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurencePeriodToString(MyMoneySchedule::OCCUR_EVERYTHREEMONTHS) == "Any" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurencePeriodToString(MyMoneySchedule::OCCUR_QUARTERLY) == "Any" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurencePeriodToString(MyMoneySchedule::OCCUR_EVERYFOURMONTHS) == "Any" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurencePeriodToString(MyMoneySchedule::OCCUR_TWICEYEARLY) == "Any" );
+ CPPUNIT_ASSERT(MyMoneySchedule::occurencePeriodToString(MyMoneySchedule::OCCUR_EVERYOTHERYEAR) == "Any" );
+}
+
+void MyMoneyScheduleTest::testOccurencePeriod()
+{
+ // Each occurence:
+ // Set occurence using setOccurencePeriod
+ // occurencePeriod should match what we set
+ // occurence depends on multiplier
+ // TODO:
+ // Once occurence() and setOccurence() are converting between compound and simple occurences
+ // we need to change the occurence() check and add an occurenceMultiplier() check
+ MyMoneySchedule s;
+ s.setStartDate(QDate(2007, 1, 1));
+ s.setNextDueDate(s.startDate());
+ s.setLastPayment(s.startDate());
+ // Set all base occurences
+ s.setOccurencePeriod(MyMoneySchedule::OCCUR_ONCE);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_ONCE );
+ s.setOccurenceMultiplier(1);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 1);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_ONCE );
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_ONCE );
+ s.setOccurenceMultiplier(2);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 2);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_ONCE );
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_ONCE );
+
+ s.setOccurencePeriod(MyMoneySchedule::OCCUR_DAILY);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_DAILY);
+ s.setOccurenceMultiplier(1);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 1);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_DAILY);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_DAILY);
+ s.setOccurenceMultiplier(30);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 30);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_DAILY);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS);
+ s.setOccurenceMultiplier(2);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 2);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_DAILY);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_DAILY);
+
+ s.setOccurencePeriod(MyMoneySchedule::OCCUR_WEEKLY);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_WEEKLY);
+ s.setOccurenceMultiplier(1);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 1);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_WEEKLY);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_WEEKLY);
+ s.setOccurenceMultiplier(2);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 2);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_WEEKLY);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_EVERYOTHERWEEK);
+ s.setOccurenceMultiplier(3);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 3);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_WEEKLY);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_EVERYTHREEWEEKS);
+ s.setOccurenceMultiplier(4);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 4);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_WEEKLY);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_EVERYFOURWEEKS);
+ s.setOccurenceMultiplier(5);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 5);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_WEEKLY);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_WEEKLY);
+ s.setOccurenceMultiplier(8);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 8);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_WEEKLY);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS);
+
+ s.setOccurencePeriod(MyMoneySchedule::OCCUR_EVERYHALFMONTH);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_EVERYHALFMONTH);
+ s.setOccurenceMultiplier(1);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 1);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_EVERYHALFMONTH);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_EVERYHALFMONTH);
+ s.setOccurenceMultiplier(2);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 2);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_EVERYHALFMONTH);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_EVERYHALFMONTH);
+
+ s.setOccurencePeriod(MyMoneySchedule::OCCUR_MONTHLY);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_MONTHLY);
+ s.setOccurenceMultiplier(1);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 1);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_MONTHLY);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_MONTHLY);
+ s.setOccurenceMultiplier(2);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 2);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_MONTHLY);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_EVERYOTHERMONTH);
+ s.setOccurenceMultiplier(3);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 3);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_MONTHLY);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_EVERYTHREEMONTHS);
+ s.setOccurenceMultiplier(4);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 4);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_MONTHLY);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_EVERYFOURMONTHS);
+ s.setOccurenceMultiplier(5);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 5);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_MONTHLY);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_MONTHLY);
+ s.setOccurenceMultiplier(6);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 6);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_MONTHLY);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_TWICEYEARLY);
+
+ s.setOccurencePeriod(MyMoneySchedule::OCCUR_YEARLY);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_YEARLY);
+ s.setOccurenceMultiplier(1);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 1);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_YEARLY);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_YEARLY);
+ s.setOccurenceMultiplier(2);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 2);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_YEARLY);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_EVERYOTHERYEAR);
+ s.setOccurenceMultiplier(3);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 3);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_YEARLY);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_YEARLY);
+
+ // Set occurence: check occurence, Period and Multiplier
+ s.setOccurence(MyMoneySchedule::OCCUR_ONCE);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_ONCE);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_ONCE);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 1);
+
+ s.setOccurence(MyMoneySchedule::OCCUR_DAILY);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_DAILY);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_DAILY);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 1);
+ s.setOccurence(MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_DAILY);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 30);
+
+ s.setOccurence(MyMoneySchedule::OCCUR_WEEKLY);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_WEEKLY);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_WEEKLY);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 1);
+ s.setOccurence(MyMoneySchedule::OCCUR_EVERYOTHERWEEK);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_EVERYOTHERWEEK);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_WEEKLY);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 2);
+ // Fortnightly no longer used: Every other week used instead
+ s.setOccurence(MyMoneySchedule::OCCUR_FORTNIGHTLY);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_EVERYOTHERWEEK);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_WEEKLY);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 2);
+ s.setOccurence(MyMoneySchedule::OCCUR_EVERYTHREEWEEKS);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_EVERYTHREEWEEKS);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_WEEKLY);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 3);
+ s.setOccurence(MyMoneySchedule::OCCUR_EVERYFOURWEEKS);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_EVERYFOURWEEKS);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_WEEKLY);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 4);
+ s.setOccurence(MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_WEEKLY);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 8);
+
+ s.setOccurence(MyMoneySchedule::OCCUR_EVERYHALFMONTH);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_EVERYHALFMONTH);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_EVERYHALFMONTH);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 1);
+
+ s.setOccurence(MyMoneySchedule::OCCUR_MONTHLY);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_MONTHLY);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_MONTHLY);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 1);
+ s.setOccurence(MyMoneySchedule::OCCUR_EVERYOTHERMONTH);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_EVERYOTHERMONTH);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_MONTHLY);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 2);
+ s.setOccurence(MyMoneySchedule::OCCUR_EVERYTHREEMONTHS);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_EVERYTHREEMONTHS);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_MONTHLY);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 3);
+ // Quarterly no longer used. Every three months used instead
+ s.setOccurence(MyMoneySchedule::OCCUR_QUARTERLY);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_EVERYTHREEMONTHS);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_MONTHLY);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 3);
+ s.setOccurence(MyMoneySchedule::OCCUR_EVERYFOURMONTHS);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_EVERYFOURMONTHS);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_MONTHLY);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 4);
+ s.setOccurence(MyMoneySchedule::OCCUR_TWICEYEARLY);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_TWICEYEARLY);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_MONTHLY);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 6);
+
+ s.setOccurence(MyMoneySchedule::OCCUR_YEARLY);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_YEARLY);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_YEARLY);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 1);
+ s.setOccurence(MyMoneySchedule::OCCUR_EVERYOTHERYEAR);
+ CPPUNIT_ASSERT(s.occurence() == MyMoneySchedule::OCCUR_EVERYOTHERYEAR);
+ CPPUNIT_ASSERT(s.occurencePeriod() == MyMoneySchedule::OCCUR_YEARLY);
+ CPPUNIT_ASSERT(s.occurenceMultiplier() == 2);
+}
+
+void MyMoneyScheduleTest::testSimpleToFromCompoundOccurence()
+{
+ // Conversion between Simple and Compound occurences
+ // Each simple occurence to compound occurence
+ MyMoneySchedule::occurenceE occ;
+ int mult;
+ occ = MyMoneySchedule::OCCUR_ONCE; mult = 1;
+ MyMoneySchedule::simpleToCompoundOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_ONCE && mult == 1 );
+ occ = MyMoneySchedule::OCCUR_DAILY; mult = 1;
+ MyMoneySchedule::simpleToCompoundOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_DAILY && mult == 1 );
+ occ = MyMoneySchedule::OCCUR_WEEKLY; mult = 1;
+ MyMoneySchedule::simpleToCompoundOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_WEEKLY && mult == 1 );
+ occ = MyMoneySchedule::OCCUR_EVERYOTHERWEEK; mult = 1;
+ MyMoneySchedule::simpleToCompoundOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_WEEKLY && mult == 2 );
+ occ = MyMoneySchedule::OCCUR_FORTNIGHTLY; mult = 1;
+ MyMoneySchedule::simpleToCompoundOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_WEEKLY && mult == 2 );
+ occ = MyMoneySchedule::OCCUR_EVERYHALFMONTH; mult = 1;
+ MyMoneySchedule::simpleToCompoundOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_EVERYHALFMONTH && mult == 1 );
+ occ = MyMoneySchedule::OCCUR_EVERYTHREEWEEKS; mult = 1;
+ MyMoneySchedule::simpleToCompoundOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_WEEKLY && mult == 3 );
+ occ = MyMoneySchedule::OCCUR_EVERYFOURWEEKS; mult = 1;
+ MyMoneySchedule::simpleToCompoundOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_WEEKLY && mult == 4 );
+ occ = MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS; mult = 1;
+ MyMoneySchedule::simpleToCompoundOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_DAILY && mult == 30 );
+ occ = MyMoneySchedule::OCCUR_MONTHLY; mult = 1;
+ MyMoneySchedule::simpleToCompoundOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_MONTHLY && mult == 1 );
+ occ = MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS; mult = 1;
+ MyMoneySchedule::simpleToCompoundOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_WEEKLY && mult == 8 );
+ occ = MyMoneySchedule::OCCUR_EVERYOTHERMONTH; mult = 1;
+ MyMoneySchedule::simpleToCompoundOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_MONTHLY && mult == 2 );
+ occ = MyMoneySchedule::OCCUR_EVERYTHREEMONTHS; mult = 1;
+ MyMoneySchedule::simpleToCompoundOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_MONTHLY && mult == 3 );
+ occ = MyMoneySchedule::OCCUR_QUARTERLY; mult = 1;
+ MyMoneySchedule::simpleToCompoundOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_MONTHLY && mult == 3 );
+ occ = MyMoneySchedule::OCCUR_EVERYFOURMONTHS; mult = 1;
+ MyMoneySchedule::simpleToCompoundOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_MONTHLY && mult == 4 );
+ occ = MyMoneySchedule::OCCUR_TWICEYEARLY; mult = 1;
+ MyMoneySchedule::simpleToCompoundOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_MONTHLY && mult == 6 );
+ occ = MyMoneySchedule::OCCUR_YEARLY; mult = 1;
+ MyMoneySchedule::simpleToCompoundOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_YEARLY && mult == 1 );
+ occ = MyMoneySchedule::OCCUR_EVERYOTHERYEAR; mult = 1;
+ MyMoneySchedule::simpleToCompoundOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_YEARLY && mult == 2 );
+ // Compound to Simple Occurences
+ occ = MyMoneySchedule::OCCUR_ONCE; mult = 1;
+ MyMoneySchedule::compoundToSimpleOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_ONCE && mult == 1 );
+ occ = MyMoneySchedule::OCCUR_DAILY; mult = 1;
+ MyMoneySchedule::compoundToSimpleOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_DAILY && mult == 1 );
+ occ = MyMoneySchedule::OCCUR_WEEKLY; mult = 1;
+ MyMoneySchedule::compoundToSimpleOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_WEEKLY && mult == 1 );
+ occ = MyMoneySchedule::OCCUR_WEEKLY; mult = 2;
+ MyMoneySchedule::compoundToSimpleOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_EVERYOTHERWEEK && mult == 1 );
+ // MyMoneySchedule::OCCUR_FORTNIGHTLY not converted back
+ occ = MyMoneySchedule::OCCUR_EVERYHALFMONTH; mult = 1;
+ MyMoneySchedule::compoundToSimpleOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_EVERYHALFMONTH && mult == 1 );
+ occ = MyMoneySchedule::OCCUR_WEEKLY; mult = 3;
+ MyMoneySchedule::compoundToSimpleOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_EVERYTHREEWEEKS && mult == 1 );
+ occ = MyMoneySchedule::OCCUR_WEEKLY ; mult = 4;
+ MyMoneySchedule::compoundToSimpleOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_EVERYFOURWEEKS && mult == 1 );
+ occ = MyMoneySchedule::OCCUR_DAILY; mult = 30;
+ MyMoneySchedule::compoundToSimpleOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS && mult == 1 );
+ occ = MyMoneySchedule::OCCUR_MONTHLY; mult = 1;
+ MyMoneySchedule::compoundToSimpleOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_MONTHLY && mult == 1 );
+ occ = MyMoneySchedule::OCCUR_WEEKLY; mult = 8;
+ MyMoneySchedule::compoundToSimpleOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS && mult == 1 );
+ occ = MyMoneySchedule::OCCUR_MONTHLY; mult = 2;
+ MyMoneySchedule::compoundToSimpleOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_EVERYOTHERMONTH && mult == 1 );
+ occ = MyMoneySchedule::OCCUR_MONTHLY; mult = 3;
+ MyMoneySchedule::compoundToSimpleOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_EVERYTHREEMONTHS && mult == 1 );
+ // MyMoneySchedule::OCCUR_QUARTERLY not converted back
+ occ = MyMoneySchedule::OCCUR_MONTHLY; mult = 4;
+ MyMoneySchedule::compoundToSimpleOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_EVERYFOURMONTHS && mult == 1 );
+ occ = MyMoneySchedule::OCCUR_MONTHLY; mult = 6;
+ MyMoneySchedule::compoundToSimpleOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_TWICEYEARLY && mult == 1 );
+ occ = MyMoneySchedule::OCCUR_YEARLY; mult = 1;
+ MyMoneySchedule::compoundToSimpleOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_YEARLY && mult == 1 );
+ occ = MyMoneySchedule::OCCUR_YEARLY; mult = 2;
+ MyMoneySchedule::compoundToSimpleOccurence(mult, occ);
+ CPPUNIT_ASSERT( occ == MyMoneySchedule::OCCUR_EVERYOTHERYEAR && mult == 1 );
+}
+
+void MyMoneyScheduleTest::testPaidEarlyOneTime()
+{
+// this tries to figure out what's wrong with
+// https://bugs.kde.org/show_bug.cgi?id=231029
+
+ MyMoneySchedule sch;
+ QDate paymentInFuture = QDate::currentDate().addDays(7);
+
+ QString ref_ok = QString(
+ "<!DOCTYPE TEST>\n"
+ "<SCHEDULE-CONTAINER>\n"
+ " <SCHEDULED_TX startDate=\"%1\" autoEnter=\"0\" weekendOption=\"1\" lastPayment=\"%2\" paymentType=\"2\" endDate=\"%3\" type=\"4\" id=\"SCH0042\" name=\"A Name\" fixed=\"1\" occurenceMultiplier=\"1\" occurence=\"32\" >\n"
+ " <PAYMENTS/>\n"
+ " <TRANSACTION postdate=\"\" memo=\"\" id=\"\" commodity=\"GBP\" entrydate=\"\" >\n"
+ " <SPLITS>\n"
+ " <SPLIT payee=\"P000001\" reconciledate=\"\" shares=\"96379/100\" action=\"Transfer\" number=\"\" reconcileflag=\"2\" memo=\"\" value=\"96379/100\" id=\"S0001\" account=\"A000076\" />\n"
+ " <SPLIT payee=\"P000001\" reconciledate=\"\" shares=\"-96379/100\" action=\"Transfer\" number=\"\" reconcileflag=\"2\" memo=\"\" value=\"-96379/100\" id=\"S0002\" account=\"A000276\" />\n"
+ " </SPLITS>\n"
+ " </TRANSACTION>\n"
+ " </SCHEDULED_TX>\n"
+ "</SCHEDULE-CONTAINER>\n"
+ ).arg(paymentInFuture.toString(Qt::ISODate))
+ .arg(paymentInFuture.toString(Qt::ISODate))
+ .arg(paymentInFuture.toString(Qt::ISODate));
+
+ QDomDocument doc;
+ QDomElement node;
+ doc.setContent(ref_ok);
+ node = doc.documentElement().firstChild().toElement();
+
+ try {
+ sch = MyMoneySchedule(node);
+ CPPUNIT_ASSERT(sch.isFinished() == true);
+ CPPUNIT_ASSERT(sch.occurencePeriod() == MyMoneySchedule::OCCUR_MONTHLY);
+ CPPUNIT_ASSERT(sch.paymentDates(QDate::currentDate(), QDate::currentDate().addDays(21)).count() == 0);
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+}
diff --git a/kmymoney2/mymoney/mymoneyscheduletest.h b/kmymoney2/mymoney/mymoneyscheduletest.h
new file mode 100644
index 0000000..ea2c929
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyscheduletest.h
@@ -0,0 +1,106 @@
+/***************************************************************************
+ mymoneyscheduletest.h
+ -------------------
+ copyright : (C) 2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef __MYMONEYSCHEDULETEST_H__
+#define __MYMONEYSCHEDULETEST_H__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#define private public
+#define protected public
+#include "mymoneyscheduled.h"
+#include "mymoneyfile.h"
+#include "storage/mymoneyseqaccessmgr.h"
+#undef private
+
+class MyMoneyScheduleTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(MyMoneyScheduleTest);
+ CPPUNIT_TEST(testEmptyConstructor);
+ CPPUNIT_TEST(testConstructor);
+ CPPUNIT_TEST(testSetFunctions);
+ CPPUNIT_TEST(testCopyConstructor);
+ CPPUNIT_TEST(testAssignmentConstructor);
+ // The following tests must be done in this order.
+ CPPUNIT_TEST(testSingleton);
+ CPPUNIT_TEST(testAddSchedule);
+ CPPUNIT_TEST(testAnyScheduled);
+ CPPUNIT_TEST(testOverdue);
+ CPPUNIT_TEST(testGetSchedule);
+ CPPUNIT_TEST(testGetScheduled);
+ CPPUNIT_TEST(testGetOverdue);
+ CPPUNIT_TEST(testNextPayment);
+ CPPUNIT_TEST(testPaymentDates);
+ CPPUNIT_TEST(testReplaceSchedule);
+ CPPUNIT_TEST(testRemoveSchedule);
+ CPPUNIT_TEST(testWriteXML);
+ CPPUNIT_TEST(testReadXML);
+ CPPUNIT_TEST(testHasReferenceTo);
+ CPPUNIT_TEST(testAdjustedNextDueDate);
+ CPPUNIT_TEST(testModifyNextDueDate);
+ CPPUNIT_TEST(testDaysBetweenEvents);
+ CPPUNIT_TEST(testEventsPerYear);
+ CPPUNIT_TEST(testAddHalfMonths);
+ CPPUNIT_TEST(testOccurenceToString);
+ CPPUNIT_TEST(testOccurencePeriodToString);
+ CPPUNIT_TEST(testStringToOccurence);
+ CPPUNIT_TEST(testOccurencePeriod);
+ CPPUNIT_TEST(testSimpleToFromCompoundOccurence);
+ CPPUNIT_TEST(testPaidEarlyOneTime);
+ CPPUNIT_TEST_SUITE_END();
+
+protected:
+// MyMoneyFile *m_file;
+// MyMoneySeqAccessMgr* storage;
+ //TestObserverSet *observer;
+ //TestObserverSet *hierarchyObserver;
+
+public:
+ MyMoneyScheduleTest();
+ void setUp ();
+ void tearDown ();
+ void testEmptyConstructor();
+ void testConstructor();
+ void testSetFunctions();
+ void testCopyConstructor();
+ void testAssignmentConstructor();
+ void testSingleton();
+ void testAddSchedule();
+ void testAnyScheduled();
+ void testOverdue();
+ void testGetSchedule();
+ void testGetScheduled();
+ void testGetOverdue();
+ void testNextPayment();
+ void testAddHalfMonths();
+ void testPaymentDates();
+ void testReplaceSchedule();
+ void testRemoveSchedule();
+ void testWriteXML();
+ void testReadXML();
+ void testHasReferenceTo();
+ void testAdjustedNextDueDate();
+ void testModifyNextDueDate();
+ void testDaysBetweenEvents();
+ void testEventsPerYear();
+ void testOccurenceToString();
+ void testOccurencePeriodToString();
+ void testStringToOccurence();
+ void testOccurencePeriod();
+ void testSimpleToFromCompoundOccurence();
+ void testPaidEarlyOneTime();
+};
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneysecurity.cpp b/kmymoney2/mymoney/mymoneysecurity.cpp
new file mode 100644
index 0000000..73edbdb
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneysecurity.cpp
@@ -0,0 +1,180 @@
+/***************************************************************************
+ mymoneysecurity.cpp - description
+ -------------------
+ begin : Tue Jan 29 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoneysecurity.h"
+#include "mymoneyexception.h"
+
+MyMoneySecurity::MyMoneySecurity() :
+ m_securityType(SECURITY_NONE),
+ m_smallestAccountFraction(100),
+ m_smallestCashFraction(100),
+ m_partsPerUnit(100)
+{
+}
+
+MyMoneySecurity::MyMoneySecurity(const QString& id, const QString& name, const QString& symbol, const int partsPerUnit, const int smallestCashFraction, const int smallestAccountFraction) :
+ MyMoneyObject(id),
+ m_name(name),
+ m_securityType(SECURITY_CURRENCY)
+{
+ if(symbol.isEmpty())
+ m_tradingSymbol = id;
+ else
+ m_tradingSymbol = symbol;
+
+ m_partsPerUnit = partsPerUnit;
+ m_smallestCashFraction = smallestCashFraction;
+ if(smallestAccountFraction)
+ m_smallestAccountFraction = smallestAccountFraction;
+ else
+ m_smallestAccountFraction = smallestCashFraction;
+}
+
+MyMoneySecurity::MyMoneySecurity(const QString& id, const MyMoneySecurity& equity) :
+ MyMoneyObject(id)
+{
+ *this = equity;
+ m_id = id;
+}
+
+MyMoneySecurity::MyMoneySecurity(const QDomElement& node) :
+ MyMoneyObject(node),
+ MyMoneyKeyValueContainer(node.elementsByTagName("KEYVALUEPAIRS").item(0).toElement())
+{
+ if(("SECURITY" != node.tagName())
+ && ("EQUITY" != node.tagName())
+ && ("CURRENCY" != node.tagName()))
+ throw new MYMONEYEXCEPTION("Node was not SECURITY or CURRENCY");
+
+ setName(QStringEmpty(node.attribute("name")));
+ setTradingSymbol(QStringEmpty(node.attribute("symbol")));
+ setSecurityType(static_cast<eSECURITYTYPE>(node.attribute("type").toInt()));
+ setSmallestAccountFraction(node.attribute("saf").toInt());
+
+ if(isCurrency()) {
+ setPartsPerUnit(node.attribute("ppu").toInt());
+ setSmallestCashFraction(node.attribute("scf").toInt());
+ } else {
+ setTradingCurrency(QStringEmpty(node.attribute("trading-currency")));
+ setTradingMarket(QStringEmpty(node.attribute("trading-market")));
+ }
+}
+
+MyMoneySecurity::~MyMoneySecurity()
+{
+}
+
+bool MyMoneySecurity::operator == (const MyMoneySecurity& r) const
+{
+ return (m_id == r.m_id)
+ && (m_name == r.m_name)
+ && (m_tradingSymbol == r.m_tradingSymbol)
+ && (m_tradingMarket == r.m_tradingMarket)
+ && (m_tradingSymbol == r.m_tradingSymbol)
+ && (m_tradingCurrency == r.m_tradingCurrency)
+ && (m_securityType == r.m_securityType)
+ && (m_smallestAccountFraction == r.m_smallestAccountFraction)
+ && (m_smallestCashFraction == r.m_smallestCashFraction)
+ && (m_partsPerUnit == r.m_partsPerUnit)
+ && this->MyMoneyKeyValueContainer::operator == (r);
+
+}
+
+bool MyMoneySecurity::operator < (const MyMoneySecurity& right) const
+{
+ if(m_securityType == right.m_securityType)
+ return m_name < right.m_name;
+ return m_securityType < right.m_securityType;
+}
+
+
+bool MyMoneySecurity::hasReferenceTo(const QString& id) const
+{
+ return (id == m_tradingCurrency);
+}
+
+void MyMoneySecurity::writeXML(QDomDocument& document, QDomElement& parent) const
+{
+ QDomElement el;
+ if(isCurrency())
+ el = document.createElement("CURRENCY");
+ else
+ el = document.createElement("SECURITY");
+
+ writeBaseXML(document, el);
+
+ el.setAttribute("name", m_name);
+ el.setAttribute("symbol", m_tradingSymbol);
+ el.setAttribute("type", static_cast<int>(m_securityType));
+ el.setAttribute("saf", m_smallestAccountFraction);
+ if(isCurrency()) {
+ el.setAttribute("ppu", m_partsPerUnit);
+ el.setAttribute("scf", m_smallestCashFraction);
+ } else {
+ el.setAttribute("trading-currency", m_tradingCurrency);
+ el.setAttribute("trading-market", m_tradingMarket);
+ }
+
+ //Add in Key-Value Pairs for securities.
+ MyMoneyKeyValueContainer::writeXML(document, el);
+
+ parent.appendChild(el);
+}
+
+QString MyMoneySecurity::securityTypeToString(const eSECURITYTYPE securityType)
+{
+ QString returnString;
+
+ switch (securityType) {
+ case MyMoneySecurity::SECURITY_STOCK:
+ returnString = I18N_NOOP("Stock");
+ break;
+ case MyMoneySecurity::SECURITY_MUTUALFUND:
+ returnString = I18N_NOOP("Mutual Fund");
+ break;
+ case MyMoneySecurity::SECURITY_BOND:
+ returnString = I18N_NOOP("Bond");
+ break;
+ case MyMoneySecurity::SECURITY_CURRENCY:
+ returnString = I18N_NOOP("Currency");
+ break;
+ case MyMoneySecurity::SECURITY_NONE:
+ returnString = I18N_NOOP("None");
+ break;
+ default:
+ returnString = I18N_NOOP("Unknown");
+ }
+
+ return returnString;
+}
+
diff --git a/kmymoney2/mymoney/mymoneysecurity.h b/kmymoney2/mymoney/mymoneysecurity.h
new file mode 100644
index 0000000..666398e
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneysecurity.h
@@ -0,0 +1,150 @@
+/***************************************************************************
+ mymoneysecurity.h - description
+ -------------------
+ begin : Tue Jan 29 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYSECURITY_H
+#define MYMONEYSECURITY_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qdatetime.h>
+#include <qmap.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/export.h>
+#include <kmymoney/mymoneymoney.h>
+#include <kmymoney/mymoneyutils.h>
+#include <kmymoney/mymoneyobject.h>
+#include <kmymoney/mymoneykeyvaluecontainer.h>
+
+/**
+ * Class that holds all the required information about a security that the user
+ * has entered information about. A security can be a stock, a mutual fund, a bond
+ * or a currency.
+ *
+ * @author Kevin Tambascio
+ * @author Thomas Baumgart
+ */
+class KMYMONEY_EXPORT MyMoneySecurity : public MyMoneyObject, public MyMoneyKeyValueContainer
+{
+public:
+ MyMoneySecurity();
+ MyMoneySecurity(const QString& id, const MyMoneySecurity& equity);
+ MyMoneySecurity(const QString& id, const QString& name, const QString& symbol = QString(), const int partsPerUnit = 100, const int smallestCashFraction = 100, const int smallestAccountFraction = 0);
+ MyMoneySecurity(const QDomElement& node);
+ virtual ~MyMoneySecurity();
+
+ bool operator < (const MyMoneySecurity&) const;
+
+ /**
+ * This operator tests for equality of two MyMoneySecurity objects
+ */
+ bool operator == (const MyMoneySecurity&) const;
+
+ /**
+ * This operator tests for inequality of this MyMoneySecurity object
+ * and the one passed by @p r
+ *
+ * @param r the right side of the comparison
+ */
+ bool operator != (const MyMoneySecurity& r) const { return !(*this == r); }
+
+public:
+ typedef enum {
+ SECURITY_STOCK,
+ SECURITY_MUTUALFUND,
+ SECURITY_BOND,
+ SECURITY_CURRENCY,
+ SECURITY_NONE
+ } eSECURITYTYPE;
+
+ const QString& name() const { return m_name; }
+ void setName(const String& str) { m_name = str; }
+
+ const QString& tradingSymbol() const { return m_tradingSymbol; }
+ void setTradingSymbol(const String& str) { m_tradingSymbol = str; }
+
+ eSECURITYTYPE securityType() const { return m_securityType; }
+ void setSecurityType(const eSECURITYTYPE& s) { m_securityType = s; }
+ bool isCurrency(void) const { return m_securityType == SECURITY_CURRENCY; };
+
+ const QString& tradingMarket() const { return m_tradingMarket; }
+ void setTradingMarket(const QString& str) { m_tradingMarket = str; }
+
+ const QString& tradingCurrency(void) const { return m_tradingCurrency; };
+ void setTradingCurrency(const QString& str) { m_tradingCurrency = str; };
+
+ int smallestAccountFraction(void) const { return m_smallestAccountFraction; };
+ void setSmallestAccountFraction(const int sf) { m_smallestAccountFraction = sf; };
+
+ int partsPerUnit(void) const { return m_partsPerUnit; };
+ int smallestCashFraction(void) const { return m_smallestCashFraction; };
+
+ void setPartsPerUnit(const int ppu) { m_partsPerUnit = ppu; };
+ void setSmallestCashFraction(const int sf) { m_smallestCashFraction = sf; };
+
+ void writeXML(QDomDocument& document, QDomElement& parent) const;
+
+ /**
+ * This method checks if a reference to the given object exists. It returns,
+ * a @p true if the object is referencing the one requested by the
+ * parameter @p id. If it does not, this method returns @p false.
+ *
+ * @param id id of the object to be checked for references
+ * @retval true This object references object with id @p id.
+ * @retval false This object does not reference the object with id @p id.
+ */
+ bool hasReferenceTo(const QString& id) const;
+
+ /**
+ * This method is used to convert the internal representation of
+ * an security type into a human readable format
+ *
+ * @param securityType enumerated representation of the security type.
+ * For possible values, see MyMoneySecurity::eSECURITYTYPE
+ *
+ * @return QString representing the human readable form
+ */
+ static QString securityTypeToString(const MyMoneySecurity::eSECURITYTYPE securityType);
+
+
+protected:
+ QString m_name;
+ QString m_tradingSymbol;
+ QString m_tradingMarket;
+ QString m_tradingCurrency;
+ eSECURITYTYPE m_securityType;
+ int m_smallestAccountFraction;
+ int m_smallestCashFraction;
+ int m_partsPerUnit;
+};
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneysecuritytest.cpp b/kmymoney2/mymoney/mymoneysecuritytest.cpp
new file mode 100644
index 0000000..77b6764
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneysecuritytest.cpp
@@ -0,0 +1,210 @@
+/***************************************************************************
+ mymoneysecuritytest.cpp
+ -------------------
+ copyright : (C) 2002 by Kevin Tambascio
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "mymoneysecuritytest.h"
+
+MyMoneySecurityTest::MyMoneySecurityTest()
+{
+}
+
+
+void MyMoneySecurityTest::setUp () {
+ m = new MyMoneySecurity();
+}
+
+void MyMoneySecurityTest::tearDown () {
+ delete m;
+}
+
+void MyMoneySecurityTest::testEmptyConstructor() {
+ CPPUNIT_ASSERT(m->id().isEmpty());
+ CPPUNIT_ASSERT(m->name().isEmpty());
+ CPPUNIT_ASSERT(m->tradingSymbol().isEmpty());
+ CPPUNIT_ASSERT(m->securityType() == MyMoneySecurity::SECURITY_NONE);
+ CPPUNIT_ASSERT(m->tradingMarket().isEmpty());
+ CPPUNIT_ASSERT(m->tradingCurrency().isEmpty());
+ CPPUNIT_ASSERT(m->smallestCashFraction() == 100);
+ CPPUNIT_ASSERT(m->smallestAccountFraction() == 100);
+ CPPUNIT_ASSERT(m->partsPerUnit() == 100);
+}
+
+void MyMoneySecurityTest::testCopyConstructor() {
+ MyMoneySecurity* n1 = new MyMoneySecurity("GUID1", *m);
+ MyMoneySecurity n2(*n1);
+
+ // CPPUNIT_ASSERT(*n1 == n2);
+
+ delete n1;
+}
+
+void MyMoneySecurityTest::testNonemptyConstructor() {
+ QDate date(2004,4,1);
+ MyMoneyMoney val("1234/100");
+
+ m->setName("name");
+ m->setTradingSymbol("symbol");
+ m->setSecurityType(MyMoneySecurity::SECURITY_CURRENCY);
+ // m->addPriceHistory(date, val);
+
+ MyMoneySecurity n("id", *m);
+
+ CPPUNIT_ASSERT(n.id() == QString("id"));
+ CPPUNIT_ASSERT(n.tradingSymbol() == QString("symbol"));
+ CPPUNIT_ASSERT(n.securityType() == MyMoneySecurity::SECURITY_CURRENCY);
+ // CPPUNIT_ASSERT(n.priceHistory().count() == 1);
+}
+
+
+void MyMoneySecurityTest::testSetFunctions() {
+ m->setName("Name");
+ m->setTradingSymbol("Symbol");
+ m->setTradingMarket("Market");
+ m->setTradingCurrency("Currency");
+ m->setSecurityType(MyMoneySecurity::SECURITY_STOCK);
+ m->setSmallestAccountFraction(50);
+ m->setSmallestCashFraction(2);
+ m->setPartsPerUnit(30);
+
+ CPPUNIT_ASSERT(m->name() == "Name");
+ CPPUNIT_ASSERT(m->tradingSymbol() == "Symbol");
+ CPPUNIT_ASSERT(m->tradingMarket() == "Market");
+ CPPUNIT_ASSERT(m->tradingCurrency() == "Currency");
+ CPPUNIT_ASSERT(m->securityType() == MyMoneySecurity::SECURITY_STOCK);
+ CPPUNIT_ASSERT(m->smallestAccountFraction() == 50);
+ CPPUNIT_ASSERT(m->smallestCashFraction() == 2);
+ CPPUNIT_ASSERT(m->partsPerUnit() == 30);
+}
+
+/*
+void MyMoneySecurityTest::testMyMoneyFileConstructor() {
+ MyMoneySecurity *t = new MyMoneySecurity("GUID", *n);
+
+ CPPUNIT_ASSERT(t->id() == "GUID");
+
+ delete t;
+}
+*/
+
+void MyMoneySecurityTest::testEquality () {
+ testSetFunctions();
+ m->setValue("Key", "Value");
+
+ MyMoneySecurity n;
+ n = *m;
+
+ CPPUNIT_ASSERT(n == *m);
+ n.setName("NewName");
+ CPPUNIT_ASSERT(!(n == *m));
+ n = *m;
+ n.setTradingSymbol("NewSymbol");
+ CPPUNIT_ASSERT(!(n == *m));
+ n = *m;
+ n.setTradingMarket("NewMarket");
+ CPPUNIT_ASSERT(!(n == *m));
+ n = *m;
+ n.setTradingCurrency("NewCurrency");
+ CPPUNIT_ASSERT(!(n == *m));
+ n = *m;
+ n.setSecurityType(MyMoneySecurity::SECURITY_CURRENCY);
+ CPPUNIT_ASSERT(!(n == *m));
+ n = *m;
+ n.setSmallestAccountFraction(40);
+ CPPUNIT_ASSERT(!(n == *m));
+ n = *m;
+ n.setSmallestCashFraction(20);
+ CPPUNIT_ASSERT(!(n == *m));
+ n = *m;
+ n.setPartsPerUnit(3);
+ CPPUNIT_ASSERT(!(n == *m));
+ n = *m;
+ n.setValue("Key", "NewValue");
+ CPPUNIT_ASSERT(!(n == *m));
+}
+
+void MyMoneySecurityTest::testInequality () {
+ testSetFunctions();
+ m->setValue("Key", "Value");
+
+ MyMoneySecurity n;
+ n = *m;
+
+ CPPUNIT_ASSERT(!(n != *m));
+ n.setName("NewName");
+ CPPUNIT_ASSERT(n != *m);
+ n = *m;
+ n.setTradingSymbol("NewSymbol");
+ CPPUNIT_ASSERT(n != *m);
+ n = *m;
+ n.setTradingMarket("NewMarket");
+ CPPUNIT_ASSERT(n != *m);
+ n = *m;
+ n.setTradingCurrency("NewCurrency");
+ CPPUNIT_ASSERT(n != *m);
+ n = *m;
+ n.setSecurityType(MyMoneySecurity::SECURITY_CURRENCY);
+ CPPUNIT_ASSERT(n != *m);
+ n = *m;
+ n.setSmallestAccountFraction(40);
+ CPPUNIT_ASSERT(n != *m);
+ n = *m;
+ n.setSmallestCashFraction(20);
+ CPPUNIT_ASSERT(n != *m);
+ n = *m;
+ n.setPartsPerUnit(3);
+ CPPUNIT_ASSERT(n != *m);
+ n = *m;
+ n.setValue("Key", "NewValue");
+ CPPUNIT_ASSERT(n != *m);
+}
+
+/*
+void MyMoneySecurityTest::testAccountIDList () {
+ MyMoneySecurity equity;
+ QStringList list;
+ QString id;
+
+ // list must be empty
+ list = institution.accountList();
+ CPPUNIT_ASSERT(list.count() == 0);
+
+ // add one account
+ institution.addAccountId("A000002");
+ list = institution.accountList();
+ CPPUNIT_ASSERT(list.count() == 1);
+ CPPUNIT_ASSERT(list.contains("A000002") == 1);
+
+ // adding same account shouldn't make a difference
+ institution.addAccountId("A000002");
+ list = institution.accountList();
+ CPPUNIT_ASSERT(list.count() == 1);
+ CPPUNIT_ASSERT(list.contains("A000002") == 1);
+
+ // now add another account
+ institution.addAccountId("A000001");
+ list = institution.accountList();
+ CPPUNIT_ASSERT(list.count() == 2);
+ CPPUNIT_ASSERT(list.contains("A000002") == 1);
+ CPPUNIT_ASSERT(list.contains("A000001") == 1);
+
+ id = institution.removeAccountId("A000001");
+ CPPUNIT_ASSERT(id == "A000001");
+ list = institution.accountList();
+ CPPUNIT_ASSERT(list.count() == 1);
+ CPPUNIT_ASSERT(list.contains("A000002") == 1);
+
+}
+*/
+
diff --git a/kmymoney2/mymoney/mymoneysecuritytest.h b/kmymoney2/mymoney/mymoneysecuritytest.h
new file mode 100644
index 0000000..39d0cd4
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneysecuritytest.h
@@ -0,0 +1,58 @@
+/***************************************************************************
+ mymoneysecuritytest.h
+ -------------------
+ copyright : (C) 2004 by Kevin Tambascio
+ email : ktambascio@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef __MYMONEYSECURITYTEST_H__
+#define __MYMONEYSECURITYTEST_H__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#define private public
+#include "mymoneysecurity.h"
+#undef private
+
+class MyMoneySecurityTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(MyMoneySecurityTest);
+ CPPUNIT_TEST(testEmptyConstructor);
+ CPPUNIT_TEST(testNonemptyConstructor);
+ CPPUNIT_TEST(testCopyConstructor);
+ CPPUNIT_TEST(testSetFunctions);
+ CPPUNIT_TEST(testEquality);
+ CPPUNIT_TEST(testInequality);
+/*
+ CPPUNIT_TEST(testMyMoneyFileConstructor);
+ CPPUNIT_TEST(testAccountIDList);
+*/
+ CPPUNIT_TEST_SUITE_END();
+
+protected:
+ MyMoneySecurity *m;
+
+public:
+ MyMoneySecurityTest();
+
+ void setUp ();
+ void tearDown ();
+ void testEmptyConstructor();
+ void testNonemptyConstructor();
+ void testCopyConstructor();
+ void testSetFunctions();
+ void testEquality ();
+ void testInequality ();
+ // void testMyMoneyFileConstructor();
+ // void testAccountIDList ();
+};
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneysplit.cpp b/kmymoney2/mymoney/mymoneysplit.cpp
new file mode 100644
index 0000000..a19ff43
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneysplit.cpp
@@ -0,0 +1,272 @@
+/***************************************************************************
+ mymoneysplit.cpp - description
+ -------------------
+ begin : Sun Apr 28 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "mymoneysplit.h"
+#include "mymoneytransaction.h"
+
+const char MyMoneySplit::ActionCheck[] = "Check";
+const char MyMoneySplit::ActionDeposit[] = "Deposit";
+const char MyMoneySplit::ActionTransfer[] = "Transfer";
+const char MyMoneySplit::ActionWithdrawal[] = "Withdrawal";
+const char MyMoneySplit::ActionATM[] = "ATM";
+
+const char MyMoneySplit::ActionAmortization[] = "Amortization";
+const char MyMoneySplit::ActionInterest[] = "Interest";
+
+const char MyMoneySplit::ActionBuyShares[] = "Buy";
+const char MyMoneySplit::ActionDividend[] = "Dividend";
+const char MyMoneySplit::ActionReinvestDividend[] = "Reinvest";
+const char MyMoneySplit::ActionYield[] = "Yield";
+const char MyMoneySplit::ActionAddShares[] = "Add";
+const char MyMoneySplit::ActionSplitShares[] = "Split";
+
+MyMoneySplit::MyMoneySplit()
+{
+ m_reconcileFlag = NotReconciled;
+}
+
+MyMoneySplit::MyMoneySplit(const QDomElement& node) :
+ MyMoneyObject(node, false),
+ MyMoneyKeyValueContainer(node.elementsByTagName("KEYVALUEPAIRS").item(0).toElement())
+{
+ if("SPLIT" != node.tagName())
+ throw new MYMONEYEXCEPTION("Node was not SPLIT");
+
+ clearId();
+
+ m_payee = QStringEmpty(node.attribute("payee"));
+ m_reconcileDate = stringToDate(QStringEmpty(node.attribute("reconciledate")));
+ m_action = QStringEmpty(node.attribute("action"));
+ m_reconcileFlag = static_cast<MyMoneySplit::reconcileFlagE>(node.attribute("reconcileflag").toInt());
+ m_memo = QStringEmpty(node.attribute("memo"));
+ m_value = MyMoneyMoney(QStringEmpty(node.attribute("value")));
+ m_shares = MyMoneyMoney(QStringEmpty(node.attribute("shares")));
+ m_price = MyMoneyMoney(QStringEmpty(node.attribute("price")));
+ m_account = QStringEmpty(node.attribute("account"));
+ m_number = QStringEmpty(node.attribute("number"));
+ m_bankID = QStringEmpty(node.attribute("bankid"));
+}
+
+MyMoneySplit::MyMoneySplit(const QString& id, const MyMoneySplit& right) :
+ MyMoneyObject(id)
+{
+ *this = right;
+ setId(id);
+}
+
+MyMoneySplit::~MyMoneySplit()
+{
+}
+
+bool MyMoneySplit::operator == (const MyMoneySplit& right) const
+{
+ return MyMoneyObject::operator==(right) &&
+ MyMoneyKeyValueContainer::operator==(right) &&
+ m_account == right.m_account &&
+ m_payee == right.m_payee &&
+ m_memo == right.m_memo &&
+ m_action == right.m_action &&
+ m_reconcileDate == right.m_reconcileDate &&
+ m_reconcileFlag == right.m_reconcileFlag &&
+ ((m_number.length() == 0 && right.m_number.length() == 0) || m_number == right.m_number) &&
+ m_shares == right.m_shares &&
+ m_value == right.m_value &&
+ m_price == right.m_price &&
+ m_transactionId == right.m_transactionId;
+}
+
+void MyMoneySplit::setAccountId(const QString& account)
+{
+ m_account = account;
+}
+
+void MyMoneySplit::setMemo(const QString& memo)
+{
+ m_memo = memo;
+}
+
+void MyMoneySplit::setReconcileDate(const QDate& date)
+{
+ m_reconcileDate = date;
+}
+
+void MyMoneySplit::setReconcileFlag(const reconcileFlagE flag)
+{
+ m_reconcileFlag = flag;
+}
+
+void MyMoneySplit::setShares(const MyMoneyMoney& shares)
+{
+ m_shares = shares;
+}
+
+void MyMoneySplit::setValue(const MyMoneyMoney& value)
+{
+ m_value = value;
+}
+
+void MyMoneySplit::setValue(const MyMoneyMoney& value, const QString& transactionCurrencyId, const QString& splitCurrencyId)
+{
+ if(transactionCurrencyId == splitCurrencyId)
+ setValue(value);
+ else
+ setShares(value);
+}
+
+void MyMoneySplit::setPayeeId(const QString& payee)
+{
+ m_payee = payee;
+}
+
+void MyMoneySplit::setAction(investTransactionTypeE type)
+{
+ switch(type) {
+ case BuyShares:
+ case SellShares:
+ setAction(ActionBuyShares);
+ break;
+ case Dividend:
+ setAction(ActionDividend);
+ break;
+ case Yield:
+ setAction(ActionYield);
+ break;
+ case ReinvestDividend:
+ setAction(ActionReinvestDividend);
+ break;
+ case AddShares:
+ case RemoveShares:
+ setAction(ActionAddShares);
+ break;
+ case MyMoneySplit::SplitShares:
+ setAction(ActionSplitShares);
+ break;
+ case MyMoneySplit::UnknownTransactionType:
+ break;
+ }
+}
+
+void MyMoneySplit::setAction(const QString& action)
+{
+ m_action = action;
+}
+
+void MyMoneySplit::setNumber(const QString& number)
+{
+ m_number = number;
+}
+
+const MyMoneyMoney MyMoneySplit::value(const QString& transactionCurrencyId, const QString& splitCurrencyId) const
+{
+ return (transactionCurrencyId == splitCurrencyId) ? m_value : m_shares;
+}
+
+void MyMoneySplit::setPrice(const MyMoneyMoney& price)
+{
+ m_price = price;
+}
+
+MyMoneyMoney MyMoneySplit::price(void) const
+{
+ if(!m_price.isZero())
+ return m_price;
+ if(!m_value.isZero() && !m_shares.isZero())
+ return m_value / m_shares;
+ return MyMoneyMoney(1,1);
+}
+
+void MyMoneySplit::writeXML(QDomDocument& document, QDomElement& parent) const
+{
+ QDomElement el = document.createElement("SPLIT");
+
+ writeBaseXML(document, el);
+
+ el.setAttribute("payee", m_payee);
+ el.setAttribute("reconciledate", dateToString(m_reconcileDate));
+ el.setAttribute("action", m_action);
+ el.setAttribute("reconcileflag", m_reconcileFlag);
+ el.setAttribute("value", m_value.toString());
+ el.setAttribute("shares", m_shares.toString());
+ if(!m_price.isZero())
+ el.setAttribute("price", m_price.toString());
+ el.setAttribute("memo", m_memo);
+ // No need to write the split id as it will be re-assigned when the file is read
+ // el.setAttribute("id", split.id());
+ el.setAttribute("account", m_account);
+ el.setAttribute("number", m_number);
+ el.setAttribute("bankid", m_bankID);
+
+ MyMoneyKeyValueContainer::writeXML(document, el);
+
+ parent.appendChild(el);
+}
+
+bool MyMoneySplit::hasReferenceTo(const QString& id) const
+{
+ bool rc = false;
+ if(isMatched()) {
+ rc = matchedTransaction().hasReferenceTo(id);
+ }
+ return rc || (id == m_account) || (id == m_payee);
+}
+
+bool MyMoneySplit::isMatched(void) const
+{
+ return !(value("kmm-matched-tx").isEmpty());
+}
+
+void MyMoneySplit::addMatch(const MyMoneyTransaction& _t)
+{
+ if(_t.isImported() && !isMatched()) {
+ MyMoneyTransaction t(_t);
+ t.clearId();
+ QDomDocument doc("MATCH");
+ QDomElement el = doc.createElement("CONTAINER");
+ doc.appendChild(el);
+ t.writeXML(doc, el);
+ QString xml = doc.toString();
+ xml.replace("<", "&lt;");
+ setValue("kmm-matched-tx", xml);
+ }
+}
+
+void MyMoneySplit::removeMatch(void)
+{
+ deletePair("kmm-matched-tx");
+}
+
+MyMoneyTransaction MyMoneySplit::matchedTransaction(void) const
+{
+ QString xml = value("kmm-matched-tx");
+ if(!xml.isEmpty()) {
+ xml.replace("&lt;", "<");
+ QDomDocument doc;
+ QDomElement node;
+ doc.setContent(xml);
+ node = doc.documentElement().firstChild().toElement();
+ MyMoneyTransaction t(node, false);
+ return t;
+ }
+ return MyMoneyTransaction();
+}
+
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/mymoney/mymoneysplit.h b/kmymoney2/mymoney/mymoneysplit.h
new file mode 100644
index 0000000..3408a6a
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneysplit.h
@@ -0,0 +1,307 @@
+/***************************************************************************
+ mymoneysplit.h - description
+ -------------------
+ begin : Sun Apr 28 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYSPLIT_H
+#define MYMONEYSPLIT_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstring.h>
+#include <qdatetime.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoneyexception.h"
+#include "mymoneyutils.h"
+#include "mymoneymoney.h"
+#include <kmymoney/export.h>
+#include <kmymoney/mymoneyobject.h>
+#include <kmymoney/mymoneykeyvaluecontainer.h>
+class MyMoneyTransaction;
+
+/**
+ * @author Thomas Baumgart
+ */
+
+/**
+ * This class represents a split of a transaction.
+ */
+class KMYMONEY_EXPORT MyMoneySplit : public MyMoneyObject, public MyMoneyKeyValueContainer
+{
+public:
+ /**
+ * This enum defines the possible reconciliation states a split
+ * can be in. Possible values are as follows:
+ *
+ * @li NotReconciled
+ * @li Cleared
+ * @li Reconciled
+ * @li Frozen
+ *
+ * Whenever a new split is created, it has the status NotReconciled. It
+ * can be set to cleared when the transaction has been performed. Once the
+ * account is reconciled, cleared splits will be set to Reconciled. The
+ * state Frozen will be used, when the concept of books is introduced into
+ * the engine and a split must not be changed anymore.
+ */
+ enum reconcileFlagE {
+ Unknown = -1,
+ NotReconciled = 0,
+ Cleared,
+ Reconciled,
+ Frozen,
+ // insert new values above
+ MaxReconcileState
+ };
+
+ typedef enum {
+ UnknownTransactionType = -1,
+ BuyShares = 0,
+ SellShares,
+ Dividend,
+ ReinvestDividend,
+ Yield,
+ AddShares,
+ RemoveShares,
+ SplitShares
+ } investTransactionTypeE;
+
+ MyMoneySplit();
+ MyMoneySplit(const QDomElement& node);
+ MyMoneySplit(const QString& id, const MyMoneySplit& right);
+ ~MyMoneySplit();
+
+ bool operator == (const MyMoneySplit&) const;
+
+ void writeXML(QDomDocument& document, QDomElement& parent) const;
+
+ /**
+ * This method checks if a reference to the given object exists. It returns,
+ * a @p true if the object is referencing the one requested by the
+ * parameter @p id. If it does not, this method returns @p false.
+ *
+ * @param id id of the object to be checked for references
+ * @retval true This object references object with id @p id.
+ * @retval false This object does not reference the object with id @p id.
+ */
+ virtual bool hasReferenceTo(const QString& id) const;
+
+ const MyMoneyMoney& shares(void) const { return m_shares; }
+ const MyMoneyMoney& value(void) const { return m_value; }
+
+ /**
+ * This method returns the price. If the member m_price is not zero
+ * its value is returned. Otherwise, if m_shares is not zero the quotient
+ * of m_value / m_shares is returned. If m_values equals to zero, 1
+ * will be returned.
+ */
+ MyMoneyMoney price(void) const;
+ /** This method just returns what is in m_price, so when we write to the
+ * database, we don't just generate prices
+ */
+ MyMoneyMoney actualPrice(void) const { return m_price; }
+
+ const MyMoneyMoney value(const QString& transactionCurrencyId, const QString& splitCurrencyId) const;
+
+ /**
+ * Required to have (direct) access to the MyMoneyKeyValueContainer::value() method.
+ */
+ const QString& value(const QString& key) const { return MyMoneyKeyValueContainer::value(key); }
+
+ /**
+ * Required to have (direct) access to the MyMoneyKeyValueContainer::setValue() method.
+ */
+ void setValue(const QString& key, const QString& value) { MyMoneyKeyValueContainer::setValue(key, value); }
+
+ const QString& accountId(void) const { return m_account; }
+ const QString& memo(void) const { return m_memo; }
+ reconcileFlagE reconcileFlag(void) const { return m_reconcileFlag; }
+ const QDate& reconcileDate(void) const { return m_reconcileDate; }
+ const QString& payeeId(void) const { return m_payee; }
+ const QString& action(void) const { return m_action; }
+ const QString& number(void) const { return m_number; }
+ bool isAmortizationSplit(void) const { return m_action == ActionAmortization; }
+ bool isInterestSplit(void) const { return m_action == ActionInterest; }
+ bool isAutoCalc(void) const { return (m_shares == MyMoneyMoney::autoCalc) || (m_value == MyMoneyMoney::autoCalc); }
+ const QString& bankID(void) const { return m_bankID; }
+ const QString& transactionId(void) const { return m_transactionId; }
+
+ void setShares(const MyMoneyMoney& shares);
+ void setValue(const MyMoneyMoney& value);
+ void setPrice(const MyMoneyMoney& price);
+
+ /**
+ * This method is used to set either the shares or the value depending on
+ * the currencies assigned to the split/account and the transaction.
+ *
+ * If @p transactionCurrencyId equals @p splitCurrencyId this method
+ * calls setValue(MyMoneyMoney) otherwise setShares(MyMoneyMoney).
+ *
+ * @param value the value to be assiged
+ * @param transactionCurrencyId the id of the currency assigned to the transaction
+ * @param splitCurrencyId the id of the currency assigned to the split (i.e. the
+ * the id of the currency assigned to the account that is
+ * referenced by the split)
+ */
+ void setValue(const MyMoneyMoney& value, const QString& transactionCurrencyId, const QString& splitCurrencyId);
+
+ void setAccountId(const QString& account);
+ void setMemo(const QString& memo);
+ void setReconcileFlag(const reconcileFlagE flag);
+ void setReconcileDate(const QDate& date);
+ void setPayeeId(const QString& payee);
+ void setAction(const QString& action);
+ void setAction(investTransactionTypeE type);
+ void setNumber(const QString& number);
+ void setBankID(const QString& bankID) { m_bankID = bankID; };
+ void setTransactionId(const QString& id) { m_transactionId = id; }
+
+ /**
+ * returns @a true if this its a transaction matched against an imported
+ * transaction. The imported and matched transaction can be extracted
+ * using matchedTransaction() and can be removed using removeMatch().
+ */
+ bool isMatched(void) const;
+
+ /**
+ * add an imported transaction @p t as matching transaction. Any previously
+ * added transaction will be overridden. @p t.isImported() must return true,
+ * otherwise the transaction is not stored.
+ */
+ void addMatch(const MyMoneyTransaction& t);
+
+ /**
+ * remove the data of the imported transaction added with addMatch().
+ */
+ void removeMatch(void);
+
+ /**
+ * Return the matching imported transaction. If no such transaction
+ * is available (isMatched() returns false) an empty transaction is returned.
+ */
+ MyMoneyTransaction matchedTransaction(void) const;
+
+ static const char ActionCheck[];
+ static const char ActionDeposit[];
+ static const char ActionTransfer[];
+ static const char ActionWithdrawal[];
+ static const char ActionATM[];
+
+ static const char ActionAmortization[];
+ static const char ActionInterest[];
+
+ static const char ActionBuyShares[]; // negative amount is sellShares
+ static const char ActionDividend[];
+ static const char ActionReinvestDividend[];
+ static const char ActionYield[];
+ static const char ActionAddShares[]; // negative amount is removeShares
+ static const char ActionSplitShares[];
+
+private:
+ /**
+ * This member contains the ID of the transaction
+ */
+ QString m_id;
+
+ /**
+ * This member contains the ID of the payee
+ */
+ QString m_payee;
+
+ /**
+ * This member contains the ID of the account
+ */
+ QString m_account;
+
+ /**
+ */
+ MyMoneyMoney m_shares;
+
+ /**
+ */
+ MyMoneyMoney m_value;
+
+
+ /**
+ * If the quotient of m_shares divided by m_values is not the correct price
+ * because of truncation, the price can be stored in this member. For display
+ * purpose and transaction edit this value can be used by the application.
+ */
+ MyMoneyMoney m_price;
+
+ QString m_memo;
+
+ /**
+ * This member contains information about the reconciliation
+ * state of the split. Possible values are
+ *
+ * @li NotReconciled
+ * @li Cleared
+ * @li Reconciled
+ * @li Frozen
+ *
+ */
+ reconcileFlagE m_reconcileFlag;
+
+ /**
+ * In case the reconciliation flag is set to Reconciled or Frozen
+ * this member contains the date of the reconciliation.
+ */
+ QDate m_reconcileDate;
+
+ /**
+ * The m_action member is an arbitrary string, but is intended to
+ * be conveniently limited to a menu of selections such as
+ * "Buy", "Sell", "Interest", etc.
+ */
+ QString m_action;
+
+ /**
+ * The m_number member is used to store a reference number to
+ * the split supplied by the user (e.g. check number, etc.).
+ */
+ QString m_number;
+
+ /**
+ * This member keeps the bank's unique ID for the split, so we can
+ * avoid duplicates. This is only used for electronic statement downloads.
+ *
+ * This should only be set on the split which refers to the account
+ * that was downloaded.
+ */
+ QString m_bankID;
+
+ /**
+ * This member keeps a backward id to the transaction that this
+ * split can be found in. It is the purpose of the MyMoneyTransaction
+ * object to maintain this member variable.
+ */
+ QString m_transactionId;
+};
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneysplittest.cpp b/kmymoney2/mymoney/mymoneysplittest.cpp
new file mode 100644
index 0000000..a592e1a
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneysplittest.cpp
@@ -0,0 +1,306 @@
+/***************************************************************************
+ mymoneysplittest.cpp
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "mymoneysplittest.h"
+#include <kmymoney/mymoneyexception.h>
+
+MyMoneySplitTest::MyMoneySplitTest()
+{
+}
+
+
+void MyMoneySplitTest::setUp () {
+ m = new MyMoneySplit();
+}
+
+void MyMoneySplitTest::tearDown () {
+ delete m;
+}
+
+void MyMoneySplitTest::testEmptyConstructor() {
+ CPPUNIT_ASSERT(m->accountId().isEmpty());
+ CPPUNIT_ASSERT(m->id().isEmpty());
+ CPPUNIT_ASSERT(m->memo().isEmpty());
+ CPPUNIT_ASSERT(m->action().isEmpty());
+ CPPUNIT_ASSERT(m->shares().isZero());
+ CPPUNIT_ASSERT(m->value().isZero());
+ CPPUNIT_ASSERT(m->reconcileFlag() == MyMoneySplit::NotReconciled);
+ CPPUNIT_ASSERT(m->reconcileDate() == QDate());
+ CPPUNIT_ASSERT(m->transactionId().isEmpty());
+}
+
+void MyMoneySplitTest::testSetFunctions() {
+ m->setAccountId("Account");
+ m->setMemo("Memo");
+ m->setReconcileDate(QDate(1,2,3));
+ m->setReconcileFlag(MyMoneySplit::Cleared);
+ m->setShares(1234);
+ m->setValue(3456);
+ m->setId("MyID");
+ m->setPayeeId("Payee");
+ m->setAction("Action");
+ m->setTransactionId("TestTransaction");
+ m->setValue("Key", "Value");
+
+ CPPUNIT_ASSERT(m->accountId() == "Account");
+ CPPUNIT_ASSERT(m->memo() == "Memo");
+ CPPUNIT_ASSERT(m->reconcileDate() == QDate(1,2,3));
+ CPPUNIT_ASSERT(m->reconcileFlag() == MyMoneySplit::Cleared);
+ CPPUNIT_ASSERT(m->shares() == MyMoneyMoney(1234));
+ CPPUNIT_ASSERT(m->value() == MyMoneyMoney(3456));
+ CPPUNIT_ASSERT(m->id() == "MyID");
+ CPPUNIT_ASSERT(m->payeeId() == "Payee");
+ CPPUNIT_ASSERT(m->action() == "Action");
+ CPPUNIT_ASSERT(m->transactionId() == "TestTransaction");
+ CPPUNIT_ASSERT(m->value("Key") == "Value");
+}
+
+
+void MyMoneySplitTest::testCopyConstructor() {
+ testSetFunctions();
+
+ MyMoneySplit n(*m);
+
+ CPPUNIT_ASSERT(n.accountId() == "Account");
+ CPPUNIT_ASSERT(n.memo() == "Memo");
+ CPPUNIT_ASSERT(n.reconcileDate() == QDate(1,2,3));
+ CPPUNIT_ASSERT(n.reconcileFlag() == MyMoneySplit::Cleared);
+ CPPUNIT_ASSERT(n.shares() == MyMoneyMoney(1234));
+ CPPUNIT_ASSERT(n.value() == MyMoneyMoney(3456));
+ CPPUNIT_ASSERT(n.id() == "MyID");
+ CPPUNIT_ASSERT(n.payeeId() == "Payee");
+ CPPUNIT_ASSERT(n.action() == "Action");
+ CPPUNIT_ASSERT(n.transactionId() == "TestTransaction");
+ CPPUNIT_ASSERT(n.value("Key") == "Value");
+}
+
+void MyMoneySplitTest::testAssignmentConstructor() {
+ testSetFunctions();
+
+ MyMoneySplit n;
+
+ n = *m;
+
+ CPPUNIT_ASSERT(n.accountId() == "Account");
+ CPPUNIT_ASSERT(n.memo() == "Memo");
+ CPPUNIT_ASSERT(n.reconcileDate() == QDate(1,2,3));
+ CPPUNIT_ASSERT(n.reconcileFlag() == MyMoneySplit::Cleared);
+ CPPUNIT_ASSERT(n.shares() == MyMoneyMoney(1234));
+ CPPUNIT_ASSERT(n.value() == MyMoneyMoney(3456));
+ CPPUNIT_ASSERT(n.id() == "MyID");
+ CPPUNIT_ASSERT(n.payeeId() == "Payee");
+ CPPUNIT_ASSERT(n.action() == "Action");
+ CPPUNIT_ASSERT(n.transactionId() == "TestTransaction");
+ CPPUNIT_ASSERT(n.value("Key") == "Value");
+}
+
+void MyMoneySplitTest::testEquality() {
+ testSetFunctions();
+
+ MyMoneySplit n(*m);
+
+ CPPUNIT_ASSERT(n == *m);
+}
+
+void MyMoneySplitTest::testInequality() {
+ testSetFunctions();
+
+ MyMoneySplit n(*m);
+
+ n.setShares(3456);
+ CPPUNIT_ASSERT(!(n == *m));
+
+ n = *m;
+ n.setId("Not My ID");
+ CPPUNIT_ASSERT(!(n == *m));
+
+ n = *m;
+ n.setPayeeId("No payee");
+ CPPUNIT_ASSERT(!(n == *m));
+
+ n = *m;
+ n.setAction("No action");
+ CPPUNIT_ASSERT(!(n == *m));
+
+ n = *m;
+ n.setNumber("No number");
+ CPPUNIT_ASSERT(!(n == *m));
+
+ n = *m;
+ n.setAccountId("No account");
+ CPPUNIT_ASSERT(!(n == *m));
+
+ n = *m;
+ n.setMemo("No memo");
+ CPPUNIT_ASSERT(!(n == *m));
+
+ n = *m;
+ n.setReconcileDate(QDate(3,4,5));
+ CPPUNIT_ASSERT(!(n == *m));
+
+ n = *m;
+ n.setReconcileFlag(MyMoneySplit::Frozen);
+ CPPUNIT_ASSERT(!(n == *m));
+
+ n = *m;
+ n.setShares(4567);
+ CPPUNIT_ASSERT(!(n == *m));
+
+ n = *m;
+ n.setValue(9876);
+ CPPUNIT_ASSERT(!(n == *m));
+
+ n = *m;
+ n.setTransactionId("NoTransaction");
+ CPPUNIT_ASSERT(!(n == *m));
+
+ n = *m;
+ n.setValue("Key", "NoValue");
+ CPPUNIT_ASSERT(!(n == *m));
+}
+
+
+void MyMoneySplitTest::testAmortization() {
+ CPPUNIT_ASSERT(m->isAmortizationSplit() == false);
+ testSetFunctions();
+ CPPUNIT_ASSERT(m->isAmortizationSplit() == false);
+ m->setAction(MyMoneySplit::ActionAmortization);
+ CPPUNIT_ASSERT(m->isAmortizationSplit() == true);
+}
+
+void MyMoneySplitTest::testValue() {
+ m->setValue(1);
+ m->setShares(2);
+ CPPUNIT_ASSERT(m->value("EUR", "EUR") == MyMoneyMoney(1));
+ CPPUNIT_ASSERT(m->value("EUR", "USD") == MyMoneyMoney(2));
+}
+
+void MyMoneySplitTest::testSetValue() {
+ CPPUNIT_ASSERT(m->value().isZero());
+ CPPUNIT_ASSERT(m->shares().isZero());
+ m->setValue(1, "EUR", "EUR");
+ CPPUNIT_ASSERT(m->value() == MyMoneyMoney(1));
+ CPPUNIT_ASSERT(m->shares().isZero());
+ m->setValue(3, "EUR", "USD");
+ CPPUNIT_ASSERT(m->value() == MyMoneyMoney(1));
+ CPPUNIT_ASSERT(m->shares() == MyMoneyMoney(3));
+}
+
+void MyMoneySplitTest::testSetAction() {
+ CPPUNIT_ASSERT(m->action() == QString());
+ m->setAction(MyMoneySplit::BuyShares);
+ CPPUNIT_ASSERT(m->action() == MyMoneySplit::ActionBuyShares);
+ m->setAction(MyMoneySplit::SellShares);
+ CPPUNIT_ASSERT(m->action() == MyMoneySplit::ActionBuyShares);
+ m->setAction(MyMoneySplit::Dividend);
+ CPPUNIT_ASSERT(m->action() == MyMoneySplit::ActionDividend);
+ m->setAction(MyMoneySplit::Yield);
+ CPPUNIT_ASSERT(m->action() == MyMoneySplit::ActionYield);
+ m->setAction(MyMoneySplit::ReinvestDividend);
+ CPPUNIT_ASSERT(m->action() == MyMoneySplit::ActionReinvestDividend);
+ m->setAction(MyMoneySplit::AddShares);
+ CPPUNIT_ASSERT(m->action() == MyMoneySplit::ActionAddShares);
+ m->setAction(MyMoneySplit::RemoveShares);
+ CPPUNIT_ASSERT(m->action() == MyMoneySplit::ActionAddShares);
+ m->setAction(MyMoneySplit::SplitShares);
+ CPPUNIT_ASSERT(m->action() == MyMoneySplit::ActionSplitShares);
+}
+
+void MyMoneySplitTest::testIsAutoCalc() {
+ CPPUNIT_ASSERT(m->isAutoCalc() == false);
+ m->setValue(MyMoneyMoney::autoCalc);
+ CPPUNIT_ASSERT(m->isAutoCalc() == true);
+ m->setShares(MyMoneyMoney::autoCalc);
+ CPPUNIT_ASSERT(m->isAutoCalc() == true);
+ m->setValue(0);
+ CPPUNIT_ASSERT(m->isAutoCalc() == true);
+ m->setShares(1);
+ CPPUNIT_ASSERT(m->isAutoCalc() == false);
+}
+
+void MyMoneySplitTest::testWriteXML() {
+ MyMoneySplit s;
+
+ s.setPayeeId("P000001");
+ s.setShares(MyMoneyMoney(96379, 100));
+ s.setValue(MyMoneyMoney(96379, 1000));
+ s.setAccountId("A000076");
+ s.setNumber("124");
+ s.setBankID("SPID");
+ s.setAction(MyMoneySplit::ActionDeposit);
+ s.setReconcileFlag(MyMoneySplit::Reconciled);
+
+ QDomDocument doc("TEST");
+ QDomElement el = doc.createElement("SPLIT-CONTAINER");
+ doc.appendChild(el);
+ s.writeXML(doc, el);
+
+ QString ref = QString(
+ "<!DOCTYPE TEST>\n"
+ "<SPLIT-CONTAINER>\n"
+ " <SPLIT payee=\"P000001\" reconciledate=\"\" shares=\"96379/100\" action=\"Deposit\" bankid=\"SPID\" number=\"124\" reconcileflag=\"2\" memo=\"\" value=\"96379/1000\" id=\"\" account=\"A000076\" />\n"
+ "</SPLIT-CONTAINER>\n");
+
+ CPPUNIT_ASSERT(doc.toString() == ref);
+}
+
+void MyMoneySplitTest::testReadXML() {
+ MyMoneySplit s;
+ QString ref_ok = QString(
+ "<!DOCTYPE TEST>\n"
+ "<SPLIT-CONTAINER>\n"
+ " <SPLIT payee=\"P000001\" reconciledate=\"\" shares=\"96379/100\" action=\"Deposit\" bankid=\"SPID\" number=\"124\" reconcileflag=\"2\" memo=\"MyMemo\" value=\"96379/1000\" account=\"A000076\" />\n"
+ "</SPLIT-CONTAINER>\n");
+
+ QString ref_false = QString(
+ "<!DOCTYPE TEST>\n"
+ "<SPLIT-CONTAINER>\n"
+ " <SPLITS payee=\"P000001\" reconciledate=\"\" shares=\"96379/100\" action=\"Deposit\" bankid=\"SPID\" number=\"124\" reconcileflag=\"2\" memo=\"\" value=\"96379/1000\" account=\"A000076\" />\n"
+ "</SPLIT-CONTAINER>\n");
+
+ QDomDocument doc;
+ QDomElement node;
+ doc.setContent(ref_false);
+ node = doc.documentElement().firstChild().toElement();
+
+ try {
+ s = MyMoneySplit(node);
+ CPPUNIT_FAIL("Missing expected exception");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+
+ doc.setContent(ref_ok);
+ node = doc.documentElement().firstChild().toElement();
+
+ try {
+ s = MyMoneySplit(node);
+ CPPUNIT_ASSERT(s.id().isEmpty());
+ CPPUNIT_ASSERT(s.payeeId() == "P000001");
+ CPPUNIT_ASSERT(s.reconcileDate() == QDate());
+ CPPUNIT_ASSERT(s.shares() == MyMoneyMoney(96379, 100));
+ CPPUNIT_ASSERT(s.value() == MyMoneyMoney(96379, 1000));
+ CPPUNIT_ASSERT(s.number() == "124");
+ CPPUNIT_ASSERT(s.bankID() == "SPID");
+ CPPUNIT_ASSERT(s.reconcileFlag() == MyMoneySplit::Reconciled);
+ CPPUNIT_ASSERT(s.action() == MyMoneySplit::ActionDeposit);
+ CPPUNIT_ASSERT(s.accountId() == "A000076");
+ CPPUNIT_ASSERT(s.memo() == "MyMemo");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+
+}
diff --git a/kmymoney2/mymoney/mymoneysplittest.h b/kmymoney2/mymoney/mymoneysplittest.h
new file mode 100644
index 0000000..d54e11e
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneysplittest.h
@@ -0,0 +1,67 @@
+/***************************************************************************
+ mymoneysplittest.h
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef __MYMONEYSPLITTEST_H__
+#define __MYMONEYSPLITTEST_H__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#define private public
+#define protected public
+#include "mymoneysplit.h"
+#undef private
+
+class MyMoneySplitTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(MyMoneySplitTest);
+ CPPUNIT_TEST(testEmptyConstructor);
+ CPPUNIT_TEST(testSetFunctions);
+ CPPUNIT_TEST(testCopyConstructor);
+ CPPUNIT_TEST(testAssignmentConstructor);
+ CPPUNIT_TEST(testEquality);
+ CPPUNIT_TEST(testInequality);
+ CPPUNIT_TEST(testAmortization);
+ CPPUNIT_TEST(testValue);
+ CPPUNIT_TEST(testSetValue);
+ CPPUNIT_TEST(testSetAction);
+ CPPUNIT_TEST(testIsAutoCalc);
+ CPPUNIT_TEST(testWriteXML);
+ CPPUNIT_TEST(testReadXML);
+ CPPUNIT_TEST_SUITE_END();
+
+protected:
+ MyMoneySplit *m;
+
+public:
+ MyMoneySplitTest ();
+
+ void setUp ();
+ void tearDown ();
+ void testEmptyConstructor();
+ void testSetFunctions();
+ void testCopyConstructor();
+ void testAssignmentConstructor();
+ void testEquality();
+ void testInequality();
+ void testAmortization();
+ void testValue();
+ void testSetValue();
+ void testSetAction();
+ void testIsAutoCalc();
+ void testWriteXML();
+ void testReadXML();
+};
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneystatement.cpp b/kmymoney2/mymoney/mymoneystatement.cpp
new file mode 100644
index 0000000..0373863
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneystatement.cpp
@@ -0,0 +1,299 @@
+/***************************************************************************
+ mymoneystatement.cpp
+ -------------------
+ begin : Mon Aug 30 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ Ace Jones <acejones@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qdom.h>
+#include <qstringlist.h>
+#include <qfile.h>
+#include <qtextstream.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../../kdecompat.h"
+#include "mymoneystatement.h"
+
+const QStringList kAccountTypeTxt = QStringList::split(",","none,checkings,savings,investment,creditcard,invalid");
+const QStringList kActionText = QStringList::split(",","none,buy,sell,reinvestdividend,cashdividend,add,remove,stocksplit,fees,interest,invalid");
+
+void MyMoneyStatement::write(QDomElement& _root,QDomDocument* _doc) const
+{
+ QDomElement e = _doc->createElement("STATEMENT");
+ _root.appendChild(e);
+
+ e.setAttribute("version","1.1");
+ e.setAttribute("accountname", m_strAccountName);
+ e.setAttribute("accountnumber", m_strAccountNumber);
+ e.setAttribute("routingnumber", m_strRoutingNumber);
+ e.setAttribute("currency", m_strCurrency);
+ e.setAttribute("begindate", m_dateBegin.toString(Qt::ISODate));
+ e.setAttribute("enddate", m_dateEnd.toString(Qt::ISODate));
+ e.setAttribute("closingbalance", m_closingBalance.toString());
+ e.setAttribute("type", kAccountTypeTxt[m_eType]);
+ e.setAttribute("accountid", m_accountId);
+ e.setAttribute("skipCategoryMatching", m_skipCategoryMatching);
+
+ // iterate over transactions, and add each one
+ QValueList<Transaction>::const_iterator it_t = m_listTransactions.begin();
+ while ( it_t != m_listTransactions.end() )
+ {
+ QDomElement p = _doc->createElement("TRANSACTION");
+ p.setAttribute("dateposted", (*it_t).m_datePosted.toString(Qt::ISODate));
+ p.setAttribute("payee", (*it_t).m_strPayee);
+ p.setAttribute("memo", (*it_t).m_strMemo);
+ p.setAttribute("number", (*it_t).m_strNumber);
+ p.setAttribute("amount", (*it_t).m_amount.toString());
+ p.setAttribute("bankid", (*it_t).m_strBankID);
+ p.setAttribute("reconcile", (*it_t).m_reconcile);
+ p.setAttribute("action", kActionText[(*it_t).m_eAction]);
+
+ if (m_eType == etInvestment)
+ {
+ p.setAttribute("shares", (*it_t).m_shares.toString());
+ p.setAttribute("security", (*it_t).m_strSecurity);
+ p.setAttribute("brokerageaccount", (*it_t).m_strBrokerageAccount);
+ }
+
+ // add all the splits we know of (might be empty)
+ QValueList<Split>::const_iterator it_s;
+ for(it_s = (*it_t).m_listSplits.begin(); it_s != (*it_t).m_listSplits.end(); ++it_s) {
+ QDomElement split = _doc->createElement("SPLIT");
+ split.setAttribute("accountid", (*it_s).m_accountId);
+ split.setAttribute("amount", (*it_s).m_amount.toString());
+ split.setAttribute("reconcile", (*it_s).m_reconcile);
+ split.setAttribute("category", (*it_s).m_strCategoryName);
+ split.setAttribute("memo", (*it_s).m_strMemo);
+ split.setAttribute("reconcile", (*it_s).m_reconcile);
+ p.appendChild(split);
+ }
+
+ e.appendChild(p);
+
+ ++it_t;
+ }
+
+ // iterate over prices, and add each one
+ QValueList<Price>::const_iterator it_p = m_listPrices.begin();
+ while ( it_p != m_listPrices.end() )
+ {
+ QDomElement p = _doc->createElement("PRICE");
+ p.setAttribute("dateposted", (*it_p).m_date.toString(Qt::ISODate));
+ p.setAttribute("security", (*it_p).m_strSecurity);
+ p.setAttribute("amount", (*it_p).m_amount.toString());
+
+ e.appendChild(p);
+
+ ++it_p;
+ }
+
+ // iterate over securities, and add each one
+ QValueList<Security>::const_iterator it_s = m_listSecurities.begin();
+ while ( it_s != m_listSecurities.end() )
+ {
+ QDomElement p = _doc->createElement("SECURITY");
+ p.setAttribute("name", (*it_s).m_strName);
+ p.setAttribute("symbol", (*it_s).m_strSymbol);
+ p.setAttribute("id", (*it_s).m_strId);
+
+ e.appendChild(p);
+
+ ++it_s;
+ }
+
+}
+
+bool MyMoneyStatement::read(const QDomElement& _e)
+{
+ bool result = false;
+
+ if ( _e.tagName() == "STATEMENT" )
+ {
+ result = true;
+
+ m_strAccountName = _e.attribute("accountname");
+ m_strAccountNumber = _e.attribute("accountnumber");
+ m_strRoutingNumber = _e.attribute("routingnumber");
+ m_strCurrency = _e.attribute("currency");
+ m_dateBegin = QDate::fromString(_e.attribute("begindate"),Qt::ISODate);
+ m_dateEnd = QDate::fromString(_e.attribute("enddate"),Qt::ISODate);
+ m_closingBalance = MyMoneyMoney(_e.attribute("closingbalance"));
+ m_accountId = _e.attribute("accountid");
+ m_skipCategoryMatching = _e.attribute("skipCategoryMatching");
+
+ int i = kAccountTypeTxt.findIndex(_e.attribute("type",kAccountTypeTxt[1]));
+ if ( i != -1 )
+ m_eType = static_cast<EType>(i);
+
+ QDomNode child = _e.firstChild();
+ while(!child.isNull() && child.isElement())
+ {
+ QDomElement c = child.toElement();
+
+ if ( c.tagName() == "TRANSACTION" )
+ {
+ MyMoneyStatement::Transaction t;
+
+ t.m_datePosted = QDate::fromString(c.attribute("dateposted"),Qt::ISODate);
+ t.m_amount = MyMoneyMoney(c.attribute("amount"));
+ t.m_strMemo = c.attribute("memo");
+ t.m_strNumber = c.attribute("number");
+ t.m_strPayee = c.attribute("payee");
+ t.m_strBankID = c.attribute("bankid");
+ t.m_reconcile = static_cast<MyMoneySplit::reconcileFlagE>(c.attribute("reconcile").toInt());
+ int i = kActionText.findIndex(c.attribute("action",kActionText[1]));
+ if ( i != -1 )
+ t.m_eAction = static_cast<Transaction::EAction>(i);
+
+ if (m_eType == etInvestment)
+ {
+ t.m_shares = MyMoneyMoney(c.attribute("shares"));
+ t.m_strSecurity = c.attribute("security");
+ t.m_strBrokerageAccount = c.attribute("brokerageaccount");
+ }
+
+ // process splits (if any)
+ QDomNode child = c.firstChild();
+ while(!child.isNull() && child.isElement()) {
+ QDomElement c = child.toElement();
+ if(c.tagName() == "SPLIT") {
+ MyMoneyStatement::Split s;
+ s.m_accountId = c.attribute("accountid");
+ s.m_amount = MyMoneyMoney(c.attribute("amount"));
+ s.m_reconcile = static_cast<MyMoneySplit::reconcileFlagE>(c.attribute("reconcile").toInt());
+ s.m_strCategoryName = c.attribute("category");
+ s.m_strMemo = c.attribute("memo");
+ t.m_listSplits += s;
+ }
+ child = child.nextSibling();
+ }
+ m_listTransactions += t;
+ }
+ else if ( c.tagName() == "PRICE" )
+ {
+ MyMoneyStatement::Price p;
+
+ p.m_date = QDate::fromString(c.attribute("dateposted"), Qt::ISODate);
+ p.m_strSecurity = c.attribute("security");
+ p.m_amount = MyMoneyMoney(c.attribute("amount"));
+
+ m_listPrices += p;
+ }
+ else if ( c.tagName() == "SECURITY" )
+ {
+ MyMoneyStatement::Security s;
+
+ s.m_strName = c.attribute("name");
+ s.m_strSymbol = c.attribute("symbol");
+ s.m_strId = c.attribute("id");
+
+ m_listSecurities += s;
+ }
+ child = child.nextSibling();
+ }
+ }
+
+ return result;
+}
+
+bool MyMoneyStatement::isStatementFile(const QString& _filename)
+{
+ // filename is considered a statement file if it contains
+ // the tag "<KMYMONEY2-STATEMENT>" in the first 20 lines.
+ bool result = false;
+
+ QFile f( _filename );
+ if ( f.open( IO_ReadOnly ) )
+ {
+ QTextStream ts( &f );
+
+ int lineCount = 20;
+ while ( !ts.atEnd() && !result && lineCount != 0) {
+ if ( ts.readLine().contains("<KMYMONEY-STATEMENT>",false) )
+ result = true;
+ --lineCount;
+ }
+ f.close();
+ }
+
+ return result;
+}
+
+void MyMoneyStatement::writeXMLFile( const MyMoneyStatement& _s, const QString& _filename )
+{
+ static unsigned filenum = 1;
+ QString filename = _filename;
+ if ( filename.isEmpty() ) {
+ filename = QString("statement-%1%2.xml").arg((filenum<10)?"0":"").arg(filenum);
+ filenum++;
+ }
+
+ QDomDocument* doc = new QDomDocument("KMYMONEY-STATEMENT");
+ Q_CHECK_PTR(doc);
+
+ //writeStatementtoXMLDoc(_s,doc);
+ QDomProcessingInstruction instruct = doc->createProcessingInstruction(QString("xml"), QString("version=\"1.0\" encoding=\"utf-8\""));
+ doc->appendChild(instruct);
+ QDomElement eroot = doc->createElement("KMYMONEY-STATEMENT");
+ doc->appendChild(eroot);
+ _s.write(eroot,doc);
+
+ QFile g( filename );
+ if(g.open( IO_WriteOnly )) {
+ QTextStream stream(&g);
+ stream.setEncoding(QTextStream::UnicodeUTF8);
+ stream << doc->toString();
+ g.close();
+ }
+
+ delete doc;
+}
+
+bool MyMoneyStatement::readXMLFile( MyMoneyStatement& _s, const QString& _filename )
+{
+ bool result = false;
+ QFile f( _filename );
+ f.open( IO_ReadOnly );
+ QDomDocument* doc = new QDomDocument;
+ if(doc->setContent(&f, false))
+ {
+ QDomElement rootElement = doc->documentElement();
+ if(!rootElement.isNull())
+ {
+ QDomNode child = rootElement.firstChild();
+ while(!child.isNull() && child.isElement())
+ {
+ result = true;
+ QDomElement childElement = child.toElement();
+ _s.read(childElement);
+
+ child = child.nextSibling();
+ }
+ }
+ }
+ delete doc;
+
+ return result;
+}
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/mymoney/mymoneystatement.h b/kmymoney2/mymoney/mymoneystatement.h
new file mode 100644
index 0000000..0bea510
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneystatement.h
@@ -0,0 +1,145 @@
+/***************************************************************************
+ mymoneystatement.h
+ -------------------
+ begin : Mon Aug 30 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ Ace Jones <acejones@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYSTATEMENT_H
+#define MYMONEYSTATEMENT_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstring.h>
+#include <qvaluelist.h>
+#include <qdatetime.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/export.h>
+#include <kmymoney/mymoneymoney.h>
+#include <kmymoney/mymoneysplit.h>
+
+class QDomElement;
+class QDomDocument;
+
+/**
+Represents the electronic analog of the paper bank statement just like we used to get in the regular mail. This class is designed to be easy to extend and easy to create with minimal dependencies. So the header file should include as few project files as possible (preferrably NONE).
+
+@author ace jones
+*/
+class MyMoneyStatement
+{
+public:
+ MyMoneyStatement() : m_closingBalance(MyMoneyMoney::autoCalc), m_eType(etNone), m_skipCategoryMatching(false) {}
+
+ enum EType { etNone = 0, etCheckings, etSavings, etInvestment, etCreditCard, etEnd };
+
+ class Split {
+ public:
+ Split() : m_reconcile(MyMoneySplit::NotReconciled) {}
+ QString m_strCategoryName;
+ QString m_strMemo;
+ QString m_accountId;
+ MyMoneySplit::reconcileFlagE m_reconcile;
+ MyMoneyMoney m_amount;
+
+ };
+
+ class Transaction {
+ public:
+ Transaction() : m_reconcile(MyMoneySplit::NotReconciled), m_eAction(eaNone) {}
+ QDate m_datePosted;
+ QString m_strPayee;
+ QString m_strMemo;
+ QString m_strNumber;
+ QString m_strBankID;
+ MyMoneyMoney m_amount;
+ MyMoneySplit::reconcileFlagE m_reconcile;
+
+ // the following members are only used for investment accounts (m_eType==etInvestment)
+ // eaNone means the action, shares, and security can be ignored.
+ enum EAction { eaNone = 0, eaBuy, eaSell, eaReinvestDividend, eaCashDividend, eaShrsin, eaShrsout, eaStksplit, eaFees, eaInterest, eaEnd };
+ EAction m_eAction;
+ MyMoneyMoney m_shares;
+ MyMoneyMoney m_fees;
+ MyMoneyMoney m_price;
+ QString m_strInterestCategory;
+ QString m_strBrokerageAccount;
+ QString m_strSymbol;
+ QString m_strSecurity;
+ QValueList<Split> m_listSplits;
+ };
+
+ struct Price
+ {
+ QDate m_date;
+ QString m_strSecurity;
+ MyMoneyMoney m_amount;
+ };
+
+ struct Security
+ {
+ QString m_strName;
+ QString m_strSymbol;
+ QString m_strId;
+ };
+
+ QString m_strAccountName;
+ QString m_strAccountNumber;
+ QString m_strRoutingNumber;
+
+ /**
+ * The statement provider's information for the statement reader how to find the
+ * account. The provider usually leaves some value with a key unique to the provider in the KVP of the
+ * MyMoneyAccount object when setting up the connection or at a later point in time.
+ * Using the KMyMoneyPlugin::KMMStatementInterface::account() method it can retrieve the
+ * MyMoneyAccount object for this key. The account id of that account should be returned
+ * here. If no id is available, leave it empty.
+ */
+ QString m_accountId;
+
+ QString m_strCurrency;
+ QDate m_dateBegin;
+ QDate m_dateEnd;
+ MyMoneyMoney m_closingBalance;
+ EType m_eType;
+
+ QValueList<Transaction> m_listTransactions;
+ QValueList<Price> m_listPrices;
+ QValueList<Security> m_listSecurities;
+
+ bool m_skipCategoryMatching;
+
+ void write(QDomElement&,QDomDocument*) const;
+ bool read(const QDomElement&);
+
+ KMYMONEY_EXPORT static bool isStatementFile(const QString&);
+ KMYMONEY_EXPORT static bool readXMLFile( MyMoneyStatement&, const QString& );
+ KMYMONEY_EXPORT static void writeXMLFile( const MyMoneyStatement&, const QString& );
+};
+
+#endif
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/mymoney/mymoneysubject.cpp b/kmymoney2/mymoney/mymoneysubject.cpp
new file mode 100644
index 0000000..c54d738
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneysubject.cpp
@@ -0,0 +1,58 @@
+/***************************************************************************
+ mymoneysubject.cpp - description
+ -------------------
+ begin : Sat May 18 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "mymoneysubject.h"
+#include "mymoneyobserver.h"
+#include <qptrvector.h>
+
+MyMoneySubject::MyMoneySubject()
+{
+}
+
+MyMoneySubject::~MyMoneySubject()
+{
+}
+
+void MyMoneySubject::attach (MyMoneyObserver* o)
+{
+ m_observers.append(o);
+}
+
+void MyMoneySubject::detach (MyMoneyObserver* o)
+{
+ m_observers.remove(o);
+}
+
+void MyMoneySubject::notify(const QString& id)
+{
+ QPtrList<MyMoneyObserver> ptrList = m_observers;
+ MyMoneyObserver* i;
+
+ for (i = ptrList.first(); i != 0; i = ptrList.next()) {
+ // only call the observer if it did not detach in the meantime
+ if(m_observers.findRef(i) != -1) {
+ // qDebug("call observer @ 0x%08lX with '%s'", (unsigned long)i, id.data());
+ i->update(id);
+ }
+ }
+}
+
diff --git a/kmymoney2/mymoney/mymoneysubject.h b/kmymoney2/mymoney/mymoneysubject.h
new file mode 100644
index 0000000..74b8290
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneysubject.h
@@ -0,0 +1,59 @@
+/***************************************************************************
+ mymoneysubject.h - description
+ -------------------
+ begin : Sat May 18 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYSUBJECT_H
+#define MYMONEYSUBJECT_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qptrlist.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/export.h>
+
+class MyMoneyObserver;
+class QString;
+
+/**
+ * This is the base class to be used to construct a
+ * subject for usage in a subject/observer relationship
+ *
+ * @author Thomas Baumgart
+ */
+class KMYMONEY_EXPORT MyMoneySubject {
+public:
+ virtual ~MyMoneySubject();
+ virtual void attach(MyMoneyObserver*);
+ virtual void detach(MyMoneyObserver*);
+ virtual void notify(const QString& id);
+
+protected:
+ MyMoneySubject();
+
+private:
+ QPtrList<MyMoneyObserver> m_observers;
+};
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneytransaction.cpp b/kmymoney2/mymoney/mymoneytransaction.cpp
new file mode 100644
index 0000000..10b4c08
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneytransaction.cpp
@@ -0,0 +1,484 @@
+/***************************************************************************
+
+ mymoneytransaction.cpp
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes,
+ 2002 by Thomas Baumgart
+ email : mte@users.sourceforge.net,
+ ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoneytransaction.h"
+
+MyMoneyTransaction::MyMoneyTransaction() :
+ MyMoneyObject()
+{
+ m_nextSplitID = 1;
+ m_entryDate = QDate();
+ m_postDate = QDate();
+}
+
+MyMoneyTransaction::MyMoneyTransaction(const QString id, const MyMoneyTransaction& transaction) :
+ MyMoneyObject(id)
+{
+ *this = transaction;
+ m_id = id;
+ if(m_entryDate == QDate())
+ m_entryDate = QDate::currentDate();
+
+ QValueList<MyMoneySplit>::Iterator it;
+ for(it = m_splits.begin(); it != m_splits.end(); ++it) {
+ (*it).setTransactionId(id);
+ }
+}
+
+MyMoneyTransaction::MyMoneyTransaction(const QDomElement& node, const bool forceId) :
+ MyMoneyObject(node, forceId)
+{
+ if("TRANSACTION" != node.tagName())
+ throw new MYMONEYEXCEPTION("Node was not TRANSACTION");
+
+ m_nextSplitID = 1;
+
+ m_postDate = stringToDate(node.attribute("postdate"));
+ m_entryDate = stringToDate(node.attribute("entrydate"));
+ m_bankID = QStringEmpty(node.attribute("bankid"));
+ m_memo = QStringEmpty(node.attribute("memo"));
+ m_commodity = QStringEmpty(node.attribute("commodity"));
+
+ QDomNode child = node.firstChild();
+ while ( !child.isNull() && child.isElement() )
+ {
+ QDomElement c = child.toElement();
+ if(c.tagName() == "SPLITS") {
+ // Process any split information found inside the transaction entry.
+ QDomNodeList nodeList = c.elementsByTagName("SPLIT");
+ for(unsigned int i = 0; i < nodeList.count(); ++i) {
+ MyMoneySplit s(nodeList.item(i).toElement());
+ if(!m_bankID.isEmpty())
+ s.setBankID(m_bankID);
+ if(!s.accountId().isEmpty())
+ addSplit(s);
+ else
+ qDebug("Dropped split because it did not have an account id");
+ }
+
+ } else if(c.tagName() == "KEYVALUEPAIRS") {
+ MyMoneyKeyValueContainer kvp(c);
+ setPairs(kvp.pairs());
+ }
+ child = child.nextSibling();
+ }
+ m_bankID = QString();
+}
+
+MyMoneyTransaction::~MyMoneyTransaction()
+{
+}
+
+bool MyMoneyTransaction::operator == (const MyMoneyTransaction& right) const
+{
+ return (MyMoneyObject::operator==(right) &&
+ MyMoneyKeyValueContainer::operator==(right) &&
+ (m_commodity == right.m_commodity) &&
+ ((m_memo.length() == 0 && right.m_memo.length() == 0) || (m_memo == right.m_memo)) &&
+ (m_splits == right.m_splits) &&
+ (m_entryDate == right.m_entryDate) &&
+ (m_postDate == right.m_postDate) );
+}
+
+bool MyMoneyTransaction::accountReferenced(const QString& id) const
+{
+ QValueList<MyMoneySplit>::ConstIterator it;
+
+ for(it = m_splits.begin(); it != m_splits.end(); ++it) {
+ if((*it).accountId() == id)
+ return true;
+ }
+ return false;
+}
+
+void MyMoneyTransaction::addSplit(MyMoneySplit& split)
+{
+ if(!split.id().isEmpty())
+ throw new MYMONEYEXCEPTION("Cannot add split with assigned id (" + split.id() + ")");
+
+/*
+ QValueList<MyMoneySplit>::Iterator it;
+
+ // if the account referenced in this split is already
+ // referenced in another split, we add the amount of
+ // this split to the other one. All other data contained
+ // in the new split will be discarded.
+ for(it = m_splits.begin(); it != m_splits.end(); ++it) {
+ if((*it).accountId() == split.accountId()) {
+ (*it).setValue((*it).value()+split.value());
+ split = (*it);
+ return;
+ }
+ }
+*/
+
+ if(split.accountId().isEmpty())
+ throw new MYMONEYEXCEPTION("Cannot add split that does not contain an account reference");
+
+ MyMoneySplit newSplit(nextSplitID(), split);
+ split = newSplit;
+ split.setTransactionId(id());
+ m_splits.append(split);
+}
+
+void MyMoneyTransaction::modifySplit(MyMoneySplit& split)
+{
+// This version of the routine allows only a single
+// split to reference one account. If a second split
+// is modified to reference an account already referenced
+// by another split, the values will be added and the
+// duplicate removed.
+/*
+ QValueList<MyMoneySplit>::Iterator it;
+ QValueList<MyMoneySplit>::Iterator self = m_splits.end();
+ QValueList<MyMoneySplit>::Iterator dup = self;
+ bool duplicateAccount = false;
+
+ for(it = m_splits.begin(); it != m_splits.end(); ++it) {
+ if(split.id() == (*it).id()) {
+ self = it;
+ } else if(split.accountId() == (*it).accountId()) {
+ (*it).setValue((*it).value() + split.value());
+ dup = it;
+ duplicateAccount = true;
+ }
+ }
+
+ if(self == m_splits.end())
+ throw new MYMONEYEXCEPTION("Invalid split id '" + split.id() + "'");
+
+ if(duplicateAccount) {
+ m_splits.remove(self);
+ split = *dup;
+ } else
+ *self = split;
+*/
+
+// This is the other version which allows having more splits referencing
+// the same account.
+ if(split.accountId().isEmpty())
+ throw new MYMONEYEXCEPTION("Cannot modify split that does not contain an account reference");
+
+ QValueList<MyMoneySplit>::Iterator it;
+ for(it = m_splits.begin(); it != m_splits.end(); ++it) {
+ if(split.id() == (*it).id()) {
+ *it = split;
+ return;
+ }
+ }
+ throw new MYMONEYEXCEPTION(QString("Invalid split id '%1'").arg(split.id()));
+}
+
+void MyMoneyTransaction::removeSplit(const MyMoneySplit& split)
+{
+ QValueList<MyMoneySplit>::Iterator it;
+
+ for(it = m_splits.begin(); it != m_splits.end(); ++it) {
+ if(split.id() == (*it).id()) {
+ m_splits.remove(it);
+ break;
+ }
+ }
+ if(it == m_splits.end())
+ throw new MYMONEYEXCEPTION(QString("Invalid split id '%1'").arg(split.id()));
+}
+
+void MyMoneyTransaction::removeSplits(void)
+{
+ m_splits.clear();
+ m_nextSplitID = 1;
+}
+
+const MyMoneySplit& MyMoneyTransaction::splitByPayee(const QString& payeeId) const
+{
+ QValueList<MyMoneySplit>::ConstIterator it;
+
+ for(it = m_splits.begin(); it != m_splits.end(); ++it) {
+ if((*it).payeeId() == payeeId)
+ return *it;
+ }
+ throw new MYMONEYEXCEPTION(QString("Split not found for payee '%1'").arg(QString(payeeId)));
+}
+
+const MyMoneySplit& MyMoneyTransaction::splitByAccount(const QString& accountId, const bool match) const
+{
+ QValueList<MyMoneySplit>::ConstIterator it;
+
+ for(it = m_splits.begin(); it != m_splits.end(); ++it) {
+ if(match == true && (*it).accountId() == accountId)
+ return *it;
+ if(match == false && (*it).accountId() != accountId)
+ return *it;
+ }
+ throw new MYMONEYEXCEPTION(QString("Split not found for account %1%2").arg(match?"":"!").arg(QString(accountId)));
+}
+
+const MyMoneySplit& MyMoneyTransaction::splitByAccount(const QStringList& accountIds, const bool match) const
+{
+ QValueList<MyMoneySplit>::ConstIterator it;
+
+ for(it = m_splits.begin(); it != m_splits.end(); ++it) {
+ if(match == true && accountIds.contains((*it).accountId()) )
+ return *it;
+ if(match == false && !accountIds.contains((*it).accountId()))
+ return *it;
+ }
+ throw new MYMONEYEXCEPTION(QString("Split not found for account %1%1...%2").arg(match?"":"!").arg(accountIds.front(),accountIds.back()));
+}
+
+const MyMoneySplit& MyMoneyTransaction::splitById(const QString& splitId) const
+{
+ QValueList<MyMoneySplit>::ConstIterator it;
+
+ for(it = m_splits.begin(); it != m_splits.end(); ++it) {
+ if((*it).id() == splitId)
+ return *it;
+ }
+ throw new MYMONEYEXCEPTION(QString("Split not found for id '%1'").arg(QString(splitId)));
+}
+
+const QString MyMoneyTransaction::nextSplitID()
+{
+ QString id;
+ id = "S" + id.setNum(m_nextSplitID++).rightJustify(SPLIT_ID_SIZE, '0');
+ return id;
+}
+
+const QString MyMoneyTransaction::firstSplitID()
+{
+ QString id;
+ id = "S" + id.setNum(1).rightJustify(SPLIT_ID_SIZE, '0');
+ return id;
+}
+
+const MyMoneyMoney MyMoneyTransaction::splitSum(void) const
+{
+ MyMoneyMoney result(0);
+ QValueList<MyMoneySplit>::ConstIterator it;
+
+ for(it = m_splits.begin(); it != m_splits.end(); ++it) {
+ result += (*it).value();
+ }
+ return result;
+}
+
+void MyMoneyTransaction::setPostDate(const QDate& date) { m_postDate = date; }
+void MyMoneyTransaction::setEntryDate(const QDate& date) { m_entryDate = date; }
+void MyMoneyTransaction::setMemo(const QString& memo) { m_memo = memo; }
+
+bool MyMoneyTransaction::isLoanPayment(void) const
+{
+ try {
+ QValueList<MyMoneySplit>::ConstIterator it;
+
+ for(it = m_splits.begin(); it != m_splits.end(); ++it) {
+ if((*it).isAmortizationSplit())
+ return true;
+ }
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+ return false;
+}
+
+const MyMoneySplit& MyMoneyTransaction::amortizationSplit(void) const
+{
+ static MyMoneySplit nullSplit;
+
+ QValueList<MyMoneySplit>::ConstIterator it;
+
+ for(it = m_splits.begin(); it != m_splits.end(); ++it) {
+ if((*it).isAmortizationSplit() && (*it).isAutoCalc())
+ return *it;
+ }
+ return nullSplit;
+}
+
+const MyMoneySplit& MyMoneyTransaction::interestSplit(void) const
+{
+ static MyMoneySplit nullSplit;
+
+ QValueList<MyMoneySplit>::ConstIterator it;
+
+ for(it = m_splits.begin(); it != m_splits.end(); ++it) {
+ if((*it).isInterestSplit() && (*it).isAutoCalc())
+ return *it;
+ }
+ return nullSplit;
+}
+
+unsigned long MyMoneyTransaction::hash(const QString& txt, unsigned long h)
+{
+ unsigned long g;
+
+ for(unsigned i=0; i < txt.length(); ++i) {
+ unsigned short uc = txt[i].unicode();
+ for(unsigned j = 0; j < 2; ++j) {
+ unsigned char c = uc & 0xff;
+ // if either the cell or the row of the Unicode char is 0, stop processing
+ if(!c)
+ break;
+ h = (h << 4) + c;
+ if( (g = (h & 0xf0000000)) ) {
+ h = h ^ (g >> 24);
+ h = h ^ g;
+ }
+ uc >>= 8;
+ }
+ }
+ return h;
+}
+
+bool MyMoneyTransaction::isStockSplit(void) const
+{
+ return (m_splits.count() == 1 && m_splits[0].action() == MyMoneySplit::ActionSplitShares);
+}
+
+bool MyMoneyTransaction::isImported(void) const
+{
+ return value("Imported").lower() == QString("true");
+}
+
+void MyMoneyTransaction::setImported(bool state)
+{
+ if(state)
+ setValue("Imported", "true");
+ else
+ deletePair("Imported");
+}
+
+bool MyMoneyTransaction::isDuplicate(const MyMoneyTransaction& r) const
+{
+ bool rc = true;
+ if(splitCount() != r.splitCount()) {
+ rc = false;
+ } else {
+ if(abs(m_postDate.daysTo(r.postDate())) > 3) {
+ rc = false;
+ } else {
+ unsigned long accHash[2];
+ unsigned long valHash[2];
+ unsigned long numHash[2];
+ for(int i = 0; i < 2; ++i)
+ accHash[i] = valHash[i] = numHash[i] = 0;
+
+ QValueList<MyMoneySplit>::ConstIterator it;
+ for(it = splits().begin(); it != splits().end(); ++it) {
+ accHash[0] += hash((*it).accountId());
+ valHash[0] += hash((*it).value().formatMoney("", 4));
+ numHash[0] += hash((*it).number());
+ }
+ for(it = r.splits().begin(); it != r.splits().end(); ++it) {
+ accHash[1] += hash((*it).accountId());
+ valHash[1] += hash((*it).value().formatMoney("", 4));
+ numHash[1] += hash((*it).number());
+ }
+
+ if(accHash[0] != accHash[1]
+ || valHash[0] != valHash[1]
+ || numHash[0] != numHash[1]
+ ) {
+ rc = false;
+ }
+ }
+ }
+
+ return rc;
+}
+
+void MyMoneyTransaction::writeXML(QDomDocument& document, QDomElement& parent) const
+{
+ QDomElement el = document.createElement("TRANSACTION");
+
+ writeBaseXML(document, el);
+
+ el.setAttribute("postdate", dateToString(m_postDate));
+ el.setAttribute("memo", m_memo);
+ el.setAttribute("entrydate", dateToString(m_entryDate));
+ el.setAttribute("commodity", m_commodity);
+
+ QDomElement splits = document.createElement("SPLITS");
+ QValueList<MyMoneySplit>::ConstIterator it;
+ for(it = m_splits.begin(); it != m_splits.end(); ++it) {
+ (*it).writeXML(document, splits);
+ }
+ el.appendChild(splits);
+
+ MyMoneyKeyValueContainer::writeXML(document, el);
+
+ parent.appendChild(el);
+}
+
+bool MyMoneyTransaction::hasReferenceTo(const QString& id) const
+{
+ QValueList<MyMoneySplit>::const_iterator it;
+ bool rc = (id == m_commodity);
+ for(it = m_splits.begin(); rc == false && it != m_splits.end(); ++it) {
+ rc = (*it).hasReferenceTo(id);
+ }
+ return rc;
+}
+
+bool MyMoneyTransaction::hasAutoCalcSplit(void) const
+{
+ QValueList<MyMoneySplit>::ConstIterator it;
+
+ for(it = m_splits.begin(); it != m_splits.end(); ++it) {
+ if((*it).isAutoCalc())
+ return true;
+ }
+ return false;
+}
+
+QString MyMoneyTransaction::accountSignature(bool includeSplitCount) const
+{
+ QMap<QString, int> accountList;
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = m_splits.begin(); it_s != m_splits.end(); ++it_s) {
+ accountList[(*it_s).accountId()] += 1;
+ }
+
+ QMap<QString, int>::const_iterator it_a;
+ QString rc;
+ for(it_a = accountList.begin(); it_a != accountList.end(); ++it_a) {
+ if(it_a != accountList.begin())
+ rc += "-";
+ rc += it_a.key();
+ if(includeSplitCount)
+ rc += QString("*%1").arg(*it_a);
+ }
+ return rc;
+}
+
+QString MyMoneyTransaction::uniqueSortKey(void) const
+{
+ QString year, month, day, key;
+ const QDate& postdate = postDate();
+ year = year.setNum(postdate.year()).rightJustify(YEAR_SIZE, '0');
+ month = month.setNum(postdate.month()).rightJustify(MONTH_SIZE, '0');
+ day = day.setNum(postdate.day()).rightJustify(DAY_SIZE, '0');
+ key = year + "-" + month + "-" + day + "-" + m_id;
+ return key;
+}
diff --git a/kmymoney2/mymoney/mymoneytransaction.h b/kmymoney2/mymoney/mymoneytransaction.h
new file mode 100644
index 0000000..ce52779
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneytransaction.h
@@ -0,0 +1,353 @@
+/***************************************************************************
+ mymoneytransaction.h
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes
+ (C) 2002 by Thomas Baumgart
+ email : mte@users.sourceforge.net
+ ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYTRANSACTION_H
+#define MYMONEYTRANSACTION_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstring.h>
+#include <qdatetime.h>
+#include <qptrlist.h>
+#include <qstringlist.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoneyutils.h"
+#include "mymoneymoney.h"
+#include "mymoneykeyvaluecontainer.h"
+#include "mymoneysplit.h"
+#include <kmymoney/export.h>
+
+/**
+ * This class represents a transaction within the MyMoneyEngine. A transaction
+ * contains none, one or more splits of type MyMoneySplit. They are stored in
+ * a QValueList<MyMoneySplit> within this object. A transaction containing only
+ * a single split with an amount not equal to 0 is an unbalanced transaction. It
+ * is tolerated by the engine, but in general not a good idea as it is financially
+ * wrong.
+ */
+class KMYMONEY_EXPORT MyMoneyTransaction : public MyMoneyObject, public MyMoneyKeyValueContainer
+{
+public:
+ MyMoneyTransaction();
+ MyMoneyTransaction(const QString id,
+ const MyMoneyTransaction& transaction);
+ /**
+ * @param node reference to QDomNode
+ * @param forceId see MyMoneyObject(const QDomElement&, const bool)
+ */
+ MyMoneyTransaction(const QDomElement& node, const bool forceId = true);
+ ~MyMoneyTransaction();
+
+public:
+ friend QDataStream &operator<<(QDataStream &, MyMoneyTransaction &);
+ friend QDataStream &operator>>(QDataStream &, MyMoneyTransaction &);
+
+ // Simple get operations
+ const QDate& entryDate(void) const { return m_entryDate; };
+ const QDate& postDate(void) const { return m_postDate; };
+ const QString& memo(void) const { return m_memo; };
+ const QValueList<MyMoneySplit>& splits(void) const { return m_splits; };
+ QValueList<MyMoneySplit>& splits(void) { return m_splits; };
+ unsigned int splitCount(void) const { return m_splits.count(); };
+ const QString& commodity(void) const { return m_commodity; };
+ const QString& bankID(void) const /*__attribute__ ((deprecated))*/ { return m_bankID; };
+
+ // Simple set operations
+ void setPostDate(const QDate& date);
+ void setEntryDate(const QDate& date);
+ void setMemo(const QString& memo);
+ void setCommodity(const QString& commodityId) { m_commodity = commodityId; };
+ void setBankID(const QString& bankID) /*__attribute__ ((deprecated))*/ { m_bankID = bankID; };
+
+ bool operator == (const MyMoneyTransaction&) const;
+ inline bool operator != (const MyMoneyTransaction& r) const { return !(*this == r); };
+ bool operator< (const MyMoneyTransaction& r) const { return postDate() < r.postDate(); };
+ bool operator<= (const MyMoneyTransaction& r) const { return postDate() <= r.postDate(); };
+ bool operator> (const MyMoneyTransaction& r) const { return postDate() > r.postDate(); };
+
+ /**
+ * This method is used to extract a split for a given accountId
+ * from a transaction. A parameter controls, whether the accountId
+ * should match or not. In case of 'not match', the first not-matching
+ * split is returned.
+ *
+ * @param accountId the account to look for
+ * @param match if true, the account Id must match
+ * if false, the account Id must not match
+ *
+ * @return reference to split within the transaction is returned
+ */
+ const MyMoneySplit& splitByAccount(const QString& accountId, const bool match = true) const;
+
+ /**
+ * This method is essentially the same as the previous method, except that
+ * takes a list of accounts instead of just one.
+ *
+ * @param accountIds the list of accounts to look for
+ * @param match if true, the account Id must match
+ * if false, the account Id must not match
+ *
+ * @return reference to split within the transaction is returned
+ */
+ const MyMoneySplit& splitByAccount(const QStringList& accountIds, const bool match = true) const;
+
+ /**
+ * This method is used to extract a split from a transaction.
+ *
+ * @param splitId the split to look for
+ *
+ * @return reference to split within the transaction is returned
+ */
+ const MyMoneySplit& splitById(const QString& splitId) const;
+
+ /**
+ * This method is used to extract a split for a given payeeId
+ * from a transaction.
+ *
+ * @param payeeId the payee to look for
+ *
+ * @return reference to split within the transaction is returned
+ */
+ const MyMoneySplit& splitByPayee(const QString& payeeId) const;
+
+ /**
+ * This method is used to check if the given account is used
+ * in any of the splits of this transation
+ *
+ * @param id account id that should be checked for usage
+ */
+ bool accountReferenced(const QString& id) const;
+
+ /**
+ * This method is used to add a split to the transaction. The split
+ * will be assigned an id. The id member must be empty and the
+ * accountId member must be filled.
+ *
+ * @param split reference to the split that should be added
+ *
+ */
+ void addSplit(MyMoneySplit& split);
+
+ /**
+ * This method is used to modify a split in a transaction
+ */
+ void modifySplit(MyMoneySplit& split);
+
+ /**
+ * This method is used to remove a split from a transaction
+ */
+ void removeSplit(const MyMoneySplit& split);
+
+ /**
+ * This method is used to remove all splits from a transaction
+ */
+ void removeSplits(void);
+
+ /**
+ * This method is used to return the sum of all splits of this transaction
+ *
+ * @return MyMoneyMoney value of sum of all splits
+ */
+ const MyMoneyMoney splitSum(void) const;
+
+ /**
+ * This method returns information if the transaction
+ * contains information of a loan payment or not.
+ * Loan payment transactions have at least one
+ * split that is identified with a MyMoneySplit::action() of type
+ * MyMoneySplit::ActionAmortization.
+ *
+ * @retval false transaction is no loan payment transaction
+ * @retval true transaction is a loan payment transaction
+ *
+ * @note Upon internal failures, the return value @p false will be used.
+ */
+ bool isLoanPayment(void) const;
+
+ /**
+ * This method returns a const reference to the amortization split.
+ * In case none is found, a reference to an empty split will be returned.
+ */
+ const MyMoneySplit& amortizationSplit(void) const;
+
+ /**
+ * This method returns a const reference to the interest split.
+ * In case none is found, a reference to an empty split will be returned.
+ */
+ const MyMoneySplit& interestSplit(void) const;
+
+ /**
+ * This method is used to check if two transactions are identical.
+ * Identical transactions have:
+ *
+ * - the same number of splits
+ * - reference the same accounts
+ * - have the same values in the splits
+ * - have a postDate wihtin 3 days
+ *
+ * @param transaction reference to the transaction to be checked
+ * against this transaction
+ * @retval true transactions are identical
+ * @retval false transactions are not identical
+ */
+ bool isDuplicate(const MyMoneyTransaction& transaction) const;
+
+ /**
+ * returns @a true if this is a stock split transaction
+ */
+ bool isStockSplit(void) const;
+
+ /**
+ * returns @a true if this is an imported transaction
+ */
+ bool isImported(void) const;
+
+ /**
+ * Sets the imported state of this transaction to be the value of @a state .
+ * @p state defaults to @p true.
+ */
+ void setImported(bool state = true);
+
+ /**
+ * This static method returns the id which will be assigned to the
+ * first split added to a transaction. This ID can be used to figure
+ * out the split that references the account through which a transaction
+ * was entered.
+ *
+ * @return QString with ID of the first split of transactions
+ */
+ static const QString firstSplitID(void);
+
+ void writeXML(QDomDocument& document, QDomElement& parent) const;
+
+ /**
+ * This method checks if a reference to the given object exists. It returns,
+ * a @p true if the object is referencing the one requested by the
+ * parameter @p id. If it does not, this method returns @p false.
+ *
+ * @param id id of the object to be checked for references
+ * @retval true This object references object with id @p id.
+ * @retval false This object does not reference the object with id @p id.
+ */
+ virtual bool hasReferenceTo(const QString& id) const;
+
+ /**
+ * Checks whether any split contains an autocalc split.
+ *
+ * @retval true at least one split has an autocalc value
+ * @retval false all splits have fixed values
+ */
+ bool hasAutoCalcSplit(void) const;
+
+ /**
+ * Returns a signature consisting of the account ids and the
+ * number of times they occur in the transaction if @a includeSplitCount
+ * is @a true. The signature is independant from the order of splits.
+ *
+ * Example: Having splits referencing the account B, A and B, the returned
+ * value will be "A-B" if @p includeSplitCount is @p false or A*1-B*2 if it
+ * is @p true.
+ *
+ * The same result will be returned if the list of splits is A, B, B.
+ *
+ * @param includeSplitCount if @p true, the string @p *n with @p n being
+ * the number of splits referencing this account. The default for
+ * this parameter is @p false.
+ */
+ QString accountSignature(bool includeSplitCount = false) const;
+
+ QString uniqueSortKey(void) const;
+
+ /**
+ * This module implements an algorithm used by P.J. Weinberger
+ * for fast hashing. Source: COMPILERS by Alfred V. Aho,
+ * pages 435-437.
+ *
+ * It converts the string passed in @p txt into a non-unique
+ * unsigned long integer value.
+ *
+ * @param txt the text to be hashed
+ * @param h initial hash value (default 0)
+ * @return non-unique hash value of the text @p txt
+ */
+ static unsigned long hash(const QString& txt, unsigned long h = 0);
+
+private:
+ /**
+ * This method returns the next id to be used for a split
+ */
+ const QString nextSplitID(void);
+
+private:
+ static const int SPLIT_ID_SIZE = 4;
+
+ /**
+ * This member contains the date when the transaction was entered
+ * into the engine
+ */
+ QDate m_entryDate;
+
+ /**
+ * This member contains the date the transaction was posted
+ */
+ QDate m_postDate;
+
+ /**
+ * This member keeps the memo text associated with this transaction
+ */
+ QString m_memo;
+
+ /**
+ * This member contains the splits for this transaction
+ */
+ QValueList<MyMoneySplit> m_splits;
+
+ /**
+ * This member keeps the unique numbers of splits within this
+ * transaction. Upon creation of a MyMoneyTransaction object this
+ * value will be set to 1.
+ */
+ unsigned int m_nextSplitID;
+
+ /**
+ * This member keeps the base commodity (e.g. currency) for this transaction
+ */
+ QString m_commodity;
+
+ /**
+ * This member keeps the bank's unique ID for the transaction, so we can
+ * avoid duplicates. This is only used for electronic statement downloads.
+ *
+ * Note this is now deprecated! Bank ID's should be set on splits, not transactions.
+ */
+ QString m_bankID;
+
+ /** constants for unique sort key */
+ static const int YEAR_SIZE = 4;
+ static const int MONTH_SIZE = 2;
+ static const int DAY_SIZE = 2;
+};
+#endif
diff --git a/kmymoney2/mymoney/mymoneytransactionfilter.cpp b/kmymoney2/mymoney/mymoneytransactionfilter.cpp
new file mode 100644
index 0000000..317400d
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneytransactionfilter.cpp
@@ -0,0 +1,860 @@
+/***************************************************************************
+ mymoneytransactionfilter.cpp - description
+ -------------------
+ begin : Fri Aug 22 2003
+ copyright : (C) 2003 by Thomas Baumgart
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyfile.h>
+#include "mymoneytransactionfilter.h"
+
+MyMoneyTransactionFilter::MyMoneyTransactionFilter()
+{
+ m_filterSet.allFilter = 0;
+ m_reportAllSplits = true;
+ m_considerCategory = true;
+ m_invertText = false;
+}
+
+MyMoneyTransactionFilter::MyMoneyTransactionFilter(const QString& id)
+{
+ m_filterSet.allFilter = 0;
+ m_reportAllSplits = false;
+ m_considerCategory = false;
+ m_invertText = false;
+
+ addAccount(id);
+ // addCategory(id);
+}
+
+MyMoneyTransactionFilter::~MyMoneyTransactionFilter()
+{
+}
+
+void MyMoneyTransactionFilter::clear(void)
+{
+ m_filterSet.allFilter = 0;
+ m_invertText = false;
+ m_accounts.clear();
+ m_categories.clear();
+ m_payees.clear();
+ m_types.clear();
+ m_states.clear();
+ m_validity.clear();
+ m_matchingSplits.clear();
+ m_fromDate = QDate();
+ m_toDate = QDate();
+}
+
+void MyMoneyTransactionFilter::clearAccountFilter(void)
+{
+ m_filterSet.singleFilter.accountFilter = 0;
+ m_accounts.clear();
+}
+
+void MyMoneyTransactionFilter::setTextFilter(const QRegExp& text, bool invert)
+{
+ m_filterSet.singleFilter.textFilter = 1;
+ m_invertText = invert;
+ m_text = text;
+}
+
+void MyMoneyTransactionFilter::addAccount(const QStringList& ids)
+{
+ QStringList::ConstIterator it;
+
+ m_filterSet.singleFilter.accountFilter = 1;
+ for(it = ids.begin(); it != ids.end(); ++it)
+ addAccount(*it);
+}
+
+void MyMoneyTransactionFilter::addAccount(const QString& id)
+{
+ if(!m_accounts.isEmpty() && !id.isEmpty()) {
+ if(m_accounts.find(id) != 0)
+ return;
+ }
+ if(m_accounts.count() >= m_accounts.size()*2) {
+ m_accounts.resize(457);
+ }
+ m_filterSet.singleFilter.accountFilter = 1;
+ if(!id.isEmpty())
+ m_accounts.insert(id, "");
+}
+
+void MyMoneyTransactionFilter::addCategory(const QStringList& ids)
+{
+ QStringList::ConstIterator it;
+
+ m_filterSet.singleFilter.categoryFilter = 1;
+ for(it = ids.begin(); it != ids.end(); ++it)
+ addCategory(*it);
+}
+
+void MyMoneyTransactionFilter::addCategory(const QString& id)
+{
+ if(!m_categories.isEmpty() && !id.isEmpty()) {
+ if(m_categories.find(id) != 0)
+ return;
+ }
+ if(m_categories.count() >= m_categories.size()*2) {
+ m_categories.resize(457);
+ }
+ m_filterSet.singleFilter.categoryFilter = 1;
+ if(!id.isEmpty())
+ m_categories.insert(id, "");
+}
+
+void MyMoneyTransactionFilter::setDateFilter(const QDate& from, const QDate& to)
+{
+ m_filterSet.singleFilter.dateFilter = from.isValid() | to.isValid();
+ m_fromDate = from;
+ m_toDate = to;
+}
+
+void MyMoneyTransactionFilter::setAmountFilter(const MyMoneyMoney& from, const MyMoneyMoney& to)
+{
+ m_filterSet.singleFilter.amountFilter = 1;
+ m_fromAmount = from.abs();
+ m_toAmount = to.abs();
+
+ // make sure that the user does not try to fool us ;-)
+ if(from > to) {
+ MyMoneyMoney tmp = m_fromAmount;
+ m_fromAmount = m_toAmount;
+ m_toAmount = tmp;
+ }
+}
+
+void MyMoneyTransactionFilter::addPayee(const QString& id)
+{
+ if(!m_payees.isEmpty() && !id.isEmpty()) {
+ if(m_payees.find(id) != 0)
+ return;
+ }
+ if(m_payees.count() >= m_payees.size()*2) {
+ m_payees.resize(457);
+ }
+ m_filterSet.singleFilter.payeeFilter = 1;
+ if(!id.isEmpty())
+ m_payees.insert(id, "");
+}
+
+void MyMoneyTransactionFilter::addType(const int type)
+{
+ if(!m_types.isEmpty()) {
+ if(m_types.find(type) != 0)
+ return;
+ }
+ // we don't have more than 4 or 5 types, so we don't worry about
+ // the size of the QIntDict object.
+ m_filterSet.singleFilter.typeFilter = 1;
+ m_types.insert(type, "");
+}
+
+void MyMoneyTransactionFilter::addState(const int state)
+{
+ if(!m_states.isEmpty()) {
+ if(m_states.find(state) != 0)
+ return;
+ }
+ // we don't have more than 4 or 5 states, so we don't worry about
+ // the size of the QIntDict object.
+ m_filterSet.singleFilter.stateFilter = 1;
+ m_states.insert(state, "");
+}
+
+void MyMoneyTransactionFilter::addValidity(const int type)
+{
+ if(!m_validity.isEmpty()) {
+ if(m_validity.find(type) != 0)
+ return;
+ }
+ // we don't have more than 4 or 5 states, so we don't worry about
+ // the size of the QIntDict object.
+ m_filterSet.singleFilter.validityFilter = 1;
+ m_validity.insert(type, "");
+}
+
+void MyMoneyTransactionFilter::setNumberFilter(const QString& from, const QString& to)
+{
+ m_filterSet.singleFilter.nrFilter = 1;
+ m_fromNr = from;
+ m_toNr = to;
+}
+
+void MyMoneyTransactionFilter::setReportAllSplits(const bool report)
+{
+ m_reportAllSplits = report;
+}
+
+void MyMoneyTransactionFilter::setConsiderCategory(const bool check)
+{
+ m_considerCategory = check;
+}
+
+const QValueList<MyMoneySplit>& MyMoneyTransactionFilter::matchingSplits(void) const
+{
+ return m_matchingSplits;
+}
+
+bool MyMoneyTransactionFilter::matchText(const MyMoneySplit * const sp) const
+{
+ // check if the text is contained in one of the fields
+ // memo, value, number, payee, account, date
+ if(m_filterSet.singleFilter.textFilter) {
+ MyMoneyFile* file = MyMoneyFile::instance();
+ const MyMoneyAccount& acc = file->account(sp->accountId());
+ const MyMoneySecurity& sec = file->security(acc.currencyId());
+ if(sp->memo().contains(m_text)
+ || sp->shares().formatMoney(acc.fraction(sec)).contains(m_text)
+ || sp->value().formatMoney(acc.fraction(sec)).contains(m_text)
+ || sp->number().contains(m_text))
+ return !m_invertText;
+
+ if(acc.name().contains(m_text))
+ return !m_invertText;
+
+ if(!sp->payeeId().isEmpty()) {
+ const MyMoneyPayee& payee = file->payee(sp->payeeId());
+ if(payee.name().contains(m_text))
+ return !m_invertText;
+ }
+ return m_invertText;
+ }
+ return true;
+}
+
+bool MyMoneyTransactionFilter::matchAmount(const MyMoneySplit * const sp) const
+{
+ if(m_filterSet.singleFilter.amountFilter) {
+ if(((sp->value().abs() < m_fromAmount) || sp->value().abs() > m_toAmount)
+ && ((sp->shares().abs() < m_fromAmount) || sp->shares().abs() > m_toAmount))
+ return false;
+ }
+
+ return true;
+}
+
+bool MyMoneyTransactionFilter::match(const MyMoneySplit * const sp) const
+{
+ return matchText(sp) && matchAmount(sp);
+}
+
+bool MyMoneyTransactionFilter::match(const MyMoneyTransaction& transaction)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ QValueList<MyMoneySplit>::ConstIterator it;
+
+ m_matchingSplits.clear();
+
+ // qDebug("T: %s", transaction.id().data());
+ // if no filter is set, we can savely return a match
+ // if we should report all splits, then we collect them
+ if(!m_filterSet.allFilter) {
+ if(m_reportAllSplits) {
+ m_matchingSplits = transaction.splits();
+ }
+ return true;
+ }
+
+ // perform checks on the MyMoneyTransaction object first
+
+ // check the date range
+ if(m_filterSet.singleFilter.dateFilter) {
+ if(m_fromDate != QDate()) {
+ if(transaction.postDate() < m_fromDate)
+ return false;
+ }
+
+ if(m_toDate != QDate()) {
+ if(transaction.postDate() > m_toDate)
+ return false;
+ }
+ }
+
+ // construct a local list of pointers to all splits and
+ // remove the ones that do not match account and/or categories.
+
+ QPtrList<MyMoneySplit> matchingSplits;
+ for(it = transaction.splits().begin(); it != transaction.splits().end(); ++it) {
+ matchingSplits.append(&(*it));
+ }
+
+ bool categoryMatched = !m_filterSet.singleFilter.categoryFilter;
+ bool accountMatched = !m_filterSet.singleFilter.accountFilter;
+ bool isTransfer = true;
+
+ // check the transaction's validity
+ if(m_filterSet.singleFilter.validityFilter) {
+ if(m_validity.count() > 0) {
+ if(!m_validity.find(validTransaction(transaction)))
+ return false;
+ }
+ }
+
+ MyMoneySplit* sp;
+
+ if(m_filterSet.singleFilter.accountFilter == 1
+ || m_filterSet.singleFilter.categoryFilter == 1) {
+ for(sp = matchingSplits.first(); sp != 0; ) {
+ MyMoneySplit* removeSplit = sp;
+ const MyMoneyAccount& acc = file->account(sp->accountId());
+ if(m_considerCategory) {
+ switch(acc.accountGroup()) {
+ case MyMoneyAccount::Income:
+ case MyMoneyAccount::Expense:
+ isTransfer = false;
+ // check if the split references one of the categories in the list
+ if(m_filterSet.singleFilter.categoryFilter) {
+ if(m_categories.count() > 0) {
+ if(m_categories.find(sp->accountId())) {
+ categoryMatched = true;
+ removeSplit = 0;
+ }
+ } else {
+ // we're looking for transactions with 'no' categories
+ return false;
+ }
+ }
+ break;
+
+ default:
+ // check if the split references one of the accounts in the list
+ if(m_filterSet.singleFilter.accountFilter) {
+ if(m_accounts.count() > 0) {
+ if(m_accounts.find(sp->accountId())) {
+ accountMatched = true;
+ removeSplit = 0;
+ }
+ }
+ } else
+ removeSplit = 0;
+
+ break;
+ }
+
+ } else {
+ if(m_filterSet.singleFilter.accountFilter) {
+ if(m_accounts.count() > 0) {
+ if(m_accounts.find(sp->accountId())) {
+ accountMatched = true;
+ removeSplit = 0;
+ }
+ }
+ } else
+ removeSplit = 0;
+ }
+
+ sp = matchingSplits.next();
+ if(removeSplit) {
+ // qDebug(" S: %s", (*it).id().data());
+ matchingSplits.remove(removeSplit);
+ }
+ }
+ }
+
+ // check if we're looking for transactions without assigned category
+ if(!categoryMatched && transaction.splitCount() == 1 && m_categories.count() == 0) {
+ categoryMatched = true;
+ }
+
+ // if there's no category filter and the category did not
+ // match, then we still want to see this transaction if it's
+ // a transfer
+ if(!categoryMatched && !m_filterSet.singleFilter.categoryFilter)
+ categoryMatched = isTransfer;
+
+ if(matchingSplits.count() == 0
+ || !(accountMatched && categoryMatched))
+ return false;
+
+ FilterSet filterSet = m_filterSet;
+ filterSet.singleFilter.dateFilter =
+ filterSet.singleFilter.accountFilter =
+ filterSet.singleFilter.categoryFilter = 0;
+
+ // check if we still have something to do
+ if(filterSet.allFilter != 0) {
+ for(sp = matchingSplits.first(); sp != 0;) {
+ MyMoneySplit* removeSplit = 0;
+ removeSplit = (matchAmount(sp) && matchText(sp)) ? 0 : sp;
+
+ const MyMoneyAccount& acc = file->account(sp->accountId());
+
+ // Determine if this account is a category or an account
+ bool isCategory = false;
+ switch(acc.accountGroup()) {
+ case MyMoneyAccount::Income:
+ case MyMoneyAccount::Expense:
+ isCategory = true;
+ default:
+ break;
+ }
+
+ if(!isCategory && !removeSplit) {
+ // check the payee list
+ if(!removeSplit && m_filterSet.singleFilter.payeeFilter) {
+ if(m_payees.count() > 0) {
+ if(sp->payeeId().isEmpty() || !m_payees.find(sp->payeeId()))
+ removeSplit = sp;
+ } else if(!sp->payeeId().isEmpty())
+ removeSplit = sp;
+ }
+
+ // check the type list
+ if(!removeSplit && m_filterSet.singleFilter.typeFilter) {
+ if(m_types.count() > 0) {
+ if(!m_types.find(splitType(transaction, *sp)))
+ removeSplit = sp;
+ }
+ }
+
+ // check the state list
+ if(!removeSplit && m_filterSet.singleFilter.stateFilter) {
+ if(m_states.count() > 0) {
+ if(!m_states.find(splitState(*sp)))
+ removeSplit = sp;
+ }
+ }
+
+ if(!removeSplit && m_filterSet.singleFilter.nrFilter) {
+ if(!m_fromNr.isEmpty()) {
+ if(sp->number() < m_fromNr)
+ removeSplit = sp;
+ }
+ if(!m_toNr.isEmpty()) {
+ if(sp->number() > m_toNr)
+ removeSplit = sp;
+ }
+ }
+ } else if(m_filterSet.singleFilter.payeeFilter
+ || m_filterSet.singleFilter.typeFilter
+ || m_filterSet.singleFilter.stateFilter
+ || m_filterSet.singleFilter.nrFilter)
+ removeSplit = sp;
+
+ sp = matchingSplits.next();
+ if(removeSplit) {
+ // qDebug(" S: %s", (*it).id().data());
+ matchingSplits.remove(removeSplit);
+ }
+ }
+ }
+
+ if(m_reportAllSplits == false && matchingSplits.count() != 0) {
+ m_matchingSplits.append(transaction.splits()[0]);
+ } else {
+ for(sp = matchingSplits.first(); sp != 0; sp = matchingSplits.next()) {
+ m_matchingSplits.append(*sp);
+ }
+ }
+ // all filters passed, I guess we have a match
+ // qDebug(" C: %d", m_matchingSplits.count());
+ return matchingSplits.count() != 0;
+}
+
+int MyMoneyTransactionFilter::splitState(const MyMoneySplit& split) const
+{
+ int rc = notReconciled;
+
+ switch(split.reconcileFlag()) {
+ default:
+ case MyMoneySplit::NotReconciled:
+ break;;
+
+ case MyMoneySplit::Cleared:
+ rc = cleared;
+ break;
+
+ case MyMoneySplit::Reconciled:
+ rc = reconciled;
+ break;
+
+ case MyMoneySplit::Frozen:
+ rc = frozen;
+ break;
+ }
+ return rc;
+}
+
+int MyMoneyTransactionFilter::splitType(const MyMoneyTransaction& t, const MyMoneySplit& split) const
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyAccount a, b;
+ a = file->account(split.accountId());
+ if((a.accountGroup() == MyMoneyAccount::Income
+ || a.accountGroup() == MyMoneyAccount::Expense))
+ return allTypes;
+
+ if(t.splitCount() == 2) {
+ QString ida, idb;
+ ida = t.splits()[0].accountId();
+ idb = t.splits()[1].accountId();
+
+ a = file->account(ida);
+ b = file->account(idb);
+ if((a.accountGroup() != MyMoneyAccount::Expense
+ && a.accountGroup() != MyMoneyAccount::Income)
+ && (b.accountGroup() != MyMoneyAccount::Expense
+ && b.accountGroup() != MyMoneyAccount::Income))
+ return transfers;
+ }
+
+ if(split.value().isPositive())
+ return deposits;
+
+ return payments;
+}
+
+MyMoneyTransactionFilter::validityOptionE MyMoneyTransactionFilter::validTransaction(const MyMoneyTransaction& t) const
+{
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ MyMoneyMoney val;
+
+ for(it_s = t.splits().begin(); it_s != t.splits().end(); ++it_s) {
+ val += (*it_s).value();
+ }
+ return (val == MyMoneyMoney(0,1)) ? valid : invalid;
+}
+
+bool MyMoneyTransactionFilter::includesCategory( const QString& cat ) const
+{
+ return (! m_filterSet.singleFilter.categoryFilter) || m_categories.find( cat );
+}
+
+bool MyMoneyTransactionFilter::includesAccount( const QString& acc ) const
+{
+ return (! m_filterSet.singleFilter.accountFilter) || m_accounts.find( acc );
+}
+
+bool MyMoneyTransactionFilter::includesPayee( const QString& pye ) const
+{
+ return (! m_filterSet.singleFilter.payeeFilter) || m_payees.find( pye );
+}
+
+bool MyMoneyTransactionFilter::dateFilter( QDate& from, QDate& to ) const
+{
+ from = m_fromDate;
+ to = m_toDate;
+ return m_filterSet.singleFilter.dateFilter==1;
+}
+
+bool MyMoneyTransactionFilter::amountFilter( MyMoneyMoney& from, MyMoneyMoney& to ) const
+{
+ from = m_fromAmount;
+ to = m_toAmount;
+ return m_filterSet.singleFilter.amountFilter==1;
+}
+
+bool MyMoneyTransactionFilter::numberFilter( QString& from, QString& to ) const
+{
+ from = m_fromNr;
+ to = m_toNr;
+ return m_filterSet.singleFilter.nrFilter==1;
+}
+
+bool MyMoneyTransactionFilter::payees(QStringList& list) const
+{
+ bool result = m_filterSet.singleFilter.payeeFilter;
+
+ if ( result )
+ {
+ QAsciiDictIterator<char> it_payee( m_payees );
+ while ( it_payee.current() )
+ {
+ list += it_payee.currentKey();
+ ++it_payee;
+ }
+ }
+ return result;
+}
+
+bool MyMoneyTransactionFilter::accounts(QStringList& list) const
+{
+ bool result = m_filterSet.singleFilter.accountFilter;
+
+ if ( result )
+ {
+ QAsciiDictIterator<char> it_account( m_accounts );
+ while ( it_account.current() )
+ {
+ QString account = it_account.currentKey();
+ list += account;
+ ++it_account;
+ }
+ }
+ return result;
+}
+
+bool MyMoneyTransactionFilter::categories(QStringList& list) const
+{
+ bool result = m_filterSet.singleFilter.categoryFilter;
+
+ if ( result )
+ {
+ QAsciiDictIterator<char> it_category( m_categories );
+ while ( it_category.current() )
+ {
+ list += it_category.currentKey();
+ ++it_category;
+ }
+ }
+ return result;
+}
+
+bool MyMoneyTransactionFilter::types(QValueList<int>& list) const
+{
+ bool result = m_filterSet.singleFilter.typeFilter;
+
+ if ( result )
+ {
+ QIntDictIterator<char> it_type( m_types );
+ while ( it_type.current() )
+ {
+ list += it_type.currentKey();
+ ++it_type;
+ }
+ }
+ return result;
+}
+
+bool MyMoneyTransactionFilter::states(QValueList<int>& list) const
+{
+ bool result = m_filterSet.singleFilter.stateFilter;
+
+ if ( result )
+ {
+ QIntDictIterator<char> it_state( m_states );
+ while ( it_state.current() )
+ {
+ list += it_state.currentKey();
+ ++it_state;
+ }
+ }
+ return result;
+}
+
+bool MyMoneyTransactionFilter::firstType(int&i) const
+{
+ bool result = m_filterSet.singleFilter.typeFilter;
+
+ if ( result )
+ {
+ QIntDictIterator<char> it_type( m_types );
+ if ( it_type.current() )
+ i = it_type.currentKey();
+ }
+ return result;
+}
+
+bool MyMoneyTransactionFilter::firstState(int&i) const
+{
+ bool result = m_filterSet.singleFilter.stateFilter;
+
+ if ( result )
+ {
+ QIntDictIterator<char> it_state( m_states );
+ if ( it_state.current() )
+ i = it_state.currentKey();
+ }
+ return result;
+}
+
+bool MyMoneyTransactionFilter::textFilter(QRegExp& exp) const
+{
+ exp = m_text;
+ return m_filterSet.singleFilter.textFilter == 1;
+}
+
+void MyMoneyTransactionFilter::setDateFilter(dateOptionE range)
+{
+ QDate from, to;
+ if ( translateDateRange(range,from,to) )
+ setDateFilter(from,to);
+}
+
+static int fiscalYearStartMonth = 1;
+static int fiscalYearStartDay = 1;
+
+void MyMoneyTransactionFilter::setFiscalYearStart(int firstMonth, int firstDay)
+{
+ fiscalYearStartMonth = firstMonth;
+ fiscalYearStartDay = firstDay;
+}
+
+bool MyMoneyTransactionFilter::translateDateRange(dateOptionE id, QDate& start, QDate& end)
+{
+ bool rc = true;
+ int yr, mon, day;
+ yr = QDate::currentDate().year();
+ mon = QDate::currentDate().month();
+ day = QDate::currentDate().day();
+ QDate tmp;
+
+ switch(id) {
+ case MyMoneyTransactionFilter::allDates:
+ start = QDate();
+ end = QDate();
+ break;
+ case MyMoneyTransactionFilter::asOfToday:
+ start = QDate();
+ end = QDate::currentDate();
+ break;
+ case MyMoneyTransactionFilter::currentMonth:
+ start = QDate(yr,mon,1);
+ end = QDate(yr,mon,1).addMonths(1).addDays(-1);
+ break;
+ case MyMoneyTransactionFilter::currentYear:
+ start = QDate(yr,1,1);
+ end = QDate(yr,12,31);
+ break;
+ case MyMoneyTransactionFilter::monthToDate:
+ start = QDate(yr,mon,1);
+ end = QDate::currentDate();
+ break;
+ case MyMoneyTransactionFilter::yearToDate:
+ start = QDate(yr,1,1);
+ end = QDate::currentDate();
+ break;
+ case MyMoneyTransactionFilter::yearToMonth:
+ start = QDate(yr,1,1);
+ end = QDate(yr,mon,1).addDays(-1);
+ break;
+ case MyMoneyTransactionFilter::lastMonth:
+ start = QDate(yr,mon,1).addMonths(-1);
+ end = QDate(yr,mon,1).addDays(-1);
+ break;
+ case MyMoneyTransactionFilter::lastYear:
+ start = QDate(yr,1,1).addYears(-1);
+ end = QDate(yr,12,31).addYears(-1);
+ break;
+ case MyMoneyTransactionFilter::last7Days:
+ start = QDate::currentDate().addDays(-7);
+ end = QDate::currentDate();
+ break;
+ case MyMoneyTransactionFilter::last30Days:
+ start = QDate::currentDate().addDays(-30);
+ end = QDate::currentDate();
+ break;
+ case MyMoneyTransactionFilter::last3Months:
+ start = QDate::currentDate().addMonths(-3);
+ end = QDate::currentDate();
+ break;
+ case MyMoneyTransactionFilter::last6Months:
+ start = QDate::currentDate().addMonths(-6);
+ end = QDate::currentDate();
+ break;
+ case MyMoneyTransactionFilter::last11Months:
+ start = QDate(yr,mon,1).addMonths(-12);
+ end = QDate(yr,mon,1).addDays(-1);
+ break;
+ case MyMoneyTransactionFilter::last12Months:
+ start = QDate::currentDate().addMonths(-12);
+ end = QDate::currentDate();
+ break;
+ case MyMoneyTransactionFilter::next7Days:
+ start = QDate::currentDate();
+ end = QDate::currentDate().addDays(7);
+ break;
+ case MyMoneyTransactionFilter::next30Days:
+ start = QDate::currentDate();
+ end = QDate::currentDate().addDays(30);
+ break;
+ case MyMoneyTransactionFilter::next3Months:
+ start = QDate::currentDate();
+ end = QDate::currentDate().addMonths(3);
+ break;
+ case MyMoneyTransactionFilter::next6Months:
+ start = QDate::currentDate();
+ end = QDate::currentDate().addMonths(6);
+ break;
+ case MyMoneyTransactionFilter::next12Months:
+ start = QDate::currentDate();
+ end = QDate::currentDate().addMonths(12);
+ break;
+ case MyMoneyTransactionFilter::userDefined:
+ start = QDate();
+ end = QDate();
+ break;
+ case MyMoneyTransactionFilter::last3ToNext3Months:
+ start = QDate::currentDate().addMonths(-3);
+ end = QDate::currentDate().addMonths(3);
+ break;
+ case MyMoneyTransactionFilter::currentQuarter:
+ start = QDate(yr, mon - ((mon-1) % 3), 1);
+ end = start.addMonths(3).addDays(-1);
+ break;
+ case MyMoneyTransactionFilter::lastQuarter:
+ start = QDate(yr, mon - ((mon-1) % 3), 1).addMonths(-3);
+ end = start.addMonths(3).addDays(-1);
+ break;
+ case MyMoneyTransactionFilter::nextQuarter:
+ start = QDate(yr, mon - ((mon-1) % 3), 1).addMonths(3);
+ end = start.addMonths(3).addDays(-1);
+ break;
+ case MyMoneyTransactionFilter::currentFiscalYear:
+ start = QDate(QDate::currentDate().year(), fiscalYearStartMonth, fiscalYearStartDay);
+ if(QDate::currentDate() < start)
+ start = start.addYears(-1);
+ end = start.addYears(1).addDays(-1);
+ break;
+ case MyMoneyTransactionFilter::lastFiscalYear:
+ start = QDate(QDate::currentDate().year(), fiscalYearStartMonth, fiscalYearStartDay);
+ if(QDate::currentDate() < start)
+ start = start.addYears(-1);
+ start = start.addYears(-1);
+ end = start.addYears(1).addDays(-1);
+ break;
+ case MyMoneyTransactionFilter::today:
+ start = QDate::currentDate();
+ end = QDate::currentDate();
+ break;
+ default:
+ qFatal("Unknown date identifier %d in MyMoneyTransactionFilter::translateDateRange()", id);
+ rc = false;
+ break;
+ }
+ return rc;
+}
+
+void MyMoneyTransactionFilter::removeReference(const QString& id)
+{
+ if(m_accounts.find(id)) {
+ qDebug("%s", (QString("Remove account '%1' from report").arg(id)).data());
+ m_accounts.remove(id);
+ } else if(m_categories.find(id)) {
+ qDebug("%s", (QString("Remove category '%1' from report").arg(id)).data());
+ m_categories.remove(id);
+ } else if(m_payees.find(id)) {
+ qDebug("%s", (QString("Remove payee '%1' from report").arg(id)).data());
+ m_payees.remove(id);
+ }
+}
+
+
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/mymoney/mymoneytransactionfilter.h b/kmymoney2/mymoney/mymoneytransactionfilter.h
new file mode 100644
index 0000000..edad9cc
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneytransactionfilter.h
@@ -0,0 +1,578 @@
+/***************************************************************************
+ mymoneytransactionfilter.h - description
+ -------------------
+ begin : Fri Aug 22 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYTRANSACTIONFILTER_H
+#define MYMONEYTRANSACTIONFILTER_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstring.h>
+#include <qdatetime.h>
+#include <qmap.h>
+#include <qasciidict.h>
+#include <qintdict.h>
+#include <qregexp.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneytransaction.h>
+#include <kmymoney/export.h>
+
+/**
+ * @author Thomas Baumgart
+ */
+
+class KMYMONEY_EXPORT MyMoneyTransactionFilter
+{
+public:
+ // Make sure to keep the following enum valus in sync with the values
+ // used by the GUI (for KMyMoney in kfindtransactiondlgdecl.ui)
+ enum typeOptionE {
+ allTypes = 0,
+ payments,
+ deposits,
+ transfers,
+ // insert new constants above of this line
+ typeOptionCount
+ };
+
+ // Make sure to keep the following enum valus in sync with the values
+ // used by the GUI (for KMyMoney in kfindtransactiondlgdecl.ui)
+ enum stateOptionE {
+ allStates = 0,
+ notReconciled,
+ cleared,
+ reconciled,
+ frozen,
+ // insert new constants above of this line
+ stateOptionCount
+ };
+
+ // Make sure to keep the following enum valus in sync with the values
+ // used by the GUI (for KMyMoney in kfindtransactiondlgdecl.ui)
+ enum validityOptionE {
+ anyValidity = 0,
+ valid,
+ invalid,
+ // insert new constants above of this line
+ validityOptionCount
+ };
+
+ // Make sure to keep the following enum valus in sync with the values
+ // used by the GUI (for KMyMoney in kfindtransactiondlgdecl.ui)
+ enum dateOptionE {
+ allDates = 0,
+ asOfToday,
+ currentMonth,
+ currentYear,
+ monthToDate,
+ yearToDate,
+ yearToMonth,
+ lastMonth,
+ lastYear,
+ last7Days,
+ last30Days,
+ last3Months,
+ last6Months,
+ last12Months,
+ next7Days,
+ next30Days,
+ next3Months,
+ next6Months,
+ next12Months,
+ userDefined,
+ last3ToNext3Months,
+ last11Months,
+ currentQuarter,
+ lastQuarter,
+ nextQuarter,
+ currentFiscalYear,
+ lastFiscalYear,
+ today,
+ // insert new constants above of this line
+ dateOptionCount
+ };
+
+ typedef union {
+ unsigned allFilter;
+ struct {
+ unsigned textFilter : 1;
+ unsigned accountFilter : 1;
+ unsigned payeeFilter : 1;
+ unsigned categoryFilter : 1;
+ unsigned nrFilter : 1;
+ unsigned dateFilter : 1;
+ unsigned amountFilter : 1;
+ unsigned typeFilter : 1;
+ unsigned stateFilter : 1;
+ unsigned validityFilter : 1;
+ } singleFilter;
+ } FilterSet;
+
+ /**
+ * This is the standard constructor for a transaction filter.
+ * It creates the object and calls setReportAllSplits() to
+ * report all matching splits as separate entries. Use
+ * setReportAllSplits() to override this behaviour.
+ */
+ MyMoneyTransactionFilter();
+
+ /**
+ * This is a convenience constructor to allow construction of
+ * a simple account filter. It is basically the same as the
+ * following:
+ *
+ * @code
+ * :
+ * MyMoneyTransactionFilter filter;
+ * filter.setReportAllSplits(false);
+ * filter.addAccount(id);
+ * :
+ * @endcode
+ *
+ * @param id reference to account id
+ */
+ MyMoneyTransactionFilter(const QString& id);
+
+ ~MyMoneyTransactionFilter();
+
+ /**
+ * This method is used to clear the filter. All settings will be
+ * removed.
+ */
+ void clear(void);
+
+ /**
+ * This method is used to clear the accounts filter only.
+ */
+ void clearAccountFilter(void);
+
+ /**
+ * This method is used to set the regular expression filter to the value specified
+ * as parameter @p exp. The following text based fields are searched:
+ *
+ * - Memo
+ * - Payee
+ * - Category
+ * - Shares / Value
+ * - Number
+ *
+ * @param exp The regular expression that must be found in a transaction
+ * before it is included in the result set.
+ * @param invert If true, value must not be contained in any of the above mentioned fields
+ *
+ */
+ void setTextFilter(const QRegExp& exp, bool invert = false);
+
+ /**
+ * This method will add the account with id @p id to the list of matching accounts.
+ * If the list is empty, any transaction will match.
+ *
+ * @param id internal ID of the account
+ */
+ void addAccount(const QString& id);
+
+ /**
+ * This is a convenience method and behaves exactly like the above
+ * method but for a list of id's.
+ */
+ void addAccount(const QStringList& ids);
+
+ /**
+ * This method will add the category with id @p id to the list of matching categories.
+ * If the list is empty, only transaction with a single asset/liability account will match.
+ *
+ * @param id internal ID of the account
+ */
+ void addCategory(const QString& id);
+
+ /**
+ * This is a convenience method and behaves exactly like the above
+ * method but for a list of id's.
+ */
+ void addCategory(const QStringList& ids);
+
+ /**
+ * This method sets the date filter to match only transactions with posting dates in
+ * the date range specified by @p from and @p to. If @p from equal QDate()
+ * all transactions with dates prior to @p to match. If @p to equals QDate()
+ * all transactions with posting dates past @p from match. If @p from and @p to
+ * are equal QDate() the filter is not activated and all transactions match.
+ *
+ * @param from from date
+ * @param to to date
+ */
+ void setDateFilter(const QDate& from, const QDate& to);
+
+ void setDateFilter(dateOptionE range);
+
+ /**
+ * This method sets the amount filter to match only transactions with
+ * an amount in the range specified by @p from and @p to.
+ * If a specific amount should be searched, @p from and @p to should be
+ * the same value.
+ *
+ * @param from smallest value to match
+ * @param to largest value to match
+ */
+ void setAmountFilter(const MyMoneyMoney& from, const MyMoneyMoney& to);
+
+ /**
+ * This method will add the payee with id @p id to the list of matching payees.
+ * If the list is empty, any transaction will match.
+ *
+ * @param id internal id of the payee
+ */
+ void addPayee(const QString& id);
+
+ /**
+ */
+ void addType(const int type);
+
+ /**
+ */
+ void addValidity(const int type);
+
+ /**
+ */
+ void addState(const int state);
+
+ /**
+ * This method sets the number filter to match only transactions with
+ * a number in the range specified by @p from and @p to.
+ * If a specific number should be searched, @p from and @p to should be
+ * the same value.
+ *
+ * @param from smallest value to match
+ * @param to largest value to match
+ *
+ * @note @p from and @p to can contain alphanumeric text
+ */
+ void setNumberFilter(const QString& from, const QString& to);
+
+ /**
+ * This method is used to check a specific transaction against the filter.
+ * The transaction will match the whole filter, if all specified filters
+ * match. If the filter is cleared using the clear() method, any transaciton
+ * matches.
+ *
+ * @param transaction A transaction
+ *
+ * @retval true The transaction matches the filter set
+ * @retval false The transaction does not match at least one of
+ * the filters in the filter set
+ */
+ bool match(const MyMoneyTransaction& transaction);
+
+ /**
+ * This method is used to check a specific split against the
+ * text filter. The split will match if all specified and
+ * checked filters match. If the filter is cleared using the clear()
+ * method, any split matches.
+ *
+ * @param sp pointer to the split to be checked
+ *
+ * @retval true The split matches the filter set
+ * @retval false The split does not match at least one of
+ * the filters in the filter set
+ */
+ bool matchText(const MyMoneySplit * const sp) const;
+
+ /**
+ * This method is used to check a specific split against the
+ * amount filter. The split will match if all specified and
+ * checked filters match. If the filter is cleared using the clear()
+ * method, any split matches.
+ *
+ * @param sp pointer to the split to be checked
+ *
+ * @retval true The split matches the filter set
+ * @retval false The split does not match at least one of
+ * the filters in the filter set
+ */
+ bool matchAmount(const MyMoneySplit * const sp) const;
+
+ /**
+ * Convenience method which actually returns matchText(sp) && matchAmount(sp).
+ */
+ bool match(const MyMoneySplit * const sp) const;
+
+ /**
+ * This method is used to switch the amount of splits reported
+ * by matchingSplits(). If the argument @p report is @p true (the default
+ * if no argument specified) then matchingSplits() will return all
+ * matching splits of the transaction. If @p report is set to @p false,
+ * then only the very first matching split will be returned by
+ * matchingSplits().
+ *
+ * @param report controls the behaviour of matchingsSplits() as explained above.
+ */
+ void setReportAllSplits(const bool report = true);
+
+ void setConsiderCategory(const bool check = true);
+
+ /**
+ * This method returns a list of the matching splits for the filter.
+ * If m_reportAllSplits is set to false, then only the very first
+ * split will be returned. Use setReportAllSplits() to change the
+ * behaviour.
+ *
+ * @return reference list of MyMoneySplit objects containing the
+ * matching splits. If multiple splits match, only the first
+ * one will be returned.
+ *
+ * @note an empty list will be returned, if the filter only required
+ * to check the data contained in the MyMoneyTransaction
+ * object (e.g. posting-date, state, etc.).
+ *
+ * @note The constructors set m_reportAllSplits differently. Please
+ * see the documentation of the constructors MyMoneyTransactionFilter()
+ * and MyMoneyTransactionFilter(const QString&) for details.
+ */
+ const QValueList<MyMoneySplit>& matchingSplits(void) const;
+
+ /**
+ * This method returns the from date set in the filter. If
+ * no value has been set up for this filter, then QDate() is
+ * returned.
+ *
+ * @return returns m_fromDate
+ */
+ const QDate fromDate(void) const { return m_fromDate; };
+
+ /**
+ * This method returns the to date set in the filter. If
+ * no value has been set up for this filter, then QDate() is
+ * returned.
+ *
+ * @return returns m_toDate
+ */
+ const QDate toDate(void) const { return m_toDate; };
+
+ /**
+ * This method is used to return information about the
+ * presence of a specific category in the category filter.
+ * The category in question is included in the filter set,
+ * if it has been set or no category filter is set.
+ *
+ * @param cat id of category in question
+ * @return true if category is in filter set, false otherwise
+ */
+ bool includesCategory( const QString& cat ) const;
+
+ /**
+ * This method is used to return information about the
+ * presence of a specific account in the account filter.
+ * The account in question is included in the filter set,
+ * if it has been set or no account filter is set.
+ *
+ * @param acc id of account in question
+ * @return true if account is in filter set, false otherwise
+ */
+ bool includesAccount( const QString& acc ) const;
+
+ /**
+ * This method is used to return information about the
+ * presence of a specific payee in the account filter.
+ * The payee in question is included in the filter set,
+ * if it has been set or no account filter is set.
+ *
+ * @param pye id of payee in question
+ * @return true if payee is in filter set, false otherwise
+ */
+ bool includesPayee( const QString& pye ) const;
+
+ /**
+ * This method is used to return information about the
+ * presence of a date filter.
+ *
+ * @param from result value for the beginning of the date range
+ * @param to result value for the end of the date range
+ * @return true if an amount filter is set
+ */
+ bool dateFilter( QDate& from, QDate& to ) const;
+
+ /**
+ * This method is used to return information about the
+ * presence of an amount filter.
+ *
+ * @param from result value for the low end of the amount range
+ * @param to result value for the high end of the amount range
+ * @return true if an amount filter is set
+ */
+ bool amountFilter( MyMoneyMoney& from, MyMoneyMoney& to ) const;
+
+ /**
+ * This method is used to return information about the
+ * presence of an number filter.
+ *
+ * @param from result value for the low end of the number range
+ * @param to result value for the high end of the number range
+ * @return true if a number filter is set
+ */
+ bool numberFilter( QString& from, QString& to ) const;
+
+ /**
+ * This method returns whether a payee filter has been set,
+ * and if so, it returns all the payees set in the filter.
+ *
+ * @param list list to append payees into
+ * @return return true if a payee filter has been set
+ */
+ bool payees(QStringList& list) const;
+
+ /**
+ * This method returns whether an account filter has been set,
+ * and if so, it returns all the accounts set in the filter.
+ *
+ * @param list list to append accounts into
+ * @return return true if an account filter has been set
+ */
+ bool accounts(QStringList& list) const;
+
+ /**
+ * This method returns whether a category filter has been set,
+ * and if so, it returns all the categories set in the filter.
+ *
+ * @param list list to append categories into
+ * @return return true if a category filter has been set
+ */
+ bool categories(QStringList& list) const;
+
+ /**
+ * This method returns whether a type filter has been set,
+ * and if so, it returns the first type in the filter.
+ *
+ * @param i int to replace with first type filter, untouched otherwise
+ * @return return true if a type filter has been set
+ */
+ bool firstType(int& i) const;
+
+ bool types(QValueList<int>& list) const;
+
+ /**
+ * This method returns whether a state filter has been set,
+ * and if so, it returns the first state in the filter.
+ *
+ * @param i reference to int to replace with first state filter, untouched otherwise
+ * @return return true if a state filter has been set
+ */
+ bool firstState(int& i) const;
+
+ bool states(QValueList<int>& list) const;
+ /**
+ * This method returns whether a text filter has been set,
+ * and if so, it returns the text filter.
+ *
+ * @param text regexp to replace with text filter, or blank if none set
+ * @return return true if a text filter has been set
+ */
+ bool textFilter(QRegExp& text) const;
+
+ /**
+ * This method returns whether the text filter should return
+ * that DO NOT contain the text
+ */
+ bool isInvertingText(void) const {return m_invertText;};
+
+ /**
+ * This method translates a plain-language date range into QDate
+ * start & end
+ *
+ * @param range Plain-language range of dates, e.g. 'CurrentYear'
+ * @param start QDate will be set to corresponding to the first date in @p range
+ * @param end QDate will be set to corresponding to the last date in @p range
+ * @return return true if a range was successfully set, or false if @p range was invalid
+ */
+ static bool translateDateRange(dateOptionE range, QDate& start, QDate& end);
+
+ static void setFiscalYearStart(int firstMonth, int firstDay);
+
+ FilterSet filterSet(void) const { return m_filterSet; };
+
+ /**
+ * This member removes all references to object identified by @p id. Used
+ * to remove objects which are about to be removed from the engine.
+ */
+ void removeReference(const QString& id);
+
+private:
+ /**
+ * This is a conversion tool from MyMoneySplit::reconcileFlagE
+ * to MyMoneyTransactionFilter::stateE types
+ *
+ * @param split reference to split in question
+ *
+ * @return converted reconcile flag of the split passed as parameter
+ */
+ int splitState(const MyMoneySplit& split) const;
+
+ /**
+ * This is a conversion tool from MyMoneySplit::action
+ * to MyMoneyTransactionFilter::typeE types
+ *
+ * @param t reference to transaction
+ * @param split reference to split in question
+ *
+ * @return converted action of the split passed as parameter
+ */
+ int splitType(const MyMoneyTransaction& t, const MyMoneySplit& split) const;
+
+ /**
+ * This method checks if a transaction is valid or not. A transaction
+ * is considered valid, if the sum of all splits is zero, invalid otherwise.
+ *
+ * @param transaction reference to transaction to be checked
+ * @retval valid transaction is valid
+ * @retval invalid transaction is invalid
+ */
+ validityOptionE validTransaction(const MyMoneyTransaction& transaction) const;
+
+protected:
+ FilterSet m_filterSet;
+ bool m_reportAllSplits;
+ bool m_considerCategory;
+
+ QRegExp m_text;
+ bool m_invertText;
+ QAsciiDict<char> m_accounts;
+ QAsciiDict<char> m_payees;
+ QAsciiDict<char> m_categories;
+ QIntDict<char> m_states;
+ QIntDict<char> m_types;
+ QIntDict<char> m_validity;
+ QString m_fromNr, m_toNr;
+ QDate m_fromDate, m_toDate;
+ MyMoneyMoney m_fromAmount, m_toAmount;
+ QValueList<MyMoneySplit> m_matchingSplits;
+};
+
+#endif
diff --git a/kmymoney2/mymoney/mymoneytransactiontest.cpp b/kmymoney2/mymoney/mymoneytransactiontest.cpp
new file mode 100644
index 0000000..11af6b3
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneytransactiontest.cpp
@@ -0,0 +1,628 @@
+/***************************************************************************
+ mymoneytransactiontest.cpp
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "mymoneytransactiontest.h"
+
+MyMoneyTransactionTest::MyMoneyTransactionTest ()
+{
+}
+
+
+void MyMoneyTransactionTest::setUp () {
+ m = new MyMoneyTransaction();
+}
+
+void MyMoneyTransactionTest::tearDown () {
+ delete m;
+}
+
+void MyMoneyTransactionTest::testEmptyConstructor() {
+ CPPUNIT_ASSERT(m->id().isEmpty());
+ CPPUNIT_ASSERT(m->entryDate() == QDate());
+ CPPUNIT_ASSERT(m->memo().isEmpty());
+ CPPUNIT_ASSERT(m->splits().count() == 0);
+}
+
+void MyMoneyTransactionTest::testSetFunctions() {
+ m->setMemo("Memo");
+ m->setPostDate(QDate(1,2,3));
+
+ CPPUNIT_ASSERT(m->postDate() == QDate(1,2,3));
+ CPPUNIT_ASSERT(m->memo() == "Memo");
+}
+
+void MyMoneyTransactionTest::testConstructor() {
+ testSetFunctions();
+ MyMoneyTransaction a("ID", *m);
+
+ CPPUNIT_ASSERT(a.id() == "ID");
+ CPPUNIT_ASSERT(a.entryDate() == QDate::currentDate());
+ CPPUNIT_ASSERT(a.memo() == "Memo");
+ CPPUNIT_ASSERT(a.postDate() == QDate(1,2,3));
+}
+
+void MyMoneyTransactionTest::testCopyConstructor() {
+ testConstructor();
+ MyMoneyTransaction a("ID", *m);
+ a.setValue("Key", "Value");
+
+ MyMoneyTransaction n(a);
+
+ CPPUNIT_ASSERT(n.id() == "ID");
+ CPPUNIT_ASSERT(n.entryDate() == QDate::currentDate());
+ CPPUNIT_ASSERT(n.memo() == "Memo");
+ CPPUNIT_ASSERT(n.postDate() == QDate(1,2,3));
+ CPPUNIT_ASSERT(n.value("Key") == "Value");
+}
+
+void MyMoneyTransactionTest::testAssignmentConstructor() {
+ testConstructor();
+ MyMoneyTransaction a("ID", *m);
+ a.setValue("Key", "Value");
+
+ MyMoneyTransaction n;
+
+ n = a;
+
+ CPPUNIT_ASSERT(n.id() == "ID");
+ CPPUNIT_ASSERT(n.entryDate() == QDate::currentDate());
+ CPPUNIT_ASSERT(n.memo() == "Memo");
+ CPPUNIT_ASSERT(n.postDate() == QDate(1,2,3));
+ CPPUNIT_ASSERT(n.value("Key") == "Value");
+}
+
+void MyMoneyTransactionTest::testEquality() {
+ testConstructor();
+
+ MyMoneyTransaction n(*m);
+
+ CPPUNIT_ASSERT(n == *m);
+ CPPUNIT_ASSERT(!(n != *m));
+}
+
+void MyMoneyTransactionTest::testInequality() {
+ testConstructor();
+
+ MyMoneyTransaction n(*m);
+
+ n.setPostDate(QDate(1,1,1));
+ CPPUNIT_ASSERT(!(n == *m));
+ CPPUNIT_ASSERT(n != *m);
+
+ n = *m;
+ n.setValue("key", "value");
+ CPPUNIT_ASSERT(!(n == *m));
+ CPPUNIT_ASSERT(n != *m);
+}
+
+void MyMoneyTransactionTest::testAddSplits() {
+ m->setId("TestID");
+ MyMoneySplit split1, split2;
+ split1.setAccountId("A000001");
+ split2.setAccountId("A000002");
+ split1.setValue(100);
+ split2.setValue(200);
+
+ try {
+ CPPUNIT_ASSERT(m->accountReferenced("A000001") == false);
+ CPPUNIT_ASSERT(m->accountReferenced("A000002") == false);
+ m->addSplit(split1);
+ m->addSplit(split2);
+ CPPUNIT_ASSERT(m->splitCount() == 2);
+ CPPUNIT_ASSERT(m->splits()[0].accountId() == "A000001");
+ CPPUNIT_ASSERT(m->splits()[1].accountId() == "A000002");
+ CPPUNIT_ASSERT(m->accountReferenced("A000001") == true);
+ CPPUNIT_ASSERT(m->accountReferenced("A000002") == true);
+ CPPUNIT_ASSERT(m->splits()[0].id() == "S0001");
+ CPPUNIT_ASSERT(m->splits()[1].id() == "S0002");
+ CPPUNIT_ASSERT(split1.id() == "S0001");
+ CPPUNIT_ASSERT(split2.id() == "S0002");
+ CPPUNIT_ASSERT(m->splits()[0].transactionId() == "TestID");
+ CPPUNIT_ASSERT(m->splits()[1].transactionId() == "TestID");
+ CPPUNIT_ASSERT(split1.transactionId() == "TestID");
+ CPPUNIT_ASSERT(split2.transactionId() == "TestID");
+
+ } catch(MyMoneyException *e) {
+ unexpectedException(e);
+ }
+
+ // try to add split with assigned ID
+ try {
+ m->addSplit(split1);
+ CPPUNIT_FAIL("Exception expected!");
+
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+}
+
+void MyMoneyTransactionTest::testModifySplits() {
+ testAddSplits();
+ MyMoneySplit split;
+
+ split = m->splits()[0];
+ split.setAccountId("A000003");
+ split.setId("S00000000");
+
+ // this one should fail, because the ID is invalid
+ try {
+ m->modifySplit(split);
+ CPPUNIT_FAIL("Exception expected");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+
+ // set id to correct value, and check that it worked
+ split.setId("S0001");
+ try {
+ m->modifySplit(split);
+ CPPUNIT_ASSERT(m->splitCount() == 2);
+ CPPUNIT_ASSERT(m->splits()[0].accountId() == "A000003");
+ CPPUNIT_ASSERT(m->splits()[1].accountId() == "A000002");
+ CPPUNIT_ASSERT(m->accountReferenced("A000001") == false);
+ CPPUNIT_ASSERT(m->accountReferenced("A000002") == true);
+ CPPUNIT_ASSERT(m->splits()[0].id() == "S0001");
+ CPPUNIT_ASSERT(m->splits()[1].id() == "S0002");
+
+ CPPUNIT_ASSERT(split.id() == "S0001");
+ CPPUNIT_ASSERT(split.accountId() == "A000003");
+
+ } catch(MyMoneyException *e) {
+ CPPUNIT_FAIL("Unexpected exception!");
+ delete e;
+ }
+}
+
+void MyMoneyTransactionTest::testDeleteSplits() {
+ testAddSplits();
+ MyMoneySplit split;
+
+ // add a third split
+ split.setAccountId("A000003");
+ split.setValue(MyMoneyMoney(300));
+ try {
+ m->addSplit(split);
+ } catch(MyMoneyException *e) {
+ CPPUNIT_FAIL("Unexpected exception!");
+ delete e;
+ }
+
+ split.setId("S00000000");
+ // this one should fail, because the ID is invalid
+ try {
+ m->modifySplit(split);
+ CPPUNIT_FAIL("Exception expected");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+
+ // set id to correct value, and check that it worked
+ split.setId("S0002");
+ try {
+ m->removeSplit(split);
+ CPPUNIT_ASSERT(m->splitCount() == 2);
+ CPPUNIT_ASSERT(m->splits()[0].accountId() == "A000001");
+ CPPUNIT_ASSERT(m->accountReferenced("A000002") == false);
+ CPPUNIT_ASSERT(m->accountReferenced("A000001") == true);
+ CPPUNIT_ASSERT(m->accountReferenced("A000003") == true);
+ CPPUNIT_ASSERT(m->splits()[0].id() == "S0001");
+
+ } catch(MyMoneyException *e) {
+ CPPUNIT_FAIL("Unexpected exception!");
+ delete e;
+ }
+
+ // set id to the other correct value, and check that it worked
+ split.setId("S0003");
+ try {
+ m->removeSplit(split);
+ CPPUNIT_ASSERT(m->splitCount() == 1);
+ CPPUNIT_ASSERT(m->accountReferenced("A000001") == true);
+ CPPUNIT_ASSERT(m->accountReferenced("A000003") == false);
+ CPPUNIT_ASSERT(m->splits()[0].id() == "S0001");
+
+ } catch(MyMoneyException *e) {
+ CPPUNIT_FAIL("Unexpected exception!");
+ delete e;
+ }
+}
+
+void MyMoneyTransactionTest::testDeleteAllSplits() {
+ testAddSplits();
+
+ try {
+ m->removeSplits();
+ CPPUNIT_ASSERT(m->splitCount() == 0);
+ } catch(MyMoneyException *e) {
+ CPPUNIT_FAIL("Unexpected exception!");
+ delete e;
+ }
+}
+
+void MyMoneyTransactionTest::testExtractSplit() {
+ testAddSplits();
+ MyMoneySplit split;
+
+ // this one should fail, as the account is not referenced by
+ // any split in the transaction
+ try {
+ split = m->splitByAccount(QString("A000003"));
+ CPPUNIT_FAIL("Exception expected");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+
+ // this one should be found
+ try {
+ split = m->splitByAccount(QString("A000002"));
+ CPPUNIT_ASSERT(split.id() == "S0002");
+
+ } catch(MyMoneyException *e) {
+ CPPUNIT_FAIL("Unexpected exception!");
+ delete e;
+ }
+
+ // this one should be found also
+ try {
+ split = m->splitByAccount(QString("A000002"), false);
+ CPPUNIT_ASSERT(split.id() == "S0001");
+ } catch(MyMoneyException *e) {
+ CPPUNIT_FAIL("Unexpected exception!");
+ delete e;
+ }
+}
+
+void MyMoneyTransactionTest::testSplitSum() {
+ CPPUNIT_ASSERT(m->splitSum().isZero());
+
+ testAddSplits();
+
+ MyMoneySplit s1, s2;
+
+ s1 = m->splits()[0];
+ s1.setValue(0);
+ s2 = m->splits()[1];
+ s2.setValue(0);
+
+ m->modifySplit(s1);
+ m->modifySplit(s2);
+ CPPUNIT_ASSERT(m->splitSum().isZero());
+
+ s1.setValue(1234);
+ m->modifySplit(s1);
+ CPPUNIT_ASSERT(m->splitSum() == MyMoneyMoney(1234));
+
+ s2.setValue(-1234);
+ m->modifySplit(s2);
+ CPPUNIT_ASSERT(m->splitSum().isZero());
+
+ s1.setValue(5678);
+ m->modifySplit(s1);
+ CPPUNIT_ASSERT(m->splitSum() == MyMoneyMoney(4444));
+}
+
+void MyMoneyTransactionTest::testIsLoanPayment() {
+ testAddSplits();
+ CPPUNIT_ASSERT(m->isLoanPayment() == false);
+
+ MyMoneySplit s1, s2;
+ s1 = m->splits()[0];
+ s2 = m->splits()[1];
+
+ s1.setAction(MyMoneySplit::ActionAmortization);
+ m->modifySplit(s1);
+ CPPUNIT_ASSERT(m->isLoanPayment() == true);
+ s1.setAction(MyMoneySplit::ActionWithdrawal);
+ m->modifySplit(s1);
+ CPPUNIT_ASSERT(m->isLoanPayment() == false);
+
+ s2.setAction(MyMoneySplit::ActionAmortization);
+ m->modifySplit(s2);
+ CPPUNIT_ASSERT(m->isLoanPayment() == true);
+ s2.setAction(MyMoneySplit::ActionWithdrawal);
+ m->modifySplit(s2);
+ CPPUNIT_ASSERT(m->isLoanPayment() == false);
+}
+
+void MyMoneyTransactionTest::testAddDuplicateAccount() {
+ testAddSplits();
+
+ MyMoneySplit split1, split2;
+ split1.setAccountId("A000001");
+ split2.setAccountId("A000002");
+ split1.setValue(100);
+ split2.setValue(200);
+
+ try {
+ CPPUNIT_ASSERT(m->accountReferenced("A000001") == true);
+ CPPUNIT_ASSERT(m->accountReferenced("A000002") == true);
+ m->addSplit(split1);
+ m->addSplit(split2);
+ CPPUNIT_ASSERT(m->splitCount() == 2);
+ CPPUNIT_ASSERT(m->splits()[0].accountId() == "A000001");
+ CPPUNIT_ASSERT(m->splits()[1].accountId() == "A000002");
+ CPPUNIT_ASSERT(m->accountReferenced("A000001") == true);
+ CPPUNIT_ASSERT(m->accountReferenced("A000002") == true);
+ CPPUNIT_ASSERT(m->splits()[0].id() == "S0001");
+ CPPUNIT_ASSERT(m->splits()[1].id() == "S0002");
+ CPPUNIT_ASSERT(split1.id() == "S0001");
+ CPPUNIT_ASSERT(split2.id() == "S0002");
+
+ } catch(MyMoneyException *e) {
+ unexpectedException(e);
+ }
+
+ CPPUNIT_ASSERT(m->splits()[0].value() == MyMoneyMoney(200));
+ CPPUNIT_ASSERT(m->splits()[1].value() == MyMoneyMoney(400));
+}
+
+void MyMoneyTransactionTest::testModifyDuplicateAccount() {
+ testAddSplits();
+ MyMoneySplit split;
+
+ split = m->splitByAccount(QString("A000002"));
+ split.setAccountId("A000001");
+ try {
+ m->modifySplit(split);
+ CPPUNIT_ASSERT(m->splitCount() == 1);
+ CPPUNIT_ASSERT(m->accountReferenced("A000001") == true);
+ CPPUNIT_ASSERT(m->splits()[0].value() == MyMoneyMoney(300));
+
+ } catch(MyMoneyException *e) {
+ unexpectedException(e);
+ }
+}
+void MyMoneyTransactionTest::testWriteXML() {
+ MyMoneyTransaction t;
+ t.setPostDate(QDate(2001,12,28));
+ t.setEntryDate(QDate(2003,9,29));
+ t.setId("T000000000000000001");
+ t.setMemo("Wohnung:Miete");
+ t.setCommodity("EUR");
+ t.setValue("key", "value");
+
+ MyMoneySplit s;
+ s.setPayeeId("P000001");
+ s.setShares(MyMoneyMoney(96379, 100));
+ s.setValue(MyMoneyMoney(96379, 100));
+ s.setAction(MyMoneySplit::ActionWithdrawal);
+ s.setAccountId("A000076");
+ s.setReconcileFlag(MyMoneySplit::Reconciled);
+ s.setBankID("SPID");
+ t.addSplit(s);
+
+ QDomDocument doc("TEST");
+ QDomElement el = doc.createElement("TRANSACTION-CONTAINER");
+ doc.appendChild(el);
+ t.writeXML(doc, el);
+
+ QString ref = QString(
+ "<!DOCTYPE TEST>\n"
+ "<TRANSACTION-CONTAINER>\n"
+ " <TRANSACTION postdate=\"2001-12-28\" memo=\"Wohnung:Miete\" id=\"T000000000000000001\" commodity=\"EUR\" entrydate=\"2003-09-29\" >\n"
+ " <SPLITS>\n"
+ " <SPLIT payee=\"P000001\" reconciledate=\"\" shares=\"96379/100\" action=\"Withdrawal\" bankid=\"SPID\" number=\"\" reconcileflag=\"2\" memo=\"\" value=\"96379/100\" id=\"S0001\" account=\"A000076\" />\n"
+ " </SPLITS>\n"
+ " <KEYVALUEPAIRS>\n"
+ " <PAIR key=\"key\" value=\"value\" />\n"
+ " </KEYVALUEPAIRS>\n"
+ " </TRANSACTION>\n"
+ "</TRANSACTION-CONTAINER>\n"
+
+ );
+
+ CPPUNIT_ASSERT(doc.toString() == ref);
+}
+
+void MyMoneyTransactionTest::testReadXML() {
+ MyMoneyTransaction t;
+
+ QString ref_ok = QString(
+ "<!DOCTYPE TEST>\n"
+ "<TRANSACTION-CONTAINER>\n"
+ " <TRANSACTION postdate=\"2001-12-28\" memo=\"Wohnung:Miete\" id=\"T000000000000000001\" commodity=\"EUR\" entrydate=\"2003-09-29\" >\n"
+ " <SPLITS>\n"
+ " <SPLIT payee=\"P000001\" reconciledate=\"\" shares=\"96379/100\" action=\"Withdrawal\" bankid=\"SPID\" number=\"\" reconcileflag=\"2\" memo=\"\" value=\"96379/100\" account=\"A000076\" />\n"
+ " </SPLITS>\n"
+ " <KEYVALUEPAIRS>\n"
+ " <PAIR key=\"key\" value=\"value\" />\n"
+ " </KEYVALUEPAIRS>\n"
+ " </TRANSACTION>\n"
+ "</TRANSACTION-CONTAINER>\n"
+ );
+
+ QString ref_false = QString(
+ "<!DOCTYPE TEST>\n"
+ "<TRANSACTION-CONTAINER>\n"
+ " <TRANS-ACTION postdate=\"2001-12-28\" memo=\"Wohnung:Miete\" id=\"T000000000000000001\" commodity=\"EUR\" entrydate=\"2003-09-29\" >\n"
+ " <SPLITS>\n"
+ " <SPLIT payee=\"P000001\" reconciledate=\"\" shares=\"96379/100\" action=\"Withdrawal\" bankid=\"SPID\" number=\"\" reconcileflag=\"2\" memo=\"\" value=\"96379/100\" account=\"A000076\" />\n"
+ " </SPLITS>\n"
+ " <KEYVALUEPAIRS>\n"
+ " <PAIR key=\"key\" value=\"value\" />\n"
+ " </KEYVALUEPAIRS>\n"
+ " </TRANS-ACTION>\n"
+ "</TRANSACTION-CONTAINER>\n"
+ );
+
+ QDomDocument doc;
+ QDomElement node;
+ doc.setContent(ref_false);
+ node = doc.documentElement().firstChild().toElement();
+
+ try {
+ t = MyMoneyTransaction(node);
+ CPPUNIT_FAIL("Missing expected exception");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+
+ doc.setContent(ref_ok);
+ node = doc.documentElement().firstChild().toElement();
+
+ t.setValue("key", "VALUE");
+ try {
+ t = MyMoneyTransaction(node);
+ CPPUNIT_ASSERT(t.m_postDate == QDate(2001,12,28));
+ CPPUNIT_ASSERT(t.m_entryDate == QDate(2003,9,29));
+ CPPUNIT_ASSERT(t.id() == "T000000000000000001");
+ CPPUNIT_ASSERT(t.m_memo == "Wohnung:Miete");
+ CPPUNIT_ASSERT(t.m_commodity == "EUR");
+ CPPUNIT_ASSERT(t.pairs().count() == 1);
+ CPPUNIT_ASSERT(t.value("key") == "value");
+ CPPUNIT_ASSERT(t.splits().count() == 1);
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneyTransactionTest::testReadXMLEx()
+{
+ MyMoneyTransaction t;
+
+ QString ref_ok = QString(
+ "<!DOCTYPE TEST>\n"
+ "<TRANSACTION-CONTAINER>\n"
+ "<TRANSACTION postdate=\"2010-03-05\" memo=\"\" id=\"T000000000000004189\" commodity=\"EUR\" entrydate=\"2010-03-08\" >\n"
+ " <SPLITS>\n"
+ " <SPLIT payee=\"P000010\" reconciledate=\"\" shares=\"-125000/100\" action=\"Transfer\" bankid=\"A000076-2010-03-05-b6850c0-1\" number=\"\" reconcileflag=\"1\" memo=\"UMBUCHUNG\" value=\"-125000/100\" id=\"S0001\" account=\"A000076\" >\n"
+ " <KEYVALUEPAIRS>\n"
+ " <PAIR key=\"kmm-match-split\" value=\"S0002\" />\n"
+ " <PAIR key=\"kmm-matched-tx\" value=\"&amp;lt;!DOCTYPE MATCH>\n"
+ " &amp;lt;CONTAINER>\n"
+ " &amp;lt;TRANSACTION postdate=&quot;2010-03-05&quot; memo=&quot;UMBUCHUNG&quot; id=&quot;&quot; commodity=&quot;EUR&quot; entrydate=&quot;2010-03-08&quot; >\n"
+ " &amp;lt;SPLITS>\n"
+ " &amp;lt;SPLIT payee=&quot;P000010&quot; reconciledate=&quot;&quot; shares=&quot;125000/100&quot; action=&quot;Transfer&quot; bankid=&quot;&quot; number=&quot;&quot; reconcileflag=&quot;0&quot; memo=&quot;UMBUCHUNG&quot; value=&quot;125000/100&quot; id=&quot;S0001&quot; account=&quot;A000087&quot; />\n"
+ " &amp;lt;SPLIT payee=&quot;P000010&quot; reconciledate=&quot;&quot; shares=&quot;-125000/100&quot; action=&quot;&quot; bankid=&quot;A000076-2010-03-05-b6850c0-1&quot; number=&quot;&quot; reconcileflag=&quot;0&quot; memo=&quot;UMBUCHUNG&quot; value=&quot;-125000/100&quot; id=&quot;S0002&quot; account=&quot;A000076&quot; />\n"
+ " &amp;lt;/SPLITS>\n"
+ " &amp;lt;KEYVALUEPAIRS>\n"
+ " &amp;lt;PAIR key=&quot;Imported&quot; value=&quot;true&quot; />\n"
+ " &amp;lt;/KEYVALUEPAIRS>\n"
+ " &amp;lt;/TRANSACTION>\n"
+ " &amp;lt;/CONTAINER>\n"
+ "\" />\n"
+ " <PAIR key=\"kmm-orig-memo\" value=\"\" />\n"
+ " </KEYVALUEPAIRS>\n"
+ " </SPLIT>\n"
+ " <SPLIT payee=\"P000010\" reconciledate=\"\" shares=\"125000/100\" action=\"Transfer\" bankid=\"\" number=\"\" reconcileflag=\"0\" memo=\"\" value=\"125000/100\" id=\"S0002\" account=\"A000087\" />\n"
+ " </SPLITS>\n"
+ "</TRANSACTION>\n"
+ "</TRANSACTION-CONTAINER>\n"
+ );
+ QDomDocument doc;
+ QDomElement node;
+ doc.setContent(ref_ok);
+ node = doc.documentElement().firstChild().toElement();
+
+ try {
+ t = MyMoneyTransaction(node);
+ CPPUNIT_ASSERT(t.pairs().count() == 0);
+ CPPUNIT_ASSERT(t.splits().count() == 2);
+ CPPUNIT_ASSERT(t.splits()[0].pairs().count() == 3);
+ CPPUNIT_ASSERT(t.splits()[1].pairs().count() == 0);
+ CPPUNIT_ASSERT(t.splits()[0].isMatched());
+
+ MyMoneyTransaction ti = t.splits()[0].matchedTransaction();
+ CPPUNIT_ASSERT(ti.pairs().count() == 1);
+ CPPUNIT_ASSERT(ti.isImported());
+ CPPUNIT_ASSERT(ti.splits().count() == 2);
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+}
+
+void MyMoneyTransactionTest::testHasReferenceTo()
+{
+ MyMoneyTransaction t;
+ t.setPostDate(QDate(2001,12,28));
+ t.setEntryDate(QDate(2003,9,29));
+ t.setId("T000000000000000001");
+ t.setMemo("Wohnung:Miete");
+ t.setCommodity("EUR");
+ t.setValue("key", "value");
+
+ MyMoneySplit s;
+ s.setPayeeId("P000001");
+ s.setShares(MyMoneyMoney(96379, 100));
+ s.setValue(MyMoneyMoney(96379, 100));
+ s.setAction(MyMoneySplit::ActionWithdrawal);
+ s.setAccountId("A000076");
+ s.setReconcileFlag(MyMoneySplit::Reconciled);
+ t.addSplit(s);
+
+ CPPUNIT_ASSERT(t.hasReferenceTo("EUR") == true);
+ CPPUNIT_ASSERT(t.hasReferenceTo("P000001") == true);
+ CPPUNIT_ASSERT(t.hasReferenceTo("A000076") == true);
+}
+
+void MyMoneyTransactionTest::testAutoCalc()
+{
+ CPPUNIT_ASSERT(m->hasAutoCalcSplit() == false);
+ testAddSplits();
+ CPPUNIT_ASSERT(m->hasAutoCalcSplit() == false);
+ MyMoneySplit split;
+
+ split = m->splits()[0];
+ split.setShares(MyMoneyMoney::autoCalc);
+ split.setValue(MyMoneyMoney::autoCalc);
+ m->modifySplit(split);
+
+ CPPUNIT_ASSERT(m->hasAutoCalcSplit() == true);
+}
+
+void MyMoneyTransactionTest::testIsStockSplit()
+{
+ CPPUNIT_ASSERT(m->isStockSplit() == false);
+ testAddSplits();
+ CPPUNIT_ASSERT(m->isStockSplit() == false);
+ m->removeSplits();
+ MyMoneySplit s;
+ s.setShares(MyMoneyMoney(1,2));
+ s.setAction(MyMoneySplit::ActionSplitShares);
+ s.setAccountId("A0001");
+ m->addSplit(s);
+ CPPUNIT_ASSERT(m->isStockSplit() == true);
+}
+
+void MyMoneyTransactionTest::testAddMissingAccountId()
+{
+ MyMoneySplit s;
+ s.setShares(MyMoneyMoney(1,2));
+ try {
+ m->addSplit(s);
+ CPPUNIT_FAIL("Missing expected exception");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+}
+
+void MyMoneyTransactionTest::testModifyMissingAccountId()
+{
+ testAddSplits();
+ MyMoneySplit s = m->splits()[0];
+ s.setAccountId(QString());
+
+ try {
+ m->modifySplit(s);
+ CPPUNIT_FAIL("Missing expected exception");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+}
+
diff --git a/kmymoney2/mymoney/mymoneytransactiontest.h b/kmymoney2/mymoney/mymoneytransactiontest.h
new file mode 100644
index 0000000..c2bb0da
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneytransactiontest.h
@@ -0,0 +1,96 @@
+/***************************************************************************
+ mymoneytransactiontest.h
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef __MYMONEYTRANSACTIONTEST_H__
+#define __MYMONEYTRANSACTIONTEST_H__
+
+/*
+#include <cppunit/TestCaller.h>
+#include <cppunit/TestCase.h>
+#include <cppunit/TestSuite.h>
+*/
+#include <cppunit/extensions/HelperMacros.h>
+#include "autotest.h"
+
+#define private public
+#define protected public
+#include "mymoneytransaction.h"
+#undef private
+
+class MyMoneyTransactionTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(MyMoneyTransactionTest);
+ CPPUNIT_TEST(testEmptyConstructor);
+ CPPUNIT_TEST(testSetFunctions);
+ CPPUNIT_TEST(testConstructor);
+ CPPUNIT_TEST(testCopyConstructor);
+ CPPUNIT_TEST(testAssignmentConstructor);
+ CPPUNIT_TEST(testAddSplits);
+ CPPUNIT_TEST(testModifySplits);
+ CPPUNIT_TEST(testDeleteSplits);
+ CPPUNIT_TEST(testDeleteAllSplits);
+ CPPUNIT_TEST(testEquality);
+ CPPUNIT_TEST(testInequality);
+ CPPUNIT_TEST(testExtractSplit);
+ CPPUNIT_TEST(testSplitSum);
+ CPPUNIT_TEST(testIsLoanPayment);
+ CPPUNIT_TEST(testWriteXML);
+ CPPUNIT_TEST(testReadXML);
+ CPPUNIT_TEST(testReadXMLEx);
+ CPPUNIT_TEST(testAutoCalc);
+ CPPUNIT_TEST(testHasReferenceTo);
+ CPPUNIT_TEST(testIsStockSplit);
+ CPPUNIT_TEST(testAddMissingAccountId);
+ CPPUNIT_TEST(testModifyMissingAccountId);
+#if 0
+ CPPUNIT_TEST(testAddDuplicateAccount);
+ CPPUNIT_TEST(testModifyDuplicateAccount);
+#endif
+ CPPUNIT_TEST_SUITE_END();
+
+protected:
+ MyMoneyTransaction *m;
+
+public:
+ MyMoneyTransactionTest ();
+
+ void setUp ();
+ void tearDown ();
+ void testEmptyConstructor();
+ void testSetFunctions();
+ void testConstructor();
+ void testCopyConstructor();
+ void testAssignmentConstructor();
+ void testEquality();
+ void testInequality();
+ void testAddSplits();
+ void testModifySplits();
+ void testDeleteSplits();
+ void testExtractSplit();
+ void testDeleteAllSplits();
+ void testSplitSum();
+ void testIsLoanPayment();
+ void testAddDuplicateAccount();
+ void testModifyDuplicateAccount();
+ void testWriteXML();
+ void testReadXML();
+ void testReadXMLEx();
+ void testAutoCalc();
+ void testHasReferenceTo();
+ void testIsStockSplit();
+ void testAddMissingAccountId();
+ void testModifyMissingAccountId();
+};
+#endif
diff --git a/kmymoney2/mymoney/mymoneyutils.cpp b/kmymoney2/mymoney/mymoneyutils.cpp
new file mode 100644
index 0000000..3739f9a
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyutils.cpp
@@ -0,0 +1,339 @@
+/***************************************************************************
+ mymoneyutils.cpp - description
+ -------------------
+ begin : Tue Jan 29 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include <iostream>
+
+#include "mymoneyutils.h"
+#include "mymoneyaccount.h"
+
+#include <cstdio>
+#include <cstdarg>
+#include <cstdlib>
+
+#include <qregexp.h>
+
+#ifdef _CHECK_MEMORY
+
+#undef new
+#undef _CheckMemory_Leak
+#undef _CheckMemory_FreeAll
+
+_CheckMemory chkmem;
+bool enable=false;
+
+_CheckMemoryEntry::_CheckMemoryEntry(void *p, int line, size_t size, const char *file)
+ : m_p(p), m_line(line), m_size(size), m_file(file)
+{
+}
+
+_CheckMemoryEntry::_CheckMemoryEntry()
+ : m_p(0), m_line(0), m_size(0)
+{
+}
+
+
+/////////////////////////////////////////////////////////////////////////////////////////
+_CheckMemory::_CheckMemory()
+{
+ outfunc = (_CheckMemoryOutFunc *)NULL;
+}
+
+_CheckMemory::_CheckMemory(_CheckMemoryOutFunc *out)
+{
+ outfunc = out;
+}
+
+_CheckMemory::~_CheckMemory()
+{
+}
+
+_CheckMemoryOutFunc *_CheckMemory::SetOutFunc(_CheckMemoryOutFunc *out)
+{
+ _CheckMemoryOutFunc *old;
+ old = outfunc;
+ outfunc = out;
+ return old;
+}
+
+void _CheckMemory::Output(const char *fmt,...)
+{
+ va_list args;
+ char buf[128];
+ va_start(args,fmt);
+ if(outfunc) {
+ vsprintf(buf,fmt,args);
+ outfunc(buf);
+ }
+ else {
+ vfprintf(stderr,fmt,args);
+ putc('\n', stderr);
+ }
+ va_end(args);
+}
+
+int _CheckMemory::TableCount(void)
+{
+ return table.size();
+}
+
+bool _CheckMemory::CheckMemoryLeak(bool freeall)
+{
+ bool d = false;
+ size_t total = 0;
+ int freec = 0;
+ CheckMemoryTable::ConstIterator it;
+
+ for(it = table.begin(); it != table.end(); ++it) {
+ if((*it).pointer() != 0) {
+ total += (*it).size();
+ freec++;
+ if(d == false) {
+ Output("CheckMemory++: CheckMemoryLeak: Memory leak detected!");
+ Output("Position |Size(bytes) |Allocated at");
+ d=true;
+ }
+ if(d==true)
+ Output("%p |%-13d|%s:%d",(*it).pointer(),(int)(*it).size(),(*it).file(),(*it).line());
+ }
+ }
+ if(d == true)
+ Output("You have forgotten to free %d object(s), %d bytes of memory.",freec, (int)total);
+ else
+ Output("CheckMemory++: CheckMemoryLeak: No memory leak detected.");
+ if(freeall == true)
+ FreeAll();
+ return true;
+}
+
+void _CheckMemory::FreeAll()
+{
+ size_t total=0;
+ int freec=0;
+ CheckMemoryTable::Iterator it;
+
+ for(it = table.begin(); it != table.end(); it = table.begin()) {
+ if((*it).pointer() != 0) {
+ total += (*it).size();
+ freec++;
+ Output("CheckMemory++: FreeAll: freed %d bytes of memory at %p.",(int)(*it).size(),(*it).pointer());
+ free((*it).pointer());
+ }
+ table.remove(it);
+ }
+ Output("CheckMemory++: FreeAll: Totally freed %d objects, %d bytes of memory.",freec,(int)total);
+}
+
+void _CheckMemory_Init(_CheckMemoryOutFunc *out)
+{
+ if(enable!=true) {
+ chkmem.Restart();
+ chkmem.SetOutFunc(out);
+ enable=true;
+ }
+}
+
+void _CheckMemory_End()
+{
+ if(enable!=false) {
+ chkmem.Restart();
+ chkmem.SetOutFunc(NULL);
+ enable=false;
+ }
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+void *operator new(size_t s,const char *file,int line) throw()
+{
+ void *p = malloc(s);
+
+ if(p == NULL) throw;
+ if(enable==true) {
+ _CheckMemoryEntry entry(p, line, s, file);
+ chkmem.table[p] = entry;
+ }
+ return p;
+}
+
+void * operator new [] (size_t s,const char *file,int line) throw()
+{
+ void *p = malloc(s);
+
+ if(p == NULL) throw;
+ if(enable==true) {
+ _CheckMemoryEntry entry(p, line, s, file);
+ chkmem.table[p] = entry;
+ }
+ return p;
+}
+
+void operator delete(void *p) throw()
+{
+ if(enable==true) {
+ CheckMemoryTable::Iterator it;
+ it = chkmem.table.find(p);
+ if(it != chkmem.table.end()) {
+ chkmem.table.remove(it);
+ }
+ }
+ free(p);
+}
+
+void operator delete [] (void *p) throw()
+{
+ if(enable==true) {
+ CheckMemoryTable::Iterator it;
+ it = chkmem.table.find(p);
+ if(it != chkmem.table.end()) {
+ chkmem.table.remove(it);
+ }
+ }
+ free(p);
+}
+
+#endif // _CHECK_MEMORY
+
+QString MyMoneyUtils::getFileExtension(QString strFileName)
+{
+ QString strTemp;
+ if(!strFileName.isEmpty())
+ {
+ //find last . delminator
+ int nLoc = strFileName.findRev('.');
+ if(nLoc != -1)
+ {
+ strTemp = strFileName.right(strFileName.length() - (nLoc + 1));
+ return strTemp.upper();
+ }
+ }
+ return strTemp;
+}
+
+int MyMoneyTracer::m_indentLevel = 0;
+int MyMoneyTracer::m_onoff = 0;
+
+MyMoneyTracer::MyMoneyTracer(const char* name)
+{
+ if(m_onoff) {
+ QRegExp exp("(.*)::(.*)");
+ if(exp.search(name) != -1) {
+ m_className = exp.cap(1);
+ m_memberName = exp.cap(2);
+ } else {
+ m_className = QString(name);
+ m_memberName = QString();
+ }
+ QString indent;
+ indent.fill(' ', m_indentLevel);
+ std::cerr << indent.latin1() << "ENTER: " << m_className.latin1() << "::" << m_memberName.latin1() << std::endl;
+ }
+ m_indentLevel += 2;
+}
+
+MyMoneyTracer::MyMoneyTracer(const QString& className, const QString& memberName) :
+ m_className(className),
+ m_memberName(memberName)
+{
+ if(m_onoff) {
+ QString indent;
+ indent.fill(' ', m_indentLevel);
+ std::cerr << indent.latin1() << "ENTER: " << m_className.latin1() << "::" << m_memberName.latin1() << std::endl;
+ }
+ m_indentLevel += 2;
+}
+
+MyMoneyTracer::~MyMoneyTracer()
+{
+ m_indentLevel -= 2;
+ if(m_onoff) {
+ QString indent;
+ indent.fill(' ', m_indentLevel);
+ std::cerr << indent.latin1() << "LEAVE: " << m_className.latin1() << "::" << m_memberName.latin1() << std::endl;
+ }
+}
+
+void MyMoneyTracer::printf(const char *format, ...) const
+{
+ if(m_onoff) {
+ va_list args;
+ va_start(args, format);
+ QString indent;
+ indent.fill(' ', m_indentLevel);
+ std::cerr << indent.latin1();
+
+ vfprintf(stderr,format,args);
+ putc('\n', stderr);
+ va_end(args);
+ }
+}
+
+void MyMoneyTracer::onOff(int onOff)
+{
+ m_onoff = onOff;
+}
+
+void MyMoneyTracer::on(void)
+{
+ m_onoff = 1;
+}
+
+void MyMoneyTracer::off(void)
+{
+ m_onoff = 0;
+}
+
+QString dateToString(const QDate& date)
+{
+ if(!date.isNull() && date.isValid())
+ return date.toString(Qt::ISODate);
+
+ return QString();
+}
+
+QDate stringToDate(const QString& str)
+{
+ if(str.length()) {
+ QDate date = QDate::fromString(str, Qt::ISODate);
+ if(!date.isNull() && date.isValid())
+ return date;
+ }
+ return QDate();
+}
+
+QString QStringEmpty(const QString& val)
+{
+ if(!val.isEmpty())
+ return QString(val);
+
+ return QString();
+}
+
+unsigned long extractId(const QString& txt)
+{
+ int pos;
+ unsigned long rc = 0;
+
+ pos = txt.find(QRegExp("\\d+"), 0);
+ if(pos != -1) {
+ rc = atol(txt.mid(pos));
+ }
+ return rc;
+}
diff --git a/kmymoney2/mymoney/mymoneyutils.h b/kmymoney2/mymoney/mymoneyutils.h
new file mode 100644
index 0000000..12bb95e
--- /dev/null
+++ b/kmymoney2/mymoney/mymoneyutils.h
@@ -0,0 +1,192 @@
+/***************************************************************************
+ mymoneyutils.h - description
+ -------------------
+ begin : Tue Jan 29 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef _MYMONEYUTILS_H_
+#define _MYMONEYUTILS_H_
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <qstring.h>
+#include <qdatetime.h>
+#include <qvaluelist.h>
+#include <kmymoney/export.h>
+#if 0
+
+//Includes for STL support below
+#include <vector>
+#include <map>
+#include <list>
+#include <string>
+using namespace std;
+
+#ifdef _UNICODE
+typedef std::wstring String;
+#else
+typedef std::string String;
+#endif
+
+#else
+
+//typedef for data type to store currency with.
+typedef long long DLONG;
+
+typedef QString String;
+#endif // 0
+
+void timetrace(const char *);
+void timestamp(const char *);
+
+//class that has utility functions to use throughout the application.
+class MyMoneyUtils
+{
+public:
+ MyMoneyUtils() {}
+ ~MyMoneyUtils() {}
+
+ //static function to add the correct file extension at the end of the file name
+ static QString getFileExtension(QString strFileName);
+
+};
+
+class KMYMONEY_EXPORT MyMoneyTracer
+{
+public:
+ MyMoneyTracer(const char* prettyName);
+#define MYMONEYTRACER(a) MyMoneyTracer a(__PRETTY_FUNCTION__)
+
+ MyMoneyTracer(const QString& className, const QString& methodName);
+ ~MyMoneyTracer();
+
+ /**
+ * This method allows to trace a printf like formatted text
+ *
+ * @param format format mask
+ */
+ void printf(const char *format, ...) const __attribute__ ((format (__printf__, 2, 3)));
+
+ static void off(void);
+ static void on(void);
+ static void onOff(int onOff);
+
+private:
+ QString m_className;
+ QString m_memberName;
+
+ static int m_indentLevel;
+ static int m_onoff;
+};
+
+#ifdef _CHECK_MEMORY
+
+#include <cstddef>
+#include <qmap.h>
+
+class _CheckMemoryEntry {
+public:
+ _CheckMemoryEntry();
+ _CheckMemoryEntry(void *p, int line, size_t size, const char *file);
+ ~_CheckMemoryEntry() {}
+
+ void * pointer(void) const { return m_p; };
+ int line(void) const { return m_line; };
+ size_t size(void) const { return m_size; };
+ const char* file(void) const { return m_file; };
+
+private:
+ void *m_p;
+ int m_line;
+ size_t m_size;
+ QString m_file;
+};
+
+typedef QMap<void *, _CheckMemoryEntry> CheckMemoryTable;
+
+typedef void _CheckMemoryOutFunc(const char *);
+
+class KMYMONEY_EXPORT _CheckMemory {
+ public:
+ _CheckMemory();
+ _CheckMemory(_CheckMemoryOutFunc *out);
+ virtual ~_CheckMemory();
+
+ _CheckMemoryOutFunc *SetOutFunc(_CheckMemoryOutFunc *out);
+ bool CheckMemoryLeak(bool freeall);
+ void FreeAll();
+ inline void Restart() { table.clear(); };
+
+ int TableCount(void);
+
+ private:
+ void Output(const char *fmt,...) __attribute__ ((format (__printf__, 2, 3)));
+
+ CheckMemoryTable table;
+ _CheckMemoryOutFunc *outfunc;
+
+ friend void * operator new(size_t s,const char *file,int line) throw();
+ friend void * operator new [] (size_t,const char *file,int line) throw();
+ friend void operator delete(void *p) throw();
+ friend void operator delete [] (void *p) throw();
+};
+
+KMYMONEY_EXPORT void * operator new(size_t s,const char *file,int line) throw(); // Normal new operator
+KMYMONEY_EXPORT void * operator new [] (size_t s,const char *file,int line) throw(); // Array new operator
+KMYMONEY_EXPORT void operator delete(void *p) throw();
+KMYMONEY_EXPORT void operator delete [] (void *p) throw();
+
+#define new new(__FILE__,__LINE__)
+
+KMYMONEY_EXPORT extern _CheckMemory chkmem;
+
+KMYMONEY_EXPORT void _CheckMemory_Init(_CheckMemoryOutFunc *out);
+KMYMONEY_EXPORT void _CheckMemory_End();
+#define _CheckMemory_Leak(freeall) chkmem.CheckMemoryLeak(freeall)
+#define _CheckMemory_FreeAll() chkmem.FreeAll()
+
+#endif // _CHECK_MEMORY
+
+/**
+ * This function returns a date in the form specified by Qt::ISODate.
+ * If the @p date is invalid an empty string will be returned.
+ *
+ * @param date const reference to date to be converted
+ * @return QString containing the converted date
+ */
+KMYMONEY_EXPORT QString dateToString(const QDate& date);
+
+/**
+ * This function returns a date as QDate object as specified by
+ * the parameter @p str. @p str must be in Qt::ISODate format.
+ * If @p str is empty or contains an invalid date, QDate() is
+ * returned.
+ *
+ * @param str date in Qt::ISODate format
+ * @return QDate object
+ */
+KMYMONEY_EXPORT QDate stringToDate(const QString& str);
+
+KMYMONEY_EXPORT QString QStringEmpty(const QString&);
+
+KMYMONEY_EXPORT unsigned long extractId(const QString& txt);
+
+#endif
diff --git a/kmymoney2/mymoney/storage/Makefile.am b/kmymoney2/mymoney/storage/Makefile.am
new file mode 100644
index 0000000..0055800
--- /dev/null
+++ b/kmymoney2/mymoney/storage/Makefile.am
@@ -0,0 +1,20 @@
+KDE_OPTIONS = noautodist
+
+INCLUDES = $(all_includes) -I$(top_srcdir) -I. -I$(top_builddir)/kmymoney2/dialogs
+
+noinst_LIBRARIES = libstorage.a
+libstorage_a_METASOURCES = AUTO
+
+libstorage_a_SOURCES = imymoneystorageformat.cpp mymoneystoragexml.cpp mymoneystoragedump.cpp mymoneyseqaccessmgr.cpp mymoneydatabasemgr.cpp imymoneystorage.cpp imymoneyserialize.cpp mymoneystorageanon.cpp mymoneystoragesql.cpp
+
+instdir=$(includedir)/kmymoney
+inst_HEADERS = imymoneystorage.h imymoneyserialize.h imymoneystorageformat.h
+
+noinst_HEADERS = mymoneyseqaccessmgr.h mymoneydatabasemgr.h mymoneystorageanon.h mymoneystoragedump.h mymoneystoragexml.h mymoneyseqaccessmgrtest.h mymoneydatabasemgrtest.h mymoneystoragesql.h mymoneystoragebin.h mymoneymap.h mymoneymaptest.h
+
+if CPPUNIT
+check_LIBRARIES = libstoragetest.a
+
+libstoragetest_a_SOURCES = mymoneyseqaccessmgrtest.cpp mymoneymaptest.cpp mymoneydatabasemgrtest.cpp
+endif
+
diff --git a/kmymoney2/mymoney/storage/imymoneyserialize.cpp b/kmymoney2/mymoney/storage/imymoneyserialize.cpp
new file mode 100644
index 0000000..14b76dd
--- /dev/null
+++ b/kmymoney2/mymoney/storage/imymoneyserialize.cpp
@@ -0,0 +1,31 @@
+/***************************************************************************
+ imymoneyserialize.cpp - description
+ -------------------
+ begin : Fri May 10 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "imymoneyserialize.h"
+
+IMyMoneySerialize::IMyMoneySerialize()
+{
+}
+IMyMoneySerialize::~IMyMoneySerialize()
+{
+}
+
diff --git a/kmymoney2/mymoney/storage/imymoneyserialize.h b/kmymoney2/mymoney/storage/imymoneyserialize.h
new file mode 100644
index 0000000..a0c12ca
--- /dev/null
+++ b/kmymoney2/mymoney/storage/imymoneyserialize.h
@@ -0,0 +1,374 @@
+/***************************************************************************
+ imymoneyserialize.h - description
+ -------------------
+ begin : Fri May 10 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef IMYMONEYSERIALIZE_H
+#define IMYMONEYSERIALIZE_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstring.h>
+#include <qvaluelist.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyutils.h>
+#include <kmymoney/mymoneyinstitution.h>
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneytransaction.h>
+#include <kmymoney/mymoneypayee.h>
+#include <kmymoney/mymoneyscheduled.h>
+#include <kmymoney/mymoneytransactionfilter.h>
+#include <kmymoney/mymoneysecurity.h>
+#include <kmymoney/mymoneyprice.h>
+#include <kmymoney/mymoneyreport.h>
+#include <kmymoney/mymoneybudget.h>
+#include "mymoneystoragesql.h"
+
+/**
+ * @author Thomas Baumgart
+ */
+
+/**
+ * This class represents the interface to serialize a MyMoneyStorage object
+ */
+class IMyMoneySerialize {
+public:
+ IMyMoneySerialize();
+ virtual ~IMyMoneySerialize();
+
+ // general get functions
+ virtual const MyMoneyPayee user(void) const = 0;
+ virtual const QDate creationDate(void) const = 0;
+ virtual const QDate lastModificationDate(void) const = 0;
+ virtual unsigned int currentFixVersion(void) const = 0;
+ virtual unsigned int fileFixVersion(void) const = 0;
+
+ // general set functions
+ virtual void setUser(const MyMoneyPayee& val) = 0;
+ virtual void setCreationDate(const QDate& val) = 0;
+ virtual void setFileFixVersion(const unsigned int v) = 0;
+ /**
+ * This method is used to get a SQL reader for subsequent database access
+ */
+ virtual KSharedPtr <MyMoneyStorageSql> connectToDatabase
+ (const KURL& url) = 0;
+ /**
+ * This method is used when a database file is open, and the data is to
+ * be saved in a different file or format. It will ensure that all data
+ * from the database is available in memory to enable it to be written.
+ */
+ virtual void fillStorage() = 0;
+
+ /**
+ * This method is used to set the last modification date of
+ * the storage object. It also clears the dirty flag and should
+ * therefor be called as last operation when loading from a
+ * file.
+ *
+ * @param val QDate of last modification
+ */
+ virtual void setLastModificationDate(const QDate& val) = 0;
+
+ /**
+ * This method returns a list of accounts inside the storage object.
+ *
+ * @param list reference to QValueList receiving the account objects
+ *
+ * @note The standard accounts will not be returned
+ */
+ virtual void accountList(QValueList<MyMoneyAccount>& list) const = 0;
+
+ /**
+ * This method returns a list of the institutions
+ * inside a MyMoneyStorage object
+ *
+ * @return QMap containing the institution information
+ */
+ virtual const QValueList<MyMoneyInstitution> institutionList(void) const = 0;
+
+ /**
+ * This method is used to pull a list of transactions from the file
+ * global transaction pool. It returns all those transactions
+ * that match the filter passed as argument. If the filter is empty,
+ * the whole journal will be returned.
+ *
+ * @param list reference to QValueList<MyMoneyTransaction> receiving
+ * the set of transactions
+ * @param filter MyMoneyTransactionFilter object with the match criteria
+ */
+ virtual void transactionList(QValueList<MyMoneyTransaction>& list, MyMoneyTransactionFilter& filter) const = 0;
+
+
+ /**
+ * This method returns whether a given transaction is already in memory, to avoid
+ * reloading it from the database
+ */
+ virtual bool isDuplicateTransaction(const QString&) const = 0;
+ /**
+ * This method returns a list of the payees
+ * inside a MyMoneyStorage object
+ *
+ * @return QValueList<MyMoneyPayee> containing the payee information
+ */
+ virtual const QValueList<MyMoneyPayee> payeeList(void) const = 0;
+
+ /**
+ * This method returns a list of the scheduled transactions
+ * inside a MyMoneyStorage object. In order to retrieve a complete
+ * list of the transactions, all arguments should be used with their
+ * default arguments.
+ */
+ virtual const QValueList<MyMoneySchedule> scheduleList(const QString& = QString(),
+ const MyMoneySchedule::typeE = MyMoneySchedule::TYPE_ANY,
+ const MyMoneySchedule::occurenceE = MyMoneySchedule::OCCUR_ANY,
+ const MyMoneySchedule::paymentTypeE = MyMoneySchedule::STYPE_ANY,
+ const QDate& = QDate(),
+ const QDate& = QDate(),
+ const bool = false) const = 0;
+
+ /**
+ * This method returns a list of security objects that the engine has
+ * knowledge of.
+ */
+ virtual const QValueList<MyMoneySecurity> securityList(void) const = 0;
+
+ /**
+ * This method is used to return the standard liability account
+ * @return MyMoneyAccount liability account(group)
+ */
+ virtual const MyMoneyAccount liability(void) const = 0;
+
+ /**
+ * This method is used to return the standard asset account
+ * @return MyMoneyAccount asset account(group)
+ */
+ virtual const MyMoneyAccount asset(void) const = 0;
+
+ /**
+ * This method is used to return the standard expense account
+ * @return MyMoneyAccount expense account(group)
+ */
+ virtual const MyMoneyAccount expense(void) const = 0;
+
+ /**
+ * This method is used to return the standard income account
+ * @return MyMoneyAccount income account(group)
+ */
+ virtual const MyMoneyAccount income(void) const = 0;
+
+ /**
+ * This method is used to return the standard equity account
+ * @return MyMoneyAccount equity account(group)
+ */
+ virtual const MyMoneyAccount equity(void) const = 0;
+
+ /**
+ * This method is used to create a new account
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param account MyMoneyAccount filled with data
+ */
+ virtual void addAccount(MyMoneyAccount& account) = 0;
+
+ /**
+ * This method is used to add one account as sub-ordinate to another
+ * (parent) account. The objects that are passed will be modified
+ * accordingly.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param parent parent account the account should be added to
+ * @param account the account to be added
+ *
+ * @deprecated This method is only provided as long as we provide
+ * the version 0.4 binary reader. As soon as we deprecate
+ * this compatability mode this method will disappear from
+ * this interface!
+ */
+ virtual void addAccount(MyMoneyAccount& parent, MyMoneyAccount& account) = 0;
+
+ /**
+ * This method is used to create a new payee
+ *
+ * An exception will be thrown upon error conditions
+ *
+ * @param payee MyMoneyPayee reference to payee information
+ *
+ * @deprecated This method is only provided as long as we provide
+ * the version 0.4 binary reader. As soon as we deprecate
+ * this compatability mode this method will disappear from
+ * this interface!
+ *
+ */
+ virtual void addPayee(MyMoneyPayee& payee) = 0;
+
+ /**
+ * Adds an institution to the storage. A
+ * respective institution-ID will be generated within this record.
+ * The ID is stored as QString in the object passed as argument.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param institution The complete institution information in a
+ * MyMoneyInstitution object
+ *
+ * @deprecated This method is only provided as long as we provide
+ * the version 0.4 binary reader. As soon as we deprecate
+ * this compatability mode this method will disappear from
+ * this interface!
+ */
+ virtual void addInstitution(MyMoneyInstitution& institution) = 0;
+
+ /**
+ * Adds a transaction to the file-global transaction pool. A respective
+ * transaction-ID will be generated within this record. The ID is stored
+ * as QString with the object.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param transaction reference to the transaction
+ * @param skipAccountUpdate if set, the transaction lists of the accounts
+ * referenced in the splits are not updated. This is used for
+ * bulk loading a lot of transactions but not during normal operation.
+ * Refreshing the account's transaction list can be done using
+ * refreshAllAccountTransactionList().
+ *
+ * @deprecated This method is only provided as long as we provide
+ * the version 0.4 binary reader. As soon as we deprecate
+ * this compatability mode this method will disappear from
+ * this interface!
+ */
+ virtual void addTransaction(MyMoneyTransaction& transaction, const bool skipAccountUpdate = false) = 0;
+
+ virtual void loadAccounts(const QMap<QString, MyMoneyAccount>& map) = 0;
+ virtual void loadTransactions(const QMap<QString, MyMoneyTransaction>& map) = 0;
+ virtual void loadInstitutions(const QMap<QString, MyMoneyInstitution>& map) = 0;
+ virtual void loadPayees(const QMap<QString, MyMoneyPayee>& map) = 0;
+ virtual void loadSchedules(const QMap<QString, MyMoneySchedule>& map) = 0;
+ virtual void loadSecurities(const QMap<QString, MyMoneySecurity>& map) = 0;
+ virtual void loadCurrencies(const QMap<QString, MyMoneySecurity>& map) = 0;
+ virtual void loadReports( const QMap<QString, MyMoneyReport>& reports ) = 0;
+ virtual void loadBudgets( const QMap<QString, MyMoneyBudget>& budgets ) = 0;
+ virtual void loadPrices(const MyMoneyPriceList& list) = 0;
+
+ virtual unsigned long accountId(void) const = 0;
+ virtual unsigned long transactionId(void) const = 0;
+ virtual unsigned long payeeId(void) const = 0;
+ virtual unsigned long institutionId(void) const = 0;
+ virtual unsigned long scheduleId(void) const = 0;
+ virtual unsigned long securityId(void) const = 0;
+ virtual unsigned long reportId(void) const = 0;
+ virtual unsigned long budgetId(void) const = 0;
+
+ virtual void loadAccountId(const unsigned long id) = 0;
+ virtual void loadTransactionId(const unsigned long id) = 0;
+ virtual void loadPayeeId(const unsigned long id) = 0;
+ virtual void loadInstitutionId(const unsigned long id) = 0;
+ virtual void loadScheduleId(const unsigned long id) = 0;
+ virtual void loadSecurityId(const unsigned long id) = 0;
+ virtual void loadReportId(const unsigned long id) = 0;
+ virtual void loadBudgetId(const unsigned long id) = 0;
+
+ /**
+ * This method is used to retrieve the whole set of key/value pairs
+ * from the container. It is meant to be used for permanent storage
+ * functionality. See MyMoneyKeyValueContainer::pairs() for details.
+ *
+ * @return QMap<QString, QString> containing all key/value pairs of
+ * this container.
+ */
+ virtual const QMap<QString, QString> pairs(void) const = 0;
+
+ /**
+ * This method is used to initially store a set of key/value pairs
+ * in the container. It is meant to be used for loading functionality
+ * from permanent storage. See MyMoneyKeyValueContainer::setPairs()
+ * for details
+ *
+ * @param list const QMap<QString, QString> containing the set of
+ * key/value pairs to be loaded into the container.
+ *
+ * @note All existing key/value pairs in the container will be deleted.
+ */
+ virtual void setPairs(const QMap<QString, QString>& list) = 0;
+
+ virtual const QValueList<MyMoneySchedule> scheduleListEx( int scheduleTypes,
+ int scheduleOcurrences,
+ int schedulePaymentTypes,
+ QDate startDate,
+ const QStringList& accounts=QStringList()) const = 0;
+
+ /**
+ * This method is used to retrieve the list of all currencies
+ * known to the engine.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @return QValueList of all MyMoneySecurity objects representing a currency.
+ */
+ virtual const QValueList<MyMoneySecurity> currencyList(void) const = 0;
+
+ /**
+ * This method is used to retrieve the list of all reports
+ * known to the engine.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @return QValueList of all MyMoneyReport objects.
+ */
+ virtual const QValueList<MyMoneyReport> reportList( void ) const = 0;
+
+ /**
+ * This method is used to retrieve the list of all budgets
+ * known to the engine.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @return QValueList of all MyMoneyBudget objects.
+ */
+ virtual const QValueList<MyMoneyBudget> budgetList( void ) const = 0;
+
+
+ /**
+ * This method adds a price entry to the price list.
+ */
+ virtual void addPrice(const MyMoneyPrice& price) = 0;
+
+ /**
+ * This method returns a list of all prices.
+ *
+ * @return MyMoneyPriceList of all MyMoneyPrice objects.
+ */
+ virtual const MyMoneyPriceList priceList(void) const = 0;
+
+ /**
+ * This method recalculates the balances of all accounts
+ * based on the transactions stored in the engine.
+ */
+ virtual void rebuildAccountBalances(void) = 0;
+
+};
+
+#endif
diff --git a/kmymoney2/mymoney/storage/imymoneystorage.cpp b/kmymoney2/mymoney/storage/imymoneystorage.cpp
new file mode 100644
index 0000000..dc67726
--- /dev/null
+++ b/kmymoney2/mymoney/storage/imymoneystorage.cpp
@@ -0,0 +1,38 @@
+/***************************************************************************
+ imymoneystorage.cpp - description
+ -------------------
+ begin : Sun May 5 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "imymoneystorage.h"
+
+bool MyMoneyFileBitArray::testBit(uint index) const
+{
+ if(index < size())
+ return QBitArray::testBit(index);
+ return false;
+}
+
+
+IMyMoneyStorage::IMyMoneyStorage()
+{
+}
+IMyMoneyStorage::~IMyMoneyStorage()
+{
+}
diff --git a/kmymoney2/mymoney/storage/imymoneystorage.h b/kmymoney2/mymoney/storage/imymoneystorage.h
new file mode 100644
index 0000000..a4e55dd
--- /dev/null
+++ b/kmymoney2/mymoney/storage/imymoneystorage.h
@@ -0,0 +1,886 @@
+/***************************************************************************
+ imymoneystorage.h - description
+ -------------------
+ begin : Sun May 5 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef IMYMONEYSTORAGE_H
+#define IMYMONEYSTORAGE_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstring.h>
+#include <qbitarray.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyutils.h>
+#include <kmymoney/mymoneyinstitution.h>
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneytransaction.h>
+#include <kmymoney/mymoneypayee.h>
+#include <kmymoney/mymoneyscheduled.h>
+#include <kmymoney/mymoneyobserver.h>
+#include <kmymoney/mymoneytransactionfilter.h>
+#include <kmymoney/mymoneysecurity.h>
+#include <kmymoney/mymoneyprice.h>
+#include <kmymoney/mymoneyreport.h>
+#include <kmymoney/mymoneybudget.h>
+
+/**
+ * @author Thomas Baumgart
+ *
+ * A simple replacement for QBitArray that does not bark if testBit()
+ * is called with an index out of bounds. It silently returns false
+ * in that case, otherwise calls the base classes implementation.
+ */
+class MyMoneyFileBitArray : public QBitArray
+{
+public:
+ MyMoneyFileBitArray() : QBitArray() {}
+ MyMoneyFileBitArray(int size) : QBitArray(size) {}
+ bool testBit(uint index) const;
+ bool operator[](int index) const { return testBit(index); }
+ bool at(uint index) const { return testBit(index); }
+};
+
+
+/**
+ * @author Thomas Baumgart
+ */
+
+/**
+ * The IMyMoneyStorage class describes the interface between the MyMoneyFile class
+ * and the real storage manager.
+ *
+ * @see MyMoneySeqAccessMgr
+ */
+class IMyMoneyStorage {
+public:
+
+ typedef enum {
+ RefCheckAccount = 0,
+ RefCheckInstitution,
+ RefCheckPayee,
+ RefCheckTransaction,
+ RefCheckReport,
+ RefCheckBudget,
+ RefCheckSchedule,
+ RefCheckSecurity,
+ RefCheckCurrency,
+ RefCheckPrice,
+ // insert new entries above this line
+ MaxRefCheckBits
+ } ReferenceCheckBits;
+
+ // definitions for the ID's of the standard accounts
+#define STD_ACC_LIABILITY "AStd::Liability"
+#define STD_ACC_ASSET "AStd::Asset"
+#define STD_ACC_EXPENSE "AStd::Expense"
+#define STD_ACC_INCOME "AStd::Income"
+#define STD_ACC_EQUITY "AStd::Equity"
+
+ IMyMoneyStorage();
+ virtual ~IMyMoneyStorage();
+
+ // general get functions
+ virtual const MyMoneyPayee user(void) const = 0;
+ virtual const QDate creationDate(void) const = 0;
+ virtual const QDate lastModificationDate(void) const = 0;
+ virtual unsigned int currentFixVersion(void) const = 0;
+ virtual unsigned int fileFixVersion(void) const = 0;
+
+ // general set functions
+ virtual void setUser(const MyMoneyPayee& user) = 0;
+ virtual void setFileFixVersion(const unsigned int v) = 0;
+
+ // methods provided by MyMoneyKeyValueContainer
+ virtual void setValue(const QString& key, const QString& value) = 0;
+ virtual const QString value(const QString& key) const = 0;
+ virtual void deletePair(const QString& key) = 0;
+
+ /**
+ * This method is used to duplicate an IMyMoneyStorage object and return
+ * a pointer to the newly created copy. The caller of this method is the
+ * new owner of the object and must destroy it.
+ */
+ virtual IMyMoneyStorage const * duplicate(void) = 0;
+
+ /**
+ * This method is used to create a new account
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param account MyMoneyAccount filled with data
+ */
+ virtual void addAccount(MyMoneyAccount& account) = 0;
+
+ /**
+ * This method is used to add one account as sub-ordinate to another
+ * (parent) account. The objects that are passed will be modified
+ * accordingly.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param parent parent account the account should be added to
+ * @param account the account to be added
+ */
+ virtual void addAccount(MyMoneyAccount& parent, MyMoneyAccount& account) = 0;
+
+ /**
+ * This method is used to create a new payee
+ *
+ * An exception will be thrown upon error conditions
+ *
+ * @param payee MyMoneyPayee reference to payee information
+ */
+ virtual void addPayee(MyMoneyPayee& payee) = 0;
+
+ /**
+ * This method is used to retrieve information about a payee
+ * An exception will be thrown upon error conditions.
+ *
+ * @param id QString reference to id of payee
+ *
+ * @return MyMoneyPayee object of payee
+ */
+ virtual const MyMoneyPayee payee(const QString& id) const = 0;
+
+ /**
+ * This method is used to retrieve the id to a corresponding
+ * name of a payee/receiver.
+ * An exception will be thrown upon error conditions.
+ *
+ * @param payee QString reference to name of payee
+ *
+ * @return MyMoneyPayee object of payee
+ */
+ virtual const MyMoneyPayee payeeByName(const QString& payee) const = 0;
+
+ /**
+ * This method is used to modify an existing payee
+ *
+ * An exception will be thrown upon error conditions
+ *
+ * @param payee MyMoneyPayee reference to payee information
+ */
+ virtual void modifyPayee(const MyMoneyPayee& payee) = 0;
+
+ /**
+ * This method is used to remove an existing payee
+ *
+ * An exception will be thrown upon error conditions
+ *
+ * @param payee MyMoneyPayee reference to payee information
+ */
+ virtual void removePayee(const MyMoneyPayee& payee) = 0;
+
+ /**
+ * This method returns a list of the payees
+ * inside a MyMoneyStorage object
+ *
+ * @return QValueList<MyMoneyPayee> containing the payee information
+ */
+ virtual const QValueList<MyMoneyPayee> payeeList(void) const = 0;
+
+ /**
+ * Returns the account addressed by it's id.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param id id of the account to locate.
+ * @return reference to MyMoneyAccount object. An exception is thrown
+ * if the id is unknown
+ */
+ virtual const MyMoneyAccount account(const QString& id) const = 0;
+
+ /**
+ * This method is used to check whether a given
+ * account id references one of the standard accounts or not.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param id account id
+ * @return true if account-id is one of the standards, false otherwise
+ */
+ virtual bool isStandardAccount(const QString& id) const = 0;
+
+ /**
+ * This method is used to set the name for the specified standard account
+ * within the storage area. An exception will be thrown, if an error
+ * occurs
+ *
+ * @param id QString reference to one of the standard accounts.
+ * @param name QString reference to the name to be set
+ *
+ */
+ virtual void setAccountName(const QString& id, const QString& name) = 0;
+
+ /**
+ * Adds an institution to the storage. A
+ * respective institution-ID will be generated within this record.
+ * The ID is stored as QString in the object passed as argument.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param institution The complete institution information in a
+ * MyMoneyInstitution object
+ */
+ virtual void addInstitution(MyMoneyInstitution& institution) = 0;
+
+ /**
+ * Adds a transaction to the file-global transaction pool. A respective
+ * transaction-ID will be generated within this record. The ID is stored
+ * QString with the object.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param transaction reference to the transaction
+ * @param skipAccountUpdate if set, the transaction lists of the accounts
+ * referenced in the splits are not updated. This is used for
+ * bulk loading a lot of transactions but not during normal operation
+ */
+ virtual void addTransaction(MyMoneyTransaction& transaction, const bool skipAccountUpdate = false) = 0;
+
+ /**
+ * This method is used to determince, if the account with the
+ * given ID is referenced by any split in m_transactionList.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param id id of the account to be checked for
+ * @return true if account is referenced, false otherwise
+ */
+ virtual bool hasActiveSplits(const QString& id) const = 0;
+
+ /**
+ * This method is used to return the actual balance of an account
+ * without it's sub-ordinate accounts. If a @p date is presented,
+ * the balance at the beginning of this date (not including any
+ * transaction on this date) is returned. Otherwise all recorded
+ * transactions are included in the balance.
+ *
+ * @param id id of the account in question
+ * @param date return balance for specific date
+ * @return balance of the account as MyMoneyMoney object
+ */
+ virtual const MyMoneyMoney balance(const QString& id, const QDate& date) const= 0;
+
+ /**
+ * This method is used to return the actual balance of an account
+ * including it's sub-ordinate accounts. If a @p date is presented,
+ * the balance at the beginning of this date (not including any
+ * transaction on this date) is returned. Otherwise all recorded
+ * transactions are included in the balance.
+ *
+ * @param id id of the account in question
+ * @param date return balance for specific date
+ * @return balance of the account as MyMoneyMoney object
+ */
+ virtual const MyMoneyMoney totalBalance(const QString& id, const QDate& date) const = 0;
+
+ /**
+ * Returns the institution of a given ID
+ *
+ * @param id id of the institution to locate
+ * @return MyMoneyInstitution object filled with data. If the institution
+ * could not be found, an exception will be thrown
+ */
+ virtual const MyMoneyInstitution institution(const QString& id) const = 0;
+
+ /**
+ * This method returns an indicator if the storage object has been
+ * changed after it has last been saved to permanent storage.
+ *
+ * @return true if changed, false if not
+ */
+ virtual bool dirty(void) const = 0;
+
+ /**
+ * This method can be used by an external object to force the
+ * storage object to be dirty. This is used e.g. when an upload
+ * to an external destination failed but the previous storage
+ * to a local disk was ok.
+ */
+ virtual void setDirty(void) = 0;
+
+ /**
+ * This method returns the number of accounts currently known to this storage
+ * in the range 0..MAXUINT
+ *
+ * @return number of accounts currently known inside a MyMoneyFile object
+ */
+ virtual unsigned int accountCount(void) const = 0;
+
+ /**
+ * This method returns a list of the institutions
+ * inside a MyMoneyStorage object
+ *
+ * @return QValueList<MyMoneyInstitution> containing the
+ * institution information
+ */
+ virtual const QValueList<MyMoneyInstitution> institutionList(void) const = 0;
+
+ /**
+ * Modifies an already existing account in the file global account pool.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param account reference to the new account information
+ * @param skipCheck allows to skip the builtin consistency checks
+ */
+ virtual void modifyAccount(const MyMoneyAccount& account, const bool skipCheck = false) = 0;
+
+ /**
+ * Modifies an already existing institution in the file global
+ * institution pool.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param institution The complete new institution information
+ */
+ virtual void modifyInstitution(const MyMoneyInstitution& institution) = 0;
+
+ /**
+ * This method is used to update a specific transaction in the
+ * transaction pool of the MyMoneyFile object
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param transaction reference to transaction to be changed
+ */
+ virtual void modifyTransaction(const MyMoneyTransaction& transaction) = 0;
+
+ /**
+ * This method re-parents an existing account
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param account MyMoneyAccount reference to account to be re-parented
+ * @param parent MyMoneyAccount reference to new parent account
+ */
+ virtual void reparentAccount(MyMoneyAccount &account, MyMoneyAccount& parent) = 0;
+
+ /**
+ * This method is used to remove a transaction from the transaction
+ * pool (journal).
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param transaction const reference to transaction to be deleted
+ */
+ virtual void removeTransaction(const MyMoneyTransaction& transaction) = 0;
+
+ /**
+ * This method returns the number of transactions currently known to file
+ * in the range 0..MAXUINT
+ *
+ * @param account QString reference to account id. If account is empty
+ + all transactions (the journal) will be counted. If account
+ * is not empty it returns the number of transactions
+ * that have splits in this account.
+ *
+ * @return number of transactions in journal/account
+ */
+ virtual unsigned int transactionCount(const QString& account = QString()) const = 0;
+
+ /**
+ * This method returns a QMap filled with the number of transactions
+ * per account. The account id serves as index into the map. If one
+ * needs to have all transactionCounts() for many accounts, this method
+ * is faster than calling transactionCount(const QString& account) many
+ * times.
+ *
+ * @return QMap with numbers of transactions per account
+ */
+ virtual const QMap<QString, unsigned long> transactionCountMap(void) const = 0;
+
+ /**
+ * This method is used to pull a list of transactions from the file
+ * global transaction pool. It returns all those transactions
+ * that match the filter passed as argument. If the filter is empty,
+ * the whole journal will be returned.
+ * The list returned is sorted according to the transactions posting date.
+ * If more than one transaction exists for the same date, the order among
+ * them is undefined.
+ *
+ * @param filter MyMoneyTransactionFilter object with the match criteria
+ *
+ * @return set of transactions in form of a QValueList<MyMoneyTransaction>
+ */
+ virtual const QValueList<MyMoneyTransaction> transactionList(MyMoneyTransactionFilter& filter) const = 0;
+
+ virtual void transactionList(QValueList<MyMoneyTransaction>& list, MyMoneyTransactionFilter& filter) const = 0;
+
+ virtual void transactionList(QValueList<QPair<MyMoneyTransaction, MyMoneySplit> >& list, MyMoneyTransactionFilter& filter) const = 0;
+
+ /**
+ * Deletes an existing account from the file global account pool
+ * This method only allows to remove accounts that are not
+ * referenced by any split. Use moveSplits() to move splits
+ * to another account. An exception is thrown in case of a
+ * problem.
+ *
+ * @param account reference to the account to be deleted.
+ */
+ virtual void removeAccount(const MyMoneyAccount& account) = 0;
+
+ /**
+ * Deletes an existing institution from the file global institution pool
+ * Also modifies the accounts that reference this institution as
+ * their institution.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param institution institution to be deleted.
+ */
+ virtual void removeInstitution(const MyMoneyInstitution& institution) = 0;
+
+ /**
+ * This method is used to extract a transaction from the file global
+ * transaction pool through an id. In case of an invalid id, an
+ * exception will be thrown.
+ *
+ * @param id id of transaction as QString.
+ * @return reference to the requested transaction
+ */
+ virtual const MyMoneyTransaction transaction(const QString& id) const = 0;
+
+ /**
+ * This method is used to extract a transaction from the file global
+ * transaction pool through an index into an account.
+ *
+ * @param account id of the account as QString
+ * @param idx number of transaction in this account
+ * @return reference to MyMoneyTransaction object
+ */
+ virtual const MyMoneyTransaction transaction(const QString& account, const int idx) const = 0;
+
+ /**
+ * This method returns the number of institutions currently known to file
+ * in the range 0..MAXUINT
+ *
+ * @return number of institutions known to file
+ */
+ virtual unsigned int institutionCount(void) const = 0;
+
+ /**
+ * This method returns a list of accounts inside the storage object.
+ *
+ * @param list reference to QValueList receiving the account objects
+ *
+ * @note The standard accounts will not be returned
+ */
+ virtual void accountList(QValueList<MyMoneyAccount>& list) const = 0;
+
+ /**
+ * This method is used to return the standard liability account
+ * @return MyMoneyAccount liability account(group)
+ */
+ virtual const MyMoneyAccount liability(void) const = 0;
+
+ /**
+ * This method is used to return the standard asset account
+ * @return MyMoneyAccount asset account(group)
+ */
+ virtual const MyMoneyAccount asset(void) const = 0;
+
+ /**
+ * This method is used to return the standard expense account
+ * @return MyMoneyAccount expense account(group)
+ */
+ virtual const MyMoneyAccount expense(void) const = 0;
+
+ /**
+ * This method is used to return the standard income account
+ * @return MyMoneyAccount income account(group)
+ */
+ virtual const MyMoneyAccount income(void) const = 0;
+
+ /**
+ * This method is used to return the standard equity account
+ * @return MyMoneyAccount equity account(group)
+ */
+ virtual const MyMoneyAccount equity(void) const = 0;
+
+ /**
+ * This method is used to create a new security object. The ID will be created
+ * automatically. The object passed with the parameter @p security is modified
+ * to contain the assigned id.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param security MyMoneySecurity filled with data
+ */
+ virtual void addSecurity(MyMoneySecurity& security) = 0;
+
+ /**
+ * This method is used to modify an existing MyMoneySecurity
+ * object.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param security reference to the MyMoneySecurity object to be updated
+ */
+ virtual void modifySecurity(const MyMoneySecurity& security) = 0;
+
+ /**
+ * This method is used to remove an existing MyMoneySecurity object
+ * from the engine.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param security reference to the MyMoneySecurity object to be removed
+ */
+ virtual void removeSecurity(const MyMoneySecurity& security) = 0;
+
+ /**
+ * This method is used to retrieve a single MyMoneySecurity object.
+ * The id of the object must be supplied in the parameter @p id.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param id QString containing the id of the MyMoneySecurity object
+ * @return MyMoneySecurity object
+ */
+ virtual const MyMoneySecurity security(const QString& id) const = 0;
+
+ /**
+ * This method returns a list of the security objects
+ * inside a MyMoneyStorage object
+ *
+ * @return QValueList<MyMoneySecurity> containing objects
+ */
+ virtual const QValueList<MyMoneySecurity> securityList(void) const = 0;
+
+ virtual void addPrice(const MyMoneyPrice& price) = 0;
+ virtual void removePrice(const MyMoneyPrice& price) = 0;
+ virtual const MyMoneyPrice price(const QString& fromId, const QString& toId, const QDate& date, const bool exactDate) const = 0;
+
+ /**
+ * This method returns a list of all prices.
+ *
+ * @return MyMoneyPriceList of all MyMoneyPrice objects.
+ */
+ virtual const MyMoneyPriceList priceList(void) const = 0;
+
+ /**
+ * This method is used to add a scheduled transaction to the engine.
+ * It must be sure, that the id of the object is not filled. When the
+ * method returns to the caller, the id will be filled with the
+ * newly created object id value.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param sched reference to the MyMoneySchedule object
+ */
+ virtual void addSchedule(MyMoneySchedule& sched) = 0;
+
+ /**
+ * This method is used to modify an existing MyMoneySchedule
+ * object. Therefor, the id attribute of the object must be set.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param sched const reference to the MyMoneySchedule object to be updated
+ */
+ virtual void modifySchedule(const MyMoneySchedule& sched) = 0;
+
+ /**
+ * This method is used to remove an existing MyMoneySchedule object
+ * from the engine. The id attribute of the object must be set.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param sched const reference to the MyMoneySchedule object to be updated
+ */
+ virtual void removeSchedule(const MyMoneySchedule& sched) = 0;
+
+ /**
+ * This method is used to retrieve a single MyMoneySchedule object.
+ * The id of the object must be supplied in the parameter @p id.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param id QString containing the id of the MyMoneySchedule object
+ * @return MyMoneySchedule object
+ */
+ virtual const MyMoneySchedule schedule(const QString& id) const = 0;
+
+ /**
+ * This method is used to extract a list of scheduled transactions
+ * according to the filter criteria passed as arguments.
+ *
+ * @param accountId only search for scheduled transactions that reference
+ * accound @p accountId. If accountId is the empty string,
+ * this filter is off. Default is @p QString().
+ * @param type only schedules of type @p type are searched for.
+ * See MyMoneySchedule::typeE for details.
+ * Default is MyMoneySchedule::TYPE_ANY
+ * @param occurence only schedules of occurence type @p occurance are searched for.
+ * See MyMoneySchedule::occurenceE for details.
+ * Default is MyMoneySchedule::OCCUR_ANY
+ * @param paymentType only schedules of payment method @p paymentType
+ * are searched for.
+ * See MyMoneySchedule::paymentTypeE for details.
+ * Default is MyMoneySchedule::STYPE_ANY
+ * @param startDate only schedules with payment dates after @p startDate
+ * are searched for. Default is all dates (QDate()).
+ * @param endDate only schedules with payment dates ending prior to @p endDate
+ * are searched for. Default is all dates (QDate()).
+ * @param overdue if true, only those schedules that are overdue are
+ * searched for. Default is false (all schedules will be returned).
+ *
+ * @return const QValueList<MyMoneySchedule> list of schedule objects.
+ */
+ virtual const QValueList<MyMoneySchedule> scheduleList(const QString& accountId = QString(),
+ const MyMoneySchedule::typeE type = MyMoneySchedule::TYPE_ANY,
+ const MyMoneySchedule::occurenceE occurence = MyMoneySchedule::OCCUR_ANY,
+ const MyMoneySchedule::paymentTypeE paymentType = MyMoneySchedule::STYPE_ANY,
+ const QDate& startDate = QDate(),
+ const QDate& endDate = QDate(),
+ const bool overdue = false) const = 0;
+
+ virtual const QValueList<MyMoneySchedule> scheduleListEx( int scheduleTypes,
+ int scheduleOcurrences,
+ int schedulePaymentTypes,
+ QDate startDate,
+ const QStringList& accounts=QStringList()) const = 0;
+
+ /**
+ * This method is used to add a new currency object to the engine.
+ * The ID of the object is the trading symbol, so there is no need for an additional
+ * ID since the symbol is guaranteed to be unique.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param currency reference to the MyMoneySecurity object
+ */
+ virtual void addCurrency(const MyMoneySecurity& currency) = 0;
+
+ /**
+ * This method is used to modify an existing MyMoneySecurity
+ * object.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param currency reference to the MyMoneyCurrency object
+ */
+ virtual void modifyCurrency(const MyMoneySecurity& currency) = 0;
+
+ /**
+ * This method is used to remove an existing MyMoneySecurity object
+ * from the engine.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param currency reference to the MyMoneySecurity object
+ */
+ virtual void removeCurrency(const MyMoneySecurity& currency) = 0;
+
+ /**
+ * This method is used to retrieve a single MyMoneySecurity object.
+ * The id of the object must be supplied in the parameter @p id.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param id QString containing the id of the MyMoneySecurity object
+ * @return MyMoneyCurrency object
+ */
+ virtual const MyMoneySecurity currency(const QString& id) const = 0;
+
+ /**
+ * This method is used to retrieve the list of all currencies
+ * known to the engine.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @return QValueList of all MyMoneySecurity objects representing a currency.
+ */
+ virtual const QValueList<MyMoneySecurity> currencyList(void) const = 0;
+
+ /**
+ * This method is used to retrieve the list of all reports
+ * known to the engine.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @return QValueList of all MyMoneyReport objects.
+ */
+ virtual const QValueList<MyMoneyReport> reportList( void ) const = 0;
+
+ /**
+ * This method is used to add a new report to the engine.
+ * It must be sure, that the id of the object is not filled. When the
+ * method returns to the caller, the id will be filled with the
+ * newly created object id value.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param report reference to the MyMoneyReport object
+ */
+ virtual void addReport( MyMoneyReport& report ) = 0;
+
+ /**
+ * This method is used to modify an existing MyMoneyReport
+ * object. Therefor, the id attribute of the object must be set.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param report const reference to the MyMoneyReport object to be updated
+ */
+ virtual void modifyReport( const MyMoneyReport& report ) = 0;
+
+ /**
+ * This method returns the number of reports currently known to file
+ * in the range 0..MAXUINT
+ *
+ * @return number of reports known to file
+ */
+ virtual unsigned countReports( void ) const = 0;
+
+ /**
+ * This method is used to retrieve a single MyMoneyReport object.
+ * The id of the object must be supplied in the parameter @p id.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param id QString containing the id of the MyMoneyReport object
+ * @return MyMoneyReport object
+ */
+ virtual const MyMoneyReport report( const QString& id ) const = 0;
+
+ /**
+ * This method is used to remove an existing MyMoneyReport object
+ * from the engine. The id attribute of the object must be set.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param report const reference to the MyMoneyReport object to be updated
+ */
+ virtual void removeReport(const MyMoneyReport& report) = 0;
+
+ /**
+ * This method is used to retrieve the list of all budgets
+ * known to the engine.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @return QValueList of all MyMoneyBudget objects.
+ */
+ virtual const QValueList<MyMoneyBudget> budgetList( void ) const = 0;
+
+ /**
+ * This method is used to add a new budget to the engine.
+ * It must be sure, that the id of the object is not filled. When the
+ * method returns to the caller, the id will be filled with the
+ * newly created object id value.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param budget reference to the MyMoneyBudget object
+ */
+ virtual void addBudget( MyMoneyBudget& budget ) = 0;
+
+ /**
+ * This method is used to retrieve the id to a corresponding
+ * name of a budget
+ * An exception will be thrown upon error conditions.
+ *
+ * @param budget QString reference to name of budget
+ *
+ * @return MyMoneyBudget object of budget
+ */
+ virtual const MyMoneyBudget budgetByName(const QString& budget) const = 0;
+
+ /**
+ * This method is used to modify an existing MyMoneyBudget
+ * object. Therefor, the id attribute of the object must be set.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param budget const reference to the MyMoneyBudget object to be updated
+ */
+ virtual void modifyBudget( const MyMoneyBudget& budget ) = 0;
+
+ /**
+ * This method returns the number of budgets currently known to file
+ * in the range 0..MAXUINT
+ *
+ * @return number of budgets known to file
+ */
+ virtual unsigned countBudgets( void ) const = 0;
+
+ /**
+ * This method is used to retrieve a single MyMoneyBudget object.
+ * The id of the object must be supplied in the parameter @p id.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param id QString containing the id of the MyMoneyBudget object
+ * @return MyMoneyBudget object
+ */
+ virtual MyMoneyBudget budget( const QString& id ) const = 0;
+
+ /**
+ * This method is used to remove an existing MyMoneyBudget object
+ * from the engine. The id attribute of the object must be set.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param budget const reference to the MyMoneyBudget object to be updated
+ */
+ virtual void removeBudget(const MyMoneyBudget& budget) = 0;
+
+
+
+ /**
+ * Clear all internal caches (used internally for performance measurements)
+ */
+ virtual void clearCache(void) = 0;
+
+ /**
+ * This method checks, if the given @p object is referenced
+ * by another engine object.
+ *
+ * @param obj const reference to object to be checked
+ * @param skipCheck MyMoneyFileBitArray with ReferenceCheckBits set for which
+ * the check should be skipped
+ *
+ * @retval false @p object is not referenced
+ * @retval true @p institution is referenced
+ */
+ virtual bool isReferenced(const MyMoneyObject& obj, const MyMoneyFileBitArray& skipCheck = MyMoneyFileBitArray()) const = 0;
+
+ /**
+ * This method is provided to allow closing of the database before logoff
+ */
+ virtual void close(void) = 0;
+
+ /**
+ * These methods have to be provided to allow transaction safe data handling.
+ */
+ virtual void startTransaction(void) = 0;
+ virtual bool commitTransaction(void) = 0;
+ virtual void rollbackTransaction(void) = 0;
+};
+
+#endif
diff --git a/kmymoney2/mymoney/storage/imymoneystorageformat.cpp b/kmymoney2/mymoney/storage/imymoneystorageformat.cpp
new file mode 100644
index 0000000..bc3bbb2
--- /dev/null
+++ b/kmymoney2/mymoney/storage/imymoneystorageformat.cpp
@@ -0,0 +1,31 @@
+/***************************************************************************
+ imymoneystorageformat.cpp - description
+ -------------------
+ begin : Sun Oct 27 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "imymoneystorageformat.h"
+
+IMyMoneyStorageFormat::IMyMoneyStorageFormat()
+{
+}
+
+IMyMoneyStorageFormat::~IMyMoneyStorageFormat()
+{
+}
diff --git a/kmymoney2/mymoney/storage/imymoneystorageformat.h b/kmymoney2/mymoney/storage/imymoneystorageformat.h
new file mode 100644
index 0000000..b045898
--- /dev/null
+++ b/kmymoney2/mymoney/storage/imymoneystorageformat.h
@@ -0,0 +1,75 @@
+/***************************************************************************
+ imymoneystorageformat.h - description
+ -------------------
+ begin : Sun Oct 27 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef IMYMONEYSTORAGEFORMAT_H
+#define IMYMONEYSTORAGEFORMAT_H
+
+
+/**
+ * @author Kevin Tambascio (ktambascio@yahoo.com)
+ */
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+class QString;
+class QIODevice;
+class QProgressDialog;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+class IMyMoneySerialize;
+
+
+class IMyMoneyStorageFormat
+{
+public:
+ IMyMoneyStorageFormat();
+ virtual ~IMyMoneyStorageFormat();
+
+ enum fileVersionDirectionType {
+ Reading = 0, /**< version of file to be read */
+ Writing = 1 /**< version to be used when writing a file */
+ };
+
+ virtual void readFile(QIODevice* qf, IMyMoneySerialize* storage) = 0;
+ // virtual void readStream(QDataStream& s, IMyMoneySerialize* storage) = 0;
+
+ virtual void writeFile(QIODevice* qf, IMyMoneySerialize* storage) = 0;
+ //virtual void writeStream(QDataStream& s, IMyMoneySerialize* storage) = 0;
+
+ virtual void setProgressCallback(void(*callback)(int, int, const QString&)) = 0;
+ /**
+ * This member is used to store the file version information
+ * obtained while reading a file.
+ */
+ static unsigned int fileVersionRead;
+
+ /**
+ * This member is used to store the file version information
+ * to be used when writing a file.
+ */
+ static unsigned int fileVersionWrite;
+};
+
+#endif
diff --git a/kmymoney2/mymoney/storage/mymoneydatabasemgr.cpp b/kmymoney2/mymoney/storage/mymoneydatabasemgr.cpp
new file mode 100644
index 0000000..e845094
--- /dev/null
+++ b/kmymoney2/mymoney/storage/mymoneydatabasemgr.cpp
@@ -0,0 +1,1880 @@
+/***************************************************************************
+ mymoneydatabasemgr.cpp
+ -------------------
+ begin : June 5 2007
+ copyright : (C) 2007 by Fernando Vilas
+ email : Fernando Vilas <fvilas@iname.com>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+#include <typeinfo>
+#include <algorithm>
+
+#include "mymoneydatabasemgr.h"
+#include "../mymoneytransactionfilter.h"
+#include "../mymoneycategory.h"
+
+#define TRY try {
+#define CATCH } catch (MyMoneyException *e) {
+#define PASS } catch (MyMoneyException *e) { throw; }
+
+MyMoneyDatabaseMgr::MyMoneyDatabaseMgr() :
+m_creationDate (QDate::currentDate ()),
+m_lastModificationDate (QDate::currentDate ()),
+m_sql (0)
+{ }
+
+MyMoneyDatabaseMgr::~MyMoneyDatabaseMgr()
+{ }
+
+ // general get functions
+const MyMoneyPayee MyMoneyDatabaseMgr::user(void) const
+{ return m_user; }
+
+const QDate MyMoneyDatabaseMgr::creationDate(void) const
+{ return m_creationDate; }
+
+const QDate MyMoneyDatabaseMgr::lastModificationDate(void) const
+{ return m_lastModificationDate; }
+
+unsigned int MyMoneyDatabaseMgr::currentFixVersion(void) const
+{ return CURRENT_FIX_VERSION; }
+
+unsigned int MyMoneyDatabaseMgr::fileFixVersion(void) const
+{ return m_fileFixVersion; }
+
+ // general set functions
+void MyMoneyDatabaseMgr::setUser(const MyMoneyPayee& user)
+{
+ m_user = user;
+ if (m_sql != 0) m_sql->modifyUserInfo(user);
+}
+
+void MyMoneyDatabaseMgr::setFileFixVersion(const unsigned int v)
+{ m_fileFixVersion = v; }
+
+ // methods provided by MyMoneyKeyValueContainer
+const QString MyMoneyDatabaseMgr::value(const QString& key) const
+{
+ return MyMoneyKeyValueContainer::value(key);
+}
+
+void MyMoneyDatabaseMgr::setValue(const QString& key, const QString& val)
+{
+ MyMoneyKeyValueContainer::setValue(key, val);
+}
+
+void MyMoneyDatabaseMgr::deletePair(const QString& key)
+{
+ MyMoneyKeyValueContainer::deletePair(key);
+}
+
+const QMap<QString, QString> MyMoneyDatabaseMgr::pairs(void) const
+{
+ return MyMoneyKeyValueContainer::pairs();
+}
+
+void MyMoneyDatabaseMgr::setPairs(const QMap<QString, QString>& list)
+{
+ MyMoneyKeyValueContainer::setPairs(list);
+}
+
+MyMoneyDatabaseMgr const * MyMoneyDatabaseMgr::duplicate(void)
+{
+ MyMoneyDatabaseMgr* that = new MyMoneyDatabaseMgr();
+ *that = *this;
+ return that;
+}
+
+void MyMoneyDatabaseMgr::addAccount(MyMoneyAccount& account)
+{
+ if (m_sql) {
+ // create the account.
+ MyMoneyAccount newAccount(nextAccountID(), account);
+
+ m_sql->addAccount(newAccount);
+ account = newAccount;
+ }
+}
+
+void MyMoneyDatabaseMgr::addAccount(MyMoneyAccount& parent, MyMoneyAccount& account)
+{
+ QMap<QString, MyMoneyAccount> accountList;
+ QStringList accountIdList;
+ QMap<QString, MyMoneyAccount>::ConstIterator theParent;
+ QMap<QString, MyMoneyAccount>::ConstIterator theChild;
+
+ accountIdList << parent.id() << account.id();
+ startTransaction();
+ accountList = m_sql->fetchAccounts(accountIdList, true);
+
+ theParent = accountList.find(parent.id());
+ if(theParent == accountList.end()) {
+ QString msg = "Unknown parent account '";
+ msg += parent.id() + "'";
+ throw new MYMONEYEXCEPTION(msg);
+ }
+
+ theChild = accountList.find(account.id());
+ if(theChild == accountList.end()) {
+ QString msg = "Unknown child account '";
+ msg += account.id() + "'";
+ throw new MYMONEYEXCEPTION(msg);
+ }
+
+ MyMoneyAccount acc = *theParent;
+ acc.addAccountId(account.id());
+ parent = acc;
+
+ acc = *theChild;
+ acc.setParentAccountId(parent.id());
+ account = acc;
+
+//FIXME: MyMoneyBalanceCacheItem balance;
+//FIXME: m_balanceCache[account.id()] = balance;
+
+ m_sql->modifyAccount(parent);
+ m_sql->modifyAccount(account);
+ commitTransaction();
+}
+
+void MyMoneyDatabaseMgr::addPayee(MyMoneyPayee& payee)
+{
+ if (m_sql) {
+ // create the payee
+ MyMoneyPayee newPayee(nextPayeeID(), payee);
+
+ m_sql->addPayee(newPayee);
+ payee = newPayee;
+ }
+}
+
+const MyMoneyPayee MyMoneyDatabaseMgr::payee(const QString& id) const
+{
+ QMap<QString, MyMoneyPayee>::ConstIterator it;
+ QMap<QString, MyMoneyPayee> payeeList = m_sql->fetchPayees(QString(id));
+ it = payeeList.find(id);
+ if(it == payeeList.end())
+ throw new MYMONEYEXCEPTION("Unknown payee '" + id + "'");
+
+ return *it;
+}
+
+const MyMoneyPayee MyMoneyDatabaseMgr::payeeByName(const QString& payee) const
+{
+ if(payee.isEmpty())
+ return MyMoneyPayee::null;
+
+ QMap<QString, MyMoneyPayee> payeeList;
+
+ TRY
+ payeeList = m_sql->fetchPayees();
+ PASS
+
+ QMap<QString, MyMoneyPayee>::ConstIterator it_p;
+
+ for(it_p = payeeList.begin(); it_p != payeeList.end(); ++it_p) {
+ if((*it_p).name() == payee) {
+ return *it_p;
+ }
+ }
+
+ throw new MYMONEYEXCEPTION("Unknown payee '" + payee + "'");
+}
+
+void MyMoneyDatabaseMgr::modifyPayee(const MyMoneyPayee& payee)
+{
+ QMap<QString, MyMoneyPayee> payeeList = m_sql->fetchPayees(QString(payee.id()), true);
+ QMap<QString, MyMoneyPayee>::ConstIterator it;
+
+ it = payeeList.find(payee.id());
+ if(it == payeeList.end()) {
+ QString msg = "Unknown payee '" + payee.id() + "'";
+ throw new MYMONEYEXCEPTION(msg);
+ }
+
+ m_sql->modifyPayee(payee);
+}
+
+void MyMoneyDatabaseMgr::removePayee(const MyMoneyPayee& payee)
+{
+ QMap<QString, MyMoneyTransaction>::ConstIterator it_t;
+ QMap<QString, MyMoneySchedule>::ConstIterator it_s;
+ QMap<QString, MyMoneyPayee> payeeList = m_sql->fetchPayees(QString(payee.id()));
+ QMap<QString, MyMoneyPayee>::ConstIterator it_p;
+
+ it_p = payeeList.find(payee.id());
+ if(it_p == payeeList.end()) {
+ QString msg = "Unknown payee '" + payee.id() + "'";
+ throw new MYMONEYEXCEPTION(msg);
+ }
+
+ // scan all transactions to check if the payee is still referenced
+ QMap<QString, MyMoneyTransaction> transactionList = m_sql->fetchTransactions(); // make sure they're all here
+ for(it_t = transactionList.begin(); it_t != transactionList.end(); ++it_t) {
+ if((*it_t).hasReferenceTo(payee.id())) {
+ throw new MYMONEYEXCEPTION(QString("Cannot remove payee that is still referenced to a %1").arg("transaction"));
+ }
+ }
+
+ // check referential integrity in schedules
+ QMap<QString, MyMoneySchedule> scheduleList = m_sql->fetchSchedules(); // make sure they're all here
+ for(it_s = scheduleList.begin(); it_s != scheduleList.end(); ++it_s) {
+ if((*it_s).hasReferenceTo(payee.id())) {
+ throw new MYMONEYEXCEPTION(QString("Cannot remove payee that is still referenced to a %1").arg("schedule"));
+ }
+ }
+ // remove any reference to report and/or budget
+ removeReferences(payee.id());
+
+ m_sql->removePayee(payee);
+}
+
+const QValueList<MyMoneyPayee> MyMoneyDatabaseMgr::payeeList(void) const
+{
+ if (m_sql)
+ return m_sql->fetchPayees().values();
+ else
+ return QValueList<MyMoneyPayee> ();
+}
+
+const MyMoneyAccount MyMoneyDatabaseMgr::account(const QString& id) const
+{
+ if (m_sql)
+ {
+ QMap <QString, MyMoneyAccount> accountList = m_sql->fetchAccounts(QString(id));
+ QMap <QString, MyMoneyAccount>::ConstIterator pos = accountList.find(id);
+
+ // locate the account and if present, return it's data
+ if(pos != accountList.end())
+ return *pos;
+ }
+
+ // throw an exception, if it does not exist
+ QString msg = "Unknown account id '" + id + "'";
+ throw new MYMONEYEXCEPTION(msg);
+}
+
+bool MyMoneyDatabaseMgr::isStandardAccount(const QString& id) const
+{
+ return id == STD_ACC_LIABILITY
+ || id == STD_ACC_ASSET
+ || id == STD_ACC_EXPENSE
+ || id == STD_ACC_INCOME
+ || id == STD_ACC_EQUITY;
+}
+
+void MyMoneyDatabaseMgr::setAccountName(const QString& id, const QString& name)
+{
+ if(!isStandardAccount(id))
+ throw new MYMONEYEXCEPTION("Only standard accounts can be modified using setAccountName()");
+
+ if (m_sql) {
+ startTransaction();
+ MyMoneyAccount acc = m_sql->fetchAccounts(QString(id), true) [id];
+ acc.setName(name);
+ m_sql->modifyAccount(acc);
+ commitTransaction();
+ }
+}
+
+void MyMoneyDatabaseMgr::addInstitution(MyMoneyInstitution& institution)
+{
+ if (m_sql) {
+ MyMoneyInstitution newInstitution(nextInstitutionID(), institution);
+
+ // mark file as changed
+ m_sql->addInstitution (newInstitution);
+
+ // return new data
+ institution = newInstitution;
+ }
+}
+
+const QString MyMoneyDatabaseMgr::nextPayeeID(void)
+{
+ QString id;
+ if (m_sql) {
+ id.setNum(ulong(m_sql->incrementPayeeId()));
+ id = "P" + id.rightJustify(PAYEE_ID_SIZE, '0');
+ }
+ return id;
+}
+
+const QString MyMoneyDatabaseMgr::nextInstitutionID(void)
+{
+ QString id;
+ if (m_sql) {
+ id.setNum(ulong(m_sql->incrementInstitutionId()));
+ id = "I" + id.rightJustify(INSTITUTION_ID_SIZE, '0');
+ }
+ return id;
+}
+
+const QString MyMoneyDatabaseMgr::nextAccountID(void)
+{
+ QString id;
+ if (m_sql) {
+ id.setNum(ulong(m_sql->incrementAccountId()));
+ id = "A" + id.rightJustify(ACCOUNT_ID_SIZE, '0');
+ }
+ return id;
+}
+
+const QString MyMoneyDatabaseMgr::nextBudgetID(void)
+{
+ QString id;
+ if (m_sql) {
+ id.setNum(ulong(m_sql->incrementBudgetId()));
+ id = "B" + id.rightJustify(BUDGET_ID_SIZE, '0');
+ }
+ return id;
+}
+
+const QString MyMoneyDatabaseMgr::nextReportID(void)
+{
+ QString id;
+ if (m_sql) {
+ id.setNum(ulong(m_sql->incrementReportId()));
+ id = "R" + id.rightJustify(REPORT_ID_SIZE, '0');
+ }
+ return id;
+}
+
+const QString MyMoneyDatabaseMgr::nextTransactionID(void)
+{
+ QString id;
+ if (m_sql) {
+ id.setNum(ulong(m_sql->incrementTransactionId()));
+ id = "T" + id.rightJustify(TRANSACTION_ID_SIZE, '0');
+ }
+ return id;
+}
+
+const QString MyMoneyDatabaseMgr::nextScheduleID(void)
+{
+ QString id;
+ if (m_sql) {
+ id.setNum(ulong(m_sql->incrementScheduleId()));
+ id = "SCH" + id.rightJustify(SCHEDULE_ID_SIZE, '0');
+ }
+ return id;
+}
+
+const QString MyMoneyDatabaseMgr::nextSecurityID(void)
+{
+ QString id;
+ if (m_sql) {
+ id.setNum(ulong(m_sql->incrementSecurityId()));
+ id = "E" + id.rightJustify(SECURITY_ID_SIZE, '0');
+ }
+ return id;
+}
+
+void MyMoneyDatabaseMgr::addTransaction(MyMoneyTransaction& transaction, const bool skipAccountUpdate)
+{
+ // perform some checks to see that the transaction stuff is OK. For
+ // now we assume that
+ // * no ids are assigned
+ // * the date valid (must not be empty)
+ // * the referenced accounts in the splits exist
+
+ // first perform all the checks
+ if(!transaction.id().isEmpty())
+ throw new MYMONEYEXCEPTION("transaction already contains an id");
+ if(!transaction.postDate().isValid())
+ throw new MYMONEYEXCEPTION("invalid post date");
+
+ // now check the splits
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ for(it_s = transaction.splits().begin(); it_s != transaction.splits().end(); ++it_s) {
+ // the following lines will throw an exception if the
+ // account or payee do not exist
+ account((*it_s).accountId());
+ if(!(*it_s).payeeId().isEmpty())
+ payee((*it_s).payeeId());
+ }
+
+ MyMoneyTransaction newTransaction(nextTransactionID(), transaction);
+ QString key = newTransaction.uniqueSortKey();
+
+ m_sql->addTransaction(newTransaction);
+
+ transaction = newTransaction;
+
+ // adjust the balance of all affected accounts
+ for(it_s = transaction.splits().begin(); it_s != transaction.splits().end(); ++it_s) {
+ MyMoneyAccount acc = MyMoneyFile::instance()->account((*it_s).accountId());
+ acc.adjustBalance((*it_s));
+ if(!skipAccountUpdate) {
+ acc.touch();
+//FIXME: invalidateBalanceCache(acc.id());
+ }
+ m_sql->modifyAccount(acc);
+ }
+}
+
+bool MyMoneyDatabaseMgr::hasActiveSplits(const QString& id) const
+{
+ QMap<QString, MyMoneyTransaction>::ConstIterator it;
+
+ MyMoneyTransactionFilter f(id);
+ QMap<QString, MyMoneyTransaction> transactionList = m_sql->fetchTransactions(f);
+
+ for(it = transactionList.begin(); it != transactionList.end(); ++it) {
+ if((*it).accountReferenced(id)) {
+ return true;
+ }
+ }
+ return false;
+}
+
+ /**
+ * This method is used to return the actual balance of an account
+ * without it's sub-ordinate accounts. If a @p date is presented,
+ * the balance at the beginning of this date (not including any
+ * transaction on this date) is returned. Otherwise all recorded
+ * transactions are included in the balance.
+ *
+ * @param id id of the account in question
+ * @param date return balance for specific date
+ * @return balance of the account as MyMoneyMoney object
+ */
+//const MyMoneyMoney MyMoneyDatabaseMgr::balance(const QString& id, const QDate& date);
+
+const MyMoneyMoney MyMoneyDatabaseMgr::totalBalance(const QString& id, const QDate& date) const
+{
+ QStringList accounts;
+ QStringList::ConstIterator it_a;
+
+ MyMoneyMoney result; //(balance(id, date));
+
+ accounts = MyMoneyFile::instance()->account(id).accountList();
+ for (it_a = accounts.begin(); it_a != accounts.end(); ++it_a) {
+ accounts += MyMoneyFile::instance()->account(*it_a).accountList();
+ }
+ std::list <QString> tempList (accounts.begin(), accounts.end());
+ tempList.sort();;
+ tempList.unique();
+
+ accounts = QStringList(tempList);
+
+ QMap<QString, MyMoneyMoney> balanceMap = m_sql->fetchBalance(accounts, date);
+ for (QMap<QString, MyMoneyMoney>::ConstIterator it_b = balanceMap.begin(); it_b != balanceMap.end(); ++it_b) {
+ result += it_b.data();
+ }
+
+ return result;
+}
+
+const MyMoneyInstitution MyMoneyDatabaseMgr::institution(const QString& id) const
+{
+ QMap<QString, MyMoneyInstitution>::ConstIterator pos;
+ QMap<QString, MyMoneyInstitution> institutionList = m_sql->fetchInstitutions(QString(id));
+
+ pos = institutionList.find(id);
+ if(pos != institutionList.end())
+ return *pos;
+ throw new MYMONEYEXCEPTION("unknown institution");
+}
+
+bool MyMoneyDatabaseMgr::dirty(void) const
+{ return false; }
+
+void MyMoneyDatabaseMgr::setDirty(void)
+{}
+
+unsigned int MyMoneyDatabaseMgr::accountCount(void) const
+{
+ return m_sql->getRecCount("kmmAccounts");
+}
+
+const QValueList<MyMoneyInstitution> MyMoneyDatabaseMgr::institutionList(void) const
+{
+ if (m_sql) {
+ return m_sql->fetchInstitutions().values();
+ } else {
+ return QValueList<MyMoneyInstitution> ();
+ }
+}
+
+void MyMoneyDatabaseMgr::modifyAccount(const MyMoneyAccount& account, const bool skipCheck)
+{
+ QMap<QString, MyMoneyAccount>::ConstIterator pos;
+
+ // locate the account in the file global pool
+ startTransaction();
+ QMap<QString, MyMoneyAccount> accountList = m_sql->fetchAccounts (QString(account.id()), true);
+ pos = accountList.find(account.id());
+ if(pos != accountList.end()) {
+ // check if the new info is based on the old one.
+ // this is the case, when the file and the id
+ // as well as the type are equal.
+ if(((*pos).parentAccountId() == account.parentAccountId()
+ && (*pos).accountType() == account.accountType())
+ || skipCheck == true) {
+ // make sure that all the referenced objects exist
+ if(!account.institutionId().isEmpty())
+ institution(account.institutionId());
+
+ QValueList<QString>::ConstIterator it_a;
+ for(it_a = account.accountList().begin(); it_a != account.accountList().end(); ++it_a) {
+ this->account(*it_a);
+ }
+
+ // update information in account list
+ //m_accountList.modify(account.id(), account);
+
+ // invalidate cached balance
+//FIXME: invalidateBalanceCache(account.id());
+
+ // mark file as changed
+ m_sql->modifyAccount(account);
+ commitTransaction();
+ } else {
+ rollbackTransaction();
+ throw new MYMONEYEXCEPTION("Invalid information for update");
+ }
+
+ } else {
+ rollbackTransaction();
+ throw new MYMONEYEXCEPTION("Unknown account id");
+ }
+}
+
+void MyMoneyDatabaseMgr::modifyInstitution(const MyMoneyInstitution& institution)
+{
+ QMap<QString, MyMoneyInstitution> institutionList = m_sql->fetchInstitutions(QString(institution.id()));
+ QMap<QString, MyMoneyInstitution>::ConstIterator pos;
+
+ // locate the institution in the file global pool
+ pos = institutionList.find(institution.id());
+ if(pos != institutionList.end()) {
+ m_sql->modifyInstitution(institution);
+ } else
+ throw new MYMONEYEXCEPTION("unknown institution");
+}
+
+ /**
+ * This method is used to update a specific transaction in the
+ * transaction pool of the MyMoneyFile object
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param transaction reference to transaction to be changed
+ */
+void MyMoneyDatabaseMgr::modifyTransaction(const MyMoneyTransaction& transaction)
+{
+ QMap<QString, bool> modifiedAccounts;
+
+ // perform some checks to see that the transaction stuff is OK. For
+ // now we assume that
+ // * ids are assigned
+ // * the pointer to the MyMoneyFile object is not 0
+ // * the date valid (must not be empty)
+ // * the splits must have valid account ids
+
+ // first perform all the checks
+ if(transaction.id().isEmpty()
+// || transaction.file() != this
+ || !transaction.postDate().isValid())
+ throw new MYMONEYEXCEPTION("invalid transaction to be modified");
+
+ // now check the splits
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ for(it_s = transaction.splits().begin(); it_s != transaction.splits().end(); ++it_s) {
+ // the following lines will throw an exception if the
+ // account or payee do not exist
+ MyMoneyFile::instance()->account((*it_s).accountId());
+ if(!(*it_s).payeeId().isEmpty())
+ MyMoneyFile::instance()->payee((*it_s).payeeId());
+ }
+
+ // new data seems to be ok. find old version of transaction
+ // in our pool. Throw exception if unknown.
+// if(!m_transactionKeys.contains(transaction.id()))
+// throw new MYMONEYEXCEPTION("invalid transaction id");
+
+// QString oldKey = m_transactionKeys[transaction.id()];
+ QMap <QString, MyMoneyTransaction> transactionList = m_sql->fetchTransactions("('" + QString(transaction.id()) + "')");
+// if(transactionList.size() != 1)
+// throw new MYMONEYEXCEPTION("invalid transaction key");
+
+ QMap<QString, MyMoneyTransaction>::ConstIterator it_t;
+
+// it_t = transactionList.find(oldKey);
+ it_t = transactionList.begin();
+ if(it_t == transactionList.end())
+ throw new MYMONEYEXCEPTION("invalid transaction key");
+
+ // mark all accounts referenced in old and new transaction data
+ // as modified
+ QMap<QString, MyMoneyAccount> accountList = m_sql->fetchAccounts();
+ for(it_s = (*it_t).splits().begin(); it_s != (*it_t).splits().end(); ++it_s) {
+ MyMoneyAccount acc = accountList[(*it_s).accountId()];
+ acc.adjustBalance((*it_s), true);
+ acc.touch();
+//FIXME: invalidateBalanceCache(acc.id());
+ //m_accountList.modify(acc.id(), acc);
+ m_sql->modifyAccount(acc);
+ //modifiedAccounts[(*it_s).accountId()] = true;
+ }
+ for(it_s = transaction.splits().begin(); it_s != transaction.splits().end(); ++it_s) {
+ MyMoneyAccount acc = accountList[(*it_s).accountId()];
+ acc.adjustBalance((*it_s));
+ acc.touch();
+//FIXME: invalidateBalanceCache(acc.id());
+ //m_accountList.modify(acc.id(), acc);
+ m_sql->modifyAccount(acc);
+ //modifiedAccounts[(*it_s).accountId()] = true;
+ }
+
+ // remove old transaction from lists
+// m_sql->removeTransaction(oldKey);
+
+ // add new transaction to lists
+ // QString newKey = transaction.uniqueSortKey();
+// m_sql->insertTransaction(newKey, transaction);
+ //m_transactionKeys.modify(transaction.id(), newKey);
+
+ // mark file as changed
+ m_sql->modifyTransaction(transaction);
+}
+
+void MyMoneyDatabaseMgr::reparentAccount(MyMoneyAccount &account, MyMoneyAccount& parent)
+{
+ if(account.accountType() == MyMoneyAccount::Stock && parent.accountType() != MyMoneyAccount::Investment)
+ throw new MYMONEYEXCEPTION("Cannot move a stock acocunt into a non-investment account");
+
+ QStringList accountIdList;
+ QMap<QString, MyMoneyAccount>::ConstIterator oldParent;
+ QMap<QString, MyMoneyAccount>::ConstIterator newParent;
+ QMap<QString, MyMoneyAccount>::ConstIterator childAccount;
+
+ // verify that accounts exist. If one does not,
+ // an exception is thrown
+ accountIdList << account.id() << parent.id();
+ MyMoneyDatabaseMgr::account(account.id());
+ MyMoneyDatabaseMgr::account(parent.id());
+
+ if(!account.parentAccountId().isEmpty()) {
+ accountIdList << account.parentAccountId();
+ }
+
+ startTransaction();
+ QMap<QString, MyMoneyAccount> accountList = m_sql->fetchAccounts(accountIdList, true);
+
+ if(!account.parentAccountId().isEmpty()) {
+ MyMoneyDatabaseMgr::account(account.parentAccountId());
+ oldParent = accountList.find(account.parentAccountId());
+ }
+
+ newParent = accountList.find(parent.id());
+ childAccount = accountList.find(account.id());
+
+ MyMoneyAccount acc;
+ if(!account.parentAccountId().isEmpty()) {
+ acc = (*oldParent);
+ acc.removeAccountId(account.id());
+ m_sql->modifyAccount(acc);
+ }
+
+ parent = (*newParent);
+ parent.addAccountId(account.id());
+
+ account = (*childAccount);
+ account.setParentAccountId(parent.id());
+
+ m_sql->modifyAccount(parent);
+ m_sql->modifyAccount(account);
+ commitTransaction();
+}
+
+void MyMoneyDatabaseMgr::removeTransaction(const MyMoneyTransaction& transaction)
+{
+ QMap<QString, bool> modifiedAccounts;
+
+ // first perform all the checks
+ if(transaction.id().isEmpty())
+ throw new MYMONEYEXCEPTION("invalid transaction to be deleted");
+
+ QMap<QString, QString>::ConstIterator it_k;
+ QMap<QString, MyMoneyTransaction>::ConstIterator it_t;
+
+// it_k = m_transactionKeys.find(transaction.id());
+// if(it_k == m_transactionKeys.end())
+// throw new MYMONEYEXCEPTION("invalid transaction to be deleted");
+
+ QMap <QString, MyMoneyTransaction> transactionList = m_sql->fetchTransactions("('" + QString(transaction.id()) + "')");
+// it_t = transactionList.find(*it_k);
+ it_t = transactionList.begin();
+ if(it_t == transactionList.end())
+ throw new MYMONEYEXCEPTION("invalid transaction key");
+
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+
+ // scan the splits and collect all accounts that need
+ // to be updated after the removal of this transaction
+ QMap<QString, MyMoneyAccount> accountList = m_sql->fetchAccounts();
+ for(it_s = (*it_t).splits().begin(); it_s != (*it_t).splits().end(); ++it_s) {
+ MyMoneyAccount acc = accountList[(*it_s).accountId()];
+// modifiedAccounts[(*it_s).accountId()] = true;
+ acc.adjustBalance((*it_s), true);
+ acc.touch();
+ m_sql->modifyAccount(acc);
+//FIXME: invalidateBalanceCache(acc.id());
+ }
+
+ // FIXME: check if any split is frozen and throw exception
+
+ // remove the transaction from the two lists
+ //m_transactionList.remove(*it_k);
+// m_transactionKeys.remove(transaction.id());
+
+ // mark file as changed
+ m_sql->removeTransaction(transaction);
+}
+
+unsigned int MyMoneyDatabaseMgr::transactionCount(const QString& account) const
+{ return (m_sql->transactionCount(account)); }
+
+const QMap<QString, unsigned long> MyMoneyDatabaseMgr::transactionCountMap(void) const
+{ return (m_sql->transactionCountMap()); }
+
+const QValueList<MyMoneyTransaction> MyMoneyDatabaseMgr::transactionList(MyMoneyTransactionFilter& filter) const
+{
+ QValueList<MyMoneyTransaction> list;
+ transactionList(list, filter);
+ return list;
+}
+
+void MyMoneyDatabaseMgr::transactionList(QValueList<MyMoneyTransaction>& list, MyMoneyTransactionFilter& filter) const
+{
+ list.clear();
+
+ TRY
+ if (m_sql) list = m_sql->fetchTransactions(filter).values();
+ PASS
+}
+
+void MyMoneyDatabaseMgr::transactionList(QValueList<QPair<MyMoneyTransaction, MyMoneySplit> >& list, MyMoneyTransactionFilter& filter) const
+{
+ list.clear();
+ MyMoneyMap<QString, MyMoneyTransaction> transactionList;
+ TRY
+ if (m_sql) transactionList = m_sql->fetchTransactions(filter);
+ PASS
+
+ QMap<QString, MyMoneyTransaction>::ConstIterator it_t;
+ QMap<QString, MyMoneyTransaction>::ConstIterator txEnd = transactionList.end();
+
+ for(it_t = transactionList.begin(); it_t != txEnd; ++it_t) {
+ if(filter.match(*it_t)) {
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = filter.matchingSplits().begin(); it_s != filter.matchingSplits().end(); ++it_s) {
+ list.append(qMakePair(*it_t, *it_s));
+ }
+ }
+ }
+}
+
+void MyMoneyDatabaseMgr::removeAccount(const MyMoneyAccount& account)
+{
+ MyMoneyAccount parent;
+
+ // check that the account and it's parent exist
+ // this will throw an exception if the id is unknown
+ MyMoneyDatabaseMgr::account(account.id());
+ parent = MyMoneyDatabaseMgr::account(account.parentAccountId());
+
+ // check that it's not one of the standard account groups
+ if(isStandardAccount(account.id()))
+ throw new MYMONEYEXCEPTION("Unable to remove the standard account groups");
+
+ if(hasActiveSplits(account.id())) {
+ throw new MYMONEYEXCEPTION("Unable to remove account with active splits");
+ }
+
+ // re-parent all sub-ordinate accounts to the parent of the account
+ // to be deleted. First round check that all accounts exist, second
+ // round do the re-parenting.
+ QStringList::ConstIterator it;
+ for(it = account.accountList().begin(); it != account.accountList().end(); ++it) {
+ MyMoneyDatabaseMgr::account(*it);
+ }
+
+ // if one of the accounts did not exist, an exception had been
+ // thrown and we would not make it until here.
+
+ QStringList accountIdList;
+ accountIdList << parent.id() << account.id();
+ startTransaction();
+ QMap<QString, MyMoneyAccount> accountList = m_sql->fetchAccounts(accountIdList, true);
+
+ QMap<QString, MyMoneyAccount>::ConstIterator it_a;
+ QMap<QString, MyMoneyAccount>::ConstIterator it_p;
+
+ // locate the account in the file global pool
+
+ it_a = accountList.find(account.id());
+ if(it_a == accountList.end())
+ throw new MYMONEYEXCEPTION("Internal error: account not found in list");
+
+ it_p = accountList.find(parent.id());
+ if(it_p == accountList.end())
+ throw new MYMONEYEXCEPTION("Internal error: parent account not found in list");
+
+ if(!account.institutionId().isEmpty())
+ throw new MYMONEYEXCEPTION("Cannot remove account still attached to an institution");
+
+ // FIXME: check referential integrity for the account to be removed
+
+ // check if the new info is based on the old one.
+ // this is the case, when the file and the id
+ // as well as the type are equal.
+ if((*it_a).id() == account.id()
+ && (*it_a).accountType() == account.accountType()) {
+
+ // second round over sub-ordinate accounts: do re-parenting
+ // but only if the list contains at least one entry
+ // FIXME: move this logic to MyMoneyFile
+ if((*it_a).accountList().count() > 0) {
+ for(it = (*it_a).accountList().begin(); it != (*it_a).accountList().end(); ++it) {
+ MyMoneyAccount acc(MyMoneyDatabaseMgr::account(*it));
+ reparentAccount(acc, parent);//, false);
+ }
+ }
+ // remove account from parent's list
+ parent.removeAccountId(account.id());
+ m_sql->modifyAccount(parent);
+
+ // remove account from the global account pool
+ //m_accountList.remove(account.id());
+
+ // remove from balance list
+//FIXME: m_balanceCache.remove(account.id());
+//FIXME: invalidateBalanceCache(parent.id());
+
+ m_sql->removeAccount(account);
+ }
+ commitTransaction();
+}
+
+void MyMoneyDatabaseMgr::removeInstitution(const MyMoneyInstitution& institution)
+{
+ QMap<QString, MyMoneyInstitution> institutionList = m_sql->fetchInstitutions(QString(institution.id()));
+ QMap<QString, MyMoneyInstitution>::ConstIterator it_i;
+
+ it_i = institutionList.find(institution.id());
+ if(it_i != institutionList.end()) {
+ // mark file as changed
+ m_sql->removeInstitution(institution);
+ } else
+ throw new MYMONEYEXCEPTION("invalid institution");
+}
+
+const MyMoneyTransaction MyMoneyDatabaseMgr::transaction(const QString& id) const
+{
+ // get the full key of this transaction, throw exception
+ // if it's invalid (unknown)
+ //if(!m_transactionKeys.contains(id))
+ // throw new MYMONEYEXCEPTION("invalid transaction id");
+
+ // check if this key is in the list, throw exception if not
+ //QString key = m_transactionKeys[id];
+ QMap <QString, MyMoneyTransaction> transactionList = m_sql->fetchTransactions("('" + QString(id) + "')");
+
+ //there should only be one transaction in the map, if it was found, so check the size of the map
+ //return the first element.
+ //if(!transactionList.contains(key))
+ if(!transactionList.size())
+ throw new MYMONEYEXCEPTION("invalid transaction key");
+
+ return transactionList.begin().data();
+}
+
+const MyMoneyMoney MyMoneyDatabaseMgr::balance(const QString& id, const QDate& date) const
+{
+ QStringList idList;
+ idList.append(id);
+ QMap<QString,MyMoneyMoney> tempMap = m_sql->fetchBalance(idList, date);
+
+ MyMoneyMoney returnValue = tempMap[id];
+ if (returnValue != MyMoneyMoney()) {
+ return returnValue;
+ }
+
+//DEBUG
+ QDate date_ (date);
+ //if (date_ == QDate()) date_ = QDate::currentDate();
+// END DEBUG
+
+ MyMoneyMoney result(0);
+ MyMoneyAccount acc;
+ QMap<QString, MyMoneyAccount> accountList = m_sql->fetchAccounts(/*QString(id)*/);
+ //QMap<QString, MyMoneyAccount>::const_iterator accpos = accountList.find(id);
+ if (date_ != QDate()) qDebug ("request balance for %s at %s", id.data(), date_.toString(Qt::ISODate).latin1());
+// if(!date_.isValid() && MyMoneyFile::instance()->account(id).accountType() != MyMoneyAccount::Stock) {
+// if(accountList.find(id) != accountList.end())
+// return accountList[id].balance();
+// return MyMoneyMoney(0);
+// }
+ if(/*m_balanceCache[id].valid == false || date != m_balanceCacheDate) || */ m_sql != 0) {
+ QMap<QString, MyMoneyMoney> balances;
+ QMap<QString, MyMoneyMoney>::ConstIterator it_b;
+//FIXME: if (date != m_balanceCacheDate) {
+//FIXME: m_balanceCache.clear();
+//FIXME: m_balanceCacheDate = date;
+//FIXME: }
+
+ QValueList<MyMoneyTransaction>::ConstIterator it_t;
+ QValueList<MyMoneyTransaction>::ConstIterator txEnd;
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+
+ MyMoneyTransactionFilter filter;
+ filter.addAccount(id);
+ filter.setDateFilter(QDate(), date_);
+ filter.setReportAllSplits(false);
+ QValueList<MyMoneyTransaction> list = transactionList(filter);
+
+ txEnd = list.end();
+ for(it_t = list.begin(); it_t != txEnd; ++it_t) {
+ for(it_s = (*it_t).splits().begin(); it_s != (*it_t).splits().end(); ++it_s){
+ const QString aid = (*it_s).accountId();
+ if((*it_s).action() == MyMoneySplit::ActionSplitShares) {
+ balances[aid] = balances[aid] * (*it_s).shares();
+ } else {
+ balances[aid] += (*it_s).value((*it_t).commodity(), accountList[aid].currencyId());
+ }
+ }
+ }
+
+ // fill the found balances into the cache
+//FIXME: for(it_b = balances.begin(); it_b != balances.end(); ++it_b) {
+//FIXME: MyMoneyBalanceCacheItem balance(*it_b);
+//FIXME: m_balanceCache[it_b.key()] = balance;
+//FIXME: }
+
+ // fill all accounts w/o transactions to zero
+// if (m_sql != 0) {
+// QMap<QString, MyMoneyAccount>::ConstIterator it_a;
+// for(it_a = m_accountList.begin(); it_a != m_accountList.end(); ++it_a) {
+//FIXME: if(m_balanceCache[(*it_a).id()].valid == false) {
+//FIXME: MyMoneyBalanceCacheItem balance(MyMoneyMoney(0,1));
+//FIXME: m_balanceCache[(*it_a).id()] = balance;
+//FIXME: }
+// }
+// }
+
+ result = balances[id];
+
+ }
+
+//FIXME: if(m_balanceCache[id].valid == true)
+//FIXME: result = m_balanceCache[id].balance;
+//FIXME: else
+//FIXME: qDebug("Cache mishit should never happen at this point");
+
+ return result;
+}
+
+const MyMoneyTransaction MyMoneyDatabaseMgr::transaction(const QString& account, const int idx) const
+{
+/* removed with MyMoneyAccount::Transaction
+ QMap<QString, MyMoneyAccount>::ConstIterator acc;
+
+ // find account object in list, throw exception if unknown
+ acc = m_accountList.find(account);
+ if(acc == m_accountList.end())
+ throw new MYMONEYEXCEPTION("unknown account id");
+
+ // get the transaction info from the account
+ MyMoneyAccount::Transaction t = (*acc).transaction(idx);
+
+ // return the transaction, throw exception if not found
+ return transaction(t.transactionID());
+*/
+
+ // new implementation if the above code does not work anymore
+ QValueList<MyMoneyTransaction> list;
+ //MyMoneyAccount acc = m_accountList[account];
+ MyMoneyAccount acc = m_sql->fetchAccounts(QString(account)) [account];
+ MyMoneyTransactionFilter filter;
+
+ if(acc.accountGroup() == MyMoneyAccount::Income
+ || acc.accountGroup() == MyMoneyAccount::Expense)
+ filter.addCategory(account);
+ else
+ filter.addAccount(account);
+
+ transactionList(list, filter);
+ if(idx < 0 || idx >= static_cast<int> (list.count()))
+ throw new MYMONEYEXCEPTION("Unknown idx for transaction");
+
+ return transaction(list[idx].id());
+}
+
+unsigned int MyMoneyDatabaseMgr::institutionCount(void) const
+{
+ return m_sql->getRecCount("kmmInstitutions");
+}
+
+void MyMoneyDatabaseMgr::accountList(QValueList<MyMoneyAccount>& list) const
+{
+ QMap <QString, MyMoneyAccount> accountList;
+ if (m_sql) accountList = m_sql->fetchAccounts();
+ QMap<QString, MyMoneyAccount>::ConstIterator it;
+ QMap<QString, MyMoneyAccount>::ConstIterator accEnd = accountList.end();
+ for(it = accountList.begin(); it != accEnd; ++it) {
+ if(!isStandardAccount((*it).id())) {
+ list.append(*it);
+ }
+ }
+}
+
+const MyMoneyAccount MyMoneyDatabaseMgr::liability(void) const
+{ return MyMoneyFile::instance()->account(STD_ACC_LIABILITY); }
+
+const MyMoneyAccount MyMoneyDatabaseMgr::asset(void) const
+{ return MyMoneyFile::instance()->account(STD_ACC_ASSET); }
+
+const MyMoneyAccount MyMoneyDatabaseMgr::expense(void) const
+{ return MyMoneyFile::instance()->account(STD_ACC_EXPENSE); }
+
+const MyMoneyAccount MyMoneyDatabaseMgr::income(void) const
+{ return MyMoneyFile::instance()->account(STD_ACC_INCOME); }
+
+const MyMoneyAccount MyMoneyDatabaseMgr::equity(void) const
+{ return MyMoneyFile::instance()->account(STD_ACC_EQUITY); }
+
+void MyMoneyDatabaseMgr::addSecurity(MyMoneySecurity& security)
+{
+ // create the account
+ MyMoneySecurity newSecurity(nextSecurityID(), security);
+
+ m_sql->addSecurity(newSecurity);
+ security = newSecurity;
+}
+
+void MyMoneyDatabaseMgr::modifySecurity(const MyMoneySecurity& security)
+{
+ QMap<QString, MyMoneySecurity> securitiesList = m_sql->fetchSecurities(QString(security.id()), true);
+ QMap<QString, MyMoneySecurity>::ConstIterator it;
+
+ it = securitiesList.find(security.id());
+ if(it == securitiesList.end())
+ {
+ QString msg = "Unknown security '";
+ msg += security.id() + "' during modifySecurity()";
+ throw new MYMONEYEXCEPTION(msg);
+ }
+
+ m_sql->modifySecurity(security);
+}
+
+void MyMoneyDatabaseMgr::removeSecurity(const MyMoneySecurity& security)
+{
+ QMap<QString, MyMoneySecurity> securitiesList = m_sql->fetchSecurities(QString(security.id()));
+ QMap<QString, MyMoneySecurity>::ConstIterator it;
+
+ // FIXME: check referential integrity
+
+ it = securitiesList.find(security.id());
+ if(it == securitiesList.end())
+ {
+ QString msg = "Unknown security '";
+ msg += security.id() + "' during removeSecurity()";
+ throw new MYMONEYEXCEPTION(msg);
+ }
+
+ m_sql->removeSecurity(security);
+}
+
+const MyMoneySecurity MyMoneyDatabaseMgr::security(const QString& id) const
+{
+ QMap<QString, MyMoneySecurity> securitiesList = m_sql->fetchSecurities(QString(id));
+ QMap<QString, MyMoneySecurity>::ConstIterator it = securitiesList.find(id);
+ if(it != securitiesList.end())
+ {
+ return it.data();
+ }
+
+ return MyMoneySecurity();
+}
+
+const QValueList<MyMoneySecurity> MyMoneyDatabaseMgr::securityList(void) const
+{ return m_sql->fetchSecurities().values(); }
+
+void MyMoneyDatabaseMgr::addPrice(const MyMoneyPrice& price)
+{
+ MyMoneyPriceEntries::ConstIterator it;
+ MyMoneyPriceList priceList = m_sql->fetchPrices();
+ it = priceList[MyMoneySecurityPair(price.from(), price.to())].find(price.date());
+ // do not replace, if the information did not change.
+ if(it != priceList[MyMoneySecurityPair(price.from(), price.to())].end()) {
+ if((*it).rate((*it).to()) == price.rate(price.to())
+ && (*it).source() == price.source())
+ return;
+ }
+
+ m_sql->addPrice(price);
+}
+
+void MyMoneyDatabaseMgr::removePrice(const MyMoneyPrice& price)
+{
+ m_sql->removePrice(price);
+}
+
+const MyMoneyPrice MyMoneyDatabaseMgr::price(const QString& fromId, const QString& toId, const QDate& _date, const bool exactDate) const
+{
+ return m_sql->fetchSinglePrice(fromId, toId, _date, exactDate);
+}
+
+const MyMoneyPriceList MyMoneyDatabaseMgr::priceList(void) const
+{ return m_sql->fetchPrices(); }
+
+void MyMoneyDatabaseMgr::addSchedule(MyMoneySchedule& sched)
+{
+ // first perform all the checks
+ if(!sched.id().isEmpty())
+ throw new MYMONEYEXCEPTION("schedule already contains an id");
+
+ // The following will throw an exception when it fails
+ sched.validate(false);
+
+ if (m_sql) {
+ startTransaction();
+ sched = MyMoneySchedule (nextScheduleID(), sched);
+
+ m_sql->addSchedule(sched);
+ commitTransaction();
+ }
+}
+
+void MyMoneyDatabaseMgr::modifySchedule(const MyMoneySchedule& sched)
+{
+ QMap<QString, MyMoneySchedule> scheduleList = m_sql->fetchSchedules(QString(sched.id()));
+ QMap<QString, MyMoneySchedule>::ConstIterator it;
+
+ it = scheduleList.find(sched.id());
+ if(it == scheduleList.end()) {
+ QString msg = "Unknown schedule '" + sched.id() + "'";
+ throw new MYMONEYEXCEPTION(msg);
+ }
+
+ m_sql->modifySchedule(sched);
+}
+
+void MyMoneyDatabaseMgr::removeSchedule(const MyMoneySchedule& sched)
+{
+ QMap<QString, MyMoneySchedule> scheduleList = m_sql->fetchSchedules(QString(sched.id()));
+ QMap<QString, MyMoneySchedule>::ConstIterator it;
+
+ it = scheduleList.find(sched.id());
+ if(it == scheduleList.end()) {
+ QString msg = "Unknown schedule '" + sched.id() + "'";
+ throw new MYMONEYEXCEPTION(msg);
+ }
+
+ // FIXME: check referential integrity for loan accounts
+
+ m_sql->removeSchedule(sched);
+}
+
+const MyMoneySchedule MyMoneyDatabaseMgr::schedule(const QString& id) const
+{
+ QMap<QString, MyMoneySchedule> scheduleList = m_sql->fetchSchedules(QString(id));
+ QMap<QString, MyMoneySchedule>::ConstIterator pos;
+
+ // locate the schedule and if present, return it's data
+ pos = scheduleList.find(id);
+ if(pos != scheduleList.end())
+ return (*pos);
+
+ // throw an exception, if it does not exist
+ QString msg = "Unknown schedule id '" + id + "'";
+ throw new MYMONEYEXCEPTION(msg);
+}
+
+const QValueList<MyMoneySchedule> MyMoneyDatabaseMgr::scheduleList(const QString& accountId,
+ const MyMoneySchedule::typeE type,
+ const MyMoneySchedule::occurenceE occurence,
+ const MyMoneySchedule::paymentTypeE paymentType,
+ const QDate& startDate,
+ const QDate& endDate,
+ const bool overdue) const
+{
+ QMap<QString, MyMoneySchedule> scheduleList;
+ if (m_sql) scheduleList = m_sql->fetchSchedules();
+ QMap<QString, MyMoneySchedule>::ConstIterator pos;
+ QValueList<MyMoneySchedule> list;
+
+ // qDebug("scheduleList()");
+
+ for(pos = scheduleList.begin(); pos != scheduleList.end(); ++pos) {
+ // qDebug(" '%s'", (*pos).id().data());
+
+ if(type != MyMoneySchedule::TYPE_ANY) {
+ if(type != (*pos).type()) {
+ continue;
+ }
+ }
+
+ if(occurence != MyMoneySchedule::OCCUR_ANY) {
+ if(occurence != (*pos).occurence()) {
+ continue;
+ }
+ }
+
+ if(paymentType != MyMoneySchedule::STYPE_ANY) {
+ if(paymentType != (*pos).paymentType()) {
+ continue;
+ }
+ }
+
+ if(!accountId.isEmpty()) {
+ MyMoneyTransaction t = (*pos).transaction();
+ QValueList<MyMoneySplit>::ConstIterator it;
+ QValueList<MyMoneySplit> splits;
+ splits = t.splits();
+ for(it = splits.begin(); it != splits.end(); ++it) {
+ if((*it).accountId() == accountId)
+ break;
+ }
+ if(it == splits.end()) {
+ continue;
+ }
+ }
+
+ if(startDate.isValid() && endDate.isValid()) {
+ if((*pos).paymentDates(startDate, endDate).count() == 0) {
+ continue;
+ }
+ }
+
+ if(startDate.isValid() && !endDate.isValid()) {
+ if(!(*pos).nextPayment(startDate.addDays(-1)).isValid()) {
+ continue;
+ }
+ }
+
+ if(!startDate.isValid() && endDate.isValid()) {
+ if((*pos).startDate() > endDate) {
+ continue;
+ }
+ }
+
+ if(overdue) {
+ if (!(*pos).isOverdue())
+ continue;
+/*
+ QDate nextPayment = (*pos).nextPayment((*pos).lastPayment());
+ if(!nextPayment.isValid())
+ continue;
+ if(nextPayment >= QDate::currentDate())
+ continue;
+*/
+ }
+
+ // qDebug("Adding '%s'", (*pos).name().latin1());
+ list << *pos;
+ }
+ return list;
+}
+
+const QValueList<MyMoneySchedule> MyMoneyDatabaseMgr::scheduleListEx( int scheduleTypes,
+ int scheduleOcurrences,
+ int schedulePaymentTypes,
+ QDate startDate,
+ const QStringList& accounts) const
+{
+// qDebug("scheduleListEx");
+ QMap<QString, MyMoneySchedule> scheduleList = m_sql->fetchSchedules();
+ QMap<QString, MyMoneySchedule>::ConstIterator pos;
+ QValueList<MyMoneySchedule> list;
+
+ if (!startDate.isValid())
+ return list;
+
+ for(pos = scheduleList.begin(); pos != scheduleList.end(); ++pos)
+ {
+ if (scheduleTypes && !(scheduleTypes & (*pos).type()))
+ continue;
+
+ if (scheduleOcurrences && !(scheduleOcurrences & (*pos).occurence()))
+ continue;
+
+ if (schedulePaymentTypes && !(schedulePaymentTypes & (*pos).paymentType()))
+ continue;
+
+ if((*pos).paymentDates(startDate, startDate).count() == 0)
+ continue;
+
+ if ((*pos).isFinished())
+ continue;
+
+ if ((*pos).hasRecordedPayment(startDate))
+ continue;
+
+ if (accounts.count() > 0)
+ {
+ if (accounts.contains((*pos).account().id()))
+ continue;
+ }
+
+// qDebug("\tAdding '%s'", (*pos).name().latin1());
+ list << *pos;
+ }
+
+ return list;
+}
+
+void MyMoneyDatabaseMgr::addCurrency(const MyMoneySecurity& currency)
+{
+ if (m_sql) {
+ QMap<QString, MyMoneySecurity> currencyList = m_sql->fetchCurrencies(QString(currency.id()));
+ QMap<QString, MyMoneySecurity>::ConstIterator it;
+
+ it = currencyList.find(currency.id());
+ if(it != currencyList.end()) {
+ throw new MYMONEYEXCEPTION(QString("Cannot add currency with existing id %1").arg(currency.id().data()));
+ }
+
+ m_sql->addCurrency(currency);
+ }
+}
+
+void MyMoneyDatabaseMgr::modifyCurrency(const MyMoneySecurity& currency)
+{
+ QMap<QString, MyMoneySecurity> currencyList = m_sql->fetchCurrencies(QString(currency.id()));
+ QMap<QString, MyMoneySecurity>::ConstIterator it;
+
+ it = currencyList.find(currency.id());
+ if(it == currencyList.end()) {
+ throw new MYMONEYEXCEPTION(QString("Cannot modify currency with unknown id %1").arg(currency.id().data()));
+ }
+
+ m_sql->modifyCurrency(currency);
+}
+
+void MyMoneyDatabaseMgr::removeCurrency(const MyMoneySecurity& currency)
+{
+ QMap<QString, MyMoneySecurity> currencyList = m_sql->fetchCurrencies(QString(currency.id()));
+ QMap<QString, MyMoneySecurity>::ConstIterator it;
+
+ // FIXME: check referential integrity
+
+ it = currencyList.find(currency.id());
+ if(it == currencyList.end()) {
+ throw new MYMONEYEXCEPTION(QString("Cannot remove currency with unknown id %1").arg(currency.id().data()));
+ }
+
+ m_sql->removeCurrency(currency);
+}
+
+const MyMoneySecurity MyMoneyDatabaseMgr::currency(const QString& id) const
+{
+ if(id.isEmpty()) {
+
+ }
+ QMap<QString, MyMoneySecurity> currencyList = m_sql->fetchCurrencies(QString(id));
+ QMap<QString, MyMoneySecurity>::ConstIterator it;
+
+ it = currencyList.find(id);
+ if(it == currencyList.end()) {
+ throw new MYMONEYEXCEPTION(QString("Cannot retrieve currency with unknown id '%1'").arg(id.data()));
+ }
+
+ return *it;
+}
+
+const QValueList<MyMoneySecurity> MyMoneyDatabaseMgr::currencyList(void) const
+{
+ if (m_sql) {
+ return m_sql->fetchCurrencies().values();
+ } else {
+ return QValueList<MyMoneySecurity> ();
+ }
+}
+
+const QValueList<MyMoneyReport> MyMoneyDatabaseMgr::reportList( void ) const
+{
+ if (m_sql) {
+ return m_sql->fetchReports().values();
+ } else {
+ return QValueList<MyMoneyReport> ();
+ }
+}
+
+void MyMoneyDatabaseMgr::addReport( MyMoneyReport& report )
+{
+ if(!report.id().isEmpty())
+ throw new MYMONEYEXCEPTION("transaction already contains an id");
+
+ MyMoneyReport newReport(nextReportID(), report);
+ report = newReport;
+ m_sql->addReport(newReport);
+ //m_sql->addReport(MyMoneyReport (nextReportID(), report));
+}
+
+void MyMoneyDatabaseMgr::modifyReport( const MyMoneyReport& report )
+{
+ QMap<QString, MyMoneyReport> reportList = m_sql->fetchReports(QString(report.id()));
+ QMap<QString, MyMoneyReport>::ConstIterator it;
+
+ it = reportList.find(report.id());
+ if(it == reportList.end()) {
+ QString msg = "Unknown report '" + report.id() + "'";
+ throw new MYMONEYEXCEPTION(msg);
+ }
+
+ m_sql->modifyReport(report);
+}
+
+unsigned MyMoneyDatabaseMgr::countReports( void ) const
+{
+ return m_sql->getRecCount("kmmReports");
+}
+
+const MyMoneyReport MyMoneyDatabaseMgr::report( const QString& id ) const
+{
+ return m_sql->fetchReports(QString(id))[id];
+}
+
+void MyMoneyDatabaseMgr::removeReport(const MyMoneyReport& report)
+{
+ QMap<QString, MyMoneyReport> reportList = m_sql->fetchReports(QString(report.id()));
+ QMap<QString, MyMoneyReport>::ConstIterator it;
+
+ it = reportList.find(report.id());
+ if(it == reportList.end()) {
+ QString msg = "Unknown report '" + report.id() + "'";
+ throw new MYMONEYEXCEPTION(msg);
+ }
+
+ m_sql->removeReport(report);
+}
+
+const QValueList<MyMoneyBudget> MyMoneyDatabaseMgr::budgetList( void ) const
+{
+ return m_sql->fetchBudgets().values();
+}
+
+void MyMoneyDatabaseMgr::addBudget( MyMoneyBudget& budget )
+{
+ MyMoneyBudget newBudget(nextBudgetID(), budget);
+ m_sql->addBudget(newBudget);
+}
+
+const MyMoneyBudget MyMoneyDatabaseMgr::budgetByName(const QString& budget) const
+{
+ QMap<QString, MyMoneyBudget> budgets = m_sql->fetchBudgets();
+ QMap<QString, MyMoneyBudget>::ConstIterator it_p;
+
+ for(it_p = budgets.begin(); it_p != budgets.end(); ++it_p) {
+ if((*it_p).name() == budget) {
+ return *it_p;
+ }
+ }
+
+ throw new MYMONEYEXCEPTION("Unknown budget '" + budget + "'");
+}
+
+void MyMoneyDatabaseMgr::modifyBudget( const MyMoneyBudget& budget )
+{
+ //QMap<QString, MyMoneyBudget>::ConstIterator it;
+
+ //it = m_budgetList.find(budget.id());
+ //if(it == m_budgetList.end()) {
+ // QString msg = "Unknown budget '" + budget.id() + "'";
+ // throw new MYMONEYEXCEPTION(msg);
+ //}
+ //m_budgetList.modify(budget.id(), budget);
+
+ startTransaction();
+ if (m_sql->fetchBudgets(QString(budget.id()), true).empty()) {
+ QString msg = "Unknown budget '" + budget.id() + "'";
+ throw new MYMONEYEXCEPTION(msg);
+ }
+ m_sql->modifyBudget(budget);
+ commitTransaction();
+}
+
+unsigned MyMoneyDatabaseMgr::countBudgets( void ) const
+{
+ return m_sql->getRecCount("kmmBudgetConfig");
+}
+
+MyMoneyBudget MyMoneyDatabaseMgr::budget( const QString& id ) const
+{
+ return m_sql->fetchBudgets(QString(id)) [id];
+}
+
+void MyMoneyDatabaseMgr::removeBudget(const MyMoneyBudget& budget)
+{
+// QMap<QString, MyMoneyBudget>::ConstIterator it;
+//
+// it = m_budgetList.find(budget.id());
+// if(it == m_budgetList.end()) {
+// QString msg = "Unknown budget '" + budget.id() + "'";
+// throw new MYMONEYEXCEPTION(msg);
+// }
+//
+ m_sql->removeBudget(budget);
+}
+
+void MyMoneyDatabaseMgr::clearCache(void)
+{
+ //m_balanceCache.clear();
+}
+
+class isReferencedHelper {
+ public:
+ isReferencedHelper(const QString& id)
+ : m_id (id)
+ {}
+
+ inline bool operator() (const MyMoneyObject& obj) const
+ { return obj.hasReferenceTo(m_id); }
+
+ private:
+ QString m_id;
+};
+
+bool MyMoneyDatabaseMgr::isReferenced(const MyMoneyObject& obj, const MyMoneyFileBitArray& skipCheck) const
+{
+ bool rc = false;
+ const QString& id = obj.id();
+
+ MyMoneyPriceList::const_iterator it_pr;
+
+ MyMoneyPriceList::const_iterator priceEnd;
+
+ // FIXME optimize the list of objects we have to checks
+ // with a bit of knowledge of the internal structure, we
+ // could optimize the number of objects we check for references
+
+ // Scan all engine objects for a reference
+ if(!skipCheck[RefCheckTransaction]) {
+ bool skipTransactions = false;
+ MyMoneyTransactionFilter f;
+ if (typeid(obj) == typeid(MyMoneyAccount)) {
+ f.addAccount(obj.id());
+ } else if (typeid(obj) == typeid(MyMoneyCategory)) {
+ f.addCategory(obj.id());
+ } else if (typeid(obj) == typeid(MyMoneyPayee)) {
+ f.addPayee(obj.id());
+ } // if it's anything else, I guess we just read everything
+ //FIXME: correction, transactions can only have a reference to an account or payee,
+ // so, read nothing.
+ else {
+ skipTransactions = true;
+ }
+ if (! skipTransactions) {
+ //QMap <QString, MyMoneyTransaction> transactionList = m_sql->fetchTransactions(f);
+ //rc = (transactionList.end() != std::find_if(transactionList.begin(), transactionList.end(), isReferencedHelper(id)));
+ //if (rc != m_sql->isReferencedByTransaction(obj.id()))
+ // qDebug ("Transaction match inconsistency.");
+ rc = m_sql->isReferencedByTransaction(obj.id());
+ }
+ }
+
+ if(!skipCheck[RefCheckAccount] && !rc) {
+ QValueList<MyMoneyAccount> accountList;
+ MyMoneyFile::instance()->accountList(accountList);
+ rc = (accountList.end() != std::find_if(accountList.begin(), accountList.end(), isReferencedHelper(id)));
+ }
+ if(!skipCheck[RefCheckInstitution] && !rc) {
+ QValueList<MyMoneyInstitution> institutionList;
+ MyMoneyFile::instance()->institutionList(institutionList);
+ rc = (institutionList.end() != std::find_if(institutionList.begin(), institutionList.end(), isReferencedHelper(id)));
+ }
+ if(!skipCheck[RefCheckPayee] && !rc) {
+ QValueList<MyMoneyPayee> payeeList = MyMoneyFile::instance()->payeeList();
+ rc = (payeeList.end() != std::find_if(payeeList.begin(), payeeList.end(), isReferencedHelper(id)));
+ }
+ if(!skipCheck[RefCheckReport] && !rc) {
+ QMap<QString, MyMoneyReport> reportList = m_sql->fetchReports();
+ rc = (reportList.end() != std::find_if(reportList.begin(), reportList.end(), isReferencedHelper(id)));
+ }
+ if(!skipCheck[RefCheckBudget] && !rc) {
+ QMap<QString, MyMoneyBudget> budgets = m_sql->fetchBudgets();
+ rc = (budgets.end() != std::find_if(budgets.begin(), budgets.end(), isReferencedHelper(id)));
+ }
+ if(!skipCheck[RefCheckSchedule] && !rc) {
+ QMap<QString, MyMoneySchedule> scheduleList = m_sql->fetchSchedules();
+ rc = (scheduleList.end() != std::find_if(scheduleList.begin(), scheduleList.end(), isReferencedHelper(id)));
+ }
+ if(!skipCheck[RefCheckSecurity] && !rc) {
+ QValueList<MyMoneySecurity> securitiesList = MyMoneyFile::instance()->securityList();
+ rc = (securitiesList.end() != std::find_if(securitiesList.begin(), securitiesList.end(), isReferencedHelper(id)));
+ }
+ if(!skipCheck[RefCheckCurrency] && !rc) {
+ QValueList<MyMoneySecurity> currencyList = m_sql->fetchCurrencies().values();
+ rc = (currencyList.end() != std::find_if(currencyList.begin(), currencyList.end(), isReferencedHelper(id)));
+ }
+ // within the pricelist we don't have to scan each entry. Checking the QPair
+ // members of the MyMoneySecurityPair is enough as they are identical to the
+ // two security ids
+ if(!skipCheck[RefCheckPrice] && !rc) {
+ MyMoneyPriceList priceList = m_sql->fetchPrices();
+ priceEnd = priceList.end();
+ for(it_pr = priceList.begin(); !rc && it_pr != priceEnd; ++it_pr) {
+ rc = (it_pr.key().first == id) || (it_pr.key().second == id);
+ }
+ }
+ return rc;
+}
+
+void MyMoneyDatabaseMgr::close(void) {
+ if (m_sql != 0) {
+ m_sql->close(true);
+ m_sql = 0;
+ }
+}
+
+void MyMoneyDatabaseMgr::startTransaction(void)
+{ if (m_sql) m_sql->startCommitUnit ("databasetransaction"); }
+
+bool MyMoneyDatabaseMgr::commitTransaction(void)
+{
+ if (m_sql)
+ return m_sql->endCommitUnit ("databasetransaction");
+ return false;
+}
+
+void MyMoneyDatabaseMgr::rollbackTransaction(void)
+{ if (m_sql) m_sql->cancelCommitUnit ("databasetransaction"); }
+
+void MyMoneyDatabaseMgr::setCreationDate(const QDate& val)
+{ m_creationDate = val; }
+
+KSharedPtr <MyMoneyStorageSql> MyMoneyDatabaseMgr::connectToDatabase(const KURL& url) {
+ m_sql = new MyMoneyStorageSql (this, url);
+ return m_sql;
+}
+
+ void MyMoneyDatabaseMgr::fillStorage()
+{ m_sql->fillStorage(); }
+
+void MyMoneyDatabaseMgr::setLastModificationDate(const QDate& val)
+{ m_lastModificationDate = val; }
+
+bool MyMoneyDatabaseMgr::isDuplicateTransaction(const QString& /*id*/) const
+{
+ //FIXME: figure out the real id from the key and check the DB.
+//return m_transactionKeys.contains(id);
+ return false;
+}
+
+void MyMoneyDatabaseMgr::loadAccounts(const QMap<QString, MyMoneyAccount>& /*map*/)
+{
+// m_accountList = map;
+//FIXME: update the database.
+// startTransaction
+// DELETE FROM kmmAccounts
+// for each account in the map
+// m_sql->addAccount(...)
+// commitTransaction
+// on error, rollbackTransaction
+}
+
+void MyMoneyDatabaseMgr::loadTransactions(const QMap<QString, MyMoneyTransaction>& /*map*/)
+{
+// m_transactionList = map;
+//FIXME: update the database.
+
+// // now fill the key map
+// QMap<QString, QString> keys;
+// QMap<QString, MyMoneyTransaction>::ConstIterator it_t;
+// for(it_t = map.begin(); it_t != map.end(); ++it_t) {
+// keys[(*it_t).id()] = it_t.key();
+// }
+// m_transactionKeys = keys;
+}
+
+void MyMoneyDatabaseMgr::loadInstitutions(const QMap<QString, MyMoneyInstitution>& /*map*/)
+{
+// m_institutionList = map;
+//FIXME: update the database.
+
+// // now fill the key map
+// QMap<QString, QString> keys;
+// QMap<QString, MyMoneyTransaction>::ConstIterator it_t;
+// for(it_t = map.begin(); it_t != map.end(); ++it_t) {
+// keys[(*it_t).id()] = it_t.key();
+// }
+// m_transactionKeys = keys;
+}
+
+void MyMoneyDatabaseMgr::loadPayees(const QMap<QString, MyMoneyPayee>& /*map*/)
+{
+// m_payeeList = map;
+}
+
+void MyMoneyDatabaseMgr::loadSchedules(const QMap<QString, MyMoneySchedule>& /*map*/)
+{
+// m_scheduleList = map;
+}
+
+void MyMoneyDatabaseMgr::loadSecurities(const QMap<QString, MyMoneySecurity>& /*map*/)
+{
+// m_securitiesList = map;
+}
+
+void MyMoneyDatabaseMgr::loadCurrencies(const QMap<QString, MyMoneySecurity>& /*map*/)
+{
+// m_currencyList = map;
+//FIXME: update the database.
+// startTransaction
+// DELETE FROM kmmBudgetConfig
+// for each budget in the map
+// m_sql->addBudget(...)
+// commitTransaction
+// on error, rollbackTransaction
+}
+
+void MyMoneyDatabaseMgr::loadReports( const QMap<QString, MyMoneyReport>& /*reports*/ )
+{
+// m_reportList = reports;
+//FIXME: update the database.
+// startTransaction
+// DELETE FROM kmmBudgetConfig
+// for each budget in the map
+// m_sql->addBudget(...)
+// commitTransaction
+// on error, rollbackTransaction
+}
+
+void MyMoneyDatabaseMgr::loadBudgets( const QMap<QString, MyMoneyBudget>& /*budgets*/ )
+{
+// m_budgetList = budgets;
+//FIXME: update the database.
+// startTransaction
+// DELETE FROM kmmBudgetConfig
+// for each budget in the map
+// m_sql->addBudget(...)
+// commitTransaction
+// on error, rollbackTransaction
+}
+
+void MyMoneyDatabaseMgr::loadPrices(const MyMoneyPriceList& list)
+{
+ Q_UNUSED(list);
+}
+
+unsigned long MyMoneyDatabaseMgr::accountId(void) const
+{ return m_sql->getNextAccountId(); }
+
+unsigned long MyMoneyDatabaseMgr::transactionId(void) const
+{ return m_sql->getNextTransactionId(); }
+
+unsigned long MyMoneyDatabaseMgr::payeeId(void) const
+{ return m_sql->getNextPayeeId(); }
+
+unsigned long MyMoneyDatabaseMgr::institutionId(void) const
+{ return m_sql->getNextInstitutionId(); }
+
+unsigned long MyMoneyDatabaseMgr::scheduleId(void) const
+{ return m_sql->getNextScheduleId(); }
+
+unsigned long MyMoneyDatabaseMgr::securityId(void) const
+{ return m_sql->getNextSecurityId(); }
+
+unsigned long MyMoneyDatabaseMgr::reportId(void) const
+{ return m_sql->getNextReportId(); }
+
+unsigned long MyMoneyDatabaseMgr::budgetId(void) const
+{ return m_sql->getNextBudgetId(); }
+
+void MyMoneyDatabaseMgr::loadAccountId(const unsigned long id)
+{
+ m_sql->loadAccountId(id);
+}
+
+void MyMoneyDatabaseMgr::loadTransactionId(const unsigned long id)
+{
+ m_sql->loadTransactionId(id);
+}
+
+void MyMoneyDatabaseMgr::loadPayeeId(const unsigned long id)
+{
+ m_sql->loadPayeeId(id);
+}
+
+void MyMoneyDatabaseMgr::loadInstitutionId(const unsigned long id)
+{
+ m_sql->loadInstitutionId(id);
+}
+
+void MyMoneyDatabaseMgr::loadScheduleId(const unsigned long id)
+{
+ m_sql->loadScheduleId(id);
+}
+
+void MyMoneyDatabaseMgr::loadSecurityId(const unsigned long id)
+{
+ m_sql->loadSecurityId(id);
+}
+
+void MyMoneyDatabaseMgr::loadReportId(const unsigned long id)
+{
+ m_sql->loadReportId(id);
+}
+
+void MyMoneyDatabaseMgr::loadBudgetId(const unsigned long id)
+{
+ m_sql->loadBudgetId(id);
+}
+
+void MyMoneyDatabaseMgr::rebuildAccountBalances(void)
+{
+ startTransaction();
+ QMap<QString, MyMoneyAccount> accountMap = m_sql->fetchAccounts(QStringList(), true);
+
+ QMap<QString, MyMoneyMoney> balanceMap = m_sql->fetchBalance(accountMap.keys(), QDate());
+
+ for (QMap<QString, MyMoneyMoney>::const_iterator it_b = balanceMap.begin();
+ it_b != balanceMap.end(); ++it_b) {
+ accountMap[it_b.key()].setBalance(it_b.data());
+ }
+
+ for (QMap<QString, MyMoneyAccount>::const_iterator it_a = accountMap.begin();
+ it_a != accountMap.end(); ++it_a) {
+ m_sql->modifyAccount(it_a.data());
+ }
+ commitTransaction();
+}
+
+void MyMoneyDatabaseMgr::removeReferences(const QString& id)
+{
+ QMap<QString, MyMoneyReport>::const_iterator it_r;
+ QMap<QString, MyMoneyBudget>::const_iterator it_b;
+
+ // remove from reports
+ QMap<QString, MyMoneyReport> reportList = m_sql->fetchReports();
+ for(it_r = reportList.begin(); it_r != reportList.end(); ++it_r) {
+ MyMoneyReport r = *it_r;
+ r.removeReference(id);
+// reportList.modify(r.id(), r);
+ }
+
+ // remove from budgets
+ QMap<QString, MyMoneyBudget> budgetList = m_sql->fetchBudgets();
+ for(it_b = budgetList.begin(); it_b != budgetList.end(); ++it_b) {
+ MyMoneyBudget b = *it_b;
+ b.removeReference(id);
+// budgetList.modify(b.id(), b);
+ }
+}
+
+#undef TRY
+#undef CATCH
+#undef PASS
diff --git a/kmymoney2/mymoney/storage/mymoneydatabasemgr.h b/kmymoney2/mymoney/storage/mymoneydatabasemgr.h
new file mode 100644
index 0000000..21bf8d6
--- /dev/null
+++ b/kmymoney2/mymoney/storage/mymoneydatabasemgr.h
@@ -0,0 +1,1038 @@
+/***************************************************************************
+ mymoneydatabasemgr.h - description
+ -------------------
+ begin : June 5 2007
+ copyright : (C) 2007 by Fernando Vilas
+ email : Fernando Vilas <fvilas@iname.com>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYDATABASEMGR_H
+#define MYMONEYDATABASEMGR_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "imymoneyserialize.h"
+#include "imymoneystorage.h"
+#include "mymoneymap.h"
+#include "mymoneystoragesql.h"
+
+/**
+ * The MyMoneyDatabaseMgr class represents the storage engine for databases.
+ * The actual connection and internal storage is handled through the
+ * MyMoneyStorageSql interface.
+ *
+ * The MyMoneyDatabaseMgr must have a MyMoneyStorageSql connected to a
+ * database to be useful. Once connected, data will be loaded from/sent to the
+ * database synchronously. The method dirty() will always return false. Making
+ * this many trips to the database is not very fast, so when possible, the
+ * data cache in MyMoneyFile is used.
+ *
+ */
+class MyMoneyDatabaseMgr : public IMyMoneyStorage, public IMyMoneySerialize,
+ public MyMoneyKeyValueContainer
+{
+public:
+ MyMoneyDatabaseMgr();
+ ~MyMoneyDatabaseMgr();
+
+ // general get functions
+ virtual const MyMoneyPayee user(void) const;
+ virtual const QDate creationDate(void) const;
+ virtual const QDate lastModificationDate(void) const;
+ virtual unsigned int currentFixVersion(void) const;
+ virtual unsigned int fileFixVersion(void) const;
+
+ // general set functions
+ virtual void setUser(const MyMoneyPayee& user);
+ virtual void setFileFixVersion(const unsigned int v);
+
+ // methods provided by MyMoneyKeyValueContainer
+ virtual void setValue(const QString& key, const QString& value);
+ virtual const QString value(const QString& key) const;
+ virtual void deletePair(const QString& key);
+
+ /**
+ * This method is used to duplicate an IMyMoneyStorage object and return
+ * a pointer to the newly created copy. The caller of this method is the
+ * new owner of the object and must destroy it.
+ */
+ virtual MyMoneyDatabaseMgr const * duplicate(void);
+
+ /**
+ * This method is used to create a new account
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param account MyMoneyAccount filled with data
+ */
+ virtual void addAccount(MyMoneyAccount& account);
+
+ /**
+ * This method is used to add one account as sub-ordinate to another
+ * (parent) account. The objects that are passed will be modified
+ * accordingly.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param parent parent account the account should be added to
+ * @param account the account to be added
+ */
+ virtual void addAccount(MyMoneyAccount& parent, MyMoneyAccount& account);
+
+ /**
+ * This method is used to create a new payee
+ *
+ * An exception will be thrown upon error conditions
+ *
+ * @param payee MyMoneyPayee reference to payee information
+ */
+ virtual void addPayee(MyMoneyPayee& payee);
+
+ /**
+ * This method is used to retrieve information about a payee
+ * An exception will be thrown upon error conditions.
+ *
+ * @param id QString reference to id of payee
+ *
+ * @return MyMoneyPayee object of payee
+ */
+ virtual const MyMoneyPayee payee(const QString& id) const;
+
+ /**
+ * This method is used to retrieve the id to a corresponding
+ * name of a payee/receiver.
+ * An exception will be thrown upon error conditions.
+ *
+ * @param payee QString reference to name of payee
+ *
+ * @return MyMoneyPayee object of payee
+ */
+ virtual const MyMoneyPayee payeeByName(const QString& payee) const;
+
+ /**
+ * This method is used to modify an existing payee
+ *
+ * An exception will be thrown upon error conditions
+ *
+ * @param payee MyMoneyPayee reference to payee information
+ */
+ virtual void modifyPayee(const MyMoneyPayee& payee);
+
+ /**
+ * This method is used to remove an existing payee
+ *
+ * An exception will be thrown upon error conditions
+ *
+ * @param payee MyMoneyPayee reference to payee information
+ */
+ virtual void removePayee(const MyMoneyPayee& payee);
+
+ /**
+ * This method returns a list of the payees
+ * inside a MyMoneyStorage object
+ *
+ * @return QValueList<MyMoneyPayee> containing the payee information
+ */
+ virtual const QValueList<MyMoneyPayee> payeeList(void) const;
+
+ /**
+ * Returns the account addressed by it's id.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param id id of the account to locate.
+ * @return reference to MyMoneyAccount object. An exception is thrown
+ * if the id is unknown
+ */
+ virtual const MyMoneyAccount account(const QString& id) const;
+
+ /**
+ * This method is used to check whether a given
+ * account id references one of the standard accounts or not.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param id account id
+ * @return true if account-id is one of the standards, false otherwise
+ */
+ virtual bool isStandardAccount(const QString& id) const;
+
+ /**
+ * This method is used to set the name for the specified standard account
+ * within the storage area. An exception will be thrown, if an error
+ * occurs
+ *
+ * @param id QString reference to one of the standard accounts.
+ * @param name QString reference to the name to be set
+ *
+ */
+ virtual void setAccountName(const QString& id, const QString& name);
+
+ /**
+ * Adds an institution to the storage. A
+ * respective institution-ID will be generated within this record.
+ * The ID is stored as QString in the object passed as argument.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param institution The complete institution information in a
+ * MyMoneyInstitution object
+ */
+ virtual void addInstitution(MyMoneyInstitution& institution);
+
+ /**
+ * Adds a transaction to the file-global transaction pool. A respective
+ * transaction-ID will be generated within this record. The ID is stored
+ * QString with the object.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param transaction reference to the transaction
+ * @param skipAccountUpdate if set, the transaction lists of the accounts
+ * referenced in the splits are not updated. This is used for
+ * bulk loading a lot of transactions but not during normal operation
+ */
+ virtual void addTransaction(MyMoneyTransaction& transaction, const bool skipAccountUpdate = false);
+
+ /**
+ * This method is used to determince, if the account with the
+ * given ID is referenced by any split in m_transactionList.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param id id of the account to be checked for
+ * @return true if account is referenced, false otherwise
+ */
+ virtual bool hasActiveSplits(const QString& id) const;
+
+ /**
+ * This method is used to return the actual balance of an account
+ * without it's sub-ordinate accounts. If a @p date is presented,
+ * the balance at the beginning of this date (not including any
+ * transaction on this date) is returned. Otherwise all recorded
+ * transactions are included in the balance.
+ *
+ * @param id id of the account in question
+ * @param date return balance for specific date
+ * @return balance of the account as MyMoneyMoney object
+ */
+ virtual const MyMoneyMoney balance(const QString& id, const QDate& date) const;
+
+ /**
+ * This method is used to return the actual balance of an account
+ * including it's sub-ordinate accounts. If a @p date is presented,
+ * the balance at the beginning of this date (not including any
+ * transaction on this date) is returned. Otherwise all recorded
+ * transactions are included in the balance.
+ *
+ * @param id id of the account in question
+ * @param date return balance for specific date
+ * @return balance of the account as MyMoneyMoney object
+ */
+ virtual const MyMoneyMoney totalBalance(const QString& id, const QDate& date) const;
+
+ /**
+ * Returns the institution of a given ID
+ *
+ * @param id id of the institution to locate
+ * @return MyMoneyInstitution object filled with data. If the institution
+ * could not be found, an exception will be thrown
+ */
+ virtual const MyMoneyInstitution institution(const QString& id) const;
+
+ /**
+ * This method returns an indicator if the storage object has been
+ * changed after it has last been saved to permanent storage.
+ *
+ * @return true if changed, false if not (for a database, always false).
+ */
+ virtual bool dirty(void) const;
+
+ /**
+ * This method can be used by an external object to force the
+ * storage object to be dirty. This is used e.g. when an upload
+ * to an external destination failed but the previous storage
+ * to a local disk was ok.
+ *
+ * Since the database is synchronized with the application, this method
+ * is a no-op.
+ */
+ virtual void setDirty(void);
+
+ /**
+ * This method returns the number of accounts currently known to this storage
+ * in the range 0..MAXUINT
+ *
+ * @return number of accounts currently known inside a MyMoneyFile object
+ */
+ virtual unsigned int accountCount(void) const;
+
+ /**
+ * This method returns a list of the institutions
+ * inside a MyMoneyStorage object
+ *
+ * @return QValueList<MyMoneyInstitution> containing the
+ * institution information
+ */
+ virtual const QValueList<MyMoneyInstitution> institutionList(void) const;
+
+ /**
+ * Modifies an already existing account in the file global account pool.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param account reference to the new account information
+ * @param skipCheck allows to skip the builtin consistency checks
+ */
+ virtual void modifyAccount(const MyMoneyAccount& account, const bool skipCheck = false);
+
+ /**
+ * Modifies an already existing institution in the file global
+ * institution pool.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param institution The complete new institution information
+ */
+ virtual void modifyInstitution(const MyMoneyInstitution& institution);
+
+ /**
+ * This method is used to update a specific transaction in the
+ * transaction pool of the MyMoneyFile object
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param transaction reference to transaction to be changed
+ */
+ virtual void modifyTransaction(const MyMoneyTransaction& transaction);
+
+ /**
+ * This method re-parents an existing account
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param account MyMoneyAccount reference to account to be re-parented
+ * @param parent MyMoneyAccount reference to new parent account
+ */
+ virtual void reparentAccount(MyMoneyAccount &account, MyMoneyAccount& parent);
+
+ /**
+ * This method is used to remove a transaction from the transaction
+ * pool (journal).
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param transaction const reference to transaction to be deleted
+ */
+ virtual void removeTransaction(const MyMoneyTransaction& transaction);
+
+ /**
+ * This method returns the number of transactions currently known to file
+ * in the range 0..MAXUINT
+ *
+ * @param account QString reference to account id. If account is empty
+ + all transactions (the journal) will be counted. If account
+ * is not empty it returns the number of transactions
+ * that have splits in this account.
+ *
+ * @return number of transactions in journal/account
+ */
+ virtual unsigned int transactionCount(const QString& account = QString()) const;
+
+ /**
+ * This method returns a QMap filled with the number of transactions
+ * per account. The account id serves as index into the map. If one
+ * needs to have all transactionCounts() for many accounts, this method
+ * is faster than calling transactionCount(const QString& account) many
+ * times.
+ *
+ * @return QMap with numbers of transactions per account
+ */
+ virtual const QMap<QString, unsigned long> transactionCountMap(void) const;
+
+ /**
+ * This method is used to pull a list of transactions from the file
+ * global transaction pool. It returns all those transactions
+ * that match the filter passed as argument. If the filter is empty,
+ * the whole journal will be returned.
+ * The list returned is sorted according to the transactions posting date.
+ * If more than one transaction exists for the same date, the order among
+ * them is undefined.
+ *
+ * @param filter MyMoneyTransactionFilter object with the match criteria
+ *
+ * @return set of transactions in form of a QValueList<MyMoneyTransaction>
+ */
+ virtual const QValueList<MyMoneyTransaction> transactionList(MyMoneyTransactionFilter& filter) const;
+
+ /**
+ * This method is the same as above, but instead of a return value, a
+ * parameter is used.
+ *
+ * @param list The set of transactions returned. The list passed in will
+ * be cleared before filling with results.
+ * @param filter MyMoneyTransactionFilter object with the match criteria
+ */
+ virtual void transactionList(QValueList<MyMoneyTransaction>& list, MyMoneyTransactionFilter& filter) const;
+
+ /**
+ * This method is the same as above, but the list contains pairs of
+ * transactions and splits.
+ *
+ * @param list The set of transactions returned. The list passed in will
+ * be cleared before filling with results.
+ * @param filter MyMoneyTransactionFilter object with the match criteria
+ */
+ virtual void transactionList(QValueList<QPair<MyMoneyTransaction, MyMoneySplit> >& list, MyMoneyTransactionFilter& filter) const;
+
+ /**
+ * Deletes an existing account from the file global account pool
+ * This method only allows to remove accounts that are not
+ * referenced by any split. Use moveSplits() to move splits
+ * to another account. An exception is thrown in case of a
+ * problem.
+ *
+ * @param account reference to the account to be deleted.
+ */
+ virtual void removeAccount(const MyMoneyAccount& account);
+
+ /**
+ * Deletes an existing institution from the file global institution pool
+ * Also modifies the accounts that reference this institution as
+ * their institution.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param institution institution to be deleted.
+ */
+ virtual void removeInstitution(const MyMoneyInstitution& institution);
+
+ /**
+ * This method is used to extract a transaction from the file global
+ * transaction pool through an id. In case of an invalid id, an
+ * exception will be thrown.
+ *
+ * @param id id of transaction as QString.
+ * @return the requested transaction
+ */
+ virtual const MyMoneyTransaction transaction(const QString& id) const;
+
+ /**
+ * This method is used to extract a transaction from the file global
+ * transaction pool through an index into an account.
+ *
+ * @param account id of the account as QString
+ * @param idx number of transaction in this account
+ * @return MyMoneyTransaction object
+ */
+ virtual const MyMoneyTransaction transaction(const QString& account, const int idx) const;
+
+ /**
+ * This method returns the number of institutions currently known to file
+ * in the range 0..MAXUINT
+ *
+ * @return number of institutions known to file
+ */
+ virtual unsigned int institutionCount(void) const;
+
+ /**
+ * This method returns a list of accounts inside the storage object.
+ *
+ * @param list reference to QValueList receiving the account objects
+ *
+ * @note The standard accounts will not be returned
+ */
+ virtual void accountList(QValueList<MyMoneyAccount>& list) const;
+
+ /**
+ * This method is used to return the standard liability account
+ * @return MyMoneyAccount liability account(group)
+ */
+ virtual const MyMoneyAccount liability(void) const;
+
+ /**
+ * This method is used to return the standard asset account
+ * @return MyMoneyAccount asset account(group)
+ */
+ virtual const MyMoneyAccount asset(void) const;
+
+ /**
+ * This method is used to return the standard expense account
+ * @return MyMoneyAccount expense account(group)
+ */
+ virtual const MyMoneyAccount expense(void) const;
+
+ /**
+ * This method is used to return the standard income account
+ * @return MyMoneyAccount income account(group)
+ */
+ virtual const MyMoneyAccount income(void) const;
+
+ /**
+ * This method is used to return the standard equity account
+ * @return MyMoneyAccount equity account(group)
+ */
+ virtual const MyMoneyAccount equity(void) const;
+
+ /**
+ * This method is used to create a new security object. The ID will be
+ * created automatically. The object passed with the parameter @p security
+ * is modified to contain the assigned id.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param security MyMoneySecurity filled with data
+ */
+ virtual void addSecurity(MyMoneySecurity& security);
+
+ /**
+ * This method is used to modify an existing MyMoneySecurity
+ * object.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param security reference to the MyMoneySecurity object to be updated
+ */
+ virtual void modifySecurity(const MyMoneySecurity& security);
+
+ /**
+ * This method is used to remove an existing MyMoneySecurity object
+ * from the engine.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param security reference to the MyMoneySecurity object to be removed
+ */
+ virtual void removeSecurity(const MyMoneySecurity& security);
+
+ /**
+ * This method is used to retrieve a single MyMoneySecurity object.
+ * The id of the object must be supplied in the parameter @p id.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param id QString containing the id of the MyMoneySecurity object
+ * @return MyMoneySecurity object
+ */
+ virtual const MyMoneySecurity security(const QString& id) const;
+
+ /**
+ * This method returns a list of the security objects
+ * inside a MyMoneyStorage object
+ *
+ * @return QValueList<MyMoneySecurity> containing objects
+ */
+ virtual const QValueList<MyMoneySecurity> securityList(void) const;
+
+ virtual void addPrice(const MyMoneyPrice& price);
+ virtual void removePrice(const MyMoneyPrice& price);
+ virtual const MyMoneyPrice price(const QString& fromId, const QString& toId, const QDate& date, const bool exactDate) const;
+
+ /**
+ * This method returns a list of all prices.
+ *
+ * @return MyMoneyPriceList of all MyMoneyPrice objects.
+ */
+ virtual const MyMoneyPriceList priceList(void) const;
+
+ /**
+ * This method is used to add a scheduled transaction to the engine.
+ * It must be sure, that the id of the object is not filled. When the
+ * method returns to the caller, the id will be filled with the
+ * newly created object id value.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param sched reference to the MyMoneySchedule object
+ */
+ virtual void addSchedule(MyMoneySchedule& sched);
+
+ /**
+ * This method is used to modify an existing MyMoneySchedule
+ * object. Therefor, the id attribute of the object must be set.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param sched const reference to the MyMoneySchedule object to be updated
+ */
+ virtual void modifySchedule(const MyMoneySchedule& sched);
+
+ /**
+ * This method is used to remove an existing MyMoneySchedule object
+ * from the engine. The id attribute of the object must be set.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param sched const reference to the MyMoneySchedule object to be updated
+ */
+ virtual void removeSchedule(const MyMoneySchedule& sched);
+
+ /**
+ * This method is used to retrieve a single MyMoneySchedule object.
+ * The id of the object must be supplied in the parameter @p id.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param id QString containing the id of the MyMoneySchedule object
+ * @return MyMoneySchedule object
+ */
+ virtual const MyMoneySchedule schedule(const QString& id) const;
+
+ /**
+ * This method is used to extract a list of scheduled transactions
+ * according to the filter criteria passed as arguments.
+ *
+ * @param accountId only search for scheduled transactions that reference
+ * accound @p accountId. If accountId is the empty string,
+ * this filter is off. Default is @p QString().
+ * @param type only schedules of type @p type are searched for.
+ * See MyMoneySchedule::typeE for details.
+ * Default is MyMoneySchedule::TYPE_ANY
+ * @param occurence only schedules of occurence type @p occurance are searched for.
+ * See MyMoneySchedule::occurenceE for details.
+ * Default is MyMoneySchedule::OCCUR_ANY
+ * @param paymentType only schedules of payment method @p paymentType
+ * are searched for.
+ * See MyMoneySchedule::paymentTypeE for details.
+ * Default is MyMoneySchedule::STYPE_ANY
+ * @param startDate only schedules with payment dates after @p startDate
+ * are searched for. Default is all dates (QDate()).
+ * @param endDate only schedules with payment dates ending prior to @p endDate
+ * are searched for. Default is all dates (QDate()).
+ * @param overdue if true, only those schedules that are overdue are
+ * searched for. Default is false (all schedules will be returned).
+ *
+ * @return const QValueList<MyMoneySchedule> list of schedule objects.
+ */
+ virtual const QValueList<MyMoneySchedule> scheduleList(const QString& accountId = QString(),
+ const MyMoneySchedule::typeE type = MyMoneySchedule::TYPE_ANY,
+ const MyMoneySchedule::occurenceE occurence = MyMoneySchedule::OCCUR_ANY,
+ const MyMoneySchedule::paymentTypeE paymentType = MyMoneySchedule::STYPE_ANY,
+ const QDate& startDate = QDate(),
+ const QDate& endDate = QDate(),
+ const bool overdue = false) const;
+
+ virtual const QValueList<MyMoneySchedule> scheduleListEx( int scheduleTypes,
+ int scheduleOcurrences,
+ int schedulePaymentTypes,
+ QDate startDate,
+ const QStringList& accounts=QStringList()) const;
+
+ /**
+ * This method is used to add a new currency object to the engine.
+ * The ID of the object is the trading symbol, so there is no need for an additional
+ * ID since the symbol is guaranteed to be unique.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param currency reference to the MyMoneySecurity object
+ */
+ virtual void addCurrency(const MyMoneySecurity& currency);
+
+ /**
+ * This method is used to modify an existing MyMoneySecurity
+ * object.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param currency reference to the MyMoneyCurrency object
+ */
+ virtual void modifyCurrency(const MyMoneySecurity& currency);
+
+ /**
+ * This method is used to remove an existing MyMoneySecurity object
+ * from the engine.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param currency reference to the MyMoneySecurity object
+ */
+ virtual void removeCurrency(const MyMoneySecurity& currency);
+
+ /**
+ * This method is used to retrieve a single MyMoneySecurity object.
+ * The id of the object must be supplied in the parameter @p id.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param id QString containing the id of the MyMoneySecurity object
+ * @return MyMoneyCurrency object
+ */
+ virtual const MyMoneySecurity currency(const QString& id) const;
+
+ /**
+ * This method is used to retrieve the list of all currencies
+ * known to the engine.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @return QValueList of all MyMoneySecurity objects representing a currency.
+ */
+ virtual const QValueList<MyMoneySecurity> currencyList(void) const;
+
+ /**
+ * This method is used to retrieve the list of all reports
+ * known to the engine.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @return QValueList of all MyMoneyReport objects.
+ */
+ virtual const QValueList<MyMoneyReport> reportList( void ) const;
+
+ /**
+ * This method is used to add a new report to the engine.
+ * It must be sure, that the id of the object is not filled. When the
+ * method returns to the caller, the id will be filled with the
+ * newly created object id value.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param report reference to the MyMoneyReport object
+ */
+ virtual void addReport( MyMoneyReport& report );
+
+ /**
+ * This method is used to modify an existing MyMoneyReport
+ * object. Therefor, the id attribute of the object must be set.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param report const reference to the MyMoneyReport object to be updated
+ */
+ virtual void modifyReport( const MyMoneyReport& report );
+
+ /**
+ * This method returns the number of reports currently known to file
+ * in the range 0..MAXUINT
+ *
+ * @return number of reports known to file
+ */
+ virtual unsigned countReports( void ) const;
+
+ /**
+ * This method is used to retrieve a single MyMoneyReport object.
+ * The id of the object must be supplied in the parameter @p id.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param id QString containing the id of the MyMoneyReport object
+ * @return MyMoneyReport object
+ */
+ virtual const MyMoneyReport report( const QString& id ) const;
+
+ /**
+ * This method is used to remove an existing MyMoneyReport object
+ * from the engine. The id attribute of the object must be set.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param report const reference to the MyMoneyReport object to be updated
+ */
+ virtual void removeReport(const MyMoneyReport& report);
+
+ /**
+ * This method is used to retrieve the list of all budgets
+ * known to the engine.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @return QValueList of all MyMoneyBudget objects.
+ */
+ virtual const QValueList<MyMoneyBudget> budgetList( void ) const;
+
+ /**
+ * This method is used to add a new budget to the engine.
+ * It must be sure, that the id of the object is not filled. When the
+ * method returns to the caller, the id will be filled with the
+ * newly created object id value.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param budget reference to the MyMoneyBudget object
+ */
+ virtual void addBudget( MyMoneyBudget& budget );
+
+ /**
+ * This method is used to retrieve the id to a corresponding
+ * name of a budget
+ * An exception will be thrown upon error conditions.
+ *
+ * @param budget QString reference to name of budget
+ *
+ * @return MyMoneyBudget object of budget
+ */
+ virtual const MyMoneyBudget budgetByName(const QString& budget) const;
+
+ /**
+ * This method is used to modify an existing MyMoneyBudget
+ * object. Therefor, the id attribute of the object must be set.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param budget const reference to the MyMoneyBudget object to be updated
+ */
+ virtual void modifyBudget( const MyMoneyBudget& budget );
+
+ /**
+ * This method returns the number of budgets currently known to file
+ * in the range 0..MAXUINT
+ *
+ * @return number of budgets known to file
+ */
+ virtual unsigned countBudgets( void ) const;
+
+ /**
+ * This method is used to retrieve a single MyMoneyBudget object.
+ * The id of the object must be supplied in the parameter @p id.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param id QString containing the id of the MyMoneyBudget object
+ * @return MyMoneyBudget object
+ */
+ virtual MyMoneyBudget budget( const QString& id ) const;
+
+ /**
+ * This method is used to remove an existing MyMoneyBudget object
+ * from the engine. The id attribute of the object must be set.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param budget const reference to the MyMoneyBudget object to be updated
+ */
+ virtual void removeBudget(const MyMoneyBudget& budget);
+
+
+
+ /**
+ * Clear all internal caches (used internally for performance measurements)
+ */
+ virtual void clearCache(void);
+
+ /**
+ * This method checks, if the given @p object is referenced
+ * by another engine object.
+ *
+ * @param obj const reference to object to be checked
+ * @param skipCheck MyMoneyFileBitArray with ReferenceCheckBits set for which
+ * the check should be skipped
+ *
+ * @retval false @p object is not referenced
+ * @retval true @p institution is referenced
+ */
+ virtual bool isReferenced(const MyMoneyObject& obj, const MyMoneyFileBitArray& skipCheck = MyMoneyFileBitArray()) const;
+
+ /**
+ * This method is provided to allow closing of the database before logoff
+ */
+ virtual void close(void);
+
+ /**
+ * These methods have to be provided to allow transaction safe data handling.
+ */
+ virtual void startTransaction(void);
+ virtual bool commitTransaction(void);
+ virtual void rollbackTransaction(void);
+
+ // general set functions
+ virtual void setCreationDate(const QDate& val);
+
+ /**
+ * This method is used to get a SQL reader for subsequent database access
+ */
+ virtual KSharedPtr <MyMoneyStorageSql> connectToDatabase
+ (const KURL& url);
+ /**
+ * This method is used when a database file is open, and the data is to
+ * be saved in a different file or format. It will ensure that all data
+ * from the database is available in memory to enable it to be written.
+ */
+ virtual void fillStorage();
+
+ /**
+ * This method is used to set the last modification date of
+ * the storage object. It also clears the dirty flag and should
+ * therefor be called as last operation when loading from a
+ * file.
+ *
+ * @param val QDate of last modification
+ */
+ virtual void setLastModificationDate(const QDate& val);
+
+ /**
+ * This method returns whether a given transaction is already in memory, to avoid
+ * reloading it from the database
+ */
+ virtual bool isDuplicateTransaction(const QString&) const;
+
+ virtual void loadAccounts(const QMap<QString, MyMoneyAccount>& map);
+ virtual void loadTransactions(const QMap<QString, MyMoneyTransaction>& map);
+ virtual void loadInstitutions(const QMap<QString, MyMoneyInstitution>& map);
+ virtual void loadPayees(const QMap<QString, MyMoneyPayee>& map);
+ virtual void loadSchedules(const QMap<QString, MyMoneySchedule>& map);
+ virtual void loadSecurities(const QMap<QString, MyMoneySecurity>& map);
+ virtual void loadCurrencies(const QMap<QString, MyMoneySecurity>& map);
+ virtual void loadReports( const QMap<QString, MyMoneyReport>& reports );
+ virtual void loadBudgets( const QMap<QString, MyMoneyBudget>& budgets );
+ virtual void loadPrices(const MyMoneyPriceList& list);
+
+ virtual unsigned long accountId(void) const;
+ virtual unsigned long transactionId(void) const;
+ virtual unsigned long payeeId(void) const;
+ virtual unsigned long institutionId(void) const;
+ virtual unsigned long scheduleId(void) const;
+ virtual unsigned long securityId(void) const;
+ virtual unsigned long reportId(void) const;
+ virtual unsigned long budgetId(void) const;
+
+ virtual void loadAccountId(const unsigned long id);
+ virtual void loadTransactionId(const unsigned long id);
+ virtual void loadPayeeId(const unsigned long id);
+ virtual void loadInstitutionId(const unsigned long id);
+ virtual void loadScheduleId(const unsigned long id);
+ virtual void loadSecurityId(const unsigned long id);
+ virtual void loadReportId(const unsigned long id);
+ virtual void loadBudgetId(const unsigned long id);
+
+ /**
+ * This method is used to retrieve the whole set of key/value pairs
+ * from the container. It is meant to be used for permanent storage
+ * functionality. See MyMoneyKeyValueContainer::pairs() for details.
+ *
+ * @return QMap<QString, QString> containing all key/value pairs of
+ * this container.
+ */
+ virtual const QMap<QString, QString> pairs(void) const;
+
+ /**
+ * This method is used to initially store a set of key/value pairs
+ * in the container. It is meant to be used for loading functionality
+ * from permanent storage. See MyMoneyKeyValueContainer::setPairs()
+ * for details
+ *
+ * @param list const QMap<QString, QString> containing the set of
+ * key/value pairs to be loaded into the container.
+ *
+ * @note All existing key/value pairs in the container will be deleted.
+ */
+ virtual void setPairs(const QMap<QString, QString>& list);
+
+ /**
+ * This method recalculates the balances of all accounts
+ * based on the transactions stored in the engine.
+ */
+ virtual void rebuildAccountBalances(void);
+
+private:
+ /**
+ * This member variable keeps the creation date of this MyMoneySeqAccessMgr
+ * object. It is set during the constructor and can only be modified using
+ * the stream read operator.
+ */
+ QDate m_creationDate;
+
+ /**
+ * This member variable contains the current fix level of application
+ * data files. (see kmymoneyview.cpp)
+ */
+ unsigned int m_currentFixVersion;
+
+ /**
+ * This member variable contains the current fix level of the
+ * presently open data file. (see kmymoneyview.cpp)
+ */
+ unsigned int m_fileFixVersion;
+
+ /**
+ * This member variable keeps the date of the last modification of
+ * the MyMoneySeqAccessMgr object.
+ */
+ QDate m_lastModificationDate;
+
+ /**
+ * This contains the interface with SQL reader for database access
+ */
+ KSharedPtr <MyMoneyStorageSql> m_sql;
+
+ /**
+ * This member variable keeps the User information.
+ * @see setUser()
+ */
+ MyMoneyPayee m_user;
+
+ /**
+ * This method is used to get the next valid ID for a institution
+ * @return id for a institution
+ */
+ const QString nextInstitutionID(void);
+
+ /**
+ * This method is used to get the next valid ID for an account
+ * @return id for an account
+ */
+ const QString nextAccountID(void);
+
+ /**
+ * This method is used to get the next valid ID for a transaction
+ * @return id for a transaction
+ */
+ const QString nextTransactionID(void);
+
+ /**
+ * This method is used to get the next valid ID for a payee
+ * @return id for a payee
+ */
+ const QString nextPayeeID(void);
+
+ /**
+ * This method is used to get the next valid ID for a scheduled transaction
+ * @return id for a scheduled transaction
+ */
+ const QString nextScheduleID(void);
+
+ /**
+ * This method is used to get the next valid ID for an security object.
+ * @return id for an security object
+ */
+ const QString nextSecurityID(void);
+
+ const QString nextReportID(void);
+
+ /**
+ * This method is used to get the next valid ID for a budget object.
+ * @return id for an budget object
+ */
+ const QString nextBudgetID(void);
+
+ void removeReferences(const QString& id);
+
+ static const int INSTITUTION_ID_SIZE = 6;
+ static const int ACCOUNT_ID_SIZE = 6;
+ static const int TRANSACTION_ID_SIZE = 18;
+ static const int PAYEE_ID_SIZE = 6;
+ static const int SCHEDULE_ID_SIZE = 6;
+ static const int SECURITY_ID_SIZE = 6;
+ static const int REPORT_ID_SIZE = 6;
+ static const int BUDGET_ID_SIZE = 6;
+
+ // Increment this to force an update in KMMView.
+ // This is different from the db schema version stored in
+ // MMStorageSql::m_majorVersion
+ static const int CURRENT_FIX_VERSION = 3;
+
+};
+#endif
diff --git a/kmymoney2/mymoney/storage/mymoneydatabasemgrtest.cpp b/kmymoney2/mymoney/storage/mymoneydatabasemgrtest.cpp
new file mode 100644
index 0000000..f6a2bba
--- /dev/null
+++ b/kmymoney2/mymoney/storage/mymoneydatabasemgrtest.cpp
@@ -0,0 +1,1996 @@
+/***************************************************************************
+ mymoneydatabasemgrtest.cpp
+ -------------------
+ copyright : (C) 2008 by Fernando Vilas
+ email : fvilas@iname.com
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "mymoneydatabasemgrtest.h"
+#include <pwd.h>
+#include <iostream>
+
+MyMoneyDatabaseMgrTest::MyMoneyDatabaseMgrTest()
+ : m_dbAttached (false),
+ m_canOpen (true)
+{}
+
+void MyMoneyDatabaseMgrTest::setUp()
+{
+ m = new MyMoneyDatabaseMgr;
+
+ m->startTransaction();
+}
+
+void MyMoneyDatabaseMgrTest::tearDown()
+{
+ if (m_canOpen) {
+ m->commitTransaction();
+ }
+ if (MyMoneyFile::instance()->storageAttached()) {
+ MyMoneyFile::instance()->detachStorage(m);
+ }
+ delete m;
+}
+
+void MyMoneyDatabaseMgrTest::testEmptyConstructor()
+{
+ MyMoneyPayee user = m->user();
+
+ CPPUNIT_ASSERT(user.name().isEmpty());
+ CPPUNIT_ASSERT(user.address().isEmpty());
+ CPPUNIT_ASSERT(user.city().isEmpty());
+ CPPUNIT_ASSERT(user.state().isEmpty());
+ CPPUNIT_ASSERT(user.postcode().isEmpty());
+ CPPUNIT_ASSERT(user.telephone().isEmpty());
+ CPPUNIT_ASSERT(user.email().isEmpty());
+ CPPUNIT_ASSERT(m->nextInstitutionID() == 0);
+ CPPUNIT_ASSERT(m->nextAccountID() == 0);
+ CPPUNIT_ASSERT(m->nextTransactionID() == 0);
+ CPPUNIT_ASSERT(m->nextPayeeID() == 0);
+ CPPUNIT_ASSERT(m->nextScheduleID() == 0);
+ CPPUNIT_ASSERT(m->nextReportID() == 0);
+ CPPUNIT_ASSERT(m->institutionList().count() == 0);
+
+ QValueList<MyMoneyAccount> accList;
+ m->accountList(accList);
+ CPPUNIT_ASSERT(accList.count() == 0);
+
+ MyMoneyTransactionFilter f;
+ CPPUNIT_ASSERT(m->transactionList(f).count() == 0);
+
+ CPPUNIT_ASSERT(m->payeeList().count() == 0);
+ CPPUNIT_ASSERT(m->scheduleList().count() == 0);
+
+ CPPUNIT_ASSERT(m->m_creationDate == QDate::currentDate());
+}
+
+void MyMoneyDatabaseMgrTest::testCreateDb() {
+ m->commitTransaction();
+
+ // Fetch the list of available drivers
+ QStringList list = QSqlDatabase::drivers();
+ QStringList::Iterator it = list.begin();
+
+ if (it == list.end()) {
+ m_canOpen = false;
+ } else {
+ struct passwd * pwd = getpwuid(geteuid());
+ QString userName;
+ if (pwd != 0) {
+ userName = QString(pwd->pw_name);
+ }
+ //"QMYSQL3"
+ //"QPSQL7"
+ //"QSQLITE3"
+ m_url = "sql://" + userName + "@localhost/kmm_test_driver?driver="
+ //"QPSQL7&mode=single";
+ //"QSQLITE3&mode=single";
+ //"QMYSQL3&mode=single";
+ + *it + "&mode=single";
+ KSharedPtr <MyMoneyStorageSql> sql = m->connectToDatabase(m_url);
+ CPPUNIT_ASSERT(0 != sql);
+ //qDebug("Database driver is %s", sql->driverName().ascii());
+ // Clear the database, so there is a fresh start on each run.
+ if (0 == sql->open(m_url, IO_WriteOnly, true)) {
+ MyMoneyFile::instance()->attachStorage(m);
+ CPPUNIT_ASSERT(sql->writeFile());
+ m->startTransaction();
+ CPPUNIT_ASSERT(0 == sql->upgradeDb());
+ } else {
+ m_canOpen = false;
+ }
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testAttachDb() {
+ if (!m_dbAttached) {
+ testCreateDb();
+ if (m_canOpen) {
+ MyMoneyFile::instance()->detachStorage();
+ KSharedPtr <MyMoneyStorageSql> sql = m->connectToDatabase(m_url);
+ CPPUNIT_ASSERT(sql);
+ int openStatus = sql->open(m_url, IO_ReadWrite);
+ CPPUNIT_ASSERT(0 == openStatus);
+ MyMoneyFile::instance()->attachStorage(m);
+ m->startTransaction();
+ m_dbAttached = true;
+ }
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testSetFunctions() {
+ testAttachDb();
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ MyMoneyPayee user = m->user();
+
+ user.setName("Name");
+ m->setUser(user);
+ user.setAddress("Street");
+ m->setUser(user);
+ user.setCity("Town");
+ m->setUser(user);
+ user.setState("County");
+ m->setUser(user);
+ user.setPostcode("Postcode");
+ m->setUser(user);
+ user.setTelephone("Telephone");
+ m->setUser(user);
+ user.setEmail("Email");
+ m->setUser(user);
+ m->setValue("key", "value");
+
+ user = m->user();
+ CPPUNIT_ASSERT(user.name() == "Name");
+ CPPUNIT_ASSERT(user.address() == "Street");
+ CPPUNIT_ASSERT(user.city() == "Town");
+ CPPUNIT_ASSERT(user.state() == "County");
+ CPPUNIT_ASSERT(user.postcode() == "Postcode");
+ CPPUNIT_ASSERT(user.telephone() == "Telephone");
+ CPPUNIT_ASSERT(user.email() == "Email");
+ CPPUNIT_ASSERT(m->value("key") == "value");
+
+ m->setDirty();
+ m->deletePair("key");
+ CPPUNIT_ASSERT(m->dirty() == false);
+}
+
+void MyMoneyDatabaseMgrTest::testSupportFunctions()
+{
+ testAttachDb();
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ CPPUNIT_ASSERT(m->nextInstitutionID() == "I000001");
+ CPPUNIT_ASSERT(m->nextAccountID() == "A000001");
+ CPPUNIT_ASSERT(m->nextTransactionID() == "T000000000000000001");
+ CPPUNIT_ASSERT(m->nextPayeeID() == "P000001");
+ CPPUNIT_ASSERT(m->nextScheduleID() == "SCH000001");
+ CPPUNIT_ASSERT(m->nextReportID() == "R000001");
+
+ CPPUNIT_ASSERT(m->liability().name() == "Liability");
+ CPPUNIT_ASSERT(m->asset().name() == "Asset");
+ CPPUNIT_ASSERT(m->expense().name() == "Expense");
+ CPPUNIT_ASSERT(m->income().name() == "Income");
+ CPPUNIT_ASSERT(m->equity().name() == "Equity");
+ CPPUNIT_ASSERT(m->dirty() == false);
+}
+
+void MyMoneyDatabaseMgrTest::testIsStandardAccount()
+{
+ testAttachDb();
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ CPPUNIT_ASSERT(m->isStandardAccount(STD_ACC_LIABILITY) == true);
+ CPPUNIT_ASSERT(m->isStandardAccount(STD_ACC_ASSET) == true);
+ CPPUNIT_ASSERT(m->isStandardAccount(STD_ACC_EXPENSE) == true);
+ CPPUNIT_ASSERT(m->isStandardAccount(STD_ACC_INCOME) == true);
+ CPPUNIT_ASSERT(m->isStandardAccount(STD_ACC_EQUITY) == true);
+ CPPUNIT_ASSERT(m->isStandardAccount("A0002") == false);
+}
+
+void MyMoneyDatabaseMgrTest::testNewAccount() {
+ testAttachDb();
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ MyMoneyAccount a;
+
+ a.setName("AccountName");
+ a.setNumber("AccountNumber");
+
+ m->addAccount(a);
+
+ CPPUNIT_ASSERT(m->accountId() == 1);
+ QValueList<MyMoneyAccount> accList;
+ m->accountList(accList);
+ CPPUNIT_ASSERT(accList.count() == 1);
+ CPPUNIT_ASSERT((*(accList.begin())).name() == "AccountName");
+ CPPUNIT_ASSERT((*(accList.begin())).id() == "A000001");
+}
+
+void MyMoneyDatabaseMgrTest::testAccount() {
+ testNewAccount();
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ m->setDirty();
+
+ MyMoneyAccount a;
+
+ // make sure that an invalid ID causes an exception
+ try {
+ a = m->account("Unknown ID");
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+ CPPUNIT_ASSERT(m->dirty() == false);
+
+ // now make sure, that a real ID works
+ try {
+ a = m->account("A000001");
+ CPPUNIT_ASSERT(a.name() == "AccountName");
+ CPPUNIT_ASSERT(a.id() == "A000001");
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testAddNewAccount() {
+ testNewAccount();
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ MyMoneyAccount a,b;
+ b.setName("Account2");
+ b.setNumber("Acc2");
+ m->addAccount(b);
+
+ m->setDirty();
+
+ CPPUNIT_ASSERT(m->accountId() == 2);
+ QValueList<MyMoneyAccount> accList;
+ m->accountList(accList);
+ CPPUNIT_ASSERT(accList.count() == 2);
+
+ // try to add account to undefined account
+ try {
+ MyMoneyAccount c("UnknownID", b);
+ m->addAccount(c, a);
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+
+ CPPUNIT_ASSERT(m->dirty() == false);
+ // now try to add account 1 as sub-account to account 2
+ a = m->account("A000001");
+ try {
+ CPPUNIT_ASSERT(m->asset().accountList().count() == 0);
+ m->addAccount(b, a);
+ MyMoneyAccount acc (m->account("A000002"));
+ CPPUNIT_ASSERT(acc.accountList()[0] == "A000001");
+ CPPUNIT_ASSERT(acc.accountList().count() == 1);
+ CPPUNIT_ASSERT(m->asset().accountList().count() == 0);
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testAddInstitution() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ MyMoneyInstitution i;
+
+ i.setName("Inst Name");
+
+ m->addInstitution(i);
+ CPPUNIT_ASSERT(m->institutionList().count() == 1);
+ CPPUNIT_ASSERT(m->institutionId() == 1);
+ CPPUNIT_ASSERT((*(m->institutionList().begin())).name() == "Inst Name");
+ CPPUNIT_ASSERT((*(m->institutionList().begin())).id() == "I000001");
+}
+
+void MyMoneyDatabaseMgrTest::testInstitution() {
+ testAddInstitution();
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ MyMoneyInstitution i;
+
+ m->setDirty();
+
+ // try to find unknown institution
+ try {
+ i = m->institution("Unknown ID");
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+
+ CPPUNIT_ASSERT(m->dirty() == false);
+
+ // now try to find real institution
+ try {
+ i = m->institution("I000001");
+ CPPUNIT_ASSERT(i.name() == "Inst Name");
+ CPPUNIT_ASSERT(m->dirty() == false);
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testAccount2Institution() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ testAddInstitution();
+ testAddNewAccount();
+
+ MyMoneyInstitution i;
+ MyMoneyAccount a, b;
+
+ try {
+ i = m->institution("I000001");
+ a = m->account("A000001");
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ m->setDirty();
+
+ // try to add to a false institution
+ MyMoneyInstitution fake("Unknown ID", i);
+ a.setInstitutionId(fake.id());
+ try {
+ m->modifyAccount(a);
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+
+ CPPUNIT_ASSERT(m->dirty() == false);
+ // now try to do it with a real institution
+ try {
+ CPPUNIT_ASSERT(i.accountList().count() == 0);
+ a.setInstitutionId(i.id());
+ m->modifyAccount(a);
+ CPPUNIT_ASSERT(a.institutionId() == i.id());
+ b = m->account("A000001");
+ CPPUNIT_ASSERT(b.institutionId() == i.id());
+ CPPUNIT_ASSERT(i.accountList().count() == 0);
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testModifyAccount() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ testAccount2Institution();
+
+ // test the OK case
+ MyMoneyAccount a = m->account("A000001");
+ a.setName("New account name");
+ m->setDirty();
+ try {
+ m->modifyAccount(a);
+ MyMoneyAccount b = m->account("A000001");
+ CPPUNIT_ASSERT(b.parentAccountId() == a.parentAccountId());
+ CPPUNIT_ASSERT(b.name() == "New account name");
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ // modify institution to unknown id
+ MyMoneyAccount c("Unknown ID", a);
+ m->setDirty();
+ try {
+ m->modifyAccount(c);
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+
+ // use different account type
+ MyMoneyAccount d;
+ d.setAccountType(MyMoneyAccount::CreditCard);
+ MyMoneyAccount f("A000001", d);
+ try {
+ m->modifyAccount(f);
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+
+ // use different parent
+ a.setParentAccountId("A000002");
+ try {
+ m->modifyAccount(c);
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testModifyInstitution() {
+ testAddInstitution();
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ MyMoneyInstitution i = m->institution("I000001");
+
+ m->setDirty();
+ i.setName("New inst name");
+ try {
+ m->modifyInstitution(i);
+ i = m->institution("I000001");
+ CPPUNIT_ASSERT(i.name() == "New inst name");
+
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ // try to modify an institution that does not exist
+ MyMoneyInstitution f("Unknown ID", i);
+ try {
+ m->modifyInstitution(f);
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testReparentAccount() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ // this one adds some accounts to the database
+ MyMoneyAccount ex1;
+ ex1.setAccountType(MyMoneyAccount::Expense);
+ MyMoneyAccount ex2;
+ ex2.setAccountType(MyMoneyAccount::Expense);
+ MyMoneyAccount ex3;
+ ex3.setAccountType(MyMoneyAccount::Expense);
+ MyMoneyAccount ex4;
+ ex4.setAccountType(MyMoneyAccount::Expense);
+ MyMoneyAccount in;
+ in.setAccountType(MyMoneyAccount::Income);
+ MyMoneyAccount ch;
+ ch.setAccountType(MyMoneyAccount::Checkings);
+
+ ex1.setName("Sales Tax");
+ ex2.setName("Sales Tax 16%");
+ ex3.setName("Sales Tax 7%");
+ ex4.setName("Grosseries");
+
+ in.setName("Salary");
+ ch.setName("My checkings account");
+
+ try {
+ m->addAccount(ex1);
+ m->addAccount(ex2);
+ m->addAccount(ex3);
+ m->addAccount(ex4);
+ m->addAccount(in);
+ m->addAccount(ch);
+
+ CPPUNIT_ASSERT(ex1.id() == "A000001");
+ CPPUNIT_ASSERT(ex2.id() == "A000002");
+ CPPUNIT_ASSERT(ex3.id() == "A000003");
+ CPPUNIT_ASSERT(ex4.id() == "A000004");
+ CPPUNIT_ASSERT(in.id() == "A000005");
+ CPPUNIT_ASSERT(ch.id() == "A000006");
+
+ MyMoneyAccount parent = m->expense();
+
+ m->addAccount(parent, ex1);
+ m->addAccount(ex1, ex2);
+ m->addAccount(parent, ex3);
+ m->addAccount(parent, ex4);
+
+ parent = m->income();
+ m->addAccount(parent, in);
+
+ parent = m->asset();
+ m->addAccount(parent, ch);
+
+ MyMoneyFile::instance()->preloadCache();
+ CPPUNIT_ASSERT(m->expense().accountCount() == 3);
+ CPPUNIT_ASSERT(m->account(ex1.id()).accountCount() == 1);
+ CPPUNIT_ASSERT(ex3.parentAccountId() == STD_ACC_EXPENSE);
+
+ //for (int i = 0; i < 100; ++i) {
+ m->reparentAccount(ex3, ex1);
+ //}
+ MyMoneyFile::instance()->preloadCache();
+ CPPUNIT_ASSERT(m->expense().accountCount() == 2);
+ CPPUNIT_ASSERT(m->account(ex1.id()).accountCount() == 2);
+ CPPUNIT_ASSERT(ex3.parentAccountId() == ex1.id());
+ } catch (MyMoneyException *e) {
+ std::cout << std::endl << e->what() << std::endl;
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testAddTransactions() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ testReparentAccount();
+
+ MyMoneyAccount ch;
+ MyMoneyTransaction t1, t2;
+ MyMoneySplit s;
+
+ try {
+ // I made some money, great
+ s.setAccountId("A000006"); // Checkings
+ s.setShares(100000);
+ s.setValue(100000);
+ CPPUNIT_ASSERT(s.id().isEmpty());
+ t1.addSplit(s);
+
+ s.setId(QString()); // enable re-usage of split variable
+ s.setAccountId("A000005"); // Salary
+ s.setShares(-100000);
+ s.setValue(-100000);
+ CPPUNIT_ASSERT(s.id().isEmpty());
+ t1.addSplit(s);
+
+ t1.setPostDate(QDate(2002,5,10));
+ } catch (MyMoneyException *e) {
+ unexpectedException(e);
+ }
+
+ m->setDirty();
+ try {
+ m->addTransaction(t1);
+ CPPUNIT_ASSERT(t1.id() == "T000000000000000001");
+ CPPUNIT_ASSERT(t1.splitCount() == 2);
+ CPPUNIT_ASSERT(m->transactionCount() == 1);
+ } catch (MyMoneyException *e) {
+ unexpectedException(e);
+ }
+
+ try {
+ // I spent some money, not so great
+ s.setId(QString()); // enable re-usage of split variable
+ s.setAccountId("A000004"); // Grosseries
+ s.setShares(10000);
+ s.setValue(10000);
+ CPPUNIT_ASSERT(s.id().isEmpty());
+ t2.addSplit(s);
+
+ s.setId(QString()); // enable re-usage of split variable
+ s.setAccountId("A000002"); // 16% sales tax
+ s.setShares(1200);
+ s.setValue(1200);
+ CPPUNIT_ASSERT(s.id().isEmpty());
+ t2.addSplit(s);
+
+ s.setId(QString()); // enable re-usage of split variable
+ s.setAccountId("A000003"); // 7% sales tax
+ s.setShares(400);
+ s.setValue(400);
+ CPPUNIT_ASSERT(s.id().isEmpty());
+ t2.addSplit(s);
+
+ s.setId(QString()); // enable re-usage of split variable
+ s.setAccountId("A000006"); // Checkings account
+ s.setShares(-11600);
+ s.setValue(-11600);
+ CPPUNIT_ASSERT(s.id().isEmpty());
+ t2.addSplit(s);
+
+ t2.setPostDate(QDate(2002,5,9));
+ } catch (MyMoneyException *e) {
+ unexpectedException(e);
+ }
+ m->setDirty();
+ try {
+ m->addTransaction(t2);
+ CPPUNIT_ASSERT(t2.id() == "T000000000000000002");
+ CPPUNIT_ASSERT(t2.splitCount() == 4);
+ CPPUNIT_ASSERT(m->transactionCount() == 2);
+
+ //QMap<QString, QString>::ConstIterator it_k;
+ MyMoneyTransactionFilter f;
+ QValueList<MyMoneyTransaction> transactionList (m->transactionList(f));
+ QValueList<MyMoneyTransaction>::ConstIterator it_t (transactionList.begin());
+
+ //CPPUNIT_ASSERT((*it_k) == "2002-05-10-T000000000000000001");
+ CPPUNIT_ASSERT((*it_t).id() == "T000000000000000002");
+ //++it_k;
+ ++it_t;
+ //CPPUNIT_ASSERT((*it_k) == "2002-05-09-T000000000000000002");
+ CPPUNIT_ASSERT((*it_t).id() == "T000000000000000001");
+ //++it_k;
+ ++it_t;
+ //CPPUNIT_ASSERT(it_k == m->m_transactionKeys.end());
+ CPPUNIT_ASSERT(it_t == transactionList.end());
+
+ ch = m->account("A000006");
+
+ // check that the account's transaction list is updated
+ QValueList<MyMoneyTransaction> list;
+ MyMoneyTransactionFilter filter("A000006");
+ list = m->transactionList(filter);
+ CPPUNIT_ASSERT(list.size() == 2);
+
+ QValueList<MyMoneyTransaction>::ConstIterator it;
+ it = list.begin();
+ CPPUNIT_ASSERT((*it).id() == "T000000000000000002");
+ ++it;
+ CPPUNIT_ASSERT((*it).id() == "T000000000000000001");
+ ++it;
+ CPPUNIT_ASSERT(it == list.end());
+
+ } catch (MyMoneyException *e) {
+ unexpectedException(e);
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testTransactionCount() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ testAddTransactions();
+ CPPUNIT_ASSERT(m->transactionCount("A000001") == 0);
+ CPPUNIT_ASSERT(m->transactionCount("A000002") == 1);
+ CPPUNIT_ASSERT(m->transactionCount("A000003") == 1);
+ CPPUNIT_ASSERT(m->transactionCount("A000004") == 1);
+ CPPUNIT_ASSERT(m->transactionCount("A000005") == 1);
+ CPPUNIT_ASSERT(m->transactionCount("A000006") == 2);
+}
+
+void MyMoneyDatabaseMgrTest::testAddBudget() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ MyMoneyBudget budget;
+
+ budget.setName("TestBudget");
+ budget.setBudgetStart(QDate::currentDate(Qt::LocalTime));
+
+ m->addBudget(budget);
+
+ CPPUNIT_ASSERT(m->budgetList().count() == 1);
+ CPPUNIT_ASSERT(m->budgetId() == 1);
+ MyMoneyBudget newBudget = m->budgetByName("TestBudget");
+
+ CPPUNIT_ASSERT(budget.budgetStart() == newBudget.budgetStart());
+ CPPUNIT_ASSERT(budget.name() == newBudget.name());
+}
+
+void MyMoneyDatabaseMgrTest::testCopyBudget() {
+ testAddBudget();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ try {
+ MyMoneyBudget oldBudget = m->budgetByName("TestBudget");
+ MyMoneyBudget newBudget = oldBudget;
+
+ newBudget.clearId();
+ newBudget.setName(QString("Copy of %1").arg(oldBudget.name()));
+ m->addBudget(newBudget);
+
+ CPPUNIT_ASSERT(m->budgetList().count() == 2);
+ CPPUNIT_ASSERT(m->budgetId() == 2);
+
+ MyMoneyBudget testBudget = m->budgetByName("TestBudget");
+
+ CPPUNIT_ASSERT(oldBudget.budgetStart() == testBudget.budgetStart());
+ CPPUNIT_ASSERT(oldBudget.name() == testBudget.name());
+
+ testBudget = m->budgetByName("Copy of TestBudget");
+
+ CPPUNIT_ASSERT(testBudget.budgetStart() == newBudget.budgetStart());
+ CPPUNIT_ASSERT(testBudget.name() == newBudget.name());
+ } catch (QString& s) {
+ std::cout << "Error in testCopyBudget(): " << s << std::endl;
+ CPPUNIT_ASSERT(false);
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testModifyBudget() {
+ testAddBudget();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ MyMoneyBudget budget = m->budgetByName("TestBudget");
+
+ budget.setBudgetStart(QDate::currentDate(Qt::LocalTime).addDays(-1));
+
+ m->modifyBudget(budget);
+
+ MyMoneyBudget newBudget = m->budgetByName("TestBudget");
+
+ CPPUNIT_ASSERT(budget.id() == newBudget.id());
+ CPPUNIT_ASSERT(budget.budgetStart() == newBudget.budgetStart());
+ CPPUNIT_ASSERT(budget.name() == newBudget.name());
+}
+
+void MyMoneyDatabaseMgrTest::testRemoveBudget() {
+ testAddBudget();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ MyMoneyBudget budget = m->budgetByName("TestBudget");
+ m->removeBudget(budget);
+
+ try {
+ budget = m->budgetByName("TestBudget");
+ // exception should be thrown if budget not found.
+ CPPUNIT_ASSERT(false);
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_ASSERT(true);
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testBalance() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ testAddTransactions();
+
+ CPPUNIT_ASSERT(m->balance("A000001", QDate()).isZero());
+ CPPUNIT_ASSERT(m->balance("A000002", QDate()) == MyMoneyMoney(1200));
+ CPPUNIT_ASSERT(m->balance("A000003", QDate()) == MyMoneyMoney(400));
+ //Add a transaction to zero account A000003
+ MyMoneyTransaction t1;
+ MyMoneySplit s;
+
+ s.setAccountId("A000003");
+ s.setShares(-400);
+ s.setValue(-400);
+ CPPUNIT_ASSERT(s.id().isEmpty());
+ t1.addSplit(s);
+
+ s.setId(QString()); // enable re-usage of split variable
+ s.setAccountId("A000002");
+ s.setShares(400);
+ s.setValue(400);
+ CPPUNIT_ASSERT(s.id().isEmpty());
+ t1.addSplit(s);
+
+ t1.setPostDate(QDate(2007,5,10));
+
+ m->addTransaction(t1);
+
+ //qDebug ("Balance of A000003 is 0 = %s", m->balance("A000003", QDate()).toString().ascii());
+ CPPUNIT_ASSERT(m->balance("A000003", QDate()).isZero());
+
+ //qDebug ("Balance of A000001 is 1600 = %s", m->balance("A000001", QDate()).toString().ascii());
+ CPPUNIT_ASSERT(m->totalBalance("A000001", QDate()) == MyMoneyMoney(1600));
+
+ //qDebug ("Balance of A000006 is -11600 = %s", m->balance("A000006", QDate(2002,5,9)).toString().ascii());
+ CPPUNIT_ASSERT(m->balance("A000006", QDate(2002,5,9)) == MyMoneyMoney(-11600));
+
+ //qDebug ("Balance of A000005 is -100000 = %s", m->balance("A000005", QDate(2002,5,10)).toString().ascii());
+ CPPUNIT_ASSERT(m->balance("A000005", QDate(2002,5,10)) == MyMoneyMoney(-100000));
+
+ //qDebug ("Balance of A000006 is 88400 = %s", m->balance("A000006", QDate(2002,5,10)).toString().ascii());
+ CPPUNIT_ASSERT(m->balance("A000006", QDate(2002,5,10)) == MyMoneyMoney(88400));
+}
+
+void MyMoneyDatabaseMgrTest::testModifyTransaction() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ testAddTransactions();
+
+ MyMoneyTransaction t = m->transaction("T000000000000000002");
+ MyMoneySplit s;
+ MyMoneyAccount ch;
+
+ // just modify simple stuff (splits)
+ CPPUNIT_ASSERT(t.splitCount() == 4);
+
+ s = t.splits()[0];
+ s.setShares(11000);
+ s.setValue(11000);
+ t.modifySplit(s);
+
+ CPPUNIT_ASSERT(t.splitCount() == 4);
+ s = t.splits()[3];
+ s.setShares(-12600);
+ s.setValue(-12600);
+ t.modifySplit(s);
+
+ try {
+ CPPUNIT_ASSERT(m->balance("A000004", QDate()) == MyMoneyMoney(10000));
+ CPPUNIT_ASSERT(m->balance("A000006", QDate()) == MyMoneyMoney(100000-11600));
+ CPPUNIT_ASSERT(m->totalBalance("A000001", QDate()) == MyMoneyMoney(1600));
+ m->modifyTransaction(t);
+ CPPUNIT_ASSERT(m->balance("A000004", QDate()) == MyMoneyMoney(11000));
+ CPPUNIT_ASSERT(m->balance("A000006", QDate()) == MyMoneyMoney(100000-12600));
+ CPPUNIT_ASSERT(m->totalBalance("A000001", QDate()) == MyMoneyMoney(1600));
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ // now modify the date
+ t.setPostDate(QDate(2002,5,11));
+ try {
+ m->modifyTransaction(t);
+ CPPUNIT_ASSERT(m->balance("A000004", QDate()) == MyMoneyMoney(11000));
+ CPPUNIT_ASSERT(m->balance("A000006", QDate()) == MyMoneyMoney(100000-12600));
+ CPPUNIT_ASSERT(m->totalBalance("A000001", QDate()) == MyMoneyMoney(1600));
+
+ //QMap<QString, QString>::ConstIterator it_k;
+ MyMoneyTransactionFilter f;
+ QValueList<MyMoneyTransaction> transactionList (m->transactionList(f));
+ QValueList<MyMoneyTransaction>::ConstIterator it_t (transactionList.begin());
+ //it_k = m->m_transactionKeys.begin();
+ //CPPUNIT_ASSERT((*it_k) == "2002-05-10-T000000000000000001");
+ CPPUNIT_ASSERT((*it_t).id() == "T000000000000000001");
+ //++it_k;
+ ++it_t;
+ //CPPUNIT_ASSERT((*it_k) == "2002-05-11-T000000000000000002");
+ CPPUNIT_ASSERT((*it_t).id() == "T000000000000000002");
+ //++it_k;
+ ++it_t;
+ //CPPUNIT_ASSERT(it_k == m->m_transactionKeys.end());
+ CPPUNIT_ASSERT(it_t == transactionList.end());
+
+ ch = m->account("A000006");
+
+ // check that the account's transaction list is updated
+ QValueList<MyMoneyTransaction> list;
+ MyMoneyTransactionFilter filter("A000006");
+ list = m->transactionList(filter);
+ CPPUNIT_ASSERT(list.size() == 2);
+
+ QValueList<MyMoneyTransaction>::ConstIterator it;
+ it = list.begin();
+ CPPUNIT_ASSERT((*it).id() == "T000000000000000001");
+ ++it;
+ CPPUNIT_ASSERT((*it).id() == "T000000000000000002");
+ ++it;
+ CPPUNIT_ASSERT(it == list.end());
+
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+
+void MyMoneyDatabaseMgrTest::testRemoveUnusedAccount() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ testAccount2Institution();
+
+ MyMoneyAccount a = m->account("A000001");
+ MyMoneyInstitution i = m->institution("I000001");
+
+ m->setDirty();
+ // make sure, we cannot remove the standard account groups
+ try {
+ m->removeAccount(m->liability());
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+
+ try {
+ m->removeAccount(m->asset());
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+
+ try {
+ m->removeAccount(m->expense());
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+
+ try {
+ m->removeAccount(m->income());
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+
+ // try to remove the account still attached to the institution
+ try {
+ m->removeAccount(a);
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+
+ // now really remove an account
+
+ try {
+ MyMoneyFile::instance()->preloadCache();
+ i = m->institution("I000001");
+
+ //CPPUNIT_ASSERT(i.accountCount() == 0);
+ CPPUNIT_ASSERT(i.accountCount() == 1);
+ CPPUNIT_ASSERT(m->accountCount() == 7);
+
+ a.setInstitutionId(QString());
+ m->modifyAccount(a);
+ m->removeAccount(a);
+ CPPUNIT_ASSERT(m->accountCount() == 6);
+ i = m->institution("I000001");
+ CPPUNIT_ASSERT(i.accountCount() == 0);
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testRemoveUsedAccount() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ testAddTransactions();
+
+ MyMoneyAccount a = m->account("A000006");
+
+ try {
+ m->removeAccount(a);
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testRemoveInstitution() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ testModifyInstitution();
+ testReparentAccount();
+
+ MyMoneyInstitution i;
+ MyMoneyAccount a;
+
+ // assign the checkings account to the institution
+ try {
+ i = m->institution("I000001");
+ a = m->account("A000006");
+ a.setInstitutionId(i.id());
+ m->modifyAccount(a);
+ CPPUNIT_ASSERT(i.accountCount() == 0);
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ m->setDirty();
+ // now remove the institution and see if the account survived ;-)
+ try {
+ m->removeInstitution(i);
+ a.setInstitutionId(QString());
+ m->modifyAccount(a);
+ a = m->account("A000006");
+ CPPUNIT_ASSERT(a.institutionId().isEmpty());
+ CPPUNIT_ASSERT(m->institutionCount() == 0);
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testRemoveTransaction() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ testAddTransactions();
+
+ MyMoneyTransaction t = m->transaction("T000000000000000002");
+
+ m->setDirty();
+ try {
+ m->removeTransaction(t);
+ CPPUNIT_ASSERT(m->transactionCount() == 1);
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testTransactionList() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ testAddTransactions();
+
+ QValueList<MyMoneyTransaction> list;
+ MyMoneyTransactionFilter filter("A000006");
+ list = m->transactionList(filter);
+ CPPUNIT_ASSERT(list.count() == 2);
+ CPPUNIT_ASSERT((*(list.at(0))).id() == "T000000000000000002");
+ CPPUNIT_ASSERT((*(list.at(1))).id() == "T000000000000000001");
+
+ filter.clear();
+ filter.addAccount(QString("A000003"));
+ list = m->transactionList(filter);
+ CPPUNIT_ASSERT(list.count() == 1);
+ CPPUNIT_ASSERT((*(list.at(0))).id() == "T000000000000000002");
+
+ filter.clear();
+ list = m->transactionList(filter);
+ CPPUNIT_ASSERT(list.count() == 2);
+ CPPUNIT_ASSERT((*(list.at(0))).id() == "T000000000000000002");
+ CPPUNIT_ASSERT((*(list.at(1))).id() == "T000000000000000001");
+}
+
+void MyMoneyDatabaseMgrTest::testAddPayee() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ MyMoneyPayee p;
+
+ p.setName("THB");
+ m->setDirty();
+ try {
+ CPPUNIT_ASSERT(m->payeeId() == 0);
+ m->addPayee(p);
+ CPPUNIT_ASSERT(m->payeeId() == 1);
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+}
+
+void MyMoneyDatabaseMgrTest::testSetAccountName() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ try {
+ m->setAccountName(STD_ACC_LIABILITY, "Verbindlichkeiten");
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+ try {
+ m->setAccountName(STD_ACC_ASSET, "Verm�gen");
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+ try {
+ m->setAccountName(STD_ACC_EXPENSE, "Ausgaben");
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+ try {
+ m->setAccountName(STD_ACC_INCOME, "Einnahmen");
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ MyMoneyFile::instance()->preloadCache();
+
+ CPPUNIT_ASSERT(m->liability().name() == "Verbindlichkeiten");
+ CPPUNIT_ASSERT(m->asset().name() == "Verm�gen");
+ CPPUNIT_ASSERT(m->expense().name() == "Ausgaben");
+ CPPUNIT_ASSERT(m->income().name() == "Einnahmen");
+
+ try {
+ m->setAccountName("A000001", "New account name");
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testModifyPayee() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ MyMoneyPayee p;
+
+ testAddPayee();
+
+ p = m->payee("P000001");
+ p.setName("New name");
+ m->setDirty();
+ try {
+ m->modifyPayee(p);
+ p = m->payee("P000001");
+ CPPUNIT_ASSERT(p.name() == "New name");
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testRemovePayee() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ testAddPayee();
+ m->setDirty();
+
+ // check that we can remove an unreferenced payee
+ MyMoneyPayee p = m->payee("P000001");
+ try {
+ CPPUNIT_ASSERT(m->payeeList().count() == 1);
+ m->removePayee(p);
+ CPPUNIT_ASSERT(m->payeeList().count() == 0);
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ // add transaction
+ testAddTransactions();
+
+ MyMoneyTransaction tr = m->transaction("T000000000000000001");
+ MyMoneySplit sp;
+ sp = tr.splits()[0];
+ sp.setPayeeId("P000001");
+ tr.modifySplit(sp);
+
+ // check that we cannot add a transaction referencing
+ // an unknown payee
+ try {
+ m->modifyTransaction(tr);
+ CPPUNIT_FAIL("Expected exception");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+
+ // reset here, so that the
+ // testAddPayee will not fail
+ m->loadPayeeId(0);
+ testAddPayee();
+
+ // check that it works when the payee exists
+ try {
+ m->modifyTransaction(tr);
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ m->setDirty();
+
+ // now check, that we cannot remove the payee
+ try {
+ m->removePayee(p);
+ CPPUNIT_FAIL("Expected exception");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+ CPPUNIT_ASSERT(m->payeeList().count() == 1);
+}
+
+
+void MyMoneyDatabaseMgrTest::testRemoveAccountFromTree() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ MyMoneyAccount a, b, c;
+ a.setName("Acc A");
+ b.setName("Acc B");
+ c.setName("Acc C");
+
+ // build a tree A -> B -> C, remove B and see if A -> C
+ // remains in the storage manager
+
+ try {
+ m->addAccount(a);
+ m->addAccount(b);
+ m->addAccount(c);
+ m->reparentAccount(b, a);
+ m->reparentAccount(c, b);
+
+ CPPUNIT_ASSERT(a.accountList().count() == 1);
+ CPPUNIT_ASSERT(m->account(a.accountList()[0]).name() == "Acc B");
+
+ CPPUNIT_ASSERT(b.accountList().count() == 1);
+ CPPUNIT_ASSERT(m->account(b.accountList()[0]).name() == "Acc C");
+
+ CPPUNIT_ASSERT(c.accountList().count() == 0);
+
+ m->removeAccount(b);
+
+ // reload account info from titutionIDtorage
+ a = m->account(a.id());
+ c = m->account(c.id());
+
+ try {
+ b = m->account(b.id());
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+ CPPUNIT_ASSERT(a.accountList().count() == 1);
+ CPPUNIT_ASSERT(m->account(a.accountList()[0]).name() == "Acc C");
+
+ CPPUNIT_ASSERT(c.accountList().count() == 0);
+
+ } catch (MyMoneyException *e) {
+ unexpectedException(e);
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testPayeeName() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ testAddPayee();
+
+ MyMoneyPayee p;
+ QString name("THB");
+
+ // OK case
+ try {
+ p = m->payeeByName(name);
+ CPPUNIT_ASSERT(p.name() == "THB");
+ CPPUNIT_ASSERT(p.id() == "P000001");
+ } catch (MyMoneyException *e) {
+ unexpectedException(e);
+ }
+
+ // Not OK case
+ name = "Thb";
+ try {
+ p = m->payeeByName(name);
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testAssignment() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ testAddTransactions();
+
+ MyMoneyPayee user;
+ user.setName("Thomas");
+ m->setUser(user);
+
+ MyMoneyDatabaseMgr test = *m;
+ testEquality(&test);
+}
+
+void MyMoneyDatabaseMgrTest::testEquality(const MyMoneyDatabaseMgr *t)
+{
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ CPPUNIT_ASSERT(m->user().name() == t->user().name());
+ CPPUNIT_ASSERT(m->user().address() == t->user().address());
+ CPPUNIT_ASSERT(m->user().city() == t->user().city());
+ CPPUNIT_ASSERT(m->user().state() == t->user().state());
+ CPPUNIT_ASSERT(m->user().postcode() == t->user().postcode());
+ CPPUNIT_ASSERT(m->user().telephone() == t->user().telephone());
+ CPPUNIT_ASSERT(m->user().email() == t->user().email());
+ //CPPUNIT_ASSERT(m->nextInstitutionID() == t->nextInstitutionID());
+ //CPPUNIT_ASSERT(m->nextAccountID() == t->nextAccountID());
+ //CPPUNIT_ASSERT(m->m_nextTransactionID == t->m_nextTransactionID);
+ //CPPUNIT_ASSERT(m->nextPayeeID() == t->nextPayeeID());
+ //CPPUNIT_ASSERT(m->m_nextScheduleID == t->m_nextScheduleID);
+ CPPUNIT_ASSERT(m->dirty() == t->dirty());
+ CPPUNIT_ASSERT(m->m_creationDate == t->m_creationDate);
+ CPPUNIT_ASSERT(m->m_lastModificationDate == t->m_lastModificationDate);
+
+ /*
+ * make sure, that the keys and values are the same
+ * on the left and the right side
+ */
+ //CPPUNIT_ASSERT(m->payeeList().keys() == t->payeeList().keys());
+ //CPPUNIT_ASSERT(m->payeeList().values() == t->payeeList().values());
+ CPPUNIT_ASSERT(m->payeeList() == t->payeeList());
+ //CPPUNIT_ASSERT(m->m_transactionKeys.keys() == t->m_transactionKeys.keys());
+ //CPPUNIT_ASSERT(m->m_transactionKeys.values() == t->m_transactionKeys.values());
+ //CPPUNIT_ASSERT(m->institutionList().keys() == t->institutionList().keys());
+ //CPPUNIT_ASSERT(m->institutionList().values() == t->institutionList().values());
+ //CPPUNIT_ASSERT(m->m_accountList.keys() == t->m_accountList.keys());
+ //CPPUNIT_ASSERT(m->m_accountList.values() == t->m_accountList.values());
+ //CPPUNIT_ASSERT(m->m_transactionList.keys() == t->m_transactionList.keys());
+ //CPPUNIT_ASSERT(m->m_transactionList.values() == t->m_transactionList.values());
+ //CPPUNIT_ASSERT(m->m_balanceCache.keys() == t->m_balanceCache.keys());
+ //CPPUNIT_ASSERT(m->m_balanceCache.values() == t->m_balanceCache.values());
+
+// CPPUNIT_ASSERT(m->scheduleList().keys() == t->scheduleList().keys());
+// CPPUNIT_ASSERT(m->scheduleList().values() == t->scheduleList().values());
+}
+
+void MyMoneyDatabaseMgrTest::testDuplicate() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ const MyMoneyDatabaseMgr* t;
+
+ testModifyTransaction();
+
+ t = m->duplicate();
+ testEquality(t);
+ delete t;
+}
+
+void MyMoneyDatabaseMgrTest::testAddSchedule() {
+ /* Note addSchedule() now calls validate as it should
+ * so we need an account id. Later this will
+ * be checked to make sure its a valid account id. The
+ * tests currently fail because no splits are defined
+ * for the schedules transaction.
+ */
+
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ // put some accounts in the db, so the tests don't break
+ testReparentAccount();
+
+ try {
+ CPPUNIT_ASSERT(m->scheduleList().count() == 0);
+ MyMoneyTransaction t1;
+ MyMoneySplit s1, s2;
+ s1.setAccountId("A000001");
+ t1.addSplit(s1);
+ s2.setAccountId("A000002");
+ t1.addSplit(s2);
+ MyMoneySchedule schedule("Sched-Name",
+ MyMoneySchedule::TYPE_DEPOSIT,
+ MyMoneySchedule::OCCUR_DAILY, 1,
+ MyMoneySchedule::STYPE_MANUALDEPOSIT,
+ QDate(),
+ QDate(),
+ true,
+ false);
+ t1.setPostDate(QDate(2003,7,10));
+ schedule.setTransaction(t1);
+
+ m->addSchedule(schedule);
+
+ CPPUNIT_ASSERT(m->scheduleList().count() == 1);
+ CPPUNIT_ASSERT(schedule.id() == "SCH000001");
+ MyMoneyFile::instance()->clearCache();
+ CPPUNIT_ASSERT(m->schedule("SCH000001").id() == "SCH000001");
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ try {
+ MyMoneySchedule schedule("Sched-Name",
+ MyMoneySchedule::TYPE_DEPOSIT,
+ MyMoneySchedule::OCCUR_DAILY, 1,
+ MyMoneySchedule::STYPE_MANUALDEPOSIT,
+ QDate(),
+ QDate(),
+ true,
+ false);
+ m->addSchedule(schedule);
+ CPPUNIT_FAIL("Exception expected");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+
+ // now try with a bad account, so this should cause an exception
+ // TODO: enable this check without corrupting other tests
+// try {
+// MyMoneyTransaction t1;
+// MyMoneySplit s1, s2;
+// s1.setAccountId("Abadaccount1");
+// t1.addSplit(s1);
+// s2.setAccountId("Abadaccount2");
+// t1.addSplit(s2);
+// MyMoneySchedule schedule("Sched-Name",
+// MyMoneySchedule::TYPE_DEPOSIT,
+// MyMoneySchedule::OCCUR_DAILY, 1,
+// MyMoneySchedule::STYPE_MANUALDEPOSIT,
+// QDate(),
+// QDate(),
+// true,
+// false);
+// t1.setPostDate(QDate(2003,7,10));
+// schedule.setTransaction(t1);
+
+// m->addSchedule(schedule);
+// CPPUNIT_FAIL("Exception expected, but not thrown");
+// } catch(MyMoneyException *e) {
+// delete e;
+// // Exception caught as expected.
+// }
+
+}
+
+void MyMoneyDatabaseMgrTest::testSchedule() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ testAddSchedule();
+ MyMoneySchedule sched;
+
+ sched = m->schedule("SCH000001");
+ CPPUNIT_ASSERT(sched.name() == "Sched-Name");
+ CPPUNIT_ASSERT(sched.id() == "SCH000001");
+
+ try {
+ m->schedule("SCH000002");
+ CPPUNIT_FAIL("Exception expected");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testModifySchedule() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ testAddSchedule();
+ MyMoneySchedule sched;
+
+ sched = m->schedule("SCH000001");
+ sched.setId("SCH000002");
+ try {
+ m->modifySchedule(sched);
+ CPPUNIT_FAIL("Exception expected");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+
+ sched = m->schedule("SCH000001");
+ sched.setName("New Sched-Name");
+ try {
+ m->modifySchedule(sched);
+ CPPUNIT_ASSERT(m->scheduleList().count() == 1);
+ CPPUNIT_ASSERT((*(m->scheduleList().begin())).name() == "New Sched-Name");
+ CPPUNIT_ASSERT((*(m->scheduleList().begin())).id() == "SCH000001");
+
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+}
+
+void MyMoneyDatabaseMgrTest::testRemoveSchedule() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ testAddSchedule();
+ MyMoneySchedule sched;
+
+ sched = m->schedule("SCH000001");
+ sched.setId("SCH000002");
+ try {
+ m->removeSchedule(sched);
+ CPPUNIT_FAIL("Exception expected");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+
+ sched = m->schedule("SCH000001");
+ try {
+ m->removeSchedule(sched);
+ CPPUNIT_ASSERT(m->scheduleList().count() == 0);
+
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testScheduleList() {
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ // put some accounts in the db, so the tests don't break
+ testReparentAccount();
+
+ QDate testDate = QDate::currentDate();
+ QDate notOverdue = testDate.addDays(2);
+ QDate overdue = testDate.addDays(-2);
+
+ MyMoneyTransaction t1;
+ MyMoneySplit s1, s2;
+ s1.setAccountId("A000001");
+ t1.addSplit(s1);
+ s2.setAccountId("A000002");
+ t1.addSplit(s2);
+ MyMoneySchedule schedule1("Schedule 1",
+ MyMoneySchedule::TYPE_BILL,
+ MyMoneySchedule::OCCUR_ONCE, 1,
+ MyMoneySchedule::STYPE_DIRECTDEBIT,
+ QDate(),
+ QDate(),
+ false,
+ false);
+ t1.setPostDate(notOverdue);
+ schedule1.setTransaction(t1);
+ schedule1.setLastPayment(notOverdue);
+
+ MyMoneyTransaction t2;
+ MyMoneySplit s3, s4;
+ s3.setAccountId("A000001");
+ t2.addSplit(s3);
+ s4.setAccountId("A000003");
+ t2.addSplit(s4);
+ MyMoneySchedule schedule2("Schedule 2",
+ MyMoneySchedule::TYPE_DEPOSIT,
+ MyMoneySchedule::OCCUR_DAILY, 1,
+ MyMoneySchedule::STYPE_DIRECTDEPOSIT,
+ QDate(),
+ QDate(),
+ false,
+ false);
+ t2.setPostDate(notOverdue.addDays(1));
+ schedule2.setTransaction(t2);
+ schedule2.setLastPayment(notOverdue.addDays(1));
+
+ MyMoneyTransaction t3;
+ MyMoneySplit s5, s6;
+ s5.setAccountId("A000005");
+ t3.addSplit(s5);
+ s6.setAccountId("A000006");
+ t3.addSplit(s6);
+ MyMoneySchedule schedule3("Schedule 3",
+ MyMoneySchedule::TYPE_TRANSFER,
+ MyMoneySchedule::OCCUR_WEEKLY, 1,
+ MyMoneySchedule::STYPE_OTHER,
+ QDate(),
+ QDate(),
+ false,
+ false);
+ t3.setPostDate(notOverdue.addDays(2));
+ schedule3.setTransaction(t3);
+ schedule3.setLastPayment(notOverdue.addDays(2));
+
+ MyMoneyTransaction t4;
+ MyMoneySplit s7, s8;
+ s7.setAccountId("A000005");
+ t4.addSplit(s7);
+ s8.setAccountId("A000006");
+ t4.addSplit(s8);
+ MyMoneySchedule schedule4("Schedule 4",
+ MyMoneySchedule::TYPE_BILL,
+ MyMoneySchedule::OCCUR_WEEKLY, 1,
+ MyMoneySchedule::STYPE_WRITECHEQUE,
+ QDate(),
+ notOverdue.addDays(31),
+ false,
+ false);
+ t4.setPostDate(overdue.addDays(-7));
+ schedule4.setTransaction(t4);
+
+ try {
+ m->addSchedule(schedule1);
+ m->addSchedule(schedule2);
+ m->addSchedule(schedule3);
+ m->addSchedule(schedule4);
+ } catch(MyMoneyException *e) {
+ qDebug("Error: %s", e->what().latin1());
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ QValueList<MyMoneySchedule> list;
+
+ // no filter
+ list = m->scheduleList();
+ CPPUNIT_ASSERT(list.count() == 4);
+
+ // filter by type
+ list = m->scheduleList("", MyMoneySchedule::TYPE_BILL);
+ CPPUNIT_ASSERT(list.count() == 2);
+ CPPUNIT_ASSERT(list[0].name() == "Schedule 1");
+ CPPUNIT_ASSERT(list[1].name() == "Schedule 4");
+
+ // filter by occurence
+ list = m->scheduleList("", MyMoneySchedule::TYPE_ANY,
+ MyMoneySchedule::OCCUR_DAILY);
+ CPPUNIT_ASSERT(list.count() == 1);
+ CPPUNIT_ASSERT(list[0].name() == "Schedule 2");
+
+ // filter by payment type
+ list = m->scheduleList("", MyMoneySchedule::TYPE_ANY,
+ MyMoneySchedule::OCCUR_ANY,
+ MyMoneySchedule::STYPE_DIRECTDEPOSIT);
+ CPPUNIT_ASSERT(list.count() == 1);
+ CPPUNIT_ASSERT(list[0].name() == "Schedule 2");
+
+ // filter by account
+ list = m->scheduleList("A01");
+ CPPUNIT_ASSERT(list.count() == 0);
+ list = m->scheduleList("A000001");
+ CPPUNIT_ASSERT(list.count() == 2);
+ list = m->scheduleList("A000002");
+ CPPUNIT_ASSERT(list.count() == 1);
+
+ // filter by start date
+ list = m->scheduleList("", MyMoneySchedule::TYPE_ANY,
+ MyMoneySchedule::OCCUR_ANY,
+ MyMoneySchedule::STYPE_ANY,
+ notOverdue.addDays(31));
+ CPPUNIT_ASSERT(list.count() == 3);
+ CPPUNIT_ASSERT(list[0].name() == "Schedule 2");
+ CPPUNIT_ASSERT(list[1].name() == "Schedule 3");
+ CPPUNIT_ASSERT(list[2].name() == "Schedule 4");
+
+ // filter by end date
+ list = m->scheduleList("", MyMoneySchedule::TYPE_ANY,
+ MyMoneySchedule::OCCUR_ANY,
+ MyMoneySchedule::STYPE_ANY,
+ QDate(),
+ notOverdue.addDays(1));
+ CPPUNIT_ASSERT(list.count() == 3);
+ CPPUNIT_ASSERT(list[0].name() == "Schedule 1");
+ CPPUNIT_ASSERT(list[1].name() == "Schedule 2");
+ CPPUNIT_ASSERT(list[2].name() == "Schedule 4");
+
+ // filter by start and end date
+ list = m->scheduleList("", MyMoneySchedule::TYPE_ANY,
+ MyMoneySchedule::OCCUR_ANY,
+ MyMoneySchedule::STYPE_ANY,
+ notOverdue.addDays(-1),
+ notOverdue.addDays(1));
+ CPPUNIT_ASSERT(list.count() == 2);
+ CPPUNIT_ASSERT(list[0].name() == "Schedule 1");
+ CPPUNIT_ASSERT(list[1].name() == "Schedule 2");
+
+ // filter by overdue status
+ list = m->scheduleList("", MyMoneySchedule::TYPE_ANY,
+ MyMoneySchedule::OCCUR_ANY,
+ MyMoneySchedule::STYPE_ANY,
+ QDate(),
+ QDate(),
+ true);
+ CPPUNIT_ASSERT(list.count() == 1);
+ CPPUNIT_ASSERT(list[0].name() == "Schedule 4");
+}
+
+void MyMoneyDatabaseMgrTest::testAddCurrency()
+{
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ MyMoneySecurity curr("EUR", "Euro", "?", 100, 100);
+ CPPUNIT_ASSERT(m->currencyList().count() == 0);
+ m->setDirty();
+ try {
+ m->addCurrency(curr);
+ CPPUNIT_ASSERT(m->currencyList().count() == 1);
+ CPPUNIT_ASSERT((*(m->currencyList().begin())).name() == "Euro");
+ CPPUNIT_ASSERT((*(m->currencyList().begin())).id() == "EUR");
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ m->setDirty();
+ try {
+ m->addCurrency(curr);
+ CPPUNIT_FAIL("Expected exception missing");
+ } catch(MyMoneyException *e) {
+ CPPUNIT_ASSERT(m->dirty() == false);
+ delete e;
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testModifyCurrency()
+{
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ MyMoneySecurity curr("EUR", "Euro", "?", 100, 100);
+ testAddCurrency();
+ m->setDirty();
+ curr.setName("EURO");
+ try {
+ m->modifyCurrency(curr);
+ CPPUNIT_ASSERT(m->currencyList().count() == 1);
+ CPPUNIT_ASSERT((*(m->currencyList().begin())).name() == "EURO");
+ CPPUNIT_ASSERT((*(m->currencyList().begin())).id() == "EUR");
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ m->setDirty();
+
+ MyMoneySecurity unknownCurr("DEM", "Deutsche Mark", "DM", 100, 100);
+ try {
+ m->modifyCurrency(unknownCurr);
+ CPPUNIT_FAIL("Expected exception missing");
+ } catch(MyMoneyException *e) {
+ CPPUNIT_ASSERT(m->dirty() == false);
+ delete e;
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testRemoveCurrency()
+{
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ MyMoneySecurity curr("EUR", "Euro", "?", 100, 100);
+ testAddCurrency();
+ m->setDirty();
+ try {
+ m->removeCurrency(curr);
+ CPPUNIT_ASSERT(m->currencyList().count() == 0);
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ m->setDirty();
+
+ MyMoneySecurity unknownCurr("DEM", "Deutsche Mark", "DM", 100, 100);
+ try {
+ m->removeCurrency(unknownCurr);
+ CPPUNIT_FAIL("Expected exception missing");
+ } catch(MyMoneyException *e) {
+ CPPUNIT_ASSERT(m->dirty() == false);
+ delete e;
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testCurrency()
+{
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ MyMoneySecurity curr("EUR", "Euro", "?", 100, 100);
+ MyMoneySecurity newCurr;
+ testAddCurrency();
+ m->setDirty();
+ try {
+ newCurr = m->currency("EUR");
+ CPPUNIT_ASSERT(m->dirty() == false);
+ CPPUNIT_ASSERT(newCurr.id() == curr.id());
+ CPPUNIT_ASSERT(newCurr.name() == curr.name());
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ try {
+ m->currency("DEM");
+ CPPUNIT_FAIL("Expected exception missing");
+ } catch(MyMoneyException *e) {
+ CPPUNIT_ASSERT(m->dirty() == false);
+ delete e;
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testCurrencyList()
+{
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ CPPUNIT_ASSERT(m->currencyList().count() == 0);
+
+ testAddCurrency();
+ CPPUNIT_ASSERT(m->currencyList().count() == 1);
+
+ MyMoneySecurity unknownCurr("DEM", "Deutsche Mark", "DM", 100, 100);
+ try {
+ m->addCurrency(unknownCurr);
+ m->setDirty();
+ CPPUNIT_ASSERT(m->currencyList().count() == 2);
+ CPPUNIT_ASSERT(m->currencyList().count() == 2);
+ CPPUNIT_ASSERT(m->dirty() == false);
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneyDatabaseMgrTest::testAccountList()
+{
+ testAttachDb();
+
+ if (!m_canOpen) {
+ std::cout << "Database test skipped because no database could be opened." << std::endl;
+ return;
+ }
+
+ QValueList<MyMoneyAccount> accounts;
+ m->accountList(accounts);
+ CPPUNIT_ASSERT(accounts.count() == 0);
+ testAddNewAccount();
+ accounts.clear();
+ m->accountList(accounts);
+ CPPUNIT_ASSERT(accounts.count() == 2);
+
+ MyMoneyAccount a = m->account("A000001");
+ MyMoneyAccount b = m->account("A000002");
+ m->reparentAccount(b, a);
+ accounts.clear();
+ m->accountList(accounts);
+ CPPUNIT_ASSERT(accounts.count() == 2);
+}
+
diff --git a/kmymoney2/mymoney/storage/mymoneydatabasemgrtest.h b/kmymoney2/mymoney/storage/mymoneydatabasemgrtest.h
new file mode 100644
index 0000000..8ab4b64
--- /dev/null
+++ b/kmymoney2/mymoney/storage/mymoneydatabasemgrtest.h
@@ -0,0 +1,143 @@
+/***************************************************************************
+ mymoneydatabasemgrtest.h
+ -------------------
+ copyright : (C) 2008 by Fernando Vilas
+ email : fvilas@iname.com
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef __MYMONEYDATABASEMGRTEST_H__
+#define __MYMONEYDATABASEMGRTEST_H__
+
+#include <cppunit/TestCaller.h>
+#include <cppunit/TestCase.h>
+#include <cppunit/TestSuite.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include "../autotest.h"
+
+#define private public
+#define protected public
+#include "../mymoneyobject.h"
+#include "mymoneydatabasemgr.h"
+#undef private
+
+class MyMoneyDatabaseMgrTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(MyMoneyDatabaseMgrTest);
+ CPPUNIT_TEST(testEmptyConstructor);
+ CPPUNIT_TEST(testCreateDb);
+ CPPUNIT_TEST(testAttachDb);
+ CPPUNIT_TEST(testSetFunctions);
+ CPPUNIT_TEST(testSupportFunctions);
+ CPPUNIT_TEST(testIsStandardAccount);
+ CPPUNIT_TEST(testNewAccount);
+ CPPUNIT_TEST(testAddNewAccount);
+ CPPUNIT_TEST(testReparentAccount);
+ CPPUNIT_TEST(testAddInstitution);
+ CPPUNIT_TEST(testInstitution);
+ CPPUNIT_TEST(testAccount2Institution);
+ CPPUNIT_TEST(testModifyAccount);
+ CPPUNIT_TEST(testModifyInstitution);
+ CPPUNIT_TEST(testAddTransactions);
+ CPPUNIT_TEST(testTransactionCount);
+ CPPUNIT_TEST(testBalance);
+ CPPUNIT_TEST(testAddBudget);
+ CPPUNIT_TEST(testCopyBudget);
+ CPPUNIT_TEST(testModifyBudget);
+ CPPUNIT_TEST(testRemoveBudget);
+ CPPUNIT_TEST(testModifyTransaction);
+ CPPUNIT_TEST(testRemoveUnusedAccount);
+ CPPUNIT_TEST(testRemoveUsedAccount);
+ CPPUNIT_TEST(testRemoveInstitution);
+ CPPUNIT_TEST(testRemoveTransaction);
+ CPPUNIT_TEST(testTransactionList);
+ CPPUNIT_TEST(testAddPayee);
+ CPPUNIT_TEST(testSetAccountName);
+ CPPUNIT_TEST(testModifyPayee);
+ CPPUNIT_TEST(testPayeeName);
+ CPPUNIT_TEST(testRemovePayee);
+ CPPUNIT_TEST(testRemoveAccountFromTree);
+ CPPUNIT_TEST(testAssignment);
+ CPPUNIT_TEST(testDuplicate);
+ CPPUNIT_TEST(testAddSchedule);
+ CPPUNIT_TEST(testModifySchedule);
+ CPPUNIT_TEST(testRemoveSchedule);
+ CPPUNIT_TEST(testSchedule);
+ CPPUNIT_TEST(testScheduleList);
+ CPPUNIT_TEST(testAddCurrency);
+ CPPUNIT_TEST(testModifyCurrency);
+ CPPUNIT_TEST(testRemoveCurrency);
+ CPPUNIT_TEST(testCurrency);
+ CPPUNIT_TEST(testCurrencyList);
+ CPPUNIT_TEST(testAccountList);
+ CPPUNIT_TEST_SUITE_END();
+
+protected:
+ MyMoneyDatabaseMgr *m;
+ bool m_dbAttached;
+ bool m_canOpen;
+ KURL m_url;
+public:
+ MyMoneyDatabaseMgrTest();
+
+ void setUp();
+ void tearDown();
+ void testEmptyConstructor();
+ void testCreateDb();
+ void testAttachDb();
+ void testSetFunctions();
+ void testIsStandardAccount();
+ void testNewAccount();
+ void testAccount();
+ void testAddNewAccount();
+ void testAddInstitution();
+ void testInstitution();
+ void testAccount2Institution();
+ void testModifyAccount();
+ void testModifyInstitution();
+ void testReparentAccount();
+ void testAddTransactions();
+ void testTransactionCount();
+ void testAddBudget();
+ void testCopyBudget();
+ void testModifyBudget();
+ void testRemoveBudget();
+ void testBalance();
+ void testModifyTransaction();
+ void testRemoveUnusedAccount();
+ void testRemoveUsedAccount();
+ void testRemoveInstitution();
+ void testRemoveTransaction();
+ void testTransactionList();
+ void testAddPayee();
+ void testSetAccountName();
+ void testModifyPayee();
+ void testPayeeName();
+ void testRemovePayee();
+ void testRemoveAccountFromTree();
+ void testAssignment();
+ void testEquality(const MyMoneyDatabaseMgr* t);
+ void testDuplicate();
+ void testAddSchedule();
+ void testSchedule();
+ void testModifySchedule();
+ void testRemoveSchedule();
+ void testSupportFunctions();
+ void testScheduleList();
+ void testAddCurrency();
+ void testModifyCurrency();
+ void testRemoveCurrency();
+ void testCurrency();
+ void testCurrencyList();
+ void testAccountList();
+};
+
+#endif
diff --git a/kmymoney2/mymoney/storage/mymoneymap.h b/kmymoney2/mymoney/storage/mymoneymap.h
new file mode 100644
index 0000000..fa5cda8
--- /dev/null
+++ b/kmymoney2/mymoney/storage/mymoneymap.h
@@ -0,0 +1,328 @@
+#include <stdint.h>
+#include <qmap.h>
+#include <qptrstack.h>
+#include <kmymoney/mymoneyexception.h>
+
+#ifndef MYMONEYMAP_H
+#define MYMONEYMAP_H
+
+#define MY_OWN_DEBUG 0
+
+/**
+ * @author Thomas Baumgart
+ *
+ * This template class adds transaction security to the QMap<> class.
+ * The interface is very simple. Before you perform any changes,
+ * you have to call the startTransaction() method. Then you can use
+ * the insert(), modify() and remove() methods to modify the map.
+ * Changes are recorded and if you are finished, use the
+ * commitTransaction() to finish the transaction. If you want to go
+ * back before you have committed the transaction, use
+ * rollbackTransaction() to set the container to the state it was
+ * in before you called startTransaction().
+ *
+ * The implementation is based on the command pattern, in case
+ * someone is interested.
+ */
+template <class Key, class T>
+class MyMoneyMap : protected QMap<Key, T>
+{
+public:
+ // typedef QMapConstIterator<Key, T> const_iterator;
+
+ MyMoneyMap() : QMap<Key, T>() {}
+ virtual ~MyMoneyMap() {}
+
+ void startTransaction(unsigned long* id = 0)
+ {
+ m_stack.push(new MyMoneyMapStart(this, id));
+ }
+
+ void rollbackTransaction(void)
+ {
+ if(m_stack.count() == 0)
+ throw new MYMONEYEXCEPTION("No transaction started to rollback changes");
+
+ // undo all actions
+ MyMoneyMapAction* action;
+ while(m_stack.count()) {
+ action = m_stack.pop();
+ action->undo();
+ delete action;
+ }
+ }
+
+ bool commitTransaction(void)
+ {
+ if(m_stack.count() == 0)
+ throw new MYMONEYEXCEPTION("No transaction started to commit changes");
+
+ bool rc = m_stack.count() > 1;
+ m_stack.setAutoDelete(true);
+ m_stack.clear();
+ return rc;
+ }
+
+ void insert(const Key& key, const T& obj)
+ {
+ if(m_stack.count() == 0)
+ throw new MYMONEYEXCEPTION("No transaction started to insert new element into container");
+
+ // store object in
+ m_stack.push(new MyMoneyMapInsert(this, key, obj));
+ }
+
+ void modify(const Key& key, const T& obj)
+ {
+ if(m_stack.count() == 0)
+ throw new MYMONEYEXCEPTION("No transaction started to modify element in container");
+
+#if 0
+ // had to take this out, because we use QPair in one instance as key
+ if(key.isEmpty())
+ throw new MYMONEYEXCEPTION("No key to update object");
+#endif
+
+ m_stack.push(new MyMoneyMapModify(this, key, obj));
+ }
+
+ void remove(const Key& key)
+ {
+ if(m_stack.count() == 0)
+ throw new MYMONEYEXCEPTION("No transaction started to remove element from container");
+
+#if 0
+ // had to take this out, because we use QPair in one instance as key
+ if(key.isEmpty())
+ throw new MYMONEYEXCEPTION("No key to remove object");
+#endif
+
+ m_stack.push(new MyMoneyMapRemove(this, key));
+ }
+
+ MyMoneyMap<Key, T>& operator= (const QMap<Key, T>& m)
+ {
+ if(m_stack.count() != 0) {
+ throw new MYMONEYEXCEPTION("Cannot assign whole container during transaction");
+ }
+ QMap<Key, T>::operator=(m);
+ return *this;
+ }
+
+
+ inline QValueList<T> values(void) const
+ {
+ return QMap<Key,T>::values();
+ }
+
+ inline QValueList<Key> keys(void) const
+ {
+ return QMap<Key,T>::keys();
+ }
+
+ const T& operator[] ( const Key& k ) const
+ { QT_CHECK_INVALID_MAP_ELEMENT; return QMap<Key,T>::operator[](k); }
+
+ inline Q_TYPENAME QMap<Key, T>::const_iterator find(const Key& k) const
+ {
+ return QMap<Key,T>::find(k);
+ }
+
+ inline Q_TYPENAME QMap<Key, T>::const_iterator begin(void) const
+ {
+ return QMap<Key,T>::begin();
+ }
+
+ inline Q_TYPENAME QMap<Key, T>::const_iterator end(void) const
+ {
+ return QMap<Key,T>::end();
+ }
+
+ inline bool contains(const Key& k) const
+ {
+ return find(k) != end();
+ }
+
+ inline void map(QMap<Key, T>& that) const
+ {
+ //QMap<Key, T>* ptr = dynamic_cast<QMap<Key, T>* >(this);
+ //that = *ptr;
+ that = *(dynamic_cast<QMap<Key, T>* >(const_cast<MyMoneyMap<Key, T>* >(this)));
+ }
+
+ inline size_t count(void) const
+ {
+ return QMap<Key, T>::count();
+ }
+
+#if MY_OWN_DEBUG
+ void dump(void) const
+ {
+ printf("Container dump\n");
+ printf(" items in container = %d\n", count());
+ printf(" items on stack = %d\n", m_stack.count());
+
+ const_iterator it;
+ for(it = begin(); it != end(); ++it) {
+ printf(" %s \n", it.key().data());
+ }
+ }
+#endif
+
+private:
+ class MyMoneyMapAction
+ {
+ public:
+ MyMoneyMapAction(QMap<Key, T>* container) :
+ m_container(container) {}
+
+ MyMoneyMapAction(QMap<Key, T>* container, const Key& key, const T& obj) :
+ m_container(container),
+ m_obj(obj),
+ m_key(key) {}
+
+ virtual ~MyMoneyMapAction() {}
+ virtual void undo(void) = 0;
+
+ protected:
+ QMap<Key, T>* m_container;
+ T m_obj;
+ Key m_key;
+ };
+
+ class MyMoneyMapStart : public MyMoneyMapAction
+ {
+ public:
+ MyMoneyMapStart(QMap<Key, T>* container, unsigned long* id) :
+ MyMoneyMapAction(container),
+ m_idPtr(id)
+ {
+ if(id != 0)
+ m_id = *id;
+ }
+ virtual ~MyMoneyMapStart() {}
+ void undo(void)
+ {
+ if(m_idPtr != 0)
+ *m_idPtr = m_id;
+ }
+
+ private:
+ unsigned long* m_idPtr;
+ unsigned long m_id;
+ };
+
+ class MyMoneyMapInsert : public MyMoneyMapAction
+ {
+ public:
+ MyMoneyMapInsert(QMap<Key, T>* container, const Key& key, const T& obj) :
+ MyMoneyMapAction(container, key, obj)
+ {
+ (*container)[key] = obj;
+ }
+
+ virtual ~MyMoneyMapInsert() {}
+ void undo(void)
+ {
+ // m_container->remove(m_key) does not work on GCC 4.0.2
+ // using this-> to access those member does the trick
+ this->m_container->remove(this->m_key);
+ }
+ };
+
+ class MyMoneyMapRemove : public MyMoneyMapAction
+ {
+ public:
+ MyMoneyMapRemove(QMap<Key, T>* container, const Key& key) :
+ MyMoneyMapAction(container, key, (*container)[key])
+ {
+ container->remove(key);
+ }
+
+ virtual ~MyMoneyMapRemove() {}
+ void undo(void)
+ {
+ (*(this->m_container))[this->m_key] = this->m_obj;
+ }
+ };
+
+ class MyMoneyMapModify : public MyMoneyMapAction
+ {
+ public:
+ MyMoneyMapModify(QMap<Key, T>* container, const Key& key, const T& obj) :
+ MyMoneyMapAction(container, key, (*container)[key])
+ {
+ (*container)[key] = obj;
+ }
+
+ virtual ~MyMoneyMapModify() {}
+ void undo(void)
+ {
+ (*(this->m_container))[this->m_key] = this->m_obj;
+ }
+ };
+
+protected:
+ QPtrStack<MyMoneyMapAction> m_stack;
+};
+
+#if MY_OWN_DEBUG
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneytransaction.h>
+main()
+{
+ MyMoneyMap<QString, MyMoneyAccount> container;
+ MyMoneyMap<QString, MyMoneyTransaction> ct;
+
+ MyMoneyAccount acc;
+ acc.setName("Test");
+ // this should not be possible
+ // container["a"] = acc;
+
+ QValueList<MyMoneyAccount> list;
+ list = container.values();
+
+ MyMoneyAccount b;
+ b.setName("Thomas");
+
+ try {
+ container.startTransaction();
+ container.insert("001", acc);
+ container.dump();
+ container.commitTransaction();
+ acc.setName("123");
+ container.startTransaction();
+ container.modify("001", acc);
+ container.dump();
+ container.rollbackTransaction();
+ container.dump();
+
+ container.startTransaction();
+ container.remove(QString("001"));
+ container.dump();
+ container.rollbackTransaction();
+ container.dump();
+
+ b = container["001"];
+ printf("b.name() = %s\n", b.name().data());
+
+ QMap<QString, MyMoneyAccount>::ConstIterator it;
+ it = container.find("001");
+ it = container.begin();
+
+ } catch(MyMoneyException *e) {
+ printf("Caught exception: %s\n", e->what().data());
+ delete e;
+ }
+
+ QMap<QString, MyMoneyAccount> map;
+ map["005"] = b;
+ container = map;
+
+ printf("b.name() = %s\n", container["001"].name().data());
+ printf("b.name() = %s\n", container["005"].name().data());
+}
+
+#endif
+
+#endif
diff --git a/kmymoney2/mymoney/storage/mymoneymaptest.cpp b/kmymoney2/mymoney/storage/mymoneymaptest.cpp
new file mode 100644
index 0000000..5104fad
--- /dev/null
+++ b/kmymoney2/mymoney/storage/mymoneymaptest.cpp
@@ -0,0 +1,38 @@
+/***************************************************************************
+ mymoneymaptest.cpp
+ -------------------
+ copyright : (C) 2007 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "mymoneymaptest.h"
+#include <iostream>
+
+MyMoneyMapTest::MyMoneyMapTest()
+{
+}
+
+
+void MyMoneyMapTest::setUp()
+{
+ m = new MyMoneyMap<QString, QString>;
+}
+
+void MyMoneyMapTest::tearDown()
+{
+ delete m;
+}
+
+void MyMoneyMapTest::testArrayOperator()
+{
+}
+
diff --git a/kmymoney2/mymoney/storage/mymoneymaptest.h b/kmymoney2/mymoney/storage/mymoneymaptest.h
new file mode 100644
index 0000000..c089a3f
--- /dev/null
+++ b/kmymoney2/mymoney/storage/mymoneymaptest.h
@@ -0,0 +1,47 @@
+/***************************************************************************
+ mymoneymaptest.h
+ -------------------
+ copyright : (C) 2007 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef __MYMONEYMAPTEST_H__
+#define __MYMONEYMAPTEST_H__
+
+#include <cppunit/TestCaller.h>
+#include <cppunit/TestCase.h>
+#include <cppunit/TestSuite.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include "../autotest.h"
+
+#define private public
+#include "mymoneyseqaccessmgr.h"
+#undef private
+
+class MyMoneyMapTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(MyMoneyMapTest);
+ CPPUNIT_TEST(testArrayOperator);
+ CPPUNIT_TEST_SUITE_END();
+
+protected:
+ MyMoneyMap<QString, QString> *m;
+public:
+ MyMoneyMapTest();
+
+
+ void setUp();
+ void tearDown();
+ void testArrayOperator(void);
+};
+
+#endif
diff --git a/kmymoney2/mymoney/storage/mymoneyseqaccessmgr.cpp b/kmymoney2/mymoney/storage/mymoneyseqaccessmgr.cpp
new file mode 100644
index 0000000..7341ec1
--- /dev/null
+++ b/kmymoney2/mymoney/storage/mymoneyseqaccessmgr.cpp
@@ -0,0 +1,1944 @@
+/***************************************************************************
+ mymoneyseqaccessmgr.cpp
+ -------------------
+ begin : Sun May 5 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ 2002 Thomas Baumgart
+ email : mte@users.sourceforge.net
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include <typeinfo>
+#include "mymoneyseqaccessmgr.h"
+#include "../mymoneytransactionfilter.h"
+#include "../mymoneycategory.h"
+
+#define TRY try {
+#define CATCH } catch (MyMoneyException *e) {
+#define PASS } catch (MyMoneyException *e) { throw; }
+
+bool MyMoneyBalanceCacheItem::operator ==(const MyMoneyBalanceCacheItem & right) const
+{
+ return ((balance == right.balance)
+ && (valid == right.valid));
+}
+
+MyMoneySeqAccessMgr::MyMoneySeqAccessMgr()
+{
+ m_nextAccountID = 0;
+ m_nextInstitutionID = 0;
+ m_nextTransactionID = 0;
+ m_nextPayeeID = 0;
+ m_nextScheduleID = 0;
+ m_nextSecurityID = 0;
+ m_nextReportID = 0;
+ m_nextBudgetID = 0;
+ m_user = MyMoneyPayee();
+ m_dirty = false;
+ m_creationDate = QDate::currentDate();
+
+ // setup standard accounts
+ MyMoneyAccount acc_l;
+ acc_l.setAccountType(MyMoneyAccount::Liability);
+ acc_l.setName("Liability");
+ MyMoneyAccount liability(STD_ACC_LIABILITY, acc_l);
+
+ MyMoneyAccount acc_a;
+ acc_a.setAccountType(MyMoneyAccount::Asset);
+ acc_a.setName("Asset");
+ MyMoneyAccount asset(STD_ACC_ASSET, acc_a);
+
+ MyMoneyAccount acc_e;
+ acc_e.setAccountType(MyMoneyAccount::Expense);
+ acc_e.setName("Expense");
+ MyMoneyAccount expense(STD_ACC_EXPENSE, acc_e);
+
+ MyMoneyAccount acc_i;
+ acc_i.setAccountType(MyMoneyAccount::Income);
+ acc_i.setName("Income");
+ MyMoneyAccount income(STD_ACC_INCOME, acc_i);
+
+ MyMoneyAccount acc_q;
+ acc_q.setAccountType(MyMoneyAccount::Equity);
+ acc_q.setName("Equity");
+ MyMoneyAccount equity(STD_ACC_EQUITY, acc_q);
+
+ QMap<QString, MyMoneyAccount> map;
+ map[STD_ACC_ASSET] = asset;
+ map[STD_ACC_LIABILITY] = liability;
+ map[STD_ACC_INCOME] = income;
+ map[STD_ACC_EXPENSE] = expense;
+ map[STD_ACC_EQUITY] = equity;
+
+ // load account list with inital accounts
+ m_accountList = map;
+
+ MyMoneyBalanceCacheItem balance;
+
+ m_balanceCache.clear();
+ m_balanceCache[STD_ACC_LIABILITY] = balance;
+ m_balanceCache[STD_ACC_ASSET] = balance;
+ m_balanceCache[STD_ACC_EXPENSE] = balance;
+ m_balanceCache[STD_ACC_INCOME] = balance;
+ m_balanceCache[STD_ACC_EQUITY] = balance;
+
+ // initialize for file fixes (see kmymoneyview.cpp)
+ m_currentFixVersion = 2;
+ m_fileFixVersion = 0; // default value if no fix-version in file
+ m_transactionListFull = false;
+}
+
+MyMoneySeqAccessMgr::~MyMoneySeqAccessMgr()
+{
+}
+
+MyMoneySeqAccessMgr const * MyMoneySeqAccessMgr::duplicate(void)
+{
+ MyMoneySeqAccessMgr* that = new MyMoneySeqAccessMgr();
+ *that = *this;
+ return that;
+}
+ /**
+ * This method is used to get a SQL reader for subsequent database access
+ */
+KSharedPtr <MyMoneyStorageSql> MyMoneySeqAccessMgr::connectToDatabase
+ (const KURL& /*url*/) {
+ return 0;
+}
+
+bool MyMoneySeqAccessMgr::isStandardAccount(const QString& id) const
+{
+ return id == STD_ACC_LIABILITY
+ || id == STD_ACC_ASSET
+ || id == STD_ACC_EXPENSE
+ || id == STD_ACC_INCOME
+ || id == STD_ACC_EQUITY;
+}
+
+void MyMoneySeqAccessMgr::setAccountName(const QString& id, const QString& name)
+{
+ if(!isStandardAccount(id))
+ throw new MYMONEYEXCEPTION("Only standard accounts can be modified using setAccountName()");
+
+ MyMoneyAccount acc = m_accountList[id];
+ acc.setName(name);
+ m_accountList.modify(acc.id(), acc);
+}
+
+const MyMoneyAccount MyMoneySeqAccessMgr::account(const QString& id) const
+{
+ // locate the account and if present, return it's data
+ if(m_accountList.find(id) != m_accountList.end())
+ return m_accountList[id];
+
+ // throw an exception, if it does not exist
+ QString msg = "Unknown account id '" + id + "'";
+ throw new MYMONEYEXCEPTION(msg);
+}
+
+void MyMoneySeqAccessMgr::accountList(QValueList<MyMoneyAccount>& list) const
+{
+ QMap<QString, MyMoneyAccount>::ConstIterator it;
+ for(it = m_accountList.begin(); it != m_accountList.end(); ++it) {
+ if(!isStandardAccount((*it).id())) {
+ list.append(*it);
+ }
+ }
+}
+
+void MyMoneySeqAccessMgr::addAccount(MyMoneyAccount& account)
+{
+ // create the account.
+ MyMoneyAccount newAccount(nextAccountID(), account);
+ m_accountList.insert(newAccount.id(), newAccount);
+
+ account = newAccount;
+}
+
+void MyMoneySeqAccessMgr::addPayee(MyMoneyPayee& payee)
+{
+ // create the payee
+ MyMoneyPayee newPayee(nextPayeeID(), payee);
+ m_payeeList.insert(newPayee.id(), newPayee);
+ payee = newPayee;
+}
+
+const MyMoneyPayee MyMoneySeqAccessMgr::payee(const QString& id) const
+{
+ QMap<QString, MyMoneyPayee>::ConstIterator it;
+ it = m_payeeList.find(id);
+ if(it == m_payeeList.end())
+ throw new MYMONEYEXCEPTION("Unknown payee '" + id + "'");
+
+ return *it;
+}
+
+const MyMoneyPayee MyMoneySeqAccessMgr::payeeByName(const QString& payee) const
+{
+ if(payee.isEmpty())
+ return MyMoneyPayee::null;
+
+ QMap<QString, MyMoneyPayee>::ConstIterator it_p;
+
+ for(it_p = m_payeeList.begin(); it_p != m_payeeList.end(); ++it_p) {
+ if((*it_p).name() == payee) {
+ return *it_p;
+ }
+ }
+
+ throw new MYMONEYEXCEPTION("Unknown payee '" + payee + "'");
+}
+
+void MyMoneySeqAccessMgr::modifyPayee(const MyMoneyPayee& payee)
+{
+ QMap<QString, MyMoneyPayee>::ConstIterator it;
+
+ it = m_payeeList.find(payee.id());
+ if(it == m_payeeList.end()) {
+ QString msg = "Unknown payee '" + payee.id() + "'";
+ throw new MYMONEYEXCEPTION(msg);
+ }
+ m_payeeList.modify((*it).id(), payee);
+}
+
+void MyMoneySeqAccessMgr::removePayee(const MyMoneyPayee& payee)
+{
+ QMap<QString, MyMoneyTransaction>::ConstIterator it_t;
+ QMap<QString, MyMoneySchedule>::ConstIterator it_s;
+ QMap<QString, MyMoneyPayee>::ConstIterator it_p;
+
+ it_p = m_payeeList.find(payee.id());
+ if(it_p == m_payeeList.end()) {
+ QString msg = "Unknown payee '" + payee.id() + "'";
+ throw new MYMONEYEXCEPTION(msg);
+ }
+
+ // scan all transactions to check if the payee is still referenced
+ for(it_t = m_transactionList.begin(); it_t != m_transactionList.end(); ++it_t) {
+ if((*it_t).hasReferenceTo(payee.id())) {
+ throw new MYMONEYEXCEPTION(QString("Cannot remove payee that is still referenced to a %1").arg("transaction"));
+ }
+ }
+
+ // check referential integrity in schedules
+ for(it_s = m_scheduleList.begin(); it_s != m_scheduleList.end(); ++it_s) {
+ if((*it_s).hasReferenceTo(payee.id())) {
+ throw new MYMONEYEXCEPTION(QString("Cannot remove payee that is still referenced to a %1").arg("schedule"));
+ }
+ }
+
+ // remove any reference to report and/or budget
+ removeReferences(payee.id());
+
+ m_payeeList.remove((*it_p).id());
+}
+
+const QValueList<MyMoneyPayee> MyMoneySeqAccessMgr::payeeList(void) const
+{
+ return m_payeeList.values();
+}
+
+
+void MyMoneySeqAccessMgr::addAccount(MyMoneyAccount& parent, MyMoneyAccount& account)
+{
+ QMap<QString, MyMoneyAccount>::ConstIterator theParent;
+ QMap<QString, MyMoneyAccount>::ConstIterator theChild;
+
+ theParent = m_accountList.find(parent.id());
+ if(theParent == m_accountList.end()) {
+ QString msg = "Unknown parent account '";
+ msg += parent.id() + "'";
+ throw new MYMONEYEXCEPTION(msg);
+ }
+
+ theChild = m_accountList.find(account.id());
+ if(theChild == m_accountList.end()) {
+ QString msg = "Unknown child account '";
+ msg += account.id() + "'";
+ throw new MYMONEYEXCEPTION(msg);
+ }
+
+ MyMoneyAccount acc = *theParent;
+ acc.addAccountId(account.id());
+ m_accountList.modify(acc.id(), acc);
+ parent = acc;
+
+ acc = *theChild;
+ acc.setParentAccountId(parent.id());
+ m_accountList.modify(acc.id(), acc);
+ account = acc;
+
+ MyMoneyBalanceCacheItem balance;
+ m_balanceCache[account.id()] = balance;
+}
+
+void MyMoneySeqAccessMgr::addInstitution(MyMoneyInstitution& institution)
+{
+ MyMoneyInstitution newInstitution(nextInstitutionID(), institution);
+
+ m_institutionList.insert(newInstitution.id(), newInstitution);
+
+ // return new data
+ institution = newInstitution;
+}
+
+unsigned int MyMoneySeqAccessMgr::transactionCount(const QString& account) const
+{
+ unsigned int cnt = 0;
+
+ if(account.length() == 0) {
+ cnt = m_transactionList.count();
+
+ } else {
+ QMap<QString, MyMoneyTransaction>::ConstIterator it_t;
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+
+ // scan all transactions
+ for(it_t = m_transactionList.begin(); it_t != m_transactionList.end(); ++it_t) {
+
+ // scan all splits of this transaction
+ for(it_s = (*it_t).splits().begin(); it_s != (*it_t).splits().end(); ++it_s) {
+ // is it a split in our account?
+ if((*it_s).accountId() == account) {
+ // since a transaction can only have one split referencing
+ // each account, we're done with the splits here!
+ break;
+ }
+ }
+ // if no split contains the account id, continue with the
+ // next transaction
+ if(it_s == (*it_t).splits().end())
+ continue;
+
+ // otherwise count it
+ ++cnt;
+ }
+ }
+ return cnt;
+}
+
+const QMap<QString, unsigned long> MyMoneySeqAccessMgr::transactionCountMap(void) const
+{
+ QMap<QString, unsigned long> map;
+ QMap<QString, MyMoneyTransaction>::ConstIterator it_t;
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+
+ // scan all transactions
+ for(it_t = m_transactionList.begin(); it_t != m_transactionList.end(); ++it_t) {
+ // scan all splits of this transaction
+ for(it_s = (*it_t).splits().begin(); it_s != (*it_t).splits().end(); ++it_s) {
+ map[(*it_s).accountId()]++;
+ }
+ }
+ return map;
+}
+
+unsigned int MyMoneySeqAccessMgr::institutionCount(void) const
+{
+ return m_institutionList.count();
+}
+
+unsigned int MyMoneySeqAccessMgr::accountCount(void) const
+{
+ return m_accountList.count();
+}
+
+QString MyMoneySeqAccessMgr::nextPayeeID(void)
+{
+ QString id;
+ id.setNum(++m_nextPayeeID);
+ id = "P" + id.rightJustify(PAYEE_ID_SIZE, '0');
+ return id;
+}
+
+QString MyMoneySeqAccessMgr::nextInstitutionID(void)
+{
+ QString id;
+ id.setNum(++m_nextInstitutionID);
+ id = "I" + id.rightJustify(INSTITUTION_ID_SIZE, '0');
+ return id;
+}
+
+QString MyMoneySeqAccessMgr::nextAccountID(void)
+{
+ QString id;
+ id.setNum(++m_nextAccountID);
+ id = "A" + id.rightJustify(ACCOUNT_ID_SIZE, '0');
+ return id;
+}
+
+QString MyMoneySeqAccessMgr::nextTransactionID(void)
+{
+ QString id;
+ id.setNum(++m_nextTransactionID);
+ id = "T" + id.rightJustify(TRANSACTION_ID_SIZE, '0');
+ return id;
+}
+
+QString MyMoneySeqAccessMgr::nextScheduleID(void)
+{
+ QString id;
+ id.setNum(++m_nextScheduleID);
+ id = "SCH" + id.rightJustify(SCHEDULE_ID_SIZE, '0');
+ return id;
+}
+
+QString MyMoneySeqAccessMgr::nextSecurityID(void)
+{
+ QString id;
+ id.setNum(++m_nextSecurityID);
+ id = "E" + id.rightJustify(SECURITY_ID_SIZE, '0');
+ return id;
+}
+
+
+void MyMoneySeqAccessMgr::addTransaction(MyMoneyTransaction& transaction, const bool skipAccountUpdate)
+{
+ // perform some checks to see that the transaction stuff is OK. For
+ // now we assume that
+ // * no ids are assigned
+ // * the date valid (must not be empty)
+ // * the referenced accounts in the splits exist
+
+ // first perform all the checks
+ if(!transaction.id().isEmpty())
+ throw new MYMONEYEXCEPTION("transaction already contains an id");
+ if(!transaction.postDate().isValid())
+ throw new MYMONEYEXCEPTION("invalid post date");
+
+ // now check the splits
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ for(it_s = transaction.splits().begin(); it_s != transaction.splits().end(); ++it_s) {
+ // the following lines will throw an exception if the
+ // account or payee do not exist
+ account((*it_s).accountId());
+ if(!(*it_s).payeeId().isEmpty())
+ payee((*it_s).payeeId());
+ }
+
+ MyMoneyTransaction newTransaction(nextTransactionID(), transaction);
+ QString key = newTransaction.uniqueSortKey();
+
+ m_transactionList.insert(key, newTransaction);
+ m_transactionKeys.insert(newTransaction.id(), key);
+
+ transaction = newTransaction;
+
+ // adjust the balance of all affected accounts
+ for(it_s = transaction.splits().begin(); it_s != transaction.splits().end(); ++it_s) {
+ MyMoneyAccount acc = m_accountList[(*it_s).accountId()];
+ acc.adjustBalance(*it_s);
+ if(!skipAccountUpdate) {
+ acc.touch();
+ invalidateBalanceCache(acc.id());
+ }
+ m_accountList.modify(acc.id(), acc);
+ }
+}
+
+void MyMoneySeqAccessMgr::touch(void)
+{
+ m_dirty = true;
+ m_lastModificationDate = QDate::currentDate();
+}
+
+bool MyMoneySeqAccessMgr::hasActiveSplits(const QString& id) const
+{
+ QMap<QString, MyMoneyTransaction>::ConstIterator it;
+
+ for(it = m_transactionList.begin(); it != m_transactionList.end(); ++it) {
+ if((*it).accountReferenced(id)) {
+ return true;
+ }
+ }
+ return false;
+}
+
+const MyMoneyInstitution MyMoneySeqAccessMgr::institution(const QString& id) const
+{
+ QMap<QString, MyMoneyInstitution>::ConstIterator pos;
+
+ pos = m_institutionList.find(id);
+ if(pos != m_institutionList.end())
+ return *pos;
+ throw new MYMONEYEXCEPTION("unknown institution");
+}
+
+const QValueList<MyMoneyInstitution> MyMoneySeqAccessMgr::institutionList(void) const
+{
+ return m_institutionList.values();
+}
+
+void MyMoneySeqAccessMgr::modifyAccount(const MyMoneyAccount& account, const bool skipCheck)
+{
+ QMap<QString, MyMoneyAccount>::ConstIterator pos;
+
+ // locate the account in the file global pool
+ pos = m_accountList.find(account.id());
+ if(pos != m_accountList.end()) {
+ // check if the new info is based on the old one.
+ // this is the case, when the file and the id
+ // as well as the type are equal.
+ if((((*pos).parentAccountId() == account.parentAccountId())
+ && ((*pos).accountType() == account.accountType()))
+ || (skipCheck == true)) {
+ // make sure that all the referenced objects exist
+ if(!account.institutionId().isEmpty())
+ institution(account.institutionId());
+
+ QValueList<QString>::ConstIterator it_a;
+ for(it_a = account.accountList().begin(); it_a != account.accountList().end(); ++it_a) {
+ this->account(*it_a);
+ }
+
+ // update information in account list
+ m_accountList.modify(account.id(), account);
+
+ // invalidate cached balance
+ invalidateBalanceCache(account.id());
+
+ } else
+ throw new MYMONEYEXCEPTION("Invalid information for update");
+
+ } else
+ throw new MYMONEYEXCEPTION("Unknown account id");
+}
+
+void MyMoneySeqAccessMgr::modifyInstitution(const MyMoneyInstitution& institution)
+{
+ QMap<QString, MyMoneyInstitution>::ConstIterator pos;
+
+ // locate the institution in the file global pool
+ pos = m_institutionList.find(institution.id());
+ if(pos != m_institutionList.end()) {
+ m_institutionList.modify(institution.id(), institution);
+
+ } else
+ throw new MYMONEYEXCEPTION("unknown institution");
+}
+
+void MyMoneySeqAccessMgr::modifyTransaction(const MyMoneyTransaction& transaction)
+{
+ // perform some checks to see that the transaction stuff is OK. For
+ // now we assume that
+ // * ids are assigned
+ // * the pointer to the MyMoneyFile object is not 0
+ // * the date valid (must not be empty)
+ // * the splits must have valid account ids
+
+ // first perform all the checks
+ if(transaction.id().isEmpty()
+// || transaction.file() != this
+ || !transaction.postDate().isValid())
+ throw new MYMONEYEXCEPTION("invalid transaction to be modified");
+
+ // now check the splits
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ for(it_s = transaction.splits().begin(); it_s != transaction.splits().end(); ++it_s) {
+ // the following lines will throw an exception if the
+ // account or payee do not exist
+ account((*it_s).accountId());
+ if(!(*it_s).payeeId().isEmpty())
+ payee((*it_s).payeeId());
+ }
+
+ // new data seems to be ok. find old version of transaction
+ // in our pool. Throw exception if unknown.
+ if(!m_transactionKeys.contains(transaction.id()))
+ throw new MYMONEYEXCEPTION("invalid transaction id");
+
+ QString oldKey = m_transactionKeys[transaction.id()];
+ if(!m_transactionList.contains(oldKey))
+ throw new MYMONEYEXCEPTION("invalid transaction key");
+
+ QMap<QString, MyMoneyTransaction>::ConstIterator it_t;
+
+ it_t = m_transactionList.find(oldKey);
+ if(it_t == m_transactionList.end())
+ throw new MYMONEYEXCEPTION("invalid transaction key");
+
+ // adjust account balances
+ for(it_s = (*it_t).splits().begin(); it_s != (*it_t).splits().end(); ++it_s) {
+ MyMoneyAccount acc = m_accountList[(*it_s).accountId()];
+ acc.adjustBalance(*it_s, true); // reverse the adjust operation (reverse = true)
+ acc.touch();
+ invalidateBalanceCache(acc.id());
+ m_accountList.modify(acc.id(), acc);
+ }
+ for(it_s = transaction.splits().begin(); it_s != transaction.splits().end(); ++it_s) {
+ MyMoneyAccount acc = m_accountList[(*it_s).accountId()];
+ acc.adjustBalance(*it_s);
+ acc.touch();
+ invalidateBalanceCache(acc.id());
+ m_accountList.modify(acc.id(), acc);
+ }
+
+ // remove old transaction from lists
+ m_transactionList.remove(oldKey);
+
+ // add new transaction to lists
+ QString newKey = transaction.uniqueSortKey();
+ m_transactionList.insert(newKey, transaction);
+ m_transactionKeys.modify(transaction.id(), newKey);
+}
+
+void MyMoneySeqAccessMgr::reparentAccount(MyMoneyAccount &account, MyMoneyAccount& parent)
+{
+ reparentAccount(account, parent, true);
+}
+
+void MyMoneySeqAccessMgr::reparentAccount(MyMoneyAccount &account, MyMoneyAccount& parent, const bool /* sendNotification */)
+{
+ QMap<QString, MyMoneyAccount>::ConstIterator oldParent;
+ QMap<QString, MyMoneyAccount>::ConstIterator newParent;
+ QMap<QString, MyMoneyAccount>::ConstIterator childAccount;
+
+ // verify that accounts exist. If one does not,
+ // an exception is thrown
+ MyMoneySeqAccessMgr::account(account.id());
+ MyMoneySeqAccessMgr::account(parent.id());
+ if(!account.parentAccountId().isEmpty()) {
+ MyMoneySeqAccessMgr::account(account.parentAccountId());
+ oldParent = m_accountList.find(account.parentAccountId());
+ }
+
+ if(account.accountType() == MyMoneyAccount::Stock && parent.accountType() != MyMoneyAccount::Investment)
+ throw new MYMONEYEXCEPTION("Cannot move a stock acocunt into a non-investment account");
+
+ newParent = m_accountList.find(parent.id());
+ childAccount = m_accountList.find(account.id());
+
+ MyMoneyAccount acc;
+ if(!account.parentAccountId().isEmpty()) {
+ acc = (*oldParent);
+ acc.removeAccountId(account.id());
+ m_accountList.modify(acc.id(), acc);
+ }
+
+ parent = (*newParent);
+ parent.addAccountId(account.id());
+ m_accountList.modify(parent.id(), parent);
+
+ account = (*childAccount);
+ account.setParentAccountId(parent.id());
+ m_accountList.modify(account.id(), account);
+
+#if 0
+ // make sure the type is the same as the new parent. This does not work for stock and investment
+ if(account.accountType() != MyMoneyAccount::Stock && account.accountType() != MyMoneyAccount::Investment)
+ (*childAccount).setAccountType((*newParent).accountType());
+#endif
+}
+
+void MyMoneySeqAccessMgr::removeTransaction(const MyMoneyTransaction& transaction)
+{
+ // first perform all the checks
+ if(transaction.id().isEmpty())
+ throw new MYMONEYEXCEPTION("invalid transaction to be deleted");
+
+ QMap<QString, QString>::ConstIterator it_k;
+ QMap<QString, MyMoneyTransaction>::ConstIterator it_t;
+
+ it_k = m_transactionKeys.find(transaction.id());
+ if(it_k == m_transactionKeys.end())
+ throw new MYMONEYEXCEPTION("invalid transaction to be deleted");
+
+ it_t = m_transactionList.find(*it_k);
+ if(it_t == m_transactionList.end())
+ throw new MYMONEYEXCEPTION("invalid transaction key");
+
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+
+ // scan the splits and collect all accounts that need
+ // to be updated after the removal of this transaction
+ for(it_s = (*it_t).splits().begin(); it_s != (*it_t).splits().end(); ++it_s) {
+ MyMoneyAccount acc = m_accountList[(*it_s).accountId()];
+ acc.adjustBalance(*it_s, true); // reverse = true
+ acc.touch();
+ m_accountList.modify(acc.id(), acc);
+ invalidateBalanceCache(acc.id());
+ }
+
+ // FIXME: check if any split is frozen and throw exception
+
+ // remove the transaction from the two lists
+ m_transactionList.remove(*it_k);
+ m_transactionKeys.remove(transaction.id());
+}
+
+void MyMoneySeqAccessMgr::removeAccount(const MyMoneyAccount& account)
+{
+ MyMoneyAccount parent;
+
+ // check that the account and it's parent exist
+ // this will throw an exception if the id is unknown
+ MyMoneySeqAccessMgr::account(account.id());
+ parent = MyMoneySeqAccessMgr::account(account.parentAccountId());
+
+ // check that it's not one of the standard account groups
+ if(isStandardAccount(account.id()))
+ throw new MYMONEYEXCEPTION("Unable to remove the standard account groups");
+
+ if(hasActiveSplits(account.id())) {
+ throw new MYMONEYEXCEPTION("Unable to remove account with active splits");
+ }
+
+ // re-parent all sub-ordinate accounts to the parent of the account
+ // to be deleted. First round check that all accounts exist, second
+ // round do the re-parenting.
+ QStringList::ConstIterator it;
+ for(it = account.accountList().begin(); it != account.accountList().end(); ++it) {
+ MyMoneySeqAccessMgr::account(*it);
+ }
+
+ // if one of the accounts did not exist, an exception had been
+ // thrown and we would not make it until here.
+
+ QMap<QString, MyMoneyAccount>::ConstIterator it_a;
+ QMap<QString, MyMoneyAccount>::ConstIterator it_p;
+
+ // locate the account in the file global pool
+
+ it_a = m_accountList.find(account.id());
+ if(it_a == m_accountList.end())
+ throw new MYMONEYEXCEPTION("Internal error: account not found in list");
+
+ it_p = m_accountList.find(parent.id());
+ if(it_p == m_accountList.end())
+ throw new MYMONEYEXCEPTION("Internal error: parent account not found in list");
+
+ if(!account.institutionId().isEmpty())
+ throw new MYMONEYEXCEPTION("Cannot remove account still attached to an institution");
+
+ removeReferences(account.id());
+
+ // FIXME: check referential integrity for the account to be removed
+
+ // check if the new info is based on the old one.
+ // this is the case, when the file and the id
+ // as well as the type are equal.
+ if((*it_a).id() == account.id()
+ && (*it_a).accountType() == account.accountType()) {
+
+ // second round over sub-ordinate accounts: do re-parenting
+ // but only if the list contains at least one entry
+ // FIXME: move this logic to MyMoneyFile
+ if((*it_a).accountList().count() > 0) {
+ while((*it_a).accountList().count() > 0) {
+ it = (*it_a).accountList().begin();
+ MyMoneyAccount acc(MyMoneySeqAccessMgr::account(*it));
+ reparentAccount(acc, parent, false);
+ }
+ }
+ // remove account from parent's list
+ parent.removeAccountId(account.id());
+ m_accountList.modify(parent.id(), parent);
+
+ // remove account from the global account pool
+ m_accountList.remove(account.id());
+
+ // remove from balance list
+ m_balanceCache.remove(account.id());
+ invalidateBalanceCache(parent.id());
+ }
+}
+
+void MyMoneySeqAccessMgr::removeInstitution(const MyMoneyInstitution& institution)
+{
+ QMap<QString, MyMoneyInstitution>::ConstIterator it_i;
+
+ it_i = m_institutionList.find(institution.id());
+ if(it_i != m_institutionList.end()) {
+ m_institutionList.remove(institution.id());
+
+ } else
+ throw new MYMONEYEXCEPTION("invalid institution");
+}
+
+void MyMoneySeqAccessMgr::transactionList(QValueList<MyMoneyTransaction>& list, MyMoneyTransactionFilter& filter) const
+{
+ list.clear();
+
+ QMap<QString, MyMoneyTransaction>::ConstIterator it_t;
+
+ for(it_t = m_transactionList.begin(); it_t != m_transactionList.end(); ++it_t) {
+ // This code is used now. It adds the transaction to the list for
+ // each matching split exactly once. This allows to show information
+ // about different splits in the same register view (e.g. search result)
+ //
+ // I have no idea, if this has some impact on the functionality. So far,
+ // I could not see it. (ipwizard 9/5/2003)
+ if(filter.match(*it_t)) {
+ unsigned int cnt = filter.matchingSplits().count();
+ if(cnt > 1) {
+ for(unsigned i=0; i < cnt; ++i)
+ list.append(*it_t);
+ } else {
+ list.append(*it_t);
+ }
+ }
+ }
+}
+
+void MyMoneySeqAccessMgr::transactionList(QValueList< QPair<MyMoneyTransaction, MyMoneySplit> >& list, MyMoneyTransactionFilter& filter) const
+{
+ list.clear();
+
+ QMap<QString, MyMoneyTransaction>::ConstIterator it_t;
+
+ for(it_t = m_transactionList.begin(); it_t != m_transactionList.end(); ++it_t) {
+ if(filter.match(*it_t)) {
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = filter.matchingSplits().begin(); it_s != filter.matchingSplits().end(); ++it_s) {
+ list.append(qMakePair(*it_t, *it_s));
+ }
+ }
+ }
+}
+
+const QValueList<MyMoneyTransaction> MyMoneySeqAccessMgr::transactionList(MyMoneyTransactionFilter& filter) const
+{
+ QValueList<MyMoneyTransaction> list;
+ transactionList(list, filter);
+ return list;
+}
+
+const MyMoneyTransaction MyMoneySeqAccessMgr::transaction(const QString& id) const
+{
+ // get the full key of this transaction, throw exception
+ // if it's invalid (unknown)
+ if(!m_transactionKeys.contains(id)) {
+ QString msg = QString("Invalid transaction id '%1'").arg(id);
+ throw new MYMONEYEXCEPTION(msg);
+ }
+
+ // check if this key is in the list, throw exception if not
+ QString key = m_transactionKeys[id];
+ if(!m_transactionList.contains(key)) {
+ QString msg = QString("Invalid transaction key '%1'").arg(key);
+ throw new MYMONEYEXCEPTION(msg);
+ }
+
+ return m_transactionList[key];
+}
+
+const MyMoneyTransaction MyMoneySeqAccessMgr::transaction(const QString& account, const int idx) const
+{
+/* removed with MyMoneyAccount::Transaction
+ QMap<QString, MyMoneyAccount>::ConstIterator acc;
+
+ // find account object in list, throw exception if unknown
+ acc = m_accountList.find(account);
+ if(acc == m_accountList.end())
+ throw new MYMONEYEXCEPTION("unknown account id");
+
+ // get the transaction info from the account
+ MyMoneyAccount::Transaction t = (*acc).transaction(idx);
+
+ // return the transaction, throw exception if not found
+ return transaction(t.transactionID());
+*/
+
+ // new implementation if the above code does not work anymore
+ QValueList<MyMoneyTransaction> list;
+ MyMoneyAccount acc = m_accountList[account];
+ MyMoneyTransactionFilter filter;
+
+ if(acc.accountGroup() == MyMoneyAccount::Income
+ || acc.accountGroup() == MyMoneyAccount::Expense)
+ filter.addCategory(account);
+ else
+ filter.addAccount(account);
+
+ transactionList(list, filter);
+ if(idx < 0 || idx >= static_cast<int> (list.count()))
+ throw new MYMONEYEXCEPTION("Unknown idx for transaction");
+
+ return transaction(list[idx].id());
+}
+
+const MyMoneyMoney MyMoneySeqAccessMgr::balance(const QString& id, const QDate& date) const
+{
+ MyMoneyMoney result(0);
+ MyMoneyAccount acc;
+ // if (date != QDate()) qDebug ("request balance for %s at %s", id.data(), date.toString(Qt::ISODate).latin1());
+ if(!date.isValid() && account(id).accountType() != MyMoneyAccount::Stock) {
+ if(m_accountList.find(id) != m_accountList.end())
+ return m_accountList[id].balance();
+ return MyMoneyMoney(0);
+ }
+ if(m_balanceCache[id].valid == false || date != m_balanceCacheDate) {
+ QMap<QString, MyMoneyMoney> balances;
+ QMap<QString, MyMoneyMoney>::ConstIterator it_b;
+ if (date != m_balanceCacheDate) {
+ m_balanceCache.clear();
+ m_balanceCacheDate = date;
+ }
+
+ QValueList<MyMoneyTransaction> list;
+ QValueList<MyMoneyTransaction>::ConstIterator it_t;
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+
+ MyMoneyTransactionFilter filter;
+ filter.setDateFilter(QDate(), date);
+ filter.setReportAllSplits(false);
+ transactionList(list, filter);
+
+ for(it_t = list.begin(); it_t != list.end(); ++it_t) {
+ for(it_s = (*it_t).splits().begin(); it_s != (*it_t).splits().end(); ++it_s){
+ const QString& aid = (*it_s).accountId();
+ if((*it_s).action() == MyMoneySplit::ActionSplitShares) {
+ balances[aid] = balances[aid] * (*it_s).shares();
+ } else {
+ balances[aid] += (*it_s).shares();
+ }
+ }
+ }
+
+ // fill the found balances into the cache
+ for(it_b = balances.begin(); it_b != balances.end(); ++it_b) {
+ MyMoneyBalanceCacheItem balance(*it_b);
+ m_balanceCache[it_b.key()] = balance;
+ }
+
+ // fill all accounts w/o transactions to zero
+ QMap<QString, MyMoneyAccount>::ConstIterator it_a;
+ for(it_a = m_accountList.begin(); it_a != m_accountList.end(); ++it_a) {
+ if(m_balanceCache[(*it_a).id()].valid == false) {
+ MyMoneyBalanceCacheItem balance(MyMoneyMoney(0,1));
+ m_balanceCache[(*it_a).id()] = balance;
+ }
+ }
+ }
+
+ if(m_balanceCache[id].valid == true)
+ result = m_balanceCache[id].balance;
+ else
+ qDebug("Cache mishit should never happen at this point");
+
+ return result;
+}
+
+const MyMoneyMoney MyMoneySeqAccessMgr::totalBalance(const QString& id, const QDate& date) const
+{
+ QStringList accounts;
+ QStringList::ConstIterator it_a;
+
+ MyMoneyMoney result(balance(id, date));
+
+ accounts = account(id).accountList();
+
+ for(it_a = accounts.begin(); it_a != accounts.end(); ++it_a) {
+ result += totalBalance(*it_a, date);
+ }
+
+ return result;
+}
+
+/**
+ * this was intended to move all splits from one account
+ * to another. This somehow is strange to undo because many
+ * changes to different objects are made within one single call.
+ * I kept the source here but commented it out. If we ever need
+ * the functionality, we can turn it back on. BTW: the stuff is untested ;-)
+ */
+/*
+const unsigned int MyMoneyFile::moveSplits(const QString& oldAccount, const QString& newAccount)
+{
+ QMap<QString, MyMoneyTransaction>::Iterator it_t;
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ unsigned int cnt = 0;
+
+ // scan all transactions
+ for(it_t = m_transactionList.begin(); it_t != m_transactionList.end(); ++it_t) {
+ // scan all splits of this transaction
+ for(it_s = (*it_t).splits().begin(); it_s != (*it_t).splits().end(); ++it_s) {
+ // is it a split in our account?
+ if((*it_s).account() == oldAccount) {
+ MyMoneySplit s = *it_s;
+ s.setAccount(newAccount);
+ (*it_t).modifySplit(s);
+ ++cnt;
+ }
+ }
+ }
+
+ if(cnt != 0) {
+ // now update all the accounts that were referenced
+ QMap<QString, MyMoneyAccount>::Iterator acc;
+ acc = m_accountList.find(oldAccount);
+ if(acc != m_accountList.end()) {
+ (*acc).touch();
+ refreshAccountTransactionList(acc);
+ }
+ acc = m_accountList.find(newAccount);
+ if(acc != m_accountList.end()) {
+ (*acc).touch();
+ refreshAccountTransactionList(acc);
+ }
+
+ // mark file as changed
+ m_dirty = true;
+ }
+ return cnt;
+}
+*/
+
+void MyMoneySeqAccessMgr::invalidateBalanceCache(const QString& id)
+{
+ if(!id.isEmpty()) {
+ try {
+ m_balanceCache[id].valid = false;
+ if(!isStandardAccount(id)) {
+ invalidateBalanceCache(account(id).parentAccountId());
+ }
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+ }
+}
+
+void MyMoneySeqAccessMgr::loadAccounts(const QMap<QString, MyMoneyAccount>& map)
+{
+ m_accountList = map;
+
+ // scan the map to identify the last used id
+ QMap<QString, MyMoneyAccount>::const_iterator it_a;
+ QString lastId("");
+ for(it_a = map.begin(); it_a != map.end(); ++it_a) {
+ if(!isStandardAccount((*it_a).id()) && ((*it_a).id() > lastId))
+ lastId = (*it_a).id();
+ }
+
+ int pos = lastId.find(QRegExp("\\d+"), 0);
+ if(pos != -1) {
+ m_nextAccountID = atol(lastId.mid(pos));
+ }
+}
+
+void MyMoneySeqAccessMgr::loadTransactions(const QMap<QString, MyMoneyTransaction>& map)
+{
+ m_transactionList = map;
+
+ // now fill the key map and
+ // identify the last used id
+ QString lastId("");
+ QMap<QString, QString> keys;
+ QMap<QString, MyMoneyTransaction>::ConstIterator it_t;
+ for(it_t = map.begin(); it_t != map.end(); ++it_t) {
+ keys[(*it_t).id()] = it_t.key();
+ if((*it_t).id() > lastId)
+ lastId = (*it_t).id();
+ }
+ m_transactionKeys = keys;
+
+
+ int pos = lastId.find(QRegExp("\\d+"), 0);
+ if(pos != -1) {
+ m_nextTransactionID = atol(lastId.mid(pos));
+ }
+}
+
+void MyMoneySeqAccessMgr::loadInstitutions(const QMap<QString, MyMoneyInstitution>& map)
+{
+ m_institutionList = map;
+
+ // scan the map to identify the last used id
+ QMap<QString, MyMoneyInstitution>::const_iterator it_i;
+ QString lastId("");
+ for(it_i = map.begin(); it_i != map.end(); ++it_i) {
+ if((*it_i).id() > lastId)
+ lastId = (*it_i).id();
+ }
+
+ int pos = lastId.find(QRegExp("\\d+"), 0);
+ if(pos != -1) {
+ m_nextInstitutionID = atol(lastId.mid(pos));
+ }
+}
+
+void MyMoneySeqAccessMgr::loadPayees(const QMap<QString, MyMoneyPayee>& map)
+{
+ m_payeeList = map;
+
+ // scan the map to identify the last used id
+ QMap<QString, MyMoneyPayee>::const_iterator it_p;
+ QString lastId("");
+ for(it_p = map.begin(); it_p != map.end(); ++it_p) {
+ if((*it_p).id().length() <= PAYEE_ID_SIZE+1) {
+ if((*it_p).id() > lastId)
+ lastId = (*it_p).id();
+ } else {
+ }
+ }
+
+ int pos = lastId.find(QRegExp("\\d+"), 0);
+ if(pos != -1) {
+ m_nextPayeeID = atol(lastId.mid(pos));
+ }
+}
+
+void MyMoneySeqAccessMgr::loadSecurities(const QMap<QString, MyMoneySecurity>& map)
+{
+ m_securitiesList = map;
+
+ // scan the map to identify the last used id
+ QMap<QString, MyMoneySecurity>::const_iterator it_s;
+ QString lastId("");
+ for(it_s = map.begin(); it_s != map.end(); ++it_s) {
+ if((*it_s).id() > lastId)
+ lastId = (*it_s).id();
+ }
+
+ int pos = lastId.find(QRegExp("\\d+"), 0);
+ if(pos != -1) {
+ m_nextSecurityID = atol(lastId.mid(pos));
+ }
+}
+
+void MyMoneySeqAccessMgr::loadCurrencies(const QMap<QString, MyMoneySecurity>& map)
+{
+ m_currencyList = map;
+}
+
+void MyMoneySeqAccessMgr::loadPrices(const MyMoneyPriceList& list)
+{
+ m_priceList = list;
+}
+
+void MyMoneySeqAccessMgr::loadAccountId(const unsigned long id)
+{
+ m_nextAccountID = id;
+}
+
+void MyMoneySeqAccessMgr::loadTransactionId(const unsigned long id)
+{
+ m_nextTransactionID = id;
+}
+
+void MyMoneySeqAccessMgr::loadPayeeId(const unsigned long id)
+{
+ m_nextPayeeID = id;
+}
+
+void MyMoneySeqAccessMgr::loadInstitutionId(const unsigned long id)
+{
+ m_nextInstitutionID = id;
+}
+
+void MyMoneySeqAccessMgr::loadSecurityId(const unsigned long id)
+{
+ m_nextSecurityID = id;
+}
+
+void MyMoneySeqAccessMgr::loadReportId(const unsigned long id)
+{
+ m_nextReportID = id;
+}
+
+void MyMoneySeqAccessMgr::loadBudgetId(const unsigned long id)
+{
+ m_nextBudgetID = id;
+}
+
+const QString MyMoneySeqAccessMgr::value(const QString& key) const
+{
+ return MyMoneyKeyValueContainer::value(key);
+}
+
+void MyMoneySeqAccessMgr::setValue(const QString& key, const QString& val)
+{
+ MyMoneyKeyValueContainer::setValue(key, val);
+ touch();
+}
+
+void MyMoneySeqAccessMgr::deletePair(const QString& key)
+{
+ MyMoneyKeyValueContainer::deletePair(key);
+ touch();
+}
+
+const QMap<QString, QString> MyMoneySeqAccessMgr::pairs(void) const
+{
+ return MyMoneyKeyValueContainer::pairs();
+}
+
+void MyMoneySeqAccessMgr::setPairs(const QMap<QString, QString>& list)
+{
+ MyMoneyKeyValueContainer::setPairs(list);
+ touch();
+}
+
+void MyMoneySeqAccessMgr::addSchedule(MyMoneySchedule& sched)
+{
+ // first perform all the checks
+ if(!sched.id().isEmpty())
+ throw new MYMONEYEXCEPTION("schedule already contains an id");
+
+ // The following will throw an exception when it fails
+ sched.validate(false);
+
+ MyMoneySchedule newSched(nextScheduleID(), sched);
+ m_scheduleList.insert(newSched.id(), newSched);
+ sched = newSched;
+}
+
+void MyMoneySeqAccessMgr::modifySchedule(const MyMoneySchedule& sched)
+{
+ QMap<QString, MyMoneySchedule>::ConstIterator it;
+
+ it = m_scheduleList.find(sched.id());
+ if(it == m_scheduleList.end()) {
+ QString msg = "Unknown schedule '" + sched.id() + "'";
+ throw new MYMONEYEXCEPTION(msg);
+ }
+
+ m_scheduleList.modify(sched.id(), sched);
+}
+
+void MyMoneySeqAccessMgr::removeSchedule(const MyMoneySchedule& sched)
+{
+ QMap<QString, MyMoneySchedule>::ConstIterator it;
+
+ it = m_scheduleList.find(sched.id());
+ if(it == m_scheduleList.end()) {
+ QString msg = "Unknown schedule '" + sched.id() + "'";
+ throw new MYMONEYEXCEPTION(msg);
+ }
+
+ // FIXME: check referential integrity for loan accounts
+ m_scheduleList.remove(sched.id());
+}
+
+const MyMoneySchedule MyMoneySeqAccessMgr::schedule(const QString& id) const
+{
+ QMap<QString, MyMoneySchedule>::ConstIterator pos;
+
+ // locate the schedule and if present, return it's data
+ pos = m_scheduleList.find(id);
+ if(pos != m_scheduleList.end())
+ return (*pos);
+
+ // throw an exception, if it does not exist
+ QString msg = "Unknown schedule id '" + id + "'";
+ throw new MYMONEYEXCEPTION(msg);
+}
+
+const QValueList<MyMoneySchedule> MyMoneySeqAccessMgr::scheduleList(
+ const QString& accountId,
+ const MyMoneySchedule::typeE type,
+ const MyMoneySchedule::occurenceE occurence,
+ const MyMoneySchedule::paymentTypeE paymentType,
+ const QDate& startDate,
+ const QDate& endDate,
+ const bool overdue) const
+{
+ QMap<QString, MyMoneySchedule>::ConstIterator pos;
+ QValueList<MyMoneySchedule> list;
+
+ // qDebug("scheduleList()");
+
+ for(pos = m_scheduleList.begin(); pos != m_scheduleList.end(); ++pos) {
+ // qDebug(" '%s'", qPrintable((*pos).id()));
+
+ if(type != MyMoneySchedule::TYPE_ANY) {
+ if(type != (*pos).type()) {
+ continue;
+ }
+ }
+
+ if(occurence != MyMoneySchedule::OCCUR_ANY) {
+ if(occurence != (*pos).occurence()) {
+ continue;
+ }
+ }
+
+ if(paymentType != MyMoneySchedule::STYPE_ANY) {
+ if(paymentType != (*pos).paymentType()) {
+ continue;
+ }
+ }
+
+ if(!accountId.isEmpty()) {
+ MyMoneyTransaction t = (*pos).transaction();
+ QValueList<MyMoneySplit>::ConstIterator it;
+ QValueList<MyMoneySplit> splits;
+ splits = t.splits();
+ for(it = splits.begin(); it != splits.end(); ++it) {
+ if((*it).accountId() == accountId)
+ break;
+ }
+ if(it == splits.end()) {
+ continue;
+ }
+ }
+
+ if(startDate.isValid() && endDate.isValid()) {
+ if((*pos).paymentDates(startDate, endDate).count() == 0) {
+ continue;
+ }
+ }
+
+ if(startDate.isValid() && !endDate.isValid()) {
+ if(!(*pos).nextPayment(startDate.addDays(-1)).isValid()) {
+ continue;
+ }
+ }
+
+ if(!startDate.isValid() && endDate.isValid()) {
+ if((*pos).startDate() > endDate) {
+ continue;
+ }
+ }
+
+ if(overdue) {
+ if (!(*pos).isOverdue())
+ continue;
+ }
+
+ // qDebug("Adding '%s'", (*pos).name().latin1());
+ list << *pos;
+ }
+ return list;
+}
+
+void MyMoneySeqAccessMgr::loadSchedules(const QMap<QString, MyMoneySchedule>& map)
+{
+ m_scheduleList = map;
+
+ // scan the map to identify the last used id
+ QMap<QString, MyMoneySchedule>::const_iterator it_s;
+ QString lastId("");
+ for(it_s = map.begin(); it_s != map.end(); ++it_s) {
+ if((*it_s).id() > lastId)
+ lastId = (*it_s).id();
+ }
+
+ int pos = lastId.find(QRegExp("\\d+"), 0);
+ if(pos != -1) {
+ m_nextScheduleID = atol(lastId.mid(pos));
+ }
+}
+
+void MyMoneySeqAccessMgr::loadScheduleId(const unsigned long id)
+{
+ m_nextScheduleID = id;
+}
+
+const QValueList<MyMoneySchedule> MyMoneySeqAccessMgr::scheduleListEx(int scheduleTypes,
+ int scheduleOcurrences,
+ int schedulePaymentTypes,
+ QDate date,
+ const QStringList& accounts) const
+{
+// qDebug("scheduleListEx");
+
+ QMap<QString, MyMoneySchedule>::ConstIterator pos;
+ QValueList<MyMoneySchedule> list;
+
+ if (!date.isValid())
+ return list;
+
+ for(pos = m_scheduleList.begin(); pos != m_scheduleList.end(); ++pos)
+ {
+ if (scheduleTypes && !(scheduleTypes & (*pos).type()))
+ continue;
+
+ if (scheduleOcurrences && !(scheduleOcurrences & (*pos).occurence()))
+ continue;
+
+ if (schedulePaymentTypes && !(schedulePaymentTypes & (*pos).paymentType()))
+ continue;
+
+ if((*pos).paymentDates(date, date).count() == 0)
+ continue;
+
+ if ((*pos).isFinished())
+ continue;
+
+ if ((*pos).hasRecordedPayment(date))
+ continue;
+
+ if (accounts.count() > 0)
+ {
+ if (accounts.contains((*pos).account().id()))
+ continue;
+ }
+
+// qDebug("\tAdding '%s'", (*pos).name().latin1());
+ list << *pos;
+ }
+
+ return list;
+}
+
+void MyMoneySeqAccessMgr::addSecurity(MyMoneySecurity& security)
+{
+ // create the account
+ MyMoneySecurity newSecurity(nextSecurityID(), security);
+
+ m_securitiesList.insert(newSecurity.id(), newSecurity);
+
+ security = newSecurity;
+}
+
+void MyMoneySeqAccessMgr::modifySecurity(const MyMoneySecurity& security)
+{
+ QMap<QString, MyMoneySecurity>::ConstIterator it;
+
+ it = m_securitiesList.find(security.id());
+ if(it == m_securitiesList.end())
+ {
+ QString msg = "Unknown security '";
+ msg += security.id() + "' during modifySecurity()";
+ throw new MYMONEYEXCEPTION(msg);
+ }
+
+ m_securitiesList.modify(security.id(), security);
+}
+
+void MyMoneySeqAccessMgr::removeSecurity(const MyMoneySecurity& security)
+{
+ QMap<QString, MyMoneySecurity>::ConstIterator it;
+
+ // FIXME: check referential integrity
+
+ it = m_securitiesList.find(security.id());
+ if(it == m_securitiesList.end())
+ {
+ QString msg = "Unknown security '";
+ msg += security.id() + "' during removeSecurity()";
+ throw new MYMONEYEXCEPTION(msg);
+ }
+
+ m_securitiesList.remove(security.id());
+}
+
+const MyMoneySecurity MyMoneySeqAccessMgr::security(const QString& id) const
+{
+ QMap<QString, MyMoneySecurity>::ConstIterator it = m_securitiesList.find(id);
+ if(it != m_securitiesList.end())
+ {
+ return it.data();
+ }
+
+ return MyMoneySecurity();
+}
+
+const QValueList<MyMoneySecurity> MyMoneySeqAccessMgr::securityList(void) const
+{
+ //qDebug("securityList: Security list size is %d, this=%8p", m_equitiesList.size(), (void*)this);
+ return m_securitiesList.values();
+}
+
+void MyMoneySeqAccessMgr::addCurrency(const MyMoneySecurity& currency)
+{
+ QMap<QString, MyMoneySecurity>::ConstIterator it;
+
+ it = m_currencyList.find(currency.id());
+ if(it != m_currencyList.end()) {
+ throw new MYMONEYEXCEPTION(QString("Cannot add currency with existing id %1").arg(currency.id().data()));
+ }
+
+ m_currencyList.insert(currency.id(), currency);
+}
+
+void MyMoneySeqAccessMgr::modifyCurrency(const MyMoneySecurity& currency)
+{
+ QMap<QString, MyMoneySecurity>::ConstIterator it;
+
+ it = m_currencyList.find(currency.id());
+ if(it == m_currencyList.end()) {
+ throw new MYMONEYEXCEPTION(QString("Cannot modify currency with unknown id %1").arg(currency.id().data()));
+ }
+
+ m_currencyList.modify(currency.id(), currency);
+}
+
+void MyMoneySeqAccessMgr::removeCurrency(const MyMoneySecurity& currency)
+{
+ QMap<QString, MyMoneySecurity>::ConstIterator it;
+
+ // FIXME: check referential integrity
+
+ it = m_currencyList.find(currency.id());
+ if(it == m_currencyList.end()) {
+ throw new MYMONEYEXCEPTION(QString("Cannot remove currency with unknown id %1").arg(currency.id().data()));
+ }
+
+ m_currencyList.remove(currency.id());
+}
+
+const MyMoneySecurity MyMoneySeqAccessMgr::currency(const QString& id) const
+{
+ if(id.isEmpty()) {
+
+ }
+ QMap<QString, MyMoneySecurity>::ConstIterator it;
+
+ it = m_currencyList.find(id);
+ if(it == m_currencyList.end()) {
+ throw new MYMONEYEXCEPTION(QString("Cannot retrieve currency with unknown id '%1'").arg(id.data()));
+ }
+
+ return *it;
+}
+
+const QValueList<MyMoneySecurity> MyMoneySeqAccessMgr::currencyList(void) const
+{
+ return m_currencyList.values();
+}
+
+const QValueList<MyMoneyReport> MyMoneySeqAccessMgr::reportList(void) const
+{
+ return m_reportList.values();
+}
+
+void MyMoneySeqAccessMgr::addReport( MyMoneyReport& report )
+{
+ if(!report.id().isEmpty())
+ throw new MYMONEYEXCEPTION("report already contains an id");
+
+ MyMoneyReport newReport(nextReportID(), report);
+ m_reportList.insert(newReport.id(), newReport);
+ report = newReport;
+}
+
+void MyMoneySeqAccessMgr::loadReports(const QMap<QString, MyMoneyReport>& map)
+{
+ m_reportList = map;
+
+ // scan the map to identify the last used id
+ QMap<QString, MyMoneyReport>::const_iterator it_r;
+ QString lastId("");
+ for(it_r = map.begin(); it_r != map.end(); ++it_r) {
+ if((*it_r).id() > lastId)
+ lastId = (*it_r).id();
+ }
+
+ int pos = lastId.find(QRegExp("\\d+"), 0);
+ if(pos != -1) {
+ m_nextReportID = atol(lastId.mid(pos));
+ }
+}
+
+void MyMoneySeqAccessMgr::modifyReport( const MyMoneyReport& report )
+{
+ QMap<QString, MyMoneyReport>::ConstIterator it;
+
+ it = m_reportList.find(report.id());
+ if(it == m_reportList.end()) {
+ QString msg = "Unknown report '" + report.id() + "'";
+ throw new MYMONEYEXCEPTION(msg);
+ }
+ m_reportList.modify(report.id(), report);
+}
+
+QString MyMoneySeqAccessMgr::nextReportID(void)
+{
+ QString id;
+ id.setNum(++m_nextReportID);
+ id = "R" + id.rightJustify(REPORT_ID_SIZE, '0');
+ return id;
+}
+
+unsigned MyMoneySeqAccessMgr::countReports(void) const
+{
+ return m_reportList.count();
+}
+
+const MyMoneyReport MyMoneySeqAccessMgr::report( const QString& _id ) const
+{
+ return m_reportList[_id];
+}
+
+void MyMoneySeqAccessMgr::removeReport( const MyMoneyReport& report )
+{
+ QMap<QString, MyMoneyReport>::ConstIterator it;
+
+ it = m_reportList.find(report.id());
+ if(it == m_reportList.end()) {
+ QString msg = "Unknown report '" + report.id() + "'";
+ throw new MYMONEYEXCEPTION(msg);
+ }
+
+ m_reportList.remove(report.id());
+}
+
+const QValueList<MyMoneyBudget> MyMoneySeqAccessMgr::budgetList(void) const
+{
+ return m_budgetList.values();
+}
+
+
+void MyMoneySeqAccessMgr::addBudget( MyMoneyBudget& budget )
+{
+ MyMoneyBudget newBudget(nextBudgetID(), budget);
+ m_budgetList.insert(newBudget.id(), newBudget);
+ budget = newBudget;
+}
+
+void MyMoneySeqAccessMgr::loadBudgets(const QMap<QString, MyMoneyBudget>& map)
+{
+ m_budgetList = map;
+
+ // scan the map to identify the last used id
+ QMap<QString, MyMoneyBudget>::const_iterator it_b;
+ QString lastId("");
+ for(it_b = map.begin(); it_b != map.end(); ++it_b) {
+ if((*it_b).id() > lastId)
+ lastId = (*it_b).id();
+ }
+
+ int pos = lastId.find(QRegExp("\\d+"), 0);
+ if(pos != -1) {
+ m_nextBudgetID = atol(lastId.mid(pos));
+ }
+}
+
+const MyMoneyBudget MyMoneySeqAccessMgr::budgetByName(const QString& budget) const
+{
+ QMap<QString, MyMoneyBudget>::ConstIterator it_p;
+
+ for(it_p = m_budgetList.begin(); it_p != m_budgetList.end(); ++it_p) {
+ if((*it_p).name() == budget) {
+ return *it_p;
+ }
+ }
+
+ throw new MYMONEYEXCEPTION("Unknown budget '" + budget + "'");
+}
+
+void MyMoneySeqAccessMgr::modifyBudget( const MyMoneyBudget& budget )
+{
+ QMap<QString, MyMoneyBudget>::ConstIterator it;
+
+ it = m_budgetList.find(budget.id());
+ if(it == m_budgetList.end()) {
+ QString msg = "Unknown budget '" + budget.id() + "'";
+ throw new MYMONEYEXCEPTION(msg);
+ }
+ m_budgetList.modify(budget.id(), budget);
+}
+
+QString MyMoneySeqAccessMgr::nextBudgetID(void)
+{
+ QString id;
+ id.setNum(++m_nextBudgetID);
+ id = "B" + id.rightJustify(BUDGET_ID_SIZE, '0');
+ return id;
+}
+
+unsigned MyMoneySeqAccessMgr::countBudgets(void) const
+{
+ return m_budgetList.count();
+}
+
+MyMoneyBudget MyMoneySeqAccessMgr::budget( const QString& _id ) const
+{
+ return m_budgetList[_id];
+}
+
+void MyMoneySeqAccessMgr::removeBudget( const MyMoneyBudget& budget )
+{
+ QMap<QString, MyMoneyBudget>::ConstIterator it;
+
+ it = m_budgetList.find(budget.id());
+ if(it == m_budgetList.end()) {
+ QString msg = "Unknown budget '" + budget.id() + "'";
+ throw new MYMONEYEXCEPTION(msg);
+ }
+
+ m_budgetList.remove(budget.id());
+}
+
+void MyMoneySeqAccessMgr::addPrice(const MyMoneyPrice& price)
+{
+ MyMoneySecurityPair pricePair(price.from(), price.to());
+ QMap<MyMoneySecurityPair, MyMoneyPriceEntries>::ConstIterator it_m;
+ it_m = m_priceList.find(pricePair);
+
+ MyMoneyPriceEntries entries;
+ if(it_m != m_priceList.end()) {
+ entries = (*it_m);
+ }
+ // entries contains the current entries for this security pair
+ // in case it_m points to m_priceList.end() we need to create a
+ // new entry in the priceList, otherwise we need to modify
+ // an existing one.
+
+ MyMoneyPriceEntries::ConstIterator it;
+ it = entries.find(price.date());
+ if(it != entries.end()) {
+ if((*it).rate(QString()) == price.rate(QString())
+ && (*it).source() == price.source())
+ // in case the information did not change, we don't do anything
+ return;
+ }
+
+ // store new value in local copy
+ entries[price.date()] = price;
+
+ if(it_m != m_priceList.end()) {
+ m_priceList.modify(pricePair, entries);
+ } else {
+ m_priceList.insert(pricePair, entries);
+ }
+}
+
+void MyMoneySeqAccessMgr::removePrice(const MyMoneyPrice& price)
+{
+ MyMoneySecurityPair pricePair(price.from(), price.to());
+ QMap<MyMoneySecurityPair, MyMoneyPriceEntries>::ConstIterator it_m;
+ it_m = m_priceList.find(pricePair);
+
+ MyMoneyPriceEntries entries;
+ if(it_m != m_priceList.end()) {
+ entries = (*it_m);
+ }
+
+ // store new value in local copy
+ entries.remove(price.date());
+
+ if(entries.count() != 0) {
+ m_priceList.modify(pricePair, entries);
+ } else {
+ m_priceList.remove(pricePair);
+ }
+}
+
+const MyMoneyPriceList MyMoneySeqAccessMgr::priceList(void) const
+{
+ MyMoneyPriceList list;
+ m_priceList.map(list);
+ return list;
+}
+
+const MyMoneyPrice MyMoneySeqAccessMgr::price(const QString& fromId, const QString& toId, const QDate& _date, const bool exactDate) const
+{
+ MyMoneyPrice rc;
+ MyMoneyPriceEntries::ConstIterator it;
+ QDate date(_date);
+
+ // If no valid date is passed, we use today's date.
+ if(!date.isValid())
+ date = QDate::currentDate();
+
+ // If the caller selected an exact entry, we can search for
+ // it using the date as the key
+ if(exactDate) {
+ it = m_priceList[MyMoneySecurityPair(fromId, toId)].find(date);
+ if(it != m_priceList[MyMoneySecurityPair(fromId, toId)].end())
+ rc = *it;
+
+ } else {
+ // otherwise, we must scan the map for the previous price entry
+ for(it = m_priceList[MyMoneySecurityPair(fromId, toId)].begin(); it != m_priceList[MyMoneySecurityPair(fromId, toId)].end(); ++it) {
+ if(date < it.key())
+ break;
+
+ if(date >= it.key())
+ rc = *it;
+ }
+ }
+ return rc;
+}
+
+void MyMoneySeqAccessMgr::clearCache(void)
+{
+ m_balanceCache.clear();
+}
+
+void MyMoneySeqAccessMgr::rebuildAccountBalances(void)
+{
+ // reset the balance of all accounts to 0
+ QMap<QString, MyMoneyAccount> map;
+ m_accountList.map(map);
+
+ QMap<QString, MyMoneyAccount>::iterator it_a;
+ for(it_a = map.begin(); it_a != map.end(); ++it_a) {
+ (*it_a).setBalance(MyMoneyMoney(0));
+ }
+
+ // now scan over all transactions and all splits and setup the balances
+ QMap<QString, MyMoneyTransaction>::const_iterator it_t;
+ for(it_t = m_transactionList.begin(); it_t != m_transactionList.end(); ++it_t) {
+ const QValueList<MyMoneySplit>& splits = (*it_t).splits();
+ QValueList<MyMoneySplit>::const_iterator it_s = splits.begin();
+ for(; it_s != splits.end(); ++it_s ) {
+ if(!(*it_s).shares().isZero()) {
+ const QString& id = (*it_s).accountId();
+ // locate the account and if present, update data
+ if(map.find(id) != map.end()) {
+ map[id].adjustBalance(*it_s);
+ }
+ }
+ }
+ }
+
+ m_accountList = map;
+}
+
+bool MyMoneySeqAccessMgr::isReferenced(const MyMoneyObject& obj, const MyMoneyFileBitArray& skipCheck) const
+{
+ // We delete all references in reports when an object
+ // is deleted, so we don't need to check here. See
+ // MyMoneySeqAccessMgr::removeReferences(). In case
+ // you miss the report checks in the following lines ;)
+
+ bool rc = false;
+ const QString& id = obj.id();
+ QMap<QString, MyMoneyTransaction>::const_iterator it_t;
+ QMap<QString, MyMoneyAccount>::const_iterator it_a;
+ QMap<QString, MyMoneyInstitution>::const_iterator it_i;
+ QMap<QString, MyMoneyPayee>::const_iterator it_p;
+ QMap<QString, MyMoneyBudget>::const_iterator it_b;
+ QMap<QString, MyMoneySchedule>::const_iterator it_sch;
+ QMap<QString, MyMoneySecurity>::const_iterator it_sec;
+ MyMoneyPriceList::const_iterator it_pr;
+
+ // FIXME optimize the list of objects we have to checks
+ // with a bit of knowledge of the internal structure, we
+ // could optimize the number of objects we check for references
+
+ // Scan all engine objects for a reference
+ if(!skipCheck[RefCheckTransaction]) {
+ for(it_t = m_transactionList.begin(); !rc && it_t != m_transactionList.end(); ++it_t) {
+ rc = (*it_t).hasReferenceTo(id);
+ }
+ }
+
+ if(!skipCheck[RefCheckAccount]) {
+ for(it_a = m_accountList.begin(); !rc && it_a != m_accountList.end(); ++it_a) {
+ rc = (*it_a).hasReferenceTo(id);
+ }
+ }
+ if(!skipCheck[RefCheckInstitution]) {
+ for(it_i = m_institutionList.begin(); !rc && it_i != m_institutionList.end(); ++it_i) {
+ rc = (*it_i).hasReferenceTo(id);
+ }
+ }
+ if(!skipCheck[RefCheckPayee]) {
+ for(it_p = m_payeeList.begin(); !rc && it_p != m_payeeList.end(); ++it_p) {
+ rc = (*it_p).hasReferenceTo(id);
+ }
+ }
+
+ if(!skipCheck[RefCheckBudget]) {
+ for(it_b = m_budgetList.begin(); !rc && it_b != m_budgetList.end(); ++it_b) {
+ rc = (*it_b).hasReferenceTo(id);
+ }
+ }
+ if(!skipCheck[RefCheckSchedule]) {
+ for(it_sch = m_scheduleList.begin(); !rc && it_sch != m_scheduleList.end(); ++it_sch) {
+ rc = (*it_sch).hasReferenceTo(id);
+ }
+ }
+ if(!skipCheck[RefCheckSecurity]) {
+ for(it_sec = m_securitiesList.begin(); !rc && it_sec != m_securitiesList.end(); ++it_sec) {
+ rc = (*it_sec).hasReferenceTo(id);
+ }
+ }
+ if(!skipCheck[RefCheckCurrency]) {
+ for(it_sec = m_currencyList.begin(); !rc && it_sec != m_currencyList.end(); ++it_sec) {
+ rc = (*it_sec).hasReferenceTo(id);
+ }
+ }
+ // within the pricelist we don't have to scan each entry. Checking the QPair
+ // members of the MyMoneySecurityPair is enough as they are identical to the
+ // two security ids
+ if(!skipCheck[RefCheckPrice]) {
+ for(it_pr = m_priceList.begin(); !rc && it_pr != m_priceList.end(); ++it_pr) {
+ rc = (it_pr.key().first == id) || (it_pr.key().second == id);
+ }
+ }
+
+ return rc;
+}
+
+void MyMoneySeqAccessMgr::startTransaction(void)
+{
+ m_payeeList.startTransaction(&m_nextPayeeID);
+ m_institutionList.startTransaction(&m_nextInstitutionID);
+ m_accountList.startTransaction(&m_nextPayeeID);
+ m_transactionList.startTransaction(&m_nextTransactionID);
+ m_transactionKeys.startTransaction();
+ m_scheduleList.startTransaction(&m_nextScheduleID);
+ m_securitiesList.startTransaction(&m_nextSecurityID);
+ m_currencyList.startTransaction();
+ m_reportList.startTransaction(&m_nextReportID);
+ m_budgetList.startTransaction(&m_nextBudgetID);
+ m_priceList.startTransaction();
+}
+
+bool MyMoneySeqAccessMgr::commitTransaction(void)
+{
+ bool rc = false;
+ rc |= m_payeeList.commitTransaction();
+ rc |= m_institutionList.commitTransaction();
+ rc |= m_accountList.commitTransaction();
+ rc |= m_transactionList.commitTransaction();
+ rc |= m_transactionKeys.commitTransaction();
+ rc |= m_scheduleList.commitTransaction();
+ rc |= m_securitiesList.commitTransaction();
+ rc |= m_currencyList.commitTransaction();
+ rc |= m_reportList.commitTransaction();
+ rc |= m_budgetList.commitTransaction();
+ rc |= m_priceList.commitTransaction();
+
+ // if there was a change, touch the whole storage object
+ if(rc)
+ touch();
+
+ return rc;
+}
+
+void MyMoneySeqAccessMgr::rollbackTransaction(void)
+{
+ m_payeeList.rollbackTransaction();
+ m_institutionList.rollbackTransaction();
+ m_accountList.rollbackTransaction();
+ m_transactionList.rollbackTransaction();
+ m_transactionKeys.rollbackTransaction();
+ m_scheduleList.rollbackTransaction();
+ m_securitiesList.rollbackTransaction();
+ m_currencyList.rollbackTransaction();
+ m_reportList.rollbackTransaction();
+ m_budgetList.rollbackTransaction();
+ m_priceList.rollbackTransaction();
+}
+
+void MyMoneySeqAccessMgr::removeReferences(const QString& id)
+{
+ QMap<QString, MyMoneyReport>::const_iterator it_r;
+ QMap<QString, MyMoneyBudget>::const_iterator it_b;
+
+ // remove from reports
+ for(it_r = m_reportList.begin(); it_r != m_reportList.end(); ++it_r) {
+ MyMoneyReport r = *it_r;
+ r.removeReference(id);
+ m_reportList.modify(r.id(), r);
+ }
+
+ // remove from budgets
+ for(it_b = m_budgetList.begin(); it_b != m_budgetList.end(); ++it_b) {
+ MyMoneyBudget b = *it_b;
+ b.removeReference(id);
+ m_budgetList.modify(b.id(), b);
+ }
+}
+
+#undef TRY
+#undef CATCH
+#undef PASS
+
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/mymoney/storage/mymoneyseqaccessmgr.h b/kmymoney2/mymoney/storage/mymoneyseqaccessmgr.h
new file mode 100644
index 0000000..f200bef
--- /dev/null
+++ b/kmymoney2/mymoney/storage/mymoneyseqaccessmgr.h
@@ -0,0 +1,1232 @@
+/***************************************************************************
+ mymoneyseqaccessmgr.h - description
+ -------------------
+ begin : Sun May 5 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYSEQACCESSMGR_H
+#define MYMONEYSEQACCESSMGR_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "imymoneystorage.h"
+#include "imymoneyserialize.h"
+#include "mymoneymap.h"
+
+/**
+ * @author Thomas Baumgart
+ */
+
+/**
+ * This member represents an item in the balance cache. The balance cache
+ * is used for fast processing of the balance of an account. Several
+ * of these objects are held by the MyMoneySeqAccessMgr() object in a map
+ * with the account Id as key. If such a cache item is present in the map,
+ * the contained balance of it will be used as current balance for this
+ * account. If the balance is changed by any operation, the
+ * MyMoneyBalanceCacheItem for the modified account will be removed from
+ * the map and the next time the balance for this account is requested,
+ * it has to be recalculated. After recalculation, a new MyMoneyBalanceCacheItem
+ * will be created containing the new balance value.
+ *
+ * @see MyMoneySeqAccessMgr::balance() and
+ * MyMoneySeqAccessMgr::invalidateBalanceCache() for a usage example
+ */
+class MyMoneyBalanceCacheItem {
+public:
+ MyMoneyBalanceCacheItem() { valid = false; };
+ MyMoneyBalanceCacheItem(const MyMoneyMoney& val) { balance = val; valid = true; };
+
+ bool operator == (const MyMoneyBalanceCacheItem& right) const;
+ bool valid;
+ MyMoneyMoney balance;
+};
+
+/**
+ * The MyMoneySeqAccessMgr class represents the storage engine for sequential
+ * files. The actual file type and it's internal storage format (e.g. binary
+ * or XML) is not important and handled through the IMyMoneySerialize() interface.
+ *
+ * The MyMoneySeqAccessMgr must be loaded by an application using the
+ * IMyMoneySerialize() interface and can then be accessed through the
+ * IMyMoneyStorage() interface. All data is loaded into memory, modified
+ * and kept there. It is the subject of an outside object to store the
+ * modified data in a persistant storage area using the IMyMoneySerialize()
+ * interface. As indication, if data has been changed, the retrun value
+ * of the method dirty() can be used.
+ */
+class MyMoneySeqAccessMgr : public IMyMoneyStorage, public IMyMoneySerialize,
+ public MyMoneyKeyValueContainer
+{
+public:
+
+ MyMoneySeqAccessMgr();
+ ~MyMoneySeqAccessMgr();
+
+ // general get functions
+ const MyMoneyPayee user(void) const { return m_user; };
+ const QDate creationDate(void) const { return m_creationDate; };
+ const QDate lastModificationDate(void) const { return m_lastModificationDate; };
+ unsigned int currentFixVersion(void) const { return m_currentFixVersion; };
+ unsigned int fileFixVersion(void) const { return m_fileFixVersion; };
+
+
+ // general set functions
+ void setUser(const MyMoneyPayee& user) { m_user = user;
+ touch(); };
+ void setCreationDate(const QDate& val) { m_creationDate = val; touch(); };
+ void setLastModificationDate(const QDate& val) { m_lastModificationDate = val; m_dirty = false; };
+ void setFileFixVersion(const unsigned int v) { m_fileFixVersion = v; };
+ /**
+ * This method is used to get a SQL reader for subsequent database access
+ */
+ KSharedPtr <MyMoneyStorageSql> connectToDatabase (const KURL& url);
+ /**
+ * This method is used when a database file is open, and the data is to
+ * be saved in a different file or format. It will ensure that all data
+ * from the database is available in memory to enable it to be written.
+ */
+ virtual void fillStorage() { };
+
+ /**
+ * This method is used to duplicate the MyMoneySeqAccessMgr object and return
+ * a pointer to the newly created copy. The caller of this method is the
+ * new owner of the object and must destroy it.
+ */
+ MyMoneySeqAccessMgr const * duplicate(void);
+
+ /**
+ * Returns the account addressed by it's id.
+ *
+ * @param id id of the account to locate.
+ * @return reference to MyMoneyAccount object. An exception is thrown
+ * if the id is unknown
+ */
+ const MyMoneyAccount account(const QString& id) const;
+
+ /**
+ * This method is used to check whether a given
+ * account id references one of the standard accounts or not.
+ *
+ * @param id account id
+ * @return true if account-id is one of the standards, false otherwise
+ */
+ bool isStandardAccount(const QString& id) const;
+
+ /**
+ * This method is used to set the name for the specified standard account
+ * within the storage area. An exception will be thrown, if an error
+ * occurs
+ *
+ * @param id QString reference to one of the standard accounts. Possible
+ * values are:
+ *
+ * @li STD_ACC_LIABILITY
+ * @li STD_ACC_ASSET
+ * @li STD_ACC_EXPENSE
+ * @li STD_ACC_INCOME
+ * @li STD_ACC_EQUITY
+ *
+ * @param name QString reference to the name to be set
+ *
+ */
+ void setAccountName(const QString& id, const QString& name);
+
+ /**
+ * This method is used to create a new account
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param account MyMoneyAccount filled with data
+ */
+ void addAccount(MyMoneyAccount& account);
+
+ /**
+ * This method is used to create a new payee
+ *
+ * An exception will be thrown upon error conditions
+ *
+ * @param payee MyMoneyPayee reference to payee information
+ */
+ void addPayee(MyMoneyPayee& payee);
+
+ /**
+ * This method is used to retrieve information about a payee
+ * An exception will be thrown upon error conditions.
+ *
+ * @param id QString reference to id of payee
+ *
+ * @return MyMoneyPayee object of payee
+ */
+ const MyMoneyPayee payee(const QString& id) const;
+
+ /**
+ * This method is used to retrieve the id to a corresponding
+ * name of a payee/receiver.
+ * An exception will be thrown upon error conditions.
+ *
+ * @param payee QString reference to name of payee
+ *
+ * @return MyMoneyPayee reference to object of payee
+ */
+ const MyMoneyPayee payeeByName(const QString& payee) const;
+
+ /**
+ * This method is used to modify an existing payee
+ *
+ * An exception will be thrown upon error conditions
+ *
+ * @param payee MyMoneyPayee reference to payee information
+ */
+ void modifyPayee(const MyMoneyPayee& payee);
+
+ /**
+ * This method is used to remove an existing payee
+ *
+ * An exception will be thrown upon error conditions
+ *
+ * @param payee MyMoneyPayee reference to payee information
+ */
+ void removePayee(const MyMoneyPayee& payee);
+
+ /**
+ * This method returns a list of the payees
+ * inside a MyMoneyStorage object
+ *
+ * @return QValueList<MyMoneyPayee> containing the payee information
+ */
+ const QValueList<MyMoneyPayee> payeeList(void) const;
+
+ /**
+ * This method is used to add one account as sub-ordinate to another
+ * (parent) account. The objects passed as arguments will be modified
+ * accordingly.
+ *
+ * @param parent parent account the account should be added to
+ * @param account the account to be added
+ */
+ void addAccount(MyMoneyAccount& parent, MyMoneyAccount& account);
+
+ /**
+ * Adds an institution to the storage. A
+ * respective institution-ID will be generated within this record.
+ * The ID is stored as QString in the object passed as argument.
+ * An exception will be thrown upon error conditions.
+ *
+ * @param institution The complete institution information in a
+ * MyMoneyInstitution object
+ */
+ void addInstitution(MyMoneyInstitution& institution);
+
+ /**
+ * Adds a transaction to the file-global transaction pool. A respective
+ * transaction-ID will be generated within this record. The ID is stored
+ * as QString in the transaction object. The accounts of the referenced splits
+ * will be updated to have a reference to the transaction just added.
+ *
+ * @param transaction reference to the transaction
+ * @param skipAccountUpdate if set, the transaction lists of the accounts
+ * referenced in the splits are not updated. This is used for
+ * bulk loading a lot of transactions but not during normal operation
+ */
+ void addTransaction(MyMoneyTransaction& transaction, const bool skipAccountUpdate = false);
+
+ /**
+ * Modifies an already existing account in the file global account pool.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param account reference to the new account information
+ * @param skipCheck if @p true, skips the built in consistency check for
+ * the object to be updated. Do not set this parameter
+ * to true. This is only used for the MyMoneyFile::consistencyCheck()
+ * procedure to be able to reload accounts. The default
+ * setting of this parameter is @p false.
+ */
+ void modifyAccount(const MyMoneyAccount& account, const bool skipCheck = false);
+
+ /**
+ * Modifies an already existing institution in the file global
+ * institution pool.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param institution The complete new institution information
+ */
+ void modifyInstitution(const MyMoneyInstitution& institution);
+
+ /**
+ * This method is used to update a specific transaction in the
+ * transaction pool of the MyMoneyFile object
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param transaction reference to transaction to be changed
+ */
+ void modifyTransaction(const MyMoneyTransaction& transaction);
+
+ /**
+ * This method re-parents an existing account
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param account MyMoneyAccount reference to account to be re-parented
+ * @param parent MyMoneyAccount reference to new parent account
+ */
+ void reparentAccount(MyMoneyAccount &account, MyMoneyAccount& parent);
+
+ /**
+ * This method is used to remove a transaction from the transaction
+ * pool (journal).
+ *
+ * @param transaction const reference to transaction to be deleted
+ */
+ void removeTransaction(const MyMoneyTransaction& transaction);
+
+ /**
+ * Deletes an existing account from the file global account pool
+ * This method only allows to remove accounts that are not
+ * referenced by any split. Use moveSplits() to move splits
+ * to another account. An exception is thrown in case of a
+ * problem.
+ *
+ * @param account reference to the account to be deleted.
+ */
+ void removeAccount(const MyMoneyAccount& account);
+
+ /**
+ * Deletes an existing institution from the file global institution pool
+ * Also modifies the accounts that reference this institution as
+ * their institution.
+ *
+ * @param institution institution to be deleted.
+ */
+ void removeInstitution(const MyMoneyInstitution& institution);
+
+ /**
+ * This method is used to extract a transaction from the file global
+ * transaction pool through an id. In case of an invalid id, an
+ * exception will be thrown.
+ *
+ * @param id id of transaction as QString.
+ * @return reference to the requested transaction
+ */
+ const MyMoneyTransaction transaction(const QString& id) const;
+
+ /**
+ * This method is used to extract a transaction from the file global
+ * transaction pool through an index into an account.
+ *
+ * @param account id of the account as QString
+ * @param idx number of transaction in this account
+ * @return reference to MyMoneyTransaction object
+ */
+ const MyMoneyTransaction transaction(const QString& account, const int idx) const;
+
+ /**
+ * This method is used to determince, if the account with the
+ * given ID is referenced by any split in m_transactionList.
+ *
+ * @param id id of the account to be checked for
+ * @return true if account is referenced, false otherwise
+ */
+ bool hasActiveSplits(const QString& id) const;
+
+ /**
+ * This method is used to return the actual balance of an account
+ * without it's sub-ordinate accounts. If a @p date is presented,
+ * the balance at the beginning of this date (not including any
+ * transaction on this date) is returned. Otherwise all recorded
+ * transactions are included in the balance.
+ *
+ * @param id id of the account in question
+ * @param date return balance for specific date
+ * @return balance of the account as MyMoneyMoney object
+ */
+ const MyMoneyMoney balance(const QString& id, const QDate& date = QDate()) const;
+
+ /**
+ * This method is used to return the actual balance of an account
+ * including it's sub-ordinate accounts. If a @p date is presented,
+ * the balance at the beginning of this date (not including any
+ * transaction on this date) is returned. Otherwise all recorded
+ * transactions are included in the balance.
+ *
+ * @param id id of the account in question
+ * @param date return balance for specific date
+ * @return balance of the account as MyMoneyMoney object
+ */
+ const MyMoneyMoney totalBalance(const QString& id, const QDate& date = QDate()) const;
+
+ /**
+ * Returns the institution of a given ID
+ *
+ * @param id id of the institution to locate
+ * @return MyMoneyInstitution object filled with data. If the institution
+ * could not be found, an exception will be thrown
+ */
+ const MyMoneyInstitution institution(const QString& id) const;
+
+ /**
+ * This method returns an indicator if the storage object has been
+ * changed after it has last been saved to permanent storage.
+ *
+ * @return true if changed, false if not
+ */
+ bool dirty(void) const { return m_dirty; }
+
+ /**
+ * This method can be used by an external object to force the
+ * storage object to be dirty. This is used e.g. when an upload
+ * to an external destination failed but the previous storage
+ * to a local disk was ok.
+ */
+ void setDirty(void) { m_dirty = true; };
+
+ /**
+ * This method returns a list of the institutions
+ * inside a MyMoneyFile object
+ *
+ * @return QMap containing the institution information
+ */
+ const QValueList<MyMoneyInstitution> institutionList(void) const;
+
+ /**
+ * This method returns a list of accounts inside the storage object.
+ *
+ * @param list reference to QValueList receiving the account objects
+ *
+ * @note The standard accounts will not be returned
+ */
+ void accountList(QValueList<MyMoneyAccount>& list) const;
+
+ /**
+ * This method is used to pull a list of transactions from the file
+ * global transaction pool. It returns all those transactions
+ * that match the filter passed as argument. If the filter is empty,
+ * the whole journal will be returned.
+ * The list returned is sorted according to the transactions posting date.
+ * If more than one transaction exists for the same date, the order among
+ * them is undefined.
+ *
+ * The @p list will be cleared by this method.
+ *
+ * @param list reference to list
+ * @param filter MyMoneyTransactionFilter object with the match criteria
+ *
+ * @return set of transactions in form of a QValueList<MyMoneyTransaction>
+ */
+ void transactionList(QValueList<MyMoneyTransaction>& list, MyMoneyTransactionFilter& filter) const;
+
+ /**
+ * This method is used to pull a list of transactions from the file
+ * global transaction pool. It returns all those transactions
+ * that match the filter passed as argument. If the filter is empty,
+ * the whole journal will be returned.
+ * The list returned is sorted according to the transactions posting date.
+ * If more than one transaction exists for the same date, the order among
+ * them is undefined.
+ *
+ * The @p list will be cleared by this method.
+ *
+ * @param list reference to list
+ * @param filter MyMoneyTransactionFilter object with the match criteria
+ *
+ * @return set of transactions in form of a QValueList<QPair<MyMoneyTransaction,MyMoneySplit> >
+ */
+ void transactionList(QValueList< QPair<MyMoneyTransaction, MyMoneySplit> >& list, MyMoneyTransactionFilter& filter) const;
+
+ /**
+ * Compatibility interface for the previous method.
+ */
+ const QValueList<MyMoneyTransaction> transactionList(MyMoneyTransactionFilter& filter) const;
+
+ /**
+ * This method returns whether a given transaction is already in memory, to avoid
+ * reloading it from the database
+ */
+ bool isDuplicateTransaction(const QString& id) const { return m_transactionKeys.contains(id); }
+
+ /**
+ * This method returns the number of transactions currently known to file
+ * in the range 0..MAXUINT
+ *
+ * @param account QString reference to account id. If account is empty
+ + all transactions (the journal) will be counted. If account
+ * is not empty it returns the number of transactions
+ * that have splits in this account.
+ *
+ * @return number of transactions in journal/account
+ */
+ unsigned int transactionCount(const QString& account = QString()) const;
+
+ const QMap<QString, unsigned long> transactionCountMap(void) const;
+
+ /**
+ * This method returns the number of institutions currently known to file
+ * in the range 0..MAXUINT
+ *
+ * @return number of institutions known to file
+ */
+ unsigned int institutionCount(void) const;
+
+ /**
+ * This method returns the number of accounts currently known to file
+ * in the range 0..MAXUINT
+ *
+ * @return number of accounts currently known inside a MyMoneyFile object
+ */
+ unsigned int accountCount(void) const;
+
+ /**
+ * This method is used to return the standard liability account
+ * @return MyMoneyAccount liability account(group)
+ */
+ const MyMoneyAccount liability(void) const { return account(STD_ACC_LIABILITY); };
+
+ /**
+ * This method is used to return the standard asset account
+ * @return MyMoneyAccount asset account(group)
+ */
+ const MyMoneyAccount asset(void) const { return account(STD_ACC_ASSET); };
+
+ /**
+ * This method is used to return the standard expense account
+ * @return MyMoneyAccount expense account(group)
+ */
+ const MyMoneyAccount expense(void) const { return account(STD_ACC_EXPENSE); };
+
+ /**
+ * This method is used to return the standard income account
+ * @return MyMoneyAccount income account(group)
+ */
+ const MyMoneyAccount income(void) const { return account(STD_ACC_INCOME); };
+
+ /**
+ * This method is used to return the standard equity account
+ * @return MyMoneyAccount equity account(group)
+ */
+ const MyMoneyAccount equity(void) const { return account(STD_ACC_EQUITY); };
+
+ virtual void loadAccounts(const QMap<QString, MyMoneyAccount>& acc);
+ virtual void loadTransactions(const QMap<QString, MyMoneyTransaction>& map);
+ virtual void loadInstitutions(const QMap<QString, MyMoneyInstitution>& map);
+ virtual void loadPayees(const QMap<QString, MyMoneyPayee>& map);
+ virtual void loadSchedules(const QMap<QString, MyMoneySchedule>& map);
+ virtual void loadSecurities(const QMap<QString, MyMoneySecurity>& map);
+ virtual void loadCurrencies(const QMap<QString, MyMoneySecurity>& map);
+ virtual void loadPrices(const MyMoneyPriceList& list);
+
+ virtual void loadAccountId(const unsigned long id);
+ virtual void loadTransactionId(const unsigned long id);
+ virtual void loadPayeeId(const unsigned long id);
+ virtual void loadInstitutionId(const unsigned long id);
+ virtual void loadScheduleId(const unsigned long id);
+ virtual void loadSecurityId(const unsigned long id);
+ virtual void loadReportId(const unsigned long id);
+ virtual void loadBudgetId(const unsigned long id);
+
+ virtual unsigned long accountId(void) const { return m_nextAccountID; };
+ virtual unsigned long transactionId(void) const { return m_nextTransactionID; };
+ virtual unsigned long payeeId(void) const { return m_nextPayeeID; };
+ virtual unsigned long institutionId(void) const { return m_nextInstitutionID; };
+ virtual unsigned long scheduleId(void) const { return m_nextScheduleID; };
+ virtual unsigned long securityId(void) const { return m_nextSecurityID; };
+ virtual unsigned long reportId(void) const { return m_nextReportID; };
+ virtual unsigned long budgetId(void) const { return m_nextBudgetID; };
+
+
+ /**
+ * This method is used to extract a value from
+ * KeyValueContainer. For details see MyMoneyKeyValueContainer::value().
+ *
+ * @param key const reference to QString containing the key
+ * @return QString containing the value
+ */
+ const QString value(const QString& key) const;
+
+ /**
+ * This method is used to set a value in the
+ * KeyValueContainer. For details see MyMoneyKeyValueContainer::setValue().
+ *
+ * @param key const reference to QString containing the key
+ * @param val const reference to QString containing the value
+ */
+ void setValue(const QString& key, const QString& val);
+
+ /**
+ * This method is used to delete a key-value-pair from the
+ * KeyValueContainer identified by the parameter
+ * @p key. For details see MyMoneyKeyValueContainer::deletePair().
+ *
+ * @param key const reference to QString containing the key
+ */
+ void deletePair(const QString& key);
+
+ // documented in IMyMoneySerialize base class
+ const QMap<QString, QString> pairs(void) const;
+
+ // documented in IMyMoneySerialize base class
+ void setPairs(const QMap<QString, QString>& list);
+
+ /**
+ * This method is used to add a scheduled transaction to the engine.
+ * It must be sure, that the id of the object is not filled. When the
+ * method returns to the caller, the id will be filled with the
+ * newly created object id value.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param sched reference to the MyMoneySchedule object
+ */
+ void addSchedule(MyMoneySchedule& sched);
+
+ /**
+ * This method is used to modify an existing MyMoneySchedule
+ * object. Therefor, the id attribute of the object must be set.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param sched const reference to the MyMoneySchedule object to be updated
+ */
+ void modifySchedule(const MyMoneySchedule& sched);
+
+ /**
+ * This method is used to remove an existing MyMoneySchedule object
+ * from the engine. The id attribute of the object must be set.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param sched const reference to the MyMoneySchedule object to be updated
+ */
+ void removeSchedule(const MyMoneySchedule& sched);
+
+ /**
+ * This method is used to retrieve a single MyMoneySchedule object.
+ * The id of the object must be supplied in the parameter @p id.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param id QString containing the id of the MyMoneySchedule object
+ * @return MyMoneySchedule object
+ */
+ const MyMoneySchedule schedule(const QString& id) const;
+
+ /**
+ * This method is used to create a new security object. The ID will be created
+ * automatically. The object passed with the parameter @p security is modified
+ * to contain the assigned id.
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param security MyMoneySecurity filled with data
+ */
+ virtual void addSecurity(MyMoneySecurity& security);
+
+ /**
+ * This method is used to modify an existing MyMoneySchedule
+ * object.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param security reference to the MyMoneySecurity object to be updated
+ */
+ void modifySecurity(const MyMoneySecurity& security);
+
+ /**
+ * This method is used to remove an existing MyMoneySecurity object
+ * from the engine.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param security reference to the MyMoneySecurity object to be removed
+ */
+ void removeSecurity(const MyMoneySecurity& security);
+
+ /**
+ * This method is used to retrieve a single MyMoneySchedule object.
+ * The id of the object must be supplied in the parameter @p id.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param id QString containing the id of the MyMoneySchedule object
+ * @return MyMoneySchedule object
+ */
+ const MyMoneySecurity security(const QString& id) const;
+
+
+ /**
+ * This method returns a list of security objects that the engine has
+ * knowledge of.
+ */
+ const QValueList<MyMoneySecurity> securityList(void) const;
+
+ /**
+ * This method is used to add a new currency object to the engine.
+ * The ID of the object is the trading symbol, so there is no need for an additional
+ * ID since the symbol is guaranteed to be unique.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param currency reference to the MyMoneyCurrency object
+ */
+ void addCurrency(const MyMoneySecurity& currency);
+
+ /**
+ * This method is used to modify an existing MyMoneyCurrency
+ * object.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param currency reference to the MyMoneyCurrency object
+ */
+ void modifyCurrency(const MyMoneySecurity& currency);
+
+ /**
+ * This method is used to remove an existing MyMoneyCurrency object
+ * from the engine.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param currency reference to the MyMoneyCurrency object
+ */
+ void removeCurrency(const MyMoneySecurity& currency);
+
+ /**
+ * This method is used to retrieve a single MyMoneySchedule object.
+ * The id of the object must be supplied in the parameter @p id.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param id QString containing the id of the MyMoneySchedule object
+ * @return MyMoneySchedule object
+ */
+ const MyMoneySecurity currency(const QString& id) const;
+
+ /**
+ * This method is used to retrieve the list of all currencies
+ * known to the engine.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @return QValueList of all MyMoneyCurrency objects.
+ */
+ const QValueList<MyMoneySecurity> currencyList(void) const;
+
+ /**
+ * This method is used to extract a list of scheduled transactions
+ * according to the filter criteria passed as arguments.
+ *
+ * @param accountId only search for scheduled transactions that reference
+ * accound @p accountId. If accountId is the empty string,
+ * this filter is off. Default is @p QString().
+ * @param type only schedules of type @p type are searched for.
+ * See MyMoneySchedule::typeE for details.
+ * Default is MyMoneySchedule::TYPE_ANY
+ * @param occurence only schedules of occurence type @p occurence are searched for.
+ * See MyMoneySchedule::occurenceE for details.
+ * Default is MyMoneySchedule::OCCUR_ANY
+ * @param paymentType only schedules of payment method @p paymentType
+ * are searched for.
+ * See MyMoneySchedule::paymentTypeE for details.
+ * Default is MyMoneySchedule::STYPE_ANY
+ * @param startDate only schedules with payment dates after @p startDate
+ * are searched for. Default is all dates (QDate()).
+ * @param endDate only schedules with payment dates ending prior to @p endDate
+ * are searched for. Default is all dates (QDate()).
+ * @param overdue if true, only those schedules that are overdue are
+ * searched for. Default is false (all schedules will be returned).
+ *
+ * @return const QValueList<MyMoneySchedule> list of schedule objects.
+ */
+ const QValueList<MyMoneySchedule> scheduleList(const QString& accountId = QString(),
+ const MyMoneySchedule::typeE type = MyMoneySchedule::TYPE_ANY,
+ const MyMoneySchedule::occurenceE occurence = MyMoneySchedule::OCCUR_ANY,
+ const MyMoneySchedule::paymentTypeE paymentType = MyMoneySchedule::STYPE_ANY,
+ const QDate& startDate = QDate(),
+ const QDate& endDate = QDate(),
+ const bool overdue = false) const;
+
+ const QValueList<MyMoneySchedule> scheduleListEx( int scheduleTypes,
+ int scheduleOcurrences,
+ int schedulePaymentTypes,
+ QDate startDate,
+ const QStringList& accounts=QStringList()) const;
+
+ /**
+ * This method is used to retrieve the list of all reports
+ * known to the engine.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @return QValueList of all MyMoneyReport objects.
+ */
+ const QValueList<MyMoneyReport> reportList( void ) const;
+
+ /**
+ * This method is used to add a new report to the engine.
+ * It must be sure, that the id of the object is not filled. When the
+ * method returns to the caller, the id will be filled with the
+ * newly created object id value.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param report reference to the MyMoneyReport object
+ */
+ void addReport( MyMoneyReport& report );
+
+ /**
+ * This method is used to load a set of reports into the engine. This is
+ * used when loading from storage, and an ID is already known.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param reports reference to the map of MyMoneyReport objects
+ */
+ void loadReports( const QMap<QString, MyMoneyReport>& reports );
+
+ /**
+ * This method is used to modify an existing MyMoneyReport
+ * object. Therefor, the id attribute of the object must be set.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param report const reference to the MyMoneyReport object to be updated
+ */
+ void modifyReport( const MyMoneyReport& report );
+
+ /**
+ * This method returns the number of reports currently known to file
+ * in the range 0..MAXUINT
+ *
+ * @return number of reports known to file
+ */
+ unsigned countReports(void) const;
+
+ /**
+ * This method is used to retrieve a single MyMoneyReport object.
+ * The id of the object must be supplied in the parameter @p id.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param id QString containing the id of the MyMoneyReport object
+ * @return MyMoneyReport object
+ */
+ const MyMoneyReport report( const QString& id ) const;
+
+ /**
+ * This method is used to remove an existing MyMoneyReport object
+ * from the engine. The id attribute of the object must be set.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param report const reference to the MyMoneyReport object to be updated
+ */
+ void removeReport(const MyMoneyReport& report);
+
+ /**
+ * This method is used to retrieve the list of all budgets
+ * known to the engine.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @return QValueList of all MyMoneyBudget objects.
+ */
+ const QValueList<MyMoneyBudget> budgetList( void ) const;
+
+ /**
+ * This method is used to add a new budget to the engine.
+ * It must be sure, that the id of the object is not filled. When the
+ * method returns to the caller, the id will be filled with the
+ * newly created object id value.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param budget reference to the MyMoneyBudget object
+ */
+ void addBudget( MyMoneyBudget& budget );
+
+ /**
+ * This method is used to load a set of budgets into the engine. This is
+ * used when loading from storage, and an ID is already known.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param budgets reference to the map of MyMoneyBudget object
+ */
+ void loadBudgets(const QMap<QString, MyMoneyBudget>& budgets);
+
+ /**
+ * This method is used to retrieve the id to a corresponding
+ * name of a budget
+ * An exception will be thrown upon error conditions.
+ *
+ * @param budget QString reference to name of budget
+ *
+ * @return MyMoneyBudget reference to object of budget
+ */
+ const MyMoneyBudget budgetByName(const QString& budget) const;
+
+ /**
+ * This method is used to modify an existing MyMoneyBudget
+ * object. Therefore, the id attribute of the object must be set.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param budget const reference to the MyMoneyBudget object to be updated
+ */
+ void modifyBudget( const MyMoneyBudget& budget );
+
+ /**
+ * This method returns the number of budgets currently known to file
+ * in the range 0..MAXUINT
+ *
+ * @return number of budgets known to file
+ */
+ unsigned countBudgets(void) const;
+
+ /**
+ * This method is used to retrieve a single MyMoneyBudget object.
+ * The id of the object must be supplied in the parameter @p id.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param id QString containing the id of the MyMoneyBudget object
+ * @return MyMoneyBudget object
+ */
+ MyMoneyBudget budget( const QString& id ) const;
+
+ /**
+ * This method is used to remove an existing MyMoneyBudget object
+ * from the engine. The id attribute of the object must be set.
+ *
+ * An exception will be thrown upon erronous situations.
+ *
+ * @param budget const reference to the MyMoneyBudget object to be updated
+ */
+ void removeBudget(const MyMoneyBudget& budget);
+
+
+ /**
+ * This method adds/replaces a price to/from the price list
+ */
+ void addPrice(const MyMoneyPrice& price);
+
+ /**
+ * This method removes a price from the price list
+ */
+ void removePrice(const MyMoneyPrice& price);
+
+ /**
+ * This method retrieves a price from the price list.
+ * If @p date is inValid, QDate::currentDate() is assumed.
+ */
+ const MyMoneyPrice price(const QString& fromId, const QString& toId, const QDate& date, const bool exactDate) const;
+
+ /**
+ * This method returns a list of all price entries.
+ */
+ const MyMoneyPriceList priceList(void) const;
+
+ /**
+ * Clear all internal caches (used internally for performance measurements)
+ */
+ void clearCache(void);
+
+ /**
+ * This method checks, if the given @p object is referenced
+ * by another engine object.
+ *
+ * @param obj const reference to object to be checked
+ * @param skipCheck QBitArray with ReferenceCheckBits set for which
+ * the check should be skipped
+ *
+ * @retval false @p object is not referenced
+ * @retval true @p institution is referenced
+ */
+ bool isReferenced(const MyMoneyObject& obj, const MyMoneyFileBitArray& skipCheck = MyMoneyFileBitArray()) const;
+
+ /**
+ * This method recalculates the balances of all accounts
+ * based on the transactions stored in the engine.
+ */
+ void rebuildAccountBalances(void);
+
+ virtual void startTransaction(void);
+ virtual bool commitTransaction(void);
+ virtual void rollbackTransaction(void);
+
+protected:
+ void removeReferences(const QString& id);
+
+private:
+
+ static const int INSTITUTION_ID_SIZE = 6;
+ static const int ACCOUNT_ID_SIZE = 6;
+ static const int TRANSACTION_ID_SIZE = 18;
+ static const int PAYEE_ID_SIZE = 6;
+ static const int SCHEDULE_ID_SIZE = 6;
+ static const int SECURITY_ID_SIZE = 6;
+ static const int REPORT_ID_SIZE = 6;
+ static const int BUDGET_ID_SIZE = 6;
+
+ /**
+ * This method is used to set the dirty flag and update the
+ * date of the last modification.
+ */
+ void touch(void);
+
+ /**
+ * This method is used to invalidate the cached balance for
+ * the selected account and all it's parents.
+ *
+ * @param id id of the account in question
+ */
+ void invalidateBalanceCache(const QString& id);
+
+ /**
+ * This member variable keeps the User information.
+ * @see setUser()
+ */
+ MyMoneyPayee m_user;
+
+ /**
+ * The member variable m_nextInstitutionID keeps the number that will be
+ * assigned to the next institution created. It is maintained by
+ * nextInstitutionID().
+ */
+ unsigned long m_nextInstitutionID;
+
+ /**
+ * The member variable m_nextAccountID keeps the number that will be
+ * assigned to the next institution created. It is maintained by
+ * nextAccountID().
+ */
+ unsigned long m_nextAccountID;
+
+ /**
+ * The member variable m_nextTransactionID keeps the number that will be
+ * assigned to the next transaction created. It is maintained by
+ * nextTransactionID().
+ */
+ unsigned long m_nextTransactionID;
+
+ /**
+ * The member variable m_nextPayeeID keeps the number that will be
+ * assigned to the next payee created. It is maintained by
+ * nextPayeeID()
+ */
+ unsigned long m_nextPayeeID;
+
+ /**
+ * The member variable m_nextScheduleID keeps the number that will be
+ * assigned to the next schedule created. It is maintained by
+ * nextScheduleID()
+ */
+ unsigned long m_nextScheduleID;
+
+ /**
+ * The member variable m_nextSecurityID keeps the number that will be
+ * assigned to the next security object created. It is maintained by
+ * nextSecurityID()
+ */
+ unsigned long m_nextSecurityID;
+
+ unsigned long m_nextReportID;
+
+ /**
+ * The member variable m_nextBudgetID keeps the number that will be
+ * assigned to the next budget object created. It is maintained by
+ * nextBudgetID()
+ */
+ unsigned long m_nextBudgetID;
+
+ /**
+ * The member variable m_institutionList is the container for the
+ * institutions known within this file.
+ */
+ MyMoneyMap<QString, MyMoneyInstitution> m_institutionList;
+
+ /**
+ * The member variable m_accountList is the container for the accounts
+ * known within this file.
+ */
+ MyMoneyMap<QString, MyMoneyAccount> m_accountList;
+
+ /**
+ * The member variable m_balanceCache is the container for the
+ * accounts actual balance
+ */
+ mutable QMap<QString, MyMoneyBalanceCacheItem> m_balanceCache;
+
+ /**
+ * This member keeps the date for which the m_balanceCache member
+ * is valid. In case the whole cache is invalid it is set to
+ * QDate().
+ */
+ mutable QDate m_balanceCacheDate;
+
+ /**
+ * The member variable m_transactionList is the container for all
+ * transactions within this file.
+ * @see m_transactionKeys
+ */
+ MyMoneyMap<QString, MyMoneyTransaction> m_transactionList;
+
+ /**
+ * The member variable m_transactionKeys is used to convert
+ * transaction id's into the corresponding key used in m_transactionList.
+ * @see m_transactionList;
+ */
+ MyMoneyMap<QString, QString> m_transactionKeys;
+
+ /**
+ * A list containing all the payees that have been used
+ */
+ MyMoneyMap<QString, MyMoneyPayee> m_payeeList;
+
+ /**
+ * A list containing all the scheduled transactions
+ */
+ MyMoneyMap<QString, MyMoneySchedule> m_scheduleList;
+
+ /**
+ * A list containing all the security information objects. Each object
+ * can represent a stock, bond, or mutual fund. It contains a price
+ * history that a user can add entries to. The price history will be used
+ * to determine the cost basis for sales, as well as the source of
+ * information for reports in a security account.
+ */
+ MyMoneyMap<QString, MyMoneySecurity> m_securitiesList;
+
+ /**
+ * A list containing all the currency information objects.
+ */
+ MyMoneyMap<QString, MyMoneySecurity> m_currencyList;
+
+ MyMoneyMap<QString, MyMoneyReport> m_reportList;
+
+ /**
+ * A list containing all the budget information objects.
+ */
+ MyMoneyMap<QString, MyMoneyBudget> m_budgetList;
+
+ MyMoneyMap<MyMoneySecurityPair, MyMoneyPriceEntries> m_priceList;
+
+ /**
+ * This member signals if the file has been modified or not
+ */
+ bool m_dirty;
+
+ /**
+ * This member variable keeps the creation date of this MyMoneySeqAccessMgr
+ * object. It is set during the constructor and can only be modified using
+ * the stream read operator.
+ */
+ QDate m_creationDate;
+
+ /**
+ * This member variable keeps the date of the last modification of
+ * the MyMoneySeqAccessMgr object.
+ */
+ QDate m_lastModificationDate;
+
+ /**
+ * This member variable contains the current fix level of application
+ * data files. (see kmymoneyview.cpp)
+ */
+ unsigned int m_currentFixVersion;
+ /**
+ * This member variable contains the current fix level of the
+ * presently open data file. (see kmymoneyview.cpp)
+ */
+ unsigned int m_fileFixVersion;
+ /**
+ * This method is used to get the next valid ID for a institution
+ * @return id for a institution
+ */
+ QString nextInstitutionID(void);
+
+ /**
+ * This method is used to get the next valid ID for an account
+ * @return id for an account
+ */
+ QString nextAccountID(void);
+
+ /**
+ * This method is used to get the next valid ID for a transaction
+ * @return id for a transaction
+ */
+ QString nextTransactionID(void);
+
+ /**
+ * This method is used to get the next valid ID for a payee
+ * @return id for a payee
+ */
+ QString nextPayeeID(void);
+
+ /**
+ * This method is used to get the next valid ID for a scheduled transaction
+ * @return id for a scheduled transaction
+ */
+ QString nextScheduleID(void);
+
+ /**
+ * This method is used to get the next valid ID for an security object.
+ * @return id for an security object
+ */
+ QString nextSecurityID(void);
+
+ QString nextReportID(void);
+
+ /**
+ * This method is used to get the next valid ID for a budget object.
+ * @return id for an budget object
+ */
+ QString nextBudgetID(void);
+
+
+ /**
+ * This method re-parents an existing account
+ *
+ * An exception will be thrown upon error conditions.
+ *
+ * @param account MyMoneyAccount reference to account to be re-parented
+ * @param parent MyMoneyAccount reference to new parent account
+ * @param sendNotification if true, notifications with the ids
+ * of all modified objects are send
+ */
+ void reparentAccount(MyMoneyAccount &account, MyMoneyAccount& parent, const bool sendNotification);
+ /**
+ * This method will close a database and log the use roff
+ */
+ void close(void) {}
+
+ /**
+ * This member variable is set when all transactions have been read from the database.
+ * This is would be probably the case when doing, for e.g., a full report,
+ * or after some types of transaction search which cannot be easily implemented in SQL
+ */
+ bool m_transactionListFull;
+};
+#endif
diff --git a/kmymoney2/mymoney/storage/mymoneyseqaccessmgrtest.cpp b/kmymoney2/mymoney/storage/mymoneyseqaccessmgrtest.cpp
new file mode 100644
index 0000000..09bf791
--- /dev/null
+++ b/kmymoney2/mymoney/storage/mymoneyseqaccessmgrtest.cpp
@@ -0,0 +1,1705 @@
+/***************************************************************************
+ mymoneyseqaccessmgrtest.cpp
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "mymoneyseqaccessmgrtest.h"
+#include <iostream>
+
+MyMoneySeqAccessMgrTest::MyMoneySeqAccessMgrTest()
+{
+}
+
+
+void MyMoneySeqAccessMgrTest::setUp()
+{
+ m = new MyMoneySeqAccessMgr;
+ MyMoneyFile* file = MyMoneyFile::instance();
+ file->attachStorage(m);
+ m->startTransaction();
+}
+
+void MyMoneySeqAccessMgrTest::tearDown()
+{
+ m->commitTransaction();
+ MyMoneyFile* file = MyMoneyFile::instance();
+ file->detachStorage(m);
+ delete m;
+}
+
+void MyMoneySeqAccessMgrTest::testEmptyConstructor()
+{
+ MyMoneyPayee user = m->user();
+
+ CPPUNIT_ASSERT(user.name().isEmpty());
+ CPPUNIT_ASSERT(user.address().isEmpty());
+ CPPUNIT_ASSERT(user.city().isEmpty());
+ CPPUNIT_ASSERT(user.state().isEmpty());
+ CPPUNIT_ASSERT(user.postcode().isEmpty());
+ CPPUNIT_ASSERT(user.telephone().isEmpty());
+ CPPUNIT_ASSERT(user.email().isEmpty());
+ CPPUNIT_ASSERT(m->m_nextInstitutionID == 0);
+ CPPUNIT_ASSERT(m->m_nextAccountID == 0);
+ CPPUNIT_ASSERT(m->m_nextTransactionID == 0);
+ CPPUNIT_ASSERT(m->m_nextPayeeID == 0);
+ CPPUNIT_ASSERT(m->m_nextScheduleID == 0);
+ CPPUNIT_ASSERT(m->m_nextReportID == 0);
+ CPPUNIT_ASSERT(m->m_institutionList.count() == 0);
+ CPPUNIT_ASSERT(m->m_accountList.count() == 5);
+ CPPUNIT_ASSERT(m->m_transactionList.count() == 0);
+ CPPUNIT_ASSERT(m->m_transactionKeys.count() == 0);
+ CPPUNIT_ASSERT(m->m_payeeList.count() == 0);
+ CPPUNIT_ASSERT(m->m_scheduleList.count() == 0);
+
+ CPPUNIT_ASSERT(m->m_dirty == false);
+ CPPUNIT_ASSERT(m->m_creationDate == QDate::currentDate());
+
+ CPPUNIT_ASSERT(m->liability().name() == "Liability");
+ CPPUNIT_ASSERT(m->asset().name() == "Asset");
+ CPPUNIT_ASSERT(m->expense().name() == "Expense");
+ CPPUNIT_ASSERT(m->income().name() == "Income");
+ CPPUNIT_ASSERT(m->equity().name() == "Equity");
+}
+
+void MyMoneySeqAccessMgrTest::testSetFunctions() {
+ MyMoneyPayee user = m->user();
+
+ m->m_dirty = false;
+ user.setName("Name");
+ m->setUser(user);
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->dirty() == true);
+ m->m_dirty = false;
+ user.setAddress("Street");
+ m->setUser(user);
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->dirty() == true);
+ m->m_dirty = false;
+ user.setCity("Town");
+ m->setUser(user);
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->dirty() == true);
+ m->m_dirty = false;
+ user.setState("County");
+ m->setUser(user);
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->dirty() == true);
+ m->m_dirty = false;
+ user.setPostcode("Postcode");
+ m->setUser(user);
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->dirty() == true);
+ m->m_dirty = false;
+ user.setTelephone("Telephone");
+ m->setUser(user);
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->dirty() == true);
+ m->m_dirty = false;
+ user.setEmail("Email");
+ m->setUser(user);
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->dirty() == true);
+ m->m_dirty = false;
+ m->setValue("key", "value");
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->dirty() == true);
+
+ user = m->user();
+ CPPUNIT_ASSERT(user.name() == "Name");
+ CPPUNIT_ASSERT(user.address() == "Street");
+ CPPUNIT_ASSERT(user.city() == "Town");
+ CPPUNIT_ASSERT(user.state() == "County");
+ CPPUNIT_ASSERT(user.postcode() == "Postcode");
+ CPPUNIT_ASSERT(user.telephone() == "Telephone");
+ CPPUNIT_ASSERT(user.email() == "Email");
+ CPPUNIT_ASSERT(m->value("key") == "value");
+
+ m->m_dirty = false;
+ m->deletePair("key");
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->dirty() == true);
+}
+
+void MyMoneySeqAccessMgrTest::testSupportFunctions()
+{
+ CPPUNIT_ASSERT(m->nextInstitutionID() == "I000001");
+ CPPUNIT_ASSERT(m->m_nextInstitutionID == 1);
+ CPPUNIT_ASSERT(m->nextAccountID() == "A000001");
+ CPPUNIT_ASSERT(m->m_nextAccountID == 1);
+ CPPUNIT_ASSERT(m->nextTransactionID() == "T000000000000000001");
+ CPPUNIT_ASSERT(m->m_nextTransactionID == 1);
+ CPPUNIT_ASSERT(m->nextPayeeID() == "P000001");
+ CPPUNIT_ASSERT(m->m_nextPayeeID == 1);
+ CPPUNIT_ASSERT(m->nextScheduleID() == "SCH000001");
+ CPPUNIT_ASSERT(m->m_nextScheduleID == 1);
+ CPPUNIT_ASSERT(m->nextReportID() == "R000001");
+ CPPUNIT_ASSERT(m->m_nextReportID == 1);
+}
+
+void MyMoneySeqAccessMgrTest::testIsStandardAccount()
+{
+ CPPUNIT_ASSERT(m->isStandardAccount(STD_ACC_LIABILITY) == true);
+ CPPUNIT_ASSERT(m->isStandardAccount(STD_ACC_ASSET) == true);
+ CPPUNIT_ASSERT(m->isStandardAccount(STD_ACC_EXPENSE) == true);
+ CPPUNIT_ASSERT(m->isStandardAccount(STD_ACC_INCOME) == true);
+ CPPUNIT_ASSERT(m->isStandardAccount("A0002") == false);
+}
+
+void MyMoneySeqAccessMgrTest::testNewAccount() {
+ MyMoneyAccount a;
+
+ a.setName("AccountName");
+ a.setNumber("AccountNumber");
+
+ m->addAccount(a);
+ m->commitTransaction();
+ m->startTransaction();
+
+ CPPUNIT_ASSERT(m->m_nextAccountID == 1);
+ CPPUNIT_ASSERT(m->dirty() == true);
+ CPPUNIT_ASSERT(m->m_accountList.count() == 6);
+ CPPUNIT_ASSERT(m->m_accountList["A000001"].name() == "AccountName");
+}
+
+void MyMoneySeqAccessMgrTest::testAccount() {
+ testNewAccount();
+ m->m_dirty = false;
+
+ MyMoneyAccount a;
+
+ // make sure that an invalid ID causes an exception
+ try {
+ a = m->account("Unknown ID");
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->dirty() == false);
+
+ // now make sure, that a real ID works
+ try {
+ a = m->account("A000001");
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(a.name() == "AccountName");
+ CPPUNIT_ASSERT(a.id() == "A000001");
+ CPPUNIT_ASSERT(m->dirty() == true);
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneySeqAccessMgrTest::testAddNewAccount() {
+ testNewAccount();
+
+ MyMoneyAccount a,b;
+ b.setName("Account2");
+ b.setNumber("Acc2");
+ m->addAccount(b);
+ m->commitTransaction();
+ m->startTransaction();
+
+ m->m_dirty = false;
+
+ CPPUNIT_ASSERT(m->m_nextAccountID == 2);
+ CPPUNIT_ASSERT(m->m_accountList.count() == 7);
+
+ // try to add account to undefined account
+ try {
+ MyMoneyAccount c("UnknownID", b);
+ m->addAccount(c, a);
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+ m->commitTransaction();
+ m->startTransaction();
+
+ CPPUNIT_ASSERT(m->dirty() == false);
+ // now try to add account 1 as sub-account to account 2
+ a = m->account("A000001");
+ try {
+ CPPUNIT_ASSERT(m->m_accountList[STD_ACC_ASSET].accountList().count() == 0);
+ m->addAccount(b, a);
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->m_accountList["A000002"].accountList()[0] == "A000001");
+ CPPUNIT_ASSERT(m->m_accountList["A000002"].accountList().count() == 1);
+ CPPUNIT_ASSERT(m->m_accountList[STD_ACC_ASSET].accountList().count() == 0);
+ CPPUNIT_ASSERT(m->dirty() == true);
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneySeqAccessMgrTest::testAddInstitution() {
+ MyMoneyInstitution i;
+
+ i.setName("Inst Name");
+
+ m->addInstitution(i);
+ CPPUNIT_ASSERT(m->m_institutionList.count() == 1);
+ CPPUNIT_ASSERT(m->m_nextInstitutionID == 1);
+ CPPUNIT_ASSERT(m->m_institutionList["I000001"].name() == "Inst Name");
+}
+
+void MyMoneySeqAccessMgrTest::testInstitution() {
+ testAddInstitution();
+ MyMoneyInstitution i;
+
+ m->m_dirty = false;
+
+ // try to find unknown institution
+ try {
+ i = m->institution("Unknown ID");
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+
+ CPPUNIT_ASSERT(m->dirty() == false);
+
+ // now try to find real institution
+ try {
+ i = m->institution("I000001");
+ CPPUNIT_ASSERT(i.name() == "Inst Name");
+ CPPUNIT_ASSERT(m->dirty() == false);
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneySeqAccessMgrTest::testAccount2Institution() {
+ testAddInstitution();
+ testAddNewAccount();
+
+ MyMoneyInstitution i;
+ MyMoneyAccount a, b;
+
+ try {
+ i = m->institution("I000001");
+ a = m->account("A000001");
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ m->m_dirty = false;
+
+ // try to add to a false institution
+ MyMoneyInstitution fake("Unknown ID", i);
+ a.setInstitutionId(fake.id());
+ try {
+ m->modifyAccount(a);
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+ m->commitTransaction();
+ m->startTransaction();
+
+ CPPUNIT_ASSERT(m->dirty() == false);
+ // now try to do it with a real institution
+ try {
+ CPPUNIT_ASSERT(i.accountList().count() == 0);
+ a.setInstitutionId(i.id());
+ m->modifyAccount(a);
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->dirty() == true);
+ CPPUNIT_ASSERT(a.institutionId() == i.id());
+ b = m->account("A000001");
+ CPPUNIT_ASSERT(b.institutionId() == i.id());
+ CPPUNIT_ASSERT(i.accountList().count() == 0);
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneySeqAccessMgrTest::testModifyAccount() {
+ testAccount2Institution();
+
+ // test the OK case
+ MyMoneyAccount a = m->account("A000001");
+ a.setName("New account name");
+ m->m_dirty = false;
+ try {
+ m->modifyAccount(a);
+ m->commitTransaction();
+ m->startTransaction();
+ MyMoneyAccount b = m->account("A000001");
+ CPPUNIT_ASSERT(b.parentAccountId() == a.parentAccountId());
+ CPPUNIT_ASSERT(b.name() == "New account name");
+ CPPUNIT_ASSERT(m->dirty() == true);
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ // modify institution to unknown id
+ MyMoneyAccount c("Unknown ID", a);
+ m->m_dirty = false;
+ try {
+ m->modifyAccount(c);
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+
+ // use different account type
+ MyMoneyAccount d;
+ d.setAccountType(MyMoneyAccount::CreditCard);
+ MyMoneyAccount f("A000001", d);
+ try {
+ m->modifyAccount(f);
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+
+ // use different parent
+ a.setParentAccountId("A000002");
+ try {
+ m->modifyAccount(c);
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+}
+
+void MyMoneySeqAccessMgrTest::testModifyInstitution() {
+ testAddInstitution();
+ MyMoneyInstitution i = m->institution("I000001");
+
+ m->m_dirty = false;
+ i.setName("New inst name");
+ try {
+ m->modifyInstitution(i);
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->dirty() == true);
+ i = m->institution("I000001");
+ CPPUNIT_ASSERT(i.name() == "New inst name");
+
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ // try to modify an institution that does not exist
+ MyMoneyInstitution f("Unknown ID", i);
+ try {
+ m->modifyInstitution(f);
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+}
+
+void MyMoneySeqAccessMgrTest::testReparentAccount() {
+ // this one adds some accounts to the database
+ MyMoneyAccount ex1;
+ ex1.setAccountType(MyMoneyAccount::Expense);
+ MyMoneyAccount ex2;
+ ex2.setAccountType(MyMoneyAccount::Expense);
+ MyMoneyAccount ex3;
+ ex3.setAccountType(MyMoneyAccount::Expense);
+ MyMoneyAccount ex4;
+ ex4.setAccountType(MyMoneyAccount::Expense);
+ MyMoneyAccount in;
+ in.setAccountType(MyMoneyAccount::Income);
+ MyMoneyAccount ch;
+ ch.setAccountType(MyMoneyAccount::Checkings);
+
+ ex1.setName("Sales Tax");
+ ex2.setName("Sales Tax 16%");
+ ex3.setName("Sales Tax 7%");
+ ex4.setName("Grosseries");
+
+ in.setName("Salary");
+ ch.setName("My checkings account");
+
+ try {
+ m->addAccount(ex1);
+ m->addAccount(ex2);
+ m->addAccount(ex3);
+ m->addAccount(ex4);
+ m->addAccount(in);
+ m->addAccount(ch);
+
+ CPPUNIT_ASSERT(ex1.id() == "A000001");
+ CPPUNIT_ASSERT(ex2.id() == "A000002");
+ CPPUNIT_ASSERT(ex3.id() == "A000003");
+ CPPUNIT_ASSERT(ex4.id() == "A000004");
+ CPPUNIT_ASSERT(in.id() == "A000005");
+ CPPUNIT_ASSERT(ch.id() == "A000006");
+
+ MyMoneyAccount parent = m->expense();
+
+ m->addAccount(parent, ex1);
+ m->addAccount(ex1, ex2);
+ m->addAccount(parent, ex3);
+ m->addAccount(parent, ex4);
+
+ parent = m->income();
+ m->addAccount(parent, in);
+
+ parent = m->asset();
+ m->addAccount(parent, ch);
+
+ CPPUNIT_ASSERT(m->expense().accountCount() == 3);
+ CPPUNIT_ASSERT(m->account(ex1.id()).accountCount() == 1);
+ CPPUNIT_ASSERT(ex3.parentAccountId() == STD_ACC_EXPENSE);
+
+ m->reparentAccount(ex3, ex1);
+ CPPUNIT_ASSERT(m->expense().accountCount() == 2);
+ CPPUNIT_ASSERT(m->account(ex1.id()).accountCount() == 2);
+ CPPUNIT_ASSERT(ex3.parentAccountId() == ex1.id());
+ } catch (MyMoneyException *e) {
+ std::cout << std::endl << e->what() << std::endl;
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneySeqAccessMgrTest::testAddTransactions() {
+ testReparentAccount();
+
+ MyMoneyAccount ch;
+ MyMoneyTransaction t1, t2;
+ MyMoneySplit s;
+
+ try {
+ // I made some money, great
+ s.setAccountId("A000006"); // Checkings
+ s.setShares(100000);
+ s.setValue(100000);
+ CPPUNIT_ASSERT(s.id().isEmpty());
+ t1.addSplit(s);
+
+ s.setId(QString()); // enable re-usage of split variable
+ s.setAccountId("A000005"); // Salary
+ s.setShares(-100000);
+ s.setValue(-100000);
+ CPPUNIT_ASSERT(s.id().isEmpty());
+ t1.addSplit(s);
+
+ t1.setPostDate(QDate(2002,5,10));
+ } catch (MyMoneyException *e) {
+ unexpectedException(e);
+ }
+
+ m->m_dirty = false;
+ try {
+ m->addTransaction(t1);
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->dirty() == true);
+ CPPUNIT_ASSERT(t1.id() == "T000000000000000001");
+ CPPUNIT_ASSERT(t1.splitCount() == 2);
+ CPPUNIT_ASSERT(m->transactionCount() == 1);
+ } catch (MyMoneyException *e) {
+ unexpectedException(e);
+ }
+
+ try {
+ // I spent some money, not so great
+ s.setId(QString()); // enable re-usage of split variable
+ s.setAccountId("A000004"); // Grosseries
+ s.setShares(10000);
+ s.setValue(10000);
+ CPPUNIT_ASSERT(s.id().isEmpty());
+ t2.addSplit(s);
+
+ s.setId(QString()); // enable re-usage of split variable
+ s.setAccountId("A000002"); // 16% sales tax
+ s.setShares(1200);
+ s.setValue(1200);
+ CPPUNIT_ASSERT(s.id().isEmpty());
+ t2.addSplit(s);
+
+ s.setId(QString()); // enable re-usage of split variable
+ s.setAccountId("A000003"); // 7% sales tax
+ s.setShares(400);
+ s.setValue(400);
+ CPPUNIT_ASSERT(s.id().isEmpty());
+ t2.addSplit(s);
+
+ s.setId(QString()); // enable re-usage of split variable
+ s.setAccountId("A000006"); // Checkings account
+ s.setShares(-11600);
+ s.setValue(-11600);
+ CPPUNIT_ASSERT(s.id().isEmpty());
+ t2.addSplit(s);
+
+ t2.setPostDate(QDate(2002,5,9));
+ } catch (MyMoneyException *e) {
+ unexpectedException(e);
+ }
+ m->m_dirty = false;
+ try {
+ m->addTransaction(t2);
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->dirty() == true);
+ CPPUNIT_ASSERT(t2.id() == "T000000000000000002");
+ CPPUNIT_ASSERT(t2.splitCount() == 4);
+ CPPUNIT_ASSERT(m->transactionCount() == 2);
+
+ QMap<QString, QString>::ConstIterator it_k;
+ QMap<QString, MyMoneyTransaction>::ConstIterator it_t;
+ it_k = m->m_transactionKeys.begin();
+ it_t = m->m_transactionList.begin();
+
+ CPPUNIT_ASSERT((*it_k) == "2002-05-10-T000000000000000001");
+ CPPUNIT_ASSERT((*it_t).id() == "T000000000000000002");
+ ++it_k;
+ ++it_t;
+ CPPUNIT_ASSERT((*it_k) == "2002-05-09-T000000000000000002");
+ CPPUNIT_ASSERT((*it_t).id() == "T000000000000000001");
+ ++it_k;
+ ++it_t;
+ CPPUNIT_ASSERT(it_k == m->m_transactionKeys.end());
+ CPPUNIT_ASSERT(it_t == m->m_transactionList.end());
+
+ ch = m->account("A000006");
+
+ // check that the account's transaction list is updated
+ QValueList<MyMoneyTransaction> list;
+ MyMoneyTransactionFilter filter("A000006");
+ list = m->transactionList(filter);
+ CPPUNIT_ASSERT(list.size() == 2);
+
+ QValueList<MyMoneyTransaction>::ConstIterator it;
+ it = list.begin();
+ CPPUNIT_ASSERT((*it).id() == "T000000000000000002");
+ ++it;
+ CPPUNIT_ASSERT((*it).id() == "T000000000000000001");
+ ++it;
+ CPPUNIT_ASSERT(it == list.end());
+
+/* removed with MyMoneyAccount::Transaction
+ CPPUNIT_ASSERT(ch.transactionCount() == 2);
+
+ QValueList<MyMoneyAccount::Transaction>::ConstIterator it_l;
+ it_l = ch.transactionList().begin();
+ CPPUNIT_ASSERT((*it_l).transactionID() == "T000000000000000002");
+ CPPUNIT_ASSERT((*it_l).balance() == -11600);
+ ++it_l;
+
+ CPPUNIT_ASSERT((*it_l).transactionID() == "T000000000000000001");
+ CPPUNIT_ASSERT((*it_l).balance() == -11600+100000);
+
+ ++it_l;
+ CPPUNIT_ASSERT(it_l == ch.transactionList().end());
+*/
+
+ } catch (MyMoneyException *e) {
+ unexpectedException(e);
+ }
+}
+
+void MyMoneySeqAccessMgrTest::testTransactionCount() {
+ testAddTransactions();
+ CPPUNIT_ASSERT(m->transactionCount("A000001") == 0);
+ CPPUNIT_ASSERT(m->transactionCount("A000002") == 1);
+ CPPUNIT_ASSERT(m->transactionCount("A000003") == 1);
+ CPPUNIT_ASSERT(m->transactionCount("A000004") == 1);
+ CPPUNIT_ASSERT(m->transactionCount("A000005") == 1);
+ CPPUNIT_ASSERT(m->transactionCount("A000006") == 2);
+}
+
+void MyMoneySeqAccessMgrTest::testBalance() {
+ testAddTransactions();
+
+ CPPUNIT_ASSERT(m->balance("A000001").isZero());
+ CPPUNIT_ASSERT(m->balance("A000002") == MyMoneyMoney(1200));
+ CPPUNIT_ASSERT(m->balance("A000003") == MyMoneyMoney(400));
+ CPPUNIT_ASSERT(m->totalBalance("A000001") == MyMoneyMoney(1600));
+ CPPUNIT_ASSERT(m->balance("A000006", QDate(2002,5,9)) == MyMoneyMoney(-11600));
+ CPPUNIT_ASSERT(m->balance("A000005", QDate(2002,5,10)) == MyMoneyMoney(-100000));
+ CPPUNIT_ASSERT(m->balance("A000006", QDate(2002,5,10)) == MyMoneyMoney(88400));
+}
+
+void MyMoneySeqAccessMgrTest::testModifyTransaction() {
+ testAddTransactions();
+
+ MyMoneyTransaction t = m->transaction("T000000000000000002");
+ MyMoneySplit s;
+ MyMoneyAccount ch;
+
+ // just modify simple stuff (splits)
+ CPPUNIT_ASSERT(t.splitCount() == 4);
+
+ s = t.splits()[0];
+ s.setShares(11000);
+ s.setValue(11000);
+ t.modifySplit(s);
+
+ CPPUNIT_ASSERT(t.splitCount() == 4);
+ s = t.splits()[3];
+ s.setShares(-12600);
+ s.setValue(-12600);
+ t.modifySplit(s);
+
+ try {
+ CPPUNIT_ASSERT(m->balance("A000004") == MyMoneyMoney(10000));
+ CPPUNIT_ASSERT(m->balance("A000006") == MyMoneyMoney(100000-11600));
+ CPPUNIT_ASSERT(m->totalBalance("A000001") == MyMoneyMoney(1600));
+ m->modifyTransaction(t);
+ CPPUNIT_ASSERT(m->balance("A000004") == MyMoneyMoney(11000));
+ CPPUNIT_ASSERT(m->balance("A000006") == MyMoneyMoney(100000-12600));
+ CPPUNIT_ASSERT(m->totalBalance("A000001") == MyMoneyMoney(1600));
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ // now modify the date
+ t.setPostDate(QDate(2002,5,11));
+ try {
+ m->modifyTransaction(t);
+ CPPUNIT_ASSERT(m->balance("A000004") == MyMoneyMoney(11000));
+ CPPUNIT_ASSERT(m->balance("A000006") == MyMoneyMoney(100000-12600));
+ CPPUNIT_ASSERT(m->totalBalance("A000001") == MyMoneyMoney(1600));
+
+ QMap<QString, QString>::ConstIterator it_k;
+ QMap<QString, MyMoneyTransaction>::ConstIterator it_t;
+ it_k = m->m_transactionKeys.begin();
+ it_t = m->m_transactionList.begin();
+ CPPUNIT_ASSERT((*it_k) == "2002-05-10-T000000000000000001");
+ CPPUNIT_ASSERT((*it_t).id() == "T000000000000000001");
+ ++it_k;
+ ++it_t;
+ CPPUNIT_ASSERT((*it_k) == "2002-05-11-T000000000000000002");
+ CPPUNIT_ASSERT((*it_t).id() == "T000000000000000002");
+ ++it_k;
+ ++it_t;
+ CPPUNIT_ASSERT(it_k == m->m_transactionKeys.end());
+ CPPUNIT_ASSERT(it_t == m->m_transactionList.end());
+
+ ch = m->account("A000006");
+
+ // check that the account's transaction list is updated
+ QValueList<MyMoneyTransaction> list;
+ MyMoneyTransactionFilter filter("A000006");
+ list = m->transactionList(filter);
+ CPPUNIT_ASSERT(list.size() == 2);
+
+ QValueList<MyMoneyTransaction>::ConstIterator it;
+ it = list.begin();
+ CPPUNIT_ASSERT((*it).id() == "T000000000000000001");
+ ++it;
+ CPPUNIT_ASSERT((*it).id() == "T000000000000000002");
+ ++it;
+ CPPUNIT_ASSERT(it == list.end());
+
+/* removed with MyMoneyAccount::Transaction
+ // CPPUNIT_ASSERT(ch.transactionCount() == 2);
+
+ QValueList<MyMoneyAccount::Transaction>::ConstIterator it_l;
+ it_l = ch.transactionList().begin();
+ CPPUNIT_ASSERT((*it_l).transactionID() == "T000000000000000001");
+ CPPUNIT_ASSERT((*it_l).balance() == 100000);
+ ++it_l;
+
+ CPPUNIT_ASSERT((*it_l).transactionID() == "T000000000000000002");
+ CPPUNIT_ASSERT((*it_l).balance() == -12600+100000);
+
+ ++it_l;
+ CPPUNIT_ASSERT(it_l == ch.transactionList().end());
+*/
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+
+void MyMoneySeqAccessMgrTest::testRemoveUnusedAccount() {
+ testAccount2Institution();
+
+ MyMoneyAccount a = m->account("A000001");
+ MyMoneyInstitution i = m->institution("I000001");
+
+ m->m_dirty = false;
+ // make sure, we cannot remove the standard account groups
+ try {
+ m->removeAccount(m->liability());
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+
+ try {
+ m->removeAccount(m->asset());
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+
+ try {
+ m->removeAccount(m->expense());
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+
+ try {
+ m->removeAccount(m->income());
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+
+ // try to remove the account still attached to the institution
+ try {
+ m->removeAccount(a);
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+
+ // now really remove an account
+
+ try {
+ CPPUNIT_ASSERT(i.accountCount() == 0);
+ CPPUNIT_ASSERT(m->accountCount() == 7);
+
+ a.setInstitutionId(QString());
+ m->modifyAccount(a);
+ m->removeAccount(a);
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->accountCount() == 6);
+ CPPUNIT_ASSERT(m->dirty() == true);
+ i = m->institution("I000001");
+ CPPUNIT_ASSERT(i.accountCount() == 0);
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneySeqAccessMgrTest::testRemoveUsedAccount() {
+ testAddTransactions();
+
+ MyMoneyAccount a = m->account("A000006");
+
+ try {
+ m->removeAccount(a);
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+}
+
+void MyMoneySeqAccessMgrTest::testRemoveInstitution() {
+ testModifyInstitution();
+ testReparentAccount();
+
+ MyMoneyInstitution i;
+ MyMoneyAccount a;
+
+ // assign the checkings account to the institution
+ try {
+ i = m->institution("I000001");
+ a = m->account("A000006");
+ a.setInstitutionId(i.id());
+ m->modifyAccount(a);
+ CPPUNIT_ASSERT(i.accountCount() == 0);
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ m->m_dirty = false;
+ // now remove the institution and see if the account survived ;-)
+ try {
+ m->removeInstitution(i);
+ a.setInstitutionId(QString());
+ m->modifyAccount(a);
+ m->commitTransaction();
+ m->startTransaction();
+ a = m->account("A000006");
+ CPPUNIT_ASSERT(m->dirty() == true);
+ CPPUNIT_ASSERT(a.institutionId().isEmpty());
+ CPPUNIT_ASSERT(m->institutionCount() == 0);
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneySeqAccessMgrTest::testRemoveTransaction() {
+ testAddTransactions();
+
+ MyMoneyTransaction t = m->transaction("T000000000000000002");
+
+ m->m_dirty = false;
+ try {
+ m->removeTransaction(t);
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->dirty() == true);
+ CPPUNIT_ASSERT(m->transactionCount() == 1);
+/* removed with MyMoneyAccount::Transaction
+ CPPUNIT_ASSERT(m->account("A000006").transactionCount() == 1);
+*/
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneySeqAccessMgrTest::testTransactionList() {
+ testAddTransactions();
+
+ QValueList<MyMoneyTransaction> list;
+ MyMoneyTransactionFilter filter("A000006");
+ list = m->transactionList(filter);
+ CPPUNIT_ASSERT(list.count() == 2);
+ CPPUNIT_ASSERT((*(list.at(0))).id() == "T000000000000000002");
+ CPPUNIT_ASSERT((*(list.at(1))).id() == "T000000000000000001");
+
+ filter.clear();
+ filter.addAccount(QString("A000003"));
+ list = m->transactionList(filter);
+ CPPUNIT_ASSERT(list.count() == 1);
+ CPPUNIT_ASSERT((*(list.at(0))).id() == "T000000000000000002");
+
+ filter.clear();
+ list = m->transactionList(filter);
+ CPPUNIT_ASSERT(list.count() == 2);
+ CPPUNIT_ASSERT((*(list.at(0))).id() == "T000000000000000002");
+ CPPUNIT_ASSERT((*(list.at(1))).id() == "T000000000000000001");
+}
+
+void MyMoneySeqAccessMgrTest::testAddPayee() {
+ MyMoneyPayee p;
+
+ p.setName("THB");
+ m->m_dirty = false;
+ try {
+ CPPUNIT_ASSERT(m->m_nextPayeeID == 0);
+ m->addPayee(p);
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->dirty() == true);
+ CPPUNIT_ASSERT(m->m_nextPayeeID == 1);
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+}
+
+void MyMoneySeqAccessMgrTest::testSetAccountName() {
+ try {
+ m->setAccountName(STD_ACC_LIABILITY, "Verbindlichkeiten");
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+ try {
+ m->setAccountName(STD_ACC_ASSET, "Verm�gen");
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+ try {
+ m->setAccountName(STD_ACC_EXPENSE, "Ausgaben");
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+ try {
+ m->setAccountName(STD_ACC_INCOME, "Einnahmen");
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ CPPUNIT_ASSERT(m->liability().name() == "Verbindlichkeiten");
+ CPPUNIT_ASSERT(m->asset().name() == "Verm�gen");
+ CPPUNIT_ASSERT(m->expense().name() == "Ausgaben");
+ CPPUNIT_ASSERT(m->income().name() == "Einnahmen");
+
+ try {
+ m->setAccountName("A000001", "New account name");
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+}
+
+void MyMoneySeqAccessMgrTest::testModifyPayee() {
+ MyMoneyPayee p;
+
+ testAddPayee();
+
+ p = m->payee("P000001");
+ p.setName("New name");
+ m->m_dirty = false;
+ try {
+ m->modifyPayee(p);
+ m->commitTransaction();
+ m->startTransaction();
+ p = m->payee("P000001");
+ CPPUNIT_ASSERT(p.name() == "New name");
+ CPPUNIT_ASSERT(m->dirty() == true);
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneySeqAccessMgrTest::testRemovePayee() {
+ testAddPayee();
+ m->m_dirty = false;
+
+ // check that we can remove an unreferenced payee
+ MyMoneyPayee p = m->payee("P000001");
+ try {
+ CPPUNIT_ASSERT(m->m_payeeList.count() == 1);
+ m->removePayee(p);
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->m_payeeList.count() == 0);
+ CPPUNIT_ASSERT(m->dirty() == true);
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ // add transaction
+ testAddTransactions();
+
+ MyMoneyTransaction tr = m->transaction("T000000000000000001");
+ MyMoneySplit sp;
+ sp = tr.splits()[0];
+ sp.setPayeeId("P000001");
+ tr.modifySplit(sp);
+
+ // check that we cannot add a transaction referencing
+ // an unknown payee
+ try {
+ m->modifyTransaction(tr);
+ CPPUNIT_FAIL("Expected exception");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+
+ m->m_nextPayeeID = 0; // reset here, so that the
+ // testAddPayee will not fail
+ testAddPayee();
+
+ // check that it works when the payee exists
+ try {
+ m->modifyTransaction(tr);
+ } catch (MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ m->m_dirty = false;
+
+ // now check, that we cannot remove the payee
+ try {
+ m->removePayee(p);
+ CPPUNIT_FAIL("Expected exception");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+ CPPUNIT_ASSERT(m->m_payeeList.count() == 1);
+}
+
+
+void MyMoneySeqAccessMgrTest::testRemoveAccountFromTree() {
+ MyMoneyAccount a, b, c;
+ a.setName("Acc A");
+ b.setName("Acc B");
+ c.setName("Acc C");
+
+ // build a tree A -> B -> C, remove B and see if A -> C
+ // remains in the storag manager
+
+ try {
+ m->addAccount(a);
+ m->addAccount(b);
+ m->addAccount(c);
+ m->reparentAccount(b, a);
+ m->reparentAccount(c, b);
+
+ CPPUNIT_ASSERT(a.accountList().count() == 1);
+ CPPUNIT_ASSERT(m->account(a.accountList()[0]).name() == "Acc B");
+
+ CPPUNIT_ASSERT(b.accountList().count() == 1);
+ CPPUNIT_ASSERT(m->account(b.accountList()[0]).name() == "Acc C");
+
+ CPPUNIT_ASSERT(c.accountList().count() == 0);
+
+ m->removeAccount(b);
+
+ // reload account info from titutionIDtorage
+ a = m->account(a.id());
+ c = m->account(c.id());
+
+ try {
+ b = m->account(b.id());
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+ CPPUNIT_ASSERT(a.accountList().count() == 1);
+ CPPUNIT_ASSERT(m->account(a.accountList()[0]).name() == "Acc C");
+
+ CPPUNIT_ASSERT(c.accountList().count() == 0);
+
+ } catch (MyMoneyException *e) {
+ unexpectedException(e);
+ }
+}
+
+void MyMoneySeqAccessMgrTest::testPayeeName() {
+ testAddPayee();
+
+ MyMoneyPayee p;
+ QString name("THB");
+
+ // OK case
+ try {
+ p = m->payeeByName(name);
+ CPPUNIT_ASSERT(p.name() == "THB");
+ CPPUNIT_ASSERT(p.id() == "P000001");
+ } catch (MyMoneyException *e) {
+ unexpectedException(e);
+ }
+
+ // Not OK case
+ name = "Thb";
+ try {
+ p = m->payeeByName(name);
+ CPPUNIT_FAIL("Exception expected");
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+}
+
+void MyMoneySeqAccessMgrTest::testAssignment() {
+ testAddTransactions();
+
+ MyMoneyPayee user;
+ user.setName("Thomas");
+ m->setUser(user);
+
+ MyMoneySeqAccessMgr test = *m;
+ testEquality(&test);
+}
+
+void MyMoneySeqAccessMgrTest::testEquality(const MyMoneySeqAccessMgr *t)
+{
+ CPPUNIT_ASSERT(m->user().name() == t->user().name());
+ CPPUNIT_ASSERT(m->user().address() == t->user().address());
+ CPPUNIT_ASSERT(m->user().city() == t->user().city());
+ CPPUNIT_ASSERT(m->user().state() == t->user().state());
+ CPPUNIT_ASSERT(m->user().postcode() == t->user().postcode());
+ CPPUNIT_ASSERT(m->user().telephone() == t->user().telephone());
+ CPPUNIT_ASSERT(m->user().email() == t->user().email());
+ CPPUNIT_ASSERT(m->m_nextInstitutionID == t->m_nextInstitutionID);
+ CPPUNIT_ASSERT(m->m_nextAccountID == t->m_nextAccountID);
+ CPPUNIT_ASSERT(m->m_nextTransactionID == t->m_nextTransactionID);
+ CPPUNIT_ASSERT(m->m_nextPayeeID == t->m_nextPayeeID);
+ CPPUNIT_ASSERT(m->m_nextScheduleID == t->m_nextScheduleID);
+ CPPUNIT_ASSERT(m->m_dirty == t->m_dirty);
+ CPPUNIT_ASSERT(m->m_creationDate == t->m_creationDate);
+ CPPUNIT_ASSERT(m->m_lastModificationDate == t->m_lastModificationDate);
+
+ /*
+ * make sure, that the keys and values are the same
+ * on the left and the right side
+ */
+ CPPUNIT_ASSERT(m->m_payeeList.keys() == t->m_payeeList.keys());
+ CPPUNIT_ASSERT(m->m_payeeList.values() == t->m_payeeList.values());
+ CPPUNIT_ASSERT(m->m_transactionKeys.keys() == t->m_transactionKeys.keys());
+ CPPUNIT_ASSERT(m->m_transactionKeys.values() == t->m_transactionKeys.values());
+ CPPUNIT_ASSERT(m->m_institutionList.keys() == t->m_institutionList.keys());
+ CPPUNIT_ASSERT(m->m_institutionList.values() == t->m_institutionList.values());
+ CPPUNIT_ASSERT(m->m_accountList.keys() == t->m_accountList.keys());
+ CPPUNIT_ASSERT(m->m_accountList.values() == t->m_accountList.values());
+ CPPUNIT_ASSERT(m->m_transactionList.keys() == t->m_transactionList.keys());
+ CPPUNIT_ASSERT(m->m_transactionList.values() == t->m_transactionList.values());
+ CPPUNIT_ASSERT(m->m_balanceCache.keys() == t->m_balanceCache.keys());
+ CPPUNIT_ASSERT(m->m_balanceCache.values() == t->m_balanceCache.values());
+
+// CPPUNIT_ASSERT(m->m_scheduleList.keys() == t->m_scheduleList.keys());
+// CPPUNIT_ASSERT(m->m_scheduleList.values() == t->m_scheduleList.values());
+}
+
+void MyMoneySeqAccessMgrTest::testDuplicate() {
+ const MyMoneySeqAccessMgr* t;
+
+ testModifyTransaction();
+
+ t = m->duplicate();
+ testEquality(t);
+ delete t;
+}
+
+void MyMoneySeqAccessMgrTest::testAddSchedule() {
+ /* Note addSchedule() now calls validate as it should
+ * so we need an account id. Later this will
+ * be checked to make sure its a valid account id. The
+ * tests currently fail because no splits are defined
+ * for the schedules transaction.
+ */
+
+
+ try {
+ CPPUNIT_ASSERT(m->m_scheduleList.count() == 0);
+ MyMoneyTransaction t1;
+ MyMoneySplit s1, s2;
+ s1.setAccountId("A000001");
+ t1.addSplit(s1);
+ s2.setAccountId("A000002");
+ t1.addSplit(s2);
+ MyMoneySchedule schedule("Sched-Name",
+ MyMoneySchedule::TYPE_DEPOSIT,
+ MyMoneySchedule::OCCUR_DAILY, 1,
+ MyMoneySchedule::STYPE_MANUALDEPOSIT,
+ QDate(),
+ QDate(),
+ true,
+ false);
+ t1.setPostDate(QDate(2003,7,10));
+ schedule.setTransaction(t1);
+
+ m->addSchedule(schedule);
+
+ CPPUNIT_ASSERT(m->m_scheduleList.count() == 1);
+ CPPUNIT_ASSERT(schedule.id() == "SCH000001");
+ CPPUNIT_ASSERT(m->m_scheduleList["SCH000001"].id() == "SCH000001");
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ try {
+ MyMoneySchedule schedule("Sched-Name",
+ MyMoneySchedule::TYPE_DEPOSIT,
+ MyMoneySchedule::OCCUR_DAILY, 1,
+ MyMoneySchedule::STYPE_MANUALDEPOSIT,
+ QDate(),
+ QDate(),
+ true,
+ false);
+ m->addSchedule(schedule);
+ CPPUNIT_FAIL("Exception expected");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+}
+
+void MyMoneySeqAccessMgrTest::testSchedule() {
+ testAddSchedule();
+ MyMoneySchedule sched;
+
+ sched = m->schedule("SCH000001");
+ CPPUNIT_ASSERT(sched.name() == "Sched-Name");
+ CPPUNIT_ASSERT(sched.id() == "SCH000001");
+
+ try {
+ m->schedule("SCH000002");
+ CPPUNIT_FAIL("Exception expected");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+}
+
+void MyMoneySeqAccessMgrTest::testModifySchedule() {
+ testAddSchedule();
+ MyMoneySchedule sched;
+
+ sched = m->schedule("SCH000001");
+ sched.setId("SCH000002");
+ try {
+ m->modifySchedule(sched);
+ CPPUNIT_FAIL("Exception expected");
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+
+ sched = m->schedule("SCH000001");
+ sched.setName("New Sched-Name");
+ try {
+ m->modifySchedule(sched);
+ CPPUNIT_ASSERT(m->m_scheduleList.count() == 1);
+ CPPUNIT_ASSERT(m->m_scheduleList["SCH000001"].name() == "New Sched-Name");
+
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+}
+
+void MyMoneySeqAccessMgrTest::testRemoveSchedule() {
+ testAddSchedule();
+ m->commitTransaction();
+ m->startTransaction();
+ MyMoneySchedule sched;
+
+ sched = m->schedule("SCH000001");
+ sched.setId("SCH000002");
+ try {
+ m->removeSchedule(sched);
+ m->commitTransaction();
+ CPPUNIT_FAIL("Exception expected");
+ } catch(MyMoneyException *e) {
+ m->rollbackTransaction();
+ delete e;
+ }
+ m->startTransaction();
+
+ sched = m->schedule("SCH000001");
+ try {
+ m->removeSchedule(sched);
+ m->commitTransaction();
+ CPPUNIT_ASSERT(m->m_scheduleList.count() == 0);
+
+ } catch(MyMoneyException *e) {
+ m->rollbackTransaction();
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+ m->startTransaction();
+}
+
+void MyMoneySeqAccessMgrTest::testScheduleList() {
+ QDate testDate = QDate::currentDate();
+ QDate notOverdue = testDate.addDays(2);
+ QDate overdue = testDate.addDays(-2);
+
+
+ MyMoneyTransaction t1;
+ MyMoneySplit s1, s2;
+ s1.setAccountId("A000001");
+ t1.addSplit(s1);
+ s2.setAccountId("A000002");
+ t1.addSplit(s2);
+ MyMoneySchedule schedule1("Schedule 1",
+ MyMoneySchedule::TYPE_BILL,
+ MyMoneySchedule::OCCUR_ONCE, 1,
+ MyMoneySchedule::STYPE_DIRECTDEBIT,
+ QDate(),
+ QDate(),
+ false,
+ false);
+ t1.setPostDate(notOverdue);
+ schedule1.setTransaction(t1);
+ schedule1.setLastPayment(notOverdue);
+
+ MyMoneyTransaction t2;
+ MyMoneySplit s3, s4;
+ s3.setAccountId("A000001");
+ t2.addSplit(s3);
+ s4.setAccountId("A000003");
+ t2.addSplit(s4);
+ MyMoneySchedule schedule2("Schedule 2",
+ MyMoneySchedule::TYPE_DEPOSIT,
+ MyMoneySchedule::OCCUR_DAILY, 1,
+ MyMoneySchedule::STYPE_DIRECTDEPOSIT,
+ QDate(),
+ QDate(),
+ false,
+ false);
+ t2.setPostDate(notOverdue.addDays(1));
+ schedule2.setTransaction(t2);
+ schedule2.setLastPayment(notOverdue.addDays(1));
+
+ MyMoneyTransaction t3;
+ MyMoneySplit s5, s6;
+ s5.setAccountId("A000005");
+ t3.addSplit(s5);
+ s6.setAccountId("A000006");
+ t3.addSplit(s6);
+ MyMoneySchedule schedule3("Schedule 3",
+ MyMoneySchedule::TYPE_TRANSFER,
+ MyMoneySchedule::OCCUR_WEEKLY, 1,
+ MyMoneySchedule::STYPE_OTHER,
+ QDate(),
+ QDate(),
+ false,
+ false);
+ t3.setPostDate(notOverdue.addDays(2));
+ schedule3.setTransaction(t3);
+ schedule3.setLastPayment(notOverdue.addDays(2));
+
+ MyMoneyTransaction t4;
+ MyMoneySplit s7, s8;
+ s7.setAccountId("A000005");
+ t4.addSplit(s7);
+ s8.setAccountId("A000006");
+ t4.addSplit(s8);
+ MyMoneySchedule schedule4("Schedule 4",
+ MyMoneySchedule::TYPE_BILL,
+ MyMoneySchedule::OCCUR_WEEKLY, 1,
+ MyMoneySchedule::STYPE_WRITECHEQUE,
+ QDate(),
+ notOverdue.addDays(31),
+ false,
+ false);
+ t4.setPostDate(overdue.addDays(-7));
+ schedule4.setTransaction(t4);
+
+ try {
+ m->addSchedule(schedule1);
+ m->addSchedule(schedule2);
+ m->addSchedule(schedule3);
+ m->addSchedule(schedule4);
+ } catch(MyMoneyException *e) {
+ qDebug("Error: %s", e->what().latin1());
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ QValueList<MyMoneySchedule> list;
+
+ // no filter
+ list = m->scheduleList();
+ CPPUNIT_ASSERT(list.count() == 4);
+
+ // filter by type
+ list = m->scheduleList("", MyMoneySchedule::TYPE_BILL);
+ CPPUNIT_ASSERT(list.count() == 2);
+ CPPUNIT_ASSERT(list[0].name() == "Schedule 1");
+ CPPUNIT_ASSERT(list[1].name() == "Schedule 4");
+
+ // filter by occurence
+ list = m->scheduleList("", MyMoneySchedule::TYPE_ANY,
+ MyMoneySchedule::OCCUR_DAILY);
+ CPPUNIT_ASSERT(list.count() == 1);
+ CPPUNIT_ASSERT(list[0].name() == "Schedule 2");
+
+ // filter by payment type
+ list = m->scheduleList("", MyMoneySchedule::TYPE_ANY,
+ MyMoneySchedule::OCCUR_ANY,
+ MyMoneySchedule::STYPE_DIRECTDEPOSIT);
+ CPPUNIT_ASSERT(list.count() == 1);
+ CPPUNIT_ASSERT(list[0].name() == "Schedule 2");
+
+ // filter by account
+ list = m->scheduleList("A01");
+ CPPUNIT_ASSERT(list.count() == 0);
+ list = m->scheduleList("A000001");
+ CPPUNIT_ASSERT(list.count() == 2);
+ list = m->scheduleList("A000002");
+ CPPUNIT_ASSERT(list.count() == 1);
+
+ // filter by start date
+ list = m->scheduleList("", MyMoneySchedule::TYPE_ANY,
+ MyMoneySchedule::OCCUR_ANY,
+ MyMoneySchedule::STYPE_ANY,
+ notOverdue.addDays(31));
+ CPPUNIT_ASSERT(list.count() == 3);
+ CPPUNIT_ASSERT(list[0].name() == "Schedule 2");
+ CPPUNIT_ASSERT(list[1].name() == "Schedule 3");
+ CPPUNIT_ASSERT(list[2].name() == "Schedule 4");
+
+ // filter by end date
+ list = m->scheduleList("", MyMoneySchedule::TYPE_ANY,
+ MyMoneySchedule::OCCUR_ANY,
+ MyMoneySchedule::STYPE_ANY,
+ QDate(),
+ notOverdue.addDays(1));
+ CPPUNIT_ASSERT(list.count() == 3);
+ CPPUNIT_ASSERT(list[0].name() == "Schedule 1");
+ CPPUNIT_ASSERT(list[1].name() == "Schedule 2");
+ CPPUNIT_ASSERT(list[2].name() == "Schedule 4");
+
+ // filter by start and end date
+ list = m->scheduleList("", MyMoneySchedule::TYPE_ANY,
+ MyMoneySchedule::OCCUR_ANY,
+ MyMoneySchedule::STYPE_ANY,
+ notOverdue.addDays(-1),
+ notOverdue.addDays(1));
+ CPPUNIT_ASSERT(list.count() == 2);
+ CPPUNIT_ASSERT(list[0].name() == "Schedule 1");
+ CPPUNIT_ASSERT(list[1].name() == "Schedule 2");
+
+ // filter by overdue status
+ list = m->scheduleList("", MyMoneySchedule::TYPE_ANY,
+ MyMoneySchedule::OCCUR_ANY,
+ MyMoneySchedule::STYPE_ANY,
+ QDate(),
+ QDate(),
+ true);
+ CPPUNIT_ASSERT(list.count() == 1);
+ CPPUNIT_ASSERT(list[0].name() == "Schedule 4");
+}
+
+void MyMoneySeqAccessMgrTest::testAddCurrency()
+{
+ MyMoneySecurity curr("EUR", "Euro", "?", 100, 100);
+ CPPUNIT_ASSERT(m->m_currencyList.count() == 0);
+ m->m_dirty = false;
+ try {
+ m->addCurrency(curr);
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->m_currencyList.count() == 1);
+ CPPUNIT_ASSERT(m->m_currencyList["EUR"].name() == "Euro");
+ CPPUNIT_ASSERT(m->dirty() == true);
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ m->m_dirty = false;
+ try {
+ m->addCurrency(curr);
+ CPPUNIT_FAIL("Expected exception missing");
+ } catch(MyMoneyException *e) {
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->dirty() == false);
+ delete e;
+ }
+}
+
+void MyMoneySeqAccessMgrTest::testModifyCurrency()
+{
+ MyMoneySecurity curr("EUR", "Euro", "?", 100, 100);
+ testAddCurrency();
+ m->m_dirty = false;
+ curr.setName("EURO");
+ try {
+ m->modifyCurrency(curr);
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->m_currencyList.count() == 1);
+ CPPUNIT_ASSERT(m->m_currencyList["EUR"].name() == "EURO");
+ CPPUNIT_ASSERT(m->dirty() == true);
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ m->m_dirty = false;
+
+ MyMoneySecurity unknownCurr("DEM", "Deutsche Mark", "DM", 100, 100);
+ try {
+ m->modifyCurrency(unknownCurr);
+ CPPUNIT_FAIL("Expected exception missing");
+ } catch(MyMoneyException *e) {
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->dirty() == false);
+ delete e;
+ }
+}
+
+void MyMoneySeqAccessMgrTest::testRemoveCurrency()
+{
+ MyMoneySecurity curr("EUR", "Euro", "?", 100, 100);
+ testAddCurrency();
+ m->m_dirty = false;
+ try {
+ m->removeCurrency(curr);
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->m_currencyList.count() == 0);
+ CPPUNIT_ASSERT(m->dirty() == true);
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ m->m_dirty = false;
+
+ MyMoneySecurity unknownCurr("DEM", "Deutsche Mark", "DM", 100, 100);
+ try {
+ m->removeCurrency(unknownCurr);
+ CPPUNIT_FAIL("Expected exception missing");
+ } catch(MyMoneyException *e) {
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->dirty() == false);
+ delete e;
+ }
+}
+
+void MyMoneySeqAccessMgrTest::testCurrency()
+{
+ MyMoneySecurity curr("EUR", "Euro", "?", 100, 100);
+ MyMoneySecurity newCurr;
+ testAddCurrency();
+ m->m_dirty = false;
+ try {
+ newCurr = m->currency("EUR");
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->dirty() == false);
+ CPPUNIT_ASSERT(newCurr.id() == curr.id());
+ CPPUNIT_ASSERT(newCurr.name() == curr.name());
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+
+ try {
+ m->currency("DEM");
+ CPPUNIT_FAIL("Expected exception missing");
+ } catch(MyMoneyException *e) {
+ m->commitTransaction();
+ m->startTransaction();
+ CPPUNIT_ASSERT(m->dirty() == false);
+ delete e;
+ }
+}
+
+void MyMoneySeqAccessMgrTest::testCurrencyList()
+{
+ CPPUNIT_ASSERT(m->currencyList().count() == 0);
+
+ testAddCurrency();
+ CPPUNIT_ASSERT(m->currencyList().count() == 1);
+
+ MyMoneySecurity unknownCurr("DEM", "Deutsche Mark", "DM", 100, 100);
+ try {
+ m->addCurrency(unknownCurr);
+ m->m_dirty = false;
+ CPPUNIT_ASSERT(m->m_currencyList.count() == 2);
+ CPPUNIT_ASSERT(m->currencyList().count() == 2);
+ CPPUNIT_ASSERT(m->dirty() == false);
+ } catch(MyMoneyException *e) {
+ delete e;
+ CPPUNIT_FAIL("Unexpected exception");
+ }
+}
+
+void MyMoneySeqAccessMgrTest::testAccountList()
+{
+ QValueList<MyMoneyAccount> accounts;
+ m->accountList(accounts);
+ CPPUNIT_ASSERT(accounts.count() == 0);
+ testAddNewAccount();
+ accounts.clear();
+ m->accountList(accounts);
+ CPPUNIT_ASSERT(accounts.count() == 2);
+
+ MyMoneyAccount a = m->account("A000001");
+ MyMoneyAccount b = m->account("A000002");
+ m->reparentAccount(b, a);
+ accounts.clear();
+ m->accountList(accounts);
+ CPPUNIT_ASSERT(accounts.count() == 2);
+}
+
+void MyMoneySeqAccessMgrTest::testLoaderFunctions()
+{
+ // we don't need the transaction started by setup() here
+ m->rollbackTransaction();
+
+ // account loader
+ QMap<QString, MyMoneyAccount> amap;
+ MyMoneyAccount acc("A0000176", MyMoneyAccount());
+ amap[acc.id()] = acc;
+ m->loadAccounts(amap);
+ CPPUNIT_ASSERT(m->m_accountList.values() == amap.values());
+ CPPUNIT_ASSERT(m->m_accountList.keys() == amap.keys());
+ CPPUNIT_ASSERT(m->m_nextAccountID == 176);
+
+ // transaction loader
+ QMap<QString, MyMoneyTransaction> tmap;
+ MyMoneyTransaction t("T000000108", MyMoneyTransaction());
+ tmap[t.id()] = t;
+ m->loadTransactions(tmap);
+ CPPUNIT_ASSERT(m->m_transactionList.values() == tmap.values());
+ CPPUNIT_ASSERT(m->m_transactionList.keys() == tmap.keys());
+ CPPUNIT_ASSERT(m->m_nextTransactionID == 108);
+
+ // institution loader
+ QMap<QString, MyMoneyInstitution> imap;
+ MyMoneyInstitution inst("I000028", MyMoneyInstitution());
+ imap[inst.id()] = inst;
+ m->loadInstitutions(imap);
+ CPPUNIT_ASSERT(m->m_institutionList.values() == imap.values());
+ CPPUNIT_ASSERT(m->m_institutionList.keys() == imap.keys());
+ CPPUNIT_ASSERT(m->m_nextInstitutionID == 28);
+
+ // payee loader
+ QMap<QString, MyMoneyPayee> pmap;
+ MyMoneyPayee p("P1234", MyMoneyPayee());
+ pmap[p.id()] = p;
+ m->loadPayees(pmap);
+ CPPUNIT_ASSERT(m->m_payeeList.values() == pmap.values());
+ CPPUNIT_ASSERT(m->m_payeeList.keys() == pmap.keys());
+ CPPUNIT_ASSERT(m->m_nextPayeeID == 1234);
+
+ // security loader
+ QMap<QString, MyMoneySecurity> smap;
+ MyMoneySecurity s("S54321", MyMoneySecurity());
+ smap[s.id()] = s;
+ m->loadSecurities(smap);
+ CPPUNIT_ASSERT(m->m_securitiesList.values() == smap.values());
+ CPPUNIT_ASSERT(m->m_securitiesList.keys() == smap.keys());
+ CPPUNIT_ASSERT(m->m_nextSecurityID == 54321);
+
+ // schedule loader
+ QMap<QString, MyMoneySchedule> schmap;
+ MyMoneySchedule sch("SCH6789", MyMoneySchedule());
+ schmap[sch.id()] = sch;
+ m->loadSchedules(schmap);
+ CPPUNIT_ASSERT(m->m_scheduleList.values() == schmap.values());
+ CPPUNIT_ASSERT(m->m_scheduleList.keys() == schmap.keys());
+ CPPUNIT_ASSERT(m->m_nextScheduleID == 6789);
+
+ // report loader
+ QMap<QString, MyMoneyReport> rmap;
+ MyMoneyReport r("R1298", MyMoneyReport());
+ rmap[r.id()] = r;
+ m->loadReports(rmap);
+ CPPUNIT_ASSERT(m->m_reportList.values() == rmap.values());
+ CPPUNIT_ASSERT(m->m_reportList.keys() == rmap.keys());
+ CPPUNIT_ASSERT(m->m_nextReportID == 1298);
+
+ // budget loader
+ QMap<QString, MyMoneyBudget> bmap;
+ MyMoneyBudget b("B89765", MyMoneyBudget());
+ bmap[b.id()] = b;
+ m->loadBudgets(bmap);
+ CPPUNIT_ASSERT(m->m_budgetList.values() == bmap.values());
+ CPPUNIT_ASSERT(m->m_budgetList.keys() == bmap.keys());
+ CPPUNIT_ASSERT(m->m_nextBudgetID == 89765);
+
+ // restart a transaction so that teardown() is happy
+ m->startTransaction();
+}
+
diff --git a/kmymoney2/mymoney/storage/mymoneyseqaccessmgrtest.h b/kmymoney2/mymoney/storage/mymoneyseqaccessmgrtest.h
new file mode 100644
index 0000000..b9fa763
--- /dev/null
+++ b/kmymoney2/mymoney/storage/mymoneyseqaccessmgrtest.h
@@ -0,0 +1,131 @@
+/***************************************************************************
+ mymoneyseqaccessmgrtest.h
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef __MYMONEYSEQACCESSMGRTEST_H__
+#define __MYMONEYSEQACCESSMGRTEST_H__
+
+#include <cppunit/TestCaller.h>
+#include <cppunit/TestCase.h>
+#include <cppunit/TestSuite.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include "../autotest.h"
+
+#define private public
+#define protected public
+#include "../mymoneyobject.h"
+#include "mymoneyseqaccessmgr.h"
+#undef private
+
+class MyMoneySeqAccessMgrTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(MyMoneySeqAccessMgrTest);
+ CPPUNIT_TEST(testEmptyConstructor);
+ CPPUNIT_TEST(testSetFunctions);
+ CPPUNIT_TEST(testSupportFunctions);
+ CPPUNIT_TEST(testIsStandardAccount);
+ CPPUNIT_TEST(testNewAccount);
+ CPPUNIT_TEST(testAddNewAccount);
+ CPPUNIT_TEST(testReparentAccount);
+ CPPUNIT_TEST(testAddInstitution);
+ CPPUNIT_TEST(testInstitution);
+ CPPUNIT_TEST(testAccount2Institution);
+ CPPUNIT_TEST(testModifyAccount);
+ CPPUNIT_TEST(testModifyInstitution);
+ CPPUNIT_TEST(testAddTransactions);
+ CPPUNIT_TEST(testTransactionCount);
+ CPPUNIT_TEST(testBalance);
+ CPPUNIT_TEST(testModifyTransaction);
+ CPPUNIT_TEST(testRemoveUnusedAccount);
+ CPPUNIT_TEST(testRemoveUsedAccount);
+ CPPUNIT_TEST(testRemoveInstitution);
+ CPPUNIT_TEST(testRemoveTransaction);
+ CPPUNIT_TEST(testTransactionList);
+ CPPUNIT_TEST(testAddPayee);
+ CPPUNIT_TEST(testSetAccountName);
+ CPPUNIT_TEST(testModifyPayee);
+ CPPUNIT_TEST(testPayeeName);
+ CPPUNIT_TEST(testRemovePayee);
+ CPPUNIT_TEST(testRemoveAccountFromTree);
+ CPPUNIT_TEST(testAssignment);
+ CPPUNIT_TEST(testDuplicate);
+ CPPUNIT_TEST(testAddSchedule);
+ CPPUNIT_TEST(testModifySchedule);
+ CPPUNIT_TEST(testRemoveSchedule);
+ CPPUNIT_TEST(testSchedule);
+ CPPUNIT_TEST(testScheduleList);
+ CPPUNIT_TEST(testAddCurrency);
+ CPPUNIT_TEST(testModifyCurrency);
+ CPPUNIT_TEST(testRemoveCurrency);
+ CPPUNIT_TEST(testCurrency);
+ CPPUNIT_TEST(testCurrencyList);
+ CPPUNIT_TEST(testAccountList);
+ CPPUNIT_TEST(testLoaderFunctions);
+ CPPUNIT_TEST_SUITE_END();
+
+protected:
+ MyMoneySeqAccessMgr *m;
+public:
+ MyMoneySeqAccessMgrTest();
+
+
+ void setUp();
+ void tearDown();
+ void testEmptyConstructor();
+ void testSetFunctions();
+ void testIsStandardAccount();
+ void testNewAccount();
+ void testAccount();
+ void testAddNewAccount();
+ void testAddInstitution();
+ void testInstitution();
+ void testAccount2Institution();
+ void testModifyAccount();
+ void testModifyInstitution();
+ void testReparentAccount();
+ void testAddTransactions();
+ void testTransactionCount();
+ void testBalance();
+ void testModifyTransaction();
+ void testRemoveUnusedAccount();
+ void testRemoveUsedAccount();
+ void testRemoveInstitution();
+ void testRemoveTransaction();
+ void testTransactionList();
+ void testAddPayee();
+ void testSetAccountName();
+ void testModifyPayee();
+ void testPayeeName();
+ void testRemovePayee();
+ void testRemoveAccountFromTree();
+ void testAssignment();
+ void testEquality(const MyMoneySeqAccessMgr* t);
+ void testDuplicate();
+ void testAddSchedule();
+ void testSchedule();
+ void testModifySchedule();
+ void testRemoveSchedule();
+ void testSupportFunctions();
+ void testScheduleList();
+ void testAddCurrency();
+ void testModifyCurrency();
+ void testRemoveCurrency();
+ void testCurrency();
+ void testCurrencyList();
+ void testAccountList();
+ void testLoaderFunctions();
+};
+
+#endif
diff --git a/kmymoney2/mymoney/storage/mymoneystorageanon.cpp b/kmymoney2/mymoney/storage/mymoneystorageanon.cpp
new file mode 100644
index 0000000..31f051e
--- /dev/null
+++ b/kmymoney2/mymoney/storage/mymoneystorageanon.cpp
@@ -0,0 +1,294 @@
+/***************************************************************************
+ mymoneystorageanon.cpp
+ -------------------
+ begin : Thu Oct 24 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ Ace Jones <acejones@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "config.h"
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qfile.h>
+#include <qdom.h>
+#include <qmap.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include "kdecompat.h"
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoneystorageanon.h"
+#include "../mymoneyreport.h"
+#include "../mymoneyinstitution.h"
+
+QStringList MyMoneyStorageANON::zKvpNoModify = QStringList::split(",","kmm-baseCurrency,PreferredAccount,Tax,fixed-interest,interest-calculation,payee,schedule,term,kmm-online-source,kmm-brokerage-account,lastStatementDate,kmm-sort-reconcile,kmm-sort-std,kmm-iconpos,mm-closed,payee,schedule,term,lastImportedTransactionDate,VatAccount,VatRate,kmm-matched-tx,Imported");
+QStringList MyMoneyStorageANON::zKvpXNumber = QStringList::split(",","final-payment,loan-amount,periodic-payment,lastStatementBalance");
+
+
+MyMoneyStorageANON::MyMoneyStorageANON() :
+ MyMoneyStorageXML()
+{
+ // Choose a quasi-random 0.0-100.0 factor which will be applied to all splits this time
+ // around.
+
+ int msec;
+ do {
+ msec = QTime::currentTime().msec();
+ } while(msec == 0);
+ m_factor = MyMoneyMoney(msec, 10).reduce();
+}
+
+MyMoneyStorageANON::~MyMoneyStorageANON()
+{
+}
+
+void MyMoneyStorageANON::readFile(QIODevice* , IMyMoneySerialize* )
+{
+ throw new MYMONEYEXCEPTION("Cannot read a file through MyMoneyStorageANON!!");
+}
+
+void MyMoneyStorageANON::writeUserInformation(QDomElement& userInfo)
+{
+ MyMoneyPayee user = m_storage->user();
+
+ userInfo.setAttribute(QString("name"), hideString(user.name()));
+ userInfo.setAttribute(QString("email"), hideString(user.email()));
+
+ QDomElement address = m_doc->createElement("ADDRESS");
+ address.setAttribute(QString("street"), hideString(user.address()));
+ address.setAttribute(QString("city"), hideString(user.city()));
+ address.setAttribute(QString("county"), hideString(user.state()));
+ address.setAttribute(QString("zipcode"), hideString(user.postcode()));
+ address.setAttribute(QString("telephone"), hideString(user.telephone()));
+
+ userInfo.appendChild(address);
+}
+
+void MyMoneyStorageANON::writeInstitution(QDomElement& institution, const MyMoneyInstitution& _i)
+{
+ MyMoneyInstitution i(_i);
+
+ // mangle fields
+ i.setName(i.id());
+ i.setManager(hideString(i.manager()));
+ i.setSortcode(hideString(i.sortcode()));
+
+ i.setStreet(hideString(i.street()));
+ i.setCity(hideString(i.city()));
+ i.setPostcode(hideString(i.postcode()));
+ i.setTelephone(hideString(i.telephone()));
+
+ MyMoneyStorageXML::writeInstitution(institution, i);
+}
+
+
+void MyMoneyStorageANON::writePayee(QDomElement& payee, const MyMoneyPayee& _p)
+{
+ MyMoneyPayee p(_p);
+
+ p.setName(p.id());
+ p.setReference(hideString(p.reference()));
+
+ p.setAddress(hideString(p.address()));
+ p.setCity(hideString(p.city()));
+ p.setPostcode(hideString(p.postcode()));
+ p.setState(hideString(p.state()));
+ p.setTelephone(hideString(p.telephone()));
+ p.setNotes(hideString(p.notes()));
+ bool ignoreCase;
+ QStringList keys;
+ MyMoneyPayee::payeeMatchType matchType = p.matchData(ignoreCase, keys);
+ QRegExp exp("[A-Za-z]");
+ p.setMatchData(matchType, ignoreCase, QStringList::split(";", keys.join(";").replace(exp, "x")));
+
+ MyMoneyStorageXML::writePayee(payee, p);
+}
+
+void MyMoneyStorageANON::writeAccount(QDomElement& account, const MyMoneyAccount& _p)
+{
+ MyMoneyAccount p(_p);
+
+ p.setNumber(hideString(p.number()));
+ p.setName(p.id());
+ p.setDescription(hideString(p.description()));
+ fakeKeyValuePair(p);
+
+ // Remove the online banking settings entirely.
+ p.setOnlineBankingSettings(MyMoneyKeyValueContainer());
+
+ MyMoneyStorageXML::writeAccount(account, p);
+}
+
+void MyMoneyStorageANON::fakeTransaction(MyMoneyTransaction& tx)
+{
+ MyMoneyTransaction tn = tx;
+
+ // hide transaction data
+ tn.setMemo(tx.id());
+ tn.setBankID(hideString(tx.bankID()));
+
+ // hide split data
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ for(it_s = tx.splits().begin(); it_s != tx.splits().end(); ++it_s) {
+ MyMoneySplit s = (*it_s);
+ s.setMemo(QString("%1/%2").arg(tn.id()).arg(s.id()));
+
+ if(s.value() != MyMoneyMoney::autoCalc) {
+ s.setValue((s.value() * m_factor));
+ s.setShares((s.shares() * m_factor));
+ }
+ s.setNumber(hideString(s.number()));
+
+ // obfuscate a possibly matched transaction as well
+ if(s.isMatched()) {
+ MyMoneyTransaction t = s.matchedTransaction();
+ fakeTransaction(t);
+ s.removeMatch();
+ s.addMatch(t);
+ }
+ tn.modifySplit(s);
+ }
+ tx = tn;
+ fakeKeyValuePair(tx);
+}
+
+void MyMoneyStorageANON::fakeKeyValuePair(MyMoneyKeyValueContainer& kvp)
+{
+ QMap<QString, QString> pairs;
+ QMap<QString, QString>::const_iterator it;
+
+ for(it = kvp.pairs().begin(); it != kvp.pairs().end(); ++it)
+ {
+ if ( zKvpXNumber.contains( it.key() ) || it.key().left(3)=="ir-" )
+ pairs[it.key()] = hideNumber(MyMoneyMoney(it.data())).toString();
+ else if ( zKvpNoModify.contains( it.key() ) )
+ pairs[it.key()] = it.data();
+ else
+ pairs[it.key()] = hideString(it.data());
+ }
+ kvp.setPairs(pairs);
+}
+
+void MyMoneyStorageANON::writeTransaction(QDomElement& transactions, const MyMoneyTransaction& tx)
+{
+ MyMoneyTransaction tn = tx;
+
+ fakeTransaction(tn);
+
+ MyMoneyStorageXML::writeTransaction(transactions, tn);
+}
+
+void MyMoneyStorageANON::writeSchedule(QDomElement& scheduledTx, const MyMoneySchedule& sx)
+{
+ MyMoneySchedule sn = sx;
+ MyMoneyTransaction tn = sn.transaction();
+
+ fakeTransaction(tn);
+
+ sn.setName(sx.id());
+ sn.setTransaction(tn, true);
+
+ MyMoneyStorageXML::writeSchedule(scheduledTx, sn);
+}
+
+void MyMoneyStorageANON::writeSecurity(QDomElement& securityElement, const MyMoneySecurity& security)
+{
+ MyMoneySecurity s = security;
+ s.setName(security.id());
+ fakeKeyValuePair(s);
+
+ MyMoneyStorageXML::writeSecurity(securityElement, s);
+}
+
+QString MyMoneyStorageANON::hideString(const QString& _in) const
+{
+ return QString(_in).fill('x');
+}
+
+MyMoneyMoney MyMoneyStorageANON::hideNumber(const MyMoneyMoney& _in) const
+{
+ MyMoneyMoney result;
+ static MyMoneyMoney counter = MyMoneyMoney(100,100);
+
+ // preserve sign
+ if ( _in.isNegative() )
+ result = MyMoneyMoney(-1);
+ else
+ result = MyMoneyMoney(1);
+
+ result = result * counter;
+ counter += MyMoneyMoney("10/100");
+
+ // preserve > 1000
+ if ( _in >= MyMoneyMoney(1000) )
+ result = result * MyMoneyMoney(1000);
+ if ( _in <= MyMoneyMoney(-1000) )
+ result = result * MyMoneyMoney(1000);
+
+ return result.convert();
+}
+
+void MyMoneyStorageANON::fakeBudget(MyMoneyBudget& bx)
+{
+ MyMoneyBudget bn;
+
+ bn.setName(bx.name());
+ bn.setBudgetStart(bx.budgetStart());
+ bn = MyMoneyBudget(bx.id(), bn);
+
+ QValueList<MyMoneyBudget::AccountGroup> list = bx.getaccounts();
+ QValueList<MyMoneyBudget::AccountGroup>::iterator it;
+ for(it = list.begin(); it != list.end(); ++it) {
+ // only add the account if there is a budget entered
+ if(!(*it).balance().isZero()) {
+ MyMoneyBudget::AccountGroup account;
+ account.setId((*it).id());
+ account.setBudgetLevel((*it).budgetLevel());
+ account.setBudgetSubaccounts((*it).budgetSubaccounts());
+ QMap<QDate, MyMoneyBudget::PeriodGroup> plist = (*it).getPeriods();
+ QMap<QDate, MyMoneyBudget::PeriodGroup>::const_iterator it_p;
+ for(it_p = plist.begin(); it_p != plist.end(); ++it_p) {
+ MyMoneyBudget::PeriodGroup pGroup;
+ pGroup.setAmount((*it_p).amount() * m_factor );
+ pGroup.setStartDate( (*it_p).startDate());
+ account.addPeriod(pGroup.startDate(), pGroup);
+ }
+ bn.setAccount(account, account.id());
+ }
+ }
+
+ bx = bn;
+}
+
+void MyMoneyStorageANON::writeBudget(QDomElement& budgets, const MyMoneyBudget& b)
+{
+ MyMoneyBudget bn = b;
+
+ fakeBudget(bn);
+
+ MyMoneyStorageXML::writeBudget(budgets, bn);
+}
+
+
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/mymoney/storage/mymoneystorageanon.h b/kmymoney2/mymoney/storage/mymoneystorageanon.h
new file mode 100644
index 0000000..4b7ab95
--- /dev/null
+++ b/kmymoney2/mymoney/storage/mymoneystorageanon.h
@@ -0,0 +1,113 @@
+/***************************************************************************
+ mymoneystorageanon.h
+ -------------------
+ begin : Thu Oct 24 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ Ace Jone <acejones@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYSTORAGEANON_H
+#define MYMONEYSTORAGEANON_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// #include <qdom.h>
+// #include <qdatastream.h>
+// class QIODevice;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+// #include "imymoneyserialize.h"
+// #include "imymoneystorageformat.h"
+#include "mymoneystoragexml.h"
+
+/**
+ * @author Kevin Tambascio (ktambascio@users.sourceforge.net)
+ */
+
+#define VERSION_0_60_XML 0x10000010 // Version 0.5 file version info
+#define VERSION_0_61_XML 0x10000011 // use 8 bytes for MyMoneyMoney objects
+
+/**
+ * This class provides storage of an anonymized version of the current
+ * file. Any object with an ID (account, transaction, etc) is renamed
+ * with that ID. Any other string value the user typed in is replaced with
+ * x's equal in length to the original string. Any numeric value is
+ * replaced with an arbitrary number which matches the sign of the original.
+ *
+ * The purpose of this class is to give users a way to send a developer
+ * their file without comprimising their financial data. If a user
+ * encounters an error, they should try saving the anonymous version of the
+ * file and see if the error is still there. If so, they should notify the
+ * list of the problem, and then when requested, send the anonymous file
+ * privately to the developer who takes the problem. I still don't think
+ * it's wise to post the file to the public list...maybe I'm just paranoid.
+ *
+ * @author Ace Jones <ace.j@hotpop.com>
+ */
+
+class MyMoneyStorageANON : public MyMoneyStorageXML
+{
+public:
+ MyMoneyStorageANON();
+ virtual ~MyMoneyStorageANON();
+
+protected:
+ void writeUserInformation(QDomElement& userInfo);
+
+ void writeInstitution(QDomElement& institutions, const MyMoneyInstitution& i);
+
+ void writePayee(QDomElement& payees, const MyMoneyPayee& p);
+
+ void writeAccount(QDomElement& accounts, const MyMoneyAccount& p);
+
+ void writeTransaction(QDomElement& transactions, const MyMoneyTransaction& tx);
+
+ void writeSchedule(QDomElement& scheduledTx, const MyMoneySchedule& tx);
+
+ void writeBudget(QDomElement& budgets, const MyMoneyBudget& b);
+
+ void readFile(QIODevice* s, IMyMoneySerialize* storage);
+
+ void writeSecurity(QDomElement& securityElement, const MyMoneySecurity& security);
+
+ QDomElement findChildElement(const QString& name, const QDomElement& root);
+
+private:
+ /**
+ * The list of key-value pairs to not modify
+ */
+ static QStringList zKvpNoModify;
+
+ /**
+ * The list of key-value pairs which are numbers to be hidden
+ */
+ static QStringList zKvpXNumber;
+
+ QString hideString(const QString&) const;
+ MyMoneyMoney hideNumber(const MyMoneyMoney&) const;
+ void fakeTransaction(MyMoneyTransaction& tn);
+ void fakeBudget(MyMoneyBudget& bn);
+ void fakeKeyValuePair(MyMoneyKeyValueContainer& _kvp);
+
+ MyMoneyMoney m_factor;
+};
+
+#endif
diff --git a/kmymoney2/mymoney/storage/mymoneystoragebin.h b/kmymoney2/mymoney/storage/mymoneystoragebin.h
new file mode 100644
index 0000000..6ef7e20
--- /dev/null
+++ b/kmymoney2/mymoney/storage/mymoneystoragebin.h
@@ -0,0 +1,49 @@
+/***************************************************************************
+ imymoneystoragebin.h - description
+ -------------------
+ begin : Sun May 5 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYSTORAGEBIN_H
+#define MYMONEYSTORAGEBIN_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+/**
+ *@author Thomas Baumgart
+ */
+
+ #define VERSION_0_3_3 0x00000006 // MAGIC1 for version 0.33 files
+ #define VERSION_0_4_0 0x00000007 // MAGIC1 for version 0.4 files
+
+ #define MAGIC_0_50 0x4B4D794D // "KMyM" MAGIC1 for version 0.5 files
+ #define MAGIC_0_51 0x6F6E6579 // "oney" second part of MAGIC
+
+ #define VERSION_0_50 0x00000010 // Version 0.5 file version info
+ #define VERSION_0_51 0x00000011 // use 8 bytes for MyMoneyMoney objects
+
+ // add new definitions above and make sure to adapt MAX_FILE_VERSION below
+ #define MIN_FILE_VERSION VERSION_0_50
+ #define MAX_FILE_VERSION VERSION_0_51
+
+#endif
diff --git a/kmymoney2/mymoney/storage/mymoneystoragedump.cpp b/kmymoney2/mymoney/storage/mymoneystoragedump.cpp
new file mode 100644
index 0000000..e0d0083
--- /dev/null
+++ b/kmymoney2/mymoney/storage/mymoneystoragedump.cpp
@@ -0,0 +1,446 @@
+/***************************************************************************
+ mymoneystoragedump.cpp - description
+ -------------------
+ begin : Sun May 5 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstring.h>
+#include <qdatetime.h>
+#include <qvaluelist.h>
+#include <qstringlist.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoneystoragedump.h"
+#include "imymoneystorage.h"
+#include "../mymoneyaccount.h"
+#include "../mymoneysecurity.h"
+#include "../mymoneyprice.h"
+
+MyMoneyStorageDump::MyMoneyStorageDump()
+{
+}
+
+MyMoneyStorageDump::~MyMoneyStorageDump()
+{
+}
+
+void MyMoneyStorageDump::readStream(QDataStream& /* s */, IMyMoneySerialize* /* storage */)
+{
+ qDebug("Reading not supported by MyMoneyStorageDump!!");
+}
+
+void MyMoneyStorageDump::writeStream(QDataStream& _s, IMyMoneySerialize* _storage)
+{
+ QTextStream s(_s.device());
+ IMyMoneyStorage* storage = dynamic_cast<IMyMoneyStorage *> (_storage);
+ MyMoneyPayee user = storage->user();
+
+ s << "File-Info\n";
+ s << "---------\n";
+ s << "user name = " << user.name() << "\n";
+ s << "user street = " << user.address() << "\n";
+ s << "user city = " << user.city() << "\n";
+ s << "user city = " << user.state() << "\n";
+ s << "user zip = " << user.postcode() << "\n";
+ s << "user telephone = " << user.telephone() << "\n";
+ s << "user e-mail = " << user.email() << "\n";
+ s << "creation date = " << storage->creationDate().toString(Qt::ISODate) << "\n";
+ s << "last modification date = " << storage->lastModificationDate().toString(Qt::ISODate) << "\n";
+ s << "base currency = " << storage->value("kmm-baseCurrency") << "\n";
+ s << "\n";
+
+ s << "Internal-Info\n";
+ s << "-------------\n";
+ QValueList<MyMoneyAccount> list_a;
+ storage->accountList(list_a);
+ s << "accounts = " << list_a.count() <<", next id = " << _storage->accountId() << "\n";
+ MyMoneyTransactionFilter filter;
+ filter.setReportAllSplits(false);
+ QValueList<MyMoneyTransaction> list_t;
+ storage->transactionList(list_t, filter);
+ QValueList<MyMoneyTransaction>::ConstIterator it_t;
+ s << "transactions = " << list_t.count() << ", next id = " << _storage->transactionId() << "\n";
+ QMap<int,int> xferCount;
+ for(it_t = list_t.begin(); it_t != list_t.end(); ++it_t) {
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ int accountCount = 0;
+ for(it_s = (*it_t).splits().begin(); it_s != (*it_t).splits().end(); ++it_s) {
+ MyMoneyAccount acc = storage->account((*it_s).accountId());
+ if(acc.accountGroup() != MyMoneyAccount::Expense
+ && acc.accountGroup() != MyMoneyAccount::Income)
+ accountCount++;
+ }
+ if(accountCount > 1)
+ xferCount[accountCount] = xferCount[accountCount] + 1;
+ }
+ QMap<int,int>::ConstIterator it_cnt;
+ for(it_cnt = xferCount.begin(); it_cnt != xferCount.end(); ++it_cnt) {
+ s << " " << *it_cnt << " of them references " << it_cnt.key() << " accounts\n";
+ }
+
+ s << "payees = " << _storage->payeeList().count() << ", next id = " << _storage->payeeId() << "\n";
+ s << "institutions = " << _storage->institutionList().count() << ", next id = " << _storage->institutionId() << "\n";
+ s << "schedules = " << _storage->scheduleList().count() << ", next id = " << _storage->scheduleId() << "\n";
+ s << "\n";
+
+ s << "Institutions\n";
+ s << "------------\n";
+
+ QValueList<MyMoneyInstitution> list_i = storage->institutionList();
+ QValueList<MyMoneyInstitution>::ConstIterator it_i;
+ for(it_i = list_i.begin(); it_i != list_i.end(); ++it_i) {
+ s << " ID = " << (*it_i).id() << "\n";
+ s << " Name = " << (*it_i).name() << "\n";
+ s << "\n";
+ }
+ s << "\n";
+
+ s << "Payees" << "\n";
+ s << "------" << "\n";
+
+ QValueList<MyMoneyPayee> list_p = storage->payeeList();
+ QValueList<MyMoneyPayee>::ConstIterator it_p;
+ for(it_p = list_p.begin(); it_p != list_p.end(); ++it_p) {
+ s << " ID = " << (*it_p).id() << "\n";
+ s << " Name = " << (*it_p).name() << "\n";
+ s << " Address = " << (*it_p).address() << "\n";
+ s << " City = " << (*it_p).city() << "\n";
+ s << " State = " << (*it_p).state() << "\n";
+ s << " Zip = " << (*it_p).postcode() << "\n";
+ s << " E-Mail = " << (*it_p).email() << "\n";
+ s << " Telephone = " << (*it_p).telephone() << "\n";
+ s << " Reference = " << (*it_p).reference() << "\n";
+ s << "\n";
+ }
+ s << "\n";
+
+
+ s << "Accounts" << "\n";
+ s << "--------" << "\n";
+
+ list_a.push_front(storage->equity());
+ list_a.push_front(storage->expense());
+ list_a.push_front(storage->income());
+ list_a.push_front(storage->liability());
+ list_a.push_front(storage->asset());
+ QValueList<MyMoneyAccount>::ConstIterator it_a;
+ for(it_a = list_a.begin(); it_a != list_a.end(); ++it_a) {
+ s << " ID = " << (*it_a).id() << "\n";
+ s << " Name = " << (*it_a).name() << "\n";
+ s << " Number = " << (*it_a).number() << "\n";
+ s << " Description = " << (*it_a).description() << "\n";
+ s << " Type = " << (*it_a).accountType() << "\n";
+ if((*it_a).currencyId().isEmpty()) {
+ s << " Currency = unknown\n";
+ } else {
+ if((*it_a).isInvest()) {
+ s << " Equity = " << storage->security((*it_a).currencyId()).name() << "\n";
+ } else {
+ s << " Currency = " << storage->currency((*it_a).currencyId()).name() << "\n";
+ }
+ }
+ s << " Parent = " << (*it_a).parentAccountId();
+ if(!(*it_a).parentAccountId().isEmpty()) {
+ MyMoneyAccount parent = storage->account((*it_a).parentAccountId());
+ s << " (" << parent.name() << ")";
+ } else {
+ s << "n/a";
+ }
+ s << "\n";
+
+ s << " Institution = " << (*it_a).institutionId();
+ if(!(*it_a).institutionId().isEmpty()) {
+ MyMoneyInstitution inst = storage->institution((*it_a).institutionId());
+ s << " (" << inst.name() << ")";
+ } else {
+ s << "n/a";
+ }
+ s << "\n";
+
+ s << " Opening data = " << (*it_a).openingDate().toString(Qt::ISODate) << "\n";
+ s << " Last modified = " << (*it_a).lastModified().toString(Qt::ISODate) << "\n";
+ s << " Last reconciled = " << (*it_a).lastReconciliationDate().toString(Qt::ISODate) << "\n";
+ s << " Balance = " << (*it_a).balance().formatMoney("", 2) << "\n";
+
+ dumpKVP(" KVP: ", s, *it_a);
+ dumpKVP(" OnlineBankingSettings: ", s, (*it_a).onlineBankingSettings());
+
+ QStringList list_s = (*it_a).accountList();
+ QStringList::ConstIterator it_s;
+ if(list_s.count() > 0) {
+ s << " Children =" << "\n";
+ }
+ for(it_s = list_s.begin(); it_s != list_s.end(); ++it_s) {
+ MyMoneyAccount child = storage->account(*it_s);
+ s << " " << *it_s << " (" << child.name() << ")\n";
+ }
+ s << "\n";
+ }
+ s << "\n";
+
+#if 0
+ s << "Currencies" << "\n";
+ s << "----------" << "\n";
+
+ QValueList<MyMoneyCurrency> list_c = storage->currencyList();
+ QValueList<MyMoneyCurrency>::ConstIterator it_c;
+ for(it_c = list_c.begin(); it_c != list_c.end(); ++it_c) {
+ s << " Name = " << (*it_c).name() << "\n";
+ s << " ID = " << (*it_c).id() << "\n";
+ s << " Symbol = " << (*it_c).tradingSymbol() << "\n";
+ s << " Parts/Unit = " << (*it_c).partsPerUnit() << "\n";
+ s << " smallest cash fraction = " << (*it_c).smallestCashFraction() << "\n";
+ s << " smallest account fraction = " << (*it_c).smallestAccountFraction() << "\n";
+ dumpPriceHistory(s, (*it_c).priceHistory());
+ s << "\n";
+ }
+ s << "\n";
+#endif
+
+ s << "Securities" << "\n";
+ s << "----------" << "\n";
+
+ QValueList<MyMoneySecurity> list_e = storage->securityList();
+ QValueList<MyMoneySecurity>::ConstIterator it_e;
+ for(it_e = list_e.begin(); it_e != list_e.end(); ++it_e) {
+ s << " Name = " << (*it_e).name() << "\n";
+ s << " ID = " << (*it_e).id() << "\n";
+ s << " Market = " << (*it_e).tradingMarket() << "\n";
+ s << " Symbol = " << (*it_e).tradingSymbol() << "\n";
+ s << " Currency = " << (*it_e).tradingCurrency() << " (";
+ if((*it_e).tradingCurrency().isEmpty()) {
+ s << "unknown";
+ } else {
+ MyMoneySecurity tradingCurrency = storage->currency((*it_e).tradingCurrency());
+ if(!tradingCurrency.isCurrency()) {
+ s << "invalid currency: ";
+ }
+ s << tradingCurrency.name();
+ }
+ s << ")\n";
+
+ s << " Type = " << MyMoneySecurity::securityTypeToString((*it_e).securityType()) << "\n";
+ s << " smallest account fraction = " << (*it_e).smallestAccountFraction() << "\n";
+
+ s << " KVP: " << "\n";
+ QMap<QString, QString>kvp = (*it_e).pairs();
+ QMap<QString, QString>::Iterator it;
+ for(it = kvp.begin(); it != kvp.end(); ++it) {
+ s << " '" << it.key() << "' = '" << it.data() << "'\n";
+ }
+ s << "\n";
+ }
+ s << "\n";
+
+ s << "Prices" << "\n";
+ s << "--------" << "\n";
+
+ MyMoneyPriceList list_pr = _storage->priceList();
+ MyMoneyPriceList::ConstIterator it_pr;
+ for(it_pr = list_pr.begin(); it_pr != list_pr.end(); ++it_pr) {
+ s << " From = " << it_pr.key().first << "\n";
+ s << " To = " << it_pr.key().second << "\n";
+ MyMoneyPriceEntries::ConstIterator it_pre;
+ for(it_pre = (*it_pr).begin(); it_pre != (*it_pr).end(); ++it_pre) {
+ s << " Date = " << (*it_pre).date().toString() << "\n";
+ s << " Price = " << (*it_pre).rate(QString()).formatMoney("", 8) << "\n";
+ s << " Source = " << (*it_pre).source() << "\n";
+ s << " From = " << (*it_pre).from() << "\n";
+ s << " To = " << (*it_pre).to() << "\n";
+ }
+ s << "\n";
+ }
+ s << "\n";
+
+ s << "Transactions" << "\n";
+ s << "------------" << "\n";
+
+ for(it_t = list_t.begin(); it_t != list_t.end(); ++it_t) {
+ dumpTransaction(s, storage, *it_t);
+ }
+ s << "\n";
+
+
+ s << "Schedules" << "\n";
+ s << "---------" << "\n";
+
+ QValueList<MyMoneySchedule> list_s = storage->scheduleList();
+ QValueList<MyMoneySchedule>::ConstIterator it_s;
+ for(it_s = list_s.begin(); it_s != list_s.end(); ++it_s) {
+ s << " ID = " << (*it_s).id() << "\n";
+ s << " Name = " << (*it_s).name() << "\n";
+ s << " Startdate = " << (*it_s).startDate().toString(Qt::ISODate) << "\n";
+ if((*it_s).willEnd())
+ s << " Enddate = " << (*it_s).endDate().toString(Qt::ISODate) << "\n";
+ else
+ s << " Enddate = not specified\n";
+ s << " Occurence = " << (*it_s).occurenceToString() << "\n";
+ s << " OccurenceMultiplier = " << (*it_s).occurenceMultiplier() << "\n";
+ s << " Type = " << MyMoneySchedule::scheduleTypeToString((*it_s).type()) << "\n";
+ s << " Paymenttype = " << MyMoneySchedule::paymentMethodToString((*it_s).paymentType()) << "\n";
+ s << " Fixed = " << (*it_s).isFixed() << "\n";
+ s << " AutoEnter = " << (*it_s).autoEnter() << "\n";
+
+ if((*it_s).lastPayment().isValid())
+ s << " Last payment = " << (*it_s).lastPayment().toString(Qt::ISODate) << "\n";
+ else
+ s << " Last payment = not defined" << "\n";
+ if((*it_s).isFinished())
+ s << " Next payment = payment finished" << "\n";
+ else {
+ s << " Next payment = " << (*it_s).nextDueDate().toString(Qt::ISODate) << "\n";
+ if((*it_s).isOverdue())
+ s << " = overdue!" << "\n";
+ }
+
+ QValueList<QDate> list_d;
+ QValueList<QDate>::ConstIterator it_d;
+
+ list_d = (*it_s).recordedPayments();
+ if(list_d.count() > 0) {
+ s << " Recorded payments" << "\n";
+ for(it_d = list_d.begin(); it_d != list_d.end(); ++it_d) {
+ s << " " << (*it_d).toString(Qt::ISODate) << "\n";
+ }
+ }
+ s << " TRANSACTION\n";
+ dumpTransaction(s, storage, (*it_s).transaction());
+ }
+ s << "\n";
+
+ s << "Reports" << "\n";
+ s << "-------" << "\n";
+
+ QValueList<MyMoneyReport> list_r = storage->reportList();
+ QValueList<MyMoneyReport>::ConstIterator it_r;
+ for(it_r = list_r.begin(); it_r != list_r.end(); ++it_r) {
+ s << " ID = " << (*it_r).id() << "\n";
+ s << " Name = " << (*it_r).name() << "\n";
+ }
+}
+
+void MyMoneyStorageDump::dumpKVP(const QString& headline, QTextStream& s, const MyMoneyKeyValueContainer &kvp, int indent)
+{
+ QString ind;
+ ind.fill(' ', indent);
+ s << ind << headline << "\n";
+ QMap<QString, QString>::const_iterator it;
+ for(it = kvp.pairs().begin(); it != kvp.pairs().end(); ++it) {
+ s << ind << " '" << it.key() << "' = '" << it.data() << "'\n";
+ }
+}
+
+void MyMoneyStorageDump::dumpTransaction(QTextStream& s, IMyMoneyStorage* storage, const MyMoneyTransaction& it_t)
+{
+ s << " ID = " << it_t.id() << "\n";
+ s << " Postdate = " << it_t.postDate().toString(Qt::ISODate) << "\n";
+ s << " EntryDate = " << it_t.entryDate().toString(Qt::ISODate) << "\n";
+ s << " Commodity = [" << it_t.commodity() << "]\n";
+ s << " Memo = " << it_t.memo() << "\n";
+ s << " BankID = " << it_t.bankID() << "\n";
+ dumpKVP("KVP:", s, it_t, 2);
+
+ s << " Splits\n";
+ s << " ------\n";
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ for(it_s = it_t.splits().begin(); it_s != it_t.splits().end(); ++it_s) {
+ s << " ID = " << (*it_s).id() << "\n";
+ s << " Transaction = " << (*it_s).transactionId() << "\n";
+ s << " Payee = " << (*it_s).payeeId();
+ if(!(*it_s).payeeId().isEmpty()) {
+ MyMoneyPayee p = storage->payee((*it_s).payeeId());
+ s << " (" << p.name() << ")" << "\n";
+ } else
+ s << " ()\n";
+ s << " Account = " << (*it_s).accountId();
+ MyMoneyAccount acc;
+ try {
+ acc = storage->account((*it_s).accountId());
+ s << " (" << acc.name() << ") [" << acc.currencyId() << "]\n";
+ } catch (MyMoneyException *e) {
+ s << " (---) [---]\n";
+ delete e;
+ }
+ s << " Memo = " << (*it_s).memo() << "\n";
+ if((*it_s).value() == MyMoneyMoney::autoCalc)
+ s << " Value = will be calculated" << "\n";
+ else
+ s << " Value = " << (*it_s).value().formatMoney("", 2)
+ << " (" << (*it_s).value().toString() << ")\n";
+ s << " Shares = " << (*it_s).shares().formatMoney("", 2)
+ << " (" << (*it_s).shares().toString() << ")\n";
+ s << " Action = '" << (*it_s).action() << "'\n";
+ s << " Nr = '" << (*it_s).number() << "'\n";
+ s << " ReconcileFlag = '" << reconcileToString((*it_s).reconcileFlag()) << "'\n";
+ if((*it_s).reconcileFlag() != MyMoneySplit::NotReconciled) {
+ s << " ReconcileDate = " << (*it_s).reconcileDate().toString(Qt::ISODate) << "\n";
+ }
+ s << " BankID = " << (*it_s).bankID() << "\n";
+ dumpKVP("KVP:", s, (*it_s), 4);
+ s << "\n";
+ }
+ s << "\n";
+}
+
+#define i18n QString
+
+const QString MyMoneyStorageDump::reconcileToString(MyMoneySplit::reconcileFlagE flag) const
+{
+ QString rc;
+
+ switch(flag) {
+ case MyMoneySplit::NotReconciled:
+ rc = i18n("not reconciled");
+ break;
+ case MyMoneySplit::Cleared:
+ rc = i18n("cleared");
+ break;
+ case MyMoneySplit::Reconciled:
+ rc = i18n("reconciled");
+ break;
+ case MyMoneySplit::Frozen:
+ rc = i18n("frozen");
+ break;
+ default:
+ rc = i18n("unknown");
+ break;
+ }
+ return rc;
+}
+
+#if 0
+void MyMoneyStorageDump::dumpPriceHistory(QTextStream& s, const equity_price_history history)
+{
+ if(history.count() != 0) {
+ s << " Price History:\n";
+
+ equity_price_history::const_iterator it_price = history.begin();
+ while ( it_price != history.end() )
+ {
+ s << " " << it_price.key().toString() << ": " << it_price.data().toDouble() << "\n";
+ it_price++;
+ }
+ }
+}
+#endif
diff --git a/kmymoney2/mymoney/storage/mymoneystoragedump.h b/kmymoney2/mymoney/storage/mymoneystoragedump.h
new file mode 100644
index 0000000..e399cde
--- /dev/null
+++ b/kmymoney2/mymoney/storage/mymoneystoragedump.h
@@ -0,0 +1,56 @@
+/***************************************************************************
+ mymoneystoragedump.h - description
+ -------------------
+ begin : Sun May 5 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYSTORAGEDUMP_H
+#define MYMONEYSTORAGEDUMP_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qdatastream.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "imymoneyserialize.h"
+#include "../mymoneysecurity.h"
+
+/**
+ * @author Thomas Baumgart
+ */
+
+class MyMoneyStorageDump
+{
+public:
+ MyMoneyStorageDump();
+ ~MyMoneyStorageDump();
+
+ void readStream(QDataStream& s, IMyMoneySerialize* storage);
+ void writeStream(QDataStream& s, IMyMoneySerialize* storage);
+
+private:
+ void dumpTransaction(QTextStream& s, IMyMoneyStorage* storage, const MyMoneyTransaction& it_t);
+ void dumpKVP(const QString& headline, QTextStream& s, const MyMoneyKeyValueContainer &kvp, int indent = 0);
+ const QString reconcileToString(MyMoneySplit::reconcileFlagE flag) const;
+};
+
+#endif
diff --git a/kmymoney2/mymoney/storage/mymoneystoragesql.cpp b/kmymoney2/mymoney/storage/mymoneystoragesql.cpp
new file mode 100644
index 0000000..97b4c55
--- /dev/null
+++ b/kmymoney2/mymoney/storage/mymoneystoragesql.cpp
@@ -0,0 +1,4511 @@
+/***************************************************************************
+ mymoneystoragesql.cpp
+ ---------------------
+ begin : 11 November 2005
+ copyright : (C) 2005 by Tony Bloomfield
+ email : tonybloom@users.sourceforge.net
+ : Fernando Vilas <fvilas@iname.com>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include <algorithm>
+#include <numeric>
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstring.h>
+#include <qdatetime.h>
+#include <qvaluelist.h>
+#include <qstringlist.h>
+#include <qiodevice.h>
+#include <qsqldriver.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoneystoragesql.h"
+#include "imymoneyserialize.h"
+#include <kmymoney/kmymoneyglobalsettings.h>
+
+#define TRY try {
+#define CATCH } catch (MyMoneyException *e) {
+#define PASS } catch (MyMoneyException *e) { throw; }
+#define ECATCH }
+#define DBG(a) // qDebug(a)
+//#define TRACE(a) qDebug(a)
+#define TRACE(a) ::timetrace(a)
+
+//***************** THE CURRENT VERSION OF THE DATABASE LAYOUT ****************
+unsigned int MyMoneyDbDef::m_currentVersion = 6;
+
+// subclass QSqlQuery for performance tracing
+
+MyMoneySqlQuery::MyMoneySqlQuery (MyMoneyStorageSql* db)
+ : QSqlQuery (static_cast<QSqlDatabase*>(db)) {
+ m_db = db;
+}
+
+bool MyMoneySqlQuery::exec () {
+ TRACE(QString("start sql - %1").arg(lastQuery()));
+ bool rc = QSqlQuery::exec();
+ QString msg("end sql\n%1\n***Query returned %2, row count %3");
+ TRACE (msg.arg(QSqlQuery::executedQuery()).arg(rc).arg(numRowsAffected()));
+ //DBG (QString("%1\n***Query returned %2, row count %3").arg(QSqlQuery::executedQuery()).arg(rc).arg(size()));
+ return (rc);
+}
+
+bool MyMoneySqlQuery::prepare ( const QString & query ) {
+ if (m_db->isSqlite3()) {
+ QString newQuery = query;
+ return (QSqlQuery::prepare (newQuery.replace("FOR UPDATE", "")));
+ }
+ return (QSqlQuery::prepare (query));
+}
+
+//*****************************************************************************
+MyMoneyDbDrivers::MyMoneyDbDrivers () {
+ m_driverMap["QDB2"] = QString("IBM DB2");
+ m_driverMap["QIBASE"] = QString("Borland Interbase");
+ m_driverMap["QMYSQL3"] = QString("MySQL");
+ m_driverMap["QOCI8"] = QString("Oracle Call Interface, version 8 and 9");
+ m_driverMap["QODBC3"] = QString("Open Database Connectivity");
+ m_driverMap["QPSQL7"] = QString("PostgreSQL v6.x and v7.x");
+ m_driverMap["QTDS7"] = QString("Sybase Adaptive Server and Microsoft SQL Server");
+#if QT_VERSION < 0x040000
+ m_driverMap["QSQLITE3"] = QString("SQLite Version 3");
+#else
+ m_driverMap["QSQLITE"] = QString("SQLite Version 3");
+#endif
+}
+
+databaseTypeE MyMoneyDbDrivers::driverToType (const QString& driver) const {
+ if (driver == "QDB2") return(Db2);
+ else if (driver == "QIBASE") return(Interbase);
+ else if (driver == "QMYSQL3") return(Mysql);
+ else if (driver == "QOCI8") return(Oracle8);
+ else if (driver == "QODBC3") return(ODBC3);
+ else if (driver == "QPSQL7") return(Postgresql);
+ else if (driver == "QTDS7") return(Sybase);
+#if QT_VERSION < 0x040000
+ else if (driver == "QSQLITE3") return(Sqlite3);
+#else
+ else if (driver == "QSQLITE") return(Sqlite3);
+#endif
+ else throw new MYMONEYEXCEPTION (QString("Unknown database driver type").arg(driver));
+}
+
+bool MyMoneyDbDrivers::isTested (databaseTypeE dbType) const {
+ switch (dbType) {
+ case Mysql:
+ case Sqlite3:
+ case Postgresql:
+ return (true);
+ default:
+ return(false);
+ }
+ return(false);
+}
+
+//************************ Constructor/Destructor *****************************
+MyMoneyStorageSql::MyMoneyStorageSql (IMyMoneySerialize *storage, const KURL& url)
+ : QSqlDatabase (url.queryItem("driver"), QString("kmmdatabase")) {
+ DBG("*** Entering MyMoneyStorageSql::MyMoneyStorageSql");
+ m_dbVersion = 0;
+ m_progressCallback = 0;
+ m_displayStatus = false;
+ m_storage = storage;
+ m_storagePtr = dynamic_cast<IMyMoneyStorage*>(storage);
+ m_newDatabase = false;
+ m_readingPrices = false;
+ m_loadAll = false;
+ m_override = false;
+ m_preferred.setReportAllSplits(false);
+}
+
+int MyMoneyStorageSql::open(const KURL& url, int openMode, bool clear) {
+ DBG("*** Entering MyMoneyStorageSql::open");
+try {
+ int rc = 0;
+ QString driverName = url.queryItem("driver");
+ m_dbType = m_drivers.driverToType(driverName);
+ //get the input options
+ QStringList options = QStringList::split(',', url.queryItem("options"));
+ m_loadAll = options.contains("loadAll")/*|| m_mode == 0*/;
+ m_override = options.contains("override");
+
+ // create the database connection
+ QString dbName = url.path().right(url.path().length() - 1); // remove separator slash
+ setDatabaseName(dbName);
+ setHostName(url.host());
+ setUserName(url.user());
+ setPassword(url.pass());
+ switch (openMode) {
+ case IO_ReadOnly: // OpenDatabase menu entry (or open last file)
+ case IO_ReadWrite: // Save menu entry with database open
+ if (!QSqlDatabase::open()) {
+ buildError(MyMoneySqlQuery(), __func__, "opening database");
+ rc = 1;
+ } else {
+ rc = createTables(); // check all tables are present, create if not (we may add tables at some time)
+ }
+ break;
+ case IO_WriteOnly: // SaveAs Database - if exists, must be empty, if not will create
+ // Try to open the database.
+ // If that fails, try to create the database, then try to open it again.
+ m_newDatabase = true;
+ if (!QSqlDatabase::open()) {
+ if (createDatabase(url) != 0) {
+ rc = 1;
+ } else {
+ if (!QSqlDatabase::open()) {
+ buildError(MyMoneySqlQuery(), __func__, "opening new database");
+ rc = 1;
+ } else {
+ rc = createTables();
+ }
+ }
+ } else {
+ rc = createTables();
+ if (rc == 0) {
+ if (clear) {
+ clean();
+ } else {
+ rc = isEmpty();
+ }
+ }
+ }
+ break;
+ default:
+ qFatal("%s", QString("%1 - unknown open mode %2").arg(__func__).arg(openMode).data());
+ }
+ if (rc != 0) return (rc);
+ // bypass logon check if we are creating a database
+ if (openMode == IO_WriteOnly) return(0);
+ // check if the database is locked, if not lock it
+ readFileInfo();
+ if (!m_logonUser.isEmpty() && (!m_override)) {
+ m_error = QString
+ (i18n("Database apparently in use\nOpened by %1 on %2 at %3.\nOpen anyway?"))
+ .arg(m_logonUser)
+ .arg(m_logonAt.date().toString(Qt::ISODate))
+ .arg(m_logonAt.time().toString("hh.mm.ss"));
+ qDebug("%s", m_error.data());
+ close(false);
+ rc = -1;
+ } else {
+ m_logonUser = url.user() + "@" + url.host();
+ m_logonAt = QDateTime::currentDateTime();
+ writeFileInfo();
+ }
+ return(rc);
+} catch (QString& s) {
+ qDebug("%s",s.data());
+ return (1);
+}
+}
+
+void MyMoneyStorageSql::close(bool logoff) {
+ DBG("*** Entering MyMoneyStorageSql::close");
+ if (QSqlDatabase::open()) {
+ if (logoff) {
+ startCommitUnit(__func__);
+ m_logonUser = QString();
+ writeFileInfo();
+ endCommitUnit(__func__);
+ }
+ QSqlDatabase::close();
+ QSqlDatabase::removeDatabase(this);
+ }
+}
+
+int MyMoneyStorageSql::createDatabase (const KURL& url) {
+ DBG("*** Entering MyMoneyStorageSql::createDatabase");
+ if (m_dbType == Sqlite3) return(0); // not needed for sqlite
+ if (!m_dbType == Mysql) {
+ m_error =
+ QString(i18n("Cannot currently create database for driver %1; please create manually")).arg(driverName());
+ return (1);
+ }
+ // create the database (only works for mysql at present)
+ QString dbName = url.path().right(url.path().length() - 1); // remove separator slash
+ QSqlDatabase *maindb = QSqlDatabase::addDatabase(driverName());
+ maindb->setDatabaseName ("mysql");
+ maindb->setHostName (url.host());
+ maindb->setUserName (url.user());
+ maindb->setPassword (url.pass());
+ maindb->open();
+ QSqlQuery qm(maindb);
+ QString qs = QString("CREATE DATABASE %1;").arg(dbName);
+ qm.prepare (qs);
+ if (!qm.exec()) {
+ buildError (qm, __func__, QString(i18n("Error in create database %1; do you have create permissions?")).arg(dbName));
+ return (1);
+ }
+ QSqlDatabase::removeDatabase (maindb);
+ return (0);
+}
+
+
+int MyMoneyStorageSql::upgradeDb() {
+ DBG("*** Entering MyMoneyStorageSql::upgradeDb");
+ //signalProgress(0, 1, QObject::tr("Upgrading database..."));
+ MyMoneySqlQuery q(this);
+ q.prepare ("SELECT version FROM kmmFileInfo;");
+ if (!q.exec() || !q.next()) {
+ if (!m_newDatabase) {
+ buildError (q, __func__, "Error retrieving file info(version)");
+ return(1);
+ } else {
+ m_dbVersion = m_db.currentVersion();
+ m_storage->setFileFixVersion(m_storage->currentFixVersion());
+ QSqlQuery q(this);
+ q.prepare("UPDATE kmmFileInfo SET version = :version, \
+ fixLevel = :fixLevel;");
+ q.bindValue(":version", m_dbVersion);
+ q.bindValue(":fixLevel", m_storage->currentFixVersion());
+ if (!q.exec()) {
+ buildError (q, __func__, "Error updating file info(version)");
+ return(1);
+ }
+ return (0);
+ }
+ }
+ // prior to dbv6, 'version' format was 'dbversion.fixLevel+1'
+ // as of dbv6, these are separate fields
+ QString version = q.value(0).toString();
+ if (version.contains('.')) {
+ m_dbVersion = q.value(0).toString().section('.', 0, 0).toUInt();
+ m_storage->setFileFixVersion(q.value(0).toString().section('.', 1, 1).toUInt() - 1);
+ } else {
+ m_dbVersion = version.toUInt();
+ q.prepare ("SELECT fixLevel FROM kmmFileInfo;");
+ if (!q.exec() || !q.next()) {
+ buildError (q, __func__, "Error retrieving file info (fixLevel)");
+ return(1);
+ }
+ m_storage->setFileFixVersion(q.value(0).toUInt());
+ }
+ int rc = 0;
+ while ((m_dbVersion < m_db.currentVersion()) && (rc == 0)) {
+ switch (m_dbVersion) {
+ case 0:
+ if ((rc = upgradeToV1()) != 0) return (1);
+ ++m_dbVersion;
+ break;
+ case 1:
+ if ((rc = upgradeToV2()) != 0) return (1);
+ ++m_dbVersion;
+ break;
+ case 2:
+ if ((rc = upgradeToV3()) != 0) return (1);
+ ++m_dbVersion;
+ break;
+ case 3:
+ if ((rc = upgradeToV4()) != 0) return (1);
+ ++m_dbVersion;
+ break;
+ case 4:
+ if ((rc = upgradeToV5()) != 0) return (1);
+ ++m_dbVersion;
+ break;
+ case 5:
+ if ((rc = upgradeToV6()) != 0) return (1);
+ ++m_dbVersion;
+ break;
+ case 6:
+ break;
+ default:
+ qFatal("Unknown version number in database - %d", m_dbVersion);
+ }
+ }
+ // write updated version to DB
+ //setVersion(QString("%1.%2").arg(m_dbVersion).arg(m_minorVersion));
+ q.prepare (QString("UPDATE kmmFileInfo SET version = :version;"));
+ q.bindValue(":version", m_dbVersion);
+ if (!q.exec()) {
+ buildError (q, __func__, "Error updating db version");
+ return (1);
+ }
+ //signalProgress(-1,-1);
+ return (0);
+}
+// SF bug 2779291
+// check whether a column appears in a table already; if not, add it
+bool MyMoneyStorageSql::addColumn
+ (const QString& table, const QString& col,
+ const QString& after)
+{
+ MyMoneyDbTable t = m_db.m_tables[table];
+ MyMoneyDbTable::field_iterator ft;
+ const MyMoneyDbColumn* c;
+ for (ft = t.begin(); ft != t.end(); ++ft) {
+ c = (*ft);
+ if (c->name() == col)
+ break;
+ }
+ if (ft == t.end()) qFatal("addColumn - get it right");
+ return (addColumn(t, *c, after));
+}
+
+bool MyMoneyStorageSql::addColumn
+ (const MyMoneyDbTable& t, const MyMoneyDbColumn& c,
+ const QString& after){
+ if ((m_dbType == Sqlite3) && (!after.isEmpty()))
+ qFatal("sqlite doesn't support 'AFTER'; use sqliteAlterTable");
+ if (record(t.name()).contains(c.name()))
+ return (true);
+ QSqlQuery q(this);
+ QString afterString = ";";
+ if (!after.isEmpty())
+ afterString = QString("AFTER %1;").arg(after);
+ q.prepare("ALTER TABLE " + t.name() + " ADD COLUMN " +
+ c.generateDDL(m_dbType) + afterString);
+ if (!q.exec()) {
+ buildError (q, __func__,
+ QString("Error adding column %1 to table %2").arg(c.name()).arg(t.name()));
+ return (false);
+ }
+ return (true);
+}
+
+// analogous to above
+bool MyMoneyStorageSql::dropColumn
+ (const QString& table, const QString& col)
+{
+ return (dropColumn(m_db.m_tables[table], col));
+}
+
+bool MyMoneyStorageSql::dropColumn
+ (const MyMoneyDbTable& t, const QString& col){
+ if (m_dbType == Sqlite3)
+ qFatal("sqlite doesn't support 'DROP COLUMN'; use sqliteAlterTable");
+ if (!record(t.name()).contains(col))
+ return (true);
+ QSqlQuery q(this);
+ q.prepare("ALTER TABLE " + t.name() + " DROP COLUMN "
+ + col + ";");
+ if (!q.exec()) {
+ buildError (q, __func__,
+ QString("Error dropping column %1 from table %2").arg(col).arg(t.name()));
+ return (false);
+ }
+ return (true);
+}
+
+int MyMoneyStorageSql::upgradeToV1() {
+ DBG("*** Entering MyMoneyStorageSql::upgradeToV1");
+ if ((m_dbType == Sqlite) || (m_dbType == Sqlite3)) qFatal("SQLite upgrade NYI");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ // change kmmSplits pkey to (transactionId, splitId)
+ q.prepare ("ALTER TABLE kmmSplits ADD PRIMARY KEY (transactionId, splitId);");
+ if (!q.exec()) {
+ buildError (q, __func__, "Error updating kmmSplits pkey");
+ return (1);
+ }
+ // change kmmSplits alter checkNumber varchar(32)
+ q.prepare (m_db.m_tables["kmmSplits"].modifyColumnString(m_dbType, "checkNumber",
+ MyMoneyDbColumn("checkNumber", "varchar(32)")));
+ if (!q.exec()) {
+ buildError (q, __func__, "Error expanding kmmSplits.checkNumber");
+ return (1);
+ }
+ // change kmmSplits add postDate datetime
+ if (!addColumn(m_db.m_tables["kmmSplits"],
+ MyMoneyDbDatetimeColumn("postDate")))
+ return (1);
+ // initialize it to same value as transaction (do it the long way round)
+ q.prepare ("SELECT id, postDate FROM kmmTransactions WHERE txType = 'N';");
+ if (!q.exec()) {
+ buildError (q, __func__, "Error priming kmmSplits.postDate");
+ return (1);
+ }
+ QMap<QString, QDateTime> tids;
+ while (q.next()) tids[q.value(0).toString()] = q.value(1).toDateTime();
+ QMap<QString, QDateTime>::ConstIterator it;
+ for (it = tids.begin(); it != tids.end(); ++it) {
+ q.prepare ("UPDATE kmmSplits SET postDate=:postDate WHERE transactionId = :id;");
+ q.bindValue(":postDate", it.data().toString(Qt::ISODate));
+ q.bindValue(":id", it.key());
+ if (!q.exec()) {
+ buildError (q, __func__, "priming kmmSplits.postDate");
+ return(1);
+ }
+ }
+ // add index to kmmKeyValuePairs to (kvpType,kvpId)
+ QStringList list;
+ list << "kvpType" << "kvpId";
+ q.prepare (MyMoneyDbIndex("kmmKeyValuePairs", "kmmKVPtype_id", list, false).generateDDL(m_dbType) + ";");
+ if (!q.exec()) {
+ buildError (q, __func__, "Error adding kmmKeyValuePairs index");
+ return (1);
+ }
+ // add index to kmmSplits to (accountId, txType)
+ list.clear();
+ list << "accountId" << "txType";
+ q.prepare (MyMoneyDbIndex("kmmSplits", "kmmSplitsaccount_type", list, false).generateDDL(m_dbType) + ";");
+ if (!q.exec()) {
+ buildError (q, __func__, "Error adding kmmSplits index");
+ return (1);
+ }
+ // change kmmSchedulePaymentHistory pkey to (schedId, payDate)
+ q.prepare ("ALTER TABLE kmmSchedulePaymentHistory ADD PRIMARY KEY (schedId, payDate);");
+ if (!q.exec()) {
+ buildError (q, __func__, "Error updating kmmSchedulePaymentHistory pkey");
+ return (1);
+ }
+ // change kmmPrices pkey to (fromId, toId, priceDate)
+ q.prepare ("ALTER TABLE kmmPrices ADD PRIMARY KEY (fromId, toId, priceDate);");
+ if (!q.exec()) {
+ buildError (q, __func__, "Error updating kmmPrices pkey");
+ return (1);
+ }
+ // change kmmReportConfig pkey to (name)
+ // There wasn't one previously, so no need to drop it.
+ q.prepare ("ALTER TABLE kmmReportConfig ADD PRIMARY KEY (name);");
+ if (!q.exec()) {
+ buildError (q, __func__, "Error updating kmmReportConfig pkey");
+ return (1);
+ }
+ // change kmmFileInfo add budgets unsigned bigint after kvps
+ if (!addColumn(m_db.m_tables["kmmFileInfo"],
+ MyMoneyDbIntColumn("budgets", MyMoneyDbIntColumn::BIG, false)))
+ return (1);
+ // change kmmFileInfo add hiBudgetId unsigned bigint after hiReportId
+ if (!addColumn(m_db.m_tables["kmmFileInfo"],
+ MyMoneyDbIntColumn("hiBudgetId", MyMoneyDbIntColumn::BIG, false)))
+ return (1);
+ // change kmmFileInfo add logonUser
+ if (!addColumn(m_db.m_tables["kmmFileInfo"],
+ MyMoneyDbColumn("logonUser", "varchar(255)", false)))
+ return (1);
+ // change kmmFileInfo add logonAt datetime
+ if (!addColumn(m_db.m_tables["kmmFileInfo"],
+ MyMoneyDbDatetimeColumn("logonAt", false)))
+ return (1);
+ // change kmmAccounts add transactionCount unsigned bigint as last field
+ if (!addColumn(m_db.m_tables["kmmAccounts"],
+ MyMoneyDbIntColumn("transactionCount", MyMoneyDbIntColumn::BIG, false)))
+ return (1);
+ // calculate the transaction counts. the application logic defines an account's tx count
+ // in such a way as to count multiple splits in a tx which reference the same account as one.
+ // this is the only way I can think of to do this which will work in sqlite too.
+ // inefficient, but it only gets done once...
+ // get a list of all accounts so we'll get a zero value for those without txs
+ q.prepare ("SELECT id FROM kmmAccounts");
+ if (!q.exec()) {
+ buildError (q, __func__, "Error retrieving accounts for transaction counting");
+ return(1);
+ }
+ while (q.next()) {
+ m_transactionCountMap[q.value(0).toCString()] = 0;
+ }
+ q.prepare ("SELECT accountId, transactionId FROM kmmSplits WHERE txType = 'N' ORDER BY 1, 2");
+ if (!q.exec()) {
+ buildError (q, __func__, "Error retrieving splits for transaction counting");
+ return(1);
+ }
+ QString lastAcc, lastTx;
+ while (q.next()) {
+ QString thisAcc = q.value(0).toCString();
+ QString thisTx = q.value(1).toCString();
+ if ((thisAcc != lastAcc) || (thisTx != lastTx)) ++m_transactionCountMap[thisAcc];
+ lastAcc = thisAcc;
+ lastTx = thisTx;
+ }
+ QMap<QString, unsigned long>::ConstIterator itm;
+ q.prepare("UPDATE kmmAccounts SET transactionCount = :txCount WHERE id = :id;");
+ for (itm = m_transactionCountMap.begin(); itm != m_transactionCountMap.end(); ++itm) {
+ q.bindValue (":txCount", QString::number(itm.data()));
+ q.bindValue (":id", itm.key());
+ if (!q.exec()) {
+ buildError(q, __func__, "Error updating transaction count");
+ return (1);
+ }
+ }
+ m_transactionCountMap.clear();
+ // there were considerable problems with record counts in V0, so rebuild them
+ readFileInfo();
+ m_institutions = getRecCount("kmmInstitutions");
+ m_accounts = getRecCount("kmmAccounts");
+ m_payees = getRecCount("kmmPayees");
+ m_transactions = getRecCount("kmmTransactions WHERE txType = 'N'");
+ m_splits = getRecCount("kmmSplits");
+ m_securities = getRecCount("kmmSecurities");
+ m_prices = getRecCount("kmmPrices");
+ m_currencies = getRecCount("kmmCurrencies");
+ m_schedules = getRecCount("kmmSchedules");
+ m_reports = getRecCount("kmmReportConfig");
+ m_kvps = getRecCount("kmmKeyValuePairs");
+ m_budgets = getRecCount("kmmBudgetConfig");
+ writeFileInfo();
+ /* if sqlite {
+ q.prepare("VACUUM;");
+ if (!q.exec()) {
+ buildError (q, __func__, "Error vacuuming database");
+ return(1);
+ }
+ }*/
+ endCommitUnit(__func__);
+ return (0);
+}
+
+int MyMoneyStorageSql::upgradeToV2() {
+ DBG("*** Entering MyMoneyStorageSql::upgradeToV2");
+ //SQLite3 now supports ALTER TABLE...ADD COLUMN, so only die if version < 3
+ //if (m_dbType == Sqlite3) qFatal("SQLite upgrade NYI");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ // change kmmSplits add price fields
+ if (!addColumn(m_db.m_tables["kmmSplits"],
+ MyMoneyDbTextColumn("price")))
+ return (1);
+ if (!addColumn(m_db.m_tables["kmmSplits"],
+ MyMoneyDbTextColumn("priceFormatted")))
+ return (1);
+ endCommitUnit(__func__);
+ return (0);
+}
+
+int MyMoneyStorageSql::upgradeToV3() {
+ DBG("*** Entering MyMoneyStorageSql::upgradeToV3");
+ //SQLite3 now supports ALTER TABLE...ADD COLUMN, so only die if version < 3
+ //if (m_dbType == Sqlite3) qFatal("SQLite upgrade NYI");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ // The default value is given here to populate the column.
+ q.prepare ("ALTER TABLE kmmSchedules ADD COLUMN " +
+ MyMoneyDbIntColumn("occurenceMultiplier",
+ MyMoneyDbIntColumn::SMALL, false, false, true)
+ .generateDDL(m_dbType) + " DEFAULT 0;");
+ if (!q.exec()) {
+ buildError (q, __func__, "Error adding kmmSchedules.occurenceMultiplier");
+ return (1);
+ }
+ //The default is less than any useful value, so as each schedule is hit, it will update
+ //itself to the appropriate value.
+ endCommitUnit(__func__);
+ return 0;
+}
+
+int MyMoneyStorageSql::upgradeToV4() {
+ DBG("*** Entering MyMoneyStorageSql::upgradeToV4");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ QStringList list;
+ list << "transactionId" << "splitId";
+ q.prepare (MyMoneyDbIndex("kmmSplits", "kmmTx_Split", list, false).generateDDL(m_dbType) + ";");
+ if (!q.exec()) {
+ buildError (q, __func__, "Error adding kmmSplits index on (transactionId, splitId)");
+ return (1);
+ }
+ endCommitUnit(__func__);
+ return 0;
+}
+
+int MyMoneyStorageSql::upgradeToV5() {
+ DBG("*** Entering MyMoneyStorageSql::upgradeToV5");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ if (!addColumn(m_db.m_tables["kmmSplits"],
+ MyMoneyDbTextColumn("bankId")))
+ return (1);
+ if (!addColumn(m_db.m_tables["kmmPayees"],
+ MyMoneyDbTextColumn("notes", MyMoneyDbTextColumn::LONG)))
+ return (1);
+ if (!addColumn(m_db.m_tables["kmmPayees"],
+ MyMoneyDbColumn("defaultAccountId", "varchar(32)")))
+ return (1);
+ if (!addColumn(m_db.m_tables["kmmPayees"],
+ MyMoneyDbIntColumn("matchData", MyMoneyDbIntColumn::TINY,
+ false)))
+ return (1);
+ if (!addColumn(m_db.m_tables["kmmPayees"],
+ MyMoneyDbColumn("matchIgnoreCase", "char(1)")))
+ return (1);
+ if (!addColumn(m_db.m_tables["kmmPayees"],
+ MyMoneyDbTextColumn("matchKeys")))
+ return (1);
+ const MyMoneyDbTable& t = m_db.m_tables["kmmReportConfig"];
+ if (m_dbType != Sqlite3) {
+ q.prepare (t.dropPrimaryKeyString(m_dbType));
+ if (!q.exec()) {
+ buildError (q, __func__, "Error dropping Report table keys");
+ return (1);
+ }
+ } else {
+ if (!sqliteAlterTable(t))
+ return (1);
+ }
+ endCommitUnit(__func__);
+ return 0;
+}
+
+int MyMoneyStorageSql::upgradeToV6() {
+ DBG("*** Entering MyMoneyStorageSql::upgradeToV6");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ // add separate fix level in file info
+ if (!addColumn("kmmFileInfo", "fixLevel"))
+ return (1);
+ // upgrade Mysql to InnoDB transaction-safe engine
+ if (m_dbType == Mysql) {
+ for (QMapConstIterator<QString, MyMoneyDbTable> tt = m_db.tableBegin(); tt != m_db.tableEnd(); ++tt) {
+ q.prepare(QString("ALTER TABLE %1 ENGINE = InnoDB;").arg(tt.data().name()));
+ if (!q.exec()) {
+ buildError (q, __func__, "Error updating to InnoDB");
+ return (1);
+ }
+ }
+ }
+ // add unique id to reports table
+ if (!addColumn(m_db.m_tables["kmmReportConfig"],
+ MyMoneyDbColumn("id", "varchar(32)")))
+ return(1);
+ // read and write reports to get ids inserted
+ readFileInfo();
+ QMap<QString, MyMoneyReport> reportList =
+ fetchReports();
+ // the V5 database allowed lots of duplicate reports with no
+ // way to distinguish between them. The fetchReports call
+ // will have effectively removed all duplicates
+ // so we now delete from the db and re-write them
+ q.prepare("DELETE FROM kmmReportConfig;");
+ if (!q.exec()) {
+ buildError (q, __func__, "Error deleting reports");
+ return (1);
+ }
+ unsigned long long hiReportId = 0;
+ QMap<QString, MyMoneyReport>::const_iterator it_r;
+ for(it_r = reportList.begin(); it_r != reportList.end(); ++it_r) {
+ MyMoneyReport r = *it_r;
+ hiReportId = calcHighId(hiReportId, r.id());
+ q.prepare (m_db.m_tables["kmmReportConfig"].insertString());
+ writeReport(*it_r, q);
+ }
+ m_hiIdReports = hiReportId;
+ m_storage->loadReportId(m_hiIdReports);
+ // sqlite3 doesn't support ADD PRIMARY KEY
+ if (m_dbType == Sqlite3) {
+ if (!sqliteAlterTable(m_db.m_tables["kmmReportConfig"])) {
+ return (1);
+ }
+ } else {
+ q.prepare ("ALTER TABLE kmmReportConfig ADD PRIMARY KEY (id);");
+ if (!q.exec()) {
+ buildError (q, __func__, "Error updating kmmReportConfig pkey");
+ return (1);
+ }
+ }
+ endCommitUnit(__func__);
+ return 0;
+}
+
+/* This function attempts to cater for limitations in the sqlite ALTER TABLE
+ statement. It should enable us to drop a primary key, and drop columns */
+bool MyMoneyStorageSql::sqliteAlterTable(const MyMoneyDbTable& t) {
+ DBG("*** Entering MyMoneyStorageSql::sqliteAlterTable");
+ QString tempTableName = t.name();
+ tempTableName.replace("kmm", "tmp");
+ QSqlQuery q(this);
+ q.prepare (QString("ALTER TABLE " + t.name() + " RENAME TO " + tempTableName + ";"));
+ if (!q.exec()) {
+ buildError (q, __func__, "Error renaming table");
+ return false;
+ }
+ createTable(t);
+ q.prepare (QString("INSERT INTO " + t.name() + " (" + t.columnList() +
+ ") SELECT " + t.columnList() + " FROM " + tempTableName + ";"));
+ if (!q.exec()) {
+ buildError (q, __func__, "Error inserting into new table");
+ return false;
+ }
+ q.prepare (QString("DROP TABLE " + tempTableName + ";"));
+ if (!q.exec()) {
+ buildError (q, __func__, "Error dropping old table");
+ return false;
+ }
+ return true;
+}
+
+long unsigned MyMoneyStorageSql::getRecCount (const QString& table) const {
+ DBG("*** Entering MyMoneyStorageSql::getRecCount");
+ MyMoneySqlQuery q(const_cast <MyMoneyStorageSql*> (this));
+ q.prepare(QString("SELECT COUNT(*) FROM %1;").arg(table));
+ if ((!q.exec()) || (!q.next())) {
+ buildError (q, __func__, "error retrieving record count");
+ qFatal("Error retrieving record count"); // definitely shouldn't happen
+ }
+ return ((unsigned long) q.value(0).toULongLong());
+}
+
+int MyMoneyStorageSql::createTables () {
+ DBG("*** Entering MyMoneyStorageSql::createTables");
+ // check tables, create if required
+ // convert everything to lower case, since SQL standard is case insensitive
+ // table and column names (when not delimited), but some DBMSs disagree.
+ QStringList lowerTables = tables(QSql::AllTables);
+ for (QStringList::iterator i = lowerTables.begin(); i != lowerTables.end(); ++i) {
+ (*i) = (*i).lower();
+ }
+
+ for (QMapConstIterator<QString, MyMoneyDbTable> tt = m_db.tableBegin(); tt != m_db.tableEnd(); ++tt) {
+ if (!lowerTables.contains(tt.key().lower())) createTable (tt.data());
+ }
+
+ MyMoneySqlQuery q(this);
+ for (QMapConstIterator<QString, MyMoneyDbView> tt = m_db.viewBegin(); tt != m_db.viewEnd(); ++tt) {
+ if (!lowerTables.contains(tt.key().lower())) {
+ q.prepare (tt.data().createString());
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString ("creating view %1").arg(tt.key())));
+ }
+ }
+
+ // get the current db version from kmmFileInfo.
+ // upgrade if necessary.
+
+ return (upgradeDb()); // any errors will be caught by exception handling
+}
+
+void MyMoneyStorageSql::createTable (const MyMoneyDbTable& t) {
+ DBG("*** Entering MyMoneyStorageSql::createTable");
+// create the tables
+ QStringList ql = QStringList::split('\n', t.generateCreateSQL(m_dbType));
+ MyMoneySqlQuery q(this);
+ for (unsigned int i = 0; i < ql.count(); ++i) {
+ q.prepare (ql[i]);
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString ("creating table/index %1").arg(t.name())));
+ }
+}
+
+int MyMoneyStorageSql::isEmpty () {
+ DBG("*** Entering MyMoneyStorageSql::isEmpty");
+ // check all tables are empty
+ QMapConstIterator<QString, MyMoneyDbTable> tt = m_db.tableBegin();
+ int recordCount = 0;
+ MyMoneySqlQuery q(this);
+ while ((tt != m_db.tableEnd()) && (recordCount == 0)) {
+ q.prepare (QString("select count(*) from %1;").arg((*tt).name()));
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "getting record count"));
+ if (!q.next()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "retrieving record count"));
+ recordCount += q.value(0).toInt();
+ ++tt;
+ }
+
+ if (recordCount != 0) {
+ return (-1); // not empty
+ } else {
+ return (0);
+ }
+}
+
+void MyMoneyStorageSql::clean() {
+ DBG("*** Entering MyMoneyStorageSql::clean");
+// delete all existing records
+ QMapConstIterator<QString, MyMoneyDbTable> it = m_db.tableBegin();
+ MyMoneySqlQuery q(this);
+ while (it != m_db.tableEnd()) {
+ q.prepare(QString("DELETE from %1;").arg(it.key()));
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString ("cleaning database")));
+ ++it;
+ }
+}
+
+//////////////////////////////////////////////////////////////////
+
+bool MyMoneyStorageSql::readFile(void) {
+ DBG("*** Entering MyMoneyStorageSql::readFile");
+ m_displayStatus = true;
+ try {
+ readFileInfo();
+ readInstitutions();
+ if (m_loadAll) {
+ readPayees();
+ } else {
+ QValueList<QString> user;
+ user.append(QString("USER"));
+ readPayees(user);
+ }
+ //TRACE("done payees");
+ readCurrencies();
+ //TRACE("done currencies");
+ readSecurities();
+ //TRACE("done securities");
+ readAccounts();
+ if (m_loadAll) {
+ readTransactions();
+ } else {
+ if (m_preferred.filterSet().singleFilter.accountFilter) readTransactions (m_preferred);
+ }
+ //TRACE("done accounts");
+ readSchedules();
+ //TRACE("done schedules");
+ readPrices();
+ //TRACE("done prices");
+ readReports();
+ //TRACE("done reports");
+ readBudgets();
+ //TRACE("done budgets");
+ //FIXME - ?? if (m_mode == 0)
+ //m_storage->rebuildAccountBalances();
+ // this seems to be nonsense, but it clears the dirty flag
+ // as a side-effect.
+ m_storage->setLastModificationDate(m_storage->lastModificationDate());
+ // FIXME?? if (m_mode == 0) m_storage = NULL;
+ // make sure the progress bar is not shown any longer
+ signalProgress(-1, -1);
+ m_displayStatus = false;
+ //MyMoneySqlQuery::traceOn();
+ return true;
+ } catch (QString& s) {
+ return false;
+ }
+}
+
+// The following is called from 'SaveAsDatabase'
+bool MyMoneyStorageSql::writeFile(void) {
+ DBG("*** Entering MyMoneyStorageSql::writeFile");
+ // initialize record counts and hi ids
+ m_institutions = m_accounts = m_payees = m_transactions = m_splits
+ = m_securities = m_prices = m_currencies = m_schedules = m_reports = m_kvps = m_budgets = 0;
+ m_hiIdInstitutions = m_hiIdPayees = m_hiIdAccounts = m_hiIdTransactions =
+ m_hiIdSchedules = m_hiIdSecurities = m_hiIdReports = m_hiIdBudgets = 0;
+ m_displayStatus = true;
+ try{
+ startCommitUnit(__func__);
+ writeInstitutions ();
+ writePayees();
+ writeAccounts();
+ writeTransactions();
+ writeSchedules();
+ writeSecurities();
+ writePrices();
+ writeCurrencies();
+ writeReports();
+ writeBudgets();
+ writeFileInfo();
+ // this seems to be nonsense, but it clears the dirty flag
+ // as a side-effect.
+ //m_storage->setLastModificationDate(m_storage->lastModificationDate());
+ // FIXME?? if (m_mode == 0) m_storage = NULL;
+ endCommitUnit(__func__);
+ // make sure the progress bar is not shown any longer
+ signalProgress(-1, -1);
+ m_displayStatus = false;
+ return true;
+} catch (QString& s) {
+ return false;
+}
+}
+// --------------- SQL Transaction (commit unit) handling -----------------------------------
+void MyMoneyStorageSql::startCommitUnit (const QString& callingFunction) {
+ DBG("*** Entering MyMoneyStorageSql::startCommitUnit");
+ if (m_commitUnitStack.isEmpty()) {
+ if (!transaction()) throw new MYMONEYEXCEPTION(buildError (MyMoneySqlQuery(), __func__, "starting commit unit"));
+ }
+ m_commitUnitStack.push(callingFunction);
+}
+
+bool MyMoneyStorageSql::endCommitUnit (const QString& callingFunction) {
+ DBG("*** Entering MyMoneyStorageSql::endCommitUnit");
+ // for now, we don't know if there were any changes made to the data so
+ // we expect the data to have changed. This assumption causes some unnecessary
+ // repaints of the UI here and there, but for now it's ok. If we can determine
+ // that the commit() really changes the data, we can return that information
+ // as value of this method.
+ bool rc = true;
+ if (callingFunction != m_commitUnitStack.top())
+ qDebug("%s", QString("%1 - %2 s/be %3").arg(__func__).arg(callingFunction).arg(m_commitUnitStack.top()).data());
+ m_commitUnitStack.pop();
+ if (m_commitUnitStack.isEmpty()) {
+ if (!commit()) throw new MYMONEYEXCEPTION(buildError (MyMoneySqlQuery(), __func__, "ending commit unit"));
+ }
+ return rc;
+}
+
+void MyMoneyStorageSql::cancelCommitUnit (const QString& callingFunction) {
+ DBG("*** Entering MyMoneyStorageSql::cancelCommitUnit");
+ if (callingFunction != m_commitUnitStack.top())
+ qDebug("%s", QString("%1 - %2 s/be %3").arg(__func__).arg(callingFunction).arg(m_commitUnitStack.top()).data());
+ if (m_commitUnitStack.isEmpty()) return;
+ m_commitUnitStack.clear();
+ if (!rollback()) throw new MYMONEYEXCEPTION(buildError (MyMoneySqlQuery(), __func__, "cancelling commit unit"));
+}
+
+/////////////////////////////////////////////////////////////////////
+void MyMoneyStorageSql::fillStorage() {
+ DBG("*** Entering MyMoneyStorageSql::fillStorage");
+// if (!m_transactionListRead) // make sure we have loaded everything
+ readTransactions();
+// if (!m_payeeListRead)
+ readPayees();
+}
+
+//------------------------------ Write SQL routines ----------------------------------------
+// **** Institutions ****
+void MyMoneyStorageSql::writeInstitutions() {
+ DBG("*** Entering MyMoneyStorageSql::writeInstitutions");
+ // first, get a list of what's on the database
+ // anything not in the list needs to be inserted
+ // anything which is will be updated and removed from the list
+ // anything left over at the end will need to be deleted
+ // this is an expensive and inconvenient way to do things; find a better way
+ // one way would be to build the lists when reading the db
+ // unfortunately this object does not persist between read and write
+ // it would also be nice if we could tell which objects had been updated since we read them in
+ QValueList<QString> dbList;
+ MyMoneySqlQuery q(this);
+ q.prepare("SELECT id FROM kmmInstitutions;");
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "building Institution list"));
+ while (q.next()) dbList.append(q.value(0).toString());
+
+ const QValueList<MyMoneyInstitution> list = m_storage->institutionList();
+ QValueList<MyMoneyInstitution>::ConstIterator it;
+ MyMoneySqlQuery q2(this);
+ q.prepare (m_db.m_tables["kmmInstitutions"].updateString());
+ q2.prepare (m_db.m_tables["kmmInstitutions"].insertString());
+ signalProgress(0, list.count(), "Writing Institutions...");
+ for(it = list.begin(); it != list.end(); ++it) {
+ if (dbList.contains((*it).id())) {
+ dbList.remove ((*it).id());
+ writeInstitution(*it, q);
+ } else {
+ writeInstitution(*it, q2);
+ }
+ signalProgress (++m_institutions, 0);
+ }
+
+ if (!dbList.isEmpty()) {
+ QValueList<QString>::const_iterator it = dbList.begin();
+ q.prepare("DELETE FROM kmmInstitutions WHERE id = :id");
+ while (it != dbList.end()) {
+ q.bindValue(":id", (*it));
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "deleting Institution"));
+ deleteKeyValuePairs("OFXSETTINGS", (*it));
+ ++it;
+ }
+ }
+}
+
+void MyMoneyStorageSql::addInstitution(const MyMoneyInstitution& inst) {
+ DBG("*** Entering MyMoneyStorageSql::addInstitution");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmInstitutions"].insertString());
+ writeInstitution(inst ,q);
+ ++m_institutions;
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::modifyInstitution(const MyMoneyInstitution& inst) {
+ DBG("*** Entering MyMoneyStorageSql::modifyInstitution");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmInstitutions"].updateString());
+ deleteKeyValuePairs("OFXSETTINGS", inst.id());
+ writeInstitution(inst ,q);
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::removeInstitution(const MyMoneyInstitution& inst) {
+ DBG("*** Entering MyMoneyStorageSql::removeInstitution");
+ startCommitUnit(__func__);
+ deleteKeyValuePairs("OFXSETTINGS", inst.id());
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmInstitutions"].deleteString());
+ q.bindValue(":id", inst.id());
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("deleting Institution")));
+ --m_institutions;
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::writeInstitution(const MyMoneyInstitution& i, MyMoneySqlQuery& q) {
+ DBG("*** Entering MyMoneyStorageSql::writeInstitution");
+ q.bindValue(":id", i.id());
+ q.bindValue(":name", i.name());
+ q.bindValue(":manager", i.manager());
+ q.bindValue(":routingCode", i.sortcode());
+ q.bindValue(":addressStreet", i.street());
+ q.bindValue(":addressCity", i.city());
+ q.bindValue(":addressZipcode", i.postcode());
+ q.bindValue(":telephone", i.telephone());
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("writing Institution")));
+ writeKeyValuePairs("OFXSETTINGS", i.id(), i.pairs());
+ m_hiIdInstitutions = calcHighId(m_hiIdInstitutions, i.id());
+}
+
+// **** Payees ****
+void MyMoneyStorageSql::writePayees() {
+ DBG("*** Entering MyMoneyStorageSql::writePayees");
+ // first, get a list of what's on the database (see writeInstitutions)
+ QValueList<QString> dbList;
+ MyMoneySqlQuery q(this);
+ q.prepare("SELECT id FROM kmmPayees;");
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "building Payee list"));
+ while (q.next()) dbList.append(q.value(0).toString());
+
+ QValueList<MyMoneyPayee> list = m_storage->payeeList();
+ MyMoneyPayee user(QString("USER"), m_storage->user());
+ list.prepend(user);
+ signalProgress(0, list.count(), "Writing Payees...");
+ MyMoneySqlQuery q2(this);
+ q.prepare (m_db.m_tables["kmmPayees"].updateString());
+ q2.prepare (m_db.m_tables["kmmPayees"].insertString());
+ QValueList<MyMoneyPayee>::ConstIterator it;
+ for(it = list.begin(); it != list.end(); ++it) {
+ if (dbList.contains((*it).id())) {
+ dbList.remove ((*it).id());
+ writePayee(*it, q);
+ } else {
+ writePayee(*it, q2);
+ }
+ signalProgress(++m_payees, 0);
+ }
+
+ if (!dbList.isEmpty()) {
+ QValueList<QString>::const_iterator it = dbList.begin();
+ q.prepare(m_db.m_tables["kmmPayees"].deleteString());
+ while (it != dbList.end()) {
+ q.bindValue(":id", (*it));
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "deleting Payee"));
+ m_payees -= q.numRowsAffected();
+ ++it;
+ }
+ }
+}
+
+void MyMoneyStorageSql::addPayee(const MyMoneyPayee& payee) {
+ DBG("*** Entering MyMoneyStorageSql::addPayee");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmPayees"].insertString());
+ writePayee(payee,q);
+ ++m_payees;
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::modifyPayee(const MyMoneyPayee& payee) {
+ DBG("*** Entering MyMoneyStorageSql::modifyPayee");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmPayees"].updateString());
+ writePayee(payee,q);
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::modifyUserInfo(const MyMoneyPayee& payee) {
+ DBG("*** Entering MyMoneyStorageSql::modifyUserInfo");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmPayees"].updateString());
+ writePayee(payee,q, true);
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::removePayee(const MyMoneyPayee& payee) {
+ DBG("*** Entering MyMoneyStorageSql::removePayee");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmPayees"].deleteString());
+ q.bindValue(":id", payee.id());
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("deleting Payee")));
+ --m_payees;
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::writePayee(const MyMoneyPayee& p, MyMoneySqlQuery& q, bool isUserInfo) {
+ DBG("*** Entering MyMoneyStorageSql::writePayee");
+ if (isUserInfo) {
+ q.bindValue(":id", "USER");
+ } else {
+ q.bindValue(":id", p.id());
+ }
+ q.bindValue(":name", p.name());
+ q.bindValue(":reference", p.reference());
+ q.bindValue(":email", p.email());
+ q.bindValue(":addressStreet", p.address());
+ q.bindValue(":addressCity", p.city());
+ q.bindValue(":addressZipcode", p.postcode());
+ q.bindValue(":addressState", p.state());
+ q.bindValue(":telephone", p.telephone());
+ q.bindValue(":notes", p.notes());
+ q.bindValue(":defaultAccountId", p.defaultAccountId());
+ bool ignoreCase;
+ QString matchKeys;
+ MyMoneyPayee::payeeMatchType type = p.matchData(ignoreCase, matchKeys);
+ q.bindValue(":matchData", static_cast<unsigned int>(type));
+ if (ignoreCase) q.bindValue(":matchIgnoreCase", "Y");
+ else q.bindValue(":matchIgnoreCase", "N");
+ q.bindValue(":matchKeys", matchKeys);
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString ("writing Payee")));
+ if (!isUserInfo) m_hiIdPayees = calcHighId(m_hiIdPayees, p.id());
+}
+
+// **** Accounts ****
+void MyMoneyStorageSql::writeAccounts() {
+ DBG("*** Entering MyMoneyStorageSql::writeAccounts");
+ // first, get a list of what's on the database (see writeInstitutions)
+ QValueList<QString> dbList;
+ MyMoneySqlQuery q(this);
+ q.prepare("SELECT id FROM kmmAccounts;");
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "building Account list"));
+ while (q.next()) dbList.append(q.value(0).toString());
+
+ QValueList<MyMoneyAccount> list;
+ m_storage->accountList(list);
+ QValueList<MyMoneyAccount>::ConstIterator it;
+ signalProgress(0, list.count(), "Writing Accounts...");
+ if (dbList.isEmpty()) { // new table, insert standard accounts
+ q.prepare (m_db.m_tables["kmmAccounts"].insertString());
+ } else {
+ q.prepare (m_db.m_tables["kmmAccounts"].updateString());
+ }
+ // Attempt to write the standard accounts. For an empty db, this will fail.
+ TRY
+ writeAccount(m_storage->asset(), q); ++m_accounts;
+ writeAccount(m_storage->liability(), q); ++m_accounts;
+ writeAccount(m_storage->expense(), q); ++m_accounts;
+ writeAccount(m_storage->income(), q); ++m_accounts;
+ writeAccount(m_storage->equity(), q); ++m_accounts;
+ CATCH
+ delete e;
+
+ // If the above failed, assume that the database is empty and create
+ // the standard accounts by hand before writing them.
+ MyMoneyAccount acc_l;
+ acc_l.setAccountType(MyMoneyAccount::Liability);
+ acc_l.setName("Liability");
+ MyMoneyAccount liability(STD_ACC_LIABILITY, acc_l);
+
+ MyMoneyAccount acc_a;
+ acc_a.setAccountType(MyMoneyAccount::Asset);
+ acc_a.setName("Asset");
+ MyMoneyAccount asset(STD_ACC_ASSET, acc_a);
+
+ MyMoneyAccount acc_e;
+ acc_e.setAccountType(MyMoneyAccount::Expense);
+ acc_e.setName("Expense");
+ MyMoneyAccount expense(STD_ACC_EXPENSE, acc_e);
+
+ MyMoneyAccount acc_i;
+ acc_i.setAccountType(MyMoneyAccount::Income);
+ acc_i.setName("Income");
+ MyMoneyAccount income(STD_ACC_INCOME, acc_i);
+
+ MyMoneyAccount acc_q;
+ acc_q.setAccountType(MyMoneyAccount::Equity);
+ acc_q.setName("Equity");
+ MyMoneyAccount equity(STD_ACC_EQUITY, acc_q);
+
+ writeAccount(asset, q); ++m_accounts;
+ writeAccount(expense, q); ++m_accounts;
+ writeAccount(income, q); ++m_accounts;
+ writeAccount(liability, q); ++m_accounts;
+ writeAccount(equity, q); ++m_accounts;
+ ECATCH
+
+ int i = 0;
+ MyMoneySqlQuery q2(this);
+ q.prepare (m_db.m_tables["kmmAccounts"].updateString());
+ q2.prepare (m_db.m_tables["kmmAccounts"].insertString());
+ // Update the accounts that exist; insert the ones that do not.
+ for(it = list.begin(); it != list.end(); ++it, ++i) {
+ m_transactionCountMap[(*it).id()] = m_storagePtr->transactionCount((*it).id());
+ if (dbList.contains((*it).id())) {
+ dbList.remove ((*it).id());
+ writeAccount(*it, q);
+ } else {
+ writeAccount(*it, q2);
+ }
+ signalProgress(++m_accounts, 0);
+ }
+
+ // Delete the accounts that are in the db but no longer in memory.
+ if (!dbList.isEmpty()) {
+ QValueList<QString>::const_iterator it = dbList.begin();
+ q.prepare("DELETE FROM kmmAccounts WHERE id = :id");
+ while (it != dbList.end()) {
+ if (!m_storagePtr->isStandardAccount(*it)) {
+ q.bindValue(":id", (*it));
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "deleting Account"));
+ deleteKeyValuePairs("ACCOUNT", (*it));
+ deleteKeyValuePairs("ONLINEBANKING", (*it));
+ }
+ ++it;
+ }
+ }
+}
+
+void MyMoneyStorageSql::addAccount(const MyMoneyAccount& acc) {
+ DBG("*** Entering MyMoneyStorageSql::addAccount");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmAccounts"].insertString());
+ writeAccount(acc,q);
+ ++m_accounts;
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::modifyAccount(const MyMoneyAccount& acc) {
+ DBG("*** Entering MyMoneyStorageSql::modifyAccount");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmAccounts"].updateString());
+ deleteKeyValuePairs("ACCOUNT", acc.id());
+ deleteKeyValuePairs("ONLINEBANKING", acc.id());
+ writeAccount(acc,q);
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::removeAccount(const MyMoneyAccount& acc) {
+ DBG("*** Entering MyMoneyStorageSql::removeAccount");
+ startCommitUnit(__func__);
+ deleteKeyValuePairs("ACCOUNT", acc.id());
+ deleteKeyValuePairs("ONLINEBANKING", acc.id());
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmAccounts"].deleteString());
+ q.bindValue(":id", acc.id());
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("deleting Account")));
+ --m_accounts;
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::writeAccount(const MyMoneyAccount& acc, MyMoneySqlQuery& q) {
+ DBG("*** Entering MyMoneyStorageSql::writeAccount");
+ //MyMoneyMoney balance = m_storagePtr->balance(acc.id(), QDate());
+ q.bindValue(":id", acc.id());
+ q.bindValue(":institutionId", acc.institutionId());
+ q.bindValue(":parentId", acc.parentAccountId());
+ if (acc.lastReconciliationDate() == QDate())
+ q.bindValue(":lastReconciled", acc.lastReconciliationDate());
+ else
+ q.bindValue(":lastReconciled", acc.lastReconciliationDate().toString(Qt::ISODate));
+
+ q.bindValue(":lastModified", acc.lastModified());
+ if (acc.openingDate() == QDate())
+ q.bindValue(":openingDate", acc.openingDate());
+ else
+ q.bindValue(":openingDate", acc.openingDate().toString(Qt::ISODate));
+
+ q.bindValue(":accountNumber", acc.number());
+ q.bindValue(":accountType", acc.accountType());
+ q.bindValue(":accountTypeString", MyMoneyAccount::accountTypeToString(acc.accountType()));
+ if (acc.accountType() == MyMoneyAccount::Stock) {
+ q.bindValue(":isStockAccount", "Y");
+ } else {
+ q.bindValue(":isStockAccount", "N");
+ }
+ q.bindValue(":accountName", acc.name());
+ q.bindValue(":description", acc.description());
+ q.bindValue(":currencyId", acc.currencyId());
+
+ // This section attempts to get the balance from the database, if possible
+ // That way, the balance fields are kept in sync. If that fails, then
+ // It is assumed that the account actually knows its correct balance.
+
+ //FIXME: Using exceptions for branching always feels like a kludge.
+ // Look for a better way.
+ TRY
+ MyMoneyMoney bal = m_storagePtr->balance(acc.id(), QDate());
+ q.bindValue(":balance", bal.toString());
+ q.bindValue(":balanceFormatted",
+ bal.formatMoney("", -1, false));
+ CATCH
+ delete e;
+ q.bindValue(":balance", acc.balance().toString());
+ q.bindValue(":balanceFormatted",
+ acc.balance().formatMoney("", -1, false));
+ ECATCH
+
+ q.bindValue(":transactionCount", Q_ULLONG(m_transactionCountMap[acc.id()]));
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("writing Account")));
+
+ //Add in Key-Value Pairs for accounts.
+ //MMAccount inherits from KVPContainer AND has a KVPContainer member
+ //so handle both
+ writeKeyValuePairs("ACCOUNT", acc.id(), acc.pairs());
+ writeKeyValuePairs("ONLINEBANKING", acc.id(), acc.onlineBankingSettings().pairs());
+ m_hiIdAccounts = calcHighId(m_hiIdAccounts, acc.id());
+}
+
+// **** Transactions and Splits ****
+void MyMoneyStorageSql::writeTransactions() {
+ DBG("*** Entering MyMoneyStorageSql::writeTransactions");
+ // first, get a list of what's on the database (see writeInstitutions)
+ QValueList<QString> dbList;
+ MyMoneySqlQuery q(this);
+ q.prepare("SELECT id FROM kmmTransactions WHERE txType = 'N';");
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "building Transaction list"));
+ while (q.next()) dbList.append(q.value(0).toString());
+
+ MyMoneyTransactionFilter filter;
+ filter.setReportAllSplits(false);
+ QValueList<MyMoneyTransaction> list;
+ m_storage->transactionList(list, filter);
+ signalProgress(0, list.count(), "Writing Transactions...");
+ QValueList<MyMoneyTransaction>::ConstIterator it;
+ int i = 0;
+ MyMoneySqlQuery q2(this);
+ q.prepare (m_db.m_tables["kmmTransactions"].updateString());
+ q2.prepare (m_db.m_tables["kmmTransactions"].insertString());
+ for(it = list.begin(); it != list.end(); ++it, ++i) {
+ if (dbList.contains((*it).id())) {
+ dbList.remove ((*it).id());
+ writeTransaction((*it).id(), *it, q, "N");
+ } else {
+ writeTransaction((*it).id(), *it, q2, "N");
+ }
+ signalProgress(++m_transactions, 0);
+ }
+
+ if (!dbList.isEmpty()) {
+ QValueList<QString>::const_iterator it = dbList.begin();
+ while (it != dbList.end()) {
+ deleteTransaction(*it);
+ ++it;
+ }
+ }
+}
+
+void MyMoneyStorageSql::addTransaction (const MyMoneyTransaction& tx) {
+ DBG("*** Entering MyMoneyStorageSql::addTransaction");
+ startCommitUnit(__func__);
+ // add the transaction and splits
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmTransactions"].insertString());
+ writeTransaction(tx.id(), tx, q, "N");
+ ++m_transactions;
+ // for each split account, update lastMod date, balance, txCount
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ for(it_s = tx.splits().begin(); it_s != tx.splits().end(); ++it_s) {
+ //MyMoneyAccount acc = m_storagePtr->account((*it_s).accountId());
+ MyMoneyAccount acc = MyMoneyFile::instance()->account((*it_s).accountId());
+ ++m_transactionCountMap[acc.id()];
+ modifyAccount(acc);
+ }
+ // in the fileinfo record, update lastMod, txCount, next TxId
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::modifyTransaction (const MyMoneyTransaction& tx) {
+ DBG("*** Entering MyMoneyStorageSql::modifyTransaction");
+ startCommitUnit(__func__);
+ // remove the splits of the old tx from the count table
+ MyMoneySqlQuery q(this);
+ q.prepare ("SELECT accountId FROM kmmSplits WHERE transactionId = :txId;");
+ q.bindValue(":txId", tx.id());
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "retrieving old splits"));
+ while (q.next()) {
+ QString id = q.value(0).toCString();
+ --m_transactionCountMap[id];
+ }
+ // add the transaction and splits
+ q.prepare (m_db.m_tables["kmmTransactions"].updateString());
+ writeTransaction(tx.id(), tx, q, "N");
+ // for each split account, update lastMod date, balance, txCount
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ for(it_s = tx.splits().begin(); it_s != tx.splits().end(); ++it_s) {
+ //MyMoneyAccount acc = m_storagePtr->account((*it_s).accountId());
+ MyMoneyAccount acc = MyMoneyFile::instance()->account((*it_s).accountId());
+ ++m_transactionCountMap[acc.id()];
+ modifyAccount(acc);
+ }
+ writeSplits(tx.id(), "N", tx.splits());
+ // in the fileinfo record, update lastMod
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::removeTransaction(const MyMoneyTransaction& tx) {
+ DBG("*** Entering MyMoneyStorageSql::removeTransaction");
+ startCommitUnit(__func__);
+ deleteTransaction(tx.id());
+ --m_transactions;
+
+ // for each split account, update lastMod date, balance, txCount
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ for(it_s = tx.splits().begin(); it_s != tx.splits().end(); ++it_s) {
+ MyMoneyAccount acc = m_storagePtr->account((*it_s).accountId());
+ --m_transactionCountMap[acc.id()];
+ modifyAccount(acc);
+ }
+ // in the fileinfo record, update lastModDate, txCount
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::deleteTransaction(const QString& id) {
+ DBG("*** Entering MyMoneyStorageSql::deleteTransaction");
+ MyMoneySqlQuery q(this);
+ q.prepare("DELETE FROM kmmSplits WHERE transactionId = :transactionId;");
+ q.bindValue(":transactionId", id);
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "deleting Splits"));
+
+ q.prepare ("DELETE FROM kmmKeyValuePairs WHERE kvpType = 'SPLIT' "
+ "AND kvpId LIKE '" + id + "%'");
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "deleting Splits KVP"));
+
+ m_splits -= q.numRowsAffected();
+ deleteKeyValuePairs("TRANSACTION", id);
+ q.prepare(m_db.m_tables["kmmTransactions"].deleteString());
+ q.bindValue(":id", id);
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "deleting Transaction"));
+}
+
+void MyMoneyStorageSql::writeTransaction(const QString& txId, const MyMoneyTransaction& tx, MyMoneySqlQuery& q, const QString& type) {
+ DBG("*** Entering MyMoneyStorageSql::writeTransaction");
+ q.bindValue(":id", txId);
+ q.bindValue(":txType", type);
+ q.bindValue(":postDate", tx.postDate().toString(Qt::ISODate));
+ q.bindValue(":memo", tx.memo());
+ q.bindValue(":entryDate", tx.entryDate().toString(Qt::ISODate));
+ q.bindValue(":currencyId", tx.commodity());
+ q.bindValue(":bankId", tx.bankID());
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("writing Transaction")));
+
+ m_txPostDate = tx.postDate(); // FIXME: TEMP till Tom puts date in split object
+ QValueList<MyMoneySplit> splitList = tx.splits();
+ writeSplits(txId, type, splitList);
+
+ //Add in Key-Value Pairs for transactions.
+ deleteKeyValuePairs("TRANSACTION", txId);
+ writeKeyValuePairs("TRANSACTION", txId, tx.pairs());
+ m_hiIdTransactions = calcHighId(m_hiIdTransactions, tx.id());
+}
+
+void MyMoneyStorageSql::writeSplits(const QString& txId, const QString& type, const QValueList<MyMoneySplit>& splitList) {
+ DBG("*** Entering MyMoneyStorageSql::writeSplits");
+ // first, get a list of what's on the database (see writeInstitutions)
+ QValueList<unsigned int> dbList;
+ MyMoneySqlQuery q(this);
+ q.prepare("SELECT splitId FROM kmmSplits where transactionId = :id;");
+ q.bindValue(":id", txId);
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "building Split list"));
+ while (q.next()) dbList.append(q.value(0).toUInt());
+
+ QValueList<MyMoneySplit>::const_iterator it;
+ unsigned int i;
+ MyMoneySqlQuery q2(this);
+ q.prepare (m_db.m_tables["kmmSplits"].updateString());
+ q2.prepare (m_db.m_tables["kmmSplits"].insertString());
+ for(it = splitList.begin(), i = 0; it != splitList.end(); ++it, ++i) {
+ if (dbList.contains(i)) {
+ dbList.remove (i);
+ writeSplit(txId, (*it), type, i, q);
+ } else {
+ ++m_splits;
+ writeSplit(txId, (*it), type, i, q2);
+ }
+ }
+
+ if (!dbList.isEmpty()) {
+ q.prepare("DELETE FROM kmmSplits WHERE transactionId = :txId AND splitId = :splitId");
+ QValueList<unsigned int>::const_iterator it = dbList.begin();
+ while (it != dbList.end()) {
+ q.bindValue(":txId", txId);
+ q.bindValue(":splitId", *it);
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "deleting Splits"));
+ ++it;
+ }
+ }
+}
+
+void MyMoneyStorageSql::writeSplit(const QString& txId, const MyMoneySplit& split,
+ const QString& type, const int splitId, MyMoneySqlQuery& q) {
+ DBG("*** Entering MyMoneyStorageSql::writeSplit");
+ q.bindValue(":transactionId", txId);
+ q.bindValue(":txType", type);
+ q.bindValue(":splitId", splitId);
+ q.bindValue(":payeeId", split.payeeId());
+ if (split.reconcileDate() == QDate())
+ q.bindValue(":reconcileDate", split.reconcileDate());
+ else
+ q.bindValue(":reconcileDate", split.reconcileDate().toString(Qt::ISODate));
+ q.bindValue(":action", split.action());
+ q.bindValue(":reconcileFlag", split.reconcileFlag());
+ q.bindValue(":value", split.value().toString());
+ q.bindValue(":valueFormatted", split.value()
+ .formatMoney("", -1, false)
+ .replace(QChar(','), QChar('.')));
+ q.bindValue(":shares", split.shares().toString());
+ MyMoneyAccount acc = m_storagePtr->account(split.accountId());
+ MyMoneySecurity sec = m_storagePtr->security(acc.currencyId());
+ q.bindValue(":sharesFormatted",
+ split.shares().
+ formatMoney("", MyMoneyMoney::denomToPrec(sec.smallestAccountFraction()), false).
+ replace(QChar(','), QChar('.')));
+ MyMoneyMoney price = split.actualPrice();
+ if (!price.isZero()) {
+ q.bindValue(":price", price.toString());
+ q.bindValue(":priceFormatted", price.formatMoney
+ ("", KMyMoneySettings::pricePrecision(), false)
+ .replace(QChar(','), QChar('.')));
+ } else {
+ q.bindValue(":price", QString());
+ q.bindValue(":priceFormatted", QString());
+ }
+ q.bindValue(":memo", split.memo());
+ q.bindValue(":accountId", split.accountId());
+ q.bindValue(":checkNumber", split.number());
+ q.bindValue(":postDate", m_txPostDate.toString(Qt::ISODate)); // FIXME: when Tom puts date into split object
+ q.bindValue(":bankId", split.bankID());
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("writing Split")));
+ deleteKeyValuePairs("SPLIT", txId + QString::number(splitId));
+ writeKeyValuePairs("SPLIT", txId + QString::number(splitId), split.pairs());
+}
+
+// **** Schedules ****
+void MyMoneyStorageSql::writeSchedules() {
+ DBG("*** Entering MyMoneyStorageSql::writeSchedules");
+ // first, get a list of what's on the database (see writeInstitutions)
+ QValueList<QString> dbList;
+ MyMoneySqlQuery q(this);
+ q.prepare("SELECT id FROM kmmSchedules;");
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "building Schedule list"));
+ while (q.next()) dbList.append(q.value(0).toString());
+
+ const QValueList<MyMoneySchedule> list = m_storage->scheduleList();
+ QValueList<MyMoneySchedule>::ConstIterator it;
+ MyMoneySqlQuery q2(this);
+ //TODO: find a way to prepare the queries outside of the loop. writeSchedule()
+ // modifies the query passed to it, so they have to be re-prepared every pass.
+ signalProgress(0, list.count(), "Writing Schedules...");
+ for(it = list.begin(); it != list.end(); ++it) {
+ q.prepare (m_db.m_tables["kmmSchedules"].updateString());
+ q2.prepare (m_db.m_tables["kmmSchedules"].insertString());
+ bool insert = true;
+ if (dbList.contains((*it).id())) {
+ dbList.remove ((*it).id());
+ insert = false;
+ writeSchedule(*it, q, insert);
+ } else {
+ writeSchedule(*it, q2, insert);
+ }
+ signalProgress(++m_schedules, 0);
+ }
+
+ if (!dbList.isEmpty()) {
+ QValueList<QString>::const_iterator it = dbList.begin();
+ while (it != dbList.end()) {
+ deleteSchedule(*it);
+ ++it;
+ }
+ }
+}
+
+void MyMoneyStorageSql::addSchedule(const MyMoneySchedule& sched) {
+ DBG("*** Entering MyMoneyStorageSql::addSchedule");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmSchedules"].insertString());
+ writeSchedule(sched,q, true);
+ ++m_schedules;
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::modifySchedule(const MyMoneySchedule& sched) {
+ DBG("*** Entering MyMoneyStorageSql::modifySchedule");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmSchedules"].updateString());
+ writeSchedule(sched,q, false);
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::removeSchedule(const MyMoneySchedule& sched) {
+ DBG("*** Entering MyMoneyStorageSql::removeSchedule");
+ startCommitUnit(__func__);
+ deleteSchedule(sched.id());
+ --m_schedules;
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::deleteSchedule (const QString& id) {
+ DBG("*** Entering MyMoneyStorageSql::deleteSchedule");
+ deleteTransaction(id);
+ MyMoneySqlQuery q(this);
+ q.prepare("DELETE FROM kmmSchedulePaymentHistory WHERE schedId = :id");
+ q.bindValue(":id", id);
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "deleting Schedule Payment History"));
+ q.prepare(m_db.m_tables["kmmSchedules"].deleteString());
+ q.bindValue(":id", id);
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "deleting Schedule"));
+ //FIXME: enable when schedules have KVPs.
+ //deleteKeyValuePairs("SCHEDULE", id);
+}
+
+void MyMoneyStorageSql::writeSchedule(const MyMoneySchedule& sch, MyMoneySqlQuery& q, bool insert) {
+ DBG("*** Entering MyMoneyStorageSql::writeSchedule");
+ q.bindValue(":id", sch.id());
+ q.bindValue(":name", sch.name());
+ q.bindValue(":type", sch.type());
+ q.bindValue(":typeString", MyMoneySchedule::scheduleTypeToString(sch.type()));
+ q.bindValue(":occurence", sch.occurencePeriod());
+ q.bindValue(":occurenceMultiplier", sch.occurenceMultiplier());
+ q.bindValue(":occurenceString", sch.occurenceToString());
+ q.bindValue(":paymentType", sch.paymentType());
+ q.bindValue(":paymentTypeString", MyMoneySchedule::paymentMethodToString(sch.paymentType()));
+ q.bindValue(":startDate", sch.startDate().toString(Qt::ISODate));
+ q.bindValue(":endDate", sch.endDate().toString(Qt::ISODate));
+ if (sch.isFixed()) {
+ q.bindValue(":fixed", "Y");
+ } else {
+ q.bindValue(":fixed", "N");
+ }
+ if (sch.autoEnter()) {
+ q.bindValue(":autoEnter", "Y");
+ } else {
+ q.bindValue(":autoEnter", "N");
+ }
+ q.bindValue(":lastPayment", sch.lastPayment());
+ q.bindValue(":nextPaymentDue", sch.nextDueDate().toString(Qt::ISODate));
+ q.bindValue(":weekendOption", sch.weekendOption());
+ q.bindValue(":weekendOptionString", MyMoneySchedule::weekendOptionToString(sch.weekendOption()));
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("writing Schedules")));
+
+ //store the payment history for this scheduled task.
+ //easiest way is to delete all and re-insert; it's not a high use table
+ q.prepare("DELETE FROM kmmSchedulePaymentHistory WHERE schedId = :id;");
+ q.bindValue(":id", sch.id());
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("deleting Schedule Payment History")));
+
+ q.prepare (m_db.m_tables["kmmSchedulePaymentHistory"].insertString());
+ QValueList<QDate> payments = sch.recordedPayments();
+ QValueList<QDate>::ConstIterator it;
+ for (it=payments.begin(); it!=payments.end(); ++it) {
+ q.bindValue(":schedId", sch.id());
+ q.bindValue(":payDate", (*it).toString(Qt::ISODate));
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("writing Schedule Payment History")));
+ }
+
+ //store the transaction data for this task.
+ if (!insert) {
+ q.prepare (m_db.m_tables["kmmTransactions"].updateString());
+ } else {
+ q.prepare (m_db.m_tables["kmmTransactions"].insertString());
+ }
+ writeTransaction(sch.id(), sch.transaction(), q, "S");
+
+ //FIXME: enable when schedules have KVPs.
+
+ //Add in Key-Value Pairs for transactions.
+ //deleteKeyValuePairs("SCHEDULE", sch.id());
+ //writeKeyValuePairs("SCHEDULE", sch.id(), sch.pairs());
+ m_hiIdSchedules = calcHighId(m_hiIdSchedules, sch.id());
+}
+
+// **** Securities ****
+void MyMoneyStorageSql::writeSecurities() {
+ DBG("*** Entering MyMoneyStorageSql::writeSecurities");
+ // first, get a list of what's on the database (see writeInstitutions)
+ QValueList<QString> dbList;
+ MyMoneySqlQuery q(this);
+ MyMoneySqlQuery q2(this);
+ q.prepare("SELECT id FROM kmmSecurities;");
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "building security list"));
+ while (q.next()) dbList.append(q.value(0).toString());
+
+ const QValueList<MyMoneySecurity> securityList = m_storage->securityList();
+ signalProgress(0, securityList.count(), "Writing Securities...");
+ q.prepare (m_db.m_tables["kmmSecurities"].updateString());
+ q2.prepare (m_db.m_tables["kmmSecurities"].insertString());
+ for(QValueList<MyMoneySecurity>::ConstIterator it = securityList.begin(); it != securityList.end(); ++it) {
+ if (dbList.contains((*it).id())) {
+ dbList.remove ((*it).id());
+ writeSecurity((*it), q);
+ } else {
+ writeSecurity((*it), q2);
+ }
+ signalProgress(++m_securities, 0);
+ }
+
+ if (!dbList.isEmpty()) {
+ q.prepare("DELETE FROM kmmSecurities WHERE id = :id");
+ q2.prepare("DELETE FROM kmmPrices WHERE fromId = :id OR toId = :id");
+ QValueList<QString>::const_iterator it = dbList.begin();
+ while (it != dbList.end()) {
+ q.bindValue(":id", (*it));
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "deleting Security"));
+ q2.bindValue(":fromId", (*it));
+ q2.bindValue(":toId", (*it));
+ if (!q2.exec()) throw new MYMONEYEXCEPTION(buildError (q2, __func__, "deleting Security"));
+ deleteKeyValuePairs("SECURITY", (*it));
+ ++it;
+ }
+ }
+}
+
+void MyMoneyStorageSql::addSecurity(const MyMoneySecurity& sec) {
+ DBG("*** Entering MyMoneyStorageSql::addSecurity");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmSecurities"].insertString());
+ writeSecurity(sec,q);
+ ++m_securities;
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::modifySecurity(const MyMoneySecurity& sec) {
+ DBG("*** Entering MyMoneyStorageSql::modifySecurity");
+ startCommitUnit(__func__);
+ deleteKeyValuePairs("SECURITY", sec.id());
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmSecurities"].updateString());
+ writeSecurity(sec,q);
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::removeSecurity(const MyMoneySecurity& sec) {
+ DBG("*** Entering MyMoneyStorageSql::removeSecurity");
+ startCommitUnit(__func__);
+ deleteKeyValuePairs("SECURITY", sec.id());
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmSecurities"].deleteString());
+ q.bindValue(":id", sec.id());
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("deleting Security")));
+ --m_securities;
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::writeSecurity(const MyMoneySecurity& security, MyMoneySqlQuery& q) {
+ DBG("*** Entering MyMoneyStorageSql::writeSecurity");
+ q.bindValue(":id", security.id());
+ q.bindValue(":name", security.name());
+ q.bindValue(":symbol", security.tradingSymbol());
+ q.bindValue(":type", static_cast<int>(security.securityType()));
+ q.bindValue(":typeString", MyMoneySecurity::securityTypeToString(security.securityType()));
+ q.bindValue(":smallestAccountFraction", security.smallestAccountFraction());
+ q.bindValue(":tradingCurrency", security.tradingCurrency());
+ q.bindValue(":tradingMarket", security.tradingMarket());
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString ("writing Securities")));
+
+ //Add in Key-Value Pairs for security
+ writeKeyValuePairs("SECURITY", security.id(), security.pairs());
+ m_hiIdSecurities = calcHighId(m_hiIdSecurities, security.id());
+}
+
+// **** Prices ****
+void MyMoneyStorageSql::writePrices() {
+ DBG("*** Entering MyMoneyStorageSql::writePrices");
+ // due to difficulties in matching and determining deletes
+ // easiest way is to delete all and re-insert
+ MyMoneySqlQuery q(this);
+ q.prepare("DELETE FROM kmmPrices");
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("deleting Prices")));
+ m_prices = 0;
+
+ const MyMoneyPriceList list = m_storage->priceList();
+ signalProgress(0, list.count(), "Writing Prices...");
+ MyMoneyPriceList::ConstIterator it;
+ for(it = list.begin(); it != list.end(); ++it) {
+ writePricePair(*it);
+ }
+}
+
+void MyMoneyStorageSql::writePricePair(const MyMoneyPriceEntries& p) {
+ DBG("*** Entering MyMoneyStorageSql::writePricePair");
+ MyMoneyPriceEntries::ConstIterator it;
+ for(it = p.begin(); it != p.end(); ++it) {
+ writePrice (*it);
+ signalProgress(++m_prices, 0);
+ }
+}
+
+void MyMoneyStorageSql::addPrice(const MyMoneyPrice& p) {
+ DBG("*** Entering MyMoneyStorageSql::addPrice");
+ if (m_readingPrices) return;
+ // the app always calls addPrice, whether or not there is already one there
+ startCommitUnit(__func__);
+ bool newRecord = false;
+ MyMoneySqlQuery q(this);
+ QString s = m_db.m_tables["kmmPrices"].selectAllString(false);
+ s += " WHERE fromId = :fromId AND toId = :toId AND priceDate = :priceDate;";
+ q.prepare (s);
+ q.bindValue(":fromId", p.from());
+ q.bindValue(":toId", p.to());
+ q.bindValue(":priceDate", p.date().toString(Qt::ISODate));
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("finding Price")));
+ if (q.next()) {
+ q.prepare(m_db.m_tables["kmmPrices"].updateString());
+ } else {
+ q.prepare(m_db.m_tables["kmmPrices"].insertString());
+ ++m_prices;
+ newRecord = true;
+ }
+ q.bindValue(":fromId", p.from());
+ q.bindValue(":toId", p.to());
+ q.bindValue(":priceDate", p.date().toString(Qt::ISODate));
+ q.bindValue(":price", p.rate(QString()).toString());
+ q.bindValue(":priceFormatted",
+ p.rate(QString()).formatMoney("", KMyMoneySettings::pricePrecision()));
+ q.bindValue(":priceSource", p.source());
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("writing Price")));
+
+ if (newRecord) writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::removePrice(const MyMoneyPrice& p) {
+ DBG("*** Entering MyMoneyStorageSql::removePrice");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmPrices"].deleteString());
+ q.bindValue(":fromId", p.from());
+ q.bindValue(":toId", p.to());
+ q.bindValue(":priceDate", p.date().toString(Qt::ISODate));
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("deleting Price")));
+ --m_prices;
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::writePrice(const MyMoneyPrice& p) {
+ DBG("*** Entering MyMoneyStorageSql::writePrice");
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmPrices"].insertString());
+ q.bindValue(":fromId", p.from());
+ q.bindValue(":toId", p.to());
+ q.bindValue(":priceDate", p.date().toString(Qt::ISODate));
+ q.bindValue(":price", p.rate(QString()).toString());
+ q.bindValue(":priceFormatted", p.rate(QString()).formatMoney("", 2));
+ q.bindValue(":priceSource", p.source());
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("writing Prices")));
+}
+
+// **** Currencies ****
+void MyMoneyStorageSql::writeCurrencies() {
+ DBG("*** Entering MyMoneyStorageSql::writeCurrencies");
+ // first, get a list of what's on the database (see writeInstitutions)
+ QValueList<QString> dbList;
+ MyMoneySqlQuery q(this);
+ MyMoneySqlQuery q2(this);
+ q.prepare("SELECT ISOCode FROM kmmCurrencies;");
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "building Currency list"));
+ while (q.next()) dbList.append(q.value(0).toString());
+
+ const QValueList<MyMoneySecurity> currencyList = m_storage->currencyList();
+ signalProgress(0, currencyList.count(), "Writing Currencies...");
+ q.prepare (m_db.m_tables["kmmCurrencies"].updateString());
+ q2.prepare (m_db.m_tables["kmmCurrencies"].insertString());
+ for(QValueList<MyMoneySecurity>::ConstIterator it = currencyList.begin(); it != currencyList.end(); ++it) {
+ if (dbList.contains((*it).id())) {
+ dbList.remove ((*it).id());
+ writeCurrency((*it), q);
+ } else {
+ writeCurrency((*it), q2);
+ }
+ signalProgress(++m_currencies, 0);
+ }
+
+ if (!dbList.isEmpty()) {
+ q.prepare("DELETE FROM kmmCurrencies WHERE ISOCode = :ISOCode");
+ QValueList<QString>::const_iterator it = dbList.begin();
+ while (it != dbList.end()) {
+ q.bindValue(":ISOCode", (*it));
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "deleting Currency"));
+ ++it;
+ }
+ }
+}
+
+void MyMoneyStorageSql::addCurrency(const MyMoneySecurity& sec) {
+ DBG("*** Entering MyMoneyStorageSql::addCurrency");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmCurrencies"].insertString());
+ writeCurrency(sec,q);
+ ++m_currencies;
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::modifyCurrency(const MyMoneySecurity& sec) {
+ DBG("*** Entering MyMoneyStorageSql::modifyCurrency");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmCurrencies"].updateString());
+ writeCurrency(sec,q);
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::removeCurrency(const MyMoneySecurity& sec) {
+ DBG("*** Entering MyMoneyStorageSql::removeCurrency");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmCurrencies"].deleteString());
+ q.bindValue(":ISOcode", sec.id());
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("deleting Currency")));
+ --m_currencies;
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::writeCurrency(const MyMoneySecurity& currency, MyMoneySqlQuery& q) {
+ DBG("*** Entering MyMoneyStorageSql::writeCurrency");
+ q.bindValue(":ISOcode", currency.id());
+ q.bindValue(":name", currency.name());
+ q.bindValue(":type", static_cast<int>(currency.securityType()));
+ q.bindValue(":typeString", MyMoneySecurity::securityTypeToString(currency.securityType()));
+ // writing the symbol as three short ints is a PITA, but the
+ // problem is that database drivers have incompatible ways of declaring UTF8
+ QString symbol = currency.tradingSymbol() + " ";
+ q.bindValue(":symbol1", symbol.mid(0,1).unicode()->unicode());
+ q.bindValue(":symbol2", symbol.mid(1,1).unicode()->unicode());
+ q.bindValue(":symbol3", symbol.mid(2,1).unicode()->unicode());
+ q.bindValue(":symbolString", symbol);
+ q.bindValue(":partsPerUnit", currency.partsPerUnit());
+ q.bindValue(":smallestCashFraction", currency.smallestCashFraction());
+ q.bindValue(":smallestAccountFraction", currency.smallestAccountFraction());
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("writing Currencies")));
+}
+
+
+void MyMoneyStorageSql::writeReports() {
+ DBG("*** Entering MyMoneyStorageSql::writeReports");
+ // first, get a list of what's on the database (see writeInstitutions)
+ QValueList<QString> dbList;
+ MyMoneySqlQuery q(this);
+ MyMoneySqlQuery q2(this);
+ q.prepare("SELECT id FROM kmmReportConfig;");
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "building Report list"));
+ while (q.next()) dbList.append(q.value(0).toString());
+
+ QValueList<MyMoneyReport> list = m_storage->reportList();
+ signalProgress(0, list.count(), "Writing Reports...");
+ QValueList<MyMoneyReport>::ConstIterator it;
+ q.prepare (m_db.m_tables["kmmReportConfig"].updateString());
+ q2.prepare (m_db.m_tables["kmmReportConfig"].insertString());
+ for(it = list.begin(); it != list.end(); ++it){
+ if (dbList.contains((*it).id())) {
+ dbList.remove ((*it).id());
+ writeReport(*it, q);
+ } else {
+ writeReport(*it, q2);
+ }
+ signalProgress(++m_reports, 0);
+ }
+
+ if (!dbList.isEmpty()) {
+ q.prepare("DELETE FROM kmmReportConfig WHERE id = :id");
+ QValueList<QString>::const_iterator it = dbList.begin();
+ while (it != dbList.end()) {
+ q.bindValue(":id", (*it));
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "deleting Report"));
+ ++it;
+ }
+ }
+}
+
+void MyMoneyStorageSql::addReport(const MyMoneyReport& rep) {
+ DBG("*** Entering MyMoneyStorageSql::addReport");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmReportConfig"].insertString());
+ writeReport(rep,q);
+ ++m_reports;
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::modifyReport(const MyMoneyReport& rep) {
+ DBG("*** Entering MyMoneyStorageSql::modifyReport");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmReportConfig"].updateString());
+ writeReport(rep,q);
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::removeReport(const MyMoneyReport& rep) {
+ DBG("*** Entering MyMoneyStorageSql::removeReport");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ q.prepare("DELETE FROM kmmReportConfig WHERE id = :id");
+ q.bindValue(":id", rep.id());
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("deleting Report")));
+ --m_reports;
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::writeReport (const MyMoneyReport& rep, MyMoneySqlQuery& q) {
+ DBG("*** Entering MyMoneyStorageSql::writeReport");
+ QDomDocument d; // create a dummy XML document
+ QDomElement e = d.createElement("REPORTS");
+ d.appendChild (e);
+ rep.writeXML(d, e); // write the XML to document
+ q.bindValue(":id", rep.id());
+ q.bindValue(":name", rep.name());
+ q.bindValue(":XML", d.toString());
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("writing Reports")));
+ //m_hiIdReports = calcHighId(m_hiIdReports, rep.id());
+}
+
+void MyMoneyStorageSql::writeBudgets() {
+ DBG("*** Entering MyMoneyStorageSql::writeBudgets");
+ // first, get a list of what's on the database (see writeInstitutions)
+ QValueList<QString> dbList;
+ MyMoneySqlQuery q(this);
+ MyMoneySqlQuery q2(this);
+ q.prepare("SELECT name FROM kmmBudgetConfig;");
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "building Budget list"));
+ while (q.next()) dbList.append(q.value(0).toString());
+
+ QValueList<MyMoneyBudget> list = m_storage->budgetList();
+ signalProgress(0, list.count(), "Writing Budgets...");
+ QValueList<MyMoneyBudget>::ConstIterator it;
+ q.prepare (m_db.m_tables["kmmBudgetConfig"].updateString());
+ q2.prepare (m_db.m_tables["kmmBudgetConfig"].insertString());
+ for(it = list.begin(); it != list.end(); ++it){
+ if (dbList.contains((*it).name())) {
+ dbList.remove ((*it).name());
+ writeBudget(*it, q);
+ } else {
+ writeBudget(*it, q2);
+ }
+ signalProgress(++m_budgets, 0);
+ }
+
+ if (!dbList.isEmpty()) {
+ q.prepare("DELETE FROM kmmBudgetConfig WHERE id = :id");
+ QValueList<QString>::const_iterator it = dbList.begin();
+ while (it != dbList.end()) {
+ q.bindValue(":name", (*it));
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "deleting Budget"));
+ ++it;
+ }
+ }
+}
+
+void MyMoneyStorageSql::addBudget(const MyMoneyBudget& bud) {
+ DBG("*** Entering MyMoneyStorageSql::addBudget");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmBudgetConfig"].insertString());
+ writeBudget(bud,q);
+ ++m_budgets;
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::modifyBudget(const MyMoneyBudget& bud) {
+ DBG("*** Entering MyMoneyStorageSql::modifyBudget");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmBudgetConfig"].updateString());
+ writeBudget(bud,q);
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::removeBudget(const MyMoneyBudget& bud) {
+ DBG("*** Entering MyMoneyStorageSql::removeBudget");
+ startCommitUnit(__func__);
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmBudgetConfig"].deleteString());
+ q.bindValue(":id", bud.id());
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("deleting Budget")));
+ --m_budgets;
+ writeFileInfo();
+ endCommitUnit(__func__);
+}
+
+void MyMoneyStorageSql::writeBudget (const MyMoneyBudget& bud, MyMoneySqlQuery& q) {
+ DBG("*** Entering MyMoneyStorageSql::writeBudget");
+ QDomDocument d; // create a dummy XML document
+ QDomElement e = d.createElement("BUDGETS");
+ d.appendChild (e);
+ bud.writeXML(d, e); // write the XML to document
+ q.bindValue(":id", bud.id());
+ q.bindValue(":name", bud.name());
+ q.bindValue(":start", bud.budgetStart());
+ q.bindValue(":XML", d.toString());
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("writing Budgets")));
+}
+
+void MyMoneyStorageSql::writeFileInfo() {
+ DBG("*** Entering MyMoneyStorageSql::writeFileInfo");
+ // we have no real way of knowing when these change, so re-write them every time
+ deleteKeyValuePairs("STORAGE", "");
+ writeKeyValuePairs("STORAGE", "", m_storage->pairs());
+ //
+ MyMoneySqlQuery q(this);
+ q.prepare ("SELECT * FROM kmmFileInfo;");
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, "checking fileinfo"));
+ QString qs;
+ if (q.next())
+ qs = m_db.m_tables["kmmFileInfo"].updateString();
+ else
+ qs = (m_db.m_tables["kmmFileInfo"].insertString());
+ q.prepare(qs);
+ q.bindValue(":version", m_dbVersion);
+ q.bindValue(":fixLevel", m_storage->fileFixVersion());
+ q.bindValue(":created", m_storage->creationDate().toString(Qt::ISODate));
+ //q.bindValue(":lastModified", m_storage->lastModificationDate().toString(Qt::ISODate));
+ q.bindValue(":lastModified", QDate::currentDate().toString(Qt::ISODate));
+ q.bindValue(":baseCurrency", m_storage->pairs()["kmm-baseCurrency"]);
+ q.bindValue(":institutions", (unsigned long long) m_institutions);
+ q.bindValue(":accounts", (unsigned long long) m_accounts);
+ q.bindValue(":payees", (unsigned long long) m_payees);
+ q.bindValue(":transactions", (unsigned long long) m_transactions);
+ q.bindValue(":splits", (unsigned long long) m_splits);
+ q.bindValue(":securities", (unsigned long long) m_securities);
+ q.bindValue(":prices", (unsigned long long) m_prices);
+ q.bindValue(":currencies", (unsigned long long) m_currencies);
+ q.bindValue(":schedules", (unsigned long long) m_schedules);
+ q.bindValue(":reports", (unsigned long long) m_reports);
+ q.bindValue(":kvps", (unsigned long long) m_kvps);
+ q.bindValue(":budgets", (unsigned long long) m_budgets);
+ q.bindValue(":dateRangeStart", QDate());
+ q.bindValue(":dateRangeEnd", QDate());
+
+ //FIXME: This modifies all m_<variable> used in this function.
+ // Sometimes the memory has been updated.
+
+ // Should most of these be tracked in a view?
+ // Variables actually needed are: version, fileFixVersion, creationDate,
+ // baseCurrency, encryption, update info, and logon info.
+ try {
+ //readFileInfo();
+ } catch (...) {
+ startCommitUnit(__func__);
+ }
+
+ q.bindValue(":hiInstitutionId", (unsigned long long) m_hiIdInstitutions);
+ q.bindValue(":hiPayeeId", (unsigned long long) m_hiIdPayees);
+ q.bindValue(":hiAccountId", (unsigned long long) m_hiIdAccounts);
+ q.bindValue(":hiTransactionId", (unsigned long long) m_hiIdTransactions);
+ q.bindValue(":hiScheduleId", (unsigned long long) m_hiIdSchedules);
+ q.bindValue(":hiSecurityId", (unsigned long long) m_hiIdSecurities);
+ q.bindValue(":hiReportId", (unsigned long long) m_hiIdReports);
+ q.bindValue(":hiBudgetId", (unsigned long long) m_hiIdBudgets);
+
+ q.bindValue(":encryptData", m_encryptData);
+ q.bindValue(":updateInProgress", "N");
+ q.bindValue(":logonUser", m_logonUser);
+ q.bindValue(":logonAt", m_logonAt.toString(Qt::ISODate));
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("writing FileInfo")));
+}
+
+// **** Key/value pairs ****
+void MyMoneyStorageSql::writeKeyValuePairs(const QString& kvpType, const QString& kvpId, const QMap<QString, QString>& pairs) {
+ DBG("*** Entering MyMoneyStorageSql::writeKeyValuePairs");
+ QMap<QString, QString>::const_iterator it;
+ for(it = pairs.begin(); it != pairs.end(); ++it) {
+ writeKeyValuePair (kvpType, kvpId, it.key(), it.data());
+ }
+}
+
+void MyMoneyStorageSql::writeKeyValuePair (const QString& kvpType, const QString& kvpId, const QString& kvpKey, const QString& kvpData) {
+ DBG("*** Entering MyMoneyStorageSql::writeKeyValuePair");
+ MyMoneySqlQuery q(this);
+ q.prepare (m_db.m_tables["kmmKeyValuePairs"].insertString());
+ q.bindValue(":kvpType", kvpType);
+ q.bindValue(":kvpId", kvpId);
+ q.bindValue(":kvpKey", kvpKey);
+ q.bindValue(":kvpData", kvpData);
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("writing KVP")));
+ ++m_kvps;
+}
+
+void MyMoneyStorageSql::deleteKeyValuePairs (const QString& kvpType, const QString& kvpId) {
+ DBG("*** Entering MyMoneyStorageSql::deleteKeyValuePairs");
+ MyMoneySqlQuery q(this);
+ q.prepare ("DELETE FROM kmmKeyValuePairs WHERE kvpType = :kvpType AND kvpId = :kvpId;");
+ q.bindValue(":kvpType", kvpType);
+ q.bindValue(":kvpId", kvpId);
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("deleting kvp for %1 %2").arg(kvpType).arg(kvpId)));
+ m_kvps -= q.numRowsAffected();
+}
+
+//******************************** read SQL routines **************************************
+#define CASE(a) if ((*ft)->name() == #a)
+#define GETSTRING q.value(i).toString()
+#define GETCSTRING q.value(i).toCString()
+#define GETDATE getDate(GETSTRING)
+#define GETDATETIME getDateTime(GETSTRING)
+#define GETINT q.value(i).toInt()
+#define GETULL q.value(i).toULongLong()
+
+void MyMoneyStorageSql::readFileInfo(void) {
+ DBG("*** Entering MyMoneyStorageSql::readFileInfo");
+ signalProgress(0, 18, QObject::tr("Loading file information..."));
+ MyMoneyDbTable& t = m_db.m_tables["kmmFileInfo"];
+ MyMoneySqlQuery q(this);
+ q.prepare (t.selectAllString());
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("reading FileInfo")));
+ if (!q.next()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("retrieving FileInfo")));
+ MyMoneyDbTable::field_iterator ft = t.begin();
+ int i = 0;
+ while (ft != t.end()) {
+ // versioning is now handled in open routine
+/* CASE(version) setVersion(GETSTRING); // check version == current version...
+ else*/
+ CASE(created) m_storage->setCreationDate(GETDATE);
+ else CASE(lastModified) m_storage->setLastModificationDate(GETDATE);
+ else CASE(hiInstitutionId) m_hiIdInstitutions = (unsigned long) GETULL;
+ else CASE(hiPayeeId) m_hiIdPayees = (unsigned long) GETULL;
+ else CASE(hiAccountId) m_hiIdAccounts = (unsigned long) GETULL;
+ else CASE(hiTransactionId) m_hiIdTransactions = (unsigned long) GETULL;
+ else CASE(hiScheduleId) m_hiIdSchedules = (unsigned long) GETULL;
+ else CASE(hiSecurityId) m_hiIdSecurities = (unsigned long) GETULL;
+ else CASE(hiReportId ) m_hiIdReports = (unsigned long) GETULL;
+ else CASE(hiBudgetId ) m_hiIdBudgets = (unsigned long) GETULL;
+ else CASE(institutions) m_institutions = (unsigned long) GETULL;
+ else CASE(accounts ) m_accounts = (unsigned long) GETULL;
+ else CASE(payees ) m_payees = (unsigned long) GETULL;
+ else CASE(transactions) m_transactions = (unsigned long) GETULL;
+ else CASE(splits ) m_splits = (unsigned long) GETULL;
+ else CASE(securities ) m_securities = (unsigned long) GETULL;
+ else CASE(currencies ) m_currencies = (unsigned long) GETULL;
+ else CASE(schedules ) m_schedules = (unsigned long) GETULL;
+ else CASE(prices ) m_prices = (unsigned long) GETULL;
+ else CASE(kvps ) m_kvps = (unsigned long) GETULL;
+ else CASE(reports ) m_reports = (unsigned long) GETULL;
+ else CASE(budgets ) m_budgets = (unsigned long) GETULL;
+ else CASE(encryptData) m_encryptData = GETSTRING;
+ else CASE(logonUser) m_logonUser = GETSTRING;
+ else CASE(logonAt) m_logonAt = GETDATETIME;
+ ++ft; ++i;
+ signalProgress(i,0);
+ }
+ m_storage->setPairs(readKeyValuePairs("STORAGE", QString("")).pairs());
+}
+
+/*void MyMoneyStorageSql::setVersion (const QString& version) {
+ DBG("*** Entering MyMoneyStorageSql::setVersion");
+ m_dbVersion = version.section('.', 0, 0).toUInt();
+ m_minorVersion = version.section('.', 1, 1).toUInt();
+ // Okay, I made a cockup by forgetting to include a fixversion in the database
+ // design, so we'll use the minor version as fix level (similar to VERSION
+ // and FIXVERSION in XML file format). A second mistake was setting minor version to 1
+ // in the first place, so we need to subtract one on reading and add one on writing (sigh)!!
+ m_storage->setFileFixVersion( m_minorVersion - 1);
+}*/
+
+void MyMoneyStorageSql::readInstitutions(void) {
+ TRY
+ QMap<QString, MyMoneyInstitution> iList = fetchInstitutions();
+ m_storage->loadInstitutions(iList);
+ readFileInfo();
+ m_storage->loadInstitutionId(m_hiIdInstitutions);
+ PASS
+}
+
+const QMap<QString, MyMoneyInstitution> MyMoneyStorageSql::fetchInstitutions (const QStringList& idList, bool forUpdate) const {
+ DBG("*** Entering MyMoneyStorageSql::readInstitutions");
+ signalProgress(0, m_institutions, QObject::tr("Loading institutions..."));
+ int progress = 0;
+ QMap<QString, MyMoneyInstitution> iList;
+ unsigned long lastId = 0;
+ const MyMoneyDbTable& t = m_db.m_tables["kmmInstitutions"];
+ MyMoneySqlQuery sq(const_cast <MyMoneyStorageSql*> (this));
+ sq.prepare ("SELECT id from kmmAccounts where institutionId = :id");
+ MyMoneySqlQuery q(const_cast <MyMoneyStorageSql*> (this));
+ QString queryString (t.selectAllString(false));
+
+ // Use bind variables, instead of just inserting the values in the queryString,
+ // so that values containing a ':' will work.
+ if (! idList.empty()) {
+ queryString += " WHERE";
+ for (unsigned i = 0; i < idList.count(); ++i)
+ queryString += " id = :id" + QString::number(i) + " OR";
+ queryString = queryString.left(queryString.length() - 2);
+ }
+ if (forUpdate)
+ queryString += " FOR UPDATE";
+
+ queryString += ";";
+
+ q.prepare (queryString);
+
+ if (! idList.empty()) {
+ QStringList::const_iterator bindVal = idList.begin();
+ for (int i = 0; bindVal != idList.end(); ++i, ++bindVal) {
+ q.bindValue (":id" + QString::number(i), *bindVal);
+ }
+ }
+
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("reading Institution")));
+ while (q.next()) {
+ MyMoneyDbTable::field_iterator ft = t.begin();
+ int i = 0;
+ QString iid;
+ MyMoneyInstitution inst;
+ while (ft != t.end()) {
+ CASE(id) iid = GETSTRING;
+ else CASE(name) inst.setName(GETSTRING);
+ else CASE(manager) inst.setManager(GETSTRING);
+ else CASE(routingCode) inst.setSortcode(GETSTRING);
+ else CASE(addressStreet) inst.setStreet(GETSTRING);
+ else CASE(addressCity) inst.setCity(GETSTRING);
+ else CASE(addressZipcode) inst.setPostcode(GETSTRING);
+ else CASE(telephone) inst.setTelephone(GETSTRING);
+ ++ft; ++i;
+ }
+ // get list of subaccounts
+ sq.bindValue(":id", iid);
+ if (!sq.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("reading Institution AccountList")));
+ QStringList aList;
+ while (sq.next()) aList.append(sq.value(0).toString());
+ for (QStringList::ConstIterator it = aList.begin(); it != aList.end(); ++it)
+ inst.addAccountId(*it);
+
+ iList[iid] = MyMoneyInstitution(iid, inst);
+ unsigned long id = extractId(iid);
+ if(id > lastId)
+ lastId = id;
+
+ signalProgress (++progress, 0);
+ }
+ return iList;
+}
+
+void MyMoneyStorageSql::readPayees (const QString& id) {
+ DBG("*** Entering MyMoneyStorageSql::readPayees");
+ QValueList<QString> list;
+ list.append(id);
+ readPayees(list);
+}
+
+void MyMoneyStorageSql::readPayees(const QValueList<QString> pid) {
+ DBG("*** Entering MyMoneyStorageSql::readPayees");
+ TRY
+ QStringList pidList;
+ qCopy(pid.begin(), pid.end(), qBackInserter(pidList));
+
+ m_storage->loadPayees(fetchPayees(pidList));
+ readFileInfo();
+ m_storage->loadPayeeId(m_hiIdPayees);
+ CATCH
+ delete e; // ignore duplicates
+ ECATCH
+// if (pid.isEmpty()) m_payeeListRead = true;
+}
+
+const QMap<QString, MyMoneyPayee> MyMoneyStorageSql::fetchPayees (const QStringList& idList, bool /*forUpdate*/) const {
+ DBG("*** Entering MyMoneyStorageSql::readPayees");
+ if (m_displayStatus) {
+ signalProgress(0, m_payees, QObject::tr("Loading payees..."));
+ } else {
+// if (m_payeeListRead) return;
+ }
+ int progress = 0;
+ QMap<QString, MyMoneyPayee> pList;
+ //unsigned long lastId;
+ const MyMoneyDbTable& t = m_db.m_tables["kmmPayees"];
+ MyMoneyDbTable::field_iterator payeeEnd = t.end();
+ MyMoneySqlQuery q(const_cast <MyMoneyStorageSql*> (this));
+ if (idList.isEmpty()) {
+ q.prepare (t.selectAllString());
+ } else {
+ QString whereClause = " where (";
+ QString itemConnector = "";
+ QStringList::ConstIterator it;
+ for (it = idList.begin(); it != idList.end(); ++it) {
+ whereClause.append(QString("%1id = '%2'").arg(itemConnector).arg(*it));
+ itemConnector = " or ";
+ }
+ whereClause += ")";
+ q.prepare (t.selectAllString(false) + whereClause);
+ }
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("reading Payee")));
+ while (q.next()) {
+ MyMoneyDbTable::field_iterator ft = t.begin();
+ int i = 0;
+ QString pid;
+ QString boolChar;
+ MyMoneyPayee payee;
+ unsigned int type;
+ bool ignoreCase;
+ QString matchKeys;
+ while (ft != payeeEnd) {
+ CASE(id) pid = GETCSTRING;
+ else CASE(name) payee.setName(GETSTRING);
+ else CASE(reference) payee.setReference(GETSTRING);
+ else CASE(email) payee.setEmail(GETSTRING);
+ else CASE(addressStreet) payee.setAddress(GETSTRING);
+ else CASE(addressCity) payee.setCity(GETSTRING);
+ else CASE(addressZipcode) payee.setPostcode(GETSTRING);
+ else CASE(addressState) payee.setState(GETSTRING);
+ else CASE(telephone) payee.setTelephone(GETSTRING);
+ else CASE(notes) payee.setNotes(GETSTRING);
+ else CASE(defaultAccountId) payee.setDefaultAccountId(GETSTRING);
+ else CASE(matchData) type = GETINT;
+ else CASE(matchIgnoreCase) ignoreCase = (GETSTRING == "Y");
+ else CASE(matchKeys) matchKeys = GETSTRING;
+ ++ft; ++i;
+ }
+ payee.setMatchData (static_cast<MyMoneyPayee::payeeMatchType>(type), ignoreCase, matchKeys);
+ if (pid == "USER") {
+ TRY
+ m_storage->setUser(payee);
+ PASS
+ } else {
+ pList[pid] = MyMoneyPayee(pid, payee);
+ //unsigned long id = extractId(QString(pid));
+ //if(id > lastId)
+ // lastId = id;
+ }
+ if (m_displayStatus) signalProgress(++progress, 0);
+ }
+ return pList;
+}
+
+const QMap<QString, MyMoneyAccount> MyMoneyStorageSql::fetchAccounts (const QStringList& idList, bool forUpdate) const {
+ DBG("*** Entering MyMoneyStorageSql::fetchAccounts");
+ signalProgress(0, m_accounts, QObject::tr("Loading accounts..."));
+ int progress = 0;
+ QMap<QString, MyMoneyAccount> accList;
+ QStringList kvpAccountList;
+
+ const MyMoneyDbTable& t = m_db.m_tables["kmmAccounts"];
+ MyMoneyDbTable::field_iterator accEnd = t.end();
+ MyMoneySqlQuery q(const_cast <MyMoneyStorageSql*> (this));
+ MyMoneySqlQuery sq(const_cast <MyMoneyStorageSql*> (this));
+
+ QString childQueryString = "SELECT id, parentId FROM kmmAccounts WHERE ";
+ QString queryString (t.selectAllString(false));
+
+ // Use bind variables, instead of just inserting the values in the queryString,
+ // so that values containing a ':' will work.
+ if (! idList.empty()) {
+ kvpAccountList = idList;
+ queryString += " WHERE id IN (";
+ childQueryString += " parentId IN (";
+ for (unsigned i = 0; i < idList.count(); ++i) {
+ queryString += " :id" + QString::number(i) + ", ";
+ childQueryString += ":id" + QString::number(i) + ", ";
+ }
+ queryString = queryString.left(queryString.length() - 2) + ")";
+ childQueryString = childQueryString.left(childQueryString.length() - 2) + ")";
+ } else {
+ childQueryString += " NOT parentId IS NULL";
+ }
+
+ queryString += " ORDER BY id";
+ childQueryString += " ORDER BY parentid, id";
+
+ if (forUpdate) {
+ queryString += " FOR UPDATE";
+ childQueryString += " FOR UPDATE";
+ }
+
+ q.prepare (queryString);
+ sq.prepare (childQueryString);
+
+ if (! idList.empty()) {
+ QStringList::const_iterator bindVal = idList.begin();
+ for (int i = 0; bindVal != idList.end(); ++i, ++bindVal) {
+ q.bindValue (":id" + QString::number(i), *bindVal);
+ sq.bindValue (":id" + QString::number(i), *bindVal);
+ }
+ }
+
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("reading Account")));
+ if (!sq.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("reading subAccountList")));
+ while (q.next()) {
+ MyMoneyDbTable::field_iterator ft = t.begin();
+ int i = 0;
+ QString aid;
+ QString balance;
+ MyMoneyAccount acc;
+
+ while (ft != accEnd) {
+ CASE(id) aid = GETCSTRING;
+ else CASE(institutionId) acc.setInstitutionId(GETCSTRING);
+ else CASE(parentId) acc.setParentAccountId(GETCSTRING);
+ else CASE(lastReconciled) acc.setLastReconciliationDate(GETDATE);
+ else CASE(lastModified) acc.setLastModified(GETDATE);
+ else CASE(openingDate) acc.setOpeningDate(GETDATE);
+ else CASE(accountNumber) acc.setNumber(GETSTRING);
+ else CASE(accountType) acc.setAccountType(static_cast<MyMoneyAccount::accountTypeE>(GETINT));
+ else CASE(accountName) acc.setName(GETSTRING);
+ else CASE(description) acc.setDescription(GETSTRING);
+ else CASE(currencyId) acc.setCurrencyId(GETCSTRING);
+ else CASE(balance) acc.setBalance(GETSTRING);
+ else CASE(transactionCount)
+ const_cast <MyMoneyStorageSql*> (this)->m_transactionCountMap[aid] = (unsigned long) GETULL;
+ ++ft; ++i;
+ }
+
+ // Process any key value pair
+ if (idList.empty())
+ kvpAccountList.append(aid);
+
+ // in database mode, load the balance from the account record
+ // else we would need to read all the transactions
+ accList.insert(aid, MyMoneyAccount(aid, acc));
+ if (acc.value("PreferredAccount") == "Yes") {
+ const_cast <MyMoneyStorageSql*> (this)->m_preferred.addAccount(aid);
+ }
+ signalProgress(++progress, 0);
+ }
+
+ QMapIterator<QString, MyMoneyAccount> it_acc;
+ QMapIterator<QString, MyMoneyAccount> accListEnd = accList.end();
+ while (sq.next()) {
+ it_acc = accList.find(sq.value(1).toString());
+ if (it_acc != accListEnd && it_acc.data().id() == sq.value(1).toString()) {
+ while (sq.isValid() && it_acc != accListEnd
+ && it_acc.data().id() == sq.value(1).toString()) {
+ it_acc.data().addAccountId(sq.value(0).toString());
+ sq.next();
+ }
+ sq.prev();
+ }
+ }
+
+ //TODO: There should be a better way than this. What's below is O(n log n) or more,
+ // where it may be able to be done in O(n), if things are just right.
+ // The operator[] call in the loop is the most expensive call in this function, according
+ // to several profile runs.
+ QMap <QString, MyMoneyKeyValueContainer> kvpResult = readKeyValuePairs("ACCOUNT", kvpAccountList);
+ QMap <QString, MyMoneyKeyValueContainer>::const_iterator kvp_end = kvpResult.end();
+ for (QMap <QString, MyMoneyKeyValueContainer>::const_iterator it_kvp = kvpResult.begin();
+ it_kvp != kvp_end; ++it_kvp) {
+ accList[it_kvp.key()].setPairs(it_kvp.data().pairs());
+ }
+
+ kvpResult = readKeyValuePairs("ONLINEBANKING", kvpAccountList);
+ kvp_end = kvpResult.end();
+ for (QMap <QString, MyMoneyKeyValueContainer>::const_iterator it_kvp = kvpResult.begin();
+ it_kvp != kvp_end; ++it_kvp) {
+ accList[it_kvp.key()].setOnlineBankingSettings(it_kvp.data());
+ }
+
+ return accList;
+}
+
+void MyMoneyStorageSql::readAccounts(void) {
+ m_storage->loadAccounts(fetchAccounts());
+ m_storage->loadAccountId(m_hiIdAccounts);
+}
+
+const QMap<QString, MyMoneyMoney> MyMoneyStorageSql::fetchBalance(const QStringList& idList, const QDate& date) const {
+
+ QMap<QString, MyMoneyMoney> returnValue;
+ MyMoneySqlQuery q(const_cast <MyMoneyStorageSql*> (this));
+ QString queryString = "SELECT action, shares, accountId, postDate "
+ "FROM kmmSplits WHERE txType = 'N' AND accountId in (";
+
+ for (unsigned i = 0; i < idList.count(); ++i) {
+ queryString += " :id" + QString::number(i) + ", ";
+ }
+ queryString = queryString.left(queryString.length() - 2) + " )";
+
+ // SQLite stores dates as YYYY-MM-DDTHH:mm:ss with 0s for the time part. This makes
+ // the <= operator misbehave when the date matches. To avoid this, add a day to the
+ // requested date and use the < operator.
+ if (date.isValid() && !date.isNull())
+ queryString += QString(" AND postDate < '%1'").arg(date.addDays(1).toString(Qt::ISODate));
+ DBG (queryString);
+ q.prepare(queryString);
+
+ QStringList::const_iterator bindVal = idList.begin();
+ for (int i = 0; bindVal != idList.end(); ++i, ++bindVal) {
+ q.bindValue (":id" + QString::number(i), *bindVal);
+ returnValue[*bindVal] = MyMoneyMoney(0);
+ }
+ if (!q.exec())
+ throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("fetching balance")));
+ QString id;
+ QString shares;
+ QString action;
+ while (q.next()) {
+ id = q.value(2).toString();
+ shares = q.value(1).toString();
+ action = q.value(0).toString();
+ if (MyMoneySplit::ActionSplitShares == action)
+ returnValue[id] = returnValue[id] * MyMoneyMoney(shares);
+ else
+ returnValue[id] += MyMoneyMoney(shares);
+ }
+ return returnValue;
+}
+
+void MyMoneyStorageSql::readTransactions(const QString& tidList, const QString& dateClause) {
+ TRY
+ m_storage->loadTransactions(fetchTransactions(tidList, dateClause));
+ m_storage->loadTransactionId(m_hiIdTransactions);
+ PASS
+}
+
+void MyMoneyStorageSql::readTransactions(const MyMoneyTransactionFilter& filter) {
+ TRY
+ m_storage->loadTransactions(fetchTransactions(filter));
+ m_storage->loadTransactionId(m_hiIdTransactions);
+ PASS
+}
+
+const QMap<QString, MyMoneyTransaction> MyMoneyStorageSql::fetchTransactions (const QString& tidList, const QString& dateClause, bool /*forUpdate*/) const {
+ DBG("*** Entering MyMoneyStorageSql::readTransactions");
+// if (m_transactionListRead) return; // all list already in memory
+ if (m_displayStatus) signalProgress(0, m_transactions, QObject::tr("Loading transactions..."));
+ int progress = 0;
+// m_payeeList.clear();
+ QString whereClause;
+ whereClause = " WHERE txType = 'N' ";
+ if (! tidList.isEmpty()) {
+ whereClause += " AND id IN " + tidList;
+ }
+ if (!dateClause.isEmpty()) whereClause += " and " + dateClause;
+ const MyMoneyDbTable& t = m_db.m_tables["kmmTransactions"];
+ MyMoneySqlQuery q(const_cast <MyMoneyStorageSql*> (this));
+ q.prepare (t.selectAllString(false) + whereClause + " ORDER BY id;");
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("reading Transaction")));
+ const MyMoneyDbTable& ts = m_db.m_tables["kmmSplits"];
+ whereClause = " WHERE txType = 'N' ";
+ if (! tidList.isEmpty()) {
+ whereClause += " AND transactionId IN " + tidList;
+ }
+ if (!dateClause.isEmpty()) whereClause += " and " + dateClause;
+ MyMoneySqlQuery qs(const_cast <MyMoneyStorageSql*> (this));
+ QString splitQuery = ts.selectAllString(false) + whereClause
+ + " ORDER BY transactionId, splitId;";
+ qs.prepare (splitQuery);
+ if (!qs.exec()) throw new MYMONEYEXCEPTION(buildError (qs, __func__, "reading Splits"));
+ QString splitTxId = "ZZZ";
+ MyMoneySplit s;
+ if (qs.next()) {
+ splitTxId = qs.value(0).toString();
+ readSplit (s, qs, ts);
+ } else {
+ splitTxId = "ZZZ";
+ }
+ QMap <QString, MyMoneyTransaction> txMap;
+ QStringList txList;
+ MyMoneyDbTable::field_iterator txEnd = t.end();
+ while (q.next()) {
+ MyMoneyTransaction tx;
+ QString txId;
+ MyMoneyDbTable::field_iterator ft = t.begin();
+ int i = 0;
+ while (ft != txEnd) {
+ CASE(id) txId = GETSTRING;
+ else CASE(postDate) tx.setPostDate(GETDATE);
+ else CASE(memo) tx.setMemo(GETSTRING);
+ else CASE(entryDate) tx.setEntryDate(GETDATE);
+ else CASE(currencyId) tx.setCommodity(GETCSTRING);
+ else CASE(bankId) tx.setBankID(GETSTRING);
+ ++ft; ++i;
+ }
+
+ while (txId < splitTxId && splitTxId != "ZZZ") {
+ if (qs.next()) {
+ splitTxId = qs.value(0).toString();
+ readSplit (s, qs, ts);
+ } else {
+ splitTxId = "ZZZ";
+ }
+ }
+
+ while (txId == splitTxId) {
+ tx.addSplit (s);
+ if (qs.next()) {
+ splitTxId = qs.value(0).toString();
+ readSplit (s, qs, ts);
+ } else {
+ splitTxId = "ZZZ";
+ }
+ }
+ // Process any key value pair
+ if (! txId.isEmpty()) {
+ txList.append(txId);
+ tx = MyMoneyTransaction(txId, tx);
+ txMap.insert(tx.uniqueSortKey(), tx);
+ }
+ }
+ QMap <QString, MyMoneyKeyValueContainer> kvpMap = readKeyValuePairs("TRANSACTION", txList);
+ QMap<QString, MyMoneyTransaction> tList;
+ QMapIterator<QString, MyMoneyTransaction> txMapEnd = txMap.end();
+ for (QMapIterator<QString, MyMoneyTransaction> i = txMap.begin();
+ i != txMapEnd; ++i) {
+ i.data().setPairs(kvpMap[i.data().id()].pairs());
+
+ if (m_displayStatus) signalProgress(++progress, 0);
+ }
+
+ if ((tidList.isEmpty()) && (dateClause.isEmpty())) {
+ //qDebug("setting full list read");
+ }
+ return txMap;
+}
+
+int MyMoneyStorageSql::splitState(const MyMoneyTransactionFilter::stateOptionE& state) const
+{
+ int rc = MyMoneySplit::NotReconciled;
+
+ switch(state) {
+ default:
+ case MyMoneyTransactionFilter::notReconciled:
+ break;
+
+ case MyMoneyTransactionFilter::cleared:
+ rc = MyMoneySplit::Cleared;
+ break;
+
+ case MyMoneyTransactionFilter::reconciled:
+ rc = MyMoneySplit::Reconciled;
+ break;
+
+ case MyMoneyTransactionFilter::frozen:
+ rc = MyMoneySplit::Frozen;
+ break;
+ }
+ return rc;
+}
+
+const QMap<QString, MyMoneyTransaction> MyMoneyStorageSql::fetchTransactions (const MyMoneyTransactionFilter& filter) const {
+ DBG("*** Entering MyMoneyStorageSql::readTransactions");
+ // analyze the filter
+// if (m_transactionListRead) return; // all list already in memory
+ // if the filter is restricted to certain accounts/categories
+ // check if we already have them all in memory
+ QStringList accounts;
+ QString inQuery;
+ filter.accounts(accounts);
+ filter.categories(accounts);
+// QStringList::iterator it;
+// bool allAccountsLoaded = true;
+// for (it = accounts.begin(); it != accounts.end(); ++it) {
+// if (m_accountsLoaded.find(*it) == m_accountsLoaded.end()) {
+// allAccountsLoaded = false;
+// break;
+// }
+// }
+// if (allAccountsLoaded) return;
+ /* Some filter combinations do not lend themselves to implementation
+ * in SQL, or are likely to require such extensive reading of the database
+ * as to make it easier to just read everything into memory. */
+ bool canImplementFilter = true;
+ MyMoneyMoney m1, m2;
+ if (filter.amountFilter( m1, m2 )) {
+ alert ("Amount Filter Set");
+ canImplementFilter = false;
+ }
+ QString n1, n2;
+ if (filter.numberFilter(n1, n2)) {
+ alert("Number filter set");
+ canImplementFilter = false;
+ }
+ int t1;
+ if (filter.firstType(t1)) {
+ alert("Type filter set");
+ canImplementFilter = false;
+ }
+// int s1;
+// if (filter.firstState(s1)) {
+// alert("State filter set");
+// canImplementFilter = false;
+// }
+ QRegExp t2;
+ if (filter.textFilter(t2)) {
+ alert("text filter set");
+ canImplementFilter = false;
+ }
+ MyMoneyTransactionFilter::FilterSet s = filter.filterSet();
+ if (s.singleFilter.validityFilter) {
+ alert("Validity filter set");
+ canImplementFilter = false;
+ }
+ if (!canImplementFilter) {
+ QMap<QString, MyMoneyTransaction> transactionList = fetchTransactions();
+ QMap<QString, MyMoneyTransaction>::ConstIterator it_t;
+ QMap<QString, MyMoneyTransaction>::ConstIterator txListEnd = transactionList.end();
+
+ std::remove_if(transactionList.begin(), transactionList.end(), FilterFail(filter, m_storagePtr));
+ return transactionList;
+ }
+
+ bool accountsOnlyFilter = true;
+ bool splitFilterActive = false; // the split filter is active if we are selecting on fields in the split table
+ // get start and end dates
+ QDate start = filter.fromDate();
+ QDate end = filter.toDate();
+ // not entirely sure if the following is correct, but at best, saves a lot of reads, at worst
+ // it only causes us to read a few more transactions that strictly necessary (I think...)
+ if (start == KMyMoneySettings::startDate().date()) start = QDate();
+ bool txFilterActive = ((start != QDate()) || (end != QDate())); // and this for fields in the transaction table
+ if (txFilterActive) accountsOnlyFilter = false;
+
+ QString whereClause = "";
+ QString subClauseconnector = " where txType = 'N' and ";
+ // payees
+ QStringList payees;
+ //filter.payees(payees);
+ if (filter.payees(payees)) {
+ accountsOnlyFilter = false;
+ QString itemConnector = "payeeId in (";
+ QString payeesClause = "";
+ QStringList::const_iterator it;
+ for (it = payees.begin(); it != payees.end(); ++it) {
+ payeesClause.append(QString("%1'%2'")
+ .arg(itemConnector).arg(*it));
+ itemConnector = ", ";
+ }
+ if (!payeesClause.isEmpty()) {
+ whereClause += subClauseconnector + payeesClause + ")";
+ subClauseconnector = " and ";
+ }
+ splitFilterActive = true;
+ }
+
+ // accounts and categories
+ if (!accounts.isEmpty()) {
+ splitFilterActive = true;
+ QString itemConnector = "accountId in (";
+ QString accountsClause = "";
+ QStringList::const_iterator it;
+ for (it = accounts.begin(); it != accounts.end(); ++it) {
+// if (m_accountsLoaded.find(*it) == m_accountsLoaded.end()) {
+ accountsClause.append(QString("%1 '%2'")
+ .arg(itemConnector).arg(*it));
+ itemConnector = ", ";
+ //if (accountsOnlyFilter) m_accountsLoaded.append(*it); // a bit premature...
+// }
+ }
+ if (!accountsClause.isEmpty()) {
+ whereClause += subClauseconnector + accountsClause + ")";
+ subClauseconnector = " and (";
+ }
+ }
+
+ // split states
+ QValueList <int> splitStates;
+ if (filter.states(splitStates)) {
+ splitFilterActive = true;
+ QString itemConnector = " reconcileFlag IN (";
+ QString statesClause = "";
+ for (QValueList<int>::ConstIterator it = splitStates.begin(); it != splitStates.end(); ++it) {
+ statesClause.append(QString(" %1 '%2'")
+ .arg(itemConnector)
+ .arg(splitState(MyMoneyTransactionFilter::stateOptionE(*it))));
+ itemConnector = ",";
+ }
+ if (!statesClause.isEmpty()) {
+ whereClause += subClauseconnector + statesClause + ")";
+ subClauseconnector = " and (";
+ }
+ }
+ // I've given up trying to work out the logic. we keep getting the wrong number of close brackets
+ int obc = whereClause.contains('(');
+ int cbc = whereClause.contains(')');
+ if (cbc > obc) {
+ qFatal("invalid where clause - %s", whereClause.latin1());
+ }
+ while (cbc < obc) {
+ whereClause.append(")");
+ cbc++;
+ }
+ // if the split filter is active, but the where clause is empty
+ // it means we already have all the transactions for the specified filter
+ // in memory, so just exit
+ if ((splitFilterActive) && (whereClause.isEmpty())) {
+ qDebug("all transactions already in storage");
+ return fetchTransactions();
+ }
+
+ // if we have neither a split filter, nor a tx (date) filter
+ // it's effectively a read all
+ if ((!splitFilterActive) && (!txFilterActive)) {
+ //qDebug("reading all transactions");
+ return fetchTransactions();
+ }
+ // build a date clause for the transaction table
+ QString dateClause;
+ QString connector = "";
+ if (end != QDate()) {
+ dateClause = QString("(postDate < '%1')").arg(end.addDays(1).toString(Qt::ISODate));
+ connector = " and ";
+ }
+ if (start != QDate()) {
+ dateClause += QString("%1 (postDate >= '%2')").arg(connector).arg(start.toString(Qt::ISODate));
+ }
+ // now get a list of transaction ids
+ // if we have only a date filter, we need to build the list from the tx table
+ // otherwise we need to build from the split table
+ if (splitFilterActive) {
+ inQuery = QString("(select distinct transactionId from kmmSplits %1)").arg(whereClause);
+ } else {
+ inQuery = QString("(select distinct id from kmmTransactions where %1)").arg(dateClause);
+ txFilterActive = false; // kill off the date filter now
+ }
+
+ return fetchTransactions(inQuery, dateClause);
+ //FIXME: if we have an accounts-only filter, recalc balances on loaded accounts
+}
+
+unsigned long MyMoneyStorageSql::transactionCount (const QString& aid) const {
+ DBG("*** Entering MyMoneyStorageSql::transactionCount");
+ if (aid.length() == 0)
+ return m_transactions;
+ else
+ return m_transactionCountMap[aid];
+}
+
+void MyMoneyStorageSql::readSplit (MyMoneySplit& s, const MyMoneySqlQuery& q, const MyMoneyDbTable& t) const {
+ DBG("*** Entering MyMoneyStorageSql::readSplit");
+ s.clearId();
+ MyMoneyDbTable::field_iterator ft = t.begin();
+ MyMoneyDbTable::field_iterator splitEnd = t.end();
+ int i = 0;
+
+ // Use the QString here instead of CASE, since this is called so often.
+ QString fieldName;
+ while (ft != splitEnd) {
+ fieldName = (*ft)->name();
+ if (fieldName == "payeeId") s.setPayeeId(GETCSTRING);
+ else if (fieldName == "reconcileDate") s.setReconcileDate(GETDATE);
+ else if (fieldName == "action") s.setAction(GETCSTRING);
+ else if (fieldName == "reconcileFlag") s.setReconcileFlag(static_cast<MyMoneySplit::reconcileFlagE>(GETINT));
+ else if (fieldName == "value") s.setValue(MyMoneyMoney(QStringEmpty(GETSTRING)));
+ else if (fieldName == "shares") s.setShares(MyMoneyMoney(QStringEmpty(GETSTRING)));
+ else if (fieldName == "price") s.setPrice(MyMoneyMoney(QStringEmpty(GETSTRING)));
+ else if (fieldName == "memo") s.setMemo(GETSTRING);
+ else if (fieldName == "accountId") s.setAccountId(GETCSTRING);
+ else if (fieldName == "checkNumber") s.setNumber(GETSTRING);
+ //else if (fieldName == "postDate") s.setPostDate(GETDATETIME); // FIXME - when Tom puts date into split object
+ else if (fieldName == "bankId") s.setBankID(GETSTRING);
+ ++ft; ++i;
+ }
+
+ return;
+}
+
+bool MyMoneyStorageSql::isReferencedByTransaction(const QString& id) const {
+ DBG("*** Entering MyMoneyStorageSql::isReferencedByTransaction");
+ MyMoneySqlQuery q(const_cast <MyMoneyStorageSql*> (this));
+ q.prepare("SELECT COUNT(*) FROM kmmTransactions "
+ "INNER JOIN kmmSplits ON kmmTransactions.id = kmmSplits.transactionId "
+ "WHERE kmmTransactions.currencyId = :ID OR kmmSplits.payeeId = :ID "
+ "OR kmmSplits.accountId = :ID");
+ q.bindValue(":ID", id);
+ if ((!q.exec()) || (!q.next())) {
+ buildError (q, __func__, "error retrieving reference count");
+ qFatal("Error retrieving reference count"); // definitely shouldn't happen
+ }
+ return (0 != q.value(0).toULongLong());
+}
+
+void MyMoneyStorageSql::readSchedules(void) {
+
+ TRY
+ m_storage->loadSchedules(fetchSchedules());
+ readFileInfo();
+ m_storage->loadScheduleId(m_hiIdSchedules);
+ PASS
+}
+
+const QMap<QString, MyMoneySchedule> MyMoneyStorageSql::fetchSchedules (const QStringList& idList, bool forUpdate) const {
+ DBG("*** Entering MyMoneyStorageSql::readSchedules");
+ signalProgress(0, m_schedules, QObject::tr("Loading schedules..."));
+ int progress = 0;
+ const MyMoneyDbTable& t = m_db.m_tables["kmmSchedules"];
+ MyMoneySqlQuery q(const_cast <MyMoneyStorageSql*> (this));
+ QMap<QString, MyMoneySchedule> sList;
+ //unsigned long lastId = 0;
+ const MyMoneyDbTable& ts = m_db.m_tables["kmmSplits"];
+ MyMoneySqlQuery qs(const_cast <MyMoneyStorageSql*> (this));
+ qs.prepare (ts.selectAllString(false) + " WHERE transactionId = :id ORDER BY splitId;");
+ MyMoneySqlQuery sq(const_cast <MyMoneyStorageSql*> (this));
+ sq.prepare ("SELECT payDate from kmmSchedulePaymentHistory where schedId = :id");
+
+ QString queryString (t.selectAllString(false));
+
+ // Use bind variables, instead of just inserting the values in the queryString,
+ // so that values containing a ':' will work.
+ if (! idList.empty()) {
+ queryString += " WHERE";
+ for (unsigned i = 0; i < idList.count(); ++i)
+ queryString += " id = :id" + QString::number(i) + " OR";
+ queryString = queryString.left(queryString.length() - 2);
+ }
+ queryString += " ORDER BY id;";
+
+ if (forUpdate)
+ queryString += " FOR UPDATE";
+
+ queryString += ";";
+
+ q.prepare (queryString);
+
+ if (! idList.empty()) {
+ QStringList::const_iterator bindVal = idList.begin();
+ for (int i = 0; bindVal != idList.end(); ++i, ++bindVal) {
+ q.bindValue (":id" + QString::number(i), *bindVal);
+ }
+ }
+
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("reading Schedules")));
+ while (q.next()) {
+ MyMoneyDbTable::field_iterator ft = t.begin();
+ int i = 0;
+ MyMoneySchedule s;
+ QString sId;
+ QString boolChar;
+ QDate nextPaymentDue;
+ while (ft != t.end()) {
+ CASE(id) sId = GETCSTRING;
+ else CASE(name) s.setName (GETSTRING);
+ else CASE(type) s.setType (static_cast<MyMoneySchedule::typeE>(GETINT));
+ else CASE(occurence) s.setOccurencePeriod (static_cast<MyMoneySchedule::occurenceE>(GETINT));
+ else CASE(occurenceMultiplier) s.setOccurenceMultiplier (GETINT);
+ else CASE(paymentType) s.setPaymentType (static_cast<MyMoneySchedule::paymentTypeE>(GETINT));
+ else CASE(startDate) s.setStartDate (GETDATE);
+ else CASE(endDate) s.setEndDate (GETDATE);
+ else CASE(fixed) {boolChar = GETSTRING; s.setFixed (boolChar == "Y");}
+ else CASE(autoEnter) {boolChar = GETSTRING; s.setAutoEnter (boolChar == "Y");}
+ else CASE(lastPayment) s.setLastPayment (GETDATE);
+ else CASE(weekendOption)
+ s.setWeekendOption (static_cast<MyMoneySchedule::weekendOptionE>(GETINT));
+ else CASE(nextPaymentDue) nextPaymentDue = GETDATE;
+ ++ft; ++i;
+ }
+ // convert simple occurence to compound occurence
+ int mult = s.occurenceMultiplier();
+ MyMoneySchedule::occurenceE occ = s.occurencePeriod();
+ MyMoneySchedule::simpleToCompoundOccurence(mult,occ);
+ s.setOccurencePeriod(occ);
+ s.setOccurenceMultiplier(mult);
+ // now assign the id to the schedule
+ MyMoneySchedule _s(sId, s);
+ s = _s;
+ // read the associated transaction
+// m_payeeList.clear();
+ const MyMoneyDbTable& t = m_db.m_tables["kmmTransactions"];
+ MyMoneySqlQuery q(const_cast <MyMoneyStorageSql*> (this));
+ q.prepare (t.selectAllString(false) + " WHERE id = :id;");
+ q.bindValue(":id", s.id());
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("reading Scheduled Transaction")));
+ if (!q.next()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("retrieving scheduled transaction")));
+ MyMoneyTransaction tx(s.id(), MyMoneyTransaction());
+ ft = t.begin();
+ i = 0;
+ while (ft != t.end()) {
+ CASE(postDate) tx.setPostDate(GETDATE);
+ else CASE(memo) tx.setMemo(GETSTRING);
+ else CASE(entryDate) tx.setEntryDate(GETDATE);
+ else CASE(currencyId) tx.setCommodity(GETCSTRING);
+ else CASE(bankId) tx.setBankID(GETSTRING);
+ ++ft; ++i;
+ }
+
+ qs.bindValue(":id", s.id());
+ if (!qs.exec()) throw new MYMONEYEXCEPTION(buildError (qs, __func__, "reading Scheduled Splits"));
+ while (qs.next()) {
+ MyMoneySplit sp;
+ readSplit (sp, qs, ts);
+ tx.addSplit (sp);
+ }
+// if (!m_payeeList.isEmpty())
+// readPayees(m_payeeList);
+ // Process any key value pair
+ tx.setPairs(readKeyValuePairs("TRANSACTION", s.id()).pairs());
+
+ // If the transaction doesn't have a post date, setTransaction will reject it.
+ // The old way of handling things was to store the next post date in the schedule object
+ // and set the transaction post date to QDate().
+ // For compatibility, if this is the case, copy the next post date from the schedule object
+ // to the transaction object post date.
+ if (!tx.postDate().isValid()) {
+ tx.setPostDate(nextPaymentDue);
+ }
+
+ s.setTransaction(tx);
+
+ // read in the recorded payments
+ sq.bindValue(":id", s.id());
+ if (!sq.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("reading schedule payment history")));
+ while (sq.next()) s.recordPayment (sq.value(0).toDate());
+
+ sList[s.id()] = s;
+
+ //FIXME: enable when schedules have KVPs.
+ // s.setPairs(readKeyValuePairs("SCHEDULE", s.id()).pairs());
+
+ //unsigned long id = extractId(s.id().data());
+ //if(id > lastId)
+ // lastId = id;
+
+ signalProgress(++progress, 0);
+ }
+ return sList;
+}
+
+void MyMoneyStorageSql::readSecurities(void) {
+ TRY
+ m_storage->loadSecurities(fetchSecurities());
+ readFileInfo();
+ m_storage->loadSecurityId(m_hiIdSecurities);
+ PASS
+}
+
+const QMap<QString, MyMoneySecurity> MyMoneyStorageSql::fetchSecurities (const QStringList& /*idList*/, bool /*forUpdate*/) const {
+ DBG("*** Entering MyMoneyStorageSql::readSecurities");
+ signalProgress(0, m_securities, QObject::tr("Loading securities..."));
+ int progress = 0;
+ QMap<QString, MyMoneySecurity> sList;
+ unsigned long lastId = 0;
+ const MyMoneyDbTable& t = m_db.m_tables["kmmSecurities"];
+ MyMoneySqlQuery q(const_cast <MyMoneyStorageSql*> (this));
+ q.prepare (t.selectAllString(false) + " ORDER BY id;");
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("reading Securities")));
+ while (q.next()) {
+ MyMoneyDbTable::field_iterator ft = t.begin();
+ int i = 0;
+ MyMoneySecurity e;
+ QString eid;
+ int saf = 0;
+ while (ft != t.end()) {
+ CASE(id) eid = GETSTRING;
+ else CASE(name) e.setName(GETSTRING);
+ else CASE(symbol) e.setTradingSymbol(GETSTRING);
+ else CASE(type) e.setSecurityType(static_cast<MyMoneySecurity::eSECURITYTYPE>(GETINT));
+ else CASE(smallestAccountFraction) saf = GETINT;
+ else CASE(tradingCurrency) e.setTradingCurrency(GETCSTRING);
+ else CASE(tradingMarket) e.setTradingMarket(GETSTRING);
+ ++ft; ++i;
+ }
+ if(e.tradingCurrency().isEmpty())
+ e.setTradingCurrency(m_storage->pairs()["kmm-baseCurrency"]);
+ if(saf == 0)
+ saf = 100;
+ e.setSmallestAccountFraction(saf);
+
+ // Process any key value pairs
+ e.setPairs(readKeyValuePairs("SECURITY", eid).pairs());
+ //tell the storage objects we have a new security object.
+
+ // FIXME: Adapt to new interface make sure, to take care of the currencies as well
+ // see MyMoneyStorageXML::readSecurites()
+ MyMoneySecurity security(eid,e);
+ sList[security.id()] = security;
+
+ unsigned long id = extractId(security.id());
+ if(id > lastId)
+ lastId = id;
+
+ signalProgress(++progress, 0);
+ }
+ return sList;
+}
+
+void MyMoneyStorageSql::readPrices(void) {
+
+ TRY
+// m_storage->addPrice(MyMoneyPrice(from, to, date, rate, source));
+ PASS
+
+}
+
+const MyMoneyPrice MyMoneyStorageSql::fetchSinglePrice (const QString& fromIdList, const QString& toIdList, const QDate& date_, bool exactDate, bool /*forUpdate*/) const {
+ DBG("*** Entering MyMoneyStorageSql::fetchSinglePrice");
+ const MyMoneyDbTable& t = m_db.m_tables["kmmPrices"];
+ MyMoneyDbTable::field_iterator tableEnd = t.end();
+ MyMoneySqlQuery q(const_cast <MyMoneyStorageSql*> (this));
+ QString queryString = t.selectAllString(false);
+
+ // Use bind variables, instead of just inserting the values in the queryString,
+ // so that values containing a ':' will work.
+ // See balance query for why the date logic seems odd.
+ queryString += " WHERE fromId = :fromId AND toId = :toId AND priceDate < :priceDate ";
+ if (exactDate)
+ queryString += "AND priceDate > :exactDate ";
+
+ queryString += "ORDER BY priceDate DESC;";
+
+ q.prepare(queryString);
+
+ QDate date (date_);
+
+ if(!date.isValid())
+ date = QDate::currentDate();
+
+ q.bindValue(":fromId", fromIdList);
+ q.bindValue(":toId", toIdList);
+ q.bindValue(":priceDate", date.addDays(1).toString(Qt::ISODate));
+
+ if (exactDate)
+ q.bindValue(":exactDate", date.toString(Qt::ISODate));
+
+ if (! q.exec()) {}
+
+ if (q.next()) {
+ MyMoneyDbTable::field_iterator ft = t.begin();
+ int i = 0;
+ QString from;
+ QString to;
+ QDate date;
+ MyMoneyMoney rate;
+ QString source;
+ bool foundFromId = false;
+ bool foundToId = false;
+ bool foundPriceDate = false;
+ bool foundPrice = false;
+ bool foundPriceSource = false;
+ while (ft != tableEnd) {
+ bool foundSomething = false;
+ if (!foundFromId && !foundSomething) {
+ CASE(fromId) {from = GETCSTRING; foundFromId = true; foundSomething = true;}
+ }
+ if (!foundToId && !foundSomething) {
+ CASE(toId) {to = GETCSTRING; foundToId = true; foundSomething = true;}
+ }
+ if (!foundPriceDate && !foundSomething) {
+ CASE(priceDate) {date = GETDATE; foundPriceDate = true; foundSomething = true;}
+ }
+ if (!foundPrice && !foundSomething) {
+ CASE(price) {rate = GETSTRING; foundPrice = true; foundSomething = true;}
+ }
+ if (!foundPriceSource && !foundSomething) {
+ CASE(priceSource) {source = GETSTRING; foundPriceSource = true; foundSomething = true;}
+ }
+ ++ft; ++i;
+ }
+
+ return MyMoneyPrice(fromIdList, toIdList, date, rate, source);
+ }
+
+ return MyMoneyPrice();
+}
+
+const MyMoneyPriceList MyMoneyStorageSql::fetchPrices (const QStringList& fromIdList, const QStringList& toIdList, bool forUpdate) const {
+ DBG("*** Entering MyMoneyStorageSql::readPrices");
+ signalProgress(0, m_prices, QObject::tr("Loading prices..."));
+ int progress = 0;
+ const_cast <MyMoneyStorageSql*> (this)->m_readingPrices = true;
+ MyMoneyPriceList pList;
+ const MyMoneyDbTable& t = m_db.m_tables["kmmPrices"];
+ MyMoneyDbTable::field_iterator tableEnd = t.end();
+ MyMoneySqlQuery q(const_cast <MyMoneyStorageSql*> (this));
+ QString queryString = t.selectAllString(false);
+
+ // Use bind variables, instead of just inserting the values in the queryString,
+ // so that values containing a ':' will work.
+ if (! fromIdList.empty()) {
+ queryString += " WHERE (";
+ for (unsigned i = 0; i < fromIdList.count(); ++i) {
+ queryString += " fromId = :fromId" + QString::number(i) + " OR";
+ }
+ queryString = queryString.left(queryString.length() - 2) + ")";
+ }
+ if (! toIdList.empty()) {
+ queryString += " AND (";
+ for (unsigned i = 0; i < toIdList.count(); ++i) {
+ queryString += " toId = :toId" + QString::number(i) + " OR";
+ }
+ queryString = queryString.left(queryString.length() - 2) + ")";
+ }
+
+
+ if (forUpdate)
+ queryString += " FOR UPDATE";
+
+ queryString += ";";
+
+ q.prepare (queryString);
+
+ if (! fromIdList.empty()) {
+ QStringList::const_iterator bindVal = fromIdList.begin();
+ for (int i = 0; bindVal != fromIdList.end(); ++i, ++bindVal) {
+ q.bindValue (":fromId" + QString::number(i), *bindVal);
+ }
+ }
+ if (! toIdList.empty()) {
+ QStringList::const_iterator bindVal = toIdList.begin();
+ for (int i = 0; bindVal != toIdList.end(); ++i, ++bindVal) {
+ q.bindValue (":toId" + QString::number(i), *bindVal);
+ }
+ }
+
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("reading Prices")));
+ while (q.next()) {
+ MyMoneyDbTable::field_iterator ft = t.begin();
+ int i = 0;
+ QString from;
+ QString to;
+ QDate date;
+ MyMoneyMoney rate;
+ QString source;
+
+ while (ft != tableEnd) {
+ CASE(fromId) from = GETCSTRING;
+ else CASE(toId) to = GETCSTRING;
+ else CASE(priceDate) date = GETDATE;
+ else CASE(price) rate = GETSTRING;
+ else CASE(priceSource) source = GETSTRING;
+ ++ft; ++i;
+ }
+ pList [MyMoneySecurityPair(from, to)].insert(date, MyMoneyPrice(from, to, date, rate, source));
+ signalProgress(++progress, 0);
+ }
+ const_cast <MyMoneyStorageSql*> (this)->m_readingPrices = false;
+
+ return pList;
+}
+
+void MyMoneyStorageSql::readCurrencies(void) {
+ TRY
+ m_storage->loadCurrencies(fetchCurrencies());
+ PASS
+}
+
+const QMap<QString, MyMoneySecurity> MyMoneyStorageSql::fetchCurrencies (const QStringList& idList, bool forUpdate) const {
+ DBG("*** Entering MyMoneyStorageSql::readCurrencies");
+ signalProgress(0, m_currencies, QObject::tr("Loading currencies..."));
+ int progress = 0;
+ QMap<QString, MyMoneySecurity> cList;
+ const MyMoneyDbTable& t = m_db.m_tables["kmmCurrencies"];
+ MyMoneySqlQuery q(const_cast <MyMoneyStorageSql*> (this));
+
+ QString queryString (t.selectAllString(false));
+
+ // Use bind variables, instead of just inserting the values in the queryString,
+ // so that values containing a ':' will work.
+ if (! idList.empty()) {
+ queryString += " WHERE";
+ for (unsigned i = 0; i < idList.count(); ++i)
+ queryString += " isocode = :id" + QString::number(i) + " OR";
+ queryString = queryString.left(queryString.length() - 2);
+ }
+
+ queryString += " ORDER BY ISOcode";
+
+ if (forUpdate)
+ queryString += " FOR UPDATE";
+
+ queryString += ";";
+
+ q.prepare (queryString);
+
+ if (! idList.empty()) {
+ QStringList::const_iterator bindVal = idList.begin();
+ for (int i = 0; bindVal != idList.end(); ++i, ++bindVal) {
+ q.bindValue (":id" + QString::number(i), *bindVal);
+ }
+ }
+
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("reading Currencies")));
+ while (q.next()) {
+ MyMoneyDbTable::field_iterator ft = t.begin();
+ int i = 0;
+ QString id;
+ MyMoneySecurity c;
+ QChar symbol[3];
+ while (ft != t.end()) {
+ CASE(ISOcode) id = GETCSTRING;
+ else CASE(name) c.setName(GETSTRING);
+ else CASE(type) c.setSecurityType(static_cast<MyMoneySecurity::eSECURITYTYPE>(GETINT));
+ else CASE(symbol1) symbol[0] = QChar(GETINT);
+ else CASE(symbol2) symbol[1] = QChar(GETINT);
+ else CASE(symbol3) symbol[2] = QChar(GETINT);
+ else CASE(partsPerUnit) c.setPartsPerUnit(GETINT);
+ else CASE(smallestCashFraction) c.setSmallestCashFraction(GETINT);
+ else CASE(smallestAccountFraction) c.setSmallestAccountFraction(GETINT);
+ ++ft; ++i;
+ }
+ c.setTradingSymbol(QString(symbol, 3).stripWhiteSpace());
+
+ cList[id] = MyMoneySecurity(id, c);
+
+ signalProgress(++progress, 0);
+ }
+ return cList;
+}
+
+void MyMoneyStorageSql::readReports(void) {
+ TRY
+ m_storage->loadReports(fetchReports());
+ readFileInfo();
+ m_storage->loadReportId(m_hiIdReports);
+ PASS
+}
+
+const QMap<QString, MyMoneyReport> MyMoneyStorageSql::fetchReports (const QStringList& /*idList*/, bool /*forUpdate*/) const {
+ DBG("*** Entering MyMoneyStorageSql::readReports");
+ signalProgress(0, m_reports, QObject::tr("Loading reports..."));
+ int progress = 0;
+ const MyMoneyDbTable& t = m_db.m_tables["kmmReportConfig"];
+ MyMoneySqlQuery q(const_cast <MyMoneyStorageSql*> (this));
+ q.prepare (t.selectAllString(true));
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("reading reports")));
+ QMap<QString, MyMoneyReport> rList;
+ while (q.next()) {
+ MyMoneyDbTable::field_iterator ft = t.begin();
+ int i = 0;
+ QDomDocument d;
+ while (ft != t.end()) {
+ CASE(XML) d.setContent(GETSTRING, false);
+ ++ft; ++i;
+ }
+ QDomNode child = d.firstChild();
+ child = child.firstChild();
+ MyMoneyReport report;
+
+ if (report.read(child.toElement()))
+ rList[report.id()] = report;
+
+ signalProgress(++progress, 0);
+ }
+ return rList;
+}
+
+const QMap<QString, MyMoneyBudget> MyMoneyStorageSql::fetchBudgets (const QStringList& idList, bool forUpdate) const {
+ DBG("*** Entering MyMoneyStorageSql::readBudgets");
+ signalProgress(0, m_budgets, QObject::tr("Loading budgets..."));
+ int progress = 0;
+ const MyMoneyDbTable& t = m_db.m_tables["kmmBudgetConfig"];
+ MyMoneySqlQuery q(const_cast <MyMoneyStorageSql*> (this));
+ QString queryString (t.selectAllString(false));
+ if (! idList.empty()) {
+ queryString += " WHERE id = '" + idList.join("' OR id = '") + "'";
+ }
+ if (forUpdate)
+ queryString += " FOR UPDATE";
+
+ queryString += ";";
+
+ q.prepare (queryString);
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("reading budgets")));
+ QMap<QString, MyMoneyBudget> budgets;
+ while (q.next()) {
+ MyMoneyDbTable::field_iterator ft = t.begin();
+ int i = 0;
+ QDomDocument d;
+ while (ft != t.end()) {
+ CASE(XML) d.setContent(GETSTRING, false);
+ ++ft; ++i;
+ }
+ QDomNode child = d.firstChild();
+ child = child.firstChild();
+ MyMoneyBudget budget (child.toElement());
+ budgets.insert(budget.id(), budget);
+ signalProgress(++progress, 0);
+ }
+ return budgets;
+}
+
+void MyMoneyStorageSql::readBudgets(void) {
+ m_storage->loadBudgets(fetchBudgets());
+}
+
+const MyMoneyKeyValueContainer MyMoneyStorageSql::readKeyValuePairs (const QString& kvpType, const QString& kvpId) const {
+ DBG("*** Entering MyMoneyStorageSql::readKeyValuePairs");
+ MyMoneyKeyValueContainer list;
+ MyMoneySqlQuery q(const_cast <MyMoneyStorageSql*> (this));
+ q.prepare ("SELECT kvpKey, kvpData from kmmKeyValuePairs where kvpType = :type and kvpId = :id;");
+ q.bindValue(":type", kvpType);
+ q.bindValue(":id", kvpId);
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("reading Kvp for %1 %2").arg(kvpType)
+ .arg(kvpId)));
+ while (q.next()) list.setValue(q.value(0).toString(), q.value(1).toString());
+ return (list);
+}
+
+const QMap<QString, MyMoneyKeyValueContainer> MyMoneyStorageSql::readKeyValuePairs (const QString& kvpType, const QStringList& kvpIdList) const {
+ DBG("*** Entering MyMoneyStorageSql::readKeyValuePairs");
+ QMap<QString, MyMoneyKeyValueContainer> retval;
+
+ MyMoneySqlQuery q(const_cast <MyMoneyStorageSql*> (this));
+ QString query ("SELECT kvpId, kvpKey, kvpData from kmmKeyValuePairs where kvpType = :type");
+
+ if (!kvpIdList.empty()) {
+ query += " and kvpId IN ('" + kvpIdList.join("', '") + "')";
+ }
+
+ query += " order by kvpId;";
+ q.prepare (query);
+ q.bindValue(":type", kvpType);
+ if (!q.exec()) throw new MYMONEYEXCEPTION(buildError (q, __func__, QString("reading Kvp List for %1").arg(kvpType)));
+ while (q.next()) {
+ retval [q.value(0).toString()].setValue(q.value(1).toString(), q.value(2).toString());
+ }
+
+ return (retval);
+}
+
+long unsigned MyMoneyStorageSql::getNextBudgetId() const {
+ const_cast <MyMoneyStorageSql*> (this)->readFileInfo();
+ return m_hiIdBudgets;
+}
+
+long unsigned MyMoneyStorageSql::getNextAccountId() const {
+ const_cast <MyMoneyStorageSql*> (this)->readFileInfo();
+ return m_hiIdAccounts;
+}
+
+long unsigned MyMoneyStorageSql::getNextInstitutionId() const {
+ const_cast <MyMoneyStorageSql*> (this)->readFileInfo();
+ return m_hiIdInstitutions;
+}
+
+long unsigned MyMoneyStorageSql::getNextPayeeId() const {
+ const_cast <MyMoneyStorageSql*> (this)->readFileInfo();
+ return m_hiIdPayees;
+}
+
+long unsigned MyMoneyStorageSql::getNextReportId() const {
+ const_cast <MyMoneyStorageSql*> (this)->readFileInfo();
+ return m_hiIdReports;
+}
+
+long unsigned MyMoneyStorageSql::getNextScheduleId() const {
+ const_cast <MyMoneyStorageSql*> (this)->readFileInfo();
+ return m_hiIdSchedules;
+}
+
+long unsigned MyMoneyStorageSql::getNextSecurityId() const {
+ const_cast <MyMoneyStorageSql*> (this)->readFileInfo();
+ return m_hiIdSecurities;
+}
+
+long unsigned MyMoneyStorageSql::getNextTransactionId() const {
+ const_cast <MyMoneyStorageSql*> (this)->readFileInfo();
+ return m_hiIdTransactions;
+}
+
+long unsigned MyMoneyStorageSql::incrementBudgetId() {
+ MyMoneySqlQuery q(this);
+
+ startCommitUnit (__func__);
+ q.prepare("SELECT hiBudgetId FROM kmmFileInfo FOR UPDATE");
+ q.exec();
+ q.next();
+ long unsigned returnValue = (unsigned long) q.value(0).toULongLong();
+ ++returnValue;
+ q.prepare("UPDATE kmmFileInfo SET hiBudgetId = " + QString::number(returnValue));
+ q.exec();
+ endCommitUnit (__func__);
+ m_hiIdBudgets = returnValue;
+ return returnValue;
+}
+
+long unsigned MyMoneyStorageSql::incrementAccountId() {
+ MyMoneySqlQuery q(this);
+
+ startCommitUnit (__func__);
+ q.prepare("SELECT hiAccountId FROM kmmFileInfo FOR UPDATE");
+ q.exec();
+ q.next();
+ long unsigned returnValue = (unsigned long) q.value(0).toULongLong();
+ ++returnValue;
+ q.prepare("UPDATE kmmFileInfo SET hiAccountId = " + QString::number(returnValue));
+ q.exec();
+ endCommitUnit (__func__);
+ m_hiIdAccounts = returnValue;
+ return returnValue;
+}
+
+long unsigned MyMoneyStorageSql::incrementInstitutionId() {
+ MyMoneySqlQuery q(this);
+
+ startCommitUnit (__func__);
+ q.prepare("SELECT hiInstitutionId FROM kmmFileInfo FOR UPDATE");
+ q.exec();
+ q.next();
+ long unsigned returnValue = (unsigned long) q.value(0).toULongLong();
+ ++returnValue;
+ q.prepare("UPDATE kmmFileInfo SET hiInstitutionId = " + QString::number(returnValue));
+ q.exec();
+ endCommitUnit (__func__);
+ m_hiIdInstitutions = returnValue;
+ return returnValue;
+}
+
+long unsigned MyMoneyStorageSql::incrementPayeeId() {
+ MyMoneySqlQuery q(this);
+
+ startCommitUnit (__func__);
+ q.prepare("SELECT hiPayeeId FROM kmmFileInfo FOR UPDATE");
+ q.exec();
+ q.next();
+ long unsigned returnValue = (unsigned long) q.value(0).toULongLong();
+ ++returnValue;
+ q.prepare("UPDATE kmmFileInfo SET hiPayeeId = " + QString::number(returnValue));
+ q.exec();
+ endCommitUnit (__func__);
+ m_hiIdPayees = returnValue;
+ return returnValue;
+}
+
+long unsigned MyMoneyStorageSql::incrementReportId() {
+ MyMoneySqlQuery q(this);
+
+ startCommitUnit (__func__);
+ q.prepare("SELECT hiReportId FROM kmmFileInfo FOR UPDATE");
+ q.exec();
+ q.next();
+ long unsigned returnValue = (unsigned long) q.value(0).toULongLong();
+ ++returnValue;
+ q.prepare("UPDATE kmmFileInfo SET hiReportId = " + QString::number(returnValue));
+ q.exec();
+ endCommitUnit (__func__);
+ m_hiIdReports = returnValue;
+ return returnValue;
+}
+
+long unsigned MyMoneyStorageSql::incrementScheduleId() {
+ MyMoneySqlQuery q(this);
+
+ startCommitUnit (__func__);
+ q.prepare("SELECT hiScheduleId FROM kmmFileInfo FOR UPDATE");
+ q.exec();
+ q.next();
+ long unsigned returnValue = (unsigned long) q.value(0).toULongLong();
+ ++returnValue;
+ q.prepare("UPDATE kmmFileInfo SET hiScheduleId = " + QString::number(returnValue));
+ q.exec();
+ endCommitUnit (__func__);
+ m_hiIdSchedules = returnValue;
+ return returnValue;
+}
+
+long unsigned MyMoneyStorageSql::incrementSecurityId() {
+ MyMoneySqlQuery q(this);
+
+ startCommitUnit (__func__);
+ q.prepare("SELECT hiSecurityId FROM kmmFileInfo FOR UPDATE");
+ q.exec();
+ q.next();
+ long unsigned returnValue = (unsigned long) q.value(0).toULongLong();
+ ++returnValue;
+ q.prepare("UPDATE kmmFileInfo SET hiSecurityId = " + QString::number(returnValue));
+ q.exec();
+ endCommitUnit (__func__);
+ m_hiIdSecurities = returnValue;
+ return returnValue;
+}
+
+long unsigned MyMoneyStorageSql::incrementTransactionId() {
+ MyMoneySqlQuery q(this);
+
+ startCommitUnit (__func__);
+ q.prepare("SELECT hiTransactionId FROM kmmFileInfo FOR UPDATE");
+ q.exec();
+ q.next();
+ long unsigned returnValue = (unsigned long) q.value(0).toULongLong();
+ ++returnValue;
+ q.prepare("UPDATE kmmFileInfo SET hiTransactionId = " + QString::number(returnValue));
+ q.exec();
+ endCommitUnit (__func__);
+ m_hiIdTransactions = returnValue;
+ return returnValue;
+}
+
+void MyMoneyStorageSql::loadAccountId(const unsigned long& id)
+{
+ m_hiIdAccounts = id;
+ writeFileInfo();
+}
+
+void MyMoneyStorageSql::loadTransactionId(const unsigned long& id)
+{
+ m_hiIdTransactions = id;
+ writeFileInfo();
+}
+
+void MyMoneyStorageSql::loadPayeeId(const unsigned long& id)
+{
+ m_hiIdPayees = id;
+ writeFileInfo();
+}
+
+void MyMoneyStorageSql::loadInstitutionId(const unsigned long& id)
+{
+ m_hiIdInstitutions = id;
+ writeFileInfo();
+}
+
+void MyMoneyStorageSql::loadScheduleId(const unsigned long& id)
+{
+ m_hiIdSchedules = id;
+ writeFileInfo();
+}
+
+void MyMoneyStorageSql::loadSecurityId(const unsigned long& id)
+{
+ m_hiIdSecurities = id;
+ writeFileInfo();
+}
+
+void MyMoneyStorageSql::loadReportId(const unsigned long& id)
+{
+ m_hiIdReports = id;
+ writeFileInfo();
+}
+
+void MyMoneyStorageSql::loadBudgetId(const unsigned long& id)
+{
+ m_hiIdBudgets = id;
+ writeFileInfo();
+}
+
+//****************************************************
+long unsigned MyMoneyStorageSql::calcHighId
+ (const long unsigned& i, const QString& id) {
+ DBG("*** Entering MyMoneyStorageSql::calcHighId");
+ QString nid = id;
+ long unsigned high = (unsigned long) nid.replace(QRegExp("[A-Z]*"), "").toULongLong();
+ return std::max(high, i);
+}
+
+void MyMoneyStorageSql::setProgressCallback(void(*callback)(int, int, const QString&)) {
+ m_progressCallback = callback;
+}
+
+void MyMoneyStorageSql::signalProgress(int current, int total, const QString& msg) const {
+ if (m_progressCallback != 0)
+ (*m_progressCallback)(current, total, msg);
+}
+
+// **************************** Error display routine *******************************
+QString& MyMoneyStorageSql::buildError (const QSqlQuery& q, const QString& function, const QString& message) const {
+ QString s = QString("Error in function %1 : %2").arg(function).arg(message);
+ QSqlError e = lastError();
+ s += QString ("\nDriver = %1, Host = %2, User = %3, Database = %4")
+ .arg(driverName()).arg(hostName()).arg(userName()).arg(databaseName());
+ s += QString ("\nDriver Error: %1").arg(e.driverText());
+ s += QString ("\nDatabase Error No %1: %2").arg(e.number()).arg(e.databaseText());
+ e = q.lastError();
+ s += QString ("\nExecuted: %1").arg(q.executedQuery());
+ s += QString ("\nQuery error No %1: %2").arg(e.number()).arg(e.text());
+
+ const_cast <MyMoneyStorageSql*> (this)->m_error = s;
+ qDebug("%s", s.ascii());
+ const_cast <MyMoneyStorageSql*> (this)->cancelCommitUnit(function);
+ return (const_cast <MyMoneyStorageSql*> (this)->m_error);
+}
+
+// ************************* Build table descriptions ****************************
+MyMoneyDbDef::MyMoneyDbDef () {
+ FileInfo();
+ Institutions();
+ Payees();
+ Accounts();
+ Transactions();
+ Splits();
+ KeyValuePairs();
+ Schedules();
+ SchedulePaymentHistory();
+ Securities();
+ Prices();
+ Currencies();
+ Reports();
+ Budgets();
+ Balances();
+}
+
+/* PRIMARYKEY - these fields combine to form a unique key field on which the db will create an index
+ NOTNULL - this field should never be null
+ UNSIGNED - for numeric types, indicates the field is UNSIGNED
+ ?ISKEY - where there is no primary key, these fields can be used to uniquely identify a record
+ Default is that a field is not a part of a primary key, nullable, and if numeric, signed */
+
+#define PRIMARYKEY true
+#define NOTNULL true
+#define UNSIGNED false
+//#define ISKEY true
+
+void MyMoneyDbDef::FileInfo(void){
+ QValueList<KSharedPtr <MyMoneyDbColumn> > fields;
+ fields.append(new MyMoneyDbColumn("version", "varchar(16)"));
+ fields.append(new MyMoneyDbColumn("created", "date"));
+ fields.append(new MyMoneyDbColumn("lastModified", "date"));
+ fields.append(new MyMoneyDbColumn("baseCurrency", "char(3)"));
+ fields.append(new MyMoneyDbIntColumn("institutions", MyMoneyDbIntColumn::BIG, UNSIGNED));
+ fields.append(new MyMoneyDbIntColumn("accounts", MyMoneyDbIntColumn::BIG, UNSIGNED));
+ fields.append(new MyMoneyDbIntColumn("payees", MyMoneyDbIntColumn::BIG, UNSIGNED));
+ fields.append(new MyMoneyDbIntColumn("transactions", MyMoneyDbIntColumn::BIG, UNSIGNED));
+ fields.append(new MyMoneyDbIntColumn("splits", MyMoneyDbIntColumn::BIG, UNSIGNED));
+ fields.append(new MyMoneyDbIntColumn("securities", MyMoneyDbIntColumn::BIG, UNSIGNED));
+ fields.append(new MyMoneyDbIntColumn("prices", MyMoneyDbIntColumn::BIG, UNSIGNED));
+ fields.append(new MyMoneyDbIntColumn("currencies", MyMoneyDbIntColumn::BIG, UNSIGNED));
+ fields.append(new MyMoneyDbIntColumn("schedules", MyMoneyDbIntColumn::BIG, UNSIGNED));
+ fields.append(new MyMoneyDbIntColumn("reports", MyMoneyDbIntColumn::BIG, UNSIGNED));
+ fields.append(new MyMoneyDbIntColumn("kvps", MyMoneyDbIntColumn::BIG, UNSIGNED));
+ fields.append(new MyMoneyDbColumn("dateRangeStart", "date"));
+ fields.append(new MyMoneyDbColumn("dateRangeEnd", "date"));
+ fields.append(new MyMoneyDbIntColumn("hiInstitutionId", MyMoneyDbIntColumn::BIG, UNSIGNED));
+ fields.append(new MyMoneyDbIntColumn("hiPayeeId", MyMoneyDbIntColumn::BIG, UNSIGNED));
+ fields.append(new MyMoneyDbIntColumn("hiAccountId", MyMoneyDbIntColumn::BIG, UNSIGNED));
+ fields.append(new MyMoneyDbIntColumn("hiTransactionId", MyMoneyDbIntColumn::BIG, UNSIGNED));
+ fields.append(new MyMoneyDbIntColumn("hiScheduleId", MyMoneyDbIntColumn::BIG, UNSIGNED));
+ fields.append(new MyMoneyDbIntColumn("hiSecurityId", MyMoneyDbIntColumn::BIG, UNSIGNED));
+ fields.append(new MyMoneyDbIntColumn("hiReportId", MyMoneyDbIntColumn::BIG, UNSIGNED));
+ fields.append(new MyMoneyDbColumn("encryptData", "varchar(255)"));
+ fields.append(new MyMoneyDbColumn("updateInProgress", "char(1)"));
+ fields.append(new MyMoneyDbIntColumn("budgets", MyMoneyDbIntColumn::BIG, UNSIGNED));
+ fields.append(new MyMoneyDbIntColumn("hiBudgetId", MyMoneyDbIntColumn::BIG, UNSIGNED));
+ fields.append(new MyMoneyDbColumn("logonUser", "varchar(255)"));
+ fields.append(new MyMoneyDbDatetimeColumn("logonAt"));
+ fields.append(new MyMoneyDbIntColumn("fixLevel",
+ MyMoneyDbIntColumn::MEDIUM, UNSIGNED));
+ MyMoneyDbTable t("kmmFileInfo", fields);
+ t.buildSQLStrings();
+ m_tables[t.name()] = t;
+}
+
+void MyMoneyDbDef::Institutions(void){
+ QValueList<KSharedPtr <MyMoneyDbColumn> > fields;
+ fields.append(new MyMoneyDbColumn("id", "varchar(32)", PRIMARYKEY, NOTNULL));
+ fields.append(new MyMoneyDbTextColumn("name", MyMoneyDbTextColumn::NORMAL, false, NOTNULL));
+ fields.append(new MyMoneyDbTextColumn("manager"));
+ fields.append(new MyMoneyDbTextColumn("routingCode"));
+ fields.append(new MyMoneyDbTextColumn("addressStreet"));
+ fields.append(new MyMoneyDbTextColumn("addressCity"));
+ fields.append(new MyMoneyDbTextColumn("addressZipcode"));
+ fields.append(new MyMoneyDbTextColumn("telephone"));
+ MyMoneyDbTable t("kmmInstitutions", fields);
+ t.buildSQLStrings();
+ m_tables[t.name()] = t;
+}
+
+void MyMoneyDbDef::Payees(void){
+ QValueList<KSharedPtr <MyMoneyDbColumn> > fields;
+ fields.append(new MyMoneyDbColumn("id", "varchar(32)", PRIMARYKEY, NOTNULL));
+ fields.append(new MyMoneyDbTextColumn("name"));
+ fields.append(new MyMoneyDbTextColumn("reference"));
+ fields.append(new MyMoneyDbTextColumn("email"));
+ fields.append(new MyMoneyDbTextColumn("addressStreet"));
+ fields.append(new MyMoneyDbTextColumn("addressCity"));
+ fields.append(new MyMoneyDbTextColumn("addressZipcode"));
+ fields.append(new MyMoneyDbTextColumn("addressState"));
+ fields.append(new MyMoneyDbTextColumn("telephone"));
+ fields.append(new MyMoneyDbTextColumn("notes", MyMoneyDbTextColumn::LONG));
+ fields.append(new MyMoneyDbColumn("defaultAccountId", "varchar(32)"));
+ fields.append(new MyMoneyDbIntColumn("matchData", MyMoneyDbIntColumn::TINY, UNSIGNED));
+ fields.append(new MyMoneyDbColumn("matchIgnoreCase", "char(1)"));
+ fields.append(new MyMoneyDbTextColumn("matchKeys"));
+ MyMoneyDbTable t("kmmPayees", fields);
+ t.buildSQLStrings();
+ m_tables[t.name()] = t;
+}
+
+void MyMoneyDbDef::Accounts(void){
+ QValueList<KSharedPtr <MyMoneyDbColumn> > fields;
+ fields.append(new MyMoneyDbColumn("id", "varchar(32)", PRIMARYKEY, NOTNULL));
+ fields.append(new MyMoneyDbColumn("institutionId", "varchar(32)"));
+ fields.append(new MyMoneyDbColumn("parentId", "varchar(32)"));
+ fields.append(new MyMoneyDbDatetimeColumn("lastReconciled"));
+ fields.append(new MyMoneyDbDatetimeColumn("lastModified"));
+ fields.append(new MyMoneyDbColumn("openingDate", "date"));
+ fields.append(new MyMoneyDbTextColumn("accountNumber"));
+ fields.append(new MyMoneyDbColumn("accountType", "varchar(16)", false, NOTNULL));
+ fields.append(new MyMoneyDbTextColumn("accountTypeString"));
+ fields.append(new MyMoneyDbColumn("isStockAccount", "char(1)"));
+ fields.append(new MyMoneyDbTextColumn("accountName"));
+ fields.append(new MyMoneyDbTextColumn("description"));
+ fields.append(new MyMoneyDbColumn("currencyId", "varchar(32)"));
+ fields.append(new MyMoneyDbTextColumn("balance"));
+ fields.append(new MyMoneyDbTextColumn("balanceFormatted"));
+ fields.append(new MyMoneyDbIntColumn("transactionCount", MyMoneyDbIntColumn::BIG, UNSIGNED));
+ MyMoneyDbTable t("kmmAccounts", fields);
+ t.buildSQLStrings();
+ m_tables[t.name()] = t;
+}
+
+void MyMoneyDbDef::Transactions(void){
+ QValueList<KSharedPtr <MyMoneyDbColumn> > fields;
+ fields.append(new MyMoneyDbColumn("id", "varchar(32)", PRIMARYKEY, NOTNULL));
+ fields.append(new MyMoneyDbColumn("txType", "char(1)"));
+ fields.append(new MyMoneyDbDatetimeColumn("postDate"));
+ fields.append(new MyMoneyDbTextColumn("memo"));
+ fields.append(new MyMoneyDbDatetimeColumn("entryDate"));
+ fields.append(new MyMoneyDbColumn("currencyId", "char(3)"));
+ fields.append(new MyMoneyDbTextColumn("bankId"));
+ MyMoneyDbTable t("kmmTransactions", fields);
+ t.buildSQLStrings();
+ m_tables[t.name()] = t;
+}
+
+void MyMoneyDbDef::Splits(void){
+ QValueList<KSharedPtr <MyMoneyDbColumn> > fields;
+ fields.append(new MyMoneyDbColumn("transactionId", "varchar(32)", PRIMARYKEY, NOTNULL));
+ fields.append(new MyMoneyDbColumn("txType", "char(1)"));
+ fields.append(new MyMoneyDbIntColumn("splitId", MyMoneyDbIntColumn::SMALL, UNSIGNED, PRIMARYKEY, NOTNULL));
+ fields.append(new MyMoneyDbColumn("payeeId", "varchar(32)"));
+ fields.append(new MyMoneyDbDatetimeColumn("reconcileDate"));
+ fields.append(new MyMoneyDbColumn("action", "varchar(16)"));
+ fields.append(new MyMoneyDbColumn("reconcileFlag", "char(1)"));
+ fields.append(new MyMoneyDbTextColumn("value", MyMoneyDbTextColumn::NORMAL, false, NOTNULL));
+ fields.append(new MyMoneyDbColumn("valueFormatted", "text"));
+ fields.append(new MyMoneyDbTextColumn("shares", MyMoneyDbTextColumn::NORMAL, false, NOTNULL));
+ fields.append(new MyMoneyDbTextColumn("sharesFormatted"));
+ fields.append(new MyMoneyDbTextColumn("price", MyMoneyDbTextColumn::NORMAL, false));
+ fields.append(new MyMoneyDbTextColumn("priceFormatted"));
+ fields.append(new MyMoneyDbTextColumn("memo"));
+ fields.append(new MyMoneyDbColumn("accountId", "varchar(32)", false, NOTNULL));
+ fields.append(new MyMoneyDbColumn("checkNumber", "varchar(32)"));
+ fields.append(new MyMoneyDbDatetimeColumn("postDate"));
+ fields.append(new MyMoneyDbTextColumn("bankId"));
+ MyMoneyDbTable t("kmmSplits", fields);
+ QStringList list;
+ list << "accountId" << "txType";
+ t.addIndex("kmmSplitsaccount_type", list, false);
+ t.buildSQLStrings();
+ m_tables[t.name()] = t;
+}
+
+void MyMoneyDbDef::KeyValuePairs(void){
+ QValueList<KSharedPtr <MyMoneyDbColumn> > fields;
+ fields.append(new MyMoneyDbColumn("kvpType", "varchar(16)", false, NOTNULL));
+ fields.append(new MyMoneyDbColumn("kvpId", "varchar(32)"));
+ fields.append(new MyMoneyDbColumn("kvpKey", "varchar(255)", false, NOTNULL));
+ fields.append(new MyMoneyDbTextColumn("kvpData"));
+ MyMoneyDbTable t("kmmKeyValuePairs", fields);
+ QStringList list;
+ list << "kvpType" << "kvpId";
+ t.addIndex("type_id", list, false);
+ t.buildSQLStrings();
+ m_tables[t.name()] = t;
+}
+
+void MyMoneyDbDef::Schedules(void){
+ QValueList<KSharedPtr <MyMoneyDbColumn> > fields;
+ fields.append(new MyMoneyDbColumn("id", "varchar(32)", PRIMARYKEY, NOTNULL));
+ fields.append(new MyMoneyDbTextColumn("name", MyMoneyDbTextColumn::NORMAL, false, NOTNULL));
+ fields.append(new MyMoneyDbIntColumn("type", MyMoneyDbIntColumn::TINY, UNSIGNED, false, NOTNULL));
+ fields.append(new MyMoneyDbTextColumn("typeString"));
+ fields.append(new MyMoneyDbIntColumn("occurence", MyMoneyDbIntColumn::SMALL, UNSIGNED, false,
+ NOTNULL));
+ fields.append(new MyMoneyDbIntColumn("occurenceMultiplier", MyMoneyDbIntColumn::SMALL, UNSIGNED,
+ false, NOTNULL));
+ fields.append(new MyMoneyDbTextColumn("occurenceString"));
+ fields.append(new MyMoneyDbIntColumn("paymentType", MyMoneyDbIntColumn::TINY, UNSIGNED));
+ fields.append(new MyMoneyDbTextColumn("paymentTypeString", MyMoneyDbTextColumn::LONG));
+ fields.append(new MyMoneyDbColumn("startDate", "date", false, NOTNULL));
+ fields.append(new MyMoneyDbColumn("endDate", "date"));
+ fields.append(new MyMoneyDbColumn("fixed", "char(1)", false, NOTNULL));
+ fields.append(new MyMoneyDbColumn("autoEnter", "char(1)", false, NOTNULL));
+ fields.append(new MyMoneyDbColumn("lastPayment", "date"));
+ fields.append(new MyMoneyDbColumn("nextPaymentDue", "date"));
+ fields.append(new MyMoneyDbIntColumn("weekendOption", MyMoneyDbIntColumn::TINY, UNSIGNED, false,
+ NOTNULL));
+ fields.append(new MyMoneyDbTextColumn("weekendOptionString"));
+ MyMoneyDbTable t("kmmSchedules", fields);
+ t.buildSQLStrings();
+ m_tables[t.name()] = t;
+}
+
+void MyMoneyDbDef::SchedulePaymentHistory(void){
+ QValueList<KSharedPtr <MyMoneyDbColumn> > fields;
+ fields.append(new MyMoneyDbColumn("schedId", "varchar(32)", PRIMARYKEY, NOTNULL));
+ fields.append(new MyMoneyDbColumn("payDate", "date", PRIMARYKEY, NOTNULL));
+ MyMoneyDbTable t("kmmSchedulePaymentHistory", fields);
+ t.buildSQLStrings();
+ m_tables[t.name()] = t;
+}
+
+void MyMoneyDbDef::Securities(void){
+ QValueList<KSharedPtr <MyMoneyDbColumn> > fields;
+ fields.append(new MyMoneyDbColumn("id", "varchar(32)", PRIMARYKEY, NOTNULL));
+ fields.append(new MyMoneyDbColumn("name", "text", false, NOTNULL));
+ fields.append(new MyMoneyDbTextColumn("symbol"));
+ fields.append(new MyMoneyDbIntColumn("type", MyMoneyDbIntColumn::SMALL, UNSIGNED, false, NOTNULL));
+ fields.append(new MyMoneyDbTextColumn("typeString"));
+ fields.append(new MyMoneyDbColumn("smallestAccountFraction", "varchar(24)"));
+ fields.append(new MyMoneyDbTextColumn("tradingMarket"));
+ fields.append(new MyMoneyDbColumn("tradingCurrency", "char(3)"));
+ MyMoneyDbTable t("kmmSecurities", fields);
+ t.buildSQLStrings();
+ m_tables[t.name()] = t;
+}
+
+void MyMoneyDbDef::Prices(void){
+ QValueList<KSharedPtr <MyMoneyDbColumn> > fields;
+ fields.append(new MyMoneyDbColumn("fromId", "varchar(32)", PRIMARYKEY, NOTNULL));
+ fields.append(new MyMoneyDbColumn("toId", "varchar(32)", PRIMARYKEY, NOTNULL));
+ fields.append(new MyMoneyDbColumn("priceDate", "date", PRIMARYKEY, NOTNULL));
+ fields.append(new MyMoneyDbTextColumn("price", MyMoneyDbTextColumn::NORMAL, false, NOTNULL));
+ fields.append(new MyMoneyDbTextColumn("priceFormatted"));
+ fields.append(new MyMoneyDbTextColumn("priceSource"));
+ MyMoneyDbTable t("kmmPrices", fields);
+ t.buildSQLStrings();
+ m_tables[t.name()] = t;
+}
+
+void MyMoneyDbDef::Currencies(void){
+ QValueList<KSharedPtr <MyMoneyDbColumn> > fields;
+ fields.append(new MyMoneyDbColumn("ISOcode", "char(3)", PRIMARYKEY, NOTNULL));
+ fields.append(new MyMoneyDbTextColumn("name", MyMoneyDbTextColumn::NORMAL, false, NOTNULL));
+ fields.append(new MyMoneyDbIntColumn("type", MyMoneyDbIntColumn::SMALL, UNSIGNED));
+ fields.append(new MyMoneyDbTextColumn("typeString"));
+ fields.append(new MyMoneyDbIntColumn("symbol1", MyMoneyDbIntColumn::SMALL, UNSIGNED));
+ fields.append(new MyMoneyDbIntColumn("symbol2", MyMoneyDbIntColumn::SMALL, UNSIGNED));
+ fields.append(new MyMoneyDbIntColumn("symbol3", MyMoneyDbIntColumn::SMALL, UNSIGNED));
+ fields.append(new MyMoneyDbColumn("symbolString", "varchar(255)"));
+ fields.append(new MyMoneyDbColumn("partsPerUnit", "varchar(24)"));
+ fields.append(new MyMoneyDbColumn("smallestCashFraction", "varchar(24)"));
+ fields.append(new MyMoneyDbColumn("smallestAccountFraction", "varchar(24)"));
+ MyMoneyDbTable t("kmmCurrencies", fields);
+ t.buildSQLStrings();
+ m_tables[t.name()] = t;
+}
+
+void MyMoneyDbDef::Reports(void) {
+ QValueList<KSharedPtr <MyMoneyDbColumn> > fields;
+ fields.append(new MyMoneyDbColumn("name", "varchar(255)", false, NOTNULL));
+ fields.append(new MyMoneyDbTextColumn("XML", MyMoneyDbTextColumn::LONG));
+ fields.append(new MyMoneyDbColumn("id", "varchar(32)", PRIMARYKEY, NOTNULL));
+ MyMoneyDbTable t("kmmReportConfig", fields);
+ t.buildSQLStrings();
+ m_tables[t.name()] = t;
+}
+
+void MyMoneyDbDef::Budgets(void){
+ QValueList<KSharedPtr <MyMoneyDbColumn> > fields;
+ fields.append(new MyMoneyDbColumn("id", "varchar(32)", PRIMARYKEY, NOTNULL));
+ fields.append(new MyMoneyDbColumn("name", "text", false, NOTNULL));
+ fields.append(new MyMoneyDbColumn("start", "date", false, NOTNULL));
+ fields.append(new MyMoneyDbTextColumn("XML", MyMoneyDbTextColumn::LONG));
+ MyMoneyDbTable t("kmmBudgetConfig", fields);
+ t.buildSQLStrings();
+ m_tables[t.name()] = t;
+}
+
+void MyMoneyDbDef::Balances(void){
+ MyMoneyDbView v("kmmBalances", "CREATE VIEW kmmBalances AS "
+ "SELECT kmmAccounts.id AS id, kmmAccounts.currencyId, "
+ "kmmSplits.txType, kmmSplits.value, kmmSplits.shares, "
+ "kmmSplits.postDate AS balDate, "
+ "kmmTransactions.currencyId AS txCurrencyId "
+ "FROM kmmAccounts, kmmSplits, kmmTransactions "
+ "WHERE kmmSplits.txType = 'N' "
+ "AND kmmSplits.accountId = kmmAccounts.id "
+ "AND kmmSplits.transactionId = kmmTransactions.id;");
+ m_views[v.name()] = v;
+}
+
+// function to write create SQL to a stream
+const QString MyMoneyDbDef::generateSQL (const QString& driver) const {
+ QString retval;
+ databaseTypeE dbType = m_drivers.driverToType(driver);
+ table_iterator tt = tableBegin();
+ while (tt != tableEnd()) {
+ retval += (*tt).generateCreateSQL(dbType) + '\n';
+ ++tt;
+ }
+ view_iterator vt = viewBegin();
+ while (vt != viewEnd()) {
+ retval += (*vt).createString() + '\n';
+ ++vt;
+ }
+ retval += '\n';
+
+ MyMoneyDbTable fi = m_tables["kmmFileInfo"];
+ QString qs = fi.insertString();
+ MyMoneyDbTable::field_iterator fit;
+ for (fit = fi.begin(); fit != fi.end(); ++fit) {
+ QString toReplace = (*fit)->name();
+ toReplace.prepend(':');
+ QString replace = "NULL";
+ if ((*fit)->name() == "version")
+ replace = QString::number(m_currentVersion);
+ if ((*fit)->name() == "fixLevel")
+ replace = QString::number
+ (MyMoneyFile::instance()->storage()->currentFixVersion());
+ if ((*fit)->name() == "created")
+ replace = QDate::currentDate().toString(Qt::ISODate);
+ if ((*fit)->name() == "lastModified")
+ replace = QDate::currentDate().toString(Qt::ISODate);
+ if ((*fit)->name() == "updateInProgress")
+ replace = enclose("N");
+ qs.replace(toReplace, replace);
+ }
+ qs += "\n\n";
+ retval += qs;
+
+ qs = QString();
+ unsigned int i;
+ QValueList<MyMoneyAccount> stdList;
+ stdList.append (MyMoneyFile::instance()->asset());
+ stdList.append (MyMoneyFile::instance()->equity());
+ stdList.append (MyMoneyFile::instance()->expense());
+ stdList.append (MyMoneyFile::instance()->income());
+ stdList.append (MyMoneyFile::instance()->liability());
+ for (i = 0; i < stdList.count(); ++i) {
+ MyMoneyAccount* pac = &stdList[i];
+ MyMoneyDbTable ac = m_tables["kmmAccounts"];
+ qs = ac.insertString();
+ MyMoneyDbTable::field_iterator act;
+ // do the following in reverse so the 'formatted' fields are
+ // correctly handled.
+ // Hmm, how does one use a QValueListIterator in reverse
+ // It'll be okay in Qt4 with QListIterator
+ for (act = ac.end(), --act; act != ac.begin(); --act) {
+ QString toReplace = (*act)->name();
+ toReplace.prepend(':');
+ QString replace = "NULL";
+ if ((*act)->name() == "accountType")
+ replace = QString::number(pac->accountType());
+ if ((*act)->name() == "accountTypeString")
+ replace = enclose(pac->name());
+ if ((*act)->name() == "isStockAccount")
+ replace = enclose("N");
+ if ((*act)->name() == "accountName")
+ replace = enclose(pac->name());
+ qs.replace(toReplace, replace);
+ }
+ qs.replace (":id", enclose(pac->id())); // a real kludge
+ qs += "\n\n";
+ retval += qs;
+ }
+ return retval;
+}
+
+//*****************************************************************************
+
+void MyMoneyDbTable::addIndex(const QString& name, const QStringList& columns, bool unique) {
+ m_indices.push_back (MyMoneyDbIndex (m_name, name, columns, unique));
+}
+
+void MyMoneyDbTable::buildSQLStrings (void) {
+ // build fixed SQL strings for this table
+ // build the insert string with placeholders for each field
+ QString qs = QString("INSERT INTO %1 (").arg(name());
+ QString ws = ") VALUES (";
+ field_iterator ft = m_fields.begin();
+ while (ft != m_fields.end()) {
+ qs += QString("%1, ").arg((*ft)->name());
+ ws += QString(":%1, ").arg((*ft)->name());
+ ++ft;
+ }
+ qs = qs.left(qs.length() - 2);
+ ws = ws.left(ws.length() - 2);
+ m_insertString = qs + ws + ");";
+ // build a 'select all' string (select * is deprecated)
+ // don't terminate with semicolon coz we may want a where or order clause
+ m_selectAllString = "SELECT " + columnList() + " FROM " + name();;
+
+ // build an update string; key fields go in the where clause
+ qs = "UPDATE " + name() + " SET ";
+ ws = QString();
+ ft = m_fields.begin();
+ while (ft != m_fields.end()) {
+ if ((*ft)->isPrimaryKey()) {
+ if (!ws.isEmpty()) ws += " AND ";
+ ws += QString("%1 = :%2").arg((*ft)->name()).arg((*ft)->name());
+ } else {
+ qs += QString("%1 = :%2, ").arg((*ft)->name()).arg((*ft)->name());
+ }
+ ++ft;
+ }
+ qs = qs.left(qs.length() - 2);
+ if (!ws.isEmpty()) qs += " WHERE " + ws;
+ m_updateString = qs + ";";
+ // build a delete string; where clause as for update
+ qs = "DELETE FROM " + name();
+ if (!ws.isEmpty()) qs += " WHERE " + ws;
+ m_deleteString = qs + ";";
+ }
+
+const QString MyMoneyDbTable::columnList() const {
+ field_iterator ft = m_fields.begin();
+ QString qs;
+ ft = m_fields.begin();
+ while (ft != m_fields.end()) {
+ qs += QString("%1, ").arg((*ft)->name());
+ ++ft;
+ }
+ return (qs.left(qs.length() - 2));
+}
+
+const QString MyMoneyDbTable::generateCreateSQL (databaseTypeE dbType) const {
+ QString qs = QString("CREATE TABLE %1 (").arg(name());
+ QString pkey;
+ for (field_iterator it = m_fields.begin(); it != m_fields.end(); ++it) {
+ qs += (*it)->generateDDL (dbType) + ", ";
+ if ((*it)->isPrimaryKey ())
+ pkey += (*it)->name () + ", ";
+ }
+
+ if (!pkey.isEmpty()) {
+ qs += "PRIMARY KEY (" + pkey;
+ qs = qs.left(qs.length() -2) + "))";
+ } else {
+ qs = qs.left(qs.length() -2) + ")";
+ }
+
+ if (dbType == Mysql)
+ qs += " ENGINE = InnoDB;\n";
+ else
+ qs += ";\n";
+
+ for (index_iterator ii = m_indices.begin(); ii != m_indices.end(); ++ii) {
+ qs += (*ii).generateDDL(dbType);
+ }
+ return qs;
+}
+
+const QString MyMoneyDbTable::dropPrimaryKeyString(databaseTypeE dbType) const
+{
+ if (dbType == Mysql || dbType == Oracle8)
+ return "ALTER TABLE " + m_name + " DROP PRIMARY KEY;";
+ else if (dbType == Postgresql)
+ return "ALTER TABLE " + m_name + " DROP CONSTRAINT " + m_name + "_pkey;";
+ else if (dbType == Sqlite3)
+ return "";
+
+ return "";
+}
+
+const QString MyMoneyDbTable::modifyColumnString(databaseTypeE dbType, const QString& columnName, const MyMoneyDbColumn& newDef) const {
+ QString qs = "ALTER TABLE " + m_name + " ";
+ if (dbType == Mysql)
+ qs += "CHANGE " + columnName + " " + newDef.generateDDL(dbType);
+ else if (dbType == Postgresql)
+ qs += "ALTER COLUMN " + columnName + " TYPE " + newDef.generateDDL(dbType).section(' ', 1);
+ else if (dbType == Sqlite3)
+ qs = "";
+ else if (dbType == Oracle8)
+ qs = "MODIFY " + columnName + " " + newDef.generateDDL(dbType);
+
+ return qs;
+}
+
+//*****************************************************************************
+const QString MyMoneyDbIndex::generateDDL (databaseTypeE dbType) const
+{
+ Q_UNUSED(dbType);
+
+ QString qs = "CREATE ";
+
+ if (m_unique)
+ qs += "UNIQUE ";
+
+ qs += "INDEX " + m_table + "_" + m_name + "_idx ON "
+ + m_table + " (";
+
+ // The following should probably be revised. MySQL supports an index on
+ // partial columns, but not on a function. Postgres supports an index on
+ // the result of an SQL function, but not a partial column. There should be
+ // a way to merge these, and support other DBMSs like SQLite at the same time.
+ // For now, if we just use plain columns, this will work fine.
+ for (QStringList::const_iterator it = m_columns.begin(); it != m_columns.end(); ++it) {
+ qs += *it + ",";
+ }
+
+ qs = qs.left(qs.length() - 1) + ");\n";
+
+ return qs;
+}
+
+//*****************************************************************************
+// These are the actual column types.
+// TODO: consider changing all the else-if statements to driver classes.
+//
+
+MyMoneyDbColumn* MyMoneyDbColumn::clone () const
+{ return (new MyMoneyDbColumn (*this)); }
+
+MyMoneyDbIntColumn* MyMoneyDbIntColumn::clone () const
+{ return (new MyMoneyDbIntColumn (*this)); }
+
+MyMoneyDbDatetimeColumn* MyMoneyDbDatetimeColumn::clone () const
+{ return (new MyMoneyDbDatetimeColumn (*this)); }
+
+MyMoneyDbTextColumn* MyMoneyDbTextColumn::clone () const
+{ return (new MyMoneyDbTextColumn (*this)); }
+
+const QString MyMoneyDbColumn::generateDDL (databaseTypeE dbType) const
+{
+ Q_UNUSED(dbType);
+
+ QString qs = name() + " " + type();
+ if (isNotNull()) qs += " NOT NULL";
+ return qs;
+}
+
+const QString MyMoneyDbIntColumn::generateDDL (databaseTypeE dbType) const
+{
+ QString qs = name() + " ";
+
+ switch (m_type) {
+ case MyMoneyDbIntColumn::TINY:
+ if (dbType == Mysql || dbType == Sqlite3) {
+ qs += "tinyint ";
+ } else if (dbType == Postgresql) {
+ qs += "int2 ";
+ } else if (dbType == Db2) {
+ qs += "smallint ";
+ } else if (dbType == Oracle8) {
+ qs += "number(3) ";
+ } else {
+ // cross your fingers...
+ qs += "smallint ";
+ }
+ break;
+ case MyMoneyDbIntColumn::SMALL:
+ if (dbType == Mysql || dbType == Db2 || dbType == Sqlite3) {
+ qs += "smallint ";
+ } else if (dbType == Postgresql) {
+ qs += "int2 ";
+ } else if (dbType == Oracle8) {
+ qs += "number(5) ";
+ } else {
+ // cross your fingers...
+ qs += "smallint ";
+ }
+ break;
+ case MyMoneyDbIntColumn::MEDIUM:
+ if (dbType == Mysql || dbType == Db2) {
+ qs += "int ";
+ } else if (dbType == Postgresql) {
+ qs += "int4 ";
+ } else if (dbType == Sqlite3) {
+ qs += "integer ";
+ } else if (dbType == Oracle8) {
+ qs += "number(10) ";
+ } else {
+ // cross your fingers...
+ qs += "int ";
+ }
+ break;
+ case MyMoneyDbIntColumn::BIG:
+ if (dbType == Mysql || dbType == Db2 || dbType == Sqlite3) {
+ qs += "bigint ";
+ } else if (dbType == Postgresql) {
+ qs += "int8 ";
+ } else if (dbType == Oracle8) {
+ qs += "number(20) ";
+ } else {
+ // cross your fingers...
+ qs += "bigint ";
+ }
+ break;
+ default:
+ qs += "int ";
+ break;
+ }
+
+ if ((! m_isSigned) && (dbType == Mysql || dbType == Sqlite3)) {
+ qs += "unsigned ";
+ }
+
+ if (isNotNull()) qs += " NOT NULL";
+ if ((! m_isSigned) && (dbType == Postgresql)) {
+ qs += " check(" + name() + " >= 0)";
+ }
+ return qs;
+}
+
+const QString MyMoneyDbTextColumn::generateDDL (databaseTypeE dbType) const
+{
+ QString qs = name() + " ";
+
+ switch (m_type) {
+ case MyMoneyDbTextColumn::TINY:
+ if (dbType == Mysql || dbType == Sqlite3) {
+ qs += "tinytext ";
+ } else if (dbType == Postgresql) {
+ qs += "text ";
+ } else if (dbType == Db2) {
+ qs += "varchar(255) ";
+ } else if (dbType == Oracle8) {
+ qs += "varchar2(255) ";
+ } else {
+ // cross your fingers...
+ qs += "tinytext ";
+ }
+ break;
+ case MyMoneyDbTextColumn::NORMAL:
+ if (dbType == Mysql || dbType == Sqlite3 || dbType == Postgresql) {
+ qs += "text ";
+ } else if (dbType == Db2) {
+ qs += "clob(64K) ";
+ } else if (dbType == Oracle8) {
+ qs += "clob ";
+ } else {
+ // cross your fingers...
+ qs += "text ";
+ }
+ break;
+ case MyMoneyDbTextColumn::MEDIUM:
+ if (dbType == Mysql || dbType == Sqlite3 ) {
+ qs += "mediumtext ";
+ } else if (dbType == Postgresql) {
+ qs += "text ";
+ } else if (dbType == Db2) {
+ qs += "clob(16M) ";
+ } else if (dbType == Oracle8) {
+ qs += "clob ";
+ } else {
+ // cross your fingers...
+ qs += "mediumtext ";
+ }
+ break;
+ case MyMoneyDbTextColumn::LONG:
+ if (dbType == Mysql || dbType == Sqlite3 ) {
+ qs += "longtext ";
+ } else if (dbType == Postgresql) {
+ qs += "text ";
+ } else if (dbType == Db2) {
+ qs += "clob(2G) ";
+ } else if (dbType == Oracle8) {
+ qs += "clob ";
+ } else {
+ // cross your fingers...
+ qs += "longtext ";
+ }
+ break;
+ default:
+ if (dbType == Oracle8) {
+ qs += "clob ";
+ } else {
+ qs += "text ";
+ }
+ break;
+ }
+
+ if (isNotNull()) qs += " NOT NULL";
+
+ return qs;
+}
+
+const QString MyMoneyDbDatetimeColumn::generateDDL (databaseTypeE dbType) const
+{
+ QString qs = name() + " ";
+ if (dbType == Mysql || dbType == ODBC3) {
+ qs += "datetime ";
+ } else if (dbType == Postgresql || dbType == Db2 || dbType == Oracle8 || dbType == Sqlite3 ) {
+ qs += "timestamp ";
+ } else {
+ qs += "";
+ }
+ if (isNotNull()) qs += " NOT NULL";
+ return qs;
+}
diff --git a/kmymoney2/mymoney/storage/mymoneystoragesql.h b/kmymoney2/mymoney/storage/mymoneystoragesql.h
new file mode 100644
index 0000000..1abe70b
--- /dev/null
+++ b/kmymoney2/mymoney/storage/mymoneystoragesql.h
@@ -0,0 +1,807 @@
+/***************************************************************************
+ mymoneystoragesql.h
+ -------------------
+ begin : 11 November 2005
+ copyright : (C) 2005 by Tony Bloomfield
+ email : tonybloom@users.sourceforge.net
+ : Fernando Vilas <fvilas@iname.com>
+ ***************************************************************************/
+
+#ifndef MYMONEYSTORAGESQL_H
+#define MYMONEYSTORAGESQL_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qsqldatabase.h>
+#include <qsqlquery.h>
+#include <qsqlerror.h>
+#include <qvaluestack.h>
+
+class QIODevice;
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kurl.h>
+#include <ksharedptr.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "imymoneystorageformat.h"
+#include "../mymoneyinstitution.h"
+#include "../mymoneypayee.h"
+#include "../mymoneyaccount.h"
+#include "../mymoneytransaction.h"
+#include "../mymoneysplit.h"
+#include "../mymoneyscheduled.h"
+#include "../mymoneysecurity.h"
+#include "../mymoneyprice.h"
+#include "../mymoneyreport.h"
+#include "../mymoneybudget.h"
+#include "../mymoneyfile.h"
+#include "../mymoneykeyvaluecontainer.h"
+#include "mymoneymap.h"
+#include "../mymoneymoney.h"
+#include "../mymoneytransactionfilter.h"
+
+// This is a convenience functor to make it easier to use STL algorithms
+// It will return false if the MyMoneyTransaction DOES match the filter.
+// This functor may disappear when all filtering can be handled in SQL.
+class FilterFail {
+ public:
+ FilterFail (const MyMoneyTransactionFilter& filter,
+ IMyMoneyStorage* storage)
+ : m_filter (filter),
+ m_storage (storage)
+ {}
+
+ inline bool operator() (const QPair<QString, MyMoneyTransaction>& transactionPair)
+ { return (*this) (transactionPair.second); }
+
+ inline bool operator() (const MyMoneyTransaction& transaction)
+ {
+ return (! m_filter.match(transaction)) && (m_filter.matchingSplits().count() == 0);
+ }
+
+ private:
+ MyMoneyTransactionFilter m_filter;
+ IMyMoneyStorage *m_storage;
+};
+
+/**
+@author Tony Bloomfield
+ */
+typedef enum databaseTypeE { // database (driver) type
+ Db2 = 0, //
+ Interbase, //
+ Mysql, //
+ Oracle8, //
+ ODBC3, //
+ Postgresql, //
+ Sqlite, //
+ Sybase, //
+ Sqlite3 //
+} _databaseType;
+
+class MyMoneyStorageSql;
+
+/**
+ * The MyMoneySqlQuery class is derived from QSqlQuery to provide
+ * a way to adjust some queries based on databaseTypeE and make
+ * debugging easier by providing a place to put debug statements.
+ */
+class MyMoneySqlQuery : public QSqlQuery {
+ public:
+ MyMoneySqlQuery (MyMoneyStorageSql* db = 0);
+ virtual ~MyMoneySqlQuery() {}
+ bool exec ();
+ bool prepare ( const QString & query );
+ private:
+ const MyMoneyStorageSql* m_db;
+};
+
+/**
+ * The MyMoneyDbDrivers class is a map from string to enum of db types.
+ */
+class MyMoneyDbDrivers {
+ public:
+ MyMoneyDbDrivers ();
+ /**
+ * @return a list ofsupported Qt database driver types, their qt names and useful names
+ **/
+ const QMap<QString, QString> driverMap() const {return (m_driverMap);};
+ databaseTypeE driverToType (const QString& driver) const;
+ bool isTested (databaseTypeE dbType) const;
+ private:
+ QMap<QString, QString> m_driverMap;
+};
+
+/**
+ * The MyMoneyDbColumn class is a base type for generic db columns.
+ * Derived types exist for several common column types.
+ */
+class MyMoneyDbColumn : public KShared {
+ public:
+ MyMoneyDbColumn (const QString& iname,
+ const QString& itype = QString::null,
+ const bool iprimary = false,
+ const bool inotnull = false,
+ const QString &initVersion = "0.1"):
+ m_name(iname),
+ m_type(itype),
+ m_isPrimary(iprimary),
+ m_isNotNull(inotnull),
+ m_initVersion(initVersion) {}
+ MyMoneyDbColumn (void) {}
+ virtual ~MyMoneyDbColumn () {}
+
+ /**
+ * This method is used to copy column objects. Because there are several derived types,
+ * clone() is more appropriate than a copy ctor in most cases.
+ */
+ virtual MyMoneyDbColumn* clone () const;
+
+ /**
+ * This method generates the DDL (Database Design Language) string for the column.
+ *
+ * @param dbType Database driver type
+ *
+ * @return QString of the DDL for the column, tailored for what the driver supports.
+ */
+ virtual const QString generateDDL (databaseTypeE dbType) const;
+
+ const QString& name(void) const {return (m_name);}
+ const QString& type(void) const {return (m_type);}
+ bool isPrimaryKey(void) const {return (m_isPrimary);}
+ bool isNotNull(void) const {return (m_isNotNull);}
+ private:
+ QString m_name;
+ QString m_type;
+ bool m_isPrimary;
+ bool m_isNotNull;
+ QString m_initVersion;
+};
+
+/**
+ * The MyMoneyDbDatetimeColumn class is a representation of datetime columns.
+ */
+class MyMoneyDbDatetimeColumn : public MyMoneyDbColumn {
+ public:
+ MyMoneyDbDatetimeColumn (const QString& iname,
+ const bool iprimary = false,
+ const bool inotnull = false,
+ const QString &initVersion = "0.1"):
+ MyMoneyDbColumn (iname, "", iprimary, inotnull, initVersion)
+ {}
+ virtual ~MyMoneyDbDatetimeColumn() {}
+ virtual const QString generateDDL (databaseTypeE dbType) const;
+ virtual MyMoneyDbDatetimeColumn* clone () const;
+ private:
+ static const QString calcType(void);
+};
+
+/**
+ * The MyMoneyDbColumn class is a representation of integer db columns.
+ */
+class MyMoneyDbIntColumn : public MyMoneyDbColumn {
+ public:
+ enum size {TINY, SMALL, MEDIUM, BIG};
+ MyMoneyDbIntColumn (const QString& iname,
+ const size type = MEDIUM,
+ const bool isigned = true,
+ const bool iprimary = false,
+ const bool inotnull = false,
+ const QString &initVersion = "0.1"):
+ MyMoneyDbColumn (iname, "", iprimary, inotnull, initVersion),
+ m_type (type),
+ m_isSigned (isigned) {}
+ virtual ~MyMoneyDbIntColumn() {}
+ virtual const QString generateDDL (databaseTypeE dbType) const;
+ virtual MyMoneyDbIntColumn* clone () const;
+ private:
+ size m_type;
+ bool m_isSigned;
+};
+
+/**
+ * The MyMoneyDbTextColumn class is a representation of text db columns,
+ * for drivers that support it. If the driver does not support it, it is
+ * usually some sort of really large varchar or varchar2.
+ */
+class MyMoneyDbTextColumn : public MyMoneyDbColumn {
+ public:
+ enum size {TINY, NORMAL, MEDIUM, LONG};
+ MyMoneyDbTextColumn (const QString& iname,
+ const size type = MEDIUM,
+ const bool iprimary = false,
+ const bool inotnull = false,
+ const QString &initVersion = "0.1"):
+ MyMoneyDbColumn (iname, "", iprimary, inotnull, initVersion),
+ m_type (type) {}
+ virtual ~MyMoneyDbTextColumn() {}
+ virtual const QString generateDDL (databaseTypeE dbType) const;
+ virtual MyMoneyDbTextColumn* clone () const;
+ private:
+ size m_type;
+};
+
+/**
+ * The MyMoneyDbIndex class is a representation of a db index.
+ * To provide generic support for most databases, the table name,
+ * name of the index, and list of columns for the index are required.
+ * Additionally, the user can specify whether the index is unique or not.
+ *
+ * At this time, different types of index are not supported, since the portability
+ * is fairly limited.
+ */
+class MyMoneyDbIndex {
+ public:
+ MyMoneyDbIndex (const QString& table,
+ const QString& name,
+ const QStringList& columns,
+ bool unique = false):
+ m_table(table),
+ m_unique(unique),
+ m_name(name),
+ m_columns(columns)
+ {}
+ MyMoneyDbIndex () {}
+ inline const QString table () const {return m_table;}
+ inline bool isUnique () const {return m_unique;}
+ inline const QString name () const {return m_name;}
+ inline const QStringList columns () const {return m_columns;}
+ const QString generateDDL (databaseTypeE dbType) const;
+ private:
+ QString m_table;
+ bool m_unique;
+ QString m_name;
+ QStringList m_columns;
+};
+
+/**
+ * The MyMoneyDbTable class is a representation of a db table.
+ * It has a list of the columns (pointers to MyMoneyDbColumn types) and a
+ * list of any indices that may be on the table.
+ * Additionally, a string for a parameterized query for each of some common
+ * tasks on a table is created by the ctor.
+ *
+ * Const iterators over the list of columns are provided as a convenience.
+ */
+class MyMoneyDbTable {
+ public:
+ MyMoneyDbTable (const QString& iname,
+ const QValueList<KSharedPtr <MyMoneyDbColumn> >& ifields,
+ const QString& initVersion = "1.0"):
+ m_name(iname),
+ m_fields(ifields),
+ m_initVersion(initVersion) {}
+ MyMoneyDbTable (void) {}
+
+ inline const QString& name(void) const {return (m_name);}
+ inline const QString& insertString(void) const {return (m_insertString);};
+ inline const QString selectAllString(bool terminate = true) const
+ {return (terminate ? QString(m_selectAllString + ";") : m_selectAllString);};
+ inline const QString& updateString(void) const {return (m_updateString);};
+ inline const QString& deleteString(void) const {return (m_deleteString);};
+
+ /**
+ * This method determines the string required to drop the primary key for the table
+ * based on the db specific syntax.
+ *
+ * @param dbType The driver type of the database.
+ *
+ * @return QString for the syntax to drop the primary key.
+ */
+ const QString dropPrimaryKeyString(databaseTypeE dbType) const;
+ /**
+ * This method returns a comma-separated list of all column names in the table
+ *
+ * @return QString column list.
+ */
+ const QString columnList() const;
+ /**
+ * This method returns the string for changing a column's definition. It covers statements
+ * like ALTER TABLE..CHANGE COLUMN, MODIFY COLUMN, etc.
+ *
+ * @param dbType The driver type of the database.
+ * @param columnName The name of the column to be modified.
+ * @param newDef The MyMoneyColumn object of the new column definition.
+ *
+ * @return QString containing DDL to change the column.
+ */
+ const QString modifyColumnString(databaseTypeE dbType, const QString& columnName, const MyMoneyDbColumn& newDef) const;
+
+ /**
+ * This method builds all of the SQL strings for common operations.
+ */
+ void buildSQLStrings(void);
+
+ /**
+ * This method generates the DDL required to create the table.
+ *
+ * @param dbType The driver type of the database.
+ *
+ * @return QString of the DDL.
+ */
+ const QString generateCreateSQL (databaseTypeE dbType) const;
+
+ /**
+ * This method creates a MyMoneyDbIndex object and adds it to the list of indices for the table.
+ *
+ * @param name The name of the index.
+ * @param columns The list of the columns affected.
+ * @param unique Whether or not this should be a unique index.
+ */
+ void addIndex(const QString& name, const QStringList& columns, bool unique = false);
+
+ typedef QValueList<KSharedPtr <MyMoneyDbColumn> >::const_iterator field_iterator;
+ inline field_iterator begin(void) const {return m_fields.constBegin();}
+ inline field_iterator end(void) const {return m_fields.constEnd(); }
+ private:
+ QString m_name;
+ QValueList<KSharedPtr <MyMoneyDbColumn> > m_fields;
+
+ typedef QValueList<MyMoneyDbIndex>::const_iterator index_iterator;
+ QValueList<MyMoneyDbIndex> m_indices;
+ QString m_initVersion;
+ QString m_insertString; // string to insert a record
+ QString m_selectAllString; // to select all fields
+ QString m_updateString; // normal string for record update
+ QString m_deleteString; // string to delete 1 record
+};
+
+/**
+ * The MyMoneyDbView class is a representation of a db view.
+ *
+ * Views will be dropped and recreated on upgrade, so there is no need
+ * to do anything more complex than storing the name of the view and
+ * the CREATE VIEW string.
+ */
+class MyMoneyDbView {
+ public:
+ MyMoneyDbView (const QString& name,
+ const QString& createString,
+ const QString& initVersion = "0.1")
+ : m_name (name), m_createString (createString), m_initVersion (initVersion)
+ {}
+
+ MyMoneyDbView (void) {}
+
+ inline const QString& name(void) const {return (m_name);}
+ inline const QString createString(void) const {return (m_createString);};
+
+ private:
+ QString m_name;
+ QString m_createString;
+ QString m_initVersion;
+};
+
+/**
+ * The MyMoneyDbDef class is
+ */
+class MyMoneyDbDef {
+ friend class MyMoneyStorageSql;
+ friend class MyMoneyDatabaseMgr;
+public:
+ MyMoneyDbDef();
+ ~MyMoneyDbDef() {}
+
+ const QString generateSQL (const QString& driver) const;
+
+ typedef QMap<QString, MyMoneyDbTable>::const_iterator table_iterator;
+ inline table_iterator tableBegin(void) const {return m_tables.constBegin();}
+ inline table_iterator tableEnd(void) const {return m_tables.constEnd();}
+
+ typedef QMap<QString, MyMoneyDbView>::const_iterator view_iterator;
+ inline view_iterator viewBegin(void) const {return m_views.constBegin();}
+ inline view_iterator viewEnd(void) const {return m_views.constEnd();}
+
+ inline unsigned int currentVersion() const {return (m_currentVersion);};
+
+private:
+ const QString enclose(const QString& text) const
+ {return (QString("'" + text + "'"));};
+ static unsigned int m_currentVersion; // The current version of the database layout
+ MyMoneyDbDrivers m_drivers;
+#define TABLE(name) void name();
+#define VIEW(name) void name();
+ TABLE(FileInfo);
+ TABLE(Institutions);
+ TABLE(Payees);
+ TABLE(Accounts);
+ TABLE(Transactions);
+ TABLE(Splits);
+ TABLE(KeyValuePairs);
+ TABLE(Schedules);
+ TABLE(SchedulePaymentHistory);
+ TABLE(Securities);
+ TABLE(Prices);
+ TABLE(Currencies);
+ TABLE(Reports);
+ TABLE(Budgets);
+ VIEW(Balances);
+protected:
+ QMap<QString, MyMoneyDbTable> m_tables;
+ QMap<QString, MyMoneyDbView> m_views;
+};
+
+class IMyMoneySerialize;
+
+/**
+ * The MyMoneyDbColumn class is a base type for generic db columns.
+ * Derived types exist for several common column types.
+ */
+class MyMoneyStorageSql : public IMyMoneyStorageFormat, public QSqlDatabase, public KShared {
+public:
+
+ MyMoneyStorageSql (IMyMoneySerialize *storage, const KURL& = KURL());
+ virtual ~MyMoneyStorageSql() {close(true);}
+
+ unsigned int currentVersion() const {return (m_db.currentVersion());};
+
+ /**
+ * MyMoneyStorageSql - open database file
+ *
+ * @param url pseudo-URL of database to be opened
+ * @param openMode open mode, same as for QFile::open
+ * @param clear whether existing data can be deleted
+
+ * @return 0 - database successfully opened
+ * @return 1 - database not opened, use lastError function for reason
+ * @return -1 - output database not opened, contains data, clean not specified
+ *
+ */
+ int open(const KURL& url, int openMode, bool clear = false);
+ /**
+ * MyMoneyStorageSql close the database
+ *
+ * @return void
+ *
+ */
+ void close(bool logoff = true);
+ /**
+ * MyMoneyStorageSql read all the database into storage
+ *
+ * @return void
+ *
+ */
+ bool readFile(void);
+ /**
+ * MyMoneyStorageSql write/update the database from storage
+ *
+ * @return void
+ *
+ */
+ bool writeFile(void);
+
+ // check database type
+ bool isDb2() const { return (m_dbType == Db2);};
+ bool isInterbase() const { return (m_dbType == Interbase);};
+ bool isMysql() const { return (m_dbType == Mysql);};
+ bool isOracle8() const { return (m_dbType == Oracle8);};
+ bool isODBC3() const { return (m_dbType == ODBC3);};
+ bool isPostgresql() const { return (m_dbType == Postgresql);};
+ bool isSybase() const { return (m_dbType == Sybase);};
+ bool isSqlite3() const { return (m_dbType == Sqlite3);};
+
+ /**
+ * MyMoneyStorageSql generalized error routine
+ *
+ * @return : error message to be displayed
+ *
+ */
+ const QString& lastError() const {return (m_error);};
+ /**
+ * This method is used when a database file is open, and the data is to
+ * be saved in a different file or format. It will ensure that all data
+ * from the database is available in memory to enable it to be written.
+ */
+ virtual void fillStorage();
+ /**
+ * The following functions correspond to the identically named (usually) functions
+ * within the Storage Manager, and are called to update the database
+ */
+ void modifyUserInfo(const MyMoneyPayee& payee);
+ void addInstitution(const MyMoneyInstitution& inst);
+ void modifyInstitution(const MyMoneyInstitution& inst);
+ void removeInstitution(const MyMoneyInstitution& inst);
+ void addPayee(const MyMoneyPayee& payee);
+ void modifyPayee(const MyMoneyPayee& payee);
+ void removePayee(const MyMoneyPayee& payee);
+ void addAccount(const MyMoneyAccount& acc);
+ void modifyAccount(const MyMoneyAccount& acc);
+ void removeAccount(const MyMoneyAccount& acc);
+ void addTransaction(const MyMoneyTransaction& tx);
+ void modifyTransaction(const MyMoneyTransaction& tx);
+ void removeTransaction(const MyMoneyTransaction& tx);
+ void addSchedule(const MyMoneySchedule& sch);
+ void modifySchedule(const MyMoneySchedule& sch);
+ void removeSchedule(const MyMoneySchedule& sch);
+ void addSecurity(const MyMoneySecurity& sec);
+ void modifySecurity(const MyMoneySecurity& sec);
+ void removeSecurity(const MyMoneySecurity& sec);
+ void addPrice(const MyMoneyPrice& p);
+ void removePrice(const MyMoneyPrice& p);
+ void addCurrency(const MyMoneySecurity& sec);
+ void modifyCurrency(const MyMoneySecurity& sec);
+ void removeCurrency(const MyMoneySecurity& sec);
+ void addReport(const MyMoneyReport& rep);
+ void modifyReport(const MyMoneyReport& rep);
+ void removeReport(const MyMoneyReport& rep);
+ void addBudget(const MyMoneyBudget& bud);
+ void modifyBudget(const MyMoneyBudget& bud);
+ void removeBudget(const MyMoneyBudget& bud);
+
+ unsigned long transactionCount (const QString& aid = QString()) const;
+ inline const QMap<QString, unsigned long> transactionCountMap () const
+ {return (m_transactionCountMap);};
+ /**
+ * the storage manager also needs the following read entry points
+ */
+ const QMap<QString, MyMoneyAccount> fetchAccounts (const QStringList& idList = QStringList (), bool forUpdate = false) const;
+ const QMap<QString, MyMoneyMoney> fetchBalance(const QStringList& id, const QDate& date) const;
+ const QMap<QString, MyMoneyBudget> fetchBudgets (const QStringList& idList = QStringList (), bool forUpdate = false) const;
+ const QMap<QString, MyMoneySecurity> fetchCurrencies (const QStringList& idList = QStringList (), bool forUpdate = false) const;
+ const QMap<QString, MyMoneyInstitution> fetchInstitutions (const QStringList& idList = QStringList (), bool forUpdate = false) const;
+ const QMap<QString, MyMoneyPayee> fetchPayees (const QStringList& idList = QStringList (), bool forUpdate = false) const;
+ const MyMoneyPriceList fetchPrices (const QStringList& fromIdList = QStringList (), const QStringList& toIdList = QStringList(), bool forUpdate = false) const;
+ const MyMoneyPrice fetchSinglePrice (const QString& fromIdList, const QString& toIdList, const QDate& date, bool exactDate, bool forUpdate = false) const;
+ const QMap<QString, MyMoneyReport> fetchReports (const QStringList& idList = QStringList (), bool forUpdate = false) const;
+ const QMap<QString, MyMoneySchedule> fetchSchedules (const QStringList& idList = QStringList (), bool forUpdate = false) const;
+ const QMap<QString, MyMoneySecurity> fetchSecurities (const QStringList& idList = QStringList (), bool forUpdate = false) const;
+ const QMap<QString, MyMoneyTransaction> fetchTransactions (const QString& tidList = QString (), const QString& dateClause = QString(), bool forUpdate = false) const;
+ const QMap<QString, MyMoneyTransaction> fetchTransactions (const MyMoneyTransactionFilter& filter) const;
+ bool isReferencedByTransaction(const QString& id) const;
+
+ void readPayees(const QString&);
+ void readPayees(const QValueList<QString> payeeList = QValueList<QString>());
+ void readTransactions(const MyMoneyTransactionFilter& filter);
+ void setProgressCallback(void(*callback)(int, int, const QString&));
+
+ virtual void readFile(QIODevice* s, IMyMoneySerialize* storage) { Q_UNUSED(s); Q_UNUSED(storage) };
+ virtual void writeFile(QIODevice* s, IMyMoneySerialize* storage){ Q_UNUSED(s); Q_UNUSED(storage) };
+
+ void startCommitUnit (const QString& callingFunction);
+ bool endCommitUnit (const QString& callingFunction);
+ void cancelCommitUnit (const QString& callingFunction);
+
+ long unsigned getRecCount(const QString& table) const;
+ long unsigned getNextBudgetId() const;
+ long unsigned getNextAccountId() const;
+ long unsigned getNextInstitutionId() const;
+ long unsigned getNextPayeeId() const;
+ long unsigned getNextReportId() const;
+ long unsigned getNextScheduleId() const;
+ long unsigned getNextSecurityId() const;
+ long unsigned getNextTransactionId() const;
+
+ long unsigned incrementBudgetId();
+ long unsigned incrementAccountId();
+ long unsigned incrementInstitutionId();
+ long unsigned incrementPayeeId();
+ long unsigned incrementReportId();
+ long unsigned incrementScheduleId();
+ long unsigned incrementSecurityId();
+ long unsigned incrementTransactionId();
+
+ void loadAccountId(const unsigned long& id);
+ void loadTransactionId(const unsigned long& id);
+ void loadPayeeId(const unsigned long& id);
+ void loadInstitutionId(const unsigned long& id);
+ void loadScheduleId(const unsigned long& id);
+ void loadSecurityId(const unsigned long& id);
+ void loadReportId(const unsigned long& id);
+ void loadBudgetId(const unsigned long& id);
+
+private:
+ // a function to build a comprehensive error message
+ QString& buildError (const QSqlQuery& q, const QString& function, const QString& message) const;
+ // write routines
+ void writeUserInformation(void);
+ void writeInstitutions(void);
+ void writePayees(void);
+ void writeAccounts(void);
+ void writeTransactions(void);
+ void writeSchedules(void);
+ void writeSecurities(void);
+ void writePrices(void);
+ void writeCurrencies(void);
+ void writeFileInfo(void);
+ void writeReports(void);
+ void writeBudgets(void);
+
+ void writeInstitution(const MyMoneyInstitution& i, MyMoneySqlQuery& q);
+ void writePayee(const MyMoneyPayee& p, MyMoneySqlQuery& q, bool isUserInfo = false);
+ void writeAccount (const MyMoneyAccount& a, MyMoneySqlQuery& q);
+ void writeTransaction(const QString& txId, const MyMoneyTransaction& tx, MyMoneySqlQuery& q, const QString& type);
+ void writeSplits(const QString& txId, const QString& type, const QValueList<MyMoneySplit>& splitList);
+ void writeSplit(const QString& txId, const MyMoneySplit& split, const QString& type, const int splitId, MyMoneySqlQuery& q);
+ void writeSchedule(const MyMoneySchedule& sch, MyMoneySqlQuery& q, bool insert);
+ void writeSecurity(const MyMoneySecurity& security, MyMoneySqlQuery& q);
+ void writePricePair ( const MyMoneyPriceEntries& p);
+ void writePrice (const MyMoneyPrice& p);
+ void writeCurrency(const MyMoneySecurity& currency, MyMoneySqlQuery& q);
+ void writeReport (const MyMoneyReport& rep, MyMoneySqlQuery& q);
+ void writeBudget (const MyMoneyBudget& bud, MyMoneySqlQuery& q);
+ void writeKeyValuePairs(const QString& kvpType, const QString& kvpId, const QMap<QString, QString>& pairs);
+ void writeKeyValuePair(const QString& kvpType, const QString& kvpId,
+ const QString& kvpKey, const QString& kvpData);
+ // read routines
+ void readFileInfo(void);
+ void readLogonData(void);
+ void readUserInformation(void);
+ void readInstitutions(void);
+ void readAccounts(void);
+ void readTransaction(const QString id);
+ void readTransactions(const QString& tidList = QString(), const QString& dateClause = QString());
+ void readTransaction(MyMoneyTransaction &tx, const QString& tid);
+ void readSplit (MyMoneySplit& s, const MyMoneySqlQuery& q, const MyMoneyDbTable& t) const;
+ const MyMoneyKeyValueContainer readKeyValuePairs (const QString& kvpType, const QString& kvpId) const;
+ const QMap<QString, MyMoneyKeyValueContainer> readKeyValuePairs (const QString& kvpType, const QStringList& kvpIdList) const;
+ void readSchedules(void);
+ void readSecurities(void);
+ void readPrices(void);
+ void readCurrencies(void);
+ void readReports(void);
+ void readBudgets(void);
+
+ void deleteTransaction(const QString& id);
+ void deleteSchedule(const QString& id);
+ void deleteKeyValuePairs(const QString& kvpType, const QString& kvpId);
+ long unsigned calcHighId (const long unsigned&, const QString&);
+
+ void setVersion (const QString& version);
+
+ void signalProgress(int current, int total, const QString& = "") const;
+ void (*m_progressCallback)(int, int, const QString&);
+
+ //void startCommitUnit (const QString& callingFunction);
+ //void endCommitUnit (const QString& callingFunction);
+ //void cancelCommitUnit (const QString& callingFunction);
+ int splitState(const MyMoneyTransactionFilter::stateOptionE& state) const;
+
+ inline const QDate getDate (const QString& date) const {
+ return (date.isNull() ? QDate() : QDate::fromString(date, Qt::ISODate));
+ }
+
+ inline const QDateTime getDateTime (const QString& date) const {
+ return (date.isNull() ? QDateTime() : QDateTime::fromString(date, Qt::ISODate));
+ }
+
+ // open routines
+ /**
+ * MyMoneyStorageSql create database
+ *
+ * @param url pseudo-URL of database to be opened
+ *
+ * @return true - creation successful
+ * @return false - could not create
+ *
+ */
+ int createDatabase(const KURL& url);
+ int upgradeDb();
+ int upgradeToV1();
+ int upgradeToV2();
+ int upgradeToV3();
+ int upgradeToV4();
+ int upgradeToV5();
+ int upgradeToV6();
+ bool sqliteAlterTable(const MyMoneyDbTable& t);
+ bool addColumn(const MyMoneyDbTable& t,
+ const MyMoneyDbColumn& c,
+ const QString& after = QString());
+ bool addColumn(const QString& table,
+ const QString& column,
+ const QString& after = QString());
+ bool dropColumn(const MyMoneyDbTable& t,
+ const QString& c);
+ bool dropColumn(const QString& table,
+ const QString& column);
+
+// long long unsigned getRecCount(const QString& table);
+ int createTables();
+ void createTable(const MyMoneyDbTable& t);
+ void clean ();
+ int isEmpty();
+ // data
+ MyMoneyDbDrivers m_drivers;
+ databaseTypeE m_dbType;
+
+ MyMoneyDbDef m_db;
+ unsigned int m_dbVersion;
+ IMyMoneySerialize *m_storage;
+ IMyMoneyStorage *m_storagePtr;
+ // input options
+ bool m_loadAll; // preload all data
+ bool m_override; // override open if already in use
+ // error message
+ QString m_error;
+ // record counts
+ long unsigned m_institutions;
+ long unsigned m_accounts;
+ long unsigned m_payees;
+ long unsigned m_transactions;
+ long unsigned m_splits;
+ long unsigned m_securities;
+ long unsigned m_prices;
+ long unsigned m_currencies;
+ long unsigned m_schedules;
+ long unsigned m_reports;
+ long unsigned m_kvps;
+ long unsigned m_budgets;
+ // next id to use (for future archive)
+ long unsigned m_hiIdInstitutions;
+ long unsigned m_hiIdPayees;
+ long unsigned m_hiIdAccounts;
+ long unsigned m_hiIdTransactions;
+ long unsigned m_hiIdSchedules;
+ long unsigned m_hiIdSecurities;
+ long unsigned m_hiIdReports;
+ long unsigned m_hiIdBudgets;
+ // encrypt option - usage TBD
+ QString m_encryptData;
+
+ /**
+ * This variable is used to suppress status messages except during
+ * initial data load and final write
+
+ */
+ bool m_displayStatus;
+ /**
+ * On occasions, e.g. after a complex transaction search, or for populating a
+ * payee popup list, it becomes necessary to load all data into memory. The
+ * following flags will be set after such a load, to indicate that further
+ * retrievals are not needed.
+ */
+// bool m_transactionListRead;
+// bool m_payeeListRead;
+ /**
+ * This member variable holds a list of those accounts for which all
+ * transactions are in memory, thus saving reading them again
+ */
+// QValueList<QString> m_accountsLoaded;
+ /**
+ * This member variable is used when loading transactions to list all
+ * referenced payees, which can then be read into memory (if not already there)
+ */
+// QValueList<QString> m_payeeList;
+
+ void alert(QString s) const {qDebug("%s", s.ascii());}; // FIXME: remove...
+ /** The following keeps track of commitment units (known as transactions in SQL
+ * though it would be confusing to use that term within KMM). It is implemented
+ * as a stack for debug purposes. Long term, probably a count would suffice
+ */
+ QValueStack<QString> m_commitUnitStack;
+ /**
+ * This member variable is used to preload transactions for preferred accounts
+ */
+ MyMoneyTransactionFilter m_preferred;
+ /**
+ * This member variable is used because reading prices from a file uses the 'add...' function rather than a
+ * 'load...' function which other objects use. Having this variable allows us to avoid needing to check the
+ * database to see if this really is a new or modified price
+ */
+ bool m_readingPrices;
+ /**
+ * This member variable holds a map of transaction counts per account, indexed by
+ * the account id. It is used
+ * to avoid having to scan all transactions whenever a count is needed. It should
+ * probably be moved into the MyMoneyAccount object; maybe we will do that once
+ * the database code has been properly checked out
+ */
+ QMap<QString, unsigned long> m_transactionCountMap;
+ /**
+ * These member variables hold the user name and date/time of logon
+ */
+ QString m_logonUser;
+ QDateTime m_logonAt;
+ QDateTime m_txPostDate; // FIXME: remove when Tom puts date into split object
+
+ //Disable copying
+ MyMoneyStorageSql (const MyMoneyStorageSql& rhs);
+ MyMoneyStorageSql& operator= (const MyMoneyStorageSql& rhs);
+ //
+ bool m_newDatabase;
+};
+#endif // MYMONEYSTORAGESQL_H
diff --git a/kmymoney2/mymoney/storage/mymoneystoragexml.cpp b/kmymoney2/mymoney/storage/mymoneystoragexml.cpp
new file mode 100644
index 0000000..e8027d1
--- /dev/null
+++ b/kmymoney2/mymoney/storage/mymoneystoragexml.cpp
@@ -0,0 +1,908 @@
+/***************************************************************************
+ mymoneystoragexml.cpp - description
+ -------------------
+ begin : Thu Oct 24 2002
+ copyright : (C) 2002 by Kevin Tambascio
+ (C) 2004 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "config.h"
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qfile.h>
+#include <qdom.h>
+#include <qmap.h>
+#include <qxml.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include "kdecompat.h"
+#include <klocale.h>
+#include <kdebug.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoneystoragexml.h"
+#include "../mymoneyreport.h"
+#include "../mymoneybudget.h"
+#include "../mymoneyinstitution.h"
+
+unsigned int MyMoneyStorageXML::fileVersionRead = 0;
+unsigned int MyMoneyStorageXML::fileVersionWrite = 0;
+
+
+class MyMoneyStorageXML::Private
+{
+ friend class MyMoneyStorageXML;
+public:
+ Private() {}
+
+ QMap<QString, MyMoneyInstitution> iList;
+ QMap<QString, MyMoneyAccount> aList;
+ QMap<QString, MyMoneyTransaction> tList;
+ QMap<QString, MyMoneyPayee> pList;
+ QMap<QString, MyMoneySchedule> sList;
+ QMap<QString, MyMoneySecurity> secList;
+ QMap<QString, MyMoneyReport> rList;
+ QMap<QString, MyMoneyBudget> bList;
+ QMap<MyMoneySecurityPair, MyMoneyPriceEntries> prList;
+
+ QString m_fromSecurity;
+ QString m_toSecurity;
+
+};
+
+
+class MyMoneyXmlContentHandler : public QXmlContentHandler
+{
+public:
+ MyMoneyXmlContentHandler(MyMoneyStorageXML* reader);
+ virtual ~MyMoneyXmlContentHandler() {}
+ virtual void setDocumentLocator (QXmlLocator * locator) { m_loc = locator; }
+ virtual bool startDocument (void);
+ virtual bool endDocument (void);
+ virtual bool startPrefixMapping(const QString & prefix, const QString & uri);
+ virtual bool endPrefixMapping(const QString & prefix);
+ virtual bool startElement(const QString & namespaceURI, const QString & localName, const QString & qName, const QXmlAttributes & atts);
+ virtual bool endElement(const QString & namespaceURI, const QString & localName, const QString & qName);
+ virtual bool characters(const QString & ch);
+ virtual bool ignorableWhitespace(const QString & ch);
+ virtual bool processingInstruction(const QString & target, const QString & data);
+ virtual bool skippedEntity(const QString & name);
+ virtual QString errorString(void);
+
+private:
+ MyMoneyStorageXML* m_reader;
+ QXmlLocator* m_loc;
+ int m_level;
+ int m_elementCount;
+ QDomDocument m_doc;
+ QDomElement m_baseNode;
+ QDomElement m_currNode;
+ QString m_errMsg;
+};
+
+MyMoneyXmlContentHandler::MyMoneyXmlContentHandler(MyMoneyStorageXML* reader) :
+ m_reader(reader),
+ m_loc(0),
+ m_level(0),
+ m_elementCount(0)
+{
+}
+
+bool MyMoneyXmlContentHandler::startDocument(void)
+{
+ qDebug("startDocument");
+ return true;
+}
+
+bool MyMoneyXmlContentHandler::endDocument(void)
+{
+ qDebug("endDocument");
+ return true;
+}
+
+bool MyMoneyXmlContentHandler::skippedEntity (const QString & /* name */)
+{
+ // qDebug(QString("Skipped entity '%1'").arg(name));
+ return true;
+}
+
+bool MyMoneyXmlContentHandler::startPrefixMapping (const QString& /*prefix */, const QString & /* uri */)
+{
+ // qDebug(QString("start prefix '%1', '%2'").arg(prefix).arg(uri));
+ return true;
+}
+
+bool MyMoneyXmlContentHandler::endPrefixMapping (const QString& /* prefix */)
+{
+ // qDebug(QString("end prefix '%1'").arg(prefix));
+ return true;
+}
+
+bool MyMoneyXmlContentHandler::startElement (const QString& /* namespaceURI */, const QString& /* localName */, const QString& qName, const QXmlAttributes & atts)
+{
+ if(m_level == 0) {
+ QString s = qName.lower();
+ if(s == "transaction"
+ || s == "account"
+ || s == "price"
+ || s == "payee"
+ || s == "currency"
+ || s == "security"
+ || s == "keyvaluepairs"
+ || s == "institution"
+ || s == "report"
+ || s == "budget"
+ || s == "fileinfo"
+ || s == "user"
+ || s == "scheduled_tx") {
+ m_baseNode = m_doc.createElement(qName);
+ for(int i=0; i < atts.count(); ++i) {
+ m_baseNode.setAttribute(atts.qName(i), atts.value(i));
+ }
+ m_currNode = m_baseNode;
+ m_level = 1;
+
+ } else if(s == "transactions") {
+ qDebug("reading transactions");
+ if(atts.count()) {
+ int count = atts.value(QString("count")).toUInt();
+ m_reader->signalProgress(0, count, i18n("Loading transactions..."));
+ m_elementCount = 0;
+ }
+ } else if(s == "accounts") {
+ qDebug("reading accounts");
+ if(atts.count()) {
+ int count = atts.value(QString("count")).toUInt();
+ m_reader->signalProgress(0, count, i18n("Loading accounts..."));
+ m_elementCount = 0;
+ }
+ } else if(s == "securities") {
+ qDebug("reading securities");
+ if(atts.count()) {
+ int count = atts.value(QString("count")).toUInt();
+ m_reader->signalProgress(0, count, i18n("Loading securities..."));
+ m_elementCount = 0;
+ }
+ } else if(s == "reports") {
+ qDebug("reading reports");
+ if(atts.count()) {
+ int count = atts.value(QString("count")).toUInt();
+ m_reader->signalProgress(0, count, i18n("Loading reports..."));
+ m_elementCount = 0;
+ }
+ } else if(s == "prices") {
+ qDebug("reading prices");
+ m_elementCount = 0;
+ } else if(s == "pricepair") {
+ if(atts.count()) {
+ m_reader->d->m_fromSecurity = atts.value(QString("from"));
+ m_reader->d->m_toSecurity = atts.value(QString("to"));
+ }
+ }
+
+ } else {
+ m_level++;
+ QDomElement node = m_doc.createElement(qName);
+ for(int i=0; i < atts.count(); ++i) {
+ node.setAttribute(atts.qName(i), atts.value(i));
+ }
+ m_currNode.appendChild(node);
+ m_currNode = node;
+ }
+ return true;
+}
+
+bool MyMoneyXmlContentHandler::endElement(const QString& /* namespaceURI */, const QString& /* localName */, const QString& qName)
+{
+ bool rc = true;
+ QString s = qName.lower();
+ if(m_level) {
+ m_currNode = m_currNode.parentNode().toElement();
+ m_level--;
+ if(!m_level) {
+ try {
+ if(s == "transaction") {
+ MyMoneyTransaction t(m_baseNode);
+ if(!t.id().isEmpty())
+ m_reader->d->tList[t.uniqueSortKey()] = t;
+ } else if(s == "account") {
+ MyMoneyAccount a(m_baseNode);
+ if(!a.id().isEmpty())
+ m_reader->d->aList[a.id()] = a;
+ } else if(s == "payee") {
+ MyMoneyPayee p(m_baseNode);
+ if(!p.id().isEmpty())
+ m_reader->d->pList[p.id()] = p;
+ } else if(s == "currency") {
+ MyMoneySecurity s(m_baseNode);
+ if(!s.id().isEmpty())
+ m_reader->d->secList[s.id()] = s;
+ } else if(s == "security") {
+ MyMoneySecurity s(m_baseNode);
+ if(!s.id().isEmpty())
+ m_reader->d->secList[s.id()] = s;
+ } else if(s == "keyvaluepairs") {
+ MyMoneyKeyValueContainer kvp(m_baseNode);
+ m_reader->m_storage->setPairs(kvp.pairs());
+ } else if(s == "institution") {
+ MyMoneyInstitution i(m_baseNode);
+ if(!i.id().isEmpty())
+ m_reader->d->iList[i.id()] = i;
+ } else if(s == "report") {
+ MyMoneyReport r(m_baseNode);
+ if(!r.id().isEmpty())
+ m_reader->d->rList[r.id()] = r;
+ } else if(s == "budget") {
+ MyMoneyBudget b(m_baseNode);
+ if(!b.id().isEmpty())
+ m_reader->d->bList[b.id()] = b;
+ } else if(s == "fileinfo") {
+ rc = m_reader->readFileInformation(m_baseNode);
+ } else if(s == "user") {
+ rc = m_reader->readUserInformation(m_baseNode);
+ } else if(s == "scheduled_tx") {
+ MyMoneySchedule s(m_baseNode);
+ if(!s.id().isEmpty())
+ m_reader->d->sList[s.id()] = s;
+ } else if(s == "price") {
+ MyMoneyPrice p(m_reader->d->m_fromSecurity, m_reader->d->m_toSecurity, m_baseNode);
+ m_reader->d->prList[MyMoneySecurityPair(m_reader->d->m_fromSecurity, m_reader->d->m_toSecurity)][p.date()] = p;
+ } else {
+ m_errMsg = i18n("Unknown XML tag %1 found in line %2").arg(qName).arg(m_loc->lineNumber());
+ kdWarning() << m_errMsg << endl;
+ rc = false;
+ }
+ m_reader->signalProgress(++m_elementCount, 0);
+ } catch(MyMoneyException* e) {
+ m_errMsg = i18n("Exception while creating a %1 element: %2").arg(s).arg(e->what());
+ kdWarning() << m_errMsg << endl;
+ delete e;
+ rc = false;
+ }
+ m_doc = QDomDocument();
+ }
+ } else {
+ if(s == "institutions") {
+ // last institution read, now dump them into the engine
+ m_reader->m_storage->loadInstitutions(m_reader->d->iList);
+ m_reader->d->iList.clear();
+ m_reader->signalProgress(-1, -1);
+ } else if(s == "accounts") {
+ // last account read, now dump them into the engine
+ m_reader->m_storage->loadAccounts(m_reader->d->aList);
+ m_reader->d->aList.clear();
+ m_reader->signalProgress(-1, -1);
+ } else if(s == "payees") {
+ // last payee read, now dump them into the engine
+ m_reader->m_storage->loadPayees(m_reader->d->pList);
+ m_reader->d->pList.clear();
+ m_reader->signalProgress(-1, -1);
+ } else if(s == "transactions") {
+ // last transaction read, now dump them into the engine
+ m_reader->m_storage->loadTransactions(m_reader->d->tList);
+ m_reader->d->tList.clear();
+ m_reader->signalProgress(-1, -1);
+ } else if(s == "schedules") {
+ // last schedule read, now dump them into the engine
+ m_reader->m_storage->loadSchedules(m_reader->d->sList);
+ m_reader->d->sList.clear();
+ m_reader->signalProgress(-1, -1);
+ } else if(s == "securities") {
+ // last security read, now dump them into the engine
+ m_reader->m_storage->loadSecurities(m_reader->d->secList);
+ m_reader->d->secList.clear();
+ m_reader->signalProgress(-1, -1);
+ } else if(s == "currencies") {
+ // last currency read, now dump them into the engine
+ m_reader->m_storage->loadCurrencies(m_reader->d->secList);
+ m_reader->d->secList.clear();
+ m_reader->signalProgress(-1, -1);
+ } else if(s == "reports") {
+ // last report read, now dump them into the engine
+ m_reader->m_storage->loadReports(m_reader->d->rList);
+ m_reader->d->rList.clear();
+ m_reader->signalProgress(-1, -1);
+ } else if(s == "budgets") {
+ // last budget read, now dump them into the engine
+ m_reader->m_storage->loadBudgets(m_reader->d->bList);
+ m_reader->d->bList.clear();
+ m_reader->signalProgress(-1, -1);
+ } else if(s == "prices") {
+ // last price read, now dump them into the engine
+ m_reader->m_storage->loadPrices(m_reader->d->prList);
+ m_reader->d->bList.clear();
+ m_reader->signalProgress(-1, -1);
+ }
+ }
+ return rc;
+}
+
+bool MyMoneyXmlContentHandler::characters(const QString& /* ch */)
+{
+ return true;
+}
+
+bool MyMoneyXmlContentHandler::ignorableWhitespace(const QString& /* ch */)
+{
+ return true;
+}
+
+bool MyMoneyXmlContentHandler::processingInstruction(const QString& /* target */, const QString& /* data */)
+{
+ return true;
+}
+
+QString MyMoneyXmlContentHandler::errorString(void)
+{
+ return m_errMsg;
+}
+
+
+
+
+
+
+
+MyMoneyStorageXML::MyMoneyStorageXML() :
+ m_storage(0),
+ m_doc(0),
+ d(new Private())
+{
+}
+
+MyMoneyStorageXML::~MyMoneyStorageXML()
+{
+ delete d;
+}
+
+// Function to read in the file, send to XML parser.
+void MyMoneyStorageXML::readFile(QIODevice* pDevice, IMyMoneySerialize* storage)
+{
+ Q_CHECK_PTR(storage);
+ Q_CHECK_PTR(pDevice);
+ if(!storage)
+ return;
+
+ m_storage = storage;
+
+ m_doc = new QDomDocument;
+ Q_CHECK_PTR(m_doc);
+
+ qDebug("reading file");
+ // creating the QXmlInputSource object based on a QIODevice object
+ // reads all data of the underlying object into memory. I have not
+ // found an object that reads on the fly. I tried to derive one myself,
+ // but there could be a severe problem with decoding when reading
+ // blocks of data and not a stream. So I left it the way it is. (ipwizard)
+ QXmlInputSource xml(pDevice);
+
+ qDebug("start parsing file");
+ MyMoneyXmlContentHandler mmxml(this);
+ QXmlSimpleReader reader;
+ reader.setContentHandler(&mmxml);
+
+ if(!reader.parse(&xml, false)) {
+ delete m_doc;
+ m_doc = NULL;
+ signalProgress(-1, -1);
+ throw new MYMONEYEXCEPTION("File was not parsable!");
+ }
+
+ // check if we need to build up the account balances
+ if(fileVersionRead < 2)
+ m_storage->rebuildAccountBalances();
+
+ delete m_doc;
+ m_doc = NULL;
+
+ // this seems to be nonsense, but it clears the dirty flag
+ // as a side-effect.
+ m_storage->setLastModificationDate(m_storage->lastModificationDate());
+ m_storage = NULL;
+
+ //hides the progress bar.
+ signalProgress(-1, -1);
+}
+
+void MyMoneyStorageXML::writeFile(QIODevice* qf, IMyMoneySerialize* storage)
+{
+ Q_CHECK_PTR(qf);
+ Q_CHECK_PTR(storage);
+ if(!storage)
+ {
+ return;
+ }
+ m_storage = storage;
+
+ // qDebug("XMLWRITER: Starting file write");
+ m_doc = new QDomDocument("KMYMONEY-FILE");
+ Q_CHECK_PTR(m_doc);
+ QDomProcessingInstruction instruct = m_doc->createProcessingInstruction("xml", "version=\"1.0\" encoding=\"utf-8\"");
+ m_doc->appendChild(instruct);
+
+ QDomElement mainElement = m_doc->createElement("KMYMONEY-FILE");
+ m_doc->appendChild(mainElement);
+
+ QDomElement fileInfo = m_doc->createElement("FILEINFO");
+ writeFileInformation(fileInfo);
+ mainElement.appendChild(fileInfo);
+
+ QDomElement userInfo = m_doc->createElement("USER");
+ writeUserInformation(userInfo);
+ mainElement.appendChild(userInfo);
+
+ QDomElement institutions = m_doc->createElement("INSTITUTIONS");
+ writeInstitutions(institutions);
+ mainElement.appendChild(institutions);
+
+ QDomElement payees = m_doc->createElement("PAYEES");
+ writePayees(payees);
+ mainElement.appendChild(payees);
+
+ QDomElement accounts = m_doc->createElement("ACCOUNTS");
+ writeAccounts(accounts);
+ mainElement.appendChild(accounts);
+
+ QDomElement transactions = m_doc->createElement("TRANSACTIONS");
+ writeTransactions(transactions);
+ mainElement.appendChild(transactions);
+
+ QDomElement keyvalpairs = writeKeyValuePairs(m_storage->pairs());
+ mainElement.appendChild(keyvalpairs);
+
+ QDomElement schedules = m_doc->createElement("SCHEDULES");
+ writeSchedules(schedules);
+ mainElement.appendChild(schedules);
+
+ QDomElement equities = m_doc->createElement("SECURITIES");
+ writeSecurities(equities);
+ mainElement.appendChild(equities);
+
+ QDomElement currencies = m_doc->createElement("CURRENCIES");
+ writeCurrencies(currencies);
+ mainElement.appendChild(currencies);
+
+ QDomElement prices = m_doc->createElement("PRICES");
+ writePrices(prices);
+ mainElement.appendChild(prices);
+
+ QDomElement reports = m_doc->createElement("REPORTS");
+ writeReports(reports);
+ mainElement.appendChild(reports);
+
+ QDomElement budgets = m_doc->createElement("BUDGETS");
+ writeBudgets(budgets);
+ mainElement.appendChild(budgets);
+
+ QTextStream stream(qf);
+ stream.setEncoding(QTextStream::UnicodeUTF8);
+ stream << m_doc->toString();
+
+ delete m_doc;
+ m_doc = NULL;
+
+ //hides the progress bar.
+ signalProgress(-1, -1);
+
+ // this seems to be nonsense, but it clears the dirty flag
+ // as a side-effect.
+ m_storage->setLastModificationDate(m_storage->lastModificationDate());
+
+ m_storage = NULL;
+}
+
+bool MyMoneyStorageXML::readFileInformation(const QDomElement& fileInfo)
+{
+ signalProgress(0, 3, i18n("Loading file information..."));
+ bool rc = true;
+ QDomElement temp = findChildElement("CREATION_DATE", fileInfo);
+ if (temp == QDomElement()) {
+ rc = false;
+ }
+ QString strDate = QStringEmpty(temp.attribute("date"));
+ m_storage->setCreationDate(stringToDate(strDate));
+ signalProgress(1, 0);
+
+ temp = findChildElement("LAST_MODIFIED_DATE", fileInfo);
+ if (temp == QDomElement()) {
+ rc = false;
+ }
+ strDate = QStringEmpty(temp.attribute("date"));
+ m_storage->setLastModificationDate(stringToDate(strDate));
+ signalProgress(2, 0);
+
+ temp = findChildElement("VERSION", fileInfo);
+ if (temp == QDomElement()) {
+ rc = false;
+ }
+ QString strVersion = QStringEmpty(temp.attribute("id"));
+ fileVersionRead = strVersion.toUInt(NULL, 16);
+
+ temp = findChildElement("FIXVERSION", fileInfo);
+ if (temp != QDomElement()) {
+ QString strFixVersion = QStringEmpty(temp.attribute("id"));
+ m_storage->setFileFixVersion (strFixVersion.toUInt());
+ }
+ // FIXME The old version stuff used this rather odd number
+ // We now use increments
+ if(fileVersionRead == VERSION_0_60_XML)
+ fileVersionRead = 1;
+ signalProgress(3, 0);
+
+ return rc;
+}
+
+void MyMoneyStorageXML::writeFileInformation(QDomElement& fileInfo)
+{
+ QDomElement creationDate = m_doc->createElement("CREATION_DATE");
+ creationDate.setAttribute("date", dateToString(m_storage->creationDate()));
+ fileInfo.appendChild(creationDate);
+
+ QDomElement lastModifiedDate = m_doc->createElement("LAST_MODIFIED_DATE");
+ lastModifiedDate.setAttribute("date", dateToString(m_storage->lastModificationDate()));
+ fileInfo.appendChild(lastModifiedDate);
+
+ QDomElement version = m_doc->createElement("VERSION");
+
+ version.setAttribute("id", "1");
+ fileInfo.appendChild(version);
+
+ QDomElement fixVersion = m_doc->createElement("FIXVERSION");
+ fixVersion.setAttribute("id", m_storage->fileFixVersion());
+ fileInfo.appendChild(fixVersion);
+}
+
+void MyMoneyStorageXML::writeUserInformation(QDomElement& userInfo)
+{
+ MyMoneyPayee user = m_storage->user();
+ userInfo.setAttribute("name", user.name());
+ userInfo.setAttribute("email", user.email());
+
+ QDomElement address = m_doc->createElement("ADDRESS");
+ address.setAttribute("street", user.address());
+ address.setAttribute("city", user.city());
+ address.setAttribute("county", user.state());
+ address.setAttribute("zipcode", user.postcode());
+ address.setAttribute("telephone", user.telephone());
+
+ userInfo.appendChild(address);
+}
+
+bool MyMoneyStorageXML::readUserInformation(const QDomElement& userElement)
+{
+ bool rc = true;
+ signalProgress(0, 1, i18n("Loading user information..."));
+
+ MyMoneyPayee user;
+ user.setName(QStringEmpty(userElement.attribute("name")));
+ user.setEmail(QStringEmpty(userElement.attribute("email")));
+
+ QDomElement addressNode = findChildElement("ADDRESS", userElement);
+ if(!addressNode.isNull()) {
+ user.setAddress(QStringEmpty(addressNode.attribute("street")));
+ user.setCity(QStringEmpty(addressNode.attribute("city")));
+ user.setState(QStringEmpty(addressNode.attribute("county")));
+ user.setPostcode(QStringEmpty(addressNode.attribute("zipcode")));
+ user.setTelephone(QStringEmpty(addressNode.attribute("telephone")));
+ }
+
+ m_storage->setUser(user);
+ signalProgress(1, 0);
+
+ return rc;
+}
+
+void MyMoneyStorageXML::writeInstitutions(QDomElement& institutions)
+{
+ const QValueList<MyMoneyInstitution> list = m_storage->institutionList();
+ QValueList<MyMoneyInstitution>::ConstIterator it;
+ institutions.setAttribute("count", list.count());
+
+ for(it = list.begin(); it != list.end(); ++it)
+ writeInstitution(institutions, *it);
+}
+
+void MyMoneyStorageXML::writeInstitution(QDomElement& institution, const MyMoneyInstitution& i)
+{
+ i.writeXML(*m_doc, institution);
+}
+
+void MyMoneyStorageXML::writePayees(QDomElement& payees)
+{
+ const QValueList<MyMoneyPayee> list = m_storage->payeeList();
+ QValueList<MyMoneyPayee>::ConstIterator it;
+ payees.setAttribute("count", list.count());
+
+ for(it = list.begin(); it != list.end(); ++it)
+ writePayee(payees, *it);
+}
+
+void MyMoneyStorageXML::writePayee(QDomElement& payee, const MyMoneyPayee& p)
+{
+ p.writeXML(*m_doc, payee);
+}
+
+void MyMoneyStorageXML::writeAccounts(QDomElement& accounts)
+{
+ QValueList<MyMoneyAccount> list;
+ m_storage->accountList(list);
+ QValueList<MyMoneyAccount>::ConstIterator it;
+ accounts.setAttribute("count", list.count()+5);
+
+ writeAccount(accounts, m_storage->asset());
+ writeAccount(accounts, m_storage->liability());
+ writeAccount(accounts, m_storage->expense());
+ writeAccount(accounts, m_storage->income());
+ writeAccount(accounts, m_storage->equity());
+
+ signalProgress(0, list.count(), i18n("Saving accounts..."));
+ int i = 0;
+ for(it = list.begin(); it != list.end(); ++it, ++i) {
+ writeAccount(accounts, *it);
+ signalProgress(i, 0);
+ }
+}
+
+void MyMoneyStorageXML::writeAccount(QDomElement& account, const MyMoneyAccount& p)
+{
+ p.writeXML(*m_doc, account);
+}
+
+void MyMoneyStorageXML::writeTransactions(QDomElement& transactions)
+{
+ MyMoneyTransactionFilter filter;
+ filter.setReportAllSplits(false);
+ QValueList<MyMoneyTransaction> list;
+ m_storage->transactionList(list, filter);
+ transactions.setAttribute("count", list.count());
+
+ QValueList<MyMoneyTransaction>::ConstIterator it;
+
+ signalProgress(0, list.count(), i18n("Saving transactions..."));
+
+ int i = 0;
+ for(it = list.begin(); it != list.end(); ++it, ++i)
+ {
+ writeTransaction(transactions, *it);
+ signalProgress(i, 0);
+ }
+}
+
+void MyMoneyStorageXML::writeTransaction(QDomElement& transaction, const MyMoneyTransaction& tx)
+{
+ tx.writeXML(*m_doc, transaction);
+}
+
+void MyMoneyStorageXML::writeSchedules(QDomElement& scheduled)
+{
+ const QValueList<MyMoneySchedule> list = m_storage->scheduleList();
+ QValueList<MyMoneySchedule>::ConstIterator it;
+ scheduled.setAttribute("count", list.count());
+
+ for(it = list.begin(); it != list.end(); ++it)
+ {
+ this->writeSchedule(scheduled, *it);
+ }
+}
+
+void MyMoneyStorageXML::writeSchedule(QDomElement& scheduledTx, const MyMoneySchedule& tx)
+{
+ tx.writeXML(*m_doc, scheduledTx);
+}
+
+void MyMoneyStorageXML::writeSecurities(QDomElement& equities)
+{
+ const QValueList<MyMoneySecurity> securityList = m_storage->securityList();
+ equities.setAttribute("count", securityList.count());
+ if(securityList.size())
+ {
+ for(QValueList<MyMoneySecurity>::ConstIterator it = securityList.begin(); it != securityList.end(); ++it)
+ {
+ writeSecurity(equities, (*it));
+ }
+ }
+}
+
+void MyMoneyStorageXML::writeSecurity(QDomElement& securityElement, const MyMoneySecurity& security)
+{
+ security.writeXML(*m_doc, securityElement);
+}
+
+void MyMoneyStorageXML::writeCurrencies(QDomElement& currencies)
+{
+ const QValueList<MyMoneySecurity> currencyList = m_storage->currencyList();
+ currencies.setAttribute("count", currencyList.count());
+ if(currencyList.size())
+ {
+ for(QValueList<MyMoneySecurity>::ConstIterator it = currencyList.begin(); it != currencyList.end(); ++it)
+ {
+ writeSecurity(currencies, (*it));
+ }
+ }
+}
+
+void MyMoneyStorageXML::writeReports(QDomElement& parent)
+{
+ const QValueList<MyMoneyReport> list = m_storage->reportList();
+ QValueList<MyMoneyReport>::ConstIterator it;
+ parent.setAttribute("count", list.count());
+
+ signalProgress(0, list.count(), i18n("Saving reports..."));
+ unsigned i = 0;
+ for(it = list.begin(); it != list.end(); ++it)
+ {
+ (*it).writeXML(*m_doc, parent);
+ signalProgress(++i, 0);
+ }
+}
+
+void MyMoneyStorageXML::writeBudgets(QDomElement& parent)
+{
+ const QValueList<MyMoneyBudget> list = m_storage->budgetList();
+ QValueList<MyMoneyBudget>::ConstIterator it;
+ parent.setAttribute("count", list.count());
+
+ signalProgress(0, list.count(), i18n("Saving budgets..."));
+ unsigned i = 0;
+ for(it = list.begin(); it != list.end(); ++it)
+ {
+ writeBudget(parent, (*it));
+ signalProgress(++i, 0);
+ }
+}
+
+void MyMoneyStorageXML::writeBudget(QDomElement& budget, const MyMoneyBudget& b)
+{
+ b.writeXML(*m_doc, budget);
+}
+
+
+QDomElement MyMoneyStorageXML::findChildElement(const QString& name, const QDomElement& root)
+{
+ QDomNode child = root.firstChild();
+ while(!child.isNull())
+ {
+ if(child.isElement())
+ {
+ QDomElement childElement = child.toElement();
+ if(name == childElement.tagName())
+ {
+ return childElement;
+ }
+ }
+
+ child = child.nextSibling();
+ }
+ return QDomElement();
+}
+
+QDomElement MyMoneyStorageXML::writeKeyValuePairs(const QMap<QString, QString> pairs)
+{
+ if(m_doc)
+ {
+ QDomElement keyValPairs = m_doc->createElement("KEYVALUEPAIRS");
+
+ QMap<QString, QString>::const_iterator it;
+ for(it = pairs.begin(); it != pairs.end(); ++it)
+ {
+ QDomElement pair = m_doc->createElement("PAIR");
+ pair.setAttribute("key", it.key());
+ pair.setAttribute("value", it.data());
+ keyValPairs.appendChild(pair);
+ }
+ return keyValPairs;
+ }
+ return QDomElement();
+}
+
+void MyMoneyStorageXML::writePrices(QDomElement& prices)
+{
+ const MyMoneyPriceList list = m_storage->priceList();
+ MyMoneyPriceList::ConstIterator it;
+ prices.setAttribute("count", list.count());
+
+ for(it = list.begin(); it != list.end(); ++it)
+ {
+ QDomElement price = m_doc->createElement("PRICEPAIR");
+ price.setAttribute("from", it.key().first);
+ price.setAttribute("to", it.key().second);
+ writePricePair(price, *it);
+ prices.appendChild(price);
+ }
+}
+
+void MyMoneyStorageXML::writePricePair(QDomElement& price, const MyMoneyPriceEntries& p)
+{
+ MyMoneyPriceEntries::ConstIterator it;
+ for(it = p.begin(); it != p.end(); ++it) {
+ QDomElement entry = m_doc->createElement("PRICE");
+ writePrice(entry, *it);
+ price.appendChild(entry);
+ }
+}
+
+void MyMoneyStorageXML::writePrice(QDomElement& price, const MyMoneyPrice& p)
+{
+ price.setAttribute("date", p.date().toString(Qt::ISODate));
+ price.setAttribute("price", p.rate(QString()).toString());
+ price.setAttribute("source", p.source());
+}
+
+void MyMoneyStorageXML::setProgressCallback(void(*callback)(int, int, const QString&))
+{
+ m_progressCallback = callback;
+}
+
+void MyMoneyStorageXML::signalProgress(int current, int total, const QString& msg)
+{
+ if(m_progressCallback != 0)
+ (*m_progressCallback)(current, total, msg);
+}
+
+/*!
+ This convenience function returns all of the remaining data in the
+ device.
+
+ @note It's copied from the original Qt sources and modified to
+ fix a problem with KFilterDev that does not correctly return
+ atEnd() status in certain circumstances which caused our
+ application to lock at startup.
+*/
+QByteArray QIODevice::readAll()
+{
+ if ( isDirectAccess() ) {
+ // we know the size
+ int n = size()-at(); // ### fix for 64-bit or large files?
+ int totalRead = 0;
+ QByteArray ba( n );
+ char* c = ba.data();
+ while ( n ) {
+ int r = readBlock( c, n );
+ if ( r < 0 )
+ return QByteArray();
+ n -= r;
+ c += r;
+ totalRead += r;
+ // If we have a translated file, then it is possible that
+ // we read less bytes than size() reports
+ if ( atEnd() ) {
+ ba.resize( totalRead );
+ break;
+ }
+ }
+ return ba;
+ } else {
+ // read until we reach the end
+ const int blocksize = 512;
+ int nread = 0;
+ QByteArray ba;
+ int r = 1;
+ while ( !atEnd() && r != 0) {
+ ba.resize( nread + blocksize );
+ r = readBlock( ba.data()+nread, blocksize );
+ if ( r < 0 )
+ return QByteArray();
+ nread += r;
+ }
+ ba.resize( nread );
+ return ba;
+ }
+}
+
diff --git a/kmymoney2/mymoney/storage/mymoneystoragexml.h b/kmymoney2/mymoney/storage/mymoneystoragexml.h
new file mode 100644
index 0000000..8485978
--- /dev/null
+++ b/kmymoney2/mymoney/storage/mymoneystoragexml.h
@@ -0,0 +1,156 @@
+/***************************************************************************
+ mymoneystoragexml.h - description
+ -------------------
+ begin : Thu Oct 24 2002
+ copyright : (C) 2002 by Kevin Tambascio
+ (C) 2004 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYSTORAGEXML_H
+#define MYMONEYSTORAGEXML_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qdom.h>
+#include <qdatastream.h>
+class QIODevice;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "imymoneyserialize.h"
+#include "imymoneystorageformat.h"
+class MyMoneyXmlContentHandler;
+
+/**
+ *@author Kevin Tambascio (ktambascio@users.sourceforge.net)
+ */
+
+#define VERSION_0_60_XML 0x10000010 // Version 0.5 file version info
+#define VERSION_0_61_XML 0x10000011 // use 8 bytes for MyMoneyMoney objects
+
+class MyMoneyStorageXML : public IMyMoneyStorageFormat
+{
+ friend class MyMoneyXmlContentHandler;
+public:
+ MyMoneyStorageXML();
+ virtual ~MyMoneyStorageXML();
+
+ enum fileVersionDirectionType {
+ Reading = 0, /**< version of file to be read */
+ Writing = 1 /**< version to be used when writing a file */
+ };
+
+protected:
+ void setProgressCallback(void(*callback)(int, int, const QString&));
+ void signalProgress(int current, int total, const QString& = "");
+
+ /**
+ * This method returns the version of the underlying file. It
+ * is used by the MyMoney objects contained in a MyMoneyStorageBin object (e.g.
+ * MyMoneyAccount, MyMoneyInstitution, MyMoneyTransaction, etc.) to
+ * determine the layout used when reading/writing a persistant file.
+ * A parameter is used to determine the direction.
+ *
+ * @param dir information about the direction (reading/writing). The
+ * default is reading.
+ *
+ * @return version QString of file's version
+ *
+ * @see m_fileVersionRead, m_fileVersionWrite
+ */
+ static unsigned int fileVersion(fileVersionDirectionType dir = Reading);
+
+ QValueList<QDomElement> readElements(QString groupTag, QString itemTag = QString());
+
+ bool readFileInformation(const QDomElement& fileInfo);
+ virtual void writeFileInformation(QDomElement& fileInfo);
+
+ virtual void writeUserInformation(QDomElement& userInfo);
+
+ virtual void writeInstitution(QDomElement& institutions, const MyMoneyInstitution& i);
+ virtual void writeInstitutions(QDomElement& institutions);
+
+ virtual void writePrices(QDomElement& prices);
+ virtual void writePricePair(QDomElement& price, const MyMoneyPriceEntries& p);
+ virtual void writePrice(QDomElement& prices, const MyMoneyPrice& p);
+
+ virtual void writePayees(QDomElement& payees);
+ virtual void writePayee(QDomElement& payees, const MyMoneyPayee& p);
+
+ virtual void writeAccounts(QDomElement& accounts);
+ virtual void writeAccount(QDomElement& accounts, const MyMoneyAccount& p);
+
+ virtual void writeTransactions(QDomElement& transactions);
+ virtual void writeTransaction(QDomElement& transactions, const MyMoneyTransaction& tx);
+
+ virtual void writeSchedules(QDomElement& scheduled);
+ virtual void writeSchedule(QDomElement& scheduledTx, const MyMoneySchedule& tx);
+
+ virtual void writeReports(QDomElement& e);
+ virtual void writeBudgets(QDomElement& e);
+ virtual void writeBudget(QDomElement& budget, const MyMoneyBudget& b);
+
+ virtual void writeSecurities(QDomElement& securities);
+ virtual void writeSecurity(QDomElement& securityElement, const MyMoneySecurity& security);
+
+ virtual void writeCurrencies(QDomElement& currencies);
+
+ virtual QDomElement writeKeyValuePairs(const QMap<QString, QString> pairs);
+
+ virtual void readFile(QIODevice* s, IMyMoneySerialize* storage);
+ virtual void writeFile(QIODevice* s, IMyMoneySerialize* storage);
+
+ bool readUserInformation(const QDomElement& userElement);
+
+ void readPricePair(const QDomElement& pricePair);
+ const MyMoneyPrice readPrice(const QString& from, const QString& to, const QDomElement& price);
+
+ QDomElement findChildElement(const QString& name, const QDomElement& root);
+
+private:
+ void (*m_progressCallback)(int, int, const QString&);
+
+protected:
+ IMyMoneySerialize *m_storage;
+ QDomDocument *m_doc;
+
+private:
+ /// \internal d-pointer class.
+ class Private;
+ /// \internal d-pointer instance.
+ Private* const d;
+
+ /**
+ * This member is used to store the file version information
+ * obtained while reading a file.
+ */
+ static unsigned int fileVersionRead;
+
+ /**
+ * This member is used to store the file version information
+ * to be used when writing a file.
+ */
+ static unsigned int fileVersionWrite;
+ /**
+ * This member keeps the id of the base currency. We need this
+ * temporarily to convert the price history from the old to the
+ * new format. This should go at some time beyond 0.8 (ipwizard)
+ */
+ QString m_baseCurrencyId;
+
+};
+
+#endif
diff --git a/kmymoney2/pics/CMakeLists.txt b/kmymoney2/pics/CMakeLists.txt
new file mode 100644
index 0000000..6723c09
--- /dev/null
+++ b/kmymoney2/pics/CMakeLists.txt
@@ -0,0 +1,16 @@
+INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${KDE3_INCLUDE_DIR} ${QT_INCLUDE_DIR} )
+
+
+########### install files ###############
+
+INSTALL(FILES startlogo.png titlelabel_background.png
+ DESTINATION share/apps/kmymoney2/pics/
+)
+
+
+
+#original Makefile.am contents follow:
+
+#kmymoneydir = $(kde_datadir)/kmymoney2/pics/
+#kmymoney_DATA = startlogo.png titlelabel_background.png
+#
diff --git a/kmymoney2/pics/Makefile.am b/kmymoney2/pics/Makefile.am
new file mode 100644
index 0000000..8d4cd65
--- /dev/null
+++ b/kmymoney2/pics/Makefile.am
@@ -0,0 +1,3 @@
+kmymoneydir = $(kde_datadir)/kmymoney2/pics/
+kmymoney_DATA = startlogo.png titlelabel_background.png
+
diff --git a/kmymoney2/pics/check-16.png b/kmymoney2/pics/check-16.png
new file mode 100644
index 0000000..10dac2d
--- /dev/null
+++ b/kmymoney2/pics/check-16.png
Binary files differ
diff --git a/kmymoney2/pics/check-20.png b/kmymoney2/pics/check-20.png
new file mode 100644
index 0000000..c2c0428
--- /dev/null
+++ b/kmymoney2/pics/check-20.png
Binary files differ
diff --git a/kmymoney2/pics/frozen.png b/kmymoney2/pics/frozen.png
new file mode 100644
index 0000000..1472125
--- /dev/null
+++ b/kmymoney2/pics/frozen.png
Binary files differ
diff --git a/kmymoney2/pics/kmm-frozen.png b/kmymoney2/pics/kmm-frozen.png
new file mode 100644
index 0000000..b71b9ed
--- /dev/null
+++ b/kmymoney2/pics/kmm-frozen.png
Binary files differ
diff --git a/kmymoney2/pics/lock-16.png b/kmymoney2/pics/lock-16.png
new file mode 100644
index 0000000..e104273
--- /dev/null
+++ b/kmymoney2/pics/lock-16.png
Binary files differ
diff --git a/kmymoney2/pics/paperclip-diag.png b/kmymoney2/pics/paperclip-diag.png
new file mode 100644
index 0000000..3e55a06
--- /dev/null
+++ b/kmymoney2/pics/paperclip-diag.png
Binary files differ
diff --git a/kmymoney2/pics/paperclip-diag16.png b/kmymoney2/pics/paperclip-diag16.png
new file mode 100644
index 0000000..b5d7c5f
--- /dev/null
+++ b/kmymoney2/pics/paperclip-diag16.png
Binary files differ
diff --git a/kmymoney2/pics/paperclip-vert.png b/kmymoney2/pics/paperclip-vert.png
new file mode 100644
index 0000000..1453e25
--- /dev/null
+++ b/kmymoney2/pics/paperclip-vert.png
Binary files differ
diff --git a/kmymoney2/pics/reconciled-frozen.png b/kmymoney2/pics/reconciled-frozen.png
new file mode 100644
index 0000000..edb2e9f
--- /dev/null
+++ b/kmymoney2/pics/reconciled-frozen.png
Binary files differ
diff --git a/kmymoney2/pics/reconciled-frozen2.png b/kmymoney2/pics/reconciled-frozen2.png
new file mode 100644
index 0000000..798ecd9
--- /dev/null
+++ b/kmymoney2/pics/reconciled-frozen2.png
Binary files differ
diff --git a/kmymoney2/pics/reconciled.png b/kmymoney2/pics/reconciled.png
new file mode 100644
index 0000000..efca356
--- /dev/null
+++ b/kmymoney2/pics/reconciled.png
Binary files differ
diff --git a/kmymoney2/pics/split-1.png b/kmymoney2/pics/split-1.png
new file mode 100644
index 0000000..0602343
--- /dev/null
+++ b/kmymoney2/pics/split-1.png
Binary files differ
diff --git a/kmymoney2/pics/split-2.png b/kmymoney2/pics/split-2.png
new file mode 100644
index 0000000..5f5acb0
--- /dev/null
+++ b/kmymoney2/pics/split-2.png
Binary files differ
diff --git a/kmymoney2/pics/startlogo.png b/kmymoney2/pics/startlogo.png
new file mode 100644
index 0000000..d295a1f
--- /dev/null
+++ b/kmymoney2/pics/startlogo.png
Binary files differ
diff --git a/kmymoney2/pics/titlelabel_background.png b/kmymoney2/pics/titlelabel_background.png
new file mode 100644
index 0000000..173de04
--- /dev/null
+++ b/kmymoney2/pics/titlelabel_background.png
Binary files differ
diff --git a/kmymoney2/plugins/Makefile.am b/kmymoney2/plugins/Makefile.am
new file mode 100644
index 0000000..9b67654
--- /dev/null
+++ b/kmymoney2/plugins/Makefile.am
@@ -0,0 +1,24 @@
+KDE_OPTIONS = noautodist
+
+METASOURCES = AUTO
+INCLUDES = $(all_includes) -I$(top_srcdir) -I.
+
+# since some of the subdirs are conditional, we need to define DIST_SUBDIRS
+SUBDIRS = interfaces @OFX_IMPORTERPLUGIN@
+DIST_SUBDIRS = interfaces ofximport
+
+# The library containing the plugin base class
+lib_LTLIBRARIES = libkmm_plugin.la
+libkmm_plugin_la_SOURCES = kmymoneyplugin.cpp pluginloader.cpp viewinterface.cpp statementinterface.cpp importinterface.cpp
+libkmm_plugin_la_LDFLAGS = $(all_libraries) -version-info 0:0:0
+
+#definition of the service type
+kde_servicetypes_DATA = kmymoneyplugin.desktop kmymoneyimporterplugin.desktop
+
+# make sure this lib is build before any subdirectory
+BUILT_SOURCES = libkmm_plugin.la
+
+pluginsincludedir = $(includedir)/kmymoney
+pluginsinclude_HEADERS = kmymoneyplugin.h pluginloader.h viewinterface.h statementinterface.h importinterface.h
+
+EXTRA_DIST = kmymoneyplugin.desktop kmymoneyimporterplugin.desktop
diff --git a/kmymoney2/plugins/importinterface.cpp b/kmymoney2/plugins/importinterface.cpp
new file mode 100644
index 0000000..ce867c8
--- /dev/null
+++ b/kmymoney2/plugins/importinterface.cpp
@@ -0,0 +1,34 @@
+/***************************************************************************
+ importinterface.cpp
+ -------------------
+ begin : Mon Apr 14 2008
+ copyright : (C) 2008 Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "importinterface.h"
+
+KMyMoneyPlugin::ImportInterface::ImportInterface(QObject* parent, const char* name) :
+ QObject(parent, name)
+{
+}
+
+#include "importinterface.moc"
diff --git a/kmymoney2/plugins/importinterface.h b/kmymoney2/plugins/importinterface.h
new file mode 100644
index 0000000..4b8a347
--- /dev/null
+++ b/kmymoney2/plugins/importinterface.h
@@ -0,0 +1,63 @@
+/***************************************************************************
+ importinterface.h
+ -------------------
+ begin : Mon Apr 14 2008
+ copyright : (C) 2008 Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef IMPORTINTERFACE_H
+#define IMPORTINTERFACE_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qobject.h>
+#include <qstring.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kfile.h>
+#include <kurl.h>
+class KPopupMenu;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/export.h>
+
+namespace KMyMoneyPlugin {
+
+/**
+ * This abstract class represents the ImportInterface to
+ * add new importers to KMyMoney.
+ */
+class KMYMONEY_EXPORT ImportInterface : public QObject
+{
+ Q_OBJECT
+
+public:
+ ImportInterface(QObject* parent, const char* name = 0);
+ ~ImportInterface() {}
+
+ virtual KURL selectFile(const QString& title, const QString& path, const QString& mask, KFile::Mode mode) const = 0;
+
+signals:
+};
+
+}; // namespace
+#endif
diff --git a/kmymoney2/plugins/interfaces/Makefile.am b/kmymoney2/plugins/interfaces/Makefile.am
new file mode 100644
index 0000000..2b3c761
--- /dev/null
+++ b/kmymoney2/plugins/interfaces/Makefile.am
@@ -0,0 +1,13 @@
+KDE_OPTIONS = noautodist
+
+METASOURCES = AUTO
+INCLUDES = $(all_includes) -I$(top_srcdir) -I. -I$(top_srcdir)/kmymoney2/widgets
+
+SUBDIRS =
+
+noinst_LIBRARIES = libinterfaces.a
+
+libinterfaces_a_SOURCES = kmmviewinterface.cpp kmmstatementinterface.cpp kmmimportinterface.cpp
+
+noinst_HEADERS = kmmviewinterface.h kmmstatementinterface.h kmmimportinterface.h
+
diff --git a/kmymoney2/plugins/interfaces/kmmimportinterface.cpp b/kmymoney2/plugins/interfaces/kmmimportinterface.cpp
new file mode 100644
index 0000000..b3c54d8
--- /dev/null
+++ b/kmymoney2/plugins/interfaces/kmmimportinterface.cpp
@@ -0,0 +1,41 @@
+/***************************************************************************
+ kmmimportinterface.cpp
+ -------------------
+ begin : Mon Apr 14 2008
+ copyright : (C) 2008 Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../../kmymoney2.h"
+#include "kmmimportinterface.h"
+
+KMyMoneyPlugin::KMMImportInterface::KMMImportInterface(KMyMoney2App* app, QObject* parent, const char* name) :
+ ImportInterface(parent, name),
+ m_app(app)
+{
+}
+
+KURL KMyMoneyPlugin::KMMImportInterface::selectFile(const QString& title, const QString& path, const QString& mask, KFile::Mode mode) const
+{
+ return m_app->selectFile(title, path, mask, mode);
+}
+
+#include "kmmimportinterface.moc"
diff --git a/kmymoney2/plugins/interfaces/kmmimportinterface.h b/kmymoney2/plugins/interfaces/kmmimportinterface.h
new file mode 100644
index 0000000..484a228
--- /dev/null
+++ b/kmymoney2/plugins/interfaces/kmmimportinterface.h
@@ -0,0 +1,60 @@
+/***************************************************************************
+ kmmimportinterface.h
+ -------------------
+ begin : Mon Apr 14 2008
+ copyright : (C) 2008 Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMMIMPORTINTERFACE_H
+#define KMMIMPORTINTERFACE_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kfile.h>
+#include <kurl.h>
+class KMyMoney2App;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../importinterface.h"
+
+namespace KMyMoneyPlugin {
+
+/**
+ * This class represents the implementation of the
+ * ViewInterface.
+ */
+class KMMImportInterface : public ImportInterface {
+ Q_OBJECT
+
+public:
+ KMMImportInterface(KMyMoney2App* app, QObject* parent, const char* name = 0);
+ ~KMMImportInterface() {}
+
+ KURL selectFile(const QString& title, const QString& path, const QString& mask, KFile::Mode mode) const;
+
+private:
+ KMyMoney2App* m_app;
+};
+
+}; // namespace
+#endif
diff --git a/kmymoney2/plugins/interfaces/kmmstatementinterface.cpp b/kmymoney2/plugins/interfaces/kmmstatementinterface.cpp
new file mode 100644
index 0000000..9e09db2
--- /dev/null
+++ b/kmymoney2/plugins/interfaces/kmmstatementinterface.cpp
@@ -0,0 +1,56 @@
+/***************************************************************************
+ kmmstatementinterface.cpp
+ -------------------
+ begin : Wed Jan 5 2005
+ copyright : (C) 2005 Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstring.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmmstatementinterface.h"
+#include "../../kmymoney2.h"
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneykeyvaluecontainer.h>
+
+KMyMoneyPlugin::KMMStatementInterface::KMMStatementInterface(KMyMoney2App* app, QObject* parent, const char* name) :
+ StatementInterface(parent, name),
+ m_app(app)
+{
+}
+
+bool KMyMoneyPlugin::KMMStatementInterface::import(const MyMoneyStatement& s)
+{
+ qDebug("KMyMoneyPlugin::KMMStatementInterface::import start");
+ return m_app->slotStatementImport(s);
+}
+
+const MyMoneyAccount& KMyMoneyPlugin::KMMStatementInterface::account(const QString& key, const QString& value) const
+{
+ return m_app->account(key, value);
+}
+
+void KMyMoneyPlugin::KMMStatementInterface::setAccountOnlineParameters(const MyMoneyAccount& acc, const MyMoneyKeyValueContainer& kvps) const
+{
+ m_app->setAccountOnlineParameters(acc, kvps);
+}
+
+#include "kmmstatementinterface.moc"
diff --git a/kmymoney2/plugins/interfaces/kmmstatementinterface.h b/kmymoney2/plugins/interfaces/kmmstatementinterface.h
new file mode 100644
index 0000000..7890002
--- /dev/null
+++ b/kmymoney2/plugins/interfaces/kmmstatementinterface.h
@@ -0,0 +1,77 @@
+/***************************************************************************
+ kmmstatementinterface.h
+ -------------------
+ begin : Wed Jan 5 2005
+ copyright : (C) 2005 Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMMSTATEMENTINTERFACE_H
+#define KMMSTATEMENTINTERFACE_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+class KMyMoney2App;
+class MyMoneyAccount;
+class MyMoneyKeyValueContainer;
+
+#include "../statementinterface.h"
+
+namespace KMyMoneyPlugin {
+
+/**
+ * This class represents the implementation of the
+ * StatementInterface.
+ */
+class KMMStatementInterface : public StatementInterface
+{
+ Q_OBJECT
+
+public:
+ KMMStatementInterface(KMyMoney2App* app, QObject* parent, const char* name = 0);
+ ~KMMStatementInterface() {}
+
+ /**
+ * This method imports a MyMoneyStatement into the engine
+ */
+ bool import(const MyMoneyStatement& s);
+
+ /**
+ * This method returns the account for a given @a key - @a value pair.
+ * If the account is not found in the list of accounts, MyMoneyAccount()
+ * is returned.
+ */
+ const MyMoneyAccount& account(const QString& key, const QString& value) const;
+
+ /**
+ * This method stores the online parameters in @a kvps used by the plugin
+ * with the account @a acc.
+ */
+ void setAccountOnlineParameters(const MyMoneyAccount&acc, const MyMoneyKeyValueContainer& kvps) const;
+
+private:
+ KMyMoney2App* m_app;
+};
+
+}; // namespace
+#endif
diff --git a/kmymoney2/plugins/interfaces/kmmviewinterface.cpp b/kmymoney2/plugins/interfaces/kmmviewinterface.cpp
new file mode 100644
index 0000000..9779876
--- /dev/null
+++ b/kmymoney2/plugins/interfaces/kmmviewinterface.cpp
@@ -0,0 +1,60 @@
+/***************************************************************************
+ viewinterface.cpp
+ -------------------
+ begin : Wed Jan 5 2005
+ copyright : (C) 2005 Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../../kmymoney2.h"
+#include "../../views/kmymoneyview.h"
+#include "../../widgets/selectedtransaction.h"
+#include "kmmviewinterface.h"
+
+KMyMoneyPlugin::KMMViewInterface::KMMViewInterface(KMyMoney2App* app, KMyMoneyView* view, QObject* parent, const char* name) :
+ ViewInterface(parent, name),
+ m_app(app),
+ m_view(view)
+{
+ connect(app, SIGNAL(accountSelected(const MyMoneyAccount&)), this, SIGNAL(accountSelected(const MyMoneyAccount&)));
+ connect(app, SIGNAL(transactionsSelected(const KMyMoneyRegister::SelectedTransactions&)), this, SIGNAL(transactionsSelected(const KMyMoneyRegister::SelectedTransactions&)));
+ connect(app, SIGNAL(accountReconciled(const MyMoneyAccount&, const QDate&, const MyMoneyMoney&, const MyMoneyMoney&, const QValueList<QPair<MyMoneyTransaction, MyMoneySplit> >&)),
+ this, SIGNAL(accountReconciled(const MyMoneyAccount&, const QDate&, const MyMoneyMoney&, const MyMoneyMoney&, const QValueList<QPair<MyMoneyTransaction, MyMoneySplit> >&)));
+
+ connect(app, SIGNAL(institutionSelected(const MyMoneyInstitution&)), this, SIGNAL(institutionSelected(const MyMoneyInstitution&)));
+
+ connect(m_view, SIGNAL(viewStateChanged(bool)), this, SIGNAL(viewStateChanged(bool)));
+ connect(m_view, SIGNAL(kmmFilePlugin(unsigned int)), this, SIGNAL(kmmFilePlugin(unsigned int)));
+}
+
+KMyMoneyViewBase* KMyMoneyPlugin::KMMViewInterface::addPage(const QString& item, const QString& icon)
+{
+ return m_view->addPage(item, icon);
+}
+
+void KMyMoneyPlugin::KMMViewInterface::addWidget(KMyMoneyViewBase* view, QWidget* w)
+{
+ if(view && w)
+ view->addWidget(w);
+}
+
+
+#include "kmmviewinterface.moc"
diff --git a/kmymoney2/plugins/interfaces/kmmviewinterface.h b/kmymoney2/plugins/interfaces/kmmviewinterface.h
new file mode 100644
index 0000000..d06b4f8
--- /dev/null
+++ b/kmymoney2/plugins/interfaces/kmmviewinterface.h
@@ -0,0 +1,79 @@
+/***************************************************************************
+ kmmviewinterface.h
+ -------------------
+ begin : Wed Jan 5 2005
+ copyright : (C) 2005 Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMMVIEWINTERFACE_H
+#define KMMVIEWINTERFACE_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+class KMyMoney2App;
+class KMyMoneyView;
+class KMyMoneyViewBase;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../viewinterface.h"
+
+namespace KMyMoneyPlugin {
+
+/**
+ * This class represents the implementation of the
+ * ViewInterface.
+ */
+class KMMViewInterface : public ViewInterface {
+ Q_OBJECT
+
+public:
+ KMMViewInterface(KMyMoney2App* app, KMyMoneyView* view, QObject* parent, const char* name = 0);
+ ~KMMViewInterface() {}
+
+ /**
+ * This method returns a pointer to a newly created view
+ * with title @p item and icon @p pixmap.
+ *
+ * @param item Name of view
+ * @param icon name for the icon to be used for the view
+ *
+ * @return pointer to KMyMoneyViewBase object
+ */
+ KMyMoneyViewBase* addPage(const QString& item, const QString& icon);
+
+ /**
+ * This method allows to add a widget to the view
+ * created with addPage()
+ *
+ * @param view pointer to view object
+ * @param w pointer to widget
+ */
+ void addWidget(KMyMoneyViewBase* view, QWidget* w);
+
+private:
+ KMyMoney2App* m_app;
+ KMyMoneyView* m_view;
+};
+
+}; // namespace
+#endif
diff --git a/kmymoney2/plugins/kmymoneyimporterplugin.desktop b/kmymoney2/plugins/kmymoneyimporterplugin.desktop
new file mode 100644
index 0000000..d8277e6
--- /dev/null
+++ b/kmymoney2/plugins/kmymoneyimporterplugin.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=ServiceType
+Name=KMyMoney Importer Plugin
+X-KDE-ServiceType=KMyMoneyImporterPlugin
+Comment=A KMyMoney plugin
+
diff --git a/kmymoney2/plugins/kmymoneyplugin.cpp b/kmymoney2/plugins/kmymoneyplugin.cpp
new file mode 100644
index 0000000..ddca52a
--- /dev/null
+++ b/kmymoney2/plugins/kmymoneyplugin.cpp
@@ -0,0 +1,91 @@
+/***************************************************************************
+ kmymoneyplugin.cpp
+ -------------------
+ begin : Wed Jan 5 2005
+ copyright : (C) 2005 Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kinstance.h>
+#include <kaboutdata.h>
+#include <kaction.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+
+#include "kmymoneyplugin.h"
+
+KMyMoneyPlugin::Plugin::Plugin(QObject* o, const char* name) :
+ QObject(o, name)
+{
+}
+
+KMyMoneyPlugin::Plugin::~Plugin()
+{
+}
+
+KAction* KMyMoneyPlugin::Plugin::action(const QString& actionName) const
+{
+ static KShortcut shortcut("");
+ static KAction dummyAction(QString("Dummy"), QString(), shortcut, static_cast<const QObject*>(this), 0, static_cast<KActionCollection*>(0), "");
+
+ KAction* p = actionCollection()->action(actionName.latin1());
+ if(p)
+ return p;
+
+ qWarning("Action with name '%s' not found!", actionName.latin1());
+ return &dummyAction;
+}
+
+KToggleAction* KMyMoneyPlugin::Plugin::toggleAction(const QString& actionName) const
+{
+ static KShortcut shortcut("");
+ static KToggleAction dummyAction(QString("Dummy"), QString(), shortcut, static_cast<const QObject*>(this), 0, static_cast<KActionCollection*>(0), "");
+
+ KAction* q = actionCollection()->action(actionName.latin1());
+
+ if(q) {
+ KToggleAction* p = dynamic_cast<KToggleAction*>(q);
+ if(!p) {
+ qWarning("Action '%s' is not of type KToggleAction", actionName.latin1());
+ p = &dummyAction;
+ }
+ return p;
+ }
+
+ qWarning("Action with name '%s' not found!", actionName.latin1());
+ return &dummyAction;
+}
+
+KMyMoneyPlugin::ViewInterface* KMyMoneyPlugin::Plugin::viewInterface() const
+{
+ return static_cast<ViewInterface*>( parent()->child( 0, "KMyMoneyPlugin::ViewInterface" ) );
+}
+
+KMyMoneyPlugin::StatementInterface* KMyMoneyPlugin::Plugin::statementInterface() const
+{
+ return static_cast<StatementInterface*>( parent()->child( 0, "KMyMoneyPlugin::StatementInterface" ) );
+}
+
+KMyMoneyPlugin::ImportInterface* KMyMoneyPlugin::Plugin::importInterface() const
+{
+ return static_cast<ImportInterface*>( parent()->child( 0, "KMyMoneyPlugin::ImportInterface" ) );
+}
+
+#include "kmymoneyplugin.moc"
diff --git a/kmymoney2/plugins/kmymoneyplugin.desktop b/kmymoney2/plugins/kmymoneyplugin.desktop
new file mode 100644
index 0000000..000b84a
--- /dev/null
+++ b/kmymoney2/plugins/kmymoneyplugin.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=ServiceType
+Name=KMyMoney Plugin
+X-KDE-ServiceType=KMyMoneyPlugin
+Comment=A KMyMoney plugin
+
diff --git a/kmymoney2/plugins/kmymoneyplugin.h b/kmymoney2/plugins/kmymoneyplugin.h
new file mode 100644
index 0000000..2978fde
--- /dev/null
+++ b/kmymoney2/plugins/kmymoneyplugin.h
@@ -0,0 +1,214 @@
+/***************************************************************************
+ kmymoneyplugin.h
+ -------------------
+ begin : Wed Jan 5 2005
+ copyright : (C) 2005 Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYPLUGIN_H
+#define KMYMONEYPLUGIN_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qobject.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kxmlguiclient.h>
+class KAboutData;
+class KInstance;
+class KAction;
+class KToggleAction;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/viewinterface.h>
+#include <kmymoney/statementinterface.h>
+#include <kmymoney/importinterface.h>
+#include <kmymoney/export.h>
+
+namespace KMyMoneyPlugin {
+
+/**
+ * This class describes the interface between the KMyMoney
+ * application and it's plugins. All plugins must be derived
+ * from this class.
+ *
+ * A good tutorial on how to design and develop a plugin
+ * structure for a KDE application (e.g. KMyMoney) can be found at
+ * http://developer.kde.org/documentation/tutorials/developing-a-plugin-structure/index.html
+ *
+ */
+ class KMYMONEY_EXPORT Plugin : public QObject, public KXMLGUIClient
+ {
+ Q_OBJECT
+ public:
+ Plugin(QObject* parent, const char* name);
+ virtual ~Plugin();
+
+ protected:
+ /** See KMyMoney2App::action() for a description */
+ KAction* action(const QString& name) const;
+
+ /** See KMyMoney2App::toggleAction() for a description */
+ KToggleAction* toggleAction(const QString& name) const;
+
+ // define interface classes here. The interface classes provide a mechanism
+ // for the plugin to interact with KMyMoney
+ // they are defined in the following form for an interface
+ // named Xxx:
+ //
+ // XxxInterface* xxxInterface();
+ ViewInterface* viewInterface() const;
+ StatementInterface* statementInterface() const;
+ ImportInterface* importInterface() const;
+ };
+
+/**
+ * This class describes the interface between the KMyMoney
+ * application and it's ONLINE-BANKING plugins. All online banking plugins
+ * must provide this interface.
+ *
+ * A good tutorial on how to design and develop a plugin
+ * structure for a KDE application (e.g. KMyMoney) can be found at
+ * http://developer.kde.org/documentation/tutorials/developing-a-plugin-structure/index.html
+ *
+ */
+ class KMYMONEY_EXPORT OnlinePlugin
+ {
+ public:
+ OnlinePlugin() {}
+ virtual ~OnlinePlugin() {}
+
+ virtual void protocols(QStringList& protocolList) const = 0;
+
+ /**
+ * This method returns a pointer to a widget representing an additional
+ * tab that will be added to the KNewAccountDlg. The string referenced
+ * with @a tabName will be filled with the text that should be placed
+ * on the tab. It should return 0 if no additional tab is needed.
+ *
+ * Information about the account can be taken out of @a account.
+ *
+ * Once the pointer to the widget is returned to KMyMoney, it takes care
+ * of destruction of all included widgets when the dialog is closed. The plugin
+ * can access the widgets created after the call to storeConfigParameters()
+ * happened.
+ */
+ virtual QWidget* accountConfigTab(const MyMoneyAccount& account, QString& tabName) = 0;
+
+ /**
+ * This method is called by the framework whenever it is time to store
+ * the configuration data maintained by the plugin. The plugin should use
+ * the widgets created in accountConfigTab() to extract the current values.
+ *
+ * @param current The @a current container contains the current settings
+ */
+ virtual MyMoneyKeyValueContainer onlineBankingSettings(const MyMoneyKeyValueContainer& current) = 0;
+
+ /**
+ * This method is called by the framework when the user wants to map
+ * a KMyMoney account onto an online account. The KMyMoney account is identified
+ * by @a acc and the online provider should store its data in @a onlineBankingSettings
+ * upon success.
+ *
+ * @retval true if account is mapped
+ * @retval false if account is not mapped
+ */
+ virtual bool mapAccount(const MyMoneyAccount& acc, MyMoneyKeyValueContainer& onlineBankingSettings) = 0;
+
+ /**
+ * This method is called by the framework when the user wants to update
+ * a KMyMoney account with data from an online account. The KMyMoney account is identified
+ * by @a acc. The online provider should read its data from acc.onlineBankingSettings().
+ * @a true is returned upon success. The plugin might consider to stack the requests
+ * in case @a moreAccounts is @p true. @a moreAccounts defaults to @p false.
+ *
+ * @retval true if account is updated
+ * @retval false if account is not updated
+ */
+ virtual bool updateAccount(const MyMoneyAccount& acc, bool moreAccounts = false) = 0;
+ };
+
+/**
+ * This class describes the interface between the KMyMoney
+ * application and it's IMPORTER plugins. All importer plugins
+ * must provide this interface.
+ *
+ * A good tutorial on how to design and develop a plugin
+ * structure for a KDE application (e.g. KMyMoney) can be found at
+ * http://developer.kde.org/documentation/tutorials/developing-a-plugin-structure/index.html
+ *
+ */
+ class KMYMONEY_EXPORT ImporterPlugin
+ {
+ public:
+ ImporterPlugin() {}
+ virtual ~ImporterPlugin() {}
+
+ /**
+ * This method returns the english-language name of the format
+ * this plugin imports, e.g. "OFX"
+ *
+ * @return QString Name of the format
+ */
+ virtual QString formatName(void) const = 0;
+
+ /**
+ * This method returns the filename filter suitable for passing to
+ * KFileDialog::setFilter(), e.g. "*.ofx *.qfx" which describes how
+ * files of this format are likely to be named in the file system
+ *
+ * @return QString Filename filter string
+ */
+ virtual QString formatFilenameFilter(void) const = 0;
+
+ /**
+ * This method returns whether this plugin is able to import
+ * a particular file.
+ *
+ * @param filename Fully-qualified pathname to a file
+ *
+ * @return bool Whether the indicated file is importable by this plugin
+ */
+ virtual bool isMyFormat( const QString& filename ) const = 0;
+
+ /**
+ * Import a file
+ *
+ * @param filename File to import
+ *
+ * @return bool Whether the import was successful.
+ */
+ virtual bool import( const QString& filename) = 0;
+
+ /**
+ * Returns the error result of the last import
+ *
+ * @return QString English-language name of the error encountered in the
+ * last import, or QString() if it was successful.
+ *
+ */
+ virtual QString lastError(void) const = 0;
+
+ };
+
+}; // end of namespace
+#endif
diff --git a/kmymoney2/plugins/ofximport/Makefile.am b/kmymoney2/plugins/ofximport/Makefile.am
new file mode 100644
index 0000000..d4729f4
--- /dev/null
+++ b/kmymoney2/plugins/ofximport/Makefile.am
@@ -0,0 +1,33 @@
+KDE_OPTIONS = noautodist
+
+INCLUDES = $(all_includes) -I.. -I. -I${srcdir}/dialogs -Idialogs
+METASOURCES = AUTO
+
+# Install this plugin in the KDE modules directory
+kde_module_LTLIBRARIES = kmm_ofximport.la
+
+# Srcs for the plugin
+kmm_ofximport_la_SOURCES = ofximporterplugin.cpp ofxpartner.cpp
+#nodeparser.cpp
+
+# Libs needed by the plugin
+kmm_ofximport_la_LIBADD = @OFX_LIBS@ dialogs/libdialogs.la ../libkmm_plugin.la ../libkmm_plugin.la $(top_builddir)/kmymoney2/mymoney/libkmm_mymoney.la
+
+# LD flags for the plugin
+# -module says: this is a module, i.e. something you're going to dlopen
+# so e.g. it has no version number like a normal shared lib would have.
+kmm_ofximport_la_LDFLAGS = -module $(KDE_PLUGIN) $(all_libraries) $(LIB_KHTML) $(LIB_KDECORE) $(LIB_KDEUI) $(LIB_QT) -L../.libs
+
+# rc file containing the GUI for the plugin
+pluginsdir = $(kde_datadir)/kmm_ofximport
+plugins_DATA = kmm_ofximport.rc
+
+# Install the desktop file needed to detect the plugin
+kde_services_DATA = kmm_ofximport.desktop
+
+noinst_HEADERS = ofximporterplugin.h ofxpartner.h
+# nodeparser.h
+
+EXTRA_DIST = kmm_ofximport.desktop kmm_ofximport.rc
+
+SUBDIRS = dialogs
diff --git a/kmymoney2/plugins/ofximport/dialogs/Makefile.am b/kmymoney2/plugins/ofximport/dialogs/Makefile.am
new file mode 100644
index 0000000..5d79074
--- /dev/null
+++ b/kmymoney2/plugins/ofximport/dialogs/Makefile.am
@@ -0,0 +1,16 @@
+noinst_LTLIBRARIES = libdialogs.la
+KDE_OPTIONS = noautodist
+
+INCLUDES = $(all_includes) -I$(top_srcdir)
+
+libdialogs_la_METASOURCES = AUTO
+
+libdialogs_la_SOURCES = konlinebankingsetupdecl.ui konlinebankingstatusdecl.ui konlinebankingsetupwizard.cpp konlinebankingstatus.cpp kofxdirectconnectdlgdecl.ui kofxdirectconnectdlg.cpp mymoneyofxconnector.cpp
+
+EXTRA_DIST = konlinebankingsetupdecl.ui konlinebankingstatusdecl.ui kofxdirectconnectdlgdecl.ui
+
+DISTCLEANFILES= konlinebankingsetupdecl.h konlinebankingsetupdecl.cpp konlinebankingstatusdecl.h konlinebankingstatusdecl.cpp kofxdirectconnectdlgdecl.h kofxdirectconnectdlgdecl.cpp
+
+noinst_HEADERS = konlinebankingsetupwizard.h konlinebankingstatus.h kofxdirectconnectdlg.h mymoneyofxconnector.h
+
+messages: rc.cpp
diff --git a/kmymoney2/plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp b/kmymoney2/plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp
new file mode 100644
index 0000000..3db8fbc
--- /dev/null
+++ b/kmymoney2/plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp
@@ -0,0 +1,223 @@
+/***************************************************************************
+ kofxdirectconnectdlg.cpp
+ -------------------
+ begin : Sat Nov 13 2004
+ copyright : (C) 2002 by Ace Jones
+ email : acejones@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlabel.h>
+#include <qdir.h>
+#include <qfile.h>
+#include <qtextstream.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kurl.h>
+#include <kio/job.h>
+#include <kio/jobclasses.h>
+#include <kdebug.h>
+#include <ktempfile.h>
+#include <kprogress.h>
+#include <kmessagebox.h>
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyinstitution.h>
+#include <kmymoney/mymoneyfile.h>
+#include "mymoneyofxconnector.h"
+#include "kofxdirectconnectdlg.h"
+
+
+class KOfxDirectConnectDlg::Private
+{
+public:
+ QFile m_fpTrace;
+};
+
+KOfxDirectConnectDlg::KOfxDirectConnectDlg(const MyMoneyAccount& account, QWidget *parent, const char *name) :
+ KOfxDirectConnectDlgDecl(parent, name),
+ d(new Private),
+ m_tmpfile(NULL),
+ m_connector(account),
+ m_job(NULL)
+{
+}
+
+KOfxDirectConnectDlg::~KOfxDirectConnectDlg()
+{
+ if(d->m_fpTrace.isOpen()) {
+ d->m_fpTrace.close();
+ }
+ delete m_tmpfile;
+ delete d;
+}
+
+void KOfxDirectConnectDlg::init(void)
+{
+ show();
+
+ QByteArray request = m_connector.statementRequest();
+
+ // For debugging, dump out the request
+#if 0
+ QFile g( "request.ofx" );
+ g.open( IO_WriteOnly );
+ QTextStream(&g) << m_connector.url() << "\n" << QString(request);
+ g.close();
+#endif
+
+ QDir homeDir(QDir::home());
+ if(homeDir.exists("ofxlog.txt")) {
+ d->m_fpTrace.setName(QString("%1/ofxlog.txt").arg(QDir::homeDirPath()));
+ d->m_fpTrace.open(IO_WriteOnly | IO_Append);
+ }
+
+ m_job = KIO::http_post(
+ m_connector.url(),
+ request,
+ true
+ );
+ if(d->m_fpTrace.isOpen()) {
+ QByteArray data = m_connector.url().utf8();
+ d->m_fpTrace.writeBlock("url: ", 5);
+ d->m_fpTrace.writeBlock(data, strlen(data));
+ d->m_fpTrace.writeBlock("\n", 1);
+ d->m_fpTrace.writeBlock("request:\n", 9);
+ d->m_fpTrace.writeBlock(request, request.size());
+ d->m_fpTrace.writeBlock("\n", 1);
+ d->m_fpTrace.writeBlock("response:\n", 10);
+ }
+
+ m_job->addMetaData("content-type", "Content-type: application/x-ofx" );
+ connect(m_job,SIGNAL(result(KIO::Job*)),this,SLOT(slotOfxFinished(KIO::Job*)));
+ connect(m_job,SIGNAL(data(KIO::Job*, const QByteArray&)),this,SLOT(slotOfxData(KIO::Job*,const QByteArray&)));
+ connect(m_job,SIGNAL(connected(KIO::Job*)),this,SLOT(slotOfxConnected(KIO::Job*)));
+
+ setStatus(QString("Contacting %1...").arg(m_connector.url()));
+ kProgress1->setTotalSteps(3);
+ kProgress1->setProgress(1);
+}
+
+void KOfxDirectConnectDlg::setStatus(const QString& _status)
+{
+ textLabel1->setText(_status);
+ kdDebug(2) << "STATUS: " << _status << endl;
+}
+
+void KOfxDirectConnectDlg::setDetails(const QString& _details)
+{
+ kdDebug(2) << "DETAILS: " << _details << endl;
+}
+
+void KOfxDirectConnectDlg::slotOfxConnected(KIO::Job*)
+{
+ if ( m_tmpfile )
+ {
+// throw new MYMONEYEXCEPTION(QString("Already connected, using %1.").arg(m_tmpfile->name()));
+ kdDebug(2) << "Already connected, using " << m_tmpfile->name() << endl;
+ delete m_tmpfile; //delete otherwise we mem leak
+ }
+ m_tmpfile = new KTempFile();
+ setStatus("Connection established, retrieving data...");
+ setDetails(QString("Downloading data to %1...").arg(m_tmpfile->name()));
+ kProgress1->advance(1);
+}
+
+void KOfxDirectConnectDlg::slotOfxData(KIO::Job*,const QByteArray& _ba)
+{
+ if ( !m_tmpfile )
+// throw new MYMONEYEXCEPTION("Not currently connected!!");
+ kdDebug(2) << "void ofxdcon::slotOfxData():: Not currently connected!" << endl;
+ *(m_tmpfile->textStream()) << QString(_ba);
+
+ if(d->m_fpTrace.isOpen()) {
+ d->m_fpTrace.writeBlock(_ba, _ba.size());
+ }
+
+ setDetails(QString("Got %1 bytes").arg(_ba.size()));
+}
+
+void KOfxDirectConnectDlg::slotOfxFinished(KIO::Job* /* e */)
+{
+ kProgress1->advance(1);
+ setStatus("Completed.");
+
+ if(d->m_fpTrace.isOpen()) {
+ d->m_fpTrace.writeBlock("\nCompleted\n\n\n\n", 14);
+ }
+
+ int error = m_job->error();
+
+ if ( m_tmpfile )
+ {
+ m_tmpfile->close();
+ }
+
+ if ( error )
+ {
+ m_job->showErrorDialog();
+ }
+ else if ( m_job->isErrorPage() )
+ {
+ QString details;
+ QFile f( m_tmpfile->name() );
+ if ( f.open( IO_ReadOnly ) )
+ {
+ QTextStream stream( &f );
+ QString line;
+ while ( !stream.atEnd() ) {
+ details += stream.readLine(); // line of text excluding '\n'
+ }
+ f.close();
+
+ kdDebug(2) << "The HTTP request failed: " << details << endl;
+ }
+ KMessageBox::detailedSorry( this, i18n("The HTTP request failed."), details, i18n("Failed") );
+ }
+ else if ( m_tmpfile )
+ {
+
+ emit statementReady(m_tmpfile->name());
+
+// TODO (Ace) unlink this file, when I'm sure this is all really working.
+// in the meantime, I'll leave the file around to assist people in debugging.
+// m_tmpfile->unlink();
+ }
+ delete m_tmpfile;
+ m_tmpfile = 0;
+ hide();
+}
+
+void KOfxDirectConnectDlg::reject(void)
+{
+ m_job->kill();
+ if ( m_tmpfile )
+ {
+ m_tmpfile->close();
+ delete m_tmpfile;
+ m_tmpfile = NULL;
+ }
+ QDialog::reject();
+}
+
+#include "kofxdirectconnectdlg.moc"
diff --git a/kmymoney2/plugins/ofximport/dialogs/kofxdirectconnectdlg.h b/kmymoney2/plugins/ofximport/dialogs/kofxdirectconnectdlg.h
new file mode 100644
index 0000000..e5d92cd
--- /dev/null
+++ b/kmymoney2/plugins/ofximport/dialogs/kofxdirectconnectdlg.h
@@ -0,0 +1,86 @@
+/***************************************************************************
+ kofxdirectconnectdlg.h
+ -------------------
+ begin : Sat Nov 13 2004
+ copyright : (C) 2002 by Ace Jones
+ email : acejones@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KOFXDIRECTCONNECTDLG_H
+#define KOFXDIRECTCONNECTDLG_H
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+class KTempFile;
+class KOfxDirectConnectDlgPrivate;
+
+namespace KIO
+{
+class Job;
+class TransferJob;
+}
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "mymoneyofxconnector.h"
+#include "kofxdirectconnectdlgdecl.h"
+
+/**
+@author ace jones
+*/
+class KOfxDirectConnectDlg : public KOfxDirectConnectDlgDecl
+{
+Q_OBJECT
+public:
+ KOfxDirectConnectDlg(const MyMoneyAccount&, QWidget *parent = 0, const char *name = 0);
+ ~KOfxDirectConnectDlg();
+
+ void init(void);
+
+signals:
+ /**
+ * This signal is emitted when the statement is downloaded
+ * and stored in file @a fname.
+ */
+ void statementReady(const QString& fname);
+
+protected slots:
+ void slotOfxFinished(KIO::Job*);
+ void slotOfxData(KIO::Job*,const QByteArray&);
+ void slotOfxConnected(KIO::Job*);
+ virtual void reject(void);
+
+protected:
+ void setStatus(const QString& _status);
+ void setDetails(const QString& _details);
+
+ KTempFile* m_tmpfile;
+ MyMoneyOfxConnector m_connector;
+ KIO::TransferJob* m_job;
+
+private:
+ /// \internal d-pointer class.
+ class Private;
+ /// \internal d-pointer instance.
+ Private* const d;
+};
+
+#endif // KOFXDIRECTCONNECTDLG_H
diff --git a/kmymoney2/plugins/ofximport/dialogs/kofxdirectconnectdlgdecl.ui b/kmymoney2/plugins/ofximport/dialogs/kofxdirectconnectdlgdecl.ui
new file mode 100644
index 0000000..3937012
--- /dev/null
+++ b/kmymoney2/plugins/ofximport/dialogs/kofxdirectconnectdlgdecl.ui
@@ -0,0 +1,109 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>KOfxDirectConnectDlgDecl</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KOfxDirectConnectDlgDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>511</width>
+ <height>108</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>OFX Direct Connect</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Contacting bank...</string>
+ </property>
+ </widget>
+ <widget class="KProgress">
+ <property name="name">
+ <cstring>kProgress1</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>51</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>61</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<connections>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>KOfxDirectConnectDlgDecl</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/plugins/ofximport/dialogs/konlinebankingsetupdecl.ui b/kmymoney2/plugins/ofximport/dialogs/konlinebankingsetupdecl.ui
new file mode 100644
index 0000000..3ee9b6a
--- /dev/null
+++ b/kmymoney2/plugins/ofximport/dialogs/konlinebankingsetupdecl.ui
@@ -0,0 +1,488 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KOnlineBankingSetupDecl</class>
+<widget class="QWizard">
+ <property name="name">
+ <cstring>KOnlineBankingSetupDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>653</width>
+ <height>502</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Online Banking Account Setup</string>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>FIPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Select Financial Institution</string>
+ </attribute>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>WinPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image0</pixmap>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>m_listLayout</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Please select your financial institution from the list below...</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignVCenter</set>
+ </property>
+ </widget>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>m_selectionTab</cstring>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Automatic</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KListView">
+ <column>
+ <property name="text">
+ <string>Financial Institution</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>m_listFi</cstring>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Manual</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout8</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KURLRequester" row="2" column="1">
+ <property name="name">
+ <cstring>m_url</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Org</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel1_5</cstring>
+ </property>
+ <property name="text">
+ <string>FID</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>m_bankName</cstring>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>m_fid</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel2_4</cstring>
+ </property>
+ <property name="text">
+ <string>URL</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>90</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>LoginPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Enter Login Details</string>
+ </attribute>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1_3</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>WinPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image0</pixmap>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer row="3" column="2" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>spacer4_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>120</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KActiveLabel" row="0" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>kActiveLabel1</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>Please enter the username and password you use to log into this bank for online banking. Please note that many banks require a separate signup, and assign a separate PIN or password just for online banking from home.</string>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="4" column="1">
+ <property name="name">
+ <cstring>m_headerVersionCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Connection Details</string>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="3" column="1">
+ <property name="name">
+ <cstring>m_applicationCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel1_4</cstring>
+ </property>
+ <property name="text">
+ <string>Username</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>textLabel1_6</cstring>
+ </property>
+ <property name="text">
+ <string>Header Version</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="2" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>m_editPassword</cstring>
+ </property>
+ <property name="echoMode">
+ <enum>Password</enum>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>m_editUsername</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel1_2_3</cstring>
+ </property>
+ <property name="text">
+ <string>Identify as</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel2_3</cstring>
+ </property>
+ <property name="text">
+ <string>Password</string>
+ </property>
+ </widget>
+ <widget class="QTextBrowser" row="6" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>m_textDetails</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>AccountPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Select Account</string>
+ </attribute>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>WinPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image0</pixmap>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout29</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Please select the account from your financial institution from the list below which matches this account.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignVCenter</set>
+ </property>
+ </widget>
+ <widget class="QListView">
+ <column>
+ <property name="text">
+ <string>Number</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Type</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Bank</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Branch</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>m_listAccount</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>WizardPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>WizardPage</string>
+ </attribute>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1_2_2</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>WinPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image0</pixmap>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_labelFinal</cstring>
+ </property>
+ <property name="text">
+ <string>Congratulations! You have successfully set up your bank for online banking via OFX.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignVCenter</set>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+</widget>
+<customwidgets>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="18409">89504e470d0a1a0a0000000d49484452000000b700000164080600000062b3aaaa0000200049444154789ced9d7b7c54d5d5f77f13c630263064429ad8099090385c26354447218fc638c608f5e111e205ac5a354d63c5372a78ad85965b955aad0a563fd2823168a5af201aa23c568b318dc89baad1814a22991226c150833197c1e01081f3feb1b3cf9c3973cedc72cedcb2bf9f0f1f923367ce9c24bfbdceda6bafbd9666efdebd508ba1a1210e0012131335aa7d48002c5fbe9caba9a9c1d1a347237a1f8cf092a0e6c51b1b1b919292a2e647044457d711381c8e48df0623cca82a6e87c38113274e44dc5adaed87d0d8d818e9db60841955c5ddd6b64fcdcb07456f6f6fa46f8111665415f79e3dcd6a5e3e20a8df6fb3d9227d2b8c30a39ab893929238b5ae1d0aa74e1d8ff42d30c28c6ae2eeefef57ebd221110d4f114678514ddcd132818b96fb60841fd5c4dddbdb0babd5aad6e54382fadf8cd1816ae266133846a4514ddc5d5d47d4ba74c8b00137ba504ddc76fb21b52e1d324ea733d2b7c00823aa88db6834468d6f5b5f5fcf7fcd96e04717aa889b8a282727478dcb874c7b7b7ba46f8111465415777676b61a97673002421571777676aa71d911d3d0d010e95b608411ad1a17552b4969686888733a9db2518fe2e2626467677be46dd7d4d4a0bcbc9c097b14a28ab8950ab925252571353535f8e4930f3c96cf2d799ee7b51fd1a1cfe9e2bf2f2ab270d75f7f0bcacbcbd1d2d2a259b76e1d7a7a7ab8fbefbf1766b3996b696989781a2e437d5411f748309bcddc33cf3c83975fdec287130d7a1dcae602f3b380b9c51a4c481607635cb07701db1a81cdefe8b0674f33f6ec69c69a950fe39aeb6fe256ae5c09009a8f3f6e8e9a280e437d5411f7be4f9b827e0f15f5fc1f97f056d892072cb918985b7c12c7fa01db7e60e9cb1c8e7401cd07dcef35e875a89ce7c25d0b34b86bc1492c7d19a87d17e873ba505d5d8deaea6a545454702b57ae645bcd4611aa4c28852e4220b4b5b57153a79c83952b57a2cfe982250f78e949e0f5873568eb070aaac6e2a2bb81db3711d10a854d3fef89ede4bc7f1ce350b304787091e739d5d5d5c8cece465b5b1bb3dea304c52db7d96c0e583c66b399bbedb69bb173e72e00c4023f7e830b8bae021efd2bb0f49db1b8acd085ca792e9c5708cc4c044c99e4bdf62e62c9dbfa892bd2e774a1cfe9c2adf7031fff11587123601f208341c8bdf72cc1fb8d4d5c346c7f63a88be2e20e7432999494c44d9d720e6fe5cbe6021b6e39094083f28d1ce66701b6e74e6242b2f4fb4d996ea1afb8d185bac3c0d23544e47357e870b8c68515577b8bbbcfe9c2b265cbb06eddba107f4246aca0ea3633397a7a7ab8cb8b0bd1e774c1a0d761d3ed40cd12f013c59a25c0a2ab2031719467c154e0708d0b65738980eb0ebbc52fa6a1a121ea760a3194477171fb4b4e6a6b6be3162c58c00bfbdd47891b420946d052d42c214f017fd4d5d58de87318d18fe2e2f6e59624252571e5e5e5004824e4dd475d5ed6d5de055cf19b91ddc38aab8925f7054ba28a7f548d73ebf57afe6bb3d9cc4d9d720e0022ecd71ff68e5753bff9b2c2e0a22d62e8801918d400907e12b024aaf84771cb4d97de0d7a1da8950680db6ebb997745362e018ef57b8a6e6050c34f08e76729732fef36cabb38050505ca7c08236a512d5a72ef03cb4197b93ffae8236ee7ce5dbc8f0d007357e878b1e74c76a1fdc858fefb4557c95b6e6108d03e407c6c397675c8bf969a9a1ac24fc7882554714b4ca65cdc73cf3d68696981d96ce6e6ffb80400f0f80d6e1ffbdd475d58b211683ee01a5e9471f1e7081918d4e0dd460ebb3a807f3479e69088176a84d8bbbcc380428a8b8b43f9d11831842ae2deb4e905de6adf77df7de8739210dda285a918a3cfc7e99e06983289df5d50359617acd06adbbb8047df04fed1345620684fe14ff3516373c946f9d70c7a5dc42bcf32d44771714f9890cc0b67686888abaeae06402218c917fe15aeb6dff1e71eebe73c2c71ce6417ca3742943b22efa28c9d217d7cfbdbde4bf442ee7d6079603f0c23a6517c42b961c373fcd7ab57af0640dc07f3a5772161dc4538ddd3c0bf6edbeff9dee603d2b92300b1b6624e7ee17d9ebd0b78e855ef7385d7b9e79e7b7cfe0c8cf8407171d3acbba4a424aea1a10106bd0e772dd04077ee5a9c3ab6cde3dc8d3eeade5bf2c8a078e949922b22958c257ebfbdcb3d51ad4a97beae70a2cb886f548b733ff3cc330080ca792ea49d771712920d38e5fc9c7f7d605083e603ee509d250f2831133f5a9cb35d3eec3f0b13abc40c0c6ab06423c7475c52b35cc031cf7384135d46fca39ab8df786d2b00e0ae051a9ccafa0900e08c40dcc7fa396cba9df8cddeab896e61d3a80759f8914ea4b277014b3672bc3b73d77417fef784f779c2892e23fe5145dc4949491c8d904c48e6a04fb904003cfc6d61569f2fb635d28c41a91d389eae080054a503530a80e64d9ee7ad5dbb9645484619aa889bee7ef75a694c4c058682db3cbce246fa95b7b0b7bf4d268f54d885c9c0af2e35e2faad473dceaba8a84069692913f62843959457ba4a3976063026cdca1f1fa3cf57ec33b6bf4d76e608b7a4bdf66323167e71144d83eef38a8a2c78eaa9a714fb5c46ec10d67ceec4493f19f13506063528df48844da94a0776ce30e2771f1cf50823161559f0d65bef313f7b94a28a5b3265ca1400240e7d7a6a83fbc3d2170389cb83764d28246bd07345f3f11b5cb8aa9758ec664174c464ca65c21ee5a862b969c61d8d430f1dfe13f9b06403ce3607bfbd8b5aeb5bef87c7c4f15f57a6e2aa5e23aeff9ba7c55eb8703e3efeb899097b94a38ae53e71e284c664cae59a0f1c42dd616041e272b80c3f823ee512244ebd0300f09dcd473adf3003831a3c5bc761f33b633d7ceb9d338c00803f751ec5b30775e813f8d8ebd7afc7ecd9b3352c96cdd0a8d51e7bf7eeddb4180e1fca4b3baf0a89e75c8d847117e1dbef5bc07db840d2451116d8115aea5f5d4a44fd76ea51bcb0151e1347abd58af5ebd7474553574674a09ab8cd6633575656c6d7e833e8c90e9b15574bc7b7eb0e03ff6af22cc760d0eb70d77417ee98e2b6d47f6ff114b5c9948b152b7e8369d3a629226ab3d9ccd96c3616138f03541337656868887bfae927f8da24145aef4f5ce7cfa0d7e1269d0ba959c01d538c783bf5286c3b81ad2ecff3ac562bcacbcb1513b5f07e013071c7019ab56bd7720b162c50fd716e341ab9dada5abcf6dacb3e7b42fee622f27f6f87b7a04da65ccc9f7f35cacbcb55bb5f26eef881df411b0ee1508c4623d7d0d08037ded8ee65d185141559306dda2ce4e7e7a3acac2c2c75fe68b935a59f088cf0a3299b0b4ebc7daba8c882cacabbc3f207a63eae10718d6d35686b6be3a47ebeddbb777300d8727d1c90b0e3f55e7cd95889979e74fbc17bf634a3bcbc1cb7dd760ba776e1c89696164d6262a2c7bf7058e837ded8aef64730224c4242b20149b3fe885beee3b0f7cd8de87859c3576cb2db0ff122efe9e9899bf26346a3911b1818947c4dadae108cf09330f08606df7e70394eecbb1b09495391f23f1fa06609d9fd422db9dd7e080b162cc0f2e5cbb9686ac3172a0e8703a74e1d977ccd66b379b4f763c42e0900c9b3febefd590cee9d07eefd22002416fdde6f814db7bbf72f363434e0fcfc19315fe3bab1b1d167c486111ff8cd2d59741529254c5d953ea70be5e5e5d8bc7973cc0a9cb91ea3039fe2b67791ff2724936e05422b5e5d5d8d871eba9b0ba6d87cb4e0af8638eb7c161f68b7bfedaeff71f20b7799b27f34913267effdd67df2a2ab80827c5a298a44552ebac8828f3f6e8ec90e6146a39113476642e9e7c3884ee4cba0829456706ff3723330a8c1b58fb937e4c6daa6808b2fbe9803888516af44d2d7fafbfb63e6e76148e3d32d592c534e6f423287d71fd678c4c52fbac8a2f4bd4514a57a6932224702e0eef328aeea3477858ef7bbc550810b63e2b13cc964c41f090089805c3b8ff49479e949e28e18f4eee649be045eb3c41d0fafaeae86dc624fb44c3c03ed85c33a2fc43ebc5bb2740db1da0ba6123ffb708d0b9b6e072e2b2402dffeb6fc455e7f58c35bfdc71f5f23794e59599982b71d3afdfdfd019d47cb533062175edc7d4e979780175d458abbdb9e3b0980b6e1f0664232c7d7d5deb3a759d23a363434f0e9a4d1426363a3c7f7d1f27461284302752900f9eaa8139239bfadf3165de5f6d9699d400a15bb584cd1069b44c6170993055bbefa9c2e59ff3a102ae711eb5d5d5ded6105e923beb9f99fa15f5c21fcb512a4b0fc92d82741dc5a435c333b18ce2b747f5d5353e3bee6b04594cbc40b27cc3a8f1ebce2dc6d81cdb77884967e66a2fbebfdfbdda3845a41b6accd0827099b6e27a13fa1ef1d0cdb046e747a8a7bc229ecf3d8d57524d4fb5315619f4c46fca1a585dc570c1ff0d59854ccf6b7491e0ae51fc7dcefcbc9c90140221076fb21056e5579582fcaf8c6cb2d09b4f7faa37f25c52885658a853d6a6ebdf55600d1e7e3fa9a2846dbbd32464650e5d4684f485a135bdc109584125da8a9a9e11392a23dfc2724d0480a23369015b7bd0b681d72a7c1d6b740d0c3c6e5d10d18202e4a9f93085bb8ab5cb88c6d32e52aff130489707bd9f02efb08de0d434db40011e6c6bdbe7b370a21b5ff487f1a5aacf289edf0123600b4b5ede3bfcecc9cace0ad87c6238f3c89828202b4b4b468c4c2a6a59719f18176fbdb6475914e2ca9c50648ed3e807418a31b1a2e4b27bd69060689df4d2bb04a091b40d4ed554c4c4c94ad003b6dda34cddebd7b313434c4b1c4a9d8470380a3452ae76779b7c91362ef228b3cbb3a3cfbaacb093b292989134624d6ae5dab4ab11b5ad8c7e17078ac86fa5a349a30211916cb1c00a40f7c380a0131c28b1620be72edbb402d006c22c216c6bdc5c52a2906bd0e5bfeb20d69696992a210471f94882bd39a83fbf7ef477b7b7bc00b4334ef45f873884bb919f43aaef8f22b70cd358b5839b53820f0a0b688a2220b9e7df6059f75058535ba01e96d5d81303434c4d5d6d662d7ae37218e995bf280c999806982db7d9a99e8bf0da0f484d9fdbadcd388113b68ac562bb7efd32649cb2c8541afc3bd0f2c0fc8bd58be7c3927b4acc1ec4b4c4a4ae26a6a6abc045d369708f9bc42a9e6acd2d41d768b182083a0209f885b780d7b17f0e89b6e978b093cb6f1a8cf4df3ad85beab90e2e2e2a02cef430fddcdd109a541afc3aebfd5fb7d6f5b5b1b575353e355b47e7e1624db62070315f9ae0eb2bb5fd88aa4c44cba1d4f48e6f8368040e84f1b46e451b5f83cdd490e9062f1ebd6ad9315495b5b1bf7e8a3bfe5ad74d95c78097a6ab9efee0cc1e0eeb7e329f2d71f26027ff4afc013dbc9e03adcf915db091f83a8266e71a464d9b26558bc78b19740a4442d27de2b7ee3f68b1f5c44dc8b5d1dc0912eb7df4dad6fa088db6b5bf24819b981410d0aaa4898d3dfc0644427aa743303bcf72a6667677b7c6f341ab9f2f272defda0a2365f7a17be6f7fd6eb7a03831ac10a29b1aa94071709451ddcfcd89409bcfba80b17dd4dbe6f3e40046fca245be76edf445c939e9e1e4e2e2ac4884e54eb202cce29115af1b6b636eefcfc196868688041afc34b4f022fffda8afcf91bf1fd975bbdae458b0089b1e4916ab42b6e0c3ce14b0a5326f81215807b118b2e5c01c0fdf7df1bf2f51991216cedb1a9b8376fdecc959797a3cfe942d95cb2f9f8ba2beec299f31ec1772ddedd85ed5df0a86e05103f78d3edc47d18a9ef4d1166370a375df0f7613f245bb682119da8e69608534b0d7a1d5a5a5a349b376fe6aaabab0190a29a8b16a622f9c2bf2261dc4538de70ae97b0e9a44e789dca792edcb580e4b52809b5d2963cf78079fd1def9f69f1e2c5ca7e3043355413b790591714424ad89a4beaa04db904df7e70b987b0ed5de08b6d8a79623bf0c4766917450c9d6452ce2b74e7c68839f9853b5a029070a0d7fe529b8d893b865055dc4545163cf2c893686c6c045da9140a5b9f72094eecbb1ba77b1af8f70c0c6a3077c558c945255f0b4d5203417cec41000b6e94f62c0af281f7ae02a8b0699c9b11bba8de64d5683472345242abc69e5db0118953efc099c13e4977042022176e5b0b84935f80df4821c492072cad086c45b37ca3b7c5a6d0bef241dd142362a8ee96ac5dbb160011d88a1b0124a62271ea1d008053c7b6490a1b20d18f4097d70192932e16b6250f587271602b9bbe5c21803c8598b0630bd5c5fdc66b24b4576226df9f35e926feb553cecf477c7dcf8d169e167be312ffd114e1660b390c7a1d4d121bf1fd32c287aae21e1a1ae27cf9c967421437cd2b97724184f81336b1f6d2febd90a79fd9a87a576586f284255a22e4fb2fb7e2ccb96b91906c40e2a49fe03bc164520e2a66716a6ad95c9250357686db9fa69b987775485fcb3ba7c4b7b0596660eca2fa84f2b6db6ee1ecf6432401a98608e9ac9cbb9034eb8f3833d887139f5eeb112d1163eff22cfc030497ee4ad9feb6f70e225f18f43a3cfdcc4626ec18c6afb87ffffb47b95ffe7245c87fe0b6b636aebcbc1c0059e2ae59428ed38889b3ff43701f2e909d58868ad0828b7bdbfbc364cac5f6ed3b982b12e3f815f7c5175fccd5d5d5c96e250b04615eb730eb6f4c9a1589937e0200f8ceb624d4cb03f0ccd53ed215f84e7e31cb962dc3ead5ab598a6b1c1090b8e5d2550365686888b35aad1ec7849b10c6ce905f3914527798fc2fdc1a26b7bf3358ac562bd6af5fcfac751ce153dc3427db64cac5962d2f8fe88f2ede4fa92685c9c0c1318189de6ab562f5ead56cb74d1ce2335a4273b2edf643309bcd236aa45a5a5aaa71381c7c7e895218f43a4c3fedc29566604a01d06903fedee27ba9dea0d7e1b68a2558b66c192be710c7f814b7b0769ecd664362a2442e68103cf5d453686bdbc717ea294c065efbb1116fa71e45ea7b806d6260d79952005cf821f083994600c0dba94761db09fcf663f9f7984cb9b8f4d2cb505656c6cf1f5829b5f8c6a7b88575476c361b66cf9e3da20f6b6969d1bcf5d67bdc7df7dd87eaea6a340d0293761c456132f07d36f0dfc3e74d290052df037aaff0febfd346fe6dd400ed7fef95b5d026532ecce619b8fcf22b61b55a992f3d0a09781147a90aa82d2d2d9acaca4a3cf5d4539ccd6643636323eaebeb71f0d326fc960a955ae07699ff795c30997291993919393939c8cece467171315f0b909ec596cd47273ec5ad6683a69696164d6262224a4b4b515a5a0ac05d160d90dea626ac58e56b0228570b9031baf0296e61adbde6e67ff222540b2a7800aa7f1623fe09780f65347422633082c1a7b859f731462c13b0e5a60d9c188c584156dc46a3d1632d5c5c5487c1887664c5cd3a0b30629db015e56130c24dc0969b75db65c41ab2e216d7e766dd7619b106734b18714bc0e266d11246ac11b0cfcdf29e19b1866c6e497bbb570a5e50188d46cee170c0e9747ab5eca3e8f57ade97677d20194a1350caabbf9eed66b399a3a9ab369b6d24cbf65c519105175e78294a4a4a505c5ccc36ea32422620714bf56c379bcd5c6d6d2dde7863bb57b3d291b0674f33f6ec69c6faf5eb01000b17cee77efef33b46b4fb9e313a09bae294d168e4d6af5f8f2dd51b2577c1d0a6a7be76b5fb6b702a64e7ce5dd8b973174ca65c6ec58adfb022398c80f1296e835e87556b1fc3ecd9b33566b3997be6996720dec1eeb76f7ca20163f4f9008004fd8fa0d5ff08e69ccf61fa722b309514e25901cf223a5255a1ecf643282f2f87c994cb6ddaf402dbadcef08b6c6907a3d1c8a5a4a4a0a5a545333434c4dd7efbcf3d3af94a96074e4cc5187d3e1227fd04094953a1cd205d94ce0cf6e1d4b16d18faf2fffa2c9d46a125d4843d22c5b0e2390c7ff82dcab36ddb368efabf80449fc8c4549c35e926249e73352f662078414b216e570d0055e9c05617117d20fde719a317597127252571ab56ade0278b5edd098645ad1baed84a39d5fd2e86be7a53b29764a808db781426033fbf89ec801797721057b592a2a4a4c4e3fbe2e26200404a4a0a1b247186c6e17070e2051b87c30161575fdaee837256ce5d5ea276f67f88847ffd3a642bed0f719f9adf5c444a40bcb015685278071cdd510fb8078330262fde5dcf884e48eb2e1f6cbadded578f49b3e2cc798f409f7209fffa99c13eb8febd52514b2d8758e055e9c0af2e35e2fabf1d555ce0fe58bb762d4a4b4b99c055a4a0dfc18df9e114347f9710d2efd9a7b8c5c24ebae0752f1764f0931b7d961fae3b0cfcab09585cac4c4354290b7ec71423cefb7b2fd2323271cb2db7057caddede5eaf7a2cdf7cd3edb119fad4a9e338b0ff80e4c496766b63911be5989d6de44eecacc1f1e757f3c732fee6c0478ee057af65c52daca54d8bc50b193afc277c675bc287f00af2dde2a5c71e7a550780f45657aad32fe0dd7c75470ea94675fb26a0a2a2429524affafa7ad9955716b9193996b3cf70c79f5f83934d7ff77a8d3319f1c32d9fe39ffbbf08eaf7ab31997239ea5feefbb4097d4e170c7a1d6ccf9dc484640e63d2ac1877e9fb1e6f3ab1ef6ede0db1770117dd4d8e1bf43ae44c76f1658569d3d291f46597636ab93b4c68c90376ce30e2771f1cc556970ef73eb05cf1cf0388a5975bbc329972c1e2efc131277f06f75ded4be87fe37168ecbeeb364e78683df6e704d74d2ee1965b6e434949090a0a0af83fdae337b87841265df0bac71b84c20688b536e88985ee73bad07c007c5ff7f77e0b55844def91d27c8014c3fcd5a546720f2a55ca4a4d4dc5bd0f2c475191c5eb35bbfd10ac562bb66ddbc699cd66d623de07b3b38ddcccdd35dc5717a762e0f165b2c2e64c468cbf733532fee6085ad80090408570f8b01d00112af5b3cfcab9cbc3c71e3afc27c98963e53c4f4b267469d4626eb1e7cf6adb49fe277de6bf50f7b3e72e444545053fa885ac5fbf1e175d64c1d0d01013b808cbd967b86935abb8ee1f67e3c46b7f963d6ffc9dab91b6650f3aef7f4df3f9acb99a50fc6d0048b058e600002f08a145d4ea7fc47fedecff50b2b587bd8bac2452c2216c803c1184fdde9b7e40febf49e7424f7797ea9f9f9d9dcdac7800ccc99fc115f43bb8294f5ecff5dc5624e9530340d2f5bf80e1b1ade8d8b857f3f9acb99a50232442f8dc121ad31e3bc3fd624292bb6558c2bf7e8dd3a2378bfbb41bf43a6cb8e524fc4417c9e78992a7ec03a4970d405a81d0ce6781d27e4407cc0052b380be8f5d7c0e8c41af435a86f76c562ad371c284644c9c98e1714cafd723353555f673e7ce5d88acac1cfcef9b6f7af9e2ebd7afc7ae5d6fe2c9279fe6465b56238d7a7cb5e46200247221666ce195482afb196c29d9aafc6eb400992851842df0e872faa9ee77251767ae7d8cf3f883e64c76e1d93ae90faa1f2ebc1a480f9b071705dfe346ee9a7d4e17fa9c87bc8e0bf36482459cdf9e99391979f9797c517df1e72c58b0000b17cee7b66c7925ee232a96b3cf7027de7c09dd326e07673222f5e77fc0d8e21f071dfd08166d7d7d3d4e9d3aeef32457dbefbc8ed9253a86351ff0df45cc92474448db658b93a3cae67aae86068a94ffab16e28111c840d9b9731752525260d0ebb859171462c28464582c73f895cf585ffe2fe87770276a5f448f4c282fe59a87a02b29c3478ea39a4e00d8afeebc0800b4be76cd9cea7e17da8cb9b24bea429f97323913304d707f7f5e21f95f2eaf7bf33b9ed70bd55fcf994c06c8df5b8865955acce9ededc5d75ffbf6c73ffae853c9e33ddd5d8a744deb73baf878b9789387d56ae56a6a6a6266bbdd9cfc19dcc9c6bfa1f78507d0278a787026239267fd0f92aebe15cddf2510413bc2dba6454b1fb1d4fa0c0cba4578e6c4619c19ec937ca3299384fa02c75bd87357785aed8d410a5bf89428fc1ac00c92676242e875566eb8e19680cf6d6f6ff758e13c78f05ffcd71d1dede8ee7637cc0a848686069c9f3f03abd63ec6cd9e1d7ce82b5cccc99fc10dbefc8ca43f9d74fd2f78410300be8bc00d0ea3a9ababe37a7b7b41bbfc0a97dccfcab90b5afd8f46dc00558cbd0b58b2d1db850926d2225e86df74bb3b53f0e69b1761ecd8f1004854235a0a0ad1c1409f201f7df4a9acf0a3319d7776b6913bbe799d57182fe9fa5f60ec8556d52686a1a2a9ababe300d269aca1a1c15360c369ad4a264549596c8ab03fbc3fca37baf3bc0d7a1dfe75652a167e7154d2e737e875f8efabafc69557cef719f98804b5b5b578e3b5adb2bf0fba132a02b7c64327894251ab1de950028dc994cb016e9f52b8f40e10ebad94b8b7bf0d3cf4aa8e5fc1bc769ef739c2688d1c03831a14548df55a7e9fb4c3b74f6732e562c58adf449dc0dbdbdbf1dc737f94b5e256ab15b5b5b5618fb4d049228d4d53418723d2a104928953e2fced912274430c7a1d36ac7205246239c489535f5e6794b5da620c7a1d9e7e6663d4091c005e78e14fb295040c7a1db6fc655b58aa0014f43bb8de171e80c67e34e6042d44362b70d3ed9e0b3a62e8e28b3fc43bdb1f5ce43e2e8738e2224628ecc264f27f30f9dcd16ac101927d28979c05900cc4c58b172b2e326112936e625ecc0a5a88dfcd0af14a340bdc9f9b525464c15b6fbda7889b42231fa7bf3e8ab1175a635ed04264c5edafca54a86464a4202b2b32fd7584e1397a2f95957747a5c07b7b7bb179f31f25573d01e2a6bcdfd834a2680a8d53c793a08568d6ae5dcb454ba88ce18d2f3f1c006a6a6a58a12219f85020237a89941f1eebb0e2f3314049490956ad7d4c367f66fdfaf5d8bc7933335222f838b792289971170c9999939199f9039fe7fce00799b23ef6942953a2d2ffa6f4f6f67a94dc10b370e17c8c86ccc34019b5d1926090cb09379b6760dcb8248f63d3a79fe7759ed2731aba9a2c859291946886e68b6bb3a6c9ae9232714700a97c70e11347fc74917aa2d4d6d6a2baba5af2faf12a70cbd967b8ef0f7c0257e32e8f1d3de7eced958cf668007006bd0e79f912f9abc34c9c780e0a0a2605740356eb85c1df75186868f824a0f36cb62ff1cd375f49bed6dddd3f22974b09844f115f69b826532e3efeb839a6053e3bdbc80dd9f6e2e4270d3ef75c1a1edb2a69bd351cf719b3dc23c4d93f884f6dad5ec7a506d47bef791e932bf8a304151515a8acac8c2971d3ccc3c17d6ff92df740195b7825dacad73071473badadede8ee766ffbb3d90ea2bf9fec94eaef3f8ee6e683fc6b720b3c426241e005fd0ece9f75f647da963d5e65d798b8e380dadaf75153f39eec624fb42df4d0955161c661a08c2dbc1263264dc5981f1831b6b01400646b093271c711ab576fc49a357f927ccd66b34574e3c3ec6c23e7aaaff59a0cca41457c568e1967e55d08adc91c7c393526eed8a3b5b51d0b173e84d9b32f4065e55c8f49fca597564aba2b9158c5a482f6552e4d0911cbc1c41da308ad2e8c38270000200049444154f4c285f3f152cdafa04f49466b6b3bcce6ebbcce379972b165cbcbaa8b9beeda114f08399311ba8979483cff128c2d2cc5988c4921556e0d0626ee1866dab4ebf9d0645191051f7cb01900f0d39faec32baf6cf73a5f0dd784facf74422814b1366b1a46525f7ba43071c730b5b5efe39a6beee3bf7ff1c535282f5f80d6d6765c5278b364052c25f663d2c59433c7fb71faeba3aab8144ac0c41de3087d6c9329176d6daf0100caca7eed153d59b8703e7ef9cb1551233eb561598131cefdf7dfcc7f6db71f426b6b3b00c06a9de9756ee3fbef85edbea20126ee18a7acec728f5c95575f25f52ee6cdfb2faf73fb9c2e2425258d9a273513771c70d34da5fcd75bb7ee0600cc9c992399ff6db3d9c2765f9126e8deef9120d0a4274a46462a66ce8ccc3ecd4870c30d73f9b0a0dd7e08cefe41e85392252bcfda6c364c9b362d12b719768216b738f70190169f380f424c2079116a6332e5222323c5e35856560ece3dd79d5e9a9d6d4476b61140f40e1a6aa56974a4bee12394955d8e2baeb85052dc8b172f8ec46d861dedb2654fc88a50cd8cb568c06e3f04bbddf358a0834e3830aeb882ac1016144c474aca785c503013fa946445efd51f422b6db31d4459d9e5282898ee759eafaabef18676c386ad91be8798443830e40644519105595939b8fefaff4259d9e5aade8fd04adb6c5f0200a64fcf923cd7683472b152267924c8eec42994313c161f06e9dc44604aa2ef0f2c1c17e09da9c0b15340bbc483a87308f8f790e7b1664105ab8363fc7783f087c9948bc71faf524de40d0d9fe0f2cb6fe73f8bc6bb359af325ce6d18152d05355df9a3679b999cb8831970c26b0807051d0cfecabadd7cf322fce52fcaf7c974f60f6282a188ff9ee33e03209d48a5d44a65b4a3bd2e845d53966460f939cadf4c3878a29bfc1f486d41835e87e9a7dda341f8d42a19479e528b2536cbd301f044b7f7e7d09c0fa505ae4f4986c994cbe79ad0884956568e97b8c52dc1e3156da00524e91ffa0683f41f14009abef5fcbefe5bef734a4456329c6e4aba16d821aa1ce1d3129f76798853f8f573c73caf53984cc47f6e2260d5939f6bc738605b2f70ef979ee7bef2ca769496fe08e5e50b14f9b928b3675fc08bfb535b2bacd60b3d223f94e6e67fa2b4b4d4eb78bce1150aa4be36b552f48fd5e074614a2290a32322aeff36f047b110b128a43e97faee6a0bbfe95bb77515ce312cc9ee9fff0603b9173a509b65c4de34e8f9bd41afc34abd8b37046281af5bf712ae2dbb42d1a84a69e98fbcb201a52226030341fcc16218ed8e1c790b5b388e08a0c109bcdaa7ccc44a8e269981422d22bd1f25a1d6b5e95b69fff9e0181dfa8e85f6f3f6395db877f8e9bf38955c5b38b0edf643f83f776d50d43d9933c7dd14d7663b08abf542a4a48cf73acf5ff7ba78c1235a62d0eb7093ce85e64122a8adaed0c52cec741648efc940294c26d6d4aa276e86926ceb750b5cec3ed57f4b8e853289fc6cb82de1f9a29ae406bd0ebd03ff6f64372d2275c27fa1cfe9c2aa557760f5ea25b29b17f6eedd1bff134a00787ab824c9bf875cbc75217f3069415af248817800c89a0974b492ff01c03245ea1dded769ee24ff770c574438d215d820103efe0b9381073394b3e8563df0ef1e225a29f743cea5f247839358efaa74cf6bf4395dfcc44f29c44beed1b8a23a122c679fe100e0f47f3a71aaa30d0030f4d9870000d73707f8dd3f86c7b642fbf424e272f8b23e06bd0e9715ba780177b4bac598d3e5e2856e99e2295adaee7a72a667ff1b7a0e20ee8be3e25fa7eff7d50aa46910b8aedddbbf0d9574ad3b0a249c1ce7e8dc4f097a9c5af040acb7f069201e2074e2a7147431e7dfffeef57f721411a8687b7c5c43f8283ad5d106ad78a2e3f5a17900e0c23f9a74e87bd7c50bbda814281a1663472bb06737b0e180dbaa67cd24c2a542dd50ed699985d69f5a7b39d1d36bfca349dab253ff76ad5319910344bcfe7e3781b2d5a5c372b8249f30b4268952d0096447473b7f4c1822a40c0d0d71e158c8515ab48172faeba39ed11261f20dc56d39ddc7a9d029657389508b86a34b54ec2f0d8b990e88c999c4fa0bc5dcd10abcf4a2fb730d7a1de9065cea3ecf3285fcbb769e0bcd9de4da52165d28f2cd69d2620a94c5a9eed5567a1da94520611445ce7afb72b5681e8852482db96764a478e5d08c94d9d946ee743719fd279b489aede9af8fe2f4978755156da09cfef23011b7258f0873cf6e97df8e60527f28da0f12efba8f59f22070655cbc6f2d143de016331d1896292e5ef47b76bbadbd41afc3ad3f7311a15790735f7f47f0d9a27bbcce497cf2e7b3429f78168e03d67d455c1fa5284c0e2e741a2c6afad8c2bd9327f679bf3ee607468cf9811189b80450398c4e371ffb3c67e952f285d07a2a41f38161eb2a129fa7e8012afc3d64f063c301f779e469e01ab6e044f4af0b7ac567cd045e9a475c1ea941d93408947c393257a532cd3b72421186507d59ee7053546451e5bacddf256890335b956b87849fd6db5af7235eddd456deddc0b0b595103d756de8c4b4a3d5db6da1d7baacd03df95c3a6cc9a5444e5d957f0f11a1066bc5d3b540fa3880a6290863fde2e5f9c264ff6b01e118005959391e3eb7d412fc68401b48635225e873cabb3c6573496444eccb532c792e7e924a84ef6deda9db52542afd147aee18b1aea1ba293718485469fa6917402377a2e57942e4f3dfcf3d37151f7df4a9c7f7a311edf84be6e1ac8c4c7cdfdd85ef7bbec2d9ff3918f60d0a6ebfd9c55b78711c9d8a7f83c882e74c26adb6b366badc31f69f11f18bfdf1a641b290b22327f8d8389d608a577385c954a1c4c169eeb59258ad17cad60c1c4d688f7f489cd8f197ccc38492324c285980f1875a71b2c38e13fb9ba0fdd73fc22af69cc92eb41fd1a1f9c0f0670e0b54287ab1bf2e14be7082ba74a6b415afecd161b34c68cee7bde9c8e4529887128c9b71ec94f731b942f723212363745a6a31da8c3b57e1fbee233871a019ddcfafc1d02bbf87a6f426a4dd58850925246b4df3d7e7d0fbba748b0aa511fbff6e51bb70a48b08596891dd7177fa1e17efabd3452431349af299393817255d4bde230c078a97e37d895d2a975c0de26d553254b403f5b548cab320fd670f42973b13ae43de1d02d26eacc2b8d92538d961c7407d2d5c0725e2402a417d75297f9d0a5bce5727c82b2a1417255d0b94f4784e24fd596fb95d4d0c75d126e55970e240337a5faf46c69dab786b2d46973b13badc991eaf0b07c2c90e3bbeef3ee2f19e13079a55f5e1fb9cae612b2e7f7d835e074de94d1837bb04c75e7cc26b6056f6e850af730565c13fcf76f169bf80dbef0e2505582dd40a07c612da71b34b907663155c875aa1cbf52ec1e50be1f9bede3bfe502bbefda81edceead210bdda0d7e1d47997e1ac8c4c9c95311963b34cfc803a71a099172d3d2f29bf1063b34c1ef735e5916a7cfdf34b3ceea1cfe9c29d1dc147512a7bd44bff652883b6efcd97f1c365eb8216763050ab8f1bab82f2df855657eafe42b9e7f1cb37a3efe19f7a1c6b1a0436f704b7758e5a6f2038bf3b5c4c9c18a3fb001544fbc365ebc2fa81d47f977211004fcb2be7228d045dee4c4c79ec2fe81409fcb963c16d883876cabd1f13f02d685f1503d4a2ac2c8a5612234444caa9e9726762ca23d5700dbb2b00785743cd2788f0f353afadf07a8254f6e8f0f9b8c05c8d742d71651a86573f85028e06eb4dab6401ca671ec60ada507c6da5e0dd950890766395d71ca0cfe9c2b65ef90dd052289516ab265215c54643dd12edc90e7bc40416295cc38b54dffd703ae0f4748dd63a75589c1ab8f5eeca97de412fb4dee726ba5f63840f2d80902225b1c6407d1d4eec6f025d91952358eb2d55ba410ccd0b1757b562a88b76a0be1667a59d83704f2cc381eb502bfade7c39e8148257fb0217b770534334464d46335aba32196f0cd4d761e895dfe3b81f51d302ed42f1370d125723d0b8b75465292139de35e079b2b2d45f2a3fb0df737957d889219ed1763efc5318f43a8c5fbe396e44fe9ff5cbfdba1fee4dcfd2198474c77a203c9f457c6eba62497d6cbaf19a0e92668901108e7454f1532b33737248d729e87770a73ada30f4d987707d7300ba8979fedf24016d6f1d2801edba91e8a4a69df2d85f42bac168c59fb0dddbd55c78fd1d41590a91b883f18fdb5dca6e458b566c29d91aa46403b3e6f2c7e85e4abafd8c6efe0db6a7bb1264892a166b699c39edc6aab0df8cd20cd4d7490adb739fa68bdfc749f7640a77dd53a4acac1c85e3484d12a9423ec15c474968b908dadd4c2d4817e004f0dbcfa8f0cbd70070ef7ea79b88c3257ece64742fe2c443c4e4c4fe26d9d7da8fe8d0fe2278911709362d4b17120a8e7313fd57908dc40453dce205004a4a4ac2f6f97cf7602a7a19f1fb2bfd102cba897924710a082d4f23daf8be473af15fb8bb9e6e4f13170a1297b508568856bd67e17da982f60c6f78f1a764937f8087db43a1830000ef0201ee721214e11341dbf9f04fa19b3e0bf1103539fb3f0725935f693e382d614177f26ca8766f2ece99ecbfac853fa4fc6e9acb2db50b0790aec2aa24c176828b563cfac7fbda813ffc440000edb4edf1b32b5a2e964d454dad76b36043b152a46b49cd45a1b56e1e241b8b01f95d38525558d5a6a0a020ec9f1909b4c2fce6298ffd25e6adb714c29d3c06bd0e4b97baf8e23f4a32259184ffc4c72289d40664bd5e1f813b093f5a4de94dc80863465e24f02ce4e9f2a86b48ab578909656b588ece5dac5eec73472aaf448d0dc8b182f6c481669cbd7b2bba9d2ee8a6cf42529e2526c382527b3f01e97d96963c60e952cf288912f55bd2b524f1aacfe9e207070d0fca4d2e95acf02a85787512206e494b4b8bc4d9f18516004e9d7719523332412327b1c8c90ee94a8f749fa5413f2c6a41752a61b14d31a16e30d89ce602d2c8d79d43be97dec381d43ca4a5a525eed35d81e10dc200d9cc2bcc6fa63b620c57df1213eecad02bbf973c4e2793744572e91a6259859d1fa47cef7343f495851193c264f7127e241673d45ec08976b4c2dd282eb845adc9c84452c6e4981076e7af2be0125928ea8e1ce922857968a52a4b9e8baf4748e990f068ac21ceb976e4b8fd6d7f0344ed1dea520b3856ab55d5cf8c26b4e32f99e7b5539cfaaf273bec443807f741377d16a63c129ec23c8140b7a8c96d3676977d00005a728d7c474382d445f947930ec2f21085c9a1973d16660856a5bb8f476275325e62dca1a2fdbee72b0cd4d70280c7865d835e87ef7e38dda3604fb4d013c00e7a613e09cd1f918a7137777afba534361d0a3718dcfeba5ce9638adae9aea375ef2445eb3ab88f1772eab515382b83a4438ecd3241339c5475ecc527009015c048a7c60692ce5a3617a09658e8920863dc14255d120af5af4b041d19a4503bdd556aef6438f34a228d960afbecff1c44af8f3269b486482485ed3ad4ea57d8803837db2599e64af34ac479dc55e9236b013825d16db969a42452ab935261402510e67900a2a5f12842dbe77401ce7d92391934ee4d8be2b80eb562a0be4e957a2281d0f7e6cb019f2b5cb8a1a27ee945728c0a7b838467539936b27bccd1b9b3032b05214129d4cc2b71f60f4a860195589d6cfe2e41333bdbc80dd9f6e2e4270d98b2ef2d4e633f8ab1855702706f46185b58ca9f3fe20f0d01af864fc282387497b8701fa241af832b02ab99815a6d71e84fb81ab96195fb8fdddce9bd703352ab0d90f73f98e1fe1a905fc051b3d4f0a736e9452da5f24a3e721c251b174acb81d27208c53eb8ef2d68ec4771fcf9d500c82602ce64846e621ec64c9a8ab372cc382bef42c9dd334ac277101617a1174f2e8565cd2291fb4da33672085bffd1967e7452b954d0208a7667a0f16e8a41af43fda4e00a624ad1f4adbb86f78ee1ad8aebbe922e4ccf719f8decc37cb07efd2bb8f7de3f781defefef0fcb228e94d8e5185b78a52aa2f7688f2d44377d16269494f12142ba939c5acf7085065d875a654bafc9415d12da07937645a33b6fa4baa085d26d410a610d137abdeb0e798702d5688d2de4a73f5d87575ed9ee71cc64cac5962d2f47c4450846ec142afab1175a31e6875382766fbcc44de3dedf771fc1f7dd5d5e6511e8ebd46d01d4dde8e0cf6253a4ba1c93f835785103d2c27e7a527055a6fc71dd2132a9a4853533f77b9f535464c1071f6c56ee4345d01ef0422a2a2a505959191593bf50c40e90ed63ba8979483cff127ee3b09ce8bd1ec2c73f7cc7cbb7155a71c07b712792717071e705ea9258f23c450d102b2e151d5152d880db1df185c5a2de64b2b6f67dc9c9647171b16a9f192c629f7d4efe0cee64e3dffc8a5d633f8a93f6a31e3b6e843e7d5bf91a5ee83e3dccd46b89b37a56c6649cd8df84a1577ecfffd252afade0453d505f87632f3ec1f7d451127f565bd87981f6b814b6e5a62b91cd9dc0860d9eef2d4c0eae6c7128347d2b7d5ccd30e06baf49bb3b0505053871e2846a9f3b12feb9ff8b90c44ed1d88f7a45fc7c8a5bb80a48232919c32ec9407d9d870f4e8bdb841bb13bb267b77bb25836575ed855e9ea0b1b900f03aa99eafabf6fbee975cca0d7e1c4891351e192044228624f9ef53f1edffb8d0d505127e61742d37d0403f5b5e87e7e0dffdaf84be6f1998303f575e8fc7585626e8a5c8e36fd6cd268d5e5d1044a389904a41baf864bd840f8c380adaded922ec9ac0b0a55f9bc701188d893aebed5a3abb05f71f7395d80c80fa73eb894054fbdb64231ff9bd65491bb2fa1ff2c8c6fd3145671b80f507ef2e80fa95457835ea75ac7b1575f7d57f278bc2dbb8bc53e3bdbc8911a2a6e828eeaeaa6cfc25969e778587000bc050748fec7480b6bba0eb5fa4d8ea28206dc6db43b0add39254261172693c51525c27dc170708c67c62100e4e58756862c10de7b4f3a13309a26936a2016361082b85d07f7793557325c7d0b4e76d8f978b46efa2cb2a2b8ae12e39793709770c249d355858b42273becfc64b4e7afcf81dbbd55f61e84bbd9a988697444aa977d557a687ddf47cab153d23b61d48c94c8f5781f0dc5e6c568972e8540108133fe9279d0646402dd5d38beaed2e38f98feb30789986ffe2500e0f8ba4ab89c2ea4ffec413e5dd5a0d74177631506eaebd0fdfc1a64dcb90aae43ad5ebd6ac418f43ab41f019a37b83c26937b767b4f1a0d7a1d56ea5d61754384c8254ca995532297bf3d9a362808d16ed8405244a9253cd21598d0e56af28d5fbe197d6fbe8ca43c0bc6669978e167dcb90a273becbcab9178f32fe13ad48aeee7d740377d167fae3fa89516d6fd13c7ae016aad47be9c3e12c47de22973e6fc4895cf9313f768a95322c6638552ecc31ee922cbd681166ecfb87315df6158d85089ae6ad238396dc9ddfb7a35bf08e4cf620bef11901f80917241a4905a7607d4cb29b9f4d24a49b7a4aeae0e696969a3ce2d91cd2d71471f489c38f128503f5c0d205817465c874f377d9687dfae44b3d2681235259ccbeecefe414c301449be16ae64a96843fb999934181567ad89ab345d56e8b9b19686dba88517be4f8c58bcc255c73e7ee32ef99e66f651fc3d3da251d480fcee9b2bae5067f1a6bee123c9e356ab75540a1b00b4e7b79030d96766d24d80760310c2c7944571652a44eaca48d500912b5926354800399fdf53d885c964af62a4268a81b0b947fab85a2b9372fe76bcc5b7834153954edc92e64192c95699e66e813192a645161fa1dc60fc784a553a299560d5479f95164373baa518e8db037d8af22d85a74dbb1e76fb21afe3369b2da696dd958417b71c25e3a47b2baa8941afc3f4d32ebeee5eb8175e46c2b153c0f93295ca4ca65cb4b5bda6f867caf9db06bd0ebbfe563f2a850d005aa91d22429e3b467e4937e95cfc0a5fd3b79e8207c84a5c30d6980a18204f8c73138990737440ba56b9d2c2e1e4d829e0ce0ef9d7fffbbfe7a8f2b9afd7be2779fc9aeb6f52e5f36205ad78078a7027891b72a07308a8ff8ab82eded6345841c6a680e568fad67fcb3eb5fcedddbb3f973c5e5656a6cae7c50ab2a1403984169712ed933b25a1835ff8e40af4a9a5567c5b6ad70d307a438014ed8ea093d3dcbf44e242287a3f1145b8b140b8ba485d2f79abec5fd837dfbc28e4fbf285dcae9b850be72b2eecd9d946ce555f8b84d474d2b62fcad10aff88feca7f459b98e576b950a496bfc529a8e19a20af58f11355ae2db7ebe69a6b941f4c1f398e6a90331b96b3cf70d39e5fc58d993415e32b974b66e4450341bb2581104c57826027a2b1c81b6f3c85b2b2cb55b9b6944b12ae284941bf83eb7de101e826e621a9ec675167cd55b1c3c159c3f815b641af43f59675aa095bce25095794c49692adc1fdaf21bffd23aeefe19b90057049d7ff024957df1a1525d654b1dc0c9243f2e73f2f576dc70d009495fd1a3b77eef23a1e89859b39f933b8c1979fe1ab4c712623527ffe078c2dfeb1aa55a57cc1c4ad300b17cec7b26565aaf7ba696d6d87d97c9dd771abd58a75ebd645cc6a8a450e0049d7ff02632fb486dd6d61e20e11932917191929b058a62325653cacd60b7141c14c5596d6a590aa28050035353598366d5ac45d82d9d946eef8e67538f1da9ff9639cc9087de92f90b4b03c2c93d051296e2a4c29a858292929e33d76cea86d910341ce6a47b25c9a1c52220748a934b527a11111b72f7101c0c489e7a0a06092eceb62c1c9110d42548368b7da52c8891c206e8b1a9350cdfbef6f524cdcf12aa6682296acb614be44ce998c48b9e6219c5d76ab32555e39eeb351e796c432725bc9a2d96a4be14be48032935026ee18a2b6f67d5c73cd7d5ec763c56a4b21155d113292492813778cd0dada8e4b0a6f965cb469686888f9ba2473f26770dfd5be84fe371e972d7a99f1374750024f50ecee18aab270e143b20952b12e6c809447db9f335bd379ff6b1ac3635bc1998c1eaf732623b3dcf1885c74c4a0d7e170e757719bd66a39fb0c77fcf93538d9f477a46dd9137c670526eee8a5b5b51dbff8c53ad91269a3a51ec99cfc195c28d11326ee28a3b5b51defbcf3ffb063c7fbb2a206622f3a1209b4ebd7bf8279f3fe4bd5041f06116d77772fffbdc371140e079938d96c5fe29b6fbef22966214cd881a1edef3f8e575f7d170505d3554bcd8c17c4b541c4df8bcb071fd87f40d15c759329179b36bd101713c870c0e773db6c0761b379f70a0780ec6c23b2b38d92af499191911a154f0267ffa06cb351b130fbfb8f7bf54a0fd492aa8941afc3ac0b0a51565686f2f2f2b89d3caac1a84c9c8a568a8a2c9838f11c582c7350505080fcfc7c1c3d1a9d5bb8620126ee3042ad30e02e73565c5c8c949494515b154a4d98b803c064f2dd5852aa8c59434303ff75b03eb2d96ce61c0e0713fc08d1fafbc301404f77d788264606bd0e691999fe4ff44346460ab4dac0fa374e98908c891333fc9e979d9ded75acb7b7174ea793fffe9b6fba31304036869e3a751cddddfdfc6b3ddd5d5eef070217b4d168e41c0e071a1b1bd1dcfc4f4c9d6a42414101cacacad0d22253978d11109ab56bd7c695e5160b1300dadb3dab524a0954e91df8e27d8c4949495c6767276c361b9a9bffe911fa5bb8703eaeb966111534b3d60aa175381cfc377abd1ea9a9ea948e127e8e14274f1e4757d7d792af89c5485143944a61b3d9306dda3498cd666eea9473bcee73e1c2f9a8a9a9f11034b3d4caa2adaef6dd0e8f111a8d8d8d98366d1a152e0790cdbbe5e5e54cd061824d2855429863ddd3d3c3b1b05ef8d158ad562ed8c997c3e1f0f2637dd1d575849f0ceefbb4296a5d09a519cd85dfa3016d57d711747501c017fc41357c59bb5dd1cbc504757575282d2d8df46d8c5a985ba2224545163cfef81f99e58e102316b770d54d8a9c9c1cc958b210bd5e1ff146a00e87039d9dd2dda99a9bffc9c7b929c2451a7fd765be7664e0e3dcbe04969d9dcdfe407e181a1ae28d84cd66e363ed0b162c607e7784d0ecddbb37d2f7c060a802db20cc885b98b819710b1337236ed10a274200593696a3b7b717369b2da00b8773b1c664ca4566e6649fe7141414f8cd9b292e2ef6f93acbbb8e2d589c5b61e442a3e21eece281c4f6452a8f2271eebc7c1f8dde25b8e28a91578395daf32887d21b75d5463c408403830e0af614f18f66d5aa3b8633d6a405172d9b7dd5405c6e01201ba5fbfb8f7b9d2bded92e24d21b898b8a2cd06ac763c28464582ca405371d04a3f989c08af2a884d4cefbfefee35e15068483a6bbbb5f72cb9a1258ad5600e4294017ec0a0a0ae27a7304137714237cb2089f287440283518ac562b727272909f9f8fb2b2b2b8598d66e28e03844f095a8f8556b10a65be51515181952b57c6bcc899b847090d0d9ff06ed1bfffdd8b8e8e769f7305835e872d7fd916d3853699b84739b4f0e6da55cf4a5af858ae4be8d5f0495c664c4c3021385f041a61f0d7f92c10c4edf7a4188dd12221be3a37c46aa964b688132252832e2b2b07e79eebb90a2a1e34e16cc41a2c720237e87578bfb129e6e2ea4cdc11a6a8c8c27f2deebf490746389f1ef12470d5c45d980c1c1ca31bf1cae06766e07c05aa1f1426034d83fecf53ebfd4a409f16f40941abef2a2dfe86864f70f9e5b77b1d8fb536255ee2ae4a079a0747f68734e875f83cdb85eb0e8dec3a55e9c0f27330e2eb00c08e1ca0fe5be0b963a1bfffbac037fc7ba0d440f7074d85a0e21f493ffaf5eb5fc1bdf7fec1eb782ced0bf510776132f07c16d0ee0afd0f091021148e0332f78fece63e3303e95a60dd57a18bb23019b8c1002c4e05b6f502f77e19fc35e8200be53ee8400ff5b3957862984cb9983dfb02ac58f193a02cbc5c43d78a8a0a54565646bdc03dc44d4579ec54e0ae4061326019360c25e3801c1d1124109cb80d7a1d6ed2b9706e2260d5bbaf01042e2ae135a624929f458caf6bd1f703e0af21fc79821168e1f0efe4f92cf7fb7fe408de7a77e5076f24aad2a57f469329179f7cb425604bee2b82120b2142cd8e1c705222f0e70a54a50395699e221412ec00b9c140c424c513dd8159afaa74f9d74ac6f9764b0c7a1d36a7913fa250d062e484e66b70520219a474505892c93d178e0bee89419f32720369e1c2f9a8ad7d24b08b01a8a9a9c3cf7eb6caeb782c4c30353b72bc27949d43a13d42473306bd0ed34fbbf8a718e0b6fe14b9c145dd41b90105480f2ae140a09fb7783812e9eb29f3f4d30f60d9b29be53f4c4459d9afb173e72eafe3454516bcf5d67b513bc164a1c028422cd692e127aad4fc45f8b4937bd2f87afab6b4ec08d8ff76f60f223bab54f249b06cd9322c5ebc7874885b890910f5e3439d442a7d3fb1027d7a00ee0122f73b0cc5ff369baf937c2d5a5730f90dc2befcd540a94a071ef45f4fd32fcf1d863ea80000079849444154679147ac123c9f15fa7b0b9347f67b290cf342649fd385a6e130ee73c77c1b07bbfd106e2dff5dc0d79e393307ab56dd21f9da6d3f5d0cb3d91c751e4002e09e848cf48f519936f21baa4a278fd8c523ac815f984ca23fe9dad07fae1b0ca1ff4c55e9c08e5c624d832594f784c2ce9dbb505bfb7ec0e7af5ebd44b23f509fd385db6e0bdc870f179ac264703b86ef379859b97002258c1084120bae4a970ebd051a0293bb174a20911b6148537c8d601691e8bdd0096228f16dfab408e6f718aafb65d0ebe0e8d8ad487830dadc13cd676670f48fd8f4adffc59ba727c987ba80e0c35672e1c44043893404572211ce04c860d9dc237f4ff4a9e50b7f02a5933ba9df4b3021513a3076e406f73e80fc5d80d0a25cc1860757afde88356bfee4753cda96e7355df9ee09e5485602e305e1a40cf06f0da9951587fd02790255a5bb63d952f8fa7b48c5c381d0168a00e0fdf737c9a6fd4a316ddaf5925bdca269f5928502238838364e9f3e7460483d31fc3d390379fa4a6132e5a2adedb580cff7153d696868888a5df78a8adba01f7972d0d39380b5ce915f47897b8905a416725eed0bcdff5eb5ea0eac5ebd24e0f3e5dc13613fa0489260d0eb140903eec8019f97112a85c9244a32d2eb00e41a4f4ff27f9e1c4f4f1a59d4225c110f71e8efde2f438feb3ff3f416b4b6066ef6e5a22776fb21ecdebd3be21e41c2e634f9c958a054a5139faf79848b253718c8ff238d71d389aa551fdafb0d7a1dacfad007d98e1cf0792ab1449fd385471ffdbf41bde7cf7f7e58f2f8d37f5807a3d1185181f313ca6026227261b360f3aee975c4597cc1f88dbeb21201ff910e29bf97de47b0110b1ab9a1d19750f2d077e4049e2846517a1536d8c9a55cee49a42797bcb8fd454a7c85bb2881fe310d7a1d56ea5db20b3581c6860b93fdaf88fa120a4df1f585af9f49188694caef083645d6924cc292c1c6c63f330377762827f0a2220b3ef86073c0e7fbca3d89e4e4921777a8bb5d84a1b358cfe110af64fada3d2395fbcd5f27802790bfa887afbf87701249d709428d92c811acf596dbb963b55ab16eddbac8881b2c1418118402150e0e3a30c4e2a6f9e6be72cd955ca708363408c8c7be23b5b181893b46910a0102cae6e1bff8e21a94972f08f87cb98dc5910a0d3271336409c57acb4d2ed7ae5d8bd2d2d2b00a9c899be19360adb7dcca6524f24e7c8a7ba4a5cc0229633652822def16e942f1b14628d65b6ee532dcd69b15c2f481bfba8900e0701c85c37154f6755f834fcd62f34a12acf5960b0d86db7a3371472152ed4c00efc1263570d478328562bde576cd87736187893b8e11b72e117667100e8c409e20c1c6bd01f9d0a0c3e1084b617b266e860772ad4aee5b764bd065d9e44283e1b2de51296ea96649a1305a6a6b47337225d9c261bdbd8acf537c4da67cb5ad036267a2e48f407b6cfaeaab492bb18a192d032f92d69bc5b9a30ca9f0ab544835968ada47ca7a4795b80d7a1dd23232255fcbc8488156eb3b669e93139a25cccece0ee97d421c0e4750e79f3c791c5d5d5f4bbe76ead4717477f77b1defe9ee0a382d593c48c403443838d47e8ac82deca86dbd5517b79460333327877cbdaeae2323bd259f042320397c0d523172bf8bcccc1f60ec58cfc1acd7eb919aea99272c1c54e201231c2481fe5c62574ce8721514b80748b04f0a29ebad76c66054596e46f088b7790907cb8409c99838d19df02e7c42d141f1cd37dd181820e987d470043bc085ad4fa4e61ffdfdc7b161c356afe34cdc0c55103e5d842e9f7040e8f57a389d4efe89409f044a3cdd00f597e399b81901419f10e2b9cfa953c743ea521c8ea578266e46440847e9b504ffa73018ca52515111969a824cdc8cb0525464095fe214a2d02d319972030a17969494781d73381c686ff7de29dbd575c463d5d46ab506742fa74e1d6739e00a61d0ebf0d9fe2fc2923405001a835ec7cdbaa050f24529f188292e2e0ef8c30a0a0aa2a60268b8181a1a0ad97834363606757e7d7dbdec6b0d0d0da1de46d0d0488c380523dc1b85357bf7ee0dfa4d46a3910b7645ce66b3c1e97406fd59912698c10b0029292951dde14b48525212d7dfef5e0975381ce8ecece4bf170e967d9f36f98d8818f43a145f7e052c963978f7dd9dfc13afa8c882679f7d21ecbf178dd56af5b22ce24738435d0c7a1de49e9e724c98900c8b654e50efd1ebf528282808ea3d42e8c0351a8ddcd2a5551e1b810d7a1d6eab204534b7546f449fd3059329172b56fc2662fd2aa3d2e766442f26532e9e7cf269a4a5a569dadadab8f2f27200eec29f7d4e170c7a1dee7d6039eeb9e79e88baa14cdc8c90a0197d62814783a8294cdc8c9010f69fece9e9e16a6b6bb172e5cab045420281899b1132d1deff9d2de23042a6bcbc1c6d6d6d516b1c7d741b8f4ee4220b393939b29b0e0a0a0aa0d7fbaf441fa938fc4862e14a136cc8b6b3b313d3a64d53f18e4227ac6e495191c523a34cbc482416612cc58c19d147c8e2162e5f0b452a142813272392f0e2163eee858f78a158a3a1fd1a831128dafefefea8884932184a93c084cd885758289011b7307133e216266e46dcc2c4cd885b98b819710b1337236e61e266c42d4cdc8cb885899b11b7307133e216266e46dcc2c4cd885b98b819710b1337236e61e266c42d4cdc8cb885899b11b7307133e216266e46dcf2ff014aec27be8fe3b5c70000000049454e44ae426082</data>
+ </image>
+</images>
+<tabstops>
+ <tabstop>m_editUsername</tabstop>
+ <tabstop>m_editPassword</tabstop>
+ <tabstop>m_textDetails</tabstop>
+ <tabstop>m_listFi</tabstop>
+ <tabstop>m_listAccount</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp b/kmymoney2/plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp
new file mode 100644
index 0000000..d24f9a4
--- /dev/null
+++ b/kmymoney2/plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp
@@ -0,0 +1,445 @@
+/***************************************************************************
+ konlinebankingsetupwizard.cpp
+ -------------------
+ begin : Sat Jan 7 2006
+ copyright : (C) 2006 by Ace Jones
+ email : acejones@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qtextbrowser.h>
+#include <qlineedit.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qregexp.h>
+#include <qcheckbox.h>
+#include <qtabwidget.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kdebug.h>
+#include <kmessagebox.h>
+#include <kstandarddirs.h>
+#include <kprogress.h>
+#include <kapplication.h>
+#include <klistview.h>
+#include <klistviewsearchline.h>
+#include <kcombobox.h>
+#include <kurlrequester.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "konlinebankingsetupwizard.h"
+#include <../ofxpartner.h>
+#include <mymoneyofxconnector.h>
+
+class KOnlineBankingSetupWizard::Private
+{
+public:
+ QFile m_fpTrace;
+ QTextStream m_trace;
+};
+
+KOnlineBankingSetupWizard::KOnlineBankingSetupWizard(QWidget *parent, const char *name):
+ KOnlineBankingSetupDecl(parent,name),
+ d(new Private),
+ m_fDone(false),
+ m_fInit(false),
+ m_appId(0)
+{
+ m_appId = new OfxAppVersion(m_applicationCombo, "");
+ m_headerVersion = new OfxHeaderVersion(m_headerVersionCombo, "");
+
+ // fill the list view with banks
+ KProgressDialog* dlg = new KProgressDialog(this, 0, i18n("Loading banklist"), i18n("Getting list of banks from http://moneycentral.msn.com/\nThis may take some time depending on the available bandwidth."), true);
+ dlg->setAllowCancel(false);
+ // force to show immediately as the call to OfxPartner::BankNames()
+ // does not call the processEvents() loop
+ dlg->setMinimumDuration(0);
+ kapp->processEvents();
+
+ tabLayout->insertWidget(0, new KListViewSearchLineWidget(m_listFi, tab, 0));
+
+ OfxPartner::setDirectory(locateLocal("appdata", ""));
+ QStringList banks = OfxPartner::BankNames();
+ QStringList::const_iterator it_bank = banks.begin();
+ while (it_bank != banks.end())
+ {
+ new KListViewItem( m_listFi, (*it_bank));
+ ++it_bank;
+ }
+ m_fInit = true;
+ delete dlg;
+}
+
+KOnlineBankingSetupWizard::~KOnlineBankingSetupWizard()
+{
+ delete m_appId;
+ delete d;
+}
+
+void KOnlineBankingSetupWizard::next(void)
+{
+ bool ok = true;
+
+ switch (indexOf(currentPage()))
+ {
+ case 0:
+ ok = finishFiPage();
+ break;
+ case 1:
+ ok = finishLoginPage();
+ break;
+ case 2:
+ m_fDone = ok = finishAccountPage();
+ break;
+ }
+
+ if (ok)
+ KOnlineBankingSetupDecl::next();
+
+ setFinishEnabled(currentPage(), m_fDone );
+}
+
+bool KOnlineBankingSetupWizard::finishFiPage(void)
+{
+ bool result = false;
+
+ m_bankInfo.clear();
+ OfxFiServiceInfo info;
+
+ if(m_selectionTab->currentPageIndex() == 0) {
+
+ // Get the fipids for the selected bank
+ QListViewItem* item = m_listFi->currentItem();
+ if ( item )
+ {
+ QString bank = item->text(0);
+ m_textDetails->clear();
+ m_textDetails->append(QString("<p>Details for %1:</p>").arg(bank));
+ QStringList fipids = OfxPartner::FipidForBank(bank);
+ QStringList::const_iterator it_fipid = fipids.begin();
+ while ( it_fipid != fipids.end() )
+ {
+ // For each fipid, get the connection details
+ info = OfxPartner::ServiceInfo(*it_fipid);
+
+ // Print them to the text browser
+ QString message = QString("<p>Fipid: %1<br>").arg(*it_fipid);
+
+ // If the bank supports retrieving statements
+ if ( info.accountlist )
+ {
+ m_bankInfo.push_back(info);
+
+ message += QString("URL: %1<br>Org: %2<br>Fid: %3<br>").arg(info.url,info.org,info.fid);
+ if ( info.statements )
+ message += i18n("Supports online statements<br>");
+ if ( info.investments )
+ message += i18n("Supports investments<br>");
+ if ( info.billpay )
+ message += i18n("Supports bill payment (but not supported by KMyMoney yet)<br>");
+ }
+ else
+ {
+ message += i18n("Does not support online banking</p>");
+ }
+ m_textDetails->append(message);
+
+ ++it_fipid;
+ }
+ result = true;
+ }
+ else
+ // error! No current item
+ KMessageBox::sorry(this,i18n("Please choose a bank."));
+
+ } else { // manual entry of values
+ if(m_fid->text().isEmpty()
+ || m_url->url().isEmpty()
+ || m_bankName->text().isEmpty()) {
+ KMessageBox::sorry(this,i18n("Please fill all fields with values."));
+ }
+
+ m_textDetails->clear();
+ m_textDetails->append(QString("<p>Details for %1:</p>").arg(m_bankName->text()));
+
+ memset(&info, 0, sizeof(OfxFiServiceInfo));
+ strncpy(info.fid, m_fid->text().data(), OFX_FID_LENGTH-1);
+ strncpy(info.org, m_bankName->text().latin1(), OFX_ORG_LENGTH-1);
+ strncpy(info.url, m_url->url().data(), OFX_URL_LENGTH-1);
+ info.accountlist = 1;
+ info.statements = 1;
+ info.billpay = 1;
+ info.investments = 1;
+
+ m_bankInfo.push_back(info);
+
+ QString message;
+ message += QString("URL: %1<br>Org: %2<br>Fid: %3<br>").arg(info.url,info.org,info.fid);
+ if ( info.statements )
+ message += i18n("Supports online statements<br>");
+ if ( info.investments )
+ message += i18n("Supports investments<br>");
+ if ( info.billpay )
+ message += i18n("Supports bill payment (but not supported by KMyMoney yet)<br>");
+ m_textDetails->append(message);
+ result = true;
+ }
+ return result;
+}
+
+bool KOnlineBankingSetupWizard::finishLoginPage(void)
+{
+ bool result = true;
+
+ QString username = m_editUsername->text();
+ QString password = m_editPassword->text();
+
+ m_listAccount->clear();
+
+ // Process an account request for each fipid
+ m_it_info = m_bankInfo.begin();
+ while ( m_it_info != m_bankInfo.end() )
+ {
+ OfxFiLogin fi;
+ memset(&fi,0,sizeof(OfxFiLogin));
+ strncpy(fi.fid,(*m_it_info).fid,OFX_FID_LENGTH-1);
+ strncpy(fi.org,(*m_it_info).org,OFX_ORG_LENGTH-1);
+ strncpy(fi.userid,username.latin1(),OFX_USERID_LENGTH-1);
+ strncpy(fi.userpass,password.latin1(),OFX_USERPASS_LENGTH-1);
+
+#if LIBOFX_IS_VERSION(0,9,0)
+ // pretend we're Quicken 2008
+ // http://ofxblog.wordpress.com/2007/06/06/ofx-appid-and-appver-for-intuit-products/
+ // http://ofxblog.wordpress.com/2007/06/06/ofx-appid-and-appver-for-microsoft-money/
+ QString appId = m_appId->appId();
+ QRegExp exp("(.*):(.*)");
+ if(exp.search(appId) != -1) {
+ strncpy(fi.appid, exp.cap(1).latin1(), OFX_APPID_LENGTH-1);
+ strncpy(fi.appver, exp.cap(2).latin1(), OFX_APPVER_LENGTH-1);
+ } else {
+ strncpy(fi.appid, "QWIN", OFX_APPID_LENGTH-1);
+ strncpy(fi.appver, "1700", OFX_APPVER_LENGTH-1);
+ }
+
+ QString hver = m_headerVersion->headerVersion();
+ strncpy(fi.header_version, hver.latin1(), OFX_HEADERVERSION_LENGTH-1);
+#endif
+
+ // who owns this memory?!?!
+ char* request = libofx_request_accountinfo( &fi );
+
+ KURL filename(QString("%1response.ofx").arg(locateLocal("appdata", "")));
+ QByteArray req;
+ req.setRawData(request, strlen(request));
+ OfxHttpsRequest("POST", (*m_it_info).url, req, QMap<QString, QString>(), filename, true);
+ req.resetRawData(request, strlen(request));
+
+ LibofxContextPtr ctx = libofx_get_new_context();
+ Q_CHECK_PTR(ctx);
+
+ ofx_set_account_cb(ctx, ofxAccountCallback, this);
+ ofx_set_status_cb(ctx, ofxStatusCallback, this);
+ // Add resulting accounts to the account list
+ libofx_proc_file(ctx, filename.path(), AUTODETECT);
+ libofx_free_context(ctx);
+
+ ++m_it_info;
+ }
+
+ if ( ! m_listAccount->childCount() )
+ {
+ KMessageBox::sorry(this,i18n("No suitable accounts were found at this bank."));
+ result = false;
+ }
+ return result;
+}
+
+bool KOnlineBankingSetupWizard::finishAccountPage(void)
+{
+ bool result = true;
+
+ if ( ! m_listAccount->currentItem() )
+ {
+ KMessageBox::sorry(this,i18n("Please choose an account"));
+ result = false;
+ }
+
+ return result;
+}
+
+int KOnlineBankingSetupWizard::ofxAccountCallback(struct OfxAccountData data, void * pv)
+{
+ KOnlineBankingSetupWizard* pthis = reinterpret_cast<KOnlineBankingSetupWizard*>(pv);
+ // Put the account info in the view
+
+ MyMoneyKeyValueContainer kvps;
+
+ if ( data.account_type_valid )
+ {
+ QString type;
+ switch ( data.account_type )
+ {
+ case OfxAccountData::OFX_CHECKING: /**< A standard checking account */
+ type = "CHECKING";
+ break;
+ case OfxAccountData::OFX_SAVINGS: /**< A standard savings account */
+ type = "SAVINGS";
+ break;
+ case OfxAccountData::OFX_MONEYMRKT: /**< A money market account */
+ type = "MONEY MARKET";
+ break;
+ case OfxAccountData::OFX_CREDITLINE: /**< A line of credit */
+ type = "CREDIT LINE";
+ break;
+ case OfxAccountData::OFX_CMA: /**< Cash Management Account */
+ type = "CMA";
+ break;
+ case OfxAccountData::OFX_CREDITCARD: /**< A credit card account */
+ type = "CREDIT CARD";
+ break;
+ case OfxAccountData::OFX_INVESTMENT: /**< An investment account */
+ type = "INVESTMENT";
+ break;
+ default:
+ break;
+ }
+ kvps.setValue("type",type);
+ }
+
+ if ( data.bank_id_valid )
+ kvps.setValue("bankid",data.bank_id);
+
+ if ( data.broker_id_valid )
+ kvps.setValue("bankid",data.broker_id);
+
+ if ( data.branch_id_valid )
+ kvps.setValue("branchid",data.branch_id);
+
+ if ( data.account_number_valid )
+ kvps.setValue("accountid",data.account_number);
+
+ if ( data.account_id_valid )
+ kvps.setValue("uniqueId",data.account_id);
+
+ kvps.setValue("username",pthis->m_editUsername->text());
+ kvps.setValue("password",pthis->m_editPassword->text());
+
+ kvps.setValue("url",(*(pthis->m_it_info)).url);
+ kvps.setValue("fid",(*(pthis->m_it_info)).fid);
+ kvps.setValue("org",(*(pthis->m_it_info)).org);
+ kvps.setValue("fipid","");
+ QListViewItem* item = pthis->m_listFi->currentItem();
+ if ( item )
+ kvps.setValue("bankname",item->text(0));
+
+ // I removed the bankid here, because for some users it
+ // was not possible to setup the automatic account matching
+ // because the bankid was left empty here as well during
+ // the statement download. In case we don't have it, we
+ // simply use it blank. (ipwizard 2009-06-21)
+ if(/* !kvps.value("bankid").isEmpty()
+ && */ !kvps.value("uniqueId").isEmpty()) {
+
+ kvps.setValue("kmmofx-acc-ref", QString("%1-%2").arg(kvps.value("bankid"), kvps.value("uniqueId")));
+ } else {
+ qDebug("Cannot setup kmmofx-acc-ref for '%s'", kvps.value("bankname").data());
+ }
+ kvps.setValue("protocol","OFX");
+
+ new ListViewItem( pthis->m_listAccount, kvps );
+
+ return 0;
+}
+
+int KOnlineBankingSetupWizard::ofxStatusCallback(struct OfxStatusData data, void * pv)
+{
+ KOnlineBankingSetupWizard* pthis = reinterpret_cast<KOnlineBankingSetupWizard*>(pv);
+
+ QString message;
+
+ if(data.code_valid==true)
+ {
+ message += QString("#%1 %2: \"%3\"\n").arg(data.code).arg(data.name,data.description);
+ }
+
+ if(data.server_message_valid==true){
+ message += i18n("Server message: %1\n").arg(data.server_message);
+ }
+
+ if(data.severity_valid==true){
+ switch(data.severity){
+ case OfxStatusData::INFO :
+ break;
+ case OfxStatusData::WARN :
+ KMessageBox::detailedError( pthis, i18n("Your bank returned warnings when signing on"), i18n("WARNING %1").arg(message) );
+ break;
+ case OfxStatusData::ERROR :
+ KMessageBox::detailedError( pthis, i18n("Error signing onto your bank"), i18n("ERROR %1").arg(message) );
+ break;
+ default:
+ break;
+ }
+ }
+ return 0;
+}
+
+bool KOnlineBankingSetupWizard::chosenSettings( MyMoneyKeyValueContainer& settings )
+{
+ bool result = false;;
+
+ if ( m_fDone )
+ {
+ QListViewItem* qitem = m_listAccount->currentItem();
+ ListViewItem* item = dynamic_cast<ListViewItem*>(qitem);
+ if ( item )
+ {
+ settings = *item;
+ settings.deletePair("appId");
+ settings.deletePair("kmmofx-headerVersion");
+ QString appId = m_appId->appId();
+ if(!appId.isEmpty())
+ settings.setValue("appId", appId);
+ QString hVer = m_headerVersion->headerVersion();
+ if(!hVer.isEmpty())
+ settings.setValue("kmmofx-headerVersion", hVer);
+ result = true;
+ }
+ }
+
+ return result;
+}
+
+KOnlineBankingSetupWizard::ListViewItem::ListViewItem( QListView* parent, const MyMoneyKeyValueContainer& kvps ):
+ MyMoneyKeyValueContainer( kvps ), QListViewItem( parent )
+{
+ setText( 0, value("accountid") );
+ setText( 1, value("type") );
+ setText( 2, value("bankid") );
+ setText( 3, value("branchid") );
+}
+
+void KOnlineBankingSetupWizard::ListViewItem::x(void) {}
+
+#include "konlinebankingsetupwizard.moc"
+
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/plugins/ofximport/dialogs/konlinebankingsetupwizard.h b/kmymoney2/plugins/ofximport/dialogs/konlinebankingsetupwizard.h
new file mode 100644
index 0000000..65a89de
--- /dev/null
+++ b/kmymoney2/plugins/ofximport/dialogs/konlinebankingsetupwizard.h
@@ -0,0 +1,106 @@
+/***************************************************************************
+ konlinebankingsetupwizard.h
+ -------------------
+ begin : Sat Jan 7 2006
+ copyright : (C) 2006 by Ace Jones
+ email : acejones@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KONLINEBANKINGSETUPWIZARD_H
+#define KONLINEBANKINGSETUPWIZARD_H
+
+// ----------------------------------------------------------------------------
+// Library Includes
+
+#include <libofx/libofx.h>
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+#include <qvaluelist.h>
+#include <qlistview.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "konlinebankingsetupdecl.h"
+#include <kmymoney/mymoneykeyvaluecontainer.h>
+class OfxAppVersion;
+class OfxHeaderVersion;
+
+/**
+ * @author Ace Jones
+ */
+
+/**
+ * This class implementes a wizard for setting up an existing account
+ * with online banking.
+ *
+ * The user is asked to choose his bank from the supported bank, and
+ * his account.
+ *
+ * Currently works only with OFX Direct Connect, but I imagined that
+ * other protocols could be included here. To accomodate this, we'd
+ * add another page at the start of the wizard to ask which protocol
+ * they wanted.
+ *
+ */
+class KOnlineBankingSetupWizard : public KOnlineBankingSetupDecl
+{
+ Q_OBJECT
+public:
+ class ListViewItem: public MyMoneyKeyValueContainer, public QListViewItem
+ {
+ public:
+ ListViewItem( QListView* parent, const MyMoneyKeyValueContainer& kvps );
+ virtual void x(void);
+ };
+
+ KOnlineBankingSetupWizard(QWidget *parent=0, const char *name=0);
+ ~KOnlineBankingSetupWizard();
+
+ bool chosenSettings( MyMoneyKeyValueContainer& settings );
+
+ bool isInit(void) const { return m_fInit; }
+
+public slots:
+ void next();
+
+protected:
+ bool finishAccountPage(void);
+ bool finishLoginPage(void);
+ bool finishFiPage(void);
+ bool post(const char* request, const char* url,const char* filename);
+
+ static int ofxAccountCallback(struct OfxAccountData data, void * pv);
+ static int ofxStatusCallback(struct OfxStatusData data, void * pv);
+
+private:
+ /// \internal d-pointer class.
+ class Private;
+ /// \internal d-pointer instance.
+ Private* const d;
+
+ QValueList<OfxFiServiceInfo> m_bankInfo;
+ QValueList<OfxFiServiceInfo>::const_iterator m_it_info;
+ bool m_fDone;
+ bool m_fInit;
+ OfxAppVersion* m_appId;
+ OfxHeaderVersion* m_headerVersion;
+};
+
+#endif
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/plugins/ofximport/dialogs/konlinebankingstatus.cpp b/kmymoney2/plugins/ofximport/dialogs/konlinebankingstatus.cpp
new file mode 100644
index 0000000..6e5cef9
--- /dev/null
+++ b/kmymoney2/plugins/ofximport/dialogs/konlinebankingstatus.cpp
@@ -0,0 +1,112 @@
+/***************************************************************************
+ konlinebankingstatus.cpp
+ -------------------
+ begin : Wed Apr 16 2008
+ copyright : (C) 2008 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+
+// ----------------------------------------------------------------------------
+// System Includes
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlabel.h>
+#include <qpushbutton.h>
+#include <qradiobutton.h>
+#include <qspinbox.h>
+#include <qdatetimeedit.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kled.h>
+#include <kcombobox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "konlinebankingstatus.h"
+#include <kmymoney/mymoneykeyvaluecontainer.h>
+#include <kmymoney/mymoneyaccount.h>
+#include <libofx/libofx.h>
+#include "mymoneyofxconnector.h"
+
+KOnlineBankingStatus::KOnlineBankingStatus(const MyMoneyAccount& acc, QWidget *parent, const char *name) :
+ KOnlineBankingStatusDecl(parent,name),
+ m_appId(0)
+{
+ m_ledOnlineStatus->off();
+
+ // Set up online banking settings if applicable
+ MyMoneyKeyValueContainer settings = acc.onlineBankingSettings();
+ m_textOnlineStatus->setText(i18n("Enabled & configured"));
+ m_ledOnlineStatus->on();
+
+ QString account = settings.value("accountid");
+ QString bank = settings.value("bankname");
+ QString bankid = QString("%1 %2").arg(settings.value("bankid")).arg(settings.value("branchid"));
+ if ( bankid.length() > 1 )
+ bank += QString(" (%1)").arg(bankid);
+ m_textBank->setText(bank);
+ m_textOnlineAccount->setText(account);
+
+ m_appId = new OfxAppVersion(m_applicationCombo, settings.value("appId"));
+ m_headerVersion = new OfxHeaderVersion(m_headerVersionCombo, settings.value("kmmofx-headerVersion"));
+
+ int numDays = 60;
+ QString snumDays = settings.value("kmmofx-numRequestDays");
+ if (!snumDays.isEmpty())
+ numDays = snumDays.toInt();
+ m_numdaysSpin->setValue(numDays);
+ m_todayRB->setChecked(settings.value("kmmofx-todayMinus").isEmpty() || settings.value("kmmofx-todayMinus").toInt() != 0);
+ m_lastUpdateRB->setChecked(!settings.value("kmmofx-lastUpdate").isEmpty() && settings.value("kmmofx-lastUpdate").toInt() != 0);
+ m_lastUpdateTXT->setText(acc.value("lastImportedTransactionDate"));
+ m_pickDateRB->setChecked(!settings.value("kmmofx-pickDate").isEmpty() && settings.value("kmmofx-pickDate").toInt() != 0);
+ QString specificDate = settings.value("kmmofx-specificDate");
+ if (!specificDate.isEmpty())
+ m_specificDate->setDate(QDate::fromString(specificDate));
+ else
+ m_specificDate->setDate(QDate::currentDate());
+ m_specificDate->setMaxValue(QDate::currentDate());
+ m_payeeidRB->setChecked(settings.value("kmmofx-preferPayeeid").isEmpty() || settings.value("kmmofx-preferPayeeid").toInt() != 0);
+ m_nameRB->setChecked(!settings.value("kmmofx-preferName").isEmpty() && settings.value("kmmofx-preferName").toInt() != 0);
+}
+
+KOnlineBankingStatus::~KOnlineBankingStatus()
+{
+ delete m_appId;
+}
+
+const QString& KOnlineBankingStatus::appId(void) const
+{
+ if(m_appId)
+ return m_appId->appId();
+ return QString::null;
+}
+
+QString KOnlineBankingStatus::headerVersion(void) const
+{
+ if(m_headerVersion)
+ return m_headerVersion->headerVersion();
+ return QString::null;
+}
+
+#include "konlinebankingstatus.moc"
+
diff --git a/kmymoney2/plugins/ofximport/dialogs/konlinebankingstatus.h b/kmymoney2/plugins/ofximport/dialogs/konlinebankingstatus.h
new file mode 100644
index 0000000..bbd62ea
--- /dev/null
+++ b/kmymoney2/plugins/ofximport/dialogs/konlinebankingstatus.h
@@ -0,0 +1,58 @@
+/***************************************************************************
+ konlinebankingstatus.h
+ -------------------
+ begin : Wed Apr 16 2008
+ copyright : (C) 2008 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KONLINEBANKINGSTATUS_H
+#define KONLINEBANKINGSTATUS_H
+
+// ----------------------------------------------------------------------------
+// Library Includes
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "konlinebankingstatusdecl.h"
+class MyMoneyAccount;
+class OfxAppVersion;
+class OfxHeaderVersion;
+
+/**
+ * @author Thomas Baumgart
+ */
+
+class KOnlineBankingStatus : public KOnlineBankingStatusDecl
+{
+ Q_OBJECT
+public:
+ KOnlineBankingStatus(const MyMoneyAccount& acc, QWidget *parent=0, const char *name=0);
+ ~KOnlineBankingStatus();
+ const QString& appId(void) const;
+ QString headerVersion(void) const;
+private:
+ OfxAppVersion* m_appId;
+ OfxHeaderVersion* m_headerVersion;
+};
+
+#endif
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/plugins/ofximport/dialogs/konlinebankingstatusdecl.ui b/kmymoney2/plugins/ofximport/dialogs/konlinebankingstatusdecl.ui
new file mode 100644
index 0000000..f76f9e4
--- /dev/null
+++ b/kmymoney2/plugins/ofximport/dialogs/konlinebankingstatusdecl.ui
@@ -0,0 +1,483 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KOnlineBankingStatusDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KOnlineBankingStatusDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>568</width>
+ <height>529</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox1</cstring>
+ </property>
+ <property name="title">
+ <string>Account Details</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>m_textBank</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>&amp;lt;Not configured&amp;gt;</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>BANK/BROKER:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="1">
+ <property name="name">
+ <cstring>m_textOnlineAccount</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>&amp;lt;Not configured&amp;gt;</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="1">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KLed">
+ <property name="name">
+ <cstring>m_ledOnlineStatus</cstring>
+ </property>
+ <property name="state">
+ <enum>Off</enum>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_textOnlineStatus</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>10</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Unavailable</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>41</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>ACCOUNT:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>STATUS:</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox2</cstring>
+ </property>
+ <property name="title">
+ <string>OFX Details</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout8</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel1_3</cstring>
+ </property>
+ <property name="text">
+ <string>Header Version</string>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="0" column="1">
+ <property name="name">
+ <cstring>m_applicationCombo</cstring>
+ </property>
+ </widget>
+ <spacer row="0" column="2">
+ <property name="name">
+ <cstring>spacer4_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>150</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KComboBox" row="1" column="1">
+ <property name="name">
+ <cstring>m_headerVersionCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>Identify as</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>buttonGroup2</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="midLineWidth">
+ <number>0</number>
+ </property>
+ <property name="title">
+ <string>Start date of import</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout17</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout8</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_todayRB</cstring>
+ </property>
+ <property name="text">
+ <string>To&amp;day minus</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>m_numdaysSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>180</number>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2_2</cstring>
+ </property>
+ <property name="text">
+ <string>days</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout16</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_lastUpdateRB</cstring>
+ </property>
+ <property name="text">
+ <string>Last &amp;update</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_lastUpdateTXT</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout7</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_pickDateRB</cstring>
+ </property>
+ <property name="text">
+ <string>Pi&amp;ck date</string>
+ </property>
+ </widget>
+ <widget class="QDateEdit">
+ <property name="name">
+ <cstring>m_specificDate</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="order">
+ <enum>YMD</enum>
+ </property>
+ <property name="date">
+ <date>
+ <year>2000</year>
+ <month>1</month>
+ <day>1</day>
+ </date>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer10</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>41</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox3</cstring>
+ </property>
+ <property name="title">
+ <string>Name is derived from</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout11</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>buttonGroup1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>1</number>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_payeeidRB</cstring>
+ </property>
+ <property name="text">
+ <string>P&amp;AYEEID</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_nameRB</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;NAME</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel3_2</cstring>
+ </property>
+ <property name="text">
+ <string>field if both are present in download</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer11_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>31</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer11</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>50</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>m_pickDateRB</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>m_specificDate</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>m_todayRB</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>m_numdaysSpin</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/plugins/ofximport/dialogs/mymoneyofxconnector.cpp b/kmymoney2/plugins/ofximport/dialogs/mymoneyofxconnector.cpp
new file mode 100644
index 0000000..6e841bb
--- /dev/null
+++ b/kmymoney2/plugins/ofximport/dialogs/mymoneyofxconnector.cpp
@@ -0,0 +1,725 @@
+/***************************************************************************
+ mymoneyofxconnector.cpp
+ -------------------
+ begin : Sat Nov 13 2004
+ copyright : (C) 2002 by Ace Jones
+ email : acejones@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+// ----------------------------------------------------------------------------
+// System Includes
+
+#include <libofx/libofx.h>
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qdatetime.h>
+#include <qregexp.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kdebug.h>
+#include <kcombobox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneyinstitution.h>
+#include <kmymoney/mymoneykeyvaluecontainer.h>
+#include "mymoneyofxconnector.h"
+
+OfxHeaderVersion::OfxHeaderVersion(KComboBox* combo, const QString& headerVersion) :
+ m_combo(combo)
+{
+ combo->clear();
+ combo->insertItem("102");
+ combo->insertItem("103");
+
+ if(!headerVersion.isEmpty()) {
+ combo->setCurrentItem(headerVersion);
+ } else {
+ combo->setCurrentItem("102");
+ }
+
+#if ! LIBOFX_IS_VERSION(0,9,0)
+ // This feature does not work with libOFX < 0.9 so
+ // we just make disable the button in this case
+ combo->setDisabled(true);
+#endif
+}
+
+QString OfxHeaderVersion::headerVersion(void) const
+{
+ return m_combo->currentText();
+}
+
+OfxAppVersion::OfxAppVersion(KComboBox* combo, const QString& appId) :
+ m_combo(combo)
+{
+// http://ofxblog.wordpress.com/2007/06/06/ofx-appid-and-appver-for-intuit-products/
+// http://ofxblog.wordpress.com/2007/06/06/ofx-appid-and-appver-for-microsoft-money/
+
+ // Quicken
+ m_appMap[i18n("Quicken Windows 2003")] = "QWIN:1200";
+ m_appMap[i18n("Quicken Windows 2004")] = "QWIN:1300";
+ m_appMap[i18n("Quicken Windows 2005")] = "QWIN:1400";
+ m_appMap[i18n("Quicken Windows 2006")] = "QWIN:1500";
+ m_appMap[i18n("Quicken Windows 2007")] = "QWIN:1600";
+ m_appMap[i18n("Quicken Windows 2008")] = "QWIN:1700";
+
+ // MS-Money
+ m_appMap[i18n("MS-Money 2003")] = "Money:1100";
+ m_appMap[i18n("MS-Money 2004")] = "Money:1200";
+ m_appMap[i18n("MS-Money 2005")] = "Money:1400";
+ m_appMap[i18n("MS-Money 2006")] = "Money:1500";
+ m_appMap[i18n("MS-Money 2007")] = "Money:1600";
+ m_appMap[i18n("MS-Money Plus")] = "Money:1700";
+
+ // KMyMoney
+ m_appMap["KMyMoney"] = "KMyMoney:1000";
+
+ combo->clear();
+ combo->insertStringList(m_appMap.keys());
+
+ QMap<QString, QString>::const_iterator it_a;
+ for(it_a = m_appMap.begin(); it_a != m_appMap.end(); ++it_a) {
+ if(*it_a == appId)
+ break;
+ }
+
+ if(it_a != m_appMap.end()) {
+ combo->setCurrentItem(it_a.key());
+ } else {
+ combo->setCurrentItem(i18n("Quicken Windows 2008"));
+ }
+
+#if ! LIBOFX_IS_VERSION(0,9,0)
+ // This feature does not work with libOFX < 0.9 so
+ // we just make disable the button in this case
+ combo->setDisabled(true);
+#endif
+}
+
+const QString& OfxAppVersion::appId(void) const
+{
+ static QString defaultAppId("QWIN:1700");
+
+ QString app = m_combo->currentText();
+ if(m_appMap[app] != defaultAppId)
+ return m_appMap[app];
+ return QString::null;
+}
+
+MyMoneyOfxConnector::MyMoneyOfxConnector(const MyMoneyAccount& _account):
+ m_account(_account)
+{
+ m_fiSettings = m_account.onlineBankingSettings();
+}
+
+QString MyMoneyOfxConnector::iban(void) const { return m_fiSettings.value("bankid"); }
+QString MyMoneyOfxConnector::fiorg(void) const { return m_fiSettings.value("org"); }
+QString MyMoneyOfxConnector::fiid(void) const { return m_fiSettings.value("fid"); }
+QString MyMoneyOfxConnector::username(void) const { return m_fiSettings.value("username"); }
+QString MyMoneyOfxConnector::password(void) const { return m_fiSettings.value("password"); }
+QString MyMoneyOfxConnector::accountnum(void) const { return m_fiSettings.value("accountid"); }
+QString MyMoneyOfxConnector::url(void) const { return m_fiSettings.value("url"); }
+
+QDate MyMoneyOfxConnector::statementStartDate(void) const {
+ if ((m_fiSettings.value("kmmofx-todayMinus").toInt() != 0) && !m_fiSettings.value("kmmofx-numRequestDays").isEmpty())
+ {
+ return QDate::currentDate().addDays(-m_fiSettings.value("kmmofx-numRequestDays").toInt());
+ }
+ else if ((m_fiSettings.value("kmmofx-lastUpdate").toInt() != 0) && !m_account.value("lastImportedTransactionDate").isEmpty())
+ {
+ return QDate::fromString(m_account.value("lastImportedTransactionDate"), Qt::ISODate);
+ }
+ else if ((m_fiSettings.value("kmmofx-pickDate").toInt() != 0) && !m_fiSettings.value("kmmofx-specificDate").isEmpty())
+ {
+ return QDate::fromString(m_fiSettings.value("kmmofx-specificDate"));
+ }
+ return QDate::currentDate().addMonths(-2);
+}
+
+#if LIBOFX_IS_VERSION(0,9,0)
+OfxAccountData::AccountType MyMoneyOfxConnector::accounttype(void) const
+{
+ OfxAccountData::AccountType result = OfxAccountData::OFX_CHECKING;
+
+ QString type = m_account.onlineBankingSettings()["type"];
+ if(type == "CHECKING")
+ result = OfxAccountData::OFX_CHECKING;
+ else if(type == "SAVINGS")
+ result = OfxAccountData::OFX_SAVINGS;
+ else if(type == "MONEY MARKET")
+ result = OfxAccountData::OFX_MONEYMRKT;
+ else if(type == "CREDIT LINE")
+ result = OfxAccountData::OFX_CREDITLINE;
+ else if(type == "CMA")
+ result = OfxAccountData::OFX_CMA;
+ else if(type == "CREDIT CARD")
+ result = OfxAccountData::OFX_CREDITCARD;
+ else if(type == "INVESTMENT")
+ result = OfxAccountData::OFX_INVESTMENT;
+ else {
+ switch( m_account.accountType()) {
+ case MyMoneyAccount::Investment:
+ result = OfxAccountData::OFX_INVESTMENT;
+ break;
+ case MyMoneyAccount::CreditCard:
+ result = OfxAccountData::OFX_CREDITCARD;
+ break;
+ case MyMoneyAccount::Savings:
+ result = OfxAccountData::OFX_SAVINGS;
+ break;
+ default:
+ break;
+ }
+ }
+
+ // This is a bit of a personalized hack. Sometimes we may want to override the
+ // ofx type for an account. For now, I will stash it in the notes!
+
+ QRegExp rexp("OFXTYPE:([A-Z]*)");
+ if ( rexp.search(m_account.description()) != -1 )
+ {
+ QString override = rexp.cap(1);
+ kdDebug(2) << "MyMoneyOfxConnector::accounttype() overriding to " << result << endl;
+
+ if ( override == "BANK" )
+ result = OfxAccountData::OFX_CHECKING;
+ else if ( override == "CC" )
+ result = OfxAccountData::OFX_CREDITCARD;
+ else if ( override == "INV" )
+ result = OfxAccountData::OFX_INVESTMENT;
+ else if ( override == "MONEYMARKET")
+ result = OfxAccountData::OFX_MONEYMRKT;
+ }
+
+ return result;
+}
+#else
+AccountType MyMoneyOfxConnector::accounttype(void) const
+{
+ AccountType result = OFX_BANK_ACCOUNT;
+
+ switch( m_account.accountType() )
+ {
+ case MyMoneyAccount::Investment:
+ result = OFX_INVEST_ACCOUNT;
+ break;
+ case MyMoneyAccount::CreditCard:
+ result = OFX_CREDITCARD_ACCOUNT;
+ break;
+ default:
+ break;
+ }
+
+ // This is a bit of a personalized hack. Sometimes we may want to override the
+ // ofx type for an account. For now, I will stash it in the notes!
+
+ QRegExp rexp("OFXTYPE:([A-Z]*)");
+ if ( rexp.search(m_account.description()) != -1 )
+ {
+ QString override = rexp.cap(1);
+ kdDebug(2) << "MyMoneyOfxConnector::accounttype() overriding to " << result << endl;
+
+ if ( override == "BANK" )
+ result = OFX_BANK_ACCOUNT;
+ else if ( override == "CC" )
+ result = OFX_CREDITCARD_ACCOUNT;
+ else if ( override == "INV" )
+ result = OFX_INVEST_ACCOUNT;
+#if 0 // money market is not supported by 0.8.x
+ else if ( override == "MONEYMARKET")
+ result = OFX_MONEYMRKT;
+#endif
+ }
+
+ return result;
+}
+#endif
+
+void MyMoneyOfxConnector::initRequest(OfxFiLogin* fi) const
+{
+ memset(fi,0,sizeof(OfxFiLogin));
+ strncpy(fi->fid, fiid().latin1(), OFX_FID_LENGTH-1);
+ strncpy(fi->org, fiorg().latin1(), OFX_ORG_LENGTH-1);
+ strncpy(fi->userid, username().latin1(), OFX_USERID_LENGTH-1);
+ strncpy(fi->userpass, password().latin1(), OFX_USERPASS_LENGTH-1);
+
+#if LIBOFX_IS_VERSION(0,9,0)
+ // If we don't know better, we pretend to be Quicken 2008
+ // http://ofxblog.wordpress.com/2007/06/06/ofx-appid-and-appver-for-intuit-products/
+ // http://ofxblog.wordpress.com/2007/06/06/ofx-appid-and-appver-for-microsoft-money/
+ QString appId = m_account.onlineBankingSettings().value("appId");
+ QRegExp exp("(.*):(.*)");
+ if(exp.search(appId) != -1) {
+ strncpy(fi->appid, exp.cap(1).latin1(), OFX_APPID_LENGTH-1);
+ strncpy(fi->appver, exp.cap(2).latin1(), OFX_APPVER_LENGTH-1);
+ } else {
+ strncpy(fi->appid, "QWIN", OFX_APPID_LENGTH-1);
+ strncpy(fi->appver, "1700", OFX_APPVER_LENGTH-1);
+ }
+
+ QString headerVersion = m_account.onlineBankingSettings().value("kmmofx-headerVersion");
+ if(!headerVersion.isEmpty()) {
+ strncpy(fi->header_version, headerVersion.latin1(), OFX_HEADERVERSION_LENGTH-1);
+ }
+#endif
+}
+
+const QByteArray MyMoneyOfxConnector::statementRequest(void) const
+{
+ OfxFiLogin fi;
+ initRequest(&fi);
+
+#if LIBOFX_IS_VERSION(0,9,0)
+ OfxAccountData account;
+ memset(&account,0,sizeof(OfxAccountData));
+
+ if(iban().latin1() != 0) {
+ strncpy(account.bank_id,iban().latin1(),OFX_BANKID_LENGTH-1);
+ strncpy(account.broker_id,iban().latin1(),OFX_BROKERID_LENGTH-1);
+ }
+ strncpy(account.account_number,accountnum().latin1(),OFX_ACCTID_LENGTH-1);
+ account.account_type = accounttype();
+#else
+ OfxAccountInfo account;
+ memset(&account,0,sizeof(OfxAccountInfo));
+
+ if(iban().latin1() != 0) {
+ strncpy(account.bankid,iban().latin1(),OFX_BANKID_LENGTH-1);
+ strncpy(account.brokerid,iban().latin1(),OFX_BROKERID_LENGTH-1);
+ }
+ strncpy(account.accountid,accountnum().latin1(),OFX_ACCOUNT_ID_LENGTH-1);
+ account.type = accounttype();
+#endif
+
+ char* szrequest = libofx_request_statement( &fi, &account, QDateTime(statementStartDate()).toTime_t() );
+ QString request = szrequest;
+ // remove the trailing zero
+ QByteArray result = request.utf8();
+ result.truncate(result.size()-1);
+ free(szrequest);
+
+ QString msg(result);
+ return result;
+}
+
+#if 0
+// this code is not used anymore. The logic is now
+// contained in KOnlineBankingSetupWizard::finishLoginPage(void)
+const QByteArray MyMoneyOfxConnector::accountInfoRequest(void) const
+{
+ OfxFiLogin fi;
+ initRequest(&fi);
+
+ char* szrequest = libofx_request_accountinfo( &fi );
+ QString request = szrequest;
+ // remove the trailing zero
+ QByteArray result = request.utf8();
+ result.truncate(result.size()-1);
+ free(szrequest);
+
+ return result;
+}
+#endif
+
+#if 0
+
+MyMoneyOfxConnector::Tag MyMoneyOfxConnector::message(const QString& _msgType, const QString& _trnType, const Tag& _request)
+{
+ return Tag(_msgType+"MSGSRQV1")
+ .subtag(Tag(_trnType+"TRNRQ")
+ .element("TRNUID",uuid())
+ .element("CLTCOOKIE","1")
+ .subtag(_request));
+}
+
+MyMoneyOfxConnector::Tag MyMoneyOfxConnector::investmentRequest(void) const
+{
+ QString dtnow_string = QDateTime::currentDateTime().toString(Qt::ISODate).remove(QRegExp("[^0-9]"));
+ QString dtstart_string = _dtstart.toString(Qt::ISODate).remove(QRegExp("[^0-9]"));
+
+ return message("INVSTMT","INVSTMT",Tag("INVSTMTRQ")
+ .subtag(Tag("INVACCTFROM").element("BROKERID", fiorg()).element("ACCTID", accountnum()))
+ .subtag(Tag("INCTRAN").element("DTSTART",dtstart_string).element("INCLUDE","Y"))
+ .element("INCOO","Y")
+ .subtag(Tag("INCPOS").element("DTASOF", dtnow_string).element("INCLUDE","Y"))
+ .element("INCBAL","Y"));
+}
+
+MyMoneyOfxConnector::Tag MyMoneyOfxConnector::bankStatementRequest(const QDate& _dtstart) const
+{
+ QString dtstart_string = _dtstart.toString(Qt::ISODate).remove(QRegExp("[^0-9]"));
+
+ return message("BANK","STMT",Tag("STMTRQ")
+ .subtag(Tag("BANKACCTFROM").element("BANKID", iban()).element("ACCTID", accountnum()).element("ACCTTYPE", "CHECKING"))
+ .subtag(Tag("INCTRAN").element("DTSTART",dtstart_string).element("INCLUDE","Y")));
+}
+
+MyMoneyOfxConnector::Tag MyMoneyOfxConnector::creditCardRequest(const QDate& _dtstart) const
+{
+ QString dtstart_string = _dtstart.toString(Qt::ISODate).remove(QRegExp("[^0-9]"));
+
+ return message("CREDITCARD","CCSTMT",Tag("CCSTMTRQ")
+ .subtag(Tag("CCACCTFROM").element("ACCTID",accountnum()))
+ .subtag(Tag("INCTRAN").element("DTSTART",dtstart_string).element("INCLUDE","Y")));
+}
+
+MyMoneyOfxConnector::Tag MyMoneyOfxConnector::signOn(void) const
+{
+ QString dtnow_string = QDateTime::currentDateTime().toString(Qt::ISODate).remove(QRegExp("[^0-9]"));
+
+ Tag fi("FI");
+ fi.element("ORG",fiorg());
+ if ( !fiid().isEmpty() )
+ fi.element("FID",fiid());
+
+ return Tag("SIGNONMSGSRQV1")
+ .subtag(Tag("SONRQ")
+ .element("DTCLIENT",dtnow_string)
+ .element("USERID",username())
+ .element("USERPASS",password())
+ .element("LANGUAGE","ENG")
+ .subtag(fi)
+ .element("APPID","QWIN")
+ .element("APPVER","1100"));
+}
+
+QString MyMoneyOfxConnector::header(void)
+{
+ return QString("OFXHEADER:100\r\n"
+ "DATA:OFXSGML\r\n"
+ "VERSION:102\r\n"
+ "SECURITY:NONE\r\n"
+ "ENCODING:USASCII\r\n"
+ "CHARSET:1252\r\n"
+ "COMPRESSION:NONE\r\n"
+ "OLDFILEUID:NONE\r\n"
+ "NEWFILEUID:%1\r\n"
+ "\r\n").arg(uuid());
+}
+
+QString MyMoneyOfxConnector::uuid(void)
+{
+ static int id = 1;
+ return QDateTime::currentDateTime().toString("yyyyMMdd-hhmmsszzz-") + QString::number(id++);
+}
+
+//
+// Methods to provide RESPONSES to OFX requests. This has no real use in
+// KMyMoney, but it's included for the purposes of unit testing. This way, I
+// can create a MyMoneyAccount, write it to an OFX file, import that OFX file,
+// and check that everything made it through the importer.
+//
+// It's also a far-off dream to write an OFX server using KMyMoney as a
+// backend. It really should not be that hard, and it would fill a void in
+// the open source software community.
+//
+
+const QByteArray MyMoneyOfxConnector::statementResponse(const QDate& _dtstart) const
+{
+ QString request;
+
+ if ( accounttype()=="CC" )
+ request = header() + Tag("OFX").subtag(signOnResponse()).subtag(creditCardStatementResponse(_dtstart));
+ else if ( accounttype()=="INV" )
+ request = header() + Tag("OFX").subtag(signOnResponse()).data(investmentStatementResponse(_dtstart));
+ else
+ request = header() + Tag("OFX").subtag(signOnResponse()).subtag(bankStatementResponse(_dtstart));
+
+ // remove the trailing zero
+ QByteArray result = request.utf8();
+ result.truncate(result.size()-1);
+
+ return result;
+}
+
+MyMoneyOfxConnector::Tag MyMoneyOfxConnector::signOnResponse(void) const
+{
+ QString dtnow_string = QDateTime::currentDateTime().toString(Qt::ISODate).remove(QRegExp("[^0-9]"));
+
+ Tag sonrs("SONRS");
+ sonrs
+ .subtag(Tag("STATUS")
+ .element("CODE","0")
+ .element("SEVERITY","INFO")
+ .element("MESSAGE","The operation succeeded.")
+ )
+ .element("DTSERVER",dtnow_string)
+ .element("LANGUAGE","ENG");
+
+ Tag fi("FI");
+ if ( !fiorg().isEmpty() )
+ fi.element("ORG",fiorg());
+ if ( !fiid().isEmpty() )
+ fi.element("FID",fiid());
+
+ if ( !fi.isEmpty() )
+ sonrs.subtag(fi);
+
+ return Tag("SIGNONMSGSRSV1").subtag(sonrs);
+}
+
+MyMoneyOfxConnector::Tag MyMoneyOfxConnector::messageResponse(const QString& _msgType, const QString& _trnType, const Tag& _response)
+{
+ return Tag(_msgType+"MSGSRSV1")
+ .subtag(Tag(_trnType+"TRNRS")
+ .element("TRNUID",uuid())
+ .subtag(Tag("STATUS").element("CODE","0").element("SEVERITY","INFO"))
+ .element("CLTCOOKIE","1")
+ .subtag(_response));
+}
+
+MyMoneyOfxConnector::Tag MyMoneyOfxConnector::bankStatementResponse(const QDate& _dtstart) const
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ QString dtstart_string = _dtstart.toString(Qt::ISODate).remove(QRegExp("[^0-9]"));
+ QString dtnow_string = QDateTime::currentDateTime().toString(Qt::ISODate).remove(QRegExp("[^0-9]"));
+
+ QString transactionlist;
+
+ MyMoneyTransactionFilter filter;
+ filter.setDateFilter(_dtstart,QDate::currentDate());
+ filter.addAccount(m_account.id());
+ QValueList<MyMoneyTransaction> transactions = file->transactionList(filter);
+ QValueList<MyMoneyTransaction>::const_iterator it_transaction = transactions.begin();
+ while ( it_transaction != transactions.end() )
+ {
+ transactionlist += transaction( *it_transaction );
+ ++it_transaction;
+ }
+
+ return messageResponse("BANK","STMT",Tag("STMTRS")
+ .element("CURDEF","USD")
+ .subtag(Tag("BANKACCTFROM").element("BANKID", iban()).element("ACCTID", accountnum()).element("ACCTTYPE", "CHECKING"))
+ .subtag(Tag("BANKTRANLIST").element("DTSTART",dtstart_string).element("DTEND",dtnow_string).data(transactionlist))
+ .subtag(Tag("LEDGERBAL").element("BALAMT",file->balance(m_account.id()).formatMoney(QString(),2)).element("DTASOF",dtnow_string )));
+}
+
+MyMoneyOfxConnector::Tag MyMoneyOfxConnector::creditCardStatementResponse(const QDate& _dtstart) const
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ QString dtstart_string = _dtstart.toString(Qt::ISODate).remove(QRegExp("[^0-9]"));
+ QString dtnow_string = QDateTime::currentDateTime().toString(Qt::ISODate).remove(QRegExp("[^0-9]"));
+
+ QString transactionlist;
+
+ MyMoneyTransactionFilter filter;
+ filter.setDateFilter(_dtstart,QDate::currentDate());
+ filter.addAccount(m_account.id());
+ QValueList<MyMoneyTransaction> transactions = file->transactionList(filter);
+ QValueList<MyMoneyTransaction>::const_iterator it_transaction = transactions.begin();
+ while ( it_transaction != transactions.end() )
+ {
+ transactionlist += transaction( *it_transaction );
+ ++it_transaction;
+ }
+
+ return messageResponse("CREDITCARD","CCSTMT",Tag("CCSTMTRS")
+ .element("CURDEF","USD")
+ .subtag(Tag("CCACCTFROM").element("ACCTID", accountnum()))
+ .subtag(Tag("BANKTRANLIST").element("DTSTART",dtstart_string).element("DTEND",dtnow_string).data(transactionlist))
+ .subtag(Tag("LEDGERBAL").element("BALAMT",file->balance(m_account.id()).formatMoney(QString(),2)).element("DTASOF",dtnow_string )));
+}
+
+QString MyMoneyOfxConnector::investmentStatementResponse(const QDate& _dtstart) const
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ QString dtstart_string = _dtstart.toString(Qt::ISODate).remove(QRegExp("[^0-9]"));
+ QString dtnow_string = QDateTime::currentDateTime().toString(Qt::ISODate).remove(QRegExp("[^0-9]"));
+
+ QString transactionlist;
+
+ MyMoneyTransactionFilter filter;
+ filter.setDateFilter(_dtstart,QDate::currentDate());
+ filter.addAccount(m_account.id());
+ filter.addAccount(m_account.accountList());
+ QValueList<MyMoneyTransaction> transactions = file->transactionList(filter);
+ QValueList<MyMoneyTransaction>::const_iterator it_transaction = transactions.begin();
+ while ( it_transaction != transactions.end() )
+ {
+ transactionlist += investmentTransaction( *it_transaction );
+ ++it_transaction;
+ }
+
+ Tag securitylist("SECLIST");
+ QCStringList accountids = m_account.accountList();
+ QCStringList::const_iterator it_accountid = accountids.begin();
+ while ( it_accountid != accountids.end() )
+ {
+ MyMoneySecurity equity = file->security(file->account(*it_accountid).currencyId());
+
+ securitylist.subtag(Tag("STOCKINFO")
+ .subtag(Tag("SECINFO")
+ .subtag(Tag("SECID")
+ .element("UNIQUEID",equity.id())
+ .element("UNIQUEIDTYPE","KMYMONEY"))
+ .element("SECNAME",equity.name())
+ .element("TICKER",equity.tradingSymbol())
+ .element("FIID",equity.id())));
+
+ ++it_accountid;
+ }
+
+ return messageResponse("INVSTMT","INVSTMT",Tag("INVSTMTRS")
+ .element("DTASOF", dtstart_string)
+ .element("CURDEF","USD")
+ .subtag(Tag("INVACCTFROM").element("BROKERID", fiorg()).element("ACCTID", accountnum()))
+ .subtag(Tag("INVTRANLIST").element("DTSTART",dtstart_string).element("DTEND",dtnow_string).data(transactionlist))
+ )
+ + Tag("SECLISTMSGSRSV1").subtag(securitylist);
+}
+
+MyMoneyOfxConnector::Tag MyMoneyOfxConnector::transaction(const MyMoneyTransaction& _t) const
+{
+ // This method creates a transaction tag using ONLY the elements that importer uses
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ //Use this version for bank/cc transactions
+ MyMoneySplit s = _t.splitByAccount( m_account.id(), true );
+
+ //TODO (Ace) Write "investmentTransaction()"...
+ //Use this version for inv transactions
+ //MyMoneySplit s = _t.splitByAccount( m_account.accountList(), true );
+
+ Tag result ("STMTTRN");
+
+ result
+ // This is a temporary hack. I don't use the trntype field in importing at all,
+ // but libofx requires it to be there in order to import the file.
+ .element("TRNTYPE","DEBIT")
+ .element("DTPOSTED",_t.postDate().toString(Qt::ISODate).remove(QRegExp("[^0-9]")))
+ .element("TRNAMT",s.value().formatMoney(QString(),2));
+
+ if ( ! _t.bankID().isEmpty() )
+ result.element("FITID",_t.bankID());
+ else
+ result.element("FITID",_t.id());
+
+ if ( ! s.number().isEmpty() )
+ result.element("CHECKNUM",s.number());
+
+ if ( ! s.payeeId().isEmpty() )
+ result.element("NAME",file->payee(s.payeeId()).name());
+
+ if ( ! _t.memo().isEmpty() )
+ result.element("MEMO",_t.memo());
+
+ return result;
+}
+
+MyMoneyOfxConnector::Tag MyMoneyOfxConnector::investmentTransaction(const MyMoneyTransaction& _t) const
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ //Use this version for inv transactions
+ MyMoneySplit s = _t.splitByAccount( m_account.accountList(), true );
+
+ QCString stockid = file->account(s.accountId()).currencyId();
+
+ Tag invtran("INVTRAN");
+ invtran.element("FITID",_t.id()).element("DTTRADE",_t.postDate().toString(Qt::ISODate).remove(QRegExp("[^0-9]")));
+ if ( !_t.memo().isEmpty() )
+ invtran.element("MEMO",_t.memo());
+
+ if ( s.action() == MyMoneySplit::ActionBuyShares )
+ {
+ if ( s.shares().isNegative() )
+ {
+ return Tag("SELLSTOCK")
+ .subtag(Tag("INVSELL")
+ .subtag(invtran)
+ .subtag(Tag("SECID").element("UNIQUEID",stockid).element("UNIQUEIDTYPE","KMYMONEY"))
+ .element("UNITS",QString(((s.shares())).formatMoney(QString(),2)).remove(QRegExp("[^0-9.\\-]")))
+ .element("UNITPRICE",QString((s.value()/s.shares()).formatMoney(QString(),2)).remove(QRegExp("[^0-9.]")))
+ .element("TOTAL",QString((-s.value()).formatMoney(QString(),2)).remove(QRegExp("[^0-9.\\-]")))
+ .element("SUBACCTSEC","CASH")
+ .element("SUBACCTFUND","CASH"))
+ .element("SELLTYPE","SELL");
+ }
+ else
+ {
+ return Tag("BUYSTOCK")
+ .subtag(Tag("INVBUY")
+ .subtag(invtran)
+ .subtag(Tag("SECID").element("UNIQUEID",stockid).element("UNIQUEIDTYPE","KMYMONEY"))
+ .element("UNITS",QString((s.shares()).formatMoney(QString(),2)).remove(QRegExp("[^0-9.\\-]")))
+ .element("UNITPRICE",QString((s.value()/s.shares()).formatMoney(QString(),2)).remove(QRegExp("[^0-9.]")))
+ .element("TOTAL",QString((-(s.value())).formatMoney(QString(),2)).remove(QRegExp("[^0-9.\\-]")))
+ .element("SUBACCTSEC","CASH")
+ .element("SUBACCTFUND","CASH"))
+ .element("BUYTYPE","BUY");
+ }
+ }
+ else if ( s.action() == MyMoneySplit::ActionReinvestDividend )
+ {
+ // Should the TOTAL tag really be negative for a REINVEST? That's very strange, but
+ // it's what they look like coming from my bank, and I can't find any information to refute it.
+
+ return Tag("REINVEST")
+ .subtag(invtran)
+ .subtag(Tag("SECID").element("UNIQUEID",stockid).element("UNIQUEIDTYPE","KMYMONEY"))
+ .element("INCOMETYPE","DIV")
+ .element("TOTAL",QString((-s.value()).formatMoney(QString(),2)).remove(QRegExp("[^0-9.\\-]")))
+ .element("SUBACCTSEC","CASH")
+ .element("UNITS",QString((s.shares()).formatMoney(QString(),2)).remove(QRegExp("[^0-9.\\-]")))
+ .element("UNITPRICE",QString((s.value()/s.shares()).formatMoney(QString(),2)).remove(QRegExp("[^0-9.]")));
+ }
+ else if ( s.action() == MyMoneySplit::ActionDividend )
+ {
+ // find the split with the category, which has the actual amount of the dividend
+ QValueList<MyMoneySplit> splits = _t.splits();
+ QValueList<MyMoneySplit>::const_iterator it_split = splits.begin();
+ bool found = false;
+ while( it_split != splits.end() )
+ {
+ QCString accid = (*it_split).accountId();
+ MyMoneyAccount acc = file->account(accid);
+ if ( acc.accountType() == MyMoneyAccount::Income || acc.accountType() == MyMoneyAccount::Expense )
+ {
+ found = true;
+ break;
+ }
+ ++it_split;
+ }
+
+ if ( found )
+ return Tag("INCOME")
+ .subtag(invtran)
+ .subtag(Tag("SECID").element("UNIQUEID",stockid).element("UNIQUEIDTYPE","KMYMONEY"))
+ .element("INCOMETYPE","DIV")
+ .element("TOTAL",QString((-(*it_split).value()).formatMoney(QString(),2)).remove(QRegExp("[^0-9\\.\\-]")))
+ .element("SUBACCTSEC","CASH")
+ .element("SUBACCTFUND","CASH");
+ else
+ return Tag("ERROR").element("DETAILS","Unable to determine the amount of this income transaction.");
+ }
+
+ //FIXME: Do something useful with these errors
+ return Tag("ERROR").element("DETAILS","This transaction contains an unsupported action type");
+}
+#endif
diff --git a/kmymoney2/plugins/ofximport/dialogs/mymoneyofxconnector.h b/kmymoney2/plugins/ofximport/dialogs/mymoneyofxconnector.h
new file mode 100644
index 0000000..1091b15
--- /dev/null
+++ b/kmymoney2/plugins/ofximport/dialogs/mymoneyofxconnector.h
@@ -0,0 +1,128 @@
+/***************************************************************************
+ mymoneyofxconnector.cpp
+ -------------------
+ begin : Sat Nov 13 2004
+ copyright : (C) 2002 by Ace Jones
+ email : acejones@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef MYMONEYOFXCONNECTOR_H
+#define MYMONEYOFXCONNECTOR_H
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+
+// ----------------------------------------------------------------------------
+// Library Includes
+
+#include <libofx/libofx.h>
+
+// if OFX has a major version number defined, we'll take it
+// if not, we assume 0.8.3. 0.8.3 was the last version w/o version number info
+#ifdef LIBOFX_MAJOR_VERSION
+ #define LIBOFX_VERSION KDE_MAKE_VERSION(LIBOFX_MAJOR_VERSION, LIBOFX_MINOR_VERSION, LIBOFX_MICRO_VERSION)
+#else
+ #define LIBOFX_VERSION KDE_MAKE_VERSION(0,8,3)
+#endif
+#define LIBOFX_IS_VERSION(a,b,c) (LIBOFX_VERSION >= KDE_MAKE_VERSION(a,b,c))
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+class QDate;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+class KComboBox;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneykeyvaluecontainer.h>
+
+class MyMoneyAccount;
+class MyMoneyInstitution;
+class MyMoneyTransaction;
+
+/**
+ * @author Thomas Baumgart
+ */
+class OfxAppVersion
+{
+public:
+ OfxAppVersion(KComboBox* combo, const QString& appId);
+ /**
+ * This method returns the currently selected application id
+ * as a colon separated value consisting of the application
+ * and version (eg. "QWIN:1700"). If current value is the
+ * default, an empty string is returned.
+ */
+ const QString& appId(void) const;
+
+private:
+ QMap<QString, QString> m_appMap;
+ KComboBox* m_combo;
+};
+
+/**
+ * @author Thomas Baumgart
+ */
+class OfxHeaderVersion
+{
+public:
+ OfxHeaderVersion(KComboBox* combo, const QString& headerVersion);
+ QString headerVersion(void) const;
+
+private:
+ KComboBox* m_combo;
+};
+
+/**
+@author ace jones
+*/
+class MyMoneyOfxConnector
+{
+public:
+ MyMoneyOfxConnector(const MyMoneyAccount& _account);
+ QString url(void) const;
+
+ /**
+ * Constructs the request for a statement. The first date
+ * for which transactions will be requested is determined
+ * by statementStartDate()
+ */
+ const QByteArray statementRequest(void) const;
+ const QByteArray statementResponse(const QDate& _dtstart) const;
+
+private:
+ void initRequest(OfxFiLogin* fi) const;
+ QDate statementStartDate(void) const;
+ QString iban(void) const;
+ QString fiorg(void) const;
+ QString fiid(void) const;
+ QString username(void) const;
+ QString password(void) const;
+ QString accountnum(void) const;
+#if LIBOFX_IS_VERSION(0,9,0)
+ OfxAccountData::AccountType accounttype(void) const;
+#else
+ AccountType accounttype(void) const;
+#endif
+
+private:
+ const MyMoneyAccount& m_account;
+ MyMoneyKeyValueContainer m_fiSettings;
+};
+
+#endif // OFXCONNECTOR_H
diff --git a/kmymoney2/plugins/ofximport/kmm_ofximport.desktop b/kmymoney2/plugins/ofximport/kmm_ofximport.desktop
new file mode 100644
index 0000000..32ff003
--- /dev/null
+++ b/kmymoney2/plugins/ofximport/kmm_ofximport.desktop
@@ -0,0 +1,12 @@
+[Desktop Entry]
+Name=KMyMoney OFX
+Comment=Add OFX importing to KMyMoney
+ServiceTypes=KMyMoneyPlugin
+Type=Service
+Icon=connect_creating
+X-KDE-Library=kmm_ofximport
+X-KDE-PluginInfo-Name=KMyMoney OFX
+X-KDE-PluginInfo-License=GPL
+X-KDE-PluginInfo-EnabledByDefault=true
+X-KDE-PluginInfo-Author=Ace Jones,Thomas Baumgart
+X-KDE-PluginInfo-Email=acejones@users.sourceforge.net,ipwizard@users.sourceforge.net
diff --git a/kmymoney2/plugins/ofximport/kmm_ofximport.rc b/kmymoney2/plugins/ofximport/kmm_ofximport.rc
new file mode 100644
index 0000000..7254470
--- /dev/null
+++ b/kmymoney2/plugins/ofximport/kmm_ofximport.rc
@@ -0,0 +1,10 @@
+<!DOCTYPE kpartgui>
+<kpartgui name="kmymoneyplugin-ofximporter" version="2">
+ <MenuBar>
+ <Menu name="file">
+ <Menu name="import" append="import_merge">
+ <Action name="file_import_ofx" />
+ </Menu>
+ </Menu>
+ </MenuBar>
+</kpartgui>
diff --git a/kmymoney2/plugins/ofximport/ofximporterplugin.cpp b/kmymoney2/plugins/ofximport/ofximporterplugin.cpp
new file mode 100644
index 0000000..21a6466
--- /dev/null
+++ b/kmymoney2/plugins/ofximport/ofximporterplugin.cpp
@@ -0,0 +1,688 @@
+/***************************************************************************
+ ofxiimporterplugin.cpp
+ -------------------
+ begin : Sat Jan 01 2005
+ copyright : (C) 2005 by Ace Jones
+ email : Ace Jones <acejones@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qradiobutton.h>
+#include <qspinbox.h>
+#include <qdatetimeedit.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kgenericfactory.h>
+#include <kdebug.h>
+#include <kfile.h>
+#include <kurl.h>
+#include <kaction.h>
+#include <kmessagebox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "ofximporterplugin.h"
+#include "konlinebankingstatus.h"
+#include "konlinebankingsetupwizard.h"
+#include "kofxdirectconnectdlg.h"
+
+K_EXPORT_COMPONENT_FACTORY( kmm_ofximport,
+ KGenericFactory<OfxImporterPlugin>( "kmm_ofximport" ) )
+
+OfxImporterPlugin::OfxImporterPlugin(QObject *parent, const char *name, const QStringList&) :
+ KMyMoneyPlugin::Plugin( parent, name ),
+ KMyMoneyPlugin::ImporterPlugin(),
+ m_valid( false )
+{
+ setInstance(KGenericFactory<OfxImporterPlugin>::instance());
+ setXMLFile("kmm_ofximport.rc");
+ createActions();
+}
+
+OfxImporterPlugin::~OfxImporterPlugin()
+{
+}
+
+void OfxImporterPlugin::createActions(void)
+{
+ new KAction(i18n("OFX..."), "", 0, this, SLOT(slotImportFile()), actionCollection(), "file_import_ofx");
+}
+
+void OfxImporterPlugin::slotImportFile(void)
+{
+ KURL url = importInterface()->selectFile(i18n("OFX import file selection"),
+ "",
+ "*.ofx *.qfx *.ofc|OFX files (*.ofx, *.qfx, *.ofc)\n*.*|All files (*.*)",
+ static_cast<KFile::Mode>(KFile::File | KFile::ExistingOnly));
+ if(url.isValid()) {
+ if ( isMyFormat(url.path()) ) {
+ slotImportFile(url.path());
+ } else {
+ KMessageBox::error( 0, i18n("Unable to import %1 using the OFX importer plugin. This file is not the correct format.").arg(url.prettyURL(0, KURL::StripFileProtocol)), i18n("Incorrect format"));
+ }
+
+ }
+}
+
+QString OfxImporterPlugin::formatName(void) const
+{
+ return "OFX";
+}
+
+QString OfxImporterPlugin::formatFilenameFilter(void) const
+{
+ return "*.ofx *.qfx *.ofc";
+}
+
+
+bool OfxImporterPlugin::isMyFormat( const QString& filename ) const
+{
+ // filename is considered an Ofx file if it contains
+ // the tag "<OFX>" or "<OFC>" in the first 20 lines
+ // which contain some data.
+ bool result = false;
+
+ QFile f( filename );
+ if ( f.open( IO_ReadOnly ) )
+ {
+ QTextStream ts( &f );
+
+ int lineCount = 20;
+ while ( !ts.atEnd() && !result && lineCount != 0)
+ {
+ // get a line of data and remove all unnecessary whitepace chars
+ QString line = ts.readLine().simplifyWhiteSpace();
+ if ( line.contains("<OFX>",false)
+ || line.contains("<OFC>",false) )
+ result = true;
+ // count only lines that contains some non white space chars
+ if(!line.isEmpty())
+ lineCount--;
+ }
+ f.close();
+ }
+
+ return result;
+}
+
+bool OfxImporterPlugin::import( const QString& filename )
+{
+ m_fatalerror = i18n("Unable to parse file");
+ m_valid = false;
+ m_errors.clear();
+ m_warnings.clear();
+ m_infos.clear();
+
+ m_statementlist.clear();
+ m_securitylist.clear();
+
+ QCString filename_deep( filename.utf8() );
+
+ LibofxContextPtr ctx = libofx_get_new_context();
+ Q_CHECK_PTR(ctx);
+
+ ofx_set_transaction_cb(ctx, ofxTransactionCallback, this);
+ ofx_set_statement_cb(ctx, ofxStatementCallback, this);
+ ofx_set_account_cb(ctx, ofxAccountCallback, this);
+ ofx_set_security_cb(ctx, ofxSecurityCallback, this);
+ ofx_set_status_cb(ctx, ofxStatusCallback, this);
+ libofx_proc_file(ctx, filename_deep, AUTODETECT);
+ libofx_free_context(ctx);
+
+ if ( m_valid )
+ {
+ m_fatalerror = QString();
+ m_valid = storeStatements(m_statementlist);
+ }
+ return m_valid;
+}
+
+QString OfxImporterPlugin::lastError(void) const
+{
+ if(m_errors.count() == 0)
+ return m_fatalerror;
+ return m_errors.join("<p>");
+}
+
+/* __________________________________________________________________________
+ * AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ *
+ * Static callbacks for LibOFX
+ *
+ * YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
+ */
+
+int OfxImporterPlugin::ofxTransactionCallback(struct OfxTransactionData data, void * pv)
+{
+// kdDebug(2) << __func__ << endl;
+
+ OfxImporterPlugin* pofx = reinterpret_cast<OfxImporterPlugin*>(pv);
+ MyMoneyStatement& s = pofx->back();
+
+ MyMoneyStatement::Transaction t;
+
+ if(data.date_posted_valid==true)
+ {
+ QDateTime dt;
+ dt.setTime_t(data.date_posted, Qt::UTC);
+ t.m_datePosted = dt.date();
+ }
+ else if(data.date_initiated_valid==true)
+ {
+ QDateTime dt;
+ dt.setTime_t(data.date_initiated, Qt::UTC);
+ t.m_datePosted = dt.date();
+ }
+
+ if(data.amount_valid==true)
+ {
+ t.m_amount = MyMoneyMoney(data.amount, 1000);
+ // if this is an investment statement, reverse the sign. not sure
+ // why this is needed, so I suppose it's a bit of a hack for the moment.
+ if (data.invtransactiontype_valid==true)
+ t.m_amount = -t.m_amount;
+ }
+
+ if(data.check_number_valid==true)
+ {
+ t.m_strNumber = data.check_number;
+ }
+
+ if(data.fi_id_valid==true)
+ {
+ t.m_strBankID = QString("ID ") + data.fi_id;
+ }
+ else if(data.reference_number_valid==true)
+ {
+ t.m_strBankID = QString("REF ") + data.reference_number;
+ }
+ // Decide whether to import NAME or PAYEEID if both are present in the download
+ if (pofx->m_preferName) {
+ if(data.name_valid==true)
+ {
+ t.m_strPayee = data.name;
+ }
+ else if(data.payee_id_valid==true)
+ {
+ t.m_strPayee = data.payee_id;
+ }
+ }
+ else {
+ if(data.payee_id_valid==true)
+ {
+ t.m_strPayee = data.payee_id;
+ }
+ else if(data.name_valid==true)
+ {
+ t.m_strPayee = data.name;
+ }
+ }
+ if(data.memo_valid==true){
+ t.m_strMemo = data.memo;
+ }
+
+ // If the payee or memo fields are blank, set them to
+ // the other one which is NOT blank. (acejones)
+ if ( t.m_strPayee.isEmpty() )
+ {
+ // But we only create a payee for non-investment transactions (ipwizard)
+ if ( ! t.m_strMemo.isEmpty() && data.invtransactiontype_valid == false)
+ t.m_strPayee = t.m_strMemo;
+ }
+ else
+ {
+ if ( t.m_strMemo.isEmpty() )
+ t.m_strMemo = t.m_strPayee;
+ }
+
+ if(data.security_data_valid==true)
+ {
+ struct OfxSecurityData* secdata = data.security_data_ptr;
+
+ if(secdata->ticker_valid==true){
+ t.m_strSymbol = secdata->ticker;
+ }
+
+ if(secdata->secname_valid==true){
+ t.m_strSecurity = secdata->secname;
+ }
+ }
+
+ t.m_shares = MyMoneyMoney();
+ if(data.units_valid==true)
+ {
+ t.m_shares = MyMoneyMoney(data.units, 100000).reduce();
+ }
+
+ t.m_price = MyMoneyMoney();
+ if(data.unitprice_valid == true)
+ {
+ t.m_price = MyMoneyMoney(data.unitprice, 100000).reduce();
+ }
+
+ t.m_fees = MyMoneyMoney();
+ if(data.fees_valid==true)
+ {
+ t.m_fees += MyMoneyMoney(data.fees, 1000).reduce();
+ }
+
+ if(data.commission_valid==true)
+ {
+ t.m_fees += MyMoneyMoney(data.commission, 1000).reduce();
+ }
+
+ bool unhandledtype = false;
+ QString type;
+
+ if(data.invtransactiontype_valid==true)
+ {
+ switch (data.invtransactiontype)
+ {
+ case OFX_BUYDEBT:
+ case OFX_BUYMF:
+ case OFX_BUYOPT:
+ case OFX_BUYOTHER:
+ case OFX_BUYSTOCK:
+ t.m_eAction = MyMoneyStatement::Transaction::eaBuy;
+ break;
+ case OFX_REINVEST:
+ t.m_eAction = MyMoneyStatement::Transaction::eaReinvestDividend;
+ break;
+ case OFX_SELLDEBT:
+ case OFX_SELLMF:
+ case OFX_SELLOPT:
+ case OFX_SELLOTHER:
+ case OFX_SELLSTOCK:
+ t.m_eAction = MyMoneyStatement::Transaction::eaSell;
+ break;
+ case OFX_INCOME:
+ t.m_eAction = MyMoneyStatement::Transaction::eaCashDividend;
+ // NOTE: With CashDividend, the amount of the dividend should
+ // be in data.amount. Since I've never seen an OFX file with
+ // cash dividends, this is an assumption on my part. (acejones)
+ break;
+
+ //
+ // These types are all not handled. We will generate a warning for them.
+ //
+ case OFX_CLOSUREOPT:
+ unhandledtype = true;
+ type = "CLOSUREOPT (Close a position for an option)";
+ break;
+ case OFX_INVEXPENSE:
+ unhandledtype = true;
+ type = "INVEXPENSE (Misc investment expense that is associated with a specific security)";
+ break;
+ case OFX_JRNLFUND:
+ unhandledtype = true;
+ type = "JRNLFUND (Journaling cash holdings between subaccounts within the same investment account)";
+ break;
+ case OFX_MARGININTEREST:
+ unhandledtype = true;
+ type = "MARGININTEREST (Margin interest expense)";
+ break;
+ case OFX_RETOFCAP:
+ unhandledtype = true;
+ type = "RETOFCAP (Return of capital)";
+ break;
+ case OFX_SPLIT:
+ unhandledtype = true;
+ type = "SPLIT (Stock or mutial fund split)";
+ break;
+ case OFX_TRANSFER:
+ unhandledtype = true;
+ type = "TRANSFER (Transfer holdings in and out of the investment account)";
+ break;
+ default:
+ unhandledtype = true;
+ type = QString("UNKNOWN %1").arg(data.invtransactiontype);
+ break;
+ }
+ }
+ else
+ t.m_eAction = MyMoneyStatement::Transaction::eaNone;
+
+ // In the case of investment transactions, the 'total' is supposed to the total amount
+ // of the transaction. units * unitprice +/- commission. Easy, right? Sadly, it seems
+ // some ofx creators do not follow this in all circumstances. Therefore, we have to double-
+ // check the total here and adjust it if it's wrong.
+
+#if 0
+ // Even more sadly, this logic is BROKEN. It consistently results in bogus total
+ // values, because of rounding errors in the price. A more through solution would
+ // be to test if the comission alone is causing a discrepency, and adjust in that case.
+
+ if(data.invtransactiontype_valid==true && data.unitprice_valid)
+ {
+ double proper_total = t.m_dShares * data.unitprice + t.m_moneyFees;
+ if ( proper_total != t.m_moneyAmount )
+ {
+ pofx->addWarning(QString("Transaction %1 has an incorrect total of %2. Using calculated total of %3 instead.").arg(t.m_strBankID).arg(t.m_moneyAmount).arg(proper_total));
+ t.m_moneyAmount = proper_total;
+ }
+ }
+#endif
+
+ if ( unhandledtype )
+ pofx->addWarning(QString("Transaction %1 has an unsupported type (%2).").arg(t.m_strBankID,type));
+ else
+ s.m_listTransactions += t;
+
+// kdDebug(2) << __func__ << "return 0 " << endl;
+
+ return 0;
+}
+
+int OfxImporterPlugin::ofxStatementCallback(struct OfxStatementData data, void* pv)
+{
+// kdDebug(2) << __func__ << endl;
+
+ OfxImporterPlugin* pofx = reinterpret_cast<OfxImporterPlugin*>(pv);
+ MyMoneyStatement& s = pofx->back();
+
+ pofx->setValid();
+
+ if(data.currency_valid==true)
+ {
+ s.m_strCurrency = data.currency;
+ }
+ if(data.account_id_valid==true)
+ {
+ s.m_strAccountNumber = data.account_id;
+ }
+
+ if(data.date_start_valid==true)
+ {
+ QDateTime dt;
+ dt.setTime_t(data.date_start, Qt::UTC);
+ s.m_dateBegin = dt.date();
+ }
+
+ if(data.date_end_valid==true)
+ {
+ QDateTime dt;
+ dt.setTime_t(data.date_end, Qt::UTC);
+ s.m_dateEnd = dt.date();
+ }
+
+ if(data.ledger_balance_valid==true)
+ {
+ s.m_closingBalance = MyMoneyMoney(data.ledger_balance);
+ }
+
+// kdDebug(2) << __func__ << " return 0" << endl;
+
+ return 0;
+}
+
+int OfxImporterPlugin::ofxAccountCallback(struct OfxAccountData data, void * pv)
+{
+// kdDebug(2) << __func__ << endl;
+
+ OfxImporterPlugin* pofx = reinterpret_cast<OfxImporterPlugin*>(pv);
+ pofx->addnew();
+ MyMoneyStatement& s = pofx->back();
+
+ // Having any account at all makes an ofx statement valid
+ pofx->m_valid = true;
+
+ if(data.account_id_valid==true)
+ {
+ s.m_strAccountName = data.account_name;
+ s.m_strAccountNumber = data.account_id;
+ }
+ if(data.bank_id_valid == true)
+ {
+ s.m_strRoutingNumber = data.bank_id;
+ }
+ if(data.broker_id_valid == true)
+ {
+ s.m_strRoutingNumber = data.broker_id;
+ }
+ if(data.currency_valid==true)
+ {
+ s.m_strCurrency = data.currency;
+ }
+
+ if(data.account_type_valid==true)
+ {
+ switch(data.account_type)
+ {
+ case OfxAccountData::OFX_CHECKING : s.m_eType = MyMoneyStatement::etCheckings;
+ break;
+ case OfxAccountData::OFX_SAVINGS : s.m_eType = MyMoneyStatement::etSavings;
+ break;
+ case OfxAccountData::OFX_MONEYMRKT : s.m_eType = MyMoneyStatement::etInvestment;
+ break;
+ case OfxAccountData::OFX_CREDITLINE : s.m_eType = MyMoneyStatement::etCreditCard;
+ break;
+ case OfxAccountData::OFX_CMA : s.m_eType = MyMoneyStatement::etCreditCard;
+ break;
+ case OfxAccountData::OFX_CREDITCARD : s.m_eType = MyMoneyStatement::etCreditCard;
+ break;
+ case OfxAccountData::OFX_INVESTMENT : s.m_eType = MyMoneyStatement::etInvestment;
+ break;
+ }
+ }
+
+ // ask KMyMoney for an account id
+ s.m_accountId = pofx->account("kmmofx-acc-ref", QString("%1-%2").arg(s.m_strRoutingNumber, s.m_strAccountNumber)).id();
+
+ // copy over the securities
+ s.m_listSecurities = pofx->m_securitylist;
+
+// kdDebug(2) << __func__ << " return 0" << endl;
+
+ return 0;
+}
+
+int OfxImporterPlugin::ofxSecurityCallback(struct OfxSecurityData data, void* pv)
+{
+ // kdDebug(2) << __func__ << endl;
+
+ OfxImporterPlugin* pofx = reinterpret_cast<OfxImporterPlugin*>(pv);
+ MyMoneyStatement::Security sec;
+
+ if(data.unique_id_valid==true){
+ sec.m_strId = data.unique_id;
+ }
+ if(data.secname_valid==true){
+ sec.m_strName = data.secname;
+ }
+ if(data.ticker_valid==true){
+ sec.m_strSymbol = data.ticker;
+ }
+
+ pofx->m_securitylist += sec;
+
+ return 0;
+}
+
+int OfxImporterPlugin::ofxStatusCallback(struct OfxStatusData data, void * pv)
+{
+// kdDebug(2) << __func__ << endl;
+
+ OfxImporterPlugin* pofx = reinterpret_cast<OfxImporterPlugin*>(pv);
+ QString message;
+
+ // if we got this far, we know we were able to parse the file.
+ // so if it fails after here it can only because there were no actual
+ // accounts in the file!
+ pofx->m_fatalerror = "No accounts found.";
+
+ if(data.ofx_element_name_valid==true)
+ message.prepend(QString("%1: ").arg(data.ofx_element_name));
+
+ if(data.code_valid==true)
+ message += QString("%1 (Code %2): %3").arg(data.name).arg(data.code).arg(data.description);
+
+ if(data.server_message_valid==true)
+ message += QString(" (%1)").arg(data.server_message);
+
+ if(data.severity_valid==true){
+ switch(data.severity){
+ case OfxStatusData::INFO:
+ pofx->addInfo( message );
+ break;
+ case OfxStatusData::ERROR:
+ pofx->addError( message );
+ break;
+ case OfxStatusData::WARN:
+ pofx->addWarning( message );
+ break;
+ default:
+ pofx->addWarning( message );
+ pofx->addWarning( "Previous message was an unknown type. 'WARNING' was assumed.");
+ break;
+ }
+ }
+
+// kdDebug(2) << __func__ << " return 0 " << endl;
+
+ return 0;
+}
+
+bool OfxImporterPlugin::importStatement(const MyMoneyStatement& s)
+{
+ qDebug("OfxImporterPlugin::importStatement start");
+ return statementInterface()->import(s);
+}
+
+const MyMoneyAccount& OfxImporterPlugin::account(const QString& key, const QString& value) const
+{
+ return statementInterface()->account(key, value);
+}
+
+void OfxImporterPlugin::protocols(QStringList& protocolList) const
+{
+ protocolList.clear();
+ protocolList << "OFX";
+}
+
+QWidget* OfxImporterPlugin::accountConfigTab(const MyMoneyAccount& acc, QString& name)
+{
+ name = i18n("Online settings");
+ m_statusDlg = new KOnlineBankingStatus(acc, 0, 0);
+ return m_statusDlg;
+}
+
+MyMoneyKeyValueContainer OfxImporterPlugin::onlineBankingSettings(const MyMoneyKeyValueContainer& current)
+{
+ MyMoneyKeyValueContainer kvp(current);
+ // keep the provider name in sync with the one found in kmm_ofximport.desktop
+ kvp["provider"] = "KMyMoney OFX";
+ if(m_statusDlg) {
+ kvp.deletePair("appId");
+ kvp.deletePair("kmmofx-headerVersion");
+ if(!m_statusDlg->appId().isEmpty())
+ kvp.setValue("appId", m_statusDlg->appId());
+ kvp.setValue("kmmofx-headerVersion", m_statusDlg->headerVersion());
+ kvp.setValue("kmmofx-numRequestDays", QString::number(m_statusDlg->m_numdaysSpin->value()));
+ kvp.setValue("kmmofx-todayMinus", QString::number(m_statusDlg->m_todayRB->isChecked()));
+ kvp.setValue("kmmofx-lastUpdate", QString::number(m_statusDlg->m_lastUpdateRB->isChecked()));
+ kvp.setValue("kmmofx-pickDate", QString::number(m_statusDlg->m_pickDateRB->isChecked()));
+ kvp.setValue("kmmofx-specificDate", m_statusDlg->m_specificDate->date().toString());
+ kvp.setValue("kmmofx-preferPayeeid", QString::number(m_statusDlg->m_payeeidRB->isChecked()));
+ kvp.setValue("kmmofx-preferName", QString::number(m_statusDlg->m_nameRB->isChecked()));
+ }
+ return kvp;
+}
+
+bool OfxImporterPlugin::mapAccount(const MyMoneyAccount& acc, MyMoneyKeyValueContainer& settings)
+{
+ Q_UNUSED(acc);
+
+ bool rc = false;
+ KOnlineBankingSetupWizard wiz(0, "onlinebankingsetup");
+ if(wiz.isInit()) {
+ if(wiz.exec() == QDialog::Accepted) {
+ rc = wiz.chosenSettings( settings );
+ }
+ }
+
+ return rc;
+}
+
+bool OfxImporterPlugin::updateAccount(const MyMoneyAccount& acc, bool moreAccounts)
+{
+ Q_UNUSED(moreAccounts);
+
+ try {
+ if(!acc.id().isEmpty()) {
+ // Save the value of preferName to be used by ofxTransactionCallback
+ m_preferName = acc.onlineBankingSettings().value("kmmofx-preferName").toInt() != 0;
+ KOfxDirectConnectDlg dlg(acc);
+
+ connect(&dlg, SIGNAL(statementReady(const QString&)),
+ this, SLOT(slotImportFile(const QString&)));
+
+ dlg.init();
+ dlg.exec();
+ }
+ } catch (MyMoneyException *e) {
+ KMessageBox::information(0 ,i18n("Error connecting to bank: %1").arg(e->what()));
+ delete e;
+ }
+
+ return false;
+}
+
+void OfxImporterPlugin::slotImportFile(const QString& url)
+{
+
+ if(!import(url)) {
+ KMessageBox::error( 0, QString("<qt>%1</qt>").arg(i18n("Unable to import %1 using the OFX importer plugin. The plugin returned the following error:<p>%2").arg(url, lastError())), i18n("Importing error"));
+ }
+}
+
+bool OfxImporterPlugin::storeStatements(QValueList<MyMoneyStatement>& statements)
+{
+ bool hasstatements = (statements.count() > 0);
+ bool ok = true;
+ bool abort = false;
+
+ // FIXME Deal with warnings/errors coming back from plugins
+ /*if ( ofx.errors().count() )
+ {
+ if ( KMessageBox::warningContinueCancelList(this,i18n("The following errors were returned from your bank"),ofx.errors(),i18n("OFX Errors")) == KMessageBox::Cancel )
+ abort = true;
+ }
+
+ if ( ofx.warnings().count() )
+ {
+ if ( KMessageBox::warningContinueCancelList(this,i18n("The following warnings were returned from your bank"),ofx.warnings(),i18n("OFX Warnings"),KStdGuiItem::cont(),"ofxwarnings") == KMessageBox::Cancel )
+ abort = true;
+ }*/
+
+ qDebug("OfxImporterPlugin::storeStatements() with %d statements called", static_cast<int>(statements.count()));
+ QValueList<MyMoneyStatement>::const_iterator it_s = statements.begin();
+ while ( it_s != statements.end() && !abort ) {
+ ok = ok && importStatement((*it_s));
+ ++it_s;
+ }
+
+ if ( hasstatements && !ok ) {
+ KMessageBox::error( 0, i18n("Importing process terminated unexpectedly."), i18n("Failed to import all statements."));
+ }
+
+ return ( !hasstatements || ok );
+}
+
+#include "ofximporterplugin.moc"
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/plugins/ofximport/ofximporterplugin.h b/kmymoney2/plugins/ofximport/ofximporterplugin.h
new file mode 100644
index 0000000..b665439
--- /dev/null
+++ b/kmymoney2/plugins/ofximport/ofximporterplugin.h
@@ -0,0 +1,145 @@
+/***************************************************************************
+ ofxiimporterplugin.h
+ -------------------
+ begin : Sat Jan 01 2005
+ copyright : (C) 2005 by Ace Jones
+ email : Ace Jones <acejones@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef OFXIMPORTERPLUGIN_H
+#define OFXIMPORTERPLUGIN_H
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstringlist.h>
+
+// ----------------------------------------------------------------------------
+// Library Includes
+
+#include <libofx/libofx.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../kmymoneyplugin.h"
+class KOnlineBankingStatus;
+
+/**
+@author Ace Jones
+*/
+class OfxImporterPlugin : public KMyMoneyPlugin::Plugin, public KMyMoneyPlugin::ImporterPlugin, public KMyMoneyPlugin::OnlinePlugin
+{
+Q_OBJECT
+public:
+ OfxImporterPlugin(QObject *parent = 0, const char *name = 0, const QStringList& = QStringList());
+
+ ~OfxImporterPlugin();
+
+ /**
+ * This method returns the english-language name of the format
+ * this plugin imports, e.g. "OFX"
+ *
+ * @return QString Name of the format
+ */
+ virtual QString formatName(void) const;
+
+ /**
+ * This method returns the filename filter suitable for passing to
+ * KFileDialog::setFilter(), e.g. "*.ofx *.qfx" which describes how
+ * files of this format are likely to be named in the file system
+ *
+ * @return QString Filename filter string
+ */
+ virtual QString formatFilenameFilter(void) const;
+
+ /**
+ * This method returns whether this plugin is able to import
+ * a particular file.
+ *
+ * @param filename Fully-qualified pathname to a file
+ *
+ * @return bool Whether the indicated file is importable by this plugin
+ */
+ virtual bool isMyFormat( const QString& filename ) const;
+
+ /**
+ * Import a file
+ *
+ * @param filename File to import
+ *
+ * @return bool Whether the import was successful.
+ */
+ virtual bool import( const QString& filename );
+
+ /**
+ * Returns the error result of the last import
+ *
+ * @return QString English-language name of the error encountered in the
+ * last import, or QString() if it was successful.
+ *
+ */
+ virtual QString lastError(void) const;
+
+ QWidget* accountConfigTab(const MyMoneyAccount& acc, QString& name);
+
+ MyMoneyKeyValueContainer onlineBankingSettings(const MyMoneyKeyValueContainer& current);
+
+ const MyMoneyAccount& account(const QString& key, const QString& value) const;
+
+ void protocols(QStringList& protocolList) const;
+
+ bool mapAccount(const MyMoneyAccount& acc, MyMoneyKeyValueContainer& settings);
+ bool updateAccount(const MyMoneyAccount& acc, bool moreAccounts);
+
+protected slots:
+ void slotImportFile(void);
+ void slotImportFile(const QString& url);
+
+protected:
+ void createActions(void);
+ void addnew(void) { m_statementlist.push_back(MyMoneyStatement()); }
+ MyMoneyStatement& back(void) { return m_statementlist.back(); }
+ bool isValid(void) const { return m_valid; }
+ void setValid(void) { m_valid = true; }
+ void addInfo(const QString& _msg ) { m_infos+=_msg; }
+ void addWarning(const QString& _msg ) { m_warnings+=_msg; }
+ void addError(const QString& _msg ) { m_errors+=_msg; }
+ const QStringList& infos(void) const { return m_infos; }
+ const QStringList& warnings(void) const { return m_warnings; }
+ const QStringList& errors(void) const { return m_errors; }
+ bool storeStatements(QValueList<MyMoneyStatement>& statements);
+ bool importStatement(const MyMoneyStatement& s);
+
+
+ static int ofxTransactionCallback( struct OfxTransactionData, void* );
+ static int ofxStatementCallback( struct OfxStatementData, void* );
+ static int ofxAccountCallback( struct OfxAccountData, void* );
+ static int ofxStatusCallback( struct OfxStatusData, void* );
+ static int ofxSecurityCallback( struct OfxSecurityData, void* );
+
+private:
+ bool m_valid;
+ bool m_preferName;
+ QValueList<MyMoneyStatement> m_statementlist;
+ QValueList<MyMoneyStatement::Security> m_securitylist;
+ QString m_fatalerror;
+ QStringList m_infos;
+ QStringList m_warnings;
+ QStringList m_errors;
+ KOnlineBankingStatus* m_statusDlg;
+};
+
+#endif
diff --git a/kmymoney2/plugins/ofximport/ofxpartner.cpp b/kmymoney2/plugins/ofximport/ofxpartner.cpp
new file mode 100644
index 0000000..d36fbb2
--- /dev/null
+++ b/kmymoney2/plugins/ofximport/ofxpartner.cpp
@@ -0,0 +1,429 @@
+/***************************************************************************
+ ofxpartner.cpp
+ ----------
+ begin : Fri Jan 23 2009
+ copyright : (C) 2009 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qdatetime.h>
+#include <qeventloop.h>
+#include <qfileinfo.h>
+#include <qvaluelist.h>
+#include <qapplication.h>
+#include <qdom.h>
+#include <qregexp.h>
+#include <qdir.h>
+#include <qtextstream.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+
+#include <kio/job.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "ofxpartner.h"
+
+namespace OfxPartner
+{
+bool post(const QString& request, const QMap<QString, QString>& attr, const KURL& url, const KURL& filename);
+bool get(const QString& request, const QMap<QString, QString>& attr, const KURL& url, const KURL& filename);
+
+const QString kBankFilename = "ofx-bank-index.xml";
+const QString kCcFilename = "ofx-cc-index.xml";
+const QString kInvFilename = "ofx-inv-index.xml";
+
+#define VER "9"
+
+static QString directory;
+
+void setDirectory(const QString& dir)
+{
+ directory = dir;
+}
+
+bool needReload(const QFileInfo& i)
+{
+ return ((!i.isReadable())
+ || (i.lastModified().addDays(7) < QDateTime::currentDateTime())
+ || (i.size() < 1024));
+}
+
+void ValidateIndexCache(void)
+{
+ // TODO (Ace) Check whether these files exist and are recent enough before getting them again
+
+ struct stat filestats;
+ KURL fname;
+
+ QMap<QString, QString> attr;
+ attr["content-type"] = "application/x-www-form-urlencoded";
+ attr["accept"] = "*/*";
+
+ fname = directory + kBankFilename;
+ QFileInfo i(fname.path());
+ if(needReload(i))
+ post("T=1&S=*&R=1&O=0&TEST=0", attr, KURL("http://moneycentral.msn.com/money/2005/mnynet/service/ols/filist.aspx?SKU=3&VER=" VER), fname);
+
+ fname = directory + kCcFilename;
+ i = QFileInfo(fname.path());
+ if(needReload(i))
+ post("T=2&S=*&R=1&O=0&TEST=0", attr, KURL("http://moneycentral.msn.com/money/2005/mnynet/service/ols/filist.aspx?SKU=3&VER=" VER) ,fname);
+
+ fname = directory + kInvFilename;
+ i = QFileInfo(fname.path());
+ if(needReload(i))
+ post("T=3&S=*&R=1&O=0&TEST=0", attr, KURL("http://moneycentral.msn.com/money/2005/mnynet/service/ols/filist.aspx?SKU=3&VER=" VER), fname);
+}
+
+static void ParseFile(QMap<QString, QString>& result, const QString& fileName, const QString& bankName)
+{
+ QFile f(fileName);
+ if(f.open(IO_ReadOnly)) {
+ QTextStream stream(&f);
+ stream.setEncoding(QTextStream::Unicode);
+ QString msg;
+ int errl, errc;
+ QDomDocument doc;
+ if(doc.setContent(stream.read(), &msg, &errl, &errc)) {
+ QDomNodeList olist = doc.elementsByTagName("prov");
+ for(int i = 0; i < olist.count(); ++i) {
+ QDomNode onode = olist.item(i);
+ if(onode.isElement()) {
+ bool collectGuid = false;
+ QDomElement elo = onode.toElement();
+ QDomNodeList ilist = onode.childNodes();
+ for(int j = 0; j < ilist.count(); ++j) {
+ QDomNode inode = ilist.item(j);
+ QDomElement el = inode.toElement();
+ if(el.tagName() == "name") {
+ if(bankName.isEmpty())
+ result[el.text()] = QString();
+ else if(el.text() == bankName) {
+ collectGuid = true;
+ }
+ }
+ if(el.tagName() == "guid" && collectGuid) {
+ result[el.text()] = QString();
+ }
+ }
+ }
+ }
+ }
+ f.close();
+ }
+}
+
+QValueList<QString> BankNames(void)
+{
+ QMap<QString, QString> result;
+
+ // Make sure the index files are up to date
+ ValidateIndexCache();
+
+ ParseFile(result, directory + kBankFilename, QString());
+ ParseFile(result, directory + kCcFilename, QString());
+ ParseFile(result, directory + kInvFilename, QString());
+
+ // Add Innovision
+ result["Innovision"] = QString();
+
+ return result.keys();
+}
+
+QValueList<QString> FipidForBank(const QString& bank)
+{
+ QMap<QString, QString> result;
+
+ ParseFile(result, directory + kBankFilename, bank);
+ ParseFile(result, directory + kCcFilename, bank);
+ ParseFile(result, directory + kInvFilename, bank);
+
+ // the fipid for Innovision is 1.
+ if ( bank == "Innovision" )
+ result["1"] = QString();
+
+ return result.keys();
+}
+
+QString extractNodeText(QDomElement& node, const QString& name)
+{
+ QString res;
+ QRegExp exp("([^/]+)/?([^/].*)?");
+ if(exp.search(name) != -1) {
+ QDomNodeList olist = node.elementsByTagName(exp.cap(1));
+ if(olist.count()) {
+ QDomNode onode = olist.item(0);
+ if(onode.isElement()) {
+ QDomElement elo = onode.toElement();
+ if(exp.cap(2).isEmpty()) {
+ res = elo.text();
+ } else {
+ res = extractNodeText(elo, exp.cap(2));
+ }
+ }
+ }
+ }
+ return res;
+}
+
+QString extractNodeText(QDomDocument& doc, const QString& name)
+{
+ QString res;
+ QRegExp exp("([^/]+)/?([^/].*)?");
+ if(exp.search(name) != -1) {
+ QDomNodeList olist = doc.elementsByTagName(exp.cap(1));
+ if(olist.count()) {
+ QDomNode onode = olist.item(0);
+ if(onode.isElement()) {
+ QDomElement elo = onode.toElement();
+ if(exp.cap(2).isEmpty()) {
+ res = elo.text();
+ } else {
+ res = extractNodeText(elo, exp.cap(2));
+ }
+ }
+ }
+ }
+ return res;
+}
+
+OfxFiServiceInfo ServiceInfo(const QString& fipid)
+{
+ OfxFiServiceInfo result;
+ memset(&result, 0, sizeof(OfxFiServiceInfo));
+
+ // Hard-coded values for Innovision test server
+ if ( fipid == "1" )
+ {
+ strncpy(result.fid,"00000",OFX_FID_LENGTH-1);
+ strncpy(result.org,"ReferenceFI",OFX_ORG_LENGTH-1);
+ strncpy(result.url,"http://ofx.innovision.com",OFX_URL_LENGTH-1);
+ result.accountlist = 1;
+ result.statements = 1;
+ result.billpay = 1;
+ result.investments = 1;
+
+ return result;
+ }
+
+ QMap<QString, QString> attr;
+ attr["content-type"] = "application/x-www-form-urlencoded";
+ attr["accept"] = "*/*";
+
+ KURL guidFile(QString("%1fipid-%2.xml").arg(directory).arg(fipid));
+
+ // Apparently at some point in time, for VER=6 msn returned an online URL
+ // to a static error page (http://moneycentral.msn.com/cust404.htm).
+ // Increasing to VER=9 solved the problem. This may happen again in the
+ // future.
+ QFileInfo i(guidFile.path());
+ if(!i.isReadable() || i.lastModified().addDays(7) < QDateTime::currentDateTime())
+ get("", attr, KURL(QString("http://moneycentral.msn.com/money/2005/mnynet/service/olsvcupd/OnlSvcBrandInfo.aspx?MSNGUID=&GUID=%1&SKU=3&VER=" VER).arg(fipid)), guidFile);
+
+ QFile f(guidFile.path());
+ if(f.open(IO_ReadOnly)) {
+ QTextStream stream(&f);
+ stream.setEncoding(QTextStream::Unicode);
+ QString msg;
+ int errl, errc;
+ QDomDocument doc;
+ if(doc.setContent(stream.read(), &msg, &errl, &errc)) {
+ QString fid = extractNodeText(doc, "ProviderSettings/FID");
+ QString org = extractNodeText(doc, "ProviderSettings/Org");
+ QString url = extractNodeText(doc, "ProviderSettings/ProviderURL");
+ strncpy(result.fid, fid.latin1(), OFX_FID_LENGTH-1);
+ strncpy(result.org, org.latin1(), OFX_ORG_LENGTH-1);
+ strncpy(result.url, url.latin1(), OFX_URL_LENGTH-1);
+ result.accountlist = (extractNodeText(doc, "ProviderSettings/AcctListAvail") == "1");
+ result.statements = (extractNodeText(doc, "BankingCapabilities/Bank") == "1");
+ result.billpay= (extractNodeText(doc, "BillPayCapabilities/Pay") == "1");
+ result.investments= (extractNodeText(doc, "InvestmentCapabilities/BrkStmt") == "1");
+ }
+ }
+
+ return result;
+}
+
+bool get(const QString& request, const QMap<QString, QString>& attr, const KURL& url, const KURL& filename)
+{
+ QByteArray req(0);
+ OfxHttpRequest job("GET", url, req, attr, filename, true);
+
+ return job.error() == QHttp::NoError;
+}
+
+bool post(const QString& request, const QMap<QString, QString>& attr, const KURL& url, const KURL& filename)
+{
+ QByteArray req;
+ req.fill(0, request.length()+1);
+ req.duplicate(request.ascii(), request.length());
+
+ OfxHttpRequest job("POST", url, req, attr, filename, true);
+ return job.error() == QHttp::NoError;
+}
+
+} // namespace OfxPartner
+
+class OfxHttpsRequest::Private
+{
+public:
+ QFile m_fpTrace;
+};
+
+OfxHttpsRequest::OfxHttpsRequest(const QString& type, const KURL &url, const QByteArray &postData, const QMap<QString, QString>& metaData, const KURL& dst, bool showProgressInfo) :
+ d(new Private),
+ m_dst(dst)
+{
+ QDir homeDir(QDir::home());
+ if(homeDir.exists("ofxlog.txt")) {
+ d->m_fpTrace.setName(QString("%1/ofxlog.txt").arg(QDir::homeDirPath()));
+ d->m_fpTrace.open(IO_WriteOnly | IO_Append);
+ }
+
+ m_job = KIO::http_post(url, postData, showProgressInfo);
+ m_job->addMetaData("content-type", "Content-type: application/x-ofx" );
+
+ if(d->m_fpTrace.isOpen()) {
+ QTextStream ts(&d->m_fpTrace);
+ ts << "url: " << url.prettyURL() << "\n";
+ ts << "request:\n" << QString(postData) << "\n" << "response:\n";
+ }
+
+ connect(m_job,SIGNAL(result(KIO::Job*)),this,SLOT(slotOfxFinished(KIO::Job*)));
+ connect(m_job,SIGNAL(data(KIO::Job*, const QByteArray&)),this,SLOT(slotOfxData(KIO::Job*,const QByteArray&)));
+ connect(m_job,SIGNAL(connected(KIO::Job*)),this,SLOT(slotOfxConnected(KIO::Job*)));
+
+ qApp->enter_loop();
+}
+
+OfxHttpsRequest::~OfxHttpsRequest()
+{
+ if(d->m_fpTrace.isOpen()) {
+ d->m_fpTrace.close();
+ }
+}
+
+void OfxHttpsRequest::slotOfxConnected(KIO::Job*)
+{
+ m_file.setName(m_dst.path());
+ m_file.open(IO_WriteOnly);
+}
+
+void OfxHttpsRequest::slotOfxData(KIO::Job*,const QByteArray& _ba)
+{
+ if(m_file.isOpen()) {
+ QTextStream ts(&m_file);
+ ts << QString(_ba);
+
+ if(d->m_fpTrace.isOpen()) {
+ d->m_fpTrace.writeBlock(_ba, _ba.size());
+ }
+
+
+ }
+}
+
+void OfxHttpsRequest::slotOfxFinished(KIO::Job* /* e */)
+{
+ if(m_file.isOpen()) {
+ m_file.close();
+ if(d->m_fpTrace.isOpen()) {
+ d->m_fpTrace.writeBlock("\nCompleted\n\n\n\n", 14);
+ }
+ }
+
+ int error = m_job->error();
+ if ( error ) {
+ m_job->showErrorDialog();
+ unlink(m_dst.path());
+
+ } else if ( m_job->isErrorPage() ) {
+ QString details;
+ QFile f( m_dst.path() );
+ if ( f.open( IO_ReadOnly ) ) {
+ QTextStream stream( &f );
+ QString line;
+ while ( !stream.atEnd() ) {
+ details += stream.readLine(); // line of text excluding '\n'
+ }
+ f.close();
+ }
+ KMessageBox::detailedSorry( 0, i18n("The HTTP request failed."), details, i18n("Failed") );
+ unlink(m_dst.path());
+ }
+
+ qApp->exit_loop();
+}
+
+
+
+OfxHttpRequest::OfxHttpRequest(const QString& type, const KURL &url, const QByteArray &postData, const QMap<QString, QString>& metaData, const KURL& dst, bool showProgressInfo)
+{
+ QFile f(dst.path());
+ m_error = QHttp::NoError;
+ QString errorMsg;
+ if(f.open(IO_WriteOnly)) {
+ m_job = new QHttp(url.host());
+ QHttpRequestHeader header(type, url.encodedPathAndQuery());
+ header.setValue("Host", url.host());
+ QMap<QString, QString>::const_iterator it;
+ for(it = metaData.begin(); it != metaData.end(); ++it) {
+ header.setValue(it.key(), *it);
+ }
+
+ m_job->request(header, postData, &f);
+
+ connect(m_job, SIGNAL(requestFinished(int, bool)),
+ this, SLOT(slotOfxFinished(int, bool)));
+
+ qApp->enter_loop();
+
+ if(m_error != QHttp::NoError)
+ errorMsg = m_job->errorString();
+
+ delete m_job;
+ } else {
+ m_error = QHttp::Aborted;
+ errorMsg = i18n("Cannot open file %1 for writing").arg(dst.path());
+ }
+
+ if(m_error != QHttp::NoError) {
+ KMessageBox::error(0, errorMsg, i18n("OFX setup error"));
+ unlink(dst.path());
+ }
+}
+
+void OfxHttpRequest::slotOfxFinished(int, bool rc)
+{
+ if(rc) {
+ m_error = m_job->error();
+ }
+ qApp->exit_loop();
+}
+
+#include "ofxpartner.moc"
+
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/plugins/ofximport/ofxpartner.h b/kmymoney2/plugins/ofximport/ofxpartner.h
new file mode 100644
index 0000000..e624282
--- /dev/null
+++ b/kmymoney2/plugins/ofximport/ofxpartner.h
@@ -0,0 +1,102 @@
+/***************************************************************************
+ ofxpartner.h
+ ----------
+ begin : Fri Jan 23 2009
+ copyright : (C) 2009 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef OFXPARTNER_H
+#define OFXPARTNER_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+
+#include <qobject.h>
+#include <qhttp.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kurl.h>
+namespace KIO
+{
+ class Job;
+ class TransferJob;
+}
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <libofx/libofx.h>
+
+namespace OfxPartner
+{
+ /**
+ * setup the directory where the files will be stored.
+ * @a dir must end with a '/' and must exist. Call this
+ * before any other of the functions of OfxPartner. The
+ * default will be to store the files in the current
+ * directory.
+ */
+ void setDirectory(const QString& dir);
+
+ void ValidateIndexCache(void);
+ OfxFiServiceInfo ServiceInfo(const QString& fipid);
+ QValueList<QString> BankNames(void);
+ QValueList<QString> FipidForBank(const QString& bank);
+
+}
+
+class OfxHttpRequest : public QObject
+{
+ Q_OBJECT
+public:
+ OfxHttpRequest(const QString& method, const KURL &url, const QByteArray &postData, const QMap<QString, QString>& metaData, const KURL& dst, bool showProgressInfo=true);
+ virtual ~OfxHttpRequest() {}
+
+ QHttp::Error error(void) const { return m_error; }
+
+protected slots:
+ void slotOfxFinished(int, bool);
+
+private:
+ QHttp* m_job;
+ KURL m_dst;
+ QHttp::Error m_error;
+
+};
+
+class OfxHttpsRequest : public QObject
+{
+Q_OBJECT
+public:
+ OfxHttpsRequest(const QString& method, const KURL &url, const QByteArray &postData, const QMap<QString, QString>& metaData, const KURL& dst, bool showProgressInfo=true);
+ virtual ~OfxHttpsRequest();
+
+ QHttp::Error error(void) const { return m_error; }
+
+protected slots:
+ void slotOfxFinished(KIO::Job*);
+ void slotOfxData(KIO::Job*,const QByteArray&);
+ void slotOfxConnected(KIO::Job*);
+
+private:
+ class Private;
+ Private* d;
+ KURL m_dst;
+ QFile m_file;
+ QHttp::Error m_error;
+ KIO::TransferJob* m_job;
+};
+#endif // OFXPARTNER_H
diff --git a/kmymoney2/plugins/pluginloader.cpp b/kmymoney2/plugins/pluginloader.cpp
new file mode 100644
index 0000000..0201337
--- /dev/null
+++ b/kmymoney2/plugins/pluginloader.cpp
@@ -0,0 +1,163 @@
+/***************************************************************************
+ pluginloader.cpp
+ -------------------
+ begin : Thu Feb 12 2009
+ copyright : (C) 2009 Cristian Onet
+ email : onet.cristian@gmail.com
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstringlist.h>
+#include <qcheckbox.h>
+#include <qlayout.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <ktrader.h>
+#include <kparts/componentfactory.h>
+#include <kdebug.h>
+#include <kdialog.h>
+#include <kconfig.h>
+#include <kpluginselector.h>
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoneyplugin.h"
+#include "pluginloader.h"
+
+namespace KMyMoneyPlugin {
+
+//---------------------------------------------------------------------
+//
+// PluginLoader
+//
+//---------------------------------------------------------------------
+static PluginLoader* s_instance = 0;
+
+typedef QMap<QString, Plugin*> PluginsMap;
+
+struct PluginLoader::Private
+{
+ QObject* m_parent;
+ KPluginInfo::List m_pluginList;
+ KPluginSelector* m_pluginSelector;
+ PluginsMap m_loadedPlugins;
+};
+
+PluginLoader::PluginLoader(QObject* parent)
+{
+ Q_ASSERT( s_instance == 0 );
+ s_instance = this;
+
+ d = new Private;
+
+ d->m_parent = parent;
+
+ KTrader::OfferList offers = KTrader::self()->query("KMyMoneyPlugin");
+ d->m_pluginList = KPluginInfo::fromServices(offers);
+
+ d->m_pluginSelector = new KPluginSelector(NULL);
+ d->m_pluginSelector->setShowEmptyConfigPage(false);
+ d->m_pluginSelector->addPlugins(d->m_pluginList);
+ d->m_pluginSelector->load();
+
+ connect(d->m_pluginSelector, SIGNAL(changed(bool)), this, SLOT(changed()));
+ connect(d->m_pluginSelector, SIGNAL(configCommitted(const QCString &)), this, SLOT(changedConfigOfPlugin(const QCString &)));
+}
+
+PluginLoader::~PluginLoader()
+{
+ delete d;
+}
+
+void PluginLoader::loadPlugins()
+{
+ for( KPluginInfo::List::Iterator it = d->m_pluginList.begin(); it != d->m_pluginList.end(); ++it )
+ loadPlugin( *it );
+}
+
+void PluginLoader::loadPlugin(KPluginInfo* info)
+{
+ if (info->isPluginEnabled()) {
+ Plugin* plugin = getPluginFromInfo(info);
+
+ if (!plugin) {
+ // the plugin is enabled but it is not loaded
+ KService::Ptr service = info->service();
+ int error = 0;
+ Plugin* plugin = KParts::ComponentFactory
+ ::createInstanceFromService<Plugin>(service, d->m_parent, info->name().utf8(), QStringList(), &error);
+ if (plugin) {
+ kdDebug() << "KMyMoneyPlugin::PluginLoader: Loaded plugin " << plugin->name() << endl;
+ d->m_loadedPlugins.insert(info->name(), plugin);
+ emit PluginLoader::instance()->plug(info);
+ }
+ else {
+ kdWarning() << "KMyMoneyPlugin::PluginLoader:: createInstanceFromService returned 0 for "
+ << info->name()
+ << " with error number "
+ << error << endl;
+ if (error == KParts::ComponentFactory::ErrNoLibrary)
+ kdWarning() << "KLibLoader says: "
+ << KLibLoader::self()->lastErrorMessage() << endl;
+ }
+ }
+ }
+ else {
+ if (getPluginFromInfo(info) != NULL) {
+ // everybody interested should say goodbye to the plugin
+ emit PluginLoader::instance()->unplug(info);
+ d->m_loadedPlugins.erase(info->name());
+ }
+ }
+}
+
+void PluginLoader::changed()
+{
+ loadPlugins();
+}
+
+void PluginLoader::changedConfigOfPlugin(const QCString & name)
+{
+ PluginsMap::iterator itPlugin = d->m_loadedPlugins.find(QString(name));
+ if (itPlugin != d->m_loadedPlugins.end())
+ configChanged(*itPlugin);
+}
+
+Plugin* PluginLoader::getPluginFromInfo(KPluginInfo* info)
+{
+ PluginsMap::iterator itPlugin = d->m_loadedPlugins.find(info->name());
+ if (itPlugin != d->m_loadedPlugins.end())
+ return *itPlugin;
+ else
+ return NULL;
+}
+
+PluginLoader* PluginLoader::instance()
+{
+ Q_ASSERT( s_instance != 0);
+ return s_instance;
+}
+
+KPluginSelector* PluginLoader::pluginSelectorWidget()
+{
+ return d->m_pluginSelector;
+}
+
+} // namespace
+
+#include "pluginloader.moc"
diff --git a/kmymoney2/plugins/pluginloader.h b/kmymoney2/plugins/pluginloader.h
new file mode 100644
index 0000000..4d0c500
--- /dev/null
+++ b/kmymoney2/plugins/pluginloader.h
@@ -0,0 +1,76 @@
+/***************************************************************************
+ pluginloader.h
+ -------------------
+ begin : Thu Feb 12 2009
+ copyright : (C) 2009 Cristian Onet
+ email : onet.cristian@gmail.com
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef PLUGINLOADER_H
+#define PLUGINLOADER_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+#include <qscrollview.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+#include <kplugininfo.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/export.h>
+
+class KPluginSelector;
+
+namespace KMyMoneyPlugin
+{
+ class Plugin;
+
+ class KMYMONEY_EXPORT PluginLoader : public QObject
+ {
+ Q_OBJECT
+ public:
+ PluginLoader(QObject* parent);
+ virtual ~PluginLoader();
+ static PluginLoader* instance();
+
+ void loadPlugins();
+ Plugin* getPluginFromInfo(KPluginInfo*);
+ KPluginSelector* pluginSelectorWidget();
+
+ private:
+ void loadPlugin(KPluginInfo*);
+
+ signals:
+ void plug(KPluginInfo*);
+ void unplug(KPluginInfo*);
+ void configChanged(Plugin*); // consfiguration of the plugin has changed not the enabled/disabled state
+
+ private slots:
+ void changed();
+ void changedConfigOfPlugin( const QCString & );
+
+ private:
+ struct Private;
+ Private* d;
+ };
+}
+
+#endif /* PLUGINLOADER_H */
diff --git a/kmymoney2/plugins/statementinterface.cpp b/kmymoney2/plugins/statementinterface.cpp
new file mode 100644
index 0000000..753db2e
--- /dev/null
+++ b/kmymoney2/plugins/statementinterface.cpp
@@ -0,0 +1,34 @@
+/***************************************************************************
+ statementinterface.cpp
+ -------------------
+ begin : Wed Jan 5 2005
+ copyright : (C) 2005 Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "statementinterface.h"
+
+KMyMoneyPlugin::StatementInterface::StatementInterface(QObject* parent, const char* name) :
+ QObject(parent, name)
+{
+}
+
+#include "statementinterface.moc"
diff --git a/kmymoney2/plugins/statementinterface.h b/kmymoney2/plugins/statementinterface.h
new file mode 100644
index 0000000..a3a31d1
--- /dev/null
+++ b/kmymoney2/plugins/statementinterface.h
@@ -0,0 +1,72 @@
+/***************************************************************************
+ statementinterface.h
+ -------------------
+ begin : Wed Jan 5 2005
+ copyright : (C) 2005 Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef STATEMENTINTERFACE_H
+#define STATEMENTINTERFACE_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qobject.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneystatement.h>
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/export.h>
+
+namespace KMyMoneyPlugin {
+
+/**
+ * This abstract class represents the interface to import statements
+ * into the KMyMoney application
+ */
+class KMYMONEY_EXPORT StatementInterface : public QObject {
+ Q_OBJECT
+
+public:
+ StatementInterface(QObject* parent, const char* name = 0);
+ ~StatementInterface() {}
+
+ /**
+ * This method imports a MyMoneyStatement into the engine
+ */
+ virtual bool import(const MyMoneyStatement& s) = 0;
+
+ /**
+ * This method returns the account for a given @a key - @a value pair.
+ * If the account is not found in the list of accounts, MyMoneyAccount()
+ * is returned.
+ */
+ virtual const MyMoneyAccount& account(const QString& key, const QString& value) const = 0;
+
+ /**
+ */
+ virtual void setAccountOnlineParameters(const MyMoneyAccount& acc, const MyMoneyKeyValueContainer& kvps) const = 0;
+
+};
+
+}; // namespace
+#endif
diff --git a/kmymoney2/plugins/viewinterface.cpp b/kmymoney2/plugins/viewinterface.cpp
new file mode 100644
index 0000000..4db12f1
--- /dev/null
+++ b/kmymoney2/plugins/viewinterface.cpp
@@ -0,0 +1,34 @@
+/***************************************************************************
+ viewinterface.cpp
+ -------------------
+ begin : Wed Jan 5 2005
+ copyright : (C) 2005 Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "viewinterface.h"
+
+KMyMoneyPlugin::ViewInterface::ViewInterface(QObject* parent, const char* name) :
+ QObject(parent, name)
+{
+}
+
+#include "viewinterface.moc"
diff --git a/kmymoney2/plugins/viewinterface.h b/kmymoney2/plugins/viewinterface.h
new file mode 100644
index 0000000..d7c7424
--- /dev/null
+++ b/kmymoney2/plugins/viewinterface.h
@@ -0,0 +1,123 @@
+/***************************************************************************
+ viewinterface.h
+ -------------------
+ begin : Wed Jan 5 2005
+ copyright : (C) 2005 Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef VIEWINTERFACE_H
+#define VIEWINTERFACE_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qobject.h>
+#include <qstring.h>
+#include <qpixmap.h>
+class QFrame;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+class KPopupMenu;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneyinstitution.h>
+#include <kmymoney/export.h>
+class KMyMoneyViewBase;
+namespace KMyMoneyRegister {
+ class SelectedTransactions;
+};
+
+namespace KMyMoneyPlugin {
+
+/**
+ * This abstract class represents the ViewInterface to
+ * add new view pages to the JanusWidget of KMyMoney. It
+ * also gives access to the account context menu.
+ */
+class KMYMONEY_EXPORT ViewInterface : public QObject {
+ Q_OBJECT
+
+public:
+ ViewInterface(QObject* parent, const char* name = 0);
+ ~ViewInterface() {}
+
+ /**
+ * This method creates a new page in the application.
+ * See KJanusWidget::addPage() for details.
+ */
+ virtual KMyMoneyViewBase* addPage(const QString& item, const QString& icon) = 0;
+
+ /**
+ * This method adds a widget to the layout of the view
+ * created with addPage()
+ *
+ * @param view pointer to view widget
+ * @param w widget to be added to @p page
+ */
+ virtual void addWidget(KMyMoneyViewBase* view, QWidget* w) = 0;
+
+signals:
+ /**
+ * This signal is emitted when a new account has been selected by
+ * the GUI. If no account is selected or the selection is removed,
+ * @a account is identical to MyMoneyAccount(). This signal is used
+ * by plugins to get information about changes.
+ */
+ void accountSelected(const MyMoneyAccount& acc);
+
+ /**
+ * This signal is emitted when a transaction/list of transactions has been selected by
+ * the GUI. If no transaction is selected or the selection is removed,
+ * @p transactions is identical to an empty QValueList. This signal is used
+ * by plugins to get information about changes.
+ */
+ void transactionsSelected(const KMyMoneyRegister::SelectedTransactions& transactions);
+
+ /**
+ * This signal is emitted when a new institution has been selected by
+ * the GUI. If no institution is selected or the selection is removed,
+ * @a institution is identical to MyMoneyInstitution(). This signal is used
+ * by plugins to get information about changes.
+ */
+ void institutionSelected(const MyMoneyInstitution& institution);
+
+ /**
+ * This signal is emitted when an account has been successfully reconciled
+ * and all transactions are updated in the engine. It can be used by plugins
+ * to create reconciliation reports.
+ *
+ * @param account the account data
+ * @param date the reconciliation date as provided through the dialog
+ * @param startingBalance the starting balance as provided through the dialog
+ * @param endingBalance the ending balance as provided through the dialog
+ * @param transactionList reference to QValueList of QPair containing all
+ * transaction/split pairs processed by the reconciliation.
+ */
+ void accountReconciled(const MyMoneyAccount& account, const QDate& date, const MyMoneyMoney& startingBalance, const MyMoneyMoney& endingBalance, const QValueList<QPair<MyMoneyTransaction, MyMoneySplit> >& transactionList);
+
+
+ void viewStateChanged(bool);
+ void kmmFilePlugin(unsigned int);
+};
+
+}; // namespace
+#endif
diff --git a/kmymoney2/reports/Makefile.am b/kmymoney2/reports/Makefile.am
new file mode 100644
index 0000000..d6d050f
--- /dev/null
+++ b/kmymoney2/reports/Makefile.am
@@ -0,0 +1,16 @@
+KDE_OPTIONS = noautodist
+
+INCLUDES = $(all_includes) -I.. -I$(top_srcdir) -I. -I$(top_srcdir)/libkdchart
+
+noinst_LIBRARIES = libreports.a
+libreports_a_METASOURCES = AUTO
+
+libreports_a_SOURCES = pivotgrid.cpp pivottable.cpp listtable.cpp querytable.cpp objectinfotable.cpp reportaccount.cpp kreportchartview.cpp
+
+noinst_HEADERS = kreportchartview.h kreportsviewtest.h pivotgrid.h pivottable.h pivottabletest.h pivotgridtest.h listtable.h querytable.h querytabletest.h objectinfotable.h reportaccount.h reportdebug.h reportstestcommon.h kreportchartview.h reporttable.h
+
+if CPPUNIT
+check_LIBRARIES = libreportstest.a
+
+libreportstest_a_SOURCES = reportstestcommon.cpp pivottabletest.cpp pivotgridtest.cpp querytabletest.cpp
+endif
diff --git a/kmymoney2/reports/kreportchartview.cpp b/kmymoney2/reports/kreportchartview.cpp
new file mode 100644
index 0000000..21b08fa
--- /dev/null
+++ b/kmymoney2/reports/kreportchartview.cpp
@@ -0,0 +1,210 @@
+/***************************************************************************
+ kreportchartview.cpp
+ -------------------
+ begin : Sun Aug 14 2005
+ copyright : (C) 2004-2005 by Ace Jones
+ email : <ace.j@hotpop.com>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include "../../config.h"
+#endif
+#ifdef HAVE_KDCHART
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kreportchartview.h"
+#include <KDChartDataRegion.h>
+
+using namespace reports;
+
+KReportChartView::KReportChartView( QWidget* parent, const char* name ): KDChartWidget(parent,name)
+{
+ // ********************************************************************
+ // Set KMyMoney's Chart Parameter Defaults
+ // ********************************************************************
+ this->setPaletteBackgroundColor( Qt::white );
+
+ KDChartParams* _params = new KDChartParams();
+ _params->setChartType( KDChartParams::Line );
+ _params->setAxisLabelStringParams( KDChartAxisParams::AxisPosBottom,&m_abscissaNames,0);
+ _params->setDataSubduedColors();
+
+ /**
+ // use line marker, but only circles.
+ _params->setLineMarker( true );
+ _params->setLineMarkerSize( QSize(8,8) );
+ _params->setLineMarkerStyle( 0, KDChartParams::LineMarkerCircle );
+ _params->setLineMarkerStyle( 1, KDChartParams::LineMarkerCircle );
+ _params->setLineMarkerStyle( 2, KDChartParams::LineMarkerCircle );
+ **/
+
+ // initialize parameters
+ this->setParams(_params);
+
+ // initialize data
+ KDChartTableData* _data = new KDChartTableData();
+ this->setData(_data);
+
+ // ********************************************************************
+ // Some Examplatory Chart Table Data
+ // ********************************************************************
+
+ /**
+ // 1st series
+ this->data()->setCell( 0, 0, 17.5 );
+ this->data()->setCell( 0, 1, 125 ); // highest value
+ this->data()->setCell( 0, 2, 6.67 ); // lowest value
+ this->data()->setCell( 0, 3, 33.333 );
+ this->data()->setCell( 0, 4, 30 );
+ // 2nd series
+ this->data()->setCell( 1, 0, 40 );
+ this->data()->setCell( 1, 1, 40 );
+ this->data()->setCell( 1, 2, 45.5 );
+ this->data()->setCell( 1, 3, 45 );
+ this->data()->setCell( 1, 4, 35 );
+ // 3rd series
+ this->data()->setCell( 2, 0, 25 );
+ // missing value: setCell( 2, 1, 25 );
+ this->data()->setCell( 2, 2, 30 );
+ this->data()->setCell( 2, 3, 45 );
+ this->data()->setCell( 2, 4, 40 );
+ **/
+
+ // ********************************************************************
+ // Tooltip Setup
+ // ********************************************************************
+ label = new QLabel( this );
+ label->hide();
+ // mouse tracking on will force the mouseMoveEvent() method to be called from Qt
+ label->setMouseTracking( true );
+ label->setFrameStyle( QFrame::PopupPanel | QFrame::Raised );
+ label->setAlignment( AlignRight );
+ label->setAutoResize( true );
+}
+
+/**
+ * This function implements mouseMoveEvents
+ */
+void KReportChartView::mouseMoveEvent( QMouseEvent* event )
+{
+ QPoint translate, pos; // some movement helpers
+ uint dataset; // the current dataset (eg. category)
+ uint datasets; // the total number of datasets
+ double value; // the value of the region
+ double pivot_sum; // the sum over all categories in the current pivot point
+
+ // the data region in which the cursor was last time
+ static uint previous;
+
+ // if mouse tracking is disabled, don't show any tooltip
+ if ( !this->hasMouseTracking() )
+ return ;
+
+ // find the data region below the current mouse location
+ // ..by going through every data region and checking whether it
+ // contains the mouse pointer
+ KDChartDataRegion* current = 0;
+ QPtrListIterator < KDChartDataRegion > it( *(this->dataRegions()) );
+ while ( ( current = it.current() ) ) {
+ ++it;
+ if ( current->contains( event->pos() ) )
+ {
+ // we found the data region that contains the mouse
+ value = this->data()->cellVal(current->row, current->col).toDouble();
+
+ // get the dataset that the region corresponds to
+ if ( this->getAccountSeries() )
+ {
+ dataset = current->row;
+ datasets= this->data()->rows();
+ pivot_sum = value * 100.0 / this->data()->colSum(current->col);
+ }
+ else
+ {
+ dataset = current->col;
+ datasets= this->data()->cols();
+ pivot_sum = value * 100.0 / this->data()->rowSum(current->row);
+ }
+
+ // if we entered a new data region or the label was invisible
+ if ( !label->isVisible() || previous != dataset )
+ {
+ // if there is more than one dataset, show percentage
+ if(datasets > 1)
+ {
+ // set the tooltip text
+ label->setText(QString("<h2>%1</h2><strong>%2</strong><br>(%3\%)")
+ .arg(this->params()->legendText( dataset ))
+ .arg(value, 0, 'f', 2)
+ .arg(pivot_sum, 0, 'f', 2)
+ );
+ }
+ else // if there is only one dataset, don't show percentage
+ {
+ // set the tooltip text
+ label->setText(QString("<h2>%1</h2><strong>%2</strong>")
+ .arg(this->params()->legendText( dataset ))
+ .arg(value, 0, 'f', 2)
+ );
+ }
+
+ previous = dataset;
+ }
+
+ translate.setX( -10 - label->width());
+ translate.setY( 20);
+
+ // display the label near the cursor
+ pos = event->pos() + translate;
+
+ // but don't let the label leave the visible area
+ if( pos.x() < 0 )
+ pos.setX(0);
+ if( pos.y() < 0 )
+ pos.setY(0);
+ if( pos.x() + label->width() > this->width() )
+ pos.setX( this->width() - label->width() );
+ if( pos.y() + label->height() > this->height() )
+ pos.setY( this->height() - label->height() );
+
+ // now set the label position and show the label
+ label->move( pos );
+ label->show();
+
+ // In a more abstract class, we would emit a dateMouseMove event:
+ //emit this->dataMouseMove( event->pos(), current->row, current->col );
+
+ return ;
+ }
+ }
+ // if the cursor was not found in any data region, hide the label
+ label->hide();
+}
+
+void KReportChartView::setProperty(int row, int col, int id)
+{
+#ifdef HAVE_KDCHART_SETPROP
+ this->data()->setProp(row, col, id);
+#else
+ this->data()->cell(row, col).setPropertySet(id);
+#endif
+}
+
+#endif
diff --git a/kmymoney2/reports/kreportchartview.h b/kmymoney2/reports/kreportchartview.h
new file mode 100644
index 0000000..a1bf786
--- /dev/null
+++ b/kmymoney2/reports/kreportchartview.h
@@ -0,0 +1,95 @@
+/***************************************************************************
+ kreportchartview.h
+ -------------------
+ begin : Sat May 22 2004
+ copyright : (C) 2004-2005 by Ace Jones
+ email : <ace.j@hotpop.com>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KREPORTCHARTVIEW_H
+#define KREPORTCHARTVIEW_H
+
+#ifdef HAVE_CONFIG_H
+#include "../../config.h"
+#endif
+#ifdef HAVE_KDCHART
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+// Some STL headers in GCC4.3 contain operator new. Memory checker mangles these
+#ifdef _CHECK_MEMORY
+ #undef new
+#endif
+
+#include <qlabel.h>
+#include <KDChartWidget.h>
+#include <KDChartTable.h>
+#include <KDChartParams.h>
+#include <KDChartAxisParams.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#ifdef _CHECK_MEMORY
+ #include <kmymoney/mymoneyutils.h>
+#endif
+
+namespace reports {
+
+class KReportChartView: public KDChartWidget
+{
+public:
+ KReportChartView( QWidget* parent, const char* name );
+ ~KReportChartView() {}
+ static bool implemented(void) { return true; }
+ void setNewData( const KDChartTableData& newdata ) { this->setData(new KDChartTableData(newdata)); }
+ QStringList& abscissaNames(void) { return m_abscissaNames; }
+ void refreshLabels(void) { this->params()->setAxisLabelStringParams( KDChartAxisParams::AxisPosBottom,&m_abscissaNames,0); }
+ void setProperty(int row, int col, int id);
+// void setCircularLabels(void) { this->params()->setAxisLabelStringParams( KDChartAxisParams::AxisPosCircular,&m_abscissaNames,0); }
+
+ void setAccountSeries(bool accountSeries) {_accountSeries = accountSeries; }
+ bool getAccountSeries(void) {return _accountSeries; }
+
+protected:
+ virtual void mouseMoveEvent( QMouseEvent* event );
+
+private:
+ QStringList m_abscissaNames;
+ bool _accountSeries;
+
+ // label to display when hovering on a data region
+ QLabel *label;
+};
+
+} // end namespace reports
+
+#else
+
+namespace reports {
+
+class KReportChartView : public QWidget
+{
+public:
+ KReportChartView( QWidget* parent, const char* name ): QWidget(parent,name) {}
+ ~KReportChartView() {}
+ static bool implemented(void) { return false; }
+};
+
+} // end namespace reports
+
+#endif
+
+#endif // KREPORTCHARTVIEW_H
diff --git a/kmymoney2/reports/kreportsviewtest.h b/kmymoney2/reports/kreportsviewtest.h
new file mode 100644
index 0000000..70660c4
--- /dev/null
+++ b/kmymoney2/reports/kreportsviewtest.h
@@ -0,0 +1,91 @@
+/***************************************************************************
+ mymoneyaccounttest.h
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ Ace Jones <ace.jones@hotpop.com>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef __KREPORTSVIEWTEST_H__
+#define __KREPORTSVIEWTEST_H__
+
+#include <cppunit/extensions/HelperMacros.h>
+#include "../mymoney/mymoneyfile.h"
+#include "../mymoney/storage/mymoneyseqaccessmgr.h"
+
+class KReportsViewTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(KReportsViewTest);
+ CPPUNIT_TEST(testNetWorthSingle);
+ CPPUNIT_TEST(testNetWorthOfsetting);
+ CPPUNIT_TEST(testNetWorthOpeningPrior);
+ CPPUNIT_TEST(testNetWorthDateFilter);
+ CPPUNIT_TEST(testSpendingEmpty);
+ CPPUNIT_TEST(testSingleTransaction);
+ CPPUNIT_TEST(testSubAccount);
+ CPPUNIT_TEST(testFilterIEvsIE);
+ CPPUNIT_TEST(testFilterALvsAL);
+ CPPUNIT_TEST(testFilterALvsIE);
+ CPPUNIT_TEST(testFilterAllvsIE);
+ CPPUNIT_TEST(testFilterBasics);
+ CPPUNIT_TEST(testMultipleCurrencies);
+ CPPUNIT_TEST(testAdvancedFilter);
+ CPPUNIT_TEST(testColumnType);
+ CPPUNIT_TEST(testXMLWrite);
+ CPPUNIT_TEST(testQueryBasics);
+ CPPUNIT_TEST(testCashFlowAnalysis);
+ CPPUNIT_TEST(testAccountQuery);
+ CPPUNIT_TEST(testInvestment);
+#ifdef USE_OFX_DIRECTCONNECT
+ CPPUNIT_TEST(testOfxImport);
+#endif
+ CPPUNIT_TEST(testWebQuotes);
+ CPPUNIT_TEST(testDateFormat);
+ CPPUNIT_TEST(testHasReferenceTo);
+ CPPUNIT_TEST_SUITE_END();
+
+private:
+ MyMoneyAccount *m;
+
+ MyMoneySeqAccessMgr* storage;
+ MyMoneyFile* file;
+
+public:
+ KReportsViewTest();
+ void setUp ();
+ void tearDown ();
+ void testNetWorthSingle();
+ void testNetWorthOfsetting();
+ void testNetWorthOpeningPrior();
+ void testNetWorthDateFilter();
+ void testSpendingEmpty();
+ void testSingleTransaction();
+ void testSubAccount();
+ void testFilterIEvsIE();
+ void testFilterALvsAL();
+ void testFilterALvsIE();
+ void testFilterAllvsIE();
+ void testFilterBasics();
+ void testMultipleCurrencies();
+ void testAdvancedFilter();
+ void testColumnType();
+ void testXMLWrite();
+ void testQueryBasics();
+ void testCashFlowAnalysis();
+ void testAccountQuery();
+ void testOfxImport();
+ void testInvestment();
+ void testWebQuotes();
+ void testDateFormat();
+ void testHasReferenceTo();
+};
+
+#endif
diff --git a/kmymoney2/reports/listtable.cpp b/kmymoney2/reports/listtable.cpp
new file mode 100644
index 0000000..797b392
--- /dev/null
+++ b/kmymoney2/reports/listtable.cpp
@@ -0,0 +1,633 @@
+/***************************************************************************
+ listtable.cpp
+ -------------------
+ begin : Sat 28 jun 2008
+ copyright : (C) 2004-2005 by Ace Jones
+ 2008 by Alvaro Soliverez
+ email : acejones@users.sourceforge.net
+ asoliverez@gmail.com
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qvaluelist.h>
+#include <qfile.h>
+#include <qtextstream.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+// This is just needed for i18n(). Once I figure out how to handle i18n
+// without using this macro directly, I'll be freed of KDE dependency.
+
+#include <klocale.h>
+#include <kdebug.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include "../mymoney/mymoneyfile.h"
+#include "../mymoney/mymoneyreport.h"
+#include "../mymoney/mymoneyexception.h"
+#include "../kmymoneyutils.h"
+#include "../kmymoneyglobalsettings.h"
+#include "reportdebug.h"
+#include "listtable.h"
+
+namespace reports {
+
+ QStringList ListTable::TableRow::m_sortCriteria;
+
+ // ****************************************************************************
+ //
+ // Group Iterator
+ //
+ // ****************************************************************************
+
+ class GroupIterator
+ {
+ public:
+ GroupIterator ( const QString& _group, const QString& _subtotal, unsigned _depth ) : m_depth ( _depth ), m_groupField ( _group ), m_subtotalField ( _subtotal ) {}
+ GroupIterator ( void ) {}
+ void update ( const ListTable::TableRow& _row )
+ {
+ m_previousGroup = m_currentGroup;
+ m_currentGroup = _row[m_groupField];
+ if ( isSubtotal() )
+ {
+ m_previousSubtotal = m_currentSubtotal;
+ m_currentSubtotal = MyMoneyMoney();
+ }
+ m_currentSubtotal += _row[m_subtotalField];
+ }
+
+ bool isNewHeader ( void ) const { return ( m_currentGroup != m_previousGroup ); }
+ bool isSubtotal ( void ) const { return ( m_currentGroup != m_previousGroup ) && ( !m_previousGroup.isEmpty() ); }
+ const MyMoneyMoney& subtotal ( void ) const { return m_previousSubtotal; }
+ const MyMoneyMoney& currenttotal ( void ) const { return m_currentSubtotal; }
+ unsigned depth ( void ) const { return m_depth; }
+ const QString& name ( void ) const { return m_currentGroup; }
+ const QString& oldName ( void ) const { return m_previousGroup; }
+ const QString& groupField ( void ) const { return m_groupField; }
+ const QString& subtotalField ( void ) const { return m_subtotalField; }
+ // ***DV*** HACK make the currentGroup test different but look the same
+ void force ( void ) { m_currentGroup += " "; }
+ private:
+ MyMoneyMoney m_currentSubtotal;
+ MyMoneyMoney m_previousSubtotal;
+ unsigned m_depth;
+ QString m_currentGroup;
+ QString m_previousGroup;
+ QString m_groupField;
+ QString m_subtotalField;
+ };
+
+// ****************************************************************************
+//
+// ListTable implementation
+//
+// ****************************************************************************
+
+ bool ListTable::TableRow::operator< ( const TableRow& _compare ) const
+ {
+ bool result = false;
+
+ QStringList::const_iterator it_criterion = m_sortCriteria.begin();
+ while ( it_criterion != m_sortCriteria.end() )
+ {
+ if ( this->operator[] ( *it_criterion ) < _compare[ *it_criterion ] )
+ {
+ result = true;
+ break;
+ }
+ else if ( this->operator[] ( *it_criterion ) > _compare[ *it_criterion ] )
+ break;
+
+ ++it_criterion;
+ }
+ return result;
+ }
+
+// needed for KDE < 3.2 implementation of qHeapSort
+ bool ListTable::TableRow::operator<= ( const TableRow& _compare ) const
+ {
+ return ( ! ( _compare < *this ) );
+ }
+
+ bool ListTable::TableRow::operator== ( const TableRow& _compare ) const
+ {
+ return ( ! ( *this < _compare ) && ! ( _compare < *this ) );
+ }
+
+ bool ListTable::TableRow::operator> ( const TableRow& _compare ) const
+ {
+ return ( _compare < *this );
+ }
+
+ /**
+ * TODO
+ *
+ * - Collapse 2- & 3- groups when they are identical
+ * - Way more test cases (especially splits & transfers)
+ * - Option to collapse splits
+ * - Option to exclude transfers
+ *
+ */
+
+ ListTable::ListTable ( const MyMoneyReport& _report ) : m_config ( _report )
+ {
+ }
+
+ void ListTable::render ( QString& result, QString& csv ) const
+ {
+ MyMoneyMoney grandtotal;
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ result = "";
+ csv = "";
+ result += QString ( "<h2 class=\"report\">%1</h2>\n" ).arg ( m_config.name() );
+ csv += "\"Report: " + m_config.name() + "\"\n";
+ //actual dates of the report
+ result += QString("<div class=\"subtitle\">");
+ if(!m_config.fromDate().isNull()) {
+ result += i18n("Report date range", "%1 through %2").arg(KGlobal::locale()->formatDate(m_config.fromDate(), true)).arg(KGlobal::locale()->formatDate(m_config.toDate(), true));
+ result += QString("</div>\n");
+ result += QString("<div class=\"gap\">&nbsp;</div>\n");
+
+ csv += i18n("Report date range", "%1 through %2").arg(KGlobal::locale()->formatDate(m_config.fromDate(), true)).arg(KGlobal::locale()->formatDate(m_config.toDate(), true));
+ csv += QString("\n");
+ }
+
+
+ result += QString ( "<div class=\"subtitle\">" );
+ if ( m_config.isConvertCurrency() )
+ {
+ result += i18n ( "All currencies converted to %1" ).arg ( file->baseCurrency().name() );
+ csv += i18n ( "All currencies converted to %1\n" ).arg ( file->baseCurrency().name() );
+ }
+ else
+ {
+ result += i18n ( "All values shown in %1 unless otherwise noted" ).arg ( file->baseCurrency().name() );
+ csv += i18n ( "All values shown in %1 unless otherwise noted\n" ).arg ( file->baseCurrency().name() );
+ }
+ result += QString ( "</div>\n" );
+ result += QString ( "<div class=\"gap\">&nbsp;</div>\n" );
+
+ // retrieve the configuration parameters from the report definition.
+ // the things that we care about for query reports are:
+ // how to group the rows, what columns to display, and what field
+ // to subtotal on
+ QStringList groups = QStringList::split ( ",", m_group );
+ QStringList columns = QStringList::split ( ",", m_columns );
+ columns += m_subtotal;
+ QStringList postcolumns = QStringList::split ( ",", m_postcolumns );
+ columns += postcolumns;
+
+ //
+ // Table header
+ //
+ QMap<QString, QString> i18nHeaders;
+ i18nHeaders["postdate"] = i18n ( "Date" );
+ i18nHeaders["value"] = i18n ( "Amount" );
+ i18nHeaders["number"] = i18n ( "Num" );
+ i18nHeaders["payee"] = i18n ( "Payee" );
+ i18nHeaders["category"] = i18n ( "Category" );
+ i18nHeaders["account"] = i18n ( "Account" );
+ i18nHeaders["memo"] = i18n ( "Memo" );
+ i18nHeaders["topcategory"] = i18n ( "Top Category" );
+ i18nHeaders["categorytype"] = i18n ( "Category Type" );
+ i18nHeaders["month"] = i18n ( "Month" );
+ i18nHeaders["week"] = i18n ( "Week" );
+ i18nHeaders["reconcileflag"] = i18n ( "Reconciled" );
+ i18nHeaders["action"] = i18n ( "Action" );
+ i18nHeaders["shares"] = i18n ( "Shares" );
+ i18nHeaders["price"] = i18n ( "Price" );
+ i18nHeaders["latestprice"] = i18n ( "Price" );
+ i18nHeaders["netinvvalue"] = i18n ( "Net Value" );
+ i18nHeaders["buys"] = i18n ( "Buys" );
+ i18nHeaders["sells"] = i18n ( "Sells" );
+ i18nHeaders["reinvestincome"] = i18n ( "Dividends Reinvested" );
+ i18nHeaders["cashincome"] = i18n ( "Dividends Paid Out" );
+ i18nHeaders["startingbal"] = i18n ( "Starting Balance" );
+ i18nHeaders["endingbal"] = i18n ( "Ending Balance" );
+ i18nHeaders["return"] = i18n ( "Annualized Return" );
+ i18nHeaders["returninvestment"] = i18n ( "Return On Investment" );
+ i18nHeaders["fees"] = i18n ( "Fees" );
+ i18nHeaders["interest"] = i18n ( "Interest" );
+ i18nHeaders["payment"] = i18n ( "Payment" );
+ i18nHeaders["balance"] = i18n ( "Balance" );
+ i18nHeaders["type"] = i18n ( "Type" );
+ i18nHeaders["name"] = i18n ( "Name" );
+ i18nHeaders["nextduedate"] = i18n ( "Next Due Date" );
+ i18nHeaders["occurence"] = i18n ( "Occurence" );
+ i18nHeaders["paymenttype"] = i18n ( "Payment Method" );
+ i18nHeaders["institution"] = i18n ( "Institution" );
+ i18nHeaders["description"] = i18n ( "Description" );
+ i18nHeaders["openingdate"] = i18n ( "Opening Date" );
+ i18nHeaders["currencyname"] = i18n ( "Currency" );
+ i18nHeaders["balancewarning"] = i18n ( "Balance Early Warning" );
+ i18nHeaders["maxbalancelimit"] = i18n ( "Balance Max Limit" );
+ i18nHeaders["creditwarning"] = i18n ( "Credit Early Warning" );
+ i18nHeaders["maxcreditlimit"] = i18n ( "Credit Max Limit" );
+ i18nHeaders["tax"] = i18n ( "Tax" );
+ i18nHeaders["favorite"] = i18n ( "Preferred" );
+ i18nHeaders["loanamount"] = i18n ( "Loan Amount" );
+ i18nHeaders["interestrate"] = i18n ( "Interest Rate" );
+ i18nHeaders["nextinterestchange"] = i18n ( "Next Interest Change" );
+ i18nHeaders["periodicpayment"] = i18n ( "Periodic Payment" );
+ i18nHeaders["finalpayment"] = i18n ( "Final Payment" );
+ i18nHeaders["currentbalance"] = i18n ( "Current Balance" );
+
+ // the list of columns which represent money, so we can display them correctly
+ QStringList moneyColumns = QStringList::split ( ",", "value,shares,price,latestprice,netinvvalue,buys,sells,cashincome,reinvestincome,startingbal,fees,interest,payment,balance,balancewarning,maxbalancelimit,creditwarning,maxcreditlimit,loanamount,periodicpayment,finalpayment,currentbalance" );
+
+ // the list of columns which represent shares, which is like money except the
+ // transaction currency will not be displayed
+ QStringList sharesColumns = QStringList::split ( ",", "shares" );
+
+ // the list of columns which represent a percentage, so we can display them correctly
+ QStringList percentColumns = QStringList::split ( ",", "return,returninvestment,interestrate" );
+
+ // the list of columns which represent dates, so we can display them correctly
+ QStringList dateColumns = QStringList::split ( ",", "postdate,entrydate,nextduedate,openingdate,nextinterestchange" );
+
+ result += "<table class=\"report\">\n<thead><tr class=\"itemheader\">";
+
+ QStringList::const_iterator it_column = columns.begin();
+ while ( it_column != columns.end() )
+ {
+ QString i18nName = i18nHeaders[*it_column];
+ if ( i18nName.isEmpty() )
+ i18nName = *it_column;
+ result += "<th>" + i18nName + "</th>";
+ csv += i18nName + ",";
+ ++it_column;
+ }
+
+ result += "</tr></thead>\n";
+ csv = csv.left ( csv.length() - 1 );
+ csv += "\n";
+
+ //
+ // Set up group iterators
+ //
+ // There is one active iterator for each level of grouping.
+ // As we step through the rows
+ // we update the group iterators each time based on the row data. If
+ // the group iterator changes and it had a previous value, we print a
+ // subtotal. Whether or not it had a previous value, we print a group
+ // header. The group iterator keeps track of a subtotal also.
+
+ int depth = 1;
+ QValueList<GroupIterator> groupIteratorList;
+ QStringList::const_iterator it_grouplevel = groups.begin();
+ while ( it_grouplevel != groups.end() )
+ {
+ groupIteratorList += GroupIterator ( ( *it_grouplevel ), m_subtotal, depth++ );
+ ++it_grouplevel;
+ }
+
+ //
+ // Rows
+ //
+
+ bool row_odd = true;
+
+ // ***DV***
+ MyMoneyMoney startingBalance;
+ for ( QValueList<TableRow>::const_iterator it_row = m_rows.begin();
+ it_row != m_rows.end();
+ ++it_row ) {
+
+ // the standard fraction is the fraction of an non-cash account in the base currency
+ // this could be overridden using the "fraction" element of a row for each row.
+ // Currently (2008-02-21) this override is not used at all (ipwizard)
+ int fraction = file->baseCurrency().smallestAccountFraction();
+ if ( ( *it_row ).find ( "fraction" ) != ( *it_row ).end() )
+ fraction = ( *it_row ) ["fraction"].toInt();
+
+ //
+ // Process Groups
+ //
+
+ // ***DV*** HACK to force a subtotal and header, since this render doesn't
+ // always detect a group change for different accounts with the same name
+ // (as occurs with the same stock purchased from different investment accts)
+ if ( it_row != m_rows.begin() )
+ if ( ( ( * it_row ) ["rank"] == "-2" ) && ( ( * it_row ) ["id"] == "A" ) )
+ ( groupIteratorList.last() ).force();
+
+ // There's a subtle bug here. If an earlier group gets a new group,
+ // then we need to force all the downstream groups to get one too.
+
+ // Update the group iterators with the current row value
+ QValueList<GroupIterator>::iterator it_group = groupIteratorList.begin();
+ while ( it_group != groupIteratorList.end() )
+ {
+ ( *it_group ).update ( *it_row );
+ ++it_group;
+ }
+
+ // Do subtotals backwards
+ if ( m_config.isConvertCurrency() )
+ {
+ it_group = groupIteratorList.fromLast();
+ while ( it_group != groupIteratorList.end() )
+ {
+ if ( ( *it_group ).isSubtotal() )
+ {
+ if ( ( *it_group ).depth() == 1 )
+ grandtotal += ( *it_group ).subtotal();
+ grandtotal = grandtotal.convert(fraction);
+
+ QString subtotal_html = ( *it_group ).subtotal().formatMoney ( fraction );
+ QString subtotal_csv = ( *it_group ).subtotal().formatMoney ( fraction, false );
+
+ // ***DV*** HACK fix the side-effiect from .force() method above
+ QString oldName = QString ( ( *it_group ).oldName() ).stripWhiteSpace();
+
+ result +=
+ "<tr class=\"sectionfooter\">"
+ "<td class=\"left" + QString::number ( ( ( *it_group ).depth() - 1 ) ) + "\" "
+ "colspan=\"" +
+ QString::number ( columns.count() - 1 - postcolumns.count() ) + "\">" +
+ i18n ( "Total" ) + " " + oldName + "</td>"
+ "<td>" + subtotal_html + "</td></tr>\n";
+
+ csv +=
+ "\"" + i18n ( "Total" ) + " " + oldName + "\",\"" + subtotal_csv + "\"\n";
+ }
+ --it_group;
+ }
+ }
+
+ // And headers forwards
+ it_group = groupIteratorList.begin();
+ while ( it_group != groupIteratorList.end() )
+ {
+ if ( ( *it_group ).isNewHeader() )
+ {
+ row_odd = true;
+ result += "<tr class=\"sectionheader\">"
+ "<td class=\"left" + QString::number ( ( ( *it_group ).depth() - 1 ) ) + "\" "
+ "colspan=\"" + QString::number ( columns.count() ) + "\">" +
+ ( *it_group ).name() + "</td></tr>\n";
+ csv += "\"" + ( *it_group ).name() + "\"\n";
+ }
+ ++it_group;
+ }
+
+ //
+ // Columns
+ //
+
+ // skip the opening and closing balance row,
+ // if the balance column is not shown
+ if ( ( columns.contains ( "balance" ) == 0 ) && ( ( *it_row ) ["rank"] == "-2" ) )
+ continue;
+
+ bool need_label = true;
+
+ // ***DV***
+ if ( ( * it_row ) ["rank"] == "0" ) row_odd = ! row_odd;
+
+ if ( ( * it_row ) ["rank"] == "-2" )
+ result += QString ( "<tr class=\"item%1\">" ).arg ( ( * it_row ) ["id"] );
+ else
+ if ( ( * it_row ) ["rank"] == "1" )
+ result += QString ( "<tr class=\"%1\">" ).arg ( row_odd ? "item1" : "item0" );
+ else
+ result += QString ( "<tr class=\"%1\">" ).arg ( row_odd ? "row-odd " : "row-even" );
+
+ QStringList::const_iterator it_column = columns.begin();
+ while ( it_column != columns.end() )
+ {
+ QString data = ( *it_row ) [*it_column];
+
+ // ***DV***
+ if ( ( * it_row ) ["rank"] == "1" ) {
+ if ( * it_column == "value" )
+ data = ( * it_row ) ["split"];
+ else if ( *it_column == "postdate"
+ || *it_column == "number"
+ || *it_column == "payee"
+ || *it_column == "action"
+ || *it_column == "shares"
+ || *it_column == "price"
+ || *it_column == "nextduedate"
+ || *it_column == "balance"
+ || *it_column == "account"
+ || *it_column == "name" )
+ data = "";
+ }
+
+ // ***DV***
+ if ( ( * it_row ) ["rank"] == "-2" ) {
+ if ( *it_column == "balance" ) {
+ data = ( * it_row ) ["balance"];
+ if ( ( * it_row ) ["id"] == "A" ) // opening balance?
+ startingBalance = MyMoneyMoney ( data );
+ }
+
+ if ( need_label ) {
+ if ( ( * it_column == "payee" ) ||
+ ( * it_column == "category" ) ||
+ ( * it_column == "memo" ) ) {
+ if ( ( * it_row ) ["shares"] != "" ) {
+ data = ( ( * it_row ) ["id"] == "A" )
+ ? i18n ( "Initial Market Value" )
+ : i18n ( "Ending Market Value" );
+ } else {
+ data = ( ( * it_row ) ["id"] == "A" )
+ ? i18n ( "Opening Balance" )
+ : i18n ( "Closing Balance" );
+ }
+ need_label = false;
+ }
+ }
+ }
+
+ // The 'balance' column is calculated at render-time
+ // but not printed on split lines
+ else if ( *it_column == "balance" && ( * it_row ) ["rank"] == "0" )
+ {
+ // Take the balance off the deepest group iterator
+ data = ( groupIteratorList.back().currenttotal() + startingBalance ).toString();
+ }
+
+ // Figure out how to render the value in this column, depending on
+ // what its properties are.
+ //
+ // TODO: This and the i18n headings are handled
+ // as a set of parallel vectors. Would be much better to make a single
+ // vector of a properties class.
+ if ( sharesColumns.contains ( *it_column ) )
+ {
+ if ( data.isEmpty() ) {
+ result += QString ( "<td></td>" );
+ csv += "\"\",";
+ }
+ else {
+ result += QString ( "<td>%1</td>" ).arg ( MyMoneyMoney ( data ).formatMoney ( "", 3 ) );
+ csv += "\"" + MyMoneyMoney ( data ).formatMoney ( "", 3, false ) + "\",";
+ }
+ }
+ else if ( moneyColumns.contains ( *it_column ) )
+ {
+ if ( data.isEmpty() ) {
+ result += QString ( "<td%1></td>" )
+ .arg ( ( *it_column == "value" ) ? " class=\"value\"" : "" );
+ csv += "\"\",";
+ } else if ( MyMoneyMoney( data ) == MyMoneyMoney::autoCalc ) {
+ result += QString ( "<td%1>%2</td>" )
+ .arg ( ( *it_column == "value" ) ? " class=\"value\"" : "" )
+ .arg (i18n("Calculated"));
+ csv += "\""+ i18n("Calculated") +"\",";
+ } else if ( *it_column == "price" ) {
+ result += QString ( "<td>%2</td>" )
+ .arg ( MyMoneyMoney ( data ).formatMoney ( MyMoneyMoney::precToDenom(KMyMoneyGlobalSettings::pricePrecision()) ) );
+ csv += "\"" + ( *it_row ) ["currency"] + " " + MyMoneyMoney ( data ).formatMoney ( MyMoneyMoney::precToDenom(KMyMoneyGlobalSettings::pricePrecision()), false ) + "\",";
+ } else {
+ result += QString ( "<td%1>%2&nbsp;%3</td>" )
+ .arg ( ( *it_column == "value" ) ? " class=\"value\"" : "" )
+ .arg ( ( *it_row ) ["currency"] )
+ .arg ( MyMoneyMoney ( data ).formatMoney ( fraction ) );
+ csv += "\"" + ( *it_row ) ["currency"] + " " + MyMoneyMoney ( data ).formatMoney ( fraction, false ) + "\",";
+ }
+ }
+ else if ( percentColumns.contains ( *it_column ) )
+ {
+ data = ( MyMoneyMoney ( data ) * MyMoneyMoney ( 100, 1 ) ).formatMoney ( fraction );
+ result += QString ( "<td>%1%</td>" ).arg ( data );
+ csv += data + "%,";
+ }
+ else if ( dateColumns.contains ( *it_column ) )
+ {
+ // do this before we possibly change data
+ csv += "\"" + data + "\",";
+
+ // if we have a locale() then use its date formatter
+ if ( KGlobal::locale() && ! data.isEmpty() ) {
+ QDate qd = QDate::fromString ( data, Qt::ISODate );
+ data = KGlobal::locale()->formatDate ( qd, true );
+ }
+ result += QString ( "<td class=\"left\">%1</td>" ).arg ( data );
+ }
+ else
+ {
+ result += QString ( "<td class=\"left\">%1</td>" ).arg ( data );
+ csv += "\"" + data + "\",";
+ }
+ ++it_column;
+ }
+
+ result += "</tr>\n";
+ csv = csv.left ( csv.length() - 1 ); // remove final comma
+ csv += "\n";
+ }
+
+ //
+ // Final group totals
+ //
+
+ // Do subtotals backwards
+ if ( m_config.isConvertCurrency() )
+ {
+ int fraction = file->baseCurrency().smallestAccountFraction();
+ QValueList<GroupIterator>::iterator it_group = groupIteratorList.fromLast();
+ while ( it_group != groupIteratorList.end() )
+ {
+ ( *it_group ).update ( TableRow() );
+
+ if ( ( *it_group ).depth() == 1 ) {
+ grandtotal += ( *it_group ).subtotal();
+ grandtotal = grandtotal.convert(fraction);
+ }
+
+
+ QString subtotal_html = ( *it_group ).subtotal().formatMoney ( fraction );
+ QString subtotal_csv = ( *it_group ).subtotal().formatMoney ( fraction, false );
+
+ result += "<tr class=\"sectionfooter\">"
+ "<td class=\"left" + QString::number ( ( *it_group ).depth() - 1 ) + "\" "
+ "colspan=\"" + QString::number ( columns.count() - 1 - postcolumns.count() ) + "\">" +
+ i18n ( "Total" ) + " " + ( *it_group ).oldName() + "</td>"
+ "<td>" + subtotal_html + "</td></tr>\n";
+ csv += "\"" + i18n ( "Total" ) + " " + ( *it_group ).oldName() + "\",\"" + subtotal_csv + "\"\n";
+ --it_group;
+ }
+
+ //
+ // Grand total
+ //
+
+ QString grandtotal_html = grandtotal.formatMoney ( fraction );
+ QString grandtotal_csv = grandtotal.formatMoney ( fraction, false );
+
+ result += "<tr class=\"sectionfooter\">"
+ "<td class=\"left0\" "
+ "colspan=\"" + QString::number ( columns.count() - 1 - postcolumns.count() ) + "\">" +
+ i18n ( "Grand Total" ) + "</td>"
+ "<td>" + grandtotal_html + "</td></tr>\n";
+ csv += "\"" + i18n ( "Grand Total" ) + "\",\"" + grandtotal_csv + "\"\n";
+ }
+ result += "</table>\n";
+ }
+
+ QString ListTable::renderHTML ( void ) const
+ {
+ QString html, csv;
+ render ( html, csv );
+ return html;
+ }
+
+ QString ListTable::renderCSV ( void ) const
+ {
+ QString html, csv;
+ render ( html, csv );
+ return csv;
+ }
+
+ void ListTable::dump ( const QString& file, const QString& context ) const
+ {
+ QFile g ( file );
+ g.open ( IO_WriteOnly );
+
+ if ( ! context.isEmpty() )
+ QTextStream ( &g ) << context.arg ( renderHTML() );
+ else
+ QTextStream ( &g ) << renderHTML();
+ g.close();
+ }
+
+ void ListTable::includeInvestmentSubAccounts()
+ {
+ // if we're not in expert mode, we need to make sure
+ // that all stock accounts for the selected investment
+ // account are also selected
+ QStringList accountList;
+ if(m_config.accounts(accountList)) {
+ if(!KMyMoneyGlobalSettings::expertMode()) {
+ QStringList::const_iterator it_a, it_b;
+ for(it_a = accountList.begin(); it_a != accountList.end(); ++it_a) {
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(*it_a);
+ if(acc.accountType() == MyMoneyAccount::Investment) {
+ for(it_b = acc.accountList().begin(); it_b != acc.accountList().end(); ++it_b) {
+ if(!accountList.contains(*it_b)) {
+ m_config.addAccount(*it_b);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+}
diff --git a/kmymoney2/reports/listtable.h b/kmymoney2/reports/listtable.h
new file mode 100644
index 0000000..5ffa64d
--- /dev/null
+++ b/kmymoney2/reports/listtable.h
@@ -0,0 +1,121 @@
+/***************************************************************************
+ listtable.h
+ -------------------
+ begin : Sat 28 jun 2008
+ copyright : (C) 2004-2005 by Ace Jones
+ 2008 by Alvaro Soliverez
+ email : acejones@users.sourceforge.net
+ asoliverez@gmail.com
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef LISTTABLE_H
+#define LISTTABLE_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstringlist.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../mymoney/mymoneyreport.h"
+#include "reporttable.h"
+
+namespace reports {
+
+ class ReportAccount;
+
+ /**
+ * Calculates a query of information about the transaction database.
+ *
+ * This is a middle-layer class, between the implementing classes and the engine. The
+ * MyMoneyReport class holds only the CONFIGURATION parameters. This
+ * class has some common methods used by querytable and objectinfo classes
+ *
+ * @author Alvaro Soliverez
+ *
+ * @short
+ **/
+
+ class ListTable : public ReportTable
+ {
+ public:
+ ListTable ( const MyMoneyReport& );
+ QString renderHTML ( void ) const;
+ QString renderCSV ( void ) const;
+ void drawChart ( KReportChartView& ) const {}
+ void dump ( const QString& file, const QString& context = QString() ) const;
+ void init ( void );
+
+ public:
+ /**
+ * Contains a single row in the table.
+ *
+ * Each column is a key/value pair, both strings. This class is just
+ * a QMap with the added ability to specify which columns you'd like to
+ * use as a sort key when you qHeapSort a list of these TableRows
+ */
+ class TableRow: public QMap<QString, QString>
+ {
+ public:
+ bool operator< ( const TableRow& ) const;
+ bool operator<= ( const TableRow& ) const;
+ bool operator> ( const TableRow& ) const;
+ bool operator== ( const TableRow& ) const;
+
+ static void setSortCriteria ( const QString& _criteria ) { m_sortCriteria = QStringList::split ( ",", _criteria ); }
+ private:
+ static QStringList m_sortCriteria;
+ };
+
+ QValueList<TableRow> rows() {return m_rows;};
+
+ protected:
+ void render ( QString&, QString& ) const;
+
+ /**
+ * If not in expert mode, include all subaccounts for each selected
+ * investment account
+ */
+ void includeInvestmentSubAccounts(void);
+
+ QValueList<TableRow> m_rows;
+
+ QString m_group;
+ /**
+ * Comma-separated list of columns to place BEFORE the subtotal column
+ */
+ QString m_columns;
+ /**
+ * Name of the subtotal column
+ */
+ QString m_subtotal;
+ /**
+ * Comma-separated list of columns to place AFTER the subtotal column
+ */
+ QString m_postcolumns;
+ QString m_summarize;
+ QString m_propagate;
+
+ MyMoneyReport m_config;
+
+
+ };
+
+}
+
+#endif
+
diff --git a/kmymoney2/reports/objectinfotable.cpp b/kmymoney2/reports/objectinfotable.cpp
new file mode 100644
index 0000000..649f6c2
--- /dev/null
+++ b/kmymoney2/reports/objectinfotable.cpp
@@ -0,0 +1,368 @@
+/***************************************************************************
+ objectinfotable.cpp
+ -------------------
+ begin : Sat 28 jun 2008
+ copyright : (C) 2004-2005 by Ace Jones
+ 2008 by Alvaro Soliverez
+ email : acejones@users.sourceforge.net
+ asoliverez@gmail.com
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qvaluelist.h>
+#include <qfile.h>
+#include <qtextstream.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+// This is just needed for i18n(). Once I figure out how to handle i18n
+// without using this macro directly, I'll be freed of KDE dependency.
+
+#include <klocale.h>
+#include <kdebug.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include "../mymoney/mymoneyfile.h"
+#include "../mymoney/mymoneyreport.h"
+#include "../mymoney/mymoneyexception.h"
+#include "../kmymoneyutils.h"
+#include "reportaccount.h"
+#include "reportdebug.h"
+#include "objectinfotable.h"
+
+namespace reports {
+
+// ****************************************************************************
+//
+// ObjectInfoTable implementation
+//
+// ****************************************************************************
+
+/**
+ * TODO
+ *
+ * - Collapse 2- & 3- groups when they are identical
+ * - Way more test cases (especially splits & transfers)
+ * - Option to collapse splits
+ * - Option to exclude transfers
+ *
+ */
+
+ObjectInfoTable::ObjectInfoTable(const MyMoneyReport& _report): ListTable(_report)
+{
+ // seperated into its own method to allow debugging (setting breakpoints
+ // directly in ctors somehow does not work for me (ipwizard))
+ // TODO: remove the init() method and move the code back to the ctor
+ init();
+}
+
+void ObjectInfoTable::init ( void )
+{
+ switch ( m_config.rowType() )
+ {
+ case MyMoneyReport::eSchedule:
+ constructScheduleTable();
+ m_columns = "nextduedate,name";
+ break;
+ case MyMoneyReport::eAccountInfo:
+ constructAccountTable();
+ m_columns = "institution,type,name";
+ break;
+ case MyMoneyReport::eAccountLoanInfo:
+ constructAccountLoanTable();
+ m_columns = "institution,type,name";
+ break;
+ default:
+ break;
+ }
+
+ // Sort the data to match the report definition
+ m_subtotal="value";
+
+ switch ( m_config.rowType() )
+ {
+ case MyMoneyReport::eSchedule:
+ m_group = "type";
+ m_subtotal="value";
+ break;
+ case MyMoneyReport::eAccountInfo:
+ case MyMoneyReport::eAccountLoanInfo:
+ m_group = "topcategory,institution";
+ m_subtotal="currentbalance";
+ break;
+ default:
+ throw new MYMONEYEXCEPTION ( "ObjectInfoTable::ObjectInfoTable(): unhandled row type" );
+ }
+
+ QString sort = m_group + "," + m_columns + ",id,rank";
+
+ switch ( m_config.rowType() ) {
+ case MyMoneyReport::eSchedule:
+ if ( m_config.detailLevel() == MyMoneyReport::eDetailAll ) {
+ m_columns="name,payee,paymenttype,occurence,nextduedate,category";
+ } else {
+ m_columns="name,payee,paymenttype,occurence,nextduedate";
+ }
+ break;
+ case MyMoneyReport::eAccountInfo:
+ m_columns="type,name,number,description,openingdate,currencyname,balancewarning,maxbalancelimit,creditwarning,maxcreditlimit,tax,favorite";
+ break;
+ case MyMoneyReport::eAccountLoanInfo:
+ m_columns="type,name,number,description,openingdate,currencyname,payee,loanamount,interestrate,nextinterestchange,periodicpayment,finalpayment,favorite";
+ break;
+ default:
+ m_columns = "";
+ }
+
+ TableRow::setSortCriteria ( sort );
+ qHeapSort ( m_rows );
+}
+
+void ObjectInfoTable::constructScheduleTable ( void )
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ QValueList<MyMoneySchedule> schedules;
+
+ schedules = file->scheduleList ( "", MyMoneySchedule::TYPE_ANY, MyMoneySchedule::OCCUR_ANY, MyMoneySchedule::STYPE_ANY, m_config.fromDate(), m_config.toDate() );
+
+ QValueList<MyMoneySchedule>::const_iterator it_schedule = schedules.begin();
+ while ( it_schedule != schedules.end() )
+ {
+ MyMoneySchedule schedule = *it_schedule;
+
+ ReportAccount account = schedule.account();
+
+ if ( m_config.includes ( account ) ) {
+ //get fraction for account
+ int fraction = account.fraction();
+
+ //use base currency fraction if not initialized
+ if ( fraction == -1 )
+ fraction = MyMoneyFile::instance()->baseCurrency().smallestAccountFraction();
+
+ TableRow scheduleRow;
+
+ //convert to base currency if needed
+ MyMoneyMoney xr = MyMoneyMoney(1,1);
+ if (m_config.isConvertCurrency() && account.isForeignCurrency()) {
+ xr = account.baseCurrencyPrice(QDate::currentDate()).reduce();
+ }
+
+ // help for sort and render functions
+ scheduleRow["rank"] = "0";
+
+ //schedule data
+ scheduleRow["id"] = schedule.id();
+ scheduleRow["name"] = schedule.name();
+ scheduleRow["nextduedate"] = schedule.nextDueDate().toString ( Qt::ISODate );
+ scheduleRow["type"] = KMyMoneyUtils::scheduleTypeToString ( schedule.type() );
+ scheduleRow["occurence"] = i18n( schedule.occurenceToString() );
+ scheduleRow["paymenttype"] = KMyMoneyUtils::paymentMethodToString ( schedule.paymentType() );
+
+ //scheduleRow["category"] = account.name();
+
+ //to get the payee we must look into the splits of the transaction
+ MyMoneyTransaction transaction = schedule.transaction();
+ MyMoneySplit split = transaction.splitByAccount ( account.id(), true );
+ scheduleRow["value"] = (split.value() * xr).toString();
+ MyMoneyPayee payee = file->payee ( split.payeeId() );
+ scheduleRow["payee"] = payee.name();
+ m_rows += scheduleRow;
+
+ //the text matches the main split
+ bool transaction_text = m_config.match(&split);
+
+ if ( m_config.detailLevel() == MyMoneyReport::eDetailAll )
+ {
+ //get the information for all splits
+ QValueList<MyMoneySplit> splits = transaction.splits();
+ QValueList<MyMoneySplit>::const_iterator split_it = splits.begin();
+ for ( ;split_it != splits.end(); split_it++ )
+ {
+ TableRow splitRow;
+ ReportAccount splitAcc = ( *split_it ).accountId();
+
+ splitRow["rank"] = "1";
+ splitRow["id"] = schedule.id();
+ splitRow["name"] = schedule.name();
+ splitRow["type"] = KMyMoneyUtils::scheduleTypeToString ( schedule.type() );
+ splitRow["nextduedate"] = schedule.nextDueDate().toString ( Qt::ISODate );
+
+ if ( ( *split_it ).value() == MyMoneyMoney::autoCalc ) {
+ splitRow["split"] = MyMoneyMoney::autoCalc.toString();
+ } else if ( ! splitAcc.isIncomeExpense() ) {
+ splitRow["split"] = ( *split_it ).value().toString();
+ } else {
+ splitRow["split"] = ( - ( *split_it ).value() ).toString();
+ }
+
+ //if it is an assett account, mark it as a transfer
+ if ( ! splitAcc.isIncomeExpense() ) {
+ splitRow["category"] = ( ( * split_it ).value().isNegative() )
+ ? i18n ( "Transfer from %1" ).arg ( splitAcc.fullName() )
+ : i18n ( "Transfer to %1" ).arg ( splitAcc.fullName() );
+ } else {
+ splitRow ["category"] = splitAcc.fullName();
+ }
+
+ //add the split only if it matches the text or it matches the main split
+ if(m_config.match( &(*split_it) )
+ || transaction_text )
+ m_rows += splitRow;
+ }
+ }
+ }
+ ++it_schedule;
+ }
+}
+
+void ObjectInfoTable::constructAccountTable ( void )
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ //make sure we have all subaccounts of investment accounts
+ includeInvestmentSubAccounts();
+
+ QValueList<MyMoneyAccount> accounts;
+ file->accountList(accounts);
+ QValueList<MyMoneyAccount>::const_iterator it_account = accounts.begin();
+ while ( it_account != accounts.end() )
+ {
+ TableRow accountRow;
+ ReportAccount account = *it_account;
+
+ if(m_config.includes(account)
+ && account.accountType() != MyMoneyAccount::Stock
+ && !account.isClosed())
+ {
+ MyMoneyMoney value;
+ accountRow["rank"] = "0";
+ accountRow["topcategory"] = KMyMoneyUtils::accountTypeToString(account.accountGroup());
+ accountRow["institution"] = (file->institution(account.institutionId())).name();
+ accountRow["type"] = KMyMoneyUtils::accountTypeToString(account.accountType());
+ accountRow["name"] = account.name();
+ accountRow["number"] = account.number();
+ accountRow["description"] = account.description();
+ accountRow["openingdate"] = account.openingDate().toString( Qt::ISODate );
+ //accountRow["currency"] = (file->currency(account.currencyId())).tradingSymbol();
+ accountRow["currencyname"] = (file->currency(account.currencyId())).name();
+ accountRow["balancewarning"] = account.value("minBalanceEarly");
+ accountRow["maxbalancelimit"] = account.value("minBalanceAbsolute");
+ accountRow["creditwarning"] = account.value("maxCreditEarly");
+ accountRow["maxcreditlimit"] = account.value("maxCreditAbsolute");
+ accountRow["tax"] = account.value("Tax");
+ accountRow["favorite"] = account.value("PreferredAccount");
+
+ //investment accounts show the balances of all its subaccounts
+ if(account.accountType() == MyMoneyAccount::Investment) {
+ value = investmentBalance(account);
+ } else {
+ value = file->balance(account.id());
+ }
+
+ //convert to base currency if needed
+ if (m_config.isConvertCurrency() && account.isForeignCurrency()) {
+ MyMoneyMoney xr = account.baseCurrencyPrice(QDate::currentDate()).reduce();
+ value = value * xr;
+ }
+ accountRow["currentbalance"] = value.toString();
+
+ m_rows += accountRow;
+ }
+ ++it_account;
+ }
+}
+
+void ObjectInfoTable::constructAccountLoanTable ( void )
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ QValueList<MyMoneyAccount> accounts;
+ file->accountList(accounts);
+ QValueList<MyMoneyAccount>::const_iterator it_account = accounts.begin();
+ while ( it_account != accounts.end() )
+ {
+ TableRow accountRow;
+ ReportAccount account = *it_account;
+ MyMoneyAccountLoan loan = *it_account;
+
+ if(m_config.includes(account) &&
+ ( account.accountType() == MyMoneyAccount::Loan
+ || account.accountType() == MyMoneyAccount::AssetLoan )
+ && !account.isClosed())
+ {
+ //convert to base currency if needed
+ MyMoneyMoney xr = MyMoneyMoney(1,1);
+ if (m_config.isConvertCurrency() && account.isForeignCurrency()) {
+ xr = account.baseCurrencyPrice(QDate::currentDate()).reduce();
+ }
+
+ accountRow["rank"] = "0";
+ accountRow["topcategory"] = KMyMoneyUtils::accountTypeToString(account.accountGroup());
+ accountRow["institution"] = (file->institution(account.institutionId())).name();
+ accountRow["type"] = KMyMoneyUtils::accountTypeToString(account.accountType());
+ accountRow["name"] = account.name();
+ accountRow["number"] = account.number();
+ accountRow["description"] = account.description();
+ accountRow["openingdate"] = account.openingDate().toString( Qt::ISODate );
+ //accountRow["currency"] = (file->currency(account.currencyId())).tradingSymbol();
+ accountRow["currencyname"] = (file->currency(account.currencyId())).name();
+ accountRow["payee"] = file->payee(loan.payee()).name();
+ accountRow["loanamount"] = (loan.loanAmount() * xr).toString();
+ accountRow["interestrate"] = (loan.interestRate(QDate::currentDate())/MyMoneyMoney(100,1)*xr).toString();
+ accountRow["nextinterestchange"] = loan.nextInterestChange().toString( Qt::ISODate );
+ accountRow["periodicpayment"] = (loan.periodicPayment() * xr).toString();
+ accountRow["finalpayment"] = (loan.finalPayment() * xr).toString();
+ accountRow["favorite"] = account.value("PreferredAccount");
+
+ MyMoneyMoney value = file->balance(account.id());
+ value = value * xr;
+ accountRow["currentbalance"] = value.toString();
+ m_rows += accountRow;
+ }
+ ++it_account;
+ }
+}
+
+MyMoneyMoney ObjectInfoTable::investmentBalance(const MyMoneyAccount& acc)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyMoney value;
+
+ value = file->balance(acc.id());
+ QValueList<QString>::const_iterator it_a;
+ for(it_a = acc.accountList().begin(); it_a != acc.accountList().end(); ++it_a) {
+ MyMoneyAccount stock = file->account(*it_a);
+ try {
+ MyMoneyMoney val;
+ MyMoneyMoney balance = file->balance(stock.id());
+ MyMoneySecurity security = file->security(stock.currencyId());
+ MyMoneyPrice price = file->price(stock.currencyId(), security.tradingCurrency());
+ val = balance * price.rate(security.tradingCurrency());
+ // adjust value of security to the currency of the account
+ MyMoneySecurity accountCurrency = file->currency(acc.currencyId());
+ val = val * file->price(security.tradingCurrency(), accountCurrency.id()).rate(accountCurrency.id());
+ val = val.convert(acc.fraction());
+ value += val;
+ } catch(MyMoneyException* e) {
+ qWarning("%s", (QString("cannot convert stock balance of %1 to base currency: %2").arg(stock.name(), e->what())).data());
+ delete e;
+ }
+ }
+ return value;
+}
+
+}
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/reports/objectinfotable.h b/kmymoney2/reports/objectinfotable.h
new file mode 100644
index 0000000..0b4ab71
--- /dev/null
+++ b/kmymoney2/reports/objectinfotable.h
@@ -0,0 +1,75 @@
+/***************************************************************************
+ objectinfotable.h
+ -------------------
+ begin : Sat 28 jun 2008
+ copyright : (C) 2004-2005 by Ace Jones
+ 2008 by Alvaro Soliverez
+ email : acejones@users.sourceforge.net
+ asoliverez@gmail.com
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef OBJECTINFOTABLE_H
+#define OBJECTINFOTABLE_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstringlist.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../mymoney/mymoneyreport.h"
+#include "listtable.h"
+
+namespace reports {
+
+class ReportAccount;
+
+/**
+ * Calculates a query of information about the transaction database.
+ *
+ * This is a middle-layer class, between the UI and the engine. The
+ * MyMoneyReport class holds only the CONFIGURATION parameters. This
+ * class actually does the work of retrieving the data from the engine
+ * and formatting it for the user.
+ *
+ * @author Ace Jones
+ *
+ * @short
+**/
+
+class ObjectInfoTable : public ListTable
+{
+public:
+ ObjectInfoTable ( const MyMoneyReport& );
+ void init ( void );
+
+protected:
+ void constructScheduleTable ( void );
+ void constructAccountTable ( void );
+ void constructAccountLoanTable ( void );
+
+private:
+ /**
+ * @param acc the investment account
+ * @return the balance in the currency of the investment account
+ */
+ MyMoneyMoney investmentBalance(const MyMoneyAccount& acc);
+};
+
+}
+
+#endif // QUERYREPORT_H
diff --git a/kmymoney2/reports/pivotgrid.cpp b/kmymoney2/reports/pivotgrid.cpp
new file mode 100644
index 0000000..9cdf9b3
--- /dev/null
+++ b/kmymoney2/reports/pivotgrid.cpp
@@ -0,0 +1,161 @@
+/***************************************************************************
+ pivotgrid.cpp
+ -------------------
+ begin : Mon May 17 2004
+ copyright : (C) 2004-2005 by Ace Jones
+ email : <ace.j@hotpop.com>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qlayout.h>
+#include <qdatetime.h>
+#include <qregexp.h>
+#include <qdragobject.h>
+#include <qclipboard.h>
+#include <qapplication.h>
+#include <qprinter.h>
+#include <qpainter.h>
+#include <qfile.h>
+#include <qdom.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+// This is just needed for i18n() and weekStartDay().
+// Once I figure out how to handle i18n
+// without using this macro directly, I'll be freed of KDE dependency. This
+// is a minor problem because we use these terms when rendering to HTML,
+// and a more major problem because we need it to translate account types
+// (e.g. MyMoneyAccount::Checkings) into their text representation. We also
+// use that text representation in the core data structure of the report. (Ace)
+
+#include <kglobal.h>
+#include <klocale.h>
+#include <kdebug.h>
+#include <kcalendarsystem.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "pivottable.h"
+#include "reportdebug.h"
+#include "kreportchartview.h"
+#include "../kmymoneyglobalsettings.h"
+
+#include <kmymoney/kmymoneyutils.h>
+
+namespace reports {
+
+ const unsigned PivotOuterGroup::m_kDefaultSortOrder = 100;
+
+ PivotCell::PivotCell(const MyMoneyMoney& value) :
+ MyMoneyMoney(value),
+ m_stockSplit(MyMoneyMoney(1,1))
+ {
+ m_cellUsed |= !value.isZero();
+ }
+
+PivotCell PivotCell::operator += (const PivotCell& right)
+{
+ const MyMoneyMoney& r = static_cast<const MyMoneyMoney&>(right);
+ *this += r;
+ m_postSplit = m_postSplit * right.m_stockSplit;
+ m_stockSplit = m_stockSplit * right.m_stockSplit;
+ m_postSplit += right.m_postSplit;
+ m_cellUsed |= right.m_cellUsed;
+ return *this;
+}
+
+PivotCell PivotCell::operator += (const MyMoneyMoney& value)
+{
+ m_cellUsed |= !value.isZero();
+ if(m_stockSplit != MyMoneyMoney(1,1))
+ m_postSplit += value;
+ else
+ MyMoneyMoney::operator += (value);
+ return *this;
+}
+
+PivotCell PivotCell::stockSplit(const MyMoneyMoney& factor)
+{
+ PivotCell s;
+ s.m_stockSplit = factor;
+ return s;
+}
+
+const QString PivotCell::formatMoney(int fraction, bool showThousandSeparator) const
+{
+ return formatMoney("", MyMoneyMoney::denomToPrec(fraction), showThousandSeparator);
+}
+
+const QString PivotCell::formatMoney(const QString& currency, const int prec, bool showThousandSeparator) const
+{
+ // construct the result
+ MyMoneyMoney res = (*this * m_stockSplit) + m_postSplit;
+ return res.formatMoney(currency, prec, showThousandSeparator);
+}
+
+MyMoneyMoney PivotCell::calculateRunningSum(const MyMoneyMoney& runningSum)
+{
+ MyMoneyMoney::operator += (runningSum);
+ MyMoneyMoney::operator = ((*this * m_stockSplit) + m_postSplit);
+ m_postSplit = MyMoneyMoney(0,1);
+ m_stockSplit = MyMoneyMoney(1,1);
+ return *this;
+}
+
+MyMoneyMoney PivotCell::cellBalance(const MyMoneyMoney& _balance)
+{
+ MyMoneyMoney balance(_balance);
+ balance += *this;
+ balance = (balance * m_stockSplit) + m_postSplit;
+ return balance;
+}
+
+PivotGridRowSet::PivotGridRowSet( unsigned _numcolumns )
+{
+ insert(eActual, PivotGridRow(_numcolumns));
+ insert(eBudget, PivotGridRow(_numcolumns));
+ insert(eBudgetDiff, PivotGridRow(_numcolumns));
+ insert(eForecast, PivotGridRow(_numcolumns));
+ insert(eAverage, PivotGridRow(_numcolumns));
+ insert(ePrice, PivotGridRow(_numcolumns));
+}
+
+PivotGridRowSet PivotGrid::rowSet(QString id)
+{
+
+ //go through the data and get the row that matches the id
+ PivotGrid::iterator it_outergroup = begin();
+ while ( it_outergroup != end() )
+ {
+ PivotOuterGroup::iterator it_innergroup = (*it_outergroup).begin();
+ while ( it_innergroup != (*it_outergroup).end() )
+ {
+ PivotInnerGroup::iterator it_row = (*it_innergroup).begin();
+ while ( it_row != (*it_innergroup).end() )
+ {
+ if(it_row.key().id() == id)
+ return it_row.data();
+
+ ++it_row;
+ }
+ ++it_innergroup;
+ }
+ ++it_outergroup;
+ }
+ return PivotGridRowSet();
+}
+
+} // namespace
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/reports/pivotgrid.h b/kmymoney2/reports/pivotgrid.h
new file mode 100644
index 0000000..ca7f5ab
--- /dev/null
+++ b/kmymoney2/reports/pivotgrid.h
@@ -0,0 +1,151 @@
+/***************************************************************************
+ pivotgrid.h
+ -------------------
+ begin : Sat May 22 2004
+ copyright : (C) 2004-2005 by Ace Jones
+ email : <ace.j@hotpop.com>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef PIVOTGRID_H
+#define PIVOTGRID_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qmap.h>
+#include <qvaluelist.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "reportaccount.h"
+
+namespace reports {
+
+ enum ERowType {eActual, eBudget, eBudgetDiff, eForecast, eAverage, ePrice };
+
+ /**
+ * The fundamental data construct of this class is a 'grid'. It is organized as follows:
+ *
+ * A 'Row' is a row of money values, each column is a month. The first month corresponds to
+ * m_beginDate.
+ *
+ * A 'Row Pair' is two rows of money values. Each column is the SAME month. One row is the
+ * 'actual' values for the period, the other row is the 'budgetted' values for the same
+ * period. For ease of implementation, a Row Pair is implemented as a Row which contains
+ * another Row. The inherited Row is the 'actual', the contained row is the 'Budget'.
+ *
+ * An 'Inner Group' contains a rows for each subordinate account within a single top-level
+ * account. It also contains a mapping from the account descriptor for the subordinate account
+ * to its row data. So if we have an Expense account called "Computers", with sub-accounts called
+ * "Hardware", "Software", and "Peripherals", there will be one Inner Group for "Computers"
+ * which contains three Rows.
+ *
+ * An 'Outer Group' contains Inner Row Groups for all the top-level accounts in a given
+ * account class. Account classes are Expense, Income, Asset, Liability. In the case above,
+ * the "Computers" Inner Group is contained within the "Expense" Outer Group.
+ *
+ * A 'Grid' is the set of all Outer Groups contained in this report.
+ *
+ */
+ class PivotCell: public MyMoneyMoney
+ {
+ public:
+ PivotCell() : m_stockSplit(MyMoneyMoney(1,1)), m_cellUsed(false) {}
+ PivotCell(const MyMoneyMoney& value);
+ static PivotCell stockSplit(const MyMoneyMoney& factor);
+ PivotCell operator += (const PivotCell& right);
+ PivotCell operator += (const MyMoneyMoney& value);
+ const QString formatMoney(int fraction, bool showThousandSeparator = true) const;
+ const QString formatMoney(const QString& currency, const int prec, bool showThousandSeparator = true) const;
+ MyMoneyMoney calculateRunningSum(const MyMoneyMoney& runningSum);
+ MyMoneyMoney cellBalance(const MyMoneyMoney& _balance);
+ bool isUsed(void) const { return m_cellUsed; }
+ private:
+ MyMoneyMoney m_stockSplit;
+ MyMoneyMoney m_postSplit;
+ bool m_cellUsed;
+ };
+ class PivotGridRow: public QValueList<PivotCell>
+ {
+ public:
+
+ PivotGridRow( unsigned _numcolumns = 0 )
+ {
+ if ( _numcolumns )
+ insert( end(), _numcolumns, PivotCell() );
+ }
+ MyMoneyMoney m_total;
+ };
+
+ class PivotGridRowSet: public QMap<ERowType, PivotGridRow>
+ {
+ public:
+ PivotGridRowSet( unsigned _numcolumns = 0 );
+ };
+
+ class PivotInnerGroup: public QMap<ReportAccount,PivotGridRowSet>
+ {
+ public:
+ PivotInnerGroup( unsigned _numcolumns = 0 ): m_total(_numcolumns) {}
+
+ PivotGridRowSet m_total;
+ };
+
+ class PivotOuterGroup: public QMap<QString,PivotInnerGroup>
+ {
+ public:
+ PivotOuterGroup( unsigned _numcolumns = 0, unsigned _sort=m_kDefaultSortOrder, bool _inverted=false): m_total(_numcolumns), m_inverted(_inverted), m_sortOrder(_sort) {}
+ int operator<( const PivotOuterGroup& _right )
+ {
+ if ( m_sortOrder != _right.m_sortOrder )
+ return m_sortOrder < _right.m_sortOrder;
+ else
+ return m_displayName < _right.m_displayName;
+ }
+ PivotGridRowSet m_total;
+
+ // An inverted outergroup means that all values placed in subordinate rows
+ // should have their sign inverted from typical cash-flow notation. Also it
+ // means that when the report is summed, the values should be inverted again
+ // so that the grand total is really "non-inverted outergroup MINUS inverted outergroup".
+ bool m_inverted;
+
+ // The localized name of the group for display in the report. Outergoups need this
+ // independently, because they will lose their association with the TGrid when the
+ // report is rendered.
+ QString m_displayName;
+
+ // lower numbers sort toward the top of the report. defaults to 100, which is a nice
+ // middle-of-the-road value
+ unsigned m_sortOrder;
+
+ // default sort order
+ static const unsigned m_kDefaultSortOrder;
+ };
+ class PivotGrid: public QMap<QString,PivotOuterGroup>
+ {
+ public:
+ PivotGridRowSet rowSet (QString id);
+
+ PivotGridRowSet m_total;
+ };
+
+}
+
+#endif
+// PIVOTGRID_H
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/reports/pivotgridtest.cpp b/kmymoney2/reports/pivotgridtest.cpp
new file mode 100644
index 0000000..397491d
--- /dev/null
+++ b/kmymoney2/reports/pivotgridtest.cpp
@@ -0,0 +1,198 @@
+/***************************************************************************
+ pivotgridtest.cpp
+ -------------------
+ copyright : (C) 2002-2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ Ace Jones <ace.j@hotpop.com>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+/*
+#include <qvaluelist.h>
+#include <qvaluevector.h>
+#include <qdom.h>
+#include <qfile.h>
+
+#include <kdebug.h>
+#include <kdeversion.h>
+#include <kglobal.h>
+#include <kglobalsettings.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+
+// DOH, mmreport.h uses this without including it!!
+#include "../mymoney/mymoneyaccount.h"
+
+#include "../mymoney/mymoneysecurity.h"
+#include "../mymoney/mymoneyprice.h"
+#include "../mymoney/mymoneyreport.h"
+#include "../mymoney/mymoneystatement.h"
+#include "../mymoney/storage/mymoneystoragedump.h"
+#include "../mymoney/storage/mymoneystoragexml.h"
+*/
+
+#include "pivotgridtest.h"
+
+#include "reportstestcommon.h"
+
+#define private public
+#include "../reports/pivotgrid.h"
+#undef private
+
+using namespace reports;
+using namespace test;
+
+PivotGridTest::PivotGridTest()
+{
+}
+
+void PivotGridTest::setUp ()
+{
+ storage = new MyMoneySeqAccessMgr;
+ file = MyMoneyFile::instance();
+ file->attachStorage(storage);
+
+ MyMoneyFileTransaction ft;
+ file->addCurrency(MyMoneySecurity("CAD", "Canadian Dollar", "C$"));
+ file->addCurrency(MyMoneySecurity("USD", "US Dollar", "$"));
+ file->addCurrency(MyMoneySecurity("JPY", "Japanese Yen", QChar(0x00A5), 100, 1));
+ file->addCurrency(MyMoneySecurity("GBP", "British Pound", "#"));
+ file->setBaseCurrency(file->currency("USD"));
+
+ MyMoneyPayee payeeTest("Test Payee");
+ file->addPayee(payeeTest);
+ MyMoneyPayee payeeTest2("Thomas Baumgart");
+ file->addPayee(payeeTest2);
+
+ acAsset = (MyMoneyFile::instance()->asset().id());
+ acLiability = (MyMoneyFile::instance()->liability().id());
+ acExpense = (MyMoneyFile::instance()->expense().id());
+ acIncome = (MyMoneyFile::instance()->income().id());
+ acChecking = makeAccount(QString("Checking Account"),MyMoneyAccount::Checkings,moCheckingOpen,QDate(2004,5,15),acAsset);
+ acCredit = makeAccount(QString("Credit Card"),MyMoneyAccount::CreditCard,moCreditOpen,QDate(2004,7,15),acLiability);
+ acSolo = makeAccount(QString("Solo"),MyMoneyAccount::Expense,0,QDate(2004,1,11),acExpense);
+ acParent = makeAccount(QString("Parent"),MyMoneyAccount::Expense,0,QDate(2004,1,11),acExpense);
+ acChild = makeAccount(QString("Child"),MyMoneyAccount::Expense,0,QDate(2004,2,11),acParent);
+ acForeign = makeAccount(QString("Foreign"),MyMoneyAccount::Expense,0,QDate(2004,1,11),acExpense);
+
+ acSecondChild = makeAccount(QString("Second Child"),MyMoneyAccount::Expense,0,QDate(2004,2,11),acParent);
+ acGrandChild1 = makeAccount(QString("Grand Child 1"),MyMoneyAccount::Expense,0,QDate(2004,2,11),acChild);
+ acGrandChild2 = makeAccount(QString("Grand Child 2"),MyMoneyAccount::Expense,0,QDate(2004,2,11),acChild);
+
+ MyMoneyInstitution i("Bank of the World","","","","","","");
+ file->addInstitution(i);
+ inBank = i.id();
+ ft.commit();
+}
+
+void PivotGridTest::tearDown ()
+{
+ file->detachStorage(storage);
+ delete storage;
+}
+
+void PivotGridTest::testCellAddValue(void)
+{
+ PivotCell a;
+ CPPUNIT_ASSERT(a == MyMoneyMoney(0,1));
+ CPPUNIT_ASSERT(a.m_stockSplit == MyMoneyMoney(1,1));
+ CPPUNIT_ASSERT(a.m_postSplit == MyMoneyMoney(0,1));
+ CPPUNIT_ASSERT(a.formatMoney("", 2) == MyMoneyMoney(0,1).formatMoney("", 2));
+
+ PivotCell b(MyMoneyMoney(13,10));
+ CPPUNIT_ASSERT(b == MyMoneyMoney(13,10));
+ CPPUNIT_ASSERT(b.m_stockSplit == MyMoneyMoney(1,1));
+ CPPUNIT_ASSERT(b.m_postSplit == MyMoneyMoney(0,1));
+ CPPUNIT_ASSERT(b.formatMoney("", 2) == MyMoneyMoney(13,10).formatMoney("", 2));
+
+ PivotCell s(b);
+ CPPUNIT_ASSERT(s == MyMoneyMoney(13,10));
+ CPPUNIT_ASSERT(s.m_stockSplit == MyMoneyMoney(1,1));
+ CPPUNIT_ASSERT(s.m_postSplit == MyMoneyMoney(0,1));
+ CPPUNIT_ASSERT(s.formatMoney("", 2) == MyMoneyMoney(13,10).formatMoney("", 2));
+
+ s = PivotCell::stockSplit(MyMoneyMoney(1,2));
+ CPPUNIT_ASSERT(s == MyMoneyMoney(0,1));
+ CPPUNIT_ASSERT(s.m_stockSplit == MyMoneyMoney(1,2));
+ CPPUNIT_ASSERT(s.m_postSplit == MyMoneyMoney(0,1));
+ CPPUNIT_ASSERT(s.formatMoney("", 2) == MyMoneyMoney(0,1).formatMoney("", 2));
+
+ a += MyMoneyMoney(1,1);
+ a += MyMoneyMoney(2,1);
+ CPPUNIT_ASSERT(a == MyMoneyMoney(3,1));
+ CPPUNIT_ASSERT(a.m_stockSplit == MyMoneyMoney(1,1));
+ CPPUNIT_ASSERT(a.m_postSplit == MyMoneyMoney(0,1));
+ CPPUNIT_ASSERT(a.formatMoney("", 2) == MyMoneyMoney(3,1).formatMoney("", 2));
+
+ a += s;
+ CPPUNIT_ASSERT(a == MyMoneyMoney(3,1));
+ CPPUNIT_ASSERT(a.m_stockSplit == MyMoneyMoney(1,2));
+ CPPUNIT_ASSERT(a.m_postSplit == MyMoneyMoney(0,1));
+ CPPUNIT_ASSERT(a.formatMoney("", 2) == MyMoneyMoney(15,10).formatMoney("", 2));
+
+ a += MyMoneyMoney(3,1);
+ a += MyMoneyMoney(3,1);
+ CPPUNIT_ASSERT(a == MyMoneyMoney(3,1));
+ CPPUNIT_ASSERT(a.m_stockSplit == MyMoneyMoney(1,2));
+ CPPUNIT_ASSERT(a.m_postSplit == MyMoneyMoney(6,1));
+ CPPUNIT_ASSERT(a.formatMoney("", 2) == MyMoneyMoney(75,10).formatMoney("", 2));
+}
+
+void PivotGridTest::testCellAddCell(void)
+{
+ PivotCell a,b;
+
+ a += MyMoneyMoney(3,1);
+ a += PivotCell::stockSplit(MyMoneyMoney(2,1));
+ a += MyMoneyMoney(4,1);
+
+ CPPUNIT_ASSERT(a == MyMoneyMoney(3,1));
+ CPPUNIT_ASSERT(a.m_stockSplit == MyMoneyMoney(2,1));
+ CPPUNIT_ASSERT(a.m_postSplit == MyMoneyMoney(4,1));
+ CPPUNIT_ASSERT(a.formatMoney("", 2) == MyMoneyMoney(10,1).formatMoney("", 2));
+
+ b += MyMoneyMoney(4,1);
+ b += PivotCell::stockSplit(MyMoneyMoney(4,1));
+ b += MyMoneyMoney(16,1);
+
+ CPPUNIT_ASSERT(b == MyMoneyMoney(4,1));
+ CPPUNIT_ASSERT(b.m_stockSplit == MyMoneyMoney(4,1));
+ CPPUNIT_ASSERT(b.m_postSplit == MyMoneyMoney(16,1));
+ CPPUNIT_ASSERT(b.formatMoney("", 2) == MyMoneyMoney(32,1).formatMoney("", 2));
+
+ a += b;
+
+ CPPUNIT_ASSERT(a == MyMoneyMoney(3,1));
+ CPPUNIT_ASSERT(a.m_stockSplit == MyMoneyMoney(8,1));
+ CPPUNIT_ASSERT(a.m_postSplit == MyMoneyMoney(48,1));
+ CPPUNIT_ASSERT(a.formatMoney("", 2) == MyMoneyMoney(72,1).formatMoney("", 2));
+}
+
+void PivotGridTest::testCellRunningSum(void)
+{
+ PivotCell a;
+ MyMoneyMoney runningSum(12,10);
+
+ a += MyMoneyMoney(3,1);
+ a += PivotCell::stockSplit(MyMoneyMoney(125,100));
+ a += MyMoneyMoney(134,10);
+
+ CPPUNIT_ASSERT(a.m_stockSplit != MyMoneyMoney(1,1));
+ CPPUNIT_ASSERT(a.m_postSplit != MyMoneyMoney(0,1));
+
+ runningSum = a.calculateRunningSum(runningSum);
+
+ CPPUNIT_ASSERT(runningSum == MyMoneyMoney(1865,100));
+ CPPUNIT_ASSERT(a.formatMoney("", 2) == MyMoneyMoney(1865,100).formatMoney("", 2));
+ CPPUNIT_ASSERT(a.m_stockSplit == MyMoneyMoney(1,1));
+ CPPUNIT_ASSERT(a.m_postSplit == MyMoneyMoney(0,1));
+}
+
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/reports/pivotgridtest.h b/kmymoney2/reports/pivotgridtest.h
new file mode 100644
index 0000000..50b6f57
--- /dev/null
+++ b/kmymoney2/reports/pivotgridtest.h
@@ -0,0 +1,47 @@
+/***************************************************************************
+ pivotgridtest.h
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ Ace Jones <ace.jones@hotpop.com>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef PIVOTGRIDTEST_H
+#define PIVOTGRIDTEST_H
+
+#include <cppunit/extensions/HelperMacros.h>
+#include "../mymoney/mymoneyfile.h"
+#include "../mymoney/storage/mymoneyseqaccessmgr.h"
+
+class PivotGridTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(PivotGridTest);
+ CPPUNIT_TEST(testCellAddValue);
+ CPPUNIT_TEST(testCellAddCell);
+ CPPUNIT_TEST(testCellRunningSum);
+ CPPUNIT_TEST_SUITE_END();
+
+private:
+ MyMoneyAccount *m;
+
+ MyMoneySeqAccessMgr* storage;
+ MyMoneyFile* file;
+
+public:
+ PivotGridTest();
+ void setUp ();
+ void tearDown ();
+ void testCellAddValue();
+ void testCellAddCell();
+ void testCellRunningSum();
+};
+
+#endif // PIVOTGRIDTEST_H
diff --git a/kmymoney2/reports/pivottable.cpp b/kmymoney2/reports/pivottable.cpp
new file mode 100644
index 0000000..c12ca57
--- /dev/null
+++ b/kmymoney2/reports/pivottable.cpp
@@ -0,0 +1,2604 @@
+/***************************************************************************
+ pivottable.cpp
+ -------------------
+ begin : Mon May 17 2004
+ copyright : (C) 2004-2005 by Ace Jones
+ email : <ace.j@hotpop.com>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Alvaro Soliverez <asoliverez@gmail.com>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qlayout.h>
+#include <qdatetime.h>
+#include <qregexp.h>
+#include <qdragobject.h>
+#include <qclipboard.h>
+#include <qapplication.h>
+#include <qprinter.h>
+#include <qpainter.h>
+#include <qfile.h>
+#include <qdom.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+// This is just needed for i18n() and weekStartDay().
+// Once I figure out how to handle i18n
+// without using this macro directly, I'll be freed of KDE dependency. This
+// is a minor problem because we use these terms when rendering to HTML,
+// and a more major problem because we need it to translate account types
+// (e.g. MyMoneyAccount::Checkings) into their text representation. We also
+// use that text representation in the core data structure of the report. (Ace)
+
+#include <kglobal.h>
+#include <klocale.h>
+#include <kdebug.h>
+#include <kcalendarsystem.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "pivottable.h"
+#include "pivotgrid.h"
+#include "reportdebug.h"
+#include "kreportchartview.h"
+#include "../kmymoneyglobalsettings.h"
+#include "../kmymoneyutils.h"
+#include "../mymoney/mymoneyforecast.h"
+
+
+#include <kmymoney/kmymoneyutils.h>
+
+namespace reports {
+
+QString Debug::m_sTabs;
+bool Debug::m_sEnabled = DEBUG_ENABLED_BY_DEFAULT;
+QString Debug::m_sEnableKey;
+
+Debug::Debug( const QString& _name ): m_methodName( _name ), m_enabled( m_sEnabled )
+{
+ if (!m_enabled && _name == m_sEnableKey)
+ m_enabled = true;
+
+ if (m_enabled)
+ {
+ qDebug( "%s%s(): ENTER", m_sTabs.latin1(), m_methodName.latin1() );
+ m_sTabs.append("--");
+ }
+}
+
+Debug::~Debug()
+{
+ if ( m_enabled )
+ {
+ m_sTabs.remove(0,2);
+ qDebug( "%s%s(): EXIT", m_sTabs.latin1(), m_methodName.latin1() );
+
+ if (m_methodName == m_sEnableKey)
+ m_enabled = false;
+ }
+}
+
+void Debug::output( const QString& _text )
+{
+ if ( m_enabled )
+ qDebug( "%s%s(): %s", m_sTabs.latin1(), m_methodName.latin1(), _text.latin1() );
+}
+
+PivotTable::PivotTable( const MyMoneyReport& _config_f ):
+ m_runningSumsCalculated(false),
+ m_config_f( _config_f )
+{
+ init();
+}
+
+void PivotTable::init(void)
+{
+ DEBUG_ENTER(__PRETTY_FUNCTION__);
+
+ //
+ // Initialize locals
+ //
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ //
+ // Initialize member variables
+ //
+
+ //make sure we have all subaccounts of investment accounts
+ includeInvestmentSubAccounts();
+
+ m_config_f.validDateRange( m_beginDate, m_endDate );
+
+ // If we need to calculate running sums, it does not make sense
+ // to show a row total column
+ if ( m_config_f.isRunningSum() )
+ m_config_f.setShowingRowTotals(false);
+
+ // if this is a months-based report
+ if (! m_config_f.isColumnsAreDays())
+ {
+ // strip out the 'days' component of the begin and end dates.
+ // we're only using these variables to contain year and month.
+ m_beginDate = QDate( m_beginDate.year(), m_beginDate.month(), 1 );
+ m_endDate = QDate( m_endDate.year(), m_endDate.month(), 1 );
+ }
+
+ m_numColumns = columnValue(m_endDate) - columnValue(m_beginDate) + 2;
+
+ //Load what types of row the report is going to show
+ loadRowTypeList();
+
+ //
+ // Initialize outer groups of the grid
+ //
+ if ( m_config_f.rowType() == MyMoneyReport::eAssetLiability )
+ {
+ m_grid.insert(KMyMoneyUtils::accountTypeToString(MyMoneyAccount::Asset),PivotOuterGroup(m_numColumns));
+ m_grid.insert(KMyMoneyUtils::accountTypeToString(MyMoneyAccount::Liability),PivotOuterGroup(m_numColumns,PivotOuterGroup::m_kDefaultSortOrder,true /* inverted */));
+ }
+ else
+ {
+ m_grid.insert(KMyMoneyUtils::accountTypeToString(MyMoneyAccount::Income),PivotOuterGroup(m_numColumns,PivotOuterGroup::m_kDefaultSortOrder-2));
+ m_grid.insert(KMyMoneyUtils::accountTypeToString(MyMoneyAccount::Expense),PivotOuterGroup(m_numColumns,PivotOuterGroup::m_kDefaultSortOrder-1,true /* inverted */));
+ //
+ // Create rows for income/expense reports with all accounts included
+ //
+ if(m_config_f.isIncludingUnusedAccounts())
+ createAccountRows();
+ }
+
+ //
+ // Initialize grid totals
+ //
+
+ m_grid.m_total = PivotGridRowSet(m_numColumns);
+
+ //
+ // Get opening balances
+ // (for running sum reports only)
+ //
+
+ if ( m_config_f.isRunningSum() )
+ calculateOpeningBalances();
+
+ //
+ // Calculate budget mapping
+ // (for budget-vs-actual reports only)
+ //
+ if ( m_config_f.hasBudget())
+ calculateBudgetMapping();
+
+ //
+ // Populate all transactions into the row/column pivot grid
+ //
+
+ QValueList<MyMoneyTransaction> transactions;
+ m_config_f.setReportAllSplits(false);
+ m_config_f.setConsiderCategory(true);
+ try {
+ transactions = file->transactionList(m_config_f);
+ } catch(MyMoneyException *e) {
+ qDebug("ERR: %s thrown in %s(%ld)", e->what().data(), e->file().data(), e->line());
+ throw e;
+ }
+ DEBUG_OUTPUT(QString("Found %1 matching transactions").arg(transactions.count()));
+
+
+ // Include scheduled transactions if required
+ if ( m_config_f.isIncludingSchedules() )
+ {
+ // Create a custom version of the report filter, excluding date
+ // We'll use this to compare the transaction against
+ MyMoneyTransactionFilter schedulefilter(m_config_f);
+ schedulefilter.setDateFilter(QDate(),QDate());
+
+ // Get the real dates from the config filter
+ QDate configbegin, configend;
+ m_config_f.validDateRange(configbegin, configend);
+
+ QValueList<MyMoneySchedule> schedules = file->scheduleList();
+ QValueList<MyMoneySchedule>::const_iterator it_schedule = schedules.begin();
+ while ( it_schedule != schedules.end() )
+ {
+ // If the transaction meets the filter
+ MyMoneyTransaction tx = (*it_schedule).transaction();
+ if (!(*it_schedule).isFinished() && schedulefilter.match(tx) )
+ {
+ // Keep the id of the schedule with the transaction so that
+ // we can do the autocalc later on in case of a loan payment
+ tx.setValue("kmm-schedule-id", (*it_schedule).id());
+
+ // Get the dates when a payment will be made within the report window
+ QDate nextpayment = (*it_schedule).adjustedNextPayment(configbegin);
+ if ( nextpayment.isValid() )
+ {
+ // Add one transaction for each date
+ QValueList<QDate> paymentDates = (*it_schedule).paymentDates(nextpayment,configend);
+ QValueList<QDate>::const_iterator it_date = paymentDates.begin();
+ while ( it_date != paymentDates.end() )
+ {
+ //if the payment occurs in the past, enter it tomorrow
+ if(QDate::currentDate() >= *it_date) {
+ tx.setPostDate(QDate::currentDate().addDays(1));
+ } else {
+ tx.setPostDate(*it_date);
+ }
+ if ( tx.postDate() <= configend
+ && tx.postDate() >= configbegin ) {
+ transactions += tx;
+ }
+
+ DEBUG_OUTPUT(QString("Added transaction for schedule %1 on %2").arg((*it_schedule).id()).arg((*it_date).toString()));
+
+ ++it_date;
+ }
+ }
+ }
+
+ ++it_schedule;
+ }
+ }
+
+ // whether asset & liability transactions are actually to be considered
+ // transfers
+ bool al_transfers = ( m_config_f.rowType() == MyMoneyReport::eExpenseIncome ) && ( m_config_f.isIncludingTransfers() );
+
+ //this is to store balance for loan accounts when not included in the report
+ QMap<QString, MyMoneyMoney> loanBalances;
+
+ QValueList<MyMoneyTransaction>::const_iterator it_transaction = transactions.begin();
+ unsigned colofs = columnValue(m_beginDate) - 1;
+ while ( it_transaction != transactions.end() )
+ {
+ QDate postdate = (*it_transaction).postDate();
+ unsigned column = columnValue(postdate) - colofs;
+
+ MyMoneyTransaction tx = (*it_transaction);
+
+ // check if we need to call the autocalculation routine
+ if(tx.isLoanPayment() && tx.hasAutoCalcSplit() && (tx.value("kmm-schedule-id").length() > 0)) {
+ // make sure to consider any autocalculation for loan payments
+ MyMoneySchedule sched = file->schedule(tx.value("kmm-schedule-id"));
+ const MyMoneySplit& split = tx.amortizationSplit();
+ if(!split.id().isEmpty()) {
+ ReportAccount splitAccount = file->account(split.accountId());
+ MyMoneyAccount::accountTypeE type = splitAccount.accountGroup();
+ QString outergroup = KMyMoneyUtils::accountTypeToString(type);
+
+ //if the account is included in the report, calculate the balance from the cells
+ if(m_config_f.includes( splitAccount )) {
+ loanBalances[splitAccount.id()] = cellBalance(outergroup, splitAccount, column, false);
+ } else {
+ //if it is not in the report and also not in loanBalances, get the balance from the file
+ if(!loanBalances.contains(splitAccount.id())) {
+ QDate dueDate = sched.nextDueDate();
+
+ //if the payment is overdue, use current date
+ if(dueDate < QDate::currentDate())
+ dueDate = QDate::currentDate();
+
+ //get the balance from the file for the date
+ loanBalances[splitAccount.id()] = file->balance(splitAccount.id(), dueDate.addDays(-1));
+ }
+ }
+
+ KMyMoneyUtils::calculateAutoLoan(sched, tx, loanBalances);
+
+ //if the loan split is not included in the report, update the balance for the next occurrence
+ if(!m_config_f.includes( splitAccount )) {
+ QValueList<MyMoneySplit>::ConstIterator it_loanSplits;
+ for(it_loanSplits = tx.splits().begin(); it_loanSplits != tx.splits().end(); ++it_loanSplits) {
+ if((*it_loanSplits).isAmortizationSplit() && (*it_loanSplits).accountId() == splitAccount.id() )
+ loanBalances[splitAccount.id()] = loanBalances[splitAccount.id()] + (*it_loanSplits).shares();
+ }
+ }
+ }
+ }
+
+ QValueList<MyMoneySplit> splits = tx.splits();
+ QValueList<MyMoneySplit>::const_iterator it_split = splits.begin();
+ while ( it_split != splits.end() )
+ {
+ ReportAccount splitAccount = (*it_split).accountId();
+
+ // Each split must be further filtered, because if even one split matches,
+ // the ENTIRE transaction is returned with all splits (even non-matching ones)
+ if ( m_config_f.includes( splitAccount ) && m_config_f.match(&(*it_split)))
+ {
+ // reverse sign to match common notation for cash flow direction, only for expense/income splits
+ MyMoneyMoney reverse(splitAccount.isIncomeExpense() ? -1 : 1, 1);
+
+ MyMoneyMoney value;
+ // the outer group is the account class (major account type)
+ MyMoneyAccount::accountTypeE type = splitAccount.accountGroup();
+ QString outergroup = KMyMoneyUtils::accountTypeToString(type);
+
+ value = (*it_split).shares();
+ bool stockSplit = tx.isStockSplit();
+ if(!stockSplit) {
+ // retrieve the value in the account's underlying currency
+ if(value != MyMoneyMoney::autoCalc) {
+ value = value * reverse;
+ } else {
+ qDebug("PivotTable::PivotTable(): This must not happen");
+ value = MyMoneyMoney(); // keep it 0 so far
+ }
+
+ // Except in the case of transfers on an income/expense report
+ if ( al_transfers && ( type == MyMoneyAccount::Asset || type == MyMoneyAccount::Liability ) )
+ {
+ outergroup = i18n("Transfers");
+ value = -value;
+ }
+ }
+ // add the value to its correct position in the pivot table
+ assignCell( outergroup, splitAccount, column, value, false, stockSplit );
+ }
+ ++it_split;
+ }
+
+ ++it_transaction;
+ }
+
+ //
+ // Get forecast data
+ //
+ if(m_config_f.isIncludingForecast())
+ calculateForecast();
+
+ //
+ //Insert Price data
+ //
+ if(m_config_f.isIncludingPrice())
+ fillBasePriceUnit(ePrice);
+
+ //
+ //Insert Average Price data
+ //
+ if(m_config_f.isIncludingAveragePrice()) {
+ fillBasePriceUnit(eActual);
+ calculateMovingAverage();
+ }
+
+ //
+ // Collapse columns to match column type
+ //
+
+
+ if ( m_config_f.columnPitch() > 1 )
+ collapseColumns();
+
+ //
+ // Calculate the running sums
+ // (for running sum reports only)
+ //
+
+ if ( m_config_f.isRunningSum() )
+ calculateRunningSums();
+
+ //
+ // Calculate Moving Average
+ //
+ if ( m_config_f.isIncludingMovingAverage() )
+ calculateMovingAverage();
+
+ //
+ // Calculate Budget Difference
+ //
+
+ if ( m_config_f.isIncludingBudgetActuals() )
+ calculateBudgetDiff();
+
+ //
+ // Convert all values to the deep currency
+ //
+
+ convertToDeepCurrency();
+
+ //
+ // Convert all values to the base currency
+ //
+
+ if ( m_config_f.isConvertCurrency() )
+ convertToBaseCurrency();
+
+ //
+ // Determine column headings
+ //
+
+ calculateColumnHeadings();
+
+ //
+ // Calculate row and column totals
+ //
+
+ calculateTotals();
+}
+
+void PivotTable::collapseColumns(void)
+{
+ DEBUG_ENTER(__PRETTY_FUNCTION__);
+
+ unsigned columnpitch = m_config_f.columnPitch();
+ if ( columnpitch != 1 )
+ {
+ unsigned sourcemonth = (m_config_f.isColumnsAreDays())
+ // use the user's locale to determine the week's start
+ ? (m_beginDate.dayOfWeek() + 8 - KGlobal::locale()->weekStartDay()) % 7
+ : m_beginDate.month();
+ unsigned sourcecolumn = 1;
+ unsigned destcolumn = 1;
+ while ( sourcecolumn < m_numColumns )
+ {
+ if ( sourcecolumn != destcolumn )
+ {
+#if 0
+ // TODO: Clean up this rather inefficient kludge. We really should jump by an entire
+ // destcolumn at a time on RS reports, and calculate the proper sourcecolumn to use,
+ // allowing us to clear and accumulate only ONCE per destcolumn
+ if ( m_config_f.isRunningSum() )
+ clearColumn(destcolumn);
+#endif
+ accumulateColumn(destcolumn,sourcecolumn);
+ }
+
+ if (++sourcecolumn < m_numColumns) {
+ if ((sourcemonth++ % columnpitch) == 0) {
+ if (sourcecolumn != ++destcolumn)
+ clearColumn (destcolumn);
+ }
+ }
+ }
+ m_numColumns = destcolumn + 1;
+ }
+}
+
+void PivotTable::accumulateColumn(unsigned destcolumn, unsigned sourcecolumn)
+{
+ DEBUG_ENTER(__PRETTY_FUNCTION__);
+ DEBUG_OUTPUT(QString("From Column %1 to %2").arg(sourcecolumn).arg(destcolumn));
+
+ // iterate over outer groups
+ PivotGrid::iterator it_outergroup = m_grid.begin();
+ while ( it_outergroup != m_grid.end() )
+ {
+ // iterate over inner groups
+ PivotOuterGroup::iterator it_innergroup = (*it_outergroup).begin();
+ while ( it_innergroup != (*it_outergroup).end() )
+ {
+ // iterator over rows
+ PivotInnerGroup::iterator it_row = (*it_innergroup).begin();
+ while ( it_row != (*it_innergroup).end() )
+ {
+ if ( (*it_row)[eActual].count() <= sourcecolumn )
+ throw new MYMONEYEXCEPTION(QString("Sourcecolumn %1 out of grid range (%2) in PivotTable::accumulateColumn").arg(sourcecolumn).arg((*it_row)[eActual].count()));
+ if ( (*it_row)[eActual].count() <= destcolumn )
+ throw new MYMONEYEXCEPTION(QString("Destcolumn %1 out of grid range (%2) in PivotTable::accumulateColumn").arg(sourcecolumn).arg((*it_row)[eActual].count()));
+
+ (*it_row)[eActual][destcolumn] += (*it_row)[eActual][sourcecolumn];
+ ++it_row;
+ }
+
+ ++it_innergroup;
+ }
+ ++it_outergroup;
+ }
+}
+
+void PivotTable::clearColumn(unsigned column)
+{
+ DEBUG_ENTER(__PRETTY_FUNCTION__);
+ DEBUG_OUTPUT(QString("Column %1").arg(column));
+
+ // iterate over outer groups
+ PivotGrid::iterator it_outergroup = m_grid.begin();
+ while ( it_outergroup != m_grid.end() )
+ {
+ // iterate over inner groups
+ PivotOuterGroup::iterator it_innergroup = (*it_outergroup).begin();
+ while ( it_innergroup != (*it_outergroup).end() )
+ {
+ // iterator over rows
+ PivotInnerGroup::iterator it_row = (*it_innergroup).begin();
+ while ( it_row != (*it_innergroup).end() )
+ {
+ if ( (*it_row)[eActual].count() <= column )
+ throw new MYMONEYEXCEPTION(QString("Column %1 out of grid range (%2) in PivotTable::accumulateColumn").arg(column).arg((*it_row)[eActual].count()));
+
+ (*it_row++)[eActual][column] = PivotCell();
+ }
+
+ ++it_innergroup;
+ }
+ ++it_outergroup;
+ }
+}
+
+void PivotTable::calculateColumnHeadings(void)
+{
+ DEBUG_ENTER(__PRETTY_FUNCTION__);
+
+ // one column for the opening balance
+ m_columnHeadings.append( "Opening" );
+
+ unsigned columnpitch = m_config_f.columnPitch();
+
+ // if this is a days-based report
+ if (m_config_f.isColumnsAreDays())
+ {
+ if ( columnpitch == 1 )
+ {
+ QDate columnDate = m_beginDate;
+ unsigned column = 1;
+ while ( column++ < m_numColumns )
+ {
+ QString heading = KGlobal::locale()->calendar()->monthName(columnDate.month(), columnDate.year(), true) + " " + QString::number(columnDate.day());
+ columnDate = columnDate.addDays(1);
+ m_columnHeadings.append( heading);
+ }
+ }
+ else
+ {
+ QDate day = m_beginDate;
+ QDate prv = m_beginDate;
+
+ // use the user's locale to determine the week's start
+ unsigned dow = (day.dayOfWeek() +8 -KGlobal::locale()->weekStartDay())%7;
+
+ while (day <= m_endDate)
+ {
+ if (((dow % columnpitch) == 0) || (day == m_endDate))
+ {
+ m_columnHeadings.append(QString("%1&nbsp;%2 - %3&nbsp;%4")
+ .arg(KGlobal::locale()->calendar()->monthName(prv.month(), prv.year(), true))
+ .arg(prv.day())
+ .arg(KGlobal::locale()->calendar()->monthName(day.month(), day.year(), true))
+ .arg(day.day()));
+ prv = day.addDays(1);
+ }
+ day = day.addDays(1);
+ dow++;
+ }
+ }
+ }
+
+ // else it's a months-based report
+ else
+ {
+ if ( columnpitch == 12 )
+ {
+ unsigned year = m_beginDate.year();
+ unsigned column = 1;
+ while ( column++ < m_numColumns )
+ m_columnHeadings.append(QString::number(year++));
+ }
+ else
+ {
+ unsigned year = m_beginDate.year();
+ bool includeyear = ( m_beginDate.year() != m_endDate.year() );
+ unsigned segment = ( m_beginDate.month() - 1 ) / columnpitch;
+ unsigned column = 1;
+ while ( column++ < m_numColumns )
+ {
+ QString heading = KGlobal::locale()->calendar()->monthName(1+segment*columnpitch, 2000, true);
+ if ( columnpitch != 1 )
+ heading += "-" + KGlobal::locale()->calendar()->monthName((1+segment)*columnpitch, 2000, true);
+ if ( includeyear )
+ heading += " " + QString::number(year);
+ m_columnHeadings.append( heading);
+ if ( ++segment >= 12/columnpitch )
+ {
+ segment -= 12/columnpitch;
+ ++year;
+ }
+ }
+ }
+ }
+}
+
+void PivotTable::createAccountRows(void)
+{
+ DEBUG_ENTER(__PRETTY_FUNCTION__);
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ QValueList<MyMoneyAccount> accounts;
+ file->accountList(accounts);
+
+ QValueList<MyMoneyAccount>::const_iterator it_account = accounts.begin();
+
+ while ( it_account != accounts.end() )
+ {
+ ReportAccount account = *it_account;
+
+ // only include this item if its account group is included in this report
+ // and if the report includes this account
+ if ( m_config_f.includes( *it_account ) )
+ {
+ DEBUG_OUTPUT(QString("Includes account %1").arg(account.name()));
+
+ // the row group is the account class (major account type)
+ QString outergroup = KMyMoneyUtils::accountTypeToString(account.accountGroup());
+ // place into the 'opening' column...
+ assignCell( outergroup, account, 0, MyMoneyMoney() );
+ }
+ ++it_account;
+ }
+}
+
+void PivotTable::calculateOpeningBalances( void )
+{
+ DEBUG_ENTER(__PRETTY_FUNCTION__);
+
+ // First, determine the inclusive dates of the report. Normally, that's just
+ // the begin & end dates of m_config_f. However, if either of those dates are
+ // blank, we need to use m_beginDate and/or m_endDate instead.
+ QDate from = m_config_f.fromDate();
+ QDate to = m_config_f.toDate();
+ if ( ! from.isValid() )
+ from = m_beginDate;
+ if ( ! to.isValid() )
+ to = m_endDate;
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ QValueList<MyMoneyAccount> accounts;
+ file->accountList(accounts);
+
+ QValueList<MyMoneyAccount>::const_iterator it_account = accounts.begin();
+
+ while ( it_account != accounts.end() )
+ {
+ ReportAccount account = *it_account;
+
+ // only include this item if its account group is included in this report
+ // and if the report includes this account
+ if ( m_config_f.includes( *it_account ) )
+ {
+
+ //do not include account if it is closed and it has no transactions in the report period
+ if(account.isClosed()) {
+ //check if the account has transactions for the report timeframe
+ MyMoneyTransactionFilter filter;
+ filter.addAccount(account.id());
+ filter.setDateFilter(m_beginDate, m_endDate);
+ filter.setReportAllSplits(false);
+ QValueList<MyMoneyTransaction> transactions = file->transactionList(filter);
+ //if a closed account has no transactions in that timeframe, do not include it
+ if(transactions.size() == 0 ) {
+ DEBUG_OUTPUT(QString("DOES NOT INCLUDE account %1").arg(account.name()));
+ ++it_account;
+ continue;
+ }
+ }
+
+ DEBUG_OUTPUT(QString("Includes account %1").arg(account.name()));
+ // the row group is the account class (major account type)
+ QString outergroup = KMyMoneyUtils::accountTypeToString(account.accountGroup());
+
+ // extract the balance of the account for the given begin date, which is
+ // the opening balance plus the sum of all transactions prior to the begin
+ // date
+
+ // this is in the underlying currency
+ MyMoneyMoney value = file->balance(account.id(), from.addDays(-1));
+
+ // place into the 'opening' column...
+ assignCell( outergroup, account, 0, value );
+ }
+ else
+ {
+ DEBUG_OUTPUT(QString("DOES NOT INCLUDE account %1").arg(account.name()));
+ }
+
+ ++it_account;
+ }
+}
+
+void PivotTable::calculateRunningSums( PivotInnerGroup::iterator& it_row)
+{
+ MyMoneyMoney runningsum = it_row.data()[eActual][0].calculateRunningSum(MyMoneyMoney(0,1));
+ unsigned column = 1;
+ while ( column < m_numColumns )
+ {
+ if ( it_row.data()[eActual].count() <= column )
+ throw new MYMONEYEXCEPTION(QString("Column %1 out of grid range (%2) in PivotTable::calculateRunningSums").arg(column).arg(it_row.data()[eActual].count()));
+
+ runningsum = it_row.data()[eActual][column].calculateRunningSum(runningsum);
+
+ ++column;
+ }
+}
+
+void PivotTable::calculateRunningSums( void )
+{
+ DEBUG_ENTER(__PRETTY_FUNCTION__);
+
+ m_runningSumsCalculated = true;
+
+ PivotGrid::iterator it_outergroup = m_grid.begin();
+ while ( it_outergroup != m_grid.end() )
+ {
+ PivotOuterGroup::iterator it_innergroup = (*it_outergroup).begin();
+ while ( it_innergroup != (*it_outergroup).end() )
+ {
+ PivotInnerGroup::iterator it_row = (*it_innergroup).begin();
+ while ( it_row != (*it_innergroup).end() )
+ {
+#if 0
+ MyMoneyMoney runningsum = it_row.data()[0];
+ unsigned column = 1;
+ while ( column < m_numColumns )
+ {
+ if ( it_row.data()[eActual].count() <= column )
+ throw new MYMONEYEXCEPTION(QString("Column %1 out of grid range (%2) in PivotTable::calculateRunningSums").arg(column).arg(it_row.data()[eActual].count()));
+
+ runningsum = ( it_row.data()[eActual][column] += runningsum );
+
+ ++column;
+ }
+#endif
+ calculateRunningSums( it_row );
+ ++it_row;
+ }
+ ++it_innergroup;
+ }
+ ++it_outergroup;
+ }
+}
+
+MyMoneyMoney PivotTable::cellBalance(const QString& outergroup, const ReportAccount& _row, unsigned _column, bool budget)
+{
+ if(m_runningSumsCalculated) {
+ qDebug("You must not call PivotTable::cellBalance() after calling PivotTable::calculateRunningSums()");
+ throw new MYMONEYEXCEPTION(QString("You must not call PivotTable::cellBalance() after calling PivotTable::calculateRunningSums()"));
+ }
+
+ // for budget reports, if this is the actual value, map it to the account which
+ // holds its budget
+ ReportAccount row = _row;
+ if ( !budget && m_config_f.hasBudget() )
+ {
+ QString newrow = m_budgetMap[row.id()];
+
+ // if there was no mapping found, then the budget report is not interested
+ // in this account.
+ if ( newrow.isEmpty() )
+ return MyMoneyMoney();
+
+ row = newrow;
+ }
+
+ // ensure the row already exists (and its parental hierarchy)
+ createRow( outergroup, row, true );
+
+ // Determine the inner group from the top-most parent account
+ QString innergroup( row.topParentName() );
+
+ if ( m_numColumns <= _column )
+ throw new MYMONEYEXCEPTION(QString("Column %1 out of m_numColumns range (%2) in PivotTable::cellBalance").arg(_column).arg(m_numColumns));
+ if ( m_grid[outergroup][innergroup][row][eActual].count() <= _column )
+ throw new MYMONEYEXCEPTION(QString("Column %1 out of grid range (%2) in PivotTable::cellBalance").arg(_column).arg(m_grid[outergroup][innergroup][row][eActual].count()));
+
+ MyMoneyMoney balance;
+ if ( budget )
+ balance = m_grid[outergroup][innergroup][row][eBudget][0].cellBalance(MyMoneyMoney());
+ else
+ balance = m_grid[outergroup][innergroup][row][eActual][0].cellBalance(MyMoneyMoney());
+
+ unsigned column = 1;
+ while ( column < _column)
+ {
+ if ( m_grid[outergroup][innergroup][row][eActual].count() <= column )
+ throw new MYMONEYEXCEPTION(QString("Column %1 out of grid range (%2) in PivotTable::cellBalance").arg(column).arg(m_grid[outergroup][innergroup][row][eActual].count()));
+
+ balance = m_grid[outergroup][innergroup][row][eActual][column].cellBalance(balance);
+
+ ++column;
+ }
+
+ return balance;
+}
+
+
+void PivotTable::calculateBudgetMapping( void )
+{
+ DEBUG_ENTER(__PRETTY_FUNCTION__);
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ // Only do this if there is at least one budget in the file
+ if ( file->countBudgets() )
+ {
+ // Select a budget
+ //
+ // It will choose the first budget in the list for the start year of the report if no budget is select
+ MyMoneyBudget budget = MyMoneyBudget();
+ //if no budget has been selected
+ if (m_config_f.budget() == "Any" ) {
+ QValueList<MyMoneyBudget> budgets = file->budgetList();
+ QValueList<MyMoneyBudget>::const_iterator budgets_it = budgets.begin();
+ while( budgets_it != budgets.end() ) {
+ //pick the first budget that matches the report start year
+ if( (*budgets_it).budgetStart().year() == QDate::currentDate().year() ) {
+ budget = file->budget( (*budgets_it).id());
+ break;
+ }
+ ++budgets_it;
+ }
+ //if we can't find a matching budget, take the first of the list
+ if( budget.id() == "" )
+ budget = budgets[0];
+
+ //assign the budget to the report
+ m_config_f.setBudget(budget.id(), m_config_f.isIncludingBudgetActuals());
+ } else {
+ //pick the budget selected by the user
+ budget = file->budget( m_config_f.budget());
+ }
+
+ // Dump the budget
+ //kdDebug(2) << "Budget " << budget.name() << ": " << endl;
+
+ // Go through all accounts in the system to build the mapping
+ QValueList<MyMoneyAccount> accounts;
+ file->accountList(accounts);
+ QValueList<MyMoneyAccount>::const_iterator it_account = accounts.begin();
+ while ( it_account != accounts.end() )
+ {
+ //include only the accounts selected for the report
+ if ( m_config_f.includes ( *it_account ) ) {
+ QString id = ( *it_account ).id();
+ QString acid = id;
+
+ // If the budget contains this account outright
+ if ( budget.contains ( id ) )
+ {
+ // Add it to the mapping
+ m_budgetMap[acid] = id;
+ // kdDebug(2) << ReportAccount(acid).debugName() << " self-maps / type =" << budget.account(id).budgetLevel() << endl;
+ }
+ // Otherwise, search for a parent account which includes sub-accounts
+ else
+ {
+ //if includeBudgetActuals, include all accounts regardless of whether in budget or not
+ if ( m_config_f.isIncludingBudgetActuals() ) {
+ m_budgetMap[acid] = id;
+ // kdDebug(2) << ReportAccount(acid).debugName() << " maps to " << ReportAccount(id).debugName() << endl;
+ }
+ do
+ {
+ id = file->account ( id ).parentAccountId();
+ if ( budget.contains ( id ) )
+ {
+ if ( budget.account ( id ).budgetSubaccounts() )
+ {
+ m_budgetMap[acid] = id;
+ // kdDebug(2) << ReportAccount(acid).debugName() << " maps to " << ReportAccount(id).debugName() << endl;
+ break;
+ }
+ }
+ }
+ while ( ! id.isEmpty() );
+ }
+ }
+ ++it_account;
+ } // end while looping through the accounts in the file
+
+ // Place the budget values into the budget grid
+ QValueList<MyMoneyBudget::AccountGroup> baccounts = budget.getaccounts();
+ QValueList<MyMoneyBudget::AccountGroup>::const_iterator it_bacc = baccounts.begin();
+ while ( it_bacc != baccounts.end() )
+ {
+ ReportAccount splitAccount = (*it_bacc).id();
+
+ //include the budget account only if it is included in the report
+ if ( m_config_f.includes ( splitAccount ) ) {
+ MyMoneyAccount::accountTypeE type = splitAccount.accountGroup();
+ QString outergroup = KMyMoneyUtils::accountTypeToString(type);
+
+ // reverse sign to match common notation for cash flow direction, only for expense/income splits
+ MyMoneyMoney reverse((splitAccount.accountType() == MyMoneyAccount::Expense) ? -1 : 1, 1);
+
+ const QMap<QDate, MyMoneyBudget::PeriodGroup>& periods = (*it_bacc).getPeriods();
+ MyMoneyMoney value = (*periods.begin()).amount() * reverse;
+ MyMoneyMoney price = MyMoneyMoney(1,1);
+ unsigned column = 1;
+
+ // based on the kind of budget it is, deal accordingly
+ switch ( (*it_bacc).budgetLevel() )
+ {
+ case MyMoneyBudget::AccountGroup::eYearly:
+ // divide the single yearly value by 12 and place it in each column
+ value /= MyMoneyMoney(12,1);
+ case MyMoneyBudget::AccountGroup::eNone:
+ case MyMoneyBudget::AccountGroup::eMax:
+ case MyMoneyBudget::AccountGroup::eMonthly:
+ // place the single monthly value in each column of the report
+ // only add the value if columns are monthly or longer
+ if(m_config_f.columnType() == MyMoneyReport::eBiMonths
+ || m_config_f.columnType() == MyMoneyReport::eMonths
+ || m_config_f.columnType() == MyMoneyReport::eYears
+ || m_config_f.columnType() == MyMoneyReport::eQuarters) {
+ //value = value * MyMoneyMoney(m_config_f.columnType(), 1);
+
+ QDate budgetDate = budget.budgetStart();
+ while ( column < m_numColumns && budget.budgetStart().addYears(1) > budgetDate ) {
+ //only show budget values if the budget year and the column date match
+ //no currency conversion is done here because that is done for all columns later
+ if(budgetDate > columnDate(column) ) {
+ ++column;
+ } else {
+ if(budgetDate >= m_beginDate.addDays(-m_beginDate.day() + 1)
+ && budgetDate <= m_endDate.addDays(m_endDate.daysInMonth() - m_endDate.day() )
+ && budgetDate > (columnDate(column).addMonths(-m_config_f.columnType()))) {
+ assignCell( outergroup, splitAccount, column, value, true /*budget*/ );
+ }
+ budgetDate = budgetDate.addMonths(1);
+ }
+ }
+ }
+ break;
+ case MyMoneyBudget::AccountGroup::eMonthByMonth:
+ // place each value in the appropriate column
+ // budget periods are supposed to come in order just like columns
+ {
+ QMap<QDate, MyMoneyBudget::PeriodGroup>::const_iterator it_period = periods.begin();
+ while ( it_period != periods.end() && column < m_numColumns)
+ {
+ if((*it_period).startDate() > columnDate(column) ) {
+ ++column;
+ } else {
+ switch(m_config_f.columnType()) {
+ case MyMoneyReport::eYears:
+ case MyMoneyReport::eBiMonths:
+ case MyMoneyReport::eQuarters:
+ case MyMoneyReport::eMonths:
+ {
+ if((*it_period).startDate() >= m_beginDate.addDays(-m_beginDate.day() + 1)
+ && (*it_period).startDate() <= m_endDate.addDays(m_endDate.daysInMonth() - m_endDate.day() )
+ && (*it_period).startDate() > (columnDate(column).addMonths(-m_config_f.columnType()))) {
+ //no currency conversion is done here because that is done for all columns later
+ value = (*it_period).amount() * reverse;
+ assignCell( outergroup, splitAccount, column, value, true /*budget*/ );
+ }
+ ++it_period;
+ break;
+ }
+ default:
+ break;
+ }
+ }
+ }
+ break;
+ }
+ }
+ }
+ ++it_bacc;
+ }
+ } // end if there was a budget
+}
+
+void PivotTable::convertToBaseCurrency( void )
+{
+ DEBUG_ENTER(__PRETTY_FUNCTION__);
+
+ int fraction = MyMoneyFile::instance()->baseCurrency().smallestAccountFraction();
+
+ PivotGrid::iterator it_outergroup = m_grid.begin();
+ while ( it_outergroup != m_grid.end() )
+ {
+ PivotOuterGroup::iterator it_innergroup = (*it_outergroup).begin();
+ while ( it_innergroup != (*it_outergroup).end() )
+ {
+ PivotInnerGroup::iterator it_row = (*it_innergroup).begin();
+ while ( it_row != (*it_innergroup).end() )
+ {
+ unsigned column = 1;
+ while ( column < m_numColumns )
+ {
+ if ( it_row.data()[eActual].count() <= column )
+ throw new MYMONEYEXCEPTION(QString("Column %1 out of grid range (%2) in PivotTable::convertToBaseCurrency").arg(column).arg(it_row.data()[eActual].count()));
+
+ QDate valuedate = columnDate(column);
+
+ //get base price for that date
+ MyMoneyMoney conversionfactor = it_row.key().baseCurrencyPrice(valuedate);
+
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i) {
+ if( m_rowTypeList[i] != eAverage ) {
+ //calculate base value
+ MyMoneyMoney oldval = it_row.data()[ m_rowTypeList[i] ][column];
+ MyMoneyMoney value = (oldval * conversionfactor).reduce();
+
+ //convert to lowest fraction
+ it_row.data()[ m_rowTypeList[i] ][column] = PivotCell(value.convert(fraction));
+
+ DEBUG_OUTPUT_IF(conversionfactor != MyMoneyMoney(1,1) ,QString("Factor of %1, value was %2, now %3").arg(conversionfactor).arg(DEBUG_SENSITIVE(oldval)).arg(DEBUG_SENSITIVE(it_row.data()[m_rowTypeList[i]][column].toDouble())));
+ }
+ }
+
+
+ ++column;
+ }
+ ++it_row;
+ }
+ ++it_innergroup;
+ }
+ ++it_outergroup;
+ }
+}
+
+void PivotTable::convertToDeepCurrency( void )
+{
+ DEBUG_ENTER(__PRETTY_FUNCTION__);
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ PivotGrid::iterator it_outergroup = m_grid.begin();
+ while ( it_outergroup != m_grid.end() )
+ {
+ PivotOuterGroup::iterator it_innergroup = (*it_outergroup).begin();
+ while ( it_innergroup != (*it_outergroup).end() )
+ {
+ PivotInnerGroup::iterator it_row = (*it_innergroup).begin();
+ while ( it_row != (*it_innergroup).end() )
+ {
+ unsigned column = 1;
+ while ( column < m_numColumns )
+ {
+ if ( it_row.data()[eActual].count() <= column )
+ throw new MYMONEYEXCEPTION(QString("Column %1 out of grid range (%2) in PivotTable::convertToDeepCurrency").arg(column).arg(it_row.data()[eActual].count()));
+
+ QDate valuedate = columnDate(column);
+
+ //get conversion factor for the account and date
+ MyMoneyMoney conversionfactor = it_row.key().deepCurrencyPrice(valuedate);
+
+ //use the fraction relevant to the account at hand
+ int fraction = it_row.key().currency().smallestAccountFraction();
+
+ //use base currency fraction if not initialized
+ if(fraction == -1)
+ fraction = file->baseCurrency().smallestAccountFraction();
+
+ //convert to deep currency
+ MyMoneyMoney oldval = it_row.data()[eActual][column];
+ MyMoneyMoney value = (oldval * conversionfactor).reduce();
+ //reduce to lowest fraction
+ it_row.data()[eActual][column] = PivotCell(value.convert(fraction));
+
+ //convert price data
+ if(m_config_f.isIncludingPrice()) {
+ MyMoneyMoney oldPriceVal = it_row.data()[ePrice][column];
+ MyMoneyMoney priceValue = (oldPriceVal * conversionfactor).reduce();
+ it_row.data()[ePrice][column] = PivotCell(priceValue.convert(10000));
+ }
+
+ DEBUG_OUTPUT_IF(conversionfactor != MyMoneyMoney(1,1) ,QString("Factor of %1, value was %2, now %3").arg(conversionfactor).arg(DEBUG_SENSITIVE(oldval)).arg(DEBUG_SENSITIVE(it_row.data()[eActual][column].toDouble())));
+
+ ++column;
+ }
+ ++it_row;
+ }
+ ++it_innergroup;
+ }
+ ++it_outergroup;
+ }
+}
+
+void PivotTable::calculateTotals( void )
+{
+ //insert the row type that is going to be used
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i)
+ m_grid.m_total[ m_rowTypeList[i] ].insert( m_grid.m_total[ m_rowTypeList[i] ].end(), m_numColumns, PivotCell() );
+
+ //
+ // Outer groups
+ //
+
+ // iterate over outer groups
+ PivotGrid::iterator it_outergroup = m_grid.begin();
+ while ( it_outergroup != m_grid.end() )
+ {
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i)
+ (*it_outergroup).m_total[ m_rowTypeList[i] ].insert( (*it_outergroup).m_total[ m_rowTypeList[i] ].end(), m_numColumns, PivotCell() );
+
+ //
+ // Inner Groups
+ //
+
+ PivotOuterGroup::iterator it_innergroup = (*it_outergroup).begin();
+ while ( it_innergroup != (*it_outergroup).end() )
+ {
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i)
+ (*it_innergroup).m_total[ m_rowTypeList[i] ].insert( (*it_innergroup).m_total[ m_rowTypeList[i] ].end(), m_numColumns, PivotCell() );
+ //
+ // Rows
+ //
+
+ PivotInnerGroup::iterator it_row = (*it_innergroup).begin();
+ while ( it_row != (*it_innergroup).end() )
+ {
+ //
+ // Columns
+ //
+
+ unsigned column = 1;
+ while ( column < m_numColumns )
+ {
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i) {
+ if ( it_row.data()[ m_rowTypeList[i] ].count() <= column )
+ throw new MYMONEYEXCEPTION(QString("Column %1 out of grid range (%2) in PivotTable::calculateTotals, row columns").arg(column).arg(it_row.data()[ m_rowTypeList[i] ].count()));
+ if ( (*it_innergroup).m_total[ m_rowTypeList[i] ].count() <= column )
+ throw new MYMONEYEXCEPTION(QString("Column %1 out of grid range (%2) in PivotTable::calculateTotals, inner group totals").arg(column).arg((*it_innergroup).m_total[ m_rowTypeList[i] ].count()));
+
+ //calculate total
+ MyMoneyMoney value = it_row.data()[ m_rowTypeList[i] ][column];
+ (*it_innergroup).m_total[ m_rowTypeList[i] ][column] += value;
+ (*it_row)[ m_rowTypeList[i] ].m_total += value;
+ }
+ ++column;
+ }
+ ++it_row;
+ }
+
+ //
+ // Inner Row Group Totals
+ //
+
+ unsigned column = 1;
+ while ( column < m_numColumns )
+ {
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i) {
+ if ( (*it_innergroup).m_total[ m_rowTypeList[i] ].count() <= column )
+ throw new MYMONEYEXCEPTION(QString("Column %1 out of grid range (%2) in PivotTable::calculateTotals, inner group totals").arg(column).arg((*it_innergroup).m_total[ m_rowTypeList[i] ].count()));
+ if ( (*it_outergroup).m_total[ m_rowTypeList[i] ].count() <= column )
+ throw new MYMONEYEXCEPTION(QString("Column %1 out of grid range (%2) in PivotTable::calculateTotals, outer group totals").arg(column).arg((*it_innergroup).m_total[ m_rowTypeList[i] ].count()));
+
+ //calculate totals
+ MyMoneyMoney value = (*it_innergroup).m_total[ m_rowTypeList[i] ][column];
+ (*it_outergroup).m_total[ m_rowTypeList[i] ][column] += value;
+ (*it_innergroup).m_total[ m_rowTypeList[i] ].m_total += value;
+ }
+ ++column;
+ }
+
+ ++it_innergroup;
+ }
+
+ //
+ // Outer Row Group Totals
+ //
+
+ bool invert_total = (*it_outergroup).m_inverted;
+ unsigned column = 1;
+ while ( column < m_numColumns )
+ {
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i) {
+ if ( m_grid.m_total[ m_rowTypeList[i] ].count() <= column )
+ throw new MYMONEYEXCEPTION(QString("Column %1 out of grid range (%2) in PivotTable::calculateTotals, grid totals").arg(column).arg((*it_innergroup).m_total[ m_rowTypeList[i] ].count()));
+
+ //calculate actual totals
+ MyMoneyMoney value = (*it_outergroup).m_total[ m_rowTypeList[i] ][column];
+ (*it_outergroup).m_total[ m_rowTypeList[i] ].m_total += value;
+
+ //so far the invert only applies to actual and budget
+ if ( invert_total
+ && m_rowTypeList[i] != eBudgetDiff
+ && m_rowTypeList[i] != eForecast)
+ value = -value;
+
+ m_grid.m_total[ m_rowTypeList[i] ][column] += value;
+ }
+ ++column;
+ }
+ ++it_outergroup;
+ }
+
+ //
+ // Report Totals
+ //
+
+ unsigned totalcolumn = 1;
+ while ( totalcolumn < m_numColumns )
+ {
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i) {
+ if ( m_grid.m_total[ m_rowTypeList[i] ].count() <= totalcolumn )
+ throw new MYMONEYEXCEPTION(QString("Total column %1 out of grid range (%2) in PivotTable::calculateTotals, grid totals").arg(totalcolumn).arg(m_grid.m_total[ m_rowTypeList[i] ].count()));
+
+ //calculate actual totals
+ MyMoneyMoney value = m_grid.m_total[ m_rowTypeList[i] ][totalcolumn];
+ m_grid.m_total[ m_rowTypeList[i] ].m_total += value;
+ }
+ ++totalcolumn;
+ }
+}
+
+void PivotTable::assignCell( const QString& outergroup, const ReportAccount& _row, unsigned column, MyMoneyMoney value, bool budget, bool stockSplit )
+{
+ DEBUG_ENTER(__PRETTY_FUNCTION__);
+ DEBUG_OUTPUT(QString("Parameters: %1,%2,%3,%4,%5").arg(outergroup).arg(_row.debugName()).arg(column).arg(DEBUG_SENSITIVE(value.toDouble())).arg(budget));
+
+ // for budget reports, if this is the actual value, map it to the account which
+ // holds its budget
+ ReportAccount row = _row;
+ if ( !budget && m_config_f.hasBudget() )
+ {
+ QString newrow = m_budgetMap[row.id()];
+
+ // if there was no mapping found, then the budget report is not interested
+ // in this account.
+ if ( newrow.isEmpty() )
+ return;
+
+ row = newrow;
+ }
+
+ // ensure the row already exists (and its parental hierarchy)
+ createRow( outergroup, row, true );
+
+ // Determine the inner group from the top-most parent account
+ QString innergroup( row.topParentName() );
+
+ if ( m_numColumns <= column )
+ throw new MYMONEYEXCEPTION(QString("Column %1 out of m_numColumns range (%2) in PivotTable::assignCell").arg(column).arg(m_numColumns));
+ if ( m_grid[outergroup][innergroup][row][eActual].count() <= column )
+ throw new MYMONEYEXCEPTION(QString("Column %1 out of grid range (%2) in PivotTable::assignCell").arg(column).arg(m_grid[outergroup][innergroup][row][eActual].count()));
+
+ if(!stockSplit) {
+ // Determine whether the value should be inverted before being placed in the row
+ if ( m_grid[outergroup].m_inverted )
+ value = -value;
+
+ // Add the value to the grid cell
+ if ( budget )
+ m_grid[outergroup][innergroup][row][eBudget][column] += value;
+ else
+ m_grid[outergroup][innergroup][row][eActual][column] += value;
+ } else {
+ m_grid[outergroup][innergroup][row][eActual][column] += PivotCell::stockSplit(value);
+ }
+
+}
+
+void PivotTable::createRow( const QString& outergroup, const ReportAccount& row, bool recursive )
+{
+ DEBUG_ENTER(__PRETTY_FUNCTION__);
+
+ // Determine the inner group from the top-most parent account
+ QString innergroup( row.topParentName() );
+
+ if ( ! m_grid.contains(outergroup) )
+ {
+ DEBUG_OUTPUT(QString("Adding group [%1]").arg(outergroup));
+ m_grid[outergroup] = PivotOuterGroup(m_numColumns);
+ }
+
+ if ( ! m_grid[outergroup].contains(innergroup) )
+ {
+ DEBUG_OUTPUT(QString("Adding group [%1][%2]").arg(outergroup).arg(innergroup));
+ m_grid[outergroup][innergroup] = PivotInnerGroup(m_numColumns);
+ }
+
+ if ( ! m_grid[outergroup][innergroup].contains(row) )
+ {
+ DEBUG_OUTPUT(QString("Adding row [%1][%2][%3]").arg(outergroup).arg(innergroup).arg(row.debugName()));
+ m_grid[outergroup][innergroup][row] = PivotGridRowSet(m_numColumns);
+
+ if ( recursive && !row.isTopLevel() )
+ createRow( outergroup, row.parent(), recursive );
+ }
+}
+
+unsigned PivotTable::columnValue(const QDate& _date) const
+{
+ if (m_config_f.isColumnsAreDays())
+ return (QDate().daysTo(_date));
+ else
+ return (_date.year() * 12 + _date.month());
+}
+
+QDate PivotTable::columnDate(int column) const
+{
+ if (m_config_f.isColumnsAreDays())
+ return m_beginDate.addDays( m_config_f.columnPitch() * column - 1 );
+ else
+ return m_beginDate.addMonths( m_config_f.columnPitch() * column ).addDays(-1);
+}
+
+QString PivotTable::renderCSV( void ) const
+{
+ DEBUG_ENTER(__PRETTY_FUNCTION__);
+
+ //
+ // Report Title
+ //
+
+ QString result = QString("\"Report: %1\"\n").arg(m_config_f.name());
+ if ( m_config_f.isConvertCurrency() )
+ result += i18n("All currencies converted to %1\n").arg(MyMoneyFile::instance()->baseCurrency().name());
+ else
+ result += i18n("All values shown in %1 unless otherwise noted\n").arg(MyMoneyFile::instance()->baseCurrency().name());
+
+ //
+ // Table Header
+ //
+
+ result += i18n("Account");
+
+ unsigned column = 1;
+ while ( column < m_numColumns )
+ result += QString(",%1").arg(QString(m_columnHeadings[column++]));
+
+ if ( m_config_f.isShowingRowTotals() )
+ result += QString(",%1").arg(i18n("Total"));
+
+ result += "\n";
+
+ int fraction = MyMoneyFile::instance()->baseCurrency().smallestAccountFraction();
+
+ //
+ // Outer groups
+ //
+
+ // iterate over outer groups
+ PivotGrid::const_iterator it_outergroup = m_grid.begin();
+ while ( it_outergroup != m_grid.end() )
+ {
+ //
+ // Outer Group Header
+ //
+
+ result += it_outergroup.key() + "\n";
+
+ //
+ // Inner Groups
+ //
+
+ PivotOuterGroup::const_iterator it_innergroup = (*it_outergroup).begin();
+ unsigned rownum = 0;
+ while ( it_innergroup != (*it_outergroup).end() )
+ {
+ //
+ // Rows
+ //
+
+ QString innergroupdata;
+ PivotInnerGroup::const_iterator it_row = (*it_innergroup).begin();
+ while ( it_row != (*it_innergroup).end() )
+ {
+ ReportAccount rowname = it_row.key();
+ int fraction = rowname.currency().smallestAccountFraction();
+
+ //
+ // Columns
+ //
+
+ QString rowdata;
+ unsigned column = 1;
+
+ bool isUsed = false;
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i)
+ isUsed |= it_row.data()[ m_rowTypeList[i] ][0].isUsed();
+
+ while ( column < m_numColumns ) {
+ //show columns
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i) {
+ isUsed |= it_row.data()[ m_rowTypeList[i] ][column].isUsed();
+ rowdata += QString(",\"%1\"").arg(it_row.data()[ m_rowTypeList[i] ][column].formatMoney(fraction, false));
+ }
+ column++;
+ }
+
+ if ( m_config_f.isShowingRowTotals() ) {
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i)
+ rowdata += QString(",\"%1\"").arg((*it_row)[ m_rowTypeList[i] ].m_total.formatMoney(fraction, false));
+ }
+
+ //
+ // Row Header
+ //
+
+ if(!rowname.isClosed() || isUsed) {
+ innergroupdata += "\"" + QString().fill(' ',rowname.hierarchyDepth() - 1) + rowname.name();
+
+ // if we don't convert the currencies to the base currency and the
+ // current row contains a foreign currency, then we append the currency
+ // to the name of the account
+ if (!m_config_f.isConvertCurrency() && rowname.isForeignCurrency() )
+ innergroupdata += QString(" (%1)").arg(rowname.currencyId());
+
+ innergroupdata += "\"";
+
+ if ( isUsed )
+ innergroupdata += rowdata;
+
+ innergroupdata += "\n";
+ }
+ ++it_row;
+ }
+
+ //
+ // Inner Row Group Totals
+ //
+
+ bool finishrow = true;
+ QString finalRow;
+ bool isUsed = false;
+ if ( m_config_f.detailLevel() == MyMoneyReport::eDetailAll && ((*it_innergroup).size() > 1 ))
+ {
+ // Print the individual rows
+ result += innergroupdata;
+
+ if ( m_config_f.isShowingColumnTotals() )
+ {
+ // Start the TOTALS row
+ finalRow = i18n("Total");
+ isUsed = true;
+ }
+ else
+ {
+ ++rownum;
+ finishrow = false;
+ }
+ }
+ else
+ {
+ // Start the single INDIVIDUAL ACCOUNT row
+ ReportAccount rowname = (*it_innergroup).begin().key();
+ isUsed |= !rowname.isClosed();
+
+ finalRow = "\"" + QString().fill(' ',rowname.hierarchyDepth() - 1) + rowname.name();
+ if (!m_config_f.isConvertCurrency() && rowname.isForeignCurrency() )
+ finalRow += QString(" (%1)").arg(rowname.currencyId());
+ finalRow += "\"";
+ }
+
+ // Finish the row started above, unless told not to
+ if ( finishrow )
+ {
+ unsigned column = 1;
+
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i)
+ isUsed |= (*it_innergroup).m_total[ m_rowTypeList[i] ][0].isUsed();
+
+ while ( column < m_numColumns )
+ {
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i) {
+ isUsed |= (*it_innergroup).m_total[ m_rowTypeList[i] ][column].isUsed();
+ finalRow += QString(",\"%1\"").arg((*it_innergroup).m_total[ m_rowTypeList[i] ][column].formatMoney(fraction, false));
+ }
+ column++;
+ }
+
+ if ( m_config_f.isShowingRowTotals() ) {
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i)
+ finalRow += QString(",\"%1\"").arg((*it_innergroup).m_total[ m_rowTypeList[i] ].m_total.formatMoney(fraction, false));
+ }
+
+ finalRow += "\n";
+ }
+
+ if(isUsed)
+ {
+ result += finalRow;
+ ++rownum;
+ }
+ ++it_innergroup;
+ }
+
+ //
+ // Outer Row Group Totals
+ //
+
+ if ( m_config_f.isShowingColumnTotals() )
+ {
+ result += QString("%1 %2").arg(i18n("Total")).arg(it_outergroup.key());
+ unsigned column = 1;
+ while ( column < m_numColumns ) {
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i)
+ result += QString(",\"%1\"").arg((*it_outergroup).m_total[ m_rowTypeList[i] ][column].formatMoney(fraction, false));
+
+ column++;
+ }
+
+ if ( m_config_f.isShowingRowTotals() ) {
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i)
+ result += QString(",\"%1\"").arg((*it_outergroup).m_total[ m_rowTypeList[i] ].m_total.formatMoney(fraction, false));
+ }
+
+ result += "\n";
+ }
+ ++it_outergroup;
+ }
+
+ //
+ // Report Totals
+ //
+
+ if ( m_config_f.isShowingColumnTotals() )
+ {
+ result += i18n("Grand Total");
+ unsigned totalcolumn = 1;
+ while ( totalcolumn < m_numColumns ) {
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i)
+ result += QString(",\"%1\"").arg(m_grid.m_total[ m_rowTypeList[i] ][totalcolumn].formatMoney(fraction, false));
+
+ totalcolumn++;
+ }
+
+ if ( m_config_f.isShowingRowTotals() ) {
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i)
+ result += QString(",\"%1\"").arg(m_grid.m_total[ m_rowTypeList[i] ].m_total.formatMoney(fraction, false));
+ }
+
+ result += "\n";
+ }
+
+ return result;
+}
+
+QString PivotTable::renderHTML( void ) const
+{
+ DEBUG_ENTER(__PRETTY_FUNCTION__);
+
+ QString colspan = QString(" colspan=\"%1\"").arg(m_numColumns + 1 + (m_config_f.isShowingRowTotals() ? 1 : 0) );
+
+ //
+ // Report Title
+ //
+
+ QString result = QString("<h2 class=\"report\">%1</h2>\n").arg(m_config_f.name());
+
+ //actual dates of the report
+ result += QString("<div class=\"subtitle\">");
+ result += i18n("Report date range", "%1 through %2").arg(KGlobal::locale()->formatDate(m_config_f.fromDate(), true)).arg(KGlobal::locale()->formatDate(m_config_f.toDate(), true));
+ result += QString("</div>\n");
+ result += QString("<div class=\"gap\">&nbsp;</div>\n");
+
+ //currency conversion message
+ result += QString("<div class=\"subtitle\">");
+ if ( m_config_f.isConvertCurrency() )
+ result += i18n("All currencies converted to %1").arg(MyMoneyFile::instance()->baseCurrency().name());
+ else
+ result += i18n("All values shown in %1 unless otherwise noted").arg(MyMoneyFile::instance()->baseCurrency().name());
+ result += QString("</div>\n");
+ result += QString("<div class=\"gap\">&nbsp;</div>\n");
+
+ // setup a leftborder for better readability of budget vs actual reports
+ QString leftborder;
+ if (m_rowTypeList.size() > 1)
+ leftborder = " class=\"leftborder\"";
+
+ //
+ // Table Header
+ //
+ result += QString("\n\n<table class=\"report\" cellspacing=\"0\">\n"
+ "<thead><tr class=\"itemheader\">\n<th>%1</th>").arg(i18n("Account"));
+
+ QString headerspan;
+ int span = m_rowTypeList.size();
+
+ headerspan = QString(" colspan=\"%1\"").arg(span);
+
+ unsigned column = 1;
+ while ( column < m_numColumns )
+ result += QString("<th%1>%2</th>").arg(headerspan,QString(m_columnHeadings[column++]).replace(QRegExp(" "),"<br>"));
+
+ if ( m_config_f.isShowingRowTotals() )
+ result += QString("<th%1>%2</th>").arg(headerspan).arg(i18n("Total"));
+
+ result += "</tr></thead>\n";
+
+ //
+ // Header for multiple columns
+ //
+ if ( span > 1 )
+ {
+ result += "<tr><td></td>";
+
+ unsigned column = 1;
+ while ( column < m_numColumns )
+ {
+ QString lb;
+ if(column != 1)
+ lb = leftborder;
+
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i) {
+ result += QString("<td%2>%1</td>")
+ .arg(i18n( m_columnTypeHeaderList[i] ))
+ .arg(i == 0 ? lb : QString() );
+ }
+ column++;
+ }
+ if ( m_config_f.isShowingRowTotals() ) {
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i) {
+ result += QString("<td%2>%1</td>")
+ .arg(i18n( m_columnTypeHeaderList[i] ))
+ .arg(i == 0 ? leftborder : QString() );
+ }
+ }
+ result += "</tr>";
+ }
+
+
+ // Skip the body of the report if the report only calls for totals to be shown
+ if ( m_config_f.detailLevel() != MyMoneyReport::eDetailTotal )
+ {
+ //
+ // Outer groups
+ //
+
+ // Need to sort the outergroups. They can't always be sorted by name. So we create a list of
+ // map iterators, and sort that. Then we'll iterate through the map iterators and use those as
+ // before.
+ //
+ // I hope this doesn't bog the performance of reports, given that we're copying the entire report
+ // data. If this is a perf hit, we could change to storing outergroup pointers, I think.
+ QValueList<PivotOuterGroup> outergroups;
+ PivotGrid::const_iterator it_outergroup_map = m_grid.begin();
+ while ( it_outergroup_map != m_grid.end() )
+ {
+ outergroups.push_back(it_outergroup_map.data());
+
+ // copy the name into the outergroup, because we will now lose any association with
+ // the map iterator
+ outergroups.back().m_displayName = it_outergroup_map.key();
+
+ ++it_outergroup_map;
+ }
+ qHeapSort(outergroups);
+
+ QValueList<PivotOuterGroup>::const_iterator it_outergroup = outergroups.begin();
+ while ( it_outergroup != outergroups.end() )
+ {
+ //
+ // Outer Group Header
+ //
+
+ result += QString("<tr class=\"sectionheader\"><td class=\"left\"%1>%2</td></tr>\n").arg(colspan).arg((*it_outergroup).m_displayName);
+
+ // Skip the inner groups if the report only calls for outer group totals to be shown
+ if ( m_config_f.detailLevel() != MyMoneyReport::eDetailGroup )
+ {
+
+ //
+ // Inner Groups
+ //
+
+ PivotOuterGroup::const_iterator it_innergroup = (*it_outergroup).begin();
+ unsigned rownum = 0;
+ while ( it_innergroup != (*it_outergroup).end() )
+ {
+ //
+ // Rows
+ //
+
+ QString innergroupdata;
+ PivotInnerGroup::const_iterator it_row = (*it_innergroup).begin();
+ while ( it_row != (*it_innergroup).end() )
+ {
+ //
+ // Columns
+ //
+
+ QString rowdata;
+ unsigned column = 1;
+ bool isUsed = it_row.data()[eActual][0].isUsed();
+ while ( column < m_numColumns )
+ {
+ QString lb;
+ if(column != 1)
+ lb = leftborder;
+
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i) {
+ rowdata += QString("<td%2>%1</td>")
+ .arg(coloredAmount(it_row.data()[ m_rowTypeList[i] ][column]))
+ .arg(i == 0 ? lb : QString());
+
+ isUsed |= it_row.data()[ m_rowTypeList[i] ][column].isUsed();
+ }
+
+ column++;
+ }
+
+ if ( m_config_f.isShowingRowTotals() )
+ {
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i) {
+ rowdata += QString("<td%2>%1</td>")
+ .arg(coloredAmount(it_row.data()[ m_rowTypeList[i] ].m_total))
+ .arg(i == 0 ? leftborder : QString());
+ }
+ }
+
+ //
+ // Row Header
+ //
+
+ ReportAccount rowname = it_row.key();
+
+ // don't show closed accounts if they have not been used
+ if(!rowname.isClosed() || isUsed) {
+ innergroupdata += QString("<tr class=\"row-%1\"%2><td%3 class=\"left\" style=\"text-indent: %4.0em\">%5%6</td>")
+ .arg(rownum & 0x01 ? "even" : "odd")
+ .arg(rowname.isTopLevel() ? " id=\"topparent\"" : "")
+ .arg("") //.arg((*it_row).m_total.isZero() ? colspan : "") // colspan the distance if this row will be blank
+ .arg(rowname.hierarchyDepth() - 1)
+ .arg(rowname.name().replace(QRegExp(" "), "&nbsp;"))
+ .arg((m_config_f.isConvertCurrency() || !rowname.isForeignCurrency() )?QString():QString(" (%1)").arg(rowname.currency().id()));
+
+ // Don't print this row if it's going to be all zeros
+ // TODO: Uncomment this, and deal with the case where the data
+ // is zero, but the budget is non-zero
+ //if ( !(*it_row).m_total.isZero() )
+ innergroupdata += rowdata;
+
+ innergroupdata += "</tr>\n";
+ }
+
+ ++it_row;
+ }
+
+ //
+ // Inner Row Group Totals
+ //
+
+ bool finishrow = true;
+ QString finalRow;
+ bool isUsed = false;
+ if ( m_config_f.detailLevel() == MyMoneyReport::eDetailAll && ((*it_innergroup).size() > 1 ))
+ {
+ // Print the individual rows
+ result += innergroupdata;
+
+ if ( m_config_f.isShowingColumnTotals() )
+ {
+ // Start the TOTALS row
+ finalRow = QString("<tr class=\"row-%1\" id=\"subtotal\"><td class=\"left\">&nbsp;&nbsp;%2</td>")
+ .arg(rownum & 0x01 ? "even" : "odd")
+ .arg(i18n("Total"));
+ // don't suppress display of totals
+ isUsed = true;
+ }
+ else {
+ finishrow = false;
+ ++rownum;
+ }
+ }
+ else
+ {
+ // Start the single INDIVIDUAL ACCOUNT row
+ // FIXME: There is a bit of a bug here with class=leftX. There's only a finite number
+ // of classes I can define in the .CSS file, and the user can theoretically nest deeper.
+ // The right solution is to use style=Xem, and calculate X. Let's see if anyone complains
+ // first :) Also applies to the row header case above.
+ // FIXED: I found it in one of my reports and changed it to the proposed method.
+ // This works for me (ipwizard)
+ ReportAccount rowname = (*it_innergroup).begin().key();
+ isUsed |= !rowname.isClosed();
+ finalRow = QString("<tr class=\"row-%1\"%2><td class=\"left\" style=\"text-indent: %3.0em;\">%5%6</td>")
+ .arg(rownum & 0x01 ? "even" : "odd")
+ .arg( m_config_f.detailLevel() == MyMoneyReport::eDetailAll ? "id=\"solo\"" : "" )
+ .arg(rowname.hierarchyDepth() - 1)
+ .arg(rowname.name().replace(QRegExp(" "), "&nbsp;"))
+ .arg((m_config_f.isConvertCurrency() || !rowname.isForeignCurrency() )?QString():QString(" (%1)").arg(rowname.currency().id()));
+ }
+
+ // Finish the row started above, unless told not to
+ if ( finishrow )
+ {
+ unsigned column = 1;
+ isUsed |= (*it_innergroup).m_total[eActual][0].isUsed();
+ while ( column < m_numColumns )
+ {
+ QString lb;
+ if(column != 1)
+ lb = leftborder;
+
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i) {
+ finalRow += QString("<td%2>%1</td>")
+ .arg(coloredAmount((*it_innergroup).m_total[ m_rowTypeList[i] ][column]))
+ .arg(i == 0 ? lb : QString());
+ isUsed |= (*it_innergroup).m_total[ m_rowTypeList[i] ][column].isUsed();
+ }
+
+ column++;
+ }
+
+ if ( m_config_f.isShowingRowTotals() )
+ {
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i) {
+ finalRow += QString("<td%2>%1</td>")
+ .arg(coloredAmount((*it_innergroup).m_total[ m_rowTypeList[i] ].m_total))
+ .arg(i == 0 ? leftborder : QString());
+ }
+ }
+
+ finalRow += "</tr>\n";
+ if(isUsed) {
+ result += finalRow;
+ ++rownum;
+ }
+ }
+
+ ++it_innergroup;
+
+ } // end while iterating on the inner groups
+
+ } // end if detail level is not "group"
+
+ //
+ // Outer Row Group Totals
+ //
+
+ if ( m_config_f.isShowingColumnTotals() )
+ {
+ result += QString("<tr class=\"sectionfooter\"><td class=\"left\">%1&nbsp;%2</td>").arg(i18n("Total")).arg((*it_outergroup).m_displayName);
+ unsigned column = 1;
+ while ( column < m_numColumns )
+ {
+ QString lb;
+ if(column != 1)
+ lb = leftborder;
+
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i) {
+ result += QString("<td%2>%1</td>")
+ .arg(coloredAmount((*it_outergroup).m_total[ m_rowTypeList[i] ][column]))
+ .arg(i == 0 ? lb : QString());
+ }
+
+ column++;
+ }
+
+ if ( m_config_f.isShowingRowTotals() )
+ {
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i) {
+ result += QString("<td%2>%1</td>")
+ .arg(coloredAmount((*it_outergroup).m_total[ m_rowTypeList[i] ].m_total))
+ .arg(i == 0 ? leftborder : QString());
+ }
+ }
+ result += "</tr>\n";
+ }
+
+ ++it_outergroup;
+
+ } // end while iterating on the outergroups
+
+ } // end if detail level is not "total"
+
+ //
+ // Report Totals
+ //
+
+ if ( m_config_f.isShowingColumnTotals() )
+ {
+ result += QString("<tr class=\"spacer\"><td>&nbsp;</td></tr>\n");
+ result += QString("<tr class=\"reportfooter\"><td class=\"left\">%1</td>").arg(i18n("Grand Total"));
+ unsigned totalcolumn = 1;
+ while ( totalcolumn < m_numColumns )
+ {
+ QString lb;
+ if(totalcolumn != 1)
+ lb = leftborder;
+
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i) {
+ result += QString("<td%2>%1</td>")
+ .arg(coloredAmount(m_grid.m_total[ m_rowTypeList[i] ][totalcolumn]))
+ .arg(i == 0 ? lb : QString());
+ }
+
+ totalcolumn++;
+ }
+
+ if ( m_config_f.isShowingRowTotals() )
+ {
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i) {
+ result += QString("<td%2>%1</td>")
+ .arg(coloredAmount(m_grid.m_total[ m_rowTypeList[i] ].m_total))
+ .arg(i == 0 ? leftborder : QString());
+ }
+ }
+
+ result += "</tr>\n";
+ }
+
+ result += QString("<tr class=\"spacer\"><td>&nbsp;</td></tr>\n");
+ result += QString("<tr class=\"spacer\"><td>&nbsp;</td></tr>\n");
+ result += "</table>\n";
+
+ return result;
+}
+
+void PivotTable::dump( const QString& file, const QString& /* context */) const
+{
+ QFile g( file );
+ g.open( IO_WriteOnly );
+ QTextStream(&g) << renderHTML();
+ g.close();
+}
+
+#ifdef HAVE_KDCHART
+void PivotTable::drawChart( KReportChartView& _view ) const
+{
+#if 1 // make this "#if 1" if you want to play with the axis settings
+ // not sure if 0 is X and 1 is Y.
+ KDChartAxisParams xAxisParams, yAxisParams;
+ KDChartAxisParams::deepCopy(xAxisParams, _view.params()->axisParams(0));
+ KDChartAxisParams::deepCopy(yAxisParams, _view.params()->axisParams(1));
+
+ // modify axis settings here
+ xAxisParams.setAxisLabelsFontMinSize(12);
+ xAxisParams.setAxisLabelsFontRelSize(20);
+ yAxisParams.setAxisLabelsFontMinSize(12);
+ yAxisParams.setAxisLabelsFontRelSize(20);
+
+ _view.params()->setAxisParams( 0, xAxisParams );
+ _view.params()->setAxisParams( 1, yAxisParams );
+
+#endif
+ _view.params()->setLegendFontRelSize(20);
+ _view.params()->setLegendTitleFontRelSize(24);
+ _view.params()->setLegendTitleText(i18n("Legend"));
+
+ _view.params()->setAxisShowGrid(0,m_config_f.isChartGridLines());
+ _view.params()->setAxisShowGrid(1,m_config_f.isChartGridLines());
+ _view.params()->setPrintDataValues(m_config_f.isChartDataLabels());
+
+ // whether to limit the chart to use series totals only. Used for reports which only
+ // show one dimension (pie).
+ bool seriesTotals = false;
+
+ // whether series (rows) are accounts (true) or months (false). This causes a lot
+ // of complexity in the charts. The problem is that circular reports work best with
+ // an account in a COLUMN, while line/bar prefer it in a ROW.
+ bool accountSeries = true;
+
+ //what values should be shown
+ bool showBudget = m_config_f.hasBudget();
+ bool showForecast = m_config_f.isIncludingForecast();
+ bool showActual = false;
+ if( (m_config_f.isIncludingBudgetActuals()) || ( !showBudget && !showForecast) )
+ showActual = true;
+
+ _view.params()->setLineWidth( m_config_f.chartLineWidth() );
+
+ switch( m_config_f.chartType() )
+ {
+ case MyMoneyReport::eChartNone:
+ case MyMoneyReport::eChartEnd:
+ case MyMoneyReport::eChartLine:
+ _view.params()->setChartType( KDChartParams::Line );
+ _view.params()->setAxisDatasets( 0,0 );
+ break;
+ case MyMoneyReport::eChartBar:
+ _view.params()->setChartType( KDChartParams::Bar );
+ _view.params()->setBarChartSubType( KDChartParams::BarNormal );
+ break;
+ case MyMoneyReport::eChartStackedBar:
+ _view.params()->setChartType( KDChartParams::Bar );
+ _view.params()->setBarChartSubType( KDChartParams::BarStacked );
+ break;
+ case MyMoneyReport::eChartPie:
+ _view.params()->setChartType( KDChartParams::Pie );
+ // Charts should only be 3D if this adds any information
+ _view.params()->setThreeDPies( false );
+ accountSeries = false;
+ seriesTotals = true;
+ break;
+ case MyMoneyReport::eChartRing:
+ _view.params()->setChartType( KDChartParams::Ring );
+ _view.params()->setRelativeRingThickness( true );
+ accountSeries = false;
+ break;
+ }
+
+ // For onMouseOver events, we want to activate mouse tracking
+ _view.setMouseTracking( true );
+
+ //
+ // In KDChart parlance, a 'series' (or row) is an account (or accountgroup, etc)
+ // and an 'item' (or column) is a month
+ //
+ unsigned r;
+ unsigned c;
+ if ( accountSeries )
+ {
+ r = 1;
+ c = m_numColumns - 1;
+ }
+ else
+ {
+ c = 1;
+ r = m_numColumns - 1;
+ }
+ KDChartTableData data( r,c );
+
+ // The KReportChartView widget needs to know whether the legend
+ // corresponds to rows or columns
+ _view.setAccountSeries( accountSeries );
+
+ // Set up X axis labels (ie "abscissa" to use the technical term)
+ QStringList& abscissaNames = _view.abscissaNames();
+ abscissaNames.clear();
+ if ( accountSeries )
+ {
+ unsigned column = 1;
+ while ( column < m_numColumns ) {
+ abscissaNames += QString(m_columnHeadings[column++]).replace("&nbsp;", " ");
+ }
+ }
+ else
+ {
+ // we will set these up while putting in the chart values.
+ }
+
+ switch ( m_config_f.detailLevel() )
+ {
+ case MyMoneyReport::eDetailNone:
+ case MyMoneyReport::eDetailEnd:
+ case MyMoneyReport::eDetailAll:
+ {
+ unsigned rowNum = 0;
+
+ // iterate over outer groups
+ PivotGrid::const_iterator it_outergroup = m_grid.begin();
+ while ( it_outergroup != m_grid.end() )
+ {
+
+ // iterate over inner groups
+ PivotOuterGroup::const_iterator it_innergroup = (*it_outergroup).begin();
+ while ( it_innergroup != (*it_outergroup).end() )
+ {
+ //
+ // Rows
+ //
+ QString innergroupdata;
+ PivotInnerGroup::const_iterator it_row = (*it_innergroup).begin();
+ while ( it_row != (*it_innergroup).end() )
+ {
+ //Do not include investments accounts in the chart because they are merely container of stock and other accounts
+ if( it_row.key().accountType() != MyMoneyAccount::Investment) {
+ //iterate row types
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i) {
+ //skip the budget difference rowset
+ if(m_rowTypeList[i] != eBudgetDiff ) {
+ rowNum = drawChartRowSet(rowNum, seriesTotals, accountSeries, data, it_row.data(), m_rowTypeList[i]);
+
+ //only show the column type in the header if there is more than one type
+ if(m_rowTypeList.size() > 1) {
+ _view.params()->setLegendText( rowNum-1, m_columnTypeHeaderList[i] + " - " + it_row.key().name() );
+ } else {
+ _view.params()->setLegendText( rowNum-1, it_row.key().name() );
+ }
+ }
+ }
+ }
+ ++it_row;
+ }
+ ++it_innergroup;
+ }
+ ++it_outergroup;
+ }
+ }
+ break;
+
+ case MyMoneyReport::eDetailTop:
+ {
+ unsigned rowNum = 0;
+
+ // iterate over outer groups
+ PivotGrid::const_iterator it_outergroup = m_grid.begin();
+ while ( it_outergroup != m_grid.end() )
+ {
+
+ // iterate over inner groups
+ PivotOuterGroup::const_iterator it_innergroup = (*it_outergroup).begin();
+ while ( it_innergroup != (*it_outergroup).end() )
+ {
+ //iterate row types
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i) {
+ //skip the budget difference rowset
+ if(m_rowTypeList[i] != eBudgetDiff ) {
+ rowNum = drawChartRowSet(rowNum, seriesTotals, accountSeries, data, (*it_innergroup).m_total, m_rowTypeList[i]);
+
+ //only show the column type in the header if there is more than one type
+ if(m_rowTypeList.size() > 1) {
+ _view.params()->setLegendText( rowNum-1, m_columnTypeHeaderList[i] + " - " + it_innergroup.key() );
+ } else {
+ _view.params()->setLegendText( rowNum-1, it_innergroup.key() );
+ }
+ }
+ }
+ ++it_innergroup;
+ }
+ ++it_outergroup;
+ }
+ }
+ break;
+
+ case MyMoneyReport::eDetailGroup:
+ {
+ unsigned rowNum = 0;
+
+ // iterate over outer groups
+ PivotGrid::const_iterator it_outergroup = m_grid.begin();
+ while ( it_outergroup != m_grid.end() )
+ {
+ //iterate row types
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i) {
+ //skip the budget difference rowset
+ if(m_rowTypeList[i] != eBudgetDiff ) {
+ rowNum = drawChartRowSet(rowNum, seriesTotals, accountSeries, data, (*it_outergroup).m_total, m_rowTypeList[i]);
+
+ //only show the column type in the header if there is more than one type
+ if(m_rowTypeList.size() > 1) {
+ _view.params()->setLegendText( rowNum-1, m_columnTypeHeaderList[i] + " - " + it_outergroup.key() );
+ } else {
+ _view.params()->setLegendText( rowNum-1, it_outergroup.key() );
+ }
+ }
+ }
+ ++it_outergroup;
+ }
+
+ //if selected, show totals too
+ if (m_config_f.isShowingRowTotals())
+ {
+ //iterate row types
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i) {
+ //skip the budget difference rowset
+ if(m_rowTypeList[i] != eBudgetDiff ) {
+ rowNum = drawChartRowSet(rowNum, seriesTotals, accountSeries, data, m_grid.m_total, m_rowTypeList[i]);
+
+ //only show the column type in the header if there is more than one type
+ if(m_rowTypeList.size() > 1) {
+ _view.params()->setLegendText( rowNum-1, m_columnTypeHeaderList[i] + " - " + i18n("Total") );
+ } else {
+ _view.params()->setLegendText( rowNum-1, i18n("Total") );
+ }
+ }
+ }
+ }
+ }
+ break;
+
+ case MyMoneyReport::eDetailTotal:
+ {
+ unsigned rowNum = 0;
+
+ //iterate row types
+ for(unsigned i = 0; i < m_rowTypeList.size(); ++i) {
+ //skip the budget difference rowset
+ if(m_rowTypeList[i] != eBudgetDiff ) {
+ rowNum = drawChartRowSet(rowNum, seriesTotals, accountSeries, data, m_grid.m_total, m_rowTypeList[i]);
+
+ //only show the column type in the header if there is more than one type
+ if(m_rowTypeList.size() > 1) {
+ _view.params()->setLegendText( rowNum-1, m_columnTypeHeaderList[i] + " - " + i18n("Total") );
+ } else {
+ _view.params()->setLegendText( rowNum-1, i18n("Total") );
+ }
+ }
+ }
+ }
+ break;
+ }
+
+ _view.setNewData(data);
+
+ // make sure to show only the required number of fractional digits on the labels of the graph
+ _view.params()->setDataValuesCalc(0, MyMoneyMoney::denomToPrec(MyMoneyFile::instance()->baseCurrency().smallestAccountFraction()));
+ _view.refreshLabels();
+
+#if 0
+ // I have not been able to get this to work (ace)
+
+ //
+ // Set line to dashed for the future
+ //
+
+ if ( accountSeries )
+ {
+ // the first column of report which represents a date in the future, or one past the
+ // last column if all columns are in the present day. Only relevant when accountSeries==true
+ unsigned futurecolumn = columnValue(QDate::currentDate()) - columnValue(m_beginDate) + 1;
+
+ // kdDebug(2) << "futurecolumn: " << futurecolumn << endl;
+ // kdDebug(2) << "m_numColumns: " << m_numColumns << endl;
+
+ // Properties for line charts whose values are in the future.
+ KDChartPropertySet propSetFutureValue("future value", KDChartParams::KDCHART_PROPSET_NORMAL_DATA);
+ propSetFutureValue.setLineStyle(KDChartPropertySet::OwnID, Qt::DotLine);
+ const int idPropFutureValue = _view.params()->registerProperties(propSetFutureValue);
+
+ for(int col = futurecolumn; col < m_numColumns; ++col) {
+ _view.setProperty(0, col, idPropFutureValue);
+ }
+
+ }
+#endif
+}
+#else
+void PivotTable::drawChart( KReportChartView& ) const { }
+#endif
+
+unsigned PivotTable::drawChartRowSet(unsigned rowNum, const bool seriesTotals, const bool accountSeries, KDChartTableData& data, const PivotGridRowSet& rowSet, const ERowType rowType ) const
+{
+ //only add a row if one has been added before
+ // TODO: This is inefficient. Really we should total up how many rows
+ // there will be and allocate it all at once.
+ if(rowNum > 0) {
+ if ( accountSeries )
+ data.expand( rowNum+1, m_numColumns-1 );
+ else
+ data.expand( m_numColumns-1, rowNum+1 );
+ }
+
+ // Columns
+ if ( seriesTotals )
+ {
+ if ( accountSeries )
+ data.setCell( rowNum, 0, rowSet[rowType].m_total.toDouble() );
+ else
+ data.setCell( 0, rowNum, rowSet[rowType].m_total.toDouble() );
+ }
+ else
+ {
+ unsigned column = 1;
+ while ( column < m_numColumns )
+ {
+ if ( accountSeries )
+ data.setCell( rowNum, column-1, rowSet[rowType][column].toDouble() );
+ else
+ data.setCell( column-1, rowNum, rowSet[rowType][column].toDouble() );
+ ++column;
+ }
+ }
+
+ return ++rowNum;
+}
+
+QString PivotTable::coloredAmount(const MyMoneyMoney& amount, const QString& currencySymbol, int prec) const
+{
+ QString result;
+ if( amount.isNegative() )
+ result += QString("<font color=\"rgb(%1,%2,%3)\">")
+ .arg(KMyMoneyGlobalSettings::listNegativeValueColor().red())
+ .arg(KMyMoneyGlobalSettings::listNegativeValueColor().green())
+ .arg(KMyMoneyGlobalSettings::listNegativeValueColor().blue());
+ result += amount.formatMoney(currencySymbol, prec);
+ if( amount.isNegative() )
+ result += QString("</font>");
+ return result;
+}
+
+void PivotTable::calculateBudgetDiff(void)
+{
+ PivotGrid::iterator it_outergroup = m_grid.begin();
+ while ( it_outergroup != m_grid.end() )
+ {
+ PivotOuterGroup::iterator it_innergroup = (*it_outergroup).begin();
+ while ( it_innergroup != (*it_outergroup).end() )
+ {
+ PivotInnerGroup::iterator it_row = (*it_innergroup).begin();
+ while ( it_row != (*it_innergroup).end() )
+ {
+ unsigned column = 1;
+ switch( it_row.key().accountGroup() )
+ {
+ case MyMoneyAccount::Income:
+ case MyMoneyAccount::Asset:
+ while ( column < m_numColumns ) {
+ it_row.data()[eBudgetDiff][column] = it_row.data()[eActual][column] - it_row.data()[eBudget][column];
+ ++column;
+ }
+ break;
+ case MyMoneyAccount::Expense:
+ case MyMoneyAccount::Liability:
+ while ( column < m_numColumns ) {
+ it_row.data()[eBudgetDiff][column] = it_row.data()[eBudget][column] - it_row.data()[eActual][column];
+ ++column;
+ }
+ break;
+ default:
+ break;
+ }
+ ++it_row;
+ }
+ ++it_innergroup;
+ }
+ ++it_outergroup;
+ }
+
+}
+
+void PivotTable::calculateForecast(void)
+{
+ //setup forecast
+ MyMoneyForecast forecast;
+
+ //setup forecast settings
+
+ //since this is a net worth forecast we want to include all account even those that are not in use
+ forecast.setIncludeUnusedAccounts(true);
+
+ //setup forecast dates
+ if(m_endDate > QDate::currentDate()) {
+ forecast.setForecastEndDate(m_endDate);
+ forecast.setForecastStartDate(QDate::currentDate());
+ forecast.setForecastDays(QDate::currentDate().daysTo(m_endDate));
+ } else {
+ forecast.setForecastStartDate(m_beginDate);
+ forecast.setForecastEndDate(m_endDate);
+ forecast.setForecastDays(m_beginDate.daysTo(m_endDate) + 1);
+ }
+
+ //adjust history dates if beginning date is before today
+ if(m_beginDate < QDate::currentDate()) {
+ forecast.setHistoryEndDate(m_beginDate.addDays(-1));
+ forecast.setHistoryStartDate(forecast.historyEndDate().addDays(-forecast.accountsCycle()*forecast.forecastCycles()));
+ }
+
+ //run forecast
+ forecast.doForecast();
+
+ //go through the data and add forecast
+ PivotGrid::iterator it_outergroup = m_grid.begin();
+ while ( it_outergroup != m_grid.end() )
+ {
+ PivotOuterGroup::iterator it_innergroup = (*it_outergroup).begin();
+ while ( it_innergroup != (*it_outergroup).end() )
+ {
+ PivotInnerGroup::iterator it_row = (*it_innergroup).begin();
+ while ( it_row != (*it_innergroup).end() )
+ {
+ unsigned column = 1;
+ QDate forecastDate = m_beginDate;
+ //check whether columns are days or months
+ if(m_config_f.isColumnsAreDays())
+ {
+ while(column < m_numColumns) {
+ it_row.data()[eForecast][column] = forecast.forecastBalance(it_row.key(), forecastDate);
+
+ forecastDate = forecastDate.addDays(1);
+ ++column;
+ }
+ } else {
+ //if columns are months
+ while(column < m_numColumns) {
+ //set forecastDate to last day of each month
+ //TODO we really need a date manipulation util
+ forecastDate = QDate(forecastDate.year(), forecastDate.month(), forecastDate.daysInMonth());
+ //check that forecastDate is not over ending date
+ if(forecastDate > m_endDate)
+ forecastDate = m_endDate;
+
+ //get forecast balance and set the corresponding column
+ it_row.data()[eForecast][column] = forecast.forecastBalance(it_row.key(), forecastDate);
+
+ forecastDate = forecastDate.addDays(1);
+ ++column;
+ }
+ }
+ ++it_row;
+ }
+ ++it_innergroup;
+ }
+ ++it_outergroup;
+ }
+}
+
+void PivotTable::loadRowTypeList()
+{
+ if( (m_config_f.isIncludingBudgetActuals()) ||
+ ( !m_config_f.hasBudget()
+ && !m_config_f.isIncludingForecast()
+ && !m_config_f.isIncludingMovingAverage()
+ && !m_config_f.isIncludingPrice()
+ && !m_config_f.isIncludingAveragePrice())
+ ) {
+ m_rowTypeList.append(eActual);
+ m_columnTypeHeaderList.append(i18n("Actual"));
+ }
+
+ if (m_config_f.hasBudget()) {
+ m_rowTypeList.append(eBudget);
+ m_columnTypeHeaderList.append(i18n("Budget"));
+ }
+
+ if(m_config_f.isIncludingBudgetActuals()) {
+ m_rowTypeList.append(eBudgetDiff);
+ m_columnTypeHeaderList.append(i18n("Difference"));
+ }
+
+ if(m_config_f.isIncludingForecast()) {
+ m_rowTypeList.append(eForecast);
+ m_columnTypeHeaderList.append(i18n("Forecast"));
+ }
+
+ if(m_config_f.isIncludingMovingAverage()) {
+ m_rowTypeList.append(eAverage);
+ m_columnTypeHeaderList.append(i18n("Moving Average"));
+ }
+
+ if(m_config_f.isIncludingAveragePrice()) {
+ m_rowTypeList.append(eAverage);
+ m_columnTypeHeaderList.append(i18n("Moving Average Price"));
+ }
+
+ if(m_config_f.isIncludingPrice()) {
+ m_rowTypeList.append(ePrice);
+ m_columnTypeHeaderList.append(i18n("Price"));
+ }
+}
+
+
+void PivotTable::calculateMovingAverage (void)
+{
+ int delta = m_config_f.movingAverageDays()/2;
+
+ //go through the data and add the moving average
+ PivotGrid::iterator it_outergroup = m_grid.begin();
+ while ( it_outergroup != m_grid.end() )
+ {
+ PivotOuterGroup::iterator it_innergroup = (*it_outergroup).begin();
+ while ( it_innergroup != (*it_outergroup).end() )
+ {
+ PivotInnerGroup::iterator it_row = (*it_innergroup).begin();
+ while ( it_row != (*it_innergroup).end() )
+ {
+ unsigned column = 1;
+
+ //check whether columns are days or months
+ if(m_config_f.columnType() == MyMoneyReport::eDays) {
+ while(column < m_numColumns) {
+ MyMoneyMoney totalPrice = MyMoneyMoney( 0, 1 );
+
+ QDate averageStart = columnDate(column).addDays(-delta);
+ QDate averageEnd = columnDate(column).addDays(delta);
+ for(QDate averageDate = averageStart; averageDate <= averageEnd; averageDate = averageDate.addDays(1)) {
+ if(m_config_f.isConvertCurrency()) {
+ totalPrice += it_row.key().deepCurrencyPrice(averageDate) * it_row.key().baseCurrencyPrice(averageDate);
+ } else {
+ totalPrice += it_row.key().deepCurrencyPrice(averageDate);
+ }
+ totalPrice = totalPrice.convert(10000);
+ }
+
+ //calculate the average price
+ MyMoneyMoney averagePrice = totalPrice / MyMoneyMoney ((averageStart.daysTo(averageEnd) + 1), 1);
+
+ //get the actual value, multiply by the average price and save that value
+ MyMoneyMoney averageValue = it_row.data()[eActual][column] * averagePrice;
+ it_row.data()[eAverage][column] = averageValue.convert(10000);
+
+ ++column;
+ }
+ } else {
+ //if columns are months
+ while(column < m_numColumns) {
+ QDate averageStart = columnDate(column);
+
+ //set the right start date depending on the column type
+ switch(m_config_f.columnType()) {
+ case MyMoneyReport::eYears:
+ {
+ averageStart = QDate(columnDate(column).year(), 1, 1);
+ break;
+ }
+ case MyMoneyReport::eBiMonths:
+ {
+ averageStart = QDate(columnDate(column).year(), columnDate(column).month(), 1).addMonths(-1);
+ break;
+ }
+ case MyMoneyReport::eQuarters:
+ {
+ averageStart = QDate(columnDate(column).year(), columnDate(column).month(), 1).addMonths(-1);
+ break;
+ }
+ case MyMoneyReport::eMonths:
+ {
+ averageStart = QDate(columnDate(column).year(), columnDate(column).month(), 1);
+ break;
+ }
+ case MyMoneyReport::eWeeks:
+ {
+ averageStart = columnDate(column).addDays(-columnDate(column).dayOfWeek() + 1);
+ break;
+ }
+ default:
+ break;
+ }
+
+ //gather the actual data and calculate the average
+ MyMoneyMoney totalPrice = MyMoneyMoney(0, 1);
+ QDate averageEnd = columnDate(column);
+ for(QDate averageDate = averageStart; averageDate <= averageEnd; averageDate = averageDate.addDays(1)) {
+ if(m_config_f.isConvertCurrency()) {
+ totalPrice += it_row.key().deepCurrencyPrice(averageDate) * it_row.key().baseCurrencyPrice(averageDate);
+ } else {
+ totalPrice += it_row.key().deepCurrencyPrice(averageDate);
+ }
+ totalPrice = totalPrice.convert(10000);
+ }
+
+ MyMoneyMoney averagePrice = totalPrice / MyMoneyMoney ((averageStart.daysTo(averageEnd) + 1), 1);
+ MyMoneyMoney averageValue = it_row.data()[eActual][column] * averagePrice;
+
+ //fill in the average
+ it_row.data()[eAverage][column] = averageValue.convert(10000);
+
+ ++column;
+ }
+ }
+ ++it_row;
+ }
+ ++it_innergroup;
+ }
+ ++it_outergroup;
+ }
+}
+
+void PivotTable::fillBasePriceUnit(ERowType rowType)
+{
+ //go through the data and add forecast
+ PivotGrid::iterator it_outergroup = m_grid.begin();
+ while ( it_outergroup != m_grid.end() )
+ {
+ PivotOuterGroup::iterator it_innergroup = ( *it_outergroup ).begin();
+ while ( it_innergroup != ( *it_outergroup ).end() )
+ {
+ PivotInnerGroup::iterator it_row = ( *it_innergroup ).begin();
+ while ( it_row != ( *it_innergroup ).end() )
+ {
+ unsigned column = 1;
+ while ( column < m_numColumns ) {
+ //insert a unit of currency for each account
+ it_row.data() [rowType][column] = MyMoneyMoney ( 1, 1 );
+ ++column;
+ }
+ ++it_row;
+ }
+ ++it_innergroup;
+ }
+ ++it_outergroup;
+ }
+}
+
+void PivotTable::includeInvestmentSubAccounts()
+{
+ // if we're not in expert mode, we need to make sure
+ // that all stock accounts for the selected investment
+ // account are also selected
+ QStringList accountList;
+ if(m_config_f.accounts(accountList)) {
+ if(!KMyMoneyGlobalSettings::expertMode()) {
+ QStringList::const_iterator it_a, it_b;
+ for(it_a = accountList.begin(); it_a != accountList.end(); ++it_a) {
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(*it_a);
+ if(acc.accountType() == MyMoneyAccount::Investment) {
+ for(it_b = acc.accountList().begin(); it_b != acc.accountList().end(); ++it_b) {
+ if(!accountList.contains(*it_b)) {
+ m_config_f.addAccount(*it_b);
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+} // namespace
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/reports/pivottable.h b/kmymoney2/reports/pivottable.h
new file mode 100644
index 0000000..226c9a5
--- /dev/null
+++ b/kmymoney2/reports/pivottable.h
@@ -0,0 +1,356 @@
+/***************************************************************************
+ pivottable.h
+ -------------------
+ begin : Sat May 22 2004
+ copyright : (C) 2004-2005 by Ace Jones
+ email : <ace.j@hotpop.com>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Alvaro Soliverez <asoliverez@gmail.com>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef PIVOTTABLE_H
+#define PIVOTTABLE_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qmap.h>
+#include <qvaluelist.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include "kreportchartview.h"
+#include "../mymoney/mymoneyfile.h"
+#include "../mymoney/mymoneyreport.h"
+#include "reporttable.h"
+#include "pivotgrid.h"
+#include "reportaccount.h"
+
+namespace reports {
+
+/**
+ * Calculates a 'pivot table' of information about the transaction database.
+ * Based on pivot tables in MS Excel, and implemented as 'Data Pilot' in
+ * OpenOffice.Org Calc.
+ *
+ * | Month,etc
+ * -------------+------------
+ * Expense Type | Sum(Value)
+ * Category |
+ *
+ * This is a middle-layer class, between the UI and the engine. The
+ * MyMoneyReport class holds only the CONFIGURATION parameters. This
+ * class actually does the work of retrieving the data from the engine
+ * and formatting it for the user.
+ *
+ * @author Ace Jones
+ *
+ * @short
+**/
+class PivotTable : public ReportTable
+{
+public:
+ /**
+ * Create a Pivot table style report
+ *
+ * @param _config_f The configuration parameters for this report
+ */
+ PivotTable( const MyMoneyReport& _config_f );
+
+ /**
+ * virtual Destructur
+ */
+ virtual ~PivotTable() {}
+
+ /**
+ * Render the report to an HTML stream.
+ *
+ * @return QString HTML string representing the report
+ */
+ QString renderHTML( void ) const;
+ /**
+ * Render the report to a comma-separated-values stream.
+ *
+ * @return QString CSV string representing the report
+ */
+ QString renderCSV( void ) const;
+
+ /**
+ * Render the report to a graphical chart
+ *
+ * @param view The KReportChartView into which to draw the chart.
+ */
+ void drawChart( KReportChartView& view ) const;
+
+ /**
+ * Dump the report's HTML to a file
+ *
+ * @param file The filename to dump into
+ * @param context unused, but provided for interface compatibility
+ */
+ void dump( const QString& file, const QString& context=QString()) const;
+
+ /**
+ * Returns the grid generated by the report
+ *
+ */
+ PivotGrid grid(void) {return m_grid;}
+
+protected:
+ void init(void); // used for debugging the constructor
+
+private:
+
+ PivotGrid m_grid;
+
+ QStringList m_columnHeadings;
+ unsigned m_numColumns;
+ QDate m_beginDate;
+ QDate m_endDate;
+ bool m_runningSumsCalculated;
+
+ /**
+ * For budget-vs-actual reports only, maps each account to the account which holds
+ * the budget for it. If an account is not contained in this map, it is not included
+ * in the budget.
+ */
+ QMap<QString, QString> m_budgetMap;
+
+ /**
+ * This list contains the types of PivotGridRows that are going to be shown in the report
+ */
+ QValueList<ERowType> m_rowTypeList;
+
+ /**
+ * This list contains the i18n headers for the column types
+ */
+ QValueList<QString> m_columnTypeHeaderList;
+
+ MyMoneyReport m_config_f;
+
+ /**
+ * This method returns the formatted value of @a amount with
+ * a possible @a currencySymbol added and @a prec fractional digits.
+ * @a currencySymbol defaults to be empty and @a prec defaults to 2.
+ *
+ * If @a amount is negative the formatted value is enclosed in an
+ * HTML font tag to modify the color to reflect the user settings for
+ * negtive numbers.
+ *
+ * Example: 1.23 is returned as '1.23' whereas -1.23 is returned as
+ * @verbatim <font color="rgb($red,$green,$blue)">-1.23</font>@endverbatim
+ * with $red, $green and $blue being the actual value for the
+ * chosen color.
+ */
+ QString coloredAmount(const MyMoneyMoney& amount, const QString& currencySymbol = QString(), int prec = 2 ) const;
+
+protected:
+ /**
+ * Creates a row in the grid if it doesn't already exist
+ *
+ * Downsteam assignment functions will assume that this row already
+ * exists, so this function creates a row of the needed length populated
+ * with zeros.
+ *
+ * @param outergroup The outer row group
+ * @param row The row itself
+ * @param recursive Whether to also recursively create rows for our parent accounts
+ */
+ void createRow( const QString& outergroup, const ReportAccount& row, bool recursive );
+
+ /**
+ * Assigns a value into the grid
+ *
+ * Adds the given value to the value which already exists at the specified grid position
+ *
+ * @param outergroup The outer row group
+ * @param row The row itself
+ * @param column The column
+ * @param value The value to be added in
+ * @param budget Whether this is a budget value (@p true) or an actual
+ * value (@p false). Defaults to @p false.
+ * @param stockSplit Wheter this is a stock split (@p true) or an actual
+ * value (@p false). Defaults to @p false.
+ */
+ inline void assignCell( const QString& outergroup, const ReportAccount& row, unsigned column, MyMoneyMoney value, bool budget = false, bool stockSplit = false );
+
+ /**
+ * Create a row for each included account. This is used when
+ * the config parameter isIncludingUnusedAccount() is true
+ */
+ void createAccountRows(void);
+
+ /**
+ * Record the opening balances of all qualifying accounts into the grid.
+ *
+ * For accounts opened before the report period, places the balance into the '0' column.
+ * For those opened during the report period, places the balance into the appropriate column
+ * for the month when it was opened.
+ */
+ void calculateOpeningBalances( void );
+
+ /**
+ * Calculate budget mapping
+ *
+ * For budget-vs-actual reports, this creates a mapping between each account
+ * in the user's hierarchy and the account where the budget is held for it.
+ * This is needed because the user can budget on a given account for that
+ * account and all its descendants. Also if NO budget is placed on the
+ * account or any of its parents, the account is not included in the map.
+ */
+ void calculateBudgetMapping( void );
+
+ /**
+ * Calculate the running sums.
+ *
+ * After calling this method, each cell of the report will contain the running sum of all
+ * the cells in its row in this and earlier columns.
+ *
+ * For example, consider a row with these values:
+ * 01 02 03 04 05 06 07 08 09 10
+ *
+ * After calling this function, the row will look like this:
+ * 01 03 06 10 15 21 28 36 45 55
+ */
+ void calculateRunningSums( void );
+ void calculateRunningSums( PivotInnerGroup::iterator& it_row);
+
+ /**
+ * This method calculates the difference between a @a budgeted and an @a
+ * actual amount. The calculation is based on the type of the
+ * @a repAccount. The difference value is calculated as follows:
+ *
+ * If @a repAccount is of type MyMoneyAccount::Income
+ *
+ * @code
+ * diff = actual - budgeted
+ * @endcode
+ *
+ * If @a repAccount is of type MyMoneyAccount::Expense
+ *
+ * @code
+ * diff = budgeted - actual
+ * @endcode
+ *
+ * In all other cases, 0 is returned.
+ */
+ void calculateBudgetDiff(void);
+
+ /**
+ * This method calculates forecast for a report
+ */
+ void calculateForecast(void);
+
+ /**
+ * This method inserts units to be used to display prices
+ */
+ void fillBasePriceUnit(ERowType rowType);
+
+ /**
+ * This method calculates moving average for a report
+ */
+ void calculateMovingAverage(void);
+
+ /**
+ * Calculate the row and column totals
+ *
+ * This function will set the m_total members of all the TGrid objects. Be sure the values are
+ * all converted to the base currency first!!
+ *
+ */
+ void calculateTotals( void );
+
+ /**
+ * Convert each value in the grid to the base currency
+ *
+ */
+ void convertToBaseCurrency( void );
+
+ /**
+ * Convert each value in the grid to the account/category's deep currency
+ *
+ * See AccountDescriptor::deepCurrencyPrice() for a description of 'deep' currency
+ *
+ */
+ void convertToDeepCurrency( void );
+
+ /**
+ * Turn month-long columns into larger time periods if needed
+ *
+ * For example, consider a row with these values:
+ * 01 02 03 04 05 06 07 08 09 10
+ *
+ * If the column pitch is 3 (i.e. quarterly), after calling this function,
+ * the row will look like this:
+ * 06 15 26 10
+ */
+ void collapseColumns(void);
+
+ /**
+ * Determine the proper column headings based on the time periods covered by each column
+ *
+ */
+ void calculateColumnHeadings(void);
+
+ /**
+ * Helper methods for collapseColumns
+ *
+ */
+ void accumulateColumn(unsigned destcolumn, unsigned sourcecolumn);
+ void clearColumn(unsigned column);
+
+ /**
+ * Calculate the column of a given date. This is the absolute column in a
+ * hypothetical report that covers all of known time. In reality an actual
+ * report will be a subset of that.
+ *
+ * @param _date The date
+ */
+ unsigned columnValue(const QDate& _date) const;
+
+ /**
+ * Calculate the date of the last day covered by a given column.
+ *
+ * @param column The column
+ */
+ QDate columnDate(int column) const;
+
+ /**
+ * Returns the balance of a given cell. Throws an exception once calculateRunningSums() has been run.
+ */
+ MyMoneyMoney cellBalance(const QString& outergroup, const ReportAccount& _row, unsigned column, bool budget);
+
+ /**
+ * Draws a PivotGridRowSet in a chart for the given ERowType
+ */
+ unsigned drawChartRowSet(unsigned rowNum, const bool seriesTotals, const bool accountSeries, KDChartTableData& data, const PivotGridRowSet& rowSet, const ERowType rowType ) const;
+
+ /**
+ * Loads m_rowTypeList with the list of PivotGridRow types that the reporttable
+ * should show
+ */
+ void loadRowTypeList(void);
+
+ /**
+ * If not in expert mode, include all subaccounts for each selected
+ * investment account
+ */
+ void includeInvestmentSubAccounts(void);
+};
+
+
+}
+#endif
+// PIVOTTABLE_H
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/reports/pivottabletest.cpp b/kmymoney2/reports/pivottabletest.cpp
new file mode 100644
index 0000000..a235c0b
--- /dev/null
+++ b/kmymoney2/reports/pivottabletest.cpp
@@ -0,0 +1,1021 @@
+/***************************************************************************
+ pivottabletest.cpp
+ -------------------
+ copyright : (C) 2002-2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ Ace Jones <ace.j@hotpop.com>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include <qvaluelist.h>
+#include <qvaluevector.h>
+#include <qdom.h>
+#include <qfile.h>
+
+#include <kdebug.h>
+#include <kdeversion.h>
+#include <kglobal.h>
+#include <kglobalsettings.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+
+// DOH, mmreport.h uses this without including it!!
+#include "../mymoney/mymoneyaccount.h"
+
+#include "../mymoney/mymoneysecurity.h"
+#include "../mymoney/mymoneyprice.h"
+#include "../mymoney/mymoneyreport.h"
+#include "../mymoney/mymoneystatement.h"
+#include "../mymoney/storage/mymoneystoragedump.h"
+#include "../mymoney/storage/mymoneystoragexml.h"
+
+#define private public
+#include "../reports/pivottable.h"
+#undef private
+
+#include "reportstestcommon.h"
+#include "pivottabletest.h"
+
+using namespace reports;
+using namespace test;
+
+PivotTableTest::PivotTableTest()
+{
+}
+
+void PivotTableTest::setUp ()
+{
+ storage = new MyMoneySeqAccessMgr;
+ file = MyMoneyFile::instance();
+ file->attachStorage(storage);
+
+ MyMoneyFileTransaction ft;
+ file->addCurrency(MyMoneySecurity("CAD", "Canadian Dollar", "C$"));
+ file->addCurrency(MyMoneySecurity("USD", "US Dollar", "$"));
+ file->addCurrency(MyMoneySecurity("JPY", "Japanese Yen", QChar(0x00A5), 100, 1));
+ file->addCurrency(MyMoneySecurity("GBP", "British Pound", "#"));
+ file->setBaseCurrency(file->currency("USD"));
+
+ MyMoneyPayee payeeTest("Test Payee");
+ file->addPayee(payeeTest);
+ MyMoneyPayee payeeTest2("Thomas Baumgart");
+ file->addPayee(payeeTest2);
+
+ acAsset = (MyMoneyFile::instance()->asset().id());
+ acLiability = (MyMoneyFile::instance()->liability().id());
+ acExpense = (MyMoneyFile::instance()->expense().id());
+ acIncome = (MyMoneyFile::instance()->income().id());
+ acChecking = makeAccount(QString("Checking Account"),MyMoneyAccount::Checkings,moCheckingOpen,QDate(2004,5,15),acAsset);
+ acCredit = makeAccount(QString("Credit Card"),MyMoneyAccount::CreditCard,moCreditOpen,QDate(2004,7,15),acLiability);
+ acSolo = makeAccount(QString("Solo"),MyMoneyAccount::Expense,0,QDate(2004,1,11),acExpense);
+ acParent = makeAccount(QString("Parent"),MyMoneyAccount::Expense,0,QDate(2004,1,11),acExpense);
+ acChild = makeAccount(QString("Child"),MyMoneyAccount::Expense,0,QDate(2004,2,11),acParent);
+ acForeign = makeAccount(QString("Foreign"),MyMoneyAccount::Expense,0,QDate(2004,1,11),acExpense);
+
+ acSecondChild = makeAccount(QString("Second Child"),MyMoneyAccount::Expense,0,QDate(2004,2,11),acParent);
+ acGrandChild1 = makeAccount(QString("Grand Child 1"),MyMoneyAccount::Expense,0,QDate(2004,2,11),acChild);
+ acGrandChild2 = makeAccount(QString("Grand Child 2"),MyMoneyAccount::Expense,0,QDate(2004,2,11),acChild);
+
+ MyMoneyInstitution i("Bank of the World","","","","","","");
+ file->addInstitution(i);
+ inBank = i.id();
+ ft.commit();
+}
+
+void PivotTableTest::tearDown ()
+{
+ file->detachStorage(storage);
+ delete storage;
+}
+
+void PivotTableTest::testNetWorthSingle()
+{
+ try
+ {
+ MyMoneyReport filter;
+ filter.setRowType( MyMoneyReport::eAssetLiability );
+ filter.setDateFilter(QDate(2004,1,1),QDate(2004,7,1).addDays(-1));
+ XMLandback(filter);
+ PivotTable networth_f(filter);
+ writeTabletoCSV(networth_f);
+
+ CPPUNIT_ASSERT(networth_f.m_grid["Asset"]["Checking Account"][acChecking][eActual][5]==moCheckingOpen);
+ CPPUNIT_ASSERT(networth_f.m_grid["Asset"]["Checking Account"][acChecking][eActual][6]==moCheckingOpen);
+ CPPUNIT_ASSERT(networth_f.m_grid["Asset"]["Checking Account"].m_total[eActual][5]==moCheckingOpen);
+ CPPUNIT_ASSERT(networth_f.m_grid.m_total[eActual][0]==moZero);
+ CPPUNIT_ASSERT(networth_f.m_grid.m_total[eActual][4]==moZero);
+ CPPUNIT_ASSERT(networth_f.m_grid.m_total[eActual][5]==moCheckingOpen);
+ CPPUNIT_ASSERT(networth_f.m_grid.m_total[eActual][6]==moCheckingOpen);
+ }
+ catch(MyMoneyException *e)
+ {
+ CPPUNIT_FAIL(e->what());
+ delete e;
+ }
+}
+
+void PivotTableTest::testNetWorthOfsetting()
+{
+ // Test the net worth report to make sure it picks up the opening balance for two
+ // accounts opened during the period of the report, one asset & one liability. Test
+ // that it calculates the totals correctly.
+
+ MyMoneyReport filter;
+ filter.setRowType( MyMoneyReport::eAssetLiability );
+ filter.setDateFilter(QDate(2004,1,1),QDate(2005,1,1).addDays(-1));
+ XMLandback(filter);
+ PivotTable networth_f( filter );
+ CPPUNIT_ASSERT(networth_f.m_grid["Liability"]["Credit Card"][acCredit][eActual][7]==-moCreditOpen);
+ CPPUNIT_ASSERT(networth_f.m_grid.m_total[eActual][0]==moZero);
+ CPPUNIT_ASSERT(networth_f.m_grid.m_total[eActual][12]==moCheckingOpen+moCreditOpen);
+
+}
+
+void PivotTableTest::testNetWorthOpeningPrior()
+{
+ // Test the net worth report to make sure it's picking up opening balances PRIOR to
+ // the period of the report.
+
+ MyMoneyReport filter;
+ filter.setRowType( MyMoneyReport::eAssetLiability );
+ filter.setDateFilter(QDate(2005,8,1),QDate(2005,12,31));
+ filter.setName("Net Worth Opening Prior 1");
+ XMLandback(filter);
+ PivotTable networth_f( filter );
+ writeTabletoCSV(networth_f);
+
+ CPPUNIT_ASSERT(networth_f.m_grid["Liability"]["Credit Card"].m_total[eActual][0]==-moCreditOpen);
+ CPPUNIT_ASSERT(networth_f.m_grid["Asset"]["Checking Account"].m_total[eActual][0]==moCheckingOpen);
+ CPPUNIT_ASSERT(networth_f.m_grid.m_total[eActual][0]==moCheckingOpen+moCreditOpen);
+ CPPUNIT_ASSERT(networth_f.m_grid.m_total[eActual][1]==moCheckingOpen+moCreditOpen);
+
+ // Test the net worth report to make sure that transactions prior to the report
+ // period are included in the opening balance
+
+ TransactionHelper t1( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t2( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moParent2, acCredit, acParent );
+ TransactionHelper t3( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moChild, acChecking, acChild );
+
+ filter.setName("Net Worth Opening Prior 2");
+ PivotTable networth_f2( filter );
+ writeTabletoCSV(networth_f2);
+ CPPUNIT_ASSERT(networth_f2.m_grid["Liability"]["Credit Card"].m_total[eActual][1]==-moCreditOpen+moParent);
+ CPPUNIT_ASSERT(networth_f2.m_grid["Asset"]["Checking Account"].m_total[eActual][1]==moCheckingOpen-moChild);
+ CPPUNIT_ASSERT(networth_f2.m_grid.m_total[eActual][1]==moCheckingOpen+moCreditOpen-moChild-moParent);
+}
+
+void PivotTableTest::testNetWorthDateFilter()
+{
+ // Test a net worth report whose period is prior to the time any accounts are open,
+ // so the report should be zero.
+
+ MyMoneyReport filter;
+ filter.setRowType( MyMoneyReport::eAssetLiability );
+ filter.setDateFilter(QDate(2004,1,1),QDate(2004,2,1).addDays(-1));
+ XMLandback(filter);
+ PivotTable networth_f( filter );
+ CPPUNIT_ASSERT(networth_f.m_grid.m_total[eActual][1]==moZero);
+
+}
+
+void PivotTableTest::testSpendingEmpty()
+{
+ // test a spending report with no entries
+
+ MyMoneyReport filter;
+ filter.setRowType( MyMoneyReport::eExpenseIncome );
+ XMLandback(filter);
+ PivotTable spending_f1( filter );
+ CPPUNIT_ASSERT(spending_f1.m_grid.m_total[eActual].m_total==moZero);
+
+ filter.setDateFilter(QDate(2004,9,1),QDate(2005,1,1).addDays(-1));
+ PivotTable spending_f2( filter );
+ CPPUNIT_ASSERT(spending_f2.m_grid.m_total[eActual].m_total==moZero);
+}
+
+void PivotTableTest::testSingleTransaction()
+{
+ // Test a single transaction
+ TransactionHelper t( QDate(2004,10,31), MyMoneySplit::ActionWithdrawal,moSolo, acChecking, acSolo );
+
+ MyMoneyReport filter;
+ filter.setRowType( MyMoneyReport::eExpenseIncome );
+ filter.setDateFilter(QDate(2004,9,1),QDate(2005,1,1).addDays(-1));
+ filter.setName("Spending with Single Transaction.html");
+ XMLandback(filter);
+ PivotTable spending_f( filter );
+ writeTabletoHTML(spending_f,"Spending with Single Transaction.html");
+
+ CPPUNIT_ASSERT(spending_f.m_grid["Expense"]["Solo"][acSolo][eActual][2]==moSolo);
+ CPPUNIT_ASSERT(spending_f.m_grid["Expense"]["Solo"].m_total[eActual][2]==moSolo);
+ CPPUNIT_ASSERT(spending_f.m_grid["Expense"]["Solo"].m_total[eActual][1]==moZero);
+ CPPUNIT_ASSERT(spending_f.m_grid.m_total[eActual][2]==(-moSolo));
+ CPPUNIT_ASSERT(spending_f.m_grid.m_total[eActual].m_total==(-moSolo));
+
+ filter.clear();
+ filter.setRowType(MyMoneyReport::eAssetLiability);
+ filter.setDateFilter(QDate(2004,9,1),QDate(2005,1,1).addDays(-1));
+ XMLandback(filter);
+ PivotTable networth_f( filter );
+ CPPUNIT_ASSERT(networth_f.m_grid["Asset"]["Checking Account"].m_total[eActual][2]==(moCheckingOpen-moSolo) );
+}
+
+void PivotTableTest::testSubAccount()
+{
+ // Test a sub-account with a value, under an account with a value
+
+ TransactionHelper t1( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t2( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moParent2, acCredit, acParent );
+ TransactionHelper t3( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moChild, acCredit, acChild );
+
+ MyMoneyReport filter;
+ filter.setRowType( MyMoneyReport::eExpenseIncome );
+ filter.setDateFilter(QDate(2004,9,1),QDate(2005,1,1).addDays(-1));
+ filter.setDetailLevel(MyMoneyReport::eDetailAll);
+ filter.setName("Spending with Sub-Account");
+ XMLandback(filter);
+ PivotTable spending_f( filter );
+ writeTabletoHTML(spending_f,"Spending with Sub-Account.html");
+
+ CPPUNIT_ASSERT(spending_f.m_grid["Expense"]["Parent"][acParent][eActual][3]==moParent);
+ CPPUNIT_ASSERT(spending_f.m_grid["Expense"]["Parent"][acChild][eActual][3]==moChild);
+ CPPUNIT_ASSERT(spending_f.m_grid["Expense"]["Parent"].m_total[eActual][3]==moParent+moChild);
+ CPPUNIT_ASSERT(spending_f.m_grid["Expense"]["Parent"].m_total[eActual][2]==moZero);
+ CPPUNIT_ASSERT(spending_f.m_grid["Expense"]["Parent"].m_total[eActual].m_total==moParent+moChild);
+ CPPUNIT_ASSERT(spending_f.m_grid.m_total[eActual][3]==(-moParent-moChild));
+ CPPUNIT_ASSERT(spending_f.m_grid.m_total[eActual].m_total==(-moParent-moChild));
+
+ filter.clear();
+ filter.setRowType(MyMoneyReport::eAssetLiability);
+ filter.setDateFilter(QDate(2004,9,1),QDate(2005,1,1).addDays(-1));
+ filter.setName("Net Worth with Sub-Account");
+ XMLandback(filter);
+ PivotTable networth_f( filter );
+ writeTabletoHTML(networth_f,"Net Worth with Sub-Account.html");
+ CPPUNIT_ASSERT(networth_f.m_grid["Liability"]["Credit Card"].m_total[eActual][3]==moParent+moChild-moCreditOpen );
+ CPPUNIT_ASSERT(networth_f.m_grid.m_total[eActual][4] == -moParent-moChild+moCreditOpen+moCheckingOpen );
+
+}
+
+void PivotTableTest::testFilterIEvsIE()
+{
+ // Test that removing an income/spending account will remove the entry from an income/spending report
+ TransactionHelper t1( QDate(2004,10,31), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moChild, acCredit, acChild );
+
+ MyMoneyReport filter;
+ filter.setRowType( MyMoneyReport::eExpenseIncome );
+ filter.setDateFilter(QDate(2004,9,1),QDate(2005,1,1).addDays(-1));
+ filter.addCategory(acChild);
+ filter.addCategory(acSolo);
+ XMLandback(filter);
+ PivotTable spending_f( filter );
+
+ CPPUNIT_ASSERT(spending_f.m_grid["Expense"]["Parent"].m_total[eActual][3]==moChild);
+ CPPUNIT_ASSERT(spending_f.m_grid["Expense"].m_total[eActual][2]==moSolo);
+ CPPUNIT_ASSERT(spending_f.m_grid.m_total[eActual].m_total==-moSolo-moChild);
+
+}
+
+void PivotTableTest::testFilterALvsAL()
+{
+ // Test that removing an asset/liability account will remove the entry from an asset/liability report
+ TransactionHelper t1( QDate(2004,10,31), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moChild, acCredit, acChild );
+
+ MyMoneyReport filter;
+ filter.setRowType( MyMoneyReport::eAssetLiability );
+ filter.setDateFilter(QDate(2004,9,1),QDate(2005,1,1).addDays(-1));
+ filter.addAccount(acChecking);
+ filter.addCategory(acChild);
+ filter.addCategory(acSolo);
+ XMLandback(filter);
+ PivotTable networth_f( filter );
+ CPPUNIT_ASSERT(networth_f.m_grid.m_total[eActual][3] == -moSolo+moCheckingOpen );
+}
+
+void PivotTableTest::testFilterALvsIE()
+{
+ // Test that removing an asset/liability account will remove the entry from an income/spending report
+ TransactionHelper t1( QDate(2004,10,31), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moChild, acCredit, acChild );
+
+ MyMoneyReport filter;
+ filter.setRowType( MyMoneyReport::eExpenseIncome );
+ filter.setDateFilter(QDate(2004,9,1),QDate(2005,1,1).addDays(-1));
+ filter.addAccount(acChecking);
+ CPPUNIT_ASSERT(file->transactionList(filter).count() == 1);
+
+ XMLandback(filter);
+ PivotTable spending_f( filter );
+
+ CPPUNIT_ASSERT(spending_f.m_grid["Expense"].m_total[eActual][3]==moZero);
+ CPPUNIT_ASSERT(spending_f.m_grid["Expense"].m_total[eActual][2]==moSolo);
+ CPPUNIT_ASSERT(spending_f.m_grid.m_total[eActual].m_total==-moSolo);
+}
+
+void PivotTableTest::testFilterAllvsIE()
+{
+ // Test that removing an asset/liability account AND an income/expense
+ // category will remove the entry from an income/spending report
+ TransactionHelper t1( QDate(2004,10,31), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moChild, acCredit, acChild );
+
+ MyMoneyReport filter;
+ filter.setRowType( MyMoneyReport::eExpenseIncome );
+ filter.setDateFilter(QDate(2004,9,1),QDate(2005,1,1).addDays(-1));
+ filter.addAccount(acCredit);
+ filter.addCategory(acChild);
+ PivotTable spending_f( filter );
+
+ CPPUNIT_ASSERT(spending_f.m_grid["Expense"].m_total[eActual][2]==moZero);
+ CPPUNIT_ASSERT(spending_f.m_grid["Expense"].m_total[eActual][3]==moChild);
+ CPPUNIT_ASSERT(spending_f.m_grid.m_total[eActual].m_total==-moChild);
+}
+
+void PivotTableTest::testFilterBasics()
+{
+ // Test that the filters are operating the way that the reports expect them to
+ TransactionHelper t1( QDate(2004,10,31), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moParent2, acCredit, acParent );
+ TransactionHelper t4( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moChild, acCredit, acChild );
+
+ MyMoneyTransactionFilter filter;
+ filter.clear();
+ filter.setDateFilter(QDate(2004,9,1),QDate(2005,1,1).addDays(-1));
+ filter.addCategory(acSolo);
+ filter.setReportAllSplits(false);
+ filter.setConsiderCategory(true);
+
+ CPPUNIT_ASSERT(file->transactionList(filter).count() == 1);
+
+ filter.addCategory(acParent);
+
+ CPPUNIT_ASSERT(file->transactionList(filter).count() == 3);
+
+ filter.addAccount(acChecking);
+
+ CPPUNIT_ASSERT(file->transactionList(filter).count() == 1);
+
+ filter.clear();
+ filter.setDateFilter(QDate(2004,9,1),QDate(2005,1,1).addDays(-1));
+ filter.addCategory(acParent);
+ filter.addAccount(acCredit);
+ filter.setReportAllSplits(false);
+ filter.setConsiderCategory(true);
+
+ CPPUNIT_ASSERT(file->transactionList(filter).count() == 2);
+}
+
+void PivotTableTest::testMultipleCurrencies()
+{
+ MyMoneyMoney moCanOpening( 0.0 );
+ MyMoneyMoney moJpyOpening( 0.0 );
+ MyMoneyMoney moCanPrice( 0.75 );
+ MyMoneyMoney moJpyPrice( 0.010 );
+ MyMoneyMoney moJpyPrice2( 0.011 );
+ MyMoneyMoney moJpyPrice3( 0.014 );
+ MyMoneyMoney moJpyPrice4( 0.0395 );
+ MyMoneyMoney moCanTransaction( 100.0 );
+ MyMoneyMoney moJpyTransaction( 100.0 );
+
+ QString acCanChecking = makeAccount(QString("Canadian Checking"),MyMoneyAccount::Checkings,moCanOpening,QDate(2003,11,15),acAsset,"CAD");
+ QString acJpyChecking = makeAccount(QString("Japanese Checking"),MyMoneyAccount::Checkings,moJpyOpening,QDate(2003,11,15),acAsset,"JPY");
+ QString acCanCash = makeAccount(QString("Canadian"),MyMoneyAccount::Expense,0,QDate(2004,2,11),acForeign,"CAD");
+ QString acJpyCash = makeAccount(QString("Japanese"),MyMoneyAccount::Expense,0,QDate(2004,2,11),acForeign,"JPY");
+
+ makePrice("CAD",QDate(2004,1,1),MyMoneyMoney(moCanPrice));
+ makePrice("JPY",QDate(2004,1,1),MyMoneyMoney(moJpyPrice));
+ makePrice("JPY",QDate(2004,5,1),MyMoneyMoney(moJpyPrice2));
+ makePrice("JPY",QDate(2004,6,30),MyMoneyMoney(moJpyPrice3));
+ makePrice("JPY",QDate(2004,7,15),MyMoneyMoney(moJpyPrice4));
+
+ TransactionHelper t1( QDate(2004,2,20), MyMoneySplit::ActionWithdrawal,MyMoneyMoney(moJpyTransaction), acJpyChecking, acJpyCash, "JPY" );
+ TransactionHelper t2( QDate(2004,3,20), MyMoneySplit::ActionWithdrawal,MyMoneyMoney(moJpyTransaction), acJpyChecking, acJpyCash, "JPY" );
+ TransactionHelper t3( QDate(2004,4,20), MyMoneySplit::ActionWithdrawal,MyMoneyMoney(moJpyTransaction), acJpyChecking, acJpyCash, "JPY" );
+ TransactionHelper t4( QDate(2004,2,20), MyMoneySplit::ActionWithdrawal,MyMoneyMoney(moCanTransaction), acCanChecking, acCanCash, "CAD" );
+ TransactionHelper t5( QDate(2004,3,20), MyMoneySplit::ActionWithdrawal,MyMoneyMoney(moCanTransaction), acCanChecking, acCanCash, "CAD" );
+ TransactionHelper t6( QDate(2004,4,20), MyMoneySplit::ActionWithdrawal,MyMoneyMoney(moCanTransaction), acCanChecking, acCanCash, "CAD" );
+
+#if 0
+ QFile g( "multicurrencykmy.xml" );
+ g.open( IO_WriteOnly );
+ MyMoneyStorageXML xml;
+ IMyMoneyStorageFormat& interface = xml;
+ interface.writeFile(&g, dynamic_cast<IMyMoneySerialize*> (MyMoneyFile::instance()->storage()));
+ g.close();
+#endif
+
+ MyMoneyReport filter;
+ filter.setRowType( MyMoneyReport::eExpenseIncome );
+ filter.setDateFilter(QDate(2004,1,1),QDate(2005,1,1).addDays(-1));
+ filter.setDetailLevel(MyMoneyReport::eDetailAll);
+ filter.setConvertCurrency(true);
+ filter.setName("Multiple Currency Spending Rerport (with currency conversion)");
+ XMLandback(filter);
+
+ PivotTable spending_f( filter );
+
+ writeTabletoCSV(spending_f);
+
+ // test single foreign currency
+ CPPUNIT_ASSERT(spending_f.m_grid["Expense"]["Foreign"][acCanCash][eActual][2]==(moCanTransaction*moCanPrice));
+ CPPUNIT_ASSERT(spending_f.m_grid["Expense"]["Foreign"][acCanCash][eActual][3]==(moCanTransaction*moCanPrice));
+ CPPUNIT_ASSERT(spending_f.m_grid["Expense"]["Foreign"][acCanCash][eActual][4]==(moCanTransaction*moCanPrice));
+
+ // test multiple foreign currencies under a common parent
+ CPPUNIT_ASSERT(spending_f.m_grid["Expense"]["Foreign"][acJpyCash][eActual][2]==(moJpyTransaction*moJpyPrice));
+ CPPUNIT_ASSERT(spending_f.m_grid["Expense"]["Foreign"][acJpyCash][eActual][3]==(moJpyTransaction*moJpyPrice));
+ CPPUNIT_ASSERT(spending_f.m_grid["Expense"]["Foreign"][acJpyCash][eActual][4]==(moJpyTransaction*moJpyPrice));
+ CPPUNIT_ASSERT(spending_f.m_grid["Expense"]["Foreign"].m_total[eActual][2]==(moJpyTransaction*moJpyPrice + moCanTransaction*moCanPrice));
+ CPPUNIT_ASSERT(spending_f.m_grid["Expense"]["Foreign"].m_total[eActual].m_total==(moJpyTransaction*moJpyPrice + moCanTransaction*moCanPrice + moJpyTransaction*moJpyPrice + moCanTransaction*moCanPrice + moJpyTransaction*moJpyPrice + moCanTransaction*moCanPrice));
+
+ // Test the report type where we DO NOT convert the currency
+ filter.setConvertCurrency(false);
+ filter.setDetailLevel(MyMoneyReport::eDetailAll);
+ filter.setName("Multiple Currency Spending Report (WITHOUT currency conversion)");
+ XMLandback(filter);
+ PivotTable spending_fnc( filter );
+ writeTabletoCSV(spending_fnc);
+
+ CPPUNIT_ASSERT(spending_fnc.m_grid["Expense"]["Foreign"][acCanCash][eActual][2]==(moCanTransaction));
+ CPPUNIT_ASSERT(spending_fnc.m_grid["Expense"]["Foreign"][acCanCash][eActual][3]==(moCanTransaction));
+ CPPUNIT_ASSERT(spending_fnc.m_grid["Expense"]["Foreign"][acCanCash][eActual][4]==(moCanTransaction));
+ CPPUNIT_ASSERT(spending_fnc.m_grid["Expense"]["Foreign"][acJpyCash][eActual][2]==(moJpyTransaction));
+ CPPUNIT_ASSERT(spending_fnc.m_grid["Expense"]["Foreign"][acJpyCash][eActual][3]==(moJpyTransaction));
+ CPPUNIT_ASSERT(spending_fnc.m_grid["Expense"]["Foreign"][acJpyCash][eActual][4]==(moJpyTransaction));
+
+ filter.setConvertCurrency(true);
+ filter.clear();
+ filter.setName("Multiple currency net worth");
+ filter.setRowType(MyMoneyReport::eAssetLiability);
+ filter.setDateFilter(QDate(2004,1,1),QDate(2005,1,1).addDays(-1));
+ XMLandback(filter);
+ PivotTable networth_f( filter );
+ writeTabletoCSV(networth_f);
+
+ // test single foreign currency
+ CPPUNIT_ASSERT(networth_f.m_grid["Asset"]["Canadian Checking"][acCanChecking][eActual][1]==(moCanOpening*moCanPrice));
+ CPPUNIT_ASSERT(networth_f.m_grid["Asset"]["Canadian Checking"][acCanChecking][eActual][2]==((moCanOpening-moCanTransaction)*moCanPrice));
+ CPPUNIT_ASSERT(networth_f.m_grid["Asset"]["Canadian Checking"][acCanChecking][eActual][3]==((moCanOpening-moCanTransaction-moCanTransaction)*moCanPrice));
+ CPPUNIT_ASSERT(networth_f.m_grid["Asset"]["Canadian Checking"][acCanChecking][eActual][4]==((moCanOpening-moCanTransaction-moCanTransaction-moCanTransaction)*moCanPrice));
+ CPPUNIT_ASSERT(networth_f.m_grid["Asset"]["Canadian Checking"][acCanChecking][eActual][12]==((moCanOpening-moCanTransaction-moCanTransaction-moCanTransaction)*moCanPrice));
+
+ // test Stable currency price, fluctuating account balance
+ CPPUNIT_ASSERT(networth_f.m_grid["Asset"]["Japanese Checking"][acJpyChecking][eActual][1]==(moJpyOpening*moJpyPrice));
+ CPPUNIT_ASSERT(networth_f.m_grid["Asset"]["Japanese Checking"][acJpyChecking][eActual][2]==((moJpyOpening-moJpyTransaction)*moJpyPrice));
+ CPPUNIT_ASSERT(networth_f.m_grid["Asset"]["Japanese Checking"][acJpyChecking][eActual][3]==((moJpyOpening-moJpyTransaction-moJpyTransaction)*moJpyPrice));
+ CPPUNIT_ASSERT(networth_f.m_grid["Asset"]["Japanese Checking"][acJpyChecking][eActual][4]==((moJpyOpening-moJpyTransaction-moJpyTransaction-moJpyTransaction)*moJpyPrice));
+
+ // test Fluctuating currency price, stable account balance
+ CPPUNIT_ASSERT(networth_f.m_grid["Asset"]["Japanese Checking"][acJpyChecking][eActual][5]==((moJpyOpening-moJpyTransaction-moJpyTransaction-moJpyTransaction)*moJpyPrice2));
+ CPPUNIT_ASSERT(networth_f.m_grid["Asset"]["Japanese Checking"][acJpyChecking][eActual][6]==((moJpyOpening-moJpyTransaction-moJpyTransaction-moJpyTransaction)*moJpyPrice3));
+ CPPUNIT_ASSERT(networth_f.m_grid["Asset"]["Japanese Checking"][acJpyChecking][eActual][7]==((moJpyOpening-moJpyTransaction-moJpyTransaction-moJpyTransaction)*moJpyPrice4));
+
+ // test multiple currencies totalled up
+ CPPUNIT_ASSERT(networth_f.m_grid["Asset"].m_total[eActual][4]==((moCanOpening-moCanTransaction-moCanTransaction-moCanTransaction)*moCanPrice)+((moJpyOpening-moJpyTransaction-moJpyTransaction-moJpyTransaction)*moJpyPrice));
+ CPPUNIT_ASSERT(networth_f.m_grid["Asset"].m_total[eActual][5]==((moCanOpening-moCanTransaction-moCanTransaction-moCanTransaction)*moCanPrice)+((moJpyOpening-moJpyTransaction-moJpyTransaction-moJpyTransaction)*moJpyPrice2)+moCheckingOpen);
+
+}
+
+void PivotTableTest::testAdvancedFilter()
+{
+ // test more advanced filtering capabilities
+
+ // amount
+ {
+ TransactionHelper t1( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t2( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moChild, acCredit, acChild );
+
+ MyMoneyReport filter;
+ filter.setRowType( MyMoneyReport::eExpenseIncome );
+ filter.setDateFilter(QDate(2004,1,1),QDate(2005,1,1).addDays(-1));
+ filter.setAmountFilter(moChild,moChild);
+ XMLandback(filter);
+ PivotTable spending_f( filter );
+ CPPUNIT_ASSERT(spending_f.m_grid.m_total[eActual].m_total==-moChild);
+ }
+
+ // payee (specific)
+ {
+ TransactionHelper t1( QDate(2004,10,31), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moChild, acCredit, acChild );
+ TransactionHelper t4( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moThomas, acCredit, acParent, QString(), "Thomas Baumgart" );
+
+ MyMoneyReport filter;
+ filter.setRowType( MyMoneyReport::eExpenseIncome );
+ filter.setDateFilter(QDate(2004,1,1),QDate(2005,1,1).addDays(-1));
+ filter.addPayee(MyMoneyFile::instance()->payeeByName("Thomas Baumgart").id());
+ filter.setName("Spending with Payee Filter");
+ XMLandback(filter);
+ PivotTable spending_f( filter );
+ writeTabletoHTML(spending_f,"Spending with Payee Filter.html");
+
+ CPPUNIT_ASSERT(spending_f.m_grid["Expense"]["Parent"][acParent][eActual][11]==moThomas);
+ CPPUNIT_ASSERT(spending_f.m_grid.m_total[eActual].m_total==-moThomas);
+ }
+ // payee (no payee)
+ {
+ TransactionHelper t1( QDate(2004,10,31), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moChild, acCredit, acChild );
+ TransactionHelper t4( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moNoPayee, acCredit, acParent, QString(), QString() );
+
+ MyMoneyReport filter;
+ filter.setRowType( MyMoneyReport::eExpenseIncome );
+ filter.setDateFilter(QDate(2004,1,1),QDate(2005,1,1).addDays(-1));
+ filter.addPayee(QString());
+ XMLandback(filter);
+ PivotTable spending_f( filter );
+ CPPUNIT_ASSERT(spending_f.m_grid["Expense"]["Parent"][acParent][eActual][11]==moNoPayee);
+ CPPUNIT_ASSERT(spending_f.m_grid.m_total[eActual].m_total==-moNoPayee);
+ }
+
+ // text
+ {
+ TransactionHelper t1( QDate(2004,10,31), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moChild, acCredit, acChild );
+ TransactionHelper t4( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moThomas, acCredit, acParent, QString(), "Thomas Baumgart" );
+
+ MyMoneyReport filter;
+ filter.setRowType( MyMoneyReport::eExpenseIncome );
+ filter.setDateFilter(QDate(2004,1,1),QDate(2005,1,1).addDays(-1));
+ filter.setTextFilter(QRegExp("Thomas"));
+ XMLandback(filter);
+ PivotTable spending_f( filter );
+ }
+
+ // type (payment, deposit, transfer)
+ {
+ TransactionHelper t1( QDate(2004,1,1), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2( QDate(2004,2,1), MyMoneySplit::ActionDeposit, -moParent1, acCredit, acParent );
+ TransactionHelper t3( QDate(2004,11,1), MyMoneySplit::ActionTransfer, moChild, acCredit, acChecking );
+
+ MyMoneyReport filter;
+ filter.setRowType( MyMoneyReport::eExpenseIncome );
+ filter.addType(MyMoneyTransactionFilter::payments);
+ XMLandback(filter);
+ PivotTable spending_f( filter );
+
+ CPPUNIT_ASSERT(spending_f.m_grid.m_total[eActual].m_total == -moSolo);
+
+ filter.clear();
+ filter.addType(MyMoneyTransactionFilter::deposits);
+ XMLandback(filter);
+ PivotTable spending_f2( filter );
+
+ CPPUNIT_ASSERT(spending_f2.m_grid.m_total[eActual].m_total == moParent1);
+
+ filter.clear();
+ filter.addType(MyMoneyTransactionFilter::transfers);
+ XMLandback(filter);
+ PivotTable spending_f3( filter );
+
+ CPPUNIT_ASSERT(spending_f3.m_grid.m_total[eActual].m_total == moZero);
+
+ filter.setRowType(MyMoneyReport::eAssetLiability);
+ filter.setDateFilter( QDate(2004,1,1), QDate(2004,12,31) );
+ XMLandback(filter);
+ PivotTable networth_f4( filter );
+
+ CPPUNIT_ASSERT(networth_f4.m_grid["Asset"].m_total[eActual][11] == moCheckingOpen + moChild);
+ CPPUNIT_ASSERT(networth_f4.m_grid["Liability"].m_total[eActual][11] == - moCreditOpen + moChild);
+ CPPUNIT_ASSERT(networth_f4.m_grid.m_total[eActual][10] == moCheckingOpen + moCreditOpen);
+ CPPUNIT_ASSERT(networth_f4.m_grid.m_total[eActual][11] == moCheckingOpen + moCreditOpen);
+ }
+
+ // state (reconciled, cleared, not)
+ {
+ TransactionHelper t1( QDate(2004,1,1), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2( QDate(2004,2,1), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3( QDate(2004,3,1), MyMoneySplit::ActionWithdrawal, moParent2, acCredit, acParent );
+ TransactionHelper t4( QDate(2004,4,1), MyMoneySplit::ActionWithdrawal, moChild, acCredit, acChild );
+
+ QValueList<MyMoneySplit> splits = t1.splits();
+ splits[0].setReconcileFlag(MyMoneySplit::Cleared);
+ splits[1].setReconcileFlag(MyMoneySplit::Cleared);
+ t1.modifySplit(splits[0]);
+ t1.modifySplit(splits[1]);
+ t1.update();
+
+ splits.clear();
+ splits = t2.splits();
+ splits[0].setReconcileFlag(MyMoneySplit::Reconciled);
+ splits[1].setReconcileFlag(MyMoneySplit::Reconciled);
+ t2.modifySplit(splits[0]);
+ t2.modifySplit(splits[1]);
+ t2.update();
+
+ MyMoneyReport filter;
+ filter.setRowType( MyMoneyReport::eExpenseIncome );
+ filter.setDateFilter(QDate(2004,1,1),QDate(2005,1,1).addDays(-1));
+ filter.addState(MyMoneyTransactionFilter::cleared);
+ XMLandback(filter);
+ PivotTable spending_f( filter );
+
+ CPPUNIT_ASSERT(spending_f.m_grid.m_total[eActual].m_total==-moSolo);
+
+ filter.addState(MyMoneyTransactionFilter::reconciled);
+ XMLandback(filter);
+ PivotTable spending_f2( filter );
+
+ CPPUNIT_ASSERT(spending_f2.m_grid.m_total[eActual].m_total==-moSolo-moParent1);
+
+ filter.clear();
+ filter.addState(MyMoneyTransactionFilter::notReconciled);
+ XMLandback(filter);
+ PivotTable spending_f3( filter );
+
+ CPPUNIT_ASSERT(spending_f3.m_grid.m_total[eActual].m_total==-moChild-moParent2);
+ }
+
+ // number
+ {
+ TransactionHelper t1( QDate(2004,10,31), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moParent2, acCredit, acParent );
+ TransactionHelper t4( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moChild, acCredit, acChild );
+
+ QValueList<MyMoneySplit> splits = t1.splits();
+ splits[0].setNumber("1");
+ splits[1].setNumber("1");
+ t1.modifySplit(splits[0]);
+ t1.modifySplit(splits[1]);
+ t1.update();
+
+ splits.clear();
+ splits = t2.splits();
+ splits[0].setNumber("2");
+ splits[1].setNumber("2");
+ t2.modifySplit(splits[0]);
+ t2.modifySplit(splits[1]);
+ t2.update();
+
+ splits.clear();
+ splits = t3.splits();
+ splits[0].setNumber("3");
+ splits[1].setNumber("3");
+ t3.modifySplit(splits[0]);
+ t3.modifySplit(splits[1]);
+ t3.update();
+
+ splits.clear();
+ splits = t2.splits();
+ splits[0].setNumber("4");
+ splits[1].setNumber("4");
+ t4.modifySplit(splits[0]);
+ t4.modifySplit(splits[1]);
+ t4.update();
+
+ MyMoneyReport filter;
+ filter.setRowType( MyMoneyReport::eExpenseIncome );
+ filter.setDateFilter(QDate(2004,1,1),QDate(2005,1,1).addDays(-1));
+ filter.setNumberFilter("1","3");
+ XMLandback(filter);
+ PivotTable spending_f( filter );
+ CPPUNIT_ASSERT(spending_f.m_grid.m_total[eActual].m_total==-moSolo-moParent1-moParent2);
+ }
+
+ // blank dates
+ {
+ TransactionHelper t1y1( QDate(2003,10,1), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2y1( QDate(2003,11,1), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3y1( QDate(2003,12,1), MyMoneySplit::ActionWithdrawal, moParent2, acCredit, acParent );
+
+ TransactionHelper t1y2( QDate(2004,4,1), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2y2( QDate(2004,5,1), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3y2( QDate(2004,6,1), MyMoneySplit::ActionWithdrawal, moParent2, acCredit, acParent );
+
+ TransactionHelper t1y3( QDate(2005,1,1), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2y3( QDate(2005,5,1), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3y3( QDate(2005,9,1), MyMoneySplit::ActionWithdrawal, moParent2, acCredit, acParent );
+
+ MyMoneyReport filter;
+ filter.setRowType( MyMoneyReport::eExpenseIncome );
+ filter.setDateFilter(QDate(),QDate(2004,7,1));
+ XMLandback(filter);
+ PivotTable spending_f( filter );
+ CPPUNIT_ASSERT(spending_f.m_grid.m_total[eActual].m_total==-moSolo-moParent1-moParent2-moSolo-moParent1-moParent2);
+
+ filter.clear();
+ XMLandback(filter);
+ PivotTable spending_f2( filter );
+ CPPUNIT_ASSERT(spending_f2.m_grid.m_total[eActual].m_total==-moSolo-moParent1-moParent2-moSolo-moParent1-moParent2-moSolo-moParent1-moParent2);
+
+ }
+
+}
+
+void PivotTableTest::testColumnType()
+{
+ // test column type values of other than 'month'
+
+ TransactionHelper t1q1( QDate(2004,1,1), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2q1( QDate(2004,2,1), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3q1( QDate(2004,3,1), MyMoneySplit::ActionWithdrawal, moParent2, acCredit, acParent );
+
+ TransactionHelper t1q2( QDate(2004,4,1), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2q2( QDate(2004,5,1), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3q2( QDate(2004,6,1), MyMoneySplit::ActionWithdrawal, moParent2, acCredit, acParent );
+
+ TransactionHelper t1y2( QDate(2005,1,1), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2y2( QDate(2005,5,1), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3y2( QDate(2005,9,1), MyMoneySplit::ActionWithdrawal, moParent2, acCredit, acParent );
+
+ MyMoneyReport filter;
+ filter.setRowType( MyMoneyReport::eExpenseIncome );
+ filter.setDateFilter(QDate(2003,12,31),QDate(2005,12,31));
+ filter.setRowType( MyMoneyReport::eExpenseIncome );
+ filter.setColumnType(MyMoneyReport::eBiMonths);
+ XMLandback(filter);
+ PivotTable spending_b( filter );
+
+ CPPUNIT_ASSERT(spending_b.m_grid.m_total[eActual][1] == moZero);
+ CPPUNIT_ASSERT(spending_b.m_grid.m_total[eActual][2] == -moParent1-moSolo);
+ CPPUNIT_ASSERT(spending_b.m_grid.m_total[eActual][3] == -moParent2-moSolo);
+ CPPUNIT_ASSERT(spending_b.m_grid.m_total[eActual][4] == -moParent);
+ CPPUNIT_ASSERT(spending_b.m_grid.m_total[eActual][5] == moZero);
+ CPPUNIT_ASSERT(spending_b.m_grid.m_total[eActual][6] == moZero);
+ CPPUNIT_ASSERT(spending_b.m_grid.m_total[eActual][7] == moZero);
+ CPPUNIT_ASSERT(spending_b.m_grid.m_total[eActual][8] == -moSolo);
+ CPPUNIT_ASSERT(spending_b.m_grid.m_total[eActual][9] == moZero);
+ CPPUNIT_ASSERT(spending_b.m_grid.m_total[eActual][10] == -moParent1);
+ CPPUNIT_ASSERT(spending_b.m_grid.m_total[eActual][11] == moZero);
+ CPPUNIT_ASSERT(spending_b.m_grid.m_total[eActual][12] == -moParent2);
+ CPPUNIT_ASSERT(spending_b.m_grid.m_total[eActual][13] == moZero);
+
+ filter.setColumnType(MyMoneyReport::eQuarters);
+ XMLandback(filter);
+ PivotTable spending_q( filter );
+
+ CPPUNIT_ASSERT(spending_q.m_grid.m_total[eActual][1] == moZero);
+ CPPUNIT_ASSERT(spending_q.m_grid.m_total[eActual][2] == -moSolo-moParent);
+ CPPUNIT_ASSERT(spending_q.m_grid.m_total[eActual][3] == -moSolo-moParent);
+ CPPUNIT_ASSERT(spending_q.m_grid.m_total[eActual][4] == moZero);
+ CPPUNIT_ASSERT(spending_q.m_grid.m_total[eActual][5] == moZero);
+ CPPUNIT_ASSERT(spending_q.m_grid.m_total[eActual][6] == -moSolo);
+ CPPUNIT_ASSERT(spending_q.m_grid.m_total[eActual][7] == -moParent1);
+ CPPUNIT_ASSERT(spending_q.m_grid.m_total[eActual][8] == -moParent2);
+ CPPUNIT_ASSERT(spending_q.m_grid.m_total[eActual][9] == moZero);
+
+ filter.setRowType( MyMoneyReport::eAssetLiability );
+ filter.setName( "Net Worth by Quarter" );
+ XMLandback(filter);
+ PivotTable networth_q( filter );
+ writeTabletoHTML( networth_q, "Net Worth by Quarter.html" );
+
+ CPPUNIT_ASSERT(networth_q.m_grid.m_total[eActual][1] == moZero);
+ CPPUNIT_ASSERT(networth_q.m_grid.m_total[eActual][2] == -moSolo-moParent);
+ CPPUNIT_ASSERT(networth_q.m_grid.m_total[eActual][3] == -moSolo-moParent-moSolo-moParent+moCheckingOpen);
+ CPPUNIT_ASSERT(networth_q.m_grid.m_total[eActual][4] == -moSolo-moParent-moSolo-moParent+moCheckingOpen+moCreditOpen);
+ CPPUNIT_ASSERT(networth_q.m_grid.m_total[eActual][5] == -moSolo-moParent-moSolo-moParent+moCheckingOpen+moCreditOpen);
+ CPPUNIT_ASSERT(networth_q.m_grid.m_total[eActual][6] == -moSolo-moSolo-moParent-moSolo-moParent+moCheckingOpen+moCreditOpen);
+ CPPUNIT_ASSERT(networth_q.m_grid.m_total[eActual][7] == -moParent1-moSolo-moSolo-moParent-moSolo-moParent+moCheckingOpen+moCreditOpen);
+ CPPUNIT_ASSERT(networth_q.m_grid.m_total[eActual][8] == -moParent2-moParent1-moSolo-moSolo-moParent-moSolo-moParent+moCheckingOpen+moCreditOpen);
+ CPPUNIT_ASSERT(networth_q.m_grid.m_total[eActual][9] == -moParent2-moParent1-moSolo-moSolo-moParent-moSolo-moParent+moCheckingOpen+moCreditOpen);
+
+ filter.setRowType( MyMoneyReport::eExpenseIncome );
+ filter.setColumnType(MyMoneyReport::eYears);
+ XMLandback(filter);
+ PivotTable spending_y( filter );
+
+ CPPUNIT_ASSERT(spending_y.m_grid.m_total[eActual][1] == moZero);
+ CPPUNIT_ASSERT(spending_y.m_grid.m_total[eActual][2] == -moSolo-moParent-moSolo-moParent);
+ CPPUNIT_ASSERT(spending_y.m_grid.m_total[eActual][3] == -moSolo-moParent);
+ CPPUNIT_ASSERT(spending_y.m_grid.m_total[eActual].m_total == -moSolo-moParent-moSolo-moParent-moSolo-moParent);
+
+ filter.setRowType( MyMoneyReport::eAssetLiability );
+ XMLandback(filter);
+ PivotTable networth_y( filter );
+
+ CPPUNIT_ASSERT(networth_y.m_grid.m_total[eActual][1] == moZero);
+ CPPUNIT_ASSERT(networth_y.m_grid.m_total[eActual][2] == -moSolo-moParent-moSolo-moParent+moCheckingOpen+moCreditOpen);
+ CPPUNIT_ASSERT(networth_y.m_grid.m_total[eActual][3] == -moSolo-moParent-moSolo-moParent-moSolo-moParent+moCheckingOpen+moCreditOpen);
+
+ // Test days-based reports
+
+ TransactionHelper t1d1( QDate(2004,7,1), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2d1( QDate(2004,7,1), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3d1( QDate(2004,7,5), MyMoneySplit::ActionWithdrawal, moParent2, acCredit, acParent );
+
+ TransactionHelper t1d2( QDate(2004,7,14), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2d2( QDate(2004,7,15), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3d2( QDate(2004,7,20), MyMoneySplit::ActionWithdrawal, moParent2, acCredit, acParent );
+
+ TransactionHelper t1d3( QDate(2004,8,2), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2d3( QDate(2004,8,3), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3d3( QDate(2004,8,4), MyMoneySplit::ActionWithdrawal, moParent2, acCredit, acParent );
+
+ filter.setDateFilter(QDate(2004,7,2),QDate(2004,7,14));
+ filter.setRowType( MyMoneyReport::eExpenseIncome );
+ filter.setColumnType(MyMoneyReport::eMonths);
+ filter.setColumnsAreDays(true);
+
+ XMLandback(filter);
+ PivotTable spending_days( filter );
+ writeTabletoHTML(spending_days,"Spending by Days.html");
+
+ CPPUNIT_ASSERT(spending_days.m_grid.m_total[eActual][4] == -moParent2);
+ CPPUNIT_ASSERT(spending_days.m_grid.m_total[eActual][13] == -moSolo);
+ CPPUNIT_ASSERT(spending_days.m_grid.m_total[eActual].m_total == -moSolo-moParent2);
+
+ unsigned save_dayweekstart = KGlobal::locale()->weekStartDay();
+ KGlobal::locale()->setWeekStartDay(2);
+
+ filter.setDateFilter(QDate(2004,7,2),QDate(2004,8,1));
+ filter.setRowType( MyMoneyReport::eExpenseIncome );
+ filter.setColumnType(static_cast<MyMoneyReport::EColumnType>(7));
+ filter.setColumnsAreDays(true);
+
+ XMLandback(filter);
+ PivotTable spending_weeks( filter );
+ writeTabletoHTML(spending_weeks,"Spending by Weeks.html");
+
+ KGlobal::locale()->setWeekStartDay(save_dayweekstart);
+
+ CPPUNIT_ASSERT(spending_weeks.m_grid.m_total[eActual][0] == moZero);
+ CPPUNIT_ASSERT(spending_weeks.m_grid.m_total[eActual][1] == -moParent2);
+ CPPUNIT_ASSERT(spending_weeks.m_grid.m_total[eActual][2] == moZero);
+ CPPUNIT_ASSERT(spending_weeks.m_grid.m_total[eActual][3] == -moSolo-moParent1);
+ CPPUNIT_ASSERT(spending_weeks.m_grid.m_total[eActual][4] == -moParent2);
+ CPPUNIT_ASSERT(spending_weeks.m_grid.m_total[eActual][5] == moZero);
+ CPPUNIT_ASSERT(spending_weeks.m_grid.m_total[eActual].m_total == -moSolo-moParent-moParent2);
+
+
+}
+
+void PivotTableTest::testInvestment(void)
+{
+ try
+ {
+ // Equities
+ eqStock1 = makeEquity("Stock1","STK1");
+ eqStock2 = makeEquity("Stock2","STK2");
+
+ // Accounts
+ acInvestment = makeAccount("Investment",MyMoneyAccount::Investment,moZero,QDate(2004,1,1),acAsset);
+ acStock1 = makeAccount("Stock 1",MyMoneyAccount::Stock,moZero,QDate(2004,1,1),acInvestment,eqStock1);
+ acStock2 = makeAccount("Stock 2",MyMoneyAccount::Stock,moZero,QDate(2004,1,1),acInvestment,eqStock2);
+ acDividends = makeAccount("Dividends",MyMoneyAccount::Income,moZero,QDate(2004,1,1),acIncome);
+
+ // Transactions
+ // Date Action Shares Price Stock Asset Income
+ InvTransactionHelper s1b1( QDate(2004,2,1), MyMoneySplit::ActionBuyShares, 1000.00, 100.00, acStock1, acChecking, QString() );
+ InvTransactionHelper s1b2( QDate(2004,3,1), MyMoneySplit::ActionBuyShares, 1000.00, 110.00, acStock1, acChecking, QString() );
+ InvTransactionHelper s1s1( QDate(2004,4,1), MyMoneySplit::ActionBuyShares, -200.00, 120.00, acStock1, acChecking, QString() );
+ InvTransactionHelper s1s2( QDate(2004,5,1), MyMoneySplit::ActionBuyShares, -200.00, 100.00, acStock1, acChecking, QString() );
+ InvTransactionHelper s1r1( QDate(2004,6,1), MyMoneySplit::ActionReinvestDividend, 50.00, 100.00, acStock1, QString(), acDividends );
+ InvTransactionHelper s1r2( QDate(2004,7,1), MyMoneySplit::ActionReinvestDividend, 50.00, 80.00, acStock1, QString(), acDividends );
+ InvTransactionHelper s1c1( QDate(2004,8,1), MyMoneySplit::ActionDividend, 10.00, 100.00, acStock1, acChecking, acDividends );
+ InvTransactionHelper s1c2( QDate(2004,9,1), MyMoneySplit::ActionDividend, 10.00, 120.00, acStock1, acChecking, acDividends );
+
+ makeEquityPrice( eqStock1, QDate(2004,10,1), 100.00 );
+
+ //
+ // Net Worth Report (with investments)
+ //
+
+ MyMoneyReport networth_r;
+ networth_r.setRowType( MyMoneyReport::eAssetLiability );
+ networth_r.setDateFilter(QDate(2004,1,1),QDate(2004,12,31).addDays(-1));
+ XMLandback(networth_r);
+ PivotTable networth(networth_r);
+
+ networth.dump("networth_i.html");
+
+ CPPUNIT_ASSERT(networth.m_grid["Asset"]["Investment"].m_total[eActual][1]==moZero);
+ // 1000 shares @ $100.00
+ CPPUNIT_ASSERT(networth.m_grid["Asset"]["Investment"].m_total[eActual][2]==MyMoneyMoney(100000.0));
+ // 2000 shares @ $110.00
+ CPPUNIT_ASSERT(networth.m_grid["Asset"]["Investment"].m_total[eActual][3]==MyMoneyMoney(220000.0));
+ // 1800 shares @ $120.00
+ CPPUNIT_ASSERT(networth.m_grid["Asset"]["Investment"].m_total[eActual][4]==MyMoneyMoney(216000.0));
+ // 1600 shares @ $100.00
+ CPPUNIT_ASSERT(networth.m_grid["Asset"]["Investment"].m_total[eActual][5]==MyMoneyMoney(160000.0));
+ // 1650 shares @ $100.00
+ CPPUNIT_ASSERT(networth.m_grid["Asset"]["Investment"].m_total[eActual][6]==MyMoneyMoney(165000.0));
+ // 1700 shares @ $ 80.00
+ CPPUNIT_ASSERT(networth.m_grid["Asset"]["Investment"].m_total[eActual][7]==MyMoneyMoney(136000.0));
+ // 1700 shares @ $100.00
+ CPPUNIT_ASSERT(networth.m_grid["Asset"]["Investment"].m_total[eActual][8]==MyMoneyMoney(170000.0));
+ // 1700 shares @ $120.00
+ CPPUNIT_ASSERT(networth.m_grid["Asset"]["Investment"].m_total[eActual][9]==MyMoneyMoney(204000.0));
+ // 1700 shares @ $100.00
+ CPPUNIT_ASSERT(networth.m_grid["Asset"]["Investment"].m_total[eActual][10]==MyMoneyMoney(170000.0));
+
+#if 0
+ // Dump file & reports
+ QFile g( "investmentkmy.xml" );
+ g.open( IO_WriteOnly );
+ MyMoneyStorageXML xml;
+ IMyMoneyStorageFormat& interface = xml;
+ interface.writeFile(&g, dynamic_cast<IMyMoneySerialize*> (MyMoneyFile::instance()->storage()));
+ g.close();
+
+ invtran.dump("invtran.html","<html><head></head><body>%1</body></html>");
+ invhold.dump("invhold.html","<html><head></head><body>%1</body></html>");
+#endif
+
+ }
+ catch(MyMoneyException *e)
+ {
+ CPPUNIT_FAIL(e->what());
+ delete e;
+ }
+}
+
+void PivotTableTest::testBudget(void)
+{
+
+ // 1. Budget on A, transations on A
+ {
+ BudgetHelper budget;
+ budget += BudgetEntryHelper( QDate(2006,1,1), acSolo, false, 100.0 );
+
+ MyMoneyReport report(MyMoneyReport::eBudgetActual,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailTop,
+ "Yearly Budgeted vs. Actual","Default Report");
+ PivotTable table(report);
+ }
+
+ // 2. Budget on B, not applying to sub accounts, transactions on B and B:1
+ {
+ BudgetHelper budget;
+ budget += BudgetEntryHelper( QDate(2006,1,1), acParent, false, 100.0 );
+ MyMoneyReport report(MyMoneyReport::eBudgetActual,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailTop,
+ "Yearly Budgeted vs. Actual","Default Report");
+ PivotTable table(report);
+ }
+
+ // - Both B and B:1 totals should show up
+ // - B actuals compare against B budget
+ // - B:1 actuals compare against 0
+
+ // 3. Budget on C, applying to sub accounts, transactions on C and C:1 and C:1:a
+ {
+ BudgetHelper budget;
+ budget += BudgetEntryHelper( QDate(2006,1,1), acParent, true, 100.0 );
+ MyMoneyReport report(MyMoneyReport::eBudgetActual,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailTop ,
+ "Yearly Budgeted vs. Actual","Default Report");
+ PivotTable table(report);
+ }
+
+ // - Only C totals show up, not C:1 or C:1:a totals
+ // - C + C:1 totals compare against C budget
+
+ // 4. Budget on D, not applying to sub accounts, budget on D:1 not applying, budget on D:2 applying. Transactions on D, D:1, D:2, D:2:a, D:2:b
+ {
+ BudgetHelper budget;
+ budget += BudgetEntryHelper( QDate(2006,1,1), acParent, false, 100.0 );
+ budget += BudgetEntryHelper( QDate(2006,1,1), acChild, false, 100.0 );
+ budget += BudgetEntryHelper( QDate(2006,1,1), acSecondChild, true, 100.0 );
+ MyMoneyReport report(MyMoneyReport::eBudgetActual,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailTop,
+ "Yearly Budgeted vs. Actual","Default Report");
+ PivotTable table(report);
+ }
+
+ // - Totals for D, D:1, D:2 show up. D:2:a and D:2:b do not
+ // - D actuals (only) compare against D budget
+ // - Ditto for D:1
+ // - D:2 acutals and children compare against D:2 budget
+
+ // 5. Budget on E, no transactions on E
+ {
+ BudgetHelper budget;
+ budget += BudgetEntryHelper( QDate(2006,1,1), acSolo, false, 100.0 );
+ MyMoneyReport report(MyMoneyReport::eBudgetActual,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailTop,
+ "Yearly Budgeted vs. Actual","Default Report");
+ PivotTable table(report);
+ }
+}
+
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/reports/pivottabletest.h b/kmymoney2/reports/pivottabletest.h
new file mode 100644
index 0000000..299355c
--- /dev/null
+++ b/kmymoney2/reports/pivottabletest.h
@@ -0,0 +1,75 @@
+/***************************************************************************
+ pivottabletest.h
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ Ace Jones <ace.jones@hotpop.com>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef PIVOTTABLETEST_H
+#define PIVOTTABLETEST_H
+
+#include <cppunit/extensions/HelperMacros.h>
+#include "../mymoney/mymoneyfile.h"
+#include "../mymoney/storage/mymoneyseqaccessmgr.h"
+
+class PivotTableTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(PivotTableTest);
+ CPPUNIT_TEST(testNetWorthSingle);
+ CPPUNIT_TEST(testNetWorthOfsetting);
+ CPPUNIT_TEST(testNetWorthOpeningPrior);
+ CPPUNIT_TEST(testNetWorthDateFilter);
+ CPPUNIT_TEST(testSpendingEmpty);
+ CPPUNIT_TEST(testSingleTransaction);
+ CPPUNIT_TEST(testSubAccount);
+ CPPUNIT_TEST(testFilterIEvsIE);
+ CPPUNIT_TEST(testFilterALvsAL);
+ CPPUNIT_TEST(testFilterALvsIE);
+ CPPUNIT_TEST(testFilterAllvsIE);
+ CPPUNIT_TEST(testFilterBasics);
+ CPPUNIT_TEST(testMultipleCurrencies);
+ CPPUNIT_TEST(testAdvancedFilter);
+ CPPUNIT_TEST(testColumnType);
+ CPPUNIT_TEST(testInvestment);
+ CPPUNIT_TEST(testBudget);
+ CPPUNIT_TEST_SUITE_END();
+
+private:
+ MyMoneyAccount *m;
+
+ MyMoneySeqAccessMgr* storage;
+ MyMoneyFile* file;
+
+public:
+ PivotTableTest();
+ void setUp ();
+ void tearDown ();
+ void testNetWorthSingle();
+ void testNetWorthOfsetting();
+ void testNetWorthOpeningPrior();
+ void testNetWorthDateFilter();
+ void testSpendingEmpty();
+ void testSingleTransaction();
+ void testSubAccount();
+ void testFilterIEvsIE();
+ void testFilterALvsAL();
+ void testFilterALvsIE();
+ void testFilterAllvsIE();
+ void testFilterBasics();
+ void testMultipleCurrencies();
+ void testAdvancedFilter();
+ void testColumnType();
+ void testInvestment();
+ void testBudget();
+};
+
+#endif // PIVOTTABLETEST_H
diff --git a/kmymoney2/reports/querytable.cpp b/kmymoney2/reports/querytable.cpp
new file mode 100644
index 0000000..29702c6
--- /dev/null
+++ b/kmymoney2/reports/querytable.cpp
@@ -0,0 +1,1522 @@
+/***************************************************************************
+ querytable.cpp
+ -------------------
+ begin : Fri Jul 23 2004
+ copyright : (C) 2004-2005 by Ace Jones
+ (C) 2007 Sascha Pfau
+ email : acejones@users.sourceforge.net
+ MrPeacock@gmail.com
+ ***************************************************************************/
+
+/****************************************************************************
+ Contains code from the func_xirr and related methods of financial.cpp
+ - KOffice 1.6 by Sascha Pfau. Sascha agreed to relicense those methods under
+ GPLv2 or later.
+*****************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qvaluelist.h>
+#include <qfile.h>
+#include <qtextstream.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+// This is just needed for i18n(). Once I figure out how to handle i18n
+// without using this macro directly, I'll be freed of KDE dependency.
+
+#include <klocale.h>
+#include <kdebug.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include "../mymoney/mymoneyfile.h"
+#include "../mymoney/mymoneytransaction.h"
+#include "../mymoney/mymoneyreport.h"
+#include "../mymoney/mymoneyexception.h"
+#include "../kmymoneyutils.h"
+#include "../kmymoneyglobalsettings.h"
+#include "reportaccount.h"
+#include "reportdebug.h"
+#include "querytable.h"
+
+namespace reports {
+
+// ****************************************************************************
+//
+// CashFlowListItem implementation
+//
+// Cash flow analysis tools for investment reports
+//
+// ****************************************************************************
+
+QDate CashFlowListItem::m_sToday = QDate::currentDate();
+
+MyMoneyMoney CashFlowListItem::NPV( double _rate ) const
+{
+ double T = static_cast<double>(m_sToday.daysTo(m_date)) / 365.0;
+ MyMoneyMoney result = m_value.toDouble() / pow(1+_rate,T);
+
+ //kdDebug(2) << "CashFlowListItem::NPV( " << _rate << " ) == " << result << endl;
+
+ return result;
+}
+
+// ****************************************************************************
+//
+// CashFlowList implementation
+//
+// Cash flow analysis tools for investment reports
+//
+// ****************************************************************************
+
+CashFlowListItem CashFlowList::mostRecent(void) const
+{
+ CashFlowList dupe( *this );
+ qHeapSort( dupe );
+
+ //kdDebug(2) << " CashFlowList::mostRecent() == " << dupe.back().date().toString(Qt::ISODate) << endl;
+
+ return dupe.back();
+}
+
+MyMoneyMoney CashFlowList::NPV( double _rate ) const
+{
+ MyMoneyMoney result = 0.0;
+
+ const_iterator it_cash = begin();
+ while ( it_cash != end() )
+ {
+ result += (*it_cash).NPV( _rate );
+ ++it_cash;
+ }
+
+ //kdDebug(2) << "CashFlowList::NPV( " << _rate << " ) == " << result << endl << "------------------------" << endl;
+
+ return result;
+}
+
+double CashFlowList::calculateXIRR ( void ) const
+{
+ double resultRate = 0.00001;
+
+ double resultZero = 0.00000;
+ //if ( args.count() > 2 )
+ // resultRate = calc->conv()->asFloat ( args[2] ).asFloat();
+
+// check pairs and count >= 2 and guess > -1.0
+ //if ( args[0].count() != args[1].count() || args[1].count() < 2 || resultRate <= -1.0 )
+ // return Value::errorVALUE();
+
+// define max epsilon
+ static const double maxEpsilon = 1e-5;
+
+// max number of iterations
+ static const int maxIter = 50;
+
+// Newton's method - try to find a res, with a accuracy of maxEpsilon
+ double rateEpsilon, newRate, resultValue;
+ int i = 0;
+ bool contLoop;
+
+ do
+ {
+ resultValue = xirrResult ( resultRate );
+
+ double resultDerive = xirrResultDerive ( resultRate );
+
+ //check what happens if xirrResultDerive is zero
+ //Don't know if it is correct to dismiss the result
+ if( resultDerive != 0 ) {
+ newRate = resultRate - resultValue / resultDerive;
+ } else {
+
+ newRate = resultRate - resultValue;
+ }
+
+ rateEpsilon = fabs ( newRate - resultRate );
+
+ resultRate = newRate;
+ contLoop = ( rateEpsilon > maxEpsilon ) && ( fabs ( resultValue ) > maxEpsilon );
+ }
+ while ( contLoop && ( ++i < maxIter ) );
+
+ if ( contLoop )
+ return resultZero;
+
+ return resultRate;
+}
+
+double CashFlowList::xirrResult ( double& rate ) const
+{
+ QDate date;
+
+ double r = rate + 1.0;
+ double res = 0.00000;//back().value().toDouble();
+
+ QValueList<CashFlowListItem>::const_iterator list_it = begin();
+ while( list_it != end() ) {
+ double e_i = ( (* list_it).today().daysTo ( (* list_it).date() ) ) / 365.0;
+ MyMoneyMoney val = (* list_it).value();
+
+ res += val.toDouble() / pow ( r, e_i );
+ ++list_it;
+ }
+
+ return res;
+}
+
+
+double CashFlowList::xirrResultDerive ( double& rate ) const
+{
+ QDate date;
+
+ double r = rate + 1.0;
+ double res = 0.00000;
+
+ QValueList<CashFlowListItem>::const_iterator list_it = begin();
+ while( list_it != end() ) {
+ double e_i = ( (* list_it).today().daysTo ( (* list_it).date() ) ) / 365.0;
+ MyMoneyMoney val = (* list_it).value();
+
+ res -= e_i * val.toDouble() / pow ( r, e_i + 1.0 );
+ ++list_it;
+ }
+
+ return res;
+}
+
+double CashFlowList::IRR( void ) const
+{
+ double result = 0.0;
+
+ // set 'today', which is the most recent of all dates in the list
+ CashFlowListItem::setToday( mostRecent().date() );
+
+ result = calculateXIRR();
+ return result;
+}
+
+MyMoneyMoney CashFlowList::total(void) const
+{
+ MyMoneyMoney result;
+
+ const_iterator it_cash = begin();
+ while ( it_cash != end() )
+ {
+ result += (*it_cash).value();
+ ++it_cash;
+ }
+
+ return result;
+}
+
+void CashFlowList::dumpDebug(void) const
+{
+ const_iterator it_item = begin();
+ while ( it_item != end() )
+ {
+ kdDebug(2) << (*it_item).date().toString(Qt::ISODate) << " " << (*it_item).value().toString() << endl;
+ ++it_item;
+ }
+}
+
+// ****************************************************************************
+//
+// QueryTable implementation
+//
+// ****************************************************************************
+
+/**
+ * TODO
+ *
+ * - Collapse 2- & 3- groups when they are identical
+ * - Way more test cases (especially splits & transfers)
+ * - Option to collapse splits
+ * - Option to exclude transfers
+ *
+ */
+
+QueryTable::QueryTable(const MyMoneyReport& _report): ListTable(_report)
+{
+ // seperated into its own method to allow debugging (setting breakpoints
+ // directly in ctors somehow does not work for me (ipwizard))
+ // TODO: remove the init() method and move the code back to the ctor
+ init();
+}
+
+void QueryTable::init(void)
+{
+ switch ( m_config.rowType() )
+ {
+ case MyMoneyReport::eAccountByTopAccount:
+ case MyMoneyReport::eEquityType:
+ case MyMoneyReport::eAccountType:
+ case MyMoneyReport::eInstitution:
+ constructAccountTable();
+ m_columns="account";
+ break;
+
+ case MyMoneyReport::eAccount:
+ constructTransactionTable();
+ m_columns="accountid,postdate";
+ break;
+
+ case MyMoneyReport::ePayee:
+ case MyMoneyReport::eMonth:
+ case MyMoneyReport::eWeek:
+ constructTransactionTable();
+ m_columns="postdate,account";
+ break;
+ case MyMoneyReport::eCashFlow:
+ constructSplitsTable();
+ m_columns="postdate";
+ break;
+ default:
+ constructTransactionTable();
+ m_columns="postdate";
+ }
+
+ // Sort the data to match the report definition
+ m_subtotal="value";
+
+ switch ( m_config.rowType() )
+ {
+ case MyMoneyReport::eCashFlow:
+ m_group = "categorytype,topcategory,category";
+ break;
+ case MyMoneyReport::eCategory:
+ m_group = "categorytype,topcategory,category";
+ break;
+ case MyMoneyReport::eTopCategory:
+ m_group = "categorytype,topcategory";
+ break;
+ case MyMoneyReport::eTopAccount:
+ m_group = "topaccount,account";
+ break;
+ case MyMoneyReport::eAccount:
+ m_group = "account";
+ break;
+ case MyMoneyReport::eAccountReconcile:
+ m_group = "account,reconcileflag";
+ break;
+ case MyMoneyReport::ePayee:
+ m_group = "payee";
+ break;
+ case MyMoneyReport::eMonth:
+ m_group = "month";
+ break;
+ case MyMoneyReport::eWeek:
+ m_group = "week";
+ break;
+ case MyMoneyReport::eAccountByTopAccount:
+ m_group = "topaccount";
+ break;
+ case MyMoneyReport::eEquityType:
+ m_group = "equitytype";
+ break;
+ case MyMoneyReport::eAccountType:
+ m_group = "type";
+ break;
+ case MyMoneyReport::eInstitution:
+ m_group = "institution,topaccount";
+ break;
+ default:
+ throw new MYMONEYEXCEPTION("QueryTable::QueryTable(): unhandled row type");
+ }
+
+ QString sort = m_group + "," + m_columns + ",id,rank";
+
+ switch (m_config.rowType()) {
+ case MyMoneyReport::eAccountByTopAccount:
+ case MyMoneyReport::eEquityType:
+ case MyMoneyReport::eAccountType:
+ case MyMoneyReport::eInstitution:
+ m_columns="account";
+ break;
+
+ default:
+ m_columns="postdate";
+ }
+
+ unsigned qc = m_config.queryColumns();
+
+ if ( qc & MyMoneyReport::eQCnumber )
+ m_columns += ",number";
+ if ( qc & MyMoneyReport::eQCpayee )
+ m_columns += ",payee";
+ if ( qc & MyMoneyReport::eQCcategory )
+ m_columns += ",category";
+ if ( qc & MyMoneyReport::eQCaccount )
+ m_columns += ",account";
+ if ( qc & MyMoneyReport::eQCreconciled )
+ m_columns += ",reconcileflag";
+ if ( qc & MyMoneyReport::eQCmemo )
+ m_columns += ",memo";
+ if ( qc & MyMoneyReport::eQCaction )
+ m_columns += ",action";
+ if ( qc & MyMoneyReport::eQCshares )
+ m_columns += ",shares";
+ if ( qc & MyMoneyReport::eQCprice )
+ m_columns += ",price";
+ if ( qc & MyMoneyReport::eQCperformance )
+ m_columns += ",startingbal,buys,sells,reinvestincome,cashincome,return,returninvestment";
+ if ( qc & MyMoneyReport::eQCloan )
+ {
+ m_columns += ",payment,interest,fees";
+ m_postcolumns = "balance";
+ }
+ if ( qc & MyMoneyReport::eQCbalance)
+ m_postcolumns = "balance";
+
+ TableRow::setSortCriteria(sort);
+ qHeapSort(m_rows);
+}
+
+void QueryTable::constructTransactionTable(void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ //make sure we have all subaccounts of investment accounts
+ includeInvestmentSubAccounts();
+
+ MyMoneyReport report(m_config);
+ report.setReportAllSplits(false);
+ report.setConsiderCategory(true);
+
+ bool use_transfers;
+ bool use_summary;
+ bool hide_details;
+
+ switch (m_config.rowType()) {
+ case MyMoneyReport::eCategory:
+ case MyMoneyReport::eTopCategory:
+ use_summary = false;
+ use_transfers = false;
+ hide_details = false;
+ break;
+ case MyMoneyReport::ePayee:
+ use_summary = false;
+ use_transfers = false;
+ hide_details = (m_config.detailLevel() == MyMoneyReport::eDetailNone);
+ break;
+ default:
+ use_summary = true;
+ use_transfers = true;
+ hide_details = (m_config.detailLevel() == MyMoneyReport::eDetailNone);
+ break;
+ }
+
+ // support for opening and closing balances
+ QMap<QString, MyMoneyAccount> accts;
+
+ //get all transactions for this report
+ QValueList<MyMoneyTransaction> transactions = file->transactionList(report);
+ for (QValueList<MyMoneyTransaction>::const_iterator it_transaction = transactions.begin(); it_transaction != transactions.end(); ++it_transaction) {
+
+ TableRow qA, qS;
+ QDate pd;
+
+ qA["id"] = qS["id"] = (* it_transaction).id();
+ qA["entrydate"] = qS["entrydate"] = (* it_transaction).entryDate().toString(Qt::ISODate);
+ qA["postdate"] = qS["postdate"] = (* it_transaction).postDate().toString(Qt::ISODate);
+ qA["commodity"] = qS["commodity"] = (* it_transaction).commodity();
+
+ pd = (* it_transaction).postDate();
+ qA["month"] = qS["month"] = i18n("Month of %1").arg(QDate(pd.year(),pd.month(),1).toString(Qt::ISODate));
+ qA["week"] = qS["week"] = i18n("Week of %1").arg(pd.addDays(1-pd.dayOfWeek()).toString(Qt::ISODate));
+
+ qA["currency"] = qS["currency"] = "";
+
+ if((* it_transaction).commodity() != file->baseCurrency().id()) {
+ if (!report.isConvertCurrency()) {
+ qA["currency"] = qS["currency"] = (*it_transaction).commodity();
+ }
+ }
+
+ // to handle splits, we decide on which account to base the split
+ // (a reference point or point of view so to speak). here we take the
+ // first account that is a stock account or loan account (or the first account
+ // that is not an income or expense account if there is no stock or loan account)
+ // to be the account (qA) that will have the sub-item "split" entries. we add
+ // one transaction entry (qS) for each subsequent entry in the split.
+
+ const QValueList<MyMoneySplit>& splits = (*it_transaction).splits();
+ QValueList<MyMoneySplit>::const_iterator myBegin, it_split;
+ //S_end = splits.end();
+
+ for (it_split = splits.begin(), myBegin = splits.end(); it_split != splits.end(); ++it_split) {
+ ReportAccount splitAcc = (* it_split).accountId();
+ // always put split with a "stock" account if it exists
+ if (splitAcc.isInvest())
+ break;
+
+ // prefer to put splits with a "loan" account if it exists
+ if(splitAcc.isLoan())
+ myBegin = it_split;
+
+ if((myBegin == splits.end()) && ! splitAcc.isIncomeExpense()) {
+ myBegin = it_split;
+ }
+ }
+
+ // select our "reference" split
+ if (it_split == splits.end()) {
+ it_split = myBegin;
+ } else {
+ myBegin = it_split;
+ }
+
+ // if the split is still unknown, use the first one. I have seen this
+ // happen with a transaction that has only a single split referencing an income or expense
+ // account and has an amount and value of 0. Such a transaction will fall through
+ // the above logic and leave 'it_split' pointing to splits.end() which causes the remainder
+ // of this to end in an infinite loop.
+ if(it_split == splits.end()) {
+ it_split = splits.begin();
+ }
+
+ // for "loan" reports, the loan transaction gets special treatment.
+ // the splits of a loan transaction are placed on one line in the
+ // reference (loan) account (qA). however, we process the matching
+ // split entries (qS) normally.
+
+ bool loan_special_case = false;
+ if(m_config.queryColumns() & MyMoneyReport::eQCloan) {
+ ReportAccount splitAcc = (*it_split).accountId();
+ loan_special_case = splitAcc.isLoan();
+ }
+
+#if 0
+ // a stock dividend or yield transaction is also a special case.
+ // [dv: the original comment follows]
+ // handle cash dividends. these little fellas require very special handling.
+ // the stock account will produce a row with zero value & zero shares. Then
+ // there will be 2 split rows, a category and a transfer account. We are
+ // only concerned with the transfer account, and we will NOT show the income
+ // account. (This may have to be changed later if we feel we need it.)
+
+ // [dv: this special case just doesn't make sense to me -- it seems to
+ // violate the "zero sum" transaction concept. for now, then, the stock
+ // dividend / yield special case goes unimplemented.]
+
+ bool stock_special_case =
+ (a.isInvest() &&
+ ((* is).action() == MyMoneySplit::ActionDividend ||
+ (* is).action() == MyMoneySplit::ActionYield));
+#endif
+
+ bool include_me = true;
+ bool transaction_text = false; //indicates whether a text should be considered as a match for the transaction or for a split only
+ QString a_fullname = "";
+ QString a_memo = "";
+ unsigned int pass = 1;
+ QString myBeginCurrency = (file->account((*myBegin).accountId())).currencyId(); //currency of the main split
+ do {
+ MyMoneyMoney xr;
+ ReportAccount splitAcc = (* it_split).accountId();
+
+ //use the fraction relevant to the account at hand
+ int fraction = splitAcc.currency().smallestAccountFraction();
+
+ //use base currency fraction if not initialized
+ if(fraction == -1)
+ fraction = file->baseCurrency().smallestAccountFraction();
+
+ QString institution = splitAcc.institutionId();
+ QString payee = (*it_split).payeeId();
+
+ //convert to base currency
+ if ( m_config.isConvertCurrency() ) {
+ xr = (splitAcc.deepCurrencyPrice((*it_transaction).postDate()) * splitAcc.baseCurrencyPrice((*it_transaction).postDate())).reduce();
+ } else {
+ xr = (splitAcc.deepCurrencyPrice((*it_transaction).postDate())).reduce();
+ //if the currency of the split is different from the currency of the main split, then convert to the currency of the main split
+ if(splitAcc.currency().id() != myBeginCurrency) {
+ xr = (xr * splitAcc.foreignCurrencyPrice(myBeginCurrency, (*it_transaction).postDate())).reduce();
+ }
+ }
+
+ if (splitAcc.isInvest()) {
+
+ // use the institution of the parent for stock accounts
+ institution = splitAcc.parent().institutionId();
+ MyMoneyMoney shares = (*it_split).shares();
+
+ qA["action"] = (*it_split).action();
+ qA["shares"] = shares.isZero() ? "" : (*it_split).shares().toString();
+ qA["price"] = shares.isZero() ? "" : xr.convert(MyMoneyMoney::precToDenom(KMyMoneyGlobalSettings::pricePrecision())).toString();
+
+ if (((*it_split).action() == MyMoneySplit::ActionBuyShares) && (*it_split).shares().isNegative())
+ qA["action"] = "Sell";
+
+ qA["investaccount"] = splitAcc.parent().name();
+ }
+
+ if (it_split == myBegin) {
+
+ include_me = m_config.includes(splitAcc);
+ a_fullname = splitAcc.fullName();
+ a_memo = (*it_split).memo();
+
+ transaction_text = m_config.match(&(*it_split));
+
+ qA["price"] = xr.convert(MyMoneyMoney::precToDenom(KMyMoneyGlobalSettings::pricePrecision())).toString();
+ qA["account"] = splitAcc.name();
+ qA["accountid"] = splitAcc.id();
+ qA["topaccount"] = splitAcc.topParentName();
+
+ qA["institution"] = institution.isEmpty()
+ ? i18n("No Institution")
+ : file->institution(institution).name();
+
+ qA["payee"] = payee.isEmpty()
+ ? i18n("[Empty Payee]")
+ : file->payee(payee).name().simplifyWhiteSpace();
+
+ qA["reconciledate"] = (*it_split).reconcileDate().toString(Qt::ISODate);
+ qA["reconcileflag"] = KMyMoneyUtils::reconcileStateToString((*it_split).reconcileFlag(), true );
+ qA["number"] = (*it_split).number();
+
+ qA["memo"] = a_memo;
+
+ qS["reconciledate"] = qA["reconciledate"];
+ qS["reconcileflag"] = qA["reconcileflag"];
+ qS["number"] = qA["number"];
+
+ qS["topcategory"] = splitAcc.topParentName();
+ qS["categorytype"] = i18n("Transfer");
+
+ // only include the configured accounts
+ if (include_me) {
+
+ if (loan_special_case) {
+
+ // put the principal amount in the "value" column and convert to lowest fraction
+ qA["value"] = ((-(*it_split).shares()) * xr).convert(fraction).toString();
+
+ qA["rank"] = "0";
+ qA["split"] = "";
+
+ } else {
+ if ((splits.count() > 2) && use_summary) {
+
+ // add the "summarized" split transaction
+ // this is the sub-total of the split detail
+ // convert to lowest fraction
+ qA["value"] = ((*it_split).shares() * xr).convert(fraction).toString();
+ qA["rank"] = "0";
+ qA["category"] = i18n("[Split Transaction]");
+ qA["topcategory"] = i18n("Split");
+ qA["categorytype"] = i18n("Split");
+
+ m_rows += qA;
+ }
+ }
+
+ // track accts that will need opening and closing balances
+ //FIXME in some cases it will show the opening and closing
+ //balances but no transactions if the splits are all filtered out -- asoliverez
+ accts.insert (splitAcc.id(), splitAcc);
+ }
+
+ } else {
+
+ if (include_me) {
+
+ if (loan_special_case) {
+ MyMoneyMoney value = ((-(* it_split).shares()) * xr).convert(fraction);
+
+ if ((*it_split).action() == MyMoneySplit::ActionAmortization) {
+ // put the payment in the "payment" column and convert to lowest fraction
+ qA["payment"] = value.toString();
+ }
+ else if ((*it_split).action() == MyMoneySplit::ActionInterest) {
+ // put the interest in the "interest" column and convert to lowest fraction
+ qA["interest"] = value.toString();
+ }
+ else if (splits.count() > 2) {
+ // [dv: This comment carried from the original code. I am
+ // not exactly clear on what it means or why we do this.]
+ // Put the initial pay-in nowhere (that is, ignore it). This
+ // is dangerous, though. The only way I can tell the initial
+ // pay-in apart from fees is if there are only 2 splits in
+ // the transaction. I wish there was a better way.
+ }
+ else {
+ // accumulate everything else in the "fees" column
+ MyMoneyMoney n0 = MyMoneyMoney(qA["fees"]);
+ qA["fees"] = (n0 + value).toString();
+ }
+ // we don't add qA here for a loan transaction. we'll add one
+ // qA afer all of the split components have been processed.
+ // (see below)
+
+ }
+
+ //--- special case to hide split transaction details
+ else if (hide_details && (splits.count() > 2)) {
+ // essentially, don't add any qA entries
+ }
+
+ //--- default case includes all transaction details
+ else {
+
+ //this is when the splits are going to be shown as children of the main split
+ if ((splits.count() > 2) && use_summary) {
+ qA["value"] = "";
+
+ //convert to lowest fraction
+ qA["split"] = ((-(*it_split).shares()) * xr).convert(fraction).toString();
+ qA["rank"] = "1";
+ } else {
+ //this applies when the transaction has only 2 splits, or each split is going to be
+ //shown separately, eg. transactions by category
+
+ qA["split"] = "";
+
+ //multiply by currency and convert to lowest fraction
+ qA["value"] = ((-(*it_split).shares()) * xr).convert(fraction).toString();
+ qA["rank"] = "0";
+ }
+
+ qA ["memo"] = (*it_split).memo();
+
+ if (! splitAcc.isIncomeExpense()) {
+ qA["category"] = ((*it_split).shares().isNegative()) ?
+ i18n("Transfer from %1").arg(splitAcc.fullName())
+ : i18n("Transfer to %1").arg(splitAcc.fullName());
+ qA["topcategory"] = splitAcc.topParentName();
+ qA["categorytype"] = i18n("Transfer");
+ }
+ else {
+ qA ["category"] = splitAcc.fullName();
+ qA ["topcategory"] = splitAcc.topParentName();
+ qA ["categorytype"] = KMyMoneyUtils::accountTypeToString(splitAcc.accountGroup());
+ }
+
+ if (use_transfers || (splitAcc.isIncomeExpense() && m_config.includes(splitAcc)))
+ {
+ //if it matches the text of the main split of the transaction or
+ //it matches this particular split, include it
+ //otherwise, skip it
+ //if the filter is "does not contain" exclude the split if it does not match
+ //even it matches the whole split
+ if((m_config.isInvertingText() &&
+ m_config.match( &(*it_split) ))
+ || ( !m_config.isInvertingText()
+ && (transaction_text
+ || m_config.match( &(*it_split) )))) {
+ m_rows += qA;
+ }
+ }
+ }
+ }
+
+ if (m_config.includes(splitAcc) && use_transfers) {
+ if (! splitAcc.isIncomeExpense()) {
+
+ //multiply by currency and convert to lowest fraction
+ qS["value"] = ((*it_split).shares() * xr).convert(fraction).toString();
+
+ qS["rank"] = "0";
+
+ qS["account"] = splitAcc.name();
+ qS["accountid"] = splitAcc.id();
+ qS["topaccount"] = splitAcc.topParentName();
+
+ qS["category"] = ((*it_split).shares().isNegative())
+ ? i18n("Transfer to %1").arg(a_fullname)
+ : i18n("Transfer from %1").arg(a_fullname);
+
+ qS["institution"] = institution.isEmpty()
+ ? i18n("No Institution")
+ : file->institution(institution).name();
+
+ qS["memo"] = (*it_split).memo().isEmpty()
+ ? a_memo
+ : (*it_split).memo();
+
+ qS["payee"] = payee.isEmpty()
+ ? qA["payee"]
+ : file->payee(payee).name().simplifyWhiteSpace();
+
+ //check the specific split against the filter for text and amount
+ //TODO this should be done at the engine, but I have no clear idea how -- asoliverez
+ //if the filter is "does not contain" exclude the split if it does not match
+ //even it matches the whole split
+ if((m_config.isInvertingText() &&
+ m_config.match( &(*it_split) ))
+ || ( !m_config.isInvertingText()
+ && (transaction_text
+ || m_config.match( &(*it_split) )))) {
+ m_rows += qS;
+
+ // track accts that will need opening and closing balances
+ accts.insert (splitAcc.id(), splitAcc);
+ }
+ }
+ }
+ }
+
+ ++it_split;
+
+ // look for wrap-around
+ if (it_split == splits.end())
+ it_split = splits.begin();
+
+ // but terminate if this transaction has only a single split
+ if(splits.count() < 2)
+ break;
+
+ //check if there have been more passes than there are splits
+ //this is to prevent infinite loops in cases of data inconsistency -- asoliverez
+ ++pass;
+ if( pass > splits.count() )
+ break;
+
+ } while (it_split != myBegin);
+
+ if (loan_special_case) {
+ m_rows += qA;
+ }
+ }
+
+ // now run through our accts list and add opening and closing balances
+
+ switch (m_config.rowType()) {
+ case MyMoneyReport::eAccount:
+ case MyMoneyReport::eTopAccount:
+ break;
+
+ // case MyMoneyReport::eCategory:
+ // case MyMoneyReport::eTopCategory:
+ // case MyMoneyReport::ePayee:
+ // case MyMoneyReport::eMonth:
+ // case MyMoneyReport::eWeek:
+ default:
+ return;
+ }
+
+ QDate startDate, endDate;
+
+ report.validDateRange(startDate, endDate);
+ QString strStartDate = startDate.toString(Qt::ISODate);
+ QString strEndDate = endDate.toString(Qt::ISODate);
+ startDate = startDate.addDays(-1);
+
+ QMap<QString, MyMoneyAccount>::const_iterator it_account, accts_end;
+ for (it_account = accts.begin(); it_account != accts.end(); ++it_account) {
+ TableRow qA;
+
+ ReportAccount account = (* it_account);
+
+ //get fraction for account
+ int fraction = account.currency().smallestAccountFraction();
+
+ //use base currency fraction if not initialized
+ if(fraction == -1)
+ fraction = file->baseCurrency().smallestAccountFraction();
+
+ QString institution = account.institutionId();
+
+ // use the institution of the parent for stock accounts
+ if (account.isInvest())
+ institution = account.parent().institutionId();
+
+ MyMoneyMoney startBalance, endBalance, startPrice, endPrice;
+ MyMoneyMoney startShares, endShares;
+
+ //get price and convert currency if necessary
+ if ( m_config.isConvertCurrency() ) {
+ startPrice = (account.deepCurrencyPrice(startDate) * account.baseCurrencyPrice(startDate)).reduce();
+ endPrice = (account.deepCurrencyPrice(endDate) * account.baseCurrencyPrice(endDate)).reduce();
+ } else {
+ startPrice = account.deepCurrencyPrice(startDate).reduce();
+ endPrice = account.deepCurrencyPrice(endDate).reduce();
+ }
+ startShares = file->balance(account.id(),startDate);
+ endShares = file->balance(account.id(),endDate);
+
+ //get starting and ending balances
+ startBalance = startShares * startPrice;
+ endBalance = endShares * endPrice;
+
+ //starting balance
+ // don't show currency if we're converting or if it's not foreign
+ qA["currency"] = (m_config.isConvertCurrency() || ! account.isForeignCurrency()) ? "" : account.currency().id();
+
+ qA["accountid"] = account.id();
+ qA["account"] = account.name();
+ qA["topaccount"] = account.topParentName();
+ qA["institution"] = institution.isEmpty() ? i18n("No Institution") : file->institution(institution).name();
+ qA["rank"] = "-2";
+
+ qA["price"] = startPrice.convert(MyMoneyMoney::precToDenom(KMyMoneyGlobalSettings::pricePrecision())).toString();
+ if (account.isInvest()) {
+ qA["shares"] = startShares.toString();
+ }
+
+ qA["postdate"] = strStartDate;
+ qA["balance"] = startBalance.convert(fraction).toString();
+ qA["value"] = QString();
+ qA["id"] = "A";
+ m_rows += qA;
+
+ //ending balance
+ qA["price"] = endPrice.convert(MyMoneyMoney::precToDenom(KMyMoneyGlobalSettings::pricePrecision())).toString();
+
+ if (account.isInvest()) {
+ qA["shares"] = endShares.toString();
+ }
+
+ qA["postdate"] = strEndDate;
+ qA["balance"] = endBalance.toString();
+ qA["id"] = "Z";
+ m_rows += qA;
+ }
+}
+
+void QueryTable::constructPerformanceRow( const ReportAccount& account, TableRow& result ) const
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneySecurity security = file->security(account.currencyId());
+
+ result["equitytype"] = KMyMoneyUtils::securityTypeToString(security.securityType());
+
+ //set fraction
+ int fraction = account.currency().smallestAccountFraction();
+
+ //
+ // Calculate performance
+ //
+
+ // The following columns are created:
+ // Account, Value on <Opening>, Buys, Sells, Income, Value on <Closing>, Return%
+
+ MyMoneyReport report = m_config;
+ QDate startingDate;
+ QDate endingDate;
+ MyMoneyMoney price;
+ report.validDateRange( startingDate, endingDate );
+ startingDate = startingDate.addDays(-1);
+
+ //calculate starting balance
+ if ( m_config.isConvertCurrency() ) {
+ price = account.deepCurrencyPrice(startingDate) * account.baseCurrencyPrice(startingDate);
+ } else {
+ price = account.deepCurrencyPrice(startingDate);
+ }
+
+ //work around if there is no price for the starting balance
+ if(!(file->balance(account.id(),startingDate)).isZero()
+ && account.deepCurrencyPrice(startingDate) == MyMoneyMoney(1, 1))
+ {
+ MyMoneyTransactionFilter filter;
+ //get the transactions for the time before the report
+ filter.setDateFilter(QDate(), startingDate);
+ filter.addAccount(account.id());
+ filter.setReportAllSplits(true);
+
+ QValueList<MyMoneyTransaction> startTransactions = file->transactionList(filter);
+ if(startTransactions.size() > 0)
+ {
+ //get the last transaction
+ MyMoneyTransaction startTrans = startTransactions.back();
+ MyMoneySplit s = startTrans.splitByAccount(account.id());
+ //get the price from the split of that account
+ price = s.price();
+ if ( m_config.isConvertCurrency() )
+ price = price * account.baseCurrencyPrice(startingDate);
+ }
+ }if ( m_config.isConvertCurrency() ) {
+ price = account.deepCurrencyPrice(startingDate) * account.baseCurrencyPrice(startingDate);
+ } else {
+ price = account.deepCurrencyPrice(startingDate);
+ }
+
+
+ MyMoneyMoney startingBal = file->balance(account.id(),startingDate) * price;
+
+ //convert to lowest fraction
+ startingBal = startingBal.convert(fraction);
+
+ //calculate ending balance
+ if ( m_config.isConvertCurrency() ) {
+ price = account.deepCurrencyPrice(endingDate) * account.baseCurrencyPrice(endingDate);
+ } else {
+ price = account.deepCurrencyPrice(endingDate);
+ }
+ MyMoneyMoney endingBal = file->balance((account).id(),endingDate) * price;
+
+ //convert to lowest fraction
+ endingBal = endingBal.convert(fraction);
+
+ //add start balance to calculate return on investment
+ MyMoneyMoney returnInvestment = startingBal;
+ MyMoneyMoney paidDividend;
+ CashFlowList buys;
+ CashFlowList sells;
+ CashFlowList reinvestincome;
+ CashFlowList cashincome;
+
+ report.setReportAllSplits(false);
+ report.setConsiderCategory(true);
+ report.clearAccountFilter();
+ report.addAccount(account.id());
+ QValueList<MyMoneyTransaction> transactions = file->transactionList( report );
+ QValueList<MyMoneyTransaction>::const_iterator it_transaction = transactions.begin();
+ while ( it_transaction != transactions.end() )
+ {
+ // s is the split for the stock account
+ MyMoneySplit s = (*it_transaction).splitByAccount(account.id());
+
+ //get price for the day of the transaction if we have to calculate base currency
+ //we are using the value of the split which is in deep currency
+ if ( m_config.isConvertCurrency() ) {
+ price = account.baseCurrencyPrice((*it_transaction).postDate()); //we only need base currency because the value is in deep currency
+ } else {
+ price = MyMoneyMoney(1,1);
+ }
+
+ MyMoneyMoney value = s.value() * price;
+
+ const QString& action = s.action();
+ if ( action == MyMoneySplit::ActionBuyShares )
+ {
+ if ( s.value().isPositive() ) {
+ buys += CashFlowListItem( (*it_transaction).postDate(), -value );
+ } else {
+ sells += CashFlowListItem( (*it_transaction).postDate(), -value );
+ }
+ returnInvestment += value;
+ //convert to lowest fraction
+ returnInvestment = returnInvestment.convert(fraction);
+ } else if ( action == MyMoneySplit::ActionReinvestDividend ) {
+ reinvestincome += CashFlowListItem( (*it_transaction).postDate(), value );
+ } else if ( action == MyMoneySplit::ActionDividend || action == MyMoneySplit::ActionYield ) {
+ // find the split with the category, which has the actual amount of the dividend
+ QValueList<MyMoneySplit> splits = (*it_transaction).splits();
+ QValueList<MyMoneySplit>::const_iterator it_split = splits.begin();
+ bool found = false;
+ while( it_split != splits.end() ) {
+ ReportAccount acc = (*it_split).accountId();
+ if ( acc.isIncomeExpense() ) {
+ found = true;
+ break;
+ }
+ ++it_split;
+ }
+
+ if ( found ) {
+ cashincome += CashFlowListItem( (*it_transaction).postDate(), -(*it_split).value() * price);
+ paidDividend += ((-(*it_split).value()) * price).convert(fraction);
+ }
+ } else {
+ //if the split does not match any action above, add it as buy or sell depending on sign
+
+ //if value is zero, get the price for that date
+ if( s.value().isZero() ) {
+ if ( m_config.isConvertCurrency() ) {
+ price = account.deepCurrencyPrice((*it_transaction).postDate()) * account.baseCurrencyPrice((*it_transaction).postDate());
+ } else {
+ price = account.deepCurrencyPrice((*it_transaction).postDate());
+ }
+ value = s.shares() * price;
+ if ( s.shares().isPositive() ) {
+ buys += CashFlowListItem( (*it_transaction).postDate(), -value );
+ } else {
+ sells += CashFlowListItem( (*it_transaction).postDate(), -value );
+ }
+ returnInvestment += value;
+ } else {
+ value = s.value() * price;
+ if ( s.value().isPositive() ) {
+ buys += CashFlowListItem( (*it_transaction).postDate(), -value );
+ } else {
+ sells += CashFlowListItem( (*it_transaction).postDate(), -value );
+ }
+ returnInvestment += value;
+ }
+ }
+ ++it_transaction;
+ }
+
+ // Note that reinvested dividends are not included , because these do not
+ // represent a cash flow event.
+ CashFlowList all;
+ all += buys;
+ all += sells;
+ all += cashincome;
+ all += CashFlowListItem(startingDate, -startingBal);
+ all += CashFlowListItem(endingDate, endingBal);
+
+ //check if no activity on that term
+ if(!returnInvestment.isZero() && !endingBal.isZero()) {
+ returnInvestment = ((endingBal + paidDividend) - returnInvestment)/returnInvestment;
+ returnInvestment = returnInvestment.convert(10000);
+ } else {
+ returnInvestment = MyMoneyMoney(0,1);
+ }
+
+ try
+ {
+ MyMoneyMoney annualReturn = MyMoneyMoney(all.IRR(),10000);
+ result["return"] = annualReturn.toString();
+ result["returninvestment"] = returnInvestment.toString();
+ }
+ catch (QString e)
+ {
+ kdDebug(2) << e << endl;
+ }
+
+ result["buys"] = (-(buys.total())).toString();
+ result["sells"] = (-(sells.total())).toString();
+ result["cashincome"] = (cashincome.total()).toString();
+ result["reinvestincome"] = (reinvestincome.total()).toString();
+ result["startingbal"] = (startingBal).toString();
+ result["endingbal"] = (endingBal).toString();
+}
+
+void QueryTable::constructAccountTable(void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ //make sure we have all subaccounts of investment accounts
+ includeInvestmentSubAccounts();
+
+ QValueList<MyMoneyAccount> accounts;
+ file->accountList(accounts);
+ QValueList<MyMoneyAccount>::const_iterator it_account = accounts.begin();
+ while ( it_account != accounts.end() )
+ {
+ ReportAccount account = *it_account;
+
+ //get fraction for account
+ int fraction = account.currency().smallestAccountFraction();
+
+ //use base currency fraction if not initialized
+ if(fraction == -1)
+ fraction = MyMoneyFile::instance()->baseCurrency().smallestAccountFraction();
+
+ // Note, "Investment" accounts are never included in account rows because
+ // they don't contain anything by themselves. In reports, they are only
+ // useful as a "topaccount" aggregator of stock accounts
+ if ( account.isAssetLiability() && m_config.includes(account) && account.accountType() != MyMoneyAccount::Investment )
+ {
+ TableRow qaccountrow;
+
+ // help for sort and render functions
+ qaccountrow["rank"] = "0";
+
+ //
+ // Handle currency conversion
+ //
+
+ MyMoneyMoney displayprice(1.0);
+ if ( m_config.isConvertCurrency() )
+ {
+ // display currency is base currency, so set the price
+ if ( account.isForeignCurrency() )
+ displayprice = account.baseCurrencyPrice(m_config.toDate()).reduce();
+ }
+ else
+ {
+ // display currency is the account's deep currency. display this fact in the report
+ qaccountrow["currency"] = account.currency().id();
+ }
+
+ qaccountrow["account"] = account.name();
+ qaccountrow["accountid"] = account.id();
+ qaccountrow["topaccount"] = account.topParentName();
+
+ MyMoneyMoney shares = file->balance(account.id(),m_config.toDate());
+ qaccountrow["shares"] = shares.toString();
+
+ MyMoneyMoney netprice = account.deepCurrencyPrice(m_config.toDate()).reduce() * displayprice;
+ qaccountrow["price"] = ( netprice.reduce() ).convert(MyMoneyMoney::precToDenom(KMyMoneyGlobalSettings::pricePrecision())).toString();
+ qaccountrow["value"] = ( netprice.reduce() * shares.reduce() ).convert(fraction).toString();
+
+ QString iid = (*it_account).institutionId();
+
+ // If an account does not have an institution, get it from the top-parent.
+ if ( iid.isEmpty() && ! account.isTopLevel() )
+ {
+ ReportAccount topaccount = account.topParent();
+ iid = topaccount.institutionId();
+ }
+
+ if ( iid.isEmpty() )
+ qaccountrow["institution"] = i18n("None");
+ else
+ qaccountrow["institution"] = file->institution(iid).name();
+
+ qaccountrow["type"] = KMyMoneyUtils::accountTypeToString((*it_account).accountType());
+
+ // TODO: Only do this if the report we're making really needs performance. Otherwise
+ // it's an expensive calculation done for no reason
+ if ( account.isInvest() )
+ {
+ constructPerformanceRow( account, qaccountrow );
+ }
+ else
+ qaccountrow["equitytype"] = QString();
+
+ // don't add the account if it is closed. In fact, the business logic
+ // should prevent that an account can be closed with a balance not equal
+ // to zero, but we never know.
+ if(!(shares.isZero() && account.isClosed()))
+ m_rows += qaccountrow;
+ }
+
+ ++it_account;
+ }
+}
+
+void QueryTable::constructSplitsTable(void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ //make sure we have all subaccounts of investment accounts
+ includeInvestmentSubAccounts();
+
+ MyMoneyReport report(m_config);
+ report.setReportAllSplits(false);
+ report.setConsiderCategory(true);
+
+ // support for opening and closing balances
+ QMap<QString, MyMoneyAccount> accts;
+
+ //get all transactions for this report
+ QValueList<MyMoneyTransaction> transactions = file->transactionList(report);
+ for (QValueList<MyMoneyTransaction>::const_iterator it_transaction = transactions.begin(); it_transaction != transactions.end(); ++it_transaction) {
+
+ TableRow qA, qS;
+ QDate pd;
+
+ qA["id"] = qS["id"] = (* it_transaction).id();
+ qA["entrydate"] = qS["entrydate"] = (* it_transaction).entryDate().toString(Qt::ISODate);
+ qA["postdate"] = qS["postdate"] = (* it_transaction).postDate().toString(Qt::ISODate);
+ qA["commodity"] = qS["commodity"] = (* it_transaction).commodity();
+
+ pd = (* it_transaction).postDate();
+ qA["month"] = qS["month"] = i18n("Month of %1").arg(QDate(pd.year(),pd.month(),1).toString(Qt::ISODate));
+ qA["week"] = qS["week"] = i18n("Week of %1").arg(pd.addDays(1-pd.dayOfWeek()).toString(Qt::ISODate));
+
+ qA["currency"] = qS["currency"] = "";
+
+ if((* it_transaction).commodity() != file->baseCurrency().id()) {
+ if (!report.isConvertCurrency()) {
+ qA["currency"] = qS["currency"] = (*it_transaction).commodity();
+ }
+ }
+
+ // to handle splits, we decide on which account to base the split
+ // (a reference point or point of view so to speak). here we take the
+ // first account that is a stock account or loan account (or the first account
+ // that is not an income or expense account if there is no stock or loan account)
+ // to be the account (qA) that will have the sub-item "split" entries. we add
+ // one transaction entry (qS) for each subsequent entry in the split.
+ const QValueList<MyMoneySplit>& splits = (*it_transaction).splits();
+ QValueList<MyMoneySplit>::const_iterator myBegin, it_split;
+ //S_end = splits.end();
+
+ for (it_split = splits.begin(), myBegin = splits.end(); it_split != splits.end(); ++it_split) {
+ ReportAccount splitAcc = (* it_split).accountId();
+ // always put split with a "stock" account if it exists
+ if (splitAcc.isInvest())
+ break;
+
+ // prefer to put splits with a "loan" account if it exists
+ if(splitAcc.isLoan())
+ myBegin = it_split;
+
+ if((myBegin == splits.end()) && ! splitAcc.isIncomeExpense()) {
+ myBegin = it_split;
+ }
+ }
+
+ // select our "reference" split
+ if (it_split == splits.end()) {
+ it_split = myBegin;
+ } else {
+ myBegin = it_split;
+ }
+
+ // if the split is still unknown, use the first one. I have seen this
+ // happen with a transaction that has only a single split referencing an income or expense
+ // account and has an amount and value of 0. Such a transaction will fall through
+ // the above logic and leave 'it_split' pointing to splits.end() which causes the remainder
+ // of this to end in an infinite loop.
+ if(it_split == splits.end()) {
+ it_split = splits.begin();
+ }
+
+ // for "loan" reports, the loan transaction gets special treatment.
+ // the splits of a loan transaction are placed on one line in the
+ // reference (loan) account (qA). however, we process the matching
+ // split entries (qS) normally.
+ bool loan_special_case = false;
+ if(m_config.queryColumns() & MyMoneyReport::eQCloan) {
+ ReportAccount splitAcc = (*it_split).accountId();
+ loan_special_case = splitAcc.isLoan();
+ }
+
+ //the account of the beginning splits
+ ReportAccount myBeginAcc = (*myBegin).accountId();
+
+ bool include_me = true;
+ bool transaction_text = false; //indicates whether a text should be considered as a match for the transaction or for a split only
+ QString a_fullname = "";
+ QString a_memo = "";
+ unsigned int pass = 1;
+
+ do {
+ MyMoneyMoney xr;
+ ReportAccount splitAcc = (* it_split).accountId();
+
+ //get fraction for account
+ int fraction = splitAcc.currency().smallestAccountFraction();
+
+ //use base currency fraction if not initialized
+ if(fraction == -1)
+ fraction = file->baseCurrency().smallestAccountFraction();
+
+ QString institution = splitAcc.institutionId();
+ QString payee = (*it_split).payeeId();
+
+ if ( m_config.isConvertCurrency() ) {
+ xr = (splitAcc.deepCurrencyPrice((*it_transaction).postDate()) * splitAcc.baseCurrencyPrice((*it_transaction).postDate())).reduce();
+ } else {
+ xr = splitAcc.deepCurrencyPrice((*it_transaction).postDate()).reduce();
+ }
+
+ //there is a bug where the price sometimes returns 1
+ //get the price from the split in that case
+ /*if(m_config.isConvertCurrency() && xr == MyMoneyMoney(1,1)) {
+ xr = (*it_split).price();
+ }*/
+
+ if (splitAcc.isInvest()) {
+
+ // use the institution of the parent for stock accounts
+ institution = splitAcc.parent().institutionId();
+ MyMoneyMoney shares = (*it_split).shares();
+
+ qA["action"] = (*it_split).action();
+ qA["shares"] = shares.isZero() ? "" : (*it_split).shares().toString();
+ qA["price"] = shares.isZero() ? "" : xr.convert(MyMoneyMoney::precToDenom(KMyMoneyGlobalSettings::pricePrecision())).toString();
+
+ if (((*it_split).action() == MyMoneySplit::ActionBuyShares) && (*it_split).shares().isNegative())
+ qA["action"] = "Sell";
+
+ qA["investaccount"] = splitAcc.parent().name();
+ }
+
+ include_me = m_config.includes(splitAcc);
+ a_fullname = splitAcc.fullName();
+ a_memo = (*it_split).memo();
+
+ transaction_text = m_config.match(&(*it_split));
+
+ qA["price"] = xr.convert(MyMoneyMoney::precToDenom(KMyMoneyGlobalSettings::pricePrecision())).toString();
+ qA["account"] = splitAcc.name();
+ qA["accountid"] = splitAcc.id();
+ qA["topaccount"] = splitAcc.topParentName();
+
+ qA["institution"] = institution.isEmpty()
+ ? i18n("No Institution")
+ : file->institution(institution).name();
+
+ qA["payee"] = payee.isEmpty()
+ ? i18n("[Empty Payee]")
+ : file->payee(payee).name().simplifyWhiteSpace();
+
+ qA["reconciledate"] = (*it_split).reconcileDate().toString(Qt::ISODate);
+ qA["reconcileflag"] = KMyMoneyUtils::reconcileStateToString((*it_split).reconcileFlag(), true );
+ qA["number"] = (*it_split).number();
+
+ qA["memo"] = a_memo;
+
+ qS["reconciledate"] = qA["reconciledate"];
+ qS["reconcileflag"] = qA["reconcileflag"];
+ qS["number"] = qA["number"];
+
+ qS["topcategory"] = splitAcc.topParentName();
+
+ // only include the configured accounts
+ if (include_me) {
+ // add the "summarized" split transaction
+ // this is the sub-total of the split detail
+ // convert to lowest fraction
+ qA["value"] = ((*it_split).shares() * xr).convert(fraction).toString();
+ qA["rank"] = "0";
+
+ //fill in account information
+ if (! splitAcc.isIncomeExpense() && it_split != myBegin) {
+ qA["account"] = ((*it_split).shares().isNegative()) ?
+ i18n("Transfer to %1").arg(myBeginAcc.fullName())
+ : i18n("Transfer from %1").arg(myBeginAcc.fullName());
+ } else if (it_split == myBegin ) {
+ //handle the main split
+ if((splits.count() > 2)) {
+ //if it is the main split and has multiple splits, note that
+ qA["account"] = i18n("[Split Transaction]");
+ } else {
+ //fill the account name of the second split
+ QValueList<MyMoneySplit>::const_iterator tempSplit = splits.begin();
+
+ //there are supposed to be only 2 splits if we ever get here
+ if(tempSplit == myBegin && splits.count() > 1)
+ ++tempSplit;
+
+ //show the name of the category, or "transfer to/from" if it as an account
+ ReportAccount tempSplitAcc = (*tempSplit).accountId();
+ if (! tempSplitAcc.isIncomeExpense()) {
+ qA["account"] = ((*it_split).shares().isNegative()) ?
+ i18n("Transfer to %1").arg(tempSplitAcc.fullName())
+ : i18n("Transfer from %1").arg(tempSplitAcc.fullName());
+ } else {
+ qA["account"] = tempSplitAcc.fullName();
+ }
+ }
+ } else {
+ //in any other case, fill in the account name of the main split
+ qA["account"] = myBeginAcc.fullName();
+ }
+
+ //category data is always the one of the split
+ qA ["category"] = splitAcc.fullName();
+ qA ["topcategory"] = splitAcc.topParentName();
+ qA ["categorytype"] = KMyMoneyUtils::accountTypeToString(splitAcc.accountGroup());
+
+ m_rows += qA;
+
+ // track accts that will need opening and closing balances
+ accts.insert (splitAcc.id(), splitAcc);
+ }
+ ++it_split;
+
+ // look for wrap-around
+ if (it_split == splits.end())
+ it_split = splits.begin();
+
+ //check if there have been more passes than there are splits
+ //this is to prevent infinite loops in cases of data inconsistency -- asoliverez
+ ++pass;
+ if( pass > splits.count() )
+ break;
+
+ } while (it_split != myBegin);
+
+ if (loan_special_case) {
+ m_rows += qA;
+ }
+ }
+
+ // now run through our accts list and add opening and closing balances
+
+ switch (m_config.rowType()) {
+ case MyMoneyReport::eAccount:
+ case MyMoneyReport::eTopAccount:
+ break;
+
+ // case MyMoneyReport::eCategory:
+ // case MyMoneyReport::eTopCategory:
+ // case MyMoneyReport::ePayee:
+ // case MyMoneyReport::eMonth:
+ // case MyMoneyReport::eWeek:
+ default:
+ return;
+ }
+
+ QDate startDate, endDate;
+
+ report.validDateRange(startDate, endDate);
+ QString strStartDate = startDate.toString(Qt::ISODate);
+ QString strEndDate = endDate.toString(Qt::ISODate);
+ startDate = startDate.addDays(-1);
+
+ QMap<QString, MyMoneyAccount>::const_iterator it_account, accts_end;
+ for (it_account = accts.begin(); it_account != accts.end(); ++it_account) {
+ TableRow qA;
+
+ ReportAccount account = (* it_account);
+
+ //get fraction for account
+ int fraction = account.currency().smallestAccountFraction();
+
+ //use base currency fraction if not initialized
+ if(fraction == -1)
+ fraction = file->baseCurrency().smallestAccountFraction();
+
+ QString institution = account.institutionId();
+
+ // use the institution of the parent for stock accounts
+ if (account.isInvest())
+ institution = account.parent().institutionId();
+
+ MyMoneyMoney startBalance, endBalance, startPrice, endPrice;
+ MyMoneyMoney startShares, endShares;
+
+ //get price and convert currency if necessary
+ if ( m_config.isConvertCurrency() ) {
+ startPrice = (account.deepCurrencyPrice(startDate) * account.baseCurrencyPrice(startDate)).reduce();
+ endPrice = (account.deepCurrencyPrice(endDate) * account.baseCurrencyPrice(endDate)).reduce();
+ } else {
+ startPrice = account.deepCurrencyPrice(startDate).reduce();
+ endPrice = account.deepCurrencyPrice(endDate).reduce();
+ }
+ startShares = file->balance(account.id(),startDate);
+ endShares = file->balance(account.id(),endDate);
+
+ //get starting and ending balances
+ startBalance = startShares * startPrice;
+ endBalance = endShares * endPrice;
+
+ //starting balance
+ // don't show currency if we're converting or if it's not foreign
+ qA["currency"] = (m_config.isConvertCurrency() || ! account.isForeignCurrency()) ? "" : account.currency().id();
+
+ qA["accountid"] = account.id();
+ qA["account"] = account.name();
+ qA["topaccount"] = account.topParentName();
+ qA["institution"] = institution.isEmpty() ? i18n("No Institution") : file->institution(institution).name();
+ qA["rank"] = "-2";
+
+ qA["price"] = startPrice.convert(MyMoneyMoney::precToDenom(KMyMoneyGlobalSettings::pricePrecision())).toString();
+ if (account.isInvest()) {
+ qA["shares"] = startShares.toString();
+ }
+
+ qA["postdate"] = strStartDate;
+ qA["balance"] = startBalance.convert(fraction).toString();
+ qA["value"] = QString();
+ qA["id"] = "A";
+ m_rows += qA;
+
+ //ending balance
+ qA["price"] = endPrice.convert(MyMoneyMoney::precToDenom(KMyMoneyGlobalSettings::pricePrecision())).toString();
+
+ if (account.isInvest()) {
+ qA["shares"] = endShares.toString();
+ }
+
+ qA["postdate"] = strEndDate;
+ qA["balance"] = endBalance.toString();
+ qA["id"] = "Z";
+ m_rows += qA;
+ }
+}
+
+}
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/reports/querytable.h b/kmymoney2/reports/querytable.h
new file mode 100644
index 0000000..7beb3d4
--- /dev/null
+++ b/kmymoney2/reports/querytable.h
@@ -0,0 +1,142 @@
+/***************************************************************************
+ querytable.h
+ -------------------
+ begin : Fri Jul 23 2004
+ copyright : (C) 2004-2005 by Ace Jones
+ (C) 2007 Sascha Pfau
+ email : acejones@users.sourceforge.net
+ MrPeacock@gmail.com
+ ***************************************************************************/
+
+/****************************************************************************
+ Contains code from the func_xirr and related methods of financial.cpp
+ - KOffice 1.6 by Sascha Pfau. Sascha agreed to relicense those methods under
+ GPLv2 or later.
+*****************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef QUERYTABLE_H
+#define QUERYTABLE_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstringlist.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../mymoney/mymoneyreport.h"
+#include "listtable.h"
+
+namespace reports {
+
+class ReportAccount;
+
+/**
+ * Calculates a query of information about the transaction database.
+ *
+ * This is a middle-layer class, between the UI and the engine. The
+ * MyMoneyReport class holds only the CONFIGURATION parameters. This
+ * class actually does the work of retrieving the data from the engine
+ * and formatting it for the user.
+ *
+ * @author Ace Jones
+ *
+ * @short
+**/
+
+class QueryTable : public ListTable
+{
+ public:
+ QueryTable(const MyMoneyReport&);
+ void init(void);
+
+ protected:
+ void constructAccountTable(void);
+ void constructTransactionTable(void);
+ void constructPerformanceRow( const ReportAccount& account, TableRow& result ) const;
+ void constructSplitsTable(void);
+
+};
+
+//
+// Cash Flow analysis tools for investment reports
+//
+
+class CashFlowListItem
+{
+public:
+ CashFlowListItem(void) {}
+ CashFlowListItem( const QDate& _date, const MyMoneyMoney& _value ): m_date(_date), m_value(_value) {}
+ bool operator<( const CashFlowListItem _second ) const { return m_date < _second.m_date; }
+ bool operator<=( const CashFlowListItem _second ) const { return m_date <= _second.m_date; }
+ bool operator>( const CashFlowListItem _second ) const { return m_date > _second.m_date; }
+ const QDate& date( void ) const { return m_date; }
+ const MyMoneyMoney& value( void ) const { return m_value; }
+ MyMoneyMoney NPV( double _rate ) const;
+
+ static void setToday( const QDate& _today ) { m_sToday = _today; }
+ const QDate& today( void ) const { return m_sToday; }
+
+private:
+ QDate m_date;
+ MyMoneyMoney m_value;
+
+ static QDate m_sToday;
+};
+
+class CashFlowList: public QValueList<CashFlowListItem>
+{
+ public:
+ CashFlowList(void) {}
+ MyMoneyMoney NPV(double rate) const;
+ double IRR(void) const;
+ MyMoneyMoney total(void) const;
+ void dumpDebug(void) const;
+
+ /**
+ * Function: XIRR
+ *
+ * Compute the internal rate of return for a non-periodic series of cash flows.
+ *
+ * XIRR ( Values; Dates; [ Guess = 0.1 ] )
+ **/
+ double calculateXIRR ( void ) const;
+
+ protected:
+ CashFlowListItem mostRecent(void) const;
+
+ private:
+ /**
+ * helper: xirrResult
+ *
+ * args[0] = values
+ * args[1] = dates
+ **/
+ double xirrResult ( double& rate ) const;
+
+ /**
+ *
+ * helper: xirrResultDerive
+ *
+ * args[0] = values
+ * args[1] = dates
+ **/
+ double xirrResultDerive ( double& rate ) const;
+};
+
+}
+
+#endif // QUERYREPORT_H
diff --git a/kmymoney2/reports/querytabletest.cpp b/kmymoney2/reports/querytabletest.cpp
new file mode 100644
index 0000000..8b3c579
--- /dev/null
+++ b/kmymoney2/reports/querytabletest.cpp
@@ -0,0 +1,694 @@
+/***************************************************************************
+ querytabletest.cpp
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ Ace Jones <ace.j@hotpop.com>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include <qvaluelist.h>
+#include <qvaluevector.h>
+#include <qfile.h>
+
+#include <kdebug.h>
+#include <kdeversion.h>
+#include <kglobal.h>
+#include <kglobalsettings.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+
+#include "querytabletest.h"
+#include "reportstestcommon.h"
+
+#define private public
+#include "querytable.h"
+#undef private
+
+#include "../mymoney/mymoneyaccount.h"
+#include "../mymoney/mymoneysecurity.h"
+#include "../mymoney/mymoneyprice.h"
+#include "../mymoney/storage/mymoneystoragedump.h"
+#include "../mymoney/mymoneyreport.h"
+#include "../mymoney/mymoneystatement.h"
+#include "../mymoney/storage/mymoneystoragexml.h"
+
+using namespace reports;
+using namespace test;
+
+QueryTableTest::QueryTableTest()
+{
+}
+
+void QueryTableTest::setUp () {
+
+ storage = new MyMoneySeqAccessMgr;
+ file = MyMoneyFile::instance();
+ file->attachStorage(storage);
+ MyMoneyFileTransaction ft;
+ file->addCurrency(MyMoneySecurity("CAD", "Canadian Dollar", "C$"));
+ file->addCurrency(MyMoneySecurity("USD", "US Dollar", "$"));
+ file->addCurrency(MyMoneySecurity("JPY", "Japanese Yen", QChar(0x00A5), 100, 1));
+ file->addCurrency(MyMoneySecurity("GBP", "British Pound", "#"));
+ file->setBaseCurrency(file->currency("USD"));
+
+ MyMoneyPayee payeeTest("Test Payee");
+ file->addPayee(payeeTest);
+ MyMoneyPayee payeeTest2("Thomas Baumgart");
+ file->addPayee(payeeTest2);
+
+ acAsset = (MyMoneyFile::instance()->asset().id());
+ acLiability = (MyMoneyFile::instance()->liability().id());
+ acExpense = (MyMoneyFile::instance()->expense().id());
+ acIncome = (MyMoneyFile::instance()->income().id());
+ acChecking = makeAccount(QString("Checking Account"),MyMoneyAccount::Checkings,moCheckingOpen,QDate(2004,5,15),acAsset);
+ acCredit = makeAccount(QString("Credit Card"),MyMoneyAccount::CreditCard,moCreditOpen,QDate(2004,7,15),acLiability);
+ acSolo = makeAccount(QString("Solo"),MyMoneyAccount::Expense,0,QDate(2004,1,11),acExpense);
+ acParent = makeAccount(QString("Parent"),MyMoneyAccount::Expense,0,QDate(2004,1,11),acExpense);
+ acChild = makeAccount(QString("Child"),MyMoneyAccount::Expense,0,QDate(2004,2,11),acParent);
+ acForeign = makeAccount(QString("Foreign"),MyMoneyAccount::Expense,0,QDate(2004,1,11),acExpense);
+ acTax = makeAccount(QString("Tax"), MyMoneyAccount::Expense,0,QDate(2005,1,11),acExpense, "", true);
+
+ MyMoneyInstitution i("Bank of the World","","","","","","");
+ file->addInstitution(i);
+ inBank = i.id();
+ ft.commit();
+}
+
+void QueryTableTest::tearDown ()
+{
+ file->detachStorage(storage);
+ delete storage;
+}
+
+void QueryTableTest::testQueryBasics()
+{
+ try
+ {
+ TransactionHelper t1q1( QDate(2004,1,1), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2q1( QDate(2004,2,1), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3q1( QDate(2004,3,1), MyMoneySplit::ActionWithdrawal, moParent2, acCredit, acParent );
+ TransactionHelper t4y1( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moChild, acCredit, acChild );
+
+ TransactionHelper t1q2( QDate(2004,4,1), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2q2( QDate(2004,5,1), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3q2( QDate(2004,6,1), MyMoneySplit::ActionWithdrawal, moParent2, acCredit, acParent );
+ TransactionHelper t4q2( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moChild, acCredit, acChild );
+
+ TransactionHelper t1y2( QDate(2005,1,1), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2y2( QDate(2005,5,1), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3y2( QDate(2005,9,1), MyMoneySplit::ActionWithdrawal, moParent2, acCredit, acParent );
+ TransactionHelper t4y2( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moChild, acCredit, acChild );
+
+ unsigned cols;
+
+ MyMoneyReport filter;
+ filter.setRowType( MyMoneyReport::eCategory );
+ cols = MyMoneyReport::eQCnumber | MyMoneyReport::eQCpayee | MyMoneyReport::eQCaccount;
+ filter.setQueryColumns( static_cast<MyMoneyReport::EQueryColumns>(cols) ); //
+ filter.setName("Transactions by Category");
+ XMLandback(filter);
+ QueryTable qtbl_1(filter);
+
+ writeTabletoHTML(qtbl_1,"Transactions by Category.html");
+
+ QValueList<ListTable::TableRow> rows = qtbl_1.rows();
+
+ CPPUNIT_ASSERT(rows.count() == 12);
+ CPPUNIT_ASSERT(rows[0]["categorytype"]=="Expense");
+ CPPUNIT_ASSERT(rows[0]["category"]=="Parent");
+ CPPUNIT_ASSERT(rows[0]["postdate"]=="2004-02-01");
+ CPPUNIT_ASSERT(rows[11]["categorytype"]=="Expense");
+ CPPUNIT_ASSERT(rows[11]["category"]=="Solo");
+ CPPUNIT_ASSERT(rows[11]["postdate"]=="2005-01-01");
+
+ QString html = qtbl_1.renderHTML();
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Total")+" Parent") == -(moParent1 + moParent2) * 3 );
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Total")+" Parent: Child") == -(moChild) * 3 );
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Total")+" Solo") == -(moSolo) * 3 );
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Total")+" Expense") == -(moParent1 + moParent2 + moSolo + moChild) * 3 );
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Grand Total")) == -(moParent1 + moParent2 + moSolo + moChild) * 3 + moCheckingOpen + moCreditOpen );
+ filter.setRowType( MyMoneyReport::eTopCategory );
+ cols = MyMoneyReport::eQCnumber | MyMoneyReport::eQCpayee | MyMoneyReport::eQCaccount;
+ filter.setQueryColumns( static_cast<MyMoneyReport::EQueryColumns>(cols) ); //
+ filter.setName("Transactions by Top Category");
+ XMLandback(filter);
+ QueryTable qtbl_2(filter);
+
+ writeTabletoHTML(qtbl_2,"Transactions by Top Category.html");
+
+ rows = qtbl_2.rows();
+
+ CPPUNIT_ASSERT(rows.count() == 12);
+ CPPUNIT_ASSERT(rows[0]["categorytype"]=="Expense");
+ CPPUNIT_ASSERT(rows[0]["topcategory"]=="Parent");
+ CPPUNIT_ASSERT(rows[0]["postdate"]=="2004-02-01");
+ CPPUNIT_ASSERT(rows[8]["categorytype"]=="Expense");
+ CPPUNIT_ASSERT(rows[8]["topcategory"]=="Parent");
+ CPPUNIT_ASSERT(rows[8]["postdate"]=="2005-09-01");
+ CPPUNIT_ASSERT(rows[11]["categorytype"]=="Expense");
+ CPPUNIT_ASSERT(rows[11]["topcategory"]=="Solo");
+ CPPUNIT_ASSERT(rows[11]["postdate"]=="2005-01-01");
+
+ html = qtbl_2.renderHTML();
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Total")+" Parent") == -(moParent1 + moParent2 + moChild) * 3 );
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Total")+" Solo") == -(moSolo) * 3 );
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Total")+" Expense") == -(moParent1 + moParent2 + moSolo + moChild) * 3 );
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Grand Total")) == -(moParent1 + moParent2 + moSolo + moChild) * 3 + moCheckingOpen + moCreditOpen);
+
+ filter.setRowType( MyMoneyReport::eAccount );
+ filter.setName("Transactions by Account");
+ cols = MyMoneyReport::eQCnumber | MyMoneyReport::eQCpayee | MyMoneyReport::eQCcategory;
+ filter.setQueryColumns( static_cast<MyMoneyReport::EQueryColumns>(cols) ); //
+ XMLandback(filter);
+ QueryTable qtbl_3(filter);
+
+ writeTabletoHTML(qtbl_3,"Transactions by Account.html");
+
+ rows = qtbl_3.rows();
+
+#if 1
+ CPPUNIT_ASSERT(rows.count() == 16);
+ CPPUNIT_ASSERT(rows[1]["account"]=="Checking Account");
+ CPPUNIT_ASSERT(rows[1]["category"]=="Solo");
+ CPPUNIT_ASSERT(rows[1]["postdate"]=="2004-01-01");
+ CPPUNIT_ASSERT(rows[14]["account"]=="Credit Card");
+ CPPUNIT_ASSERT(rows[14]["category"]=="Parent");
+ CPPUNIT_ASSERT(rows[14]["postdate"]=="2005-09-01");
+#else
+ CPPUNIT_ASSERT(rows.count() == 12);
+ CPPUNIT_ASSERT(rows[0]["account"]=="Checking Account");
+ CPPUNIT_ASSERT(rows[0]["category"]=="Solo");
+ CPPUNIT_ASSERT(rows[0]["postdate"]=="2004-01-01");
+ CPPUNIT_ASSERT(rows[11]["account"]=="Credit Card");
+ CPPUNIT_ASSERT(rows[11]["category"]=="Parent");
+ CPPUNIT_ASSERT(rows[11]["postdate"]=="2005-09-01");
+#endif
+
+ html = qtbl_3.renderHTML();
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Total")+" Checking Account") == -(moSolo) * 3 + moCheckingOpen);
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Total")+" Credit Card") == -(moParent1 + moParent2 + moChild) * 3 + moCreditOpen );
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Grand Total")) == -(moParent1 + moParent2 + moSolo + moChild) * 3 + moCheckingOpen + moCreditOpen);
+
+ filter.setRowType( MyMoneyReport::ePayee );
+ filter.setName("Transactions by Payee");
+ cols = MyMoneyReport::eQCnumber | MyMoneyReport::eQCmemo | MyMoneyReport::eQCcategory;
+ filter.setQueryColumns( static_cast<MyMoneyReport::EQueryColumns>(cols) ); //
+ XMLandback(filter);
+ QueryTable qtbl_4(filter);
+
+ writeTabletoHTML(qtbl_4,"Transactions by Payee.html");
+
+ rows = qtbl_4.rows();
+
+ CPPUNIT_ASSERT(rows.count() == 12);
+ CPPUNIT_ASSERT(rows[0]["payee"]=="Test Payee");
+ CPPUNIT_ASSERT(rows[0]["category"]=="Solo");
+ CPPUNIT_ASSERT(rows[0]["postdate"]=="2004-01-01");
+ CPPUNIT_ASSERT(rows[8]["payee"]=="Test Payee");
+ CPPUNIT_ASSERT(rows[8]["category"]=="Parent: Child");
+ CPPUNIT_ASSERT(rows[8]["postdate"]=="2004-11-07");
+ CPPUNIT_ASSERT(rows[11]["payee"]=="Test Payee");
+ CPPUNIT_ASSERT(rows[11]["category"]=="Parent");
+ CPPUNIT_ASSERT(rows[11]["postdate"]=="2005-09-01");
+
+ html = qtbl_4.renderHTML();
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Total")+" Test Payee") == -(moParent1 + moParent2 + moSolo + moChild) * 3 );
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Grand Total")) == -(moParent1 + moParent2 + moSolo + moChild) * 3 + moCheckingOpen + moCreditOpen);
+
+ filter.setRowType( MyMoneyReport::eMonth );
+ filter.setName("Transactions by Month");
+ cols = MyMoneyReport::eQCnumber | MyMoneyReport::eQCpayee | MyMoneyReport::eQCcategory;
+ filter.setQueryColumns( static_cast<MyMoneyReport::EQueryColumns>(cols) ); //
+ XMLandback(filter);
+ QueryTable qtbl_5(filter);
+
+ writeTabletoHTML(qtbl_5,"Transactions by Month.html");
+
+ rows = qtbl_5.rows();
+
+ CPPUNIT_ASSERT(rows.count() == 12);
+ CPPUNIT_ASSERT(rows[0]["payee"]=="Test Payee");
+ CPPUNIT_ASSERT(rows[0]["category"]=="Solo");
+ CPPUNIT_ASSERT(rows[0]["postdate"]=="2004-01-01");
+ CPPUNIT_ASSERT(rows[8]["payee"]=="Test Payee");
+ CPPUNIT_ASSERT(rows[8]["category"]=="Parent: Child");
+ CPPUNIT_ASSERT(rows[8]["postdate"]=="2004-11-07");
+ CPPUNIT_ASSERT(rows[11]["payee"]=="Test Payee");
+ CPPUNIT_ASSERT(rows[11]["category"]=="Parent");
+ CPPUNIT_ASSERT(rows[11]["postdate"]=="2005-09-01");
+
+ html = qtbl_5.renderHTML();
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Total")+" Month of 2004-01-01") == -moSolo );
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Total")+" Month of 2004-11-01") == -(moChild) * 3 );
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Total")+" Month of 2004-05-01") == -moParent1 + moCheckingOpen );
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Grand Total")) == -(moParent1 + moParent2 + moSolo + moChild) * 3 + moCheckingOpen + moCreditOpen);
+
+ filter.setRowType( MyMoneyReport::eWeek );
+ filter.setName("Transactions by Week");
+ cols = MyMoneyReport::eQCnumber | MyMoneyReport::eQCpayee | MyMoneyReport::eQCcategory;
+ filter.setQueryColumns( static_cast<MyMoneyReport::EQueryColumns>(cols) ); //
+ XMLandback(filter);
+ QueryTable qtbl_6(filter);
+
+ writeTabletoHTML(qtbl_6,"Transactions by Week.html");
+
+ rows = qtbl_6.rows();
+
+ CPPUNIT_ASSERT(rows.count() == 12);
+ CPPUNIT_ASSERT(rows[0]["payee"]=="Test Payee");
+ CPPUNIT_ASSERT(rows[0]["category"]=="Solo");
+ CPPUNIT_ASSERT(rows[0]["postdate"]=="2004-01-01");
+ CPPUNIT_ASSERT(rows[11]["payee"]=="Test Payee");
+ CPPUNIT_ASSERT(rows[11]["category"]=="Parent");
+ CPPUNIT_ASSERT(rows[11]["postdate"]=="2005-09-01");
+
+ html = qtbl_6.renderHTML();
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Total")+" Week of 2003-12-29") == -moSolo );
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Total")+" Week of 2004-11-01") == -(moChild) * 3 );
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Total")+" Week of 2005-08-29") == -moParent2 );
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Grand Total")) == -(moParent1 + moParent2 + moSolo + moChild) * 3 + moCheckingOpen + moCreditOpen);
+ }
+ catch(MyMoneyException *e)
+ {
+ CPPUNIT_FAIL(e->what());
+ delete e;
+ }
+
+ // Test querytable::TableRow::operator> and operator==
+
+ QueryTable::TableRow low;
+ low["first"] = "A";
+ low["second"] = "B";
+ low["third"] = "C";
+
+ QueryTable::TableRow high;
+ high["first"] = "A";
+ high["second"] = "C";
+ high["third"] = "B";
+
+ QueryTable::TableRow::setSortCriteria("first,second,third");
+ CPPUNIT_ASSERT( low < high );
+ CPPUNIT_ASSERT( low <= high );
+ CPPUNIT_ASSERT( high > low );
+ CPPUNIT_ASSERT( high <= high );
+ CPPUNIT_ASSERT( high == high );
+}
+
+void QueryTableTest::testCashFlowAnalysis()
+{
+ //
+ // Test IRR calculations
+ //
+
+ CashFlowList list;
+
+ list += CashFlowListItem( QDate(2004,5,3),1000.0 );
+ list += CashFlowListItem( QDate(2004,5,20),59.0 );
+ list += CashFlowListItem( QDate(2004,6,3),14.0 );
+ list += CashFlowListItem( QDate(2004,6,24),92.0 );
+ list += CashFlowListItem( QDate(2004,7,6),63.0 );
+ list += CashFlowListItem( QDate(2004,7,25),15.0 );
+ list += CashFlowListItem( QDate(2004,8,5),92.0 );
+ list += CashFlowListItem( QDate(2004,9,2),18.0 );
+ list += CashFlowListItem( QDate(2004,9,21),5.0 );
+ list += CashFlowListItem( QDate(2004,10,16),-2037.0 );
+
+ MyMoneyMoney IRR(list.IRR(),1000);
+
+ CPPUNIT_ASSERT( IRR == MyMoneyMoney(1676,1000) );
+
+ list.pop_back();
+ list += CashFlowListItem( QDate(2004,10,16),-1358.0 );
+
+ IRR = MyMoneyMoney( list.IRR(), 1000 );
+
+ CPPUNIT_ASSERT( IRR.isZero() );
+}
+
+void QueryTableTest::testAccountQuery()
+{
+ try
+ {
+ QString htmlcontext = QString("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">\n<html><head><link rel=\"stylesheet\" type=\"text/css\" href=\"html/kmymoney2.css\"></head><body>\n%1\n</body></html>\n");
+
+ //
+ // No transactions, opening balances only
+ //
+
+ MyMoneyReport filter;
+ filter.setRowType( MyMoneyReport::eInstitution );
+ filter.setName("Accounts by Institution (No transactions)");
+ XMLandback(filter);
+ QueryTable qtbl_1(filter);
+
+ writeTabletoHTML(qtbl_1,"Accounts by Institution (No transactions).html");
+
+ QValueList<ListTable::TableRow> rows = qtbl_1.rows();
+
+ CPPUNIT_ASSERT(rows.count() == 2);
+ CPPUNIT_ASSERT(rows[0]["account"]=="Checking Account");
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[0]["value"])==moCheckingOpen);
+ CPPUNIT_ASSERT(rows[0]["equitytype"].isEmpty());
+ CPPUNIT_ASSERT(rows[1]["account"]=="Credit Card");
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[1]["value"])==moCreditOpen);
+ CPPUNIT_ASSERT(rows[1]["equitytype"].isEmpty());
+
+ QString html = qtbl_1.renderHTML();
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Total")+" None") == moCheckingOpen+moCreditOpen );
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Grand Total")) == moCheckingOpen+moCreditOpen );
+
+ //
+ // Adding in transactions
+ //
+
+ TransactionHelper t1q1( QDate(2004,1,1), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2q1( QDate(2004,2,1), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3q1( QDate(2004,3,1), MyMoneySplit::ActionWithdrawal, moParent2, acCredit, acParent );
+ TransactionHelper t4y1( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moChild, acCredit, acChild );
+
+ TransactionHelper t1q2( QDate(2004,4,1), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2q2( QDate(2004,5,1), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3q2( QDate(2004,6,1), MyMoneySplit::ActionWithdrawal, moParent2, acCredit, acParent );
+ TransactionHelper t4q2( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moChild, acCredit, acChild );
+
+ TransactionHelper t1y2( QDate(2005,1,1), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2y2( QDate(2005,5,1), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3y2( QDate(2005,9,1), MyMoneySplit::ActionWithdrawal, moParent2, acCredit, acParent );
+ TransactionHelper t4y2( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moChild, acCredit, acChild );
+
+ filter.setRowType( MyMoneyReport::eInstitution );
+ filter.setName("Accounts by Institution (With Transactions)");
+ XMLandback(filter);
+ QueryTable qtbl_2(filter);
+
+ rows = qtbl_2.rows();
+
+ CPPUNIT_ASSERT(rows.count() == 2);
+ CPPUNIT_ASSERT(rows[0]["account"]=="Checking Account");
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[0]["value"])==(moCheckingOpen-moSolo*3));
+ CPPUNIT_ASSERT(rows[1]["account"]=="Credit Card");
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[1]["value"])==(moCreditOpen-(moParent1 + moParent2 + moChild) * 3));
+
+ html = qtbl_2.renderHTML();
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Grand Total")) == moCheckingOpen+moCreditOpen-(moParent1 + moParent2 + moSolo + moChild) * 3 );
+
+ //
+ // Account TYPES
+ //
+
+ filter.setRowType( MyMoneyReport::eAccountType );
+ filter.setName("Accounts by Type");
+ XMLandback(filter);
+ QueryTable qtbl_3(filter);
+
+ rows = qtbl_3.rows();
+
+ CPPUNIT_ASSERT(rows.count() == 2);
+ CPPUNIT_ASSERT(rows[0]["account"]=="Checking Account");
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[0]["value"])==(moCheckingOpen-moSolo*3));
+ CPPUNIT_ASSERT(rows[1]["account"]=="Credit Card");
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[1]["value"])==(moCreditOpen-(moParent1 + moParent2 + moChild) * 3));
+
+ html = qtbl_3.renderHTML();
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Total")+" "+i18n("Checking")) == moCheckingOpen-moSolo*3 );
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Total")+" "+i18n("Credit Card")) == moCreditOpen-(moParent1 + moParent2 + moChild) * 3 );
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Grand Total")) == moCheckingOpen+moCreditOpen-(moParent1 + moParent2 + moSolo + moChild) * 3 );
+ }
+ catch(MyMoneyException *e)
+ {
+ CPPUNIT_FAIL(e->what());
+ delete e;
+ }
+}
+
+void QueryTableTest::testInvestment(void)
+{
+ try
+ {
+ // Equities
+ eqStock1 = makeEquity("Stock1","STK1");
+ eqStock2 = makeEquity("Stock2","STK2");
+
+ // Accounts
+ acInvestment = makeAccount("Investment",MyMoneyAccount::Investment,moZero,QDate(2004,1,1),acAsset);
+ acStock1 = makeAccount("Stock 1",MyMoneyAccount::Stock,moZero,QDate(2004,1,1),acInvestment,eqStock1);
+ acStock2 = makeAccount("Stock 2",MyMoneyAccount::Stock,moZero,QDate(2004,1,1),acInvestment,eqStock2);
+ acDividends = makeAccount("Dividends",MyMoneyAccount::Income,moZero,QDate(2004,1,1),acIncome);
+ acInterest = makeAccount("Interest",MyMoneyAccount::Income,moZero,QDate(2004,1,1),acIncome);
+
+ // Transactions
+ // Date Action Shares Price Stock Asset Income
+ InvTransactionHelper s1b1( QDate(2004,2,1), MyMoneySplit::ActionBuyShares, 1000.00, 100.00, acStock1, acChecking, QString() );
+ InvTransactionHelper s1b2( QDate(2004,3,1), MyMoneySplit::ActionBuyShares, 1000.00, 110.00, acStock1, acChecking, QString() );
+ InvTransactionHelper s1s1( QDate(2004,4,1), MyMoneySplit::ActionBuyShares, -200.00, 120.00, acStock1, acChecking, QString() );
+ InvTransactionHelper s1s2( QDate(2004,5,1), MyMoneySplit::ActionBuyShares, -200.00, 100.00, acStock1, acChecking, QString() );
+ InvTransactionHelper s1r1( QDate(2004,6,1), MyMoneySplit::ActionReinvestDividend, 50.00, 100.00, acStock1, QString(), acDividends );
+ InvTransactionHelper s1r2( QDate(2004,7,1), MyMoneySplit::ActionReinvestDividend, 50.00, 80.00, acStock1, QString(), acDividends );
+ InvTransactionHelper s1c1( QDate(2004,8,1), MyMoneySplit::ActionDividend, 10.00, 100.00, acStock1, acChecking, acDividends );
+ InvTransactionHelper s1c2( QDate(2004,9,1), MyMoneySplit::ActionDividend, 10.00, 120.00, acStock1, acChecking, acDividends );
+ InvTransactionHelper s1y1( QDate(2004,9,15), MyMoneySplit::ActionYield, 10.00, 110.00, acStock1, acChecking, acInterest );
+
+ makeEquityPrice( eqStock1, QDate(2004,10,1), 100.00 );
+
+ //
+ // Investment Transactions Report
+ //
+
+ MyMoneyReport invtran_r(
+ MyMoneyReport::eTopAccount,
+ MyMoneyReport::eQCaction|MyMoneyReport::eQCshares|MyMoneyReport::eQCprice,
+ MyMoneyTransactionFilter::userDefined,
+ MyMoneyReport::eDetailAll,
+ i18n("Investment Transactions"),
+ i18n("Test Report")
+ );
+ invtran_r.setDateFilter(QDate(2004,1,1),QDate(2004,12,31));
+ invtran_r.setInvestmentsOnly(true);
+ XMLandback(invtran_r);
+ QueryTable invtran(invtran_r);
+
+#if 1
+ writeTabletoHTML(invtran,"investment_transactions_test.html");
+
+ QValueList<ListTable::TableRow> rows = invtran.rows();
+
+ CPPUNIT_ASSERT(rows.count()==17);
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[1]["value"])==MyMoneyMoney(100000.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[2]["value"])==MyMoneyMoney(110000.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[3]["value"])==MyMoneyMoney(-24000.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[4]["value"])==MyMoneyMoney(-20000.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[5]["value"])==MyMoneyMoney( 5000.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[6]["value"])==MyMoneyMoney( 4000.00));
+ // need to fix these... fundamentally different from the original test
+ //CPPUNIT_ASSERT(MyMoneyMoney(invtran.m_rows[8]["value"])==MyMoneyMoney( -1000.00));
+ //CPPUNIT_ASSERT(MyMoneyMoney(invtran.m_rows[11]["value"])==MyMoneyMoney( -1200.00));
+ //CPPUNIT_ASSERT(MyMoneyMoney(invtran.m_rows[14]["value"])==MyMoneyMoney( -1100.00));
+
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[1]["price"])==MyMoneyMoney(100.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[3]["price"])==MyMoneyMoney(120.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[5]["price"])==MyMoneyMoney(100.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[7]["price"])==MyMoneyMoney(100.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[10]["price"])==MyMoneyMoney(120.00));
+
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[2]["shares"])==MyMoneyMoney(1000.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[4]["shares"])==MyMoneyMoney(-200.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[6]["shares"])==MyMoneyMoney( 50.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[8]["shares"])==MyMoneyMoney( 0.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[11]["shares"])==MyMoneyMoney( 0.00));
+
+ CPPUNIT_ASSERT(rows[1]["action"]=="Buy");
+ CPPUNIT_ASSERT(rows[3]["action"]=="Sell");
+ CPPUNIT_ASSERT(rows[5]["action"]=="Reinvest");
+ CPPUNIT_ASSERT(rows[7]["action"]=="Dividend");
+ CPPUNIT_ASSERT(rows[13]["action"]=="Yield");
+#else
+ CPPUNIT_ASSERT(rows.count()==9);
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[0]["value"])==MyMoneyMoney(100000.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[1]["value"])==MyMoneyMoney(110000.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[2]["value"])==MyMoneyMoney(-24000.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[3]["value"])==MyMoneyMoney(-20000.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[4]["value"])==MyMoneyMoney( 5000.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[5]["value"])==MyMoneyMoney( 4000.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[6]["value"])==MyMoneyMoney( -1000.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[7]["value"])==MyMoneyMoney( -1200.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[8]["value"])==MyMoneyMoney( -1100.00));
+
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[0]["price"])==MyMoneyMoney(100.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[2]["price"])==MyMoneyMoney(120.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[4]["price"])==MyMoneyMoney(100.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[6]["price"])==MyMoneyMoney( 0.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[8]["price"])==MyMoneyMoney( 0.00));
+
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[1]["shares"])==MyMoneyMoney(1000.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[3]["shares"])==MyMoneyMoney(-200.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[5]["shares"])==MyMoneyMoney( 50.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[7]["shares"])==MyMoneyMoney( 0.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[8]["shares"])==MyMoneyMoney( 0.00));
+
+ CPPUNIT_ASSERT(rows[0]["action"]=="Buy");
+ CPPUNIT_ASSERT(rows[2]["action"]=="Sell");
+ CPPUNIT_ASSERT(rows[4]["action"]=="Reinvest");
+ CPPUNIT_ASSERT(rows[6]["action"]=="Dividend");
+ CPPUNIT_ASSERT(rows[8]["action"]=="Yield");
+#endif
+
+ QString html = invtran.renderHTML();
+#if 1
+ // i think this is the correct amount. different treatment of dividend and yield
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Total Stock 1")) == MyMoneyMoney(175000.00) );
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Grand Total")) == MyMoneyMoney(175000.00) );
+#else
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Total Stock 1")) == MyMoneyMoney(171700.00) );
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Grand Total")) == MyMoneyMoney(171700.00) );
+#endif
+
+ //
+ // Investment Performance Report
+ //
+
+ MyMoneyReport invhold_r(
+ MyMoneyReport::eAccountByTopAccount,
+ MyMoneyReport::eQCperformance,
+ MyMoneyTransactionFilter::userDefined,
+ MyMoneyReport::eDetailAll,
+ i18n("Investment Performance by Account"),
+ i18n("Test Report")
+ );
+ invhold_r.setDateFilter(QDate(2004,1,1),QDate(2004,10,1));
+ invhold_r.setInvestmentsOnly(true);
+ XMLandback(invhold_r);
+ QueryTable invhold(invhold_r);
+
+ writeTabletoHTML(invhold,"Investment Performance by Account.html");
+
+ rows = invhold.rows();
+
+ CPPUNIT_ASSERT(rows.count()==2);
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[0]["return"])==MyMoneyMoney("669/10000"));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[0]["buys"])==MyMoneyMoney(210000.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[0]["sells"])==MyMoneyMoney(-44000.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[0]["reinvestincome"])==MyMoneyMoney(9000.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[0]["cashincome"])==MyMoneyMoney(3300.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[0]["shares"])==MyMoneyMoney(1700.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[0]["price"])==MyMoneyMoney(100.00));
+ CPPUNIT_ASSERT(MyMoneyMoney(rows[1]["return"]).isZero());
+
+ html = invhold.renderHTML();
+ CPPUNIT_ASSERT( searchHTML(html,i18n("Grand Total")) == MyMoneyMoney(170000.00) );
+
+#if 0
+ // Dump file & reports
+ QFile g( "investmentkmy.xml" );
+ g.open( IO_WriteOnly );
+ MyMoneyStorageXML xml;
+ IMyMoneyStorageFormat& interface = xml;
+ interface.writeFile(&g, dynamic_cast<IMyMoneySerialize*> (MyMoneyFile::instance()->storage()));
+ g.close();
+
+ invtran.dump("invtran.html","<html><head></head><body>%1</body></html>");
+ invhold.dump("invhold.html","<html><head></head><body>%1</body></html>");
+#endif
+
+ }
+ catch(MyMoneyException *e)
+ {
+ CPPUNIT_FAIL(e->what());
+ delete e;
+ }
+}
+ //this is to prevent me from making mistakes again when modifying balances - asoliverez
+ //this case tests only the opening and ending balance of the accounts
+ void QueryTableTest::testBalanceColumn()
+ {
+ try
+ {
+ TransactionHelper t1q1( QDate(2004,1,1), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2q1( QDate(2004,2,1), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3q1( QDate(2004,3,1), MyMoneySplit::ActionWithdrawal, moParent2, acCredit, acParent );
+ TransactionHelper t4y1( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moChild, acCredit, acChild );
+
+ TransactionHelper t1q2( QDate(2004,4,1), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2q2( QDate(2004,5,1), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3q2( QDate(2004,6,1), MyMoneySplit::ActionWithdrawal, moParent2, acCredit, acParent );
+ TransactionHelper t4q2( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moChild, acCredit, acChild );
+
+ TransactionHelper t1y2( QDate(2005,1,1), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2y2( QDate(2005,5,1), MyMoneySplit::ActionWithdrawal, moParent1, acCredit, acParent );
+ TransactionHelper t3y2( QDate(2005,9,1), MyMoneySplit::ActionWithdrawal, moParent2, acCredit, acParent );
+ TransactionHelper t4y2( QDate(2004,11,7), MyMoneySplit::ActionWithdrawal, moChild, acCredit, acChild );
+
+ unsigned cols;
+
+ MyMoneyReport filter;
+
+ filter.setRowType( MyMoneyReport::eAccount );
+ filter.setName("Transactions by Account");
+ cols = MyMoneyReport::eQCnumber | MyMoneyReport::eQCpayee | MyMoneyReport::eQCcategory | MyMoneyReport::eQCbalance;
+ filter.setQueryColumns( static_cast<MyMoneyReport::EQueryColumns>(cols) ); //
+ XMLandback(filter);
+ QueryTable qtbl_3(filter);
+
+ writeTabletoHTML(qtbl_3,"Transactions by Account.html");
+
+ QString html = qtbl_3.renderHTML();
+
+ QValueList<ListTable::TableRow> rows = qtbl_3.rows();
+
+ CPPUNIT_ASSERT(rows.count() == 16);
+
+ //this is to make sure that the dates of closing and opening balances and the balance numbers are ok
+ QString openingDate = KGlobal::locale()->formatDate(QDate(2004,1,1), true);
+ QString closingDate = KGlobal::locale()->formatDate(QDate(2005,9,1), true);
+ CPPUNIT_ASSERT( html.find(openingDate + "</td><td class=\"left\"></td><td class=\"left\">"+i18n("Opening Balance")) > 0);
+ CPPUNIT_ASSERT( html.find(closingDate + "</td><td class=\"left\"></td><td class=\"left\">"+i18n("Closing Balance")+"</td><td class=\"left\"></td><td class=\"value\"></td><td>&nbsp;-702.36</td></tr>") > 0);
+ CPPUNIT_ASSERT( html.find(closingDate + "</td><td class=\"left\"></td><td class=\"left\">"+i18n("Closing Balance")+"</td><td class=\"left\"></td><td class=\"value\"></td><td>&nbsp;-705.69</td></tr>") > 0);
+
+ }
+ catch(MyMoneyException *e)
+ {
+ CPPUNIT_FAIL(e->what());
+ delete e;
+ }
+
+ }
+
+void QueryTableTest::testTaxReport()
+{
+ try {
+ TransactionHelper t1q1( QDate(2004,1,1), MyMoneySplit::ActionWithdrawal, moSolo, acChecking, acSolo );
+ TransactionHelper t2q1( QDate(2004,2,1), MyMoneySplit::ActionWithdrawal, moParent1, acChecking, acTax );
+
+ unsigned cols;
+ MyMoneyReport filter;
+
+ filter.setRowType( MyMoneyReport::eCategory );
+ filter.setName("Tax Transactions");
+ cols = MyMoneyReport::eQCnumber | MyMoneyReport::eQCpayee | MyMoneyReport::eQCaccount;
+ filter.setQueryColumns( static_cast<MyMoneyReport::EQueryColumns>(cols) );
+ filter.setTax(true);
+
+ XMLandback(filter);
+ QueryTable qtbl_3(filter);
+
+ writeTabletoHTML(qtbl_3,"Tax Transactions.html");
+
+ QValueList<ListTable::TableRow> rows = qtbl_3.rows();
+
+ QString html = qtbl_3.renderHTML();
+ CPPUNIT_ASSERT(rows.count() == 1);
+ } catch(MyMoneyException *e) {
+ CPPUNIT_FAIL(e->what());
+ delete e;
+ }
+}
+
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/reports/querytabletest.h b/kmymoney2/reports/querytabletest.h
new file mode 100644
index 0000000..36f3075
--- /dev/null
+++ b/kmymoney2/reports/querytabletest.h
@@ -0,0 +1,53 @@
+/***************************************************************************
+ querytabletest.h
+ -------------------
+ copyright : (C) 2002 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ Ace Jones <ace.jones@hotpop.com>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef QUERYTABLETEST_H
+#define QUERYTABLETEST_H
+
+#include <cppunit/extensions/HelperMacros.h>
+#include "../mymoney/mymoneyfile.h"
+#include "../mymoney/storage/mymoneyseqaccessmgr.h"
+
+class QueryTableTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(QueryTableTest);
+ CPPUNIT_TEST(testQueryBasics);
+ CPPUNIT_TEST(testCashFlowAnalysis);
+ CPPUNIT_TEST(testAccountQuery);
+ CPPUNIT_TEST(testInvestment);
+ CPPUNIT_TEST(testBalanceColumn);
+ CPPUNIT_TEST(testTaxReport);
+ CPPUNIT_TEST_SUITE_END();
+
+private:
+ MyMoneyAccount *m;
+
+ MyMoneySeqAccessMgr* storage;
+ MyMoneyFile* file;
+
+public:
+ QueryTableTest();
+ void setUp ();
+ void tearDown ();
+ void testQueryBasics();
+ void testCashFlowAnalysis();
+ void testAccountQuery();
+ void testInvestment();
+ void testBalanceColumn();
+ void testTaxReport();
+};
+
+#endif
diff --git a/kmymoney2/reports/reportaccount.cpp b/kmymoney2/reports/reportaccount.cpp
new file mode 100644
index 0000000..5f7e7f8
--- /dev/null
+++ b/kmymoney2/reports/reportaccount.cpp
@@ -0,0 +1,355 @@
+/***************************************************************************
+ reportaccount.cpp
+ -------------------
+ begin : Mon May 17 2004
+ copyright : (C) 2004-2005 by Ace Jones
+ email : <ace.j@hotpop.com>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+// This is just needed for i18n(). Once I figure out how to handle i18n
+// without using this macro directly, I'll be freed of KDE dependency. This
+// is a minor problem because we use these terms when rendering to HTML,
+// and a more major problem because we need it to translate account types
+// (e.g. MyMoneyAccount::Checkings) into their text representation. We also
+// use that text representation in the core data structure of the report. (Ace)
+
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../mymoney/mymoneyfile.h"
+#include "../mymoney/mymoneysecurity.h"
+#include "reportdebug.h"
+#include "reportaccount.h"
+
+namespace reports {
+
+ReportAccount::ReportAccount( void )
+{
+}
+
+ReportAccount::ReportAccount( const ReportAccount& copy ):
+ MyMoneyAccount( copy ), m_nameHierarchy( copy.m_nameHierarchy )
+{
+ // NOTE: I implemented the copy constructor solely for debugging reasons
+
+ DEBUG_ENTER(__PRETTY_FUNCTION__);
+}
+
+ReportAccount::ReportAccount( const QString& accountid ):
+ MyMoneyAccount( MyMoneyFile::instance()->account(accountid) )
+{
+ DEBUG_ENTER(__PRETTY_FUNCTION__);
+ DEBUG_OUTPUT(QString("Account %1").arg(accountid));
+ calculateAccountHierarchy();
+}
+
+ReportAccount::ReportAccount( const MyMoneyAccount& account ):
+ MyMoneyAccount( account )
+{
+ DEBUG_ENTER(__PRETTY_FUNCTION__);
+ DEBUG_OUTPUT(QString("Account %1").arg(account.id()));
+ calculateAccountHierarchy();
+}
+
+void ReportAccount::calculateAccountHierarchy( void )
+{
+ DEBUG_ENTER(__PRETTY_FUNCTION__);
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+ QString resultid = id();
+ QString parentid = parentAccountId();
+
+#ifdef DEBUG_HIDE_SENSITIVE
+ m_nameHierarchy.prepend(file->account(resultid).id());
+#else
+ m_nameHierarchy.prepend(file->account(resultid).name());
+#endif
+ while (!file->isStandardAccount(parentid))
+ {
+ // take on the identity of our parent
+ resultid = parentid;
+
+ // and try again
+ parentid = file->account(resultid).parentAccountId();
+#ifdef DEBUG_HIDE_SENSITIVE
+ m_nameHierarchy.prepend(file->account(resultid).id());
+#else
+ m_nameHierarchy.prepend(file->account(resultid).name());
+#endif
+ }
+}
+
+MyMoneyMoney ReportAccount::deepCurrencyPrice( const QDate& date ) const
+{
+ DEBUG_ENTER(__PRETTY_FUNCTION__);
+
+ MyMoneyMoney result(1, 1);
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ MyMoneySecurity undersecurity = file->security( currencyId() );
+ if ( ! undersecurity.isCurrency() )
+ {
+ MyMoneyPrice price = file->price(undersecurity.id(),undersecurity.tradingCurrency(),date);
+ if ( price.isValid() )
+ {
+ result = price.rate(undersecurity.tradingCurrency());
+
+ DEBUG_OUTPUT(QString("Converting under %1 to deep %2, price on %3 is %4")
+ .arg(undersecurity.name())
+ .arg(file->security(undersecurity.tradingCurrency()).name())
+ .arg(date.toString())
+ .arg(result.toDouble()));
+ }
+ else
+ {
+ DEBUG_OUTPUT(QString("No price to convert under %1 to deep %2 on %3")
+ .arg(undersecurity.name())
+ .arg(file->security(undersecurity.tradingCurrency()).name())
+ .arg(date.toString()));
+ }
+ }
+
+ return result;
+}
+
+MyMoneyMoney ReportAccount::baseCurrencyPrice( const QDate& date ) const
+{
+ // Note that whether or not the user chooses to convert to base currency, all the values
+ // for a given account/category are converted to the currency for THAT account/category
+ // The "Convert to base currency" tells the report to convert from the account/category
+ // currency to the file's base currency.
+ //
+ // An example where this matters is if Category 'C' and account 'U' are in USD, but
+ // Account 'J' is in JPY. Say there are two transactions, one is US$100 from U to C,
+ // the other is JPY10,000 from J to C. Given a JPY price of USD$0.01, this means
+ // C will show a balance of $200 NO MATTER WHAT the user chooses for 'convert to base
+ // currency. This confused me for a while, which is why I wrote this comment.
+ // --acejones
+
+ DEBUG_ENTER(__PRETTY_FUNCTION__);
+
+ MyMoneyMoney result(1, 1);
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ if(isForeignCurrency())
+ {
+ result = foreignCurrencyPrice(file->baseCurrency().id(), date);
+ }
+
+ return result;
+}
+
+MyMoneyMoney ReportAccount::foreignCurrencyPrice( const QString foreignCurrency, const QDate& date ) const
+{
+ DEBUG_ENTER(__PRETTY_FUNCTION__);
+
+ MyMoneyPrice price;
+ MyMoneyMoney result(1, 1);
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneySecurity security = file->security(foreignCurrency);
+
+ //check whether it is a currency or a commodity. In the latter case case, get the trading currency
+ QString tradingCurrency;
+ if(security.isCurrency()) {
+ tradingCurrency = foreignCurrency;
+ } else {
+ tradingCurrency = security.tradingCurrency();
+ }
+
+ //It makes no sense to get the price if both currencies are the same
+ if(currency().id() != tradingCurrency) {
+ price = file->price(currency().id(), tradingCurrency, date);
+
+ if(price.isValid())
+ {
+ result = price.rate(tradingCurrency);
+ DEBUG_OUTPUT(QString("Converting deep %1 to currency %2, price on %3 is %4")
+ .arg(file->currency(currency().id()).name())
+ .arg(file->currency(foreignCurrency).name())
+ .arg(date.toString())
+ .arg(result.toDouble()));
+ }
+ else
+ {
+ DEBUG_OUTPUT(QString("No price to convert deep %1 to currency %2 on %3")
+ .arg(file->currency(currency().id()).name())
+ .arg(file->currency(foreignCurrency).name())
+ .arg(date.toString()));
+ }
+ }
+ return result;
+}
+
+/**
+ * Fetch the trading currency of this account's currency
+ *
+ * @return The account's currency trading currency
+ */
+MyMoneySecurity ReportAccount::currency( void ) const
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ // First, get the deep currency
+ MyMoneySecurity deepcurrency = file->security( currencyId() );
+ if ( ! deepcurrency.isCurrency() )
+ deepcurrency = file->security( deepcurrency.tradingCurrency() );
+
+ // Return the deep currency's ID
+ return deepcurrency;
+}
+
+/**
+ * Determine if this account's deep currency is different from the file's
+ * base currency
+ *
+ * @return bool True if this account is in a foreign currency
+ */
+bool ReportAccount::isForeignCurrency( void ) const
+{
+ return ( currency().id() != MyMoneyFile::instance()->baseCurrency().id() );
+}
+
+bool ReportAccount::operator<(const ReportAccount& second) const
+{
+// DEBUG_ENTER(__PRETTY_FUNCTION__);
+
+ bool result = false;
+ bool haveresult = false;
+ QStringList::const_iterator it_first = m_nameHierarchy.begin();
+ QStringList::const_iterator it_second = second.m_nameHierarchy.begin();
+ while ( it_first != m_nameHierarchy.end() )
+ {
+ // The first string is longer than the second, but otherwise identical
+ if ( it_second == second.m_nameHierarchy.end() )
+ {
+ result = false;
+ haveresult = true;
+ break;
+ }
+
+ if ( (*it_first) < (*it_second) )
+ {
+ result = true;
+ haveresult = true;
+ break;
+ }
+ else if ( (*it_first) > (*it_second) )
+ {
+ result = false;
+ haveresult = true;
+ break;
+ }
+
+ ++it_first;
+ ++it_second;
+ }
+
+ // The second string is longer than the first, but otherwise identical
+ if ( !haveresult && ( it_second != second.m_nameHierarchy.end() ) )
+ result = true;
+
+// DEBUG_OUTPUT(QString("%1 < %2 is %3").arg(debugName(),second.debugName()).arg(result));
+ return result;
+}
+
+/**
+ * The name of only this account. No matter how deep the hierarchy, this
+ * method only returns the last name in the list, which is the engine name]
+ * of this account.
+ *
+ * @return QString The account's name
+ */
+QString ReportAccount::name( void ) const
+{
+ return m_nameHierarchy.back();
+}
+
+// MyMoneyAccount:fullHierarchyDebug()
+QString ReportAccount::debugName( void ) const
+{
+ return m_nameHierarchy.join("|");
+}
+
+// MyMoneyAccount:fullHierarchy()
+QString ReportAccount::fullName( void ) const
+{
+ return m_nameHierarchy.join(": ");
+}
+
+// MyMoneyAccount:isTopCategory()
+bool ReportAccount::isTopLevel( void ) const
+{
+ return ( m_nameHierarchy.size() == 1 );
+}
+
+// MyMoneyAccount:hierarchyDepth()
+unsigned ReportAccount::hierarchyDepth( void ) const
+{
+ return ( m_nameHierarchy.size() );
+}
+
+ReportAccount ReportAccount::parent( void ) const
+{
+ return ReportAccount( parentAccountId() );
+}
+
+ReportAccount ReportAccount::topParent( void ) const
+{
+ DEBUG_ENTER(__PRETTY_FUNCTION__);
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+ QString resultid = id();
+ QString parentid = parentAccountId();
+
+ while (!file->isStandardAccount(parentid))
+ {
+ // take on the identity of our parent
+ resultid = parentid;
+
+ // and try again
+ parentid = file->account(resultid).parentAccountId();
+ }
+
+ return ReportAccount( resultid );
+}
+
+QString ReportAccount::topParentName( void ) const
+{
+ return m_nameHierarchy.first();
+}
+
+bool ReportAccount::isLiquidAsset( void ) const
+{
+ return accountType() == MyMoneyAccount::Cash ||
+ accountType() == MyMoneyAccount::Checkings ||
+ accountType() == MyMoneyAccount::Savings;
+}
+
+
+bool ReportAccount::isLiquidLiability( void ) const
+{
+ return accountType() == MyMoneyAccount::CreditCard;
+
+}
+
+
+
+
+} // end namespace reports
diff --git a/kmymoney2/reports/reportaccount.h b/kmymoney2/reports/reportaccount.h
new file mode 100644
index 0000000..e07f9b1
--- /dev/null
+++ b/kmymoney2/reports/reportaccount.h
@@ -0,0 +1,238 @@
+/***************************************************************************
+ reportaccount.h
+ -------------------
+ begin : Sat May 22 2004
+ copyright : (C) 2004-2005 by Ace Jones
+ email : <ace.j@hotpop.com>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef REPORTACCOUNT_H
+#define REPORTACCOUNT_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstringlist.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include "../mymoney/mymoneyaccount.h"
+
+namespace reports {
+
+/**
+ * This is a MyMoneyAccount as viewed from the reporting engine.
+ *
+ * All reporting methods should use ReportAccount INSTEAD OF
+ * MyMoneyAccount at all times.
+ *
+ * The primary functionality this provides is a full chain of account
+ * hierarchy that is easy to traverse. It's needed because the PivotTable
+ * grid needs to store and sort by the full account hierarchy, while still
+ * having access to the account itself for currency conversion.
+ *
+ * In addition, several other convenience functions are provided that may
+ * be worth moving into MyMoneyAccount at some point.
+ *
+ * @author Ace Jones
+ *
+ * @short
+**/
+class ReportAccount: public MyMoneyAccount
+{
+private:
+ QStringList m_nameHierarchy;
+
+public:
+ /**
+ * Default constructor
+ *
+ * Needed to allow this object to be stored in a QMap.
+ */
+ ReportAccount( void );
+
+ /**
+ * Copy constructor
+ *
+ * Needed to allow this object to be stored in a QMap.
+ */
+ ReportAccount( const ReportAccount& );
+
+ /**
+ * Regular constructor
+ *
+ * @param accountid Account which this account descriptor should be based off of
+ */
+ ReportAccount( const QString& accountid );
+
+ /**
+ * Regular constructor
+ *
+ * @param accountid Account which this account descriptor should be based off of
+ */
+ ReportAccount( const MyMoneyAccount& accountid );
+
+ /**
+ * @param right The object to compare against
+ * @return bool True if this account's fully-qualified hierarchy name
+ * is less than that of the given qccount
+ */
+ bool operator<( const ReportAccount& right ) const;
+
+ /**
+ * Returns the price of this account's underlying currency on the indicated date,
+ * translated into the account's deep currency
+ *
+ * There are three different currencies in play with a single Account:
+ * - The underlying currency: What currency the account itself is denominated in
+ * - The deep currency: The underlying currency's own underlying currency. This
+ * is only a factor if the underlying currency of this account IS NOT a
+ * currency itself, but is some other kind of security. In that case, the
+ * underlying security has its own currency. The deep currency is the
+ * currency of the underlying security. On the other hand, if the account
+ * has a currency itself, then the deep currency == the underlying currency,
+ * and this function will return 1.0.
+ * - The base currency: The base currency of the user's overall file
+ *
+ * @param date The date in question
+ * @return MyMoneyMoney The value of the account's currency on that date
+ */
+ MyMoneyMoney deepCurrencyPrice( const QDate& date ) const;
+
+ /**
+ * Returns the price of this account's deep currency on the indicated date,
+ * translated into the base currency
+ *
+ * @param date The date in question
+ * @return MyMoneyMoney The value of the account's currency on that date
+ */
+ MyMoneyMoney baseCurrencyPrice( const QDate& date ) const;
+
+ /**
+ * Returns the price of this account's deep currency on the indicated date,
+ * translated into the base currency
+ *
+ * @param foreignCurrency The currency on which the price will be returned
+ * @param date The date in question
+ * @return MyMoneyMoney The value of the account's currency on that date
+ */
+ MyMoneyMoney foreignCurrencyPrice( const QString foreignCurrency, const QDate& date ) const;
+
+ /**
+ * Fetch the trading symbol of this account's deep currency
+ *
+ * @return The account's currency trading currency object
+ */
+ MyMoneySecurity currency( void ) const;
+
+ /**
+ * Determine if this account's deep currency is different from the file's
+ * base currency
+ *
+ * @return bool True if this account is in a foreign currency
+ */
+ bool isForeignCurrency( void ) const;
+
+ /**
+ * The name of only this account. No matter how deep the hierarchy, this
+ * method only returns the last name in the list, which is the engine name]
+ * of this account.
+ *
+ * @return QString The account's name
+ */
+ QString name( void ) const;
+
+ /**
+ * The entire hierarchy of this account descriptor
+ * This is similiar to debugName(), however debugName() is not guaranteed
+ * to always look pretty, while fullName() is. So if the user is ever
+ * going to see the results, use fullName().
+ *
+ * @return QString The account's full hierarchy
+ */
+ QString fullName( void ) const;
+
+ /**
+ * The entire hierarchy of this account descriptor, suitable for displaying
+ * in debugging output
+ *
+ * @return QString The account's full hierarchy (suitable for debugging)
+ */
+ QString debugName( void ) const;
+
+ /**
+ * Whether this account is a 'top level' parent account. This means that
+ * it's parent is an account class, like asset, liability, expense or income
+ *
+ * @return bool True if this account is a top level parent account
+ */
+ /*inline*/ bool isTopLevel( void ) const;
+
+ /**
+ * Returns the name of the top level parent account
+ *
+ * (See isTopLevel for a definition of 'top level parent')
+ *
+ * @return QString The name of the top level parent account
+ */
+ /*inline*/ QString topParentName( void ) const;
+
+ /**
+ * Returns a report account containing the top parent account
+ *
+ * @return ReportAccount The account of the top parent
+ */
+ ReportAccount topParent( void ) const;
+
+ /**
+ * Returns a report account containing the immediate parent account
+ *
+ * @return ReportAccount The account of the immediate parent
+ */
+ ReportAccount parent( void ) const;
+
+ /**
+ * Returns the number of accounts in this account's hierarchy. If this is a
+ * Top Category, it returns 1. If it's parent is a Top Category, returns 2,
+ * etc.
+ *
+ * @return unsigned Hierarchy depth
+ */
+ unsigned hierarchyDepth( void ) const;
+
+ /**
+ * Returns whether this account is a liquid asset
+ *
+ */
+ bool isLiquidAsset( void ) const;
+
+ /**
+ * Returns whether this account is a liquid liability
+ *
+ */
+ bool isLiquidLiability( void ) const;
+
+protected:
+ /**
+ * Calculates the full account hierarchy of this account
+ */
+ void calculateAccountHierarchy( void );
+
+};
+
+} // end namespace reports
+
+#endif // REPORTACCOUNT_H
diff --git a/kmymoney2/reports/reportdebug.h b/kmymoney2/reports/reportdebug.h
new file mode 100644
index 0000000..3a95465
--- /dev/null
+++ b/kmymoney2/reports/reportdebug.h
@@ -0,0 +1,83 @@
+/***************************************************************************
+ reportdebug.h
+ -------------------
+ begin : Sat May 22 2004
+ copyright : (C) 2004-2005 by Ace Jones
+ email : <ace.j@hotpop.com>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef REPORTDEBUG_H
+#define REPORTDEBUG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+namespace reports {
+
+// define to enable massive debug logging to stderr
+#undef DEBUG_REPORTS
+// #define DEBUG_REPORTS
+
+#define DEBUG_ENABLED_BY_DEFAULT false
+
+#ifdef DEBUG_REPORTS
+
+// define to filter out account names & transaction amounts
+// DO NOT check into CVS with this defined!! It breaks all
+// unit tests.
+#undef DEBUG_HIDE_SENSITIVE
+
+#define DEBUG_ENTER(x) Debug ___DEBUG(x)
+#define DEBUG_OUTPUT(x) ___DEBUG.output(x)
+#define DEBUG_OUTPUT_IF(x,y) { if (x) ___DEBUG.output(y); }
+#define DEBUG_ENABLE(x) Debug::enable(x)
+#define DEBUG_ENABLE_KEY(x) Debug::setEnableKey(x)
+#ifdef DEBUG_HIDE_SENSITIVE
+#define DEBUG_SENSITIVE(x) QString("hidden")
+#else
+#define DEBUG_SENSITIVE(x) (x)
+#endif
+
+#else
+
+#define DEBUG_ENTER(x)
+#define DEBUG_OUTPUT(x)
+#define DEBUG_OUTPUT_IF(x,y)
+#define DEBUG_ENABLE(x)
+#define DEBUG_SENSITIVE(x)
+#endif
+
+class Debug
+{
+ QString m_methodName;
+ static QString m_sTabs;
+ static bool m_sEnabled;
+ bool m_enabled;
+ static QString m_sEnableKey;
+public:
+ Debug( const QString& _name );
+ ~Debug();
+ void output( const QString& _text );
+ static void enable( bool _e ) { m_sEnabled = _e; }
+ static void setEnableKey( const QString& _s ) { m_sEnableKey = _s; }
+};
+
+} // end namespace reports
+
+#endif // REPORTDEBUG_H
diff --git a/kmymoney2/reports/reportstestcommon.cpp b/kmymoney2/reports/reportstestcommon.cpp
new file mode 100644
index 0000000..31e6c1d
--- /dev/null
+++ b/kmymoney2/reports/reportstestcommon.cpp
@@ -0,0 +1,494 @@
+/***************************************************************************
+ reportstestcommon.cpp
+ -------------------
+ copyright : (C) 2002-2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ Ace Jones <ace.j@hotpop.com>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include <qvaluelist.h>
+#include <qvaluevector.h>
+#include <qdom.h>
+#include <qfile.h>
+
+#include <kdebug.h>
+#include <kdeversion.h>
+#include <kglobal.h>
+#include <kglobalsettings.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+
+#include "kreportsviewtest.h"
+
+#define private public
+#include "pivottable.h"
+#include "querytable.h"
+#undef private
+using namespace reports;
+
+#include "../mymoney/mymoneysecurity.h"
+#include "../mymoney/mymoneyprice.h"
+#include "../mymoney/storage/mymoneystoragedump.h"
+#include "../mymoney/mymoneyreport.h"
+#include "../mymoney/mymoneystatement.h"
+#include "../mymoney/storage/mymoneystoragexml.h"
+#include "reportstestcommon.h"
+
+namespace test {
+
+const MyMoneyMoney moCheckingOpen(0.0);
+const MyMoneyMoney moCreditOpen(-0.0);
+const MyMoneyMoney moConverterCheckingOpen(1418.0);
+const MyMoneyMoney moConverterCreditOpen(-418.0);
+const MyMoneyMoney moZero(0.0);
+const MyMoneyMoney moSolo(234.12);
+const MyMoneyMoney moParent1(88.01);
+const MyMoneyMoney moParent2(133.22);
+const MyMoneyMoney moParent(moParent1+moParent2);
+const MyMoneyMoney moChild(14.00);
+const MyMoneyMoney moThomas(5.11);
+const MyMoneyMoney moNoPayee(8944.70);
+
+QString acAsset;
+QString acLiability;
+QString acExpense;
+QString acIncome;
+QString acChecking;
+QString acCredit;
+QString acSolo;
+QString acParent;
+QString acChild;
+QString acSecondChild;
+QString acGrandChild1;
+QString acGrandChild2;
+QString acForeign;
+QString acCanChecking;
+QString acJpyChecking;
+QString acCanCash;
+QString acJpyCash;
+QString inBank;
+QString eqStock1;
+QString eqStock2;
+QString acInvestment;
+QString acStock1;
+QString acStock2;
+QString acDividends;
+QString acInterest;
+QString acTax;
+QString acCash;
+
+TransactionHelper::TransactionHelper( const QDate& _date, const QString& _action, MyMoneyMoney _value, const QString& _accountid, const QString& _categoryid, const QString& _currencyid, const QString& _payee )
+{
+ // _currencyid is the currency of the transaction, and of the _value
+ // both the account and category can have their own currency (athough the category having
+ // a foreign currency is not yet supported by the program, the reports will still allow it,
+ // so it must be tested.)
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+ bool haspayee = ! _payee.isEmpty();
+ MyMoneyPayee payeeTest = file->payeeByName(_payee);
+
+ MyMoneyFileTransaction ft;
+ setPostDate(_date);
+
+ QString currencyid = _currencyid;
+ if ( currencyid.isEmpty() )
+ currencyid=MyMoneyFile::instance()->baseCurrency().id();
+ setCommodity(currencyid);
+
+ MyMoneyMoney price;
+ MyMoneySplit splitLeft;
+ if ( haspayee )
+ splitLeft.setPayeeId(payeeTest.id());
+ splitLeft.setAction(_action);
+ splitLeft.setValue(-_value);
+ price = MyMoneyFile::instance()->price(currencyid, file->account(_accountid).currencyId(),_date).rate(file->account(_accountid).currencyId());
+ splitLeft.setShares(-_value * price);
+ splitLeft.setAccountId(_accountid);
+ addSplit(splitLeft);
+
+ MyMoneySplit splitRight;
+ if ( haspayee )
+ splitRight.setPayeeId(payeeTest.id());
+ splitRight.setAction(_action);
+ splitRight.setValue(_value);
+ price = MyMoneyFile::instance()->price(currencyid, file->account(_categoryid).currencyId(),_date).rate(file->account(_categoryid).currencyId());
+ splitRight.setShares(_value * price );
+ splitRight.setAccountId(_categoryid);
+ addSplit(splitRight);
+
+ MyMoneyFile::instance()->addTransaction(*this);
+ ft.commit();
+}
+
+TransactionHelper::~TransactionHelper()
+{
+ MyMoneyFileTransaction ft;
+ MyMoneyFile::instance()->removeTransaction(*this);
+ ft.commit();
+}
+
+void TransactionHelper::update(void)
+{
+ MyMoneyFileTransaction ft;
+ MyMoneyFile::instance()->modifyTransaction(*this);
+ ft.commit();
+}
+
+InvTransactionHelper::InvTransactionHelper( const QDate& _date, const QString& _action, MyMoneyMoney _shares, MyMoneyMoney _price, const QString& _stockaccountid, const QString& _transferid, const QString& _categoryid )
+{
+ init(_date, _action, _shares, _price, _stockaccountid, _transferid, _categoryid);
+}
+
+void InvTransactionHelper::init( const QDate& _date, const QString& _action, MyMoneyMoney _shares, MyMoneyMoney _price, const QString& _stockaccountid, const QString& _transferid, const QString& _categoryid )
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyAccount stockaccount = file->account(_stockaccountid);
+ MyMoneyMoney value = _shares * _price;
+
+ setPostDate(_date);
+
+ setCommodity("USD");
+ MyMoneySplit s1;
+ s1.setValue(value);
+ s1.setAccountId(_stockaccountid);
+
+ if ( _action == MyMoneySplit::ActionReinvestDividend )
+ {
+ s1.setShares(_shares);
+ s1.setAction(MyMoneySplit::ActionReinvestDividend);
+
+ MyMoneySplit s2;
+ s2.setAccountId(_categoryid);
+ s2.setShares(-value);
+ s2.setValue(-value);
+ addSplit(s2);
+ }
+ else if ( _action == MyMoneySplit::ActionDividend || _action == MyMoneySplit::ActionYield )
+ {
+ s1.setAccountId(_categoryid);
+ s1.setShares(-value);
+ s1.setValue(-value);
+
+ // Split 2 will be the zero-amount investment split that serves to
+ // mark this transaction as a cash dividend and note which stock account
+ // it belongs to.
+ MyMoneySplit s2;
+ s2.setValue(0);
+ s2.setShares(0);
+ s2.setAction(_action);
+ s2.setAccountId(_stockaccountid);
+ addSplit(s2);
+
+ MyMoneySplit s3;
+ s3.setAccountId(_transferid);
+ s3.setShares(value);
+ s3.setValue(value);
+ addSplit(s3);
+ }
+ else if ( _action == MyMoneySplit::ActionBuyShares )
+ {
+ s1.setShares(_shares);
+ s1.setAction(MyMoneySplit::ActionBuyShares);
+
+ MyMoneySplit s3;
+ s3.setAccountId(_transferid);
+ s3.setShares(-value);
+ s3.setValue(-value);
+ addSplit(s3);
+ }
+ addSplit(s1);
+
+ //kdDebug(2) << "created transaction, now adding..." << endl;
+
+ MyMoneyFileTransaction ft;
+ file->addTransaction(*this);
+
+ //kdDebug(2) << "updating price..." << endl;
+
+ // update the price, while we're here
+ QString stockid = stockaccount.currencyId();
+ QString basecurrencyid = file->baseCurrency().id();
+ MyMoneyPrice price = file->price( stockid, basecurrencyid, _date, true );
+ if ( !price.isValid() )
+ {
+ MyMoneyPrice newprice( stockid, basecurrencyid, _date, _price, "test" );
+ file->addPrice(newprice);
+ }
+ ft.commit();
+ //kdDebug(2) << "successfully added " << id() << endl;
+}
+
+QString makeAccount( const QString& _name, MyMoneyAccount::accountTypeE _type, MyMoneyMoney _balance, const QDate& _open, const QString& _parent, QString _currency, bool _taxReport )
+{
+ MyMoneyAccount info;
+ MyMoneyFileTransaction ft;
+
+ info.setName(_name);
+ info.setAccountType(_type);
+ info.setOpeningDate(_open);
+ if ( _currency != "" )
+ info.setCurrencyId(_currency);
+ else
+ info.setCurrencyId(MyMoneyFile::instance()->baseCurrency().id());
+
+ if(_taxReport)
+ info.setValue("Tax", "Yes");
+
+ MyMoneyAccount parent = MyMoneyFile::instance()->account(_parent);
+ MyMoneyFile::instance()->addAccount( info, parent );
+ // create the opening balance transaction if any
+ if(!_balance.isZero()) {
+ MyMoneySecurity sec = MyMoneyFile::instance()->currency(info.currencyId());
+ MyMoneyFile::instance()->openingBalanceAccount(sec);
+ MyMoneyFile::instance()->createOpeningBalanceTransaction(info, _balance);
+ }
+ ft.commit();
+
+ return info.id();
+}
+
+void makePrice(const QString& _currencyid, const QDate& _date, const MyMoneyMoney& _price )
+{
+ MyMoneyFileTransaction ft;
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneySecurity curr = file->currency(_currencyid);
+ MyMoneyPrice price(_currencyid, file->baseCurrency().id(), _date, _price, "test");
+ file->addPrice(price);
+ ft.commit();
+}
+
+QString makeEquity(const QString& _name, const QString& _symbol )
+{
+ MyMoneySecurity equity;
+ MyMoneyFileTransaction ft;
+
+ equity.setName( _name );
+ equity.setTradingSymbol( _symbol );
+ equity.setSmallestAccountFraction( 1000 );
+ equity.setSecurityType( MyMoneySecurity::SECURITY_NONE /*MyMoneyEquity::ETYPE_STOCK*/ );
+ MyMoneyFile::instance()->addSecurity( equity );
+ ft.commit();
+
+ return equity.id();
+}
+
+void makeEquityPrice(const QString& _id, const QDate& _date, const MyMoneyMoney& _price )
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyFileTransaction ft;
+ QString basecurrencyid = file->baseCurrency().id();
+ MyMoneyPrice price = file->price( _id, basecurrencyid, _date, true );
+ if ( !price.isValid() )
+ {
+ MyMoneyPrice newprice( _id, basecurrencyid, _date, _price, "test" );
+ file->addPrice(newprice);
+ }
+ ft.commit();
+}
+
+void writeRCFtoXMLDoc( const MyMoneyReport& filter, QDomDocument* doc )
+{
+ QDomProcessingInstruction instruct = doc->createProcessingInstruction(QString("xml"), QString("version=\"1.0\" encoding=\"utf-8\""));
+ doc->appendChild(instruct);
+
+ QDomElement root = doc->createElement("KMYMONEY-FILE");
+ doc->appendChild(root);
+
+ QDomElement reports = doc->createElement("REPORTS");
+ root.appendChild(reports);
+
+ QDomElement report = doc->createElement("REPORT");
+ filter.write(report,doc);
+ reports.appendChild(report);
+
+}
+
+void writeTabletoHTML( const PivotTable& table, const QString& _filename )
+{
+ static unsigned filenumber = 1;
+ QString filename = _filename;
+ if ( filename.isEmpty() )
+ {
+ filename = QString("report-%1%2.html").arg((filenumber<10)?"0":"").arg(filenumber);
+ ++filenumber;
+ }
+
+ QFile g( filename );
+ g.open( IO_WriteOnly );
+ QTextStream(&g) << table.renderHTML();
+ g.close();
+
+}
+
+void writeTabletoHTML( const QueryTable& table, const QString& _filename )
+{
+ static unsigned filenumber = 1;
+ QString filename = _filename;
+ if ( filename.isEmpty() )
+ {
+ filename = QString("report-%1%2.html").arg((filenumber<10)?"0":"").arg(filenumber);
+ ++filenumber;
+ }
+
+ QFile g( filename );
+ g.open( IO_WriteOnly );
+ QTextStream(&g) << table.renderHTML();
+ g.close();
+}
+
+void writeTabletoCSV( const PivotTable& table, const QString& _filename )
+{
+ static unsigned filenumber = 1;
+ QString filename = _filename;
+ if ( filename.isEmpty() )
+ {
+ filename = QString("report-%1%2.csv").arg((filenumber<10)?"0":"").arg(filenumber);
+ ++filenumber;
+ }
+
+ QFile g( filename );
+ g.open( IO_WriteOnly );
+ QTextStream(&g) << table.renderCSV();
+ g.close();
+
+}
+
+void writeTabletoCSV( const QueryTable& table, const QString& _filename )
+{
+ static unsigned filenumber = 1;
+ QString filename = _filename;
+ if ( filename.isEmpty() )
+ {
+ filename = QString("qreport-%1%2.csv").arg((filenumber<10)?"0":"").arg(filenumber);
+ ++filenumber;
+ }
+
+ QFile g( filename );
+ g.open( IO_WriteOnly );
+ QTextStream(&g) << table.renderCSV();
+ g.close();
+
+}
+
+void writeRCFtoXML( const MyMoneyReport& filter, const QString& _filename )
+{
+ static unsigned filenum = 1;
+ QString filename = _filename;
+ if ( filename.isEmpty() ) {
+ filename = QString("report-%1%2.xml").arg(QString::number(filenum).rightJustify(2, '0'));
+ ++filenum;
+ }
+
+ QDomDocument* doc = new QDomDocument("KMYMONEY-FILE");
+ Q_CHECK_PTR(doc);
+
+ writeRCFtoXMLDoc(filter,doc);
+
+ QFile g( filename );
+ g.open( IO_WriteOnly );
+
+ QTextStream stream(&g);
+#if KDE_IS_VERSION(3,2,0)
+ stream.setEncoding(QTextStream::UnicodeUTF8);
+ stream << doc->toString();
+#else
+ //stream.setEncoding(QTextStream::Locale);
+ QString temp = doc->toString();
+ stream << temp.data();
+#endif
+ g.close();
+
+ delete doc;
+}
+
+bool readRCFfromXMLDoc( QValueList<MyMoneyReport>& list, QDomDocument* doc )
+{
+ bool result = false;
+
+ QDomElement rootElement = doc->documentElement();
+ if(!rootElement.isNull())
+ {
+ QDomNode child = rootElement.firstChild();
+ while(!child.isNull() && child.isElement())
+ {
+ QDomElement childElement = child.toElement();
+ if("REPORTS" == childElement.tagName())
+ {
+ result = true;
+ QDomNode subchild = child.firstChild();
+ while(!subchild.isNull() && subchild.isElement())
+ {
+ MyMoneyReport filter;
+ if ( filter.read(subchild.toElement()))
+ {
+ list += filter;
+ }
+ subchild = subchild.nextSibling();
+ }
+ }
+ child = child.nextSibling();
+ }
+ }
+ return result;
+}
+
+bool readRCFfromXML( QValueList<MyMoneyReport>& list, const QString& filename )
+{
+ int result = false;
+ QFile f( filename );
+ f.open( IO_ReadOnly );
+ QDomDocument* doc = new QDomDocument;
+ if(doc->setContent(&f, FALSE))
+ {
+ result = readRCFfromXMLDoc(list,doc);
+ }
+ delete doc;
+
+ return result;
+
+}
+
+void XMLandback( MyMoneyReport& filter )
+{
+ // this function writes the filter to XML, and then reads
+ // it back from XML overwriting the original filter;
+ // in all cases, the result should be the same if the read
+ // & write methods are working correctly.
+
+ QDomDocument* doc = new QDomDocument("KMYMONEY-FILE");
+ Q_CHECK_PTR(doc);
+
+ writeRCFtoXMLDoc(filter,doc);
+ QValueList<MyMoneyReport> list;
+ if ( readRCFfromXMLDoc(list,doc) && list.count() > 0 )
+ filter = list[0];
+ else
+ throw new MYMONEYEXCEPTION("Failed to load report from XML");
+
+ delete doc;
+
+}
+
+MyMoneyMoney searchHTML(const QString& _html, const QString& _search)
+{
+ QRegExp re(QString("%1[<>/td]*([\\-.0-9,]*)").arg(_search));
+ re.search(_html);
+ QString found = re.cap(1);
+ found.remove(',');
+
+ return MyMoneyMoney(found.toDouble());
+}
+
+} // end namespace test
+
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/reports/reportstestcommon.h b/kmymoney2/reports/reportstestcommon.h
new file mode 100644
index 0000000..6f4826e
--- /dev/null
+++ b/kmymoney2/reports/reportstestcommon.h
@@ -0,0 +1,133 @@
+/***************************************************************************
+ reportstestcommon.h
+ -------------------
+ copyright : (C) 2002-2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ Ace Jones <ace.j@hotpop.com>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef REPORTSTESTCOMMON_H
+#define REPORTSTESTCOMMON_H
+
+#include <qvaluelist.h>
+class QDomDocument;
+
+#include "../mymoney/mymoneyaccount.h"
+#include "../mymoney/mymoneytransaction.h"
+#include "../mymoney/mymoneymoney.h"
+class MyMoneyReport;
+
+namespace reports {
+class PivotTable;
+class QueryTable;
+}
+
+namespace test {
+
+extern const MyMoneyMoney moCheckingOpen;
+extern const MyMoneyMoney moCreditOpen;
+extern const MyMoneyMoney moConverterCheckingOpen;
+extern const MyMoneyMoney moConverterCreditOpen;
+extern const MyMoneyMoney moZero;
+extern const MyMoneyMoney moSolo;
+extern const MyMoneyMoney moParent1;
+extern const MyMoneyMoney moParent2;
+extern const MyMoneyMoney moParent;
+extern const MyMoneyMoney moChild;
+extern const MyMoneyMoney moThomas;
+extern const MyMoneyMoney moNoPayee;
+
+extern QString acAsset;
+extern QString acLiability;
+extern QString acExpense;
+extern QString acIncome;
+extern QString acChecking;
+extern QString acCredit;
+extern QString acSolo;
+extern QString acParent;
+extern QString acChild;
+extern QString acSecondChild;
+extern QString acGrandChild1;
+extern QString acGrandChild2;
+extern QString acForeign;
+extern QString acCanChecking;
+extern QString acJpyChecking;
+extern QString acCanCash;
+extern QString acJpyCash;
+extern QString inBank;
+extern QString eqStock1;
+extern QString eqStock2;
+extern QString acInvestment;
+extern QString acStock1;
+extern QString acStock2;
+extern QString acDividends;
+extern QString acInterest;
+extern QString acTax;
+extern QString acCash;
+
+class TransactionHelper: public MyMoneyTransaction
+{
+private:
+ QString m_id;
+public:
+ TransactionHelper( const QDate& _date, const QString& _action, MyMoneyMoney _value, const QString& _accountid, const QString& _categoryid, const QString& _currencyid = QString(), const QString& _payee="Test Payee" );
+ ~TransactionHelper();
+ void update(void);
+protected:
+ TransactionHelper(void) {}
+};
+
+class InvTransactionHelper: public TransactionHelper
+{
+public:
+ InvTransactionHelper( const QDate& _date, const QString& _action, MyMoneyMoney _shares, MyMoneyMoney _value, const QString& _stockaccountid, const QString& _transferid, const QString& _categoryid );
+ void init( const QDate& _date, const QString& _action, MyMoneyMoney _shares, MyMoneyMoney _value, const QString& _stockaccountid, const QString& _transferid, const QString& _categoryid );
+};
+
+class BudgetEntryHelper
+{
+private:
+ QDate m_date;
+ QString m_categoryid;
+ bool m_applytosub;
+ MyMoneyMoney m_amount;
+
+public:
+ BudgetEntryHelper( void ): m_applytosub(false) {}
+ BudgetEntryHelper( const QDate& _date, const QString& _categoryid, bool _applytosub, const MyMoneyMoney& _amount ): m_date(_date), m_categoryid(_categoryid), m_applytosub(_applytosub), m_amount(_amount) {}
+};
+
+class BudgetHelper: public QValueList<BudgetEntryHelper>
+{
+ MyMoneyMoney budgetAmount( const QDate& _date, const QString& _categoryid, bool& _applytosub );
+};
+
+extern QString makeAccount( const QString& _name, MyMoneyAccount::accountTypeE _type, MyMoneyMoney _balance, const QDate& _open, const QString& _parent, QString _currency="", bool _taxReport = false );
+extern void makePrice(const QString& _currencyid, const QDate& _date, const MyMoneyMoney& _price );
+QString makeEquity(const QString& _name, const QString& _symbol );
+extern void makeEquityPrice(const QString& _id, const QDate& _date, const MyMoneyMoney& _price );
+extern void writeRCFtoXMLDoc( const MyMoneyReport& filter, QDomDocument* doc );
+extern void writeTabletoHTML( const reports::PivotTable& table, const QString& _filename = QString() );
+extern void writeTabletoHTML( const reports::QueryTable& table, const QString& _filename = QString() );
+extern void writeTabletoCSV( const reports::PivotTable& table, const QString& _filename = QString() );
+extern void writeTabletoCSV( const reports::QueryTable& table, const QString& _filename = QString() );
+extern void writeRCFtoXML( const MyMoneyReport& filter, const QString& _filename = QString() );
+extern bool readRCFfromXMLDoc( QValueList<MyMoneyReport>& list, QDomDocument* doc );
+extern bool readRCFfromXML( QValueList<MyMoneyReport>& list, const QString& filename );
+extern void XMLandback( MyMoneyReport& filter );
+extern MyMoneyMoney searchHTML(const QString& _html, const QString& _search);
+
+} // end namespace test
+
+#endif // REPORTSTESTCOMMON_H
+
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/reports/reporttable.h b/kmymoney2/reports/reporttable.h
new file mode 100644
index 0000000..3bab330
--- /dev/null
+++ b/kmymoney2/reports/reporttable.h
@@ -0,0 +1,54 @@
+/***************************************************************************
+ reporttable.h
+ -------------------
+ begin : Mon May 7 2007
+ copyright : (C) 2007 Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef REPORTTABLE_H
+#define REPORTTABLE_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+
+namespace reports {
+
+class KReportChartView;
+
+/**
+ * This class serves as interface definition for both a pivottable
+ * and a querytable object
+ */
+class ReportTable
+{
+protected:
+ ReportTable() {}
+public:
+ virtual ~ReportTable() {}
+ virtual QString renderHTML(void) const = 0;
+ virtual QString renderCSV(void) const = 0;
+ virtual void drawChart(KReportChartView& view) const = 0;
+ virtual void dump(const QString& file, const QString& context=QString()) const = 0;
+};
+
+}
+#endif
+// REPORTTABLE_H
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/templates/C/Makefile.am b/kmymoney2/templates/C/Makefile.am
new file mode 100644
index 0000000..3d9f42b
--- /dev/null
+++ b/kmymoney2/templates/C/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/C
+
+template_DATA = homeown.kmt full.kmt fixedassets.kmt retiremt.kmt eduloan.kmt homeloan.kmt renter.kmt common.kmt spouseretire.kmt old-default_accounts.kmt brokerage.kmt childcare.kmt cdmoneymkt.kmt checkbook.kmt carloan.kmt otherloan.kmt business.kmt spouseinc.kmt default_categories-template.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/C/brokerage.kmt b/kmymoney2/templates/C/brokerage.kmt
new file mode 100644
index 0000000..40dc265
--- /dev/null
+++ b/kmymoney2/templates/C/brokerage.kmt
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/C/acctchrt_brokerage.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Investment Accounts</title>
+ <shortdesc>Brokerage account with related investment accounts (stock, bond, mutual fund, index fund, interest, dividend)</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have investments (stock, bond, mutual fund, index fund, interest, dividend).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Commissions"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Dividend Income"/>
+ <account type="12" name="Interest Income">
+ <account type="12" name="Bond Interest"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Investments">
+ <account type="7" name="Brokerage Account"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/C/business.kmt b/kmymoney2/templates/C/business.kmt
new file mode 100644
index 0000000..387de38
--- /dev/null
+++ b/kmymoney2/templates/C/business.kmt
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/C/acctchrt_business.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Business Accounts</title>
+ <shortdesc>Full chart of accounts for a business.</shortdesc>
+ <longdesc>Users running a business want to select this instead of other choices. This includes all the accounts you need to run a most businesses, including Payables, Receivables, Income, and Expenses.</longdesc>
+ <accounts>
+ <account type="10" name="">
+ <account type="4" name="Credit Card"/>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="Retained Earnings"/>
+ <account type="16" name="Opening Balances"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Equipment Rental"/>
+ <account type="13" name="Miscellaneous"/>
+ <account type="13" name="Repairs">
+ <account type="13" name="Equipment Repairs"/>
+ <account type="13" name="Building Repairs"/>
+ <account type="13" name="Computer Repairs"/>
+ <account type="13" name="Janitorial Expenses"/>
+ </account>
+ <account type="13" name="Postage and Delivery"/>
+ <account type="13" name="Education"/>
+ <account type="13" name="Depreciation"/>
+ <account type="13" name="Office Supplies"/>
+ <account type="13" name="Professional Fees">
+ <account type="13" name="Legal Fees"/>
+ <account type="13" name="Accounting"/>
+ </account>
+ <account type="13" name="Printing and Reproduction"/>
+ <account type="13" name="Dining"/>
+ <account type="13" name="Dues and Subscriptions"/>
+ <account type="13" name="Licenses and Permits"/>
+ <account type="13" name="Cash Discounts"/>
+ <account type="13" name="Payroll Expenses"/>
+ <account type="13" name="Outside Services"/>
+ <account type="13" name="Adjustment"/>
+ <account type="13" name="Travel and Entertainment">
+ <account type="13" name="Meals"/>
+ <account type="13" name="Travel"/>
+ <account type="13" name="Entertainment"/>
+ </account>
+ <account type="13" name="Charity"/>
+ <account type="13" name="Auto">
+ <account type="13" name="Repair and Maintenance"/>
+ <account type="13" name="Gas"/>
+ <account type="13" name="Parking"/>
+ <account type="13" name="Fees"/>
+ </account>
+ <account type="13" name="Rent"/>
+ <account type="13" name="Utilities">
+ <account type="13" name="Gas"/>
+ <account type="13" name="Garbage collection"/>
+ <account type="13" name="Internet"/>
+ <account type="13" name="Cell Phone"/>
+ <account type="13" name="Cable"/>
+ <account type="13" name="Electric"/>
+ <account type="13" name="Water"/>
+ <account type="13" name="Phone"/>
+ </account>
+ <account type="13" name="Insurance">
+ <account type="13" name="Disability Insurance"/>
+ <account type="13" name="Workers Comp"/>
+ <account type="13" name="Liability Insurance"/>
+ </account>
+ <account type="13" name="Bank Service Charge"/>
+ <account type="13" name="Taxes">
+ <account type="13" name="Federal"/>
+ <account type="13" name="FICA"/>
+ <account type="13" name="Property"/>
+ <account type="13" name="Local"/>
+ <account type="13" name="Emp-FICA"/>
+ <account type="13" name="Other Tax"/>
+ <account type="13" name="State/Province"/>
+ <account type="13" name="FUTA"/>
+ </account>
+ <account type="13" name="Books"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Interest Income"/>
+ <account type="12" name="Sales"/>
+ <account type="12" name="Other Income"/>
+ <account type="12" name="Reimbursed Expenses"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Current Assets">
+ <account type="1" name="Savings Account"/>
+ <account type="3" name="Petty Cash"/>
+ <account type="1" name="Checking Account"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/C/carloan.kmt b/kmymoney2/templates/C/carloan.kmt
new file mode 100644
index 0000000..d9f1ea0
--- /dev/null
+++ b/kmymoney2/templates/C/carloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/C/acctchrt_carloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Car Loan</title>
+ <shortdesc>Accounts for car loan and associated interest</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have a car loan (car loan, car loan interest).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Interest">
+ <account type="13" name="Vehicle Loan Interest"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Loans">
+ <account type="10" name="Vehicle Loan"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/C/cdmoneymkt.kmt b/kmymoney2/templates/C/cdmoneymkt.kmt
new file mode 100644
index 0000000..2987894
--- /dev/null
+++ b/kmymoney2/templates/C/cdmoneymkt.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/C/acctchrt_cdmoneymkt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>CD and Money Market</title>
+ <shortdesc>Accounts for CD and money market investments</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have CDs or money market accounts (CD, CD interest, money market, money market interest).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Interest Income">
+ <account type="12" name="CD Interest"/>
+ <account type="12" name="Money Market Interest"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Current Assets">
+ <account type="1" name="Money Market"/>
+ <account type="1" name="Bank CD"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/C/checkbook.kmt b/kmymoney2/templates/C/checkbook.kmt
new file mode 100644
index 0000000..c22a353
--- /dev/null
+++ b/kmymoney2/templates/C/checkbook.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/C/acctchrt_checkbook.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>A Simple Checkbook</title>
+ <shortdesc>The minimal set of accounts to use GnuCash.</shortdesc>
+ <longdesc>Use this if you just want to balance your checkbook. Later on, you can start tracking income and expenses in more detail if you feel the need.</longdesc>
+ <accounts>
+ <account type="13" name=""/>
+ <account type="12" name=""/>
+ <account type="16" name="">
+ <account type="16" name="Opening Balances"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Current Assets">
+ <account type="1" name="Checking Account"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/C/childcare.kmt b/kmymoney2/templates/C/childcare.kmt
new file mode 100644
index 0000000..f7df804
--- /dev/null
+++ b/kmymoney2/templates/C/childcare.kmt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/C/acctchrt_childcare.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Childcare Expenses</title>
+ <shortdesc>An account for tracking childcare costs</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have childcare expenses.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Childcare"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/C/common.kmt b/kmymoney2/templates/C/common.kmt
new file mode 100644
index 0000000..ead6d29
--- /dev/null
+++ b/kmymoney2/templates/C/common.kmt
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/C/acctchrt_common.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Common Accounts</title>
+ <shortdesc>A basic set of accounts most commonly used</shortdesc>
+ <longdesc>Most users will want to select this set of accounts. It includes most commonly used accounts (checking, savings, cash, credit card, income, common expenses).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Bonus"/>
+ <account type="12" name="Other Income"/>
+ <account type="12" name="Gifts Received"/>
+ <account type="12" name="Salary"/>
+ <account type="12" name="Interest Income">
+ <account type="12" name="Other Interest"/>
+ <account type="12" name="Savings Interest"/>
+ <account type="12" name="Checking Interest"/>
+ </account>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="Opening Balances"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Current Assets">
+ <account type="1" name="Checking Account"/>
+ <account type="3" name="Cash in Wallet"/>
+ <account type="1" name="Savings Account"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Entertainment">
+ <account type="13" name="Music/Movies"/>
+ <account type="13" name="Travel"/>
+ <account type="13" name="Recreation"/>
+ </account>
+ <account type="13" name="Books"/>
+ <account type="13" name="Dining"/>
+ <account type="13" name="Gifts"/>
+ <account type="13" name="Medical Expenses"/>
+ <account type="13" name="Charity"/>
+ <account type="13" name="Public Transportation"/>
+ <account type="13" name="Auto">
+ <account type="13" name="Gas"/>
+ <account type="13" name="Parking"/>
+ <account type="13" name="Repair and Maintenance"/>
+ <account type="13" name="Fees"/>
+ </account>
+ <account type="13" name="Bank Service Charge"/>
+ <account type="13" name="Education"/>
+ <account type="13" name="Utilities">
+ <account type="13" name="Water"/>
+ <account type="13" name="Gas"/>
+ <account type="13" name="Garbage collection"/>
+ <account type="13" name="Electric"/>
+ </account>
+ <account type="13" name="Supplies"/>
+ <account type="13" name="Clothes"/>
+ <account type="13" name="Subscriptions"/>
+ <account type="13" name="Phone"/>
+ <account type="13" name="Insurance">
+ <account type="13" name="Auto Insurance"/>
+ <account type="13" name="Life Insurance"/>
+ <account type="13" name="Health Insurance"/>
+ </account>
+ <account type="13" name="Online Services"/>
+ <account type="13" name="Adjustment"/>
+ <account type="13" name="Taxes">
+ <account type="13" name="Social Security"/>
+ <account type="13" name="State/Province"/>
+ <account type="13" name="Federal"/>
+ <account type="13" name="Medicare"/>
+ <account type="13" name="Other Tax"/>
+ </account>
+ <account type="13" name="Computer"/>
+ <account type="13" name="Laundry/Dry Cleaning"/>
+ <account type="13" name="Miscellaneous"/>
+ <account type="13" name="Groceries"/>
+ <account type="13" name="Cable"/>
+ <account type="13" name="Hobbies"/>
+ </account>
+ <account type="10" name="">
+ <account type="4" name="Credit Card"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/C/default_categories-template.kmt b/kmymoney2/templates/C/default_categories-template.kmt
new file mode 100644
index 0000000..03a13df
--- /dev/null
+++ b/kmymoney2/templates/C/default_categories-template.kmt
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>KMyMoney 0.8 default</title>
+ <shortdesc/>
+ <longdesc/>
+ <accounts>
+ <account type="12" name="" >
+ <account type="12" name="Employment" >
+ <account type="12" name="Benefits" />
+ <account type="12" name="Bonus" />
+ <account type="12" name="Other employment income" />
+ <account type="12" name="Pension" />
+ <account type="12" name="Wages &amp; Salary" />
+ </account>
+ <account type="12" name="Investment Income" >
+ <account type="12" name="Short-Term Capital Gains" />
+ <account type="12" name="Long-Term Capital Gains" />
+ <account type="12" name="Dividends" />
+ <account type="12" name="Interest" />
+ <account type="12" name="Tax-Exempt Interest" />
+ </account>
+ <account type="12" name="Banking" >
+ <account type="12" name="Interest Earned" />
+ <account type="12" name="Loan Principal Received" />
+ </account>
+ <account type="12" name="Other Income" >
+ <account type="12" name="Alimony" />
+ <account type="12" name="Child Support" />
+ <account type="12" name="Disability" />
+ <account type="12" name="Gifts Received" />
+ <account type="12" name="Lottery or Premium Bond Prizes" />
+ <account type="12" name="Tax Refund" />
+ <account type="12" name="Unemployment Benefit" />
+ </account>
+ <account type="12" name="Retirement Income" />
+ </account>
+ <account type="13" name="" >
+ <account type="13" name="Bills &amp; monthly payments" >
+ <account type="13" name="Utilities" >
+ <account type="13" name="Electricity" />
+ <account type="13" name="Fuel Oil" />
+ <account type="13" name="Natural Gas" />
+ <account type="13" name="Water &amp; Sewage" />
+ <account type="13" name="Garbage &amp; Recycling" />
+ </account>
+ <account type="13" name="Telephone" >
+ <account type="13" name="Local" />
+ <account type="13" name="Long Distance" />
+ <account type="13" name="Wireless" />
+ </account>
+ <account type="13" name="Rent" />
+ <account type="13" name="Mortgage" >
+ <account type="13" name="Interest" />
+ <account type="13" name="Principal" />
+ </account>
+ <account type="13" name="Cable / Satelite TV" />
+ <account type="13" name="Internet" />
+ </account>
+ <account type="13" name="Bank Charges" >
+ <account type="13" name="Interest Paid" />
+ <account type="13" name="Service Charges" />
+ <account type="13" name="Insufficient Funds fee" />
+ </account>
+ <account type="13" name="Cash Withdrawal" />
+ <account type="13" name="Child Care/Sitters" />
+ <account type="13" name="Clothing" />
+ <account type="13" name="Education" >
+ <account type="13" name="Books" />
+ <account type="13" name="Fees" />
+ <account type="13" name="Tuition" />
+ <account type="13" name="Loans" />
+ </account>
+ <account type="13" name="Food" >
+ <account type="13" name="Dining Out" />
+ <account type="13" name="Groceries" />
+ </account>
+ <account type="13" name="Home Maintainance" >
+ <account type="13" name="Repairs" />
+ <account type="13" name="Improvements" />
+ <account type="13" name="Yard &amp; Garden" />
+ </account>
+ <account type="13" name="Home Furnishing" >
+ <account type="13" name="Furniture" />
+ <account type="13" name="Decorating" />
+ </account>
+ <account type="13" name="Gifts" />
+ <account type="13" name="Healthcare" >
+ <account type="13" name="Dental" />
+ <account type="13" name="Doctor" />
+ <account type="13" name="Hospital" />
+ <account type="13" name="Prescriptions" />
+ <account type="13" name="Chiropractic" />
+ <account type="13" name="Other" />
+ </account>
+ <account type="13" name="Personal Care" />
+ <account type="13" name="Vacation &amp; Holiday" >
+ <account type="13" name="Accomodations" />
+ <account type="13" name="Travel" />
+ <account type="13" name="Other" />
+ <account type="13" name="Meals" />
+ </account>
+ <account type="13" name="Insurance" >
+ <account type="13" name="Home and Contents" />
+ <account type="13" name="Life" />
+ <account type="13" name="Medical" />
+ <account type="13" name="Auto" />
+ <account type="13" name="Disability" />
+ </account>
+ <account type="13" name="Job Expense" >
+ <account type="13" name="Non-Reimbursed" />
+ <account type="13" name="Reimbursed" />
+ </account>
+ <account type="13" name="Recreation &amp; Leisure" >
+ <account type="13" name="Entertainment" />
+ <account type="13" name="Hobbies" />
+ <account type="13" name="Sports" />
+ </account>
+ <account type="13" name="Legal Fees" />
+ <account type="13" name="Other Misc. Expenses" />
+ <account type="13" name="Pet Care" >
+ <account type="13" name="Food" />
+ <account type="13" name="Supplies" />
+ <account type="13" name="Vet's Bills" />
+ </account>
+ <account type="13" name="Retirement Accounts" />
+ <account type="13" name="Taxes" />
+ <account type="13" name="Transportation" >
+ <account type="13" name="Car / Auto" >
+ <account type="13" name="Fuel" />
+ <account type="13" name="Service" />
+ <account type="13" name="Insurance" />
+ <account type="13" name="Lease" />
+ <account type="13" name="Loan" />
+ <account type="13" name="Registration" />
+ </account>
+ <account type="13" name="Public Transportation" />
+ </account>
+ <account type="13" name="Household" />
+ <account type="13" name="Charity" />
+ <account type="13" name="Accountant &amp; Tax Preparation" />
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/C/eduloan.kmt b/kmymoney2/templates/C/eduloan.kmt
new file mode 100644
index 0000000..a9afd5f
--- /dev/null
+++ b/kmymoney2/templates/C/eduloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/C/acctchrt_eduloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Education Loan</title>
+ <shortdesc>Accounts for school loan and associated interest</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have an educational loan (education loan, education loan interest).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Interest">
+ <account type="13" name="Education Loan Interest"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Loans">
+ <account type="10" name="Education Loan"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/C/fixedassets.kmt b/kmymoney2/templates/C/fixedassets.kmt
new file mode 100644
index 0000000..598d392
--- /dev/null
+++ b/kmymoney2/templates/C/fixedassets.kmt
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/C/acctchrt_fixedassets.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Fixed Assets</title>
+ <shortdesc>Accounts for tracking large fixed assets</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have large fixed assets (house, vehicle, vacation home, other assets).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Fixed Assets">
+ <account type="9" name="Vehicle"/>
+ <account type="9" name="Other Asset"/>
+ <account type="9" name="House"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/C/full.kmt b/kmymoney2/templates/C/full.kmt
new file mode 100644
index 0000000..3d00bb4
--- /dev/null
+++ b/kmymoney2/templates/C/full.kmt
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/C/acctchrt_full.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Full Chart</title>
+ <shortdesc>Full chart of accounts contains all default accounts.</shortdesc>
+ <longdesc></longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Interest Income">
+ <account type="12" name="Savings Interest"/>
+ <account type="12" name="Money Market Interest"/>
+ <account type="12" name="Checking Interest"/>
+ <account type="12" name="CD Interest"/>
+ <account type="12" name="Other Interest"/>
+ <account type="12" name="Bond Interest"/>
+ </account>
+ <account type="12" name="Other Income"/>
+ <account type="12" name="Gifts Received"/>
+ <account type="12" name="Dividend Income"/>
+ <account type="12" name="Salary (Spouse)"/>
+ <account type="12" name="Salary"/>
+ <account type="12" name="Bonus"/>
+ </account>
+ <account type="10" name="">
+ <account type="4" name="Line of Credit"/>
+ <account type="10" name="Loans">
+ <account type="10" name="Vehicle Loan"/>
+ <account type="10" name="Mortgage Loan"/>
+ <account type="10" name="Other Loan"/>
+ <account type="10" name="Education Loan"/>
+ </account>
+ <account type="4" name="Credit Card"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Commissions"/>
+ <account type="13" name="Clothes"/>
+ <account type="13" name="Adjustment"/>
+ <account type="13" name="Education"/>
+ <account type="13" name="Dining"/>
+ <account type="13" name="Supplies"/>
+ <account type="13" name="Auto">
+ <account type="13" name="Repair and Maintenance"/>
+ <account type="13" name="Parking"/>
+ <account type="13" name="Gas"/>
+ <account type="13" name="Fees"/>
+ </account>
+ <account type="13" name="Entertainment">
+ <account type="13" name="Music/Movies"/>
+ <account type="13" name="Recreation"/>
+ <account type="13" name="Travel"/>
+ </account>
+ <account type="13" name="Cable"/>
+ <account type="13" name="Computer"/>
+ <account type="13" name="Childcare"/>
+ <account type="13" name="Laundry/Dry Cleaning"/>
+ <account type="13" name="Bank Service Charge"/>
+ <account type="13" name="Taxes">
+ <account type="13" name="State/Province"/>
+ <account type="13" name="Property Tax"/>
+ <account type="13" name="Other Tax"/>
+ <account type="13" name="Social Security"/>
+ <account type="13" name="Federal"/>
+ <account type="13" name="Medicare"/>
+ </account>
+ <account type="13" name="Insurance">
+ <account type="13" name="Home Insurance"/>
+ <account type="13" name="Life Insurance"/>
+ <account type="13" name="Auto Insurance"/>
+ <account type="13" name="Health Insurance"/>
+ <account type="13" name="Rental Insurance"/>
+ </account>
+ <account type="13" name="Charity"/>
+ <account type="13" name="Home Repair"/>
+ <account type="13" name="Groceries"/>
+ <account type="13" name="Online Services"/>
+ <account type="13" name="Rent"/>
+ <account type="13" name="Taxes (Spouse)">
+ <account type="13" name="Social Security"/>
+ <account type="13" name="Other Tax"/>
+ <account type="13" name="State/Province"/>
+ <account type="13" name="Medicare"/>
+ <account type="13" name="Federal"/>
+ </account>
+ <account type="13" name="Interest">
+ <account type="13" name="Mortgage Interest"/>
+ <account type="13" name="Other Interest"/>
+ <account type="13" name="Education Loan Interest"/>
+ <account type="13" name="Vehicle Loan Interest"/>
+ </account>
+ <account type="13" name="Miscellaneous"/>
+ <account type="13" name="Subscriptions"/>
+ <account type="13" name="Public Transportation"/>
+ <account type="13" name="Medical Expenses"/>
+ <account type="13" name="Hobbies"/>
+ <account type="13" name="Gifts"/>
+ <account type="13" name="Books"/>
+ <account type="13" name="Utilities">
+ <account type="13" name="Water"/>
+ <account type="13" name="Gas"/>
+ <account type="13" name="Garbage collection"/>
+ <account type="13" name="Electric"/>
+ </account>
+ <account type="13" name="Phone"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Fixed Assets">
+ <account type="9" name="House"/>
+ <account type="9" name="Other Asset"/>
+ <account type="9" name="Vehicle"/>
+ </account>
+ <account type="9" name="Current Assets">
+ <account type="1" name="Bank CD"/>
+ <account type="1" name="Money Market"/>
+ <account type="3" name="Cash in Wallet"/>
+ <account type="1" name="Savings Account"/>
+ <account type="1" name="Checking Account"/>
+ </account>
+ <account type="9" name="Investments">
+ <account type="7" name="Retirement"/>
+ <account type="7" name="Brokerage Account"/>
+ <account type="7" name="Spouse Retirement"/>
+ </account>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="Opening Balances"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/C/homeloan.kmt b/kmymoney2/templates/C/homeloan.kmt
new file mode 100644
index 0000000..bd0a7c4
--- /dev/null
+++ b/kmymoney2/templates/C/homeloan.kmt
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/C/acctchrt_homeloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Home Mortgage Loan</title>
+ <shortdesc>Accounts for home loan and associated interest</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have a home loan (mortgage loan, mortgage interest).</longdesc>
+ <accounts>
+ <account type="10" name="">
+ <account type="10" name="Mortgage Loan"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Interest">
+ <account type="13" name="Mortgage Interest"/>
+ </account>
+ </account>
+ <account type="10" name=""/>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/C/homeown.kmt b/kmymoney2/templates/C/homeown.kmt
new file mode 100644
index 0000000..d483238
--- /dev/null
+++ b/kmymoney2/templates/C/homeown.kmt
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/C/acctchrt_homeown.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Homeowner Expenses</title>
+ <shortdesc>Expenses associated with owning a home</shortdesc>
+ <longdesc>You would want to select this set of accounts if you own a home. This set provides a group of accounts to track home expenses (insurance, taxes, home repair).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Insurance">
+ <account type="13" name="Home Insurance"/>
+ </account>
+ <account type="13" name="Taxes">
+ <account type="13" name="Property Tax"/>
+ </account>
+ <account type="13" name="Home Repair"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/C/old-default_accounts.kmt b/kmymoney2/templates/C/old-default_accounts.kmt
new file mode 100644
index 0000000..7ccb476
--- /dev/null
+++ b/kmymoney2/templates/C/old-default_accounts.kmt
@@ -0,0 +1,198 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title></title>
+ <shortdesc></shortdesc>
+ <longdesc></longdesc>
+ <accounts>
+ <account name="" type="13">
+ <account name="Bills" type="13">
+ <account name="Telephone" type="13"/>
+ <account name="Rent" type="13"/>
+ <account name="Electricity" type="13"/>
+ <account name="TV" type="13"/>
+ <account name="SKY" type="13"/>
+ <account name="Council Tax" type="13"/>
+ <account name="Fuel Oil" type="13"/>
+ <account name="Gas" type="13"/>
+ <account name="Mortgage Interest" type="13"/>
+ <account name="Water &amp; Sewage" type="13"/>
+ </account>
+ <account name="Bank Charges" type="13">
+ <account name="Interest Paid" type="13"/>
+ <account name="Service Charge" type="13"/>
+ </account>
+ <account name="Car" type="13">
+ <account name="Car Maintenance" type="13"/>
+ <account name="Petrol" type="13"/>
+ </account>
+ <account name="Cash Withdrawal" type="13"/>
+ <account name="Charity" type="13">
+ <account name="Covenants" type="13"/>
+ <account name="Donations" type="13"/>
+ <account name="Settlements" type="13"/>
+ </account>
+ <account name="Child Care" type="13"/>
+ <account name="Christmas" type="13"/>
+ <account name="Clothing" type="13"/>
+ <account name="Education" type="13">
+ <account name="Books" type="13"/>
+ <account name="Fees" type="13"/>
+ <account name="Tuition" type="13"/>
+ </account>
+ <account name="Food" type="13">
+ <account name="Dining Out" type="13"/>
+ <account name="Groceries" type="13"/>
+ </account>
+ <account name="Gardening" type="13"/>
+ <account name="Healthcare" type="13">
+ <account name="Dental" type="13"/>
+ <account name="Doctor" type="13"/>
+ <account name="Hospital" type="13"/>
+ <account name="Optician" type="13"/>
+ <account name="Prescriptions" type="13"/>
+ </account>
+ <account name="Holidays" type="13">
+ <account name="Accomodation" type="13"/>
+ <account name="Travel" type="13"/>
+ </account>
+ <account name="Household" type="13">
+ <account name="Furnishings" type="13"/>
+ </account>
+ <account name="Insurance" type="13">
+ <account name="Home and Contents" type="13"/>
+ <account name="Life" type="13"/>
+ <account name="Medical" type="13"/>
+ <account name="Motor" type="13"/>
+ </account>
+ <account name="Job Expense" type="13">
+ <account name="Non-Reimbursed" type="13"/>
+ <account name="Reimbursed" type="13"/>
+ </account>
+ <account name="Leisure" type="13">
+ <account name="Books &amp; Magazines" type="13"/>
+ <account name="Entertaining" type="13"/>
+ <account name="Films &amp; Video Rentals" type="13"/>
+ <account name="Sporting Events" type="13"/>
+ <account name="Sports Goods" type="13"/>
+ <account name="Tapes &amp; CDs" type="13"/>
+ <account name="Theatre &amp; Concerts etc" type="13"/>
+ <account name="Toys &amp; Games" type="13"/>
+ </account>
+ <account name="Loan" type="13">
+ <account name="Loan Interest" type="13"/>
+ </account>
+ <account name="Motor" type="13">
+ <account name="Fuel" type="13"/>
+ <account name="Loan" type="13"/>
+ <account name="Service" type="13"/>
+ </account>
+ <account name="Other Expense" type="13">
+ <account name="Unknown" type="13"/>
+ </account>
+ <account name="Pet Care" type="13">
+ <account name="Food" type="13"/>
+ <account name="Supplies" type="13"/>
+ <account name="Vet's Bills" type="13"/>
+ </account>
+ <account name="Recreation" type="13"/>
+ <account name="Taxes" type="13">
+ <account name="1st option" type="13"/>
+ <account name="Foreign savings" type="13"/>
+ <account name="Income Tax" type="13"/>
+ <account name="Interest" type="13"/>
+ <account name="Local Tax" type="13"/>
+ <account name="Nat Ins" type="13"/>
+ <account name="Other Invest" type="13"/>
+ <account name="Other Tax" type="13"/>
+ <account name="Unit trust" type="13"/>
+ </account>
+ <account name="Utilities" type="13">
+ <account name="Electricity" type="13"/>
+ <account name="Gas" type="13"/>
+ <account name="Telephone" type="13"/>
+ <account name="Water" type="13"/>
+ </account>
+ </account>
+ <account name="" type="12">
+ <account name="Alimony" type="12"/>
+ <account name="Bonus" type="12"/>
+ <account name="Capital gains" type="12"/>
+ <account name="Child Benefit" type="12"/>
+ <account name="Div Income" type="12">
+ <account name="Ord dividend" type="12"/>
+ <account name="Stock dividend" type="12"/>
+ </account>
+ <account name="Employment" type="12">
+ <account name="Benefits" type="12"/>
+ <account name="Foreign" type="12"/>
+ <account name="Lump sums" type="12"/>
+ <account name="Other employ" type="12"/>
+ <account name="Salary &amp; wages" type="12"/>
+ </account>
+ <account name="Gift Received" type="12"/>
+ <account name="Int Inc" type="12">
+ <account name="Bank Interest" type="12"/>
+ <account name="Gross" type="12"/>
+ <account name="Net" type="12"/>
+ <account name="Other savings" type="12"/>
+ </account>
+ <account name="Invest. income" type="12">
+ <account name="1st option" type="12"/>
+ <account name="Dividend" type="12"/>
+ <account name="Foreign" type="12"/>
+ <account name="Other savings" type="12"/>
+ <account name="Other trusts" type="12"/>
+ <account name="Other trusts#Capital" type="12"/>
+ <account name="Other trusts#Dist. rec'd" type="12"/>
+ <account name="Other trusts#Estate" type="12"/>
+ <account name="UK other" type="12"/>
+ <account name="UK other#Unit trusts" type="12"/>
+ </account>
+ <account name="Investment Income" type="12">
+ <account name="Capital Gains" type="12"/>
+ <account name="Dividends" type="12"/>
+ <account name="Interest" type="12"/>
+ <account name="Tax-Exempt Interest" type="12"/>
+ </account>
+ <account name="Nat. Savings" type="12">
+ <account name="Capital bonds" type="12"/>
+ <account name="Deposit bonds" type="12"/>
+ <account name="Income bonds" type="12"/>
+ <account name="Invest. account" type="12"/>
+ <account name="Ord. account" type="12"/>
+ </account>
+ <account name="Old Age Pension" type="12">
+ <account name="Employer" type="12"/>
+ <account name="State" type="12"/>
+ </account>
+ <account name="Other Income" type="12">
+ <account name="Student loan" type="12"/>
+ <account name="Child Support" type="12"/>
+ <account name="Employee Share Option" type="12"/>
+ <account name="Gifts Received" type="12"/>
+ <account name="Loan Principal Received" type="12"/>
+ <account name="Lottery or Premium Bond Prizes" type="12"/>
+ <account name="Tax Refund" type="12"/>
+ <account name="Unemployment Benefit" type="12"/>
+ </account>
+ <account name="Retirement Income" type="12">
+ <account name="Pensions &amp; Annuities" type="12"/>
+ <account name="State Pension Benefits" type="12"/>
+ </account>
+ <account name="Social security" type="12">
+ <account name="Industrial" type="12"/>
+ <account name="Invalid" type="12"/>
+ <account name="Widowed" type="12"/>
+ </account>
+ <account name="Wages &amp; Salary" type="12">
+ <account name="Bonus" type="12"/>
+ <account name="Commission" type="12"/>
+ <account name="Employer Pension Contributions" type="12"/>
+ <account name="Gross Pay" type="12"/>
+ <account name="Net Pay" type="12"/>
+ <account name="Overtime" type="12"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/C/otherloan.kmt b/kmymoney2/templates/C/otherloan.kmt
new file mode 100644
index 0000000..b5ff4bb
--- /dev/null
+++ b/kmymoney2/templates/C/otherloan.kmt
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/C/acctchrt_otherloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Other Loans</title>
+ <shortdesc>Accounts for tracking other loans and associated interest</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have something other than a home loan (other loan, other loan interest).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Interest">
+ <account type="13" name="Other Interest"/>
+ </account>
+ </account>
+ <account type="10" name=""/>
+ <account type="10" name="">
+ <account type="10" name="Other Loan"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/C/renter.kmt b/kmymoney2/templates/C/renter.kmt
new file mode 100644
index 0000000..5252106
--- /dev/null
+++ b/kmymoney2/templates/C/renter.kmt
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/C/acctchrt_renter.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Renter Expenses</title>
+ <shortdesc>Expenses associated with renting a home</shortdesc>
+ <longdesc>You would want to select this set of accounts if you rent a home or apartment (rent, renter's insurance).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Rent"/>
+ <account type="13" name="Insurance">
+ <account type="13" name="Rental Insurance"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/C/retiremt.kmt b/kmymoney2/templates/C/retiremt.kmt
new file mode 100644
index 0000000..d2b1ee5
--- /dev/null
+++ b/kmymoney2/templates/C/retiremt.kmt
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/C/acctchrt_retiremt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Retirement Accounts</title>
+ <shortdesc>Retirement account with related investment subaccounts</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have retirement accounts (stock, bond, mutual fund, index fund).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="7" name="Retirement"/>
+ </account>
+ <account type="9" name=""/>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/C/spouseinc.kmt b/kmymoney2/templates/C/spouseinc.kmt
new file mode 100644
index 0000000..f034f5e
--- /dev/null
+++ b/kmymoney2/templates/C/spouseinc.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/C/acctchrt_spouseinc.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Spouse Income</title>
+ <shortdesc>Accounts for tracking spouse's income separately</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have a working spouse (salary (spouse), taxes (spouse)).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Salary (Spouse)"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Taxes (Spouse)">
+ <account type="13" name="Social Security"/>
+ <account type="13" name="Medicare"/>
+ <account type="13" name="State/Province"/>
+ <account type="13" name="Federal"/>
+ <account type="13" name="Other Tax"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/C/spouseretire.kmt b/kmymoney2/templates/C/spouseretire.kmt
new file mode 100644
index 0000000..d026dc1
--- /dev/null
+++ b/kmymoney2/templates/C/spouseretire.kmt
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/C/acctchrt_spouseretire.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Spouse Retirement Accounts</title>
+ <shortdesc>Retirement account with related investment accounts for spouse</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have investments in a spouse's name (stock, bond, mutual fund, index fund, interest, dividend).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="7" name="Spouse Retirement"/>
+ </account>
+ <account type="9" name=""/>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/CMakeLists.txt b/kmymoney2/templates/CMakeLists.txt
new file mode 100644
index 0000000..11f53f1
--- /dev/null
+++ b/kmymoney2/templates/CMakeLists.txt
@@ -0,0 +1,11 @@
+########### install files ###############
+
+INSTALL(DIRECTORY
+ C de_AT de_CH de_DE dk el_GR en_GB en_US es_AR es_ES es_MX fr_CA
+ fr_CH fr_FR gl_ES hu_HU it jp nl_NL pt_BR pt_PT ro_RO ru_RU sk tr_TR
+ zh_CN zh_HK zh_TW
+ DESTINATION share/apps/kmymoney2/templates
+ PATTERN "CVS" EXCLUDE
+ PATTERN ".cvsignore" EXCLUDE
+ PATTERN "*Make*" EXCLUDE
+ )
diff --git a/kmymoney2/templates/Makefile.am b/kmymoney2/templates/Makefile.am
new file mode 100644
index 0000000..b10565a
--- /dev/null
+++ b/kmymoney2/templates/Makefile.am
@@ -0,0 +1,3 @@
+templatedir=$(kde_datadir)/kmymoney2/templates
+
+SUBDIRS = C de_AT de_CH de_DE dk el_GR en_GB en_US es_AR es_ES es_MX fr_CA fr_CH fr_FR gl_ES hu_HU it jp nl_NL pt_BR pt_PT ro_RO ru_RU sk tr_TR zh_CN zh_HK zh_TW
diff --git a/kmymoney2/templates/cpp_template b/kmymoney2/templates/cpp_template
new file mode 100644
index 0000000..6bca001
--- /dev/null
+++ b/kmymoney2/templates/cpp_template
@@ -0,0 +1,31 @@
+/***************************************************************************
+ |FILENAME| - description
+ -------------------
+ begin : |DATE|
+ copyright : (C) 2000-|YEAR| by |AUTHOR|
+ email : |EMAIL|
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
diff --git a/kmymoney2/templates/de_AT/Makefile.am b/kmymoney2/templates/de_AT/Makefile.am
new file mode 100644
index 0000000..eee2ea5
--- /dev/null
+++ b/kmymoney2/templates/de_AT/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/de_AT
+
+template_DATA = houseown.kmt kids.kmt investment.kmt autoloan.kmt common.kmt brokerage.kmt business.kmt auto.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/de_AT/auto.kmt b/kmymoney2/templates/de_AT/auto.kmt
new file mode 100644
index 0000000..cb09691
--- /dev/null
+++ b/kmymoney2/templates/de_AT/auto.kmt
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_AT/acctchrt_auto.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Autobesitz</title>
+ <shortdesc>Ausgaben von Autobesitzern</shortdesc>
+ <longdesc>Diese Auswahl erstellt Konten, die Ausgaben für ein Auto repräsentieren.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Fahrtkosten">
+ <account type="13" name="Auto">
+ <account type="13" name="Versicherungen"/>
+ <account type="13" name="Abgaben"/>
+ <account type="13" name="Benzin"/>
+ <account type="13" name="Reparaturen"/>
+ <account type="13" name="Parkgebühren"/>
+ </account>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Sachanlagen">
+ <account type="9" name="Auto"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_AT/autoloan.kmt b/kmymoney2/templates/de_AT/autoloan.kmt
new file mode 100644
index 0000000..1a02110
--- /dev/null
+++ b/kmymoney2/templates/de_AT/autoloan.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_AT/acctchrt_autoloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Kredit Auto</title>
+ <shortdesc>Kredit für Autokauf</shortdesc>
+ <longdesc>Falls Sie einen Kredit zum Autokauf besitzen, können Sie mit dieser Auswahl die passenden Konten bekommen.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Fahrtkosten">
+ <account type="13" name="Auto">
+ <account type="13" name="Kreditzinsen"/>
+ </account>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Kredite">
+ <account type="10" name="Auto"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_AT/brokerage.kmt b/kmymoney2/templates/de_AT/brokerage.kmt
new file mode 100644
index 0000000..bf9d427
--- /dev/null
+++ b/kmymoney2/templates/de_AT/brokerage.kmt
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_AT/acctchrt_brokerage.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Aktienhandel</title>
+ <shortdesc>Konten zum Handel mit Aktien und Fonds</shortdesc>
+ <longdesc>Mit dieser Auswahl werden Konten zum Handel mit Aktien und Aktienfonds erstellt.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Sonstiges">
+ <account type="13" name="Komissionen"/>
+ </account>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Dividenden"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Geldanlagen">
+ <account type="9" name="Aktiendepot">
+ <account type="9" name="Bond"/>
+ <account type="9" name="Aktienfond"/>
+ <account type="9" name="Aktie"/>
+ </account>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_AT/business.kmt b/kmymoney2/templates/de_AT/business.kmt
new file mode 100644
index 0000000..0ae0692
--- /dev/null
+++ b/kmymoney2/templates/de_AT/business.kmt
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_AT/acctchrt_business.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Kleinunternehmen</title>
+ <shortdesc>Grundlegende Konten für Kleinunternehmen</shortdesc>
+ <longdesc>Kleinunternehmer können diesen Kontorahmen anstelle der anderen Kontorahmen verwenden. Sie finden hier die grundlegenden Konten für ein Kleinunternehmen wie Forderungen, Verbindlichkeiten, Steuer, Aufwendungen und Erträge.</longdesc>
+ <accounts>
+ <account type="10" name="">
+ <account type="10" name="Barverbindlichkeiten">
+ <account type="4" name="Kreditkarte"/>
+ </account>
+ <account type="10" name="Umsatzsteuer"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Sonstiges"/>
+ <account type="12" name="Zurückerstattete Aufwendungen"/>
+ <account type="12" name="Zinsen">
+ <account type="12" name="Girokonto"/>
+ <account type="12" name="Sonstige"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Vorsteuer"/>
+ <account type="9" name="Sachanlagen">
+ <account type="9" name="Sonstige"/>
+ </account>
+ <account type="9" name="Barvermögen">
+ <account type="1" name="Girokonto"/>
+ <account type="3" name="Bargeld"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Postgebühren"/>
+ <account type="13" name="Büro">
+ <account type="13" name="Nebenkosten">
+ <account type="13" name="Strom"/>
+ <account type="13" name="Rundfunkgebühren"/>
+ <account type="13" name="Hausverwaltung"/>
+ <account type="13" name="Gas"/>
+ <account type="13" name="Wasser"/>
+ <account type="13" name="Abfall"/>
+ </account>
+ <account type="13" name="Miete"/>
+ <account type="13" name="Möbel"/>
+ </account>
+ <account type="13" name="Abschreibungen"/>
+ <account type="13" name="Beratungskosten">
+ <account type="13" name="Rechtskosten"/>
+ <account type="13" name="Steuerberatung"/>
+ <account type="13" name="Buchhaltung"/>
+ </account>
+ <account type="13" name="Fahrtkosten">
+ <account type="13" name="Netzkarten"/>
+ <account type="13" name="Fahrkarten"/>
+ <account type="13" name="Auto">
+ <account type="13" name="Parkgebühren"/>
+ <account type="13" name="Abgaben"/>
+ <account type="13" name="Wartung und Reparaturen"/>
+ <account type="13" name="Treibstoff"/>
+ </account>
+ </account>
+ <account type="13" name="Steuern">
+ <account type="13" name="Sonstige"/>
+ <account type="13" name="Einkommenssteuer"/>
+ <account type="13" name="Körperschaftssteuer"/>
+ <account type="13" name="Umsatzsteuer Zahllast"/>
+ </account>
+ <account type="13" name="Interessensvertretung"/>
+ <account type="13" name="Lohnkosten"/>
+ <account type="13" name="Druck- und Kopierkosten"/>
+ <account type="13" name="EDV">
+ <account type="13" name="Software"/>
+ <account type="13" name="Hardware"/>
+ </account>
+ <account type="13" name="Fachliteratur"/>
+ <account type="13" name="Sonstiges"/>
+ <account type="13" name="Spenden"/>
+ <account type="13" name="Büromaterialien"/>
+ <account type="13" name="Restaurant"/>
+ <account type="13" name="Versicherungen">
+ <account type="13" name="Haftpflichtversicherung"/>
+ <account type="13" name="Sozialversicherung"/>
+ </account>
+ <account type="13" name="Telekommunikation">
+ <account type="13" name="Telefon"/>
+ <account type="13" name="Online-Dienste"/>
+ </account>
+ </account>
+ <account type="16" name=""/>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_AT/common.kmt b/kmymoney2/templates/de_AT/common.kmt
new file mode 100644
index 0000000..919c158
--- /dev/null
+++ b/kmymoney2/templates/de_AT/common.kmt
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_AT/acctchrt_common.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Allgemeine Konten</title>
+ <shortdesc>Grundlegende Kontenstruktur</shortdesc>
+ <longdesc>Die meisten Anwender benötigen diese grundlegende Kontenstruktur. Sie finden hier die allgemein üblichen Konten wie Giro-, Sparkonto, Bargeld, Kreditkarte, Erträge und verschiedene Ausgaben.</longdesc>
+ <accounts>
+ <account type="10" name="">
+ <account type="10" name="Barverbindlichkeiten">
+ <account type="4" name="Kreditkarte"/>
+ </account>
+ </account>
+ <account type="16" name=""/>
+ <account type="13" name="">
+ <account type="13" name="Spenden"/>
+ <account type="13" name="Körperpflege"/>
+ <account type="13" name="Lebensmittel"/>
+ <account type="13" name="Unterhaltung">
+ <account type="13" name="Reisen"/>
+ <account type="13" name="Ausgehen"/>
+ <account type="13" name="Sport"/>
+ <account type="13" name="Musik/Kino/Theater"/>
+ </account>
+ <account type="13" name="Hobbies"/>
+ <account type="13" name="Fahrtkosten">
+ <account type="13" name="Netzkarten"/>
+ <account type="13" name="Fahrkarten"/>
+ </account>
+ <account type="13" name="Versicherungen">
+ <account type="13" name="Haftpflicht"/>
+ <account type="13" name="Krankenversicherung"/>
+ </account>
+ <account type="13" name="Geschenke"/>
+ <account type="13" name="Bildung">
+ <account type="13" name="Büroartikel"/>
+ <account type="13" name="Abonnements"/>
+ <account type="13" name="Bücher"/>
+ <account type="13" name="Zeitungen"/>
+ </account>
+ <account type="13" name="Telekommunikation">
+ <account type="13" name="Online-Dienste"/>
+ <account type="13" name="Rundfunk"/>
+ <account type="13" name="Telefon"/>
+ </account>
+ <account type="13" name="Gesundheit">
+ <account type="13" name="Medikamente"/>
+ </account>
+ <account type="13" name="EDV"/>
+ <account type="13" name="Sonstiges">
+ <account type="13" name="Bankgebühren"/>
+ <account type="13" name="Sonstiges"/>
+ </account>
+ <account type="13" name="Kleidung"/>
+ <account type="13" name="Steuern">
+ <account type="13" name="Sozialversicherung"/>
+ <account type="13" name="Einkommenssteuer"/>
+ <account type="13" name="Sonstige"/>
+ </account>
+ <account type="13" name="Wohnen">
+ <account type="13" name="Ausstattung"/>
+ <account type="13" name="Miete"/>
+ <account type="13" name="Nebenkosten">
+ <account type="13" name="Wasser"/>
+ <account type="13" name="Gas"/>
+ <account type="13" name="Hausverwaltung"/>
+ <account type="13" name="Abfall"/>
+ <account type="13" name="Strom"/>
+ </account>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Barvermögen">
+ <account type="1" name="Sparkonto"/>
+ <account type="1" name="Girokonto"/>
+ <account type="3" name="Bargeld"/>
+ <account type="3" name="Quick"/>
+ </account>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Sonstiges"/>
+ <account type="12" name="Gehalt">
+ <account type="12" name="Zulagen"/>
+ <account type="12" name="Gehalt"/>
+ </account>
+ <account type="12" name="Glücksspiel"/>
+ <account type="12" name="Geschenke"/>
+ <account type="12" name="Zinsen">
+ <account type="12" name="Sonstige"/>
+ <account type="12" name="Girokonto"/>
+ <account type="12" name="Sparkonto"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_AT/houseown.kmt b/kmymoney2/templates/de_AT/houseown.kmt
new file mode 100644
index 0000000..f79116d
--- /dev/null
+++ b/kmymoney2/templates/de_AT/houseown.kmt
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_AT/acctchrt_houseown.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Hausbesitz</title>
+ <shortdesc>Konten für Hausbesitzer/innen</shortdesc>
+ <longdesc>Konten für Hausbesitzer/innen</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Wohnen">
+ <account type="13" name="Reparaturen"/>
+ <account type="13" name="Grundsteuer"/>
+ <account type="13" name="Bausparvertrag"/>
+ </account>
+ <account type="13" name="Versicherungen">
+ <account type="13" name="Hausrat"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Kredite">
+ <account type="10" name="Bausparvertrag"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Sachanlagen">
+ <account type="9" name="Haus"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_AT/investment.kmt b/kmymoney2/templates/de_AT/investment.kmt
new file mode 100644
index 0000000..e3df375
--- /dev/null
+++ b/kmymoney2/templates/de_AT/investment.kmt
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_AT/acctchrt_investment.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Geldanlagen</title>
+ <shortdesc>Konten für Geldanlagen</shortdesc>
+ <longdesc>Konten für Investitionen in Geldanlagen: Bausparvertrag, Lebensversicherung, Festgeld, Investmentfonds.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Versicherungen">
+ <account type="13" name="Lebensversicherung"/>
+ </account>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Zinsen">
+ <account type="12" name="Investmentfonds"/>
+ <account type="12" name="Bausparvertrag"/>
+ <account type="12" name="Festgeld"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Geldanlagen">
+ <account type="9" name="Festgeld"/>
+ <account type="9" name="Investmentfonds"/>
+ <account type="9" name="Bausparvertrag"/>
+ <account type="9" name="Lebensversicherung"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_AT/kids.kmt b/kmymoney2/templates/de_AT/kids.kmt
new file mode 100644
index 0000000..800bfeb
--- /dev/null
+++ b/kmymoney2/templates/de_AT/kids.kmt
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_AT/acctchrt_kids.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Kinder</title>
+ <shortdesc>Konten im Zusammenhang mit Kindern</shortdesc>
+ <longdesc>Kindergeld, Kindergarten</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Kindergarten"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Gehalt">
+ <account type="12" name="Kindergeld"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_CH/Makefile.am b/kmymoney2/templates/de_CH/Makefile.am
new file mode 100644
index 0000000..fb2982c
--- /dev/null
+++ b/kmymoney2/templates/de_CH/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/de_CH
+
+template_DATA = otherasset.kmt kids.kmt chkmu.kmt common.kmt brokerage.kmt otherloan.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/de_CH/brokerage.kmt b/kmymoney2/templates/de_CH/brokerage.kmt
new file mode 100644
index 0000000..f7df104
--- /dev/null
+++ b/kmymoney2/templates/de_CH/brokerage.kmt
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_CH/acctchrt_brokerage.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Aktienhandel</title>
+ <shortdesc>Konten zum Handel mit Aktien und Fonds</shortdesc>
+ <longdesc>Mit dieser Auswahl werden Konten zum Handel mit Aktien und Aktienfonds erstellt.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Sonstiges">
+ <account type="13" name="Komissionen"/>
+ </account>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Dividenden"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Geldanlagen">
+ <account type="9" name="Aktiendepot">
+ <account type="9" name="Bond"/>
+ <account type="9" name="Aktienfond"/>
+ <account type="9" name="Aktie"/>
+ </account>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_CH/chkmu.kmt b/kmymoney2/templates/de_CH/chkmu.kmt
new file mode 100644
index 0000000..50963c1
--- /dev/null
+++ b/kmymoney2/templates/de_CH/chkmu.kmt
@@ -0,0 +1,512 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_CH/acctchrt_chkmu.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>KMU Kontenrahmen</title>
+ <shortdesc>Kontenrahmen fuer Schweizer KMU</shortdesc>
+ <longdesc>Kontenrahmen fuer Schweizer KMU gem Walher Sterchi publiziert vom schweizerischen Gewerbeverband</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Finanzerfolg">
+ <account type="13" name="Finanzertrag">
+ <account type="13" name="Erträge aus F'anlagen bei Konzernges."/>
+ <account type="13" name="Erträge aus fl. Mitteln u. Wertschriften"/>
+ <account type="13" name="Erträge aud F'anlagen bei Aktionären"/>
+ <account type="13" name="Erträge aus Finanzanlagen"/>
+ <account type="13" name="Übriger Finanzertrag"/>
+ </account>
+ <account type="13" name="Finanzaufwand">
+ <account type="13" name="Zinsaufw. aus F'verb. ggn. Aktionären"/>
+ <account type="13" name="Zinsaufw. aus F'verb. ggn. Dritten"/>
+ <account type="13" name="Zinsaufw. aus F'verb. ggn. Konzernges."/>
+ <account type="13" name="Übriger Finanzaufwand"/>
+ <account type="13" name="Zinsaufw. F'verb. ggn. Vorsorgeeinr."/>
+ </account>
+ </account>
+ <account type="13" name="Sachvers., Abgaben, Gebühren, Bewillig.">
+ <account type="13" name="Abgaben, Gebühren, Bewilligungen">
+ <account type="13" name="Abgaben und Gebühren"/>
+ <account type="13" name="Bewilligungen und Gewerbepatente"/>
+ </account>
+ <account type="13" name="Sachversicherungen">
+ <account type="13" name="V'präm. f. Betriebsunterbrechung"/>
+ <account type="13" name="V'präm. f. Elementarsch., Glasbr., Einb."/>
+ <account type="13" name="Kreditverischerungsprämien"/>
+ <account type="13" name="V'präm. f. Betriebshaftpf. u. Garantie"/>
+ </account>
+ </account>
+ <account type="13" name="Übriger Betriebsaufwand">
+ <account type="13" name="Forschung und Entwicklung"/>
+ <account type="13" name="Wirtschaftsauskünfte, Betreibungen"/>
+ <account type="13" name="Betriebssicherheit und Bewachung"/>
+ </account>
+ <account type="13" name="Verwaltungs- und Informatikaufwand">
+ <account type="13" name="Informatik">
+ <account type="13" name="Lizenzen und Wartung"/>
+ <account type="13" name="Beratung und Entwicklung"/>
+ <account type="13" name="Leasing und Miete Hard- und Software"/>
+ </account>
+ <account type="13" name="Verwaltungsaufwand">
+ <account type="13" name="Beiträge, Spenden, Vergabungen, Trinkgelder"/>
+ <account type="13" name="Buchführungs- und Beratungsaufwand"/>
+ <account type="13" name="Telefon, Telefax, Internet, Porti"/>
+ <account type="13" name="Verwaltungsrat, GV, Revisionsstellen"/>
+ <account type="13" name="Privatanteile Verwaltungsaufwand"/>
+ <account type="13" name="Büromat., Drucksach., Fotokop., Fachlit."/>
+ </account>
+ </account>
+ <account type="13" name="Raumaufwand">
+ <account type="13" name="Nebenkosten"/>
+ <account type="13" name="Leasing Immobilien"/>
+ <account type="13" name="Fremdmieten Geschäftslokalitäten"/>
+ <account type="13" name="Reinigung"/>
+ <account type="13" name="Unterhalt Geschäftsräume"/>
+ <account type="13" name="Eigenmiete Geschäftslokalitäten"/>
+ <account type="13" name="Privatanteile Raumaufwand"/>
+ </account>
+ <account type="13" name="Fahrzeug- und Transportaufwand">
+ <account type="13" name="Fahrzeugaufwand">
+ <account type="13" name="Versicherungen"/>
+ <account type="13" name="Reparaturen, Service und Reinigung Fz"/>
+ <account type="13" name="Fahrzeugleasing, Fahrzeugmieten"/>
+ <account type="13" name="Privatanteil Fahrzeugaufwand"/>
+ <account type="13" name="Betriebsstoffe"/>
+ <account type="13" name="Verkehrsabgaben, Beiträge, Gebühren"/>
+ </account>
+ <account type="13" name="Transportaufwand">
+ <account type="13" name="Frachten, Spediteur, Cargo Domizil"/>
+ </account>
+ </account>
+ <account type="13" name="Werbeaufwand">
+ <account type="13" name="Werbeberatung, Marktanalysen"/>
+ <account type="13" name="Werbeinserate, elektronische Medien"/>
+ <account type="13" name="Werbedrucks., -mat., Reklameart., Muster"/>
+ <account type="13" name="Öffentlichkeitsarbeit / Public Relation"/>
+ <account type="13" name="Schaufen., Dekoration, Fachmes., Ausstell."/>
+ <account type="13" name="Reisespesen, Kundenbetreuung"/>
+ <account type="13" name="Werbebeiträge, Sponsoring"/>
+ </account>
+ <account type="13" name="URE / Leasingaufwand mobile Sachanlagen">
+ <account type="13" name="Unterhalt, Reparaturen, Ersatz (URE)">
+ <account type="13" name="URE von Büroeinrichtungen"/>
+ <account type="13" name="URE von Verkaufseinrichtungen"/>
+ <account type="13" name="URE von Produktionsanlagen"/>
+ <account type="13" name="URE von Personaleinrichtungen"/>
+ <account type="13" name="URE von Lagereinrichtungen"/>
+ </account>
+ <account type="13" name="Leasingaufwand mobile Sachanlagen">
+ <account type="13" name="Leasingaufwand mobile Sachanlagen"/>
+ </account>
+ </account>
+ <account type="13" name="Energie- und Entsorgungsaufwand">
+ <account type="13" name="Energieaufwand">
+ <account type="13" name="Wasser"/>
+ <account type="13" name="Gas"/>
+ <account type="13" name="Brennstoffe, Heizmaterial"/>
+ <account type="13" name="Elektrizität"/>
+ </account>
+ <account type="13" name="Entsorgungsaufwand">
+ <account type="13" name="Entsorgungsaufwand"/>
+ </account>
+ </account>
+ <account type="13" name="Abschreibungen">
+ <account type="13" name="Auf Finanzanlagen"/>
+ <account type="13" name="auf aktiviertem Aufwand"/>
+ <account type="13" name="auf immateriellen Anlagen"/>
+ <account type="13" name="auf mobilen Sachanlagen"/>
+ <account type="13" name="auf immobilen Sachanlagen"/>
+ <account type="13" name="auf Beteiligungen an Konzernges."/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Personalaufwand Verwaltung">
+ <account type="13" name="Lohnaufwand Verwaltung"/>
+ <account type="13" name="Sozialversicherungsaufwand Verwaltung"/>
+ <account type="13" name="Übriger Personalaufwand Verwaltung"/>
+ <account type="13" name="Arbeitsleistung Dritter Verwaltung"/>
+ </account>
+ <account type="13" name="Personalaufwand Handel">
+ <account type="13" name="Arbeitsleistungen Dritter Handel"/>
+ <account type="13" name="Sozialversicherungsaufwand Handel"/>
+ <account type="13" name="Lohnaufwand Handel Bereich A"/>
+ <account type="13" name="Lohnaufwand Handel Bereich B"/>
+ <account type="13" name="Lohnaufwand Handel Bereich C"/>
+ <account type="13" name="Übriger Personalaufwand Handel"/>
+ </account>
+ <account type="13" name="Sozialversicherungsaufwand">
+ <account type="13" name="Quellensteuer"/>
+ <account type="13" name="AHV, IV, EO, ALV"/>
+ <account type="13" name="Berufliche Vorsorge"/>
+ <account type="13" name="Unfallversicherung"/>
+ <account type="13" name="FAK"/>
+ <account type="13" name="Krankentaggeldversicherung"/>
+ </account>
+ <account type="13" name="Personalaufwand Produktion">
+ <account type="13" name="Übriger Personalaufwand Produktion"/>
+ <account type="13" name="Lohnaufwand Produktion Bereich C"/>
+ <account type="13" name="Lohnaufwand Produktion Bereich B"/>
+ <account type="13" name="Sozialversicherungsaufwand Produktion"/>
+ <account type="13" name="Lohnaufwand Produktion Bereich A"/>
+ <account type="13" name="Arbeitsleistungen Dritter Produktion"/>
+ </account>
+ <account type="13" name="Personalaufwand Dienstleistungen">
+ <account type="13" name="Arbeitsleistungen Dritter DL"/>
+ <account type="13" name="Lohnaufwand DL Bereich A"/>
+ <account type="13" name="Lohnaufwand DL Bereich B"/>
+ <account type="13" name="Übriger Personalaufwand DL"/>
+ <account type="13" name="Sozialversicherungsaufwand DL"/>
+ <account type="13" name="Lohnaufwand DL Bereich C"/>
+ </account>
+ <account type="13" name="Arbeitsleistungen Dritter">
+ <account type="13" name="Arbeitsleistungen Dritter"/>
+ </account>
+ <account type="13" name="Übriger Personalaufwand">
+ <account type="13" name="Spesenentschädigungen pauschal"/>
+ <account type="13" name="Privatanteile Personalaufwand"/>
+ <account type="13" name="Spesenentschädigungen effektiv"/>
+ <account type="13" name="Sonstiger Personalaufwand"/>
+ <account type="13" name="Personalkantine"/>
+ <account type="13" name="Aus- und Weiterbildung"/>
+ <account type="13" name="Personalbeschaffung"/>
+ </account>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Dienstleistungsertrag">
+ <account type="12" name="Dienstleistungsertrag Bereich A"/>
+ <account type="12" name="Dienstleistungsertrag Bereich B"/>
+ <account type="12" name="D'ertrag aus Leistungen an Konzerngesell."/>
+ <account type="12" name="B'änderungen angefangene und fertige DL"/>
+ <account type="12" name="Dienstleistungsertrag Bereich C"/>
+ <account type="12" name="Ertragsminderungen Dienstleistungen"/>
+ </account>
+ <account type="12" name="Produktionsertrag">
+ <account type="12" name="Ertragsminderung Produktion"/>
+ <account type="12" name="Produktionsertrag Bereich B"/>
+ <account type="12" name="Produktionsertrag Bereich C"/>
+ <account type="12" name="Produktionsertrag Bereich A"/>
+ <account type="12" name="Aus Leistungen an Konzerngesellschaften"/>
+ <account type="12" name="B'änderung angef./fert. Arb. Produktion"/>
+ </account>
+ <account type="12" name="B'änderungen angef./fert. Arb. aus P/DL">
+ <account type="12" name="B'änderungen angef./fert. Arbeiten DL"/>
+ <account type="12" name="B'änderungen angef./fertig. Arbeiten Prod."/>
+ </account>
+ <account type="12" name="Handelsertrag">
+ <account type="12" name="H'ertrag aus Leistungen an Konzerngesell."/>
+ <account type="12" name="Handelsertrag Bereich A"/>
+ <account type="12" name="Handelsertrag Bereich B"/>
+ <account type="12" name="Ertragsminderungen Handel"/>
+ <account type="12" name="Handelsertrag Bereich C"/>
+ </account>
+ <account type="12" name="Übriger Ertrag">
+ <account type="12" name="Ertragsminderung auf übrigem Ertrag"/>
+ <account type="12" name="Ertrag aus Personalausleihung"/>
+ <account type="12" name="Erträge aus Lizenzen, Patenten etc."/>
+ <account type="12" name="Nebenertrag aus Lieferung und Leistung"/>
+ <account type="12" name="Sonstiger Ertrag aus Liefer./Leistungen"/>
+ <account type="12" name="Übriger Ertrag aus Leist. an Konzernges."/>
+ </account>
+ <account type="12" name="Eigenleistungen und Eigenverbrauch">
+ <account type="12" name="Eigenverbrauch an Handelswaren"/>
+ <account type="12" name="Eigenverbrauch an Dienstleistungen"/>
+ <account type="12" name="E'verbrauch an selbstherges. Produkten"/>
+ <account type="12" name="Eigenleistungen"/>
+ </account>
+ <account type="12" name="E'minderungen aus P.-, H.- und DL-Ertr.">
+ <account type="12" name="Ertragsminderungen"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Betriebsfremde Verbindlichkeiten">
+ <account type="10" name="Betriebsfremde Verbindlichkeiten">
+ <account type="10" name="Andere langfristige Verbindlichkeiten"/>
+ <account type="10" name="Langfristige Finanzverbindlichkeiten"/>
+ <account type="10" name="Kurzfristige Finanzverbindlichkeiten"/>
+ <account type="10" name="Rückstellungen"/>
+ <account type="10" name="Andere kurzfristige Verbindlichkeiten"/>
+ <account type="10" name="Kurzfr. Verbindlichkeiten aus Leistungen"/>
+ <account type="10" name="Passive Rechnungsabgr., kurzfr. Rückstell."/>
+ </account>
+ </account>
+ <account type="10" name="Fremdkapital Langfristig">
+ <account type="10" name="Rückstellungen lanfgristig">
+ <account type="10" name="für betriebliche Umstrukturierung"/>
+ <account type="10" name="für Altersvorsorge"/>
+ <account type="10" name="für Steuern (langfristig)"/>
+ <account type="10" name="für Umweltschutzmassnahmen"/>
+ <account type="10" name="für Reparatur, Sanierung und Erneuerung"/>
+ <account type="10" name="für Forschung und Entwicklung"/>
+ <account type="10" name="aus Lieferung und Leistung (langfristig)"/>
+ <account type="10" name="Übrige Rückstellungen"/>
+ </account>
+ <account type="10" name="Andere langfristige Verbindlichkeiten">
+ <account type="10" name="Langf. Verbindl. ggn. Aktionären"/>
+ <account type="10" name="Langf. Verbindl. ggn. Konzerngesellschaft"/>
+ <account type="10" name="Langf. Verbindl. ggn Vorsorgeeinrichtung"/>
+ <account type="10" name="Langfr. Darlehensverbindl. bei Dritten"/>
+ </account>
+ <account type="10" name="Langfristige Finanzverbindlichkeiten">
+ <account type="10" name="Obligationenanleihen"/>
+ <account type="10" name="Bankverbindlichkeiten langfristig"/>
+ <account type="10" name="Leasingverbindlichkeiten"/>
+ <account type="10" name="Hypothekarverbindlichkeiten"/>
+ </account>
+ </account>
+ <account type="10" name="Eigenkapital">
+ <account type="10" name="Reserven, Bilanzgewinn">
+ <account type="10" name="Reserven"/>
+ <account type="10" name="Bilanzgewinn / Bilanzverlust"/>
+ </account>
+ <account type="10" name="Kapital / Privat">
+ <account type="10" name="Kapital"/>
+ <account type="10" name="Privat für Einzelfirmen und Personenges."/>
+ </account>
+ </account>
+ <account type="10" name="Fremdkapital kurzfristig">
+ <account type="10" name="Passive Rechnungsabgr. kurzfr. Rücktell.">
+ <account type="10" name="Passive Rechnungsabgrenzung"/>
+ <account type="10" name="Kurzfristige Rückstellungen"/>
+ </account>
+ <account type="10" name="Kurzf. Verbindlichkeiten aus Lief/Leist">
+ <account type="10" name="Verbindl. aus L/L ggn. Aktionären"/>
+ <account type="10" name="Verbindlichkeiten aus Lief/Leistungen"/>
+ <account type="10" name="Verbindl. aus L/L ggn. Konzerngesellsch."/>
+ <account type="10" name="Anzahlungen von Kunden"/>
+ </account>
+ <account type="10" name="Kurzfristige Finanzverbindlichkeiten">
+ <account type="10" name="Kurzf. Finanzverb. ggn. Aktionären"/>
+ <account type="10" name="Postscheck- und WIR-Verbindlichkeiten"/>
+ <account type="10" name="Bankverbindlichkeiten kurzfristig"/>
+ <account type="10" name="Kurzf. Finanzverg. ggn. Vorsorgestiftungen"/>
+ <account type="10" name="Kurzf. fälliger Teil v. langf. Fi'zverb."/>
+ <account type="10" name="Wechselverpflichtungen"/>
+ <account type="10" name="Sonstige kurzf. Finanzverb. ggn. Dritten"/>
+ <account type="10" name="Kurzf. Finanzverb. ggn. Konzerngesell."/>
+ </account>
+ <account type="10" name="Andere kurzfristige Verbindlichkeiten">
+ <account type="10" name="Fällige Dividenden u. Obligationenzinsen"/>
+ <account type="10" name="Verbindl. ggn. staatlichen Stellen"/>
+ <account type="10" name="Fällige Obligationenanleihen"/>
+ <account type="10" name="Andere kurzf. Verbindl. ggn. Aktionären"/>
+ <account type="10" name="Andere kurzfr. Verbindl. ggn. Dritten"/>
+ <account type="10" name="Andere kurzf. Verbindl. ggn. Konzerngesell."/>
+ <account type="10" name="Andere kurzf. Verbindl. ggn. Vorsorgeein."/>
+ </account>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Aufwand für Drittleistungen">
+ <account type="13" name="Aufwand für Drittleistungen Bereich C"/>
+ <account type="13" name="Aufwandminderungen für Drittleistu. (DL)"/>
+ <account type="13" name="Aufwand für Drittleistungen Bereich A"/>
+ <account type="13" name="Aufwand für Drittleistungen Bereich B"/>
+ <account type="13" name="Direkte Spesen für Drittleistungen"/>
+ </account>
+ <account type="13" name="Übriger Aufwand">
+ <account type="13" name="Übriger Aufwand für Drittleistungen"/>
+ <account type="13" name="Aufwand für Verpackung"/>
+ <account type="13" name="Übriger Materialaufwand Handel"/>
+ <account type="13" name="Übriger Materialaufwand Produktion"/>
+ </account>
+ <account type="13" name="Handelswarenaufwand">
+ <account type="13" name="Handelswarenaufwand Bereich C"/>
+ <account type="13" name="Einkaufspreisminderungen Handel"/>
+ <account type="13" name="B'veränderungen Warenverluste Handelswa."/>
+ <account type="13" name="Handelswarenaufwand Bereich B"/>
+ <account type="13" name="Direkte Einkaufsspesen Handel"/>
+ <account type="13" name="Handelswarenaufwand Bereich A"/>
+ </account>
+ <account type="13" name="Aufwandminderung">
+ <account type="13" name="Aufwandminderungen"/>
+ </account>
+ <account type="13" name="B'veränderungen, Mat.- u. Warenverluste">
+ <account type="13" name="Bestandesveränderungen Handelswaren"/>
+ <account type="13" name="Bestandesveränderungen Produktionsmat."/>
+ </account>
+ <account type="13" name="Energieaufwand zur Leistungserstellung">
+ <account type="13" name="Brennstoffe"/>
+ <account type="13" name="Gas"/>
+ <account type="13" name="Wasser"/>
+ <account type="13" name="Elektrizität"/>
+ <account type="13" name="Betriebsstoffe"/>
+ </account>
+ <account type="13" name="Direkte Einkaufsspesen">
+ <account type="13" name="Direkte Einkaufsspesen"/>
+ </account>
+ <account type="13" name="Materialaufwand">
+ <account type="13" name="Bestandesveränderungen, Materialverluste"/>
+ <account type="13" name="Direkte Einkaufsspesen"/>
+ <account type="13" name="Fremdarbeiten"/>
+ <account type="13" name="Materialaufwand Bereich C"/>
+ <account type="13" name="Materialaufwand Bereich A"/>
+ <account type="13" name="Materialaufwand Bereich B"/>
+ <account type="13" name="Einkaufspreisminderungen Produktion"/>
+ </account>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Sammel- und Fehlbuchungen">
+ <account type="12" name="Fehlbuchungen"/>
+ <account type="12" name="Sammelbuchungen"/>
+ </account>
+ <account type="12" name="Erfolgsrechnung">
+ <account type="12" name="Erfolgsrechnung"/>
+ </account>
+ <account type="12" name="Bilanz">
+ <account type="12" name="Bilanz"/>
+ </account>
+ <account type="12" name="Gewinnverwendung">
+ <account type="12" name="Hilfskonten Gewinnverwendung"/>
+ </account>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Betriebsfremder Erfolg">
+ <account type="12" name="Sonstiger betriebsfremder Erfolg">
+ <account type="12" name="Sonstiger betriebsfremder Aufwand"/>
+ <account type="12" name="Sonstiger betriebsfremder Ertrag"/>
+ </account>
+ <account type="12" name="Minderheitsanteile am Ergebnis"/>
+ <account type="12" name="Erfolg betriebsfremde Finanzanlagen">
+ <account type="12" name="Ertrag betriebsfremde Finanzanlagen"/>
+ <account type="12" name="Aufwand betriebsfremde Finanzanlagen"/>
+ </account>
+ <account type="12" name="Erfolg betriebsfremder Unternehmensteil">
+ <account type="12" name="Erfolg betriebsfr. Unternehmensteil 2"/>
+ <account type="12" name="Erfolg betriebsfr. Unternehmensteil 1"/>
+ </account>
+ <account type="12" name="Erfolg betriebsfremde Liegenschaften">
+ <account type="12" name="Erfolg betriebsfremde Liegenschaft 1"/>
+ <account type="12" name="Erfolg betriebsfremde Liegenschaft 2"/>
+ </account>
+ </account>
+ <account type="12" name="Steuern"/>
+ <account type="12" name="Ausserordentlicher Erfolg">
+ <account type="12" name="Ausserordentlicher Ertrag"/>
+ <account type="12" name="Ausserordentlicher Aufwand"/>
+ </account>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Erfolg aus Nebenbetrieben">
+ <account type="12" name="Erfolg aus Nebenbetrieben">
+ <account type="12" name="Erfolg aus Nebenbetrieb 1"/>
+ <account type="12" name="Erfolg aus Nebenbetrieb 2"/>
+ </account>
+ </account>
+ <account type="12" name="Erfolg aus Finanzanlagen">
+ <account type="12" name="Aufwand aus Finanzanlagen"/>
+ <account type="12" name="Ertrag aus Finanzalnlagen"/>
+ </account>
+ <account type="12" name="Gew. aus Veräusserung v. betr. Anlagever.">
+ <account type="12" name="Gewinne aus Finanzanlagen"/>
+ <account type="12" name="Gewinne aus immobilen Sachanlagen"/>
+ <account type="12" name="Gewinne aus immateriellen Anlagen"/>
+ <account type="12" name="Gewinne aus mobilen Sachanlagen"/>
+ </account>
+ <account type="12" name="Erfolg betriebliche Liegenschaften">
+ <account type="12" name="Erfolg betriebliche Liegenschaft 2">
+ <account type="12" name="Etrag betriebliche Liegenschaft 2"/>
+ <account type="12" name="Aufwand betriebliche Liegenschaft 2 "/>
+ </account>
+ <account type="12" name="Erfolg betriebliche Liegenschaft 1">
+ <account type="12" name="Ertrag betriebliche Liegenschaft 1"/>
+ <account type="12" name="Aufwand betriebliche Liegenschaft 1"/>
+ </account>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Umlaufvermögen">
+ <account type="9" name="Flüssige Mittel und Wertschriften">
+ <account type="9" name="Checks, Besitzwechsel (diskontfähig)"/>
+ <account type="9" name="Andere kurzfristige Anlagen"/>
+ <account type="9" name="Transferkonto"/>
+ <account type="3" name="Kasse"/>
+ <account type="1" name="Bankguthaben"/>
+ <account type="1" name="Postcheckguthaben"/>
+ <account type="9" name="Wertschriften kurzfristig realisierbar"/>
+ <account type="9" name="Eigene Aktien"/>
+ <account type="9" name="Kurzfristige Geldanlagen"/>
+ </account>
+ <account type="9" name="Forderungen"/>
+ <account type="9" name="Aktive Rechnungsabgrenzung">
+ <account type="9" name="Aktive Rechnungsabgr. (Transitorische A)"/>
+ </account>
+ <account type="9" name="Vorräte und angefangene Arbeiten">
+ <account type="9" name="Halbfabrikate"/>
+ <account type="9" name="Vorräte Werkstoffe"/>
+ <account type="9" name="Pflichtlager"/>
+ <account type="9" name="Vorräte Handelswaren"/>
+ <account type="9" name="Waren in Konsignation"/>
+ <account type="9" name="Fertigfabrikate"/>
+ <account type="9" name="Angefangene Arbeiten"/>
+ <account type="9" name="Vorräte Rohstoffe"/>
+ <account type="9" name="Vorräte Hilfs- und Verbrauchsmaterial"/>
+ </account>
+ </account>
+ <account type="9" name="Betriebsfremde Aktiven">
+ <account type="9" name="Betriebsfremde Aktiven">
+ <account type="9" name="Finanzanlagen"/>
+ <account type="9" name="Vorräte und angefangene Arbeiten"/>
+ <account type="9" name="frei Bilanzverlust unter 299"/>
+ <account type="9" name="Mobile Sachanlagen"/>
+ <account type="9" name="Immobile Sachanlagen"/>
+ <account type="9" name="Flüssige Mittel und Wertschriften"/>
+ <account type="9" name="Aktivierter Aufwand"/>
+ <account type="9" name="Kurzfristige Forderungen"/>
+ <account type="9" name="Immaterielle Anlagen"/>
+ <account type="9" name="Aktive Rechnungsabgrenzung"/>
+ </account>
+ </account>
+ <account type="9" name="Anlagevermögen">
+ <account type="9" name="Finanzanlagen">
+ <account type="9" name="Eigene Aktien"/>
+ <account type="9" name="Langf. F'gen ggn. Konzernges."/>
+ <account type="9" name="Langfristige Forderungen ggn. Dritten"/>
+ <account type="9" name="Andere Finanzanlagen"/>
+ <account type="9" name="Wertpapiere des Anlagevermögens"/>
+ <account type="9" name="Langf. F'gen ggn. Aktionären"/>
+ <account type="9" name="Beteiligungen"/>
+ </account>
+ <account type="9" name="Immaterielle Anlagen">
+ <account type="9" name="Patente, Know-How, Rezepte"/>
+ <account type="9" name="Marken, Muster, Modelle, Pläne"/>
+ <account type="9" name="Goodwill"/>
+ <account type="9" name="Lizenzen, Konzessionen, Nutzungsrechte"/>
+ <account type="9" name="Übrige immaterielle Anlagen"/>
+ <account type="9" name="Urheber-, Verlags-, Vertragsrechte"/>
+ </account>
+ <account type="9" name="Immobile Sachanlagen">
+ <account type="9" name="Fabrikgebäude"/>
+ <account type="9" name="Lagergebäude"/>
+ <account type="9" name="Werkstattgebäude, Atelier"/>
+ <account type="9" name="Ausstellungs- und Verkaufsgebäude"/>
+ <account type="9" name="Unbebaute Grundstücke"/>
+ <account type="9" name="Büro- und Verwaltungsgebäude"/>
+ <account type="9" name="Geschäftsliegenschaften"/>
+ <account type="9" name="Wohnhäuser"/>
+ </account>
+ <account type="9" name="Mobile Sachanlagen">
+ <account type="9" name="Maschinen und Apparate Produktion"/>
+ <account type="9" name="Lagereinrichtungen"/>
+ <account type="9" name="Übrige mobile Sachanlagen"/>
+ <account type="9" name="Büromaschinen, EDV-Anlage, Kommunikation"/>
+ <account type="9" name="Feste Einrichtungen und Installationen"/>
+ <account type="9" name="Mobiliar Einrichtungen"/>
+ <account type="9" name="Werkzeuge und Geräte"/>
+ <account type="9" name="Fahrzeuge"/>
+ </account>
+ </account>
+ <account type="9" name="Aktivierter Aufw. &amp; akt. Berichtigung">
+ <account type="9" name="Aktivierter Aufwand &amp; akt. Berichtigung">
+ <account type="9" name="Gründungs-, Kapitalerh'gs- &amp; Org.Aufwand"/>
+ <account type="9" name="Aktive Berichtigungsposten"/>
+ </account>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_CH/common.kmt b/kmymoney2/templates/de_CH/common.kmt
new file mode 100644
index 0000000..3f043ca
--- /dev/null
+++ b/kmymoney2/templates/de_CH/common.kmt
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_CH/acctchrt_common.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Allgemeine Konten</title>
+ <shortdesc>Grundlegende Kontenstruktur</shortdesc>
+ <longdesc>Die meisten Anwender benötigen diese grundlegende Kontenstruktur. Sie finden hier die allgemein üblichen Konten wie Giro-, Sparkonto, Bargeld, Kreditkarte, Erträge und verschiedene Ausgaben.</longdesc>
+ <accounts>
+ <account type="10" name="">
+ <account type="10" name="Barverbindlichkeiten">
+ <account type="4" name="Kreditkarte"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Barvermögen">
+ <account type="1" name="Girokonto"/>
+ <account type="1" name="Sparkonto"/>
+ <account type="3" name="Bargeld"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Telekommunikation">
+ <account type="13" name="Online-Dienste"/>
+ <account type="13" name="Telefon"/>
+ <account type="13" name="Fernsehen"/>
+ </account>
+ <account type="13" name="Lebensmittel"/>
+ <account type="13" name="Versicherungen">
+ <account type="13" name="Krankenversicherung"/>
+ <account type="13" name="Haftpflicht"/>
+ </account>
+ <account type="13" name="Hobbies"/>
+ <account type="13" name="Computer"/>
+ <account type="13" name="Geschenke"/>
+ <account type="13" name="Fahrtkosten">
+ <account type="13" name="Fahrkarten"/>
+ </account>
+ <account type="13" name="Wohnen">
+ <account type="13" name="Miete"/>
+ <account type="13" name="Nebenkosten">
+ <account type="13" name="Strom"/>
+ <account type="13" name="Abfall"/>
+ <account type="13" name="Gas"/>
+ <account type="13" name="Wasser"/>
+ </account>
+ </account>
+ <account type="13" name="Steuern">
+ <account type="13" name="Sozialabgaben"/>
+ <account type="13" name="Solidarzuschlag"/>
+ <account type="13" name="Pflegeversicherung"/>
+ <account type="13" name="Einkommenssteuer"/>
+ <account type="13" name="Rentenversicherung"/>
+ <account type="13" name="Sonstige"/>
+ </account>
+ <account type="13" name="Medikamente"/>
+ <account type="13" name="Kleidung"/>
+ <account type="13" name="Sonstiges">
+ <account type="13" name="Bankgebühren"/>
+ <account type="13" name="Sonstiges"/>
+ </account>
+ <account type="13" name="Bildung">
+ <account type="13" name="Büroartikel"/>
+ <account type="13" name="Abonnements"/>
+ <account type="13" name="Zeitungen"/>
+ <account type="13" name="Bücher"/>
+ </account>
+ <account type="13" name="Spenden"/>
+ <account type="13" name="Unterhaltung">
+ <account type="13" name="Musik/Kino"/>
+ <account type="13" name="Reisen"/>
+ <account type="13" name="Ausgehen"/>
+ <account type="13" name="Sport"/>
+ </account>
+ </account>
+ <account type="16" name=""/>
+ <account type="12" name="">
+ <account type="12" name="Gehalt">
+ <account type="12" name="Zulagen"/>
+ <account type="12" name="Gehalt"/>
+ </account>
+ <account type="12" name="Sonstiges"/>
+ <account type="12" name="Zinsen">
+ <account type="12" name="Girokonto"/>
+ <account type="12" name="Sparkonto"/>
+ <account type="12" name="Sonstige"/>
+ </account>
+ <account type="12" name="Geschenke"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_CH/kids.kmt b/kmymoney2/templates/de_CH/kids.kmt
new file mode 100644
index 0000000..e904479
--- /dev/null
+++ b/kmymoney2/templates/de_CH/kids.kmt
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_CH/acctchrt_kids.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Kinder</title>
+ <shortdesc>Konten im Zusammenhang mit Kindern</shortdesc>
+ <longdesc>Kindergeld, Kindergarten</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Kindergarten"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Gehalt">
+ <account type="12" name="Kindergeld"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_CH/otherasset.kmt b/kmymoney2/templates/de_CH/otherasset.kmt
new file mode 100644
index 0000000..56669ab
--- /dev/null
+++ b/kmymoney2/templates/de_CH/otherasset.kmt
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_CH/acctchrt_otherasset.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Sonstige Sachanlage</title>
+ <shortdesc>Sonstige Sachanlagen</shortdesc>
+ <longdesc>Sonstige Sachanlagen</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Sachanlagen">
+ <account type="9" name="Sonstige"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_CH/otherloan.kmt b/kmymoney2/templates/de_CH/otherloan.kmt
new file mode 100644
index 0000000..d2ca698
--- /dev/null
+++ b/kmymoney2/templates/de_CH/otherloan.kmt
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_CH/acctchrt_otherloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Sonstiger Kredit</title>
+ <shortdesc>Sonstige Kredite</shortdesc>
+ <longdesc>Weitere Kredite</longdesc>
+ <accounts>
+ <account type="10" name="">
+ <account type="10" name="Kredite">
+ <account type="10" name="Sonstige"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_DE/Makefile.am b/kmymoney2/templates/de_DE/Makefile.am
new file mode 100644
index 0000000..f2dbe98
--- /dev/null
+++ b/kmymoney2/templates/de_DE/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/de_DE
+
+template_DATA = houseown.kmt otherasset.kmt kids.kmt full.kmt default_accounts.kmt investment.kmt autoloan.kmt studium.kmt common.kmt brokerage.kmt skr04.kmt otherloan.kmt auto.kmt skr03.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/de_DE/auto.kmt b/kmymoney2/templates/de_DE/auto.kmt
new file mode 100644
index 0000000..a7f6368
--- /dev/null
+++ b/kmymoney2/templates/de_DE/auto.kmt
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_DE/acctchrt_auto.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Autobesitz</title>
+ <shortdesc>Ausgaben von Autobesitzern</shortdesc>
+ <longdesc>Diese Auswahl erstellt Konten, die Ausgaben für ein Auto repräsentieren.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Fahrtkosten">
+ <account type="13" name="Auto">
+ <account type="13" name="Versicherungen"/>
+ <account type="13" name="Abgaben"/>
+ <account type="13" name="Benzin"/>
+ <account type="13" name="Reparaturen"/>
+ <account type="13" name="Parkgebühren"/>
+ </account>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Sachanlagen">
+ <account type="9" name="Auto"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_DE/autoloan.kmt b/kmymoney2/templates/de_DE/autoloan.kmt
new file mode 100644
index 0000000..930eb71
--- /dev/null
+++ b/kmymoney2/templates/de_DE/autoloan.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_DE/acctchrt_autoloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Kredit Auto</title>
+ <shortdesc>Kredit für Autokauf</shortdesc>
+ <longdesc>Falls Sie einen Kredit zum Autokauf besitzen, können Sie mit dieser Auswahl die passenden Konten bekommen.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Fahrtkosten">
+ <account type="13" name="Auto">
+ <account type="13" name="Kreditzinsen"/>
+ </account>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Kredite">
+ <account type="10" name="Auto"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_DE/brokerage.kmt b/kmymoney2/templates/de_DE/brokerage.kmt
new file mode 100644
index 0000000..2f2bc99
--- /dev/null
+++ b/kmymoney2/templates/de_DE/brokerage.kmt
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_DE/acctchrt_brokerage.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Aktienhandel</title>
+ <shortdesc>Konten zum Handel mit Aktien und Fonds</shortdesc>
+ <longdesc>Mit dieser Auswahl werden Konten zum Handel mit Aktien und Aktienfonds erstellt.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Sonstiges">
+ <account type="13" name="Komissionen"/>
+ </account>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Dividenden"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Geldanlagen">
+ <account type="9" name="Aktiendepot">
+ <account type="9" name="Bond"/>
+ <account type="9" name="Aktienfond"/>
+ <account type="9" name="Aktie"/>
+ </account>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_DE/common.kmt b/kmymoney2/templates/de_DE/common.kmt
new file mode 100644
index 0000000..be9424d
--- /dev/null
+++ b/kmymoney2/templates/de_DE/common.kmt
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_DE/acctchrt_common.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Allgemeine Konten</title>
+ <shortdesc>Grundlegende Kontenstruktur</shortdesc>
+ <longdesc>Die meisten Anwender benötigen diese grundlegende Kontenstruktur. Sie finden hier die allgemein üblichen Konten wie Giro-, Sparkonto, Bargeld, Kreditkarte, Erträge und verschiedene Ausgaben. Wenn Sie aber einen SKR verwenden wollen, brauchen Sie sie nicht.</longdesc>
+ <accounts>
+ <account type="10" name="">
+ <account type="10" name="Barverbindlichkeiten">
+ <account type="4" name="Kreditkarte"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Barvermögen">
+ <account type="1" name="Girokonto"/>
+ <account type="1" name="Sparkonto"/>
+ <account type="3" name="Bargeld"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Telekommunikation">
+ <account type="13" name="Online-Dienste"/>
+ <account type="13" name="Telefon"/>
+ <account type="13" name="Fernsehen"/>
+ </account>
+ <account type="13" name="Lebensmittel"/>
+ <account type="13" name="Versicherungen">
+ <account type="13" name="Krankenversicherung"/>
+ <account type="13" name="Haftpflicht"/>
+ </account>
+ <account type="13" name="Hobbies"/>
+ <account type="13" name="Computer"/>
+ <account type="13" name="Geschenke"/>
+ <account type="13" name="Fahrtkosten">
+ <account type="13" name="Fahrkarten"/>
+ </account>
+ <account type="13" name="Wohnen">
+ <account type="13" name="Miete"/>
+ <account type="13" name="Nebenkosten">
+ <account type="13" name="Strom"/>
+ <account type="13" name="Abfall"/>
+ <account type="13" name="Gas"/>
+ <account type="13" name="Wasser"/>
+ </account>
+ </account>
+ <account type="13" name="Steuern">
+ <account type="13" name="Sozialabgaben"/>
+ <account type="13" name="Solidarzuschlag"/>
+ <account type="13" name="Pflegeversicherung"/>
+ <account type="13" name="Einkommenssteuer"/>
+ <account type="13" name="Rentenversicherung"/>
+ <account type="13" name="Sonstige"/>
+ </account>
+ <account type="13" name="Medikamente"/>
+ <account type="13" name="Kleidung"/>
+ <account type="13" name="Sonstiges">
+ <account type="13" name="Bankgebühren"/>
+ <account type="13" name="Sonstiges"/>
+ </account>
+ <account type="13" name="Spenden"/>
+ <account type="13" name="Unterhaltung">
+ <account type="13" name="Musik/Kino"/>
+ <account type="13" name="Reisen"/>
+ <account type="13" name="Ausgehen"/>
+ <account type="13" name="Sport"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Büroartikel"/>
+ <account type="13" name="Abonnements"/>
+ <account type="13" name="Zeitungen"/>
+ <account type="13" name="Bücher"/>
+ </account>
+ <account type="16" name=""/>
+ <account type="12" name="">
+ <account type="12" name="Gehalt">
+ <account type="12" name="Zulagen"/>
+ <account type="12" name="Gehalt"/>
+ </account>
+ <account type="12" name="Sonstiges"/>
+ <account type="12" name="Zinsen">
+ <account type="12" name="Girokonto"/>
+ <account type="12" name="Sparkonto"/>
+ <account type="12" name="Sonstige"/>
+ </account>
+ <account type="12" name="Geschenke"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_DE/default_accounts.kmt b/kmymoney2/templates/de_DE/default_accounts.kmt
new file mode 100644
index 0000000..7add875
--- /dev/null
+++ b/kmymoney2/templates/de_DE/default_accounts.kmt
@@ -0,0 +1,263 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>KMyMoney 0.8 Standardvorlage</title>
+ <shortdesc></shortdesc>
+ <longdesc></longdesc>
+ <accounts>
+ <account name="" type="12">
+ <account name="Eigenverbrauch" type="12">
+ <account name="Eigenverbrauch 16%" type="12"/>
+ <account name="Eigenverbrauch 7%" type="12"/>
+ <account name="Eigenverbrauch steuerfrei" type="12"/>
+ </account>
+ <account name="Einkünfte aus Kapitalanlagen" type="12">
+ <account name="Dividenden" type="12"/>
+ <account name="Kapitalgewinne" type="12"/>
+ <account name="Zinsen" type="12"/>
+ <account name="Zinsen (steuerfrei)" type="12"/>
+ </account>
+ <account name="Lohn und Gehalt" type="12">
+ <account name="Arbeitgeberanteil" type="12"/>
+ <account name="Bonus" type="12"/>
+ <account name="Bruttovergütung" type="12"/>
+ <account name="Dienstwagen" type="12"/>
+ <account name="Direktversicherung" type="12"/>
+ <account name="Geldwerte Vorteile" type="12"/>
+ <account name="Kindergeld" type="12"/>
+ <account name="Nettovergütung" type="12"/>
+ <account name="Provision" type="12"/>
+ <account name="Steuerfreie Einkünfte" type="12"/>
+ <account name="Überstundenvergütung" type="12"/>
+ <account name="Vermögenswirksame Leistungen" type="12"/>
+ </account>
+ <account name="Renten" type="12">
+ <account name="Betriebsrente" type="12"/>
+ <account name="Gesetzliche Rente" type="12"/>
+ <account name="Private Altersvorsorge" type="12"/>
+ </account>
+ <account name="Sonstige Einkünfte" type="12">
+ <account name="Aktienoptionsrecht" type="12"/>
+ <account name="Arbeitslosengeld" type="12"/>
+ <account name="Erhaltene Geschenke" type="12"/>
+ <account name="Erhaltene Tilgungszahlungen" type="12"/>
+ <account name="Lottogewinne" type="12"/>
+ <account name="Steuererstattung" type="12"/>
+ <account name="Unterhalt für Kinder" type="12"/>
+ </account>
+ <account name="Umsatzerlöse" type="12">
+ <account name="Erlöse 0%" type="12"/>
+ <account name="Erlöse 16%" type="12"/>
+ <account name="Erlöse 7%" type="12"/>
+ <account name="Erlöse aus Anlagenverkäufen 16%" type="12"/>
+ <account name="Provisionserlöse" type="12"/>
+ </account>
+ <account name="Umsatzsteuer" type="12">
+ <account name="Vorjahr" type="12"/>
+ <account name="Vorauszahlung" type="12"/>
+ </account>
+ <account name="Zinsertrag" type="12">
+ <account name="Sonstige Zinsen und ähnliche Erträge" type="12"/>
+ </account>
+ </account>
+ <account name="" type="13">
+ <account name="Abschreibungen" type="13">
+ <account name="Abschr. auf geringwertige Güter" type="13"/>
+ <account name="Abschr. auf Sachanlagen" type="13"/>
+ </account>
+ <account name="Anlagenabgänge" type="13">
+ <account name="Anlagenabgänge bei Buchgewinn" type="13"/>
+ <account name="Anlagenabgänge bei Buchverlust" type="13"/>
+ </account>
+ <account name="Anlagevermögen" type="13">
+ <account name="Andere Anlagen" type="13"/>
+ <account name="Betriebsausstattung" type="13"/>
+ <account name="Büroeinrichtung" type="13"/>
+ <account name="EDV-Software" type="13"/>
+ <account name="Geringwertige Wirtschaftsgüter" type="13"/>
+ <account name="Geschäftsausstattung" type="13"/>
+ <account name="Geschäftsbauten" type="13"/>
+ <account name="Maschinen" type="13"/>
+ <account name="Pkw" type="13"/>
+ <account name="Sonst. Betr.- u. Gesch.-Ausstat." type="13"/>
+ <account name="Technische Anlagen und Maschinen" type="13"/>
+ <account name="Werkzeuge" type="13"/>
+ </account>
+ <account name="Ausbildung" type="13">
+ <account name="Fachbücher" type="13"/>
+ <account name="Nachhilfe" type="13"/>
+ <account name="Schulgeld" type="13"/>
+ </account>
+ <account name="Auto" type="13">
+ <account name="Kraftstoff" type="13"/>
+ <account name="Wartung" type="13"/>
+ </account>
+ <account name="Bankgebühren" type="13">
+ <account name="Kontoführungsgebühren" type="13"/>
+ <account name="Sollzinsen" type="13"/>
+ </account>
+ <account name="Barentnahme" type="13"/>
+ <account name="Beiträge und Vers." type="13">
+ <account name="Beiträge" type="13"/>
+ <account name="Sonstige Abgaben" type="13"/>
+ <account name="Versicherungen" type="13"/>
+ </account>
+ <account name="Bürobedarf" type="13">
+ <account name="Porto" type="13"/>
+ <account name="Telefax" type="13"/>
+ <account name="Telefon" type="13"/>
+ <account name="Internet" type="13"/>
+ </account>
+ <account name="Essen" type="13">
+ <account name="Lebensmittel" type="13"/>
+ <account name="Restaurants" type="13"/>
+ </account>
+ <account name="Freizeit" type="13">
+ <account name="Bücher/Zeitschriften" type="13"/>
+ <account name="Film-/Videoverleihgebühren" type="13"/>
+ <account name="Gästebewirtung" type="13"/>
+ <account name="Kassetten/CDs/DVDs" type="13"/>
+ <account name="Spielzeug/Spiele" type="13"/>
+ <account name="Sportartikel" type="13"/>
+ <account name="Sportveranstaltungen" type="13"/>
+ <account name="Theater/Oper" type="13"/>
+ </account>
+ <account name="Geldwerte Vorteile" type="13">
+ <account name="Dienstwagen" type="13"/>
+ <account name="Sonstige" type="13"/>
+ </account>
+ <account name="Geschenke" type="13"/>
+ <account name="Gesundheit" type="13">
+ <account name="Arzneimittel" type="13"/>
+ <account name="Krankengymnastik" type="13"/>
+ <account name="Krankenhaus" type="13"/>
+ <account name="Sehhilfe" type="13"/>
+ <account name="Zahnbehandlung/Zahnersatz" type="13"/>
+ </account>
+ <account name="Haushalt" type="13">
+ <account name="Einrichtung" type="13"/>
+ </account>
+ <account name="Haustiere" type="13">
+ <account name="Futter" type="13"/>
+ <account name="Sonstiges" type="13"/>
+ <account name="Tierarzt" type="13"/>
+ </account>
+ <account name="Kfz-Kosten" type="13">
+ <account name="Fremdfahrzeuge" type="13"/>
+ <account name="Garagenmiete" type="13"/>
+ <account name="Kfz-Steuern" type="13"/>
+ <account name="Kfz-Versicherungen" type="13"/>
+ <account name="Lfd. Kfz-Betriebskosten" type="13"/>
+ <account name="Sonstige Kfz-Kosten" type="13"/>
+ </account>
+ <account name="Kinderbetreuung" type="13"/>
+ <account name="Kleidung" type="13"/>
+ <account name="Körperpflege" type="13"/>
+ <account name="Kredit" type="13">
+ <account name="Kreditzinsen" type="13"/>
+ </account>
+ <account name="Personalkosten" type="13">
+ <account name="Aushilfslöhne" type="13"/>
+ <account name="Beiträge Berufsgenossenschaft" type="13"/>
+ <account name="Gehälter" type="13"/>
+ <account name="Gesetzliche soz. Aufwendungen" type="13"/>
+ <account name="Löhne" type="13"/>
+ <account name="Lohnsteuer Aushilfen" type="13"/>
+ <account name="Vermögenswirksame Leistungen" type="13"/>
+ </account>
+ <account name="Raumkosten" type="13">
+ <account name="Gas, Strom, Wasser" type="13"/>
+ <account name="Heizung" type="13"/>
+ <account name="Instandhaltung betr. Räume" type="13"/>
+ <account name="Miete" type="13"/>
+ <account name="Reinigung" type="13"/>
+ <account name="Sonstige Raumkosten" type="13"/>
+ </account>
+ <account name="Rechts- und Beratungskosten" type="13">
+ <account name="Abschluss- und Prüfungskosten" type="13"/>
+ </account>
+ <account name="Reisekosten" type="13">
+ <account name="km-Geld-Erstattung 8,7%" type="13"/>
+ <account name="Reisekosten 0%" type="13"/>
+ <account name="Reisekosten Arbeitnehmer 10,5%" type="13"/>
+ <account name="Reisekosten Arbeitnehmer 13,1%" type="13"/>
+ <account name="Reisekosten Unternehmer 6,1%" type="13"/>
+ </account>
+ <account name="Repräsentationskosten" type="13">
+ <account name="Bewirtungskosten" type="13"/>
+ <account name="Geschenke bis xx Euro" type="13"/>
+ <account name="Werbekosten" type="13"/>
+ </account>
+ <account name="Sonstige Kosten" type="13">
+ <account name="Ausgangsfrachten" type="13"/>
+ <account name="Betriebsbedarf" type="13"/>
+ <account name="Fremdarbeiten" type="13"/>
+ <account name="Kaufleasing" type="13"/>
+ <account name="Kosten des Geldverkehrs" type="13"/>
+ <account name="Mieten für Einrichtungen" type="13"/>
+ <account name="Mietleasing" type="13"/>
+ <account name="Reparatur und Instandhaltung" type="13"/>
+ <account name="Sonstige betriebl. Aufwendungen" type="13"/>
+ <account name="Sonstige Betriebssteuern" type="13"/>
+ <account name="Transportversicherungen" type="13"/>
+ <account name="Verkaufsprovisionen" type="13"/>
+ <account name="Verpackungsmaterial" type="13"/>
+ <account name="Werkzeug und Kleingeräte" type="13"/>
+ <account name="Zeitschriften/Bücher" type="13"/>
+ </account>
+ <account name="Sozialversicherung" type="13">
+ <account name="Arbeitslosenversicherung" type="13"/>
+ <account name="Krankenversicherung" type="13"/>
+ <account name="Pflegeversicherung" type="13"/>
+ <account name="Rentenversicherung" type="13"/>
+ </account>
+ <account name="Spenden" type="13"/>
+ <account name="Steuern" type="13">
+ <account name="Erbschaftsteuer" type="13"/>
+ <account name="Gewerbesteuer" type="13"/>
+ <account name="Grundsteuern" type="13"/>
+ <account name="Kapitalertragssteuer" type="13"/>
+ <account name="Kirchensteuer" type="13"/>
+ <account name="Lohn-/Einkommensteuer" type="13"/>
+ <account name="Solidaritätszuschlag" type="13"/>
+ <account name="Sonstige Steuern" type="13"/>
+ </account>
+ <account name="Umsatzsteuer" type="13">
+ <account name="Vorjahr" type="13"/>
+ <account name="Vorauszahlung" type="13"/>
+ </account>
+ <account name="Urlaub" type="13">
+ <account name="An- und Abreise" type="13"/>
+ <account name="Unterkunft" type="13"/>
+ </account>
+ <account name="Verschiedenes" type="13"/>
+ <account name="Versicherung" type="13">
+ <account name="Kraftfahrzeug" type="13"/>
+ <account name="Hausrat" type="13"/>
+ <account name="Krankenversicherung" type="13"/>
+ <account name="Lebensversicherung" type="13"/>
+ </account>
+ <account name="Wareneinsatz" type="13">
+ <account name="Wareneingang 16%" type="13"/>
+ <account name="Wareneingang 7%" type="13"/>
+ </account>
+ <account name="Werbungskosten" type="13">
+ <account name="Fachliteratur" type="13"/>
+ <account name="Fahrten ÖPNV" type="13"/>
+ </account>
+ <account name="Zahlungen" type="13">
+ <account name="Gas" type="13"/>
+ <account name="Haus- und Grundbesitzabgaben" type="13"/>
+ <account name="Hypothekenzinsen" type="13"/>
+ <account name="Kabelfernsehen" type="13"/>
+ <account name="Fernseh- und Rundfunkgebühren (GEZ)" type="13"/>
+ <account name="Miete" type="13"/>
+ <account name="Müllgebühren" type="13"/>
+ <account name="Strom" type="13"/>
+ <account name="Telefon" type="13"/>
+ <account name="Wasser/Abwasser" type="13"/>
+ </account>
+ <account name="Zinsaufwand" type="13"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_DE/full.kmt b/kmymoney2/templates/de_DE/full.kmt
new file mode 100644
index 0000000..96cc9d7
--- /dev/null
+++ b/kmymoney2/templates/de_DE/full.kmt
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_DE/acctchrt_full.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Alle Konten</title>
+ <shortdesc>Alle vorgeschlagenen Konten</shortdesc>
+ <longdesc>Dies ist die komplette Liste aller vorgeschlagenen Konten.</longdesc>
+ <accounts>
+ <account type="10" name="">
+ <account type="10" name="Barverbindlichkeiten">
+ <account type="4" name="Kreditkarte"/>
+ </account>
+ <account type="10" name="Kredite">
+ <account type="10" name="Sonstige"/>
+ <account type="10" name="Auto"/>
+ <account type="10" name="Bausparvertrag"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Geldanlagen">
+ <account type="9" name="Währungskonto"/>
+ <account type="9" name="Lebensversicherung"/>
+ <account type="9" name="Bausparvertrag"/>
+ <account type="9" name="Aktiendepot">
+ <account type="9" name="Bond"/>
+ <account type="9" name="Aktienfond"/>
+ <account type="9" name="Aktie"/>
+ </account>
+ <account type="9" name="Festgeld"/>
+ <account type="9" name="Investmentfonds"/>
+ </account>
+ <account type="9" name="Barvermögen">
+ <account type="1" name="Girokonto"/>
+ <account type="1" name="Sparkonto"/>
+ <account type="3" name="Bargeld"/>
+ </account>
+ <account type="9" name="Sachanlagen">
+ <account type="9" name="Sonstige"/>
+ <account type="9" name="Auto"/>
+ <account type="9" name="Haus"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Telekommunikation">
+ <account type="13" name="Online-Dienste"/>
+ <account type="13" name="Telefon"/>
+ <account type="13" name="Fernsehen"/>
+ </account>
+ <account type="13" name="Lebensmittel"/>
+ <account type="13" name="Versicherungen">
+ <account type="13" name="Lebensversicherung"/>
+ <account type="13" name="Hausrat"/>
+ <account type="13" name="Krankenversicherung"/>
+ <account type="13" name="Haftpflicht"/>
+ </account>
+ <account type="13" name="Hobbies"/>
+ <account type="13" name="Computer"/>
+ <account type="13" name="Geschenke"/>
+ <account type="13" name="Fahrtkosten">
+ <account type="13" name="Auto">
+ <account type="13" name="Versicherungen"/>
+ <account type="13" name="Kreditzinsen"/>
+ <account type="13" name="Reparaturen"/>
+ <account type="13" name="Abgaben"/>
+ <account type="13" name="Benzin"/>
+ <account type="13" name="Parkgebühren"/>
+ </account>
+ <account type="13" name="Fahrkarten"/>
+ </account>
+ <account type="13" name="Kindergarten"/>
+ <account type="13" name="Wohnen">
+ <account type="13" name="Reparaturen"/>
+ <account type="13" name="Miete"/>
+ <account type="13" name="Grundsteuer"/>
+ <account type="13" name="Nebenkosten">
+ <account type="13" name="Strom"/>
+ <account type="13" name="Abfall"/>
+ <account type="13" name="Gas"/>
+ <account type="13" name="Wasser"/>
+ </account>
+ <account type="13" name="Bausparvertrag"/>
+ </account>
+ <account type="13" name="Steuern">
+ <account type="13" name="Sozialabgaben"/>
+ <account type="13" name="Zinsabschlagsteuer"/>
+ <account type="13" name="Solidarzuschlag"/>
+ <account type="13" name="Pflegeversicherung"/>
+ <account type="13" name="Einkommenssteuer"/>
+ <account type="13" name="Rentenversicherung"/>
+ <account type="13" name="Sonstige"/>
+ </account>
+ <account type="13" name="Medikamente"/>
+ <account type="13" name="Kleidung"/>
+ <account type="13" name="Sonstiges">
+ <account type="13" name="Bankgebühren"/>
+ <account type="13" name="Komissionen"/>
+ <account type="13" name="Sonstiges Bar"/>
+ </account>
+ <account type="13" name="Bildung">
+ <account type="13" name="Büroartikel"/>
+ <account type="13" name="Studiengebühren"/>
+ <account type="13" name="Abonnements"/>
+ <account type="13" name="Zeitungen"/>
+ <account type="13" name="Bücher"/>
+ </account>
+ <account type="13" name="Spenden"/>
+ <account type="13" name="Unterhaltung">
+ <account type="13" name="Musik/Kino"/>
+ <account type="13" name="Reisen"/>
+ <account type="13" name="Ausgehen"/>
+ <account type="13" name="Sport"/>
+ </account>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="Anfangsbestand"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Dividenden"/>
+ <account type="12" name="BAFöG"/>
+ <account type="12" name="Gehalt">
+ <account type="12" name="Kindergeld"/>
+ <account type="12" name="Zulagen"/>
+ <account type="12" name="Gehalt"/>
+ </account>
+ <account type="12" name="Sonstiges"/>
+ <account type="12" name="Zinsen">
+ <account type="12" name="Girokonto"/>
+ <account type="12" name="Bausparvertrag"/>
+ <account type="12" name="Sparkonto"/>
+ <account type="12" name="Festgeld"/>
+ <account type="12" name="Investmentfonds"/>
+ <account type="12" name="Sonstige"/>
+ </account>
+ <account type="12" name="Geschenke"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_DE/houseown.kmt b/kmymoney2/templates/de_DE/houseown.kmt
new file mode 100644
index 0000000..783a0fc
--- /dev/null
+++ b/kmymoney2/templates/de_DE/houseown.kmt
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_DE/acctchrt_houseown.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Hausbesitz</title>
+ <shortdesc>Konten für Hausbesitzer/innen</shortdesc>
+ <longdesc>Konten für Hausbesitzer/innen</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Wohnen">
+ <account type="13" name="Reparaturen"/>
+ <account type="13" name="Grundsteuer"/>
+ <account type="13" name="Bausparvertrag"/>
+ </account>
+ <account type="13" name="Versicherungen">
+ <account type="13" name="Hausrat"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Kredite">
+ <account type="10" name="Bausparvertrag"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Sachanlagen">
+ <account type="9" name="Haus"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_DE/investment.kmt b/kmymoney2/templates/de_DE/investment.kmt
new file mode 100644
index 0000000..1798bbd
--- /dev/null
+++ b/kmymoney2/templates/de_DE/investment.kmt
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_DE/acctchrt_investment.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Geldanlagen</title>
+ <shortdesc>Konten für Geldanlagen</shortdesc>
+ <longdesc>Konten für Investitionen in Geldanlagen: Bausparvertrag, Lebensversicherung, Festgeld, Investmentfonds.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Versicherungen">
+ <account type="13" name="Lebensversicherung"/>
+ </account>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Zinsen">
+ <account type="12" name="Investmentfonds"/>
+ <account type="12" name="Bausparvertrag"/>
+ <account type="12" name="Festgeld"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Geldanlagen">
+ <account type="9" name="Festgeld"/>
+ <account type="9" name="Investmentfonds"/>
+ <account type="9" name="Bausparvertrag"/>
+ <account type="9" name="Lebensversicherung"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_DE/kids.kmt b/kmymoney2/templates/de_DE/kids.kmt
new file mode 100644
index 0000000..b59dc5a
--- /dev/null
+++ b/kmymoney2/templates/de_DE/kids.kmt
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_DE/acctchrt_kids.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Kinder</title>
+ <shortdesc>Konten im Zusammenhang mit Kindern</shortdesc>
+ <longdesc>Kindergeld, Kindergarten</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Kindergarten"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Gehalt">
+ <account type="12" name="Kindergeld"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_DE/otherasset.kmt b/kmymoney2/templates/de_DE/otherasset.kmt
new file mode 100644
index 0000000..23fd810
--- /dev/null
+++ b/kmymoney2/templates/de_DE/otherasset.kmt
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_DE/acctchrt_otherasset.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Sonstige Sachanlage</title>
+ <shortdesc>Sonstige Sachanlagen</shortdesc>
+ <longdesc>Sonstige Sachanlagen</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Sachanlagen">
+ <account type="9" name="Sonstige"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_DE/otherloan.kmt b/kmymoney2/templates/de_DE/otherloan.kmt
new file mode 100644
index 0000000..062cd75
--- /dev/null
+++ b/kmymoney2/templates/de_DE/otherloan.kmt
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_DE/acctchrt_otherloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Sonstiger Kredit</title>
+ <shortdesc>Sonstige Kredite</shortdesc>
+ <longdesc>Weitere Kredite</longdesc>
+ <accounts>
+ <account type="10" name="">
+ <account type="10" name="Kredite">
+ <account type="10" name="Sonstige"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_DE/skr03.kmt b/kmymoney2/templates/de_DE/skr03.kmt
new file mode 100644
index 0000000..42effc9
--- /dev/null
+++ b/kmymoney2/templates/de_DE/skr03.kmt
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_DE/acctchrt_skr03.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Kontenrahmen SKR03</title>
+ <shortdesc>Standardkontenrahmen SKR03</shortdesc>
+ <longdesc>Beta Version des Kontenrahmes SKR03 zum Erweitern und Umstrukturieren. Der Kontenrahmen sollte den eigenen Bedürfnissen angepasst werden was Struktur und Kontenbezeichnungen angeht. WICHTIG!: Die Privatkonten fließen nicht in die Berechnung des Berichtes Bilanz, sind jedoch im Bericht Bilanz aufgeführt. Die im Bericht Bilanz aufgeführte Passiva "Gewinnrücklagen" gibt den Saldo der GuV aus. Die Anlage dieses Kontenrahmens wurde von der Firma LiHAS - Linuxhaus Stuttgart - unterstützt.</longdesc>
+ <accounts>
+ <account type="10" name="">
+ <account type="10" name="Umsatzsteuer">
+ <account type="10" name="1780 Umsatzsteuer-Vorauszahlung"/>
+ <account type="10" name="1790 Umsatzsteuer Vorjahr"/>
+ <account type="10" name="1781 Umsatzsteuer-Vorauszahlung 1/11"/>
+ <account type="10" name="1771 Umsatzsteuer 7%"/>
+ <account type="10" name="1775 Umsatzsteuer 19%"/>
+ <account type="10" name="1791 Umsatzsteuer frühere Jahre"/>
+ <account type="10" name="1786 Umsatzsteuer § 13b UStG 19%"/>
+ </account>
+ <account type="10" name="Verbindlichkeiten"/>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="Saldenvortragskonten">
+ <account type="16" name="9009 Saldenvorträge Kreditoren"/>
+ <account type="16" name="9008 Saldenvorträge Debitoren"/>
+ <account type="16" name="9000 Saldenvortrag Sachkonten"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Anlage- u. Kapitalkonten 0">
+ <account type="9" name="0565 Darlehen"/>
+ <account type="9" name="0420 Büroeinrichtung"/>
+ <account type="9" name="0027 EDV-Software"/>
+ <account type="9" name="0400 Betriebsausstattung"/>
+ <account type="9" name="0410 Geschäftsausstattung"/>
+ <account type="9" name="0210 Maschinen"/>
+ <account type="9" name="0430 Ladeneinrichtung"/>
+ </account>
+ <account type="9" name="Wareneingangs- u. Bestandskonten 3">
+ <account type="9" name="3400 Wareneingang VSt. 19%"/>
+ <account type="9" name="3120 Leistungen §13b UStG 19% Vorsteuer, 19% Umsatzsteuer"/>
+ </account>
+ <account type="9" name="Finanzkonten 1">
+ <account type="9" name="1371 Gewinnermittlung §4/3 nicht Ergebniswirksam"/>
+ <account type="9" name="1100 Postbank"/>
+ <account type="9" name="1576 Abziehbare VSt. nach §13b UStG 19%"/>
+ <account type="9" name="1200 Bankkonto"/>
+ <account type="9" name="1590 Durchlaufende Posten"/>
+ <account type="9" name="1571 Abziehbare VSt. 7%"/>
+ <account type="9" name="1575 Abziehbare VSt. 19%"/>
+ </account>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Ertragskonten 2">
+ <account type="12" name="2700 Sonstige Erträge"/>
+ <account type="12" name="2500 Außerordentliche Erträge"/>
+ <account type="12" name="2650 sonstige Zinsen und ähnliche Erträge"/>
+ </account>
+ <account type="12" name="Erlöskonten 8">
+ <account type="12" name="8400 Erlöse USt. 19%"/>
+ <account type="12" name="8300 Erlöse USt. 7%"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Werbe-/Reisekosten">
+ <account type="13" name="4610 Werbekosten"/>
+ <account type="13" name="4653 Aufmerksamkeiten"/>
+ <account type="13" name="4665 nicht abzugsfähige Betriebsausg. aus Werbe-, Repräs.- u. Reisekosten"/>
+ <account type="13" name="4670 Reisekosten Unternehmer"/>
+ </account>
+ <account type="13" name="Personalkosten">
+ <account type="13" name="4190 Aushilfslöhne"/>
+ <account type="13" name="4130 gesetzliche soziale Aufwendungen"/>
+ <account type="13" name="4170 Vermögenswirksame Leistungen"/>
+ <account type="13" name="4120 Gehälter"/>
+ <account type="13" name="4165 Aufwendungen für Altersvorsorge"/>
+ </account>
+ <account type="13" name="verschiedene Kosten">
+ <account type="13" name="4985 Werkzeuge und Kleingeräte"/>
+ <account type="13" name="4945 Fortbildungskosten"/>
+ <account type="13" name="4920 Telekom"/>
+ <account type="13" name="4940 Zeitschriften, Bücher"/>
+ <account type="13" name="4922 Internet"/>
+ <account type="13" name="4930 Bürobedarf"/>
+ <account type="13" name="4955 Buchführungskosten"/>
+ <account type="13" name="4921 Mobilfunk"/>
+ <account type="13" name="4970 Nebenkosten des Geldverkehrs"/>
+ <account type="13" name="4910 Porto"/>
+ <account type="13" name="4957 Abschluß- u. Prüfungskosten"/>
+ </account>
+ <account type="13" name="Abschreibungen">
+ <account type="13" name="4855 Sofortabschreibung GWG"/>
+ </account>
+ <account type="13" name="Zinsaufwendungen">
+ <account type="13" name="2110 Zinsaufwendungen für kurzfristige Verbindlichkeiten"/>
+ <account type="13" name="2121 Zinsaufwendungen für KFZ Finanzierung"/>
+ </account>
+ <account type="13" name="Raumkosten">
+ <account type="13" name="4210 Miete und Nebenkosten"/>
+ <account type="13" name="4240 Gas, Wasser, Strom (Verwaltung, Vertrieb)"/>
+ <account type="13" name="4250 Reinigung"/>
+ </account>
+ <account type="13" name="Reparatur/Instandhaltung">
+ <account type="13" name="4805 Reparatur u. Instandh. von Anlagen/Maschinen u. Betriebs- u. Geschäftsausst."/>
+ </account>
+ <account type="13" name="Kfz-Kosten">
+ <account type="13" name="4540 Kfz-Reparaturen"/>
+ <account type="13" name="4530 laufende Kfz-Betriebskosten"/>
+ <account type="13" name="4570 Fremdfahrzeuge"/>
+ <account type="13" name="4520 Kfz-Versicherungen"/>
+ <account type="13" name="4510 Kfz-Steuer"/>
+ <account type="13" name="4580 sonstige Kfz-Kosten"/>
+ </account>
+ <account type="13" name="Versicherungsbeiträge">
+ <account type="13" name="4380 Beiträge"/>
+ <account type="13" name="4390 sonstige Ausgaben"/>
+ <account type="13" name="4396 steuerlich abzugsfähige Verspätungszuschläge und Zwangsgelder"/>
+ <account type="13" name="4360 Versicherungen"/>
+ </account>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="Privatentnahmen/-einlagen">
+ <account type="16" name="1830 Sonderausgaben unbeschränkt abzugsfähig"/>
+ <account type="16" name="1820 Sonderausgaben beschränkt abzugsfähig"/>
+ <account type="16" name="1810 Privatsteuern"/>
+ <account type="16" name="1800 Privatentnahme allgemein"/>
+ <account type="16" name="1890 Privateinlagen"/>
+ <account type="16" name="1850 Außergewöhnliche Belastungen"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_DE/skr04.kmt b/kmymoney2/templates/de_DE/skr04.kmt
new file mode 100644
index 0000000..4828bb1
--- /dev/null
+++ b/kmymoney2/templates/de_DE/skr04.kmt
@@ -0,0 +1,1196 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_DE/acctchrt_skr04.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Kontenrahmen SKR04</title>
+ <shortdesc>Standardkontenrahmen SKR04, Stand 2005</shortdesc>
+ <longdesc>BETA-Version eines Kontenrahmes SKR04 für 2005. Mehr Informationen unter http://linuxwiki.de/GnuCash/skr04</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Erträge aus Verlustübernahme und aufgrund einer Gewinngemeinschaft, eines Gewinn- oder Teilgewinnabführungsvertrags erhaltene Gewinne">
+ <account type="12" name="Erträge aus Verlustübernahme"/>
+ <account type="12" name="Erhaltene Gewinne aufgrund eines Gewinn- oder Teilgewinnabführungsvertrags"/>
+ <account type="12" name="Erhaltene Gewinne aufgrund einer Gewinngemeinschaft"/>
+ </account>
+ <account type="12" name="- davon aus verbundenen Unternehmen">
+ <account type="12" name="Sonstige Zinserträge aus verbundenen Unternehmen"/>
+ <account type="12" name="Zinsähnliche Erträge aus verbundenen Unternehmen"/>
+ <account type="12" name="Sonstige Zinsen und ähnliche Erträge aus verbundenen Unternehmen"/>
+ <account type="12" name="Laufende Erträge aus Anteilen an Kapitalgesellschaften (verbundene Unternehmen) 100 % / 50% steuerfrei"/>
+ <account type="12" name="Diskonterträge aus verbundenen Unternehmen"/>
+ </account>
+ <account type="12" name="Sonstige Zinsen und ähnliche Erträge">
+ <account type="12" name="Zinsähnliche Erträge"/>
+ <account type="12" name="Zinserträge § 233a AO"/>
+ <account type="12" name="Sonstige Zinserträge"/>
+ <account type="12" name="Diskonterträge"/>
+ <account type="12" name="Laufende Erträge aus Anteilen an Kapitalgesellschaften (Umlaufvermögen) 100 %/50 % steuerfrei"/>
+ <account type="12" name="Zinserträge § 233a AO Sonderfall Anlage A KSt"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="B. Umlaufvermögen">
+ <account type="9" name="III. Wertpapiere">
+ <account type="9" name="03. sonstige Wertpapiere">
+ <account type="9" name="Schecks"/>
+ <account type="9" name="Andere Wertpapiere mit unwesentlichen Wertschwankungen im Sinne Textziffer 18 DRS 2"/>
+ <account type="9" name="Finanzwechsel"/>
+ <account type="9" name="Wertpapieranlagen im Rahmen der kurzfristigen Finanzdisposition"/>
+ </account>
+ <account type="9" name="02. Eigene Anteile"/>
+ <account type="9" name="01. Anteile an verbundenen Unternehmen (Umlaufvermögen)">
+ <account type="9" name="Anteile an herrschender oder mit Mehrheit beteiligter Gesellschaft"/>
+ </account>
+ </account>
+ <account type="9" name="IV. Kassenbestand, Bundesbankguthaben, Guthaben bei Kreditinstituten und Schecks">
+ <account type="1" name="Bank"/>
+ <account type="1" name="LZB-Guthaben"/>
+ <account type="1" name="Postbank">
+ <account type="1" name="Postbank Dortmund"/>
+ </account>
+ <account type="9" name="Schecks"/>
+ <account type="1" name="Finanzmittelanlagen im Rahmen der kurzfristigen Finanzdisposition"/>
+ <account type="3" name="Kassenbestand">
+ <account type="3" name="Kasse"/>
+ </account>
+ <account type="1" name="Bundesbankguthaben"/>
+ </account>
+ <account type="9" name="I. Vorräte">
+ <account type="9" name="02. Unfertige Erzeugnisse, unfertige Leistungen (Bestand)">
+ <account type="9" name="Unfertige Leistungen"/>
+ <account type="9" name="In Arbeit befindliche Aufträge"/>
+ <account type="9" name="Unfertige Erzeugnisse"/>
+ <account type="9" name="In Ausführung befindl. Bauaufträge"/>
+ </account>
+ <account type="9" name="05. Erhaltene Anzahlungen auf Bestellungen">
+ <account type="9" name="Erhaltene Anzahlungen 16% MWSt"/>
+ <account type="9" name="Erhaltene Anzahlungen 7% MWSt"/>
+ </account>
+ <account type="9" name="03. Fertige Erzeugnisse und Waren (Bestand)">
+ <account type="9" name="Waren (Bestand)">
+ <account type="9" name="Stein"/>
+ <account type="9" name="Marmor"/>
+ <account type="9" name="Eisen"/>
+ </account>
+ <account type="9" name="Fertige Erzeugnisse (Bestand)"/>
+ </account>
+ <account type="9" name="01. Roh-, Hilfs- und Betriebsstoffe (Bestand)"/>
+ <account type="9" name="04. Geleistete Anzahlungen auf Vorräte">
+ <account type="9" name="Geleistete Anzahlungen 16% Vorsteuer"/>
+ <account type="9" name="Geleistete Anzahlungen 7% Vorsteuer"/>
+ </account>
+ </account>
+ <account type="9" name="II. Forderungen und sonstige Vermögensgegenstände">
+ <account type="9" name="Ausstehende Einlagen auf das gezeichnete Kapital, eingefordert"/>
+ <account type="9" name="02. Forderungen gegen verbundene Unternehmen">
+ <account type="9" name="Besitzwechsel gegen verbund. Unternehmen">
+ <account type="9" name="Besitzwechsel gegen verbundene UN &gt; 1J"/>
+ <account type="9" name="Besitzwechs.gg.verb.UN, bundesbankfähig"/>
+ <account type="9" name="Besitzwechsel gegen verbundene UN &lt; 1J"/>
+ </account>
+ <account type="9" name="WB Forderungen gg. verbundene UN &gt; 1J"/>
+ <account type="9" name="Forderungen aus L+L gg. verbundene UN">
+ <account type="9" name="Forderungen aus L+L gg. verbund. UN &gt; 1J"/>
+ <account type="9" name="Forderungen aus L+L gg. verbund. UN &lt; 1J"/>
+ </account>
+ <account type="9" name="Forderungen gg. verbundene UN &gt; 1 J"/>
+ <account type="9" name="Forderungen gg. verbundene UN &lt; 1 J"/>
+ <account type="9" name="WB Forderungen gg. verbundene UN &lt; 1 J"/>
+ </account>
+ <account type="9" name="03. Forderungen gegen Unternehmen, mit denen ein Beteiligungsverhältnis besteht">
+ <account type="9" name="Forderg. gg. UN mit Beteiligg.verh. &gt; 1 J"/>
+ <account type="9" name="Besitzwechsel gg.UN m. Beteiligungsverh.">
+ <account type="9" name="Besitzwechsel gg.UN m.Beteiligg.verh. &lt; 1 J"/>
+ <account type="9" name="Besitzwechsel gg.UN m.Beteiligg.verh. &gt; 1 J"/>
+ <account type="9" name="Besitzwechsel gg.UN m.Beteiligg.verh.bbf"/>
+ </account>
+ <account type="9" name="WB Forderg.gg.UN m.Beteiligg.verh. g.1J"/>
+ <account type="9" name="Forderg. L+L gg.UN m. Beteiligungsverh.">
+ <account type="9" name="Forderg. L+L gg.UN m.Beteiligg.verh. &lt; 1 J"/>
+ <account type="9" name="Forderg. L+L gg.UN m.Beteiligg.verh. &gt; 1 J"/>
+ </account>
+ <account type="9" name="Forderg. gg. UN mit Beteiligg.verh. &lt; 1 J."/>
+ <account type="9" name="WB Forderg.gg.UN m.Beteiligg.verh. b.1J"/>
+ </account>
+ <account type="9" name="04. Sonstige Vermögensgegenstände">
+ <account type="9" name="Körperschaftsteuerrückforderungen"/>
+ <account type="9" name="Gegenkonto für Vorsteuer nach Durchschnittssätzen für § 4 Abs. 3 EStG"/>
+ <account type="9" name="Umsatzsteuerforderungen">
+ <account type="9" name="USt-Forderungen frühere Jahre"/>
+ <account type="9" name="USt-Forderungen Vorjahr"/>
+ <account type="9" name="Forderungen aus entrichteten Verbrauchsteuern"/>
+ <account type="9" name="USt-Forderungen laufendes Jahr"/>
+ </account>
+ <account type="9" name="Sonstige Vermögensgegenstände">
+ <account type="9" name="Sonstige Vermögensgegenstände (g.1 J)"/>
+ <account type="9" name="Sonstige Vermögensgegenstände (b.1 J)"/>
+ </account>
+ <account type="9" name="Durchlaufende Posten">
+ <account type="9" name="Fremdgeld"/>
+ <account type="9" name="Agenturwarenabrechnung"/>
+ <account type="9" name="Ansprüche aus Rückdeckungsversicherungen"/>
+ </account>
+ <account type="9" name="Nachträglich abziehbare Vorsteuer, § 15a UStG, bewegliche Wirtschaftsgüter"/>
+ <account type="9" name="Darlehen">
+ <account type="9" name="Darlehen g. 1 Jahr"/>
+ <account type="9" name="Darlehen bis 1 Jahr"/>
+ </account>
+ <account type="9" name="Vorsteuer aus Investitionen § 4/3 EStG"/>
+ <account type="9" name="Geldtransit"/>
+ <account type="9" name="Abziehbare Vorsteuer">
+ <account type="9" name="Aufzuteilende Vorsteuer">
+ <account type="9" name="Aufzuteilende Vorsteuer 16%"/>
+ <account type="9" name="Aufzuteilende Vorsteuer nach §§ 13a/13b UStG 16 %"/>
+ <account type="9" name="Aufzuteilende Vorsteuer aus innergemeinschaftlichem Erwerb"/>
+ <account type="9" name="Aufzuteilende Vorsteuer 7%"/>
+ <account type="9" name="Aufzuteilende Vorsteuer nach §§ 13a/13b UStG"/>
+ <account type="9" name="Aufzuteilende Vorsteuer 15%"/>
+ </account>
+ <account type="9" name="Bezahlte Einfuhrumsatzsteuer"/>
+ <account type="9" name="Vorsteuer nach allgemeinen Durchschnittsätzen"/>
+ <account type="9" name="Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb von Neufahrzeugen von Lieferanten ohne UStId-Nr"/>
+ <account type="9" name="Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb">
+ <account type="9" name="Abziehbare Vorsteuer aus innergemeinschaftlichem Erwerb 15%/16%"/>
+ </account>
+ <account type="9" name="Vorsteuer aus der Auslagerung von Gegenständen aus einem Umsatzsteuerlager"/>
+ <account type="9" name="Abziehbare Vorsteuer nach § 13b UStG">
+ <account type="9" name="Abziehbare Vorsteuer nach § 13b UStG 16%"/>
+ </account>
+ <account type="9" name="Abziehbare Vorsteuern Inland">
+ <account type="9" name="Abziehbare Vorsteuer 16%"/>
+ <account type="9" name="Abziehbare Vorsteuer 7%"/>
+ </account>
+ </account>
+ <account type="9" name="Steuererstattungsanspruch gegenüber anderen EG-Ländern"/>
+ <account type="9" name="Gegenkonto Vorsteuer § 4/3 EStG"/>
+ <account type="9" name="Forderungen gegen Gesellschafter">
+ <account type="9" name="Forderungen gg. Gesellschafter (b.1J)"/>
+ <account type="9" name="Forderungen gg. Gesellschafter (g.1J)"/>
+ </account>
+ <account type="9" name="Verrechnungskonto Gewinnermittlung §4/3 EStG, nicht ergebniswirksam"/>
+ <account type="9" name="Steuerüberzahlungen"/>
+ <account type="9" name="Forderungen gegen Personal aus Lohn- und Gehaltsabrechnung">
+ <account type="9" name="Forderungen gegen Personal (g. 1Jahr)"/>
+ <account type="9" name="Forderungen gegen Personal (bis 1Jahr)"/>
+ </account>
+ <account type="9" name="Genossenschaftsanteile zum kurzfristigen Verbleib"/>
+ <account type="9" name="Zurückzuzahlende Vorsteuer, § 15a UStG, unbewegliche Wirtschaftsgüter"/>
+ <account type="9" name="Nachträglich abziehbare Vorsteuer, § 15a UStG, unbewegliche Wirtschaftsgüter"/>
+ <account type="9" name="GmbH-Anteile zum kurzfristigen Verbleib"/>
+ <account type="9" name="Verrechnungskonto Gewinnermittlung § 4/3 EStG, ergebniswirksam"/>
+ <account type="9" name="Verrechnungskonto Ist-Versteuerung">
+ <account type="9" name="Verrechnungskonto erhaltene Anzahlungen bei Buchung über Debitoren-Konto"/>
+ <account type="9" name="Überleitung Kostenstellen"/>
+ </account>
+ <account type="9" name="Zurückzuzahlende Vorsteuer, § 15a UStG, bewegliche Wirtschaftsgüter"/>
+ <account type="9" name="Forderungen an das Finanzamt aus abgeführtem Bauabzugsbetrag"/>
+ <account type="9" name="Vorsteuer im Folgejahr abziehbar"/>
+ <account type="9" name="Kautionen">
+ <account type="9" name="Kautionen (g. 1 J)"/>
+ <account type="9" name="Kautionen (bis 1 J)"/>
+ </account>
+ <account type="9" name="Auflösung Vorsteuer aus Vorjahr § 4/3 EStG"/>
+ <account type="9" name="Forderungen gegen Vorstandsmitglieder und Geschäftsführer">
+ <account type="9" name="Forderungen gg. Geschäftsf.(g.1J)"/>
+ <account type="9" name="Forderungen gg. Geschäftsf.(b.1J)"/>
+ </account>
+ <account type="9" name="Forderungen gegen Aufsichtsrats- und Beirats-Mitglieder">
+ <account type="9" name="Forderungen gg. Aufsichtsratsm. (g.1 J)"/>
+ <account type="9" name="Forderungen gg. Aufsichtsratsm. (b.1 J)"/>
+ </account>
+ </account>
+ <account type="9" name="01. Forderungen aus Lieferungen und Leistungen">
+ <account type="9" name="Forderungen aus L+L gg. Gesellschafter">
+ <account type="9" name="Forderg. aus L+L gg.Gesellschafter &lt; 1 J"/>
+ <account type="9" name="Forderg. aus L+L gg.Gesellschafter &gt; 1 J"/>
+ </account>
+ <account type="9" name="Zweifelhafte Forderungen">
+ <account type="9" name="Einzelwertberichtigung Forderung (&lt; 1J)"/>
+ <account type="9" name="Zweifelhafte Forderungen (&gt; 1 Jahr)"/>
+ <account type="9" name="Pauschalwertberichtigung Forderg. &lt; 1J"/>
+ <account type="9" name="Einzelwertberichtigung Forderung (&gt; 1J)"/>
+ <account type="9" name="Zweifelhafte Forderungen (bis 1 Jahr)"/>
+ <account type="9" name="Pauschalwertberichtigung Forderg. &gt; 1J"/>
+ </account>
+ <account type="9" name="Wechsel aus Lieferung und Leistung">
+ <account type="9" name="Wechsel a. Lieferungen/Leistungen &lt; 1 J"/>
+ <account type="9" name="Wechsel a. Lieferungen/Leistungen, bundesbankfähig"/>
+ <account type="9" name="Wechsel a. Lieferungen/Leistungen &gt; 1 J"/>
+ </account>
+ <account type="9" name="Forderungen aus Lieferungen und Leistungen ohne Kontokorrent">
+ <account type="9" name="Forderg. aus steuerfreien oder nicht steuerbaren steuerbaren L+L"/>
+ <account type="9" name="Forderungen aus L+L allgem. Steuersatz oder eines Kleinunternehmers"/>
+ <account type="9" name="Forderungen aus L+L gemäß § 24 UStG"/>
+ <account type="9" name="Gegenkonto 1215 - 1218 bei Aufteilung der Forderungen nach Steuersätzen (EÜR)"/>
+ <account type="9" name="Forderungen aus L+L ermäßigt. Steuersatz"/>
+ </account>
+ <account type="9" name="Forderungen nach § 11 Abs. 1 Satz 2 EStG für § 4/3">
+ <account type="9" name="Forderg.a. Lieferungen/Leistungen &gt; 1 J"/>
+ <account type="9" name="Forderg.a. Lieferungen/Leistungen &lt; 1 J"/>
+ </account>
+ <account type="9" name="Gegenkonto 1221-1229, 1250-1257, 1270-1279, 1290-1297 bei Aufteilung Debitorenkonto"/>
+ <account type="9" name="Gegenkonto zu sonstigen Vermögensgegenständen bei Buchungen über Debitorenkonto"/>
+ </account>
+ <account type="9" name="Eingeforderte Nachschüsse"/>
+ </account>
+ </account>
+ <account type="9" name="C. Rechnungsabgrenzungsposten Umlaufvermögen">
+ <account type="9" name="Aktive Rechnungsabgrenzung">
+ <account type="9" name="Damnum/Disagio"/>
+ <account type="9" name="Als Aufwand berücksichtigte Zölle und Verbrauchsteuern auf Vorräte"/>
+ <account type="9" name="Als Aufwand berücksichtigte Umsatzsteuer auf Anzahlungen"/>
+ </account>
+ <account type="9" name="Abgrenzung aktive latente Steuern"/>
+ </account>
+ <account type="9" name="A. Anlagevermögen">
+ <account type="9" name="III. Immaterielle Vermögensgegenstände">
+ <account type="9" name="02. Geschäfts- oder Firmenwert">
+ <account type="9" name="Geschäfts- oder Firmenwert"/>
+ <account type="9" name="Verschmelzungsmehrwert"/>
+ </account>
+ <account type="9" name="03. Geleistete Anzahlungen">
+ <account type="9" name="Anzahlungen auf immaterielle Vermögensgegenstände"/>
+ <account type="9" name="Anzahlungen auf Geschäfts-, Firmenwert"/>
+ </account>
+ <account type="9" name="01. Konzessionen, gewerbliche Schutzrechte und ähnliche Rechte und Werte sowie Lizenzen an solchen Rechten und Werten">
+ <account type="9" name="Konzessionen und gewerbl.Schutzrechte">
+ <account type="9" name="Konzessionen"/>
+ <account type="9" name="Lizenzen an gewerblichen Schutzrechten und ähnlichen Rechten und Werten"/>
+ <account type="9" name="Gewerbliche Schutzrechte"/>
+ <account type="9" name="Ähnliche Rechte und Werte"/>
+ <account type="9" name="EDV-Software"/>
+ </account>
+ </account>
+ </account>
+ <account type="9" name="II. Ingangsetzung und Erweiterung des Geschäftsbetriebes">
+ <account type="9" name="Ingangsetzungs- und Erweiterungsaufwand"/>
+ <account type="9" name="Aufwendungen Währungsumstellung Euro"/>
+ </account>
+ <account type="9" name="V. Finanzanlagen">
+ <account type="9" name="07. Genossenschaftsanteile zum langfristigen Verbleib"/>
+ <account type="9" name="01. Anteile an verbundenen Unternehmen">
+ <account type="9" name="Anteile an herrschender oder mit Mehrheit beteiligter Gesellschaft"/>
+ </account>
+ <account type="9" name="04. Ausleihungen an Unternehmen, mit denen ein Beteiligungsverhältnis besteht "/>
+ <account type="9" name="02. Ausleihungen an verbundene Unternehmen"/>
+ <account type="9" name="03. Beteiligungen">
+ <account type="9" name="Typisch stille Beteiligungen"/>
+ <account type="9" name="Andere Beteiligungen an Kapitalgesellschaften"/>
+ <account type="9" name="Beteiligung einer GmbH &amp; Co.KG an einer Komplementär GmbH"/>
+ <account type="9" name="Andere Beteiligungen an Personengesellschaften"/>
+ <account type="9" name="Atypische stille Beteiligungen"/>
+ </account>
+ <account type="9" name="08. Rückdeckungsansprüche aus Lebensversicherungen zum langfristigen Verbleib"/>
+ <account type="9" name="05. Wertpapiere des Anlagevermögens">
+ <account type="9" name="Festverzinsliche Wertpapiere"/>
+ <account type="9" name="Wertpapiere mit Gewinnbeiligungsansprüchen"/>
+ </account>
+ <account type="9" name="06. Sonstige Ausleihungen">
+ <account type="9" name="Ausleihungen an nahe stehende Personen"/>
+ <account type="9" name="Darlehen"/>
+ <account type="9" name="Ausleihungen an Gesellschafter"/>
+ </account>
+ </account>
+ <account type="9" name="I. Ausstehende Einlagen">
+ <account type="9" name="b) Kommanditgesellschaft">
+ <account type="9" name="Ausstehende Einlagen auf das Kommandit-Kapital, nicht eingefordert"/>
+ <account type="9" name="Ausstehende Einlagen auf das Kommandit-Kapital, eingefordert"/>
+ <account type="9" name="Ausstehende Einlagen auf das Komplementär-Kapital, eingefordert"/>
+ <account type="9" name="Ausstehende Einlagen auf das Komplementär-Kapital, nicht eingefordert"/>
+ </account>
+ <account type="9" name="a) Kapitalgesellschaft">
+ <account type="9" name="Ausstehende Einlagen auf das gezeichnete Kapital, nicht eingefordert (Aktivausweis)"/>
+ <account type="9" name="Ausstehende Einlagen auf das gezeichnete Kapital, eingefordert (Aktivausweis)"/>
+ </account>
+ </account>
+ <account type="9" name="IV. Sachanlagen">
+ <account type="9" name="03. Andere Anlagen, Betriebs- und Geschäftsausstattung">
+ <account type="9" name="Ladeneinrichtung"/>
+ <account type="9" name="Einbauten in fremde Grundstücke"/>
+ <account type="9" name="Computer"/>
+ <account type="9" name="Geringwertige Wirtschaftsgüter bis 410€"/>
+ <account type="9" name="Sonstige Betriebs- und Geschäftsausstattung"/>
+ <account type="9" name="Büroeinrichtung"/>
+ <account type="9" name="Sonstige Transportmittel"/>
+ <account type="9" name="PKW"/>
+ <account type="9" name="LKW"/>
+ <account type="9" name="Gerüst- und Schalungsmaterial"/>
+ <account type="9" name="Werkzeuge"/>
+ <account type="9" name="Andere Anlagen"/>
+ </account>
+ <account type="9" name="01. Grundstücke, grundstücksgleiche Rechte und Bauten einschließlich der Bauten auf fremden Grundstücken">
+ <account type="9" name="Grundstücke und grundstücksgleiche Rechte ohne Bauten">
+ <account type="9" name="Grundstücke mit Substanzverzehr"/>
+ <account type="9" name="Unbebaute Grundstücke"/>
+ <account type="9" name="Grundstücksgleiche Rechte"/>
+ </account>
+ <account type="9" name="Bauten auf fremden Grundstücken">
+ <account type="9" name="Andere Bauten"/>
+ <account type="9" name="Geschäftsbauten"/>
+ <account type="9" name="Garagen"/>
+ <account type="9" name="Fabrikbauten"/>
+ <account type="9" name="Einrichtungen für Geschäfts-, Fabrik-, Wohn- und andere Bauten"/>
+ <account type="9" name="Außenanlagen"/>
+ <account type="9" name="Wohnbauten"/>
+ <account type="9" name="Hof- und Wegebefestigungen"/>
+ </account>
+ <account type="9" name="Wohnbauten">
+ <account type="9" name="Außenanlagen"/>
+ <account type="9" name="Einrichtungen für Wohnbauten"/>
+ <account type="9" name="Garagen"/>
+ <account type="9" name="Hof- und Wegebefestigungen"/>
+ </account>
+ <account type="9" name="Bauten auf eigenen Grundstücken">
+ <account type="9" name="Grundstückswert bebauter Grundstücke"/>
+ <account type="9" name="Fabrikbauten"/>
+ <account type="9" name="Hof- und Wegebefestigungen"/>
+ <account type="9" name="Andere Bauten"/>
+ <account type="9" name="Außenanlagen für Geschäfts-, Fabrik- und andere Bauten"/>
+ <account type="9" name="Garagen"/>
+ <account type="9" name="Einrichtungen für Geschäfts-, Fabrik- und andere Bauten"/>
+ <account type="9" name="Geschäftsbauten"/>
+ </account>
+ </account>
+ <account type="9" name="04. Geleistete Anzahlungen und Anlagen im Bau">
+ <account type="9" name="Anzahlungen auf technische Anlagen"/>
+ <account type="9" name="Geschäfts-, Fabrik- und andere Bauten im Bau auf fremden Grundstücken"/>
+ <account type="9" name="Wohnbauten im Bau auf eigenen Grundstücken"/>
+ <account type="9" name="Anzahlungen auf Geschäfts-, Fabrik- und andere Bauten auf eigenen Grundstücken und grundstücksgleichen Rechten"/>
+ <account type="9" name="Technische Anlagen und Maschinen im Bau"/>
+ <account type="9" name="Anzahlungen auf Wohnbauten auf eigenen Grundstücken und grundstücksgleichen Rechten"/>
+ <account type="9" name="Anzahlungen auf Wohnbauten auf fremden Grundstücken"/>
+ <account type="9" name="Anzahlungen auf Geschäfts-, Fabrik- und andere Bauten auf fremden Grundstücken"/>
+ <account type="9" name="Andere Anlagen, Betriebs- und Geschäftsausstattung im Bau"/>
+ <account type="9" name="Geschäfts-, Fabrik- und andere Bauten im Bau auf eigenen Grundstücken"/>
+ <account type="9" name="Anzahlungen auf andere Anlagen, Betriebs- und Geschäftsausstattung"/>
+ <account type="9" name="Wohnbauten im Bau auf fremden Grundstücken"/>
+ <account type="9" name="Anzahlungen auf Grundstücke und grundstücksgleiche Rechte ohne Bauten"/>
+ </account>
+ <account type="9" name="02. Technische Anlagen und Maschinen">
+ <account type="9" name="Maschinengebundene Werkzeuge"/>
+ <account type="9" name="Technische Anlagen"/>
+ <account type="9" name="Betriebsvorrichtungen"/>
+ <account type="9" name="Maschinen"/>
+ </account>
+ </account>
+ </account>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Erträge aus Beteiligungen">
+ <account type="12" name="Laufende Erträge aus Anteilen an Kapitalgesellschaften (Beteiligung) 100 %/50 % steuerfrei"/>
+ <account type="12" name="Gewinnanteile aus Mitunternehmerschaften § 9 GewStG"/>
+ <account type="12" name="Gewinne aus Anteilen an nicht steuerbefreiten inländischen Kapitalgesellschaften § 9 Nr. 2a GewStG"/>
+ </account>
+ <account type="12" name="- davon aus verbundenen Unternehmen">
+ <account type="12" name="Erträge aus Beteiligungen an Finanzverbundenen Unternehmen"/>
+ <account type="12" name="Laufende Erträge aus Anteilen an Kapitalgesellschaften (verbundene Unternehmen) 100 % / 50 % steuerfrei"/>
+ </account>
+ </account>
+ <account type="12" name=""/>
+ <account type="12" name="">
+ <account type="12" name="Bestandsveränderung unfertige Leistung"/>
+ <account type="12" name="Bestandsveränd.unfertige Erzeugnisse"/>
+ <account type="12" name="Bestandsveränderung Aufträge in Arbeit"/>
+ <account type="12" name="Bestandsveränderungen fertige Erzeugnisse"/>
+ <account type="12" name="Bestandsveränderung Bauaufträge"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Außerordentliche Erträge">
+ <account type="12" name="Außerordentliche Erträge nicht finanzwirksam"/>
+ <account type="12" name="Außerordentliche Erträge finanzwirksam"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Einstellungen in Sonderposten mit Rücklageanteil (§ 52 Abs. 16 EStG)"/>
+ <account type="13" name="Einstellungen in Sonderposten mit Rücklageanteil (steuerfreie Rücklagen)"/>
+ <account type="13" name="Sonstige Aufwendungen betriebsfremd und regelmäßig"/>
+ <account type="13" name="Einstellung in die Einzelwertberichtigung zu Forderungen"/>
+ <account type="13" name="Einstellungen in Sonderposten mit Rücklageanteil (Ansparabschreibungen)"/>
+ <account type="13" name="b) Verluste aus dem Abgang von Gegenständen des Anlagevermögens">
+ <account type="13" name="Verluste aus dem Abgang von Gegenständen des Anlagevermögens"/>
+ <account type="13" name="Anlagenabgänge Finanzanlagen 100 %/50 % nicht abzugsfähig (inländische Kap.Ges.)"/>
+ <account type="13" name="Erlöse aus Verkäufen Finanzanlagen 100 %/50 % nicht abzugsfähig (inländische Kap.Ges.)"/>
+ <account type="13" name="Erlöse aus Verkäufen Finanzanlagen"/>
+ <account type="13" name="Anlagenabgänge immaterielle Vermögensgegenstände"/>
+ <account type="13" name="Erlöse aus Verkäufen Sachanlagevermögen steuerfrei § 4 Nr. 1a UStG"/>
+ <account type="13" name="Erlöse aus Verkäufen Sachanlagevermögen"/>
+ <account type="13" name="Anlagenabgänge Sachanlagen"/>
+ <account type="13" name="Anlagenabgänge Finanzanlagen"/>
+ <account type="13" name="Erlöse aus Verkäufen Sachanlagevermögen 16% USt"/>
+ <account type="13" name="Erlöse aus Verkäufen Sachanlagevermögen steuerfrei § 4 Nr. 1b UStG"/>
+ <account type="13" name="Verluste aus der Veräußerung von Anteilen an Kapitalgesellschaften 100 %/50 % nicht abzugsfähig"/>
+ <account type="13" name="Erlöse aus Verkäufen immaterieller Vermögensgegenstände"/>
+ </account>
+ <account type="13" name="e) Kalkulatorische Kosten">
+ <account type="13" name="Kalkulatorische Abschreibungen"/>
+ <account type="13" name="Verrechnete kalkulatorische Wagnisse"/>
+ <account type="13" name="Verrechneter kalkulatorischer Lohn für unentgeltliche Mitarbeiter"/>
+ <account type="13" name="Kalkulatorischer Lohn für unentgeltliche Mitarbeiter"/>
+ <account type="13" name="Verrechneter kalkulatorischer Unternehmerlohn"/>
+ <account type="13" name="Verrechnete kalkulatorische Abschreibungen"/>
+ <account type="13" name="Kalkulatorische Wagnisse"/>
+ <account type="13" name="Verrechnete kalkulatorische Miete und Pacht"/>
+ <account type="13" name="Kalkulatorischer Unternehmerlohn"/>
+ <account type="13" name="Kalkulatorische Miete und Pacht"/>
+ <account type="13" name="Verrechnete kalkulatorische Zinsen"/>
+ <account type="13" name="Kalkulatorische Zinsen"/>
+ </account>
+ <account type="13" name="Forderungsverluste">
+ <account type="13" name="Forderungsverluste aus steuerfreien EG-Lieferunge"/>
+ <account type="13" name="Forderungsverluste 15% USt"/>
+ <account type="13" name="Forderungsverluste aus im Inland steuerpflichtigen EGLieferungen 15% USt"/>
+ <account type="13" name="Forderungsverluste aus im Inland steuerpflichtigen EGLieferungen 16% USt"/>
+ <account type="13" name="Forderungsverluste aus im Inland steuerpflichtigen EG-Lieferungen 7% USt"/>
+ <account type="13" name="Forderungsverluste 16% USt"/>
+ <account type="13" name="Forderungsverluste 7% USt"/>
+ </account>
+ <account type="13" name="Einstellungen in Sonderposten mit Rücklageanteil (Existenzgründerrücklage)"/>
+ <account type="13" name="f) Kosten bei Anwendung des Umsatzkostenverfahrens">
+ <account type="13" name="Herstellungskosten"/>
+ <account type="13" name="Verwaltungskosten"/>
+ <account type="13" name="Vertriebskosten"/>
+ <account type="13" name="Gegenkonto zu 6990 bis 6998"/>
+ </account>
+ <account type="13" name="Sonstige Aufwendungen unregelmäßig"/>
+ <account type="13" name="d) sonstige Aufwendungen im Rahmen der gewöhnlichen Geschäftstätigkeit">
+ <account type="13" name="Zuwendungen, Spenden an Stiftungen für gemeinnützige Zwecke i.S.d. § 52 Abs. 2 Nr. 4 AO"/>
+ <account type="13" name="Zuwendungen, Spenden für mildtätige Zwecke"/>
+ <account type="13" name="Zuwendungen, Spenden an Stiftungen für kirchliche, religiöse und gemeinnützige Zwecke"/>
+ <account type="13" name="Zuwendungen, Spenden an Stiftungen für gemeinnützige Zwecke i.S.d. § 52 Abs. 2 Nr. 1-3 AO"/>
+ <account type="13" name="Zuwendungen, Spenden für kirchliche, religiöse und gemeinntüzige Zwecke"/>
+ <account type="13" name="Zuwendungen, Spenden für wissenschaftliche und kulturelle Zwecke"/>
+ <account type="13" name="Zuwendungen, Spenden an Stiftungen für wissenschaftliche, mildtätige, kulturelle Zwecke"/>
+ <account type="13" name="Zuwendungen, Spenden, steuerlich nicht abziehbar"/>
+ <account type="13" name="Zuwendungen, Spenden an politische Parteien"/>
+ </account>
+ <account type="13" name="Periodenfremde Aufwendungen"/>
+ <account type="13" name="c) Verluste aus Wertminderungen oder aus dem Abgang von Gegenständen des Umlaufvermögens und Einstellung in die Pauschalwertberichtigung zu Forderungen">
+ <account type="13" name="Aufwendugnen aus der Zuschreibung von steuerlich niedriger bewerteten Rückstellungen"/>
+ <account type="13" name="Abschreibungen auf Umlaufvermögen außer Vorräten und Wertpapieren des UV"/>
+ <account type="13" name="Vorwegnahme künftiger Wertschwankungen im Umlaufvermögen außer Vorräten und Wertpapieren"/>
+ <account type="13" name="Einstellung in die Pauschalwertberichtigung zu Forderungen"/>
+ <account type="13" name="Verluste aus dem Abgang von Gegenständen des Umlaufvermögens (außer Vorräten) 100%/50% nicht abzugsfähig"/>
+ <account type="13" name="Verluste aus dem Abgang von Gegenständen des Umlaufvermögens außer Vorräten"/>
+ <account type="13" name="Abschreibungen auf Umlaufvermögen außer Vorräten und Wertpapieren des UV, steuerrechtlich bedingt"/>
+ <account type="13" name="Aufwendungen aus der Zuschreibung von steuerlich niedriger bewerteten Verbindlichkeiten"/>
+ </account>
+ <account type="13" name="Einstellungen in Sonderposten mit Rücklageanteil (Sonderabschreibungen)"/>
+ <account type="13" name="a) ordentliche betriebliche Aufwendungen">
+ <account type="13" name="Aufwendungen aus Kursdifferenzen"/>
+ <account type="13" name="8) verschiedene betriebliche Kosten">
+ <account type="13" name="Freiwillige Sozialleistungen"/>
+ <account type="13" name="Vergütungen an Mitunternehmer §15 EStG"/>
+ <account type="13" name="Aufwendungen aus der Veräußerung von Anteilen an Kapitalgesellschaften 100 %/50 % nicht abzugsfähig"/>
+ <account type="13" name="Zeitschriften, Bücher"/>
+ <account type="13" name="Nebenkosten des Geldverkehrs"/>
+ <account type="13" name="Aufwendungen aus Anteilen an Kapitalgesellschaften 100 %/ 50 % nicht abzugsfähig (inländische Kap.Ges.)"/>
+ <account type="13" name="Abschluß- und Prüfungskosten"/>
+ <account type="13" name="Aufwendungen für Abraum- und Abfallbeseitigung"/>
+ <account type="13" name="Sonstiger Betriebsbedarf"/>
+ <account type="13" name="Nicht abziehbare Hälfte der Aufsichtsratsvergütungen"/>
+ <account type="13" name="Telefax und Internetkosten"/>
+ <account type="13" name="Nicht abziehbare Vorsteuer">
+ <account type="13" name="Nicht abziehbare Vorsteuer 16%"/>
+ <account type="13" name="Nicht abziehbare Vorsteuer 7%"/>
+ </account>
+ <account type="13" name="Rechts- und Beratungskosten"/>
+ <account type="13" name="Mietleasing">
+ <account type="13" name="Gewerbesteuerlich zu berücksichtigendes Mietleasing § 8 GewStG"/>
+ </account>
+ <account type="13" name="Telefon"/>
+ <account type="13" name="Bürobedarf"/>
+ <account type="13" name="Abziehbare Aufsichtsratsvergütungen"/>
+ <account type="13" name="Buchführungskosten"/>
+ <account type="13" name="Haftungsvergütung an Mitunternehmer § 15 EStG"/>
+ <account type="13" name="Werkzeuge und Kleingeräte"/>
+ <account type="13" name="Mieten für Einrichtungen">
+ <account type="13" name="Gewerbesteuerlich zu berücksichtigende Miete für Einrichtungen § 8 GewStG"/>
+ </account>
+ <account type="13" name="Fortbildungskosten"/>
+ <account type="13" name="Porto"/>
+ </account>
+ <account type="13" name="Aufwendungen aus der Währungsumstellung auf den Euro (Art. 43 Abs. 1 EGHGB)"/>
+ <account type="13" name="7) Kosten der Warenabgabe">
+ <account type="13" name="Fremdarbeiten (Vertrieb)"/>
+ <account type="13" name="Aufwand für Gewährleistung"/>
+ <account type="13" name="Verpackungsmaterial"/>
+ <account type="13" name="Transportversicherungen"/>
+ <account type="13" name="Ausgangsfrachten"/>
+ <account type="13" name="Verkaufsprovisionen"/>
+ </account>
+ <account type="13" name="sonstige betriebliche Aufwendungen">
+ <account type="13" name="Fremdleistungen und Fremdarbeiten"/>
+ <account type="13" name="Sonstige betriebl.u.regelm.Aufwendungen"/>
+ </account>
+ <account type="13" name="6) Werbe- und Reisekosten">
+ <account type="13" name="Reisekosten Arbeitnehmer">
+ <account type="13" name="Reisekosten AN Übernachtungsaufwand"/>
+ <account type="13" name="Kilometergelderstattung Arbeitnehmer"/>
+ <account type="13" name="Reisekosten Arbeitnehmer Verpflegungsmehraufwand"/>
+ <account type="13" name="Reisekosten Arbeitnehmer, Fahrtkosten"/>
+ </account>
+ <account type="13" name="Werbekosten">
+ <account type="13" name="Repräsentationskosten"/>
+ <account type="13" name="Nicht abzugsfähige Betriebsausgaben aus Werbe-, Repräsentations- und Reisekosten (nicht abziehbarer Anteil)"/>
+ <account type="13" name="Geschenke ausschlielich betrieblich genutzt"/>
+ <account type="13" name="Sonstige eingeschränkt abziehbare Betriebsausgaben (abziehbarer Anteil)"/>
+ <account type="13" name="Geschenke über 40 €"/>
+ <account type="13" name="Geschenke bis 40 €"/>
+ <account type="13" name="Nicht abzugsfähige Bewirtungskosten"/>
+ <account type="13" name="Bewirtungskosten"/>
+ <account type="13" name="Sonstige eingeschränkt abziehbare Betriebsausgaben (nicht abziehbarer Anteil)"/>
+ <account type="13" name="Aufmerksamkeiten"/>
+ </account>
+ <account type="13" name="Reisekosten Unternehmer">
+ <account type="13" name="Reisekosten Unternehmer Übernachtungsaufwand"/>
+ <account type="13" name="Reisekosten Unternehmer, Fahrtkosten"/>
+ <account type="13" name="Fahrten Wohnung zwischen Wohnung und Arbeitsstätte (Haben)"/>
+ <account type="13" name="Fahrten zwischen Wohnung und Arbeitsstätte (nicht abziehbarer Anteil)"/>
+ <account type="13" name="Reisekosten Unternehmer Verpflegungsmehraufwand"/>
+ <account type="13" name="Fahrten zwischen Wohnung und Arbeitsstätte (abziehbarer Anteil)"/>
+ </account>
+ </account>
+ <account type="13" name="3) Versicherungen, Beiträge und Abgaben">
+ <account type="13" name="Versicherungen"/>
+ <account type="13" name="Sonstige Abgaben">
+ <account type="13" name="Steuerlich abzugsfähige Verspätungszuschläge und Zwangsgelder"/>
+ <account type="13" name="Steuerlich nicht abzugsfähige Verspätungszuschläge und Zwangsgelder"/>
+ </account>
+ <account type="13" name="Ausgleichsabgabe i. S. d. Schwerbehindertengesetzes"/>
+ <account type="13" name="Versicherungen für Gebäude, die nicht zum Betriebsvermögen gehören"/>
+ <account type="13" name="Beiträge"/>
+ <account type="13" name="Nettoprämie für Rückdeckung künftiger Versorgungsleistungen"/>
+ <account type="13" name="Versicherungen für Gebäude, die zum Betriebsvermögen gehören"/>
+ </account>
+ <account type="13" name="Aufwendungen aus Bewertung Finanzmittelfonds"/>
+ <account type="13" name="5) Fahrzeugkosten">
+ <account type="13" name="Fremdfahrzeugkosten"/>
+ <account type="13" name="Kfz-Kosten für betrieblich genutzte, zum Privatvermögen gehörende Kraftfahrzeuge"/>
+ <account type="13" name="Leasingfahrzeugkosten"/>
+ <account type="13" name="Garagenmiete"/>
+ <account type="13" name="Sonstige Kfz-Kosten"/>
+ <account type="13" name="Kfz-Versicherungen"/>
+ <account type="13" name="Laufende Kfz-Betriebskosten"/>
+ <account type="13" name="Mautgebühren"/>
+ <account type="13" name="Kfz-Reparaturen"/>
+ </account>
+ <account type="13" name="4) Reparaturen und Instandhaltungen">
+ <account type="13" name="Reparaturen und Instandhaltung von anderen Anlagen"/>
+ <account type="13" name="Reparaturen und Instandhaltung von Bauten">
+ <account type="13" name="Reparaturen und Instandhaltung von Bauten, die nicht zum Betriebsvermögen gehören"/>
+ </account>
+ <account type="13" name="Reparaturen und Instandhaltung von Betriebs- und Geschäftsausstattung"/>
+ <account type="13" name="Mietleasing">
+ <account type="13" name="Gewerbesteuerlich zu berücksichtigendes Mietleasing § 8 GewStG"/>
+ </account>
+ <account type="13" name="Wartungskosten für Hard- und Software"/>
+ <account type="13" name="Reparaturen und Instandhaltung von technischen Anlagen und Maschinen"/>
+ <account type="13" name="Sonstige Reparaturen und Instandhaltung"/>
+ </account>
+ <account type="13" name="1) Raumkosten">
+ <account type="13" name="Gas, Strom, Wasser">
+ <account type="13" name="Gas, Strom, Wasser für Gebäude, die nicht zum Betriebsvermögen gehören"/>
+ </account>
+ <account type="13" name="Pacht">
+ <account type="13" name="Vergütungen an Mitunternehmer für die pachtweise Überlassung ihrer Wirtschaftsgüter § 15 EStG"/>
+ <account type="13" name="GewStl. zu berücksichtigende Pacht §8 GewStG"/>
+ </account>
+ <account type="13" name="Abgaben für betrieblich genutzen Grundbesitz">
+ <account type="13" name="Abgaben für Grundbesitz, der nicht zum Betriebsvermögen gehört"/>
+ </account>
+ <account type="13" name="Heizung">
+ <account type="13" name="Heizung für Gebäude, die nicht zum Betriebsvermögen gehren"/>
+ </account>
+ <account type="13" name="Raumkosten"/>
+ <account type="13" name="Instandhaltung betrieblicher Räume">
+ <account type="13" name="Instandhaltung betrieblicher Räume in Gebäuden, die nicht zum Betriebs- Geschäftsausvermögen gehören"/>
+ </account>
+ <account type="13" name="Aufwendungen für ein häusliches Arbeitszimmer (nicht abziehbarer Anteil)"/>
+ <account type="13" name="Sonstige Raumkosten">
+ <account type="13" name="Sonstige Raumkosten für Gebäude, die nicht zum Betriebsvermögen gehören"/>
+ </account>
+ <account type="13" name="Aufwendungen für ein häusliches Arbeitszimmer (abziehbarer Anteil)"/>
+ <account type="13" name="Miete">
+ <account type="13" name="Vergütungen an Mitunternehmer für die mietweise Überlassung ihrer Wirtschaftsgüter § 16 EStG"/>
+ <account type="13" name="Gewerbesteuerlich zu berücksichtigende Miete § 8 GewStG "/>
+ </account>
+ <account type="13" name="Sonstige Grundstücksaufwendungen">
+ <account type="13" name="Grundstücksaufwendungen für Gebäude, die nicht zum Betriebsvermögen gehören"/>
+ </account>
+ <account type="13" name="Reinigung">
+ <account type="13" name="Reinigung für Gebäude nicht im BV"/>
+ </account>
+ </account>
+ </account>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Nicht steuerbare Umsätze"/>
+ <account type="12" name="Umsatzsteuer-Vergütungen"/>
+ <account type="12" name="Erlösschmälerungen">
+ <account type="12" name="Erlösschmälerungen 7% USt"/>
+ <account type="12" name="Erlösschmälerung EG-Lieferung 15% USt"/>
+ <account type="12" name="Gewährte Boni">
+ <account type="12" name="Gewährte Boni 7% USt"/>
+ <account type="12" name="Gewährte Boni 16% USt"/>
+ </account>
+ <account type="12" name="Erlösschmälerungen steuerfr. EG-Lief."/>
+ <account type="12" name="Erlösschmälerungen 16% USt"/>
+ <account type="12" name="Gewährte Rabatte">
+ <account type="12" name="Gewährte Rabatte 7% USt"/>
+ <account type="12" name="Gewährte Rabatte 16% USt"/>
+ </account>
+ <account type="12" name="Erlösschmälerung EG-Lieferung 16% USt"/>
+ <account type="12" name="Erlösschmäl.i.and.EG-Ld.stpfl.Liefer."/>
+ <account type="12" name="Erlösschmälerung EG-Lieferung 7% USt"/>
+ <account type="12" name="Erlösschmälerungen steuerfrei §4 Nr. 1a"/>
+ <account type="12" name="Gewährte Skonti">
+ <account type="12" name="Gewährte Skonti 7% USt"/>
+ <account type="12" name="Gewährte Skonti 16% USt"/>
+ </account>
+ </account>
+ <account type="12" name="b) Statistische Konten EÜR Umsatzerlöse">
+ <account type="12" name="Statistisches Konto Erlöse steuerfrei und nicht steuerbar (EÜR)"/>
+ <account type="12" name="Statistisches Konto Erlöse zum ermäßigten Umsatzsteuersatz (EÜR)"/>
+ <account type="12" name="Statistisches Konto Erlöse zum allgemeinen Umsatzsteuersatz (EÜR)"/>
+ <account type="12" name="Gegenkonto 4580 - 4582 bei Aufteilung der Erlöse nach Steuersätzen (EÜR)"/>
+ </account>
+ <account type="12" name="a) Umsatzerlöse">
+ <account type="12" name="Umsatzerlöse 7% USt"/>
+ <account type="12" name="Steuerfreie Umsätze">
+ <account type="12" name="Innergemeinschaftl. Dreiecksgeschäft"/>
+ <account type="12" name="Steuerfreie Umsätze Offshore usw."/>
+ <account type="12" name="Steuerfreie Umsätze § 4 Nr. 1a UStG"/>
+ <account type="12" name="Steuerfreie Umsätze § 4 Nr. 2-7 UStG"/>
+ <account type="12" name="Steuerfreie Umsätze §4 Nr. 8 ff UStG"/>
+ <account type="12" name="Sonstige steuerfr. Umsätze Inland"/>
+ <account type="12" name="Steuerfr. EG-Lief.v.Neufahrzg.ohne UStID"/>
+ <account type="12" name="Steuerfreie EG-Lieferungen, §4,1b UStG"/>
+ </account>
+ <account type="12" name="Umsatzerlöse"/>
+ <account type="12" name="Erlöse aus im Drittland steuerbaren Leistungen, im Inland nicht steuerbare Umsätze"/>
+ <account type="12" name="Erlöse Geldspielautomaten 16% USt"/>
+ <account type="12" name="Erlöse"/>
+ <account type="12" name="Erlöse aus im anderen EG-Land steuerbaren Leistungen, im Inland nicht steuerbare Umsätze"/>
+ <account type="12" name="Erlöse aus im anderen EG-Land steuerpflichtigen Lieferungen"/>
+ <account type="12" name="Erlöse aus Leistungen, für die der Leistungsempfänger die Steuer nach § 13b UStG schuldet."/>
+ <account type="12" name="Erlöse die mit den Durchschnittssätzen des § 24 UStG versteuert werden"/>
+ <account type="12" name="Erlöse Abfallverwertung"/>
+ <account type="12" name="Erlöse Kleinunternehmer § 19 UStG"/>
+ <account type="12" name="Provisionserlöse">
+ <account type="12" name="Provisionserlöse, steuerfrei § 4 Nr.5"/>
+ <account type="12" name="Provisionserlöse 7% USt"/>
+ <account type="12" name="Provisionserlöse 16% USt"/>
+ <account type="12" name="Provisionserlöse, steuerfrei §4 Nr.8ff"/>
+ </account>
+ <account type="12" name="Umsatzerlöse 16% USt"/>
+ <account type="12" name="Erlöse aus im Inland steuerpflichtigen EG Lieferungen 16% USt"/>
+ <account type="12" name="Erlöse Leergut"/>
+ <account type="12" name="Erlöse aus im Inland steuerpflichtigen EG Lieferungen 7% USt"/>
+ </account>
+ <account type="12" name="Unentgeltliche Wertabgaben">
+ <account type="12" name="Entnahme Unternehmer (Waren) 16% USt"/>
+ <account type="12" name="Entnahme Unternehmer (Waren) ohne USt"/>
+ <account type="12" name="Verwendung von Gegenständen 16% USt"/>
+ <account type="12" name="Entnahme von Gegenständen ohne USt"/>
+ <account type="12" name="Verwendung von Gegenst. (Tel) 16% USt"/>
+ <account type="12" name="Unentgeltl. Erbringung Leist. 7% USt"/>
+ <account type="12" name="Verwendung von Gegenst.(Kfz) ohne USt"/>
+ <account type="12" name="Unentgeltl. Zuwend. von Waren 7% USt"/>
+ <account type="12" name="Unentgeltl. Zuwend. Gegenstände 16% USt"/>
+ <account type="12" name="Entnahme Unternehmer (Waren) 7% USt"/>
+ <account type="12" name="Unentgeltl. Zuwend. Gegenstände ohne USt"/>
+ <account type="12" name="Verwendung von Gegenständen 7% USt"/>
+ <account type="12" name="Unentgeltl. Erbringung Leist. ohne USt"/>
+ <account type="12" name="Verwendung von Gegenst. (Kfz) 16% USt"/>
+ <account type="12" name="Unentgeltl. Zuwend. von Waren ohne USt"/>
+ <account type="12" name="Unentgeltl. Zuwend. von Waren 16% USt"/>
+ <account type="12" name="Unentgeltl. Erbringung Leist. 16% USt"/>
+ </account>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Erträge aus anderen Wertpapieren und Ausleihungen des Finanzanlagevermögens"/>
+ <account type="12" name="- davon aus verbundenen Unternehmen">
+ <account type="12" name="Laufende Erträge aus Anteilen Wertpapiean Kapitalgesellschaften (verbundene Unternehmen) 100 %/50 % steuerfrei"/>
+ <account type="12" name="Erträge aus anderen Wertpapieren und Ausleihungen des Finanzanlagevermögens aus Finanzverbundenen Unternehmen"/>
+ </account>
+ <account type="12" name="Laufende Erträge aus Anteilen Wertpapiere an Kapitalgesellschaften (verbundene Unternehmen) 100 %/50 % steuerfrei"/>
+ <account type="12" name="Laufende Erträge aus Anteilen an Kapitalgesellschaften (Finanzanlagevermögen) 100 %/50 % steuerfrei"/>
+ </account>
+ <account type="9" name=""/>
+ <account type="13" name="">
+ <account type="13" name="a) Aufwendungen für Roh-, Hilfs- und Betriebsstoffe und für bezogene Waren">
+ <account type="13" name="01. Aufwendungen für Roh-, Hilfs- und Betriebsstoffe und für bezogene Waren">
+ <account type="13" name="Energiestoffe"/>
+ <account type="13" name="Einkauf von Roh-,Hilfs- und Betriebsstoffen"/>
+ <account type="13" name="Aufwendungen für Roh-, Hilfs- und Betriebsstoffe und für bezogene Waren"/>
+ </account>
+ <account type="13" name="03. Statistische Konten EÜR">
+ <account type="13" name="Nachlässe">
+ <account type="13" name="Nachlässe aus innergemeinschaftlichem Erwerb 7% Vorsteuer/USt"/>
+ <account type="13" name="Erhaltene Rabatte">
+ <account type="13" name="Erhaltene Rabatte 16% Vorsteuer"/>
+ <account type="13" name="Erhaltene Rabatte 7% Vorsteuer"/>
+ </account>
+ <account type="13" name="Nachlässe 7% Vorsteuer"/>
+ <account type="13" name="Erhaltene Boni">
+ <account type="13" name="Erhaltene Boni 16% Vorsteuer"/>
+ <account type="13" name="Erhaltene Boni 7% Vorsteuer"/>
+ </account>
+ <account type="13" name="Erhaltene Skonti">
+ <account type="13" name="Erhaltene Skonti 7% Vorsteuer"/>
+ <account type="13" name="Erhaltene Skonti 16% Vorsteuer"/>
+ </account>
+ <account type="13" name="Nachlässe aus innergemeinschaftlichem Erwerb 16% Vorsteuer/USt"/>
+ <account type="13" name="Nachlsse aus innergemeinschaftlichem Erwerb 15% Vorsteuer/USt"/>
+ <account type="13" name="Nachlässe 16% Vorsteuer"/>
+ </account>
+ <account type="13" name="Bezugsnebenkosten">
+ <account type="13" name="Leergut"/>
+ <account type="13" name="Zölle und Einfuhrabgaben"/>
+ <account type="13" name="Verrechnete Stoffkosten"/>
+ </account>
+ <account type="13" name="Statistisches Konto Wareneinkauf zum allgemeinen Umsatzsteuersatz (EÜR)"/>
+ <account type="13" name="Statistisches Konto Wareneinkauf zum ermäßigten Umsatzsteuersatz (EÜR)"/>
+ <account type="13" name="Bestandsveränderungen"/>
+ <account type="13" name="Nicht abziehbare Vorsteuer">
+ <account type="13" name="Nicht abziehbare Vorsteuer 7%"/>
+ <account type="13" name="Nicht abziehbare Vorsteuer 16%"/>
+ </account>
+ <account type="13" name="Statistisches Konto Wareneinkauf ohne Vorsteuerabzug (EÜR)"/>
+ <account type="13" name="Gegenkonto 5580-5582 bei Aufteilung des Wareneinkaufs nach Steuersätzen (EÜR)"/>
+ </account>
+ <account type="13" name="02. Wareneingang">
+ <account type="13" name="lnnergemeinschaftlicher Erwerb 7% Vorsteuer und 7% Umsatzsteuer"/>
+ <account type="13" name="Wareneingang 7% Vorsteuer"/>
+ <account type="13" name="Steuerfreie Einfuhren"/>
+ <account type="13" name="Wareneingang 9% Vorsteuer"/>
+ <account type="13" name="Wareneingang 16% Vorsteuer"/>
+ <account type="13" name="Steuerfreier innergemeinschaftlicher Erwerb"/>
+ <account type="13" name="Innergemeinschaftlicher Erwerb 16% Vorsteuer und 16% Umsatzsteuer"/>
+ <account type="13" name="lnnergemeinschaftlicher Erwerb ohne Vorsteuerabzug und 7% Umsatzsteuer"/>
+ <account type="13" name="lnnergemeinschaftlicher Erwerb ohne Vorsteuerabzug und 16% Umsatzsteuer"/>
+ <account type="13" name="Innergemeinschaftlicher Erwerb von Neufahrzeugen von Lieferanten ohne UStID 16% Vorsteuer und 16% Umsatzsteuer"/>
+ <account type="13" name="Wareneingang 5% Vorsteuer"/>
+ <account type="13" name="Waren aus einem Umsatzsteuerlager, 13a UStG 16% Vorsteuer und 16% Umsatzsteuer"/>
+ <account type="13" name="Waren aus einem Umsatzsteuerlager, 13a UStG 7% Vorsteuer und 7% Umsatzsteuer"/>
+ <account type="13" name="Wareneingang"/>
+ </account>
+ </account>
+ <account type="13" name="b) Aufwendungen für bezogene Leistungen">
+ <account type="13" name="02. Umstäze, für die als Leistungsempfänger die Steuer nach 13b Abs. 2 UStG geschuldet wird">
+ <account type="13" name="Bauleistungen eines im Inland ansässigen Unternehmers 16% Vorsteuer und 16% Umsatzsteuer"/>
+ <account type="13" name="Leistungen eines im Ausland ansässigen Unternehmers ohne Vorsteuer und 7% Umsatzsteuer"/>
+ <account type="13" name="Leistungen eines im Ausland ansässigen Unternehmers ohne Vorsteuer und 16% Umsatzsteuer"/>
+ <account type="13" name="Bauleistungen eines im Inland ansässigen Unternehmers ohne Vorsteuer und 7% Umsatzsteuer"/>
+ <account type="13" name="Bauleistungen eines im Inland ansässigen Unternehmers 7% Vorsteuer und 7% Umsatzsteuer"/>
+ <account type="13" name="Leistungen von ausländischen Unternehmern"/>
+ <account type="13" name="Bauleistungen eines im Inland ansässigen Unternehmers ohne Vorsteuer und 16% Umsatzsteuer"/>
+ <account type="13" name="Leistungen eines im Ausland ansässigen Unternehmers 7% Vorsteuer und 7% Umsatzsteuer"/>
+ <account type="13" name="Leistungen eines im Ausland ansässigen Unternehmers 16% Vorsteuer und 16% Umsatzsteuer"/>
+ </account>
+ <account type="13" name="01. Fremdleistungen">
+ <account type="13" name="Fremdleistungen"/>
+ </account>
+ </account>
+ </account>
+ <account type="12" name=""/>
+ <account type="13" name="">
+ <account type="13" name="Sonstige Steuern">
+ <account type="13" name="Kfz-Steuer"/>
+ <account type="13" name="Erträge aus der Auflösung von Rückstellungen für sonstige Steuern"/>
+ <account type="13" name="Verbrauchsteuer"/>
+ <account type="13" name="Steuernachzahlungen Vorjahre für sonstige Steuern"/>
+ <account type="13" name="Ökosteuer"/>
+ <account type="12" name="Steuererstattungen Vorjahre für sonstige Steuern"/>
+ <account type="13" name="Grundsteuer">
+ <account type="13" name="Grundsteuer für Gebäude, die nicht zum Betriebsvermögen gehören"/>
+ </account>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Zinsen und ähnliche Aufwendungen 100 %/50 % nicht abzugsfähig"/>
+ <account type="13" name="Aufwendungen aus Verlustübernahme und aufgrund einer Gewinngemeinschaft, eines Gewinn- oder Teilgewinnabführungsvertrags abgeführte Gewinne">
+ <account type="13" name="Abgeführte Gewinne aufgrund eines Gewinn- oder Teilgewinnabführungsvertrags"/>
+ <account type="13" name="Abgeführte Gewinne aufgrund einer Gewinngemeinschaft"/>
+ <account type="13" name="Aufwendungen aus Verlustübernahme"/>
+ <account type="13" name="Abgeführte Gewinnanteile an stille Gesellschafter § 8 GewStG"/>
+ </account>
+ <account type="13" name="- davon an verbundene Unternehmen">
+ <account type="13" name="Zinsähnliche Aufwendungen an verbundene Unternehmen"/>
+ <account type="13" name="Zinsen und ähnliche Aufwendungen an verbundene Unternehmen 100 %/50 % nicht abzugsfähig"/>
+ <account type="13" name="Zinsaufwendungen für kurzfristige Verbindlichkeiten an verbundene Unternehmen"/>
+ <account type="13" name="Zinsaufwendungen für langfristige Verbindlichkeiten an verbundene Unternehmen"/>
+ <account type="13" name="Zinsen und ähnliche Aufwendungen an verbundene Unterbundenen nehmen"/>
+ <account type="13" name="Diskontaufwendungen an verbundene Unternehmen"/>
+ </account>
+ <account type="13" name="Diskontaufwendungen"/>
+ <account type="13" name="Zinsen und ähnliche Aufwendungen">
+ <account type="13" name="Zinsaufwendungen §§ 233a bis 237 AO"/>
+ <account type="13" name="Steuerlich nicht abzugsfähige, andere Nebenleistungen zu Steuern"/>
+ <account type="13" name="Steuerlich abzugsfähige, andere Nebenleistungen zu Steuern"/>
+ <account type="13" name="Zinsaufwendungen § 233a AO betriebliche Steuern"/>
+ </account>
+ <account type="13" name="Zinsaufwendungen für kurzfristige Verbindlichkeiten">
+ <account type="13" name="Nicht abzugsfähige Schuldzinsen (langfristig) gemäß § 4 Abs. 4a EStG"/>
+ <account type="13" name="Nicht abzugsfähige Schuldzinsen (kurzfristig) gemäß § 4 Abs. 4a EStG"/>
+ <account type="13" name="In Dauerschuldzinsen umqualifizierte Zinsen auf kurzfristige Verbindlichkeiten"/>
+ </account>
+ <account type="13" name="Zinsähnliche Aufwendungen"/>
+ <account type="13" name="Zinsaufwendungen für langfristige Verbindlichkeiten">
+ <account type="13" name="Zinsaufwendungen für Gebäude, die zum Betriebsvermögen gehören"/>
+ <account type="13" name="Zinsen zur Finanzierung des Anlagevermögen"/>
+ <account type="13" name="Zinsaufwendungen an Mitunternehmer für die Hingabe von Kapital § 15 EStG"/>
+ <account type="13" name="Renten und dauernde Lasten aus Gründung/Erwerb § 8 GewStG"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Außerordentliche Aufwendungen">
+ <account type="13" name="Außerordentliche Aufwendungen finanzwirksam"/>
+ <account type="13" name="Außerordentliche Aufwendungen nicht finanzwirksam"/>
+ </account>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="02. Entnahmen aus Gewinnrücklagen">
+ <account type="16" name="Entnahmen aus satzungsmäßigen Rücklagen"/>
+ <account type="16" name="Entnahmen aus der gesetzlichen Rücklage"/>
+ <account type="16" name="Entnahmen aus anderen Gewinnrücklagen"/>
+ <account type="16" name="Entnahmen aus der Rücklage für eigene Anteile"/>
+ <account type="16" name="Einstellungen in die Kapitalrücklage nach den Vorschriften über die vereinfachte Kapitalherabsetzung"/>
+ <account type="16" name="Erträge aus Kapitalherabsetzung"/>
+ </account>
+ <account type="16" name="01. Gewinn-/Verlustvortrag nach Verwendung">
+ <account type="16" name="Gewinnvortrag nach Verwendung"/>
+ <account type="16" name="Gewinnvortrag 40% Vorbelastung"/>
+ <account type="16" name="Entnahmen aus der Kapitalrücklage"/>
+ <account type="16" name="Gewinnvortrag 0% Vorbelastung (steuerliches Einlagekonto)"/>
+ <account type="16" name="Verlustvortrag nach Verwendung"/>
+ <account type="16" name="Gewinnvortrag 0% Vorbelastung (EK02)"/>
+ </account>
+ <account type="16" name="03. Einstellungen in Gewinnrücklagen">
+ <account type="16" name="Vorabausschüttung"/>
+ <account type="16" name="Einstellungen in die gesetzliche Rücklage"/>
+ <account type="16" name="Einstellungen in satzungsmäßige Rücklagen"/>
+ <account type="16" name="Einstellungen in die Rücklage für eigene Anteile"/>
+ <account type="16" name="Einstellungen in andere Gewinnrücklagen"/>
+ <account type="16" name="Aufwendungen/Erträge aus Umrechnungsdifferenzen"/>
+ <account type="16" name="Vortrag auf neue Rechnung (GuV)"/>
+ </account>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Erlöse a. Verkäufen Finanzanlagen"/>
+ <account type="12" name="Erträge aus dem Abgang von Gegenständen des Umlaufvermögens (außer Vorräten) 100%/50% steuerfrei"/>
+ <account type="12" name="Sachbezüge 16% USt"/>
+ <account type="12" name="Erträge aus der Auflösung von Sonderposten mit Rücklageanteil (steuerfreie Rücklagen)"/>
+ <account type="12" name="Erlöse Verkäufe immat.Vermögensgegenst"/>
+ <account type="12" name="Steuerfreie Erträge aus der Auflösung von Sonderposten mit Rücklageanteil"/>
+ <account type="12" name="Investitionszuschüsse"/>
+ <account type="12" name="Anlagenabgänge Finanzanlagen 100 %/50 % steuerfrei"/>
+ <account type="12" name="Verrechnete sonstige Sachbezüge ohne Umsatzsteuer"/>
+ <account type="12" name="Erträge aus Zuschreibungen des Sachanlagevermögen"/>
+ <account type="12" name="Erträge aus abgeschriebenen Forderungen"/>
+ <account type="12" name="Erträge aus der Auflösung von Sonderposten mit Rücklageanteil nach 52 Abs. 16 EStG"/>
+ <account type="12" name="Grundstückserträge"/>
+ <account type="12" name="Abgänge Finanzanlagen"/>
+ <account type="12" name="Verrechnete sonstige Sachbezüge"/>
+ <account type="12" name="Erträge aus Abgang von Gegenständen des Anlagevermögens"/>
+ <account type="12" name="Versicherungsentschädigungen"/>
+ <account type="12" name="Erlöse Sachanlageverkäufe"/>
+ <account type="12" name="Erträge aus der Auflösung von Sonderposten mit Rücklageanteil (aus der Währungsumstellung auf den Euro)"/>
+ <account type="12" name="Erträge aus der Auflösung von Sonderposten mit Rücklageanteil (Sonderabschreibungen)"/>
+ <account type="12" name="Erträge aus Zuschreibungen des Finanzanlagevermögens"/>
+ <account type="12" name="Erträge aus der Auflösung von Rückstellungen"/>
+ <account type="12" name="Periodenfremde Erträge"/>
+ <account type="12" name="Verrechnete sonstige Sachbezüge 16% USt"/>
+ <account type="12" name="Sonstige steuerfreie Betriebseinnahmen"/>
+ <account type="12" name="Erträge aus Zuschreibungen des anderen Anlagevermögens 100 %/50 % steuerfrei"/>
+ <account type="12" name="Investitionszulagen"/>
+ <account type="12" name="Erlöse Sachanlageverkäufe steuerfrei § 4 Nr. 1b"/>
+ <account type="12" name="Erlöse Sachanlageverkäufe steuerfrei § 4 Nr. 1a"/>
+ <account type="12" name="Erträge aus der steuerlich niedrigeren Bewertung von Verbindlichkeiten"/>
+ <account type="12" name="Sachbezüge 7% USt"/>
+ <account type="12" name="Erträge aus Zuschreibungen des immateriellen Anlagevermög."/>
+ <account type="12" name="Verrechnete sonstige Sachbezüge (keine Waren)"/>
+ <account type="12" name="Erträge aus dem Abgang von Gegenständen des Umlaufvermögens außer Vorräten"/>
+ <account type="12" name="Anlagenabgänge Sachanlagen"/>
+ <account type="12" name="Erträge aus Zuschreibungen des Umlaufvermögens 100 % /50 % steuerfrei"/>
+ <account type="12" name="Erlöse aus Verkäufen des Anlagevermögens 16% USt"/>
+ <account type="12" name="Erträge aus der Auflösung von Sonderposten mit Rücklageanteil (Existenzgründerrücklage)"/>
+ <account type="12" name="Erträge aus der Veräußerung von Anteilen an Kapitalgesellschaften 100 %/50 % steuerfrei"/>
+ <account type="12" name="Erträge aus Zuschreibungen des Finanzanlagevermögens 100 %/50 % steuerfrei"/>
+ <account type="12" name="Erträge aus der Auflösung von Sonderposten mit Rücklageanteil (Ansparabschreibungen)"/>
+ <account type="12" name="Erträge aus Kursdifferenzen">
+ <account type="12" name="Erträge Bewertung Finanzmittelfonds"/>
+ </account>
+ <account type="12" name="Erträge aus der Herabsetzung der Pauschalwertberichtigung zu Forderungen"/>
+ <account type="12" name="Anlagenabgänge immaterielle Vermögensgegenstände"/>
+ <account type="12" name="Erträge aus der steuerlich niedrigeren Bewertung von Rückstellungen"/>
+ <account type="12" name="Erträge aus der Herabsetzung der Einzelwertberichtigung zu Forderungen"/>
+ <account type="12" name="Erlöse aus Verkäufen Finanzanlagen 100 %/50 % steuerfrei"/>
+ <account type="12" name="Erträge aus Zuschreibungen des Umlaufvermögens außer Vorräten"/>
+ <account type="12" name="Sonstige betriebliche Erträge">
+ <account type="12" name="Sonstige betriebl. regelm. Erträge"/>
+ <account type="12" name="Sonstige Erträge betriebl., regelm. 16%"/>
+ <account type="12" name="Sonstige Erträge unregelmäßig"/>
+ <account type="12" name="Sonstige betriebsfr.regelm. Erträge"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="b) auf Vermögensgegenstände des Umlaufvermögens">
+ <account type="13" name="Abschreibung auf Vermögensgegenstände des Umlaufvermögens">
+ <account type="13" name="Vorwegnahme künftiger Wertschwankungen im Umlaufvermögen"/>
+ <account type="13" name="Abschreibungen auf Umlaufvermögen, steuerrechtlich bedingt"/>
+ </account>
+ <account type="13" name="Forderungsverluste">
+ <account type="13" name="Forderungsverluste 7% USt"/>
+ <account type="13" name="Forderungsverluste 16% USt"/>
+ </account>
+ </account>
+ <account type="13" name="a) auf immaterielle Vermögensgegenstände des Anlagevermögens und Sachanlagen">
+ <account type="13" name="Abschreibungen auf Aufwendungen für die Währungsumstellung auf den Euro"/>
+ <account type="13" name="Abschreibungen auf immaterielle Vermögensgegenstände">
+ <account type="13" name="Außerplanmäßige Abschreibungen auf immaterielle Vermögensgegenstände"/>
+ <account type="13" name="Abschreibungen auf den Geschäfts- oder Firmenwert"/>
+ </account>
+ <account type="13" name="Sofortabschreibungen geringwertiger Wirtschaftsgüter">
+ <account type="13" name="Abschreibungen auf aktivierte geringwertige Wirtschaftsgüter"/>
+ <account type="13" name="Außerplanmäßige Abschreibungen auf aktivierte geringwertige Wirtschaftsgüter"/>
+ </account>
+ <account type="13" name="Abschreibungen auf das Anlagevermögen">
+ <account type="13" name="Sonderabschreibungen nach 7g Abs. 1 und 2 EStG (fr Kfz)"/>
+ <account type="13" name="Absetzung für außergewöhnliche technische und wirtschaftliche Abnutzung sonstiger Wirtschaftsgüter"/>
+ <account type="13" name="Kaufleasing"/>
+ <account type="13" name="Abschreibungen auf Kfz"/>
+ <account type="13" name="Abschreibungen auf Gebäude"/>
+ <account type="13" name="Absetzung für außergewöhnliche technische und wirtschaftliche Abnutzung der Kfz"/>
+ <account type="13" name="Außerplanmäßige Abschreibungen auf Sachanlagen"/>
+ <account type="13" name="Sonderabschreibungen nach 7g Abs. 1 und 2 EStG (ohne Kfz)"/>
+ <account type="13" name="Absetzung für außergewöhnliche technische und wirtschaftliche Abnutzung der Gebäude"/>
+ <account type="13" name="Abschreibungen auf Sachanlagen aufgrund steuerlicher Sondervorschriften"/>
+ </account>
+ <account type="13" name="Abschreibungen auf Aufwendungen für die Ingangsetzung und Erweiterung des Geschäftsbetriebs"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Gewerbeertragsteuer"/>
+ <account type="12" name="Steuererstattungen Vorjahre für Steuern vom Einkommen und Ertrag"/>
+ <account type="13" name="Anrechenbarer Solidaritätszuschlag auf Kapitelertragsteuer 20%"/>
+ <account type="13" name="Kapitalertragsteuer 25%"/>
+ <account type="13" name="Steuernachzahlungen Vorjahre für Steuern vom Einkommen und Ertrag"/>
+ <account type="13" name="Solidaritätszuschlag für Vorjahre"/>
+ <account type="13" name="Solidaritätszuschlag"/>
+ <account type="13" name="Kapitalertragsteuer 20%"/>
+ <account type="13" name="Gewerbesteuer"/>
+ <account type="12" name="Solidaritätszuschlagerstattungen für Vorjahre"/>
+ <account type="13" name="Zinsabschlagsteuer"/>
+ <account type="12" name="Erträge aus der Auflösung von Rückstellungen für Steuern vom Einkommen und Ertrag"/>
+ <account type="13" name="Körperschaftsteuer">
+ <account type="13" name="Körperschaftsteuer für Vorjahre"/>
+ <account type="12" name="Körperschaftsteuererstattung Vorjahre"/>
+ </account>
+ <account type="13" name="Anrechenbarer Solidaritätszuschlag auf Zinsabschlagsteuer"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Abschreibungen auf Finanzanlagen">
+ <account type="13" name="Abschreibungen auf Wertpapiere des Umlaufvermögens 100% / 50% nicht abzugsfähig"/>
+ <account type="13" name="Abschreibungen aufgrund von Verlustanteilen an Mitunternehmerschaften § 8 GewStG"/>
+ <account type="13" name="Abschreibungen auf Finanzanlagen aufgrund steuerlicher Sondervorschriften"/>
+ <account type="13" name="Abschreibungen auf Finanzanlagen auf Grund steuerlicher Sondervorschriften 100% / 50% nicht abzugsfähig"/>
+ <account type="13" name="Vorwegnahme künfiger Wertschwankungen bei Wertpapieren des Umlaufvermögens"/>
+ <account type="13" name="Abschreibungen auf Wertpapiere des Umlaufvermögens"/>
+ <account type="13" name="Abschreibungen auf Finanzanlagen 100% / 50% nicht abzugsfähig"/>
+ </account>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Andere aktivierte Eigenleistungen"/>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="C. Verbindlichkeiten"/>
+ <account type="10" name="D. Rechnungsabgrenzungsposten Fremdkapital">
+ <account type="10" name="Passive Rechnungsabgrenzung"/>
+ <account type="10" name="Abgrenzungen zur unterjährigen Kostenverrechnung für BWA"/>
+ </account>
+ <account type="10" name="A. Eigenkapital">
+ <account type="10" name="a) Personengesellschaft">
+ <account type="10" name="IV. Privat Teilhafter">
+ <account type="10" name="Unentgeltliche Wertabgaben"/>
+ <account type="10" name="Zuwendungen, Spenden -79"/>
+ <account type="10" name="Grundstücksaufwand"/>
+ <account type="10" name="Privatsteuern"/>
+ <account type="10" name="Sonderausgaben unbeschränkt abzugsfähig"/>
+ <account type="10" name="Privateinlagen"/>
+ <account type="10" name="Außergewöhnliche Belastungen"/>
+ <account type="10" name="Privatentnahmen allgemein"/>
+ <account type="10" name="Grundstücksertrag"/>
+ <account type="10" name="Sonderausgaben beschränkt abzugsfähig"/>
+ </account>
+ <account type="10" name="II. Kapital / Teilhafter">
+ <account type="10" name="(zur freien Verfügung)"/>
+ <account type="10" name="Gesellschafter-Darlehen"/>
+ <account type="10" name="Kommandit-Kapital"/>
+ <account type="10" name="Verlustausgleichskonto"/>
+ </account>
+ <account type="10" name="I. Kapital / Vollhafter / Einzelunternehmer">
+ <account type="10" name="Variables Kapital"/>
+ <account type="10" name="(zur freien Verfügung)"/>
+ <account type="10" name="Gesellschafter-Darlehen"/>
+ <account type="10" name="Festkapital"/>
+ </account>
+ <account type="10" name="III. Privat Vollhafter/Einzelunternehmer">
+ <account type="10" name="Privateinlagen"/>
+ <account type="10" name="Grundstücksaufwand (Umsatzsteuerschlüssel möglich)"/>
+ <account type="10" name="Privatentnahmen allgemein"/>
+ <account type="10" name="Außergewöhnliche Belastungen"/>
+ <account type="10" name="Sonderausgaben unbeschränkt abzugsfähig"/>
+ <account type="10" name="Grundstücksertrag"/>
+ <account type="10" name="Zuwendungen, Spenden -79"/>
+ <account type="10" name="Grundstücksaufwand"/>
+ <account type="10" name="Grundstücksertrag (Umsatzsteuerschlüssel möglich)"/>
+ <account type="10" name="Sonderausgaben beschränkt abzugsfähig"/>
+ <account type="10" name="Unentgeltliche Wertabgaben"/>
+ <account type="10" name="Privatsteuern"/>
+ </account>
+ </account>
+ <account type="10" name="c) alle">
+ <account type="10" name="I. Gewinnrücklagen">
+ <account type="10" name="02. Rücklage für eigene Anteile"/>
+ <account type="10" name="03. Satzungsmäßige Rücklagen">
+ <account type="10" name="Satzungsmäßige Rücklagen 0% Vorbelastung (steuerliches Einlagekonto)"/>
+ <account type="10" name="Satzungsmäßige Rücklagen 40% Vorbelastung"/>
+ <account type="10" name="Satzungsmäßige Rücklagen 0% Vorbelastung (EK02)"/>
+ </account>
+ <account type="10" name="04. Andere Gewinnrücklagen">
+ <account type="10" name="Andere Gewinnrücklagen 0% Vorbelastung (steuerliches Einlagekonto)"/>
+ <account type="10" name="Eigenkapitalanteil von Wertaufholungen"/>
+ <account type="10" name="Andere Gewinnrücklagen 40% Vorbelastung"/>
+ <account type="10" name="Andere Gewinnrücklagen 0% Vorbelastung (EK02)"/>
+ </account>
+ <account type="10" name="01. Gesetzliche Rücklage">
+ <account type="10" name="Gesetzliche Rücklage 0% Vorbelastung (EK02)"/>
+ <account type="10" name="Gesetzliche Rücklage 0% Vorbelastung (steuerliches Einlagekonto)"/>
+ <account type="10" name="Gesetzliche Rücklage 40% Vorbelastung"/>
+ </account>
+ </account>
+ <account type="10" name="II. Gewinnvortrag/Verlustvortrag vor Verwendung">
+ <account type="10" name="Vortrag auf neue Rechnung (Bilanz)"/>
+ <account type="10" name="Gewinnvortrag 0% Vorbelastung (EK02)"/>
+ <account type="10" name="Verlustvortrag vor Verwendung"/>
+ <account type="10" name="Gewinnvortrag 0% Vorbelastung (steuerliches Einlagekonto)"/>
+ <account type="10" name="Gewinnvortrag vor Verwendung"/>
+ <account type="10" name="Gewinnvortrag 40% Vorbelastung"/>
+ </account>
+ <account type="10" name="III. Sonderposten mit Rücklageanteil">
+ <account type="10" name="Sonderposten mit Rücklageanteil, steuerfreie Rücklagen">
+ <account type="10" name="Sonderposten mit Rücklageanteil nach § 82d EStDV"/>
+ <account type="10" name="Sonderposten mit Rücklageanteil nach § 14 BerlinFG"/>
+ <account type="10" name="Sonderposten mit Rücklageanteil nach § 4d EStG"/>
+ <account type="10" name="Sonderposten mit Rücklageanteil für Förderung nach § 3 ZonenRFG/§ 4-6 FördergebietsG"/>
+ <account type="10" name="Sonderposten mit Rücklageanteil, Sonderabschreibungen"/>
+ <account type="10" name="Sonderposten mit Rücklageanteil nach § 7d EStG"/>
+ <account type="10" name="Sonderposten für Zuschüsse und Zulagen"/>
+ <account type="10" name="Sonderposten mit Rücklageanteil nach § 82e EStDV"/>
+ <account type="10" name="Sonderposten mit Rücklageanteil nach § 80 EStDV"/>
+ <account type="10" name="Sonderposten mit Rücklagenanteil nach § 1 EntwLStG"/>
+ <account type="10" name="Sonderposten mit Rücklagenanteil nach § 6b EStG"/>
+ <account type="10" name="Sonderposten mit Rücklageanteil nach § 7g Abs. 1 EStG"/>
+ <account type="10" name="Sonderposten mit Rücklageanteil nach § 81 EStDV"/>
+ <account type="10" name="Sonderposten mit Rücklagenanteil nach § 6d EStG"/>
+ <account type="10" name="Sonderposten mit Rücklageanteil nach § 82a EStDV"/>
+ <account type="10" name="Sonderposten mit Rücklagenanteil nach Abschnitt 35 EStR"/>
+ <account type="10" name="Sonderposten mit Rücklageanteil nach § 7g Abs. 3, 7 EStG"/>
+ <account type="10" name="Sonderposten aus der Währungsumstellung auf den Euro"/>
+ <account type="10" name="Sonderposten mit Rücklageanteil nach § 79 EStDV"/>
+ </account>
+ </account>
+ <account type="10" name="IV. Jahresüberschuß/Jahresfehlbetrag"/>
+ </account>
+ <account type="10" name="b) Kapitalgesellschaft">
+ <account type="10" name="II. Kapitalrücklage">
+ <account type="10" name="Kapitalrücklage">
+ <account type="10" name="Kapitalrücklage durch Zuzahlungen gegen Gewährung eines Vorzugs für Anteile"/>
+ <account type="10" name="Kapitalrücklage durch Ausgabe von Anteilen über Nennbetrag"/>
+ <account type="10" name="Kapitalrücklage durch Ausgabe von Schuldverschreibungen für Wandlungsrechte und Optionsrechte zum Erwerb von Anteilen"/>
+ <account type="10" name="Eingefordertes Nachschusskapital"/>
+ <account type="10" name="Andere Zuzahlungen in das Eigenkapital"/>
+ </account>
+ </account>
+ <account type="10" name="I. Gezeichnetes Kapital">
+ <account type="10" name="Gezeichnetes Kapital"/>
+ <account type="10" name="Ausstehende Einlagen auf das gezeichnete Kapital, nicht eingefordert"/>
+ </account>
+ </account>
+ </account>
+ <account type="10" name="B. Rückstellungen">
+ <account type="10" name="02. Steuerrückstellungen">
+ <account type="10" name="Körperschaftsteuerrückstellung"/>
+ <account type="10" name="Gewerbesteuerrückstellung"/>
+ <account type="10" name="Rückstellungen für latente Steuern"/>
+ <account type="10" name="Vermögensteuerrückstellung"/>
+ </account>
+ <account type="10" name="03. Sonstige Rückstellungen">
+ <account type="10" name="Rückstellungen für Gewährleistung"/>
+ <account type="10" name="Rückstellungen für Abraum- und Abfallbeseitigung"/>
+ <account type="10" name="Rückstellungen für unterlassene Aufwendungen für Instandhaltung, Nachholung in den ersten drei Monaten"/>
+ <account type="10" name="Rückstellungen für drohende Verluste aus schwebenden Geschäften"/>
+ <account type="10" name="Rückstellungen für unterlassene Aufwendungen für Instandhaltung, Nachholung innerhalb des 4. bis 12. Monats"/>
+ <account type="10" name="Rückstellungen für Umweltschutz"/>
+ <account type="10" name="Rückstellungen für Abschluß- und Prüfungskosten"/>
+ <account type="10" name="Aufwandsrückstellungen gemäß § 249 Abs. 2 HGB"/>
+ </account>
+ <account type="10" name="01. Rückstellungen für Pensionen und ähnliche Verpflichtungen">
+ <account type="10" name="Rückstellungen für pensionsähnliche Verpflichtungen"/>
+ <account type="10" name="Pensionsrückstellungen"/>
+ </account>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="b) soziale Abgaben und Aufwendungen für Altersversorgung und Unterstützung">
+ <account type="13" name="Aufwendungen für Unterstützung"/>
+ <account type="13" name="Pauschale Steuer auf sonstige Bezüge"/>
+ <account type="13" name="Beiträge zur Berufsgenossenschaft"/>
+ <account type="13" name="Gesetzlich soziale Aufwendungen">
+ <account type="13" name="Gesetzliche soziale Aufwendungen für Mitunternehmer 15 EStG"/>
+ </account>
+ <account type="13" name="Sonstige soziale Abgaben"/>
+ <account type="13" name="Freiwillige soziale Aufwendungen lohnsteuerfrei"/>
+ <account type="13" name="Versorgungskassen"/>
+ <account type="13" name="- davon für Altersversorgung">
+ <account type="13" name="Pauschale Steuer für Versicherungen"/>
+ <account type="13" name="Aufwendungen für Altersversorgung für Mitunternehmer 15 EStG"/>
+ <account type="13" name="Aufwendungen für Altersversorgung"/>
+ </account>
+ </account>
+ <account type="13" name="a) Löhne und Gehälter">
+ <account type="13" name="Löhne"/>
+ <account type="13" name="Pauschale Steuer auf sonstige Bezüge"/>
+ <account type="13" name="Fahrtkostenerstattung Wohnung / Arbeitsstätte"/>
+ <account type="13" name="Aushilfslöhne"/>
+ <account type="13" name="Vermögenswirksame Leistungen"/>
+ <account type="13" name="Krankengeldzuschüsse"/>
+ <account type="13" name="Gehälter">
+ <account type="13" name="Tantiemen"/>
+ <account type="13" name="Geschäftsführergehälter"/>
+ <account type="13" name="Vergütung an angestellte Mitunternehmer 15 EStG"/>
+ <account type="13" name="Geschäftsführergehälter der GmbH-Gesellschafter"/>
+ </account>
+ <account type="13" name="Freiwillige soziale Aufwendungen, lohnsteuerpflichtig"/>
+ <account type="13" name="Pauschale Steuer für Aushilfen"/>
+ <account type="13" name="Ehegattengehalt"/>
+ <account type="13" name="Zuschüsse der Agenturen für Arbeit"/>
+ <account type="13" name="Bedienungsgelder"/>
+ </account>
+ </account>
+ <account type="16" name=""/>
+ <account type="16" name="">
+ <account type="16" name="Saldenvorträge Debitoren"/>
+ <account type="16" name="Saldenvorträge Sachkonten"/>
+ <account type="16" name="Saldenvorträge Kreditoren"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/de_DE/studium.kmt b/kmymoney2/templates/de_DE/studium.kmt
new file mode 100644
index 0000000..baa1df3
--- /dev/null
+++ b/kmymoney2/templates/de_DE/studium.kmt
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/de_DE/acctchrt_studium.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Studium</title>
+ <shortdesc>Konten für Studentinnen und Studenten</shortdesc>
+ <longdesc>BAFöG, Studiengebühren</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Bildung">
+ <account type="13" name="Studiengebühren"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Kredite">
+ <account type="10" name="BAFöG"/>
+ </account>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="BAFöG"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/dk/Makefile.am b/kmymoney2/templates/dk/Makefile.am
new file mode 100644
index 0000000..6402842
--- /dev/null
+++ b/kmymoney2/templates/dk/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/dk
+
+template_DATA = homeown.kmt homeloan.kmt common.kmt car.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/dk/car.kmt b/kmymoney2/templates/dk/car.kmt
new file mode 100644
index 0000000..cbce52d
--- /dev/null
+++ b/kmymoney2/templates/dk/car.kmt
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/da/acctchrt_car.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Bilejer</title>
+ <shortdesc>Udgifter vedrørende bil</shortdesc>
+ <longdesc>Udgifter i forbindelse med at holde bil. Vedligehold, drift og skatter.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Bil">
+ <account type="13" name="Parking"/>
+ <account type="13" name="Benzin"/>
+ <account type="13" name="Reparation og vedligehold"/>
+ <account type="13" name="Vægtafgift"/>
+ </account>
+ <account type="13" name="Forsikring">
+ <account type="13" name="Bilforsikring"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/dk/common.kmt b/kmymoney2/templates/dk/common.kmt
new file mode 100644
index 0000000..c4ecdb6
--- /dev/null
+++ b/kmymoney2/templates/dk/common.kmt
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/da/acctchrt_common.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Basiskonti</title>
+ <shortdesc>En samling grundlæggende konti</shortdesc>
+ <longdesc>De fleste brugere kan have nytte af disse konti. Almindelige brugte konti er medtaget (check, lønkonto, kontant, kreditkort, indkomst og almindelige udgifter)</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Bonus"/>
+ <account type="12" name="Andre indtægter"/>
+ <account type="12" name="Modtagne gaver"/>
+ <account type="12" name="Løn"/>
+ <account type="12" name="Renteindtægter">
+ <account type="12" name="Andre renter"/>
+ <account type="12" name="Lønkontorenter"/>
+ <account type="12" name="Checkrenter"/>
+ </account>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="Åbningssaldi"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Aktuelle aktiver">
+ <account type="1" name="Checkkonto"/>
+ <account type="3" name="Kontanter på lommen"/>
+ <account type="1" name="Lønkonto"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Underholdning">
+ <account type="13" name="Musik/film"/>
+ <account type="13" name="Rejser"/>
+ <account type="13" name="Fritid"/>
+ </account>
+ <account type="13" name="Bøger"/>
+ <account type="13" name="Cykel"/>
+ <account type="13" name="Restaurant"/>
+ <account type="13" name="Gaver"/>
+ <account type="13" name="Medicin"/>
+ <account type="13" name="Velgørenhed"/>
+ <account type="13" name="Offentlig transport"/>
+ <account type="13" name="Bankgebyrer"/>
+ <account type="13" name="Uddannelse"/>
+ <account type="13" name="Forsyning">
+ <account type="13" name="Vand"/>
+ <account type="13" name="Gas"/>
+ <account type="13" name="Affald"/>
+ <account type="13" name="El"/>
+ </account>
+ <account type="13" name="Tøj"/>
+ <account type="13" name="Abonnementer"/>
+ <account type="13" name="Telefon"/>
+ <account type="13" name="Forsikring">
+ <account type="13" name="Indboforsikring"/>
+ <account type="13" name="Livsforsikring"/>
+ <account type="13" name="Sygesikring"/>
+ </account>
+ <account type="13" name="Internet"/>
+ <account type="13" name="Justering"/>
+ <account type="13" name="Skatter/afgifter">
+ <account type="13" name="Kommune"/>
+ <account type="13" name="Stat"/>
+ <account type="13" name="Amt"/>
+ <account type="13" name="Andre skatter"/>
+ </account>
+ <account type="13" name="Computer"/>
+ <account type="13" name="Tøjvask/rensning"/>
+ <account type="13" name="Diverse"/>
+ <account type="13" name="Husholdning"/>
+ <account type="13" name="Antenne"/>
+ <account type="13" name="Hobby"/>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Forventede udgifter">
+ <account type="4" name="Kreditkort"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/dk/homeloan.kmt b/kmymoney2/templates/dk/homeloan.kmt
new file mode 100644
index 0000000..66d9ea9
--- /dev/null
+++ b/kmymoney2/templates/dk/homeloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/da/acctchrt_homeloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Realkreditlån</title>
+ <shortdesc>Konti i forbindelse med realkreditlån og tilhørende renter</shortdesc>
+ <longdesc>Du vil have nytte af disse konti, hvis du har et realkreditlån.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Renter">
+ <account type="13" name="Realkreditrenter"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Lån">
+ <account type="10" name="Realkreditlån"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/dk/homeown.kmt b/kmymoney2/templates/dk/homeown.kmt
new file mode 100644
index 0000000..98d0c55
--- /dev/null
+++ b/kmymoney2/templates/dk/homeown.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/da/acctchrt_homeown.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Boligejer</title>
+ <shortdesc>Udgifter i forbindelse med at eje en bolig</shortdesc>
+ <longdesc>Du vil have nytte af disse konti, hvis du ejer en bolig. Konti til at holde øje med udgifter til boligen er medtaget (forsikring, skatter, vedligehold)</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Skatter/afgifter">
+ <account type="13" name="Ejendomsskat"/>
+ </account>
+ <account type="13" name="Forsikring">
+ <account type="13" name="Husforsikring"/>
+ </account>
+ <account type="13" name="Fællesudgifter"/>
+ <account type="13" name="Vedligehold af bolig"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/el_GR/Makefile.am b/kmymoney2/templates/el_GR/Makefile.am
new file mode 100644
index 0000000..42268ea
--- /dev/null
+++ b/kmymoney2/templates/el_GR/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/el_GR
+
+template_DATA = common.kmt brokerage.kmt carloan.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/el_GR/brokerage.kmt b/kmymoney2/templates/el_GR/brokerage.kmt
new file mode 100644
index 0000000..2b9b8cc
--- /dev/null
+++ b/kmymoney2/templates/el_GR/brokerage.kmt
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/el_GR/acctchrt_brokerage.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Λογαριασμοί Επενδύσεων</title>
+ <shortdesc>Λογαριασμός Χρηματιστηριακής με τους κατάλληλους λογαριασμούς επενδύσεων (μετοχή, ομόλογο, αμοιβαίο κεφάλαιο, αμοιβαίο κεφάλαιο δείκτη, τόκοι, μέρισμα)</shortdesc>
+ <longdesc>Θα θέλατε να επιλέξετε αυτό το σύνολο λογαριασμών αν έχετε επενδύσεις (μετοχή, ομολογία, αμοιβαίο κεφάλαιο, αμοιβαίο κεφάλαιο δείκτη, τόκοι μέρισμα).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Προμήθειες"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Έσοδα από Τόκους"/>
+ <account type="12" name="Έσοδα από Μέρισμα">
+ <account type="12" name="Τόκοι Ομολόγου"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Έπενδύσεις">
+ <account type="7" name="Λογαριασμός Χρηματιστή"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/el_GR/carloan.kmt b/kmymoney2/templates/el_GR/carloan.kmt
new file mode 100644
index 0000000..fdd9bd5
--- /dev/null
+++ b/kmymoney2/templates/el_GR/carloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/el_GR/acctchrt_carloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Δάνειο Αυτοκινήτου</title>
+ <shortdesc>Λογαριασμοί δανείου για την αγορά αυτοκινήτου</shortdesc>
+ <longdesc>Επιλέξτε αυτούς τους λογαριασμούς αν έχετε πάρει δάνειο για αγορά αυτοκινήτου (δάνειο αυτοκινήτου, τόκοι δανείου).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Τόκοι">
+ <account type="13" name="Τόκοι δανείου αυτοκινήτου"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Δάνεια">
+ <account type="10" name="Δάνειο αυτοκινήτου"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/el_GR/common.kmt b/kmymoney2/templates/el_GR/common.kmt
new file mode 100644
index 0000000..21f6259
--- /dev/null
+++ b/kmymoney2/templates/el_GR/common.kmt
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/el_GR/acctchrt_common.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Συνήθεις Λογαριασμοί</title>
+ <shortdesc>Ένα βασικό σύνολο λογαριασμών που χρησιμοποιούνται συχνά</shortdesc>
+ <longdesc>Οι περισσότεροι χρήστες θα ήθελαν να επιλέξουν αυτούς τους λογαριασμούς. Περιλαμβάνουν τους πιό συχνά χρησιμοποιούμενους λογαριασμούς (Επιταγές, αποταμίευση, μετρητά, πιστωτική κάρτα, εισόδημα , συνήθεις δαπάνες)</longdesc>
+ <accounts>
+ <account type="16" name="">
+ <account type="16" name="Αρχικά υπόλοιπα"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Τρέχων ενεργητικό">
+ <account type="1" name="Λογαριασμός όψεως"/>
+ <account type="3" name="Μετρητά"/>
+ <account type="1" name="Λογαριασμός ταμιευτηρίου"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Γεύματα"/>
+ <account type="13" name="Δημόσια Μέσα μεταφοράς"/>
+ <account type="13" name="Εκπαίδευση"/>
+ <account type="13" name="Κοινή ωφέλεια">
+ <account type="13" name="Γκάζι"/>
+ <account type="13" name="Αποκομιδή σκουπιδιών"/>
+ <account type="13" name="Νερό"/>
+ <account type="13" name="Ηλεκτρικό ρεύμα"/>
+ </account>
+ <account type="13" name="Συνδρομές"/>
+ <account type="13" name="Τηλέφωνο"/>
+ <account type="13" name="Διαδίκτυο"/>
+ <account type="13" name="Παντοπωλείο"/>
+ <account type="13" name="Διασκέδαση">
+ <account type="13" name="Ταξίδια"/>
+ <account type="13" name="Ψυχαγωγία"/>
+ <account type="13" name="Μουσική/Ταινίες"/>
+ </account>
+ <account type="13" name="Βιβλία"/>
+ <account type="13" name="Δώρα"/>
+ <account type="13" name="Ιατρικές δαπάνες"/>
+ <account type="13" name="Δωρεές"/>
+ <account type="13" name="Αυτοκίνητο">
+ <account type="13" name="Καύσιμα"/>
+ <account type="13" name="Συντήρηση"/>
+ <account type="13" name="Στάθμευση"/>
+ <account type="13" name="Τέλη"/>
+ </account>
+ <account type="13" name="Τραπεζικά έξοδα"/>
+ <account type="13" name="Ρούχα"/>
+ <account type="13" name="Εφοδιασμός"/>
+ <account type="13" name="Ασφάλιση">
+ <account type="13" name="Ασφάλεια αυτοκινήτου"/>
+ <account type="13" name="Ασφάλεια Ζωής"/>
+ <account type="13" name="Ασφάλεια υγείας"/>
+ </account>
+ <account type="13" name="Προσαρμογή"/>
+ <account type="13" name="Φόροι">
+ <account type="13" name="Δήμος"/>
+ <account type="13" name="Κοινωνική ασφάλιση"/>
+ <account type="13" name="Εφορία"/>
+ <account type="13" name="Ιατροφαρμακευτική περίθαλψη"/>
+ <account type="13" name="Διάφοροι φόροι"/>
+ </account>
+ <account type="13" name="Υπολογιστής"/>
+ <account type="13" name="Καθαριστήριο/Πλυντήριο"/>
+ <account type="13" name="Διάφορα"/>
+ <account type="13" name="Καλωδιακές υπηρεσίες"/>
+ <account type="13" name="Hobbies"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Bonus"/>
+ <account type="12" name="Άλλα έσοδα"/>
+ <account type="12" name="Δώρα που λάβαμε"/>
+ <account type="12" name="Μισθός"/>
+ <account type="12" name="Εισόδημα από τόκους">
+ <account type="12" name="Τόκοι λογαριασμού όψεως"/>
+ <account type="12" name="Άλλα έσοδα"/>
+ <account type="12" name="Τόκοι αποταμίευσης"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Λογαριασμοί πληρωτέοι">
+ <account type="4" name="Πιστωτική κάρτα"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_GB/Makefile.am b/kmymoney2/templates/en_GB/Makefile.am
new file mode 100644
index 0000000..527a495
--- /dev/null
+++ b/kmymoney2/templates/en_GB/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/en_GB
+
+template_DATA = homeown.kmt full.kmt fixedassets.kmt retiremt.kmt eduloan.kmt homeloan.kmt default_accounts.kmt renter.kmt common.kmt spouseretire.kmt brokerage.kmt childcare.kmt cdmoneymkt.kmt checkbook.kmt carloan.kmt otherloan.kmt business.kmt spouseinc.kmt uk-vat.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/en_GB/brokerage.kmt b/kmymoney2/templates/en_GB/brokerage.kmt
new file mode 100644
index 0000000..b0835e9
--- /dev/null
+++ b/kmymoney2/templates/en_GB/brokerage.kmt
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/en_GB/acctchrt_brokerage.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Investment Accounts</title>
+ <shortdesc>Brokerage account with related investment accounts (stock, bond, mutual fund, index fund, interest, dividend)</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have investments (stock, bond, mutual fund, index fund, interest, dividend).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Commissions"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Dividend Income"/>
+ <account type="12" name="Interest Income">
+ <account type="12" name="Bond Interest"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Investments">
+ <account type="7" name="Brokerage Account"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_GB/business.kmt b/kmymoney2/templates/en_GB/business.kmt
new file mode 100644
index 0000000..8a36f33
--- /dev/null
+++ b/kmymoney2/templates/en_GB/business.kmt
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/en_GB/acctchrt_business.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Business Accounts</title>
+ <shortdesc>Full chart of accounts for a business.</shortdesc>
+ <longdesc>Users running a business want to select this instead of other choices. This includes all the accounts you need to run a most businesses, including Payables, Receivables, Income, and Expenses.</longdesc>
+ <accounts>
+ <account type="10" name="">
+ <account type="4" name="Credit Card"/>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="Retained Earnings"/>
+ <account type="16" name="Opening Balances"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Equipment Rental"/>
+ <account type="13" name="Miscellaneous"/>
+ <account type="13" name="Repairs">
+ <account type="13" name="Equipment Repairs"/>
+ <account type="13" name="Building Repairs"/>
+ <account type="13" name="Computer Repairs"/>
+ <account type="13" name="Janitorial Expenses"/>
+ </account>
+ <account type="13" name="Postage and Delivery"/>
+ <account type="13" name="Education"/>
+ <account type="13" name="Depreciation"/>
+ <account type="13" name="Office Supplies"/>
+ <account type="13" name="Professional Fees">
+ <account type="13" name="Legal Fees"/>
+ <account type="13" name="Accounting"/>
+ </account>
+ <account type="13" name="Printing and Reproduction"/>
+ <account type="13" name="Dining"/>
+ <account type="13" name="Dues and Subscriptions"/>
+ <account type="13" name="Licenses and Permits"/>
+ <account type="13" name="Cash Discounts"/>
+ <account type="13" name="Payroll Expenses"/>
+ <account type="13" name="Outside Services"/>
+ <account type="13" name="Adjustment"/>
+ <account type="13" name="Travel and Entertainment">
+ <account type="13" name="Meals"/>
+ <account type="13" name="Travel"/>
+ <account type="13" name="Entertainment"/>
+ </account>
+ <account type="13" name="Charity"/>
+ <account type="13" name="Auto">
+ <account type="13" name="Repair and Maintenance"/>
+ <account type="13" name="Gas"/>
+ <account type="13" name="Parking"/>
+ <account type="13" name="Fees"/>
+ </account>
+ <account type="13" name="Rent"/>
+ <account type="13" name="Utilities">
+ <account type="13" name="Gas"/>
+ <account type="13" name="Garbage collection"/>
+ <account type="13" name="Internet"/>
+ <account type="13" name="Cell Phone"/>
+ <account type="13" name="Cable"/>
+ <account type="13" name="Electric"/>
+ <account type="13" name="Water"/>
+ <account type="13" name="Phone"/>
+ </account>
+ <account type="13" name="Insurance">
+ <account type="13" name="Disability Insurance"/>
+ <account type="13" name="Workers Comp"/>
+ <account type="13" name="Liability Insurance"/>
+ </account>
+ <account type="13" name="Bank Service Charge"/>
+ <account type="13" name="Taxes">
+ <account type="13" name="Federal"/>
+ <account type="13" name="FICA"/>
+ <account type="13" name="Property"/>
+ <account type="13" name="Local"/>
+ <account type="13" name="Emp-FICA"/>
+ <account type="13" name="Other Tax"/>
+ <account type="13" name="State/Province"/>
+ <account type="13" name="FUTA"/>
+ </account>
+ <account type="13" name="Books"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Interest Income"/>
+ <account type="12" name="Sales"/>
+ <account type="12" name="Other Income"/>
+ <account type="12" name="Reimbursed Expenses"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Current Assets">
+ <account type="1" name="Savings Account"/>
+ <account type="3" name="Petty Cash"/>
+ <account type="1" name="Checking Account"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_GB/carloan.kmt b/kmymoney2/templates/en_GB/carloan.kmt
new file mode 100644
index 0000000..f7205a8
--- /dev/null
+++ b/kmymoney2/templates/en_GB/carloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/en_GB/acctchrt_carloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Car Loan</title>
+ <shortdesc>Accounts for car loan and associated interest</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have a car loan (car loan, car loan interest).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Interest">
+ <account type="13" name="Vehicle Loan Interest"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Loans">
+ <account type="10" name="Vehicle Loan"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_GB/cdmoneymkt.kmt b/kmymoney2/templates/en_GB/cdmoneymkt.kmt
new file mode 100644
index 0000000..b75658b
--- /dev/null
+++ b/kmymoney2/templates/en_GB/cdmoneymkt.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/en_GB/acctchrt_cdmoneymkt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>CD and Money Market</title>
+ <shortdesc>Accounts for CD and money market investments</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have CDs or money market accounts (CD, CD interest, money market, money market interest).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Interest Income">
+ <account type="12" name="CD Interest"/>
+ <account type="12" name="Money Market Interest"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Current Assets">
+ <account type="1" name="Money Market"/>
+ <account type="1" name="Bank CD"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_GB/checkbook.kmt b/kmymoney2/templates/en_GB/checkbook.kmt
new file mode 100644
index 0000000..f6660bf
--- /dev/null
+++ b/kmymoney2/templates/en_GB/checkbook.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/en_GB/acctchrt_checkbook.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>A Simple Checkbook</title>
+ <shortdesc>The minimal set of accounts to use GnuCash.</shortdesc>
+ <longdesc>Use this if you just want to balance your checkbook. Later on, you can start tracking income and expenses in more detail if you feel the need.</longdesc>
+ <accounts>
+ <account type="13" name=""/>
+ <account type="12" name=""/>
+ <account type="16" name="">
+ <account type="16" name="Opening Balances"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Current Assets">
+ <account type="1" name="Checking Account"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_GB/childcare.kmt b/kmymoney2/templates/en_GB/childcare.kmt
new file mode 100644
index 0000000..669edbe
--- /dev/null
+++ b/kmymoney2/templates/en_GB/childcare.kmt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/en_GB/acctchrt_childcare.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Childcare Expenses</title>
+ <shortdesc>An account for tracking childcare costs</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have childcare expenses.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Childcare"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_GB/common.kmt b/kmymoney2/templates/en_GB/common.kmt
new file mode 100644
index 0000000..bbe873d
--- /dev/null
+++ b/kmymoney2/templates/en_GB/common.kmt
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/en_GB/acctchrt_common.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Common Accounts</title>
+ <shortdesc>A basic set of accounts most commonly used</shortdesc>
+ <longdesc>Most users will want to select this set of accounts. It includes most commonly used accounts (checking, savings, cash, credit card, income, common expenses).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Bonus"/>
+ <account type="12" name="Other Income"/>
+ <account type="12" name="Gifts Received"/>
+ <account type="12" name="Salary"/>
+ <account type="12" name="Interest Income">
+ <account type="12" name="Other Interest"/>
+ <account type="12" name="Savings Interest"/>
+ <account type="12" name="Checking Interest"/>
+ </account>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="Opening Balances"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Current Assets">
+ <account type="1" name="Checking Account"/>
+ <account type="3" name="Cash in Wallet"/>
+ <account type="1" name="Savings Account"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Entertainment">
+ <account type="13" name="Music/Movies"/>
+ <account type="13" name="Travel"/>
+ <account type="13" name="Recreation"/>
+ </account>
+ <account type="13" name="Books"/>
+ <account type="13" name="Dining"/>
+ <account type="13" name="Gifts"/>
+ <account type="13" name="Medical Expenses"/>
+ <account type="13" name="Charity"/>
+ <account type="13" name="Public Transportation"/>
+ <account type="13" name="Auto">
+ <account type="13" name="Gas"/>
+ <account type="13" name="Parking"/>
+ <account type="13" name="Repair and Maintenance"/>
+ <account type="13" name="Fees"/>
+ </account>
+ <account type="13" name="Bank Service Charge"/>
+ <account type="13" name="Education"/>
+ <account type="13" name="Utilities">
+ <account type="13" name="Water"/>
+ <account type="13" name="Gas"/>
+ <account type="13" name="Garbage collection"/>
+ <account type="13" name="Electric"/>
+ </account>
+ <account type="13" name="Supplies"/>
+ <account type="13" name="Clothes"/>
+ <account type="13" name="Subscriptions"/>
+ <account type="13" name="Phone"/>
+ <account type="13" name="Insurance">
+ <account type="13" name="Auto Insurance"/>
+ <account type="13" name="Life Insurance"/>
+ <account type="13" name="Health Insurance"/>
+ </account>
+ <account type="13" name="Online Services"/>
+ <account type="13" name="Adjustment"/>
+ <account type="13" name="Taxes">
+ <account type="13" name="Social Security"/>
+ <account type="13" name="State/Province"/>
+ <account type="13" name="Federal"/>
+ <account type="13" name="Medicare"/>
+ <account type="13" name="Other Tax"/>
+ </account>
+ <account type="13" name="Computer"/>
+ <account type="13" name="Laundry/Dry Cleaning"/>
+ <account type="13" name="Miscellaneous"/>
+ <account type="13" name="Groceries"/>
+ <account type="13" name="Cable"/>
+ <account type="13" name="Hobbies"/>
+ </account>
+ <account type="10" name="">
+ <account type="4" name="Credit Card"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_GB/default_accounts.kmt b/kmymoney2/templates/en_GB/default_accounts.kmt
new file mode 100644
index 0000000..65172dc
--- /dev/null
+++ b/kmymoney2/templates/en_GB/default_accounts.kmt
@@ -0,0 +1,301 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>KMyMoney 0.8 default</title>
+ <shortdesc></shortdesc>
+ <longdesc></longdesc>
+ <accounts>
+ <account name="" type="13">
+ <account name="Bills" type="13">
+ <account name="Telephone" type="13"/>
+ <account name="Rent" type="13"/>
+ <account name="Electricity" type="13"/>
+ <account name="TV" type="13"/>
+ <account name="SKY" type="13"/>
+ <account name="Council Tax" type="13"/>
+ <account name="Fuel Oil" type="13"/>
+ <account name="Gas" type="13"/>
+ <account name="Mortgage Interest" type="13"/>
+ <account name="Water &amp; Sewage" type="13"/>
+ </account>
+ <account name="Bank Charges" type="13">
+ <account name="Interest Paid" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="Service Charge" type="13"/>
+ </account>
+ <account name="Car" type="13">
+ <account name="Car Maintenance" type="13"/>
+ <account name="Petrol" type="13"/>
+ </account>
+ <account name="Cash Withdrawal" type="13"/>
+ <account name="Charity" type="13">
+ <account name="Covenants" type="13"/>
+ <account name="Donations" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="Settlements" type="13">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ <account name="Child Care" type="13"/>
+ <account name="Christmas" type="13"/>
+ <account name="Clothing" type="13"/>
+ <account name="Education" type="13">
+ <account name="Books" type="13"/>
+ <account name="Fees" type="13"/>
+ <account name="Tuition" type="13"/>
+ </account>
+ <account name="Food" type="13">
+ <account name="Dining Out" type="13"/>
+ <account name="Groceries" type="13"/>
+ </account>
+ <account name="Gardening" type="13"/>
+ <account name="Healthcare" type="13">
+ <account name="Dental" type="13"/>
+ <account name="Doctor" type="13"/>
+ <account name="Hospital" type="13"/>
+ <account name="Optician" type="13"/>
+ <account name="Prescriptions" type="13"/>
+ </account>
+ <account name="Holidays" type="13">
+ <account name="Accomodation" type="13"/>
+ <account name="Travel" type="13"/>
+ </account>
+ <account name="Household" type="13">
+ <account name="Furnishings" type="13"/>
+ </account>
+ <account name="Insurance" type="13">
+ <account name="Home and Contents" type="13"/>
+ <account name="Life" type="13"/>
+ <account name="Medical" type="13"/>
+ <account name="Motor" type="13"/>
+ </account>
+ <account name="Job Expense" type="13">
+ <account name="Non-Reimbursed" type="13"/>
+ <account name="Reimbursed" type="13"/>
+ </account>
+ <account name="Leisure" type="13">
+ <account name="Books &amp; Magazines" type="13"/>
+ <account name="Entertaining" type="13"/>
+ <account name="Films &amp; Video Rentals" type="13"/>
+ <account name="Sporting Events" type="13"/>
+ <account name="Sports Goods" type="13"/>
+ <account name="Tapes &amp; CDs" type="13"/>
+ <account name="Theatre &amp; Concerts etc" type="13"/>
+ <account name="Toys &amp; Games" type="13"/>
+ </account>
+ <account name="Loan" type="13">
+ <account name="Loan Interest" type="13">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ <account name="Motor" type="13">
+ <account name="Fuel" type="13"/>
+ <account name="Loan" type="13"/>
+ <account name="Service" type="13"/>
+ </account>
+ <account name="Other Expense" type="13">
+ <account name="Unknown" type="13"/>
+ </account>
+ <account name="Pet Care" type="13">
+ <account name="Food" type="13"/>
+ <account name="Supplies" type="13"/>
+ <account name="Vet's Bills" type="13"/>
+ </account>
+ <account name="Recreation" type="13"/>
+ <account name="Taxes" type="13">
+ <flag name="Tax"/>
+ <account name="Foreign savings" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="Income Tax" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="Interest" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="Local Tax" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="Nat Ins" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="Other Invest" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="Other Tax" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="Unit trust" type="13">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ <account name="Utilities" type="13">
+ <account name="Electricity" type="13"/>
+ <account name="Gas" type="13"/>
+ <account name="Telephone" type="13"/>
+ <account name="Water" type="13"/>
+ </account>
+ </account>
+ <account name="" type="12">
+ <account name="Alimony" type="12"/>
+ <account name="Bonus" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Capital gains" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Child Benefit" type="12"/>
+ <account name="Div Income" type="12">
+ <flag name="Tax"/>
+ <account name="Ord dividend" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Stock dividend" type="12"/>
+ </account>
+ <account name="Employment" type="12">
+ <flag name="Tax"/>
+ <account name="Benefits" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Foreign" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Lump sums" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Other employ" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Salary &amp; wages" type="12">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ <account name="Gift Received" type="12"/>
+ <account name="Int Inc" type="12">
+ <flag name="Tax"/>
+ <account name="Bank Interest" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Gross" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Net" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Other savings" type="12">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ <account name="Invest. income" type="12">
+ <flag name="Tax"/>
+ <account name="Dividend" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Foreign" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Other savings" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Other trusts" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Other trusts#Capital" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Other trusts#Dist. rec'd" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Other trusts#Estate" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="UK other" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="UK other#Unit trusts" type="12">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ <account name="Investment Income" type="12">
+ <flag name="Tax"/>
+ <account name="Capital Gains" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Dividends" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Interest" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Tax-Exempt Interest" type="12"/>
+ </account>
+ <account name="Nat. Savings" type="12">
+ <account name="Capital bonds" type="12"/>
+ <account name="Deposit bonds" type="12"/>
+ <account name="Income bonds" type="12"/>
+ <account name="Invest. account" type="12"/>
+ <account name="Ord. account" type="12"/>
+ </account>
+ <account name="Old Age Pension" type="12">
+ <flag name="Tax"/>
+ <account name="Employer" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="State" type="12">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ <account name="Other Income" type="12">
+ <account name="Student loan" type="12"/>
+ <account name="Child Support" type="12"/>
+ <account name="Employee Share Option" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Gifts Received" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Loan Principal Received" type="12"/>
+ <account name="Lottery or Premium Bond Prizes" type="12"/>
+ <account name="Tax Refund" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Unemployment Benefit" type="12"/>
+ </account>
+ <account name="Retirement Income" type="12">
+ <flag name="Tax"/>
+ <account name="Pensions &amp; Annuities" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="State Pension Benefits" type="12">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ <account name="Social security" type="12">
+ <account name="Industrial" type="12"/>
+ <account name="Invalid" type="12"/>
+ <account name="Widowed" type="12"/>
+ </account>
+ <account name="Wages &amp; Salary" type="12">
+ <flag name="Tax"/>
+ <account name="Bonus" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Commission" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Employer Pension Contributions" type="12"/>
+ <account name="Gross Pay" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Net Pay" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Overtime" type="12">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_GB/eduloan.kmt b/kmymoney2/templates/en_GB/eduloan.kmt
new file mode 100644
index 0000000..2c7adc3
--- /dev/null
+++ b/kmymoney2/templates/en_GB/eduloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/en_GB/acctchrt_eduloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Education Loan</title>
+ <shortdesc>Accounts for school loan and associated interest</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have an educational loan (education loan, education loan interest).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Interest">
+ <account type="13" name="Education Loan Interest"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Loans">
+ <account type="10" name="Education Loan"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_GB/fixedassets.kmt b/kmymoney2/templates/en_GB/fixedassets.kmt
new file mode 100644
index 0000000..dc78f8c
--- /dev/null
+++ b/kmymoney2/templates/en_GB/fixedassets.kmt
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/en_GB/acctchrt_fixedassets.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Fixed Assets</title>
+ <shortdesc>Accounts for tracking large fixed assets</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have large fixed assets (house, vehicle, vacation home, other assets).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Fixed Assets">
+ <account type="9" name="Vehicle"/>
+ <account type="9" name="Other Asset"/>
+ <account type="9" name="House"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_GB/full.kmt b/kmymoney2/templates/en_GB/full.kmt
new file mode 100644
index 0000000..4cb3989
--- /dev/null
+++ b/kmymoney2/templates/en_GB/full.kmt
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/en_GB/acctchrt_full.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Full Chart</title>
+ <shortdesc>Full chart of accounts contains all default accounts.</shortdesc>
+ <longdesc></longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Interest Income">
+ <account type="12" name="Savings Interest"/>
+ <account type="12" name="Money Market Interest"/>
+ <account type="12" name="Checking Interest"/>
+ <account type="12" name="CD Interest"/>
+ <account type="12" name="Other Interest"/>
+ <account type="12" name="Bond Interest"/>
+ </account>
+ <account type="12" name="Other Income"/>
+ <account type="12" name="Gifts Received"/>
+ <account type="12" name="Dividend Income"/>
+ <account type="12" name="Salary (Spouse)"/>
+ <account type="12" name="Salary"/>
+ <account type="12" name="Bonus"/>
+ </account>
+ <account type="10" name="">
+ <account type="4" name="Line of Credit"/>
+ <account type="10" name="Loans">
+ <account type="10" name="Vehicle Loan"/>
+ <account type="10" name="Mortgage Loan"/>
+ <account type="10" name="Other Loan"/>
+ <account type="10" name="Education Loan"/>
+ </account>
+ <account type="4" name="Credit Card"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Commissions"/>
+ <account type="13" name="Clothes"/>
+ <account type="13" name="Adjustment"/>
+ <account type="13" name="Education"/>
+ <account type="13" name="Dining"/>
+ <account type="13" name="Supplies"/>
+ <account type="13" name="Auto">
+ <account type="13" name="Repair and Maintenance"/>
+ <account type="13" name="Parking"/>
+ <account type="13" name="Gas"/>
+ <account type="13" name="Fees"/>
+ </account>
+ <account type="13" name="Entertainment">
+ <account type="13" name="Music/Movies"/>
+ <account type="13" name="Recreation"/>
+ <account type="13" name="Travel"/>
+ </account>
+ <account type="13" name="Cable"/>
+ <account type="13" name="Computer"/>
+ <account type="13" name="Childcare"/>
+ <account type="13" name="Laundry/Dry Cleaning"/>
+ <account type="13" name="Bank Service Charge"/>
+ <account type="13" name="Taxes">
+ <account type="13" name="State/Province"/>
+ <account type="13" name="Property Tax"/>
+ <account type="13" name="Other Tax"/>
+ <account type="13" name="Social Security"/>
+ <account type="13" name="Federal"/>
+ <account type="13" name="Medicare"/>
+ </account>
+ <account type="13" name="Insurance">
+ <account type="13" name="Home Insurance"/>
+ <account type="13" name="Life Insurance"/>
+ <account type="13" name="Auto Insurance"/>
+ <account type="13" name="Health Insurance"/>
+ <account type="13" name="Rental Insurance"/>
+ </account>
+ <account type="13" name="Charity"/>
+ <account type="13" name="Home Repair"/>
+ <account type="13" name="Groceries"/>
+ <account type="13" name="Online Services"/>
+ <account type="13" name="Rent"/>
+ <account type="13" name="Taxes (Spouse)">
+ <account type="13" name="Social Security"/>
+ <account type="13" name="Other Tax"/>
+ <account type="13" name="State/Province"/>
+ <account type="13" name="Medicare"/>
+ <account type="13" name="Federal"/>
+ </account>
+ <account type="13" name="Interest">
+ <account type="13" name="Mortgage Interest"/>
+ <account type="13" name="Other Interest"/>
+ <account type="13" name="Education Loan Interest"/>
+ <account type="13" name="Vehicle Loan Interest"/>
+ </account>
+ <account type="13" name="Miscellaneous"/>
+ <account type="13" name="Subscriptions"/>
+ <account type="13" name="Public Transportation"/>
+ <account type="13" name="Medical Expenses"/>
+ <account type="13" name="Hobbies"/>
+ <account type="13" name="Gifts"/>
+ <account type="13" name="Books"/>
+ <account type="13" name="Utilities">
+ <account type="13" name="Water"/>
+ <account type="13" name="Gas"/>
+ <account type="13" name="Garbage collection"/>
+ <account type="13" name="Electric"/>
+ </account>
+ <account type="13" name="Phone"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Fixed Assets">
+ <account type="9" name="House"/>
+ <account type="9" name="Other Asset"/>
+ <account type="9" name="Vehicle"/>
+ </account>
+ <account type="9" name="Current Assets">
+ <account type="1" name="Bank CD"/>
+ <account type="1" name="Money Market"/>
+ <account type="3" name="Cash in Wallet"/>
+ <account type="1" name="Savings Account"/>
+ <account type="1" name="Checking Account"/>
+ </account>
+ <account type="9" name="Investments">
+ <account type="7" name="Retirement"/>
+ <account type="7" name="Brokerage Account"/>
+ <account type="7" name="Spouse Retirement"/>
+ </account>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="Opening Balances"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_GB/homeloan.kmt b/kmymoney2/templates/en_GB/homeloan.kmt
new file mode 100644
index 0000000..7f16a19
--- /dev/null
+++ b/kmymoney2/templates/en_GB/homeloan.kmt
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/en_GB/acctchrt_homeloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Home Mortgage Loan</title>
+ <shortdesc>Accounts for home loan and associated interest</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have a home loan (mortgage loan, mortgage interest).</longdesc>
+ <accounts>
+ <account type="10" name="">
+ <account type="10" name="Mortgage Loan"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Interest">
+ <account type="13" name="Mortgage Interest"/>
+ </account>
+ </account>
+ <account type="10" name=""/>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_GB/homeown.kmt b/kmymoney2/templates/en_GB/homeown.kmt
new file mode 100644
index 0000000..f4ecbbd
--- /dev/null
+++ b/kmymoney2/templates/en_GB/homeown.kmt
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/en_GB/acctchrt_homeown.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Homeowner Expenses</title>
+ <shortdesc>Expenses associated with owning a home</shortdesc>
+ <longdesc>You would want to select this set of accounts if you own a home. This set provides a group of accounts to track home expenses (insurance, taxes, home repair).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Insurance">
+ <account type="13" name="Home Insurance"/>
+ </account>
+ <account type="13" name="Taxes">
+ <account type="13" name="Property Tax"/>
+ </account>
+ <account type="13" name="Home Repair"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_GB/otherloan.kmt b/kmymoney2/templates/en_GB/otherloan.kmt
new file mode 100644
index 0000000..b439dfc
--- /dev/null
+++ b/kmymoney2/templates/en_GB/otherloan.kmt
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/en_GB/acctchrt_otherloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Other Loans</title>
+ <shortdesc>Accounts for tracking other loans and associated interest</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have something other than a home loan (other loan, other loan interest).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Interest">
+ <account type="13" name="Other Interest"/>
+ </account>
+ </account>
+ <account type="10" name=""/>
+ <account type="10" name="">
+ <account type="10" name="Other Loan"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_GB/renter.kmt b/kmymoney2/templates/en_GB/renter.kmt
new file mode 100644
index 0000000..5f1a942
--- /dev/null
+++ b/kmymoney2/templates/en_GB/renter.kmt
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/en_GB/acctchrt_renter.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Renter Expenses</title>
+ <shortdesc>Expenses associated with renting a home</shortdesc>
+ <longdesc>You would want to select this set of accounts if you rent a home or apartment (rent, renter's insurance).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Rent"/>
+ <account type="13" name="Insurance">
+ <account type="13" name="Rental Insurance"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_GB/retiremt.kmt b/kmymoney2/templates/en_GB/retiremt.kmt
new file mode 100644
index 0000000..2e4fe13
--- /dev/null
+++ b/kmymoney2/templates/en_GB/retiremt.kmt
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/en_GB/acctchrt_retiremt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Retirement Accounts</title>
+ <shortdesc>Retirement account with related investment subaccounts</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have retirement accounts (stock, bond, mutual fund, index fund).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="7" name="Retirement"/>
+ </account>
+ <account type="9" name=""/>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_GB/spouseinc.kmt b/kmymoney2/templates/en_GB/spouseinc.kmt
new file mode 100644
index 0000000..0f0cc8a
--- /dev/null
+++ b/kmymoney2/templates/en_GB/spouseinc.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/en_GB/acctchrt_spouseinc.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Spouse Income</title>
+ <shortdesc>Accounts for tracking spouse's income separately</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have a working spouse (salary (spouse), taxes (spouse)).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Salary (Spouse)"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Taxes (Spouse)">
+ <account type="13" name="Social Security"/>
+ <account type="13" name="Medicare"/>
+ <account type="13" name="State/Province"/>
+ <account type="13" name="Federal"/>
+ <account type="13" name="Other Tax"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_GB/spouseretire.kmt b/kmymoney2/templates/en_GB/spouseretire.kmt
new file mode 100644
index 0000000..8e0cb7e
--- /dev/null
+++ b/kmymoney2/templates/en_GB/spouseretire.kmt
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/en_GB/acctchrt_spouseretire.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Spouse Retirement Accounts</title>
+ <shortdesc>Retirement account with related investment accounts for spouse</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have investments in a spouse's name (stock, bond, mutual fund, index fund, interest, dividend).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="7" name="Spouse Retirement"/>
+ </account>
+ <account type="9" name=""/>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_GB/uk-vat.kmt b/kmymoney2/templates/en_GB/uk-vat.kmt
new file mode 100644
index 0000000..161e3a1
--- /dev/null
+++ b/kmymoney2/templates/en_GB/uk-vat.kmt
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/en_GB/uk-vat.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>UK VAT Accounts</title>
+ <shortdesc>A basic set of accounts for tracking VAT in the UK.</shortdesc>
+ <longdesc>A basic set of accounts for tracking VAT in the UK.</longdesc>
+ <accounts>
+ <account type="1" name="">
+ <account type="1" name="Current Account"/>
+ <account type="1" name="Reserve Account"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Depreciation"/>
+ <account type="13" name="VAT Purchases">
+ <account type="13" name="Telecoms"/>
+ <account type="13" name="Subscriptions"/>
+ <account type="13" name="Travel/Accom"/>
+ <account type="13" name="Sundries"/>
+ <account type="13" name="Software"/>
+ <account type="13" name="Office"/>
+ <account type="13" name="Bank Charges"/>
+ <account type="13" name="EEC Reverse VAT"/>
+ <account type="13" name="Accountant"/>
+ </account>
+ <account type="13" name="Other non-VAT expenses"/>
+ <account type="13" name="Emoulements">
+ <account type="13" name="Employees">
+ <account type="13" name="NICs"/>
+ <account type="13" name="Net Salaries"/>
+ <account type="13" name="Stakeholder Contributions"/>
+ <account type="13" name="Income Tax"/>
+ </account>
+ <account type="13" name="Director's Fees"/>
+ <account type="13" name="Employer's NICs"/>
+ </account>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="Director's Loan"/>
+ <account type="16" name="Opening Balances"/>
+ <account type="16" name="Grants"/>
+ <account type="16" name="Dividends">
+ <account type="16" name="Shareholder Dividends 1"/>
+ <account type="16" name="Director's Dividends 2"/>
+ <account type="16" name="Director's Dividends 1"/>
+ </account>
+ <account type="16" name="Corporation Tax"/>
+ </account>
+ <account type="3" name=""/>
+ <account type="10" name="">
+ <account type="10" name="Other"/>
+ <account type="10" name="Owed Tax/NI"/>
+ <account type="10" name="Owed Fees"/>
+ <account type="10" name="Owed Corporation Tax"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Sales">
+ <account type="12" name="World"/>
+ <account type="12" name="UK"/>
+ <account type="12" name="EEC">
+ <account type="12" name="Goods"/>
+ <account type="12" name="Services"/>
+ </account>
+ </account>
+ <account type="12" name="Misc"/>
+ <account type="12" name="Interest"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Capital Equipment">
+ <account type="9" name="Computer Equipment"/>
+ <account type="9" name="EC Reverse VAT Purchase"/>
+ </account>
+ <account type="9" name="Other"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Input"/>
+ <account type="13" name="Output">
+ <account type="13" name="EC"/>
+ <account type="13" name="Sales"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_US/0.6-default_accounts.kmt b/kmymoney2/templates/en_US/0.6-default_accounts.kmt
new file mode 100644
index 0000000..6cd1825
--- /dev/null
+++ b/kmymoney2/templates/en_US/0.6-default_accounts.kmt
@@ -0,0 +1,426 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Use 0.6 default</title>
+ <shortdesc>default from KMyMoney 0.6</shortdesc>
+ <longdesc>This group contains a lot of categories. </longdesc>
+ <accounts>
+ <account name="" type="13">
+ <account name="Bills" type="13">
+ <account name="Telephone" type="13"/>
+ <account name="Rent" type="13"/>
+ <account name="Electricity" type="13"/>
+ <account name="TV" type="13"/>
+ <account name="Local Taxes" type="13"/>
+ <account name="Fuel Oil" type="13"/>
+ <account name="Natural Gas" type="13"/>
+ <account name="Mortgage" type="13">
+ <flag name="Tax"/>
+ <account name="Interest" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="Principle" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="PMI" type="13">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ <account name="Water &amp; Sewage" type="13"/>
+ </account>
+ <account name="Bank Charges" type="13">
+ <account name="Interest Paid" type="13"/>
+ <account name="Service Charge" type="13"/>
+ </account>
+ <account name="Business" type="13">
+ <account name="Auto" type="13">
+ <account name="Fuel" type="13"/>
+ <account name="Service" type="13"/>
+ <account name="Insurance" type="13"/>
+ <account name="Lease" type="13"/>
+ <account name="Loan" type="13"/>
+ <account name="Registration" type="13"/>
+ </account>
+ <account name="Capital Goods" type="13"/>
+ <account name="Legal Expenses" type="13"/>
+ <account name="Taxes" type="13">
+ <account name="Federal Taxes" type="13"/>
+ <account name="State Taxes" type="13"/>
+ <account name="Local Taxes" type="13"/>
+ <account name="Social Security" type="13"/>
+ <account name="Property Taxes" type="13"/>
+ </account>
+ <account name="Travel" type="13">
+ <account name="Accomodations" type="13"/>
+ <account name="Fares" type="13"/>
+ <account name="Car Rental" type="13"/>
+ </account>
+ <account name="Office Rent" type="13"/>
+ <account name="Office Supplies" type="13"/>
+ <account name="Other" type="13"/>
+ <account name="Utilities" type="13">
+ <account name="Electricity" type="13"/>
+ <account name="Gas" type="13"/>
+ <account name="Telephone" type="13"/>
+ <account name="Water" type="13"/>
+ <account name="Sewer" type="13"/>
+ <account name="Garbage &amp; Recycling" type="13"/>
+ </account>
+ <account name="Wages &amp; Salary" type="13">
+ <account name="Benefits" type="13"/>
+ <account name="Workman's Comp" type="13"/>
+ </account>
+ </account>
+ <account name="Car" type="13">
+ <account name="Fuel" type="13"/>
+ <account name="Service" type="13"/>
+ <account name="Insurance" type="13"/>
+ <account name="Lease" type="13"/>
+ <account name="Loan" type="13"/>
+ <account name="Registration" type="13">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ <account name="Cash Withdrawal" type="13"/>
+ <account name="Charity" type="13">
+ <account name="Donations" type="13">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ <account name="Child Care" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="Clothing" type="13"/>
+ <account name="Education" type="13">
+ <flag name="Tax"/>
+ <account name="Books" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="Fees" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="Tuition" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="Loans" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="Board" type="13">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ <account name="Food" type="13">
+ <account name="Dining Out" type="13"/>
+ <account name="Groceries" type="13"/>
+ </account>
+ <account name="Gardening" type="13"/>
+ <account name="Gifts" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="Healthcare" type="13">
+ <flag name="Tax"/>
+ <account name="Dental" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="Doctor" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="Hospital" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="Optician" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="Prescriptions" type="13">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ <account name="Holidays" type="13">
+ <account name="Accomodation" type="13"/>
+ <account name="Travel" type="13"/>
+ </account>
+ <account name="Household" type="13">
+ <account name="Furnishings" type="13"/>
+ <account name="Repairs" type="13"/>
+ </account>
+ <account name="Insurance" type="13">
+ <account name="Home and Contents" type="13"/>
+ <account name="Life" type="13"/>
+ <account name="Medical" type="13"/>
+ <account name="Auto" type="13"/>
+ <account name="Disability" type="13"/>
+ </account>
+ <account name="Job Expense" type="13">
+ <account name="Non-Reimbursed" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="Reimbursed" type="13"/>
+ </account>
+ <account name="Leisure" type="13">
+ <account name="Books &amp; Magazines" type="13"/>
+ <account name="Entertaining" type="13"/>
+ <account name="Films &amp; Video Rentals" type="13"/>
+ <account name="Hobbies" type="13"/>
+ <account name="Sporting Events" type="13"/>
+ <account name="Sports Goods" type="13"/>
+ <account name="Tapes &amp; CDs" type="13"/>
+ <account name="Theatre &amp; Concerts etc" type="13"/>
+ <account name="Toys &amp; Games" type="13"/>
+ </account>
+ <account name="Legal Fees" type="13"/>
+ <account name="Loan" type="13">
+ <flag name="Tax"/>
+ <account name="Loan Interest" type="13">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ <account name="Motor" type="13">
+ <account name="Fuel" type="13"/>
+ <account name="Loan" type="13"/>
+ <account name="Service" type="13"/>
+ </account>
+ <account name="Other Expense" type="13">
+ <account name="Unknown" type="13"/>
+ </account>
+ <account name="Personal Care" type="13"/>
+ <account name="Pet Care" type="13">
+ <account name="Food" type="13"/>
+ <account name="Supplies" type="13"/>
+ <account name="Vet's Bills" type="13"/>
+ </account>
+ <account name="Recreation" type="13"/>
+ <account name="Retirement Accounts" type="13">
+ <flag name="Tax"/>
+ <account name="IRA Contributions" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="529 Plan Contributions" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="401(k)403(b) Plan Contributions" type="13">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ <account name="Taxes" type="13">
+ <flag name="Tax"/>
+ <account name="Federal Tax" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="State Tax" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="Local Tax" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="Other Invest" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="Other Tax" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="Property Taxes" type="13">
+ <flag name="Tax"/>
+ </account>
+ <account name="AMT" type="13">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ <account name="Utilities" type="13">
+ <account name="Electricity" type="13"/>
+ <account name="Gas" type="13"/>
+ <account name="Telephone" type="13"/>
+ <account name="Water" type="13"/>
+ <account name="Sewer" type="13"/>
+ <account name="Garbage &amp; Recycling" type="13"/>
+ </account>
+ </account>
+ <account name="" type="12">
+ <account name="Alimony" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Bonus" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Business" type="12">
+ <flag name="Tax"/>
+ <account name="Revenue" type="12">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ <account name="Short-Term Capital gains" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Long-Term Capital gains" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Child Support" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Disability" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Div Income" type="12">
+ <flag name="Tax"/>
+ <account name="Ord dividend" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Stock dividend" type="12">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ <account name="Employment" type="12">
+ <flag name="Tax"/>
+ <account name="Benefits" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Foreign" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Lump sums" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Other employ" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Salary &amp; wages" type="12">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ <account name="Gift Received" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Int Inc" type="12">
+ <flag name="Tax"/>
+ <account name="Bank Interest" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Gross" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Net" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Other savings" type="12">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ <account name="Invest. income" type="12">
+ <flag name="Tax"/>
+ <account name="1st option" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Dividend" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Foreign" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Other savings" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Other trusts" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Other trusts#Capital" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Other trusts#Dist. rec'd" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Other trusts#Estate" type="12">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ <account name="Investment Income" type="12">
+ <flag name="Tax"/>
+ <account name="Short-Term Capital Gains" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Long-Term Capital Gains" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Dividends" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Interest" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Tax-Exempt Interest" type="12">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ <account name="Pension" type="12">
+ <flag name="Tax"/>
+ <account name="Employer" type="12">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ <account name="Other Income" type="12">
+ <flag name="Tax"/>
+ <account name="Student loan" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Child Support" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Employee Share Option" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Gifts Received" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Loan Principal Received" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Lottery or Premium Bond Prizes" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Tax Refund" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Unemployment Benefit" type="12">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ <account name="Retirement Income" type="12">
+ <flag name="Tax"/>
+ <account name="Pensions &amp; Annuities" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="State Pension Benefits" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="401(k)/403(b) Distributions" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="IRA Distributions" type="12">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ <account name="Social Security Benefits" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Wages &amp; Salary" type="12">
+ <flag name="Tax"/>
+ <account name="Bonus" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Commission" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Employer Pension Contributions" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Gross Pay" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Net Pay" type="12">
+ <flag name="Tax"/>
+ </account>
+ <account name="Overtime" type="12">
+ <flag name="Tax"/>
+ </account>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_US/0.8-default_accounts.kmt b/kmymoney2/templates/en_US/0.8-default_accounts.kmt
new file mode 100644
index 0000000..4ef7746
--- /dev/null
+++ b/kmymoney2/templates/en_US/0.8-default_accounts.kmt
@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Use 0.8 default</title>
+ <shortdesc>default from KMyMoney 0.8</shortdesc>
+ <longdesc>This was the default category group for most of the 0.7 and 0.8 series. This group contains a lot of categories.</longdesc>
+
+ <accounts>
+ <account type="12" name="" >
+ <account type="12" name="Employment" >
+ <account type="12" name="Benefits" />
+ <account type="12" name="Bonus" />
+ <account type="12" name="Other employment income" />
+ <account type="12" name="Pension" />
+ <account type="12" name="Wages &amp; Salary" />
+ </account>
+ <account type="12" name="Investment Income" >
+ <account type="12" name="Short-Term Capital Gains" />
+ <account type="12" name="Long-Term Capital Gains" />
+ <account type="12" name="Dividends" />
+ <account type="12" name="Interest" />
+ <account type="12" name="Tax-Exempt Interest" />
+ </account>
+ <account type="12" name="Banking" >
+ <account type="12" name="Interest Earned" />
+ <account type="12" name="Loan Principle Received" />
+ </account>
+ <account type="12" name="Other Income" >
+ <account type="12" name="Alimony" />
+ <account type="12" name="Child Support" />
+ <account type="12" name="Disability" />
+ <account type="12" name="Gifts Received" />
+ <account type="12" name="Lottery or Premium Bond Prizes" />
+ <account type="12" name="Tax Refund" />
+ <account type="12" name="Unemployment Benefit" />
+ </account>
+ <account type="12" name="Retirement Income" >
+ <account type="12" name="Pensions &amp; Annuities" />
+ <account type="12" name="State Pension Benefits" />
+ <account type="12" name="401(k)/403(b) Distributions" />
+ <account type="12" name="IRA Distributions" />
+ <account type="12" name="Social Security Benefits" />
+ </account>
+ </account>
+ <account type="13" name="" >
+ <account type="13" name="Bills &amp; monthly payments" >
+ <account type="13" name="Utilities" >
+ <account type="13" name="Electricity" />
+ <account type="13" name="Fuel Oil" />
+ <account type="13" name="Natural Gas" />
+ <account type="13" name="Water &amp; Sewage" />
+ <account type="13" name="Garbage &amp; Recycling" />
+ </account>
+ <account type="13" name="Telephone" >
+ <account type="13" name="Local" />
+ <account type="13" name="Long Distance" />
+ <account type="13" name="Wireless" />
+ </account>
+ <account type="13" name="Rent" />
+ <account type="13" name="Mortgage" >
+ <account type="13" name="Interest" />
+ <account type="13" name="Principle" />
+ <account type="13" name="PMI (Private Mortgage Insurance)" />
+ </account>
+ <account type="13" name="Cable / Satelite TV" />
+ <account type="13" name="Internet" />
+ </account>
+ <account type="13" name="Bank Charges" >
+ <account type="13" name="Interest Paid" />
+ <account type="13" name="Service Charges" />
+ <account type="13" name="Insufficient Funds fee" />
+ </account>
+ <account type="13" name="Cash Withdrawal" />
+ <account type="13" name="Child Care/Sitters" />
+ <account type="13" name="Clothing" />
+ <account type="13" name="Education" >
+ <account type="13" name="Books" />
+ <account type="13" name="Fees" />
+ <account type="13" name="Tuition" />
+ <account type="13" name="Loans" />
+ </account>
+ <account type="13" name="Food" >
+ <account type="13" name="Dining Out" />
+ <account type="13" name="Groceries" />
+ </account>
+ <account type="13" name="Home Maintainance" >
+ <account type="13" name="Repairs" />
+ <account type="13" name="Improvements" />
+ <account type="13" name="Yard &amp; Garden" />
+ </account>
+ <account type="13" name="Home Furnishing" >
+ <account type="13" name="Furniture" />
+ <account type="13" name="Decorating" />
+ </account>
+ <account type="13" name="Gifts" />
+ <account type="13" name="Healthcare" >
+ <account type="13" name="Dental" />
+ <account type="13" name="Doctor" />
+ <account type="13" name="Hospital" />
+ <account type="13" name="Prescriptions" />
+ <account type="13" name="Chiropractic" />
+ <account type="13" name="Other" />
+ </account>
+ <account type="13" name="Personal Care" />
+ <account type="13" name="Vacation &amp; Holiday" >
+ <account type="13" name="Accomodations" />
+ <account type="13" name="Travel" />
+ <account type="13" name="Other" />
+ <account type="13" name="Meals" />
+ </account>
+ <account type="13" name="Insurance" >
+ <account type="13" name="Home and Contents" />
+ <account type="13" name="Life" />
+ <account type="13" name="Medical" />
+ <account type="13" name="Auto" />
+ <account type="13" name="Disability" />
+ </account>
+ <account type="13" name="Job Expense" >
+ <account type="13" name="Non-Reimbursed" />
+ <account type="13" name="Reimbursed" />
+ </account>
+ <account type="13" name="Recreation &amp; Leisure" >
+ <account type="13" name="Entertainment" />
+ <account type="13" name="Hobbies" />
+ <account type="13" name="Sports" />
+ </account>
+ <account type="13" name="Legal Fees" />
+ <account type="13" name="Other Misc. Expenses" />
+ <account type="13" name="Pet Care" >
+ <account type="13" name="Food" />
+ <account type="13" name="Supplies" />
+ <account type="13" name="Vet's Bills" />
+ </account>
+ <account type="13" name="Retirement Accounts" >
+ <account type="13" name="IRA Contributions" />
+ <account type="13" name="529 Plan Contributions" />
+ <account type="13" name="401(k)403(b) Plan Contributions" />
+ </account>
+ <account type="13" name="Taxes" >
+ <account type="13" name="State" />
+ <account type="13" name="Federal" />
+ <account type="13" name="Medicare" />
+ <account type="13" name="Personal property taxes" />
+ <account type="13" name="Other taxes" />
+ <account type="13" name="Soc. Sec." />
+ <account type="13" name="EIC" />
+ </account>
+ <account type="13" name="Transportation" >
+ <account type="13" name="Car / Auto" >
+ <account type="13" name="Fuel" />
+ <account type="13" name="Service" />
+ <account type="13" name="Insurance" />
+ <account type="13" name="Lease" />
+ <account type="13" name="Loan" />
+ <account type="13" name="Registration" />
+ </account>
+ <account type="13" name="Public Transportation" />
+ </account>
+ <account type="13" name="Household" />
+ <account type="13" name="Charity" />
+ <account type="13" name="Accountant &amp; Tax Preparation" />
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_US/Base-Blank.kmt b/kmymoney2/templates/en_US/Base-Blank.kmt
new file mode 100644
index 0000000..272d593
--- /dev/null
+++ b/kmymoney2/templates/en_US/Base-Blank.kmt
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+<title>Base -Blank</title>
+ <shortdesc>No Categories</shortdesc>
+ <longdesc>Use this group if you plan on importing all your categories from another program or you want to create all of your categories from scratch.</longdesc>
+ <accounts>
+ <account type="12" name="" />
+ <account type="13" name="" />
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_US/Base-Detailed.kmt b/kmymoney2/templates/en_US/Base-Detailed.kmt
new file mode 100644
index 0000000..fdeb835
--- /dev/null
+++ b/kmymoney2/templates/en_US/Base-Detailed.kmt
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Base -Detail</title>
+ <shortdesc>A little bit more detail</shortdesc>
+ <longdesc> Use this group if you like to see more detail and do not want to take the time to create all of the categories yourself. You may wish to add some additional groups if you own a home, have kids, etc.</longdesc>
+
+ <accounts>
+ <account type="12" name="" >
+ <account type="12" name="Job" >
+ <account type="12" name="Bonus" />
+ <account type="12" name="Wages or Salary" />
+ </account>
+ <account type="12" name="Other income" />
+ </account>
+ <account type="13" name="" >
+ <account type="13" name="Food" >
+ <account type="13" name="Dining out" />
+ <account type="13" name="Groceries" />
+ </account>
+ <account type="13" name="Housing" >
+ <account type="13" name="Rent" />
+ <account type="13" name="Repairs and Maintenance" />
+ <account type="13" name="Furnishings" />
+ </account>
+ <account type="13" name="Miscellaneous/Other" >
+ <account type="13" name="Accountant/Tax Preparation" />
+ </account>
+ <account type="13" name="Health/Medical" >
+ <account type="13" name="Dental" />
+ <account type="13" name="Doctor" />
+ <account type="13" name="Hospital" />
+ <account type="13" name="Prescriptions" />
+ <account type="13" name="Chiropractic" />
+ <account type="13" name="Optometrist" />
+ <account type="13" name="Health Insurance" />
+ <account type="13" name="Disability Insurance" />
+ </account>
+ <account type="13" name="Transportation" >
+ <account type="13" name="Car/Auto" >
+ <account type="13" name="Fuel" />
+ <account type="13" name="Service/Repairs" />
+ <account type="13" name="Auto Insurance" />
+ <account type="13" name="Registration/Taxes" />
+ <account type="13" name="Maintenance" />
+ <account type="13" name="Payment" />
+ </account>
+ <account type="13" name="Public Transportation" />
+ </account>
+ <account type="13" name="Personal" >
+ <account type="13" name="Life Insurance" />
+ <account type="13" name="Education/School" />
+ <account type="13" name="Fitness/Gym" />
+ <account type="13" name="Appearance/Grooming" />
+ <account type="13" name="Miscellaneous/Other" />
+ <account type="13" name="Gifts" />
+ </account>
+ <account type="13" name="Recreation" >
+ <account type="13" name="Vacation" />
+ <account type="13" name="Entertainment" />
+ <account type="13" name="Hobbies" />
+ </account>
+ <account type="13" name="Utilities" >
+ <account type="13" name="Electricity" />
+ <account type="13" name="Water" />
+ <account type="13" name="Natural Gas" />
+ <account type="13" name="Phone" >
+ <account type="13" name="Wireless" />
+ <account type="13" name="Local" />
+ <account type="13" name="Long Distance" />
+ </account>
+ <account type="13" name="Cable/Satellite" />
+ <account type="13" name="Internet" />
+ <account type="13" name="Garbage/Recycling" />
+ </account>
+ <account type="13" name="Charity" />
+ <account type="13" name="Clothing" >
+ <account type="13" name="Cleaning/Laundry" />
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_US/Base-Simple.kmt b/kmymoney2/templates/en_US/Base-Simple.kmt
new file mode 100644
index 0000000..c57c9c5
--- /dev/null
+++ b/kmymoney2/templates/en_US/Base-Simple.kmt
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+<title>Base -Simple</title>
+ <shortdesc>Small and simple set of categories</shortdesc>
+ <longdesc>If you just want to keep things as basic and easy as possible, you should choose this category group.</longdesc>
+
+ <accounts>
+ <account type="12" name="" >
+ <account type="12" name="Job" />
+ </account>
+ <account type="13" name="" >
+ <account type="13" name="Food" />
+ <account type="13" name="Housing" />
+ <account type="13" name="Miscellaneous/Other" />
+ <account type="13" name="Health/Medical" />
+ <account type="13" name="Transportation" />
+ <account type="13" name="Personal" />
+ <account type="13" name="Recreation" />
+ <account type="13" name="Utilities" />
+ <account type="13" name="Charity" />
+ <account type="13" name="Clothing" />
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_US/CMakeLists.txt b/kmymoney2/templates/en_US/CMakeLists.txt
new file mode 100644
index 0000000..553d99e
--- /dev/null
+++ b/kmymoney2/templates/en_US/CMakeLists.txt
@@ -0,0 +1,17 @@
+INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${KDE3_INCLUDE_DIR} ${QT_INCLUDE_DIR} )
+
+
+########### install files ###############
+
+INSTALL(FILES old-default_accounts.kmt default_categories-template.kmt ScheduleC_business.kmt ScheduleE_rental-property.kmt
+ DESTINATION share/apps/kmymoney2/templates/en_US
+)
+
+
+
+#original Makefile.am contents follow:
+
+#templatedir=$(kde_datadir)/kmymoney2/templates/en_US
+#template_DATA = old-default_accounts.kmt default_categories-template.kmt ScheduleC_business.kmt ScheduleE_rental-property.kmt
+#
+#EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/en_US/House.kmt b/kmymoney2/templates/en_US/House.kmt
new file mode 100644
index 0000000..7e0d0b4
--- /dev/null
+++ b/kmymoney2/templates/en_US/House.kmt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>House</title>
+ <shortdesc>For home owners</shortdesc>
+ <longdesc>Some categories you may want if you own a home or plan on buying a home.</longdesc>
+ <accounts>
+ <account type="12" name="" />
+ <account type="13" name="" >
+ <account type="13" name="Housing" >
+ <account type="13" name="Mortgage" />
+ <account type="13" name="Mortgage Insurance" />
+ <account type="13" name="Property taxes" />
+ <account type="13" name="Homeowners Insurance" />
+ <account type="13" name="Repairs and Maintenance" />
+ <account type="13" name="Yard and Garden" />
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_US/Makefile.am b/kmymoney2/templates/en_US/Makefile.am
new file mode 100644
index 0000000..84160d5
--- /dev/null
+++ b/kmymoney2/templates/en_US/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/en_US
+
+template_DATA = kids.kmt Pets.kmt Base-Blank.kmt ScheduleE_rental-property.kmt Retirement.kmt ScheduleC_business.kmt Base-Detailed.kmt ScheduleBandD.kmt ScheduleA_itemized-deductions.kmt Base-Simple.kmt ScheduleF_farming.kmt House.kmt 0.6-default_accounts.kmt 0.8-default_accounts.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/en_US/Pets.kmt b/kmymoney2/templates/en_US/Pets.kmt
new file mode 100644
index 0000000..c59f520
--- /dev/null
+++ b/kmymoney2/templates/en_US/Pets.kmt
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Pets</title>
+ <shortdesc>Categories for pets</shortdesc>
+ <longdesc>Some categories that can be used if you have a pet. Use with one of the base category groups.</longdesc>
+ <accounts>
+ <account type="12" name="" />
+ <account type="13" name="" >
+ <account type="13" name="Pets" >
+ <account type="13" name="Pet Food" />
+ <account type="13" name="Pet Supplies" />
+ <account type="13" name="Veterinary" />
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_US/Retirement.kmt b/kmymoney2/templates/en_US/Retirement.kmt
new file mode 100644
index 0000000..1fa2d45
--- /dev/null
+++ b/kmymoney2/templates/en_US/Retirement.kmt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+<title>Retirement</title>
+ <shortdesc>Categories for retirement.</shortdesc>
+ <longdesc>If you are retired and receive retirement income this group contains various kinds of retirement income categories. Use it with one of the base category groups.</longdesc>
+ <accounts>
+ <account type="12" name="" >
+ <account type="12" name="Retirement" >
+ <account type="12" name="Pensions" />
+ <account type="12" name="State Pension Benefits" />
+ <account type="12" name="401(k)/403(b) Distributions" />
+ <account type="12" name="IRA Distributions" />
+ <account type="12" name="Social Security Benefits" />
+ <account type="12" name="Annuities" />
+ </account>
+ </account>
+ <account type="13" name="" />
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_US/ScheduleA_itemized-deductions.kmt b/kmymoney2/templates/en_US/ScheduleA_itemized-deductions.kmt
new file mode 100644
index 0000000..c5adbdf
--- /dev/null
+++ b/kmymoney2/templates/en_US/ScheduleA_itemized-deductions.kmt
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>ScheduleA Itemized Deductions</title>
+ <shortdesc>If you file an itemized tax return</shortdesc>
+ <longdesc>Use this group if you file an itemized tax return. This group contains categories that correspond to IRS Schedule A and will hopefully make preparing your taxes easier. Use it with one of the base category groups.</longdesc>
+ <accounts>
+ <account type="12" name="" >
+ </account>
+ <account type="13" name="" >
+ <account type="13" name="Housing" >
+ <account type="13" name="Mortgage or Rent" />
+ <account type="13" name="Property taxes" />
+ <account type="13" name="Mortgage Insurance" />
+ <account type="13" name="Mortgage Interest/Points" />
+ </account>
+ <account type="13" name="Miscellaneous/Other" >
+ <account type="13" name="Accountant/Tax Preparation" />
+ <account type="13" name="Casualty/Theft loss" />
+ <account type="13" name="Unreimbursed Employee Expenses" >
+ <account type="13" name="Safety Equipment" />
+ <account type="13" name="Tools/Supplies" />
+ <account type="13" name="Uniforms" />
+ <account type="13" name="Protective Clothing" />
+ <account type="13" name="Physical Exams" />
+ <account type="13" name="Dues" />
+ <account type="13" name="Subscriptions" />
+ <account type="13" name="job Search Costs" />
+ <account type="13" name="Business use of home" />
+ <account type="13" name="Educational Expenses" />
+ </account>
+ <account type="13" name="Taxes" >
+ <account type="13" name="Other Taxes" />
+ <account type="13" name="State and Local" />
+ </account>
+ </account>
+ <account type="13" name="Health/Medical" >
+ <account type="13" name="Dental" />
+ </account>
+ <account type="13" name="Transportation" >
+ <account type="13" name="Car/Auto" >
+ <account type="13" name="Registration/Taxes" />
+ </account>
+ </account>
+ <account type="13" name="Charity" >
+ <account type="13" name="Gifts by Cash/Check" />
+ <account type="13" name="Other (non-cash/check)" />
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_US/ScheduleBandD.kmt b/kmymoney2/templates/en_US/ScheduleBandD.kmt
new file mode 100644
index 0000000..8bf4f6a
--- /dev/null
+++ b/kmymoney2/templates/en_US/ScheduleBandD.kmt
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>ScheduleB and D</title>
+ <shortdesc>Categories from IRS Schedules B and D</shortdesc>
+ <longdesc>Use this group if you want some categories that correspond to IRS Schedules B and D for reporting Interest earned, Dividends, and Capital Gains and Losses. Use with one of the base category groups.</longdesc>
+ <accounts>
+ <account type="12" name="" >
+ <account type="12" name="Capital Gains" >
+ <account type="12" name="Long Term" />
+ <account type="12" name="Short Term" />
+ </account>
+ <account type="12" name="Interest Earned" />
+ <account type="12" name="Dividends" />
+ <account type="12" name="Foreign Accounts/Trusts" />
+ </account>
+ <account type="13" name="" >
+ <account type="13" name="Capital Losses" >
+ <account type="13" name="Long Term" />
+ <account type="13" name="Short Term" />
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_US/ScheduleC_business.kmt b/kmymoney2/templates/en_US/ScheduleC_business.kmt
new file mode 100644
index 0000000..edccca7
--- /dev/null
+++ b/kmymoney2/templates/en_US/ScheduleC_business.kmt
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>ScheduleC business</title>
+ <shortdesc>Categories from IRS Schedule C</shortdesc>
+ <longdesc>Use this group if you plan to use KMyMoney for a simple business or to track business expenses. This group contains categories that correspond to IRS Schedule C and will make preparing your taxes easier. Can be used alone or with one of the base category groups.</longdesc>
+
+ <accounts>
+ <account type="12" name="" >
+ <account type="12" name="Business" >
+ <account type="12" name="Revenue" />
+ <account type="12" name="Interest Income" />
+ <account type="12" name="Services Income" />
+ </account>
+ </account>
+ <account type="13" name="" >
+ <account type="13" name="Business" >
+ <account type="13" name="Auto" >
+ <account type="13" name="Fuel" />
+ <account type="13" name="Service" />
+ <account type="13" name="Insurance" />
+ <account type="13" name="Registration" />
+ </account>
+ <account type="13" name="Cost of Goods Sold" />
+ <account type="13" name="Legal And Professional" />
+ <account type="13" name="Taxes" >
+ <account type="13" name="Federal Taxes" />
+ <account type="13" name="State Taxes" />
+ <account type="13" name="Local Taxes" />
+ <account type="13" name="Social Security" />
+ <account type="13" name="Property Taxes" />
+ </account>
+ <account type="13" name="Travel, Meals, and Entertainment" >
+ <account type="13" name="Travel" />
+ <account type="13" name="Fares" />
+ <account type="13" name="Meals" />
+ </account>
+ <account type="13" name="Rent or Lease" >
+ <account type="13" name="Vehicles, Machinery, Equipment" />
+ <account type="13" name="Other Business Property" />
+ </account>
+ <account type="13" name="Supplies" >
+ <account type="13" name="Hardware" />
+ <account type="13" name="Software" />
+ <account type="13" name="Office" />
+ </account>
+ <account type="13" name="Other" />
+ <account type="13" name="Utilities" >
+ <account type="13" name="Electricity" />
+ <account type="13" name="Gas" />
+ <account type="13" name="Telephone/Internet/Fax" />
+ <account type="13" name="Water" />
+ <account type="13" name="Sewer" />
+ <account type="13" name="Garbage/Recycling" />
+ </account>
+ <account type="13" name="Wages/Salary" />
+ <account type="13" name="Advertising" />
+ <account type="13" name="Contract Labor" />
+ <account type="13" name="Commisions and Fees" />
+ <account type="13" name="Employee Benefit Programs" />
+ <account type="13" name="Insurance (other than Health)" />
+ <account type="13" name="Interest" >
+ <account type="13" name="Mortgage" />
+ <account type="13" name="Other" />
+ </account>
+ <account type="13" name="Pension and Profit-Sharing Plans" />
+ <account type="13" name="Repairs and Maintenance" />
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_US/ScheduleE_rental-property.kmt b/kmymoney2/templates/en_US/ScheduleE_rental-property.kmt
new file mode 100644
index 0000000..30ca08b
--- /dev/null
+++ b/kmymoney2/templates/en_US/ScheduleE_rental-property.kmt
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>ScheduleE rental property</title>
+ <shortdesc>Categories from IRS Schedule E</shortdesc>
+ <longdesc>Use this group if you own rental properties or receive royalties and are required to use IRS Schedule E</longdesc>
+
+ <accounts>
+ <account type="12" name="" >
+ <account type="12" name="Rental Income" >
+ <account type="12" name="Rent" />
+ <account type="12" name="Security Deposit" />
+ <account type="12" name="Late Fee" />
+ <account type="12" name="Damages Paid" />
+ <account type="12" name="Application Fee" />
+ <account type="12" name="Pet Fee" />
+ </account>
+ </account>
+ <account type="13" name="" >
+ <account type="13" name="Rental Expense" >
+ <account type="13" name="Advertising" />
+ <account type="13" name="Auto and Travel" />
+ <account type="13" name="Cleaning and Maintenance" />
+ <account type="13" name="Commissions" />
+ <account type="13" name="Property Insurance" />
+ <account type="13" name="Legal and Professional" />
+ <account type="13" name="Management Fees" >
+ <account type="13" name="Office Rent" />
+ </account>
+ <account type="13" name="Rental Mortgage Interest" />
+ <account type="13" name="Other Interest" />
+ <account type="13" name="Repairs" />
+ <account type="13" name="Supplies" />
+ <account type="13" name="Utilities" />
+ <account type="13" name="Other" >
+ <account type="13" name="Office Supplies" />
+ <account type="13" name="Postage" />
+ </account>
+ <account type="13" name="Property Taxes" />
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_US/ScheduleF_farming.kmt b/kmymoney2/templates/en_US/ScheduleF_farming.kmt
new file mode 100644
index 0000000..67a6065
--- /dev/null
+++ b/kmymoney2/templates/en_US/ScheduleF_farming.kmt
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+<title>ScheduleF farming</title>
+ <shortdesc>Categories from IRS Schedule F</shortdesc>
+ <longdesc>Use this group if you farm. The categories in this group correspond with IRS Schedule F which should make preparing your taxes easier.</longdesc>
+ <accounts>
+ <account type="12" name="" >
+ <account type="12" name="Farming" >
+ <account type="12" name="Sales of produced goods" />
+ <account type="12" name="Cooperative distributions" />
+ <account type="12" name="Agricultural program payments" />
+ <account type="12" name="Commodity Credit Corporation loans" />
+ <account type="12" name="Crop insurance proceeds/Crop disaster payments" />
+ <account type="12" name="Custom hire income" />
+ <account type="12" name="Other income" />
+ </account>
+ </account>
+ <account type="13" name="" >
+ <account type="13" name="Farming" >
+ <account type="13" name="Car and Truck" />
+ <account type="13" name="Chemicals" />
+ <account type="13" name="Conservation" />
+ <account type="13" name="Custom hire" />
+ <account type="13" name="Employee benefits" />
+ <account type="13" name="Feed" />
+ <account type="13" name="Fertilizers and Lime" />
+ <account type="13" name="Freight and Trucking" />
+ <account type="13" name="Fuel and Oil" />
+ <account type="13" name="Insurance" />
+ <account type="13" name="Mortgage" />
+ <account type="13" name="Hired Labor" />
+ <account type="13" name="Pension and profit sharing plans" />
+ <account type="13" name="Repairs and Maintenance" />
+ <account type="13" name="Seeds and Plants" />
+ <account type="13" name="Storage and Warehousing" />
+ <account type="13" name="Supplies" />
+ <account type="13" name="Taxes" />
+ <account type="13" name="Utilities" />
+ <account type="13" name="Veterinary, breeding, and medicine" />
+ <account type="13" name="Other" />
+ <account type="13" name="Rent or Lease" >
+ <account type="13" name="Vehicles, Macinery, Equipment" />
+ <account type="13" name="Other" />
+ </account>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/en_US/kids.kmt b/kmymoney2/templates/en_US/kids.kmt
new file mode 100644
index 0000000..15bc677
--- /dev/null
+++ b/kmymoney2/templates/en_US/kids.kmt
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+<title>Kids</title>
+ <shortdesc>For those with kids</shortdesc>
+ <longdesc>If you have kids, this group has some categories related to kids. Use it with one of the base category groups.</longdesc>
+ <accounts>
+ <account type="12" name="" />
+ <account type="13" name="" >
+ <account type="13" name="Food" >
+ <account type="13" name="School Lunch" />
+ </account>
+ <account type="13" name="Personal" >
+ <account type="13" name="Kids" >
+ <account type="13" name="Education/School" />
+ <account type="13" name="Sports/Activities" />
+ <account type="13" name="Day Care" />
+ <account type="13" name="Baby Sitting" />
+ </account>
+ </account>
+ <account type="13" name="Clothing" >
+ <account type="13" name="Kids" />
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_AR/Makefile.am b/kmymoney2/templates/es_AR/Makefile.am
new file mode 100644
index 0000000..2414c0c
--- /dev/null
+++ b/kmymoney2/templates/es_AR/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/es_AR
+
+template_DATA = homeown.kmt fixedassets.kmt retiremt.kmt eduloan.kmt homeloan.kmt default_accounts.kmt renter.kmt common.kmt spouseretire.kmt currency.kmt brokerage.kmt childcare.kmt cdmoneymkt.kmt carloan.kmt otherloan.kmt spouseinc.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/es_AR/brokerage.kmt b/kmymoney2/templates/es_AR/brokerage.kmt
new file mode 100644
index 0000000..c6910ed
--- /dev/null
+++ b/kmymoney2/templates/es_AR/brokerage.kmt
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_brokerage.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Cuentas de Inversión</title>
+ <shortdesc>Cuenta de corredor de bolsa con las cuentas de inversiones asociadas</shortdesc>
+ <longdesc>Deberá escoger este juego de cuentas si tiene inversiones (acciones, bonos, fondos de inversión, fondos indexados, intereses, dividendos).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Comisiones"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Ingresos por dividendos"/>
+ <account type="12" name="Ingresos por intereses">
+ <account type="12" name="Intereses de bonos"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Inversiones">
+ <account type="7" name="Cuenta de inversión"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_AR/carloan.kmt b/kmymoney2/templates/es_AR/carloan.kmt
new file mode 100644
index 0000000..7f778f8
--- /dev/null
+++ b/kmymoney2/templates/es_AR/carloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_carloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Préstamo de automóvil</title>
+ <shortdesc>Cuentas para pago en cuotas de automóvil e intereses asociados</shortdesc>
+ <longdesc>Debería seleccionar este juego de cuentas si está pagando su automóvil en cuotas (cuotas de automóvil, intereses por cuotas de automóvil).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Intereses">
+ <account type="13" name="Intereses pago cuotas vehículo"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Préstamos">
+ <account type="10" name="Vehículo a cuotas"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_AR/cdmoneymkt.kmt b/kmymoney2/templates/es_AR/cdmoneymkt.kmt
new file mode 100644
index 0000000..39194ac
--- /dev/null
+++ b/kmymoney2/templates/es_AR/cdmoneymkt.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_cdmoneymkt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Pagarés y mercado monetario</title>
+ <shortdesc>Cuentas para pagarés, e inversiones de mercado monetario</shortdesc>
+ <longdesc>Debería seleccionar este juego de cuentas si maneja pagarés o cuentas de mercado monetario (pagarés, intereses de pagarés, mercado monetario, intereses de mercado monetario).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Ingresos por intereses">
+ <account type="12" name="Interés de pagarés"/>
+ <account type="12" name="Interés de mercado monetario"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Activo circulante">
+ <account type="1" name="Mercado monetario"/>
+ <account type="1" name="Pagaré de banco"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_AR/childcare.kmt b/kmymoney2/templates/es_AR/childcare.kmt
new file mode 100644
index 0000000..64e0066
--- /dev/null
+++ b/kmymoney2/templates/es_AR/childcare.kmt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_childcare.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Gastos de guardería</title>
+ <shortdesc>Cuenta para gestionar gastos de guardería</shortdesc>
+ <longdesc>Deberá seleccionar este juego de cuentas si tiene gastos de guardería.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Guardería"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_AR/common.kmt b/kmymoney2/templates/es_AR/common.kmt
new file mode 100644
index 0000000..78a931d
--- /dev/null
+++ b/kmymoney2/templates/es_AR/common.kmt
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_common.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Cuentas comunes</title>
+ <shortdesc>Un juego básico de cuentas mayoritariamente utilizadas</shortdesc>
+ <longdesc>La mayoría de usuarios deseará escoger este juego de cuentas. Incluye las cuentas más comunmente utilizadas (cuenta corriente, de ahorros, metálico, tarjeta de crédito, ingresos, gastos comunes).</longdesc>
+ <accounts>
+ <account type="16" name="">
+ <account type="16" name="Balances de apertura"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Activo circulante">
+ <account type="1" name="Cuenta corriente"/>
+ <account type="3" name="Efectivo"/>
+ <account type="1" name="Cuenta de ahorros"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Restaurantes"/>
+ <account type="13" name="Transporte público"/>
+ <account type="13" name="Educación"/>
+ <account type="13" name="Servicios">
+ <account type="13" name="Gas"/>
+ <account type="13" name="Barrido y Limpieza"/>
+ <account type="13" name="Agua"/>
+ <account type="13" name="Electricidad"/>
+ </account>
+ <account type="13" name="Suscripciones"/>
+ <account type="13" name="Teléfono"/>
+ <account type="13" name="Servicios Internet"/>
+ <account type="13" name="Comestibles"/>
+ <account type="13" name="Entretenimiento">
+ <account type="13" name="Viajes"/>
+ <account type="13" name="Recreación"/>
+ <account type="13" name="Música/Películas"/>
+ </account>
+ <account type="13" name="Libros"/>
+ <account type="13" name="Regalos"/>
+ <account type="13" name="Gastos médicos">
+ <account type="13" name="Medicina Prepaga"/>
+ <account type="13" name="Obra Social"/>
+ </account>
+ <account type="13" name="Obras benéficas"/>
+ <account type="13" name="Automóvil">
+ <account type="13" name="Gas"/>
+ <account type="13" name="Reparación y mantenimiento"/>
+ <account type="13" name="Estacionamiento"/>
+ <account type="13" name="Cuotas"/>
+ </account>
+ <account type="13" name="Cargos bancarios"/>
+ <account type="13" name="Ropa"/>
+ <account type="13" name="Artículos de oficina"/>
+ <account type="13" name="Seguros">
+ <account type="13" name="Seguro de automóvil"/>
+ <account type="13" name="Seguro de vida"/>
+ <account type="13" name="Seguro de retiro"/>
+ </account>
+ <account type="13" name="Ajustes"/>
+ <account type="13" name="Impuestos">
+ <account type="13" name="Municipales"/>
+ <account type="13" name="Seguridad Social"/>
+ <account type="13" name="Ganancias"/>
+ <account type="13" name="Bienes Personales"/>
+ <account type="13" name="Otros impuestos"/>
+ </account>
+ <account type="13" name="Informática"/>
+ <account type="13" name="Lavandería"/>
+ <account type="13" name="Otros gastos"/>
+ <account type="13" name="TV Cable"/>
+ <account type="13" name="Hobbies"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Bonos extra"/>
+ <account type="12" name="Otros ingresos"/>
+ <account type="12" name="Regalos recibidos"/>
+ <account type="12" name="Sueldo"/>
+ <account type="12" name="Ingresos por intereses">
+ <account type="12" name="Intereses de cuenta corriente"/>
+ <account type="12" name="Otros intereses"/>
+ <account type="12" name="Intereses cuenta de ahorros"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Cuentas por pagar">
+ <account type="4" name="Tarjeta de crédito"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_AR/currency.kmt b/kmymoney2/templates/es_AR/currency.kmt
new file mode 100644
index 0000000..f0abe85
--- /dev/null
+++ b/kmymoney2/templates/es_AR/currency.kmt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_currency.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Cuenta de conversión monetaria</title>
+ <shortdesc>Cuenta para convertir y comerciar con moneda extranjera</shortdesc>
+ <longdesc>Deseará seleccionar este juego de cuentas si convierte monedas extranjeras. Note: La cuenta se encuentra en USD; edite la cuenta para alterar la moneda</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Inversiones"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_AR/default_accounts.kmt b/kmymoney2/templates/es_AR/default_accounts.kmt
new file mode 100644
index 0000000..b97a618
--- /dev/null
+++ b/kmymoney2/templates/es_AR/default_accounts.kmt
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>KMyMoney</title>
+ <shortdesc>Cuentas predeterminadas</shortdesc>
+ <longdesc>Estas son cuentas y categorías que vienen de manera predeterminada</longdesc>
+ <accounts>
+ <account name="" type="13">
+ <account name="Alimentos y bebidas no alcohólicas" type="13">
+ <account name="Alimentos" type="13"/>
+ <account name="Bebidas no alcohólicas" type="13"/>
+ </account>
+ <account name="Bebidas alcohólicas, tabaco y estupefacientes" type="13">
+ <account name="Bebidas alcohólicas" type="13"/>
+ <account name="Tabaco" type="13"/>
+ <account name="Estupefacientes" type="13"/>
+ </account>
+ <account name="Ropa y calzado" type="13">
+ <account name="Ropa" type="13"/>
+ <account name="Calzado" type="13"/>
+ </account>
+ <account name="Alojamiento, agua, electricidad, gas y otros combustibles" type="13">
+ <account name="Alquileres efectivos de la vivienda" type="13"/>
+ <account name="Alquileres imputados a la vivienda" type="13"/>
+ <account name="Conservación y reparación de la vivienda" type="13"/>
+ <account name="Suministro de agua, y servicios diversos" type="13"/>
+ <account name="Electricidad, gas y otros combustibles" type="13"/>
+ </account>
+ <account name="Muebles, cosas del hogar y mantenimiento de la casa" type="13">
+ <account name="Muebles y accesorios, alfombras y otros materiales para pisos" type="13"/>
+ <account name="Productos textiles para el hogar" type="13"/>
+ <account name="Artefactos para el hogar" type="13"/>
+ <account name="Mercancías de vidrio y cristal, vajilla y utensilios para el hogar" type="13"/>
+ <account name="Herramientas y útiles para el hogar y jardín" type="13"/>
+ <account name="Bienes y servicios para la conservación ordinaria del hogar" type="13"/>
+ </account>
+ <account name="Salud" type="13">
+ <account name="Productos, artefactos y equipo médico" type="13"/>
+ <account name="Servicios para pacientes externos" type="13"/>
+ <account name="Servicios de hospital" type="13"/>
+ </account>
+ <account name="Transporte" type="13">
+ <account name="Adquisición de vehículos" type="13"/>
+ <account name="Funcionamiento de equipos de transporte personal" type="13"/>
+ <account name="Servicios de transporte" type="13"/>
+ </account>
+ <account name="Comunicaciones" type="13">
+ <account name="Servicios postales" type="13"/>
+ <account name="Equipo telefónico y de fax" type="13"/>
+ <account name="Servicios telefónicos y de fax" type="13"/>
+ </account>
+ <account name="Ocio y cultura" type="13">
+ <account name="Equipos audiovisuales, fotográficos y de procesamiento de información" type="13"/>
+ <account name="Otros productos duraderos importantes para ocio y cultura" type="13"/>
+ <account name="Otros artículos y equipo para ocio, jardines y animales domésticos" type="13"/>
+ <account name="Servicios de ocio y culturales" type="13"/>
+ <account name="Periódicos, libros y papeles y utiles de oficina" type="13"/>
+ <account name="Paquetes turísticos" type="13"/>
+ </account>
+ <account name="Educación" type="13">
+ <account name="Enseñanza preescolar y primaria" type="13"/>
+ <account name="Enseñanza secundaria" type="13"/>
+ <account name="Enseñanza postsecundaria, no terciaria" type="13"/>
+ <account name="Enseñanza terciaria" type="13"/>
+ <account name="Enseñanza no atribuible a ningún nivel" type="13"/>
+ </account>
+ <account name="Restaurantes y hoteles" type="13">
+ <account name="Servicios de catering" type="13"/>
+ <account name="Servicios de alojamiento" type="13"/>
+ </account>
+ <account name="Bienes y servicios diversos" type="13">
+ <account name="Cuidado personal" type="13"/>
+ <account name="Efectos personales" type="13"/>
+ <account name="Protección social" type="13"/>
+ <account name="Seguros" type="13"/>
+ <account name="Servicios financieros" type="13"/>
+ <account name="Otros servicios" type="13"/>
+ </account>
+ </account>
+
+ <account name="" type="12">
+ <account name="Otros Ingresos" type="12">
+ <account name="Becas" type="12"/>
+ <account name="Regalos Recibidos" type="12"/>
+ <account name="Loterías" type="12"/>
+ <account name="Devolución de Impuestos" type="12"/>
+ <account name="Pensión Recibida para Hijos" type="12"/>
+ </account>
+ <account name="Seguridad Social" type="12">
+ <account name="Pensión de Jubilación" type="12"/>
+ <account name="Pensión no Contributiva" type="12"/>
+ <account name="Bajas laborales" type="12"/>
+ <account name="Seguro Desempleo" type="12"/>
+ </account>
+ <account name="Rendimientos de Inversiones" type="12">
+ <account name="Dividendos" type="12"/>
+ <account name="Ganancias de Capital" type="12"/>
+ <account name="Intereses" type="12"/>
+ </account>
+ <account name="Salario" type="12">
+ <account name="Bonos" type="12"/>
+ <account name="Comisiones" type="12"/>
+ <account name="Primas de Producción" type="12"/>
+ <account name="Salario Bruto" type="12"/>
+ <account name="Salario Neto" type="12"/>
+ <account name="Horas Extras" type="12"/>
+ </account>
+ </account>
+ <account name="" type="9">
+ <account name="Activo líquido" type="1">
+ <account name="Dinero en mano" type="1"/>
+ <account name="Cuenta corriente" type="1"/>
+ </account>
+ <account name="Activo fijo" type="1">
+ <account name="Coche" type="9"/>
+ <account name="Casa" type="9"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_AR/eduloan.kmt b/kmymoney2/templates/es_AR/eduloan.kmt
new file mode 100644
index 0000000..b556dbb
--- /dev/null
+++ b/kmymoney2/templates/es_AR/eduloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_eduloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Préstamo para educación</title>
+ <shortdesc>Cuentas para préstamos para estudios e intereses asociados</shortdesc>
+ <longdesc>Deseará seleccionar este conjunto de cuentas si posee un préstamo para educación (préstamo para educación, intereses de préstamo para educación)</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Intereses">
+ <account type="13" name="Intereses de préstamo para educación"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Préstamos">
+ <account type="10" name="Préstamo para educación"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_AR/fixedassets.kmt b/kmymoney2/templates/es_AR/fixedassets.kmt
new file mode 100644
index 0000000..70f530d
--- /dev/null
+++ b/kmymoney2/templates/es_AR/fixedassets.kmt
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_fixedassets.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Activos fijos</title>
+ <shortdesc>Cuentas para gestionar varios activos fijos</shortdesc>
+ <longdesc>Deberá seleccionar esta cuenta si tiene varios activos fijos (casa, vehículo, casa de vacaciones, otros activos).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Activo fijo">
+ <account type="9" name="Vehículo"/>
+ <account type="9" name="Otros activos"/>
+ <account type="9" name="Casa"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_AR/homeloan.kmt b/kmymoney2/templates/es_AR/homeloan.kmt
new file mode 100644
index 0000000..474d7ac
--- /dev/null
+++ b/kmymoney2/templates/es_AR/homeloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_homeloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Préstamo hipotecario</title>
+ <shortdesc>Cuentas para préstamo hipotecario e interés asociado</shortdesc>
+ <longdesc>Deseará escoger este juego de cuentas si tiene contratado un préstamo hipotecario (préstamo hipotecario, interés hipoteca).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Intereses">
+ <account type="13" name="Interés de hipoteca"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Préstamos">
+ <account type="10" name="Préstamo hipotecario"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_AR/homeown.kmt b/kmymoney2/templates/es_AR/homeown.kmt
new file mode 100644
index 0000000..f0d2613
--- /dev/null
+++ b/kmymoney2/templates/es_AR/homeown.kmt
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_homeown.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Gastos de propietario de casa</title>
+ <shortdesc>Gastos asociados a la propiedad de una casa</shortdesc>
+ <longdesc>Deseará seleccionar este juego de cuentas si posee una casa. Este juego le proporciona un grupo de cuentas para controlar los gastos domésticos (seguro, impuestos, reparaciones).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Seguros">
+ <account type="13" name="Seguro de hogar"/>
+ </account>
+ <account type="13" name="Impuestos">
+ <account type="13" name="Contribución"/>
+ </account>
+ <account type="13" name="Reparaciones domésticas"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_AR/otherloan.kmt b/kmymoney2/templates/es_AR/otherloan.kmt
new file mode 100644
index 0000000..a329180
--- /dev/null
+++ b/kmymoney2/templates/es_AR/otherloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_otherloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Otros préstamos</title>
+ <shortdesc>Cuentas para controlar otros préstamos, junto con su interés asociado</shortdesc>
+ <longdesc>Deseará seleccionar este juego de cuentas si tiene un préstamo distinto a un préstamo hipotecario (otro préstamo, interés de otro préstamo).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Intereses">
+ <account type="13" name="Otro interés"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Préstamos">
+ <account type="10" name="Otro préstamo"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_AR/renter.kmt b/kmymoney2/templates/es_AR/renter.kmt
new file mode 100644
index 0000000..1124e07
--- /dev/null
+++ b/kmymoney2/templates/es_AR/renter.kmt
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_renter.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Gastos de inquilino</title>
+ <shortdesc>Gastos asociados a alquilar una casa</shortdesc>
+ <longdesc>Deseará escoger este juego de cuentas si alquila una casa o apartamento (alquiler, seguro de inquilino).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Alquiler"/>
+ <account type="13" name="Seguros">
+ <account type="13" name="Seguro de inquilino"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_AR/retiremt.kmt b/kmymoney2/templates/es_AR/retiremt.kmt
new file mode 100644
index 0000000..8965978
--- /dev/null
+++ b/kmymoney2/templates/es_AR/retiremt.kmt
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_retiremt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Cuentas de jubilación</title>
+ <shortdesc>Cuenta de jubilación con subcuentas de inversiones relacionadas</shortdesc>
+ <longdesc>Deseará escoger este juego de cuentas si tiene cuentas de jubilación (de acciones, bonos, fondos de inversión, fondos de índice).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Inversiones">
+ <account type="7" name="Jubilación"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_AR/spouseinc.kmt b/kmymoney2/templates/es_AR/spouseinc.kmt
new file mode 100644
index 0000000..cd288c3
--- /dev/null
+++ b/kmymoney2/templates/es_AR/spouseinc.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_spouseinc.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Ingresos de cónyuge</title>
+ <shortdesc>Cuentas para controlar los ingresos del cónyuge de manera separada</shortdesc>
+ <longdesc>Deseará seleccionar este juego de cuentas si su cónyuge trabaja (sueldo (cónyuge), impuestos (cónyuge)).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Sueldo (Cónyuge)"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Impuestos (Cónyuge)">
+ <account type="13" name="Municipales"/>
+ <account type="13" name="Seguridad Social"/>
+ <account type="13" name="Ganancias"/>
+ <account type="13" name="Bienes Personales"/>
+ <account type="13" name="Otros impuestos"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_AR/spouseretire.kmt b/kmymoney2/templates/es_AR/spouseretire.kmt
new file mode 100644
index 0000000..91bcbb4
--- /dev/null
+++ b/kmymoney2/templates/es_AR/spouseretire.kmt
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_spouseretire.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Cuentas de jubilación de cónyuge</title>
+ <shortdesc>Cuenta de jubilación con cuentas de inversión asociadas para cónyuge</shortdesc>
+ <longdesc>Deseará seleccionar este juego de cuentas si tiene inversiones a nombre de su cónyuge (acciones, bonos, fondos de inversión, fondos de índice, intereses, dividendos).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Inversiones">
+ <account type="7" name="Jubilación de cónyuge"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_ES/Makefile.am b/kmymoney2/templates/es_ES/Makefile.am
new file mode 100644
index 0000000..1d46036
--- /dev/null
+++ b/kmymoney2/templates/es_ES/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/es_ES
+
+template_DATA = homeown.kmt fixedassets.kmt retiremt.kmt eduloan.kmt homeloan.kmt default_accounts.kmt renter.kmt common.kmt spouseretire.kmt currency.kmt brokerage.kmt childcare.kmt cdmoneymkt.kmt carloan.kmt otherloan.kmt spouseinc.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/es_ES/brokerage.kmt b/kmymoney2/templates/es_ES/brokerage.kmt
new file mode 100644
index 0000000..c6910ed
--- /dev/null
+++ b/kmymoney2/templates/es_ES/brokerage.kmt
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_brokerage.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Cuentas de Inversión</title>
+ <shortdesc>Cuenta de corredor de bolsa con las cuentas de inversiones asociadas</shortdesc>
+ <longdesc>Deberá escoger este juego de cuentas si tiene inversiones (acciones, bonos, fondos de inversión, fondos indexados, intereses, dividendos).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Comisiones"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Ingresos por dividendos"/>
+ <account type="12" name="Ingresos por intereses">
+ <account type="12" name="Intereses de bonos"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Inversiones">
+ <account type="7" name="Cuenta de inversión"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_ES/carloan.kmt b/kmymoney2/templates/es_ES/carloan.kmt
new file mode 100644
index 0000000..0161c39
--- /dev/null
+++ b/kmymoney2/templates/es_ES/carloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_carloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Préstamo de automóvil</title>
+ <shortdesc>Cuentas para pago a plazos de automóvil e intereses asociados</shortdesc>
+ <longdesc>Debería seleccionar este juego de cuentas si está pagando a plazos su automóvil (plazos de automóvil, intereses por plazos de automóvil).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Intereses">
+ <account type="13" name="Intereses pago plazos vehículo"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Préstamos">
+ <account type="10" name="Vehículo a plazos"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_ES/cdmoneymkt.kmt b/kmymoney2/templates/es_ES/cdmoneymkt.kmt
new file mode 100644
index 0000000..39194ac
--- /dev/null
+++ b/kmymoney2/templates/es_ES/cdmoneymkt.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_cdmoneymkt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Pagarés y mercado monetario</title>
+ <shortdesc>Cuentas para pagarés, e inversiones de mercado monetario</shortdesc>
+ <longdesc>Debería seleccionar este juego de cuentas si maneja pagarés o cuentas de mercado monetario (pagarés, intereses de pagarés, mercado monetario, intereses de mercado monetario).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Ingresos por intereses">
+ <account type="12" name="Interés de pagarés"/>
+ <account type="12" name="Interés de mercado monetario"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Activo circulante">
+ <account type="1" name="Mercado monetario"/>
+ <account type="1" name="Pagaré de banco"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_ES/childcare.kmt b/kmymoney2/templates/es_ES/childcare.kmt
new file mode 100644
index 0000000..64e0066
--- /dev/null
+++ b/kmymoney2/templates/es_ES/childcare.kmt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_childcare.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Gastos de guardería</title>
+ <shortdesc>Cuenta para gestionar gastos de guardería</shortdesc>
+ <longdesc>Deberá seleccionar este juego de cuentas si tiene gastos de guardería.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Guardería"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_ES/common.kmt b/kmymoney2/templates/es_ES/common.kmt
new file mode 100644
index 0000000..ccd8889
--- /dev/null
+++ b/kmymoney2/templates/es_ES/common.kmt
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_common.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Cuentas comunes</title>
+ <shortdesc>Un juego básico de cuentas mayoritariamente utilizadas</shortdesc>
+ <longdesc>La mayoría de usuarios deseará escoger este juego de cuentas. Incluye las cuentas más comunmente utilizadas (cuenta corriente, de ahorros, metálico, tarjeta de crédito, ingresos, gastos comunes).</longdesc>
+ <accounts>
+ <account type="16" name="">
+ <account type="16" name="Balances de apertura"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Activo circulante">
+ <account type="1" name="Cuenta corriente"/>
+ <account type="3" name="Metálico"/>
+ <account type="1" name="Cuenta de ahorros"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Restaurantes"/>
+ <account type="13" name="Transporte público"/>
+ <account type="13" name="Educación"/>
+ <account type="13" name="Servicios">
+ <account type="13" name="Gas"/>
+ <account type="13" name="Recogida de basura"/>
+ <account type="13" name="Agua"/>
+ <account type="13" name="Electricidad"/>
+ </account>
+ <account type="13" name="Suscripciones"/>
+ <account type="13" name="Teléfono"/>
+ <account type="13" name="Servicios Internet"/>
+ <account type="13" name="Comestibles"/>
+ <account type="13" name="Ocio">
+ <account type="13" name="Viajes"/>
+ <account type="13" name="Recreación"/>
+ <account type="13" name="Música/Películas"/>
+ </account>
+ <account type="13" name="Libros"/>
+ <account type="13" name="Regalos"/>
+ <account type="13" name="Gastos médicos"/>
+ <account type="13" name="Obras benéficas"/>
+ <account type="13" name="Automóvil">
+ <account type="13" name="Gas"/>
+ <account type="13" name="Reparación y mantenimiento"/>
+ <account type="13" name="Aparcamiento"/>
+ <account type="13" name="Cuotas"/>
+ </account>
+ <account type="13" name="Cargo de servicio bancario"/>
+ <account type="13" name="Ropa"/>
+ <account type="13" name="Material de oficina"/>
+ <account type="13" name="Seguros">
+ <account type="13" name="Seguro de automóvil"/>
+ <account type="13" name="Seguro de vida"/>
+ <account type="13" name="Seguro sanitario"/>
+ </account>
+ <account type="13" name="Ajustes"/>
+ <account type="13" name="Impuestos">
+ <account type="13" name="Municipales"/>
+ <account type="13" name="Seguridad Social"/>
+ <account type="13" name="IRPF"/>
+ <account type="13" name="Retenciones"/>
+ <account type="13" name="Otros impuestos"/>
+ </account>
+ <account type="13" name="Informática"/>
+ <account type="13" name="Lavandería"/>
+ <account type="13" name="Otros gastos"/>
+ <account type="13" name="TV Cable"/>
+ <account type="13" name="Hobbies"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Pagas extra"/>
+ <account type="12" name="Otros ingresos"/>
+ <account type="12" name="Regalos recibidos"/>
+ <account type="12" name="Sueldo"/>
+ <account type="12" name="Ingresos por intereses">
+ <account type="12" name="Intereses de cuenta corriente"/>
+ <account type="12" name="Otros intereses"/>
+ <account type="12" name="Intereses cuenta de ahorros"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Cuentas por pagar">
+ <account type="4" name="Tarjeta de crédito"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_ES/currency.kmt b/kmymoney2/templates/es_ES/currency.kmt
new file mode 100644
index 0000000..f0abe85
--- /dev/null
+++ b/kmymoney2/templates/es_ES/currency.kmt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_currency.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Cuenta de conversión monetaria</title>
+ <shortdesc>Cuenta para convertir y comerciar con moneda extranjera</shortdesc>
+ <longdesc>Deseará seleccionar este juego de cuentas si convierte monedas extranjeras. Note: La cuenta se encuentra en USD; edite la cuenta para alterar la moneda</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Inversiones"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_ES/default_accounts.kmt b/kmymoney2/templates/es_ES/default_accounts.kmt
new file mode 100644
index 0000000..383b43d
--- /dev/null
+++ b/kmymoney2/templates/es_ES/default_accounts.kmt
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>KMyMoney</title>
+ <shortdesc>Cuentas predeterminadas</shortdesc>
+ <longdesc>Estas son cuentas y categorías que vienen de manera predeterminada para esta versión de KMyMoney</longdesc>
+ <accounts>
+ <account name="" type="13">
+ <account name="Alimentos y bebidas no alcohólicas" type="13">
+ <account name="Alimentos" type="13"/>
+ <account name="Bebidas no alcohólicas" type="13"/>
+ </account>
+ <account name="Bebidas alcohólicas, tabaco y estupefacientes" type="13">
+ <account name="Bebidas alcohólicas" type="13"/>
+ <account name="Tabaco" type="13"/>
+ <account name="Estupefacientes" type="13"/>
+ </account>
+ <account name="Ropa y calzado" type="13">
+ <account name="Ropa" type="13"/>
+ <account name="Calzado" type="13"/>
+ </account>
+ <account name="Alojamiento, agua, electricidad, gas y otros combustibles" type="13">
+ <account name="Alquileres efectivos de la vivienda" type="13"/>
+ <account name="Alquileres imputados a la vivienda" type="13"/>
+ <account name="Conservación y reparación de la vivienda" type="13"/>
+ <account name="Suministro de agua, y servicios diversos" type="13"/>
+ <account name="Electricidad, gas y otros combustibles" type="13"/>
+ </account>
+ <account name="Muebles, cosas del hogar y mantenimiento de la casa" type="13">
+ <account name="Muebles y accesorios, alfombras y otros materiales para pisos" type="13"/>
+ <account name="Productos textiles para el hogar" type="13"/>
+ <account name="Artefactos para el hogar" type="13"/>
+ <account name="Mercancías de vidrio y cristal, vajilla y utensilios para el hogar" type="13"/>
+ <account name="Herramientas y útiles para el hogar y jardín" type="13"/>
+ <account name="Bienes y servicios para la conservación ordinaria del hogar" type="13"/>
+ </account>
+ <account name="Salud" type="13">
+ <account name="Productos, artefactos y equipo médico" type="13"/>
+ <account name="Servicios para pacientes externos" type="13"/>
+ <account name="Servicios de hospital" type="13"/>
+ </account>
+ <account name="Transporte" type="13">
+ <account name="Adquisición de vehículos" type="13"/>
+ <account name="Funcionamiento de equipos de transporte personal" type="13"/>
+ <account name="Servicios de transporte" type="13"/>
+ </account>
+ <account name="Comunicaciones" type="13">
+ <account name="Servicios postales" type="13"/>
+ <account name="Equipo telefónico y de fax" type="13"/>
+ <account name="Servicios telefónicos y de fax" type="13"/>
+ </account>
+ <account name="Ocio y cultura" type="13">
+ <account name="Equipos audiovisuales, fotográficos y de procesamiento de información" type="13"/>
+ <account name="Otros productos duraderos importantes para ocio y cultura" type="13"/>
+ <account name="Otros artículos y equipo para ocio, jardines y animales domésticos" type="13"/>
+ <account name="Servicios de ocio y culturales" type="13"/>
+ <account name="Periódicos, libros y papeles y utiles de oficina" type="13"/>
+ <account name="Paquetes turísticos" type="13"/>
+ </account>
+ <account name="Educación" type="13">
+ <account name="Enseñanza preescolar y primaria" type="13"/>
+ <account name="Enseñanza secundaria" type="13"/>
+ <account name="Enseñanza postsecundaria, no terciaria" type="13"/>
+ <account name="Enseñanza terciaria" type="13"/>
+ <account name="Enseñanza no atribuible a ningún nivel" type="13"/>
+ </account>
+ <account name="Restaurantes y hoteles" type="13">
+ <account name="Servicios de catering" type="13"/>
+ <account name="Servicios de alojamiento" type="13"/>
+ </account>
+ <account name="Bienes y servicios diversos" type="13">
+ <account name="Cuidado personal" type="13"/>
+ <account name="Efectos personales n.e.p." type="13"/>
+ <account name="Protección social" type="13"/>
+ <account name="Seguros" type="13"/>
+ <account name="Servicios financieros n.e.p." type="13"/>
+ <account name="Otros servicios n.e.p." type="13"/>
+ </account>
+ </account>
+
+ <account name="" type="12">
+ <account name="Otros Ingresos" type="12">
+ <account name="Becas" type="12"/>
+ <account name="Regalos Recibidos" type="12"/>
+ <account name="Loterías" type="12"/>
+ <account name="Devolución de Impuestos" type="12"/>
+ <account name="Pensión Recibida para Hijos" type="12"/>
+ </account>
+ <account name="Seguridad Social" type="12">
+ <account name="Pensión de Jubilación" type="12"/>
+ <account name="Pensión no Contributiva" type="12"/>
+ <account name="Bajas laborales" type="12"/>
+ <account name="Seguro Desempleo" type="12"/>
+ </account>
+ <account name="Rendimientos de Inversiones" type="12">
+ <account name="Dividendos" type="12"/>
+ <account name="Ganancias de Capital" type="12"/>
+ <account name="Intereses" type="12"/>
+ </account>
+ <account name="Salario" type="12">
+ <account name="Bonus" type="12"/>
+ <account name="Comisiones" type="12"/>
+ <account name="Primas de Producción" type="12"/>
+ <account name="Salario Bruto" type="12"/>
+ <account name="Salario Neto" type="12"/>
+ <account name="Horas Extras" type="12"/>
+ </account>
+ </account>
+ <account name="" type="9">
+ <account name="Activo líquido" type="1">
+ <account name="Dinero en mano" type="1"/>
+ <account name="Cuenta corriente" type="1"/>
+ </account>
+ <account name="Activo fijo" type="1">
+ <account name="Coche" type="9"/>
+ <account name="Casa" type="9"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_ES/eduloan.kmt b/kmymoney2/templates/es_ES/eduloan.kmt
new file mode 100644
index 0000000..b556dbb
--- /dev/null
+++ b/kmymoney2/templates/es_ES/eduloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_eduloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Préstamo para educación</title>
+ <shortdesc>Cuentas para préstamos para estudios e intereses asociados</shortdesc>
+ <longdesc>Deseará seleccionar este conjunto de cuentas si posee un préstamo para educación (préstamo para educación, intereses de préstamo para educación)</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Intereses">
+ <account type="13" name="Intereses de préstamo para educación"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Préstamos">
+ <account type="10" name="Préstamo para educación"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_ES/fixedassets.kmt b/kmymoney2/templates/es_ES/fixedassets.kmt
new file mode 100644
index 0000000..70f530d
--- /dev/null
+++ b/kmymoney2/templates/es_ES/fixedassets.kmt
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_fixedassets.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Activos fijos</title>
+ <shortdesc>Cuentas para gestionar varios activos fijos</shortdesc>
+ <longdesc>Deberá seleccionar esta cuenta si tiene varios activos fijos (casa, vehículo, casa de vacaciones, otros activos).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Activo fijo">
+ <account type="9" name="Vehículo"/>
+ <account type="9" name="Otros activos"/>
+ <account type="9" name="Casa"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_ES/homeloan.kmt b/kmymoney2/templates/es_ES/homeloan.kmt
new file mode 100644
index 0000000..474d7ac
--- /dev/null
+++ b/kmymoney2/templates/es_ES/homeloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_homeloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Préstamo hipotecario</title>
+ <shortdesc>Cuentas para préstamo hipotecario e interés asociado</shortdesc>
+ <longdesc>Deseará escoger este juego de cuentas si tiene contratado un préstamo hipotecario (préstamo hipotecario, interés hipoteca).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Intereses">
+ <account type="13" name="Interés de hipoteca"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Préstamos">
+ <account type="10" name="Préstamo hipotecario"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_ES/homeown.kmt b/kmymoney2/templates/es_ES/homeown.kmt
new file mode 100644
index 0000000..f0d2613
--- /dev/null
+++ b/kmymoney2/templates/es_ES/homeown.kmt
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_homeown.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Gastos de propietario de casa</title>
+ <shortdesc>Gastos asociados a la propiedad de una casa</shortdesc>
+ <longdesc>Deseará seleccionar este juego de cuentas si posee una casa. Este juego le proporciona un grupo de cuentas para controlar los gastos domésticos (seguro, impuestos, reparaciones).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Seguros">
+ <account type="13" name="Seguro de hogar"/>
+ </account>
+ <account type="13" name="Impuestos">
+ <account type="13" name="Contribución"/>
+ </account>
+ <account type="13" name="Reparaciones domésticas"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_ES/otherloan.kmt b/kmymoney2/templates/es_ES/otherloan.kmt
new file mode 100644
index 0000000..a329180
--- /dev/null
+++ b/kmymoney2/templates/es_ES/otherloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_otherloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Otros préstamos</title>
+ <shortdesc>Cuentas para controlar otros préstamos, junto con su interés asociado</shortdesc>
+ <longdesc>Deseará seleccionar este juego de cuentas si tiene un préstamo distinto a un préstamo hipotecario (otro préstamo, interés de otro préstamo).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Intereses">
+ <account type="13" name="Otro interés"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Préstamos">
+ <account type="10" name="Otro préstamo"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_ES/renter.kmt b/kmymoney2/templates/es_ES/renter.kmt
new file mode 100644
index 0000000..1124e07
--- /dev/null
+++ b/kmymoney2/templates/es_ES/renter.kmt
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_renter.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Gastos de inquilino</title>
+ <shortdesc>Gastos asociados a alquilar una casa</shortdesc>
+ <longdesc>Deseará escoger este juego de cuentas si alquila una casa o apartamento (alquiler, seguro de inquilino).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Alquiler"/>
+ <account type="13" name="Seguros">
+ <account type="13" name="Seguro de inquilino"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_ES/retiremt.kmt b/kmymoney2/templates/es_ES/retiremt.kmt
new file mode 100644
index 0000000..8965978
--- /dev/null
+++ b/kmymoney2/templates/es_ES/retiremt.kmt
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_retiremt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Cuentas de jubilación</title>
+ <shortdesc>Cuenta de jubilación con subcuentas de inversiones relacionadas</shortdesc>
+ <longdesc>Deseará escoger este juego de cuentas si tiene cuentas de jubilación (de acciones, bonos, fondos de inversión, fondos de índice).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Inversiones">
+ <account type="7" name="Jubilación"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_ES/spouseinc.kmt b/kmymoney2/templates/es_ES/spouseinc.kmt
new file mode 100644
index 0000000..632216f
--- /dev/null
+++ b/kmymoney2/templates/es_ES/spouseinc.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_spouseinc.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Ingresos de cónyuge</title>
+ <shortdesc>Cuentas para controlar los ingresos del cónyuge de manera separada</shortdesc>
+ <longdesc>Deseará seleccionar este juego de cuentas si su cónyuge trabaja (sueldo (cónyuge), impuestos (cónyuge)).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Sueldo (Cónyuge)"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Impuestos (Cónyuge)">
+ <account type="13" name="Seguridad Social"/>
+ <account type="13" name="Retenciones"/>
+ <account type="13" name="Municipales"/>
+ <account type="13" name="IRPF"/>
+ <account type="13" name="Otros impuestos"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_ES/spouseretire.kmt b/kmymoney2/templates/es_ES/spouseretire.kmt
new file mode 100644
index 0000000..91bcbb4
--- /dev/null
+++ b/kmymoney2/templates/es_ES/spouseretire.kmt
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_ES/acctchrt_spouseretire.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Cuentas de jubilación de cónyuge</title>
+ <shortdesc>Cuenta de jubilación con cuentas de inversión asociadas para cónyuge</shortdesc>
+ <longdesc>Deseará seleccionar este juego de cuentas si tiene inversiones a nombre de su cónyuge (acciones, bonos, fondos de inversión, fondos de índice, intereses, dividendos).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Inversiones">
+ <account type="7" name="Jubilación de cónyuge"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_MX/Makefile.am b/kmymoney2/templates/es_MX/Makefile.am
new file mode 100644
index 0000000..a96e0d8
--- /dev/null
+++ b/kmymoney2/templates/es_MX/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/es_MX
+
+template_DATA = homeown.kmt fixedassets.kmt retiremt.kmt eduloan.kmt homeloan.kmt renter.kmt common.kmt spouseretire.kmt currency.kmt brokerage.kmt childcare.kmt cdmoneymkt.kmt carloan.kmt otherloan.kmt spouseinc.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/es_MX/brokerage.kmt b/kmymoney2/templates/es_MX/brokerage.kmt
new file mode 100644
index 0000000..7a7e4e4
--- /dev/null
+++ b/kmymoney2/templates/es_MX/brokerage.kmt
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_MX/acctchrt_brokerage.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Cuentas de Inversión</title>
+ <shortdesc>Cuenta de corredor de bolsa con las cuentas de inversiones asociadas</shortdesc>
+ <longdesc>Deberá escoger este juego de cuentas si tiene inversiones (acciones, bonos, fondos de inversión, fondos indexados, intereses, dividendos).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Comisiones"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Ingresos por dividendos"/>
+ <account type="12" name="Ingresos por intereses">
+ <account type="12" name="Intereses de bonos"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Inversiones">
+ <account type="7" name="Cuenta de inversión"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_MX/carloan.kmt b/kmymoney2/templates/es_MX/carloan.kmt
new file mode 100644
index 0000000..601056d
--- /dev/null
+++ b/kmymoney2/templates/es_MX/carloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_MX/acctchrt_carloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Préstamo de automóvil</title>
+ <shortdesc>Cuentas para pago a plazos de automóvil e intereses asociados</shortdesc>
+ <longdesc>Debería seleccionar este juego de cuentas si está pagando a plazos su automóvil (plazos de automóvil, intereses por plazos de automóvil).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Intereses">
+ <account type="13" name="Intereses pago plazos vehículo"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Préstamos">
+ <account type="10" name="Vehículo a plazos"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_MX/cdmoneymkt.kmt b/kmymoney2/templates/es_MX/cdmoneymkt.kmt
new file mode 100644
index 0000000..464259a
--- /dev/null
+++ b/kmymoney2/templates/es_MX/cdmoneymkt.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_MX/acctchrt_cdmoneymkt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Pagarés y mercado monetario</title>
+ <shortdesc>Cuentas para pagarés, e inversiones de mercado monetario</shortdesc>
+ <longdesc>Debería seleccionar este juego de cuentas si maneja pagarés o cuentas de mercado monetario (pagarés, intereses de pagarés, mercado monetario, intereses de mercado monetario).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Ingresos por intereses">
+ <account type="12" name="Interés de pagarés"/>
+ <account type="12" name="Interés de mercado de dinero"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Activo circulante">
+ <account type="1" name="Mercado de dinero"/>
+ <account type="1" name="Pagaré de banco"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_MX/childcare.kmt b/kmymoney2/templates/es_MX/childcare.kmt
new file mode 100644
index 0000000..d3c1035
--- /dev/null
+++ b/kmymoney2/templates/es_MX/childcare.kmt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_MX/acctchrt_childcare.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Gastos de guardería</title>
+ <shortdesc>Cuenta para gestionar gastos de guardería</shortdesc>
+ <longdesc>Deberá seleccionar este juego de cuentas si tiene gastos de guardería.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Guardería"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_MX/common.kmt b/kmymoney2/templates/es_MX/common.kmt
new file mode 100644
index 0000000..301b436
--- /dev/null
+++ b/kmymoney2/templates/es_MX/common.kmt
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_MX/acctchrt_common.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Cuentas comunes</title>
+ <shortdesc>Un juego básico de cuentas mayoritariamente utilizadas</shortdesc>
+ <longdesc>La mayoría de usuarios deseará escoger este juego de cuentas. Incluye las cuentas más comúnmente utilizadas (cuenta de ahorros, efectivo, tarjeta de crédito, ingresos, gastos comunes).</longdesc>
+ <accounts>
+ <account type="16" name="">
+ <account type="16" name="Balances de apertura"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Activo circulante">
+ <account type="1" name="Cuenta de Cheques"/>
+ <account type="3" name="Efectivo"/>
+ <account type="1" name="Cuenta de ahorros"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Restaurantes"/>
+ <account type="13" name="Transporte público"/>
+ <account type="13" name="Educación"/>
+ <account type="13" name="Servicios">
+ <account type="13" name="Gas"/>
+ <account type="13" name="Recolección de basura"/>
+ <account type="13" name="Agua"/>
+ <account type="13" name="Electricidad"/>
+ </account>
+ <account type="13" name="Suscripciones"/>
+ <account type="13" name="Teléfono"/>
+ <account type="13" name="Servicios de Internet"/>
+ <account type="13" name="Despensa"/>
+ <account type="13" name="Ocio">
+ <account type="13" name="Viajes"/>
+ <account type="13" name="Entretenimiento"/>
+ <account type="13" name="Música/Películas"/>
+ </account>
+ <account type="13" name="Libros"/>
+ <account type="13" name="Regalos"/>
+ <account type="13" name="Gastos médicos"/>
+ <account type="13" name="Obras de caridad"/>
+ <account type="13" name="Automóvil">
+ <account type="13" name="Gasolina"/>
+ <account type="13" name="Reparación y mantenimiento"/>
+ <account type="13" name="Estacionamiento"/>
+ <account type="13" name="Casetas de Peaje"/>
+ </account>
+ <account type="13" name="Cargo de servicio bancario"/>
+ <account type="13" name="Ropa"/>
+ <account type="13" name="Material de oficina"/>
+ <account type="13" name="Seguros">
+ <account type="13" name="Seguro del automóvil"/>
+ <account type="13" name="Seguro de vida"/>
+ <account type="13" name="Seguro Social"/>
+ </account>
+ <account type="13" name="Ajustes"/>
+ <account type="13" name="Impuestos">
+ <account type="13" name="IMSS"/>
+ <account type="13" name="Municipales"/>
+ <account type="13" name="Federales">
+ <account type="13" name="IVA"/>
+ <account type="13" name="IETU"/>
+ <account type="13" name="ISR"/>
+ <account type="13" name="Tenencia"/>
+ <account type="13" name="PTU"/>
+ </account>
+ <account type="13" name="Retenciones"/>
+ <account type="13" name="Otros impuestos"/>
+ </account>
+ <account type="13" name="Computadora"/>
+ <account type="13" name="Lavandería"/>
+ <account type="13" name="Otros gastos"/>
+ <account type="13" name="TV Cable"/>
+ <account type="13" name="Hobbies"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Pagos extra"/>
+ <account type="12" name="Otros ingresos"/>
+ <account type="12" name="Regalos recibidos"/>
+ <account type="12" name="Sueldo"/>
+ <account type="12" name="Ingresos por intereses">
+ <account type="12" name="Intereses cuenta de cheques"/>
+ <account type="12" name="Otros intereses"/>
+ <account type="12" name="Intereses cuenta de ahorros"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Cuentas por pagar">
+ <account type="4" name="Tarjeta de crédito"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_MX/currency.kmt b/kmymoney2/templates/es_MX/currency.kmt
new file mode 100644
index 0000000..6dce52d
--- /dev/null
+++ b/kmymoney2/templates/es_MX/currency.kmt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_MX/acctchrt_currency.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Cuenta de Compra-Venta de monedas</title>
+ <shortdesc>Cuenta para compra/venta de moneda extranjera</shortdesc>
+ <longdesc>Deseará seleccionar este juego de cuentas si realiza compra/venta de monedas extranjeras. Note: La cuenta se encuentra en USD; edite la cuenta para alterar la moneda</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Inversiones"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_MX/eduloan.kmt b/kmymoney2/templates/es_MX/eduloan.kmt
new file mode 100644
index 0000000..5c7f7ba
--- /dev/null
+++ b/kmymoney2/templates/es_MX/eduloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_MX/acctchrt_eduloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Préstamo para educación</title>
+ <shortdesc>Cuentas para préstamos para estudios e intereses asociados</shortdesc>
+ <longdesc>Deseará seleccionar este conjunto de cuentas si posee un préstamo para educación (préstamo para educación, intereses de préstamo para educación)</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Intereses">
+ <account type="13" name="Intereses de préstamo para educación"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Préstamos">
+ <account type="10" name="Préstamo para educación"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_MX/fixedassets.kmt b/kmymoney2/templates/es_MX/fixedassets.kmt
new file mode 100644
index 0000000..ecef92a
--- /dev/null
+++ b/kmymoney2/templates/es_MX/fixedassets.kmt
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_MX/acctchrt_fixedassets.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Activos fijos</title>
+ <shortdesc>Cuentas para gestionar varios activos fijos</shortdesc>
+ <longdesc>Deberá seleccionar esta cuenta si tiene varios activos fijos (casa, vehículo, casa de vacaciones, otros activos).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Activo fijo">
+ <account type="9" name="Vehículo"/>
+ <account type="9" name="Otros activos"/>
+ <account type="9" name="Casa"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_MX/homeloan.kmt b/kmymoney2/templates/es_MX/homeloan.kmt
new file mode 100644
index 0000000..747257e
--- /dev/null
+++ b/kmymoney2/templates/es_MX/homeloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_MX/acctchrt_homeloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Préstamo hipotecario</title>
+ <shortdesc>Cuentas para préstamo hipotecario e interés asociado</shortdesc>
+ <longdesc>Deseará escoger este juego de cuentas si tiene contratado un préstamo hipotecario (préstamo hipotecario, interés hipoteca).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Intereses">
+ <account type="13" name="Interés de hipoteca"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Préstamos">
+ <account type="10" name="Préstamo hipotecario"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_MX/homeown.kmt b/kmymoney2/templates/es_MX/homeown.kmt
new file mode 100644
index 0000000..cc7e15b
--- /dev/null
+++ b/kmymoney2/templates/es_MX/homeown.kmt
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_MX/acctchrt_homeown.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Gastos de propietario de casa</title>
+ <shortdesc>Gastos asociados a la propiedad de una casa</shortdesc>
+ <longdesc>Deseará seleccionar este juego de cuentas si posee una casa. Este juego le proporciona un grupo de cuentas para controlar los gastos domésticos (seguro, impuestos, reparaciones).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Seguros">
+ <account type="13" name="Seguro contra siniestros"/>
+ </account>
+ <account type="13" name="Impuestos">
+ <account type="13" name="Predial"/>
+ </account>
+ <account type="13" name="Reparaciones domésticas"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_MX/otherloan.kmt b/kmymoney2/templates/es_MX/otherloan.kmt
new file mode 100644
index 0000000..d31bc3e
--- /dev/null
+++ b/kmymoney2/templates/es_MX/otherloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_MX/acctchrt_otherloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Otros préstamos</title>
+ <shortdesc>Cuentas para controlar otros préstamos, junto con su interés asociado</shortdesc>
+ <longdesc>Deseará seleccionar este juego de cuentas si tiene un préstamo distinto a un préstamo hipotecario (otro préstamo, interés de otro préstamo).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Intereses">
+ <account type="13" name="Otro interés"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Préstamos">
+ <account type="10" name="Otro préstamo"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_MX/renter.kmt b/kmymoney2/templates/es_MX/renter.kmt
new file mode 100644
index 0000000..3b9d624
--- /dev/null
+++ b/kmymoney2/templates/es_MX/renter.kmt
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_MX/acctchrt_renter.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Gastos de inquilino</title>
+ <shortdesc>Gastos asociados a alquilar una casa</shortdesc>
+ <longdesc>Deseará escoger este juego de cuentas si alquila una casa o apartamento (alquiler, seguro de inquilino).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Alquiler"/>
+ <account type="13" name="Seguros">
+ <account type="13" name="Seguro de inquilino"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_MX/retiremt.kmt b/kmymoney2/templates/es_MX/retiremt.kmt
new file mode 100644
index 0000000..3d2af47
--- /dev/null
+++ b/kmymoney2/templates/es_MX/retiremt.kmt
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_MX/acctchrt_retiremt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Cuentas de jubilación</title>
+ <shortdesc>Cuenta de jubilación con subcuentas de inversiones relacionadas</shortdesc>
+ <longdesc>Deseará escoger este juego de cuentas si tiene cuentas de jubilación (de acciones, bonos, fondos de inversión, fondos de índice).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Inversiones">
+ <account type="7" name="Jubilación"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_MX/spouseinc.kmt b/kmymoney2/templates/es_MX/spouseinc.kmt
new file mode 100644
index 0000000..5f1ace5
--- /dev/null
+++ b/kmymoney2/templates/es_MX/spouseinc.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_MX/acctchrt_spouseinc.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Ingresos de cónyuge</title>
+ <shortdesc>Cuentas para controlar los ingresos del cónyuge de manera separada</shortdesc>
+ <longdesc>Deseará seleccionar este juego de cuentas si su cónyuge trabaja (sueldo (cónyuge), impuestos (cónyuge)).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Sueldo (Cónyuge)"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Impuestos (Cónyuge)">
+ <account type="13" name="Seguridad Social"/>
+ <account type="13" name="Retenciones"/>
+ <account type="13" name="Municipales"/>
+ <account type="13" name="IRPF"/>
+ <account type="13" name="Otros impuestos"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/es_MX/spouseretire.kmt b/kmymoney2/templates/es_MX/spouseretire.kmt
new file mode 100644
index 0000000..4f8847b
--- /dev/null
+++ b/kmymoney2/templates/es_MX/spouseretire.kmt
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/es_MX/acctchrt_spouseretire.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Cuentas de jubilación de cónyuge</title>
+ <shortdesc>Cuenta de jubilación con cuentas de inversión asociadas para cónyuge</shortdesc>
+ <longdesc>Deseará seleccionar este juego de cuentas si tiene inversiones a nombre de su cónyuge (acciones, bonos, fondos de inversión, fondos de índice, intereses, dividendos).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Inversiones">
+ <account type="7" name="Jubilación de cónyuge"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CA/Makefile.am b/kmymoney2/templates/fr_CA/Makefile.am
new file mode 100644
index 0000000..12b76ad
--- /dev/null
+++ b/kmymoney2/templates/fr_CA/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/fr_CA
+
+template_DATA = retraite.kmt revenus.kmt garderie.kmt courtage.kmt conjointrev.kmt chequier.kmt cdmarchemon.kmt etudeemprunt.kmt automobile.kmt conjointretraite.kmt basecommune.kmt proprietaire.kmt actifsfixes.kmt locataire.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/fr_CA/actifsfixes.kmt b/kmymoney2/templates/fr_CA/actifsfixes.kmt
new file mode 100644
index 0000000..6326f8a
--- /dev/null
+++ b/kmymoney2/templates/fr_CA/actifsfixes.kmt
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CA/acctchrt_actifsfixes.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Actifs fixes</title>
+ <shortdesc>Comptes pour la gestion de vos actifs fixes.importants.</shortdesc>
+ <longdesc>Sélectionnez ce groupe de comptes si vous possédez des immobilisations ou actifs fixes importants tels que résidence, chalet, auto ou autres actifs.</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Actifs fixes">
+ <account type="9" name="Autres biens immobilisés"/>
+ <account type="9" name="Véhicule"/>
+ <account type="9" name="Résidence"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CA/automobile.kmt b/kmymoney2/templates/fr_CA/automobile.kmt
new file mode 100644
index 0000000..06c80b2
--- /dev/null
+++ b/kmymoney2/templates/fr_CA/automobile.kmt
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CA/acctchrt_automobile.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Véhicule</title>
+ <shortdesc>Frais relatifs à votre véhicule.</shortdesc>
+ <longdesc>Sélectionnez ce groupe de comptes si vous devez suivre les frais relatifs à la possession et à l'utilisation d'une auto (assurances, carburant, emprunt, intérêts, ...).</longdesc>
+ <accounts>
+ <account type="10" name="">
+ <account type="10" name="Emprunts">
+ <account type="10" name="Auto"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Assurances">
+ <account type="13" name="Auto"/>
+ </account>
+ <account type="13" name="Intérêts">
+ <account type="13" name="Auto"/>
+ </account>
+ <account type="13" name="Auto">
+ <account type="13" name="Carburant"/>
+ <account type="13" name="Parking"/>
+ <account type="13" name="Permis"/>
+ <account type="13" name="Entretien"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Actifs fixes">
+ <account type="9" name="Véhicule"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CA/basecommune.kmt b/kmymoney2/templates/fr_CA/basecommune.kmt
new file mode 100644
index 0000000..2e98c22
--- /dev/null
+++ b/kmymoney2/templates/fr_CA/basecommune.kmt
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CA/acctchrt_basecommune.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Base de comptes communs</title>
+ <shortdesc>Ensemble des comptes de base les plus couramment utilisés</shortdesc>
+ <longdesc>La plupart des utilisateurs sélectionneront ce groupe/hiérarchie de comptes. Il inclut des comptes de base couramment utilisés par les particuliers, tels que compte chèques, compte d'éargne, encaisse, carte de crédit. revenus et dépenses.</longdesc>
+ <accounts>
+ <account type="10" name="">
+ <account type="10" name="Marge de crédit"/>
+ <account type="10" name="Carte de crédit"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Autres"/>
+ <account type="12" name="Cadeaux reçus"/>
+ <account type="12" name="Intérêts">
+ <account type="12" name="Chèques"/>
+ <account type="12" name="Épargne"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Transports publics"/>
+ <account type="13" name="Frais médicaux"/>
+ <account type="13" name="Cadeaux"/>
+ <account type="13" name="Divers"/>
+ <account type="13" name="Divertissements">
+ <account type="13" name="Loisirs"/>
+ <account type="13" name="Passe-temps"/>
+ <account type="13" name="Voyages"/>
+ <account type="13" name="Musique/Films"/>
+ </account>
+ <account type="13" name="Cotisations"/>
+ <account type="13" name="Buanderie"/>
+ <account type="13" name="Vêtements"/>
+ <account type="13" name="Abonnements"/>
+ <account type="13" name="Informatique"/>
+ <account type="13" name="Livres"/>
+ <account type="13" name="Garderie"/>
+ <account type="13" name="Assurances">
+ <account type="13" name="Santé"/>
+ <account type="13" name="Vie"/>
+ </account>
+ <account type="13" name="Ajustements"/>
+ <account type="13" name="Frais bancaires"/>
+ <account type="13" name="Restaurant"/>
+ <account type="13" name="Formation"/>
+ <account type="13" name="Services">
+ <account type="13" name="Téléphone"/>
+ <account type="13" name="Gaz"/>
+ <account type="13" name="Câble"/>
+ <account type="13" name="Internet"/>
+ <account type="13" name="Électricité"/>
+ <account type="13" name="Ordures"/>
+ <account type="13" name="Cellulaire"/>
+ <account type="13" name="Eau"/>
+ </account>
+ <account type="13" name="Fournitures"/>
+ <account type="13" name="Dons"/>
+ <account type="13" name="Intérêts">
+ <account type="13" name="Marge de crédit"/>
+ <account type="13" name="Carte de crédit"/>
+ </account>
+ <account type="13" name="Alimentation"/>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="Ouverture"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Liquidités">
+ <account type="1" name="Épargne"/>
+ <account type="3" name="Encaisse"/>
+ <account type="1" name="Chèques"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CA/cdmarchemon.kmt b/kmymoney2/templates/fr_CA/cdmarchemon.kmt
new file mode 100644
index 0000000..eebae64
--- /dev/null
+++ b/kmymoney2/templates/fr_CA/cdmarchemon.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CA/acctchrt_cdmarchemon.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>CD/CPG et marché monéraire</title>
+ <shortdesc>Comptes corrrespondant aux certificats de dépôt et au marché monétaire.</shortdesc>
+ <longdesc>Sélectionnez ce groupe de comptes (CD/CPG , marché monétaire et intérêts) si vous détenez des certificats de dépôt et d'autres titres du marché monétaire.</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Liquidités">
+ <account type="1" name="Marché monétaire"/>
+ <account type="1" name="CD/CPG bancaires"/>
+ </account>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Intérêts">
+ <account type="12" name="CD/CPG"/>
+ <account type="12" name="Marché monétaire"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CA/chequier.kmt b/kmymoney2/templates/fr_CA/chequier.kmt
new file mode 100644
index 0000000..20b3a50
--- /dev/null
+++ b/kmymoney2/templates/fr_CA/chequier.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CA/acctchrt_chequier.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Chéquier</title>
+ <shortdesc>Ensemble de comptes incontournables pour utiliser GnuCash.</shortdesc>
+ <longdesc>Sélectionnez ce groupe de comptes si vous ne voulez suivre que le solde de votre compte en banque. Si le besoin s'en fait sentir plus tard, vous pourrez commencer un suivi plus serré de vos revenus et dépenses en ajoutant de nouveaux groupes de comptes.</longdesc>
+ <accounts>
+ <account type="13" name=""/>
+ <account type="16" name="">
+ <account type="16" name="Ouverture"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Liquidités">
+ <account type="1" name="Chèques"/>
+ </account>
+ </account>
+ <account type="12" name=""/>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CA/conjointretraite.kmt b/kmymoney2/templates/fr_CA/conjointretraite.kmt
new file mode 100644
index 0000000..2588c7b
--- /dev/null
+++ b/kmymoney2/templates/fr_CA/conjointretraite.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CA/acctchrt_conjointretraite.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Retraite Conjoint(e)</title>
+ <shortdesc>Compte de placements pour retraite du (de la) conjoint(e) et autres comptes associés.</shortdesc>
+ <longdesc>Sélectionnez ce groupe si vous faites le suivi d'un compte de placements (actions, obligations, fonds communs et fonds d'indices boursiers) pour la retraite de votre conjoint(e).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Placements">
+ <account type="9" name="Retraite - Conjoint(e)">
+ <account type="9" name="Obligations"/>
+ <account type="9" name="Fonds commun"/>
+ <account type="9" name="Actions"/>
+ <account type="9" name="Fonds d'indices boursiers"/>
+ </account>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CA/conjointrev.kmt b/kmymoney2/templates/fr_CA/conjointrev.kmt
new file mode 100644
index 0000000..841f7e3
--- /dev/null
+++ b/kmymoney2/templates/fr_CA/conjointrev.kmt
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CA/acctchrt_conjointrev.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Revenus - Conjoint(e)</title>
+ <shortdesc>Comptes pour le suivi distinct des revenus du (de la) conjoint(e)</shortdesc>
+ <longdesc>Sélectionnez ce groupe de comptes si vous voulez suivre séparément les revenus et dépenses d'emploi du (de la) conjoint(e).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Taxes et impôts">
+ <account type="13" name="Emploi - Conjoint(e)">
+ <account type="13" name="Fédéral"/>
+ <account type="13" name="Assurance emploi"/>
+ <account type="13" name="RRQ/RCP"/>
+ <account type="13" name="RAMQ/Medicare"/>
+ <account type="13" name="Provincial"/>
+ </account>
+ </account>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Emploi - Conjoint(e)">
+ <account type="12" name="Frais remboursés"/>
+ <account type="12" name="Primes"/>
+ <account type="12" name="Salaire"/>
+ <account type="12" name="Commissions"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CA/courtage.kmt b/kmymoney2/templates/fr_CA/courtage.kmt
new file mode 100644
index 0000000..071782f
--- /dev/null
+++ b/kmymoney2/templates/fr_CA/courtage.kmt
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CA/acctchrt_courtage.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Courtage et placements</title>
+ <shortdesc>Compte de courtage et comptes de placements correspondants</shortdesc>
+ <longdesc>Sélectionnez ce groupe de comptes si vous possédez des titres de placements (actions, obligations, fonds communs de placement, fonds d'indices boursiers).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Frais de courtage"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Dividences"/>
+ <account type="12" name="Intérêts">
+ <account type="12" name="Obligations"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Placements">
+ <account type="9" name="Courtage">
+ <account type="9" name="Fonds d'indices boursiers"/>
+ <account type="9" name="Actions"/>
+ <account type="9" name="Fonds commun"/>
+ <account type="9" name="Obligations"/>
+ </account>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CA/etudeemprunt.kmt b/kmymoney2/templates/fr_CA/etudeemprunt.kmt
new file mode 100644
index 0000000..6409676
--- /dev/null
+++ b/kmymoney2/templates/fr_CA/etudeemprunt.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CA/acctchrt_etudeemprunt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Emprunt pour études</title>
+ <shortdesc>Emprunt pour études et frais d'intérêts associés.</shortdesc>
+ <longdesc>Selectionnez ce groupe si vous devez gérer un emprunt pour études.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Intérêts">
+ <account type="13" name="Études"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Emprunts">
+ <account type="10" name="Études"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CA/garderie.kmt b/kmymoney2/templates/fr_CA/garderie.kmt
new file mode 100644
index 0000000..e802eaf
--- /dev/null
+++ b/kmymoney2/templates/fr_CA/garderie.kmt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CA/acctchrt_garderie.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Enfant à charge</title>
+ <shortdesc>Un compte pour le suivi de vos frais pour un enfant à charge.</shortdesc>
+ <longdesc>Sélectionnez ce groupe si vous avez un jeune enfant .</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Garderie"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CA/locataire.kmt b/kmymoney2/templates/fr_CA/locataire.kmt
new file mode 100644
index 0000000..54b1e77
--- /dev/null
+++ b/kmymoney2/templates/fr_CA/locataire.kmt
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CA/acctchrt_locataire.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Location d'un logis</title>
+ <shortdesc>Frais associés à la location d'une résidence ou d'un logis.</shortdesc>
+ <longdesc>Sélectionnez ce groupe de compte si vous louez une résidence ou un logis (Loyer, assurances, ...).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Assurances">
+ <account type="13" name="Locataire"/>
+ </account>
+ <account type="13" name="Loyer"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CA/proprietaire.kmt b/kmymoney2/templates/fr_CA/proprietaire.kmt
new file mode 100644
index 0000000..e03f076
--- /dev/null
+++ b/kmymoney2/templates/fr_CA/proprietaire.kmt
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CA/acctchrt_proprietaire.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Propriétaire d'une résidence</title>
+ <shortdesc>Dépenses du propriétaire d'une résidence.</shortdesc>
+ <longdesc>Sélectionnez ce groupe de comptes si vous êtes propriétaire d'une résidence, et voulez en suivre les frais associés (hypothèque, intérêts, entretien et réparations, taxes, ...).</longdesc>
+ <accounts>
+ <account type="10" name="">
+ <account type="10" name="Emprunts">
+ <account type="10" name="Hypothèque"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Assurances">
+ <account type="13" name="Résidence"/>
+ </account>
+ <account type="13" name="Taxes et impôts">
+ <account type="13" name="Impôt foncier"/>
+ </account>
+ <account type="13" name="Intérêts">
+ <account type="13" name="Hypothèque"/>
+ </account>
+ <account type="13" name="Entretien de la résidence"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Actifs fixes">
+ <account type="9" name="Résidence"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CA/retraite.kmt b/kmymoney2/templates/fr_CA/retraite.kmt
new file mode 100644
index 0000000..8b69ddd
--- /dev/null
+++ b/kmymoney2/templates/fr_CA/retraite.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CA/acctchrt_retraite.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Retraite</title>
+ <shortdesc>Compte de placements pour votre retraite et autres comptes associés.</shortdesc>
+ <longdesc>Sélectionnez ce groupe de comptes si vous faites le suivi d'un compte de placements (actions, obligations, fonds communs et fonds d'indices boursiers) pour votre retraite.</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Placements">
+ <account type="9" name="Retraite">
+ <account type="9" name="Obligations"/>
+ <account type="9" name="Fonds d'indices boursiers"/>
+ <account type="9" name="Fonds commun"/>
+ <account type="9" name="Actions"/>
+ </account>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CA/revenus.kmt b/kmymoney2/templates/fr_CA/revenus.kmt
new file mode 100644
index 0000000..0d62ea2
--- /dev/null
+++ b/kmymoney2/templates/fr_CA/revenus.kmt
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CA/acctchrt_revenus.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Revenus d'emploi</title>
+ <shortdesc>Comptes pour le suivi des revenus d'emploi.</shortdesc>
+ <longdesc>Sélectionnez ce groupe de comptes si vous voulez faire le suivi de vos revenus et dépenses d'emploi.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Taxes et impôts">
+ <account type="13" name="Emploi">
+ <account type="13" name="RAMQ/Medicare"/>
+ <account type="13" name="Provincial"/>
+ <account type="13" name="RRQ/RPC"/>
+ <account type="13" name="Fédéral"/>
+ <account type="13" name="Assurance emploi"/>
+ </account>
+ </account>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Emploi">
+ <account type="12" name="Frais remboursés"/>
+ <account type="12" name="Commisssions"/>
+ <account type="12" name="Salaire"/>
+ <account type="12" name="Primes"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CH/Makefile.am b/kmymoney2/templates/fr_CH/Makefile.am
new file mode 100644
index 0000000..6676bdf
--- /dev/null
+++ b/kmymoney2/templates/fr_CH/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/fr_CH
+
+template_DATA = homeown.kmt fixedassets.kmt retiremt.kmt eduloan.kmt homeloan.kmt renter.kmt common.kmt spouseretire.kmt currency.kmt brokerage.kmt childcare.kmt cdmoneymkt.kmt carloan.kmt otherloan.kmt business.kmt spouseinc.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/fr_CH/brokerage.kmt b/kmymoney2/templates/fr_CH/brokerage.kmt
new file mode 100644
index 0000000..fc5331e
--- /dev/null
+++ b/kmymoney2/templates/fr_CH/brokerage.kmt
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CH/acctchrt_brokerage.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Comptes d'investissement</title>
+ <shortdesc>Compte de bourse/titres avec les comptes d'investissement apparentés (action, obligation, fond commun, fond d'indices, intérêt, dividende)</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous avez des investissements (action, obligation, fond commun, fond d'indices, intérêt, dividende).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Commissions"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Revenu de dividende"/>
+ <account type="12" name="Revenu d'intérêts">
+ <account type="12" name="Intérêts d'obligation"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Investissements">
+ <account type="7" name="Compte de bourse/titre"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CH/business.kmt b/kmymoney2/templates/fr_CH/business.kmt
new file mode 100644
index 0000000..cbd7ec5
--- /dev/null
+++ b/kmymoney2/templates/fr_CH/business.kmt
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CH/acctchrt_business.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Comptes d'affaires</title>
+ <shortdesc>Hiérarchie complète de comptes pour les affaires.</shortdesc>
+ <longdesc>Les utilisateurs gérant une entreprise sélectionneront ceci au lieu des autres choix. Ceci inclut tous les comptes dont vous avez besoin dans la plupart des activités, y compris les paiements différés, les rentrées et les sorties.</longdesc>
+ <accounts>
+ <account type="10" name="">
+ <account type="4" name="Carte de crédit"/>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="Gains enregistrés"/>
+ <account type="16" name="Soldes initiaux"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Location d'équipement"/>
+ <account type="13" name="Divers"/>
+ <account type="13" name="Réparations">
+ <account type="13" name="Réparations des équipements"/>
+ <account type="13" name="Réparations des immeubles"/>
+ <account type="13" name="Réparations des ordinateurs"/>
+ <account type="13" name="Dépenses d'entretien"/>
+ </account>
+ <account type="13" name="Poste et livraisons"/>
+ <account type="13" name="Formation"/>
+ <account type="13" name="Dépréciation"/>
+ <account type="13" name="Fournitures de bureau"/>
+ <account type="13" name="Charges professionelles">
+ <account type="13" name="Charges légales"/>
+ <account type="13" name="Comptabilité"/>
+ </account>
+ <account type="13" name="Impression et Reproduction"/>
+ <account type="13" name="Repas"/>
+ <account type="13" name="Cotisations et abonnements"/>
+ <account type="13" name="Licences et autorisations"/>
+ <account type="13" name="Remises"/>
+ <account type="13" name="Dépenses de personnel"/>
+ <account type="13" name="Services extérieurs"/>
+ <account type="13" name="Ajustement"/>
+ <account type="13" name="Voyages et divertissements">
+ <account type="13" name="Repas"/>
+ <account type="13" name="Voyages"/>
+ <account type="13" name="Divertissements"/>
+ </account>
+ <account type="13" name="Charité"/>
+ <account type="13" name="Auto">
+ <account type="13" name="Réparations et entretien"/>
+ <account type="13" name="Carburant"/>
+ <account type="13" name="Parking"/>
+ <account type="13" name="Frais"/>
+ </account>
+ <account type="13" name="Location"/>
+ <account type="13" name="Services">
+ <account type="13" name="Gaz"/>
+ <account type="13" name="Ordures ménagères"/>
+ <account type="13" name="Internet"/>
+ <account type="13" name="Téléphone portable"/>
+ <account type="13" name="Câble"/>
+ <account type="13" name="Électricité"/>
+ <account type="13" name="Eau"/>
+ <account type="13" name="Téléphone"/>
+ </account>
+ <account type="13" name="Assurance">
+ <account type="13" name="Assurance incapacité"/>
+ <account type="13" name="Personnel"/>
+ <account type="13" name="Assurance responsabilité"/>
+ </account>
+ <account type="13" name="Frais bancaires"/>
+ <account type="13" name="Taxes">
+ <account type="13" name="Federal"/>
+ <account type="13" name="FICA"/>
+ <account type="13" name="Immobilier"/>
+ <account type="13" name="Local"/>
+ <account type="13" name="Emp-FICA"/>
+ <account type="13" name="Autres Taxes"/>
+ <account type="13" name="État/Département"/>
+ <account type="13" name="URSSAF"/>
+ </account>
+ <account type="13" name="Livres"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Revenus d'intérêts"/>
+ <account type="12" name="Ventes"/>
+ <account type="12" name="Autres rentrées"/>
+ <account type="12" name="Dépenses remboursées"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Actifs actuels">
+ <account type="1" name="Compte d'épargne"/>
+ <account type="3" name="Liquidités"/>
+ <account type="1" name="Compte chèque"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CH/carloan.kmt b/kmymoney2/templates/fr_CH/carloan.kmt
new file mode 100644
index 0000000..0c90f7e
--- /dev/null
+++ b/kmymoney2/templates/fr_CH/carloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CH/acctchrt_carloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Emprunt automobile</title>
+ <shortdesc>Comptes d'emprunt automobile et des intérets associés</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous avez un emprunt automobile (emprunt automobile, intérêts d'emprunt automobile).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Intérêts">
+ <account type="13" name="Intérêts emprunt automobile"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Emprunts">
+ <account type="10" name="Emprunt automobile"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CH/cdmoneymkt.kmt b/kmymoney2/templates/fr_CH/cdmoneymkt.kmt
new file mode 100644
index 0000000..3675695
--- /dev/null
+++ b/kmymoney2/templates/fr_CH/cdmoneymkt.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CH/acctchrt_cdmoneymkt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>CD et marché monétaire</title>
+ <shortdesc>Comptes pour CD et investissements sur marché monétaire</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous avez des CDs ou comptes de marché monétaire(CD, intérêt CD, marché monétaire, intérêt du marché monétaire).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Revenu d'intérêts">
+ <account type="12" name="Intérêt CD"/>
+ <account type="12" name="Intérêt du marché monétaire"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Actifs actuels">
+ <account type="1" name="Marché monétaire"/>
+ <account type="1" name="CD bancaire"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CH/childcare.kmt b/kmymoney2/templates/fr_CH/childcare.kmt
new file mode 100644
index 0000000..e6dbce9
--- /dev/null
+++ b/kmymoney2/templates/fr_CH/childcare.kmt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CH/acctchrt_childcare.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Dépenses de garderie</title>
+ <shortdesc>Un compte de suivi des coûts de garderie d'enfants</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous avez des dépenses de garderie.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Garderie"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CH/common.kmt b/kmymoney2/templates/fr_CH/common.kmt
new file mode 100644
index 0000000..f5c90fa
--- /dev/null
+++ b/kmymoney2/templates/fr_CH/common.kmt
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CH/acctchrt_common.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Comptes communs</title>
+ <shortdesc>Un ensemble de base de comptes les plus habituellement utilisés</shortdesc>
+ <longdesc>La plupart des utilisateurs devront sélectionner cet ensemble de comptes. Il comprend la plupart des comptes communément utilisés (courant, épargne, liquidités carte de crédit, revenu, dépenses habituelles).</longdesc>
+ <accounts>
+ <account type="16" name="">
+ <account type="16" name="Soldes initiaux"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Actifs actuels">
+ <account type="1" name="Compte courant"/>
+ <account type="3" name="Argent du porte-monnaie"/>
+ <account type="1" name="Compte d'épargne"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Restaurant"/>
+ <account type="13" name="Transports publics"/>
+ <account type="13" name="Education"/>
+ <account type="13" name="Utilitaires">
+ <account type="13" name="Gaz"/>
+ <account type="13" name="Collecte d'ordures"/>
+ <account type="13" name="Eau"/>
+ <account type="13" name="Electricité"/>
+ </account>
+ <account type="13" name="Abonnements"/>
+ <account type="13" name="Téléphone"/>
+ <account type="13" name="Services en ligne"/>
+ <account type="13" name="Alimentaire"/>
+ <account type="13" name="Loisirs">
+ <account type="13" name="Voyage"/>
+ <account type="13" name="Divertissements"/>
+ <account type="13" name="Musique/Films"/>
+ </account>
+ <account type="13" name="Livres"/>
+ <account type="13" name="Dons/Cadeaux"/>
+ <account type="13" name="Dépenses médicales"/>
+ <account type="13" name="Charité"/>
+ <account type="13" name="Auto">
+ <account type="13" name="Carburant"/>
+ <account type="13" name="Maintenance et réparation"/>
+ <account type="13" name="Stationnement"/>
+ <account type="13" name="Frais"/>
+ </account>
+ <account type="13" name="Frais de service bancaire"/>
+ <account type="13" name="Vêtements"/>
+ <account type="13" name="Fournisseurs"/>
+ <account type="13" name="Assurances">
+ <account type="13" name="Assurance automobile"/>
+ <account type="13" name="Assurance vie"/>
+ <account type="13" name="Assurance santé"/>
+ </account>
+ <account type="13" name="Ajustement"/>
+ <account type="13" name="Taxes">
+ <account type="13" name="Etat/Province"/>
+ <account type="13" name="Assurance de base"/>
+ <account type="13" name="Impôts"/>
+ <account type="13" name="Complémentaire maladie"/>
+ <account type="13" name="Autres taxes"/>
+ </account>
+ <account type="13" name="Informatique"/>
+ <account type="13" name="Laverie/Pressing"/>
+ <account type="13" name="Divers"/>
+ <account type="13" name="Télévision"/>
+ <account type="13" name="Passe-temps"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Bonus"/>
+ <account type="12" name="Autre revenu"/>
+ <account type="12" name="Dons reçus"/>
+ <account type="12" name="Salaire"/>
+ <account type="12" name="Revenu d'intérêts">
+ <account type="12" name="Intérets du compte courant"/>
+ <account type="12" name="Autres intérêts"/>
+ <account type="12" name="Intérêts d'épargne"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Comptes de dettes">
+ <account type="4" name="Carte de crédit"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CH/currency.kmt b/kmymoney2/templates/fr_CH/currency.kmt
new file mode 100644
index 0000000..97ddbda
--- /dev/null
+++ b/kmymoney2/templates/fr_CH/currency.kmt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CH/acctchrt_currency.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Compte de commerce de devises/monnaies</title>
+ <shortdesc>Compte pour le commerce et la conversion d'une monnaie étrangère</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous convertissez des monnaies étrangères. Note: compte actuellement en DEM; editer le compte pour changer la monnaie.</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Investissements"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CH/eduloan.kmt b/kmymoney2/templates/fr_CH/eduloan.kmt
new file mode 100644
index 0000000..382e5ea
--- /dev/null
+++ b/kmymoney2/templates/fr_CH/eduloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CH/acctchrt_eduloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Emprunt Etudiant</title>
+ <shortdesc>Comptes pour pour les emprunts étudiants et les intérêts associés.</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous avez un emprunt étudiant (emprunt étudiant, intérêts d'emprunt étudiant).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Intérêts">
+ <account type="13" name="Intérêts d'emprunt étudiant"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Emprunts">
+ <account type="10" name="emprunt étudiant"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CH/fixedassets.kmt b/kmymoney2/templates/fr_CH/fixedassets.kmt
new file mode 100644
index 0000000..79ca4f6
--- /dev/null
+++ b/kmymoney2/templates/fr_CH/fixedassets.kmt
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CH/acctchrt_fixedassets.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Actifs fixes</title>
+ <shortdesc>Comptes pour le suivi d'actifs fixes importants</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous avez des actifs fixes importants (maison, véhicule, résidence secondaire, autres actifs).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Actifs fixes">
+ <account type="9" name="véhicule"/>
+ <account type="9" name="Autre actif"/>
+ <account type="9" name="Maison"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CH/homeloan.kmt b/kmymoney2/templates/fr_CH/homeloan.kmt
new file mode 100644
index 0000000..85d5816
--- /dev/null
+++ b/kmymoney2/templates/fr_CH/homeloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CH/acctchrt_homeloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Hypothèque d'emprunt immobilier</title>
+ <shortdesc>Comptes pour emprunt immobilier et les intérets associés.</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous avez un emprunt immobilier(Hypothèque d'un emprunt, Hypothèque sur des intérêts).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Intérêts">
+ <account type="13" name="Hypothèque d'intérêts"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Emprunts">
+ <account type="10" name="Hypothèque d'emprunt"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CH/homeown.kmt b/kmymoney2/templates/fr_CH/homeown.kmt
new file mode 100644
index 0000000..25ac283
--- /dev/null
+++ b/kmymoney2/templates/fr_CH/homeown.kmt
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CH/acctchrt_homeown.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Dépenses de propriétaire immobilier</title>
+ <shortdesc>Dépenses associés avec la possesion d'un logement</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous avez un logement. Cet ensemble fournit un groupe de comptes pour suivre les dépenses du logement (assurance, taxes, entretien du logement).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Assurances">
+ <account type="13" name="Assurance habitation"/>
+ </account>
+ <account type="13" name="Taxes">
+ <account type="13" name="Taxe d'habitation"/>
+ </account>
+ <account type="13" name="Entretien logement"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CH/otherloan.kmt b/kmymoney2/templates/fr_CH/otherloan.kmt
new file mode 100644
index 0000000..d245c73
--- /dev/null
+++ b/kmymoney2/templates/fr_CH/otherloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CH/acctchrt_otherloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Autres emprunts</title>
+ <shortdesc>Comptes pour le suivi d'autres emprunts et de leurs intérêts associés</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous avez quelque chose d'autre qu'un emprunt immobilier (autre emprunt, autres intérêts d'emprunt).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Intérêts">
+ <account type="13" name="Autres intérets"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Emprunts">
+ <account type="10" name="Autre emprunt"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CH/renter.kmt b/kmymoney2/templates/fr_CH/renter.kmt
new file mode 100644
index 0000000..41896a9
--- /dev/null
+++ b/kmymoney2/templates/fr_CH/renter.kmt
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CH/acctchrt_renter.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Dépenses de location</title>
+ <shortdesc>Dépenses associées avec la location d'un logement</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous louez une maison ou un appartement (location, assurance du locataire).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Location"/>
+ <account type="13" name="Assurances">
+ <account type="13" name="Assurance locative"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CH/retiremt.kmt b/kmymoney2/templates/fr_CH/retiremt.kmt
new file mode 100644
index 0000000..7a0d082
--- /dev/null
+++ b/kmymoney2/templates/fr_CH/retiremt.kmt
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CH/acctchrt_retiremt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Comptes d'épargne retraite</title>
+ <shortdesc>Compte d'épargne retraite avec ses sous-comptes d'investissements relatifs</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous avez des comptes d'épargne retraite (actions, obligations, fonds communs, fonds d'indices).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Investissements">
+ <account type="7" name="Retraite"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CH/spouseinc.kmt b/kmymoney2/templates/fr_CH/spouseinc.kmt
new file mode 100644
index 0000000..d0b7318
--- /dev/null
+++ b/kmymoney2/templates/fr_CH/spouseinc.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CH/acctchrt_spouseinc.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Revenus de l'épouse</title>
+ <shortdesc>Comptes pour le suivi des revenus de l'épouse séparément</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous avez une épouse travaillant (salaire (épouse), impôts (épouse)).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Salaire (épouse)"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Taxes (épouse)">
+ <account type="13" name="Sécurité sociale"/>
+ <account type="13" name="Complémentaire maladie"/>
+ <account type="13" name="Etat/Province"/>
+ <account type="13" name="Impôts"/>
+ <account type="13" name="Autres taxes"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_CH/spouseretire.kmt b/kmymoney2/templates/fr_CH/spouseretire.kmt
new file mode 100644
index 0000000..afe7db7
--- /dev/null
+++ b/kmymoney2/templates/fr_CH/spouseretire.kmt
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_CH/acctchrt_spouseretire.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Comptes d'épargne retraite de l'épouse</title>
+ <shortdesc>Compte d'épargne retraite avec ses sous-comptes d'investissements relatifs de l'épouse</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous avez des comptes d'épargne retraite de l'épouse(actions, obligations, fonds communs, fonds d'indices, intérêts, dividendes).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Investissements">
+ <account type="7" name="Retraite de l'épouse"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_FR/Makefile.am b/kmymoney2/templates/fr_FR/Makefile.am
new file mode 100644
index 0000000..b320632
--- /dev/null
+++ b/kmymoney2/templates/fr_FR/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/fr_FR
+
+template_DATA = homeown.kmt comptes_par_default.kmt fixedassets.kmt retiremt.kmt eduloan.kmt homeloan.kmt renter.kmt common.kmt spouseretire.kmt currency.kmt brokerage.kmt childcare.kmt cdmoneymkt.kmt carloan.kmt otherloan.kmt business.kmt spouseinc.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/fr_FR/brokerage.kmt b/kmymoney2/templates/fr_FR/brokerage.kmt
new file mode 100644
index 0000000..91700fc
--- /dev/null
+++ b/kmymoney2/templates/fr_FR/brokerage.kmt
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_FR/acctchrt_brokerage.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Comptes d'investissement</title>
+ <shortdesc>Compte de bourse/titres avec les comptes d'investissement apparentés (action, obligation, fond commun, fond d'indices, intérêt, dividende)</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous avez des investissements (action, obligation, fond commun, fond d'indices, intérêt, dividende).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Commissions"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Revenu de dividende"/>
+ <account type="12" name="Revenu d'intérêts">
+ <account type="12" name="Intérêts d'obligation"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Investissements">
+ <account type="7" name="Compte de bourse/titre"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_FR/business.kmt b/kmymoney2/templates/fr_FR/business.kmt
new file mode 100644
index 0000000..87537ba
--- /dev/null
+++ b/kmymoney2/templates/fr_FR/business.kmt
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_FR/acctchrt_business.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Comptes d'affaires</title>
+ <shortdesc>Hiérarchie complète de comptes pour les affaires.</shortdesc>
+ <longdesc>Les utilisateurs gérant une entreprise sélectionneront ceci au lieu des autres choix. Ceci inclut tous les comptes dont vous avez besoin dans la plupart des activités, y compris les paiements différés, les rentrées et les sorties.</longdesc>
+ <accounts>
+ <account type="10" name="">
+ <account type="4" name="Carte de crédit"/>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="Gains enregistrés"/>
+ <account type="16" name="Soldes initiaux"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Location d'équipement"/>
+ <account type="13" name="Divers"/>
+ <account type="13" name="Réparations">
+ <account type="13" name="Réparations des équipements"/>
+ <account type="13" name="Réparations des immeubles"/>
+ <account type="13" name="Réparations des ordinateurs"/>
+ <account type="13" name="Dépenses d'entretien"/>
+ </account>
+ <account type="13" name="Poste et livraisons"/>
+ <account type="13" name="Formation"/>
+ <account type="13" name="Dépréciation"/>
+ <account type="13" name="Fournitures de bureau"/>
+ <account type="13" name="Charges professionelles">
+ <account type="13" name="Charges légales"/>
+ <account type="13" name="Comptabilité"/>
+ </account>
+ <account type="13" name="Impression et Reproduction"/>
+ <account type="13" name="Repas"/>
+ <account type="13" name="Cotisations et abonnements"/>
+ <account type="13" name="Licences et autorisations"/>
+ <account type="13" name="Remises"/>
+ <account type="13" name="Dépenses de personnel"/>
+ <account type="13" name="Services extérieurs"/>
+ <account type="13" name="Ajustement"/>
+ <account type="13" name="Voyages et divertissements">
+ <account type="13" name="Repas"/>
+ <account type="13" name="Voyages"/>
+ <account type="13" name="Divertissements"/>
+ </account>
+ <account type="13" name="Charité"/>
+ <account type="13" name="Auto">
+ <account type="13" name="Réparations et entretien"/>
+ <account type="13" name="Carburant"/>
+ <account type="13" name="Parking"/>
+ <account type="13" name="Frais"/>
+ </account>
+ <account type="13" name="Location"/>
+ <account type="13" name="Services">
+ <account type="13" name="Gaz"/>
+ <account type="13" name="Ordures ménagères"/>
+ <account type="13" name="Internet"/>
+ <account type="13" name="Téléphone portable"/>
+ <account type="13" name="Câble"/>
+ <account type="13" name="Électricité"/>
+ <account type="13" name="Eau"/>
+ <account type="13" name="Téléphone"/>
+ </account>
+ <account type="13" name="Assurance">
+ <account type="13" name="Assurance incapacité"/>
+ <account type="13" name="Personnel"/>
+ <account type="13" name="Assurance responsabilité"/>
+ </account>
+ <account type="13" name="Frais bancaires"/>
+ <account type="13" name="Taxes">
+ <account type="13" name="Federal"/>
+ <account type="13" name="FICA"/>
+ <account type="13" name="Immobilier"/>
+ <account type="13" name="Local"/>
+ <account type="13" name="Emp-FICA"/>
+ <account type="13" name="Autres Taxes"/>
+ <account type="13" name="État/Département"/>
+ <account type="13" name="URSSAF"/>
+ </account>
+ <account type="13" name="Livres"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Revenus d'intérêts"/>
+ <account type="12" name="Ventes"/>
+ <account type="12" name="Autres rentrées"/>
+ <account type="12" name="Dépenses remboursées"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Actifs actuels">
+ <account type="1" name="Compte d'épargne"/>
+ <account type="3" name="Liquidités"/>
+ <account type="1" name="Compte chèque"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_FR/carloan.kmt b/kmymoney2/templates/fr_FR/carloan.kmt
new file mode 100644
index 0000000..5f89bad
--- /dev/null
+++ b/kmymoney2/templates/fr_FR/carloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_FR/acctchrt_carloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Emprunt automobile</title>
+ <shortdesc>Comptes d'emprunt automobile et des intérets associés</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous avez un emprunt automobile (emprunt automobile, intérêts d'emprunt automobile).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Intérêts">
+ <account type="13" name="Intérêts emprunt automobile"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Emprunts">
+ <account type="10" name="Emprunt automobile"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_FR/cdmoneymkt.kmt b/kmymoney2/templates/fr_FR/cdmoneymkt.kmt
new file mode 100644
index 0000000..ed8d459
--- /dev/null
+++ b/kmymoney2/templates/fr_FR/cdmoneymkt.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_FR/acctchrt_cdmoneymkt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>CD et marché monétaire</title>
+ <shortdesc>Comptes pour CD et investissements sur marché monétaire</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous avez des CDs ou comptes de marché monétaire(CD, intérêt CD, marché monétaire, intérêt du marché monétaire).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Revenu d'intérêts">
+ <account type="12" name="Intérêt CD"/>
+ <account type="12" name="Intérêt du marché monétaire"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Actifs actuels">
+ <account type="1" name="Marché monétaire"/>
+ <account type="1" name="CD bancaire"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_FR/childcare.kmt b/kmymoney2/templates/fr_FR/childcare.kmt
new file mode 100644
index 0000000..c6c03d6
--- /dev/null
+++ b/kmymoney2/templates/fr_FR/childcare.kmt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_FR/acctchrt_childcare.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Dépenses de garderie</title>
+ <shortdesc>Un compte de suivi des coûts de garderie d'enfants</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous avez des dépenses de garderie.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Garderie"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_FR/common.kmt b/kmymoney2/templates/fr_FR/common.kmt
new file mode 100644
index 0000000..ff43989
--- /dev/null
+++ b/kmymoney2/templates/fr_FR/common.kmt
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_FR/acctchrt_common.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Comptes communs</title>
+ <shortdesc>Un ensemble de base de comptes les plus habituellement utilisés</shortdesc>
+ <longdesc>La plupart des utilisateurs devront sélectionner cet ensemble de comptes. Il comprend la plupart des comptes communément utilisés (chèques, épargne, liquidités carte de crédit, revenu, dépenses habituelles).</longdesc>
+ <accounts>
+ <account type="16" name="">
+ <account type="16" name="Soldes initiaux"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Actifs actuels">
+ <account type="1" name="Compte chèques"/>
+ <account type="3" name="Argent du porte-monnaie"/>
+ <account type="1" name="Compte d'épargne"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Restaurant"/>
+ <account type="13" name="Transports publics"/>
+ <account type="13" name="Education"/>
+ <account type="13" name="Utilitaires">
+ <account type="13" name="Gaz"/>
+ <account type="13" name="Collecte d'ordures"/>
+ <account type="13" name="Eau"/>
+ <account type="13" name="Electricité"/>
+ </account>
+ <account type="13" name="Abonnements"/>
+ <account type="13" name="Téléphone"/>
+ <account type="13" name="Services en ligne"/>
+ <account type="13" name="Alimentaire"/>
+ <account type="13" name="Loisirs">
+ <account type="13" name="Voyage"/>
+ <account type="13" name="Divertissements"/>
+ <account type="13" name="Musique/Films"/>
+ </account>
+ <account type="13" name="Livres"/>
+ <account type="13" name="Dons/Cadeaux"/>
+ <account type="13" name="Dépenses médicales"/>
+ <account type="13" name="Charité"/>
+ <account type="13" name="Auto">
+ <account type="13" name="Carburant"/>
+ <account type="13" name="Maintenance et réparation"/>
+ <account type="13" name="Stationnement"/>
+ <account type="13" name="Frais"/>
+ </account>
+ <account type="13" name="Frais de service bancaire"/>
+ <account type="13" name="Vêtements"/>
+ <account type="13" name="Fournisseurs"/>
+ <account type="13" name="Assurances">
+ <account type="13" name="Assurance automobile"/>
+ <account type="13" name="Assurance vie"/>
+ <account type="13" name="Assurance santé"/>
+ </account>
+ <account type="13" name="Ajustement"/>
+ <account type="13" name="Taxes">
+ <account type="13" name="Etat/Province"/>
+ <account type="13" name="Sécurité sociale"/>
+ <account type="13" name="Impôts"/>
+ <account type="13" name="Complémentaire maladie"/>
+ <account type="13" name="Autres taxes"/>
+ </account>
+ <account type="13" name="Informatique"/>
+ <account type="13" name="Laverie/Pressing"/>
+ <account type="13" name="Divers"/>
+ <account type="13" name="Cable"/>
+ <account type="13" name="Passe-temps"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Bonus"/>
+ <account type="12" name="Autre revenu"/>
+ <account type="12" name="Dons reçus"/>
+ <account type="12" name="Salaire"/>
+ <account type="12" name="Revenu d'intérêts">
+ <account type="12" name="Intérets du compte chèque"/>
+ <account type="12" name="Autres intérêts"/>
+ <account type="12" name="Intérêts d'épargne"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Comptes de dettes">
+ <account type="4" name="Carte de crédit"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_FR/comptes_par_default.kmt b/kmymoney2/templates/fr_FR/comptes_par_default.kmt
new file mode 100644
index 0000000..b3b66bb
--- /dev/null
+++ b/kmymoney2/templates/fr_FR/comptes_par_default.kmt
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>KMyMoney 0.8 default</title>
+ <shortdesc></shortdesc>
+ <longdesc></longdesc>
+ <accounts>
+ <account name="" type="13">
+ <account name="Alimentation" type="13">
+ <account name="Restaurant" type="13"/>
+ <account name="Epicerie" type="13"/>
+ <account name="Supermarché" type="13"/>
+ <account name="Cantine" type="13"/>
+ </account>
+ <account name="Animaux" type="13">
+ <account name="Alimentation" type="13"/>
+ <account name="Fournitures" type="13"/>
+ <account name="Vétérinaire" type="13"/>
+ <account name="Toilettage" type="13"/>
+ </account>
+ <account name="Assurance" type="13">
+ <account name="Automobile" type="13"/>
+ <account name="Habitation" type="13"/>
+ <account name="Responsabilité civile" type="13"/>
+ <account name="Santé" type="13"/>
+ <account name="Vie" type="13"/>
+ </account>
+ <account name="Automobile" type="13">
+ <account name="Achat" type="13"/>
+ <account name="Amendes" type="13"/>
+ <account name="Assurance" type="13"/>
+ <account name="Carburant" type="13"/>
+ <account name="Contrôle technique" type="13"/>
+ <account name="Péage" type="13"/>
+ <account name="Réparations" type="13"/>
+ <account name="Stationnement" type="13"/>
+ </account>
+ <account name="Dépenses professionelles" type="13">
+ <account name="Non-remboursées" type="13"/>
+ <account name="Remboursées" type="13"/>
+ </account>
+ <account name="Dons" type="13">
+ <account name="Cadeaux" type="13"/>
+ <account name="Donations" type="13"/>
+ <account name="Caritatif" type="13"/>
+ </account>
+ <account name="Education" type="13">
+ <account name="Frais scolaires" type="13"/>
+ <account name="Leçons" type="13"/>
+ <account name="Fournitures" type="13"/>
+ </account>
+ <account name="Enfants" type="13">
+ <account name="Crêche et nourrice" type="13"/>
+ </account>
+ <account name="Frais bancaires" type="13">
+ <account name="Intérêts" type="13"/>
+ <account name="Services bancaires" type="13"/>
+ <account name="Pénalités bancaires" type="13"/>
+ </account>
+ <account name="Frais généraux" type="13">
+ <account name="Charges de loyer" type="13"/>
+ <account name="Chauffage" type="13"/>
+ <account name="Eau" type="13"/>
+ <account name="Electricité" type="13"/>
+ <account name="Gaz" type="13"/>
+ <account name="Internet" type="13"/>
+ <account name="Loyer" type="13"/>
+ <account name="Rembousement de prêt" type="13"/>
+ <account name="Téléphone" type="13"/>
+ <account name="Téléphone portable" type="13"/>
+ <account name="Câble et satellite" type="13"/>
+ </account>
+ <account name="Soins" type="13">
+ <account name="Coiffeur" type="13"/>
+ <account name="Esthétique" type="13"/>
+ <account name="Habillement" type="13"/>
+ </account>
+ <account name="Loisirs" type="13">
+ <account name="Billard" type="13"/>
+ <account name="Bowling" type="13"/>
+ <account name="Cassettes et CDs" type="13"/>
+ <account name="Cinéma" type="13"/>
+ <account name="Discothèque" type="13"/>
+ <account name="Divertissement" type="13"/>
+ <account name="Equipements sportifs" type="13"/>
+ <account name="Informatique" type="13"/>
+ <account name="Jeux et jouets" type="13"/>
+ <account name="Livres et Magazines" type="13"/>
+ <account name="Musées et expositions" type="13"/>
+ <account name="Parc d'attraction" type="13"/>
+ <account name="Spectacles" type="13"/>
+ <account name="Sport" type="13"/>
+ <account name="Vidéo" type="13"/>
+ </account>
+ <account name="Maison" type="13">
+ <account name="Ameublement" type="13"/>
+ <account name="Entretien" type="13"/>
+ <account name="Equipement" type="13"/>
+ <account name="Jardinage" type="13"/>
+ <account name="Personnel de maison" type="13"/>
+ <account name="Travaux" type="13"/>
+ </account>
+ <account name="Prêt" type="13">
+ <account name="Intérêts de prêt" type="13"/>
+ <account name="Amortissement de prêt" type="13"/>
+ <account name="Remboursement anticipé de prêt" type="13"/>
+ <account name="Frais de remboursement anticipé" type="13"/>
+ <account name="Assurance" type="13"/>
+ <account name="Frais de dossier" type="13"/>
+ </account>
+ <account name="Retrait d'espèces" type="13"/>
+ <account name="Santé" type="13">
+ <account name="Dentiste" type="13"/>
+ <account name="Hôpital" type="13"/>
+ <account name="Médecin généraliste" type="13"/>
+ <account name="Médecin spécialiste" type="13"/>
+ <account name="Opticien" type="13"/>
+ <account name="Pharmacie" type="13"/>
+ </account>
+ <account name="Taxes et impôts" type="13">
+ <account name="Autres taxes" type="13"/>
+ <account name="Intérêts de retard" type="13"/>
+ <account name="Impôts sur le revenu" type="13"/>
+ <account name="Redevance télévisuelle" type="13"/>
+ <account name="Taxe foncière" type="13"/>
+ <account name="Taxe d'habitation" type="13"/>
+ <account name="ISF" type="13"/>
+ </account>
+ <account name="Transport" type="13">
+ <account name="Train" type="13"/>
+ <account name="Transports en commun" type="13"/>
+ </account>
+ <account name="Vacances" type="13">
+ <account name="Logement" type="13"/>
+ <account name="Frais divers" type="13"/>
+ <account name="Voyage" type="13"/>
+ </account>
+ <account name="Retenues sur salaire" type="13">
+ <account name="Véhicule de fonction" type="13"/>
+ <account name="Chèques déjeuner" type="13"/>
+ <account name="Autres avantages en nature" type="13"/>
+ <account name="Remboursement d'acompte" type="13"/>
+ <account name="Remboursement d'avance" type="13"/>
+ <account name="Saisie Opposition" type="13"/>
+ </account>
+ <account name="Autres dépenses" type="13">
+ <account name="Cadeaux" type="13"/>
+ </account>
+ </account>
+ <account name="" type="12">
+ <account name="Revenus du travail" type="12">
+ <account name="Salaire brut" type="12"/>
+ <account name="Salaire net" type="12"/>
+ <account name="Commissions" type="12"/>
+ <account name="Prime" type="12"/>
+ <account name="Avance sur paie" type="12"/>
+ <account name="Acompte sur paie" type="12"/>
+ <account name="Heures supplémentaires" type="12"/>
+ <account name="Participation aux bénéfices" type="12"/>
+ <account name="Participation aux résultats" type="12"/>
+ <account name="Plus-values de Stock-Options" type="12"/>
+ <account name="Remboursements de frais professionnels" type="12"/>
+ </account>
+ <account name="Rentes et pensions" type="12">
+ <account name="Retraite du régime général" type="12"/>
+ <account name="Retraite complémentaire" type="12"/>
+ <account name="Rentes viagères" type="12"/>
+ <account name="Rentes temporaires" type="12"/>
+ </account>
+ <account name="Allocations et Sécurité sociale" type="12">
+ <account name="Remboursement de frais de santé" type="12"/>
+ <account name="Allocations familiales" type="12"/>
+ <account name="ASSEDICs" type="12"/>
+ <account name="Indemnités Journalières" type="12"/>
+ <account name="Veuvage" type="12"/>
+ <account name="Invalidité" type="12"/>
+ <account name="Bourses d'étude" type="12"/>
+ <account name="Allocations de logement" type="12"/>
+ <account name="Prêts d'honneur" type="12"/>
+ </account>
+ <account name="Revenus d'investissement" type="12">
+ <account name="Plus-values Boursières" type="12"/>
+ <account name="Intérêts de livret A et Bleu" type="12"/>
+ <account name="Intérêts de livret B" type="12"/>
+ <account name="Intérêts de CoDevI" type="12"/>
+ <account name="Intérêts de LEP" type="12"/>
+ <account name="Intérêts de livrets bancaires" type="12"/>
+ <account name="Coupon" type="12"/>
+ <account name="Dividende" type="12"/>
+ <account name="Prime d'Etat sur Epargne Logement" type="12"/>
+ </account>
+ <account name="Autres revenus" type="12">
+ <account name="Cadeaux recus" type="12"/>
+ <account name="Déblocage de prêt" type="12"/>
+ <account name="Gains aux jeux" type="12"/>
+ <account name="Crédits d'impôts" type="12"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_FR/currency.kmt b/kmymoney2/templates/fr_FR/currency.kmt
new file mode 100644
index 0000000..57c3ea6
--- /dev/null
+++ b/kmymoney2/templates/fr_FR/currency.kmt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_FR/acctchrt_currency.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Compte de commerce de devises/monnaies</title>
+ <shortdesc>Compte pour le commerce et la conversion d'une monnaie étrangère</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous convertissez des monnaies étrangères. Note: compte actuellement en DEM; editer le compte pour changer la monnaie.</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Investissements"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_FR/eduloan.kmt b/kmymoney2/templates/fr_FR/eduloan.kmt
new file mode 100644
index 0000000..369cc81
--- /dev/null
+++ b/kmymoney2/templates/fr_FR/eduloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_FR/acctchrt_eduloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Emprunt Etudiant</title>
+ <shortdesc>Comptes pour pour les emprunts étudiants et les intérêts associés.</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous avez un emprunt étudiant (emprunt étudiant, intérêts d'emprunt étudiant).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Intérêts">
+ <account type="13" name="Intérêts d'emprunt étudiant"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Emprunts">
+ <account type="10" name="emprunt étudiant"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_FR/fixedassets.kmt b/kmymoney2/templates/fr_FR/fixedassets.kmt
new file mode 100644
index 0000000..cfa5e78
--- /dev/null
+++ b/kmymoney2/templates/fr_FR/fixedassets.kmt
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_FR/acctchrt_fixedassets.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Actifs fixes</title>
+ <shortdesc>Comptes pour le suivi d'actifs fixes importants</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous avez des actifs fixes importants (maison, véhicule, résidence secondaire, autres actifs).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Actifs fixes">
+ <account type="9" name="véhicule"/>
+ <account type="9" name="Autre actif"/>
+ <account type="9" name="Maison"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_FR/homeloan.kmt b/kmymoney2/templates/fr_FR/homeloan.kmt
new file mode 100644
index 0000000..7c5fbc3
--- /dev/null
+++ b/kmymoney2/templates/fr_FR/homeloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_FR/acctchrt_homeloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Hypothèque d'emprunt immobilier</title>
+ <shortdesc>Comptes pour emprunt immobilier et les intérets associés.</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous avez un emprunt immobilier(Hypothèque d'un emprunt, Hypothèque sur des intérêts).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Intérêts">
+ <account type="13" name="Hypothèque d'intérêts"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Emprunts">
+ <account type="10" name="Hypothèque d'emprunt"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_FR/homeown.kmt b/kmymoney2/templates/fr_FR/homeown.kmt
new file mode 100644
index 0000000..0cd1fc9
--- /dev/null
+++ b/kmymoney2/templates/fr_FR/homeown.kmt
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_FR/acctchrt_homeown.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Dépenses de propriétaire immobilier</title>
+ <shortdesc>Dépenses associés avec la possesion d'un logement</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous avez un logement. Cet ensemble fournit un groupe de comptes pour suivre les dépenses du logement (assurance, taxes, entretien du logement).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Assurances">
+ <account type="13" name="Assurance habitation"/>
+ </account>
+ <account type="13" name="Taxes">
+ <account type="13" name="Taxe d'habitation"/>
+ </account>
+ <account type="13" name="Entretien logement"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_FR/otherloan.kmt b/kmymoney2/templates/fr_FR/otherloan.kmt
new file mode 100644
index 0000000..bea8f36
--- /dev/null
+++ b/kmymoney2/templates/fr_FR/otherloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_FR/acctchrt_otherloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Autres emprunts</title>
+ <shortdesc>Comptes pour le suivi d'autres emprunts et de leurs intérêts associés</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous avez quelque chose d'autre qu'un emprunt immobilier (autre emprunt, autres intérêts d'emprunt).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Intérêts">
+ <account type="13" name="Autres intérets"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Emprunts">
+ <account type="10" name="Autre emprunt"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_FR/renter.kmt b/kmymoney2/templates/fr_FR/renter.kmt
new file mode 100644
index 0000000..b5c338f
--- /dev/null
+++ b/kmymoney2/templates/fr_FR/renter.kmt
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_FR/acctchrt_renter.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Dépenses de location</title>
+ <shortdesc>Dépenses associées avec la location d'un logement</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous louez une maison ou un appartement (location, assurance du locataire).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Location"/>
+ <account type="13" name="Assurances">
+ <account type="13" name="Assurance locative"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_FR/retiremt.kmt b/kmymoney2/templates/fr_FR/retiremt.kmt
new file mode 100644
index 0000000..d3786a8
--- /dev/null
+++ b/kmymoney2/templates/fr_FR/retiremt.kmt
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_FR/acctchrt_retiremt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Comptes d'épargne retraite</title>
+ <shortdesc>Compte d'épargne retraite avec ses sous-comptes d'investissements relatifs</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous avez des comptes d'épargne retraite (actions, obligations, fonds communs, fonds d'indices).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Investissements">
+ <account type="7" name="Retraite"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_FR/spouseinc.kmt b/kmymoney2/templates/fr_FR/spouseinc.kmt
new file mode 100644
index 0000000..85247e3
--- /dev/null
+++ b/kmymoney2/templates/fr_FR/spouseinc.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_FR/acctchrt_spouseinc.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Revenus de l'épouse</title>
+ <shortdesc>Comptes pour le suivi des revenus de l'épouse séparément</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous avez une épouse travaillant (salaire (épouse), impôts (épouse)).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Salaire (épouse)"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Taxes (épouse)">
+ <account type="13" name="Sécurité sociale"/>
+ <account type="13" name="Complémentaire maladie"/>
+ <account type="13" name="Etat/Province"/>
+ <account type="13" name="Impôts"/>
+ <account type="13" name="Autres taxes"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/fr_FR/spouseretire.kmt b/kmymoney2/templates/fr_FR/spouseretire.kmt
new file mode 100644
index 0000000..53e9eca
--- /dev/null
+++ b/kmymoney2/templates/fr_FR/spouseretire.kmt
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/fr_FR/acctchrt_spouseretire.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Comptes d'épargne retraite de l'épouse</title>
+ <shortdesc>Compte d'épargne retraite avec ses sous-comptes d'investissements relatifs de l'épouse</shortdesc>
+ <longdesc>Vous devriez sélectionner cet ensemble de comptes si vous avez des comptes d'épargne retraite de l'épouse(actions, obligations, fonds communs, fonds d'indices, intérêts, dividendes).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Investissements">
+ <account type="7" name="Retraite de l'épouse"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/gl_ES/Makefile.am b/kmymoney2/templates/gl_ES/Makefile.am
new file mode 100644
index 0000000..74c4db6
--- /dev/null
+++ b/kmymoney2/templates/gl_ES/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/gl_ES
+
+template_DATA = default_accounts.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/gl_ES/default_accounts.kmt b/kmymoney2/templates/gl_ES/default_accounts.kmt
new file mode 100644
index 0000000..80432f4
--- /dev/null
+++ b/kmymoney2/templates/gl_ES/default_accounts.kmt
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Contas de uso xeral</title>
+ <shortdesc>Contas de ingresos, gastos, e activos de exemplo</shortdesc>
+ <longdesc>As contas de gasto definidas neste modelo seguen a estrutura das empregadas a nível europeu desde 1998 para definir o índice harmonizado de prezos no consumidor, as de ingresos son un subconxunto das que o autor deste ficheiro usou con maior frecuencia, ao igual que as de activos. Non se inclúe nengún pasivo. Para máis información acerca das categorías de gasto consulte: http://eur-lex.europa.eu/LexUriServ/site/pt/oj/1998/l_214/l_21419980731pt00120022.pdf</longdesc>
+ <accounts>
+ <account name="" type="13">
+ <account name="Alimentos e bebidas non alcohólicas" type="13" description="">
+ <account name="Alimentos" type="13"/>
+ <account name="Bebidas non alcohólicas" type="13"/>
+ </account>
+ <account name="Bebidas alcohólicas, tabaco e estupefacientes" type="13">
+ <account name="Bebidas alcohólicas" type="13"/>
+ <account name="Tabaco" type="13"/>
+ <account name="Estupefacientes" type="13"/>
+ </account>
+ <account name="Roupa e calzado" type="13">
+ <account name="Roupa" type="13"/>
+ <account name="Calzado" type="13"/>
+ </account>
+ <account name="Aloxamento, auga, electricidade, gas e outros combustíbeis" type="13">
+ <account name="Alugueres efectivos da vivenda" type="13"/>
+ <account name="Alugueres imputados da vivenda" type="13"/>
+ <account name="Conservación e reparación da vivenda" type="13"/>
+ <account name="Subministración de auga, e servizos diversos" type="13"/>
+ <account name="Electricidade, gas e outros combustíbeis" type="13"/>
+ </account>
+ <account name="Móbeis, cousas do lar e mantimento da casa" type="13">
+ <account name="Móbeis e acesorios, alfombras e outros materiais para pisos" type="13"/>
+ <account name="Produtos textís para o fogar" type="13"/>
+ <account name="Artefactos para o fogar" type="13"/>
+ <account name="Mercadorías de vidro e cristal, vaixela e utensilios para o fogar" type="13"/>
+ <account name="Ferramentas e úteis para o fogar e xardín" type="13"/>
+ <account name="Bens e servizos para a conservación ordinaria do fogar" type="13"/>
+ </account>
+ <account name="Saúde" type="13">
+ <account name="Produtos, artefactos e equipo médico" type="13"/>
+ <account name="Servizos para pacientes externos" type="13"/>
+ <account name="Servizos de hospital" type="13"/>
+ </account>
+ <account name="Transporte" type="13">
+ <account name="Adquisición de vehículos" type="13"/>
+ <account name="Funcionamentos de equipos de transporte persoal" type="13"/>
+ <account name="Servizos de transporte" type="13"/>
+ </account>
+ <account name="Comunicacións" type="13">
+ <account name="Servizos postais" type="13"/>
+ <account name="Equipo telefónico e de fax" type="13"/>
+ <account name="Servizos telefónicos e de fax" type="13"/>
+ </account>
+ <account name="Lecer e cultura" type="13">
+ <account name="Equipos audiovisuais, fotográficos e de procesamento de información" type="13"/>
+ <account name="Outros produtos duradeiros importantes para lecer e cultura" type="13"/>
+ <account name="Outras mercadorías e equipación para lecer, xardíns e animais domésticos" type="13"/>
+ <account name="Servizos de recreación e culturais" type="13"/>
+ <account name="Periódicos, libros e papeis e úteis de oficina" type="13"/>
+ <account name="Paquetes turísticos" type="13"/>
+ </account>
+ <account name="Educación" type="13">
+ <account name="Ensinanza preescolar e primaria" type="13"/>
+ <account name="Ensinanza secundaria" type="13"/>
+ <account name="Ensinanza postsecundaria, non terciaria" type="13"/>
+ <account name="Ensinanza terciaria" type="13"/>
+ <account name="Ensinanza non atribuíbel a nengún nível" type="13"/>
+ </account>
+ <account name="Restaurantes e hoteis" type="13">
+ <account name="Servizos de catering" type="13"/>
+ <account name="Servizos de aloxamento" type="13"/>
+ </account>
+ <account name="Bens e servizos diversos" type="13">
+ <account name="Coidado persoal" type="13"/>
+ <account name="Artigos persoais n.e.p." type="13"/>
+ <account name="Protección social" type="13"/>
+ <account name="Seguros" type="13"/>
+ <account name="Servizos financeiros n.e.p." type="13"/>
+ <account name="Outros servizos n.e.p." type="13"/>
+ </account>
+ </account>
+
+ <account name="" type="12">
+ <account name="Outros Ingresos" type="12">
+ <account name="Becas" type="12"/>
+ <account name="Agasallos Recebidos" type="12"/>
+ <account name="Loterias" type="12"/>
+ <account name="Devoluzón de Impostos" type="12"/>
+ <account name="Pensión Recebida para Fillos" type="12"/>
+ </account>
+ <account name="Seguridade Social" type="12">
+ <account name="Pensión de Xubilazón" type="12"/>
+ <account name="Pensión non contributiva" type="12"/>
+ <account name="Baixa laboral" type="12"/>
+ <account name="Seguro Desemprego" type="12"/>
+ </account>
+ <account name="Rendimentos de Investimentos" type="12">
+ <account name="Dividendos" type="12"/>
+ <account name="Gañancias de Capital" type="12"/>
+ <account name="Xuros" type="12"/>
+ </account>
+ <account name="Salario" type="12">
+ <account name="Bonus" type="12"/>
+ <account name="Comisións" type="12"/>
+ <account name="Primas de Produzón" type="12"/>
+ <account name="Salario Bruto" type="12"/>
+ <account name="Salario Neto" type="12"/>
+ <account name="Horas Extras" type="12"/>
+ </account>
+ </account>
+
+ <account name="" type="9">
+ <account name="Activo líquido" type="1">
+ <account name="Cartos en mao" type="1"/>
+ <account name="Conta corrente" type="1"/>
+ </account>
+ <account name="Activo fixo" type="1">
+ <account name="Coche" type="9"/>
+ <account name="Casa" type="9"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/header_template b/kmymoney2/templates/header_template
new file mode 100644
index 0000000..18f3519
--- /dev/null
+++ b/kmymoney2/templates/header_template
@@ -0,0 +1,30 @@
+/***************************************************************************
+ |FILENAME| - description
+ -------------------
+ begin : |DATE|
+ copyright : (C) 2000-|YEAR| by |AUTHOR|
+ email : |EMAIL|
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
diff --git a/kmymoney2/templates/hu_HU/Makefile.am b/kmymoney2/templates/hu_HU/Makefile.am
new file mode 100644
index 0000000..be0f096
--- /dev/null
+++ b/kmymoney2/templates/hu_HU/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/hu_HU
+
+template_DATA = homeown.kmt fixedassets.kmt retiremt.kmt eduloan.kmt homeloan.kmt renter.kmt common.kmt spouseretire.kmt brokerage.kmt childcare.kmt cdmoneymkt.kmt checkbook.kmt carloan.kmt otherloan.kmt business.kmt spouseinc.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/hu_HU/brokerage.kmt b/kmymoney2/templates/hu_HU/brokerage.kmt
new file mode 100644
index 0000000..441e889
--- /dev/null
+++ b/kmymoney2/templates/hu_HU/brokerage.kmt
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/hu_HU/acctchrt_brokerage.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Befektetési számlák</title>
+ <shortdesc>Brókerszámla a hozzá tartozó befektetési számlákkal (részvény, kötvény, befektetési alap, hozam, kamat, osztalék)</shortdesc>
+ <longdesc>Jelölje ki e számlahalmazt, ha foglalkozik befektetésekkel (részvény, kötvény, befektetési alap, hozam, kamat, osztalék)!</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Jutalék"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Osztalék"/>
+ <account type="12" name="Kamat">
+ <account type="12" name="Kötvény kamat"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Befektetések">
+ <account type="7" name="Brókerszámla"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/hu_HU/business.kmt b/kmymoney2/templates/hu_HU/business.kmt
new file mode 100644
index 0000000..9f2cd71
--- /dev/null
+++ b/kmymoney2/templates/hu_HU/business.kmt
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/hu_HU/acctchrt_business.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Vállalkozás-számlák</title>
+ <shortdesc>Teljes számlakészlet vállalkozásoknak.</shortdesc>
+ <longdesc>Vállalkozóknak inkább ez ajánlott, a többi lehetőség helyett. Ez tartalmazza az összes számlát, amelyre egy vállalkozásnak leggyakrabban szüksége van. Tartalmazza Kötelezettségek-, Követelések-, Bevétel- és Költségszámlákat.</longdesc>
+ <accounts>
+ <account type="10" name="">
+ <account type="4" name="Hitelkártya"/>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="Céltartalékok"/>
+ <account type="16" name="Nyitóegyenlegek"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Felszerelés kölcsönzés"/>
+ <account type="13" name="Különféle"/>
+ <account type="13" name="Javítások">
+ <account type="13" name="Felszerelés javítások"/>
+ <account type="13" name="Épületjavítás"/>
+ <account type="13" name="Számítógép javítások"/>
+ <account type="13" name="Épület-karbantartás"/>
+ </account>
+ <account type="13" name="Postaköltség és futárszolgálat"/>
+ <account type="13" name="Képzés"/>
+ <account type="13" name="Értékcsökkenés"/>
+ <account type="13" name="Irodaszerek"/>
+ <account type="13" name="Szakértői illetmény">
+ <account type="13" name="Jogi költségek"/>
+ <account type="13" name="Könyvelés"/>
+ </account>
+ <account type="13" name="Nyomtatás és fénymásolás"/>
+ <account type="13" name="Étkezés"/>
+ <account type="13" name="Tagdíjak és előfizetések"/>
+ <account type="13" name="Jogosítványok és engedélyek"/>
+ <account type="13" name="Árengedmények"/>
+ <account type="13" name="Munkabér"/>
+ <account type="13" name="Külső szolgáltatások"/>
+ <account type="13" name="Kiigazítás"/>
+ <account type="13" name="Utazás és Szórakozás">
+ <account type="13" name="Étkezések"/>
+ <account type="13" name="Utazás"/>
+ <account type="13" name="Szórakozás"/>
+ </account>
+ <account type="13" name="Jótékonyság"/>
+ <account type="13" name="Autó">
+ <account type="13" name="Javítás és karbantartás"/>
+ <account type="13" name="Üzemanyag"/>
+ <account type="13" name="Parkolás"/>
+ <account type="13" name="Díjak"/>
+ </account>
+ <account type="13" name="Bérleti díj"/>
+ <account type="13" name="Rezsi">
+ <account type="13" name="Gáz"/>
+ <account type="13" name="Szemétszállítás"/>
+ <account type="13" name="Internet"/>
+ <account type="13" name="Mobil telefon"/>
+ <account type="13" name="Kábel TV"/>
+ <account type="13" name="Villany"/>
+ <account type="13" name="Víz"/>
+ <account type="13" name="Telefon"/>
+ </account>
+ <account type="13" name="Biztosítás">
+ <account type="13" name="Rokkantsági biztosítás"/>
+ <account type="13" name="Felelősségbiztosítás"/>
+ </account>
+ <account type="13" name="Bankköltség"/>
+ <account type="13" name="Adók">
+ <account type="13" name="Nyereségadó"/>
+ <account type="13" name="TBJ"/>
+ <account type="13" name="Munkavállalói járulék"/>
+ <account type="13" name="Ingatlanadó"/>
+ <account type="13" name="Helyi adók"/>
+ <account type="13" name="IJ"/>
+ <account type="13" name="Egyéb adók"/>
+ <account type="13" name="ÁFA"/>
+ <account type="13" name="EVA"/>
+ </account>
+ <account type="13" name="Könyvek"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Kamatbevétel"/>
+ <account type="12" name="Eladások"/>
+ <account type="12" name="Egyéb bevétel"/>
+ <account type="12" name="Visszatérített költségek"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Forgóeszközök">
+ <account type="1" name="Betétszámla"/>
+ <account type="3" name="Készpénz"/>
+ <account type="1" name="Folyószámla"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/hu_HU/carloan.kmt b/kmymoney2/templates/hu_HU/carloan.kmt
new file mode 100644
index 0000000..b921733
--- /dev/null
+++ b/kmymoney2/templates/hu_HU/carloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/hu_HU/acctchrt_carloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Autóhitel</title>
+ <shortdesc>Számlák autóhitelhez és annak kamataihoz</shortdesc>
+ <longdesc>Akkor érdemes ezt kiválasztani, ha ön vásárol autót hitelre (autóhitel, autóhitelkamat).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Kamat">
+ <account type="13" name="Járműhitelkamat"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Hitelek">
+ <account type="10" name="Járműhitel"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/hu_HU/cdmoneymkt.kmt b/kmymoney2/templates/hu_HU/cdmoneymkt.kmt
new file mode 100644
index 0000000..7010dbc
--- /dev/null
+++ b/kmymoney2/templates/hu_HU/cdmoneymkt.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/hu_HU/acctchrt_cdmoneymkt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>CD és pénzpiaci</title>
+ <shortdesc>Számlák befektetési jegyekhez és pénzpiaci befektetésekhez</shortdesc>
+ <longdesc>Akkor érdemes kiválasztani, ha önnek van befektetési jegye vagy pénzpiaci számlája (CD, CD-kamat, pénzpiaci, pénzpiaci kamat)</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Kamatbevétel">
+ <account type="12" name="CD-kamat"/>
+ <account type="12" name="Pénzpiaci kamat"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Forgóeszközök">
+ <account type="1" name="Pénzpiaci"/>
+ <account type="1" name="CD"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/hu_HU/checkbook.kmt b/kmymoney2/templates/hu_HU/checkbook.kmt
new file mode 100644
index 0000000..6fa2240
--- /dev/null
+++ b/kmymoney2/templates/hu_HU/checkbook.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/hu_HU/acctchrt_checkbook.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Egyszerű folyószámla</title>
+ <shortdesc>Minimális számlakészlet GnuCash használatához.</shortdesc>
+ <longdesc>Akkor érdemes ezt kiválasztani, ha csak a folyószámlája forgalmát kívánja ellenőrizni. Később elkezdheti a bevételei és költségei alaposabb nyomonkövetését, ha szükségét érzi.</longdesc>
+ <accounts>
+ <account type="13" name=""/>
+ <account type="12" name=""/>
+ <account type="16" name="">
+ <account type="16" name="Nyitóegyenlegek"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Forgóeszközök">
+ <account type="1" name="Folyószámla"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/hu_HU/childcare.kmt b/kmymoney2/templates/hu_HU/childcare.kmt
new file mode 100644
index 0000000..04e6adf
--- /dev/null
+++ b/kmymoney2/templates/hu_HU/childcare.kmt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/hu_HU/acctchrt_childcare.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Gyerektartás költségei</title>
+ <shortdesc>Számla gyerektartás költségeinek nyomonkövetéséhez</shortdesc>
+ <longdesc>Akkor érdemes kiválasztani ezt ha önnek vannak gyerektartási költségei.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Gyerektartás"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/hu_HU/common.kmt b/kmymoney2/templates/hu_HU/common.kmt
new file mode 100644
index 0000000..f9870b3
--- /dev/null
+++ b/kmymoney2/templates/hu_HU/common.kmt
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/hu_HU/acctchrt_common.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Gyakori számlák</title>
+ <shortdesc>A leggyakrabban használt alapvető számlák</shortdesc>
+ <longdesc>A legtöbb felhasználónak ezt célszerű választani. Magában foglalja a leggyakrabban használt számlákat (folyószámla, betét, készpénz, hitelkártya, bevétel, gyakori költségek).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Jutalom"/>
+ <account type="12" name="Más bevétel"/>
+ <account type="12" name="Kapott ajándék"/>
+ <account type="12" name="Fizetés"/>
+ <account type="12" name="Kamatbevétel">
+ <account type="12" name="Más kamat"/>
+ <account type="12" name="Betétkamat"/>
+ <account type="12" name="Folyószámlakamat"/>
+ </account>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="Nyitóegyenlegek"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Forgóeszközök">
+ <account type="1" name="Folyószámla"/>
+ <account type="3" name="Készpénz"/>
+ <account type="1" name="Betétszámla"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Szórakozás">
+ <account type="13" name="Zene/filmek"/>
+ <account type="13" name="Utazás"/>
+ <account type="13" name="Pihenés"/>
+ </account>
+ <account type="13" name="Könyvek"/>
+ <account type="13" name="Étkezés"/>
+ <account type="13" name="Ajándékok"/>
+ <account type="13" name="Gyógykezelés"/>
+ <account type="13" name="Jótékonyság"/>
+ <account type="13" name="Tömegközlekedés"/>
+ <account type="13" name="Autó">
+ <account type="13" name="Üzemanyag"/>
+ <account type="13" name="Parkolás"/>
+ <account type="13" name="Javítás és karbantartás"/>
+ <account type="13" name="Díjak"/>
+ </account>
+ <account type="13" name="Bankköltség"/>
+ <account type="13" name="Képzés"/>
+ <account type="13" name="Rezsi">
+ <account type="13" name="Víz"/>
+ <account type="13" name="Gáz"/>
+ <account type="13" name="Hulladékgyűjtés"/>
+ <account type="13" name="Villany"/>
+ </account>
+ <account type="13" name="Kellékek"/>
+ <account type="13" name="Ruhák"/>
+ <account type="13" name="Előfizetések"/>
+ <account type="13" name="Telefon"/>
+ <account type="13" name="Biztosítás">
+ <account type="13" name="Autó biztosítás"/>
+ <account type="13" name="Életbiztosítás"/>
+ <account type="13" name="Egészségbiztosítás"/>
+ </account>
+ <account type="13" name="Online szolgáltatások"/>
+ <account type="13" name="Kiigazítás"/>
+ <account type="13" name="Adók">
+ <account type="13" name="TBJ"/>
+ <account type="13" name="Munkavállalói"/>
+ <account type="13" name="SzJA"/>
+ <account type="13" name="Más adó"/>
+ </account>
+ <account type="13" name="Számítógép"/>
+ <account type="13" name="Mosás/tisztítás"/>
+ <account type="13" name="Különféle"/>
+ <account type="13" name="Háztartási"/>
+ <account type="13" name="Kábel TV"/>
+ <account type="13" name="Kedvtelés"/>
+ </account>
+ <account type="10" name="">
+ <account type="4" name="Hitelkártya"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/hu_HU/eduloan.kmt b/kmymoney2/templates/hu_HU/eduloan.kmt
new file mode 100644
index 0000000..600e7ce
--- /dev/null
+++ b/kmymoney2/templates/hu_HU/eduloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/hu_HU/acctchrt_eduloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Diákhitel</title>
+ <shortdesc>Diákhitelszámla és kamat</shortdesc>
+ <longdesc>Annak érdemes kiválasztani ezt, aki vett fel diákhitelt (DH, DH-kamat)</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Kamat">
+ <account type="13" name="Diákhitel kamata"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Hitelek">
+ <account type="10" name="Diákhitel"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/hu_HU/fixedassets.kmt b/kmymoney2/templates/hu_HU/fixedassets.kmt
new file mode 100644
index 0000000..ca40e98
--- /dev/null
+++ b/kmymoney2/templates/hu_HU/fixedassets.kmt
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/hu_HU/acctchrt_fixedassets.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Befektetett eszközök</title>
+ <shortdesc>Számlák nagy befektetett eszközök nyomonkövetésére</shortdesc>
+ <longdesc>Akkor érdemes kiválasztani ezt, ha ön nagyobb befektetett eszközökkel rendelkezik (ház, jármű, nyaraló, más eszköz).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Befektetett eszközök">
+ <account type="9" name="Jármű"/>
+ <account type="9" name="Más eszköz"/>
+ <account type="9" name="Ház"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/hu_HU/homeloan.kmt b/kmymoney2/templates/hu_HU/homeloan.kmt
new file mode 100644
index 0000000..4d19aea
--- /dev/null
+++ b/kmymoney2/templates/hu_HU/homeloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/hu_HU/acctchrt_homeloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Lakáshitel</title>
+ <shortdesc>Számlák a lakáshitelhez és kamathoz</shortdesc>
+ <longdesc>Önnek akkor célszerű ezt választani, ha rendelkezik lakáshitellel (jelzáloghitel, kamat).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Kamat">
+ <account type="13" name="Jelzálogkamat"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Hitelek">
+ <account type="10" name="Jelzáloghitelek"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/hu_HU/homeown.kmt b/kmymoney2/templates/hu_HU/homeown.kmt
new file mode 100644
index 0000000..e487ec5
--- /dev/null
+++ b/kmymoney2/templates/hu_HU/homeown.kmt
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/hu_HU/acctchrt_homeown.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Lakásköltségek</title>
+ <shortdesc>Lakástulajdonosi költségek</shortdesc>
+ <longdesc>Akkor érdemes ezt választani, ha önnek van saját lakása. Ez a készlet a saját lakás költségeinek nyomonkövetésére való számlákat tartalmaz (biztosítás, adók, javítások).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Biztosítás">
+ <account type="13" name="Lakásbiztosítás"/>
+ </account>
+ <account type="13" name="Adók">
+ <account type="13" name="Ingatlanadó"/>
+ </account>
+ <account type="13" name="Lakásjavítás"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/hu_HU/otherloan.kmt b/kmymoney2/templates/hu_HU/otherloan.kmt
new file mode 100644
index 0000000..1f7077b
--- /dev/null
+++ b/kmymoney2/templates/hu_HU/otherloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/hu_HU/acctchrt_otherloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Más hitelek</title>
+ <shortdesc>Számlák más hitelek nyomonkövetésére</shortdesc>
+ <longdesc>Akkor érdemes ezt választani, ha ön vesz fel más, kisebb hiteleket.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Kamat">
+ <account type="13" name="Más kamat"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Hitelek">
+ <account type="10" name="Más hitel"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/hu_HU/renter.kmt b/kmymoney2/templates/hu_HU/renter.kmt
new file mode 100644
index 0000000..e9b2700
--- /dev/null
+++ b/kmymoney2/templates/hu_HU/renter.kmt
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/hu_HU/acctchrt_renter.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Bérköltségek</title>
+ <shortdesc>Bérlakás költségei</shortdesc>
+ <longdesc>Akkor érdemes ezt választani, ha ön bérel lakást (lakbér, lakásbiztosítás)</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Lakbér"/>
+ <account type="13" name="Biztosítás">
+ <account type="13" name="Bérleti biztosítás"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/hu_HU/retiremt.kmt b/kmymoney2/templates/hu_HU/retiremt.kmt
new file mode 100644
index 0000000..b745644
--- /dev/null
+++ b/kmymoney2/templates/hu_HU/retiremt.kmt
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/hu_HU/acctchrt_retiremt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Nyugdíjszámlák</title>
+ <shortdesc>Nyugdíjszámla a hozzá kapcsolódó befektetési számlákkal</shortdesc>
+ <longdesc>Akkor érdemes ezt választani, ha önnek vannak nyugdíjszámlái (részvény, kötvény, befektetési alap, nyugdíjalap)</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Befektetések">
+ <account type="7" name="Nyugdíj"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/hu_HU/spouseinc.kmt b/kmymoney2/templates/hu_HU/spouseinc.kmt
new file mode 100644
index 0000000..cbaf2da
--- /dev/null
+++ b/kmymoney2/templates/hu_HU/spouseinc.kmt
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/hu_HU/acctchrt_spouseinc.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Hitvesi jövedelem</title>
+ <shortdesc>Számlák a hitvesi jövedelmek nyomonkövetésére</shortdesc>
+ <longdesc>Akkor érdemes ezt kiválasztani, ha önnek van dolgozó hitvese (fizetés (hitves), adók (hitves)).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Fizetés (hitves)"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Adók (hitves)">
+ <account type="13" name="TBJ"/>
+ <account type="13" name="Munkavállalói"/>
+ <account type="13" name="SzJA"/>
+ <account type="13" name="Más adó"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/hu_HU/spouseretire.kmt b/kmymoney2/templates/hu_HU/spouseretire.kmt
new file mode 100644
index 0000000..a7feb3c
--- /dev/null
+++ b/kmymoney2/templates/hu_HU/spouseretire.kmt
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/hu_HU/acctchrt_spouseretire.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Hitvesi nyugdíjszámlák</title>
+ <shortdesc>Nyugdíjszámla a hozzá tartozó hitvesi befektetési számlákkal</shortdesc>
+ <longdesc>Akkor érdemes ezt kiválasztani, ha önnek vannak befektetései a hitvese nevén (részvény, kötvény, befektetési alap, kamat osztalék)</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Befektetések">
+ <account type="7" name="Hitvesi nyugdíj"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/it/Makefile.am b/kmymoney2/templates/it/Makefile.am
new file mode 100644
index 0000000..7abc6b9
--- /dev/null
+++ b/kmymoney2/templates/it/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/it
+
+template_DATA = homeown.kmt fixedassets.kmt retiremt.kmt homeloan.kmt renter.kmt common.kmt spouseretire.kmt brokerage.kmt childcare.kmt checkbook.kmt carloan.kmt otherloan.kmt spouseinc.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/it/brokerage.kmt b/kmymoney2/templates/it/brokerage.kmt
new file mode 100644
index 0000000..3ff34a2
--- /dev/null
+++ b/kmymoney2/templates/it/brokerage.kmt
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/it/acctchrt_brokerage.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Conti investimenti</title>
+ <shortdesc>Conti per il brokeraggio ed i relativi investimenti</shortdesc>
+ <longdesc>Selezionare questo insieme di conti se si possiedono degli investimenti (azioni, buoni, fondi comuni, fondi indicizzati, interessi, dividendi).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Commissioni"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Entrate dividendi"/>
+ <account type="12" name="Entrate interessi">
+ <account type="12" name="Interessi buoni"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Investimenti">
+ <account type="7" name="Conto brokeraggio"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/it/carloan.kmt b/kmymoney2/templates/it/carloan.kmt
new file mode 100644
index 0000000..6bfefa6
--- /dev/null
+++ b/kmymoney2/templates/it/carloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/it/acctchrt_carloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Mutuo auto</title>
+ <shortdesc>Conti per il mutuo dell'auto e relativi interessi</shortdesc>
+ <longdesc>Selezionare questo insieme di conti se si possiede un mutuo per l'automobile (mutuo automobile, interessi sul mutuo).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Interessi">
+ <account type="13" name="Interessi mutuo automobile"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Mutui">
+ <account type="10" name="Mutuo automobile"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/it/checkbook.kmt b/kmymoney2/templates/it/checkbook.kmt
new file mode 100644
index 0000000..b07c86b
--- /dev/null
+++ b/kmymoney2/templates/it/checkbook.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/it/acctchrt_checkbook.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Semplice libro conti</title>
+ <shortdesc>L'insieme minimale di conti per usare GnuCash.</shortdesc>
+ <longdesc>Utile per tenere il saldo delle proprie entrate e uscite. Successivamente, se ce ne sarà bisogno, sarà possibile incominciare a tenerne traccia in modo più dettagliato.</longdesc>
+ <accounts>
+ <account type="13" name=""/>
+ <account type="12" name=""/>
+ <account type="16" name="">
+ <account type="16" name="Bilanci d'apertura"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Attività correnti">
+ <account type="1" name="Conto corrente"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/it/childcare.kmt b/kmymoney2/templates/it/childcare.kmt
new file mode 100644
index 0000000..2d62d48
--- /dev/null
+++ b/kmymoney2/templates/it/childcare.kmt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/it/acctchrt_childcare.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Uscite baby sitter</title>
+ <shortdesc>Un conto per tenere traccia dei costi della baby sitter</shortdesc>
+ <longdesc>Selezionare questo insieme di conti se si hanno delle uscite per la baby sitter.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Baby sitter"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/it/common.kmt b/kmymoney2/templates/it/common.kmt
new file mode 100644
index 0000000..e336816
--- /dev/null
+++ b/kmymoney2/templates/it/common.kmt
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/it/acctchrt_common.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Conti comuni</title>
+ <shortdesc>Un insieme basilare comprendente i conti più comunemente usati</shortdesc>
+ <longdesc>Questo insieme di conti è selezionato dalla maggior parte degli utenti. L'insieme comprende i conti usati più comunemente (conto corrente, di risparmio, contanti, carta di credito, entrate, uscite comuni).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Entrate extra"/>
+ <account type="12" name="Altre entrate"/>
+ <account type="12" name="Regali ricevuti"/>
+ <account type="12" name="Stipendio"/>
+ <account type="12" name="Entrate interessi">
+ <account type="12" name="Altri interessi"/>
+ <account type="12" name="Interessi conto risparmio"/>
+ <account type="12" name="Interessi conto corrente"/>
+ </account>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="Bilanci d'apertura"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Attività correnti">
+ <account type="1" name="Conto corrente"/>
+ <account type="3" name="Liquidità"/>
+ <account type="1" name="Conto risparmio"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Intrattenimento">
+ <account type="13" name="Musica/Film"/>
+ <account type="13" name="Viaggi"/>
+ <account type="13" name="Divertimento"/>
+ </account>
+ <account type="13" name="Libri"/>
+ <account type="13" name="Ristoranti"/>
+ <account type="13" name="Regali"/>
+ <account type="13" name="Spese mediche"/>
+ <account type="13" name="Donazioni"/>
+ <account type="13" name="Trasporti pubblici"/>
+ <account type="13" name="Auto">
+ <account type="13" name="Benzina"/>
+ <account type="13" name="Parcheggio"/>
+ <account type="13" name="Riparazioni e manutenzione"/>
+ <account type="13" name="Varie"/>
+ </account>
+ <account type="13" name="Servizi bancari"/>
+ <account type="13" name="Educazione"/>
+ <account type="13" name="Servizi">
+ <account type="13" name="Acqua"/>
+ <account type="13" name="Gas"/>
+ <account type="13" name="Rifiuti"/>
+ <account type="13" name="Elettricità"/>
+ </account>
+ <account type="13" name="Prima necessità"/>
+ <account type="13" name="Abbigliamento"/>
+ <account type="13" name="Abbonamenti"/>
+ <account type="13" name="Telefono"/>
+ <account type="13" name="Assicurazione">
+ <account type="13" name="Assicurazione auto"/>
+ <account type="13" name="Assicurazione vita"/>
+ <account type="13" name="Assicurazione medica"/>
+ </account>
+ <account type="13" name="Servizi Internet"/>
+ <account type="13" name="Correzioni"/>
+ <account type="13" name="Imposte">
+ <account type="13" name="Pensione"/>
+ <account type="13" name="Regionali/provinciali"/>
+ <account type="13" name="Statali"/>
+ <account type="13" name="Cure mediche"/>
+ <account type="13" name="Altre imposte"/>
+ </account>
+ <account type="13" name="Computer"/>
+ <account type="13" name="Lavanderia"/>
+ <account type="13" name="Varie"/>
+ <account type="13" name="Alimentari"/>
+ <account type="13" name="TV"/>
+ <account type="13" name="Hobby"/>
+ </account>
+ <account type="10" name="">
+ <account type="4" name="Carta credito"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/it/fixedassets.kmt b/kmymoney2/templates/it/fixedassets.kmt
new file mode 100644
index 0000000..8b93c9e
--- /dev/null
+++ b/kmymoney2/templates/it/fixedassets.kmt
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/it/acctchrt_fixedassets.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Attività ingenti</title>
+ <shortdesc>Conti per tenere traccia di attività ingenti</shortdesc>
+ <longdesc>Selezionare questo insieme di conti se si possiedono delle attività di notevole valore e durata (casa, automobile, seconda casa, altre attività).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Attività ingenti">
+ <account type="9" name="Automobile"/>
+ <account type="9" name="Altre attività"/>
+ <account type="9" name="Casa"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/it/homeloan.kmt b/kmymoney2/templates/it/homeloan.kmt
new file mode 100644
index 0000000..21328a2
--- /dev/null
+++ b/kmymoney2/templates/it/homeloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/it/acctchrt_homeloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Mutuo casa</title>
+ <shortdesc>Conti per il mutuo della casa e relativi interessi</shortdesc>
+ <longdesc>Selezionare questo insieme di conti se si possiede un mutuo per la casa (mutuo, interessi).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Interessi">
+ <account type="13" name="Interessi mutuo casa"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Mutui">
+ <account type="10" name="Mutuo casa"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/it/homeown.kmt b/kmymoney2/templates/it/homeown.kmt
new file mode 100644
index 0000000..328173d
--- /dev/null
+++ b/kmymoney2/templates/it/homeown.kmt
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/it/acctchrt_homeown.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Uscite casa</title>
+ <shortdesc>Uscite associate al possesso di una casa</shortdesc>
+ <longdesc>Selezionare questo insieme di conti se si possiede una casa. L'insieme fornisce un gruppo di conti utili a tenere traccia delle spese di casa (assicurazione, imposte, riparazioni).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Assicurazione">
+ <account type="13" name="Assicurazione casa"/>
+ </account>
+ <account type="13" name="Imposte">
+ <account type="13" name="ICI"/>
+ </account>
+ <account type="13" name="Riparazioni casa"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/it/otherloan.kmt b/kmymoney2/templates/it/otherloan.kmt
new file mode 100644
index 0000000..abb3000
--- /dev/null
+++ b/kmymoney2/templates/it/otherloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/it/acctchrt_otherloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Altri mutui</title>
+ <shortdesc>Conti per tenere traccia di altri mutui e relativi interessi</shortdesc>
+ <longdesc>Selezionare questo insieme di conti se si possiedono altri mutui oltre a quello per la casa (altri mutui, interessi).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Interessi">
+ <account type="13" name="Altri interessi"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Mutui">
+ <account type="10" name="Altri mutui"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/it/renter.kmt b/kmymoney2/templates/it/renter.kmt
new file mode 100644
index 0000000..801173c
--- /dev/null
+++ b/kmymoney2/templates/it/renter.kmt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/it/acctchrt_renter.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Uscite affitto</title>
+ <shortdesc>Uscite associate all'affitto di una casa</shortdesc>
+ <longdesc>Selezionare questo insieme di conti se si ha in affitto una casa o un appartamento.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Affitto"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/it/retiremt.kmt b/kmymoney2/templates/it/retiremt.kmt
new file mode 100644
index 0000000..641262c
--- /dev/null
+++ b/kmymoney2/templates/it/retiremt.kmt
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/it/acctchrt_retiremt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Conti fondo pensione</title>
+ <shortdesc>Conto per il fondo pensione e relativi sottoconti d'investimento</shortdesc>
+ <longdesc>Selezionare questo insieme di conti se si possiedono dei fondi pensione (azioni, buoni, fondi comuni, fondi indicizzati).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Investimenti">
+ <account type="7" name="Pensione"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/it/spouseinc.kmt b/kmymoney2/templates/it/spouseinc.kmt
new file mode 100644
index 0000000..6892ebd
--- /dev/null
+++ b/kmymoney2/templates/it/spouseinc.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/it/acctchrt_spouseinc.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Entrate coniuge</title>
+ <shortdesc>Conti per tener traccia separatamente delle entrate del coniuge</shortdesc>
+ <longdesc>Selezionare questo insieme di conti se il coniuge lavora (stipendio ed imposte del coniuge).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Stipendio (coniuge)"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Imposte (coniuge)">
+ <account type="13" name="Pensione"/>
+ <account type="13" name="Spese mediche"/>
+ <account type="13" name="Regionali/provinciali"/>
+ <account type="13" name="Statale"/>
+ <account type="13" name="Altre imposte"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/it/spouseretire.kmt b/kmymoney2/templates/it/spouseretire.kmt
new file mode 100644
index 0000000..e4fe029
--- /dev/null
+++ b/kmymoney2/templates/it/spouseretire.kmt
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/it/acctchrt_spouseretire.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Conti fondo pensione coniuge</title>
+ <shortdesc>Conto per il fondo pensione e relativi investimenti del coniuge</shortdesc>
+ <longdesc>Selezionare questo insieme di conti se si possiedono degli investimenti in favore del coniuge (azioni, buoni, fondi comuni, fondi indicizzati, interessi, dividendi).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Investimenti">
+ <account type="7" name="Fondo pensione coniuge"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/jp/Makefile.am b/kmymoney2/templates/jp/Makefile.am
new file mode 100644
index 0000000..f0a3148
--- /dev/null
+++ b/kmymoney2/templates/jp/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/jp
+
+template_DATA = homeown.kmt fixedassets.kmt retiremt.kmt eduloan.kmt homeloan.kmt renter.kmt common.kmt spouseretire.kmt brokerage.kmt childcare.kmt cdmoneymkt.kmt checkbook.kmt carloan.kmt otherloan.kmt business.kmt spouseinc.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/jp/brokerage.kmt b/kmymoney2/templates/jp/brokerage.kmt
new file mode 100644
index 0000000..27b708e
--- /dev/null
+++ b/kmymoney2/templates/jp/brokerage.kmt
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/ja/acctchrt_brokerage.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>投資勘定科目集</title>
+ <shortdesc>委託売買口座と関連する投資勘定科目(株式、債券、投資信託、金利、配当)</shortdesc>
+ <longdesc>投資(株式、債券、投資信託、金利、配当)を行っている場合は、この勘定科目セットを選ぶとよいでしょう。</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="委託手数料"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="配当収入"/>
+ <account type="12" name="利息収入">
+ <account type="12" name="債券利息"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="投資">
+ <account type="7" name="委託売買口座"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/jp/business.kmt b/kmymoney2/templates/jp/business.kmt
new file mode 100644
index 0000000..291a50b
--- /dev/null
+++ b/kmymoney2/templates/jp/business.kmt
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/ja/acctchrt_business.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>ビジネス勘定科目</title>
+ <shortdesc>ビジネス用勘定科目の全般。</shortdesc>
+ <longdesc>ビジネスを行っているユーザは他の選択肢の代わりにこれを選ぶとよいでしょう。これにはたいていのビジネスを行うのに必要な勘定科目、買掛金、売掛金、収益、費用など、がすべて含まれます。</longdesc>
+ <accounts>
+ <account type="10" name="">
+ <account type="4" name="クレジットカード"/>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="内部留保"/>
+ <account type="16" name="開始残高"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="備品レンタル費"/>
+ <account type="13" name="諸費用"/>
+ <account type="13" name="修理費">
+ <account type="13" name="備品修理費"/>
+ <account type="13" name="建物修理費"/>
+ <account type="13" name="コンピュータ修理費"/>
+ <account type="13" name="建物管理費"/>
+ </account>
+ <account type="13" name="送料"/>
+ <account type="13" name="研修費"/>
+ <account type="13" name="減価償却"/>
+ <account type="13" name="オフィス消耗品"/>
+ <account type="13" name="専門家料金">
+ <account type="13" name="法務費"/>
+ <account type="13" name="会計費"/>
+ </account>
+ <account type="13" name="印刷複写費"/>
+ <account type="13" name="食費"/>
+ <account type="13" name="会費講読費"/>
+ <account type="13" name="免許許可"/>
+ <account type="13" name="現金値引き"/>
+ <account type="13" name="賃金"/>
+ <account type="13" name="外部サービス"/>
+ <account type="13" name="調整"/>
+ <account type="13" name="旅費娯楽費">
+ <account type="13" name="食費"/>
+ <account type="13" name="旅費"/>
+ <account type="13" name="娯楽"/>
+ </account>
+ <account type="13" name="義援金"/>
+ <account type="13" name="自動車">
+ <account type="13" name="修理維持"/>
+ <account type="13" name="ガソリン"/>
+ <account type="13" name="駐車場"/>
+ <account type="13" name="通行料"/>
+ </account>
+ <account type="13" name="レンタル費"/>
+ <account type="13" name="公共料金">
+ <account type="13" name="ガス"/>
+ <account type="13" name="ゴミ収集"/>
+ <account type="13" name="インターネット"/>
+ <account type="13" name="携帯電話"/>
+ <account type="13" name="ケーブルテレビ"/>
+ <account type="13" name="電気"/>
+ <account type="13" name="水道"/>
+ <account type="13" name="電話"/>
+ </account>
+ <account type="13" name="保険料">
+ <account type="13" name="所得補償保険"/>
+ <account type="13" name="労働災害保険"/>
+ <account type="13" name="賠償責任保険"/>
+ </account>
+ <account type="13" name="銀行手数料"/>
+ <account type="13" name="税金">
+ <account type="13" name="国税"/>
+ <account type="13" name="FICA"/>
+ <account type="13" name="Property"/>
+ <account type="13" name="Local"/>
+ <account type="13" name="Emp-FICA"/>
+ <account type="13" name="その他の税金"/>
+ <account type="13" name="地方税"/>
+ <account type="13" name="FUTA"/>
+ </account>
+ <account type="13" name="書籍"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="利息収入"/>
+ <account type="12" name="売上"/>
+ <account type="12" name="その他の収入"/>
+ <account type="12" name="賠償費用"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="流動資産">
+ <account type="1" name="普通預金口座"/>
+ <account type="3" name="小口現金"/>
+ <account type="1" name="当座預金口座"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/jp/carloan.kmt b/kmymoney2/templates/jp/carloan.kmt
new file mode 100644
index 0000000..a5fcdb5
--- /dev/null
+++ b/kmymoney2/templates/jp/carloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/ja/acctchrt_carloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>自動車ローン</title>
+ <shortdesc>自動車ローンと関連利子用の勘定科目</shortdesc>
+ <longdesc>自動車ローンを持っている場合はこの勘定科目セットを選ぶとよいでしょう。</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="利子">
+ <account type="13" name="自動車ローン利子"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="ローン">
+ <account type="10" name="自動車ローン"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/jp/cdmoneymkt.kmt b/kmymoney2/templates/jp/cdmoneymkt.kmt
new file mode 100644
index 0000000..54c2563
--- /dev/null
+++ b/kmymoney2/templates/jp/cdmoneymkt.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/ja/acctchrt_cdmoneymkt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>譲渡性預金(CD)と短期金融市場</title>
+ <shortdesc>譲渡性預金と短期金融市場用の勘定科目</shortdesc>
+ <longdesc>譲渡性預金か短期金融市場の口座を持っている場合は、この勘定科目セットを選ぶとよいでしょう。</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="利息収入">
+ <account type="12" name="譲渡性預金利息"/>
+ <account type="12" name="短期金融市場利息"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="流動資産">
+ <account type="1" name="短期金融市場"/>
+ <account type="1" name="銀行譲渡性預金"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/jp/checkbook.kmt b/kmymoney2/templates/jp/checkbook.kmt
new file mode 100644
index 0000000..ec3dd49
--- /dev/null
+++ b/kmymoney2/templates/jp/checkbook.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/ja/acctchrt_checkbook.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>単純小切手帳</title>
+ <shortdesc>GnuCashを使う上で最小限の勘定科目セット</shortdesc>
+ <longdesc>小切手帳の収支を合わせるだけであればこれを使ってください。必要になれば、あとから詳細な収益や費用の管理を始めることができます。</longdesc>
+ <accounts>
+ <account type="13" name=""/>
+ <account type="12" name=""/>
+ <account type="16" name="">
+ <account type="16" name="開始残高"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="流動資産">
+ <account type="1" name="当座預金口座"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/jp/childcare.kmt b/kmymoney2/templates/jp/childcare.kmt
new file mode 100644
index 0000000..6cadcc5
--- /dev/null
+++ b/kmymoney2/templates/jp/childcare.kmt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/ja/acctchrt_childcare.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>養育費用</title>
+ <shortdesc>養育費用を管理するための勘定科目</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have childcare expenses.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="養育費"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/jp/common.kmt b/kmymoney2/templates/jp/common.kmt
new file mode 100644
index 0000000..07b1944
--- /dev/null
+++ b/kmymoney2/templates/jp/common.kmt
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/ja/acctchrt_common.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>共通勘定科目集</title>
+ <shortdesc>最も共通に使われる科目の基本セット</shortdesc>
+ <longdesc>ほとんどのユーザはこの勘定科目セットを選ぶとよいでしょう。最も共通に使われる科目 (預貯金、現金、クレジットカード、所得、一般的な支出) が含まれています。</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="ボーナス"/>
+ <account type="12" name="その他の収入"/>
+ <account type="12" name="贈与収入"/>
+ <account type="12" name="給与"/>
+ <account type="12" name="利息収入">
+ <account type="12" name="その他の利息"/>
+ <account type="12" name="普通預金利息"/>
+ <account type="12" name="当座預金利息"/>
+ </account>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="開始残高"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="流動資産">
+ <account type="1" name="当座預金"/>
+ <account type="3" name="現金"/>
+ <account type="1" name="普通預金"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="娯楽">
+ <account type="13" name="音楽/映画"/>
+ <account type="13" name="旅行"/>
+ <account type="13" name="リクリエーション"/>
+ </account>
+ <account type="13" name="書籍"/>
+ <account type="13" name="食費"/>
+ <account type="13" name="贈答"/>
+ <account type="13" name="医療費"/>
+ <account type="13" name="義援金"/>
+ <account type="13" name="交通機関"/>
+ <account type="13" name="自動車">
+ <account type="13" name="ガソリン"/>
+ <account type="13" name="駐車場"/>
+ <account type="13" name="修理維持"/>
+ <account type="13" name="通行料"/>
+ </account>
+ <account type="13" name="銀行手数料"/>
+ <account type="13" name="教育"/>
+ <account type="13" name="公共料金">
+ <account type="13" name="水道"/>
+ <account type="13" name="ガス"/>
+ <account type="13" name="ゴミ収集"/>
+ <account type="13" name="電気"/>
+ </account>
+ <account type="13" name="消耗品"/>
+ <account type="13" name="衣料品"/>
+ <account type="13" name="購読"/>
+ <account type="13" name="電話料金"/>
+ <account type="13" name="保険料">
+ <account type="13" name="自動車保険"/>
+ <account type="13" name="生命保険"/>
+ <account type="13" name="医療保険"/>
+ </account>
+ <account type="13" name="オンラインサービス"/>
+ <account type="13" name="調整"/>
+ <account type="13" name="税金">
+ <account type="13" name="公的年金"/>
+ <account type="13" name="地方税"/>
+ <account type="13" name="国税"/>
+ <account type="13" name="健康保険"/>
+ <account type="13" name="その他の税"/>
+ </account>
+ <account type="13" name="コンピュータ"/>
+ <account type="13" name="クリーニング"/>
+ <account type="13" name="その他"/>
+ <account type="13" name="日用品"/>
+ <account type="13" name="ケーブルテレビ"/>
+ <account type="13" name="趣味"/>
+ </account>
+ <account type="10" name="">
+ <account type="4" name="クレジットカード"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/jp/eduloan.kmt b/kmymoney2/templates/jp/eduloan.kmt
new file mode 100644
index 0000000..d685993
--- /dev/null
+++ b/kmymoney2/templates/jp/eduloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/ja/acctchrt_eduloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>教育ローン</title>
+ <shortdesc>教育ローンと関連する金利の勘定科目</shortdesc>
+ <longdesc>教育住宅ローンを持っている場合はこの勘定科目セットを選びたくなるかもしれません。</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="利子">
+ <account type="13" name="教育ローン利子"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="ローン">
+ <account type="10" name="教育ローン"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/jp/fixedassets.kmt b/kmymoney2/templates/jp/fixedassets.kmt
new file mode 100644
index 0000000..6b36ba8
--- /dev/null
+++ b/kmymoney2/templates/jp/fixedassets.kmt
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/ja/acctchrt_fixedassets.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>固定資産</title>
+ <shortdesc>大規模な固定資産管理用の勘定科目</shortdesc>
+ <longdesc>大規模な固定資産(住宅、自動車、別荘、その他資産)を持っている場合はこの勘定科目セットを選ぶとよいでしょう。</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="固定資産">
+ <account type="9" name="自動車"/>
+ <account type="9" name="その他の資産"/>
+ <account type="9" name="住宅"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/jp/homeloan.kmt b/kmymoney2/templates/jp/homeloan.kmt
new file mode 100644
index 0000000..5af215e
--- /dev/null
+++ b/kmymoney2/templates/jp/homeloan.kmt
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/ja/acctchrt_homeloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>住宅ローン</title>
+ <shortdesc>住宅ローンと関連する金利の勘定科目</shortdesc>
+ <longdesc>住宅ローンを持っている場合はこの勘定科目セットを選びたくなるかもしれません。</longdesc>
+ <accounts>
+ <account type="10" name="">
+ <account type="10" name="住宅ローン"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="金利">
+ <account type="13" name="住宅ローン金利"/>
+ </account>
+ </account>
+ <account type="10" name=""/>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/jp/homeown.kmt b/kmymoney2/templates/jp/homeown.kmt
new file mode 100644
index 0000000..08ab991
--- /dev/null
+++ b/kmymoney2/templates/jp/homeown.kmt
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/ja/acctchrt_homeown.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>住居費</title>
+ <shortdesc>住居所有にかかる費用</shortdesc>
+ <longdesc>住居を保有している場合はこの勘定科目セットを選ぶとよいでしょう。このセットは住居費用(保険、税金、修理)を管理する勘定科目のグループを用意します。</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="保険">
+ <account type="13" name="住宅保険"/>
+ </account>
+ <account type="13" name="税金">
+ <account type="13" name="固定資産税"/>
+ </account>
+ <account type="13" name="修繕費"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/jp/otherloan.kmt b/kmymoney2/templates/jp/otherloan.kmt
new file mode 100644
index 0000000..3853f43
--- /dev/null
+++ b/kmymoney2/templates/jp/otherloan.kmt
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/ja/acctchrt_otherloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>その他のローン</title>
+ <shortdesc>その他のローンと利息を管理するための勘定科目</shortdesc>
+ <longdesc>住宅以外の何か他のローンを持っている場合はこの勘定科目セットを選ぶとよいでしょう。</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="利子">
+ <account type="13" name="その他の利子"/>
+ </account>
+ </account>
+ <account type="10" name=""/>
+ <account type="10" name="">
+ <account type="10" name="その他のローン"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/jp/renter.kmt b/kmymoney2/templates/jp/renter.kmt
new file mode 100644
index 0000000..4d4c3ae
--- /dev/null
+++ b/kmymoney2/templates/jp/renter.kmt
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/ja/acctchrt_renter.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>賃貸費用</title>
+ <shortdesc>賃貸住宅にかかる費用</shortdesc>
+ <longdesc>住居やアパートを賃貸している場合は(家賃、賃貸保険)この勘定科目集合を選ぶといいでしょう。</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="家賃"/>
+ <account type="13" name="保険">
+ <account type="13" name="賃貸住宅保険"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/jp/retiremt.kmt b/kmymoney2/templates/jp/retiremt.kmt
new file mode 100644
index 0000000..fc81b7c
--- /dev/null
+++ b/kmymoney2/templates/jp/retiremt.kmt
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/ja/acctchrt_retiremt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>個人年金口座</title>
+ <shortdesc>個人年金口座と関連する投資勘定科目</shortdesc>
+ <longdesc>個人年金口座(株式、債券、投資信託)を持っている場合はこの勘定科目セットを選ぶとよいでしょう。</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="7" name="個人年金"/>
+ </account>
+ <account type="9" name=""/>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/jp/spouseinc.kmt b/kmymoney2/templates/jp/spouseinc.kmt
new file mode 100644
index 0000000..0b1fcd6
--- /dev/null
+++ b/kmymoney2/templates/jp/spouseinc.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/ja/acctchrt_spouseinc.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>配偶者収益</title>
+ <shortdesc>配偶者の収益を分離して管理するための勘定科目集</shortdesc>
+ <longdesc>配偶者が働いている場合はこの勘定科目セットを選ぶとよいでしょう。</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="給与(配偶者)"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="税金(配偶者)">
+ <account type="13" name="公的年金"/>
+ <account type="13" name="健康保険"/>
+ <account type="13" name="地方税"/>
+ <account type="13" name="国税"/>
+ <account type="13" name="その他の税"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/jp/spouseretire.kmt b/kmymoney2/templates/jp/spouseretire.kmt
new file mode 100644
index 0000000..43b1dac
--- /dev/null
+++ b/kmymoney2/templates/jp/spouseretire.kmt
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/ja/acctchrt_spouseretire.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>配偶者個人年金口座</title>
+ <shortdesc>配偶者の個人年金口座と関連する投資勘定科目</shortdesc>
+ <longdesc>配偶者名での投資(株式、債券、投資信託、利息、配当)を持っている場合はこの勘定科目セットを選ぶとよいでしょう。</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="7" name="配偶者個人年金"/>
+ </account>
+ <account type="9" name=""/>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/nl_NL/Makefile.am b/kmymoney2/templates/nl_NL/Makefile.am
new file mode 100644
index 0000000..54b6db6
--- /dev/null
+++ b/kmymoney2/templates/nl_NL/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/nl_NL
+
+template_DATA = default_accounts.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/nl_NL/default_accounts.kmt b/kmymoney2/templates/nl_NL/default_accounts.kmt
new file mode 100644
index 0000000..ff4481d
--- /dev/null
+++ b/kmymoney2/templates/nl_NL/default_accounts.kmt
@@ -0,0 +1,209 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>KMyMoney 0.8 default</title>
+ <shortdesc/>
+ <longdesc/>
+ <accounts>
+ <account type="12" name="" >
+ <account type="12" name="Allimentatie" />
+ <account type="12" name="Werkgever" >
+ <account type="12" name="Bonus" />
+ <account type="12" name="Buitenlandse inkomsten" />
+ <account type="12" name="Anders" />
+ <account type="12" name="Salaris / Loon" />
+ <account type="12" name="Overwerk" />
+ <account type="12" name="Bijdrage pensioenpremie" />
+ <account type="12" name="Bijdrage ziektekostenverzekering" />
+ <account type="12" name="Commissie" />
+ </account>
+ <account type="12" name="Bank" >
+ <account type="12" name="Rente" />
+ <account type="12" name="Service kosten" />
+ </account>
+ <account type="12" name="Beleggingen / Investeringen" >
+ <account type="12" name="Verkoop opties" />
+ <account type="12" name="Dividend" />
+ <account type="12" name="Stock dividend" />
+ <account type="12" name="Rente" />
+ <account type="12" name="Verkoop aandelen" />
+ </account>
+ <account type="12" name="Andere inkomsten" >
+ <account type="12" name="Bedrijfsopties en -aandelen" />
+ <account type="12" name="Giften" />
+ <account type="12" name="Aflossingen" />
+ <account type="12" name="Loterijen" />
+ <account type="12" name="Belasting teruggaaf" />
+ <account type="12" name="Uitkeringen" >
+ <account type="12" name="Studiebeurs" />
+ <account type="12" name="Kinderbijslag" />
+ <account type="12" name="WW" />
+ <account type="12" name="AOW" />
+ <account type="12" name="WIA" />
+ <account type="12" name="Lijfrente" />
+ <account type="12" name="Pensioen" />
+ <account type="12" name="Levensverzekering" />
+ <account type="12" name="Ziektekostenverzekering" />
+ <account type="12" name="Stakingskas" />
+ <account type="12" name="Huur subsidie" />
+ </account>
+ </account>
+ </account>
+ <account type="13" name="" >
+ <account type="13" name="Rekeningen" >
+ <account type="13" name="Telefoon" />
+ <account type="13" name="Huur" />
+ <account type="13" name="Elektriciteit" />
+ <account type="13" name="TV" />
+ <account type="13" name="Lokale belastingen en heffingen" />
+ <account type="13" name="Gas" />
+ <account type="13" name="Hypotheek" >
+ <account type="13" name="Rente" />
+ <account type="13" name="Aflossingsverzekering" />
+ <account type="13" name="Aflossing" />
+ </account>
+ <account type="13" name="Water" />
+ <account type="13" name="Stookolie" />
+ <account type="13" name="Afvalstoffenheffing" />
+ <account type="13" name="Rioolrecht" />
+ <account type="13" name="Abonnementen" />
+ <account type="13" name="Stadsverwarming" />
+ </account>
+ <account type="13" name="Bank kosten" >
+ <account type="13" name="Rente" />
+ <account type="13" name="Service kosten" />
+ </account>
+ <account type="13" name="Zakelijke uitgaven" >
+ <account type="13" name="Auto" >
+ <account type="13" name="Brandstof" />
+ <account type="13" name="Onderhoud" />
+ <account type="13" name="Verzekering" />
+ <account type="13" name="Leasekosten" />
+ <account type="13" name="Lening" />
+ </account>
+ <account type="13" name="Investeringen" />
+ <account type="13" name="Juridische uitgaven" />
+ <account type="13" name="Reis- en verblijfskosten" >
+ <account type="13" name="Accomodatie" />
+ <account type="13" name="Tolgelden" />
+ <account type="13" name="Auto huur" />
+ </account>
+ <account type="13" name="Kantoor huur" />
+ <account type="13" name="Office Supplies" />
+ <account type="13" name="Divers" />
+ <account type="13" name="Loon en salaris" >
+ <account type="13" name="Toelagen" />
+ <account type="13" name="Vakbond" />
+ </account>
+ <account type="13" name="Rente" />
+ </account>
+ <account type="13" name="Auto" >
+ <account type="13" name="Brandstof" />
+ <account type="13" name="Onderhoud" />
+ <account type="13" name="Verzekering" />
+ <account type="13" name="Lease" />
+ <account type="13" name="Lening" />
+ <account type="13" name="Tol gelden en veerdiensten" />
+ <account type="13" name="Parkeer kosten" />
+ <account type="13" name="Rijles" />
+ </account>
+ <account type="13" name="Opname kas" />
+ <account type="13" name="Goede doelen" >
+ <account type="13" name="Giften" />
+ </account>
+ <account type="13" name="Allimentatie (uitgaven)" />
+ <account type="13" name="Onderwijs" >
+ <account type="13" name="Boeken" />
+ <account type="13" name="Lesgeld" />
+ <account type="13" name="Studie lening" />
+ </account>
+ <account type="13" name="Tuin" />
+ <account type="13" name="Gezondheid" >
+ <account type="13" name="Tandarts" />
+ <account type="13" name="Huisarts" />
+ <account type="13" name="Ziekenhuis" />
+ <account type="13" name="Opticien" />
+ <account type="13" name="Medicijnen" />
+ <account type="13" name="Fysiotherapie" />
+ </account>
+ <account type="13" name="Vakantie" >
+ <account type="13" name="Accomodatie" />
+ <account type="13" name="Reiskosten" />
+ </account>
+ <account type="13" name="Huishoudelijk" >
+ <account type="13" name="Boodschappen" />
+ <account type="13" name="Stoffering" />
+ <account type="13" name="Reparatie" />
+ <account type="13" name="Bloemen en planten" />
+ <account type="13" name="Cadeaus" />
+ <account type="13" name="Levensmiddelen" />
+ <account type="13" name="Reiskosten" />
+ <account type="13" name="Divers" />
+ <account type="13" name="Speelgoed" />
+ <account type="13" name="Zakgeld" />
+ <account type="13" name="Kleding" />
+ <account type="13" name="Persoonlijke verzorging" />
+ </account>
+ <account type="13" name="Verzekeringen" >
+ <account type="13" name="Wettelijke aansprakelijkheid" />
+ <account type="13" name="Levensverzekering" />
+ <account type="13" name="Ziektekosten verzekering" />
+ <account type="13" name="Auto verzekering" />
+ <account type="13" name="Arbeidsongeschiktheidsverzekering" />
+ <account type="13" name="Uitvaart verzekering" />
+ <account type="13" name="Rechtsbijstand verzekering" />
+ <account type="13" name="Inboedel verzekering" />
+ <account type="13" name="Pensioen gat verzekering" />
+ </account>
+ <account type="13" name="Werk gerelateerde uitgaven" >
+ <account type="13" name="Vergoedde uitgaven" />
+ <account type="13" name="Niet vergoedde uitgaven" />
+ </account>
+ <account type="13" name="Ontspanning" >
+ <account type="13" name="Boeken en tijdschriften" />
+ <account type="13" name="Uitgaan" />
+ <account type="13" name="Films &amp; videotheek" />
+ <account type="13" name="Hobbies" />
+ <account type="13" name="Sport" />
+ <account type="13" name="Sportkleding" />
+ <account type="13" name="Muziek cassettes, CD's en DVD's" />
+ <account type="13" name="Theater &amp; concerten" />
+ <account type="13" name="Speelgoed" />
+ </account>
+ <account type="13" name="Rechtsbijstand" />
+ <account type="13" name="Lening" >
+ <account type="13" name="Rente" />
+ <account type="13" name="Auto lening" />
+ <account type="13" name="Boot lening" />
+ <account type="13" name="Hypotheek" >
+ <account type="13" name="Aflossing" />
+ <account type="13" name="Rente" />
+ <account type="13" name="Aflossingsverzekering" />
+ </account>
+ <account type="13" name="Studie lening" />
+ <account type="13" name="Motor lening" />
+ <account type="13" name="Doorlopend krediet" />
+ </account>
+ <account type="13" name="Andere uitgaven" >
+ <account type="13" name="Divers" />
+ </account>
+ <account type="13" name="Huisdieren" >
+ <account type="13" name="Voeding" />
+ <account type="13" name="Benodigdheden" />
+ <account type="13" name="Dierenarts" />
+ </account>
+ <account type="13" name="Pensioen voorziening" >
+ <account type="13" name="Lijfrente" />
+ <account type="13" name="Extra pensioen storting" />
+ <account type="13" name="Pensioen premie" />
+ </account>
+ <account type="13" name="Belastingen" >
+ <account type="13" name="Inkomsten belasting" />
+ <account type="13" name="Omzet belasting" />
+ <account type="13" name="Onroerend goed belasting" />
+ <account type="13" name="Anders" />
+ <account type="13" name="Lokale belastingen" />
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_BR/Makefile.am b/kmymoney2/templates/pt_BR/Makefile.am
new file mode 100644
index 0000000..e3fbe95
--- /dev/null
+++ b/kmymoney2/templates/pt_BR/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/pt_BR
+
+template_DATA = homeown.kmt fixedassets.kmt retiremt.kmt eduloan.kmt homeloan.kmt default_accounts.kmt renter.kmt common.kmt spouseretire.kmt currency.kmt brokerage.kmt childcare.kmt cdmoneymkt.kmt carloan.kmt otherloan.kmt spouseinc.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/pt_BR/brokerage.kmt b/kmymoney2/templates/pt_BR/brokerage.kmt
new file mode 100644
index 0000000..9b46573
--- /dev/null
+++ b/kmymoney2/templates/pt_BR/brokerage.kmt
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_BR/acctchrt_brokerage.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Conta de Investimentos</title>
+ <shortdesc>Conta de corretagem com contas de investimentos relacionados (ações, obrigações, fundos de investimento, fundos de índices, juros, dividendos)</shortdesc>
+ <longdesc>Deverá selecionar este conjunto de contas caso possua investimentos (ações, obrigações, fundos de investimento, fundos de índices, juros, dividendos).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Comissões"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Receita de Dividendos"/>
+ <account type="12" name="Receita de Juros">
+ <account type="12" name="Juros de Obigações"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Investimentos">
+ <account type="7" name="Conta na Corretora"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_BR/carloan.kmt b/kmymoney2/templates/pt_BR/carloan.kmt
new file mode 100644
index 0000000..7612720
--- /dev/null
+++ b/kmymoney2/templates/pt_BR/carloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_BR/acctchrt_carloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Empréstimo para Automóvel</title>
+ <shortdesc>Contas para empréstimo para automóvel e juros associados</shortdesc>
+ <longdesc>Deverá selecionar este conjunto de contas caso tenha um empréstimo para automóvel (empréstimo para automóvel, juro do empréstimo).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Juro">
+ <account type="13" name="Juro Empréstimo Automóvel"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Empréstimos">
+ <account type="10" name="Empréstimo Automóvel"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_BR/cdmoneymkt.kmt b/kmymoney2/templates/pt_BR/cdmoneymkt.kmt
new file mode 100644
index 0000000..a2ca744
--- /dev/null
+++ b/kmymoney2/templates/pt_BR/cdmoneymkt.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_BR/acctchrt_cdmoneymkt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Depósitos a Prazo e Mercado Monetário</title>
+ <shortdesc>Contas para Depósitos a Prazo e investimentos no mercado monetário</shortdesc>
+ <longdesc>Deverá selecionar este conjunto de contas caso tenha depósitos a prazo ou contas no mercado financeiro (DP, Juros DP, mercado monetário, juro mercado monetário).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Juros da Receita">
+ <account type="12" name="Juros do DP"/>
+ <account type="12" name="Juros do Mercado Monetário"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Ativos Atuais">
+ <account type="1" name="Mercado Monetário"/>
+ <account type="1" name="DP Banco"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_BR/childcare.kmt b/kmymoney2/templates/pt_BR/childcare.kmt
new file mode 100644
index 0000000..070eab1
--- /dev/null
+++ b/kmymoney2/templates/pt_BR/childcare.kmt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_BR/acctchrt_childcare.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Despesas de Cuidados Infantís</title>
+ <shortdesc>Uma conta para acompanhar despesas com cuidados infantís</shortdesc>
+ <longdesc>Deverá selecionar este conjunto de contas caso tenha despesas com crianças.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Cuidados Infantís"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_BR/common.kmt b/kmymoney2/templates/pt_BR/common.kmt
new file mode 100644
index 0000000..50f255a
--- /dev/null
+++ b/kmymoney2/templates/pt_BR/common.kmt
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_BR/acctchrt_common.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Contas Comuns</title>
+ <shortdesc>Um conjunto simples com as contas mais utilizadas</shortdesc>
+ <longdesc>A maioria dos usuários deverão selecionar este conjunto de contas. Inclui as contas mais utilizadas (dep. ordem, prazo, dinheiro, cartão crédito, receitas, despesas comuns).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Bônus"/>
+ <account type="12" name="Outras Receitas"/>
+ <account type="12" name="Presentes Recebidos"/>
+ <account type="12" name="Salário"/>
+ <account type="12" name="Juros Recebidos">
+ <account type="12" name="Outros Juros"/>
+ <account type="12" name="Juros Conta Poupança"/>
+ <account type="12" name="Juros Conta Corrente"/>
+ </account>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="Saldos Iniciais"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Ativos Atuais">
+ <account type="1" name="Conta Corrente"/>
+ <account type="3" name="Dinheiro na Carteira"/>
+ <account type="1" name="Conta Poupança"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Diversão">
+ <account type="13" name="Música/Cinema"/>
+ <account type="13" name="Viagens"/>
+ <account type="13" name="Passeios"/>
+ </account>
+ <account type="13" name="Livros"/>
+ <account type="13" name="Refeições Fora"/>
+ <account type="13" name="Presentes"/>
+ <account type="13" name="Despesas com Saúde"/>
+ <account type="13" name="Doações"/>
+ <account type="13" name="Transportes Públicos"/>
+ <account type="13" name="Automóvel">
+ <account type="13" name="Combustível"/>
+ <account type="13" name="Estacionamento"/>
+ <account type="13" name="Reparos e Manutenção"/>
+ <account type="13" name="Impostos"/>
+ </account>
+ <account type="13" name="Taxas Bancárias"/>
+ <account type="13" name="Educação"/>
+ <account type="13" name="Serviços">
+ <account type="13" name="Água"/>
+ <account type="13" name="Gás"/>
+ <account type="13" name="Eletricidade"/>
+ </account>
+ <account type="13" name="Material de Escritório"/>
+ <account type="13" name="Vestuário"/>
+ <account type="13" name="Assinaturas"/>
+ <account type="13" name="Telefone"/>
+ <account type="13" name="Seguro">
+ <account type="13" name="Seguro Automóvel"/>
+ <account type="13" name="Seguro de Vida"/>
+ <account type="13" name="Seguro Saúde"/>
+ </account>
+ <account type="13" name="Internet"/>
+ <account type="13" name="Ajustes"/>
+ <account type="13" name="Impostos">
+ <account type="13" name="CPMF"/>
+ <account type="13" name="IRF"/>
+ <account type="13" name="INSS"/>
+ <account type="13" name="Outros Impostos"/>
+ </account>
+ <account type="13" name="Computador"/>
+ <account type="13" name="Lavandaria"/>
+ <account type="13" name="Outras"/>
+ <account type="13" name="Mercearia"/>
+ <account type="13" name="Tv por assinatura"/>
+ <account type="13" name="Passatempos"/>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Contas a Pagar">
+ <account type="4" name="Cartão de Crédito"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_BR/currency.kmt b/kmymoney2/templates/pt_BR/currency.kmt
new file mode 100644
index 0000000..d27b69d
--- /dev/null
+++ b/kmymoney2/templates/pt_BR/currency.kmt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_BR/acctchrt_currency.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Conta de Conversão Monetária</title>
+ <shortdesc>Conta para converter e transacionar em moeda estrangeira</shortdesc>
+ <longdesc>Deverá selecionar este conjunto de contas se converter em moedas estrangeiras. Nota: conta encontra-se em BRL; edite a conta para alterar a moeda.</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Investimentos"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_BR/default_accounts.kmt b/kmymoney2/templates/pt_BR/default_accounts.kmt
new file mode 100644
index 0000000..3cd483c
--- /dev/null
+++ b/kmymoney2/templates/pt_BR/default_accounts.kmt
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>KMyMoney 0.8 default</title>
+ <shortdesc></shortdesc>
+ <longdesc></longdesc>
+ <accounts>
+ <account name="" type="13">
+ <account name="Contas a Pagar" type="13">
+ <account name="Telefone" type="13"/>
+ <account name="Aluguel" type="13"/>
+ <account name="Eletricidade" type="13"/>
+ <account name="TV" type="13"/>
+ <account name="Taxas Locais" type="13"/>
+ <account name="Óleo Combustível" type="13"/>
+ <account name="Gás Natural" type="13"/>
+ <account name="Hipoteca" type="13"/>
+ <account name="Água e Esgoto" type="13"/>
+ <account name="Condomínio" type="13"/>
+ </account>
+ <account name="Taxas Bancárias" type="13">
+ <account name="Juros Pagos" type="13"/>
+ <account name="Taxa de Serviço" type="13"/>
+ </account>
+ <account name="Empresa" type="13">
+ <account name="Automóvel" type="13">
+ <account name="Combustível" type="13"/>
+ <account name="Manutenção" type="13"/>
+ <account name="Seguro" type="13"/>
+ <account name="Leasing" type="13"/>
+ <account name="Financiamento" type="13"/>
+ <account name="Documentação" type="13"/>
+ </account>
+ <account name="Despesas Legais" type="13"/>
+ <account name="Taxas" type="13">
+ <account name="Taxas Federais" type="13"/>
+ <account name="Taxax Estaduais" type="13"/>
+ <account name="Taxas Locais" type="13"/>
+ <account name="Seguridade Social" type="13"/>
+ <account name="Taxas de Propriedade" type="13"/>
+ </account>
+ <account name="Viagem" type="13">
+ <account name="Acomodações" type="13"/>
+ <account name="Passagens" type="13"/>
+ <account name="Alimentação" type="13"/>
+ <account name="Aluguel de Carro" type="13"/>
+ </account>
+ <account name="Aluguel de Escritório" type="13"/>
+ <account name="Suprimentos de Escritório" type="13"/>
+ <account name="Outros" type="13"/>
+ <account name="Utilidades" type="13">
+ <account name="Eletricidade" type="13"/>
+ <account name="Gás" type="13"/>
+ <account name="Telefone" type="13"/>
+ <account name="Água" type="13"/>
+ <account name="Esgoto" type="13"/>
+ <account name="Lixo e Reciclagem" type="13"/>
+ </account>
+ <account name="Salário e Ordenado" type="13"/>
+ </account>
+ <account name="Automóvel" type="13">
+ <account name="Combustível" type="13"/>
+ <account name="Acessórios" type="13"/>
+ <account name="Serviços" type="13"/>
+ <account name="Seguro" type="13"/>
+ <account name="Leasing" type="13"/>
+ <account name="Financiamento" type="13"/>
+ <account name="Impostos e documentação" type="13"/>
+ </account>
+ <account name="Retirada em Dinheiro" type="13"/>
+ <account name="Caridade" type="13">
+ <account name="Doações" type="13"/>
+ </account>
+ <account name="Despesas com filhos" type="13"/>
+ <account name="Vestuário" type="13"/>
+ <account name="Educação" type="13">
+ <account name="Livros" type="13"/>
+ <account name="Taxas" type="13"/>
+ <account name="Financiamento" type="13"/>
+ <account name="Mensalidade Escolar" type="13"/>
+ <account name="Outros" type="13"/>
+ </account>
+ <account name="Alimentação" type="13">
+ <account name="Restaurante" type="13"/>
+ <account name="Mercado" type="13"/>
+ </account>
+ <account name="Jardinagem" type="13"/>
+ <account name="Presentes" type="13"/>
+ <account name="Saúde" type="13">
+ <account name="Dentista" type="13"/>
+ <account name="Médico" type="13"/>
+ <account name="Hospital" type="13"/>
+ <account name="Oculista" type="13"/>
+ <account name="Remédios" type="13"/>
+ </account>
+ <account name="Viagens" type="13">
+ <account name="Acomodações" type="13"/>
+ <account name="Alimentação" type="13"/>
+ <account name="Passagens" type="13"/>
+ </account>
+ <account name="Casa" type="13">
+ <account name="Mobília" type="13"/>
+ <account name="Reparos" type="13"/>
+ </account>
+ <account name="Seguro" type="13">
+ <account name="Casa" type="13"/>
+ <account name="Vida" type="13"/>
+ <account name="Médico" type="13"/>
+ <account name="Automóvel" type="13"/>
+ <account name="Invalidez" type="13"/>
+ </account>
+ <account name="Despesas de Trabalho" type="13">
+ <account name="Não reembolsadas" type="13"/>
+ <account name="Reembolsadas" type="13"/>
+ </account>
+ <account name="Lazer" type="13">
+ <account name="Livros e Revistas" type="13"/>
+ <account name="Diversão" type="13"/>
+ <account name="Cinemas e Aluguel de Vídeos" type="13"/>
+ <account name="Eventos Esportivos" type="13"/>
+ <account name="Fitas &amp; CDs" type="13"/>
+ <account name="Eventos Culturais" type="13"/>
+ <account name="Brinquedos e Jogos" type="13"/>
+ </account>
+ <account name="Taxas Legais" type="13"/>
+ <account name="Financiamento" type="13">
+ <account name="Juros de Financiamento" type="13"/>
+ </account>
+ <account name="Cuidados Pessoais" type="13"/>
+ <account name="Animal de Estimação" type="13">
+ <account name="Alimentação" type="13"/>
+ <account name="Suprimentos" type="13"/>
+ <account name="Veterinário" type="13"/>
+ </account>
+ <account name="Taxas" type="13">
+ <account name="Taxas Federais" type="13"/>
+ <account name="Taxas Estaduais" type="13"/>
+ <account name="Taxas Locais" type="13"/>
+ <account name="Outras Taxas" type="13"/>
+ <account name="Taxas sobre propriedade" type="13"/>
+ </account>
+ <account name="Utilidades" type="13">
+ <account name="Eletricidade" type="13"/>
+ <account name="Gás" type="13"/>
+ <account name="Telefone" type="13"/>
+ <account name="Água" type="13"/>
+ <account name="Esgoto" type="13"/>
+ <account name="Lixo e Reciclagem" type="13"/>
+ </account>
+ </account>
+ <account name="" type="12">
+ <account name="Outros Rendimentos" type="12">
+ <account name="Financiamento de Estudos" type="12"/>
+ <account name="Ações de Funcionário" type="12"/>
+ <account name="Presentes Recebidos" type="12"/>
+ <account name="Principal do Financiamento Recebido" type="12"/>
+ <account name="Loterias" type="12"/>
+ <account name="Devolução de Impostos" type="12"/>
+ <account name="Seguro Desemprego" type="12"/>
+ <account name="Pensão Recebida para Filhos" type="12"/>
+ </account>
+ <account name="Rendimentos de Aposentadoria" type="12">
+ <account name="Benefícios" type="12"/>
+ <account name="Pensões" type="12"/>
+ </account>
+ <account name="Rendimentos de Investimentos" type="12">
+ <account name="Dividendos" type="12"/>
+ <account name="Ganhos de Capital de curto-prazo" type="12"/>
+ <account name="Ganhos de Capital de longo-prazo" type="12"/>
+ <account name="Juros" type="12"/>
+ <account name="Juros não Tributáveis" type="12"/>
+ </account>
+ <account name="Salário e Ordenado" type="12">
+ <account name="Bônus" type="12"/>
+ <account name="Comissão" type="12"/>
+ <account name="Contribuição do Empregador" type="12"/>
+ <account name="Pagamento Bruto" type="12"/>
+ <account name="Pagamento Líquido" type="12"/>
+ <account name="Horas Extras" type="12"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_BR/eduloan.kmt b/kmymoney2/templates/pt_BR/eduloan.kmt
new file mode 100644
index 0000000..39df84b
--- /dev/null
+++ b/kmymoney2/templates/pt_BR/eduloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_BR/acctchrt_eduloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Crédito Educativo</title>
+ <shortdesc>Contas para empréstimos para estudos e juros associados</shortdesc>
+ <longdesc>Deverá selecionar este conjunto de contas se possuir um crédito educativo (empréstimo para educação, juros do empréstimo para educação).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Juros">
+ <account type="13" name="Juros do Crédito Educativo"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Empréstimos">
+ <account type="10" name="Crédito Educativo"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_BR/fixedassets.kmt b/kmymoney2/templates/pt_BR/fixedassets.kmt
new file mode 100644
index 0000000..9ca8408
--- /dev/null
+++ b/kmymoney2/templates/pt_BR/fixedassets.kmt
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_BR/acctchrt_fixedassets.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Ativo Fixo</title>
+ <shortdesc>Contas para registar ativos fixos</shortdesc>
+ <longdesc>Deverá selecionar este conjunto de contas se tiver ativos fixos (casa, automóvel, casa de férias, outros ativos).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Ativos Fixos">
+ <account type="9" name="Automóvel"/>
+ <account type="9" name="Outro Ativo"/>
+ <account type="9" name="Casa"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_BR/homeloan.kmt b/kmymoney2/templates/pt_BR/homeloan.kmt
new file mode 100644
index 0000000..b9988b3
--- /dev/null
+++ b/kmymoney2/templates/pt_BR/homeloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_BR/acctchrt_homeloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Empréstimo para Habitação</title>
+ <shortdesc>Contas para empréstimo de habitação e juros associados</shortdesc>
+ <longdesc>Deverá selecionar este conjunto de contas caso tenha contraido um empréstimo para habitação (emprétimo habitação, juro do empréstimo).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Juros">
+ <account type="13" name="Juros Empréstimo"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Empréstimos">
+ <account type="10" name="Empréstimo Habitação"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_BR/homeown.kmt b/kmymoney2/templates/pt_BR/homeown.kmt
new file mode 100644
index 0000000..92807bc
--- /dev/null
+++ b/kmymoney2/templates/pt_BR/homeown.kmt
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_BR/acctchrt_homeown.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Despesas da Casa</title>
+ <shortdesc>Despesas associadas à posse de uma habitação</shortdesc>
+ <longdesc>Deverá selecionar este conjunto de contas caso possua uma habitação própria. Este conjunto disponibiliza um grupo de contas para acompanhar despesas da casa (seguro, impostos, reparos).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Seguro">
+ <account type="13" name="Seguro da Casa"/>
+ </account>
+ <account type="13" name="IPTU"/>
+ <account type="13" name="Reparos na Casa"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_BR/otherloan.kmt b/kmymoney2/templates/pt_BR/otherloan.kmt
new file mode 100644
index 0000000..a37ecf7
--- /dev/null
+++ b/kmymoney2/templates/pt_BR/otherloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_BR/acctchrt_otherloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Outros Empréstimos</title>
+ <shortdesc>Contas para controlar outros empréstimos e juros associados</shortdesc>
+ <longdesc>Deverá selecionar este conjunto de contas se tiver empréstimo em geral (outro empréstimo, juros do outro empréstimo).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Juro">
+ <account type="13" name="Outro Juro"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Empréstimos">
+ <account type="10" name="Outros Empréstimo"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_BR/renter.kmt b/kmymoney2/templates/pt_BR/renter.kmt
new file mode 100644
index 0000000..d898e72
--- /dev/null
+++ b/kmymoney2/templates/pt_BR/renter.kmt
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_BR/acctchrt_renter.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Despesas de Aluguel</title>
+ <shortdesc>Despesas associadas com uma casa alugada</shortdesc>
+ <longdesc>Deverá selecionar este conjunto de contas caso tenha uma casa alugada (renda).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Renda"/>
+ <account type="13" name="Seguro"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_BR/retiremt.kmt b/kmymoney2/templates/pt_BR/retiremt.kmt
new file mode 100644
index 0000000..4b440d2
--- /dev/null
+++ b/kmymoney2/templates/pt_BR/retiremt.kmt
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_BR/acctchrt_retiremt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Contas de Aposentadoria</title>
+ <shortdesc>Contas de aposentadoria com subcontas de investimentos relacionados</shortdesc>
+ <longdesc>Deverá selecionar este conjunto de contas caso tenha contas de aposentadoria (ações, obrigações, fundos de investimento, fundos de índices).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Investimentos">
+ <account type="7" name="Aposentadoria"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_BR/spouseinc.kmt b/kmymoney2/templates/pt_BR/spouseinc.kmt
new file mode 100644
index 0000000..0aabacd
--- /dev/null
+++ b/kmymoney2/templates/pt_BR/spouseinc.kmt
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_BR/acctchrt_spouseinc.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Receitas do Cônjuge</title>
+ <shortdesc>Contas para registar separadamente as receitas do cônjuge</shortdesc>
+ <longdesc>Deverá selecionar este conjunto de contas caso tenha um cônjuge que tenha emprego (salário, impostos).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Salário (Cônjuge)"/>
+ <account type="13" name="Impostos (Cônjuge)">
+ <account type="13" name="Outros Impostos"/>
+ <account type="13" name="IRF"/>
+ <account type="13" name="Seguro Saúde"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_BR/spouseretire.kmt b/kmymoney2/templates/pt_BR/spouseretire.kmt
new file mode 100644
index 0000000..e14c6d2
--- /dev/null
+++ b/kmymoney2/templates/pt_BR/spouseretire.kmt
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_BR/acctchrt_spouseretire.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Contas de Aposentadoria do Cônjuge</title>
+ <shortdesc>Conta de aposentadoria com contas de investimentos relacionadas para o cônjuge</shortdesc>
+ <longdesc>Deverá selecionar este conjunto de contas se tiver investimentos em nome do cônjuge (ações, obrigações, fundos de investimento, fundos de índices, juros, dividendos).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Investimentos">
+ <account type="7" name="Aposentadoria do Cônjuge"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_PT/Makefile.am b/kmymoney2/templates/pt_PT/Makefile.am
new file mode 100644
index 0000000..a3b2694
--- /dev/null
+++ b/kmymoney2/templates/pt_PT/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/pt_PT
+
+template_DATA = homeown.kmt fixedassets.kmt retiremt.kmt eduloan.kmt homeloan.kmt renter.kmt common.kmt spouseretire.kmt brokerage.kmt childcare.kmt cdmoneymkt.kmt carloan.kmt otherloan.kmt spouseinc.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/pt_PT/brokerage.kmt b/kmymoney2/templates/pt_PT/brokerage.kmt
new file mode 100644
index 0000000..442722b
--- /dev/null
+++ b/kmymoney2/templates/pt_PT/brokerage.kmt
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_PT/acctchrt_brokerage.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Conta de Investimentos</title>
+ <shortdesc>Conta de corretagem com contas de investimentos relacionados (acções, obrigações, fundos de investimento, fundos de índices, juros, dividendos)</shortdesc>
+ <longdesc>Você desejará seleccionar este conjunto de acções caso possua investimentos (acções, obrigações, fundos de investimento, fundos de índices, juros, dividendos).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Comissões"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Receita de Dividendos"/>
+ <account type="12" name="Receita de Juros">
+ <account type="12" name="Juros de Obigações"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Investimentos">
+ <account type="7" name="Conta na Corretora"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_PT/carloan.kmt b/kmymoney2/templates/pt_PT/carloan.kmt
new file mode 100644
index 0000000..e5bf746
--- /dev/null
+++ b/kmymoney2/templates/pt_PT/carloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_PT/acctchrt_carloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Empréstimo para Automóvel</title>
+ <shortdesc>Contas para empréstimo para automóvel e juros associados</shortdesc>
+ <longdesc>Você desejará seleccionar este conjunto de contas caso tenha um empréstimo para automóvel (empréstimo para automóvel, juro do empréstimo).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Juro">
+ <account type="13" name="Juro Empréstimo Automóvel"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Empréstimos">
+ <account type="10" name="Empréstimo Automóvel"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_PT/cdmoneymkt.kmt b/kmymoney2/templates/pt_PT/cdmoneymkt.kmt
new file mode 100644
index 0000000..59dd47c
--- /dev/null
+++ b/kmymoney2/templates/pt_PT/cdmoneymkt.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_PT/acctchrt_cdmoneymkt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Depósitos a Prazo e Mercado Monetário</title>
+ <shortdesc>Contas para Depósitos a Prazo e investimentos no mercado monetário</shortdesc>
+ <longdesc>Desejará utilizar este conjunto de contas caso tenha depósitos a prazo ou contas no mercado financeiro (DP, Juros DP, mercado monetário, juro mercado monetário).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Juros da Receita">
+ <account type="12" name="Juros do DP"/>
+ <account type="12" name="Juros do Mercado Monetário"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Activos Actuais">
+ <account type="1" name="Mercado Monetário"/>
+ <account type="1" name="DP Banco"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_PT/childcare.kmt b/kmymoney2/templates/pt_PT/childcare.kmt
new file mode 100644
index 0000000..2ecfc10
--- /dev/null
+++ b/kmymoney2/templates/pt_PT/childcare.kmt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_PT/acctchrt_childcare.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Despesas de Cuidados Infantís</title>
+ <shortdesc>Uma conta para acompanhar despesas com cuidados infantís</shortdesc>
+ <longdesc>Desejará seleccionar este conjunto de contas caso tenha despesas com crianças.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Cuidados Infantís"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_PT/common.kmt b/kmymoney2/templates/pt_PT/common.kmt
new file mode 100644
index 0000000..d5b4b6a
--- /dev/null
+++ b/kmymoney2/templates/pt_PT/common.kmt
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_PT/acctchrt_common.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Contas Comuns</title>
+ <shortdesc>Um conjunto simples com as contas mais utilizadas</shortdesc>
+ <longdesc>A maioria dos utilizadores desejará seleccionar este conjunto de contas. Inclui as contas mais utilizadas (dep. ordem, prazo, dinheiro, cartão crédito, receitas, despesas comuns).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Bónus"/>
+ <account type="12" name="Outras Receitas"/>
+ <account type="12" name="Presentes Recebidos"/>
+ <account type="12" name="Salário"/>
+ <account type="12" name="Juros Recebidos">
+ <account type="12" name="Outros Juros"/>
+ <account type="12" name="Juros Conta Prazo"/>
+ <account type="12" name="Juros Conta Ordem"/>
+ </account>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="Saldos Iniciais"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Activos Actuais">
+ <account type="1" name="Conta à Ordem"/>
+ <account type="3" name="Dinheiro na Carteira"/>
+ <account type="1" name="Conta a Prazo"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Divertimento">
+ <account type="13" name="Música/Cinema"/>
+ <account type="13" name="Viagens"/>
+ <account type="13" name="Passeios"/>
+ </account>
+ <account type="13" name="Livros"/>
+ <account type="13" name="Refeições Fora"/>
+ <account type="13" name="Presentes"/>
+ <account type="13" name="Despesas com Saúde"/>
+ <account type="13" name="Caridade"/>
+ <account type="13" name="Transportes Públicos"/>
+ <account type="13" name="Automóvel">
+ <account type="13" name="Gasolina"/>
+ <account type="13" name="Estacionamento"/>
+ <account type="13" name="Reparações e Manutenção"/>
+ <account type="13" name="Imposto Selo"/>
+ </account>
+ <account type="13" name="Comissões Bancárias"/>
+ <account type="13" name="Educação"/>
+ <account type="13" name="Serviços">
+ <account type="13" name="Água"/>
+ <account type="13" name="Gás"/>
+ <account type="13" name="Electricidade"/>
+ </account>
+ <account type="13" name="Mat. Escritório"/>
+ <account type="13" name="Roupa"/>
+ <account type="13" name="Assinaturas"/>
+ <account type="13" name="Telefone"/>
+ <account type="13" name="Seguro">
+ <account type="13" name="Seguro Automóvel"/>
+ <account type="13" name="Seguro Vida"/>
+ <account type="13" name="Seguro Saúde"/>
+ </account>
+ <account type="13" name="Serviços Internet"/>
+ <account type="13" name="Ajustamentos"/>
+ <account type="13" name="Impostos">
+ <account type="13" name="Segurança Social"/>
+ <account type="13" name="Municipais"/>
+ <account type="13" name="IRS"/>
+ <account type="13" name="Seguro Saúde"/>
+ <account type="13" name="Outros Impostos"/>
+ </account>
+ <account type="13" name="Computador"/>
+ <account type="13" name="Lavandaria"/>
+ <account type="13" name="Outras"/>
+ <account type="13" name="Mercearia"/>
+ <account type="13" name="Televisão por Cabo"/>
+ <account type="13" name="Passatempos"/>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Contas a Pagar">
+ <account type="4" name="Cartão de Crédito"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_PT/eduloan.kmt b/kmymoney2/templates/pt_PT/eduloan.kmt
new file mode 100644
index 0000000..b4ba1df
--- /dev/null
+++ b/kmymoney2/templates/pt_PT/eduloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_PT/acctchrt_eduloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Empréstimo para Educação</title>
+ <shortdesc>Contas para empréstimos para estudos e juros associados</shortdesc>
+ <longdesc>Desejará seleccionar este conjunto de contas se possuir um empréstimo para educação (empréstimo para educação, juros do empréstimo para educação).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Juros">
+ <account type="13" name="Juros do Empréstimo para Educação"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Empréstimos">
+ <account type="10" name="Empréstimo para Educação"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_PT/fixedassets.kmt b/kmymoney2/templates/pt_PT/fixedassets.kmt
new file mode 100644
index 0000000..110f580
--- /dev/null
+++ b/kmymoney2/templates/pt_PT/fixedassets.kmt
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_PT/acctchrt_fixedassets.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Imobilizado Corpóreo</title>
+ <shortdesc>Contas para registar activos fixos de grandes dimensões</shortdesc>
+ <longdesc>Desejará seleccionar este conjunto de contas se tiver activos fixos de grandes dimensões (casa, automóvel, casa de férias, outros activos).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Activos Fixos">
+ <account type="9" name="Automóvel"/>
+ <account type="9" name="Outro Activo"/>
+ <account type="9" name="Casa"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_PT/homeloan.kmt b/kmymoney2/templates/pt_PT/homeloan.kmt
new file mode 100644
index 0000000..6271d0d
--- /dev/null
+++ b/kmymoney2/templates/pt_PT/homeloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_PT/acctchrt_homeloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Empréstimo para Habitação</title>
+ <shortdesc>Contas para empréstimo de habitação e juros associados</shortdesc>
+ <longdesc>Desejará seleccionar este conjunto de contas caso tenha contraido um empréstimo para habitação (emprétimo habitação, juro do empréstimo).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Juros">
+ <account type="13" name="Juros Empréstimo"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Empréstimos">
+ <account type="10" name="Empréstimo Habitação"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_PT/homeown.kmt b/kmymoney2/templates/pt_PT/homeown.kmt
new file mode 100644
index 0000000..28c3c67
--- /dev/null
+++ b/kmymoney2/templates/pt_PT/homeown.kmt
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_PT/acctchrt_homeown.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Despesas da Casa</title>
+ <shortdesc>Despesas associadas à posse de uma habitação</shortdesc>
+ <longdesc>Desejará seleccionar este conjunto de contas caso possua uma habitação própria. Este conjunto disponibiliza um grupo de contas para acompanhar despesas da casa (seguro, impostos, reparações).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Seguro">
+ <account type="13" name="Seguro da Casa"/>
+ </account>
+ <account type="13" name="Impostos">
+ <account type="13" name="Contribuição Autárquica"/>
+ </account>
+ <account type="13" name="Reparações na Casa"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_PT/otherloan.kmt b/kmymoney2/templates/pt_PT/otherloan.kmt
new file mode 100644
index 0000000..8a37577
--- /dev/null
+++ b/kmymoney2/templates/pt_PT/otherloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_PT/acctchrt_otherloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Outros Empréstimos</title>
+ <shortdesc>Contas para controlar outros empréstimos e juros associados</shortdesc>
+ <longdesc>Desejará seleccionar este conjunto de contas se tiver outro empréstimo para além do crédito à habitação (outro empréstimo, juros do outro empréstimo).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Juro">
+ <account type="13" name="Outro Juro"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Empréstimos">
+ <account type="10" name="Outros Empréstimo"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_PT/renter.kmt b/kmymoney2/templates/pt_PT/renter.kmt
new file mode 100644
index 0000000..a5f0b4f
--- /dev/null
+++ b/kmymoney2/templates/pt_PT/renter.kmt
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_PT/acctchrt_renter.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Despesas de Aluguer</title>
+ <shortdesc>Despesas associadas com uma casa alugada</shortdesc>
+ <longdesc>Desejará seleccionar este conjunto de contas caso tenha uma casa alugada (renda, seguro de arrendamento).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Renda"/>
+ <account type="13" name="Seguro">
+ <account type="13" name="Seguro de Arrendamento"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_PT/retiremt.kmt b/kmymoney2/templates/pt_PT/retiremt.kmt
new file mode 100644
index 0000000..498ca3a
--- /dev/null
+++ b/kmymoney2/templates/pt_PT/retiremt.kmt
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_PT/acctchrt_retiremt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Contas de Reforma</title>
+ <shortdesc>Contas de reforma com subcontas de investimentos relacionados</shortdesc>
+ <longdesc>Você deverá querer seleccionar este conjunto de contas caso tenha contas de reforma (acções, obrigações, fundos de investimento, fundos de índices).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Investimentos">
+ <account type="7" name="Reforma"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_PT/spouseinc.kmt b/kmymoney2/templates/pt_PT/spouseinc.kmt
new file mode 100644
index 0000000..3a1a092
--- /dev/null
+++ b/kmymoney2/templates/pt_PT/spouseinc.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_PT/acctchrt_spouseinc.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Receitas da Esposa</title>
+ <shortdesc>Contas para registar separadamente as receitas da esposa</shortdesc>
+ <longdesc>Desejará seleccionar este conjunto de contas caso tenha uma esposa que tenha emprego (salário (esposa), impostos (esposa)).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Salário (Esposa)"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Impostos (Esposa)">
+ <account type="13" name="Segurança Social"/>
+ <account type="13" name="Seguro Saúde"/>
+ <account type="13" name="Municipais"/>
+ <account type="13" name="IRS"/>
+ <account type="13" name="Outros Impostos"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/pt_PT/spouseretire.kmt b/kmymoney2/templates/pt_PT/spouseretire.kmt
new file mode 100644
index 0000000..b66a452
--- /dev/null
+++ b/kmymoney2/templates/pt_PT/spouseretire.kmt
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/pt_PT/acctchrt_spouseretire.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Contas de Reforma da Esposa</title>
+ <shortdesc>Conta de reforma com contas de investimentos relacionadas para esposa</shortdesc>
+ <longdesc>Desejará seleccionar este conjunto de contas se tiver investimentos em nome da esposa (acções, obrigações, fundos de investimento, fundos de índices, juros, dividendos).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Investimentos">
+ <account type="7" name="Reforma da Esposa"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/ro_RO/Makefile.am b/kmymoney2/templates/ro_RO/Makefile.am
new file mode 100644
index 0000000..1ffb6b8
--- /dev/null
+++ b/kmymoney2/templates/ro_RO/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/ro_RO
+
+template_DATA = carloan.kmt common.kmt default_categories-template.kmt homeloan.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/ro_RO/carloan.kmt b/kmymoney2/templates/ro_RO/carloan.kmt
new file mode 100644
index 0000000..407ee81
--- /dev/null
+++ b/kmymoney2/templates/ro_RO/carloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/C/acctchrt_carloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Credit auto</title>
+ <shortdesc>Conturi pentru un credid auto şi dobânda aferentăs</shortdesc>
+ <longdesc>Aţi avea nevoie de acest set de conturi dacă aveţi un credit auto (creditul auto, dobânda).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Dobândă">
+ <account type="13" name="Dobândă pentru credit auto"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Credite">
+ <account type="10" name="Credit auto"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/ro_RO/common.kmt b/kmymoney2/templates/ro_RO/common.kmt
new file mode 100644
index 0000000..f5c8250
--- /dev/null
+++ b/kmymoney2/templates/ro_RO/common.kmt
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/C/acctchrt_common.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Conturi comune</title>
+ <shortdesc>Un set de bază de conturi folosite de obicei</shortdesc>
+ <longdesc>Majoritatea utilizatorilor vor alege acest set de conturi. El conţine conturi frecvent folosite (cont curent, de economii, numerar, card de credit, venituri, cheltuieli obişnuite).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Sporuri"/>
+ <account type="12" name="Alte venituri"/>
+ <account type="12" name="Cadou primit"/>
+ <account type="12" name="Salar"/>
+ <account type="12" name="Venit din dobândă">
+ <account type="12" name="Alte dobânzi"/>
+ <account type="12" name="Dobânzi pentru depozit"/>
+ <account type="12" name="Dobânzi la vedere"/>
+ </account>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="Solduri la deschidere"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Active curente">
+ <account type="1" name="Cont curent"/>
+ <account type="3" name="Bani în portofel"/>
+ <account type="1" name="Cont de economii"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Divertisment">
+ <account type="13" name="Filme/Muzică"/>
+ <account type="13" name="Calătorii"/>
+ <account type="13" name="Recreere"/>
+ </account>
+ <account type="13" name="Cărţi"/>
+ <account type="13" name="Servirea mesei la restaurant"/>
+ <account type="13" name="Cadouri"/>
+ <account type="13" name="Cheltuieli medicale"/>
+ <account type="13" name="Caritate"/>
+ <account type="13" name="Transport public"/>
+ <account type="13" name="Automobil">
+ <account type="13" name="Combustibil"/>
+ <account type="13" name="Parcare"/>
+ <account type="13" name="Reparaţii şi întreţinere"/>
+ <account type="13" name="Taxe"/>
+ </account>
+ <account type="13" name="Cheltuieli bancare"/>
+ <account type="13" name="Educaţie"/>
+ <account type="13" name="Utilităţi">
+ <account type="13" name="Apa"/>
+ <account type="13" name="Gaz"/>
+ <account type="13" name="Salubrizare"/>
+ <account type="13" name="Energie electrică"/>
+ </account>
+ <account type="13" name="Îmbrăcăminte"/>
+ <account type="13" name="Reţete medicale"/>
+ <account type="13" name="Telefon"/>
+ <account type="13" name="Asigurări">
+ <account type="13" name="Asigurare auto"/>
+ <account type="13" name="Asigurare de viaţă"/>
+ <account type="13" name="Asigurare de sănătate"/>
+ </account>
+ <account type="13" name="Servicii online"/>
+ <account type="13" name="Taxe">
+ <account type="13" name="Impozit"/>
+ <account type="13" name="Amenzi"/>
+ <account type="13" name="Alte taxe"/>
+ </account>
+ <account type="13" name="Electronică"/>
+ <account type="13" name="Alimente"/>
+ <account type="13" name="Cablu TV"/>
+ <account type="13" name="Hobby-uri"/>
+ </account>
+ <account type="10" name="">
+ <account type="4" name="Card de credit"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/ro_RO/default_categories-template.kmt b/kmymoney2/templates/ro_RO/default_categories-template.kmt
new file mode 100644
index 0000000..20a61ed
--- /dev/null
+++ b/kmymoney2/templates/ro_RO/default_categories-template.kmt
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Categorii implicite KMyMoney 0.8</title>
+ <shortdesc>Un set de categorii de uz comun</shortdesc>
+ <longdesc>Folosiţi acest set de categorii pentru a evita creerea manuală unor categorii obişnuite.</longdesc>
+ <accounts>
+ <account type="12" name="" >
+ <account type="12" name="Venituri ca angajat" >
+ <account type="12" name="Compensaţii" />
+ <account type="12" name="Sporuri" />
+ <account type="12" name="Alte venituri ca angajat" />
+ <account type="12" name="Pensie" />
+ <account type="12" name="Salar" />
+ </account>
+ <account type="12" name="Venituri din investiţii" >
+ <account type="12" name="Câştiguri de capital de termen scurt" />
+ <account type="12" name="Câştiguri de capital de termen lung" />
+ <account type="12" name="Dividende" />
+ <account type="12" name="Dobândă" />
+ <account type="12" name="Dobândă neimpozitabilă" />
+ </account>
+ <account type="12" name="Venituri bancare" >
+ <account type="12" name="Dobândă încasată" />
+ <account type="12" name="Împrumut rambursat" />
+ </account>
+ <account type="12" name="Alte venituri" >
+ <account type="12" name="Pensie alimentară" />
+ <account type="12" name="Alocaţii" />
+ <account type="12" name="Ajutor social" />
+ <account type="12" name="Cadouri primite" />
+ <account type="12" name="Câştiguri din jocuri de noroc" />
+ <account type="12" name="Taxe returnate" />
+ <account type="12" name="Ajutor de şomaj" />
+ </account>
+ <account type="12" name="Bonus de pensionare" />
+ </account>
+ <account type="13" name="" >
+ <account type="13" name="Facturi şi plăţi lunare" >
+ <account type="13" name="Utilităţi" >
+ <account type="13" name="Energie electrică" />
+ <account type="13" name="Gaz" />
+ <account type="13" name="Apa şi canalizare" />
+ <account type="13" name="Ssalubrizare şi reciclare" />
+ </account>
+ <account type="13" name="Telefon" >
+ <account type="13" name="Apeluri locale" />
+ <account type="13" name="Apeluri internaţionale" />
+ <account type="13" name="Mobil" />
+ </account>
+ <account type="13" name="Chirie" />
+ <account type="13" name="Ipoteca" >
+ <account type="13" name="Dobândă" />
+ <account type="13" name="Împrumut" />
+ </account>
+ <account type="13" name="TV Cablu / Satelit" />
+ <account type="13" name="Internet" />
+ </account>
+ <account type="13" name="Cheltuieli bancare" >
+ <account type="13" name="Dobândă plătită" />
+ <account type="13" name="Comisioane bancare" />
+ <account type="13" name="Comision pentru fonduri insuficiente" />
+ </account>
+ <account type="13" name="Retragere numerar" />
+ <account type="13" name="Îngrijirea copilului" />
+ <account type="13" name="Îmbrăcăminte" />
+ <account type="13" name="Educaţie" >
+ <account type="13" name="Cărţi" />
+ <account type="13" name="Taxe" />
+ <account type="13" name="Taxe de şcolarizare" />
+ <account type="13" name="Împrumuturi" />
+ </account>
+ <account type="13" name="Mâncare" >
+ <account type="13" name="Masă servită în oraş" />
+ <account type="13" name="Alimente" />
+ </account>
+ <account type="13" name="Întreţinerea locuinţei" >
+ <account type="13" name="Reparaţii" />
+ <account type="13" name="Îmbunătăţiri" />
+ <account type="13" name="Curte şi grădină" />
+ </account>
+ <account type="13" name="Interiorul locuinţei" >
+ <account type="13" name="Mobilă" />
+ <account type="13" name="Decoraţii" />
+ </account>
+ <account type="13" name="Cadouri" />
+ <account type="13" name="Sănătate" >
+ <account type="13" name="Stomatolog" />
+ <account type="13" name="Doctor" />
+ <account type="13" name="Spitalizare" />
+ <account type="13" name="Reţete" />
+ <account type="13" name="Altele" />
+ </account>
+ <account type="13" name="Îngrijire personală" />
+ <account type="13" name="Concedii şi vacanţe" >
+ <account type="13" name="Cazare" />
+ <account type="13" name="Calătoria" />
+ <account type="13" name="Altele" />
+ <account type="13" name="Mâncare" />
+ </account>
+ <account type="13" name="Asigurare" >
+ <account type="13" name="Locuintă" />
+ <account type="13" name="Viată" />
+ <account type="13" name="Medicală" />
+ <account type="13" name="Auto" />
+ </account>
+ <account type="13" name="Cheltuieli la locul de muncă" >
+ <account type="13" name="Rambursate" />
+ <account type="13" name="Nerambursate" />
+ </account>
+ <account type="13" name="Timp liber" >
+ <account type="13" name="Divertisment" />
+ <account type="13" name="Hobby-uri" />
+ <account type="13" name="Sport" />
+ </account>
+ <account type="13" name="Taxe legale" />
+ <account type="13" name="Alte cheltuieli" />
+ <account type="13" name="Îngrijirea animalelor de casă" >
+ <account type="13" name="Mâncare" />
+ <account type="13" name="Consumabile" />
+ <account type="13" name="Cheltuieli veterinare" />
+ </account>
+ <account type="13" name="Retirement Accounts" />
+ <account type="13" name="Taxes" />
+ <account type="13" name="Transport" >
+ <account type="13" name="Automobil" >
+ <account type="13" name="Combustibil" />
+ <account type="13" name="Impozit" />
+ <account type="13" name="Service" />
+ <account type="13" name="Parcare" />
+ <account type="13" name="Asigurare" />
+ <account type="13" name="Leasing" />
+ <account type="13" name="Închiriere" />
+ <account type="13" name="Înmatriculare" />
+ </account>
+ <account type="13" name="Transport public" />
+ </account>
+ <account type="13" name="Uz casnic" />
+ <account type="13" name="Caritate" />
+ <account type="13" name="Taxe contabile" />
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/ro_RO/homeloan.kmt b/kmymoney2/templates/ro_RO/homeloan.kmt
new file mode 100644
index 0000000..ce3ece2
--- /dev/null
+++ b/kmymoney2/templates/ro_RO/homeloan.kmt
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/C/acctchrt_homeloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Credit ipotecar</title>
+ <shortdesc>Conturi pentru un credit ipotecar şi dobânzile aferente</shortdesc>
+ <longdesc>Aţi avea nevoie de acest set de conturi dacă aveţi un credit ipotecar (creditul ipotecar, dobânda).</longdesc>
+ <accounts>
+ <account type="10" name="">
+ <account type="10" name="Credit ipotecar"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Dobândă">
+ <account type="13" name="Dobândă ipotecară"/>
+ </account>
+ </account>
+ <account type="10" name=""/>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/ru_RU/Makefile.am b/kmymoney2/templates/ru_RU/Makefile.am
new file mode 100644
index 0000000..192797d
--- /dev/null
+++ b/kmymoney2/templates/ru_RU/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/ru_RU
+
+template_DATA = default_accounts.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/ru_RU/default_accounts.kmt b/kmymoney2/templates/ru_RU/default_accounts.kmt
new file mode 100644
index 0000000..0cd1b87
--- /dev/null
+++ b/kmymoney2/templates/ru_RU/default_accounts.kmt
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Персональные финансы</title>
+ <shortdesc>Учёт персональных финансов</shortdesc>
+ <longdesc>Статьи доходов и затрат для учёта персональных финансов</longdesc>
+ <accounts>
+ <account name="" type="13">
+ <account name="Оплата счетов" type="13">
+ <account name="Телефон" type="13"/>
+ <account name="Квартира" type="13"/>
+ <account name="Электричество" type="13"/>
+ <account name="Интернет" type="13"/>
+ <account name="ТВ" type="13"/>
+ <account name="Газ" type="13"/>
+ <account name="Отопление" type="13"/>
+ <account name="Водоснабжение" type="13"/>
+ </account>
+ <account name="Транспорт" type="13">
+ <account name="Содержание автомобиля" type="13"/>
+ <account name="Бензин" type="13"/>
+ <account name="Общественный транспорт" type="13"/>
+ </account>
+ <account name="Питание" type="13">
+ <account name="Продукты" type="13"/>
+ <account name="Общественное питание" type="13"/>
+ </account>
+ <account name="Товары" type="13">
+ <account name="Косметика и парфюмерия" type="13"/>
+ <account name="Одежда и обувь" type="13"/>
+ <account name="Бытовая техника" type="13"/>
+ </account>
+ <account name="Услуги" type="13">
+ <account name="Уход за ребёнком" type="13"/>
+ <account name="Образование" type="13"/>
+ <account name="Медицина" type="13"/>
+ <account name="Прочие услуги" type="13"/>
+ </account>
+ <account name="Домашнее хозяйство" type="13"/>
+ <account name="Досуг" type="13">
+ <account name="Книги и журналы" type="13"/>
+ <account name="Театр и кино" type="13"/>
+ <account name="Спорт" type="13"/>
+ <account name="Музыка" type="13"/>
+ <account name="Развлечения" type="13"/>
+ </account>
+ <account name="Прочее" type="13">
+ <account name="Отпуск" type="13"/>
+ <account name="Подарки" type="13"/>
+ <account name="Страхование" type="13"/>
+ <account name="Выплата процентов" type="13"/>
+ <account name="Налоги" type="13"/>
+ <account name="Другие расходы" type="13"/>
+ </account>
+ </account>
+
+ <account name="" type="12">
+ <account name="Работа" type="12">
+ <account name="Заработная плата" type="12"/>
+ <account name="Премиальные" type="12"/>
+ <account name="Подработка" type="12"/>
+ </account>
+ <account name="Инвестиции" type="12">
+ <account name="Банковские проценты" type="12"/>
+ <account name="Доход по ценным бумагам" type="12"/>
+ <account name="Сдача жилья в аренду" type="12"/>
+ </account>
+ <account name="Прочее" type="12">
+ <account name="Стипендия" type="12"/>
+ <account name="Пенсия" type="12"/>
+ <account name="Помощь родственников" type="12"/>
+ <account name="Налоговые льготы" type="12"/>
+ <account name="Пособия" type="12"/>
+ <account name="Другие доходы" type="12"/>
+ </account>
+ </account>
+
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/sk/Makefile.am b/kmymoney2/templates/sk/Makefile.am
new file mode 100644
index 0000000..f963d21
--- /dev/null
+++ b/kmymoney2/templates/sk/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/sk
+
+template_DATA = homeown.kmt fixedassets.kmt retiremt.kmt eduloan.kmt homeloan.kmt renter.kmt common.kmt spouseretire.kmt currency.kmt brokerage.kmt childcare.kmt cdmoneymkt.kmt carloan.kmt otherloan.kmt spouseinc.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/sk/brokerage.kmt b/kmymoney2/templates/sk/brokerage.kmt
new file mode 100644
index 0000000..1082800
--- /dev/null
+++ b/kmymoney2/templates/sk/brokerage.kmt
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/sk/acctchrt_brokerage.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Investičné účty</title>
+ <shortdesc>Účty, ktoré súvisia s investovaním</shortdesc>
+ <longdesc>Zvoľte si túto sadu účtov, vlastníte investície (akcie, dlhopisy, podielové listy).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Poplatky"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Dividendový príjem"/>
+ <account type="12" name="Úrokový príjem">
+ <account type="12" name="Úrok dlhopisu"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Investície">
+ <account type="7" name="Brokerov účet"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/sk/carloan.kmt b/kmymoney2/templates/sk/carloan.kmt
new file mode 100644
index 0000000..a85f99a
--- /dev/null
+++ b/kmymoney2/templates/sk/carloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/sk/acctchrt_carloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Úver na auto</title>
+ <shortdesc>Účty pre úver na auto</shortdesc>
+ <longdesc>Zvoľte si túto sadu účtov, ak ste si zobrali pôžičku na auto.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Úrok">
+ <account type="13" name="Úrok z úveru na dopravný prostriedok"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Dlhy">
+ <account type="10" name="Úver na dopravný prostriedok"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/sk/cdmoneymkt.kmt b/kmymoney2/templates/sk/cdmoneymkt.kmt
new file mode 100644
index 0000000..0a54c59
--- /dev/null
+++ b/kmymoney2/templates/sk/cdmoneymkt.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/sk/acctchrt_cdmoneymkt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Depozitný certifikát a peňažný trh</title>
+ <shortdesc>Účty pre depozitné certifikáty a investície na peňažnom trhu</shortdesc>
+ <longdesc>Zvoľte si túto sadu účtov, ak vlastníte depozitné certifikáty alebo investujete na peňažnom trhu.</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Úrokový príjem">
+ <account type="12" name="Úrok depozitného certifikátu"/>
+ <account type="12" name="Úrok peňažného trhu"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Bežné aktíva">
+ <account type="1" name="Peňažný trh"/>
+ <account type="1" name="Depozitný certifikát"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/sk/childcare.kmt b/kmymoney2/templates/sk/childcare.kmt
new file mode 100644
index 0000000..d58d5cb
--- /dev/null
+++ b/kmymoney2/templates/sk/childcare.kmt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/sk/acctchrt_childcare.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Výdavky na staroslivosť o dieťa</title>
+ <shortdesc>Účet na zaznamenávanie výdavkov na starostlivosť o dieťa</shortdesc>
+ <longdesc>Zvoľte si túto sadu účtov, ak máte výdavky na starostlivosť o dieťa.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Staroslivosť o dieťa"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/sk/common.kmt b/kmymoney2/templates/sk/common.kmt
new file mode 100644
index 0000000..439294a
--- /dev/null
+++ b/kmymoney2/templates/sk/common.kmt
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/sk/acctchrt_common.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Bežné účty</title>
+ <shortdesc>Základná sada najčastejšie používaných účtov</shortdesc>
+ <longdesc>Väčšina užívateľov si zvolí túto sadu, lebo obsahuje bežne používané účty (šeky, úspory, hotovosť, platobné karty, príjmy, bežné výdaje).</longdesc>
+ <accounts>
+ <account type="16" name="">
+ <account type="16" name="Počiatočný stav"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Aktuálne aktíva">
+ <account type="1" name="Šekový účet"/>
+ <account type="3" name="Hotovosť v peňaženke"/>
+ <account type="1" name="Úspory"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Jedáleň"/>
+ <account type="13" name="MHD"/>
+ <account type="13" name="Vzdelávanie"/>
+ <account type="13" name="Bežné služby">
+ <account type="13" name="Plyn"/>
+ <account type="13" name="Zbierky bezcenností"/>
+ <account type="13" name="Voda"/>
+ <account type="13" name="Elektrická energia"/>
+ </account>
+ <account type="13" name="Predplatné"/>
+ <account type="13" name="Telefón"/>
+ <account type="13" name="Online služby"/>
+ <account type="13" name="Potraviny"/>
+ <account type="13" name="Zábava">
+ <account type="13" name="Cestovanie"/>
+ <account type="13" name="Rekreácia"/>
+ <account type="13" name="Hudba/Film"/>
+ </account>
+ <account type="13" name="Knihy"/>
+ <account type="13" name="Dary"/>
+ <account type="13" name="Lekárske ošetrenie"/>
+ <account type="13" name="Charita"/>
+ <account type="13" name="Auto">
+ <account type="13" name="Benzín"/>
+ <account type="13" name="Opravy a udržiavanie"/>
+ <account type="13" name="Parkovné"/>
+ <account type="13" name="Poplatky"/>
+ </account>
+ <account type="13" name="Poplatky za bankové služby"/>
+ <account type="13" name="Ošatenie"/>
+ <account type="13" name="Zásobovanie"/>
+ <account type="13" name="Poistenie">
+ <account type="13" name="Poistenie auta"/>
+ <account type="13" name="Životné poistenie"/>
+ <account type="13" name="Zdravotné poistenie"/>
+ </account>
+ <account type="13" name="Úpravy"/>
+ <account type="13" name="Odvody a dane">
+ <account type="13" name="Miestne dane a poplatky"/>
+ <account type="13" name="Sociálne poistenie"/>
+ <account type="13" name="Celoštátne dane"/>
+ <account type="13" name="Zdravotná starostlivosť"/>
+ <account type="13" name="Ostatné dane"/>
+ </account>
+ <account type="13" name="Počítač"/>
+ <account type="13" name="Práčovňa/Čistiareň"/>
+ <account type="13" name="Rôzne"/>
+ <account type="13" name="Káblovka"/>
+ <account type="13" name="Záľuby"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Bonus"/>
+ <account type="12" name="Ostatné príjmy"/>
+ <account type="12" name="Prijaté dary"/>
+ <account type="12" name="Mzda"/>
+ <account type="12" name="Úrokový príjem">
+ <account type="12" name="Šekový úrok"/>
+ <account type="12" name="Ostatné úroky"/>
+ <account type="12" name="Úroky z úspor"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Splatné účty">
+ <account type="4" name="Platobná karta"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/sk/currency.kmt b/kmymoney2/templates/sk/currency.kmt
new file mode 100644
index 0000000..828f264
--- /dev/null
+++ b/kmymoney2/templates/sk/currency.kmt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/sk/acctchrt_currency.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Účet na obchodovanie s menou</title>
+ <shortdesc>Účet na obchodovanie a konvertovanie zahraničných mien</shortdesc>
+ <longdesc>Tento účet budete potrebovať, ak budete konvertovať zahraničné meny. Poznámka: účet je aktuálne v DEM; ak chcete, možete to zmeniť.</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Investície"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/sk/eduloan.kmt b/kmymoney2/templates/sk/eduloan.kmt
new file mode 100644
index 0000000..64d2004
--- /dev/null
+++ b/kmymoney2/templates/sk/eduloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/sk/acctchrt_eduloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Študijná pôžička</title>
+ <shortdesc>Účty pre študijnú pôžičku</shortdesc>
+ <longdesc>Zvoľte si túto sadu účtov, ak ste si zobrali pôžičku na štúdium.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Úrok">
+ <account type="13" name="Úrok zo študijnej pôžičky"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Dlhy">
+ <account type="10" name="Študijná pôžička"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/sk/fixedassets.kmt b/kmymoney2/templates/sk/fixedassets.kmt
new file mode 100644
index 0000000..43d4b31
--- /dev/null
+++ b/kmymoney2/templates/sk/fixedassets.kmt
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/sk/acctchrt_fixedassets.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Fixné aktíva</title>
+ <shortdesc>Účty pre zaznamenávanie rozsiahlych fixných aktív</shortdesc>
+ <longdesc>Zvoľte si túto sadu účtov, ak vlastníte veľké fixné aktíva (dom, dopravné prostriedky, ostatné aktíva).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Fixné aktíva">
+ <account type="9" name="Dopravný prostriedok"/>
+ <account type="9" name="Ostatné aktíva"/>
+ <account type="9" name="Dom"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/sk/homeloan.kmt b/kmymoney2/templates/sk/homeloan.kmt
new file mode 100644
index 0000000..ca1fc90
--- /dev/null
+++ b/kmymoney2/templates/sk/homeloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/sk/acctchrt_homeloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Hypotekárny úver</title>
+ <shortdesc>Účty pre hypotekárny úver a s tým súvisiaci úrok</shortdesc>
+ <longdesc>Zvoľte si túto sadu účtov, ak ste si zobrali úver na dom (hypoteku).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Úrok">
+ <account type="13" name="Hypotekárny úrok"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Dlhy">
+ <account type="10" name="Hypotekárny úver"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/sk/homeown.kmt b/kmymoney2/templates/sk/homeown.kmt
new file mode 100644
index 0000000..d7d8963
--- /dev/null
+++ b/kmymoney2/templates/sk/homeown.kmt
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/sk/acctchrt_homeown.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Výdaje z vlastníctva domu</title>
+ <shortdesc>Výdaje, ktoré sú spojené s vlastnením domu</shortdesc>
+ <longdesc>Zvoľte si túto sadu účtov, ak vlastníte dom. Táto sada poskytuje skupinu účtov na sledovanie výdajov na dom (poistenie, dane, opravy domu).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Poistenie">
+ <account type="13" name="Poistenie"/>
+ </account>
+ <account type="13" name="Dane">
+ <account type="13" name="Majetková daň"/>
+ </account>
+ <account type="13" name="Opravy domu"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/sk/otherloan.kmt b/kmymoney2/templates/sk/otherloan.kmt
new file mode 100644
index 0000000..67b8ca7
--- /dev/null
+++ b/kmymoney2/templates/sk/otherloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/sk/acctchrt_otherloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Ostatné pôžičky</title>
+ <shortdesc>Účty pre zaznamenávanie ostatných pôžičiek</shortdesc>
+ <longdesc>Zvoľte si túto sadu účtov, ak máte aj inú než hypotekárnu pôžičku.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Úrok">
+ <account type="13" name="Ostatné úroky"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Dlhy">
+ <account type="10" name="Iné pôžičky"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/sk/renter.kmt b/kmymoney2/templates/sk/renter.kmt
new file mode 100644
index 0000000..04ca9ab
--- /dev/null
+++ b/kmymoney2/templates/sk/renter.kmt
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/sk/acctchrt_renter.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Výdavky na nájomné</title>
+ <shortdesc>Výdavky spojené s nájmom domu</shortdesc>
+ <longdesc>Túto sadu účtov si zvoľte, ak si prenajímate dom alebo byt (nájomné, poistenie)</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Nájomné"/>
+ <account type="13" name="Poistenie">
+ <account type="13" name="Poistenie nájomného"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/sk/retiremt.kmt b/kmymoney2/templates/sk/retiremt.kmt
new file mode 100644
index 0000000..4502136
--- /dev/null
+++ b/kmymoney2/templates/sk/retiremt.kmt
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/sk/acctchrt_retiremt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Dôchodkové účty</title>
+ <shortdesc>Dôchodkový účet so vzťahom na investičné podúčty</shortdesc>
+ <longdesc>Zvoľte si túto sadu účtov, ak máte účty, ktoré vám prinášajú dôchodok (akcie, dlhopisy, podielové listy, index fondov).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Investície">
+ <account type="7" name="Dôchodok"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/sk/spouseinc.kmt b/kmymoney2/templates/sk/spouseinc.kmt
new file mode 100644
index 0000000..0477a01
--- /dev/null
+++ b/kmymoney2/templates/sk/spouseinc.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/sk/acctchrt_spouseinc.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Manželov/Manželkin príjem</title>
+ <shortdesc>Účty na osobitné zaznamenávanie príjmu životného partnera</shortdesc>
+ <longdesc>Túto sadu účtov si zvoľte, ak váš životný partner pracuje.</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Mzda (Partnerova)"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Dane a poplatky (Partnerove)">
+ <account type="13" name="Sociálne poistenie"/>
+ <account type="13" name="Zdravotná starostlivosť"/>
+ <account type="13" name="Miestne dane"/>
+ <account type="13" name="Celoštátne dane"/>
+ <account type="13" name="Ostatné dane"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/sk/spouseretire.kmt b/kmymoney2/templates/sk/spouseretire.kmt
new file mode 100644
index 0000000..04c1c89
--- /dev/null
+++ b/kmymoney2/templates/sk/spouseretire.kmt
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/sk/acctchrt_spouseretire.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Manželov/Manželkin dôchodok</title>
+ <shortdesc>Dôchodkový účet so vzťahom na investičný účet životného partnera</shortdesc>
+ <longdesc>Zvoľte si túto sadu účtov, ak ste investovali v partnerovom mene (akcie, dlhopisy, podielové listy).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Investície">
+ <account type="7" name="Partnerov dôchodok"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/tr_TR/Makefile.am b/kmymoney2/templates/tr_TR/Makefile.am
new file mode 100644
index 0000000..f477278
--- /dev/null
+++ b/kmymoney2/templates/tr_TR/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/tr_TR
+
+template_DATA = fixedassets.kmt homeloan.kmt common.kmt brokerage.kmt TEKDUZ.kmt cdmoneymkt.kmt checkbook.kmt carloan.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/tr_TR/TEKDUZ.kmt b/kmymoney2/templates/tr_TR/TEKDUZ.kmt
new file mode 100644
index 0000000..e35d09f
--- /dev/null
+++ b/kmymoney2/templates/tr_TR/TEKDUZ.kmt
@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/tr_TR/acctchrt_TEKDUZ.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>TEK DÜZEN</title>
+ <shortdesc>Tek Düzen Hesap Planı</shortdesc>
+ <longdesc>Tek Düzen Hesap Planı</longdesc>
+ <accounts>
+ <account type="13" name=""/>
+ <account type="13" name=""/>
+ <account type="12" name=""/>
+ <account type="12" name=""/>
+ <account type="13" name=""/>
+ <account type="12" name=""/>
+ <account type="3" name=""/>
+ <account type="10" name=""/>
+ <account type="10" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="12" name=""/>
+ <account type="13" name=""/>
+ <account type="9" name=""/>
+ <account type="10" name=""/>
+ <account type="16" name=""/>
+ <account type="9" name=""/>
+ <account type="10" name=""/>
+ <account type="16" name=""/>
+ <account type="10" name=""/>
+ <account type="9" name=""/>
+ <account type="13" name=""/>
+ <account type="10" name=""/>
+ <account type="16" name=""/>
+ <account type="9" name=""/>
+ <account type="12" name=""/>
+ <account type="16" name=""/>
+ <account type="10" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="12" name=""/>
+ <account type="13" name=""/>
+ <account type="10" name=""/>
+ <account type="10" name=""/>
+ <account type="10" name=""/>
+ <account type="12" name=""/>
+ <account type="9" name=""/>
+ <account type="13" name=""/>
+ <account type="10" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="12" name=""/>
+ <account type="10" name=""/>
+ <account type="12" name=""/>
+ <account type="9" name=""/>
+ <account type="12" name=""/>
+ <account type="13" name=""/>
+ <account type="12" name=""/>
+ <account type="13" name=""/>
+ <account type="12" name=""/>
+ <account type="9" name=""/>
+ <account type="10" name=""/>
+ <account type="9" name=""/>
+ <account type="10" name=""/>
+ <account type="13" name=""/>
+ <account type="9" name=""/>
+ <account type="16" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="12" name=""/>
+ <account type="16" name="">
+ <account type="16" name="A&#231;&#253;l&#253;&#254; Bakiyeleri"/>
+ </account>
+ <account type="13" name=""/>
+ <account type="10" name=""/>
+ <account type="12" name=""/>
+ <account type="13" name=""/>
+ <account type="13" name=""/>
+ <account type="9" name=""/>
+ <account type="10" name=""/>
+ <account type="12" name=""/>
+ <account type="9" name=""/>
+ <account type="13" name=""/>
+ <account type="12" name=""/>
+ <account type="9" name=""/>
+ <account type="13" name=""/>
+ <account type="13" name=""/>
+ <account type="13" name=""/>
+ <account type="16" name=""/>
+ <account type="13" name=""/>
+ <account type="10" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="16" name=""/>
+ <account type="10" name=""/>
+ <account type="10" name=""/>
+ <account type="10" name=""/>
+ <account type="13" name=""/>
+ <account type="12" name=""/>
+ <account type="9" name=""/>
+ <account type="10" name=""/>
+ <account type="13" name=""/>
+ <account type="13" name=""/>
+ <account type="12" name=""/>
+ <account type="13" name=""/>
+ <account type="10" name=""/>
+ <account type="9" name=""/>
+ <account type="10" name=""/>
+ <account type="12" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="13" name=""/>
+ <account type="10" name=""/>
+ <account type="16" name=""/>
+ <account type="12" name=""/>
+ <account type="9" name=""/>
+ <account type="10" name=""/>
+ <account type="10" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="12" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="12" name=""/>
+ <account type="12" name=""/>
+ <account type="12" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="12" name=""/>
+ <account type="9" name=""/>
+ <account type="1" name=""/>
+ <account type="12" name=""/>
+ <account type="10" name=""/>
+ <account type="16" name=""/>
+ <account type="16" name=""/>
+ <account type="10" name=""/>
+ <account type="16" name=""/>
+ <account type="12" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="13" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="13" name=""/>
+ <account type="13" name=""/>
+ <account type="12" name=""/>
+ <account type="12" name=""/>
+ <account type="9" name=""/>
+ <account type="10" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="12" name=""/>
+ <account type="16" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="12" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="16" name=""/>
+ <account type="9" name=""/>
+ <account type="10" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="10" name=""/>
+ <account type="13" name=""/>
+ <account type="13" name=""/>
+ <account type="9" name=""/>
+ <account type="12" name=""/>
+ <account type="10" name=""/>
+ <account type="16" name=""/>
+ <account type="16" name=""/>
+ <account type="13" name=""/>
+ <account type="13" name=""/>
+ <account type="13" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="12" name=""/>
+ <account type="10" name=""/>
+ <account type="16" name=""/>
+ <account type="10" name=""/>
+ <account type="10" name=""/>
+ <account type="10" name=""/>
+ <account type="13" name=""/>
+ <account type="12" name=""/>
+ <account type="12" name=""/>
+ <account type="13" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="12" name=""/>
+ <account type="13" name=""/>
+ <account type="12" name=""/>
+ <account type="13" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="10" name=""/>
+ <account type="13" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="10" name=""/>
+ <account type="10" name=""/>
+ <account type="9" name=""/>
+ <account type="13" name=""/>
+ <account type="12" name=""/>
+ <account type="9" name=""/>
+ <account type="13" name=""/>
+ <account type="9" name=""/>
+ <account type="9" name=""/>
+ <account type="13" name=""/>
+ <account type="10" name=""/>
+ <account type="13" name=""/>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/tr_TR/brokerage.kmt b/kmymoney2/templates/tr_TR/brokerage.kmt
new file mode 100644
index 0000000..ab0f7a1
--- /dev/null
+++ b/kmymoney2/templates/tr_TR/brokerage.kmt
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/tr_TR/acctchrt_brokerage.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Menkul Kıymet Yatırımları</title>
+ <shortdesc>Aracı kurumlar nezdinde işlem gören menkul kıymet yatırımları</shortdesc>
+ <longdesc>Aracı kurumlar nezdinde işlem gören yatırımlarınızı (hisse senedi, tahvil/bono, A/B tipi yatırım fonları, katılma belgeleri, faiz, temettü) takip etmenizi sağlayan hesaplar</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Komisyonlar"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="Temettü Geliri"/>
+ <account type="12" name="Faiz Geliri">
+ <account type="12" name="Tahvil/Bono Faizi"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Yatırımlar">
+ <account type="7" name="Aracı Kurum Hesabı"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/tr_TR/carloan.kmt b/kmymoney2/templates/tr_TR/carloan.kmt
new file mode 100644
index 0000000..6857fd2
--- /dev/null
+++ b/kmymoney2/templates/tr_TR/carloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/tr_TR/acctchrt_carloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Taşıt Kredisi</title>
+ <shortdesc>Taşıt Kredisi ve faizleri</shortdesc>
+ <longdesc>Taşıt kredisi ve faizlerini takip etmenizi sağlayan hesaplar (taşıt kredisi, kredi faizleri).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Faiz">
+ <account type="13" name="Taşıt Kredi Faizi"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Krediler">
+ <account type="10" name="Taşıt Kredisi"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/tr_TR/cdmoneymkt.kmt b/kmymoney2/templates/tr_TR/cdmoneymkt.kmt
new file mode 100644
index 0000000..87eff05
--- /dev/null
+++ b/kmymoney2/templates/tr_TR/cdmoneymkt.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/tr_TR/acctchrt_cdmoneymkt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Repo, Mevduat Sertifikası</title>
+ <shortdesc>Repo, Mevduat Sertifikası ve diğer para piyasası araçları</shortdesc>
+ <longdesc>Repo, Mevduat Sertifikası gibi para piyasası araçlarınızı takip etmenizi sağlayan hesaplar</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="Faiz Geliri">
+ <account type="12" name="MS Faizi"/>
+ <account type="12" name="Repo Faizi"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Cari Varlıklar">
+ <account type="1" name="Repo"/>
+ <account type="1" name="Mevduat Sertifikası"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/tr_TR/checkbook.kmt b/kmymoney2/templates/tr_TR/checkbook.kmt
new file mode 100644
index 0000000..1f7fc2b
--- /dev/null
+++ b/kmymoney2/templates/tr_TR/checkbook.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/tr_TR/acctchrt_checkbook.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Çek Defteri/Maaş</title>
+ <shortdesc>GnuCash kullanmanız için gereken asgari hesaplar</shortdesc>
+ <longdesc>Çek/maaş hesabınızı takip etmek için bu planı kullanın. Daha sonra ihtiyaç duyarsanız, gelir ve giderlerinizi daha detaylı takip etmenizi sağlayacak bir plana geçersiniz.</longdesc>
+ <accounts>
+ <account type="13" name=""/>
+ <account type="12" name=""/>
+ <account type="16" name="">
+ <account type="16" name="Açılış Bakiyeleri"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Cari Varlıklar">
+ <account type="1" name="Çek/Maaş Hesabı"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/tr_TR/common.kmt b/kmymoney2/templates/tr_TR/common.kmt
new file mode 100644
index 0000000..9b5b625
--- /dev/null
+++ b/kmymoney2/templates/tr_TR/common.kmt
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/tr_TR/acctchrt_common.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Genel</title>
+ <shortdesc>Kişisel kullanıma uygun, günlük hayatta sık rastlanan kalemler</shortdesc>
+ <longdesc>Pek çok kişinin tercih edeceği, yaygın kullanılan kalemleri takip etmenizi sağlayan hesaplar</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="İkramiye"/>
+ <account type="12" name="Diğer Gelirler"/>
+ <account type="12" name="Hediye Çekleri"/>
+ <account type="12" name="Maaş"/>
+ <account type="12" name="Faiz Geliri">
+ <account type="12" name="Diğer Faizler"/>
+ <account type="12" name="Vadeli Faizi"/>
+ <account type="12" name="Vadesiz Faizi"/>
+ </account>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="Açılış Bakiyeleri"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="Cari Varlıklar">
+ <account type="1" name="Vadesiz/Maaş Hesabı"/>
+ <account type="3" name="Nakit"/>
+ <account type="1" name="Vadeli Hesap"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="Eğlence">
+ <account type="13" name="Müzik/Sinema"/>
+ <account type="13" name="Seyahat"/>
+ <account type="13" name="Sosyal Faaliyetler"/>
+ </account>
+ <account type="13" name="Kitap"/>
+ <account type="13" name="Lokanta"/>
+ <account type="13" name="Hediyeler"/>
+ <account type="13" name="Sağlık Harcamaları"/>
+ <account type="13" name="Bağışlar"/>
+ <account type="13" name="Toplu Taşıma"/>
+ <account type="13" name="Taşıt">
+ <account type="13" name="Akaryakıt"/>
+ <account type="13" name="Park"/>
+ <account type="13" name="Bakım ve Onarım"/>
+ <account type="13" name="M.T.V. Taksitleri"/>
+ </account>
+ <account type="13" name="Banka İşlem Masrafları"/>
+ <account type="13" name="Eğitim"/>
+ <account type="13" name="Gayrımenkul Giderleri">
+ <account type="13" name="Su"/>
+ <account type="13" name="D.Gaz"/>
+ <account type="13" name="Kapıcı"/>
+ <account type="13" name="Elektrik"/>
+ </account>
+ <account type="13" name="Kırtasiye"/>
+ <account type="13" name="Giyecek"/>
+ <account type="13" name="Abonelik/Üyelik"/>
+ <account type="13" name="Telefon"/>
+ <account type="13" name="Sigorta">
+ <account type="13" name="Taşıt Sigortası"/>
+ <account type="13" name="Hayat Sigortası"/>
+ <account type="13" name="Sağlık Sigortası"/>
+ </account>
+ <account type="13" name="Internet"/>
+ <account type="13" name="Diğer"/>
+ <account type="13" name="Vergiler">
+ <account type="13" name="Emlak"/>
+ <account type="13" name="Çevre Temizlik"/>
+ <account type="13" name="KDV"/>
+ <account type="13" name="ÖTV/ÖİV"/>
+ <account type="13" name="Diğer Vergiler"/>
+ </account>
+ <account type="13" name="Bilgisayar"/>
+ <account type="13" name="Temizlikçi/Kuru Temizleme"/>
+ <account type="13" name="Çeşitli"/>
+ <account type="13" name="Market/Pazar"/>
+ <account type="13" name="KabloTV/Uydu"/>
+ <account type="13" name="Hobi"/>
+ </account>
+ <account type="10" name="">
+ <account type="4" name="Kredi Kartı"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/tr_TR/fixedassets.kmt b/kmymoney2/templates/tr_TR/fixedassets.kmt
new file mode 100644
index 0000000..8de2e09
--- /dev/null
+++ b/kmymoney2/templates/tr_TR/fixedassets.kmt
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/tr_TR/acctchrt_fixedassets.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Maddi Duran Varlıklar</title>
+ <shortdesc>Büyük sabit varlıklar</shortdesc>
+ <longdesc>Maddi duran varlıklarınzı (ev, taşıt, yazlık, arsa, vs) takip etmenizi sağlayan hesaplar</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="Maddi Duran Varlıklar">
+ <account type="9" name="Taşıt"/>
+ <account type="9" name="Diğer Varlıklar"/>
+ <account type="9" name="Ev"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/tr_TR/homeloan.kmt b/kmymoney2/templates/tr_TR/homeloan.kmt
new file mode 100644
index 0000000..bfd4a7e
--- /dev/null
+++ b/kmymoney2/templates/tr_TR/homeloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/tr_TR/acctchrt_homeloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Ev Kredisi</title>
+ <shortdesc>Ev Kredisi ve faizleri</shortdesc>
+ <longdesc>Ev kredisi ve faizlerini takip etmenizi sağlayan hesaplar (ev kredisi, kredi faizleri).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="Faiz">
+ <account type="13" name="Kredi Faizi"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="Krediler">
+ <account type="10" name="Ev Kredisi"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/zh_CN/Makefile.am b/kmymoney2/templates/zh_CN/Makefile.am
new file mode 100644
index 0000000..d5f71c7
--- /dev/null
+++ b/kmymoney2/templates/zh_CN/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/zh_CN
+
+template_DATA = homeown.kmt full.kmt fixedassets.kmt retiremt.kmt eduloan.kmt homeloan.kmt default_accounts.kmt renter.kmt common.kmt spouseretire.kmt brokerage.kmt childcare.kmt cdmoneymkt.kmt checkbook.kmt carloan.kmt otherloan.kmt business.kmt spouseinc.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/zh_CN/brokerage.kmt b/kmymoney2/templates/zh_CN/brokerage.kmt
new file mode 100644
index 0000000..b76c89a
--- /dev/null
+++ b/kmymoney2/templates/zh_CN/brokerage.kmt
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/zh_CN/acctchrt_brokerage.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>投资帐户</title>
+ <shortdesc>Brokerage account with related investment accounts (stock, bond, mutual fund, index fund, interest, dividend)</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have investments (stock, bond, mutual fund, index fund, interest, dividend).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="佣金"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="股利收入"/>
+ <account type="12" name="利息收入">
+ <account type="12" name="债券利率"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="投资">
+ <account type="7" name="经纪帐户"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/zh_CN/business.kmt b/kmymoney2/templates/zh_CN/business.kmt
new file mode 100644
index 0000000..5544d4c
--- /dev/null
+++ b/kmymoney2/templates/zh_CN/business.kmt
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/zh_CN/acctchrt_business.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>商业帐户</title>
+ <shortdesc>Full chart of accounts for a business.</shortdesc>
+ <longdesc>Users running a business want to select this instead of other choices. This includes all the accounts you need to run a most businesses, including Payables, Receivables, Income, and Expenses.</longdesc>
+ <accounts>
+ <account type="10" name="">
+ <account type="4" name="信用卡"/>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="留存收益"/>
+ <account type="16" name="期初余额"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="设备租赁"/>
+ <account type="13" name="杂项"/>
+ <account type="13" name="修理">
+ <account type="13" name="设备维修"/>
+ <account type="13" name="建筑修复"/>
+ <account type="13" name="电脑维修"/>
+ <account type="13" name="清洁卫生费"/>
+ </account>
+ <account type="13" name="邮资及运送"/>
+ <account type="13" name="教育"/>
+ <account type="13" name="折旧"/>
+ <account type="13" name="办公用品"/>
+ <account type="13" name="专业费用">
+ <account type="13" name="律师费"/>
+ <account type="13" name="会计"/>
+ </account>
+ <account type="13" name="印刷和复印"/>
+ <account type="13" name="用餐"/>
+ <account type="13" name="应得物和捐款"/>
+ <account type="13" name="执照和许可证"/>
+ <account type="13" name="现金折扣"/>
+ <account type="13" name="薪金支出"/>
+ <account type="13" name="境外服务"/>
+ <account type="13" name="调整"/>
+ <account type="13" name="旅行和娱乐">
+ <account type="13" name="用餐"/>
+ <account type="13" name="旅行"/>
+ <account type="13" name="娱乐"/>
+ </account>
+ <account type="13" name="慈善"/>
+ <account type="13" name="汽车">
+ <account type="13" name="维修和保养"/>
+ <account type="13" name="燃气"/>
+ <account type="13" name="停车"/>
+ <account type="13" name="收费"/>
+ </account>
+ <account type="13" name="租金"/>
+ <account type="13" name="水电费">
+ <account type="13" name="燃气"/>
+ <account type="13" name="垃圾收集"/>
+ <account type="13" name="因特网"/>
+ <account type="13" name="手机"/>
+ <account type="13" name="电报"/>
+ <account type="13" name="电"/>
+ <account type="13" name="水"/>
+ <account type="13" name="电话"/>
+ </account>
+ <account type="13" name="保险">
+ <account type="13" name="残疾保险金"/>
+ <account type="13" name="工作者Comp"/>
+ <account type="13" name="责任保险"/>
+ </account>
+ <account type="13" name="银行服务收费"/>
+ <account type="13" name="税收">
+ <account type="13" name="联邦"/>
+ <account type="13" name="FICA"/>
+ <account type="13" name="财产"/>
+ <account type="13" name="本地"/>
+ <account type="13" name="Emp-FICA"/>
+ <account type="13" name="其它税"/>
+ <account type="13" name="州/省"/>
+ <account type="13" name="FUTA"/>
+ </account>
+ <account type="13" name="书籍"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="利息收入"/>
+ <account type="12" name="销售"/>
+ <account type="12" name="其他收入"/>
+ <account type="12" name="报销的费用"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="流动资产">
+ <account type="1" name="储蓄帐户"/>
+ <account type="3" name="零用金"/>
+ <account type="1" name="支票帐户"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/zh_CN/carloan.kmt b/kmymoney2/templates/zh_CN/carloan.kmt
new file mode 100644
index 0000000..0a9934a
--- /dev/null
+++ b/kmymoney2/templates/zh_CN/carloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/zh_CN/acctchrt_carloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Car Loan</title>
+ <shortdesc>Accounts for car loan and associated interest</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have a car loan (car loan, car loan interest).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="兴趣">
+ <account type="13" name="汽车贷款利息"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="贷款">
+ <account type="10" name="汽车贷款"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/zh_CN/cdmoneymkt.kmt b/kmymoney2/templates/zh_CN/cdmoneymkt.kmt
new file mode 100644
index 0000000..71e9387
--- /dev/null
+++ b/kmymoney2/templates/zh_CN/cdmoneymkt.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/zh_CN/acctchrt_cdmoneymkt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>CD and Money Market</title>
+ <shortdesc>Accounts for CD and money market investments</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have CDs or money market accounts (CD, CD interest, money market, money market interest).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="利息收入">
+ <account type="12" name="光盘兴趣"/>
+ <account type="12" name="货币市场利率"/>
+ </account>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="流动资产">
+ <account type="1" name="货币市场"/>
+ <account type="1" name="银行CD"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/zh_CN/checkbook.kmt b/kmymoney2/templates/zh_CN/checkbook.kmt
new file mode 100644
index 0000000..146497e
--- /dev/null
+++ b/kmymoney2/templates/zh_CN/checkbook.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/zh_CN/acctchrt_checkbook.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>A Simple Checkbook</title>
+ <shortdesc>The minimal set of accounts to use GnuCash.</shortdesc>
+ <longdesc>Use this if you just want to balance your checkbook. Later on, you can start tracking income and expenses in more detail if you feel the need.</longdesc>
+ <accounts>
+ <account type="13" name=""/>
+ <account type="12" name=""/>
+ <account type="16" name="">
+ <account type="16" name="期初余额"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="流动资产">
+ <account type="1" name="支票帐户"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/zh_CN/childcare.kmt b/kmymoney2/templates/zh_CN/childcare.kmt
new file mode 100644
index 0000000..0de00e4
--- /dev/null
+++ b/kmymoney2/templates/zh_CN/childcare.kmt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/zh_CN/acctchrt_childcare.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Childcare Expenses</title>
+ <shortdesc>An account for tracking childcare costs</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have childcare expenses.</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="育儿"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/zh_CN/common.kmt b/kmymoney2/templates/zh_CN/common.kmt
new file mode 100644
index 0000000..8a68932
--- /dev/null
+++ b/kmymoney2/templates/zh_CN/common.kmt
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/zh_CN/acctchrt_common.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>通用帐户</title>
+ <shortdesc>A basic set of accounts most commonly used</shortdesc>
+ <longdesc>Most users will want to select this set of accounts. It includes most commonly used accounts (checking, savings, cash, credit card, income, common expenses).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="奖金"/>
+ <account type="12" name="其他收入"/>
+ <account type="12" name="收到的礼物"/>
+ <account type="12" name="薪金"/>
+ <account type="12" name="利息收入">
+ <account type="12" name="其他利息"/>
+ <account type="12" name="储蓄存款利息所得"/>
+ <account type="12" name="支票利息"/>
+ </account>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="期初余额"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="流动资产">
+ <account type="1" name="支票帐户"/>
+ <account type="3" name="现金的钱包"/>
+ <account type="1" name="储蓄帐户"/>
+ </account>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="娱乐">
+ <account type="13" name="Music/Movies"/>
+ <account type="13" name="旅行"/>
+ <account type="13" name="娱乐"/>
+ </account>
+ <account type="13" name="书籍"/>
+ <account type="13" name="用餐"/>
+ <account type="13" name="礼品"/>
+ <account type="13" name="医疗费用"/>
+ <account type="13" name="慈善"/>
+ <account type="13" name="公共交通"/>
+ <account type="13" name="汽车">
+ <account type="13" name="燃气"/>
+ <account type="13" name="停车"/>
+ <account type="13" name="维修和保养"/>
+ <account type="13" name="收费"/>
+ </account>
+ <account type="13" name="银行服务收费"/>
+ <account type="13" name="教育"/>
+ <account type="13" name="水电费">
+ <account type="13" name="水"/>
+ <account type="13" name="燃气"/>
+ <account type="13" name="垃圾收集"/>
+ <account type="13" name="电"/>
+ </account>
+ <account type="13" name="供应品"/>
+ <account type="13" name="衣服"/>
+ <account type="13" name="订阅杂志"/>
+ <account type="13" name="电话"/>
+ <account type="13" name="保险">
+ <account type="13" name="汽车保险"/>
+ <account type="13" name="人寿保险"/>
+ <account type="13" name="健康保险"/>
+ </account>
+ <account type="13" name="在线服务"/>
+ <account type="13" name="调整"/>
+ <account type="13" name="税收">
+ <account type="13" name="社会保险"/>
+ <account type="13" name="State/Province"/>
+ <account type="13" name="联邦"/>
+ <account type="13" name="医保"/>
+ <account type="13" name="其它税"/>
+ </account>
+ <account type="13" name="电脑"/>
+ <account type="13" name="Laundry/Dry Cleaning"/>
+ <account type="13" name="杂项"/>
+ <account type="13" name="杂货"/>
+ <account type="13" name="电报"/>
+ <account type="13" name="爱好"/>
+ </account>
+ <account type="10" name="">
+ <account type="4" name="信用卡"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/zh_CN/default_accounts.kmt b/kmymoney2/templates/zh_CN/default_accounts.kmt
new file mode 100644
index 0000000..a6efd90
--- /dev/null
+++ b/kmymoney2/templates/zh_CN/default_accounts.kmt
@@ -0,0 +1,162 @@
+<?xml version = '1.0' encoding = 'utf-8'?>
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>KMyMoney 0.8 default</title>
+ <shortdesc/>
+ <longdesc/>
+ <accounts>
+ <account type="13" name="" >
+ <account type="13" name="账单" >
+ <account type="13" name="电话费" />
+ <account type="13" name="Rent" />
+ <account type="13" name="电费" />
+ <account type="13" name="有线电视费" />
+ <account type="13" name="燃气费" />
+ <account type="13" name="抵押贷款" >
+ <account type="13" name="利息" >
+ </account>
+ <account type="13" name="本金" >
+ </account>
+ </account>
+ <account type="13" name="水费与污水处理费" />
+ <account type="13" name="物业费" />
+ </account>
+ <account type="13" name="银行费用" >
+ <account type="13" name="支付利息" />
+ <account type="13" name="手续费" />
+ </account>
+ <account type="13" name="汽车" >
+ <account type="13" name="汽油" />
+ <account type="13" name="维护" />
+ <account type="13" name="保险" />
+ <account type="13" name="租金" />
+ <account type="13" name="车贷" />
+ <account type="13" name="上路费用" />
+ </account>
+ <account type="13" name="现金提款" />
+ <account type="13" name="慈善事业" >
+ <account type="13" name="捐款" />
+ </account>
+ <account type="13" name="儿童看护" />
+ <account type="13" name="服装" />
+ <account type="13" name="教育" >
+ <account type="13" name="书籍" />
+ <account type="13" name="其他费用" />
+ <account type="13" name="学费" />
+ <account type="13" name="助学贷款" />
+ </account>
+ <account type="13" name="吃喝" >
+ <account type="13" name="下馆子" />
+ <account type="13" name="食品饮料" />
+ </account>
+ <account type="13" name="礼物" />
+ <account type="13" name="健康支出" >
+ <account type="13" name="牙科" />
+ <account type="13" name="看病" />
+ <account type="13" name="住院" />
+ <account type="13" name="眼镜" />
+ <account type="13" name="买药" />
+ </account>
+ <account type="13" name="渡假" >
+ <account type="13" name="食宿" />
+ <account type="13" name="旅行" />
+ </account>
+ <account type="13" name="日常家务" >
+ <account type="13" name="家具" />
+ <account type="13" name="日常维修" />
+ <account type="13" name="日用品" />
+ </account>
+ <account type="13" name="保险" >
+ <account type="13" name="家庭财产保险" />
+ <account type="13" name="寿险" />
+ <account type="13" name="健康险" />
+ <account type="13" name="车辆保险" />
+ <account type="13" name="伤残险" />
+ </account>
+ <account type="13" name="工作开销" >
+ <account type="13" name="工作失误赔偿" />
+ <account type="13" name="其他" />
+ </account>
+ <account type="13" name="休闲娱乐" >
+ <account type="13" name="书籍报纸杂志" />
+ <account type="13" name="娱乐" />
+ <account type="13" name="租碟、看电影" />
+ <account type="13" name="嗜好" />
+ <account type="13" name="体育活动" />
+ <account type="13" name="体育用品" />
+ <account type="13" name="CD磁带" />
+ <account type="13" name="剧院、音乐厅等" />
+ <account type="13" name="玩具、游戏等" />
+ </account>
+ <account type="13" name="法务支出" />
+ <account type="13" name="贷款" >
+ <account type="13" name="贷款利息" />
+ </account>
+ <account type="13" name="自行车" >
+ <account type="13" name="购置费用" />
+ <account type="13" name="维护费用" />
+ </account>
+ <account type="13" name="交通费用" >
+ <account type="13" name="计程车" />
+ <account type="13" name="公共交通" />
+ </account>
+ <account type="13" name="其他支出" >
+ <account type="13" name="未知" />
+ </account>
+ <account type="13" name="个人看护" />
+ <account type="13" name="饲养宠物" >
+ <account type="13" name="食物" />
+ <account type="13" name="各种用品" />
+ <account type="13" name="兽医账单" />
+ <account type="13" name="合法饲养手续" />
+ </account>
+ <account type="13" name="疗养" />
+ <account type="13" name="退休账户" >
+ <account type="13" name="养老保险" />
+ </account>
+ <account type="13" name="税" >
+ <account type="13" name="个人所得税" />
+ </account>
+ </account>
+ <account type="12" name="" >
+ <account type="12" name="赡养费" />
+ <account type="12" name="奖金" />
+ <account type="12" name="红利" />
+ <account type="12" name="独生子女费" />
+ <account type="12" name="投资收入" >
+ <account type="12" name="股票分红" />
+ </account>
+ <account type="12" name="工资" >
+ <account type="12" name="工资" />
+ <account type="12" name="奖金" />
+ <account type="12" name="加班费" />
+ </account>
+ <account type="12" name="礼金" />
+ <account type="12" name="银行" >
+ <account type="12" name="银行利息" />
+ </account>
+ <account type="12" name="投资收入" >
+ <account type="12" name="期权" />
+ <account type="12" name="红利" />
+ <account type="12" name="外汇" />
+ <account type="12" name="利息" />
+ </account>
+ <account type="12" name="退休金" />
+ <account type="12" name="其他收入" >
+ <account type="12" name="助学贷款" />
+ <account type="12" name="收到的贷款本金" />
+ <account type="12" name="彩票、抽奖" />
+ <account type="12" name="退税" />
+ <account type="12" name="离职补偿金" />
+ </account>
+ <account type="12" name="退休计划收入" >
+ <account type="12" name="养老保险" />
+ </account>
+ <account type="12" name="社保收入" >
+ <account type="12" name="养老保险" />
+ <account type="12" name="公积金" />
+ <account type="12" name="医疗保险" />
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/zh_CN/eduloan.kmt b/kmymoney2/templates/zh_CN/eduloan.kmt
new file mode 100644
index 0000000..9990ca8
--- /dev/null
+++ b/kmymoney2/templates/zh_CN/eduloan.kmt
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/zh_CN/acctchrt_eduloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Education Loan</title>
+ <shortdesc>Accounts for school loan and associated interest</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have an educational loan (education loan, education loan interest).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="兴趣">
+ <account type="13" name="教育贷款利息"/>
+ </account>
+ </account>
+ <account type="10" name="">
+ <account type="10" name="贷款">
+ <account type="10" name="教育贷款"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/zh_CN/fixedassets.kmt b/kmymoney2/templates/zh_CN/fixedassets.kmt
new file mode 100644
index 0000000..1e9a593
--- /dev/null
+++ b/kmymoney2/templates/zh_CN/fixedassets.kmt
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/zh_CN/acctchrt_fixedassets.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Fixed Assets</title>
+ <shortdesc>Accounts for tracking large fixed assets</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have large fixed assets (house, vehicle, vacation home, other assets).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="9" name="固定资产">
+ <account type="9" name="汽车"/>
+ <account type="9" name="其他资产"/>
+ <account type="9" name="房子"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/zh_CN/full.kmt b/kmymoney2/templates/zh_CN/full.kmt
new file mode 100644
index 0000000..f8e5da5
--- /dev/null
+++ b/kmymoney2/templates/zh_CN/full.kmt
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/zh_CN/acctchrt_full.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Full Chart</title>
+ <shortdesc>Full chart of accounts contains all default accounts.</shortdesc>
+ <longdesc></longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="利息收入">
+ <account type="12" name="储蓄存款利息所得"/>
+ <account type="12" name="货币市场利率"/>
+ <account type="12" name="支票利息"/>
+ <account type="12" name="光盘兴趣"/>
+ <account type="12" name="其他利息"/>
+ <account type="12" name="债券利率"/>
+ </account>
+ <account type="12" name="其他收入"/>
+ <account type="12" name="收到的礼物"/>
+ <account type="12" name="股利收入"/>
+ <account type="12" name="薪金(配偶) "/>
+ <account type="12" name="薪金"/>
+ <account type="12" name="奖金"/>
+ </account>
+ <account type="10" name="">
+ <account type="4" name="信用额度"/>
+ <account type="10" name="贷款">
+ <account type="10" name="汽车贷款"/>
+ <account type="10" name="按揭贷款"/>
+ <account type="10" name="其他贷款"/>
+ <account type="10" name="教育贷款"/>
+ </account>
+ <account type="4" name="信用卡"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="佣金"/>
+ <account type="13" name="衣服"/>
+ <account type="13" name="调整"/>
+ <account type="13" name="教育"/>
+ <account type="13" name="用餐"/>
+ <account type="13" name="供应品"/>
+ <account type="13" name="汽车">
+ <account type="13" name="维修和保养"/>
+ <account type="13" name="停车"/>
+ <account type="13" name="燃气"/>
+ <account type="13" name="收费"/>
+ </account>
+ <account type="13" name="娱乐">
+ <account type="13" name="Music/Movies"/>
+ <account type="13" name="娱乐"/>
+ <account type="13" name="旅行"/>
+ </account>
+ <account type="13" name="电报"/>
+ <account type="13" name="电脑"/>
+ <account type="13" name="育儿"/>
+ <account type="13" name="Laundry/Dry Cleaning"/>
+ <account type="13" name="银行服务收费"/>
+ <account type="13" name="税收">
+ <account type="13" name="State/Province"/>
+ <account type="13" name="房地产税"/>
+ <account type="13" name="其它税"/>
+ <account type="13" name="社会保险"/>
+ <account type="13" name="联邦"/>
+ <account type="13" name="医保"/>
+ </account>
+ <account type="13" name="保险">
+ <account type="13" name="家庭保险"/>
+ <account type="13" name="人寿保险"/>
+ <account type="13" name="汽车保险"/>
+ <account type="13" name="健康保险"/>
+ <account type="13" name="出租保险"/>
+ </account>
+ <account type="13" name="慈善"/>
+ <account type="13" name="家庭修理"/>
+ <account type="13" name="杂货"/>
+ <account type="13" name="在线服务"/>
+ <account type="13" name="租金"/>
+ <account type="13" name="税收(配偶) ">
+ <account type="13" name="社会保险"/>
+ <account type="13" name="其它税"/>
+ <account type="13" name="State/Province"/>
+ <account type="13" name="医保"/>
+ <account type="13" name="联邦"/>
+ </account>
+ <account type="13" name="兴趣">
+ <account type="13" name="贷款利息"/>
+ <account type="13" name="其他利息"/>
+ <account type="13" name="教育贷款利息"/>
+ <account type="13" name="汽车贷款利息"/>
+ </account>
+ <account type="13" name="杂项"/>
+ <account type="13" name="订阅杂志"/>
+ <account type="13" name="公共交通"/>
+ <account type="13" name="医疗费用"/>
+ <account type="13" name="爱好"/>
+ <account type="13" name="礼品"/>
+ <account type="13" name="书籍"/>
+ <account type="13" name="水电费">
+ <account type="13" name="水"/>
+ <account type="13" name="燃气"/>
+ <account type="13" name="垃圾收集"/>
+ <account type="13" name="电"/>
+ </account>
+ <account type="13" name="电话"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="固定资产">
+ <account type="9" name="房子"/>
+ <account type="9" name="其他资产"/>
+ <account type="9" name="汽车"/>
+ </account>
+ <account type="9" name="流动资产">
+ <account type="1" name="银行CD"/>
+ <account type="1" name="货币市场"/>
+ <account type="3" name="现金的钱包"/>
+ <account type="1" name="储蓄帐户"/>
+ <account type="1" name="支票帐户"/>
+ </account>
+ <account type="9" name="投资">
+ <account type="7" name="退休"/>
+ <account type="7" name="经纪帐户"/>
+ <account type="7" name="配偶退休"/>
+ </account>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="期初余额"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/zh_CN/homeloan.kmt b/kmymoney2/templates/zh_CN/homeloan.kmt
new file mode 100644
index 0000000..1e0374a
--- /dev/null
+++ b/kmymoney2/templates/zh_CN/homeloan.kmt
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/zh_CN/acctchrt_homeloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Home Mortgage Loan</title>
+ <shortdesc>Accounts for home loan and associated interest</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have a home loan (mortgage loan, mortgage interest).</longdesc>
+ <accounts>
+ <account type="10" name="">
+ <account type="10" name="按揭贷款"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="兴趣">
+ <account type="13" name="贷款利息"/>
+ </account>
+ </account>
+ <account type="10" name=""/>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/zh_CN/homeown.kmt b/kmymoney2/templates/zh_CN/homeown.kmt
new file mode 100644
index 0000000..966cceb
--- /dev/null
+++ b/kmymoney2/templates/zh_CN/homeown.kmt
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/zh_CN/acctchrt_homeown.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Homeowner Expenses</title>
+ <shortdesc>Expenses associated with owning a home</shortdesc>
+ <longdesc>You would want to select this set of accounts if you own a home. This set provides a group of accounts to track home expenses (insurance, taxes, home repair).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="保险">
+ <account type="13" name="家庭保险"/>
+ </account>
+ <account type="13" name="税收">
+ <account type="13" name="房地产税"/>
+ </account>
+ <account type="13" name="家庭修理"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/zh_CN/otherloan.kmt b/kmymoney2/templates/zh_CN/otherloan.kmt
new file mode 100644
index 0000000..4514ac8
--- /dev/null
+++ b/kmymoney2/templates/zh_CN/otherloan.kmt
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/zh_CN/acctchrt_otherloan.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Other Loans</title>
+ <shortdesc>Accounts for tracking other loans and associated interest</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have something other than a home loan (other loan, other loan interest).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="兴趣">
+ <account type="13" name="其他利息"/>
+ </account>
+ </account>
+ <account type="10" name=""/>
+ <account type="10" name="">
+ <account type="10" name="其他贷款"/>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/zh_CN/renter.kmt b/kmymoney2/templates/zh_CN/renter.kmt
new file mode 100644
index 0000000..9d079dd
--- /dev/null
+++ b/kmymoney2/templates/zh_CN/renter.kmt
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/zh_CN/acctchrt_renter.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Renter Expenses</title>
+ <shortdesc>Expenses associated with renting a home</shortdesc>
+ <longdesc>You would want to select this set of accounts if you rent a home or apartment (rent, renter's insurance).</longdesc>
+ <accounts>
+ <account type="13" name="">
+ <account type="13" name="租金"/>
+ <account type="13" name="保险">
+ <account type="13" name="出租保险"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/zh_CN/retiremt.kmt b/kmymoney2/templates/zh_CN/retiremt.kmt
new file mode 100644
index 0000000..f3e3251
--- /dev/null
+++ b/kmymoney2/templates/zh_CN/retiremt.kmt
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/zh_CN/acctchrt_retiremt.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Retirement Accounts</title>
+ <shortdesc>Retirement account with related investment subaccounts</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have retirement accounts (stock, bond, mutual fund, index fund).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="7" name="退休"/>
+ </account>
+ <account type="9" name=""/>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/zh_CN/spouseinc.kmt b/kmymoney2/templates/zh_CN/spouseinc.kmt
new file mode 100644
index 0000000..155eabd
--- /dev/null
+++ b/kmymoney2/templates/zh_CN/spouseinc.kmt
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/zh_CN/acctchrt_spouseinc.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Spouse Income</title>
+ <shortdesc>Accounts for tracking spouse's income separately</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have a working spouse (salary (spouse), taxes (spouse)).</longdesc>
+ <accounts>
+ <account type="12" name="">
+ <account type="12" name="薪金(配偶) "/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="税收(配偶) ">
+ <account type="13" name="社会保险"/>
+ <account type="13" name="医保"/>
+ <account type="13" name="State/Province"/>
+ <account type="13" name="联邦"/>
+ <account type="13" name="其它税"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/zh_CN/spouseretire.kmt b/kmymoney2/templates/zh_CN/spouseretire.kmt
new file mode 100644
index 0000000..fbaa2a6
--- /dev/null
+++ b/kmymoney2/templates/zh_CN/spouseretire.kmt
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/zh_CN/acctchrt_spouseretire.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>Spouse Retirement Accounts</title>
+ <shortdesc>Retirement account with related investment accounts for spouse</shortdesc>
+ <longdesc>You would want to select this set of accounts if you have investments in a spouse's name (stock, bond, mutual fund, index fund, interest, dividend).</longdesc>
+ <accounts>
+ <account type="9" name="">
+ <account type="7" name="配偶退休"/>
+ </account>
+ <account type="9" name=""/>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/zh_HK/Makefile.am b/kmymoney2/templates/zh_HK/Makefile.am
new file mode 100644
index 0000000..9af54fa
--- /dev/null
+++ b/kmymoney2/templates/zh_HK/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/zh_HK
+
+template_DATA = business.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/zh_HK/business.kmt b/kmymoney2/templates/zh_HK/business.kmt
new file mode 100644
index 0000000..fe02f1b
--- /dev/null
+++ b/kmymoney2/templates/zh_HK/business.kmt
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/zh_HK/acctchrt_business.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>商業帳户</title>
+ <shortdesc>Full chart of accounts for a business.</shortdesc>
+ <longdesc>Users running a business want to select this instead of other choices. This includes all the accounts you need to run a most businesses, including Payables, Receivables, Income, and Expenses.</longdesc>
+ <accounts>
+ <account type="10" name="">
+ <account type="4" name="信用卡"/>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="留存收益"/>
+ <account type="16" name="期初餘額"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="設備租賃"/>
+ <account type="13" name="雜項"/>
+ <account type="13" name="修理">
+ <account type="13" name="設備維修"/>
+ <account type="13" name="建築修復"/>
+ <account type="13" name="電腦維修"/>
+ <account type="13" name="清潔衛生費"/>
+ </account>
+ <account type="13" name="郵資及運送"/>
+ <account type="13" name="教育"/>
+ <account type="13" name="折舊"/>
+ <account type="13" name="辦公用品"/>
+ <account type="13" name="專業費用">
+ <account type="13" name="律師費"/>
+ <account type="13" name="會計"/>
+ </account>
+ <account type="13" name="印刷和復印"/>
+ <account type="13" name="用餐"/>
+ <account type="13" name="應得物和捐款"/>
+ <account type="13" name="執照和許可證"/>
+ <account type="13" name="現金折扣"/>
+ <account type="13" name="薪金支出"/>
+ <account type="13" name="境外服務"/>
+ <account type="13" name="調整"/>
+ <account type="13" name="旅行和娱樂">
+ <account type="13" name="用餐"/>
+ <account type="13" name="旅行"/>
+ <account type="13" name="娱樂"/>
+ </account>
+ <account type="13" name="慈善"/>
+ <account type="13" name="汽車">
+ <account type="13" name="維修和保養"/>
+ <account type="13" name="燃氣"/>
+ <account type="13" name="停車"/>
+ <account type="13" name="收費"/>
+ </account>
+ <account type="13" name="租金"/>
+ <account type="13" name="水電費">
+ <account type="13" name="燃氣"/>
+ <account type="13" name="垃圾收集"/>
+ <account type="13" name="因特網"/>
+ <account type="13" name="手機"/>
+ <account type="13" name="電報"/>
+ <account type="13" name="電"/>
+ <account type="13" name="水"/>
+ <account type="13" name="電話"/>
+ </account>
+ <account type="13" name="保險">
+ <account type="13" name="殘疾保險金"/>
+ <account type="13" name="工作者Comp"/>
+ <account type="13" name="責任保險"/>
+ </account>
+ <account type="13" name="銀行服務收費"/>
+ <account type="13" name="税收">
+ <account type="13" name="聯邦"/>
+ <account type="13" name="FICA"/>
+ <account type="13" name="財産"/>
+ <account type="13" name="本地"/>
+ <account type="13" name="Emp-FICA"/>
+ <account type="13" name="其它税"/>
+ <account type="13" name="州/省"/>
+ <account type="13" name="FUTA"/>
+ </account>
+ <account type="13" name="書籍"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="利息收入"/>
+ <account type="12" name="銷售"/>
+ <account type="12" name="其他收入"/>
+ <account type="12" name="報銷的費用"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="流動資産">
+ <account type="1" name="儲蓄帳戶"/>
+ <account type="3" name="零用金"/>
+ <account type="1" name="支票帳戶"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/templates/zh_TW/Makefile.am b/kmymoney2/templates/zh_TW/Makefile.am
new file mode 100644
index 0000000..a03c3b1
--- /dev/null
+++ b/kmymoney2/templates/zh_TW/Makefile.am
@@ -0,0 +1,5 @@
+templatedir=$(kde_datadir)/kmymoney2/templates/zh_TW
+
+template_DATA = business.kmt
+
+EXTRA_DIST = $(template_DATA)
diff --git a/kmymoney2/templates/zh_TW/business.kmt b/kmymoney2/templates/zh_TW/business.kmt
new file mode 100644
index 0000000..3bdadb6
--- /dev/null
+++ b/kmymoney2/templates/zh_TW/business.kmt
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Converted using xea2kmt by Thomas Baumgart from GnuCash sources
+
+ accounts/zh_TW/acctchrt_business.gnucash-xea
+
+ Please check the source file for possible copyright
+ and licence information.
+-->
+<!DOCTYPE KMYMONEY-TEMPLATE>
+<kmymoney-account-template>
+ <title>商業帳户</title>
+ <shortdesc>Full chart of accounts for a business.</shortdesc>
+ <longdesc>Users running a business want to select this instead of other choices. This includes all the accounts you need to run a most businesses, including Payables, Receivables, Income, and Expenses.</longdesc>
+ <accounts>
+ <account type="10" name="">
+ <account type="4" name="信用卡"/>
+ </account>
+ <account type="16" name="">
+ <account type="16" name="留存收益"/>
+ <account type="16" name="期初餘額"/>
+ </account>
+ <account type="13" name="">
+ <account type="13" name="設備租賃"/>
+ <account type="13" name="雜項"/>
+ <account type="13" name="修理">
+ <account type="13" name="設備維修"/>
+ <account type="13" name="建築修復"/>
+ <account type="13" name="電腦維修"/>
+ <account type="13" name="清潔衛生費"/>
+ </account>
+ <account type="13" name="郵資及運送"/>
+ <account type="13" name="教育"/>
+ <account type="13" name="折舊"/>
+ <account type="13" name="辦公用品"/>
+ <account type="13" name="專業費用">
+ <account type="13" name="律師費"/>
+ <account type="13" name="會計"/>
+ </account>
+ <account type="13" name="印刷和復印"/>
+ <account type="13" name="用餐"/>
+ <account type="13" name="應得物和捐款"/>
+ <account type="13" name="執照和許可證"/>
+ <account type="13" name="現金折扣"/>
+ <account type="13" name="薪金支出"/>
+ <account type="13" name="境外服務"/>
+ <account type="13" name="調整"/>
+ <account type="13" name="旅行和娱樂">
+ <account type="13" name="用餐"/>
+ <account type="13" name="旅行"/>
+ <account type="13" name="娱樂"/>
+ </account>
+ <account type="13" name="慈善"/>
+ <account type="13" name="汽車">
+ <account type="13" name="維修和保養"/>
+ <account type="13" name="燃氣"/>
+ <account type="13" name="停車"/>
+ <account type="13" name="收費"/>
+ </account>
+ <account type="13" name="租金"/>
+ <account type="13" name="水電費">
+ <account type="13" name="燃氣"/>
+ <account type="13" name="垃圾收集"/>
+ <account type="13" name="因特網"/>
+ <account type="13" name="手機"/>
+ <account type="13" name="電報"/>
+ <account type="13" name="電"/>
+ <account type="13" name="水"/>
+ <account type="13" name="電話"/>
+ </account>
+ <account type="13" name="保險">
+ <account type="13" name="殘疾保險金"/>
+ <account type="13" name="工作者Comp"/>
+ <account type="13" name="責任保險"/>
+ </account>
+ <account type="13" name="銀行服務收費"/>
+ <account type="13" name="税收">
+ <account type="13" name="聯邦"/>
+ <account type="13" name="FICA"/>
+ <account type="13" name="財産"/>
+ <account type="13" name="本地"/>
+ <account type="13" name="Emp-FICA"/>
+ <account type="13" name="其它税"/>
+ <account type="13" name="州/省"/>
+ <account type="13" name="FUTA"/>
+ </account>
+ <account type="13" name="書籍"/>
+ </account>
+ <account type="12" name="">
+ <account type="12" name="利息收入"/>
+ <account type="12" name="銷售"/>
+ <account type="12" name="其他收入"/>
+ <account type="12" name="報銷的費用"/>
+ </account>
+ <account type="9" name="">
+ <account type="9" name="流動資産">
+ <account type="1" name="儲蓄帳戶"/>
+ <account type="3" name="零用金"/>
+ <account type="1" name="支票帳戶"/>
+ </account>
+ </account>
+ </accounts>
+</kmymoney-account-template>
diff --git a/kmymoney2/tips b/kmymoney2/tips
new file mode 100644
index 0000000..52fc428
--- /dev/null
+++ b/kmymoney2/tips
@@ -0,0 +1,131 @@
+<tip category="KMyMoney|Ledger">
+<html>
+<p>...that you can change the sort order of ledger entries by
+right-clicking the header of the ledger view?
+</html>
+</tip>
+
+<tip category="KMyMoney|Ledger">
+<html>
+<p>...that you can easily move to the other side of a transfer transaction
+by opening the context menu with the right mouse button and selecting one of the
+'Goto' functions?
+</html>
+</tip>
+
+<tip category="KMyMoney|Ledger">
+<html>
+<p>...that you can start editing a transaction by double-clicking on the
+transaction in the register?
+</html>
+</tip>
+
+<tip category="KMyMoney|Ledger">
+<html>
+<p>...that you can show more details of the selected transaction in the
+register by selecting the 'ledger lens' feature in the settings dialog?
+</html>
+</tip>
+
+<tip category="KMyMoney|Ledger">
+<html>
+<p>...that transactions with no category assigned or split
+transactions with unassigned values are marked with an exclamation mark
+on a yellow triangle in the register?
+</html>
+
+<tip category="KMyMoney|Ledger">
+<html>
+<p>...that you can show all details of the transactions in the register
+by typing &lt;Ctrl-T&gt; or selecting the 'Settings/Show Transaction Detail'
+menu entry? You can turn this feature off the same way.
+</html>
+
+<tip category="KMyMoney|General">
+<html>
+<p>...that you can switch between a listing of all accounts or
+an icon view of all asset and liability accounts with the tabs
+in the accounts view?
+</html>
+</tip>
+
+<tip category="KMyMoney|General">
+<html>
+<p>...that the KMyMoney development team wishes you a nice day?
+</html>
+</tip>
+
+<tip category="KMyMoney|General">
+<html>
+<p>...you can use your own external filter program to convert any
+import format to QIF on the fly? See the QIF profile editor for
+more details.
+</html>
+</tip>
+
+<tip category="KMyMoney|Ledger">
+<html>
+<p>...that you can create a scheduled transaction from an existing
+one by selecting the context menu on a transaction in the ledger
+or the "More..."-menu in the transaction form?
+</html>
+</tip>
+
+<tip category="KMyMoney|Ledger">
+<html>
+<p>...that you can switch to the payee of a transaction
+by selecting the context menu on a transaction in the ledger
+or in the transaction menu?
+</html>
+</tip>
+
+<tip category="KMyMoney|General">
+<html>
+<p>...that you can modify the colors and fonts used for the ledgers
+via <i>Configure/Register/...</i>?
+</html>
+</tip>
+
+<tip category="KMyMoney|General">
+<html>
+<p>...that you can hide transactions prior to a specific date?
+The date can be modified via <i>Configure/Register/Filter</i>.
+</html>
+</tip>
+
+<tip category="KMyMoney|General">
+<html>
+<p>...that you can customize the "Home-Page"
+via <i>Configure/Home</i>?
+</html>
+</tip>
+
+<tip category="KMyMoney|Ledger">
+<html>
+<p>...that you can enter new transactions even while reconciling
+an account? You can also make the transaction form visible.
+</html>
+</tip>
+
+<tip category="KMyMoney|General">
+<html>
+<p>...that you can actively support the KMyMoney development team in
+cases that heavily depend on your data? You can save your data in an
+anonymized way for this support.<p>
+Just open your data file and immediately
+select <b>File/Save as...</b>. In the <b>Save As...</b> dialog
+select the filter <b>Anonymous Files</b> and make sure your file gets
+the extensions <b>.anon.xml</b>. <p>
+To verify, how the data looks like you are about to send away, you can open
+this file in KMyMoney and see how the developers see your data.
+</html>
+</tip>
+
+<tip category="KMyMoney|General">
+<html>
+<p>... that you can import your bank statements even without a network
+connection? Just select the file (OFX or QIF) from the File->Import menu.</p>
+<p>Provided by Jose Jorge</p>
+</html>
+</tip>
+
diff --git a/kmymoney2/views/Makefile.am b/kmymoney2/views/Makefile.am
new file mode 100644
index 0000000..693d075
--- /dev/null
+++ b/kmymoney2/views/Makefile.am
@@ -0,0 +1,25 @@
+KDE_OPTIONS = noautodist
+
+INCLUDES = -I$(top_srcdir) $(all_includes) -I$(top_srcdir)/libkdchart
+
+noinst_LIBRARIES = libviews.a
+libviews_a_METASOURCES = AUTO
+
+libviews_a_SOURCES = kreportsview.cpp kmymoneytransaction.cpp kgloballedgerview.cpp kmymoneyfile.cpp kinvestmentlistitem.cpp kinvestmentviewdecl.ui kinvestmentview.cpp kscheduledlistitem.cpp kscheduledviewdecl.ui kscheduledview.cpp kpayeesview.cpp kpayeesviewdecl.ui khomeview.cpp kcategoriesviewdecl.ui kcategoriesview.cpp kmymoneyview.cpp kaccountsviewdecl.ui kaccountsview.cpp kinstitutionsviewdecl.ui kinstitutionsview.cpp kbudgetview.cpp kbudgetviewdecl.ui kforecastview.cpp kforecastviewdecl.ui
+
+# oldviews
+# kledgerview.cpp kledgerviewinvestments.cpp kledgerviewliability.cpp kledgerviewloan.cpp kledgerviewcash.cpp kledgerviewasset.cpp kledgerviewcreditcard.cpp kledgerviewsavings.cpp kledgerviewcheckings.cpp
+
+DISTCLEANFILES= kaccountsviewdecl.cpp kcategoriesviewdecl.cpp kinvestmentviewdecl.cpp kpayeesviewdecl.cpp kscheduledviewdecl.cpp kaccountsviewdecl.h kcategoriesviewdecl.h kinvestmentviewdecl.h kpayeesviewdecl.h kscheduledviewdecl.h kinstitutionsviewdecl.cpp kinstitutionsviewdecl.h kbudgetviewdecl.cpp kbudgetviewdecl.h kforecastviewdecl.cpp kforecastviewdecl.h
+
+EXTRA_DIST = kaccountsviewdecl.ui kcategoriesviewdecl.ui kinvestmentviewdecl.ui kpayeesviewdecl.ui kscheduledviewdecl.ui kinstitutionsviewdecl.ui kbudgetviewdecl.ui kforecastviewdecl.ui
+
+instdir=$(includedir)/kmymoney
+inst_HEADERS = kmymoneyview.h
+
+noinst_HEADERS = kaccountsview.h kcategoriesview.h kgloballedgerview.h khomeview.h kinvestmentlistitem.h kinvestmentview.h kmymoneyfile.h kmymoneytransaction.h kpayeesview.h kreportsview.h kscheduledlistitem.h kscheduledview.h kinstitutionsview.h kbudgetview.h kforecastview.h
+
+# old noinst_HEADERS
+# kledgerviewasset.h kledgerviewcash.h kledgerviewcheckings.h kledgerviewcreditcard.h kledgerviewliability.h kledgerviewloan.h kledgerviewsavings.h kledgerview.h kledgerviewinvestments.h
+
+messages: rc.cpp
diff --git a/kmymoney2/views/kaccountsview.cpp b/kmymoney2/views/kaccountsview.cpp
new file mode 100644
index 0000000..b0800cd
--- /dev/null
+++ b/kmymoney2/views/kaccountsview.cpp
@@ -0,0 +1,625 @@
+/***************************************************************************
+ kaccountsview.cpp
+ -------------------
+ copyright : (C) 2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlabel.h>
+#include <qtabwidget.h>
+#include <qpixmap.h>
+#include <qlayout.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kdebug.h>
+#include <klocale.h>
+#include <kiconloader.h>
+#include <kiconview.h>
+#include <kguiitem.h>
+#include <kpushbutton.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyfile.h>
+#include "kaccountsview.h"
+#include "kmymoneyview.h"
+#include "../widgets/klistviewsearchline.h"
+#include "../kmymoneyglobalsettings.h"
+#include "../kmymoney2.h"
+
+
+KMyMoneyAccountIconItem::KMyMoneyAccountIconItem(QIconView *parent, const MyMoneyAccount& account) :
+ KIconViewItem(parent, account.name()),
+ m_account(account),
+ m_reconcileFlag(false)
+{
+ updateAccount(account);
+}
+
+KMyMoneyAccountIconItem::~KMyMoneyAccountIconItem()
+{
+}
+
+void KMyMoneyAccountIconItem::setReconciliation(bool on)
+{
+ if(m_reconcileFlag == on)
+ return;
+ m_reconcileFlag = on;
+ updateAccount(m_account);
+}
+
+void KMyMoneyAccountIconItem::updateAccount(const MyMoneyAccount& account)
+{
+ setPixmap(account.accountPixmap(m_reconcileFlag));
+}
+
+KAccountsView::KAccountsView(QWidget *parent, const char *name) :
+ KAccountsViewDecl(parent,name),
+ m_assetItem(0),
+ m_liabilityItem(0)
+{
+ // create the searchline widget
+ // and insert it into the existing layout
+ m_searchWidget = new KListViewSearchLineWidget(m_accountTree, m_accountTree->parentWidget());
+ QVBoxLayout* layout = dynamic_cast<QVBoxLayout*>(m_accountTree->parentWidget()->layout());
+ if(layout) {
+ layout->insertWidget(0, m_searchWidget);
+ }
+
+ // setup icons for collapse and expand button
+ KIconLoader *ic = KGlobal::iconLoader();
+ KGuiItem collapseGuiItem("",
+ QIconSet(ic->loadIcon("viewmag-", KIcon::Small, KIcon::SizeSmall)),
+ QString(),
+ QString());
+ KGuiItem expandGuiItem("",
+ QIconSet(ic->loadIcon("viewmag+", KIcon::Small, KIcon::SizeSmall)),
+ QString(),
+ QString());
+ m_collapseButton->setGuiItem(collapseGuiItem);
+ m_expandButton->setGuiItem(expandGuiItem);
+
+ for(int i=0; i < MaxViewTabs; ++i)
+ m_needReload[i] = false;
+
+ KConfig *config = KGlobal::config();
+ config->setGroup("Last Use Settings");
+ m_tab->setCurrentPage(config->readNumEntry("KAccountsView_LastType", 0));
+
+ connect(m_tab, SIGNAL(currentChanged(QWidget*)), this, SLOT(slotTabChanged(QWidget*)));
+
+ connect(m_accountTree, SIGNAL(selectObject(const MyMoneyObject&)), this, SIGNAL(selectObject(const MyMoneyObject&)));
+ connect(m_accountTree, SIGNAL(openContextMenu(const MyMoneyObject&)), this, SIGNAL(openContextMenu(const MyMoneyObject&)));
+ connect(m_accountTree, SIGNAL(valueChanged(void)), this, SLOT(slotUpdateNetWorth(void)));
+ connect(m_accountTree, SIGNAL(openObject(const MyMoneyObject&)), this, SIGNAL(openObject(const MyMoneyObject&)));
+ connect(m_accountTree, SIGNAL(reparent(const MyMoneyAccount&, const MyMoneyAccount&)), this, SIGNAL(reparent(const MyMoneyAccount&, const MyMoneyAccount&)));
+
+ connect(m_accountIcons, SIGNAL(selectionChanged(QIconViewItem*)), this, SLOT(slotSelectIcon(QIconViewItem*)));
+ connect(m_accountIcons, SIGNAL(rightButtonClicked(QIconViewItem*, const QPoint&)), this, SLOT(slotOpenContext(QIconViewItem*)));
+ connect(m_accountIcons, SIGNAL(executed(QIconViewItem*)), this, SLOT(slotOpenObject(QIconViewItem*)));
+
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotLoadAccounts()));
+ connect(m_collapseButton, SIGNAL(clicked()), this, SLOT(slotExpandCollapse()));
+ connect(m_expandButton, SIGNAL(clicked()), this, SLOT(slotExpandCollapse()));
+}
+
+KAccountsView::~KAccountsView()
+{
+}
+
+void KAccountsView::slotExpandCollapse(void)
+{
+ if(sender()) {
+ KMyMoneyGlobalSettings::setShowAccountsExpanded(sender() == m_expandButton);
+ }
+}
+
+void KAccountsView::slotLoadAccounts(void)
+{
+ m_needReload[ListView] = true;
+ m_needReload[IconView] = true;
+ if(isVisible())
+ slotTabChanged(m_tab->currentPage());
+}
+
+void KAccountsView::slotTabChanged(QWidget* _tab)
+{
+ AccountsViewTab tab = static_cast<AccountsViewTab>(m_tab->indexOf(_tab));
+
+ // remember this setting for startup
+ KConfig *config = KGlobal::config();
+ config->setGroup("Last Use Settings");
+ config->writeEntry("KAccountsView_LastType", tab);
+
+ loadAccounts(tab);
+
+ switch(tab) {
+ case ListView:
+ // update the hint if categories are hidden
+ m_hiddenCategories->setShown(m_haveUnusedCategories);
+ break;
+
+ case IconView:
+ m_hiddenCategories->hide();
+ break;
+
+ default:
+ break;
+ }
+
+ KMyMoneyAccountTreeBaseItem* treeItem = m_accountTree->selectedItem();
+ KMyMoneyAccountIconItem* iconItem = selectedIcon();
+
+ emit selectObject(MyMoneyAccount());
+ switch(static_cast<AccountsViewTab>(m_tab->indexOf(m_tab->currentPage()))) {
+ case ListView:
+ // if we have a selected account, let the application know about it
+ if(treeItem) {
+ emit selectObject(treeItem->itemObject());
+ }
+ break;
+
+ case IconView:
+ if(iconItem) {
+ emit selectObject(iconItem->itemObject());
+ }
+ break;
+
+ default:
+ break;
+ }
+}
+
+void KAccountsView::show(void)
+{
+ // don't forget base class implementation
+ KAccountsViewDecl::show();
+ slotTabChanged(m_tab->currentPage());
+}
+
+void KAccountsView::polish(void)
+{
+ // don't forget base class implementation
+ KAccountsViewDecl::polish();
+ m_accountTree->setResizeMode(QListView::LastColumn);
+ m_accountTree->restoreLayout("Account View Settings");
+}
+
+void KAccountsView::loadAccounts(AccountsViewTab tab)
+{
+ if(m_needReload[tab]) {
+ switch(tab) {
+ case ListView:
+ loadListView();
+ break;
+ case IconView:
+ loadIconView();
+ break;
+ default:
+ break;
+ }
+ m_needReload[tab] = false;
+ }
+}
+
+void KAccountsView::loadIconView(void)
+{
+ ::timetrace("start load accounts icon view");
+
+ // remember the positions of the icons
+ QMap<QString, QPoint> posMap;
+ KMyMoneyAccountIconItem* p = dynamic_cast<KMyMoneyAccountIconItem*>(m_accountIcons->firstItem());
+ for(;p; p = dynamic_cast<KMyMoneyAccountIconItem*>(p->nextItem()))
+ posMap[p->itemObject().id()] = p->pos();
+
+ // turn off updates to avoid flickering during reload
+ m_accountIcons->setAutoArrange(true);
+
+ // clear the current contents and recreate it
+ m_accountIcons->clear();
+ QMap<QString, MyMoneyAccount> accountMap;
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ // get account list and sort by name
+ QValueList<MyMoneyAccount> alist;
+ file->accountList(alist);
+ QValueList<MyMoneyAccount>::const_iterator it_a;
+ for(it_a = alist.begin(); it_a != alist.end(); ++it_a) {
+ accountMap[QString("%1-%2").arg((*it_a).name()).arg((*it_a).id())] = *it_a;
+ }
+
+ bool showClosedAccounts = kmymoney2->toggleAction("view_show_all_accounts")->isChecked()
+ || !KMyMoneyGlobalSettings::hideClosedAccounts();
+ bool existNewIcons = false;
+
+ // parse list and add all asset and liability accounts
+ QMap<QString, MyMoneyAccount>::const_iterator it;
+ for(it = accountMap.begin(); it != accountMap.end(); ++it) {
+ QPoint loc;
+ if((*it).isClosed() && !showClosedAccounts)
+ continue;
+ const QString& pos = (*it).value("kmm-iconpos");
+ KMyMoneyAccountIconItem* item;
+ switch((*it).accountGroup()) {
+ case MyMoneyAccount::Equity:
+ if(!KMyMoneyGlobalSettings::expertMode())
+ continue;
+ // tricky fall through here
+
+ case MyMoneyAccount::Asset:
+ case MyMoneyAccount::Liability:
+ // don't show stock accounts
+ if((*it).isInvest())
+ continue;
+
+ // if we have a position stored with the object and no other
+ // idea of it's current position, then take the one
+ // stored inside the object. Also, turn off auto arrangement
+ if(!pos.isEmpty() && posMap[(*it).id()] == QPoint()) {
+ posMap[(*it).id()] = point(pos);
+ }
+
+ loc = posMap[(*it).id()];
+ if(loc == QPoint()) {
+ existNewIcons = true;
+ } else {
+ m_accountIcons->setAutoArrange(false);
+ }
+
+ item = new KMyMoneyAccountIconItem(m_accountIcons, *it);
+ if((*it).id() == m_reconciliationAccount.id())
+ item->setReconciliation(true);
+
+ if(loc != QPoint()) {
+ item->move(loc);
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ // clear the current contents
+ m_securityMap.clear();
+ m_transactionCountMap.clear();
+
+ if(existNewIcons) {
+ m_accountIcons->arrangeItemsInGrid(true);
+ }
+
+ m_accountIcons->setAutoArrange(false);
+
+ ::timetrace("done load accounts icon view");
+}
+
+void KAccountsView::loadListView(void)
+{
+ QMap<QString, bool> isOpen;
+
+ ::timetrace("start load accounts list view");
+ // remember the id of the current selected item
+ KMyMoneyAccountTreeBaseItem *item = m_accountTree->selectedItem();
+ QString selectedItemId = (item) ? item->id() : QString();
+
+ // keep a map of all 'expanded' accounts
+ QListViewItemIterator it_lvi(m_accountTree);
+ while(it_lvi.current()) {
+ item = dynamic_cast<KMyMoneyAccountTreeItem*>(it_lvi.current());
+ if(item && item->isOpen()) {
+ isOpen[item->id()] = true;
+ }
+ ++it_lvi;
+ }
+
+ // remember the upper left corner of the viewport
+ QPoint startPoint = m_accountTree->viewportToContents(QPoint(0, 0));
+
+ // turn off updates to avoid flickering during reload
+ m_accountTree->setUpdatesEnabled(false);
+
+ // clear the current contents and recreate it
+ m_accountTree->clear();
+ m_securityMap.clear();
+ m_transactionCountMap.clear();
+
+ // make sure, the pointers are not pointing to some deleted object
+ m_assetItem = m_liabilityItem = 0;
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ QValueList<MyMoneySecurity> slist = file->currencyList();
+ slist += file->securityList();
+ QValueList<MyMoneySecurity>::const_iterator it_s;
+ for(it_s = slist.begin(); it_s != slist.end(); ++it_s) {
+ m_securityMap[(*it_s).id()] = *it_s;
+ }
+ m_transactionCountMap = file->transactionCountMap();
+
+ m_haveUnusedCategories = false;
+
+ // create the items
+ try {
+ const MyMoneySecurity security = file->baseCurrency();
+ m_accountTree->setBaseCurrency(security);
+
+ const MyMoneyAccount& asset = file->asset();
+ m_assetItem = new KMyMoneyAccountTreeItem(m_accountTree, asset, security, i18n("Asset"));
+ loadSubAccounts(m_assetItem, asset.accountList());
+
+ const MyMoneyAccount& liability = file->liability();
+ m_liabilityItem = new KMyMoneyAccountTreeItem(m_accountTree, liability, security, i18n("Liability"));
+ loadSubAccounts(m_liabilityItem, liability.accountList());
+
+ const MyMoneyAccount& income = file->income();
+ KMyMoneyAccountTreeItem *incomeItem = new KMyMoneyAccountTreeItem(m_accountTree, income, security, i18n("Income"));
+ m_haveUnusedCategories |= loadSubAccounts(incomeItem, income.accountList());
+
+ const MyMoneyAccount& expense = file->expense();
+ KMyMoneyAccountTreeItem *expenseItem = new KMyMoneyAccountTreeItem(m_accountTree, expense, security, i18n("Expense"));
+ m_haveUnusedCategories |= loadSubAccounts(expenseItem, expense.accountList());
+
+ if(KMyMoneyGlobalSettings::expertMode()) {
+ const MyMoneyAccount equity = file->equity();
+ KMyMoneyAccountTreeItem *equityItem = new KMyMoneyAccountTreeItem(m_accountTree, equity, security, i18n("Equity"));
+ loadSubAccounts(equityItem, equity.accountList());
+ }
+
+ } catch(MyMoneyException *e) {
+ kdDebug(2) << "Problem in accounts list view: " << e->what();
+ delete e;
+ }
+
+ // scan through the list of accounts and re-expand those that were
+ // expanded and re-select the one that was probably selected before
+ it_lvi = QListViewItemIterator(m_accountTree);
+ while(it_lvi.current()) {
+ item = dynamic_cast<KMyMoneyAccountTreeItem*>(it_lvi.current());
+ if(item) {
+ if(item->id() == selectedItemId)
+ m_accountTree->setSelected(item, true);
+ if(isOpen.find(item->id()) != isOpen.end())
+ item->setOpen(true);
+ }
+ ++it_lvi;
+ }
+
+ // reposition viewport
+ m_accountTree->setContentsPos(startPoint.x(), startPoint.y());
+
+ m_searchWidget->searchLine()->updateSearch(QString::null);
+
+ // turn updates back on
+ m_accountTree->setUpdatesEnabled(true);
+ m_accountTree->repaintContents();
+
+ // and in case we need to show things expanded, we'll do so
+ if(KMyMoneyGlobalSettings::showAccountsExpanded())
+ m_accountTree->slotExpandAll();
+
+ // clear the current contents
+ m_securityMap.clear();
+ m_transactionCountMap.clear();
+ ::timetrace("done load accounts list view");
+}
+
+bool KAccountsView::loadSubAccounts(KMyMoneyAccountTreeItem* parent, const QStringList& accountList)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ bool unused = false;
+ bool showClosedAccounts = kmymoney2->toggleAction("view_show_all_accounts")->isChecked()
+ || !KMyMoneyGlobalSettings::hideClosedAccounts();
+
+ QStringList::const_iterator it_a;
+ for(it_a = accountList.begin(); it_a != accountList.end(); ++it_a) {
+ const MyMoneyAccount& acc = file->account(*it_a);
+ QValueList<MyMoneyPrice> prices;
+ MyMoneySecurity security = file->baseCurrency();
+ try {
+ if(acc.isInvest()) {
+ security = m_securityMap[acc.currencyId()];
+ prices += file->price(acc.currencyId(), security.tradingCurrency());
+ if(security.tradingCurrency() != file->baseCurrency().id()) {
+ MyMoneySecurity sec = m_securityMap[security.tradingCurrency()];
+ prices += file->price(sec.id(), file->baseCurrency().id());
+ }
+ } else if(acc.currencyId() != file->baseCurrency().id()) {
+ if(acc.currencyId() != file->baseCurrency().id()) {
+ security = m_securityMap[acc.currencyId()];
+ prices += file->price(acc.currencyId(), file->baseCurrency().id());
+ }
+ }
+
+ } catch(MyMoneyException *e) {
+ kdDebug(2) << __PRETTY_FUNCTION__ << " caught exception while adding " << acc.name() << "[" << acc.id() << "]: " << e->what();
+ delete e;
+ }
+
+ KMyMoneyAccountTreeItem* item = new KMyMoneyAccountTreeItem(parent, acc, prices, security);
+ if(acc.id() == m_reconciliationAccount.id())
+ item->setReconciliation(true);
+
+ unused |= loadSubAccounts(item, acc.accountList());
+
+ // no child accounts and no transactions in this account means 'unused'
+ bool thisUnused = (!item->firstChild()) && (m_transactionCountMap[acc.id()] == 0);
+
+ // In case of a category which is unused and we are requested to suppress
+ // the display of those,
+ if(acc.isIncomeExpense()) {
+ if(KMyMoneyGlobalSettings::hideUnusedCategory() && thisUnused) {
+ unused = true;
+ delete item;
+ }
+ }
+
+ // if the account is closed and we should not show it, we delete the item
+ if(acc.isClosed() && !showClosedAccounts) {
+ delete item;
+ }
+ }
+ return unused;
+}
+
+void KAccountsView::slotReconcileAccount(const MyMoneyAccount& acc, const QDate& reconciliationDate, const MyMoneyMoney& endingBalance)
+{
+ Q_UNUSED(reconciliationDate);
+ Q_UNUSED(endingBalance);
+
+ // scan through the list of accounts and mark all non
+ // expanded and re-select the one that was probably selected before
+ QListViewItemIterator it_lvi(m_accountTree);
+ KMyMoneyAccountTreeItem* item;
+ while(it_lvi.current()) {
+ item = dynamic_cast<KMyMoneyAccountTreeItem*>(it_lvi.current());
+ if(item) {
+ item->setReconciliation(false);
+ }
+ ++it_lvi;
+ }
+
+ // scan trough the icon list and do the same thing
+ KMyMoneyAccountIconItem* icon = dynamic_cast<KMyMoneyAccountIconItem*>(m_accountIcons->firstItem());
+ for(;icon; icon = dynamic_cast<KMyMoneyAccountIconItem*>(icon->nextItem())) {
+ icon->setReconciliation(false);
+ }
+
+ m_reconciliationAccount = acc;
+
+ if(!acc.id().isEmpty()) {
+ // scan through the list of accounts and mark
+ // the one that is currently reconciled
+ it_lvi = QListViewItemIterator(m_accountTree);
+ while(it_lvi.current()) {
+ item = dynamic_cast<KMyMoneyAccountTreeItem*>(it_lvi.current());
+ if(item && item->itemObject().id() == acc.id()) {
+ item->setReconciliation(true);
+ break;
+ }
+ ++it_lvi;
+ }
+
+ // scan trough the icon list and do the same thing
+ icon = dynamic_cast<KMyMoneyAccountIconItem*>(m_accountIcons->firstItem());
+ for(;icon; icon = dynamic_cast<KMyMoneyAccountIconItem*>(icon->nextItem())) {
+ if(icon->itemObject().id() == acc.id()) {
+ icon->setReconciliation(true);
+ break;
+ }
+ }
+ }
+}
+
+void KAccountsView::slotUpdateNetWorth(void)
+{
+ if(!m_assetItem || !m_liabilityItem)
+ return;
+
+ MyMoneyMoney netWorth = m_assetItem->totalValue() - m_liabilityItem->totalValue();
+
+ QString s(i18n("Net Worth: "));
+
+ // FIXME figure out how to deal with the approximate
+ // if(!(file->totalValueValid(assetAccount.id()) & file->totalValueValid(liabilityAccount.id())))
+ // s += "~ ";
+
+ s.replace(QString(" "), QString("&nbsp;"));
+ if(netWorth.isNegative()) {
+ s += "<b><font color=\"red\">";
+ }
+ const MyMoneySecurity& sec = MyMoneyFile::instance()->baseCurrency();
+ QString v(netWorth.formatMoney(sec));
+ s += v.replace(QString(" "), QString("&nbsp;"));
+ if(netWorth.isNegative()) {
+ s += "</font></b>";
+ }
+
+ m_totalProfitsLabel->setFont(KMyMoneyGlobalSettings::listCellFont());
+ m_totalProfitsLabel->setText(s);
+}
+
+KMyMoneyAccountIconItem* KAccountsView::selectedIcon(void) const
+{
+ return dynamic_cast<KMyMoneyAccountIconItem*>(m_accountIcons->currentItem());
+}
+
+void KAccountsView::slotSelectIcon(QIconViewItem* item)
+{
+ KMyMoneyAccountIconItem* p = dynamic_cast<KMyMoneyAccountIconItem*>(item);
+ if(p)
+ emit selectObject(p->itemObject());
+}
+
+void KAccountsView::slotOpenContext(QIconViewItem* item)
+{
+ KMyMoneyAccountIconItem* p = dynamic_cast<KMyMoneyAccountIconItem*>(item);
+ if(p)
+ emit openContextMenu(p->itemObject());
+}
+
+void KAccountsView::slotOpenObject(QIconViewItem* item)
+{
+ KMyMoneyAccountIconItem* p = dynamic_cast<KMyMoneyAccountIconItem*>(item);
+ if(p)
+ emit openObject(p->itemObject());
+}
+
+QString KAccountsView::point(const QPoint& val) const
+{
+ return QString("%1;%2").arg(val.x()).arg(val.y());
+}
+
+QPoint KAccountsView::point(const QString& val) const
+{
+ QRegExp exp("(\\d+);(\\d+)");
+ int x = 0;
+ int y = 0;
+ if(exp.search(val) != -1) {
+ x = exp.cap(1).toInt();
+ y = exp.cap(2).toInt();
+ }
+ return QPoint(x, y);
+}
+
+void KAccountsView::slotUpdateIconPos(unsigned int action)
+{
+ if(action != KMyMoneyView::preSave)
+ return;
+
+ MyMoneyFileTransaction ft;
+ KMyMoneyAccountIconItem* p = dynamic_cast<KMyMoneyAccountIconItem*>(m_accountIcons->firstItem());
+ for(;p; p = dynamic_cast<KMyMoneyAccountIconItem*>(p->nextItem())) {
+ const MyMoneyAccount& acc = dynamic_cast<const MyMoneyAccount&>(p->itemObject());
+ if(acc.value("kmm-iconpos") != point(p->pos())) {
+ MyMoneyAccount a(acc);
+ a.setValue("kmm-iconpos", point(p->pos()));
+ try {
+ MyMoneyFile::instance()->modifyAccount(a);
+ } catch(MyMoneyException* e) {
+ kdDebug(2) << "Unable to update icon pos: " << e->what();
+ delete e;
+ }
+ }
+ }
+ ft.commit();
+}
+
+
+#include "kaccountsview.moc"
diff --git a/kmymoney2/views/kaccountsview.h b/kmymoney2/views/kaccountsview.h
new file mode 100644
index 0000000..ed30ac5
--- /dev/null
+++ b/kmymoney2/views/kaccountsview.h
@@ -0,0 +1,209 @@
+/***************************************************************************
+ kaccountssview.h
+ -------------------
+ copyright : (C) 2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KACCOUNTSSVIEW_H
+#define KACCOUNTSSVIEW_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kiconview.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/kmymoneyaccounttree.h>
+#include <kmymoney/mymoneyutils.h>
+class KListViewSearchLineWidget;
+
+#include "../views/kaccountsviewdecl.h"
+
+/**
+ * @author Thomas Baumgart
+ */
+
+/**
+ * This class represents an item in the account icon view. It is used
+ * by the KAccountsView to select between the accounts using icons.
+ */
+class KMyMoneyAccountIconItem : public KIconViewItem
+{
+public:
+ /**
+ * Constructor to be used to construct an account icon object.
+ *
+ * @param parent pointer to the KIconView object this entry should be
+ * added to.
+ * @param account const reference to MyMoneyAccount for which
+ * the KIconView entry is constructed
+ */
+ KMyMoneyAccountIconItem(QIconView *parent, const MyMoneyAccount& account);
+ ~KMyMoneyAccountIconItem();
+
+ /**
+ * This method is loads new information into the item and updates the fields
+ *
+ * @param account the account data for the object to be updated
+ *
+ * @note if account.id() is not equal to the current account id
+ * then this method returns immediately
+ */
+ void updateAccount(const MyMoneyAccount& account);
+
+ const MyMoneyObject& itemObject(void) const { return m_account; };
+
+ void setReconciliation(bool);
+
+protected:
+
+private:
+ MyMoneyAccount m_account;
+ bool m_reconcileFlag;
+};
+
+
+
+
+/**
+ * This class implements the accounts hierarchical and iconic 'view'.
+ */
+class KAccountsView : public KAccountsViewDecl
+{
+ Q_OBJECT
+private:
+
+public:
+ KAccountsView(QWidget *parent=0, const char *name=0);
+ virtual ~KAccountsView();
+
+public slots:
+ void slotLoadAccounts(void);
+
+ /**
+ * Override the base class behaviour to include all updates that
+ * happened in the meantime.
+ */
+ void show(void);
+
+ /**
+ * Override the base class behaviour to restore the layout. Do not
+ * do this in show() because show() itself may change the layout
+ * in undesired ways.
+ */
+ void polish(void);
+
+ /**
+ * update the account objects if their icon position has changed since
+ * the last time.
+ *
+ * @param action must be KMyMoneyView::preSave, otherwise this slot is a NOP.
+ */
+ void slotUpdateIconPos(unsigned int action);
+
+ void slotReconcileAccount(const MyMoneyAccount& acc, const QDate& reconciliationDate, const MyMoneyMoney& endingBalance);
+
+protected:
+ typedef enum {
+ ListView = 0,
+ IconView,
+ // insert new values above this line
+ MaxViewTabs
+ } AccountsViewTab;
+
+ /**
+ * This method loads the accounts for the respective tab.
+ *
+ * @param tab which tab should be loaded
+ */
+ void loadAccounts(AccountsViewTab tab);
+ void loadListView(void);
+ void loadIconView(void);
+
+ bool loadSubAccounts(KMyMoneyAccountTreeItem* parent, const QStringList& accountList);
+
+ /**
+ * This method returns a pointer to the currently selected
+ * account icon or 0 if no icon is selected.
+ */
+ KMyMoneyAccountIconItem* selectedIcon(void) const;
+
+ QPoint point(const QString& str) const;
+ QString point(const QPoint& val) const;
+
+protected slots:
+ void slotUpdateNetWorth(void);
+ void slotTabChanged(QWidget*);
+ void slotSelectIcon(QIconViewItem* item);
+ void slotOpenContext(QIconViewItem* item);
+ void slotOpenObject(QIconViewItem* item);
+ void slotExpandCollapse(void);
+
+signals:
+ /**
+ * This signal serves as proxy for KMyMoneyAccountTree::selectObject()
+ *
+ * @param obj const reference to object
+ */
+ void selectObject(const MyMoneyObject& obj);
+
+ /**
+ * This signal serves as proxy for
+ * KMyMoneyAccountTree::openContextMenu(const MyMoneyObject&)
+ *
+ * @param obj const reference to object
+ */
+ void openContextMenu(const MyMoneyObject& obj);
+
+ /**
+ * This signal will be emitted when the left mouse button is double
+ * clicked (actually the KDE executed setting is used) on an object.
+ *
+ * @param obj const reference to object
+ */
+ void openObject(const MyMoneyObject& obj);
+
+ /**
+ * This signal is emitted, when the user selected to reparent the
+ * account @p acc to be a subordinate account of @p parent.
+ *
+ * @param acc const reference to account to be reparented
+ * @param parent const reference to new parent account
+ */
+ void reparent(const MyMoneyAccount& acc, const MyMoneyAccount& parent);
+
+private:
+ MyMoneyAccount m_reconciliationAccount;
+ QMap<QString, MyMoneySecurity> m_securityMap;
+ QMap<QString, unsigned long> m_transactionCountMap;
+
+ KMyMoneyAccountTreeItem* m_assetItem;
+ KMyMoneyAccountTreeItem* m_liabilityItem;
+
+ /**
+ * Search widget for the list
+ */
+ KListViewSearchLineWidget* m_searchWidget;
+
+ /// set if a view needs to be reloaded during show()
+ bool m_needReload[MaxViewTabs];
+ bool m_haveUnusedCategories;
+};
+
+#endif
diff --git a/kmymoney2/views/kaccountsviewdecl.ui b/kmymoney2/views/kaccountsviewdecl.ui
new file mode 100644
index 0000000..c8bb5ac
--- /dev/null
+++ b/kmymoney2/views/kaccountsviewdecl.ui
@@ -0,0 +1,204 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KAccountsViewDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KAccountsViewDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>697</width>
+ <height>426</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>m_tab</cstring>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>List</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>2</number>
+ </property>
+ <widget class="KMyMoneyAccountTree">
+ <property name="name">
+ <cstring>m_accountTree</cstring>
+ </property>
+ <property name="shadeSortColumn">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_collapseButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Collapse all accounts in the list</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_expandButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Expand all accounts in the list</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>515</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Icons</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KIconView">
+ <property name="name">
+ <cstring>m_accountIcons</cstring>
+ </property>
+ <property name="arrangement">
+ <enum>LeftToRight</enum>
+ </property>
+ <property name="maxItemTextLength">
+ <number>30</number>
+ </property>
+ <property name="autoArrange">
+ <bool>true</bool>
+ </property>
+ <property name="wordWrapIconText">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_hiddenCategories</cstring>
+ </property>
+ <property name="text">
+ <string>Note: Unused categories are not shown as selected by settings.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>367</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_totalProfitsLabel</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Total Profits:</string>
+ </property>
+ <property name="textFormat">
+ <enum>RichText</enum>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignVCenter|AlignRight</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>m_expandButton</sender>
+ <signal>clicked()</signal>
+ <receiver>m_accountTree</receiver>
+ <slot>slotExpandAll()</slot>
+ </connection>
+ <connection>
+ <sender>m_collapseButton</sender>
+ <signal>clicked()</signal>
+ <receiver>m_accountTree</receiver>
+ <slot>slotCollapseAll()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/views/kbudgetview.cpp b/kmymoney2/views/kbudgetview.cpp
new file mode 100644
index 0000000..a8d5bc1
--- /dev/null
+++ b/kmymoney2/views/kbudgetview.cpp
@@ -0,0 +1,767 @@
+/***************************************************************************
+ kbudgetview.cpp
+ ---------------
+ begin : Thu Jan 10 2006
+ copyright : (C) 2006 by Darren Gould
+ email : darren_gould@gmx.de
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qpushbutton.h>
+#include <qcombobox.h>
+#include <qlineedit.h>
+#include <qlabel.h>
+#include <qmultilineedit.h>
+#include <qpixmap.h>
+#include <qtabwidget.h>
+#include <qlistbox.h>
+#include <qcheckbox.h>
+#include <qgroupbox.h>
+#include <qtooltip.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kglobal.h>
+#include <klocale.h>
+#include <kconfig.h>
+#include <kmessagebox.h>
+#include <kpushbutton.h>
+#include <kiconloader.h>
+#include <kguiitem.h>
+#include <kstandarddirs.h>
+#include <kdebug.h>
+#include <kcalendarsystem.h>
+#include <kcombobox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyfile.h>
+
+#include <kmymoney/kmymoneyglobalsettings.h>
+#include <kmymoney/kmymoneytitlelabel.h>
+#include <kmymoney/kmymoneyedit.h>
+#include <kmymoney/kbudgetvalues.h>
+#include "../widgets/kmymoneyaccounttreebudget.h"
+#include "kbudgetview.h"
+#include "../dialogs/knewbudgetdlg.h"
+#include "../kmymoney2.h"
+
+// *** KBudgetListItem Implementation ***
+KBudgetListItem::KBudgetListItem(KListView *parent, const MyMoneyBudget& budget) :
+ KListViewItem(parent),
+ m_budget(budget)
+{
+ setText(0, budget.name());
+ setText(1, QString("%1").arg(budget.budgetStart().year()));
+
+ // allow in column rename
+ setRenameEnabled(0, true);
+}
+
+KBudgetListItem::~KBudgetListItem()
+{
+}
+
+void KBudgetListItem::paintCell(QPainter *p, const QColorGroup & cg, int column, int width, int align)
+{
+ p->setFont(KMyMoneyGlobalSettings::listCellFont());
+
+ QColorGroup cg2(cg);
+
+ if (isAlternate())
+ cg2.setColor(QColorGroup::Base, KMyMoneyGlobalSettings::listColor());
+ else
+ cg2.setColor(QColorGroup::Base, KMyMoneyGlobalSettings::listBGColor());
+
+ QListViewItem::paintCell(p, cg2, column, width, align);
+}
+
+
+// *** KBudgetView Implementation ***
+const int KBudgetView::m_iBudgetYearsAhead = 5;
+const int KBudgetView::m_iBudgetYearsBack = 3;
+
+KBudgetView::KBudgetView(QWidget *parent, const char *name ) :
+ KBudgetViewDecl(parent,name),
+ m_needReload(false),
+ m_inSelection(false)
+{
+ m_accountTree->setSorting(-1);
+ m_budgetList->setSorting(0);
+
+ KIconLoader* il = KGlobal::iconLoader();
+ KGuiItem newButtenItem( QString(""),
+ QIconSet(il->loadIcon("file_new", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Creates a new budget"),
+ i18n("Use this to create a new empty budget."));
+ m_newButton->setGuiItem(newButtenItem);
+ QToolTip::add(m_newButton, newButtenItem.toolTip());
+
+ KGuiItem renameButtenItem( QString(""),
+ QIconSet(il->loadIcon("editpaste", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Rename the current selected budget"),
+ i18n("Use this to start renaming the selected budget."));
+ m_renameButton->setGuiItem(renameButtenItem);
+ QToolTip::add(m_renameButton, renameButtenItem.toolTip());
+
+ KGuiItem deleteButtenItem( QString(""),
+ QIconSet(il->loadIcon("editdelete", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Delete the current selected budget"),
+ i18n("Use this to delete the selected budget."));
+ m_deleteButton->setGuiItem(deleteButtenItem);
+ QToolTip::add(m_deleteButton, deleteButtenItem.toolTip());
+
+ KGuiItem updateButtenItem( QString(""),
+ QIconSet(il->loadIcon("button_ok", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Accepts the entered values and stores the budget"),
+ i18n("Use this to store the modified data."));
+ m_updateButton->setGuiItem(updateButtenItem);
+ QToolTip::add(m_updateButton, updateButtenItem.toolTip());
+
+ KGuiItem resetButtenItem( QString(""),
+ QIconSet(il->loadIcon("undo", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Revert budget to last saved state"),
+ i18n("Use this to discard the modified data."));
+ m_resetButton->setGuiItem(resetButtenItem);
+ QToolTip::add(m_resetButton, resetButtenItem.toolTip());
+
+ connect(m_budgetList, SIGNAL(contextMenu(KListView*, QListViewItem* , const QPoint&)),
+ this, SLOT(slotOpenContextMenu(KListView*, QListViewItem*, const QPoint&)));
+ connect(m_budgetList, SIGNAL(itemRenamed(QListViewItem*,int,const QString&)), this, SLOT(slotRenameBudget(QListViewItem*,int,const QString&)));
+ connect(m_budgetList, SIGNAL(selectionChanged()), this, SLOT(slotSelectBudget()));
+
+ connect(m_cbBudgetSubaccounts, SIGNAL(clicked()), this, SLOT(cb_includesSubaccounts_clicked()));
+
+ connect(m_accountTree, SIGNAL(selectionChanged(QListViewItem*)), this, SLOT(slotSelectAccount(QListViewItem*)));
+ connect(m_accountTree, SIGNAL(valueChanged()), this, SLOT(slotRefreshHideUnusedButton()));
+
+ // connect the buttons to the actions. Make sure the enabled state
+ // of the actions is reflected by the buttons
+ connect(kmymoney2->action("budget_new"), SIGNAL(enabled(bool)), m_newButton, SLOT(setEnabled(bool)));
+ connect(m_renameButton, SIGNAL(clicked()), kmymoney2->action("budget_rename"), SLOT(activate()));
+ connect(kmymoney2->action("budget_rename"), SIGNAL(enabled(bool)), m_renameButton, SLOT(setEnabled(bool)));
+ connect(m_deleteButton, SIGNAL(clicked()), kmymoney2->action("budget_delete"), SLOT(activate()));
+ connect(kmymoney2->action("budget_delete"), SIGNAL(enabled(bool)), m_deleteButton, SLOT(setEnabled(bool)));
+
+ connect(m_budgetValue, SIGNAL(valuesChanged()), this, SLOT(slotBudgetedAmountChanged()));
+
+ connect(m_newButton, SIGNAL(clicked()), this, SLOT(slotNewBudget()));
+ connect(m_updateButton, SIGNAL(pressed()), this, SLOT(slotUpdateBudget()));
+ connect(m_resetButton, SIGNAL(pressed()), this, SLOT(slotResetBudget()));
+
+ connect(m_hideUnusedButton, SIGNAL(toggled(bool)), this, SLOT(slotHideUnused(bool)));
+
+ // setup initial state
+ m_newButton->setEnabled(kmymoney2->action("budget_new")->isEnabled());
+ m_renameButton->setEnabled(kmymoney2->action("budget_rename")->isEnabled());
+ m_deleteButton->setEnabled(kmymoney2->action("budget_delete")->isEnabled());
+
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotRefreshView()));
+}
+
+KBudgetView::~KBudgetView()
+{
+}
+
+void KBudgetView::show()
+{
+ QTimer::singleShot(50, this, SLOT(slotRearrange()));
+ QWidget::show();
+ if(m_needReload) {
+ slotRefreshView();
+ }
+}
+
+void KBudgetView::polish()
+{
+ KBudgetViewDecl::polish();
+ m_accountTree->restoreLayout("Budget Account View Settings");
+}
+
+void KBudgetView::slotRearrange(void)
+{
+ resizeEvent(0);
+}
+
+void KBudgetView::resizeEvent(QResizeEvent* ev)
+{
+ // resize the register
+ KBudgetViewDecl::resizeEvent(ev);
+}
+
+void KBudgetView::slotReloadView(void)
+{
+ ::timetrace("Start KBudgetView::slotReloadView");
+ slotRearrange();
+ ::timetrace("Done KBudgetView::slotReloadView");
+}
+
+void KBudgetView::loadBudgets(void)
+{
+ QString id;
+
+ ::timetrace("Start KBudgetView::loadBudgets");
+
+ // remember which item is currently selected
+ id = m_budget.id();
+
+ // remember the upper left corner of the viewport
+ QPoint startPoint = m_budgetList->viewportToContents(QPoint(0, 0));
+
+ // turn off updates to avoid flickering during reload
+ m_budgetList->setUpdatesEnabled(false);
+
+ // clear the budget list
+ m_budgetList->clear();
+ m_budgetValue->clear();
+
+ // add the correct years to the drop down list
+ QDate date = QDate::currentDate(Qt::LocalTime);
+ int iStartYear = date.year() - m_iBudgetYearsBack;
+
+ m_yearList.clear();
+ for (int i=0; i<m_iBudgetYearsAhead + m_iBudgetYearsBack; i++)
+ m_yearList += QString::number(iStartYear+i);
+
+ KBudgetListItem* currentItem = 0;
+
+ QValueList<MyMoneyBudget> list = MyMoneyFile::instance()->budgetList();
+ QValueList<MyMoneyBudget>::ConstIterator it;
+ for (it = list.begin(); it != list.end(); ++it)
+ {
+ KBudgetListItem* item = new KBudgetListItem(m_budgetList, *it);
+
+ // create a list of unique years
+ if (m_yearList.findIndex(QString::number((*it).budgetStart().year())) == -1)
+ m_yearList += QString::number((*it).budgetStart().year());
+
+ if(item->budget().id() == id) {
+ m_budget = (*it);
+ currentItem = item;
+ item->setSelected(true);
+ }
+ }
+ m_yearList.sort();
+
+ if (currentItem) {
+ m_budgetList->setCurrentItem(currentItem);
+ }
+
+ // reposition viewport
+ m_budgetList->setContentsPos(startPoint.x(), startPoint.y());
+
+ // turn updates back on
+ m_budgetList->setUpdatesEnabled(true);
+ m_budgetList->repaintContents();
+
+ // reset the status of the buttons
+ m_updateButton->setEnabled(false);
+ m_resetButton->setEnabled(false);
+
+ // make sure the world around us knows what we have selected
+ slotSelectBudget();
+
+ ::timetrace("End KBudgetView::loadBudgets");
+}
+
+void KBudgetView::ensureBudgetVisible(const QString& id)
+{
+ for (QListViewItem * item = m_budgetList->firstChild(); item; item = item->itemBelow()) {
+ KBudgetListItem* p = dynamic_cast<KBudgetListItem*>(item);
+ if(p && p->budget().id() == id) {
+ if(p->itemAbove())
+ m_budgetList->ensureItemVisible(p->itemAbove());
+ if(p->itemBelow())
+ m_budgetList->ensureItemVisible(p->itemBelow());
+
+ m_budgetList->setCurrentItem(p); // active item and deselect all others
+ m_budgetList->setSelected(p, true); // and select it
+ m_budgetList->ensureItemVisible(p);
+ break;
+ }
+ }
+}
+
+void KBudgetView::slotRefreshView(void)
+{
+ if(isVisible()) {
+ if(m_inSelection)
+ QTimer::singleShot(0, this, SLOT(slotRefreshView()));
+ else {
+ loadBudgets();
+ m_needReload = false;
+ }
+ } else {
+ m_needReload = true;
+ }
+}
+
+void KBudgetView::loadAccounts(void)
+{
+ QMap<QString, bool> isOpen;
+
+ ::timetrace("start load budget account view");
+
+ // if no budgets are selected, don't load the accounts
+ // and clear out the previously shown list
+ if (m_budget.id().isEmpty()) {
+ m_accountTree->clear();
+ m_budgetValue->clear();
+ m_updateButton->setEnabled(false);
+ m_resetButton->setEnabled(false);
+ ::timetrace("done load budgets view");
+ return;
+ }
+
+ // remember the id of the current selected item
+ KMyMoneyAccountTreeBaseItem *item = m_accountTree->selectedItem();
+ QString selectedItemId = (item) ? item->id() : QString();
+
+ // keep a map of all 'expanded' accounts
+ QListViewItemIterator it_lvi(m_accountTree);
+ while(it_lvi.current()) {
+ item = dynamic_cast<KMyMoneyAccountTreeBaseItem*>(it_lvi.current());
+ if(item && item->isOpen()) {
+ isOpen[item->id()] = true;
+ }
+ ++it_lvi;
+ }
+
+ // remember the upper left corner of the viewport
+ QPoint startPoint = m_accountTree->viewportToContents(QPoint(0, 0));
+
+ // turn off updates to avoid flickering during reload
+ m_accountTree->setUpdatesEnabled(false);
+
+ // clear the current contents and recreate it
+ m_accountTree->clear();
+ m_transactionCountMap.clear();
+
+ // make sure, the pointers are not pointing to some deleted object
+ m_incomeItem = m_expenseItem = 0;
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ m_transactionCountMap = file->transactionCountMap();
+
+ m_accountTree->setBaseCurrency(file->baseCurrency());
+
+ bool haveUnusedBudgets = false;
+
+ // create the items
+ try {
+ const MyMoneySecurity& security = file->baseCurrency();
+ m_accountTree->setBaseCurrency(security);
+
+ const MyMoneyAccount& income = file->income();
+ QStringList incSubAcctList = income.accountList();
+ m_incomeItem = new KMyMoneyAccountTreeBudgetItem(m_accountTree, income, m_budget, security, i18n("Income"));
+ haveUnusedBudgets |= loadSubAccounts(m_incomeItem, incSubAcctList, m_budget);
+ m_incomeItem->setSelectable(false);
+
+ const MyMoneyAccount& expense = file->expense();
+ QStringList expSubAcctList = expense.accountList();
+ m_expenseItem = new KMyMoneyAccountTreeBudgetItem(m_accountTree, expense, m_budget, security, i18n("Expense"));
+ haveUnusedBudgets |= loadSubAccounts(m_expenseItem, expSubAcctList, m_budget);
+ m_expenseItem->setSelectable(false);
+
+ } catch(MyMoneyException *e) {
+ kdDebug(2) << "Problem in budgetview: " << e->what();
+ delete e;
+ }
+
+ // scan through the list of accounts and re-expand those that were
+ // expanded and re-select the one that was probably selected before
+ it_lvi = QListViewItemIterator(m_accountTree);
+ while(it_lvi.current()) {
+ item = dynamic_cast<KMyMoneyAccountTreeBaseItem*>(it_lvi.current());
+ if(item) {
+ if(item->id() == selectedItemId)
+ m_accountTree->setSelected(item, true);
+ if(isOpen.find(item->id()) != isOpen.end())
+ item->setOpen(true);
+ }
+ ++it_lvi;
+ }
+
+ // reposition viewport
+ m_accountTree->setContentsPos(startPoint.x(), startPoint.y());
+
+ // turn updates back on
+ m_accountTree->setUpdatesEnabled(true);
+ m_accountTree->repaintContents();
+
+ m_updateButton->setEnabled(!(selectedBudget() == m_budget));
+ m_resetButton->setEnabled(!(selectedBudget() == m_budget));
+
+ ::timetrace("done load budgets view");
+}
+
+
+bool KBudgetView::loadSubAccounts(KMyMoneyAccountTreeBudgetItem* parent, QStringList& accountList, const MyMoneyBudget& budget)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ bool unused = false;
+
+ //sort the subaccount list
+ //FIXME this is just a hack to order the accounts
+ if ( !accountList.isEmpty() ) {
+ QMap<QString, MyMoneyAccount> accountMap;
+ QValueList<MyMoneyAccount> alist;
+ file->accountList ( alist, accountList );
+ accountList.clear();
+ QValueList<MyMoneyAccount>::const_iterator it_ac;
+ for ( it_ac = alist.begin(); it_ac != alist.end(); ++it_ac ) {
+ accountMap[(*it_ac).name()] = *it_ac;
+ }
+ QMap<QString, MyMoneyAccount>::const_iterator it_am;
+ for ( it_am = accountMap.begin(); it_am != accountMap.end(); ++it_am ) {
+ accountList.prepend((*it_am).id()); //use prepend instead of append otherwise account show up in ascending order
+ }
+ }
+
+ QStringList::const_iterator it_a;
+ for(it_a = accountList.begin(); it_a != accountList.end(); ++it_a) {
+ const MyMoneyAccount& acc = file->account(*it_a);
+ QValueList<MyMoneyPrice> prices;
+ MyMoneySecurity security = file->baseCurrency();
+ try {
+ if(acc.isInvest()) {
+ security = file->security(acc.currencyId());
+ prices += file->price(acc.currencyId(), security.tradingCurrency());
+ if(security.tradingCurrency() != file->baseCurrency().id()) {
+ MyMoneySecurity sec = file->security(security.tradingCurrency());
+ prices += file->price(sec.id(), file->baseCurrency().id());
+ }
+ } else if(acc.currencyId() != file->baseCurrency().id()) {
+ if(acc.currencyId() != file->baseCurrency().id()) {
+ security = file->security(acc.currencyId());
+ prices += file->price(acc.currencyId(), file->baseCurrency().id());
+ }
+ }
+
+ } catch(MyMoneyException *e) {
+ kdDebug(2) << __PRETTY_FUNCTION__ << " caught exception while adding " << acc.name() << "[" << acc.id() << "]: " << e->what();
+ delete e;
+ }
+
+ QStringList subAcctList = acc.accountList();
+ KMyMoneyAccountTreeBudgetItem *item = new KMyMoneyAccountTreeBudgetItem(parent, acc, budget, prices, security);
+ unused |= loadSubAccounts(item, subAcctList, budget);
+
+ // no child accounts and no value assigned to this account
+ bool thisUnused = (!item->firstChild()) && (!budget.contains(acc.id()));
+
+ // In case of a budget which is unused and we are requested to suppress
+ // the display of those,
+ if(acc.accountGroup() == MyMoneyAccount::Income
+ || acc.accountGroup() == MyMoneyAccount::Expense) {
+ if(m_hideUnusedButton->isEnabled() && m_hideUnusedButton->isChecked() && thisUnused) {
+ unused = true;
+ delete item;
+ }
+ }
+ }
+ return unused;
+}
+
+void KBudgetView::askSave(void)
+{
+ // check if the content of a currently selected budget was modified
+ // and ask to store the data
+ if (m_updateButton->isEnabled()) {
+ if (KMessageBox::questionYesNo(this, QString("<qt>%1</qt>").arg(
+ i18n("Do you want to save the changes for <b>%1</b>").arg(m_budget.name())),
+ i18n("Save changes")) == KMessageBox::Yes) {
+ m_inSelection = true;
+ slotUpdateBudget();
+ m_inSelection = false;
+ }
+ }
+}
+
+void KBudgetView::slotRefreshHideUnusedButton(void)
+{
+ m_hideUnusedButton->setDisabled(m_budget.getaccounts().isEmpty());
+}
+
+void KBudgetView::slotSelectBudget(void)
+{
+ askSave();
+ KBudgetListItem* item;
+ if (m_budget.id().isEmpty()) {
+ item = dynamic_cast<KBudgetListItem*>(m_budgetList->firstChild());
+ if(item) {
+ m_budgetList->blockSignals(true);
+ m_budgetList->setSelected(item, true); // WRTODO das auch beim NewBudget machen
+ m_budgetList->blockSignals(false);
+ }
+ }
+
+ m_accountTree->setEnabled(false);
+ m_assignmentBox->setEnabled(false);
+ m_budget = MyMoneyBudget();
+
+ QListViewItemIterator it_l(m_budgetList, QListViewItemIterator::Selected);
+ item = dynamic_cast<KBudgetListItem*>(it_l.current());
+ if(item) {
+ m_budget = item->budget();
+ m_accountTree->setEnabled(true);
+ }
+
+ slotRefreshHideUnusedButton();
+ loadAccounts();
+
+ QValueList<MyMoneyBudget> budgetList;
+ if(!m_budget.id().isEmpty())
+ budgetList << m_budget;
+ emit selectObjects(budgetList);
+}
+
+void KBudgetView::slotHideUnused(bool toggled)
+{
+ // make sure we show all items for an empty budget
+ bool prevState=!toggled;
+ slotRefreshHideUnusedButton();
+ if (prevState!=m_hideUnusedButton->isChecked())
+ loadAccounts();
+}
+
+const MyMoneyBudget& KBudgetView::selectedBudget(void) const
+{
+ static MyMoneyBudget nullBudget;
+
+ QListViewItemIterator it_l(m_budgetList, QListViewItemIterator::Selected);
+ KBudgetListItem* item = dynamic_cast<KBudgetListItem*>(it_l.current());
+ if(item) {
+ return item->budget();
+ }
+
+ return nullBudget;
+}
+
+KMyMoneyAccountTreeBudgetItem* KBudgetView::selectedAccount(void) const
+{
+ QListViewItemIterator it_l(m_accountTree, QListViewItemIterator::Selected);
+ KMyMoneyAccountTreeBudgetItem* item = dynamic_cast<KMyMoneyAccountTreeBudgetItem*>(it_l.current());
+ return item;
+}
+
+void KBudgetView::slotOpenContextMenu(KListView* lv, QListViewItem* i, const QPoint& p)
+{
+ Q_UNUSED(lv);
+ Q_UNUSED(p);
+
+ m_accountTree->setUpdatesEnabled(false);
+
+ KBudgetListItem* item = dynamic_cast<KBudgetListItem*>(i);
+ if (item)
+ emit openContextMenu(item->budget());
+ else
+ emit openContextMenu(MyMoneyBudget());
+
+ m_accountTree->setUpdatesEnabled(true);
+}
+
+void KBudgetView::slotStartRename(void)
+{
+ QListViewItemIterator it_l(m_budgetList, QListViewItemIterator::Selected);
+ QListViewItem* it_v;
+ if((it_v = it_l.current()) != 0) {
+ it_v->startRename(0);
+ }
+}
+
+// This variant is only called when a single budget is selected and renamed.
+void KBudgetView::slotRenameBudget(QListViewItem* p , int /*col*/, const QString& txt)
+{
+ KBudgetListItem *pBudget = dynamic_cast<KBudgetListItem*> (p);
+ if (!pBudget)
+ return;
+
+ //kdDebug() << "[KPayeesView::slotRenamePayee]" << endl;
+ // create a copy of the new name without appended whitespaces
+ QString new_name = txt.stripWhiteSpace();
+ if (pBudget->budget().name() != new_name) {
+ MyMoneyFileTransaction ft;
+ try {
+ // check if we already have a budget with the new name
+ try {
+ // this function call will throw an exception, if the budget
+ // hasn't been found.
+ MyMoneyFile::instance()->budgetByName(new_name);
+ // the name already exists, ask the user whether he's sure to keep the name
+ if (KMessageBox::questionYesNo(this,
+ i18n("A budget with the name '%1' already exists. It is not advisable to have "
+ "multiple budgets with the same identification name. Are you sure you would like "
+ "to rename the budget?").arg(new_name)) != KMessageBox::Yes)
+ {
+ p->setText(0,pBudget->budget().name());
+ return;
+ }
+ } catch(MyMoneyException *e) {
+ // all ok, the name is unique
+ delete e;
+ }
+
+ MyMoneyBudget b = pBudget->budget();
+ b.setName(new_name);
+ // don't use pBudget beyond this point as it will change due to call to modifyBudget
+ pBudget = 0;
+
+ MyMoneyFile::instance()->modifyBudget(b);
+
+ // the above call to modifyBudget will reload the view so
+ // all references and pointers to the view have to be
+ // re-established. You cannot use pBudget beyond this point!!!
+ ft.commit();
+
+ } catch(MyMoneyException *e) {
+ KMessageBox::detailedSorry(0, i18n("Unable to modify budget"),
+ (e->what() + " " + i18n("thrown in") + " " + e->file()+ ":%1").arg(e->line()));
+ delete e;
+ }
+ }
+ else {
+ pBudget->setText(0, new_name);
+ }
+}
+
+void KBudgetView::slotSelectAccount(QListViewItem* item)
+{
+ if(item->listView() == m_accountTree) {
+ m_assignmentBox->setEnabled(false);
+ KMyMoneyAccountTreeBudgetItem *account = selectedAccount();
+ m_assignmentBox->setEnabled(account != 0);
+
+ if(account) {
+ if (m_budget.id().isEmpty() )
+ return;
+
+ QString id = account->id();
+ m_leAccounts->setText(MyMoneyFile::instance()->accountToCategory(id));
+ m_cbBudgetSubaccounts->setChecked(m_budget.account(id).budgetSubaccounts());
+ m_accountTotal->setValue(m_budget.account(id).totalBalance());
+
+ MyMoneyBudget::AccountGroup budgetAccount = m_budget.account( id );
+ if ( id != budgetAccount.id() ) {
+ budgetAccount.setBudgetLevel(MyMoneyBudget::AccountGroup::eMonthly);
+ }
+ m_budgetValue->setBudgetValues(m_budget, budgetAccount);
+ }
+ }
+}
+
+void KBudgetView::slotBudgetedAmountChanged(void)
+{
+ if (m_budget.id().isEmpty())
+ return;
+
+ KMyMoneyAccountTreeBudgetItem *account;
+ if ((account=selectedAccount()) == NULL)
+ return;
+
+ MyMoneyBudget::AccountGroup accountGroup = m_budget.account(account->id());
+ accountGroup.setId( account->id() );
+ m_budgetValue->budgetValues(m_budget, accountGroup);
+ m_budget.setAccount(accountGroup, account->id());
+
+ account->setBudget(m_budget);
+ m_accountTotal->setValue(accountGroup.totalBalance());
+
+ m_updateButton->setEnabled(!(selectedBudget() == m_budget));
+ m_resetButton->setEnabled(!(selectedBudget() == m_budget));
+}
+
+void KBudgetView::AccountEnter()
+{
+ if (m_budget.id().isEmpty())
+ return;
+
+ //(ace) kCategoryWidget not currently defined
+ KMyMoneyAccountTreeBudgetItem *item = NULL; //dynamic_cast<KMyMoneyAccountTreeBudgetItem*> (m_accountTree->findItem(m_leAccounts->selectedAccountId()));
+ if (item)
+ {
+ m_accountTree->setCurrentItem(item);
+ m_accountTree->setOpen(item, true);
+ }
+}
+
+
+void KBudgetView::cb_includesSubaccounts_clicked()
+{
+ if (m_budget.id().isEmpty())
+ return;
+
+ if(selectedAccount() != 0) {
+ QString accountID = selectedAccount()->id();
+ // now, we get a reference to the accountgroup, to mofify its atribute,
+ // and then put the resulting account group instead of the original
+
+ MyMoneyBudget::AccountGroup auxAccount = m_budget.account(accountID);
+ auxAccount.setBudgetSubaccounts( m_cbBudgetSubaccounts->isChecked());
+ m_budget.setAccount( auxAccount, accountID);
+
+ loadAccounts();
+ }
+}
+
+void KBudgetView::slotNewBudget(void)
+{
+ askSave();
+ kmymoney2->action("budget_new")->activate();
+}
+
+void KBudgetView::slotResetBudget(void)
+{
+ try {
+ m_budget = MyMoneyFile::instance()->budget(m_budget.id());
+ loadAccounts();
+ } catch(MyMoneyException *e) {
+ KMessageBox::detailedSorry(0, i18n("Unable to reset budget"),
+ (e->what() + " " + i18n("thrown in") + " " + e->file()+ ":%1").arg(e->line()));
+ delete e;
+ }
+}
+
+void KBudgetView::slotUpdateBudget(void)
+{
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyFile::instance()->modifyBudget(m_budget);
+ ft.commit();
+ slotRefreshHideUnusedButton();
+ } catch(MyMoneyException *e) {
+ KMessageBox::detailedSorry(0, i18n("Unable to modify budget"),
+ (e->what() + " " + i18n("thrown in") + " " + e->file()+ ":%1").arg(e->line()));
+ delete e;
+ }
+}
+
+void KBudgetView::languageChange(void)
+{
+ KBudgetViewDecl::languageChange();
+
+ m_newButton->setText(QString());
+ m_renameButton->setText(QString());
+ m_deleteButton->setText(QString());
+ m_updateButton->setText(QString());
+ m_resetButton->setText(QString());
+}
+
+#include "kbudgetview.moc"
diff --git a/kmymoney2/views/kbudgetview.h b/kmymoney2/views/kbudgetview.h
new file mode 100644
index 0000000..f857a15
--- /dev/null
+++ b/kmymoney2/views/kbudgetview.h
@@ -0,0 +1,221 @@
+/***************************************************************************
+ kbudgetview.h
+ -------------
+ begin : Thu Jan 24 2002
+ copyright : (C) 2006 by Darren Gould
+ email : darren_gould@gmx.de
+***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KBUDGETVIEW_H
+#define KBUDGETVIEW_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klistview.h>
+#include <kpopupmenu.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kbudgetviewdecl.h"
+#include "../mymoney/mymoneybudget.h"
+#include "../mymoney/mymoneysecurity.h"
+class KMyMoneyAccountTreeBudgetItem;
+
+/**
+ * @author Darren Gould
+ * @author Thomas Baumgart
+ *
+ *
+ * This class represents an item in the budgets list view.
+ */
+class KBudgetListItem : public KListViewItem
+{
+public:
+ /**
+ * Constructor to be used to construct a budget entry object.
+ *
+ * @param parent pointer to the KListView object this entry should be
+ * added to.
+ * @param budget const reference to MyMoneyBudget for which
+ * the KListView entry is constructed
+ */
+ KBudgetListItem(KListView *parent, const MyMoneyBudget& budget);
+ ~KBudgetListItem();
+
+ /**
+ * This method is re-implemented from QListViewItem::paintCell().
+ * Besides the standard implementation, the QPainter is set
+ * according to the applications settings.
+ */
+ void paintCell(QPainter *p, const QColorGroup & cg, int column, int width, int align);
+
+ const MyMoneyBudget& budget(void) { return m_budget; };
+ void setBudget(const MyMoneyBudget& budget) { m_budget = budget; }
+
+private:
+ MyMoneyBudget m_budget;
+};
+
+/**
+ * @author Darren Gould
+ * @author Thomas Baumgart
+ */
+class KBudgetView : public KBudgetViewDecl
+{
+ Q_OBJECT
+public:
+ KBudgetView(QWidget *parent=0, const char *name=0);
+ ~KBudgetView();
+ void show();
+
+ /**
+ * Override the base class behaviour to restore the layout. Do not
+ * do this in show() because show() itself may change the layout
+ * in undesired ways.
+ */
+ void polish(void);
+
+ /**
+ * This method is used to suppress updates for specific times
+ * (e.g. during creation of a new MyMoneyFile object when the
+ * default accounts are loaded). The behaviour of update() is
+ * controlled with the parameter.
+ *
+ * @param suspend Suspend updates or not. Possible values are
+ *
+ * @li true updates are suspended
+ * @li false updates will be performed immediately
+ *
+ * When a true/false transition of the parameter between
+ * calls to this method is detected,
+ * refresh() will be invoked once automatically.
+ */
+ void suspendUpdate(const bool suspend);
+
+public slots:
+ void slotReloadView(void);
+ void slotRefreshView(void);
+ void slotSelectBudget(void);
+ void slotHideUnused(bool);
+ void slotRefreshHideUnusedButton();
+ void slotStartRename(void);
+
+ /**
+ *This is to update the information about the checkbox "budget amount integrates subaccounts" into the file, when the user clicks the check box
+ */
+ void cb_includesSubaccounts_clicked();
+
+
+protected:
+ void resizeEvent(QResizeEvent*);
+ void loadAccounts(void);
+ bool loadSubAccounts(KMyMoneyAccountTreeBudgetItem* parent, QStringList& accountList, const MyMoneyBudget& budget);
+
+ /**
+ * This method loads all available budgets into the budget list widget. If a budget is
+ * currently selected it remains selected if it is still present.
+ */
+ void loadBudgets(void);
+ void ensureBudgetVisible(const QString& id);
+ const MyMoneyBudget& selectedBudget(void) const;
+ KMyMoneyAccountTreeBudgetItem* selectedAccount(void) const;
+ void setTimeSpan(KMyMoneyAccountTreeBudgetItem *account, MyMoneyBudget::AccountGroup& accountGroup, int iTimeSpan);
+ void askSave(void);
+
+protected slots:
+
+ /**
+ * This slot is called when the name of a budget is changed inside
+ * the budget list view and only a single budget is selected.
+ *
+ * @param p The listviewitem containing the budget name
+ * @param col The column where the name is located
+ * @param txt The text of the new name
+ */
+ void slotRenameBudget(QListViewItem *p, int col, const QString& txt);
+
+ /**
+ * This slot is called when the amount of a budget is changed. It
+ * updates the budget and stores it in the engine
+ */
+ void slotBudgetedAmountChanged(void);
+
+ /**
+ */
+ void slotSelectAccount(QListViewItem*);
+
+ void AccountEnter();
+
+ void slotUpdateBudget(void);
+
+ void slotResetBudget(void);
+
+ void slotNewBudget(void);
+
+ void languageChange(void);
+
+private slots:
+ void slotRearrange(void);
+
+ /**
+ * This slot receives the signal from the listview control that an item was right-clicked,
+ * If @p item points to a real budget item, emits openContextMenu().
+ *
+ * @param lv pointer to the listview
+ * @param i the item on which the cursor resides
+ * @param p position of the pointing device
+ */
+ void slotOpenContextMenu(KListView* lv, QListViewItem* i, const QPoint& p);
+
+signals:
+ /**
+ * This signal serves as proxy for KMyMoneyBudgetList::selectObject()
+ */
+ void openContextMenu(const MyMoneyObject& obj);
+ void selectObjects(const QValueList<MyMoneyBudget>& budget);
+
+private:
+ typedef enum {
+ eNone=-1,
+ eYearly=0,
+ eMonthly=1,
+ eMonthByMonth=2
+ } eTimePeriodColumn;
+
+ MyMoneyBudget m_budget;
+
+ QMap<QString, unsigned long> m_transactionCountMap;
+ QStringList m_yearList;
+
+ KMyMoneyAccountTreeBudgetItem* m_incomeItem;
+ KMyMoneyAccountTreeBudgetItem* m_expenseItem;
+
+ /// set if a view needs to be reloaded during show()
+ bool m_needReload;
+
+ // set if we are in the selection of a different budget
+ bool m_inSelection;
+
+ void adaptHideUnusedButton(void);
+
+ static const int m_iBudgetYearsAhead;
+ static const int m_iBudgetYearsBack;
+};
+
+#endif
diff --git a/kmymoney2/views/kbudgetviewdecl.ui b/kmymoney2/views/kbudgetviewdecl.ui
new file mode 100644
index 0000000..f3fb5be
--- /dev/null
+++ b/kmymoney2/views/kbudgetviewdecl.ui
@@ -0,0 +1,348 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KBudgetViewDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KBudgetViewDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>957</width>
+ <height>610</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>1</horstretch>
+ <verstretch>1</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="focusPolicy">
+ <enum>TabFocus</enum>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout7</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Your budgets</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout8</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_newButton</cstring>
+ </property>
+ <property name="text">
+ <string>New</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_renameButton</cstring>
+ </property>
+ <property name="text">
+ <string>Ren</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_deleteButton</cstring>
+ </property>
+ <property name="text">
+ <string>Del</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_resetButton</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Res</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_updateButton</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Upd</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="KListView">
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Year</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>false</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>m_budgetList</cstring>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="showSortIndicator">
+ <bool>true</bool>
+ </property>
+ <property name="fullWidth">
+ <bool>false</bool>
+ </property>
+ <property name="shadeSortColumn">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KMyMoneyAccountTreeBudget">
+ <property name="name">
+ <cstring>m_accountTree</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>5</horstretch>
+ <verstretch>1</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_hideUnusedButton</cstring>
+ </property>
+ <property name="text">
+ <string>Hide unused budget categories</string>
+ </property>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>m_assignmentBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>5</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Assignments</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout7</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Account</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>m_leAccounts</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Total</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit">
+ <property name="name">
+ <cstring>m_accountTotal</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="calculatorButtonVisibility" stdset="0">
+ <bool>false</bool>
+ </property>
+ <property name="resetButtonVisibility" stdset="0">
+ <bool>false</bool>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_cbBudgetSubaccounts</cstring>
+ </property>
+ <property name="text">
+ <string>Include subaccounts</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout9</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KBudgetValues">
+ <property name="name">
+ <cstring>m_budgetValue</cstring>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>KMyMoneyAccountTreeBudget</class>
+ <header location="local">../widgets/kmymoneyaccounttreebudget.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="870">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000032d49444154388db59531681c4714863f892dde8004b320c32e3870020b74458a6b0f5458e581c016a809a8496b42208454098604d2c4904a6954a410511ae752085b858c1208dc35221244b00119f60ac12ee860062c980719708a95a248f129459cd7cceeccf0edb76fff61a706830197d5ed765ff3166a30184c4d5d829fed3c7bdd5e6ce3bda71a5738ef301802e1d6d179477152303c1842bc822797a64fbf7b4a9a43be00ada817cb0e12011c2611205ccd73755f9c087c6b19bef0d7c100f5b8267d07caf10fe8ab9210156320fc01be16aa5a11043307f30b20a21041019985f48ef2f7fa0becc68e80475fd584e831b396f210f67795c3831a4940a3228925bb27f4d652ba4b01a199b73342f3981be0ca57745042ac30c632d853b6373d44b056c8ef0922508d94d14be59b2f4aeaf58cd5751069e06f3436890114332b9487d0bf80f61e64dc5f813c3790045453f67703fd4d4f7f6b4496b5597e689044af194f5f5e841800210478bee3d1a8f41e64acbe0f69ae6852e1cf0ccf7f74f4d652defbc042226c6f55e8f89f91bb6e9c387c9d521c9558db988a3416fe3c67e32b4779ec7167f0e8939ce19ea7fc5d298a80c875f03563930855ed2081bc05e91d5014ef53363eaf288e3d6285ee520a338e76c7a251a94e41e30470d3631004a262672e3eca59cec6978ef2b889979d11f2bb904af3be92081a416e28dfe831983920b1142345d5b0ff2234a6334276d7321ad53c795c511ca654a5a251996f19b83d158ef602b45a423d52f67703abeb29ee4ce9de4fc93378f218462f6b3efdb042cf3d59666977a0aa6fe9310888d25b13342afd4dcffeaee3d147399da540ab13f8f8b39c2cb3f8710d11ba2b96f9c57fcd7180287497a03ecde86f8dd8fe1a867b9ef6bb1612a84a871f6bd35b94e217a53832589970f2dcd85d9c7d4580d57521cbdaf4bfaf288e95e268d4ec8e60e72ccb0f2dbffea454e71e8d29f57882717152509482a48d8924b0bc12e82ee51445a03a6da079cbd0eec0fc22142b06620e89a3fc8d3783870743d814d2bc8994aa6ff286472e764902e5a96f72bbd3b4c37b280e95aa9e604c84e1cf978b37c74935797d7ae2ca7fac6968fe51ff0bf86dc30783c1d49f0baa9bb819e612310000000049454e44ae426082</data>
+ </image>
+</images>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/views/kcategoriesview.cpp b/kmymoney2/views/kcategoriesview.cpp
new file mode 100644
index 0000000..e01d62b
--- /dev/null
+++ b/kmymoney2/views/kcategoriesview.cpp
@@ -0,0 +1,313 @@
+/***************************************************************************
+ kcategoriesview.cpp - description
+ -------------------
+ begin : Sun Jan 20 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlabel.h>
+#include <qlayout.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kdebug.h>
+#include <kiconloader.h>
+#include <kguiitem.h>
+#include <kpushbutton.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/kmymoneyaccounttree.h>
+#include "kcategoriesview.h"
+#include "../widgets/klistviewsearchline.h"
+#include "../kmymoneyglobalsettings.h"
+#include "../kmymoney2.h"
+
+
+KCategoriesView::KCategoriesView(QWidget *parent, const char *name ) :
+ KCategoriesViewDecl(parent, name),
+ m_incomeItem(0),
+ m_expenseItem(0),
+ m_needReload(false)
+{
+ // create the searchline widget
+ // and insert it into the existing layout
+ m_searchWidget = new KListViewSearchLineWidget(m_accountTree, m_accountTree->parentWidget());
+ QVBoxLayout* layout = dynamic_cast<QVBoxLayout*>(m_accountTree->parentWidget()->layout());
+ if(layout) {
+ layout->insertWidget(0, m_searchWidget);
+ }
+
+ // setup icons for collapse and expand button
+ KIconLoader *ic = KGlobal::iconLoader();
+ KGuiItem collapseGuiItem("",
+ QIconSet(ic->loadIcon("viewmag-", KIcon::Small, KIcon::SizeSmall)),
+ QString(),
+ QString());
+ KGuiItem expandGuiItem("",
+ QIconSet(ic->loadIcon("viewmag+", KIcon::Small, KIcon::SizeSmall)),
+ QString(),
+ QString());
+ m_collapseButton->setGuiItem(collapseGuiItem);
+ m_expandButton->setGuiItem(expandGuiItem);
+
+ m_accountTree->setSectionHeader(i18n("Category"));
+
+ connect(m_accountTree, SIGNAL(selectObject(const MyMoneyObject&)), this, SIGNAL(selectObject(const MyMoneyObject&)));
+ connect(m_accountTree, SIGNAL(openContextMenu(const MyMoneyObject&)), this, SIGNAL(openContextMenu(const MyMoneyObject&)));
+ connect(m_accountTree, SIGNAL(valueChanged(void)), this, SLOT(slotUpdateProfit(void)));
+ connect(m_accountTree, SIGNAL(openObject(const MyMoneyObject&)), this, SIGNAL(openObject(const MyMoneyObject&)));
+ connect(m_accountTree, SIGNAL(reparent(const MyMoneyAccount&, const MyMoneyAccount&)), this, SIGNAL(reparent(const MyMoneyAccount&, const MyMoneyAccount&)));
+
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotLoadAccounts()));
+ connect(m_collapseButton, SIGNAL(clicked()), this, SLOT(slotExpandCollapse()));
+ connect(m_expandButton, SIGNAL(clicked()), this, SLOT(slotExpandCollapse()));
+}
+
+KCategoriesView::~KCategoriesView()
+{
+}
+
+void KCategoriesView::slotExpandCollapse(void)
+{
+ if(sender()) {
+ KMyMoneyGlobalSettings::setShowAccountsExpanded(sender() == m_expandButton);
+ }
+}
+
+
+void KCategoriesView::show(void)
+{
+ if(m_needReload) {
+ loadAccounts();
+ m_needReload = false;
+ }
+
+ // don't forget base class implementation
+ KCategoriesViewDecl::show();
+
+ // if we have a selected account, let the application know about it
+ KMyMoneyAccountTreeBaseItem *item = m_accountTree->selectedItem();
+ if(item) {
+ emit selectObject(item->itemObject());
+ }
+}
+
+void KCategoriesView::polish(void)
+{
+ KCategoriesViewDecl::polish();
+ m_accountTree->setResizeMode(QListView::LastColumn);
+ m_accountTree->restoreLayout("Category View Settings");
+
+}
+
+void KCategoriesView::slotLoadAccounts(void)
+{
+ if(isVisible()) {
+ loadAccounts();
+ } else {
+ m_needReload = true;
+ }
+}
+
+void KCategoriesView::loadAccounts(void)
+{
+ QMap<QString, bool> isOpen;
+
+ ::timetrace("start load categories view");
+ // remember the id of the current selected item
+ KMyMoneyAccountTreeBaseItem *item = m_accountTree->selectedItem();
+ QString selectedItemId = (item) ? item->id() : QString();
+
+ // keep a map of all 'expanded' accounts
+ QListViewItemIterator it_lvi(m_accountTree);
+ while(it_lvi.current()) {
+ item = dynamic_cast<KMyMoneyAccountTreeItem*>(it_lvi.current());
+ if(item && item->isOpen()) {
+ isOpen[item->id()] = true;
+ }
+ ++it_lvi;
+ }
+
+ // remember the upper left corner of the viewport
+ QPoint startPoint = m_accountTree->viewportToContents(QPoint(0, 0));
+
+ // turn off updates to avoid flickering during reload
+ m_accountTree->setUpdatesEnabled(false);
+
+ // clear the current contents and recreate it
+ m_accountTree->clear();
+ m_securityMap.clear();
+ m_transactionCountMap.clear();
+
+ // make sure, the pointers are not pointing to some deleted object
+ m_incomeItem = m_expenseItem = 0;
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ QValueList<MyMoneySecurity> slist = file->currencyList();
+ slist += file->securityList();
+ QValueList<MyMoneySecurity>::const_iterator it_s;
+ for(it_s = slist.begin(); it_s != slist.end(); ++it_s) {
+ m_securityMap[(*it_s).id()] = *it_s;
+ }
+
+ m_transactionCountMap = file->transactionCountMap();
+
+ bool haveUnusedCategories = false;
+
+ // create the items
+ try {
+ const MyMoneySecurity& security = file->baseCurrency();
+ m_accountTree->setBaseCurrency(security);
+
+ const MyMoneyAccount& income = file->income();
+ m_incomeItem = new KMyMoneyAccountTreeItem(m_accountTree, income, security, i18n("Income"));
+ haveUnusedCategories |= loadSubAccounts(m_incomeItem, income.accountList());
+
+ const MyMoneyAccount& expense = file->expense();
+ m_expenseItem = new KMyMoneyAccountTreeItem(m_accountTree, expense, security, i18n("Expense"));
+ haveUnusedCategories |= loadSubAccounts(m_expenseItem, expense.accountList());
+
+ } catch(MyMoneyException *e) {
+ kdDebug(2) << "Problem in categoriesview: " << e->what() << endl;
+ delete e;
+ }
+
+ // scan through the list of accounts and re-expand those that were
+ // expanded and re-select the one that was probably selected before
+ it_lvi = QListViewItemIterator(m_accountTree);
+ while(it_lvi.current()) {
+ item = dynamic_cast<KMyMoneyAccountTreeItem*>(it_lvi.current());
+ if(item) {
+ if(item->id() == selectedItemId)
+ m_accountTree->setSelected(item, true);
+ if(isOpen.find(item->id()) != isOpen.end())
+ item->setOpen(true);
+ }
+ ++it_lvi;
+ }
+
+ // reposition viewport
+ m_accountTree->setContentsPos(startPoint.x(), startPoint.y());
+
+ m_searchWidget->searchLine()->updateSearch(QString::null);
+
+ // turn updates back on
+ m_accountTree->setUpdatesEnabled(true);
+ m_accountTree->repaintContents();
+
+ // and in case we need to show things expanded, we'll do so
+ if(KMyMoneyGlobalSettings::showAccountsExpanded())
+ m_accountTree->slotExpandAll();
+
+ // update the hint if categories are hidden
+ m_hiddenCategories->setShown(haveUnusedCategories);
+
+ ::timetrace("done load categories view");
+}
+
+bool KCategoriesView::loadSubAccounts(KMyMoneyAccountTreeItem* parent, const QStringList& accountList)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ bool unused = false;
+
+ QStringList::const_iterator it_a;
+ for(it_a = accountList.begin(); it_a != accountList.end(); ++it_a) {
+ const MyMoneyAccount& acc = file->account(*it_a);
+ QValueList<MyMoneyPrice> prices;
+ MyMoneySecurity security = file->baseCurrency();
+ try {
+ if(acc.isInvest()) {
+ security = m_securityMap[acc.currencyId()];
+ prices += file->price(acc.currencyId(), security.tradingCurrency());
+ if(security.tradingCurrency() != file->baseCurrency().id()) {
+ MyMoneySecurity sec = m_securityMap[security.tradingCurrency()];
+ prices += file->price(sec.id(), file->baseCurrency().id());
+ }
+ } else if(acc.currencyId() != file->baseCurrency().id()) {
+ if(acc.currencyId() != file->baseCurrency().id()) {
+ security = m_securityMap[acc.currencyId()];
+ prices += file->price(acc.currencyId(), file->baseCurrency().id());
+ }
+ }
+
+ } catch(MyMoneyException *e) {
+ kdDebug(2) << __PRETTY_FUNCTION__ << " caught exception while adding " << acc.name() << "[" << acc.id() << "]: " << e->what();
+ delete e;
+ }
+
+ KMyMoneyAccountTreeItem* item = new KMyMoneyAccountTreeItem(parent, acc, prices, security);
+ unused |= loadSubAccounts(item, acc.accountList());
+
+ // no child accounts and not transactions in this account means 'unused'
+ bool thisUnused = (!item->firstChild()) && (m_transactionCountMap[acc.id()] == 0);
+
+ // In case of a category which is unused and we are requested to suppress
+ // the display of those,
+ if(acc.accountGroup() == MyMoneyAccount::Income
+ || acc.accountGroup() == MyMoneyAccount::Expense) {
+ if(KMyMoneyGlobalSettings::hideUnusedCategory() && thisUnused) {
+ unused = true;
+ delete item;
+ }
+ }
+ }
+ return unused;
+}
+
+void KCategoriesView::slotUpdateProfit(void)
+{
+ if(!m_incomeItem || !m_expenseItem)
+ return;
+
+ MyMoneyMoney profit = m_incomeItem->totalValue() - m_expenseItem->totalValue();
+
+ QString s(i18n("Profit: "));
+ if(profit.isNegative())
+ s = i18n("Loss: ");
+
+ // FIXME figure out how to deal with the approximate
+ // if(!(file->totalValueValid(assetAccount.id()) & file->totalValueValid(liabilityAccount.id())))
+ // s += "~ ";
+
+ s.replace(QString(" "), QString("&nbsp;"));
+ if(profit.isNegative()) {
+ s += "<b><font color=\"red\">";
+ }
+ const MyMoneySecurity& sec = MyMoneyFile::instance()->baseCurrency();
+ QString v(profit.abs().formatMoney(sec));
+ s += v.replace(QString(" "), QString("&nbsp;"));
+ if(profit.isNegative()) {
+ s += "</font></b>";
+ }
+
+ m_totalProfitsLabel->setFont(KMyMoneyGlobalSettings::listCellFont());
+ m_totalProfitsLabel->setText(s);
+}
+
+#include "kcategoriesview.moc"
+
diff --git a/kmymoney2/views/kcategoriesview.h b/kmymoney2/views/kcategoriesview.h
new file mode 100644
index 0000000..4a6ad3c
--- /dev/null
+++ b/kmymoney2/views/kcategoriesview.h
@@ -0,0 +1,147 @@
+/***************************************************************************
+ kcategoriesview.h - description
+ -------------------
+ begin : Sun Jan 20 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ (C) 2005 by Thomas Baumgart
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KCATEGORIESVIEW_H
+#define KCATEGORIESVIEW_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/kmymoneyaccounttree.h>
+#include <kmymoney/mymoneyutils.h>
+class KListViewSearchLineWidget;
+
+#include "kcategoriesviewdecl.h"
+
+/**
+ * @brief This class contains the implementation of the categories view.
+ * @author Michael Edwardes, Thomas Baumgart
+ *
+ * While named "categories view", this view actually displays all accounts
+ * that are children of the global "Income" and "Expense" accounts. Even though
+ * categories are internally just accounts as well, the distinction between
+ * categories and accounts in the user interface is done for better
+ * usability and clarity.
+ *
+ * The main functionality in the categories view is actually implemented
+ * in the KMyMoneyAccountTree. Signals from user actions are connect to
+ * other signals/slots in KCategoriesView and relayed to KMyMoneyView.
+ * A typical example is the selectObject() signal that eventually results
+ * in enabling/disabling the user actions for the categories view.
+ *
+ * For the categories view three user actions are important (all created in
+ * kmymoney2.cpp): category_new, category_edit and category_delete. They are
+ * accessible from either the main menu or the context menu.
+ */
+class KCategoriesView : public KCategoriesViewDecl
+{
+ Q_OBJECT
+public:
+ KCategoriesView(QWidget *parent=0, const char *name=0);
+ virtual ~KCategoriesView();
+
+
+public slots:
+ void slotLoadAccounts(void);
+
+ /**
+ * Override the base class behaviour to include all updates that
+ * happened in the meantime.
+ */
+ void show(void);
+
+ /**
+ * Override the base class behaviour to restore the layout. Do not
+ * do this in show() because show() itself may change the layout
+ * in undesired ways.
+ */
+ void polish(void);
+
+protected:
+ void loadAccounts(void);
+ bool loadSubAccounts(KMyMoneyAccountTreeItem* parent, const QStringList& accountList);
+
+protected slots:
+ void slotUpdateProfit(void);
+ void slotExpandCollapse(void);
+
+private:
+ /**
+ * This method returns an icon according to the account type
+ * passed in the argument @p type.
+ *
+ * @param type account type as defined in MyMoneyAccount::accountTypeE
+ */
+ const QPixmap accountImage(const MyMoneyAccount::accountTypeE type) const;
+
+signals:
+ /**
+ * This signal serves as proxy for KMyMoneyAccountTree::selectObject()
+ */
+ void selectObject(const MyMoneyObject&);
+
+ /**
+ * This signal serves as proxy for
+ * KMyMoneyAccountTree::openContextMenu(const MyMoneyObject&)
+ */
+ void openContextMenu(const MyMoneyObject& obj);
+
+ /**
+ * This signal will be emitted when the left mouse button is double
+ * clicked (actually the KDE executed setting is used) on an account.
+ */
+ void openObject(const MyMoneyObject& obj);
+
+ /**
+ * This signal is emitted, when the user selected to reparent the
+ * account @p acc to be a subordinate account of @p parent.
+ *
+ * @param acc const reference to account to be reparented
+ * @param parent const reference to new parent account
+ */
+ void reparent(const MyMoneyAccount& acc, const MyMoneyAccount& parent);
+
+private:
+ QMap<QString, MyMoneySecurity> m_securityMap;
+ QMap<QString, unsigned long> m_transactionCountMap;
+
+ KMyMoneyAccountTreeItem* m_incomeItem;
+ KMyMoneyAccountTreeItem* m_expenseItem;
+
+ /**
+ * Search widget for the list
+ */
+ KListViewSearchLineWidget* m_searchWidget;
+
+ /// set if a view needs to be reloaded during show()
+ bool m_needReload;
+};
+
+#endif
diff --git a/kmymoney2/views/kcategoriesviewdecl.ui b/kmymoney2/views/kcategoriesviewdecl.ui
new file mode 100644
index 0000000..858cc54
--- /dev/null
+++ b/kmymoney2/views/kcategoriesviewdecl.ui
@@ -0,0 +1,153 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KCategoriesViewDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KCategoriesViewDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>698</width>
+ <height>430</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="KMyMoneyAccountTree">
+ <property name="name">
+ <cstring>m_accountTree</cstring>
+ </property>
+ <property name="shadeSortColumn">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5_2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_collapseButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Collapse all accounts in the list</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_expandButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Expand all accounts in the list</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>515</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_hiddenCategories</cstring>
+ </property>
+ <property name="text">
+ <string>Note: Unused categories are not shown as selected by settings.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>310</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_totalProfitsLabel</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Total Profits:</string>
+ </property>
+ <property name="textFormat">
+ <enum>RichText</enum>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignVCenter|AlignRight</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>m_expandButton</sender>
+ <signal>clicked()</signal>
+ <receiver>m_accountTree</receiver>
+ <slot>slotExpandAll()</slot>
+ </connection>
+ <connection>
+ <sender>m_collapseButton</sender>
+ <signal>clicked()</signal>
+ <receiver>m_accountTree</receiver>
+ <slot>slotCollapseAll()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/views/kforecastview.cpp b/kmymoney2/views/kforecastview.cpp
new file mode 100644
index 0000000..c7bcb0a
--- /dev/null
+++ b/kmymoney2/views/kforecastview.cpp
@@ -0,0 +1,673 @@
+/***************************************************************************
+ kforecastview.cpp
+ -------------------
+ copyright : (C) 2007 by Alvaro Soliverez
+ email : asoliverez@gmail.com
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qtabwidget.h>
+#include <qspinbox.h>
+#include <qlabel.h>
+#include <qbuttongroup.h>
+#include <qtextedit.h>
+#include <qlayout.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kdebug.h>
+#include <klocale.h>
+#include <klistview.h>
+#include <kpushbutton.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyfile.h>
+#include "kforecastview.h"
+#include "../kmymoneyglobalsettings.h"
+#include "../kmymoney2.h"
+#include "../kmymoneyutils.h"
+#include "../mymoney/mymoneyforecast.h"
+#include "../widgets/kmymoneyforecastlistviewitem.h"
+#include "../widgets/kmymoneyaccounttreeforecast.h"
+#include "../reports/pivottable.h"
+#include "../reports/pivotgrid.h"
+
+KForecastView::KForecastView(QWidget *parent, const char *name) :
+ KForecastViewDecl(parent,name)
+{
+ for(int i=0; i < MaxViewTabs; ++i)
+ m_needReload[i] = false;
+
+ KConfig *config = KGlobal::config();
+ config->setGroup("Last Use Settings");
+ m_tab->setCurrentPage(config->readNumEntry("KForecastView_LastType", 0));
+
+ connect(m_tab, SIGNAL(currentChanged(QWidget*)), this, SLOT(slotTabChanged(QWidget*)));
+
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotLoadForecast()));
+
+ connect(m_forecastButton, SIGNAL(clicked()), this, SLOT(slotManualForecast()));
+
+ m_forecastList->setAllColumnsShowFocus(true);
+ m_summaryList->setAllColumnsShowFocus(true);
+ //m_adviceList->setAllColumnsShowFocus(true);
+ m_advancedList->setAllColumnsShowFocus(true);
+
+ m_forecastChart = new KReportChartView(m_tabChart, "forecastChart" );
+ m_forecastChart->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
+
+ loadForecastSettings();
+
+}
+
+KForecastView::~KForecastView()
+{
+}
+
+void KForecastView::slotTabChanged(QWidget* _tab)
+{
+ ForecastViewTab tab = static_cast<ForecastViewTab>(m_tab->indexOf(_tab));
+
+ // remember this setting for startup
+ KConfig *config = KGlobal::config();
+ config->setGroup("Last Use Settings");
+ config->writeEntry("KForecastView_LastType", tab);
+
+ loadForecast(tab);
+
+}
+
+void KForecastView::loadForecast(ForecastViewTab tab)
+{
+ if(m_needReload[tab]) {
+ switch(tab) {
+ case ListView:
+ loadListView();
+ break;
+ case SummaryView:
+ loadSummaryView();
+ break;
+ case AdvancedView:
+ loadAdvancedView();
+ break;
+ case BudgetView:
+ loadBudgetView();
+ break;
+ case ChartView:
+ loadChartView();
+ break;
+ default:
+ break;
+ }
+ m_needReload[tab] = false;
+ }
+}
+
+void KForecastView::show(void)
+{
+ // don't forget base class implementation
+ KForecastViewDecl::show();
+ slotTabChanged(m_tab->currentPage());
+}
+
+void KForecastView::slotLoadForecast(void)
+{
+ m_needReload[SummaryView] = true;
+ m_needReload[ListView] = true;
+ m_needReload[AdvancedView] = true;
+ m_needReload[BudgetView] = true;
+ m_needReload[ChartView] = true;
+
+ //refresh settings
+ loadForecastSettings();
+
+ if(isVisible())
+ slotTabChanged(m_tab->currentPage());
+}
+
+void KForecastView::slotManualForecast(void)
+{
+ m_needReload[SummaryView] = true;
+ m_needReload[ListView] = true;
+ m_needReload[AdvancedView] = true;
+ m_needReload[BudgetView] = true;
+ m_needReload[ChartView] = true;
+
+ if(isVisible())
+ slotTabChanged(m_tab->currentPage());
+}
+
+void KForecastView::loadForecastSettings(void)
+{
+ //fill the settings controls
+ m_forecastDays->setValue(KMyMoneyGlobalSettings::forecastDays());
+ m_accountsCycle->setValue(KMyMoneyGlobalSettings::forecastAccountCycle());
+ m_beginDay->setValue(KMyMoneyGlobalSettings::beginForecastDay());
+ m_forecastCycles->setValue(KMyMoneyGlobalSettings::forecastCycles());
+ m_historyMethod->setButton(KMyMoneyGlobalSettings::historyMethod());
+ switch(KMyMoneyGlobalSettings::forecastMethod()) {
+ case 0:
+ m_forecastMethod->setText(i18n("Scheduled"));
+ m_forecastCycles->setDisabled(true);
+ m_historyMethod->setDisabled(true);
+ break;
+ case 1:
+ m_forecastMethod->setText(i18n("History"));
+ m_forecastCycles->setEnabled(true);
+ m_historyMethod->setEnabled(true);
+ break;
+ default:
+ m_forecastMethod->setText(i18n("Unknown"));
+ break;
+ }
+}
+
+void KForecastView::loadListView(void)
+{
+ MyMoneyForecast forecast;
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ m_forecastList->setBaseCurrency(file->baseCurrency());
+
+ //get the settings from current page
+ forecast.setForecastDays(m_forecastDays->value());
+ forecast.setAccountsCycle(m_accountsCycle->value());
+ forecast.setBeginForecastDay(m_beginDay->value());
+ forecast.setForecastCycles(m_forecastCycles->value());
+ forecast.setHistoryMethod(m_historyMethod->selectedId());
+ forecast.doForecast();
+
+ //clear the list, including columns
+ m_forecastList->clearColumns();
+
+ //add columns
+ m_forecastList->showAccount();
+ m_forecastList->showDetailed(forecast);
+
+ //add default rows
+ addTotalRow(m_forecastList, forecast);
+ addAssetLiabilityRows(forecast);
+
+ //load asset and liability forecast accounts
+ loadAccounts(forecast, file->asset(), m_assetItem, KMyMoneyAccountTreeForecastItem::eDetailed);
+ loadAccounts(forecast, file->liability(), m_liabilityItem, KMyMoneyAccountTreeForecastItem::eDetailed);
+
+ m_forecastList->show();
+}
+
+void KForecastView::loadSummaryView(void)
+{
+ MyMoneyForecast forecast;
+ QValueList<MyMoneyAccount> accList;
+ int dropMinimum;
+ int dropZero;
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ m_summaryList->setBaseCurrency(file->baseCurrency());
+
+ //get the settings from current page
+ forecast.setForecastDays(m_forecastDays->value());
+ forecast.setAccountsCycle(m_accountsCycle->value());
+ forecast.setBeginForecastDay(m_beginDay->value());
+ forecast.setForecastCycles(m_forecastCycles->value());
+ forecast.setHistoryMethod(m_historyMethod->selectedId());
+ forecast.doForecast();
+
+ //clear the list, including columns
+ m_summaryList->clearColumns();
+
+ //add columns
+ m_summaryList->showAccount();
+ m_summaryList->showSummary(forecast);
+
+ //add default rows
+ addTotalRow(m_summaryList, forecast);
+ addAssetLiabilityRows(forecast);
+
+ loadAccounts(forecast, file->asset(), m_assetItem, KMyMoneyAccountTreeForecastItem::eSummary);
+ loadAccounts(forecast, file->liability(), m_liabilityItem, KMyMoneyAccountTreeForecastItem::eSummary);
+
+ //Add comments to the advice list
+ //Get all accounts of the right type to calculate forecast
+ m_nameIdx.clear();
+ accList = forecast.accountList();
+ QValueList<MyMoneyAccount>::const_iterator accList_t = accList.begin();
+ for(; accList_t != accList.end(); ++accList_t ) {
+ MyMoneyAccount acc = *accList_t;
+ if(m_nameIdx[acc.id()] != acc.id()) { //Check if the account is there
+ m_nameIdx[acc.id()] = acc.id();
+ }
+ }
+
+ QMap<QString, QString>::ConstIterator it_nc;
+ for(it_nc = m_nameIdx.begin(); it_nc != m_nameIdx.end(); ++it_nc) {
+
+ const MyMoneyAccount& acc = file->account(*it_nc);
+ MyMoneySecurity currency;
+
+ //change currency to deep currency if account is an investment
+ if(acc.isInvest()) {
+ MyMoneySecurity underSecurity = file->security(acc.currencyId());
+ currency = file->security(underSecurity.tradingCurrency());
+ } else {
+ currency = file->security(acc.currencyId());
+ }
+
+ //Check if the account is going to be below zero or below the minimal balance in the forecast period
+ QString minimumBalance = acc.value("minimumBalance");
+ MyMoneyMoney minBalance = MyMoneyMoney(minimumBalance);
+
+ //Check if the account is going to be below minimal balance
+ dropMinimum = forecast.daysToMinimumBalance(acc);
+
+ //Check if the account is going to be below zero in the future
+ dropZero = forecast.daysToZeroBalance(acc);
+
+ // spit out possible warnings
+ QString msg;
+
+ // if a minimum balance has been specified, an appropriate warning will
+ // only be shown, if the drop below 0 is on a different day or not present
+
+ if(dropMinimum != -1
+ && !minBalance.isZero()
+ && (dropMinimum < dropZero
+ || dropZero == -1)) {
+ switch(dropMinimum) {
+ case -1:
+ break;
+ case 0:
+ msg = QString("<font color=\"%1\">").arg(KMyMoneyGlobalSettings::listNegativeValueColor().name());
+ msg += i18n("The balance of %2 is below the minimum balance %3 today.").arg(acc.name()).arg(minBalance.formatMoney(acc, currency));
+ msg += QString("</font>");
+ break;
+ default:
+ msg = QString("<font color=\"%1\">").arg(KMyMoneyGlobalSettings::listNegativeValueColor().name());
+ msg += i18n("The balance of %1 will drop below the minimum balance %2 in %3 days.").arg(acc.name()).arg(minBalance.formatMoney(acc, currency)).arg(dropMinimum-1);
+ msg += QString("</font>");
+ }
+
+ if(!msg.isEmpty()) {
+ m_adviceText->append(msg);
+ }
+ }
+
+ // a drop below zero is always shown
+ msg = QString();
+ switch(dropZero) {
+ case -1:
+ break;
+ case 0:
+ if(acc.accountGroup() == MyMoneyAccount::Asset) {
+ msg = QString("<font color=\"%1\">").arg(KMyMoneyGlobalSettings::listNegativeValueColor().name());
+ msg += i18n("The balance of %1 is below %2 today.").arg(acc.name()).arg(MyMoneyMoney().formatMoney(acc, currency));
+ msg += QString("</font>");
+ break;
+ }
+ if(acc.accountGroup() == MyMoneyAccount::Liability) {
+ msg = i18n("The balance of %1 is above %2 today.").arg(acc.name()).arg(MyMoneyMoney().formatMoney(acc, currency));
+ break;
+ }
+ break;
+ default:
+ if(acc.accountGroup() == MyMoneyAccount::Asset) {
+ msg = QString("<font color=\"%1\">").arg(KMyMoneyGlobalSettings::listNegativeValueColor().name());
+ msg += i18n("The balance of %1 will drop below %2 in %3 days.").arg(acc.name()).arg(MyMoneyMoney().formatMoney(acc, currency)).arg(dropZero);
+ msg += QString("</font>");
+ break;
+ }
+ if(acc.accountGroup() == MyMoneyAccount::Liability) {
+ msg = i18n("The balance of %1 will raise above %2 in %3 days.").arg(acc.name()).arg(MyMoneyMoney().formatMoney(acc, currency)).arg(dropZero);
+ break;
+ }
+ }
+ if(!msg.isEmpty()) {
+ m_adviceText->append(msg);
+ }
+
+ //advice about trends
+ msg = QString();
+ MyMoneyMoney accCycleVariation = forecast.accountCycleVariation(acc);
+ if (accCycleVariation < MyMoneyMoney(0, 1)) {
+ msg = QString("<font color=\"%1\">").arg(KMyMoneyGlobalSettings::listNegativeValueColor().name());
+ msg += i18n("The account %1 is decreasing %2 per cycle.").arg(acc.name()).arg(accCycleVariation.formatMoney(acc, currency));
+ msg += QString("</font>");
+ }
+
+ if(!msg.isEmpty()) {
+ m_adviceText->append(msg);
+ }
+ }
+ m_summaryList->show();
+ m_adviceText->show();
+}
+
+void KForecastView::loadAdvancedView(void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ QValueList<MyMoneyAccount> accList;
+ MyMoneySecurity baseCurrency = file->baseCurrency();
+ MyMoneyForecast forecast;
+ int daysToBeginDay;
+
+ //get the settings from current page
+ forecast.setForecastDays(m_forecastDays->value());
+ forecast.setAccountsCycle(m_accountsCycle->value());
+ forecast.setBeginForecastDay(m_beginDay->value());
+ forecast.setForecastCycles(m_forecastCycles->value());
+ forecast.setHistoryMethod(m_historyMethod->selectedId());
+ forecast.doForecast();
+
+ //Get all accounts of the right type to calculate forecast
+ m_nameIdx.clear();
+ accList = forecast.accountList();
+ QValueList<MyMoneyAccount>::const_iterator accList_t = accList.begin();
+ for(; accList_t != accList.end(); ++accList_t ) {
+ MyMoneyAccount acc = *accList_t;
+ if(m_nameIdx[acc.id()] != acc.id()) { //Check if the account is there
+ m_nameIdx[acc.id()] = acc.id();
+ }
+ }
+ //clear the list, including columns
+ m_advancedList->clear();
+ for(;m_advancedList->columns() > 0;) {
+ m_advancedList->removeColumn(0);
+ }
+
+ //add first column of both lists
+ int accountColumn = m_advancedList->addColumn(i18n("Account"), -1);
+
+ //if beginning of forecast is today, set the begin day to next cycle to avoid repeating the first cycle
+ if(QDate::currentDate() < forecast.beginForecastDate()) {
+ daysToBeginDay = QDate::currentDate().daysTo(forecast.beginForecastDate());
+ } else {
+ daysToBeginDay = forecast.accountsCycle();
+ }
+
+ //add columns
+ for(int i = 1; ((i * forecast.accountsCycle()) + daysToBeginDay) <= forecast.forecastDays(); ++i) {
+ int col = m_advancedList->addColumn(i18n("Min Bal %1").arg(i), -1);
+ m_advancedList->setColumnAlignment(col, Qt::AlignRight);
+ m_advancedList->addColumn(i18n("Min Date %1").arg(i), -1);
+ }
+ for(int i = 1; ((i * forecast.accountsCycle()) + daysToBeginDay) <= forecast.forecastDays(); ++i) {
+ int col = m_advancedList->addColumn(i18n("Max Bal %1").arg(i), -1);
+ m_advancedList->setColumnAlignment(col, Qt::AlignRight);
+ m_advancedList->addColumn(i18n("Max Date %1").arg(i), -1);
+ }
+ int col = m_advancedList->addColumn(i18n("Average"), -1);
+ m_advancedList->setColumnAlignment(col, Qt::AlignRight);
+ m_advancedList->setSorting(-1);
+ KMyMoneyForecastListViewItem *advancedItem = 0;
+
+ QMap<QString, QString>::ConstIterator it_nc;
+ for(it_nc = m_nameIdx.begin(); it_nc != m_nameIdx.end(); ++it_nc) {
+ const MyMoneyAccount& acc = file->account(*it_nc);
+ QString amount;
+ MyMoneyMoney amountMM;
+ MyMoneySecurity currency;
+
+ //change currency to deep currency if account is an investment
+ if(acc.isInvest()) {
+ MyMoneySecurity underSecurity = file->security(acc.currencyId());
+ currency = file->security(underSecurity.tradingCurrency());
+ } else {
+ currency = file->security(acc.currencyId());
+ }
+
+
+ advancedItem = new KMyMoneyForecastListViewItem(m_advancedList, advancedItem, false);
+ advancedItem->setText(accountColumn, acc.name());
+ int it_c = 1; // iterator for the columns of the listview
+
+ //get minimum balance list
+ QValueList<QDate> minBalanceList = forecast.accountMinimumBalanceDateList(acc);
+ QValueList<QDate>::Iterator t_min;
+ for(t_min = minBalanceList.begin(); t_min != minBalanceList.end() ; ++t_min)
+ {
+ QDate minDate = *t_min;
+ amountMM = forecast.forecastBalance(acc, minDate);
+
+ amount = amountMM.formatMoney(acc, currency);
+ advancedItem->setText(it_c, amount, amountMM.isNegative());
+ it_c++;
+
+ QString dateString = KGlobal::locale()->formatDate(minDate, true);
+ advancedItem->setText(it_c, dateString, amountMM.isNegative());
+ it_c++;
+ }
+
+ //get maximum balance list
+ QValueList<QDate> maxBalanceList = forecast.accountMaximumBalanceDateList(acc);
+ QValueList<QDate>::Iterator t_max;
+ for(t_max = maxBalanceList.begin(); t_max != maxBalanceList.end() ; ++t_max)
+ {
+ QDate maxDate = *t_max;
+ amountMM = forecast.forecastBalance(acc, maxDate);
+
+ amount = amountMM.formatMoney(acc, currency);
+ advancedItem->setText(it_c, amount, amountMM.isNegative());
+ it_c++;
+
+ QString dateString = KGlobal::locale()->formatDate(maxDate, true);
+ advancedItem->setText(it_c, dateString, amountMM.isNegative());
+ it_c++;
+ }
+ //get average balance
+ amountMM = forecast.accountAverageBalance(acc);
+ amount = amountMM.formatMoney(acc, currency);
+ advancedItem->setText(it_c, amount, amountMM.isNegative());
+ it_c++;
+ }
+ m_advancedList->show();
+}
+
+void KForecastView::loadBudgetView(void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyForecast forecast;
+// QValueList<MyMoneyAccount> accList;
+
+ m_budgetList->setBaseCurrency(file->baseCurrency());
+
+ //get the settings from current page and calculate this year based on last year
+ QDate historyEndDate = QDate(QDate::currentDate().year()-1, 12, 31);
+ QDate historyStartDate = historyEndDate.addDays(-m_accountsCycle->value() * m_forecastCycles->value());
+ QDate forecastStartDate = QDate(QDate::currentDate().year(), 1, 1);
+ QDate forecastEndDate = QDate::currentDate().addDays(m_forecastDays->value());
+ forecast.setHistoryMethod(m_historyMethod->selectedId());
+
+ MyMoneyBudget budget;
+ forecast.createBudget(budget, historyStartDate, historyEndDate, forecastStartDate, forecastEndDate, false);
+
+ //clear the list, including columns
+ m_budgetList->clearColumns();
+
+ //add columns
+ m_budgetList->showAccount();
+ m_budgetList->showBudget(forecast);
+
+ //add default rows
+ addTotalRow(m_budgetList, forecast);
+ addIncomeExpenseRows(forecast);
+
+ //load income and expense budget accounts
+ loadAccounts(forecast, file->income(), m_incomeItem, KMyMoneyAccountTreeForecastItem::eBudget);
+ loadAccounts(forecast, file->expense(), m_expenseItem, KMyMoneyAccountTreeForecastItem::eBudget);
+
+ m_budgetList->show();
+}
+
+QValueList<MyMoneyPrice> KForecastView::getAccountPrices(const MyMoneyAccount& acc)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ QValueList<MyMoneyPrice> prices;
+ MyMoneySecurity security = file->baseCurrency();
+ try {
+ if(acc.isInvest()) {
+ security = file->security(acc.currencyId());
+ if(security.tradingCurrency() != file->baseCurrency().id()) {
+ MyMoneySecurity sec = file->security(security.tradingCurrency());
+ prices += file->price(sec.id(), file->baseCurrency().id());
+ }
+ } else if(acc.currencyId() != file->baseCurrency().id()) {
+ if(acc.currencyId() != file->baseCurrency().id()) {
+ security = file->security(acc.currencyId());
+ prices += file->price(acc.currencyId(), file->baseCurrency().id());
+ }
+ }
+
+ } catch(MyMoneyException *e) {
+ kdDebug(2) << __PRETTY_FUNCTION__ << " caught exception while adding " << acc.name() << "[" << acc.id() << "]: " << e->what();
+ delete e;
+ }
+ return prices;
+}
+
+void KForecastView::addAssetLiabilityRows(const MyMoneyForecast& forecast)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ QValueList<MyMoneyPrice> basePrices;
+ m_assetItem = new KMyMoneyAccountTreeForecastItem( m_totalItem, file->asset(), forecast, basePrices, file->baseCurrency() );
+ m_assetItem->setOpen(true);
+ m_liabilityItem = new KMyMoneyAccountTreeForecastItem( m_totalItem, file->liability(), forecast, basePrices, file->baseCurrency());
+ m_liabilityItem->setOpen(true);
+}
+
+void KForecastView::addIncomeExpenseRows(const MyMoneyForecast& forecast)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ QValueList<MyMoneyPrice> basePrices;
+ m_incomeItem = new KMyMoneyAccountTreeForecastItem( m_totalItem, file->income(), forecast, basePrices, file->baseCurrency() );
+ m_incomeItem->setOpen(true);
+ m_expenseItem = new KMyMoneyAccountTreeForecastItem( m_totalItem, file->expense(), forecast, basePrices, file->baseCurrency());
+ m_expenseItem->setOpen(true);
+}
+
+void KForecastView::addTotalRow(KMyMoneyAccountTreeForecast* forecastList, const MyMoneyForecast& forecast)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ m_totalItem = new KMyMoneyAccountTreeForecastItem( forecastList, file->asset(), forecast, file->baseCurrency(), i18n("Total") );
+ m_totalItem->setOpen(true);
+}
+
+bool KForecastView::includeAccount(MyMoneyForecast& forecast, const MyMoneyAccount& acc)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ if( forecast.isForecastAccount(acc) )
+ return true;
+
+ QStringList accounts = acc.accountList();
+
+ if(accounts.size() > 0) {
+ QStringList::ConstIterator it_acc;
+ for(it_acc = accounts.begin(); it_acc != accounts.end(); ++it_acc) {
+ MyMoneyAccount account = file->account(*it_acc);
+ if( includeAccount(forecast, account) )
+ return true;
+ }
+ }
+ return false;
+}
+
+void KForecastView::loadAccounts(MyMoneyForecast& forecast, const MyMoneyAccount& account, KMyMoneyAccountTreeForecastItem* parentItem, int forecastType )
+{
+ QMap<QString, QString> nameIdx;
+ QStringList accList;
+ MyMoneyFile* file = MyMoneyFile::instance();
+ KMyMoneyAccountTreeForecastItem *forecastItem = 0;
+
+ //Get all accounts of the right type to calculate forecast
+ accList = account.accountList();
+
+ if(accList.size() == 0)
+ return;
+
+ QStringList::ConstIterator accList_t;
+ for(accList_t = accList.begin(); accList_t != accList.end(); ++accList_t ) {
+ MyMoneyAccount subAccount = file->account(*accList_t);
+ //only add the account if it is a forecast account or the parent of a forecast account
+ if(includeAccount(forecast, subAccount)) {
+ nameIdx[subAccount.id()] = subAccount.id();
+ }
+ }
+
+ QMap<QString, QString>::ConstIterator it_nc;
+ for(it_nc = nameIdx.begin(); it_nc != nameIdx.end(); ++it_nc) {
+
+ const MyMoneyAccount subAccount = file->account(*it_nc);
+ MyMoneySecurity currency;
+ if(subAccount.isInvest()) {
+ MyMoneySecurity underSecurity = file->security(subAccount.currencyId());
+ currency = file->security(underSecurity.tradingCurrency());
+ } else {
+ currency = file->security(subAccount.currencyId());
+ }
+
+ QString amount;
+ QString vAmount;
+ MyMoneyMoney vAmountMM;
+
+ //get prices
+ QValueList<MyMoneyPrice> prices = getAccountPrices(subAccount);
+
+ forecastItem = new KMyMoneyAccountTreeForecastItem( parentItem, subAccount, forecast, prices, currency, static_cast<KMyMoneyAccountTreeForecastItem::EForecastViewType>(forecastType) );
+ forecastItem->setOpen(true);
+
+ loadAccounts(forecast, subAccount, forecastItem, forecastType);
+ }
+}
+
+void KForecastView::loadChartView(void)
+{
+ MyMoneyReport::EDetailLevel detailLevel[4] = { MyMoneyReport::eDetailAll, MyMoneyReport::eDetailTop, MyMoneyReport::eDetailGroup, MyMoneyReport::eDetailTotal };
+
+ MyMoneyReport reportCfg = MyMoneyReport(
+ MyMoneyReport::eAssetLiability,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::userDefined, // overridden by the setDateFilter() call below
+ detailLevel[m_comboDetail->currentItem()],
+ i18n("Networth Forecast"),
+ i18n("Generated Report"));
+
+ reportCfg.setChartByDefault(true);
+ reportCfg.setChartGridLines(false);
+ reportCfg.setChartType(MyMoneyReport::eChartLine);
+ reportCfg.setIncludingSchedules( false );
+ reportCfg.addAccountGroup(MyMoneyAccount::Asset);
+ reportCfg.addAccountGroup(MyMoneyAccount::Liability);
+ reportCfg.setColumnsAreDays( true );
+ reportCfg.setConvertCurrency( true );
+ reportCfg.setIncludingForecast( true );
+ reportCfg.setDateFilter(QDate::currentDate(),QDate::currentDate().addDays(m_forecastDays->value()));
+
+ reports::PivotTable table(reportCfg);
+
+ table.drawChart(*m_forecastChart);
+
+ // Adjust the size
+ m_forecastChart->resize(m_tab->width()-30, m_tab->height()-60);
+
+ m_forecastChart->update();
+}
+
+#include "kforecastview.moc"
diff --git a/kmymoney2/views/kforecastview.h b/kmymoney2/views/kforecastview.h
new file mode 100644
index 0000000..8beb24a
--- /dev/null
+++ b/kmymoney2/views/kforecastview.h
@@ -0,0 +1,138 @@
+/***************************************************************************
+ kforecastview.h
+ -------------------
+ copyright : (C) 2007 by Alvaro Soliverez
+ email : asoliverez@gmail.com
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KFORECASTVIEW_H
+#define KFORECASTVIEW_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneyutils.h>
+
+#include "../views/kforecastviewdecl.h"
+#include "../widgets/kmymoneyaccounttreeforecast.h"
+#include "../reports/kreportchartview.h"
+
+using namespace reports;
+
+/**
+ * @author Alvaro Soliverez
+ */
+
+/**
+ * This class implements the forecast 'view'.
+ */
+class KForecastView : public KForecastViewDecl
+{
+ Q_OBJECT
+private:
+
+public:
+ KForecastView(QWidget *parent=0, const char *name=0);
+ virtual ~KForecastView();
+
+ void show(void);
+
+public slots:
+ void slotLoadForecast(void);
+ void slotManualForecast(void);
+
+protected:
+ typedef enum {
+ SummaryView = 0,
+ ListView,
+ AdvancedView,
+ BudgetView,
+ ChartView,
+ // insert new values above this line
+ MaxViewTabs
+ } ForecastViewTab;
+
+ QMap<QString, QString> m_nameIdx;
+
+
+ /**
+ * This method loads the forecast view.
+ */
+ void loadForecast(ForecastViewTab tab);
+
+ /**
+ * This method loads the detailed view
+ */
+ void loadListView(void);
+
+ /**
+ * This method loads the summary view
+ */
+ void loadSummaryView(void);
+
+ /**
+ * This method loads the advanced view
+ */
+ void loadAdvancedView(void);
+
+ /**
+ * This method loads the budget view
+ */
+ void loadBudgetView(void);
+
+ /**
+ * This method loads the budget view
+ */
+ void loadChartView(void);
+
+ /**
+ * This method loads the settings from user configuration
+ */
+ void loadForecastSettings(void);
+
+protected slots:
+ void slotTabChanged(QWidget*);
+
+ /**
+ * Get the list of prices for an account
+ * This is used later to create an instance of KMyMoneyAccountTreeForecastItem
+ *
+ */
+ QValueList<MyMoneyPrice> getAccountPrices(const MyMoneyAccount& acc);
+
+private:
+ void addAssetLiabilityRows(const MyMoneyForecast& forecast);
+ void addIncomeExpenseRows(const MyMoneyForecast& forecast);
+ void addTotalRow(KMyMoneyAccountTreeForecast* forecastList, const MyMoneyForecast& forecast);
+ bool includeAccount(MyMoneyForecast& forecast, const MyMoneyAccount& acc);
+ void loadAccounts(MyMoneyForecast& forecast, const MyMoneyAccount& account, KMyMoneyAccountTreeForecastItem* parentItem, int forecastType);
+
+ bool m_needReload[MaxViewTabs];
+ KMyMoneyAccountTreeForecastItem* m_totalItem;
+ KMyMoneyAccountTreeForecastItem* m_assetItem;
+ KMyMoneyAccountTreeForecastItem* m_liabilityItem;
+ KMyMoneyAccountTreeForecastItem* m_incomeItem;
+ KMyMoneyAccountTreeForecastItem* m_expenseItem;
+
+ KReportChartView* m_forecastChart;
+
+};
+
+#endif
diff --git a/kmymoney2/views/kforecastviewdecl.ui b/kmymoney2/views/kforecastviewdecl.ui
new file mode 100644
index 0000000..6d2bf3b
--- /dev/null
+++ b/kmymoney2/views/kforecastviewdecl.ui
@@ -0,0 +1,614 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KForecastViewDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KForecastViewDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>909</width>
+ <height>771</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox3</cstring>
+ </property>
+ <property name="title">
+ <string>Forecast Settings</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout16</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Days to Forecast:</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="0" column="1">
+ <property name="name">
+ <cstring>m_forecastDays</cstring>
+ </property>
+ <property name="maxValue">
+ <number>999</number>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Days of Accounts Cycle:</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="1" column="1">
+ <property name="name">
+ <cstring>m_accountsCycle</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maxValue">
+ <number>999</number>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>Day of Month to start Forecast:</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="2" column="1">
+ <property name="name">
+ <cstring>m_beginDay</cstring>
+ </property>
+ <property name="maxValue">
+ <number>31</number>
+ </property>
+ <property name="minValue">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Historic Cycles:</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="1">
+ <property name="name">
+ <cstring>m_forecastCycles</cstring>
+ </property>
+ <property name="maxValue">
+ <number>999</number>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>textLabel6</cstring>
+ </property>
+ <property name="text">
+ <string>Chart Detail:</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="4" column="1">
+ <item>
+ <property name="text">
+ <string>All</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Top-Level</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Groups</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Totals</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_comboDetail</cstring>
+ </property>
+ <property name="currentItem">
+ <number>2</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Choose what level of detail to show on the chart.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer23</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>31</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout76</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout17</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Current Forecast Method:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_forecastMethod</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>2</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>method</string>
+ </property>
+ </widget>
+ </hbox>
+ <widget class="QButtonGroup" row="2" column="0">
+ <property name="name">
+ <cstring>m_historyMethod</cstring>
+ </property>
+ <property name="title">
+ <string>History Forecast Method</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>radioButton11</cstring>
+ </property>
+ <property name="text">
+ <string>Simple Moving Average</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>radioButton12</cstring>
+ </property>
+ <property name="text">
+ <string>Weighted Moving Average</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>radioButton12</cstring>
+ </property>
+ <property name="text">
+ <string>Linear Regression</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>2</number>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer7</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>6</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout75</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_forecastButton</cstring>
+ </property>
+ <property name="text">
+ <string>Forecast</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer22</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>31</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_saveButton</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Save</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>m_tab</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>1</verstretch>
+ </sizepolicy>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>summary</cstring>
+ </property>
+ <attribute name="title">
+ <string>Summary</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KMyMoneyAccountTreeForecast">
+ <column>
+ <property name="text">
+ <string>Account</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>0 days</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>30 days</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>60 days</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>90 days</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>m_summaryList</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>2</horstretch>
+ <verstretch>1</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="midLineWidth">
+ <number>1</number>
+ </property>
+ <property name="resizePolicy">
+ <enum>AutoOneFit</enum>
+ </property>
+ </widget>
+ <widget class="QTextEdit">
+ <item>
+ <property name="text">
+ <string>New Item</string>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_adviceText</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>1</horstretch>
+ <verstretch>1</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="resizePolicy">
+ <enum>AutoOneFit</enum>
+ </property>
+ </widget>
+ </hbox>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ </hbox>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>detail</cstring>
+ </property>
+ <attribute name="title">
+ <string>Detail</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="KMyMoneyAccountTreeForecast">
+ <property name="name">
+ <cstring>m_forecastList</cstring>
+ </property>
+ <property name="resizePolicy">
+ <enum>AutoOneFit</enum>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>advanced</cstring>
+ </property>
+ <attribute name="title">
+ <string>Advanced</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="KListView">
+ <property name="name">
+ <cstring>m_advancedList</cstring>
+ </property>
+ <property name="resizePolicy">
+ <enum>AutoOneFit</enum>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>budget</cstring>
+ </property>
+ <attribute name="title">
+ <string>Budget Forecast</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="KMyMoneyAccountTreeForecast">
+ <property name="name">
+ <cstring>m_budgetList</cstring>
+ </property>
+ <property name="resizePolicy">
+ <enum>AutoOneFit</enum>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_tabChart</cstring>
+ </property>
+ <attribute name="title">
+ <string>Chart</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>m_layoutChart</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ </vbox>
+ </widget>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>KMyMoneyAccountTreeforecast</class>
+ <header location="local">../widgets/kmymoneyaccounttreeforecast.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </customwidget>
+</customwidgets>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/views/kgloballedgerview.cpp b/kmymoney2/views/kgloballedgerview.cpp
new file mode 100644
index 0000000..bf95e50
--- /dev/null
+++ b/kmymoney2/views/kgloballedgerview.cpp
@@ -0,0 +1,1461 @@
+/***************************************************************************
+ kgloballedgerview.cpp - description
+ -------------------
+ begin : Wed Jul 26 2006
+ copyright : (C) 2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include <typeinfo>
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qframe.h>
+#include <qlayout.h>
+#include <qtimer.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include "kdecompat.h"
+#include <klocale.h>
+#include <kcombobox.h>
+#include <kpushbutton.h>
+#include <kmessagebox.h>
+#include <kiconloader.h>
+#include <ktoolbar.h>
+#include <ktoolbarbutton.h>
+#include <kpassivepopup.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kgloballedgerview.h"
+
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/kmymoneyaccountcombo.h>
+#include <kmymoney/kmymoneytitlelabel.h>
+#include <kmymoney/register.h>
+#include <kmymoney/transactioneditor.h>
+#include <kmymoney/selectedtransaction.h>
+
+#include <kmymoney/kmymoneyglobalsettings.h>
+
+#include "../widgets/registersearchline.h"
+#include "../dialogs/ksortoptiondlg.h"
+#include "../kmymoney2.h"
+
+#include "../widgets/scheduledtransaction.h"
+
+class KGlobalLedgerView::Private
+{
+public:
+ Private();
+
+ MousePressFilter* m_mousePressFilter;
+ KMyMoneyRegister::RegisterSearchLineWidget* m_registerSearchLine;
+ QPoint m_startPoint;
+ QString m_reconciliationAccount;
+ QDate m_reconciliationDate;
+ MyMoneyMoney m_endingBalance;
+ int m_precision;
+ bool m_inLoading;
+ bool m_recursion;
+ bool m_showDetails;
+ KMyMoneyRegister::Action m_action;
+ QTimer m_viewPosTimer;
+};
+
+MousePressFilter::MousePressFilter(QWidget* parent, const char* name) :
+ QObject(parent, name),
+ m_lastMousePressEvent(0),
+ m_filterActive(true)
+{
+}
+
+void MousePressFilter::addWidget(QWidget* w)
+{
+ m_parents.append(w);
+}
+
+void MousePressFilter::setFilterActive(bool state)
+{
+ m_filterActive = state;
+}
+
+bool MousePressFilter::isChildOf( QWidget* child, QWidget *parent )
+{
+ while(child) {
+ if(child == parent)
+ return true;
+ // If one of the ancestors is a KPassivePopup then it's as
+ // if it is a child of our own
+ if(dynamic_cast<KPassivePopup*>(child))
+ return true;
+ child = child->parentWidget();
+ }
+ return false;
+}
+
+bool MousePressFilter::eventFilter(QObject* o, QEvent* e)
+{
+ if(m_filterActive) {
+ if(e->type() == QEvent::MouseButtonPress && !m_lastMousePressEvent) {
+ QValueList<QWidget*>::const_iterator it_w;
+ for(it_w = m_parents.begin(); it_w != m_parents.end(); ++it_w) {
+ if(isChildOf((QWidget*)o, (*it_w))) {
+ m_lastMousePressEvent = e;
+ break;
+ }
+ }
+ if(it_w == m_parents.end()) {
+ m_lastMousePressEvent = e;
+ bool rc = false;
+ emit mousePressedOnExternalWidget(rc);
+ }
+ }
+
+ if(e->type() != QEvent::MouseButtonPress) {
+ m_lastMousePressEvent = 0;
+ }
+ }
+ return false;
+}
+
+
+KGlobalLedgerView::Private::Private() :
+ m_mousePressFilter(0),
+ m_registerSearchLine(0),
+ m_inLoading(false),
+ m_recursion(false),
+ m_showDetails(false)
+{
+}
+
+QDate KGlobalLedgerView::m_lastPostDate;
+
+KGlobalLedgerView::KGlobalLedgerView(QWidget *parent, const char *name )
+ : KMyMoneyViewBase(parent, name, i18n("Ledgers")),
+ d(new Private),
+ m_needReload(false),
+ m_newAccountLoaded(true),
+ m_inEditMode(false)
+{
+ d->m_mousePressFilter = new MousePressFilter((QWidget*)this);
+ d->m_action = KMyMoneyRegister::ActionNone;;
+
+ // create the toolbar frame at the top of the view
+ m_toolbarFrame = new QFrame(this);
+ QVBoxLayout* toolbarLayout = new QVBoxLayout(m_toolbarFrame, 0, 0);
+
+ m_toolbar = new KToolBar(m_toolbarFrame, 0, true);
+ toolbarLayout->addWidget(m_toolbar);
+ m_toolbar->setIconText(KToolBar::IconTextRight);
+
+ m_accountComboBox = new KMyMoneyAccountCombo(m_toolbar, "AccountCombo");
+ m_toolbar->insertWidget(1, 100, m_accountComboBox);
+
+#if 0
+ // the account button at the right of the toolbar
+ // I leave the code commented here for a while, so that I see
+ // how I can add other widgets at this point
+ KIconLoader *il = KGlobal::iconLoader();
+ m_toolbar->insertButton(il->loadIcon("document", KIcon::Small, KIcon::SizeSmall),
+ 1,true,i18n("Account"));
+ //m_toolbar->setMaximumSize(50,20);
+ m_toolbar->alignItemRight(1);
+#endif
+ m_toolbar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
+ layout()->addWidget(m_toolbarFrame);
+
+ // create the register frame
+ m_registerFrame = new QFrame(this);
+ QVBoxLayout* registerFrameLayout = new QVBoxLayout(m_registerFrame, 0, 0);
+ layout()->addWidget(m_registerFrame);
+ layout()->setStretchFactor(m_registerFrame, 2);
+ m_register = new KMyMoneyRegister::Register(m_registerFrame);
+ registerFrameLayout->addWidget(m_register);
+ m_register->installEventFilter(this);
+ connect(m_register, SIGNAL(openContextMenu()), this, SIGNAL(openContextMenu()));
+ connect(m_register, SIGNAL(headerClicked()), this, SLOT(slotSortOptions()));
+ connect(m_register, SIGNAL(reconcileStateColumnClicked(KMyMoneyRegister::Transaction*)), this, SLOT(slotToggleTransactionMark(KMyMoneyRegister::Transaction*)));
+ connect(&d->m_viewPosTimer, SIGNAL(timeout()), this, SLOT(slotUpdateViewPos()));
+
+ // insert search line widget
+
+ d->m_registerSearchLine = new KMyMoneyRegister::RegisterSearchLineWidget(m_register, m_toolbar);
+ m_toolbar->setStretchableWidget(d->m_registerSearchLine);
+
+ // create the summary frame
+ m_summaryFrame = new QFrame(this);
+ QHBoxLayout* summaryFrameLayout = new QHBoxLayout(m_summaryFrame, 0, 0);
+ m_leftSummaryLabel = new QLabel(m_summaryFrame);
+ m_centerSummaryLabel = new QLabel(m_summaryFrame);
+ m_rightSummaryLabel = new QLabel(m_summaryFrame);
+ summaryFrameLayout->addWidget(m_leftSummaryLabel);
+ QSpacerItem* spacer = new QSpacerItem( 20, 1, QSizePolicy::Expanding, QSizePolicy::Minimum );
+ summaryFrameLayout->addItem(spacer);
+ summaryFrameLayout->addWidget(m_centerSummaryLabel);
+ spacer = new QSpacerItem( 20, 1, QSizePolicy::Expanding, QSizePolicy::Minimum );
+ summaryFrameLayout->addItem(spacer);
+ summaryFrameLayout->addWidget(m_rightSummaryLabel);
+ layout()->addWidget(m_summaryFrame);
+
+ // create the button frame
+ m_buttonFrame = new QFrame(this);
+ QVBoxLayout* buttonLayout = new QVBoxLayout(m_buttonFrame, 0, 0);
+ layout()->addWidget(m_buttonFrame);
+ m_buttonbar = new KToolBar(m_buttonFrame, 0, true);
+ m_buttonbar->setIconText(KToolBar::IconTextRight);
+ buttonLayout->addWidget(m_buttonbar);
+
+ kmymoney2->action("transaction_new")->plug(m_buttonbar);
+ kmymoney2->action("transaction_delete")->plug(m_buttonbar);
+ kmymoney2->action("transaction_edit")->plug(m_buttonbar);
+ kmymoney2->action("transaction_enter")->plug(m_buttonbar);
+ kmymoney2->action("transaction_cancel")->plug(m_buttonbar);
+ kmymoney2->action("transaction_accept")->plug(m_buttonbar);
+ kmymoney2->action("transaction_match")->plug(m_buttonbar);
+
+ // create the transaction form frame
+ m_formFrame = new QFrame(this);
+ QVBoxLayout* frameLayout = new QVBoxLayout(m_formFrame, 5, 0);
+ m_form = new KMyMoneyTransactionForm::TransactionForm(m_formFrame);
+ frameLayout->addWidget(m_form->tabBar(m_formFrame));
+ frameLayout->addWidget(m_form);
+ m_formFrame->setFrameShape( QFrame::Panel );
+ m_formFrame->setFrameShadow( QFrame::Raised );
+ layout()->addWidget(m_formFrame);
+
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotLoadView()));
+ connect(m_register, SIGNAL(focusChanged(KMyMoneyRegister::Transaction*)), m_form, SLOT(slotSetTransaction(KMyMoneyRegister::Transaction*)));
+ connect(m_register, SIGNAL(focusChanged()), kmymoney2, SLOT(slotUpdateActions()));
+ connect(m_accountComboBox, SIGNAL(accountSelected(const QString&)), this, SLOT(slotSelectAccount(const QString&)));
+ connect(m_register, SIGNAL(selectionChanged(const KMyMoneyRegister::SelectedTransactions&)), this, SIGNAL(transactionsSelected(const KMyMoneyRegister::SelectedTransactions&)));
+ connect(m_register, SIGNAL(editTransaction()), this, SIGNAL(startEdit()));
+ connect(m_register, SIGNAL(emptyItemSelected()), this, SLOT(slotNewTransaction()));
+ connect(m_register, SIGNAL(aboutToSelectItem(KMyMoneyRegister::RegisterItem*, bool&)), this, SLOT(slotAboutToSelectItem(KMyMoneyRegister::RegisterItem*, bool&)));
+ connect(d->m_mousePressFilter, SIGNAL(mousePressedOnExternalWidget(bool&)), this, SIGNAL(cancelOrEndEdit(bool&)));
+
+ connect(m_form, SIGNAL(newTransaction(KMyMoneyRegister::Action)), this, SLOT(slotNewTransaction(KMyMoneyRegister::Action)));
+
+ // setup mouse press filter
+ d->m_mousePressFilter->addWidget(m_formFrame);
+ d->m_mousePressFilter->addWidget(m_buttonFrame);
+ d->m_mousePressFilter->addWidget(m_summaryFrame);
+ d->m_mousePressFilter->addWidget(m_registerFrame);
+}
+
+KGlobalLedgerView::~KGlobalLedgerView()
+{
+ delete d;
+}
+
+void KGlobalLedgerView::slotAboutToSelectItem(KMyMoneyRegister::RegisterItem* item, bool& okToSelect)
+{
+ Q_UNUSED(item);
+ emit cancelOrEndEdit(okToSelect);
+}
+
+void KGlobalLedgerView::slotLoadView(void)
+{
+ m_needReload = true;
+ if(isVisible()) {
+ if(!m_inEditMode) {
+ loadView();
+ m_needReload = false;
+ // force a new account if the current one is empty
+ m_newAccountLoaded = m_account.id().isEmpty();
+ }
+ }
+}
+
+void KGlobalLedgerView::clear(void)
+{
+ // clear current register contents
+ m_register->clear();
+
+ // setup header font
+ QFont font = KMyMoneyGlobalSettings::listHeaderFont();
+ QFontMetrics fm( font );
+ int height = fm.lineSpacing()+6;
+ m_register->horizontalHeader()->setMinimumHeight(height);
+ m_register->horizontalHeader()->setMaximumHeight(height);
+ m_register->horizontalHeader()->setFont(font);
+
+ // setup cell font
+ font = KMyMoneyGlobalSettings::listCellFont();
+ m_register->setFont(font);
+
+ // clear the form
+ m_form->clear();
+
+ // the selected transactions list
+ m_transactionList.clear();
+
+ // and the selected account in the combo box
+ m_accountComboBox->setSelected(QString());
+
+ // fraction defaults to two digits
+ d->m_precision = 2;
+}
+
+void KGlobalLedgerView::loadView(void)
+{
+ MYMONEYTRACER(tracer);
+
+ // setup form visibility
+ m_formFrame->setShown(KMyMoneyGlobalSettings::transactionForm());
+
+ // no account selected
+ emit accountSelected(MyMoneyAccount());
+ // no transaction selected
+ KMyMoneyRegister::SelectedTransactions list;
+ emit transactionsSelected(list);
+
+ QMap<QString, bool> isSelected;
+ QString focusItemId;
+ QString anchorItemId;
+
+ if(!d->m_inLoading)
+ d->m_startPoint = QPoint(-1, -1);
+
+ if(!m_newAccountLoaded) {
+ // remember the current selected transactions
+ KMyMoneyRegister::RegisterItem* item = m_register->firstItem();
+ for(; item; item = item->nextItem()) {
+ if(item->isSelected()) {
+ isSelected[item->id()] = true;
+ }
+ }
+ // remember the item that has the focus
+ if(m_register->focusItem())
+ focusItemId = m_register->focusItem()->id();
+ // and the one that has the selection anchor
+ if(m_register->anchorItem())
+ anchorItemId = m_register->anchorItem()->id();
+
+ // remember the upper left corner of the viewport
+ if(!d->m_inLoading && d->m_showDetails == KMyMoneyGlobalSettings::showRegisterDetailed())
+ d->m_startPoint = QPoint(m_register->contentsX(), m_register->contentsY());
+ } else {
+ if(d->m_viewPosTimer.isActive())
+ d->m_viewPosTimer.stop();
+ d->m_startPoint = QPoint(-1, -1);
+ d->m_inLoading = false;
+ d->m_registerSearchLine->searchLine()->reset();
+ }
+
+ // clear the current contents ...
+ clear();
+
+ // ... load the combobox widget and select current account ...
+ loadAccounts();
+
+ // ... setup the register columns ...
+ m_register->setupRegister(m_account);
+
+ // ... setup the form ...
+ m_form->setupForm(m_account);
+
+ if(m_account.id().isEmpty()) {
+ // if we don't have an account we bail out
+ setEnabled(false);
+ return;
+ }
+ setEnabled(true);
+
+ m_register->setUpdatesEnabled(false);
+
+ // ... and recreate it
+ KMyMoneyRegister::RegisterItem* focusItem = 0;
+ KMyMoneyRegister::RegisterItem* anchorItem = 0;
+ QMap<QString, MyMoneyMoney> actBalance, clearedBalance, futureBalance;
+ QMap<QString, MyMoneyMoney>::iterator it_b;
+ try {
+ // setup the filter to select the transactions we want to display
+ // and update the sort order
+ QString sortOrder;
+ QString key;
+ QDate reconciliationDate = d->m_reconciliationDate;
+
+ MyMoneyTransactionFilter filter(m_account.id());
+ // if it's an investment account, we also take care of
+ // the sub-accounts (stock accounts)
+ if(m_account.accountType() == MyMoneyAccount::Investment)
+ filter.addAccount(m_account.accountList());
+
+ if(isReconciliationAccount()) {
+ key = "kmm-sort-reconcile";
+ sortOrder = KMyMoneyGlobalSettings::sortReconcileView();
+ filter.addState(MyMoneyTransactionFilter::notReconciled);
+ filter.addState(MyMoneyTransactionFilter::cleared);
+ } else {
+ filter.setDateFilter(KMyMoneyGlobalSettings::startDate().date(), QDate());
+ key = "kmm-sort-std";
+ sortOrder = KMyMoneyGlobalSettings::sortNormalView();
+ if (KMyMoneyGlobalSettings::hideReconciledTransactions()
+ && !m_account.isIncomeExpense()) {
+ filter.addState(MyMoneyTransactionFilter::notReconciled);
+ filter.addState(MyMoneyTransactionFilter::cleared);
+ }
+ }
+ filter.setReportAllSplits(true);
+
+ // check if we have an account override of the sort order
+ if(!m_account.value(key).isEmpty())
+ sortOrder = m_account.value(key);
+
+ // setup sort order
+ m_register->setSortOrder(sortOrder);
+
+ // retrieve the list from the engine
+ MyMoneyFile::instance()->transactionList(m_transactionList, filter);
+
+ kmymoney2->slotStatusProgressBar(0, m_transactionList.count());
+
+ // create the elements for the register
+ QValueList<QPair<MyMoneyTransaction, MyMoneySplit> >::const_iterator it;
+ QMap<QString, int>uniqueMap;
+ int i = 0;
+ for(it = m_transactionList.begin(); it != m_transactionList.end(); ++it) {
+ uniqueMap[(*it).first.id()]++;
+ KMyMoneyRegister::Transaction* t = KMyMoneyRegister::Register::transactionFactory(m_register, (*it).first, (*it).second, uniqueMap[(*it).first.id()]);
+ actBalance[t->split().accountId()] = MyMoneyMoney(0,1);
+ kmymoney2->slotStatusProgressBar(++i, 0);
+ // if we're in reconciliation and the state is cleared, we
+ // force the item to show in dimmed intensity to get a visual focus
+ // on those items, that we need to work on
+ if(isReconciliationAccount() && (*it).second.reconcileFlag() == MyMoneySplit::Cleared) {
+ t->setReducedIntensity(true);
+ }
+ }
+
+ // create dummy entries for the scheduled transactions if sorted by postdate
+ int period = KMyMoneyGlobalSettings::schedulePreview();
+ if(m_register->primarySortKey() == KMyMoneyRegister::PostDateSort) {
+ // show scheduled transactions which have a scheduled postdate
+ // within the next 'period' days. In reconciliation mode, the
+ // period starts on the statement date.
+ QDate endDate = QDate::currentDate().addDays(period);
+ if(isReconciliationAccount())
+ endDate = reconciliationDate.addDays(period);
+ QValueList<MyMoneySchedule> scheduleList = MyMoneyFile::instance()->scheduleList(m_account.id());
+ while(scheduleList.count() > 0){
+ MyMoneySchedule& s = scheduleList.first();
+ for(;;) {
+ if(s.isFinished() || s.adjustedNextDueDate() > endDate) {
+ break;
+ }
+
+ MyMoneyTransaction t(s.id(), KMyMoneyUtils::scheduledTransaction(s));
+ // if the transaction is scheduled and overdue, it can't
+ // certainly be posted in the past. So we take todays date
+ // as the alternative
+ if(s.isOverdue())
+ t.setPostDate(QDate::currentDate());
+ else
+ t.setPostDate(s.adjustedNextDueDate());
+ const QValueList<MyMoneySplit>& splits = t.splits();
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = splits.begin(); it_s != splits.end(); ++it_s) {
+ if((*it_s).accountId() == m_account.id()) {
+ new KMyMoneyRegister::StdTransactionScheduled(m_register, t, *it_s, uniqueMap[t.id()]);
+ }
+ }
+ // keep track of this payment locally (not in the engine)
+ if(s.isOverdue())
+ s.setLastPayment(QDate::currentDate());
+ else
+ s.setLastPayment(s.nextDueDate());
+
+ // if this is a one time schedule, we can bail out here as we're done
+ if(s.occurence() == MyMoneySchedule::OCCUR_ONCE)
+ break;
+
+ // for all others, we check if the next payment date is still 'in range'
+ s.setNextDueDate(s.nextPayment(s.nextDueDate()));
+ }
+ scheduleList.pop_front();
+ }
+ }
+
+ // add the group markers
+ m_register->addGroupMarkers();
+
+ // sort the transactions according to the sort setting
+ m_register->sortItems();
+
+ // remove trailing and adjacent markers
+ m_register->removeUnwantedGroupMarkers();
+
+ // add special markers for reconciliation now so that they do not get
+ // removed by m_register->removeUnwantedGroupMarkers(). Needs resorting
+ // of items but that's ok.
+
+ KMyMoneyRegister::StatementGroupMarker* statement = 0;
+ KMyMoneyRegister::StatementGroupMarker* dStatement = 0;
+ KMyMoneyRegister::StatementGroupMarker* pStatement = 0;
+
+ if(isReconciliationAccount()) {
+ switch(m_register->primarySortKey()) {
+ case KMyMoneyRegister::PostDateSort:
+ statement = new KMyMoneyRegister::StatementGroupMarker(m_register, KMyMoneyRegister::Deposit, reconciliationDate, i18n("Statement Details"));
+ m_register->sortItems();
+ break;
+ case KMyMoneyRegister::TypeSort:
+ dStatement = new KMyMoneyRegister::StatementGroupMarker(m_register, KMyMoneyRegister::Deposit, reconciliationDate, i18n("Statement Deposit Details"));
+ pStatement = new KMyMoneyRegister::StatementGroupMarker(m_register, KMyMoneyRegister::Payment, reconciliationDate, i18n("Statement Payment Details"));
+ m_register->sortItems();
+ break;
+ default:
+ break;
+ }
+ }
+
+ // we need at least the balance for the account we currently show
+ actBalance[m_account.id()] = MyMoneyMoney();
+
+ if(m_account.accountType() == MyMoneyAccount::Investment) {
+ QValueList<QString>::const_iterator it_a;
+ for(it_a = m_account.accountList().begin(); it_a != m_account.accountList().end(); ++it_a) {
+ actBalance[*it_a] = MyMoneyMoney();
+ }
+ }
+
+ // determine balances (actual, cleared). We do this by getting the actual
+ // balance of all entered transactions from the engine and walk the list
+ // of transactions backward. Also re-select a transaction if it was
+ // selected before and setup the focus item.
+
+ MyMoneyMoney factor(1,1);
+ if(m_account.accountGroup() == MyMoneyAccount::Liability
+ || m_account.accountGroup() == MyMoneyAccount::Equity)
+ factor = -factor;
+
+ QMap<QString, int> deposits;
+ QMap<QString, int> payments;
+ QMap<QString, MyMoneyMoney> depositAmount;
+ QMap<QString, MyMoneyMoney> paymentAmount;
+ for(it_b = actBalance.begin(); it_b != actBalance.end(); ++it_b) {
+ MyMoneyMoney balance = MyMoneyFile::instance()->balance(it_b.key());
+ balance = balance * factor;
+ clearedBalance[it_b.key()] =
+ futureBalance[it_b.key()] =
+ (*it_b) = balance;
+ deposits[it_b.key()] = payments[it_b.key()] = 0;
+ depositAmount[it_b.key()] = MyMoneyMoney();
+ paymentAmount[it_b.key()] = MyMoneyMoney();
+ }
+
+ tracer.printf("total balance of %s = %s", m_account.name().data(), actBalance[m_account.id()].formatMoney("", 2).data());
+ tracer.printf("future balance of %s = %s", m_account.name().data(), futureBalance[m_account.id()].formatMoney("", 2).data());
+ tracer.printf("cleared balance of %s = %s", m_account.name().data(), clearedBalance[m_account.id()].formatMoney("", 2).data());
+
+ KMyMoneyRegister::RegisterItem* p = m_register->lastItem();
+ focusItem = 0;
+
+ // take care of possibly trailing scheduled transactions (bump up the future balance)
+ while(p) {
+ if(p->isSelectable()) {
+ KMyMoneyRegister::Transaction* t = dynamic_cast<KMyMoneyRegister::Transaction*>(p);
+ if(t && t->isScheduled()) {
+ MyMoneyMoney balance = futureBalance[t->split().accountId()];
+ const MyMoneySplit& split = t->split();
+ // if this split is a stock split, we can't just add the amount of shares
+ if(t->transaction().isStockSplit()) {
+ balance = balance * split.shares();
+ } else {
+ balance += split.shares() * factor;
+ }
+ futureBalance[split.accountId()] = balance;
+ } else if(t && !focusItem)
+ focusItem = p;
+ }
+ p = p->prevItem();
+ }
+
+ p = m_register->lastItem();
+ while(p) {
+ KMyMoneyRegister::Transaction* t = dynamic_cast<KMyMoneyRegister::Transaction*>(p);
+ if(t) {
+ if(isSelected.contains(t->id()))
+ t->setSelected(true);
+
+ if(t->id() == focusItemId)
+ focusItem = t;
+ if(t->id() == anchorItemId)
+ anchorItem = t;
+
+ const MyMoneySplit& split = t->split();
+ MyMoneyMoney balance = futureBalance[split.accountId()];
+ t->setBalance(balance);
+
+ // if this split is a stock split, we can't just add the amount of shares
+ if(t->transaction().isStockSplit()) {
+ balance /= split.shares();
+ } else {
+ balance -= split.shares() * factor;
+ }
+
+ if(!t->isScheduled()) {
+ if(split.reconcileFlag() == MyMoneySplit::NotReconciled) {
+ tracer.printf("Reducing cleared balance by %s because %s/%s(%s) is not reconciled", (split.shares() * factor).formatMoney("", 2).data(), t->transaction().id().data(), split.id().data(), t->transaction().postDate().toString(Qt::ISODate).data());
+ clearedBalance[split.accountId()] -= split.shares() * factor;
+ }
+ if(isReconciliationAccount() && t->transaction().postDate() > reconciliationDate && split.reconcileFlag() == MyMoneySplit::Cleared) {
+ tracer.printf("Reducing cleared balance by %s because we are in reconciliation, %s/%s(%s)'s date is after or on reconciliation date (%s) and is cleared", (split.shares() * factor).formatMoney("", 2).data(), t->transaction().id().data(), split.id().data(), t->transaction().postDate().toString(Qt::ISODate).data(), reconciliationDate.toString(Qt::ISODate).data());
+
+ clearedBalance[split.accountId()] -= split.shares() * factor;
+ }
+ if(isReconciliationAccount() && t->transaction().postDate() <= reconciliationDate && split.reconcileFlag() == MyMoneySplit::Cleared) {
+ if(split.shares().isNegative()) {
+ payments[split.accountId()]++;
+ paymentAmount[split.accountId()] += split.shares();
+ } else {
+ deposits[split.accountId()]++;
+ depositAmount[split.accountId()] += split.shares();
+ }
+ }
+
+ if(t->transaction().postDate() > QDate::currentDate()) {
+ tracer.printf("Reducing actual balance by %s because %s/%s(%s) is in the future", (split.shares() * factor).formatMoney("", 2).data(), t->transaction().id().data(), split.id().data(), t->transaction().postDate().toString(Qt::ISODate).data());
+ actBalance[split.accountId()] -= split.shares() * factor;
+ }
+ }
+ futureBalance[split.accountId()] = balance;
+ }
+ p = p->prevItem();
+ }
+
+ tracer.printf("total balance of %s = %s", m_account.name().data(), actBalance[m_account.id()].formatMoney("", 2).data());
+ tracer.printf("future balance of %s = %s", m_account.name().data(), futureBalance[m_account.id()].formatMoney("", 2).data());
+ tracer.printf("cleared balance of %s = %s", m_account.name().data(), clearedBalance[m_account.id()].formatMoney("", 2).data());
+
+ // update statement information
+ if(statement) {
+ statement->setText(i18n("%1 deposits (%3), %2 payments (%4)").
+ arg(deposits[m_account.id()]).
+ arg(payments[m_account.id()]).
+ arg(depositAmount[m_account.id()].abs().formatMoney(m_account.fraction())).
+ arg(paymentAmount[m_account.id()].abs().formatMoney(m_account.fraction())) );
+ }
+ if(pStatement) {
+ pStatement->setText(i18n("%1 payments (%2)").arg(payments[m_account.id()]).
+ arg(paymentAmount[m_account.id()].abs().formatMoney(m_account.fraction())) );
+ }
+ if(dStatement) {
+ dStatement->setText(i18n("%1 deposits (%2)").arg(deposits[m_account.id()]).
+ arg(depositAmount[m_account.id()].abs().formatMoney(m_account.fraction())) );
+ }
+
+ // add a last empty entry for new transactions
+ // leave some information about the current account
+ MyMoneySplit split;
+ split.setReconcileFlag(MyMoneySplit::NotReconciled);
+ // make sure to use the value specified in the option during reconciliation
+ if(isReconciliationAccount())
+ split.setReconcileFlag(static_cast<MyMoneySplit::reconcileFlagE>(KMyMoneyGlobalSettings::defaultReconciliationState()));
+ KMyMoneyRegister::Register::transactionFactory(m_register, MyMoneyTransaction(), split, 0);
+
+ m_register->updateRegister(true);
+
+ if(focusItem) {
+ // in case we have some selected items we just set the focus item
+ // in other cases, we make the focusitem also the selected item
+ if(isSelected.count() > 1) {
+ m_register->setFocusItem(focusItem);
+ m_register->setAnchorItem(anchorItem);
+ } else
+ m_register->selectItem(focusItem, true);
+ } else {
+ // just use the empty line at the end if nothing else exists in the ledger
+ p = m_register->lastItem();
+ m_register->setFocusItem(p);
+ m_register->selectItem(p);
+ focusItem = p;
+ }
+
+ updateSummaryLine(actBalance, clearedBalance);
+ kmymoney2->slotStatusProgressBar(-1, -1);
+
+ } catch(MyMoneyException *e) {
+ delete e;
+ m_account = MyMoneyAccount();
+ clear();
+ }
+
+ // (re-)position viewport
+ if(m_newAccountLoaded) {
+ if(focusItem) {
+ d->m_startPoint = QPoint(-1, -1);
+ } else {
+ d->m_startPoint = QPoint(0, 0);
+ }
+ }
+ if(!d->m_inLoading) {
+ d->m_viewPosTimer.start(30, true);
+ d->m_inLoading = true;
+ }
+
+ d->m_showDetails = KMyMoneyGlobalSettings::showRegisterDetailed();
+
+ // and tell everyone what's selected
+ emit accountSelected(m_account);
+}
+
+void KGlobalLedgerView::updateSummaryLine(const QMap<QString, MyMoneyMoney>& actBalance, const QMap<QString, MyMoneyMoney>& clearedBalance)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ m_leftSummaryLabel->show();
+ m_centerSummaryLabel->show();
+ m_rightSummaryLabel->show();
+
+ if(isReconciliationAccount()) {
+ if(m_account.accountType() != MyMoneyAccount::Investment) {
+ m_leftSummaryLabel->setText(i18n("Statement: %1").arg(d->m_endingBalance.formatMoney("", d->m_precision)));
+ m_centerSummaryLabel->setText(i18n("Cleared: %1").arg(clearedBalance[m_account.id()].formatMoney("", d->m_precision)));
+ m_rightSummaryLabel->setText(i18n("Difference: %1").arg((clearedBalance[m_account.id()] - d->m_endingBalance).formatMoney("", d->m_precision)));
+ }
+ } else {
+ // update summary line in normal mode
+ QDate reconcileDate = m_account.lastReconciliationDate();
+
+ if(reconcileDate.isValid()) {
+ m_leftSummaryLabel->setText(i18n("Last reconciled: %1").arg(KGlobal::locale()->formatDate(reconcileDate, true)));
+ } else {
+ m_leftSummaryLabel->setText(i18n("Never reconciled"));
+ }
+
+ m_rightSummaryLabel->setPaletteForegroundColor(m_leftSummaryLabel->paletteForegroundColor());
+ if(m_account.accountType() != MyMoneyAccount::Investment) {
+ m_centerSummaryLabel->setText(i18n("Cleared: %1").arg(clearedBalance[m_account.id()].formatMoney("", d->m_precision)));
+ m_rightSummaryLabel->setText(i18n("Balance: %1").arg(actBalance[m_account.id()].formatMoney("", d->m_precision)));
+ bool showNegative = actBalance[m_account.id()].isNegative();
+ if(m_account.accountGroup() == MyMoneyAccount::Liability && !actBalance[m_account.id()].isZero())
+ showNegative = !showNegative;
+ if(showNegative) {
+ m_rightSummaryLabel->setPaletteForegroundColor(KMyMoneyGlobalSettings::listNegativeValueColor());
+ }
+ } else {
+ m_centerSummaryLabel->hide();
+ MyMoneyMoney balance;
+ MyMoneySecurity base = file->baseCurrency();
+ QMap<QString, MyMoneyMoney>::const_iterator it_b;
+ bool approx = false;
+ for(it_b = actBalance.begin(); it_b != actBalance.end(); ++it_b) {
+ MyMoneyAccount stock = file->account(it_b.key());
+ QString currencyId = stock.currencyId();
+ MyMoneySecurity sec = file->security(currencyId);
+ MyMoneyPrice priceInfo;
+ MyMoneyMoney rate(1,1);
+
+ if(stock.isInvest()) {
+ currencyId = sec.tradingCurrency();
+ priceInfo = file->price(sec.id(), currencyId);
+ approx |= !priceInfo.isValid();
+ rate = priceInfo.rate(sec.tradingCurrency());
+ }
+
+ if(currencyId != base.id()) {
+ priceInfo = file->price(sec.tradingCurrency(), base.id());
+ approx |= !priceInfo.isValid();
+ rate = (rate * priceInfo.rate(base.id())).convert(MyMoneyMoney::precToDenom(KMyMoneyGlobalSettings::pricePrecision()));
+ }
+ balance += ((*it_b) * rate).convert(base.smallestAccountFraction());
+ }
+ m_rightSummaryLabel->setText(i18n("Investment value: %1%2").arg(approx ? "~" : "").arg(balance.formatMoney(base.tradingSymbol(), d->m_precision)));
+ }
+ }
+}
+
+void KGlobalLedgerView::slotUpdateViewPos(void)
+{
+ m_register->setUpdatesEnabled(true);
+
+ if(d->m_startPoint == QPoint(-1, -1)) {
+ m_register->ensureItemVisible(m_register->focusItem());
+ m_register->updateContents();
+ } else {
+ m_register->setContentsPos(d->m_startPoint.x(), d->m_startPoint.y());
+ m_register->repaintContents();
+ }
+ d->m_inLoading = false;
+}
+
+
+void KGlobalLedgerView::resizeEvent(QResizeEvent* ev)
+{
+ m_register->resize(KMyMoneyRegister::DetailColumn);
+ m_form->resize(KMyMoneyTransactionForm::ValueColumn1);
+ KMyMoneyViewBase::resizeEvent(ev);
+}
+
+void KGlobalLedgerView::loadAccounts(void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ // check if the current account still exists and make it the
+ // current account
+ if(!m_account.id().isEmpty()) {
+ try {
+ m_account = file->account(m_account.id());
+ } catch(MyMoneyException *e) {
+ delete e;
+ m_account = MyMoneyAccount();
+ }
+ }
+
+ m_accountComboBox->loadList((KMyMoneyUtils::categoryTypeE)(KMyMoneyUtils::asset | KMyMoneyUtils::liability));
+
+ if(m_account.id().isEmpty()) {
+ QStringList list = m_accountComboBox->accountList();
+ if(list.count()) {
+ QStringList::Iterator it;
+ for(it = list.begin(); it != list.end(); ++it) {
+ MyMoneyAccount a = file->account(*it);
+ if(!a.isInvest()) {
+ if(a.value("PreferredAccount") == "Yes") {
+ m_account = a;
+ break;
+ } else if(m_account.id().isEmpty()) {
+ m_account = a;
+ }
+ }
+ }
+ }
+ }
+
+ if(!m_account.id().isEmpty()) {
+ m_accountComboBox->setSelected(m_account);
+ try {
+ d->m_precision = MyMoneyMoney::denomToPrec(m_account.fraction());
+ } catch(MyMoneyException *e) {
+ qDebug("Security %s for account %s not found", m_account.currencyId().data(), m_account.name().data());
+ delete e;
+ d->m_precision = 2;
+ }
+ }
+}
+
+void KGlobalLedgerView::selectTransaction(const QString& id)
+{
+ if(!id.isEmpty()) {
+ KMyMoneyRegister::RegisterItem* p = m_register->lastItem();
+ while(p) {
+ KMyMoneyRegister::Transaction* t = dynamic_cast<KMyMoneyRegister::Transaction*>(p);
+ if(t) {
+ if(t->transaction().id() == id) {
+ m_register->selectItem(t);
+ m_register->ensureItemVisible(t);
+ break;
+ }
+ }
+ p = p->prevItem();
+ }
+ }
+}
+
+void KGlobalLedgerView::slotSelectAllTransactions(void)
+{
+ KMyMoneyRegister::RegisterItem* p = m_register->firstItem();
+ while(p) {
+ KMyMoneyRegister::Transaction* t = dynamic_cast<KMyMoneyRegister::Transaction*>(p);
+ if(t) {
+ if(t->isVisible() && t->isSelectable() && !t->isScheduled() && !t->id().isEmpty()) {
+ t->setSelected(true);
+ }
+ }
+ p = p->nextItem();
+ }
+ m_register->repaintItems();
+
+ // inform everyone else about the selected items
+ KMyMoneyRegister::SelectedTransactions list(m_register);
+ emit transactionsSelected(list);
+}
+
+void KGlobalLedgerView::slotSetReconcileAccount(const MyMoneyAccount& acc, const QDate& reconciliationDate, const MyMoneyMoney& endingBalance)
+{
+ if(d->m_reconciliationAccount != acc.id()) {
+ // make sure the account is selected
+ if(!acc.id().isEmpty())
+ slotSelectAccount(acc.id());
+
+ d->m_reconciliationAccount = acc.id();
+ d->m_reconciliationDate = reconciliationDate;
+ d->m_endingBalance = endingBalance;
+ if(acc.accountGroup() == MyMoneyAccount::Liability)
+ d->m_endingBalance = -endingBalance;
+
+ m_newAccountLoaded = true;
+ if(acc.id().isEmpty()) {
+ kmymoney2->action("account_reconcile_postpone")->unplug(m_buttonbar);
+ kmymoney2->action("account_reconcile_finish")->unplug(m_buttonbar);
+ } else {
+ kmymoney2->action("account_reconcile_postpone")->plug(m_buttonbar);
+ kmymoney2->action("account_reconcile_finish")->plug(m_buttonbar);
+ // when we start reconciliation, we need to reload the view
+ // because no data has been changed. When postponing or finishing
+ // reconciliation, the data change in the engine takes care of updateing
+ // the view.
+ slotLoadView();
+ }
+ }
+}
+
+bool KGlobalLedgerView::isReconciliationAccount(void) const
+{
+ return m_account.id() == d->m_reconciliationAccount;
+}
+
+bool KGlobalLedgerView::slotSelectAccount(const MyMoneyObject& obj)
+{
+ if(typeid(obj) != typeid(MyMoneyAccount))
+ return false;
+
+ if(d->m_recursion)
+ return false;
+
+ d->m_recursion = true;
+ const MyMoneyAccount& acc = dynamic_cast<const MyMoneyAccount&>(obj);
+ bool rc = slotSelectAccount(acc.id());
+ d->m_recursion = false;
+ return rc;
+}
+
+bool KGlobalLedgerView::slotSelectAccount(const QString& id, const QString& transactionId)
+{
+ bool rc = true;
+
+ if(!id.isEmpty()) {
+ if(m_account.id() != id) {
+ try {
+ m_account = MyMoneyFile::instance()->account(id);
+ // if a stock account is selected, we show the
+ // the corresponding parent (investment) account
+ if(m_account.isInvest()) {
+ m_account = MyMoneyFile::instance()->account(m_account.parentAccountId());
+ }
+ m_newAccountLoaded = true;
+ slotLoadView();
+ } catch(MyMoneyException* e) {
+ qDebug("Unable to retrieve account %s", id.data());
+ delete e;
+ rc = false;
+ }
+ } else {
+ // we need to refresh m_account.m_accountList, a child could have been deleted
+ m_account = MyMoneyFile::instance()->account(id);
+ emit accountSelected(m_account);
+ }
+ selectTransaction(transactionId);
+ }
+ return rc;
+}
+
+void KGlobalLedgerView::slotNewTransaction(KMyMoneyRegister::Action id)
+{
+ if(!m_inEditMode) {
+ d->m_action = id;
+ emit newTransaction();
+ }
+}
+
+void KGlobalLedgerView::slotNewTransaction(void)
+{
+ slotNewTransaction(KMyMoneyRegister::ActionNone);
+}
+
+void KGlobalLedgerView::setupDefaultAction(void)
+{
+ switch(m_account.accountType()) {
+ // TODO if we want a different action for different account types
+ // we can add cases here
+ default:
+ d->m_action = KMyMoneyRegister::ActionWithdrawal;
+ break;
+ }
+}
+
+bool KGlobalLedgerView::selectEmptyTransaction(void)
+{
+ bool rc = false;
+
+ if(!m_inEditMode) {
+ // in case we don't know the type of transaction to be created,
+ // have at least one selected transaction and the id of
+ // this transaction is not empty, we take it as template for the
+ // transaction to be created
+ KMyMoneyRegister::SelectedTransactions list(m_register);
+ if((d->m_action == KMyMoneyRegister::ActionNone) && (list.count() > 0) && (!list[0].transaction().id().isEmpty())) {
+ // the new transaction to be created will have the same type
+ // as the one that currently has the focus
+ KMyMoneyRegister::Transaction* t = dynamic_cast<KMyMoneyRegister::Transaction*>(m_register->focusItem());
+ if(t)
+ d->m_action = t->actionType();
+ m_register->clearSelection();
+ }
+
+ // if we still don't have an idea which type of transaction
+ // to create, we use the default.
+ if(d->m_action == KMyMoneyRegister::ActionNone) {
+ setupDefaultAction();
+ }
+
+ m_register->selectItem(m_register->lastItem());
+ m_register->updateRegister();
+ rc = true;
+ }
+ return rc;
+}
+
+TransactionEditor* KGlobalLedgerView::startEdit(const KMyMoneyRegister::SelectedTransactions& list)
+{
+ // we use the warnlevel to keep track, if we have to warn the
+ // user that some or all splits have been reconciled or if the
+ // user cannot modify the transaction if at least one split
+ // has the status frozen. The following value are used:
+ //
+ // 0 - no sweat, user can modify
+ // 1 - user should be warned that at least one split has been reconciled
+ // already
+ // 2 - user will be informed, that this transaction cannot be changed anymore
+
+ int warnLevel = list.warnLevel();
+ Q_ASSERT(warnLevel<2); // otherwise the edit action should not be enabled
+
+ switch(warnLevel) {
+ case 0:
+ break;
+
+ case 1:
+ if(KMessageBox::warningContinueCancel(0,
+ i18n(
+ "At least one split of the selected transactions has been reconciled. "
+ "Do you wish to continue to edit the transactions anyway?"
+ ),
+ i18n("Transaction already reconciled"), KStdGuiItem::cont(),
+ "EditReconciledTransaction") == KMessageBox::Cancel) {
+ warnLevel = 2;
+ }
+ break;
+
+ case 2:
+ KMessageBox::sorry(0,
+ i18n("At least one split of the selected transactions has been frozen. "
+ "Editing the transactions is therefore prohibited."),
+ i18n("Transaction already frozen"));
+ break;
+
+ case 3:
+ KMessageBox::sorry(0,
+ i18n("At least one split of the selected transaction references an account that has been closed. "
+ "Editing the transactions is therefore prohibited."),
+ i18n("Account closed"));
+ break;
+ }
+
+ if(warnLevel > 1)
+ return 0;
+
+
+ TransactionEditor* editor = 0;
+ KMyMoneyRegister::Transaction* item = dynamic_cast<KMyMoneyRegister::Transaction*>(m_register->focusItem());
+
+ if(item) {
+ // in case the current focus item is not selected, we move the focus to the first selected transaction
+ if(!item->isSelected()) {
+ KMyMoneyRegister::RegisterItem* p;
+ for(p = m_register->firstItem(); p; p = p->nextItem()) {
+ KMyMoneyRegister::Transaction* t = dynamic_cast<KMyMoneyRegister::Transaction*>(p);
+ if(t && t->isSelected()) {
+ m_register->setFocusItem(t);
+ item = t;
+ break;
+ }
+ }
+ }
+
+ // decide, if we edit in the register or in the form
+ TransactionEditorContainer* parent;
+ if(m_formFrame->isVisible())
+ parent = m_form;
+ else {
+ parent = m_register;
+ }
+
+ editor = item->createEditor(parent, list, m_lastPostDate);
+
+ // check that we use the same transaction commodity in all selected transactions
+ // if not, we need to update this in the editor's list. The user can also bail out
+ // of this operation which means that we have to stop editing here.
+ if(editor) {
+ if(!editor->fixTransactionCommodity(m_account)) {
+ // if the user wants to quit, we need to destroy the editor
+ // and bail out
+ delete editor;
+ editor = 0;
+ }
+ }
+
+ if(editor) {
+ if(parent == m_register) {
+ // make sure, the height of the table is correct
+ m_register->updateRegister(KMyMoneyGlobalSettings::ledgerLens() | !KMyMoneyGlobalSettings::transactionForm());
+ }
+
+ m_inEditMode = true;
+ connect(editor, SIGNAL(transactionDataSufficient(bool)), kmymoney2->action("transaction_enter"), SLOT(setEnabled(bool)));
+ connect(editor, SIGNAL(returnPressed()), kmymoney2->action("transaction_enter"), SLOT(activate()));
+ connect(editor, SIGNAL(escapePressed()), kmymoney2->action("transaction_cancel"), SLOT(activate()));
+
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), editor, SLOT(slotReloadEditWidgets()));
+ connect(editor, SIGNAL(finishEdit(const KMyMoneyRegister::SelectedTransactions&)), this, SLOT(slotLeaveEditMode(const KMyMoneyRegister::SelectedTransactions&)));
+
+ connect(editor, SIGNAL(objectCreation(bool)), d->m_mousePressFilter, SLOT(setFilterDeactive(bool)));
+ connect(editor, SIGNAL(createPayee(const QString&, QString&)), kmymoney2, SLOT(slotPayeeNew(const QString&, QString&)));
+ connect(editor, SIGNAL(createCategory(MyMoneyAccount&, const MyMoneyAccount&)), kmymoney2, SLOT(slotCategoryNew(MyMoneyAccount&, const MyMoneyAccount&)));
+ connect(editor, SIGNAL(createSecurity(MyMoneyAccount&, const MyMoneyAccount&)), kmymoney2, SLOT(slotInvestmentNew(MyMoneyAccount&, const MyMoneyAccount&)));
+ connect(editor, SIGNAL(assignNumber(void)), kmymoney2, SLOT(slotTransactionAssignNumber()));
+ connect(editor, SIGNAL(lastPostDateUsed(const QDate&)), this, SLOT(slotKeepPostDate(const QDate&)));
+
+ // create the widgets, place them in the parent and load them with data
+ // setup tab order
+ m_tabOrderWidgets.clear();
+ editor->setup(m_tabOrderWidgets, m_account, d->m_action);
+
+ Q_ASSERT(!m_tabOrderWidgets.isEmpty());
+
+ // install event filter in all taborder widgets
+ for(QWidget* w = m_tabOrderWidgets.first(); w; w = m_tabOrderWidgets.next()) {
+ w->installEventFilter(this);
+ }
+
+ // Install a filter that checks if a mouse press happened outside
+ // of one of our own widgets.
+ qApp->installEventFilter(d->m_mousePressFilter);
+
+ // Check if the editor has some preference on where to set the focus
+ // If not, set the focus to the first widget in the tab order
+ QWidget* focusWidget = editor->firstWidget();
+ if(!focusWidget)
+ focusWidget = m_tabOrderWidgets.first();
+
+ // for some reason, this only works reliably if delayed a bit
+ QTimer::singleShot(10, focusWidget, SLOT(setFocus()));
+
+ // preset to 'I have no idea which type to create' for the next round.
+ d->m_action = KMyMoneyRegister::ActionNone;
+ }
+ }
+ return editor;
+}
+
+void KGlobalLedgerView::slotLeaveEditMode(const KMyMoneyRegister::SelectedTransactions& list)
+{
+ m_inEditMode = false;
+ qApp->removeEventFilter(d->m_mousePressFilter);
+
+ // a possible focusOut event may have removed the focus, so we
+ // install it back again.
+ m_register->focusItem()->setFocus(true);
+
+ // if we come back from editing a new item, we make sure that
+ // we always select the very last known transaction entry no
+ // matter if the transaction has been created or not.
+
+ if(list.count() && list[0].transaction().id().isEmpty()) {
+ // block signals to prevent some infinite loops that might occur here.
+ m_register->blockSignals(true);
+ m_register->clearSelection();
+ KMyMoneyRegister::RegisterItem* p = m_register->lastItem();
+ if(p && p->prevItem())
+ p = p->prevItem();
+ m_register->selectItem(p);
+ m_register->updateRegister(true);
+ m_register->blockSignals(false);
+ // we need to update the form manually as sending signals was blocked
+ KMyMoneyRegister::Transaction* t = dynamic_cast<KMyMoneyRegister::Transaction*>(p);
+ if(t)
+ m_form->slotSetTransaction(t);
+ }
+
+ if(m_needReload)
+ slotLoadView();
+
+ m_register->setFocus();
+}
+
+bool KGlobalLedgerView::focusNextPrevChild(bool next)
+{
+ bool rc = false;
+
+ // qDebug("KGlobalLedgerView::focusNextPrevChild(editmode=%s)", m_inEditMode ? "true" : "false");
+ if(m_inEditMode) {
+ QWidget *w = 0;
+ QWidget *currentWidget;
+
+ w = qApp->focusWidget();
+ while(w && m_tabOrderWidgets.find(w) == -1) {
+ // qDebug("'%s' not in list, use parent", w->className());
+ w = w->parentWidget();
+ }
+ // if(w) qDebug("tab order is at '%s'", w->className());
+ currentWidget = m_tabOrderWidgets.current();
+ w = next ? m_tabOrderWidgets.next() : m_tabOrderWidgets.prev();
+
+ do {
+ if(!w) {
+ w = next ? m_tabOrderWidgets.first() : m_tabOrderWidgets.last();
+ }
+
+ if(w != currentWidget
+ && ((w->focusPolicy() & TabFocus) == TabFocus)
+ && w->isVisible() && w->isEnabled()) {
+ // qDebug("Selecting '%s' as focus", w->className());
+ w->setFocus();
+ rc = true;
+ break;
+ }
+ w = next ? m_tabOrderWidgets.next() : m_tabOrderWidgets.prev();
+ } while(w != currentWidget);
+
+ } else
+ rc = KMyMoneyViewBase::focusNextPrevChild(next);
+
+ return rc;
+}
+
+
+void KGlobalLedgerView::show(void)
+{
+ if(m_needReload) {
+ if(!m_inEditMode) {
+ loadView();
+ m_needReload = false;
+ m_newAccountLoaded = false;
+ }
+
+ } else {
+ emit accountSelected(m_account);
+ KMyMoneyRegister::SelectedTransactions list(m_register);
+ emit transactionsSelected(list);
+ }
+
+ // don't forget base class implementation
+ KMyMoneyViewBase::show();
+}
+
+bool KGlobalLedgerView::eventFilter(QObject* o, QEvent* e)
+{
+ bool rc = false;
+
+ if(e->type() == QEvent::KeyPress) {
+ QKeyEvent *k = static_cast<QKeyEvent*>(e);
+ if(m_inEditMode) {
+ // qDebug("object = %s, key = %d", o->className(), k->key());
+ if(o == m_register) {
+ // we hide all key press events from the register
+ // while editing a transaction
+ rc = true;
+ }
+ } else {
+ // qDebug("object = %s, key = %d", o->className(), k->key());
+ if(o == m_register) {
+ if((k->state() & Qt::KeyButtonMask) == 0) {
+ switch(k->key()) {
+ case Qt::Key_Return:
+ case Qt::Key_Enter:
+ kmymoney2->action("transaction_edit")->activate();
+ rc = true;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ if(!rc)
+ rc = KMyMoneyViewBase::eventFilter(o, e);
+
+ return rc;
+}
+
+void KGlobalLedgerView::slotSortOptions(void)
+{
+ KSortOptionDlg* dlg = new KSortOptionDlg(this);
+
+ QString key;
+ QString sortOrder, def;
+ if(isReconciliationAccount()) {
+ key = "kmm-sort-reconcile";
+ def = KMyMoneyGlobalSettings::sortReconcileView();
+ } else {
+ key = "kmm-sort-std";
+ def = KMyMoneyGlobalSettings::sortNormalView();
+ }
+
+ // check if we have an account override of the sort order
+ if(!m_account.value(key).isEmpty())
+ sortOrder = m_account.value(key);
+
+ QString oldOrder = sortOrder;
+
+ dlg->setSortOption(sortOrder, def);
+
+ if(dlg->exec() == QDialog::Accepted) {
+ sortOrder = dlg->sortOption();
+ if(sortOrder != oldOrder) {
+ if(sortOrder.isEmpty()) {
+ m_account.deletePair(key);
+ } else {
+ m_account.setValue(key, sortOrder);
+ }
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyFile::instance()->modifyAccount(m_account);
+ ft.commit();
+ } catch(MyMoneyException* e) {
+ qDebug("Unable to update sort order for account '%s': %s", m_account.name().latin1(), e->what().latin1());
+ delete e;
+ }
+ }
+ }
+ delete dlg;
+}
+
+void KGlobalLedgerView::slotToggleTransactionMark(KMyMoneyRegister::Transaction* /* t */)
+{
+ if(!m_inEditMode) {
+ emit toggleReconciliationFlag();
+ }
+}
+
+void KGlobalLedgerView::slotKeepPostDate(const QDate& date)
+{
+ m_lastPostDate = date;
+}
+
+bool KGlobalLedgerView::canCreateTransactions(QString& tooltip) const
+{
+ bool rc = true;
+ if(m_account.id().isEmpty()) {
+ tooltip = i18n("Cannot create transactions when no account is selected.");
+ rc = false;
+ }
+ if(m_account.accountGroup() == MyMoneyAccount::Income
+ || m_account.accountGroup() == MyMoneyAccount::Expense) {
+ tooltip = i18n("Cannot create transactions in the context of a category.");
+ rc = false;
+ }
+ if(m_account.isClosed()) {
+ tooltip = i18n("Cannot create transactions in a closed account.");
+ rc = false;
+ }
+ return rc;
+}
+
+bool KGlobalLedgerView::canProcessTransactions(const KMyMoneyRegister::SelectedTransactions& list, QString& tooltip) const
+{
+ if(m_register->focusItem() == 0)
+ return false;
+
+ if(!m_register->focusItem()->isSelected()) {
+ tooltip = i18n("Cannot process transaction with focus if it is not selected.");
+ return false;
+ }
+ return list.count() > 0;
+}
+
+bool KGlobalLedgerView::canModifyTransactions(const KMyMoneyRegister::SelectedTransactions& list, QString& tooltip) const
+{
+ return canProcessTransactions(list,tooltip) && list.canModify();
+}
+
+bool KGlobalLedgerView::canDuplicateTransactions(const KMyMoneyRegister::SelectedTransactions& list, QString& tooltip) const
+{
+ return canProcessTransactions(list,tooltip) && list.canDuplicate();
+}
+
+bool KGlobalLedgerView::canEditTransactions(const KMyMoneyRegister::SelectedTransactions& list, QString& tooltip) const
+{
+ // check if we can edit the list of transactions. We can edit, if
+ //
+ // a) no mix of standard and investment transactions exist
+ // b) if a split transaction is selected, this is the only selection
+ // c) none of the splits is frozen
+ // d) the transaction having the current focus is selected
+
+ // check for d)
+ if(!canProcessTransactions(list, tooltip))
+ return false;
+ // check for c)
+ if (list.warnLevel() == 2) {
+ tooltip = i18n("Cannot edit transactions with frozen splits.");
+ return false;
+ }
+
+
+ bool rc = true;
+ int investmentTransactions = 0;
+ int normalTransactions = 0;
+
+ if(m_account.accountGroup() == MyMoneyAccount::Income
+ || m_account.accountGroup() == MyMoneyAccount::Expense) {
+ tooltip = i18n("Cannot edit transactions in the context of a category.");
+ rc = false;
+ }
+
+ KMyMoneyRegister::SelectedTransactions::const_iterator it_t;
+ for(it_t = list.begin(); rc && it_t != list.end(); ++it_t) {
+ if((*it_t).transaction().id().isEmpty()) {
+ tooltip = QString();
+ rc = false;
+ continue;
+ }
+
+ if(KMyMoneyUtils::transactionType((*it_t).transaction()) == KMyMoneyUtils::InvestmentTransaction)
+ ++investmentTransactions;
+ else
+ ++normalTransactions;
+
+ // check for a)
+ if(investmentTransactions != 0 && normalTransactions != 0) {
+ tooltip = i18n("Cannot edit investment transactions and non-investment transactions together.");
+ rc = false;
+ break;
+ }
+
+ // check for b) but only for normalTransactions
+ if((*it_t).transaction().splitCount() > 2 && normalTransactions != 0) {
+ if(list.count() > 1) {
+ tooltip = i18n("Cannot edit multiple split transactions at once.");
+ rc = false;
+ break;
+ }
+ }
+ }
+
+ // now check that we have the correct account type for investment transactions
+ if(rc == true && investmentTransactions != 0) {
+ if(m_account.accountType() != MyMoneyAccount::Investment) {
+ tooltip = i18n("Cannot edit investment transactions in the context of this account.");
+ rc = false;
+ }
+ }
+ return rc;
+}
+
+#include "kgloballedgerview.moc"
diff --git a/kmymoney2/views/kgloballedgerview.h b/kmymoney2/views/kgloballedgerview.h
new file mode 100644
index 0000000..861bd0e
--- /dev/null
+++ b/kmymoney2/views/kgloballedgerview.h
@@ -0,0 +1,403 @@
+/***************************************************************************
+ kgloballedgerview.h - description
+ -------------------
+ begin : Sat Jul 13 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KACCOUNTVIEW_H
+#define KACCOUNTVIEW_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+#include <qwidgetlist.h>
+#include <qstring.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyutils.h>
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/kmymoneyview.h>
+#include <kmymoney/register.h>
+#include <kmymoney/transactionform.h>
+
+class QVBoxLayout;
+class QHBoxLayout;
+class QGridLayout;
+class QPopupMenu;
+class QFrame;
+class QLabel;
+
+class KMyMoneyAccountCombo;
+class KToolBar;
+class KToolBarButton;
+class MyMoneyReport;
+class TransactionEditor;
+
+/**
+ * helper class implementing an event filter to detect mouse button press
+ * events on widgets outside a given set of widgets. This is used internally
+ * to detect when to leave the edit mode.
+ */
+class MousePressFilter : public QObject
+{
+ Q_OBJECT
+public:
+ MousePressFilter(QWidget* parent = 0, const char* name = 0);
+
+ /**
+ * Add widget @p w to the list of possible parent objects. See eventFilter() how
+ * they will be used.
+ */
+ void addWidget(QWidget* w);
+
+public slots:
+ /**
+ * This slot allows to activate/deactive the filter. By default the
+ * filter is active.
+ *
+ * @param state Allows to activate (@a true) or deactivate (@a false) the filter
+ */
+ void setFilterActive(bool state = true);
+
+ /**
+ * This slot allows to activate/deactive the filter. By default the
+ * filter is active.
+ *
+ * @param state Allows to deactivate (@a true) or activate (@a false) the filter
+ */
+ void setFilterDeactive(bool state = false) { setFilterActive(!state); }
+
+protected:
+ /**
+ * This method checks if the widget @p child is a child of
+ * the widget @p parent and returns either @a true or @a false.
+ *
+ * @param child pointer to child widget
+ * @param parent pointer to parent widget
+ * @retval true @p child points to widget which has @p parent as parent or grand-parent
+ * @retval false @p child points to a widget which is not related to @p parent
+ */
+ bool isChildOf(QWidget* child, QWidget* parent);
+
+ /**
+ * Reimplemented from base class. Sends out the mousePressedOnExternalWidget() signal
+ * if object @p o points to an object which is not a child widget of any added previously
+ * using the addWidget() method. The signal is sent out only once for each event @p e.
+ *
+ * @param o pointer to QObject
+ * @param e pointer to QEvent
+ * @return always returns @a false
+ */
+ bool eventFilter(QObject* o, QEvent* e);
+
+signals:
+ void mousePressedOnExternalWidget(bool&);
+
+private:
+ QValueList<QWidget*> m_parents;
+ QEvent* m_lastMousePressEvent;
+ bool m_filterActive;
+};
+
+/**
+ * @author Thomas Baumgart
+ */
+class KGlobalLedgerView : public KMyMoneyViewBase
+{
+ Q_OBJECT
+public:
+ KGlobalLedgerView(QWidget *parent=0, const char *name=0);
+ ~KGlobalLedgerView();
+
+ /**
+ * This method returns the id of the currently selected account
+ * or QString() if none is selected.
+ */
+ const QString accountId(void) const { return m_account.id(); }
+
+ /**
+ * Checks if new transactions can be created in the current context
+ *
+ * @param tooltip reference to string receiving the tooltip text
+ * which explains why the modify function is not available (in case
+ * of returning @c false)
+ *
+ * @retval true Yes, view allows to create transactions (tooltip is not changed)
+ * @retval false No, view does not support creation of transactions (tooltip is updated with message)
+ */
+ bool canCreateTransactions(QString& tooltip) const;
+
+ /**
+ * Checks if a list of transactions can be modified (edit/delete) in the current context
+ *
+ * @param list list of selected transactions
+ * @param tooltip reference to string receiving the tooltip text
+ * which explains why the modify function is not available (in case
+ * of returning @c false)
+ *
+ * @retval true Yes, view allows to edit/delete transactions (tooltip is not changed)
+ * @retval false No, view cannot edit/delete transactions (tooltip is updated with message)
+ */
+ bool canModifyTransactions(const KMyMoneyRegister::SelectedTransactions& list, QString& tooltip) const;
+
+ bool canDuplicateTransactions(const KMyMoneyRegister::SelectedTransactions& list, QString& tooltip) const;
+
+ /**
+ * Checks if the list of transactions can be edited in the current context
+ *
+ * @param list list of selected transactions
+ * @param tooltip reference to string receiving the tooltip text
+ * which explains why the edit function is not available (in case
+ * of returning @c false)
+ *
+ * @return @c true if edit operation is possible, @c false if not
+ */
+ bool canEditTransactions(const KMyMoneyRegister::SelectedTransactions& list, QString& tooltip) const;
+
+ TransactionEditor* startEdit(const KMyMoneyRegister::SelectedTransactions& list);
+
+ /**
+ * Method to prepare the ledger view to create a new transaction.
+ * Returns if successful or not.
+ *
+ * retval true Emtpy transaction selected.
+ * retval false Not successful (e.g. already editing a transaction)
+ */
+ bool selectEmptyTransaction(void);
+
+public slots:
+ void show(void);
+
+ /**
+ * This method loads the view with data from the MyMoney engine.
+ */
+ void slotLoadView(void);
+
+ /**
+ * This slot is used to select the correct ledger view type for
+ * the account specified by @p id in a specific mode.
+ *
+ * @param accountId Internal id used for the account to show
+ * @param transactionId Internal id used for the transaction to select.
+ * Default is QString() which will select the last
+ * transaction in the ledger if not the same account
+ *
+ * @retval true selection of account referenced by @p id succeeded
+ * @retval false selection of account failed
+ */
+ bool slotSelectAccount(const QString& accountId, const QString& transactionId = QString());
+
+ /**
+ * This method is provided for convenience and acts as the method above.
+ */
+ bool slotSelectAccount(const MyMoneyObject& acc);
+
+ /**
+ * Switch to reconciliation mode for account @a account.
+ * If @a account is MyMoneyAccount() (the default), reconciliation mode
+ * is turned off.
+ *
+ * @param account account for which reconciliation mode is activated.
+ * Default is MyMoneyAccount().
+ * @param reconciliationDate date of statment
+ * @param endingBalance The calculated ending balance for the statement
+ * Default ist 0.
+ */
+ void slotSetReconcileAccount(const MyMoneyAccount& account = MyMoneyAccount(), const QDate& reconciliationDate = QDate(), const MyMoneyMoney& endingBalance = MyMoneyMoney());
+
+ /**
+ * Select all transactions in the ledger that are not hidden.
+ */
+ void slotSelectAllTransactions(void);
+
+protected:
+ /**
+ * This method reloads the account selection combo box of the
+ * view with all asset and liability accounts from the engine.
+ * If the account id of the current account held in @p m_accountId is
+ * empty or if the referenced account does not exist in the engine,
+ * the first account found in the list will be made the current account.
+ */
+ void loadAccounts(void);
+
+ /**
+ * This method clears the register, form, transaction list. See @sa m_register,
+ * @sa m_transactionList
+ */
+ void clear(void);
+
+ void loadView(void);
+
+ void resizeEvent(QResizeEvent*);
+
+ void selectTransaction(const QString& id);
+
+ /**
+ * This method handles the focus of the keyboard. When in edit mode
+ * (m_inEditMode is true) the keyboard focus is handled
+ * according to the widgets that are referenced in m_tabOrderWidgets.
+ * If not in edit mode, the base class functionality is provided.
+ *
+ * @param next true if forward-tab, false if backward-tab was
+ * pressed by the user
+ */
+ bool focusNextPrevChild(bool next);
+
+ bool eventFilter(QObject* o, QEvent* e);
+
+ /**
+ * Returns @a true if setReconciliationAccount() has been called for
+ * the current loaded account.
+ *
+ * @retval true current account is in reconciliation mode
+ * @retval false current account is not in reconciliation mode
+ */
+ bool isReconciliationAccount(void) const;
+
+ /**
+ * Updates the values on the summary line beneath the register with
+ * the given values. The contents shown differs between reconciliation
+ * mode and normal mode.
+ *
+ * @param actBalance map of account indexed values to be used as actual balance
+ * @param clearedBalance map of account indexed values to be used as cleared balance
+ */
+ void updateSummaryLine(const QMap<QString, MyMoneyMoney>& actBalance, const QMap<QString, MyMoneyMoney>& clearedBalance);
+
+ /**
+ * setup the default action according to the current account type
+ */
+ void setupDefaultAction(void);
+
+protected slots:
+ void slotLeaveEditMode(const KMyMoneyRegister::SelectedTransactions& list);
+ void slotNewTransaction(void);
+ void slotNewTransaction(KMyMoneyRegister::Action);
+
+ /**
+ * Sets the contentsPos of the register to d->m_startPoint or makes
+ * the focus item visible if d->m_startPoint equals QPoint(-1, -1).
+ */
+ void slotUpdateViewPos(void);
+ void slotSortOptions(void);
+ void slotToggleTransactionMark(KMyMoneyRegister::Transaction* t);
+
+ void slotKeepPostDate(const QDate&);
+
+ void slotAboutToSelectItem(KMyMoneyRegister::RegisterItem*, bool&);
+
+protected:
+ /**
+ * This member keeps the date that was used as the last posting date.
+ * It will be updated whenever the user modifies the post date
+ * and is used to preset the posting date when new transactions are created.
+ * This member is initialised to the current date when the program is started.
+ */
+ static QDate m_lastPostDate;
+
+private:
+ /// \internal d-pointer class.
+ class Private;
+ /// \internal d-pointer instance.
+ Private* const d;
+
+ // frames
+ QFrame* m_toolbarFrame;
+ QFrame* m_registerFrame;
+ QFrame* m_buttonFrame;
+ QFrame* m_formFrame;
+ QFrame* m_summaryFrame;
+
+ // widgets
+ KMyMoneyAccountCombo* m_accountComboBox;
+ KMyMoneyRegister::Register* m_register;
+ KToolBar* m_toolbar;
+ KToolBar* m_buttonbar;
+
+ /**
+ * This member holds the currently selected account
+ */
+ MyMoneyAccount m_account;
+
+ /**
+ * This member holds the transaction list
+ */
+ QValueList<QPair<MyMoneyTransaction, MyMoneySplit> > m_transactionList;
+
+ QLabel* m_leftSummaryLabel;
+ QLabel* m_centerSummaryLabel;
+ QLabel* m_rightSummaryLabel;
+
+ KMyMoneyTransactionForm::TransactionForm* m_form;
+
+ bool m_needReload;
+ bool m_newAccountLoaded;
+ bool m_inEditMode;
+
+ QWidgetList m_tabOrderWidgets;
+
+signals:
+ void accountSelected(const MyMoneyObject&);
+ void transactionsSelected(const KMyMoneyRegister::SelectedTransactions&);
+ void newTransaction(void);
+ void startEdit(void);
+ void endEdit(void);
+ void cancelOrEndEdit(bool&);
+
+ /**
+ * This signal is emitted, when a new report has been generated. A
+ * 'generated' report is halfway between a default report and a custom
+ * report. It's created by the system in response to the user's
+ * request, and it's usually filtered to be a little more specific
+ * than the usual default reports.
+ *
+ * The proper behaviour when getting this signal is to switch to the
+ * reports view and display the report. But it should NOT be added
+ * to the data file, unless the user customizes it further. That's
+ * because the user can always come back to the ledger UI to generate
+ * the report again.
+ *
+ * @param report reference to MyMoneyReport object that contains the report
+ * details
+ */
+ void reportGenerated(const MyMoneyReport& report);
+
+ void openContextMenu(void);
+
+ /**
+ * This signal is sent out, when the current selected transaction should
+ * be marked different
+ */
+ void toggleReconciliationFlag(void);
+
+private:
+ bool canProcessTransactions(const KMyMoneyRegister::SelectedTransactions& list, QString& tooltip) const;
+};
+
+#endif
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/views/khomeview.cpp b/kmymoney2/views/khomeview.cpp
new file mode 100644
index 0000000..95b7323
--- /dev/null
+++ b/kmymoney2/views/khomeview.cpp
@@ -0,0 +1,1940 @@
+/***************************************************************************
+ khomeview.cpp - description
+ -------------------
+ begin : Tue Jan 22 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlayout.h>
+#include <qdatetime.h>
+#include <qapplication.h>
+#include <dom/dom_element.h>
+#include <dom/dom_doc.h>
+#include <dom/dom_text.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qtimer.h>
+#include <qbuffer.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kglobal.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+#include <khtmlview.h>
+#include <kconfig.h>
+#include <kstdaction.h>
+#include <kmainwindow.h>
+#include <kactioncollection.h>
+#include <kapplication.h>
+#include <kmessagebox.h>
+#include <kdebug.h>
+#include <kmdcodec.h>
+#include <kglobalsettings.h>
+#include <kiconloader.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include "khomeview.h"
+#include "../kmymoneyutils.h"
+#include "../kmymoneyglobalsettings.h"
+#include "../mymoney/mymoneyfile.h"
+#include "../mymoney/mymoneyforecast.h"
+#include "../kmymoney2.h"
+#include "../reports/kreportchartview.h"
+#include "../reports/pivottable.h"
+#include "../reports/pivotgrid.h"
+#include "../reports/reportaccount.h"
+#include "../kmymoneyglobalsettings.h"
+
+
+#define VIEW_LEDGER "ledger"
+#define VIEW_SCHEDULE "schedule"
+#define VIEW_WELCOME "welcome"
+#define VIEW_HOME "home"
+#define VIEW_REPORTS "reports"
+
+// in KOffice version < 1.5 KDCHART_PROPSET_NORMAL_DATA was a static const
+// but in 1.5 this has been changed into a #define'd value. So we have to
+// make sure, we use the right one.
+#ifndef KDCHART_PROPSET_NORMAL_DATA
+#define KMM_KDCHART_PROPSET_NORMAL_DATA KDChartParams::KDCHART_PROPSET_NORMAL_DATA
+#else
+#define KMM_KDCHART_PROPSET_NORMAL_DATA KDCHART_PROPSET_NORMAL_DATA
+#endif
+
+using namespace reports;
+
+class KHomeView::Private
+{
+ public:
+ Private() {}
+ void addNameIndex(QMap<QString, MyMoneyAccount> &idx, const MyMoneyAccount& account);
+};
+
+void KHomeView::Private::addNameIndex(QMap<QString, MyMoneyAccount> &idx, const MyMoneyAccount& account)
+{
+ QString key = account.name();
+
+ if(idx[key].id().isEmpty()) {
+ idx[key] = account;
+ //take care of accounts with duplicate names
+ } else if(idx[key].id() != account.id()) {
+ key = account.name() + "[%1]";
+ int dup = 2;
+ while(!idx[key.arg(dup)].id().isEmpty()
+ && idx[key.arg(dup)].id() != account.id())
+ ++dup;
+ idx[key.arg(dup)] = account;
+ }
+}
+
+KHomeView::KHomeView(QWidget *parent, const char *name ) :
+ KMyMoneyViewBase(parent, name, i18n("Home")),
+ d(new Private),
+ m_showAllSchedules(false),
+ m_needReload(true)
+{
+ m_part = new KHTMLPart(this, "htmlpart_km2");
+ addWidget(m_part->view());
+
+ m_filename = KMyMoneyUtils::findResource("appdata", QString("html/home%1.html"));
+
+// m_part->openURL(m_filename);
+ connect(m_part->browserExtension(), SIGNAL(openURLRequest(const KURL&, const KParts::URLArgs&)),
+ this, SLOT(slotOpenURL(const KURL&, const KParts::URLArgs&)));
+
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotLoadView()));
+}
+
+KHomeView::~KHomeView()
+{
+ // if user wants to remember the font size, store it here
+ if (KMyMoneyGlobalSettings::rememberFontSize())
+ {
+ KMyMoneyGlobalSettings::setFontSizePercentage(m_part->zoomFactor());
+ //kdDebug() << "Storing font size: " << m_part->zoomFactor() << endl;
+ KMyMoneyGlobalSettings::self()->writeConfig();
+ }
+ delete d;
+}
+
+void KHomeView::slotLoadView(void)
+{
+ m_needReload = true;
+ if(isVisible()) {
+ loadView();
+ m_needReload = false;
+ }
+}
+
+void KHomeView::show(void)
+{
+ if(m_needReload) {
+ loadView();
+ m_needReload = false;
+ }
+ QWidget::show();
+}
+
+void KHomeView::slotPrintView(void)
+{
+ if(m_part && m_part->view())
+ m_part->view()->print();
+}
+
+void KHomeView::loadView(void)
+{
+ m_part->setZoomFactor( KMyMoneyGlobalSettings::fontSizePercentage() );
+ //kdDebug() << "Setting font size: " << m_part->zoomFactor() << endl;
+
+ QValueList<MyMoneyAccount> list;
+ MyMoneyFile::instance()->accountList(list);
+ if(list.count() == 0)
+ {
+ m_part->openURL(m_filename);
+
+#if 0
+ // (ace) I am experimenting with replacing links in the
+ // html depending on the state of the engine. It's not
+ // working. That's why it's #if0'd out.
+
+ DOM::Element e = m_part->document().getElementById("test");
+ if ( e.isNull() )
+ {
+ qDebug("Element id=test not found");
+ }
+ else
+ {
+ qDebug("Element id=test found!");
+ QString tagname = e.tagName().string();
+ qDebug("%s",tagname.latin1());
+ qDebug("%s id=%s",e.tagName().string().latin1(),e.getAttribute("id").string().latin1());
+
+ // Find the character data node
+ DOM::Node n = e.firstChild();
+ while (!n.isNull())
+ {
+ qDebug("Child type %u",static_cast<unsigned>(n.nodeType()));
+ if ( n.nodeType() == DOM::Node::TEXT_NODE )
+ {
+ DOM::Text t = n;
+ t.setData("Success!!");
+ e.replaceChild(n,t);
+ m_part->document().setDesignMode(true);
+ m_part->document().importNode(e,true);
+ m_part->document().updateRendering();
+
+ qDebug("Data is now %s",t.data().string().latin1());
+ }
+ n = n.nextSibling();
+ }
+ }
+#endif
+ } else {
+ //clear the forecast flag so it will be reloaded
+ m_forecast.setForecastDone(false);
+
+ QString filename = KGlobal::dirs()->findResource("appdata", "html/kmymoney2.css");
+ QString header = QString("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">\n<html><head><link rel=\"stylesheet\" type=\"text/css\" href=\"%1\">\n").arg(filename);
+
+ header += KMyMoneyUtils::variableCSS();
+
+ header += "</head><body id=\"summaryview\">\n";
+
+ QString footer = "</body></html>\n";
+
+ m_part->begin();
+ m_part->write(header);
+
+ m_part->write(QString("<div id=\"summarytitle\">%1</div>").arg(i18n("Your Financial Summary")));
+
+ QStringList settings = KMyMoneyGlobalSettings::itemList();
+
+ QStringList::ConstIterator it;
+
+ for(it = settings.begin(); it != settings.end(); ++it) {
+ int option = (*it).toInt();
+ if(option > 0) {
+ switch(option) {
+ case 1: // payments
+ showPayments();
+ break;
+
+ case 2: // preferred accounts
+ showAccounts(Preferred, i18n("Preferred Accounts"));
+ break;
+
+ case 3: // payment accounts
+ // Check if preferred accounts are shown separately
+ if(settings.find("2") == settings.end()) {
+ showAccounts(static_cast<paymentTypeE> (Payment | Preferred),
+ i18n("Payment Accounts"));
+ } else {
+ showAccounts(Payment, i18n("Payment Accounts"));
+ }
+ break;
+ case 4: // favorite reports
+ showFavoriteReports();
+ break;
+ case 5: // forecast
+ showForecast();
+ break;
+ case 6: // net worth graph over all accounts
+ showNetWorthGraph();
+ break;
+ case 8: // assets and liabilities
+ showAssetsLiabilities();
+ break;
+ case 9: // budget
+ showBudget();
+ break;
+ case 10: // cash flow summary
+ showCashFlowSummary();
+ break;
+
+
+ }
+ m_part->write("<div class=\"gap\">&nbsp;</div>\n");
+ }
+ }
+
+ m_part->write("<div id=\"returnlink\">");
+ m_part->write(link(VIEW_WELCOME, QString()) + i18n("Show KMyMoney welcome page") + linkend());
+ m_part->write("</div>");
+ m_part->write("<div id=\"vieweffect\"></div>");
+ m_part->write(footer);
+ m_part->end();
+
+ }
+}
+
+void KHomeView::showNetWorthGraph(void)
+{
+#ifdef HAVE_KDCHART
+ m_part->write(QString("<div class=\"shadow\"><div class=\"displayblock\"><div class=\"summaryheader\">%1</div>\n<div class=\"gap\">&nbsp;</div>\n").arg(i18n("Networth Forecast")));
+
+ MyMoneyReport reportCfg = MyMoneyReport(
+ MyMoneyReport::eAssetLiability,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::userDefined, // overridden by the setDateFilter() call below
+ MyMoneyReport::eDetailTotal,
+ i18n("Networth Forecast"),
+ i18n("Generated Report"));
+
+ reportCfg.setChartByDefault(true);
+ reportCfg.setChartGridLines(false);
+ reportCfg.setChartDataLabels(false);
+ reportCfg.setChartType(MyMoneyReport::eChartLine);
+ reportCfg.setIncludingSchedules( false );
+ reportCfg.addAccountGroup(MyMoneyAccount::Asset);
+ reportCfg.addAccountGroup(MyMoneyAccount::Liability);
+ reportCfg.setColumnsAreDays( true );
+ reportCfg.setConvertCurrency( true );
+ reportCfg.setIncludingForecast( true );
+ reportCfg.setDateFilter(QDate::currentDate(),QDate::currentDate().addDays(+90));
+
+ reports::PivotTable table(reportCfg);
+
+ reports::KReportChartView* chartWidget = new reports::KReportChartView(0, 0);
+
+ table.drawChart(*chartWidget);
+
+ chartWidget->params()->setLineMarker(false);
+ chartWidget->params()->setLegendPosition(KDChartParams::NoLegend);
+ chartWidget->params()->setLineWidth(2);
+ chartWidget->params()->setDataColor(0, KGlobalSettings::textColor());
+
+ // draw future values in a different line style
+ KDChartPropertySet propSetFutureValue("future value", KMM_KDCHART_PROPSET_NORMAL_DATA);
+ propSetFutureValue.setLineStyle(KDChartPropertySet::OwnID, Qt::DotLine);
+ const int idPropFutureValue = chartWidget->params()->registerProperties(propSetFutureValue);
+
+ //KDChartPropertySet propSetLastValue("last value", idPropFutureValue);
+ //propSetLastValue.setExtraLinesAlign(KDChartPropertySet::OwnID, Qt::AlignLeft | Qt::AlignBottom);
+ //propSetLastValue.setExtraLinesWidth(KDChartPropertySet::OwnID, -4);
+ //propSetLastValue.setExtraLinesColor(KDChartPropertySet::OwnID, KMyMoneyGlobalSettings::listGridColor());
+ // propSetLastValue.setShowMarker(KDChartPropertySet::OwnID, true);
+ // propSetLastValue.setMarkerStyle(KDChartPropertySet::OwnID, KDChartParams::LineMarkerDiamond);
+
+ //const int idPropLastValue = chartWidget->params()->registerProperties(propSetLastValue);
+ for(int iCell = 0; iCell < 90; ++iCell) {
+ chartWidget->setProperty(0, iCell, idPropFutureValue);
+ }
+ //chartWidget->setProperty(0, 10, idPropLastValue);
+
+ // Adjust the size
+ if(width() < chartWidget->width()) {
+ int nh;
+ nh = (width()*chartWidget->height() ) / chartWidget->width();
+ chartWidget->resize(width()-80, nh);
+ }
+
+ QPixmap pm(chartWidget->width(), chartWidget->height());
+ pm.fill(KGlobalSettings::baseColor());
+ QPainter p(&pm);
+ chartWidget->paintTo(p);
+
+ QByteArray ba;
+ QBuffer buffer( ba );
+ buffer.open( IO_WriteOnly );
+ pm.save( &buffer, "PNG" ); // writes pixmap into ba in PNG format
+
+ m_part->write("<table width=\"100%\" cellspacing=\"0\" cellpadding=\"2\" class=\"summarytable\" >");
+ m_part->write("<tr>");
+ m_part->write(QString("<td><center><IMG SRC=\"data:image/png;base64,%1\" ALT=\"Networth\"></center></td>").arg(KCodecs::base64Encode(ba)));
+ m_part->write("</tr>");
+ m_part->write("</table></div></div>");
+
+ delete chartWidget;
+#endif
+}
+
+void KHomeView::showPayments(void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ QValueList<MyMoneySchedule> overdues;
+ QValueList<MyMoneySchedule> schedule;
+ int i = 0;
+
+ //if forecast has not been executed yet, do it.
+ if(!m_forecast.isForecastDone())
+ doForecast();
+
+ schedule = file->scheduleList("", MyMoneySchedule::TYPE_ANY,
+ MyMoneySchedule::OCCUR_ANY,
+ MyMoneySchedule::STYPE_ANY,
+ QDate::currentDate(),
+ QDate::currentDate().addMonths(1));
+ overdues = file->scheduleList("", MyMoneySchedule::TYPE_ANY,
+ MyMoneySchedule::OCCUR_ANY,
+ MyMoneySchedule::STYPE_ANY,
+ QDate(), QDate(), true);
+
+ if(schedule.empty() && overdues.empty())
+ return;
+
+ // HACK
+ // Remove the finished schedules
+
+ QValueList<MyMoneySchedule>::Iterator d_it;
+ for (d_it=schedule.begin(); d_it!=schedule.end();)
+ {
+ // FIXME cleanup old code
+ // if ((*d_it).isFinished() || (*d_it).nextPayment((*d_it).lastPayment()) == QDate())
+ if ((*d_it).isFinished())
+ {
+ d_it = schedule.remove(d_it);
+ continue;
+ }
+ ++d_it;
+ }
+
+ for (d_it=overdues.begin(); d_it!=overdues.end();)
+ {
+ // FIXME cleanup old code
+ // if ((*d_it).isFinished() || (*d_it).nextPayment((*d_it).lastPayment()) == QDate())
+ if ((*d_it).isFinished())
+ {
+ d_it = overdues.remove(d_it);
+ continue;
+ }
+ ++d_it;
+ }
+
+ m_part->write("<div class=\"shadow\"><div class=\"displayblock\">");
+ m_part->write(QString("<div class=\"summaryheader\">%1</div>\n").arg(i18n("Payments")));
+
+ if(overdues.count() > 0) {
+ m_part->write("<div class=\"gap\">&nbsp;</div>\n");
+
+ qBubbleSort(overdues);
+ QValueList<MyMoneySchedule>::Iterator it;
+ QValueList<MyMoneySchedule>::Iterator it_f;
+
+ m_part->write("<table width=\"100%\" cellspacing=\"0\" cellpadding=\"2\" class=\"summarytable\" >");
+ m_part->write(QString("<tr class=\"itemtitle warningtitle\" ><td colspan=\"5\">%1</td></tr>\n").arg(showColoredAmount(i18n("Overdue payments"), true)));
+ m_part->write("<tr class=\"item warning\">");
+ m_part->write("<td class=\"left\" width=\"10%\">");
+ m_part->write(i18n("Date"));
+ m_part->write("</td>");
+ m_part->write("<td class=\"left\" width=\"40%\">");
+ m_part->write(i18n("Schedule"));
+ m_part->write("</td>");
+ m_part->write("<td class=\"left\" width=\"20%\">");
+ m_part->write(i18n("Account"));
+ m_part->write("</td>");
+ m_part->write("<td class=\"right\" width=\"15%\">");
+ m_part->write(i18n("Amount"));
+ m_part->write("</td>");
+ m_part->write("<td class=\"right\" width=\"15%\">");
+ m_part->write(i18n("Balance after"));
+ m_part->write("</td>");
+ m_part->write("</tr>");
+
+ for(it = overdues.begin(); it != overdues.end(); ++it) {
+ // determine number of overdue payments
+ QDate nextDate = (*it).adjustedNextDueDate();
+ int cnt = 0;
+ while(nextDate.isValid() && nextDate < QDate::currentDate()) {
+ ++cnt;
+ nextDate = (*it).nextPayment(nextDate);
+ // for single occurence nextDate will not change, so we
+ // better get out of here.
+ if((*it).occurence() == MyMoneySchedule::OCCUR_ONCE)
+ break;
+ }
+
+ m_part->write(QString("<tr class=\"row-%1\">").arg(i++ & 0x01 ? "even" : "odd"));
+ showPaymentEntry(*it, cnt);
+ m_part->write("</tr>");
+ // make sure to not repeat overdues later again
+ for(it_f = schedule.begin(); it_f != schedule.end();) {
+ if((*it).id() == (*it_f).id()) {
+ it_f = schedule.remove(it_f);
+ continue;
+ }
+ ++it_f;
+ }
+ }
+ m_part->write("</table>");
+ }
+
+ if(schedule.count() > 0) {
+ qBubbleSort(schedule);
+
+ // Extract todays payments if any
+ QValueList<MyMoneySchedule> todays;
+ QValueList<MyMoneySchedule>::Iterator t_it;
+ for (t_it=schedule.begin(); t_it!=schedule.end();) {
+ if ((*t_it).nextDueDate() == QDate::currentDate()) {
+ todays.append(*t_it);
+ (*t_it).setNextDueDate((*t_it).nextPayment((*t_it).nextDueDate()));
+
+ //if nextDueDate is still currentDate then remove it from scheduled payments
+ if ((*t_it).nextDueDate() == QDate::currentDate()) {
+ t_it = schedule.remove(t_it);
+ continue;
+ }
+ }
+ ++t_it;
+ }
+
+ if (todays.count() > 0) {
+ m_part->write("<div class=\"gap\">&nbsp;</div>\n");
+ m_part->write("<table width=\"100%\" cellspacing=\"0\" cellpadding=\"2\" class=\"summarytable\" >");
+ m_part->write(QString("<tr class=\"itemtitle\"><td class=\"left\" colspan=\"5\">%1</td></tr>\n").arg(i18n("Today's payments")));
+ m_part->write("<tr class=\"item\">");
+ m_part->write("<td class=\"left\" width=\"10%\">");
+ m_part->write(i18n("Date"));
+ m_part->write("</td>");
+ m_part->write("<td class=\"left\" width=\"40%\">");
+ m_part->write(i18n("Schedule"));
+ m_part->write("</td>");
+ m_part->write("<td class=\"left\" width=\"20%\">");
+ m_part->write(i18n("Account"));
+ m_part->write("</td>");
+ m_part->write("<td class=\"right\" width=\"15%\">");
+ m_part->write(i18n("Amount"));
+ m_part->write("</td>");
+ m_part->write("<td class=\"right\" width=\"15%\">");
+ m_part->write(i18n("Balance after"));
+ m_part->write("</td>");
+ m_part->write("</tr>");
+
+ for(t_it = todays.begin(); t_it != todays.end(); ++t_it) {
+ m_part->write(QString("<tr class=\"row-%1\">").arg(i++ & 0x01 ? "even" : "odd"));
+ showPaymentEntry(*t_it);
+ m_part->write("</tr>");
+ }
+ m_part->write("</table>");
+ }
+
+ if (schedule.count() > 0)
+ {
+ m_part->write("<div class=\"gap\">&nbsp;</div>\n");
+
+ QValueList<MyMoneySchedule>::Iterator it;
+
+ m_part->write("<table width=\"100%\" cellspacing=\"0\" cellpadding=\"2\" class=\"summarytable\" >");
+ m_part->write(QString("<tr class=\"itemtitle\"><td class=\"left\" colspan=\"5\">%1</td></tr>\n").arg(i18n("Future payments")));
+ m_part->write("<tr class=\"item\">");
+ m_part->write("<td class=\"left\" width=\"10%\">");
+ m_part->write(i18n("Date"));
+ m_part->write("</td>");
+ m_part->write("<td class=\"left\" width=\"40%\">");
+ m_part->write(i18n("Schedule"));
+ m_part->write("</td>");
+ m_part->write("<td class=\"left\" width=\"20%\">");
+ m_part->write(i18n("Account"));
+ m_part->write("</td>");
+ m_part->write("<td class=\"right\" width=\"15%\">");
+ m_part->write(i18n("Amount"));
+ m_part->write("</td>");
+ m_part->write("<td class=\"right\" width=\"15%\">");
+ m_part->write(i18n("Balance after"));
+ m_part->write("</td>");
+ m_part->write("</tr>");
+
+ // show all or the first 6 entries
+ int cnt;
+ cnt = (m_showAllSchedules) ? -1 : 6;
+ bool needMoreLess = m_showAllSchedules;
+
+ QDate lastDate = QDate::currentDate().addMonths(1);
+ qBubbleSort(schedule);
+ do {
+ it = schedule.begin();
+ if(it == schedule.end())
+ break;
+
+ // if the next due date is invalid (schedule is finished)
+ // we remove it from the list
+ QDate nextDate = (*it).nextDueDate();
+ if(!nextDate.isValid()) {
+ schedule.remove(it);
+ continue;
+ }
+
+ if (nextDate > lastDate)
+ break;
+
+ if(cnt == 0) {
+ needMoreLess = true;
+ break;
+ }
+ if(cnt > 0)
+ --cnt;
+
+ m_part->write(QString("<tr class=\"row-%1\">").arg(i++ & 0x01 ? "even" : "odd"));
+ showPaymentEntry(*it);
+ m_part->write("</tr>");
+
+ // for single occurence we have reported everything so we
+ // better get out of here.
+ if((*it).occurence() == MyMoneySchedule::OCCUR_ONCE) {
+ schedule.remove(it);
+ continue;
+ }
+
+ (*it).setNextDueDate((*it).nextPayment((*it).nextDueDate()));
+ qBubbleSort(schedule);
+ }
+ while(1);
+
+ if (needMoreLess) {
+ m_part->write(QString("<tr class=\"row-%1\">").arg(i++ & 0x01 ? "even" : "odd"));
+ m_part->write("<td>");
+ if(m_showAllSchedules) {
+ m_part->write(link(VIEW_SCHEDULE, QString("?mode=%1").arg("reduced")) + i18n("Less...") + linkend());
+ } else {
+ m_part->write(link(VIEW_SCHEDULE, QString("?mode=%1").arg("full")) + i18n("More...") + linkend());
+ }
+ m_part->write("</td><td></td><td></td><td></td><td></td>");
+ m_part->write("</tr>");
+ }
+ m_part->write("</table>");
+ }
+ }
+ m_part->write("</div></div>");
+}
+
+void KHomeView::showPaymentEntry(const MyMoneySchedule& sched, int cnt)
+{
+ QString tmp;
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ try {
+ MyMoneyAccount acc = sched.account();
+ if(acc.id()) {
+ MyMoneyTransaction t = sched.transaction();
+ // only show the entry, if it is still active
+ // FIXME clean old code
+ // if(!sched.isFinished() && sched.nextPayment(sched.lastPayment()) != QDate()) {
+ if(!sched.isFinished()) {
+ MyMoneySplit sp = t.splitByAccount(acc.id(), true);
+
+ QString pathEnter, pathSkip;
+ KGlobal::iconLoader()->loadIcon("key_enter", KIcon::Small, KIcon::SizeSmall, KIcon::DefaultState, &pathEnter);
+ KGlobal::iconLoader()->loadIcon("player_fwd", KIcon::Small, KIcon::SizeSmall, KIcon::DefaultState, &pathSkip);
+
+ //show payment date
+ tmp = QString("<td>") +
+ KGlobal::locale()->formatDate(sched.adjustedNextDueDate(), true) +
+ "</td><td>";
+ if(pathEnter.length() > 0)
+ tmp += link(VIEW_SCHEDULE, QString("?id=%1&mode=enter").arg(sched.id()), i18n("Enter schedule")) + QString("<img src=\"file://%1\" border=\"0\"></a>").arg(pathEnter) + linkend();
+ if(pathSkip.length() > 0)
+ tmp += "&nbsp;" + link(VIEW_SCHEDULE, QString("?id=%1&mode=skip").arg(sched.id()), i18n("Skip schedule")) + QString("<img src=\"file://%1\" border=\"0\"></a>").arg(pathSkip) + linkend();
+
+ tmp += QString("&nbsp;");
+ tmp += link(VIEW_SCHEDULE, QString("?id=%1&mode=edit").arg(sched.id()), i18n("Edit schedule")) + sched.name() + linkend();
+
+ //show quantity of payments overdue if any
+ if(cnt > 1)
+ tmp += i18n(" (%1 payments)").arg(cnt);
+
+ //show account of the main split
+ tmp += "</td><td>";
+ tmp += QString(file->account(acc.id()).name());
+
+ //show amount of the schedule
+ tmp += "</td><td align=\"right\">";
+
+ const MyMoneySecurity& currency = MyMoneyFile::instance()->currency(acc.currencyId());
+ QString amount = (sp.value()*cnt).formatMoney(acc, currency);
+ amount.replace(" ","&nbsp;");
+ tmp += showColoredAmount(amount, (sp.value()*cnt).isNegative()) ;
+ tmp += "</td>";
+ //show balance after payments
+ tmp += "<td align=\"right\">";
+ MyMoneyMoney payment = MyMoneyMoney((sp.value()*cnt));
+ QDate paymentDate = QDate(sched.nextDueDate());
+ MyMoneyMoney balanceAfter = forecastPaymentBalance(acc, payment, paymentDate);
+ QString balance = balanceAfter.formatMoney(acc, currency);
+ balance.replace(" ","&nbsp;");
+ tmp += showColoredAmount(balance, balanceAfter.isNegative());
+ tmp += "</td>";
+
+ // qDebug("paymentEntry = '%s'", tmp.latin1());
+ m_part->write(tmp);
+ }
+ }
+ } catch(MyMoneyException* e) {
+ qDebug("Unable to display schedule entry: %s", e->what().data());
+ delete e;
+ }
+}
+
+void KHomeView::showAccounts(KHomeView::paymentTypeE type, const QString& header)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ QValueList<MyMoneyAccount> accounts;
+ QValueList<MyMoneyAccount>::Iterator it;
+ QValueList<MyMoneyAccount>::Iterator prevIt;
+ QMap<QString, MyMoneyAccount> nameIdx;
+
+ bool showClosedAccounts = kmymoney2->toggleAction("view_show_all_accounts")->isChecked();
+
+ // get list of all accounts
+ file->accountList(accounts);
+ for(it = accounts.begin(); it != accounts.end();) {
+ prevIt = it;
+ if(!(*it).isClosed() || showClosedAccounts) {
+ switch((*it).accountType()) {
+ case MyMoneyAccount::Expense:
+ case MyMoneyAccount::Income:
+ // never show a category account
+ // Note: This might be different in a future version when
+ // the homepage also shows category based information
+ it = accounts.remove(it);
+ break;
+
+ // Asset and Liability accounts are only shown if they
+ // have the preferred flag set
+ case MyMoneyAccount::Asset:
+ case MyMoneyAccount::Liability:
+ case MyMoneyAccount::Investment:
+ // if preferred accounts are requested, then keep in list
+ if((*it).value("PreferredAccount") != "Yes"
+ || (type & Preferred) == 0) {
+ it = accounts.remove(it);
+ }
+ break;
+
+ // Check payment accounts. If payment and preferred is selected,
+ // then always show them. If only payment is selected, then
+ // show only if preferred flag is not set.
+ case MyMoneyAccount::Checkings:
+ case MyMoneyAccount::Savings:
+ case MyMoneyAccount::Cash:
+ case MyMoneyAccount::CreditCard:
+ switch(type & (Payment | Preferred)) {
+ case Payment:
+ if((*it).value("PreferredAccount") == "Yes")
+ it = accounts.remove(it);
+ break;
+
+ case Preferred:
+ if((*it).value("PreferredAccount") != "Yes")
+ it = accounts.remove(it);
+ break;
+
+ case Payment | Preferred:
+ break;
+
+ default:
+ it = accounts.remove(it);
+ break;
+ }
+ break;
+
+ // filter all accounts that are not used on homepage views
+ default:
+ it = accounts.remove(it);
+ break;
+ }
+
+ } else if((*it).isClosed() || (*it).isInvest()) {
+ // don't show if closed or a stock account
+ it = accounts.remove(it);
+ }
+
+ // if we still point to the same account we keep it in the list and move on ;-)
+ if(prevIt == it) {
+ d->addNameIndex(nameIdx, *it);
+ ++it;
+ }
+ }
+
+ if(accounts.count() > 0) {
+ QString tmp;
+ int i = 0;
+ tmp = "<div class=\"shadow\"><div class=\"displayblock\"><div class=\"summaryheader\">" + header + "</div>\n<div class=\"gap\">&nbsp;</div>\n";
+ m_part->write(tmp);
+ m_part->write("<table width=\"100%\" cellspacing=\"0\" cellpadding=\"2\" class=\"summarytable\" >");
+ m_part->write("<tr class=\"item\"><td class=\"left\" width=\"35%\">");
+ m_part->write(i18n("Account"));
+ m_part->write("</td><td width=\"25%\" class=\"right\">");
+ m_part->write(i18n("Current Balance"));
+ m_part->write("</td>");
+ //only show limit info if user chose to do so
+ if(KMyMoneyGlobalSettings::showLimitInfo()) {
+ m_part->write("<td width=\"40%\" class=\"right\">");
+ m_part->write(i18n("To Minimum Balance / Maximum Credit"));
+ m_part->write("</td>");
+ }
+ m_part->write("</tr>");
+
+
+ QMap<QString, MyMoneyAccount>::const_iterator it_m;
+ for(it_m = nameIdx.begin(); it_m != nameIdx.end(); ++it_m) {
+ m_part->write(QString("<tr class=\"row-%1\">").arg(i++ & 0x01 ? "even" : "odd"));
+ showAccountEntry(*it_m);
+ m_part->write("</tr>");
+ }
+ m_part->write("</table></div></div>");
+ }
+}
+
+void KHomeView::showAccountEntry(const MyMoneyAccount& acc)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneySecurity currency = file->currency(acc.currencyId());
+ MyMoneyMoney value;
+
+ bool showLimit = KMyMoneyGlobalSettings::showLimitInfo();
+
+ if(acc.accountType() == MyMoneyAccount::Investment) {
+ //investment accounts show the balances of all its subaccounts
+ value = investmentBalance(acc);
+
+ //investment accounts have no minimum balance
+ showAccountEntry(acc, value, MyMoneyMoney(), showLimit);
+ } else {
+ //get balance for normal accounts
+ value = file->balance(acc.id(), QDate::currentDate());
+
+ //if credit card or checkings account, show maximum credit
+ if( acc.accountType() == MyMoneyAccount::CreditCard ||
+ acc.accountType() == MyMoneyAccount::Checkings ) {
+ QString maximumCredit = acc.value("maxCreditAbsolute");
+ MyMoneyMoney maxCredit = MyMoneyMoney(maximumCredit);
+ showAccountEntry(acc, value, value - maxCredit, showLimit);
+ } else {
+ //otherwise use minimum balance
+ QString minimumBalance = acc.value("minBalanceAbsolute");
+ MyMoneyMoney minBalance = MyMoneyMoney(minimumBalance);
+ showAccountEntry(acc, value, value - minBalance, showLimit);
+ }
+ }
+}
+
+void KHomeView::showAccountEntry(const MyMoneyAccount& acc, const MyMoneyMoney& value, const MyMoneyMoney& valueToMinBal, const bool showMinBal)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ QString tmp;
+ MyMoneySecurity currency = file->currency(acc.currencyId());
+ QString amount;
+ QString amountToMinBal;
+
+ //format amounts
+ amount = value.formatMoney(acc, currency);
+ amount.replace(" ","&nbsp;");
+ if(showMinBal) {
+ amountToMinBal = valueToMinBal.formatMoney(acc, currency);
+ amountToMinBal.replace(" ","&nbsp;");
+ }
+
+ tmp = QString("<td>") +
+ link(VIEW_LEDGER, QString("?id=%1").arg(acc.id())) + acc.name() + linkend() + "</td>";
+
+ //show account balance
+ tmp += QString("<td class=\"right\">%1</td>").arg(showColoredAmount(amount, value.isNegative()));
+
+ //show minimum balance column if requested
+ if(showMinBal) {
+ //if it is an investment, show minimum balance empty
+ if(acc.accountType() == MyMoneyAccount::Investment) {
+ tmp += QString("<td class=\"right\">&nbsp;</td>");
+ } else {
+ //show minimum balance entry
+ tmp += QString("<td class=\"right\">%1</td>").arg(showColoredAmount(amountToMinBal, valueToMinBal.isNegative()));
+ }
+ }
+ // qDebug("accountEntry = '%s'", tmp.latin1());
+ m_part->write(tmp);
+}
+
+MyMoneyMoney KHomeView::investmentBalance(const MyMoneyAccount& acc)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyMoney value;
+
+ value = file->balance(acc.id());
+ QValueList<QString>::const_iterator it_a;
+ for(it_a = acc.accountList().begin(); it_a != acc.accountList().end(); ++it_a) {
+ MyMoneyAccount stock = file->account(*it_a);
+ try {
+ MyMoneyMoney val;
+ MyMoneyMoney balance = file->balance(stock.id());
+ MyMoneySecurity security = file->security(stock.currencyId());
+ MyMoneyPrice price = file->price(stock.currencyId(), security.tradingCurrency());
+ val = (balance * price.rate(security.tradingCurrency())).convert(MyMoneyMoney::precToDenom(KMyMoneyGlobalSettings::pricePrecision()));
+ // adjust value of security to the currency of the account
+ MyMoneySecurity accountCurrency = file->currency(acc.currencyId());
+ val = val * file->price(security.tradingCurrency(), accountCurrency.id()).rate(accountCurrency.id());
+ val = val.convert(acc.fraction());
+ value += val;
+ } catch(MyMoneyException* e) {
+ qWarning("%s", (QString("cannot convert stock balance of %1 to base currency: %2").arg(stock.name(), e->what())).data());
+ delete e;
+ }
+ }
+ return value;
+}
+
+void KHomeView::showFavoriteReports(void)
+{
+ QValueList<MyMoneyReport> reports = MyMoneyFile::instance()->reportList();
+
+ if ( reports.count() > 0 )
+ {
+ bool firstTime = 1;
+ int row = 0;
+ QValueList<MyMoneyReport>::const_iterator it_report = reports.begin();
+ while( it_report != reports.end() )
+ {
+ if ( (*it_report).isFavorite() ) {
+ if(firstTime) {
+ m_part->write(QString("<div class=\"shadow\"><div class=\"displayblock\"><div class=\"summaryheader\">%1</div>\n<div class=\"gap\">&nbsp;</div>\n").arg(i18n("Favorite Reports")));
+ m_part->write("<table width=\"100%\" cellspacing=\"0\" cellpadding=\"2\" class=\"summarytable\" >");
+ m_part->write("<tr class=\"item\"><td class=\"left\" width=\"40%\">");
+ m_part->write(i18n("Report"));
+ m_part->write("</td><td width=\"60%\" class=\"left\">");
+ m_part->write(i18n("Comment"));
+ m_part->write("</td></tr>");
+ firstTime = false;
+ }
+
+ m_part->write(QString("<tr class=\"row-%1\"><td>%2%3%4</td><td align=\"left\">%5</td></tr>")
+ .arg(row++ & 0x01 ? "even" : "odd")
+ .arg(link(VIEW_REPORTS, QString("?id=%1").arg((*it_report).id())))
+ .arg((*it_report).name())
+ .arg(linkend())
+ .arg((*it_report).comment())
+ );
+ }
+
+ ++it_report;
+ }
+ if(!firstTime)
+ m_part->write("</table></div></div>");
+ }
+}
+
+void KHomeView::showForecast(void)
+{
+ QMap<QString, MyMoneyAccount> nameIdx;
+ MyMoneyFile* file = MyMoneyFile::instance();
+ QValueList<MyMoneyAccount> accList;
+
+ // if forecast has not been executed yet, do it.
+ if(!m_forecast.isForecastDone())
+ doForecast();
+
+ accList = m_forecast.accountList();
+
+ // add it to a map to have it ordered by name
+ QValueList<MyMoneyAccount>::const_iterator accList_t = accList.begin();
+ for ( ; accList_t != accList.end(); ++accList_t ) {
+ d->addNameIndex(nameIdx, *accList_t);
+ }
+
+ if(nameIdx.count() > 0) {
+ int i = 0;
+
+ int colspan = 1;
+ // get begin day
+ int beginDay = QDate::currentDate().daysTo(m_forecast.beginForecastDate());
+ // if begin day is today skip to next cycle
+ if(beginDay == 0)
+ beginDay = m_forecast.accountsCycle();
+
+ // Now output header
+ m_part->write(QString("<div class=\"shadow\"><div class=\"displayblock\"><div class=\"summaryheader\">%1</div>\n<div class=\"gap\">&nbsp;</div>\n").arg(i18n("%1 Day Forecast").arg(m_forecast.forecastDays())));
+ m_part->write("<table width=\"100%\" cellspacing=\"0\" cellpadding=\"2\" class=\"summarytable\" >");
+ m_part->write("<tr class=\"item\"><td class=\"left\" width=\"40%\">");
+ m_part->write(i18n("Account"));
+ m_part->write("</td>");
+ int colWidth = 55/ (m_forecast.forecastDays() / m_forecast.accountsCycle());
+ for(i = 0; (i*m_forecast.accountsCycle() + beginDay) <= m_forecast.forecastDays(); ++i) {
+ m_part->write(QString("<td width=\"%1%\" class=\"right\">").arg(colWidth));
+
+ m_part->write(i18n("%1 days").arg(i*m_forecast.accountsCycle() + beginDay));
+ m_part->write("</td>");
+ colspan++;
+ }
+ m_part->write("</tr>");
+
+ // Now output entries
+ i = 0;
+
+ QMap<QString, MyMoneyAccount>::ConstIterator it_account;
+ for(it_account = nameIdx.begin(); it_account != nameIdx.end(); ++it_account) {
+ //MyMoneyAccount acc = (*it_n);
+
+ m_part->write(QString("<tr class=\"row-%1\">").arg(i++ & 0x01 ? "even" : "odd"));
+ m_part->write(QString("<td width=\"40%\">") +
+ link(VIEW_LEDGER, QString("?id=%1").arg((*it_account).id())) + (*it_account).name() + linkend() + "</td>");
+
+ int dropZero = -1; //account dropped below zero
+ int dropMinimum = -1; //account dropped below minimum balance
+ QString minimumBalance = (*it_account).value("minimumBalance");
+ MyMoneyMoney minBalance = MyMoneyMoney(minimumBalance);
+ MyMoneySecurity currency;
+ MyMoneyMoney forecastBalance;
+
+ //change account to deep currency if account is an investment
+ if((*it_account).isInvest()) {
+ MyMoneySecurity underSecurity = file->security((*it_account).currencyId());
+ currency = file->security(underSecurity.tradingCurrency());
+ } else {
+ currency = file->security((*it_account).currencyId());
+ }
+
+ for (int f = beginDay; f <= m_forecast.forecastDays(); f += m_forecast.accountsCycle()) {
+ forecastBalance = m_forecast.forecastBalance(*it_account, QDate::currentDate().addDays(f));
+ QString amount;
+ amount = forecastBalance.formatMoney( *it_account, currency);
+ amount.replace(" ","&nbsp;");
+ m_part->write(QString("<td width=\"%1%\" align=\"right\">").arg(colWidth));
+ m_part->write(QString("%1</td>").arg(showColoredAmount(amount, forecastBalance.isNegative())));
+ }
+
+ m_part->write("</tr>");
+
+ //Check if the account is going to be below zero or below the minimal balance in the forecast period
+
+ //Check if the account is going to be below minimal balance
+ dropMinimum = m_forecast.daysToMinimumBalance(*it_account);
+
+ //Check if the account is going to be below zero in the future
+ dropZero = m_forecast.daysToZeroBalance(*it_account);
+
+
+ // spit out possible warnings
+ QString msg;
+
+ // if a minimum balance has been specified, an appropriate warning will
+ // only be shown, if the drop below 0 is on a different day or not present
+
+ if(dropMinimum != -1
+ && !minBalance.isZero()
+ && (dropMinimum < dropZero
+ || dropZero == -1)) {
+ switch(dropMinimum) {
+ case -1:
+ break;
+ case 0:
+ msg = i18n("The balance of %1 is below the minimum balance %2 today.").arg((*it_account).name()).arg(minBalance.formatMoney(*it_account, currency));
+ msg = showColoredAmount(msg, true);
+ break;
+ default:
+ msg = i18n("The balance of %1 will drop below the minimum balance %2 in %3 days.").arg((*it_account).name()).arg(minBalance.formatMoney(*it_account, currency)).arg(dropMinimum-1);
+ msg = showColoredAmount(msg, true);
+ break;
+ }
+
+ if(!msg.isEmpty()) {
+ m_part->write(QString("<tr class=\"warning\" style=\"font-weight: normal;\" ><td colspan=%2 align=\"center\" >%1</td></tr>").arg(msg).arg(colspan));
+ }
+ }
+ // a drop below zero is always shown
+ msg = QString();
+ switch(dropZero) {
+ case -1:
+ break;
+ case 0:
+ if((*it_account).accountGroup() == MyMoneyAccount::Asset) {
+ msg = i18n("The balance of %1 is below %2 today.").arg((*it_account).name()).arg(MyMoneyMoney().formatMoney(*it_account, currency));
+ msg = showColoredAmount(msg, true);
+ break;
+ }
+ if((*it_account).accountGroup() == MyMoneyAccount::Liability) {
+ msg = i18n("The balance of %1 is above %2 today.").arg((*it_account).name()).arg(MyMoneyMoney().formatMoney(*it_account, currency));
+ break;
+ }
+ break;
+ default:
+ if((*it_account).accountGroup() == MyMoneyAccount::Asset) {
+ msg = i18n("The balance of %1 will drop below %2 in %3 days.").arg((*it_account).name()).arg(MyMoneyMoney().formatMoney(*it_account, currency)).arg(dropZero);
+ msg = showColoredAmount(msg, true);
+ break;
+ }
+ if((*it_account).accountGroup() == MyMoneyAccount::Liability) {
+ msg = i18n("The balance of %1 will raise above %2 in %3 days.").arg((*it_account).name()).arg(MyMoneyMoney().formatMoney(*it_account, currency)).arg(dropZero);
+ break;
+ }
+ }
+ if(!msg.isEmpty()) {
+ m_part->write(QString("<tr class=\"warning\"><td colspan=%2 align=\"center\" ><b>%1</b></td></tr>").arg(msg).arg(colspan));
+ }
+ }
+ m_part->write("</table></div></div>");
+
+ }
+}
+
+const QString KHomeView::link(const QString& view, const QString& query, const QString& _title) const
+{
+ QString titlePart;
+ QString title(_title);
+ if(!title.isEmpty())
+ titlePart = QString(" title=\"%1\"").arg(title.replace(" ", "&nbsp;"));
+
+ return QString("<a href=\"/%1%2\"%3>").arg(view, query, titlePart);
+}
+
+const QString KHomeView::linkend(void) const
+{
+ return "</a>";
+}
+
+void KHomeView::slotOpenURL(const KURL &url, const KParts::URLArgs& /* args */)
+{
+ QString protocol = url.protocol();
+ QString view = url.fileName(false);
+ QString id = url.queryItem("id").data();
+ QString mode = url.queryItem("mode").data();
+
+ if ( protocol == "http" )
+ {
+ KApplication::kApplication()->invokeBrowser(url.prettyURL());
+ }
+ else if ( protocol == "mailto" )
+ {
+ KApplication::kApplication()->invokeMailer(url);
+ }
+ else
+ {
+ if(view == VIEW_LEDGER) {
+ emit ledgerSelected(id, QString());
+
+ } else if(view == VIEW_SCHEDULE) {
+ if(mode == "enter") {
+ emit scheduleSelected(id);
+ KMainWindow* mw = dynamic_cast<KMainWindow*>(qApp->mainWidget());
+ Q_CHECK_PTR(mw);
+ QTimer::singleShot(0, mw->actionCollection()->action("schedule_enter"), SLOT(activate()));
+
+ } else if(mode == "edit") {
+ emit scheduleSelected(id);
+ KMainWindow* mw = dynamic_cast<KMainWindow*>(qApp->mainWidget());
+ Q_CHECK_PTR(mw);
+ QTimer::singleShot(0, mw->actionCollection()->action("schedule_edit"), SLOT(activate()));
+
+ } else if(mode == "skip") {
+ emit scheduleSelected(id);
+ KMainWindow* mw = dynamic_cast<KMainWindow*>(qApp->mainWidget());
+ Q_CHECK_PTR(mw);
+ QTimer::singleShot(0, mw->actionCollection()->action("schedule_skip"), SLOT(activate()));
+
+ } else if(mode == "full") {
+ m_showAllSchedules = true;
+ loadView();
+
+ } else if(mode == "reduced") {
+ m_showAllSchedules = false;
+ loadView();
+ }
+
+ } else if(view == VIEW_REPORTS) {
+ emit reportSelected(id);
+
+ } else if(view == VIEW_WELCOME) {
+ KMainWindow* mw = dynamic_cast<KMainWindow*>(qApp->mainWidget());
+ Q_CHECK_PTR(mw);
+ if ( mode == "whatsnew" )
+ {
+ QString fname = KMyMoneyUtils::findResource("appdata",QString("html/whats_new%1.html"));
+ if(!fname.isEmpty())
+ m_part->openURL(fname);
+ }
+ else
+ m_part->openURL(m_filename);
+
+ } else if(view == "action") {
+ KMainWindow* mw = dynamic_cast<KMainWindow*>(qApp->mainWidget());
+ Q_CHECK_PTR(mw);
+ QTimer::singleShot(0, mw->actionCollection()->action( id ), SLOT(activate()));
+
+ } else if(view == VIEW_HOME) {
+ QValueList<MyMoneyAccount> list;
+ MyMoneyFile::instance()->accountList(list);
+ if(list.count() == 0) {
+ KMessageBox::information(this, i18n("Before KMyMoney can give you detailed information about your financial status, you need to create at least one account. Until then, KMyMoney shows the welcome page instead."));
+ }
+ loadView();
+
+ } else {
+ qDebug("Unknown view '%s' in KHomeView::slotOpenURL()", view.latin1());
+ }
+ }
+}
+
+void KHomeView::showAssetsLiabilities(void)
+{
+ QValueList<MyMoneyAccount> accounts;
+ QValueList<MyMoneyAccount>::Iterator it;
+ QMap<QString, MyMoneyAccount> nameAssetsIdx;
+ QMap<QString, MyMoneyAccount> nameLiabilitiesIdx;
+ MyMoneyMoney netAssets;
+ MyMoneyMoney netLiabilities;
+ QString fontStart, fontEnd;
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+ int prec = MyMoneyMoney::denomToPrec(file->baseCurrency().smallestAccountFraction());
+ int i = 0;
+
+
+ // get list of all accounts
+ file->accountList(accounts);
+ for(it = accounts.begin(); it != accounts.end();) {
+ if(!(*it).isClosed()) {
+ switch((*it).accountType()) {
+ // group all assets into one list but make sure that investment accounts always show up
+ case MyMoneyAccount::Investment:
+ d->addNameIndex(nameAssetsIdx, *it);
+ break;
+
+ case MyMoneyAccount::Checkings:
+ case MyMoneyAccount::Savings:
+ case MyMoneyAccount::Cash:
+ case MyMoneyAccount::Asset:
+ case MyMoneyAccount::AssetLoan:
+ // list account if it's the last in the hierarchy or has transactions in it
+ if((*it).accountList().isEmpty() || (file->transactionCount((*it).id()) > 0)) {
+ d->addNameIndex(nameAssetsIdx, *it);
+ }
+ break;
+
+ // group the liabilities into the other
+ case MyMoneyAccount::CreditCard:
+ case MyMoneyAccount::Liability:
+ case MyMoneyAccount::Loan:
+ // list account if it's the last in the hierarchy or has transactions in it
+ if((*it).accountList().isEmpty() || (file->transactionCount((*it).id()) > 0)) {
+ d->addNameIndex(nameLiabilitiesIdx, *it);
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+ ++it;
+ }
+
+ //only do it if we have assets or liabilities account
+ if(nameAssetsIdx.count() > 0 || nameLiabilitiesIdx.count() > 0) {
+ //print header
+ m_part->write("<div class=\"shadow\"><div class=\"displayblock\"><div class=\"summaryheader\">" + i18n("Assets and Liabilities Summary") + "</div>\n<div class=\"gap\">&nbsp;</div>\n");
+ m_part->write("<table width=\"100%\" cellspacing=\"0\" cellpadding=\"2\" class=\"summarytable\" >");
+ //column titles
+ m_part->write("<tr class=\"item\"><td class=\"left\" width=\"30%\">");
+ m_part->write(i18n("Asset Accounts"));
+ m_part->write("</td>");
+ m_part->write("<td width=\"15%\" class=\"right\">");
+ m_part->write(i18n("Current Balance"));
+ m_part->write("</td>");
+ //intermediate row to separate both columns
+ m_part->write("<td width=\"10%\" class=\"setcolor\"></td>");
+ m_part->write("<td class=\"left\" width=\"30%\">");
+ m_part->write(i18n("Liability Accounts"));
+ m_part->write("</td>");
+ m_part->write("<td width=\"15%\" class=\"right\">");
+ m_part->write(i18n("Current Balance"));
+ m_part->write("</td></tr>");
+
+ //get asset and liability accounts
+ QMap<QString, MyMoneyAccount>::const_iterator asset_it = nameAssetsIdx.begin();
+ QMap<QString,MyMoneyAccount>::const_iterator liabilities_it = nameLiabilitiesIdx.begin();
+ for(; asset_it != nameAssetsIdx.end() || liabilities_it != nameLiabilitiesIdx.end();) {
+ m_part->write(QString("<tr class=\"row-%1\">").arg(i++ & 0x01 ? "even" : "odd"));
+ //write an asset account if we still have any
+ if(asset_it != nameAssetsIdx.end()) {
+ MyMoneyMoney value;
+ //investment accounts consolidate the balance of its subaccounts
+ if( (*asset_it).accountType() == MyMoneyAccount::Investment) {
+ value = investmentBalance(*asset_it);
+ } else {
+ value = MyMoneyFile::instance()->balance((*asset_it).id(), QDate::currentDate());
+ }
+ //calculate balance for foreign currency accounts
+ if((*asset_it).currencyId() != file->baseCurrency().id()) {
+ ReportAccount repAcc = ReportAccount((*asset_it).id());
+ MyMoneyMoney curPrice = repAcc.baseCurrencyPrice(QDate::currentDate());
+ MyMoneyMoney baseValue = value * curPrice;
+ baseValue = baseValue.convert(10000);
+ netAssets += baseValue;
+ } else {
+ netAssets += value;
+ }
+ //show the account without minimum balance
+ showAccountEntry(*asset_it, value, MyMoneyMoney(), false);
+ ++asset_it;
+ } else {
+ //write a white space if we don't
+ m_part->write("<td></td><td></td>");
+ }
+
+ //leave the intermediate column empty
+ m_part->write("<td class=\"setcolor\"></td>");
+
+ //write a liability account
+ if(liabilities_it != nameLiabilitiesIdx.end()) {
+ MyMoneyMoney value;
+ value = MyMoneyFile::instance()->balance((*liabilities_it).id(), QDate::currentDate());
+ //calculate balance if foreign currency
+ if((*liabilities_it).currencyId() != file->baseCurrency().id()) {
+ ReportAccount repAcc = ReportAccount((*liabilities_it).id());
+ MyMoneyMoney curPrice = repAcc.baseCurrencyPrice(QDate::currentDate());
+ MyMoneyMoney baseValue = value * curPrice;
+ baseValue = baseValue.convert(10000);
+ netLiabilities += baseValue;
+ } else {
+ netLiabilities += value;
+ }
+ //show the account without minimum balance
+ showAccountEntry(*liabilities_it, value, MyMoneyMoney(), false);
+ ++liabilities_it;
+ } else {
+ //leave the space empty if we run out of liabilities
+ m_part->write("<td></td><td></td>");
+ }
+ m_part->write("</tr>");
+ }
+ //calculate net worth
+ MyMoneyMoney netWorth = netAssets+netLiabilities;
+
+ //format assets, liabilities and net worth
+ QString amountAssets = netAssets.formatMoney(file->baseCurrency().tradingSymbol(), prec);
+ QString amountLiabilities = netLiabilities.formatMoney(file->baseCurrency().tradingSymbol(), prec);
+ QString amountNetWorth = netWorth.formatMoney(file->baseCurrency().tradingSymbol(), prec);
+ amountAssets.replace(" ","&nbsp;");
+ amountLiabilities.replace(" ","&nbsp;");
+ amountNetWorth.replace(" ","&nbsp;");
+
+ m_part->write(QString("<tr class=\"row-%1\" style=\"font-weight:bold;\">").arg(i++ & 0x01 ? "even" : "odd"));
+
+ //print total for assets
+ m_part->write(QString("<td class=\"left\">%1</td><td align=\"right\">%2</td>").arg(i18n("Total Assets")).arg(showColoredAmount(amountAssets, netAssets.isNegative())));
+
+ //leave the intermediate column empty
+ m_part->write("<td class=\"setcolor\"></td>");
+
+ //print total liabilities
+ m_part->write(QString("<td class=\"left\">%1</td><td align=\"right\">%2</td>").arg(i18n("Total Liabilities")).arg(showColoredAmount(amountLiabilities, netLiabilities.isNegative())));
+ m_part->write("</tr>");
+
+ //print net worth
+ m_part->write(QString("<tr class=\"row-%1\" style=\"font-weight:bold;\">").arg(i++ & 0x01 ? "even" : "odd"));
+
+ m_part->write("<td></td><td></td><td class=\"setcolor\"></td>");
+ m_part->write(QString("<td class=\"left\">%1</td><td align=\"right\">%2</td>").arg(i18n("Net Worth")).arg(showColoredAmount(amountNetWorth, netWorth.isNegative() )));
+
+ m_part->write("</tr>");
+ m_part->write("</table>");
+ m_part->write("</div></div>");
+ }
+}
+
+void KHomeView::showBudget(void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ if ( file->countBudgets() ) {
+ int prec = MyMoneyMoney::denomToPrec(file->baseCurrency().smallestAccountFraction());
+ int i = 0;
+
+ //config report just like "Monthly Budgeted vs Actual
+ MyMoneyReport reportCfg = MyMoneyReport(
+ MyMoneyReport::eBudgetActual,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::currentMonth,
+ MyMoneyReport::eDetailAll,
+ i18n("Monthly Budgeted vs. Actual"),
+ i18n("Generated Report"));
+
+ reportCfg.setBudget("Any",true);
+
+ reports::PivotTable table(reportCfg);
+
+ PivotGrid grid = table.grid();
+
+ //div header
+ m_part->write("<div class=\"shadow\"><div class=\"displayblock\"><div class=\"summaryheader\">" + i18n("Budget") + "</div>\n<div class=\"gap\">&nbsp;</div>\n");
+
+ //display budget summary
+ m_part->write("<table width=\"75%\" cellspacing=\"0\" cellpadding=\"2\" class=\"summarytable\" >");
+ m_part->write("<tr class=\"itemtitle\">");
+ m_part->write("<td class=\"left\" colspan=\"3\">");
+ m_part->write(i18n("Current Month Summary"));
+ m_part->write("</td></tr>");
+ m_part->write("<tr class=\"item\">");
+ m_part->write("<td class=\"right\" width=\"33%\">");
+ m_part->write(i18n("Budgeted"));
+ m_part->write("</td>");
+ m_part->write("<td class=\"right\" width=\"33%\">");
+ m_part->write(i18n("Actual"));
+ m_part->write("</td>");
+ m_part->write("<td class=\"right\" width=\"33%\">");
+ m_part->write(i18n("Difference"));
+ m_part->write("</td></tr>");
+
+ m_part->write(QString("<tr class=\"row-odd\">"));
+
+ MyMoneyMoney totalBudgetValue = grid.m_total[eBudget].m_total;
+ MyMoneyMoney totalActualValue = grid.m_total[eActual].m_total;
+ MyMoneyMoney totalBudgetDiffValue = grid.m_total[eBudgetDiff].m_total;
+
+ QString totalBudgetAmount = totalBudgetValue.formatMoney(file->baseCurrency().tradingSymbol(), prec);
+ QString totalActualAmount = totalActualValue.formatMoney(file->baseCurrency().tradingSymbol(), prec);
+ QString totalBudgetDiffAmount = totalBudgetDiffValue.formatMoney(file->baseCurrency().tradingSymbol(), prec);
+
+ m_part->write(QString("<td align=\"right\">%1</td>").arg(showColoredAmount(totalBudgetAmount, totalBudgetValue.isNegative())));
+ m_part->write(QString("<td align=\"right\">%1</td>").arg(showColoredAmount(totalActualAmount, totalActualValue.isNegative())));
+ m_part->write(QString("<td align=\"right\">%1</td>").arg(showColoredAmount(totalBudgetDiffAmount, totalBudgetDiffValue.isNegative())));
+ m_part->write("</tr>");
+ m_part->write("</table>");
+
+ //budget overrun
+ m_part->write("<div class=\"gap\">&nbsp;</div>\n");
+ m_part->write("<table width=\"75%\" cellspacing=\"0\" cellpadding=\"2\" class=\"summarytable\" >");
+ m_part->write("<tr class=\"itemtitle\">");
+ m_part->write("<td class=\"left\" colspan=\"4\">");
+ m_part->write(i18n("Budget Overruns"));
+ m_part->write("</td></tr>");
+ m_part->write("<tr class=\"item\">");
+ m_part->write("<td class=\"left\" width=\"30%\">");
+ m_part->write(i18n("Account"));
+ m_part->write("</td>");
+ m_part->write("<td class=\"right\" width=\"20%\">");
+ m_part->write(i18n("Budgeted"));
+ m_part->write("</td>");
+ m_part->write("<td class=\"right\" width=\"20%\">");
+ m_part->write(i18n("Actual"));
+ m_part->write("</td>");
+ m_part->write("<td class=\"right\" width=\"20%\">");
+ m_part->write(i18n("Difference"));
+ m_part->write("</td></tr>");
+
+
+ PivotGrid::iterator it_outergroup = grid.begin();
+ while ( it_outergroup != grid.end() )
+ {
+ i = 0;
+ PivotOuterGroup::iterator it_innergroup = (*it_outergroup).begin();
+ while ( it_innergroup != (*it_outergroup).end() )
+ {
+ PivotInnerGroup::iterator it_row = (*it_innergroup).begin();
+ while ( it_row != (*it_innergroup).end() )
+ {
+ //column number is 1 because the report includes only current month
+ if(it_row.data()[eBudgetDiff][1].isNegative()) {
+ //get report account to get the name later
+ ReportAccount rowname = it_row.key();
+
+ //write the outergroup if it is the first row of outergroup being shown
+ if(i == 0) {
+ m_part->write("<tr style=\"font-weight:bold;\">");
+ m_part->write(QString("<td class=\"left\" colspan=\"4\">%1</td>").arg(KMyMoneyUtils::accountTypeToString( rowname.accountType())));
+ m_part->write("</tr>");
+ }
+ m_part->write(QString("<tr class=\"row-%1\">").arg(i++ & 0x01 ? "even" : "odd"));
+
+ //get values from grid
+ MyMoneyMoney actualValue = it_row.data()[eActual][1];
+ MyMoneyMoney budgetValue = it_row.data()[eBudget][1];
+ MyMoneyMoney budgetDiffValue = it_row.data()[eBudgetDiff][1];
+
+ //format amounts
+ QString actualAmount = actualValue.formatMoney(file->baseCurrency().tradingSymbol(), prec);
+ QString budgetAmount = budgetValue.formatMoney(file->baseCurrency().tradingSymbol(), prec);
+ QString budgetDiffAmount = budgetDiffValue.formatMoney(file->baseCurrency().tradingSymbol(), prec);
+
+ //account name
+ m_part->write(QString("<td>") + link(VIEW_LEDGER, QString("?id=%1").arg(rowname.id())) + rowname.name() + linkend() + "</td>");
+
+ //show amounts
+ m_part->write(QString("<td align=\"right\">%1</td>").arg(showColoredAmount(budgetAmount, budgetValue.isNegative())));
+ m_part->write(QString("<td align=\"right\">%1</td>").arg(showColoredAmount(actualAmount, actualValue.isNegative())));
+ m_part->write(QString("<td align=\"right\">%1</td>").arg(showColoredAmount(budgetDiffAmount, budgetDiffValue.isNegative())));
+ m_part->write("</tr>");
+ }
+ ++it_row;
+ }
+ ++it_innergroup;
+ }
+ ++it_outergroup;
+ }
+
+ //if no negative differences are found, then inform that
+ if(i == 0) {
+ m_part->write(QString("<tr class=\"row-%1\" style=\"font-weight:bold;\">").arg(i++ & 0x01 ? "even" : "odd"));
+ m_part->write(QString("<td class=\"center\" colspan=\"4\">%1</td>").arg(i18n("No Budget Categories have been overrun")));
+ m_part->write("</tr>");
+ }
+ m_part->write("</table></div></div>");
+ }
+}
+
+QString KHomeView::showColoredAmount(const QString& amount, bool isNegative)
+{
+ if(isNegative) {
+ //if negative, get the settings for negative numbers
+ return QString("<font color=\"%1\">%2</font>").arg(KMyMoneyGlobalSettings::listNegativeValueColor().name(), amount);
+ }
+
+ //if positive, return the same string
+ return amount;
+}
+
+void KHomeView::doForecast(void)
+{
+ //clear m_accountList because forecast is about to changed
+ m_accountList.clear();
+
+ //reinitialize the object
+ m_forecast = MyMoneyForecast();
+
+ //If forecastDays lower than accountsCycle, adjust to the first cycle
+ if(m_forecast.accountsCycle() > m_forecast.forecastDays())
+ m_forecast.setForecastDays(m_forecast.accountsCycle());
+
+ //Get all accounts of the right type to calculate forecast
+ m_forecast.doForecast();
+}
+
+MyMoneyMoney KHomeView::forecastPaymentBalance(const MyMoneyAccount& acc, const MyMoneyMoney& payment, QDate& paymentDate)
+{
+ //if paymentDate before or equal to currentDate set it to current date plus 1
+ //so we get to accumulate forecast balance correctly
+ if(paymentDate <= QDate::currentDate())
+ paymentDate = QDate::currentDate().addDays(1);
+
+ //check if the account is already there
+ if(m_accountList.find(acc.id()) == m_accountList.end()
+ || m_accountList[acc.id()].find(paymentDate) == m_accountList[acc.id()].end())
+ {
+ if(paymentDate == QDate::currentDate()) {
+ m_accountList[acc.id()][paymentDate] = m_forecast.forecastBalance(acc, paymentDate);
+ } else {
+ m_accountList[acc.id()][paymentDate] = m_forecast.forecastBalance(acc, paymentDate.addDays(-1));
+ }
+ }
+ m_accountList[acc.id()][paymentDate] = m_accountList[acc.id()][paymentDate] + payment;
+ return m_accountList[acc.id()][paymentDate];
+}
+
+void KHomeView::showCashFlowSummary()
+{
+ MyMoneyTransactionFilter filter;
+ MyMoneyMoney incomeValue;
+ MyMoneyMoney expenseValue;
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+ int prec = MyMoneyMoney::denomToPrec(file->baseCurrency().smallestAccountFraction());
+
+ //set start and end of month dates
+ QDate startOfMonth = QDate(QDate::currentDate().year(), QDate::currentDate().month(), 1);
+ QDate endOfMonth = QDate(QDate::currentDate().year(), QDate::currentDate().month(), QDate::currentDate().daysInMonth());
+
+ //Add total income and expenses for this month
+ //get transactions for current month
+ filter.setDateFilter(startOfMonth, endOfMonth);
+ filter.setReportAllSplits(false);
+
+ QValueList<MyMoneyTransaction> transactions = file->transactionList(filter);
+ //if no transaction then skip and print total in zero
+ if(transactions.size() > 0) {
+ QValueList<MyMoneyTransaction>::const_iterator it_transaction;
+
+ //get all transactions for this month
+ for(it_transaction = transactions.begin(); it_transaction != transactions.end(); ++it_transaction ) {
+
+ //get the splits for each transaction
+ const QValueList<MyMoneySplit>& splits = (*it_transaction).splits();
+ QValueList<MyMoneySplit>::const_iterator it_split;
+ for(it_split = splits.begin(); it_split != splits.end(); ++it_split) {
+ if(!(*it_split).shares().isZero()) {
+ ReportAccount repSplitAcc = ReportAccount((*it_split).accountId());
+
+ //only add if it is an income or expense
+ if(repSplitAcc.isIncomeExpense()) {
+ MyMoneyMoney value;
+
+ //convert to base currency if necessary
+ if(repSplitAcc.currencyId() != file->baseCurrency().id()) {
+ MyMoneyMoney curPrice = repSplitAcc.baseCurrencyPrice((*it_transaction).postDate());
+ value = ((*it_split).shares() * MyMoneyMoney(-1, 1)) * curPrice;
+ value = value.convert(10000);
+ } else {
+ value = ((*it_split).shares() * MyMoneyMoney(-1, 1));
+ }
+
+ //store depending on account type
+ if(repSplitAcc.accountType() == MyMoneyAccount::Income) {
+ incomeValue += value;
+ } else {
+ expenseValue += value;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ //format income and expenses
+ QString amountIncome = incomeValue.formatMoney(file->baseCurrency().tradingSymbol(), prec);
+ QString amountExpense = expenseValue.formatMoney(file->baseCurrency().tradingSymbol(), prec);
+ amountIncome.replace(" ","&nbsp;");
+ amountExpense.replace(" ","&nbsp;");
+
+ //calculate schedules
+
+ //Add all schedules for this month
+ MyMoneyMoney scheduledIncome;
+ MyMoneyMoney scheduledExpense;
+ MyMoneyMoney scheduledLiquidTransfer;
+ MyMoneyMoney scheduledOtherTransfer;
+
+ //get overdues and schedules until the end of this month
+ QValueList<MyMoneySchedule> schedule = file->scheduleList("", MyMoneySchedule::TYPE_ANY,
+ MyMoneySchedule::OCCUR_ANY,
+ MyMoneySchedule::STYPE_ANY,
+ QDate(),
+ endOfMonth);
+
+ //Remove the finished schedules
+ QValueList<MyMoneySchedule>::Iterator finished_it;
+ for (finished_it=schedule.begin(); finished_it!=schedule.end();) {
+ if ((*finished_it).isFinished()) {
+ finished_it = schedule.remove(finished_it);
+ continue;
+ }
+ ++finished_it;
+ }
+
+ //add income and expenses
+ QValueList<MyMoneySchedule>::Iterator sched_it;
+ for (sched_it=schedule.begin(); sched_it!=schedule.end();) {
+ QDate nextDate = (*sched_it).nextDueDate();
+ int cnt = 0;
+
+ while(nextDate.isValid() && nextDate <= endOfMonth) {
+ ++cnt;
+ nextDate = (*sched_it).nextPayment(nextDate);
+ // for single occurence nextDate will not change, so we
+ // better get out of here.
+ if((*sched_it).occurence() == MyMoneySchedule::OCCUR_ONCE)
+ break;
+ }
+
+ MyMoneyAccount acc = (*sched_it).account();
+ if(acc.id()) {
+ MyMoneyTransaction transaction = (*sched_it).transaction();
+ // only show the entry, if it is still active
+
+ MyMoneySplit sp = transaction.splitByAccount(acc.id(), true);
+
+ // take care of the autoCalc stuff
+ if((*sched_it).type() == MyMoneySchedule::TYPE_LOANPAYMENT) {
+ QDate nextDate = (*sched_it).nextPayment((*sched_it).lastPayment());
+
+ //make sure we have all 'starting balances' so that the autocalc works
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ QMap<QString, MyMoneyMoney> balanceMap;
+
+ for(it_s = transaction.splits().begin(); it_s != transaction.splits().end(); ++it_s ) {
+ MyMoneyAccount acc = file->account((*it_s).accountId());
+ // collect all overdues on the first day
+ QDate schedDate = nextDate;
+ if(QDate::currentDate() >= nextDate)
+ schedDate = QDate::currentDate().addDays(1);
+
+ balanceMap[acc.id()] += file->balance(acc.id());
+ }
+ KMyMoneyUtils::calculateAutoLoan(*sched_it, transaction, balanceMap);
+ }
+
+ //go through the splits and assign to liquid or other transfers
+ const QValueList<MyMoneySplit> splits = transaction.splits();
+ QValueList<MyMoneySplit>::const_iterator split_it;
+ for (split_it = splits.begin(); split_it != splits.end(); ++split_it) {
+ if( (*split_it).accountId() != acc.id() ) {
+ ReportAccount repSplitAcc = ReportAccount((*split_it).accountId());
+
+ //get the shares and multiply by the quantity of occurences in the period
+ MyMoneyMoney value = (*split_it).shares() * cnt;
+
+ //convert to foreign currency if needed
+ if(repSplitAcc.currencyId() != file->baseCurrency().id()) {
+ MyMoneyMoney curPrice = repSplitAcc.baseCurrencyPrice(QDate::currentDate());
+ value = value * curPrice;
+ value = value.convert(10000);
+ }
+
+ if(( repSplitAcc.isLiquidLiability()
+ || repSplitAcc.isLiquidAsset() )
+ && acc.accountGroup() != repSplitAcc.accountGroup()) {
+ scheduledLiquidTransfer += value;
+ } else if(repSplitAcc.isAssetLiability()
+ && !repSplitAcc.isLiquidLiability()
+ && !repSplitAcc.isLiquidAsset() ) {
+ scheduledOtherTransfer += value;
+ } else if(repSplitAcc.isIncomeExpense()) {
+ //income and expenses are stored as negative values
+ if(repSplitAcc.accountType() == MyMoneyAccount::Income)
+ scheduledIncome -= value;
+ if(repSplitAcc.accountType() == MyMoneyAccount::Expense)
+ scheduledExpense -= value;
+ }
+ }
+ }
+ }
+ ++sched_it;
+ }
+
+ //format the currency strings
+ QString amountScheduledIncome = scheduledIncome.formatMoney(file->baseCurrency().tradingSymbol(), prec);
+ QString amountScheduledExpense = scheduledExpense.formatMoney(file->baseCurrency().tradingSymbol(), prec);
+ QString amountScheduledLiquidTransfer = scheduledLiquidTransfer.formatMoney(file->baseCurrency().tradingSymbol(), prec);
+ QString amountScheduledOtherTransfer = scheduledOtherTransfer.formatMoney(file->baseCurrency().tradingSymbol(), prec);
+
+ amountScheduledIncome.replace(" ","&nbsp;");
+ amountScheduledExpense.replace(" ","&nbsp;");
+ amountScheduledLiquidTransfer.replace(" ","&nbsp;");
+ amountScheduledOtherTransfer.replace(" ","&nbsp;");
+
+ //get liquid assets and liabilities
+ QValueList<MyMoneyAccount> accounts;
+ QValueList<MyMoneyAccount>::const_iterator account_it;
+ MyMoneyMoney liquidAssets;
+ MyMoneyMoney liquidLiabilities;
+
+ // get list of all accounts
+ file->accountList(accounts);
+ for(account_it = accounts.begin(); account_it != accounts.end();) {
+ if(!(*account_it).isClosed()) {
+ switch((*account_it).accountType()) {
+ //group all assets into one list
+ case MyMoneyAccount::Checkings:
+ case MyMoneyAccount::Savings:
+ case MyMoneyAccount::Cash:
+ {
+ MyMoneyMoney value = MyMoneyFile::instance()->balance((*account_it).id(), QDate::currentDate());
+ //calculate balance for foreign currency accounts
+ if((*account_it).currencyId() != file->baseCurrency().id()) {
+ ReportAccount repAcc = ReportAccount((*account_it).id());
+ MyMoneyMoney curPrice = repAcc.baseCurrencyPrice(QDate::currentDate());
+ MyMoneyMoney baseValue = value * curPrice;
+ liquidAssets += baseValue;
+ liquidAssets = liquidAssets.convert(10000);
+ } else {
+ liquidAssets += value;
+ }
+ break;
+ }
+ //group the liabilities into the other
+ case MyMoneyAccount::CreditCard:
+ {
+ MyMoneyMoney value;
+ value = MyMoneyFile::instance()->balance((*account_it).id(), QDate::currentDate());
+ //calculate balance if foreign currency
+ if((*account_it).currencyId() != file->baseCurrency().id()) {
+ ReportAccount repAcc = ReportAccount((*account_it).id());
+ MyMoneyMoney curPrice = repAcc.baseCurrencyPrice(QDate::currentDate());
+ MyMoneyMoney baseValue = value * curPrice;
+ liquidLiabilities += baseValue;
+ liquidLiabilities = liquidLiabilities.convert(10000);
+ } else {
+ liquidLiabilities += value;
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ }
+ ++account_it;
+ }
+ //calculate net worth
+ MyMoneyMoney liquidWorth = liquidAssets+liquidLiabilities;
+
+ //format assets, liabilities and net worth
+ QString amountLiquidAssets = liquidAssets.formatMoney(file->baseCurrency().tradingSymbol(), prec);
+ QString amountLiquidLiabilities = liquidLiabilities.formatMoney(file->baseCurrency().tradingSymbol(), prec);
+ QString amountLiquidWorth = liquidWorth.formatMoney(file->baseCurrency().tradingSymbol(), prec);
+ amountLiquidAssets.replace(" ","&nbsp;");
+ amountLiquidLiabilities.replace(" ","&nbsp;");
+ amountLiquidWorth.replace(" ","&nbsp;");
+
+ //show the summary
+ m_part->write("<div class=\"shadow\"><div class=\"displayblock\"><div class=\"summaryheader\">" + i18n("Cash Flow Summary") + "</div>\n<div class=\"gap\">&nbsp;</div>\n");
+
+ //print header
+ m_part->write("<table width=\"100%\" cellspacing=\"0\" cellpadding=\"2\" class=\"summarytable\" >");
+ //income and expense title
+ m_part->write("<tr class=\"itemtitle\">");
+ m_part->write("<td class=\"left\" colspan=\"4\">");
+ m_part->write(i18n("Income and Expenses of Current Month"));
+ m_part->write("</td></tr>");
+ //column titles
+ m_part->write("<tr class=\"item\">");
+ m_part->write("<td width=\"25%\" class=\"center\">");
+ m_part->write(i18n("Income"));
+ m_part->write("</td>");
+ m_part->write("<td width=\"25%\" class=\"center\">");
+ m_part->write(i18n("Scheduled Income"));
+ m_part->write("</td>");
+ m_part->write("<td width=\"25%\" class=\"center\">");
+ m_part->write(i18n("Expenses"));
+ m_part->write("</td>");
+ m_part->write("<td width=\"25%\" class=\"center\">");
+ m_part->write(i18n("Scheduled Expenses"));
+ m_part->write("</td>");
+ m_part->write("</tr>");
+
+ //add row with banding
+ m_part->write(QString("<tr class=\"row-even\" style=\"font-weight:bold;\">"));
+
+ //print current income
+ m_part->write(QString("<td align=\"right\">%2</td>").arg(showColoredAmount(amountIncome, incomeValue.isNegative())));
+
+ //print the scheduled income
+ m_part->write(QString("<td align=\"right\">%2</td>").arg(showColoredAmount(amountScheduledIncome, scheduledIncome.isNegative())));
+
+ //print current expenses
+ m_part->write(QString("<td align=\"right\">%2</td>").arg(showColoredAmount(amountExpense, expenseValue.isNegative())));
+
+ //print the scheduled expenses
+ m_part->write(QString("<td align=\"right\">%2</td>").arg(showColoredAmount(amountScheduledExpense, scheduledExpense.isNegative())));
+ m_part->write("</tr>");
+
+ m_part->write("</table>");
+
+ //print header of assets and liabilities
+ m_part->write("<div class=\"gap\">&nbsp;</div>\n");
+ m_part->write("<table width=\"100%\" cellspacing=\"0\" cellpadding=\"2\" class=\"summarytable\" >");
+ //assets and liabilities title
+ m_part->write("<tr class=\"itemtitle\">");
+ m_part->write("<td class=\"left\" colspan=\"4\">");
+ m_part->write(i18n("Liquid Assets and Liabilities"));
+ m_part->write("</td></tr>");
+ //column titles
+ m_part->write("<tr class=\"item\">");
+ m_part->write("<td width=\"25%\" class=\"center\">");
+ m_part->write(i18n("Liquid Assets"));
+ m_part->write("</td>");
+ m_part->write("<td width=\"25%\" class=\"center\">");
+ m_part->write(i18n("Transfers to Liquid Liabilities"));
+ m_part->write("</td>");
+ m_part->write("<td width=\"25%\" class=\"center\">");
+ m_part->write(i18n("Liquid Liabilities"));
+ m_part->write("</td>");
+ m_part->write("<td width=\"25%\" class=\"center\">");
+ m_part->write(i18n("Other Transfers"));
+ m_part->write("</td>");
+ m_part->write("</tr>");
+
+ //add row with banding
+ m_part->write(QString("<tr class=\"row-even\" style=\"font-weight:bold;\">"));
+
+ //print current liquid assets
+ m_part->write(QString("<td align=\"right\">%2</td>").arg(showColoredAmount(amountLiquidAssets, liquidAssets.isNegative())));
+
+ //print the scheduled transfers
+ m_part->write(QString("<td align=\"right\">%2</td>").arg(showColoredAmount(amountScheduledLiquidTransfer, scheduledLiquidTransfer.isNegative())));
+
+ //print current liabilities
+ m_part->write(QString("<td align=\"right\">%2</td>").arg(showColoredAmount(amountLiquidLiabilities, liquidLiabilities.isNegative())));
+
+ //print the scheduled transfers
+ m_part->write(QString("<td align=\"right\">%2</td>").arg(showColoredAmount(amountScheduledOtherTransfer, scheduledOtherTransfer.isNegative())));
+
+
+ m_part->write("</tr>");
+
+ m_part->write("</table>");
+
+ //final conclusion
+ MyMoneyMoney profitValue = incomeValue + expenseValue + scheduledIncome + scheduledExpense;
+ MyMoneyMoney expectedAsset = liquidAssets + scheduledIncome + scheduledExpense + scheduledLiquidTransfer + scheduledOtherTransfer;
+ MyMoneyMoney expectedLiabilities = liquidLiabilities + scheduledLiquidTransfer;
+
+ QString amountExpectedAsset = expectedAsset.formatMoney(file->baseCurrency().tradingSymbol(), prec);
+ QString amountExpectedLiabilities = expectedLiabilities.formatMoney(file->baseCurrency().tradingSymbol(), prec);
+ QString amountProfit = profitValue.formatMoney(file->baseCurrency().tradingSymbol(), prec);
+ amountProfit.replace(" ","&nbsp;");
+ amountExpectedAsset.replace(" ","&nbsp;");
+ amountExpectedLiabilities.replace(" ","&nbsp;");
+
+
+
+ //print header of cash flow status
+ m_part->write("<div class=\"gap\">&nbsp;</div>\n");
+ m_part->write("<table width=\"100%\" cellspacing=\"0\" cellpadding=\"2\" class=\"summarytable\" >");
+ //income and expense title
+ m_part->write("<tr class=\"itemtitle\">");
+ m_part->write("<td class=\"left\" colspan=\"4\">");
+ m_part->write(i18n("Cash Flow Status"));
+ m_part->write("</td></tr>");
+ //column titles
+ m_part->write("<tr class=\"item\">");
+ m_part->write("<td>&nbsp;</td>");
+ m_part->write("<td width=\"25%\" class=\"center\">");
+ m_part->write(i18n("Expected Liquid Assets"));
+ m_part->write("</td>");
+ m_part->write("<td width=\"25%\" class=\"center\">");
+ m_part->write(i18n("Expected Liquid Liabilities"));
+ m_part->write("</td>");
+ m_part->write("<td width=\"25%\" class=\"center\">");
+ m_part->write(i18n("Expected Profit/Loss"));
+ m_part->write("</td>");
+ m_part->write("</tr>");
+
+ //add row with banding
+ m_part->write(QString("<tr class=\"row-even\" style=\"font-weight:bold;\">"));
+ m_part->write("<td>&nbsp;</td>");
+
+ //print expected assets
+ m_part->write(QString("<td align=\"right\">%2</td>").arg(showColoredAmount(amountExpectedAsset, expectedAsset.isNegative())));
+
+ //print expected liabilities
+ m_part->write(QString("<td align=\"right\">%2</td>").arg(showColoredAmount(amountExpectedLiabilities, expectedLiabilities.isNegative())));
+
+ //print expected profit
+ m_part->write(QString("<td align=\"right\">%2</td>").arg(showColoredAmount(amountProfit, profitValue.isNegative())));
+
+ m_part->write("</tr>");
+
+ m_part->write("</table>");
+
+ m_part->write("</div></div>");
+
+
+}
+
+// Make sure, that these definitions are only used within this file
+// this does not seem to be necessary, but when building RPMs the
+// build option 'final' is used and all CPP files are concatenated.
+// So it could well be, that in another CPP file these definitions
+// are also used.
+#undef VIEW_LEDGER
+#undef VIEW_SCHEDULE
+#undef VIEW_WELCOME
+#undef VIEW_HOME
+#undef VIEW_REPORTS
+
+#include "khomeview.moc"
diff --git a/kmymoney2/views/khomeview.h b/kmymoney2/views/khomeview.h
new file mode 100644
index 0000000..213fd91
--- /dev/null
+++ b/kmymoney2/views/khomeview.h
@@ -0,0 +1,158 @@
+/***************************************************************************
+ khomeview.h - description
+ -------------------
+ begin : Tue Jan 22 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+#ifndef KHOMEVIEW_H
+#define KHOMEVIEW_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qwidget.h>
+class QVBoxLayout;
+class QFrame;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+#include <khtml_part.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../mymoney/mymoneyscheduled.h"
+#include "../mymoney/mymoneyaccount.h"
+#include "../mymoney/mymoneyforecast.h"
+#include "../views/kmymoneyview.h"
+
+/**
+ * Displays a 'home page' for the user. Similar to concepts used in
+ * quicken and m$-money.
+ *
+ * @author Michael Edwardes
+ *
+ * @short A view containing the home page for kmymoney2.
+**/
+class KHomeView : public KMyMoneyViewBase
+{
+ Q_OBJECT
+public:
+ /**
+ * Definition of bitmap used as argument for showAccounts().
+ */
+ enum paymentTypeE {
+ Preferred = 1, ///< show preferred accounts
+ Payment = 2 ///< show payment accounts
+ };
+
+ KHomeView(QWidget *parent=0, const char *name=0);
+ ~KHomeView();
+
+protected:
+ void showPayments(void);
+ void showPaymentEntry(const MyMoneySchedule&, int cnt = 1);
+ void showAccounts(paymentTypeE type, const QString& hdr);
+ void showAccountEntry(const MyMoneyAccount&);
+ void showFavoriteReports(void);
+ void showForecast(void);
+ void showNetWorthGraph(void);
+ void showSummary(void);
+ void showAssetsLiabilities(void);
+ void showIncomeExpenseSummary(void);
+ void showSchedulesSummary(void);
+ void showBudget(void);
+ void showCashFlowSummary(void);
+
+ const QString link(const QString& view, const QString& query, const QString& title = QString()) const;
+ const QString linkend(void) const;
+ void loadView(void);
+
+public slots:
+ /**
+ * Overridden so we can emit the activated signal.
+ *
+ * @return Nothing.
+ */
+ void show(void);
+
+ void slotOpenURL(const KURL &url, const KParts::URLArgs& args);
+ void slotLoadView(void);
+
+ /**
+ * Print the current view
+ */
+ void slotPrintView(void);
+
+signals:
+ void ledgerSelected(const QString& id, const QString& transaction);
+ void scheduleSelected(const QString& id);
+ void reportSelected(const QString& id);
+
+private:
+ /// \internal d-pointer class.
+ class Private;
+ /// \internal d-pointer instance.
+ Private* const d;
+
+ /**
+ * daily balances of an account
+ */
+ typedef QMap<QDate, MyMoneyMoney> dailyBalances;
+
+ /**
+ * Print an account and its balance and limit
+ */
+ void showAccountEntry(const MyMoneyAccount& acc, const MyMoneyMoney& value, const MyMoneyMoney& valueToMinBal, const bool showMinBal);
+
+ /**
+ * @param acc the investment account
+ * @return the balance in the currency of the investment account
+ */
+ MyMoneyMoney investmentBalance(const MyMoneyAccount& acc);
+
+ /**
+ * Print text in the color set for negative numbers, if @p amount is negative
+ * abd @p isNegative is true
+ */
+ QString showColoredAmount(const QString& amount, bool isNegative);
+
+ /**
+ * Run the forecast
+ */
+ void doForecast(void);
+
+ /**
+ * Calculate the forecast balance after a payment has been made
+ */
+ MyMoneyMoney forecastPaymentBalance(const MyMoneyAccount& acc, const MyMoneyMoney& payment, QDate& paymentDate);
+
+ KHTMLPart* m_part;
+ QVBoxLayout* m_qvboxlayoutPage;
+ QString m_filename;
+ bool m_showAllSchedules;
+ bool m_needReload;
+ MyMoneyForecast m_forecast;
+
+ /**
+ * daily forecast balance of accounts
+ */
+ QMap<QString, dailyBalances> m_accountList;
+
+};
+
+#endif
diff --git a/kmymoney2/views/kinstitutionsview.cpp b/kmymoney2/views/kinstitutionsview.cpp
new file mode 100644
index 0000000..2c3ac5d
--- /dev/null
+++ b/kmymoney2/views/kinstitutionsview.cpp
@@ -0,0 +1,353 @@
+/***************************************************************************
+ kinstitutionsview.cpp
+ -------------------
+ copyright : (C) 2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qheader.h>
+#include <qlabel.h>
+#include <qtabwidget.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kdebug.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyfile.h>
+#include "kinstitutionsview.h"
+#include "../kmymoneyglobalsettings.h"
+#include "../kmymoney2.h"
+
+KInstitutionsView::KInstitutionsView(QWidget *parent, const char *name) :
+ KInstitutionsViewDecl(parent,name),
+ m_needReload(false)
+{
+ m_accountTree->header()->setLabel(0, i18n("Institution/Account"));
+
+ connect(m_accountTree, SIGNAL(selectObject(const MyMoneyObject&)), this, SIGNAL(selectObject(const MyMoneyObject&)));
+ connect(m_accountTree, SIGNAL(openContextMenu(const MyMoneyObject&)), this, SIGNAL(openContextMenu(const MyMoneyObject&)));
+ connect(m_accountTree, SIGNAL(valueChanged(void)), this, SLOT(slotUpdateNetWorth(void)));
+ connect(m_accountTree, SIGNAL(openObject(const MyMoneyObject&)), this, SIGNAL(openObject(const MyMoneyObject&)));
+ connect(m_accountTree, SIGNAL(reparent(const MyMoneyAccount&, const MyMoneyInstitution&)), this, SIGNAL(reparent(const MyMoneyAccount&, const MyMoneyInstitution&)));
+
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotLoadAccounts()));
+}
+
+KInstitutionsView::~KInstitutionsView()
+{
+}
+
+void KInstitutionsView::show(void)
+{
+ if(m_needReload) {
+ loadAccounts();
+ m_needReload = false;
+ }
+
+ // don't forget base class implementation
+ KInstitutionsViewDecl::show();
+
+ // if we have a selected account, let the application know about it
+ KMyMoneyAccountTreeBaseItem *item = m_accountTree->selectedItem();
+ if(item) {
+ emit selectObject(item->itemObject());
+ }
+}
+
+void KInstitutionsView::polish(void)
+{
+ KInstitutionsViewDecl::polish();
+ m_accountTree->setResizeMode(QListView::LastColumn);
+ m_accountTree->restoreLayout("Institution View Settings");
+}
+
+void KInstitutionsView::slotLoadAccounts(void)
+{
+ if(isVisible()) {
+ loadAccounts();
+ } else {
+ m_needReload = true;
+ }
+}
+
+void KInstitutionsView::loadAccounts(void)
+{
+ QMap<QString, bool> isOpen;
+
+ ::timetrace("start load institutions view");
+ // remember the id of the current selected item
+ KMyMoneyAccountTreeBaseItem *item = m_accountTree->selectedItem();
+ QString selectedItemId = (item) ? item->id() : QString();
+
+ // keep a map of all 'expanded' accounts
+ QListViewItemIterator it_lvi(m_accountTree);
+ while(it_lvi.current()) {
+ item = dynamic_cast<KMyMoneyAccountTreeItem*>(it_lvi.current());
+ if(item && item->isOpen()) {
+ isOpen[item->id()] = true;
+ }
+ ++it_lvi;
+ }
+
+ // remember the upper left corner of the viewport
+ QPoint startPoint = m_accountTree->viewportToContents(QPoint(0, 0));
+
+ // turn off updates to avoid flickering during reload
+ m_accountTree->setUpdatesEnabled(false);
+
+ // clear the current contents and recreate it
+ m_accountTree->clear();
+ m_accountMap.clear();
+ m_securityMap.clear();
+ m_transactionCountMap.clear();
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ QValueList<MyMoneyAccount> alist;
+ file->accountList(alist);
+ QValueList<MyMoneyAccount>::const_iterator it_a;
+ for(it_a = alist.begin(); it_a != alist.end(); ++it_a) {
+ m_accountMap[(*it_a).id()] = *it_a;
+ }
+
+ // we need to make sure we show stock accounts
+ // under the right institution (the one of the parent account)
+ QMap<QString, MyMoneyAccount>::iterator it_am;
+ for(it_am = m_accountMap.begin(); it_am != m_accountMap.end(); ++it_am) {
+ if((*it_am).isInvest()) {
+ (*it_am).setInstitutionId(m_accountMap[(*it_am).parentAccountId()].institutionId());
+ }
+ }
+
+ QValueList<MyMoneySecurity> slist = file->currencyList();
+ slist += file->securityList();
+ QValueList<MyMoneySecurity>::const_iterator it_s;
+ for(it_s = slist.begin(); it_s != slist.end(); ++it_s) {
+ m_securityMap[(*it_s).id()] = *it_s;
+ }
+
+ m_transactionCountMap = file->transactionCountMap();
+
+ m_accountTree->setBaseCurrency(file->baseCurrency());
+
+ // create the items
+ try {
+ const MyMoneySecurity& security = file->baseCurrency();
+ m_accountTree->setBaseCurrency(security);
+
+ MyMoneyInstitution none;
+ none.setName(i18n("Accounts with no institution assigned"));
+ KMyMoneyAccountTreeItem* noInstitutionItem = new KMyMoneyAccountTreeItem(m_accountTree, none);
+ noInstitutionItem->setPixmap(0,none.pixmap());
+ loadSubAccounts(noInstitutionItem, QString());
+
+ // hide it, if unused
+ noInstitutionItem->setVisible(noInstitutionItem->childCount() != 0);
+
+ QValueList<MyMoneyInstitution> list = file->institutionList();
+ QValueList<MyMoneyInstitution>::const_iterator it_i;
+ for(it_i = list.begin(); it_i != list.end(); ++it_i) {
+ KMyMoneyAccountTreeItem* item = new KMyMoneyAccountTreeItem(m_accountTree, *it_i);
+ item->setPixmap(0, none.pixmap());
+ loadSubAccounts(item, (*it_i).id());
+ }
+
+ } catch(MyMoneyException *e) {
+ kdDebug(2) << "Problem in institutions view: " << e->what();
+ delete e;
+ }
+
+ // scan through the list of accounts and re-expand those that were
+ // expanded and re-select the one that was probably selected before
+ it_lvi = QListViewItemIterator(m_accountTree);
+ while(it_lvi.current()) {
+ item = dynamic_cast<KMyMoneyAccountTreeItem*>(it_lvi.current());
+ if(item) {
+ if(item->id() == selectedItemId)
+ m_accountTree->setSelected(item, true);
+ if(isOpen.find(item->id()) != isOpen.end())
+ item->setOpen(true);
+ }
+ ++it_lvi;
+ }
+
+ // reposition viewport
+ m_accountTree->setContentsPos(startPoint.x(), startPoint.y());
+
+ // turn updates back on
+ m_accountTree->setUpdatesEnabled(true);
+ m_accountTree->repaintContents();
+
+ ::timetrace("done load institutions view");
+}
+
+void KInstitutionsView::loadSubAccounts(KMyMoneyAccountTreeItem* parent)
+{
+ bool showClosedAccounts = kmymoney2->toggleAction("view_show_all_accounts")->isChecked();
+ const MyMoneyAccount& account = dynamic_cast<const MyMoneyAccount&>(parent->itemObject());
+ QValueList<QString>::const_iterator it_a;
+ MyMoneyFile* file = MyMoneyFile::instance();
+ for(it_a = account.accountList().begin(); it_a != account.accountList().end(); ++it_a) {
+ MyMoneyAccount acc = m_accountMap[(*it_a)];
+ if(!acc.isInvest())
+ continue;
+ if(acc.isClosed() && !showClosedAccounts)
+ continue;
+ const MyMoneySecurity& security = m_securityMap[acc.currencyId()];
+ QValueList<MyMoneyPrice> prices;
+ prices += file->price(acc.currencyId(), security.tradingCurrency());
+ if(security.tradingCurrency() != file->baseCurrency().id()) {
+ MyMoneySecurity sec = m_securityMap[security.tradingCurrency()];
+ prices += file->price(sec.id(), file->baseCurrency().id());
+ }
+ KMyMoneyAccountTreeItem* item = new KMyMoneyAccountTreeItem(parent, acc, prices, security);
+ if(acc.id() == m_reconciliationAccount.id())
+ item->setReconciliation(true);
+ }
+}
+
+void KInstitutionsView::loadSubAccounts(KMyMoneyAccountTreeItem* parent, const QString& institutionId)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ QMap<QString, MyMoneyAccount>::const_iterator it_a;
+ MyMoneyMoney value;
+ bool showClosedAccounts = kmymoney2->toggleAction("view_show_all_accounts")->isChecked();
+
+ for(it_a = m_accountMap.begin(); it_a != m_accountMap.end(); ++it_a) {
+ const MyMoneyAccount& acc = *it_a;
+ MyMoneyMoney factor(1,1);
+ switch(acc.accountGroup()) {
+ case MyMoneyAccount::Liability:
+ factor = MyMoneyMoney(-1,1);
+ // tricky fall through here
+
+ case MyMoneyAccount::Asset:
+ if(acc.institutionId() == institutionId
+ && !acc.isInvest()
+ && (!acc.isClosed() || showClosedAccounts)) {
+ QValueList<MyMoneyPrice> prices;
+ MyMoneySecurity security = file->baseCurrency();
+ try {
+ if(acc.currencyId() != file->baseCurrency().id()) {
+ security = m_securityMap[acc.currencyId()];
+ prices += file->price(acc.currencyId(), file->baseCurrency().id());
+ }
+
+ } catch(MyMoneyException *e) {
+ kdDebug(2) << __PRETTY_FUNCTION__ << " caught exception while adding " << acc.name() << "[" << acc.id() << "]: " << e->what();
+ delete e;
+ }
+
+ KMyMoneyAccountTreeItem* item = new KMyMoneyAccountTreeItem(parent, acc, prices, security);
+ if(acc.id() == m_reconciliationAccount.id())
+ item->setReconciliation(true);
+
+ if(acc.accountType() == MyMoneyAccount::Investment)
+ loadSubAccounts(item);
+ value += (item->totalValue() * factor);
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ // the calulated value for the institution is not correct as
+ // it does not take the negative sign for liability accounts
+ // into account. So we correct this here with the value we
+ // have calculated while filling the list
+ parent->adjustTotalValue(-parent->totalValue()); // load a 0
+ parent->adjustTotalValue(value); // now store the new value
+
+ // we need to call slotUpdateNetWorth() here manually, because
+ // KMyMoneyAccountTreeItem::adjustTotalValue() does not send out
+ // the valueChanged() signal
+ slotUpdateNetWorth();
+}
+
+void KInstitutionsView::slotUpdateNetWorth(void)
+{
+ MyMoneyMoney netWorth;
+
+ // calculate by going through the account trees top items
+ // and summing up the total value shown there
+ KMyMoneyAccountTreeItem* item = dynamic_cast<KMyMoneyAccountTreeItem*>(m_accountTree->firstChild());
+ while(item) {
+ netWorth += item->totalValue();
+ item = dynamic_cast<KMyMoneyAccountTreeItem*>(item->nextSibling());
+ }
+
+ QString s(i18n("Net Worth: "));
+
+ // FIXME figure out how to deal with the approximate
+ // if(!(file->totalValueValid(assetAccount.id()) & file->totalValueValid(liabilityAccount.id())))
+ // s += "~ ";
+
+ s.replace(QString(" "), QString("&nbsp;"));
+ if(netWorth.isNegative()) {
+ s += "<b><font color=\"red\">";
+ }
+ const MyMoneySecurity& sec = MyMoneyFile::instance()->baseCurrency();
+ QString v(netWorth.formatMoney(sec));
+ s += v.replace(QString(" "), QString("&nbsp;"));
+ if(netWorth.isNegative()) {
+ s += "</font></b>";
+ }
+
+ m_totalProfitsLabel->setFont(KMyMoneyGlobalSettings::listCellFont());
+ m_totalProfitsLabel->setText(s);
+}
+
+void KInstitutionsView::slotReconcileAccount(const MyMoneyAccount& acc, const QDate& reconciliationDate, const MyMoneyMoney& endingBalance)
+{
+ Q_UNUSED(reconciliationDate);
+ Q_UNUSED(endingBalance);
+
+ // scan through the list of accounts and mark all non
+ // expanded and re-select the one that was probably selected before
+ QListViewItemIterator it_lvi(m_accountTree);
+ KMyMoneyAccountTreeItem* item;
+ while(it_lvi.current()) {
+ item = dynamic_cast<KMyMoneyAccountTreeItem*>(it_lvi.current());
+ if(item) {
+ item->setReconciliation(false);
+ }
+ ++it_lvi;
+ }
+
+ m_reconciliationAccount = acc;
+ if(!acc.id().isEmpty()) {
+ it_lvi = QListViewItemIterator(m_accountTree);
+ while(it_lvi.current()) {
+ item = dynamic_cast<KMyMoneyAccountTreeItem*>(it_lvi.current());
+ if(item && item->itemObject().id() == acc.id()) {
+ item->setReconciliation(true);
+ break;
+ }
+ ++it_lvi;
+ }
+ }
+}
+
+
+#include "kinstitutionsview.moc"
diff --git a/kmymoney2/views/kinstitutionsview.h b/kmymoney2/views/kinstitutionsview.h
new file mode 100644
index 0000000..3a35713
--- /dev/null
+++ b/kmymoney2/views/kinstitutionsview.h
@@ -0,0 +1,128 @@
+/***************************************************************************
+ kinstitutionssview.h
+ -------------------
+ copyright : (C) 2005 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KINSTITUTIONSVIEW_H
+#define KINSTITUTIONSVIEW_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyinstitution.h>
+#include <kmymoney/kmymoneyaccounttree.h>
+#include <kmymoney/mymoneyutils.h>
+
+#include "../views/kinstitutionsviewdecl.h"
+
+/**
+ * @author Thomas Baumgart
+ */
+
+/**
+ * This class implements the institutions hierarchical 'view'.
+ */
+class KInstitutionsView : public KInstitutionsViewDecl
+{
+ Q_OBJECT
+private:
+
+public:
+ KInstitutionsView(QWidget *parent=0, const char *name=0);
+ virtual ~KInstitutionsView();
+
+public slots:
+ void slotLoadAccounts(void);
+
+ /**
+ * Override the base class behaviour to include all updates that
+ * happened in the meantime.
+ */
+ void show(void);
+
+ /**
+ * Override the base class behaviour to restore the layout. Do not
+ * do this in show() because show() itself may change the layout
+ * in undesired ways.
+ */
+ void polish(void);
+
+ void slotReconcileAccount(const MyMoneyAccount& acc, const QDate& reconciliationDate, const MyMoneyMoney& endingBalance);
+
+protected:
+ void loadAccounts(void);
+
+ // load accounts that are kept at a specific institution
+ void loadSubAccounts(KMyMoneyAccountTreeItem* parent, const QString& institutionId);
+
+ // load stock accounts under the investment account (parent)
+ void loadSubAccounts(KMyMoneyAccountTreeItem* parent);
+
+protected slots:
+ void slotUpdateNetWorth(void);
+
+private:
+ /**
+ * This method returns an icon according to the account type
+ * passed in the argument @p type.
+ *
+ * @param type account type as defined in MyMoneyAccount::accountTypeE
+ */
+ const QPixmap accountImage(const MyMoneyAccount::accountTypeE type) const;
+
+signals:
+ /**
+ * This signal serves as proxy for KMyMoneyAccountTree::selectObject()
+ */
+ void selectObject(const MyMoneyObject&);
+
+ /**
+ * This signal serves as proxy for
+ * KMyMoneyAccountTree::openContextMenu(const MyMoneyObject&)
+ */
+ void openContextMenu(const MyMoneyObject& obj);
+
+ /**
+ * This signal will be emitted when the left mouse button is double
+ * clicked (actually the KDE executed setting is used) on an account
+ * or institution.
+ */
+ void openObject(const MyMoneyObject& obj);
+
+ /**
+ * This signal is emitted, when the user selected to reparent the
+ * account @p acc to be a subordinate account of @p institution.
+ *
+ * @param acc const reference to account to be reparented
+ * @param institution const reference to new institution
+ */
+ void reparent(const MyMoneyAccount& acc, const MyMoneyInstitution& institution);
+
+private:
+ MyMoneyAccount m_reconciliationAccount;
+ QMap<QString, MyMoneyAccount> m_accountMap;
+ QMap<QString, MyMoneySecurity> m_securityMap;
+ QMap<QString, unsigned long> m_transactionCountMap;
+
+ /// set if a view needs to be reloaded during show()
+ bool m_needReload;
+};
+
+#endif
diff --git a/kmymoney2/views/kinstitutionsviewdecl.ui b/kmymoney2/views/kinstitutionsviewdecl.ui
new file mode 100644
index 0000000..3a0a740
--- /dev/null
+++ b/kmymoney2/views/kinstitutionsviewdecl.ui
@@ -0,0 +1,82 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KInstitutionsViewDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KInstitutionsViewDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>610</width>
+ <height>378</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="KMyMoneyAccountTree">
+ <property name="name">
+ <cstring>m_accountTree</cstring>
+ </property>
+ <property name="shadeSortColumn">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_totalProfitsLabel</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Total Profits:</string>
+ </property>
+ <property name="textFormat">
+ <enum>RichText</enum>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignVCenter|AlignRight</set>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/views/kinvestmentlistitem.cpp b/kmymoney2/views/kinvestmentlistitem.cpp
new file mode 100644
index 0000000..c2c41d9
--- /dev/null
+++ b/kmymoney2/views/kinvestmentlistitem.cpp
@@ -0,0 +1,294 @@
+/***************************************************************************
+ kinvestmentlistitem.cpp - description
+ -------------------
+ begin : Wed Feb 6 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qpainter.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klistview.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/kmymoneyglobalsettings.h>
+
+#include "kinvestmentlistitem.h"
+
+#include <kmymoney/mymoneysecurity.h>
+#include <kmymoney/mymoneyfile.h>
+
+KInvestmentListItem::KInvestmentListItem(KListView* parent, const MyMoneyAccount& account)
+ : KListViewItem(parent)
+{
+ bColumn5Negative = false;
+ bColumn6Negative = false;
+ bColumn7Negative = false;
+ bColumn8Negative = false;
+ bColumn9Negative = false;
+
+ m_account = account;
+ m_listView = parent;
+
+ MyMoneySecurity security;
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ security = file->security(m_account.currencyId());
+ m_tradingCurrency = file->security(security.tradingCurrency());
+
+ int prec = MyMoneyMoney::denomToPrec(m_tradingCurrency.smallestAccountFraction());
+
+ QValueList<MyMoneyTransaction> transactionList;
+ // FIXME PRICE
+ // equity_price_history history = equity.priceHistory();
+
+ //column 0 (COLUMN_NAME_INDEX) is the name of the stock
+ setText(COLUMN_NAME_INDEX, m_account.name());
+
+ //column 1 (COLUMN_SYMBOL_INDEX) is the ticker symbol
+ setText(COLUMN_SYMBOL_INDEX, security.tradingSymbol());
+
+ //column 2 is the net value (price * quantity owned)
+ MyMoneyPrice price = file->price(m_account.currencyId(), m_tradingCurrency.id());
+ if(price.isValid()) {
+ setText(COLUMN_VALUE_INDEX, (file->balance(m_account.id()) * price.rate(m_tradingCurrency.id())).formatMoney(m_tradingCurrency.tradingSymbol(), prec));
+ } else {
+ setText(COLUMN_VALUE_INDEX, "---");
+ }
+
+ //column 3 (COLUMN_QUANTITY_INDEX) is the quantity of shares owned
+ prec = MyMoneyMoney::denomToPrec(security.smallestAccountFraction());
+ setText(COLUMN_QUANTITY_INDEX, file->balance(m_account.id()).formatMoney("", prec));
+
+ //column 4 is the current price
+ // Get the price precision from the configuration
+ prec = KMyMoneyGlobalSettings::pricePrecision();
+
+ // prec = MyMoneyMoney::denomToPrec(m_tradingCurrency.smallestAccountFraction());
+ if(price.isValid()) {
+ setText(COLUMN_PRICE_INDEX, price.rate(m_tradingCurrency.id()).formatMoney(m_tradingCurrency.tradingSymbol(), prec));
+ } else {
+ setText(COLUMN_PRICE_INDEX, "---");
+ }
+}
+
+KInvestmentListItem::~KInvestmentListItem()
+{
+}
+
+// FIXME PRICE
+#if 0
+const QString KInvestmentListItem::calculate1WeekGain(const equity_price_history& history)
+{
+ return calculateGain(history, -7, 0, false, bColumn6Negative);
+}
+
+const QString KInvestmentListItem::calculate4WeekGain(const equity_price_history& history)
+{
+ return calculateGain(history, -28, 0, false, bColumn7Negative);
+}
+
+const QString KInvestmentListItem::calculate3MonthGain(const equity_price_history& history)
+{
+ return calculateGain(history, 0, -3, false, bColumn8Negative);
+}
+
+const QString KInvestmentListItem::calculateYTDGain(const equity_price_history& history)
+{
+ return calculateGain(history, 0, 0, true, bColumn9Negative);
+}
+
+const QString KInvestmentListItem::calculateGain(const equity_price_history& history, int dayDifference, int monthDifference, bool YTD, bool& bNegative)
+{
+ bNegative = false;
+ if(history.isEmpty())
+ {
+ return QString("0.0%");
+ }
+ else
+ {
+ bool bFoundCurrent = false, bFoundComparison = false;
+ QDate tempDate, comparisonDate = QDate::currentDate();
+
+ if(YTD)
+ {
+ //if it is YTD, set the date to 01/01/<current year>
+ comparisonDate.setYMD(comparisonDate.year(), 1, 1);
+ }
+ else
+ {
+ comparisonDate = comparisonDate.addDays(dayDifference);
+ comparisonDate = comparisonDate.addMonths(monthDifference);
+ }
+
+ MyMoneyMoney comparisonValue, currentValue;
+
+ //find the current value, or closest to the current value.
+ equity_price_history::ConstIterator itToday = history.end();
+ for(tempDate = QDate::currentDate(); tempDate >= comparisonDate; )
+ {
+ itToday = history.find(tempDate);
+ if(itToday != history.end())
+ {
+ currentValue = itToday.data();
+ bFoundCurrent = true;
+ break;
+ }
+
+ tempDate = tempDate.addDays(-1);
+ }
+
+ if(!bFoundCurrent)
+ {
+ return QString("0.0%");
+ }
+
+ //find a date that is closest to a week old, not older, and not today's date. Because its a QMap, this map
+ //should already be sorted earliest to latest.
+ for(equity_price_history::ConstIterator it = history.begin(); it != history.end(); ++it)
+ {
+ if(it.key() >= comparisonDate && it.key() < QDate::currentDate())
+ {
+ comparisonDate = it.key();
+ comparisonValue = it.data();
+ bFoundComparison = true;
+ break;
+ }
+ }
+
+ if(!bFoundComparison)
+ {
+ return QString("0.0%");
+ }
+
+ //qDebug("Current date/value to use is %s/%s, Previous is %s/%s", tempDate.toString().data(), currentValue.toString().data(), comparisonDate.toString().data(), comparisonValue.toString().data());
+
+ //compute the percentage difference
+ if(comparisonValue != currentValue)
+ {
+ double result = (currentValue.toDouble() / comparisonValue.toDouble()) * 100.0;
+ result -= 100.0;
+ if(result < 0.0)
+ {
+ bNegative = true;
+ }
+
+ QString ds = QString("%1%").arg(result, 0, 'f', 3);
+ return ds;
+
+ /*MyMoneyMoney result = (currentValue / comparisonValue);
+ result = result * 100;
+ result = result - 100;
+ qDebug("final result = %s", result.toString().data());
+ return QString(result.formatMoney("", 3) + "%");*/
+ }
+ }
+ return QString("");
+}
+#endif
+
+int KInvestmentListItem::compare(QListViewItem* i, int col, bool ascending) const
+{
+ KInvestmentListItem* item = dynamic_cast<KInvestmentListItem*>(i);
+ // do special sorting only for numeric columns
+ // in all other cases use the standard sorting
+ if(item) {
+ switch(col) {
+ case COLUMN_VALUE_INDEX:
+ case COLUMN_QUANTITY_INDEX:
+ case COLUMN_PRICE_INDEX:
+ {
+ bool inv1 = text(col) == "---";
+ bool inv2 = item->text(col) == "---";
+ if(!inv1 && !inv2) {
+ MyMoneyMoney result = MyMoneyMoney(text(col)) - MyMoneyMoney(item->text(col));
+ if(result.isNegative())
+ return -1;
+ if(result.isZero())
+ return 0;
+ return 1;
+ } else if(inv1 && inv2) {
+ return 0;
+ } else if(inv1) {
+ return -1;
+ }
+ return 1;
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ // do standard sorting here
+ return KListViewItem::compare(i, col, ascending);
+}
+
+void KInvestmentListItem::paintCell(QPainter * p, const QColorGroup & cg, int column, int width, int align)
+{
+ bool bPaintRed = false;
+ if((column == COLUMN_RAWGAIN_INDEX && bColumn5Negative) ||
+ (column == COLUMN_1WEEKGAIN_INDEX && bColumn6Negative) ||
+ (column == COLUMN_4WEEKGAIN_INDEX && bColumn7Negative) ||
+ (column == COLUMN_3MONGAIN_INDEX && bColumn8Negative) ||
+ (column == COLUMN_YTDGAIN_INDEX && bColumn9Negative))
+ {
+ bPaintRed = true;
+ }
+
+ p->save();
+
+ QColorGroup cg2(cg);
+
+ if(isAlternate())
+ cg2.setColor(QColorGroup::Base, KMyMoneyGlobalSettings::listColor());
+ else
+ cg2.setColor(QColorGroup::Base, KMyMoneyGlobalSettings::listBGColor());
+
+#ifndef KMM_DESIGNER
+ QFont font = KMyMoneyGlobalSettings::listCellFont();
+ // strike out closed accounts
+ if(m_account.isClosed())
+ font.setStrikeOut(true);
+
+ p->setFont(font);
+#endif
+
+ if(bPaintRed)
+ {
+ QColorGroup _cg( cg2);
+ QColor c = _cg.text();
+ _cg.setColor(QColorGroup::Text, Qt::red);
+ QListViewItem::paintCell(p, _cg, column, width, align);
+ _cg.setColor(QColorGroup::Text, c);
+ }
+ else
+ {
+ QListViewItem::paintCell(p, cg2, column, width, align);
+ }
+
+ p->restore();
+}
diff --git a/kmymoney2/views/kinvestmentlistitem.h b/kmymoney2/views/kinvestmentlistitem.h
new file mode 100644
index 0000000..d0ad62b
--- /dev/null
+++ b/kmymoney2/views/kinvestmentlistitem.h
@@ -0,0 +1,95 @@
+/***************************************************************************
+ kinvestmentlistitem.h - description
+ -------------------
+ begin : Wed Feb 6 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KINVESTMENTLISTITEM_H
+#define KINVESTMENTLISTITEM_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klistview.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneysecurity.h>
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneytransaction.h>
+#include <kmymoney/mymoneyobserver.h>
+
+//indexes for the various columns on the summary view
+#define COLUMN_NAME_INDEX 0
+#define COLUMN_SYMBOL_INDEX 1
+#define COLUMN_VALUE_INDEX 2
+#define COLUMN_QUANTITY_INDEX 3
+#define COLUMN_PRICE_INDEX 4
+#define COLUMN_COSTBASIS_INDEX 5
+#define COLUMN_RAWGAIN_INDEX 6
+#define COLUMN_1WEEKGAIN_INDEX 7
+#define COLUMN_4WEEKGAIN_INDEX 8
+#define COLUMN_3MONGAIN_INDEX 9
+#define COLUMN_YTDGAIN_INDEX 10
+
+/**
+ * @author Kevin Tambascio
+ * @author Thomas Baumgart
+ */
+class KInvestmentListItem : public KListViewItem
+{
+public:
+ KInvestmentListItem(KListView* parent, const MyMoneyAccount& security);
+ ~KInvestmentListItem();
+
+ QString securityId() const { return m_account.currencyId(); };
+ const MyMoneyAccount& account(void) const { return m_account; };
+ const MyMoneySecurity tradingCurrency(void) const { return m_tradingCurrency; };
+
+ /**
+ * Helper method to show the right order
+ */
+ int compare(QListViewItem* i, int col, bool ascending) const;
+
+
+protected:
+ void paintCell(QPainter * p, const QColorGroup & cg, int column, int width, int align);
+
+private:
+ // FIXME PRICE
+#if 0
+ const QString calculate1WeekGain(const equity_price_history& history);
+ const QString calculate4WeekGain(const equity_price_history& history);
+ const QString calculate3MonthGain(const equity_price_history& history);
+ const QString calculateYTDGain(const equity_price_history& history);
+ const QString calculateGain(const equity_price_history& history, int dayDifference, int monthDifference, bool YTD, bool& bNegative);
+#endif
+
+private:
+ KListView* m_listView;
+ MyMoneyAccount m_account;
+ MyMoneySecurity m_tradingCurrency;
+ bool bColumn5Negative, bColumn6Negative, bColumn7Negative, bColumn8Negative, bColumn9Negative;
+};
+
+#endif
diff --git a/kmymoney2/views/kinvestmentview.cpp b/kmymoney2/views/kinvestmentview.cpp
new file mode 100644
index 0000000..ae8cc11
--- /dev/null
+++ b/kmymoney2/views/kinvestmentview.cpp
@@ -0,0 +1,322 @@
+/***************************************************************************
+ kinvestmentview.cpp - description
+ -------------------
+ begin : Mon Mar 12 2007
+ copyright : (C) 2007 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include <typeinfo>
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include "kdecompat.h"
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/mymoneyutils.h>
+#include <kmymoney/mymoneysecurity.h>
+#include <kmymoney/mymoneytransaction.h>
+#include <kmymoney/mymoneyinvesttransaction.h>
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/kmymoneyglobalsettings.h>
+#include <kmymoney/kmymoneyaccountcombo.h>
+#include <kmymoney/kmymoneycurrencyselector.h>
+
+#include "../kmymoney2.h"
+
+#include "kinvestmentview.h"
+#include "kinvestmentlistitem.h"
+
+class KInvestmentView::Private
+{
+public:
+ Private() :
+ m_needReload(false),
+ m_newAccountLoaded(false),
+ m_recursion(false),
+ m_precision(2) {}
+
+ MyMoneyAccount m_account;
+ bool m_needReload;
+ bool m_newAccountLoaded;
+ bool m_recursion;
+ int m_precision;
+};
+
+
+
+KInvestmentView::KInvestmentView(QWidget *parent, const char *name) :
+ KInvestmentViewDecl(parent,name),
+ d(new Private)
+{
+ m_table->setRootIsDecorated(false);
+ // m_table->setColumnText(0, i18n("Symbol"));
+ m_table->addColumn(i18n("Name"));
+ m_table->addColumn(i18n("Symbol"));
+
+ int col = m_table->addColumn(i18n("Value"));
+ m_table->setColumnAlignment(col, Qt::AlignRight);
+
+ col = m_table->addColumn(i18n("Quantity"));
+ m_table->setColumnAlignment(col, Qt::AlignRight);
+
+ col = m_table->addColumn(i18n("Price"));
+ m_table->setColumnAlignment(col, Qt::AlignRight);
+
+ m_table->setMultiSelection(false);
+ m_table->setColumnWidthMode(0, QListView::Maximum);
+ m_table->header()->setResizeEnabled(true);
+ m_table->setAllColumnsShowFocus(true);
+ m_table->setShowSortIndicator(true);
+ m_table->restoreLayout(KGlobal::config(), "Investment Settings");
+
+ connect(m_table, SIGNAL(contextMenu(KListView*, QListViewItem* , const QPoint&)),
+ this, SLOT(slotListContextMenu(KListView*, QListViewItem*, const QPoint&)));
+ connect(m_table, SIGNAL(selectionChanged(QListViewItem *)), this, SLOT(slotSelectionChanged(QListViewItem *)));
+
+ connect(m_accountComboBox, SIGNAL(accountSelected(const QString&)),
+ this, SLOT(slotSelectAccount(const QString&)));
+
+ connect(m_table, SIGNAL(doubleClicked(QListViewItem*,const QPoint&, int)), kmymoney2->action("investment_edit"), SLOT(activate()));
+
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotLoadView()));
+}
+
+KInvestmentView::~KInvestmentView()
+{
+ m_table->saveLayout(KGlobal::config(), "Investment Settings");
+ delete d;
+}
+
+void KInvestmentView::slotSelectionChanged(QListViewItem *item)
+{
+ kmymoney2->slotSelectInvestment();
+
+ KInvestmentListItem *pItem = dynamic_cast<KInvestmentListItem*>(item);
+ if(pItem) {
+ try {
+ MyMoneyAccount account = MyMoneyFile::instance()->account(pItem->account().id());
+ kmymoney2->slotSelectInvestment(account);
+
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+ }
+}
+
+void KInvestmentView::slotListContextMenu(KListView* /* lv */, QListViewItem* /*item*/, const QPoint& /*point*/)
+{
+ kmymoney2->slotSelectInvestment();
+ KInvestmentListItem *pItem = dynamic_cast<KInvestmentListItem*>(m_table->selectedItem());
+ if(pItem) {
+ kmymoney2->slotSelectInvestment(MyMoneyFile::instance()->account(pItem->account().id()));
+ }
+ emit investmentRightMouseClick();
+}
+
+void KInvestmentView::slotLoadView(void)
+{
+ d->m_needReload = true;
+ if(isVisible()) {
+ loadView();
+ d->m_needReload = false;
+ // force a new account if the current one is empty
+ d->m_newAccountLoaded = d->m_account.id().isEmpty();
+ }
+}
+
+void KInvestmentView::loadAccounts(void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ // check if the current account still exists and make it the
+ // current account
+ if(!d->m_account.id().isEmpty()) {
+ try {
+ d->m_account = file->account(d->m_account.id());
+ } catch(MyMoneyException *e) {
+ delete e;
+ d->m_account = MyMoneyAccount();
+ }
+ }
+
+ m_accountComboBox->loadList(MyMoneyAccount::Investment);
+
+ if(d->m_account.id().isEmpty()) {
+ QStringList list = m_accountComboBox->accountList();
+ if(list.count()) {
+ QStringList::Iterator it;
+ for(it = list.begin(); it != list.end(); ++it) {
+ MyMoneyAccount a = file->account(*it);
+ if(a.accountType() == MyMoneyAccount::Investment) {
+ if(a.value("PreferredAccount") == "Yes") {
+ d->m_account = a;
+ break;
+ } else if(d->m_account.id().isEmpty()) {
+ d->m_account = a;
+ }
+ }
+ }
+ }
+ }
+
+ if(!d->m_account.id().isEmpty()) {
+ m_accountComboBox->setSelected(d->m_account);
+ try {
+ d->m_precision = MyMoneyMoney::denomToPrec(d->m_account.fraction());
+ } catch(MyMoneyException *e) {
+ qDebug("Security %s for account %s not found", d->m_account.currencyId().data(), d->m_account.name().data());
+ delete e;
+ d->m_precision = 2;
+ }
+ }
+}
+
+
+bool KInvestmentView::slotSelectAccount(const MyMoneyObject& obj)
+{
+ if(typeid(obj) != typeid(MyMoneyAccount))
+ return false;
+
+ if(d->m_recursion)
+ return false;
+
+ d->m_recursion = true;
+ const MyMoneyAccount& acc = dynamic_cast<const MyMoneyAccount&>(obj);
+ bool rc = slotSelectAccount(acc.id());
+ d->m_recursion = false;
+ return rc;
+}
+
+bool KInvestmentView::slotSelectAccount(const QString& id, const QString& transactionId, const bool /* reconciliation*/)
+{
+ bool rc = true;
+
+ if(!id.isEmpty()) {
+ // if the account id differs, then we have to do something
+ if(d->m_account.id() != id) {
+ try {
+ d->m_account = MyMoneyFile::instance()->account(id);
+ // if a stock account is selected, we show the
+ // the corresponding parent (investment) account
+ if(d->m_account.isInvest()) {
+ d->m_account = MyMoneyFile::instance()->account(d->m_account.parentAccountId());
+ }
+ // TODO if we don't have an investment account, then we should switch to the ledger view
+ d->m_newAccountLoaded = true;
+ if(d->m_account.accountType() == MyMoneyAccount::Investment) {
+ slotLoadView();
+ } else {
+ emit accountSelected(id, transactionId);
+ d->m_account = MyMoneyAccount();
+ d->m_needReload = true;
+ rc = false;
+ }
+
+ } catch(MyMoneyException* e) {
+ qDebug("Unable to retrieve account %s", id.data());
+ delete e;
+ rc = false;
+ }
+ } else {
+ emit accountSelected(d->m_account);
+ }
+ }
+
+ return rc;
+}
+
+void KInvestmentView::clear(void)
+{
+ // setup header font
+ QFont font = KMyMoneyGlobalSettings::listHeaderFont();
+ QFontMetrics fm( font );
+ int height = fm.lineSpacing()+6;
+ m_table->header()->setMinimumHeight(height);
+ m_table->header()->setMaximumHeight(height);
+ m_table->header()->setFont(font);
+
+ // setup cell font
+ font = KMyMoneyGlobalSettings::listCellFont();
+ m_table->setFont(font);
+
+ // clear the table
+ m_table->clear();
+
+ // and the selected account in the combo box
+ m_accountComboBox->setSelected(QString());
+}
+
+void KInvestmentView::loadView(void)
+{
+ // no account selected
+ emit accountSelected(MyMoneyAccount());
+
+ // clear the current contents ...
+ clear();
+
+ // ... load the combobox widget and select current account ...
+ loadAccounts();
+
+ if(d->m_account.id().isEmpty()) {
+ // if we don't have an account we bail out
+ setEnabled(false);
+ return;
+ }
+ setEnabled(true);
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+ bool showClosedAccounts = kmymoney2->toggleAction("view_show_all_accounts")->isChecked()
+ || !KMyMoneyGlobalSettings::hideClosedAccounts();
+ try {
+ d->m_account = file->account(d->m_account.id());
+ QStringList securities = d->m_account.accountList();
+
+ for(QStringList::ConstIterator it = securities.begin(); it != securities.end(); ++it) {
+ MyMoneyAccount acc = file->account(*it);
+ if(!acc.isClosed() || showClosedAccounts)
+ new KInvestmentListItem(m_table, acc);
+ }
+ } catch(MyMoneyException* e) {
+ qDebug("KInvestmentView::loadView() - selected account does not exist anymore");
+ d->m_account = MyMoneyAccount();
+ delete e;
+ }
+
+ // and tell everyone what's selected
+ emit accountSelected(d->m_account);
+}
+
+void KInvestmentView::show(void)
+{
+ if(d->m_needReload) {
+ loadView();
+ d->m_needReload = false;
+ d->m_newAccountLoaded = false;
+
+ } else {
+ emit accountSelected(d->m_account);
+ }
+
+ // don't forget base class implementation
+ KInvestmentViewDecl::show();
+}
+
+#include "kinvestmentview.moc"
diff --git a/kmymoney2/views/kinvestmentview.h b/kmymoney2/views/kinvestmentview.h
new file mode 100644
index 0000000..ba0aecc
--- /dev/null
+++ b/kmymoney2/views/kinvestmentview.h
@@ -0,0 +1,136 @@
+/***************************************************************************
+ kinvestmentview.h - description
+ -------------------
+ begin : Tue Jan 29 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KINVESTMENTVIEW_H
+#define KINVESTMENTVIEW_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneysecurity.h>
+#include <kmymoney/mymoneyaccount.h>
+#include "kinvestmentviewdecl.h"
+#include "kinvestmentlistitem.h"
+
+class MyMoneyTransaction;
+class MyMoneyInvestTransaction;
+
+/**
+ * @author Kevin Tambascio
+ */
+
+class KInvestmentView : public KInvestmentViewDecl
+{
+ Q_OBJECT
+
+public:
+ KInvestmentView(QWidget *parent=0, const char *name=0);
+ ~KInvestmentView();
+
+ /**
+ * Start reconciliation for the account in the current view
+ */
+ void reconcileAccount(void);
+
+public slots:
+ /**
+ * This slot is used to reload all data from the MyMoneyFile engine.
+ * All existing data in the view will be discarded.
+ * Call this e.g. if a new file has been loaded.
+ */
+ void slotLoadView(void);
+
+ /**
+ * This slot is used to select the correct ledger view type for
+ * the account specified by @p id. If @p transactionId is not
+ * empty, then the respective transaction will be selected.
+ *
+ * @param accountId Internal id used for the account to show
+ * @param transactionId Internal id used for the transaction to select
+ * @param reconciliation if true, the account will be selected in
+ * reconciliation mode. If false, it will
+ * be selected in regular ledger mode.
+ *
+ * @retval true selection of account referenced by @p id succeeded
+ * @retval false selection of account failed
+ */
+ bool slotSelectAccount(const QString& accountId, const QString& transactionId = QString(), const bool reconciliation = false);
+
+ /**
+ * This method is provided for convenience and acts as the method above.
+ */
+ bool slotSelectAccount(const MyMoneyObject& acc);
+
+ void show(void);
+
+protected:
+ /**
+ * This method reloads the account selection combo box of the
+ * view with all asset and liability accounts from the engine.
+ * If the account id of the current account held in @p m_accountId is
+ * empty or if the referenced account does not exist in the engine,
+ * the first account found in the list will be made the current account.
+ */
+ void loadAccounts(void);
+
+ /**
+ * clear the view
+ */
+ void clear(void);
+
+ void loadView(void);
+
+protected slots:
+ /**
+ * This slot receives the signal from the listview @c lv control that the context menu
+ * was requested for @c item at @c point.
+ */
+ void slotListContextMenu(KListView* lv, QListViewItem* item, const QPoint& point);
+
+ void slotSelectionChanged(QListViewItem *item);
+
+
+signals:
+ /**
+ * This signal is emitted, if an account has been selected
+ * which cannot handled by this view.
+ */
+ void accountSelected(const QString& accountId, const QString& transactionId);
+
+ void accountSelected(const MyMoneyObject&);
+
+ void investmentRightMouseClick(void);
+
+private:
+ /// \internal d-pointer class.
+ class Private;
+ /// \internal d-pointer instance.
+ Private* const d;
+};
+
+#endif
diff --git a/kmymoney2/views/kinvestmentviewdecl.ui b/kmymoney2/views/kinvestmentviewdecl.ui
new file mode 100644
index 0000000..1c74d50
--- /dev/null
+++ b/kmymoney2/views/kinvestmentviewdecl.ui
@@ -0,0 +1,83 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KInvestmentViewDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KInvestmentViewDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>707</width>
+ <height>346</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Investment Summary</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Select Account:</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyAccountCombo">
+ <property name="name">
+ <cstring>m_accountComboBox</cstring>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>280</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="KListView">
+ <property name="name">
+ <cstring>m_table</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="shadeSortColumn">
+ <bool>false</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Summary of the equities contained in this account, showing your holdings and their most recent price.</string>
+ </property>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/views/kmymoneyfile.cpp b/kmymoney2/views/kmymoneyfile.cpp
new file mode 100644
index 0000000..4046cc0
--- /dev/null
+++ b/kmymoney2/views/kmymoneyfile.cpp
@@ -0,0 +1,114 @@
+/***************************************************************************
+ kmymoneyfile.cpp - description
+ -------------------
+ begin : Mon Jun 10 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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 file is currently not used anymore, but kept here for reference purposes
+ */
+#if 0
+
+#include <klocale.h>
+
+#include "kmymoneyfile.h"
+#include "../mymoney/storage/mymoneyseqaccessmgr.h"
+
+KMyMoneyFile::KMyMoneyFile()
+{
+ // m_file = MyMoneyFile::instance();
+ m_storage = new MyMoneySeqAccessMgr;
+ // m_file->attachStorage(m_storage);
+ m_open = false; // lie a little bit for now
+}
+
+/*
+KMyMoneyFile::KMyMoneyFile(const QString&)
+{
+}
+*/
+
+KMyMoneyFile::~KMyMoneyFile()
+{
+ if(m_storage) {
+ MyMoneyFile::instance()->detachStorage(m_storage);
+ delete m_storage;
+ }
+
+ // if(m_file)
+ // delete m_file;
+}
+
+/*
+KMyMoneyFile *KMyMoneyFile::instance()
+{
+ if (_instance == 0) {
+ _instance = new KMyMoneyFile;
+ }
+
+ return _instance;
+}
+
+MyMoneyFile* KMyMoneyFile::file()
+{
+ return m_file;
+}
+*/
+
+MyMoneySeqAccessMgr* KMyMoneyFile::storage()
+{
+ return m_storage;
+}
+
+void KMyMoneyFile::reset()
+{
+/*
+ delete m_storage;
+ delete m_file;
+ m_storage = new MyMoneySeqAccessMgr;
+ m_file = new MyMoneyFile(m_storage);
+*/
+}
+
+void KMyMoneyFile::open()
+{
+ if(m_storage != 0)
+ close();
+
+ m_storage = new MyMoneySeqAccessMgr;
+ MyMoneyFile::instance()->attachStorage(m_storage);
+ m_open = true;
+}
+
+void KMyMoneyFile::close()
+{
+ if(m_storage != 0) {
+ MyMoneyFile::instance()->detachStorage(m_storage);
+ delete m_storage;
+ m_storage = 0;
+ }
+ m_open = false;
+}
+
+bool KMyMoneyFile::isOpen()
+{
+ return m_open;
+}
+
+#endif
diff --git a/kmymoney2/views/kmymoneyfile.h b/kmymoney2/views/kmymoneyfile.h
new file mode 100644
index 0000000..ccda128
--- /dev/null
+++ b/kmymoney2/views/kmymoneyfile.h
@@ -0,0 +1,61 @@
+/***************************************************************************
+ kmymoneyfile.h - description
+ -------------------
+ begin : Mon Jun 10 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYFILE_H
+#define KMYMONEYFILE_H
+
+/*
+ * This file is currently not used anymore, but kept here for reference purposes
+ */
+#if 0
+#include "../mymoney/mymoneyaccount.h"
+class MyMoneySeqAccessMgr;
+
+/**
+ *@author Michael Edwardes
+ */
+
+class KMyMoneyFile {
+private:
+ // static KMyMoneyFile *_instance;
+ // MyMoneyFile *m_file;
+ MyMoneySeqAccessMgr *m_storage;
+ bool m_open;
+
+protected:
+ // KMyMoneyFile(const QString&);
+
+public:
+ KMyMoneyFile();
+ ~KMyMoneyFile();
+// static KMyMoneyFile *instance();
+
+ // MyMoneyFile* file();
+ MyMoneySeqAccessMgr* storage();
+ void reset();
+ void open();
+ void close();
+ bool isOpen();
+
+};
+#endif
+#endif
diff --git a/kmymoney2/views/kmymoneytransaction.cpp b/kmymoney2/views/kmymoneytransaction.cpp
new file mode 100644
index 0000000..ee16a6a
--- /dev/null
+++ b/kmymoney2/views/kmymoneytransaction.cpp
@@ -0,0 +1,53 @@
+/***************************************************************************
+ kmymoneytransaction.cpp - description
+ -------------------
+ begin : Fri Sep 5 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+
+#include "kmymoneytransaction.h"
+
+KMyMoneyTransaction::KMyMoneyTransaction()
+{
+}
+
+KMyMoneyTransaction::KMyMoneyTransaction(const MyMoneyTransaction& t) :
+ MyMoneyTransaction(t)
+{
+}
+
+KMyMoneyTransaction::~KMyMoneyTransaction()
+{
+}
+
+void KMyMoneyTransaction::setSplitId(const QString& id)
+{
+ m_splitId = id;
+}
+
+
diff --git a/kmymoney2/views/kmymoneytransaction.h b/kmymoney2/views/kmymoneytransaction.h
new file mode 100644
index 0000000..4deb184
--- /dev/null
+++ b/kmymoney2/views/kmymoneytransaction.h
@@ -0,0 +1,61 @@
+/***************************************************************************
+ kmymoneytransaction.h - description
+ -------------------
+ begin : Fri Sep 5 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYTRANSACTION_H
+#define KMYMONEYTRANSACTION_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneytransaction.h>
+
+/**
+ * @author Thomas Baumgart
+ */
+
+/**
+ * This class is used to store the information required to
+ * display a transaction in a ledger view (register).
+ * It is derived from MyMoneyTransaction but contains additional
+ * information.
+ */
+class KMyMoneyTransaction : public MyMoneyTransaction {
+public:
+ KMyMoneyTransaction();
+ KMyMoneyTransaction(const MyMoneyTransaction& t);
+ ~KMyMoneyTransaction();
+
+ void setSplitId(const QString& id);
+ const QString& splitId(void) const { return m_splitId; };
+
+private:
+ QString m_splitId;
+};
+
+
+#endif
diff --git a/kmymoney2/views/kmymoneyview.cpp b/kmymoney2/views/kmymoneyview.cpp
new file mode 100644
index 0000000..8719d79
--- /dev/null
+++ b/kmymoney2/views/kmymoneyview.cpp
@@ -0,0 +1,2248 @@
+/***************************************************************************
+ kmymoneyview.cpp
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes
+ 2004 by Thomas Baumgart
+ email : mte@users.sourceforge.net
+ ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <unistd.h>
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlabel.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qprogressdialog.h>
+#include <qtextcodec.h>
+#include <qstatusbar.h>
+
+#include <qcursor.h>
+#include <qregexp.h>
+#include <qlayout.h>
+#include <qobjectlist.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include "kdecompat.h"
+
+#include <kfiledialog.h>
+#include <kglobal.h>
+#include <kstandarddirs.h>
+#include <kicontheme.h>
+#include <kiconloader.h>
+
+#include <kmessagebox.h>
+#include <kurl.h>
+#include <kio/netaccess.h>
+#include <ktempfile.h>
+#include <ksavefile.h>
+#include <kfilterdev.h>
+#include <kfilterbase.h>
+#include <kfileitem.h>
+#include <kpushbutton.h>
+#include <kapplication.h>
+#include <kdebug.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+// This is include is required here, because later it will produce
+// compile errors on gcc 3.2 as we redefine new() in case of _CHECK_MEMORY
+// being defined. To avoid these problems, we just include the header
+// already here in this case
+#ifdef _CHECK_MEMORY
+#include <string>
+#endif
+
+#include "../dialogs/kendingbalancedlg.h"
+#include "../dialogs/kchooseimportexportdlg.h"
+#include "../dialogs/kcsvprogressdlg.h"
+#include "../dialogs/kimportdlg.h"
+#include "../dialogs/kexportdlg.h"
+#include "../dialogs/knewloanwizard.h"
+#include "../dialogs/kcurrencyeditdlg.h"
+#include "../dialogs/kfindtransactiondlg.h"
+#include "../dialogs/knewbankdlg.h"
+#include "../dialogs/knewfiledlg.h"
+
+#include "../mymoney/storage/mymoneyseqaccessmgr.h"
+#include "../mymoney/storage/mymoneydatabasemgr.h"
+#include "../mymoney/storage/imymoneystorageformat.h"
+#include "../mymoney/storage/mymoneystoragebin.h"
+#include "../mymoney/mymoneyexception.h"
+#include "../mymoney/storage/mymoneystoragexml.h"
+#include "../mymoney/storage/mymoneystoragesql.h"
+#include "../converter/mymoneygncreader.h"
+#include "../mymoney/storage/mymoneystorageanon.h"
+
+#include <kmymoney/transactioneditor.h>
+#include <kmymoney/kmymoneyglobalsettings.h>
+
+#include "kmymoneyview.h"
+#include "khomeview.h"
+#include "kaccountsview.h"
+#include "kcategoriesview.h"
+#include "kinstitutionsview.h"
+#include "kpayeesview.h"
+#include "kscheduledview.h"
+#include "kgloballedgerview.h"
+#include "kinvestmentview.h"
+#include "kreportsview.h"
+#include "kbudgetview.h"
+#include "kforecastview.h"
+
+#include <kmymoney/kmymoneytitlelabel.h>
+
+
+#include "../kmymoney2.h"
+#include "../kmymoneyutils.h"
+
+#include <libkgpgfile/kgpgfile.h>
+
+#define COMPRESSION_MIME_TYPE "application/x-gzip"
+#define RECOVER_KEY_ID "0xD2B08440"
+
+
+KMyMoneyView::KMyMoneyView(QWidget *parent, const char *name)
+ : KJanusWidget(parent, name, KJanusWidget::IconList),
+ // m_bankRightClick(false),
+ m_inConstructor(true),
+ m_fileOpen(false),
+ m_fmode(0600)
+{
+ // the global variable kmymoney2 is not yet assigned. So we construct it here
+ QObject* kmymoney2 = parent->parent();
+ const int iconSize = (KMyMoneyGlobalSettings::iconSize()+1)*16;
+ newStorage();
+
+ // Page 0
+ m_homeViewFrame = addVBoxPage( i18n("Home"), i18n("Home"),
+ DesktopIcon("home", iconSize));
+
+ m_homeView = new KHomeView(m_homeViewFrame, "HomeView");
+ connect(m_homeView, SIGNAL(ledgerSelected(const QString&, const QString&)),
+ this, SLOT(slotLedgerSelected(const QString&, const QString&)));
+ connect(m_homeView, SIGNAL(scheduleSelected(const QString&)),
+ this, SLOT(slotScheduleSelected(const QString&)));
+ connect(m_homeView, SIGNAL(reportSelected(const QString&)),
+ this, SLOT(slotShowReport(const QString&)));
+
+ // Page 1
+ m_institutionsViewFrame = addVBoxPage( i18n("Institutions"), i18n("Institutions"),
+ DesktopIcon("institutions", iconSize));
+ addTitleBar(m_institutionsViewFrame, i18n("Institutions"));
+ m_institutionsView = new KInstitutionsView(m_institutionsViewFrame, "InstitutionsView");
+ connect(m_institutionsView, SIGNAL(selectObject(const MyMoneyObject&)), kmymoney2, SLOT(slotSelectAccount(const MyMoneyObject&)));
+ connect(m_institutionsView, SIGNAL(selectObject(const MyMoneyObject&)), kmymoney2, SLOT(slotSelectInstitution(const MyMoneyObject&)));
+ connect(m_institutionsView, SIGNAL(openContextMenu(const MyMoneyObject&)), kmymoney2, SLOT(slotShowAccountContextMenu(const MyMoneyObject&)));
+ connect(m_institutionsView, SIGNAL(openContextMenu(const MyMoneyObject&)), kmymoney2, SLOT(slotShowInstitutionContextMenu(const MyMoneyObject&)));
+ connect(m_institutionsView, SIGNAL(openObject(const MyMoneyObject&)), kmymoney2, SLOT(slotInstitutionEdit(const MyMoneyObject&)));
+ connect(m_institutionsView, SIGNAL(openObject(const MyMoneyObject&)), kmymoney2, SLOT(slotAccountOpen(const MyMoneyObject&)));
+ connect(m_institutionsView, SIGNAL(reparent(const MyMoneyAccount&, const MyMoneyInstitution&)), kmymoney2, SLOT(slotReparentAccount(const MyMoneyAccount&, const MyMoneyInstitution&)));
+ connect(this, SIGNAL(reconciliationStarts(const MyMoneyAccount&, const QDate&, const MyMoneyMoney&)), m_institutionsView, SLOT(slotReconcileAccount(const MyMoneyAccount&, const QDate&, const MyMoneyMoney&)));
+
+ // Page 2
+ m_accountsViewFrame = addVBoxPage( i18n("Accounts"), i18n("Accounts"),
+ DesktopIcon("accounts", iconSize));
+ addTitleBar(m_accountsViewFrame, i18n("Accounts"));
+ m_accountsView = new KAccountsView(m_accountsViewFrame, "AccountsView");
+ connect(m_accountsView, SIGNAL(selectObject(const MyMoneyObject&)), kmymoney2, SLOT(slotSelectAccount(const MyMoneyObject&)));
+ connect(m_accountsView, SIGNAL(selectObject(const MyMoneyObject&)), kmymoney2, SLOT(slotSelectInstitution(const MyMoneyObject&)));
+ connect(m_accountsView, SIGNAL(selectObject(const MyMoneyObject&)), kmymoney2, SLOT(slotSelectInvestment(const MyMoneyObject&)));
+ connect(m_accountsView, SIGNAL(openContextMenu(const MyMoneyObject&)), kmymoney2, SLOT(slotShowAccountContextMenu(const MyMoneyObject&)));
+ connect(m_accountsView, SIGNAL(openObject(const MyMoneyObject&)), kmymoney2, SLOT(slotAccountOpen(const MyMoneyObject&)));
+ connect(m_accountsView, SIGNAL(reparent(const MyMoneyAccount&, const MyMoneyAccount&)), kmymoney2, SLOT(slotReparentAccount(const MyMoneyAccount&, const MyMoneyAccount&)));
+ connect(this, SIGNAL(kmmFilePlugin(unsigned int)), m_accountsView, SLOT(slotUpdateIconPos(unsigned int)));
+ connect(this, SIGNAL(reconciliationStarts(const MyMoneyAccount&, const QDate&, const MyMoneyMoney&)), m_accountsView, SLOT(slotReconcileAccount(const MyMoneyAccount&, const QDate&, const MyMoneyMoney&)));
+
+ // Page 3
+ m_scheduleViewFrame = addVBoxPage( i18n("Scheduled\ntransactions"), i18n("Bills & Reminders"),
+ DesktopIcon("schedule", iconSize));
+ addTitleBar(m_scheduleViewFrame, i18n("Scheduled transactions"));
+ m_scheduledView = new KScheduledView(m_scheduleViewFrame, "ScheduledView");
+ connect(kmymoney2, SIGNAL(fileLoaded(const KURL&)), m_scheduledView, SLOT(slotReloadView()));
+ connect(m_scheduledView, SIGNAL(scheduleSelected(const MyMoneySchedule&)), kmymoney2, SLOT(slotSelectSchedule(const MyMoneySchedule&)));
+ connect(m_scheduledView, SIGNAL(openContextMenu()), kmymoney2, SLOT(slotShowScheduleContextMenu()));
+ connect(m_scheduledView, SIGNAL(enterSchedule()), kmymoney2, SLOT(slotScheduleEnter()));
+ connect(m_scheduledView, SIGNAL(skipSchedule()), kmymoney2, SLOT(slotScheduleSkip()));
+ connect(m_scheduledView, SIGNAL(editSchedule()), kmymoney2, SLOT(slotScheduleEdit()));
+
+ // Page 4
+ m_categoriesViewFrame = addVBoxPage( i18n("Categories"), i18n("Categories"),
+ DesktopIcon("categories", iconSize));
+ addTitleBar(m_categoriesViewFrame, i18n("Categories"));
+ m_categoriesView = new KCategoriesView(m_categoriesViewFrame, "CategoriesView");
+ connect(m_categoriesView, SIGNAL(selectObject(const MyMoneyObject&)), kmymoney2, SLOT(slotSelectAccount(const MyMoneyObject&)));
+ connect(m_categoriesView, SIGNAL(selectObject(const MyMoneyObject&)), kmymoney2, SLOT(slotSelectInstitution(const MyMoneyObject&)));
+ connect(m_categoriesView, SIGNAL(openContextMenu(const MyMoneyObject&)), kmymoney2, SLOT(slotShowAccountContextMenu(const MyMoneyObject&)));
+ connect(m_categoriesView, SIGNAL(openObject(const MyMoneyObject&)), kmymoney2, SLOT(slotAccountOpen(const MyMoneyObject&)));
+ connect(m_categoriesView, SIGNAL(reparent(const MyMoneyAccount&, const MyMoneyAccount&)), kmymoney2, SLOT(slotReparentAccount(const MyMoneyAccount&, const MyMoneyAccount&)));
+
+ // Page 5
+ m_payeesViewFrame = addVBoxPage( i18n("Payees"), i18n("Payees"),
+ DesktopIcon("payee", iconSize));
+ addTitleBar(m_payeesViewFrame, i18n("Payees"));
+ m_payeesView = new KPayeesView(m_payeesViewFrame, "PayeesView");
+ connect(kmymoney2, SIGNAL(payeeCreated(const QString&)), m_payeesView, SLOT(slotSelectPayeeAndTransaction(const QString&)));
+ connect(kmymoney2, SIGNAL(payeeRename()), m_payeesView, SLOT(slotStartRename()));
+ connect(m_payeesView, SIGNAL(openContextMenu(const MyMoneyObject&)), kmymoney2, SLOT(slotShowPayeeContextMenu()));
+ connect(m_payeesView, SIGNAL(selectObjects(const QValueList<MyMoneyPayee>&)), kmymoney2, SLOT(slotSelectPayees(const QValueList<MyMoneyPayee>&)));
+ connect(m_payeesView, SIGNAL(transactionSelected(const QString&, const QString&)),
+ this, SLOT(slotLedgerSelected(const QString&, const QString&)));
+
+ // Page 6
+ m_ledgerViewFrame = addVBoxPage( i18n("Ledgers"), i18n("Ledgers"),
+ DesktopIcon("ledger", iconSize));
+ m_ledgerView = new KGlobalLedgerView(m_ledgerViewFrame, "GlobalLedgerView");
+ connect(m_ledgerView, SIGNAL(accountSelected(const MyMoneyObject&)), kmymoney2, SLOT(slotSelectAccount(const MyMoneyObject&)));
+ connect(m_ledgerView, SIGNAL(openContextMenu()), kmymoney2, SLOT(slotShowTransactionContextMenu()));
+ connect(m_ledgerView, SIGNAL(transactionsSelected(const KMyMoneyRegister::SelectedTransactions&)), kmymoney2, SLOT(slotSelectTransactions(const KMyMoneyRegister::SelectedTransactions&)));
+ connect(m_ledgerView, SIGNAL(newTransaction()), kmymoney2, SLOT(slotTransactionsNew()));
+ connect(m_ledgerView, SIGNAL(cancelOrEndEdit(bool&)), kmymoney2, SLOT(slotTransactionsCancelOrEnter(bool&)));
+ connect(m_ledgerView, SIGNAL(startEdit()), kmymoney2, SLOT(slotTransactionsEdit()));
+ connect(m_ledgerView, SIGNAL(endEdit()), kmymoney2, SLOT(slotTransactionsEnter()));
+ connect(m_ledgerView, SIGNAL(toggleReconciliationFlag()), kmymoney2, SLOT(slotToggleReconciliationFlag()));
+ connect(this, SIGNAL(reconciliationStarts(const MyMoneyAccount&, const QDate&, const MyMoneyMoney&)), m_ledgerView, SLOT(slotSetReconcileAccount(const MyMoneyAccount&, const QDate&, const MyMoneyMoney&)));
+ connect(kmymoney2, SIGNAL(selectAllTransactions()), m_ledgerView, SLOT(slotSelectAllTransactions()));
+
+ // Page 7
+ m_investmentViewFrame = addVBoxPage( i18n("Investments"), i18n("Investments"),
+ DesktopIcon("investments", iconSize));
+ addTitleBar(m_investmentViewFrame, i18n("Investments"));
+ m_investmentView = new KInvestmentView(m_investmentViewFrame, "InvestmentView");
+ connect(m_investmentView, SIGNAL(accountSelected(const QString&, const QString&)),
+ this, SLOT(slotLedgerSelected(const QString&, const QString&)));
+ connect(m_investmentView, SIGNAL(accountSelected(const MyMoneyObject&)), kmymoney2, SLOT(slotSelectAccount(const MyMoneyObject&)));
+ connect(m_investmentView, SIGNAL(investmentRightMouseClick()), kmymoney2, SLOT(slotShowInvestmentContextMenu()));
+
+ // Page 8
+ m_reportsViewFrame = addVBoxPage(i18n("Reports"), i18n("Reports"),
+ DesktopIcon("report", iconSize));
+ m_reportsView = new KReportsView(m_reportsViewFrame, "ReportsView");
+
+ // Page 9
+ m_budgetViewFrame = addVBoxPage(i18n("Budgets"), i18n("Budgets"),
+ DesktopIcon("budget", iconSize));
+ addTitleBar(m_budgetViewFrame, i18n("Budgets"));
+ m_budgetView = new KBudgetView(m_budgetViewFrame, "BudgetView");
+ connect(kmymoney2, SIGNAL(fileLoaded(const KURL&)), m_budgetView, SLOT(slotRefreshView()));
+ connect(m_budgetView, SIGNAL(openContextMenu(const MyMoneyObject&)), kmymoney2, SLOT(slotShowBudgetContextMenu()));
+ connect(m_budgetView, SIGNAL(selectObjects(const QValueList<MyMoneyBudget>&)), kmymoney2, SLOT(slotSelectBudget(const QValueList<MyMoneyBudget>&)));
+ connect(kmymoney2, SIGNAL(budgetRename()), m_budgetView, SLOT(slotStartRename()));
+
+ // Page 10
+ m_forecastViewFrame = addVBoxPage( i18n("Forecast"), i18n("Forecast"),
+ DesktopIcon("forcast", iconSize));
+ addTitleBar(m_forecastViewFrame, i18n("Forecast"));
+ m_forecastView = new KForecastView(m_forecastViewFrame, "ForecastView");
+
+ // get rid of the title text
+ QWidget* widget = dynamic_cast<QWidget*>(child("KJanusWidgetTitleLabel", "QLabel"));
+ if(widget)
+ widget->hide();
+
+ // and the separator below it
+ widget = dynamic_cast<QWidget*>(child(0, "KSeparator"));
+ if(widget)
+ widget->hide();
+
+ // select the page first, before connecting the aboutToShow signal
+ // because we don't want to override the information stored in the config file
+ showPage(0);
+ connect(this, SIGNAL(aboutToShowPage(QWidget*)), this, SLOT(slotRememberPage(QWidget*)));
+
+ m_inConstructor = false;
+}
+
+KMyMoneyView::~KMyMoneyView()
+{
+ removeStorage();
+}
+
+void KMyMoneyView::addTitleBar(QWidget* parent, const QString& title)
+{
+ KMyMoneyTitleLabel* label = new KMyMoneyTitleLabel( parent, "titleLabel" );
+ label->setMinimumSize( QSize( 100, 30 ) );
+ label->setRightImageFile("pics/titlelabel_background.png" );
+ label->setText(title);
+}
+
+void KMyMoneyView::showTitleBar(bool show)
+{
+ QObjectList *l = queryList( 0, "titleLabel" );
+ QObjectListIterator it( *l ); // iterate over the labels
+ QObject *obj;
+
+ while ( (obj = it.current()) != 0 ) {
+ // for each found object...
+ ++it;
+ ((QWidget*)obj)->setShown( show );
+ }
+ delete l; // delete the list, not the objects
+}
+
+bool KMyMoneyView::showPage(int index)
+{
+ // reset all selected items before showing the selected view
+ // but not while we're in our own constructor
+ if(!m_inConstructor && index != activePageIndex()) {
+ kmymoney2->slotResetSelections();
+ }
+
+ // pretend we're in the constructor to avoid calling the
+ // above resets. For some reason which I don't know the details
+ // of, KJanusWidget::showPage() calls itself recursively. This
+ // screws up the action handling, as items could have been selected
+ // in the meantime. We prevent this by setting the m_inConstructor
+ // to true and reset it to the previos value when we leave this method.
+ bool prevConstructor = m_inConstructor;
+ m_inConstructor = true;
+
+ bool rc = KJanusWidget::showPage(index);
+
+ m_inConstructor = prevConstructor;
+
+ if(!m_inConstructor) {
+ // fixup some actions that are dependant on the view
+ // this does not work during construction
+ kmymoney2->slotUpdateActions();
+ }
+
+ return rc;
+}
+
+bool KMyMoneyView::canPrint(void)
+{
+ bool rc = (
+ activePageIndex() == pageIndex(m_reportsViewFrame) ||
+ activePageIndex() == pageIndex(m_homeViewFrame)
+ );
+ return rc;
+}
+
+bool KMyMoneyView::canCreateTransactions(const KMyMoneyRegister::SelectedTransactions& /* list */, QString& tooltip) const
+{
+ // we can only create transactions in the ledger view so
+ // we check that this is the active page
+
+ bool rc = (activePageIndex() == pageIndex(m_ledgerViewFrame));
+ if(rc)
+ rc = m_ledgerView->canCreateTransactions(tooltip);
+ else
+ tooltip = i18n("Creating transactions can only be performed in the ledger view");
+ return rc;
+}
+
+bool KMyMoneyView::canModifyTransactions(const KMyMoneyRegister::SelectedTransactions& list, QString& tooltip) const
+{
+ // we can only modify transactions in the ledger view so
+ // we check that this is the active page
+
+ bool rc = (activePageIndex() == pageIndex(m_ledgerViewFrame));
+
+ if(rc) {
+ rc = m_ledgerView->canModifyTransactions(list, tooltip);
+ } else {
+ tooltip = i18n("Modifying transactions can only be performed in the ledger view");
+ }
+ return rc;
+}
+
+bool KMyMoneyView::canDuplicateTransactions(const KMyMoneyRegister::SelectedTransactions& list, QString& tooltip) const
+{
+ // we can only duplicate transactions in the ledger view so
+ // we check that this is the active page
+
+ bool rc = (activePageIndex() == pageIndex(m_ledgerViewFrame));
+
+ if(rc) {
+ rc = m_ledgerView->canDuplicateTransactions(list, tooltip);
+ } else {
+ tooltip = i18n("Duplicating transactions can only be performed in the ledger view");
+ }
+ return rc;
+}
+
+bool KMyMoneyView::canEditTransactions(const KMyMoneyRegister::SelectedTransactions& list, QString& tooltip) const
+{
+ bool rc;
+ // we can only edit transactions in the ledger view so
+ // we check that this is the active page
+
+ if((rc = canModifyTransactions(list, tooltip)) == true) {
+ tooltip = i18n("Edit the current selected transactions");
+ rc = m_ledgerView->canEditTransactions(list, tooltip);
+ }
+ return rc;
+}
+
+bool KMyMoneyView::createNewTransaction(void)
+{
+ bool rc = false;
+ KMyMoneyRegister::SelectedTransactions list;
+ QString txt;
+ if(canCreateTransactions(list, txt)) {
+ rc = m_ledgerView->selectEmptyTransaction();
+ }
+ return rc;
+}
+
+TransactionEditor* KMyMoneyView::startEdit(const KMyMoneyRegister::SelectedTransactions& list)
+{
+ TransactionEditor* editor = 0;
+ QString txt;
+ if(canEditTransactions(list, txt) || canCreateTransactions(list, txt)) {
+ editor = m_ledgerView->startEdit(list);
+ }
+ return editor;
+}
+
+void KMyMoneyView::newStorage(storageTypeE t)
+{
+ removeStorage();
+ MyMoneyFile* file = MyMoneyFile::instance();
+ if (t == Memory) file->attachStorage(new MyMoneySeqAccessMgr);
+ else file->attachStorage(new MyMoneyDatabaseMgr);
+}
+
+void KMyMoneyView::removeStorage(void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ IMyMoneyStorage* p = file->storage();
+ if(p != 0) {
+ file->detachStorage(p);
+ delete p;
+ }
+}
+
+void KMyMoneyView::enableViews(int state)
+{
+ if(state == -1)
+ state = m_fileOpen;
+
+ m_accountsViewFrame->setEnabled(state);
+ m_institutionsViewFrame->setEnabled(state);
+ m_scheduleViewFrame->setEnabled(state);
+ m_categoriesViewFrame->setEnabled(state);
+ m_payeesViewFrame->setEnabled(state);
+ m_budgetViewFrame->setEnabled(state);
+ m_ledgerViewFrame->setEnabled(state);
+ m_investmentViewFrame->setEnabled(state);
+ m_reportsViewFrame->setEnabled(state);
+ m_forecastViewFrame->setEnabled(state);
+
+ emit viewStateChanged(state != 0);
+}
+
+void KMyMoneyView::slotLedgerSelected(const QString& _accId, const QString& transaction)
+{
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(_accId);
+ QString accId(_accId);
+
+ switch(acc.accountType()) {
+ case MyMoneyAccount::Stock:
+ // if a stock account is selected, we show the
+ // the corresponding parent (investment) account
+ acc = MyMoneyFile::instance()->account(acc.parentAccountId());
+ accId = acc.id();
+ // tricky fall through here
+
+ case MyMoneyAccount::Checkings:
+ case MyMoneyAccount::Savings:
+ case MyMoneyAccount::Cash:
+ case MyMoneyAccount::CreditCard:
+ case MyMoneyAccount::Loan:
+ case MyMoneyAccount::Asset:
+ case MyMoneyAccount::Liability:
+ case MyMoneyAccount::AssetLoan:
+ case MyMoneyAccount::Income:
+ case MyMoneyAccount::Expense:
+ case MyMoneyAccount::Investment:
+ case MyMoneyAccount::Equity:
+ showPage(pageIndex(m_ledgerViewFrame));
+ m_ledgerView->slotSelectAccount(accId, transaction);
+ break;
+
+ case MyMoneyAccount::CertificateDep:
+ case MyMoneyAccount::MoneyMarket:
+ case MyMoneyAccount::Currency:
+ qDebug("No ledger view available for account type %d", acc.accountType());
+ break;
+
+ default:
+ qDebug("Unknown account type %d in KMyMoneyView::slotLedgerSelected", acc.accountType());
+ break;
+ }
+}
+
+void KMyMoneyView::slotPayeeSelected(const QString& payee, const QString& account, const QString& transaction)
+{
+ showPage(pageIndex(m_payeesViewFrame));
+ m_payeesView->slotSelectPayeeAndTransaction(payee, account, transaction);
+}
+
+void KMyMoneyView::slotScheduleSelected(const QString& scheduleId)
+{
+ MyMoneySchedule sched = MyMoneyFile::instance()->schedule(scheduleId);
+ kmymoney2->slotSelectSchedule(sched);
+}
+
+void KMyMoneyView::slotShowReport(const QString& reportid)
+{
+ showPage(pageIndex(m_reportsViewFrame));
+ m_reportsView->slotOpenReport(reportid);
+}
+
+void KMyMoneyView::slotShowReport(const MyMoneyReport& report)
+{
+ showPage(pageIndex(m_reportsViewFrame));
+ m_reportsView->slotOpenReport(report);
+}
+
+bool KMyMoneyView::fileOpen(void)
+{
+ return m_fileOpen;
+}
+
+void KMyMoneyView::closeFile(void)
+{
+ if ( m_reportsView )
+ m_reportsView->slotCloseAll();
+
+ emit kmmFilePlugin (preClose);
+ if (isDatabase())
+ MyMoneyFile::instance()->storage()->close(); // to log off a database user
+ newStorage();
+ slotShowHomePage();
+
+ emit kmmFilePlugin (postClose);
+ m_fileOpen = false;
+}
+
+void KMyMoneyView::ungetString(QIODevice *qfile, char *buf, int len)
+{
+ buf = &buf[len-1];
+ while(len--) {
+ qfile->ungetch(*buf--);
+ }
+}
+
+bool KMyMoneyView::readFile(const KURL& url)
+{
+ QString filename;
+
+// newStorage();
+ m_fileOpen = false;
+ bool isEncrypted = false;
+
+ IMyMoneyStorageFormat* pReader = NULL;
+
+#if KDE_IS_VERSION(3,2,0)
+ if(!url.isValid()) {
+#else
+ if(url.isMalformed()) {
+#endif
+ qDebug("Invalid URL '%s'", url.url().latin1());
+ return false;
+ }
+
+ if (url.protocol() == "sql") { // handle reading of database
+ //newStorage(Database);
+ MyMoneyFile::instance()->detachStorage();
+ m_fileType = KmmDb;
+ // get rid of the mode parameter which is now redundant
+ KURL newUrl(url);
+ if (!url.queryItem("mode").isNull()) {
+ newUrl.removeQueryItem("mode");
+ }
+ return (openDatabase(newUrl)); // on error, any message will have been displayed
+ }
+
+ newStorage();
+
+ if(url.isLocalFile()) {
+ filename = url.path();
+
+ } else {
+ if(!KIO::NetAccess::download(url, filename, NULL)) {
+ KMessageBox::detailedError(this,
+ i18n("Error while loading file '%1'!").arg(url.url()),
+ KIO::NetAccess::lastErrorString(),
+ i18n("File access error"));
+ return false;
+ }
+ }
+
+ // let's glimps into the file to figure out, if it's one
+ // of the old (uncompressed) or new (compressed) files.
+ QFile file(filename);
+ QFileInfo info(file);
+ if(!info.isFile()) {
+ QString msg=i18n("<b>%1</b> is not a KMyMoney file.").arg(filename);
+ KMessageBox::error(this, QString("<p>")+msg, i18n("Filetype Error"));
+ return false;
+ }
+ m_fmode = 0600;
+ m_fmode |= info.permission(QFileInfo::ReadGroup) ? 040 : 0;
+ m_fmode |= info.permission(QFileInfo::WriteGroup) ? 020 : 0;
+ m_fmode |= info.permission(QFileInfo::ReadOther) ? 004 : 0;
+ m_fmode |= info.permission(QFileInfo::WriteOther) ? 002 : 0;
+
+ QIODevice *qfile = 0;
+ bool rc = true;
+
+ // There's a problem with the KFilterDev and KGPGFile classes:
+ // One supports the at(n) member but not ungetch() together with
+ // readBlock() and the other does not provide an at(n) method but
+ // supports readBlock() that considers the ungetch() buffer. QFile
+ // supports everything so this is not a problem. We solve the problem
+ // for now by keeping track of which method can be used.
+ bool haveAt = true;
+
+ emit kmmFilePlugin (preOpen);
+ ::timetrace("start reading file");
+ if(file.open(IO_ReadOnly)) {
+ QByteArray hdr(2);
+ int cnt;
+ cnt = file.readBlock(hdr.data(), 2);
+ file.close();
+
+ if(cnt == 2) {
+ if(QString(hdr) == QString("\037\213")) { // gzipped?
+ ::timetrace("detected GZIP");
+ qfile = KFilterDev::deviceForFile(filename, COMPRESSION_MIME_TYPE);
+ } else if(QString(hdr) == QString("--")){ // PGP ASCII armored?
+ ::timetrace("detected GPG");
+ if(KGPGFile::GPGAvailable()) {
+ ::timetrace("have GPG");
+ qfile = new KGPGFile(filename);
+ haveAt = false;
+ isEncrypted = true;
+ } else {
+ KMessageBox::sorry(this, QString("<qt>%1</qt>"). arg(i18n("GPG is not available for decryption of file <b>%1</b>").arg(filename)));
+ qfile = new QFile(file.name());
+ }
+ } else {
+ // we can't use file directly, as we delete qfile later on
+ qfile = new QFile(file.name());
+ }
+
+ ::timetrace("open file");
+ if(qfile->open(IO_ReadOnly)) {
+ try {
+ hdr.resize(8);
+ if(qfile->readBlock(hdr.data(), 8) == 8) {
+ if(haveAt)
+ qfile->at(0);
+ else
+ ungetString(qfile, hdr.data(), 8);
+
+ // Ok, we got the first block of 8 bytes. Read in the two
+ // unsigned long int's by preserving endianess. This is
+ // achieved by reading them through a QDataStream object
+ Q_INT32 magic0, magic1;
+ QDataStream s(hdr, IO_ReadOnly);
+ s >> magic0;
+ s >> magic1;
+
+ // If both magic numbers match (we actually read in the
+ // text 'KMyMoney' then we assume a binary file and
+ // construct a reader for it. Otherwise, we construct
+ // an XML reader object.
+ //
+ // The expression magic0 < 30 is only used to create
+ // a binary reader if we assume an old binary file. This
+ // should be removed at some point. An alternative is to
+ // check the beginning of the file against an pattern
+ // of the XML file (e.g. '?<xml' ).
+ if((magic0 == MAGIC_0_50 && magic1 == MAGIC_0_51)
+ || magic0 < 30) {
+ // we do not support this file format anymore
+ pReader = 0;
+ m_fileType = KmmBinary;
+ } else {
+ ::timetrace("is not binary format");
+ // Scan the first 70 bytes to see if we find something
+ // we know. For now, we support our own XML format and
+ // GNUCash XML format. If the file is smaller, then it
+ // contains no valid data and we reject it anyway.
+ hdr.resize(70);
+ if(qfile->readBlock(hdr.data(), 70) == 70) {
+ if(haveAt)
+ qfile->at(0);
+ else
+ ungetString(qfile, hdr.data(), 70);
+ QRegExp kmyexp("<!DOCTYPE KMYMONEY-FILE>");
+ QRegExp gncexp("<gnc-v(\\d+)");
+ QCString txt(hdr, 70);
+ if(kmyexp.search(txt) != -1) {
+ ::timetrace("is XML format");
+ pReader = new MyMoneyStorageXML;
+ m_fileType = KmmXML;
+ } else if(gncexp.search(txt) != -1) {
+ ::timetrace("is GNC format");
+ MyMoneyFileTransaction ft;
+ loadDefaultCurrencies(); // currency list required for gnc
+ loadAncientCurrencies(); // these too
+ ft.commit();
+ pReader = new MyMoneyGncReader;
+ m_fileType = GncXML;
+ }
+ }
+ }
+ if(pReader) {
+ pReader->setProgressCallback(&KMyMoneyView::progressCallback);
+ ::timetrace("read data to memory");
+ pReader->readFile(qfile, dynamic_cast<IMyMoneySerialize*> (MyMoneyFile::instance()->storage()));
+ ::timetrace("done reading to memory");
+ } else {
+ if(m_fileType == KmmBinary) {
+ KMessageBox::sorry(this, QString("<qt>%1</qt>"). arg(i18n("File <b>%1</b> contains the old binary format used by KMyMoney. Please use an older version of KMyMoney (0.8.x) that still supports this format to convert it to the new XML based format.").arg(filename)));
+ } else {
+ KMessageBox::sorry(this, QString("<qt>%1</qt>"). arg(i18n("File <b>%1</b> contains an unknown file format!").arg(filename)));
+ }
+ rc = false;
+ }
+ } else {
+ KMessageBox::sorry(this, QString("<qt>%1</qt>"). arg(i18n("Cannot read from file <b>%1</b>!").arg(filename)));
+ rc = false;
+ }
+ } catch (MyMoneyException *e) {
+ KMessageBox::sorry(this, QString("<qt>%1</qt>"). arg(i18n("Cannot load file <b>%1</b>. Reason: %2").arg(filename, e->what())));
+ delete e;
+ rc = false;
+ }
+ if(pReader) {
+ pReader->setProgressCallback(0);
+ delete pReader;
+ }
+ qfile->close();
+ } else {
+ KMessageBox::sorry(this, QString("<qt>%1</qt>"). arg(i18n("File <b>%1</b> not found!").arg(filename)));
+ rc = false;
+ }
+ delete qfile;
+ }
+ } else {
+ KMessageBox::sorry(this, QString("<qt>%1</qt>"). arg(i18n("File <b>%1</b> not found!").arg(filename)));
+ rc = false;
+ }
+
+ ::timetrace("done reading file");
+ if(rc == false)
+ return rc;
+
+ // make sure we setup the encryption key correctly
+ MyMoneyFileTransaction ft;
+ if(isEncrypted && MyMoneyFile::instance()->value("kmm-encryption-key").isEmpty()) {
+ MyMoneyFile::instance()->setValue("kmm-encryption-key", KMyMoneyGlobalSettings::gpgRecipientList().join(","));
+ }
+
+ // make sure we setup the name of the base accounts in translated form
+ try {
+ MyMoneyFile* file = MyMoneyFile::instance();
+ checkAccountName(file->asset(), i18n("Asset"));
+ checkAccountName(file->liability(), i18n("Liability"));
+ checkAccountName(file->income(), i18n("Income"));
+ checkAccountName(file->expense(), i18n("Expense"));
+ checkAccountName(file->equity(), i18n("Equity"));
+ ft.commit();
+ } catch(MyMoneyException* e) {
+ delete e;
+ }
+
+ // if a temporary file was constructed by NetAccess::download,
+ // then it will be removed with the next call. Otherwise, it
+ // stays untouched on the local filesystem
+ KIO::NetAccess::removeTempFile(filename);
+ return initializeStorage();
+}
+
+void KMyMoneyView::checkAccountName(const MyMoneyAccount& _acc, const QString& name) const
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ if(_acc.name() != name) {
+ MyMoneyAccount acc(_acc);
+ acc.setName(name);
+ file->modifyAccount(acc);
+ }
+}
+
+bool KMyMoneyView::openDatabase (const KURL& url) {
+ ::timetrace("start opening database");
+ m_fileOpen = false;
+
+ // open the database
+ IMyMoneySerialize* pStorage = dynamic_cast<IMyMoneySerialize*> (MyMoneyFile::instance()->storage());
+ MyMoneyDatabaseMgr* pDBMgr = 0;
+ if (! pStorage) {
+ pDBMgr = new MyMoneyDatabaseMgr;
+ pStorage = dynamic_cast<IMyMoneySerialize*> (pDBMgr);
+ }
+ KSharedPtr <MyMoneyStorageSql> reader = pStorage->connectToDatabase (url);
+ KURL dbURL (url);
+ bool retry = true;
+ while (retry) {
+ switch (reader->open(dbURL, IO_ReadWrite)) {
+ case 0: // opened okay
+ retry = false;
+ break;
+ case 1: // permanent error
+ KMessageBox::detailedError (this, i18n("Can't open database %1\n").arg(dbURL.prettyURL()), reader->lastError());
+ if (pDBMgr) {
+ removeStorage();
+ delete pDBMgr;
+ }
+ return false;
+ case -1: // retryable error
+ if (KMessageBox::warningYesNo (this, reader->lastError(), PACKAGE) == KMessageBox::No) {
+ if (pDBMgr) {
+ removeStorage();
+ delete pDBMgr;
+ }
+ return false;
+ } else {
+ QString options = dbURL.queryItem("options") + ",override";
+ dbURL.removeQueryItem("mode"); // now redundant
+ dbURL.removeQueryItem("options");
+ dbURL.addQueryItem("options", options);
+ }
+ }
+ }
+ if (pDBMgr) {
+ removeStorage();
+ MyMoneyFile::instance()->attachStorage(pDBMgr);
+ }
+ // single user mode; read some of the data into memory
+ // FIXME - readFile no longer relevant?
+ // tried removing it but then then got no indication that loading was complete
+ // also, didn't show home page
+ reader->setProgressCallback(&KMyMoneyView::progressCallback);
+ if (!reader->readFile()) {
+ KMessageBox::detailedError (0,
+ i18n("An unrecoverable error occurred while reading the database"),
+ reader->lastError().latin1(),
+ i18n("Database malfunction"));
+ return false;
+ }
+ m_fileOpen = true;
+ reader->setProgressCallback(0);
+ ::timetrace("done opening database");
+ return initializeStorage();
+}
+
+bool KMyMoneyView::initializeStorage()
+{
+ bool blocked = MyMoneyFile::instance()->signalsBlocked();
+ MyMoneyFile::instance()->blockSignals(true);
+
+ // we check, if we have any currency in the file. If not, we load
+ // all the default currencies we know.
+ MyMoneyFileTransaction ft;
+ try {
+ loadDefaultCurrencies();
+ loadAncientCurrencies();
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ delete e;
+ MyMoneyFile::instance()->blockSignals(blocked);
+ return false;
+ }
+
+ // make sure, we have a base currency and all accounts are
+ // also assigned to a currency.
+ if(MyMoneyFile::instance()->baseCurrency().id().isEmpty()) {
+ // Stay in this endless loop until we have a base currency,
+ // as without it the application does not work anymore.
+ while(MyMoneyFile::instance()->baseCurrency().id().isEmpty())
+ selectBaseCurrency();
+
+ } else {
+ // in some odd intermediate cases there could be files out there
+ // that have a base currency set, but still have accounts that
+ // do not have a base currency assigned. This call will take
+ // care of it. We can safely remove it later.
+ //
+ // Another work-around for this scenario is to remove the base
+ // currency setting from the XML file by removing the line
+ //
+ // <PAIR key="kmm-baseCurrency" value="xxx" />
+ //
+ // and restart the application with this file. This will force to
+ // run the above loop.
+ selectBaseCurrency();
+ }
+
+ KConfig *config = KGlobal::config();
+ int page;
+ config->setGroup("General Options");
+ if(KMyMoneyGlobalSettings::startLastViewSelected() != 0) {
+ config->setGroup("Last Use Settings");
+ page = config->readNumEntry("LastViewSelected", 0);
+ } else {
+ page = pageIndex(m_homeViewFrame);
+ }
+
+ ::timetrace("start fixing file");
+
+ // For debugging purposes, we can turn off the automatic fix manually
+ // by setting the entry in kmymoney2rc to true
+ config->setGroup("General Options");
+ if(config->readBoolEntry("SkipFix", false) != true) {
+ MyMoneyFileTransaction ft;
+ try {
+ // Check if we have to modify the file before we allow to work with it
+ IMyMoneyStorage* s = MyMoneyFile::instance()->storage();
+ while (s->fileFixVersion() < s->currentFixVersion()) {
+ qDebug("%s", (QString("testing fileFixVersion %1 < %2").arg(s->fileFixVersion()).arg(s->currentFixVersion())).data());
+ switch (s->fileFixVersion()) {
+ case 0:
+ fixFile_0();
+ s->setFileFixVersion(1);
+ break;
+
+ case 1:
+ fixFile_1();
+ s->setFileFixVersion(2);
+ break;
+
+ case 2:
+ fixFile_2();
+ s->setFileFixVersion(3);
+ break;
+
+ // add new levels above. Don't forget to increase currentFixVersion() for all
+ // the storage backends this fix applies to
+ default:
+ throw new MYMONEYEXCEPTION(i18n("Unknown fix level in input file"));
+ }
+ }
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ delete e;
+ MyMoneyFile::instance()->blockSignals(blocked);
+ return false;
+ }
+ } else {
+ qDebug("Skipping automatic transaction fix!");
+ }
+ MyMoneyFile::instance()->blockSignals(blocked);
+
+ // FIXME: we need to check, if it's necessary to have this
+ // automatic funcitonality
+ // if there's no asset account, then automatically start the
+ // new account wizard
+ // kmymoney2->createInitialAccount();
+
+ ::timetrace("file open");
+ m_fileOpen = true;
+ emit kmmFilePlugin (postOpen);
+
+ // inform everyone about new data
+ MyMoneyFile::instance()->preloadCache();
+ MyMoneyFile::instance()->forceDataChanged();
+
+ // if we currently see a different page, then select the right one
+ if(page != activePageIndex()) {
+ showPage(page);
+ }
+
+ return true;
+}
+
+void KMyMoneyView::saveToLocalFile(QFile* qfile, IMyMoneyStorageFormat* pWriter, bool plaintext, const QString& keyList)
+{
+ QIODevice *dev = qfile;
+ KFilterBase *base = 0;
+ QIODevice *statusDevice = dev;
+
+ bool encryptedOk = true;
+ bool encryptRecover = false;
+ if(!keyList.isEmpty()) {
+ if(!KGPGFile::GPGAvailable()) {
+ KMessageBox::sorry(this, i18n("GPG does not seem to be installed on your system. Please make sure, that GPG can be found using the standard search path. This time, encryption is disabled."), i18n("GPG not found"));
+ encryptedOk = false;
+ }
+
+ if(KMyMoneyGlobalSettings::encryptRecover()) {
+ encryptRecover = true;
+ if(!KGPGFile::keyAvailable(QString(RECOVER_KEY_ID))) {
+ KMessageBox::sorry(this, QString("<p>")+i18n("You have selected to encrypt your data also with the KMyMoney recover key, but the key with id</p><p><center><b>%1</b></center></p>has not been found in your keyring at this time. Please make sure to import this key into your keyring. You can find it on the <a href=\"http://kmymoney2.sourceforge.net/\">KMyMoney web-site</a>. This time your data will not be encrypted with the KMyMoney recover key.").arg(RECOVER_KEY_ID), i18n("GPG-Key not found"));
+ encryptRecover = false;
+ }
+ }
+
+ QStringList keys = QStringList::split(",", keyList);
+ QStringList::const_iterator it_s;
+ for(it_s = keys.begin(); it_s != keys.begin(); ++it_s) {
+ if(!KGPGFile::keyAvailable(*it_s)) {
+ KMessageBox::sorry(this, QString("<p>")+i18n("You have specified to encrypt your data for the user-id</p><p><center><b>%1</b>.</center></p>Unfortunately, a valid key for this user-id was not found in your keyring. Please make sure to import a valid key for this user-id. This time, encryption is disabled.").arg(*it_s), i18n("GPG-Key not found"));
+ encryptedOk = false;
+ }
+ }
+
+ if(encryptedOk == true) {
+ QString msg = QString("<p>") + i18n("You have configured to save your data in encrypted form using GPG. Please be aware, that this is a brand new feature which is yet untested. Make sure, you have the necessary understanding that you might loose all your data if you store it encrypted and cannot decrypt it later on! If unsure, answer <b>No</b>.");
+
+ if(KMessageBox::questionYesNo(this, msg, i18n("Store GPG encrypted"), KStdGuiItem::yes(), KStdGuiItem::no(), "StoreEncrypted") == KMessageBox::No) {
+ encryptedOk = false;
+ }
+ }
+ }
+
+ int mask = umask((~m_fmode) & 0777);
+ bool blocked = MyMoneyFile::instance()->signalsBlocked();
+ MyMoneyFile::instance()->blockSignals(true);
+ MyMoneyFileTransaction ft;
+ MyMoneyFile::instance()->deletePair("kmm-encryption-key");
+ if(!keyList.isEmpty() && encryptedOk == true && !plaintext ) {
+ qfile->close();
+ base++;
+ KGPGFile *kgpg = new KGPGFile(qfile->name());
+ if(kgpg) {
+ QStringList keys = QStringList::split(",", keyList);
+ QStringList::const_iterator it_s;
+ for(it_s = keys.begin(); it_s != keys.end(); ++it_s) {
+ kgpg->addRecipient((*it_s).latin1());
+ }
+ if(encryptRecover) {
+ kgpg->addRecipient(RECOVER_KEY_ID);
+ }
+ MyMoneyFile::instance()->setValue("kmm-encryption-key", keyList);
+ }
+ statusDevice = dev = kgpg;
+ if(!dev || !dev->open(IO_WriteOnly)) {
+ MyMoneyFile::instance()->blockSignals(blocked);
+ delete dev;
+ throw new MYMONEYEXCEPTION(i18n("Unable to open file '%1' for writing.").arg(qfile->name()));
+ }
+
+ } else if(!plaintext) {
+
+ base = KFilterBase::findFilterByMimeType( COMPRESSION_MIME_TYPE );
+ if(base) {
+ qfile->close();
+ base->setDevice(qfile, false);
+ // we need to reopen the file to set the mode inside the filter stuff
+ dev = new KFilterDev(base, true);
+ if(!dev || !dev->open(IO_WriteOnly)) {
+ MyMoneyFile::instance()->blockSignals(blocked);
+ delete dev;
+ throw new MYMONEYEXCEPTION(i18n("Unable to open file '%1' for writing.").arg(qfile->name()));
+ }
+ statusDevice = base->device();
+ }
+ }
+ umask(mask);
+ ft.commit();
+
+ pWriter->setProgressCallback(&KMyMoneyView::progressCallback);
+ dev->resetStatus();
+ pWriter->writeFile(dev, dynamic_cast<IMyMoneySerialize*> (MyMoneyFile::instance()->storage()));
+ MyMoneyFile::instance()->blockSignals(blocked);
+ if(statusDevice->status() != IO_Ok) {
+ throw new MYMONEYEXCEPTION(i18n("Failure while writing to '%1'").arg(qfile->name()));
+ }
+ pWriter->setProgressCallback(0);
+
+ if(base != 0) {
+ dev->flush();
+ dev->close();
+ if(statusDevice->status() != IO_Ok) {
+ delete dev;
+ throw new MYMONEYEXCEPTION(i18n("Failure while writing to '%1'").arg(qfile->name()));
+ }
+ delete dev;
+ } else
+ qfile->close();
+}
+
+bool KMyMoneyView::saveFile(const KURL& url, const QString& keyList)
+{
+ QString filename = url.path();
+
+ if (!fileOpen()) {
+ KMessageBox::error(this, i18n("Tried to access a file when it's not open"));
+ return false;
+ }
+
+#if 0
+ if(KMessageBox::warningContinueCancel(this, i18n(
+ "Since this version of KMyMoney only writes data files in its new "
+ "format, files written with this version cannot be read by KMyMoney version 0.4. "
+ "If you still want to use older versions of KMyMoney with your data files, "
+ "please make sure you keep a backup-file of your finance data. "
+ "If you want to abort this operation, please press Cancel now"),
+ QString::null, KStdGuiItem::cont(), "WarningNewFileVersion0.5") == KMessageBox::Cancel)
+ return false;
+#endif
+
+ emit kmmFilePlugin (preSave);
+ IMyMoneyStorageFormat* pWriter = NULL;
+
+ // If this file ends in ".ANON.XML" then this should be written using the
+ // anonymous writer.
+ bool plaintext = filename.right(4).lower() == ".xml";
+ if (filename.right(9).lower() == ".anon.xml")
+ {
+ pWriter = new MyMoneyStorageANON;
+ }
+ else
+ {
+ // only use XML writer. The binary format will be depreacated after 0.8
+ pWriter = new MyMoneyStorageXML;
+ }
+
+ // actually, url should be the parameter to this function
+ // but for now, this would involve too many changes
+ bool rc = true;
+ try {
+ if(! url.isValid()) {
+ throw new MYMONEYEXCEPTION(i18n("Malformed URL '%1'").arg(url.url()));
+ }
+
+ if(url.isLocalFile()) {
+ filename = url.path();
+ int fmode = 0600;
+ gid_t gid = static_cast<gid_t>(-1); // don't change the group id (see "man 2 chown")
+ QFileInfo fi(filename);
+ if(fi.exists()) {
+ fmode |= fi.permission(QFileInfo::ReadGroup) ? 040 : 0;
+ fmode |= fi.permission(QFileInfo::WriteGroup) ? 020 : 0;
+ fmode |= fi.permission(QFileInfo::ReadOther) ? 004 : 0;
+ fmode |= fi.permission(QFileInfo::WriteOther) ? 002 : 0;
+ if(fi.groupId() != static_cast<uint>(-2))
+ gid = fi.groupId();
+ }
+
+ // create a new basic block here, so that the object qfile gets
+ // deleted, before we reach the chown() call
+ {
+ int mask = umask((~fmode) & 0777);
+ KSaveFile qfile(filename, fmode);
+ umask(mask);
+ if(qfile.status() == 0) {
+ try {
+ saveToLocalFile(qfile.file(), pWriter, plaintext, keyList);
+ } catch (MyMoneyException* e) {
+ qfile.abort();
+ delete e;
+ throw new MYMONEYEXCEPTION(i18n("Unable to write changes to '%1'").arg(filename));
+ }
+ } else {
+ throw new MYMONEYEXCEPTION(i18n("Unable to write changes to '%1'").arg(filename));
+ }
+ }
+ chown(filename, static_cast<uid_t>(-1), gid);
+ } else {
+ KTempFile tmpfile;
+ saveToLocalFile(tmpfile.file(), pWriter, plaintext, keyList);
+ if(!KIO::NetAccess::upload(tmpfile.name(), url, NULL))
+ throw new MYMONEYEXCEPTION(i18n("Unable to upload to '%1'").arg(url.url()));
+ tmpfile.unlink();
+ }
+ m_fileType = KmmXML;
+ } catch (MyMoneyException *e) {
+ KMessageBox::error(this, e->what());
+ delete e;
+ MyMoneyFile::instance()->setDirty();
+ rc = false;
+ }
+ delete pWriter;
+ emit kmmFilePlugin (postSave);
+ return rc;
+}
+
+bool KMyMoneyView::saveAsDatabase(const KURL& url)
+{
+ bool rc = false;
+ if (!fileOpen()) {
+ KMessageBox::error(this, i18n("Tried to access a file when it's not open"));
+ return (rc);
+ }
+ MyMoneyStorageSql *writer = new MyMoneyStorageSql(dynamic_cast<IMyMoneySerialize*> (MyMoneyFile::instance()->storage()), url);
+ bool canWrite = false;
+ switch (writer->open(url, IO_WriteOnly)) {
+ case 0:
+ canWrite = true;
+ break;
+ case -1: // dbase already has data, see if he wants to clear it out
+ if (KMessageBox::warningContinueCancel (0,
+ i18n("Database contains data which must be removed before using SaveAs.\n"
+ "Do you wish to continue?"), "Database not empty") == KMessageBox::Continue) {
+ if (writer->open(url, IO_WriteOnly, true) == 0) canWrite = true;
+ } else {
+ delete writer;
+ return false;
+ }
+ break;
+ }
+ if (canWrite) {
+ writer->setProgressCallback(&KMyMoneyView::progressCallback);
+ if (!writer->writeFile()) {
+ KMessageBox::detailedError (0,
+ i18n("An unrecoverable error occurred while writing to the database.\n"
+ "It may well be corrupt."),
+ writer->lastError().latin1(),
+ i18n("Database malfunction"));
+ rc = false;
+ }
+ writer->setProgressCallback(0);
+ rc = true;
+ } else {
+ KMessageBox::detailedError (this,
+ i18n("Can't open or create database %1\n"
+ "Retry SaveAsDatabase and click Help"
+ " for further info").arg(url.prettyURL()), writer->lastError());
+ }
+ delete writer;
+ return (rc);
+}
+
+bool KMyMoneyView::dirty(void)
+{
+ if (!fileOpen())
+ return false;
+
+ return MyMoneyFile::instance()->dirty();
+}
+
+bool KMyMoneyView::startReconciliation(const MyMoneyAccount& account, const QDate& reconciliationDate, const MyMoneyMoney& endingBalance)
+{
+ bool ok = true;
+
+ // we cannot reconcile standard accounts
+ if(MyMoneyFile::instance()->isStandardAccount(account.id()))
+ ok = false;
+
+ // check if we can reconcile this account
+ // it makes sense for asset and liability accounts only
+ if(ok == true) {
+ if(account.isAssetLiability()) {
+ showPage(pageIndex(m_ledgerViewFrame));
+ // prepare reconciliation mode
+ emit reconciliationStarts(account, reconciliationDate, endingBalance);
+ } else {
+ ok = false;
+ }
+ }
+
+ return ok;
+}
+
+void KMyMoneyView::finishReconciliation(const MyMoneyAccount& /* account */)
+{
+ emit reconciliationStarts(MyMoneyAccount(), QDate(), MyMoneyMoney());
+}
+
+void KMyMoneyView::newFile(void)
+{
+ closeFile();
+ m_fileType = KmmXML; // assume native type until saved
+ m_fileOpen = true;
+}
+
+void KMyMoneyView::slotSetBaseCurrency(const MyMoneySecurity& baseCurrency)
+{
+ if(!baseCurrency.id().isEmpty()) {
+ if(baseCurrency.id() != MyMoneyFile::instance()->baseCurrency().id()) {
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyFile::instance()->setBaseCurrency(baseCurrency);
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ KMessageBox::sorry(this, i18n("Cannot set %1 as base currency: %2").arg(baseCurrency.name()).arg(e->what()), i18n("Set base currency"));
+ delete e;
+ }
+ }
+ }
+}
+
+void KMyMoneyView::selectBaseCurrency(void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ // check if we have a base currency. If not, we need to select one
+ if(file->baseCurrency().id().isEmpty()) {
+ KCurrencyEditDlg dlg(this, "CurrencyEditDlg");
+ connect(&dlg, SIGNAL(selectBaseCurrency(const MyMoneySecurity&)), this, SLOT(slotSetBaseCurrency(const MyMoneySecurity&)));
+ dlg.exec();
+ }
+
+ if(!file->baseCurrency().id().isEmpty()) {
+ // check that all accounts have a currency
+ QValueList<MyMoneyAccount> list;
+ file->accountList(list);
+ QValueList<MyMoneyAccount>::Iterator it;
+
+ // don't forget those standard accounts
+ list << file->asset();
+ list << file->liability();
+ list << file->income();
+ list << file->expense();
+ list << file->equity();
+
+
+ for(it = list.begin(); it != list.end(); ++it) {
+ if((*it).currencyId().isEmpty() || (*it).currencyId().length() == 0) {
+ (*it).setCurrencyId(file->baseCurrency().id());
+ MyMoneyFileTransaction ft;
+ try {
+ file->modifyAccount(*it);
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ qDebug("Unable to setup base currency in account %s (%s): %s", (*it).name().latin1(), (*it).id().data(), e->what().latin1());
+ delete e;
+ }
+ }
+ }
+ }
+}
+
+void KMyMoneyView::loadDefaultCurrency(const MyMoneySecurity& currency, const bool create)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneySecurity sec;
+ MyMoneyFileTransaction ft;
+ try {
+ sec = file->currency(currency.id());
+ if(sec.name() != currency.name()) {
+ sec.setName(currency.name());
+ file->modifyCurrency(sec);
+ }
+ ft.commit();
+ } catch (MyMoneyException* e) {
+ delete e;
+ try {
+ if(create) {
+ file->addCurrency(currency);
+ }
+ ft.commit();
+ } catch (MyMoneyException* e) {
+ qDebug("Error %s loading default currency", e->what().data());
+ delete e;
+ }
+ }
+}
+
+void KMyMoneyView::loadDefaultCurrencies(void)
+{
+ // more information can be obtained from http://en.wikipedia.org/wiki/Currency_codes
+
+ bool create = MyMoneyFile::instance()->currencyList().count() == 0;
+ loadDefaultCurrency(MyMoneySecurity("AFA", i18n("Afghanistan Afghani")), create);
+ loadDefaultCurrency(MyMoneySecurity("ALL", i18n("Albanian Lek")), create);
+ loadDefaultCurrency(MyMoneySecurity("ANG", i18n("Netherland Antillian Guilder")), create);
+ loadDefaultCurrency(MyMoneySecurity("DZD", i18n("Algerian Dinar")), create);
+ loadDefaultCurrency(MyMoneySecurity("ADF", i18n("Andorran Franc")), create);
+ loadDefaultCurrency(MyMoneySecurity("ADP", i18n("Andorran Peseta")), create);
+ loadDefaultCurrency(MyMoneySecurity("AON", i18n("Angolan New Kwanza")), create);
+ loadDefaultCurrency(MyMoneySecurity("ARS", i18n("Argentine Peso"), "$"), create);
+ loadDefaultCurrency(MyMoneySecurity("AWG", i18n("Aruban Florin")), create);
+ loadDefaultCurrency(MyMoneySecurity("AUD", i18n("Australian Dollar"), "$"), create);
+ loadDefaultCurrency(MyMoneySecurity("AZM", i18n("Azerbaijani Manat")), create);
+ loadDefaultCurrency(MyMoneySecurity("BSD", i18n("Bahamian Dollar"), "$"), create);
+ loadDefaultCurrency(MyMoneySecurity("BHD", i18n("Bahraini Dinar"), "BHD", 1000, 1000), create);
+ loadDefaultCurrency(MyMoneySecurity("BDT", i18n("Bangladeshi Taka")), create);
+ loadDefaultCurrency(MyMoneySecurity("BBD", i18n("Barbados Dollar"), "$"), create);
+ loadDefaultCurrency(MyMoneySecurity("BYR", i18n("Belarussian Ruble"), "BYR", 1, 1), create);
+ loadDefaultCurrency(MyMoneySecurity("BZD", i18n("Belize Dollar"), "$"), create);
+ loadDefaultCurrency(MyMoneySecurity("BMD", i18n("Bermudian Dollar"), "$"), create);
+ loadDefaultCurrency(MyMoneySecurity("BTN", i18n("Bhutan Ngultrum")), create);
+ loadDefaultCurrency(MyMoneySecurity("BOB", i18n("Bolivian Boliviano")), create);
+ loadDefaultCurrency(MyMoneySecurity("BAM", i18n("Bosnian Convertible Mark")), create);
+ loadDefaultCurrency(MyMoneySecurity("BWP", i18n("Botswana Pula")), create);
+ loadDefaultCurrency(MyMoneySecurity("BRL", i18n("Brazilian Real"), "R$"), create);
+ loadDefaultCurrency(MyMoneySecurity("GBP", i18n("British Pound"), QChar(0x00A3)), create);
+ loadDefaultCurrency(MyMoneySecurity("BND", i18n("Brunei Dollar"), "$"), create);
+ loadDefaultCurrency(MyMoneySecurity("BGL", i18n("Bulgarian Lev")), create);
+ loadDefaultCurrency(MyMoneySecurity("BIF", i18n("Burundi Franc")), create);
+ loadDefaultCurrency(MyMoneySecurity("XAF", i18n("CFA Franc BEAC")), create);
+ loadDefaultCurrency(MyMoneySecurity("XOF", i18n("CFA Franc BCEAO")), create);
+ loadDefaultCurrency(MyMoneySecurity("XPF", i18n("CFP Franc Pacifique"), "F", 1, 1, 100), create);
+ loadDefaultCurrency(MyMoneySecurity("KHR", i18n("Cambodia Riel")), create);
+ loadDefaultCurrency(MyMoneySecurity("CAD", i18n("Canadian Dollar"), "$"), create);
+ loadDefaultCurrency(MyMoneySecurity("CVE", i18n("Cape Verde Escudo")), create);
+ loadDefaultCurrency(MyMoneySecurity("KYD", i18n("Cayman Islands Dollar"), "$"), create);
+ loadDefaultCurrency(MyMoneySecurity("CLP", i18n("Chilean Peso")), create);
+ loadDefaultCurrency(MyMoneySecurity("CNY", i18n("Chinese Yuan Renminbi")), create);
+ loadDefaultCurrency(MyMoneySecurity("COP", i18n("Colombian Peso")), create);
+ loadDefaultCurrency(MyMoneySecurity("KMF", i18n("Comoros Franc")), create);
+ loadDefaultCurrency(MyMoneySecurity("CRC", i18n("Costa Rican Colon"), QChar(0x20A1)), create);
+ loadDefaultCurrency(MyMoneySecurity("HRK", i18n("Croatian Kuna")), create);
+ loadDefaultCurrency(MyMoneySecurity("CUP", i18n("Cuban Peso")), create);
+ loadDefaultCurrency(MyMoneySecurity("CZK", i18n("Czech Koruna")), create);
+ loadDefaultCurrency(MyMoneySecurity("DKK", i18n("Danish Krone"), "kr"), create);
+ loadDefaultCurrency(MyMoneySecurity("DJF", i18n("Djibouti Franc")), create);
+ loadDefaultCurrency(MyMoneySecurity("DOP", i18n("Dominican Peso")), create);
+ loadDefaultCurrency(MyMoneySecurity("XCD", i18n("East Caribbean Dollar"), "$"), create);
+ loadDefaultCurrency(MyMoneySecurity("EGP", i18n("Egyptian Pound"), QChar(0x00A3)), create);
+ loadDefaultCurrency(MyMoneySecurity("SVC", i18n("El Salvador Colon")), create);
+ loadDefaultCurrency(MyMoneySecurity("ERN", i18n("Eritrean Nakfa")), create);
+ loadDefaultCurrency(MyMoneySecurity("EEK", i18n("Estonian Kroon")), create);
+ loadDefaultCurrency(MyMoneySecurity("ETB", i18n("Ethiopian Birr")), create);
+ loadDefaultCurrency(MyMoneySecurity("EUR", i18n("Euro"), QChar(0x20ac)), true);
+ loadDefaultCurrency(MyMoneySecurity("FKP", i18n("Falkland Islands Pound"), QChar(0x00A3)), create);
+ loadDefaultCurrency(MyMoneySecurity("FJD", i18n("Fiji Dollar"), "$"), create);
+ loadDefaultCurrency(MyMoneySecurity("GMD", i18n("Gambian Dalasi")), create);
+ loadDefaultCurrency(MyMoneySecurity("GEL", i18n("Georgian Lari")), create);
+ loadDefaultCurrency(MyMoneySecurity("GHC", i18n("Ghanaian Cedi")), create);
+ loadDefaultCurrency(MyMoneySecurity("GIP", i18n("Gibraltar Pound"), QChar(0x00A3)), create);
+ loadDefaultCurrency(MyMoneySecurity("GTQ", i18n("Guatemalan Quetzal")), create);
+ loadDefaultCurrency(MyMoneySecurity("GWP", i18n("Guinea-Bissau Peso")), create);
+ loadDefaultCurrency(MyMoneySecurity("GYD", i18n("Guyanan Dollar"), "$"), create);
+ loadDefaultCurrency(MyMoneySecurity("HTG", i18n("Haitian Gourde")), create);
+ loadDefaultCurrency(MyMoneySecurity("HNL", i18n("Honduran Lempira")), create);
+ loadDefaultCurrency(MyMoneySecurity("HKD", i18n("Hong Kong Dollar"), "$"), create);
+ loadDefaultCurrency(MyMoneySecurity("HUF", i18n("Hungarian Forint"), "HUF", 1, 1, 100), create);
+ loadDefaultCurrency(MyMoneySecurity("ISK", i18n("Iceland Krona")), create);
+ loadDefaultCurrency(MyMoneySecurity("INR", i18n("Indian Rupee"), QChar(0x20A8)), create);
+ loadDefaultCurrency(MyMoneySecurity("IDR", i18n("Indonesian Rupiah"), "IDR", 100, 1), create);
+ loadDefaultCurrency(MyMoneySecurity("IRR", i18n("Iranian Rial"), "IRR", 1, 1), create);
+ loadDefaultCurrency(MyMoneySecurity("IQD", i18n("Iraqi Dinar"), "IQD", 1000, 1000), create);
+ loadDefaultCurrency(MyMoneySecurity("ILS", i18n("Israeli New Shekel"), QChar(0x20AA)), create);
+ loadDefaultCurrency(MyMoneySecurity("JMD", i18n("Jamaican Dollar"), "$"), create);
+ loadDefaultCurrency(MyMoneySecurity("JPY", i18n("Japanese Yen"), QChar(0x00A5), 100, 1), create);
+ loadDefaultCurrency(MyMoneySecurity("JOD", i18n("Jordanian Dinar"), "JOD", 1000, 1000), create);
+ loadDefaultCurrency(MyMoneySecurity("KZT", i18n("Kazakhstan Tenge")), create);
+ loadDefaultCurrency(MyMoneySecurity("KES", i18n("Kenyan Shilling")), create);
+ loadDefaultCurrency(MyMoneySecurity("KWD", i18n("Kuwaiti Dinar"), "KWD", 1000, 1000), create);
+ loadDefaultCurrency(MyMoneySecurity("KGS", i18n("Kyrgyzstan Som")), create);
+ loadDefaultCurrency(MyMoneySecurity("LAK", i18n("Laos Kip"), QChar(0x20AD)), create);
+ loadDefaultCurrency(MyMoneySecurity("LVL", i18n("Latvian Lats")), create);
+ loadDefaultCurrency(MyMoneySecurity("LBP", i18n("Lebanese Pound"), QChar(0x00A3)), create);
+ loadDefaultCurrency(MyMoneySecurity("LSL", i18n("Lesotho Loti")), create);
+ loadDefaultCurrency(MyMoneySecurity("LRD", i18n("Liberian Dollar"), "$"), create);
+ loadDefaultCurrency(MyMoneySecurity("LYD", i18n("Libyan Dinar"), "LYD", 1000, 1000), create);
+ loadDefaultCurrency(MyMoneySecurity("LTL", i18n("Lithuanian Litas")), create);
+ loadDefaultCurrency(MyMoneySecurity("MOP", i18n("Macau Pataca")), create);
+ loadDefaultCurrency(MyMoneySecurity("MKD", i18n("Macedonian Denar")), create);
+ loadDefaultCurrency(MyMoneySecurity("MGF", i18n("Malagasy Franc"), "MGF", 500, 500), create);
+ loadDefaultCurrency(MyMoneySecurity("MWK", i18n("Malawi Kwacha")), create);
+ loadDefaultCurrency(MyMoneySecurity("MYR", i18n("Malaysian Ringgit")), create);
+ loadDefaultCurrency(MyMoneySecurity("MVR", i18n("Maldive Rufiyaa")), create);
+ loadDefaultCurrency(MyMoneySecurity("MLF", i18n("Mali Republic Franc")), create);
+ loadDefaultCurrency(MyMoneySecurity("MRO", i18n("Mauritanian Ouguiya"), "MRO", 5, 5), create);
+ loadDefaultCurrency(MyMoneySecurity("MUR", i18n("Mauritius Rupee")), create);
+ loadDefaultCurrency(MyMoneySecurity("MXN", i18n("Mexican Peso"), "$"), create);
+ loadDefaultCurrency(MyMoneySecurity("MDL", i18n("Moldavian Leu")), create);
+ loadDefaultCurrency(MyMoneySecurity("MNT", i18n("Mongolian Tugrik"), QChar(0x20AE)), create);
+ loadDefaultCurrency(MyMoneySecurity("MAD", i18n("Moroccan Dirham")), create);
+ loadDefaultCurrency(MyMoneySecurity("MZM", i18n("Mozambique Metical")), create);
+ loadDefaultCurrency(MyMoneySecurity("MMK", i18n("Myanmar Kyat")), create);
+ loadDefaultCurrency(MyMoneySecurity("NAD", i18n("Namibian Dollar"), "$"), create);
+ loadDefaultCurrency(MyMoneySecurity("NPR", i18n("Nepalese Rupee")), create);
+ loadDefaultCurrency(MyMoneySecurity("NZD", i18n("New Zealand Dollar"), "$"), create);
+ loadDefaultCurrency(MyMoneySecurity("NIC", i18n("Nicaraguan Cordoba Oro")), create);
+ loadDefaultCurrency(MyMoneySecurity("NGN", i18n("Nigerian Naira"), QChar(0x20A6)), create);
+ loadDefaultCurrency(MyMoneySecurity("KPW", i18n("North Korean Won"), QChar(0x20A9)), create);
+ loadDefaultCurrency(MyMoneySecurity("NOK", i18n("Norwegian Kroner"), "kr"), create);
+ loadDefaultCurrency(MyMoneySecurity("OMR", i18n("Omani Rial"), "OMR", 1000, 1000), create);
+ loadDefaultCurrency(MyMoneySecurity("PKR", i18n("Pakistan Rupee")), create);
+ loadDefaultCurrency(MyMoneySecurity("PAB", i18n("Panamanian Balboa")), create);
+ loadDefaultCurrency(MyMoneySecurity("PGK", i18n("Papua New Guinea Kina")), create);
+ loadDefaultCurrency(MyMoneySecurity("PYG", i18n("Paraguay Guarani")), create);
+ loadDefaultCurrency(MyMoneySecurity("PEN", i18n("Peruvian Nuevo Sol")), create);
+ loadDefaultCurrency(MyMoneySecurity("PHP", i18n("Philippine Peso"), QChar(0x20B1)), create);
+ loadDefaultCurrency(MyMoneySecurity("PLN", i18n("Polish Zloty")), create);
+ loadDefaultCurrency(MyMoneySecurity("QAR", i18n("Qatari Rial")), create);
+ loadDefaultCurrency(MyMoneySecurity("RON", i18n("Romanian Leu (new)")), true);
+ loadDefaultCurrency(MyMoneySecurity("RUB", i18n("Russian Ruble")), true);
+ loadDefaultCurrency(MyMoneySecurity("RWF", i18n("Rwanda Franc")), create);
+ loadDefaultCurrency(MyMoneySecurity("WST", i18n("Samoan Tala")), create);
+ loadDefaultCurrency(MyMoneySecurity("STD", i18n("Sao Tome and Principe Dobra")), create);
+ loadDefaultCurrency(MyMoneySecurity("SAR", i18n("Saudi Riyal")), create);
+ loadDefaultCurrency(MyMoneySecurity("SCR", i18n("Seychelles Rupee")), create);
+ loadDefaultCurrency(MyMoneySecurity("SLL", i18n("Sierra Leone Leone")), create);
+ loadDefaultCurrency(MyMoneySecurity("SGD", i18n("Singapore Dollar"), "$"), create);
+ // loadDefaultCurrency(MyMoneySecurity("SKK", i18n("Slovak Koruna")), create);
+ // loadDefaultCurrency(MyMoneySecurity("SIT", i18n("Slovenian Tolar")), create);
+ loadDefaultCurrency(MyMoneySecurity("SBD", i18n("Solomon Islands Dollar"), "$"), create);
+ loadDefaultCurrency(MyMoneySecurity("SOS", i18n("Somali Shilling")), create);
+ loadDefaultCurrency(MyMoneySecurity("ZAR", i18n("South African Rand")), create);
+ loadDefaultCurrency(MyMoneySecurity("KRW", i18n("South Korean Won"), QChar(0x20A9)), create);
+ loadDefaultCurrency(MyMoneySecurity("LKR", i18n("Sri Lanka Rupee")), create);
+ loadDefaultCurrency(MyMoneySecurity("SHP", i18n("St. Helena Pound"), QChar(0x00A3)), create);
+ loadDefaultCurrency(MyMoneySecurity("SDD", i18n("Sudanese Dinar")), create);
+ loadDefaultCurrency(MyMoneySecurity("SRG", i18n("Suriname Guilder")), create);
+ loadDefaultCurrency(MyMoneySecurity("SZL", i18n("Swaziland Lilangeni")), create);
+ loadDefaultCurrency(MyMoneySecurity("SEK", i18n("Swedish Krona")), create);
+ loadDefaultCurrency(MyMoneySecurity("CHF", i18n("Swiss Franc"), "SFr"), create);
+ loadDefaultCurrency(MyMoneySecurity("SYP", i18n("Syrian Pound"), QChar(0x00A3)), create);
+ loadDefaultCurrency(MyMoneySecurity("TWD", i18n("Taiwan Dollar"), "$"), create);
+ loadDefaultCurrency(MyMoneySecurity("TJS", i18n("Tajikistan Somani")), create);
+ loadDefaultCurrency(MyMoneySecurity("TZS", i18n("Tanzanian Shilling")), create);
+ loadDefaultCurrency(MyMoneySecurity("THB", i18n("Thai Baht"), QChar(0x0E3F)), create);
+ loadDefaultCurrency(MyMoneySecurity("TOP", i18n("Tongan Pa'anga")), create);
+ loadDefaultCurrency(MyMoneySecurity("TTD", i18n("Trinidad and Tobago Dollar"), "$"), create);
+ loadDefaultCurrency(MyMoneySecurity("TND", i18n("Tunisian Dinar"), "TND", 1000, 1000), create);
+ loadDefaultCurrency(MyMoneySecurity("TRY", i18n("Turkish Lira (new)"), "YTL"), true);
+ loadDefaultCurrency(MyMoneySecurity("TMM", i18n("Turkmenistan Manat")), create);
+ loadDefaultCurrency(MyMoneySecurity("USD", i18n("US Dollar"), "$"), create);
+ loadDefaultCurrency(MyMoneySecurity("UGX", i18n("Uganda Shilling")), create);
+ loadDefaultCurrency(MyMoneySecurity("UAH", i18n("Ukraine Hryvnia")), create);
+ loadDefaultCurrency(MyMoneySecurity("AED", i18n("United Arab Emirates Dirham")), create);
+ loadDefaultCurrency(MyMoneySecurity("UYU", i18n("Uruguayan Peso")), create);
+ loadDefaultCurrency(MyMoneySecurity("UZS", i18n("Uzbekistani Sum")), create);
+ loadDefaultCurrency(MyMoneySecurity("VUV", i18n("Vanuatu Vatu")), create);
+ loadDefaultCurrency(MyMoneySecurity("VEB", i18n("Venezuelan Bolivar")), create);
+ loadDefaultCurrency(MyMoneySecurity("VND", i18n("Vietnamese Dong"), QChar(0x20AB)), create);
+ loadDefaultCurrency(MyMoneySecurity("YUM", i18n("Yugoslav Dinar")), create);
+ loadDefaultCurrency(MyMoneySecurity("ZMK", i18n("Zambian Kwacha")), create);
+ loadDefaultCurrency(MyMoneySecurity("ZWD", i18n("Zimbabwe Dollar"), "$"), create);
+
+ loadDefaultCurrency(MyMoneySecurity("XAU", i18n("Gold"), "XAU", 1, 1000000), create);
+ loadDefaultCurrency(MyMoneySecurity("XPD", i18n("Palladium"), "XPD", 1, 1000000), create);
+ loadDefaultCurrency(MyMoneySecurity("XPT", i18n("Platinum"), "XPT", 1, 1000000), create);
+ loadDefaultCurrency(MyMoneySecurity("XAG", i18n("Silver"), "XAG", 1, 1000000), create);
+}
+
+void KMyMoneyView::loadAncientCurrency(const QString& id, const QString& name, const QString& sym, const QDate& date, const MyMoneyMoney& rate, const QString& newId, const int partsPerUnit, const int smallestCashFraction, const int smallestAccountFraction)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyPrice price(id, newId, date, rate, "KMyMoney");
+ MyMoneyFileTransaction ft;
+ try {
+ // make sure if entry exists
+ file->currency(id);
+ // make sure we have the right price
+ if(file->price(id, newId, date, true) != price) {
+ file->addPrice(price);
+ }
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ delete e;
+ try {
+ file->addCurrency(MyMoneySecurity(id, name, sym, partsPerUnit, smallestCashFraction, smallestAccountFraction));
+ if(date.isValid()) {
+ file->addPrice(price);
+ }
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ qDebug("Error loading currency: %s", e->what().data());
+ delete e;
+ }
+ }
+}
+
+void KMyMoneyView::loadAncientCurrencies(void)
+{
+ loadAncientCurrency("ATS", i18n("Austrian Schilling"), "ÖS", QDate(1998,12,31), MyMoneyMoney(10000, 137603), "EUR");
+ loadAncientCurrency("DEM", i18n("German Mark"), "DM", QDate(1998,12,31), MyMoneyMoney(100000, 195583), "EUR");
+ loadAncientCurrency("FRF", i18n("French Franc"), "FF", QDate(1998,12,31), MyMoneyMoney(100000, 655957), "EUR");
+ loadAncientCurrency("ITL", i18n("Italian Lira"), QChar(0x20A4), QDate(1998,12,31), MyMoneyMoney(100, 193627), "EUR");
+ loadAncientCurrency("ESP", i18n("Spanish Peseta"), QString(), QDate(1998,12,31), MyMoneyMoney(1000, 166386), "EUR");
+ loadAncientCurrency("NLG", i18n("Dutch Guilder"), QString(), QDate(1998,12,31), MyMoneyMoney(100000, 220371), "EUR");
+ loadAncientCurrency("BEF", i18n("Belgian Franc"), "Fr", QDate(1998,12,31), MyMoneyMoney(10000, 403399), "EUR");
+ loadAncientCurrency("LUF", i18n("Luxembourg Franc"), "Fr", QDate(1998,12,31), MyMoneyMoney(10000, 403399), "EUR");
+ loadAncientCurrency("PTE", i18n("Portuguese Escudo"), QString(), QDate(1998,12,31), MyMoneyMoney(1000, 200482), "EUR");
+ loadAncientCurrency("IEP", i18n("Irish Pound"), QChar(0x00A3), QDate(1998,12,31), MyMoneyMoney(1000000, 787564), "EUR");
+ loadAncientCurrency("FIM", i18n("Finnish Markka"), QString(), QDate(1998,12,31), MyMoneyMoney(100000, 594573), "EUR");
+ loadAncientCurrency("GRD", i18n("Greek Drachma"), QChar(0x20AF), QDate(1998,12,31), MyMoneyMoney(100, 34075), "EUR");
+
+ loadAncientCurrency("ROL", i18n("Romanian Leu"), "ROL", QDate(2005,6,30), MyMoneyMoney(1, 10000), "RON");
+
+ loadAncientCurrency("RUR", i18n("Russian Ruble (old)"), "RUR", QDate(1998, 1, 1), MyMoneyMoney(1, 1000), "RUB");
+
+ loadAncientCurrency("SIT", i18n("Slovenian Tolar"), "SIT", QDate(2006,12,31), MyMoneyMoney(100, 23964), "EUR");
+
+ // Source: http://www.tf-portfoliosolutions.net/products/turkishlira.aspx
+ loadAncientCurrency("TRL", i18n("Turkish Lira"), "TL", QDate(2004,12,31), MyMoneyMoney(1,1000000), "TRY");
+
+ // Source: http://www.focus.de/finanzen/news/malta-und-zypern_aid_66058.html
+ loadAncientCurrency("MTL", i18n("Maltese Lira"), "MTL", QDate(2008,1,1), MyMoneyMoney(429300,1000000), "EUR");
+ loadAncientCurrency("CYP", i18n("Cyprus Pound"), QString("C%1").arg(QChar(0x00A3)), QDate(2008,1,1), MyMoneyMoney(585274,1000000), "EUR");
+
+ // Source: http://www.focus.de/finanzen/news/waehrungszone-slowakei-ist-neuer-euro-staat_aid_359025.html
+ loadAncientCurrency("SKK", i18n("Slovak Koruna"), "SKK", QDate(2008,12,31), MyMoneyMoney(1000,30126), "EUR");
+}
+
+void KMyMoneyView::viewUp(void)
+{
+ if (!fileOpen())
+ return;
+}
+
+void KMyMoneyView::viewAccountList(const QString& /*selectAccount*/)
+{
+ if(pageIndex(m_accountsViewFrame) != activePageIndex())
+ showPage(1);
+
+ m_accountsView->show();
+}
+
+void KMyMoneyView::slotRefreshViews()
+{
+ // turn off sync between ledger and investment view
+ disconnect(m_investmentView, SIGNAL(accountSelected(const MyMoneyObject&)), m_ledgerView, SLOT(slotSelectAccount(const MyMoneyObject&)));
+ disconnect(m_ledgerView, SIGNAL(accountSelected(const MyMoneyObject&)), m_investmentView, SLOT(slotSelectAccount(const MyMoneyObject&)));
+
+ // TODO turn sync between ledger and investment view if selected by user
+ if(KMyMoneyGlobalSettings::syncLedgerInvestment()) {
+ connect(m_investmentView, SIGNAL(accountSelected(const MyMoneyObject&)), m_ledgerView, SLOT(slotSelectAccount(const MyMoneyObject&)));
+ connect(m_ledgerView, SIGNAL(accountSelected(const MyMoneyObject&)), m_investmentView, SLOT(slotSelectAccount(const MyMoneyObject&)));
+ }
+
+ showTitleBar(KMyMoneyGlobalSettings::showTitleBar());
+
+ m_accountsView->slotLoadAccounts();
+ m_institutionsView->slotLoadAccounts();
+ m_categoriesView->slotLoadAccounts();
+ m_payeesView->slotLoadPayees();
+ m_ledgerView->slotLoadView();
+ m_budgetView->slotRefreshView();
+ m_homeView->slotLoadView();
+ m_investmentView->slotLoadView();
+ m_reportsView->slotLoadView();
+ m_forecastView->slotLoadForecast();
+
+ m_scheduledView->slotReloadView();
+}
+
+void KMyMoneyView::slotShowTransactionDetail(bool detailed)
+{
+ KMyMoneyGlobalSettings::setShowRegisterDetailed(detailed);
+ slotRefreshViews();
+}
+
+
+void KMyMoneyView::progressCallback(int current, int total, const QString& msg)
+{
+ kmymoney2->progressCallback(current, total, msg);
+}
+
+void KMyMoneyView::slotRememberPage(QWidget* w)
+{
+ KConfig *config = KGlobal::config();
+ config->setGroup("Last Use Settings");
+ config->writeEntry("LastViewSelected", pageIndex(w));
+ config->sync();
+}
+
+/* DO NOT ADD code to this function or any of it's called ones.
+ Instead, create a new function, fixFile_n, and modify the initializeStorage()
+ logic above to call it */
+
+void KMyMoneyView::fixFile_2(void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyTransactionFilter filter;
+ filter.setReportAllSplits( false );
+ QValueList<MyMoneyTransaction> transactionList;
+ file->transactionList(transactionList, filter);
+
+ // scan the transactions and modify transactions with two splits
+ // which reference an account and a category to have the memo text
+ // of the account.
+ QValueList<MyMoneyTransaction>::Iterator it_t;
+ int count = 0;
+ for(it_t = transactionList.begin(); it_t != transactionList.end(); ++it_t) {
+ if((*it_t).splitCount() == 2) {
+ QString accountId;
+ QString categoryId;
+ QString accountMemo;
+ QString categoryMemo;
+ const QValueList<MyMoneySplit>& splits = (*it_t).splits();
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = splits.begin(); it_s != splits.end(); ++it_s) {
+ MyMoneyAccount acc = file->account((*it_s).accountId());
+ if(acc.isIncomeExpense()) {
+ categoryId = (*it_s).id();
+ categoryMemo = (*it_s).memo();
+ } else {
+ accountId = (*it_s).id();
+ accountMemo = (*it_s).memo();
+ }
+ }
+
+ if(!accountId.isEmpty() && !categoryId.isEmpty()
+ && accountMemo != categoryMemo) {
+ MyMoneyTransaction t(*it_t);
+ MyMoneySplit s(t.splitById(categoryId));
+ s.setMemo(accountMemo);
+ t.modifySplit(s);
+ file->modifyTransaction(t);
+ ++count;
+ }
+ }
+ }
+ qDebug("%d transactions fixed in fixFile_2", count);
+}
+
+void KMyMoneyView::fixFile_1(void)
+{
+ // we need to fix reports. If the account filter list contains
+ // investment accounts, we need to add the stock accounts to the list
+ // as well if we don't have the expert mode enabled
+ if(!KMyMoneyGlobalSettings::expertMode()) {
+ try {
+ QValueList<MyMoneyReport> reports = MyMoneyFile::instance()->reportList();
+ QValueList<MyMoneyReport>::iterator it_r;
+ for(it_r = reports.begin(); it_r != reports.end(); ++it_r) {
+ QStringList list;
+ (*it_r).accounts(list);
+ QStringList missing;
+ QStringList::const_iterator it_a, it_b;
+ for(it_a = list.begin(); it_a != list.end(); ++it_a) {
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(*it_a);
+ if(acc.accountType() == MyMoneyAccount::Investment) {
+ for(it_b = acc.accountList().begin(); it_b != acc.accountList().end(); ++it_b) {
+ if(!list.contains(*it_b)) {
+ missing.append(*it_b);
+ }
+ }
+ }
+ }
+ if(!missing.isEmpty()) {
+ (*it_r).addAccount(missing);
+ MyMoneyFile::instance()->modifyReport(*it_r);
+ }
+ }
+ } catch(MyMoneyException* e) {
+ delete e;
+ }
+ }
+}
+
+#if 0
+ if(!m_accountsView->allItemsSelected()) {
+ // retrieve a list of selected accounts
+ QStringList list;
+ m_accountsView->selectedItems(list);
+
+ // if we're not in expert mode, we need to make sure
+ // that all stock accounts for the selected investment
+ // account are also selected
+ if(!KMyMoneyGlobalSettings::expertMode()) {
+ QStringList missing;
+ QStringList::const_iterator it_a, it_b;
+ for(it_a = list.begin(); it_a != list.end(); ++it_a) {
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(*it_a);
+ if(acc.accountType() == MyMoneyAccount::Investment) {
+ for(it_b = acc.accountList().begin(); it_b != acc.accountList().end(); ++it_b) {
+ if(!list.contains(*it_b)) {
+ missing.append(*it_b);
+ }
+ }
+ }
+ }
+ list += missing;
+ }
+
+ m_filter.addAccount(list);
+ }
+
+#endif
+
+
+
+
+
+void KMyMoneyView::fixFile_0(void)
+{
+ /* (Ace) I am on a crusade against file fixups. Whenever we have to fix the
+ * file, it is really a warning. So I'm going to print a debug warning, and
+ * then go track them down when I see them to figure out how they got saved
+ * out needing fixing anyway.
+ */
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+ QValueList<MyMoneyAccount> accountList;
+ file->accountList(accountList);
+ ::timetrace("Have account list");
+ QValueList<MyMoneyAccount>::Iterator it_a;
+ QValueList<MyMoneySchedule> scheduleList = file->scheduleList();
+ ::timetrace("Have schedule list");
+ QValueList<MyMoneySchedule>::Iterator it_s;
+
+ MyMoneyAccount equity = file->equity();
+ MyMoneyAccount asset = file->asset();
+ bool equityListEmpty = equity.accountList().count() == 0;
+
+ ::timetrace("Fix accounts start");
+ for(it_a = accountList.begin(); it_a != accountList.end(); ++it_a) {
+ if((*it_a).accountType() == MyMoneyAccount::Loan
+ || (*it_a).accountType() == MyMoneyAccount::AssetLoan) {
+ fixLoanAccount_0(*it_a);
+ }
+ // until early before 0.8 release, the equity account was not saved to
+ // the file. If we have an equity account with no sub-accounts but
+ // find and equity account that has equity() as it's parent, we reparent
+ // this account. Need to move it to asset() first, because otherwise
+ // MyMoneyFile::reparent would act as NOP.
+ if(equityListEmpty && (*it_a).accountType() == MyMoneyAccount::Equity) {
+ if((*it_a).parentAccountId() == equity.id()) {
+ MyMoneyAccount acc = *it_a;
+ // tricky, force parent account to be empty so that we really
+ // can re-parent it
+ acc.setParentAccountId(QString());
+ file->reparentAccount(acc, equity);
+ kdDebug(2) << __func__ << " fixed account " << acc.id() << " reparented to " << equity.id() << endl;
+ }
+ }
+ }
+
+ ::timetrace("Fix schedules start");
+ for(it_s = scheduleList.begin(); it_s != scheduleList.end(); ++it_s) {
+ fixSchedule_0(*it_s);
+ }
+
+ ::timetrace("Fix transactions start");
+ fixTransactions_0();
+ ::timetrace("Fix transactions done");
+}
+
+void KMyMoneyView::fixSchedule_0(MyMoneySchedule sched)
+{
+ MyMoneyTransaction t = sched.transaction();
+ QValueList<MyMoneySplit> splitList = t.splits();
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ bool updated = false;
+
+ try {
+ // Check if the splits contain valid data and set it to
+ // be valid.
+ for(it_s = splitList.begin(); it_s != splitList.end(); ++it_s) {
+ // the first split is always the account on which this transaction operates
+ // and if the transaction commodity is not set, we take this
+ if(it_s == splitList.begin() && t.commodity().isEmpty()) {
+ kdDebug(2) << __func__ << " " << t.id() << " has no commodity" << endl;
+ try {
+ MyMoneyAccount acc = MyMoneyFile::instance()->account((*it_s).accountId());
+ t.setCommodity(acc.currencyId());
+ updated = true;
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+ }
+ // make sure the account exists. If not, remove the split
+ try {
+ MyMoneyFile::instance()->account((*it_s).accountId());
+ } catch(MyMoneyException *e) {
+ kdDebug(2) << __func__ << " " << sched.id() << " " << (*it_s).id() << " removed, because account '" << (*it_s).accountId() << "' does not exist." << endl;
+ t.removeSplit(*it_s);
+ updated = true;
+ delete e;
+ }
+ if((*it_s).reconcileFlag() != MyMoneySplit::NotReconciled) {
+ kdDebug(2) << __func__ << " " << sched.id() << " " << (*it_s).id() << " should be 'not reconciled'" << endl;
+ MyMoneySplit split = *it_s;
+ split.setReconcileDate(QDate());
+ split.setReconcileFlag(MyMoneySplit::NotReconciled);
+ t.modifySplit(split);
+ updated = true;
+ }
+ // the schedule logic used to operate only on the value field.
+ // This is now obsolete.
+ if((*it_s).shares().isZero() && !(*it_s).value().isZero()) {
+ MyMoneySplit split = *it_s;
+ split.setShares(split.value());
+ t.modifySplit(split);
+ updated = true;
+ }
+ }
+
+ // If there have been changes, update the schedule and
+ // the engine data.
+ if(updated) {
+ sched.setTransaction(t);
+ MyMoneyFile::instance()->modifySchedule(sched);
+ }
+ } catch(MyMoneyException *e) {
+ qWarning("Unable to update broken schedule: %s", e->what().latin1());
+ delete e;
+ }
+}
+
+void KMyMoneyView::fixLoanAccount_0(MyMoneyAccount acc)
+{
+ if(acc.value("final-payment").isEmpty()
+ || acc.value("term").isEmpty()
+ || acc.value("periodic-payment").isEmpty()
+ || acc.value("loan-amount").isEmpty()
+ || acc.value("interest-calculation").isEmpty()
+ || acc.value("schedule").isEmpty()
+ || acc.value("fixed-interest").isEmpty()) {
+ KMessageBox::information(this,
+ i18n("The account \"%1\" was previously created as loan account but some information "
+ "is missing. The new loan wizard will be started to collect all relevant "
+ "information. Please use a KMyMoney version >= 0.8.7 and < 0.9 to correct the problem."
+ ).arg(acc.name()),
+ i18n("Account problem"));
+
+ throw new MYMONEYEXCEPTION("Fix LoanAccount0 not supported anymore");
+ }
+}
+
+void KMyMoneyView::createSchedule(MyMoneySchedule newSchedule, MyMoneyAccount& newAccount)
+{
+ // Add the schedule only if one exists
+ //
+ // Remember to modify the first split to reference the newly created account
+ if (!newSchedule.name().isEmpty())
+ {
+ MyMoneyFileTransaction ft;
+ try
+ {
+ // We assume at least 2 splits in the transaction
+ MyMoneyTransaction t = newSchedule.transaction();
+ if(t.splitCount() < 2) {
+ throw new MYMONEYEXCEPTION("Transaction for schedule has less than 2 splits!");
+ }
+ // now search the split that does not have an account reference
+ // and set it up to be the one of the account we just added
+ // to the account pool. Note: the schedule code used to leave
+ // this always the first split, but the loan code leaves it as
+ // the second one. So I thought, searching is a good alternative ....
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ for(it_s = t.splits().begin(); it_s != t.splits().end(); ++it_s) {
+ if((*it_s).accountId().isEmpty()) {
+ MyMoneySplit s = (*it_s);
+ s.setAccountId(newAccount.id());
+ t.modifySplit(s);
+ break;
+ }
+ }
+ newSchedule.setTransaction(t);
+
+ MyMoneyFile::instance()->addSchedule(newSchedule);
+
+ // in case of a loan account, we keep a reference to this
+ // schedule in the account
+ if(newAccount.isLoan()) {
+ newAccount.setValue("schedule", newSchedule.id());
+ MyMoneyFile::instance()->modifyAccount(newAccount);
+ }
+ ft.commit();
+ }
+ catch (MyMoneyException *e)
+ {
+ KMessageBox::information(this, i18n("Unable to add schedule: "), e->what());
+ delete e;
+ }
+ }
+}
+
+void KMyMoneyView::fixTransactions_0(void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+#if 0
+ ::timetrace("Start alloc memory");
+ int * p = new int [10000];
+ delete p;
+ ::timetrace("Done alloc memory");
+#endif
+
+ ::timetrace("fixTransactions: get schedule list");
+ QValueList<MyMoneySchedule> scheduleList = file->scheduleList();
+ ::timetrace("fixTransactions: get transaction list");
+ MyMoneyTransactionFilter filter;
+ filter.setReportAllSplits( false );
+ QValueList<MyMoneyTransaction> transactionList;
+ file->transactionList(transactionList, filter);
+ ::timetrace("fixTransactions: have list");
+
+ QValueList<MyMoneySchedule>::Iterator it_x;
+ QStringList interestAccounts;
+
+ KMSTATUS(i18n("Fix transactions"));
+ kmymoney2->slotStatusProgressBar(0, scheduleList.count() + transactionList.count());
+
+ int cnt = 0;
+ // scan the schedules to find interest accounts
+ for(it_x = scheduleList.begin(); it_x != scheduleList.end(); ++it_x) {
+ MyMoneyTransaction t = (*it_x).transaction();
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ QStringList accounts;
+ bool hasDuplicateAccounts = false;
+
+ for(it_s = t.splits().begin(); it_s != t.splits().end(); ++it_s) {
+ if(accounts.contains((*it_s).accountId())) {
+ hasDuplicateAccounts = true;
+ kdDebug(2) << __func__ << " " << t.id() << " has multiple splits with account " << (*it_s).accountId() << endl;
+ } else {
+ accounts << (*it_s).accountId();
+ }
+
+ if((*it_s).action() == MyMoneySplit::ActionInterest) {
+ if(interestAccounts.contains((*it_s).accountId()) == 0) {
+ interestAccounts << (*it_s).accountId();
+ }
+ }
+ }
+ if(hasDuplicateAccounts) {
+ fixDuplicateAccounts_0(t);
+ }
+ ++cnt;
+ if(!(cnt % 10))
+ kmymoney2->slotStatusProgressBar(cnt);
+ }
+
+ ::timetrace("fixTransactions: start loop");
+ // scan the transactions and modify loan transactions
+ QValueList<MyMoneyTransaction>::Iterator it_t;
+ for(it_t = transactionList.begin(); it_t != transactionList.end(); ++it_t) {
+ const char *defaultAction = 0;
+ QValueList<MyMoneySplit> splits = (*it_t).splits();
+ QValueList<MyMoneySplit>::Iterator it_s;
+ QStringList accounts;
+
+ // check if base commodity is set. if not, set baseCurrency
+ if((*it_t).commodity().isEmpty()) {
+ kdDebug(2) << __func__ << " " << (*it_t).id() << " has no base currency" << endl;
+ (*it_t).setCommodity(file->baseCurrency().id());
+ file->modifyTransaction(*it_t);
+ }
+
+ bool isLoan = false;
+ // Determine default action
+ if((*it_t).splitCount() == 2) {
+ // check for transfer
+ int accountCount = 0;
+ MyMoneyMoney val;
+ for(it_s = splits.begin(); it_s != splits.end(); ++it_s) {
+ MyMoneyAccount acc = file->account((*it_s).accountId());
+ if(acc.accountGroup() == MyMoneyAccount::Asset
+ || acc.accountGroup() == MyMoneyAccount::Liability) {
+ val = (*it_s).value();
+ accountCount++;
+ if(acc.accountType() == MyMoneyAccount::Loan
+ || acc.accountType() == MyMoneyAccount::AssetLoan)
+ isLoan = true;
+ } else
+ break;
+ }
+ if(accountCount == 2) {
+ if(isLoan)
+ defaultAction = MyMoneySplit::ActionAmortization;
+ else
+ defaultAction = MyMoneySplit::ActionTransfer;
+ } else {
+ if(val.isNegative())
+ defaultAction = MyMoneySplit::ActionWithdrawal;
+ else
+ defaultAction = MyMoneySplit::ActionDeposit;
+ }
+ }
+
+ isLoan = false;
+ for(it_s = splits.begin(); defaultAction == 0 && it_s != splits.end(); ++it_s) {
+ MyMoneyAccount acc = file->account((*it_s).accountId());
+ MyMoneyMoney val = (*it_s).value();
+ if(acc.accountGroup() == MyMoneyAccount::Asset
+ || acc.accountGroup() == MyMoneyAccount::Liability) {
+ if(!val.isPositive())
+ defaultAction = MyMoneySplit::ActionWithdrawal;
+ else
+ defaultAction = MyMoneySplit::ActionDeposit;
+ }
+ }
+
+#if 0
+ // Check for correct actions in transactions referencing credit cards
+ bool needModify = false;
+ // The action fields are actually not used anymore in the ledger view logic
+ // so we might as well skip this whole thing here!
+ for(it_s = splits.begin(); needModify == false && it_s != splits.end(); ++it_s) {
+ MyMoneyAccount acc = file->account((*it_s).accountId());
+ MyMoneyMoney val = (*it_s).value();
+ if(acc.accountType() == MyMoneyAccount::CreditCard) {
+ if(val < 0 && (*it_s).action() != MyMoneySplit::ActionWithdrawal && (*it_s).action() != MyMoneySplit::ActionTransfer )
+ needModify = true;
+ if(val >= 0 && (*it_s).action() != MyMoneySplit::ActionDeposit && (*it_s).action() != MyMoneySplit::ActionTransfer)
+ needModify = true;
+ }
+ }
+
+ // (Ace) Extended the #endif down to cover this conditional, because as-written
+ // it will ALWAYS be skipped.
+
+ if(needModify == true) {
+ for(it_s = splits.begin(); it_s != splits.end(); ++it_s) {
+ (*it_s).setAction(defaultAction);
+ (*it_t).modifySplit(*it_s);
+ file->modifyTransaction(*it_t);
+ }
+ splits = (*it_t).splits(); // update local copy
+ qDebug("Fixed credit card assignment in %s", (*it_t).id().data());
+ }
+#endif
+
+ bool hasDuplicateAccounts = false;
+ // Check for correct assignment of ActionInterest in all splits
+ // and check if there are any duplicates in this transactions
+ for(it_s = splits.begin(); it_s != splits.end(); ++it_s) {
+ MyMoneyAccount splitAccount = file->account((*it_s).accountId());
+ if(accounts.contains((*it_s).accountId())) {
+ hasDuplicateAccounts = true;
+ } else {
+ accounts << (*it_s).accountId();
+ }
+ // if this split references an interest account, the action
+ // must be of type ActionInterest
+ if(interestAccounts.contains((*it_s).accountId())) {
+ if((*it_s).action() != MyMoneySplit::ActionInterest) {
+ kdDebug(2) << __func__ << " " << (*it_t).id() << " contains an interest account (" << (*it_s).accountId() << ") but does not have ActionInterest" << endl;
+ (*it_s).setAction(MyMoneySplit::ActionInterest);
+ (*it_t).modifySplit(*it_s);
+ file->modifyTransaction(*it_t);
+ qDebug("Fixed interest action in %s", (*it_t).id().data());
+ }
+ // if it does not reference an interest account, it must not be
+ // of type ActionInterest
+ } else {
+ if((*it_s).action() == MyMoneySplit::ActionInterest) {
+ kdDebug(2) << __func__ << " " << (*it_t).id() << " does not contain an interest account so it should not have ActionInterest" << endl;
+ (*it_s).setAction(defaultAction);
+ (*it_t).modifySplit(*it_s);
+ file->modifyTransaction(*it_t);
+ qDebug("Fixed interest action in %s", (*it_t).id().data());
+ }
+ }
+
+ // check that for splits referencing an account that has
+ // the same currency as the transactions commodity the value
+ // and shares field are the same.
+ if((*it_t).commodity() == splitAccount.currencyId()
+ && (*it_s).value() != (*it_s).shares()) {
+ kdDebug(2) << __func__ << " " << (*it_t).id() << " " << (*it_s).id() << " uses the transaction currency, but shares != value" << endl;
+ (*it_s).setShares((*it_s).value());
+ (*it_t).modifySplit(*it_s);
+ file->modifyTransaction(*it_t);
+ }
+
+ // fix the shares and values to have the correct fraction
+ if(!splitAccount.isInvest()) {
+ try {
+ int fract = splitAccount.fraction();
+ if((*it_s).shares() != (*it_s).shares().convert(fract)) {
+ qDebug("adjusting fraction in %s,%s", (*it_t).id().data(), (*it_s).id().data());
+ (*it_s).setShares((*it_s).shares().convert(fract));
+ (*it_s).setValue((*it_s).value().convert(fract));
+ (*it_t).modifySplit(*it_s);
+ file->modifyTransaction(*it_t);
+ }
+ } catch(MyMoneyException* e) {
+ qDebug("Missing security '%s', split not altered", splitAccount.currencyId().data());
+ delete e;
+ }
+ }
+ }
+
+/*
+ // if there are at least two splits referencing the same account,
+ // we need to combine them into one and get rid of the others
+ if(hasDuplicateAccounts) {
+ fixDuplicateAccounts(*it_t);
+ }
+*/
+ ++cnt;
+ if(!(cnt % 10))
+ kmymoney2->slotStatusProgressBar(cnt);
+ }
+
+ kmymoney2->slotStatusProgressBar(-1, -1);
+}
+
+void KMyMoneyView::fixDuplicateAccounts_0(MyMoneyTransaction& t)
+{
+ qDebug("Duplicate account in transaction %s", t.id().data());
+}
+
+void KMyMoneyView::slotPrintView(void)
+{
+ if(pageIndex(m_reportsViewFrame) == activePageIndex())
+ m_reportsView->slotPrintView();
+ else if(pageIndex(m_homeViewFrame) == activePageIndex())
+ m_homeView->slotPrintView();
+}
+
+KMyMoneyViewBase* KMyMoneyView::addPage(const QString& title, const QString& icon)
+{
+ const int iconSize = (KMyMoneyGlobalSettings::iconSize()+1)*16;
+ QFrame* frm = KJanusWidget::addVBoxPage(title, title, DesktopIcon(icon, iconSize));
+ return new KMyMoneyViewBase(frm, title.latin1(), title);
+}
+
+/* ------------------------------------------------------------------------ */
+/* KMyMoneyViewBase */
+/* ------------------------------------------------------------------------ */
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlayout.h>
+#include <qvbox.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../widgets/kmymoneytitlelabel.h"
+
+class KMyMoneyViewBase::Private {
+ public:
+ QFrame* m_titleLine;
+ KMyMoneyTitleLabel* m_titleLabel;
+ QVBoxLayout* m_viewLayout;
+};
+
+KMyMoneyViewBase::KMyMoneyViewBase(QWidget* parent, const char* name, const QString& title) :
+ QWidget(parent, name),
+ d(new Private)
+{
+ d->m_viewLayout = new QVBoxLayout(this);
+ d->m_viewLayout->setSpacing( 6 );
+ d->m_viewLayout->setMargin( 0 );
+
+ d->m_titleLabel = new KMyMoneyTitleLabel( this, "titleLabel" );
+ d->m_titleLabel->setMinimumSize( QSize( 100, 30 ) );
+ d->m_titleLabel->setRightImageFile("pics/titlelabel_background.png" );
+ d->m_titleLabel->setText(title);
+ d->m_viewLayout->addWidget( d->m_titleLabel );
+
+#if 0
+ d->m_titleLine = new QFrame( this, "titleLine" );
+ d->m_titleLine->setFrameShape( QFrame::HLine );
+ d->m_titleLine->setFrameShadow( QFrame::Sunken );
+ d->m_titleLine->setFrameShape( QFrame::HLine );
+ d->m_viewLayout->addWidget( d->m_titleLine );
+#endif
+}
+
+KMyMoneyViewBase::~KMyMoneyViewBase()
+{
+ delete d;
+}
+
+void KMyMoneyViewBase::addWidget(QWidget* w)
+{
+ d->m_viewLayout->addWidget(w);
+}
+
+QVBoxLayout* KMyMoneyViewBase::layout(void) const
+{
+ return d->m_viewLayout;
+}
+
+#include "kmymoneyview.moc"
diff --git a/kmymoney2/views/kmymoneyview.h b/kmymoney2/views/kmymoneyview.h
new file mode 100644
index 0000000..13e3d76
--- /dev/null
+++ b/kmymoney2/views/kmymoneyview.h
@@ -0,0 +1,625 @@
+/***************************************************************************
+ kmymoneyview.h
+ -------------------
+ copyright : (C) 2000-2001 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifndef KMYMONEYVIEW_H
+#define KMYMONEYVIEW_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+class QVBox;
+class QFile;
+class QVBoxLayout;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kpopupmenu.h>
+#include <kjanuswidget.h>
+
+#include <kurl.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneyinstitution.h>
+#include <kmymoney/mymoneytransaction.h>
+#include <kmymoney/mymoneyscheduled.h>
+#include <kmymoney/mymoneysecurity.h>
+#include <kmymoney/selectedtransaction.h>
+
+class KHomeView;
+class KAccountsView;
+class KCategoriesView;
+class KInstitutionsView;
+class KPayeesView;
+class KBudgetView;
+class KScheduledView;
+class KGlobalLedgerView;
+class IMyMoneyStorageFormat;
+class MyMoneyTransaction;
+class KInvestmentView;
+class KReportsView;
+class KMyMoneyViewBase;
+class MyMoneyReport;
+class TransactionEditor;
+class KForecastView;
+
+/**
+ * This class represents the view of the MyMoneyFile which contains
+ * Banks/Accounts/Transactions, Recurring transactions (or Bills & Deposits)
+ * and scripts (yet to be implemented). Each different aspect of the file
+ * is represented by a tab within the view.
+ *
+ * @author Michael Edwardes 2001 Copyright 2000-2001
+ *
+ * @short Handles the view of the MyMoneyFile.
+ */
+class KMyMoneyView : public KJanusWidget
+{
+ Q_OBJECT
+
+public:
+ enum viewID {
+ HomeView = 0,
+ AccountsView,
+ InstitutionsView,
+ SchedulesView,
+ CategoriesView,
+ PayeesView,
+ LedgersView,
+ InvestmentsView,
+ ReportsView,
+ BudgetView,
+ ForecastView
+ };
+ // file actions for plugin
+ enum fileActions {
+ preOpen, postOpen, preSave, postSave, preClose, postClose
+ };
+
+private:
+ enum menuID {
+ AccountNew = 1,
+ AccountOpen,
+ AccountReconcile,
+ AccountEdit,
+ AccountDelete,
+ AccountOnlineMap,
+ AccountOnlineUpdate,
+ AccountOfxConnect,
+ CategoryNew
+ };
+
+ typedef enum storageTypeE { // not used but keep for future implementation
+ Memory = 0,
+ Database
+ } _storageType;
+
+ KHomeView *m_homeView;
+ KAccountsView *m_accountsView;
+ KInstitutionsView *m_institutionsView;
+ KCategoriesView *m_categoriesView;
+ KPayeesView *m_payeesView;
+ KBudgetView *m_budgetView;
+ KScheduledView *m_scheduledView;
+ KGlobalLedgerView *m_ledgerView;
+ KInvestmentView *m_investmentView;
+ KReportsView* m_reportsView;
+ KForecastView* m_forecastView;
+
+ QVBox* m_homeViewFrame;
+ QVBox* m_accountsViewFrame;
+ QVBox* m_institutionsViewFrame;
+ QVBox* m_categoriesViewFrame;
+ QVBox* m_payeesViewFrame;
+ QVBox* m_budgetViewFrame;
+ QVBox* m_scheduleViewFrame;
+ QVBox* m_ledgerViewFrame;
+ QVBox* m_investmentViewFrame;
+ QVBox* m_reportsViewFrame;
+ QVBox* m_forecastViewFrame;
+
+ bool m_inConstructor;
+
+ bool m_fileOpen;
+
+ int m_fmode;
+
+ // bool m_bankRightClick;
+ // MyMoneyInstitution m_accountsInstitution;
+
+ // Keep a note of the file type
+ typedef enum _fileTypeE {
+ KmmBinary = 0, // native, binary
+ KmmXML, // native, XML
+ KmmDb, // SQL database
+ /* insert new native file types above this line */
+ MaxNativeFileType,
+ /* and non-native types below */
+ GncXML // Gnucash XML
+ }fileTypeE;
+ fileTypeE m_fileType;
+
+private:
+ void addTitleBar(QWidget* parent, const QString& title);
+
+ void ungetString(QIODevice *qfile, char * buf, int len);
+
+ /**
+ * This method creates the currency @p curr if it does not exist and
+ * @p create is @p true. If the currency already exists, it checks
+ * if the name is equal. If it is not, the name of the object in the
+ * engine is updated to the name passed with @p curr.
+ *
+ * @param curr MyMoneySecurity to be checked
+ * @param create If true and currency does not exist it will be created
+ If false currency will not be created even if it does not exist
+ */
+ void loadDefaultCurrency(const MyMoneySecurity& curr, const bool create);
+
+ /**
+ *
+ */
+ void loadAncientCurrency(const QString& id, const QString& name, const QString& sym, const QDate& date, const MyMoneyMoney& rate, const QString& newId, const int partsPerUnit = 100, const int smallestCashFraction = 100, const int smallestAccountFraction = 0);
+
+ /**
+ * if no base currency is defined, start the dialog and force it to be set
+ */
+ void selectBaseCurrency(void);
+
+ /**
+ * This method attaches an empty storage object to the MyMoneyFile
+ * object. It calls removeStorage() to remove a possibly attached
+ * storage object.
+ */
+ void newStorage(storageTypeE = Memory);
+
+ /**
+ * This method removes an attached storage from the MyMoneyFile
+ * object.
+ */
+ void removeStorage(void);
+
+ void viewAccountList(const QString& selectAccount); // Show the accounts view
+
+ static void progressCallback(int current, int total, const QString&);
+
+ /**
+ */
+ void fixFile_0(void);
+ void fixFile_1(void);
+ void fixFile_2(void);
+
+ /**
+ */
+ void fixLoanAccount_0(MyMoneyAccount acc);
+
+ /**
+ */
+ void fixTransactions_0(void);
+ void fixSchedule_0(MyMoneySchedule sched);
+ void fixDuplicateAccounts_0(MyMoneyTransaction& t);
+
+ void createSchedule(MyMoneySchedule s, MyMoneyAccount& a);
+
+ void checkAccountName(const MyMoneyAccount& acc, const QString& name) const;
+
+public:
+ /**
+ * The constructor for KMyMoneyView. Just creates all the tabs for the
+ * different aspects of the MyMoneyFile.
+ */
+ KMyMoneyView(QWidget *parent=0, const char *name=0);
+
+ /**
+ * Destructor
+ */
+ ~KMyMoneyView();
+
+ /**
+ * Makes sure that a MyMoneyFile is open and has been created succesfully.
+ *
+ * @return Whether the file is open and initialised
+ */
+ bool fileOpen(void);
+
+ /**
+ * Closes the open MyMoneyFile and frees all the allocated memory, I hope !
+ */
+ void closeFile(void);
+
+
+ /**
+ * Calls MyMoneyFile::readAllData which reads a MyMoneyFile into appropriate
+ * data structures in memory. The return result is examined to make sure no
+ * errors occured whilst parsing.
+ *
+ * @param url The URL to read from.
+ * If no protocol is specified, file:// is assumed.
+ *
+ * @return Whether the read was successfull.
+ */
+ bool readFile(const KURL& url);
+
+ /**
+ * Saves the data into permanent storage using the XML format.
+ *
+ * @param url The URL to save into.
+ * If no protocol is specified, file:// is assumed.
+ * @param keyList QString containing a comma separated list of keys
+ * to be used for encryption. If @p keyList is empty,
+ * the file will be saved unencrypted (the default)
+ *
+ * @retval false save operation failed
+ * @retval true save operation was successful
+ */
+ bool saveFile(const KURL& url, const QString& keyList = QString());
+ /**
+ * Saves the data into permanent storage on a new or empty SQL database.
+ *
+ * @param url The pseudo of tyhe database
+ *
+ * @retval false save operation failed
+ * @retval true save operation was successful
+ */
+ //const bool saveDatabase(const KURL& url); This no longer relevant
+ /**
+ * Saves the data into permanent storage on a new or empty SQL database.
+ *
+ * @param url The pseudo URL of the database
+ *
+ * @retval false save operation failed
+ * @retval true save operation was successful
+ */
+ bool saveAsDatabase(const KURL& url);
+
+ /**
+ * Call this to find out if the currently open file is native KMM
+ *
+ * @retval true file is native
+ * @retval false file is foreign
+ */
+ bool isNativeFile() { return (m_fileOpen && (m_fileType < MaxNativeFileType)); }
+
+ /**
+ * Call this to find out if the currently open file is a sql database
+ *
+ * @retval true file is database
+ * @retval false file is serial
+ */
+ bool isDatabase()
+ { return (m_fileOpen && ((m_fileType == KmmDb))); }
+
+ /**
+ * Call this to see if the MyMoneyFile contains any unsaved data.
+ *
+ * @retval true if any data has been modified but not saved
+ * @retval false otherwise
+ */
+ bool dirty(void);
+
+ /**
+ * Close the currently opened file and create an empty new file.
+ *
+ * @see MyMoneyFile
+ */
+ void newFile(void);
+
+ /**
+ * Moves the view up from transaction to Bank/Account view.
+ */
+ void viewUp(void);
+
+ /**
+ * This method allows to set the enable state of all views (except home view)
+ * The argument @p state controls the availability.
+ *
+ * @param state Controls whether views are disabled @p (0), enabled @p (1) or
+ * enabled/disabled according to an open file @p (-1). The latter
+ * is the default.
+ */
+ void enableViews(int state = -1);
+
+ KMyMoneyViewBase* addPage(const QString& title, const QString& icon = QString());
+
+ void addWidget(QWidget* w);
+
+ virtual bool showPage(int index);
+
+ /**
+ * check if the current view allows to create a transaction
+ *
+ * @param list list of selected transactions
+ * @param tooltip reference to string receiving the tooltip text
+ * which explains why the modify function is not available (in case
+ * of returning @c false)
+ *
+ * @retval true Yes, view allows to create a transaction (tooltip is not changed)
+ * @retval false No, view cannot to create a transaction (tooltip is updated with message)
+ */
+ bool canCreateTransactions(const KMyMoneyRegister::SelectedTransactions& list, QString& tooltip) const;
+
+ /**
+ * check if the current view allows to modify (edit/delete) the selected transactions
+ *
+ * @param list list of selected transactions
+ * @param tooltip reference to string receiving the tooltip text
+ * which explains why the modify function is not available (in case
+ * of returning @c false)
+ *
+ * @retval true Yes, view allows to edit/delete transactions (tooltip is not changed)
+ * @retval false No, view cannot edit/delete transactions (tooltip is updated with message)
+ */
+ bool canModifyTransactions(const KMyMoneyRegister::SelectedTransactions& list, QString& tooltip) const;
+
+ bool canDuplicateTransactions(const KMyMoneyRegister::SelectedTransactions& list, QString& tooltip) const;
+
+ /**
+ * check if the current view allows to edit the selected transactions
+ *
+ * @param list list of selected transactions
+ * @param tooltip reference to string receiving the tooltip text
+ * which explains why the edit function is not available (in case
+ * of returning @c false)
+ *
+ * @retval true Yes, view allows to enter/edit transactions
+ * @retval false No, view cannot enter/edit transactions
+ */
+ bool canEditTransactions(const KMyMoneyRegister::SelectedTransactions& list, QString& tooltip) const;
+
+ /**
+ * check if the current view allows to print something
+ *
+ * @retval true Yes, view allows to print
+ * @retval false No, view cannot print
+ */
+ bool canPrint(void);
+
+ TransactionEditor* startEdit(const KMyMoneyRegister::SelectedTransactions&);
+
+ bool createNewTransaction(void);
+
+ /**
+ * Used to start reconciliation of account @a account. It switches the
+ * ledger view into reconciliation mode and updates the view.
+ *
+ * @param account account which should be reconciled
+ * @param reconciliationDate the statement date
+ * @param endingBalance the ending balance entered for this account
+ *
+ * @retval true Reconciliation started
+ * @retval false Account cannot be reconciled
+ */
+ bool startReconciliation(const MyMoneyAccount& account, const QDate& reconciliationDate, const MyMoneyMoney& endingBalance);
+
+ /**
+ * Used to finish reconciliation of account @a account. It switches the
+ * ledger view to normal mode and updates the view.
+ *
+ * @param account account which should be reconciled
+ */
+ void finishReconciliation(const MyMoneyAccount& account);
+
+ /**
+ * This method preloads all known currencies into the engine.
+ */
+ void loadDefaultCurrencies(void);
+
+ void loadAncientCurrencies(void);
+
+ void showTitleBar(bool show);
+
+public slots:
+ /**
+ * This slot writes information about the page passed as argument @p widget
+ * in the kmymoney2.rc file so that in can be selected automatically when
+ * the application is started again.
+ *
+ * @param widget pointer to page widget
+ */
+ void slotRememberPage(QWidget* widget);
+
+ /**
+ * Brings up a dialog to change the list(s) settings and saves them into the
+ * class KMyMoneySettings (a singleton).
+ *
+ * @see KListSettingsDlg
+ * Refreshs all views. Used e.g. after settings have been changed or
+ * data has been loaded from external sources (QIF import).
+ **/
+ void slotRefreshViews();
+
+ /**
+ * Called, whenever the ledger view should pop up and a specific
+ * transaction in an account should be shown. If @p transaction
+ * is empty, the last transaction should be selected
+ *
+ * @param acc The ID of the account to be shown
+ * @param transaction The ID of the transaction to be selected
+ */
+ void slotLedgerSelected(const QString& acc, const QString& transaction = QString());
+
+ /**
+ * Called, whenever the payees view should pop up and a specific
+ * transaction in an account should be shown.
+ *
+ * @param payeeId The ID of the payee to be shown
+ * @param accountId The ID of the account to be shown
+ * @param transactionId The ID of the transaction to be selected
+ */
+ void slotPayeeSelected(const QString& payeeId, const QString& accountId, const QString& transactionId);
+
+ /**
+ * Called, whenever the schedule view should pop up and a specific
+ * schedule should be shown.
+ *
+ * @param schedule The ID of the schedule to be shown
+ */
+ void slotScheduleSelected(const QString& schedule);
+
+ /**
+ * Called, whenever the report view should pop up and a specific
+ * report should be shown.
+ *
+ * @param reportid The ID of the report to be shown
+ */
+ void slotShowReport(const QString& reportid);
+
+ /**
+ * Same as the above, but the caller passes in an actual report
+ * definition to be shown.
+ *
+ * @param report The report to be shown
+ */
+ void slotShowReport(const MyMoneyReport& report);
+
+ /**
+ * This slot prints the current view.
+ */
+ void slotPrintView(void);
+
+ /**
+ * This slot switches the view to present the home page
+ */
+ void slotShowHomePage(void) { showPage(0); }
+
+protected slots:
+ /**
+ * Called when the user changes the detail
+ * setting of the transaction register
+ *
+ * @param detailed if true, the register is shown with all details
+ */
+ void slotShowTransactionDetail(bool detailed);
+
+ /**
+ * eventually replace this with KMyMoney2App::slotCurrencySetBase(void).
+ * it contains the same code
+ *
+ * @deprecated
+ */
+ void slotSetBaseCurrency(const MyMoneySecurity& baseCurrency);
+
+private:
+ /**
+ * This method is called from readFile to open a database file which
+ * is to be processed in 'proper' database mode, i.e. in-place updates
+ *
+ * @param dbaseURL pseudo-KURL representation of database
+ *
+ * @retval true Database opened successfully
+ * @retval false Could not open or read database
+ */
+ bool openDatabase (const KURL& dbaseURL);
+ /**
+ * This method is used after a file or database has been
+ * read into storage, and performs various initialization tasks
+ *
+ * @retval true all went okay
+ * @retval false an exception occurred during this process
+ */
+ bool initializeStorage();
+ /**
+ * This method is used by saveFile() to store the data
+ * either directly in the destination file if it is on
+ * the local file system or in a temporary file when
+ * the final destination is reached over a network
+ * protocol (e.g. FTP)
+ *
+ * @param qf pointer to QFile representing the opened file
+ * @param writer pointer to the formatter
+ * @param plaintext whether to override any compression & encryption settings
+ * @param keyList QString containing a comma separated list of keys to be used for encryption
+ * If @p keyList is empty, the file will be saved unencrypted
+ *
+ * @note This method will close the file when it is written.
+ */
+ void saveToLocalFile(QFile* qf, IMyMoneyStorageFormat* writer, bool plaintext=false, const QString& keyList = QString());
+
+ /**
+ * Internal method used by slotAccountNew() and slotAccountCategory().
+ */
+ void accountNew(const bool createCategory);
+
+signals:
+ /**
+ * This signal is emitted whenever a view is selected.
+ * The parameter @p view is identified as one of KMyMoneyView::viewID.
+ */
+ void viewActivated(int view);
+
+ void accountSelectedForContextMenu(const MyMoneyAccount& acc);
+
+ void viewStateChanged(bool enabled);
+ /**
+ * This signal is emitted to inform the kmmFile plugin when various file actions
+ * occur. The Action parameter distinguishes between them.
+ */
+ void kmmFilePlugin (unsigned int action);
+
+ /**
+ * Signal is emitted when reconciliation starts or ends. In case of end,
+ * @a account is MyMoneyAccount()
+ *
+ * @param account account for which reconciliation starts or MyMoneyAccount()
+ * if reconciliation ends.
+ * @param reconciliationDate the statement date
+ * @param endingBalance collected ending balance when reconciliation starts
+ * 0 otherwise
+ */
+ void reconciliationStarts(const MyMoneyAccount& account, const QDate& reconciliationDate, const MyMoneyMoney& endingBalance);
+
+};
+
+/**
+ * This class is an abstract base class that all specific views
+ * should be based on.
+ */
+class KMyMoneyViewBase : public QWidget
+{
+ Q_OBJECT
+public:
+ KMyMoneyViewBase(QWidget* parent, const char *name, const QString& title);
+ virtual ~KMyMoneyViewBase();
+
+ void setTitle(const QString& title);
+ QVBoxLayout* layout(void) const;
+ void addWidget(QWidget* w);
+
+ /**
+ * This method is used to edit the currently selected transactions
+ * The default implementation returns @p false which signals to the caller, that
+ * the view was not capable to edit the transactions.
+ *
+ * @retval false view was not capable to edit transactions
+ * @retval true view was capable to edit the transactions and did so
+ */
+ bool editTransactions(const QValueList<MyMoneyTransaction>& transactions) const { Q_UNUSED(transactions) return false; }
+private:
+ /// \internal d-pointer class.
+ class Private;
+ /// \internal d-pointer instance.
+ Private* const d;
+
+};
+#endif
diff --git a/kmymoney2/views/kpayeesview.cpp b/kmymoney2/views/kpayeesview.cpp
new file mode 100644
index 0000000..ad17ff4
--- /dev/null
+++ b/kmymoney2/views/kpayeesview.cpp
@@ -0,0 +1,1108 @@
+/***************************************************************************
+ kpayeesview.cpp
+ ---------------
+ begin : Thu Jan 24 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ Andreas Nicolai <Andreas.Nicolai@gmx.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qpushbutton.h>
+#include <qcombobox.h>
+#include <qlineedit.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qmultilineedit.h>
+#include <qpixmap.h>
+#include <qtabwidget.h>
+#include <qcursor.h>
+#include <qcheckbox.h>
+#include <qradiobutton.h>
+#include <qpainter.h>
+#include <qheader.h>
+#include <qbuttongroup.h>
+#include <qsplitter.h>
+#include <qmap.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kglobal.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kpushbutton.h>
+#include <kiconloader.h>
+#include <kguiitem.h>
+#include <kstandarddirs.h>
+#include <kdebug.h>
+#include <kapplication.h>
+#include <keditlistbox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/kmymoneyaccounttree.h>
+#include <kmymoney/kmymoneyglobalsettings.h>
+#include "../widgets/klistviewsearchline.h"
+
+#include "kpayeesview.h"
+
+/* -------------------------------------------------------------------------------*/
+/* KTransactionPtrVector */
+/* -------------------------------------------------------------------------------*/
+
+int KTransactionPtrVector::compareItems(const QString& s1, const QString& s2) const
+{
+ if(s1 == s2)
+ return 0;
+ if(s1 < s2)
+ return -1;
+ return 1;
+}
+
+int KTransactionPtrVector::compareItems(KTransactionPtrVector::Item d1, KTransactionPtrVector::Item d2)
+{
+ int rc = 0;
+ MyMoneyTransaction* t1 = static_cast<MyMoneyTransaction*>(d1);
+ MyMoneyTransaction* t2 = static_cast<MyMoneyTransaction*>(d2);
+ MyMoneyMoney tmp;
+
+ try {
+ MyMoneySplit s1;
+ MyMoneySplit s2;
+ switch(m_idMode) {
+ case AccountMode:
+ s1 = t1->splitByAccount(m_id);
+ s2 = t2->splitByAccount(m_id);
+ break;
+ case PayeeMode:
+ s1 = t1->splitByPayee(m_id);
+ s2 = t2->splitByPayee(m_id);
+ break;
+ }
+ QString p1, p2;
+
+ switch(m_sortType) {
+ case SortValue:
+ rc = 1;
+ tmp = s2.value() - s1.value();
+ if(tmp.isZero()) {
+ // same value? Sort by date
+ rc = t2->postDate().daysTo(t1->postDate());
+ if(rc == 0) {
+ // same date? Sort by id
+ rc = compareItems(t1->id(), t2->id());
+ }
+ } else if(tmp.isNegative()) {
+ rc = -1;
+ }
+ break;
+
+ case SortEntryDate:
+ rc = t2->entryDate().daysTo(t1->entryDate());
+ if(rc == 0) {
+ // on same day, lower check numbers show up first
+ rc = compareItems(s1.number(), s2.number());
+ if(rc == 0) {
+ // same number (e.g. empty)? larger amounts show up first
+ rc = 1;
+ tmp = s2.value() - s1.value();
+ if(tmp.isZero()) {
+ // same value? Sort by id
+ rc = compareItems(t1->id(), t2->id());
+ } else if(tmp.isNegative()) {
+ rc = -1;
+ }
+ }
+ }
+ break;
+
+ case SortEntryOrder:
+ // sort by id
+ rc = compareItems(t1->id(), t2->id());
+ break;
+
+ case SortTypeNr:
+ rc = compareItems(s1.action(), s2.action());
+
+ if(rc == 0) {
+ // same action? Sort by nr
+ rc = compareItems(s1.number(), s2.number());
+ if(rc == 0) {
+ // same number? Sort by date
+ rc = t2->postDate().daysTo(t1->postDate());
+ if(rc == 0) {
+ // same date? Sort by value
+ rc = 1;
+ tmp = s2.value() - s1.value();
+ if(tmp.isZero()) {
+ // same value? sort by id
+ rc = compareItems(t1->id(), t2->id());
+ } else if(tmp.isNegative()) {
+ rc = -1;
+ }
+ }
+ }
+ }
+ break;
+
+ case SortReceiver:
+ if(!s2.payeeId().isEmpty()) {
+ p2 = MyMoneyFile::instance()->payee(s2.payeeId()).name();
+ }
+ if(!s1.payeeId().isEmpty()) {
+ p1 = MyMoneyFile::instance()->payee(s1.payeeId()).name();
+ }
+
+ rc = compareItems(p1, p2);
+
+ if(rc == 0) {
+ // same payee? Sort by date
+ rc = t2->postDate().daysTo(t1->postDate());
+ if(rc == 0) {
+ // same date? Sort by value
+ rc = 1;
+ tmp = s2.value() - s1.value();
+ if(tmp.isZero()) {
+ // same value? sort by id
+ rc = compareItems(t1->id(), t2->id());
+ } else if(tmp.isNegative()) {
+ rc = -1;
+ }
+ }
+ }
+ break;
+
+ case SortNr:
+ rc = compareItems(s1.number(), s2.number());
+ if(rc == 0) {
+ // same number? Sort by date
+ rc = t2->postDate().daysTo(t1->postDate());
+ if(rc == 0) {
+ // same date? Sort by value
+ rc = 1;
+ tmp = s2.value() - s1.value();
+ if(tmp.isZero()) {
+ // same value? sort by id
+ rc = compareItems(t1->id(), t2->id());
+ } else if(tmp.isNegative()) {
+ rc = -1;
+ }
+ }
+ }
+ break;
+
+ case SortPostDate:
+ // tricky fall through here!
+ default:
+ // sort by post date
+ rc = t2->postDate().daysTo(t1->postDate());
+ if(rc == 0) {
+ // on same day, lower check numbers show up first
+ rc = compareItems(s1.number(), s2.number());
+ if(rc == 0) {
+ // same number (e.g. empty)? larger amounts show up first
+ rc = 1;
+ tmp = s2.value() - s1.value();
+ if(tmp.isZero()) {
+ // same value? Sort by id
+ rc = compareItems(t1->id(), t2->id());
+ } else if(tmp.isNegative()) {
+ rc = -1;
+ }
+ }
+ }
+ break;
+ }
+ } catch (MyMoneyException *e) {
+ delete e;
+ }
+ return rc;
+}
+
+void KTransactionPtrVector::setSortType(const TransactionSortE type)
+{
+ m_sortType = type;
+ sort();
+}
+
+void KTransactionPtrVector::setAccountId(const QString& id)
+{
+ m_id = id;
+ m_idMode = AccountMode;
+}
+
+void KTransactionPtrVector::setPayeeId(const QString& id)
+{
+ m_id = id;
+ m_idMode = PayeeMode;
+}
+
+
+// *** KPayeeListItem Implementation ***
+
+KPayeeListItem::KPayeeListItem(KListView *parent, const MyMoneyPayee& payee) :
+ KListViewItem(parent),
+ m_payee(payee)
+{
+ setText(0, payee.name());
+ // allow in column rename
+ setRenameEnabled(0, true);
+}
+
+KPayeeListItem::~KPayeeListItem()
+{
+}
+
+void KPayeeListItem::paintCell(QPainter *p, const QColorGroup & cg, int column, int width, int align)
+{
+ QColorGroup cg2(cg);
+
+ if(isAlternate())
+ cg2.setColor(QColorGroup::Base, KMyMoneyGlobalSettings::listColor());
+ else
+ cg2.setColor(QColorGroup::Base, KMyMoneyGlobalSettings::listBGColor());
+
+ p->setFont(KMyMoneyGlobalSettings::listCellFont());
+
+ QListViewItem::paintCell(p, cg2, column, width, align);
+}
+
+KTransactionListItem::KTransactionListItem(KListView* view, KTransactionListItem* parent, const QString& accountId, const QString& transactionId) :
+ KListViewItem(view, parent)
+{
+ m_accountId = accountId;
+ m_transactionId = transactionId;
+}
+
+KTransactionListItem::~KTransactionListItem()
+{
+}
+
+void KTransactionListItem::paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment)
+{
+ QColorGroup _cg = cg;
+ _cg.setColor(QColorGroup::Base, backgroundColor());
+ QListViewItem::paintCell(p, _cg, column, width, alignment);
+}
+
+const QColor KTransactionListItem::backgroundColor(void)
+{
+ return isAlternate() ? KMyMoneyGlobalSettings::listBGColor() : KMyMoneyGlobalSettings::listColor();
+}
+
+
+
+
+// *** KPayeesView Implementation ***
+
+KPayeesView::KPayeesView(QWidget *parent, const char *name ) :
+ KPayeesViewDecl(parent,name),
+ m_needReload(false),
+ m_needConnection(true),
+ m_updatesQueued(0),
+ m_inSelection(false)
+{
+ // create the searchline widget
+ // and insert it into the existing layout
+ m_searchWidget = new KListViewSearchLineWidget(m_payeesList, this);
+ m_searchWidget->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed));
+ KPayeesViewDeclLayout->insertWidget(0, m_searchWidget);
+
+ m_splitter = new QSplitter(this);
+ m_payeesList->reparent(m_splitter, QPoint(0,0), true);
+ m_tabWidget->reparent(m_splitter, QPoint(0, 0), true);
+ m_splitter->setResizeMode(m_tabWidget, QSplitter::Stretch);
+ m_splitter->setOpaqueResize();
+ layout10->addWidget(m_splitter);
+
+ // use the size settings of the last run (if any)
+ KConfig *config = KGlobal::config();
+ config->setGroup("Last Use Settings");
+ QValueList<int> sizes = config->readIntListEntry("KPayeesViewSplitterSize");
+ if(sizes.size() == 2) {
+ if(!sizes[0] || !sizes[1]) {
+ sizes[0] = 1;
+ sizes[1] = 2;
+ }
+ m_splitter->setSizes(sizes);
+ }
+
+ m_transactionView->setSorting(-1);
+ m_transactionView->setColumnWidthMode(2, QListView::Manual);
+ m_transactionView->setColumnAlignment(3, Qt::AlignRight);
+ // never show horizontal scroll bars
+ m_transactionView->setHScrollBarMode(QScrollView::AlwaysOff);
+
+ m_payeesList->addColumn(i18n("Name"));
+
+ m_updateButton->setEnabled(false);
+ radioNoMatch->setChecked(true);
+
+ checkMatchIgnoreCase->setEnabled(false);
+
+ checkEnableDefaultAccount->setChecked(false);
+ labelDefaultAccount->setEnabled(false);
+ comboDefaultAccount->setEnabled(false);
+
+ KIconLoader* il = KGlobal::iconLoader();
+ KGuiItem updateButtenItem( i18n("Update"),
+ QIconSet(il->loadIcon("button_ok", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Accepts the entered data and stores it"),
+ i18n("Use this to accept the modified data."));
+ m_updateButton->setGuiItem(updateButtenItem);
+
+ connect(m_payeesList, SIGNAL(selectionChanged()), this, SLOT(slotSelectPayee()));
+ connect(m_payeesList, SIGNAL(itemRenamed(QListViewItem*,int,const QString&)), this, SLOT(slotRenamePayee(QListViewItem*,int,const QString&)));
+
+ connect(addressEdit, SIGNAL(textChanged()), this, SLOT(slotPayeeDataChanged()));
+ connect(postcodeEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotPayeeDataChanged()));
+ connect(telephoneEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotPayeeDataChanged()));
+ connect(emailEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotPayeeDataChanged()));
+ connect(notesEdit, SIGNAL(textChanged()), this, SLOT(slotPayeeDataChanged()));
+ connect(matchKeyEditList, SIGNAL(changed()), this, SLOT(slotKeyListChanged()));
+
+ connect(radioNoMatch, SIGNAL(toggled(bool)), this, SLOT(slotPayeeDataChanged()));
+ connect(radioNameMatch, SIGNAL(toggled(bool)), this, SLOT(slotPayeeDataChanged()));
+ connect(radioKeyMatch, SIGNAL(toggled(bool)), this, SLOT(slotPayeeDataChanged()));
+ connect(checkMatchIgnoreCase, SIGNAL(toggled(bool)), this, SLOT(slotPayeeDataChanged()));
+
+ connect(checkEnableDefaultAccount, SIGNAL(toggled(bool)), this, SLOT(slotPayeeDataChanged()));
+ connect(comboDefaultAccount, SIGNAL(accountSelected(const QString&)), this, SLOT(slotPayeeDataChanged()));
+ connect(buttonSelectMyAccount, SIGNAL(clicked()), this, SLOT(slotChooseDefaultAccount()));
+
+ connect(m_updateButton, SIGNAL(clicked()), this, SLOT(slotUpdatePayee()));
+ connect(m_helpButton, SIGNAL(clicked()), this, SLOT(slotHelp()));
+
+ connect(m_payeesList, SIGNAL(contextMenu(KListView*, QListViewItem*, const QPoint&)), this, SLOT(slotOpenContextMenu(KListView*, QListViewItem*, const QPoint&)));
+
+// connect(m_payeesList, SIGNAL(rightButtonClicked(QListViewItem* , const QPoint&, int)),
+// this, SLOT(slotOpenContextMenu(QListViewItem*)));
+
+ connect(m_transactionView, SIGNAL(doubleClicked(QListViewItem*)),
+ this, SLOT(slotTransactionDoubleClicked(QListViewItem*)));
+
+ connect(m_tabWidget, SIGNAL(currentChanged(QWidget*)), this, SLOT(rearrange(void)));
+
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotLoadPayees()));
+}
+
+KPayeesView::~KPayeesView()
+{
+ // remember the splitter settings for startup
+ KConfig *config = KGlobal::config();
+ config->setGroup("Last Use Settings");
+ config->writeEntry("KPayeesViewSplitterSize", m_splitter->sizes());
+}
+
+void KPayeesView::slotQueueUpdate(void)
+{
+ m_updatesQueued++;
+ // The KListViewSearchLineWidget has an internal timer for update purposes
+ // of 200 ms, so we should be safe with 250 ms here
+ QTimer::singleShot(250, this, SLOT(slotActivateUpdate()));
+}
+
+void KPayeesView::slotActivateUpdate(void)
+{
+ --m_updatesQueued;
+ if(m_updatesQueued == 0)
+ slotSelectPayee();
+}
+
+void KPayeesView::slotChooseDefaultAccount(void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ QMap<QString,int> account_count;
+
+ for (int i = 0; i < m_transactionPtrVector.size(); ++i) {
+ KMyMoneyTransaction* t = m_transactionPtrVector[i];
+ MyMoneySplit s = t->splitById(t->splitId());
+ const MyMoneyAccount& acc = file->account(s.accountId());
+
+ QString txt;
+ if (s.action() != MyMoneySplit::ActionAmortization
+ && acc.accountType() != MyMoneyAccount::AssetLoan
+ && !file->isTransfer(*t)
+ && t->splitCount() == 2) {
+ MyMoneySplit s0 = t->splitByAccount(s.accountId(), false);
+ if (account_count.contains(s0.accountId())) {
+ account_count[s0.accountId()]++;
+ }
+ else {
+ account_count[s0.accountId()] = 1;
+ }
+ }
+ }
+
+ QMapIterator<QString,int> most_frequent, iter;
+ most_frequent = account_count.end();
+ for (iter = account_count.begin(); iter != account_count.end(); iter++) {
+ if (iter.data() > most_frequent.data()) {
+ most_frequent = iter;
+ }
+ }
+
+ if (most_frequent != account_count.end()) {
+ checkEnableDefaultAccount->setChecked(true);
+ comboDefaultAccount->setSelected(most_frequent.key());
+ }
+}
+
+void KPayeesView::slotStartRename(void)
+{
+ QListViewItemIterator it_l(m_payeesList, QListViewItemIterator::Selected);
+ QListViewItem* it_v;
+ if((it_v = it_l.current()) != 0) {
+ it_v->startRename(0);
+ }
+}
+
+// This variant is only called when a single payee is selected and renamed.
+void KPayeesView::slotRenamePayee(QListViewItem* p , int /* col */, const QString& txt)
+{
+ //kdDebug() << "[KPayeesView::slotRenamePayee]" << endl;
+ // create a copy of the new name without appended whitespaces
+ QString new_name = txt.stripWhiteSpace();
+ if (m_payee.name() != new_name) {
+ MyMoneyFileTransaction ft;
+ try {
+ // check if we already have a payee with the new name
+ try {
+ // this function call will throw an exception, if the payee
+ // hasn't been found.
+ MyMoneyFile::instance()->payeeByName(new_name);
+ // the name already exists, ask the user whether he's sure to keep the name
+ if (KMessageBox::questionYesNo(this,
+ i18n("A payee with the name '%1' already exists. It is not advisable to have "
+ "multiple payees with the same identification name. Are you sure you would like "
+ "to rename the payee?").arg(new_name)) != KMessageBox::Yes)
+ {
+ p->setText(0,m_payee.name());
+ return;
+ }
+ } catch(MyMoneyException *e) {
+ // all ok, the name is unique
+ delete e;
+ }
+
+ m_payee.setName(new_name);
+ m_newName = new_name;
+ MyMoneyFile::instance()->modifyPayee(m_payee);
+
+ // the above call to modifyPayee will reload the view so
+ // all references and pointers to the view have to be
+ // re-established.
+
+ // make sure, that the record is visible even if it moved
+ // out of sight due to the rename operation
+ ensurePayeeVisible(m_payee.id());
+
+ ft.commit();
+
+ } catch(MyMoneyException *e) {
+ KMessageBox::detailedSorry(0, i18n("Unable to modify payee"),
+ (e->what() + " " + i18n("thrown in") + " " + e->file()+ ":%1").arg(e->line()));
+ delete e;
+ }
+ }
+ else {
+ p->setText(0, new_name);
+ }
+}
+
+void KPayeesView::ensurePayeeVisible(const QString& id)
+{
+ for (QListViewItem * item = m_payeesList->firstChild(); item; item = item->itemBelow()) {
+ KPayeeListItem* p = dynamic_cast<KPayeeListItem*>(item);
+ if(p && p->payee().id() == id) {
+ if(p->itemAbove())
+ m_payeesList->ensureItemVisible(p->itemAbove());
+ if(p->itemBelow())
+ m_payeesList->ensureItemVisible(p->itemBelow());
+
+ m_payeesList->setCurrentItem(p); // active item and deselect all others
+ m_payeesList->setSelected(p, true); // and select it
+ m_payeesList->ensureItemVisible(p);
+ break;
+ }
+ }
+}
+
+void KPayeesView::selectedPayees(QValueList<MyMoneyPayee>& payeesList) const
+{
+ QListViewItemIterator it_l(m_payeesList, QListViewItemIterator::Selected | QListViewItemIterator::Visible);
+ QListViewItem* it_v;
+ while((it_v = it_l.current()) != 0) {
+ KPayeeListItem* item = dynamic_cast<KPayeeListItem*>(it_v);
+ if(item)
+ payeesList << item->payee();
+ ++it_l;
+ }
+}
+
+void KPayeesView::slotSelectPayee(void)
+{
+ // check if the content of a currently selected payee was modified
+ // and ask to store the data
+ if (m_updateButton->isEnabled()) {
+ if (KMessageBox::questionYesNo(this, QString("<qt>%1</qt>").arg(
+ i18n("Do you want to save the changes for <b>%1</b>?").arg(m_newName)),
+ i18n("Save changes")) == KMessageBox::Yes) {
+ m_inSelection = true;
+ slotUpdatePayee();
+ m_inSelection = false;
+ }
+ }
+
+ // loop over all payees and count the number of payees, also
+ // optain last selected payee
+ QValueList<MyMoneyPayee> payeesList;
+ selectedPayees(payeesList);
+
+ emit selectObjects(payeesList);
+
+ if (payeesList.count() == 0) {
+ m_tabWidget->setEnabled(false); // disable tab widget
+ clearItemData();
+ m_payee = MyMoneyPayee();
+ return; // make sure we don't access an undefined payee
+ }
+
+ // if we have multiple payees selected, clear and disable the payee informations
+ if (payeesList.count() > 1) {
+ m_tabWidget->setEnabled(false); // disable tab widget
+ clearItemData();
+ // disable renaming in all listviewitem
+ for (QListViewItem * i = m_payeesList->firstChild(); i; i = i->itemBelow())
+ i->setRenameEnabled(0, false);
+ return;
+ }
+ // otherwise we have just one selected, enable payee information widget
+ m_tabWidget->setEnabled(true);
+ // enable renaming in all listviewitem
+ for (QListViewItem * i = m_payeesList->firstChild(); i; i = i->itemBelow())
+ i->setRenameEnabled(0, true);
+
+ // as of now we are updating only the last selected payee, and until
+ // selection mode of the QListView has been changed to Extended, this
+ // will also be the only selection and behave exactly as before - Andreas
+ try {
+ m_payee = payeesList[0];
+ m_newName = m_payee.name();
+
+ addressEdit->setEnabled(true);
+ addressEdit->setText(m_payee.address());
+ postcodeEdit->setEnabled(true);
+ postcodeEdit->setText(m_payee.postcode());
+ telephoneEdit->setEnabled(true);
+ telephoneEdit->setText(m_payee.telephone());
+ emailEdit->setEnabled(true);
+ emailEdit->setText(m_payee.email());
+ notesEdit->setText(m_payee.notes());
+
+ QStringList keys;
+ bool ignorecase = false;
+ MyMoneyPayee::payeeMatchType type = m_payee.matchData(ignorecase, keys);
+
+ m_matchType->setButton(static_cast<int>(type));
+ matchKeyEditList->clear();
+ matchKeyEditList->insertStringList(keys);
+ checkMatchIgnoreCase->setChecked(ignorecase);
+
+ checkEnableDefaultAccount->setChecked(m_payee.defaultAccountEnabled());
+ comboDefaultAccount->setSelected(m_payee.defaultAccountId());
+
+ slotPayeeDataChanged();
+
+ showTransactions();
+
+ } catch(MyMoneyException *e) {
+ qDebug("exception during display of payee: %s at %s:%ld", e->what().latin1(), e->file().latin1(), e->line());
+ m_transactionView->clear();
+ m_payee = MyMoneyPayee();
+ delete e;
+ }
+}
+
+void KPayeesView::clearItemData(void)
+{
+ addressEdit->setText(QString());
+ postcodeEdit->setText(QString());
+ telephoneEdit->setText(QString());
+ emailEdit->setText(QString());
+ notesEdit->setText(QString());
+ showTransactions();
+}
+
+void KPayeesView::showTransactions(void)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyMoney balance(0);
+ unsigned int i;
+
+ // clear the current transaction listview
+ m_transactionView->clear();
+
+ if(m_payee.id().isEmpty() || !m_tabWidget->isEnabled()) {
+ m_balanceLabel->setText(i18n("Balance: %1").arg(balance.formatMoney(MyMoneyFile::instance()->baseCurrency().smallestAccountFraction())));
+ return;
+ }
+
+ // setup the list and the pointer vector
+ MyMoneyTransactionFilter filter;
+ filter.addPayee(m_payee.id());
+ filter.setDateFilter(KMyMoneyGlobalSettings::startDate().date(), QDate());
+
+ QValueList<MyMoneyTransaction> list = file->transactionList(filter);
+ m_transactionList.clear();
+
+ m_transactionPtrVector.clear();
+ m_transactionPtrVector.resize(list.size());
+ m_transactionPtrVector.setPayeeId(m_payee.id());
+ m_transactionPtrVector.setSortType(KTransactionPtrVector::SortPostDate);
+
+ QValueList<MyMoneyTransaction>::ConstIterator it_t;
+ QString lastId;
+ int ofs = 0;
+
+ for(i = 0, it_t = list.begin(); it_t != list.end(); ++it_t) {
+ KMyMoneyTransaction k(*it_t);
+
+ filter.match(*it_t);
+ if(lastId != (*it_t).id()) {
+ ofs = 0;
+ lastId = (*it_t).id();
+ } else
+ ofs++;
+
+ k.setSplitId(filter.matchingSplits()[ofs].id());
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(filter.matchingSplits()[ofs].accountId());
+ if(acc.accountGroup() == MyMoneyAccount::Asset
+ || acc.accountGroup() == MyMoneyAccount::Liability) {
+ QValueList<KMyMoneyTransaction>::ConstIterator it_k;
+ it_k = m_transactionList.append(k);
+ balance += k.splitById(k.splitId()).value();
+ m_transactionPtrVector.insert(i, &(*it_k));
+ ++i;
+ }
+ }
+ m_transactionPtrVector.resize(i);
+
+ // sort the transactions
+ m_transactionPtrVector.sort();
+
+ // and fill the m_transactionView
+ KTransactionListItem *item = 0;
+
+ for(i = 0; i < m_transactionPtrVector.size(); ++i) {
+ KMyMoneyTransaction* t = m_transactionPtrVector[i];
+ MyMoneySplit s = t->splitById(t->splitId());
+ const MyMoneyAccount& acc = file->account(s.accountId());
+
+ item = new KTransactionListItem(m_transactionView, item, s.accountId(), t->id());
+ item->setText(0, s.number());
+ item->setText(1, KGlobal::locale()->formatDate(t->postDate(), true));
+
+ QString txt;
+ if(s.action() == MyMoneySplit::ActionAmortization) {
+ if(acc.accountType() == MyMoneyAccount::Loan) {
+ if(s.value().isPositive()) {
+ txt = i18n("Amortization of %1").arg(acc.name());
+ } else {
+ txt = i18n("Payment to %1").arg(acc.name());
+ }
+ } else if(acc.accountType() == MyMoneyAccount::AssetLoan) {
+ if(s.value().isNegative()) {
+ txt = i18n("Amortization of %1").arg(acc.name());
+ } else {
+ txt = i18n("Payment to %1").arg(acc.name());
+ }
+ } else {
+ txt = i18n("Loan payment from %1").arg(acc.name());
+ }
+ } else if (file->isTransfer(*t)) {
+ if(!s.value().isNegative()) {
+ txt = i18n("Transfer to %1").arg(acc.name());
+ } else {
+ txt = i18n("Transfer from %1").arg(acc.name());
+ }
+ } else if(t->splitCount() > 2) {
+ txt = i18n("Split transaction (category replacement)", "Split transaction");
+ } else if(t->splitCount() == 2) {
+ MyMoneySplit s0 = t->splitByAccount(s.accountId(), false);
+ txt = MyMoneyFile::instance()->accountToCategory(s0.accountId());
+ }
+ item->setText(2, txt);
+ item->setText(3, s.value().formatMoney(acc.fraction()));
+ }
+ m_balanceLabel->setText(i18n("Balance: %1").arg(balance.formatMoney(MyMoneyFile::instance()->baseCurrency().smallestAccountFraction())));
+
+ // Trick: it seems, that the initial sizing of the view does
+ // not work correctly. At least, the columns do not get displayed
+ // correct. Reason: the return value of m_transactionView->visibleWidth()
+ // is incorrect. If the widget is visible, resizing works correctly.
+ // So, we let the dialog show up and resize it then. It's not really
+ // clean, but the only way I got the damned thing working.
+ QTimer::singleShot(50, this, SLOT(rearrange()));
+}
+
+void KPayeesView::slotKeyListChanged(void)
+{
+ bool rc = false;
+ bool ignorecase = false;
+ QStringList keys;
+ // J.Rodehueser: delete unused variable 'type'
+ // orig: MyMoneyPayee::payeeMatchType type = m_payee.matchData(ignorecase, keys);
+ m_payee.matchData(ignorecase, keys);
+ if(m_matchType->selectedId() == MyMoneyPayee::matchKey) {
+ rc |= (keys != matchKeyEditList->items());
+ }
+ m_updateButton->setEnabled(rc);
+}
+
+void KPayeesView::slotPayeeDataChanged(void)
+{
+ kdDebug(2) << "KPayeesView::slotPayeeDataChanged(void)" << endl;
+
+ bool rc = false;
+
+ if(m_tabWidget->isEnabled()) {
+ rc |= ((m_payee.email().isEmpty() != emailEdit->text().isEmpty())
+ || (!emailEdit->text().isEmpty() && m_payee.email() != emailEdit->text()));
+ rc |= ((m_payee.address().isEmpty() != addressEdit->text().isEmpty())
+ || (!addressEdit->text().isEmpty() && m_payee.address() != addressEdit->text()));
+ rc |= ((m_payee.postcode().isEmpty() != postcodeEdit->text().isEmpty())
+ || (!postcodeEdit->text().isEmpty() && m_payee.postcode() != postcodeEdit->text()));
+ rc |= ((m_payee.telephone().isEmpty() != telephoneEdit->text().isEmpty())
+ || (!telephoneEdit->text().isEmpty() && m_payee.telephone() != telephoneEdit->text()));
+ rc |= ((m_payee.name().isEmpty() != m_newName.isEmpty())
+ || (!m_newName.isEmpty() && m_payee.name() != m_newName));
+ rc |= ((m_payee.notes().isEmpty() != notesEdit->text().isEmpty())
+ || (!notesEdit->text().isEmpty() && m_payee.notes() != notesEdit->text()));
+
+ bool ignorecase = false;
+ QStringList keys;
+
+ MyMoneyPayee::payeeMatchType type = m_payee.matchData(ignorecase, keys);
+ rc |= (static_cast<int>(type) != m_matchType->selectedId());
+
+ checkMatchIgnoreCase->setEnabled(false);
+ matchKeyEditList->setEnabled(false);
+
+ if(m_matchType->selectedId() != MyMoneyPayee::matchDisabled) {
+ checkMatchIgnoreCase->setEnabled(true);
+ // if we turn matching on, we default to 'ignore case'
+ // TODO maybe make the default a user option
+ if(type == MyMoneyPayee::matchDisabled && m_matchType->selectedId() != MyMoneyPayee::matchDisabled)
+ checkMatchIgnoreCase->setChecked(true);
+ rc |= (ignorecase != checkMatchIgnoreCase->isChecked());
+ if(m_matchType->selectedId() == MyMoneyPayee::matchKey) {
+ matchKeyEditList->setEnabled(true);
+ rc |= (keys != matchKeyEditList->items());
+ }
+ }
+
+ rc |= (checkEnableDefaultAccount->isChecked() != m_payee.defaultAccountEnabled());
+ if (checkEnableDefaultAccount->isChecked()) {
+ comboDefaultAccount->setEnabled(true);
+ labelDefaultAccount->setEnabled(true);
+ // this is only going to understand the first in the list of selected accounts
+ if (comboDefaultAccount->selectedAccounts().empty()) {
+ rc |= !m_payee.defaultAccountId().isEmpty();
+ }
+ else {
+ QString temp = comboDefaultAccount->selectedAccounts().front();
+ rc |= ( temp.isEmpty() != m_payee.defaultAccountId().isEmpty())
+ || (!m_payee.defaultAccountId().isEmpty() && temp != m_payee.defaultAccountId());
+ }
+ }
+ else {
+ comboDefaultAccount->setEnabled(false);
+ labelDefaultAccount->setEnabled(false);
+ }
+ }
+ m_updateButton->setEnabled(rc);
+}
+
+void KPayeesView::slotUpdatePayee(void)
+{
+ if(m_updateButton->isEnabled()) {
+ MyMoneyFileTransaction ft;
+ m_updateButton->setEnabled(false);
+ try {
+ m_payee.setName(m_newName);
+ m_payee.setAddress(addressEdit->text());
+ m_payee.setPostcode(postcodeEdit->text());
+ m_payee.setTelephone(telephoneEdit->text());
+ m_payee.setEmail(emailEdit->text());
+ m_payee.setNotes(notesEdit->text());
+ m_payee.setMatchData(static_cast<MyMoneyPayee::payeeMatchType>(m_matchType->selectedId()), checkMatchIgnoreCase->isChecked(), matchKeyEditList->items());
+ m_payee.setDefaultAccountId();
+
+ if (checkEnableDefaultAccount->isChecked()) {
+ QString temp;
+ if (!comboDefaultAccount->selectedAccounts().empty()) {
+ temp = comboDefaultAccount->selectedAccounts().front();
+ m_payee.setDefaultAccountId(temp);
+ }
+ }
+
+ MyMoneyFile::instance()->modifyPayee(m_payee);
+ ft.commit();
+
+ } catch(MyMoneyException *e) {
+ KMessageBox::detailedSorry(0, i18n("Unable to modify payee"),
+ (e->what() + " " + i18n("thrown in") + " " + e->file()+ ":%1").arg(e->line()));
+ delete e;
+ }
+ }
+}
+
+void KPayeesView::readConfig(void)
+{
+ m_transactionView->setFont(KMyMoneyGlobalSettings::listCellFont());
+
+ QFontMetrics fm( KMyMoneyGlobalSettings::listHeaderFont() );
+ int height = fm.lineSpacing()+6;
+
+ m_transactionView->header()->setMinimumHeight(height);
+ m_transactionView->header()->setMaximumHeight(height);
+ m_transactionView->header()->setFont(KMyMoneyGlobalSettings::listHeaderFont());
+
+ m_payeesList->setDefaultRenameAction(
+ KMyMoneyGlobalSettings::focusChangeIsEnter() ? QListView::Accept : QListView::Reject);
+
+ //initialize the account list?
+ comboDefaultAccount->loadList((KMyMoneyUtils::categoryTypeE)(KMyMoneyUtils::asset | KMyMoneyUtils::liability | MyMoneyAccount::Income | MyMoneyAccount::Expense));
+
+}
+
+void KPayeesView::show(void)
+{
+ // since we could not construct the connection in our own ctor,
+ // we set it up now. The widgets of the KListViewSearchLineWidget must exist by now.
+ // If you want to learn about the details, see the source of KListViewSearchLineWidget's
+ // constructor
+ if(m_needConnection) {
+ connect(m_searchWidget->searchLine(), SIGNAL(textChanged(const QString&)), this, SLOT(slotQueueUpdate(void)));
+ m_needConnection = false;
+ }
+
+ if(m_needReload) {
+ loadPayees();
+ m_needReload = false;
+ }
+
+ // fixup the layout
+ QTimer::singleShot(0, this, SLOT(rearrange()));
+
+ // don't forget base class implementation
+ KPayeesViewDecl::show();
+
+ QValueList<MyMoneyPayee> list;
+ selectedPayees(list);
+ emit selectObjects(list);
+}
+
+void KPayeesView::slotLoadPayees(void)
+{
+ if(isVisible()) {
+ if(m_inSelection)
+ QTimer::singleShot(0, this, SLOT(slotLoadPayees()));
+ else
+ loadPayees();
+ } else {
+ m_needReload = true;
+ }
+}
+
+void KPayeesView::loadPayees(void)
+{
+ if(m_inSelection)
+ return;
+
+ QMap<QString, bool> isSelected;
+ QString id;
+
+ ::timetrace("Start KPayeesView::loadPayees");
+ readConfig();
+
+ // remember which items are selected in the list
+ QListViewItemIterator it_l(m_payeesList, QListViewItemIterator::Selected);
+ QListViewItem* it_v;
+ while((it_v = it_l.current()) != 0) {
+ KPayeeListItem* item = dynamic_cast<KPayeeListItem*>(it_v);
+ if(item)
+ isSelected[item->payee().id()] = true;
+ ++it_l;
+ }
+
+ // keep current selected item
+ KPayeeListItem *currentItem = static_cast<KPayeeListItem *>(m_payeesList->currentItem());
+ if(currentItem)
+ id = currentItem->payee().id();
+
+ // remember the upper left corner of the viewport
+ QPoint startPoint = m_payeesList->viewportToContents(QPoint(0, 0));
+
+ // turn off updates to avoid flickering during reload
+ m_payeesList->setUpdatesEnabled(false);
+
+ // clear the list
+ m_payeesList->clear();
+ m_transactionView->clear();
+ currentItem = 0;
+
+ QValueList<MyMoneyPayee>list = MyMoneyFile::instance()->payeeList();
+ QValueList<MyMoneyPayee>::ConstIterator it;
+
+ for (it = list.begin(); it != list.end(); ++it) {
+ KPayeeListItem* item = new KPayeeListItem(m_payeesList, *it);
+ if(item->payee().id() == id)
+ currentItem = item;
+ if(isSelected[item->payee().id()])
+ item->setSelected(true);
+ }
+
+ if (currentItem) {
+ m_payeesList->setCurrentItem(currentItem);
+ }
+
+ // reposition viewport
+ m_payeesList->setContentsPos(startPoint.x(), startPoint.y());
+
+ m_searchWidget->searchLine()->updateSearch(QString::null);
+
+ // turn updates back on
+ m_payeesList->setUpdatesEnabled(true);
+ m_payeesList->repaintContents();
+
+ slotSelectPayee();
+
+ ::timetrace("End KPayeesView::loadPayees");
+}
+
+void KPayeesView::rearrange(void)
+{
+ resizeEvent(0);
+}
+
+void KPayeesView::resizeEvent(QResizeEvent* ev)
+{
+ // resize the register
+ int w = m_transactionView->visibleWidth();
+ w -= m_transactionView->columnWidth(0);
+ w -= m_transactionView->columnWidth(1);
+ w -= m_transactionView->columnWidth(3);
+ m_transactionView->setColumnWidth(2, w);
+ m_transactionView->resizeContents(
+ m_transactionView->visibleWidth(),
+ m_transactionView->contentsHeight());
+
+ m_payeesList->setColumnWidth(0, m_payeesList->visibleWidth());
+ KPayeesViewDecl::resizeEvent(ev);
+}
+
+void KPayeesView::slotTransactionDoubleClicked(QListViewItem* i)
+{
+ KTransactionListItem* item = static_cast<KTransactionListItem *>(i);
+ if (item)
+ emit transactionSelected(item->accountId(), item->transactionId());
+}
+
+void KPayeesView::slotSelectPayeeAndTransaction(const QString& payeeId, const QString& accountId, const QString& transactionId)
+{
+ if(!isVisible())
+ return;
+
+ try {
+ // clear filter
+ m_searchWidget->searchLine()->clear();
+ m_searchWidget->searchLine()->updateSearch();
+
+ // deselect all other selected items
+ QListViewItemIterator it_l(m_payeesList, QListViewItemIterator::Selected);
+ QListViewItem* it_v;
+ while((it_v = it_l.current()) != 0) {
+ KPayeeListItem* item = dynamic_cast<KPayeeListItem*>(it_v);
+ if(item)
+ item->setSelected(false);
+ ++it_l;
+ }
+
+ // find the payee in the list
+ QListViewItem* it;
+ for(it = m_payeesList->firstChild(); it; it = it->itemBelow()) {
+ KPayeeListItem* item = dynamic_cast<KPayeeListItem *>(it);
+ if(item && item->payee().id() == payeeId) {
+ if(it->itemAbove())
+ m_payeesList->ensureItemVisible(it->itemAbove());
+ if(it->itemBelow())
+ m_payeesList->ensureItemVisible(it->itemBelow());
+
+ m_payeesList->setCurrentItem(it); // active item and deselect all others
+ m_payeesList->setSelected(it,true); // and select it
+ m_payeesList->ensureItemVisible(it);
+
+ KTransactionListItem* item = dynamic_cast<KTransactionListItem*> (m_transactionView->firstChild());
+ while(item != 0) {
+ if(item->accountId() == accountId && item->transactionId() == transactionId)
+ break;
+ item = dynamic_cast<KTransactionListItem*> (item->nextSibling());
+ }
+ if(!item) {
+ item = dynamic_cast<KTransactionListItem*> (m_transactionView->firstChild());
+ }
+ if(item) {
+ m_transactionView->setSelected(item, true);
+ m_transactionView->ensureItemVisible(item);
+ }
+ // quit out of for() loop
+ break;
+ }
+ }
+
+ } catch(MyMoneyException *e) {
+ qWarning("Unexpected exception in KPayeesView::slotSelectPayeeAndTransaction");
+ delete e;
+ }
+}
+
+void KPayeesView::slotOpenContextMenu(KListView* lv, QListViewItem* i, const QPoint& p)
+{
+ Q_UNUSED(p);
+ if(lv == m_payeesList) {
+ KPayeeListItem* item = dynamic_cast<KPayeeListItem*>(i);
+ if(item) {
+ emit openContextMenu(item->payee());
+ }
+ }
+}
+
+void KPayeesView::slotHelp(void)
+{
+ kapp->invokeHelp("details.payees.personalinformation");
+}
+
+#include "kpayeesview.moc"
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/views/kpayeesview.h b/kmymoney2/views/kpayeesview.h
new file mode 100644
index 0000000..92f98fd
--- /dev/null
+++ b/kmymoney2/views/kpayeesview.h
@@ -0,0 +1,325 @@
+/***************************************************************************
+ kpayeesview.h
+ -------------
+ begin : Thu Jan 24 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ 2005 by Andrea Nicolai
+ 2006 by Thomas Baumgart
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ Andreas Nicolai <Andreas.Nicolai@gmx.net>
+***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KPAYEESVIEW_H
+#define KPAYEESVIEW_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+class QSplitter;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klistview.h>
+#include <kpopupmenu.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kpayeesviewdecl.h"
+#include "kmymoneytransaction.h"
+#include <kmymoney/mymoneypayee.h>
+
+class KListViewSearchLineWidget;
+
+/**
+ * @author Michael Edwardes, Thomas Baumgart
+ */
+
+/**
+ * This class is used to store a sorted vector of pointers to
+ * the transactions that are visible in a ledger view. When the
+ * vector is created, the sort method is set to SortPostDate.
+ * The sort type can be changed using the method setSortType().
+ */
+class KTransactionPtrVector : public QPtrVector<KMyMoneyTransaction> {
+public:
+ /**
+ * This enumerator defines the possible sort methods.
+ * Possible values are:
+ *
+ */
+ enum TransactionSortE {
+ SortEntryDate = 0, /**< Sort the vector so that the transactions appear sorted
+ * according to their entry date
+ */
+ SortPostDate, /**< Sort the vector so that the transactions appear sorted
+ * according to their post date
+ */
+ SortTypeNr, /**< Sort the vector so that the transactions appear sorted
+ * according to their action and nr
+ */
+ SortReceiver, /**< Sort the vector so that the transactions appear sorted
+ * according to their receiver
+ */
+ SortValue, /**< Sort the vector so that the transactions appear sorted
+ * according to their value
+ */
+ SortNr, /**< Sort the vector so that the transactions appear sorted
+ * according to nr field contents
+ */
+ SortEntryOrder /**< Sort the vector so that the transactions appear sorted
+ * according to order of entry
+ */
+ };
+
+ KTransactionPtrVector() { m_sortType = SortPostDate; };
+ ~KTransactionPtrVector() {}
+
+ /**
+ * This method is used to set a different sort type.
+ * The vector is resorted. See KTransactionPtrVector::TransactionSortE
+ * for possible values.
+ */
+ void setSortType(const TransactionSortE type);
+
+ /**
+ * This method returns the current sort type.
+ *
+ * @return transactionSortE value of sort order. See
+ * KTransactionPtrVector::TransactionSortE for possible values.
+ */
+ TransactionSortE sortType(void) const { return m_sortType; };
+
+ /**
+ * This method is used to set the account id to have a chance to
+ * get information about the split referencing the current account
+ * during the sort phase.
+ */
+ void setAccountId(const QString& id);
+
+ /**
+ * This method is used to set the payee id to have a chance to
+ * get information about the split referencing the current payee
+ * during the sort phase.
+ */
+ void setPayeeId(const QString& id);
+
+protected:
+ int compareItems(KTransactionPtrVector::Item d1, KTransactionPtrVector::Item d2);
+
+private:
+ int compareItems(const QString& s1, const QString& s2) const;
+
+private:
+ enum {
+ AccountMode = 0,
+ PayeeMode
+ };
+ short m_idMode;
+ QString m_id;
+ TransactionSortE m_sortType;
+};
+
+
+
+/**
+ * This class represents an item in the payees list view.
+ */
+class KPayeeListItem : public KListViewItem
+{
+public:
+ /**
+ * Constructor to be used to construct a payee entry object.
+ *
+ * @param parent pointer to the KListView object this entry should be
+ * added to.
+ * @param payee const reference to MyMoneyPayee for which
+ * the KListView entry is constructed
+ */
+ KPayeeListItem(KListView *parent, const MyMoneyPayee& payee);
+ ~KPayeeListItem();
+
+ /**
+ * This method is re-implemented from QListViewItem::paintCell().
+ * Besides the standard implementation, the QPainter is set
+ * according to the applications settings.
+ */
+ void paintCell(QPainter *p, const QColorGroup & cg, int column, int width, int align);
+
+ const MyMoneyPayee& payee(void) const { return m_payee; };
+
+private:
+ MyMoneyPayee m_payee;
+};
+
+/**
+ * This class represents an item in the transaction list view. It is used
+ * by the KPayeesView to select between transactions.
+ */
+class KTransactionListItem : public KListViewItem
+{
+public:
+ KTransactionListItem(KListView* view, KTransactionListItem* parent, const QString& accountId, const QString& transaction);
+ ~KTransactionListItem();
+
+ const QString& transactionId(void) const { return m_transactionId; };
+
+ const QString& accountId(void) const { return m_accountId; };
+
+ /**
+ * use my own paint method
+ */
+ void paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment);
+
+ /**
+ * use my own backgroundColor method
+ */
+ const QColor backgroundColor();
+
+private:
+ QString m_transactionId;
+ QString m_accountId;
+};
+
+class KPayeesView : public KPayeesViewDecl
+{
+ Q_OBJECT
+
+public:
+ KPayeesView(QWidget *parent=0, const char *name=0);
+ ~KPayeesView();
+ void show(void);
+
+public slots:
+ void slotSelectPayeeAndTransaction(const QString& payeeId, const QString& accountId = QString(), const QString& transactionId = QString());
+ void slotLoadPayees(void);
+ void slotStartRename(void);
+ void slotHelp(void);
+
+protected:
+ void resizeEvent(QResizeEvent*);
+ void loadPayees(void);
+ void selectedPayees(QValueList<MyMoneyPayee>& payeesList) const;
+ void ensurePayeeVisible(const QString& id);
+ void clearItemData(void);
+
+protected slots:
+ /**
+ * This method loads the m_transactionList, clears
+ * the m_TransactionPtrVector and rebuilds and sorts
+ * it according to the current settings. Then it
+ * loads the m_transactionView with the transaction data.
+ */
+ void showTransactions(void);
+
+ /**
+ * This slot is called whenever the selection in m_payeesList
+ * has been changed.
+ */
+ void slotSelectPayee(void);
+
+ /**
+ * This slot marks the current selected payee as modified (dirty).
+ */
+ void slotPayeeDataChanged(void);
+ void slotKeyListChanged(void);
+
+ /**
+ * This slot is called when the name of a payee is changed inside
+ * the payee list view and only a single payee is selected.
+ */
+ void slotRenamePayee(QListViewItem *p, int col, const QString& txt);
+
+ /**
+ * Updates the payee data in m_payee from the information in the
+ * payee information widget.
+ */
+ void slotUpdatePayee(void);
+
+ void slotTransactionDoubleClicked(QListViewItem *);
+
+private slots:
+ void rearrange(void);
+
+ /**
+ * This slot receives the signal from the listview control that an item was right-clicked,
+ * If @p item points to a real payee item, emits openContextMenu().
+ *
+ * @param lv pointer to the listview sending the signal
+ * @param item the item on which the cursor resides
+ * @param p position of the pointer device
+ */
+ void slotOpenContextMenu(KListView* lv, QListViewItem* item, const QPoint& p);
+
+ void slotQueueUpdate(void);
+
+ void slotActivateUpdate(void);
+
+ void slotChooseDefaultAccount(void);
+
+private:
+ void readConfig(void);
+
+signals:
+ void transactionSelected(const QString& accountId, const QString& transactionId);
+ void openContextMenu(const MyMoneyObject& obj);
+ void selectObjects(const QValueList<MyMoneyPayee>& payees);
+
+private:
+ MyMoneyPayee m_payee;
+ QString m_newName;
+
+ QSplitter* m_splitter;
+
+ /**
+ * This member holds a list of all transactions
+ */
+ QValueList<KMyMoneyTransaction> m_transactionList;
+
+ /**
+ * This member keeps a vector of pointers to all visible (filtered)
+ * transaction in m_transactionList in sorted order. Sorting is done
+ * in KTransactionPtrVector::compareItems
+ */
+ KTransactionPtrVector m_transactionPtrVector;
+
+ /**
+ * This member holds the state of the toggle switch used
+ * to suppress updates due to MyMoney engine data changes
+ */
+ bool m_needReload;
+
+ /**
+ * Search widget for the list
+ */
+ KListViewSearchLineWidget* m_searchWidget;
+ bool m_needConnection;
+
+ /**
+ * Counting semaphore to collect updates
+ */
+ int m_updatesQueued;
+
+ /**
+ * Semaphore to suppress loading during selection
+ */
+ bool m_inSelection;
+};
+
+#endif
diff --git a/kmymoney2/views/kpayeesviewdecl.ui b/kmymoney2/views/kpayeesviewdecl.ui
new file mode 100644
index 0000000..3584e6f
--- /dev/null
+++ b/kmymoney2/views/kpayeesviewdecl.ui
@@ -0,0 +1,666 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KPayeesViewDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KPayeesViewDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>689</width>
+ <height>540</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout10</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KListView">
+ <property name="name">
+ <cstring>m_payeesList</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>1</horstretch>
+ <verstretch>1</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="selectionMode" stdset="0">
+ <enum>Extended</enum>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="showSortIndicator">
+ <bool>true</bool>
+ </property>
+ <property name="shadeSortColumn">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>m_tabWidget</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>2</horstretch>
+ <verstretch>1</verstretch>
+ </sizepolicy>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Transactions</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>transactionGroup</cstring>
+ </property>
+ <property name="title">
+ <string>Transactions</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout11</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="KListView">
+ <column>
+ <property name="text">
+ <string>No.</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Date</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Category</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Amount</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>m_transactionView</cstring>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="shadeSortColumn">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_balanceLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Balance: </string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Address</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>detailsGroup</cstring>
+ </property>
+ <property name="title">
+ <string>Payee Information</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel7</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>90</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>E-Mail:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel5</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>90</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Postal Code:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel6</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>90</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Telephone/Fax:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel4_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>90</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Notes</string>
+ </property>
+ <property name="alignment">
+ <set>AlignTop|AlignLeft</set>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>postcodeEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>telephoneEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="3" column="1">
+ <property name="name">
+ <cstring>emailEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QMultiLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>addressEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>1</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QMultiLineEdit" row="4" column="1">
+ <property name="name">
+ <cstring>notesEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>1</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>90</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Address:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignTop|AlignLeft</set>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>TabPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Matching</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>buttonGroup1</cstring>
+ </property>
+ <property name="title">
+ <string>Transaction Matching</string>
+ </property>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>m_matchType</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>11</x>
+ <y>25</y>
+ <width>403</width>
+ <height>87</height>
+ </rect>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Plain</enum>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <property name="exclusive">
+ <bool>true</bool>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>radioNoMatch</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>1</x>
+ <y>1</y>
+ <width>401</width>
+ <height>24</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>No matching</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>radioNameMatch</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>1</x>
+ <y>31</y>
+ <width>401</width>
+ <height>24</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Match on Payee name</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>radioKeyMatch</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>2</x>
+ <y>62</y>
+ <width>399</width>
+ <height>24</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Match on a name listed below</string>
+ </property>
+ </widget>
+ </widget>
+ </widget>
+ <widget class="KEditListBox">
+ <property name="name">
+ <cstring>matchKeyEditList</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>1</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>List of matching names</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This list contains the names that will match this payee if a transaction is imported from an external source. Keep in mind, that you can specify regular expressions here.</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>checkMatchIgnoreCase</cstring>
+ </property>
+ <property name="text">
+ <string>Ignore Case</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer7</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>TabPage2</cstring>
+ </property>
+ <attribute name="title">
+ <string>Default Account</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>checkEnableDefaultAccount</cstring>
+ </property>
+ <property name="text">
+ <string>Use the default account for
+new transactions with this payee</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>labelDefaultAccount</cstring>
+ </property>
+ <property name="text">
+ <string>Default category:</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyAccountCombo" row="0" column="1">
+ <property name="name">
+ <cstring>comboDefaultAccount</cstring>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="1" column="1">
+ <property name="name">
+ <cstring>buttonSelectMyAccount</cstring>
+ </property>
+ <property name="text">
+ <string>Suggest a category</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>31</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout10</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_helpButton</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Help</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer14</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>260</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_updateButton</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<includes>
+ <include location="local" impldecl="in declaration">../widgets/kmymoneyaccountcombo.h</include>
+</includes>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/views/kreportsview.cpp b/kmymoney2/views/kreportsview.cpp
new file mode 100755
index 0000000..6c7da52
--- /dev/null
+++ b/kmymoney2/views/kreportsview.cpp
@@ -0,0 +1,1510 @@
+/***************************************************************************
+ kreportsview.cpp - description
+ -------------------
+ begin : Sat Mar 27 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ Ace Jones <ace.j@hotpop.com>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "kdecompat.h"
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlayout.h>
+#include <qdatetime.h>
+#include <qregexp.h>
+#include <qdragobject.h>
+#include <qclipboard.h>
+#include <qapplication.h>
+#include <qprinter.h>
+#include <qpainter.h>
+#include <qfile.h>
+#include <qtimer.h>
+#include <qiconset.h>
+#include <qpopupmenu.h>
+#include <qpushbutton.h>
+#include <qtooltip.h>
+#include <qcheckbox.h>
+#include <qvbox.h>
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kglobal.h>
+#include <kglobalsettings.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+#include <khtmlview.h>
+#include <kconfig.h>
+#include <kdebug.h>
+#include <kfiledialog.h>
+#include <kmessagebox.h>
+#include <klistview.h>
+#include <kmessagebox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/mymoneyreport.h>
+#include <kmymoney/kmymoneyglobalsettings.h>
+
+#include "kreportsview.h"
+#include "../reports/querytable.h"
+#include "../reports/objectinfotable.h"
+#include "../dialogs/kreportconfigurationfilterdlg.h"
+#include "../kmymoneyutils.h"
+
+using namespace reports;
+
+#define VIEW_LEDGER "ledger"
+#define VIEW_SCHEDULE "schedule"
+#define VIEW_WELCOME "welcome"
+#define VIEW_HOME "home"
+#define VIEW_REPORTS "reports"
+
+/**
+ * KReportsView::KReportTab Implementation
+ */
+
+KReportsView::KReportTab::KReportTab(KTabWidget* parent, const MyMoneyReport& report ):
+ QWidget( parent, "reporttab" ),
+ m_part( new KHTMLPart( this, "reporttabpart" ) ),
+ m_chartView( new KReportChartView( this, "reportchart" ) ),
+ m_control( new kMyMoneyReportControlDecl( this, "reportcontrol" ) ),
+ m_layout( new QVBoxLayout( this, 11, 6, "reporttablayout" ) ),
+ m_report( report ),
+ m_deleteMe( false ),
+ m_showingChart( false ),
+ m_needReload( true ),
+ m_table(0)
+{
+ m_part->setZoomFactor( KMyMoneyGlobalSettings::fontSizePercentage() );
+
+ if ( ! KReportChartView::implemented() || m_report.reportType() != MyMoneyReport::ePivotTable )
+ {
+ m_control->buttonChart->hide();
+ }
+
+ m_chartView->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
+ m_chartView->hide();
+ m_layout->addWidget( m_control ); //, 0, Qt::AlignTop );
+ m_layout->addWidget( m_part->view() );
+ m_layout->addWidget( m_chartView );
+
+ // I like this icon...
+ QString icon = KGlobal::dirs()->findResource("icon", "default.kde/16x16/mimetypes/spreadsheet.png");
+ // but if it's not there, we'll use ye ol' standard icon
+ if ( icon == QString::null )
+ icon = KGlobal::dirs()->findResource("icon", "hicolor/16x16/apps/kmymoney2.png");
+
+ parent->insertTab( this, QIconSet(QPixmap(icon)), report.name() );
+ parent->setTabEnabled( this, true );
+
+#ifdef HAVE_KDCHART
+ if ( m_report.isChartByDefault() )
+ toggleChart();
+#endif
+}
+
+KReportsView::KReportTab::~KReportTab()
+{
+ delete m_table;
+}
+
+void KReportsView::KReportTab::print(void)
+{
+ if(m_part && m_part->view())
+ m_part->view()->print();
+}
+
+void KReportsView::KReportTab::copyToClipboard(void)
+{
+ QTextDrag* pdrag = new QTextDrag( createTable() );
+ pdrag->setSubtype("html");
+ QApplication::clipboard()->setData(pdrag);
+}
+
+void KReportsView::KReportTab::saveAs( const QString& filename, bool includeCSS )
+{
+ QFile file( filename );
+ if ( file.open( IO_WriteOnly ) )
+ {
+ if ( QFileInfo(filename).extension(false).lower() == "csv")
+ {
+ QTextStream(&file) << m_table->renderCSV();
+ }
+ else {
+ QTextStream stream(&file);
+
+ QRegExp exp(QString("(.*)(<link.*css\" href=)\"(.*)\">(<meta.*%1\" />)(.*)").arg(KGlobal::locale()->encoding()));
+ QString table = createTable();
+ if(exp.search(table) != -1 && includeCSS) {
+ QFile cssFile(exp.cap(3));
+ if(cssFile.open(IO_ReadOnly)) {
+ QTextStream cssStream(&cssFile);
+ stream << exp.cap(1);
+ stream << exp.cap(4);
+ stream << endl << "<style type=\"text/css\">" << endl << "<!--" << endl;
+ stream << cssStream.read();
+ stream << "-->" << endl << "</style>" << endl;
+ stream << exp.cap(5);
+ cssFile.close();
+ } else {
+ stream << table;
+ }
+ } else {
+ stream << table;
+ }
+ }
+ file.close();
+ }
+}
+
+void KReportsView::KReportTab::loadTab(void)
+{
+ m_needReload = true;
+ if(isVisible()) {
+ m_needReload = false;
+ updateReport();
+ }
+}
+
+void KReportsView::KReportTab::show(void)
+{
+ if(m_needReload) {
+ m_needReload = false;
+ updateReport();
+ }
+ QWidget::show();
+}
+
+void KReportsView::KReportTab::updateReport(void)
+{
+ // reload the report from the engine. It might have
+ // been changed by the user
+
+ try {
+ // Don't try to reload default reports from the engine
+ if(!m_report.id().isEmpty())
+ m_report = MyMoneyFile::instance()->report(m_report.id());
+ } catch(MyMoneyException* e) {
+ delete e;
+ }
+
+ delete m_table;
+ m_table = 0;
+
+ if ( m_report.reportType() == MyMoneyReport::ePivotTable ) {
+ m_table = new PivotTable(m_report);
+ } else if ( m_report.reportType() == MyMoneyReport::eQueryTable ) {
+ m_table = new QueryTable(m_report);
+ } else if ( m_report.reportType() == MyMoneyReport::eInfoTable ) {
+ m_table = new ObjectInfoTable(m_report);
+ }
+
+ m_part->begin();
+ m_part->write(createTable());
+ m_part->end();
+
+ m_table->drawChart( *m_chartView );
+ m_chartView->update();
+}
+
+QString KReportsView::KReportTab::createTable(const QString& links)
+{
+ QString filename;
+ if(!MyMoneyFile::instance()->value("reportstylesheet").isEmpty())
+ filename = KGlobal::dirs()->findResource("appdata", QString("html/%1").arg(MyMoneyFile::instance()->value("reportstylesheet")));
+ if(filename.isEmpty())
+ filename = KGlobal::dirs()->findResource("appdata", "html/kmymoney2.css");
+ QString header = QString("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">\n") +
+ QString("<html><head><link rel=\"stylesheet\" type=\"text/css\" href=\"%1\">").arg(filename);
+
+ header += QString("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=%1\" />").arg(KGlobal::locale()->encoding());
+ header += KMyMoneyUtils::variableCSS();
+
+ header += "</head><body>\n";
+
+ QString footer = "</body></html>\n";
+
+ QString html;
+ try {
+ html += header;
+ html += links;
+
+ html += m_table->renderHTML();
+
+ html += footer;
+ }
+ catch(MyMoneyException *e)
+ {
+ kdDebug(2) << "KReportsView::KReportTab::createTable(): ERROR " << e->what() << endl;
+
+ QString error = QString(i18n("There was an error creating your report: \"%1\".\nPlease report this error to the developer's list: kmymoney2-developer@lists.sourceforge.net")).arg(e->what());
+
+ KMessageBox::error(this, error, i18n("Critical Error"));
+
+ html += header;
+ html += links;
+ html += "<h1>"+i18n("Unable to generate report")+"</h1><p>"+error+"</p>";
+ html += footer;
+
+ delete e;
+ }
+ return html;
+
+}
+
+void KReportsView::KReportTab::toggleChart(void)
+{
+ // for now it will just SHOW the chart. In the future it actually has to toggle it.
+
+ if ( m_showingChart )
+ {
+ m_part->show();
+ m_chartView->hide();
+
+ m_control->buttonChart->setText( i18n( "Chart" ) );
+ QToolTip::add( m_control->buttonChart, i18n( "Show the chart version of this report" ) );
+ }
+ else
+ {
+ m_part->hide();
+ m_chartView->show();
+
+ m_control->buttonChart->setText( i18n( "Report" ) );
+ QToolTip::add( m_control->buttonChart, i18n( "Show the report version of this chart" ) );
+ }
+ m_showingChart = ! m_showingChart;
+}
+
+/**
+ * KReportsView Implementation
+ */
+
+class KReportsView::Private
+{
+public:
+ Private() :
+ includeCSS(0) {}
+
+ QCheckBox* includeCSS;
+};
+
+KReportsView::KReportsView(QWidget *parent, const char *name ) :
+ KMyMoneyViewBase(parent, name, i18n("Reports")),
+ d(new Private),
+ m_needReload(false)
+{
+ m_reportTabWidget = new KTabWidget( this, "m_reportTabWidget" );
+ addWidget( m_reportTabWidget );
+ m_reportTabWidget->setHoverCloseButton( true );
+
+ m_listTab = (new QWidget( m_reportTabWidget, "indextab" ));
+ m_listTabLayout = ( new QVBoxLayout( m_listTab, 11, 6, "indextabLayout") );
+ m_reportListView = new KListView( m_listTab, "m_reportListView" );
+ m_listTabLayout->addWidget( m_reportListView );
+ m_reportTabWidget->insertTab( m_listTab, i18n("Reports") );
+
+ m_reportListView->addColumn(i18n("Report"));
+ m_reportListView->addColumn(i18n("Comment"));
+ m_reportListView->setResizeMode(QListView::AllColumns);
+ m_reportListView->setAllColumnsShowFocus(true);
+ m_reportListView->setRootIsDecorated(true);
+ m_reportListView->setShadeSortColumn(false);
+
+ connect( m_reportTabWidget, SIGNAL(closeRequest(QWidget*)),
+ this, SLOT(slotClose(QWidget*)) );
+ connect(m_reportListView, SIGNAL(doubleClicked(QListViewItem*)),
+ this, SLOT(slotOpenReport(QListViewItem*)));
+ connect(m_reportListView, SIGNAL(returnPressed(QListViewItem*)),
+ this, SLOT(slotOpenReport(QListViewItem*)));
+ connect( m_reportListView, SIGNAL(contextMenu(KListView*,QListViewItem*,const QPoint &)),
+ this, SLOT(slotListContextMenu(KListView*,QListViewItem*,const QPoint &)));
+
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotLoadView()));
+}
+
+KReportsView::~KReportsView()
+{
+ delete d;
+}
+
+void KReportsView::show()
+{
+ if(m_needReload) {
+ loadView();
+ m_needReload = false;
+ }
+
+ KReportTab* tab = dynamic_cast<KReportTab*>(m_reportTabWidget->currentPage());
+ if(tab)
+ emit reportSelected(tab->report());
+ else
+ emit reportSelected(MyMoneyReport());
+
+ // don't forget base class implementation
+ KMyMoneyViewBase::show();
+}
+
+void KReportsView::slotLoadView(void)
+{
+ m_needReload = true;
+ if(isVisible()) {
+ loadView();
+ m_needReload = false;
+ }
+}
+
+QString KReportsView::KReportGroupListItem::key ( int column, bool ascending ) const
+{
+ if (column == 0)
+ return QString::number(m_nr).rightJustify(3,'0');
+ else
+ return KListViewItem::key(column,ascending);
+}
+
+KReportsView::KReportGroupListItem::KReportGroupListItem(KListView* parent, const int nr, QString name) :
+ KListViewItem(parent),
+ m_name(name)
+{
+ setNr(nr);
+}
+
+void KReportsView::KReportGroupListItem::setNr(const int nr)
+{
+ m_nr = nr;
+ setText(0, QString("%1. %2").arg(nr).arg(m_name));
+}
+
+void KReportsView::loadView(void)
+{
+ ::timetrace("Start KReportsView::loadView");
+
+ // remember the id of the current selected item and the
+ // items that are shown 'expanded'
+ QMap<QString, bool> isOpen;
+ QListViewItem *item = m_reportListView->selectedItem();
+ QString selectedPage = (item) ? item->text(0) : QString();
+
+ // keep a map of all 'expanded' accounts
+ QListViewItemIterator it_lvi(m_reportListView);
+ while(it_lvi.current()) {
+ item = it_lvi.current();
+ if(item && item->isOpen()) {
+ isOpen[item->text(0)] = true;
+ }
+ ++it_lvi;
+ }
+
+ // remember the upper left corner of the viewport
+ QPoint startPoint = m_reportListView->viewportToContents(QPoint(0, 0));
+
+ // turn off updates to avoid flickering during reload
+ m_reportListView->setUpdatesEnabled(false);
+
+ //
+ // Rebuild the list page
+ //
+ m_reportListView->clear();
+ unsigned pagenumber = 1;
+
+ // Default Reports
+ KReportGroupListItem* chartnode = new KReportGroupListItem(m_reportListView, 10, i18n("Charts"));
+
+ QMap<QString,KReportGroupListItem*> groupitems;
+ QValueList<ReportGroup> defaultreports;
+ defaultReports(defaultreports);
+ QValueList<ReportGroup>::const_iterator it_group = defaultreports.begin();
+ while ( it_group != defaultreports.end() )
+ {
+ QString groupname = (*it_group).name();
+ KReportGroupListItem* curnode = new KReportGroupListItem(m_reportListView, pagenumber++, (*it_group).title());
+ curnode->setOpen(isOpen.find(curnode->text(0)) != isOpen.end());
+ groupitems[groupname] = curnode;
+
+ QValueList<MyMoneyReport>::const_iterator it_report = (*it_group).begin();
+ while( it_report != (*it_group).end() )
+ {
+ MyMoneyReport report = *it_report;
+ report.setGroup(groupname);
+ KReportListItem* r = new KReportListItem( curnode, report );
+ if(report.name() == selectedPage)
+ m_reportListView->setSelected(r, true);
+
+ // ALSO place it into the Charts list if it's displayed as a chart by default
+ if ( (*it_report).isChartByDefault() )
+ new KReportListItem( chartnode, *it_report );
+
+ ++it_report;
+ }
+
+ ++it_group;
+ }
+
+ // Rename the charts item to place it at this point in the list.
+ chartnode->setNr(pagenumber++);
+ chartnode->setOpen(isOpen.find(chartnode->text(0)) != isOpen.end());
+
+ // Custom reports
+
+ KReportGroupListItem* favoritenode = new KReportGroupListItem(m_reportListView,pagenumber++, i18n("Favorite Reports"));
+ favoritenode->setOpen(isOpen.find(favoritenode->text(0)) != isOpen.end());
+ KReportGroupListItem* orphannode = NULL;
+
+ QValueList<MyMoneyReport> customreports = MyMoneyFile::instance()->reportList();
+ QValueList<MyMoneyReport>::const_iterator it_report = customreports.begin();
+ while( it_report != customreports.end() )
+ {
+ // If this report is in a known group, place it there
+ KReportGroupListItem* groupnode = groupitems[(*it_report).group()];
+ if ( groupnode )
+ new KReportListItem( groupnode, *it_report );
+ else
+ // otherwise, place it in the orphanage
+ {
+ if ( ! orphannode )
+ orphannode = new KReportGroupListItem(m_reportListView, pagenumber++, i18n("Old Customized Reports"));
+ new KReportListItem( orphannode, *it_report );
+ }
+
+ // ALSO place it into the Favorites list if it's a favorite
+ if ( (*it_report).isFavorite() )
+ new KReportListItem( favoritenode, *it_report );
+
+ // ALSO place it into the Charts list if it's displayed as a chart by default
+ if ( (*it_report).isChartByDefault() )
+ new KReportListItem( chartnode, *it_report );
+
+ ++it_report;
+ }
+
+ // reposition viewport
+ m_reportListView->setContentsPos(startPoint.x(), startPoint.y());
+
+ // turn updates back on
+ m_reportListView->setUpdatesEnabled(true);
+ m_reportListView->repaintContents();
+
+ //
+ // Go through the tabs to set their update flag or delete them if needed
+ //
+
+ int index = 1;
+ while ( index < m_reportTabWidget->count() )
+ {
+ // TODO: Find some way of detecting the file is closed and kill these tabs!!
+ KReportTab* tab = dynamic_cast<KReportTab*>(m_reportTabWidget->page(index));
+ if ( tab->isReadyToDelete() /* || ! reports.count() */ )
+ {
+ delete tab;
+ --index;
+ }
+ else
+ tab->loadTab();
+ ++index;
+ }
+ ::timetrace("Done KReportsView::loadView");
+}
+
+void KReportsView::slotOpenURL(const KURL &url, const KParts::URLArgs& /* args */)
+{
+ QString view = url.fileName(false);
+ QString command = url.queryItem("command").data();
+
+ if(view == VIEW_REPORTS) {
+
+ if ( command.isEmpty() ) {
+ // slotRefreshView();
+ } else if ( command == "print" )
+ slotPrintView();
+ else if ( command == "copy" )
+ slotCopyView();
+ else if ( command == "save" )
+ slotSaveView();
+ else if ( command == "configure" )
+ slotConfigure();
+ else if ( command == "duplicate" )
+ slotDuplicate();
+ else if ( command == "close" )
+ slotCloseCurrent();
+ else if ( command == "delete" )
+ slotDelete();
+ else
+ qDebug("Unknown command '%s' in KReportsView::slotOpenURL()", static_cast<const char*>(command));
+
+ } else {
+ qDebug("Unknown view '%s' in KReportsView::slotOpenURL()", view.latin1());
+ }
+}
+
+void KReportsView::slotPrintView(void)
+{
+ KReportTab* tab = dynamic_cast<KReportTab*>(m_reportTabWidget->currentPage());
+ if(tab)
+ tab->print();
+}
+
+void KReportsView::slotCopyView(void)
+{
+ KReportTab* tab = dynamic_cast<KReportTab*>(m_reportTabWidget->currentPage());
+ if(tab)
+ tab->copyToClipboard();
+}
+
+void KReportsView::slotSaveView(void)
+{
+ KReportTab* tab = dynamic_cast<KReportTab*>(m_reportTabWidget->currentPage());
+ if(tab) {
+ QVBox* vbox = new QVBox();
+ d->includeCSS = new QCheckBox(i18n("Include Stylesheet"), vbox);
+
+ // the following code is copied from KFileDialog::getSaveFileName,
+ // adjust to our local needs (filetypes etc.) and
+ // enhanced to show the m_saveEncrypted combo box
+ KFileDialog dlg( ":kmymoney-export",
+ QString("%1|%2\n").arg("*.csv").arg(i18n("CSV (Filefilter)", "CSV files")) +
+ QString("%1|%2\n").arg("*.html").arg(i18n("HTML (Filefilter)", "HTML files")),
+ this, "filedialog", true, vbox);
+ connect(&dlg, SIGNAL(filterChanged(const QString&)), this, SLOT(slotSaveFilterChanged(const QString&)));
+
+ dlg.setOperationMode( KFileDialog::Saving );
+ dlg.setCaption(i18n("Export as"));
+ slotSaveFilterChanged("*.csv"); // init gui
+
+ if(dlg.exec() == QDialog::Accepted) {
+ KURL newURL = dlg.selectedURL();
+ if (!newURL.isEmpty()) {
+ QString newName = newURL.prettyURL(0, KURL::StripFileProtocol);
+
+ if(newName.findRev('.') == -1)
+ newName.append(".html");
+
+ tab->saveAs( newName, d->includeCSS->isEnabled() && d->includeCSS->isChecked() );
+ }
+ }
+ }
+}
+
+void KReportsView::slotSaveFilterChanged(const QString& filter)
+{
+ d->includeCSS->setEnabled(filter == "*.html");
+}
+
+void KReportsView::slotConfigure(void)
+{
+ KReportTab* tab = dynamic_cast<KReportTab*>(m_reportTabWidget->currentPage());
+
+ if(tab) {
+ MyMoneyReport report = tab->report();
+ if ( report.comment() == i18n("Default Report") || report.comment() == i18n("Generated Report") )
+ {
+ report.setComment( i18n("Custom Report") );
+ report.setName( report.name() + i18n(" (Customized)") );
+ }
+
+ KReportConfigurationFilterDlg dlg(report);
+
+ if (dlg.exec())
+ {
+ MyMoneyReport newreport = dlg.getConfig();
+
+ // If this report has an ID, then MODIFY it, otherwise ADD it
+ MyMoneyFileTransaction ft;
+ if ( ! newreport.id().isEmpty() )
+ {
+ MyMoneyFile::instance()->modifyReport(newreport);
+ ft.commit();
+ tab->modifyReport(newreport);
+
+ m_reportTabWidget->changeTab( tab, newreport.name() );
+ m_reportTabWidget->showPage(tab);
+ }
+ else
+ {
+ MyMoneyFile::instance()->addReport(newreport);
+ ft.commit();
+ new KReportListItem( m_reportListView, newreport );
+ addReportTab(newreport);
+ }
+ }
+ }
+}
+
+void KReportsView::slotDuplicate(void)
+{
+ KReportTab* tab = dynamic_cast<KReportTab*>(m_reportTabWidget->currentPage());
+
+ if(tab) {
+ MyMoneyReport dupe = tab->report();
+ dupe.setName( QString(i18n("Copy of %1")).arg(dupe.name()) );
+ if ( dupe.comment() == i18n("Default Report") )
+ dupe.setComment( i18n("Custom Report") );
+ dupe.clearId();
+
+ KReportConfigurationFilterDlg dlg(dupe);
+ if (dlg.exec())
+ {
+ dupe = dlg.getConfig();
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyFile::instance()->addReport(dupe);
+ ft.commit();
+ new KReportListItem( m_reportListView, dupe );
+ addReportTab(dupe);
+ } catch(MyMoneyException* e) {
+ qDebug("Cannot add report");
+ delete e;
+ }
+ }
+ }
+}
+
+void KReportsView::slotDelete(void)
+{
+ KReportTab* tab = dynamic_cast<KReportTab*>(m_reportTabWidget->currentPage());
+
+ if(tab) {
+ MyMoneyReport report = tab->report();
+ if ( ! report.id().isEmpty() )
+ {
+ if ( KMessageBox::Continue == KMessageBox::warningContinueCancel(this, QString("<qt>")+i18n("Are you sure you want to delete report <b>%1</b>? There is no way to recover it!").arg(report.name())+QString("</qt>"), i18n("Delete Report?")))
+ {
+ // close the tab and then remove the report so that it is not
+ // generated again during the following loadView() call
+ slotClose(tab);
+
+ MyMoneyFileTransaction ft;
+ MyMoneyFile::instance()->removeReport(report);
+ ft.commit();
+ }
+ }
+ else
+ KMessageBox::information(this, QString("<qt>")+i18n("Sorry, <b>%1</b> is a default report. You may not delete it.").arg(report.name())+QString("</qt>"), i18n("Delete Report?"));
+ }
+}
+
+void KReportsView::slotOpenReport(const QString& id)
+{
+ if ( ! id.isEmpty() )
+ {
+ KReportTab* page = NULL;
+ int index = 1;
+ while ( index < m_reportTabWidget->count() )
+ {
+ KReportTab* current = dynamic_cast<KReportTab*>(m_reportTabWidget->page(index));
+
+ if ( current->report().id() == id )
+ {
+ page = current;
+ break;
+ }
+
+ ++index;
+ }
+
+ // Show the tab, or create a new one, as needed
+ if ( page )
+ m_reportTabWidget->showPage( page );
+ else
+ addReportTab(MyMoneyFile::instance()->report(id));
+ }
+}
+
+void KReportsView::slotOpenReport(QListViewItem* item)
+{
+ KReportListItem *reportItem = dynamic_cast<KReportListItem*> (item);
+
+ if ( reportItem )
+ {
+ KReportTab* page = NULL;
+
+ // Find the tab which contains the report indicated by this list item
+ int index = 1;
+ while ( index < m_reportTabWidget->count() )
+ {
+ KReportTab* current = dynamic_cast<KReportTab*>(m_reportTabWidget->page(index));
+
+ // If this report has an ID, we'll use the ID to match
+ if ( ! reportItem->report().id().isEmpty() )
+ {
+ if ( current->report().id() == reportItem->report().id() )
+ {
+ page = current;
+ break;
+ }
+ }
+ // Otherwise, use the name to match. THIS ASSUMES that no 2 default reports
+ // have the same name...but that would be pretty a boneheaded thing to do.
+ else
+ {
+ if ( current->report().name() == reportItem->report().name() )
+ {
+ page = current;
+ break;
+ }
+ }
+
+ ++index;
+ }
+
+ // Show the tab, or create a new one, as needed
+ if ( page )
+ m_reportTabWidget->showPage( page );
+ else
+ addReportTab(reportItem->report());
+ }
+ else if (item)
+ {
+ // this is not a KReportListItem, so it's a regular QListViewItem, which
+ // means its a header.
+ //
+ // double-click on a header means toggle the expand/collapse state
+
+ item->setOpen( ! item->isOpen() );
+ }
+}
+
+void KReportsView::slotOpenReport(const MyMoneyReport& report)
+{
+ kdDebug(2) << __func__ << " " << report.name() << endl;
+ KReportTab* page = NULL;
+
+ // Find the tab which contains the report indicated by this list item
+ int index = 1;
+ while ( index < m_reportTabWidget->count() )
+ {
+ KReportTab* current = dynamic_cast<KReportTab*>(m_reportTabWidget->page(index));
+
+ if ( current->report().name() == report.name() )
+ {
+ page = current;
+ break;
+ }
+
+ ++index;
+ }
+
+ // Show the tab, or create a new one, as needed
+ if ( page )
+ m_reportTabWidget->showPage( page );
+ else
+ addReportTab(report);
+}
+
+void KReportsView::slotToggleChart(void)
+{
+ KReportTab* tab = dynamic_cast<KReportTab*>(m_reportTabWidget->currentPage());
+ if(tab)
+ tab->toggleChart();
+}
+
+void KReportsView::slotCloseCurrent(void)
+{
+ if(m_reportTabWidget->currentPage())
+ slotClose(m_reportTabWidget->currentPage());
+}
+
+void KReportsView::slotClose(QWidget* w)
+{
+ KReportTab* tab = dynamic_cast<KReportTab*>(w);
+ if(tab) {
+ m_reportTabWidget->removePage(tab);
+ tab->setReadyToDelete(true);
+ }
+}
+
+void KReportsView::slotCloseAll(void)
+{
+ KReportTab* tab = dynamic_cast<KReportTab*>(m_reportTabWidget->page(1));
+ while (tab)
+ {
+ m_reportTabWidget->removePage(tab);
+ tab->setReadyToDelete(true);
+
+ tab = dynamic_cast<KReportTab*>(m_reportTabWidget->page(1));
+ }
+}
+
+void KReportsView::addReportTab(const MyMoneyReport& report)
+{
+ KReportTab* tab = new KReportTab(m_reportTabWidget,report);
+
+ connect( tab->control()->buttonChart, SIGNAL(clicked()),
+ this, SLOT(slotToggleChart(void )));
+ connect( tab->control()->buttonConfigure, SIGNAL(clicked()),
+ this, SLOT(slotConfigure(void )));
+ connect( tab->control()->buttonNew, SIGNAL(clicked()),
+ this, SLOT(slotDuplicate(void )));
+ connect( tab->control()->buttonCopy, SIGNAL(clicked()),
+ this, SLOT(slotCopyView(void )));
+ connect( tab->control()->buttonExport, SIGNAL(clicked()),
+ this, SLOT(slotSaveView(void )));
+ connect( tab->control()->buttonDelete, SIGNAL(clicked()),
+ this, SLOT(slotDelete(void )));
+ connect( tab->control()->buttonClose, SIGNAL(clicked()),
+ this, SLOT(slotCloseCurrent(void )));
+
+ // if this is a default report, then you can't delete it!
+ if ( report.id().isEmpty() )
+ tab->control()->buttonDelete->setEnabled(false);
+
+ // slotRefreshView();
+
+ m_reportTabWidget->showPage(tab);
+
+}
+
+void KReportsView::slotListContextMenu(KListView* lv,QListViewItem* item,const QPoint & p)
+{
+ if ( lv == m_reportListView && item )
+ {
+ QPopupMenu* contextmenu = new QPopupMenu(this);
+ contextmenu->insertItem( i18n("&Open"), this, SLOT(slotOpenFromList()) );
+ contextmenu->insertItem( i18n("&Configure"), this, SLOT(slotConfigureFromList()) );
+ contextmenu->insertItem( i18n("&New report"), this, SLOT(slotNewFromList()) );
+ contextmenu->insertItem( i18n("&Delete"), this, SLOT(slotDeleteFromList()) );
+
+ contextmenu->popup(p);
+ }
+}
+
+void KReportsView::slotOpenFromList(void)
+{
+ KReportListItem *reportItem = dynamic_cast<KReportListItem*> (m_reportListView->selectedItem());
+
+ if ( reportItem )
+ slotOpenReport(reportItem);
+}
+
+void KReportsView::slotConfigureFromList(void)
+{
+ KReportListItem *reportItem = dynamic_cast<KReportListItem*> (m_reportListView->selectedItem());
+
+ if ( reportItem )
+ {
+ slotOpenReport(reportItem);
+ slotConfigure();
+ }
+}
+void KReportsView::slotNewFromList(void)
+{
+ KReportListItem *reportItem = dynamic_cast<KReportListItem*> (m_reportListView->selectedItem());
+
+ if ( reportItem )
+ {
+ slotOpenReport(reportItem);
+ slotDuplicate();
+ }
+}
+
+void KReportsView::slotDeleteFromList(void)
+{
+ KReportListItem *reportItem = dynamic_cast<KReportListItem*> (m_reportListView->selectedItem());
+
+ if ( reportItem )
+ {
+ slotOpenReport(reportItem);
+ slotDelete();
+ }
+}
+
+void KReportsView::defaultReports(QValueList<ReportGroup>& groups)
+{
+ {
+ ReportGroup list("Income and Expenses", i18n("Income and Expenses"));
+
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eExpenseIncome,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::currentMonth,
+ MyMoneyReport::eDetailAll,
+ i18n("Income and Expenses This Month"),
+ i18n("Default Report")
+ ));
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eExpenseIncome,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailAll,
+ i18n("Income and Expenses This Year"),
+ i18n("Default Report")
+ ));
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eExpenseIncome,
+ MyMoneyReport::eYears,
+ MyMoneyTransactionFilter::allDates,
+ MyMoneyReport::eDetailAll,
+ i18n("Income and Expenses By Year"),
+ i18n("Default Report")
+ ));
+
+#ifdef HAVE_KDCHART
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eExpenseIncome,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailTop,
+ i18n("Income and Expenses Graph"),
+ i18n("Default Report")
+ ));
+ list.back().setChartByDefault(true);
+ list.back().setChartType(MyMoneyReport::eChartLine);
+ list.back().setChartDataLabels(false);
+
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eExpenseIncome,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailGroup,
+ i18n("Income and Expenses Pie Chart"),
+ i18n("Default Report")
+ ));
+ list.back().setChartByDefault(true);
+ list.back().setChartType(MyMoneyReport::eChartPie);
+ list.back().setShowingRowTotals(false);
+#endif
+
+ groups.push_back(list);
+ }
+ {
+ ReportGroup list("Net Worth", i18n("Net Worth"));
+
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eAssetLiability,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailTop,
+ i18n("Net Worth By Month"),
+ i18n("Default Report")
+ ));
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eAssetLiability,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::today,
+ MyMoneyReport::eDetailTop,
+ i18n("Net Worth Today"),
+ i18n("Default Report")
+ ));
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eAssetLiability,
+ MyMoneyReport::eYears,
+ MyMoneyTransactionFilter::allDates,
+ MyMoneyReport::eDetailTop,
+ i18n("Net Worth By Year"),
+ i18n("Default Report")
+ ));
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eAssetLiability,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::next7Days,
+ MyMoneyReport::eDetailTop,
+ i18n("7-day Cash Flow Forecast"),
+ i18n("Default Report")
+ ));
+ list.back().setIncludingSchedules( true );
+ list.back().setColumnsAreDays( true );
+
+#ifdef HAVE_KDCHART
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eAssetLiability,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::last12Months,
+ MyMoneyReport::eDetailTotal,
+ i18n("Net Worth Graph"),
+ i18n("Default Report")
+ ));
+ list.back().setChartByDefault(true);
+ list.back().setChartGridLines(false);
+ list.back().setChartType(MyMoneyReport::eChartLine);
+
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eInstitution,
+ MyMoneyReport::eQCnone,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailTop,
+ i18n("Account Balances by Institution"),
+ i18n("Default Report")
+ ));
+#endif
+
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eAccountType,
+ MyMoneyReport::eQCnone,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailTop,
+ i18n("Account Balances by Type"),
+ i18n("Default Report")
+ ));
+
+ groups.push_back(list);
+ }
+ {
+ ReportGroup list("Transactions", i18n("Transactions"));
+
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eAccount,
+ MyMoneyReport::eQCnumber|MyMoneyReport::eQCpayee|MyMoneyReport::eQCcategory|MyMoneyReport::eQCbalance,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailAll,
+ i18n("Transactions by Account"),
+ i18n("Default Report")
+ ));
+ //list.back().setConvertCurrency(false);
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eCategory,
+ MyMoneyReport::eQCnumber|MyMoneyReport::eQCpayee|MyMoneyReport::eQCaccount,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailAll,
+ i18n("Transactions by Category"),
+ i18n("Default Report")
+ ));
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::ePayee,
+ MyMoneyReport::eQCnumber|MyMoneyReport::eQCcategory,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailAll,
+ i18n("Transactions by Payee"),
+ i18n("Default Report")
+ ));
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eMonth,
+ MyMoneyReport::eQCnumber|MyMoneyReport::eQCpayee|MyMoneyReport::eQCcategory,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailAll,
+ i18n("Transactions by Month"),
+ i18n("Default Report")
+ ));
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eWeek,
+ MyMoneyReport::eQCnumber|MyMoneyReport::eQCpayee|MyMoneyReport::eQCcategory,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailAll,
+ i18n("Transactions by Week"),
+ i18n("Default Report")
+ ));
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eAccount,
+ MyMoneyReport::eQCloan,
+ MyMoneyTransactionFilter::allDates,
+ MyMoneyReport::eDetailAll,
+ i18n("Loan Transactions"),
+ i18n("Default Report")
+ ));
+ list.back().setLoansOnly(true);
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eAccountReconcile,
+ MyMoneyReport::eQCnumber|MyMoneyReport::eQCpayee|MyMoneyReport::eQCcategory|MyMoneyReport::eQCbalance,
+ MyMoneyTransactionFilter::last3Months,
+ MyMoneyReport::eDetailAll,
+ i18n("Transactions by Reconciliation Status"),
+ i18n("Default Report")
+ ));
+ groups.push_back(list);
+ }
+ {
+ ReportGroup list("CashFlow", i18n("Cash Flow"));
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eCashFlow,
+ MyMoneyReport::eQCnumber|MyMoneyReport::eQCpayee|MyMoneyReport::eQCaccount,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailAll,
+ i18n("Cash Flow Transactions This Month"),
+ i18n("Default Report")
+ ));
+ groups.push_back(list);
+ }
+ {
+ ReportGroup list("Investments", i18n("Investments"));
+
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eTopAccount,
+ MyMoneyReport::eQCaction|MyMoneyReport::eQCshares|MyMoneyReport::eQCprice,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailAll,
+ i18n("Investment Transactions"),
+ i18n("Default Report")
+ ));
+ list.back().setInvestmentsOnly(true);
+
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eAccountByTopAccount,
+ MyMoneyReport::eQCshares|MyMoneyReport::eQCprice,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailAll,
+ i18n("Investment Holdings by Account"),
+ i18n("Default Report")
+ ));
+ list.back().setInvestmentsOnly(true);
+
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eEquityType,
+ MyMoneyReport::eQCshares|MyMoneyReport::eQCprice,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailAll,
+ i18n("Investment Holdings by Type"),
+ i18n("Default Report")
+ ));
+ list.back().setInvestmentsOnly(true);
+
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eAccountByTopAccount,
+ MyMoneyReport::eQCperformance,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailAll,
+ i18n("Investment Performance by Account"),
+ i18n("Default Report")
+ ));
+ list.back().setInvestmentsOnly(true);
+
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eEquityType,
+ MyMoneyReport::eQCperformance,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailAll,
+ i18n("Investment Performance by Type"),
+ i18n("Default Report")
+ ));
+ list.back().setInvestmentsOnly(true);
+#ifdef HAVE_KDCHART
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eAssetLiability,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::today,
+ MyMoneyReport::eDetailAll,
+ i18n("Investment Holdings Pie"),
+ i18n("Default Report")
+ ));
+ list.back().setChartByDefault(true);
+ list.back().setChartGridLines(false);
+ list.back().setChartType(MyMoneyReport::eChartPie);
+ list.back().setInvestmentsOnly(true);
+
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eAssetLiability,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::last12Months,
+ MyMoneyReport::eDetailAll,
+ i18n("Investment Worth Graph"),
+ i18n("Default Report")
+ ));
+ list.back().setChartByDefault(true);
+ list.back().setChartGridLines(false);
+ list.back().setChartType(MyMoneyReport::eChartLine);
+ list.back().setColumnsAreDays( true );
+ list.back().setInvestmentsOnly(true);
+
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eAssetLiability,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::last12Months,
+ MyMoneyReport::eDetailAll,
+ i18n("Investment Price Graph"),
+ i18n("Default Report")
+ ));
+ list.back().setChartByDefault(true);
+ list.back().setChartGridLines(false);
+ list.back().setChartType(MyMoneyReport::eChartLine);
+ list.back().setColumnsAreDays( true );
+ list.back().setInvestmentsOnly(true);
+ list.back().setIncludingBudgetActuals(false);
+ list.back().setIncludingPrice(true);
+ list.back().setConvertCurrency(true);
+
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eAssetLiability,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::last12Months,
+ MyMoneyReport::eDetailAll,
+ i18n("Investment Moving Average Price Graph"),
+ i18n("Default Report")
+ ));
+ list.back().setChartByDefault(true);
+ list.back().setChartGridLines(false);
+ list.back().setChartType(MyMoneyReport::eChartLine);
+ list.back().setColumnsAreDays( true );
+ list.back().setInvestmentsOnly(true);
+ list.back().setIncludingBudgetActuals(false);
+ list.back().setIncludingAveragePrice(true);
+ list.back().setMovingAverageDays(10);
+ list.back().setConvertCurrency(true);
+
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eAssetLiability,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::last30Days,
+ MyMoneyReport::eDetailAll,
+ i18n("Investment Moving Average"),
+ i18n("Default Report")
+ ));
+ list.back().setChartGridLines(false);
+ list.back().setChartType(MyMoneyReport::eChartLine);
+ list.back().setColumnsAreDays( true );
+ list.back().setInvestmentsOnly(true);
+ list.back().setIncludingBudgetActuals(false);
+ list.back().setIncludingMovingAverage(true);
+ list.back().setMovingAverageDays(10);
+
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eAssetLiability,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::last30Days,
+ MyMoneyReport::eDetailAll,
+ i18n("Investment Moving Average vs Actual"),
+ i18n("Default Report")
+ ));
+ list.back().setChartByDefault(true);
+ list.back().setChartGridLines(false);
+ list.back().setChartType(MyMoneyReport::eChartLine);
+ list.back().setColumnsAreDays( true );
+ list.back().setInvestmentsOnly(true);
+ list.back().setIncludingBudgetActuals(true);
+ list.back().setIncludingMovingAverage(true);
+ list.back().setMovingAverageDays(10);
+#endif
+ groups.push_back(list);
+ }
+ {
+ ReportGroup list("Taxes", i18n("Taxes"));
+
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eCategory,
+ MyMoneyReport::eQCnumber|MyMoneyReport::eQCpayee|MyMoneyReport::eQCaccount,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailAll,
+ i18n("Tax Transactions by Category"),
+ i18n("Default Report")
+ ));
+ list.back().setTax(true);
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::ePayee,
+ MyMoneyReport::eQCnumber|MyMoneyReport::eQCcategory|MyMoneyReport::eQCaccount,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailAll,
+ i18n("Tax Transactions by Payee"),
+ i18n("Default Report")
+ ));
+ list.back().setTax(true);
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eCategory,
+ MyMoneyReport::eQCnumber|MyMoneyReport::eQCpayee|MyMoneyReport::eQCaccount,
+ MyMoneyTransactionFilter::lastFiscalYear,
+ MyMoneyReport::eDetailAll,
+ i18n("Tax Transactions by Category Last Fiscal Year"),
+ i18n("Default Report")
+ ));
+ list.back().setTax(true);
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::ePayee,
+ MyMoneyReport::eQCnumber|MyMoneyReport::eQCcategory|MyMoneyReport::eQCaccount,
+ MyMoneyTransactionFilter::lastFiscalYear,
+ MyMoneyReport::eDetailAll,
+ i18n("Tax Transactions by Payee Last Fiscal Year"),
+ i18n("Default Report")
+ ));
+ list.back().setTax(true);
+ groups.push_back(list);
+ }
+ {
+ ReportGroup list("Budgeting", i18n("Budgeting"));
+
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eBudgetActual,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::yearToDate,
+ MyMoneyReport::eDetailAll,
+ i18n("Budgeted vs. Actual This Year"),
+ i18n("Default Report")
+ ));
+ list.back().setShowingRowTotals(true);
+ list.back().setBudget("Any",true);
+
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eBudgetActual,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::yearToMonth,
+ MyMoneyReport::eDetailAll,
+ i18n("Budgeted vs. Actual This Year (YTM)"),
+ i18n("Default Report")
+ ));
+ list.back().setShowingRowTotals(true);
+ list.back().setBudget("Any",true);
+ // in case we're in January, we show the last year
+ if(QDate::currentDate().month() == 1) {
+ list.back().setDateFilter(MyMoneyTransactionFilter::lastYear);
+ }
+
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eBudgetActual,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::currentMonth,
+ MyMoneyReport::eDetailAll,
+ i18n("Monthly Budgeted vs. Actual"),
+ i18n("Default Report")
+ ));
+ list.back().setBudget("Any",true);
+
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eBudgetActual,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::currentYear,
+ MyMoneyReport::eDetailAll,
+ i18n("Yearly Budgeted vs. Actual"),
+ i18n("Default Report")
+ ));
+ list.back().setBudget("Any",true);
+ list.back().setShowingRowTotals(true);
+
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eBudget,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::currentMonth,
+ MyMoneyReport::eDetailAll,
+ i18n("Monthly Budget"),
+ i18n("Default Report")
+ ));
+ list.back().setBudget("Any",false);
+
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eBudget,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::currentYear,
+ MyMoneyReport::eDetailAll,
+ i18n("Yearly Budget"),
+ i18n("Default Report")
+ ));
+ list.back().setBudget("Any",false);
+ list.back().setShowingRowTotals(true);
+#ifdef HAVE_KDCHART
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eBudgetActual,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::currentYear,
+ MyMoneyReport::eDetailGroup,
+ i18n("Yearly Budgeted vs Actual Graph"),
+ i18n("Default Report")
+ ));
+ list.back().setChartByDefault(true);
+ list.back().setChartGridLines(false);
+ list.back().setBudget("Any",true);
+ list.back().setChartType(MyMoneyReport::eChartLine);
+#endif
+
+ groups.push_back(list);
+ }
+ {
+ ReportGroup list("Forecast", i18n("Forecast"));
+
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eAssetLiability,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::next12Months,
+ MyMoneyReport::eDetailTop,
+ i18n("Forecast By Month"),
+ i18n("Default Report")
+ ));
+ list.back().setIncludingForecast( true );
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eAssetLiability,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::nextQuarter,
+ MyMoneyReport::eDetailTop,
+ i18n("Forecast Next Quarter"),
+ i18n("Default Report")
+ ));
+ list.back().setColumnsAreDays( true );
+ list.back().setIncludingForecast( true );
+
+#ifdef HAVE_KDCHART
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eAssetLiability,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::next3Months,
+ MyMoneyReport::eDetailTotal,
+ i18n("Net Worth Forecast Graph"),
+ i18n("Default Report")
+ ));
+ list.back().setColumnsAreDays( true );
+ list.back().setIncludingForecast( true );
+ list.back().setChartByDefault(true);
+ list.back().setChartGridLines(false);
+ list.back().setChartType(MyMoneyReport::eChartLine);
+#endif
+ groups.push_back(list);
+ }
+ {
+ ReportGroup list("Information", i18n("General Information"));
+
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eSchedule,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::next12Months,
+ MyMoneyReport::eDetailAll,
+ i18n("Schedule Information"),
+ i18n("Default Report")
+ ));
+ list.back().setDetailLevel(MyMoneyReport::eDetailAll);
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eSchedule,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::next12Months,
+ MyMoneyReport::eDetailAll,
+ i18n("Schedule Summary Information"),
+ i18n("Default Report")
+ ));
+ list.back().setDetailLevel(MyMoneyReport::eDetailTop);
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eAccountInfo,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::today,
+ MyMoneyReport::eDetailAll,
+ i18n("Account Information"),
+ i18n("Default Report")
+ ));
+ list.back().setConvertCurrency(false);
+ list.push_back(MyMoneyReport(
+ MyMoneyReport::eAccountLoanInfo,
+ MyMoneyReport::eMonths,
+ MyMoneyTransactionFilter::today,
+ MyMoneyReport::eDetailAll,
+ i18n("Loan Information"),
+ i18n("Default Report")
+ ));
+ list.back().setConvertCurrency(false);
+ groups.push_back(list);
+ }
+}
+
+// Make sure, that these definitions are only used within this file
+// this does not seem to be necessary, but when building RPMs the
+// build option 'final' is used and all CPP files are concatenated.
+// So it could well be, that in another CPP file these definitions
+// are also used.
+#undef VIEW_LEDGER
+#undef VIEW_SCHEDULE
+#undef VIEW_WELCOME
+#undef VIEW_HOME
+#undef VIEW_REPORTS
+
+#include "kreportsview.moc"
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/views/kreportsview.h b/kmymoney2/views/kreportsview.h
new file mode 100755
index 0000000..eaa8c7c
--- /dev/null
+++ b/kmymoney2/views/kreportsview.h
@@ -0,0 +1,262 @@
+/***************************************************************************
+ kreportsview.h - description
+ -------------------
+ begin : Sat Mar 27 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ Ace Jones <ace.jones@hotpop.com>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+#ifndef KREPORTSVIEW_H
+#define KREPORTSVIEW_H
+
+#include "kdecompat.h"
+
+// Some STL headers in GCC4.3 contain operator new. Memory checker mangles these
+#ifdef _CHECK_MEMORY
+ #undef new
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qvaluevector.h>
+#include <qwidget.h>
+
+class QVBoxLayout;
+class QListViewItem;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <khtml_part.h>
+#include <klistview.h>
+#include <ktabwidget.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#ifdef _CHECK_MEMORY
+ #include <kmymoney/mymoneyutils.h>
+#endif
+
+#include <kmymoney/mymoneyscheduled.h>
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneyreport.h>
+#include "../reports/pivottable.h"
+#include "../reports/querytable.h"
+#include "../widgets/kmymoneyreportcontroldecl.h"
+#include "../reports/kreportchartview.h"
+#include "../views/kmymoneyview.h"
+
+class MyMoneyReport;
+
+namespace KReportView {
+};
+
+
+/**
+ * Displays a page where reports can be placed.
+ *
+ * @author Ace Jones
+ *
+ * @short A view for reports.
+**/
+class KReportsView : public KMyMoneyViewBase
+{
+ Q_OBJECT
+public:
+
+ /**
+ * Helper class for KReportView.
+ *
+ * This is the widget which displays a single report in the TabWidget that comprises this view.
+ *
+ * @author Ace Jones
+ */
+
+ class KReportTab: public QWidget
+ {
+ private:
+ KHTMLPart* m_part;
+ reports::KReportChartView* m_chartView;
+ kMyMoneyReportControlDecl* m_control;
+ QVBoxLayout* m_layout;
+ MyMoneyReport m_report;
+ bool m_deleteMe;
+ bool m_showingChart;
+ bool m_needReload;
+ reports::ReportTable* m_table;
+
+ public:
+ KReportTab(KTabWidget* parent, const MyMoneyReport& report );
+ ~KReportTab();
+ const MyMoneyReport& report(void) const { return m_report; }
+ void print(void);
+ void toggleChart(void);
+ void copyToClipboard(void);
+ void saveAs( const QString& filename, bool includeCSS = false );
+ void updateReport(void);
+ QString createTable(const QString& links=QString());
+ const kMyMoneyReportControlDecl* control(void) const { return m_control; }
+ bool isReadyToDelete(void) const { return m_deleteMe; }
+ void setReadyToDelete(bool f) { m_deleteMe = f; }
+ void modifyReport( const MyMoneyReport& report ) { m_report = report; }
+ void show(void);
+ void loadTab(void);
+ };
+
+ /**
+ * Helper class for KReportView.
+ *
+ * Associates a report id with a list view item.
+ *
+ * @author Ace Jones
+ */
+
+ class KReportListItem: public KListViewItem
+ {
+ private:
+ QString m_id;
+ MyMoneyReport m_report;
+
+ public:
+ KReportListItem( KListView* parent, const MyMoneyReport& report ):
+ KListViewItem( parent, report.name(), report.comment() ),
+ m_id( report.id() ),
+ m_report( report )
+ {}
+ KReportListItem( KListViewItem* parent, const MyMoneyReport& report ):
+ KListViewItem( parent, report.name(), report.comment() ),
+ m_id( report.id() ),
+ m_report( report )
+ {}
+ //const QString& id(void) const { return m_id; }
+ const MyMoneyReport& report(void) const { return m_report; }
+ };
+
+ class KReportGroupListItem: public KListViewItem
+ {
+ private:
+ int m_nr;
+ QString m_name;
+
+ public:
+ KReportGroupListItem( KListView* parent,const int nr,const QString name);
+ virtual QString key ( int column, bool ascending ) const;
+ void setNr(const int nr);
+ };
+
+ /**
+ * Helper class for KReportView.
+ *
+ * This is a named list of reports, which will be one section
+ * in the list of default reports
+ *
+ * @author Ace Jones
+ */
+ class ReportGroup: public QValueList<MyMoneyReport>
+ {
+ private:
+ QString m_name; ///< the title of the group in non-translated form
+ QString m_title; ///< the title of the group in i18n-ed form
+ public:
+ ReportGroup( void ) {}
+ ReportGroup( const QString& name, const QString& title ): m_name( name ), m_title(title) {}
+ const QString& name( void ) const { return m_name; }
+ const QString& title(void) const { return m_title; }
+ };
+
+private:
+ /// \internal d-pointer class.
+ class Private;
+ /// \internal d-pointer instance.
+ Private* const d;
+ KTabWidget* m_reportTabWidget;
+ KListView* m_reportListView;
+ QWidget* m_listTab;
+ QVBoxLayout* m_listTabLayout;
+ bool m_needReload;
+
+public:
+ /**
+ * Standard constructor.
+ *
+ * @param parent The QWidget this is used in.
+ * @param name The QT name.
+ *
+ * @return An object of type KReportsView
+ *
+ * @see ~KReportsView
+ */
+ KReportsView(QWidget *parent=0, const char *name=0);
+
+ /**
+ * Standard destructor.
+ *
+ * @return Nothing.
+ *
+ * @see KReportsView
+ */
+ ~KReportsView();
+
+ /**
+ * Overridden so we can reload the view if necessary.
+ *
+ * @return Nothing.
+ */
+ void show();
+
+protected:
+ void addReportTab(const MyMoneyReport&);
+ void loadView(void);
+ static void defaultReports(QValueList<ReportGroup>&);
+
+public slots:
+ void slotOpenURL(const KURL &url, const KParts::URLArgs& args);
+
+ void slotLoadView(void);
+ void slotPrintView(void);
+ void slotCopyView(void);
+ void slotSaveView(void);
+ void slotConfigure(void);
+ void slotDuplicate(void);
+ void slotToggleChart(void);
+ void slotOpenReport(QListViewItem*);
+ void slotOpenReport(const QString&);
+ void slotOpenReport(const MyMoneyReport&);
+ void slotCloseCurrent(void);
+ void slotClose(QWidget*);
+ void slotCloseAll(void);
+ void slotDelete(void);
+ void slotListContextMenu(KListView*,QListViewItem*,const QPoint &);
+ void slotOpenFromList(void);
+ void slotConfigureFromList(void);
+ void slotNewFromList(void);
+ void slotDeleteFromList(void);
+
+protected slots:
+ void slotSaveFilterChanged(const QString&);
+
+signals:
+ /**
+ * This signal is emitted whenever a report is selected
+ */
+ void reportSelected(const MyMoneyReport&);
+
+
+};
+
+#endif
diff --git a/kmymoney2/views/kscheduledlistitem.cpp b/kmymoney2/views/kscheduledlistitem.cpp
new file mode 100644
index 0000000..6ba0b56
--- /dev/null
+++ b/kmymoney2/views/kscheduledlistitem.cpp
@@ -0,0 +1,231 @@
+/***************************************************************************
+ kscheduledlistitem.cpp - description
+ -------------------
+ begin : Sun Jan 27 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qpainter.h>
+#include <qstyle.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kconfig.h>
+#include <klocale.h>
+#include <kglobal.h>
+#include <kglobalsettings.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kscheduledlistitem.h"
+#include "../mymoney/mymoneyfile.h"
+#include "../kmymoneyglobalsettings.h"
+#include "../kmymoneyutils.h"
+
+KScheduledListItem::KScheduledListItem(KListView *parent, const QString& name, const QPixmap& pixmap, const QString& sortKey) :
+ KListViewItem(parent, name),
+ m_sortKey(sortKey)
+{
+ setPixmap(0, pixmap);
+ if(m_sortKey.isEmpty())
+ m_sortKey = name;
+}
+
+KScheduledListItem::KScheduledListItem(KScheduledListItem *parent, const MyMoneySchedule& schedule/*, bool even*/)
+ : KListViewItem(parent)
+{
+ m_schedule = schedule;
+ m_sortKey = schedule.name();
+ setPixmap(0, KMyMoneyUtils::scheduleIcon(KIcon::Small));
+
+ try
+ {
+ MyMoneyTransaction transaction = schedule.transaction();
+ MyMoneySplit s1 = transaction.splits()[0];
+ MyMoneySplit s2 = transaction.splits()[1];
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ MyMoneySplit split;
+ MyMoneyAccount acc;
+
+ switch(schedule.type()) {
+ case MyMoneySchedule::TYPE_DEPOSIT:
+ if (s1.value().isNegative())
+ split = s2;
+ else
+ split = s1;
+ break;
+
+ case MyMoneySchedule::TYPE_LOANPAYMENT:
+ for(it_s = transaction.splits().begin(); it_s != transaction.splits().end(); ++it_s) {
+ acc = MyMoneyFile::instance()->account((*it_s).accountId());
+ if(acc.accountGroup() == MyMoneyAccount::Asset
+ || acc.accountGroup() == MyMoneyAccount::Liability) {
+ if(acc.accountType() != MyMoneyAccount::Loan
+ && acc.accountType() != MyMoneyAccount::AssetLoan) {
+ split = *it_s;
+ break;
+ }
+ }
+ }
+ if(it_s == transaction.splits().end()) {
+ qFatal("Split for payment account not found in %s:%d.", __FILE__, __LINE__);
+ }
+ break;
+
+ default:
+ if (!s1.value().isPositive())
+ split = s1;
+ else
+ split = s2;
+ break;
+ }
+ acc = MyMoneyFile::instance()->account(split.accountId());
+
+/*
+ if (schedule.type() == MyMoneySchedule::TYPE_DEPOSIT)
+ {
+ if (s1.value() >= 0)
+ split = s1;
+ else
+ split = s2;
+ }
+ else if(schedule.type() == MyMoneySchedule::TYPE_LOANPAYMENT)
+ {
+
+ }
+ else
+ {
+ if (s1.value() < 0)
+ split = s1;
+ else
+ split = s2;
+ }
+*/
+ setText(0, schedule.name());
+ MyMoneySecurity currency = MyMoneyFile::instance()->currency(acc.currencyId());
+
+ setText(1, acc.name());
+ if(!s1.payeeId().isEmpty())
+ setText(2, MyMoneyFile::instance()->payee(s1.payeeId()).name());
+ else
+ setText(2, "---");
+ m_amount = split.shares().abs();
+ setText(3, QString("%1 ").arg(m_amount.formatMoney(acc, currency)));
+ // Do the real next payment like ms-money etc
+ if (schedule.isFinished())
+ {
+ setText(4, i18n("Finished"));
+ }
+ else
+ setText(4, KGlobal::locale()->formatDate(schedule.adjustedNextDueDate(), true));
+
+ setText(5, i18n(schedule.occurenceToString()));
+ setText(6, KMyMoneyUtils::paymentMethodToString(schedule.paymentType()));
+ }
+ catch (MyMoneyException *e)
+ {
+ setText(0, "Error:");
+ setText(1, e->what());
+ delete e;
+ }
+}
+
+KScheduledListItem::~KScheduledListItem()
+{
+}
+
+void KScheduledListItem::paintCell(QPainter* p, const QColorGroup& cg, int column, int width, int align)
+{
+ QColorGroup cg2(cg);
+
+ QColor textColour = KGlobalSettings::textColor();
+ QFont cellFont = KMyMoneyGlobalSettings::listCellFont();
+
+ // avoid colorizing lines that do not contain a schedule
+ if(!m_schedule.id().isEmpty()) {
+ if (m_schedule.isFinished())
+ textColour = Qt::darkGreen;
+ else if (m_schedule.isOverdue())
+ textColour = Qt::red;
+ }
+
+ cg2.setColor(QColorGroup::Text, textColour);
+
+ // display group items in bold
+ if (!parent())
+ cellFont.setBold(true);
+
+ p->setFont(cellFont);
+
+ if (isAlternate())
+ cg2.setColor(QColorGroup::Base, KMyMoneyGlobalSettings::listColor());
+ else
+ cg2.setColor(QColorGroup::Base, KMyMoneyGlobalSettings::listBGColor());
+
+ QListViewItem::paintCell(p, cg2, column, width, align);
+}
+
+int KScheduledListItem::compare(QListViewItem* i, int col, bool ascending) const
+{
+ KScheduledListItem* item = dynamic_cast<KScheduledListItem*>(i);
+ int rc;
+ // do special sorting only if
+ // a) date
+ // b) amount
+ // c) name/group
+ // d) occurence
+ // in all other cases use the standard sorting
+ MyMoneyMoney diff;
+ switch(col) {
+ case 0: // type and name
+ rc = m_sortKey.compare(item->m_sortKey);
+ break;
+
+ case 3: // amount
+ diff = m_amount - item->m_amount;
+ if(diff.isZero())
+ rc = 0;
+ else if(diff.isPositive())
+ rc = 1;
+ else
+ rc = -1;
+ break;
+
+ case 4: // date
+ rc = item->m_schedule.adjustedNextDueDate().daysTo(m_schedule.adjustedNextDueDate());
+ break;
+
+ case 5: // occurence
+ rc = (m_schedule.occurence() - item->m_schedule.occurence());
+ break;
+
+ default:
+ rc = KListViewItem::compare(i, col, ascending);
+ break;
+ }
+ // adjust to [-1..1]
+ if(rc != 0) {
+ rc = (rc > 0) ? 1 : -1;
+ }
+ return rc;
+}
diff --git a/kmymoney2/views/kscheduledlistitem.h b/kmymoney2/views/kscheduledlistitem.h
new file mode 100644
index 0000000..c5e4728
--- /dev/null
+++ b/kmymoney2/views/kscheduledlistitem.h
@@ -0,0 +1,107 @@
+/***************************************************************************
+ kscheduledlistitem.h - description
+ -------------------
+ begin : Sun Jan 27 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KSCHEDULEDLISTITEM_H
+#define KSCHEDULEDLISTITEM_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qpixmap.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klistview.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyscheduled.h>
+
+/**
+ * The list view item that describes a scheduled transaction.
+ *
+ * @author Michael Edwardes
+ */
+class KScheduledListItem : public KListViewItem
+{
+public:
+ /**
+ * This constructor is used to create a child of the main list view widget.
+ *
+ * The child should be a descriptor for the schedule type and one of
+ * Bill,
+ * Deposit or
+ * Transfer.
+ *
+ * Other types may be added in the future.
+ *
+ * @param parent The list view to be a child of.
+ * @param description The (translated) description.
+ * @param pixmap A pixmap for the entry
+ * @param sortKey a sortkey, if empty, @c description will be used.
+ *
+ * @see MyMoneySchedule
+ */
+ KScheduledListItem(KListView *parent, const QString& description, const QPixmap& pixmap = QPixmap(), const QString& sortKey = QString());
+
+ /**
+ * This constructor is used to create a child of one of the children
+ * created by the above method.
+ *
+ * This child describes a schedule and represents the data in schedule.
+ *
+ * @param parent The list view item to be a child of.
+ * @param schedule The schedule to be represented.
+ *
+ * @see MyMoneySchedule
+ */
+ KScheduledListItem(KScheduledListItem *parent, const MyMoneySchedule& schedule/*, bool even*/);
+
+ /**
+ * Standard destructor.
+ */
+ ~KScheduledListItem();
+
+ /**
+ * Returns the schedule id for the instance being represented. To be used
+ * selection slots by the view.
+ *
+ * Returns an empty string for the top level items.
+ *
+ * @return The schedule id.
+ */
+ const QString& scheduleId(void) const { return m_schedule.id(); }
+
+ int compare(QListViewItem* i, int col, bool ascending) const;
+
+protected:
+ void paintCell(QPainter* p, const QColorGroup& cg, int column, int width, int align);
+
+private:
+ MyMoneySchedule m_schedule;
+ QString m_sortKey;
+ MyMoneyMoney m_amount;
+};
+
+#endif
diff --git a/kmymoney2/views/kscheduledview.cpp b/kmymoney2/views/kscheduledview.cpp
new file mode 100644
index 0000000..42c09db
--- /dev/null
+++ b/kmymoney2/views/kscheduledview.cpp
@@ -0,0 +1,494 @@
+/***************************************************************************
+ kscheduledview.cpp - description
+ -------------------
+ begin : Sun Jan 27 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qheader.h>
+#include <qtoolbutton.h>
+#include <qcombobox.h>
+#include <qtabwidget.h>
+#include <qlayout.h>
+#include <qtimer.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kglobal.h>
+#include <klocale.h>
+#include <kconfig.h>
+#include <kpopupmenu.h>
+#include <kiconloader.h>
+#include <kmessagebox.h>
+#include <klistview.h>
+#include <kpushbutton.h>
+#include <klistviewsearchline.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kscheduledview.h"
+#include "kscheduledlistitem.h"
+#include "../widgets/kmymoneyscheduleddatetbl.h"
+// #include "../dialogs/kenterscheduledialog.h"
+#include <kmymoney/kmymoneyutils.h>
+#include <kmymoney/kmymoneyglobalsettings.h>
+
+#include "../kmymoney2.h"
+
+KScheduledView::KScheduledView(QWidget *parent, const char *name ) :
+ KScheduledViewDecl(parent,name, false),
+ m_openBills(true),
+ m_openDeposits(true),
+ m_openTransfers(true),
+ m_openLoans(true)
+{
+ // create the searchline widget
+ // and insert it into the existing layout
+ m_searchWidget = new KListViewSearchLineWidget(m_qlistviewScheduled, m_listTab);
+ m_listTabLayout->insertWidget(0, m_searchWidget);
+
+ m_qlistviewScheduled->addColumn(i18n("Type/Name"));
+ m_qlistviewScheduled->addColumn(i18n("Account"));
+ m_qlistviewScheduled->addColumn(i18n("Payee"));
+ m_qlistviewScheduled->addColumn(i18n("Amount"));
+ m_qlistviewScheduled->addColumn(i18n("Next Due Date"));
+ m_qlistviewScheduled->addColumn(i18n("Frequency"));
+ m_qlistviewScheduled->addColumn(i18n("Payment Method"));
+ m_qlistviewScheduled->setColumnAlignment(3, Qt::AlignRight);
+
+ readConfig();
+
+ m_qlistviewScheduled->setMultiSelection(false);
+ m_qlistviewScheduled->header()->setResizeEnabled(true);
+ if(m_qlistviewScheduled->sortColumn() == -1)
+ m_qlistviewScheduled->setSorting(0);
+
+ connect(m_qbuttonNew, SIGNAL(clicked()), kmymoney2->action("schedule_new"), SLOT(activate()));
+
+ // attach popup to 'Filter...' button
+ m_kaccPopup = new KPopupMenu(this);
+ m_kaccPopup->setCheckable(true);
+ m_accountsCombo->setPopup(m_kaccPopup);
+ connect(m_kaccPopup, SIGNAL(activated(int)), this, SLOT(slotAccountActivated(int)));
+
+ m_qbuttonNew->setGuiItem(KMyMoneyUtils::scheduleNewGuiItem());
+ m_accountsCombo->setGuiItem(KMyMoneyUtils::accountsFilterGuiItem());
+
+ KIconLoader *il = KGlobal::iconLoader();
+ m_tabWidget->setTabIconSet(m_listTab, QIconSet(il->loadIcon("contents", KIcon::Small, KIcon::SizeSmall)));
+ m_tabWidget->setTabIconSet(m_calendarTab, QIconSet(il->loadIcon("calendartab", KIcon::User, KIcon::SizeSmall)));
+
+ connect(m_qlistviewScheduled, SIGNAL(contextMenu(KListView*, QListViewItem*, const QPoint&)),
+ this, SLOT(slotListViewContextMenu(KListView*, QListViewItem*, const QPoint&)));
+ connect(m_qlistviewScheduled, SIGNAL(selectionChanged(QListViewItem*)),
+ this, SLOT(slotSetSelectedItem(QListViewItem*)));
+
+ connect(m_qlistviewScheduled, SIGNAL(doubleClicked(QListViewItem*, const QPoint&, int)),
+ this, SLOT(slotListItemExecuted(QListViewItem*, const QPoint&, int)));
+ connect(m_qlistviewScheduled, SIGNAL(expanded(QListViewItem*)),
+ this, SLOT(slotListViewExpanded(QListViewItem*)));
+ connect(m_qlistviewScheduled, SIGNAL(collapsed(QListViewItem*)),
+ this, SLOT(slotListViewCollapsed(QListViewItem*)));
+
+ connect(m_calendar, SIGNAL(enterClicked(const MyMoneySchedule&, const QDate&)), this, SLOT(slotBriefEnterClicked(const MyMoneySchedule&, const QDate&)));
+ connect(m_calendar, SIGNAL(skipClicked(const MyMoneySchedule&, const QDate&)), this, SLOT(slotBriefSkipClicked(const MyMoneySchedule&, const QDate&)));
+
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotReloadView()));
+}
+
+KScheduledView::~KScheduledView()
+{
+ writeConfig();
+}
+
+void KScheduledView::refresh(bool full, const QString& schedId)
+{
+ m_qlistviewScheduled->header()->setFont(KMyMoneyGlobalSettings::listHeaderFont());
+
+ QPoint startPoint = QPoint(m_qlistviewScheduled->contentsX(), m_qlistviewScheduled->contentsY());
+
+ m_qlistviewScheduled->clear();
+
+ try
+ {
+ if (full)
+ {
+ try
+ {
+ int accountCount=0;
+
+ m_kaccPopup->clear();
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyAccount acc;
+ QStringList::ConstIterator it_s;
+
+ acc = file->asset();
+ for(it_s = acc.accountList().begin(); it_s != acc.accountList().end(); ++it_s)
+ {
+ MyMoneyAccount a = file->account(*it_s);
+ m_kaccPopup->insertItem(a.name(), accountCount);
+ m_kaccPopup->setItemChecked(accountCount, true);
+ accountCount++;
+ }
+ }
+ catch (MyMoneyException *e)
+ {
+ KMessageBox::detailedError(this, i18n("Unable to load accounts: "), e->what());
+ delete e;
+ }
+ }
+
+ // Refresh the calendar view first
+ m_calendar->refresh();
+
+ MyMoneyFile *file = MyMoneyFile::instance();
+ QValueList<MyMoneySchedule> scheduledItems = file->scheduleList();
+
+ if (scheduledItems.count() == 0)
+ return;
+
+ KScheduledListItem *itemBills = new KScheduledListItem(m_qlistviewScheduled, i18n("Bills"), KMyMoneyUtils::billScheduleIcon(KIcon::Small), "0");
+ KScheduledListItem *itemDeposits = new KScheduledListItem(m_qlistviewScheduled, i18n("Deposits"), KMyMoneyUtils::depositScheduleIcon(KIcon::Small), "1");
+ KScheduledListItem *itemLoans = new KScheduledListItem(m_qlistviewScheduled, i18n("Loans"), KMyMoneyUtils::transferScheduleIcon(KIcon::Small), "2");
+ KScheduledListItem *itemTransfers = new KScheduledListItem(m_qlistviewScheduled, i18n("Transfers"), KMyMoneyUtils::transferScheduleIcon(KIcon::Small), "3");
+
+ QValueList<MyMoneySchedule>::Iterator it;
+
+ KScheduledListItem *openItem=0;
+
+ for (it = scheduledItems.begin(); it != scheduledItems.end(); ++it)
+ {
+ MyMoneySchedule schedData = (*it);
+ KScheduledListItem* item=0;
+
+ bool bContinue=true;
+ QStringList::iterator accIt;
+ for (accIt=m_filterAccounts.begin(); accIt!=m_filterAccounts.end(); ++accIt)
+ {
+ if (*accIt == schedData.account().id())
+ {
+ bContinue=false; // Filter it out
+ break;
+ }
+ }
+
+ if (!bContinue)
+ continue;
+
+ KScheduledListItem* parent = 0;
+ switch (schedData.type())
+ {
+ case MyMoneySchedule::TYPE_ANY:
+ // Should we display an error ?
+ // We just sort it as bill and fall through here
+
+ case MyMoneySchedule::TYPE_BILL:
+ parent = itemBills;
+ break;
+
+ case MyMoneySchedule::TYPE_DEPOSIT:
+ parent = itemDeposits;
+ break;
+
+ case MyMoneySchedule::TYPE_TRANSFER:
+ parent = itemTransfers;
+ break;
+
+ case MyMoneySchedule::TYPE_LOANPAYMENT:
+ parent = itemLoans;
+ break;
+
+ }
+ if(parent) {
+ if(!KMyMoneyGlobalSettings::hideFinishedSchedules() || !schedData.isFinished()) {
+ item = new KScheduledListItem(parent, schedData);
+ if (schedData.id() == schedId)
+ openItem = item;
+ }
+ }
+ }
+
+ if (openItem)
+ {
+ m_qlistviewScheduled->setSelected(openItem, true);
+ }
+ // using a timeout is the only way, I got the 'ensureTransactionVisible'
+ // working when coming from hidden form to visible form. I assume, this
+ // has something to do with the delayed update of the display somehow.
+ resize(width(), height()-1);
+ QTimer::singleShot(10, this, SLOT(slotTimerDone()));
+ m_qlistviewScheduled->update();
+
+ // force repaint in case the filter is set
+ m_searchWidget->searchLine()->updateSearch(QString::null);
+
+ if (m_openBills)
+ itemBills->setOpen(true);
+
+ if (m_openDeposits)
+ itemDeposits->setOpen(true);
+
+ if (m_openTransfers)
+ itemTransfers->setOpen(true);
+
+ if (m_openLoans)
+ itemLoans->setOpen(true);
+
+ m_qlistviewScheduled->setContentsPos(startPoint.x(), startPoint.y());
+
+ } catch (MyMoneyException *e)
+ {
+ KMessageBox::error(this, e->what());
+ delete e;
+ }
+}
+
+void KScheduledView::slotTimerDone(void)
+{
+ QListViewItem* item;
+
+ item = m_qlistviewScheduled->selectedItem();
+ if(item) {
+ m_qlistviewScheduled->ensureItemVisible(item);
+ }
+
+ // force a repaint of all items to update the branches
+ for(item = m_qlistviewScheduled->firstChild(); item != 0; item = item->itemBelow()) {
+ m_qlistviewScheduled->repaintItem(item);
+ }
+ resize(width(), height()+1);
+}
+
+void KScheduledView::slotReloadView(void)
+{
+ m_needReload = true;
+ if(isVisible()) {
+ m_qbuttonNew->setEnabled(true);
+ m_tabWidget->setEnabled(true);
+
+ refresh(true, m_selectedSchedule);
+
+ m_needReload = false;
+ QTimer::singleShot(50, this, SLOT(slotRearrange()));
+ }
+}
+
+void KScheduledView::show()
+{
+ KScheduledViewDecl::show();
+
+ if(m_needReload)
+ slotReloadView();
+}
+
+void KScheduledView::slotRearrange(void)
+{
+ resizeEvent(0);
+}
+
+void KScheduledView::readConfig(void)
+{
+ KConfig *config = KGlobal::config();
+ config->setGroup("Last Use Settings");
+ m_openBills = config->readBoolEntry("KScheduleView_openBills", true);
+ m_openDeposits = config->readBoolEntry("KScheduleView_openDeposits", true);
+ m_openTransfers = config->readBoolEntry("KScheduleView_openTransfers", true);
+ m_openLoans = config->readBoolEntry("KScheduleView_openLoans", true);
+ m_tabWidget->setCurrentPage(config->readNumEntry("KScheduleView_tab", 0));
+
+ m_qlistviewScheduled->header()->setFont(KMyMoneyGlobalSettings::listHeaderFont());
+ m_qlistviewScheduled->restoreLayout(KGlobal::config(), "Schedule View Settings");
+
+}
+
+void KScheduledView::writeConfig(void)
+{
+ KConfig *config = KGlobal::config();
+ config->setGroup("Last Use Settings");
+ config->writeEntry("KScheduleView_openBills", m_openBills);
+ config->writeEntry("KScheduleView_openDeposits", m_openDeposits);
+ config->writeEntry("KScheduleView_openTransfers", m_openTransfers);
+ config->writeEntry("KScheduleView_openLoans", m_openLoans);
+ config->writeEntry("KScheduleView_tab", m_tabWidget->currentPageIndex());
+ config->sync();
+
+ m_qlistviewScheduled->saveLayout(KGlobal::config(), "Schedule View Settings");
+}
+
+void KScheduledView::slotListViewContextMenu(KListView* /* view */, QListViewItem *item, const QPoint& /* pos */)
+{
+ KScheduledListItem *scheduleItem = dynamic_cast<KScheduledListItem *>(item);
+ if (scheduleItem)
+ {
+ try
+ {
+ QString scheduleId = scheduleItem->scheduleId();
+
+ if (!scheduleId.isEmpty()) // Top level item
+ {
+ MyMoneySchedule schedule = MyMoneyFile::instance()->schedule(scheduleId);
+ emit scheduleSelected(schedule);
+ m_selectedSchedule = schedule.id();
+ }
+ emit openContextMenu();
+ } catch (MyMoneyException *e)
+ {
+ KMessageBox::detailedSorry(this, i18n("Error activating context menu"), e->what());
+ delete e;
+ }
+ }
+ else
+ {
+ emit openContextMenu();
+ }
+}
+
+void KScheduledView::slotListItemExecuted(QListViewItem* item, const QPoint&, int)
+{
+ KScheduledListItem* scheduleItem = (KScheduledListItem*)item;
+ if (!scheduleItem)
+ return;
+
+ try
+ {
+ QString scheduleId = scheduleItem->scheduleId();
+
+ if (!scheduleId.isEmpty()) // Top level item
+ {
+ MyMoneySchedule schedule = MyMoneyFile::instance()->schedule(scheduleId);
+ m_selectedSchedule = schedule.id();
+ emit editSchedule();
+ }
+ } catch (MyMoneyException *e)
+ {
+ KMessageBox::detailedSorry(this, i18n("Error executing item"), e->what());
+ delete e;
+ }
+}
+
+void KScheduledView::slotAccountActivated(int id)
+{
+ m_filterAccounts.clear();
+
+ m_kaccPopup->setItemChecked(id, ((m_kaccPopup->isItemChecked(id))?false:true));
+
+ try
+ {
+ int accountCount=0;
+ MyMoneyFile* file = MyMoneyFile::instance();
+ MyMoneyAccount acc;
+ QStringList::ConstIterator it_s;
+
+ acc = file->asset();
+ for(it_s = acc.accountList().begin(); it_s != acc.accountList().end(); ++it_s)
+ {
+ if (!m_kaccPopup->isItemChecked(accountCount))
+ {
+ m_filterAccounts.append(*it_s);
+ }
+ accountCount++;
+ }
+
+ m_calendar->setFilterAccounts(m_filterAccounts);
+
+ refresh(false, m_selectedSchedule);
+ }
+ catch (MyMoneyException *e)
+ {
+ KMessageBox::detailedError(this, i18n("Unable to filter account"), e->what());
+ delete e;
+ }
+}
+
+void KScheduledView::slotListViewExpanded(QListViewItem* item)
+{
+ KScheduledListItem *scheduleItem = (KScheduledListItem*)item;
+ if (scheduleItem)
+ {
+ if (scheduleItem->text(0) == i18n("Bills"))
+ m_openBills = true;
+ else if (scheduleItem->text(0) == i18n("Deposits"))
+ m_openDeposits = true;
+ else if (scheduleItem->text(0) == i18n("Transfers"))
+ m_openTransfers = true;
+ else if (scheduleItem->text(0) == i18n("Loans"))
+ m_openLoans = true;
+ }
+}
+
+void KScheduledView::slotListViewCollapsed(QListViewItem* item)
+{
+ KScheduledListItem *scheduleItem = (KScheduledListItem*)item;
+ if (scheduleItem)
+ {
+ if (scheduleItem->text(0) == i18n("Bills"))
+ m_openBills = false;
+ else if (scheduleItem->text(0) == i18n("Deposits"))
+ m_openDeposits = false;
+ else if (scheduleItem->text(0) == i18n("Transfers"))
+ m_openTransfers = false;
+ else if (scheduleItem->text(0) == i18n("Loans"))
+ m_openLoans = false;
+ }
+}
+
+void KScheduledView::slotSelectSchedule(const QString& schedule)
+{
+ refresh(true, schedule);
+}
+
+void KScheduledView::slotBriefEnterClicked(const MyMoneySchedule& schedule, const QDate& date)
+{
+ Q_UNUSED(date);
+
+ emit scheduleSelected(schedule);
+ emit enterSchedule();
+}
+
+void KScheduledView::slotBriefSkipClicked(const MyMoneySchedule& schedule, const QDate& date)
+{
+ Q_UNUSED(date);
+
+ emit scheduleSelected(schedule);
+ emit skipSchedule();
+}
+
+void KScheduledView::slotSetSelectedItem(QListViewItem* item)
+{
+ emit scheduleSelected(MyMoneySchedule());
+ KScheduledListItem* schedItem = static_cast<KScheduledListItem*>(item);
+ if(item) {
+ try {
+ MyMoneySchedule schedule = MyMoneyFile::instance()->schedule(schedItem->scheduleId());
+ emit scheduleSelected(schedule);
+ m_selectedSchedule = schedItem->scheduleId();
+ } catch(MyMoneyException* e) {
+ qDebug("KScheduledView::slotSetSelectedItem: %s", e->what().data());
+ delete e;
+ }
+ }
+}
+
+
+#include "kscheduledview.moc"
diff --git a/kmymoney2/views/kscheduledview.h b/kmymoney2/views/kscheduledview.h
new file mode 100644
index 0000000..9eac41a
--- /dev/null
+++ b/kmymoney2/views/kscheduledview.h
@@ -0,0 +1,149 @@
+/***************************************************************************
+ kscheduledview.h - description
+ -------------------
+ begin : Sun Jan 27 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+#ifndef KSCHEDULEDVIEW_H
+#define KSCHEDULEDVIEW_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+#include <qlistview.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+class KListViewSearchLineWidget;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kscheduledviewdecl.h"
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/mymoneyaccount.h>
+#include "../widgets/kmymoneyscheduledcalendar.h"
+
+class KPopupMenu;
+
+/**
+ * Contains all the scheduled transactions be they bills, deposits or transfers.
+ * Encapsulates all the operations including adding, editing and deleting.
+ * Used by the KMyMoneyView class to show the view.
+ *
+ * @author Michael Edwardes 2000-2002
+ * $Id: kscheduledview.h,v 1.33 2009/03/01 19:13:08 ipwizard Exp $
+ *
+ * @short A class to encapsulate recurring transaction operations.
+ */
+class KScheduledView : public KScheduledViewDecl
+{
+ Q_OBJECT
+
+public:
+ /**
+ * Standard constructor for QWidgets.
+ */
+ KScheduledView(QWidget *parent=0, const char *name=0);
+
+ /**
+ * Standard destructor.
+ */
+ ~KScheduledView();
+
+ /**
+ * Called by KMyMoneyView.
+ */
+ void show();
+
+public slots:
+ void slotSelectSchedule(const QString& schedule);
+ void slotReloadView(void);
+
+signals:
+ void scheduleSelected(const MyMoneySchedule& schedule);
+ void openContextMenu(void);
+ void skipSchedule(void);
+ void enterSchedule(void);
+ void editSchedule(void);
+
+protected slots:
+ /**
+ * Shows the context menu when the user right clicks or presses
+ * a 'windows' key when an item is selected.
+ *
+ * @param view a pointer to the view
+ * @param item a pointer to the current selected listview item
+ * @param pos The position to popup
+ * @return none
+ **/
+ void slotListViewContextMenu(KListView* view, QListViewItem* item, const QPoint& pos);
+
+ void slotListItemExecuted(QListViewItem*, const QPoint&, int);
+
+ void slotAccountActivated(int);
+
+ void slotListViewCollapsed(QListViewItem* item);
+ void slotListViewExpanded(QListViewItem* item);
+
+ void slotBriefSkipClicked(const MyMoneySchedule& schedule, const QDate&);
+ void slotBriefEnterClicked(const MyMoneySchedule& schedule, const QDate&);
+
+ void slotTimerDone(void);
+
+ void slotSetSelectedItem(QListViewItem* item);
+
+ void slotRearrange(void);
+
+private:
+ /// The selected schedule id in the list view.
+ QString m_selectedSchedule;
+
+ /// Read config file
+ void readConfig(void);
+
+ /// Write config file
+ void writeConfig(void);
+
+ /**
+ * Refresh the view.
+ */
+ void refresh(bool full=true, const QString& schedId = QString());
+
+ /**
+ * Loads the accounts into the combo box.
+ */
+// void loadAccounts(void);
+
+ KPopupMenu *m_kaccPopup;
+ QStringList m_filterAccounts;
+ bool m_openBills;
+ bool m_openDeposits;
+ bool m_openTransfers;
+ bool m_openLoans;
+ bool m_needReload;
+
+ /**
+ * Search widget for the list
+ */
+ KListViewSearchLineWidget* m_searchWidget;
+};
+
+#endif
diff --git a/kmymoney2/views/kscheduledviewdecl.ui b/kmymoney2/views/kscheduledviewdecl.ui
new file mode 100644
index 0000000..faa3fe8
--- /dev/null
+++ b/kmymoney2/views/kscheduledviewdecl.ui
@@ -0,0 +1,161 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KScheduledViewDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KScheduledViewDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>620</width>
+ <height>399</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_qbuttonNew</cstring>
+ </property>
+ <property name="text">
+ <string>New Scheduled transaction...</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>80</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_accountsCombo</cstring>
+ </property>
+ <property name="text">
+ <string>Filter Accounts</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="Line">
+ <property name="name">
+ <cstring>line1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>m_tabWidget</cstring>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_listTab</cstring>
+ </property>
+ <attribute name="title">
+ <string>List View</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="KListView">
+ <property name="name">
+ <cstring>m_qlistviewScheduled</cstring>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="showSortIndicator">
+ <bool>true</bool>
+ </property>
+ <property name="rootIsDecorated">
+ <bool>true</bool>
+ </property>
+ <property name="shadeSortColumn">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_calendarTab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Calendar View</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="kMyMoneyScheduledCalendar">
+ <property name="name">
+ <cstring>m_calendar</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>kMyMoneyScheduledCalendar</class>
+ <header location="local">../widgets/kmymoneyscheduledcalendar.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="824">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000002ff49444154388db59531681c4714863f992dde820cb370815b50600f54e8ca0ba43970712a8fb838438a3895634813d238a5ab80e314ae4d0a812060a4226017c27221c8a9da6b8c4fe0e00d28b0571cec82043b85611f78c12966efa4bb8bc085f29a6567df7cef9f7fdeccaec571cc2cbaddee47ae21e2385e5b9b815f1ebcfcd8de6a63ad25cb338af7c52741acb5a4a729a3d723a82ec6bd99d267bf3f23fc1c4cab2442d14a915986e792fdfa59569766573049417784f1b12e8267954dab24b78714450a28beaf941f847c2a14e70a0841035a2d45d641eb027213c210c69756320767794684d6508bef0befde1a860796e4c402333542b4256c0f0cdd1e50b97191458be6e0e27d81563a87c643d8fb2d7793d685d696413cc8a6cae46f65f7d79c7c62b87b4f2e15fd0fb0d302be0fefde4a0d557a5f35e90f84e0334014d590f855c9de4ecee17e4eb319d1ff3a00ec02f8c67299f283307c61e7d06fbf1782d082588a33e1cf1705fd81cf773f3601e1f9bec59e2f4b5c7ef5209f0ac95f16630cfd818067c103b586dd274a726229cee0fe8380d191cb4d1267d3d58aa1de7d258ceae5d7d0a78fdd269a86f0c52d414c49bbe3762c9b686de41560d7a72e41c4795a6486a78f95e4c4151481d686efbe7b3398ac58b1a23868b8c474aaa8068c8e714a8dd06c1af2a9e5d1c38c641c909dba6e08237f19b358a7ac5cf3479bc2e41f257e55d2ffc6a73833746f09e186cfa387904f2cbffc90a2aa9886d0e99464d3c5965b512cebd01f1800f67672e2a392fb0f023a3d883a053ffddcc2340dd65ab452b6074dc2cd15c1cbceb863daed413e353cdfcfd97d92333a12da6d0181ec3443cf753ef3cdd092de0e116ff1a02cdc157338ca9d7b8269461cfee1ba2139b9286e1a427f10110f2d561555b076d18a39383d4d99a4c0cd0b787f20747b214962c8266e3cdcf0e97c59126ec2f6edd089f40a92f115e0d1eb11ba238461dd6a15f32b53666de841965bb203575a3cc15a48c64a965fe57105e3635db8fa96dcffc431172b5d715d7103dc3fea7f015f373c8ee3b57f0135105a0fae7717960000000049454e44ae426082</data>
+ </image>
+</images>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/widgets/Makefile.am b/kmymoney2/widgets/Makefile.am
new file mode 100644
index 0000000..51fa159
--- /dev/null
+++ b/kmymoney2/widgets/Makefile.am
@@ -0,0 +1,95 @@
+KDE_OPTIONS = noautodist
+
+INCLUDES = $(all_includes) -I$(top_srcdir) -I.
+
+noinst_LIBRARIES = libwidgets.a
+
+libwidgets_a_METASOURCES = AUTO
+
+libwidgets_a_SOURCES = kbudgetvalues.cpp kbudgetvaluesdecl.ui kguiutils.cpp klistviewsearchline.cpp kmymoneyaccountcombo.cpp kmymoneyaccountcompletion.cpp kmymoneyaccountselector.cpp kmymoneyaccounttreebase.cpp kmymoneyaccounttree.cpp kmymoneyaccounttreebudget.cpp kmymoneyaccounttreeforecast.cpp kmymoneybriefschedule.cpp kmymoneycalculator.cpp kmymoneycalendar.cpp kmymoneycategory.cpp kmymoneychecklistitem.cpp kmymoneycombo.cpp kmymoneycompletion.cpp kmymoneycurrencyselector.cpp kmymoneydateinput.cpp kmymoneydatetbl.cpp kmymoneyedit.cpp kmymoneyforecastlistviewitem.cpp kmymoneygpgconfig.cpp kmymoneygpgconfigdecl.ui kmymoneylineedit.cpp kmymoneylistviewitem.cpp kmymoneyonlinequoteconfig.cpp kmymoneyonlinequoteconfigdecl.ui kmymoneypriceview.cpp kmymoneyreportconfigtab1decl.ui kmymoneyreportconfigtab2decl.ui kmymoneyreportconfigtab3decl.ui kmymoneyreportconfigtabchartdecl.ui kmymoneyreportcontroldecl.ui kmymoneyscheduledcalendar.cpp kmymoneyscheduleddatetbl.cpp kmymoneyselector.cpp kmymoneytitlelabel.cpp kmymoneywizard.cpp kschedulebriefwidget.ui register.cpp registeritem.cpp registersearchline.cpp transaction.cpp scheduledtransaction.cpp stdtransactiondownloaded.cpp stdtransactionmatched.cpp transactioneditorcontainer.cpp transactionform.cpp kaccounttemplateselectordecl.ui kaccounttemplateselector.cpp \
+transactionsortoption.cpp transactionsortoption.ui \
+selectedtransaction.cpp
+
+#libwidgets_a_SOURCES = kmymoneyregisterinvestment.cpp kmymoneyequity.cpp kmymoneyequitycompletion.cpp kmymoneycompletion.cpp kmymoneyequityselector.cpp kmymoneyaccountcombo.cpp kmymoneyaccountcompletion.cpp kmymoneycurrencyselector.cpp kmymoneypriceview.cpp kmymoneypriceviewdecl.ui kschedulebriefwidget.ui kmymoneyaccountselector.cpp kmymoneyregisterloan.cpp kmymoneyregistersearch.cpp kmymoneybriefschedule.cpp kmymoneyscheduleddatetbl.cpp kmymoneydatetbl.cpp kmymoneyscheduledcalendar.cpp kmymoneycalendar.cpp kmymoneycalculator.cpp kmymoneycategory.cpp kmymoneypayee.cpp kmymoneytransactionform.cpp kmymoneyregistercheckings.cpp kmymoneyregister.cpp kmymoneycombo.cpp kmymoneyhlayout.cpp kmymoneylineedit.cpp kmymoneyedit.cpp kmymoneydateinput.cpp kmymoneyreportcontroldecl.ui kmymoneyreportconfigtab1decl.ui kmymoneyreportconfigtab2decl.ui kmymoneyreportconfigtab3decl.ui kmymoneyreportconfigtabchartdecl.ui kmymoneyonlinequoteconfig.cpp kmymoneyonlinequoteconfigdecl.ui kmymoneyaccounttree.cpp kmymoneygpgconfigdecl.ui kmymoneygpgconfig.cpp kmymoneytitlelabel.cpp kguiutils.cpp kmymoneywizard.cpp kmymoneyaccounttreebudget.cpp kmymoneyaccounttreeforecast.cpp \
+#register.cpp registeritem.cpp transaction.cpp transactionform.cpp transactioneditor.cpp transactioneditorcontainer.cpp kmymoneychecklistitem.cpp kmymoneylistviewitem.cpp kmymoneyforecastlistviewitem.cpp kmymoneyselector.cpp \
+#transactionsortoption.ui
+
+EXTRA_DIST = kmymoney.widgets kmymoneygpgconfigdecl.ui kmymoneyonlinequoteconfigdecl.ui kmymoneyreportconfigtab1decl.ui kmymoneyreportconfigtab2decl.ui kmymoneyreportconfigtab3decl.ui kmymoneyreportcontroldecl.ui kschedulebriefwidget.ui kmymoneyreportconfigtabchartdecl.ui transactionsortoption.ui transactionsortoption.ui.h sortoptionlistitem.h makekdewidgets.in kbudgetvaluesdecl.ui kaccounttemplateselectordecl.ui
+
+# include the widgets that are available to 3rd party sw (e.g. plugins or
+# Qt designer) here
+# Note: The autogenerated file(s) are kept on a separate line so that no
+# symbolic link is created during configure time (see configure.in.in)
+# but the file is included in the tar-ball. See also the separate target
+# $(top_builddir)/kmymoney/xxx.h further down and the BUILT_SOURCES target.
+instdir=$(includedir)/kmymoney
+inst_HEADERS = kmymoneydateinput.h kmymoneyedit.h kmymoneytitlelabel.h kmymoneyaccountselector.h kmymoneycategory.h kmymoneyaccounttreebase.h kmymoneyaccounttree.h kmymoneycurrencyselector.h kguiutils.h kmymoneywizard.h kmymoneyaccounttreebudget.h kmymoneyaccounttreeforecast.h kmymoneyaccountcombo.h register.h registeritem.h transaction.h scheduledtransaction.h stdtransactiondownloaded.h stdtransactionmatched.h selectedtransaction.h transactionform.h transactioneditorcontainer.h kmymoneylineedit.h kmymoneychecklistitem.h kmymoneylistviewitem.h kmymoneyforecastlistviewitem.h kmymoneyselector.h kmymoneyaccountcompletion.h kmymoneycompletion.h kmymoneycombo.h kbudgetvalues.h kaccounttemplateselector.h \
+ transactionsortoption.h
+
+# include the widgets that are only available to KMyMoney here
+noinst_HEADERS = kbudgetvalues.h klistviewsearchline.h kmymoneyaccounttree.h \
+ kmymoneyaccounttreebudget.h kmymoneyaccounttreeforecast.h kmymoneybriefschedule.h kmymoneycalculator.h kmymoneycalendar.h \
+ kmymoneycategory.h kmymoneydatetbl.h kmymoneygpgconfig.h kmymoneyonlinequoteconfig.h \
+ kmymoneypriceview.h kmymoneyscheduledcalendar.h kmymoneyscheduleddatetbl.h \
+ kmymoneywizard_p.h registersearchline.h
+
+# make sure, automatically generated files exist
+BUILT_SOURCES = settings $(top_builddir)/kmymoney/transactionsortoption.h mocs dialogs transactionsortoption.cpp kbudgetvaluesdecl.h kaccounttemplateselectordecl.h libkmymoney.la kmmwidgets.cpp
+
+CLEANFILES = kmmwidgets.cpp
+
+.PHONY: dialogs settings
+dialogs:
+ $(MAKE) -C ../dialogs kcurrencycalculatordecl.h
+
+settings:
+ $(MAKE) -C .. kmymoneysettings.h
+
+# we have to make sure, that the symbolic link exists
+$(top_builddir)/kmymoney/transactionsortoption.h: transactionsortoption.h
+ if test -h $@; then rm $@; fi
+ ln -s `pwd`/transactionsortoption.h $@
+
+PICS_DIR=kmymoney2/pics
+WIDGET_PNGS = kmymoneytitlelabel.png
+
+libkmymoney_la_SOURCES = kmmwidgets.cpp ../kmymoneysettings.cpp kmymoneycompletion.cpp kmymoneyaccountcombo.cpp kmymoneyaccountcompletion.cpp kmymoneycurrencyselector.cpp kmymoneyaccountselector.cpp kmymoneydatetbl.cpp kmymoneycalculator.cpp kmymoneycategory.cpp kmymoneycombo.cpp kmymoneylineedit.cpp kmymoneyedit.cpp kmymoneydateinput.cpp kmymoneyaccounttree.cpp kmymoneytitlelabel.cpp kguiutils.cpp kmymoneyaccounttreebase.cpp kmymoneyaccounttreebudget.cpp kmymoneyaccounttreeforecast.cpp register.cpp registeritem.cpp transaction.cpp scheduledtransaction.cpp stdtransactiondownloaded.cpp stdtransactionmatched.cpp transactionform.cpp kmymoneychecklistitem.cpp kmymoneylistviewitem.cpp kmymoneyselector.cpp transactionsortoption.cpp kbudgetvalues.cpp kbudgetvaluesdecl.cpp kaccounttemplateselector.cpp kaccounttemplateselectordecl.cpp
+
+noinst_LTLIBRARIES = libkmymoney.la
+
+kmmwidgets.cpp: $(srcdir)/kmymoney.widgets
+ chmod +x makekdewidgets
+ ./makekdewidgets -g KMyMoney -n CustomWidgetPlugin -o kmmwidgets.cpp -i kmymoney $(abs_srcdir)/kmymoney.widgets
+
+# make sure to compile the Qt designer version w/o the memory leak checker
+# also we need a copy of the mymoneymoney.lo file which has been compiled
+# already. This is a quick hack around a bootstrap problem. We could link
+# the libkmymoney.so against libkmm_mymoney.so but this is not yet installed
+# but required to let UIC generate the right code for the dialogs and views.
+# Hence the quick hack to include the required objects from the
+# libkmm_mymoney.so directly into libkmymoney.so
+libkmymoney_la_CXXFLAGS = -U_CHECK_MEMORY -DKMM_DESIGNER
+libkmymoney_la_LDFLAGS = `ls ../mymoney/*.lo` $(KDE_LDFLAGS) $(QT_LDFLAGS) $(X_LDFLAGS) -rpath $(DESTDIR)$(qt_libraries)/../plugins/designer $(LIB_KDEUI) $(LIB_KDECORE) $(LIB_QT)
+
+if INSTALL_QTDESIGNER_SUPPORT
+install-exec-local: libkmymoney.la
+ $(mkinstalldirs) $(DESTDIR)$(qt_libraries)/../plugins/designer
+ $(INSTALL_PROGRAM) .libs/libkmymoney.so $(DESTDIR)$(qt_libraries)/../plugins/designer
+ $(mkinstalldirs) $(DESTDIR)$(kde_datadir)/$(PICS_DIR)
+ for file in $(WIDGET_PNGS); do \
+ $(INSTALL_DATA) $(abs_srcdir)/$$file $(DESTDIR)$(kde_datadir)/$(PICS_DIR); \
+ done
+
+uninstall-local:
+ -rm $(DESTDIR)$(qt_libraries)/../plugins/designer/libkmymoney.so
+ for file in $(WIDGET_PNGS); do \
+ rm -rf $(DESTDIR)$(kde_datadir)/$(PICS_DIR)/$$file; \
+ done
+endif
+
+dist-hook:
+ -rm -rf $(distdir)/transactionsortoption.h
+ -rm -rf $(distdir)/transactionsortoption.cpp
+ -rm -rf $(distdir)/kmmwidgets.cpp
+
+messages: rc.cpp
diff --git a/kmymoney2/widgets/kaccounttemplateselector.cpp b/kmymoney2/widgets/kaccounttemplateselector.cpp
new file mode 100644
index 0000000..8ba6f0a
--- /dev/null
+++ b/kmymoney2/widgets/kaccounttemplateselector.cpp
@@ -0,0 +1,279 @@
+/***************************************************************************
+ kaccounttemplateselector.cpp - description
+ -------------------
+ begin : Tue Feb 5 2008
+ copyright : (C) 2008 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qdir.h>
+#include <qheader.h>
+#include <qtimer.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kglobal.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+#include <klistview.h>
+#include <ktextedit.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneytemplate.h>
+
+#include "kaccounttemplateselector.h"
+
+class KTemplateListItem : public KListViewItem
+{
+ public:
+ KTemplateListItem(QListViewItem* parent, const QString& text);
+ void setAvailable(void);
+ public:
+ bool m_isAvailable;
+};
+
+KTemplateListItem::KTemplateListItem(QListViewItem* parent, const QString& text) :
+ KListViewItem(parent, text),
+ m_isAvailable(false)
+{
+}
+
+void KTemplateListItem::setAvailable(void)
+{
+ m_isAvailable = true;
+}
+
+class KAccountTemplateSelector::Private
+{
+ public:
+ Private(KAccountTemplateSelector* p) { m_parent = p; }
+#ifndef KMM_DESIGNER
+ QValueList<MyMoneyTemplate> selectedTemplates(void) const;
+ QListViewItem* hierarchyItem(const QString& parent, const QString& name);
+ void loadHierarchy(void);
+#endif
+
+ public:
+ KAccountTemplateSelector* m_parent;
+ QMap<QString, QListViewItem*> m_templateHierarchy;
+#ifndef KMM_DESIGNER
+ QMap<QString, MyMoneyTemplate> m_templates;
+ QMap<QString, QString> countries;
+ QMap<QString, QString>::iterator it_m;
+ QStringList dirlist;
+ int id;
+#endif
+};
+
+
+#ifndef KMM_DESIGNER
+QListViewItem* KAccountTemplateSelector::Private::hierarchyItem(const QString& parent, const QString& name)
+{
+ if(!m_templateHierarchy.contains(parent)
+ || m_templateHierarchy[parent] == 0) {
+ QRegExp exp("(.*):(.*)");
+ if(exp.search(parent) != -1)
+ m_templateHierarchy[parent] = hierarchyItem(exp.cap(1), exp.cap(2));
+ }
+ return new KTemplateListItem(m_templateHierarchy[parent], name);
+}
+
+void KAccountTemplateSelector::Private::loadHierarchy(void)
+{
+ m_templateHierarchy.clear();
+ QListViewItemIterator it(m_parent->m_groupList, QListViewItemIterator::Selected);
+ QListViewItem* it_v;
+ while((it_v = it.current()) != 0) {
+ m_templates[it_v->text(2)].hierarchy(m_templateHierarchy);
+ ++it;
+ }
+
+ // I need to think about this some more. The code works and shows
+ // the current account hierarchy. It might be usefull, to show
+ // existing accounts dimmed and the new ones in bold or so.
+#if 0
+
+ // add the hierarchy from the MyMoneyFile object
+ QValueList<MyMoneyAccount> aList;
+ QValueList<MyMoneyAccount>::const_iterator it_a;
+ MyMoneyFile* file = MyMoneyFile::instance();
+ file->accountList(aList);
+ if(aList.count() > 0) {
+ m_templateHierarchy[file->accountToCategory(file->asset().id(), true)] = 0;
+ m_templateHierarchy[file->accountToCategory(file->liability().id(), true)] = 0;
+ m_templateHierarchy[file->accountToCategory(file->income().id(), true)] = 0;
+ m_templateHierarchy[file->accountToCategory(file->expense().id(), true)] = 0;
+ m_templateHierarchy[file->accountToCategory(file->equity().id(), true)] = 0;
+ }
+
+ for(it_a = aList.begin(); it_a != aList.end(); ++it_a) {
+ m_templateHierarchy[file->accountToCategory((*it_a).id(), true)] = 0;
+ }
+#endif
+
+ m_parent->m_accountList->clear();
+ QMap<QString, QListViewItem*>::iterator it_m;
+
+ QRegExp exp("(.*):(.*)");
+ for(it_m = m_templateHierarchy.begin(); it_m != m_templateHierarchy.end(); ++it_m) {
+ if(exp.search(it_m.key()) == -1) {
+ (*it_m) = new KListViewItem(m_parent->m_accountList, it_m.key());
+ } else {
+ (*it_m) = hierarchyItem(exp.cap(1), exp.cap(2));
+ }
+ (*it_m)->setOpen(true);
+ }
+
+ m_parent->m_description->clear();
+ if(m_parent->m_groupList->currentItem()) {
+ m_parent->m_description->setText(m_templates[m_parent->m_groupList->currentItem()->text(2)].longDescription());
+ }
+}
+
+QValueList<MyMoneyTemplate> KAccountTemplateSelector::Private::selectedTemplates(void) const
+{
+ QValueList<MyMoneyTemplate> list;
+ QListViewItemIterator it(m_parent->m_groupList, QListViewItemIterator::Selected);
+ QListViewItem* it_v;
+ while((it_v = it.current()) != 0) {
+ list << m_templates[it_v->text(2)];
+ ++it;
+ }
+ return list;
+}
+#endif
+
+
+KAccountTemplateSelector::KAccountTemplateSelector(QWidget* parent, const char* name) :
+ KAccountTemplateSelectorDecl(parent, name),
+ d(new Private(this))
+{
+ m_accountList->header()->hide();
+ connect(m_groupList, SIGNAL(selectionChanged()), this, SLOT(slotLoadHierarchy()));
+
+ // kick off loading of account template data
+ QTimer::singleShot(0, this, SLOT(slotLoadTemplateList()));
+}
+
+KAccountTemplateSelector::~KAccountTemplateSelector()
+{
+ delete d;
+}
+
+void KAccountTemplateSelector::slotLoadTemplateList(void)
+{
+#ifndef KMM_DESIGNER
+ QStringList dirs;
+ // get list of template subdirs and scan them for the list of subdirs
+ d->dirlist = KGlobal::dirs()->findDirs("appdata", "templates");
+ QStringList::iterator it;
+ for(it = d->dirlist.begin(); it != d->dirlist.end(); ++it) {
+ QDir dir(*it);
+ // qDebug("Reading dir '%s' with %d entries", (*it).data(), dir.count());
+ dirs = dir.entryList("*", QDir::Dirs);
+ QStringList::iterator it_d;
+ for(it_d= dirs.begin(); it_d != dirs.end(); ++it_d) {
+ // we don't care about . and ..
+ if((*it_d) == ".." || (*it_d) == "." || (*it_d) == "C")
+ continue;
+ QRegExp exp("(..)_(..)");
+ if(exp.search(*it_d) != -1) {
+ QString country = KGlobal::locale()->twoAlphaToCountryName(exp.cap(2));
+ if(country.isEmpty())
+ country = exp.cap(2);
+ QString lang = KGlobal::locale()->twoAlphaToLanguageName(exp.cap(1));
+ if(d->countries.contains(country)) {
+ if(d->countries[country] != *it_d) {
+ QString oName = d->countries[country];
+ exp.search(oName);
+ QString oCountry = KGlobal::locale()->twoAlphaToCountryName(exp.cap(2));
+ QString oLang = KGlobal::locale()->twoAlphaToLanguageName(exp.cap(1));
+ d->countries.remove(country);
+ d->countries[QString("%1 (%2)").arg(oCountry).arg(oLang)] = oName;
+ d->countries[QString("%1 (%2)").arg(country).arg(lang)] = *it_d;
+ }
+ } else {
+ d->countries[country] = *it_d;
+ }
+ } else if((*it_d).length() == 2) {
+ QString country = KGlobal::locale()->twoAlphaToCountryName((*it_d).upper());
+ d->countries[country] = *it_d;
+ } else {
+ qDebug("'%s/%s' not scanned", (*it).data(), (*it_d).data());
+ }
+ }
+ }
+
+ // now that we know, what we can get at max, we scan everything
+ // and parse the templates into memory
+ m_groupList->clear();
+ d->m_templates.clear();
+ d->it_m = d->countries.begin();
+ d->id = 1;
+ QTimer::singleShot(0, this, SLOT(slotLoadCountry()));
+#endif
+}
+
+void KAccountTemplateSelector::slotLoadCountry(void)
+{
+#ifndef KMM_DESIGNER
+
+ KListViewItem* parent = new KListViewItem(m_groupList, d->it_m.key());
+ parent->setSelectable(false);
+ QStringList::iterator it;
+ for(it = d->dirlist.begin(); it != d->dirlist.end(); ++it) {
+ QStringList::iterator it_f;
+ QDir dir(QString("%1%2").arg(*it).arg(*(d->it_m)));
+ if(dir.exists()) {
+ QStringList files = dir.entryList("*", QDir::Files);
+ for(it_f = files.begin(); it_f != files.end(); ++it_f) {
+ MyMoneyTemplate templ(QString("%1/%2").arg(dir.canonicalPath()).arg(*it_f));
+ d->m_templates[QString("%1").arg(d->id)] = templ;
+ new KListViewItem(parent, templ.title(), templ.shortDescription(), QString("%1").arg(d->id));
+ ++d->id;
+ }
+ }
+ }
+
+ ++d->it_m;
+ if(d->it_m != d->countries.end())
+ QTimer::singleShot(0, this, SLOT(slotLoadCountry()));
+ else {
+ d->loadHierarchy();
+ }
+#endif
+
+}
+
+void KAccountTemplateSelector::slotLoadHierarchy(void)
+{
+#ifndef KMM_DESIGNER
+ d->loadHierarchy();
+#endif
+}
+
+QValueList<MyMoneyTemplate> KAccountTemplateSelector::selectedTemplates(void) const
+{
+#ifndef KMM_DESIGNER
+ return d->selectedTemplates();
+#else
+ return QValueList<MyMoneyTemplate>();
+#endif
+}
+
+#include "kaccounttemplateselector.moc"
diff --git a/kmymoney2/widgets/kaccounttemplateselector.h b/kmymoney2/widgets/kaccounttemplateselector.h
new file mode 100644
index 0000000..df2c3fd
--- /dev/null
+++ b/kmymoney2/widgets/kaccounttemplateselector.h
@@ -0,0 +1,57 @@
+/***************************************************************************
+ kaccounttemplateselector.h - description
+ -------------------
+ begin : Tue Feb 5 2008
+ copyright : (C) 2008 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KACCOUNTTEMPLATESELECTOR_H
+#define KACCOUNTTEMPLATESELECTOR_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney2/widgets/kaccounttemplateselectordecl.h>
+class MyMoneyTemplate;
+
+/**
+ * @author Thomas Baumgart <ipwizard@users.sourceforge.net>
+ */
+class KAccountTemplateSelector : public KAccountTemplateSelectorDecl
+{
+ Q_OBJECT
+ public:
+ KAccountTemplateSelector(QWidget* parent = 0, const char* name = 0);
+ ~KAccountTemplateSelector();
+
+ QValueList<MyMoneyTemplate> selectedTemplates(void) const;
+
+ private slots:
+ void slotLoadHierarchy(void);
+ void slotLoadCountry(void);
+ void slotLoadTemplateList(void);
+
+ private:
+ /// \internal d-pointer class.
+ class Private;
+ /// \internal d-pointer instance.
+ Private* const d;
+};
+
+#endif
diff --git a/kmymoney2/widgets/kaccounttemplateselectordecl.cpp b/kmymoney2/widgets/kaccounttemplateselectordecl.cpp
new file mode 100644
index 0000000..8fed754
--- /dev/null
+++ b/kmymoney2/widgets/kaccounttemplateselectordecl.cpp
@@ -0,0 +1,111 @@
+#include <kdialog.h>
+#include <klocale.h>
+#ifndef KMM_I18N
+#define KMM_I18N
+inline QString kmm_i18n(const char* msg, const char* ctx) { return i18n(ctx, msg); }
+inline QString kmm_i18n(const char* msg) { return i18n(msg); }
+#endif
+/****************************************************************************
+** Form implementation generated from reading ui file '../../../kmymoney2/widgets/kaccounttemplateselectordecl.ui'
+**
+** Created: Fri Feb 12 15:05:39 2010
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+
+#include "kaccounttemplateselectordecl.h"
+
+#include <qvariant.h>
+#include <qpushbutton.h>
+#include <qheader.h>
+#include <klistview.h>
+#include <qgroupbox.h>
+#include <ktextedit.h>
+#include <qlayout.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+
+/*
+ * Constructs a KAccountTemplateSelectorDecl as a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'.
+ */
+KAccountTemplateSelectorDecl::KAccountTemplateSelectorDecl( QWidget* parent, const char* name, WFlags fl )
+ : QWidget( parent, name, fl )
+{
+ if ( !name )
+ setName( "KAccountTemplateSelectorDecl" );
+ KAccountTemplateSelectorDeclLayout = new QVBoxLayout( this, 0, 6, "KAccountTemplateSelectorDeclLayout");
+
+ m_groupList = new KListView( this, "m_groupList" );
+ m_groupList->addColumn( kmm_i18n( "Account Types" ) );
+ m_groupList->addColumn( kmm_i18n( "Description" ) );
+ m_groupList->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)7, 0, 0, m_groupList->sizePolicy().hasHeightForWidth() ) );
+ m_groupList->setMinimumSize( QSize( 0, 150 ) );
+ m_groupList->setProperty( "selectionMode", "Extended" );
+ m_groupList->setAllColumnsShowFocus( TRUE );
+ m_groupList->setRootIsDecorated( TRUE );
+ m_groupList->setFullWidth( TRUE );
+ KAccountTemplateSelectorDeclLayout->addWidget( m_groupList );
+
+ layout3 = new QHBoxLayout( 0, 0, 6, "layout3");
+
+ groupBox1 = new QGroupBox( this, "groupBox1" );
+ groupBox1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)5, 0, 2, groupBox1->sizePolicy().hasHeightForWidth() ) );
+ groupBox1->setColumnLayout(0, Qt::Vertical );
+ groupBox1->layout()->setSpacing( 6 );
+ groupBox1->layout()->setMargin( 11 );
+ groupBox1Layout = new QVBoxLayout( groupBox1->layout() );
+ groupBox1Layout->setAlignment( Qt::AlignTop );
+
+ m_description = new KTextEdit( groupBox1, "m_description" );
+ m_description->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)7, 0, 3, m_description->sizePolicy().hasHeightForWidth() ) );
+ m_description->setReadOnly( TRUE );
+ groupBox1Layout->addWidget( m_description );
+ layout3->addWidget( groupBox1 );
+
+ groupBox2 = new QGroupBox( this, "groupBox2" );
+ groupBox2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)5, 1, 2, groupBox2->sizePolicy().hasHeightForWidth() ) );
+ groupBox2->setColumnLayout(0, Qt::Vertical );
+ groupBox2->layout()->setSpacing( 6 );
+ groupBox2->layout()->setMargin( 11 );
+ groupBox2Layout = new QVBoxLayout( groupBox2->layout() );
+ groupBox2Layout->setAlignment( Qt::AlignTop );
+
+ m_accountList = new KListView( groupBox2, "m_accountList" );
+ m_accountList->addColumn( kmm_i18n( "Name" ) );
+ m_accountList->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)7, 0, 3, m_accountList->sizePolicy().hasHeightForWidth() ) );
+ m_accountList->setMinimumSize( QSize( 0, 150 ) );
+ m_accountList->setProperty( "selectionMode", "NoSelection" );
+ m_accountList->setAllColumnsShowFocus( TRUE );
+ m_accountList->setRootIsDecorated( TRUE );
+ m_accountList->setFullWidth( TRUE );
+ groupBox2Layout->addWidget( m_accountList );
+ layout3->addWidget( groupBox2 );
+ KAccountTemplateSelectorDeclLayout->addLayout( layout3 );
+ languageChange();
+ resize( QSize(546, 346).expandedTo(minimumSizeHint()) );
+ clearWState( WState_Polished );
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+KAccountTemplateSelectorDecl::~KAccountTemplateSelectorDecl()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+/*
+ * Sets the strings of the subwidgets using the current
+ * language.
+ */
+void KAccountTemplateSelectorDecl::languageChange()
+{
+ m_groupList->header()->setLabel( 0, kmm_i18n( "Account Types" ) );
+ m_groupList->header()->setLabel( 1, kmm_i18n( "Description" ) );
+ groupBox1->setTitle( kmm_i18n( "Detailed description" ) );
+ groupBox2->setTitle( kmm_i18n( "Accounts" ) );
+ m_accountList->header()->setLabel( 0, kmm_i18n( "Name" ) );
+}
+
+#include "kaccounttemplateselectordecl.moc"
diff --git a/kmymoney2/widgets/kaccounttemplateselectordecl.ui b/kmymoney2/widgets/kaccounttemplateselectordecl.ui
new file mode 100644
index 0000000..6ed4b6d
--- /dev/null
+++ b/kmymoney2/widgets/kaccounttemplateselectordecl.ui
@@ -0,0 +1,188 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KAccountTemplateSelectorDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KAccountTemplateSelectorDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>546</width>
+ <height>346</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="KListView">
+ <column>
+ <property name="text">
+ <string>Account Types</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Description</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>m_groupList</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>150</height>
+ </size>
+ </property>
+ <property name="selectionMode" stdset="0">
+ <enum>Extended</enum>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="rootIsDecorated">
+ <bool>true</bool>
+ </property>
+ <property name="fullWidth">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>2</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Detailed description</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KTextEdit">
+ <property name="name">
+ <cstring>m_description</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>3</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>1</horstretch>
+ <verstretch>2</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Accounts</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KListView">
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>m_accountList</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>3</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>150</height>
+ </size>
+ </property>
+ <property name="selectionMode" stdset="0">
+ <enum>NoSelection</enum>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="rootIsDecorated">
+ <bool>true</bool>
+ </property>
+ <property name="fullWidth">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/widgets/kbudgetvalues.cpp b/kmymoney2/widgets/kbudgetvalues.cpp
new file mode 100644
index 0000000..2d6c2d7
--- /dev/null
+++ b/kmymoney2/widgets/kbudgetvalues.cpp
@@ -0,0 +1,341 @@
+/***************************************************************************
+ kbudgetvalues - description
+ -------------------
+ begin : Wed Nov 28 2007
+ copyright : (C) 2007 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qtabwidget.h>
+#include <qlabel.h>
+#include <qbuttongroup.h>
+#include <qradiobutton.h>
+#include <qwidgetstack.h>
+#include <qtimer.h>
+#include <qtooltip.h>
+#include <qapplication.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kglobal.h>
+#include <klocale.h>
+#include <kcalendarsystem.h>
+#include <kmessagebox.h>
+#include <kpushbutton.h>
+#include <kstdguiitem.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kbudgetvalues.h"
+#include <kmymoney/kmymoneyedit.h>
+
+KBudgetValues::KBudgetValues(QWidget* parent, const char* name) :
+ KBudgetValuesDecl(parent, name),
+ m_currentTab(m_monthlyButton)
+{
+ m_budgetDate = QDate(2007,1,1);
+
+ m_field[0] = m_amount1;
+ m_field[1] = m_amount2;
+ m_field[2] = m_amount3;
+ m_field[3] = m_amount4;
+ m_field[4] = m_amount5;
+ m_field[5] = m_amount6;
+ m_field[6] = m_amount7;
+ m_field[7] = m_amount8;
+ m_field[8] = m_amount9;
+ m_field[9] = m_amount10;
+ m_field[10] = m_amount11;
+ m_field[11] = m_amount12;
+
+ m_label[0] = m_label1;
+ m_label[1] = m_label2;
+ m_label[2] = m_label3;
+ m_label[3] = m_label4;
+ m_label[4] = m_label5;
+ m_label[5] = m_label6;
+ m_label[6] = m_label7;
+ m_label[7] = m_label8;
+ m_label[8] = m_label9;
+ m_label[9] = m_label10;
+ m_label[10] = m_label11;
+ m_label[11] = m_label12;
+
+ // fill with standard labels
+ m_monthlyButton->setChecked(true);
+ slotChangePeriod(m_periodGroup->id(m_monthlyButton));
+
+ // connect(m_budgetLevel, SIGNAL(currentChanged(QWidget*)), this, SIGNAL(valuesChanged()));
+ connect(m_amountMonthly, SIGNAL(valueChanged(const QString&)), this, SLOT(slotNeedUpdate()));
+ connect(m_amountYearly, SIGNAL(valueChanged(const QString&)), this, SLOT(slotNeedUpdate()));
+ m_amountMonthly->installEventFilter(this);
+ m_amountYearly->installEventFilter(this);
+
+ for(int i=0; i < 12; ++i) {
+ connect(m_field[i], SIGNAL(valueChanged(const QString&)), this, SLOT(slotNeedUpdate()));
+ m_field[i]->installEventFilter(this);
+ }
+
+ connect(m_clearButton, SIGNAL(clicked()), this, SLOT(slotClearAllValues()));
+ connect(m_periodGroup, SIGNAL(clicked(int)), this, SLOT(slotChangePeriod(int)));
+ connect(this, SIGNAL(valuesChanged()), this, SLOT(slotUpdateClearButton()));
+
+ KGuiItem clearItem(KStdGuiItem::clear());
+
+ m_clearButton->setGuiItem(clearItem);
+ m_clearButton->setText("");
+ QToolTip::add(m_clearButton, clearItem.toolTip());
+}
+
+
+KBudgetValues::~KBudgetValues()
+{
+}
+
+bool KBudgetValues::eventFilter(QObject* o, QEvent* e)
+{
+ bool rc = false;
+
+ if(o->isWidgetType()
+ && (e->type() == QEvent::KeyPress)) {
+ QKeyEvent* k = dynamic_cast<QKeyEvent*>(e);
+ if((k->state() & Qt::KeyButtonMask) == 0) {
+ QKeyEvent evt(e->type(),
+ Qt::Key_Tab, 0, k->state(), QString::null,
+ k->isAutoRepeat(), k->count());
+ switch(k->key()) {
+ case Qt::Key_Return:
+ case Qt::Key_Enter:
+ // send out a TAB key event
+ QApplication::sendEvent( o, &evt );
+ // don't process this one any further
+ rc = true;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ return rc;
+}
+
+void KBudgetValues::clear(void)
+{
+ blockSignals(true);
+ for(int i=0; i < 12; ++i)
+ m_field[i]->setValue(MyMoneyMoney());
+ m_amountMonthly->setValue(MyMoneyMoney());
+ m_amountYearly->setValue(MyMoneyMoney());
+ blockSignals(false);
+}
+
+void KBudgetValues::slotClearAllValues(void)
+{
+ QWidget* tab = m_periodGroup->selected();
+ if(tab == m_monthlyButton) {
+ m_amountMonthly->setValue(MyMoneyMoney());
+ } else if(tab == m_yearlyButton) {
+ m_amountYearly->setValue(MyMoneyMoney());
+ } else if(tab == m_individualButton) {
+ for(int i=0; i < 12; ++i)
+ m_field[i]->setValue(MyMoneyMoney());
+ }
+ emit valuesChanged();
+}
+
+void KBudgetValues::slotChangePeriod(int id)
+{
+ // Prevent a recursive entry of this method due to widget changes
+ // performed during execution of this method
+ static bool inside = false;
+ if(inside)
+ return;
+ inside = true;
+
+ QWidget *tab = m_periodGroup->find(id);
+ fillMonthLabels();
+
+ MyMoneyMoney newValue;
+ if(tab == m_monthlyButton) {
+ m_firstItemStack->raiseWidget(m_monthlyPage);
+ enableMonths(false);
+ m_label[0]->setText(" ");
+ if(m_amountMonthly->value().isZero()) {
+ if(m_currentTab == m_yearlyButton) {
+ newValue = (m_amountYearly->value() / MyMoneyMoney(12, 1)).convert();
+
+ } else if(m_currentTab == m_individualButton) {
+ for(int i=0; i < 12; ++i)
+ newValue += m_field[i]->value();
+ newValue = (newValue / MyMoneyMoney(12, 1)).convert();
+ }
+ if(!newValue.isZero()) {
+ if(KMessageBox::questionYesNo(this, QString("<qt>")+i18n("You have entered budget values using a different base which would result in a monthly budget of <b>%1</b>. Should this value be used to fill the monthly budget?").arg(newValue.formatMoney("", 2))+QString("</qt>"), i18n("Auto assignment (caption)", "Auto assignment"), KStdGuiItem::yes(), KStdGuiItem::no(), "use_previous_budget_values") == KMessageBox::Yes) {
+ m_amountMonthly->setValue(newValue);
+ }
+ }
+ }
+
+ } else if(tab == m_yearlyButton) {
+ m_firstItemStack->raiseWidget(m_yearlyPage);
+ enableMonths(false);
+ m_label[0]->setText(" ");
+ if(m_amountYearly->value().isZero()) {
+ if(m_currentTab == m_monthlyButton) {
+ newValue = (m_amountMonthly->value() * MyMoneyMoney(12, 1)).convert();
+
+ } else if(m_currentTab == m_individualButton) {
+ for(int i=0; i < 12; ++i)
+ newValue += m_field[i]->value();
+ }
+ if(!newValue.isZero()) {
+ if(KMessageBox::questionYesNo(this, QString("<qt>")+i18n("You have entered budget values using a different base which would result in a yearly budget of <b>%1</b>. Should this value be used to fill the monthly budget?").arg(newValue.formatMoney("", 2))+QString("</qt>"), i18n("Auto assignment (caption)", "Auto assignment"), KStdGuiItem::yes(), KStdGuiItem::no(), "use_previous_budget_values") == KMessageBox::Yes) {
+ m_amountYearly->setValue(newValue);
+ }
+ }
+ }
+
+ } else if(tab == m_individualButton) {
+ m_firstItemStack->raiseWidget(m_individualPage);
+ enableMonths(true);
+ for(int i=0; i < 12; ++i)
+ newValue += m_field[i]->value();
+ if(newValue.isZero()) {
+ if(m_currentTab == m_monthlyButton) {
+ newValue = m_amountMonthly->value();
+ } else if(m_currentTab == m_yearlyButton) {
+ newValue = (m_amountYearly->value() / MyMoneyMoney(12, 1)).convert();
+ }
+
+ if(!newValue.isZero()) {
+ if(KMessageBox::questionYesNo(this, QString("<qt>")+i18n("You have entered budget values using a different base which would result in an individual monthly budget of <b>%1</b>. Should this value be used to fill the monthly budgets?").arg(newValue.formatMoney("", 2))+QString("</qt>"), i18n("Auto assignment (caption)", "Auto assignment"), KStdGuiItem::yes(), KStdGuiItem::no(), "use_previous_budget_values") == KMessageBox::Yes) {
+ for(int i=0; i < 12; ++i)
+ m_field[i]->setValue(newValue);
+ }
+ }
+ }
+ }
+
+ slotNeedUpdate();
+ m_currentTab = tab;
+ inside = false;
+}
+
+void KBudgetValues::slotNeedUpdate(void)
+{
+ if(!signalsBlocked())
+ QTimer::singleShot(0, this, SIGNAL(valuesChanged()));
+}
+
+void KBudgetValues::enableMonths(bool enabled)
+{
+ for(int i = 1; i < 12; ++i) {
+ m_label[i]->setEnabled(enabled);
+ m_field[i]->setEnabled(enabled);
+ }
+}
+
+void KBudgetValues::fillMonthLabels(void)
+{
+ QDate date(m_budgetDate);
+ for(int i = 0; i < 12; ++i) {
+ m_label[i]->setText(KGlobal::locale()->calendar()->monthName(date, true));
+ date = date.addMonths(1);
+ }
+}
+
+void KBudgetValues::setBudgetValues(const MyMoneyBudget& budget, const MyMoneyBudget::AccountGroup& budgetAccount)
+{
+ MyMoneyBudget::PeriodGroup period;
+ m_budgetDate = budget.budgetStart();
+ QDate date;
+
+ // make sure all values are zero so that slotChangePeriod()
+ // doesn't check for anything.
+ clear();
+
+ blockSignals(true);
+ switch(budgetAccount.budgetLevel()) {
+ case MyMoneyBudget::AccountGroup::eMonthly:
+ default:
+ m_monthlyButton->setChecked(true);
+ slotChangePeriod(m_periodGroup->id(m_monthlyButton));
+ m_amountMonthly->setValue(budgetAccount.period(m_budgetDate).amount());
+ break;
+ case MyMoneyBudget::AccountGroup::eYearly:
+ m_yearlyButton->setChecked(true);
+ slotChangePeriod(m_periodGroup->id(m_yearlyButton));
+ m_amountYearly->setValue(budgetAccount.period(m_budgetDate).amount());
+ break;
+ case MyMoneyBudget::AccountGroup::eMonthByMonth:
+ m_individualButton->setChecked(true);
+ slotChangePeriod(m_periodGroup->id(m_individualButton));
+ date.setYMD(m_budgetDate.year(), 1, 1);
+ for(int i = 0; i < 12; ++i) {
+ m_field[i]->setValue(budgetAccount.period(date).amount());
+ date = date.addMonths(1);
+ }
+ break;
+ }
+ slotUpdateClearButton();
+ blockSignals(false);
+}
+
+void KBudgetValues::budgetValues(const MyMoneyBudget& budget, MyMoneyBudget::AccountGroup& budgetAccount)
+{
+ MyMoneyBudget::PeriodGroup period;
+ m_budgetDate = budget.budgetStart();
+ period.setStartDate(m_budgetDate);
+ QDate date;
+
+ budgetAccount.clearPeriods();
+ if(m_periodGroup->selected() == m_monthlyButton) {
+ budgetAccount.setBudgetLevel(MyMoneyBudget::AccountGroup::eMonthly);
+ period.setAmount(m_amountMonthly->value());
+ budgetAccount.addPeriod(m_budgetDate, period);
+ } else if(m_periodGroup->selected() == m_yearlyButton) {
+ budgetAccount.setBudgetLevel(MyMoneyBudget::AccountGroup::eYearly);
+ period.setAmount(m_amountYearly->value());
+ budgetAccount.addPeriod(m_budgetDate, period);
+ } else if(m_periodGroup->selected() == m_individualButton) {
+ budgetAccount.setBudgetLevel(MyMoneyBudget::AccountGroup::eMonthByMonth);
+ date.setYMD(m_budgetDate.year(), 1, 1);
+ for(int i = 0; i < 12; ++i) {
+ period.setStartDate(date);
+ period.setAmount(m_field[i]->value());
+ budgetAccount.addPeriod(date, period);
+ date = date.addMonths(1);
+ }
+ }
+}
+
+void KBudgetValues::slotUpdateClearButton(void)
+{
+ bool rc = false;
+ if(m_periodGroup->selected() == m_monthlyButton) {
+ rc = !m_amountMonthly->value().isZero();
+ } else if(m_periodGroup->selected() == m_yearlyButton) {
+ rc = !m_amountYearly->value().isZero();
+ } else if(m_periodGroup->selected() == m_individualButton) {
+ for(int i = 0; (i < 12) && (rc == false); ++i) {
+ rc |= !m_field[i]->value().isZero();
+ }
+ }
+ m_clearButton->setEnabled(rc);
+}
+
+#include "kbudgetvalues.moc"
diff --git a/kmymoney2/widgets/kbudgetvalues.h b/kmymoney2/widgets/kbudgetvalues.h
new file mode 100644
index 0000000..5b8c2cc
--- /dev/null
+++ b/kmymoney2/widgets/kbudgetvalues.h
@@ -0,0 +1,84 @@
+/***************************************************************************
+ kbudgetvalues - description
+ -------------------
+ begin : Wed Nov 28 2007
+ copyright : (C) 2007 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KBUDGETVALUES_H
+#define KBUDGETVALUES_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qdatetime.h>
+class QLabel;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../widgets/kbudgetvaluesdecl.h"
+#include <kmymoney/mymoneybudget.h>
+class kMyMoneyEdit;
+
+/**
+ * @author Thomas Baumgart <ipwizard@users.sourceforge.net>
+ */
+class KBudgetValues : public KBudgetValuesDecl
+{
+ Q_OBJECT
+ public:
+ KBudgetValues(QWidget* parent = 0, const char* name = 0);
+ ~KBudgetValues();
+
+ void setBudgetValues(const MyMoneyBudget& budget, const MyMoneyBudget::AccountGroup& budgetAccount);
+ void budgetValues(const MyMoneyBudget& budget, MyMoneyBudget::AccountGroup& budgetAccount);
+ void clear(void);
+
+ private:
+ void enableMonths(bool enabled);
+ void fillMonthLabels(void);
+
+ protected slots:
+ void slotChangePeriod(int id);
+
+ /**
+ * This slot clears the value in the value widgets of the selected budget type.
+ * Values of the other types are unaffected.
+ */
+ void slotClearAllValues(void);
+
+ /**
+ * Helper slot used to postpone sending the valuesChanged() signal.
+ */
+ void slotNeedUpdate(void);
+
+ void slotUpdateClearButton(void);
+
+ protected:
+ bool eventFilter(QObject* o, QEvent* e);
+
+ private:
+ kMyMoneyEdit* m_field[12];
+ QLabel* m_label[12];
+ QWidget* m_currentTab;
+ QDate m_budgetDate;
+
+ signals:
+ void valuesChanged(void);
+};
+
+#endif
diff --git a/kmymoney2/widgets/kbudgetvaluesdecl.cpp b/kmymoney2/widgets/kbudgetvaluesdecl.cpp
new file mode 100644
index 0000000..43d71f5
--- /dev/null
+++ b/kmymoney2/widgets/kbudgetvaluesdecl.cpp
@@ -0,0 +1,257 @@
+#include <kdialog.h>
+#include <klocale.h>
+#ifndef KMM_I18N
+#define KMM_I18N
+inline QString kmm_i18n(const char* msg, const char* ctx) { return i18n(ctx, msg); }
+inline QString kmm_i18n(const char* msg) { return i18n(msg); }
+#endif
+/****************************************************************************
+** Form implementation generated from reading ui file '../../../kmymoney2/widgets/kbudgetvaluesdecl.ui'
+**
+** Created: Fri Feb 12 15:05:38 2010
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+
+#include "kbudgetvaluesdecl.h"
+
+#include <qvariant.h>
+#include <kmymoney/kmymoneyedit.h>
+#include <qpushbutton.h>
+#include <qlabel.h>
+#include <qwidgetstack.h>
+#include <kpushbutton.h>
+#include <qbuttongroup.h>
+#include <qradiobutton.h>
+#include <qlayout.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+
+/*
+ * Constructs a KBudgetValuesDecl as a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'.
+ */
+KBudgetValuesDecl::KBudgetValuesDecl( QWidget* parent, const char* name, WFlags fl )
+ : QWidget( parent, name, fl )
+{
+ if ( !name )
+ setName( "KBudgetValuesDecl" );
+ KBudgetValuesDeclLayout = new QGridLayout( this, 1, 1, 0, 6, "KBudgetValuesDeclLayout");
+
+ m_amount10 = new kMyMoneyEdit( this, "m_amount10" );
+ m_amount10->setProperty( "resetButtonVisibility", QVariant( FALSE, 0 ) );
+
+ KBudgetValuesDeclLayout->addWidget( m_amount10, 3, 5 );
+
+ m_amount6 = new kMyMoneyEdit( this, "m_amount6" );
+ m_amount6->setProperty( "resetButtonVisibility", QVariant( FALSE, 0 ) );
+
+ KBudgetValuesDeclLayout->addWidget( m_amount6, 5, 3 );
+
+ m_amount5 = new kMyMoneyEdit( this, "m_amount5" );
+ m_amount5->setProperty( "resetButtonVisibility", QVariant( FALSE, 0 ) );
+
+ KBudgetValuesDeclLayout->addWidget( m_amount5, 4, 3 );
+
+ m_label6 = new QLabel( this, "m_label6" );
+
+ KBudgetValuesDeclLayout->addWidget( m_label6, 5, 2 );
+
+ m_label8 = new QLabel( this, "m_label8" );
+
+ KBudgetValuesDeclLayout->addWidget( m_label8, 1, 4 );
+
+ m_amount9 = new kMyMoneyEdit( this, "m_amount9" );
+ m_amount9->setProperty( "resetButtonVisibility", QVariant( FALSE, 0 ) );
+
+ KBudgetValuesDeclLayout->addWidget( m_amount9, 2, 5 );
+
+ m_amount11 = new kMyMoneyEdit( this, "m_amount11" );
+ m_amount11->setProperty( "resetButtonVisibility", QVariant( FALSE, 0 ) );
+
+ KBudgetValuesDeclLayout->addWidget( m_amount11, 4, 5 );
+
+ m_label12 = new QLabel( this, "m_label12" );
+
+ KBudgetValuesDeclLayout->addWidget( m_label12, 5, 4 );
+
+ m_label10 = new QLabel( this, "m_label10" );
+
+ KBudgetValuesDeclLayout->addWidget( m_label10, 3, 4 );
+
+ m_label7 = new QLabel( this, "m_label7" );
+
+ KBudgetValuesDeclLayout->addWidget( m_label7, 0, 4 );
+
+ m_amount3 = new kMyMoneyEdit( this, "m_amount3" );
+ m_amount3->setProperty( "resetButtonVisibility", QVariant( FALSE, 0 ) );
+
+ KBudgetValuesDeclLayout->addWidget( m_amount3, 2, 3 );
+
+ m_label4 = new QLabel( this, "m_label4" );
+
+ KBudgetValuesDeclLayout->addWidget( m_label4, 3, 2 );
+
+ m_amount12 = new kMyMoneyEdit( this, "m_amount12" );
+ m_amount12->setProperty( "resetButtonVisibility", QVariant( FALSE, 0 ) );
+
+ KBudgetValuesDeclLayout->addWidget( m_amount12, 5, 5 );
+
+ m_label3 = new QLabel( this, "m_label3" );
+
+ KBudgetValuesDeclLayout->addWidget( m_label3, 2, 2 );
+
+ m_label1 = new QLabel( this, "m_label1" );
+
+ KBudgetValuesDeclLayout->addWidget( m_label1, 0, 2 );
+
+ m_label2 = new QLabel( this, "m_label2" );
+
+ KBudgetValuesDeclLayout->addWidget( m_label2, 1, 2 );
+
+ m_label5 = new QLabel( this, "m_label5" );
+
+ KBudgetValuesDeclLayout->addWidget( m_label5, 4, 2 );
+
+ m_label11 = new QLabel( this, "m_label11" );
+
+ KBudgetValuesDeclLayout->addWidget( m_label11, 4, 4 );
+
+ m_amount4 = new kMyMoneyEdit( this, "m_amount4" );
+ m_amount4->setProperty( "resetButtonVisibility", QVariant( FALSE, 0 ) );
+
+ KBudgetValuesDeclLayout->addWidget( m_amount4, 3, 3 );
+
+ m_label9 = new QLabel( this, "m_label9" );
+
+ KBudgetValuesDeclLayout->addWidget( m_label9, 2, 4 );
+
+ m_amount8 = new kMyMoneyEdit( this, "m_amount8" );
+ m_amount8->setProperty( "resetButtonVisibility", QVariant( FALSE, 0 ) );
+
+ KBudgetValuesDeclLayout->addWidget( m_amount8, 1, 5 );
+
+ m_amount2 = new kMyMoneyEdit( this, "m_amount2" );
+ m_amount2->setProperty( "resetButtonVisibility", QVariant( FALSE, 0 ) );
+
+ KBudgetValuesDeclLayout->addWidget( m_amount2, 1, 3 );
+
+ m_amount7 = new kMyMoneyEdit( this, "m_amount7" );
+ m_amount7->setProperty( "resetButtonVisibility", QVariant( FALSE, 0 ) );
+
+ KBudgetValuesDeclLayout->addWidget( m_amount7, 0, 5 );
+
+ m_firstItemStack = new QWidgetStack( this, "m_firstItemStack" );
+
+ m_monthlyPage = new QWidget( m_firstItemStack, "m_monthlyPage" );
+ m_monthlyPageLayout = new QHBoxLayout( m_monthlyPage, 0, 6, "m_monthlyPageLayout");
+
+ m_amountMonthly = new kMyMoneyEdit( m_monthlyPage, "m_amountMonthly" );
+ m_amountMonthly->setProperty( "resetButtonVisibility", QVariant( FALSE, 0 ) );
+ m_monthlyPageLayout->addWidget( m_amountMonthly );
+ m_firstItemStack->addWidget( m_monthlyPage, 0 );
+
+ m_yearlyPage = new QWidget( m_firstItemStack, "m_yearlyPage" );
+ m_yearlyPageLayout = new QHBoxLayout( m_yearlyPage, 0, 6, "m_yearlyPageLayout");
+
+ m_amountYearly = new kMyMoneyEdit( m_yearlyPage, "m_amountYearly" );
+ m_amountYearly->setProperty( "resetButtonVisibility", QVariant( FALSE, 0 ) );
+ m_yearlyPageLayout->addWidget( m_amountYearly );
+ m_firstItemStack->addWidget( m_yearlyPage, 1 );
+
+ m_individualPage = new QWidget( m_firstItemStack, "m_individualPage" );
+ m_individualPageLayout = new QHBoxLayout( m_individualPage, 0, 6, "m_individualPageLayout");
+
+ m_amount1 = new kMyMoneyEdit( m_individualPage, "m_amount1" );
+ m_amount1->setProperty( "resetButtonVisibility", QVariant( FALSE, 0 ) );
+ m_individualPageLayout->addWidget( m_amount1 );
+ m_firstItemStack->addWidget( m_individualPage, 2 );
+
+ KBudgetValuesDeclLayout->addWidget( m_firstItemStack, 0, 3 );
+
+ layout12 = new QVBoxLayout( 0, 0, 6, "layout12");
+
+ m_clearButton = new KPushButton( this, "m_clearButton" );
+ layout12->addWidget( m_clearButton );
+ spacer7 = new QSpacerItem( 20, 21, QSizePolicy::Minimum, QSizePolicy::Expanding );
+ layout12->addItem( spacer7 );
+
+ KBudgetValuesDeclLayout->addMultiCellLayout( layout12, 0, 5, 1, 1 );
+
+ m_periodGroup = new QButtonGroup( this, "m_periodGroup" );
+ m_periodGroup->setColumnLayout(0, Qt::Vertical );
+ m_periodGroup->layout()->setSpacing( 6 );
+ m_periodGroup->layout()->setMargin( 11 );
+ m_periodGroupLayout = new QVBoxLayout( m_periodGroup->layout() );
+ m_periodGroupLayout->setAlignment( Qt::AlignTop );
+
+ m_monthlyButton = new QRadioButton( m_periodGroup, "m_monthlyButton" );
+ m_periodGroupLayout->addWidget( m_monthlyButton );
+
+ m_yearlyButton = new QRadioButton( m_periodGroup, "m_yearlyButton" );
+ m_periodGroupLayout->addWidget( m_yearlyButton );
+
+ m_individualButton = new QRadioButton( m_periodGroup, "m_individualButton" );
+ m_periodGroupLayout->addWidget( m_individualButton );
+ spacer10 = new QSpacerItem( 20, 21, QSizePolicy::Minimum, QSizePolicy::Expanding );
+ m_periodGroupLayout->addItem( spacer10 );
+
+ KBudgetValuesDeclLayout->addMultiCellWidget( m_periodGroup, 0, 5, 0, 0 );
+ languageChange();
+ resize( QSize(553, 188).expandedTo(minimumSizeHint()) );
+ clearWState( WState_Polished );
+
+ // tab order
+ setTabOrder( m_monthlyButton, m_yearlyButton );
+ setTabOrder( m_yearlyButton, m_individualButton );
+ setTabOrder( m_individualButton, m_clearButton );
+ setTabOrder( m_clearButton, m_amount1 );
+ setTabOrder( m_amount1, m_amountMonthly );
+ setTabOrder( m_amountMonthly, m_amountYearly );
+ setTabOrder( m_amountYearly, m_amount2 );
+ setTabOrder( m_amount2, m_amount3 );
+ setTabOrder( m_amount3, m_amount4 );
+ setTabOrder( m_amount4, m_amount5 );
+ setTabOrder( m_amount5, m_amount6 );
+ setTabOrder( m_amount6, m_amount7 );
+ setTabOrder( m_amount7, m_amount8 );
+ setTabOrder( m_amount8, m_amount9 );
+ setTabOrder( m_amount9, m_amount10 );
+ setTabOrder( m_amount10, m_amount11 );
+ setTabOrder( m_amount11, m_amount12 );
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+KBudgetValuesDecl::~KBudgetValuesDecl()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+/*
+ * Sets the strings of the subwidgets using the current
+ * language.
+ */
+void KBudgetValuesDecl::languageChange()
+{
+ m_label6->setText( kmm_i18n( "xxx" ) );
+ m_label8->setText( kmm_i18n( "xxx" ) );
+ m_label12->setText( kmm_i18n( "xxx" ) );
+ m_label10->setText( kmm_i18n( "xxx" ) );
+ m_label7->setText( kmm_i18n( "xxx" ) );
+ m_label4->setText( kmm_i18n( "xxx" ) );
+ m_label3->setText( kmm_i18n( "xxx" ) );
+ m_label1->setText( kmm_i18n( "xxx" ) );
+ m_label2->setText( kmm_i18n( "xxx" ) );
+ m_label5->setText( kmm_i18n( "xxx" ) );
+ m_label11->setText( kmm_i18n( "xxx" ) );
+ m_label9->setText( kmm_i18n( "xxx" ) );
+ m_clearButton->setText( QString::null );
+ m_periodGroup->setTitle( kmm_i18n( "Period" ) );
+ m_monthlyButton->setText( kmm_i18n( "Monthly" ) );
+ m_yearlyButton->setText( kmm_i18n( "Yearly" ) );
+ m_individualButton->setText( kmm_i18n( "Individual" ) );
+}
+
+#include "kbudgetvaluesdecl.moc"
diff --git a/kmymoney2/widgets/kbudgetvaluesdecl.ui b/kmymoney2/widgets/kbudgetvaluesdecl.ui
new file mode 100644
index 0000000..6870d64
--- /dev/null
+++ b/kmymoney2/widgets/kbudgetvaluesdecl.ui
@@ -0,0 +1,400 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KBudgetValuesDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KBudgetValuesDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>553</width>
+ <height>188</height>
+ </rect>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="kMyMoneyEdit" row="3" column="5">
+ <property name="name">
+ <cstring>m_amount10</cstring>
+ </property>
+ <property name="resetButtonVisibility" stdset="0">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="5" column="3">
+ <property name="name">
+ <cstring>m_amount6</cstring>
+ </property>
+ <property name="resetButtonVisibility" stdset="0">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="4" column="3">
+ <property name="name">
+ <cstring>m_amount5</cstring>
+ </property>
+ <property name="resetButtonVisibility" stdset="0">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="2">
+ <property name="name">
+ <cstring>m_label6</cstring>
+ </property>
+ <property name="text">
+ <string>xxx</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="4">
+ <property name="name">
+ <cstring>m_label8</cstring>
+ </property>
+ <property name="text">
+ <string>xxx</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="2" column="5">
+ <property name="name">
+ <cstring>m_amount9</cstring>
+ </property>
+ <property name="resetButtonVisibility" stdset="0">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="4" column="5">
+ <property name="name">
+ <cstring>m_amount11</cstring>
+ </property>
+ <property name="resetButtonVisibility" stdset="0">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="4">
+ <property name="name">
+ <cstring>m_label12</cstring>
+ </property>
+ <property name="text">
+ <string>xxx</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="4">
+ <property name="name">
+ <cstring>m_label10</cstring>
+ </property>
+ <property name="text">
+ <string>xxx</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="4">
+ <property name="name">
+ <cstring>m_label7</cstring>
+ </property>
+ <property name="text">
+ <string>xxx</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="2" column="3">
+ <property name="name">
+ <cstring>m_amount3</cstring>
+ </property>
+ <property name="resetButtonVisibility" stdset="0">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="2">
+ <property name="name">
+ <cstring>m_label4</cstring>
+ </property>
+ <property name="text">
+ <string>xxx</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="5" column="5">
+ <property name="name">
+ <cstring>m_amount12</cstring>
+ </property>
+ <property name="resetButtonVisibility" stdset="0">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="2">
+ <property name="name">
+ <cstring>m_label3</cstring>
+ </property>
+ <property name="text">
+ <string>xxx</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="2">
+ <property name="name">
+ <cstring>m_label1</cstring>
+ </property>
+ <property name="text">
+ <string>xxx</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="2">
+ <property name="name">
+ <cstring>m_label2</cstring>
+ </property>
+ <property name="text">
+ <string>xxx</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="2">
+ <property name="name">
+ <cstring>m_label5</cstring>
+ </property>
+ <property name="text">
+ <string>xxx</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="4">
+ <property name="name">
+ <cstring>m_label11</cstring>
+ </property>
+ <property name="text">
+ <string>xxx</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="3" column="3">
+ <property name="name">
+ <cstring>m_amount4</cstring>
+ </property>
+ <property name="resetButtonVisibility" stdset="0">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="4">
+ <property name="name">
+ <cstring>m_label9</cstring>
+ </property>
+ <property name="text">
+ <string>xxx</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="1" column="5">
+ <property name="name">
+ <cstring>m_amount8</cstring>
+ </property>
+ <property name="resetButtonVisibility" stdset="0">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="1" column="3">
+ <property name="name">
+ <cstring>m_amount2</cstring>
+ </property>
+ <property name="resetButtonVisibility" stdset="0">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="0" column="5">
+ <property name="name">
+ <cstring>m_amount7</cstring>
+ </property>
+ <property name="resetButtonVisibility" stdset="0">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QWidgetStack" row="0" column="3">
+ <property name="name">
+ <cstring>m_firstItemStack</cstring>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_monthlyPage</cstring>
+ </property>
+ <attribute name="id">
+ <number>0</number>
+ </attribute>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="kMyMoneyEdit">
+ <property name="name">
+ <cstring>m_amountMonthly</cstring>
+ </property>
+ <property name="resetButtonVisibility" stdset="0">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_yearlyPage</cstring>
+ </property>
+ <attribute name="id">
+ <number>1</number>
+ </attribute>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="kMyMoneyEdit">
+ <property name="name">
+ <cstring>m_amountYearly</cstring>
+ </property>
+ <property name="resetButtonVisibility" stdset="0">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>m_individualPage</cstring>
+ </property>
+ <attribute name="id">
+ <number>2</number>
+ </attribute>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="kMyMoneyEdit">
+ <property name="name">
+ <cstring>m_amount1</cstring>
+ </property>
+ <property name="resetButtonVisibility" stdset="0">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="1" rowspan="6" colspan="1">
+ <property name="name">
+ <cstring>layout12</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_clearButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer7</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QButtonGroup" row="0" column="0" rowspan="6" colspan="1">
+ <property name="name">
+ <cstring>m_periodGroup</cstring>
+ </property>
+ <property name="title">
+ <string>Period</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_monthlyButton</cstring>
+ </property>
+ <property name="text">
+ <string>Monthly</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_yearlyButton</cstring>
+ </property>
+ <property name="text">
+ <string>Yearly</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>m_individualButton</cstring>
+ </property>
+ <property name="text">
+ <string>Individual</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer10</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </grid>
+</widget>
+<customwidgets>
+</customwidgets>
+<tabstops>
+ <tabstop>m_monthlyButton</tabstop>
+ <tabstop>m_yearlyButton</tabstop>
+ <tabstop>m_individualButton</tabstop>
+ <tabstop>m_clearButton</tabstop>
+ <tabstop>m_amount1</tabstop>
+ <tabstop>m_amountMonthly</tabstop>
+ <tabstop>m_amountYearly</tabstop>
+ <tabstop>m_amount2</tabstop>
+ <tabstop>m_amount3</tabstop>
+ <tabstop>m_amount4</tabstop>
+ <tabstop>m_amount5</tabstop>
+ <tabstop>m_amount6</tabstop>
+ <tabstop>m_amount7</tabstop>
+ <tabstop>m_amount8</tabstop>
+ <tabstop>m_amount9</tabstop>
+ <tabstop>m_amount10</tabstop>
+ <tabstop>m_amount11</tabstop>
+ <tabstop>m_amount12</tabstop>
+</tabstops>
+<includes>
+ <include location="global" impldecl="in implementation">kmymoney/kmymoneyedit.h</include>
+</includes>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/widgets/kguiutils.cpp b/kmymoney2/widgets/kguiutils.cpp
new file mode 100644
index 0000000..c6157f9
--- /dev/null
+++ b/kmymoney2/widgets/kguiutils.cpp
@@ -0,0 +1,178 @@
+/***************************************************************************
+ kguiutils.cpp - description
+ -------------------
+ begin : Fri Jan 27 2006
+ copyright : (C) 2006 Tony Bloomfield
+ email : Tony Bloomfield <tonybloom@users.sourceforge.net>
+***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+ // No need for QDateEdit, QSpinBox, etc., since these always return values
+
+#include <qcheckbox.h>
+#include <qlistbox.h>
+#include <qcombobox.h>
+#include <qlineedit.h>
+#include <qpushbutton.h>
+#include <qwidget.h>
+#include <qhbox.h>
+#include <qspinbox.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kguiutils.h"
+#include "../kmymoneyglobalsettings.h"
+
+ /**************************************************************************
+ * *
+ * The MandatoryFieldGroup code is courtesy of *
+ * Mark Summerfield in Qt Quarterly *
+ * http://doc.trolltech.com/qq/qq11-mandatoryfields.html *
+ * *
+ * Enhanced by Thomas Baumgart to support the lineedit field of a *
+ * a QComboBox. *
+ * *
+ **************************************************************************/
+
+void kMandatoryFieldGroup::add(QWidget *widget)
+{
+ if (!widgets.contains(widget)) {
+ if (widget->inherits("QCheckBox"))
+ connect((QCheckBox*)widget->qt_cast("QCheckBox"),
+ SIGNAL(clicked()),
+ this, SLOT(changed()));
+
+ else if (widget->inherits("QComboBox")) {
+ QComboBox* combo = (QComboBox*)widget->qt_cast("QComboBox");
+ QLineEdit* lineedit = combo->lineEdit();
+ if(lineedit) {
+ connect(lineedit, SIGNAL(textChanged(const QString&)), this, SLOT(changed()));
+ } else {
+ connect(combo, SIGNAL(highlighted(int)), this, SLOT(changed()));
+ }
+ }
+
+ else if (widget->inherits("QLineEdit"))
+ connect((QLineEdit*)widget->qt_cast("QLineEdit"),
+ SIGNAL(textChanged(const QString&)),
+ this, SLOT(changed()));
+
+ else if (widget->inherits("QSpinBox"))
+ connect((QSpinBox*)widget->qt_cast("QSpinBox"),
+ SIGNAL(valueChanged(const QString&)),
+ this, SLOT(changed()));
+
+ else if (widget->inherits("QListBox"))
+ connect((QListBox*)widget->qt_cast("QListBox"),
+ SIGNAL(selectionChanged()),
+ this, SLOT(changed()));
+
+ else {
+ qWarning("MandatoryFieldGroup: unsupported class %s",
+ widget->className());
+ return;
+ }
+
+ widget->setPaletteBackgroundColor(KMyMoneyGlobalSettings::requiredFieldColor());
+ widgets.append(widget);
+ changed();
+ }
+}
+
+
+void kMandatoryFieldGroup::remove(QWidget *widget)
+{
+ widget->setPaletteBackgroundColor(widget->colorGroup().background());
+ widgets.remove(widget);
+ changed();
+}
+
+
+void kMandatoryFieldGroup::setOkButton(QPushButton *button)
+{
+ if (okButton && okButton != button)
+ okButton->setEnabled(true);
+ okButton = button;
+ changed();
+}
+
+
+void kMandatoryFieldGroup::changed(void)
+{
+ bool enable = true;
+ QValueList<QWidget *>::ConstIterator i;
+ for (i = widgets.begin(); i != widgets.end(); ++i) {
+ QWidget *widget = *i;
+ // disabled widgets don't count
+ if(!(widget->isEnabled())) {
+ continue;
+ }
+ if (widget->inherits("QCheckBox")) {
+ if (((QCheckBox*)widget->qt_cast("QCheckBox"))->state() == QButton::NoChange) {
+ enable = false;
+ break;
+ } else
+ continue;
+ }
+ if (widget->inherits("QComboBox")) {
+ if (((QComboBox*)widget->qt_cast("QComboBox"))->currentText().isEmpty()) {
+ enable = false;
+ break;
+ } else
+ continue;
+ }
+ if (widget->inherits("QLineEdit")) {
+ if (((QLineEdit*)widget->qt_cast("QLineEdit"))->text().isEmpty()) {
+ enable = false;
+ break;
+ } else
+ continue;
+ }
+ if (widget->inherits("QListBox")) {
+ if (((QListBox*)widget->qt_cast("QListBox"))->selectedItem() == 0) {
+ enable = false;
+ break;
+ } else
+ continue;
+ }
+ }
+
+ if (okButton)
+ okButton->setEnabled(enable);
+ m_enabled = enable;
+
+ emit stateChanged();
+ emit stateChanged(enable);
+}
+
+
+void kMandatoryFieldGroup::clear(void)
+{
+ QValueList<QWidget *>::Iterator i;
+ for (i = widgets.begin(); i != widgets.end(); ++i)
+ (*i)->setPaletteBackgroundColor((*i)->colorGroup().background());
+ widgets.clear();
+ if (okButton) {
+ okButton->setEnabled(true);
+ okButton = 0;
+ m_enabled = true;
+ }
+}
+
+
+#include "kguiutils.moc"
+
diff --git a/kmymoney2/widgets/kguiutils.h b/kmymoney2/widgets/kguiutils.h
new file mode 100644
index 0000000..9a7b603
--- /dev/null
+++ b/kmymoney2/widgets/kguiutils.h
@@ -0,0 +1,94 @@
+/***************************************************************************
+ kguiutils.h - description
+ -------------------
+ begin : Fri Jan 27 2006
+ copyright : (C) 2006 Tony Bloomfield
+ email : Tony Bloomfield <tonybloom@users.sourceforge.net>
+***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KGUIUTILS_H
+#define KGUIUTILS_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qobject.h>
+#include <qvaluelist.h>
+class QWidget;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kpushbutton.h>
+#include <kcombobox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+/**
+ * @author Tony Bloomfield
+ */
+class kMandatoryFieldGroup : public QObject
+{
+ Q_OBJECT
+
+public:
+ kMandatoryFieldGroup(QObject *parent) :
+ QObject(parent), okButton(0), m_enabled(true) {}
+
+ /**
+ * This method adds a widget to the list of mandatory fields for the current dialog
+ *
+ * @param widget pointer to the widget to be added
+ */
+ void add(QWidget *widget);
+
+ /**
+ * This method removes a widget form the list of mandatory fields for the current dialog
+ *
+ * @param widget pointer to the widget to be removed
+ */
+ void remove(QWidget *widget);
+
+ /**
+ * This method designates the button to be enabled when all mandatory fields
+ * have been completed
+ *
+ * @param button pointer to the 'ok' button
+ */
+ void setOkButton(QPushButton *button);
+
+ /**
+ * This method returns if all requirements for the mandatory group
+ * have been fulfilled (@p true) or not (@p false).
+ */
+ bool isEnabled(void) const { return m_enabled; }
+
+public slots:
+ void clear(void);
+
+ /**
+ * Force update of ok button
+ */
+ void changed(void);
+
+signals:
+ void stateChanged(void);
+ void stateChanged(bool state);
+
+private:
+ QValueList<QWidget *> widgets;
+ QPushButton* okButton;
+ bool m_enabled;
+};
+
+#endif // KGUIUTILS_H
diff --git a/kmymoney2/widgets/klistviewsearchline.cpp b/kmymoney2/widgets/klistviewsearchline.cpp
new file mode 100644
index 0000000..5aba160
--- /dev/null
+++ b/kmymoney2/widgets/klistviewsearchline.cpp
@@ -0,0 +1,507 @@
+/* This file is part of the KDE libraries
+ Copyright (c) 2003 Scott Wheeler <wheeler@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "klistviewsearchline.h"
+
+#include <klistview.h>
+#include <kiconloader.h>
+#include <ktoolbar.h>
+#include <ktoolbarbutton.h>
+#include <kdebug.h>
+#include <klocale.h>
+
+#include <qapplication.h>
+#include <qtimer.h>
+#include <qpopupmenu.h>
+#include <qlabel.h>
+#include <qheader.h>
+
+#define KLISTVIEWSEARCHLINE_ALLVISIBLECOLUMNS_ID 2004
+
+class KListViewSearchLine::KListViewSearchLinePrivate
+{
+public:
+ KListViewSearchLinePrivate() :
+ listView(0),
+ caseSensitive(false),
+ activeSearch(false),
+ keepParentsVisible(true),
+ queuedSearches(0) {}
+
+ KListView *listView;
+ bool caseSensitive;
+ bool activeSearch;
+ bool keepParentsVisible;
+ QString search;
+ int queuedSearches;
+ QValueList<int> searchColumns;
+};
+
+////////////////////////////////////////////////////////////////////////////////
+// public methods
+////////////////////////////////////////////////////////////////////////////////
+
+KListViewSearchLine::KListViewSearchLine(QWidget *parent, KListView *listView, const char *name) :
+ KLineEdit(parent, name)
+{
+ d = new KListViewSearchLinePrivate;
+
+ d->listView = listView;
+
+ connect(this, SIGNAL(textChanged(const QString &)),
+ this, SLOT(queueSearch(const QString &)));
+
+ if(listView) {
+ connect(listView, SIGNAL(destroyed()),
+ this, SLOT(listViewDeleted()));
+
+#if KDE_IS_VERSION(3,3,0)
+ connect(listView, SIGNAL(itemAdded(QListViewItem *)),
+ this, SLOT(itemAdded(QListViewItem *)));
+#endif
+ }
+ else
+ setEnabled(false);
+}
+
+KListViewSearchLine::KListViewSearchLine(QWidget *parent, const char *name) :
+ KLineEdit(parent, name)
+{
+ d = new KListViewSearchLinePrivate;
+
+ d->listView = 0;
+
+ connect(this, SIGNAL(textChanged(const QString &)),
+ this, SLOT(queueSearch(const QString &)));
+
+ setEnabled(false);
+}
+
+KListViewSearchLine::~KListViewSearchLine()
+{
+ delete d;
+}
+
+bool KListViewSearchLine::caseSensitive() const
+{
+ return d->caseSensitive;
+}
+
+QValueList<int> KListViewSearchLine::searchColumns() const
+{
+ return d->searchColumns;
+}
+
+bool KListViewSearchLine::keepParentsVisible() const
+{
+ return d->keepParentsVisible;
+}
+
+KListView *KListViewSearchLine::listView() const
+{
+ return d->listView;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// public slots
+////////////////////////////////////////////////////////////////////////////////
+
+void KListViewSearchLine::updateSearch(const QString &s)
+{
+ if(!d->listView)
+ return;
+
+ d->search = s.isNull() ? text() : s;
+
+ // If there's a selected item that is visible, make sure that it's visible
+ // when the search changes too (assuming that it still matches).
+
+ QListViewItem *currentItem = 0;
+
+ switch(d->listView->selectionMode())
+ {
+ case KListView::NoSelection:
+ break;
+ case KListView::Single:
+ currentItem = d->listView->selectedItem();
+ break;
+ default:
+ {
+ int flags = QListViewItemIterator::Selected | QListViewItemIterator::Visible;
+ for(QListViewItemIterator it(d->listView, flags);
+ it.current() && !currentItem;
+ ++it)
+ {
+ if(d->listView->itemRect(it.current()).isValid())
+ currentItem = it.current();
+ }
+ }
+ }
+
+ if(d->keepParentsVisible)
+ checkItemParentsVisible(d->listView->firstChild());
+ else
+ checkItemParentsNotVisible();
+
+ if(currentItem)
+ d->listView->ensureItemVisible(currentItem);
+}
+
+void KListViewSearchLine::setCaseSensitive(bool cs)
+{
+ d->caseSensitive = cs;
+}
+
+void KListViewSearchLine::setKeepParentsVisible(bool v)
+{
+ d->keepParentsVisible = v;
+}
+
+void KListViewSearchLine::setSearchColumns(const QValueList<int> &columns)
+{
+ d->searchColumns = columns;
+}
+
+void KListViewSearchLine::setListView(KListView *lv)
+{
+ if(d->listView) {
+ disconnect(d->listView, SIGNAL(destroyed()),
+ this, SLOT(listViewDeleted()));
+
+#if KDE_IS_VERSION(3,3,0)
+ disconnect(d->listView, SIGNAL(itemAdded(QListViewItem *)),
+ this, SLOT(itemAdded(QListViewItem *)));
+#endif
+ }
+
+ d->listView = lv;
+
+ if(lv) {
+ connect(d->listView, SIGNAL(destroyed()),
+ this, SLOT(listViewDeleted()));
+
+#if KDE_IS_VERSION(3,3,0)
+ connect(d->listView, SIGNAL(itemAdded(QListViewItem *)),
+ this, SLOT(itemAdded(QListViewItem *)));
+#endif
+ }
+
+ setEnabled(bool(lv));
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// protected members
+////////////////////////////////////////////////////////////////////////////////
+
+bool KListViewSearchLine::itemMatches(const QListViewItem *item, const QString &s) const
+{
+ if(s.isEmpty())
+ return true;
+
+ // If the search column list is populated, search just the columns
+ // specifified. If it is empty default to searching all of the columns.
+
+ if(!d->searchColumns.isEmpty()) {
+ QValueList<int>::ConstIterator it = d->searchColumns.begin();
+ for(; it != d->searchColumns.end(); ++it) {
+ if(*it < item->listView()->columns() &&
+ item->text(*it).find(s, 0, d->caseSensitive) >= 0)
+ return true;
+ }
+ }
+ else {
+ for(int i = 0; i < item->listView()->columns(); i++) {
+ if(item->listView()->columnWidth(i) > 0 &&
+ item->text(i).find(s, 0, d->caseSensitive) >= 0)
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+QPopupMenu *KListViewSearchLine::createPopupMenu()
+{
+ QPopupMenu *popup = KLineEdit::createPopupMenu();
+
+ if (d->listView->columns()>1) {
+ QPopupMenu *subMenu = new QPopupMenu(popup);
+ connect(subMenu, SIGNAL(activated(int)), this, SLOT(searchColumnsMenuActivated(int)));
+
+ popup->insertSeparator();
+ popup->insertItem(i18n("Search Columns"), subMenu);
+
+ subMenu->insertItem(i18n("All Visible Columns"), KLISTVIEWSEARCHLINE_ALLVISIBLECOLUMNS_ID);
+ subMenu->insertSeparator();
+
+ bool allColumnsAreSearchColumns = true;
+ // TODO Make the entry order match the actual column order
+ QHeader* const header = d->listView->header();
+ int visibleColumns = 0;
+ for(int i = 0; i < d->listView->columns(); i++) {
+ if(d->listView->columnWidth(i)>0) {
+ QString columnText = d->listView->columnText(i);
+ if(columnText.isEmpty()) {
+ int visiblePosition=1;
+ for(int j = 0; j < header->mapToIndex(i); j++)
+ if(d->listView->columnWidth(header->mapToSection(j))>0)
+ visiblePosition++;
+ columnText = i18n("Column number %1","Column No. %1").arg(visiblePosition);
+ }
+ subMenu->insertItem(columnText, visibleColumns);
+ if(d->searchColumns.isEmpty() || d->searchColumns.find(i) != d->searchColumns.end())
+ subMenu->setItemChecked(visibleColumns, true);
+ else
+ allColumnsAreSearchColumns = false;
+ visibleColumns++;
+ }
+ }
+ subMenu->setItemChecked(KLISTVIEWSEARCHLINE_ALLVISIBLECOLUMNS_ID, allColumnsAreSearchColumns);
+
+ // searchColumnsMenuActivated() relies on one possible "all" representation
+ if(allColumnsAreSearchColumns && !d->searchColumns.isEmpty())
+ d->searchColumns.clear();
+ }
+
+ return popup;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// protected slots
+////////////////////////////////////////////////////////////////////////////////
+
+void KListViewSearchLine::queueSearch(const QString &search)
+{
+ d->queuedSearches++;
+ d->search = search;
+ QTimer::singleShot(200, this, SLOT(activateSearch()));
+}
+
+void KListViewSearchLine::activateSearch()
+{
+ --(d->queuedSearches);
+
+ if(d->queuedSearches == 0)
+ updateSearch(d->search);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// private slots
+////////////////////////////////////////////////////////////////////////////////
+
+void KListViewSearchLine::itemAdded(QListViewItem *item) const
+{
+ item->setVisible(itemMatches(item, text()));
+}
+
+void KListViewSearchLine::listViewDeleted()
+{
+ d->listView = 0;
+ setEnabled(false);
+}
+
+void KListViewSearchLine::searchColumnsMenuActivated(int id)
+{
+ if(id == KLISTVIEWSEARCHLINE_ALLVISIBLECOLUMNS_ID) {
+ if(d->searchColumns.isEmpty())
+ d->searchColumns.append(0);
+ else
+ d->searchColumns.clear();
+ }
+ else {
+ if(d->searchColumns.find(id) != d->searchColumns.end())
+ d->searchColumns.remove(id);
+ else {
+ if(d->searchColumns.isEmpty()) {
+ for(int i = 0; i < d->listView->columns(); i++) {
+ if(i != id)
+ d->searchColumns.append(i);
+ }
+ }
+ else
+ d->searchColumns.append(id);
+ }
+ }
+ updateSearch();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// private methods
+////////////////////////////////////////////////////////////////////////////////
+
+void KListViewSearchLine::checkItemParentsNotVisible()
+{
+ QListViewItemIterator it(d->listView);
+ for(; it.current(); ++it)
+ {
+ QListViewItem *item = it.current();
+ if(itemMatches(item, d->search))
+ item->setVisible(true);
+ else
+ item->setVisible(false);
+ }
+}
+
+#include <kdebug.h>
+
+/** Check whether \p item, its siblings and their descendents should be shown. Show or hide the items as necessary.
+ *
+ * \p item The list view item to start showing / hiding items at. Typically, this is the first child of another item, or the
+ * the first child of the list view.
+ * \p highestHiddenParent The highest (closest to root) ancestor of \p item which is hidden. If 0, all parents of
+ * \p item must be visible.
+ * \return \c true if an item which should be visible is found, \c false if all items found should be hidden. If this function
+ * returns true and \p highestHiddenParent was not 0, highestHiddenParent will have been shown.
+ */
+bool KListViewSearchLine::checkItemParentsVisible(QListViewItem *item, QListViewItem *highestHiddenParent)
+{
+ bool visible = false;
+ QListViewItem * first = item;
+ for(; item; item = item->nextSibling())
+ {
+ //What we pass to our children as highestHiddenParent:
+ QListViewItem * hhp = highestHiddenParent ? highestHiddenParent : item->isVisible() ? 0L : item;
+ bool childMatch = false;
+ if(item->firstChild() && checkItemParentsVisible(item->firstChild(), hhp))
+ childMatch = true;
+ // Should this item be shown? It should if any children should be, or if it matches.
+ if(childMatch || itemMatches(item, d->search))
+ {
+ visible = true;
+ if (highestHiddenParent)
+ {
+ highestHiddenParent->setVisible(true);
+ // Calling setVisible on our ancestor will unhide all its descendents. Hide the ones
+ // before us that should not be shown.
+ for(QListViewItem *hide = first; hide != item; hide = hide->nextSibling())
+ hide->setVisible(false);
+ highestHiddenParent = 0;
+ // If we matched, than none of our children matched, yet the setVisible() call on our
+ // ancestor unhid them, undo the damage:
+ if(!childMatch)
+ for(QListViewItem *hide = item->firstChild(); hide; hide = hide->nextSibling())
+ hide->setVisible(false);
+ }
+ else
+ item->setVisible(true);
+ }
+ else
+ item->setVisible(false);
+ }
+ return visible;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// KListViewSearchLineWidget
+////////////////////////////////////////////////////////////////////////////////
+
+class KListViewSearchLineWidget::KListViewSearchLineWidgetPrivate
+{
+public:
+ KListViewSearchLineWidgetPrivate() : listView(0), searchLine(0), clearButton(0) {}
+ KListView *listView;
+ KListViewSearchLine *searchLine;
+ QToolButton *clearButton;
+};
+
+KListViewSearchLineWidget::KListViewSearchLineWidget(KListView *listView,
+ QWidget *parent,
+ const char *name) :
+ QHBox(parent, name)
+{
+ d = new KListViewSearchLineWidgetPrivate;
+ d->listView = listView;
+
+ setSpacing(5);
+
+ QTimer::singleShot(0, this, SLOT(createWidgets()));
+}
+
+KListViewSearchLineWidget::~KListViewSearchLineWidget()
+{
+ delete d;
+}
+
+KListViewSearchLine *KListViewSearchLineWidget::createSearchLine(KListView *listView)
+{
+ if(!d->searchLine)
+ d->searchLine = new KListViewSearchLine(this, listView);
+ return d->searchLine;
+}
+
+void KListViewSearchLineWidget::createWidgets()
+{
+ positionInToolBar();
+
+ if(!d->clearButton) {
+ d->clearButton = new QToolButton(this);
+ QIconSet icon = SmallIconSet(QApplication::reverseLayout() ? "clear_left" : "locationbar_erase");
+ d->clearButton->setIconSet(icon);
+ }
+
+ d->clearButton->show();
+
+ QLabel *label = new QLabel(i18n("S&earch:"), this, "kde toolbar widget");
+
+ d->searchLine = createSearchLine(d->listView);
+ d->searchLine->show();
+
+ label->setBuddy(d->searchLine);
+ label->show();
+
+ connect(d->clearButton, SIGNAL(clicked()), d->searchLine, SLOT(clear()));
+}
+
+KListViewSearchLine *KListViewSearchLineWidget::searchLine() const
+{
+ return d->searchLine;
+}
+
+void KListViewSearchLineWidget::positionInToolBar()
+{
+ KToolBar *toolBar = dynamic_cast<KToolBar *>(parent());
+
+ if(toolBar) {
+
+ // Here we have The Big Ugly. Figure out how many widgets are in the
+ // and do a hack-ish iteration over them to find this widget so that we
+ // can insert the clear button before it.
+
+ int widgetCount = toolBar->count();
+
+ for(int index = 0; index < widgetCount; index++) {
+ int id = toolBar->idAt(index);
+ if(toolBar->getWidget(id) == this) {
+ toolBar->setItemAutoSized(id);
+ if(!d->clearButton) {
+ QString icon = QApplication::reverseLayout() ? "clear_left" : "locationbar_erase";
+ d->clearButton = new KToolBarButton(icon, 2005, toolBar);
+ }
+ toolBar->insertWidget(2005, d->clearButton->width(), d->clearButton, index);
+ break;
+ }
+ }
+ }
+
+ if(d->searchLine)
+ d->searchLine->show();
+}
+
+#include "klistviewsearchline.moc"
diff --git a/kmymoney2/widgets/klistviewsearchline.h b/kmymoney2/widgets/klistviewsearchline.h
new file mode 100644
index 0000000..041687e
--- /dev/null
+++ b/kmymoney2/widgets/klistviewsearchline.h
@@ -0,0 +1,258 @@
+/* This file is part of the KDE libraries
+ Copyright (c) 2003 Scott Wheeler <wheeler@kde.org>
+ Adapted to be used with KMyMoney under KDE 3.2 .. 3.4
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KLISTVIEWSEARCHLINE_H
+#define KLISTVIEWSEARCHLINE_H
+
+#include <klineedit.h>
+#include <qhbox.h>
+#include <kmymoney/export.h>
+
+class KListView;
+class QListViewItem;
+class QToolButton;
+
+/**
+ * This class makes it easy to add a search line for filtering the items in a
+ * listview based on a simple text search.
+ *
+ * No changes to the application other than instantiating this class with an
+ * appropriate KListView should be needed.
+ *
+ * @since 3.3
+ */
+
+class KMYMONEY_EXPORT KListViewSearchLine : public KLineEdit
+{
+ Q_OBJECT
+
+public:
+
+ /**
+ * Constructs a KListViewSearchLine with \a listView being the KListView to
+ * be filtered.
+ *
+ * If \a listView is null then the widget will be disabled until a listview
+ * is set with setListView().
+ */
+ KListViewSearchLine(QWidget *parent = 0, KListView *listView = 0, const char *name = 0);
+
+ /**
+ * Constructs a KListViewSearchLine without any KListView to filter. The
+ * KListView object has to be set later with setListView().
+ */
+ KListViewSearchLine(QWidget *parent, const char *name);
+
+ /**
+ * Destroys the KListViewSearchLine.
+ */
+ virtual ~KListViewSearchLine();
+
+ /**
+ * Returns true if the search is case sensitive. This defaults to false.
+ *
+ * @see setCaseSensitive()
+ */
+ bool caseSensitive() const;
+
+ /**
+ * Returns the current list of columns that will be searched. If the
+ * returned list is empty all visible columns will be searched.
+ *
+ * @see setSearchColumns
+ */
+ QValueList<int> searchColumns() const;
+
+ /**
+ * If this is true (the default) then the parents of matched items will also
+ * be shown.
+ *
+ * @see setKeepParentsVisible()
+ */
+ bool keepParentsVisible() const;
+
+ /**
+ * Returns the listview that is currently filtered by the search.
+ *
+ * @see setListView()
+ */
+ KListView *listView() const;
+
+public slots:
+ /**
+ * Updates search to only make visible the items that match \a s. If
+ * \a s is null then the line edit's text will be used.
+ */
+ virtual void updateSearch(const QString &s = QString::null);
+
+ /**
+ * Make the search case sensitive or case insensitive.
+ *
+ * @see caseSenstive()
+ */
+ void setCaseSensitive(bool cs);
+
+ /**
+ * When a search is active on a list that's organized into a tree view if
+ * a parent or ancesestor of an item is does not match the search then it
+ * will be hidden and as such so too will any children that match.
+ *
+ * If this is set to true (the default) then the parents of matching items
+ * will be shown.
+ *
+ * @see keepParentsVisible
+ */
+ void setKeepParentsVisible(bool v);
+
+ /**
+ * Sets the list of columns to be searched. The default is to search all,
+ * visible columns which can be restored by passing \a columns as an empty
+ * list.
+ *
+ * @see searchColumns
+ */
+ void setSearchColumns(const QValueList<int> &columns);
+
+ /**
+ * Sets the KListView that is filtered by this search line. If \a lv is null
+ * then the widget will be disabled.
+ *
+ * @see listView()
+ */
+ void setListView(KListView *lv);
+
+protected:
+
+ /**
+ * Returns true if \a item matches the search \a s. This will be evaluated
+ * based on the value of caseSensitive(). This can be overridden in
+ * subclasses to implement more complicated matching schemes.
+ */
+ virtual bool itemMatches(const QListViewItem *item, const QString &s) const;
+
+ /**
+ * Re-implemented for internal reasons. API not affected.
+ *
+ * See QLineEdit::mousePressEvent().
+ */
+ virtual QPopupMenu *createPopupMenu();
+
+protected slots:
+ /**
+ * When keys are pressed a new search string is created and a timer is
+ * activated. The most recent search is activated when this timer runs out
+ * if another key has not yet been pressed.
+ *
+ * This method makes @param search the most recent search and starts the
+ * timer.
+ *
+ * Together with activateSearch() this makes it such that searches are not
+ * started until there is a short break in the users typing.
+ *
+ * @see activateSearch()
+ */
+ void queueSearch(const QString &search);
+
+ /**
+ * When the timer started with queueSearch() expires this slot is called.
+ * If there has been another timer started then this slot does nothing.
+ * However if there are no other pending searches this starts the list view
+ * search.
+ *
+ * @see queueSearch()
+ */
+ void activateSearch();
+
+private:
+
+ /**
+ * This is used in case parent items of matching items shouldn't be
+ * visible. It hides all items that don't match the search string.
+ */
+ void checkItemParentsNotVisible();
+
+ /**
+ * This is used in case parent items of matching items should be visible.
+ * It makes a recursive call to all children. It returns true if at least
+ * one item in the subtree with the given root item is visible.
+ */
+ bool checkItemParentsVisible(QListViewItem *item, QListViewItem *highestHiddenParent = 0);
+
+private slots:
+ void itemAdded(QListViewItem *item) const;
+ void listViewDeleted();
+ void searchColumnsMenuActivated(int);
+
+private:
+ class KListViewSearchLinePrivate;
+ KListViewSearchLinePrivate *d;
+};
+
+/**
+ * Creates a widget featuring a KListViewSearchLine, a label with the text
+ * "Search" and a button to clear the search.
+ *
+ * @since 3.4
+ */
+class KMYMONEY_EXPORT KListViewSearchLineWidget : public QHBox
+{
+ Q_OBJECT
+
+public:
+ /**
+ * Creates a KListViewSearchLineWidget for \a listView with \a parent as the
+ * parent with and \a name.
+ */
+ KListViewSearchLineWidget(KListView *listView = 0, QWidget *parent = 0,
+ const char *name = 0);
+
+ /**
+ * Destroys the KListViewSearchLineWidget
+ */
+ ~KListViewSearchLineWidget();
+
+ /**
+ * Creates the search line. This can be useful to reimplement in cases where
+ * a KListViewSearchLine subclass is used.
+ */
+ virtual KListViewSearchLine *createSearchLine(KListView *listView);
+
+ /**
+ * Returns a pointer to the search line.
+ */
+ KListViewSearchLine *searchLine() const;
+
+protected slots:
+ /**
+ * Creates the widgets inside of the widget. This is called from the
+ * constructor via a single shot timer so that it it guaranteed to run
+ * after construction is complete. This makes it suitable for overriding in
+ * subclasses.
+ */
+ virtual void createWidgets();
+
+private slots:
+ void positionInToolBar();
+
+private:
+ class KListViewSearchLineWidgetPrivate;
+ KListViewSearchLineWidgetPrivate *d;
+};
+
+#endif
diff --git a/kmymoney2/widgets/kmymoney.widgets b/kmymoney2/widgets/kmymoney.widgets
new file mode 100644
index 0000000..f844780
--- /dev/null
+++ b/kmymoney2/widgets/kmymoney.widgets
@@ -0,0 +1,54 @@
+[Includes]
+kinstance.h
+
+[Init]
+new KInstance("kmmwidgets");
+
+[KMyMoneyTitleLabel]
+
+[kMyMoneyEdit]
+
+[kMyMoneyDateInput]
+
+[KMyMoneyAccountTree]
+
+[KMyMoneySecuritySelector]
+IncludeFile=kmymoney/kmymoneycurrencyselector.h
+
+[KMyMoneyCurrencySelector]
+
+[KMyMoneyRegister::Register]
+IconSet=register.png
+IncludeFile=kmymoney/register.h
+
+[KMyMoneyTransactionForm::TransactionForm]
+IconSet=transactionform.png
+IncludeFile=kmymoney/transactionform.h
+
+[KMyMoneyCategory]
+
+[KMyMoneyPayeeCombo]
+IncludeFile=kmymoney/kmymoneycombo.h
+
+[KMyMoneyPeriodCombo]
+IncludeFile=kmymoney/kmymoneycombo.h
+
+[KMyMoneyFrequencyCombo]
+IncludeFile=kmymoney/kmymoneycombo.h
+
+[KMyMoneyOccurencePeriodCombo]
+IncludeFile=kmymoney/kmymoneycombo.h
+
+[TransactionSortOption]
+
+[KMyMoneyGeneralCombo]
+IncludeFile=kmymoney/kmymoneycombo.h
+
+[KBudgetValues]
+
+[KAccountTemplateSelector]
+
+# deprecated will be removed at some point in time
+
+[KMyMoneyAccountCombo]
+
diff --git a/kmymoney2/widgets/kmymoneyaccountcombo.cpp b/kmymoney2/widgets/kmymoneyaccountcombo.cpp
new file mode 100644
index 0000000..8a44786
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyaccountcombo.cpp
@@ -0,0 +1,218 @@
+/***************************************************************************
+ kmymoneyaccountbutton - description
+ -------------------
+ begin : Mon May 31 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qdrawutil.h>
+#include <qpainter.h>
+#include <qstyle.h>
+#include <qapplication.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/kmymoneyaccountcombo.h>
+#include "kmymoneyaccountcompletion.h"
+
+KMyMoneyAccountCombo::KMyMoneyAccountCombo( QWidget* parent, const char* name ) :
+ KComboBox( parent, name ),
+ m_completion(0),
+ m_mlbDown(false)
+{
+#ifndef KMM_DESIGNER
+ m_completion = new kMyMoneyAccountCompletion(this);
+
+ connect(this, SIGNAL(clicked()), this, SLOT(slotButtonPressed()));
+ connect(m_completion, SIGNAL(itemSelected(const QString&)), this, SLOT(slotSelected(const QString&)));
+#endif
+
+ // make sure that we can display a minimum of characters
+ QFontMetrics fm(font());
+ setMinimumWidth(fm.maxWidth()*15);
+ setMaximumHeight(height());
+
+ // we only use this one item and replace the text as we have our own dropdown box
+ insertItem(QString(""));
+}
+
+KMyMoneyAccountCombo::~KMyMoneyAccountCombo()
+{
+}
+
+void KMyMoneyAccountCombo::slotButtonPressed(void)
+{
+ m_completion->show();
+}
+
+void KMyMoneyAccountCombo::slotSelected(const QString& id)
+{
+ try {
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(id);
+ setText(acc.name());
+ emit accountSelected(id);
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+}
+
+void KMyMoneyAccountCombo::setSelected(const QString& id)
+{
+ if(!id.isEmpty()) {
+ try {
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(id);
+ setSelected(acc);
+ } catch(MyMoneyException *e) {
+ qDebug("Account '%s' not found in %s(%d)", id.data(), __FILE__, __LINE__);
+ delete e;
+ }
+ } else {
+ setText(QString());
+ m_completion->setSelected(id);
+ }
+}
+
+void KMyMoneyAccountCombo::setSelected(const MyMoneyAccount& acc)
+{
+ m_completion->setSelected(acc.id());
+ setText(acc.name());
+}
+
+void KMyMoneyAccountCombo::setText(const QString& txt)
+{
+ changeItem(txt, currentItem());
+}
+
+int KMyMoneyAccountCombo::loadList(const QString& baseName, const QValueList<QString>& accountIdList, const bool clear)
+{
+ AccountSet set;
+
+ return set.load(m_completion->selector(), baseName, accountIdList, clear);
+}
+
+int KMyMoneyAccountCombo::loadList(KMyMoneyUtils::categoryTypeE typeMask)
+{
+ AccountSet set;
+ QValueList<int> typeList;
+
+ if(typeMask & KMyMoneyUtils::asset) {
+ set.addAccountGroup(MyMoneyAccount::Asset);
+ }
+ if(typeMask & KMyMoneyUtils::liability) {
+ set.addAccountGroup(MyMoneyAccount::Liability);
+ }
+ if(typeMask & KMyMoneyUtils::income) {
+ set.addAccountGroup(MyMoneyAccount::Income);
+ }
+ if(typeMask & KMyMoneyUtils::expense) {
+ set.addAccountGroup(MyMoneyAccount::Expense);
+ }
+
+ return set.load(m_completion->selector());
+}
+
+int KMyMoneyAccountCombo::loadList(MyMoneyAccount::accountTypeE type)
+{
+ AccountSet set;
+
+ set.addAccountType(type);
+
+ return set.load(m_completion->selector());
+}
+
+void KMyMoneyAccountCombo::keyPressEvent(QKeyEvent* k)
+{
+ switch(k->key()) {
+ case Qt::Key_Tab:
+ break;
+
+ case Qt::Key_Space:
+ emit clicked();
+ break;
+
+ default:
+ break;
+ }
+ return;
+}
+
+void KMyMoneyAccountCombo::mousePressEvent(QMouseEvent *e)
+{
+ if ( e->button() != LeftButton ) {
+ e->ignore();
+ return;
+ }
+ bool hit = rect().contains( e->pos() );
+ if ( hit ) { // mouse press on button
+ m_mlbDown = TRUE; // left mouse button down
+ emit pressed();
+ }
+}
+
+void KMyMoneyAccountCombo::mouseReleaseEvent(QMouseEvent *e)
+{
+ if ( e->button() != LeftButton ) {
+ e->ignore();
+ return;
+ }
+ if ( !m_mlbDown )
+ return;
+ m_mlbDown = FALSE; // left mouse button up
+ emit released();
+ if ( rect().contains( e->pos() ) ) { // mouse release on button
+ emit clicked();
+ }
+}
+
+int KMyMoneyAccountCombo::count(void) const
+{
+ return m_completion->selector()->accountList().count();
+}
+
+QStringList KMyMoneyAccountCombo::accountList(const QValueList<MyMoneyAccount::accountTypeE>& list) const
+{
+ return m_completion->selector()->accountList(list);
+};
+
+int KMyMoneyAccountCombo::loadList(const QValueList<int>& list)
+{
+ // FIXME make the caller construct the AccountSet directly
+ AccountSet set;
+ QValueList<int>::const_iterator it;
+ for(it = list.begin(); it != list.end(); ++it) {
+ set.addAccountType(static_cast<MyMoneyAccount::accountTypeE>(*it));
+ }
+ return set.load(m_completion->selector());
+};
+
+QStringList KMyMoneyAccountCombo::selectedAccounts(void) const
+{
+ QStringList list;
+ m_completion->selector()->selectedItems(list);
+ return list;
+};
+
+#include "kmymoneyaccountcombo.moc"
diff --git a/kmymoney2/widgets/kmymoneyaccountcombo.h b/kmymoney2/widgets/kmymoneyaccountcombo.h
new file mode 100644
index 0000000..770d5ad
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyaccountcombo.h
@@ -0,0 +1,112 @@
+/***************************************************************************
+ kmymoneyaccountbutton - description
+ -------------------
+ begin : Mon May 31 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYACCOUNTBUTTON_H
+#define KMYMONEYACCOUNTBUTTON_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kpushbutton.h>
+#include <kcombobox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/kmymoneyutils.h>
+class kMyMoneyAccountCompletion;
+
+/**
+ * @author Thomas Baumgart
+ */
+class KMyMoneyAccountCombo : public KComboBox
+{
+ Q_OBJECT
+public:
+ KMyMoneyAccountCombo( QWidget* parent = 0, const char* name = 0 );
+ ~KMyMoneyAccountCombo();
+
+ /**
+ * Method returns how many items are in the account selector list.
+ */
+ int count(void) const;
+
+ /**
+ * This method loads the set of accounts into the widget
+ * as defined by the parameter @p accountIdList. @p accountIdList is
+ * a QValueList of account ids.
+ *
+ * @param baseName QString which should be used as group text
+ * @param accountIdList QValueList of QString account ids
+ * which should be loaded into the widget
+ * @param clear if true (default) clears the widget before populating
+ * @return This method returns the number of accounts loaded into the list
+ */
+ int loadList(const QString& baseName, const QValueList<QString>& accountIdList, const bool clear = true);
+
+ QStringList accountList(const QValueList<MyMoneyAccount::accountTypeE>& list = QValueList<MyMoneyAccount::accountTypeE>()) const;
+
+ int loadList(KMyMoneyUtils::categoryTypeE typeMask);
+ int loadList(const QValueList<int>& list);
+ int loadList(MyMoneyAccount::accountTypeE type);
+
+ void setSelected(const QString& id);
+ void setSelected(const MyMoneyAccount& acc);
+
+ /**
+ * This method returns the list of selected account id's. If
+ * no account is selected, the list is empty.
+ *
+ * @return list of selected accounts
+ */
+ QStringList selectedAccounts(void) const;
+
+ virtual void keyPressEvent(QKeyEvent* e);
+
+public slots:
+ void slotButtonPressed(void);
+ void slotSelected(const QString&);
+
+protected slots:
+
+signals:
+ void accountSelected(const QString&);
+
+ void pressed();
+ void released();
+ void clicked();
+
+protected:
+ void mousePressEvent(QMouseEvent *e);
+ void mouseReleaseEvent(QMouseEvent *e);
+
+ void setText(const QString& txt);
+
+private:
+ kMyMoneyAccountCompletion* m_completion;
+ bool m_mlbDown;
+};
+
+#endif
diff --git a/kmymoney2/widgets/kmymoneyaccountcompletion.cpp b/kmymoney2/widgets/kmymoneyaccountcompletion.cpp
new file mode 100644
index 0000000..bb2af2e
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyaccountcompletion.cpp
@@ -0,0 +1,106 @@
+/***************************************************************************
+ kmymoneyaccountcompletion.cpp - description
+ -------------------
+ begin : Mon Apr 26 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qapplication.h>
+#include <qregexp.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klistview.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoneyaccountcompletion.h"
+#include <kmymoney/mymoneyfile.h>
+
+kMyMoneyAccountCompletion::kMyMoneyAccountCompletion(QWidget *parent, const char *name ) :
+ kMyMoneyCompletion(parent, name)
+{
+ delete m_selector;
+ m_selector = new kMyMoneyAccountSelector(this, 0, 0, false);
+ m_selector->listView()->setFocusProxy(this);
+
+#ifndef KMM_DESIGNER
+ // Default is to show all accounts
+ // FIXME We should leave this also to the caller
+ AccountSet set;
+ set.addAccountGroup(MyMoneyAccount::Asset);
+ set.addAccountGroup(MyMoneyAccount::Liability);
+ set.addAccountGroup(MyMoneyAccount::Income);
+ set.addAccountGroup(MyMoneyAccount::Expense);
+ set.load(selector());
+#endif
+
+ connectSignals(m_selector, m_selector->listView());
+}
+
+kMyMoneyAccountCompletion::~kMyMoneyAccountCompletion()
+{
+}
+
+void kMyMoneyAccountCompletion::slotMakeCompletion(const QString& txt)
+{
+ // if(txt.isEmpty() || txt.length() == 0)
+ // return;
+
+ int cnt = 0;
+ if(txt.contains(MyMoneyFile::AccountSeperator) == 0) {
+ m_lastCompletion = QRegExp(QRegExp::escape(txt.stripWhiteSpace()), false);
+ cnt = selector()->slotMakeCompletion(m_lastCompletion);
+ } else {
+ QStringList parts = QStringList::split(MyMoneyFile::AccountSeperator, txt);
+ QString pattern("^");
+ QStringList::iterator it;
+ for(it = parts.begin(); it != parts.end(); ++it) {
+ if(pattern.length() > 1)
+ pattern += MyMoneyFile::AccountSeperator;
+ pattern += QRegExp::escape(QString(*it).stripWhiteSpace()) + ".*";
+ }
+ pattern += "$";
+ m_lastCompletion = QRegExp(pattern, false);
+ cnt = selector()->slotMakeCompletion(m_lastCompletion);
+ // if we don't have a match, we try it again, but this time
+ // we add a wildcard for the top level
+ if(cnt == 0) {
+ pattern = pattern.insert(1, QString(".*")+MyMoneyFile::AccountSeperator);
+ m_lastCompletion = QRegExp(pattern, false);
+ cnt = selector()->slotMakeCompletion(m_lastCompletion);
+ }
+ }
+
+ if(m_parent && m_parent->isVisible() && !isVisible() && cnt)
+ show(false);
+ else {
+ if(cnt != 0) {
+ adjustSize();
+ } else {
+ hide();
+ }
+ }
+}
+
+#include "kmymoneyaccountcompletion.moc"
diff --git a/kmymoney2/widgets/kmymoneyaccountcompletion.h b/kmymoney2/widgets/kmymoneyaccountcompletion.h
new file mode 100644
index 0000000..725a07c
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyaccountcompletion.h
@@ -0,0 +1,63 @@
+/***************************************************************************
+ kmymoneyaccountcompletion.h - description
+ -------------------
+ begin : Mon Apr 26 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYACCOUNTCOMPLETION_H
+#define KMYMONEYACCOUNTCOMPLETION_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+class QListViewItem;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/kmymoneyaccountselector.h>
+#include "kmymoneycompletion.h"
+
+/**
+ * @author Thomas Baumgart
+ */
+class kMyMoneyAccountCompletion : public kMyMoneyCompletion
+{
+ Q_OBJECT
+public:
+
+ kMyMoneyAccountCompletion(QWidget *parent=0, const char *name=0);
+ virtual ~kMyMoneyAccountCompletion();
+
+ QStringList accountList(const QValueList<MyMoneyAccount::accountTypeE>& list = QValueList<MyMoneyAccount::accountTypeE>()) const { return selector()->accountList(list); }
+
+ /**
+ * reimplemented from kMyMoneyCompletion
+ */
+ kMyMoneyAccountSelector* selector(void) const { return dynamic_cast<kMyMoneyAccountSelector*>(m_selector); }
+
+public slots:
+ void slotMakeCompletion(const QString& txt);
+};
+
+#endif
diff --git a/kmymoney2/widgets/kmymoneyaccountselector.cpp b/kmymoney2/widgets/kmymoneyaccountselector.cpp
new file mode 100644
index 0000000..f1596b4
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyaccountselector.cpp
@@ -0,0 +1,544 @@
+/***************************************************************************
+ kmymoneyaccountselector.cpp - description
+ -------------------
+ begin : Thu Sep 18 2003
+ copyright : (C) 2003 by Thomas Baumgart
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlayout.h>
+#include <qheader.h>
+#include <qlabel.h>
+#include <qtimer.h>
+#include <qpainter.h>
+#include <qstyle.h>
+#include <qrect.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kpushbutton.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoneyaccountselector.h"
+#include <kmymoney/mymoneyutils.h>
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/kmymoneylistviewitem.h>
+#include <kmymoney/kmymoneychecklistitem.h>
+
+#include "../kmymoneyutils.h"
+#include "../kmymoneyglobalsettings.h"
+
+kMyMoneyAccountSelector::kMyMoneyAccountSelector(QWidget *parent, const char *name, QWidget::WFlags flags, const bool createButtons) :
+ KMyMoneySelector(parent, name, flags),
+ m_allAccountsButton(0),
+ m_noAccountButton(0),
+ m_incomeCategoriesButton(0),
+ m_expenseCategoriesButton(0)
+{
+
+ if(createButtons) {
+ QVBoxLayout* buttonLayout = new QVBoxLayout( 0, 0, 6, "accountSelectorButtonLayout");
+
+ m_allAccountsButton = new KPushButton( this, "m_allAccountsButton" );
+ m_allAccountsButton->setText( i18n( "All" ) );
+ buttonLayout->addWidget( m_allAccountsButton );
+
+ m_incomeCategoriesButton = new KPushButton( this, "m_incomeCategoriesButton" );
+ m_incomeCategoriesButton->setText( i18n( "Income" ) );
+ buttonLayout->addWidget( m_incomeCategoriesButton );
+
+ m_expenseCategoriesButton = new KPushButton( this, "m_expenseCategoriesButton" );
+ m_expenseCategoriesButton->setText( i18n( "Expense" ) );
+ buttonLayout->addWidget( m_expenseCategoriesButton );
+
+ m_noAccountButton = new KPushButton( this, "m_noAccountButton" );
+ m_noAccountButton->setText( i18n( "None" ) );
+ buttonLayout->addWidget( m_noAccountButton );
+
+ QSpacerItem* spacer = new QSpacerItem( 0, 67, QSizePolicy::Minimum, QSizePolicy::Expanding );
+ buttonLayout->addItem( spacer );
+ m_layout->addLayout( buttonLayout );
+
+ connect(m_allAccountsButton, SIGNAL(clicked()), this, SLOT(slotSelectAllAccounts()));
+ connect(m_noAccountButton, SIGNAL(clicked()), this, SLOT(slotDeselectAllAccounts()));
+ connect(m_incomeCategoriesButton, SIGNAL(clicked()), this, SLOT(slotSelectIncomeCategories()));
+ connect(m_expenseCategoriesButton, SIGNAL(clicked()), this, SLOT(slotSelectExpenseCategories()));
+ }
+
+ // sort the list of accounts in ascending order
+ m_listView->setSorting(0);
+}
+
+kMyMoneyAccountSelector::~kMyMoneyAccountSelector()
+{
+}
+
+void kMyMoneyAccountSelector::removeButtons(void)
+{
+ delete m_allAccountsButton;
+ delete m_incomeCategoriesButton;
+ delete m_expenseCategoriesButton;
+ delete m_noAccountButton;
+}
+
+void kMyMoneyAccountSelector::selectCategories(const bool income, const bool expense)
+{
+ QListViewItem* it_v;
+
+ for(it_v = m_listView->firstChild(); it_v != 0; it_v = it_v->nextSibling()) {
+ if(static_cast<QCheckListItem*>(it_v)->text() == i18n("Income categories"))
+ selectAllSubItems(it_v, income);
+ else
+ selectAllSubItems(it_v, expense);
+ }
+ emit stateChanged();
+}
+
+void kMyMoneyAccountSelector::setSelectionMode(QListView::SelectionMode mode)
+{
+ m_incomeCategoriesButton->setHidden(mode == QListView::Multi);
+ m_expenseCategoriesButton->setHidden(mode == QListView::Multi);
+ KMyMoneySelector::setSelectionMode(mode);
+}
+
+QStringList kMyMoneyAccountSelector::accountList(const QValueList<MyMoneyAccount::accountTypeE>& filterList) const
+{
+ QStringList list;
+ QListViewItemIterator it;
+ QListViewItem* it_v;
+ QValueList<MyMoneyAccount::accountTypeE>::ConstIterator it_f;
+
+ it = QListViewItemIterator(m_listView, QListViewItemIterator::Selectable);
+ while((it_v = it.current()) != 0) {
+ {
+ if(it_v->rtti() == 1) {
+ KMyMoneyCheckListItem* it_c = dynamic_cast<KMyMoneyCheckListItem*>(it_v);
+ if(it_c->type() == QCheckListItem::CheckBox) {
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(it_c->id());
+ it_f = filterList.find(acc.accountType());
+ if(filterList.count() == 0 || it_f != filterList.end())
+ list << it_c->id();
+ }
+ } else if(it_v->rtti() == 0) {
+ KMyMoneyListViewItem* it_c = dynamic_cast<KMyMoneyListViewItem*>(it_v);
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(it_c->id());
+ it_f = filterList.find(acc.accountType());
+ if(filterList.count() == 0 || it_f != filterList.end())
+ list << it_c->id();
+ }
+ }
+ it++;
+ }
+ return list;
+}
+
+bool kMyMoneyAccountSelector::match(const QRegExp& exp, QListViewItem* item) const
+{
+ if(!item->isSelectable())
+ return false;
+
+ KMyMoneyListViewItem* it_l = dynamic_cast<KMyMoneyListViewItem*>(item);
+ if(!it_l) {
+ KMyMoneyCheckListItem* it_c = dynamic_cast<KMyMoneyCheckListItem*>(item);
+ if(!it_c) {
+ return KMyMoneySelector::match(exp, item);
+ }
+ return exp.search(it_c->key(1, true)) != -1;
+ }
+ return exp.search(it_l->key(1, true)) != -1;
+}
+
+bool kMyMoneyAccountSelector::contains(const QString& txt) const
+{
+ QListViewItemIterator it(m_listView, QListViewItemIterator::Selectable);
+ QListViewItem* it_v;
+
+ QString baseName = i18n("Asset") + "|" +
+ i18n("Liability") + "|" +
+ i18n("Income")+ "|" +
+ i18n("Expense")+ "|" +
+ i18n("Equity") + "|" +
+ i18n("Security");
+
+ while((it_v = it.current()) != 0) {
+ QRegExp exp(QString("^(?:%1):%2$").arg(baseName).arg(QRegExp::escape(txt)));
+ if(it_v->rtti() == 1) {
+ KMyMoneyCheckListItem* it_c = dynamic_cast<KMyMoneyCheckListItem*>(it_v);
+ if(exp.search(it_c->key(1, true)) != -1) {
+ return true;
+ }
+ } else if(it_v->rtti() == 0) {
+ KMyMoneyListViewItem* it_c = dynamic_cast<KMyMoneyListViewItem*>(it_v);
+ if(exp.search(it_c->key(1, true)) != -1) {
+ return true;
+ }
+ }
+ it++;
+ }
+ return false;
+}
+
+# if 0
+void kMyMoneyAccountSelector::update(const QString& /* id */)
+{
+ QListViewItem* it_v = m_listView->currentItem();
+ QString previousHighlighted;
+ bool state = false;
+
+ if(m_selMode == QListView::Multi && it_v) {
+ if(it_v->rtti() == 1) {
+ KMyMoneyCheckListItem* it_c = static_cast<KMyMoneyCheckListItem*>(it_v);
+ if(it_c->type() == QCheckListItem::CheckBox) {
+ previousHighlighted = it_c->id();
+ state = it_c->isOn();
+ }
+ }
+ }
+
+ QStringList list = selectedAccounts();
+ QStringList::Iterator it;
+
+ if(!m_typeList.isEmpty())
+ loadList(m_typeList);
+ else if(!m_baseName.isEmpty()) {
+ loadList(m_baseName, m_accountList);
+ }
+
+ // because loadList() sets all accounts selected, we have to
+ // clear the selection and only turn on those, that were on
+ // before the update.
+ slotDeselectAllAccounts();
+ for(it = list.begin(); it != list.end(); ++it) {
+ setSelected(*it, true);
+ }
+
+ if(m_selMode == QListView::Multi) {
+ // make the previous highlighted item highlighted again
+ if(!previousHighlighted.isEmpty()) {
+ setSelected(previousHighlighted);
+ }
+ }
+}
+#endif
+
+AccountSet::AccountSet() :
+ m_count(0),
+ m_file(MyMoneyFile::instance()),
+ m_favorites(0),
+ m_hideClosedAccounts(true)
+{
+}
+
+void AccountSet::addAccountGroup(MyMoneyAccount::accountTypeE group)
+{
+ if(group == MyMoneyAccount::Asset) {
+ m_typeList << MyMoneyAccount::Checkings;
+ m_typeList << MyMoneyAccount::Savings;
+ m_typeList << MyMoneyAccount::Cash;
+ m_typeList << MyMoneyAccount::AssetLoan;
+ m_typeList << MyMoneyAccount::CertificateDep;
+ m_typeList << MyMoneyAccount::Investment;
+ m_typeList << MyMoneyAccount::Stock;
+ m_typeList << MyMoneyAccount::MoneyMarket;
+ m_typeList << MyMoneyAccount::Asset;
+ m_typeList << MyMoneyAccount::Currency;
+
+ } else if(group == MyMoneyAccount::Liability) {
+ m_typeList << MyMoneyAccount::CreditCard;
+ m_typeList << MyMoneyAccount::Loan;
+ m_typeList << MyMoneyAccount::Liability;
+
+ } else if(group == MyMoneyAccount::Income) {
+ m_typeList << MyMoneyAccount::Income;
+
+ } else if(group == MyMoneyAccount::Expense) {
+ m_typeList << MyMoneyAccount::Expense;
+
+ } else if(group == MyMoneyAccount::Equity) {
+ m_typeList << MyMoneyAccount::Equity;
+ }
+}
+
+void AccountSet::addAccountType(MyMoneyAccount::accountTypeE type)
+{
+ m_typeList << type;
+}
+
+void AccountSet::removeAccountType(MyMoneyAccount::accountTypeE type)
+{
+ QValueList<MyMoneyAccount::accountTypeE>::iterator it;
+ it = m_typeList.find(type);
+ if(it != m_typeList.end()) {
+ m_typeList.remove(it);
+ }
+}
+
+void AccountSet::clear(void)
+{
+ m_typeList.clear();
+}
+
+int AccountSet::load(kMyMoneyAccountSelector* selector)
+{
+ QStringList list;
+ QStringList::ConstIterator it_l;
+ int count = 0;
+ int typeMask = 0;
+ QString currentId;
+
+ if(selector->selectionMode() == QListView::Single) {
+ QStringList list;
+ selector->selectedItems(list);
+ if(list.count() > 0)
+ currentId = list.first();
+ }
+ if((m_typeList.contains(MyMoneyAccount::Checkings)
+ + m_typeList.contains(MyMoneyAccount::Savings)
+ + m_typeList.contains(MyMoneyAccount::Cash)
+ + m_typeList.contains(MyMoneyAccount::AssetLoan)
+ + m_typeList.contains(MyMoneyAccount::CertificateDep)
+ + m_typeList.contains(MyMoneyAccount::Investment)
+ + m_typeList.contains(MyMoneyAccount::Stock)
+ + m_typeList.contains(MyMoneyAccount::MoneyMarket)
+ + m_typeList.contains(MyMoneyAccount::Asset)
+ + m_typeList.contains(MyMoneyAccount::Currency)) > 0)
+ typeMask |= KMyMoneyUtils::asset;
+
+ if((m_typeList.contains(MyMoneyAccount::CreditCard)
+ + m_typeList.contains(MyMoneyAccount::Loan)
+ + m_typeList.contains(MyMoneyAccount::Liability)) > 0)
+ typeMask |= KMyMoneyUtils::liability;
+
+ if((m_typeList.contains(MyMoneyAccount::Income)) > 0)
+ typeMask |= KMyMoneyUtils::income;
+
+ if((m_typeList.contains(MyMoneyAccount::Expense)) > 0)
+ typeMask |= KMyMoneyUtils::expense;
+
+ if((m_typeList.contains(MyMoneyAccount::Equity)) > 0)
+ typeMask |= KMyMoneyUtils::equity;
+
+ selector->clear();
+ KListView* lv = selector->listView();
+ m_count = 0;
+ QString key;
+ QListViewItem* after = 0;
+
+ // create the favorite section first and sort it to the beginning
+ key = QString("A%1").arg(i18n("Favorites"));
+ m_favorites = selector->newItem(i18n("Favorites"), key);
+
+ for(int mask = 0x01; mask != KMyMoneyUtils::last; mask <<= 1) {
+ QListViewItem* item = 0;
+ if((typeMask & mask & KMyMoneyUtils::asset) != 0) {
+ ++m_count;
+ key = QString("B%1").arg(i18n("Asset"));
+ item = selector->newItem(i18n("Asset accounts"), key);
+ list = m_file->asset().accountList();
+ }
+
+ if((typeMask & mask & KMyMoneyUtils::liability) != 0) {
+ ++m_count;
+ key = QString("C%1").arg(i18n("Liability"));
+ item = selector->newItem(i18n("Liability accounts"), key);
+ list = m_file->liability().accountList();
+ }
+
+ if((typeMask & mask & KMyMoneyUtils::income) != 0) {
+ ++m_count;
+ key = QString("D%1").arg(i18n("Income"));
+ item = selector->newItem(i18n("Income categories"), key);
+ list = m_file->income().accountList();
+ if(selector->selectionMode() == QListView::Multi) {
+ selector->m_incomeCategoriesButton->show();
+ }
+ }
+
+ if((typeMask & mask & KMyMoneyUtils::expense) != 0) {
+ ++m_count;
+ key = QString("E%1").arg(i18n("Expense"));
+ item = selector->newItem(i18n("Expense categories"), key);
+ list = m_file->expense().accountList();
+ if(selector->selectionMode() == QListView::Multi) {
+ selector->m_expenseCategoriesButton->show();
+ }
+ }
+
+ if((typeMask & mask & KMyMoneyUtils::equity) != 0) {
+ ++m_count;
+ key = QString("F%1").arg(i18n("Equity"));
+ item = selector->newItem(i18n("Equity accounts"), key);
+ list = m_file->equity().accountList();
+ }
+
+ if(!after)
+ after = item;
+
+ if(item != 0) {
+ // scan all matching accounts found in the engine
+ for(it_l = list.begin(); it_l != list.end(); ++it_l) {
+ const MyMoneyAccount& acc = m_file->account(*it_l);
+ ++m_count;
+ ++count;
+ //this will include an account if it matches the account type and
+ //if it is still open or it has been set to show closed accounts
+ if(includeAccount(acc)
+ && (!isHidingClosedAccounts() || !acc.isClosed()) ) {
+ QString tmpKey;
+ tmpKey = key + MyMoneyFile::AccountSeperator + acc.name();
+ QListViewItem* subItem = selector->newItem(item, acc.name(), tmpKey, acc.id());
+ if(acc.value("PreferredAccount") == "Yes"
+ && m_typeList.contains(acc.accountType())) {
+ selector->newItem(m_favorites, acc.name(), tmpKey, acc.id());
+ }
+ if(acc.accountList().count() > 0) {
+ subItem->setOpen(true);
+ count += loadSubAccounts(selector, subItem, tmpKey, acc.accountList());
+ }
+
+ //disable the item if it has been added only because a subaccount matches the type
+ if( !m_typeList.contains(acc.accountType()) ) {
+ subItem->setEnabled(false);
+ }
+ }
+ }
+ item->sortChildItems(0, true);
+ }
+ }
+
+ // if we don't have a favorite account or the selector is for multi-mode
+ // we get rid of the favorite entry and subentries.
+ if(m_favorites->childCount() == 0 || selector->selectionMode() == QListView::Multi) {
+ delete m_favorites;
+ m_favorites = 0;
+ }
+
+ // sort the list
+ selector->listView()->sort();
+
+ if(lv->firstChild()) {
+ if(currentId.isEmpty()) {
+ lv->setCurrentItem(lv->firstChild());
+ lv->clearSelection();
+ } else {
+ selector->setSelected(currentId);
+ }
+ }
+ selector->update();
+ return count;
+}
+
+int AccountSet::load(kMyMoneyAccountSelector* selector, const QString& baseName, const QValueList<QString>& accountIdList, const bool clear)
+{
+ int count = 0;
+ QListViewItem* item = 0;
+
+ m_typeList.clear();
+ if(clear) {
+ m_count = 0;
+ selector->clear();
+ }
+
+ item = selector->newItem(baseName);
+ ++m_count;
+
+ QValueList<QString>::ConstIterator it;
+ for(it = accountIdList.begin(); it != accountIdList.end(); ++it) {
+ const MyMoneyAccount& acc = m_file->account(*it);
+ if(acc.isClosed())
+ continue;
+ QString tmpKey;
+ // the first character must be preset. Since we don't know any sort order here, we just use A
+ tmpKey = QString("A%1%2%3").arg(baseName, MyMoneyFile::AccountSeperator, acc.name());
+ selector->newItem(item, acc.name(), tmpKey, acc.id());
+ ++m_count;
+ ++count;
+ }
+
+ KListView* lv = selector->listView();
+ if(lv->firstChild()) {
+ lv->setCurrentItem(lv->firstChild());
+ lv->clearSelection();
+ }
+
+ selector->update();
+ return count;
+}
+
+int AccountSet::loadSubAccounts(kMyMoneyAccountSelector* selector, QListViewItem* parent, const QString& key, const QStringList& list)
+{
+ QStringList::ConstIterator it_l;
+ int count = 0;
+
+ for(it_l = list.begin(); it_l != list.end(); ++it_l) {
+ const MyMoneyAccount& acc = m_file->account(*it_l);
+ // don't include stock accounts if not in expert mode
+ if(acc.isInvest() && !KMyMoneyGlobalSettings::expertMode())
+ continue;
+
+ if(includeAccount(acc)
+ && !acc.isClosed()) {
+ QString tmpKey;
+ tmpKey = key + MyMoneyFile::AccountSeperator + acc.name();
+ ++count;
+ ++m_count;
+ QListViewItem* item = selector->newItem(parent, acc.name(), tmpKey, acc.id());
+ if(acc.value("PreferredAccount") == "Yes"
+ && m_typeList.contains(acc.accountType())) {
+ selector->newItem(m_favorites, acc.name(), tmpKey, acc.id());
+ }
+ if(acc.accountList().count() > 0) {
+ item->setOpen(true);
+ count += loadSubAccounts(selector, item, tmpKey, acc.accountList());
+ }
+
+ //disable the item if it has been added only because a subaccount matches the type
+ if( !m_typeList.contains(acc.accountType()) ) {
+ item->setEnabled(false);
+ }
+ }
+ }
+ return count;
+}
+
+bool AccountSet::includeAccount(const MyMoneyAccount& acc)
+{
+ if( m_typeList.contains(acc.accountType()) )
+ return true;
+
+ QStringList accounts = acc.accountList();
+
+ if(accounts.size() > 0) {
+ QStringList::ConstIterator it_acc;
+ for(it_acc = accounts.begin(); it_acc != accounts.end(); ++it_acc) {
+ MyMoneyAccount account = m_file->account(*it_acc);
+ if( includeAccount(account) )
+ return true;
+ }
+ }
+ return false;
+}
+
+
+#include "kmymoneyaccountselector.moc"
diff --git a/kmymoney2/widgets/kmymoneyaccountselector.h b/kmymoney2/widgets/kmymoneyaccountselector.h
new file mode 100644
index 0000000..2fc0635
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyaccountselector.h
@@ -0,0 +1,187 @@
+/***************************************************************************
+ kmymoneyaccountselector.h
+ -------------------
+ begin : Thu Sep 18 2003
+ copyright : (C) 2003 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYACCOUNTSELECTOR_H
+#define KMYMONEYACCOUNTSELECTOR_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+class KPushButton;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/kmymoneyselector.h>
+#include <kmymoney/kmymoneyutils.h>
+#include <kmymoney/mymoneyaccount.h>
+
+class kMyMoneyAccountCompletion;
+class AccountSet;
+class MyMoneyFile;
+
+/**
+ * This class implements an account/category selector. It is based
+ * on a tree view. Using this widget, one can select one or multiple
+ * accounts depending on the mode of operation and the set of accounts
+ * selected to be displayed. (see setSelectionMode()
+ * and loadList() about the specifics of configuration).
+ *
+ * - Single selection mode\n
+ * In this mode the widget allows to select a single entry out of
+ * the set of displayed accounts.
+ *
+ * - Multi selection mode\n
+ * In this mode, the widget allows to select one or more entries
+ * out of the set of displayed accounts. Selection is performed
+ * by marking the account in the view.
+ */
+class kMyMoneyAccountSelector : public KMyMoneySelector
+{
+ Q_OBJECT
+public:
+ friend class AccountSet;
+
+ kMyMoneyAccountSelector(QWidget *parent=0, const char *name=0, QWidget::WFlags flags = 0, const bool createButtons = true);
+ virtual ~kMyMoneyAccountSelector();
+
+ /**
+ * This method returns a list of account ids of those accounts
+ * currently loaded into the widget. It is possible to select
+ * a list of specific account types only. In this case, pass
+ * a list of account types as parameter @p list.
+ *
+ * @param list QValueList of account types to be returned. If this
+ * list is empty (the default), then the ids of all accounts
+ * will be returned.
+ * @return QStringList of account ids
+ */
+ QStringList accountList(const QValueList<MyMoneyAccount::accountTypeE>& list = QValueList<MyMoneyAccount::accountTypeE>()) const;
+
+ void setSelectionMode(QListView::SelectionMode mode);
+
+ /**
+ * This method checks if a given @a item matches the given regular expression @a exp.
+ *
+ * @param exp const reference to a regular expression object
+ * @param item pointer to QListViewItem
+ *
+ * @retval true item matches
+ * @retval false item does not match
+ */
+ virtual bool match(const QRegExp& exp, QListViewItem* item) const;
+
+ /**
+ * This method returns, if any of the items in the selector contains
+ * the text @a txt.
+ *
+ * @param txt const reference to string to be looked for
+ * @retval true exact match found
+ * @retval false no match found
+ */
+ virtual bool contains(const QString& txt) const;
+
+ /**
+ * This method removes all the buttons of the widget
+ */
+ void removeButtons(void);
+
+public slots:
+ /**
+ * This slot selects all items that are currently in
+ * the account list of the widget.
+ */
+ void slotSelectAllAccounts(void) { selectAllItems(true); };
+
+ /**
+ * This slot deselects all items that are currently in
+ * the account list of the widget.
+ */
+ void slotDeselectAllAccounts(void) { selectAllItems(false); };
+
+protected:
+ /**
+ * This method loads the list of subaccounts as found in the
+ * @p list and attaches them to the parent widget passed as @p parent.
+ *
+ * @param parent pointer to parent widget
+ * @param list QStringList containing the ids of all subaccounts to load
+ * @return This method returns the number of accounts loaded into the list
+ */
+ int loadSubAccounts(QListViewItem* parent, const QStringList& list);
+
+ /**
+ * This is a helper method for selectAllIncomeCategories()
+ * and selectAllExpenseCategories().
+ */
+ void selectCategories(const bool income, const bool expense);
+
+protected slots:
+ /**
+ * This slot selects all income categories
+ */
+ void slotSelectIncomeCategories(void) { selectCategories(true, false); };
+
+ /**
+ * This slot selects all expense categories
+ */
+ void slotSelectExpenseCategories(void) { selectCategories(false, true); };
+
+protected:
+ KPushButton* m_allAccountsButton;
+ KPushButton* m_noAccountButton;
+ KPushButton* m_incomeCategoriesButton;
+ KPushButton* m_expenseCategoriesButton;
+ QValueList<int> m_typeList;
+ QStringList m_accountList;
+};
+
+
+class AccountSet
+{
+public:
+ AccountSet();
+
+ void addAccountType(MyMoneyAccount::accountTypeE type);
+ void addAccountGroup(MyMoneyAccount::accountTypeE type);
+ void removeAccountType(MyMoneyAccount::accountTypeE type);
+
+ void clear(void);
+
+ int load(kMyMoneyAccountSelector* selector);
+ int load(kMyMoneyAccountSelector* selector, const QString& baseName, const QValueList<QString>& accountIdList, const bool clear = false);
+
+ int count(void) const { return m_count; }
+
+ void setHideClosedAccounts (bool _bool) { m_hideClosedAccounts = _bool; }
+ bool isHidingClosedAccounts (void) { return m_hideClosedAccounts; }
+
+protected:
+ int loadSubAccounts(kMyMoneyAccountSelector* selector, QListViewItem* parent, const QString& key, const QStringList& list);
+ bool includeAccount(const MyMoneyAccount& acc);
+
+private:
+ int m_count;
+ MyMoneyFile* m_file;
+ QValueList<MyMoneyAccount::accountTypeE> m_typeList;
+ QListViewItem* m_favorites;
+ bool m_hideClosedAccounts;
+};
+#endif
diff --git a/kmymoney2/widgets/kmymoneyaccounttree.cpp b/kmymoney2/widgets/kmymoneyaccounttree.cpp
new file mode 100644
index 0000000..1b669ef
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyaccounttree.cpp
@@ -0,0 +1,147 @@
+/***************************************************************************
+ kmymoneyaccounttree.cpp - description
+ -------------------
+ begin : Sat Jan 1 2005
+ copyright : (C) 2005 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qpoint.h>
+#include <qevent.h>
+#include <qdragobject.h>
+#include <qtimer.h>
+#include <qcursor.h>
+#include <qheader.h>
+#include <qpainter.h>
+#include <qpixmap.h>
+#include <qstyle.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kmessagebox.h>
+#include <klocale.h>
+#include <kglobal.h>
+#include <kiconloader.h>
+#include <kstandarddirs.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/kmymoneyaccounttree.h>
+#include <kmymoney/kmymoneyglobalsettings.h>
+
+#include <kmymoney/kmymoneyutils.h>
+
+KMyMoneyAccountTree::KMyMoneyAccountTree(QWidget* parent, const char *name) :
+ KMyMoneyAccountTreeBase(parent,name)
+{
+ showType();
+
+ m_taxReportColumn = addColumn(i18n("Column heading for category in tax report", "Tax"));
+ setColumnWidthMode(m_taxReportColumn, QListView::Manual);
+ setColumnAlignment(m_taxReportColumn, Qt::AlignHCenter);
+
+ m_vatCategoryColumn = addColumn(i18n("Column heading for VAT category", "VAT"));
+ setColumnWidthMode(m_vatCategoryColumn, QListView::Manual);
+ setColumnAlignment(m_vatCategoryColumn, Qt::AlignHCenter);
+
+ showValue();
+}
+
+KMyMoneyAccountTreeItem::KMyMoneyAccountTreeItem(KListView *parent, const MyMoneyAccount& account, const MyMoneySecurity& security , const QString& name) :
+ KMyMoneyAccountTreeBaseItem(parent,account,security,name),
+ m_reconcileFlag(false)
+{
+ updateAccount();
+}
+
+KMyMoneyAccountTreeItem::KMyMoneyAccountTreeItem(KMyMoneyAccountTreeBaseItem *parent, const MyMoneyAccount& account, const QValueList<MyMoneyPrice>& price, const MyMoneySecurity& security) :
+ KMyMoneyAccountTreeBaseItem(parent,account,price,security),
+ m_reconcileFlag(false)
+{
+ updateAccount();
+}
+
+KMyMoneyAccountTreeItem::KMyMoneyAccountTreeItem(KListView *parent, const MyMoneyInstitution& institution) :
+ KMyMoneyAccountTreeBaseItem(parent,institution),
+ m_reconcileFlag(false)
+{
+}
+
+void KMyMoneyAccountTreeItem::fillColumns()
+{
+ KMyMoneyAccountTree* lv = dynamic_cast<KMyMoneyAccountTree*>(listView());
+ if (!lv)
+ return;
+ KMyMoneyAccountTreeBaseItem::fillColumns();
+ QPixmap checkMark = QPixmap(KGlobal::iconLoader()->loadIcon("ok", KIcon::Small));
+ MyMoneyMoney vatRate;
+ if (!isInstitution())
+ setPixmap(lv->nameColumn(), m_account.accountPixmap(m_reconcileFlag, 22));
+ switch(m_account.accountType()) {
+ case MyMoneyAccount::Income:
+ case MyMoneyAccount::Expense:
+ case MyMoneyAccount::Asset:
+ case MyMoneyAccount::Liability:
+ if(m_account.value("Tax").lower() == "yes")
+ setPixmap(lv->taxReportColumn(), checkMark);
+ if(!m_account.value("VatAccount").isEmpty()) {
+ setPixmap(lv->vatCategoryColumn(), checkMark);
+ }
+ if(!m_account.value("VatRate").isEmpty()) {
+ vatRate = MyMoneyMoney(m_account.value("VatRate")) * MyMoneyMoney(100,1);
+ setText(lv->vatCategoryColumn(), QString("%1 %").arg(vatRate.formatMoney("", 1)));
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void KMyMoneyAccountTreeItem::setReconciliation(bool on)
+{
+ if(m_reconcileFlag == on)
+ return;
+ m_reconcileFlag = on;
+ updateAccount();
+}
+
+MyMoneyMoney KMyMoneyAccountTreeItem::balance() const
+{
+ MyMoneyMoney result;
+ // account.balance() is not compatable with stock accounts
+ if ( m_account.isInvest() )
+ result = MyMoneyFile::instance()->balance(m_account.id());
+ else
+ result = m_account.balance();
+ // for income and liability accounts, we reverse the sign
+ switch(m_account.accountGroup()) {
+ case MyMoneyAccount::Income:
+ case MyMoneyAccount::Liability:
+ case MyMoneyAccount::Equity:
+ result = -result;
+ break;
+
+ default:
+ break;
+ }
+ return result;
+}
+
+
+#include "kmymoneyaccounttree.moc"
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/widgets/kmymoneyaccounttree.h b/kmymoney2/widgets/kmymoneyaccounttree.h
new file mode 100644
index 0000000..a4b741d
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyaccounttree.h
@@ -0,0 +1,109 @@
+/***************************************************************************
+ kmymoneyaccounttree.h - description
+ -------------------
+ begin : Sat Jan 1 2005
+ copyright : (C) 2005 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYACCOUNTTREE_H
+#define KMYMONEYACCOUNTTREE_H
+
+
+#include <kmymoney/kmymoneyaccounttreebase.h>
+
+class KMyMoneyAccountTreeItem;
+
+class KMyMoneyAccountTree : public KMyMoneyAccountTreeBase
+{
+ Q_OBJECT
+public:
+ KMyMoneyAccountTree(QWidget* parent = 0, const char *name = 0);
+ int taxReportColumn(void) const { return m_taxReportColumn; }
+ int vatCategoryColumn(void) const { return m_vatCategoryColumn; }
+private:
+ int m_taxReportColumn;
+ int m_vatCategoryColumn;
+};
+
+class KMyMoneyAccountTreeItem : public KMyMoneyAccountTreeBaseItem
+{
+public:
+ /**
+ * Constructor to be used to construct an institution entry
+ * object.
+ *
+ * @param parent pointer to the KListView object this entry should be
+ * added to.
+ * @param institution const reference to MyMoneyInstitution for which
+ * the KListView entry is constructed
+ */
+ KMyMoneyAccountTreeItem(KListView *parent, const MyMoneyInstitution& institution);
+
+ /**
+ * Constructor to be used to construct a standard account entry object (e.g. Asset,
+ * Liability, etc.).
+ *
+ * @param parent pointer to the KListView object this entry should be
+ * added to.
+ * @param account const reference to MyMoneyAccount for which
+ * the KListView entry is constructed
+ * @param security const reference to the security used to show the value. Usually
+ * one should pass MyMoneyFile::baseCurrency() here.
+ * @param name name of the account to be used instead of the one stored with @p account
+ * If empty, the one stored with @p account will be used. Default: empty
+ */
+ KMyMoneyAccountTreeItem(KListView *parent, const MyMoneyAccount& account, const MyMoneySecurity& security = MyMoneySecurity(), const QString& name = QString());
+
+ /**
+ * Constructor to be used to construct an account entry
+ * object.
+ *
+ * @param parent pointer to the parent KAccountListView object this entry should be
+ * added to.
+ * @param account const reference to MyMoneyAccount for which
+ * the KListView entry is constructed
+ * @param price price to be used to calculate value (defaults to 1)
+ * This is used for accounts denominated in foreign currencies or stocks
+ * @param security const reference to the security used to show the value. Usually
+ * one should pass MyMoneyFile::baseCurrency() here.
+ */
+ KMyMoneyAccountTreeItem(KMyMoneyAccountTreeBaseItem *parent, const MyMoneyAccount& account, const QValueList<MyMoneyPrice>& price = QValueList<MyMoneyPrice>(), const MyMoneySecurity& security = MyMoneySecurity());
+
+ void setReconciliation(bool);
+
+
+protected:
+ /**
+ * Returns the current balance of this account.
+ *
+ * This is a pure virtual function, to allow subclasses to calculate
+ * the balance in different ways.
+ *
+ * Parent items in the tree will only be recomputed if the balance() for
+ * a son changes.
+ * @param account Account to get the balance for
+ * @return Balance of this account
+ */
+ MyMoneyMoney balance() const;
+
+ bool m_reconcileFlag;
+
+ /**
+ * populates the columns. Derived classes should override this. The
+ * name column is already filled and should not be changed.
+ */
+ void fillColumns();
+};
+
+#endif
+
diff --git a/kmymoney2/widgets/kmymoneyaccounttreebase.cpp b/kmymoney2/widgets/kmymoneyaccounttreebase.cpp
new file mode 100644
index 0000000..da35ea1
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyaccounttreebase.cpp
@@ -0,0 +1,825 @@
+/***************************************************************************
+ kmymoneyaccounttree.cpp - description
+ -------------------
+ begin : Sat Jan 1 2005
+ copyright : (C) 2005 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qpoint.h>
+#include <qevent.h>
+#include <qdragobject.h>
+#include <qtimer.h>
+#include <qcursor.h>
+#include <qheader.h>
+#include <qpainter.h>
+#include <qpixmap.h>
+#include <qstyle.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kmessagebox.h>
+#include <klocale.h>
+#include <kglobal.h>
+#include <kiconloader.h>
+#include <kstandarddirs.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/kmymoneyaccounttree.h>
+#include <kmymoney/kmymoneyglobalsettings.h>
+
+#include <kmymoney/kmymoneyutils.h>
+
+KMyMoneyAccountTreeBase::KMyMoneyAccountTreeBase(QWidget* parent, const char* name) :
+ KListView(parent, name),
+ m_accountConnections(false),
+ m_institutionConnections(false),
+ m_queuedSort(0)
+{
+ setRootIsDecorated(true);
+ setAllColumnsShowFocus(true);
+
+ m_nameColumn = addColumn(i18n("Account"));
+ setColumnWidthMode(m_nameColumn, QListView::Manual);
+
+ m_typeColumn = -1;
+ m_balanceColumn = -1;
+ m_valueColumn = -1;
+
+ setMultiSelection(false);
+
+ setResizeMode(QListView::LastColumn);
+ setShowSortIndicator(true);
+ setSorting(0);
+
+ header()->setResizeEnabled(true);
+
+ setDragEnabled(false);
+ setAcceptDrops(false);
+ setItemsMovable(false);
+ setDropVisualizer(false);
+ setDropHighlighter(true);
+
+ // setup a default
+ m_baseCurrency.setSmallestAccountFraction(100);
+ m_baseCurrency.setSmallestCashFraction(100);
+
+ connect(this, SIGNAL(dropped(QDropEvent*,QListViewItem*,QListViewItem*)), this, SLOT(slotObjectDropped(QDropEvent*,QListViewItem*,QListViewItem*)));
+ connect(this, SIGNAL(selectionChanged(QListViewItem*)), this, SLOT(slotSelectObject(QListViewItem*)));
+ connect(this, SIGNAL(contextMenu(KListView*, QListViewItem* , const QPoint&)), this, SLOT(slotOpenContextMenu(KListView*, QListViewItem*, const QPoint&)));
+ connect(this, SIGNAL(doubleClicked(QListViewItem*,const QPoint&,int)), this, SLOT(slotOpenObject(QListViewItem*)));
+
+ // drag and drop timer connections
+ connect( &m_autoopenTimer, SIGNAL( timeout() ), this, SLOT( slotOpenFolder() ) );
+ connect( &m_autoscrollTimer, SIGNAL( timeout() ), this, SLOT( slotAutoScroll() ) );
+
+}
+
+KMyMoneyAccountTreeBase::~KMyMoneyAccountTreeBase()
+{
+ if (!m_configGroup.isEmpty())
+ saveLayout(KGlobal::config(), m_configGroup);
+}
+
+void KMyMoneyAccountTreeBase::restoreLayout(const QString& group)
+{
+ if (!m_configGroup.isEmpty())
+ return; // already done
+ // make sure to use the previous settings. If no settings are found
+ // we use equal distribution of all fields as an initial setting
+ // TODO this only makes the first column invisible if settings exist setColumnWidth(0, 0);
+ m_configGroup = group;
+ KListView::restoreLayout(KGlobal::config(), m_configGroup);
+}
+
+void KMyMoneyAccountTreeBase::showType(void)
+{
+ m_typeColumn = addColumn(i18n("Type"));
+ setColumnWidthMode(m_typeColumn, QListView::Manual);
+ setColumnAlignment(m_typeColumn, Qt::AlignLeft);
+}
+
+void KMyMoneyAccountTreeBase::showValue(void)
+{
+ m_balanceColumn = addColumn(i18n("Total Balance"));
+ setColumnWidthMode(m_balanceColumn, QListView::Manual);
+ setColumnAlignment(m_balanceColumn, Qt::AlignRight);
+
+ m_valueColumn = addColumn(i18n("Total Value"));
+ setColumnWidthMode(m_valueColumn, QListView::Manual);
+ setColumnAlignment(m_valueColumn, Qt::AlignRight);
+}
+
+void KMyMoneyAccountTreeBase::connectNotify(const char * /* s */)
+{
+ // update drag and drop settings
+ m_accountConnections = (receivers(SIGNAL(reparent(const MyMoneyAccount&, const MyMoneyAccount&))) != 0);
+ m_institutionConnections = (receivers(SIGNAL(reparent(const MyMoneyAccount&, const MyMoneyInstitution&))) != 0);
+ setDragEnabled(m_accountConnections | m_institutionConnections);
+ setAcceptDrops(m_accountConnections | m_institutionConnections);
+}
+
+void KMyMoneyAccountTreeBase::disconnectNotify(const char * /* s */)
+{
+ // update drag and drop settings
+ m_accountConnections = (receivers(SIGNAL(reparent(const MyMoneyAccount&, const MyMoneyAccount&))) != 0);
+ m_institutionConnections = (receivers(SIGNAL(reparent(const MyMoneyAccount&, const MyMoneyInstitution&))) != 0);
+ setDragEnabled(m_accountConnections | m_institutionConnections);
+ setAcceptDrops(m_accountConnections | m_institutionConnections);
+}
+
+void KMyMoneyAccountTreeBase::setSectionHeader(const QString& txt)
+{
+ header()->setLabel(nameColumn(), txt);
+}
+
+KMyMoneyAccountTreeBaseItem* KMyMoneyAccountTreeBase::selectedItem(void) const
+{
+ return dynamic_cast<KMyMoneyAccountTreeBaseItem *>(KListView::selectedItem());
+}
+
+const KMyMoneyAccountTreeBaseItem* KMyMoneyAccountTreeBase::findItem(const QString& id) const
+{
+ // tried to use a QListViewItemIterator but that does not fit
+ // with the constness of this method. Arghhh.
+
+ QListViewItem* p = firstChild();
+ while(p) {
+ // item found, check for the id
+ KMyMoneyAccountTreeBaseItem* item = dynamic_cast<KMyMoneyAccountTreeBaseItem*>(p);
+ if(item && item->id() == id)
+ break;
+
+ // item did not match, search the next one
+ QListViewItem* next = p->firstChild();
+ if(!next) {
+ while((next = p->nextSibling()) == 0) {
+ p = p->parent();
+ if(!p)
+ break;
+ }
+ }
+ p = next;
+ }
+
+ return dynamic_cast<KMyMoneyAccountTreeBaseItem*>(p);
+}
+
+bool KMyMoneyAccountTreeBase::dropAccountOnAccount(const MyMoneyAccount& accFrom, const MyMoneyAccount& accTo) const
+{
+ bool rc = false;
+
+ // it does not make sense to reparent an account to oneself
+ // or to reparent it to it's current parent
+ if(accTo.id() != accFrom.id()
+ && accFrom.parentAccountId() != accTo.id()) {
+ // Moving within a group is generally ok
+ rc = accTo.accountGroup() == accFrom.accountGroup();
+
+ // now check for exceptions
+ if(rc) {
+ if(accTo.accountType() == MyMoneyAccount::Investment
+ && !accFrom.isInvest())
+ rc = false;
+
+ else if(accFrom.isInvest()
+ && accTo.accountType() != MyMoneyAccount::Investment)
+ rc = false;
+
+ } else {
+ if(accFrom.accountGroup() == MyMoneyAccount::Income
+ && accTo.accountGroup() == MyMoneyAccount::Expense)
+ rc = true;
+
+ if(accFrom.accountGroup() == MyMoneyAccount::Expense
+ && accTo.accountGroup() == MyMoneyAccount::Income)
+ rc = true;
+ }
+
+ // if it's generally ok to drop here, make sure that
+ // the accTo does not have a child with the same name
+ const KMyMoneyAccountTreeBaseItem* to = findItem(accTo.id());
+ if(to) {
+ to = dynamic_cast<KMyMoneyAccountTreeBaseItem*> (to->firstChild());
+ while(to && rc) {
+ if(to->isAccount()) {
+ const MyMoneyAccount& acc = dynamic_cast<const MyMoneyAccount&>(to->itemObject());
+ if(acc.name() == accFrom.name())
+ rc = false;
+ }
+ to = dynamic_cast<KMyMoneyAccountTreeBaseItem*> (to->nextSibling());
+ }
+ }
+ }
+
+ return rc;
+}
+
+bool KMyMoneyAccountTreeBase::acceptDrag(QDropEvent* event) const
+{
+ bool rc;
+
+ if((rc = (acceptDrops()) && (event->source() == viewport()))) {
+ rc = false;
+ KMyMoneyAccountTreeBaseItem* to = dynamic_cast<KMyMoneyAccountTreeBaseItem*>(itemAt( contentsToViewport(event->pos()) ));
+ QString fromId(event->encodedData("text/plain"));
+ const KMyMoneyAccountTreeBaseItem* from = findItem(fromId);
+
+ // we can only move accounts around
+ if(!from->isAccount())
+ from = 0;
+
+ if(to && from && !to->isChildOf(from)) {
+ const MyMoneyAccount& accFrom = dynamic_cast<const MyMoneyAccount&>(from->itemObject());
+
+ if(to->isAccount() && m_accountConnections) {
+ const MyMoneyAccount& accTo = dynamic_cast<const MyMoneyAccount&>(to->itemObject());
+ rc = dropAccountOnAccount(accFrom, accTo);
+
+ } else if(to->isInstitution() && m_institutionConnections) {
+ // Moving a non-stock account to an institution is ok
+ if(!accFrom.isInvest())
+ rc = true;
+ }
+ }
+ }
+
+ return rc;
+}
+
+void KMyMoneyAccountTreeBase::startDrag(void)
+{
+ QListViewItem* item = currentItem();
+ KMyMoneyAccountTreeBaseItem* p = dynamic_cast<KMyMoneyAccountTreeBaseItem *>(item);
+ if(!p)
+ return;
+
+ if(p->isAccount()) {
+ QTextDrag* drag = new QTextDrag(p->id(), viewport());
+ drag->setSubtype("plain");
+
+ // use the icon that is attached to the item to be dragged
+ if (p->pixmap(0)) {
+ QPixmap pixmap(*p->pixmap(0));
+ QPoint hotspot( pixmap.width() / 2, pixmap.height() / 2 );
+ drag->setPixmap(pixmap, hotspot);
+ }
+
+ if (drag->dragMove() && drag->target() != viewport())
+ emit moved();
+ }
+ return;
+}
+
+void KMyMoneyAccountTreeBase::slotObjectDropped(QDropEvent* event, QListViewItem* /* parent */, QListViewItem* /* after */)
+{
+ m_autoopenTimer.stop();
+ slotStopAutoScroll();
+ if(dropHighlighter())
+ cleanItemHighlighter();
+
+ KMyMoneyAccountTreeBaseItem* newParent = dynamic_cast<KMyMoneyAccountTreeBaseItem*>(m_dropItem);
+ if(newParent) {
+ QString fromId(event->encodedData("text/plain"));
+ const KMyMoneyAccountTreeBaseItem* from = findItem(fromId);
+
+ // we can only move accounts around
+ if(!from->isAccount())
+ from = 0;
+
+ if(from) {
+ const MyMoneyAccount& accFrom = dynamic_cast<const MyMoneyAccount&>(from->itemObject());
+ if(newParent->isAccount()) {
+ const MyMoneyAccount& accTo = dynamic_cast<const MyMoneyAccount&>(newParent->itemObject());
+ if(dropAccountOnAccount(accFrom, accTo)) {
+ emit reparent(accFrom, accTo);
+ }
+
+ } else if(newParent->isInstitution()) {
+ if(!accFrom.isInvest()) {
+ const MyMoneyInstitution& institution = dynamic_cast<const MyMoneyInstitution&>(newParent->itemObject());
+ emit reparent(accFrom, institution);
+ }
+ }
+ }
+ }
+}
+
+void KMyMoneyAccountTreeBase::slotSelectObject(QListViewItem* i)
+{
+ emit selectObject(MyMoneyInstitution());
+ emit selectObject(MyMoneyAccount());
+
+ KMyMoneyAccountTreeBaseItem* item = dynamic_cast<KMyMoneyAccountTreeBaseItem*>(i);
+ if(item != 0) {
+ emit selectObject(item->itemObject());
+ }
+}
+
+void KMyMoneyAccountTreeBase::slotOpenContextMenu(KListView* lv, QListViewItem* i, const QPoint&)
+{
+ Q_UNUSED(lv);
+
+ KMyMoneyAccountTreeBaseItem* item = dynamic_cast<KMyMoneyAccountTreeBaseItem *>(i);
+ if(item) {
+ emit selectObject(item->itemObject());
+
+ // Create a copy of the item since the original might be destroyed
+ // during processing of this signal.
+ if(item->isInstitution()) {
+ MyMoneyInstitution institution = dynamic_cast<const MyMoneyInstitution&>(item->itemObject());
+ emit openContextMenu(institution);
+ } else {
+ MyMoneyAccount account = dynamic_cast<const MyMoneyAccount&>(item->itemObject());
+ emit openContextMenu(account);
+ }
+ }
+}
+
+void KMyMoneyAccountTreeBase::slotOpenObject(QListViewItem* i)
+{
+ KMyMoneyAccountTreeBaseItem* item = dynamic_cast<KMyMoneyAccountTreeBaseItem *>(i);
+ if(item) {
+ // Create a copy of the item since the original might be destroyed
+ // during processing of this signal.
+ if(item->isAccount()) {
+ MyMoneyAccount acc = dynamic_cast<const MyMoneyAccount&>(item->itemObject());
+ emit openObject(acc);
+ } else if(item->isInstitution()) {
+ MyMoneyInstitution inst = dynamic_cast<const MyMoneyInstitution&>(item->itemObject());
+ emit openObject(inst);
+ }
+ }
+}
+
+/* drag and drop support inspired partially from KMail */
+/* --------------------------------------------------- */
+static const int autoscrollMargin = 16;
+static const int initialScrollTime = 30;
+static const int initialScrollAccel = 5;
+static const int autoopenTime = 750;
+
+void KMyMoneyAccountTreeBase::slotOpenFolder(void)
+{
+ m_autoopenTimer.stop();
+ if ( m_dropItem && !m_dropItem->isOpen() ) {
+ m_dropItem->setOpen( TRUE );
+ m_dropItem->repaint();
+ }
+}
+
+void KMyMoneyAccountTreeBase::slotStartAutoScroll(void)
+{
+ if ( !m_autoscrollTimer.isActive() ) {
+ m_autoscrollTime = initialScrollTime;
+ m_autoscrollAccel = initialScrollAccel;
+ m_autoscrollTimer.start( m_autoscrollTime );
+ }
+}
+
+void KMyMoneyAccountTreeBase::slotStopAutoScroll(void)
+{
+ m_autoscrollTimer.stop();
+}
+
+void KMyMoneyAccountTreeBase::slotAutoScroll(void)
+{
+ // don't show a highlighter during scrolling
+ cleanItemHighlighter();
+
+ QPoint p = viewport()->mapFromGlobal( QCursor::pos() );
+
+ if ( m_autoscrollAccel-- <= 0 && m_autoscrollTime ) {
+ m_autoscrollAccel = initialScrollAccel;
+ m_autoscrollTime--;
+ m_autoscrollTimer.start( m_autoscrollTime );
+ }
+ int l = QMAX(1,(initialScrollTime-m_autoscrollTime));
+
+ int dx=0,dy=0;
+ if ( p.y() < autoscrollMargin ) {
+ dy = -l;
+ } else if ( p.y() > visibleHeight()-autoscrollMargin ) {
+ dy = +l;
+ }
+ if ( p.x() < autoscrollMargin ) {
+ dx = -l;
+ } else if ( p.x() > visibleWidth()-autoscrollMargin ) {
+ dx = +l;
+ }
+ if ( dx || dy ) {
+ scrollBy(dx, dy);
+ } else {
+ slotStopAutoScroll();
+ }
+}
+
+void KMyMoneyAccountTreeBase::contentsDragMoveEvent(QDragMoveEvent* e)
+{
+ QPoint vp = contentsToViewport(e->pos());
+ QRect inside_margin((contentsX() > 0) ? autoscrollMargin : 0,
+ (contentsY() > 0) ? autoscrollMargin : 0,
+ visibleWidth() - ((contentsX() + visibleWidth() < contentsWidth())
+ ? autoscrollMargin*2 : 0),
+ visibleHeight() - ((contentsY() + visibleHeight() < contentsHeight())
+ ? autoscrollMargin*2 : 0));
+
+ bool accepted = false;
+ QListViewItem *i = itemAt( vp );
+ if ( i ) {
+ accepted = acceptDrag(e);
+ if(accepted && !m_autoscrollTimer.isActive()) {
+ if (dropHighlighter()) {
+ QRect tmpRect = drawItemHighlighter(0, i);
+ if (tmpRect != m_lastDropHighlighter) {
+ cleanItemHighlighter();
+ m_lastDropHighlighter = tmpRect;
+ viewport()->repaint(tmpRect);
+ }
+ }
+ }
+ if ( !inside_margin.contains(vp) ) {
+ slotStartAutoScroll();
+ e->accept(QRect(0,0,0,0)); // Keep sending move events
+ m_autoopenTimer.stop();
+
+ } else {
+ if(accepted)
+ e->accept();
+ else
+ e->ignore();
+ if ( i != m_dropItem ) {
+ m_autoopenTimer.stop();
+ m_dropItem = i;
+ m_autoopenTimer.start( autoopenTime );
+ }
+ }
+ if ( accepted ) {
+ switch ( e->action() ) {
+ case QDropEvent::Copy:
+ case QDropEvent::Link:
+ break;
+ case QDropEvent::Move:
+ e->acceptAction();
+ break;
+ default:
+ break;
+ }
+ }
+ } else {
+ e->ignore();
+ m_autoopenTimer.stop();
+ m_dropItem = 0;
+ }
+
+ if(!accepted && dropHighlighter())
+ cleanItemHighlighter();
+}
+
+void KMyMoneyAccountTreeBase::cleanItemHighlighter(void)
+{
+ if(m_lastDropHighlighter.isValid()) {
+ QRect rect=m_lastDropHighlighter;
+ m_lastDropHighlighter = QRect();
+ // make sure, we repaint a bit more. that's important during
+ // autoscroll. if we don't do that, parts of the highlighter
+ // do not get removed
+ rect.moveBy(-1, -1);
+ rect.setSize(rect.size() + QSize(2,2));
+ viewport()->repaint(rect, true);
+ }
+}
+
+void KMyMoneyAccountTreeBase::viewportPaintEvent(QPaintEvent* e)
+{
+ QListView::viewportPaintEvent(e);
+
+ if (m_lastDropHighlighter.isValid() && e->rect().intersects(m_lastDropHighlighter)) {
+ QPainter painter(viewport());
+
+ // This is where we actually draw the drop-highlighter
+ style().drawPrimitive(QStyle::PE_FocusRect, &painter, m_lastDropHighlighter, colorGroup(),
+ QStyle::Style_FocusAtBorder);
+ }
+}
+
+
+
+
+/****************************************************************************/
+/****************************************************************************/
+/****************************************************************************/
+
+const MyMoneyObject& KMyMoneyAccountTreeBaseItem::itemObject(void) const
+{
+ if(m_type == Institution)
+ return m_institution;
+ return m_account;
+}
+
+KMyMoneyAccountTreeBaseItem::KMyMoneyAccountTreeBaseItem(KListView *parent, const MyMoneyInstitution& institution) :
+ KListViewItem(parent),
+ m_totalValue(MyMoneyMoney(0)),
+ m_negative(false),
+ m_institution(institution),
+ m_type(Institution)
+{
+ setName();
+}
+
+KMyMoneyAccountTreeBaseItem::KMyMoneyAccountTreeBaseItem(KListView *parent, const MyMoneyAccount& account, const MyMoneySecurity& security, const QString& name) :
+ KListViewItem(parent),
+ m_security(security),
+ m_totalValue(MyMoneyMoney(0)),
+ m_account(account),
+ m_negative(false),
+ m_type(Account)
+{
+ if(!name.isEmpty()) {
+ // we do not want to modify the original account
+ MyMoneyAccount acc(account);
+ acc.setName(name);
+ m_account = acc;
+ }
+ setName();
+}
+
+KMyMoneyAccountTreeBaseItem::KMyMoneyAccountTreeBaseItem(KMyMoneyAccountTreeBaseItem *parent, const MyMoneyAccount& account, const QValueList<MyMoneyPrice>& price, const MyMoneySecurity& security) :
+ KListViewItem(parent),
+ m_price(price),
+ m_security(security),
+ m_totalValue(MyMoneyMoney(0)),
+ m_account(account),
+ m_negative(false),
+ m_type(Account)
+{
+ setName();
+}
+
+KMyMoneyAccountTreeBaseItem::~KMyMoneyAccountTreeBaseItem()
+{
+}
+
+const QString& KMyMoneyAccountTreeBaseItem::id(void) const
+{
+ if(m_type == Institution)
+ return m_institution.id();
+ return m_account.id();
+}
+
+bool KMyMoneyAccountTreeBaseItem::isChildOf(const QListViewItem* const item) const
+{
+ QListViewItem *p = parent();
+ while(p && p != item) {
+ p = p->parent();
+ }
+ return (p != 0);
+}
+
+MyMoneyMoney KMyMoneyAccountTreeBaseItem::value() const
+{
+ // calculate the new value by running down the price list
+ MyMoneyMoney result = balance();
+ QValueList<MyMoneyPrice>::const_iterator it_p;
+ QString security = m_security.id();
+ for(it_p = m_price.begin(); it_p != m_price.end(); ++it_p) {
+ result = (result * (MyMoneyMoney(1,1) / (*it_p).rate(security))).convert(MyMoneyMoney::precToDenom(KMyMoneyGlobalSettings::pricePrecision()));
+ if((*it_p).from() == security)
+ security = (*it_p).to();
+ else
+ security = (*it_p).from();
+ }
+ if (listView())
+ result = result.convert(listView()->baseCurrency().smallestAccountFraction());
+ return result;
+}
+
+void KMyMoneyAccountTreeBaseItem::setName()
+{
+ KMyMoneyAccountTreeBase* lv = dynamic_cast<KMyMoneyAccountTreeBase*>(listView());
+ if (!lv)
+ return;
+ if (isInstitution()) {
+ setPixmap(lv->nameColumn(), m_institution.pixmap());
+ setText(lv->nameColumn(), m_institution.name());
+ } else {
+ setPixmap(lv->nameColumn(), m_account.accountPixmap(false, 22));
+ setText(lv->nameColumn(), m_account.name());
+#ifndef KMM_DESIGNER
+ if(lv->typeColumn()>=0 && !MyMoneyFile::instance()->isStandardAccount(m_account.id()))
+ setText(lv->typeColumn(), KMyMoneyUtils::accountTypeToString(m_account.accountType()));
+#endif
+ }
+}
+
+void KMyMoneyAccountTreeBaseItem::fillColumns()
+{
+ KMyMoneyAccountTreeBase* lv = dynamic_cast<KMyMoneyAccountTreeBase*>(listView());
+ if (!lv)
+ return;
+ if (lv->valueColumn()<0)
+ return;
+ // show the top accounts always in total value
+ if((isOpen() || m_account.accountList().count() == 0) && parent()) {
+
+ // only show the balance, if its a different security/currency
+ if(m_security.id() != listView()->baseCurrency().id()) {
+ setText(lv->balanceColumn(), balance().formatMoney(m_security));
+ }
+ setText(lv->valueColumn(), m_value.formatMoney(listView()->baseCurrency()) + " ");
+
+ } else {
+ setText(lv->balanceColumn(), " ");
+ if(parent())
+ setText(lv->valueColumn(), m_totalValue.formatMoney(listView()->baseCurrency()) + " ");
+ else
+ setText(lv->valueColumn(), m_totalValue.formatMoney(listView()->baseCurrency()));
+ }
+}
+
+void KMyMoneyAccountTreeBaseItem::updateAccount(bool forceTotalUpdate)
+{
+ MyMoneyMoney oldValue = m_value;
+ m_value = value();
+
+ fillColumns();
+
+ // check if we need to tell upstream account objects in the tree
+ // that the value has changed
+ if(oldValue != m_value || forceTotalUpdate) {
+ adjustTotalValue(m_value - oldValue);
+ if (listView())
+ listView()->emitValueChanged();
+ }
+}
+
+void KMyMoneyAccountTreeBaseItem::setOpen(bool open)
+{
+ if (open == isOpen())
+ return;
+ KListViewItem::setOpen(open);
+ fillColumns();
+
+ if(listView())
+ listView()->queueSort();
+}
+
+void KMyMoneyAccountTreeBaseItem::adjustTotalValue(const MyMoneyMoney& diff)
+{
+ m_totalValue += diff;
+
+ // if the entry has no children,
+ // or it is the top entry
+ // or it is currently not open
+ // we need to display the value of it
+ KMyMoneyAccountTreeBase* lv = dynamic_cast<KMyMoneyAccountTreeBase*>(listView());
+ if(!lv)
+ return;
+ if(!firstChild() || !parent() || (!isOpen() && firstChild())) {
+ if(firstChild())
+ setText(lv->balanceColumn(), " ");
+ if(parent())
+ setText(lv->valueColumn(), m_totalValue.formatMoney(listView()->baseCurrency()) + " ");
+ else
+ setText(lv->valueColumn(), m_totalValue.formatMoney(listView()->baseCurrency()));
+ }
+
+ // now make sure, the upstream accounts also get notified about the value change
+ KMyMoneyAccountTreeBaseItem* p = dynamic_cast<KMyMoneyAccountTreeBaseItem*>(parent());
+ if(p != 0) {
+ p->adjustTotalValue(diff);
+ }
+}
+
+int KMyMoneyAccountTreeBaseItem::compare(QListViewItem* i, int col, bool ascending) const
+{
+ KMyMoneyAccountTreeBaseItem* item = dynamic_cast<KMyMoneyAccountTreeBaseItem*>(i);
+ // do special sorting only if
+ // a) name
+ // b) account
+ // c) and different group
+ // d) value column
+ // in all other cases use the standard sorting
+ KMyMoneyAccountTreeBase* lv = dynamic_cast<KMyMoneyAccountTreeBase*>(listView());
+ if(lv && item) {
+ if (col == lv->nameColumn()) {
+ if(m_account.accountGroup() != item->m_account.accountGroup())
+ return (m_account.accountGroup() - item->m_account.accountGroup());
+ } else if (col == lv->balanceColumn() || col == lv->valueColumn()) {
+ MyMoneyMoney result = MyMoneyMoney(text(col)) - MyMoneyMoney(item->text(col));
+ if(result.isNegative())
+ return -1;
+ if(result.isZero())
+ return 0;
+ return 1;
+ }
+ }
+ // do standard sorting here
+ return KListViewItem::compare(i, col, ascending);
+}
+
+void KMyMoneyAccountTreeBaseItem::paintCell(QPainter *p, const QColorGroup & cg, int column, int width, int align)
+{
+ QColorGroup cg2(cg);
+
+ //set item background
+ if(isAlternate())
+ cg2.setColor(QColorGroup::Base, KMyMoneyGlobalSettings::listColor());
+ else
+ cg2.setColor(QColorGroup::Base, KMyMoneyGlobalSettings::listBGColor());
+
+#ifndef KMM_DESIGNER
+ // display base accounts in bold
+ QFont font = KMyMoneyGlobalSettings::listCellFont();
+ if(!parent())
+ font.setBold(true);
+
+ // strike out closed accounts
+ if(m_account.isClosed())
+ font.setStrikeOut(true);
+
+ p->setFont(font);
+#endif
+ //set text color
+ QColor textColour;
+ if(m_negative == true) {
+ textColour = KMyMoneyGlobalSettings::listNegativeValueColor(); //if the item is marked is marked as negative, all columns will be painted negative
+ } else {
+ textColour = m_columnsColor[column]; //otherwise, respect the color for each column
+ }
+ cg2.setColor(QColorGroup::Text, textColour);
+
+ QListViewItem::paintCell(p, cg2, column, width, align);
+}
+
+void KMyMoneyAccountTreeBase::expandCollapseAll(bool expand)
+{
+ QListViewItemIterator it(this);
+ QListViewItem* p;
+ while((p = it.current()) != 0) {
+ p->setOpen(expand);
+ ++it;
+ }
+}
+
+void KMyMoneyAccountTreeBase::slotExpandAll(void)
+{
+ expandCollapseAll(true);
+}
+
+void KMyMoneyAccountTreeBase::slotCollapseAll(void)
+{
+ expandCollapseAll(false);
+}
+
+void KMyMoneyAccountTreeBase::queueSort(void)
+{
+ if (sortColumn() == balanceColumn() || sortColumn() == valueColumn()) {
+ ++m_queuedSort;
+ QTimer::singleShot(100, this, SLOT(slotActivateSort()));
+ }
+}
+
+void KMyMoneyAccountTreeBase::slotActivateSort(void)
+{
+ --m_queuedSort;
+ if(!m_queuedSort)
+ KListView::sort();
+}
+
+void KMyMoneyAccountTreeBaseItem::setNegative(bool isNegative)
+{
+ m_negative = isNegative;
+}
+
+void KMyMoneyAccountTreeBaseItem::setText( int column, const QString &text, const bool &negative)
+{
+ //if negative set the map to negative color according to KMyMoneySettings
+ if(negative) {
+ m_columnsColor[column] = KMyMoneyGlobalSettings::listNegativeValueColor();
+ } else {
+ m_columnsColor[column] = QColorGroup::Text;
+ }
+
+ KListViewItem::setText(column, text);
+}
+
+
+#include "kmymoneyaccounttreebase.moc"
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/widgets/kmymoneyaccounttreebase.h b/kmymoney2/widgets/kmymoneyaccounttreebase.h
new file mode 100644
index 0000000..4ee6a32
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyaccounttreebase.h
@@ -0,0 +1,475 @@
+/***************************************************************************
+ kmymoneyaccounttreebase.h - description
+ -------------------
+ begin : Sat Jan 1 2005
+ copyright : (C) 2005 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYACCOUNTTREEBASE_H
+#define KMYMONEYACCOUNTTREEBASE_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qtimer.h>
+class QDragObject;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klistview.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneyinstitution.h>
+#include <kmymoney/mymoneyprice.h>
+#include <kmymoney/mymoneysecurity.h>
+#include <kmymoney/mymoneybudget.h>
+
+class KMyMoneyAccountTreeBaseItem;
+
+class KMyMoneyAccountTreeBase : public KListView
+{
+ friend class KMyMoneyAccountTreeBaseItem;
+
+ Q_OBJECT
+public:
+ KMyMoneyAccountTreeBase(QWidget* parent = 0, const char *name = 0);
+ virtual ~KMyMoneyAccountTreeBase();
+
+ /**
+ * Modify the text shown in the header of the name column.
+ *
+ * @param txt the text to be used in the header
+ */
+ void setSectionHeader(const QString& txt);
+
+ /**
+ * overridden from base class implementation to return a pointer
+ * to a KMyMoneyAccountTreeBaseItem.
+ *
+ * @return pointer to currently selected item
+ */
+ KMyMoneyAccountTreeBaseItem* selectedItem(void) const;
+
+ /**
+ */
+ void setBaseCurrency(const MyMoneySecurity& currency) { m_baseCurrency = currency; };
+
+ const MyMoneySecurity& baseCurrency(void) const { return m_baseCurrency; };
+
+ void emitValueChanged(void) { emit valueChanged(); };
+
+ /**
+ * restores the layout from the config file
+ * @param group the group to be used from the config file.
+ * At destruction time, we will use this group name to save
+ * the layout.
+ */
+ void restoreLayout(const QString& group);
+
+public slots:
+ /** autoscroll support */
+ void slotStartAutoScroll(void);
+ void slotStopAutoScroll(void);
+ void slotExpandAll(void);
+ void slotCollapseAll(void);
+
+protected:
+ virtual bool acceptDrag (QDropEvent* event) const;
+ virtual void startDrag(void);
+ const KMyMoneyAccountTreeBaseItem* findItem(const QString& id) const;
+
+ /**
+ * This method checks, if account @p accFrom can be dropped onto
+ * account @p accTo.
+ *
+ * @param accFrom source account
+ * @param accTo new parent account for @p accFrom
+ * @retval true drop is ok
+ * @retval false drop is not ok (@p accTo cannot be parent of @p accFrom)
+ */
+ bool dropAccountOnAccount(const MyMoneyAccount& accFrom, const MyMoneyAccount& accTo) const;
+ // virtual void contentsDropEvent(QDropEvent*);
+
+ /**
+ * This member counts the connects to the signals
+ * newAccountParent(const MyMoneyAccount&, const MyMoneyAccount&)) and
+ * newAccountParent(const MyMoneyAccount&, const MyMoneyInstitution&))
+ * in m_accountConnections and m_institutionConnections.
+ */
+ void connectNotify(const char *);
+
+ /**
+ * This member counts the disconnects from the signals
+ * newAccountParent(const MyMoneyAccount&, const MyMoneyAccount&)) and
+ * newAccountParent(const MyMoneyAccount&, const MyMoneyInstitution&))
+ * in m_accountConnections and m_institutionConnections.
+ */
+ void disconnectNotify(const char *);
+
+ void contentsDragMoveEvent( QDragMoveEvent *e );
+
+ /**
+ * Reimplemented for internal reasons.
+ * Further reimplementations should call this function or else
+ * some features may not work correctly.
+ *
+ * The API is unaffected.
+ */
+ virtual void viewportPaintEvent(QPaintEvent*);
+
+ void expandCollapseAll(bool expand);
+
+ void queueSort(void);
+
+protected slots:
+ void slotObjectDropped(QDropEvent* event, QListViewItem* parent, QListViewItem* after);
+
+ /**
+ * Select the object pointed to by @p i. This slot emits selectObject signals
+ * with an emtpy MyMoneyAccount and an empty MyMoneyInstitution object
+ * to deselect current selections. If @p i points to a KMyMoneyAccountTreeItem
+ * object, it emits selectObject() for this item.
+ *
+ * @param i pointer to QListViewItem of object to be selected
+ */
+ void slotSelectObject(QListViewItem *i);
+
+ /**
+ * This slot is connected to the accout list view's contextMenu signal
+ * and checks if the item pointed to by @p i is either an account or institution
+ * and sends out the necessary signal openContextMenu.
+ *
+ * @param lv pointer to KListView
+ * @param i pointer to QListViewItem
+ * @param p position information
+ */
+ void slotOpenContextMenu(KListView* lv, QListViewItem* i, const QPoint& p);
+
+ /**
+ * This slot is connected to the accout list view's executed signal
+ * and checks if the item pointed to by @p i is either an account or institution
+ * and sends out the necessary signal openObject.
+ *
+ * @param i pointer to QListViewItem
+ */
+ void slotOpenObject(QListViewItem* i);
+
+ void slotAutoScroll(void);
+
+ /** Open the folder pointed to by m_dropItem */
+ void slotOpenFolder(void);
+
+ /** override KListView implementation */
+ void cleanItemHighlighter(void);
+
+ void slotActivateSort(void);
+
+private:
+ MyMoneySecurity m_baseCurrency;
+ bool m_accountConnections;
+ bool m_institutionConnections;
+ QTimer m_autoopenTimer;
+ QTimer m_autoscrollTimer;
+ int m_autoscrollTime;
+ int m_autoscrollAccel;
+ QListViewItem* m_dropItem;
+ QRect m_lastDropHighlighter;
+ int m_queuedSort;
+ int m_nameColumn;
+ int m_typeColumn;
+ int m_valueColumn;
+ int m_balanceColumn;
+ QString m_configGroup;
+
+public:
+ int typeColumn(void) const { return m_typeColumn; }
+ int nameColumn(void) const { return m_nameColumn; }
+ int balanceColumn(void) const { return m_balanceColumn; }
+ int valueColumn(void) const { return m_valueColumn; }
+
+ void showType(void);
+ void showValue(void);
+
+
+signals:
+ /**
+ * This signal is emitted whenever an object in the view is selected
+ *
+ * @param obj reference to actual MyMoneyObject (is either
+ * MyMoneyAccount or MyMoneyInstitution depending on selected item)
+ */
+ void selectObject(const MyMoneyObject& obj);
+
+ /**
+ * This signal is emitted whenever the user requests the context menu for an object
+ *
+ * @param obj reference to actual MyMoneyObject (is either
+ * MyMoneyAccount or MyMoneyInstitution depending on selected item)
+ */
+ void openContextMenu(const MyMoneyObject& obj);
+
+ /**
+ * This signal is emitted whenever the user requests to open an object
+ *
+ * @param obj reference to actual MyMoneyObject (is either
+ * MyMoneyAccount or MyMoneyInstitution depending on selected item)
+ */
+ void openObject(const MyMoneyObject& obj);
+
+ /**
+ * This signal is emitted whenever the value of an object changed
+ */
+ void valueChanged(void);
+
+ /**
+ * This signal is emitted, when the user selected to reparent the
+ * account @p acc to be a subordinate account of @p parent.
+ *
+ * @param acc const reference to account to be reparented
+ * @param parent const reference to new parent account
+ */
+ void reparent(const MyMoneyAccount& acc, const MyMoneyAccount& parent);
+
+ /**
+ * This signal is emitted, when the user selected to reparent the
+ * account @p acc to be a subordinate account of @p institution.
+ *
+ * @param acc const reference to account to be reparented
+ * @param institution const reference to new institution
+ */
+ void reparent(const MyMoneyAccount& acc, const MyMoneyInstitution& institution);
+};
+
+class KMyMoneyAccountTreeBaseItem : public KListViewItem
+{
+public:
+ typedef enum {
+ Account,
+ Institution
+ } KMyMoneyAccountTreeItemType;
+
+ /**
+ * Constructor to be used to construct an institution entry
+ * object.
+ *
+ * @param parent pointer to the KListView object this entry should be
+ * added to.
+ * @param institution const reference to MyMoneyInstitution for which
+ * the KListView entry is constructed
+ */
+ KMyMoneyAccountTreeBaseItem(KListView *parent, const MyMoneyInstitution& institution);
+
+ /**
+ * Constructor to be used to construct a standard account entry object (e.g. Asset,
+ * Liability, etc.).
+ *
+ * @param parent pointer to the KListView object this entry should be
+ * added to.
+ * @param account const reference to MyMoneyAccount for which
+ * the KListView entry is constructed
+ * @param security const reference to the security used to show the value. Usually
+ * one should pass MyMoneyFile::baseCurrency() here.
+ * @param name name of the account to be used instead of the one stored with @p account
+ * If empty, the one stored with @p account will be used. Default: empty
+ */
+ KMyMoneyAccountTreeBaseItem(KListView *parent, const MyMoneyAccount& account, const MyMoneySecurity& security = MyMoneySecurity(), const QString& name = QString());
+
+ /**
+ * Constructor to be used to construct an account entry
+ * object.
+ *
+ * @param parent pointer to the parent KAccountListView object this entry should be
+ * added to.
+ * @param account const reference to MyMoneyAccount for which
+ * the KListView entry is constructed
+ * @param price price to be used to calculate value (defaults to 1)
+ * This is used for accounts denominated in foreign currencies or stocks
+ * @param security const reference to the security used to show the value. Usually
+ * one should pass MyMoneyFile::baseCurrency() here.
+ */
+ KMyMoneyAccountTreeBaseItem(KMyMoneyAccountTreeBaseItem *parent, const MyMoneyAccount& account, const QValueList<MyMoneyPrice>& price = QValueList<MyMoneyPrice>(), const MyMoneySecurity& security = MyMoneySecurity());
+
+ ~KMyMoneyAccountTreeBaseItem();
+
+ /**
+ * populates the columns. Derived classes should override this. The
+ * name column is already filled and should not be changed.
+ */
+ virtual void fillColumns();
+
+ /**
+ * This method loads new information into the item and updates the fields
+ *
+ * @param forceTotalUpdate set to true to force update of total values
+ * (used in constructor, should not be necessary to
+ * be set by application code)
+ *
+ */
+ void updateAccount(bool forceTotalUpdate = false);
+
+ /**
+ * This method checks, if the item contains an account or not.
+ *
+ * @retval true item holds an account
+ * @retval false item does not hold an account
+ */
+ bool isAccount(void) const { return m_type == Account; };
+
+ /**
+ * This method checks, if the item contains an institution or not.
+ *
+ * @retval true item holds an institution
+ * @retval false item does not hold an institution
+ */
+ bool isInstitution(void) const { return m_type == Institution; };
+
+ /**
+ * This method returns the id of the object held by this item
+ *
+ * @return const reference to id of object
+ */
+ const QString& id(void) const;
+
+ /**
+ * Helper method to show the right order
+ */
+ int compare(QListViewItem* i, int col, bool ascending) const;
+
+ /**
+ * If o is TRUE all child items are shown initially. The user can
+ * hide them by clicking the - icon to the left of the item. If
+ * o is FALSE, the children of this item are initially hidden.
+ * The user can show them by clicking the + icon to the left of the item.
+ *
+ * Overrides KListViewItem::setOpen() and exchanges the value field
+ * with either the value of this account and its subaccounts if @p o
+ * is false or the value of this account if @p o is true.
+ *
+ * @param o show item open (true) or closed (false)
+ */
+ virtual void setOpen(bool o);
+
+ /**
+ * This method is re-implemented from QListViewItem::paintCell().
+ * Besides the standard implementation, the QPainter is set
+ * according to the applications settings.
+ */
+ void paintCell(QPainter *p, const QColorGroup & cg, int column, int width, int align);
+
+ /**
+ * Convenience method to return casted pointer
+ */
+ KMyMoneyAccountTreeBase* listView(void) const { return dynamic_cast<KMyMoneyAccountTreeBase*>(KListViewItem::listView()); };
+
+ /**
+ * Return the type of entry
+ *
+ * @return type of this entry.
+ */
+ KMyMoneyAccountTreeItemType entryType(void) const { return m_type; };
+
+ /**
+ * This method returns a const reference to this item (either the m_account or m_institution)
+ * depending on m_type.
+ *
+ * @return reference to the MyMoneyObject of this entry
+ */
+ const MyMoneyObject& itemObject(void) const;
+
+ /**
+ * This method returns the value of this account and all it's subordinate accounts.
+ *
+ * @return value of this account including all subordinate accounts
+ */
+ const MyMoneyMoney& totalValue(void) const { return m_totalValue; };
+
+ /**
+ * This method adjusts the current total value by @p diff.
+ *
+ * @param diff difference to be added to the current value to
+ * get the new value
+ */
+ void adjustTotalValue(const MyMoneyMoney& diff);
+
+ /**
+ * Checks whether this object is a child of the one passed
+ * by @p item.
+ *
+ * @param item pointer to other KMyMoneyAccountTreeItem that
+ * should be checked for parent/grand-parenthood of this
+ * object
+ * @retval true @p this object is a decendant of @p item
+ * @retval false @p this object is no decendant of @p item
+ */
+ bool isChildOf(const QListViewItem* const item) const;
+
+ /**
+ * Sets the whole item to be shown with negative colors
+ */
+ void setNegative(bool isNegative);
+
+ /**
+ * Sets the text of a given column. @param negative indicates whether it should
+ * be shown as negative number or not
+ */
+ void setText( int column, const QString &text, const bool &negative = false );
+
+protected:
+ /**
+ * Returns the current balance of this account.
+ *
+ * This is a pure virtual function, to allow subclasses to calculate
+ * the balance in different ways.
+ *
+ * Parent items in the tree will only be recomputed if the balance() for
+ * a child changes.
+ * @param account Account to get the balance for
+ * @return Balance of this account
+ */
+ virtual MyMoneyMoney balance() const = 0;
+
+ /**
+ * Computes and returns the current value of the account held by this item.
+ * This is the same as balance() but in the currency of the view.
+ * if value() changed since the item has been displayed, updateAccount()
+ * will notify the parent.
+ * @return value of the account held by this item
+ */
+ MyMoneyMoney value() const;
+
+protected:
+ MyMoneyMoney m_value;
+ QValueList<MyMoneyPrice> m_price;
+ MyMoneySecurity m_security;
+ MyMoneyMoney m_totalValue;
+ MyMoneyAccount m_account;
+ QMap<int, QColor> m_columnsColor;
+ bool m_negative;
+
+private:
+ MyMoneyInstitution m_institution;
+ KMyMoneyAccountTreeItemType m_type;
+
+ /**
+ * fills the name column with text and pixmap
+ */
+ void setName();
+
+};
+
+#endif
+
diff --git a/kmymoney2/widgets/kmymoneyaccounttreebudget.cpp b/kmymoney2/widgets/kmymoneyaccounttreebudget.cpp
new file mode 100644
index 0000000..cd1da0b
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyaccounttreebudget.cpp
@@ -0,0 +1,84 @@
+/***************************************************************************
+ kmymoneyaccounttreebudget.cpp - description
+ -------------------
+ begin : Tue Feb 21 2006
+ copyright : (C) 2005 by Darren Gould
+ email : Darren Gould <darren_gould@gmx.de>
+***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include <kmymoneyaccounttreebudget.h>
+
+KMyMoneyAccountTreeBudget::KMyMoneyAccountTreeBudget(QWidget* parent, const char* name) :
+ KMyMoneyAccountTreeBase::KMyMoneyAccountTreeBase(parent, name)
+{
+ showType();
+ showValue();
+}
+
+void KMyMoneyAccountTreeBudget::slotSelectObject(const QListViewItem* i)
+{
+ emit selectObject(MyMoneyInstitution());
+ emit selectObject(MyMoneyAccount());
+
+ const KMyMoneyAccountTreeBaseItem* item = dynamic_cast<const KMyMoneyAccountTreeBaseItem*>(i);
+ if(item) {
+ emit openObject(item->itemObject());
+ }
+}
+
+KMyMoneyAccountTreeBudgetItem::KMyMoneyAccountTreeBudgetItem(KListView *parent, const MyMoneyAccount& account, const MyMoneyBudget &budget, const MyMoneySecurity& security, const QString& name) :
+ KMyMoneyAccountTreeBaseItem(parent, account, security, name),
+ m_budget(budget)
+{
+ updateAccount(true);
+}
+
+KMyMoneyAccountTreeBudgetItem::KMyMoneyAccountTreeBudgetItem(KMyMoneyAccountTreeBudgetItem *parent, const MyMoneyAccount& account, const MyMoneyBudget& budget, const QValueList<MyMoneyPrice>& price, const MyMoneySecurity& security) :
+ KMyMoneyAccountTreeBaseItem(parent, account, price, security),
+ m_budget(budget)
+{
+ updateAccount(true);
+}
+
+
+KMyMoneyAccountTreeBudgetItem::~KMyMoneyAccountTreeBudgetItem()
+{
+}
+
+void KMyMoneyAccountTreeBudgetItem::setBudget(const MyMoneyBudget& budget)
+{
+ m_budget = budget;
+ updateAccount();
+}
+
+MyMoneyMoney KMyMoneyAccountTreeBudgetItem::balance() const
+{
+ MyMoneyMoney result = MyMoneyMoney();
+ // find out if the account is budgeted
+ MyMoneyBudget::AccountGroup budgetAccount = m_budget.account( m_account.id() );
+ if ( budgetAccount.id() == m_account.id() ) {
+ result = budgetAccount.balance();
+ switch(budgetAccount.budgetLevel()) {
+ case MyMoneyBudget::AccountGroup::eMonthly:
+ result = result * 12;
+ break;
+
+ default:
+ break;
+ }
+ }
+ return result;
+}
+
+#include "kmymoneyaccounttreebudget.moc"
diff --git a/kmymoney2/widgets/kmymoneyaccounttreebudget.h b/kmymoney2/widgets/kmymoneyaccounttreebudget.h
new file mode 100644
index 0000000..86c1b07
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyaccounttreebudget.h
@@ -0,0 +1,112 @@
+/***************************************************************************
+ kmymoneyaccounttreebudget.h - description
+ -------------------
+ begin : Tue Feb 21 2006
+ copyright : (C) 2005 by Darren Gould
+ email : Darren Gould <darren_gould@gmx.de>
+***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYACCOUNTTREEBUDGET_H
+#define KMYMONEYACCOUNTTREEBUDGET_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qtimer.h>
+class QDragObject;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klistview.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include "kmymoneyaccounttree.h"
+#include "../../kmymoney/mymoneybudget.h"
+
+class KMyMoneyAccountTreeBudgetItem;
+
+class KMyMoneyAccountTreeBudget : public KMyMoneyAccountTreeBase
+{
+ Q_OBJECT
+public:
+ KMyMoneyAccountTreeBudget(QWidget* parent = 0, const char *name = 0);
+ virtual ~KMyMoneyAccountTreeBudget() {}
+
+public slots:
+ void slotSelectObject(const QListViewItem* i);
+
+};
+
+class KMyMoneyAccountTreeBudgetItem : public KMyMoneyAccountTreeBaseItem
+{
+public:
+
+ /**
+ * Constructor to be used to construct an account
+ * entry object for a budget.
+ *
+ * @param parent pointer to the parent KAccountListView object this entry should be
+ * added to.
+ * @param account const reference to MyMoneyAccount for which
+ * the KListView entry is constructed
+ * @param budget const reference to the budget to
+ * which the account belongs
+ * @param price price to be used to calculate value (defaults to 1)
+ * This is used for accounts denominated in foreign currencies or stocks
+ * @param security const reference to the security used to show the value. Usually
+ * one should pass MyMoneyFile::baseCurrency() here.
+ */
+ KMyMoneyAccountTreeBudgetItem(KMyMoneyAccountTreeBudgetItem *parent, const MyMoneyAccount& account, const MyMoneyBudget& budget, const QValueList<MyMoneyPrice>& price = QValueList<MyMoneyPrice>(), const MyMoneySecurity& security = MyMoneySecurity());
+
+ /**
+ * Constructor to be used to construct an account
+ * entry object for a budget.
+ *
+ * @param parent pointer to the parent KAccountListView object this entry should be
+ * added to.
+ * @param account const reference to MyMoneyAccount for which
+ * the KListView entry is constructed
+ * @param budget const reference to the budget to
+ * which the account belongs
+ * @param security const reference to the security used to show the value. Usually
+ * one should pass MyMoneyFile::baseCurrency() here.
+ * @param name name of the account to be used instead of the one stored with @p account
+ * If empty, the one stored with @p account will be used. Default: empty
+ */
+ KMyMoneyAccountTreeBudgetItem(KListView *parent, const MyMoneyAccount& account, const MyMoneyBudget &budget, const MyMoneySecurity& security = MyMoneySecurity(), const QString& name = QString());
+
+ ~KMyMoneyAccountTreeBudgetItem();
+
+ void setBudget(const MyMoneyBudget& budget);
+
+protected:
+ /**
+ * Returns the current balance of this account.
+ *
+ * This is a pure virtual function, to allow subclasses to calculate
+ * the balance in different ways.
+ *
+ * Parent items in the tree will only be recomputed if the balance() for
+ * a son changes.
+ * @param account Account to get the balance for
+ * @return Balance of this account
+ */
+ MyMoneyMoney balance() const;
+
+private:
+ MyMoneyBudget m_budget;
+};
+
+#endif
+
diff --git a/kmymoney2/widgets/kmymoneyaccounttreeforecast.cpp b/kmymoney2/widgets/kmymoneyaccounttreeforecast.cpp
new file mode 100644
index 0000000..0da5194
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyaccounttreeforecast.cpp
@@ -0,0 +1,401 @@
+/***************************************************************************
+ kmymoneyaccounttreeforecast.cpp
+ -------------------
+ begin : Fri Aug 01 2008
+ copyright : (C) 2008 by Alvaro Soliverez
+ email : asoliverez@gmail.com
+***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoneyaccounttreeforecast.h>
+#include "../kmymoney2.h"
+#include "../kmymoneyglobalsettings.h"
+#include "../mymoney/mymoneyforecast.h"
+#include "../reports/reportaccount.h"
+
+using namespace reports;
+
+KMyMoneyAccountTreeForecast::KMyMoneyAccountTreeForecast(QWidget* parent, const char* name) :
+ KMyMoneyAccountTreeBase::KMyMoneyAccountTreeBase(parent, name)
+{
+ setResizeMode(QListView::NoColumn);
+}
+
+void KMyMoneyAccountTreeForecast::showAccount( void )
+{
+ addColumn(i18n("Account"));
+}
+
+void KMyMoneyAccountTreeForecast::clearColumns( void )
+{
+ clear();
+ while(columns() > 0) {
+ removeColumn(0);
+ }
+}
+
+void KMyMoneyAccountTreeForecast::showSummary(MyMoneyForecast& forecast)
+{
+ int daysToBeginDay;
+
+ //add cycle interval columns
+ addColumn(i18n("Current"), -1);
+
+ //if beginning of forecast is today, set the begin day to next cycle to avoid repeating the first cycle
+ if(QDate::currentDate() < forecast.beginForecastDate()) {
+ daysToBeginDay = QDate::currentDate().daysTo(forecast.beginForecastDate());
+ } else {
+ daysToBeginDay = forecast.accountsCycle();
+ }
+ for(int i = 0; ((i*forecast.accountsCycle())+daysToBeginDay) <= forecast.forecastDays(); ++i) {
+ int intervalDays = ((i*forecast.accountsCycle())+daysToBeginDay);
+ QString columnName = i18n("%1 days").arg(intervalDays, 0, 10);
+ addColumn(columnName, -1);
+ }
+
+ //add variation columns
+ addColumn(i18n("Total variation"), -1);
+
+ //align columns
+ for(int i = 1; i < columns(); ++i) {
+ setColumnAlignment(i, Qt::AlignRight);
+ }
+
+}
+
+void KMyMoneyAccountTreeForecast::showDetailed(MyMoneyForecast& forecast)
+{
+ //add cycle interval columns
+ addColumn(i18n("Current"), -1);
+
+ for(int i = 1; i <= forecast.forecastDays(); ++i) {
+ QDate forecastDate = QDate::currentDate().addDays(i);
+ QString columnName = KGlobal::locale()->formatDate(forecastDate, true);
+ addColumn(columnName, -1);
+ }
+
+ //add variation columns
+ addColumn(i18n("Total variation"), -1);
+
+ //align columns
+ for(int i = 1; i < columns(); ++i) {
+ setColumnAlignment(i, Qt::AlignRight);
+ }
+}
+
+void KMyMoneyAccountTreeForecast::showAdvanced(MyMoneyForecast& forecast)
+{
+ int daysToBeginDay;
+
+ //if beginning of forecast is today, set the begin day to next cycle to avoid repeating the first cycle
+ if(QDate::currentDate() < forecast.beginForecastDate()) {
+ daysToBeginDay = QDate::currentDate().daysTo(forecast.beginForecastDate());
+ } else {
+ daysToBeginDay = forecast.accountsCycle();
+ }
+
+ //add columns
+ for(int i = 1; ((i * forecast.accountsCycle()) + daysToBeginDay) <= forecast.forecastDays(); ++i) {
+ int col = addColumn(i18n("Min Bal %1").arg(i), -1);
+ setColumnAlignment(col, Qt::AlignRight);
+ addColumn(i18n("Min Date %1").arg(i), -1);
+ }
+ for(int i = 1; ((i * forecast.accountsCycle()) + daysToBeginDay) <= forecast.forecastDays(); ++i) {
+ int col = addColumn(i18n("Max Bal %1").arg(i), -1);
+ setColumnAlignment(col, Qt::AlignRight);
+ addColumn(i18n("Max Date %1").arg(i), -1);
+ }
+ int col = addColumn(i18n("Average"), -1);
+ setColumnAlignment(col, Qt::AlignRight);
+}
+
+void KMyMoneyAccountTreeForecast::showBudget(MyMoneyForecast& forecast)
+{
+ QDate forecastStartDate = forecast.forecastStartDate();
+ QDate forecastEndDate = forecast.forecastEndDate();
+
+ //add cycle interval columns
+ QDate f_date = forecastStartDate;
+ for(; f_date <= forecastEndDate; f_date = f_date.addMonths(1)) {
+ QString columnName = QDate::longMonthName(f_date.month());
+ addColumn(columnName, -1);
+ }
+ //add total column
+ addColumn(i18n("Total"), -1);
+
+
+ //align columns
+ for(int i = 1; i < columns(); ++i) {
+ setColumnAlignment(i, Qt::AlignRight);
+ }
+}
+
+void KMyMoneyAccountTreeForecast::slotSelectObject(const QListViewItem* i)
+{
+ emit selectObject(MyMoneyInstitution());
+ emit selectObject(MyMoneyAccount());
+
+ const KMyMoneyAccountTreeBaseItem* item = dynamic_cast<const KMyMoneyAccountTreeBaseItem*>(i);
+ if(item) {
+ emit openObject(item->itemObject());
+ }
+}
+
+KMyMoneyAccountTreeForecastItem::KMyMoneyAccountTreeForecastItem(KListView *parent, const MyMoneyAccount& account, const MyMoneyForecast &forecast, const MyMoneySecurity& security, const QString& name) :
+ KMyMoneyAccountTreeBaseItem(parent, account, security, name),
+ m_forecast(forecast)
+{
+ updateAccount(true);
+
+}
+
+KMyMoneyAccountTreeForecastItem::KMyMoneyAccountTreeForecastItem(KMyMoneyAccountTreeForecastItem *parent, const MyMoneyAccount& account, const MyMoneyForecast& forecast, const QValueList<MyMoneyPrice>& price, const MyMoneySecurity& security, const EForecastViewType forecastType) :
+ KMyMoneyAccountTreeBaseItem(parent, account, price, security),
+ m_forecast(forecast),
+ m_forecastType(forecastType)
+{
+ //setForecastViewType(forecastViewType);
+ updateAccount(true);
+ switch(forecastViewType())
+ {
+ case eSummary:
+ updateSummary();
+ break;
+ case eDetailed:
+ updateDetailed();
+ break;
+ case eBudget:
+ updateBudget();
+ break;
+ default:
+ break;
+ }
+}
+
+
+KMyMoneyAccountTreeForecastItem::~KMyMoneyAccountTreeForecastItem()
+{
+}
+
+void KMyMoneyAccountTreeForecastItem::setForecast(const MyMoneyForecast& forecast)
+{
+ m_forecast = forecast;
+ updateAccount();
+}
+
+void KMyMoneyAccountTreeForecastItem::updateSummary()
+{
+ MyMoneyMoney amountMM;
+ int it_c = 1; // iterator for the columns of the listview
+ MyMoneyFile* file = MyMoneyFile::instance();
+ int daysToBeginDay;
+
+ if(QDate::currentDate() < m_forecast.beginForecastDate()) {
+ daysToBeginDay = QDate::currentDate().daysTo(m_forecast.beginForecastDate());
+ } else {
+ daysToBeginDay = m_forecast.accountsCycle();
+ }
+
+ MyMoneySecurity currency;
+ if(m_account.isInvest()) {
+ MyMoneySecurity underSecurity = file->security(m_account.currencyId());
+ currency = file->security(underSecurity.tradingCurrency());
+ } else {
+ currency = file->security(m_account.currencyId());
+ }
+
+
+ //add current balance column
+ QDate summaryDate = QDate::currentDate();
+ amountMM = m_forecast.forecastBalance(m_account, summaryDate);
+
+ //calculate the balance in base currency for the total row
+ setAmount(it_c, amountMM);
+ setValue(it_c, amountMM, summaryDate);
+ showAmount(it_c, amountMM, currency);
+ it_c++;
+
+ //iterate through all other columns
+ for(QDate summaryDate = QDate::currentDate().addDays(daysToBeginDay); summaryDate <= m_forecast.forecastEndDate();summaryDate = summaryDate.addDays(m_forecast.accountsCycle()), ++it_c) {
+ amountMM = m_forecast.forecastBalance(m_account, summaryDate);
+
+ //calculate the balance in base currency for the total row
+ setAmount(it_c, amountMM);
+ setValue(it_c, amountMM, summaryDate);
+ showAmount(it_c, amountMM, currency);
+ }
+ //calculate and add variation per cycle
+ setNegative(m_forecast.accountTotalVariation(m_account).isNegative());
+ setAmount(it_c, m_forecast.accountTotalVariation(m_account));
+ setValue(it_c, m_forecast.accountTotalVariation(m_account), m_forecast.forecastEndDate());
+ showAmount(it_c, m_forecast.accountTotalVariation(m_account), currency);
+}
+
+void KMyMoneyAccountTreeForecastItem::updateDetailed()
+{
+ QString amount;
+ QString vAmount;
+ MyMoneyMoney vAmountMM;
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ MyMoneySecurity currency;
+ if(m_account.isInvest()) {
+ MyMoneySecurity underSecurity = file->security(m_account.currencyId());
+ currency = file->security(underSecurity.tradingCurrency());
+ } else {
+ currency = file->security(m_account.currencyId());
+ }
+
+ int it_c = 1; // iterator for the columns of the listview
+
+ for(QDate forecastDate = QDate::currentDate(); forecastDate <= m_forecast.forecastEndDate(); ++it_c, forecastDate = forecastDate.addDays(1)) {
+ MyMoneyMoney amountMM = m_forecast.forecastBalance(m_account, forecastDate);
+
+ //calculate the balance in base currency for the total row
+ setAmount(it_c, amountMM);
+ setValue(it_c, amountMM, forecastDate);
+ showAmount(it_c, amountMM, currency);
+ }
+
+ //calculate and add variation per cycle
+ vAmountMM = m_forecast.accountTotalVariation(m_account);
+ setAmount(it_c, vAmountMM);
+ setValue(it_c, vAmountMM, m_forecast.forecastEndDate());
+ showAmount(it_c, vAmountMM, currency);
+}
+
+void KMyMoneyAccountTreeForecastItem::updateBudget()
+{
+ MyMoneySecurity currency;
+ MyMoneyMoney tAmountMM;
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+ int it_c = 1; // iterator for the columns of the listview
+ QDate forecastDate = m_forecast.forecastStartDate();
+
+ if(m_account.isInvest()) {
+ MyMoneySecurity underSecurity = file->security(m_account.currencyId());
+ currency = file->security(underSecurity.tradingCurrency());
+ } else {
+ currency = file->security(m_account.currencyId());
+ }
+
+ //iterate columns
+ for(; forecastDate <= m_forecast.forecastEndDate(); forecastDate = forecastDate.addMonths(1), ++it_c) {
+ MyMoneyMoney amountMM;
+ amountMM = m_forecast.forecastBalance(m_account,forecastDate);
+ if(m_account.accountType() == MyMoneyAccount::Expense)
+ amountMM = -amountMM;
+
+ tAmountMM += amountMM;
+ setAmount(it_c, amountMM);
+ setValue(it_c, amountMM, forecastDate);
+ showAmount(it_c, amountMM, currency);
+ }
+
+ //set total column
+ setAmount(it_c, tAmountMM);
+ setValue(it_c, tAmountMM, m_forecast.forecastEndDate());
+ showAmount(it_c, tAmountMM, currency);
+}
+
+MyMoneyMoney KMyMoneyAccountTreeForecastItem::balance() const
+{
+ return MyMoneyMoney();
+}
+
+void KMyMoneyAccountTreeForecastItem::showAmount(int column, const MyMoneyMoney amount, const MyMoneySecurity security)
+{
+ setText(column, amount.formatMoney(m_account, security), amount.isNegative() );
+}
+
+void KMyMoneyAccountTreeForecastItem::adjustParentValue(int column, const MyMoneyMoney& value)
+{
+ m_values[column] += value;
+ m_values[column] = m_values[column].convert(listView()->baseCurrency().smallestAccountFraction());
+
+ // if the entry has no children,
+ // or it is the top entry
+ // or it is currently not open
+ // we need to display the value of it
+ KMyMoneyAccountTreeForecast* lv = dynamic_cast<KMyMoneyAccountTreeForecast*>(listView());
+ if(!lv)
+ return;
+ if(!firstChild() || !parent() || (!isOpen() && firstChild())
+ || depth() == 1 ) {
+ if(firstChild())
+ setText(column, " ");
+
+ showAmount(column, m_values[column], listView()->baseCurrency());
+ }
+
+ // now make sure, the upstream accounts also get notified about the value change
+ KMyMoneyAccountTreeForecastItem* p = dynamic_cast<KMyMoneyAccountTreeForecastItem*>(parent());
+ if(p != 0) {
+ p->adjustParentValue(column, value);
+ }
+}
+
+void KMyMoneyAccountTreeForecastItem::setValue(int column, MyMoneyMoney amount, QDate forecastDate)
+{
+ KMyMoneyAccountTreeForecastItem* p = dynamic_cast<KMyMoneyAccountTreeForecastItem*>(parent());
+
+ //calculate the balance in base currency for the total row
+ if(m_account.currencyId() != listView()->baseCurrency().id()) {
+ ReportAccount repAcc = ReportAccount(m_account.id());
+ MyMoneyMoney curPrice = repAcc.baseCurrencyPrice(forecastDate);
+ MyMoneyMoney baseAmountMM = amount * curPrice;
+ m_values[column] = baseAmountMM.convert(listView()->baseCurrency().smallestAccountFraction());
+
+ if(p != 0) {
+ p->adjustParentValue(column, m_values[column]);
+ }
+ } else {
+ m_values[column] += amount;
+ if(p != 0) {
+ p->adjustParentValue(column, amount);
+ }
+ }
+}
+
+void KMyMoneyAccountTreeForecastItem::setAmount(int column, MyMoneyMoney amount)
+{
+ m_amounts[column] = amount;
+}
+
+void KMyMoneyAccountTreeForecastItem::setOpen(bool open)
+{
+ if (open == isOpen())
+ return;
+ KMyMoneyAccountTreeBaseItem::setOpen(open);
+
+ if(!open)
+ {
+ for(int i = 1; i < listView()->columns(); ++i)
+ {
+ showAmount(i, m_values[i], listView()->baseCurrency());
+ }
+ } else if (depth() > 1) {
+ for(int i = 1; i < listView()->columns(); ++i)
+ {
+ showAmount(i, m_amounts[i], m_security);
+ }
+ }
+}
+
+#include "kmymoneyaccounttreeforecast.moc"
diff --git a/kmymoney2/widgets/kmymoneyaccounttreeforecast.h b/kmymoney2/widgets/kmymoneyaccounttreeforecast.h
new file mode 100644
index 0000000..925d2e9
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyaccounttreeforecast.h
@@ -0,0 +1,168 @@
+/***************************************************************************
+ kmymoneyaccounttreeforecast.h
+ -------------------
+ begin : Fri Aug 01 2008
+ copyright : (C) 2008 by Alvaro Soliverez
+ email : asoliverez@gmail.com
+***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYACCOUNTTREEFORECAST_H
+#define KMYMONEYACCOUNTTREEFORECAST_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qtimer.h>
+class QDragObject;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klistview.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include "kmymoneyaccounttree.h"
+#include "../../kmymoney/mymoneyforecast.h"
+
+class KMyMoneyAccountTreeForecastItem;
+
+class KMyMoneyAccountTreeForecast : public KMyMoneyAccountTreeBase
+{
+ Q_OBJECT
+ public:
+ KMyMoneyAccountTreeForecast(QWidget* parent = 0, const char *name = 0);
+ virtual ~KMyMoneyAccountTreeForecast() {}
+
+ void showSummary(MyMoneyForecast& forecast);
+ void showDetailed(MyMoneyForecast& forecast);
+ void showAdvanced(MyMoneyForecast& forecast);
+ void showBudget(MyMoneyForecast& forecast);
+ void showAccount(void);
+ void clearColumns(void);
+
+ public slots:
+ void slotSelectObject(const QListViewItem* i);
+
+};
+
+class KMyMoneyAccountTreeForecastItem : public KMyMoneyAccountTreeBaseItem
+{
+public:
+
+ enum EForecastViewType { eSummary = 0, eDetailed, eAdvanced, eBudget, eUndefined };
+
+ /**
+ * Constructor to be used to construct an account
+ * entry object for a forecast.
+ *
+ * @param parent pointer to the parent KAccountListView object this entry should be
+ * added to.
+ * @param account const reference to MyMoneyAccount for which
+ * the KListView entry is constructed
+ * @param forecast const reference to the forecast to
+ * which the account belongs
+ * @param price price to be used to calculate value (defaults to 1)
+ * This is used for accounts denominated in foreign currencies or stocks
+ * @param security const reference to the security used to show the value. Usually
+ * one should pass MyMoneyFile::baseCurrency() here.
+ */
+ KMyMoneyAccountTreeForecastItem(KMyMoneyAccountTreeForecastItem *parent, const MyMoneyAccount& account, const MyMoneyForecast& forecast, const QValueList<MyMoneyPrice>& price = QValueList<MyMoneyPrice>(), const MyMoneySecurity& security = MyMoneySecurity(), const EForecastViewType forecastViewType = eUndefined);
+
+ /**
+ * Constructor to be used to construct an account
+ * entry object for a forecast.
+ *
+ * @param parent pointer to the parent KAccountListView object this entry should be
+ * added to.
+ * @param account const reference to MyMoneyAccount for which
+ * the KListView entry is constructed
+ * @param forecast const reference to the forecast to
+ * which the account belongs
+ * @param security const reference to the security used to show the value. Usually
+ * one should pass MyMoneyFile::baseCurrency() here.
+ * @param name name of the account to be used instead of the one stored with @p account
+ * If empty, the one stored with @p account will be used. Default: empty
+ */
+ KMyMoneyAccountTreeForecastItem(KListView *parent, const MyMoneyAccount& account, const MyMoneyForecast &forecast, const MyMoneySecurity& security = MyMoneySecurity(), const QString& name = QString());
+
+ ~KMyMoneyAccountTreeForecastItem();
+
+ /**
+ * Sets the forecast object
+ */
+ void setForecast(const MyMoneyForecast& forecast);
+
+ /**
+ * updates the item with summary information. Used in Summary tab of Forecast View
+ */
+ void updateSummary(void);
+
+ /**
+ * updates the item with detailed information. Used in Detailed tab of Forecast View
+ */
+ void updateDetailed(void);
+
+ /**
+ * updates the item with budget forecast information. Used in Budget tab of Forecast View
+ */
+ void updateBudget(void);
+
+ /**
+ * sets when to begin a forecast cycle. This is used when showing forecast information per cycle, eg.
+ * on the summary tab of forecast view.
+ */
+ void setDaysToBeginDay(int _days) {m_daysToBeginDay = _days;}
+
+ /**
+ * sets the type of forecast that the time will show, eg. summary, detailed, budget
+ */
+ void setForecastViewType(EForecastViewType forecastType) { m_forecastType = forecastType; }
+
+ /**
+ * returns the forecast type of the item
+ */
+ EForecastViewType forecastViewType(void) { return m_forecastType; }
+
+ /**
+ * it executes some logic specific to this class before calling the same method on the base class
+ */
+ virtual void setOpen(bool o);
+
+protected:
+ /**
+ * Returns the current balance of this account.
+ *
+ * This is a pure virtual function, to allow subclasses to calculate
+ * the balance in different ways.
+ *
+ * Parent items in the tree will only be recomputed if the balance() for
+ * a son changes.
+ * @param account Account to get the balance for
+ * @return Balance of this account
+ */
+ MyMoneyMoney balance() const;
+ void showAmount(int column, const MyMoneyMoney amount, const MyMoneySecurity security);
+ void adjustParentValue(int column, const MyMoneyMoney& value);
+ void setValue(int column, MyMoneyMoney amount, QDate forecastDate);
+ void setAmount(int column, MyMoneyMoney amount);
+
+private:
+ MyMoneyForecast m_forecast;
+ int m_daysToBeginDay;
+ QMap<int, MyMoneyMoney> m_values;
+ QMap<int, MyMoneyMoney> m_amounts;
+ EForecastViewType m_forecastType;
+};
+
+#endif
+
diff --git a/kmymoney2/widgets/kmymoneybriefschedule.cpp b/kmymoney2/widgets/kmymoneybriefschedule.cpp
new file mode 100644
index 0000000..82776af
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneybriefschedule.cpp
@@ -0,0 +1,191 @@
+/***************************************************************************
+ kmymoneybriefschedule.cpp - description
+ -------------------
+ begin : Sun Jul 6 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlabel.h>
+#include <qlineedit.h>
+#include <qtextedit.h>
+#include <qtoolbutton.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kglobal.h>
+#include <klocale.h>
+#include <kiconloader.h>
+#include <kpushbutton.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyscheduled.h>
+#include "kmymoneybriefschedule.h"
+#include "../kmymoneyutils.h"
+
+KMyMoneyBriefSchedule::KMyMoneyBriefSchedule(QWidget *parent, const char *name )
+ : kScheduleBriefWidget(parent,name, WStyle_Customize | WStyle_NoBorder)
+{
+ KIconLoader *ic = KGlobal::iconLoader();
+ m_nextButton->setPixmap(BarIcon(QString::fromLatin1("1rightarrow")));
+ m_prevButton->setPixmap(BarIcon(QString::fromLatin1("1leftarrow")));
+
+ connect(m_prevButton, SIGNAL(clicked()), this, SLOT(slotPrevClicked()));
+ connect(m_nextButton, SIGNAL(clicked()), this, SLOT(slotNextClicked()));
+ connect(m_closeButton, SIGNAL(clicked()), this, SLOT(hide()));
+ connect(m_skipButton, SIGNAL(clicked()), this, SLOT(slotSkipClicked()));
+ connect(m_buttonEnter, SIGNAL(clicked()), this, SLOT(slotEnterClicked()));
+
+ KGuiItem skipGuiItem( i18n("&Skip"),
+ QIconSet(ic->loadIcon("player_fwd", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Skip this transaction"),
+ i18n("Use this button to skip this transaction"));
+ m_skipButton->setGuiItem(skipGuiItem);
+
+ KGuiItem enterGuiItem( i18n("&Enter"),
+ QIconSet(ic->loadIcon("key_enter", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Record this transaction into the register"),
+ i18n("Use this button to record this transaction"));
+ m_buttonEnter->setGuiItem(enterGuiItem);
+}
+
+KMyMoneyBriefSchedule::~KMyMoneyBriefSchedule()
+{
+}
+
+void KMyMoneyBriefSchedule::setSchedules(QValueList<MyMoneySchedule> list, const QDate& date)
+{
+ m_scheduleList = list;
+ m_date = date;
+
+ m_index = 0;
+ if (list.count() >= 1)
+ {
+ loadSchedule();
+ }
+}
+
+void KMyMoneyBriefSchedule::loadSchedule()
+{
+ try
+ {
+ if (m_index < m_scheduleList.count())
+ {
+ MyMoneySchedule sched = m_scheduleList[m_index];
+
+ m_indexLabel->setText(i18n("%1 of %2")
+ .arg(QString::number(m_index+1))
+ .arg(QString::number(m_scheduleList.count())));
+ m_name->setText(sched.name());
+ m_type->setText(KMyMoneyUtils::scheduleTypeToString(sched.type()));
+ m_account->setText(sched.account().name());
+ QString text;
+ MyMoneyMoney amount = sched.transaction().splitByAccount(sched.account().id()).value();
+ amount = amount.abs();
+
+ if (sched.willEnd())
+ {
+ int transactions = sched.paymentDates(m_date, sched.endDate()).count()-1;
+ text = i18n("Payment on %1 for %2 with %3 transactions remaining occuring %4.")
+ .arg(KGlobal::locale()->formatDate(m_date, true))
+ .arg(amount.formatMoney(sched.account().fraction()))
+ .arg(QString::number(transactions))
+ .arg(i18n(sched.occurenceToString()));
+ } else {
+ text = i18n("Payment on %1 for %2 occuring %4.")
+ .arg(KGlobal::locale()->formatDate(m_date, true))
+ .arg(amount.formatMoney(sched.account().fraction()))
+ .arg(i18n(sched.occurenceToString()));
+ }
+
+ if (m_date < QDate::currentDate())
+ {
+ if (sched.isOverdue())
+ {
+ QDate startD = (sched.lastPayment().isValid()) ?
+ sched.lastPayment() :
+ sched.startDate();
+
+ if (m_date.isValid())
+ startD = m_date;
+
+ int days = startD.daysTo(QDate::currentDate());
+ int transactions = sched.paymentDates(startD, QDate::currentDate()).count();
+
+ text += "<br><font color=red>";
+ text += i18n("%1 days overdue (%2 occurences).")
+ .arg(QString::number(days))
+ .arg(QString::number(transactions));
+ text += "</color>";
+ }
+ }
+
+ m_details->setText(text);
+
+ m_prevButton->setEnabled(true);
+ m_nextButton->setEnabled(true);
+ m_skipButton->setEnabled(sched.occurencePeriod() != MyMoneySchedule::OCCUR_ONCE);
+
+ if (m_index == 0)
+ m_prevButton->setEnabled(false);
+ if (m_index == (m_scheduleList.count()-1))
+ m_nextButton->setEnabled(false);
+ }
+ }
+ catch (MyMoneyException *e)
+ {
+ delete e;
+ }
+}
+
+void KMyMoneyBriefSchedule::slotPrevClicked()
+{
+ if (m_index >= 1)
+ {
+ --m_index;
+ loadSchedule();
+ }
+}
+
+void KMyMoneyBriefSchedule::slotNextClicked()
+{
+ if (m_index < (m_scheduleList.count()-1))
+ {
+ m_index++;
+ loadSchedule();
+ }
+}
+
+void KMyMoneyBriefSchedule::slotEnterClicked()
+{
+ hide();
+ emit enterClicked(m_scheduleList[m_index], m_date);
+}
+
+void KMyMoneyBriefSchedule::slotSkipClicked()
+{
+ hide();
+ emit skipClicked(m_scheduleList[m_index], m_date);
+}
+
+#include "kmymoneybriefschedule.moc"
diff --git a/kmymoney2/widgets/kmymoneybriefschedule.h b/kmymoney2/widgets/kmymoneybriefschedule.h
new file mode 100644
index 0000000..f910e35
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneybriefschedule.h
@@ -0,0 +1,68 @@
+/***************************************************************************
+ kmymoneybriefschedule.h - description
+ -------------------
+ begin : Sun Jul 6 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+#ifndef KMYMONEYBRIEFSCHEDULE_H
+#define KMYMONEYBRIEFSCHEDULE_H
+
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qwidget.h>
+#include <qstringlist.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include "../widgets/kschedulebriefwidget.h"
+#include "../mymoney/mymoneyfile.h"
+
+/**
+ *@author Michael Edwardes
+ */
+
+class KMyMoneyBriefSchedule : public kScheduleBriefWidget {
+ Q_OBJECT
+public:
+ KMyMoneyBriefSchedule(QWidget *parent=0, const char *name=0);
+ ~KMyMoneyBriefSchedule();
+ void setSchedules(QValueList<MyMoneySchedule> list, const QDate& date);
+
+signals:
+ void enterClicked(const MyMoneySchedule&, const QDate&);
+ void skipClicked(const MyMoneySchedule&, const QDate&);
+
+protected slots:
+ void slotPrevClicked();
+ void slotNextClicked();
+ void slotEnterClicked();
+ void slotSkipClicked();
+
+private:
+ QValueList<MyMoneySchedule> m_scheduleList;
+ unsigned int m_index;
+ QDate m_date;
+
+ void loadSchedule();
+};
+
+#endif
diff --git a/kmymoney2/widgets/kmymoneycalculator.cpp b/kmymoney2/widgets/kmymoneycalculator.cpp
new file mode 100644
index 0000000..3e59331
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneycalculator.cpp
@@ -0,0 +1,448 @@
+/***************************************************************************
+ kmymoneycalculator.cpp - description
+ -------------------
+ begin : Sat Oct 19 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlabel.h>
+#include <qsignalmapper.h>
+#include <qregexp.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kglobal.h>
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoneycalculator.h"
+
+kMyMoneyCalculator::kMyMoneyCalculator(QWidget* parent, const char *name)
+ : QFrame(parent, name)
+{
+ m_comma = KGlobal::locale()->monetaryDecimalSymbol()[0];
+ m_clearOperandOnDigit = false;
+
+ QGridLayout* grid = new QGridLayout(this, 5, 5, 1, 2);
+
+ display = new QLabel(this);
+ display->setBackgroundColor(QColor("#BDFFB4"));
+
+ display->setFrameStyle( QFrame::Panel | QFrame::Sunken );
+ display->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
+ grid->addMultiCellWidget(display, 0, 0, 0, 4);
+
+ buttons[0] = new KPushButton("0", this);
+ buttons[1] = new KPushButton("1", this);
+ buttons[2] = new KPushButton("2", this);
+ buttons[3] = new KPushButton("3", this);
+ buttons[4] = new KPushButton("4", this);
+ buttons[5] = new KPushButton("5", this);
+ buttons[6] = new KPushButton("6", this);
+ buttons[7] = new KPushButton("7", this);
+ buttons[8] = new KPushButton("8", this);
+ buttons[9] = new KPushButton("9", this);
+ buttons[PLUS] = new KPushButton("+", this);
+ buttons[MINUS] = new KPushButton("-", this);
+ buttons[STAR] = new KPushButton("X", this);
+ buttons[COMMA] = new KPushButton(m_comma, this);
+ buttons[EQUAL] = new KPushButton("=", this);
+ buttons[SLASH] = new KPushButton("/", this);
+ buttons[CLEAR] = new KPushButton("C", this);
+ buttons[CLEARALL] = new KPushButton("AC", this);
+ buttons[PLUSMINUS] = new KPushButton("+-", this);
+ buttons[PERCENT] = new KPushButton("%", this);
+
+ grid->addWidget(buttons[7], 1, 0);
+ grid->addWidget(buttons[8], 1, 1);
+ grid->addWidget(buttons[9], 1, 2);
+ grid->addWidget(buttons[4], 2, 0);
+ grid->addWidget(buttons[5], 2, 1);
+ grid->addWidget(buttons[6], 2, 2);
+ grid->addWidget(buttons[1], 3, 0);
+ grid->addWidget(buttons[2], 3, 1);
+ grid->addWidget(buttons[3], 3, 2);
+ grid->addWidget(buttons[0], 4, 1);
+
+ grid->addWidget(buttons[COMMA], 4, 0);
+ grid->addWidget(buttons[PLUS], 3, 3);
+ grid->addWidget(buttons[MINUS], 4, 3);
+ grid->addWidget(buttons[STAR], 3, 4);
+ grid->addWidget(buttons[SLASH], 4, 4);
+ grid->addWidget(buttons[EQUAL], 4, 2);
+ grid->addWidget(buttons[PLUSMINUS], 2, 3);
+ grid->addWidget(buttons[PERCENT], 2, 4);
+ grid->addWidget(buttons[CLEAR], 1, 3);
+ grid->addWidget(buttons[CLEARALL], 1, 4);
+
+ buttons[EQUAL]->setFocus();
+
+ op1 = 0.0;
+ stackedOp = op = 0;
+ operand = QString();
+ changeDisplay("0");
+
+ // connect the digit signals through a signal mapper
+ QSignalMapper* mapper = new QSignalMapper(this);
+ for(int i = 0; i < 10; ++i) {
+ mapper->setMapping(buttons[i], i);
+ connect(buttons[i], SIGNAL(clicked()), mapper, SLOT(map()));
+ }
+ connect(mapper, SIGNAL(mapped(int)), this, SLOT(digitClicked(int)));
+
+ // connect the calculation operations through another mapper
+ mapper = new QSignalMapper(this);
+ for(int i = PLUS; i <= EQUAL; ++i) {
+ mapper->setMapping(buttons[i], i);
+ connect(buttons[i], SIGNAL(clicked()), mapper, SLOT(map()));
+ }
+ connect(mapper, SIGNAL(mapped(int)), this, SLOT(calculationClicked(int)));
+
+ // connect all remaining signals
+ connect(buttons[COMMA], SIGNAL(clicked()), SLOT(commaClicked()));
+ connect(buttons[PLUSMINUS], SIGNAL(clicked()), SLOT(plusminusClicked()));
+ connect(buttons[PERCENT], SIGNAL(clicked()), SLOT(percentClicked()));
+ connect(buttons[CLEAR], SIGNAL(clicked()), SLOT(clearClicked()));
+ connect(buttons[CLEARALL], SIGNAL(clicked()), SLOT(clearAllClicked()));
+
+ for(int i = 0; i < MAX_BUTTONS; ++i) {
+ buttons[i]->setMinimumSize(40, 30);
+ buttons[i]->setMaximumSize(40, 30);
+ }
+ int height = 4 * (buttons[0]->minimumHeight()+6) + 15;
+ int width = 5 * (buttons[0]->minimumWidth()+6);
+
+ setMinimumSize(width, height);
+ setMaximumSize(width, height);
+
+ show();
+}
+
+kMyMoneyCalculator::~kMyMoneyCalculator()
+{
+}
+
+void kMyMoneyCalculator::digitClicked(int button)
+{
+ if(m_clearOperandOnDigit) {
+ operand = QString();
+ m_clearOperandOnDigit = false;
+ }
+
+ operand += QChar(button + 0x30);
+ if(operand.length() > 16)
+ operand = operand.left(16);
+ changeDisplay(operand);
+}
+
+void kMyMoneyCalculator::commaClicked(void)
+{
+ if(operand.length() == 0)
+ operand = "0";
+ if(operand.contains('.', FALSE) == 0)
+ operand.append('.');
+
+ if(operand.length() > 16)
+ operand = operand.left(16);
+ changeDisplay(operand);
+}
+
+void kMyMoneyCalculator::plusminusClicked(void)
+{
+ if(operand.length() == 0 && m_result.length() > 0)
+ operand = m_result;
+
+ if(operand.length() > 0) {
+ if(operand.find('-') != -1)
+ operand.replace('-', QString());
+ else
+ operand.prepend('-');
+ changeDisplay(operand);
+ }
+}
+
+void kMyMoneyCalculator::calculationClicked(int button)
+{
+ if(operand.length() == 0 && op != 0 && button == EQUAL) {
+ op = 0;
+ m_result = normalizeString(op1);
+ changeDisplay(m_result);
+
+ } else if(operand.length() > 0 && op != 0) {
+ // perform operation
+ double op2 = operand.toDouble();
+ bool error = false;
+
+ // if the pending operation is addition and we now do multiplication
+ // we just stack op1 and remember the operation in
+ if((op == PLUS || op == MINUS) && (button == STAR || button == SLASH)) {
+ op0 = op1;
+ stackedOp = op;
+ op = 0;
+ }
+
+ switch(op) {
+ case PLUS:
+ op2 = op1 + op2;
+ break;
+ case MINUS:
+ op2 = op1 - op2;
+ break;
+ case STAR:
+ op2 = op1 * op2;
+ break;
+ case SLASH:
+ if(op2 == 0.0)
+ error = true;
+ else
+ op2 = op1 / op2;
+ break;
+ }
+
+ // if we have a pending addition operation, and the next operation is
+ // not multiplication, we calculate the stacked operation
+ if(stackedOp && button != STAR && button != SLASH) {
+ switch(stackedOp) {
+ case PLUS:
+ op2 = op0 + op2;
+ break;
+ case MINUS:
+ op2 = op0 - op2;
+ break;
+ }
+ stackedOp = 0;
+ }
+
+ if(error) {
+ op = 0;
+ changeDisplay("Error");
+ operand = QString();
+ } else {
+ op1 = op2;
+ m_result = normalizeString(op1);
+ changeDisplay(m_result);
+ }
+ } else if(operand.length() > 0 && op == 0) {
+ op1 = operand.toDouble();
+ m_result = normalizeString(op1);
+ changeDisplay(m_result);
+ }
+
+ if(button != EQUAL) {
+ op = button;
+ } else {
+ op = 0;
+ emit signalResultAvailable();
+ }
+ operand = QString();
+}
+
+QString kMyMoneyCalculator::normalizeString(const double& val)
+{
+ QString str;
+ str.setNum(val, 'f');
+ int i = str.length();
+ while(i > 1 && str[i-1] == '0') {
+ --i;
+ }
+ // cut off trailing 0's
+ str.remove(i, str.length());
+ if(str.length() > 0) {
+ // possibly remove trailing period
+ if(str[str.length()-1] == '.') {
+ str.remove(str.length()-1, 1);
+ }
+ }
+ return str;
+}
+
+void kMyMoneyCalculator::clearClicked(void)
+{
+ if(operand.length() > 0) {
+ operand = operand.left(operand.length() - 1);
+ }
+ if(operand.length() == 0)
+ changeDisplay("0");
+ else
+ changeDisplay(operand);
+}
+
+void kMyMoneyCalculator::clearAllClicked(void)
+{
+ operand = QString();
+ op = 0;
+ changeDisplay("0");
+}
+
+void kMyMoneyCalculator::percentClicked(void)
+{
+ if(op != 0) {
+ double op2 = operand.toDouble();
+ switch(op) {
+ case PLUS:
+ case MINUS:
+ op2 = (op1 * op2) / 100;
+ break;
+
+ case STAR:
+ case SLASH:
+ op2 /= 100;
+ break;
+ }
+ operand = normalizeString(op2);
+ changeDisplay(operand);
+ }
+}
+
+const QString kMyMoneyCalculator::result(void) const
+{
+ QString txt = m_result;
+ txt.replace(QRegExp("\\."), m_comma);
+ if(txt[0] == '-') {
+ txt = txt.mid(1); // get rid of the minus sign
+ QString mask;
+ switch(KGlobal::locale()->negativeMonetarySignPosition()) {
+ case KLocale::ParensAround:
+ mask = "(%1)";
+ break;
+ case KLocale::AfterQuantityMoney:
+ mask = "%1-";
+ break;
+ case KLocale::AfterMoney:
+ case KLocale::BeforeMoney:
+ mask = "%1 -";
+ break;
+ case KLocale::BeforeQuantityMoney:
+ mask = "-%1";
+ break;
+ }
+ txt = QString(mask).arg(txt);
+ }
+ return txt;
+}
+
+void kMyMoneyCalculator::changeDisplay(const QString& str)
+{
+ QString txt = str;
+ txt.replace(QRegExp("\\."), m_comma);
+ display->setText("<b>" + txt + "</b>");
+}
+
+void kMyMoneyCalculator::keyPressEvent(QKeyEvent* ev)
+{
+ int button = -1;
+
+ switch(ev->key()) {
+ case Qt::Key_0:
+ case Qt::Key_1:
+ case Qt::Key_2:
+ case Qt::Key_3:
+ case Qt::Key_4:
+ case Qt::Key_5:
+ case Qt::Key_6:
+ case Qt::Key_7:
+ case Qt::Key_8:
+ case Qt::Key_9:
+ if(m_clearOperandOnDigit) {
+ operand = QString();
+ m_clearOperandOnDigit = false;
+ }
+ button = ev->key() - Qt::Key_0;
+ break;
+ case Qt::Key_Plus:
+ button = PLUS;
+ break;
+ case Qt::Key_Minus:
+ button = MINUS;
+ break;
+ case Qt::Key_Comma:
+ case Qt::Key_Period:
+ if(m_clearOperandOnDigit) {
+ operand = QString();
+ m_clearOperandOnDigit = false;
+ }
+ button = COMMA;
+ break;
+ case Qt::Key_Slash:
+ button = SLASH;
+ break;
+ case Qt::Key_Backspace:
+ button = CLEAR;
+ break;
+ case Qt::Key_Asterisk:
+ button = STAR;
+ break;
+ case Qt::Key_Return:
+ case Qt::Key_Enter:
+ case Qt::Key_Equal:
+ button = EQUAL;
+ break;
+ case Qt::Key_Escape:
+ button = CLEARALL;
+ break;
+ case Qt::Key_Percent:
+ button = PERCENT;
+ break;
+ default:
+ ev->ignore();
+ break;
+ }
+ if(button != -1)
+ buttons[button]->animateClick();
+
+ m_clearOperandOnDigit = false;
+}
+
+void kMyMoneyCalculator::setInitialValues(const QString& value, QKeyEvent* ev)
+{
+ bool negative = false;
+ // setup operand
+ operand = value;
+ operand.replace(QRegExp(QString("\\")+KGlobal::locale()->thousandsSeparator()), QString());
+ operand.replace(QRegExp(QString("\\")+m_comma), ".");
+ if(operand.contains('(')) {
+ negative = true;
+ operand.replace("(", QString());
+ operand.replace(")", QString());
+ }
+ if(operand.contains('-')) {
+ negative = true;
+ operand.replace("-", QString());
+ }
+ if(operand.isEmpty())
+ operand = "0";
+ else if(negative)
+ operand = QString("-%1").arg(operand);
+
+ changeDisplay(operand);
+
+ // and operation
+ op = 0;
+ if(ev)
+ keyPressEvent(ev);
+ else
+ m_clearOperandOnDigit = true;
+}
+
+#include "kmymoneycalculator.moc"
diff --git a/kmymoney2/widgets/kmymoneycalculator.h b/kmymoney2/widgets/kmymoneycalculator.h
new file mode 100644
index 0000000..594d6c7
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneycalculator.h
@@ -0,0 +1,249 @@
+/***************************************************************************
+ kmymoneycalculator.h - description
+ -------------------
+ begin : Sat Oct 19 2002
+ copyright : (C) 2000-2002 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYCALCULATOR_H
+#define KMYMONEYCALCULATOR_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+#include <qframe.h>
+#include <qlayout.h>
+#include <qgrid.h>
+#include <qlcdnumber.h>
+#include <qlineedit.h>
+#include <qlabel.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kpushbutton.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+/**
+ *@author Thomas Baumgart
+ */
+
+/**
+ * This class implements a simple electronic calculator with the
+ * ability of addition, subtraction, multiplication and division
+ * and percentage calculation. Memory locations are not available.
+ *
+ * The first operand and operation can be loaded from an external
+ * source to switch from an edit-widget to the calculator widget
+ * without having the user to re-type the data. See setInitialValues()
+ * for details.
+ */
+class kMyMoneyCalculator : public QFrame {
+ Q_OBJECT
+public:
+ kMyMoneyCalculator(QWidget* parent = 0, const char *name = 0);
+ ~kMyMoneyCalculator();
+
+ /**
+ * This methods is used to extract the result of the last
+ * calculation. The fractional part is separated from the
+ * integral part by the character setup using setComma().
+ *
+ * @return QString representing the result of the
+ * last operation
+ */
+ const QString result(void) const;
+
+ /**
+ * This method is used to set the character to be used
+ * as the separator between the integer and fractional part
+ * of an operand. Upon creation of the object, m_comma is
+ * set to the current locale setting of KDE's decimalSymbol.
+ *
+ * @param ch QChar representing the character to be used
+ */
+ void setComma(const QChar ch) { m_comma = ch; };
+
+ /**
+ * This method is used to preset the first operand and start
+ * execution of an operation. This method is currently used
+ * by kMyMoneyEdit. If @p ev is 0, then no operation will be
+ * started.
+ *
+ * @param value reference to QString representing the operands value
+ * @param ev pointer to QKeyEvent representing the operation's key
+ */
+ void setInitialValues(const QString& value, QKeyEvent* ev);
+
+signals:
+ /**
+ * This signal is emitted, when a new result is available
+ */
+ void signalResultAvailable();
+
+protected:
+ void keyPressEvent(QKeyEvent* ev);
+
+ /**
+ * This method is used to transform a double into a QString
+ * and removing any trailing 0's and decimal seperators
+ *
+ * @param val reference to double value to be converted
+ * @return QString object containing the converted value
+ */
+ QString normalizeString(const double& val);
+
+protected slots:
+ /**
+ * This method appends the digit represented by the parameter
+ * to the current operand
+ *
+ * @param button integer value of the digit to be added in the
+ * range [0..9]
+ */
+ void digitClicked(int button);
+
+ /**
+ * This methods starts the operation contained in the parameter
+ *
+ * @param button The Qt::Keycode for the button pressed or clicked
+ */
+ void calculationClicked(int button);
+
+ /**
+ * This method appends a period (comma) to initialize the fractional
+ * part of an operand. The period is only appended once.
+ */
+ void commaClicked(void);
+
+ /**
+ * This method reverses the sign of the current operand
+ */
+ void plusminusClicked(void);
+
+ /**
+ * This method clears the current operand
+ */
+ void clearClicked(void);
+
+ /**
+ * This method clears all registers
+ */
+ void clearAllClicked(void);
+
+ /**
+ * This method executes the percent operation
+ */
+ void percentClicked(void);
+
+ /**
+ * This method updates the display of the calculator with
+ * the text passed as argument
+ *
+ * @param str reference to QString containing the new display contents
+ */
+ void changeDisplay(const QString& str);
+
+private:
+ /**
+ * This member variable stores the current (second) operand
+ */
+ QString operand;
+
+ /**
+ * This member variable stores the last result
+ */
+ QString m_result;
+
+ /**
+ * This member variable stores the representation of the
+ * character to be used to separate the integer and fractional
+ * part of numbers. The internal representation is always a period.
+ */
+ QChar m_comma;
+
+ /**
+ * The numeric representation of a stacked first operand
+ */
+ double op0;
+
+ /**
+ * The numeric representation of the first operand
+ */
+ double op1;
+
+ /**
+ * This member stores the operation to be performed between
+ * the first and the second operand.
+ */
+ int op;
+
+ /**
+ * This member stores a pending addition operation
+ */
+ int stackedOp;
+
+ /**
+ * This member stores a pointer to the display area
+ */
+ QLabel *display;
+
+ /**
+ * This member array stores the pointers to the various
+ * buttons of the calculator. It is setup during the
+ * constructor of this object
+ */
+ KPushButton *buttons[20];
+
+ /**
+ * This enumeration type stores the values used for the
+ * various keys internally
+ */
+ enum {
+ /* 0-9 are used by digits */
+ COMMA = 10,
+ /*
+ * make sure, that PLUS through EQUAL remain in
+ * the order they are. Otherwise, check the calculation
+ * signal mapper
+ */
+ PLUS,
+ MINUS,
+ SLASH,
+ STAR,
+ EQUAL,
+ PLUSMINUS,
+ PERCENT,
+ CLEAR,
+ CLEARALL,
+ /* insert new buttons before this line */
+ MAX_BUTTONS
+ };
+
+ /**
+ * This flag signals, if the operand should be replaced upon
+ * a digit key pressure. Defaults to false and will be set, if
+ * setInitialValues() is called without an operation.
+ */
+ bool m_clearOperandOnDigit;
+};
+
+#endif
diff --git a/kmymoney2/widgets/kmymoneycalendar.cpp b/kmymoney2/widgets/kmymoneycalendar.cpp
new file mode 100644
index 0000000..8f5291f
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneycalendar.cpp
@@ -0,0 +1,661 @@
+/***************************************************************************
+ kmymoneycalendar.cpp - description
+ -------------------
+ begin : Wed Jul 2 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * Contains code from KDatePicker in kdelibs-3.1.2.
+ * Original license message:
+ *
+ This file is part of the KDE libraries
+ Copyright (C) 1997 Tim D. Gilman (tdgilman@best.org)
+ (C) 1998-2001 Mirko Boehm (mirko@kde.org)
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+ ****************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qpainter.h>
+#include <qdrawutil.h>
+#include <qframe.h>
+#include <qpainter.h>
+#include <qdialog.h>
+#include <qstyle.h>
+#include <qtoolbutton.h>
+#include <qtooltip.h>
+#include <qfont.h>
+#include <qvalidator.h>
+#include <qpushbutton.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+#include "kdecompat.h"
+#include <kglobal.h>
+#include <kapplication.h>
+#include <klocale.h>
+#include <kiconloader.h>
+#include <klineedit.h>
+#include <kdebug.h>
+#include <knotifyclient.h>
+#include <kdatetbl.h> // for maximum re-use
+#include <kpopupmenu.h>
+
+#if KDE_IS_VERSION(3,2,0)
+#include <kcalendarsystem.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include "kmymoneycalendar.h"
+#include "kmymoneydatetbl.h"
+
+class kMyMoneyCalendar::kMyMoneyCalendarPrivate
+{
+public:
+ kMyMoneyCalendarPrivate()
+ : closeButton(0L), selectWeek(0L), userButton1(0), userButton2(0) {}
+
+ QToolButton *closeButton;
+ QToolButton *selectWeek;
+ QPushButton *userButton1;
+ QPushButton *userButton2;
+};
+
+kMyMoneyCalendar::kMyMoneyCalendar(QWidget *parent, const char *name ) :
+ QFrame(parent,name),
+ table(0),
+ d(new kMyMoneyCalendarPrivate)
+{
+}
+
+kMyMoneyCalendar::~kMyMoneyCalendar()
+{
+ delete d;
+}
+
+void kMyMoneyCalendar::init( const QDate &dt )
+{
+ styleControl = new QPushButton(i18n("Select Style"), this);
+ yearForward = new QToolButton(this);
+ yearBackward = new QToolButton(this);
+ monthForward = new QToolButton(this);
+ monthBackward = new QToolButton(this);
+ selectMonth = new QToolButton(this);
+ selectYear = new QToolButton(this);
+ line = new KLineEdit(this);
+ val = new KDateValidator(this);
+ fontsize = 10;
+
+ d->selectWeek = new QToolButton( this );
+
+// KIconLoader *kiconloader = KGlobal::iconLoader();
+ KPopupMenu* kpopupmenuNew = new KPopupMenu(this);
+ kpopupmenuNew->insertItem(i18n("Week"), this, SLOT(slotSetStyleWeekly()));
+ kpopupmenuNew->insertItem(i18n("Month"), this, SLOT(slotSetStyleMonthly()));
+/* kpopupmenuNew->insertItem(i18n("3 Months"), this, SLOT(slotSetStyleQuarterly())); */
+ styleControl->setPopup(kpopupmenuNew);
+
+ QToolTip::add(styleControl, i18n("Choose Style"));
+ QToolTip::add(yearForward, i18n("Next year"));
+ QToolTip::add(yearBackward, i18n("Previous year"));
+ QToolTip::add(monthForward, i18n("Next month"));
+ QToolTip::add(monthBackward, i18n("Previous month"));
+ QToolTip::add(d->selectWeek, i18n("Select a week"));
+ QToolTip::add(selectMonth, i18n("Select a month"));
+ QToolTip::add(selectYear, i18n("Select a year"));
+
+ // -----
+ setFontSize(10);
+ line->setValidator(val);
+ line->installEventFilter( this );
+ yearForward->setPixmap(BarIcon(QString::fromLatin1("2rightarrow")));
+ yearBackward->setPixmap(BarIcon(QString::fromLatin1("2leftarrow")));
+ monthForward->setPixmap(BarIcon(QString::fromLatin1("1rightarrow")));
+ monthBackward->setPixmap(BarIcon(QString::fromLatin1("1leftarrow")));
+ setDate(dt); // set button texts
+ connect(table, SIGNAL(dateChanged(QDate)), SLOT(dateChangedSlot(QDate)));
+ connect(table, SIGNAL(tableClicked()), SLOT(tableClickedSlot()));
+ connect(monthForward, SIGNAL(clicked()), SLOT(monthForwardClicked()));
+ connect(monthBackward, SIGNAL(clicked()), SLOT(monthBackwardClicked()));
+ connect(yearForward, SIGNAL(clicked()), SLOT(yearForwardClicked()));
+ connect(yearBackward, SIGNAL(clicked()), SLOT(yearBackwardClicked()));
+ connect(d->selectWeek, SIGNAL(clicked()), SLOT(selectWeekClicked()));
+ connect(selectMonth, SIGNAL(clicked()), SLOT(selectMonthClicked()));
+ connect(selectYear, SIGNAL(clicked()), SLOT(selectYearClicked()));
+ connect(line, SIGNAL(returnPressed()), SLOT(lineEnterPressed()));
+ if (table)
+ table->setFocus();
+}
+
+bool
+kMyMoneyCalendar::eventFilter(QObject *o, QEvent *e )
+{
+ if ( e->type() == QEvent::KeyPress ) {
+ QKeyEvent *k = (QKeyEvent *)e;
+
+ if ( (k->key() == Qt::Key_Prior) ||
+ (k->key() == Qt::Key_Next) ||
+ (k->key() == Qt::Key_Up) ||
+ (k->key() == Qt::Key_Down) )
+ {
+ QApplication::sendEvent( table, e );
+ table->setFocus();
+ return TRUE; // eat event
+ }
+ }
+ return QFrame::eventFilter( o, e );
+}
+
+void
+kMyMoneyCalendar::resizeEvent(QResizeEvent*)
+{
+ QWidget *buttons[] = {
+ styleControl,
+ d->userButton1,
+ d->userButton2,
+ yearBackward,
+ monthBackward,
+ selectMonth,
+ selectYear,
+ monthForward,
+ yearForward,
+ d->closeButton
+ };
+ const int NoOfButtons=sizeof(buttons)/sizeof(buttons[0]);
+ QSize sizes[NoOfButtons];
+ int buttonHeight=0;
+ int count;
+ int w;
+ int x=0;
+ // ----- calculate button row height:
+ for(count=0; count<NoOfButtons; ++count) {
+ if ( buttons[count] ) { // closeButton may be 0L
+ sizes[count]=buttons[count]->sizeHint();
+ buttonHeight=QMAX(buttonHeight, sizes[count].height());
+ }
+ else
+ sizes[count] = QSize(0,0); // closeButton
+ }
+
+ // ----- calculate size of the month button:
+ for(count=0; count<NoOfButtons; ++count) {
+ if(buttons[count]==selectMonth) {
+ QSize metricBound = style().sizeFromContents(QStyle::CT_ToolButton, selectMonth, maxMonthRect);
+ sizes[count].setWidth(QMAX(metricBound.width(), maxMonthRect.width()+2*QApplication::style().pixelMetric(QStyle::PM_ButtonMargin)));
+ }
+ }
+ // ----- place the buttons:
+ // Put the style button and user buttons to the left and the rest to the right
+ x = 0;
+ int noUserButtons=2;
+ buttons[0]->setGeometry(x, 0, sizes[0].width(), buttonHeight);
+ x += sizes[0].width();
+ for (count=1; count<=noUserButtons; ++count)
+ {
+ if (buttons[count])
+ {
+ buttons[count]->setGeometry(x, 0, sizes[count].width(), buttonHeight);
+ x += sizes[count].width();
+ }
+ }
+
+ x = width();
+ for(count=(1+noUserButtons); count<NoOfButtons; ++count)
+ {
+ w=sizes[count].width();
+ x -= w;
+ }
+
+ for(count=(1+noUserButtons); count<NoOfButtons; ++count)
+ {
+ w=sizes[count].width();
+ if ( buttons[count] )
+ buttons[count]->setGeometry(x, 0, w, buttonHeight);
+ x+=w;
+ }
+
+ // ----- place the line edit for direct input:
+ sizes[0]=line->sizeHint();
+ int week_width=d->selectWeek->fontMetrics().width(i18n("Week XX"))+((d->closeButton != 0L) ? 50 : 20);
+ line->setGeometry(0, height()-sizes[0].height(), width()-week_width, sizes[0].height());
+ d->selectWeek->setGeometry(width()-week_width, height()-sizes[0].height(), week_width, sizes[0].height());
+ // ----- adjust the table:
+ table->setGeometry(0, buttonHeight, width(),
+ height()-buttonHeight-sizes[0].height());
+
+ table->setFocus();
+}
+
+void
+kMyMoneyCalendar::dateChangedSlot(QDate date)
+{
+ kdDebug() << "kMyMoneyCalendar::dateChangedSlot: date changed (" << date.year() << "/" << date.month() << "/" << date.day() << ")." << endl;
+ line->setText(KGlobal::locale()->formatDate(date, true));
+ d->selectWeek->setText(i18n("Week %1").arg(weekOfYear(date)));
+ selectMonth->setText(MONTH_NAME(date.month(), date.year(), false));
+ selectYear->setText(date.toString("yyyy"));
+ emit(dateChanged(date));
+}
+
+void
+kMyMoneyCalendar::tableClickedSlot()
+{
+ kdDebug() << "kMyMoneyCalendar::tableClickedSlot: table clicked." << endl;
+ emit(dateSelected(table->getDate()));
+ emit(tableClicked());
+}
+
+const QDate&
+kMyMoneyCalendar::getDate() const
+{
+ return table->getDate();
+}
+
+const QDate &
+kMyMoneyCalendar::date() const
+{
+ return table->getDate();
+}
+
+bool
+kMyMoneyCalendar::setDate(const QDate& date)
+{
+ if (!table)
+ return true; // hack
+
+ if(date.isValid()) {
+ QString temp;
+ // -----
+ table->setDate(date);
+ d->selectWeek->setText(i18n("Week %1").arg(weekOfYear(date)));
+ selectMonth->setText(MONTH_NAME(date.month(), date.year(), false));
+ temp.setNum(date.year());
+ selectYear->setText(temp);
+ line->setText(KGlobal::locale()->formatDate(date, true));
+ return true;
+ } else {
+ kdDebug() << "kMyMoneyCalendar::setDate: refusing to set invalid date." << endl;
+ return false;
+ }
+}
+
+void
+kMyMoneyCalendar::monthForwardClicked()
+{
+ setDate( table->getDate().addMonths(1) );
+}
+
+void
+kMyMoneyCalendar::monthBackwardClicked()
+{
+ setDate( table->getDate().addMonths(-1) );
+}
+
+void
+kMyMoneyCalendar::yearForwardClicked()
+{
+ setDate( table->getDate().addYears(1) );
+}
+
+void
+kMyMoneyCalendar::yearBackwardClicked()
+{
+ setDate( table->getDate().addYears(-1) );
+}
+
+void
+kMyMoneyCalendar::selectWeekClicked()
+{
+#if KDE_VERSION >= 310 && KDE_VERSION <= 314
+ int week;
+ KPopupFrame* popup = new KPopupFrame(this);
+ KDateInternalWeekSelector* picker = new KDateInternalWeekSelector(/*fontsize, */popup);
+ // -----
+ picker->resize(picker->sizeHint());
+ popup->setMainWidget(picker);
+ connect(picker, SIGNAL(closeMe(int)), popup, SLOT(close(int)));
+ picker->setFocus();
+ if(popup->exec(d->selectWeek->mapToGlobal(QPoint(0, d->selectWeek->height()))))
+ {
+ QDate date;
+ int year;
+ // -----
+ week=picker->getWeek();
+ date=table->getDate();
+ year=date.year();
+ // ----- find the first selectable day in this week (hacky solution :)
+ date.setYMD(year, 1, 1);
+ while (weekOfYear(date)>50)
+ date=date.addDays(1);
+ while (weekOfYear(date)<week && (week!=53 || (week==53 &&
+ (weekOfYear(date)!=52 || weekOfYear(date.addDays(1))!=1))))
+ date=date.addDays(1);
+ if (week==53 && weekOfYear(date)==52)
+ while (weekOfYear(date.addDays(-1))==52)
+ date=date.addDays(-1);
+ // ----- set this date
+ setDate(date);
+ } else {
+ KNotifyClient::beep();
+ }
+ delete popup;
+#endif
+}
+
+void
+kMyMoneyCalendar::selectMonthClicked()
+{
+#if KDE_VERSION >= 310 && KDE_VERSION <= 314
+ int month;
+ KPopupFrame* popup = new KPopupFrame(this);
+ KDateInternalMonthPicker* picker = new KDateInternalMonthPicker(/*fontsize, */popup);
+ // -----
+ picker->resize(picker->sizeHint());
+ popup->setMainWidget(picker);
+ picker->setFocus();
+ connect(picker, SIGNAL(closeMe(int)), popup, SLOT(close(int)));
+ if(popup->exec(selectMonth->mapToGlobal(QPoint(0, selectMonth->height()))))
+ {
+ QDate date;
+ int day;
+ // -----
+ month=picker->getResult();
+ date=table->getDate();
+ day=date.day();
+ // ----- construct a valid date in this month:
+ date.setYMD(date.year(), month, 1);
+ date.setYMD(date.year(), month, QMIN(day, date.daysInMonth()));
+ // ----- set this month
+ setDate(date);
+ } else {
+ KNotifyClient::beep();
+ }
+ delete popup;
+#endif
+}
+
+void
+kMyMoneyCalendar::selectYearClicked()
+{
+#if KDE_VERSION >= 310 && KDE_VERSION <= 314
+ int year;
+ KPopupFrame* popup = new KPopupFrame(this);
+ KDateInternalYearSelector* picker = new KDateInternalYearSelector(fontsize, popup);
+ // -----
+ picker->resize(picker->sizeHint());
+ popup->setMainWidget(picker);
+ connect(picker, SIGNAL(closeMe(int)), popup, SLOT(close(int)));
+ picker->setFocus();
+ if(popup->exec(selectYear->mapToGlobal(QPoint(0, selectMonth->height()))))
+ {
+ QDate date;
+ int day;
+ // -----
+ year=picker->getYear();
+ date=table->getDate();
+ day=date.day();
+ // ----- construct a valid date in this month:
+ date.setYMD(year, date.month(), 1);
+ date.setYMD(year, date.month(), QMIN(day, date.daysInMonth()));
+ // ----- set this month
+ setDate(date);
+ } else {
+ KNotifyClient::beep();
+ }
+ delete popup;
+#endif
+}
+
+void
+kMyMoneyCalendar::setEnabled(bool enable)
+{
+ QWidget *widgets[]= {
+ styleControl, yearForward, yearBackward, monthForward, monthBackward,
+ selectMonth, selectYear,
+ line, table, d->selectWeek, d->userButton1, d->userButton2 };
+ const int Size=sizeof(widgets)/sizeof(widgets[0]);
+ int count;
+ // -----
+ for(count=0; count<Size; ++count)
+ {
+ if (widgets[count])
+ widgets[count]->setEnabled(enable);
+ }
+}
+
+void
+kMyMoneyCalendar::lineEnterPressed()
+{
+ QDate temp;
+ // -----
+ if(val->date(line->text(), temp)==QValidator::Acceptable)
+ {
+ kdDebug() << "kMyMoneyCalendar::lineEnterPressed: valid date entered." << endl;
+ emit(dateEntered(temp));
+ setDate(temp);
+ } else {
+ KNotifyClient::beep();
+ kdDebug() << "kMyMoneyCalendar::lineEnterPressed: invalid date entered." << endl;
+ }
+}
+
+QSize
+kMyMoneyCalendar::sizeHint() const
+{
+ QSize tableSize=table->sizeHint();
+ QWidget *buttons[]={
+ styleControl,
+ yearBackward,
+ monthBackward,
+ selectMonth,
+ selectYear,
+ monthForward,
+ yearForward,
+ d->closeButton,
+ d->userButton1,
+ d->userButton2
+ };
+ const int NoOfButtons=sizeof(buttons)/sizeof(buttons[0]);
+ QSize sizes[NoOfButtons];
+ int cx=0, cy=0, count;
+ // ----- store the size hints:
+ for(count=0; count<NoOfButtons; ++count)
+ {
+ if ( buttons[count] )
+ sizes[count]=buttons[count]->sizeHint();
+ else
+ sizes[count] = QSize(0,0);
+
+ if(buttons[count]==selectMonth)
+ {
+ QSize metricBound = style().sizeFromContents(QStyle::CT_ToolButton, selectMonth, maxMonthRect);
+ cx+=QMAX(metricBound.width(), maxMonthRect.width()+2*QApplication::style().pixelMetric(QStyle::PM_ButtonMargin));
+ } else {
+ cx+=sizes[count].width();
+ }
+ cy=QMAX(sizes[count].height(), cy);
+ }
+ // ----- calculate width hint:
+ cx=QMAX(cx, tableSize.width()); // line edit ignored
+ // ----- calculate height hint:
+ cy+=tableSize.height()+line->sizeHint().height();
+ return QSize(cx, cy);
+}
+
+void
+kMyMoneyCalendar::setFontSize(int s)
+{
+ if (table)
+ {
+ QWidget *buttons[]= {
+ // styleControl
+ // yearBackward,
+ // monthBackward,
+ selectMonth,
+ selectYear,
+ // monthForward,
+ // yearForward
+ };
+ const int NoOfButtons=sizeof(buttons)/sizeof(buttons[0]);
+ int count;
+ QFont font;
+ QRect r;
+ // -----
+ fontsize=s;
+ for(count=0; count<NoOfButtons; ++count)
+ {
+ font=buttons[count]->font();
+ font.setPointSize(s);
+ buttons[count]->setFont(font);
+ }
+ QFontMetrics metrics(selectMonth->fontMetrics());
+ for(int i=1; i <= 12; ++i)
+ { // maxMonthRect is used by sizeHint()
+ r=metrics.boundingRect(MONTH_NAME(i, 2000, false));
+ maxMonthRect.setWidth(QMAX(r.width(), maxMonthRect.width()));
+ maxMonthRect.setHeight(QMAX(r.height(), maxMonthRect.height()));
+ }
+ table->setFontSize(s);
+ }
+}
+
+void
+kMyMoneyCalendar::setCloseButton( bool enable )
+{
+ if ( enable == (d->closeButton != 0L) )
+ return;
+
+ if ( enable ) {
+ d->closeButton = new QToolButton( this );
+ QToolTip::add(d->closeButton, i18n("Close"));
+ d->closeButton->setPixmap( SmallIcon("remove") );
+ connect( d->closeButton, SIGNAL( clicked() ),
+ topLevelWidget(), SLOT( close() ) );
+ }
+ else {
+ delete d->closeButton;
+ d->closeButton = 0L;
+ }
+
+ updateGeometry();
+}
+
+bool kMyMoneyCalendar::hasCloseButton() const
+{
+ return (d->closeButton != 0L);
+}
+
+int kMyMoneyCalendar::weekOfYear(QDate date)
+{
+ // Calculate ISO 8601 week number (taken from glibc/Gnumeric)
+ int year, week, wday, jan1wday, nextjan1wday;
+ QDate jan1date, nextjan1date;
+
+ year=date.year();
+ wday=date.dayOfWeek();
+
+ jan1date=QDate(year,1,1);
+ jan1wday=jan1date.dayOfWeek();
+
+ week = (date.dayOfYear()-1 + jan1wday-1)/7 + ((jan1wday-1) == 0 ? 1 : 0);
+
+ /* Does date belong to last week of previous year? */
+ if ((week == 0) && (jan1wday > 4 /*THURSDAY*/)) {
+ QDate tmpdate=QDate(year-1,12,31);
+ return weekOfYear(tmpdate);
+ }
+
+ if ((jan1wday <= 4 /*THURSDAY*/) && (jan1wday > 1 /*MONDAY*/))
+ week++;
+
+ if (week == 53) {
+ nextjan1date=QDate(year+1, 1, 1);
+ nextjan1wday = nextjan1date.dayOfWeek();
+ if (nextjan1wday <= 4 /*THURSDAY*/)
+ week = 1;
+ }
+
+ return week;
+}
+
+void kMyMoneyCalendar::virtual_hook( int /*id*/, void* /*data*/ )
+{ /*BASE::virtual_hook( id, data );*/ }
+
+void kMyMoneyCalendar::slotSetStyleWeekly()
+{
+ setType(kMyMoneyDateTbl::WEEKLY);
+}
+
+void kMyMoneyCalendar::slotSetStyleMonthly()
+{
+ setType(kMyMoneyDateTbl::MONTHLY);
+}
+
+void kMyMoneyCalendar::slotSetStyleQuarterly()
+{
+ setType(kMyMoneyDateTbl::QUARTERLY);
+}
+
+void kMyMoneyCalendar::setUserButton1(bool enable, QPushButton* pb)
+{
+ if ( enable == (d->userButton1 != 0L) )
+ return;
+
+ if ( enable ) {
+ d->userButton1 = pb;
+ }
+ else {
+ delete d->userButton1;
+ d->userButton1 = 0L;
+ }
+
+ updateGeometry();
+}
+
+void kMyMoneyCalendar::setUserButton2(bool enable, QPushButton* pb)
+{
+ if ( enable == (d->userButton2 != 0L) )
+ return;
+
+ if ( enable ) {
+ d->userButton2 = pb;
+ }
+ else {
+ delete d->userButton2;
+ d->userButton2 = 0L;
+ }
+
+ updateGeometry();
+}
+
+#include "kmymoneycalendar.moc"
diff --git a/kmymoney2/widgets/kmymoneycalendar.h b/kmymoney2/widgets/kmymoneycalendar.h
new file mode 100644
index 0000000..b0e2328
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneycalendar.h
@@ -0,0 +1,262 @@
+/***************************************************************************
+ kmymoneycalendar.h - description
+ -------------------
+ begin : Wed Jul 2 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+/***************************************************************************
+ * Contains code from KDatePicker in kdelibs-3.1.2.
+ * Original license message:
+ *
+ This file is part of the KDE libraries
+ Copyright (C) 1997 Tim D. Gilman (tdgilman@best.org)
+ (C) 1998-2001 Mirko Boehm (mirko@kde.org)
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+ ****************************************************************************/
+
+
+#ifndef KMYMONEYCALENDAR_H
+#define KMYMONEYCALENDAR_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qframe.h>
+#include <qdatetime.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include "kdecompat.h"
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include "kmymoneydatetbl.h"
+
+class QLineEdit;
+class QToolButton;
+class KDateValidator;
+class kMyMoneyDateTbl;
+class QPushButton;
+
+/**
+ * A representation of a calendar.
+ *
+ * @author Michael Edwardes 2003
+ *
+**/
+class kMyMoneyCalendar : public QFrame {
+ Q_OBJECT
+public:
+
+public:
+ /**
+ * Standard constructor.
+ **/
+ kMyMoneyCalendar(QWidget *parent=0, const char *name=0);
+
+ /**
+ * Standard destructor.
+ **/
+ ~kMyMoneyCalendar();
+
+ /**
+ * Sets the calendar type.
+ **/
+ void setType(kMyMoneyDateTbl::calendarType type) { table->setType(type); }
+
+ /**
+ * Get the calendar type.
+ **/
+ kMyMoneyDateTbl::calendarType type(void) const { return table->type(); }
+
+ /** The size hint for date pickers. The size hint recommends the
+ * minimum size of the widget so that all elements may be placed
+ * without clipping. This sometimes looks ugly, so when using the
+ * size hint, try adding 28 to each of the reported numbers of
+ * pixels.
+ **/
+ QSize sizeHint() const;
+
+ /**
+ * Sets the date.
+ *
+ * @returns @p false and does not change anything
+ * if the date given is invalid.
+ **/
+ bool setDate(const QDate&);
+
+ /**
+ * Returns the selected date.
+ * @deprecated
+ **/
+ const QDate& getDate() const;
+
+ /**
+ * @returns the selected date.
+ */
+ const QDate &date() const;
+
+ /**
+ * Enables or disables the widget.
+ **/
+ void setEnabled(bool);
+
+ /**
+ * Sets the font size of the widgets elements.
+ **/
+ void setFontSize(int);
+ /**
+ * Returns the font size of the widget elements.
+ */
+ int fontSize() const
+ { return fontsize; }
+
+ /**
+ * By calling this method with @p enable = true, KDatePicker will show
+ * a little close-button in the upper button-row. Clicking the
+ * close-button will cause the KDatePicker's topLevelWidget()'s close()
+ * method being called. This is mostly useful for toplevel datepickers
+ * without a window manager decoration.
+ * @see #hasCloseButton
+ * @since 3.1
+ */
+ void setCloseButton( bool enable );
+
+ /**
+ * @returns true if a KDatePicker shows a close-button.
+ * @see #setCloseButton
+ * @since 3.1
+ */
+ bool hasCloseButton() const;
+
+ /**
+ * Dynamically set the Date Table
+ **/
+ virtual void setDateTable(kMyMoneyDateTbl *tbl) = 0;
+
+ void setUserButton1(bool enable, QPushButton* pb);
+ void setUserButton2(bool enable, QPushButton* pb);
+
+protected:
+ /// to catch move keyEvents when QLineEdit has keyFocus
+ virtual bool eventFilter(QObject *o, QEvent *e );
+ /// the resize event
+ virtual void resizeEvent(QResizeEvent*);
+ /// the style control button
+ QPushButton *styleControl;
+ /// the year forward button
+ QToolButton *yearForward;
+ /// the year backward button
+ QToolButton *yearBackward;
+ /// the month forward button
+ QToolButton *monthForward;
+ /// the month backward button
+ QToolButton *monthBackward;
+ /// the button for selecting the month directly
+ QToolButton *selectMonth;
+ /// the button for selecting the year directly
+ QToolButton *selectYear;
+ /// the line edit to enter the date directly
+ QLineEdit *line;
+ /// the validator for the line edit:
+ KDateValidator *val;
+ /// the date table
+ kMyMoneyDateTbl *table;
+ /// the size calculated during resize events
+ // QSize sizehint;
+ /// the widest month string in pixels:
+ QSize maxMonthRect;
+
+protected slots:
+ void dateChangedSlot(QDate);
+ void tableClickedSlot();
+ void monthForwardClicked();
+ void monthBackwardClicked();
+ void yearForwardClicked();
+ void yearBackwardClicked();
+ /// @since 3.1
+ void selectWeekClicked();
+ void selectMonthClicked();
+ void selectYearClicked();
+ void lineEnterPressed();
+
+ void slotSetStyleWeekly();
+ void slotSetStyleMonthly();
+ void slotSetStyleQuarterly();
+
+signals:
+ /** This signal is emitted each time the selected date is changed.
+ * Usually, this does not mean that the date has been entered,
+ * since the date also changes, for example, when another month is
+ * selected.
+ * @see dateSelected
+ */
+ void dateChanged(QDate);
+ /** This signal is emitted each time a day has been selected by
+ * clicking on the table (hitting a day in the current month). It
+ * has the same meaning as dateSelected() in older versions of
+ * KDatePicker.
+ */
+ void dateSelected(QDate);
+ /** This signal is emitted when enter is pressed and a VALID date
+ * has been entered before into the line edit. Connect to both
+ * dateEntered() and dateSelected() to receive all events where the
+ * user really enters a date.
+ */
+ void dateEntered(QDate);
+ /** This signal is emitted when the day has been selected by
+ * clicking on it in the table.
+ */
+ void tableClicked();
+
+private:
+ /// the font size for the widget
+ int fontsize;
+
+protected:
+ virtual void virtual_hook( int id, void* data );
+ void init( const QDate &dt );
+
+private:
+ class kMyMoneyCalendarPrivate;
+ kMyMoneyCalendarPrivate* const d;
+ // calculate ISO 8601 week number
+ int weekOfYear(QDate);
+
+#if KDE_IS_VERSION(3,2,0)
+ #define MONTH_NAME(a,b,c) KGlobal::locale()->calendar()->monthName(a,b,c)
+#else
+ #define MONTH_NAME(a,b,c) KGlobal::locale()->monthName(a,c)
+#endif
+};
+
+#endif
diff --git a/kmymoney2/widgets/kmymoneycategory.cpp b/kmymoney2/widgets/kmymoneycategory.cpp
new file mode 100644
index 0000000..e14a5a5
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneycategory.cpp
@@ -0,0 +1,203 @@
+/***************************************************************************
+ kmymoneycategory.cpp - description
+ -------------------
+ begin : Mon Jul 10 2006
+ copyright : (C) 2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qrect.h>
+#include <qpainter.h>
+#include <qpalette.h>
+#include <qlayout.h>
+#include <qtimer.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kpushbutton.h>
+#include <kdebug.h>
+#include <kiconloader.h>
+#include <kguiitem.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoneycategory.h"
+#include <kmymoney/mymoneyfile.h>
+#include "kmymoneyaccountcompletion.h"
+
+class KMyMoneyCategory::Private
+{
+public:
+ Private() :
+ splitButton(0),
+ frame(0),
+ recursive(false) {}
+
+ KPushButton* splitButton;
+ QFrame* frame;
+ bool recursive;
+};
+
+KMyMoneyCategory::KMyMoneyCategory(QWidget* parent, const char * name, bool splitButton) :
+ KMyMoneyCombo(true, parent, name),
+ d(new Private)
+{
+ if(splitButton) {
+ d->frame = new QFrame(0);
+ d->frame->setFocusProxy(this);
+ QHBoxLayout* layout = new QHBoxLayout(d->frame);
+ // make sure not to use our own overridden version of reparent() here
+ KMyMoneyCombo::reparent(d->frame, getWFlags() & ~WType_Mask, QPoint(0, 0), true);
+ if(parent)
+ d->frame->reparent(parent, QPoint(0, 0), true);
+
+ // create button
+ KGuiItem splitButtonItem("",
+ QIconSet(KGlobal::iconLoader()->loadIcon("split_transaction", KIcon::Small,
+ KIcon::SizeSmall)), "", "");
+ d->splitButton = new KPushButton(splitButtonItem, d->frame, "splitButton");
+
+ layout->addWidget(this, 5);
+ layout->addWidget(d->splitButton);
+ }
+
+ m_completion = new kMyMoneyAccountCompletion(this, 0);
+ connect(m_completion, SIGNAL(itemSelected(const QString&)), this, SLOT(slotItemSelected(const QString&)));
+ connect(this, SIGNAL(textChanged(const QString&)), m_completion, SLOT(slotMakeCompletion(const QString&)));
+}
+
+KMyMoneyCategory::~KMyMoneyCategory()
+{
+ // make sure to wipe out the frame, button and layout
+ if(d->frame && !d->frame->parentWidget())
+ d->frame->deleteLater();
+
+ delete d;
+}
+
+KPushButton* KMyMoneyCategory::splitButton(void) const
+{
+ return d->splitButton;
+}
+
+void KMyMoneyCategory::setPalette(const QPalette& palette)
+{
+ if(d->frame)
+ d->frame->setPalette(palette);
+ KMyMoneyCombo::setPalette(palette);
+}
+
+void KMyMoneyCategory::reparent(QWidget *parent, WFlags w, const QPoint& pos, bool showIt)
+{
+ if(d->frame)
+ d->frame->reparent(parent, w, pos, showIt);
+ else
+ KMyMoneyCombo::reparent(parent, w, pos, showIt);
+}
+
+kMyMoneyAccountSelector* KMyMoneyCategory::selector(void) const
+{
+ return dynamic_cast<kMyMoneyAccountSelector*>(KMyMoneyCombo::selector());
+}
+
+void KMyMoneyCategory::setCurrentTextById(const QString& id)
+{
+ if(!id.isEmpty())
+ setCurrentText(MyMoneyFile::instance()->accountToCategory(id));
+ else
+ setCurrentText();
+ setSuppressObjectCreation(false);
+}
+
+void KMyMoneyCategory::slotItemSelected(const QString& id)
+{
+ setCurrentTextById(id);
+
+ m_completion->hide();
+
+ if(m_id != id) {
+ m_id = id;
+ emit itemSelected(id);
+ }
+}
+
+void KMyMoneyCategory::focusOutEvent(QFocusEvent *ev)
+{
+ if(isSplitTransaction()) {
+ KComboBox::focusOutEvent(ev);
+ } else {
+ KMyMoneyCombo::focusOutEvent(ev);
+ }
+}
+
+void KMyMoneyCategory::focusInEvent(QFocusEvent *ev)
+{
+ KMyMoneyCombo::focusInEvent(ev);
+
+ // make sure, we get a clean state before we automagically move the focus to
+ // some other widget (like for 'split transaction'). We do this by delaying
+ // the emission of the focusIn signal until the next run of the event loop.
+ QTimer::singleShot(0, this, SIGNAL(focusIn()));
+}
+
+void KMyMoneyCategory::setSplitTransaction(void)
+{
+ setCurrentText(i18n("Split transaction (category replacement)", "Split transaction"));
+ setSuppressObjectCreation(true);
+}
+
+bool KMyMoneyCategory::isSplitTransaction(void) const
+{
+ return currentText() == i18n("Split transaction (category replacement)", "Split transaction");
+}
+
+void KMyMoneyCategory::setEnabled(bool enable)
+{
+ if(d->recursive || !d->frame) {
+ KMyMoneyCombo::setEnabled(enable);
+
+ } else if(d->frame) {
+ d->recursive = true;
+ d->frame->setEnabled(enable);
+ d->recursive = false;
+ }
+}
+
+void KMyMoneyCategory::setDisabled(bool disable)
+{
+ setEnabled(!disable);
+}
+
+KMyMoneySecurity::KMyMoneySecurity(QWidget* parent, const char * name) :
+ KMyMoneyCategory(parent, name, false)
+{
+}
+
+KMyMoneySecurity::~KMyMoneySecurity()
+{
+}
+
+void KMyMoneySecurity::setCurrentTextById(const QString& id)
+{
+ if(!id.isEmpty())
+ KMyMoneyCategory::setCurrentText(MyMoneyFile::instance()->account(id).name());
+ else
+ KMyMoneyCategory::setCurrentText();
+}
+
+#include "kmymoneycategory.moc"
diff --git a/kmymoney2/widgets/kmymoneycategory.h b/kmymoney2/widgets/kmymoneycategory.h
new file mode 100644
index 0000000..474062d
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneycategory.h
@@ -0,0 +1,196 @@
+/***************************************************************************
+ kmymoneycategory.h
+ -------------------
+ begin : Mon Jul 10 2006
+ copyright : (C) 2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYCATEGORY_H
+#define KMYMONEYCATEGORY_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+class QWidget;
+class QFrame;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include "kdecompat.h"
+#include <kcombobox.h>
+class KPushButton;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/kmymoneycombo.h>
+
+class kMyMoneyAccountSelector;
+
+/**
+ * This class implements a text based account/category selector.
+ * When initially used, the widget has the functionality of a KComboBox object.
+ * Whenever a key is pressed, the set of loaded accounts is searched for
+ * accounts which match the currently entered text.
+ *
+ * If any match is found a list selection box is opened and the user can use
+ * the up/down, page-up/page-down keys or the mouse to navigate in the list. If
+ * an account is selected, the selection box is closed. Other key-strokes are
+ * directed to the parent object to manipulate the text. The visible contents of
+ * the selection box is updated with every key-stroke.
+ *
+ * This object is a replacement of the kMyMoneyCategory object and should be used
+ * for new code.
+ *
+ * @author Thomas Baumgart
+ */
+class KMyMoneyCategory : public KMyMoneyCombo
+{
+ Q_OBJECT
+public:
+ /**
+ * Standard constructor for the account selection object.
+ *
+ * If parameter @a splitButton is @a true, the widget
+ * will construct a surrounding QFrame and reparent itself to be a child of this
+ * QFrame. It also adds a KPushButton with the "Split" icon to the right of the
+ * input field. In this case it is important not to use the pointer to this widget
+ * but it's parent when placing the object in a QLayout, QTable or some such. The
+ * parent widget (the QFrame in this case) can be extracted with the parentWidget()
+ * method.
+ *
+ * Reparenting is handled by the object transparently for both cases.
+ *
+ * Standard usage example (no split button):
+ *
+ * @code
+ * KMyMoneyCategory* category = new KMyMoneyCategory;
+ * category->reparent(newParent);
+ * layout->addWidget(category);
+ * table->setCellWidget(category);
+ * @endcode
+ *
+ * Enhanced usage example (with split button):
+ *
+ * @code
+ * KMyMoneyCategory* category = new KMyMoneyCategory(0, 0, true);
+ * category->reparent(newParent);
+ * layout->addWidget(category->parentWidget());
+ * table->setCellWidget(category->parentWidget());
+ * @endcode
+ */
+ KMyMoneyCategory(QWidget* parent = 0, const char* name = 0, bool splitButton = false);
+
+ virtual ~KMyMoneyCategory();
+
+ /**
+ * This member returns a pointer to the completion object.
+ *
+ * @return pointer to completion's selector object
+ */
+ kMyMoneyAccountSelector* selector(void) const;
+
+ /**
+ * This member returns a pointer to the split button. In case the @a splitButton parameter
+ * of the constructor was @a false, this method prints a warning to stderr and returns 0.
+ */
+ KPushButton* splitButton(void) const;
+
+ /**
+ * Reimplemented for internal reasons. No API change
+ */
+ virtual void reparent( QWidget *parent, WFlags, const QPoint &, bool showIt = FALSE );
+
+ /**
+ * Reimplemented for internal reasons. No API change.
+ */
+ virtual void setPalette(const QPalette& palette);
+
+ /**
+ * Force the text field to show the text for split transaction.
+ */
+ void setSplitTransaction(void);
+
+ /**
+ * Check if the text field contains the text for a split transaction
+ */
+ bool isSplitTransaction(void) const;
+
+ /**
+ * overridden for internal reasons, no API change
+ */
+ void setCurrentText(const QString& txt = QString()) { KMyMoneyCombo::setCurrentText(txt); }
+
+protected:
+ /**
+ * Reimplemented to support protected category text ("split transactions")
+ *
+ * @sa focusIn()
+ */
+ virtual void focusInEvent(QFocusEvent* ev);
+
+ /**
+ * Reimplemented to support protected category text ("split transactions")
+ */
+ virtual void focusOutEvent(QFocusEvent* ev);
+
+ /**
+ * set the widgets text area based on the item with the given @a id.
+ */
+ virtual void setCurrentTextById(const QString& id);
+
+public slots:
+ virtual void slotItemSelected(const QString& id);
+ virtual void setEnabled(bool);
+ virtual void setDisabled(bool);
+
+signals:
+ /**
+ * Signal to inform other objects that this object has reached focus.
+ * Used for e.g. to open the split dialog when the focus reaches this
+ * object and it contains the text 'Split transaction'.
+ *
+ * @sa focusInEvent()
+ */
+ void focusIn(void);
+
+private:
+ /// \internal d-pointer class.
+ class Private;
+ /// \internal d-pointer instance.
+ Private* const d;
+};
+
+
+class KMyMoneySecurity : public KMyMoneyCategory
+{
+ Q_OBJECT
+public:
+ KMyMoneySecurity(QWidget* parent = 0, const char* name = 0);
+ virtual ~KMyMoneySecurity();
+
+ /**
+ * overridden for internal reasons, no API change
+ */
+ void setCurrentText(const QString& txt = QString()) { KMyMoneyCategory::setCurrentText(txt); }
+
+protected:
+ /**
+ * set the widgets text area based on the item with the given @a id.
+ */
+ virtual void setCurrentTextById(const QString& id);
+};
+
+#endif
diff --git a/kmymoney2/widgets/kmymoneychecklistitem.cpp b/kmymoney2/widgets/kmymoneychecklistitem.cpp
new file mode 100644
index 0000000..8992beb
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneychecklistitem.cpp
@@ -0,0 +1,151 @@
+/***************************************************************************
+ kmymoneychecklistitem
+ -------------------
+ begin : Wed Jun 28 2006
+ copyright : (C) 2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qfont.h>
+#include <qpainter.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoneychecklistitem.h"
+#include "kmymoneylistviewitem.h"
+#include "../kmymoneyglobalsettings.h"
+
+KMyMoneyCheckListItem::KMyMoneyCheckListItem(QListView* parent, const QString& txt, const QString& key, const QString& id, Type type) :
+ QCheckListItem(parent, txt, type),
+ m_key(key),
+ m_id(id),
+ m_isOdd(0),
+ m_isKnown(0)
+{
+ setOn(true);
+ if(key.isEmpty())
+ m_key = txt;
+}
+
+KMyMoneyCheckListItem::KMyMoneyCheckListItem(QListViewItem* parent, const QString& txt, const QString& key, const QString& id, Type type) :
+ QCheckListItem(parent, txt, type),
+ m_key(key),
+ m_id(id),
+ m_isOdd(0),
+ m_isKnown(0)
+{
+ setOn(true);
+ if(key.isEmpty())
+ m_key = txt;
+}
+
+KMyMoneyCheckListItem::KMyMoneyCheckListItem(QListView* parent, QListViewItem* after, const QString& txt, const QString& key, const QString& id, Type type) :
+ QCheckListItem(parent, after, txt, type),
+ m_key(key),
+ m_id(id),
+ m_isOdd(0),
+ m_isKnown(0)
+{
+ setOn(true);
+ if(key.isEmpty())
+ m_key = txt;
+}
+
+KMyMoneyCheckListItem::~KMyMoneyCheckListItem()
+{
+}
+
+QString KMyMoneyCheckListItem::key(int column, bool ascending) const
+{
+ Q_UNUSED(ascending);
+
+ if(column == 0)
+ return m_key[0] + text(0);
+ return m_key.mid(1);
+}
+
+void KMyMoneyCheckListItem::stateChange(bool state)
+{
+ emit stateChanged(state);
+}
+
+void KMyMoneyCheckListItem::paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment)
+{
+ QColorGroup _cg = cg;
+ _cg.setColor(QColorGroup::Base, backgroundColor());
+
+ // write the groups in bold
+ QFont f = p->font();
+ f.setBold(!isSelectable());
+ p->setFont(f);
+
+ QCheckListItem::paintCell(p, _cg, column, width, alignment);
+}
+
+const QColor KMyMoneyCheckListItem::backgroundColor()
+{
+ return isAlternate() ? KMyMoneyGlobalSettings::listBGColor() : KMyMoneyGlobalSettings::listColor();
+}
+
+bool KMyMoneyCheckListItem::isAlternate(void)
+{
+// logic taken from KListViewItem::isAlternate()
+ KMyMoneyCheckListItem* ciAbove;
+ KMyMoneyListViewItem* liAbove;
+ ciAbove = dynamic_cast<KMyMoneyCheckListItem*> (itemAbove());
+ liAbove = dynamic_cast<KMyMoneyListViewItem*> (itemAbove());
+
+ m_isKnown = ciAbove ? ciAbove->m_isKnown : (liAbove ? liAbove->m_isKnown : true);
+ if(m_isKnown) {
+ m_isOdd = ciAbove ? !ciAbove->m_isOdd : (liAbove ? !liAbove->m_isOdd : false);
+ } else {
+ KMyMoneyCheckListItem* clItem;
+ KMyMoneyListViewItem* liItem;
+ bool previous = true;
+ if(QListViewItem::parent()) {
+ clItem = dynamic_cast<KMyMoneyCheckListItem *>(QListViewItem::parent());
+ liItem = dynamic_cast<KMyMoneyListViewItem*>(QListViewItem::parent());
+ if(clItem)
+ previous = clItem->m_isOdd;
+ else
+ previous = liItem->m_isOdd;
+ clItem = dynamic_cast<KMyMoneyCheckListItem *>(QListViewItem::parent()->firstChild());
+ liItem = dynamic_cast<KMyMoneyListViewItem*>(QListViewItem::parent()->firstChild());
+ } else {
+ clItem = dynamic_cast<KMyMoneyCheckListItem *>(listView()->firstChild());
+ liItem = dynamic_cast<KMyMoneyListViewItem*>(listView()->firstChild());
+ }
+ while(clItem || liItem) {
+ if(clItem) {
+ clItem->m_isOdd = previous = !previous;
+ clItem->m_isKnown = true;
+ liItem = dynamic_cast<KMyMoneyListViewItem *>(clItem->nextSibling());
+ clItem = dynamic_cast<KMyMoneyCheckListItem *>(clItem->nextSibling());
+ } else if(liItem) {
+ liItem->m_isOdd = previous = !previous;
+ liItem->m_isKnown = true;
+ clItem = dynamic_cast<KMyMoneyCheckListItem *>(liItem->nextSibling());
+ liItem = dynamic_cast<KMyMoneyListViewItem *>(liItem->nextSibling());
+ }
+ }
+ }
+ return m_isOdd;
+}
+
+#include "kmymoneychecklistitem.moc"
diff --git a/kmymoney2/widgets/kmymoneychecklistitem.h b/kmymoney2/widgets/kmymoneychecklistitem.h
new file mode 100644
index 0000000..6a22ec9
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneychecklistitem.h
@@ -0,0 +1,93 @@
+/***************************************************************************
+ kmymoneychecklistitem - description
+ -------------------
+ begin : Wed Jun 28 2006
+ copyright : (C) 2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYCHECKLISTITEM_H
+#define KMYMONEYCHECKLISTITEM_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qobject.h>
+#include <qlistview.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+class KMyMoneyListViewItem;
+
+/**
+ * This class implements a derived version of a QCheckListItem that
+ * allows the storage of an engine object id with the object and emits
+ * a signal upon state change.
+ *
+ * @author Thomas Baumgart
+ */
+class KMyMoneyCheckListItem : public QObject, public QCheckListItem
+{
+ friend class KMyMoneyListViewItem;
+
+ Q_OBJECT
+public:
+ KMyMoneyCheckListItem(QListView *parent, const QString& txt, const QString& key, const QString& id, Type type = QCheckListItem::CheckBox);
+ KMyMoneyCheckListItem(QListView *parent, QListViewItem* after, const QString& txt, const QString& key, const QString& id, Type type = QCheckListItem::CheckBox);
+ KMyMoneyCheckListItem(QListViewItem *parent, const QString& txt, const QString& key, const QString& id, Type type = QCheckListItem::CheckBox);
+ ~KMyMoneyCheckListItem();
+
+ const QString& id(void) const { return m_id; };
+
+ /**
+ * use my own paint method
+ */
+ void paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment);
+
+ /**
+ * use my own backgroundColor method
+ */
+ const QColor backgroundColor();
+
+ /**
+ * see KListViewItem::isAlternate()
+ */
+ bool isAlternate(void);
+
+ /**
+ * This method returns a const reference to the key passed to the constructor. The column
+ * defines what is returned: For @a column equals 0, the first character passed as @a key to
+ * the constructor concatenated with the value returned by text(0) is returned. For @a column
+ * equals to 1, the @a key as passed to the constructor except the first character is returned.
+ */
+ QString key(int column, bool ascending) const;
+
+signals:
+ void stateChanged(bool);
+
+protected:
+ virtual void stateChange(bool);
+
+private:
+ QString m_key;
+ QString m_id;
+ // copied from KListViewItem()
+ unsigned int m_isOdd : 1;
+ unsigned int m_isKnown : 1;
+ unsigned int m_unused : 30;
+};
+
+#endif
diff --git a/kmymoney2/widgets/kmymoneycombo.cpp b/kmymoney2/widgets/kmymoneycombo.cpp
new file mode 100644
index 0000000..8bbec10
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneycombo.cpp
@@ -0,0 +1,778 @@
+/***************************************************************************
+ kmymoneycombo.cpp - description
+ -------------------
+ begin : Mon Mar 12 2007
+ copyright : (C) 2007 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qrect.h>
+#include <qstyle.h>
+#include <qpainter.h>
+#include <qapplication.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <klistview.h>
+#include <kdebug.h>
+#include <kconfig.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoneycombo.h"
+#include "kmymoneyselector.h"
+#include <kmymoney/kmymoneycompletion.h>
+#include <kmymoney/kmymoneylineedit.h>
+#include <kmymoney/mymoneysplit.h>
+#include <kmymoney/registeritem.h>
+#include <kmymoney/mymoneyscheduled.h>
+#include "../kmymoneyutils.h"
+
+KMyMoneyCombo::KMyMoneyCombo(QWidget *w, const char *name) :
+ KComboBox(w, name),
+ m_completion(0),
+ m_edit(0),
+ m_canCreateObjects(false),
+ m_inFocusOutEvent(false)
+{
+}
+
+KMyMoneyCombo::KMyMoneyCombo(bool rw, QWidget *w, const char *name) :
+ KComboBox(rw, w, name),
+ m_completion(0),
+ m_edit(0),
+ m_canCreateObjects(false),
+ m_inFocusOutEvent(false)
+{
+ if(rw) {
+ m_edit = new kMyMoneyLineEdit(this, "combo edit");
+ setLineEdit(m_edit);
+ }
+}
+
+void KMyMoneyCombo::setCurrentTextById(const QString& id)
+{
+ setCurrentText();
+ if(!id.isEmpty()) {
+ QListViewItem* item = selector()->item(id);
+ if(item)
+ setCurrentText(item->text(0));
+ }
+}
+
+void KMyMoneyCombo::slotItemSelected(const QString& id)
+{
+ if(editable()) {
+ bool blocked = signalsBlocked();
+ blockSignals(true);
+ setCurrentTextById(id);
+ blockSignals(blocked);
+ }
+
+ m_completion->hide();
+
+ if(m_id != id) {
+ m_id = id;
+ emit itemSelected(id);
+ }
+}
+
+void KMyMoneyCombo::setEditable(bool y)
+{
+ if(y == editable())
+ return;
+
+ KComboBox::setEditable(y);
+
+ // make sure we use our own line edit style
+ if(y) {
+ m_edit = new kMyMoneyLineEdit(this, "combo edit");
+ setLineEdit(m_edit);
+ m_edit->setPaletteBackgroundColor(paletteBackgroundColor());
+
+ } else {
+ m_edit = 0;
+ }
+}
+
+void KMyMoneyCombo::setHint(const QString& hint) const
+{
+ if(m_edit)
+ m_edit->setHint(hint);
+}
+
+void KMyMoneyCombo::paintEvent(QPaintEvent* ev)
+{
+ KComboBox::paintEvent(ev);
+
+ // if we don't have an edit field, we need to paint the text onto the button
+ if(!m_edit) {
+ if(m_completion) {
+ QStringList list;
+ selector()->selectedItems(list);
+ if(!list.isEmpty()) {
+ QString str = selector()->item(list[0])->text(0);
+ // we only paint, if the text is longer than 1 char. Assumption
+ // is that length 1 is the blank case so no need to do painting
+ if(str.length() > 1) {
+ QPainter p( this );
+ const QColorGroup & g = colorGroup();
+ p.setPen(g.text());
+
+ QRect re = style().querySubControlMetrics( QStyle::CC_ComboBox, this,
+ QStyle::SC_ComboBoxEditField );
+ re = QStyle::visualRect(re, this);
+ p.setClipRect( re );
+ p.save();
+ p.setFont(font());
+ QFontMetrics fm(font());
+ int x = re.x(), y = re.y() + fm.ascent();
+ p.drawText( x, y, str );
+ p.restore();
+ }
+ }
+ }
+ }
+}
+
+void KMyMoneyCombo::setPaletteBackgroundColor(const QColor& color)
+{
+ KComboBox::setPaletteBackgroundColor(color);
+ if(m_edit) {
+ m_edit->setPaletteBackgroundColor(color);
+ }
+}
+
+void KMyMoneyCombo::mousePressEvent(QMouseEvent *e)
+{
+ // mostly copied from QCombo::mousePressEvent() and adjusted for our needs
+ if(e->button() != LeftButton)
+ return;
+
+ if(((!editable() || isInArrowArea(mapToGlobal(e->pos()))) && selector()->itemList().count()) && !m_completion->isVisible()) {
+ m_completion->show();
+ }
+
+ if(m_timer.isActive()) {
+ m_timer.stop();
+ m_completion->slotMakeCompletion("");
+ } else {
+ KConfig config( "kcminputrc", true );
+ config.setGroup("KDE");
+ m_timer.start(config.readNumEntry("DoubleClickInterval", 400), true);
+ }
+}
+
+bool KMyMoneyCombo::isInArrowArea(const QPoint& pos) const
+{
+ QRect arrowRect = style().querySubControlMetrics( QStyle::CC_ComboBox, this,
+ QStyle::SC_ComboBoxArrow);
+ arrowRect = QStyle::visualRect(arrowRect, this);
+
+ // Correction for motif style, where arrow is smaller
+ // and thus has a rect that doesn't fit the button.
+ arrowRect.setHeight( QMAX( height() - (2 * arrowRect.y()), arrowRect.height() ) );
+
+ // if the button is not editable, it covers the whole widget
+ if(!editable())
+ arrowRect = rect();
+
+ return arrowRect.contains(mapFromGlobal(pos));
+}
+
+void KMyMoneyCombo::keyPressEvent(QKeyEvent* e)
+{
+ if((e->key() == Key_F4 && e->state() == 0 ) ||
+ (e->key() == Key_Down && (e->state() & AltButton)) ||
+ (!editable() && e->key() == Key_Space)) {
+ // if we have at least one item in the list, we open the dropdown
+ if(selector()->listView()->firstChild())
+ m_completion->show();
+ e->ignore();
+ return;
+ }
+ KComboBox::keyPressEvent(e);
+}
+
+void KMyMoneyCombo::connectNotify(const char* signal)
+{
+ if(signal && !strcmp(signal, SIGNAL(createItem(const QString&,QString&)))) {
+ m_canCreateObjects = true;
+ }
+}
+
+void KMyMoneyCombo::disconnectNotify(const char* signal)
+{
+ if(signal && !strcmp(signal, SIGNAL(createItem(const QString&,QString&)))) {
+ m_canCreateObjects = false;
+ }
+}
+
+void KMyMoneyCombo::focusOutEvent(QFocusEvent* e)
+{
+ if(m_inFocusOutEvent) {
+ KComboBox::focusOutEvent(e);
+ return;
+ }
+
+ m_inFocusOutEvent = true;
+ if(editable() && !currentText().isEmpty()) {
+ if(m_canCreateObjects) {
+ if(!m_completion->selector()->contains(currentText())) {
+ QString id;
+ // annouce that we go into a possible dialog to create an object
+ // This can be used by upstream widgets to disable filters etc.
+ emit objectCreation(true);
+
+ emit createItem(currentText(), id);
+
+ // Announce that we return from object creation
+ emit objectCreation(false);
+
+ // update the field to a possibly created object
+ m_id = id;
+ setCurrentTextById(id);
+
+ // make sure the completion does not show through
+ m_completion->hide();
+ }
+
+ // else if we cannot create objects, and the current text is not
+ // in the list, then we clear the text and the selection.
+ } else if(!m_completion->selector()->contains(currentText())) {
+ setCurrentText(QString());
+ }
+ }
+
+ KComboBox::focusOutEvent(e);
+
+ // force update of hint and id if there is no text in the widget
+ if(editable() && currentText().isEmpty()) {
+ QString id = m_id;
+ m_id = QString();
+ if(!id.isEmpty())
+ emit itemSelected(m_id);
+ repaint();
+ }
+ m_inFocusOutEvent = false;
+}
+
+KMyMoneySelector* KMyMoneyCombo::selector(void) const
+{
+ return m_completion->selector();
+}
+
+kMyMoneyCompletion* KMyMoneyCombo::completion(void) const
+{
+ return m_completion;
+}
+
+void KMyMoneyCombo::selectedItem(QString& id) const
+{
+ id = m_id;
+}
+
+void KMyMoneyCombo::selectedItems(QStringList& list) const
+{
+ if(lineEdit() && lineEdit()->text().length() == 0) {
+ list.clear();
+ } else {
+ m_completion->selector()->selectedItems(list);
+ }
+}
+
+void KMyMoneyCombo::setSelectedItem(const QString& id)
+{
+ m_completion->selector()->setSelected(id, true);
+ blockSignals(true);
+ slotItemSelected(id);
+ blockSignals(false);
+ update();
+}
+
+QSize KMyMoneyCombo::sizeHint() const
+{
+ return KComboBox::sizeHint();
+
+ // I wanted to use the code below to adjust the size of the combo box
+ // according to the largest item in the selector list. Apparently that
+ // does not work too well in the enter and edit schedule dialog for
+ // the category combo box. So we just use the standard implementation for now.
+#if 0
+ constPolish();
+ int i, w;
+ QFontMetrics fm = fontMetrics();
+
+ int maxW = count() ? 18 : 7 * fm.width(QChar('x')) + 18;
+ int maxH = QMAX( fm.lineSpacing(), 14 ) + 2;
+
+ w = selector()->optimizedWidth();
+ if ( w > maxW )
+ maxW = w;
+
+ QSize sizeHint = (style().sizeFromContents(QStyle::CT_ComboBox, this,
+ QSize(maxW, maxH)).
+ expandedTo(QApplication::globalStrut()));
+
+ return sizeHint;
+#endif
+}
+
+
+
+KMyMoneyReconcileCombo::KMyMoneyReconcileCombo(QWidget* w, const char* name) :
+ KMyMoneyCombo(false, w, name)
+{
+ m_completion = new kMyMoneyCompletion(this, 0);
+ // connect(m_completion, SIGNAL(itemSelected(const QString&)), this, SIGNAL(itemSelected(const QString&)));
+
+ // add the items in reverse order of appearance (see KMyMoneySelector::newItem() for details)
+ // selector()->newTopItem(i18n("Frozen"), QString(), "F");
+ selector()->newTopItem(i18n("Reconciled"), QString(), "R");
+ selector()->newTopItem(i18n("Cleared"), QString(), "C");
+ selector()->newTopItem(i18n("Not reconciled"), QString(), " ");
+ selector()->newTopItem(" ", QString(), "U");
+
+ connect(m_completion, SIGNAL(itemSelected(const QString&)), this, SLOT(slotItemSelected(const QString&)));
+ connect(this, SIGNAL(itemSelected(const QString&)), this, SLOT(slotSetState(const QString&)));
+}
+
+void KMyMoneyReconcileCombo::slotSetState(const QString& state)
+{
+ setSelectedItem(state);
+}
+
+void KMyMoneyReconcileCombo::removeDontCare(void)
+{
+ selector()->removeItem("U");
+}
+
+void KMyMoneyReconcileCombo::setState(MyMoneySplit::reconcileFlagE state)
+{
+ QString id;
+ switch(state) {
+ case MyMoneySplit::NotReconciled:
+ id = " ";
+ break;
+ case MyMoneySplit::Cleared:
+ id = "C";
+ break;
+ case MyMoneySplit::Reconciled:
+ id = "R";
+ break;
+ case MyMoneySplit::Frozen:
+ id = "F";
+ break;
+ case MyMoneySplit::Unknown:
+ id = "U";
+ break;
+ default:
+ kdDebug(2) << "Unknown reconcile state '" << state << "' in KMyMoneyComboReconcile::setState()\n";
+ break;
+ }
+ setSelectedItem(id);
+}
+
+MyMoneySplit::reconcileFlagE KMyMoneyReconcileCombo::state(void) const
+{
+ MyMoneySplit::reconcileFlagE state = MyMoneySplit::NotReconciled;
+
+ QStringList list;
+ selector()->selectedItems(list);
+ if(!list.isEmpty()) {
+ if(list[0] == "C")
+ state = MyMoneySplit::Cleared;
+ if(list[0] == "R")
+ state = MyMoneySplit::Reconciled;
+ if(list[0] == "F")
+ state = MyMoneySplit::Frozen;
+ if(list[0] == "U")
+ state = MyMoneySplit::Unknown;
+ }
+ return state;
+}
+
+
+KMyMoneyComboAction::KMyMoneyComboAction(QWidget* w, const char* name) :
+ KMyMoneyCombo(false, w, name)
+{
+ m_completion = new kMyMoneyCompletion(this, 0);
+ QString num;
+ // add the items in reverse order of appearance (see KMyMoneySelector::newItem() for details)
+ selector()->newTopItem(i18n("ATM"), QString(), num.setNum(KMyMoneyRegister::ActionAtm));
+ selector()->newTopItem(i18n("Withdrawal"), QString(), num.setNum(KMyMoneyRegister::ActionWithdrawal));
+ selector()->newTopItem(i18n("Transfer"), QString(), num.setNum(KMyMoneyRegister::ActionTransfer));
+ selector()->newTopItem(i18n("Deposit"), QString(), num.setNum(KMyMoneyRegister::ActionDeposit));
+ selector()->newTopItem(i18n("Cheque"), QString(), num.setNum(KMyMoneyRegister::ActionCheck));
+ connect(m_completion, SIGNAL(itemSelected(const QString&)), this, SLOT(slotItemSelected(const QString&)));
+ connect(this, SIGNAL(itemSelected(const QString&)), this, SLOT(slotSetAction(const QString&)));
+}
+
+void KMyMoneyComboAction::protectItem(int id, bool protect)
+{
+ QString num;
+ selector()->protectItem(num.setNum(id), protect);
+}
+
+void KMyMoneyComboAction::slotSetAction(const QString& act)
+{
+ setSelectedItem(act);
+ update();
+ emit actionSelected(action());
+}
+
+void KMyMoneyComboAction::setAction(int action)
+{
+ if(action < 0 || action > 5) {
+ kdDebug(2) << "KMyMoneyComboAction::slotSetAction(" << action << ") invalid. Replaced with 2\n";
+ action = 2;
+ }
+ QString act;
+ act.setNum(action);
+ setSelectedItem(act);
+}
+
+int KMyMoneyComboAction::action(void) const
+{
+ QStringList list;
+ selector()->selectedItems(list);
+ if(!list.isEmpty()) {
+ return list[0].toInt();
+ }
+ kdDebug(2) << "KMyMoneyComboAction::action(void): unknown selection\n";
+ return 0;
+}
+
+KMyMoneyCashFlowCombo::KMyMoneyCashFlowCombo(QWidget* w, const char* name, MyMoneyAccount::accountTypeE accountType) :
+ KMyMoneyCombo(false, w, name)
+{
+ m_completion = new kMyMoneyCompletion(this, 0);
+ QString num;
+ // add the items in reverse order of appearance (see KMyMoneySelector::newItem() for details)
+ if(accountType == MyMoneyAccount::Income || accountType == MyMoneyAccount::Expense) {
+ // this is used for income/expense accounts to just show the reverse sense
+ selector()->newTopItem(i18n("Activity for expense categories", "Paid"), QString(), num.setNum(KMyMoneyRegister::Deposit));
+ selector()->newTopItem(i18n("Activity for income categories", "Received"), QString(), num.setNum(KMyMoneyRegister::Payment));
+ } else {
+ selector()->newTopItem(i18n("From"), QString(), num.setNum(KMyMoneyRegister::Deposit));
+ selector()->newTopItem(i18n("Pay to"), QString(), num.setNum(KMyMoneyRegister::Payment));
+ }
+ selector()->newTopItem(" ", QString(), num.setNum(KMyMoneyRegister::Unknown));
+ connect(m_completion, SIGNAL(itemSelected(const QString&)), this, SLOT(slotItemSelected(const QString&)));
+ connect(this, SIGNAL(itemSelected(const QString&)), this, SLOT(slotSetDirection(const QString&)));
+}
+
+void KMyMoneyCashFlowCombo::setDirection(KMyMoneyRegister::CashFlowDirection dir)
+{
+ m_dir = dir;
+ QString num;
+ setSelectedItem(num.setNum(dir));
+}
+
+void KMyMoneyCashFlowCombo::slotSetDirection(const QString& id)
+{
+ QString num;
+ for(int i = KMyMoneyRegister::Deposit; i <= KMyMoneyRegister::Unknown; ++i) {
+ num.setNum(i);
+ if(num == id) {
+ m_dir = static_cast<KMyMoneyRegister::CashFlowDirection>(i);
+ break;
+ }
+ }
+ emit directionSelected(m_dir);
+ update();
+}
+
+void KMyMoneyCashFlowCombo::removeDontCare(void)
+{
+ QString num;
+ selector()->removeItem(num.setNum(KMyMoneyRegister::Unknown));
+}
+
+
+KMyMoneyActivityCombo::KMyMoneyActivityCombo(QWidget* w, const char* name) :
+ KMyMoneyCombo(false, w, name),
+ m_activity(MyMoneySplit::UnknownTransactionType)
+{
+ m_completion = new kMyMoneyCompletion(this, 0);
+ QString num;
+ // add the items in reverse order of appearance (see KMyMoneySelector::newItem() for details)
+ selector()->newTopItem(i18n("Split shares"), QString(), num.setNum(MyMoneySplit::SplitShares));
+ selector()->newTopItem(i18n("Remove shares"), QString(), num.setNum(MyMoneySplit::RemoveShares));
+ selector()->newTopItem(i18n("Add shares"), QString(), num.setNum(MyMoneySplit::AddShares));
+ selector()->newTopItem(i18n("Yield"), QString(), num.setNum(MyMoneySplit::Yield));
+ selector()->newTopItem(i18n("Reinvest dividend"), QString(), num.setNum(MyMoneySplit::ReinvestDividend));
+ selector()->newTopItem(i18n("Dividend"), QString(), num.setNum(MyMoneySplit::Dividend));
+ selector()->newTopItem(i18n("Sell shares"), QString(), num.setNum(MyMoneySplit::SellShares));
+ selector()->newTopItem(i18n("Buy shares"), QString(), num.setNum(MyMoneySplit::BuyShares));
+
+ connect(m_completion, SIGNAL(itemSelected(const QString&)), this, SLOT(slotItemSelected(const QString&)));
+ connect(this, SIGNAL(itemSelected(const QString&)), this, SLOT(slotSetActivity(const QString&)));
+}
+
+void KMyMoneyActivityCombo::setActivity(MyMoneySplit::investTransactionTypeE activity)
+{
+ m_activity = activity;
+ QString num;
+ setSelectedItem(num.setNum(activity));
+}
+
+void KMyMoneyActivityCombo::slotSetActivity(const QString& id)
+{
+ QString num;
+ for(int i = MyMoneySplit::BuyShares; i <= MyMoneySplit::SplitShares; ++i) {
+ num.setNum(i);
+ if(num == id) {
+ m_activity = static_cast<MyMoneySplit::investTransactionTypeE>(i);
+ break;
+ }
+ }
+ emit activitySelected(m_activity);
+ update();
+}
+
+KMyMoneyPayeeCombo::KMyMoneyPayeeCombo(QWidget* parent, const char * name) :
+ KMyMoneyCombo(true, parent, name)
+{
+ m_completion = new kMyMoneyCompletion(this);
+
+ // set to ascending sort
+ selector()->listView()->setSorting(0);
+
+ connect(m_completion, SIGNAL(itemSelected(const QString&)), this, SLOT(slotItemSelected(const QString&)));
+ connect(this, SIGNAL(textChanged(const QString&)), m_completion, SLOT(slotMakeCompletion(const QString&)));
+}
+
+void KMyMoneyPayeeCombo::loadPayees(const QValueList<MyMoneyPayee>& list)
+{
+ selector()->listView()->clear();
+ QValueList<MyMoneyPayee>::const_iterator it;
+ for(it = list.begin(); it != list.end(); ++it) {
+ selector()->newTopItem((*it).name(), QString(), (*it).id());
+ }
+}
+
+
+class KMyMoneyGeneralCombo::Private {
+public:
+ QMap<QString, int> m_strings;
+ void insertItem(const QString& s, int id) { m_strings[s] = id; }
+
+ int itemId(const QString& s) const {
+ QMap<QString, int>::const_iterator it;
+ it = m_strings.find(s);
+ if(it != m_strings.end())
+ return *it;
+ return -1;
+ }
+
+ const QString& itemText(int id) {
+ QMap<QString, int>::const_iterator it;
+ for(it = m_strings.begin(); it != m_strings.end(); ++it) {
+ if(*it == id) {
+ return it.key();
+ }
+ }
+ return QString::null;
+ }
+};
+
+KMyMoneyGeneralCombo::KMyMoneyGeneralCombo(QWidget* w, const char* name) :
+ KComboBox(w, name),
+ d(new Private)
+{
+ connect(this, SIGNAL(highlighted(int)), this, SLOT(slotChangeItem(int)));
+}
+
+KMyMoneyGeneralCombo::~KMyMoneyGeneralCombo()
+{
+ delete d;
+}
+
+void KMyMoneyGeneralCombo::setItem(int id)
+{
+ setCurrentItem(id);
+}
+
+int KMyMoneyGeneralCombo::item(void) const
+{
+ return currentItem();
+}
+
+void KMyMoneyGeneralCombo::setCurrentItem(int id)
+{
+ const QString& txt = d->itemText(id);
+ for(int idx = 0; idx < count(); ++idx) {
+ if(txt == text(idx)) {
+ KComboBox::setCurrentItem(idx);
+ break;
+ }
+ }
+}
+
+int KMyMoneyGeneralCombo::currentItem(void) const
+{
+ return d->itemId(currentText());
+}
+
+void KMyMoneyGeneralCombo::clear(void)
+{
+ d->m_strings.clear();
+ KComboBox::clear();
+}
+
+void KMyMoneyGeneralCombo::insertItem(const QString& txt, int id, int idx)
+{
+ d->insertItem(txt, id);
+ KComboBox::insertItem(txt, idx);
+}
+
+void KMyMoneyGeneralCombo::removeItem(int id)
+{
+ const QString& txt = d->itemText(id);
+ for(int idx = 0; idx < count(); ++idx) {
+ if(txt == text(idx)) {
+ KComboBox::removeItem(idx);
+ break;
+ }
+ }
+}
+
+void KMyMoneyGeneralCombo::slotChangeItem(int idx)
+{
+ emit itemSelected(d->itemId(text(idx)));
+}
+
+KMyMoneyPeriodCombo::KMyMoneyPeriodCombo(QWidget* parent, const char* name) :
+ KMyMoneyGeneralCombo(parent, name)
+{
+ insertItem(i18n("All dates"), MyMoneyTransactionFilter::allDates);
+ insertItem(i18n("As of today"), MyMoneyTransactionFilter::asOfToday);
+ insertItem(i18n("Today"), MyMoneyTransactionFilter::today);
+ insertItem(i18n("Current month"), MyMoneyTransactionFilter::currentMonth);
+ insertItem(i18n("Current quarter"), MyMoneyTransactionFilter::currentQuarter);
+ insertItem(i18n("Current year"), MyMoneyTransactionFilter::currentYear);
+ insertItem(i18n("Current fiscal year"), MyMoneyTransactionFilter::currentFiscalYear);
+ insertItem(i18n("Month to date"), MyMoneyTransactionFilter::monthToDate);
+ insertItem(i18n("Year to date"), MyMoneyTransactionFilter::yearToDate);
+ insertItem(i18n("Year to month"), MyMoneyTransactionFilter::yearToMonth);
+ insertItem(i18n("Last month"), MyMoneyTransactionFilter::lastMonth);
+ insertItem(i18n("Last year"), MyMoneyTransactionFilter::lastYear);
+ insertItem(i18n("Last fiscal year"), MyMoneyTransactionFilter::lastFiscalYear);
+ insertItem(i18n("Last 7 days"), MyMoneyTransactionFilter::last7Days);
+ insertItem(i18n("Last 30 days"), MyMoneyTransactionFilter::last30Days);
+ insertItem(i18n("Last 3 months"), MyMoneyTransactionFilter::last3Months);
+ insertItem(i18n("Last quarter"), MyMoneyTransactionFilter::lastQuarter);
+ insertItem(i18n("Last 6 months"), MyMoneyTransactionFilter::last6Months);
+ insertItem(i18n("Last 11 months"), MyMoneyTransactionFilter::last11Months);
+ insertItem(i18n("Last 12 months"), MyMoneyTransactionFilter::last12Months);
+ insertItem(i18n("Next 7 days"), MyMoneyTransactionFilter::next7Days);
+ insertItem(i18n("Next 30 days"), MyMoneyTransactionFilter::next30Days);
+ insertItem(i18n("Next 3 months"), MyMoneyTransactionFilter::next3Months);
+ insertItem(i18n("Next quarter"), MyMoneyTransactionFilter::lastQuarter);
+ insertItem(i18n("Next 6 months"), MyMoneyTransactionFilter::next6Months);
+ insertItem(i18n("Next 12 months"), MyMoneyTransactionFilter::next12Months);
+ insertItem(i18n("Last 3 months to next 3 months"), MyMoneyTransactionFilter::last3ToNext3Months);
+ insertItem(i18n("User defined"), MyMoneyTransactionFilter::userDefined);
+}
+
+void KMyMoneyPeriodCombo::setCurrentItem(MyMoneyTransactionFilter::dateOptionE id)
+{
+ if(id >= MyMoneyTransactionFilter::dateOptionCount)
+ id = MyMoneyTransactionFilter::userDefined;
+
+ KMyMoneyGeneralCombo::setCurrentItem(id);
+}
+
+MyMoneyTransactionFilter::dateOptionE KMyMoneyPeriodCombo::currentItem(void) const
+{
+ return static_cast<MyMoneyTransactionFilter::dateOptionE>(KMyMoneyGeneralCombo::currentItem());
+}
+
+QDate KMyMoneyPeriodCombo::start(MyMoneyTransactionFilter::dateOptionE id)
+{
+ QDate start, end;
+ MyMoneyTransactionFilter::translateDateRange(id, start, end);
+ return start;
+}
+
+QDate KMyMoneyPeriodCombo::end(MyMoneyTransactionFilter::dateOptionE id)
+{
+ QDate start, end;
+ MyMoneyTransactionFilter::translateDateRange(id, start, end);
+ return end;
+}
+
+#if 0
+void KMyMoneyPeriodCombo::dates(QDate& start, QDate& end, MyMoneyTransactionFilter::dateOptionE id)
+{
+}
+#endif
+
+KMyMoneyOccurenceCombo::KMyMoneyOccurenceCombo(QWidget* parent, const char* name) :
+ KMyMoneyGeneralCombo(parent, name)
+{
+}
+
+MyMoneySchedule::occurenceE KMyMoneyOccurenceCombo::currentItem(void) const
+{
+ return static_cast<MyMoneySchedule::occurenceE>(KMyMoneyGeneralCombo::currentItem());
+}
+
+KMyMoneyOccurencePeriodCombo::KMyMoneyOccurencePeriodCombo(QWidget* parent, const char* name) :
+ KMyMoneyOccurenceCombo(parent, name)
+{
+ insertItem(i18n(MyMoneySchedule::occurencePeriodToString(MyMoneySchedule::OCCUR_ONCE)), MyMoneySchedule::OCCUR_ONCE);
+ insertItem(i18n(MyMoneySchedule::occurencePeriodToString(MyMoneySchedule::OCCUR_DAILY)), MyMoneySchedule::OCCUR_DAILY);
+ insertItem(i18n(MyMoneySchedule::occurencePeriodToString(MyMoneySchedule::OCCUR_WEEKLY)), MyMoneySchedule::OCCUR_WEEKLY);
+ insertItem(i18n(MyMoneySchedule::occurencePeriodToString(MyMoneySchedule::OCCUR_EVERYHALFMONTH)), MyMoneySchedule::OCCUR_EVERYHALFMONTH);
+ insertItem(i18n(MyMoneySchedule::occurencePeriodToString(MyMoneySchedule::OCCUR_MONTHLY)), MyMoneySchedule::OCCUR_MONTHLY);
+ insertItem(i18n(MyMoneySchedule::occurencePeriodToString(MyMoneySchedule::OCCUR_YEARLY)), MyMoneySchedule::OCCUR_YEARLY);
+}
+
+KMyMoneyFrequencyCombo::KMyMoneyFrequencyCombo(QWidget* parent, const char* name) :
+ KMyMoneyOccurenceCombo(parent, name)
+{
+ insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_ONCE)), MyMoneySchedule::OCCUR_ONCE);
+ insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_DAILY)), MyMoneySchedule::OCCUR_DAILY);
+ insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_WEEKLY)), MyMoneySchedule::OCCUR_WEEKLY);
+ insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYOTHERWEEK)), MyMoneySchedule::OCCUR_EVERYOTHERWEEK);
+ insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYHALFMONTH)), MyMoneySchedule::OCCUR_EVERYHALFMONTH);
+ insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYTHREEWEEKS)), MyMoneySchedule::OCCUR_EVERYTHREEWEEKS);
+ insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS)), MyMoneySchedule::OCCUR_EVERYTHIRTYDAYS);
+ insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYFOURWEEKS)), MyMoneySchedule::OCCUR_EVERYFOURWEEKS);
+ insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_MONTHLY)), MyMoneySchedule::OCCUR_MONTHLY);
+ insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS)), MyMoneySchedule::OCCUR_EVERYEIGHTWEEKS);
+ insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYOTHERMONTH)), MyMoneySchedule::OCCUR_EVERYOTHERMONTH);
+ insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYTHREEMONTHS)), MyMoneySchedule::OCCUR_EVERYTHREEMONTHS);
+ insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYFOURMONTHS)), MyMoneySchedule::OCCUR_EVERYFOURMONTHS);
+ insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_TWICEYEARLY)), MyMoneySchedule::OCCUR_TWICEYEARLY);
+ insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_YEARLY)), MyMoneySchedule::OCCUR_YEARLY);
+ insertItem(i18n(MyMoneySchedule::occurenceToString(MyMoneySchedule::OCCUR_EVERYOTHERYEAR)), MyMoneySchedule::OCCUR_EVERYOTHERYEAR);
+}
+
+int KMyMoneyFrequencyCombo::daysBetweenEvents(void) const
+{
+ return MyMoneySchedule::daysBetweenEvents(currentItem());
+}
+
+int KMyMoneyFrequencyCombo::eventsPerYear(void) const
+{
+ return MyMoneySchedule::eventsPerYear(currentItem());
+}
+#include "kmymoneycombo.moc"
diff --git a/kmymoney2/widgets/kmymoneycombo.h b/kmymoney2/widgets/kmymoneycombo.h
new file mode 100644
index 0000000..c85847d
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneycombo.h
@@ -0,0 +1,467 @@
+/***************************************************************************
+ kmymoneycombo.h - description
+ -------------------
+ begin : Mon Mar 12 2007
+ copyright : (C) 2007 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYCOMBO_H
+#define KMYMONEYCOMBO_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qtimer.h>
+#include <qmutex.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kcombobox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyutils.h>
+#include <kmymoney/mymoneysplit.h>
+#include <kmymoney/register.h>
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/transaction.h>
+#include <kmymoney/mymoneypayee.h>
+#include <kmymoney/mymoneytransactionfilter.h>
+#include <kmymoney/mymoneyscheduled.h>
+
+class kMyMoneyCompletion;
+class KMyMoneySelector;
+class kMyMoneyLineEdit;
+
+/**
+ * @author Thomas Baumgart
+ */
+class KMyMoneyCombo : public KComboBox
+{
+ Q_OBJECT
+public:
+ KMyMoneyCombo(QWidget *w = 0, const char *name=0);
+ KMyMoneyCombo(bool rw, QWidget *w = 0, const char *name=0);
+
+ /**
+ * This method is used to turn on/off the hint display and to setup the appropriate text.
+ * The hint text is shown in a lighter color if the field is otherwise empty and does
+ * not have the keyboard focus.
+ *
+ * @param hint reference to text. If @a hint is empty, no hint will be shown.
+ */
+ void setHint(const QString& hint) const;
+
+ /**
+ * overridden for internal reasons.
+ *
+ * @param editable make combo box editable (@a true) or selectable only (@a false).
+ */
+ void setEditable(bool editable);
+
+ /**
+ * This method returns a pointer to the completion object of the combo box.
+ *
+ * @return pointer to kMyMoneyCompletion or derivative.
+ */
+ kMyMoneyCompletion* completion(void) const;
+
+ /**
+ * This method returns a pointer to the completion object's selector.
+ *
+ * @return pointer to KMyMoneySelector or derivative.
+ */
+ KMyMoneySelector* selector(void) const;
+
+ /**
+ * This method returns the ids of the currently selected items
+ */
+ void selectedItems(QStringList& list) const;
+
+ /**
+ * This method returns the id of the first selected item.
+ * Usage makes usually only sense when the selection mode
+ * of the associated KMyMoneySelector is QListView::Single.
+ *
+ * @sa KMyMoneySelector::setSelectionMode()
+ *
+ * @param id reference to QString containing the id. If no item
+ * is selected id will be empty.
+ */
+ void selectedItem(QString& id) const KDE_DEPRECATED;
+
+ /**
+ * This method returns the id of the first selected item.
+ * Usage makes usually only sense when the selection mode
+ * of the associated KMyMoneySelector is QListView::Single.
+ *
+ * @sa KMyMoneySelector::setSelectionMode()
+ *
+ * @return reference to QString containing the id. If no item
+ * is selected the QString will be empty.
+ */
+ const QString& selectedItem(void) const { return m_id; }
+
+ /**
+ * This method selects the item with the respective @a id.
+ *
+ * @param id reference to QString containing the id
+ */
+ void setSelectedItem(const QString& id);
+
+ /**
+ * This method checks if the position @a pos is part of the
+ * area of the drop down arrow.
+ */
+ bool isInArrowArea(const QPoint& pos) const;
+
+ void setSuppressObjectCreation(bool suppress) { m_canCreateObjects = !suppress; }
+
+ /**
+ * overridden for internal reasons, no API change
+ */
+ void setCurrentText(const QString& txt = QString()) { KComboBox::setCurrentText(txt); }
+
+ /**
+ * overridden to set the background color of the lineedit as well
+ */
+ void setPaletteBackgroundColor(const QColor& color);
+
+ /**
+ * Overridden to support our own completion box
+ */
+ QSize sizeHint() const;
+
+protected slots:
+ virtual void slotItemSelected(const QString& id);
+
+protected:
+ /**
+ * reimplemented to support our own popup widget
+ */
+ void mousePressEvent(QMouseEvent *e);
+
+ /**
+ * reimplemented to support our own popup widget
+ */
+ void keyPressEvent(QKeyEvent *e);
+
+ /**
+ * reimplemented to support our own popup widget
+ */
+ void paintEvent(QPaintEvent *);
+
+ /**
+ * reimplemented to support detection of new items
+ */
+ void focusOutEvent(QFocusEvent* );
+
+ /**
+ * set the widgets text area based on the item with the given @a id.
+ */
+ virtual void setCurrentTextById(const QString& id);
+
+ /**
+ * Overridden for internal reasons, no API change
+ */
+ void connectNotify(const char* signal);
+
+ /**
+ * Overridden for internal reasons, no API change
+ */
+ void disconnectNotify(const char* signal);
+
+protected:
+ /**
+ * This member keeps a pointer to the object's completion object
+ */
+ kMyMoneyCompletion* m_completion;
+
+ /**
+ * Use our own line edit to provide hint functionality
+ */
+ kMyMoneyLineEdit* m_edit;
+
+ /**
+ * The currently selected item
+ */
+ QString m_id;
+
+signals:
+ void itemSelected(const QString& id);
+ void objectCreation(bool);
+ void createItem(const QString&, QString&);
+
+private:
+ QTimer m_timer;
+ QMutex m_focusMutex;
+ /**
+ * Flag to control object creation. Use setSuppressObjectCreation()
+ * to modify it's setting. Defaults to @a false.
+ */
+ bool m_canCreateObjects;
+
+ /**
+ * Flag to check whether a focusOutEvent processing is underway or not
+ */
+ bool m_inFocusOutEvent;
+};
+
+/**
+ * @author Thomas Baumgart
+ * This class implements a combo box with the possible states for
+ * reconciliation.
+ */
+class KMyMoneyReconcileCombo : public KMyMoneyCombo
+{
+ Q_OBJECT
+public:
+ KMyMoneyReconcileCombo(QWidget *w = 0, const char *name=0);
+
+ void setState(MyMoneySplit::reconcileFlagE state);
+ MyMoneySplit::reconcileFlagE state(void) const;
+ void removeDontCare(void);
+
+protected slots:
+ void slotSetState(const QString&);
+};
+
+/**
+ * @author Thomas Baumgart
+ * This class implements a combo box with the possible states for
+ * actions (Deposit, Withdrawal, etc.).
+ *
+ * @deprecated
+ */
+class KMyMoneyComboAction : public KMyMoneyCombo
+{
+ Q_OBJECT
+public:
+ KMyMoneyComboAction(QWidget *w = 0, const char *name=0);
+
+ void setAction(int state);
+ int action(void) const;
+ void protectItem(int id, bool protect);
+
+protected slots:
+ void slotSetAction(const QString&);
+
+signals:
+ void actionSelected(int);
+};
+
+/**
+ * @author Thomas Baumgart
+ * This class implements a combo box with the possible states for
+ * actions (Deposit, Withdrawal, etc.).
+ */
+class KMyMoneyCashFlowCombo : public KMyMoneyCombo
+{
+ Q_OBJECT
+public:
+ /**
+ * Create a combo box that contains the entries "Pay to", "From" and
+ * " " for don't care.
+ */
+ KMyMoneyCashFlowCombo(QWidget *w = 0, const char *name=0, MyMoneyAccount::accountTypeE type = MyMoneyAccount::Asset);
+
+ void setDirection(KMyMoneyRegister::CashFlowDirection dir);
+ KMyMoneyRegister::CashFlowDirection direction(void) const { return m_dir; }
+ void removeDontCare(void);
+
+protected slots:
+ void slotSetDirection(const QString& id);
+
+signals:
+ void directionSelected(KMyMoneyRegister::CashFlowDirection);
+
+private:
+ KMyMoneyRegister::CashFlowDirection m_dir;
+};
+
+/**
+ * @author Thomas Baumgart
+ * This class implements a combo box with the possible activities
+ * for investment transactions (buy, sell, dividend, etc.)
+ */
+class KMyMoneyActivityCombo : public KMyMoneyCombo
+{
+ Q_OBJECT
+public:
+ /**
+ * Create a combo box that contains the entries "Buy", "Sell" etc.
+ */
+ KMyMoneyActivityCombo(QWidget *w = 0, const char *name=0);
+
+ void setActivity(MyMoneySplit::investTransactionTypeE activity);
+ MyMoneySplit::investTransactionTypeE activity(void) const { return m_activity; }
+
+protected slots:
+ void slotSetActivity(const QString& id);
+
+signals:
+ void activitySelected(MyMoneySplit::investTransactionTypeE);
+
+private:
+ MyMoneySplit::investTransactionTypeE m_activity;
+};
+
+/**
+ * This class implements a text based payee selector.
+ * When initially used, the widget has the functionality of a KComboBox object.
+ * Whenever a key is pressed, the set of loaded payees is searched for
+ * payees names which match the currently entered text.
+ *
+ * If any match is found a list selection box is opened and the user can use
+ * the up/down, page-up/page-down keys or the mouse to navigate in the list. If
+ * a payee is selected, the selection box is closed. Other key-strokes are
+ * directed to the parent object to manipulate the text. The visible contents of
+ * the selection box is updated with every key-stroke.
+ *
+ * This object is a replacement of the kMyMoneyPayee object and should be used
+ * for new code.
+ *
+ * @author Thomas Baumgart
+ */
+class KMyMoneyPayeeCombo : public KMyMoneyCombo
+{
+ Q_OBJECT
+public:
+ KMyMoneyPayeeCombo(QWidget* parent = 0, const char* name = 0);
+
+ void loadPayees(const QValueList<MyMoneyPayee>& list);
+};
+
+class KMyMoneyGeneralCombo : public KComboBox
+{
+ Q_OBJECT
+public:
+ KMyMoneyGeneralCombo(QWidget* parent = 0, const char* name = 0);
+ virtual ~KMyMoneyGeneralCombo();
+
+ void insertItem(const QString& txt, int id, int idx = -1);
+
+ void setItem(int id) KDE_DEPRECATED; // replace with setCurrentItem(id)
+ int item(void) const KDE_DEPRECATED; // replace with currentItem()
+
+ void setCurrentItem(int id);
+ int currentItem(void) const;
+
+ void removeItem(int id);
+
+public slots:
+ void clear(void);
+
+signals:
+ void itemSelected(int id);
+
+protected:
+ // prevent the caller to use the standard KComboBox insertItem function with a default idx
+ void insertItem(const QString&);
+
+protected slots:
+ void slotChangeItem(int idx);
+
+private:
+ /// \internal d-pointer class.
+ class Private;
+ /// \internal d-pointer instance.
+ Private* const d;
+};
+
+
+/**
+ * This class implements a time period selector
+ * @author Thomas Baumgart
+ */
+class KMyMoneyPeriodCombo : public KMyMoneyGeneralCombo
+{
+ Q_OBJECT
+public:
+ KMyMoneyPeriodCombo(QWidget* parent = 0, const char* name = 0);
+
+ MyMoneyTransactionFilter::dateOptionE currentItem(void) const;
+ void setCurrentItem(MyMoneyTransactionFilter::dateOptionE id);
+
+ /**
+ * This function returns the actual start date for the given
+ * period definition given by @p id. For user defined periods
+ * the returned value is QDate()
+ */
+ static QDate start(MyMoneyTransactionFilter::dateOptionE id);
+
+ /**
+ * This function returns the actual end date for the given
+ * period definition given by @p id. For user defined periods
+ * the returned value is QDate()
+ */
+ static QDate end(MyMoneyTransactionFilter::dateOptionE id);
+
+ // static void dates(QDate& start, QDate& end, MyMoneyTransactionFilter::dateOptionE id);
+};
+
+/**
+ * This class implements an occurence selector
+ * as a parent class for both OccurencePeriod and Frequency combos
+ *
+ * @author Colin Wright
+ */
+class KMyMoneyOccurenceCombo : public KMyMoneyGeneralCombo
+{
+ Q_OBJECT
+public:
+ KMyMoneyOccurenceCombo(QWidget* parent = 0, const char* name = 0);
+
+ MyMoneySchedule::occurenceE currentItem(void) const;
+};
+
+/**
+ * This class implements an occurence period selector
+ *
+ * @author Colin Wright
+ */
+class KMyMoneyOccurencePeriodCombo : public KMyMoneyOccurenceCombo
+{
+ Q_OBJECT
+public:
+ KMyMoneyOccurencePeriodCombo(QWidget* parent = 0, const char* name = 0);
+};
+
+/**
+ * This class implements a payment frequency selector
+ * @author Thomas Baumgart
+ */
+class KMyMoneyFrequencyCombo : public KMyMoneyOccurenceCombo
+{
+ Q_OBJECT
+public:
+ KMyMoneyFrequencyCombo(QWidget* parent = 0, const char* name = 0);
+
+ /**
+ * This method returns the number of events for the selected payment
+ * frequency (eg for yearly the return value is 1 and for monthly it
+ * is 12). In case, the frequency cannot be converted (once, every other year, etc.)
+ * the method returns 0.
+ */
+ int eventsPerYear(void) const;
+ /**
+ * This method returns the number of days between two events of
+ * the selected frequency. The return value for months is based
+ * on 30 days and the year is 360 days long.
+ */
+ int daysBetweenEvents(void) const;
+};
+
+#endif
diff --git a/kmymoney2/widgets/kmymoneycompletion.cpp b/kmymoney2/widgets/kmymoneycompletion.cpp
new file mode 100644
index 0000000..f9bc7a3
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneycompletion.cpp
@@ -0,0 +1,304 @@
+/***************************************************************************
+ kmymoneycompletion.cpp - description
+ -------------------
+ begin : Mon Apr 26 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qapplication.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klistview.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoneycompletion.h"
+#include <kmymoney/kmymoneyselector.h>
+#include <kmymoney/kmymoneylistviewitem.h>
+#include "./kmymoneycombo.h"
+
+const int kMyMoneyCompletion::MAX_ITEMS = 16;
+
+kMyMoneyCompletion::kMyMoneyCompletion(QWidget *parent, const char *name ) :
+ QVBox(parent, name, WType_Popup)
+{
+ m_selector = new KMyMoneySelector(this);
+ m_selector->listView()->setFocusProxy(this);
+
+ m_parent = parent;
+ setFocusProxy((parent) ? parent : (QWidget*) NoFocus);
+ setFrameStyle(QFrame::PopupPanel | QFrame::Raised);
+ connectSignals(m_selector, m_selector->listView());
+}
+
+void kMyMoneyCompletion::connectSignals(QWidget* widget, KListView* lv)
+{
+ m_widget = widget;
+ m_lv = lv;
+ connect(lv, SIGNAL(executed(QListViewItem*,const QPoint&,int)), this, SLOT(slotItemSelected(QListViewItem*,const QPoint&,int)));
+}
+
+kMyMoneyCompletion::~kMyMoneyCompletion()
+{
+}
+
+void kMyMoneyCompletion::adjustSize(void)
+{
+ QListViewItemIterator it(m_lv, QListViewItemIterator::Visible);
+ int count = 0;
+ while(it.current()) {
+ ++count;
+ ++it;
+ }
+ adjustSize(count);
+}
+
+void kMyMoneyCompletion::adjustSize(const int count)
+{
+ int w = m_widget->sizeHint().width();
+ if(m_parent && w < m_parent->width())
+ w = m_parent->width();
+
+ QFontMetrics fm(font());
+ if(w < fm.maxWidth()*15)
+ w = fm.maxWidth()*15;
+
+ int h = 0;
+ QListViewItemIterator it(m_lv, QListViewItemIterator::Visible);
+ QListViewItem* item = it.current();
+ if(item)
+ h = item->height() * (count > MAX_ITEMS ? MAX_ITEMS : count);
+
+ // the offset of 4 in the next statement avoids the
+ // display of a scroll bar if count < MAX_ITEMS.
+ resize(w, h+4);
+
+ if(m_parent) {
+ // the code of this basic block is taken from KCompletionBox::show()
+ // and modified to our local needs
+
+ // this is probably better, once kde switches to requiring qt3.1
+ // QRect screenSize = QApplication::desktop()->availableGeometry(d->m_parent);
+ // for now use this since it's qt3.0.x-safe
+ QRect screenSize = QApplication::desktop()->screenGeometry(QApplication::desktop()->screenNumber(m_parent));
+
+ QPoint orig = m_parent->mapToGlobal( QPoint(0, m_parent->height()) );
+ int x = orig.x();
+ int y = orig.y();
+
+ if ( x + width() > screenSize.right() )
+ x = screenSize.right() - width();
+
+ // check for the maximum height here to avoid flipping
+ // of the completion box from top to bottom of the
+ // edit widget. The offset (y) is certainly based
+ // on the actual height.
+ if(item) {
+ if ((y + item->height()*MAX_ITEMS) > screenSize.bottom() )
+ y = y - height() - m_parent->height();
+ }
+
+ move( x, y);
+ }
+}
+
+void kMyMoneyCompletion::show(bool presetSelected)
+{
+ if(!m_id.isEmpty() && presetSelected)
+ m_selector->setSelected(m_id);
+
+ adjustSize();
+
+ if(m_parent) {
+ m_parent->installEventFilter(this);
+ // make sure to install the filter for the combobox lineedit as well
+ // We have do this here because QObject::installEventFilter() is not
+ // declared virtual and we have no chance to override it in KMyMoneyCombo
+ KMyMoneyCombo* c = dynamic_cast<KMyMoneyCombo*>(m_parent);
+ if(c && c->lineEdit()) {
+ c->lineEdit()->installEventFilter(this);
+ }
+ }
+
+ QVBox::show();
+}
+
+void kMyMoneyCompletion::hide(void)
+{
+ if(m_parent) {
+ m_parent->removeEventFilter(this);
+ // make sure to uninstall the filter for the combobox lineedit as well
+ // We have do this here because QObject::installEventFilter() is not
+ // declared virtual and we have no chance to override it in KMyMoneyCombo
+ KMyMoneyCombo* c = dynamic_cast<KMyMoneyCombo*>(m_parent);
+ if(c && c->lineEdit()) {
+ c->lineEdit()->removeEventFilter(this);
+ }
+ }
+ QVBox::hide();
+}
+
+bool kMyMoneyCompletion::eventFilter(QObject* o, QEvent* e)
+{
+ int type = e->type();
+
+ KMyMoneyCombo *c = dynamic_cast<KMyMoneyCombo*>(m_parent);
+ QListViewItem* item;
+ if(o == m_parent || (c && o == c->lineEdit())) {
+ if(isVisible()) {
+ if(type == QEvent::KeyPress) {
+ QKeyEvent* ev = static_cast<QKeyEvent*> (e);
+ QKeyEvent evt(QEvent::KeyPress,
+ Key_Down, 0, ev->state(), QString::null,
+ ev->isAutoRepeat(), ev->count());
+ QKeyEvent evbt(QEvent::KeyPress,
+ Key_Up, 0, ev->state(), QString::null,
+ ev->isAutoRepeat(), ev->count());
+
+ switch(ev->key()) {
+ case Key_Tab:
+ case Key_BackTab:
+ slotItemSelected(m_lv->currentItem(), QPoint(0,0), 0);
+ break;
+
+ case Key_Down:
+ case Key_Next:
+ item = m_lv->currentItem();
+ while(item) {
+ item = item->itemBelow();
+ if(item && selector()->match(m_lastCompletion, item))
+ break;
+ }
+ if(item) {
+ m_lv->setCurrentItem(item);
+ selector()->ensureItemVisible(item);
+ }
+ ev->accept();
+ return true;
+
+ case Key_Up:
+ case Key_Prior:
+ item = m_lv->currentItem();
+ while(item) {
+ item = item->itemAbove();
+ if(item && selector()->match(m_lastCompletion, item))
+ break;
+ }
+ if(item) {
+ m_lv->setCurrentItem(item);
+ // make sure, we always see a possible (non-selectable) group item
+ if(item->itemAbove())
+ item = item->itemAbove();
+ selector()->ensureItemVisible(item);
+ }
+ ev->accept();
+ return true;
+
+ case Key_Escape:
+ hide();
+ ev->accept();
+ return true;
+
+ case Key_Enter:
+ case Key_Return:
+ slotItemSelected(m_lv->currentItem(), QPoint(0,0), 0);
+ ev->accept();
+ return true;
+
+ case Key_Home:
+ case Key_End:
+ if(ev->state() & ControlButton) {
+ item = m_lv->currentItem();
+ if(ev->key() == Key_Home) {
+ while(item && item->itemAbove()) {
+ item = item->itemAbove();
+ }
+ while(item && !selector()->match(m_lastCompletion, item)) {
+ item = item->itemBelow();
+ }
+ } else {
+ while(item && item->itemBelow()) {
+ item = item->itemBelow();
+ }
+ while(item && !selector()->match(m_lastCompletion, item)) {
+ item = item->itemAbove();
+ }
+ }
+ if(item) {
+ m_lv->setCurrentItem(item);
+ // make sure, we always see a possible (non-selectable) group item
+ if(item->itemAbove())
+ item = item->itemAbove();
+ selector()->ensureItemVisible(item);
+ }
+ ev->accept();
+ return true;
+ }
+ break;
+
+ default:
+ break;
+
+ }
+ }
+ }
+ }
+ return QVBox::eventFilter(o, e);
+}
+
+void kMyMoneyCompletion::slotMakeCompletion(const QString& txt)
+{
+ int cnt = selector()->slotMakeCompletion(txt.stripWhiteSpace());
+
+ if(m_parent && m_parent->isVisible() && !isVisible() && cnt)
+ show(false);
+ else {
+ if(cnt != 0) {
+ adjustSize();
+ } else {
+ hide();
+ }
+ }
+}
+
+void kMyMoneyCompletion::slotItemSelected(QListViewItem *item, const QPoint&, int)
+{
+ KMyMoneyListViewItem* it_v = static_cast<KMyMoneyListViewItem*>(item);
+ if(it_v && it_v->isSelectable()) {
+ QString id = it_v->id();
+ // hide the widget, so we can debug the slots that are connect
+ // to the signal we emit very soon
+ hide();
+ m_id = id;
+ emit itemSelected(id);
+ }
+}
+
+void kMyMoneyCompletion::setSelected(const QString& id)
+{
+ m_id = id;
+ m_selector->setSelected(id, true);
+}
+
+#include "kmymoneycompletion.moc"
diff --git a/kmymoney2/widgets/kmymoneycompletion.h b/kmymoney2/widgets/kmymoneycompletion.h
new file mode 100644
index 0000000..1efea63
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneycompletion.h
@@ -0,0 +1,122 @@
+/***************************************************************************
+ kmymoneycompletion.h - description
+ -------------------
+ begin : Mon Apr 26 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYCOMPLETION_H
+#define KMYMONEYCOMPLETION_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+#include <qvbox.h>
+#include <qregexp.h>
+class QListViewItem;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+class KListView;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+class KMyMoneySelector;
+
+/**
+ * @author Thomas Baumgart
+ */
+
+class kMyMoneyCompletion : public QVBox
+{
+ Q_OBJECT
+public:
+
+ kMyMoneyCompletion(QWidget *parent=0, const char *name=0);
+ virtual ~kMyMoneyCompletion();
+
+ /**
+ * Re-implemented for internal reasons. API is unaffected.
+ */
+ virtual void show(void) { show(true); }
+
+
+ /**
+ * Re-implemented for internal reasons. API is unaffected.
+ */
+ virtual void hide(void);
+
+ /**
+ * This method sets the current account with id @p id as
+ * the current selection.
+ *
+ * @param id id of account to be selected
+ */
+ void setSelected(const QString& id);
+
+ virtual KMyMoneySelector* selector(void) const { return m_selector; }
+
+public slots:
+ void slotMakeCompletion(const QString& txt);
+
+ void slotItemSelected(QListViewItem *item, const QPoint& pos, int col);
+
+protected:
+ /**
+ * Reimplemented from kMyMoneyAccountSelector to get events from the viewport (to hide
+ * this widget on mouse-click, Escape-presses, etc.
+ */
+ virtual bool eventFilter( QObject *, QEvent * );
+
+ /**
+ * This method resizes the widget to show a maximum of @p count
+ * or @a MAX_ITEMS items.
+ *
+ * @param count maximum number to be shown if < MAX_ITEMS
+ */
+ void adjustSize(const int count);
+
+ /**
+ * This method counts the number of items currently visible and
+ * calls adjustSize(count).
+ */
+ void adjustSize(void);
+
+ void connectSignals(QWidget *widget, KListView* lv);
+
+ void show(bool presetSelected);
+
+signals:
+ void itemSelected(const QString& id);
+
+protected:
+ QWidget* m_parent;
+ QWidget* m_widget;
+ QString m_id;
+ KListView* m_lv;
+ KMyMoneySelector* m_selector;
+ QRegExp m_lastCompletion;
+
+ static const int MAX_ITEMS;
+
+};
+
+#endif
diff --git a/kmymoney2/widgets/kmymoneycurrencyselector.cpp b/kmymoney2/widgets/kmymoneycurrencyselector.cpp
new file mode 100644
index 0000000..009dc2b
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneycurrencyselector.cpp
@@ -0,0 +1,166 @@
+/***************************************************************************
+ kmymoneycurrencyselector.cpp - description
+ -------------------
+ begin : Tue Apr 6 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qpixmap.h>
+#include <qbitmap.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kstandarddirs.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoneycurrencyselector.h"
+
+KMyMoneySecuritySelector::KMyMoneySecuritySelector(QWidget *parent, const char *name ) :
+ KComboBox(parent, name),
+ m_displayItem(FullName),
+ m_displayOnly(false),
+ m_displayType(TypeAll)
+{
+ // update(QString());
+}
+
+KMyMoneySecuritySelector::KMyMoneySecuritySelector(displayTypeE type, QWidget *parent, const char *name ) :
+ KComboBox(parent,name),
+ m_displayItem(FullName),
+ m_displayOnly(false),
+ m_displayType(type)
+{
+ // update(QString());
+}
+
+KMyMoneySecuritySelector::~KMyMoneySecuritySelector()
+{
+}
+
+void KMyMoneySecuritySelector::selectDisplayItem(KMyMoneySecuritySelector::displayItemE item)
+{
+ m_displayItem = item;
+ update(QString());
+}
+
+void KMyMoneySecuritySelector::update(const QString& id)
+{
+ MyMoneySecurity curr = MyMoneyFile::instance()->baseCurrency();
+ QString baseCurrency = curr.id();
+
+ if(!id.isEmpty())
+ curr = m_currency;
+
+ this->clear();
+ m_list.clear();
+ if(m_displayType & TypeCurrencies)
+ m_list += MyMoneyFile::instance()->currencyList();
+ if(m_displayType & TypeSecurities)
+ m_list += MyMoneyFile::instance()->securityList();
+
+ // sort
+ qHeapSort(m_list);
+
+ QValueList<MyMoneySecurity>::ConstIterator it;
+
+ // construct a transparent 16x16 pixmap
+ QPixmap empty(16, 16);
+ empty.setMask(QBitmap(16, 16, true));
+
+ int itemId = 0;
+ int m_selectedItemId = 0;
+ for(it = m_list.begin(); it != m_list.end(); ++it) {
+ QString display;
+ switch(m_displayItem) {
+ default:
+ case FullName:
+ if((*it).isCurrency()) {
+ display = QString("%2 (%1)").arg((*it).id()).arg((*it).name());
+ } else
+ display = QString("%2 (%1)").arg((*it).tradingSymbol()).arg((*it).name());
+ break;
+ break;
+
+ case Symbol:
+ if((*it).isCurrency())
+ display = (*it).id();
+ else
+ display = (*it).tradingSymbol();
+ break;
+ }
+ if((*it).id() == baseCurrency) {
+ insertItem(QPixmap( locate("icon","hicolor/16x16/apps/kmymoney2.png")),
+ display, itemId);
+ } else {
+ insertItem(empty, display, itemId);
+ }
+
+ if(curr.id() == (*it).id()) {
+ m_selectedItemId = itemId;
+ m_currency = (*it);
+ }
+
+ itemId++;
+ }
+ setCurrentItem(m_selectedItemId);
+}
+
+void KMyMoneySecuritySelector::setDisplayOnly(const bool disp)
+{
+ if(disp == m_displayOnly)
+ return;
+
+ switch(disp) {
+ case true:
+ connect(this, SIGNAL(activated(int)), this, SLOT(slotSetInitialCurrency()));
+ break;
+ case false:
+ disconnect(this, SIGNAL(activated(int)), this, SLOT(slotSetInitialCurrency()));
+ break;
+ }
+ m_displayOnly = disp;
+}
+
+void KMyMoneySecuritySelector::slotSetInitialSecurity(void)
+{
+ setCurrentItem(m_selectedItemId);
+}
+
+const MyMoneySecurity& KMyMoneySecuritySelector::security(void) const
+{
+ return m_list[currentItem()];
+}
+
+void KMyMoneySecuritySelector::setSecurity(const MyMoneySecurity& currency)
+{
+ m_currency = currency;
+ update(QString("x"));
+}
+
+KMyMoneyCurrencySelector::KMyMoneyCurrencySelector(QWidget *parent, const char *name ) :
+ KMyMoneySecuritySelector(TypeCurrencies, parent, name)
+{
+}
+
+#include "kmymoneycurrencyselector.moc"
diff --git a/kmymoney2/widgets/kmymoneycurrencyselector.h b/kmymoney2/widgets/kmymoneycurrencyselector.h
new file mode 100644
index 0000000..e733eb2
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneycurrencyselector.h
@@ -0,0 +1,90 @@
+/***************************************************************************
+ kmymoneycurrencyselector.h - description
+ -------------------
+ begin : Tue Apr 6 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYCURRENCYSELECTOR_H
+#define KMYMONEYCURRENCYSELECTOR_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kcombobox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyfile.h>
+
+/**
+ * @author Thomas Baumgart
+ */
+
+class KMyMoneySecuritySelector : public KComboBox
+{
+ Q_OBJECT
+public:
+ enum displayItemE {
+ Symbol = 0,
+ FullName
+ };
+
+ enum displayTypeE {
+ TypeCurrencies = 0x01,
+ TypeSecurities = 0x02,
+ TypeAll = 0x03
+ };
+
+ KMyMoneySecuritySelector(QWidget *parent=0, const char *name=0);
+ KMyMoneySecuritySelector(displayTypeE type = TypeAll, QWidget *parent=0, const char *name=0);
+ virtual ~KMyMoneySecuritySelector();
+
+ const MyMoneySecurity& security(void) const;
+ void setSecurity(const MyMoneySecurity& currency);
+ void selectDisplayItem(KMyMoneySecuritySelector::displayItemE item);
+ void setDisplayOnly(const bool disp);
+
+ void update(const QString& id);
+
+public slots:
+ void slotSetInitialSecurity(void);
+
+private:
+ MyMoneySecurity m_currency;
+ displayItemE m_displayItem;
+ int m_selectedItemId;
+ bool m_displayOnly;
+ displayTypeE m_displayType;
+ QValueList<MyMoneySecurity> m_list;
+};
+
+class KMyMoneyCurrencySelector : public KMyMoneySecuritySelector
+{
+public:
+ KMyMoneyCurrencySelector(QWidget *parent=0, const char *name=0);
+ virtual ~KMyMoneyCurrencySelector() {}
+};
+
+#endif
diff --git a/kmymoney2/widgets/kmymoneydateinput.cpp b/kmymoney2/widgets/kmymoneydateinput.cpp
new file mode 100644
index 0000000..e1b4be8
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneydateinput.cpp
@@ -0,0 +1,348 @@
+/***************************************************************************
+ kmymoneydateinput.cpp
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qpainter.h>
+#include <qdrawutil.h>
+#include <qpoint.h>
+#include <qvalidator.h>
+#include <qtimer.h>
+#include <qstyle.h>
+#include <qlayout.h>
+#include <qapplication.h>
+#include <qdesktopwidget.h>
+#include <qpixmap.h>
+#include <qtimer.h>
+#include <qlabel.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+#include "kdecompat.h"
+#include <kglobal.h>
+#include <klocale.h>
+#include <kiconloader.h>
+#include <kpushbutton.h>
+#include <kshortcut.h>
+#include <kpassivepopup.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoneydateinput.h"
+
+namespace {
+ const int DATE_POPUP_TIMEOUT = 1500;
+}
+
+bool KMyMoneyDateEdit::event(QEvent* e)
+{
+ // make sure that we keep the current date setting of a kMyMoneyDateInput object
+ // across the QDateEdit::event(FocusOutEvent)
+ bool rc;
+
+ kMyMoneyDateInput* p = dynamic_cast<kMyMoneyDateInput*>(parentWidget());
+ if(e->type() == QEvent::FocusOut && p) {
+ QDate d = p->date();
+ rc = QDateEdit::event(e);
+ if(d.isValid())
+ d = p->date();
+ p->loadDate(d);
+ } else {
+ rc = QDateEdit::event(e);
+ }
+ return rc;
+}
+
+kMyMoneyDateInput::kMyMoneyDateInput(QWidget *parent, const char *name, Qt::AlignmentFlags flags)
+ : QHBox(parent,name)
+{
+ m_qtalignment = flags;
+ m_date = QDate::currentDate();
+
+ dateEdit = new KMyMoneyDateEdit(m_date, this, "dateEdit");
+ setFocusProxy(dateEdit);
+ focusWidget()->installEventFilter(this); // To get dateEdit's FocusIn/Out and some KeyPress events
+ dateEdit->installEventFilter(this); // To get dateEdit's FocusIn/Out and some KeyPress events
+
+ m_datePopup = new KPassivePopup(dateEdit, "datePopup");
+ m_datePopup->setTimeout(DATE_POPUP_TIMEOUT);
+ m_datePopup->setView(new QLabel(KGlobal::locale()->formatDate(m_date), m_datePopup, "datePopupLabel"));
+
+ m_dateFrame = new QVBox(this, 0, WType_Popup);
+ m_dateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised);
+ m_dateFrame->setLineWidth(3);
+ m_dateFrame->hide();
+
+ QString dateFormat = KGlobal::locale()->dateFormatShort().lower();
+ QString order, separator;
+ for(unsigned i = 0; i < dateFormat.length(); ++i) {
+ // DD.MM.YYYY is %d.%m.%y
+ // dD.mM.YYYY is %e.%n.%y
+ // SHORTWEEKDAY, dD SHORTMONTH YYYY is %a, %e %b %Y
+ if(dateFormat[i] == 'y' || dateFormat[i] == 'm' || dateFormat[i] == 'n' || dateFormat[i] == 'd' || dateFormat[i] == 'e') {
+ if(dateFormat[i] == 'n')
+ dateFormat[i] = 'm';
+ if(dateFormat[i] == 'e')
+ dateFormat[i] = 'd';
+ order += dateFormat[i];
+ } else if(dateFormat[i] != '%' && separator.isEmpty())
+ separator = dateFormat[i];
+ if(order.length() == 3)
+ break;
+ }
+
+ // see if we find a known format. If it's unknown, then we use YMD (international)
+ // set m_focusDatePart to the day position (0-2)
+ if(order == "mdy") {
+ dateEdit->setOrder(QDateEdit::MDY);
+ m_focusDatePart = 1;
+ } else if(order == "dmy") {
+ dateEdit->setOrder(QDateEdit::DMY);
+ m_focusDatePart = 0;
+ } else if(order == "ydm") {
+ dateEdit->setOrder(QDateEdit::YDM);
+ m_focusDatePart = 1;
+ } else {
+ dateEdit->setOrder(QDateEdit::YMD);
+ m_focusDatePart = 2;
+ separator = '-';
+ }
+ dateEdit->setSeparator(separator);
+
+ m_datePicker = new KDatePicker(m_dateFrame, m_date);
+#if KDE_IS_VERSION(3,1,0)
+ // Let the date picker have a close button (Added in 3.1)
+ m_datePicker->setCloseButton(true);
+#endif
+
+ // the next line is a try to add an icon to the button
+ m_dateButton = new KPushButton(QIconSet(QPixmap(KGlobal::iconLoader()->iconPath("date", -KIcon::SizeSmall))), QString(""), this);
+ m_dateButton->setMinimumWidth(30);
+
+ connect(m_dateButton,SIGNAL(clicked()),SLOT(toggleDatePicker()));
+ connect(dateEdit, SIGNAL(valueChanged(const QDate&)), this, SLOT(slotDateChosenRef(const QDate&)));
+ connect(m_datePicker, SIGNAL(dateSelected(QDate)), this, SLOT(slotDateChosen(QDate)));
+ connect(m_datePicker, SIGNAL(dateEntered(QDate)), this, SLOT(slotDateChosen(QDate)));
+ connect(m_datePicker, SIGNAL(dateSelected(QDate)), m_dateFrame, SLOT(hide()));
+}
+
+void kMyMoneyDateInput::markAsBadDate(bool bad, const QColor& color)
+{
+ if(dateEdit->focusProxy()) {
+ dateEdit->focusProxy()->setPaletteForegroundColor(paletteForegroundColor());
+ if(bad)
+ dateEdit->focusProxy()->setPaletteForegroundColor(color);
+ }
+}
+
+void kMyMoneyDateInput::show(void)
+{
+ // don't forget the standard behaviour ;-)
+ QHBox::show();
+
+ // If the widget is shown, the size must be fixed a little later
+ // to be appropriate. I saw this in some other places and the only
+ // way to solve this problem is to postpone the setup of the size
+ // to the time when the widget is on the screen.
+ QTimer::singleShot(50, this, SLOT(fixSize()));
+}
+
+void kMyMoneyDateInput::fixSize(void)
+{
+ // According to a hint in the documentation of KDatePicker::sizeHint()
+ // 28 pixels should be added in each direction to obtain a better
+ // display of the month button. I decided, (22,14) is good
+ // enough and save some space on the screen (ipwizard)
+ m_dateFrame->setFixedSize(m_datePicker->sizeHint() + QSize(22, 14));
+
+ dateEdit->setMinimumWidth(dateEdit->minimumSizeHint().width() + 6);
+}
+
+kMyMoneyDateInput::~kMyMoneyDateInput()
+{
+ delete m_dateFrame;
+ delete m_datePopup;
+}
+
+void kMyMoneyDateInput::toggleDatePicker()
+{
+ int w = m_dateFrame->width();
+ int h = m_dateFrame->height();
+
+ if(m_dateFrame->isVisible())
+ {
+ m_dateFrame->hide();
+ }
+ else
+ {
+ QPoint tmpPoint = mapToGlobal(m_dateButton->geometry().bottomRight());
+
+ // usually, the datepicker widget is shown underneath the dateEdit widget
+ // if it does not fit on the screen, we show it above this widget
+
+ if(tmpPoint.y() + h > QApplication::desktop()->height()) {
+ tmpPoint.setY(tmpPoint.y() - h - m_dateButton->height());
+ }
+
+ if((m_qtalignment == Qt::AlignRight && tmpPoint.x()+w <= QApplication::desktop()->width())
+ || (tmpPoint.x()-w < 0) )
+ {
+ m_dateFrame->setGeometry(tmpPoint.x()-width(), tmpPoint.y(), w, h);
+ }
+ else
+ {
+ tmpPoint.setX(tmpPoint.x() - w);
+ m_dateFrame->setGeometry(tmpPoint.x(), tmpPoint.y(), w, h);
+ }
+
+ if(m_date.isValid())
+ {
+ m_datePicker->setDate(m_date);
+ }
+ else
+ {
+ m_datePicker->setDate(QDate::currentDate());
+ }
+ m_dateFrame->show();
+ }
+}
+
+
+void kMyMoneyDateInput::resizeEvent(QResizeEvent* ev)
+{
+ m_dateButton->setMaximumHeight(ev->size().height());
+ m_dateButton->setMaximumWidth(ev->size().height());
+ dateEdit->setMaximumHeight(ev->size().height());
+
+ // qDebug("Received resize-event %d,%d", ev->size().width(), ev->size().height());
+}
+
+
+/** Overriding QWidget::keyPressEvent
+ *
+ * increments/decrements the date upon +/- or Up/Down key input
+ * sets the date to current date when the 'T' key is pressed
+ */
+void kMyMoneyDateInput::keyPressEvent(QKeyEvent * k)
+{
+ KShortcut today(i18n("Enter todays date into date input widget", "T"));
+
+ switch(k->key()) {
+ case Key_Equal:
+ case Key_Plus:
+ slotDateChosen(m_date.addDays(1));
+ break;
+
+ case Key_Minus:
+ slotDateChosen(m_date.addDays(-1));
+ break;
+
+ default:
+ if(today.contains(KKey(k)) || k->key() == Key_T) {
+ slotDateChosen(QDate::currentDate());
+ }
+ break;
+ }
+}
+
+/**
+ * This function receives all events that are sent to focusWidget().
+ * Some KeyPress events are intercepted and passed to keyPressEvent.
+ * Otherwise they would be consumed by QDateEdit.
+ */
+bool kMyMoneyDateInput::eventFilter(QObject *, QEvent *e)
+{
+ if (e->type() == QEvent::FocusIn) {
+ m_datePopup->show();
+ // The cast to the base class is needed since setFocusSection
+ // is protected in QDateEdit. This causes some logic in
+ // QDateEdit::setFocusSection not to be executed but this does
+ // not hurt here, because the widget just receives focus.
+ static_cast<QDateTimeEditBase *>(dateEdit)->setFocusSection(m_focusDatePart);
+ }
+ else if (e->type() == QEvent::FocusOut)
+ m_datePopup->hide();
+ else if (e->type() == QEvent::KeyPress) {
+ if (QKeyEvent *k = dynamic_cast<QKeyEvent*>(e)) {
+ if (k->key() == Key_Minus) {
+ keyPressEvent(k);
+ return true;
+ }
+ }
+ }
+
+ return false; // Don't filter the event
+}
+
+void kMyMoneyDateInput::slotDateChosenRef(const QDate& date)
+{
+ if(date.isValid()) {
+ emit dateChanged(date);
+ m_date = date;
+
+ QLabel *lbl = static_cast<QLabel*>(m_datePopup->view());
+ lbl->setText(KGlobal::locale()->formatDate(date));
+ lbl->adjustSize();
+ if(m_datePopup->isVisible() || hasFocus())
+ m_datePopup->show(); // Repaint
+ }
+}
+
+void kMyMoneyDateInput::slotDateChosen(QDate date)
+{
+ if(date.isValid()) {
+ // the next line implies a call to slotDateChosenRef() above
+ dateEdit->setDate(date);
+ }
+}
+
+QDate kMyMoneyDateInput::date(void) const
+{
+ return dateEdit->date();
+}
+
+void kMyMoneyDateInput::setDate(QDate date)
+{
+ slotDateChosen(date);
+}
+
+void kMyMoneyDateInput::loadDate(const QDate& date)
+{
+ m_date = m_prevDate = date;
+
+ blockSignals(true);
+ dateEdit->setDate(date);
+ m_date = date;
+ blockSignals(false);
+}
+
+void kMyMoneyDateInput::resetDate(void)
+{
+ setDate(m_prevDate);
+}
+
+QWidget* kMyMoneyDateInput::focusWidget(void) const
+{
+ QWidget* w = dateEdit;
+ while(w->focusProxy())
+ w = w->focusProxy();
+ return w;
+}
+
+#include "kmymoneydateinput.moc"
diff --git a/kmymoney2/widgets/kmymoneydateinput.h b/kmymoney2/widgets/kmymoneydateinput.h
new file mode 100644
index 0000000..4561d63
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneydateinput.h
@@ -0,0 +1,123 @@
+/***************************************************************************
+ kmymoneydateinput.h
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYDATEINPUT_H
+#define KMYMONEYDATEINPUT_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+#include <qlineedit.h>
+#include <qdatetime.h>
+#include <qdatetimeedit.h>
+#include <qvbox.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kdatepicker.h>
+class KPushButton;
+class KPassivePopup;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+// Ideas neatly taken from korganizer
+// Respective authors are credited.
+// Some ideas/code have been borrowed from Calendar-0.13 (phoenix.bmedesign.com/~qt)
+
+/**
+ * Provided to be able to catch the focusOut events before the contents gets changed
+ */
+class KMyMoneyDateEdit : public QDateEdit
+{
+ Q_OBJECT
+public:
+ KMyMoneyDateEdit(const QDate& date, QWidget *parent=0, const char *name=0) : QDateEdit(date, parent, name) {}
+
+protected:
+ /** reimplemented for internal reasons */
+ bool event(QEvent* e);
+};
+
+/**
+ * This class provides the general widget used for date selection
+ * throughout the KMyMoney project. It provides an QDateEdit widget
+ * which is based on an edit field with spin boxes and adds a QPushButton
+ * to open a KDatePicker.
+ */
+class kMyMoneyDateInput : public QHBox
+{
+ Q_OBJECT
+
+public:
+ kMyMoneyDateInput(QWidget *parent=0, const char *name=0, Qt::AlignmentFlags flags=Qt::AlignLeft);
+ ~kMyMoneyDateInput();
+
+ // Replace calls to this with the new date() method
+ // QDate getQDate(void) KDE_DEPRECATED;
+
+ QDate date(void) const;
+ void setDate(QDate date);
+ void loadDate(const QDate& date);
+ void resetDate(void);
+ QWidget* focusWidget(void) const;
+ virtual void setRange(const QDate & min, const QDate & max) { dateEdit->setRange(min, max); }
+ void markAsBadDate(bool bad = false, const QColor& = QColor());
+
+public slots:
+ virtual void show(void);
+
+signals:
+ void dateChanged(const QDate& date);
+
+protected:
+ /**
+ * - increments/decrements the date upon +/- key input
+ * - increments/decrements the date upon Up/Down key input
+ * - sets the date to current date when the 'T' key is pressed.
+ * The actual key for this to happen might be overridden through
+ * an i18n package. The 'T'-key is always possible.
+ */
+ void keyPressEvent(QKeyEvent * k);
+ void resizeEvent(QResizeEvent*);
+
+ /** To intercept events sent to focusWidget() */
+ bool eventFilter(QObject *o, QEvent *e);
+
+protected slots:
+ void slotDateChosen(QDate date);
+ void toggleDatePicker();
+
+private slots:
+ void slotDateChosenRef(const QDate& date);
+ void fixSize(void);
+
+private:
+ QDateEdit *dateEdit;
+ KDatePicker *m_datePicker;
+ QDate m_date; // The date !
+ QDate m_prevDate;
+ Qt::AlignmentFlags m_qtalignment;
+ QVBox *m_dateFrame;
+ KPushButton *m_dateButton;
+ KPassivePopup *m_datePopup;
+ int m_focusDatePart;
+};
+
+#endif
+
diff --git a/kmymoney2/widgets/kmymoneydatetbl.cpp b/kmymoney2/widgets/kmymoneydatetbl.cpp
new file mode 100644
index 0000000..e48e01e
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneydatetbl.cpp
@@ -0,0 +1,698 @@
+/***************************************************************************
+ kmymoneydatetbl.cpp - description
+ -------------------
+ begin : Thu Jul 3 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+ /****************************************************************************
+ Contains code from the KDateTable class ala kdelibs-3.1.2. Original license:
+
+ This file is part of the KDE libraries
+ Copyright (C) 1997 Tim D. Gilman (tdgilman@best.org)
+ (C) 1998-2001 Mirko Boehm (mirko@kde.org)
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qglobal.h>
+#include <qdatetime.h>
+#include <qstring.h>
+#include <qpen.h>
+#include <qpainter.h>
+#include <qdialog.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+#include "kdecompat.h"
+#include <kdatetbl.h> // Use the classes available for maximum re-use
+#include <kglobal.h>
+#include <kglobalsettings.h>
+#include <kapplication.h>
+#include <klocale.h>
+#include <kdebug.h>
+#include <knotifyclient.h>
+#if KDE_IS_VERSION(3,2,0)
+#include <kcalendarsystem.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include "kmymoneydatetbl.h"
+
+kMyMoneyDateTbl::kMyMoneyDateTbl(QWidget *parent, QDate date_, const char* name, WFlags f)
+ : QGridView(parent, name, f)
+{
+ // call this first to make sure that member variables are initialized
+ setType(MONTHLY);
+
+ setFontSize(10);
+
+ if(!date_.isValid())
+ {
+ kdDebug() << "kMyMoneyDateTbl ctor: WARNING: Given date is invalid, using current date." << endl;
+ date_=QDate::currentDate();
+ }
+ setFocusPolicy( QWidget::StrongFocus );
+
+
+ viewport()->setEraseColor(KGlobalSettings::baseColor());
+
+ setDate(date_); // this initializes firstday, numdays, numDaysPrevMonth
+
+ // So we can emit hoverDate
+// QApplication::setGlobalMouseTracking(true);
+ viewport()->setMouseTracking(true);
+}
+
+void
+kMyMoneyDateTbl::paintCell(QPainter *painter, int row, int col)
+{
+ QRect rect;
+ QString text;
+ QPen pen;
+ int w=cellWidth();
+ int h=cellHeight();
+ QBrush brushBlue(KGlobalSettings::activeTitleColor());
+ QBrush brushLightblue(KGlobalSettings::baseColor());
+ QFont font=KGlobalSettings::generalFont();
+
+ // -----
+ font.setPointSize(fontsize);
+
+#if KDE_VERSION < 310
+ int firstWeekDay = KGlobal::locale()->weekStartsMonday() ? 1 : 0;
+#else
+ int firstWeekDay = KGlobal::locale()->weekStartDay();
+#endif
+
+ if (row==0)
+ { // we are drawing the headline
+ if (m_type == MONTHLY)
+ {
+ font.setBold(true);
+ painter->setFont(font);
+ bool normalday = true;
+ QString daystr;
+ if ( col+firstWeekDay < 8 )
+ daystr = WEEK_DAY_NAME(col+firstWeekDay, true);
+ else
+ daystr = WEEK_DAY_NAME(col+firstWeekDay-7, true);
+
+ if ( daystr==i18n("Sunday", "Sun") || daystr==i18n("Saturday", "Sat") )
+ normalday=false;
+
+ if (!normalday)
+ {
+ painter->setPen(KGlobalSettings::baseColor());
+ painter->setBrush(brushLightblue);
+ painter->drawRect(0, 0, w, h);
+ painter->setPen(KGlobalSettings::activeTitleColor());
+ } else {
+ painter->setPen(KGlobalSettings::activeTitleColor());
+ painter->setBrush(brushBlue);
+ painter->drawRect(0, 0, w, h);
+ painter->setPen(KGlobalSettings::activeTextColor());
+ }
+ painter->drawText(0, 0, w, h-1, AlignCenter,
+ daystr, -1, &rect);
+ painter->setPen(KGlobalSettings::textColor());
+ painter->moveTo(0, h-1);
+ painter->lineTo(w-1, h-1);
+
+ if(rect.width()>maxCell.width())
+ maxCell.setWidth(rect.width());
+
+ if(rect.height()>maxCell.height())
+ maxCell.setHeight(rect.height());
+ }
+ else if (m_type == WEEKLY)
+ {
+ painter->setPen(KGlobalSettings::activeTitleColor());
+ painter->setBrush(brushBlue);
+ painter->drawRect(0, 0, w, h);
+ painter->setPen(KGlobalSettings::activeTextColor());
+
+ int year=date.year();
+ QString headerText;
+#if QT_VERSION > 0x030005
+ // FIXME: Shouldn't that be i18n()'ed as well
+ QString weekStr = QString::number(date.weekNumber(&year));
+ QString yearStr = QString::number(year);
+ headerText = i18n("Week %1 for year %2.")
+ .arg(weekStr)
+ .arg(yearStr);
+#else
+ // FIXME: include code to display the same as for KDE >= 3.0.5
+ QString weekStr = QString::number(weekNumber(date, &year));
+ QString yearStr = QString::number(year);
+ headerText = i18n("Week %1 for year %2.")
+ .arg(weekStr)
+ .arg(yearStr);
+#endif
+
+ painter->drawText(0, 0, w, h-1, AlignCenter, headerText, -1, &rect);
+
+ maxCell.setWidth(width());
+
+ if(rect.height()>maxCell.height())
+ maxCell.setHeight(rect.height());
+ }
+ else if (m_type == QUARTERLY)
+ {
+ int athird = width()/3;
+
+ painter->setPen(KGlobalSettings::activeTitleColor());
+ painter->setBrush(brushBlue);
+ painter->setPen(/*KGlobalSettings::activeTextColor()*/black);
+
+ if (col == 0)
+ {
+ painter->drawRect(0, 0, athird, h);
+ painter->drawText(0, 0, athird, h-1, AlignCenter, "Month 1", -1, &rect);
+
+ painter->drawRect(athird, 0, athird, h);
+ painter->drawText(athird, 0, athird, h-1, AlignCenter, "Month 2", -1, &rect);
+
+ painter->drawRect(athird*2, 0, athird, h);
+ painter->drawText(athird*2, 0, athird, h-1, AlignCenter, "Month 3", -1, &rect);
+ }
+ }
+ }
+ else
+ {
+ int pos;
+
+ QDate drawDate(date);
+
+ if (m_type == MONTHLY)
+ {
+ pos=7*(row-1)+col;
+ if ( firstWeekDay < 4 )
+ pos += firstWeekDay;
+ else
+ pos += firstWeekDay - 7;
+
+ if (pos<firstday || (firstday+numdays<=pos))
+ { // we are either
+ // painting a day of the previous month or
+ // painting a day of the following month
+
+ if (pos<firstday)
+ { // previous month
+ drawDate = drawDate.addMonths(-1);
+ text.setNum(numDaysPrevMonth+pos-firstday+1);
+ drawDate.setYMD(drawDate.year(), drawDate.month(), text.toInt());
+ } else { // following month
+ drawDate = drawDate.addMonths(1);
+ text.setNum(pos-firstday-numdays+1);
+ drawDate.setYMD(drawDate.year(), drawDate.month(), text.toInt());
+ }
+ } else { // paint a day of the current month
+ text.setNum(pos-firstday+1);
+ drawDate.setYMD(drawDate.year(), drawDate.month(), text.toInt());
+ }
+ }
+ else if (m_type == WEEKLY)
+ {
+ // TODO: Handle other start weekdays than Monday
+ text = QDate::shortDayName(row);
+ text += " ";
+
+ int dayOfWeek = date.dayOfWeek();
+ int diff;
+
+ if (row < dayOfWeek)
+ {
+ diff = -(dayOfWeek - row);
+ }
+ else
+ {
+ diff = row - dayOfWeek;
+ }
+
+ drawDate = date.addDays(diff);
+ }
+ else if (m_type == QUARTERLY)
+ {
+ }
+
+ drawCellContents(painter, row, col, drawDate);
+ }
+}
+
+void
+kMyMoneyDateTbl::keyPressEvent( QKeyEvent *e )
+{
+ if ( e->key() == Qt::Key_Prior ) {
+ setDate(date.addMonths(-1));
+ return;
+ }
+ if ( e->key() == Qt::Key_Next ) {
+ setDate(date.addMonths(1));
+ return;
+ }
+
+ if ( e->key() == Qt::Key_Up ) {
+ if ( date.day() > 7 ) {
+ setDate(date.addDays(-7));
+ return;
+ }
+ }
+ if ( e->key() == Qt::Key_Down ) {
+ if ( date.day() <= date.daysInMonth()-7 ) {
+ setDate(date.addDays(7));
+ return;
+ }
+ }
+ if ( e->key() == Qt::Key_Left ) {
+ if ( date.day() > 1 ) {
+ setDate(date.addDays(-1));
+ return;
+ }
+ }
+ if ( e->key() == Qt::Key_Right ) {
+ if ( date.day() < date.daysInMonth() ) {
+ setDate(date.addDays(1));
+ return;
+ }
+ }
+
+ if ( e->key() == Qt::Key_Minus ) {
+ setDate(date.addDays(-1));
+ return;
+ }
+ if ( e->key() == Qt::Key_Plus ) {
+ setDate(date.addDays(1));
+ return;
+ }
+ if ( e->key() == Qt::Key_N ) {
+ setDate(QDate::currentDate());
+ return;
+ }
+
+ KNotifyClient::beep();
+}
+
+void
+kMyMoneyDateTbl::viewportResizeEvent(QResizeEvent * e)
+{
+ if (e)
+ QGridView::viewportResizeEvent(e);
+
+ setCellWidth(viewport()->width()/m_colCount);
+ setCellHeight(viewport()->height()/m_rowCount);
+}
+
+void
+kMyMoneyDateTbl::setFontSize(int size)
+{
+ int count;
+ QFontMetrics metrics(fontMetrics());
+ QRect rect;
+
+ // ----- store rectangles:
+ fontsize=size;
+
+ // ----- find largest day name:
+ maxCell.setWidth(0);
+ maxCell.setHeight(0);
+
+ for(count=0; count<m_colCount; ++count)
+ {
+ rect=metrics.boundingRect(WEEK_DAY_NAME(count+1, true));
+ maxCell.setWidth(QMAX(maxCell.width(), rect.width()));
+ maxCell.setHeight(QMAX(maxCell.height(), rect.height()));
+ }
+
+ if (m_type == WEEKLY)
+ {
+ // Re-size to width
+ maxCell.setWidth(width());
+ }
+
+ // ----- compare with a real wide number and add some space:
+ rect=metrics.boundingRect(QString::fromLatin1("88"));
+ maxCell.setWidth(QMAX(maxCell.width()+2, rect.width()));
+ maxCell.setHeight(QMAX(maxCell.height()+4, rect.height()));
+}
+
+void
+kMyMoneyDateTbl::wheelEvent ( QWheelEvent * e )
+{
+ setDate(date.addMonths( -(int)(e->delta()/120)) );
+ e->accept();
+}
+
+void
+kMyMoneyDateTbl::contentsMouseReleaseEvent(QMouseEvent *e)
+{
+ if (e->type()!=QEvent::MouseButtonRelease)
+ { // the KDatePicker only reacts on mouse press events:
+ return;
+ }
+
+ if(!isEnabled())
+ {
+ KNotifyClient::beep();
+ return;
+ }
+
+#if KDE_VERSION < 310
+ int dayoff = KGlobal::locale()->weekStartsMonday() ? 1 : 0;
+#else
+ int dayoff = KGlobal::locale()->weekStartDay();
+#endif
+
+ // -----
+ int row, col, pos, temp;
+ QPoint mouseCoord;
+
+ // -----
+ mouseCoord = e->pos();
+ row=rowAt(mouseCoord.y());
+ col=columnAt(mouseCoord.x());
+ if(row<1 || col<0)
+ { // the user clicked on the frame of the table
+ return;
+ }
+
+ if (m_type == MONTHLY)
+ {
+ // Rows and columns are zero indexed. The (row - 1) below is to avoid counting
+ // the row with the days of the week in the calculation. We however want pos
+ // to be "1 indexed", hence the "+ 1" at the end of the sum.
+ pos = (7 * (row - 1)) + col + 1;
+
+ // This gets pretty nasty below. firstday is a locale independant index for
+ // the first day of the week. dayoff is the day of the week that the week
+ // starts with for the selected locale. Monday = 1 .. Sunday = 7
+ // Strangely, in some cases dayoff is in fact set to 8, hence all of the
+ // "dayoff % 7" sections below.
+
+ if (pos + dayoff % 7 <= firstday)
+ { // this day is in the previous month
+ setDate(date.addDays(-1 * (date.day() + firstday - pos - dayoff % 7)));
+ return;
+ }
+
+ if (firstday + numdays < pos + dayoff % 7)
+ { // this date is in the next month
+ setDate(date.addDays(pos - firstday - date.day() + dayoff % 7));
+ return;
+ }
+ temp = firstday + date.day() - dayoff % 7 - 1;
+
+ setDate(QDate(date.year(), date.month(), pos - firstday + dayoff % 7));
+
+ updateCell(temp/7+1, temp%7); // Update the previously selected cell
+ }
+ else if (m_type == WEEKLY)
+ {
+ int dayOfWeek = date.dayOfWeek();
+ int diff;
+
+ if (row < dayOfWeek)
+ {
+ diff = -(dayOfWeek - row);
+ }
+ else
+ {
+ diff = row - dayOfWeek;
+ }
+
+ setDate(date.addDays(diff));
+ updateCell(dayOfWeek, 0);
+ }
+ else if (m_type == QUARTERLY)
+ {
+ }
+
+ updateCell(row, col); // Update the selected cell
+
+ emit(tableClicked());
+}
+
+bool
+kMyMoneyDateTbl::setDate(const QDate& date_)
+{
+ bool changed=false;
+ QDate temp;
+ // -----
+ if(!date_.isValid())
+ {
+ kdDebug() << "kMyMoneyDateTbl::setDate: refusing to set invalid date." << endl;
+ return false;
+ }
+
+ if(date!=date_)
+ {
+ date=date_;
+ changed=true;
+ }
+
+ temp.setYMD(date.year(), date.month(), 1);
+ firstday=temp.dayOfWeek();
+
+ if (firstday==1)
+ firstday=8;
+
+ numdays=date.daysInMonth();
+
+ if (date.month()==1)
+ { // set to december of previous year
+ temp.setYMD(date.year()-1, 12, 1);
+ } else { // set to previous month
+ temp.setYMD(date.year(), date.month()-1, 1);
+ }
+
+ numDaysPrevMonth=temp.daysInMonth();
+
+ if (changed)
+ {
+ repaintContents(false);
+ }
+
+ emit(dateChanged(date));
+ return true;
+}
+
+const QDate&
+kMyMoneyDateTbl::getDate() const
+{
+ return date;
+}
+
+// what are those repaintContents() good for? (pfeiffer)
+void kMyMoneyDateTbl::focusInEvent( QFocusEvent *e )
+{
+// repaintContents(false);
+ QGridView::focusInEvent( e );
+}
+
+void kMyMoneyDateTbl::focusOutEvent( QFocusEvent *e )
+{
+// repaintContents(false);
+ QGridView::focusOutEvent( e );
+}
+
+QSize
+kMyMoneyDateTbl::sizeHint() const
+{
+ if (maxCell.height()>0 && maxCell.width()>0)
+ {
+ return QSize(maxCell.width()*numCols()+2*frameWidth(),
+ (maxCell.height()+2)*numRows()+2*frameWidth());
+ } else {
+ kdDebug() << "kMyMoneyDateTbl::sizeHint: obscure failure - " << endl;
+ return QSize(-1, -1);
+ }
+}
+
+
+void kMyMoneyDateTbl::setType(calendarType type)
+{
+ if (type == WEEKLY)
+ {
+ m_rowCount = 8;
+ m_colCount = 1;
+ m_type = WEEKLY;
+ }
+ else if (type == QUARTERLY)
+ {
+ m_rowCount = 7;
+ m_colCount = 21;
+ m_type = QUARTERLY;
+ }
+ else // default to monthly
+ {
+ m_rowCount = m_colCount = 7;
+ m_type = MONTHLY;
+ }
+
+ setNumRows(m_rowCount);
+ setNumCols(m_colCount);
+ setHScrollBarMode(AlwaysOff);
+ setVScrollBarMode(AlwaysOff);
+
+ viewportResizeEvent(NULL);
+}
+
+void kMyMoneyDateTbl::contentsMouseMoveEvent(QMouseEvent* e)
+{
+ int row, col, pos;
+ QPoint mouseCoord;
+
+ mouseCoord = e->pos();
+ row = rowAt(mouseCoord.y());
+ col = columnAt(mouseCoord.x());
+ if (row<1 || col<0)
+ {
+ return;
+ }
+
+#if KDE_VERSION < 310
+ int firstWeekDay = KGlobal::locale()->weekStartsMonday() ? 1 : 0;
+#else
+ int firstWeekDay = KGlobal::locale()->weekStartDay();
+#endif
+
+ QDate drawDate(date);
+ QString text;
+
+ if (m_type == MONTHLY)
+ {
+ pos=7*(row-1)+col;
+ if ( firstWeekDay < 4 )
+ pos += firstWeekDay;
+ else
+ pos += firstWeekDay - 7;
+
+ if (pos<firstday || (firstday+numdays<=pos))
+ { // we are either
+ // painting a day of the previous month or
+ // painting a day of the following month
+
+ if (pos<firstday)
+ { // previous month
+ drawDate = drawDate.addMonths(-1);
+ text.setNum(numDaysPrevMonth+pos-firstday+1);
+ drawDate.setYMD(drawDate.year(), drawDate.month(), text.toInt());
+ } else { // following month
+ drawDate = drawDate.addMonths(1);
+ text.setNum(pos-firstday-numdays+1);
+ drawDate.setYMD(drawDate.year(), drawDate.month(), text.toInt());
+ }
+ } else { // paint a day of the current month
+ text.setNum(pos-firstday+1);
+ drawDate.setYMD(drawDate.year(), drawDate.month(), text.toInt());
+ }
+ }
+ else if (m_type == WEEKLY)
+ {
+ // TODO: Handle other start weekdays than Monday
+ text = QDate::shortDayName(row);
+ text += " ";
+
+ int dayOfWeek = date.dayOfWeek();
+ int diff;
+
+ if (row < dayOfWeek)
+ {
+ diff = -(dayOfWeek - row);
+ }
+ else
+ {
+ diff = row - dayOfWeek;
+ }
+
+ drawDate = date.addDays(diff);
+ }
+ else if (m_type == QUARTERLY)
+ {
+ }
+
+ if (m_drawDateOrig != drawDate)
+ {
+ m_drawDateOrig = drawDate;
+ emit hoverDate(drawDate);
+ }
+
+ QGridView::contentsMouseMoveEvent(e);
+}
+
+#if QT_VERSION <= 0x030005
+// The following code is borrowed from QT 3.2 QDate::weekNumber()
+// and slightly modified
+int kMyMoneyDateTbl::weekNumber(const QDate& date, int *yearNumber) const
+{
+ if ( !date.isValid() )
+ return 0;
+
+ int dow = date.dayOfWeek();
+ int doy = date.dayOfYear();
+ int currYear = date.year();
+ int jan1WeekDay = QDate( currYear, 1, 1 ).dayOfWeek();
+ int yearNum;
+ int weekNum;
+
+ if ( doy <= (8 - jan1WeekDay) && jan1WeekDay > 4 ) {
+ yearNum = currYear - 1;
+ weekNum = 52;
+ if ( jan1WeekDay == 5 ||
+ (jan1WeekDay == 6 && QDate::leapYear(yearNum)) )
+ weekNum++;
+ } else {
+ int totalDays = 365;
+ if ( QDate::leapYear(currYear) )
+ totalDays++;
+
+ if ( (totalDays - doy < 4 - dow)
+ || (jan1WeekDay == 7 && totalDays - doy < 3) ) {
+ yearNum = currYear + 1;
+ weekNum = 1;
+ } else {
+ int j = doy + ( 7 - dow ) + ( jan1WeekDay - 1 );
+ yearNum = currYear;
+ weekNum = j / 7;
+ if ( jan1WeekDay > 4 )
+ weekNum--;
+ }
+ }
+ if ( yearNumber )
+ *yearNumber = yearNum;
+ return weekNum;
+
+}
+#endif
+
+#include "kmymoneydatetbl.moc"
diff --git a/kmymoney2/widgets/kmymoneydatetbl.h b/kmymoney2/widgets/kmymoneydatetbl.h
new file mode 100644
index 0000000..7ff6610
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneydatetbl.h
@@ -0,0 +1,189 @@
+/***************************************************************************
+ kmymoneydatetbl.h - description
+ -------------------
+ begin : Thu Jul 3 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/****************************************************************************
+ Contains code from the KDateTable class ala kdelibs-3.1.2. Original license:
+
+ This file is part of the KDE libraries
+ Copyright (C) 1997 Tim D. Gilman (tdgilman@best.org)
+ (C) 1998-2001 Mirko Boehm (mirko@kde.org)
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+#ifndef KMYMONEYDATETBL_H
+#define KMYMONEYDATETBL_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qgridview.h>
+#include <qdatetime.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include "kdecompat.h"
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+
+
+/**
+ * @author Michael Edwardes
+ */
+class kMyMoneyDateTbl : public QGridView {
+ Q_OBJECT
+public:
+ enum calendarType { WEEKLY,
+ MONTHLY,
+ QUARTERLY };
+
+public:
+ /**
+ * The constructor.
+ */
+ kMyMoneyDateTbl(QWidget *parent=0,
+ QDate date=QDate::currentDate(),
+ const char* name=0, WFlags f=0);
+ /**
+ * Returns a recommended size for the widget.
+ * To save some time, the size of the largest used cell content is
+ * calculated in each paintCell() call, since all calculations have
+ * to be done there anyway. The size is stored in maxCell. The
+ * sizeHint() simply returns a multiple of maxCell.
+ */
+ virtual QSize sizeHint() const;
+ /**
+ * Set the font size of the date table.
+ */
+ virtual void setFontSize(int size);
+ /**
+ * Select and display this date.
+ */
+ virtual bool setDate(const QDate&);
+ virtual const QDate& getDate() const;
+
+ virtual void setType(calendarType type);
+ virtual calendarType type(void) const { return m_type; }
+
+signals:
+ /**
+ * The selected date changed.
+ */
+ void dateChanged(QDate);
+ /**
+ * A date has been selected by clicking on the table.
+ */
+ void tableClicked();
+
+ /**
+ *
+ **/
+ virtual void hoverDate(QDate);
+
+protected:
+ /**
+ * Paint a cell.
+ */
+ virtual void paintCell(QPainter*, int, int);
+ /**
+ * Handle the resize events.
+ */
+ virtual void viewportResizeEvent(QResizeEvent *);
+ /**
+ * React on mouse clicks that select a date.
+ */
+ virtual void contentsMouseReleaseEvent(QMouseEvent *);
+ virtual void wheelEvent( QWheelEvent * e );
+ virtual void keyPressEvent( QKeyEvent *e );
+ virtual void focusInEvent( QFocusEvent *e );
+ virtual void focusOutEvent( QFocusEvent *e );
+
+ virtual void drawCellContents(QPainter *painter, int row, int col, const QDate& theDate) = 0;
+
+ virtual void contentsMouseMoveEvent(QMouseEvent* e);
+
+ /**
+ * The font size of the displayed text.
+ */
+ int fontsize;
+ /**
+ * The currently selected date.
+ */
+ QDate date;
+ /**
+ * The day of the first day in the month [1..7].
+ */
+ int firstday;
+ /**
+ * The number of days in the current month.
+ */
+ int numdays;
+ /**
+ * The number of days in the previous month.
+ */
+ int numDaysPrevMonth;
+ /**
+ * unused
+ * ### remove in KDE 4.0
+ */
+ bool unused_hasSelection;
+ /**
+ * Save the size of the largest used cell content.
+ */
+ QRect maxCell;
+
+ /**
+ * Type related variables
+ **/
+ calendarType m_type;
+ int m_colCount;
+ int m_rowCount;
+
+ ///
+ QDate m_drawDateOrig;
+
+private:
+#if QT_VERSION <= 0x030005
+ int weekNumber(const QDate&, int *yr) const;
+#endif
+
+#if KDE_IS_VERSION(3,2,0)
+ #define WEEK_DAY_NAME(a,b) KGlobal::locale()->calendar()->weekDayName(a,b)
+#else
+ #define WEEK_DAY_NAME(a,b) KGlobal::locale()->weekDayName(a,b)
+#endif
+};
+
+#endif
diff --git a/kmymoney2/widgets/kmymoneyedit.cpp b/kmymoney2/widgets/kmymoneyedit.cpp
new file mode 100644
index 0000000..87be674
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyedit.cpp
@@ -0,0 +1,559 @@
+/***************************************************************************
+ kmymoneyedit.cpp
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes,
+ 2004 by Thomas Baumgart
+ email : mte@users.sourceforge.net
+ ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qapplication.h>
+#include <qdesktopwidget.h>
+#include <qwidget.h>
+#include <qvbox.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kglobal.h>
+#include <klocale.h>
+#include <kdebug.h>
+#include <klineedit.h>
+#include <kiconloader.h>
+#include <kconfig.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/kmymoneylineedit.h>
+#include "kmymoneyedit.h"
+#include "kmymoneycalculator.h"
+#include "../mymoney/mymoneymoney.h"
+
+kMyMoneyMoneyValidator::kMyMoneyMoneyValidator(QObject * parent, const char * name) :
+ QDoubleValidator(parent, name)
+{
+}
+
+kMyMoneyMoneyValidator::kMyMoneyMoneyValidator( double bottom, double top, int decimals,
+ QObject * parent, const char * name ) :
+ QDoubleValidator(bottom, top, decimals, parent, name)
+{
+}
+
+/*
+ * The code of the following function is taken from kdeui/knumvalidator.cpp
+ * and adjusted to always use the monetary symbols defined in the KDE control center
+ */
+QValidator::State kMyMoneyMoneyValidator::validate( QString & input, int & _p ) const
+{
+ QString s = input;
+ KLocale * l = KGlobal::locale();
+ // ok, we have to re-format the number to have:
+ // 1. decimalSymbol == '.'
+ // 2. negativeSign == '-'
+ // 3. positiveSign == <empty>
+ // 4. thousandsSeparator() == <empty> (we don't check that there
+ // are exactly three decimals between each separator):
+ QString d = l->monetaryDecimalSymbol(),
+ n = l->negativeSign(),
+ p = l->positiveSign(),
+ t = l->monetaryThousandsSeparator();
+ // first, delete p's and t's:
+ if ( !p.isEmpty() )
+ for ( int idx = s.find( p ) ; idx >= 0 ; idx = s.find( p, idx ) )
+ s.remove( idx, p.length() );
+
+
+ if ( !t.isEmpty() )
+ for ( int idx = s.find( t ) ; idx >= 0 ; idx = s.find( t, idx ) )
+ s.remove( idx, t.length() );
+
+ // then, replace the d's and n's
+ if ( ( !n.isEmpty() && n.find('.') != -1 ) ||
+ ( !d.isEmpty() && d.find('-') != -1 ) ) {
+ // make sure we don't replace something twice:
+ kdWarning() << "KDoubleValidator: decimal symbol contains '-' or "
+ "negative sign contains '.' -> improve algorithm" << endl;
+ return Invalid;
+ }
+
+ if ( !d.isEmpty() && d != "." )
+ for ( int idx = s.find( d ) ; idx >= 0 ; idx = s.find( d, idx + 1 ) )
+ s.replace( idx, d.length(), ".");
+
+ if ( !n.isEmpty() && n != "-" )
+ for ( int idx = s.find( n ) ; idx >= 0 ; idx = s.find( n, idx + 1 ) )
+ s.replace( idx, n.length(), "-" );
+
+ // Take care of monetary parens around the value if selected via
+ // the locale settings.
+ // If the lead-in or lead-out paren is present, remove it
+ // before passing the string to the QDoubleValidator
+ if(l->negativeMonetarySignPosition() == KLocale::ParensAround
+ || l->positiveMonetarySignPosition() == KLocale::ParensAround) {
+ QRegExp regExp("^(\\()?([\\d-\\.]*)(\\))?$");
+ if(s.find(regExp) != -1) {
+ s = regExp.cap(2);
+ }
+ }
+
+ // check for non numeric values (QDoubleValidator allows an 'e', we don't)
+ QRegExp nonNumeric("[^\\d-\\.]+");
+ if(s.find(nonNumeric) != -1)
+ return Invalid;
+
+ // check for minus sign trailing the number
+ QRegExp trailingMinus("^([^-]*)\\w*-$");
+ if(s.find(trailingMinus) != -1) {
+ s = QString("-%1").arg(trailingMinus.cap(1));
+ }
+
+ // check for the maximum allowed number of decimal places
+ int decPos = s.find('.');
+ if(decPos != -1) {
+ if(decimals() == 0)
+ return Invalid;
+ if(((int)(s.length()) - decPos) > decimals())
+ return Invalid;
+ }
+
+ // If we have just a single minus sign, we are done
+ if(s == QString("-"))
+ return Acceptable;
+
+ QValidator::State rc = QDoubleValidator::validate( s, _p );
+
+ if(rc == Acceptable) {
+ // If the numeric value is acceptable, we check if the parens
+ // are ok. If only the lead-in is present, the return value
+ // is intermediate, if only the lead-out is present then it
+ // definitely is invalid. Nevertheless, we check for parens
+ // only, if the locale settings have it enabled.
+ if(l->negativeMonetarySignPosition() == KLocale::ParensAround
+ || l->positiveMonetarySignPosition() == KLocale::ParensAround) {
+ int tmp = input.contains('(') - input.contains(')');
+ if(tmp > 0)
+ rc = Intermediate;
+ else if(tmp < 0)
+ rc = Invalid;
+ }
+ }
+ return rc;
+}
+
+kMyMoneyEdit::kMyMoneyEdit(QWidget *parent, const char *name, const int prec)
+ : QHBox(parent, name)
+{
+ m_prec = prec;
+ if(prec < -1 || prec > 20)
+ m_prec = KGlobal::locale()->fracDigits();
+ init();
+}
+
+kMyMoneyEdit::kMyMoneyEdit(const MyMoneySecurity& sec, QWidget *parent, const char *name)
+ : QHBox(parent, name)
+{
+ m_prec = MyMoneyMoney::denomToPrec(sec.smallestAccountFraction());
+ init();
+}
+
+// converted image from kde3.5.1/share/apps/kdevdesignerpart/pics/designer_resetproperty.png
+static const uchar resetButtonImage[] = {
+ 0x89,0x50,0x4E,0x47,0x0D,0x0A,0x1A,0x0A,
+ 0x00,0x00,0x00,0x0D,0x49,0x48,0x44,0x52,
+ 0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x06,
+ 0x08,0x06,0x00,0x00,0x00,0x0F,0x0E,0x84,
+ 0x76,0x00,0x00,0x00,0x06,0x62,0x4B,0x47,
+ 0x44,0x00,0xFF,0x00,0xFF,0x00,0xFF,0xA0,
+ 0xBD,0xA7,0x93,0x00,0x00,0x00,0x09,0x70,
+ 0x48,0x59,0x73,0x00,0x00,0x0B,0x13,0x00,
+ 0x00,0x0B,0x13,0x01,0x00,0x9A,0x9C,0x18,
+ 0x00,0x00,0x00,0x07,0x74,0x49,0x4D,0x45,
+ 0x07,0xD6,0x06,0x10,0x09,0x36,0x0C,0x58,
+ 0x91,0x11,0x7C,0x00,0x00,0x00,0x64,0x49,
+ 0x44,0x41,0x54,0x78,0xDA,0x65,0xC9,0xA1,
+ 0x0D,0x02,0x41,0x18,0x84,0xD1,0xF7,0x5F,
+ 0x13,0x04,0x9A,0x39,0x43,0x68,0x81,0x02,
+ 0x10,0xB8,0x13,0x74,0x80,0xC1,0x21,0x76,
+ 0x1D,0xDD,0xD0,0x01,0x65,0x10,0x34,0x9A,
+ 0x0C,0x66,0x83,0x61,0x92,0x2F,0x23,0x5E,
+ 0x25,0x01,0xBD,0x6A,0xC6,0x1D,0x9B,0x25,
+ 0x79,0xC2,0x34,0xE0,0x30,0x00,0x56,0xBD,
+ 0x6A,0x0D,0xD5,0x38,0xE1,0xEA,0x7F,0xE7,
+ 0x4A,0xA2,0x57,0x1D,0x71,0xC1,0x07,0xBB,
+ 0x81,0x8F,0x09,0x96,0xE4,0x86,0x3D,0xDE,
+ 0x78,0x8D,0x48,0xF2,0xAB,0xB1,0x1D,0x9F,
+ 0xC6,0xFC,0x05,0x46,0x68,0x28,0x6B,0x58,
+ 0xEE,0x72,0x0A,0x00,0x00,0x00,0x00,0x49,
+ 0x45,0x4E,0x44,0xAE,0x42,0x60,0x82
+};
+
+void kMyMoneyEdit::init(void)
+{
+ allowEmpty = false;
+ m_edit = new kMyMoneyLineEdit(this, 0, true);
+ m_edit->installEventFilter(this);
+ setFocusProxy(m_edit);
+
+ // Yes, just a simple double validator !
+ kMyMoneyMoneyValidator *validator = new kMyMoneyMoneyValidator(this);
+ m_edit->setValidator(validator);
+ m_edit->setAlignment(AlignRight | AlignVCenter);
+
+ m_calculatorFrame = new QVBox(this, 0, WType_Popup);
+
+ m_calculatorFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised);
+ m_calculatorFrame->setLineWidth(3);
+
+ m_calculator = new kMyMoneyCalculator(m_calculatorFrame);
+ m_calculatorFrame->setFixedSize(m_calculator->width()+3, m_calculator->height()+3);
+ m_calculatorFrame->hide();
+
+ m_calcButton = new KPushButton(QIconSet(QPixmap(KGlobal::iconLoader()->iconPath("kcalc", -KIcon::SizeSmall))), QString(""), this);
+ m_calcButton->setFixedWidth( m_calcButton->sizeHint().width() );
+ m_calcButton->setFixedHeight(m_edit->sizeHint().height());
+ m_calcButton->setFocusProxy(m_edit);
+
+ QPixmap pixmap;
+ pixmap.loadFromData(resetButtonImage, sizeof(resetButtonImage), "PNG", 0);
+ m_resetButton = new KPushButton(QIconSet(pixmap), QString(""), this);
+ m_resetButton->setFixedWidth( m_resetButton->sizeHint().width() );
+ m_resetButton->setFixedHeight(m_edit->sizeHint().height());
+ m_resetButton->setEnabled(false);
+ m_resetButton->setFocusProxy(m_edit);
+
+ KConfig *kconfig = KGlobal::config();
+ kconfig->setGroup("General Options");
+ if(kconfig->readBoolEntry("DontShowCalculatorButton", false) == true)
+ setCalculatorButtonVisible(false);
+
+ setSpacing(0);
+
+ connect(m_edit, SIGNAL(textChanged(const QString&)), this, SLOT(theTextChanged(const QString&)));
+ connect(m_calculator, SIGNAL(signalResultAvailable()), this, SLOT(slotCalculatorResult()));
+ connect(m_calcButton, SIGNAL(clicked()), this, SLOT(slotCalculatorOpen()));
+ connect(m_resetButton, SIGNAL(clicked()), this, SLOT(resetText()));
+}
+
+void kMyMoneyEdit::setValidator(const QValidator* v)
+{
+ m_edit->setValidator(v);
+}
+
+kMyMoneyEdit::~kMyMoneyEdit()
+{
+ delete m_calculatorFrame;
+}
+
+KLineEdit* kMyMoneyEdit::lineedit(void) const
+{
+ return m_edit;
+}
+
+void kMyMoneyEdit::setPrecision(const int prec)
+{
+ if(prec >= -1 && prec <= 20) {
+ if(prec != m_prec) {
+ m_prec = prec;
+ // update current display
+ setValue(value());
+ }
+ }
+}
+
+bool kMyMoneyEdit::isValid(void) const
+{
+ return !(m_edit->text().isEmpty());
+}
+
+MyMoneyMoney kMyMoneyEdit::value(void) const
+{
+ QString txt = m_edit->text();
+ ensureFractionalPart(txt);
+ MyMoneyMoney money(txt);
+ if(m_prec != -1)
+ money = money.convert(MyMoneyMoney::precToDenom(m_prec));
+ return money;
+}
+
+void kMyMoneyEdit::setValue(const MyMoneyMoney& value)
+{
+ // load the value into the widget but don't use thousandsSeparators
+ QString txt = value.formatMoney("", m_prec, false);
+ loadText(txt);
+}
+
+void kMyMoneyEdit::loadText(const QString& txt)
+{
+ m_edit->setText(txt);
+ if(isEnabled() && !txt.isEmpty())
+ ensureFractionalPart();
+ m_text = m_edit->text();
+ m_resetButton->setEnabled(false);
+}
+
+void kMyMoneyEdit::clearText(void)
+{
+ m_text = QString();
+ m_edit->setText(m_text);
+}
+
+void kMyMoneyEdit::resetText(void)
+{
+ m_edit->setText(m_text);
+ m_resetButton->setEnabled(false);
+}
+
+void kMyMoneyEdit::theTextChanged(const QString & theText)
+{
+ KLocale * l = KGlobal::locale();
+ QString d = l->monetaryDecimalSymbol();
+ QString l_text = theText;
+ QString nsign, psign;
+ if(l->negativeMonetarySignPosition() == KLocale::ParensAround
+ || l->positiveMonetarySignPosition() == KLocale::ParensAround) {
+ nsign = psign = "(";
+ } else {
+ nsign = l->negativeSign();
+ psign = l->positiveSign();
+ }
+
+ int i = 0;
+ if(isEnabled()) {
+ QValidator::State state = m_edit->validator()->validate( l_text, i);
+ if(state == QValidator::Intermediate) {
+ if(l_text.length() == 1) {
+ if(l_text != d && l_text != nsign && l_text != psign && l_text != "-")
+ state = QValidator::Invalid;
+ }
+ }
+ if (state==QValidator::Invalid)
+ m_edit->setText(previousText);
+ else {
+ previousText = l_text;
+ emit textChanged(m_edit->text());
+ m_resetButton->setEnabled(true);
+ }
+ }
+}
+
+void kMyMoneyEdit::ensureFractionalPart(void)
+{
+ QString s(m_edit->text());
+ ensureFractionalPart(s);
+ m_edit->setText(s);
+}
+
+void kMyMoneyEdit::ensureFractionalPart(QString& s) const
+{
+
+ KLocale* locale = KGlobal::locale();
+ QString decimalSymbol = locale->monetaryDecimalSymbol();
+ if(decimalSymbol.isEmpty())
+ decimalSymbol = ".";
+
+ // If text contains no 'monetaryDecimalSymbol' then add it
+ // followed by the required number of 0s
+ if (!s.isEmpty()) {
+ if(m_prec > 0) {
+ if (!s.contains(decimalSymbol)) {
+ s += decimalSymbol;
+ for (int i=0; i < m_prec; i++)
+ s += "0";
+ }
+ } else if(m_prec == 0) {
+ while(s.contains(decimalSymbol)) {
+ int pos = s.findRev(decimalSymbol);
+ if(pos != -1) {
+ s.truncate(pos);
+ }
+ }
+ } else if(s.contains(decimalSymbol)) { // m_prec == -1 && fraction
+ // no trailing zeroes
+ while(s.endsWith("0")) {
+ s.truncate(s.length()-1);
+ }
+ // no trailing decimalSymbol
+ if(s.endsWith(decimalSymbol))
+ s.truncate(s.length()-1);
+ }
+ }
+}
+
+bool kMyMoneyEdit::eventFilter(QObject * /* o */ , QEvent *e )
+{
+ bool rc = false;
+
+ // we want to catch some keys that are usually handled by
+ // the base class (e.g. '+', '-', etc.)
+ if(e->type() == QEvent::KeyPress) {
+ QKeyEvent *k = static_cast<QKeyEvent *> (e);
+
+ rc = true;
+ switch(k->key()) {
+ case Qt::Key_Plus:
+ case Qt::Key_Minus:
+ if(m_edit->hasSelectedText()) {
+ m_edit->cut();
+ }
+ if(m_edit->text().length() == 0) {
+ rc = false;
+ break;
+ }
+ // in case of '-' we do not enter the calculator when
+ // the current position is the beginning and there is
+ // no '-' sign at the first position.
+ if(k->key() == Qt::Key_Minus) {
+ if(m_edit->cursorPosition() == 0 && m_edit->text()[0] != '-') {
+ rc = false;
+ break;
+ }
+ }
+ // otherwise, tricky fall through here!
+
+ case Qt::Key_Slash:
+ case Qt::Key_Asterisk:
+ case Qt::Key_Percent:
+ if(m_edit->hasSelectedText()) {
+ // remove the selected text
+ m_edit->cut();
+ }
+ calculatorOpen(k);
+ break;
+
+ default:
+ rc = false;
+ break;
+ }
+
+ } else if(e->type() == QEvent::FocusOut) {
+ if(!m_edit->text().isEmpty() || !allowEmpty)
+ ensureFractionalPart();
+
+ if(MyMoneyMoney(m_edit->text()) != MyMoneyMoney(m_text)
+ && !m_calculator->isVisible()) {
+ emit valueChanged(m_edit->text());
+ }
+ m_text = m_edit->text();
+ }
+ return rc;
+}
+
+void kMyMoneyEdit::slotCalculatorOpen(void)
+{
+ calculatorOpen(0);
+}
+
+void kMyMoneyEdit::calculatorOpen(QKeyEvent* k)
+{
+ m_calculator->setInitialValues(m_edit->text(), k);
+
+ int h = m_calculatorFrame->height();
+ int w = m_calculatorFrame->width();
+
+ // usually, the calculator widget is shown underneath the MoneyEdit widget
+ // if it does not fit on the screen, we show it above this widget
+ QPoint p = mapToGlobal(QPoint(0,0));
+ if(p.y() + height() + h > QApplication::desktop()->height())
+ p.setY(p.y() - h);
+ else
+ p.setY(p.y() + height());
+
+ // usually, it is shown left aligned. If it does not fit, we align it
+ // to the right edge of the widget
+ if(p.x() + w > QApplication::desktop()->width())
+ p.setX(p.x() + width() - w);
+
+ QRect r = m_calculator->geometry();
+ r.moveTopLeft(p);
+ m_calculatorFrame->setGeometry(r);
+ m_calculatorFrame->show();
+ m_calculator->setFocus();
+}
+
+void kMyMoneyEdit::slotCalculatorResult(void)
+{
+ QString result;
+ if(m_calculator != 0) {
+ m_calculatorFrame->hide();
+ m_edit->setText(m_calculator->result());
+ ensureFractionalPart();
+ emit valueChanged(m_edit->text());
+ m_text = m_edit->text();
+ }
+}
+
+QWidget* kMyMoneyEdit::focusWidget(void) const
+{
+ QWidget* w = m_edit;
+ while(w->focusProxy())
+ w = w->focusProxy();
+ return w;
+}
+
+void kMyMoneyEdit::setCalculatorButtonVisible(const bool show)
+{
+ m_calcButton->setShown(show);
+}
+
+void kMyMoneyEdit::setResetButtonVisible(const bool show)
+{
+ m_resetButton->setShown(show);
+}
+
+void kMyMoneyEdit::setAllowEmpty(bool allowed)
+{
+ allowEmpty = allowed;
+}
+
+bool kMyMoneyEdit::isCalculatorButtonVisible(void) const
+{
+ return m_calcButton->isVisible();
+}
+
+bool kMyMoneyEdit::isResetButtonVisible(void) const
+{
+ return m_resetButton->isVisible();
+}
+
+bool kMyMoneyEdit::isEmptyAllowed(void) const
+{
+ return allowEmpty;
+}
+
+void kMyMoneyEdit::setHint(const QString& hint) const
+{
+ if(m_edit)
+ m_edit->setHint(hint);
+}
+
+bool kMyMoneyEdit::isReadOnly(void) const
+{
+ if(m_edit)
+ return m_edit->isReadOnly();
+ return false;
+}
+
+void kMyMoneyEdit::setReadOnly(bool readOnly)
+{
+ // we use the QLineEdit::setReadOnly() method directly to avoid
+ // changing the background between readonly and read/write mode
+ // as it is done by the KLineEdit code.
+ if(m_edit)
+ m_edit->QLineEdit::setReadOnly(readOnly);
+}
+
+#include "kmymoneyedit.moc"
diff --git a/kmymoney2/widgets/kmymoneyedit.h b/kmymoney2/widgets/kmymoneyedit.h
new file mode 100644
index 0000000..6415a0c
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyedit.h
@@ -0,0 +1,243 @@
+/***************************************************************************
+ kmymoneyedit.h
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYEDIT_H
+#define KMYMONEYEDIT_H
+
+#include "kdecompat.h"
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qhbox.h>
+#include <qvalidator.h>
+
+class QVBox;
+class QWidget;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klineedit.h>
+class KPushButton;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/kmymoneylineedit.h>
+#include <kmymoney/mymoneysecurity.h>
+class MyMoneyMoney;
+class kMyMoneyCalculator;
+
+#if KDE_VERSION <= KDE_MAKE_VERSION(3,1,0)
+ #define KDoubleValidator QDoubleValidator
+#endif
+
+/**
+ * This class is derived from KDoubleValidator and uses
+ * the monetary symbols instead of the numeric symbols.
+ * Also, it always accepts localized input.
+ *
+ * @author Thomas Baumgart
+ */
+class kMyMoneyMoneyValidator : public QDoubleValidator
+{
+ Q_OBJECT
+
+public:
+ /**
+ * Constuct a locale-aware KDoubleValidator with default range
+ * (whatever QDoubleValidator uses for that) and parent @p
+ * parent
+ */
+ kMyMoneyMoneyValidator( QObject * parent, const char * name=0 );
+ /**
+ * Constuct a locale-aware KDoubleValidator for range [@p bottom,@p
+ * top] and a precision of @p decimals decimals after the decimal
+ * point.
+ */
+ kMyMoneyMoneyValidator( double bottom, double top, int decimals,
+ QObject * parent, const char * name=0 );
+ /**
+ * Destructs the validator.
+ */
+ virtual ~kMyMoneyMoneyValidator() {}
+
+ /** Overloaded for internal reasons. The API is not affected. */
+ virtual QValidator::State validate( QString & input, int & pos ) const;
+};
+
+/**
+ * This class represents a widget to enter monetary values.
+ * It has an edit field and a button to select a popup
+ * calculator. The result of the calculator (if used) is
+ * stored in the edit field.
+ *
+ * @author Michael Edwardes, Thomas Baumgart
+ */
+class kMyMoneyEdit : public QHBox
+{
+ Q_OBJECT
+ Q_PROPERTY(bool calculatorButtonVisibility READ isCalculatorButtonVisible WRITE setCalculatorButtonVisible);
+ Q_PROPERTY(bool resetButtonVisibility READ isResetButtonVisible WRITE setResetButtonVisible);
+ Q_PROPERTY(bool allowEmpty READ isEmptyAllowed WRITE setAllowEmpty);
+ Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly )
+
+private:
+ QString previousText; // keep track of what has been typed
+ QString m_text; // keep track of what was the original value
+ kMyMoneyCalculator* m_calculator;
+ QVBox* m_calculatorFrame;
+ kMyMoneyLineEdit* m_edit;
+ KPushButton* m_calcButton;
+ KPushButton* m_resetButton;
+ int m_prec;
+ bool calculatorButtonVisibility;
+ bool allowEmpty;
+
+private:
+ /**
+ * Internal helper function for value() and ensureFractionalPart(void).
+ */
+ void ensureFractionalPart(QString& txt) const;
+
+protected:
+ /**
+ * This method ensures that the text version contains a
+ * fractional part.
+ */
+ void ensureFractionalPart(void);
+
+ /**
+ * This method opens the calculator and replays the key
+ * event pointed to by @p ev. If @p ev is 0, then no key
+ * event is replayed.
+ *
+ * @param ev pointer to QKeyEvent that started the calculator.
+ */
+ void calculatorOpen(QKeyEvent* ev);
+
+ /**
+ * Helper method for constructors.
+ */
+ void init(void);
+
+protected slots:
+ void theTextChanged(const QString & text);
+ void slotCalculatorResult(void);
+ void slotCalculatorOpen(void);
+
+public:
+ kMyMoneyEdit(QWidget *parent=0, const char *name=0, const int prec = -2);
+ kMyMoneyEdit(const MyMoneySecurity& eq, QWidget *parent=0, const char *name=0);
+ ~kMyMoneyEdit();
+
+ /**
+ * @deprecated Use value() instead
+ */
+ // MyMoneyMoney getMoneyValue(void) KDE_DEPRECATED;
+
+ MyMoneyMoney value(void) const;
+
+ void setValue(const MyMoneyMoney& value);
+
+ bool isValid(void) const;
+
+ virtual bool eventFilter(QObject * , QEvent * );
+
+ /**
+ * This method returns the value of the edit field in "numerator/denominator" format.
+ * If you want to get the text of the edit field, use lineedit()->text() instead.
+ */
+ QString text(void) const { return value().toString(); };
+
+ void setMinimumWidth(int w) { m_edit->setMinimumWidth(w); };
+
+ /**
+ * Set the number of fractional digits that should be shown
+ *
+ * @param prec number of fractional digits.
+ *
+ * @note should be used prior to calling loadText()
+ * @sa precision
+ */
+ void setPrecision(const int prec);
+
+ /**
+ * return the number of fractional digits
+ * @sa setPrecision
+ */
+ int precision(void) { return m_prec; };
+
+ QWidget* focusWidget(void) const;
+
+ /**
+ * This method allows to modify the behavior of the widget
+ * such that it accepts an empty value (all blank) or not.
+ * The default is to not accept an emtpy input and to
+ * convert an empty field into 0.00 upon loss of focus.
+ *
+ * @param allowed if @a true, empty input is allowed, if @a false
+ * emtpy input will be converted to 0.00
+ */
+ void setAllowEmpty(bool allowed = true);
+
+ /** Overloaded for internal reasons. The API is not affected. */
+ void setValidator(const QValidator* v);
+
+ bool isCalculatorButtonVisible(void) const;
+
+ bool isResetButtonVisible(void) const;
+
+ bool isEmptyAllowed(void) const;
+
+ KLineEdit* lineedit(void) const;
+
+ void setHint(const QString& hint) const;
+
+ bool isReadOnly(void) const;
+
+public slots:
+ void loadText(const QString& text);
+ void resetText(void);
+ void clearText(void);
+
+ void setText(const QString& txt) { setValue(MyMoneyMoney(txt)); };
+
+ /**
+ * This method allows to show/hide the calculator button of the widget.
+ * The parameter @p show controls the behavior. Default is to show the
+ * button.
+ *
+ * @param show if true, button is shown, if false it is hidden
+ */
+ void setCalculatorButtonVisible(const bool show);
+
+ void setResetButtonVisible(const bool show);
+
+ void setReadOnly(bool readOnly);
+
+signals: // Signals
+ /**
+ * This signal is sent, when the focus leaves this widget and
+ * the amount has been changed by user during this session.
+ */
+ void valueChanged(const QString& text);
+
+ void textChanged(const QString& text);
+};
+
+#endif
diff --git a/kmymoney2/widgets/kmymoneyforecastlistviewitem.cpp b/kmymoney2/widgets/kmymoneyforecastlistviewitem.cpp
new file mode 100644
index 0000000..684997e
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyforecastlistviewitem.cpp
@@ -0,0 +1,75 @@
+/***************************************************************************
+ kmymoneylistviewitem - description
+ -------------------
+ begin : Sun Nov 25 2007
+ copyright : (C) 2007 by Alvaro Soliverez
+ email : asoliverez@gmail.com
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qpalette.h>
+#include <qpen.h>
+#include <qcolor.h>
+#include <qpainter.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoneyforecastlistviewitem.h"
+
+#include <kmymoney/kmymoneyglobalsettings.h>
+
+KMyMoneyForecastListViewItem::KMyMoneyForecastListViewItem (QListView* parent, QListViewItem* after, bool isNegative) :
+ KListViewItem(parent, after),
+ m_negative(isNegative)
+{
+}
+
+KMyMoneyForecastListViewItem::~KMyMoneyForecastListViewItem()
+{
+}
+
+void KMyMoneyForecastListViewItem::paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment)
+{
+ QColorGroup _cg = cg;
+ QColor textColour;
+ if(m_negative == true) {
+ textColour = KMyMoneyGlobalSettings::listNegativeValueColor(); //if the item is marked is marked as negative, all columns will be painted negative
+ } else {
+ textColour = m_columnsColor[column]; //otherwise, respect the color for each column
+ }
+ _cg.setColor(QColorGroup::Text, textColour);
+
+ KListViewItem::paintCell(p, _cg, column, width, alignment);
+}
+
+void KMyMoneyForecastListViewItem::setNegative(bool isNegative)
+{
+ m_negative = isNegative;
+}
+
+void KMyMoneyForecastListViewItem::setText( int column, const QString &text, const bool &negative)
+{
+ //if negative set the map to negative color according to KMyMoneySettings
+ if(negative) {
+ m_columnsColor[column] = KMyMoneyGlobalSettings::listNegativeValueColor();
+ } else {
+ m_columnsColor[column] = QColorGroup::Text;
+ }
+
+ KListViewItem::setText(column, text);
+}
diff --git a/kmymoney2/widgets/kmymoneyforecastlistviewitem.h b/kmymoney2/widgets/kmymoneyforecastlistviewitem.h
new file mode 100644
index 0000000..7e48945
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyforecastlistviewitem.h
@@ -0,0 +1,65 @@
+/***************************************************************************
+ kmymoneyforecastlistviewitem.h
+ -------------------
+ begin : Sun Nov 25 2007
+ copyright : (C) 2007 by Alvaro Soliverez
+ email : asoliverez@gmail.com
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYFORECASTLISTVIEWITEM_H
+#define KMYMONEYFORECASTLISTVIEWITEM_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qobject.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klistview.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+/**
+ * This class implements a derived version of a KListViewItem that
+ * allows printing negative numbers in red
+ *
+ * @author Alvaro Soliverez
+ */
+class KMyMoneyForecastListViewItem : public KListViewItem
+{
+public:
+
+ KMyMoneyForecastListViewItem(QListView* parent, QListViewItem* after, bool isNegative);
+
+ ~KMyMoneyForecastListViewItem();
+
+ void setNegative(bool isNegative);
+
+ void setText( int column, const QString &text, const bool &negative = false );
+
+ /**
+ * use my own paint method
+ */
+ void paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment);
+
+
+private:
+
+ bool m_negative;
+
+ QMap<int, QColor> m_columnsColor;
+};
+
+#endif
diff --git a/kmymoney2/widgets/kmymoneygpgconfig.cpp b/kmymoney2/widgets/kmymoneygpgconfig.cpp
new file mode 100644
index 0000000..f168e69
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneygpgconfig.cpp
@@ -0,0 +1,130 @@
+/***************************************************************************
+ kmymoneyonlinequoteconfig.cpp - description
+ -------------------
+ begin : Thu Dec 30 2004
+ copyright : (C) 2004 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qcheckbox.h>
+#include <qgroupbox.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kconfig.h>
+#include <kglobal.h>
+#include <klocale.h>
+#include <klineedit.h>
+#include <kled.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoneygpgconfig.h"
+#include "libkgpgfile/kgpgfile.h"
+
+#define RECOVER_KEY_ID "0xD2B08440"
+
+kMyMoneyGPGConfig::kMyMoneyGPGConfig(QWidget *parent, const char *name )
+ : kMyMoneyGPGConfigDecl(parent, name),
+ m_checkCount(0)
+{
+ m_idGroup->setEnabled(KGPGFile::GPGAvailable());
+ m_recoveryGroup->setEnabled(KGPGFile::keyAvailable(RECOVER_KEY_ID));
+
+ m_userKeyFound->off();
+ m_recoverKeyFound->off();
+
+ connect(m_useEncryption, SIGNAL(toggled(bool)), this, SLOT(slotStatusChanged(bool)));
+ connect(m_userId, SIGNAL(textChanged(const QString&)), this, SLOT(slotIdChanged(const QString&)));
+}
+
+void kMyMoneyGPGConfig::resetConfig(void)
+{
+ m_useEncryption->setChecked(m_resetUseEncryption);
+ m_userId->setText(m_resetUserId);
+ m_recover->setChecked(m_resetRecover);
+ slotStatusChanged(m_resetUseEncryption);
+ writeConfig();
+}
+
+void kMyMoneyGPGConfig::readConfig(void)
+{
+ KConfig *config = KGlobal::config();
+ config->setGroup("General Options");
+ m_resetUseEncryption = config->readBoolEntry("WriteDataEncrypted", false);
+ m_resetRecover = config->readBoolEntry("EncryptRecover", false);
+ m_resetUserId = config->readEntry("GPG-Recipient");
+
+ resetConfig();
+}
+
+void kMyMoneyGPGConfig::writeConfig(void)
+{
+ KConfig *config = KGlobal::config();
+ config->setGroup("General Options");
+ config->writeEntry("WriteDataEncrypted", m_useEncryption->isChecked());
+ config->writeEntry("EncryptRecover", m_recover->isChecked());
+ config->writeEntry("GPG-Recipient", m_userId->text());
+}
+
+void kMyMoneyGPGConfig::slotIdChanged(const QString& /*txt*/)
+{
+ // this looks a bit awkward. Here's why: KGPGFile::keyAvailable() starts
+ // an external task and processes UI events while it waits for the external
+ // process to finish. Thus, the first time we get here, the external process
+ // is started and the user my press a second key which calls this routine
+ // again.
+ //
+ // The second invocation is counted, but the check is not started until the
+ // first one finishes. Once the external process finishes, we check if we
+ // were called in the meantime and restart the check.
+ if(++m_checkCount == 1) {
+ while(1) {
+ if(m_userId->text().stripWhiteSpace().length() > 0) {
+ m_userKeyFound->setState((KLed::State) (KGPGFile::keyAvailable(m_userId->text()) ? KLed::On : KLed::Off));
+ if(m_checkCount > 1) {
+ m_checkCount = 1;
+ continue;
+ }
+ } else {
+ m_userKeyFound->setState(KLed::Off);
+ }
+ break;
+ }
+ --m_checkCount;
+ }
+}
+
+void kMyMoneyGPGConfig::slotStatusChanged(bool state)
+{
+ if(state) {
+ m_idGroup->setEnabled(KGPGFile::GPGAvailable());
+ m_recoveryGroup->setEnabled(KGPGFile::GPGAvailable());
+ m_recoverKeyFound->setState((KLed::State) (KGPGFile::keyAvailable(RECOVER_KEY_ID) ? KLed::On : KLed::Off));
+ if(m_userId->text().isEmpty())
+ m_userKeyFound->setState(KLed::Off);
+ else
+ m_userKeyFound->setState((KLed::State) (KGPGFile::keyAvailable(m_userId->text()) ? KLed::On : KLed::Off));
+ } else {
+ m_idGroup->setEnabled(false);
+ m_recoveryGroup->setEnabled(false);
+ m_recoverKeyFound->setState(KLed::Off);
+ m_userKeyFound->setState(KLed::Off);
+ }
+}
+
+#include "kmymoneygpgconfig.moc"
diff --git a/kmymoney2/widgets/kmymoneygpgconfig.h b/kmymoney2/widgets/kmymoneygpgconfig.h
new file mode 100644
index 0000000..9d2bdc7
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneygpgconfig.h
@@ -0,0 +1,62 @@
+/***************************************************************************
+ kmymoneygpgconfig.h - description
+ -------------------
+ begin : Mon Jan 3 2005
+ copyright : (C) 2005 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYGPGCONFIG_H
+#define KMYMONEYGPGCONFIG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../widgets/kmymoneygpgconfigdecl.h"
+
+/**
+ * @author Thomas Baumgart
+ */
+
+/**
+ * This class provides the necessary user interface to
+ * setup the parameters required for data encryption
+ */
+class kMyMoneyGPGConfig : public kMyMoneyGPGConfigDecl
+{
+ Q_OBJECT
+public:
+ kMyMoneyGPGConfig(QWidget* parent, const char *name);
+ virtual ~kMyMoneyGPGConfig() {}
+
+ void writeConfig(void);
+ void readConfig(void);
+ void resetConfig(void);
+
+protected slots:
+ void slotIdChanged(const QString& txt);
+ void slotStatusChanged(bool);
+
+private:
+ QString m_resetUserId;
+ bool m_resetUseEncryption;
+ bool m_resetRecover;
+ int m_checkCount;
+};
+
+#endif
diff --git a/kmymoney2/widgets/kmymoneygpgconfigdecl.ui b/kmymoney2/widgets/kmymoneygpgconfigdecl.ui
new file mode 100644
index 0000000..4aa12eb
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneygpgconfigdecl.ui
@@ -0,0 +1,197 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>kMyMoneyGPGConfigDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>kMyMoneyGPGConfigDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>490</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>GPG encryption settings</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This page allows you to set the parameters for encrypted file storage of your &lt;b&gt;KMyMoney&lt;/b&gt; data based on &lt;b&gt;GPG&lt;/b&gt;.&lt;p&gt;
+Acces to the settings is disabled if &lt;b&gt;GPG&lt;/b&gt; could not be detected on your system. In this case, please make sure that &lt;b&gt;GPG&lt;/b&gt; is working properly for the current user.&lt;p&gt;
+The &lt;i&gt;Recovery encryption&lt;/i&gt; group is only accessible, if the necessary key for &lt;b&gt;kmymoney-recover@users.sourceforge.net&lt;/b&gt; with id 0x8AFDDC8E is found.</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_useEncryption</cstring>
+ </property>
+ <property name="text">
+ <string>Use GPG encryption</string>
+ </property>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>m_idGroup</cstring>
+ </property>
+ <property name="title">
+ <string>User identification</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Enter the id of the key you want to use for data encryption. This can either be an e-mail address or the hexadecimal key id. In case of the key id don't forget the leading &lt;i&gt;0x&lt;/i&gt;.</string>
+ </property>
+ <property name="textFormat">
+ <enum>RichText</enum>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout7</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>User ID</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>m_userId</cstring>
+ </property>
+ </widget>
+ <widget class="KLed">
+ <property name="name">
+ <cstring>m_userKeyFound</cstring>
+ </property>
+ <property name="shape">
+ <enum>Circular</enum>
+ </property>
+ <property name="look">
+ <enum>Sunken</enum>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This symbol denotes, if the key for the given user id has been found in your keyring. It is green when found, dark otherwise.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>m_recoveryGroup</cstring>
+ </property>
+ <property name="title">
+ <string>Recovery encryption</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout8</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_recover</cstring>
+ </property>
+ <property name="text">
+ <string>Also encrypt with kmymoney-recover key</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>51</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KLed">
+ <property name="name">
+ <cstring>m_recoverKeyFound</cstring>
+ </property>
+ <property name="shape">
+ <enum>Circular</enum>
+ </property>
+ <property name="look">
+ <enum>Sunken</enum>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This symbol denotes, if the KMyMoney recovery key has been found in your keyring. It is green when found, dark otherwise.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>You can specify to encrypt the data also with the KMyMoney recover key. Only the core KMyMoney developers are in posession of the respective private key required to read back such encrypted data.&lt;p&gt;
+
+This mechanism is provided for the case that you have lost your key and cannot access your data anymore. With this option activated, the KMyMoney developers can decrypt the data and supply you with it in a readable form. Please be prepared, that you have to answer a few detailed questions about the contents of your data before we will send it out.</string>
+ </property>
+ <property name="textFormat">
+ <enum>RichText</enum>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/widgets/kmymoneylineedit.cpp b/kmymoney2/widgets/kmymoneylineedit.cpp
new file mode 100644
index 0000000..18e2e31
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneylineedit.cpp
@@ -0,0 +1,152 @@
+/***************************************************************************
+ kmymoneylineedit.cpp - description
+ -------------------
+ begin : Wed May 9 2001
+ copyright : (C) 2001 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@ctv.es>
+ Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qrect.h>
+#include <qpainter.h>
+#include <qpalette.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kglobal.h>
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoneylineedit.h"
+
+kMyMoneyLineEdit::kMyMoneyLineEdit(QWidget *w, const char* name, bool forceMonetaryDecimalSymbol, int alignment) :
+ KLineEdit(w, name),
+ m_forceMonetaryDecimalSymbol(forceMonetaryDecimalSymbol)
+{
+ setAlignment(alignment);
+}
+
+kMyMoneyLineEdit::~kMyMoneyLineEdit()
+{
+}
+
+void kMyMoneyLineEdit::resetText(void)
+{
+ setText(m_text);
+}
+
+void kMyMoneyLineEdit::loadText(const QString& text)
+{
+ m_text = text;
+ setText(text);
+}
+
+void kMyMoneyLineEdit::focusOutEvent(QFocusEvent *ev)
+{
+ // if the current text is not in the list of
+ // possible completions, we have a new payee
+ // and signal that to the outside world.
+ if(text() != m_text) {
+ emit lineChanged(text());
+ }
+ KLineEdit::focusOutEvent(ev);
+
+ // force update of hint
+ if(text().isEmpty())
+ repaint();
+}
+
+void kMyMoneyLineEdit::keyReleaseEvent(QKeyEvent* k)
+{
+ if(m_forceMonetaryDecimalSymbol) {
+ if(k->state() & Qt::Keypad) {
+ if(k->key() == Qt::Key_Comma
+ || k->key() == Qt::Key_Period) {
+ if(KGlobal::locale()->monetaryDecimalSymbol() == ",") {
+ QKeyEvent newk(k->type(), Qt::Key_Comma, ',', k->state(), ",", k->isAutoRepeat(), k->count());
+ KLineEdit::keyReleaseEvent(&newk);
+ k->ignore();
+ return;
+ }
+
+ if(KGlobal::locale()->monetaryDecimalSymbol() == ".") {
+ QKeyEvent newk(k->type(), Qt::Key_Comma, ',', k->state(), ".", k->isAutoRepeat(), k->count());
+ KLineEdit::keyReleaseEvent(&newk);
+ k->ignore();
+ return;
+ }
+ }
+ }
+ }
+ KLineEdit::keyReleaseEvent(k);
+}
+
+void kMyMoneyLineEdit::keyPressEvent(QKeyEvent* k)
+{
+ if(m_forceMonetaryDecimalSymbol) {
+ if(k->state() & Qt::Keypad) {
+ if(k->key() == Qt::Key_Comma
+ || k->key() == Qt::Key_Period) {
+ if(KGlobal::locale()->monetaryDecimalSymbol() == ",") {
+ QKeyEvent newk(k->type(), Qt::Key_Comma, ',', k->state(), ",", k->isAutoRepeat(), k->count());
+ KLineEdit::keyPressEvent(&newk);
+ k->ignore();
+ return;
+ }
+
+ if(KGlobal::locale()->monetaryDecimalSymbol() == ".") {
+ QKeyEvent newk(k->type(), Qt::Key_Period, '.', k->state(), ".", k->isAutoRepeat(), k->count());
+ KLineEdit::keyPressEvent(&newk);
+ k->ignore();
+ return;
+ }
+ }
+ }
+ }
+ KLineEdit::keyPressEvent(k);
+}
+
+void kMyMoneyLineEdit::drawContents( QPainter *p)
+{
+ KLineEdit::drawContents(p);
+
+ if(text().isEmpty() && !m_hint.isEmpty() && !hasFocus()) {
+ const int innerMargin = 1;
+
+ // the following 5 lines are taken from QLineEdit::drawContents()
+ QRect cr = contentsRect();
+ QFontMetrics fm = fontMetrics();
+ QRect lineRect( cr.x() + innerMargin, cr.y() + (cr.height() - fm.height() + 1) / 2,
+ cr.width() - 2*innerMargin, fm.height() );
+ QPoint topLeft = lineRect.topLeft() - QPoint(0, -fm.ascent());
+
+ p->save();
+ QFont f = p->font();
+ f.setItalic(true);
+ f.setWeight(QFont::Light);
+ p->setFont(f);
+ p->setPen(palette().disabled().text());
+
+ p->drawText(topLeft, m_hint);
+
+ p->restore();
+ }
+}
+
+#include "kmymoneylineedit.moc"
diff --git a/kmymoney2/widgets/kmymoneylineedit.h b/kmymoney2/widgets/kmymoneylineedit.h
new file mode 100644
index 0000000..2351082
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneylineedit.h
@@ -0,0 +1,135 @@
+/***************************************************************************
+ kmymoneylineedit.h - description
+ -------------------
+ begin : Wed May 9 2001
+ copyright : (C) 2001 by Michael Edwardes
+ 2006 by Thomas Baumgart
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@ctv.es>
+ Felix Rodriguez <frodriguez@mail.wesleyan.edu>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYLINEEDIT_H
+#define KMYMONEYLINEEDIT_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klineedit.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+/**
+ * This class represents a special verson of a KLineEdit object that
+ * supports the display of a hint if the display area is empty. It also
+ * overrides the comma key on the numeric keypad with the currently
+ * selected monetaryDecimalSymbol if selected during creation of the object.
+ *
+ * @author Michael Edwardes
+ * @author Thomas Baumgart
+ */
+class kMyMoneyLineEdit : public KLineEdit
+{
+ Q_OBJECT
+public:
+ /**
+ * @param w pointer to parent
+ * @param name pointer to name of object
+ * @param forceMonetaryDecimalSymbol if @a true, the numeric keypad comma key will have a fixed
+ * value and does not follow the keyboard layout (default: @p false)
+ * @param alignment Controls the alignment of the text. Default is Qt::AlignLeft | Qt::AlignVCenter.
+ * See Qt::AlignmentFlags for other possible values.
+ */
+ kMyMoneyLineEdit(QWidget *w = 0, const char* name = 0, bool forceMonetaryDecimalSymbol = false, int alignment = (AlignLeft | AlignVCenter));
+ ~kMyMoneyLineEdit();
+
+ /**
+ * This method is used to set the value of the widget back to
+ * the one passed using loadText().
+ */
+ void resetText(void);
+
+ /**
+ * This method is used to turn on/off the hint display
+ */
+ void setHint(const QString& hint) { m_hint = hint; };
+
+
+public slots:
+ void loadText(const QString& text);
+
+signals:
+ /**
+ * This signal is emitted when the focus leaves the object and the text
+ * has been changed. The new text is passed as @a str.
+ */
+ void lineChanged(const QString& str);
+
+protected:
+ void focusOutEvent(QFocusEvent *ev);
+
+ /** reimplemented to support the hint display */
+ void drawContents( QPainter *);
+
+ /**
+ * Overridden so that the period key on the numeric keypad always sends
+ * out the currently selected monetary decimal symbol instead of the
+ * key defined by the keymap.
+ *
+ * Example: If you have set the keymap (keyboard layout) as English, then
+ * the numeric keypad will send a period but if you have set the keymap to
+ * be German, the same key will send a comma.
+ *
+ * @param ev pointer to current QKeyEvent
+ */
+ void keyPressEvent(QKeyEvent* ev);
+
+ /**
+ * Overridden so that the period key on the numeric keypad always sends
+ * out the currently selected monetary decimal symbol instead of the
+ * key defined by the keymap.
+ *
+ * Example: If you have set the keymap (keyboard layout) as English, then
+ * the numeric keypad will send a period but if you have set the keymap to
+ * be German, the same key will send a comma.
+ *
+ * @param ev pointer to current QKeyEvent
+ */
+ void keyReleaseEvent(QKeyEvent* ev);
+
+private:
+ /**
+ * This member keeps the initial value. It is used during
+ * resetText() to set the widgets text back to this initial value
+ * and as comparison during focusOutEvent() to emit the lineChanged
+ * signal if the current text is different.
+ */
+ QString m_text;
+
+ /**
+ * This member tells what to display as hint as long as the field is empty
+ */
+ QString m_hint;
+
+ /**
+ * This member keeps the status if overriding the numeric keypad comma key
+ * is requested or not.
+ */
+ bool m_forceMonetaryDecimalSymbol;
+};
+
+#endif
diff --git a/kmymoney2/widgets/kmymoneylistviewitem.cpp b/kmymoney2/widgets/kmymoneylistviewitem.cpp
new file mode 100644
index 0000000..26367ad
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneylistviewitem.cpp
@@ -0,0 +1,135 @@
+/***************************************************************************
+ kmymoneylistviewitem - description
+ -------------------
+ begin : Wed Jun 28 2006
+ copyright : (C) 2000-2006 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qpalette.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoneylistviewitem.h"
+#include "kmymoneychecklistitem.h"
+#include "../kmymoneyglobalsettings.h"
+
+KMyMoneyListViewItem::KMyMoneyListViewItem(QListView* parent, const QString& txt, const QString& key, const QString& id) :
+ KListViewItem(parent, txt),
+ m_key(key),
+ m_id(id),
+ m_isOdd(0),
+ m_isKnown(0)
+{
+ if(key.isEmpty())
+ m_key = txt;
+}
+
+KMyMoneyListViewItem::KMyMoneyListViewItem(QListViewItem* parent, const QString& txt, const QString& key, const QString& id) :
+ KListViewItem(parent, txt),
+ m_key(key),
+ m_id(id),
+ m_isOdd(0),
+ m_isKnown(0)
+{
+ if(key.isEmpty())
+ m_key = txt;
+}
+
+KMyMoneyListViewItem::~KMyMoneyListViewItem()
+{
+}
+
+QString KMyMoneyListViewItem::key(int column, bool ascending) const
+{
+ Q_UNUSED(ascending);
+
+ if(column == 0)
+ return m_key[0] + text(0);
+ return m_key.mid(1);
+}
+
+
+void KMyMoneyListViewItem::paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment)
+{
+ QColorGroup _cg = cg;
+ _cg.setColor(QColorGroup::Base, backgroundColor());
+
+ // make sure to bypass KListViewItem::paintCell() as
+ // we don't like it's logic - that's why we do this
+ // here ;-) (ipwizard)
+ QListViewItem::paintCell(p, _cg, column, width, alignment);
+}
+
+const QColor KMyMoneyListViewItem::backgroundColor()
+{
+ return isAlternate() ? KMyMoneyGlobalSettings::listBGColor() : KMyMoneyGlobalSettings::listColor();
+}
+
+bool KMyMoneyListViewItem::isAlternate(void)
+{
+// logic taken from KListViewItem::isAlternate()
+ KMyMoneyCheckListItem* ciAbove;
+ KMyMoneyListViewItem* liAbove;
+ ciAbove = dynamic_cast<KMyMoneyCheckListItem*> (itemAbove());
+ liAbove = dynamic_cast<KMyMoneyListViewItem*> (itemAbove());
+
+ m_isKnown = ciAbove ? ciAbove->m_isKnown : (liAbove ? liAbove->m_isKnown : true);
+ if(m_isKnown) {
+ m_isOdd = ciAbove ? !ciAbove->m_isOdd : (liAbove ? !liAbove->m_isOdd : false);
+ } else {
+ KMyMoneyCheckListItem* clItem;
+ KMyMoneyListViewItem* liItem;
+ bool previous = true;
+ if(QListViewItem::parent()) {
+ clItem = dynamic_cast<KMyMoneyCheckListItem *>(QListViewItem::parent());
+ liItem = dynamic_cast<KMyMoneyListViewItem*>(QListViewItem::parent());
+ if(clItem)
+ previous = clItem->m_isOdd;
+ else
+ previous = liItem->m_isOdd;
+ clItem = dynamic_cast<KMyMoneyCheckListItem *>(QListViewItem::parent()->firstChild());
+ liItem = dynamic_cast<KMyMoneyListViewItem*>(QListViewItem::parent()->firstChild());
+ } else {
+ clItem = dynamic_cast<KMyMoneyCheckListItem *>(listView()->firstChild());
+ liItem = dynamic_cast<KMyMoneyListViewItem*>(listView()->firstChild());
+ }
+ while(clItem || liItem) {
+ if(clItem) {
+ clItem->m_isOdd = previous = !previous;
+ clItem->m_isKnown = true;
+ liItem = dynamic_cast<KMyMoneyListViewItem *>(clItem->nextSibling());
+ clItem = dynamic_cast<KMyMoneyCheckListItem *>(clItem->nextSibling());
+ } else if(liItem) {
+ liItem->m_isOdd = previous = !previous;
+ liItem->m_isKnown = true;
+ clItem = dynamic_cast<KMyMoneyCheckListItem *>(liItem->nextSibling());
+ liItem = dynamic_cast<KMyMoneyListViewItem *>(liItem->nextSibling());
+ }
+ }
+ }
+ return m_isOdd;
+}
+
+#include "kmymoneylistviewitem.moc"
diff --git a/kmymoney2/widgets/kmymoneylistviewitem.h b/kmymoney2/widgets/kmymoneylistviewitem.h
new file mode 100644
index 0000000..64f7562
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneylistviewitem.h
@@ -0,0 +1,88 @@
+/***************************************************************************
+ kmymoneylistviewitem.h
+ -------------------
+ begin : Wed Jun 28 2006
+ copyright : (C) 2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYLISTVIEWITEM_H
+#define KMYMONEYLISTVIEWITEM_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qobject.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klistview.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+class KMyMoneyCheckListItem;
+
+/**
+ * This class implements a derived version of a QListViewItem that
+ * allows the storage of an engine object id with the object
+ *
+ * @author Thomas Baumgart
+ */
+class KMyMoneyListViewItem : public QObject, public KListViewItem
+{
+ friend class KMyMoneyCheckListItem;
+
+ Q_OBJECT
+public:
+ KMyMoneyListViewItem(QListView *parent, const QString& txt, const QString& key, const QString& id);
+ KMyMoneyListViewItem(QListViewItem *parent, const QString& txt, const QString& key, const QString& id);
+ ~KMyMoneyListViewItem();
+
+ const QString& id(void) const { return m_id; };
+
+ /**
+ * use my own paint method
+ */
+ void paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment);
+
+ /**
+ * use my own backgroundColor method
+ */
+ const QColor backgroundColor();
+
+ /**
+ * This method returns a const reference to the key passed to the constructor. The column
+ * defines what is returned: For @a column equals 0, the first character passed as @a key to
+ * the constructor concatenated with the value returned by text(0) is returned. For @a column
+ * equals to 1, the @a key as passed to the constructor except the first character is returned.
+ */
+ QString key(int column, bool ascending) const;
+
+
+ /**
+ * Reimplemented for internal reasons
+ */
+ bool isAlternate(void);
+
+private:
+ QString m_key;
+ QString m_id;
+ // copied from KListViewItem()
+ unsigned int m_isOdd : 1;
+ unsigned int m_isKnown : 1;
+ unsigned int m_unused : 30;
+
+};
+
+#endif
diff --git a/kmymoney2/widgets/kmymoneyonlinequoteconfig.cpp b/kmymoney2/widgets/kmymoneyonlinequoteconfig.cpp
new file mode 100644
index 0000000..125cc13
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyonlinequoteconfig.cpp
@@ -0,0 +1,214 @@
+/***************************************************************************
+ kmymoneyonlinequoteconfig.cpp - description
+ -------------------
+ begin : Thu Dec 30 2004
+ copyright : (C) 2004 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qregexp.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kconfig.h>
+#include <kglobal.h>
+#include <klocale.h>
+#include <klistview.h>
+#include <kiconloader.h>
+#include <kguiitem.h>
+#include <kpushbutton.h>
+#include <klineedit.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoneyonlinequoteconfig.h"
+#include "../converter/webpricequote.h"
+
+kMyMoneyOnlineQuoteConfig::kMyMoneyOnlineQuoteConfig(QWidget *parent, const char *name )
+ : kMyMoneyOnlineQuoteConfigDecl(parent, name)
+{
+#if 1
+ QStringList groups = WebPriceQuote::quoteSources();
+
+ loadList(true /*updateResetList*/);
+
+ m_updateButton->setEnabled(false);
+
+ KIconLoader* il = KGlobal::iconLoader();
+ KGuiItem updateButtenItem( i18n("&Update" ),
+ QIconSet(il->loadIcon("button_ok", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Accepts the entered data and stores it"),
+ i18n("Use this to accept the modified data."));
+ m_updateButton->setGuiItem(updateButtenItem);
+
+ KGuiItem deleteButtenItem( i18n( "&Delete" ),
+ QIconSet(il->loadIcon("editdelete", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Delete the selected source entry"),
+ i18n("Use this to delete the selected online source entry"));
+ m_deleteButton->setGuiItem(deleteButtenItem);
+
+ KGuiItem newButtenItem( i18n( "&New..." ),
+ QIconSet(il->loadIcon("filenew", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Create a new source entry for online quotes"),
+ i18n("Use this to create a new entry for online quotes"));
+ m_newButton->setGuiItem(newButtenItem);
+
+ connect(m_updateButton, SIGNAL(clicked()), this, SLOT(slotUpdateEntry()));
+ connect(m_newButton, SIGNAL(clicked()), this, SLOT(slotNewEntry()));
+
+ connect(m_quoteSourceList, SIGNAL(selectionChanged(QListViewItem*)), this, SLOT(slotLoadWidgets(QListViewItem*)));
+ connect(m_quoteSourceList, SIGNAL(clicked(QListViewItem*)), this, SLOT(slotLoadWidgets(QListViewItem*)));
+ connect(m_quoteSourceList, SIGNAL(itemRenamed(QListViewItem*,const QString&,int)), this, SLOT(slotEntryRenamed(QListViewItem*,const QString&,int)));
+
+ connect(m_editURL, SIGNAL(textChanged(const QString&)), this, SLOT(slotEntryChanged()));
+ connect(m_editSymbol, SIGNAL(textChanged(const QString&)), this, SLOT(slotEntryChanged()));
+ connect(m_editDate, SIGNAL(textChanged(const QString&)), this, SLOT(slotEntryChanged()));
+ connect(m_editDateFormat, SIGNAL(textChanged(const QString&)), this, SLOT(slotEntryChanged()));
+ connect(m_editPrice, SIGNAL(textChanged(const QString&)), this, SLOT(slotEntryChanged()));
+
+ // FIXME deleting a source is not yet implemented
+ m_deleteButton->setEnabled(false);
+#endif
+}
+
+void kMyMoneyOnlineQuoteConfig::loadList(const bool updateResetList)
+{
+ QStringList groups = WebPriceQuote::quoteSources();
+
+ if(updateResetList)
+ m_resetList.clear();
+ m_quoteSourceList->clear();
+ QStringList::Iterator it;
+ for(it = groups.begin(); it != groups.end(); ++it) {
+ new QListViewItem(m_quoteSourceList, *it);
+ if(updateResetList)
+ m_resetList += WebPriceQuoteSource(*it);
+ }
+
+ QListViewItem* first = m_quoteSourceList->firstChild();
+ if(first)
+ m_quoteSourceList->setSelected(first, true);
+ slotLoadWidgets(first);
+
+ m_newButton->setEnabled(m_quoteSourceList->findItem(i18n("New Quote Source"), 0) == 0);
+}
+
+void kMyMoneyOnlineQuoteConfig::resetConfig(void)
+{
+ QStringList::ConstIterator it;
+ QStringList groups = WebPriceQuote::quoteSources();
+
+ // delete all currently defined entries
+ for(it = groups.begin(); it != groups.end(); ++it) {
+ WebPriceQuoteSource(*it).remove();
+ }
+
+ // and write back the one's from the reset list
+ QValueList<WebPriceQuoteSource>::ConstIterator itr;
+ for(itr = m_resetList.begin(); itr != m_resetList.end(); ++itr) {
+ (*itr).write();
+ }
+
+ loadList();
+}
+
+void kMyMoneyOnlineQuoteConfig::slotLoadWidgets(QListViewItem* item)
+{
+ m_editURL->setEnabled(true);
+ m_editSymbol->setEnabled(true);
+ m_editPrice->setEnabled(true);
+ m_editDate->setEnabled(true);
+ m_editURL->setText(QString());
+ m_editSymbol->setText(QString());
+ m_editPrice->setText(QString());
+ m_editDate->setText(QString());
+ m_editDateFormat->setText(QString());
+
+ if(item) {
+ m_currentItem = WebPriceQuoteSource(item->text(0));
+ m_editURL->setText(m_currentItem.m_url);
+ m_editSymbol->setText(m_currentItem.m_sym);
+ m_editPrice->setText(m_currentItem.m_price);
+ m_editDate->setText(m_currentItem.m_date);
+ m_editDateFormat->setText(m_currentItem.m_dateformat);
+
+ } else {
+ m_editURL->setEnabled(false);
+ m_editSymbol->setEnabled(false);
+ m_editPrice->setEnabled(false);
+ m_editDate->setEnabled(false);
+ m_editDateFormat->setEnabled(false);
+ }
+
+ m_updateButton->setEnabled(false);
+
+}
+
+void kMyMoneyOnlineQuoteConfig::slotEntryChanged(void)
+{
+ bool modified = m_editURL->text() != m_currentItem.m_url
+ || m_editSymbol->text() != m_currentItem.m_sym
+ || m_editDate->text() != m_currentItem.m_date
+ || m_editDateFormat->text() != m_currentItem.m_dateformat
+ || m_editPrice->text() != m_currentItem.m_price;
+
+ m_updateButton->setEnabled(modified);
+}
+
+void kMyMoneyOnlineQuoteConfig::slotUpdateEntry(void)
+{
+ m_currentItem.m_url = m_editURL->text();
+ m_currentItem.m_sym = m_editSymbol->text();
+ m_currentItem.m_date = m_editDate->text();
+ m_currentItem.m_dateformat = m_editDateFormat->text();
+ m_currentItem.m_price = m_editPrice->text();
+ m_currentItem.write();
+ slotEntryChanged();
+}
+
+void kMyMoneyOnlineQuoteConfig::slotNewEntry(void)
+{
+ WebPriceQuoteSource newSource(i18n("New Quote Source"));
+ newSource.write();
+ loadList();
+ QListViewItem* item = m_quoteSourceList->findItem(i18n("New Quote Source"), 0);
+ if(item) {
+ m_quoteSourceList->setSelected(item, true);
+ slotLoadWidgets(item);
+ }
+}
+
+void kMyMoneyOnlineQuoteConfig::slotEntryRenamed(QListViewItem* item, const QString& text, int /* col */)
+{
+ int nameCount = 0;
+ QListViewItemIterator it(m_quoteSourceList);
+ while(it.current()) {
+ if(it.current()->text(0) == text)
+ ++nameCount;
+ ++it;
+ }
+
+ // Make sure we get a non-empty and unique name
+ if(text.length() > 0 && nameCount == 1) {
+ m_currentItem.rename(text);
+ } else {
+ item->setText(0, m_currentItem.m_name);
+ }
+ m_newButton->setEnabled(m_quoteSourceList->findItem(i18n("New Quote Source"), 0) == 0);
+}
+
+#include "kmymoneyonlinequoteconfig.moc"
diff --git a/kmymoney2/widgets/kmymoneyonlinequoteconfig.h b/kmymoney2/widgets/kmymoneyonlinequoteconfig.h
new file mode 100644
index 0000000..f00cbdb
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyonlinequoteconfig.h
@@ -0,0 +1,59 @@
+/***************************************************************************
+ kmymoneyonlinequoteconfig.h - description
+ -------------------
+ begin : Thu Dec 30 2004
+ copyright : (C) 2004 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYONLINEQUOTECONFIG_H
+#define KMYMONEYONLINEQUOTECONFIG_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../widgets/kmymoneyonlinequoteconfigdecl.h"
+#include "../converter/webpricequote.h"
+
+class kMyMoneyOnlineQuoteConfig : public kMyMoneyOnlineQuoteConfigDecl
+{
+ Q_OBJECT
+public:
+ kMyMoneyOnlineQuoteConfig(QWidget* parent, const char *name);
+ virtual ~kMyMoneyOnlineQuoteConfig() {}
+
+ void writeConfig(void) {}
+ void readConfig(void) {}
+ void resetConfig(void);
+
+protected slots:
+ void slotUpdateEntry(void);
+ void slotLoadWidgets(QListViewItem* item);
+ void slotEntryChanged(void);
+ void slotNewEntry(void);
+ void slotEntryRenamed(QListViewItem* item, const QString& text, int col);
+
+protected:
+ void loadList(const bool updateResetList = false);
+
+private:
+ QValueList<WebPriceQuoteSource> m_resetList;
+ WebPriceQuoteSource m_currentItem;
+};
+
+#endif
diff --git a/kmymoney2/widgets/kmymoneyonlinequoteconfigdecl.ui b/kmymoney2/widgets/kmymoneyonlinequoteconfigdecl.ui
new file mode 100644
index 0000000..0131edd
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyonlinequoteconfigdecl.ui
@@ -0,0 +1,231 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>kMyMoneyOnlineQuoteConfigDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>kMyMoneyOnlineQuoteConfigDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>594</width>
+ <height>487</height>
+ </rect>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="caption">
+ <string>Online Quotes</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KListView">
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>m_quoteSourceList</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="defaultRenameAction">
+ <enum>Accept</enum>
+ </property>
+ <property name="itemsRenameable">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupParsing</cstring>
+ </property>
+ <property name="title">
+ <string>Details</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Date</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Symbol</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>m_editSymbol</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Regular Expression to extract the symbol from the downloaded data</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>m_editPrice</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Regular Expression to extract the price from the downloaded data</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="4" column="1">
+ <property name="name">
+ <cstring>m_editDateFormat</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Regular Expression to extract the date from the downloaded data</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>m_editURL</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>URL to be used to download the quote</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Enter the URL from which stock quotes will be fetched. &lt;b&gt;%1&lt;/b&gt; will be replaced with the symbol for the security being quoted. For currency conversions, &lt;b&gt;%2&lt;/b&gt; will be replaced with the currency to be quoted and &lt;b&gt;%1&lt;/b&gt; with the currency the quote is based on.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Price</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="3" column="1">
+ <property name="name">
+ <cstring>m_editDate</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Regular Expression to extract the date from the downloaded data</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>textLabel4_2</cstring>
+ </property>
+ <property name="text">
+ <string>Date Format</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>URL</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>&lt;i&gt;Enter regular expressions which can be used to parse the data returned from the URL entered above. The symbol, price, and date must be found in the quote data to be usable. You may also try the KMyMoney user's mailinglist at &lt;a href="mailto:kmymoney2-user@lists.sourceforge.net"&gt;kmymoney2-user@lists.sourceforge.net&lt;/a&gt; to find what settings work for other users in your country.&lt;/i&gt;</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout15</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_newButton</cstring>
+ </property>
+ <property name="text">
+ <string>New</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_deleteButton</cstring>
+ </property>
+ <property name="text">
+ <string>Delete</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>240</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_updateButton</cstring>
+ </property>
+ <property name="text">
+ <string>Update</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/widgets/kmymoneypriceview.cpp b/kmymoney2/widgets/kmymoneypriceview.cpp
new file mode 100644
index 0000000..1b884d2
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneypriceview.cpp
@@ -0,0 +1,343 @@
+/***************************************************************************
+ kmymoneypriceview.cpp - description
+ -------------------
+ begin : Wed Mar 24 2004
+ copyright : (C) 2000-2004 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qheader.h>
+#include <qcursor.h>
+#include <qtimer.h>
+#include <qcheckbox.h>
+#include <qgroupbox.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kglobal.h>
+#include <klistview.h>
+#include <kiconloader.h>
+#include <kconfig.h>
+#include <kmessagebox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoneypriceview.h"
+#include <kmymoney/mymoneysecurity.h>
+#include <kmymoney/mymoneyfile.h>
+#include "../kmymoneyglobalsettings.h"
+#if 0
+#include "../widgets/kmymoneycurrencyselector.h"
+#include "../dialogs/kupdatestockpricedlg.h"
+#include "../dialogs/kcurrencycalculator.h"
+#include "../dialogs/kequitypriceupdatedlg.h"
+#include "../kmymoneyutils.h"
+#include "../mymoney/mymoneyfile.h"
+#endif
+
+#define COMMODITY_COL 0
+#define CURRENCY_COL 1
+#define DATE_COL 2
+#define PRICE_COL 3
+#define SOURCE_COL 4
+
+KMyMoneyPriceItem::KMyMoneyPriceItem(KListView *view, const MyMoneyPrice& pr) :
+ KMyMoneyListViewItem(view, QString(), QString(), QString()),
+ m_pr(pr)
+{
+ MyMoneySecurity from, to;
+ KConfig *kconfig = KGlobal::config();
+ kconfig->setGroup("General Options");
+ int prec = kconfig->readNumEntry("PricePrecision", 4);
+
+ if(!m_pr.isValid())
+ m_pr = MyMoneyFile::instance()->price(m_pr.from(), m_pr.to(), m_pr.date());
+
+ if(m_pr.isValid()) {
+ QString priceBase = m_pr.to();
+ from = MyMoneyFile::instance()->security(m_pr.from());
+ to = MyMoneyFile::instance()->security(m_pr.to());
+ if(!to.isCurrency()) {
+ from = MyMoneyFile::instance()->security(m_pr.to());
+ to = MyMoneyFile::instance()->security(m_pr.from());
+ priceBase = m_pr.from();
+ }
+
+ setText(COMMODITY_COL, (from.isCurrency()) ? from.id() : from.tradingSymbol());
+ setText(CURRENCY_COL, to.id());
+ setText(DATE_COL, KGlobal::locale()->formatDate(m_pr.date(), true));
+ setText(PRICE_COL, m_pr.rate(priceBase).formatMoney("", prec));
+ setText(SOURCE_COL, m_pr.source());
+ }
+}
+
+int KMyMoneyPriceItem::compare(QListViewItem* i, int col, bool ascending) const
+{
+ KMyMoneyPriceItem* item = static_cast<KMyMoneyPriceItem*>(i);
+ int rc = 0;
+
+ switch(col) {
+ case DATE_COL: // date
+ if(m_pr.date() > item->m_pr.date())
+ rc = 1;
+ else if(m_pr.date() < item->m_pr.date())
+ rc = -1;
+ break;
+
+ case PRICE_COL: // value
+ if(m_pr.rate(QString()) > item->m_pr.rate(QString()))
+ rc = 1;
+ else if(m_pr.rate(QString()) < item->m_pr.rate(QString()))
+ rc = -1;
+ break;
+
+ default:
+ rc = QListViewItem::compare(i, col, ascending);
+ break;
+ }
+ return rc;
+}
+
+KMyMoneyPriceView::KMyMoneyPriceView(QWidget *parent, const char *name ) :
+ KListView(parent,name),
+ m_contextMenu(0),
+ m_showAll(false)
+{
+ addColumn(i18n("Commodity"));
+ addColumn(i18n("Currency"));
+ addColumn(i18n("Date"));
+ addColumn(i18n("Price"));
+ addColumn(i18n("Source"));
+ setAllColumnsShowFocus(true);
+ setMultiSelection(false);
+ setColumnWidthMode(0, QListView::Maximum);
+ setColumnWidthMode(1, QListView::Maximum);
+ setShowSortIndicator(true);
+ setSorting(COMMODITY_COL);
+
+ header()->setFont(KMyMoneyGlobalSettings::listHeaderFont());
+
+ KIconLoader *kiconloader = KGlobal::iconLoader();
+
+ m_contextMenu = new KPopupMenu(this);
+ m_contextMenu->insertTitle(i18n("Price Options"));
+ m_contextMenu->insertItem(kiconloader->loadIcon("filenew", KIcon::Small),
+ i18n("New..."),
+ this, SIGNAL(newPrice()));
+
+ m_contextMenu->insertItem(kiconloader->loadIcon("edit", KIcon::Small),
+ i18n("Edit..."),
+ this, SIGNAL(editPrice()));
+
+ m_contextMenu->insertItem(kiconloader->loadIcon("connect_creating", KIcon::Small),
+ i18n("Online Price Update..."),
+ this, SIGNAL(onlinePriceUpdate()));
+
+ m_contextMenu->insertItem(kiconloader->loadIcon("delete", KIcon::Small),
+ i18n("Delete..."),
+ this, SIGNAL(deletePrice()));
+
+ connect(this, SIGNAL(rightButtonClicked(QListViewItem* , const QPoint&, int)),
+ this, SLOT(slotListClicked(QListViewItem*, const QPoint&, int)));
+
+ // connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotReloadWidget()));
+
+ // slotReloadWidget();
+
+ // If the widget is shown, the size must be fixed a little later
+ // to be appropriate. I saw this in some other places and the only
+ // way to solve this problem is to postpone the setup of the size
+ // to the time when the widget is on the screen.
+ resize(width()-1, height()-1);
+ QTimer::singleShot(50, this, SLOT(slotTimerDone()));
+}
+
+KMyMoneyPriceView::~KMyMoneyPriceView()
+{
+}
+
+void KMyMoneyPriceView::slotTimerDone(void)
+{
+ // the resize operation does the trick to adjust
+ // all widgets in the view to the size they should
+ // have and show up correctly. Don't ask me, why
+ // this is, but it cured the problem (ipwizard).
+ resize(width()+1, height()+1);
+}
+
+#if 0
+void KMyMoneyPriceView::slotReloadWidget(void)
+{
+ m_priceHistory->clear();
+
+ MyMoneyPriceList list = MyMoneyFile::instance()->priceList();
+ MyMoneyPriceList::ConstIterator it_l;
+ for(it_l = list.begin(); it_l != list.end(); ++it_l) {
+ MyMoneyPriceEntries::ConstIterator it_e;
+ if(m_showAll) {
+ for(it_e = (*it_l).begin(); it_e != (*it_l).end(); ++it_e) {
+ new kMyMoneyPriceItem(m_priceHistory, *it_e);
+ }
+ } else {
+ if((*it_l).count() > 0) {
+ it_e = (*it_l).end();
+ --it_e;
+ new kMyMoneyPriceItem(m_priceHistory, *it_e);
+ }
+ }
+ }
+}
+#endif
+
+void KMyMoneyPriceView::resizeEvent(QResizeEvent* e)
+{
+ int w = visibleWidth()/5;
+
+ setColumnWidth(0, w);
+ setColumnWidth(1, w);
+ setColumnWidth(2, w);
+ setColumnWidth(3, w);
+ setColumnWidth(4, w);
+ resizeContents(visibleWidth(), contentsHeight());
+
+ KListView::resizeEvent(e);
+}
+
+void KMyMoneyPriceView::slotListClicked(QListViewItem* item, const QPoint&, int)
+{
+ int editId = m_contextMenu->idAt(2);
+ int updateId = m_contextMenu->idAt(3);
+ int delId = m_contextMenu->idAt(4);
+
+ m_contextMenu->setItemEnabled(editId, item != 0);
+ m_contextMenu->setItemEnabled(delId, item != 0);
+
+ KMyMoneyPriceItem* priceitem = dynamic_cast<KMyMoneyPriceItem*>(item);
+ if(priceitem) {
+ MyMoneySecurity security;
+ security = MyMoneyFile::instance()->security(priceitem->price().from());
+ m_contextMenu->setItemEnabled(updateId, security.isCurrency() );
+
+ // Modification of automatically added entries is not allowed
+ if(priceitem->price().source() == "KMyMoney") {
+ m_contextMenu->setItemEnabled(editId, false);
+ m_contextMenu->setItemEnabled(updateId, false);
+ m_contextMenu->setItemEnabled(delId, false);
+ }
+ }
+ else
+ m_contextMenu->setItemEnabled(updateId, false );
+
+ m_contextMenu->exec(QCursor::pos());
+}
+
+#if 0
+void KMyMoneyPriceView::slotNewPrice(void)
+{
+ KUpdateStockPriceDlg dlg(this);
+ kMyMoneyPriceItem* item = dynamic_cast<kMyMoneyPriceItem*>(m_priceHistory->selectedItem());
+ if(item) {
+ MyMoneySecurity security;
+ security = MyMoneyFile::instance()->security(item->price().from());
+ dlg.m_security->setSecurity(security);
+ security = MyMoneyFile::instance()->security(item->price().to());
+ dlg.m_currency->setSecurity(security);
+ }
+ if(dlg.exec()) {
+ MyMoneyPrice price(dlg.m_security->security().id(), dlg.m_currency->security().id(), dlg.date(), MyMoneyMoney(1,1));
+ kMyMoneyPriceItem* p = new kMyMoneyPriceItem(m_priceHistory, price);
+ m_priceHistory->setSelected(p, true);
+ // If the user cancels the following operation, we delete the new item
+ // and re-select any previously selected one
+ if(slotEditPrice() == QDialog::Rejected) {
+ delete p;
+ if(item)
+ m_priceHistory->setSelected(item, true);
+ }
+ }
+}
+
+int KMyMoneyPriceView::slotEditPrice(void)
+{
+ int rc = QDialog::Rejected;
+ kMyMoneyPriceItem* item = dynamic_cast<kMyMoneyPriceItem*>(m_priceHistory->selectedItem());
+ if(item) {
+ MyMoneySecurity from(MyMoneyFile::instance()->security(item->price().from()));
+ MyMoneySecurity to(MyMoneyFile::instance()->security(item->price().to()));
+ signed64 fract = MyMoneyMoney::precToDenom(KMyMoneyGlobalSettings::pricePrecision());
+
+ KCurrencyCalculator calc(from,
+ to,
+ MyMoneyMoney(1,1),
+ item->price().rate(),
+ item->price().date(),
+ fract,
+ this, "currencyCalculator");
+ // we always want to update the price, that's why we're here
+ calc.m_updateButton->setChecked(true);
+ calc.m_updateButton->hide();
+
+ rc = calc.exec();
+ }
+ return rc;
+}
+
+void KMyMoneyPriceView::slotDeletePrice(void)
+{
+ kMyMoneyPriceItem* item = dynamic_cast<kMyMoneyPriceItem*>(m_priceHistory->selectedItem());
+ if(item) {
+ if(KMessageBox::questionYesNo(this, i18n("Do you really want to delete the selected price entry?"), i18n("Delete price information"), KStdGuiItem::yes(), KStdGuiItem::no(), "DeletePrice") == KMessageBox::Yes) {
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyFile::instance()->removePrice(item->price());
+ ft.commit();
+ } catch(MyMoneyException *e) {
+ qDebug("Cannot delete price");
+ delete e;
+ }
+ }
+ }
+}
+
+void KMyMoneyPriceView::slotShowAllPrices(bool enabled)
+{
+ if(m_showAll != enabled) {
+ m_showAll = enabled;
+ slotReloadWidget();
+ }
+}
+
+void KMyMoneyPriceView::slotOnlinePriceUpdate(void)
+{
+ KMyMoneyPriceItem* item = dynamic_cast<KMyMoneyPriceItem*>(m_priceHistory->selectedItem());
+ if(item)
+ {
+ KEquityPriceUpdateDlg dlg(this, (item->text(COMMODITY_COL)+" "+item->text(CURRENCY_COL)).utf8());
+ if(dlg.exec() == QDialog::Accepted)
+ dlg.storePrices();
+ }
+}
+
+#endif
+
+#include "kmymoneypriceview.moc"
diff --git a/kmymoney2/widgets/kmymoneypriceview.h b/kmymoney2/widgets/kmymoneypriceview.h
new file mode 100644
index 0000000..56907ac
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneypriceview.h
@@ -0,0 +1,87 @@
+/***************************************************************************
+ kmymoneypriceview.h - description
+ -------------------
+ begin : Wed Mar 24 2004
+ copyright : (C) 2004 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYPRICEVIEW_H
+#define KMYMONEYPRICEVIEW_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+// class QListViewItem;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kpopupmenu.h>
+#include <klistview.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/kmymoneylistviewitem.h>
+//#include <kmymoney/mymoneymoney.h>
+#include <kmymoney/mymoneyprice.h>
+
+/**
+ * @author Thomas Baumgart
+ */
+
+class KMyMoneyPriceItem : public KMyMoneyListViewItem
+{
+public:
+ KMyMoneyPriceItem(KListView *, const MyMoneyPrice& pr);
+ ~KMyMoneyPriceItem() {}
+
+ int compare(QListViewItem *p, int col, bool ascending) const;
+
+ const MyMoneyPrice& price(void) const { return m_pr; };
+
+private:
+ MyMoneyPrice m_pr;
+};
+
+
+class KMyMoneyPriceView : public KListView
+{
+ Q_OBJECT
+public:
+ KMyMoneyPriceView(QWidget *parent=0, const char *name=0);
+ ~KMyMoneyPriceView();
+
+protected:
+ /// the resize event
+ virtual void resizeEvent(QResizeEvent*);
+
+protected slots:
+ void slotListClicked(QListViewItem* item, const QPoint&, int);
+
+private slots:
+ void slotTimerDone(void);
+
+signals:
+ void newPrice(void);
+ void deletePrice(void);
+ void editPrice(void);
+ void onlinePriceUpdate(void);
+
+private:
+ KPopupMenu* m_contextMenu;
+ bool m_showAll;
+};
+
+#endif
diff --git a/kmymoney2/widgets/kmymoneyreportconfigtab1decl.ui b/kmymoney2/widgets/kmymoneyreportconfigtab1decl.ui
new file mode 100644
index 0000000..0d94537
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyreportconfigtab1decl.ui
@@ -0,0 +1,123 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>kMyMoneyReportConfigTab1Decl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>kMyMoneyReportConfigTab1Decl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>172</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Report Tab</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string></string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;p&gt;On this tab, you set the basic properties of this report.&lt;/p&gt;</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout35</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel6</cstring>
+ </property>
+ <property name="text">
+ <string>Report Name</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>m_editName</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Choose a name for this report.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout36</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel7</cstring>
+ </property>
+ <property name="text">
+ <string>Comment</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>m_editComment</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Enter a comment to help you remember the details of this report.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_checkCurrency</cstring>
+ </property>
+ <property name="text">
+ <string>Convert values to base currency</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Select this option to convert all values in the report to your base currency.&lt;/p&gt;&lt;p&gt;Leave it unchecked if you'd like to see values in their original currency.&lt;/p&gt;&lt;p&gt;If currencies are not converted, then subtotals will not be shown.&lt;/p&gt;</string>
+ <comment>Convert 'em!!</comment>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_checkFavorite</cstring>
+ </property>
+ <property name="text">
+ <string>Mark as a favorite report</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Select this option to notate this report as one of your favorites.&lt;/p&gt;&lt;p&gt;All your favorite reports are grouped in one place on the report list for easy access.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer15</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/widgets/kmymoneyreportconfigtab2decl.ui b/kmymoney2/widgets/kmymoneyreportconfigtab2decl.ui
new file mode 100644
index 0000000..1ad7cf0
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyreportconfigtab2decl.ui
@@ -0,0 +1,282 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>kMyMoneyReportConfigTab2Decl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>kMyMoneyReportConfigTab2Decl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>278</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Rows/Columns Tab</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string></string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;p&gt;On this tab, you configure how you'd like the rows and columns to be selected and organized.&lt;/p&gt;</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout10</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout9</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel6</cstring>
+ </property>
+ <property name="text">
+ <string>Detail</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="3" column="1">
+ <item>
+ <property name="text">
+ <string>All</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Top-Level</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Groups</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Totals</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_comboDetail</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Choose what kind of accounts to display as the rows of this report.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QFrame" row="0" column="2">
+ <property name="name">
+ <cstring>m_budgetFrame</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Budget</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyGeneralCombo">
+ <property name="name">
+ <cstring>m_comboBudget</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Columns</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="0" column="1">
+ <item>
+ <property name="text">
+ <string>Daily</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Weekly</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Monthly</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Bi-Monthly</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Quarterly</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Yearly</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_comboColumns</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Choose how large of a time period each column should encompass&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="2" column="1">
+ <item>
+ <property name="text">
+ <string>Income &amp; Expenses</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Assets &amp; Liabilities</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_comboRows</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Choose what kind of accounts to display as the rows of this report.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>Rows</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="1">
+ <property name="name">
+ <cstring>m_checkTotalColumn</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Show totals column</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>textLabel10</cstring>
+ </property>
+ <property name="text">
+ <string>Average days</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="4" column="1">
+ <property name="name">
+ <cstring>m_movingAverageDays</cstring>
+ </property>
+ <property name="maxValue">
+ <number>366</number>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer12_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>94</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_checkScheduled</cstring>
+ </property>
+ <property name="text">
+ <string>Include scheduled transactions</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_checkTransfers</cstring>
+ </property>
+ <property name="text">
+ <string>Include transfers</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_checkUnused</cstring>
+ </property>
+ <property name="text">
+ <string>Include unused accounts/categories</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer13</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/widgets/kmymoneyreportconfigtab3decl.ui b/kmymoney2/widgets/kmymoneyreportconfigtab3decl.ui
new file mode 100644
index 0000000..2284c1f
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyreportconfigtab3decl.ui
@@ -0,0 +1,437 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>kMyMoneyReportConfigTab3Decl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>kMyMoneyReportConfigTab3Decl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>617</width>
+ <height>267</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="caption">
+ <string>Rows/Columns Tab</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string></string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;p&gt;On this tab, you configure how you'd like the rows and columns to be selected and organized.&lt;/p&gt;</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout11</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Organize by:</string>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>Categories</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Top Categories</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Payees</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Accounts</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Top Accounts</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Month</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Week</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_comboOrganizeBy</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Choose how to group the transactions in this report&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer10_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>358</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>buttonGroup1</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Show Columns</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Choose which columns should be shown in the report.&lt;/p&gt;&lt;p&gt;The date and transaction amount are always shown.&lt;/p&gt;</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <widget class="QCheckBox" row="1" column="1">
+ <property name="name">
+ <cstring>m_checkMemo</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Memo</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Select this option to show the Memo column&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="3">
+ <property name="name">
+ <cstring>m_checkShares</cstring>
+ </property>
+ <property name="text">
+ <string>Shares</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Select this option to show the Shares column for investments&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="3">
+ <property name="name">
+ <cstring>m_checkPrice</cstring>
+ </property>
+ <property name="text">
+ <string>Price</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Select this option to show the Price column for investments&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="2">
+ <property name="name">
+ <cstring>m_checkReconciled</cstring>
+ </property>
+ <property name="text">
+ <string>Reconciled</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Select this option to show the Reconciled column&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="2">
+ <property name="name">
+ <cstring>m_checkAccount</cstring>
+ </property>
+ <property name="text">
+ <string>Account</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Select this option to show the Account column&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0">
+ <property name="name">
+ <cstring>m_checkNumber</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Number</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Select this option to show the Number column&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="0">
+ <property name="name">
+ <cstring>m_checkPayee</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Payee</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Select this option to show the Payee column&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="1">
+ <property name="name">
+ <cstring>m_checkCategory</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Category</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Select this option to show the Category column&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="4">
+ <property name="name">
+ <cstring>m_checkAction</cstring>
+ </property>
+ <property name="text">
+ <string>Action</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Select this option to show the Action column&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="4">
+ <property name="name">
+ <cstring>m_checkBalance</cstring>
+ </property>
+ <property name="text">
+ <string>Balance</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Select this option to show the Running balance column&lt;/p&gt;</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer10</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>205</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout10</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox" row="2" column="0">
+ <property name="name">
+ <cstring>m_checkLoans</cstring>
+ </property>
+ <property name="text">
+ <string>Include only Loan accounts</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="0">
+ <property name="name">
+ <cstring>m_checkInvestments</cstring>
+ </property>
+ <property name="text">
+ <string>Include only Investment accounts</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Check this box to include only those categories which have been marked to "Include on Tax Reports"&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="1">
+ <property name="name">
+ <cstring>m_checkHideSplitDetails</cstring>
+ </property>
+ <property name="text">
+ <string>Hide Split Transaction Details</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Do not display the individual transactions that make up a split transaction</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0">
+ <property name="name">
+ <cstring>m_checkTax</cstring>
+ </property>
+ <property name="text">
+ <string>Include only Tax categories</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Check this box to include only those categories which have been marked to "Include on Tax Reports"&lt;/p&gt;</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>m_checkTax</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>m_checkInvestments</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>m_checkTax</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>m_checkLoans</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>m_checkInvestments</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>m_checkTax</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>m_checkInvestments</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>m_checkLoans</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>m_checkLoans</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>m_checkTax</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>m_checkLoans</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>m_checkInvestments</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/widgets/kmymoneyreportconfigtabchartdecl.ui b/kmymoney2/widgets/kmymoneyreportconfigtabchartdecl.ui
new file mode 100644
index 0000000..2aa9126
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyreportconfigtabchartdecl.ui
@@ -0,0 +1,214 @@
+<!DOCTYPE UI><UI version="3.0">
+<class>kMyMoneyReportConfigTabChartDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>kMyMoneyReportConfigTabChartDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>174</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Chart Tab</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string></string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;p&gt;On this tab, you configure the chart drawn forthis report.&lt;/p&gt;</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Chart Type</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Select what form you would like the chart to be drawn as.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>Line</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Bar</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Stacked Bar</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Pie</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Ring</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_comboType</cstring>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>121</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_checkGridLines</cstring>
+ </property>
+ <property name="text">
+ <string>Show grid lines</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Select this option to show horizontal and vertical grid lines on the chart.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_checkValues</cstring>
+ </property>
+ <property name="text">
+ <string>Draw values on chart</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Select this option to draw the numeric values for data points next to their plot location.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_checkShowChart</cstring>
+ </property>
+ <property name="text">
+ <string>Show as chart by default</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Select this option to cause the report to be shown as a chart when you first open the report. Otherwise, it will come up as a text report.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel6</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Line width</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>&lt;p&gt;Select what width should be used to draw the line on the chart&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>m_lineWidth</cstring>
+ </property>
+ <property name="maxValue">
+ <number>10</number>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>121</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer15</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/widgets/kmymoneyreportcontroldecl.ui b/kmymoney2/widgets/kmymoneyreportcontroldecl.ui
new file mode 100644
index 0000000..2d0e0e3
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyreportcontroldecl.ui
@@ -0,0 +1,150 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>kMyMoneyReportControlDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>kMyMoneyReportControlDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>33</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>ReportControl</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>1</number>
+ </property>
+ <property name="spacing">
+ <number>1</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonChart</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>75</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Chart</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Show the chart version of this report</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonConfigure</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>75</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Configure</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Configure this report</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonNew</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>75</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>New</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Create a new report based on this one</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCopy</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>75</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Copy</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Copy this report to the clipboard</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonExport</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>75</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Export</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Export this report as an HTML or CSV file</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonDelete</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>75</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Delete</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Permanently delete this report</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonClose</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>75</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Close</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Close this window</string>
+ </property>
+ </widget>
+ </hbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/widgets/kmymoneyscheduledcalendar.cpp b/kmymoney2/widgets/kmymoneyscheduledcalendar.cpp
new file mode 100644
index 0000000..6c17a33
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyscheduledcalendar.cpp
@@ -0,0 +1,92 @@
+/***************************************************************************
+ kmymoneyscheduledcalendar.cpp - description
+ -------------------
+ begin : Wed Jul 2 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qpushbutton.h>
+#include <qkeysequence.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+#include <klocale.h>
+#include <kpopupmenu.h>
+#include <kmessagebox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include "../widgets/kmymoneyscheduledcalendar.h"
+#include "../mymoney/mymoneyfile.h"
+
+kMyMoneyScheduledCalendar::kMyMoneyScheduledCalendar(QWidget *parent, const char *name )
+ : kMyMoneyCalendar(parent,name)
+{
+ QPushButton *pb1 = new QPushButton(i18n("Select Schedules"), this);
+
+ kpopupmenu = new KPopupMenu(this);
+ kpopupmenu->setCheckable(true);
+ kpopupmenu->insertItem(i18n("Bills"), 0);
+ kpopupmenu->insertItem(i18n("Deposits"), 1);
+ kpopupmenu->insertItem(i18n("Transfers"), 2);
+ kpopupmenu->connectItem(0, this, SLOT(slotSetViewBills()));
+ kpopupmenu->connectItem(1, this, SLOT(slotSetViewDeposits()));
+ kpopupmenu->connectItem(2, this, SLOT(slotSetViewTransfers()));
+ kpopupmenu->setItemChecked(0, true);
+ kpopupmenu->setItemChecked(1, true);
+ kpopupmenu->setItemChecked(2, true);
+ pb1->setPopup(kpopupmenu);
+
+ m_scheduledDateTable = new kMyMoneyScheduledDateTbl(this);
+ setDateTable((kMyMoneyDateTbl*)m_scheduledDateTable);
+
+ setUserButton1(true, pb1);
+
+ init( QDate::currentDate() );
+
+ connect(m_scheduledDateTable, SIGNAL(enterClicked(const MyMoneySchedule&, const QDate&)),
+ this, SIGNAL(enterClicked(const MyMoneySchedule&, const QDate&)));
+ connect(m_scheduledDateTable, SIGNAL(skipClicked(const MyMoneySchedule&, const QDate&)),
+ this, SIGNAL(skipClicked(const MyMoneySchedule&, const QDate&)));
+}
+
+kMyMoneyScheduledCalendar::~kMyMoneyScheduledCalendar()
+{
+}
+
+void kMyMoneyScheduledCalendar::slotSetViewBills()
+{
+ kpopupmenu->setItemChecked(0, ((kpopupmenu->isItemChecked(0)) ? false : true));
+ m_scheduledDateTable->filterBills(!kpopupmenu->isItemChecked(0));
+}
+
+void kMyMoneyScheduledCalendar::slotSetViewDeposits()
+{
+ kpopupmenu->setItemChecked(1, ((kpopupmenu->isItemChecked(1)) ? false : true));
+ m_scheduledDateTable->filterDeposits(!kpopupmenu->isItemChecked(1));
+}
+
+void kMyMoneyScheduledCalendar::slotSetViewTransfers()
+{
+ kpopupmenu->setItemChecked(2, ((kpopupmenu->isItemChecked(2)) ? false : true));
+ m_scheduledDateTable->filterTransfers(!kpopupmenu->isItemChecked(2));
+}
+
+#include "kmymoneyscheduledcalendar.moc"
diff --git a/kmymoney2/widgets/kmymoneyscheduledcalendar.h b/kmymoney2/widgets/kmymoneyscheduledcalendar.h
new file mode 100644
index 0000000..1543b5a
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyscheduledcalendar.h
@@ -0,0 +1,87 @@
+/***************************************************************************
+ kmymoneyscheduledcalendar.h - description
+ -------------------
+ begin : Wed Jul 2 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYSCHEDULEDCALENDAR_H
+#define KMYMONEYSCHEDULEDCALENDAR_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../widgets/kmymoneycalendar.h"
+#include "../widgets/kmymoneyscheduleddatetbl.h"
+
+class KPopupMenu;
+class kMyMoneyDateTbl;
+
+/**
+ * A representation of a calendar.
+ *
+ * Uses the base class kMyMoneyCalendar to actually render
+ * the calendar.
+ *
+ * @author Michael Edwardes 2003
+ *
+**/
+class kMyMoneyScheduledCalendar : public kMyMoneyCalendar {
+ Q_OBJECT
+
+public:
+ /**
+ * Standard constructor.
+ **/
+ kMyMoneyScheduledCalendar(QWidget *parent=0, const char *name=0);
+
+ /**
+ * Standard destructor.
+ **/
+ ~kMyMoneyScheduledCalendar();
+
+ /**
+ * Dynamically set the Date Table
+ **/
+ void setDateTable(kMyMoneyDateTbl* tbl) { table = tbl; }
+
+ void refresh() { m_scheduledDateTable->refresh(); }
+
+ void setFilterAccounts(const QStringList& list) { m_scheduledDateTable->setFilterAccounts(list); }
+
+signals:
+ void enterClicked(const MyMoneySchedule&, const QDate&);
+ void skipClicked(const MyMoneySchedule&, const QDate&);
+
+protected slots:
+ void slotSetViewBills();
+ void slotSetViewDeposits();
+ void slotSetViewTransfers();
+
+private:
+ KPopupMenu* kpopupmenu;
+ kMyMoneyScheduledDateTbl *m_scheduledDateTable;
+};
+
+#endif
diff --git a/kmymoney2/widgets/kmymoneyscheduleddatetbl.cpp b/kmymoney2/widgets/kmymoneyscheduleddatetbl.cpp
new file mode 100644
index 0000000..870abd5
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyscheduleddatetbl.cpp
@@ -0,0 +1,530 @@
+/***************************************************************************
+ kmymoneyscheduleddatetbl.cpp - description
+ -------------------
+ begin : Thu Jul 3 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+ /****************************************************************************
+ Contains code from the KDateTable class ala kdelibs-3.1.2. Original license:
+
+ This file is part of the KDE libraries
+ Copyright (C) 1997 Tim D. Gilman (tdgilman@best.org)
+ (C) 1998-2001 Mirko Boehm (mirko@kde.org)
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qstring.h>
+#include <qpen.h>
+#include <qpainter.h>
+#include <qdialog.h>
+#include <qdrawutil.h>
+#include <qcursor.h>
+#include <qapplication.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+#include "kdecompat.h"
+#include <kglobal.h>
+#include <kglobalsettings.h>
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#include "kmymoneyscheduleddatetbl.h"
+#include "../mymoney/mymoneyfile.h"
+
+kMyMoneyScheduledDateTbl::kMyMoneyScheduledDateTbl(QWidget *parent, QDate date_, const char* name, WFlags f )
+ : kMyMoneyDateTbl(parent, date_, name, f),
+ m_filterBills(false), m_filterDeposits(false), m_filterTransfers(false)
+{
+ connect(&briefWidget, SIGNAL(enterClicked(const MyMoneySchedule&, const QDate&)), this, SIGNAL(enterClicked(const MyMoneySchedule&, const QDate&)));
+ connect(&briefWidget, SIGNAL(skipClicked(const MyMoneySchedule&, const QDate&)), this, SIGNAL(skipClicked(const MyMoneySchedule&, const QDate&)));
+}
+
+kMyMoneyScheduledDateTbl::~kMyMoneyScheduledDateTbl()
+{
+}
+
+void kMyMoneyScheduledDateTbl::drawCellContents(QPainter *painter, int /*row*/, int /*col*/, const QDate& theDate)
+{
+ QRect rect;
+ QString text;
+ int w=cellWidth();
+ int h=cellHeight();
+ QPen pen;
+ QBrush brushBlue(KGlobalSettings::activeTitleColor());
+ QBrush brushLightblue(KGlobalSettings::baseColor());
+ QFont font=KGlobalSettings::generalFont();
+ MyMoneyFile *file = MyMoneyFile::instance();
+
+ // -----
+ font.setPointSize(fontsize);
+ QFont fontLarge(font);
+ QFont fontSmall(font);
+ fontLarge.setPointSize(fontsize*2);
+ fontSmall.setPointSize(fontsize-1);
+
+ painter->setFont(font);
+
+
+ if (m_type == MONTHLY)
+ {
+ if (theDate.month() != date.month())
+ {
+ painter->setFont(fontSmall);
+ pen = lightGray;
+ }
+ else
+ {
+ pen = gray;
+ }
+
+ if (theDate == date)
+ {
+ if (hasFocus())
+ { // draw the currently selected date
+ painter->setPen(KGlobalSettings::highlightColor());
+ painter->setBrush(KGlobalSettings::highlightColor());
+ pen=white;
+ } else {
+ painter->setPen(KGlobalSettings::calculateAlternateBackgroundColor(KGlobalSettings::highlightColor()));
+ painter->setBrush(KGlobalSettings::calculateAlternateBackgroundColor(KGlobalSettings::highlightColor()));
+ pen=white;
+ }
+ } else {
+ painter->setBrush(KGlobalSettings::baseColor());
+ painter->setPen(KGlobalSettings::baseColor());
+ }
+ painter->drawRect(0, 0, w, h);
+ painter->setPen(pen);
+ text = QString::number(theDate.day());
+ addDayPostfix(text);
+ painter->drawText(0, 0, w-2, h, AlignRight, text, -1, &rect);
+
+ MyMoneyFile *file = MyMoneyFile::instance();
+ QValueList<MyMoneySchedule> schedules;
+ try
+ {
+
+ // Honour the filter.
+ int scheduleTypes=0;
+ int scheduleOcurrences=0;
+ int schedulePaymentTypes=0;
+
+ scheduleOcurrences |= MyMoneySchedule::OCCUR_ANY;
+ schedulePaymentTypes |= MyMoneySchedule::STYPE_ANY;
+
+ if (!m_filterBills)
+ {
+ scheduleTypes |= MyMoneySchedule::TYPE_BILL;
+ }
+ if (!m_filterDeposits)
+ {
+ scheduleTypes |= MyMoneySchedule::TYPE_DEPOSIT;
+ }
+ if (!m_filterTransfers)
+ {
+ scheduleTypes |= MyMoneySchedule::TYPE_TRANSFER;
+ }
+
+ schedules = file->scheduleListEx( scheduleTypes,
+ scheduleOcurrences,
+ schedulePaymentTypes,
+ theDate,
+ m_filterAccounts);
+ }
+ catch ( MyMoneyException* e)
+ {
+ // SAfe to ignore here, cause no schedules might exist
+ // for the selected account
+ delete e;
+ }
+
+ if (schedules.count() >= 1)
+ {
+ QValueList<MyMoneySchedule>::Iterator iter;
+ bool anyOverdue=false;
+ for (iter=schedules.begin(); iter!=schedules.end(); ++iter)
+ {
+ MyMoneySchedule schedule = *iter;
+ if (theDate < QDate::currentDate())
+ {
+ if (schedule.isOverdue())
+ {
+ anyOverdue = true;
+ break; // out early
+ }
+ }
+ }
+
+ if (anyOverdue)
+ painter->setPen(red);
+ else
+ painter->setPen(darkGray);
+
+ painter->setFont(fontLarge);
+ painter->drawText(0, 0, w, h, AlignCenter, QString::number(schedules.count()),
+ -1, &rect);
+ }
+
+ painter->setPen(lightGray);
+ painter->setBrush(Qt::NoBrush);
+ painter->drawRect(0, 0, w, h);
+ }
+ else if (m_type == WEEKLY)
+ {
+ // TODO: Handle other start weekdays than Monday
+ if (theDate == date)
+ {
+ painter->setBrush(KGlobalSettings::highlightColor());
+ }
+ else
+ {
+ painter->setBrush(KGlobalSettings::baseColor());
+ painter->setPen(KGlobalSettings::baseColor());
+ }
+
+ painter->setPen(lightGray);
+ painter->drawRect(0, 0, w, h);
+
+ text = QString::number(theDate.day());
+ addDayPostfix(text);
+
+ painter->drawText(0, 0, w-2, h, AlignRight, QDate::shortDayName(theDate.dayOfWeek()) + " " + text, -1, &rect);
+
+ QValueList<MyMoneySchedule> billSchedules;
+ QValueList<MyMoneySchedule> depositSchedules;
+ QValueList<MyMoneySchedule> transferSchedules;
+ try
+ {
+ text = QString();
+
+ if (!m_filterBills)
+ {
+ billSchedules = file->scheduleListEx( MyMoneySchedule::TYPE_BILL,
+ MyMoneySchedule::OCCUR_ANY,
+ MyMoneySchedule::STYPE_ANY,
+ theDate,
+ m_filterAccounts);
+
+ if (billSchedules.count() >= 1)
+ {
+ text += i18n("%1 Bills.").arg(QString::number(billSchedules.count()));
+ }
+ }
+
+ if (!m_filterDeposits)
+ {
+ depositSchedules = file->scheduleListEx( MyMoneySchedule::TYPE_DEPOSIT,
+ MyMoneySchedule::OCCUR_ANY,
+ MyMoneySchedule::STYPE_ANY,
+ theDate,
+ m_filterAccounts);
+
+ if (depositSchedules.count() >= 1)
+ {
+ if(!text.isEmpty())
+ text += " ";
+ text += i18n("%1 Deposits.").arg(QString::number(depositSchedules.count()));
+ }
+ }
+
+ if (!m_filterTransfers)
+ {
+ transferSchedules = file->scheduleListEx( MyMoneySchedule::TYPE_TRANSFER,
+ MyMoneySchedule::OCCUR_ANY,
+ MyMoneySchedule::STYPE_ANY,
+ theDate,
+ m_filterAccounts);
+
+ if (transferSchedules.count() >= 1)
+ {
+ if(!text.isEmpty())
+ text += " ";
+ text += i18n("%1 Transfers.").arg(QString::number(transferSchedules.count()));
+ }
+ }
+ }
+ catch (MyMoneyException* e)
+ {
+ // SAfe to ignore here, cause no schedules might exist
+ // for the selected account
+ delete e;
+ }
+
+ bool anyOverdue=false;
+ QValueList<MyMoneySchedule>::Iterator iter;
+ for (iter=transferSchedules.begin(); iter!=transferSchedules.end(); ++iter)
+ {
+ MyMoneySchedule schedule = *iter;
+ if (theDate < QDate::currentDate())
+ {
+ if (schedule.isOverdue())
+ {
+ anyOverdue = true;
+ break; // out early
+ }
+ }
+ }
+
+ if (!anyOverdue)
+ {
+ for (iter=depositSchedules.begin(); iter!=depositSchedules.end(); ++iter)
+ {
+ MyMoneySchedule schedule = *iter;
+ if (theDate < QDate::currentDate())
+ {
+ if (schedule.isOverdue())
+ {
+ anyOverdue = true;
+ break; // out early
+ }
+ }
+ }
+
+ if (!anyOverdue)
+ {
+ for (iter=billSchedules.begin(); iter!=billSchedules.end(); ++iter)
+ {
+ MyMoneySchedule schedule = *iter;
+ if (theDate < QDate::currentDate())
+ {
+ if (schedule.isOverdue())
+ {
+ anyOverdue = true;
+ break; // out early
+ }
+ }
+ }
+ }
+ }
+
+ if (anyOverdue)
+ painter->setPen(red);
+ else
+ painter->setPen(darkGray);
+
+ painter->setFont(fontLarge);
+ painter->drawText(0, 0, w, h, AlignCenter, text,
+ -1, &rect);
+ }
+ else if (m_type == QUARTERLY)
+ {
+ painter->setBrush(KGlobalSettings::baseColor());
+
+ painter->setPen(lightGray);
+ painter->drawRect(0, 0, w, h);
+ }
+}
+
+void kMyMoneyScheduledDateTbl::addDayPostfix(QString& text)
+{
+ int d = text.toInt();
+
+ if (d >= 1 && d <= 31)
+ {
+ QStringList postfixList = QStringList::split("-", i18n("st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-th-th-th-th-th-st"), true);
+ text += postfixList[d-1];
+ }
+}
+
+void kMyMoneyScheduledDateTbl::refresh()
+{
+ repaintContents(false);
+}
+
+void kMyMoneyScheduledDateTbl::contentsMouseMoveEvent(QMouseEvent* e)
+{
+ int row, col, pos;
+ QPoint mouseCoord;
+
+ if (isActiveWindow() || briefWidget.isVisible())
+ {
+ mouseCoord = e->pos();
+ row = rowAt(mouseCoord.y());
+ col = columnAt(mouseCoord.x());
+ if (row<1 || col<0)
+ {
+ return;
+ }
+
+ #if KDE_VERSION < 310
+ int firstWeekDay = KGlobal::locale()->weekStartsMonday() ? 1 : 0;
+ #else
+ int firstWeekDay = KGlobal::locale()->weekStartDay();
+ #endif
+
+ QDate drawDate(date);
+ QString text;
+
+ if (m_type == MONTHLY)
+ {
+ pos=7*(row-1)+col;
+ if ( firstWeekDay < 4 )
+ pos += firstWeekDay;
+ else
+ pos += firstWeekDay - 7;
+
+ if (pos<firstday || (firstday+numdays<=pos))
+ { // we are either
+ // painting a day of the previous month or
+ // painting a day of the following month
+
+ if (pos<firstday)
+ { // previous month
+ drawDate = drawDate.addMonths(-1);
+ text.setNum(numDaysPrevMonth+pos-firstday+1);
+ drawDate.setYMD(drawDate.year(), drawDate.month(), text.toInt());
+ } else { // following month
+ drawDate = drawDate.addMonths(1);
+ text.setNum(pos-firstday-numdays+1);
+ drawDate.setYMD(drawDate.year(), drawDate.month(), text.toInt());
+ }
+ } else { // paint a day of the current month
+ text.setNum(pos-firstday+1);
+ drawDate.setYMD(drawDate.year(), drawDate.month(), text.toInt());
+ }
+ }
+ else if (m_type == WEEKLY)
+ {
+ // TODO: Handle other start weekdays than Monday
+ text = QDate::shortDayName(row);
+ text += " ";
+
+ int dayOfWeek = date.dayOfWeek();
+ int diff;
+
+ if (row < dayOfWeek)
+ {
+ diff = -(dayOfWeek - row);
+ }
+ else
+ {
+ diff = row - dayOfWeek;
+ }
+
+ drawDate = date.addDays(diff);
+ }
+ else if (m_type == QUARTERLY)
+ {
+ }
+
+ m_drawDateOrig = drawDate;
+ MyMoneyFile *file = MyMoneyFile::instance();
+ QValueList<MyMoneySchedule> schedules;
+
+ try
+ {
+ int types=0;
+
+ if (!m_filterBills)
+ {
+ types |= MyMoneySchedule::TYPE_BILL;
+ }
+
+ if (!m_filterDeposits)
+ {
+ types |= MyMoneySchedule::TYPE_DEPOSIT;
+ }
+
+ if (!m_filterTransfers)
+ {
+ types |= MyMoneySchedule::TYPE_TRANSFER;
+ }
+
+
+ schedules = file->scheduleListEx( types,
+ MyMoneySchedule::OCCUR_ANY,
+ MyMoneySchedule::STYPE_ANY,
+ drawDate,
+ m_filterAccounts);
+ }
+ catch ( MyMoneyException* e)
+ {
+ // SAfe to ignore here, cause no schedules might exist
+ // for the selected account
+ delete e;
+ }
+
+ if (schedules.count() >= 1)
+ {
+ briefWidget.setSchedules(schedules, drawDate);
+
+ int h = briefWidget.height();
+ int w = briefWidget.width();
+
+ // Take off five pixels so the mouse cursor
+ // will be over the widget
+ QPoint p = QCursor::pos();
+ if (p.y() + h > QApplication::desktop()->height())
+ {
+ p.setY(p.y() - (h-5));
+ }
+ else
+ p.setY(p.y() - 5);
+
+ if (p.x() + w > QApplication::desktop()->width())
+ {
+ p.setX(p.x() - (w-5));
+ }
+ else
+ p.setX(p.x() - 5);
+
+ briefWidget.move(p);
+ briefWidget.show();
+ }
+ else
+ {
+ briefWidget.hide();
+ }
+ }
+}
+
+void kMyMoneyScheduledDateTbl::filterBills(bool enable)
+{
+ m_filterBills = enable;
+ repaintContents(false);
+}
+
+void kMyMoneyScheduledDateTbl::filterDeposits(bool enable)
+{
+ m_filterDeposits = enable;
+ repaintContents(false);
+}
+
+void kMyMoneyScheduledDateTbl::filterTransfers(bool enable)
+{
+ m_filterTransfers = enable;
+ repaintContents(false);
+}
+
+#include "kmymoneyscheduleddatetbl.moc"
diff --git a/kmymoney2/widgets/kmymoneyscheduleddatetbl.h b/kmymoney2/widgets/kmymoneyscheduleddatetbl.h
new file mode 100644
index 0000000..5985a6b
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyscheduleddatetbl.h
@@ -0,0 +1,73 @@
+/***************************************************************************
+ kmymoneyscheduleddatetbl.h - description
+ -------------------
+ begin : Thu Jul 3 2003
+ copyright : (C) 2000-2003 by Michael Edwardes
+ email : mte@users.sourceforge.net
+ Javier Campos Morales <javi_c@users.sourceforge.net>
+ Felix Rodriguez <frodriguez@users.sourceforge.net>
+ John C <thetacoturtle@users.sourceforge.net>
+ Thomas Baumgart <ipwizard@users.sourceforge.net>
+ Kevin Tambascio <ktambascio@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+#ifndef KMYMONEYSCHEDULEDDATETBL_H
+#define KMYMONEYSCHEDULEDDATETBL_H
+
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "../widgets/kmymoneydatetbl.h"
+#include "../widgets/kmymoneybriefschedule.h"
+#include "../mymoney/mymoneyscheduled.h"
+
+/**
+ * @author Michael Edwardes
+ */
+
+class kMyMoneyScheduledDateTbl : public kMyMoneyDateTbl
+{
+ Q_OBJECT
+public:
+ kMyMoneyScheduledDateTbl(QWidget *parent=0,
+ QDate date=QDate::currentDate(),
+ const char* name=0, WFlags f=0);
+
+ ~kMyMoneyScheduledDateTbl();
+ void refresh();
+ void filterBills(bool enable);
+ void filterDeposits(bool enable);
+ void filterTransfers(bool enable);
+ void setFilterAccounts(const QStringList& list) { m_filterAccounts = list; repaintContents(false); }
+
+signals:
+ void enterClicked(const MyMoneySchedule&, const QDate&);
+ void skipClicked(const MyMoneySchedule&, const QDate&);
+
+protected:
+ void drawCellContents(QPainter *painter, int row, int col, const QDate& theDate);
+ void addDayPostfix(QString& text);
+ void contentsMouseMoveEvent(QMouseEvent* e);
+
+private:
+ bool m_filterBills, m_filterDeposits, m_filterTransfers;
+ QStringList m_filterAccounts;
+ KMyMoneyBriefSchedule briefWidget;
+};
+
+#endif
diff --git a/kmymoney2/widgets/kmymoneyselector.cpp b/kmymoney2/widgets/kmymoneyselector.cpp
new file mode 100644
index 0000000..6ae07ca
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyselector.cpp
@@ -0,0 +1,709 @@
+/***************************************************************************
+ kmymoneyselector.cpp
+ -------------------
+ begin : Thu Jun 29 2006
+ copyright : (C) 2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlayout.h>
+#include <qheader.h>
+#include <qtimer.h>
+#include <qstyle.h>
+#include <qregexp.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/kmymoneyselector.h>
+#include <kmymoney/kmymoneylistviewitem.h>
+#include <kmymoney/kmymoneychecklistitem.h>
+
+#include "../kmymoneyglobalsettings.h"
+
+KMyMoneySelector::KMyMoneySelector(QWidget *parent, const char *name, QWidget::WFlags flags) :
+ QWidget(parent, name, flags)
+{
+ m_selMode = QListView::Single;
+
+ m_listView = new KListView(this);
+ // don't show horizontal scroll bar
+ m_listView->setHScrollBarMode(QScrollView::AlwaysOff);
+
+ m_listView->setSorting(-1);
+
+ if(parent) {
+ setFocusProxy(parent->focusProxy());
+ m_listView->setFocusProxy(parent->focusProxy());
+ }
+
+ m_listView->setAllColumnsShowFocus(true);
+
+ m_layout = new QHBoxLayout( this, 0, 6);
+
+ m_listView->addColumn( "Hidden" );
+ m_listView->header()->hide();
+ m_listView->header()->setStretchEnabled(true, -1);
+ m_listView->header()->adjustHeaderSize();
+
+ m_layout->addWidget( m_listView );
+
+ // force init
+ m_selMode = QListView::Multi;
+ setSelectionMode(QListView::Single);
+
+ connect(m_listView, SIGNAL(rightButtonPressed(QListViewItem* , const QPoint&, int)), this, SLOT(slotListRightMouse(QListViewItem*, const QPoint&, int)));
+}
+
+KMyMoneySelector::~KMyMoneySelector()
+{
+}
+
+void KMyMoneySelector::clear(void)
+{
+ m_listView->clear();
+ m_visibleItem = 0;
+}
+
+void KMyMoneySelector::setSelectionMode(const QListView::SelectionMode mode)
+{
+ if(m_selMode != mode) {
+ m_selMode = mode;
+ clear();
+
+ // make sure, it's either Multi or Single
+ if(mode != QListView::Multi) {
+ m_selMode = QListView::Single;
+ connect(m_listView, SIGNAL(selectionChanged(void)), this, SIGNAL(stateChanged(void)));
+ connect(m_listView, SIGNAL(executed(QListViewItem*)), this, SLOT(slotItemSelected(QListViewItem*)));
+ } else {
+ disconnect(m_listView, SIGNAL(selectionChanged(void)), this, SIGNAL(stateChanged(void)));
+ disconnect(m_listView, SIGNAL(executed(QListViewItem*)), this, SLOT(slotItemSelected(QListViewItem*)));
+ }
+ }
+ QWidget::update();
+}
+
+void KMyMoneySelector::slotItemSelected(QListViewItem *item)
+{
+ if(m_selMode == QListView::Single) {
+ KMyMoneyListViewItem* l_item = dynamic_cast<KMyMoneyListViewItem*>(item);
+ if(l_item && l_item->isSelectable()) {
+ emit itemSelected(l_item->id());
+ }
+ }
+}
+
+QListViewItem* KMyMoneySelector::newItem(const QString& name, QListViewItem* after, const QString& key, const QString& id, QCheckListItem::Type type)
+{
+ QListViewItem* item;
+ if(after)
+ item = new KMyMoneyCheckListItem(m_listView, after, name, key, id, type);
+ else
+ item = new KMyMoneyCheckListItem(m_listView, name, key, id, type);
+
+ item->setSelectable(!id.isEmpty());
+ item->setOpen(true);
+ return item;
+}
+
+QListViewItem* KMyMoneySelector::newItem(const QString& name, const QString& key, const QString& id, QCheckListItem::Type type)
+{
+ return newItem(name, 0, key, id, type);
+}
+
+QListViewItem* KMyMoneySelector::newTopItem(const QString& name, const QString& key, const QString& id)
+{
+ QListViewItem* p;
+
+ if(m_selMode == QListView::Multi) {
+ KMyMoneyCheckListItem* q = new KMyMoneyCheckListItem(m_listView, name, key, id);
+ connect(q, SIGNAL(stateChanged(bool)), this, SIGNAL(stateChanged(void)));
+ p = static_cast<QListViewItem*> (q);
+
+ } else {
+ KMyMoneyListViewItem* q = new KMyMoneyListViewItem(m_listView, name, key, id);
+ p = static_cast<QListViewItem*> (q);
+ }
+
+ return p;
+}
+
+QListViewItem* KMyMoneySelector::newItem(QListViewItem* parent, const QString& name, const QString& key, const QString& id)
+{
+ QListViewItem* p;
+
+ if(m_selMode == QListView::Multi) {
+ KMyMoneyCheckListItem* q = new KMyMoneyCheckListItem(parent, name, key, id);
+ connect(q, SIGNAL(stateChanged(bool)), this, SIGNAL(stateChanged(void)));
+ p = static_cast<QListViewItem*> (q);
+
+ } else {
+ KMyMoneyListViewItem* q = new KMyMoneyListViewItem(parent, name, key, id);
+ p = static_cast<QListViewItem*> (q);
+ }
+
+ return p;
+}
+
+void KMyMoneySelector::protectItem(const QString& itemId, const bool protect)
+{
+ QListViewItemIterator it(m_listView, QListViewItemIterator::Selectable);
+ QListViewItem* it_v;
+ KMyMoneyListViewItem* it_l;
+ KMyMoneyCheckListItem* it_c;
+
+ // scan items
+ while((it_v = it.current()) != 0) {
+ it_l = dynamic_cast<KMyMoneyListViewItem*>(it_v);
+ if(it_l) {
+ if(it_l->id() == itemId) {
+ it_l->setSelectable(!protect);
+ break;
+ }
+ } else {
+ it_c = dynamic_cast<KMyMoneyCheckListItem*>(it_v);
+ if(it_c) {
+ if(it_c->id() == itemId) {
+ it_c->setSelectable(!protect);
+ break;
+ }
+ }
+ }
+ ++it;
+ }
+}
+
+QListViewItem* KMyMoneySelector::item(const QString& id) const
+{
+ QListViewItemIterator it(m_listView, QListViewItemIterator::Selectable);
+ QListViewItem* it_v;
+ KMyMoneyListViewItem* it_l;
+ KMyMoneyCheckListItem* it_c;
+
+ while((it_v = it.current()) != 0) {
+ it_l = dynamic_cast<KMyMoneyListViewItem*>(it_v);
+ if(it_l) {
+ if(it_l->id() == id)
+ break;
+ } else {
+ it_c = dynamic_cast<KMyMoneyCheckListItem*>(it_v);
+ if(it_c->id() == id)
+ break;
+ }
+ ++it;
+ }
+ return it_v;
+}
+
+int KMyMoneySelector::optimizedWidth(void) const
+{
+ QListViewItemIterator it(m_listView, QListViewItemIterator::Selectable);
+ QListViewItem* it_v;
+ KMyMoneyListViewItem* it_l;
+ KMyMoneyCheckListItem* it_c;
+
+ // scan items
+ int w = 0;
+#ifndef KMM_DESIGNER
+ QFontMetrics fm( KMyMoneyGlobalSettings::listCellFont());
+#else
+ QFontMetrics fm( font() );
+#endif
+ while((it_v = it.current()) != 0) {
+ it_l = dynamic_cast<KMyMoneyListViewItem*>(it_v);
+ int nw = 0;
+ if(it_l) {
+ nw = it_l->width(fm, m_listView, 0);
+ } else {
+ it_c = dynamic_cast<KMyMoneyCheckListItem*>(it_v);
+ if(it_c) {
+ nw = it_c->width(fm, m_listView, 0);
+ }
+ }
+ if(nw > w)
+ w = nw;
+ ++it;
+ }
+ return w;
+}
+
+void KMyMoneySelector::setOptimizedWidth(void)
+{
+ int w = optimizedWidth();
+
+ m_listView->setMinimumWidth(w+30);
+ m_listView->setMaximumWidth(w+30);
+ m_listView->setColumnWidth(0, w+28);
+}
+
+bool KMyMoneySelector::allItemsSelected(void) const
+{
+ QListViewItem* it_v;
+
+ if(m_selMode == QListView::Single)
+ return false;
+
+ for(it_v = m_listView->firstChild(); it_v != 0; it_v = it_v->nextSibling()) {
+ if(it_v->rtti() == 1) {
+ QCheckListItem* it_c = dynamic_cast<QCheckListItem*>(it_v);
+ if(it_c->type() == QCheckListItem::CheckBox) {
+ if(!(it_c->isOn() && allItemsSelected(it_v)))
+ return false;
+ } else {
+ if(!allItemsSelected(it_v))
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+bool KMyMoneySelector::allItemsSelected(const QListViewItem *item) const
+{
+ QListViewItem* it_v;
+
+ for(it_v = item->firstChild(); it_v != 0; it_v = it_v->nextSibling()) {
+ if(it_v->rtti() == 1) {
+ QCheckListItem* it_c = static_cast<QCheckListItem*>(it_v);
+ if(!(it_c->isOn() && allItemsSelected(it_v)))
+ return false;
+ }
+ }
+ return true;
+}
+
+void KMyMoneySelector::removeItem(const QString& id)
+{
+ QListViewItem* it_v;
+ QListViewItemIterator it;
+
+ it = QListViewItemIterator(m_listView);
+ while((it_v = it.current()) != 0) {
+ if(it_v->rtti() == 1) {
+ KMyMoneyCheckListItem* it_c = dynamic_cast<KMyMoneyCheckListItem*>(it_v);
+ if(it_c->type() == QCheckListItem::CheckBox) {
+ if(id == it_c->id()) {
+ if(it_c->firstChild()) {
+ it_c->setSelectable(false);
+ } else {
+ delete it_c;
+ }
+ }
+ }
+ } else if(it_v->rtti() == 0) {
+ KMyMoneyListViewItem* it_c = dynamic_cast<KMyMoneyListViewItem*>(it_v);
+ if(id == it_c->id()) {
+ if(it_c->firstChild()) {
+ it_c->setSelectable(false);
+ } else {
+ delete it_c;
+ }
+ }
+ }
+ it++;
+ }
+
+ // get rid of top items that just lost the last children (e.g. Favorites)
+ it = QListViewItemIterator(m_listView, QListViewItemIterator::NotSelectable);
+ while((it_v = it.current()) != 0) {
+ if(it_v->rtti() == 1) {
+ KMyMoneyCheckListItem* it_c = dynamic_cast<KMyMoneyCheckListItem*>(it_v);
+ if(it_c->childCount() == 0)
+ delete it_c;
+ }
+ it++;
+ }
+
+ return;
+}
+
+
+void KMyMoneySelector::selectAllItems(const bool state)
+{
+ QListViewItem* it_v;
+
+ for(it_v = m_listView->firstChild(); it_v != 0; it_v = it_v->nextSibling()) {
+ if(it_v->rtti() == 1) {
+ QCheckListItem* it_c = dynamic_cast<QCheckListItem*>(it_v);
+ if(it_c->type() == QCheckListItem::CheckBox) {
+ it_c->setOn(state);
+ }
+ selectAllSubItems(it_v, state);
+ }
+ }
+ emit stateChanged();
+}
+
+void KMyMoneySelector::selectItems(const QStringList& itemList, const bool state)
+{
+ QListViewItem* it_v;
+
+ for(it_v = m_listView->firstChild(); it_v != 0; it_v = it_v->nextSibling()) {
+ if(it_v->rtti() == 1) {
+ KMyMoneyCheckListItem* it_c = dynamic_cast<KMyMoneyCheckListItem*>(it_v);
+ if(it_c->type() == QCheckListItem::CheckBox && itemList.contains(it_c->id())) {
+ it_c->setOn(state);
+ }
+ selectSubItems(it_v, itemList, state);
+ }
+ }
+ emit stateChanged();
+}
+
+void KMyMoneySelector::selectSubItems(QListViewItem* item, const QStringList& itemList, const bool state)
+{
+ QListViewItem* it_v;
+
+ for(it_v = item->firstChild(); it_v != 0; it_v = it_v->nextSibling()) {
+ if(it_v->rtti() == 1) {
+ KMyMoneyCheckListItem* it_c = dynamic_cast<KMyMoneyCheckListItem*>(it_v);
+ if(it_c->type() == QCheckListItem::CheckBox && itemList.contains(it_c->id())) {
+ it_c->setOn(state);
+ }
+ selectSubItems(it_v, itemList, state);
+ }
+ }
+}
+
+void KMyMoneySelector::selectAllSubItems(QListViewItem* item, const bool state)
+{
+ QListViewItem* it_v;
+
+ for(it_v = item->firstChild(); it_v != 0; it_v = it_v->nextSibling()) {
+ if(it_v->rtti() == 1) {
+ QCheckListItem* it_c = dynamic_cast<QCheckListItem*>(it_v);
+ if(it_c->type() == QCheckListItem::CheckBox) {
+ it_c->setOn(state);
+ }
+ selectAllSubItems(it_v, state);
+ }
+ }
+}
+
+void KMyMoneySelector::selectedItems(QStringList& list) const
+{
+ QListViewItem* it_v;
+
+ list.clear();
+ if(m_selMode == QListView::Single) {
+ KMyMoneyListViewItem* it_c = dynamic_cast<KMyMoneyListViewItem*>(m_listView->selectedItem());
+ if(it_c != 0)
+ list << it_c->id();
+
+ } else {
+ for(it_v = m_listView->firstChild(); it_v != 0; it_v = it_v->nextSibling()) {
+ if(it_v->rtti() == 1) {
+ KMyMoneyCheckListItem* it_c = dynamic_cast<KMyMoneyCheckListItem*>(it_v);
+ if(it_c->type() == QCheckListItem::CheckBox) {
+ if(it_c->isOn())
+ list << (*it_c).id();
+ }
+ selectedItems(list, it_v);
+ }
+ }
+ }
+}
+
+void KMyMoneySelector::selectedItems(QStringList& list, QListViewItem* item) const
+{
+ QListViewItem* it_v;
+
+ for(it_v = item->firstChild(); it_v != 0; it_v = it_v->nextSibling()) {
+ if(it_v->rtti() == 1) {
+ KMyMoneyCheckListItem* it_c = dynamic_cast<KMyMoneyCheckListItem*>(it_v);
+ if(it_c->type() == QCheckListItem::CheckBox) {
+ if(it_c->isOn())
+ list << (*it_c).id();
+ selectedItems(list, it_v);
+ }
+ }
+ }
+}
+
+void KMyMoneySelector::itemList(QStringList& list) const
+{
+ QListViewItemIterator it;
+ QListViewItem* it_v;
+
+ it = QListViewItemIterator(m_listView, QListViewItemIterator::Selectable);
+ while((it_v = it.current()) != 0) {
+ {
+ if(it_v->rtti() == 1) {
+ KMyMoneyCheckListItem* it_c = dynamic_cast<KMyMoneyCheckListItem*>(it_v);
+ if(it_c->type() == QCheckListItem::CheckBox) {
+ list << it_c->id();
+ }
+ } else if(it_v->rtti() == 0) {
+ KMyMoneyListViewItem* it_c = dynamic_cast<KMyMoneyListViewItem*>(it_v);
+ list << it_c->id();
+ }
+ }
+ it++;
+ }
+}
+
+void KMyMoneySelector::setSelected(const QString& id, const bool state)
+{
+ QListViewItemIterator it;
+ QListViewItem* it_v;
+ QListViewItem* it_visible = 0;
+
+ it = QListViewItemIterator(m_listView, QListViewItemIterator::Selectable);
+ while((it_v = it.current()) != 0) {
+ if(it_v->rtti() == 1) {
+ KMyMoneyCheckListItem* it_c = dynamic_cast<KMyMoneyCheckListItem*>(it_v);
+ Q_CHECK_PTR(it_c);
+ if(it_c->type() == QCheckListItem::CheckBox) {
+ if(it_c->id() == id) {
+ it_c->setOn(state);
+ m_listView->setSelected(it_v, true);
+ if(!it_visible)
+ it_visible = it_v;
+ }
+ }
+ } else if(it_v->rtti() == 0) {
+ KMyMoneyListViewItem* it_c = dynamic_cast<KMyMoneyListViewItem*>(it_v);
+ Q_CHECK_PTR(it_c);
+ if(it_c->id() == id) {
+ m_listView->setSelected(it_v, true);
+ if(!it_visible)
+ it_visible = it_v;
+ ensureItemVisible(it_v);
+ return;
+ }
+ }
+ it++;
+ }
+
+ // make sure the first one found is visible
+ if(it_visible)
+ ensureItemVisible(it_visible);
+}
+
+void KMyMoneySelector::ensureItemVisible(const QListViewItem *it_v)
+{
+ // for some reason, I could only use the ensureItemVisible() method
+ // of QListView successfully, after the widget was drawn on the screen.
+ // If called before it had no effect (if the item was not visible).
+ //
+ // The solution was to store the item we wanted to see in a local var
+ // and call QListView::ensureItemVisible() about 10ms later in
+ // the slot slotShowSelected. (ipwizard, 12/29/2003)
+ m_visibleItem = it_v;
+
+ QTimer::singleShot(100, this, SLOT(slotShowSelected()));
+}
+
+void KMyMoneySelector::slotShowSelected(void)
+{
+ if(m_listView && m_visibleItem)
+ m_listView->ensureItemVisible(m_visibleItem);
+}
+
+int KMyMoneySelector::slotMakeCompletion(const QString& _txt)
+{
+ QString txt(QRegExp::escape(_txt));
+ if(KMyMoneyGlobalSettings::stringMatchFromStart() && this->isA("KMyMoneySelector") )
+ txt.prepend('^');
+ return slotMakeCompletion(QRegExp(txt, false));
+}
+
+bool KMyMoneySelector::match(const QRegExp& exp, QListViewItem* item) const
+{
+ return exp.search(item->text(0)) != -1;
+}
+
+int KMyMoneySelector::slotMakeCompletion(const QRegExp& exp)
+{
+ QListViewItemIterator it(m_listView, QListViewItemIterator::Selectable);
+
+ QListViewItem* it_v;
+
+ // The logic used here seems to be awkward. The problem is, that
+ // QListViewItem::setVisible works recursively on all it's children
+ // and grand-children.
+ //
+ // The way out of this is as follows: Make all items visible.
+ // Then go through the list again and perform the checks.
+ // If an item does not have any children (last leaf in the tree view)
+ // perform the check. Then check recursively on the parent of this
+ // leaf that it has no visible children. If that is the case, make the
+ // parent invisible and continue this check with it's parent.
+ while((it_v = it.current()) != 0) {
+ it_v->setVisible(true);
+ ++it;
+ }
+
+ QListViewItem* firstMatch = 0;
+
+ if(!exp.pattern().isEmpty()) {
+ it = QListViewItemIterator(m_listView, QListViewItemIterator::Selectable);
+ while((it_v = it.current()) != 0) {
+ if(it_v->firstChild() == 0) {
+ if(!match(exp, it_v)) {
+ // this is a node which does not contain the
+ // text and does not have children. So we can
+ // safely hide it. Then we check, if the parent
+ // has more children which are still visible. If
+ // none are found, the parent node is hidden also. We
+ // continue until the top of the tree or until we
+ // find a node that still has visible children.
+ bool hide = true;
+ while(hide) {
+ it_v->setVisible(false);
+ it_v = it_v->parent();
+ if(it_v && it_v->isSelectable()) {
+ hide = !match(exp, it_v);
+ QListViewItem* child = it_v->firstChild();
+ for(; child && hide; child = child->nextSibling()) {
+ if(child->isVisible())
+ hide = false;
+ }
+ } else
+ hide = false;
+ }
+ } else if(!firstMatch) {
+ firstMatch = it_v;
+ }
+ ++it;
+
+ } else if(match(exp, it_v)) {
+ if(!firstMatch) {
+ firstMatch = it_v;
+ }
+ // a node with children contains the text. We want
+ // to display all child nodes in this case, so we need
+ // to advance the iterator to the next sibling of the
+ // current node. This could well be the sibling of a
+ // parent or grandparent node.
+ QListViewItem* curr = it_v;
+ QListViewItem* item;
+ while((item = curr->nextSibling()) == 0) {
+ curr = curr->parent();
+ if(curr == 0)
+ break;
+ if(match(exp, curr))
+ firstMatch = curr;
+ }
+ do {
+ ++it;
+ } while(it.current() && it.current() != item);
+
+ } else {
+ // It's a node with children that does not match. We don't
+ // change it's status here.
+ ++it;
+ }
+ }
+ }
+
+ // make the first match the one that is selected
+ // if we have no match, make sure none is selected
+ if(m_selMode == QListView::Single) {
+ if(firstMatch) {
+ m_listView->setSelected(firstMatch, true);
+ ensureItemVisible(firstMatch);
+ } else
+ m_listView->selectAll(false);
+ }
+
+ // Get the number of visible nodes for the return code
+ int cnt = 0;
+
+ it = QListViewItemIterator(m_listView, QListViewItemIterator::Selectable | QListViewItemIterator::Visible);
+ while((it_v = it.current()) != 0) {
+ cnt++;
+ it++;
+ }
+ return cnt;
+}
+
+bool KMyMoneySelector::contains(const QString& txt) const
+{
+ QListViewItemIterator it(m_listView, QListViewItemIterator::Selectable);
+ QListViewItem* it_v;
+ while((it_v = it.current()) != 0) {
+ if(it_v->rtti() == 1) {
+ KMyMoneyCheckListItem* it_c = dynamic_cast<KMyMoneyCheckListItem*>(it_v);
+ if(it_c->text() == txt) {
+ return true;
+ }
+ } else if(it_v->rtti() == 0) {
+ KMyMoneyListViewItem* it_c = dynamic_cast<KMyMoneyListViewItem*>(it_v);
+ if(it_c->text(0) == txt) {
+ return true;
+ }
+ }
+ it++;
+ }
+ return false;
+}
+
+void KMyMoneySelector::slotListRightMouse(QListViewItem* it_v, const QPoint& pos, int /* col */)
+{
+ if(it_v && (it_v->rtti() == 1)) {
+ KMyMoneyCheckListItem* it_c = static_cast<KMyMoneyCheckListItem*>(it_v);
+ if(it_c->type() == QCheckListItem::CheckBox) {
+ // the following is copied from QCheckListItem::activate() et al
+ int boxsize = m_listView->style().pixelMetric(QStyle::PM_CheckListButtonSize, m_listView);
+ int align = m_listView->columnAlignment( 0 );
+ int marg = m_listView->itemMargin();
+ int y = 0;
+
+ if ( align & AlignVCenter )
+ y = ( ( height() - boxsize ) / 2 ) + marg;
+ else
+ y = (m_listView->fontMetrics().height() + 2 + marg - boxsize) / 2;
+
+ QRect r( 0, y, boxsize-3, boxsize-3 );
+ // columns might have been swapped
+ r.moveBy( m_listView->header()->sectionPos( 0 ), 0 );
+
+ QPoint topLeft = m_listView->itemRect(it_v).topLeft(); //### inefficient?
+ QPoint p = m_listView->mapFromGlobal( pos ) - topLeft;
+
+ int xdepth = m_listView->treeStepSize() * (it_v->depth() + (m_listView->rootIsDecorated() ? 1 : 0))
+ + m_listView->itemMargin();
+ xdepth += m_listView->header()->sectionPos( m_listView->header()->mapToSection( 0 ) );
+ p.rx() -= xdepth;
+ // copy ends around here
+
+ if ( r.contains( p ) ) {
+ // we get down here, if we have a right click onto the checkbox
+ selectAllSubItems(it_c, it_c->isOn());
+ }
+ }
+ }
+}
+
+QStringList KMyMoneySelector::selectedItems(void) const
+{
+ QStringList list;
+ selectedItems(list);
+ return list;
+}
+
+QStringList KMyMoneySelector::itemList(void) const
+{
+ QStringList list;
+ itemList(list);
+ return list;
+}
+
+#include "kmymoneyselector.moc"
diff --git a/kmymoney2/widgets/kmymoneyselector.h b/kmymoney2/widgets/kmymoneyselector.h
new file mode 100644
index 0000000..2b389d6
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyselector.h
@@ -0,0 +1,387 @@
+/***************************************************************************
+ kmymoneyselector.h
+ -------------------
+ begin : Thu Jun 29 2006
+ copyright : (C) 2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYSELECTOR_H
+#define KMYMONEYSELECTOR_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qwidget.h>
+#include <qlistview.h>
+class QHBoxLayout;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+class KListView;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyutils.h>
+
+/**
+ * This class implements a general selector for id based objects. It is based
+ * on a tree view. Using this widget, one can select one or multiple
+ * items depending on the mode of operation and the set of items
+ * selected to be displayed. (see setSelectionMode() ).
+ *
+ * - Single selection mode\n
+ * In this mode the widget allows to select a single entry out of
+ * the set of displayed items.
+ *
+ * - Multi selection mode\n
+ * In this mode, the widget allows to select one or more entries
+ * out of the set of displayed items. Selection is performed
+ * by marking the item in the view.
+ */
+class KMyMoneySelector : public QWidget
+{
+ Q_OBJECT
+public:
+ KMyMoneySelector(QWidget *parent=0, const char *name=0, QWidget::WFlags flags = 0);
+ virtual ~KMyMoneySelector();
+
+ /**
+ * This method sets the mode of operation of this widget.
+ * Supported values are @p QListView::Single and @p QListView::Multi.
+ *
+ * @param mode @p QListView::Single selects single selection mode and
+ * @p QListView::Multi selects multi selection mode
+ *
+ * @note When the widget is created, it defaults to QListView::Single.
+ * Any items loaded into the widget will be cleared if the mode changes.
+ * Changing the selection mode also changes the type of the items
+ * created through newItem(). You should therefor set the selection mode
+ * before you create items.
+ */
+ void setSelectionMode(const QListView::SelectionMode mode);
+
+ /**
+ * returns the selection mode of the widget.
+ *
+ * @sa setSelectionMode()
+ */
+ QListView::SelectionMode selectionMode(void) const { return m_selMode; }
+
+ /**
+ * This method returns the list of selected item ids. If
+ * no item is selected, the list is empty. The list is cleared
+ * when the method is called.
+ *
+ * @param list reference to id list
+ */
+ void selectedItems(QStringList& list) const;
+
+ /**
+ * Convenience method for above method. Requires more resources.
+ * Provided only for backward compatibility.
+ *
+ * @todo Deprecated after 1.0
+ */
+ QStringList selectedItems(void) const;
+
+ /**
+ * This method returns the list of all item ids.
+ * The list is cleared when the method is called.
+ *
+ * @param list reference to id list
+ */
+ void itemList(QStringList& list) const;
+
+ /**
+ * Convenience method for above method. Requires more resources.
+ * Provided only for backward compatibility.
+ *
+ * @todo Deprecated after 1.0
+ */
+ QStringList itemList(void) const;
+
+ /**
+ * This method returns an information if all items
+ * currently shown are selected or not.
+ *
+ * @retval true All items shown are selected
+ * @retval false Not all items are selected
+ *
+ * @note If the selection mode is set to Single, this
+ * method always returns false.
+ */
+ bool allItemsSelected(void) const;
+
+ /**
+ * This method sets the current selected item and marks the
+ * checkbox according to @p state in multi-selection-mode.
+ *
+ * @param id id of account
+ * @param state state of checkbox in multi-selection-mode
+ * @p true checked
+ * @p false not checked (default)
+ */
+ void setSelected(const QString& id, const bool state = false);
+
+ /**
+ * Return a pointer to the KListView object
+ */
+ KListView* listView(void) const { return m_listView; };
+
+ /**
+ * This method selects/deselects all items that
+ * are currently in the item list according
+ * to the parameter @p state.
+ *
+ * @param state select items if @p true, deselect otherwise
+ */
+ void selectAllItems(const bool state);
+
+ /**
+ * This method selects/deselects all items that
+ * are currently in this object's item list AND are present in the supplied
+ * @p itemList of items to select, according to the @p state.
+ *
+ * @param itemList of item ids to apply @p state to
+ * @param state select items if @p true, deselect otherwise
+ */
+ void selectItems(const QStringList& itemList, const bool state);
+
+ /**
+ * Protect an entry from selection. Protection is controlled by
+ * the parameter @p protect.
+ *
+ * @param itemId id of item for which to modify the protection
+ * @param protect if true, the entry specified by @p accId cannot be
+ * selected. If false, it can be selected. Defaults to @p true.
+ */
+ void protectItem(const QString& itemId, const bool protect = true);
+
+ /**
+ * This method modifies the width of the widget to match its optimal size
+ * so that all entries fit completely.
+ */
+ void setOptimizedWidth(void);
+
+ /**
+ * This method removes an item with a given id from the list.
+ *
+ * @param id QString containing id of item to be removed
+ */
+ void removeItem(const QString& id);
+
+ /**
+ * This method creates a new top level KMyMoneyCheckListItem object in the list view.
+ * The type can be influenced with the @a type argument. It defaults
+ * to QCheckListItem::RadioButtonController. If @a id is empty, the item is not
+ * selectable. It will be shown 'opened' (see QListViewItem::setOpen())
+ *
+ * @return pointer to newly created object
+ */
+ QListViewItem* newItem(const QString& name, const QString& key = QString(), const QString& id = QString(), QCheckListItem::Type type = QCheckListItem::RadioButtonController);
+
+ /**
+ * Same as above, but create the item following the item pointed to by @c after.
+ * If @c after is 0, then behave as previous method
+ */
+ QListViewItem* newItem(const QString& name, QListViewItem* after, const QString& key = QString(), const QString& id = QString(), QCheckListItem::Type type = QCheckListItem::RadioButtonController);
+
+ /**
+ * This method creates a new selectable object depending on the
+ * selection mode. This is either a KListViewItem for single
+ * selection mode or a KMyMoneyCheckListItem for multi selection mode
+ *
+ * @note The new item will be the first one in the selection
+ *
+ * @param parent pointer to parent item
+ * @param name the displayed name
+ * @param key String to be used for completion. If empty defaults to @a name
+ * @param id the id used to identify the objects
+ *
+ * @return pointer to newly created object
+ */
+ QListViewItem* newItem(QListViewItem* parent, const QString& name, const QString& key, const QString& id);
+
+ /**
+ * This method creates a new selectable object depending on the
+ * selection mode. This is either a KListViewItem for single
+ * selection mode or a KMyMoneyCheckListItem for multi selection mode.
+ * In contrast to the above method, the parent is always the view.
+ *
+ * @note The new item will be the first one in the selection
+ *
+ * @param name the displayed name
+ * @param key String to be used for completion. If empty defaults to @a name
+ * @param id the id used to identify the objects
+ *
+ * @return pointer to newly created object
+ */
+ QListViewItem* newTopItem(const QString& name, const QString& key, const QString& id);
+
+ /**
+ * This method checks if a given @a item matches the given regular expression @a exp.
+ *
+ * @param exp const reference to a regular expression object
+ * @param item pointer to QListViewItem
+ *
+ * @retval true item matches
+ * @retval false item does not match
+ */
+ virtual bool match(const QRegExp& exp, QListViewItem* item) const;
+
+ /**
+ * This method delays the call for m_listView->ensureItemVisible(item)
+ * for about 10ms. This seems to be necessary when the widget is not (yet)
+ * visible on the screen after creation.
+ *
+ * @param item pointer to QListViewItem that should be made visible
+ *
+ * @sa slotShowSelected()
+ */
+ void ensureItemVisible(const QListViewItem *item);
+
+ /**
+ * This method returns a pointer to the QListViewItem with the id @a id.
+ * If such an item is not contained in the list, @a 0 will be returned.
+ *
+ * @param id id to be used to find a QListViewItem pointer for
+ */
+ QListViewItem* item(const QString& id) const;
+
+ /**
+ * This method returns, if any of the items in the selector contains
+ * the text @a txt.
+ *
+ * @param txt const reference to string to be looked for
+ * @retval true exact match found
+ * @retval false no match found
+ */
+ virtual bool contains(const QString& txt) const;
+
+ /**
+ * Clears all items of the selector and the associated listview.
+ */
+ virtual void clear(void);
+
+ /**
+ * This method returns the optimal width for the widget
+ */
+ int optimizedWidth(void) const;
+
+public slots:
+ /**
+ * This slot selects all items that are currently in
+ * the item list of the widget.
+ */
+ void slotSelectAllItems(void) { selectAllItems(true); };
+
+ /**
+ * This slot deselects all items that are currently in
+ * the item list of the widget.
+ */
+ void slotDeselectAllItems(void) { selectAllItems(false); };
+
+signals:
+ void stateChanged(void);
+
+ void itemSelected(const QString& id);
+
+protected:
+ /**
+ * Helper method for selectedItems() to traverse the tree.
+ *
+ * @param list list of selected ids
+ * @param item pointer to item to start with
+ */
+ void selectedItems(QStringList& list, QListViewItem* item) const;
+
+ /**
+ * Helper method for allItemsSelected() to traverse the tree.
+ *
+ * @param item pointer to item to start with
+ */
+ bool allItemsSelected(const QListViewItem *item) const;
+
+ /**
+ * This is a helper method for selectAllItems().
+ *
+ * @param item pointer to item to start with
+ * @param state selection state (@a true = selected, @a false = not selected)
+ */
+ void selectAllSubItems(QListViewItem* item, const bool state);
+
+ /**
+ * This is a helper method for selectItems().
+ *
+ * @param item pointer to item to start with
+ * @param itemList list of ids to be selected
+ * @param state selection state (@a true = selected, @a false = not selected)
+ */
+ void selectSubItems(QListViewItem* item, const QStringList& itemList, const bool state);
+
+public slots:
+ /**
+ * Hide all listview items that do not match the regular expression @a exp.
+ * This method returns the number of visible items
+ *
+ * @param exp const reference to QRegExp that an item must match to stay visible
+ *
+ * @return number of visible items
+ */
+ int slotMakeCompletion(const QRegExp& exp);
+
+ /**
+ * This is an overloaded member function, provided for convenience. It behaves essentially like the above function.
+ *
+ * @param txt contains the pattern for a QRegExp
+ */
+ int slotMakeCompletion(const QString& txt);
+
+
+protected slots:
+ /**
+ * This slot is usually connected to a timer signal and simply
+ * calls m_listView->ensureItemVisible() for the last selected item
+ * in this widget.
+ *
+ * @sa ensureItemVisible(), setSelected(const QString&)
+ */
+ void slotShowSelected(void);
+
+ /**
+ * This slot is connected to the KListView executed signal
+ */
+ void slotItemSelected(QListViewItem *it_v);
+
+ /**
+ * This slot processes the right mouse button press on a list view item.
+ *
+ * @param it_v pointer to list view item that was pressed
+ * @param p the position where the mouse was pressed
+ */
+ void slotListRightMouse(QListViewItem* it_v, const QPoint& p, int /* col */);
+
+protected:
+ KListView* m_listView;
+ QStringList m_itemList;
+ QString m_baseName;
+ QListView::SelectionMode m_selMode;
+ QHBoxLayout* m_layout;
+
+private:
+ const QListViewItem* m_visibleItem;
+};
+
+#endif
diff --git a/kmymoney2/widgets/kmymoneytitlelabel.cpp b/kmymoney2/widgets/kmymoneytitlelabel.cpp
new file mode 100644
index 0000000..9dc5140
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneytitlelabel.cpp
@@ -0,0 +1,104 @@
+/***************************************************************************
+ kmymoneytitlelabel.cpp
+ -------------------
+ begin : Sun Feb 05 2005
+ copyright : (C) 2005 by Ace Jones
+ email : acejones@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qpixmap.h>
+#include <qvariant.h>
+#include <qstyle.h>
+#include <qpainter.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kglobal.h>
+#include <kstandarddirs.h>
+#include <kdebug.h>
+#include <kglobalsettings.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kmymoneytitlelabel.h"
+
+KMyMoneyTitleLabel::KMyMoneyTitleLabel(QWidget *parent, const char *name) :
+ QLabel(parent, name),
+ m_bgColor( KGlobalSettings::highlightColor() ),
+ m_textColor( KGlobalSettings::highlightedTextColor() )
+{
+ setFont(KGlobalSettings::windowTitleFont());
+}
+
+KMyMoneyTitleLabel::~KMyMoneyTitleLabel()
+{
+}
+
+void KMyMoneyTitleLabel::setLeftImageFile(const QString& _file)
+{
+ m_leftImageFile = _file;
+ QString lfullpath = KGlobal::dirs()->findResource("appdata", m_leftImageFile);
+ m_leftImage.load(lfullpath);
+ m_leftImage.setAlphaBuffer(true);
+}
+
+void KMyMoneyTitleLabel::setRightImageFile(const QString& _file)
+{
+ m_rightImageFile = _file;
+ QString rfullpath = KGlobal::dirs()->findResource("appdata", m_rightImageFile);
+ m_rightImage.load(rfullpath);
+ m_rightImage.setAlphaBuffer(true);
+ if(m_rightImage.height() < 30)
+ setMinimumHeight(30);
+ else {
+ setMinimumHeight( m_rightImage.height() );
+ setMaximumHeight( m_rightImage.height() );
+ }
+}
+
+void KMyMoneyTitleLabel::resizeEvent ( QResizeEvent * )
+{
+ QRect cr = contentsRect();
+ QImage output( cr.width(), cr.height(), 32 );
+ output.fill( m_bgColor.rgb() );
+
+ bitBlt ( &output, cr.width() - m_rightImage.width(), 0, &m_rightImage, 0, 0, m_rightImage.width(), m_rightImage.height(), 0 );
+ bitBlt ( &output, 0, 0, &m_leftImage, 0, 0, m_leftImage.width(), m_leftImage.height(), 0 );
+
+ QPixmap pix;
+ pix.convertFromImage(output);
+ setPixmap(pix);
+ setMinimumWidth( m_rightImage.width() );
+}
+
+void KMyMoneyTitleLabel::drawContents(QPainter *p)
+{
+ // first draw pixmap
+ QLabel::drawContents(p);
+
+ // then draw text on top
+ style().drawItem( p, contentsRect(), alignment(), colorGroup(), isEnabled(),
+ 0, QString(" ")+m_text, -1, &m_textColor );
+}
+
+void KMyMoneyTitleLabel::setText(const QString& txt)
+{
+ m_text = txt;
+ update();
+}
+
+#include "kmymoneytitlelabel.moc"
diff --git a/kmymoney2/widgets/kmymoneytitlelabel.h b/kmymoney2/widgets/kmymoneytitlelabel.h
new file mode 100644
index 0000000..08f9302
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneytitlelabel.h
@@ -0,0 +1,78 @@
+/***************************************************************************
+ kmymoneytitlelabel.h
+ -------------------
+ begin : Sun Feb 05 2005
+ copyright : (C) 2005 by Ace Jones
+ email : acejones@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KTITLELABEL_H
+#define KTITLELABEL_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlabel.h>
+#include <qimage.h>
+#include <qcolor.h>
+class QPixmap;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+/**
+ * @author ace jones
+ */
+class KMyMoneyTitleLabel : public QLabel
+{
+ Q_OBJECT
+ Q_PROPERTY( QString leftImageFile READ leftImageFile WRITE setLeftImageFile DESIGNABLE true )
+ Q_PROPERTY( QString rightImageFile READ rightImageFile WRITE setRightImageFile DESIGNABLE true )
+ Q_PROPERTY( QColor bgColor READ bgColor WRITE setBgColor DESIGNABLE true )
+ Q_PROPERTY( QString text READ text WRITE setText DESIGNABLE true )
+
+public:
+ KMyMoneyTitleLabel(QWidget *parent = 0, const char *name = 0);
+ ~KMyMoneyTitleLabel();
+
+ void setBgColor(const QColor& _color) { m_bgColor = _color; }
+ void setLeftImageFile(const QString& _file);
+ void setRightImageFile(const QString& _file);
+
+ const QString& leftImageFile(void) const { return m_leftImageFile; }
+ const QString& rightImageFile(void) const { return m_rightImageFile; }
+ QColor bgColor(void) const { return m_bgColor; }
+ QString text(void) const { return m_text; }
+
+public slots:
+ virtual void setText(const QString& txt);
+
+protected:
+ void updatePixmap(void);
+ virtual void resizeEvent ( QResizeEvent * );
+ void drawContents(QPainter *);
+
+private:
+ QImage m_leftImage;
+ QImage m_rightImage;
+ QColor m_bgColor;
+ QColor m_textColor;
+ QString m_text;
+
+ QString m_leftImageFile;
+ QString m_rightImageFile;
+};
+
+#endif
diff --git a/kmymoney2/widgets/kmymoneywizard.cpp b/kmymoney2/widgets/kmymoneywizard.cpp
new file mode 100644
index 0000000..d7fcfdb
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneywizard.cpp
@@ -0,0 +1,376 @@
+/***************************************************************************
+ kmymoneywizard.cpp
+ -------------------
+ copyright : (C) 2006 by Thomas Baumagrt
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qlayout.h>
+#include <qlabel.h>
+#include <qpoint.h>
+#include <qfont.h>
+#include <qframe.h>
+#include <qtooltip.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kpushbutton.h>
+#include <kstdguiitem.h>
+#include <kglobalsettings.h>
+#include <kiconloader.h>
+#include <kapplication.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/kmymoneywizard.h>
+#include "kmymoneywizard_p.h"
+#include <kmymoney/kmymoneytitlelabel.h>
+#include <kmymoney/kguiutils.h>
+
+KMyMoneyWizardPagePrivate::KMyMoneyWizardPagePrivate(QObject* parent, const char* name) :
+ QObject(parent, name)
+{
+}
+
+void KMyMoneyWizardPagePrivate::emitCompleteStateChanged(void)
+{
+ emit completeStateChanged();
+}
+
+
+KMyMoneyWizardPage::KMyMoneyWizardPage(unsigned int step, QWidget* widget, const char* name) :
+ m_step(step),
+ m_widget(widget),
+ d(new KMyMoneyWizardPagePrivate(widget, name))
+{
+ m_mandatoryGroup = new kMandatoryFieldGroup(widget);
+ QObject::connect(m_mandatoryGroup, SIGNAL(stateChanged()), object(), SIGNAL(completeStateChanged()));
+ widget->hide();
+}
+
+QObject* KMyMoneyWizardPage::object(void) const
+{
+ return d;
+}
+
+void KMyMoneyWizardPage::completeStateChanged(void) const
+{
+ d->emitCompleteStateChanged();
+}
+
+void KMyMoneyWizardPage::resetPage(void)
+{
+}
+
+void KMyMoneyWizardPage::enterPage(void)
+{
+}
+
+void KMyMoneyWizardPage::leavePage(void)
+{
+}
+
+KMyMoneyWizardPage* KMyMoneyWizardPage::nextPage(void) const
+{
+ return 0;
+}
+
+bool KMyMoneyWizardPage::isLastPage(void) const
+{
+ return nextPage() == 0;
+}
+
+bool KMyMoneyWizardPage::isComplete(void) const
+{
+ if(!isLastPage())
+ QToolTip::add(wizard()->m_nextButton, i18n("Continue with next page"));
+ else
+ QToolTip::add(wizard()->m_finishButton, i18n("Finish wizard"));
+ return m_mandatoryGroup->isEnabled();
+}
+
+const QString& KMyMoneyWizardPage::helpContext(void) const
+{
+ return QString::null;
+}
+
+KMyMoneyWizard::KMyMoneyWizard(QWidget *parent, const char *name, bool modal, WFlags f) :
+ QDialog(parent, name, modal, f),
+ m_step(0)
+{
+ // enable the little grip in the right corner
+ setSizeGripEnabled(true);
+
+ // create buttons
+ m_cancelButton = new KPushButton(i18n("&Cancel"), this);
+ m_backButton = new KPushButton(i18n("&Back"), this);
+ m_nextButton = new KPushButton(i18n("&Next"), this);
+ m_finishButton = new KPushButton(i18n("&Finish"), this);
+ m_helpButton = new KPushButton(i18n("&Help"), this);
+
+ if ( KGlobalSettings::showIconsOnPushButtons() )
+ {
+ m_backButton->setIconSet( KStdGuiItem::back( KStdGuiItem::UseRTL ).iconSet() );
+ m_nextButton->setIconSet( KStdGuiItem::forward( KStdGuiItem::UseRTL ).iconSet() );
+ m_finishButton->setIconSet( SmallIconSet( "apply" ) );
+ m_cancelButton->setIconSet( SmallIconSet( "button_cancel" ) );
+ m_helpButton->setIconSet( SmallIconSet( "help" ) );
+ }
+
+ // create button layout
+ m_buttonLayout = new QHBoxLayout;
+ m_buttonLayout->addWidget(m_helpButton);
+ m_buttonLayout->addStretch(1);
+ m_buttonLayout->addWidget(m_backButton);
+ m_buttonLayout->addWidget(m_nextButton);
+ m_buttonLayout->addWidget(m_finishButton);
+ m_buttonLayout->addWidget(m_cancelButton);
+
+ // create wizard layout
+ m_wizardLayout = new QVBoxLayout(this, 6, 0, "wizardLayout");
+ m_titleLabel = new KMyMoneyTitleLabel(this, "titleLabel");
+ m_wizardLayout->addWidget(m_titleLabel);
+
+ QHBoxLayout* hboxLayout = new QHBoxLayout(0, 0, 6, "hboxLayout");
+
+ // create stage layout and frame
+ m_stepFrame = new QFrame(this, "stepFrame");
+ m_stepFrame->setPaletteBackgroundColor(KGlobalSettings::highlightColor());
+ m_stepLayout = new QVBoxLayout(m_stepFrame, 11, 6, "stepLayout");
+ m_stepLayout->addWidget(new QLabel("", m_stepFrame));
+ m_stepLayout->addItem(new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding));
+ m_stepLabel = new QLabel(m_stepFrame, "stepLabel");
+ m_stepLabel->setAlignment(Qt::AlignHCenter);
+ m_stepLayout->addWidget(m_stepLabel);
+ hboxLayout->addWidget(m_stepFrame);
+
+ // FIXME use the protected virtual method QWidget::paletteChange() to update the palette
+ // information when the user selected a different color set using the KConfigCenter
+ m_stepPalette = m_stepLabel->palette();
+ QColorGroup::ColorRole role = QColorGroup::Foreground;
+ QColor color = KGlobalSettings::highlightedTextColor();
+ m_stepPalette.setColor( QPalette::Active, role, color );
+ m_stepPalette.setColor( QPalette::Inactive, role, color );
+ m_stepPalette.setColor( QPalette::Disabled, role, color );
+ m_stepLabel->setPalette(m_stepPalette);
+
+ // create page layout
+ m_pageLayout = new QVBoxLayout(0, 0, 6, "pageLayout");
+
+ // the page will be inserted later dynamically above this line
+ QFrame* line = new QFrame( this, "line" );
+ line->setFrameShadow( QFrame::Sunken );
+ line->setFrameShape( QFrame::HLine );
+ m_pageLayout->addWidget( line );
+ m_pageLayout->addLayout(m_buttonLayout);
+
+ // now glue everything together
+ hboxLayout->addLayout(m_pageLayout);
+ m_wizardLayout->addLayout(hboxLayout);
+
+ resize(QSize(770, 520).expandedTo(minimumSizeHint()));
+ clearWState(WState_Polished);
+
+ m_titleLabel->setText("No Title specified");
+ m_titleLabel->setRightImageFile("pics/titlelabel_background.png");
+
+ m_finishButton->hide();
+
+ connect(m_backButton, SIGNAL(clicked()), this, SLOT(backButtonClicked()));
+ connect(m_nextButton, SIGNAL(clicked()), this, SLOT(nextButtonClicked()));
+ connect(m_cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
+ connect(m_finishButton, SIGNAL(clicked()), this, SLOT(accept()));
+ connect(m_helpButton, SIGNAL(clicked()), this, SLOT(helpButtonClicked()));
+}
+
+void KMyMoneyWizard::setTitle(const QString& txt)
+{
+ m_titleLabel->setText(txt);
+}
+
+void KMyMoneyWizard::addStep(const QString& text)
+{
+ QLabel* step = new QLabel(text, m_stepFrame);
+ step->setFrameStyle(QFrame::Panel | QFrame::Raised);
+ step->setAlignment(Qt::AlignHCenter);
+ step->setFrameStyle(QFrame::Box | QFrame::Sunken);
+ step->setMargin(2);
+ step->setPalette( m_stepPalette );
+
+ m_steps.append(step);
+ m_stepLayout->insertWidget(m_steps.count(), step);
+
+ QFont font(step->font());
+ font.setBold(true);
+ QFontMetrics fm(font);
+ int w = fm.width(text)+30;
+ if(m_stepFrame->minimumWidth() < w) {
+ m_stepFrame->setMinimumWidth(w);
+ }
+}
+
+void KMyMoneyWizard::setStepHidden(unsigned int step, bool hidden)
+{
+ if((step < 1) || (step > m_steps.count()))
+ return;
+
+ m_steps[--step]->setHidden(hidden);
+ updateStepCount();
+}
+
+void KMyMoneyWizard::selectStep(unsigned int step)
+{
+ if((step < 1) || (step > m_steps.count()))
+ return;
+
+ m_step = step;
+ QValueList<QLabel*>::iterator it_l;
+ QFont f = m_steps[0]->font();
+ for(it_l = m_steps.begin(); it_l != m_steps.end(); ++it_l) {
+ f.setBold(false);
+ (*it_l)->setFrameStyle(QFrame::NoFrame);
+ if(--step == 0) {
+ f.setBold(true);
+ (*it_l)->setFrameStyle(QFrame::Box | QFrame::Sunken);
+ }
+ (*it_l)->setFont(f);
+ }
+ updateStepCount();
+}
+
+void KMyMoneyWizard::reselectStep(void)
+{
+ selectStep(m_step);
+}
+
+void KMyMoneyWizard::updateStepCount(void)
+{
+ QValueList<QLabel*>::iterator it_l;
+ int stepCount = 0;
+ int hiddenAdjust = 0;
+ int step = 0;
+ for(it_l = m_steps.begin(); it_l != m_steps.end(); ++it_l) {
+ if(!(*it_l)->isHidden())
+ ++stepCount;
+ else if(step < m_step)
+ hiddenAdjust++;
+ ++step;
+ }
+ m_stepLabel->setText(i18n("Step %1 of %2").arg(m_step - hiddenAdjust).arg(stepCount));
+}
+
+void KMyMoneyWizard::setFirstPage(KMyMoneyWizardPage* page)
+{
+ page->resetPage();
+ m_history.clear();
+ m_history.append(page);
+ switchPage(0);
+}
+
+void KMyMoneyWizard::switchPage(KMyMoneyWizardPage* oldPage)
+{
+ if(oldPage) {
+ oldPage->widget()->hide();
+ m_pageLayout->remove(oldPage->widget());
+ disconnect(oldPage->object(), SIGNAL(completeStateChanged()), this, SLOT(completeStateChanged()));
+ }
+ KMyMoneyWizardPage* newPage = m_history.back();
+ if(newPage) {
+ m_pageLayout->insertWidget(0, newPage->widget());
+ connect(newPage->object(), SIGNAL(completeStateChanged()), this, SLOT(completeStateChanged()));
+ newPage->widget()->show();
+ selectStep(newPage->step());
+ if(newPage->isLastPage()) {
+ m_nextButton->setDefault(false);
+ m_finishButton->setDefault(true);
+ } else {
+ m_finishButton->setDefault(false);
+ m_nextButton->setDefault(true);
+ }
+ QWidget* w = newPage->initialFocusWidget();
+ if(w)
+ w->setFocus();
+ }
+ completeStateChanged();
+}
+
+void KMyMoneyWizard::backButtonClicked(void)
+{
+ KMyMoneyWizardPage* oldPage = m_history.back();
+ m_history.pop_back();
+ oldPage->leavePage();
+ oldPage->resetPage();
+ switchPage(oldPage);
+}
+
+void KMyMoneyWizard::nextButtonClicked(void)
+{
+ // make sure it is really complete. Some widgets only change state during focusOutEvent,
+ // so we just create such an animal by changing the focus to the next button and
+ // check again for copmpleness
+ m_nextButton->setFocus();
+ KMyMoneyWizardPage* oldPage = m_history.back();
+ if(oldPage->isComplete()) {
+ KMyMoneyWizardPage* newPage = oldPage->nextPage();
+ m_history.append(newPage);
+ newPage->enterPage();
+ newPage->resetPage();
+ switchPage(oldPage);
+ }
+}
+
+void KMyMoneyWizard::helpButtonClicked(void)
+{
+ KMyMoneyWizardPage* currentPage = m_history.back();
+ QString ctx = currentPage->helpContext();
+ if(ctx.isEmpty())
+ ctx = m_helpContext;
+ kapp->invokeHelp(ctx);
+}
+
+void KMyMoneyWizard::completeStateChanged(void)
+{
+ KMyMoneyWizardPage* currentPage = m_history.back();
+ bool lastPage = currentPage->isLastPage();
+
+ m_finishButton->setShown(lastPage);
+ m_nextButton->setShown(!lastPage);
+
+ KPushButton* button;
+
+ button = lastPage ? m_finishButton : m_nextButton;
+
+ bool rc = currentPage->isComplete();
+ button->setEnabled(rc);
+
+ m_backButton->setEnabled(m_history.count() > 1);
+}
+
+void KMyMoneyWizard::accept(void)
+{
+ // make sure it is really complete. Some widgets only change state during focusOutEvent,
+ // so we just create such an animal by changing the focus to the finish button and
+ // check again for completeness.
+ m_finishButton->setFocus();
+ KMyMoneyWizardPage* page = m_history.back();
+ if(page->isComplete())
+ QDialog::accept();
+}
+
+#include "kmymoneywizard.moc"
+
diff --git a/kmymoney2/widgets/kmymoneywizard.h b/kmymoney2/widgets/kmymoneywizard.h
new file mode 100644
index 0000000..21b57b4
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneywizard.h
@@ -0,0 +1,539 @@
+/***************************************************************************
+ kmymoneywizard.h
+ -------------------
+ copyright : (C) 2006 by Thomas Baumagrt
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYWIZARD_H
+#define KMYMONEYWIZARD_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qdialog.h>
+#include <qvaluelist.h>
+#include <qpalette.h>
+class QVBoxLayout;
+class QHBoxLayout;
+class QLabel;
+class QFrame;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+class KPushButton;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+class KMyMoneyTitleLabel;
+class KMyMoneyWizard;
+class KMyMoneyWizardPagePrivate;
+class kMandatoryFieldGroup;
+
+/**
+ * @author Thomas Baumgart (C) 2006
+ *
+ * @note: the following documentation is somewhat outdated
+ * as of May 2007. Wizards should use a namespace
+ * for the pages and can use the WizardPage<T> template class.
+ * See the NewUserWizard class and NewUserWizardPages namespace
+ * as an example of this setup.
+ *
+ * This class represents the base class for wizard pages for the
+ * KMyMoneyWizard. One cannot create a wizard page directly, but
+ * must derive from it. The KMyMoneyWizardPage class provides the
+ * necessary functionality to work in concert with KMyMoneyWizard.
+ *
+ * Therefore, few steps are necessary to use this class. They seem to
+ * be awkward at some stage, but I wanted to be able to use Qt designer
+ * to actually design the widget for the page. That's why some things
+ * aren't implemented in a more straight fashion than one would
+ * normally do this.
+ *
+ * The first step is to derive a specific base page for the specific wizard.
+ * In this example we use the name NewUser as template for the specific wizard.
+ * This class provides a 'back'-pointer to the actual wizard object
+ * for all pages.
+ *
+ * @code
+ * class KNewUserPage : public KMyMoneyWizardPage
+ * {
+ * public:
+ * KNewUserPage(unsigned int step, QWidget* widget, KNewUserWizard* parent, const char* name);
+ *
+ * protected:
+ * KNewUserWizard* m_wizard;
+ * }
+ * @endcode
+ *
+ * The implementation of this class is rather straight-forward:
+ *
+ * @code
+ * KNewUserPage::KNewUserPage(unsigned int step, QWidget* widget, KNewUserWizard* parent, const char* name) :
+ * KMyMoneyWizardPage(step, widget, name),
+ * m_wizard(parent)
+ * {
+ * }
+ * @endcode
+ *
+ * For each page of the wizard, you will have to create a @p ui file with
+ * Qt designer.
+ * Let's assume we call the first page of the wizard 'General' and go
+ * from there.
+ * We also assume, that the wizard has more than one page.
+ * The ui designer generated class should have the name KNewUserGeneralDecl
+ * as all other dialogs. The class definition of KNewUserGeneral will
+ * look like this:
+ *
+ * @code
+ * class KNewUserGeneral : public KNewUserGeneralDecl, public KNewUserPage
+ * {
+ * Q_OBJECT
+ * public:
+ * KNewUserGeneral(KNewUserWizard* parent, const char* name = 0);
+ * KMyMoneyWizardPage* nextPage(void);
+ * bool isLastPage(void) { return false; }
+ *
+ * protected:
+ * KNewUserWizard* m_wizard;
+ * }
+ * @endcode
+ *
+ * The implementation depends heavily on the logic of your code. If you only
+ * fill some widgets, it could be as simple as:
+ *
+ * @code
+ * KNewUserGeneral::KNewUserGeneral(KNewUserWizard* parent, const char* name) :
+ * KNewUserGeneralDecl(parent),
+ * KNewUserPage(1, this, parent, name)
+ * {
+ * kMandatoryFieldGroup* mandatoryGroup = new kMandatoryFieldGroup(this);
+ * mandatoryGroup->add(m_userName);
+ * connect(m_mandatoryGroup, SIGNAL(stateChanged()), object(), SIGNAL(completeStateChanged()));
+ * }
+ *
+ * KMyMoneyWizardPage* KNewUserGeneral::nextPage(void)
+ * {
+ * return m_wizard->m_personalPage;
+ * }
+ * @endcode
+ *
+ * A note on the first parameter to KNewUserPage in the above example: it ties
+ * this page to be part of step 1 (see KMyMoneyWizard::addStep() for details).
+ *
+ * Depending on the actual logic of the page, you would want to override the
+ * following methods: resetPage, nextPage, isLastPage and isComplete.
+ *
+ * @note The implementation of this class is heavily based on ideas found at
+ * http://doc.trolltech.com/4.1/dialogs-complexwizard.html
+ */
+class KMyMoneyWizardPage
+{
+public:
+ /**
+ * This method is called by the wizard when the page is entered from
+ * the previous page. The default implementation does nothing.
+ */
+ virtual void enterPage(void);
+
+ /**
+ * This method is called by the wizard when the page is left to return to
+ * the previous page. The default implementation does nothing.
+ */
+ virtual void leavePage(void);
+
+ /**
+ * This method is called by the wizard whenever a page is entered
+ * (either in forward or backward direction). The default
+ * implementation does nothing.
+ */
+ virtual void resetPage(void);
+
+ /**
+ * This method returns a pointer to the next page that should be
+ * shown when the user presses the 'Next' button.
+ *
+ * @return pointer to next wizard page
+ */
+ virtual KMyMoneyWizardPage* nextPage(void) const;
+
+ /**
+ * This returns, if the current page is the last page of the wizard.
+ * The default implementation returns @p false if nextPage() returns 0,
+ * @p true otherwise.
+ *
+ * @retval false more pages follow
+ * @retval true this is the last page of the wizard
+ */
+ virtual bool isLastPage(void) const;
+
+ /**
+ * This returns, if all necessary data for this page has been
+ * filled. It is used to enabled the 'Next' or 'Finish' button.
+ * The button is only enabled, if this method returns @p true,
+ * which is the default implementation.
+ *
+ * @retval false more data required from the user before we can proceed
+ * @retval true all data available, we allow to switch to the next page
+ */
+ virtual bool isComplete(void) const;
+
+ /**
+ * This method returns the step to which this page belongs.
+ * It is required by the KMyMoneyWizard and is not intended
+ * to be used by application code.
+ *
+ * @return step of wizard this page belongs to
+ */
+ unsigned int step(void) const { return m_step; }
+
+ /**
+ * This method returns a pointer to the widget of the page.
+ * It is required by the KMyMoneyWizard and is not intended
+ * to be used by application code.
+ *
+ * @return pointer to widget of page
+ */
+ QWidget* widget(void) const { return m_widget; }
+
+ /**
+ * This method returns a pointer to the QObject used for
+ * the signal/slot mechanism.
+ * It is required by the KMyMoneyWizard and can be used
+ * by application code for signal/slot connections as well.
+ * Other use is not foreseen.
+ */
+ QObject* object(void) const;
+
+ /**
+ * This method returns a pointer to the widget which should
+ * receive the focus when the page is opened.
+ *
+ * @return pointer to widget or 0 if none is to be selected
+ * The default implementation returns 0
+ */
+ virtual QWidget* initialFocusWidget(void) const { return 0; }
+
+ virtual KMyMoneyWizard* wizard(void) const = 0;
+
+ /**
+ * This method returns a specific help context for the page shown
+ * The default returns an empty string.
+ */
+ virtual const QString& helpContext(void) const;
+
+ virtual ~KMyMoneyWizardPage() {}
+protected:
+ /**
+ * Constructor (kept protected, so that one cannot create such an object directly)
+ */
+ KMyMoneyWizardPage(unsigned int step, QWidget* widget, const char* name = 0);
+
+ /**
+ * This method must be called by the implementation when the
+ * data in the fields of the wizard change and the state of
+ * completeness changed.
+ *
+ * @note If you do not override isComplete() then there is no need
+ * to call this method.
+ */
+ void completeStateChanged(void) const;
+
+protected:
+ kMandatoryFieldGroup* m_mandatoryGroup;
+
+private:
+ unsigned int m_step;
+ QWidget* m_widget;
+ KMyMoneyWizardPagePrivate* const d;
+};
+
+
+/**
+ * The general base class for wizard pages
+ *
+ * @author Thomas Baumgart
+ */
+template <class T>
+ class WizardPage : public KMyMoneyWizardPage
+{
+public:
+ WizardPage(unsigned int step, QWidget* widget, T* parent, const char* name) :
+ KMyMoneyWizardPage(step, widget, name),
+ m_wizard(parent),
+ m_wizardBase(parent)
+ {
+ }
+ virtual ~WizardPage() {}
+ virtual KMyMoneyWizard* wizard(void) const { return m_wizardBase; }
+
+protected:
+ T* m_wizard;
+ KMyMoneyWizard* m_wizardBase;
+};
+
+
+/**
+ * @author Thomas Baumgart (C) 2006
+ *
+ * This is a base class for implementation of the KMyMoneyWizard. It provides
+ * the following layout of a wizard:
+ *
+ * @code
+ * +-wizardLayout-----------------------------------------------+
+ * | |
+ * +------------------------------------------------------------+
+ * |+-stepLayout--++-------------------------------------------+|
+ * || ||+-pageLayout------------------------------+||
+ * || ||| |||
+ * || ||| |||
+ * || ||| |||
+ * || ||| |||
+ * || ||| |||
+ * || ||| |||
+ * || ||+-----------------------------------------+||
+ * || |||+-buttonLayout--------------------------+|||
+ * || |||| ||||
+ * || |||+---------------------------------------+|||
+ * || ||+-----------------------------------------+||
+ * |+-------------++-------------------------------------------+|
+ * +------------------------------------------------------------+
+ * @endcode
+ *
+ * The top bar is filled with a KMyMoneyTitleLabel as known from
+ * KMyMoney's views. To the left there is an area in the same color
+ * as the title bar showing the steps for this wizard. Each such step
+ * can consist of one or more wizard pages. At the bottom of this area
+ * the text "Step x of y" is shown and updated. To the right of this
+ * part, the actual wizard page is shown. At the bottom of the page
+ * the class inserts a standard button widget consisting of a Help,
+ * Back, Next/Finish and Cancel button.
+ *
+ * The wizard serves as container for the wizard pages. In order to access
+ * the data filled into the pages, one would have to provide getter methods.
+ *
+ * Here is an example how this object could be used. Please also see the
+ * example described with the KMyMoneyWizardPage class.
+ *
+ * @code
+ *
+ * class KNewUserGeneral;
+ * class KNewUserPersonal;
+ *
+ * class KNewUserWizard : public KMyMoneyWizard
+ * {
+ * Q_OBJECT
+ * public:
+ * KNewUserWizard(QWidget* parent = 0, const char* name = 0, bool modal = false, WFlags flags = 0);
+ *
+ * private:
+ * KNewUserGeneral* m_generalPage;
+ * KNewUserPersonal* m_personalPage;
+ * KNewUserFinal* m_finalPage;
+ * // add more pages here
+ *
+ * friend class KNewUserGeneral;
+ * friend class KNewUserPersonal;
+ * friend class KNewUserFinal;
+ * // add more pages here
+ * };
+ * @endcode
+ *
+ * The implementation is also easy and looks like this:
+ *
+ * @code
+ * KNewUserWizard::KNewUserWizard(QWidget* parent, const char* name, bool modal, WFlags flags) :
+ * KMyMoneyWizard(parent, name, modal, flags)
+ * {
+ * setTitle("KMyMoney New User Setup");
+ * addStep("General Data");
+ * addStep("Personal Data");
+ * addStep("Finish");
+ *
+ * m_generalPage = new KNewUserGeneral(this);
+ * m_personalPage = new KNewUserPersonal(this);
+ * m_finalPage = new KNewUserFinal(this);
+ *
+ * setFirstPage(m_testPage1);
+ * }
+ * @endcode
+ *
+ * Don't forget to call setFirstPage() to get things started.
+ *
+ * The code to use this whole structure would then look something like this:
+ *
+ * @code
+ * KNewUserWizard* wizard = new KNewUserWizard(this, "NewUserWizard");
+ * int rc = wizard->exec();
+ * @endcode
+ *
+ * The return code of exec() is either @p QDialog::Accepted or
+ * @p QDialog::Rejected.
+ *
+ * @note The implementation of this class is heavily based on ideas found at
+ * http://doc.trolltech.com/4.1/dialogs-complexwizard.html
+ */
+class KMyMoneyWizard : public QDialog
+{
+ friend class KMyMoneyWizardPage;
+
+ Q_OBJECT
+public:
+ /**
+ * Modify the title of the wizard to be @p txt.
+ *
+ * @param txt The text that should be used as title
+ */
+ void setTitle(const QString& txt);
+
+ /**
+ * Add step @p text to the wizard
+ *
+ * @param text Text to be shown for this step
+ */
+ void addStep(const QString& text);
+
+ QValueList<KMyMoneyWizardPage*> historyPages(void) const { return m_history; }
+
+ /**
+ * This method repeats selection of the current step in the
+ * step frame.
+ * This is used to allow changes made to showing and hiding
+ * pages to immediately to be reflected in the step frame
+ */
+ void reselectStep(void);
+
+ /**
+ * Setup a global help context for the wizard. It will be used whenever
+ * there is no specific help context available for the current page.
+ *
+ * @sa KMyMoneyWizardPage::helpContext()
+ */
+ void setHelpContext(const QString& ctx) { m_helpContext = ctx; }
+
+ virtual ~KMyMoneyWizard(){}
+
+signals:
+ /**
+ * This signal is sent out, when a new payee needs to be created
+ * @sa KMyMoneyCombo::createItem()
+ *
+ * @param txt The name of the payee to be created
+ * @param id A connected slot should store the id of the created object in this variable
+ */
+ void createPayee(const QString& txt, QString& id);
+
+ /**
+ * This signal is sent out, when a new category needs to be created
+ * @sa KMyMoneyCombo::createItem()
+ *
+ * @param txt The name of the category to be created
+ * @param id A connected slot should store the id of the created object in this variable
+ */
+ void createCategory(const QString& txt, QString& id);
+
+protected:
+ /**
+ * Constructor (kept protected, so that one cannot create such an object directly)
+ */
+ KMyMoneyWizard(QWidget *parent = 0, const char *name = 0, bool modal = false, WFlags f = 0);
+
+ /**
+ * This method sets up the first page after creation of the object
+ *
+ * @param page pointer to first page of wizard
+ */
+ void setFirstPage(KMyMoneyWizardPage* page);
+
+ /**
+ * This method allows to hide or show a @p step.
+ *
+ * @param step step to be shown/hidden
+ * @param hidden hide step if true (the default) or show it if false
+ */
+ void setStepHidden(unsigned int step, bool hidden = true);
+
+protected slots:
+ virtual void accept(void);
+ void completeStateChanged(void);
+
+private:
+ void updateStepCount(void);
+
+private slots:
+ void backButtonClicked(void);
+ void nextButtonClicked(void);
+ void helpButtonClicked(void);
+
+protected:
+ /*
+ * The buttons
+ */
+ KPushButton* m_cancelButton;
+ KPushButton* m_backButton;
+ KPushButton* m_nextButton;
+ KPushButton* m_finishButton;
+ KPushButton* m_helpButton;
+
+private:
+ /**
+ * Switch to page which is currently the top of the history stack.
+ * @p oldPage is a pointer to the current page or 0 if no page
+ * is shown.
+ *
+ * @param oldPage pointer to currently displayed page
+ */
+ void switchPage(KMyMoneyWizardPage* oldPage);
+
+ /**
+ * This method selects the step given by @p step.
+ *
+ * @param step step to be selected
+ */
+ void selectStep(unsigned int step);
+
+ /*
+ * The layouts
+ */
+ QVBoxLayout* m_wizardLayout;
+ QVBoxLayout* m_stepLayout;
+ QVBoxLayout* m_pageLayout;
+ QHBoxLayout* m_buttonLayout;
+
+ /*
+ * Some misc. widgets required
+ */
+ QFrame* m_stepFrame;
+ QLabel* m_stepLabel;
+ QPalette m_stepPalette;
+
+ QValueList<QLabel*> m_steps; // the list of step labels
+ int m_step; // the currently selected step
+
+ /*
+ * The title bar
+ */
+ KMyMoneyTitleLabel* m_titleLabel;
+
+ /*
+ * The history stack
+ */
+ QValueList<KMyMoneyWizardPage*> m_history;
+
+ QString m_helpContext;
+};
+
+
+
+#endif
diff --git a/kmymoney2/widgets/kmymoneywizard_p.h b/kmymoney2/widgets/kmymoneywizard_p.h
new file mode 100644
index 0000000..92d1152
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneywizard_p.h
@@ -0,0 +1,54 @@
+/***************************************************************************
+ kmymoneywizard_p.h
+ -------------------
+ copyright : (C) 2006 by Thomas Baumagrt
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMYMONEYWIZARD_P_H
+#define KMYMONEYWIZARD_P_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qobject.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+/**
+ * @author Thomas Baumgart (C) 2006
+ *
+ * This class represents a helper object required
+ * to be able to use Qt's signal/slot mechanism within
+ * the KMyMoneyWizardPage object which cannot be
+ * derived from QObject directly.
+ */
+class KMyMoneyWizardPagePrivate : public QObject
+{
+ Q_OBJECT
+public:
+ /**
+ * Constructor
+ */
+ KMyMoneyWizardPagePrivate(QObject* parent, const char* name = 0);
+
+ void emitCompleteStateChanged(void);
+
+signals:
+ void completeStateChanged(void);
+};
+
+#endif
diff --git a/kmymoney2/widgets/kschedulebriefwidget.ui b/kmymoney2/widgets/kschedulebriefwidget.ui
new file mode 100644
index 0000000..7dc523d
--- /dev/null
+++ b/kmymoney2/widgets/kschedulebriefwidget.ui
@@ -0,0 +1,351 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>kScheduleBriefWidget</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>kScheduleBriefWidget</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>341</width>
+ <height>339</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Schedules</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>1</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>frame3</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>WinPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <property name="lineWidth">
+ <number>2</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="midLineWidth">
+ <number>100</number>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>m_prevButton</cstring>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_indexLabel</cstring>
+ </property>
+ <property name="text">
+ <string>n of n</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>70</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>m_nextButton</cstring>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout7</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>60</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>60</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Name:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>60</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>60</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Type:</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>m_name</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>m_account</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>m_type</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>60</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Account:</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QTextEdit">
+ <property name="name">
+ <cstring>m_details</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="textFormat">
+ <enum>RichText</enum>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>35</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_buttonEnter</cstring>
+ </property>
+ <property name="text">
+ <string>Enter...</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_skipButton</cstring>
+ </property>
+ <property name="text">
+ <string>Skip</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_closeButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Close</string>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>13</number>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>43</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/widgets/makekdewidgets.in b/kmymoney2/widgets/makekdewidgets.in
new file mode 100755
index 0000000..364ca1b
--- /dev/null
+++ b/kmymoney2/widgets/makekdewidgets.in
@@ -0,0 +1,197 @@
+#!@PERL@
+
+# copied from KDELIBS 3.1.4
+# modified for usage with KMyMoney
+
+use strict;
+use vars qw($group $incpath $name $out @includes $init $destroy %widgets);
+
+sub usage
+{
+ print STDERR "$_[0]\n" if @_;
+ print STDERR <<EOT;
+Usage: $0 [options] [<widget spec> ...]
+Generates a Qt designer-plugin for the widget set defined in widget spec
+or STDIN if no filename is given
+
+Options:
+ -g <group> default widget group name to display in designer
+ (default: KDE)
+ -i <path> path to prepend to include file (default: none)
+ -n <plugin name> name of the plugin class to generate
+ (default: <group>WidgetsPlugin)
+ -o <filename> write output to filename (default: STDOUT)
+EOT
+ exit 1;
+}
+
+sub warning($) { print STDERR "Warning: $_[0]\n" }
+
+my ($class, %defs);
+sub addwidget
+{
+ return if $class =~ /^(Includes|Init|Destroy)$/;
+ if(! exists $defs{IncludeFile}) {
+ $defs{IncludeFile} = join('/', $incpath, lc "$class.h") if ($incpath ne "");
+ $defs{IncludeFile} = lc "$class.h" unless ($incpath ne "");
+ }
+ $defs{ImplClass} = $class unless exists $defs{ImplClass};
+ $defs{Group} = $group unless exists $defs{Group};
+ $defs{ToolTip} = $class unless exists $defs{ToolTip};
+ $defs{WhatsThis} = $class unless exists $defs{Long};
+ $defs{IconSet} = lc "$class.png" unless exists $defs{IconSet};
+ $defs{ConstructorArgs} = '(parent, name)' unless exists $defs{ConstructorArgs};
+ $defs{IsContainer} = $defs{IsContainer} ? 'true' : 'false';
+ $widgets{$class} = { %defs };
+}
+
+$group = 'KDE';
+$incpath = "";
+
+while ($ARGV[0] =~ /^-/)
+{
+ my $opt = shift @ARGV;
+ usage "missing parameter for $opt" unless @ARGV;
+ if ($opt eq '-g') { $group = shift @ARGV }
+ elsif ($opt eq '-n') { $name = shift @ARGV }
+ elsif ($opt eq '-o') { $out = shift @ARGV }
+ elsif ($opt eq '-i') { $incpath = shift @ARGV }
+ else { usage "Unknown option $opt" }
+}
+
+$name = "${group}WidgetsPlugin" unless $name;
+warning "classname changed to \"$name\""
+ if $name =~ s/(^[^A-Za-z_]+|[^A-Za-z0-9_])/_/g;
+
+while (<>)
+{
+ chomp;
+ next if /^(#|\s*$)/;
+
+ if (/^\s*\[([A-Za-z_][A-Za-z0-9_:]*)\]\s*$/)
+ {
+ addwidget if $class;
+ %defs = {};
+ $class = $1;
+ next;
+ }
+ elsif (/^\s*\[(.*)\]\s*$/) { die "Invalid class name \"$1\"" }
+ die "Not in a widget definition" unless $class;
+ if ($class eq 'Includes') { push @includes, $_ }
+ elsif ($class eq 'Init') { $init .= "\n\t$_" }
+ elsif ($class eq 'Destroy') { $destroy .= "\n\t$_" }
+ elsif (/^\s*(IncludeFile|ImplClass|Group|ToolTip|WhatsThis|IconSet|ConstructorArgs|IsContainer)\s*=\s*(.*)\s*/)
+ {
+ $defs{$1} = $2;
+ }
+ else { die "Syntax error on line $." }
+}
+addwidget if $class;
+
+warning "Nothing to do", exit 0 unless %widgets;
+
+my @keys = sort keys %widgets;
+
+if ($out) { open OUT, ">$out" or die "Can't open $out for writing" }
+else { open OUT, ">&STDOUT" }
+
+(my $scriptname = $0) =~ s|^.*/||;
+print OUT <<EOT;
+/*
+ * This file was autogenerated by $scriptname. Any changes will be lost!
+ */
+
+#include <qwidgetplugin.h>
+// for pixmap search
+#include <kstandarddirs.h>
+
+EOT
+
+print OUT map { "#include \"$_\"\n" } @includes, map { $widgets{$_}->{IncludeFile} } @keys;
+
+print OUT <<EOT;
+
+class $name : public QWidgetPlugin
+{
+public:
+ $name();
+ virtual ~$name();
+
+ virtual QStringList keys() const
+ {
+ QStringList result;
+ for (WidgetInfos::ConstIterator it = m_widgets.begin(); it != m_widgets.end(); ++it)
+ result << it.key();
+ return result;
+ }
+ virtual QWidget *create(const QString &key, QWidget *parent = 0, const char *name = 0);
+ virtual QIconSet iconSet(const QString &key) const
+ {
+ QString path = locate("data", "kmymoney2/pics/" + m_widgets[key].iconSet);
+ return QIconSet(path);
+ }
+ virtual bool isContainer(const QString &key) const
+ {
+ return m_widgets[key].isContainer;
+ }
+EOT
+
+print OUT map { <<EOT } qw(group includeFile toolTip whatsThis);
+ virtual QString $_(const QString &key) const
+ {
+ return m_widgets[key].$_;
+ }
+EOT
+
+print OUT <<EOT;
+
+private:
+ struct WidgetInfo
+ {
+ QString group;
+ QString iconSet;
+ QString includeFile;
+ QString toolTip;
+ QString whatsThis;
+ bool isContainer;
+ };
+ typedef QMap<QString, WidgetInfo> WidgetInfos;
+ WidgetInfos m_widgets;
+};
+
+${name}::$name()
+{
+ WidgetInfo widget;
+EOT
+
+print OUT map { my $w = $_; "\n", (map { my $attr = ucfirst $_; <<EOT } qw(group iconSet includeFile toolTip whatsThis)), <<EOT } @keys;
+ widget.$_ = "$widgets{$w}->{$attr}";
+EOT
+ widget.isContainer = $widgets{$w}->{IsContainer};
+ m_widgets.insert("$_", widget);
+EOT
+
+print OUT <<EOT;
+$init
+}
+
+${name}::~$name()
+{$destroy
+}
+
+QWidget *${name}::create(const QString &key, QWidget *parent, const char *name)
+{
+EOT
+
+print OUT map { <<EOT } @keys;
+ if (key == "$_")
+ return new $widgets{$_}->{ImplClass}$widgets{$_}->{ConstructorArgs};
+EOT
+
+print OUT <<EOT;
+ return 0;
+}
+
+Q_EXPORT_PLUGIN($name)
+EOT
+
diff --git a/kmymoney2/widgets/register.cpp b/kmymoney2/widgets/register.cpp
new file mode 100644
index 0000000..974ae23
--- /dev/null
+++ b/kmymoney2/widgets/register.cpp
@@ -0,0 +1,2438 @@
+/***************************************************************************
+ register.cpp - description
+ -------------------
+ begin : Fri Mar 10 2006
+ copyright : (C) 2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include <typeinfo>
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstring.h>
+#include <qtimer.h>
+#include <qapplication.h>
+#include <qeventloop.h>
+#include <qtooltip.h>
+#include <qimage.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kglobal.h>
+#include <kdebug.h>
+#include <kurldrag.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/kmymoneydateinput.h>
+#include <kmymoney/kmymoneyedit.h>
+#include <kmymoney/kmymoneycategory.h>
+#include <kmymoney/register.h>
+#include <kmymoney/transactionform.h>
+#include <kmymoney/stdtransactiondownloaded.h>
+#include <kmymoney/stdtransactionmatched.h>
+#include "scheduledtransaction.h"
+#include "../kmymoneyglobalsettings.h"
+
+const int LinesPerMemo = 3;
+
+static QString sortOrderText[] = {
+ I18N_NOOP("Unknown"),
+ I18N_NOOP("Post date"),
+ I18N_NOOP("Date entered"),
+ I18N_NOOP("Payee"),
+ I18N_NOOP("Amount"),
+ I18N_NOOP("Number"),
+ I18N_NOOP("Entry order"),
+ I18N_NOOP("Type"),
+ I18N_NOOP("Category"),
+ I18N_NOOP("Reconcile state"),
+ I18N_NOOP("Security")
+ // add new values above this comment line
+ };
+
+using namespace KMyMoneyRegister;
+
+static unsigned char fancymarker_bg_image[] = {
+/* 200x49 */
+ 0x89,0x50,0x4E,0x47,0x0D,0x0A,0x1A,0x0A,
+ 0x00,0x00,0x00,0x0D,0x49,0x48,0x44,0x52,
+ 0x00,0x00,0x00,0xC8,0x00,0x00,0x00,0x31,
+ 0x08,0x06,0x00,0x00,0x00,0x9F,0xC5,0xE6,
+ 0x4F,0x00,0x00,0x00,0x06,0x62,0x4B,0x47,
+ 0x44,0x00,0xFF,0x00,0xFF,0x00,0xFF,0xA0,
+ 0xBD,0xA7,0x93,0x00,0x00,0x00,0x09,0x70,
+ 0x48,0x59,0x73,0x00,0x00,0x0B,0x13,0x00,
+ 0x00,0x0B,0x13,0x01,0x00,0x9A,0x9C,0x18,
+ 0x00,0x00,0x00,0x86,0x49,0x44,0x41,0x54,
+ 0x78,0xDA,0xED,0xDD,0x31,0x0A,0x84,0x40,
+ 0x10,0x44,0xD1,0x1A,0x19,0x10,0xCF,0xE6,
+ 0xFD,0x4F,0xB2,0x88,0x08,0x22,0x9B,0x18,
+ 0x4E,0x1B,0x2C,0x1B,0x18,0xBC,0x07,0x7D,
+ 0x81,0x82,0x1F,0x77,0x4B,0xB2,0x06,0x18,
+ 0xEA,0x49,0x3E,0x66,0x00,0x81,0x80,0x40,
+ 0xE0,0xDF,0x81,0x6C,0x66,0x80,0x3A,0x90,
+ 0xDD,0x0C,0x50,0x07,0x72,0x98,0x01,0xEA,
+ 0x40,0x4E,0x33,0x40,0x1D,0xC8,0x65,0x06,
+ 0x18,0x6B,0xF7,0x01,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xF0,0x16,0x3E,
+ 0x4C,0xC1,0x83,0x9E,0x64,0x32,0x03,0x08,
+ 0x04,0x7E,0x0A,0xA4,0x9B,0x01,0xEA,0x40,
+ 0x66,0x33,0x40,0x1D,0xC8,0x62,0x06,0x18,
+ 0xFB,0x02,0x05,0x87,0x08,0x55,0xFE,0xDE,
+ 0xA2,0x9D,0x00,0x00,0x00,0x00,0x49,0x45,
+ 0x4E,0x44,0xAE,0x42,0x60,0x82
+};
+
+QPixmap* GroupMarker::m_bg = 0;
+int GroupMarker::m_bgRefCnt = 0;
+
+void ItemPtrVector::sort(void)
+{
+ if(count() > 0) {
+ // get rid of 0 pointers in the list
+ KMyMoneyRegister::ItemPtrVector::iterator it_l;
+ RegisterItem *item;
+ for(it_l = begin(); it_l != end(); ++it_l) {
+ if(*it_l == 0) {
+ item = last();
+ *it_l = item;
+ pop_back();
+ --it_l;
+ }
+ }
+
+ std::sort(begin(), end(), item_cmp);
+ }
+}
+
+bool ItemPtrVector::item_cmp(RegisterItem* i1, RegisterItem* i2)
+{
+ const QValueList<TransactionSortField>& sortOrder = i1->parent()->sortOrder();
+ QValueList<TransactionSortField>::const_iterator it;
+ int rc = 0;
+ bool ok1, ok2;
+ Q_ULLONG n1, n2;
+
+ MyMoneyMoney tmp;
+
+ for(it = sortOrder.begin(); it != sortOrder.end(); ++it) {
+ TransactionSortField sortField = static_cast<TransactionSortField>(abs(*it));
+ switch(sortField) {
+ case PostDateSort:
+ rc = i2->sortPostDate().daysTo(i1->sortPostDate());
+ if(rc == 0) {
+ rc = i1->sortSamePostDate() - i2->sortSamePostDate();
+ }
+ break;
+
+ case EntryDateSort:
+ rc = i2->sortEntryDate().daysTo(i1->sortEntryDate());
+ break;
+
+ case PayeeSort:
+ rc = QString::localeAwareCompare(i1->sortPayee(), i2->sortPayee());
+ break;
+
+ case ValueSort:
+ tmp = i1->sortValue() - i2->sortValue();
+ if(tmp.isZero())
+ rc = 0;
+ else if(tmp.isNegative())
+ rc = -1;
+ else
+ rc = 1;
+ break;
+
+ case NoSort:
+ // convert both values to numbers
+ n1 = i1->sortNumber().toULongLong(&ok1);
+ n2 = i2->sortNumber().toULongLong(&ok2);
+ // the following four cases exist:
+ // a) both are converted correct
+ // compare them directly
+ // b) n1 is numeric, n2 is not
+ // numbers come first, so return -1
+ // c) n1 is not numeric, n2 is
+ // numbers come first, so return 1
+ // d) both are non numbers
+ // compare using localeAwareCompare
+ if(ok1 && ok2) { // case a)
+ rc = (n1 > n2) ? 1 : ((n1 == n2 ) ? 0 : -1);
+ } else if(ok1 && !ok2) {
+ rc = -1;
+ } else if(!ok1 && ok2) {
+ rc = 1;
+ } else
+ rc = QString::localeAwareCompare(i1->sortNumber(), i2->sortNumber());
+ break;
+
+ case EntryOrderSort:
+ rc = qstrcmp(i1->sortEntryOrder(), i2->sortEntryOrder());
+ break;
+
+ case TypeSort:
+ rc = i1->sortType() - i2->sortType();
+ break;
+
+ case CategorySort:
+ rc = QString::localeAwareCompare(i1->sortCategory(), i2->sortCategory());
+ break;
+
+ case ReconcileStateSort:
+ rc = static_cast<int>(i1->sortReconcileState()) - static_cast<int>(i2->sortReconcileState());
+ break;
+
+ case SecuritySort:
+ rc = QString::localeAwareCompare(i1->sortSecurity(), i2->sortSecurity());
+ break;
+
+ default:
+ qDebug("Invalid sort key %d", *it);
+ break;
+ }
+
+ // the items differ for this sort key so we can return a result
+ if(rc != 0)
+ return (*it < 0) ? rc >= 0 : rc < 0;
+ }
+
+ if(rc == 0) {
+ rc = qstrcmp(i1->sortEntryOrder(), i2->sortEntryOrder());
+ }
+
+ return rc < 0;
+}
+
+GroupMarker::GroupMarker(Register *parent, const QString& txt) :
+ RegisterItem(parent),
+ m_txt(txt),
+ m_drawCounter(parent->drawCounter()-1), // make sure we get painted the first time around
+ m_showDate(false)
+{
+ int h;
+ if(m_parent) {
+ h = m_parent->rowHeightHint();
+ } else {
+ QFontMetrics fm( KMyMoneyGlobalSettings::listCellFont() );
+ h = fm.lineSpacing()+6;
+ }
+
+ if(m_bg && (m_bg->height() != h)) {
+ delete m_bg;
+ m_bg = 0;
+ }
+
+ // convert the backgroud once
+ if(m_bg == 0) {
+ m_bg = new QPixmap;
+ m_bg->loadFromData(fancymarker_bg_image, sizeof(fancymarker_bg_image));
+
+ // for now, we can't simply resize the m_bg member as Qt does not support
+ // alpha resizing. So we take the (slow) detour through a QImage object
+ // which is ok, since we do this only once.
+ // m_bg->resize(m_bg->width(), h);
+ QImage img(m_bg->convertToImage());
+ img = img.smoothScale(img.width(), h);
+ m_bg->convertFromImage(img);
+ }
+
+ ++m_bgRefCnt;
+}
+
+GroupMarker::~GroupMarker()
+{
+ --m_bgRefCnt;
+ if(!m_bgRefCnt) {
+ delete m_bg;
+ m_bg = 0;
+ }
+}
+
+void GroupMarker::paintRegisterCell(QPainter* painter, int row, int /* col */, const QRect& _r, bool /*selected*/, const QColorGroup& _cg)
+{
+ // avoid painting the marker twice for the same update round
+ unsigned int drawCounter = m_parent->drawCounter();
+ if(m_drawCounter == drawCounter) {
+ return;
+ }
+ m_drawCounter = drawCounter;
+
+ QRect r(_r);
+ painter->save();
+ painter->translate(-r.x(), -r.y());
+
+ // the group marker always uses all cols
+ r.setX(m_parent->columnPos(0));
+ r.setWidth(m_parent->visibleWidth());
+ painter->translate(r.x(), r.y());
+
+ QRect cellRect;
+ cellRect.setX(0);
+ cellRect.setY(0);
+ cellRect.setWidth(m_parent->visibleWidth());
+ cellRect.setHeight(m_parent->rowHeight(row + m_startRow));
+
+ // clear out cell rectangle
+ QColorGroup cg(_cg);
+ setupColors(cg);
+
+ QBrush backgroundBrush(cg.base());
+ painter->fillRect(cellRect, backgroundBrush);
+ painter->setPen(KMyMoneyGlobalSettings::listGridColor());
+ painter->drawLine(cellRect.x(), cellRect.height()-1, cellRect.width(), cellRect.height()-1);
+
+ // now write the text
+ painter->setPen(cg.text());
+ QFont font = painter->font();
+ font.setBold(true);
+ painter->setFont(font);
+
+ painter->drawText(cellRect, Qt::AlignVCenter | Qt::AlignCenter, m_txt);
+
+ cellRect.setHeight(m_bg->height());
+ int curWidth = m_bg->width();
+
+ // if the background image is too small (not wide enough) we need to increase its width.
+ if(curWidth < cellRect.width()) {
+ QPixmap* newPic = new QPixmap(cellRect.width(), cellRect.height());
+ int x = 0;
+ while(x < cellRect.width()) {
+ copyBlt(newPic, x, 0, m_bg, 0, 0, curWidth, m_bg->height());
+ x += curWidth;
+ }
+ delete m_bg;
+ m_bg = newPic;
+ }
+
+ // now it's time to draw the background
+ painter->drawPixmap(cellRect, *m_bg);
+
+ // translate back
+ painter->translate(-r.x(), -r.y());
+
+ // in case we need to show the date, we just paint it in col 1
+ if(m_showDate) {
+ r.setX(m_parent->columnPos(1));
+ r.setWidth(m_parent->columnWidth(1));
+ painter->translate(r.x(), r.y());
+
+ cellRect.setX(0);
+ cellRect.setY(0);
+ cellRect.setWidth(m_parent->columnWidth(1));
+ cellRect.setHeight(m_parent->rowHeight(row + m_startRow));
+
+ font.setBold(false);
+ painter->setFont(font);
+ painter->drawText(cellRect, Qt::AlignVCenter | Qt::AlignCenter, KGlobal::locale()->formatDate(sortPostDate(), true));
+ }
+
+ painter->restore();
+}
+
+void GroupMarker::setupColors(QColorGroup& cg)
+{
+ cg.setColor(QColorGroup::Base, KMyMoneyGlobalSettings::groupMarkerColor());
+}
+
+int GroupMarker::rowHeightHint(void) const
+{
+ if(!m_visible)
+ return 0;
+
+ return m_bg->height();
+}
+
+StatementGroupMarker::StatementGroupMarker(Register* parent, CashFlowDirection dir, const QDate& date, const QString& txt) :
+ FancyDateGroupMarker(parent, date, txt),
+ m_dir(dir)
+{
+ m_showDate = true;
+}
+
+FancyDateGroupMarker::FancyDateGroupMarker(Register* parent, const QDate& date, const QString& txt) :
+ GroupMarker(parent, txt),
+ m_date(date)
+{
+}
+
+FiscalYearGroupMarker::FiscalYearGroupMarker(Register* parent, const QDate& date, const QString& txt) :
+ FancyDateGroupMarker(parent, date, txt)
+{
+}
+
+void FiscalYearGroupMarker::setupColors(QColorGroup& cg)
+{
+ cg.setColor(QColorGroup::Base, KMyMoneyGlobalSettings::groupMarkerColor());
+}
+
+
+SimpleDateGroupMarker::SimpleDateGroupMarker(Register* parent, const QDate& date, const QString& txt) :
+ FancyDateGroupMarker(parent, date, txt)
+{
+}
+
+int SimpleDateGroupMarker::rowHeightHint(void) const
+{
+ if(!m_visible)
+ return 0;
+
+ return RegisterItem::rowHeightHint() / 2;
+}
+
+void SimpleDateGroupMarker::paintRegisterCell(QPainter* painter, int row, int /*col*/, const QRect& _r, bool /*selected*/, const QColorGroup& _cg)
+{
+ QRect r(_r);
+ painter->save();
+ painter->translate(-r.x(), -r.y());
+
+ // the group marker always uses all cols
+ r.setX(m_parent->columnPos(0));
+ r.setWidth(m_parent->visibleWidth());
+ painter->translate(r.x(), r.y());
+
+ QRect cellRect;
+ cellRect.setX(0);
+ cellRect.setY(0);
+ cellRect.setWidth(m_parent->visibleWidth());
+ cellRect.setHeight(m_parent->rowHeight(row + m_startRow));
+
+ // clear out cell rectangle
+ QColorGroup cg(_cg);
+ if(m_alternate)
+ cg.setColor(QColorGroup::Base, KMyMoneyGlobalSettings::listColor());
+ else
+ cg.setColor(QColorGroup::Base, KMyMoneyGlobalSettings::listBGColor());
+ QBrush backgroundBrush(cg.base());
+ // backgroundBrush.setStyle(Qt::DiagCrossPattern);
+ backgroundBrush.setStyle(Qt::Dense5Pattern);
+ backgroundBrush.setColor(KMyMoneyGlobalSettings::listGridColor());
+ painter->eraseRect(cellRect);
+ painter->fillRect(cellRect, backgroundBrush);
+ painter->setPen(KMyMoneyGlobalSettings::listGridColor());
+ painter->drawLine(cellRect.x(), cellRect.height()-1, cellRect.width(), cellRect.height()-1);
+
+ painter->restore();
+}
+
+TypeGroupMarker::TypeGroupMarker(Register* parent, CashFlowDirection dir, MyMoneyAccount::accountTypeE accType) :
+ GroupMarker(parent),
+ m_dir(dir)
+{
+ switch(dir) {
+ case Deposit:
+ m_txt = i18n("Deposits onto account", "Deposits");
+ if(accType == MyMoneyAccount::CreditCard) {
+ m_txt = i18n("Payments towards credit card", "Payments");
+ }
+ break;
+ case Payment:
+ m_txt = i18n("Payments made from account", "Payments");
+ if(accType == MyMoneyAccount::CreditCard) {
+ m_txt = i18n("Payments made with credit card", "Charges");
+ }
+ break;
+ default:
+ qDebug("Unknown CashFlowDirection %d for TypeGroupMarker constructor", dir);
+ break;
+ }
+}
+
+PayeeGroupMarker::PayeeGroupMarker(Register* parent, const QString& name) :
+ GroupMarker(parent, name)
+{
+}
+
+CategoryGroupMarker::CategoryGroupMarker(Register* parent, const QString& category) :
+ GroupMarker(parent, category)
+{
+}
+
+ReconcileGroupMarker::ReconcileGroupMarker(Register* parent, MyMoneySplit::reconcileFlagE state) :
+ GroupMarker(parent),
+ m_state(state)
+{
+ switch(state) {
+ case MyMoneySplit::NotReconciled:
+ m_txt = i18n("Reconcile state 'Not reconciled'", "Not reconciled");
+ break;
+ case MyMoneySplit::Cleared:
+ m_txt = i18n("Reconcile state 'Cleared'", "Cleared");
+ break;
+ case MyMoneySplit::Reconciled:
+ m_txt = i18n("Reconcile state 'Reconciled'", "Reconciled");
+ break;
+ case MyMoneySplit::Frozen:
+ m_txt = i18n("Reconcile state 'Frozen'", "Frozen");
+ break;
+ default:
+ m_txt = i18n("Unknown");
+ break;
+ }
+}
+
+class RegisterToolTip : public QToolTip
+{
+public:
+ RegisterToolTip(QWidget* parent, Register* reg);
+ void maybeTip(const QPoint& pos);
+ virtual ~RegisterToolTip() {}
+
+private:
+ Register* m_register;
+};
+
+RegisterToolTip::RegisterToolTip(QWidget* parent, Register * reg) :
+ QToolTip(parent),
+ m_register(reg)
+{
+}
+
+void RegisterToolTip::maybeTip(const QPoint& pos)
+{
+ // if we update the register, there's no need to show tooltips
+ if(!m_register->isUpdatesEnabled())
+ return;
+
+ QPoint cpos = m_register->viewportToContents(pos);
+ // qDebug("RegisterToolTip::mayBeTip(%d,%d)", cpos.x(), cpos.y());
+ int row = m_register->rowAt(cpos.y());
+ int col = m_register->columnAt(cpos.x());
+ RegisterItem* item = m_register->itemAtRow(row);
+ if(!item)
+ return;
+
+ QPoint relPos(cpos.x() - m_register->columnPos(0), cpos.y() - m_register->rowPos(item->startRow()));
+ row = row - item->startRow();
+
+ // qDebug("row = %d, col = %d", row, col);
+ // qDebug("relpos = %d,%d", relPos.x(), relPos.y());
+ QString msg;
+ QRect rect;
+ if(!item->maybeTip(cpos, row, col, rect, msg))
+ return;
+
+ QPoint tl(rect.topLeft());
+ QPoint br(rect.bottomRight());
+ QRect r = QRect(m_register->contentsToViewport(tl), m_register->contentsToViewport(br));
+ tip(r, msg);
+ return;
+}
+
+Register::Register(QWidget *parent, const char *name ) :
+ TransactionEditorContainer(parent, name),
+ m_selectAnchor(0),
+ m_focusItem(0),
+ m_firstItem(0),
+ m_lastItem(0),
+ m_firstErronous(0),
+ m_lastErronous(0),
+ m_markErronousTransactions(0),
+ m_rowHeightHint(0),
+ m_ledgerLensForced(false),
+ m_selectionMode(Multi),
+ m_listsDirty(false),
+ m_ignoreNextButtonRelease(false),
+ m_needInitialColumnResize(false),
+ m_buttonState(Qt::ButtonState(0)),
+ m_drawCounter(0)
+{
+ m_tooltip = new RegisterToolTip(viewport(), this);
+
+ setNumCols(MaxColumns);
+ setCurrentCell(0, 1);
+ // we do our own sorting
+ setSorting(false);
+
+ // keep the following list in sync with KMyMoneyRegister::Column in transaction.h
+ horizontalHeader()->setLabel(NumberColumn, i18n("No."));
+ horizontalHeader()->setLabel(DateColumn, i18n("Date"));
+ horizontalHeader()->setLabel(AccountColumn, i18n("Account"));
+ horizontalHeader()->setLabel(SecurityColumn, i18n("Security"));
+ horizontalHeader()->setLabel(DetailColumn, i18n("Details"));
+ horizontalHeader()->setLabel(ReconcileFlagColumn, i18n("C"));
+ horizontalHeader()->setLabel(PaymentColumn, i18n("Payment"));
+ horizontalHeader()->setLabel(DepositColumn, i18n("Deposit"));
+ horizontalHeader()->setLabel(QuantityColumn, i18n("Quantity"));
+ horizontalHeader()->setLabel(PriceColumn, i18n("Price"));
+ horizontalHeader()->setLabel(ValueColumn, i18n("Value"));
+ horizontalHeader()->setLabel(BalanceColumn, i18n("Balance"));
+
+ setLeftMargin(0);
+ verticalHeader()->hide();
+
+ for(int i = 0; i < numCols(); ++i)
+ setColumnStretchable(i, false);
+
+ horizontalHeader()->setResizeEnabled(false);
+ horizontalHeader()->setMovingEnabled(false);
+ horizontalHeader()->setClickEnabled(false);
+
+ horizontalHeader()->installEventFilter(this);
+
+ // never show horizontal scroll bars
+ setHScrollBarMode(QScrollView::AlwaysOff);
+
+ connect(this, SIGNAL(clicked(int, int, int, const QPoint&)), this, SLOT(selectItem(int, int, int, const QPoint&)));
+ connect(this, SIGNAL(doubleClicked(int, int, int, const QPoint&)), this, SLOT(slotDoubleClicked(int, int, int, const QPoint&)));
+
+ // double clicking the header turns on auto column sizing
+ connect(horizontalHeader(), SIGNAL(sectionSizeChanged(int)), this, SLOT(slotAutoColumnSizing(int)));
+
+ //DND
+ setAcceptDrops(true);
+}
+
+// DND
+Transaction* Register::dropTransaction(QPoint cPos) const
+{
+ Transaction* t = 0;
+ cPos -= QPoint( verticalHeader()->width(), horizontalHeader()->height() );
+ if(cPos.y() >= 0) {
+ cPos += QPoint(contentsX(), contentsY());
+ int row = rowAt(cPos.y());
+ t = dynamic_cast<Transaction*>(itemAtRow(row));
+ }
+ return t;
+}
+
+void Register::dragMoveEvent(QDragMoveEvent* event)
+{
+ if ( KURLDrag::canDecode(event) ) {
+ event->ignore();
+ Transaction* t = dropTransaction(event->pos());
+ if(t && !t->isScheduled()) {
+ event->accept();
+ }
+ }
+}
+
+void Register::dropEvent(QDropEvent* event)
+{
+ qDebug("Register::dropEvent");
+ if ( KURLDrag::canDecode(event) ) {
+ event->ignore();
+ Transaction* t = dropTransaction(event->pos());
+ if(t && !t->isScheduled()) {
+ qDebug("Drop was ok");
+ KURL::List urls;
+ KURLDrag::decode(event, urls);
+ qDebug("List is '%s'", urls.toStringList().join(";").data());
+ event->accept();
+ }
+ }
+}
+// DND end
+
+
+Register::~Register()
+{
+ clear();
+ delete m_tooltip;
+ m_tooltip = 0;
+}
+
+void Register::slotAutoColumnSizing(int section)
+{
+ Q_UNUSED(section)
+#if 0
+ // this is some trial code to make the col sizes adjustable
+ // there are some drawbacks though: what when we have a register
+ // but no account? (ipwizard 2007-11-06)
+ if(isUpdatesEnabled()) {
+ int w = visibleWidth();
+ QString size;
+ for(int i=0; i < numCols(); ++i) {
+ if(i)
+ size += ",";
+ if(i == DetailColumn) {
+ size += "0";
+ continue;
+ }
+ size += QString("%1").arg((columnWidth(i) * 100) / w);
+ }
+ qDebug("size = %s", size.data());
+ m_account.setValue("kmm-ledger-column-width", size);
+ }
+#endif
+}
+
+bool Register::eventFilter(QObject* o, QEvent* e)
+{
+ if(o == horizontalHeader() && e->type() == QEvent::MouseButtonPress) {
+ QMouseEvent *me = dynamic_cast<QMouseEvent*>(e);
+ if(me->button() == Qt::RightButton) {
+ emit headerClicked();
+ }
+ // eat up left mouse button press for now
+ return true;
+
+ } else if(o == horizontalHeader() && e->type() == QEvent::Paint) {
+ // always show the header in bold (to suppress cell selection)
+ QFont f(horizontalHeader()->font());
+ f.setBold(true);
+ horizontalHeader()->setFont(f);
+
+ } else if(o == this && e->type() == QEvent::KeyPress) {
+ QKeyEvent* ke = dynamic_cast<QKeyEvent*>(e);
+ if(ke->key() == Qt::Key_Menu) {
+ emit openContextMenu();
+ return true;
+ }
+ }
+
+ return QTable::eventFilter(o, e);
+}
+
+void Register::setupRegister(const MyMoneyAccount& account, const QValueList<Column>& cols)
+{
+ m_account = account;
+ bool enabled = isUpdatesEnabled();
+ setUpdatesEnabled(false);
+
+ for(int i = 0; i < MaxColumns; ++i)
+ hideColumn(i);
+
+ m_needInitialColumnResize = true;
+
+ m_lastCol = static_cast<Column>(0);
+ QValueList<Column>::const_iterator it_c;
+ for(it_c = cols.begin(); it_c != cols.end(); ++it_c) {
+ if((*it_c) > MaxColumns)
+ continue;
+ showColumn(*it_c);
+ if(*it_c > m_lastCol)
+ m_lastCol = *it_c;
+ }
+
+ setUpdatesEnabled(enabled);
+}
+
+void Register::setupRegister(const MyMoneyAccount& account, bool showAccountColumn)
+{
+ m_account = account;
+ bool enabled = isUpdatesEnabled();
+ setUpdatesEnabled(false);
+
+ for(int i = 0; i < MaxColumns; ++i)
+ hideColumn(i);
+
+ horizontalHeader()->setLabel(PaymentColumn, i18n("Payment made from account", "Payment"));
+ horizontalHeader()->setLabel(DepositColumn, i18n("Deposit into account", "Deposit"));
+
+ if(account.id().isEmpty()) {
+ setUpdatesEnabled(enabled);
+ return;
+ }
+
+ m_needInitialColumnResize = true;
+
+ // turn on standard columns
+ showColumn(DateColumn);
+ showColumn(DetailColumn);
+ showColumn(ReconcileFlagColumn);
+
+ // balance
+ switch(account.accountType()) {
+ case MyMoneyAccount::Stock:
+ break;
+ default:
+ showColumn(BalanceColumn);
+ break;
+ }
+
+ // Number column
+ switch(account.accountType()) {
+ case MyMoneyAccount::Savings:
+ case MyMoneyAccount::Cash:
+ case MyMoneyAccount::Loan:
+ case MyMoneyAccount::AssetLoan:
+ case MyMoneyAccount::Asset:
+ case MyMoneyAccount::Liability:
+ case MyMoneyAccount::Equity:
+ if(KMyMoneyGlobalSettings::alwaysShowNrField())
+ showColumn(NumberColumn);
+ break;
+
+ case MyMoneyAccount::Checkings:
+ case MyMoneyAccount::CreditCard:
+ showColumn(NumberColumn);
+ break;
+
+ default:
+ hideColumn(NumberColumn);
+ break;
+ }
+
+ switch(account.accountType()) {
+ case MyMoneyAccount::Income:
+ case MyMoneyAccount::Expense:
+ showAccountColumn = true;
+ break;
+ default:
+ break;
+ }
+
+ if(showAccountColumn)
+ showColumn(AccountColumn);
+
+ // Security, activity, payment, deposit, amount, price and value column
+ switch(account.accountType()) {
+ default:
+ showColumn(PaymentColumn);
+ showColumn(DepositColumn);
+ break;
+
+ case MyMoneyAccount::Investment:
+ showColumn(SecurityColumn);
+ showColumn(QuantityColumn);
+ showColumn(PriceColumn);
+ showColumn(ValueColumn);
+ break;
+ }
+
+ // headings
+ switch(account.accountType()) {
+ case MyMoneyAccount::CreditCard:
+ horizontalHeader()->setLabel(PaymentColumn, i18n("Payment made with credit card", "Charge"));
+ horizontalHeader()->setLabel(DepositColumn, i18n("Payment towards credit card", "Payment"));
+ break;
+ case MyMoneyAccount::Asset:
+ case MyMoneyAccount::AssetLoan:
+ horizontalHeader()->setLabel(PaymentColumn, i18n("Decrease of asset/liability value", "Decrease"));
+ horizontalHeader()->setLabel(DepositColumn, i18n("Increase of asset/liability value", "Increase"));
+ break;
+ case MyMoneyAccount::Liability:
+ case MyMoneyAccount::Loan:
+ horizontalHeader()->setLabel(PaymentColumn, i18n("Increase of asset/liability value", "Increase"));
+ horizontalHeader()->setLabel(DepositColumn, i18n("Decrease of asset/liability value", "Decrease"));
+ break;
+ case MyMoneyAccount::Income:
+ case MyMoneyAccount::Expense:
+ horizontalHeader()->setLabel(PaymentColumn, i18n("Income"));
+ horizontalHeader()->setLabel(DepositColumn, i18n("Expense"));
+ break;
+
+ default:
+ break;
+ }
+
+ switch(account.accountType()) {
+ default:
+ m_lastCol = BalanceColumn;
+ break;
+ }
+
+ setUpdatesEnabled(enabled);
+}
+
+bool Register::focusNextPrevChild(bool next)
+{
+ return QFrame::focusNextPrevChild(next);
+}
+
+void Register::setSortOrder(const QString& order)
+{
+ QStringList orderList = QStringList::split(",", order);
+ QStringList::const_iterator it;
+ m_sortOrder.clear();
+ for(it = orderList.begin(); it != orderList.end(); ++it) {
+ m_sortOrder << static_cast<TransactionSortField>((*it).toInt());
+ }
+}
+
+void Register::sortItems(void)
+{
+ if(m_items.count() == 0)
+ return;
+
+ // sort the array of pointers to the transactions
+ m_items.sort();
+
+ // update the next/prev item chains
+ RegisterItem* prev = 0;
+ RegisterItem* item;
+ m_firstItem = m_lastItem = 0;
+ for(QValueVector<RegisterItem*>::size_type i = 0; i < m_items.size(); ++i) {
+ item = m_items[i];
+ if(!item)
+ continue;
+
+ if(!m_firstItem)
+ m_firstItem = item;
+ m_lastItem = item;
+ if(prev)
+ prev->setNextItem(item);
+ item->setPrevItem(prev);
+ item->setNextItem(0);
+ prev = item;
+ }
+
+ // update the balance visibility settings
+ item = m_lastItem;
+ bool showBalance = true;
+ while(item) {
+ Transaction* t = dynamic_cast<Transaction*>(item);
+ if(t) {
+ t->setShowBalance(showBalance);
+ if(!t->isVisible()) {
+ showBalance = false;
+ }
+ }
+ item = item->prevItem();
+ }
+
+ // force update of the item index (row to item array)
+ m_listsDirty = true;
+}
+
+TransactionSortField Register::primarySortKey(void) const
+{
+ if(!m_sortOrder.isEmpty())
+ return static_cast<KMyMoneyRegister::TransactionSortField>(abs(m_sortOrder.first()));
+ return UnknownSort;
+}
+
+
+void Register::clear(void)
+{
+ m_firstErronous = m_lastErronous = 0;
+ m_ensureVisibleItem = 0;
+
+ RegisterItem* p;
+ while((p = firstItem()) != 0) {
+ delete p;
+ }
+ m_items.clear();
+
+ m_firstItem = m_lastItem = 0;
+
+ m_listsDirty = true;
+ m_selectAnchor = 0;
+ m_focusItem = 0;
+
+#ifndef KMM_DESIGNER
+ // recalculate row height hint
+ QFontMetrics fm( KMyMoneyGlobalSettings::listCellFont() );
+ m_rowHeightHint = fm.lineSpacing()+6;
+#endif
+
+ m_needInitialColumnResize = true;
+}
+
+void Register::insertItemAfter(RegisterItem*p, RegisterItem* prev)
+{
+ RegisterItem* next = 0;
+ if(!prev)
+ prev = lastItem();
+
+ if(prev) {
+ next = prev->nextItem();
+ prev->setNextItem(p);
+ }
+ if(next)
+ next->setPrevItem(p);
+
+ p->setPrevItem(prev);
+ p->setNextItem(next);
+
+ if(!m_firstItem)
+ m_firstItem = p;
+ if(!m_lastItem)
+ m_lastItem = p;
+
+ if(prev == m_lastItem)
+ m_lastItem = p;
+
+ m_listsDirty = true;
+}
+
+void Register::addItem(RegisterItem* p)
+{
+ RegisterItem* q = lastItem();
+ if(q)
+ q->setNextItem(p);
+ p->setPrevItem(q);
+ p->setNextItem(0);
+
+ m_items.append(p);
+
+ if(!m_firstItem)
+ m_firstItem = p;
+ m_lastItem = p;
+ m_listsDirty = true;
+}
+
+void Register::removeItem(RegisterItem* p)
+{
+ // remove item from list
+ if(p->prevItem())
+ p->prevItem()->setNextItem(p->nextItem());
+ if(p->nextItem())
+ p->nextItem()->setPrevItem(p->prevItem());
+
+ // update first and last pointer if required
+ if(p == m_firstItem)
+ m_firstItem = p->nextItem();
+ if(p == m_lastItem)
+ m_lastItem = p->prevItem();
+
+ // make sure we don't do it twice
+ p->setNextItem(0);
+ p->setPrevItem(0);
+
+ // remove it from the m_items array
+ for(QValueVector<RegisterItem*>::size_type i = 0; i < m_items.size(); ++i) {
+ RegisterItem* item = m_items[i];
+ if(!item)
+ continue;
+ if(item == p) {
+ m_items[i] = 0;
+ break;
+ }
+ }
+ m_listsDirty = true;
+}
+
+RegisterItem* Register::firstItem(void) const
+{
+ return m_firstItem;
+}
+
+RegisterItem* Register::lastItem(void) const
+{
+ return m_lastItem;
+}
+
+void Register::setupItemIndex(int rowCount)
+{
+ // setup index array
+ m_itemIndex.clear();
+ m_itemIndex.reserve(rowCount);
+
+ // fill index array
+ rowCount = 0;
+ RegisterItem* prev = 0;
+ m_firstItem = m_lastItem = 0;
+ for(QValueVector<RegisterItem*>::size_type i = 0; i < m_items.size(); ++i) {
+ RegisterItem* item = m_items[i];
+ if(!item)
+ continue;
+ if(!m_firstItem)
+ m_firstItem = item;
+ m_lastItem = item;
+ if(prev)
+ prev->setNextItem(item);
+ item->setPrevItem(prev);
+ item->setNextItem(0);
+ prev = item;
+ for(int j = item->numRowsRegister(); j; --j) {
+ m_itemIndex.push_back(item);
+ }
+ }
+}
+
+void Register::drawContents( QPainter *p, int cx, int cy, int cw, int ch )
+{
+ // the QTable::drawContents() method does not honor the block update flag
+ // so we take care of it here
+ if ( testWState(WState_Visible|WState_BlockUpdates) != WState_Visible )
+ return;
+
+ if(m_listsDirty) {
+ updateRegister(KMyMoneyGlobalSettings::ledgerLens() | !KMyMoneyGlobalSettings::transactionForm());
+ }
+
+ ++m_drawCounter;
+ QTable::drawContents(p, cx, cy, cw, ch);
+}
+
+void Register::updateAlternate(void) const
+{
+ bool alternate = false;
+ for(QValueVector<RegisterItem*>::size_type i = 0; i < m_items.size(); ++i) {
+ RegisterItem* item = m_items[i];
+ if(!item)
+ continue;
+ if(item->isVisible()) {
+ item->setAlternate(alternate);
+ alternate ^= true;
+ }
+ }
+}
+
+void Register::suppressAdjacentMarkers(void)
+{
+ bool lastWasGroupMarker = false;
+ KMyMoneyRegister::RegisterItem* p = lastItem();
+ KMyMoneyRegister::Transaction* t = dynamic_cast<KMyMoneyRegister::Transaction*>(p);
+ if(t && t->transaction().id().isEmpty()) {
+ lastWasGroupMarker = true;
+ p = p->prevItem();
+ }
+ while(p) {
+ KMyMoneyRegister::GroupMarker* m = dynamic_cast<KMyMoneyRegister::GroupMarker*>(p);
+ if(m) {
+ // make adjacent group marker invisible except those that show statement information
+ if(lastWasGroupMarker && (dynamic_cast<KMyMoneyRegister::StatementGroupMarker*>(m) == 0)) {
+ m->setVisible(false);
+ }
+ lastWasGroupMarker = true;
+ } else if(p->isVisible())
+ lastWasGroupMarker = false;
+ p = p->prevItem();
+ }
+}
+
+void Register::updateRegister(bool forceUpdateRowHeight)
+{
+ ::timetrace("Update register");
+ if(m_listsDirty || forceUpdateRowHeight) {
+ // don't get in here recursively
+ m_listsDirty = false;
+
+ int rowCount = 0;
+ // determine the number of rows we need to display all items
+ // while going through the list, check for erronous transactions
+ for(QValueVector<RegisterItem*>::size_type i = 0; i < m_items.size(); ++i) {
+ RegisterItem* item = m_items[i];
+ if(!item)
+ continue;
+ item->setStartRow(rowCount);
+ item->setNeedResize();
+ rowCount += item->numRowsRegister();
+
+ if(item->isErronous()) {
+ if(!m_firstErronous)
+ m_firstErronous = item;
+ m_lastErronous = item;
+ }
+ }
+
+ updateAlternate();
+
+ // create item index
+ setupItemIndex(rowCount);
+
+ bool needUpdateHeaders = (numRows() != rowCount) | forceUpdateRowHeight;
+
+ // setup QTable. Make sure to suppress screen updates for now
+ bool updatesEnabled = isUpdatesEnabled();
+ setUpdatesEnabled(false);
+ setNumRows(rowCount);
+
+ // if we need to update the headers, we do it now for all rows
+ // again we make sure to suppress screen updates
+ if(needUpdateHeaders) {
+ // int height = rowHeightHint();
+
+ verticalHeader()->setUpdatesEnabled(false);
+
+ for(int i = 0; i < rowCount; ++i) {
+ RegisterItem* item = itemAtRow(i);
+ if(item->isVisible()) {
+ showRow(i);
+ } else {
+ hideRow(i);
+ }
+ verticalHeader()->resizeSection(i, item->rowHeightHint());
+ }
+ verticalHeader()->setUpdatesEnabled(true);
+ }
+
+ // add or remove scrollbars as required
+ updateScrollBars();
+
+ setUpdatesEnabled(updatesEnabled);
+
+ // force resizeing of the columns if necessary
+ if(m_needInitialColumnResize) {
+ QTimer::singleShot(0, this, SLOT(resize()));
+ m_needInitialColumnResize = false;
+ } else {
+ updateContents();
+
+ // if the number of rows changed, we might need to resize the register
+ // to make sure we reflect the current visibility of the scrollbars.
+ if(needUpdateHeaders)
+ QTimer::singleShot(0, this, SLOT(resize()));
+ }
+ }
+ ::timetrace("Done updateing register");
+}
+
+int Register::rowHeightHint(void) const
+{
+ if(!m_rowHeightHint) {
+ qDebug("Register::rowHeightHint(): m_rowHeightHint is zero!!");
+ }
+ return m_rowHeightHint;
+}
+
+void Register::paintCell(QPainter* painter, int row, int col, const QRect& r, bool selected, const QColorGroup& cg)
+{
+ // determine the item that we need to paint in the row and call it's paintRegisterCell() method
+ if((row < 0) || ((unsigned)row > m_itemIndex.size())) {
+ qDebug("Register::paintCell: row %d out of bounds %d", row, (int)m_itemIndex.size());
+ return;
+ }
+
+ // qDebug("paintCell(%d,%d)", row, col);
+ RegisterItem* const item = m_itemIndex[row];
+ item->paintRegisterCell(painter, row - item->startRow(), col, r, selected, cg);
+}
+
+void Register::focusInEvent(QFocusEvent* ev)
+{
+ QTable::focusInEvent(ev);
+ if(m_focusItem) {
+ m_focusItem->setFocus(true, false);
+ repaintItems(m_focusItem);
+ }
+}
+
+void Register::focusOutEvent(QFocusEvent* ev)
+{
+ if(m_focusItem) {
+ m_focusItem->setFocus(false, false);
+ repaintItems(m_focusItem);
+ }
+ QTable::focusOutEvent(ev);
+}
+
+void Register::resize(void)
+{
+ resize(DetailColumn);
+}
+
+void Register::resize(int col)
+{
+ bool enabled = isUpdatesEnabled();
+ setUpdatesEnabled(false);
+
+ // resize the register
+ int w = visibleWidth();
+
+ // TODO I was playing a bit with manual ledger resizing but could not get
+ // a good solution. I just leave the code around, so that maybe others
+ // pick it up again. So far, it's not clear to me where to store the
+ // size of the sections:
+ //
+ // a) with the account (as it is done now)
+ // b) with the application for the specific account type
+ // c) ????
+ //
+ // Ideas are welcome (ipwizard: 2007-07-19)
+ // Note: currently there's no way to switch back to automatic
+ // column sizing once the manual sizing option has been saved
+#if 0
+ if(m_account.value("kmm-ledger-column-width").isEmpty()) {
+#endif
+
+ // check which space we need
+ if(columnWidth(NumberColumn))
+ adjustColumn(NumberColumn);
+ if(columnWidth(AccountColumn))
+ adjustColumn(AccountColumn);
+ if(columnWidth(PaymentColumn))
+ adjustColumn(PaymentColumn);
+ if(columnWidth(DepositColumn))
+ adjustColumn(DepositColumn);
+ if(columnWidth(BalanceColumn))
+ adjustColumn(BalanceColumn);
+ if(columnWidth(PriceColumn))
+ adjustColumn(PriceColumn);
+ if(columnWidth(ValueColumn))
+ adjustColumn(ValueColumn);
+
+ // make amount columns all the same size
+ // only extend the entry columns to make sure they fit
+ // the widget
+ int dwidth = 0;
+ int ewidth = 0;
+ if(ewidth < columnWidth(PaymentColumn))
+ ewidth = columnWidth(PaymentColumn);
+ if(ewidth < columnWidth(DepositColumn))
+ ewidth = columnWidth(DepositColumn);
+ if(dwidth < columnWidth(BalanceColumn))
+ dwidth = columnWidth(BalanceColumn);
+ if(ewidth < columnWidth(PriceColumn))
+ ewidth = columnWidth(PriceColumn);
+ if(dwidth < columnWidth(ValueColumn))
+ dwidth = columnWidth(ValueColumn);
+
+ int swidth = columnWidth(SecurityColumn);
+ if(swidth > 0) {
+ adjustColumn(SecurityColumn);
+ swidth = columnWidth(SecurityColumn);
+ }
+
+#ifndef KMM_DESIGNER
+ // Resize the date and money fields to either
+ // a) the size required by the input widget if no transaction form is shown
+ // b) the adjusted value for the input widget if the transaction form is visible
+ if(!KMyMoneyGlobalSettings::transactionForm()) {
+ kMyMoneyDateInput* dateField = new kMyMoneyDateInput;
+ kMyMoneyEdit* valField = new kMyMoneyEdit;
+
+ dateField->setFont(KMyMoneyGlobalSettings::listCellFont());
+ setColumnWidth(DateColumn, dateField->minimumSizeHint().width());
+ valField->setMinimumWidth(ewidth);
+ ewidth = valField->minimumSizeHint().width();
+
+ if(swidth > 0) {
+ swidth = columnWidth(SecurityColumn) + 40;
+ }
+ delete valField;
+ delete dateField;
+ } else {
+ adjustColumn(DateColumn);
+ }
+#endif
+
+ if(columnWidth(PaymentColumn))
+ setColumnWidth(PaymentColumn, ewidth);
+ if(columnWidth(DepositColumn))
+ setColumnWidth(DepositColumn, ewidth);
+ if(columnWidth(BalanceColumn))
+ setColumnWidth(BalanceColumn, dwidth);
+ if(columnWidth(PriceColumn))
+ setColumnWidth(PriceColumn, ewidth);
+ if(columnWidth(ValueColumn))
+ setColumnWidth(ValueColumn, dwidth);
+
+ if(columnWidth(ReconcileFlagColumn))
+ setColumnWidth(ReconcileFlagColumn, 20);
+
+ if(swidth > 0)
+ setColumnWidth(SecurityColumn, swidth);
+#if 0
+ // see comment above
+ } else {
+ QStringList colSizes = QStringList::split(",", m_account.value("kmm-ledger-column-width"), true);
+ for(int i; i < colSizes.count(); ++i) {
+ int colWidth = colSizes[i].toInt();
+ if(colWidth == 0)
+ continue;
+ setColumnWidth(i, w * colWidth / 100);
+ }
+ }
+#endif
+
+ for(int i = 0; i < numCols(); ++i) {
+ if(i == col)
+ continue;
+
+ w -= columnWidth(i);
+ }
+ setColumnWidth(col, w);
+
+ setUpdatesEnabled(enabled);
+ updateContents();
+}
+
+
+void Register::adjustColumn(int col)
+{
+#ifdef KMM_DESIGNER
+ Q_UNUSED(col)
+#else
+ QString msg = "%1 adjusting column %2";
+ ::timetrace((msg.arg("Start").arg(col)).data());
+ QHeader *topHeader = horizontalHeader();
+ QFontMetrics cellFontMetrics(KMyMoneyGlobalSettings::listCellFont());
+
+ int w = topHeader->fontMetrics().width( topHeader->label( col ) ) + 10;
+ if ( topHeader->iconSet( col ) )
+ w += topHeader->iconSet( col )->pixmap().width();
+ w = QMAX( w, 20 );
+
+ int maxWidth = 0;
+ switch(col) {
+ case NumberColumn:
+ maxWidth = cellFontMetrics.width("0123456789");
+ break;
+ default:
+ break;
+ }
+
+ // check for date column
+ if(col == DateColumn) {
+ QString txt = KGlobal::locale()->formatDate(QDate(6999,12,29), true);
+ int nw = cellFontMetrics.width(txt+" ");
+ w = QMAX( w, nw );
+ } else {
+
+ // scan through the transactions
+ for(unsigned i = 0; i < m_items.size(); ++i) {
+ RegisterItem* const item = m_items[i];
+ if(!item)
+ continue;
+ Transaction* t = dynamic_cast<Transaction*>(item);
+ if(t) {
+ int nw = t->registerColWidth(col, cellFontMetrics);
+ w = QMAX( w, nw );
+ if(maxWidth) {
+ if(w > maxWidth) {
+ w = maxWidth;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ setColumnWidth( col, w );
+#endif
+}
+
+void Register::repaintItems(RegisterItem* first, RegisterItem* last)
+{
+ if(first == 0 && last == 0) {
+ first = firstItem();
+ last = lastItem();
+ }
+
+ if(first == 0)
+ return;
+
+ if(last == 0)
+ last = first;
+
+ // qDebug("repaintItems from row %d to row %d", first->startRow(), last->startRow()+last->numRowsRegister()-1);
+
+ // the following code is based on code I found in
+ // QTable::cellGeometry() and QTable::updateCell() (ipwizard)
+ QRect cg(0,
+ rowPos(first->startRow()),
+ visibleWidth(),
+ rowPos(last->startRow()+last->numRowsRegister()-1) - rowPos(first->startRow()) + rowHeight(last->startRow()+last->numRowsRegister()-1));
+
+ QRect r(contentsToViewport(QPoint (cg.x() - 2, cg.y() - 2 )), QSize(cg.width() + 4, cg.height() + 4 ));
+
+ QRect tmp = m_lastRepaintRect | r;
+ if(abs(tmp.height()) > 3000) {
+ // make sure that the previously triggered repaint has been done before we
+ // trigger the next. Not having this used to cause some trouble when changing
+ // the focus within a 2000 item ledger from the last to the first item.
+ QApplication::eventLoop()->processEvents(QEventLoop::ExcludeUserInput, 10);
+ }
+ m_lastRepaintRect = r;
+ QApplication::postEvent( viewport(), new QPaintEvent( r, FALSE ) );
+
+}
+
+void Register::clearSelection(void)
+{
+ unselectItems();
+}
+
+void Register::doSelectItems(int from, int to, bool selected)
+{
+ int start, end;
+ // make sure start is smaller than end
+ if(from <= to) {
+ start = from;
+ end = to;
+ } else {
+ start = to;
+ end = from;
+ }
+ // make sure we stay in bounds
+ if(start < 0)
+ start = 0;
+ if((end <= -1) || ((unsigned)end > (m_items.size()-1)))
+ end = m_items.size()-1;
+
+ RegisterItem* firstItem;
+ RegisterItem* lastItem;
+ firstItem = lastItem = 0;
+ for(int i = start; i <= end; ++i) {
+ RegisterItem* const item = m_items[i];
+ if(item) {
+ if(selected != item->isSelected()) {
+ if(!firstItem)
+ firstItem = item;
+ item->setSelected(selected);
+ lastItem = item;
+ }
+ }
+ }
+
+ // anything changed?
+ if(firstItem || lastItem)
+ repaintItems(firstItem, lastItem);
+}
+
+RegisterItem* Register::itemAtRow(int row) const
+{
+ if(row >= 0 && (unsigned)row < m_itemIndex.size()) {
+ return m_itemIndex[row];
+ }
+ return 0;
+}
+
+int Register::rowToIndex(int row) const
+{
+ for(unsigned i = 0; i < m_items.size(); ++i) {
+ RegisterItem* const item = m_items[i];
+ if(!item)
+ continue;
+ if(row >= item->startRow() && row < (item->startRow() + item->numRowsRegister()))
+ return i;
+ }
+ return -1;
+}
+
+void Register::selectedTransactions(SelectedTransactions& list) const
+{
+ if(m_focusItem && m_focusItem->isSelected() && m_focusItem->isVisible()) {
+ Transaction* t = dynamic_cast<Transaction*>(m_focusItem);
+ if(t) {
+ QString id;
+ if(t->isScheduled())
+ id = t->transaction().id();
+ SelectedTransaction s(t->transaction(), t->split(), id);
+ list << s;
+ }
+ }
+
+ for(unsigned i = 0; i < m_items.size(); ++i) {
+ RegisterItem* const item = m_items[i];
+ // make sure, we don't include the focus item twice
+ if(item == m_focusItem)
+ continue;
+ if(item && item->isSelected() && item->isVisible()) {
+ Transaction* t = dynamic_cast<Transaction*>(item);
+ if(t) {
+ QString id;
+ if(t->isScheduled())
+ id = t->transaction().id();
+ SelectedTransaction s(t->transaction(), t->split(), id);
+ list << s;
+ }
+ }
+ }
+}
+
+QValueList<RegisterItem*> Register::selectedItems(void) const
+{
+ QValueList<RegisterItem*> list;
+
+ RegisterItem* item = m_firstItem;
+ while(item) {
+ if(item && item->isSelected() && item->isVisible()) {
+ list << item;
+ }
+ item = item->nextItem();
+ }
+ return list;
+}
+
+int Register::selectedItemsCount(void) const
+{
+ int cnt = 0;
+ RegisterItem* item = m_firstItem;
+ while(item) {
+ if(item->isSelected() && item->isVisible())
+ ++cnt;
+ item = item->nextItem();
+ }
+ return cnt;
+}
+
+void Register::contentsMouseReleaseEvent( QMouseEvent *e )
+{
+ if(m_ignoreNextButtonRelease) {
+ m_ignoreNextButtonRelease = false;
+ return;
+ }
+
+ m_buttonState = e->state();
+ QTable::contentsMouseReleaseEvent(e);
+}
+
+void Register::selectItem(int row, int col, int button, const QPoint& /* mousePos */)
+{
+ if(row >= 0 && (unsigned)row < m_itemIndex.size()) {
+ RegisterItem* item = m_itemIndex[row];
+
+ // don't support selecting when the item has an editor
+ // or the item itself is not selectable
+ if(item->hasEditorOpen() || !item->isSelectable())
+ return;
+
+ QString id = item->id();
+ selectItem(item);
+ // selectItem() might have changed the pointers, so we
+ // need to reconstruct it here
+ item = itemById(id);
+ Transaction* t = dynamic_cast<Transaction*>(item);
+ if(t) {
+ if(!id.isEmpty()) {
+ switch(button & Qt::MouseButtonMask) {
+ case Qt::RightButton:
+ emit openContextMenu();
+ break;
+
+ case Qt::LeftButton:
+ if(t && col == ReconcileFlagColumn && selectedItemsCount() == 1 && !t->isScheduled())
+ emit reconcileStateColumnClicked(t);
+ break;
+
+ default:
+ break;
+ }
+ } else {
+ emit emptyItemSelected();
+ }
+ }
+ }
+}
+
+void Register::setAnchorItem(RegisterItem* anchorItem)
+{
+ m_selectAnchor = anchorItem;
+}
+
+bool Register::setFocusItem(RegisterItem* focusItem)
+{
+ if(focusItem && focusItem->canHaveFocus()) {
+ if(m_focusItem) {
+ m_focusItem->setFocus(false);
+ // issue a repaint here only if we move the focus
+ if(m_focusItem != focusItem)
+ repaintItems(m_focusItem);
+ }
+ Transaction* item = dynamic_cast<Transaction*>(focusItem);
+ if(m_focusItem != focusItem && item) {
+ emit focusChanged(item);
+ }
+
+ m_focusItem = focusItem;
+ m_focusItem->setFocus(true);
+ if(m_listsDirty)
+ updateRegister(KMyMoneyGlobalSettings::ledgerLens() | !KMyMoneyGlobalSettings::transactionForm());
+ ensureItemVisible(m_focusItem);
+ repaintItems(m_focusItem);
+ return true;
+ } else
+ return false;
+}
+
+bool Register::setFocusToTop(void)
+{
+ RegisterItem* rgItem=m_firstItem;
+ while (rgItem) {
+ if (setFocusItem(rgItem))
+ return true;
+ rgItem=rgItem->nextItem();
+ }
+ return false;
+}
+
+void Register::selectItem(RegisterItem* item, bool dontChangeSelections)
+{
+ if(!item)
+ return;
+
+ // kdDebug(2) << "Register::selectItem(" << item << "): type is " << typeid(*item).name() << endl;
+
+ Qt::ButtonState buttonState = m_buttonState;
+ m_buttonState = Qt::NoButton;
+
+ if(m_selectionMode == NoSelection)
+ return;
+
+ if(item->isSelectable()) {
+ QString id = item->id();
+ QValueList<RegisterItem*> itemList = selectedItems();
+ bool okToSelect = true;
+ int cnt = itemList.count();
+ bool sameEntryType = true;
+ if(cnt > 0) {
+ if(typeid(*itemList.begin()) != typeid(item))
+ sameEntryType = false;
+ }
+
+ if(buttonState & Qt::LeftButton) {
+ if(!(buttonState & (Qt::ShiftButton | Qt::ControlButton))) {
+ if((cnt != 1) || ((cnt == 1) && !item->isSelected())) {
+ emit aboutToSelectItem(item, okToSelect);
+ if(okToSelect) {
+ // pointer 'item' might have changed. reconstruct it.
+ item = itemById(id);
+ unselectItems();
+ item->setSelected(true);
+ setFocusItem(item);
+ }
+ }
+ if(okToSelect)
+ m_selectAnchor = item;
+ }
+
+ if(m_selectionMode == Multi) {
+ switch(buttonState & (Qt::ShiftButton | Qt::ControlButton)) {
+ case Qt::ControlButton:
+ okToSelect = sameEntryType;
+ if(typeid(*item) == typeid(StdTransactionScheduled))
+ okToSelect = false;
+ // toggle selection state of current item
+ emit aboutToSelectItem(item, okToSelect);
+ if(okToSelect) {
+ // pointer 'item' might have changed. reconstruct it.
+ item = itemById(id);
+ item->setSelected(!item->isSelected());
+ setFocusItem(item);
+ }
+ break;
+
+ case Qt::ShiftButton:
+ okToSelect = sameEntryType;
+ if(typeid(*item) == typeid(StdTransactionScheduled))
+ okToSelect = false;
+ emit aboutToSelectItem(item, okToSelect);
+ if(okToSelect) {
+ // pointer 'item' might have changed. reconstruct it.
+ item = itemById(id);
+ unselectItems();
+ selectItems(rowToIndex(m_selectAnchor->startRow()), rowToIndex(item->startRow()));
+ setFocusItem(item);
+ }
+ break;
+ }
+ }
+ } else if(buttonState & Qt::RightButton) {
+ // if the right button is pressed then only change the
+ // selection if none of the Shift/Ctrl button is pressed and
+ // one of the following conditions is true:
+ //
+ // a) single transaction is selected
+ // b) multiple transactions are selected and the one to be selected is not
+ if(!(buttonState & (Qt::ShiftButton | Qt::ControlButton))) {
+ if((cnt > 0) && (!item->isSelected())) {
+ okToSelect = sameEntryType;
+ emit aboutToSelectItem(item, okToSelect);
+ if(okToSelect) {
+ // pointer 'item' might have changed. reconstruct it.
+ item = itemById(id);
+ unselectItems();
+ item->setSelected(true);
+ setFocusItem(item);
+ }
+ }
+ if(okToSelect)
+ m_selectAnchor = item;
+ }
+ } else {
+ // we get here when called by application logic
+ emit aboutToSelectItem(item, okToSelect);
+ if(okToSelect) {
+ // pointer 'item' might have changed. reconstruct it.
+ item = itemById(id);
+ if(!dontChangeSelections)
+ unselectItems();
+ item->setSelected(true);
+ setFocusItem(item);
+ m_selectAnchor = item;
+ }
+ }
+ if(okToSelect) {
+ SelectedTransactions list(this);
+ emit selectionChanged(list);
+ }
+ }
+}
+
+void Register::ensureItemVisible(RegisterItem* item)
+{
+ if(!item)
+ return;
+
+ m_ensureVisibleItem = item;
+ QTimer::singleShot(0, this, SLOT(slotEnsureItemVisible()));
+}
+
+void Register::slotDoubleClicked(int row, int, int, const QPoint&)
+{
+ if(row >= 0 && (unsigned)row < m_itemIndex.size()) {
+ RegisterItem* p = m_itemIndex[row];
+ if(p->isSelectable()) {
+ m_ignoreNextButtonRelease = true;
+ // double click to start editing only works if the focus
+ // item is among the selected ones
+ if(!focusItem()) {
+ setFocusItem(p);
+ if(m_selectionMode != NoSelection)
+ p->setSelected(true);
+ }
+
+ if(m_focusItem->isSelected()) {
+ // don't emit the signal right away but wait until
+ // we come back to the Qt main loop
+ QTimer::singleShot(0, this, SIGNAL(editTransaction()));
+ }
+ }
+ }
+}
+
+void Register::slotEnsureItemVisible(void)
+{
+ // if clear() has been called since the timer was
+ // started, we just ignore the call
+ if(!m_ensureVisibleItem)
+ return;
+
+ // make sure to catch latest changes
+ bool enabled = isUpdatesEnabled();
+ setUpdatesEnabled(false);
+ updateRegister();
+ setUpdatesEnabled(enabled);
+
+ RegisterItem* item = m_ensureVisibleItem;
+ RegisterItem* prev = item->prevItem();
+ while(prev && !prev->isVisible())
+ prev = prev->prevItem();
+ RegisterItem* next = item->nextItem();
+ while(next && !next->isVisible())
+ next = next->nextItem();
+
+ int rowPrev, rowNext;
+ rowPrev = item->startRow();
+ rowNext = item->startRow() + item->numRowsRegister() - 1;
+
+ if(prev)
+ rowPrev = prev->startRow();
+ if(next)
+ rowNext = next->startRow() + next->numRowsRegister() - 1;
+
+ if(rowPrev < 0)
+ rowPrev = 0;
+ if(rowNext >= numRows())
+ rowNext = numRows()-1;
+
+ int wt = contentsY(); // window top
+ int wh = visibleHeight(); // window height
+ int lt = rowPos(rowPrev); // top of line above lens
+ int lb = rowPos(rowNext)+rowHeight(rowNext); // bottom of line below lens
+
+ // only update widget, if the transaction is not fully visible
+ if(lt < wt || lb >= (wt + wh)) {
+ if(rowPrev >= 0) {
+ ensureCellVisible(rowPrev, 0);
+ }
+
+ ensureCellVisible(item->startRow(), 0);
+
+ if(rowNext < numRows()) {
+ ensureCellVisible(rowNext, 0);
+ }
+ }
+}
+
+TransactionSortField KMyMoneyRegister::textToSortOrder(const QString& text)
+{
+ for(int idx = 1; idx < static_cast<int>(MaxSortFields); ++idx) {
+ if(text == i18n(sortOrderText[idx])) {
+ return static_cast<TransactionSortField>(idx);
+ }
+ }
+ return UnknownSort;
+}
+
+const QString KMyMoneyRegister::sortOrderToText(TransactionSortField idx)
+{
+ if(idx < PostDateSort || idx >= MaxSortFields)
+ idx = UnknownSort;
+ return i18n(sortOrderText[idx]);
+}
+
+QString Register::text(int /*row*/, int /*col*/) const
+{
+ return QString("a");
+}
+
+QWidget* Register::cellWidget(int row, int col) const
+{
+ // separeted here in two if()s, because this method is called for each
+ // event from QTable::eventFilter and in the most cases it is -1, -1
+ if(row < 0 || col < 0)
+ return 0;
+
+ if(row > numRows() - 1 || col > numCols() - 1) {
+ if(numRows() && numCols())
+ qWarning("Register::cellWidget(%d,%d) out of bounds (%d,%d)", row, col, numRows(), numCols());
+ return 0;
+ }
+
+ if(!m_cellWidgets.count())
+ return 0;
+
+ QWidget* w = 0;
+ QPair<int, int> idx = qMakePair(row, col);
+ QMap<QPair<int, int>, QWidget*>::const_iterator it_w;
+
+ it_w = m_cellWidgets.find(idx);
+ if(it_w != m_cellWidgets.end())
+ w = *it_w;
+ return w;
+}
+
+void Register::insertWidget(int row, int col, QWidget* w)
+{
+ if(row < 0 || col < 0 || row > numRows() - 1 || col > numCols() - 1) {
+ qWarning("Register::insertWidget(%d,%d) out of bounds", row, col);
+ return;
+ }
+
+ QPair<int, int> idx = qMakePair(row, col);
+ m_cellWidgets[idx] = w;
+}
+
+void Register::clearCellWidget(int row, int col)
+{
+ if(row < 0 || col < 0 || row > numRows() - 1 || col > numCols() - 1) {
+ qWarning("Register::clearCellWidget(%d,%d) out of bounds", row, col);
+ return;
+ }
+
+ QPair<int, int> idx = qMakePair(row, col);
+ QMap<QPair<int, int>, QWidget*>::iterator it_w;
+
+ it_w = m_cellWidgets.find(idx);
+ if(it_w != m_cellWidgets.end()) {
+ (*it_w)->deleteLater();
+ m_cellWidgets.remove(it_w);
+ }
+}
+
+QWidget* Register::createEditor(int /*row*/, int /*col*/, bool /*initFromCell*/) const
+{
+ return 0;
+}
+
+void Register::setCellContentFromEditor(int /*row*/, int /*col*/)
+{
+}
+
+void Register::endEdit(int /*row*/, int /*col*/, bool /*accept*/, bool /*replace*/)
+{
+}
+
+void Register::arrangeEditWidgets(QMap<QString, QWidget*>& editWidgets, KMyMoneyRegister::Transaction* t)
+{
+ t->arrangeWidgetsInRegister(editWidgets);
+ ensureItemVisible(t);
+ // updateContents();
+}
+
+void Register::tabOrder(QWidgetList& tabOrderWidgets, KMyMoneyRegister::Transaction* t) const
+{
+ t->tabOrderInRegister(tabOrderWidgets);
+}
+
+void Register::removeEditWidgets(QMap<QString, QWidget*>& editWidgets)
+{
+ // remove pointers from map
+ QMap<QString, QWidget*>::iterator it;
+ for(it = editWidgets.begin(); it != editWidgets.end(); ) {
+ if((*it)->parentWidget() == this) {
+ editWidgets.remove(it);
+ it = editWidgets.begin();
+ } else
+ ++it;
+ }
+
+ // now delete the widgets
+ KMyMoneyRegister::Transaction* t = dynamic_cast<KMyMoneyRegister::Transaction*>(focusItem());
+ for(int row = t->startRow(); row < t->startRow() + t->numRowsRegister(true); ++row) {
+ for(int col = 0; col < numCols(); ++col) {
+ if(cellWidget(row, col))
+ clearCellWidget(row, col);
+ }
+ // make sure to reduce the possibly size to what it was before editing started
+ setRowHeight(row, t->rowHeightHint());
+ }
+}
+
+void Register::slotToggleErronousTransactions(void)
+{
+ // toggle switch
+ m_markErronousTransactions ^= 1;
+
+ // check if anything needs to be redrawn
+ KMyMoneyRegister::RegisterItem* p = m_firstErronous;
+ while(p && p->prevItem() != m_lastErronous) {
+ if(p->isErronous())
+ repaintItems(p);
+ p = p->nextItem();
+ }
+
+ // restart timer
+ QTimer::singleShot(500, this, SLOT(slotToggleErronousTransactions()));
+}
+
+RegisterItem* Register::itemById(const QString& id) const
+{
+ if(id.isEmpty())
+ return m_lastItem;
+
+ for(QValueVector<RegisterItem*>::size_type i = 0; i < m_items.size(); ++i) {
+ RegisterItem* item = m_items[i];
+ if(!item)
+ continue;
+ if(item->id() == id)
+ return item;
+ }
+ return 0;
+}
+
+void Register::handleItemChange(RegisterItem* old, bool shift, bool control)
+{
+ if(m_selectionMode == Multi) {
+ if(shift) {
+ selectRange(m_selectAnchor ? m_selectAnchor : old,
+ m_focusItem, false, true, (m_selectAnchor && !control) ? true : false);
+ } else if(!control) {
+ selectItem(m_focusItem, false);
+ }
+ }
+}
+
+void Register::selectRange(RegisterItem* from, RegisterItem* to, bool invert, bool includeFirst, bool clearSel)
+{
+ if(!from || !to)
+ return;
+ if(from == to && !includeFirst)
+ return;
+ bool swap = false;
+ if(to == from->prevItem())
+ swap = true;
+
+ RegisterItem* item;
+ if(!swap && from != to && from != to->prevItem()) {
+ bool found = false;
+ for(item = from; item; item = item->nextItem()) {
+ if(item == to) {
+ found = true;
+ break;
+ }
+ }
+ if(!found)
+ swap = true;
+ }
+
+ if(swap) {
+ item = from;
+ from = to;
+ to = item;
+ if(!includeFirst)
+ to = to->prevItem();
+
+ } else if(!includeFirst) {
+ from = from->nextItem();
+ }
+
+ bool changed = false;
+ if(clearSel) {
+ for(item = firstItem(); item; item = item->nextItem()) {
+ if(item->isSelected() && item->isVisible()) {
+ item->setSelected(false);
+ changed = true;
+ }
+ }
+ }
+
+ for(item = from; item; item = item->nextItem()) {
+ if(item->isSelectable()) {
+ if(!invert) {
+ if(!item->isSelected() && item->isVisible()) {
+ item->setSelected(true);
+ changed = true;
+ }
+ } else {
+ bool sel = !item->isSelected();
+ if((item->isSelected() != sel) && (sel || !sel)) {
+ if(item->isVisible()) {
+ item->setSelected(sel);
+ changed = true;
+ }
+ }
+ }
+ }
+ if(item == to)
+ break;
+ }
+}
+
+void Register::scrollPage(int key, ButtonState state)
+{
+ RegisterItem* oldFocusItem = m_focusItem;
+
+ // make sure we have a focus item
+ if(!m_focusItem)
+ setFocusItem(m_firstItem);
+ if(!m_focusItem && m_firstItem)
+ setFocusItem(m_firstItem->nextItem());
+ if(!m_focusItem)
+ return;
+
+ RegisterItem* item = m_focusItem;
+ int height = 0;
+
+ switch(key) {
+ case Qt::Key_PageUp:
+ while(height < visibleHeight() && item->prevItem()) {
+ do {
+ item = item->prevItem();
+ if(item->isVisible())
+ height += item->rowHeightHint();
+ } while((!item->isSelectable() || !item->isVisible()) && item->prevItem());
+ }
+ break;
+ case Qt::Key_PageDown:
+ while(height < visibleHeight() && item->nextItem()) {
+ do {
+ if(item->isVisible())
+ height += item->rowHeightHint();
+ item = item->nextItem();
+ } while((!item->isSelectable() || !item->isVisible()) && item->nextItem());
+ }
+ break;
+
+ case Qt::Key_Up:
+ if(item->prevItem()) {
+ do {
+ item = item->prevItem();
+ } while((!item->isSelectable() || !item->isVisible()) && item->prevItem());
+ }
+ break;
+
+ case Qt::Key_Down:
+ if(item->nextItem()) {
+ do {
+ item = item->nextItem();
+ } while((!item->isSelectable() || !item->isVisible()) && item->nextItem());
+ }
+ break;
+
+ case Qt::Key_Home:
+ item = m_firstItem;
+ while((!item->isSelectable() || !item->isVisible()) && item->nextItem())
+ item = item->nextItem();
+ break;
+
+ case Qt::Key_End:
+ item = m_lastItem;
+ while((!item->isSelectable() || !item->isVisible()) && item->prevItem())
+ item = item->prevItem();
+ break;
+ }
+
+ // make sure to avoid selecting a possible empty transaction at the end
+ Transaction* t = dynamic_cast<Transaction*>(item);
+ if(t && t->transaction().id().isEmpty()) {
+ if(t->prevItem()) {
+ item = t->prevItem();
+ }
+ }
+
+ if(!(state & ShiftButton) || !m_selectAnchor)
+ m_selectAnchor = item;
+
+ setFocusItem(item);
+
+ if(item->isSelectable()) {
+ handleItemChange(oldFocusItem, state & Qt::ShiftButton, state & Qt::ControlButton);
+ // tell the world about the changes in selection
+ SelectedTransactions list(this);
+ emit selectionChanged(list);
+ }
+
+ if(m_focusItem && !m_focusItem->isSelected() && m_selectionMode == Single)
+ selectItem(item);
+}
+
+void Register::keyPressEvent(QKeyEvent* ev)
+{
+ switch(ev->key()) {
+ case Qt::Key_Space:
+ if(m_selectionMode != NoSelection) {
+ // get the state out of the event ...
+ m_buttonState = ev->state();
+ // ... and pretend that we have pressed the left mouse button ;)
+ m_buttonState = static_cast<Qt::ButtonState>(m_buttonState | Qt::LeftButton);
+ selectItem(m_focusItem);
+ }
+ break;
+
+ case Qt::Key_PageUp:
+ case Qt::Key_PageDown:
+ case Qt::Key_Home:
+ case Qt::Key_End:
+ case Qt::Key_Down:
+ case Qt::Key_Up:
+ scrollPage(ev->key(), ev->state());
+ break;
+
+ default:
+ QTable::keyPressEvent(ev);
+ break;
+ }
+}
+
+Transaction* Register::transactionFactory(Register *parent, const MyMoneyTransaction& transaction, const MyMoneySplit& split, int uniqueId)
+{
+ Transaction* t = 0;
+ MyMoneySplit s = split;
+
+ if(parent->account() == MyMoneyAccount()) {
+ t = new KMyMoneyRegister::StdTransaction(parent, transaction, s, uniqueId);
+ return t;
+ }
+
+ switch(parent->account().accountType()) {
+ case MyMoneyAccount::Checkings:
+ case MyMoneyAccount::Savings:
+ case MyMoneyAccount::Cash:
+ case MyMoneyAccount::CreditCard:
+ case MyMoneyAccount::Loan:
+ case MyMoneyAccount::Asset:
+ case MyMoneyAccount::Liability:
+ case MyMoneyAccount::Currency:
+ case MyMoneyAccount::Income:
+ case MyMoneyAccount::Expense:
+ case MyMoneyAccount::AssetLoan:
+ case MyMoneyAccount::Equity:
+ if(s.accountId().isEmpty())
+ s.setAccountId(parent->account().id());
+ if(s.isMatched())
+ t = new KMyMoneyRegister::StdTransactionMatched(parent, transaction, s, uniqueId);
+ else if(transaction.isImported())
+ t = new KMyMoneyRegister::StdTransactionDownloaded(parent, transaction, s, uniqueId);
+ else
+ t = new KMyMoneyRegister::StdTransaction(parent, transaction, s, uniqueId);
+ break;
+
+ case MyMoneyAccount::Investment:
+ if(s.isMatched())
+ t = new KMyMoneyRegister::InvestTransaction/* Matched */(parent, transaction, s, uniqueId);
+ else if(transaction.isImported())
+ t = new KMyMoneyRegister::InvestTransactionDownloaded(parent, transaction, s, uniqueId);
+ else
+ t = new KMyMoneyRegister::InvestTransaction(parent, transaction, s, uniqueId);
+ break;
+
+ case MyMoneyAccount::CertificateDep:
+ case MyMoneyAccount::MoneyMarket:
+ case MyMoneyAccount::Stock:
+ default:
+ qDebug("Register::transactionFactory: invalid accountTypeE %d", parent->account().accountType());
+ break;
+ }
+ return t;
+}
+
+void Register::addGroupMarkers(void)
+{
+ QMap<QString, int> list;
+ QMap<QString, int>::const_iterator it;
+ KMyMoneyRegister::RegisterItem* p = firstItem();
+ KMyMoneyRegister::Transaction* t;
+ QString name;
+ QDate today;
+ QDate yesterday, thisWeek, lastWeek;
+ QDate thisMonth, lastMonth;
+ QDate thisYear;
+ int weekStartOfs;
+
+ switch(primarySortKey()) {
+ case KMyMoneyRegister::PostDateSort:
+ case KMyMoneyRegister::EntryDateSort:
+ today = QDate::currentDate();
+ thisMonth.setYMD(today.year(), today.month(), 1);
+ lastMonth = thisMonth.addMonths(-1);
+ yesterday = today.addDays(-1);
+ // a = QDate::dayOfWeek() todays weekday (1 = Monday, 7 = Sunday)
+ // b = KLocale::weekStartDay() first day of week (1 = Monday, 7 = Sunday)
+ weekStartOfs = today.dayOfWeek() - KGlobal::locale()->weekStartDay();
+ if(weekStartOfs < 0) {
+ weekStartOfs = 7 + weekStartOfs;
+ }
+ thisWeek = today.addDays(-weekStartOfs);
+ lastWeek = thisWeek.addDays(-7);
+ thisYear.setYMD(today.year(), 1, 1);
+ if(KMyMoneyGlobalSettings::startDate().date() != QDate(1900,1,1))
+ new KMyMoneyRegister::FancyDateGroupMarker(this, KMyMoneyGlobalSettings::startDate().date(), i18n("Prior transactions possibly filtered"));
+
+ if(KMyMoneyGlobalSettings::showFancyMarker()) {
+ if(m_account.lastReconciliationDate().isValid())
+ new KMyMoneyRegister::StatementGroupMarker(this, KMyMoneyRegister::Deposit, m_account.lastReconciliationDate(), i18n("Last reconciliation"));
+
+ if(!m_account.value("lastImportedTransactionDate").isEmpty()
+ && !m_account.value("lastStatementBalance").isEmpty()) {
+ MyMoneyMoney balance(m_account.value("lastStatementBalance"));
+ if(m_account.accountGroup() == MyMoneyAccount::Liability)
+ balance = -balance;
+ QString txt = i18n("Online Statement Balance: %1").arg(balance.formatMoney(m_account.fraction()));
+ new KMyMoneyRegister::StatementGroupMarker(this, KMyMoneyRegister::Deposit, QDate::fromString(m_account.value("lastImportedTransactionDate"), Qt::ISODate), txt);
+ }
+
+ new KMyMoneyRegister::FancyDateGroupMarker(this, thisYear, i18n("This year"));
+ new KMyMoneyRegister::FancyDateGroupMarker(this, lastMonth, i18n("Last month"));
+ new KMyMoneyRegister::FancyDateGroupMarker(this, thisMonth, i18n("This month"));
+ new KMyMoneyRegister::FancyDateGroupMarker(this, lastWeek, i18n("Last week"));
+ new KMyMoneyRegister::FancyDateGroupMarker(this, thisWeek, i18n("This week"));
+ new KMyMoneyRegister::FancyDateGroupMarker(this, yesterday, i18n("Yesterday"));
+ new KMyMoneyRegister::FancyDateGroupMarker(this, today, i18n("Today"));
+ new KMyMoneyRegister::FancyDateGroupMarker(this, today.addDays(1), i18n("Future transactions"));
+ new KMyMoneyRegister::FancyDateGroupMarker(this, thisWeek.addDays(7), i18n("Next week"));
+ new KMyMoneyRegister::FancyDateGroupMarker(this, thisMonth.addMonths(1), i18n("Next month"));
+
+ } else {
+ new KMyMoneyRegister::SimpleDateGroupMarker(this, today.addDays(1), i18n("Future transactions"));
+ }
+ if(KMyMoneyGlobalSettings::showFiscalMarker()) {
+ QDate currentFiscalYear(QDate::currentDate().year(), KMyMoneyGlobalSettings::firstFiscalMonth(), KMyMoneyGlobalSettings::firstFiscalDay());
+
+ if(QDate::currentDate() < currentFiscalYear)
+ currentFiscalYear = currentFiscalYear.addYears(-1);
+ QDate previousFiscalYear = currentFiscalYear.addYears(-1);
+ new KMyMoneyRegister::FiscalYearGroupMarker(this, currentFiscalYear, i18n("Current fiscal year"));
+ new KMyMoneyRegister::FiscalYearGroupMarker(this, currentFiscalYear.addYears(-1), i18n("Previous fiscal year"));
+ new KMyMoneyRegister::FiscalYearGroupMarker(this, currentFiscalYear.addYears(1), i18n("Next fiscal year"));
+ }
+ break;
+
+ case KMyMoneyRegister::TypeSort:
+ if(KMyMoneyGlobalSettings::showFancyMarker()) {
+ new KMyMoneyRegister::TypeGroupMarker(this, KMyMoneyRegister::Deposit, m_account.accountType());
+ new KMyMoneyRegister::TypeGroupMarker(this, KMyMoneyRegister::Payment, m_account.accountType());
+ }
+ break;
+
+ case KMyMoneyRegister::ReconcileStateSort:
+ if(KMyMoneyGlobalSettings::showFancyMarker()) {
+ new KMyMoneyRegister::ReconcileGroupMarker(this, MyMoneySplit::NotReconciled);
+ new KMyMoneyRegister::ReconcileGroupMarker(this, MyMoneySplit::Cleared);
+ new KMyMoneyRegister::ReconcileGroupMarker(this, MyMoneySplit::Reconciled);
+ new KMyMoneyRegister::ReconcileGroupMarker(this, MyMoneySplit::Frozen);
+ }
+ break;
+
+ case KMyMoneyRegister::PayeeSort:
+ if(KMyMoneyGlobalSettings::showFancyMarker()) {
+ while(p) {
+ t = dynamic_cast<KMyMoneyRegister::Transaction*>(p);
+ if(t) {
+ list[t->sortPayee()] = 1;
+ }
+ p = p->nextItem();
+ }
+ for(it = list.begin(); it != list.end(); ++it) {
+ name = it.key();
+ if(name.isEmpty()) {
+ name = i18n("Unknown payee", "Unknown");
+ }
+ new KMyMoneyRegister::PayeeGroupMarker(this, name);
+ }
+ }
+ break;
+
+ case KMyMoneyRegister::CategorySort:
+ if(KMyMoneyGlobalSettings::showFancyMarker()) {
+ while(p) {
+ t = dynamic_cast<KMyMoneyRegister::Transaction*>(p);
+ if(t) {
+ list[t->sortCategory()] = 1;
+ }
+ p = p->nextItem();
+ }
+ for(it = list.begin(); it != list.end(); ++it) {
+ name = it.key();
+ if(name.isEmpty()) {
+ name = i18n("Unknown category", "Unknown");
+ }
+ new KMyMoneyRegister::CategoryGroupMarker(this, name);
+ }
+ }
+ break;
+
+ case KMyMoneyRegister::SecuritySort:
+ if(KMyMoneyGlobalSettings::showFancyMarker()) {
+ while(p) {
+ t = dynamic_cast<KMyMoneyRegister::InvestTransaction*>(p);
+ if(t) {
+ list[t->sortSecurity()] = 1;
+ }
+ p = p->nextItem();
+ }
+ for(it = list.begin(); it != list.end(); ++it) {
+ name = it.key();
+ if(name.isEmpty()) {
+ name = i18n("Unknown security", "Unknown");
+ }
+ new KMyMoneyRegister::CategoryGroupMarker(this, name);
+ }
+ }
+ break;
+
+ default: // no markers supported
+ break;
+ }
+}
+
+void Register::removeUnwantedGroupMarkers(void)
+{
+ // remove all trailing group markers except statement markers
+ KMyMoneyRegister::RegisterItem* q;
+ KMyMoneyRegister::RegisterItem* p = lastItem();
+ while(p) {
+ q = p;
+ if(dynamic_cast<KMyMoneyRegister::Transaction*>(p)
+ || dynamic_cast<KMyMoneyRegister::StatementGroupMarker*>(p))
+ break;
+
+ p = p->prevItem();
+ delete q;
+ }
+
+ // remove all adjacent group markers
+ bool lastWasGroupMarker = false;
+ p = lastItem();
+ while(p) {
+ q = p;
+ KMyMoneyRegister::GroupMarker* m = dynamic_cast<KMyMoneyRegister::GroupMarker*>(p);
+ p = p->prevItem();
+ if(m) {
+ m->markVisible(true);
+ // make adjacent group marker invisible except those that show statement information
+ if(lastWasGroupMarker && (dynamic_cast<KMyMoneyRegister::StatementGroupMarker*>(m) == 0)) {
+ m->markVisible(false);
+ }
+ lastWasGroupMarker = true;
+ } else if(q->isVisible())
+ lastWasGroupMarker = false;
+ }
+}
+
+
+#include "register.moc"
+
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/widgets/register.h b/kmymoney2/widgets/register.h
new file mode 100644
index 0000000..d9d2627
--- /dev/null
+++ b/kmymoney2/widgets/register.h
@@ -0,0 +1,605 @@
+/***************************************************************************
+ register.h
+ ----------
+ begin : Fri Mar 10 2006
+ copyright : (C) 2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef REGISTER_H
+#define REGISTER_H
+
+// Some STL headers in GCC4.3 contain operator new. Memory checker mangles these
+#ifdef _CHECK_MEMORY
+ #undef new
+#endif
+
+#include <algorithm>
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qtable.h>
+#include <qvaluelist.h>
+#include <qvaluevector.h>
+#include <qwidgetlist.h>
+#include <qmap.h>
+#include <qpair.h>
+#include <qevent.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+#ifdef _CHECK_MEMORY
+ #include <kmymoney/mymoneyutils.h>
+#endif
+
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/registeritem.h>
+#include <kmymoney/transaction.h>
+#include <kmymoney/transactioneditorcontainer.h>
+#include <kmymoney/selectedtransaction.h>
+#include <kmymoney/transactionsortoption.h>
+
+class RegisterToolTip;
+
+namespace KMyMoneyRegister {
+
+typedef enum {
+ UnknownSort = 0, //< unknown sort criteria
+ PostDateSort = 1, //< sort by post date
+ EntryDateSort, //< sort by entry date
+ PayeeSort, //< sort by payee name
+ ValueSort, //< sort by value
+ NoSort, //< sort by number field
+ EntryOrderSort, //< sort by entry order
+ TypeSort, //< sort by CashFlowDirection
+ CategorySort, //< sort by Category
+ ReconcileStateSort, //< sort by reconciliation state
+ SecuritySort, //< sort by security (only useful for investment accounts)
+ // insert new values in front of this line
+ MaxSortFields
+} TransactionSortField;
+
+typedef enum {
+ Ascending = 0, //< sort in ascending order
+ Descending //< sort in descending order
+} SortDirection;
+
+class Register;
+class RegisterItem;
+class ItemPtrVector;
+
+const QString sortOrderToText(TransactionSortField idx);
+TransactionSortField textToSortOrder(const QString& text);
+
+
+class QWidgetContainer : public QMap<QString, QWidget*>
+{
+public:
+ QWidgetContainer() {}
+
+ QWidget* haveWidget(const QString& name) const {
+ QWidgetContainer::const_iterator it_w;
+ it_w = find(name);
+ if(it_w != end())
+ return *it_w;
+ return 0;
+ }
+
+ void removeOrphans(void) {
+ QWidgetContainer::iterator it_w;
+ for(it_w = begin(); it_w != end(); ) {
+ if((*it_w) && (*it_w)->parent())
+ ++it_w;
+ else {
+ delete (*it_w);
+ remove(it_w);
+ it_w = begin();
+ }
+ }
+ }
+
+};
+
+class GroupMarker : public RegisterItem
+{
+public:
+ GroupMarker(Register* parent, const QString& txt = QString());
+ ~GroupMarker();
+ void setText(const QString& txt) { m_txt = txt; }
+ const QString& text(void) const { return m_txt; }
+ bool isSelectable(void) const { return false; }
+ bool canHaveFocus(void) const { return false; }
+ int numRows(void) const { return 1; }
+
+ virtual const char* className(void) { return "GroupMarker"; }
+
+ bool isErronous(void) const { return false; }
+
+ void paintRegisterCell(QPainter* painter, int row, int col, const QRect& r, bool selected, const QColorGroup& cg);
+ void paintFormCell(QPainter* /* painter */, int /* row */, int /* col */, const QRect& /* r */, bool /* selected */, const QColorGroup& /* cg */) {}
+
+ int rowHeightHint(void) const;
+
+ bool matches(const QString&) const { return true; }
+ virtual int sortSamePostDate(void) const { return 0; }
+
+protected:
+ void setupColors(QColorGroup& cg);
+
+protected:
+ QString m_txt;
+ unsigned int m_drawCounter;
+ bool m_showDate;
+
+ static QPixmap* m_bg;
+ static int m_bgRefCnt;
+};
+
+
+class FancyDateGroupMarker : public GroupMarker
+{
+public:
+ FancyDateGroupMarker(Register* parent, const QDate& date, const QString& txt);
+
+ virtual const QDate& sortPostDate(void) const { return m_date; }
+ virtual const QDate& sortEntryDate(void) const { return m_date; }
+ virtual const char* className(void) { return "FancyDateGroupMarker"; }
+private:
+ QDate m_date;
+};
+
+class StatementGroupMarker : public FancyDateGroupMarker
+{
+public:
+ StatementGroupMarker(Register* parent, CashFlowDirection dir, const QDate& date, const QString& txt );
+ CashFlowDirection sortType(void) const { return m_dir; }
+ virtual int sortSamePostDate(void) const { return 3; }
+private:
+ CashFlowDirection m_dir;
+};
+
+class SimpleDateGroupMarker : public FancyDateGroupMarker
+{
+public:
+ SimpleDateGroupMarker(Register* parent, const QDate& date, const QString& txt);
+ void paintRegisterCell(QPainter* painter, int row, int col, const QRect& r, bool selected, const QColorGroup& cg);
+ int rowHeightHint(void) const;
+ virtual const char* className(void) { return "SimpleDateGroupMarker"; }
+};
+
+class TypeGroupMarker : public GroupMarker
+{
+public:
+ TypeGroupMarker(Register* parent, CashFlowDirection dir, MyMoneyAccount::accountTypeE accType);
+ CashFlowDirection sortType(void) const { return m_dir; }
+private:
+ CashFlowDirection m_dir;
+};
+
+class FiscalYearGroupMarker : public FancyDateGroupMarker
+{
+public:
+ FiscalYearGroupMarker(Register* parent, const QDate& date, const QString& txt);
+ virtual const char* className(void) { return "FiscalYearGroupMarker"; }
+ virtual int sortSamePostDate(void) const { return 1; }
+
+protected:
+ void setupColors(QColorGroup& cg);
+};
+
+class PayeeGroupMarker : public GroupMarker
+{
+public:
+ PayeeGroupMarker(Register* parent, const QString& name);
+ const QString& sortPayee(void) const { return m_txt; }
+};
+
+class CategoryGroupMarker : public GroupMarker
+{
+public:
+ CategoryGroupMarker(Register* parent, const QString& category);
+ const QString& sortCategory(void) const { return m_txt; }
+ const QString& sortSecurity(void) const { return m_txt; }
+
+ virtual const char* className(void) { return "CategoryGroupMarker"; }
+};
+
+class ReconcileGroupMarker : public GroupMarker
+{
+public:
+ ReconcileGroupMarker(Register* parent, MyMoneySplit::reconcileFlagE state);
+ virtual MyMoneySplit::reconcileFlagE sortReconcileState(void) const { return m_state; }
+private:
+ MyMoneySplit::reconcileFlagE m_state;
+};
+
+
+class ItemPtrVector : public QValueVector<RegisterItem *>
+{
+public:
+ ItemPtrVector() {}
+
+ void sort(void);
+
+protected:
+ /**
+ * sorter's compare routine. Returns true if i1 < i2
+ */
+ static bool item_cmp(RegisterItem* i1, RegisterItem* i2);
+};
+
+
+class Register : public TransactionEditorContainer
+{
+ Q_OBJECT
+
+ // friend class QHeader;
+ // friend class QTableHeader;
+ // friend class RegisterItem;
+ friend class Transaction;
+ friend class StdTransaction;
+ friend class InvestTransaction;
+
+public:
+ Register(QWidget *parent = 0, const char *name = 0);
+ virtual ~Register();
+
+ /**
+ * add the item @a p to the register
+ */
+ void addItem(RegisterItem* p);
+
+ /**
+ * insert the item @a p into the register after item @a q
+ */
+ void insertItemAfter(RegisterItem* p, RegisterItem* q);
+
+ /**
+ * remove the item @p from the register
+ */
+ void removeItem(RegisterItem* p);
+
+ /**
+ * This method returns a list of pointers to all selected items
+ * in the register
+ *
+ * @retval QValueList<RegisterItem*>
+ */
+ QValueList<RegisterItem*> selectedItems(void) const;
+
+ /**
+ * Construct a list of all currently selected transactions in the register.
+ * If the current item carrying the focus (see focusItem() ) is selected
+ * it will be the first one contained in the list.
+ *
+ * @param list reference to QValueList receiving the SelectedTransaction()'s
+ */
+ void selectedTransactions(SelectedTransactions& list) const;
+
+ QString text(int row, int col) const;
+ QWidget* createEditor(int row, int col, bool initFromCell) const;
+ void setCellContentFromEditor(int row, int col);
+ QWidget* cellWidget(int row, int col) const;
+ void endEdit(int row, int col, bool accept, bool replace);
+ void paintCell(QPainter* painter, int row, int col, const QRect& r, bool selected, const QColorGroup& cg);
+
+ void resizeData(int) {}
+ QTableItem* item(int, int) { return 0; }
+ void setItem(int, int, QTableItem*) {}
+ void clearCell(int, int) {}
+ void clearCellWidget(int, int);
+
+ /**
+ * Override the QTable member function to avoid display of focus
+ */
+ void paintFocus(QPainter*, const QRect& ) {}
+
+ /**
+ * Override the QTable member function to avoid functionality
+ */
+ void updateCell(int /* row */, int /* col */) {}
+
+ RegisterItem* focusItem(void) const { return m_focusItem; }
+ RegisterItem* anchorItem(void) const { return m_selectAnchor; }
+
+ /**
+ * set focus to specific item.
+ * @return true if the item got focus
+ */
+ bool setFocusItem(RegisterItem* focusItem);
+
+ void setAnchorItem(RegisterItem* anchorItem);
+
+ /**
+ * Set focus to the first focussable item
+ * @return true if a focussable item was found
+ */
+ bool setFocusToTop(void);
+
+ /**
+ * Select @a item and unselect all others if @a dontChangeSelections
+ * is @a false. If m_buttonState differs from Qt::NoButton (method is
+ * called as a result of a mouse button press), then the setting of
+ * @a dontChangeSelections has no effect.
+ */
+ void selectItem(RegisterItem* item, bool dontChangeSelections = false);
+
+ /**
+ * Clears all items in the register. All objects
+ * added to the register will be deleted.
+ */
+ void clear(void);
+
+ void updateRegister(bool forceUpdateRowHeight = false);
+
+ /**
+ * Assign all visible items an alternate background color
+ */
+ void updateAlternate(void) const;
+
+ /**
+ * make sure, we only show a single marker in a row
+ * through hiding unused ones
+ */
+ void suppressAdjacentMarkers(void);
+
+ /**
+ * Adjusts column @a col so that all data fits in width.
+ */
+ void adjustColumn(int col);
+
+ /**
+ * Convenience method to setup the register to show the columns
+ * based on the account type of @a account. If @a showAccountColumn
+ * is @a true then the account column is shown independant of the
+ * account type. If @a account does not have an @a id, all columns
+ * will be hidden.
+ */
+ void setupRegister(const MyMoneyAccount& account, bool showAccountColumn = false);
+
+ /**
+ * Show the columns contained in @a cols for @a account. @a account
+ * can be left empty ( MyMoneyAccount() ) e.g. for the search dialog.
+ */
+ void setupRegister(const MyMoneyAccount& account, const QValueList<Column>& cols);
+
+ void setSortOrder(const QString& order);
+ const QValueList<TransactionSortField>& sortOrder(void) const { return m_sortOrder; }
+ TransactionSortField primarySortKey(void) const;
+ void sortItems(void);
+
+ /**
+ * This member returns the last visible column that is used by the register
+ * after it has been setup using setupRegister().
+ *
+ * @return last actively used column (base 0)
+ */
+ Column lastCol(void) const { return m_lastCol; }
+
+ RegisterItem* firstItem(void) const;
+ RegisterItem* firstVisibleItem(void) const;
+ RegisterItem* nextItem(RegisterItem*) const;
+ RegisterItem* lastItem(void) const;
+ RegisterItem* lastVisibleItem(void) const;
+ RegisterItem* prevItem(RegisterItem*) const;
+ RegisterItem* itemAtRow(int row) const;
+
+ void resize(int col);
+
+ void forceUpdateLists(void) { m_listsDirty = true; }
+
+ void ensureItemVisible(RegisterItem* item);
+
+ void arrangeEditWidgets(QMap<QString, QWidget*>& editWidgets, Transaction* t);
+ void removeEditWidgets(QMap<QString, QWidget*>& editWidgets);
+ void tabOrder(QWidgetList& tabOrderWidgets, KMyMoneyRegister::Transaction* t) const;
+
+ int rowHeightHint(void) const;
+
+ void clearSelection(void);
+
+ bool markErronousTransactions(void) const { return (m_markErronousTransactions & 0x01) != 0; }
+
+ /**
+ * This method creates a specifc transaction according to the
+ * transaction passed in @a transaction.
+ *
+ * @param parent pointer to register where the created object should be added
+ * @param transaction the transaction which should be used to create the object
+ * @param split the split of the transaction which should be used to create the object
+ * @param uniqueId an int that will be used to construct the id of the item
+ *
+ * @return pointer to created object (0 upon failure)
+ */
+ static Transaction* transactionFactory(Register *parent, const MyMoneyTransaction& transaction, const MyMoneySplit& split, int uniqueId);
+
+ const MyMoneyAccount& account(void) const { return m_account; }
+
+ void repaintItems(RegisterItem* first = 0, RegisterItem* last = 0);
+
+ unsigned int drawCounter(void) const { return m_drawCounter; }
+
+ /**
+ * This method creates group marker items and adds them to the register
+ */
+ void addGroupMarkers(void);
+
+ /**
+ * This method removes all trailing group markers and in a second
+ * run reduces all adjacent group markers to show only one. In that
+ * case the last one will remain.
+ */
+ void removeUnwantedGroupMarkers(void);
+
+ void setLedgerLensForced(bool forced=true) { m_ledgerLensForced = forced; }
+
+ /**
+ * Sets the selection mode to @a mode. Supported modes are QTable::Single and
+ * QTable::Multi. QTable::Multi is the default when the object is created.
+ */
+ void setSelectionMode(SelectionMode mode) { m_selectionMode = mode; }
+
+protected:
+
+ void drawContents(QPainter *p, int cx, int cy, int cw, int ch);
+
+ void contentsMouseReleaseEvent( QMouseEvent *e );
+
+ void unselectItems(int from = -1, int to = -1) { doSelectItems(from, to, false); }
+ void selectItems(int from, int to) { doSelectItems(from, to, true); }
+ void doSelectItems(int from, int to, bool selected);
+ int selectedItemsCount(void) const;
+
+ void focusOutEvent(QFocusEvent*);
+ void focusInEvent(QFocusEvent*);
+ void keyPressEvent(QKeyEvent*);
+
+ int rowToIndex(int row) const;
+ void setupItemIndex(int rowCount);
+
+ /**
+ * This method determines the register item that is one page
+ * further down or up in the ledger from the previous focus item.
+ * The height to scroll is determined by visibleHeight()
+ *
+ * @param key Qt::Page_Up or Qt::Page_Down depending on the direction to scroll
+ * @param state state of Qt::ShiftButton, Qt::ControlButton, Qt::AltButton and
+ * Qt::MetaButton.
+ */
+ void scrollPage(int key, ButtonState state);
+
+ /**
+ * This method determines the pointer to a RegisterItem
+ * based on the item's @a id. If @a id is empty, this method
+ * returns @a m_lastItem.
+ *
+ * @param id id of the item to be searched
+ * @return pointer to RegisterItem or 0 if not found
+ */
+ RegisterItem* itemById(const QString& id) const;
+
+ void insertWidget(int row, int col, QWidget* w);
+
+ /**
+ * Override logic and use standard QFrame behaviour
+ */
+ bool focusNextPrevChild(bool next);
+
+ bool eventFilter(QObject* o, QEvent* e);
+
+ void handleItemChange(RegisterItem* old, bool shift, bool control);
+
+ void selectRange(RegisterItem* from, RegisterItem* to, bool invert, bool includeFirst, bool clearSel);
+
+ // DND
+ void dragMoveEvent(QDragMoveEvent* event);
+ void dropEvent(QDropEvent* event);
+ Transaction* dropTransaction(QPoint cPos) const;
+
+protected slots:
+ void resize(void);
+
+ void selectItem(int row, int col, int button, const QPoint & mousePos );
+ void slotEnsureItemVisible(void);
+ void slotDoubleClicked(int, int, int, const QPoint&);
+
+ void slotToggleErronousTransactions(void);
+ void slotAutoColumnSizing(int section);
+
+signals:
+ void selectionChanged(void);
+ void selectionChanged(const KMyMoneyRegister::SelectedTransactions& list);
+ /**
+ * This signal is emitted when the focus and selection changes to @p item.
+ *
+ * @param item pointer to transaction that received the focus and was selected
+ */
+ void focusChanged(KMyMoneyRegister::Transaction* item);
+
+ /**
+ * This signal is emitted when the focus changes but the selection remains
+ * the same. This usually happens when the focus is changed using the keyboard.
+ */
+ void focusChanged(void);
+
+ /**
+ * This signal is emitted when an @p item is about to be selected. The boolean
+ * @p okToSelect is preset to @c true. If the @p item should not be selected
+ * for whatever reason, the boolean @p okToSelect should be reset to @c false
+ * by the connected slot.
+ */
+ void aboutToSelectItem(KMyMoneyRegister::RegisterItem* item, bool& okToSelect);
+
+ void editTransaction(void);
+ void headerClicked(void);
+
+ /**
+ * This signal is sent out when the user clicks on the ReconcileStateColumn and
+ * only a single transaction is selected.
+ */
+ void reconcileStateColumnClicked(KMyMoneyRegister::Transaction* item);
+
+ /**
+ * This signal is sent out, if an item without a transaction id has been selected.
+ */
+ void emptyItemSelected(void);
+
+ /**
+ * This signal is sent out, if the user selects an item with the right mouse button
+ */
+ void openContextMenu(void);
+
+ /**
+ * This signal is sent out when a new item has been added to the register
+ */
+ void itemAdded(RegisterItem* item);
+
+protected:
+ ItemPtrVector m_items;
+ QValueVector<RegisterItem*> m_itemIndex;
+ RegisterItem* m_selectAnchor;
+ RegisterItem* m_focusItem;
+ RegisterItem* m_ensureVisibleItem;
+ RegisterItem* m_firstItem;
+ RegisterItem* m_lastItem;
+ RegisterItem* m_firstErronous;
+ RegisterItem* m_lastErronous;
+
+ int m_markErronousTransactions;
+ int m_rowHeightHint;
+
+ MyMoneyAccount m_account;
+
+ bool m_ledgerLensForced;
+ SelectionMode m_selectionMode;
+
+private:
+ bool m_listsDirty;
+ bool m_ignoreNextButtonRelease;
+ bool m_needInitialColumnResize;
+ Qt::ButtonState m_buttonState;
+ Column m_lastCol;
+ QValueList<TransactionSortField> m_sortOrder;
+ QMap<QPair<int, int>, QWidget*> m_cellWidgets;
+ RegisterToolTip* m_tooltip;
+ QRect m_lastRepaintRect;
+ unsigned int m_drawCounter;
+};
+
+} // namespace
+
+#endif
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/widgets/registeritem.cpp b/kmymoney2/widgets/registeritem.cpp
new file mode 100644
index 0000000..6ef082f
--- /dev/null
+++ b/kmymoney2/widgets/registeritem.cpp
@@ -0,0 +1,116 @@
+/***************************************************************************
+ registeritem.cpp - description
+ -------------------
+ begin : Tue Jun 13 2006
+ copyright : (C) 2000-2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/registeritem.h>
+#include <kmymoney/register.h>
+
+#include "../kmymoneyglobalsettings.h"
+
+using namespace KMyMoneyRegister;
+
+QDate RegisterItem::nullDate;
+MyMoneyMoney RegisterItem::nullValue;
+
+RegisterItem::RegisterItem() :
+ m_parent(0),
+ m_prev(0),
+ m_next(0)
+{
+ init();
+}
+
+RegisterItem::RegisterItem(Register* parent) :
+ m_parent(parent),
+ m_prev(0),
+ m_next(0)
+{
+ init();
+ parent->addItem(this);
+}
+
+void RegisterItem::init(void)
+{
+ m_startRow = 0;
+ m_rowsRegister = 1;
+ m_rowsForm = 1;
+ m_visible = true;
+}
+
+RegisterItem::~RegisterItem()
+{
+ m_parent->removeItem(this);
+}
+
+void RegisterItem::setParent(Register* parent)
+{
+ m_parent = parent;
+}
+
+void RegisterItem::setNumRowsRegister(int rows)
+{
+ if(rows != m_rowsRegister) {
+ m_rowsRegister = rows;
+ if(m_parent)
+ m_parent->forceUpdateLists();
+ }
+}
+
+bool RegisterItem::markVisible(bool visible)
+{
+ if(m_visible == visible)
+ return false;
+ m_visible = visible;
+ return true;
+}
+
+void RegisterItem::setVisible(bool visible)
+{
+ if(markVisible(visible) && m_parent) {
+ if(visible) {
+ for(int i = startRow(); i < startRow() + numRowsRegister(); ++i) {
+ m_parent->showRow(i);
+ m_parent->setRowHeight(i, rowHeightHint());
+ }
+ } else {
+ for(int i = startRow(); i < startRow() + numRowsRegister(); ++i) {
+ m_parent->hideRow(i);
+ }
+ }
+ }
+}
+
+int RegisterItem::rowHeightHint(void) const
+{
+ if(!m_visible)
+ return 0;
+
+ if(m_parent) {
+ return m_parent->rowHeightHint();
+ }
+
+ QFontMetrics fm( KMyMoneyGlobalSettings::listCellFont() );
+ return fm.lineSpacing()+6;
+}
diff --git a/kmymoney2/widgets/registeritem.h b/kmymoney2/widgets/registeritem.h
new file mode 100644
index 0000000..84afa84
--- /dev/null
+++ b/kmymoney2/widgets/registeritem.h
@@ -0,0 +1,226 @@
+/***************************************************************************
+ registeritem.h - description
+ -------------------
+ begin : Tue Jun 13 2006
+ copyright : (C) 2000-2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef REGISTERITEM_H
+#define REGISTERITEM_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstring.h>
+#include <qdatetime.h>
+#include <qpainter.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneymoney.h>
+#include <kmymoney/mymoneysplit.h>
+#include <kmymoney/mymoneyobject.h>
+
+namespace KMyMoneyRegister {
+
+typedef enum {
+ Deposit = 0, //< transaction is deposit
+ Payment, //< transaction is payment
+ Unknown //< transaction cashflow is unknown
+} CashFlowDirection;
+
+typedef enum {
+ ActionNone = -1,
+ ActionCheck = 0,
+ /* these should be values which qt 3.3 never uses for QTab:
+ * qt starts upwards from 0
+ */
+ ActionDeposit = 12201,
+ ActionTransfer = 12202,
+ ActionWithdrawal = 12203,
+ ActionAtm,
+ // insert new values above this line
+ MaxAction
+} Action;
+
+
+class Register;
+
+/**
+ * @author Thomas Baumgart
+ */
+class RegisterItem
+{
+public:
+ RegisterItem();
+ RegisterItem(Register* parent);
+ virtual ~RegisterItem();
+
+ virtual const char* className(void) = 0;
+
+ virtual bool isSelectable(void) const = 0;
+ virtual bool isSelected(void) const { return false; }
+ virtual void setSelected(bool /* selected*/) {}
+
+ virtual bool canHaveFocus(void) const = 0;
+ virtual bool hasFocus(void) const { return false; }
+ virtual bool hasEditorOpen(void) const { return false; }
+
+ virtual void setFocus(bool /*focus*/, bool updateLens = true) { updateLens = false; }
+
+ virtual bool isErronous(void) const = 0;
+
+ // helper functions used for sorting
+ virtual const QDate& sortPostDate(void) const { return nullDate; }
+ virtual int sortSamePostDate(void) const = 0;
+ virtual const QDate& sortEntryDate(void) const { return nullDate; }
+ virtual const QString& sortPayee(void) const { return QString::null; }
+ virtual const MyMoneyMoney& sortValue(void) const { return nullValue; }
+ virtual const QString& sortNumber(void) const { return QString::null; }
+ virtual const QString& sortEntryOrder(void) const { return QString::null; }
+ virtual CashFlowDirection sortType(void) const { return Deposit; }
+ virtual const QString& sortCategory(void) const { return QString::null; }
+ virtual MyMoneySplit::reconcileFlagE sortReconcileState(void) const { return MyMoneySplit::MaxReconcileState; }
+ virtual const QString& sortSecurity(void) const { return QString::null; }
+
+ /**
+ * This method sets the row offset of the item in the register
+ * to row.
+ *
+ * @param row row offset
+ *
+ * @note The row offset is based on QTable rows, not register
+ * items.
+ */
+ virtual void setStartRow(int row) { m_startRow = row; }
+ int startRow(void) const { return m_startRow; }
+ virtual int rowHeightHint(void) const;
+
+ /**
+ * This method modifies the number of rows required to display this item
+ * in a Register.
+ * It calls Register::forceUpdateLists() when the number differs.
+ */
+ virtual void setNumRowsRegister(int rows);
+
+ /**
+ * This method modifies the number of rows required to display this item
+ * in a Form.
+ */
+ virtual void setNumRowsForm(int rows) { m_rowsForm = rows; }
+
+ /**
+ * This method returns the number of rows required to display this item
+ * in a Register
+ */
+ virtual int numRowsRegister(void) const { return m_rowsRegister; }
+
+ /**
+ * This method returns the number of rows required to display this item
+ * in a Form
+ */
+ virtual int numRowsForm(void) const { return m_rowsForm; }
+ virtual int numColsForm(void) const { return 1; }
+
+ /**
+ * This method sets up the register item to be shown in normal (@p alternate = @p false)
+ * or alternate (@p alternate = @p true) background.
+ *
+ * @param alternate selects normal or alternate background
+ */
+ virtual void setAlternate(bool alternate) { m_alternate = alternate; }
+
+ virtual void paintRegisterCell(QPainter* painter, int row, int col, const QRect& r, bool selected, const QColorGroup& cg) = 0;
+ virtual void paintFormCell(QPainter* painter, int row, int col, const QRect& r, bool selected, const QColorGroup& cg) = 0;
+
+ virtual const QString& id(void) const { return MyMoneyObject::emptyId(); }
+
+ /**
+ * Sets the parent of this item to be the register @p parent
+ *
+ * @param parent pointer to register
+ */
+ void setParent(Register* parent);
+
+ /**
+ * This member returns a pointer to the parent object
+ *
+ * @retval pointer to Register
+ */
+ Register* parent(void) const { return m_parent; }
+
+ void setNeedResize(void) { m_needResize = true; }
+
+ bool isVisible(void) const { return m_visible; }
+
+ /**
+ * Marks the item visible depending on @a visible and
+ * updates the underlying register object
+ */
+ virtual void setVisible(bool visible);
+
+ /**
+ * Marks the item visible depending on @a visible but
+ * does not update the underlying register object. Returns
+ * true, if visibility has changed.
+ */
+ virtual bool markVisible(bool visible);
+
+ void setNextItem(RegisterItem* p) { m_next = p; }
+ void setPrevItem(RegisterItem* p) { m_prev = p; }
+ RegisterItem* nextItem(void) const { return m_next; }
+ RegisterItem* prevItem(void) const { return m_prev; }
+
+ virtual bool matches(const QString&) const = 0;
+
+ /**
+ * Checks if the mouse hovered over an area that has a tooltip associated with it.
+ * The mouse position is given in relative coordinates to the @a startRow and the
+ * @a row and @a col of the item are also passed as relative values.
+ *
+ * If a tooltip shall be shown, this method presets the rectangle @a r with the
+ * area in register coordinates and @a msg with the string that will be passed
+ * to QToolTip::tip. @a true is returned in this case.
+ *
+ * If no tooltip is available, @a false will be returned.
+ */
+ virtual bool maybeTip(const QPoint& /* relpos */, int /* row */, int /* col */, QRect& /* r */, QString& /* msg */) { return false; }
+
+protected:
+ /// This method serves as helper for all constructors
+ void init(void);
+
+protected:
+ Register* m_parent;
+ RegisterItem* m_prev;
+ RegisterItem* m_next;
+ int m_startRow;
+ int m_rowsRegister;
+ int m_rowsForm;
+ bool m_alternate;
+ bool m_needResize;
+ bool m_visible;
+
+private:
+ static QDate nullDate;
+ static MyMoneyMoney nullValue;
+};
+
+} // namespace
+
+#endif
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/widgets/registersearchline.cpp b/kmymoney2/widgets/registersearchline.cpp
new file mode 100644
index 0000000..f0ef6e9
--- /dev/null
+++ b/kmymoney2/widgets/registersearchline.cpp
@@ -0,0 +1,301 @@
+/***************************************************************************
+ registersearchline.cpp
+ -------------------
+ copyright : (C) 2006 by Thomas Baumgart
+ email : ipwizard@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qapplication.h>
+#include <qlabel.h>
+#include <qtoolbutton.h>
+#include <qtimer.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <ktoolbar.h>
+#include <ktoolbarbutton.h>
+#include <kiconloader.h>
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <registersearchline.h>
+
+using namespace KMyMoneyRegister;
+
+class RegisterSearchLine::RegisterSearchLinePrivate
+{
+public:
+ RegisterSearchLinePrivate() :
+ reg(0),
+ combo(0),
+ queuedSearches(0),
+ status(0) {}
+
+ Register* reg;
+ QComboBox* combo;
+ QString search;
+ int queuedSearches;
+ int status;
+};
+
+RegisterSearchLine::RegisterSearchLine(QWidget* parent, Register* reg, const char* name) :
+ KLineEdit(parent, name),
+ d(new RegisterSearchLinePrivate)
+{
+ init(reg);
+}
+
+RegisterSearchLine::RegisterSearchLine(QWidget* parent, const char* name) :
+ KLineEdit(parent, name),
+ d(new RegisterSearchLinePrivate)
+{
+ init(0);
+}
+
+void RegisterSearchLine::init(Register *reg)
+{
+ d->reg = reg;
+ connect(this, SIGNAL(textChanged(const QString&)), this, SLOT(queueSearch(const QString&)));
+
+ QLabel* label = new QLabel(i18n("label for status combo", "Stat&us"), parentWidget());
+ d->combo = new QComboBox(parentWidget());
+ // don't change the order of the following lines unless updating
+ // the case labels in RegisterSearchLine::itemMatches() at the same time
+ d->combo->insertItem(SmallIcon("run"), i18n("Any status"));
+ d->combo->insertItem(SmallIcon("fileimport"), i18n("Imported"));
+ d->combo->insertItem(SmallIcon("connect_creating"), i18n("Matched"));
+ d->combo->insertItem(SmallIcon("attention"), i18n("Erroneous"));
+ d->combo->insertItem(i18n("Not marked"));
+ d->combo->insertItem(i18n("Not reconciled"));
+ d->combo->insertItem(i18n("Cleared"));
+ d->combo->setCurrentItem(0);
+ connect(d->combo, SIGNAL(activated(int)), this, SLOT(slotStatusChanged(int)));
+
+ label->setBuddy(d->combo);
+
+ if(reg) {
+ connect(reg, SIGNAL(destroyed()), this, SLOT(registerDestroyed()));
+ connect(reg, SIGNAL(itemAdded(RegisterItem*)), this, SLOT(itemAdded(RegisterItem*)));
+ } else {
+ setEnabled(false);
+ }
+}
+
+RegisterSearchLine::~RegisterSearchLine()
+{
+ delete d;
+}
+
+void RegisterSearchLine::setRegister(Register* reg)
+{
+ if(d->reg) {
+ disconnect(d->reg, SIGNAL(destroyed()), this, SLOT(registerDestroyed()));
+ disconnect(d->reg, SIGNAL(itemAdded(RegisterItem*)), this, SLOT(itemAdded(RegisterItem*)));
+ }
+
+ d->reg = reg;
+
+ if(reg) {
+ connect(reg, SIGNAL(destroyed()), this, SLOT(registerDestroyed()));
+ connect(reg, SIGNAL(itemAdded(RegisterItem*)), this, SLOT(itemAdded(RegisterItem*)));
+ }
+
+ setEnabled(reg != 0);
+}
+
+void RegisterSearchLine::slotStatusChanged(int status)
+{
+ d->status = status;
+ updateSearch();
+}
+
+void RegisterSearchLine::queueSearch(const QString& search)
+{
+ d->queuedSearches++;
+ d->search = search;
+ QTimer::singleShot(200, this, SLOT(activateSearch()));
+}
+
+void RegisterSearchLine::activateSearch(void)
+{
+ --(d->queuedSearches);
+ if(d->queuedSearches == 0)
+ updateSearch(d->search);
+}
+
+void RegisterSearchLine::updateSearch(const QString& s)
+{
+ if(!d->reg)
+ return;
+
+ d->search = s.isNull() ? text() : s;
+
+ // keep track of the current focus item
+ RegisterItem* focusItem = d->reg->focusItem();
+
+ bool enabled = d->reg->isUpdatesEnabled();
+ d->reg->setUpdatesEnabled(false);
+
+ bool scrollBarVisible = d->reg->verticalScrollBar()->isVisible();
+
+ RegisterItem* p = d->reg->firstItem();
+ for(; p; p = p->nextItem()) {
+ p->setVisible(itemMatches(p, d->search));
+ }
+ d->reg->suppressAdjacentMarkers();
+ d->reg->updateAlternate();
+ d->reg->setUpdatesEnabled(enabled);
+
+ // if focus item is still visible, then make sure we have
+ // it on screen
+ if(focusItem && focusItem->isVisible()) {
+ d->reg->updateContents();
+ d->reg->ensureItemVisible(focusItem);
+ } else
+ d->reg->repaintContents();
+
+ d->reg->updateScrollBars();
+
+ // if the scrollbar's visibility changed, we need to resize the contents
+ if(scrollBarVisible != d->reg->verticalScrollBar()->isVisible()) {
+ d->reg->resize(DetailColumn);
+ }
+}
+
+bool RegisterSearchLine::itemMatches(const RegisterItem* item, const QString& s) const
+{
+ const Transaction* t = dynamic_cast<const Transaction*>(item);
+ if(t && !t->transaction().id().isEmpty()) {
+ // Keep the case list of the following switch statement
+ // in sync with the logic to fill the combo box in
+ // RegisterSearchLine::init()
+ switch(d->status) {
+ default:
+ break;
+ case 1: // Imported
+ if(!t->transaction().isImported())
+ return false;
+ break;
+ case 2: // Matched
+ if(!t->split().isMatched())
+ return false;
+ break;
+ case 3: // Erroneous
+ if(t->transaction().splitSum().isZero())
+ return false;
+ break;
+ case 4: // Not marked
+ if(t->split().reconcileFlag() != MyMoneySplit::NotReconciled)
+ return false;
+ break;
+ case 5: // Not reconciled
+ if(t->split().reconcileFlag() != MyMoneySplit::NotReconciled
+ && t->split().reconcileFlag() != MyMoneySplit::Cleared)
+ return false;
+ break;
+ case 6: // Cleared
+ if(t->split().reconcileFlag() != MyMoneySplit::Cleared)
+ return false;
+ break;
+ }
+ }
+
+ return item->matches(s);
+}
+
+void RegisterSearchLine::reset(void)
+{
+ clear();
+ d->combo->setCurrentItem(0);
+ slotStatusChanged(0);
+}
+
+void RegisterSearchLine::itemAdded(RegisterItem* item) const
+{
+ item->setVisible(itemMatches(item, text()));
+}
+
+void RegisterSearchLine::registerDestroyed(void)
+{
+ d->reg = 0;
+ setEnabled(false);
+}
+
+
+class RegisterSearchLineWidget::RegisterSearchLineWidgetPrivate
+{
+ public:
+ RegisterSearchLineWidgetPrivate() :
+ reg(0),
+ searchLine(0),
+ clearButton(0) {}
+
+ Register* reg;
+ RegisterSearchLine* searchLine;
+ QToolButton* clearButton;
+};
+
+
+RegisterSearchLineWidget::RegisterSearchLineWidget(Register* reg, QWidget* parent, const char* name) :
+ QHBox(parent, name),
+ d(new RegisterSearchLineWidgetPrivate)
+{
+ d->reg = reg;
+ setSpacing(5);
+ QTimer::singleShot(0, this, SLOT(createWidgets()));
+}
+
+RegisterSearchLineWidget::~RegisterSearchLineWidget()
+{
+ delete d;
+}
+
+RegisterSearchLine* RegisterSearchLineWidget::createSearchLine(Register* reg)
+{
+ if(!d->searchLine)
+ d->searchLine = new RegisterSearchLine(this, reg);
+ return d->searchLine;
+}
+
+void RegisterSearchLineWidget::createWidgets(void)
+{
+ if(!d->clearButton) {
+ d->clearButton = new QToolButton(this);
+ QIconSet icon = SmallIconSet(QApplication::reverseLayout() ? "clear_left" : "locationbar_erase");
+ d->clearButton->setIconSet(icon);
+ }
+
+ d->clearButton->show();
+
+ QLabel *label = new QLabel(i18n("S&earch:"), this, "kde toolbar widget");
+
+ d->searchLine = createSearchLine(d->reg);
+ d->searchLine->show();
+
+ label->setBuddy(d->searchLine);
+ label->show();
+
+ connect(d->clearButton, SIGNAL(clicked()), d->searchLine, SLOT(reset()));
+}
+
+RegisterSearchLine* RegisterSearchLineWidget::searchLine(void) const
+{
+ return d->searchLine;
+}
+
+#include "registersearchline.moc"
diff --git a/kmymoney2/widgets/registersearchline.h b/kmymoney2/widgets/registersearchline.h
new file mode 100644
index 0000000..d495ab1
--- /dev/null
+++ b/kmymoney2/widgets/registersearchline.h
@@ -0,0 +1,151 @@
+/***************************************************************************
+ registersearchline.h
+ -------------------
+ begin : Sun Jan 14 2006
+ copyright : (C) 2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef REGISTERSEARCHLINE_H
+#define REGISTERSEARCHLINE_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qhbox.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klineedit.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/register.h>
+#include <kmymoney/export.h>
+
+namespace KMyMoneyRegister {
+
+/**
+ * This class makes it easy to add a search line for filtering the items
+ * in a register based on simple text. Inspired by the idea of the kdelibs
+ * class KListViewSearchLine.
+ *
+ * @author Thomas Baumgart
+ */
+class KMYMONEY_EXPORT RegisterSearchLine : public KLineEdit
+{
+ Q_OBJECT
+public:
+ /**
+ * Constructs a RegisterSearchLine with @a reg being the register to be
+ * filtered.
+ *
+ * If @a reg is null then the widget will be disabled until a register
+ * is set with setRegister().
+ */
+ RegisterSearchLine(QWidget* parent = 0, Register* reg = 0, const char* name = 0);
+
+ /**
+ * Constructs a RegisterSearchLine
+ *
+ * The widget will be disabled until a register is set with setRegister().
+ */
+ RegisterSearchLine(QWidget* parent = 0, const char* name = 0);
+
+ /**
+ * Destroys the object
+ */
+ ~RegisterSearchLine();
+
+ /**
+ * Sets the KMyMoneyRegister that is filtered by this search line.
+ * If @a reg is null then the widget will be disabled.
+ *
+ * @see KMyMoneyRegister()
+ */
+ void setRegister(Register* reg);
+
+protected:
+ virtual bool itemMatches(const RegisterItem* item, const QString& s) const;
+
+public slots:
+ virtual void updateSearch(const QString& s = QString::null);
+ virtual void reset(void);
+
+protected slots:
+ void queueSearch(const QString& search);
+ void activateSearch(void);
+ void slotStatusChanged(int);
+
+private slots:
+ void itemAdded(RegisterItem* item) const;
+ void registerDestroyed(void);
+
+private:
+ void init(Register* reg);
+
+private:
+ class RegisterSearchLinePrivate;
+ RegisterSearchLinePrivate* const d;
+};
+
+/**
+ * Creates a widget containing a RegisterSearchLine, a label with the text
+ * "Search" and a button to clear the search. Modelled after KListViewSearchLineWidget.
+ *
+ * @author Thomas Baumgart
+ */
+class KMYMONEY_EXPORT RegisterSearchLineWidget : public QHBox
+{
+ Q_OBJECT
+public:
+ /**
+ * Creates a RegisterSearchLineWidget for @a reg with @a parent as the
+ * parent and with @a name.
+ */
+ RegisterSearchLineWidget(Register* reg = 0, QWidget* parent = 0, const char* name = 0);
+
+ /**
+ * Destroys the object
+ */
+ ~RegisterSearchLineWidget();
+
+ /**
+ * Returns a pointer to the searchline
+ */
+ RegisterSearchLine* searchLine() const;
+
+ /**
+ * Creates the search line. This can be useful to reimplement in cases where
+ * a RegisterSearchLine subclass is used.
+ */
+ virtual RegisterSearchLine* createSearchLine(Register* reg);
+
+protected slots:
+ /**
+ * Creates the widgets inside of the widget. This is called from the
+ * constructor via a single shot timer so that it is guaranteed to run
+ * after construction is complete. This makes it suitable for overriding in
+ * subclasses.
+ */
+ virtual void createWidgets(void);
+
+private:
+ class RegisterSearchLineWidgetPrivate;
+ RegisterSearchLineWidgetPrivate* const d;
+};
+
+} // namespace
+
+#endif
diff --git a/kmymoney2/widgets/scheduledtransaction.cpp b/kmymoney2/widgets/scheduledtransaction.cpp
new file mode 100644
index 0000000..98d6787
--- /dev/null
+++ b/kmymoney2/widgets/scheduledtransaction.cpp
@@ -0,0 +1,53 @@
+/***************************************************************************
+ scheduledtransaction.cpp
+ -------------------
+ begin : Tue Aug 19 2008
+ copyright : (C) 2008 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <scheduledtransaction.h>
+#include <kmymoney/kmymoneyglobalsettings.h>
+#include <kmymoney/register.h>
+
+using namespace KMyMoneyRegister;
+using namespace KMyMoneyTransactionForm;
+
+StdTransactionScheduled::StdTransactionScheduled(Register *parent, const MyMoneyTransaction& transaction, const MyMoneySplit& split, int uniqueId) :
+ StdTransaction(parent, transaction, split, uniqueId),
+ m_drawCounter(parent->drawCounter()-1)
+{
+ // setup initial size
+ setNumRowsRegister(numRowsRegister(KMyMoneyGlobalSettings::showRegisterDetailed()));
+}
+
+bool StdTransactionScheduled::paintRegisterCellSetup(QPainter* painter, int& row, int& col, QRect& cellRect, QRect& textRect, QColorGroup& cg, QBrush& brush)
+{
+ QRect r(cellRect);
+ cg = m_parent->palette().disabled();
+
+ bool rc = Transaction::paintRegisterCellSetup(painter, row, col, cellRect, textRect, cg, brush);
+ return rc;
+}
+
+
diff --git a/kmymoney2/widgets/scheduledtransaction.h b/kmymoney2/widgets/scheduledtransaction.h
new file mode 100644
index 0000000..836ceee
--- /dev/null
+++ b/kmymoney2/widgets/scheduledtransaction.h
@@ -0,0 +1,86 @@
+/***************************************************************************
+ scheduledtransaction.h
+ -------------------
+ begin : Tue Aug 19 2008
+ copyright : (C) 2008 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef SCHEDULEDTRANSACTION_H
+#define SCHEDULEDTRANSACTION_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/transaction.h>
+
+namespace KMyMoneyTransactionForm {
+ class TransactionForm;
+}; // namespace
+
+namespace KMyMoneyRegister {
+
+class StdTransactionScheduled : public StdTransaction
+{
+public:
+ StdTransactionScheduled(Register* parent, const MyMoneyTransaction& transaction, const MyMoneySplit& split, int uniqueId);
+ virtual ~StdTransactionScheduled() {}
+
+ virtual const char* className(void) { return "StdTransactionScheduled"; }
+
+ /**
+ * This method sets the general paramaters required for the painting of a cell
+ * in the register. These are:
+ *
+ * - background color (alternating)
+ * - background color (imported transaction)
+ * - background color (matched transaction)
+ * - background color (selected transaction)
+ * - cellRect (area covering the cell)
+ * - textRect (area covering the text)
+ * - color of the pen to do the painting of text and lines
+ *
+ * @param painter pointer to the QPainter object
+ * @param row vertical index of cell in register
+ * @param col horizontal index of cell in register
+ * @param cellRect ref to QRect object receiving the area information for the cell
+ * @param textRect ref to QRect object receiving the area information for the text
+ * @param cg ref to QColorGroup object receiving the color information to be used
+ * @param brush ref to QBrush object receiveing the brush information to be used
+ */
+ virtual bool paintRegisterCellSetup(QPainter* painter, int& row, int& col, QRect& cellRect, QRect& textRect, QColorGroup& cg, QBrush& brush);
+
+ bool isSelectable(void) const { return true; }
+ bool canHaveFocus(void) const { return true; }
+ virtual bool isScheduled(void) const { return true; }
+
+ virtual int sortSamePostDate(void) const { return 4; }
+
+// virtual void paintRegisterGrid(QPainter* painter, int row, int col, const QRect& r, const QColorGroup& cg) const;
+
+// void registerCellText(QString& txt, int& align, int row, int col, QPainter* painter = 0);
+
+private:
+ unsigned int m_drawCounter;
+};
+
+}; // namespace
+
+#endif
+// vim:cin:si:ai:et:ts=2:sw=2:
+
diff --git a/kmymoney2/widgets/selectedtransaction.cpp b/kmymoney2/widgets/selectedtransaction.cpp
new file mode 100644
index 0000000..055dc3d
--- /dev/null
+++ b/kmymoney2/widgets/selectedtransaction.cpp
@@ -0,0 +1,69 @@
+/***************************************************************************
+ selectedtransaction.cpp - description
+ -------------------
+ begin : Fri Jun 2008
+ copyright : (C) 2000-2008 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "selectedtransaction.h"
+
+#include "register.h"
+#include <kmymoney/mymoneysplit.h>
+#include <kmymoney/mymoneyfile.h>
+
+namespace KMyMoneyRegister {
+
+int SelectedTransaction::warnLevel() const
+{
+ int warnLevel = 0;
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = transaction().splits().begin(); warnLevel < 2 && it_s != transaction().splits().end(); ++it_s) {
+ const MyMoneyAccount& acc = MyMoneyFile::instance()->account((*it_s).accountId());
+ if(acc.isClosed())
+ warnLevel = 3;
+ else if((*it_s).reconcileFlag() == MyMoneySplit::Frozen)
+ warnLevel = 2;
+ else if((*it_s).reconcileFlag() == MyMoneySplit::Reconciled && warnLevel < 1)
+ warnLevel = 1;
+ }
+ return warnLevel;
+}
+
+SelectedTransactions::SelectedTransactions(const Register* r)
+{
+ r->selectedTransactions(*this);
+}
+
+int SelectedTransactions::warnLevel() const
+{
+ int warnLevel = 0;
+ SelectedTransactions::const_iterator it_t;
+ for(it_t = begin(); warnLevel < 3 && it_t != end(); ++it_t) {
+ int thisLevel = (*it_t).warnLevel();
+ if (thisLevel > warnLevel)
+ warnLevel = thisLevel;
+ }
+ return warnLevel;
+}
+
+bool SelectedTransactions::canModify() const
+{
+ return warnLevel() < 2;
+}
+
+bool SelectedTransactions::canDuplicate() const
+{
+ return warnLevel() < 3;
+}
+
+} // namespace
diff --git a/kmymoney2/widgets/selectedtransaction.h b/kmymoney2/widgets/selectedtransaction.h
new file mode 100644
index 0000000..0b82020
--- /dev/null
+++ b/kmymoney2/widgets/selectedtransaction.h
@@ -0,0 +1,87 @@
+/***************************************************************************
+ selectedtransaction.h - description
+ -------------------
+ begin : Tue Jun 13 2006
+ copyright : (C) 2000-2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef SELECTEDTRANSACTION_H
+#define SELECTEDTRANSACTION_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneytransaction.h>
+#include <kmymoney/mymoneyscheduled.h>
+#include <kmymoney/mymoneysplit.h>
+
+namespace KMyMoneyRegister {
+
+class SelectedTransaction
+{
+public:
+ SelectedTransaction() {}
+ SelectedTransaction(const MyMoneyTransaction& t, const MyMoneySplit& s, const QString& scheduleId = QString()) :
+ m_transaction(t), m_split(s), m_scheduleId(scheduleId) {}
+
+ MyMoneyTransaction& transaction(void) { return m_transaction; }
+ const MyMoneyTransaction& transaction(void) const { return m_transaction; }
+ MyMoneySplit& split(void) { return m_split; }
+ const MyMoneySplit& split(void) const { return m_split; }
+
+ bool isScheduled(void) const { return !m_scheduleId.isEmpty(); }
+ const QString& scheduleId(void) const { return m_scheduleId; }
+
+ /**
+ * checks the transaction for specific reasons which would
+ * speak against editing/modifying it.
+ * @retval 0 no sweat, user can modify
+ * @retval 1 at least one split has been reconciled already
+ * @retval 2 some transactions cannot be changed anymore - parts of them are frozen
+ * @retval 3 some transactions cannot be changed anymore - they touch closed accounts
+ */
+ int warnLevel() const;
+
+private:
+ MyMoneyTransaction m_transaction;
+ MyMoneySplit m_split;
+ QString m_scheduleId;
+};
+
+class Register;
+
+class SelectedTransactions:public QValueList<SelectedTransaction>
+{
+public:
+ SelectedTransactions() {}
+ SelectedTransactions(const Register* r);
+
+ /**
+ * @return the highest warnLevel of all transactions in the list
+ */
+ int warnLevel() const;
+
+ bool canModify() const;
+ bool canDuplicate() const;
+};
+
+} // namespace
+
+#endif
+
diff --git a/kmymoney2/widgets/sortoptionlistitem.h b/kmymoney2/widgets/sortoptionlistitem.h
new file mode 100644
index 0000000..8f2cdb0
--- /dev/null
+++ b/kmymoney2/widgets/sortoptionlistitem.h
@@ -0,0 +1,390 @@
+/***************************************************************************
+ sortoptionlistitem.h
+ ----------
+ begin : Fri Jun 02 2006
+ copyright : (C) 2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// Note: This file will be included from transactionsortoption.ui.h
+
+static const char * sortAscendingXpm[] = {
+"16 16 145 2",
+" c None",
+". c #3368C9",
+"+ c #4276D5",
+"@ c #5284E0",
+"# c #6C95E0",
+"$ c #6A93DF",
+"% c #5585DF",
+"& c #3F72D2",
+"* c #356ACD",
+"= c #487AD7",
+"- c #4F84E6",
+"; c #B4C9EF",
+"> c #BFD1F2",
+", c #D5E1F5",
+"' c #C9D7F2",
+") c #A3BCEA",
+"! c #6A97EB",
+"~ c #3573E7",
+"{ c #376FD5",
+"] c #4378DA",
+"^ c #6B94E1",
+"/ c #D7E2F6",
+"( c #E3EAF8",
+"_ c #CDDAF4",
+": c #BED0EF",
+"< c #94B5F0",
+"[ c #4485FB",
+"} c #3A7EFB",
+"| c #3777ED",
+"1 c #386FD4",
+"2 c #4E83E7",
+"3 c #D5E0F6",
+"4 c #CADAF7",
+"5 c #C3D5F6",
+"6 c #AEC7F5",
+"7 c #C1D4F5",
+"8 c #BBCFF4",
+"9 c #9BB8F0",
+"0 c #86B0FD",
+"a c #639AFE",
+"b c #3B7FFB",
+"c c #3574E8",
+"d c #376AC8",
+"e c #4075DA",
+"f c #A9C2F2",
+"g c #E0E8F7",
+"h c #C5D6F6",
+"i c #FBFCFE",
+"j c #F8FAFE",
+"k c #FDFEFE",
+"l c #FEFEFE",
+"m c #F7F9FD",
+"n c #FAFCFE",
+"o c #A5C5FE",
+"p c #4285FE",
+"q c #4281F7",
+"r c #366DD3",
+"s c #467DE3",
+"t c #B6CCF3",
+"u c #DBE5F6",
+"v c #D1DDF5",
+"w c #E7EDF9",
+"x c #DAE5F8",
+"y c #E2EBFB",
+"z c #CDDFFE",
+"A c #508EFD",
+"B c #4C88F5",
+"C c #477CDF",
+"D c #6290E5",
+"E c #CFDCF3",
+"F c #A7C0ED",
+"G c #8FB0ED",
+"H c #EEF3FC",
+"I c #BFD6FD",
+"J c #4F8BF7",
+"K c #6696ED",
+"L c #5584DC",
+"M c #3A67BB",
+"N c #608EE4",
+"O c #C3D3F1",
+"P c #A4BEED",
+"Q c #E5EDFB",
+"R c #EFF5FE",
+"S c #DBE8FE",
+"T c #FDFDFE",
+"U c #C8DAFA",
+"V c #779FE7",
+"W c #5C88D9",
+"X c #3B67BA",
+"Y c #9DBAEC",
+"Z c #A8C1EC",
+"` c #EBF2FE",
+" . c #A6C5FE",
+".. c #B6CFFE",
+"+. c #FCFDFE",
+"@. c #DAE5F9",
+"#. c #83A7E9",
+"$. c #7EA2E4",
+"%. c #5E88D7",
+"&. c #3D73D6",
+"*. c #87A9E8",
+"=. c #9CB7EA",
+"-. c #D1DEF7",
+";. c #A8C7FE",
+">. c #669CFE",
+",. c #8CB4FD",
+"'. c #D6E2F7",
+"). c #89AAE7",
+"!. c #83A4E3",
+"~. c #4675CE",
+"{. c #477DE1",
+"]. c #84A6E5",
+"^. c #B9CDF2",
+"/. c #E4EDFE",
+"(. c #A6C6FE",
+"_. c #699DFD",
+":. c #4F8BF8",
+"<. c #739FEF",
+"[. c #D0DEF6",
+"}. c #BBCEF1",
+"|. c #88A8E5",
+"1. c #658DD8",
+"2. c #4973C2",
+"3. c #3F75DA",
+"4. c #4E82E3",
+"5. c #5F90EA",
+"6. c #669BFB",
+"7. c #5C95FC",
+"8. c #518CF7",
+"9. c #779FE8",
+"0. c #7298DD",
+"a. c #5880CB",
+"b. c #3C74DC",
+"c. c #3875E7",
+"d. c #4482F6",
+"e. c #4D89F5",
+"f. c #83A4E4",
+"g. c #5881CC",
+"h. c #356ED7",
+"i. c #477DE0",
+"j. c #5685DC",
+"k. c #5D88DA",
+"l. c #5E89D8",
+"m. c #4676CF",
+"n. c #4774C7",
+" . . ",
+" + @ # $ % & * ",
+" = - ; > , ' ) ! ~ { ",
+" ] ^ / ( / _ : < [ } | 1 ",
+" 2 3 4 5 6 7 8 9 0 a b c d ",
+" e f g h i j k l m n o p q r ",
+" s t u v w x y l l i z A B C ",
+" D E _ : F G H l l l I J K L M ",
+" N O : P G Q l R S T U K V W X ",
+" s Y Z G Q l ` ...+.@.#.$.%. ",
+" &.*.=.-.l ` ;.>.,.k '.).!.~. ",
+" {.].^./.(._.:.<.[.}.|.1.2. ",
+" 3.4.5.6.7.8.K 9.).|.0.a. ",
+" b.c.d.e.K V $.f.1.g. ",
+" h.i.j.k.l.m.n. ",
+" "};
+
+
+static const char * sortDescendingXpm[] = {
+"16 16 145 2",
+" c None",
+". c #3D73D6",
+"+ c #467DE3",
+"@ c #608EE4",
+"# c #6290E5",
+"$ c #4075DA",
+"% c #3F75DA",
+"& c #477DE1",
+"* c #87A9E8",
+"= c #9DBAEC",
+"- c #C3D3F1",
+"; c #CFDCF3",
+"> c #B6CCF3",
+", c #A9C2F2",
+"' c #4E83E7",
+") c #4378DA",
+"! c #3C74DC",
+"~ c #4E82E3",
+"{ c #84A6E5",
+"] c #9CB7EA",
+"^ c #A8C1EC",
+"/ c #BED0EF",
+"( c #CDDAF4",
+"_ c #DBE5F6",
+": c #E0E8F7",
+"< c #D5E0F6",
+"[ c #6B94E1",
+"} c #487AD7",
+"| c #3875E7",
+"1 c #5F90EA",
+"2 c #B9CDF2",
+"3 c #D1DEF7",
+"4 c #8FB0ED",
+"5 c #A4BEED",
+"6 c #D1DDF5",
+"7 c #C5D6F6",
+"8 c #CADAF7",
+"9 c #D7E2F6",
+"0 c #4F84E6",
+"a c #356ED7",
+"b c #4482F6",
+"c c #669BFB",
+"d c #E4EDFE",
+"e c #FEFEFE",
+"f c #E5EDFB",
+"g c #A7C0ED",
+"h c #E7EDF9",
+"i c #FBFCFE",
+"j c #C3D5F6",
+"k c #E3EAF8",
+"l c #B4C9EF",
+"m c #4276D5",
+"n c #477DE0",
+"o c #4D89F5",
+"p c #5C95FC",
+"q c #A6C6FE",
+"r c #EBF2FE",
+"s c #DAE5F8",
+"t c #F8FAFE",
+"u c #AEC7F5",
+"v c #BFD1F2",
+"w c #5284E0",
+"x c #5685DC",
+"y c #6696ED",
+"z c #518CF7",
+"A c #699DFD",
+"B c #A8C7FE",
+"C c #EEF3FC",
+"D c #E2EBFB",
+"E c #FDFEFE",
+"F c #C1D4F5",
+"G c #D5E1F5",
+"H c #6C95E0",
+"I c #3368C9",
+"J c #5D88DA",
+"K c #779FE7",
+"L c #4F8BF8",
+"M c #669CFE",
+"N c #A6C5FE",
+"O c #EFF5FE",
+"P c #BBCFF4",
+"Q c #C9D7F2",
+"R c #6A93DF",
+"S c #5E89D8",
+"T c #7EA2E4",
+"U c #779FE8",
+"V c #739FEF",
+"W c #8CB4FD",
+"X c #B6CFFE",
+"Y c #DBE8FE",
+"Z c #F7F9FD",
+"` c #9BB8F0",
+" . c #94B5F0",
+".. c #A3BCEA",
+"+. c #5585DF",
+"@. c #4676CF",
+"#. c #83A4E4",
+"$. c #89AAE7",
+"%. c #D0DEF6",
+"&. c #FCFDFE",
+"*. c #FDFDFE",
+"=. c #FAFCFE",
+"-. c #86B0FD",
+";. c #4485FB",
+">. c #6A97EB",
+",. c #3F72D2",
+"'. c #4774C7",
+"). c #658DD8",
+"!. c #88A8E5",
+"~. c #BBCEF1",
+"{. c #D6E2F7",
+"]. c #DAE5F9",
+"^. c #C8DAFA",
+"/. c #BFD6FD",
+"(. c #CDDFFE",
+"_. c #A5C5FE",
+":. c #639AFE",
+"<. c #3A7EFB",
+"[. c #3573E7",
+"}. c #356ACD",
+"|. c #5881CC",
+"1. c #7298DD",
+"2. c #83A7E9",
+"3. c #4F8BF7",
+"4. c #508EFD",
+"5. c #4285FE",
+"6. c #3B7FFB",
+"7. c #3777ED",
+"8. c #376FD5",
+"9. c #5880CB",
+"0. c #83A4E3",
+"a. c #4C88F5",
+"b. c #4281F7",
+"c. c #3574E8",
+"d. c #386FD4",
+"e. c #4973C2",
+"f. c #4675CE",
+"g. c #5E88D7",
+"h. c #5C88D9",
+"i. c #5584DC",
+"j. c #477CDF",
+"k. c #366DD3",
+"l. c #376AC8",
+"m. c #3B67BA",
+"n. c #3A67BB",
+" ",
+" . + @ # + $ ",
+" % & * = - ; > , ' ) ",
+" ! ~ { ] ^ / ( _ : < [ } ",
+" | 1 2 3 4 5 / 6 7 8 9 0 ",
+" a b c d e f 4 g h i j k l m ",
+" n o p q r e f 4 s t u 9 v w ",
+" x y z A B r e C D E F ( G H I ",
+" J K y L M N O e e e P / Q R I ",
+" S T U V W X Y e e Z ` ...+. ",
+" @.#.$.%.E &.*.e i =.-.;.>.,. ",
+" '.).!.~.{.].^./.(._.:.<.[.}. ",
+" |.1.!.$.2.y 3.4.5.6.7.8. ",
+" 9.).0.T K y a.b.c.d. ",
+" e.f.g.h.i.j.k.l. ",
+" m.n. "};
+
+class SortOptionListItem : public KListViewItem
+{
+public:
+ SortOptionListItem(QListView* parent, QListViewItem* after, const QString& txt, int direction);
+ int direction(void) const;
+
+public slots:
+ void toggleDirection(void);
+
+private:
+ void setPixmap(void);
+
+private:
+ int m_direction;
+};
+
+SortOptionListItem::SortOptionListItem(QListView* parent, QListViewItem* after, const QString& txt, int direction) :
+ KListViewItem(parent, after, txt)
+{
+ m_direction = (direction >= 0) ? 1 : -1;
+ setPixmap();
+}
+
+void SortOptionListItem::setPixmap(void)
+{
+ if(m_direction > 0)
+ KListViewItem::setPixmap(0, QPixmap(&sortAscendingXpm[0]));
+ else
+ KListViewItem::setPixmap(0, QPixmap(&sortDescendingXpm[0]));
+}
+
+void SortOptionListItem::toggleDirection(void)
+{
+ m_direction *= (-1);
+ setPixmap();
+}
+
+int SortOptionListItem::direction(void) const
+{
+ return m_direction;
+}
+
diff --git a/kmymoney2/widgets/stdtransactiondownloaded.cpp b/kmymoney2/widgets/stdtransactiondownloaded.cpp
new file mode 100644
index 0000000..1305252
--- /dev/null
+++ b/kmymoney2/widgets/stdtransactiondownloaded.cpp
@@ -0,0 +1,70 @@
+/***************************************************************************
+ stdtransactiondownloaded.cpp
+ -------------------
+ begin : Sun May 11 2008
+ copyright : (C) 2008 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kdebug.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <stdtransactiondownloaded.h>
+#include <kmymoney/kmymoneyglobalsettings.h>
+#include <kmymoney/register.h>
+
+using namespace KMyMoneyRegister;
+using namespace KMyMoneyTransactionForm;
+
+StdTransactionDownloaded::StdTransactionDownloaded(Register *parent, const MyMoneyTransaction& transaction, const MyMoneySplit& split, int uniqueId) :
+ StdTransaction(parent, transaction, split, uniqueId)
+{
+}
+
+bool StdTransactionDownloaded::paintRegisterCellSetup(QPainter* painter, int& row, int& col, QRect& cellRect, QRect& textRect, QColorGroup& cg, QBrush& brush)
+
+{
+ bool rc = Transaction::paintRegisterCellSetup(painter, row, col, cellRect, textRect, cg, brush);
+ // if not selected paint in selected background color
+ if(!isSelected()) {
+ cg.setColor(QColorGroup::Base, KMyMoneyGlobalSettings::importedTransactionColor());
+ brush = QBrush(cg.base());
+ }
+ return rc;
+}
+
+InvestTransactionDownloaded::InvestTransactionDownloaded(Register *parent, const MyMoneyTransaction& transaction, const MyMoneySplit& split, int uniqueId) :
+ InvestTransaction(parent, transaction, split, uniqueId)
+{
+}
+
+bool InvestTransactionDownloaded::paintRegisterCellSetup(QPainter* painter, int& row, int& col, QRect& cellRect, QRect& textRect, QColorGroup& cg, QBrush& brush)
+
+{
+ bool rc = Transaction::paintRegisterCellSetup(painter, row, col, cellRect, textRect, cg, brush);
+ // if not selected paint in selected background color
+ if(!isSelected()) {
+ cg.setColor(QColorGroup::Base, KMyMoneyGlobalSettings::importedTransactionColor());
+ brush = QBrush(cg.base());
+ }
+ return rc;
+}
+
diff --git a/kmymoney2/widgets/stdtransactiondownloaded.h b/kmymoney2/widgets/stdtransactiondownloaded.h
new file mode 100644
index 0000000..705fb04
--- /dev/null
+++ b/kmymoney2/widgets/stdtransactiondownloaded.h
@@ -0,0 +1,130 @@
+/***************************************************************************
+ stdtransactiondownloaded.h
+ -------------------
+ begin : Sun May 11 2008
+ copyright : (C) 2008 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef STDTRANSACTIONDOWNLOADED_H
+#define STDTRANSACTIONDOWNLOADED_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/transaction.h>
+
+namespace KMyMoneyTransactionForm {
+ class TransactionForm;
+}; // namespace
+
+namespace KMyMoneyRegister {
+
+class StdTransactionDownloaded : public StdTransaction
+{
+public:
+ StdTransactionDownloaded(Register* parent, const MyMoneyTransaction& transaction, const MyMoneySplit& split, int uniqueId);
+ virtual ~StdTransactionDownloaded() {}
+
+ virtual const char* className(void) { return "StdTransactionDownloaded"; }
+
+ /**
+ * This method sets the general paramaters required for the painting of a cell
+ * in the register. These are:
+ *
+ * - background color (alternating)
+ * - background color (imported transaction)
+ * - background color (matched transaction)
+ * - background color (selected transaction)
+ * - cellRect (area covering the cell)
+ * - textRect (area covering the text)
+ * - color of the pen to do the painting of text and lines
+ *
+ * @param painter pointer to the QPainter object
+ * @param row vertical index of cell in register
+ * @param col horizontal index of cell in register
+ * @param cellRect ref to QRect object receiving the area information for the cell
+ * @param textRect ref to QRect object receiving the area information for the text
+ * @param cg ref to QColorGroup object receiving the color information to be used
+ * @param brush ref to QBrush object receiveing the brush information to be used
+ */
+ virtual bool paintRegisterCellSetup(QPainter* painter, int& row, int& col, QRect& cellRect, QRect& textRect, QColorGroup& cg, QBrush& brush);
+
+#if 0
+ virtual void paintRegisterCell(QPainter* painter, int row, int col, const QRect& r, bool selected, const QColorGroup& cg);
+
+ bool formCellText(QString& txt, int& align, int row, int col, QPainter* painter = 0);
+ void registerCellText(QString& txt, int& align, int row, int col, QPainter* painter = 0);
+
+ int numColsForm(void) const { return 4; }
+
+ void arrangeWidgetsInForm(QMap<QString, QWidget*>& editWidgets);
+ void arrangeWidgetsInRegister(QMap<QString, QWidget*>& editWidgets);
+ void tabOrderInForm(QWidgetList& tabOrderWidgets) const;
+ void tabOrderInRegister(QWidgetList& tabOrderWidgets) const;
+
+ int numRowsRegister(bool expanded) const;
+#endif
+
+ /**
+ * Provided for internal reasons. No API change. See RegisterItem::numRowsRegister()
+ */
+ int numRowsRegister(void) const { return StdTransaction::numRowsRegister(); }
+};
+
+class InvestTransactionDownloaded : public InvestTransaction
+{
+ public:
+ InvestTransactionDownloaded(Register* parent, const MyMoneyTransaction& transaction, const MyMoneySplit& split, int uniqueId);
+ virtual ~InvestTransactionDownloaded() {}
+
+ virtual const char* className(void) { return "InvestTransactionDownloaded"; }
+
+ /**
+ * This method sets the general paramaters required for the painting of a cell
+ * in the register. These are:
+ *
+ * - background color (alternating)
+ * - background color (imported transaction)
+ * - background color (matched transaction)
+ * - background color (selected transaction)
+ * - cellRect (area covering the cell)
+ * - textRect (area covering the text)
+ * - color of the pen to do the painting of text and lines
+ *
+ * @param painter pointer to the QPainter object
+ * @param row vertical index of cell in register
+ * @param col horizontal index of cell in register
+ * @param cellRect ref to QRect object receiving the area information for the cell
+ * @param textRect ref to QRect object receiving the area information for the text
+ * @param cg ref to QColorGroup object receiving the color information to be used
+ * @param brush ref to QBrush object receiveing the brush information to be used
+ */
+ virtual bool paintRegisterCellSetup(QPainter* painter, int& row, int& col, QRect& cellRect, QRect& textRect, QColorGroup& cg, QBrush& brush);
+ /**
+ * Provided for internal reasons. No API change. See RegisterItem::numRowsRegister()
+ */
+ int numRowsRegister(void) const { return InvestTransaction::numRowsRegister(); }
+};
+
+
+}; // namespace
+
+#endif
+// vim:cin:si:ai:et:ts=2:sw=2:
+
diff --git a/kmymoney2/widgets/stdtransactionmatched.cpp b/kmymoney2/widgets/stdtransactionmatched.cpp
new file mode 100644
index 0000000..9bc191b
--- /dev/null
+++ b/kmymoney2/widgets/stdtransactionmatched.cpp
@@ -0,0 +1,217 @@
+/***************************************************************************
+ stdtransactionmatched.cpp
+ -------------------
+ begin : Sat May 11 2008
+ copyright : (C) 2008 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qregion.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kdebug.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <stdtransactionmatched.h>
+#include <kmymoney/kmymoneyglobalsettings.h>
+#include <kmymoney/register.h>
+
+using namespace KMyMoneyRegister;
+using namespace KMyMoneyTransactionForm;
+
+StdTransactionMatched::StdTransactionMatched(Register *parent, const MyMoneyTransaction& transaction, const MyMoneySplit& split, int uniqueId) :
+ StdTransaction(parent, transaction, split, uniqueId),
+ m_drawCounter(parent->drawCounter()-1)
+{
+ // setup initial size
+ setNumRowsRegister(numRowsRegister(KMyMoneyGlobalSettings::showRegisterDetailed()));
+}
+
+bool StdTransactionMatched::paintRegisterCellSetup(QPainter* painter, int& row, int& col, QRect& cellRect, QRect& textRect, QColorGroup& cg, QBrush& brush)
+{
+ QRect r(cellRect);
+
+ bool rc = Transaction::paintRegisterCellSetup(painter, row, col, cellRect, textRect, cg, brush);
+
+ // if not selected paint in matched background color
+ if(!isSelected()) {
+ cg.setColor(QColorGroup::Base, KMyMoneyGlobalSettings::matchedTransactionColor());
+ brush = QBrush(cg.base());
+ }
+
+ // the first line needs to be painted across all columns
+ if(row + m_additionalRows - m_rowsRegister == 0) {
+ // avoid painting the text over multiple columns twice for the same update round
+ unsigned int drawCounter = m_parent->drawCounter();
+ if(m_drawCounter == drawCounter) {
+ return false;
+ }
+
+
+ // the fixed text always uses all cols
+ col = m_parent->columnAt(1);
+ painter->translate(-r.x() + m_parent->columnPos(col), 0);
+#if 0
+ r.setX(m_parent->columnPos(col));
+ r.setWidth(m_parent->visibleWidth());
+ painter->translate(r.x(), r.y());
+#endif
+ cellRect.setX(0);
+ cellRect.setY(0);
+ cellRect.setWidth(m_parent->visibleWidth());
+ cellRect.setHeight(m_parent->rowHeight(row + m_startRow));
+
+ textRect = cellRect;
+ textRect.setX(2);
+ textRect.setWidth(textRect.width()-4);
+ }
+ return rc;
+}
+
+void StdTransactionMatched::registerCellText(QString& txt, int& align, int row, int col, QPainter* painter)
+{
+ // run through the standard
+ StdTransaction::registerCellText(txt, align, row, col, painter);
+
+ // we only cover the additional rows
+ if(row >= m_rowsRegister - m_additionalRows) {
+ // make row relative to the last three rows
+ row += m_additionalRows - m_rowsRegister;
+
+ // remove anything that had been added by the standard method
+ txt = "";
+
+ // and we draw this information in italics
+ if(painter) {
+ QFont font = painter->font();
+ font.setItalic(true);
+ painter->setFont(font);
+ }
+
+ MyMoneyTransaction matchedTransaction = m_split.matchedTransaction();
+ MyMoneySplit matchedSplit;
+ try {
+ matchedSplit = matchedTransaction.splitById(m_split.value("kmm-match-split"));
+ } catch(MyMoneyException *e) {
+ delete e;
+ }
+
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ const QValueList<MyMoneySplit>& list = matchedTransaction.splits();
+ MyMoneyMoney importedValue;
+ for(it_s = list.begin(); it_s != list.end(); ++it_s) {
+ if((*it_s).accountId() == m_account.id()) {
+ importedValue += (*it_s).shares();
+ }
+ }
+
+ QDate postDate;
+ QString memo;
+ switch(row) {
+ case 0:
+ if(painter)
+ txt = QString(" ")+i18n("KMyMoney has matched a downloaded transaction with a manually entered one (result above)");
+ // return true for the first visible column only
+ break;
+
+ case 1:
+ switch(col) {
+ case DateColumn:
+ align |= Qt::AlignLeft;
+ txt = i18n("Bank entry:");
+ break;
+
+ case DetailColumn:
+ align |= Qt::AlignLeft;
+ txt = QString("%1 %2").arg(matchedTransaction.postDate().toString(Qt::ISODate)).arg(matchedTransaction.memo());
+ break;
+
+ case PaymentColumn:
+ align |= Qt::AlignRight;
+ if(importedValue.isNegative()) {
+ txt = (-importedValue).formatMoney(m_account.fraction());
+ }
+ break;
+
+ case DepositColumn:
+ align |= Qt::AlignRight;
+ if(!importedValue.isNegative()) {
+ txt = importedValue.formatMoney(m_account.fraction());
+ }
+ break;
+ }
+ break;
+
+ case 2:
+ switch(col) {
+ case DateColumn:
+ align |= Qt::AlignLeft;
+ txt = i18n("Your entry:");
+ break;
+
+ case DetailColumn:
+ align |= Qt::AlignLeft;
+ postDate = m_transaction.postDate();
+ if(!m_split.value("kmm-orig-postdate").isEmpty()) {
+ postDate = QDate::fromString(m_split.value("kmm-orig-postdate"), Qt::ISODate);
+ }
+ memo = m_split.memo();
+ if(!matchedSplit.memo().isEmpty() && memo != matchedSplit.memo()) {
+ int pos = memo.findRev(matchedSplit.memo());
+ if(pos != -1) {
+ memo = memo.left(pos);
+ if(memo.endsWith("\n"))
+ memo = memo.left(pos-1);
+ }
+ }
+ txt = QString("%1 %2").arg(postDate.toString(Qt::ISODate)).arg(memo);
+ break;
+
+ case PaymentColumn:
+ align |= Qt::AlignRight;
+ if(m_split.value().isNegative()) {
+ txt = (-m_split.value(m_transaction.commodity(), m_splitCurrencyId)).formatMoney(m_account.fraction());
+ }
+ break;
+
+ case DepositColumn:
+ align |= Qt::AlignRight;
+ if(!m_split.value().isNegative()) {
+ txt = m_split.value(m_transaction.commodity(), m_splitCurrencyId).formatMoney(m_account.fraction());
+ }
+ break;
+
+ }
+ break;
+ }
+ }
+}
+
+void StdTransactionMatched::paintRegisterGrid(QPainter* painter, int row, int col, const QRect& r, const QColorGroup& _cg) const
+{
+ // the last 3 rows should not show a grid
+ if(row < m_rowsRegister - m_additionalRows) {
+ Transaction::paintRegisterGrid(painter, row, col, r, _cg);
+
+ } else if(row == m_rowsRegister-1) {
+ painter->setPen(KMyMoneyGlobalSettings::listGridColor());
+ painter->drawLine(r.x(), r.height()-1, r.width(), r.height()-1);
+ }
+}
diff --git a/kmymoney2/widgets/stdtransactionmatched.h b/kmymoney2/widgets/stdtransactionmatched.h
new file mode 100644
index 0000000..599e6e0
--- /dev/null
+++ b/kmymoney2/widgets/stdtransactionmatched.h
@@ -0,0 +1,103 @@
+/***************************************************************************
+ stdtransactionmatched.h
+ -------------------
+ begin : Sat May 31 2008
+ copyright : (C) 2008 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef STDTRANSACTIONMATCHED_H
+#define STDTRANSACTIONMATCHED_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+#include <qbrush.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/transaction.h>
+
+namespace KMyMoneyTransactionForm {
+ class TransactionForm;
+}; // namespace
+
+namespace KMyMoneyRegister {
+
+class StdTransactionMatched : public StdTransaction
+{
+ static const int m_additionalRows = 3;
+
+public:
+ StdTransactionMatched(Register* parent, const MyMoneyTransaction& transaction, const MyMoneySplit& split, int uniqueId);
+ virtual ~StdTransactionMatched() {}
+
+ virtual const char* className(void) { return "StdTransactionMatched"; }
+
+ /**
+ * This method sets the general paramaters required for the painting of a cell
+ * in the register. These are:
+ *
+ * - background color (alternating)
+ * - background color (imported transaction)
+ * - background color (matched transaction)
+ * - background color (selected transaction)
+ * - cellRect (area covering the cell)
+ * - textRect (area covering the text)
+ * - color of the pen to do the painting of text and lines
+ *
+ * @param painter pointer to the QPainter object
+ * @param row vertical index of cell in register
+ * @param col horizontal index of cell in register
+ * @param cellRect ref to QRect object receiving the area information for the cell
+ * @param textRect ref to QRect object receiving the area information for the text
+ * @param cg ref to QColorGroup object receiving the color information to be used
+ * @param brush ref to QBrush object receiveing the brush information to be used
+ */
+ virtual bool paintRegisterCellSetup(QPainter* painter, int& row, int& col, QRect& cellRect, QRect& textRect, QColorGroup& cg, QBrush& brush);
+
+ virtual void paintRegisterGrid(QPainter* painter, int row, int col, const QRect& r, const QColorGroup& cg) const;
+
+#if 0
+ virtual void paintRegisterCell(QPainter* painter, int row, int col, const QRect& r, bool selected, const QColorGroup& cg);
+
+ bool formCellText(QString& txt, int& align, int row, int col, QPainter* painter = 0);
+
+ int numColsForm(void) const { return 4; }
+
+ void arrangeWidgetsInForm(QMap<QString, QWidget*>& editWidgets);
+ void arrangeWidgetsInRegister(QMap<QString, QWidget*>& editWidgets);
+ void tabOrderInForm(QWidgetList& tabOrderWidgets) const;
+ void tabOrderInRegister(QWidgetList& tabOrderWidgets) const;
+
+ int numRowsRegister(bool expanded) const;
+#endif
+
+ void registerCellText(QString& txt, int& align, int row, int col, QPainter* painter = 0);
+
+ /**
+ * Provided for internal reasons. No API change. See RegisterItem::numRowsRegister(bool)
+ */
+ int numRowsRegister(bool expanded) const { return StdTransaction::numRowsRegister(expanded) + m_additionalRows; }
+
+private:
+ unsigned int m_drawCounter;
+};
+
+}; // namespace
+
+#endif
+// vim:cin:si:ai:et:ts=2:sw=2:
+
diff --git a/kmymoney2/widgets/transaction.cpp b/kmymoney2/widgets/transaction.cpp
new file mode 100644
index 0000000..4c8a23b
--- /dev/null
+++ b/kmymoney2/widgets/transaction.cpp
@@ -0,0 +1,2189 @@
+/***************************************************************************
+ transaction.cpp - description
+ -------------------
+ begin : Tue Jun 13 2006
+ copyright : (C) 2000-2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstring.h>
+#include <qpainter.h>
+#include <qwidgetlist.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kglobal.h>
+#include <kiconloader.h>
+#include <kdebug.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/transaction.h>
+#include <kmymoney/mymoneytransaction.h>
+#include <kmymoney/mymoneysplit.h>
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/mymoneypayee.h>
+#include <kmymoney/register.h>
+#include <kmymoney/kmymoneycategory.h>
+#include <kmymoney/kmymoneydateinput.h>
+#include <kmymoney/transactionform.h>
+#include <kmymoney/kmymoneylineedit.h>
+#include <kmymoney/kmymoneyedit.h>
+#include <kmymoney/transactioneditor.h>
+#include <kmymoney/investtransactioneditor.h>
+#include <kmymoney/kmymoneyutils.h>
+
+#include "../kmymoneyglobalsettings.h"
+
+using namespace KMyMoneyRegister;
+using namespace KMyMoneyTransactionForm;
+
+static unsigned char attentionSign[] = {
+ 0x89,0x50,0x4E,0x47,0x0D,0x0A,0x1A,0x0A,
+ 0x00,0x00,0x00,0x0D,0x49,0x48,0x44,0x52,
+ 0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x14,
+ 0x08,0x06,0x00,0x00,0x00,0x8D,0x89,0x1D,
+ 0x0D,0x00,0x00,0x00,0x04,0x73,0x42,0x49,
+ 0x54,0x08,0x08,0x08,0x08,0x7C,0x08,0x64,
+ 0x88,0x00,0x00,0x00,0x19,0x74,0x45,0x58,
+ 0x74,0x53,0x6F,0x66,0x74,0x77,0x61,0x72,
+ 0x65,0x00,0x77,0x77,0x77,0x2E,0x69,0x6E,
+ 0x6B,0x73,0x63,0x61,0x70,0x65,0x2E,0x6F,
+ 0x72,0x67,0x9B,0xEE,0x3C,0x1A,0x00,0x00,
+ 0x02,0x05,0x49,0x44,0x41,0x54,0x38,0x8D,
+ 0xAD,0x95,0xBF,0x4B,0x5B,0x51,0x14,0xC7,
+ 0x3F,0x2F,0xBC,0x97,0x97,0x97,0x97,0x77,
+ 0xF3,0xF2,0x1C,0xA4,0x54,0x6B,0x70,0x10,
+ 0x44,0x70,0x2A,0x91,0x2E,0x52,0x02,0x55,
+ 0x8A,0xB5,0xA3,0xAB,0x38,0x08,0x66,0xCC,
+ 0xEE,0xE0,0xE2,0x20,0xB8,0x38,0xB8,0xB8,
+ 0xF8,0x1F,0x38,0x29,0xA5,0x29,0x74,0x90,
+ 0x0E,0x0D,0x0E,0x22,0x1D,0x44,0xA8,0xD0,
+ 0xD4,0xB4,0x58,0x4B,0x09,0xF9,0xF1,0x4A,
+ 0x3B,0xD4,0xD3,0xE1,0x55,0xD3,0x34,0xAF,
+ 0x49,0x6C,0x3D,0xF0,0x85,0x7B,0xCF,0xFD,
+ 0x9E,0xEF,0x3D,0xE7,0xFE,0xD4,0x44,0x84,
+ 0xDB,0xB4,0x48,0x2F,0xA4,0x94,0xAB,0xE5,
+ 0x52,0xAE,0x96,0xEB,0x49,0x51,0x44,0x3A,
+ 0x02,0x18,0x88,0xC7,0xF1,0xE3,0x71,0x7C,
+ 0x60,0xA0,0x1B,0xBF,0x6B,0x86,0x49,0xC5,
+ 0x46,0x3E,0x47,0x34,0x9F,0x23,0x9A,0x54,
+ 0x6C,0xFC,0x57,0x86,0x40,0xC6,0x4B,0xE1,
+ 0x37,0xCA,0x48,0xA3,0x8C,0x78,0x29,0x7C,
+ 0x20,0xD3,0x31,0xA6,0xD3,0xA0,0x52,0x1C,
+ 0x6D,0x6F,0x72,0xD9,0x28,0x23,0xFE,0x07,
+ 0x64,0x7B,0x93,0x4B,0xA5,0x38,0xFA,0x27,
+ 0x41,0x60,0x6E,0x74,0x84,0x7A,0xE5,0x1D,
+ 0x92,0x54,0x88,0xE7,0x22,0xD5,0x12,0x32,
+ 0x3A,0x42,0x1D,0x98,0xBB,0x91,0x20,0x60,
+ 0xDA,0x36,0x17,0xFB,0x7B,0xC8,0xC1,0x4B,
+ 0x04,0x02,0xBC,0x7E,0x81,0xEC,0xEF,0x21,
+ 0xB6,0xCD,0x05,0x60,0xF6,0x2C,0x68,0x9A,
+ 0x2C,0xCF,0x4C,0xE1,0x4B,0x05,0x39,0x3F,
+ 0x69,0x0A,0xBE,0x7F,0x83,0x48,0x05,0x99,
+ 0x99,0xC2,0x37,0x4D,0x96,0x7B,0x12,0x04,
+ 0xFA,0x2D,0x8B,0xC6,0xE9,0x61,0x10,0x2C,
+ 0x15,0xC4,0x8A,0x21,0x86,0x8E,0xFC,0xF8,
+ 0x12,0xF4,0x4F,0x0F,0x11,0xCB,0xA2,0x01,
+ 0xF4,0x77,0x3D,0x36,0x4E,0x82,0xF5,0xA5,
+ 0x05,0x8C,0xE1,0x74,0xD3,0x37,0x34,0x18,
+ 0x20,0xF2,0x8B,0x3D,0x9C,0x86,0xA5,0x05,
+ 0x0C,0x27,0xC1,0x7A,0xC7,0x63,0x03,0x8C,
+ 0x2B,0x07,0xBF,0x5A,0x6A,0x66,0x27,0x15,
+ 0x64,0x3A,0x8B,0x3C,0x7A,0xD8,0xEA,0xAB,
+ 0x96,0x10,0xE5,0xE0,0x03,0xE3,0x7F,0xCD,
+ 0x50,0x39,0x6C,0xAD,0xAD,0x10,0x53,0xAA,
+ 0x75,0xD2,0xF4,0xBD,0x00,0x2D,0x5C,0x05,
+ 0x6B,0x2B,0xC4,0x94,0xC3,0xD6,0xEF,0xFE,
+ 0x6B,0x41,0x4D,0xD3,0x66,0xFB,0x3C,0xC6,
+ 0x16,0xE7,0xDB,0x97,0x61,0xE2,0x3E,0x3C,
+ 0xC8,0xB4,0x15,0xC7,0xE2,0x3C,0x91,0x3E,
+ 0x8F,0x31,0x4D,0xD3,0x66,0x5B,0x4A,0x06,
+ 0x8C,0x84,0xCD,0x59,0x61,0xA7,0xB5,0xAC,
+ 0x2B,0x9C,0x1C,0x04,0x08,0x1B,0x2B,0xEC,
+ 0x20,0x09,0x9B,0x33,0xC0,0xB8,0xDE,0x65,
+ 0x43,0x27,0x9F,0x9D,0xA4,0x1E,0x16,0xF0,
+ 0xF9,0x6D,0xB0,0xC3,0x86,0x1E,0xB4,0xC3,
+ 0x38,0xD9,0x49,0xEA,0x86,0x4E,0xFE,0xEA,
+ 0x29,0xF4,0x2C,0x8B,0xDA,0x71,0x31,0x9C,
+ 0xFC,0xF5,0x23,0x32,0x34,0x88,0xDC,0xBD,
+ 0x13,0x5C,0xBF,0x30,0xCE,0x71,0x11,0xB1,
+ 0x2C,0x6A,0x80,0xA7,0xDB,0x36,0xAB,0x4F,
+ 0xA6,0x89,0xBA,0x49,0x38,0xFF,0xD4,0xBE,
+ 0x4E,0x00,0xAF,0x9E,0x81,0x08,0xD4,0xEA,
+ 0x01,0xFE,0x34,0x37,0x09,0x4F,0x1F,0x13,
+ 0xDD,0x7D,0xCE,0xAA,0x96,0x72,0x29,0x7C,
+ 0xFB,0xCE,0x44,0xB8,0xD4,0xCD,0x2C,0x66,
+ 0x52,0xD4,0x6E,0xFB,0x0B,0xF8,0x09,0x63,
+ 0x63,0x31,0xE4,0x85,0x76,0x2E,0x0E,0x00,
+ 0x00,0x00,0x00,0x49,0x45,0x4E,0x44,0xAE,
+ 0x42,0x60,0x82
+};
+
+Transaction::Transaction(Register *parent, const MyMoneyTransaction& transaction, const MyMoneySplit& split, int uniqueId) :
+ RegisterItem(parent),
+ m_transaction(transaction),
+ m_split(split),
+ m_form(0),
+ m_uniqueId(m_transaction.id()),
+ m_formRowHeight(-1),
+ m_selected(false),
+ m_focus(false),
+ m_erronous(false),
+ m_inEdit(false),
+ m_inRegisterEdit(false),
+ m_showBalance(true),
+ m_reducedIntensity(false)
+{
+ MyMoneyFile* file = MyMoneyFile::instance();
+
+ // load the account
+ if(!m_split.accountId().isEmpty())
+ m_account = file->account(m_split.accountId());
+
+ // load the payee
+ if(!m_split.payeeId().isEmpty()) {
+ m_payee = file->payee(m_split.payeeId()).name();
+ }
+ if(parent->account().isIncomeExpense()) {
+ m_payeeHeader = m_split.shares().isNegative() ? i18n("From") : i18n("Pay to");
+ } else {
+ m_payeeHeader = m_split.shares().isNegative() ? i18n("Pay to") : i18n("From");
+ }
+
+ // load the currency
+ if(!m_transaction.id().isEmpty())
+ m_splitCurrencyId = m_account.currencyId();
+
+ // check if transaction is errnous or not
+ m_erronous = !m_transaction.splitSum().isZero();
+
+ if(!m_uniqueId.isEmpty()) {
+ m_uniqueId += "-";
+ QString id;
+ id.setNum(uniqueId);
+ m_uniqueId += id.rightJustify(3, '0');
+ }
+}
+
+void Transaction::setFocus(bool focus, bool updateLens)
+{
+ if(focus != m_focus) {
+ m_focus = focus;
+ }
+ if(updateLens) {
+ if(KMyMoneyGlobalSettings::ledgerLens()
+ || !KMyMoneyGlobalSettings::transactionForm()
+ || KMyMoneyGlobalSettings::showRegisterDetailed()
+ || m_parent->m_ledgerLensForced) {
+ if(focus)
+ setNumRowsRegister(numRowsRegister(true));
+ else
+ setNumRowsRegister(numRowsRegister(KMyMoneyGlobalSettings::showRegisterDetailed()));
+ }
+ }
+}
+
+void Transaction::markAttachment(QPainter* painter, int /* row */, int /* col */, const QRect& r)
+{
+ static QPixmap clip;
+
+ const int m = 2; // margin
+ int h = m_parent->rowHeightHint() - (2*m);
+ int lx = r.topRight().x() - h;
+ if(isErronous())
+ lx -= h;
+ QRect cr(QPoint(lx - m, m), QSize(h, h));
+
+ painter->save();
+ if(clip.isNull()) {
+ clip = KGlobal::iconLoader()->loadIcon("attach", KIcon::Small, KIcon::SizeSmall, KIcon::DefaultState);
+ if(clip.height() > h) {
+ clip.resize(h, h);
+ }
+ }
+
+ painter->drawPixmap(QPoint(lx - m, m + (h - clip.height())/2 ), clip);
+ painter->restore();
+}
+
+void Transaction::markAsErronous(QPainter* painter, int /* row */, int /* col */, const QRect& r)
+{
+ const int m = 2; // margin
+ int h = m_parent->rowHeightHint() - (2*m);
+ QRect cr(QPoint(r.topRight().x() - h - m, m), QSize(h, h));
+
+ painter->save();
+ QPixmap attention;
+ attention.loadFromData(attentionSign, sizeof(attentionSign), 0, 0);
+
+ if(attention.height() > h) {
+ attention.resize(h, h);
+ }
+ painter->drawPixmap(QPoint(r.topRight().x() - h - m, m + (h - attention.height())/2 ), attention);
+ painter->restore();
+
+}
+
+bool Transaction::paintRegisterCellSetup(QPainter* painter, int& row, int& col, QRect& cellRect, QRect& textRect, QColorGroup& cg, QBrush& brush)
+{
+ if(m_reducedIntensity)
+ cg = m_parent->palette().disabled();
+
+ if(m_alternate)
+ cg.setColor(QColorGroup::Base, KMyMoneyGlobalSettings::listColor());
+ else
+ cg.setColor(QColorGroup::Base, KMyMoneyGlobalSettings::listBGColor());
+
+ cellRect.setX(0);
+ cellRect.setY(0);
+ cellRect.setWidth(m_parent->columnWidth(col));
+ cellRect.setHeight(m_parent->rowHeight(m_startRow + row));
+
+ textRect = cellRect;
+ textRect.setX(2);
+ textRect.setWidth(textRect.width()-4);
+
+ if(m_selected) {
+ brush = QBrush(cg.highlight());
+ painter->setPen(cg.highlightedText());
+ } else {
+ brush = QBrush(cg.base());
+ painter->setPen(cg.text());
+ }
+
+ // do we need to switch to the error color?
+ if(m_erronous && m_parent->markErronousTransactions()) {
+ painter->setPen(KMyMoneyGlobalSettings::listErronousTransactionColor());
+ }
+
+ // do we need to switch to the negative balance color?
+ if(col == BalanceColumn) {
+ bool showNegative = m_balance.isNegative();
+ if(m_account.accountGroup() == MyMoneyAccount::Liability && !m_balance.isZero() )
+ showNegative = !showNegative;
+ if(showNegative)
+ painter->setPen(KMyMoneyGlobalSettings::listNegativeValueColor());
+ }
+ return true;
+}
+
+void Transaction::paintRegisterCellFocus(QPainter* painter, int row, int col, const QRect& r, const QColorGroup& cg)
+{
+
+ if(m_focus) {
+ QPen oldPen = painter->pen();
+ QPen newPen = oldPen;
+ newPen.setWidth(0);
+
+ painter->setFont(KMyMoneyGlobalSettings::listCellFont());
+ painter->setPen(newPen);
+ painter->setPen(cg.foreground());
+ painter->setPen(Qt::DotLine);
+ // for the first Row, we need to paint the top
+ QPoint start, end;
+#if 0
+ if(row == 0) {
+ start = QPoint(r.x(), r.y() + 1);
+ end = QPoint(r.x() + r.width(), r.y() + 1);
+ if(col == 0) {
+ start.rx()++;
+ } else if(col == m_parent->lastCol()) {
+ end.rx()--;
+ }
+ // painter->drawLine(start, end);
+ painter->drawWinFocusRect(QRect(start, end));
+ }
+ // for the last Row, we need to paint the bottom
+ if(row == numRows() - 1) {
+ start = QPoint(r.x(), r.y() + r.height() - 1);
+ end = QPoint(r.x() + r.width(), r.y() + r.height() - 1);
+ if(col == 0) {
+ start.rx()++;
+ } else if(col == m_parent->lastCol()) {
+ end.rx()--;
+ }
+ // painter->drawLine(start, end);
+ painter->drawWinFocusRect(QRect(start, end));
+ }
+ // for the first col, we need to paint the left
+ if(col == 0) {
+ start = QPoint(r.x() + 1, r.y());
+ end = QPoint(r.x() + 1, r.y() + r.height());
+ if(row == 0) {
+ start.ry()++;
+ } else if(row == numRows()-1) {
+ end.ry()--;
+ }
+ //painter->drawLine(start, end);
+ painter->drawWinFocusRect(QRect(start, end));
+ }
+ // for the last col, we need to paint the left
+ if(col == m_parent->lastCol()) {
+ start = QPoint(r.x() + r.width() - 1, r.y());
+ end = QPoint(r.x() + r.width() - 1, r.y() + r.height());
+ if(row == 0) {
+ start.ry()++;
+ } else if(row == numRows()-1) {
+ end.ry()--;
+ }
+ //painter->drawLine(start, end);
+ painter->drawWinFocusRect(QRect(start, end));
+ }
+#endif
+ if(row == 0) {
+ start = QPoint(r.x(), r.y());
+ end = QPoint(r.x() + r.width(), r.y() + 1);
+ if(col == 0) {
+ start.rx()++;
+ } else if(col == m_parent->lastCol()) {
+ end.rx()--;
+ }
+ // painter->drawLine(start, end);
+ painter->drawWinFocusRect(QRect(start, end));
+ }
+ // for the last Row, we need to paint the bottom
+ if(row == numRowsRegister() - 1) {
+ start = QPoint(r.x(), r.y() + r.height() - 2);
+ end = QPoint(r.x() + r.width(), r.y() + r.height() - 2);
+ if(col == 0) {
+ start.rx()++;
+ } else if(col == m_parent->lastCol()) {
+ end.rx()--;
+ }
+ // painter->drawLine(start, end);
+ painter->drawWinFocusRect(QRect(start, end));
+ }
+ // for the first col, we need to paint the left
+ if(col == 0) {
+ start = QPoint(r.x() + 1, r.y());
+ end = QPoint(r.x() + 1, r.y() + r.height());
+ if(row == 0) {
+ start.ry()++;
+ } else if(row == numRowsRegister()-1) {
+ end.ry()--;
+ }
+ //painter->drawLine(start, end);
+ painter->drawWinFocusRect(QRect(start, end));
+ }
+ // for the last col, we need to paint the left
+ if(col == m_parent->lastCol()) {
+ start = QPoint(r.x() + r.width() - 1, r.y());
+ end = QPoint(r.x() + r.width() - 1, r.y() + r.height());
+ if(row == 0) {
+ start.ry()++;
+ } else if(row == numRowsRegister()-1) {
+ end.ry()--;
+ }
+ //painter->drawLine(start, end);
+ painter->drawWinFocusRect(QRect(start, end));
+ }
+ painter->setPen(oldPen);
+ }
+}
+
+void Transaction::registerCellText(QString& txt, int row, int col)
+{
+ int align = 0;
+ registerCellText(txt, align, row, col, 0);
+}
+
+void Transaction::paintRegisterCell(QPainter* painter, int row, int col, const QRect& r, bool /* selected */, const QColorGroup& _cg)
+{
+ QColorGroup cg(_cg);
+ QRect cellRect(r);
+ QRect textRect;
+ QBrush backgroundBrush;
+
+ painter->save();
+
+ if(paintRegisterCellSetup(painter, row, col, cellRect, textRect, cg, backgroundBrush)) {
+ // construct the text for the cell
+ int align = Qt::AlignVCenter;
+ QString txt;
+ if(m_transaction != MyMoneyTransaction() && !m_inRegisterEdit) {
+ registerCellText(txt, align, row, col, painter);
+ }
+
+ paintRegisterCellBackground(painter, row, col, cellRect, backgroundBrush);
+
+ // and paint it
+ paintRegisterCellText(painter, row, col, textRect, cg, align, txt);
+
+ // paint the grid
+ paintRegisterGrid(painter, row, col, cellRect, cg);
+
+ // possible icons
+ paintRegisterIcons(painter, row, col, cellRect, cg);
+
+ // and the focus
+ paintRegisterCellFocus(painter, row, col, cellRect, cg);
+ }
+
+ painter->restore();
+}
+
+void Transaction::paintRegisterIcons(QPainter* painter, int row, int col, const QRect& /*r*/, const QColorGroup& /*cg*/)
+{
+ if(row == 0 && col == DetailColumn && painter) {
+ if(m_erronous || !m_transaction.value("kmm-attachment").isEmpty()) {
+ QRect cellRect;
+ cellRect.setX(0);
+ cellRect.setY(0);
+ cellRect.setWidth(m_parent->columnWidth(col));
+ cellRect.setHeight(m_parent->rowHeight(m_startRow + row));
+ if(m_erronous) {
+ markAsErronous(painter, row, col, cellRect);
+ }
+ if(!m_transaction.value("kmm-attachment").isEmpty()) {
+ markAttachment(painter, row, col, cellRect);
+ }
+ }
+ }
+}
+void Transaction::paintRegisterCellBackground(QPainter* painter, int row, int col, const QRect& r, const QBrush& backgroundBrush)
+{
+ Q_UNUSED(row);
+ Q_UNUSED(col);
+
+ // fill the background
+ painter->fillRect(r, backgroundBrush);
+}
+
+void Transaction::paintRegisterGrid(QPainter* painter, int row, int col, const QRect& r, const QColorGroup& _cg) const
+{
+ Q_UNUSED(_cg);
+
+ // if a grid is selected, we paint it right away
+ if (KMyMoneyGlobalSettings::showGrid()) {
+ painter->setPen(KMyMoneyGlobalSettings::listGridColor());
+ if(col != 0)
+ painter->drawLine(r.x(), 0, r.x(), r.height()-1);
+ if(row == numRowsRegister()-1)
+ painter->drawLine(r.x(), r.height()-1, r.width(), r.height()-1);
+ }
+}
+
+void Transaction::paintRegisterCellText(QPainter* painter, int row, int col, const QRect& r, const QColorGroup& _cg, int align, const QString& txt)
+{
+ Q_UNUSED(row);
+ Q_UNUSED(col);
+ Q_UNUSED(r);
+ Q_UNUSED(_cg);
+
+ // make sure, we clear the cell
+ if(txt.isEmpty())
+ painter->drawText(r, align, " ");
+ else
+ painter->drawText(r, align, txt);
+}
+
+int Transaction::formRowHeight(int /*row*/)
+{
+ if(m_formRowHeight < 0) {
+ m_formRowHeight = formRowHeight();
+ }
+ return m_formRowHeight;
+}
+
+int Transaction::formRowHeight(void) const
+{
+ if(m_formRowHeight < 0) {
+ // determine the height of the objects in the table
+ kMyMoneyDateInput dateInput;
+ KMyMoneyCategory category(0,0,true);
+
+ return QMAX(dateInput.sizeHint().height(), category.sizeHint().height());
+ }
+ return m_formRowHeight;
+}
+
+void Transaction::setupForm(TransactionForm* form)
+{
+ m_form = form;
+ form->verticalHeader()->setUpdatesEnabled(false);
+ form->horizontalHeader()->setUpdatesEnabled(false);
+
+ form->setNumRows(numRowsForm());
+ form->setNumCols(numColsForm());
+
+ // Force all cells to have some text (so that paintCell is called for each cell)
+ for(int r = 0; r < numRowsForm(); ++r) {
+ for(int c = 0; c < numColsForm(); ++c) {
+ form->setText(r, c, "x");
+ if(r == 0 && form->columnWidth(c) == 0) {
+ form->setColumnWidth(c, 10);
+ }
+ }
+ }
+ form->horizontalHeader()->setUpdatesEnabled(true);
+ form->verticalHeader()->setUpdatesEnabled(true);
+
+ loadTab(form);
+}
+
+void Transaction::paintFormCell(QPainter* painter, int row, int col, const QRect& /*r*/, bool /*selected*/, const QColorGroup& _cg)
+{
+ if(!m_form)
+ return;
+
+ QRect cellRect = m_form->cellRect(row, col);
+
+ QRect textRect(cellRect);
+ textRect.setX(1);
+ textRect.setY(1);
+ textRect.setWidth(textRect.width()-2);
+ textRect.setHeight(textRect.height()-2);
+
+ painter->fillRect(cellRect, _cg.background());
+ painter->setPen(_cg.text());
+
+ QString txt;
+ int align = Qt::AlignVCenter;
+ bool editField = formCellText(txt, align, row, col, painter);
+
+ // if we have an editable field and don't currently edit the transaction
+ // show the background in a different color
+ if(editField && !m_inEdit) {
+ painter->fillRect(textRect, _cg.base());
+ }
+
+ // make sure, we clear the cell
+ // in case of an editable field and edit mode, we just clear the field
+ if(txt.isEmpty() || (editField && m_inEdit))
+ painter->drawText(textRect, align, " ");
+ else
+ painter->drawText(textRect, align, txt);
+
+}
+
+void Transaction::setupPalette(const QPalette& palette, QMap<QString, QWidget*>& editWidgets)
+{
+ QMap<QString, QWidget*>::iterator it_w;
+ for(it_w = editWidgets.begin(); it_w != editWidgets.end(); ++it_w) {
+ if(*it_w) {
+ (*it_w)->setPalette(palette);
+ }
+ }
+}
+
+void Transaction::setupFormPalette(QMap<QString, QWidget*>& editWidgets)
+{
+ setupPalette(m_parent->palette(), editWidgets);
+}
+
+void Transaction::setupRegisterPalette(QMap<QString, QWidget*>& editWidgets)
+{
+ // make sure, we're using the right palette
+ QPalette palette = m_parent->palette();
+
+ // use the highlight color as background
+ palette.setColor(QPalette::Active, QColorGroup::Background, palette.color(QPalette::Active, QColorGroup::Highlight));
+
+ setupPalette(palette, editWidgets);
+}
+
+QWidget* Transaction::focusWidget(QWidget* w) const
+{
+ if(w) {
+ while(w->focusProxy())
+ w = w->focusProxy();
+ }
+ return w;
+}
+
+void Transaction::arrangeWidget(QTable* tbl, int row, int col, QWidget* w) const
+{
+ if(w) {
+ tbl->setCellWidget(row, col, w);
+ // remove the widget from the QTable's eventFilter so that all
+ // events will be directed to the edit widget
+ w->removeEventFilter(tbl);
+ } else
+ qDebug("No widget for %d,%d", row, col);
+}
+
+bool Transaction::haveNumberField(void) const
+{
+ bool rc = true;
+ switch(m_account.accountType()) {
+ case MyMoneyAccount::Savings:
+ case MyMoneyAccount::Cash:
+ case MyMoneyAccount::Loan:
+ case MyMoneyAccount::AssetLoan:
+ case MyMoneyAccount::Asset:
+ case MyMoneyAccount::Liability:
+ case MyMoneyAccount::Equity:
+ rc = KMyMoneyGlobalSettings::alwaysShowNrField();
+ break;
+
+ case MyMoneyAccount::Checkings:
+ case MyMoneyAccount::CreditCard:
+ // the next case is used for the editor when the account
+ // is unknown (eg. when creating new schedules)
+ case MyMoneyAccount::UnknownAccountType:
+ break;
+
+ default:
+ rc = false;
+ break;
+ }
+ return rc;
+}
+
+bool Transaction::maybeTip(const QPoint& cpos, int row, int col, QRect& r, QString& msg)
+{
+ if(col != DetailColumn)
+ return false;
+
+ if(!m_erronous && m_transaction.splitCount() < 3)
+ return false;
+
+ int h = m_parent->rowHeightHint();
+
+ // check for detail column in row 0 of the transaction for a possible exclamation mark
+ r = m_parent->cellGeometry(m_startRow + 0, col);
+ // qDebug("r is %d,%d,%d,%d", r.x(), r.y(), r.width(), r.height());
+ r.setBottomLeft(QPoint(r.x() + (r.width() - h), r.y() + h));
+ // qDebug("r is %d,%d,%d,%d", r.x(), r.y(), r.width(), r.height());
+ // qDebug("p is in r = %d", r.contains(cpos));
+ if(r.contains(cpos) && m_erronous) {
+ if(m_transaction.splits().count() < 2) {
+ msg = QString("<qt>%1</qt>").arg(i18n("Transaction is missing a category assignment."));
+ } else {
+ const MyMoneySecurity& sec = MyMoneyFile::instance()->security(m_account.currencyId());
+ msg = QString("<qt>%1</qt>").arg(i18n("The transaction has a missing assignment of <b>%1</b>.").arg(m_transaction.splitSum().abs().formatMoney(m_account, sec)));
+ }
+ return true;
+ }
+
+ // check for detail column in row 1 of the transaction for a possible exclamation mark
+ r = m_parent->cellGeometry(m_startRow + 1, col);
+ if(row == 1 && r.contains(cpos) && m_transaction.splitCount() > 2) {
+ MyMoneyFile* file = MyMoneyFile::instance();
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ QString txt;
+ const MyMoneySecurity& sec = file->security(m_transaction.commodity());
+ MyMoneyMoney factor(1, 1);
+ if(!m_split.value().isNegative())
+ factor = -factor;
+
+ for(it_s = m_transaction.splits().begin(); it_s != m_transaction.splits().end(); ++it_s) {
+ if(*it_s == m_split)
+ continue;
+ const MyMoneyAccount& acc = file->account((*it_s).accountId());
+ QString category = file->accountToCategory(acc.id());
+ QString amount = ((*it_s).value() * factor).formatMoney(acc, sec);
+
+ txt += QString("<tr><td><nobr>%1</nobr></td><td align=right><nobr>%2</nobr></td></tr>").arg(category, amount);
+ }
+ msg = QString("<table>%1</table>").arg(txt);
+ return true;
+ }
+
+ return false;
+}
+
+QString Transaction::reconcileState(bool text) const
+{
+ QString txt = KMyMoneyUtils::reconcileStateToString(m_split.reconcileFlag(), text);
+
+ if((text == true)
+ && (txt == i18n("Unknown"))
+ && (m_transaction == MyMoneyTransaction()))
+ txt = QString();
+ return txt;
+}
+
+void Transaction::startEditMode(void)
+{
+ m_inEdit = true;
+ // only update the number of lines displayed if we edit inside the register
+ if(m_inRegisterEdit)
+ setNumRowsRegister(numRowsRegister(true));
+}
+
+void Transaction::leaveEditMode(void)
+{
+ m_inEdit = false;
+ m_inRegisterEdit = false;
+ setFocus(hasFocus(), true);
+}
+
+void Transaction::singleLineMemo(QString& txt, const MyMoneySplit& split) const
+{
+ txt = split.memo();
+ // remove empty lines
+ txt.replace("\n\n", "\n");
+ // replace '\n' with ", "
+ txt.replace('\n', ", ");
+}
+
+int Transaction::rowHeightHint(void) const
+{
+ return m_inEdit ? formRowHeight()-4 : RegisterItem::rowHeightHint();
+}
+
+
+bool Transaction::matches(const QString& txt) const
+{
+ if(txt.isEmpty() || m_transaction.splitCount() == 0)
+ return true;
+
+ MyMoneyFile* file = MyMoneyFile::instance();
+ QString s(txt);
+ s.replace(MyMoneyMoney::thousandSeparator(), QString());
+
+ const QValueList<MyMoneySplit>&list = m_transaction.splits();
+ QValueList<MyMoneySplit>::const_iterator it_s;
+ for(it_s = list.begin(); it_s != list.end(); ++it_s) {
+ // check if the text is contained in one of the fields
+ // memo, number, payee, account
+ if((*it_s).memo().contains(txt, false)
+ || (*it_s).number().contains(txt, false))
+ return true;
+
+ if(!(*it_s).payeeId().isEmpty()) {
+ const MyMoneyPayee& payee = file->payee((*it_s).payeeId());
+ if(payee.name().contains(txt, false))
+ return true;
+ }
+ const MyMoneyAccount& acc = file->account((*it_s).accountId());
+ if(acc.name().contains(txt, false))
+ return true;
+
+ if(!s.isEmpty()) {
+ // check if any of the value field matches if a value has been entered
+ QString r = (*it_s).value().formatMoney(m_account.fraction(), false);
+ if(r.contains(s, false))
+ return true;
+ const MyMoneyAccount& acc = file->account((*it_s).accountId());
+ r = (*it_s).shares().formatMoney(acc.fraction(), false);
+ if(r.contains(s, false))
+ return true;
+ }
+ }
+
+ return false;
+}
+
+void Transaction::setShowBalance(bool showBalance)
+{
+ m_showBalance = showBalance;
+}
+
+void Transaction::setVisible(bool visible)
+{
+ if(visible != isVisible()) {
+ RegisterItem::setVisible(visible);
+ RegisterItem* p;
+ Transaction* t;
+ if(!visible) {
+ // if we are hidden, we need to inform all previous transactions
+ // about it so that they don't show the balance
+ p = prevItem();
+ while(p) {
+ t = dynamic_cast<Transaction*>(p);
+ if(t) {
+ if(!t->m_showBalance)
+ break;
+ t->m_showBalance = false;
+ }
+ p = p->prevItem();
+ }
+ } else {
+ // if we are shown, we need to check if the next transaction
+ // is visible and change the display of the balance
+ p = this;
+ do {
+ p = p->nextItem();
+ t = dynamic_cast<Transaction*>(p);
+ } while(!t && p);
+
+ // if the next transaction is visible or I am the last one
+ if((t && t->m_showBalance) || !t) {
+ m_showBalance = true;
+ p = prevItem();
+ while(p && p->isVisible()) {
+ t = dynamic_cast<Transaction*>(p);
+ if(t) {
+ if(t->m_showBalance)
+ break;
+ t->m_showBalance = true;
+ }
+ p = p->prevItem();
+ }
+ }
+ }
+ }
+}
+
+void Transaction::setSelected(bool selected)
+{
+ if(!selected || (selected && isVisible()))
+ m_selected = selected;
+}
+
+StdTransaction::StdTransaction(Register *parent, const MyMoneyTransaction& transaction, const MyMoneySplit& split, int uniqueId) :
+ Transaction(parent, transaction, split, uniqueId),
+ m_showAccountRow(false)
+{
+ try {
+ m_categoryHeader = i18n("Category");
+ switch(transaction.splitCount()) {
+ default:
+ m_category = i18n("Split transaction (category replacement)", "Split transaction");
+ break;
+
+ case 0: // the empty transaction
+ case 1:
+ break;
+
+ case 2:
+ setupFormHeader(m_transaction.splitByAccount(m_split.accountId(), false).accountId());
+ break;
+ }
+ } catch(MyMoneyException *e) {
+ kdDebug(2) << "Problem determining the category for transaction '" << m_transaction.id() << "'. Reason: " << e->what() << "\n";
+ delete e;
+ }
+ m_rowsForm = 6;
+
+ if(KMyMoneyUtils::transactionType(m_transaction) == KMyMoneyUtils::InvestmentTransaction) {
+ MyMoneySplit split = KMyMoneyUtils::stockSplit(m_transaction);
+ m_payee = MyMoneyFile::instance()->account(split.accountId()).name();
+ QString addon;
+ if(split.action() == MyMoneySplit::ActionBuyShares) {
+ if(split.value().isNegative()) {
+ addon = i18n("Sell");
+ } else {
+ addon = i18n("Buy");
+ }
+ } else if(split.action() == MyMoneySplit::ActionDividend) {
+ addon = i18n("Dividend");
+ } else if(split.action() == MyMoneySplit::ActionYield) {
+ addon = i18n("Yield");
+ }
+ if(!addon.isEmpty()) {
+ m_payee += QString(" (%1)").arg(addon);
+ }
+ m_payeeHeader = i18n("Activity");
+ m_category = i18n("Investment transaction");
+ }
+
+ // setup initial size
+ setNumRowsRegister(numRowsRegister(KMyMoneyGlobalSettings::showRegisterDetailed()));
+
+ emit parent->itemAdded(this);
+}
+
+void StdTransaction::setupFormHeader(const QString& id)
+{
+ m_category = MyMoneyFile::instance()->accountToCategory(id);
+ switch(MyMoneyFile::instance()->account(id).accountGroup()) {
+ case MyMoneyAccount::Asset:
+ case MyMoneyAccount::Liability:
+ m_categoryHeader = m_split.shares().isNegative() ? i18n("Transfer to") : i18n("Transfer from");
+ break;
+
+ default:
+ m_categoryHeader = i18n("Category");
+ break;
+ }
+}
+
+KMyMoneyRegister::Action StdTransaction::actionType(void) const
+{
+ KMyMoneyRegister::Action action=ActionNone;
+
+ // if at least one split is referencing an income or
+ // expense account, we will not call it a transfer
+ QValueList<MyMoneySplit>::const_iterator it_s;
+
+ for(it_s = m_transaction.splits().begin(); it_s != m_transaction.splits().end(); ++it_s) {
+ if((*it_s).accountId() == m_split.accountId())
+ continue;
+ MyMoneyAccount acc = MyMoneyFile::instance()->account((*it_s).accountId());
+ if(acc.accountGroup() == MyMoneyAccount::Income
+ || acc.accountGroup() == MyMoneyAccount::Expense) {
+ // otherwise, we have to determine between deposit and withdrawal
+ action = m_split.shares().isNegative() ? ActionWithdrawal : ActionDeposit;
+ break;
+ }
+ }
+ // otherwise, it's a transfer
+ if(it_s == m_transaction.splits().end())
+ action = ActionTransfer;
+
+ return action;
+}
+
+void StdTransaction::loadTab(TransactionForm* form)
+{
+ TabBar* bar = form->tabBar();
+ bar->setSignalEmission(TabBar::SignalNever);
+ for(int i = 0; i < bar->count(); ++i) {
+ bar->setTabEnabled(bar->tabAt(i)->identifier(), true);
+ }
+
+ if(m_transaction.splitCount() > 0) {
+ bar->setCurrentTab(actionType());
+ }
+ bar->setSignalEmission(TabBar::SignalAlways);
+}
+
+void StdTransaction::setupForm(TransactionForm* form)
+{
+ Transaction::setupForm(form);
+
+ QTableItem* memo = form->item(3, ValueColumn1);
+ memo->setSpan(3, 1);
+}
+
+bool StdTransaction::showRowInForm(int row) const
+{
+ return row == 0 ? m_showAccountRow : true;
+}
+
+void StdTransaction::setShowRowInForm(int row, bool show)
+{
+ if(row == 0)
+ m_showAccountRow = show;
+}
+
+bool StdTransaction::formCellText(QString& txt, int& align, int row, int col, QPainter* /* painter */)
+{
+ // if(m_transaction != MyMoneyTransaction()) {
+ switch(row) {
+ case 0:
+ switch(col) {
+ case LabelColumn1:
+ align |= Qt::AlignLeft;
+ txt = i18n("Account");
+ break;
+ }
+ break;
+
+ case 1:
+ switch(col) {
+ case LabelColumn1:
+ align |= Qt::AlignLeft;
+ txt = m_payeeHeader;
+ break;
+
+ case ValueColumn1:
+ align |= Qt::AlignLeft;
+ txt = m_payee;
+ break;
+
+ case LabelColumn2:
+ align |= Qt::AlignLeft;
+ if(haveNumberField())
+ txt = i18n("Number");
+ break;
+
+ case ValueColumn2:
+ align |= Qt::AlignRight;
+ if(haveNumberField())
+ txt = m_split.number();
+ break;
+ }
+ break;
+
+ case 2:
+ switch(col) {
+ case LabelColumn1:
+ align |= Qt::AlignLeft;
+ txt = m_categoryHeader;
+ break;
+
+ case ValueColumn1:
+ align |= Qt::AlignLeft;
+ txt = m_category;
+ if(m_transaction != MyMoneyTransaction()) {
+ if(txt.isEmpty() && !m_split.value().isZero())
+ txt = i18n("*** UNASSIGNED ***");
+ }
+ break;
+
+ case LabelColumn2:
+ align |= Qt::AlignLeft;
+ txt = i18n("Date");
+ break;
+
+ case ValueColumn2:
+ align |= Qt::AlignRight;
+ if(m_transaction != MyMoneyTransaction())
+ txt = KGlobal::locale()->formatDate(m_transaction.postDate(), true);
+ break;
+ }
+ break;
+
+ case 3:
+ switch(col) {
+ case LabelColumn1:
+ align |= Qt::AlignLeft;
+ txt = i18n("Memo");
+ break;
+
+ case ValueColumn1:
+ align &= ~Qt::AlignVCenter;
+ align |= Qt::AlignTop;
+ align |= Qt::AlignLeft;
+ if(m_transaction != MyMoneyTransaction())
+ txt = m_split.memo().section('\n', 0, 2);
+ break;
+
+ case LabelColumn2:
+ align |= Qt::AlignLeft;
+ txt = i18n("Amount");
+ break;
+
+ case ValueColumn2:
+ align |= Qt::AlignRight;
+ if(m_transaction != MyMoneyTransaction()) {
+ txt = (m_split.value(m_transaction.commodity(), m_splitCurrencyId).abs()).formatMoney(m_account.fraction());
+ }
+ break;
+ }
+ break;
+
+ case 5:
+ switch(col) {
+ case LabelColumn2:
+ align |= Qt::AlignLeft;
+ txt = i18n("Status");
+ break;
+
+ case ValueColumn2:
+ align |= Qt::AlignRight;
+ txt = reconcileState();
+ break;
+ }
+ }
+ // }
+ if(col == ValueColumn2 && row == 1) {
+ return haveNumberField();
+ }
+ return (col == ValueColumn1 && row < 4) || (col == ValueColumn2 && row > 0 && row != 4);
+}
+
+void StdTransaction::registerCellText(QString& txt, int& align, int row, int col, QPainter* painter)
+{
+ switch(row) {
+ case 0:
+ switch(col) {
+ case NumberColumn:
+ align |= Qt::AlignLeft;
+ if(haveNumberField())
+ txt = m_split.number();
+ break;
+
+ case DateColumn:
+ align |= Qt::AlignLeft;
+ txt = KGlobal::locale()->formatDate(m_transaction.postDate(), true);
+ break;
+
+ case DetailColumn:
+ align |= Qt::AlignLeft;
+ txt = m_payee;
+ if(txt.isEmpty() && m_rowsRegister < 3) {
+ singleLineMemo(txt, m_split);
+ }
+ if(txt.isEmpty() && m_rowsRegister < 2) {
+ if(m_account.accountType() != MyMoneyAccount::Income
+ && m_account.accountType() != MyMoneyAccount::Expense) {
+ txt = m_category;
+ if(txt.isEmpty() && !m_split.value().isZero()) {
+ txt = i18n("*** UNASSIGNED ***");
+ if(painter)
+ painter->setPen(KMyMoneyGlobalSettings::listErronousTransactionColor());
+ }
+ }
+ }
+ break;
+
+ case ReconcileFlagColumn:
+ align |= Qt::AlignHCenter;
+ txt = reconcileState(false);
+ break;
+
+ case PaymentColumn:
+ align |= Qt::AlignRight;
+ if(m_split.value().isNegative()) {
+ txt = (-m_split.value(m_transaction.commodity(), m_splitCurrencyId)).formatMoney(m_account.fraction());
+ }
+ break;
+
+ case DepositColumn:
+ align |= Qt::AlignRight;
+ if(!m_split.value().isNegative()) {
+ txt = m_split.value(m_transaction.commodity(), m_splitCurrencyId).formatMoney(m_account.fraction());
+ }
+ break;
+
+ case BalanceColumn:
+ align |= Qt::AlignRight;
+ if(m_showBalance)
+ txt = m_balance.formatMoney(m_account.fraction());
+ else
+ txt = "----";
+ break;
+
+ case AccountColumn:
+ // txt = m_objects->account(m_transaction.splits()[0].accountId()).name();
+ txt = MyMoneyFile::instance()->account(m_split.accountId()).name();
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 1:
+ switch(col) {
+ case DetailColumn:
+ align |= Qt::AlignLeft;
+ txt = m_category;
+ if(txt.isEmpty() && !m_split.value().isZero()) {
+ txt = i18n("*** UNASSIGNED ***");
+ if(painter)
+ painter->setPen(KMyMoneyGlobalSettings::listErronousTransactionColor());
+ }
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 2:
+ switch(col) {
+ case DetailColumn:
+ align |= Qt::AlignLeft;
+ singleLineMemo(txt, m_split);
+ break;
+
+ default:
+ break;
+ }
+ break;
+ }
+}
+
+int StdTransaction::registerColWidth(int col, const QFontMetrics& cellFontMetrics)
+{
+ QString txt;
+ int firstRow = 0, lastRow = 0;
+
+ int nw = 0;
+ for(int i = firstRow; i <= lastRow; ++i) {
+ int align;
+ registerCellText(txt, align, i, col, 0);
+ int w = cellFontMetrics.width(txt+" ");
+ if(w > nw)
+ nw = w;
+ }
+ return nw;
+}
+
+void StdTransaction::arrangeWidgetsInForm(QMap<QString, QWidget*>& editWidgets)
+{
+ if(!m_form || !m_parent)
+ return;
+
+ setupFormPalette(editWidgets);
+
+ arrangeWidget(m_form, 0, ValueColumn1, editWidgets["account"]);
+ arrangeWidget(m_form, 1, LabelColumn1, editWidgets["cashflow"]);
+ arrangeWidget(m_form, 1, ValueColumn1, editWidgets["payee"]);
+ arrangeWidget(m_form, 2, ValueColumn1, editWidgets["category"]->parentWidget());
+ arrangeWidget(m_form, 3, ValueColumn1, editWidgets["memo"]);
+ if(haveNumberField()) {
+ arrangeWidget(m_form, 1, LabelColumn2, editWidgets["number-label"]);
+ arrangeWidget(m_form, 1, ValueColumn2, editWidgets["number"]);
+ }
+ arrangeWidget(m_form, 2, LabelColumn2, editWidgets["date-label"]);
+ arrangeWidget(m_form, 2, ValueColumn2, editWidgets["postdate"]);
+ arrangeWidget(m_form, 3, ValueColumn2, editWidgets["amount"]);
+ arrangeWidget(m_form, 5, ValueColumn2, editWidgets["status"]);
+ arrangeWidget(m_form, 2, LabelColumn1, editWidgets["category-label"]);
+
+ // get rid of the hints. we don't need them for the form
+ QMap<QString, QWidget*>::iterator it;
+ for(it = editWidgets.begin(); it != editWidgets.end(); ++it) {
+ KMyMoneyCombo* combo = dynamic_cast<KMyMoneyCombo*>(*it);
+ kMyMoneyLineEdit* edit = dynamic_cast<kMyMoneyLineEdit*>(*it);
+ KMyMoneyPayeeCombo* payee = dynamic_cast<KMyMoneyPayeeCombo*>(*it);
+ if(combo)
+ combo->setHint(QString());
+ if(edit)
+ edit->setHint(QString());
+ if(payee)
+ payee->setHint(QString());
+ }
+
+ // drop the tabbar on top of the original
+ KMyMoneyTransactionForm::TransactionForm* form = dynamic_cast<KMyMoneyTransactionForm::TransactionForm*>(m_form);
+ TabBar* w = dynamic_cast<TabBar*>(editWidgets["tabbar"]);
+ if(w) {
+ w->reparent(form->tabBar(), QPoint(0, 0), true);
+ }
+}
+
+void StdTransaction::tabOrderInForm(QWidgetList& tabOrderWidgets) const
+{
+ QStringList taborder = QStringList::split(",", KMyMoneyGlobalSettings::stdTransactionFormTabOrder());
+ QStringList::const_iterator it_s = taborder.constBegin();
+ QWidget* w;
+ while(it_s != taborder.constEnd()) {
+ if(*it_s == "account") {
+ tabOrderWidgets.append(focusWidget(m_form->cellWidget(0, ValueColumn1)));
+ } else if(*it_s == "cashflow") {
+ tabOrderWidgets.append(focusWidget(m_form->cellWidget(1, LabelColumn1)));
+ } else if(*it_s == "payee") {
+ tabOrderWidgets.append(focusWidget(m_form->cellWidget(1, ValueColumn1)));
+ } else if(*it_s == "category") {
+ // make sure to have the category field and the split button as seperate tab order widgets
+ // ok, we have to have some internal knowledge about the KMyMoneyCategory object, but
+ // it's one of our own widgets, so we actually don't care. Just make sure, that we don't
+ // go haywire when someone changes the KMyMoneyCategory object ...
+ w = m_form->cellWidget(2, ValueColumn1);
+ tabOrderWidgets.append(focusWidget(w));
+ w = dynamic_cast<QWidget*>(w->child("splitButton"));
+ if(w)
+ tabOrderWidgets.append(w);
+ } else if(*it_s == "memo") {
+ tabOrderWidgets.append(focusWidget(m_form->cellWidget(3, ValueColumn1)));
+ } else if(*it_s == "number") {
+ if(haveNumberField()) {
+ if((w = focusWidget(m_form->cellWidget(1, ValueColumn2))))
+ tabOrderWidgets.append(w);
+ }
+ } else if(*it_s == "date") {
+ tabOrderWidgets.append(focusWidget(m_form->cellWidget(2, ValueColumn2)));
+ } else if(*it_s == "amount") {
+ tabOrderWidgets.append(focusWidget(m_form->cellWidget(3, ValueColumn2)));
+ } else if(*it_s == "state") {
+ tabOrderWidgets.append(focusWidget(m_form->cellWidget(5, ValueColumn2)));
+ }
+ ++it_s;
+ }
+}
+
+void StdTransaction::arrangeWidgetsInRegister(QMap<QString, QWidget*>& editWidgets)
+{
+ if(!m_parent)
+ return;
+
+ setupRegisterPalette(editWidgets);
+
+ if(haveNumberField())
+ arrangeWidget(m_parent, m_startRow+0, NumberColumn, editWidgets["number"]);
+ arrangeWidget(m_parent, m_startRow + 0, DateColumn, editWidgets["postdate"]);
+ arrangeWidget(m_parent, m_startRow + 1, DateColumn, editWidgets["status"]);
+ arrangeWidget(m_parent, m_startRow + 0, DetailColumn, editWidgets["payee"]);
+ arrangeWidget(m_parent, m_startRow + 1, DetailColumn, editWidgets["category"]->parentWidget());
+ arrangeWidget(m_parent, m_startRow + 2, DetailColumn, editWidgets["memo"]);
+ arrangeWidget(m_parent, m_startRow + 0, PaymentColumn, editWidgets["payment"]);
+ arrangeWidget(m_parent, m_startRow + 0, DepositColumn, editWidgets["deposit"]);
+
+ // increase the height of the row containing the memo widget
+ m_parent->setRowHeight(m_startRow+2, m_parent->rowHeightHint() * 3);
+}
+
+void StdTransaction::tabOrderInRegister(QWidgetList& tabOrderWidgets) const
+{
+ QStringList taborder = QStringList::split(",", KMyMoneyGlobalSettings::stdTransactionRegisterTabOrder());
+ QStringList::const_iterator it_s = taborder.constBegin();
+ QWidget* w;
+ while(it_s != taborder.constEnd()) {
+ if(*it_s == "number") {
+ if(haveNumberField()) {
+ if((w = focusWidget(m_parent->cellWidget(m_startRow + 0, NumberColumn))))
+ tabOrderWidgets.append(w);
+ }
+ } else if(*it_s == "date") {
+ tabOrderWidgets.append(focusWidget(m_parent->cellWidget(m_startRow + 0, DateColumn)));
+ } else if(*it_s == "payee") {
+ tabOrderWidgets.append(focusWidget(m_parent->cellWidget(m_startRow + 0, DetailColumn)));
+ } else if(*it_s == "category") {
+ // make sure to have the category field and the split button as seperate tab order widgets
+ // ok, we have to have some internal knowledge about the KMyMoneyCategory object, but
+ // it's one of our own widgets, so we actually don't care. Just make sure, that we don't
+ // go haywire when someone changes the KMyMoneyCategory object ...
+ w = m_parent->cellWidget(m_startRow + 1, DetailColumn);
+ tabOrderWidgets.append(focusWidget(w));
+ w = dynamic_cast<QWidget*>(w->child("splitButton"));
+ if(w)
+ tabOrderWidgets.append(w);
+ } else if(*it_s == "memo") {
+ tabOrderWidgets.append(focusWidget(m_parent->cellWidget(m_startRow + 2, DetailColumn)));
+ } else if(*it_s == "payment") {
+ tabOrderWidgets.append(focusWidget(m_parent->cellWidget(m_startRow + 0, PaymentColumn)));
+ } else if(*it_s == "deposit") {
+ tabOrderWidgets.append(focusWidget(m_parent->cellWidget(m_startRow + 0, DepositColumn)));
+ } else if(*it_s == "state") {
+ tabOrderWidgets.append(focusWidget(m_parent->cellWidget(m_startRow + 1, DateColumn)));
+ }
+ ++it_s;
+ }
+}
+
+int StdTransaction::numRowsRegister(bool expanded) const
+{
+ int numRows = 1;
+ if(expanded) {
+ numRows = 3;
+ if(!m_inEdit) {
+ if(m_payee.isEmpty()) {
+ numRows--;
+ }
+ if(m_split.memo().isEmpty()) {
+ numRows--;
+ }
+ // For income and expense accounts that only have
+ // two splits we only show one line, because the
+ // account name is already contained in the account column.
+ if(m_account.accountType() == MyMoneyAccount::Income
+ || m_account.accountType() == MyMoneyAccount::Expense) {
+ if(numRows > 2 && m_transaction.splitCount() == 2)
+ numRows = 1;
+ }
+ }
+ }
+ return numRows;
+}
+
+TransactionEditor* StdTransaction::createEditor(TransactionEditorContainer* regForm, const KMyMoneyRegister::SelectedTransactions& list, const QDate& lastPostDate)
+{
+ m_inRegisterEdit = regForm == m_parent;
+ return new StdTransactionEditor(regForm, this, list, lastPostDate);
+}
+
+InvestTransaction::InvestTransaction(Register *parent, const MyMoneyTransaction& transaction, const MyMoneySplit& split, int uniqueId) :
+ Transaction(parent, transaction, split, uniqueId)
+{
+ // dissect the transaction into its type, splits, currency, security etc.
+ InvestTransactionEditor::dissectTransaction(m_transaction, m_split,
+ m_assetAccountSplit,
+ m_feeSplits,
+ m_interestSplits,
+ m_security,
+ m_currency,
+ m_transactionType);
+
+ QValueList<MyMoneySplit>::ConstIterator it_s;
+ for(it_s = m_feeSplits.begin(); it_s != m_feeSplits.end(); ++it_s) {
+ m_feeAmount += (*it_s).value();
+ }
+ for(it_s = m_interestSplits.begin(); it_s != m_interestSplits.end(); ++it_s) {
+ m_interestAmount += (*it_s).value();
+ }
+
+ // check the count of the fee splits and setup the text
+ switch(m_feeSplits.count()) {
+ case 0:
+ break;
+
+ case 1:
+ m_feeCategory = MyMoneyFile::instance()->accountToCategory(m_feeSplits[0].accountId());
+ break;
+
+ default:
+ m_feeCategory = i18n("Split transaction (category replacement)", "Split transaction");
+ break;
+ }
+
+ // check the count of the interest splits and setup the text
+ switch(m_interestSplits.count()) {
+ case 0:
+ break;
+
+ case 1:
+ m_interestCategory = MyMoneyFile::instance()->accountToCategory(m_interestSplits[0].accountId());
+ break;
+
+ default:
+ m_interestCategory = i18n("Split transaction (category replacement)", "Split transaction");
+ break;
+ }
+
+ m_rowsForm = 7;
+
+ // setup initial size
+ setNumRowsRegister(numRowsRegister(KMyMoneyGlobalSettings::showRegisterDetailed()));
+
+ emit parent->itemAdded(this);
+}
+
+void InvestTransaction::setupForm(TransactionForm* form)
+{
+ Transaction::setupForm(form);
+
+ QTableItem* memo = form->item(5, 1);
+ memo->setSpan(2, 1);
+}
+
+void InvestTransaction::activity(QString& txt, MyMoneySplit::investTransactionTypeE type) const
+{
+ switch(type) {
+ case MyMoneySplit::AddShares:
+ txt = i18n("Add shares");
+ break;
+ case MyMoneySplit::RemoveShares:
+ txt = i18n("Remove shares");
+ break;
+ case MyMoneySplit::BuyShares:
+ txt = i18n("Buy shares");
+ break;
+ case MyMoneySplit::SellShares:
+ txt = i18n("Sell shares");
+ break;
+ case MyMoneySplit::Dividend:
+ txt = i18n("Dividend");
+ break;
+ case MyMoneySplit::ReinvestDividend:
+ txt = i18n("Reinvest Dividend");
+ break;
+ case MyMoneySplit::Yield:
+ txt = i18n("Yield");
+ break;
+ case MyMoneySplit::SplitShares:
+ txt = i18n("Split shares");
+ break;
+ default:
+ txt = i18n("Unknown");
+ break;
+ }
+}
+
+bool InvestTransaction::formCellText(QString& txt, int& align, int row, int col, QPainter* /* painter */)
+{
+ bool fieldEditable = false;
+
+ switch(row) {
+ case 0:
+ switch(col) {
+ case LabelColumn1:
+ align |= Qt::AlignLeft;
+ txt = i18n("Activity");
+ break;
+
+ case ValueColumn1:
+ align |= Qt::AlignLeft;
+ fieldEditable = true;
+ activity(txt, m_transactionType);
+ break;
+
+ case LabelColumn2:
+ align |= Qt::AlignLeft;
+ txt = i18n("Date");
+ break;
+
+ case ValueColumn2:
+ align |= Qt::AlignRight;
+ fieldEditable = true;
+ if(m_transaction != MyMoneyTransaction())
+ txt = KGlobal::locale()->formatDate(m_transaction.postDate(), true);
+ break;
+ }
+ break;
+
+ case 1:
+ switch(col) {
+ case LabelColumn1:
+ align |= Qt::AlignLeft;
+ txt = i18n("Security");
+ break;
+
+ case ValueColumn1:
+ align |= Qt::AlignLeft;
+ fieldEditable = true;
+ if(m_account.isInvest())
+ txt = m_security.name();
+ break;
+
+ case LabelColumn2:
+ align |= Qt::AlignLeft;
+ if(haveShares()) {
+ txt = i18n("Shares");
+ } else if(haveSplitRatio()) {
+ txt = i18n("Ratio");
+ }
+ break;
+
+ case ValueColumn2:
+ align |= Qt::AlignRight;
+ if((fieldEditable = haveShares()) == true) {
+ txt = m_split.shares().abs().formatMoney("", MyMoneyMoney::denomToPrec(m_security.smallestAccountFraction()));
+ } else if(haveSplitRatio()) {
+ txt = QString("1 / %1").arg(m_split.shares().abs().formatMoney("", -1));
+ }
+ break;
+ }
+ break;
+
+ case 2:
+ switch(col) {
+ case LabelColumn1:
+ align |= Qt::AlignLeft;
+ if(haveAssetAccount())
+ txt = i18n("Account");
+ break;
+
+ case ValueColumn1:
+ align |= Qt::AlignLeft;
+ if((fieldEditable = haveAssetAccount()) == true) {
+ txt = MyMoneyFile::instance()->accountToCategory(m_assetAccountSplit.accountId());
+ }
+ break;
+
+ case LabelColumn2:
+ align |= Qt::AlignLeft;
+ if(havePrice())
+ txt = i18n("Price/share");
+ break;
+
+ case ValueColumn2:
+ align |= Qt::AlignRight;
+ if((fieldEditable = havePrice()) == true && !m_split.shares().isZero()) {
+ txt = m_split.price().formatMoney("", KMyMoneyGlobalSettings::pricePrecision());
+ }
+ break;
+ }
+ break;
+
+ case 3:
+ switch(col) {
+ case LabelColumn1:
+ align |= Qt::AlignLeft;
+ if(haveFees())
+ txt = i18n("Fees");
+ break;
+
+ case ValueColumn1:
+ align |= Qt::AlignLeft;
+ if((fieldEditable = haveFees()) == true) {
+ txt = m_feeCategory;
+ }
+ break;
+
+ case LabelColumn2:
+ align |= Qt::AlignLeft;
+ if(haveFees() && !m_feeCategory.isEmpty())
+ txt = i18n("Amount");
+ break;
+
+ case ValueColumn2:
+ align |= Qt::AlignRight;
+ if(haveFees()) {
+ if((fieldEditable = !m_feeCategory.isEmpty()) == true) {
+ txt = m_feeAmount.formatMoney(m_currency);
+ }
+ }
+ break;
+ }
+ break;
+
+ case 4:
+ switch(col) {
+ case LabelColumn1:
+ align |= Qt::AlignLeft;
+ if(haveInterest())
+ txt = i18n("Interest");
+ break;
+
+ case ValueColumn1:
+ align |= Qt::AlignLeft;
+ if((fieldEditable = haveInterest()) == true) {
+ txt = m_interestCategory;
+ }
+ break;
+
+ case LabelColumn2:
+ align |= Qt::AlignLeft;
+ if(haveInterest() && !m_interestCategory.isEmpty())
+ txt = i18n("Amount");
+ break;
+
+ case ValueColumn2:
+ align |= Qt::AlignRight;
+ if(haveInterest()) {
+ if((fieldEditable = !m_interestCategory.isEmpty()) == true) {
+ txt = (-m_interestAmount).formatMoney(m_currency);
+ }
+ }
+ break;
+ }
+ break;
+
+ case 5:
+ switch(col) {
+ case LabelColumn1:
+ align |= Qt::AlignLeft;
+ txt = i18n("Memo");
+ break;
+
+ case ValueColumn1:
+ align &= ~Qt::AlignVCenter;
+ align |= Qt::AlignTop;
+ align |= Qt::AlignLeft;
+ fieldEditable = true;
+ if(m_transaction != MyMoneyTransaction())
+ txt = m_split.memo().section('\n', 0, 2);
+ break;
+
+ case LabelColumn2:
+ align |= Qt::AlignLeft;
+ if(haveAmount())
+ txt = i18n("Total");
+ break;
+
+ case ValueColumn2:
+ align |= Qt::AlignRight;
+ if((fieldEditable = haveAmount()) == true) {
+ txt = m_assetAccountSplit.value().abs().formatMoney(m_currency);
+ }
+ }
+ break;
+
+ case 6:
+ switch(col) {
+ case LabelColumn2:
+ align |= Qt::AlignLeft;
+ txt = i18n("Status");
+ break;
+
+ case ValueColumn2:
+ align |= Qt::AlignRight;
+ fieldEditable = true;
+ txt = reconcileState();
+ break;
+ }
+ }
+
+ return fieldEditable;
+}
+
+void InvestTransaction::registerCellText(QString& txt, int& align, int row, int col, QPainter* /* painter */)
+{
+ switch(row) {
+ case 0:
+ switch(col) {
+ case DateColumn:
+ align |= Qt::AlignLeft;
+ txt = KGlobal::locale()->formatDate(m_transaction.postDate(), true);
+ break;
+
+ case DetailColumn:
+ align |= Qt::AlignLeft;
+ activity(txt, m_transactionType);
+ break;
+
+ case SecurityColumn:
+ align |= Qt::AlignLeft;
+ if(m_account.isInvest())
+ txt = m_security.name();
+ break;
+
+ case ReconcileFlagColumn:
+ align |= Qt::AlignHCenter;
+ txt = reconcileState(false);
+ break;
+
+ case QuantityColumn:
+ align |= Qt::AlignRight;
+ if(haveShares())
+ txt = m_split.shares().abs().formatMoney("", MyMoneyMoney::denomToPrec(m_security.smallestAccountFraction()));
+ else if(haveSplitRatio()) {
+ txt = QString("1 / %1").arg(m_split.shares().abs().formatMoney("", -1));
+ }
+ break;
+
+ case PriceColumn:
+ align |= Qt::AlignRight;
+ if(havePrice() && !m_split.shares().isZero()) {
+ txt = m_split.price().formatMoney(m_currency.tradingSymbol(), KMyMoneyGlobalSettings::pricePrecision());
+ }
+ break;
+
+ case ValueColumn:
+ align |= Qt::AlignRight;
+ if(haveAmount()) {
+ txt = m_assetAccountSplit.value().abs().formatMoney(m_currency);
+
+ } else if(haveInterest()) {
+ txt = (-m_interestAmount).formatMoney(m_currency);
+ }
+ break;
+
+ case BalanceColumn:
+ align |= Qt::AlignRight;
+ if(m_showBalance)
+ txt = m_balance.formatMoney("", MyMoneyMoney::denomToPrec(m_security.smallestAccountFraction()));
+ else
+ txt = "----";
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 1:
+ switch(col) {
+ case DetailColumn:
+ align |= Qt::AlignLeft;
+ if(haveAssetAccount() && !m_assetAccountSplit.accountId().isEmpty()) {
+ txt = MyMoneyFile::instance()->accountToCategory(m_assetAccountSplit.accountId());
+ } else if(haveInterest() && m_interestSplits.count()) {
+ txt = m_interestCategory;
+ } else if(haveFees() && m_feeSplits.count()) {
+ txt = m_feeCategory;
+ } else
+ singleLineMemo(txt, m_split);
+ break;
+
+ case QuantityColumn:
+ align |= Qt::AlignRight;
+ if(haveAssetAccount() && !m_assetAccountSplit.accountId().isEmpty()) {
+ // txt = m_interestAmount.abs().formatMoney(m_currency);
+ } else if(haveInterest() && m_interestSplits.count()) {
+ txt = (-m_interestAmount).formatMoney(m_currency);
+ } else if(haveFees() && m_feeSplits.count()) {
+ txt = m_feeAmount.formatMoney(m_currency);
+ }
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 2:
+ switch(col) {
+ case DetailColumn:
+ align |= Qt::AlignLeft;
+ if(haveAssetAccount() && !m_assetAccountSplit.accountId().isEmpty()
+ && haveInterest() && m_interestSplits.count()) {
+ txt = m_interestCategory;
+ } else if(haveFees() && m_feeSplits.count()) {
+ txt = m_feeCategory;
+ } else
+ singleLineMemo(txt, m_split);
+ break;
+
+ case QuantityColumn:
+ align |= Qt::AlignRight;
+ if(haveAssetAccount() && !m_assetAccountSplit.accountId().isEmpty()
+ && haveInterest() && m_interestSplits.count()) {
+ txt = (-m_interestAmount).formatMoney(m_currency);
+ } else if(haveFees() && m_feeSplits.count()) {
+ txt = m_feeAmount.formatMoney(m_currency);
+ }
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 3:
+ switch(col) {
+ case DetailColumn:
+ align |= Qt::AlignLeft;
+ if(haveAssetAccount() && !m_assetAccountSplit.accountId().isEmpty()
+ && haveInterest() && m_interestSplits.count()
+ && haveFees() && m_feeSplits.count()) {
+ txt = m_feeCategory;
+ } else
+ singleLineMemo(txt, m_split);
+ break;
+
+ case QuantityColumn:
+ align |= Qt::AlignRight;
+ if(haveAssetAccount() && !m_assetAccountSplit.accountId().isEmpty()
+ && haveInterest() && m_interestSplits.count()
+ && haveFees() && m_feeSplits.count()) {
+ txt = m_feeAmount.formatMoney(m_currency);
+ }
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 4:
+ switch(col) {
+ case DetailColumn:
+ align |= Qt::AlignLeft;
+ singleLineMemo(txt, m_split);
+ break;
+
+ default:
+ break;
+ }
+ break;
+ }
+}
+
+int InvestTransaction::registerColWidth(int col, const QFontMetrics& cellFontMetrics)
+{
+ QString txt;
+ MyMoneyMoney amount;
+ int nw = 0;
+
+ // for now just check all rows in that column
+ for(int row = 0; row < m_rowsRegister; ++row) {
+ int w;
+ Transaction::registerCellText(txt, row, col);
+ w = cellFontMetrics.width(txt+" ");
+ nw = QMAX(nw, w);
+ }
+
+ // TODO the optimized way would be to base the size on the contents of a single row
+ // as we do it in StdTransaction::registerColWidth()
+#if 0
+ switch(col) {
+ default:
+ break;
+
+ case PriceColumn:
+ if(havePrice()) {
+ txt = (m_split.value() / m_split.shares()).formatMoney("", KMyMoneyGlobalSettings::pricePrecision());
+ nw = cellFontMetrics.width(txt+" ");
+ }
+ break;
+ }
+#endif
+ return nw;
+}
+
+void InvestTransaction::arrangeWidgetsInForm(QMap<QString, QWidget*>& editWidgets)
+{
+ if(!m_form || !m_parent)
+ return;
+
+ setupFormPalette(editWidgets);
+
+ // arrange the edit widgets
+ arrangeWidget(m_form, 0, ValueColumn1, editWidgets["activity"]);
+ arrangeWidget(m_form, 0, ValueColumn2, editWidgets["postdate"]);
+ arrangeWidget(m_form, 1, ValueColumn1, editWidgets["security"]);
+ arrangeWidget(m_form, 1, ValueColumn2, editWidgets["shares"]);
+ arrangeWidget(m_form, 2, ValueColumn1, editWidgets["asset-account"]);
+ arrangeWidget(m_form, 2, ValueColumn2, editWidgets["price"]);
+ arrangeWidget(m_form, 3, ValueColumn1, editWidgets["fee-account"]->parentWidget());
+ arrangeWidget(m_form, 3, ValueColumn2, editWidgets["fee-amount"]);
+ arrangeWidget(m_form, 4, ValueColumn1, editWidgets["interest-account"]->parentWidget());
+ arrangeWidget(m_form, 4, ValueColumn2, editWidgets["interest-amount"]);
+ arrangeWidget(m_form, 5, ValueColumn1, editWidgets["memo"]);
+ arrangeWidget(m_form, 5, ValueColumn2, editWidgets["total"]);
+ arrangeWidget(m_form, 6, ValueColumn2, editWidgets["status"]);
+
+ // arrange dynamic labels
+ arrangeWidget(m_form, 1, LabelColumn2, editWidgets["shares-label"]);
+ arrangeWidget(m_form, 2, LabelColumn1, editWidgets["asset-label"]);
+ arrangeWidget(m_form, 2, LabelColumn2, editWidgets["price-label"]);
+ arrangeWidget(m_form, 3, LabelColumn1, editWidgets["fee-label"]);
+ arrangeWidget(m_form, 3, LabelColumn2, editWidgets["fee-amount-label"]);
+ arrangeWidget(m_form, 4, LabelColumn1, editWidgets["interest-label"]);
+ arrangeWidget(m_form, 4, LabelColumn2, editWidgets["interest-amount-label"]);
+ arrangeWidget(m_form, 5, LabelColumn2, editWidgets["total-label"]);
+
+ // get rid of the hints. we don't need them for the form
+ QMap<QString, QWidget*>::iterator it;
+ for(it = editWidgets.begin(); it != editWidgets.end(); ++it) {
+ KMyMoneyCombo* combo = dynamic_cast<KMyMoneyCombo*>(*it);
+ kMyMoneyLineEdit* lineedit = dynamic_cast<kMyMoneyLineEdit*>(*it);
+ kMyMoneyEdit* edit = dynamic_cast<kMyMoneyEdit*>(*it);
+ KMyMoneyPayeeCombo* payee = dynamic_cast<KMyMoneyPayeeCombo*>(*it);
+ if(combo)
+ combo->setHint(QString());
+ if(edit)
+ edit->setHint(QString());
+ if(lineedit)
+ lineedit->setHint(QString());
+ if(payee)
+ payee->setHint(QString());
+ }
+}
+
+void InvestTransaction::tabOrderInForm(QWidgetList& tabOrderWidgets) const
+{
+ // activity
+ tabOrderWidgets.append(focusWidget(m_form->cellWidget(0, ValueColumn1)));
+
+ // date
+ tabOrderWidgets.append(focusWidget(m_form->cellWidget(0, ValueColumn2)));
+
+ // security
+ tabOrderWidgets.append(focusWidget(m_form->cellWidget(1, ValueColumn1)));
+
+ // shares
+ tabOrderWidgets.append(focusWidget(m_form->cellWidget(1, ValueColumn2)));
+
+ // account
+ tabOrderWidgets.append(focusWidget(m_form->cellWidget(2, ValueColumn1)));
+
+ // price
+ tabOrderWidgets.append(focusWidget(m_form->cellWidget(2, ValueColumn2)));
+
+ // make sure to have the fee category field and the split button as seperate tab order widgets
+ // ok, we have to have some internal knowledge about the KMyMoneyCategory object, but
+ // it's one of our own widgets, so we actually don't care. Just make sure, that we don't
+ // go haywire when someone changes the KMyMoneyCategory object ...
+ QWidget* w = m_form->cellWidget(3, ValueColumn1);
+ tabOrderWidgets.append(focusWidget(w));
+ w = dynamic_cast<QWidget*>(w->child("splitButton"));
+ if(w)
+ tabOrderWidgets.append(w);
+
+ // fee amount
+ tabOrderWidgets.append(focusWidget(m_form->cellWidget(3, ValueColumn2)));
+
+ // the same applies for the interest categories
+ w = m_form->cellWidget(4, ValueColumn1);
+ tabOrderWidgets.append(focusWidget(w));
+ w = dynamic_cast<QWidget*>(w->child("splitButton"));
+ if(w)
+ tabOrderWidgets.append(w);
+
+ // interest amount
+ tabOrderWidgets.append(focusWidget(m_form->cellWidget(4, ValueColumn2)));
+
+ // memo
+ tabOrderWidgets.append(focusWidget(m_form->cellWidget(5, ValueColumn1)));
+
+ // total
+ tabOrderWidgets.append(focusWidget(m_form->cellWidget(5, ValueColumn2)));
+
+ // state
+ tabOrderWidgets.append(focusWidget(m_form->cellWidget(6, ValueColumn2)));
+}
+
+void InvestTransaction::arrangeWidgetsInRegister(QMap<QString, QWidget*>& editWidgets)
+{
+ if(!m_parent)
+ return;
+
+ setupRegisterPalette(editWidgets);
+
+ arrangeWidget(m_parent, m_startRow + 0, DateColumn, editWidgets["postdate"]);
+ arrangeWidget(m_parent, m_startRow + 0, SecurityColumn, editWidgets["security"]);
+ arrangeWidget(m_parent, m_startRow + 0, DetailColumn, editWidgets["activity"]);
+ arrangeWidget(m_parent, m_startRow + 1, DetailColumn, editWidgets["asset-account"]);
+ arrangeWidget(m_parent, m_startRow + 2, DetailColumn, editWidgets["interest-account"]->parentWidget());
+ arrangeWidget(m_parent, m_startRow + 3, DetailColumn, editWidgets["fee-account"]->parentWidget());
+ arrangeWidget(m_parent, m_startRow + 4, DetailColumn, editWidgets["memo"]);
+ arrangeWidget(m_parent, m_startRow + 0, QuantityColumn, editWidgets["shares"]);
+ arrangeWidget(m_parent, m_startRow + 0, PriceColumn, editWidgets["price"]);
+ arrangeWidget(m_parent, m_startRow + 2, QuantityColumn, editWidgets["interest-amount"]);
+ arrangeWidget(m_parent, m_startRow + 3, QuantityColumn, editWidgets["fee-amount"]);
+ arrangeWidget(m_parent, m_startRow + 0, ValueColumn, editWidgets["total"]);
+ arrangeWidget(m_parent, m_startRow + 1, DateColumn, editWidgets["status"]);
+
+ // increase the height of the row containing the memo widget
+ m_parent->setRowHeight(m_startRow+4, m_parent->rowHeightHint() * 3);
+}
+
+void InvestTransaction::tabOrderInRegister(QWidgetList& tabOrderWidgets) const
+{
+ QWidget* w;
+
+ // date
+ tabOrderWidgets.append(focusWidget(m_parent->cellWidget(m_startRow + 0, DateColumn)));
+ // security
+ tabOrderWidgets.append(focusWidget(m_parent->cellWidget(m_startRow + 0, SecurityColumn)));
+ // activity
+ tabOrderWidgets.append(focusWidget(m_parent->cellWidget(m_startRow + 0, DetailColumn)));
+ // shares
+ tabOrderWidgets.append(focusWidget(m_parent->cellWidget(m_startRow + 0, QuantityColumn)));
+ // price
+ tabOrderWidgets.append(focusWidget(m_parent->cellWidget(m_startRow + 0, PriceColumn)));
+ // asset account
+ tabOrderWidgets.append(focusWidget(m_parent->cellWidget(m_startRow + 1, DetailColumn)));
+
+ // make sure to have the category fields and the split button as seperate tab order widgets
+ // ok, we have to have some internal knowledge about the KMyMoneyCategory object, but
+ // it's one of our own widgets, so we actually don't care. Just make sure, that we don't
+ // go haywire when someone changes the KMyMoneyCategory object ...
+ w = m_parent->cellWidget(m_startRow + 2, DetailColumn); // interest account
+ tabOrderWidgets.append(focusWidget(w));
+ w = dynamic_cast<QWidget*>(w->child("splitButton"));
+ if(w)
+ tabOrderWidgets.append(w);
+
+ // interest amount
+ tabOrderWidgets.append(focusWidget(m_parent->cellWidget(m_startRow + 2, QuantityColumn)));
+
+ w = m_parent->cellWidget(m_startRow + 3, DetailColumn); // fee account
+ tabOrderWidgets.append(focusWidget(w));
+ w = dynamic_cast<QWidget*>(w->child("splitButton"));
+ if(w)
+ tabOrderWidgets.append(w);
+
+ // fee amount
+ tabOrderWidgets.append(focusWidget(m_parent->cellWidget(m_startRow + 3, QuantityColumn)));
+
+ // memo
+ tabOrderWidgets.append(focusWidget(m_parent->cellWidget(m_startRow + 4, DetailColumn)));
+
+ // status
+ tabOrderWidgets.append(focusWidget(m_parent->cellWidget(m_startRow + 1, DateColumn)));
+}
+
+int InvestTransaction::numRowsRegister(bool expanded) const
+{
+ int numRows = 1;
+ if(expanded) {
+ if(!m_inEdit) {
+ if(haveAssetAccount() && !m_assetAccountSplit.accountId().isEmpty())
+ ++numRows;
+ if(haveInterest() && m_interestSplits.count())
+ ++numRows;
+ if(haveFees() && m_feeSplits.count())
+ ++numRows;
+ if(!m_split.memo().isEmpty())
+ ++numRows;
+ } else
+ numRows = 5;
+ }
+ return numRows;
+}
+
+bool InvestTransaction::haveShares(void) const
+{
+ bool rc = true;
+ switch(m_transactionType) {
+ case MyMoneySplit::Dividend:
+ case MyMoneySplit::Yield:
+ case MyMoneySplit::SplitShares:
+ rc = false;
+ break;
+
+ default:
+ break;
+ }
+ return rc;
+}
+
+bool InvestTransaction::haveFees(void) const
+{
+ bool rc = true;
+ switch(m_transactionType) {
+ case MyMoneySplit::AddShares:
+ case MyMoneySplit::RemoveShares:
+ case MyMoneySplit::SplitShares:
+ rc = false;
+ break;
+
+ default:
+ break;
+ }
+ return rc;
+}
+
+bool InvestTransaction::haveInterest(void) const
+{
+ bool rc = false;
+ switch(m_transactionType) {
+ case MyMoneySplit::BuyShares:
+ case MyMoneySplit::SellShares:
+ case MyMoneySplit::Dividend:
+ case MyMoneySplit::ReinvestDividend:
+ case MyMoneySplit::Yield:
+ rc = true;
+ break;
+
+ default:
+ break;
+ }
+ return rc;
+}
+
+bool InvestTransaction::havePrice(void) const
+{
+ bool rc = false;
+ switch(m_transactionType) {
+ case MyMoneySplit::BuyShares:
+ case MyMoneySplit::SellShares:
+ case MyMoneySplit::ReinvestDividend:
+ rc = true;
+ break;
+
+ default:
+ break;
+ }
+ return rc;
+}
+
+bool InvestTransaction::haveAmount(void) const
+{
+ bool rc = false;
+ switch(m_transactionType) {
+ case MyMoneySplit::BuyShares:
+ case MyMoneySplit::SellShares:
+ case MyMoneySplit::Dividend:
+ case MyMoneySplit::Yield:
+ rc = true;
+ break;
+
+ default:
+ break;
+ }
+ return rc;
+}
+
+bool InvestTransaction::haveAssetAccount(void) const
+{
+ bool rc = true;
+ switch(m_transactionType) {
+ case MyMoneySplit::AddShares:
+ case MyMoneySplit::RemoveShares:
+ case MyMoneySplit::SplitShares:
+ case MyMoneySplit::ReinvestDividend:
+ rc = false;
+ break;
+
+ default:
+ break;
+ }
+ return rc;
+}
+
+bool InvestTransaction::haveSplitRatio(void) const
+{
+ return m_transactionType == MyMoneySplit::SplitShares;
+}
+
+void InvestTransaction::splits(MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& interestSplits, QValueList<MyMoneySplit>& feeSplits) const
+{
+ assetAccountSplit = m_assetAccountSplit;
+ interestSplits = m_interestSplits;
+ feeSplits = m_feeSplits;
+}
+
+TransactionEditor* InvestTransaction::createEditor(TransactionEditorContainer* regForm, const KMyMoneyRegister::SelectedTransactions& list, const QDate& lastPostDate)
+{
+ m_inRegisterEdit = regForm == m_parent;
+ return new InvestTransactionEditor(regForm, this, list, lastPostDate);
+}
+
diff --git a/kmymoney2/widgets/transaction.h b/kmymoney2/widgets/transaction.h
new file mode 100644
index 0000000..060d025
--- /dev/null
+++ b/kmymoney2/widgets/transaction.h
@@ -0,0 +1,420 @@
+/***************************************************************************
+ transaction.h - description
+ -------------------
+ begin : Tue Jun 13 2006
+ copyright : (C) 2000-2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef TRANSACTION_H
+#define TRANSACTION_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qpalette.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/registeritem.h>
+#include <kmymoney/mymoneytransaction.h>
+#include <kmymoney/mymoneysplit.h>
+#include <kmymoney/mymoneysecurity.h>
+#include <kmymoney/selectedtransaction.h>
+#include <kmymoney/mymoneyaccount.h>
+
+class QTable;
+class TransactionEditor;
+class TransactionEditorContainer;
+
+namespace KMyMoneyTransactionForm {
+ class TransactionForm;
+}; // namespace
+
+namespace KMyMoneyRegister {
+
+// keep the following list in sync with code in the constructor
+// of KMyMoneyRegister::Register in register.cpp
+typedef enum {
+ NumberColumn = 0,
+ DateColumn,
+ AccountColumn,
+ SecurityColumn,
+ DetailColumn,
+ ReconcileFlagColumn,
+ PaymentColumn,
+ DepositColumn,
+ QuantityColumn,
+ PriceColumn,
+ ValueColumn,
+ BalanceColumn,
+ // insert new values above this line
+ MaxColumns
+} Column;
+
+class Transaction : public RegisterItem
+{
+public:
+ Transaction(Register* parent, const MyMoneyTransaction& transaction, const MyMoneySplit& split, int uniqueId);
+ virtual ~Transaction() {}
+
+ virtual const char* className(void) { return "Transaction"; }
+
+ bool isSelectable(void) const { return true; }
+ bool isSelected(void) const { return m_selected; }
+ void setSelected(bool selected);
+
+ bool canHaveFocus(void) const { return true; }
+ bool hasFocus(void) const { return m_focus; }
+ bool hasEditorOpen(void) const { return m_inEdit; }
+
+ virtual bool isScheduled(void) const { return false; }
+
+ void setFocus(bool focus, bool updateLens = true);
+
+ bool isErronous(void) const { return m_erronous; }
+
+ virtual const QDate& sortPostDate(void) const { return m_transaction.postDate(); }
+ virtual int sortSamePostDate(void) const { return 2; }
+ virtual const QDate& sortEntryDate(void) const { return m_transaction.entryDate(); }
+ virtual const QString& sortPayee(void) const { return m_payee; }
+ virtual const MyMoneyMoney& sortValue(void) const { return m_split.shares(); }
+ virtual const QString& sortNumber(void) const { return m_split.number(); }
+ virtual const QString& sortEntryOrder(void) const { return m_uniqueId; }
+ virtual CashFlowDirection sortType(void) const { return m_split.shares().isNegative() ? Payment : Deposit; }
+ virtual const QString& sortCategory(void) const { return m_category; }
+ virtual MyMoneySplit::reconcileFlagE sortReconcileState(void) const { return m_split.reconcileFlag(); }
+
+ virtual const QString& id(void) const { return m_uniqueId; }
+ const MyMoneyTransaction& transaction(void) const { return m_transaction; }
+ const MyMoneySplit& split(void) const { return m_split; }
+
+ void setBalance(const MyMoneyMoney& balance) { m_balance = balance; }
+ const MyMoneyMoney& balance(void) const { return m_balance; }
+
+ virtual int rowHeightHint(void) const;
+
+ /**
+ * This method sets the general paramaters required for the painting of a cell
+ * in the register. These are:
+ *
+ * - background color (alternating)
+ * - background color (imported transaction)
+ * - background color (matched transaction)
+ * - background color (selected transaction)
+ * - cellRect (area covering the cell)
+ * - textRect (area covering the text)
+ * - color of the pen to do the painting of text and lines
+ *
+ * @param painter pointer to the QPainter object
+ * @param row vertical index of cell in register
+ * @param col horizontal index of cell in register
+ * @param cellRect ref to QRect object receiving the area information for the cell
+ * @param textRect ref to QRect object receiving the area information for the text
+ * @param cg ref to QColorGroup object receiving the color information to be used
+ */
+ virtual bool paintRegisterCellSetup(QPainter* painter, int& row, int& col, QRect& cellRect, QRect& textRect, QColorGroup& cg, QBrush& brush);
+
+ /**
+ * paints the focus if the current cell defined by (@a row, @a col) has the focus.
+ *
+ * @param painter pointer to the QPainter object
+ * @param row vertical index of cell in register
+ * @param col horizontal index of cell in register
+ * @param r area covering the cell
+ * @param cg the color definitions to be used
+ */
+ void paintRegisterCellFocus(QPainter* painter, int row, int col, const QRect& r, const QColorGroup& cg);
+
+ /**
+ * paints a cell of the register for the transaction. Uses paintRegisterCellSetup(), paintRegisterCellText()
+ * paintRegisterGrid(), paintRegisterIcons() and paintRegisterCellFocus() to actually do the job.
+ *
+ * @param painter pointer to the QPainter object
+ * @param row vertical index of cell in register
+ * @param col horizontal index of cell in register
+ * @param r area covering the cell
+ * @param selected unused but kept for compatibility
+ * @param cg the color definitions to be used
+ *
+ */
+ virtual void paintRegisterCell(QPainter* painter, int row, int col, const QRect& r, bool selected, const QColorGroup& cg);
+ virtual void paintRegisterCellText(QPainter* painter, int row, int col, const QRect& r, const QColorGroup& cg, int align, const QString& txt);
+ virtual void paintRegisterCellBackground(QPainter* painter, int row, int col, const QRect& r, const QBrush& backgroundBrush);
+ virtual void paintRegisterGrid(QPainter* painter, int row, int col, const QRect& r, const QColorGroup& cg) const;
+ virtual void paintRegisterIcons(QPainter* painter, int row, int col, const QRect& r, const QColorGroup& cg);
+
+ virtual void paintFormCell(QPainter* /* painter */, int /* row */, int /* col */, const QRect& /* r */, bool /* selected */, const QColorGroup& /* cg */);
+
+ virtual bool formCellText(QString& /* txt */, int& /* align */, int /* row */, int /* col */, QPainter* /* painter */) { return false; }
+ virtual void registerCellText(QString& /* txt */, int& /* align */, int /* row */, int /* col */, QPainter* /* painter */) {}
+ virtual int registerColWidth(int /* col */, const QFontMetrics& /* cellFontMetrics */) { return 0; }
+
+ /**
+ * Helper method for the above method.
+ */
+ void registerCellText(QString& txt, int row, int col);
+
+ virtual int formRowHeight(int row);
+ virtual int formRowHeight(void) const;
+
+ virtual void setupForm(KMyMoneyTransactionForm::TransactionForm* form);
+ virtual void setupFormPalette(QMap<QString, QWidget*>& editWidgets);
+ virtual void setupRegisterPalette(QMap<QString, QWidget*>& editWidgets);
+ virtual void loadTab(KMyMoneyTransactionForm::TransactionForm* form) = 0;
+
+ virtual void arrangeWidgetsInForm(QMap<QString, QWidget*>& editWidgets) = 0;
+ virtual void arrangeWidgetsInRegister(QMap<QString, QWidget*>& editWidgets) = 0;
+ virtual void tabOrderInForm(QWidgetList& tabOrderWidgets) const = 0;
+ virtual void tabOrderInRegister(QWidgetList& tabOrderWidgets) const = 0;
+
+ virtual KMyMoneyRegister::Action actionType(void) const = 0;
+
+ QWidget* focusWidget(QWidget*) const;
+ void arrangeWidget(QTable* tbl, int row, int col, QWidget* w) const;
+
+ bool haveNumberField(void) const;
+
+ bool matches(const QString&) const;
+
+ /**
+ * Checks if the mouse hovered over an area that has a tooltip associated with it.
+ * The mouse position is given in relative coordinates to the @a startRow and the
+ * @a row and @a col of the item are also passed as relative values.
+ *
+ * If a tooltip shall be shown, this method presets the rectangle @a r with the
+ * area in register coordinates and @a msg with the string that will be passed
+ * to QToolTip::tip. @a true is returned in this case.
+ *
+ * If no tooltip is available, @a false will be returned.
+ */
+ virtual bool maybeTip(const QPoint& relpos, int row, int col, QRect& r, QString& msg);
+
+ /**
+ * This method returns the number of register rows required for a certain
+ * item in expanded (@p expanded equals @a true) or collapsed (@p expanded
+ * is @a false) mode.
+ *
+ * @param expanded returns number of maximum rows required for this item to
+ * display all information (used for ledger lens and register
+ * edit mode) or the minimum number of rows required.
+ * @return number of rows required for mode selected by @p expanded
+ */
+ virtual int numRowsRegister(bool expanded) const = 0;
+
+ virtual int numRowsRegister(void) const = 0;
+
+ void leaveEditMode(void);
+ void startEditMode(void);
+
+ /**
+ * This method creates an editor for the transaction
+ */
+ virtual TransactionEditor* createEditor(TransactionEditorContainer* regForm, const KMyMoneyRegister::SelectedTransactions& list, const QDate& lastPostDate) = 0;
+
+ virtual void setVisible(bool visible);
+
+ virtual void setShowBalance(bool showBalance);
+
+ /**
+ * Return information if @a row should be shown (@a true )
+ * or hidden (@a false ) in the form. Default is true.
+ */
+ virtual bool showRowInForm(int row) const { Q_UNUSED(row) return true; }
+
+ /**
+ * Control visibility of @a row in the transaction form.
+ * Only row 0 has an effect, others return @a true.
+ */
+ virtual void setShowRowInForm(int row, bool show) { Q_UNUSED(row); Q_UNUSED(show) }
+
+ virtual void setReducedIntensity(bool reduced) { m_reducedIntensity = reduced; }
+
+protected:
+ virtual void markAsErronous(QPainter* p, int row, int col, const QRect& r);
+ virtual void markAttachment(QPainter* painter, int row, int col, const QRect& r);
+
+ /**
+ * This method converts m_split.reconcileFlag() into a readable string
+ *
+ * @param text Return textual representation e.g. "Cleared" (@a true) or just
+ * a flag e.g. "C" (@a false). Defaults to textual representation.
+ * @return Textual representation or flag as selected via @p text of the
+ * reconciliation state of the split
+ */
+ QString reconcileState(bool text = true) const;
+
+ /**
+ * Helper method to reduce a multi line memo text into a single line.
+ *
+ * @param txt QString that will receive the single line memo text
+ * @param split const reference to the split to take the memo from
+ */
+ void singleLineMemo(QString& txt, const MyMoneySplit& split) const;
+
+ virtual void setupPalette(const QPalette& palette, QMap<QString, QWidget*>& editWidgets);
+
+protected:
+ MyMoneyTransaction m_transaction;
+ MyMoneySplit m_split;
+ MyMoneyAccount m_account;
+ MyMoneyMoney m_balance;
+ QTable* m_form;
+ QString m_category;
+ QString m_payee;
+ QString m_payeeHeader;
+ QString m_categoryHeader;
+ QString m_splitCurrencyId;
+ QString m_uniqueId;
+ int m_formRowHeight;
+ bool m_selected;
+ bool m_focus;
+ bool m_erronous;
+ bool m_inEdit;
+ bool m_inRegisterEdit;
+ bool m_showBalance;
+ bool m_reducedIntensity;
+};
+
+class StdTransaction : public Transaction
+{
+public:
+ StdTransaction(Register* parent, const MyMoneyTransaction& transaction, const MyMoneySplit& split, int uniqueId);
+ virtual ~StdTransaction() {}
+
+ virtual const char* className(void) { return "StdTransaction"; }
+
+ bool formCellText(QString& txt, int& align, int row, int col, QPainter* painter = 0);
+ void registerCellText(QString& txt, int& align, int row, int col, QPainter* painter = 0);
+
+ int registerColWidth(int col, const QFontMetrics& cellFontMetrics);
+ void setupForm(KMyMoneyTransactionForm::TransactionForm* form);
+ void loadTab(KMyMoneyTransactionForm::TransactionForm* form);
+
+ int numColsForm(void) const { return 4; }
+
+ void arrangeWidgetsInForm(QMap<QString, QWidget*>& editWidgets);
+ void arrangeWidgetsInRegister(QMap<QString, QWidget*>& editWidgets);
+ void tabOrderInForm(QWidgetList& tabOrderWidgets) const;
+ void tabOrderInRegister(QWidgetList& tabOrderWidgets) const;
+ KMyMoneyRegister::Action actionType(void) const;
+
+ int numRowsRegister(bool expanded) const;
+
+ /**
+ * Provided for internal reasons. No API change. See RegisterItem::numRowsRegister()
+ */
+ int numRowsRegister(void) const { return RegisterItem::numRowsRegister(); }
+
+ TransactionEditor* createEditor(TransactionEditorContainer* regForm, const KMyMoneyRegister::SelectedTransactions& list, const QDate& lastPostDate);
+
+ /**
+ * Return information if @a row should be shown (@a true )
+ * or hidden (@a false ) in the form. Default is true.
+ */
+ virtual bool showRowInForm(int row) const;
+
+ /**
+ * Control visibility of @a row in the transaction form.
+ * Only row 0 has an effect, others return @a true.
+ */
+ virtual void setShowRowInForm(int row, bool show);
+
+protected:
+ void setupFormHeader(const QString& id);
+
+private:
+ bool m_showAccountRow;
+};
+
+class InvestTransaction : public Transaction
+{
+public:
+ InvestTransaction(Register* parent, const MyMoneyTransaction& transaction, const MyMoneySplit& split, int uniqueId);
+ virtual ~InvestTransaction() {}
+
+ virtual const QString& sortSecurity(void) const { return m_security.name(); }
+ virtual const char* className(void) { return "InvestTransaction"; }
+
+ // virtual void paintRegisterCell(QPainter* painter, int row, int col, const QRect& r, bool selected, const QColorGroup& cg);
+
+ bool formCellText(QString& txt, int& align, int row, int col, QPainter* painter = 0);
+ void registerCellText(QString& txt, int& align, int row, int col, QPainter* painter = 0);
+
+ int registerColWidth(int col, const QFontMetrics& cellFontMetrics);
+ void setupForm(KMyMoneyTransactionForm::TransactionForm* form);
+
+ /**
+ * provide NOP here as the investment transaction form does not supply a tab
+ */
+ void loadTab(KMyMoneyTransactionForm::TransactionForm* /* form */) {}
+
+ int numColsForm(void) const { return 4; }
+
+ void arrangeWidgetsInForm(QMap<QString, QWidget*>& editWidgets);
+ void arrangeWidgetsInRegister(QMap<QString, QWidget*>& editWidgets);
+ void tabOrderInForm(QWidgetList& tabOrderWidgets) const;
+ void tabOrderInRegister(QWidgetList& tabOrderWidgets) const;
+ KMyMoneyRegister::Action actionType(void) const { return KMyMoneyRegister::ActionNone; }
+
+ int numRowsRegister(bool expanded) const;
+
+ /**
+ * Provided for internal reasons. No API change. See RegisterItem::numRowsRegister()
+ */
+ int numRowsRegister(void) const { return RegisterItem::numRowsRegister(); }
+
+ TransactionEditor* createEditor(TransactionEditorContainer* regForm, const KMyMoneyRegister::SelectedTransactions& list, const QDate& lastPostDate);
+
+ void splits(MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& interestSplits, QValueList<MyMoneySplit>& feeSplits) const;
+
+protected:
+ bool haveShares(void) const;
+ bool haveFees(void) const;
+ bool haveInterest(void) const;
+ bool havePrice(void) const;
+ bool haveAmount(void) const;
+ bool haveAssetAccount(void) const;
+ bool haveSplitRatio(void) const;
+
+ /**
+ * Returns textual representation of the activity identified
+ * by @p type.
+ *
+ * @param txt reference to QString where to store the result
+ * @param type activity represented as investTransactionTypeE
+ */
+ void activity(QString& txt, MyMoneySplit::investTransactionTypeE type) const;
+
+private:
+ QValueList<MyMoneySplit> m_feeSplits;
+ QValueList<MyMoneySplit> m_interestSplits;
+ MyMoneySplit m_assetAccountSplit;
+ MyMoneySecurity m_security;
+ MyMoneySecurity m_currency;
+ MyMoneySplit::investTransactionTypeE m_transactionType;
+ QString m_feeCategory;
+ QString m_interestCategory;
+ MyMoneyMoney m_feeAmount;
+ MyMoneyMoney m_interestAmount;
+ MyMoneyMoney m_totalAmount;
+};
+
+}; // namespace
+
+#endif
+// vim:cin:si:ai:et:ts=2:sw=2:
+
diff --git a/kmymoney2/widgets/transactioneditorcontainer.cpp b/kmymoney2/widgets/transactioneditorcontainer.cpp
new file mode 100644
index 0000000..4750025
--- /dev/null
+++ b/kmymoney2/widgets/transactioneditorcontainer.cpp
@@ -0,0 +1,29 @@
+/***************************************************************************
+ transactioneditorcontainer.cpp
+ ----------
+ begin : Wed Jun 07 2006
+ copyright : (C) 2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/transactioneditorcontainer.h>
+
+
diff --git a/kmymoney2/widgets/transactioneditorcontainer.h b/kmymoney2/widgets/transactioneditorcontainer.h
new file mode 100644
index 0000000..01474ee
--- /dev/null
+++ b/kmymoney2/widgets/transactioneditorcontainer.h
@@ -0,0 +1,58 @@
+/***************************************************************************
+ transactioneditorcontainer.h
+ ----------
+ begin : Wed Jun 07 2006
+ copyright : (C) 2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef TRANSACTIONEDITORCONTAINER_H
+#define TRANSACTIONEDITORCONTAINER_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qmap.h>
+#include <qstring.h>
+#include <qtable.h>
+class QWidget;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+namespace KMyMoneyRegister { class Transaction; };
+
+typedef enum {
+ ProtectNone = 0,
+ ProtectTransfer,
+ ProtectNonTransfer,
+ ProtectAll
+} ProtectedAction;
+
+class TransactionEditorContainer : public QTable
+{
+public:
+ TransactionEditorContainer(QWidget* parent, const char* name) : QTable(parent, name) {}
+
+ virtual void arrangeEditWidgets(QMap<QString, QWidget*>& editWidgets, KMyMoneyRegister::Transaction* t) = 0;
+ virtual void removeEditWidgets(QMap<QString, QWidget*>& editWidgets) = 0;
+ virtual void tabOrder(QWidgetList& tabOrderWidgets, KMyMoneyRegister::Transaction* t) const = 0;
+ // FIXME remove tabbar
+ // virtual int action(QMap<QString, QWidget*>& editWidgets) const = 0;
+ // virtual void setProtectedAction(QMap<QString, QWidget*>& editWidgets, ProtectedAction action) = 0;
+};
+
+#endif
diff --git a/kmymoney2/widgets/transactionform.cpp b/kmymoney2/widgets/transactionform.cpp
new file mode 100644
index 0000000..7097b6d
--- /dev/null
+++ b/kmymoney2/widgets/transactionform.cpp
@@ -0,0 +1,467 @@
+/***************************************************************************
+ transactionform.cpp
+ -------------------
+ begin : Sun May 14 2006
+ copyright : (C) 2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstring.h>
+#include <qpainter.h>
+#include <qtimer.h>
+#include <qapplication.h>
+#include <qlayout.h>
+#include <qtabbar.h>
+#include <qpalette.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <kglobal.h>
+#include <kdebug.h>
+#include <kcombobox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/kmymoneydateinput.h>
+#include <kmymoney/kmymoneyedit.h>
+#include <kmymoney/kmymoneycategory.h>
+
+#include "transactionform.h"
+#include "../kmymoneyutils.h"
+#include "../kmymoneyglobalsettings.h"
+
+using namespace KMyMoneyTransactionForm;
+
+TabBar::TabBar(QWidget* parent, const char* name) :
+ QTabBar(parent, name),
+ m_signalType(SignalNormal)
+{
+ connect(this, SIGNAL(selected(int)), this, SLOT(slotTabSelected(int)));
+}
+
+TabBar::SignalEmissionE TabBar::setSignalEmission(TabBar::SignalEmissionE type)
+{
+ TabBar::SignalEmissionE _type = m_signalType;
+ m_signalType = type;
+ return _type;
+}
+
+int TabBar::currentTab(void) const
+{
+ QMap<int, int>::const_iterator it;
+ it = m_idMap.find(QTabBar::currentTab());
+ if(it != m_idMap.end())
+ return *it;
+ return -1;
+}
+
+void TabBar::setCurrentTab(int id)
+{
+ if (tab(id)) // there are no tabs in an expense/income ledger
+ if (tab(id)->isEnabled())
+ setCurrentTab(tab(id));
+}
+
+QTab* TabBar::tab(int id) const
+{
+ /* if a QAccel calls setCurrentTab, id will be as set by qt.
+ * however if we call it programmatically, id will
+ * be our own id. We do tell QTab about our id but
+ * in qt3.3 I (woro) am not able to make sure that
+ * QAccel also gets it. See registeritem.h: We defined
+ * new values for our own ids which should lie way
+ * outside of the range that qt uses
+ */
+ QTab *result=QTabBar::tab(id);
+ QMap<int, int>::const_iterator it;
+ for(it = m_idMap.begin(); it != m_idMap.end(); ++it)
+ if(*it == id)
+ result=QTabBar::tab(it.key());
+ return result;
+}
+
+void TabBar::setCurrentTab(QTab* tab)
+{
+ if(m_signalType != SignalNormal)
+ blockSignals(true);
+
+ QTabBar::setCurrentTab(tab);
+
+ if(m_signalType != SignalNormal)
+ blockSignals(false);
+
+ if(m_signalType == SignalAlways)
+ emit selected(tab->identifier());
+}
+
+void TabBar::addTab(QTab* tab, int id)
+{
+ QTabBar::addTab(tab);
+ setIdentifier(tab, id);
+}
+
+void TabBar::setIdentifier(QTab* tab, int newId)
+{
+ m_idMap[tab->identifier()] = newId;
+}
+
+void TransactionForm::enableTabBar(bool b)
+{
+ m_tabBar->setEnabled(b);
+}
+
+void TabBar::slotTabSelected(int id)
+{
+ QMap<int, int>::const_iterator it;
+ it = m_idMap.find(id);
+ if(it != m_idMap.end())
+ emit tabSelected(*it);
+ else
+ emit tabSelected(id);
+}
+
+void TabBar::show(void)
+{
+ // make sure we don't emit a signal when simply showing the widget
+ if(m_signalType != SignalNormal)
+ blockSignals(true);
+
+ QTabBar::show();
+
+ if(m_signalType != SignalNormal)
+ blockSignals(false);
+}
+
+void TabBar::copyTabs(const TabBar* otabbar)
+{
+ // remove all existing tabs
+ while(count()) {
+ removeTab(tabAt(0));
+ }
+ // now create new ones. copy text, icon and identifier
+ for(int i=0; i < otabbar->count(); ++i) {
+ QTab* otab = otabbar->tabAt(i);
+ QTab* ntab = new QTab(otab->text());
+ int nid = QTabBar::addTab(ntab);
+ m_idMap[nid] = otabbar->m_idMap[otab->identifier()];
+ ntab->setEnabled(otab->isEnabled());
+ if(otab->identifier() == otabbar->currentTab())
+ setCurrentTab(ntab);
+ }
+}
+
+TransactionForm::TransactionForm(QWidget *parent, const char *name) :
+ TransactionEditorContainer(parent, name),
+ m_transaction(0),
+ m_tabBar(0)
+{
+ setBackgroundOrigin(QTable::WindowOrigin);
+ setFrameShape( QTable::NoFrame);
+ setShowGrid( false );
+ setSelectionMode( QTable::NoSelection );
+ verticalHeader()->hide();
+ horizontalHeader()->hide();
+ setLeftMargin(0);
+ setTopMargin(0);
+ setReadOnly(true); // display only
+
+ // make sure, that the table is 'invisible' by setting up the right background
+ // keep the original color group for painting the cells though
+ QPalette p = palette();
+ QColorGroup cg = p.active();
+ m_cellColorGroup = cg;
+ cg.setBrush(QColorGroup::Base, cg.brush(QColorGroup::Background));
+ p.setActive(cg);
+ p.setInactive(cg);
+ p.setDisabled(cg);
+ setPalette(p);
+
+ // never show vertical scroll bars
+ setVScrollBarMode(QScrollView::AlwaysOff);
+
+ slotSetTransaction(0);
+}
+
+void TransactionForm::drawContents( QPainter *p, int cx, int cy, int cw, int ch )
+{
+ // the QTable::drawContents() method does not honor the block update flag
+ // so we take care of it here
+ if ( testWState(WState_Visible|WState_BlockUpdates) != WState_Visible )
+ return;
+
+ QTable::drawContents(p, cx, cy, cw, ch);
+}
+
+bool TransactionForm::focusNextPrevChild(bool next)
+{
+ return QFrame::focusNextPrevChild(next);
+}
+
+void TransactionForm::clear(void)
+{
+ slotSetTransaction(0);
+}
+
+void TransactionForm::slotSetTransaction(KMyMoneyRegister::Transaction* transaction)
+{
+ m_transaction = transaction;
+
+ bool enabled = isUpdatesEnabled();
+ setUpdatesEnabled(false);
+
+ if(m_transaction) {
+ // the next call sets up a back pointer to the form and also sets up the col and row span
+ // as well as the tab of the form
+ m_transaction->setupForm(this);
+
+ } else {
+ setNumRows(5);
+ setNumCols(1);
+ }
+
+ kMyMoneyDateInput dateInput(0, "editDate");
+ KMyMoneyCategory category(0, "category", true);
+
+ // extract the maximal sizeHint height
+ int height = QMAX(dateInput.sizeHint().height(), category.sizeHint().height());
+
+ for(int row = 0; row < numRows(); ++row) {
+ if(!transaction || transaction->showRowInForm(row)) {
+ showRow(row);
+ QTable::setRowHeight(row, height);
+ } else
+ hideRow(row);
+ }
+
+ // adjust vertical size of form table
+ height *= numRows();
+ setMaximumHeight(height);
+ setMinimumHeight(height);
+
+ setUpdatesEnabled(enabled);
+
+ // force resizeing of the columns
+ QTimer::singleShot(0, this, SLOT(resize()));
+}
+
+void TransactionForm::paintCell(QPainter* painter, int row, int col, const QRect& r, bool selected, const QColorGroup& /* cg */)
+{
+ if(m_transaction) {
+ m_transaction->paintFormCell(painter, row, col, r, selected, m_cellColorGroup);
+ }
+}
+
+TabBar* TransactionForm::tabBar(QWidget* parent)
+{
+ if(!m_tabBar && parent) {
+ // determine the height of the objects in the table
+ // create the tab bar
+ m_tabBar = new TabBar( parent );
+ m_tabBar->setSignalEmission(TabBar::SignalAlways);
+ m_tabBar->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)0, 0, 0, m_tabBar->sizePolicy().hasHeightForWidth() ) );
+ connect(m_tabBar, SIGNAL(tabSelected(int)), this, SLOT(slotActionSelected(int)));
+ }
+ return m_tabBar;
+}
+
+void TransactionForm::slotActionSelected(int id)
+{
+ emit newTransaction(static_cast<KMyMoneyRegister::Action>(id));
+}
+
+void TransactionForm::setupForm(const MyMoneyAccount& acc)
+{
+ // remove all tabs from the tabbar
+ QTab* tab;
+ for(tab = m_tabBar->tabAt(0); tab; tab = m_tabBar->tabAt(0)) {
+ m_tabBar->removeTab(tab);
+ }
+
+ m_tabBar->show();
+
+ // important: one needs to add the new tabs first and then
+ // change the identifier. Otherwise, addTab() will assign
+ // a different value
+ switch(acc.accountType()) {
+ default:
+ tab = new QTab(i18n("&Deposit"));
+ m_tabBar->addTab(tab, KMyMoneyRegister::ActionDeposit);
+ tab = new QTab(i18n("&Transfer"));
+ m_tabBar->addTab(tab, KMyMoneyRegister::ActionTransfer);
+ tab = new QTab(i18n("&Withdrawal"));
+ m_tabBar->addTab(tab, KMyMoneyRegister::ActionWithdrawal);
+ break;
+
+ case MyMoneyAccount::CreditCard:
+ tab = new QTab(i18n("&Payment"));
+ m_tabBar->addTab(tab, KMyMoneyRegister::ActionDeposit);
+ tab = new QTab(i18n("&Transfer"));
+ m_tabBar->addTab(tab, KMyMoneyRegister::ActionTransfer);
+ tab = new QTab(i18n("&Charge"));
+ m_tabBar->addTab(tab, KMyMoneyRegister::ActionWithdrawal);
+ break;
+
+ case MyMoneyAccount::Liability:
+ case MyMoneyAccount::Loan:
+ tab = new QTab(i18n("&Decrease"));
+ m_tabBar->addTab(tab, KMyMoneyRegister::ActionDeposit);
+ tab = new QTab(i18n("&Transfer"));
+ m_tabBar->addTab(tab, KMyMoneyRegister::ActionTransfer);
+ tab = new QTab(i18n("&Increase"));
+ m_tabBar->addTab(tab, KMyMoneyRegister::ActionWithdrawal);
+ break;
+
+ case MyMoneyAccount::Asset:
+ case MyMoneyAccount::AssetLoan:
+ tab = new QTab(i18n("&Increase"));
+ m_tabBar->addTab(tab, KMyMoneyRegister::ActionDeposit);
+ tab = new QTab(i18n("&Transfer"));
+ m_tabBar->addTab(tab, KMyMoneyRegister::ActionTransfer);
+ tab = new QTab(i18n("&Decrease"));
+ m_tabBar->addTab(tab, KMyMoneyRegister::ActionWithdrawal);
+ break;
+
+ case MyMoneyAccount::Income:
+ case MyMoneyAccount::Expense:
+ case MyMoneyAccount::Investment:
+ case MyMoneyAccount::Stock:
+ m_tabBar->hide();
+ break;
+ }
+}
+
+void TransactionForm::resize(void)
+{
+ resize(ValueColumn1);
+}
+
+void TransactionForm::resize(int col)
+{
+ bool enabled = isUpdatesEnabled();
+ setUpdatesEnabled(false);
+
+ // resize the register
+ int w = visibleWidth();
+ int nc = numCols();
+
+ // check which space we need
+ if(nc >= LabelColumn1 && columnWidth(LabelColumn1))
+ adjustColumn(LabelColumn1);
+ if(nc >= LabelColumn2 && columnWidth(LabelColumn2))
+ adjustColumn(LabelColumn2);
+ if(nc >= ValueColumn2 && columnWidth(ValueColumn2))
+ adjustColumn(ValueColumn2);
+
+ for(int i = 0; i < nc; ++i) {
+ if(i == col)
+ continue;
+
+ w -= columnWidth(i);
+ }
+ if(col < nc && w >= 0)
+ setColumnWidth(col, w);
+
+ setUpdatesEnabled(enabled);
+ updateContents();
+}
+
+// needed to duplicate this here, as the QTable::tableSize method is private :-(
+QSize TransactionForm::tableSize(void) const
+{
+ return QSize(columnPos(numCols()-1) + columnWidth(numCols()-1) + 10,
+ rowPos(numRows()-1) + rowHeight(numRows()-1) + 10);
+}
+
+QSize TransactionForm::sizeHint(void) const
+{
+ // I've taken this from qtable.cpp, QTable::sizeHint()
+ int vmargin = QApplication::reverseLayout() ? rightMargin() : leftMargin();
+ return QSize(tableSize().width() + vmargin + 5, tableSize().height() + topMargin() + 10);
+}
+
+void TransactionForm::adjustColumn(Column col)
+{
+ int w = 0;
+
+ // preset the width of the right value column with the width of
+ // the possible edit widgets so that they fit if they pop up
+ if(col == ValueColumn2) {
+ kMyMoneyDateInput dateInput;
+ kMyMoneyEdit valInput;
+ w = QMAX(dateInput.sizeHint().width(), valInput.sizeHint().width());
+ }
+
+ if(m_transaction) {
+ QString txt;
+ QFontMetrics fontMetrics(KMyMoneyGlobalSettings::listCellFont());
+
+ // scan through the rows
+ for ( int i = numRows()-1; i >= 0; --i ) {
+ int align;
+ m_transaction->formCellText(txt, align, i, static_cast<int>(col), 0);
+ QWidget* cw = cellWidget(i, col);
+ if(cw) {
+ w = QMAX(w, cw->sizeHint().width()+10);
+ }
+ w = QMAX(w, fontMetrics.width(txt)+10);
+ }
+ }
+
+ if(col < numCols())
+ setColumnWidth( col, w );
+}
+
+void TransactionForm::arrangeEditWidgets(QMap<QString, QWidget*>& editWidgets, KMyMoneyRegister::Transaction* t)
+{
+ t->arrangeWidgetsInForm(editWidgets);
+ resize(ValueColumn1);
+}
+
+void TransactionForm::tabOrder(QWidgetList& tabOrderWidgets, KMyMoneyRegister::Transaction* t) const
+{
+ t->tabOrderInForm(tabOrderWidgets);
+}
+
+void TransactionForm::removeEditWidgets(QMap<QString, QWidget*>& editWidgets)
+{
+ QMap<QString, QWidget*>::iterator it;
+ for(it = editWidgets.begin(); it != editWidgets.end(); ) {
+ if((*it)->parentWidget() == this) {
+ editWidgets.remove(it);
+ it = editWidgets.begin();
+ } else
+ ++it;
+ }
+
+ for(int row = 0; row < numRows(); ++row) {
+ for(int col = 0; col < numCols(); ++col) {
+ if(cellWidget(row, col))
+ clearCellWidget(row, col);
+ }
+ }
+ resize(ValueColumn1);
+
+ // delete all remaining edit widgets (e.g. tabbar)
+ for(it = editWidgets.begin(); it != editWidgets.end(); ) {
+ delete (*it); // ->deleteLater();
+ editWidgets.remove(it);
+ it = editWidgets.begin();
+ }
+}
+
+#include "transactionform.moc"
diff --git a/kmymoney2/widgets/transactionform.h b/kmymoney2/widgets/transactionform.h
new file mode 100644
index 0000000..13116da
--- /dev/null
+++ b/kmymoney2/widgets/transactionform.h
@@ -0,0 +1,223 @@
+/***************************************************************************
+ transactionform.h
+ ----------
+ begin : Sun May 14 2006
+ copyright : (C) 2006 by Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef TRANSACTIONFORM_H
+#define TRANSACTIONFORM_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qtable.h>
+#include <qvaluelist.h>
+#include <qvaluevector.h>
+#include <qpalette.h>
+#include <qwidgetlist.h>
+#include <qtabbar.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneyobject.h>
+#include <kmymoney/register.h>
+
+#include "../kmymoneysettings.h"
+
+class MyMoneyObjectContainer;
+
+namespace KMyMoneyTransactionForm {
+
+/**
+ * @author Thomas Baumgart
+ */
+class TabBar : public QTabBar
+{
+ Q_OBJECT
+public:
+ typedef enum {
+ SignalNormal = 0, // standard signal behaviour
+ SignalNever, // don't signal selection of a tab at all
+ SignalAlways // always signal selection of a tab
+ } SignalEmissionE;
+
+ TabBar(QWidget* parent = 0, const char* name = 0);
+ virtual ~TabBar() {}
+
+ SignalEmissionE setSignalEmission(SignalEmissionE type);
+
+ void copyTabs(const TabBar* otabbar);
+
+ void addTab(QTab* tab, int id);
+
+ void setIdentifier(QTab* tab, int newId);
+
+ QTab* tab(int id) const;
+
+ int currentTab(void) const;
+
+public slots:
+ /**
+ * overridden for internal reasons, API not changed
+ */
+ virtual void setCurrentTab( int );
+
+ /**
+ * overridden for internal reasons, API not changed
+ */
+ virtual void setCurrentTab( QTab * );
+
+ /**
+ * overridden for internal reasons, API not changed
+ */
+ virtual void show(void);
+
+protected slots:
+ void slotTabSelected(int id);
+
+signals:
+ void tabSelected(int id);
+
+private:
+ SignalEmissionE m_signalType;
+
+ /**
+ * maps our internal action ids to those used by
+ * qt3. Since it does not seem possible to tell
+ * qt3 to use our ids everywhere (in QAccel) we
+ * need to know which is which
+ */
+ QMap<int, int> m_idMap;
+
+
+};
+
+typedef enum {
+ LabelColumn1 = 0,
+ ValueColumn1,
+ LabelColumn2,
+ ValueColumn2,
+ // insert new values above this line
+ MaxColumns
+} Column;
+
+/**
+ * @author Thomas Baumgart
+ */
+class TransactionForm : public TransactionEditorContainer
+{
+ Q_OBJECT
+public:
+ TransactionForm(QWidget *parent = 0, const char *name = 0);
+ virtual ~TransactionForm() {}
+
+ /**
+ * Override the QTable member function to avoid display of focus
+ */
+ void paintFocus(QPainter* /*p*/, const QRect& /*cr*/ ) {}
+
+ QSize tableSize(void) const;
+ QSize sizeHint(void) const;
+ void adjustColumn(Column col);
+ void clear(void);
+
+ void paintCell(QPainter* painter, int row, int col, const QRect& r, bool selected, const QColorGroup& cg);
+
+ void resize(int col);
+
+ void arrangeEditWidgets(QMap<QString, QWidget*>& editWidgets, KMyMoneyRegister::Transaction* t);
+ void removeEditWidgets(QMap<QString, QWidget*>& editWidgets);
+ void tabOrder(QWidgetList& tabOrderWidgets, KMyMoneyRegister::Transaction* t) const;
+
+ /**
+ * reimplemented to prevent normal cell selection behavior
+ */
+ void setCurrentCell(int, int) {}
+
+ TabBar* tabBar(QWidget* parent = 0);
+
+ void setupForm(const MyMoneyAccount& acc);
+
+ void enableTabBar(bool b);
+
+ protected:
+ /**
+ * reimplemented to support QWidget::WState_BlockUpdates
+ */
+ void drawContents(QPainter *p, int cx, int cy, int cw, int ch);
+
+ /**
+ * reimplemented to prevent normal mouse press behavior
+ */
+ void contentsMousePressEvent(QMouseEvent* ev) { ev->ignore(); }
+
+ /**
+ * reimplemented to prevent normal mouse move behavior
+ */
+ void contentsMouseMoveEvent(QMouseEvent* ev) { ev->ignore(); }
+
+ /**
+ * reimplemented to prevent normal mouse release behavior
+ */
+ void contentsMouseReleaseEvent(QMouseEvent* ev) { ev->ignore(); }
+
+ /**
+ * reimplemented to prevent normal mouse double click behavior
+ */
+ void contentsMouseDoubleClickEvent(QMouseEvent* ev) { ev->ignore(); }
+
+ /**
+ * reimplemented to prevent normal keyboard behavior
+ */
+ void keyPressEvent(QKeyEvent* ev) { ev->ignore(); }
+
+ /**
+ * Override logic and use standard QFrame behaviour
+ */
+ bool focusNextPrevChild(bool next);
+
+public slots:
+ void slotSetTransaction(KMyMoneyRegister::Transaction* item);
+
+protected slots:
+ void resize(void);
+
+ /**
+ * Helper method to convert @a int into @a KMyMoneyRegister::Action
+ */
+ void slotActionSelected(int);
+
+signals:
+ /**
+ * This signal is emitted when a user selects a tab. @a id
+ * contains the tab's id (e.g. KMyMoneyRegister::ActionDeposit)
+ */
+ void newTransaction(KMyMoneyRegister::Action id);
+
+protected:
+ KMyMoneyRegister::Transaction* m_transaction;
+ QColorGroup m_cellColorGroup;
+ TabBar* m_tabBar;
+};
+
+
+} // namespace
+
+#endif
+// vim:cin:si:ai:et:ts=2:sw=2:
diff --git a/kmymoney2/widgets/transactionsortoption.ui b/kmymoney2/widgets/transactionsortoption.ui
new file mode 100644
index 0000000..23de01b
--- /dev/null
+++ b/kmymoney2/widgets/transactionsortoption.ui
@@ -0,0 +1,287 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>TransactionSortOption</class>
+<author>Thomas Baumgart &lt;ipwizard@users.sourceforge.net&gt;</author>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>TransactionSortOption</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>486</width>
+ <height>228</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>TransactionSortOptionDecl</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KListView">
+ <column>
+ <property name="text">
+ <string>Sort options</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>m_availableList</cstring>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="resizeMode">
+ <enum>AllColumns</enum>
+ </property>
+ <property name="itemsMovable">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>67</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_addButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_removeButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>67</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KListView">
+ <column>
+ <property name="text">
+ <string>Sort order</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>m_selectedList</cstring>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="resizeMode">
+ <enum>AllColumns</enum>
+ </property>
+ <property name="itemsMovable">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>67</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_upButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_downButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>67</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </hbox>
+</widget>
+<connections>
+ <connection>
+ <sender>m_addButton</sender>
+ <signal>clicked()</signal>
+ <receiver>TransactionSortOption</receiver>
+ <slot>slotAddItem()</slot>
+ </connection>
+ <connection>
+ <sender>m_availableList</sender>
+ <signal>selectionChanged(QListViewItem*)</signal>
+ <receiver>TransactionSortOption</receiver>
+ <slot>slotAvailableSelected(QListViewItem*)</slot>
+ </connection>
+ <connection>
+ <sender>m_downButton</sender>
+ <signal>clicked()</signal>
+ <receiver>TransactionSortOption</receiver>
+ <slot>slotDownItem()</slot>
+ </connection>
+ <connection>
+ <sender>m_removeButton</sender>
+ <signal>clicked()</signal>
+ <receiver>TransactionSortOption</receiver>
+ <slot>slotRemoveItem()</slot>
+ </connection>
+ <connection>
+ <sender>m_selectedList</sender>
+ <signal>selectionChanged(QListViewItem*)</signal>
+ <receiver>TransactionSortOption</receiver>
+ <slot>slotSelectedSelected(QListViewItem*)</slot>
+ </connection>
+ <connection>
+ <sender>m_upButton</sender>
+ <signal>clicked()</signal>
+ <receiver>TransactionSortOption</receiver>
+ <slot>slotUpItem()</slot>
+ </connection>
+ <connection>
+ <sender>m_selectedList</sender>
+ <signal>doubleClicked(QListViewItem*)</signal>
+ <receiver>TransactionSortOption</receiver>
+ <slot>toggleDirection(QListViewItem*)</slot>
+ </connection>
+ <connection>
+ <sender>m_selectedList</sender>
+ <signal>spacePressed(QListViewItem*)</signal>
+ <receiver>TransactionSortOption</receiver>
+ <slot>toggleDirection(QListViewItem*)</slot>
+ </connection>
+</connections>
+<includes>
+ <include location="local" impldecl="in implementation">transactionsortoption.ui.h</include>
+</includes>
+<signals>
+ <signal>settingsChanged(const QString&amp;)</signal>
+</signals>
+<slots>
+ <slot>setSettings( const QString &amp; settings )</slot>
+ <slot>toggleDirection( QListViewItem * item )</slot>
+ <slot access="protected" specifier="non virtual">slotAvailableSelected( QListViewItem * item )</slot>
+ <slot access="protected" specifier="non virtual">slotSelectedSelected( QListViewItem * item )</slot>
+ <slot access="protected" specifier="non virtual">slotAddItem( void )</slot>
+ <slot access="protected" specifier="non virtual">slotRemoveItem( void )</slot>
+ <slot access="protected" specifier="non virtual">slotUpItem( void )</slot>
+ <slot access="protected" specifier="non virtual">slotDownItem( void )</slot>
+</slots>
+<functions>
+ <function specifier="non virtual">init()</function>
+ <function access="protected" specifier="non virtual" returnType="QListViewItem *">addEntry( KListView * p, QListViewItem * after, int idx )</function>
+ <function specifier="non virtual" returnType="QString">settings( void ) const</function>
+</functions>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/widgets/transactionsortoption.ui.h b/kmymoney2/widgets/transactionsortoption.ui.h
new file mode 100644
index 0000000..3784e0b
--- /dev/null
+++ b/kmymoney2/widgets/transactionsortoption.ui.h
@@ -0,0 +1,243 @@
+/****************************************************************************
+** ui.h extension file, included from the uic-generated form implementation.
+**
+** If you wish to add, delete or rename functions or slots use
+** Qt Designer which will update this file, preserving your code. Create an
+** init() function in place of a constructor, and a destroy() function in
+** place of a destructor.
+*****************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kiconloader.h>
+#include <klocale.h>
+#include <kpushbutton.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/register.h>
+#include "sortoptionlistitem.h"
+
+
+void TransactionSortOption::init()
+{
+ KIconLoader* il = KGlobal::iconLoader();
+ m_addButton->setIconSet(QIconSet(il->loadIcon("1rightarrow", KIcon::Small, KIcon::SizeSmall)));
+ m_removeButton->setIconSet(QIconSet(il->loadIcon("1leftarrow", KIcon::Small, KIcon::SizeSmall)));
+ m_upButton->setIconSet(QIconSet(il->loadIcon("1uparrow", KIcon::Small, KIcon::SizeSmall)));
+ m_downButton->setIconSet(QIconSet(il->loadIcon("1downarrow", KIcon::Small, KIcon::SizeSmall)));
+
+ // don't allow sorting of the selected entries
+ m_selectedList->setSortColumn(-1);
+
+ // defaults to "post date, value" sorting
+ // setSettings(QString("1,4"));
+ setSettings(QString());
+
+ QListViewItem* p;
+ if((p = m_availableList->firstChild()) != 0) {
+ m_availableList->setSelected(p, true);
+ }
+}
+
+/**
+ * Setup the two lists according to the elements found in @a list.
+ * If an item is negative, it will show up in the available list,
+ * if positive, it shows up in the selected list.
+ *
+ * Special care is taken about the two values @a EntryDateSort and
+ * @a EntryOrderSort. These two entries cannot (should not) exist
+ * alone. Inside this widget, only the @a EntryOrderSort is used.
+ *
+ * setSettings() takes care of hiding the @a EntryDateSort item and if
+ * it exists in @p settings without @a EntryOrderSort being present, it
+ * will add @a EntryOrderSort.
+ */
+void TransactionSortOption::setSettings(const QString& settings)
+{
+ m_availableList->clear();
+ m_selectedList->clear();
+
+ QStringList list = QStringList::split(',', settings);
+ QMap<int, bool> selectedMap;
+
+ // fill selected list
+ QStringList::const_iterator it_s;
+ QListViewItem* last = 0;
+ int dateSign = 1;
+ for(it_s = list.begin(); it_s != list.end(); ++it_s) {
+ int val = (*it_s).toInt();
+ selectedMap[abs(val)] = true;
+ // skip EntryDateSort but keep sign
+ if(abs(val) == static_cast<int>(KMyMoneyRegister::EntryDateSort)) {
+ dateSign = (val < 0) ? -1 : 1;
+ continue;
+ }
+ last = addEntry(m_selectedList, last, val);
+ }
+
+ // make sure to create EntryOrderSort if missing but required
+ if(selectedMap.find(static_cast<int>(KMyMoneyRegister::EntryDateSort)) != selectedMap.end()
+ && selectedMap.find(static_cast<int>(KMyMoneyRegister::EntryOrderSort)) == selectedMap.end()) {
+ int val = dateSign * static_cast<int>(KMyMoneyRegister::EntryOrderSort);
+ selectedMap[static_cast<int>(KMyMoneyRegister::EntryOrderSort)] = true;
+ last = addEntry(m_selectedList, last, val);
+ }
+
+ // fill available list
+ QMap<int, bool>::const_iterator it_m;
+ for(int i = static_cast<int>(KMyMoneyRegister::PostDateSort);
+ i < static_cast<int>(KMyMoneyRegister::MaxSortFields); ++i) {
+ // Never add EntryDateSort
+ if(i == static_cast<int>(KMyMoneyRegister::EntryDateSort))
+ continue;
+ // Only add those, that are not present in the list of selected items
+ if(selectedMap.find(i) == selectedMap.end()) {
+ int val = i;
+ if(i == static_cast<int>(KMyMoneyRegister::ValueSort))
+ val = -val;
+ addEntry(m_availableList, 0, val);
+ }
+ }
+}
+
+QListViewItem* TransactionSortOption::addEntry( KListView * p, QListViewItem* after, int idx )
+{
+ QString txt = KMyMoneyRegister::sortOrderToText(static_cast<KMyMoneyRegister::TransactionSortField>(abs(idx)));
+ if(txt.isEmpty())
+ txt = "Unknown"; // i18n should be handled in sortOptionToText()
+
+ return new SortOptionListItem(p, after, txt, idx);
+}
+
+void TransactionSortOption::toggleDirection(QListViewItem* item)
+{
+ SortOptionListItem* p = dynamic_cast<SortOptionListItem*>(item);
+ if(p) {
+ p->toggleDirection();
+ emit settingsChanged(settings());
+ }
+}
+
+QString TransactionSortOption::settings( void ) const
+{
+ QString rc;
+ SortOptionListItem* item = dynamic_cast<SortOptionListItem*>(m_selectedList->firstChild());
+ while(item) {
+ int option = KMyMoneyRegister::textToSortOrder(item->text(0));
+ // if we look at the EntryOrderSort option, we have to make
+ // sure, that the EntryDateSort is prepended
+ if(option == KMyMoneyRegister::EntryOrderSort) {
+ rc += QString::number(static_cast<int>(KMyMoneyRegister::EntryDateSort)*item->direction())+",";
+ }
+ rc += QString::number(KMyMoneyRegister::textToSortOrder(item->text(0))*item->direction());
+ item = dynamic_cast<SortOptionListItem*>(item->itemBelow());
+ if(item != 0)
+ rc += ",";
+ }
+ return rc;
+}
+
+void TransactionSortOption::slotAvailableSelected( QListViewItem * item )
+{
+ m_addButton->setEnabled(item != 0);
+ m_removeButton->setDisabled(true);
+ m_upButton->setDisabled(true);
+ m_downButton->setDisabled(true);
+
+ QListViewItem* p = m_selectedList->currentItem();
+ if(p) {
+ m_selectedList->setSelected(p, false);
+ }
+}
+
+void TransactionSortOption::slotSelectedSelected( QListViewItem * item )
+{
+ m_addButton->setDisabled(true);
+ m_removeButton->setEnabled(item != 0);
+ if(item) {
+ m_upButton->setEnabled(item->itemAbove() != 0);
+ m_downButton->setEnabled(item->itemBelow() != 0);
+ } else {
+ m_upButton->setEnabled(false);
+ m_downButton->setEnabled(false);
+ }
+
+ QListViewItem* p = m_availableList->currentItem();
+ if(p) {
+ m_availableList->setSelected(p, false);
+ }
+}
+
+void TransactionSortOption::slotAddItem( void )
+{
+ QListViewItem* item;
+ if((item = m_availableList->currentItem()) != 0) {
+ QListViewItem* next = item->itemBelow();
+ if(!next)
+ next = item->itemAbove();
+ m_availableList->takeItem(item);
+ m_selectedList->insertItem(item);
+ m_addButton->setEnabled(m_availableList->firstChild() != 0);
+ if(next) {
+ m_availableList->setCurrentItem(next);
+ m_availableList->setSelected(next, true);
+ }
+ emit settingsChanged(settings());
+ }
+}
+
+void TransactionSortOption::slotRemoveItem( void )
+{
+ QListViewItem* item;
+ if((item = m_selectedList->currentItem()) != 0) {
+ QListViewItem* next = item->itemBelow();
+ if(!next)
+ next = item->itemAbove();
+ m_selectedList->takeItem(item);
+ m_availableList->insertItem(item);
+ m_removeButton->setEnabled(m_selectedList->firstChild() != 0);
+ if(next) {
+ m_selectedList->setCurrentItem(next);
+ m_selectedList->setSelected(next, true);
+ }
+ emit settingsChanged(settings());
+ }
+}
+
+void TransactionSortOption::slotUpItem( void )
+{
+ QListViewItem* item;
+ if((item = m_selectedList->currentItem()) != 0) {
+ QListViewItem* prev = item->itemAbove();
+ if(prev) {
+ prev->moveItem(item);
+ m_selectedList->setCurrentItem(item);
+ m_selectedList->setSelected(item, true);
+ m_upButton->setEnabled(item->itemAbove() != 0);
+ m_downButton->setEnabled(item->itemBelow() != 0);
+ emit settingsChanged(settings());
+ }
+ }
+}
+
+void TransactionSortOption::slotDownItem( void )
+{
+ QListViewItem* item;
+ if((item = m_selectedList->currentItem()) != 0) {
+ QListViewItem* next = item->itemBelow();
+ if(next) {
+ item->moveItem(next);
+ m_selectedList->setCurrentItem(item);
+ m_selectedList->setSelected(item, true);
+ m_upButton->setEnabled(item->itemAbove() != 0);
+ m_downButton->setEnabled(item->itemBelow() != 0);
+ emit settingsChanged(settings());
+ }
+ }
+}
diff --git a/kmymoney2/wizards/Makefile.am b/kmymoney2/wizards/Makefile.am
new file mode 100644
index 0000000..96afbe6
--- /dev/null
+++ b/kmymoney2/wizards/Makefile.am
@@ -0,0 +1,5 @@
+KDE_OPTIONS = noautodist
+
+INCLUDES = $(all_includes) -I$(top_srcdir) -I.
+
+SUBDIRS = wizardpages newuserwizard newaccountwizard
diff --git a/kmymoney2/wizards/newaccountwizard/Makefile.am b/kmymoney2/wizards/newaccountwizard/Makefile.am
new file mode 100644
index 0000000..42afe78
--- /dev/null
+++ b/kmymoney2/wizards/newaccountwizard/Makefile.am
@@ -0,0 +1,20 @@
+noinst_LIBRARIES = libnewaccountwizard.a
+KDE_OPTIONS = noautodist
+
+INCLUDES = $(all_includes) -I../wizardpages -I.. -I$(top_srcdir) -I.
+
+libnewaccountwizard_a_METASOURCES = AUTO
+
+UI_FILES =
+
+libnewaccountwizard_a_SOURCES = knewaccountwizard.cpp kinstitutionpagedecl.ui kaccounttypepagedecl.ui kbrokeragepagedecl.ui kschedulepagedecl.ui kgeneralloaninfopagedecl.ui kloandetailspagedecl.ui kloanpaymentpagedecl.ui kloanschedulepagedecl.ui kloanpayoutpagedecl.ui khierarchypagedecl.ui kaccountsummarypagedecl.ui
+
+EXTRA_DIST = kinstitutionpagedecl.ui kaccounttypepagedecl.ui kbrokeragepagedecl.ui kschedulepagedecl.ui kgeneralloaninfopagedecl.ui kloandetailspagedecl.ui kloanpaymentpagedecl.ui kloanschedulepagedecl.ui kloanpayoutpagedecl.ui khierarchypagedecl.ui kaccountsummarypagedecl.ui
+
+DISTCLEANFILES= kinstitutionpagedecl.cpp kinstitutionpagedecl.h kaccounttypepagedecl.cpp kaccounttypepagedecl.h kbrokeragepagedecl.cpp kbrokeragepagedecl.h kschedulepagedecl.cpp kschedulepagedecl.h kgeneralloaninfopagedecl.cpp kgeneralloaninfopagedecl.h kloandetailspagedecl.cpp kloandetailspagedecl.h kloanpaymentpagedecl.cpp kloanpaymentpagedecl.h kloanschedulepagedecl.cpp kloanschedulepagedecl.h kloanpayoutpagedecl.cpp kloanpayoutpagedecl.h kaccountsummarypagedecl.cpp khierarchypagedecl.h kaccountsummarypagedecl.h
+
+noinst_HEADERS = knewaccountwizard.h knewaccountwizard_p.h
+
+SUBDIRS =
+
+messages: rc.cpp
diff --git a/kmymoney2/wizards/newaccountwizard/kaccountsummarypagedecl.ui b/kmymoney2/wizards/newaccountwizard/kaccountsummarypagedecl.ui
new file mode 100644
index 0000000..d68bc4b
--- /dev/null
+++ b/kmymoney2/wizards/newaccountwizard/kaccountsummarypagedecl.ui
@@ -0,0 +1,80 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KAccountSummaryPageDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KAccountSummaryPageDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>480</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel1</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>This page summarizes the data you have entered. Press &lt;b&gt;Finish&lt;/b&gt; to create the account, schedules, etc. or use &lt;b&gt;Back&lt;/b&gt; to modify your entries.</string>
+ </property>
+ </widget>
+ <widget class="KListView">
+ <column>
+ <property name="text">
+ <string>Item</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Value</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>m_dataList</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>2</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="hScrollBarMode">
+ <enum>AlwaysOff</enum>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="resizeMode">
+ <enum>LastColumn</enum>
+ </property>
+ <property name="fullWidth">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/wizards/newaccountwizard/kaccounttypepagedecl.ui b/kmymoney2/wizards/newaccountwizard/kaccounttypepagedecl.ui
new file mode 100644
index 0000000..bb6c5b7
--- /dev/null
+++ b/kmymoney2/wizards/newaccountwizard/kaccounttypepagedecl.ui
@@ -0,0 +1,289 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KAccountTypePageDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KAccountTypePageDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>555</width>
+ <height>404</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel4</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>Enter the name of the account under which it is known within KMyMoney.
+Select the type for the new account. Use the &lt;b&gt;What's this?&lt;/b&gt; feature to see more details about the various account types.
+Enter the date the account was opened and its currency.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout9</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KMyMoneySecuritySelector" row="2" column="1">
+ <property name="name">
+ <cstring>m_currencyComboBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Select the currency in which this account is denominated.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Currency</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Opening date</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="4" column="1">
+ <property name="name">
+ <cstring>m_openingBalance</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="focusPolicy">
+ <enum>StrongFocus</enum>
+ </property>
+ <property name="resetButtonVisibility" stdset="0">
+ <bool>false</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>The opening balance is the balance of the account when you start using it with KMyMoney. For new accounts this is usually 0 but for existing accounts this may well differ. Please consult the account statements to figure out this value. The opening balance is to be provided in the currency of the account as selected with the currency button.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>m_conversionLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Conversion rate</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyDateInput" row="3" column="1">
+ <property name="name">
+ <cstring>m_openingDate</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>StrongFocus</enum>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>The opening date would be the date of the last statement. In case you want to keep track of transactions prior to this date, enter the ending balance and statement date of a prior statement and add all following transactions into KMyMoney.
+&lt;br&gt;
+&lt;i&gt;Note&lt;/i&gt;: If you do not know the exact amount of the opening balance, enter an estimate. You can change this value later before you reconcile this account for the first time.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="6" column="1">
+ <property name="name">
+ <cstring>m_conversionExample</cstring>
+ </property>
+ <property name="text">
+ <string>xxx</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Account type</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="5" column="1">
+ <property name="name">
+ <cstring>m_conversionRate</cstring>
+ </property>
+ <property name="resetButtonVisibility" stdset="0">
+ <bool>false</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>For foreign currencies an initial conversion rate needs to be provided. This should be the price of the foreign currency in the base currency on the opening date of the account.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Account name</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>Opening balance</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyGeneralCombo" row="1" column="1">
+ <property name="name">
+ <cstring>m_typeSelection</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;p&gt;&lt;b&gt;Checking&lt;/b&gt;
+Use the checking account type to manage activities on your checking account e.g. payments, checks and cash card purchases.&lt;/p&gt;
+
+&lt;p&gt;&lt;b&gt;Savings&lt;/b&gt;
+Use the savings account type to manage activities on your savings account.&lt;/p&gt;
+
+&lt;p&gt;&lt;b&gt;Credit Card&lt;/b&gt;
+Use the credit card account type to manage activities on your credit card.&lt;/p&gt;
+
+&lt;p&gt;&lt;b&gt;Cash&lt;/b&gt;
+
+Use the cash account type to manage activities in your wallet.&lt;/p&gt;
+
+&lt;p&gt;&lt;b&gt;Loan&lt;/b&gt;
+Use the loan account type to manage amortization loans (e.g. mortgages, car loan, money you lend, private loans etc.).&lt;/p&gt;
+
+&lt;p&gt;&lt;b&gt;Investment&lt;/b&gt;
+Use the investment account to manage your stock, mutual fund and other investments.&lt;/p&gt;
+
+&lt;p&gt;&lt;b&gt;Asset&lt;/b&gt;
+Use the asset account type to manage assets (e.g. your house, car or art collection).&lt;/p&gt;
+
+&lt;p&gt;&lt;b&gt;Liability&lt;/b&gt;
+Use the liability account type to manage any type of liability except amortization loans. Use it for taxes you owe or money you borrowed from friends. For amortization loans like mortgages you should create a loan account.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="7" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>m_preferredAccount</cstring>
+ </property>
+ <property name="text">
+ <string>Preferred account</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Mark this checkbox if the account should be maintained as preferred account</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Selecting the &lt;b&gt;Preferred Account&lt;/b&gt; checkbox will allow preferred access in some dialogs and views of KMyMoney.</string>
+ </property>
+ </widget>
+ <spacer row="2" column="2" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>231</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>m_accountName</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Enter a name under which this account is known within KMyMoney.</string>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="5" column="2">
+ <property name="name">
+ <cstring>m_onlineQuote</cstring>
+ </property>
+ <property name="text">
+ <string>Online quote</string>
+ </property>
+ </widget>
+ <spacer row="5" column="3">
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>61</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer18</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/wizards/newaccountwizard/kbrokeragepagedecl.ui b/kmymoney2/wizards/newaccountwizard/kbrokeragepagedecl.ui
new file mode 100644
index 0000000..bc388a8
--- /dev/null
+++ b/kmymoney2/wizards/newaccountwizard/kbrokeragepagedecl.ui
@@ -0,0 +1,172 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KBrokeragePageDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KBrokeragePageDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>594</width>
+ <height>398</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel14</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>Does this investment account have a brokerage account?&lt;p&gt;
+
+&lt;b&gt;Check&lt;/b&gt; the mark if this investment account has an associated account for money that is not invested.&lt;br&gt;
+
+&lt;b&gt;Uncheck&lt;/b&gt; it if you don't use this account for active stock brokerage. You should also uncheck it if this account is not maintained by a bank or broker.</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_createBrokerageButton</cstring>
+ </property>
+ <property name="text">
+ <string>Create brokerage account</string>
+ </property>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>m_currencyFrame</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout8</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Currency</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyCurrencySelector" row="0" column="1">
+ <property name="name">
+ <cstring>m_brokerageCurrency</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>m_accountNumberLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Account number</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>m_accountNumber</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>m_ibanLabel</cstring>
+ </property>
+ <property name="text">
+ <string>IBAN</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>m_iban</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer20</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>30</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>m_createBrokerageButton</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>m_currencyFrame</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>m_createBrokerageButton</tabstop>
+ <tabstop>m_brokerageCurrency</tabstop>
+ <tabstop>m_accountNumber</tabstop>
+ <tabstop>m_iban</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/wizards/newaccountwizard/kgeneralloaninfopagedecl.ui b/kmymoney2/wizards/newaccountwizard/kgeneralloaninfopagedecl.ui
new file mode 100644
index 0000000..db13917
--- /dev/null
+++ b/kmymoney2/wizards/newaccountwizard/kgeneralloaninfopagedecl.ui
@@ -0,0 +1,358 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KGeneralLoanInfoPageDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KGeneralLoanInfoPageDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>675</width>
+ <height>494</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel1</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>Please select the required options. Please use the &lt;b&gt;What's this?&lt;/b&gt; feature to see more information about the items.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout14</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout13</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>What is the type of the loan?</string>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="0" column="1">
+ <item>
+ <property name="text">
+ <string>I am borrowing money</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>I am lending money</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_loanDirection</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Who is the payee/payer of the loan?</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyPayeeCombo" row="1" column="1">
+ <property name="name">
+ <cstring>m_payee</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Enter the name of the person or bank you owe money or who owes you money.
+
+If the name does not exist within KMyMoney's database, you are asked if you want to create it.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>Did you make/receive any payments yet?</string>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="2" column="1">
+ <item>
+ <property name="text">
+ <string>No</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Yes</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_anyPayments</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Were there any payments for this loan whether they are entered into KMyMoney or not?
+
+Note: Payments made to obtain the loan (e.g. Disagio) are not considered as payments in this context.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Which payments do you want to record?</string>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="3" column="1">
+ <item>
+ <property name="text">
+ <string>All payments</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Start with this year's payments</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_recordings</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;Select which transactions should be recorded.
+
+&lt;b&gt;All payments&lt;/b&gt; allows you to enter all payments made for this loan.
+
+The option to &lt;b&gt;start from the beginning of the current year&lt;/b&gt; is meant for loans that are active for a longer period of time already and you don't want to enter all transactions of the past.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>textLabel1_3</cstring>
+ </property>
+ <property name="text">
+ <string>Balance before start of recording</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Enter the ending balance found on the statement that is the last one before you want to start recording this loan in KMyMoney.</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="4" column="1">
+ <property name="name">
+ <cstring>m_openingBalance</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>You have selected to record only payments from the beginning of this year. Since prior transactions will not be recorded, you need to supply the balance of the loan on January 1st of this year.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>textLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>Payment frequency</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyFrequencyCombo" row="5" column="1">
+ <property name="name">
+ <cstring>m_paymentFrequency</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>TabFocus</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="6" column="0">
+ <property name="name">
+ <cstring>textLabel1_4</cstring>
+ </property>
+ <property name="text">
+ <string>Interest Compounding frequency</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyFrequencyCombo" row="6" column="1">
+ <property name="name">
+ <cstring>m_compoundFrequency</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Select the frequency with which the interest is compounded. If uncertain, select the same as the payment frequency. Consult your loan contract for details.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="7" column="0">
+ <property name="name">
+ <cstring>textLabel2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Due date of first payment to be recorded</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyDateInput" row="7" column="1">
+ <property name="name">
+ <cstring>m_firstPaymentDate</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>StrongFocus</enum>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Depending on the answer to &lt;b&gt;What do you want to record?&lt;/b&gt; this field means the following:&lt;p&gt;
+
+&lt;b&gt;All payments&lt;/b&gt;&lt;br&gt;
+Enter the due date of the very first payment&lt;p&gt;
+
+&lt;b&gt;Start with this year's payments&lt;/b&gt;&lt;br&gt;
+Enter the due date of the first payment in the current year</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="8" column="0">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Type of interest rate</string>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="8" column="1">
+ <item>
+ <property name="text">
+ <string>Fixed</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Variable</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_interestType</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="9" column="0">
+ <property name="name">
+ <cstring>textLabel3_2</cstring>
+ </property>
+ <property name="text">
+ <string>Time between interest changes</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="9" column="1">
+ <property name="name">
+ <cstring>layout48</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KIntSpinBox">
+ <property name="name">
+ <cstring>m_interestFrequencyAmountEdit</cstring>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="KComboBox">
+ <item>
+ <property name="text">
+ <string>Days</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Weeks</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Months</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Years</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_interestFrequencyUnitEdit</cstring>
+ </property>
+ <property name="currentItem">
+ <number>3</number>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="10" column="0">
+ <property name="name">
+ <cstring>textLabel4_2</cstring>
+ </property>
+ <property name="text">
+ <string>Next interest change is due</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyDateInput" row="10" column="1">
+ <property name="name">
+ <cstring>m_interestChangeDateEdit</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>StrongFocus</enum>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>29</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/wizards/newaccountwizard/khierarchypagedecl.ui b/kmymoney2/wizards/newaccountwizard/khierarchypagedecl.ui
new file mode 100644
index 0000000..00602e4
--- /dev/null
+++ b/kmymoney2/wizards/newaccountwizard/khierarchypagedecl.ui
@@ -0,0 +1,82 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KHierarchyPageDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KHierarchyPageDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>674</width>
+ <height>419</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>This page allows you to select the parent account.</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_subAccountLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Subaccount of</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyAccountTreeBase">
+ <header location="global">kmymoney/kmymoneyaccounttreebase.h</header>
+ <property name="name">
+ <cstring>m_qlistviewParentAccounts</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer18</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Preferred</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>30</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/wizards/newaccountwizard/kinstitutionpagedecl.ui b/kmymoney2/wizards/newaccountwizard/kinstitutionpagedecl.ui
new file mode 100644
index 0000000..ee38d48
--- /dev/null
+++ b/kmymoney2/wizards/newaccountwizard/kinstitutionpagedecl.ui
@@ -0,0 +1,156 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KInstitutionPageDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KInstitutionPageDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>586</width>
+ <height>322</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel1</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>If this account is managed by an institution please select the institution from the list. If the institution does not exist yet, please choose the &lt;b&gt;New Institution&lt;/b&gt; button to create it. Otherwise, leave this field empty.
+Enter the account number used by the institution to identify the account.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout19</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout18</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Institution</string>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="0" column="1">
+ <property name="name">
+ <cstring>m_institutionComboBox</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Select the institution which manages this account or leave empty</string>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="0" column="2">
+ <property name="name">
+ <cstring>m_newInstitutionButton</cstring>
+ </property>
+ <property name="text">
+ <string>New Institution</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>Account number</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>m_accountNumber</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Accounts managed by an institution are usually referenced by a unique number the so called account number. Enter that number here.
+
+KMyMoney currently uses this number only for some online banking functions.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>IBAN</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="2" column="1" colspan="2">
+ <property name="name">
+ <cstring>m_iban</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Enter the International Bank Account Number into this field</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>You can enter the IBAN (International Bank Account Number) into this field if you know it. Usually, people at your institution can tell you the number or it is printed on your statements.
+
+See also http://en.wikipedia.org/wiki/International_Bank_Account_Number for more information.
+
+KMyMoney keeps this field only for documentation purposes and does not use it otherwise.</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer16</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>132</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer17</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/wizards/newaccountwizard/kloandetailspagedecl.ui b/kmymoney2/wizards/newaccountwizard/kloandetailspagedecl.ui
new file mode 100644
index 0000000..eebb158
--- /dev/null
+++ b/kmymoney2/wizards/newaccountwizard/kloandetailspagedecl.ui
@@ -0,0 +1,288 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KLoanDetailsPageDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KLoanDetailsPageDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>592</width>
+ <height>434</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel2</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>Now enter the details for your loan. You can leave one of the fields empty and KMyMoney will calculate it when you press the &lt;b&gt;Calculate&lt;/b&gt; button. Before you can continue with the next page you also need to press &lt;b&gt;Calculate&lt;/b&gt; so that KMyMoney can check the logical correctness of the values you have supplied.</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer89</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>70</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout10</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout9</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel7</cstring>
+ </property>
+ <property name="text">
+ <string>The interest rate gets calculated</string>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="0" column="1" rowspan="1" colspan="3">
+ <item>
+ <property name="text">
+ <string>when the payment is received</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>when the payment is due</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>m_paymentDue</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel8</cstring>
+ </property>
+ <property name="text">
+ <string>Loan amount</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="1" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>m_loanAmount</cstring>
+ </property>
+ <property name="resetButtonVisibility" stdset="0">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Enter the amount of the loan in this field. If you want to calculate this field out of the other parameters, please leave it empty. If the field is marked as required (colored background) you have informed KMyMoney about the fact that there were already some payments towards the loan. In this case, please enter the ending balance of your last statement.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel9</cstring>
+ </property>
+ <property name="text">
+ <string>Interest rate</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="2" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>m_interestRate</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Please enter the interest rate in percent or leave the field empty to calculate it.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel10</cstring>
+ </property>
+ <property name="text">
+ <string>Term</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="3" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>layout8</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KIntSpinBox">
+ <property name="name">
+ <cstring>m_termAmount</cstring>
+ </property>
+ <property name="maxValue">
+ <number>999</number>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Please enter the term of this loan or enter 0 to calculate it. The term is the time that is required to fully repay the loan. This time might be different from the time your loan contract is signed for.</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyFrequencyCombo">
+ <property name="name">
+ <cstring>m_termUnit</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>textLabel11</cstring>
+ </property>
+ <property name="text">
+ <string>Payment (principal and interest)</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="4" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>m_paymentAmount</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Please enter the amount you pay for principal and interest or leave the field empty to calculate it.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>textLabel12</cstring>
+ </property>
+ <property name="text">
+ <string>Balloon payment</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="5" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>m_balloonAmount</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Please enter the amount of a final amortization payment or leave the field empty to calculate it.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="6" column="1">
+ <property name="name">
+ <cstring>layout53</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer86</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>71</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_calculateButton</cstring>
+ </property>
+ <property name="text">
+ <string>Calculate</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Press this button to calculate/verify your loan details.</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Pressing this button calculates a possibly missing parameter for your loan or verifies that the values entered match. If something is not correct you will receive information about it.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer row="6" column="2">
+ <property name="name">
+ <cstring>spacer88_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer87</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>27</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer88</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/wizards/newaccountwizard/kloanpaymentpagedecl.ui b/kmymoney2/wizards/newaccountwizard/kloanpaymentpagedecl.ui
new file mode 100644
index 0000000..51ac286
--- /dev/null
+++ b/kmymoney2/wizards/newaccountwizard/kloanpaymentpagedecl.ui
@@ -0,0 +1,184 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KLoanPaymentPageDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KLoanPaymentPageDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>525</width>
+ <height>373</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel1</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>Now enter the information required for the periodic loan payments. If your regular payments contains any additional fees, click on the &lt;b&gt;Additional fees&lt;/b&gt; button to enter them.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer10</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>63</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Principal + Interest</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="2">
+ <property name="name">
+ <cstring>m_basePayment</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>xxx</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>+</string>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="1" column="1">
+ <property name="name">
+ <cstring>m_additionalFeesButton</cstring>
+ </property>
+ <property name="text">
+ <string>Additional fees</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="2">
+ <property name="name">
+ <cstring>m_additionalFees</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>xxx</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>textLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>= periodical payments</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="2">
+ <property name="name">
+ <cstring>m_totalPayment</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>xxx</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer15</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>62</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer12</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/wizards/newaccountwizard/kloanpayoutpagedecl.ui b/kmymoney2/wizards/newaccountwizard/kloanpayoutpagedecl.ui
new file mode 100644
index 0000000..1270efe
--- /dev/null
+++ b/kmymoney2/wizards/newaccountwizard/kloanpayoutpagedecl.ui
@@ -0,0 +1,198 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KLoanPayoutPageDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KLoanPayoutPageDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>384</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel1</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>If this loan is for an asset, such as a car or a house, you can create the asset account now. An asset account represents the total value of an asset. The money from this loan will be transfered into the asset account you create or select.
+If this loan is a 'consumer loan' (money to use however you want), you can use a checking account instead.</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_noPayoutTransaction</cstring>
+ </property>
+ <property name="text">
+ <string>Don't create payout transaction</string>
+ </property>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>m_payoutDetailFrame</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QCheckBox" row="0" column="0" rowspan="1" colspan="4">
+ <property name="name">
+ <cstring>m_refinanceLoan</cstring>
+ </property>
+ <property name="text">
+ <string>Refinance existing loan</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Check this if you are refinancing a loan that already exists in KMyMoney</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Asset Account</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyCategory" row="1" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>m_assetAccount</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="1" column="3">
+ <property name="name">
+ <cstring>m_createAssetButton</cstring>
+ </property>
+ <property name="text">
+ <string>Create</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>Loan account</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyCategory" row="2" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>m_loanAccount</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Date of payment</string>
+ </property>
+ </widget>
+ <spacer row="3" column="1">
+ <property name="name">
+ <cstring>spacer88</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="kMyMoneyDateInput" row="3" column="2">
+ <property name="name">
+ <cstring>m_payoutDate</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer89</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>m_noPayoutTransaction</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>m_payoutDetailFrame</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>m_refinanceLoan</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>m_assetAccount</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>m_refinanceLoan</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>m_loanAccount</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>m_refinanceLoan</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>m_createAssetButton</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/wizards/newaccountwizard/kloanschedulepagedecl.ui b/kmymoney2/wizards/newaccountwizard/kloanschedulepagedecl.ui
new file mode 100644
index 0000000..bead410
--- /dev/null
+++ b/kmymoney2/wizards/newaccountwizard/kloanschedulepagedecl.ui
@@ -0,0 +1,160 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KLoanSchedulePageDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KLoanSchedulePageDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>545</width>
+ <height>370</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel2</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>KMyMoney creates a schedule for this payment and reminds you whenever a payment must be made. Please select the account to/from which payments will be made and the category the interest will be assigned to.&lt;p&gt;
+If you selected to record all payments this date has already been supplied. If you selected to record only this years payments, then the &lt;b&gt;First payment due date&lt;/b&gt; is the date of the first payment made in this year.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout54</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout53</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel7</cstring>
+ </property>
+ <property name="text">
+ <string>Interest category</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyCategory" row="0" column="1">
+ <property name="name">
+ <cstring>m_interestCategory</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>The category the interest part of the payment will be assigned to. If you borrow money you usually have to pay interest, so this should be an expense category. If you lend the money, you receive the interest. In this case, select an income category here.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel8</cstring>
+ </property>
+ <property name="text">
+ <string>Payment account</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyCategory" row="1" column="1">
+ <property name="name">
+ <cstring>m_paymentAccount</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Select the account from which you make your periodical payments or where you receive regular payments in case you lend the money. In most cases, this is a checking account.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>First payment due on</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="2" column="1">
+ <property name="name">
+ <cstring>layout52</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer89</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>61</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="kMyMoneyDateInput">
+ <property name="name">
+ <cstring>m_firstPaymentDueDate</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Preferred</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>41</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer88</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/wizards/newaccountwizard/knewaccountwizard.cpp b/kmymoney2/wizards/newaccountwizard/knewaccountwizard.cpp
new file mode 100644
index 0000000..1bfae86
--- /dev/null
+++ b/kmymoney2/wizards/newaccountwizard/knewaccountwizard.cpp
@@ -0,0 +1,1691 @@
+/***************************************************************************
+ knewaccountwizard.cpp
+ -------------------
+ begin : Tue Sep 25 2006
+ copyright : (C) 2007 Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include <locale.h>
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qcheckbox.h>
+#include <qfocusdata.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+#include <qlabel.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <klistbox.h>
+#include <klineedit.h>
+#include <kmessagebox.h>
+#include <knuminput.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/kmymoneycombo.h>
+#include <kmymoney/kmymoneyedit.h>
+#include <kmymoney/kmymoneycategory.h>
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/kmymoneycurrencyselector.h>
+#include <kmymoney/kmymoneyaccountselector.h>
+#include <kmymoney/kmymoneyaccounttree.h>
+#include <kmymoney/mymoneyfinancialcalculator.h>
+#include <kmymoney/kmymoneychecklistitem.h>
+#include <kmymoney/kmymoneylistviewitem.h>
+#include <kmymoney/kcurrencycalculator.h>
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/kmymoneyglobalsettings.h>
+
+#include "knewaccountwizard.h"
+#include "knewaccountwizard_p.h"
+#include <kmymoney/kguiutils.h>
+
+#include "../../dialogs/ksplittransactiondlg.h"
+#include "../../dialogs/kequitypriceupdatedlg.h"
+#include "../../kmymoney2.h"
+
+using namespace NewAccountWizard;
+
+namespace NewAccountWizard {
+ enum steps {
+ StepInstitution = 1,
+ StepAccount,
+ StepBroker,
+ StepDetails,
+ StepPayments,
+ StepFees,
+ StepSchedule,
+ StepPayout,
+ StepParentAccount,
+ StepFinish
+ };
+};
+NewAccountWizard::Wizard::Wizard(QWidget *parent, const char *name, bool modal, WFlags flags)
+ : KMyMoneyWizard(parent, name, modal, flags)
+{
+ setTitle(i18n("KMyMoney New Account Setup"));
+ addStep(i18n("Institution"));
+ addStep(i18n("Account"));
+ addStep(i18n("Broker"));
+ addStep(i18n("Details"));
+ addStep(i18n("Payments"));
+ addStep(i18n("Fees"));
+ addStep(i18n("Schedule"));
+ addStep(i18n("Payout"));
+ addStep(i18n("Parent Account"));
+ addStep(i18n("Finish"));
+ setStepHidden(StepBroker);
+ setStepHidden(StepSchedule);
+ setStepHidden(StepPayout);
+ setStepHidden(StepDetails);
+ setStepHidden(StepPayments);
+ setStepHidden(StepFees);
+
+ m_institutionPage = new InstitutionPage(this);
+ m_accountTypePage = new AccountTypePage(this);
+ // Investment Pages
+ m_brokeragepage = new BrokeragePage(this);
+ // Credit Card Pages
+ m_schedulePage = new CreditCardSchedulePage(this);
+ // Loan Pages
+ m_generalLoanInfoPage = new GeneralLoanInfoPage(this);
+ m_loanDetailsPage = new LoanDetailsPage(this);
+ m_loanPaymentPage = new LoanPaymentPage(this);
+ m_loanSchedulePage = new LoanSchedulePage(this);
+ m_loanPayoutPage = new LoanPayoutPage(this);
+ // Not a loan page
+ m_hierarchyPage = new HierarchyPage(this);
+ // Finish
+ m_accountSummaryPage = new AccountSummaryPage(this);
+
+ setFirstPage(m_institutionPage);
+}
+
+void NewAccountWizard::Wizard::setAccount(const MyMoneyAccount& acc)
+{
+ m_account = acc;
+ m_accountTypePage->setAccount(m_account);
+}
+
+const MyMoneySecurity& NewAccountWizard::Wizard::currency(void) const
+{
+ return m_accountTypePage->currency();
+}
+
+MyMoneyMoney NewAccountWizard::Wizard::interestRate(void) const
+{
+ return m_loanDetailsPage->m_interestRate->value() / MyMoneyMoney(100,1);
+}
+
+int NewAccountWizard::Wizard::precision(void) const
+{
+ return MyMoneyMoney::denomToPrec(currency().smallestAccountFraction());
+}
+
+const MyMoneyAccount& NewAccountWizard::Wizard::account(void)
+{
+ m_account = MyMoneyAccountLoan();
+ m_account.setName(m_accountTypePage->m_accountName->text());
+ m_account.setOpeningDate(m_accountTypePage->m_openingDate->date());
+ m_account.setAccountType(m_accountTypePage->accountType());
+ m_account.setInstitutionId(m_institutionPage->institution().id());
+ m_account.setNumber(m_institutionPage->m_accountNumber->text());
+ m_account.setValue("IBAN", m_institutionPage->m_iban->text());
+ if(m_accountTypePage->m_preferredAccount->isChecked())
+ m_account.setValue("PreferredAccount", "Yes");
+ else
+ m_account.deletePair("PreferredAccount");
+
+ m_account.setCurrencyId(currency().id());
+ if(m_account.isLoan()) {
+ // in case we lend the money we adjust the account type
+ if(!moneyBorrowed())
+ m_account.setAccountType(MyMoneyAccount::AssetLoan);
+ m_account.setLoanAmount(m_loanDetailsPage->m_loanAmount->value());
+ m_account.setInterestRate(m_account.openingDate(), m_loanDetailsPage->m_interestRate->value());
+ m_account.setInterestCalculation(m_loanDetailsPage->m_paymentDue->currentItem() == 0 ? MyMoneyAccountLoan::paymentReceived : MyMoneyAccountLoan::paymentDue);
+ m_account.setFixedInterestRate(m_generalLoanInfoPage->m_interestType->currentItem() == 0);
+ m_account.setFinalPayment(m_loanDetailsPage->m_balloonAmount->value());
+ m_account.setTerm(m_loanDetailsPage->term());
+ m_account.setPeriodicPayment(m_loanDetailsPage->m_paymentAmount->value());
+ m_account.setPayee(m_generalLoanInfoPage->m_payee->selectedItem());
+ m_account.setInterestCompounding(m_generalLoanInfoPage->m_compoundFrequency->currentItem());
+
+ if(!m_account.fixedInterestRate()) {
+ m_account.setNextInterestChange(m_generalLoanInfoPage->m_interestChangeDateEdit->date());
+ m_account.setInterestChangeFrequency(m_generalLoanInfoPage->m_interestFrequencyAmountEdit->value(), m_generalLoanInfoPage->m_interestFrequencyUnitEdit->currentItem());
+ }
+ }
+ return m_account;
+}
+
+MyMoneyTransaction NewAccountWizard::Wizard::payoutTransaction(void)
+{
+ MyMoneyTransaction t;
+ if(m_account.isLoan() // we're creating a loan
+ && openingBalance().isZero() // and don't have an opening balance
+ && !m_loanPayoutPage->m_noPayoutTransaction->isChecked()) { // and the user wants to have a payout transaction
+ t.setPostDate(m_loanPayoutPage->m_payoutDate->date());
+ t.setCommodity(m_account.currencyId());
+ MyMoneySplit s;
+ s.setAccountId(m_account.id());
+ s.setShares(m_loanDetailsPage->m_loanAmount->value());
+ if(moneyBorrowed())
+ s.setShares(-s.shares());
+ s.setValue(s.shares());
+ t.addSplit(s);
+
+ s.clearId();
+ s.setValue(-s.value());
+ s.setAccountId(m_loanPayoutPage->payoutAccountId());
+ MyMoneyMoney shares;
+ KCurrencyCalculator::setupSplitPrice(shares, t, s, QMap<QString, MyMoneyMoney>(), this);
+ s.setShares(shares);
+ t.addSplit(s);
+ }
+ return t;
+}
+
+const MyMoneyAccount& NewAccountWizard::Wizard::parentAccount(void)
+{
+ return m_accountTypePage->allowsParentAccount()
+ ? m_hierarchyPage->parentAccount()
+ : ( m_accountTypePage->accountType() == MyMoneyAccount::Loan
+ ? m_generalLoanInfoPage->parentAccount()
+ : m_accountTypePage->parentAccount() );
+}
+
+MyMoneyAccount NewAccountWizard::Wizard::brokerageAccount(void) const
+{
+ MyMoneyAccount account;
+ if(m_account.accountType() == MyMoneyAccount::Investment
+ && m_brokeragepage->m_createBrokerageButton->isChecked()) {
+ account.setName(m_account.brokerageName());
+ account.setAccountType(MyMoneyAccount::Checkings);
+ account.setInstitutionId(m_account.institutionId());
+ account.setOpeningDate(m_account.openingDate());
+ account.setCurrencyId(m_brokeragepage->m_brokerageCurrency->security().id());
+ if(m_brokeragepage->m_accountNumber->isEnabled() && !m_brokeragepage->m_accountNumber->text().isEmpty())
+ account.setNumber(m_brokeragepage->m_accountNumber->text());
+ if(m_brokeragepage->m_iban->isEnabled() && !m_brokeragepage->m_iban->text().isEmpty())
+ account.setValue("IBAN", m_brokeragepage->m_iban->text());
+ }
+ return account;
+}
+
+const MyMoneySchedule& NewAccountWizard::Wizard::schedule(void)
+{
+ m_schedule = MyMoneySchedule();
+
+ if(!m_account.id().isEmpty()) {
+ if(m_schedulePage->m_reminderCheckBox->isChecked() && (m_account.accountType() == MyMoneyAccount::CreditCard)) {
+ m_schedule.setName(m_schedulePage->m_name->text());
+ m_schedule.setType(MyMoneySchedule::TYPE_TRANSFER);
+ m_schedule.setPaymentType(static_cast<MyMoneySchedule::paymentTypeE>(m_schedulePage->m_method->currentItem()));
+ m_schedule.setFixed(false);
+ m_schedule.setOccurencePeriod(MyMoneySchedule::OCCUR_MONTHLY);
+ m_schedule.setOccurenceMultiplier(1);
+ MyMoneyTransaction t;
+ MyMoneySplit s;
+ s.setPayeeId(m_schedulePage->m_payee->selectedItem());
+ s.setAccountId(m_schedulePage->m_paymentAccount->selectedItem());
+ s.setMemo(i18n("Credit card payment"));
+ s.setShares(-m_schedulePage->m_amount->value());
+ s.setValue(s.shares());
+ t.addSplit(s);
+
+ s.clearId();
+ s.setAccountId(m_account.id());
+ s.setShares(m_schedulePage->m_amount->value());
+ s.setValue(s.shares());
+ t.addSplit(s);
+
+ // setup the next due date
+ t.setPostDate(m_schedulePage->m_date->date());
+ m_schedule.setTransaction(t);
+
+ } else if(m_account.isLoan()) {
+ m_schedule.setName(i18n("Loan payment for %1").arg(m_accountTypePage->m_accountName->text()));
+ m_schedule.setType(MyMoneySchedule::TYPE_LOANPAYMENT);
+ if(moneyBorrowed())
+ m_schedule.setPaymentType(MyMoneySchedule::STYPE_DIRECTDEBIT);
+ else
+ m_schedule.setPaymentType(MyMoneySchedule::STYPE_DIRECTDEPOSIT);
+
+ m_schedule.setFixed(true);
+ m_schedule.setOccurence(m_generalLoanInfoPage->m_paymentFrequency->currentItem());
+
+ MyMoneyTransaction t;
+ MyMoneySplit s;
+ // payment split
+ s.setPayeeId(m_generalLoanInfoPage->m_payee->selectedItem());
+ s.setAccountId(m_loanSchedulePage->m_paymentAccount->selectedItem());
+ s.setMemo(i18n("Loan payment"));
+ if(moneyBorrowed()) {
+ s.setShares(-(m_loanPaymentPage->basePayment() + m_loanPaymentPage->additionalFees()));
+ } else {
+ s.setShares(m_loanPaymentPage->basePayment() + m_loanPaymentPage->additionalFees());
+ }
+ s.setValue(s.shares());
+ t.addSplit(s);
+
+ // principal split
+ s.clearId();
+ s.setAccountId(m_account.id());
+ s.setShares(MyMoneyMoney::autoCalc);
+ s.setValue(MyMoneyMoney::autoCalc);
+ s.setMemo(i18n("Amortization"));
+ s.setAction(MyMoneySplit::ActionAmortization);
+ t.addSplit(s);
+
+ // interest split
+ s.clearId();
+ s.setAccountId(m_loanSchedulePage->m_interestCategory->selectedItem());
+ s.setShares(MyMoneyMoney::autoCalc);
+ s.setValue(MyMoneyMoney::autoCalc);
+ s.setMemo(i18n("Interest"));
+ s.setAction(MyMoneySplit::ActionInterest);
+ t.addSplit(s);
+
+ // additional fee splits
+ QValueList<MyMoneySplit> additionalSplits;
+ m_loanPaymentPage->additionalFeesSplits(additionalSplits);
+ QValueList<MyMoneySplit>::const_iterator it;
+ MyMoneyMoney factor(moneyBorrowed() ? 1 : -1, 1);
+
+ for(it = additionalSplits.begin(); it != additionalSplits.end(); ++it) {
+ s = (*it);
+ s.clearId();
+ s.setShares(s.shares() * factor);
+ s.setValue(s.value() * factor);
+ t.addSplit(s);
+ }
+
+ // setup the next due date
+ t.setPostDate(m_loanSchedulePage->firstPaymentDueDate());
+ m_schedule.setTransaction(t);
+ }
+ }
+ return m_schedule;
+}
+
+MyMoneyMoney NewAccountWizard::Wizard::openingBalance(void) const
+{
+ // equity accounts don't have an opening balance
+ if(m_accountTypePage->accountType() == MyMoneyAccount::Equity)
+ return MyMoneyMoney();
+
+ if(m_accountTypePage->accountType() == MyMoneyAccount::Loan) {
+ if(m_generalLoanInfoPage->recordAllPayments())
+ return MyMoneyMoney(0, 1);
+ if(moneyBorrowed())
+ return -(m_generalLoanInfoPage->m_openingBalance->value());
+ return m_generalLoanInfoPage->m_openingBalance->value();
+ }
+ return m_accountTypePage->m_openingBalance->value();
+}
+
+MyMoneyPrice NewAccountWizard::Wizard::conversionRate(void) const
+{
+ if(MyMoneyFile::instance()->baseCurrency().id() == m_accountTypePage->m_currencyComboBox->security().id())
+ return MyMoneyPrice(MyMoneyFile::instance()->baseCurrency().id(),
+ m_accountTypePage->m_currencyComboBox->security().id(),
+ m_accountTypePage->m_openingDate->date(),
+ MyMoneyMoney(1,1),
+ i18n("User"));
+ return MyMoneyPrice(MyMoneyFile::instance()->baseCurrency().id(),
+ m_accountTypePage->m_currencyComboBox->security().id(),
+ m_accountTypePage->m_openingDate->date(),
+ m_accountTypePage->m_conversionRate->value(),
+ i18n("User"));
+}
+
+bool NewAccountWizard::Wizard::moneyBorrowed(void) const
+{
+ return m_generalLoanInfoPage->m_loanDirection->currentItem() == 0;
+}
+
+class NewAccountWizard::InstitutionPage::Private
+{
+public:
+ QValueList<MyMoneyInstitution> m_list;
+};
+
+InstitutionPage::InstitutionPage(Wizard* wizard, const char* name) :
+ KInstitutionPageDecl(wizard),
+ WizardPage<Wizard>(StepInstitution, this, wizard, name),
+ d(new Private())
+{
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotLoadWidgets()));
+ connect(m_newInstitutionButton, SIGNAL(clicked()), this, SLOT(slotNewInstitution()));
+ connect(m_institutionComboBox, SIGNAL(activated(int)), this, SLOT(slotSelectInstitution(int)));
+
+ slotLoadWidgets();
+ m_institutionComboBox->setCurrentItem(0);
+ slotSelectInstitution(0);
+}
+
+InstitutionPage::~InstitutionPage()
+{
+ delete d;
+}
+
+void InstitutionPage::slotLoadWidgets(void)
+{
+ m_institutionComboBox->clear();
+
+ d->m_list.clear();
+ MyMoneyFile::instance()->institutionList(d->m_list);
+ qHeapSort(d->m_list);
+
+ QValueList<MyMoneyInstitution>::const_iterator it_l;
+ m_institutionComboBox->insertItem("");
+ for(it_l = d->m_list.begin(); it_l != d->m_list.end(); ++it_l) {
+ m_institutionComboBox->insertItem((*it_l).name());
+ }
+}
+
+void InstitutionPage::slotNewInstitution(void)
+{
+ MyMoneyInstitution institution;
+
+ emit m_wizard->createInstitution(institution);
+
+ if(!institution.id().isEmpty()) {
+ QValueList<MyMoneyInstitution>::const_iterator it_l;
+ int i = 0;
+ for(it_l = d->m_list.begin(); it_l != d->m_list.end(); ++it_l) {
+ if((*it_l).id() == institution.id()) {
+ // select the item and remember that the very first one is the empty item
+ m_institutionComboBox->setCurrentItem(i+1);
+ slotSelectInstitution(i+1);
+ m_accountNumber->setFocus();
+ break;
+ }
+ ++i;
+ }
+ }
+}
+
+void InstitutionPage::slotSelectInstitution(int id)
+{
+ m_accountNumber->setEnabled(id != 0);
+ m_iban->setEnabled(id != 0);
+}
+
+const MyMoneyInstitution& InstitutionPage::institution(void) const
+{
+ static MyMoneyInstitution emptyInstitution;
+ if(m_institutionComboBox->currentItem() == 0)
+ return emptyInstitution;
+
+ return d->m_list[m_institutionComboBox->currentItem()-1];
+}
+
+KMyMoneyWizardPage* InstitutionPage::nextPage(void) const
+{
+ return m_wizard->m_accountTypePage;
+}
+
+AccountTypePage::AccountTypePage(Wizard* wizard, const char* name) :
+ KAccountTypePageDecl(wizard),
+ WizardPage<Wizard>(StepAccount, this, wizard, name),
+ m_showPriceWarning(true)
+{
+ m_typeSelection->insertItem(i18n("Checking"), MyMoneyAccount::Checkings);
+ m_typeSelection->insertItem(i18n("Savings"), MyMoneyAccount::Savings);
+ m_typeSelection->insertItem(i18n("Credit Card"), MyMoneyAccount::CreditCard);
+ m_typeSelection->insertItem(i18n("Cash"), MyMoneyAccount::Cash);
+ m_typeSelection->insertItem(i18n("Loan"), MyMoneyAccount::Loan);
+ m_typeSelection->insertItem(i18n("Investment"), MyMoneyAccount::Investment);
+ m_typeSelection->insertItem(i18n("Asset"), MyMoneyAccount::Asset);
+ m_typeSelection->insertItem(i18n("Liability"), MyMoneyAccount::Liability);
+ if(KMyMoneyGlobalSettings::expertMode()) {
+ m_typeSelection->insertItem(i18n("Equity"), MyMoneyAccount::Equity);
+ }
+
+ m_typeSelection->setCurrentItem(MyMoneyAccount::Checkings);
+
+ m_currencyComboBox->setSecurity(MyMoneyFile::instance()->baseCurrency());
+
+ m_mandatoryGroup->add(m_accountName);
+ m_mandatoryGroup->add(m_conversionRate->lineedit());
+
+ m_conversionRate->setPrecision(KMyMoneyGlobalSettings::pricePrecision());
+ m_conversionRate->setValue(MyMoneyMoney(1,1));
+ slotUpdateCurrency();
+
+ connect(m_typeSelection, SIGNAL(itemSelected(int)), this, SLOT(slotUpdateType(int)));
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotLoadWidgets()));
+ connect(m_currencyComboBox, SIGNAL(activated(int)), this, SLOT(slotUpdateCurrency()));
+ connect(m_conversionRate, SIGNAL(textChanged(const QString&)), this, SLOT(slotUpdateConversionRate(const QString&)));
+ connect(m_conversionRate, SIGNAL(valueChanged(const QString&)), this, SLOT(slotPriceWarning()));
+ connect(m_onlineQuote, SIGNAL(clicked()), this, SLOT(slotGetOnlineQuote()));
+}
+
+void AccountTypePage::slotUpdateType(int i)
+{
+ hideShowPages(static_cast<MyMoneyAccount::accountTypeE> (i));
+ m_openingBalance->setDisabled(static_cast<MyMoneyAccount::accountTypeE> (i) == MyMoneyAccount::Equity);
+}
+
+void AccountTypePage::hideShowPages(MyMoneyAccount::accountTypeE accountType) const
+{
+ bool hideSchedulePage = (accountType != MyMoneyAccount::CreditCard)
+ && (accountType != MyMoneyAccount::Loan);
+ bool hideLoanPage = (accountType != MyMoneyAccount::Loan);
+ m_wizard->setStepHidden(StepDetails, hideLoanPage);
+ m_wizard->setStepHidden(StepPayments, hideLoanPage);
+ m_wizard->setStepHidden(StepFees, hideLoanPage);
+ m_wizard->setStepHidden(StepSchedule, hideSchedulePage);
+ m_wizard->setStepHidden(StepPayout, (accountType != MyMoneyAccount::Loan));
+ m_wizard->setStepHidden(StepBroker, accountType != MyMoneyAccount::Investment);
+ m_wizard->setStepHidden(StepParentAccount, accountType == MyMoneyAccount::Loan);
+ // Force an update of the steps in case the list has changed
+ m_wizard->reselectStep();
+};
+
+KMyMoneyWizardPage* AccountTypePage::nextPage(void) const
+{
+ if(accountType() == MyMoneyAccount::Loan)
+ return m_wizard->m_generalLoanInfoPage;
+ if(accountType() == MyMoneyAccount::CreditCard)
+ return m_wizard->m_schedulePage;
+ if(accountType() == MyMoneyAccount::Investment)
+ return m_wizard->m_brokeragepage;
+ return m_wizard->m_hierarchyPage;
+}
+
+void AccountTypePage::slotUpdateCurrency(void)
+{
+ MyMoneyAccount acc;
+ acc.setAccountType(accountType());
+
+ m_openingBalance->setPrecision(MyMoneyMoney::denomToPrec(acc.fraction(currency())));
+
+ bool show = m_currencyComboBox->security().id() != MyMoneyFile::instance()->baseCurrency().id();
+ m_conversionLabel->setShown(show);
+ m_conversionRate->setShown(show);
+ m_conversionExample->setShown(show);
+ m_onlineQuote->setShown(show);
+ m_conversionRate->setEnabled(show); // make sure to include/exclude in mandatoryGroup
+ m_mandatoryGroup->changed();
+ slotUpdateConversionRate(m_conversionRate->lineedit()->text());
+}
+
+void AccountTypePage::slotGetOnlineQuote(void)
+{
+ QString id = MyMoneyFile::instance()->baseCurrency().id()+" "+m_currencyComboBox->security().id();
+ KEquityPriceUpdateDlg dlg(this, id);
+ if(dlg.exec() == QDialog::Accepted) {
+ MyMoneyPrice price = dlg.price(id);
+ if(price.isValid()) {
+ m_conversionRate->setValue(price.rate(m_currencyComboBox->security().id()));
+ if(price.date() != m_openingDate->date()) {
+ priceWarning(true);
+ }
+ }
+ }
+}
+
+void AccountTypePage::slotPriceWarning(void)
+{
+ priceWarning(false);
+}
+
+void AccountTypePage::priceWarning(bool always)
+{
+ if(m_showPriceWarning || always) {
+ KMessageBox::information(this, i18n("Please make sure to enter the correct conversion for the selected opening date. If you requested an online quote it might be provided for a different date."), i18n("Check date"));
+ }
+ m_showPriceWarning = false;
+}
+
+void AccountTypePage::slotUpdateConversionRate(const QString& txt)
+{
+ m_conversionExample->setText(i18n("1 %1 equals %2").
+ arg(MyMoneyFile::instance()->baseCurrency().tradingSymbol()).
+ arg(MyMoneyMoney(txt).formatMoney(m_currencyComboBox->security().tradingSymbol(), KMyMoneyGlobalSettings::pricePrecision())));
+}
+
+void AccountTypePage::slotLoadWidgets(void)
+{
+ m_currencyComboBox->update(QString("x"));
+}
+
+bool AccountTypePage::isComplete(void) const
+{
+ // check that the conversion rate is positive if enabled
+ bool rc = !m_conversionRate->isVisible() || (!m_conversionRate->value().isZero() && !m_conversionRate->value().isNegative());
+ if(!rc) {
+ QToolTip::add(m_wizard->m_nextButton, i18n("Conversion rate is not positive"));
+
+ } else {
+ rc = KMyMoneyWizardPage::isComplete();
+
+ if(!rc) {
+ QToolTip::add(m_wizard->m_nextButton, i18n("No account name supplied"));
+ }
+ }
+ hideShowPages(accountType());
+ return rc;
+}
+
+MyMoneyAccount::accountTypeE AccountTypePage::accountType(void) const
+{
+ return static_cast<MyMoneyAccount::accountTypeE>(m_typeSelection->currentItem());
+}
+
+const MyMoneySecurity& AccountTypePage::currency(void) const
+{
+ return m_currencyComboBox->security();
+}
+
+void AccountTypePage::setAccount(const MyMoneyAccount& acc)
+{
+ m_typeSelection->setCurrentItem(acc.accountType());
+ m_openingDate->setDate(acc.openingDate());
+ m_accountName->setText(acc.name());
+}
+
+const MyMoneyAccount& AccountTypePage::parentAccount(void)
+{
+ switch(accountType()) {
+ case MyMoneyAccount::CreditCard:
+ case MyMoneyAccount::Liability:
+ case MyMoneyAccount::Loan: // Can be either but we return liability here
+ return MyMoneyFile::instance()->liability();
+ break;
+ case MyMoneyAccount::Equity:
+ return MyMoneyFile::instance()->equity();
+ default:
+ break;
+ }
+ return MyMoneyFile::instance()->asset();
+}
+
+bool AccountTypePage::allowsParentAccount(void) const
+{
+ return accountType() != MyMoneyAccount::Loan;
+}
+
+BrokeragePage::BrokeragePage(Wizard* wizard, const char* name) :
+ KBrokeragePageDecl(wizard),
+ WizardPage<Wizard>(StepBroker, this, wizard, name)
+{
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotLoadWidgets()));
+}
+
+void BrokeragePage::slotLoadWidgets(void)
+{
+ m_brokerageCurrency->update(QString("x"));
+}
+
+void BrokeragePage::enterPage(void)
+{
+ // assign the currency of the investment account to the
+ // brokerage account if nothing else has ever been selected
+ if(m_brokerageCurrency->security().id().isEmpty()) {
+ m_brokerageCurrency->setSecurity(m_wizard->m_accountTypePage->m_currencyComboBox->security());
+ }
+
+ // check if the institution relevant fields should be enabled or not
+ bool enabled = m_wizard->m_institutionPage->m_accountNumber->isEnabled();
+ m_accountNumberLabel->setEnabled(enabled);
+ m_accountNumber->setEnabled(enabled);
+ m_ibanLabel->setEnabled(enabled);
+ m_iban->setEnabled(enabled);
+}
+
+KMyMoneyWizardPage* BrokeragePage::nextPage(void) const
+{
+ return m_wizard->m_hierarchyPage;
+}
+
+CreditCardSchedulePage::CreditCardSchedulePage(Wizard* wizard, const char* name) :
+ KSchedulePageDecl(wizard),
+ WizardPage<Wizard>(StepSchedule, this, wizard, name)
+{
+ m_mandatoryGroup->add(m_name);
+ m_mandatoryGroup->add(m_payee);
+ m_mandatoryGroup->add(m_amount->lineedit());
+ m_mandatoryGroup->add(m_paymentAccount);
+ connect(m_paymentAccount, SIGNAL(itemSelected(const QString&)), object(), SIGNAL(completeStateChanged()));
+ connect(m_payee, SIGNAL(itemSelected(const QString&)), object(), SIGNAL(completeStateChanged()));
+ connect(m_date, SIGNAL(dateChanged(const QDate&)), object(), SIGNAL(completeStateChanged()));
+
+ connect(m_payee, SIGNAL(createItem(const QString&, QString&)), wizard, SIGNAL(createPayee(const QString&, QString&)));
+
+ m_reminderCheckBox->setChecked(true);
+ connect(m_reminderCheckBox, SIGNAL(toggled(bool)), object(), SIGNAL(completeStateChanged()));
+
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotLoadWidgets()));
+
+ m_method->insertItem(i18n("Write check"), MyMoneySchedule::STYPE_WRITECHEQUE);
+#if 0
+ m_method->insertItem(i18n("Direct debit"), MyMoneySchedule::STYPE_DIRECTDEBIT);
+ m_method->insertItem(i18n("Bank transfer"), MyMoneySchedule::STYPE_BANKTRANSFER);
+#endif
+ m_method->insertItem(i18n("Standing order"), MyMoneySchedule::STYPE_STANDINGORDER);
+ m_method->insertItem(i18n("Manual deposit"), MyMoneySchedule::STYPE_MANUALDEPOSIT);
+ m_method->insertItem(i18n("Direct deposit"), MyMoneySchedule::STYPE_DIRECTDEPOSIT);
+ m_method->insertItem(i18n("Other"), MyMoneySchedule::STYPE_OTHER);
+ m_method->setCurrentItem(MyMoneySchedule::STYPE_DIRECTDEBIT);
+
+ slotLoadWidgets();
+}
+
+void CreditCardSchedulePage::enterPage(void)
+{
+ if(m_name->text().isEmpty())
+ m_name->setText(i18n("CreditCard %1 monthly payment").arg(m_wizard->m_accountTypePage->m_accountName->text()));
+}
+
+bool CreditCardSchedulePage::isComplete(void) const
+{
+ bool rc = true;
+ QString msg = i18n("Finish entry and create account");
+ if(m_reminderCheckBox->isChecked()) {
+ msg = i18n("Finish entry and create account and schedule");
+ if(m_date->date() < m_wizard->m_accountTypePage->m_openingDate->date()) {
+ rc = false;
+ msg = i18n("Next due date is prior to opening date");
+ }
+ if(m_paymentAccount->selectedItem().isEmpty()) {
+ rc = false;
+ msg = i18n("No account selected");
+ }
+ if(m_amount->lineedit()->text().isEmpty()) {
+ rc = false;
+ msg = i18n("No amount for payment selected");
+ }
+ if(m_payee->selectedItem().isEmpty()) {
+ rc = false;
+ msg = i18n("No payee for payment selected");
+ }
+ if(m_name->text().isEmpty()) {
+ rc = false;
+ msg = i18n("No name assigned for schedule");
+ }
+ }
+ QToolTip::add(m_wizard->m_finishButton, msg);
+
+ return rc;
+}
+
+void CreditCardSchedulePage::slotLoadWidgets(void)
+{
+ AccountSet set;
+ set.addAccountGroup(MyMoneyAccount::Asset);
+ set.load(m_paymentAccount->selector());
+
+ m_payee->loadPayees(MyMoneyFile::instance()->payeeList());
+}
+
+KMyMoneyWizardPage* CreditCardSchedulePage::nextPage(void) const
+{
+ return m_wizard->m_hierarchyPage;
+}
+
+GeneralLoanInfoPage::GeneralLoanInfoPage(Wizard* wizard, const char* name) :
+ KGeneralLoanInfoPageDecl(wizard),
+ WizardPage<Wizard>(StepDetails, this, wizard, name),
+ m_firstTime(true)
+{
+ m_mandatoryGroup->add(m_payee);
+
+ // remove the unsupported payment and compounding frequencies and setup default
+ m_paymentFrequency->removeItem(MyMoneySchedule::OCCUR_ONCE);
+ m_paymentFrequency->removeItem(MyMoneySchedule::OCCUR_EVERYOTHERYEAR);
+ m_paymentFrequency->setCurrentItem(MyMoneySchedule::OCCUR_MONTHLY);
+ m_compoundFrequency->removeItem(MyMoneySchedule::OCCUR_ONCE);
+ m_compoundFrequency->removeItem(MyMoneySchedule::OCCUR_EVERYOTHERYEAR);
+ m_compoundFrequency->setCurrentItem(MyMoneySchedule::OCCUR_MONTHLY);
+
+ slotLoadWidgets();
+
+ connect(m_payee, SIGNAL(createItem(const QString&, QString&)), wizard, SIGNAL(createPayee(const QString&, QString&)));
+ connect(m_anyPayments, SIGNAL(activated(int)), object(), SIGNAL(completeStateChanged()));
+ connect(m_recordings, SIGNAL(activated(int)), object(), SIGNAL(completeStateChanged()));
+
+ connect(m_interestType, SIGNAL(activated(int)), object(), SIGNAL(completeStateChanged()));
+ connect(m_interestChangeDateEdit, SIGNAL(dateChanged(const QDate&)), object(), SIGNAL(completeStateChanged()));
+ connect(m_openingBalance, SIGNAL(textChanged(const QString&)), object(), SIGNAL(completeStateChanged()));
+
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotLoadWidgets()));
+}
+
+KMyMoneyWizardPage* GeneralLoanInfoPage::nextPage(void) const
+{
+ return m_wizard->m_loanDetailsPage;
+}
+
+bool GeneralLoanInfoPage::recordAllPayments(void) const
+{
+ bool rc = true; // all payments
+ if(m_recordings->isEnabled()) {
+ if(m_recordings->currentItem() != 0)
+ rc = false;
+ }
+ return rc;
+}
+
+void GeneralLoanInfoPage::enterPage(void)
+{
+ if(m_firstTime) {
+ // setup default dates to last of this month and one year on top
+ QDate firstDay(QDate::currentDate().year(), QDate::currentDate().month(), 1);
+ m_firstPaymentDate->setDate(firstDay.addMonths(1).addDays(-1));
+ m_interestChangeDateEdit->setDate(m_firstPaymentDate->date().addYears(1));;
+ m_firstTime = false;
+ }
+}
+
+bool GeneralLoanInfoPage::isComplete(void) const
+{
+ m_wizard->setStepHidden(StepPayout, !m_wizard->openingBalance().isZero());
+ bool rc = KMyMoneyWizardPage::isComplete();
+ if(!rc) {
+ QToolTip::add(m_wizard->m_nextButton, i18n("No payee supplied"));
+ }
+
+ // fixup availability of items on this page
+ m_recordings->setDisabled(m_anyPayments->currentItem() == 0);
+
+ m_interestFrequencyAmountEdit->setDisabled(m_interestType->currentItem() == 0);
+ m_interestFrequencyUnitEdit->setDisabled(m_interestType->currentItem() == 0);
+ m_interestChangeDateEdit->setDisabled(m_interestType->currentItem() == 0);
+
+ m_openingBalance->setDisabled(recordAllPayments());
+
+ if(m_openingBalance->isEnabled() && m_openingBalance->lineedit()->text().length() == 0) {
+ rc = false;
+ QToolTip::add(m_wizard->m_nextButton, i18n("No opening balance supplied"));
+ }
+
+ if(rc
+ && (m_interestType->currentItem() != 0)
+ && (m_interestChangeDateEdit->date() <= m_firstPaymentDate->date())) {
+ rc = false;
+ QToolTip::add(m_wizard->m_nextButton, i18n("An interest change can only happen after the first payment"));
+ }
+ return rc;
+}
+
+const MyMoneyAccount& GeneralLoanInfoPage::parentAccount(void)
+{
+ return ( m_loanDirection->currentItem() == 0 )
+ ? MyMoneyFile::instance()->liability()
+ : MyMoneyFile::instance()->asset();
+}
+
+void GeneralLoanInfoPage::slotLoadWidgets(void)
+{
+ m_payee->loadPayees(MyMoneyFile::instance()->payeeList());
+}
+
+LoanDetailsPage::LoanDetailsPage(Wizard* wizard, const char* name) :
+ KLoanDetailsPageDecl(wizard),
+ WizardPage<Wizard>(StepPayments, this, wizard, name),
+ m_needCalculate(true)
+{
+ // force the balloon payment to zero (default)
+ m_balloonAmount->setValue(MyMoneyMoney());
+ // allow any precision for the interest rate
+ m_interestRate->setPrecision(-1);
+
+ connect(m_paymentDue, SIGNAL(activated(int)), this, SLOT(slotValuesChanged()));
+
+ connect(m_termAmount, SIGNAL(valueChanged(int)), this, SLOT(slotValuesChanged()));
+ connect(m_termUnit, SIGNAL(highlighted(int)), this, SLOT(slotValuesChanged()));
+ connect(m_loanAmount, SIGNAL(textChanged(const QString&)), this, SLOT(slotValuesChanged()));
+ connect(m_interestRate, SIGNAL(textChanged(const QString&)), this, SLOT(slotValuesChanged()));
+ connect(m_paymentAmount, SIGNAL(textChanged(const QString&)), this, SLOT(slotValuesChanged()));
+ connect(m_balloonAmount, SIGNAL(textChanged(const QString&)), this, SLOT(slotValuesChanged()));
+
+ connect(m_calculateButton, SIGNAL(clicked()), this, SLOT(slotCalculate()));
+}
+
+void LoanDetailsPage::enterPage(void)
+{
+ // we need to remove a bunch of entries of the payment frequencies
+ m_termUnit->clear();
+
+ m_mandatoryGroup->clear();
+ if(!m_wizard->openingBalance().isZero()) {
+ m_mandatoryGroup->add(m_loanAmount->lineedit());
+ if(m_loanAmount->lineedit()->text().length() == 0) {
+ m_loanAmount->setValue(m_wizard->openingBalance().abs());
+ }
+ }
+
+ switch(m_wizard->m_generalLoanInfoPage->m_paymentFrequency->currentItem()) {
+ default:
+ m_termUnit->insertItem(i18n("Payments"), MyMoneySchedule::OCCUR_ONCE);
+ m_termUnit->setCurrentItem(MyMoneySchedule::OCCUR_ONCE);
+ break;
+ case MyMoneySchedule::OCCUR_MONTHLY:
+ m_termUnit->insertItem(i18n("Months"), MyMoneySchedule::OCCUR_MONTHLY);
+ m_termUnit->insertItem(i18n("Years"), MyMoneySchedule::OCCUR_YEARLY);
+ m_termUnit->setCurrentItem(MyMoneySchedule::OCCUR_MONTHLY);
+ break;
+ case MyMoneySchedule::OCCUR_YEARLY:
+ m_termUnit->insertItem(i18n("Years"), MyMoneySchedule::OCCUR_YEARLY);
+ m_termUnit->setCurrentItem(MyMoneySchedule::OCCUR_YEARLY);
+ break;
+ }
+}
+
+void LoanDetailsPage::slotValuesChanged(void)
+{
+ m_needCalculate = true;
+ m_wizard->completeStateChanged();
+}
+
+void LoanDetailsPage::slotCalculate(void)
+{
+ MyMoneyFinancialCalculator calc;
+ long double val;
+ int PF, CF;
+ QString result;
+ bool moneyBorrowed = m_wizard->moneyBorrowed();
+ bool moneyLend = !moneyBorrowed;
+
+ // FIXME: for now, we only support interest calculation at the end of the period
+ calc.setBep();
+ // FIXME: for now, we only support periodic compounding
+ calc.setDisc();
+
+ PF = m_wizard->m_generalLoanInfoPage->m_paymentFrequency->eventsPerYear();
+ CF = m_wizard->m_generalLoanInfoPage->m_compoundFrequency->eventsPerYear();
+
+ if(PF == 0 || CF == 0)
+ return;
+
+ calc.setPF(PF);
+ calc.setCF(CF);
+
+
+ if(!m_loanAmount->lineedit()->text().isEmpty()) {
+ val = static_cast<long double> (m_loanAmount->value().abs().toDouble());
+ if(moneyBorrowed)
+ val = -val;
+ calc.setPv(val);
+ }
+
+ if(!m_interestRate->lineedit()->text().isEmpty()) {
+ val = static_cast<long double> (m_interestRate->value().abs().toDouble());
+ calc.setIr(val);
+ }
+
+ if(!m_paymentAmount->lineedit()->text().isEmpty()) {
+ val = static_cast<long double> (m_paymentAmount->value().abs().toDouble());
+ if(moneyLend)
+ val = -val;
+ calc.setPmt(val);
+ }
+
+ if(!m_balloonAmount->lineedit()->text().isEmpty()) {
+ val = static_cast<long double> (m_balloonAmount->value().abs().toDouble());
+ if(moneyLend)
+ val = -val;
+ calc.setFv(val);
+ }
+
+ if(m_termAmount->value() != 0) {
+ calc.setNpp(static_cast<long double>(term()));
+ }
+
+ // setup of parameters is done, now do the calculation
+ try {
+ if(m_loanAmount->lineedit()->text().isEmpty()) {
+ // calculate the amount of the loan out of the other information
+ val = calc.presentValue();
+ m_loanAmount->loadText(MyMoneyMoney(static_cast<double>(val)).abs().formatMoney("", m_wizard->precision()));
+ result = i18n("KMyMoney has calculated the amount of the loan as %1.")
+ .arg(m_loanAmount->lineedit()->text());
+
+ } else if(m_interestRate->lineedit()->text().isEmpty()) {
+ // calculate the interest rate out of the other information
+ val = calc.interestRate();
+ m_interestRate->loadText(MyMoneyMoney(static_cast<double>(val)).abs().formatMoney("", 3));
+ result = i18n("KMyMoney has calculated the interest rate to %1%.")
+ .arg(m_interestRate->lineedit()->text());
+
+ } else if(m_paymentAmount->lineedit()->text().isEmpty()) {
+ // calculate the periodical amount of the payment out of the other information
+ val = calc.payment();
+ m_paymentAmount->setValue(MyMoneyMoney(static_cast<double>(val)).abs());
+ // reset payment as it might have changed due to rounding
+ val = static_cast<long double> (m_paymentAmount->value().abs().toDouble());
+ if(moneyLend)
+ val = -val;
+ calc.setPmt(val);
+
+ result = i18n("KMyMoney has calculated a periodic payment of %1 to cover principal and interest.")
+ .arg(m_paymentAmount->lineedit()->text());
+
+ val = calc.futureValue();
+ if((moneyBorrowed && val < 0 && fabsl(val) >= fabsl(calc.payment()))
+ || (moneyLend && val > 0 && fabs(val) >= fabs(calc.payment()))) {
+ calc.setNpp(calc.npp()-1);
+ // updateTermWidgets(calc.npp());
+ val = calc.futureValue();
+ MyMoneyMoney refVal(static_cast<double>(val));
+ m_balloonAmount->loadText(refVal.abs().formatMoney("", m_wizard->precision()));
+ result += QString(" ");
+ result += i18n("The number of payments has been decremented and the balloon payment has been modified to %1.")
+ .arg(m_balloonAmount->lineedit()->text());
+ } else if((moneyBorrowed && val < 0 && fabsl(val) < fabsl(calc.payment()))
+ || (moneyLend && val > 0 && fabs(val) < fabs(calc.payment()))) {
+ m_balloonAmount->loadText(MyMoneyMoney(0,1).formatMoney("", m_wizard->precision()));
+ } else {
+ MyMoneyMoney refVal(static_cast<double>(val));
+ m_balloonAmount->loadText(refVal.abs().formatMoney("", m_wizard->precision()));
+ result += i18n("The balloon payment has been modified to %1.")
+ .arg(m_balloonAmount->lineedit()->text());
+ }
+
+ } else if(m_termAmount->value() == 0) {
+ // calculate the number of payments out of the other information
+ val = calc.numPayments();
+ if(val == 0)
+ throw new MYMONEYEXCEPTION("incorrect fincancial calculation");
+
+ // if the number of payments has a fractional part, then we
+ // round it to the smallest integer and calculate the balloon payment
+ result = i18n("KMyMoney has calculated the term of your loan as %1. ")
+ .arg(updateTermWidgets(floorl(val)));
+
+ if(val != floorl(val)) {
+ calc.setNpp(floorl(val));
+ val = calc.futureValue();
+ MyMoneyMoney refVal(static_cast<double>(val));
+ m_balloonAmount->loadText(refVal.abs().formatMoney("", m_wizard->precision()));
+ result += i18n("The balloon payment has been modified to %1.")
+ .arg(m_balloonAmount->lineedit()->text());
+ }
+
+ } else {
+ // calculate the future value of the loan out of the other information
+ val = calc.futureValue();
+
+ // we differentiate between the following cases:
+ // a) the future value is greater than a payment
+ // b) the future value is less than a payment or the loan is overpaid
+ // c) all other cases
+ //
+ // a) means, we have paid more than we owed. This can't be
+ // b) means, we paid more than we owed but the last payment is
+ // less in value than regular payments. That means, that the
+ // future value is to be treated as (fully payed back)
+ // c) the loan is not payed back yet
+ if((moneyBorrowed && val < 0 && fabsl(val) > fabsl(calc.payment()))
+ || (moneyLend && val > 0 && fabs(val) > fabs(calc.payment()))) {
+ // case a)
+ qDebug("Future Value is %Lf", val);
+ throw new MYMONEYEXCEPTION("incorrect fincancial calculation");
+
+ } else if((moneyBorrowed && val < 0 && fabsl(val) <= fabsl(calc.payment()))
+ || (moneyLend && val > 0 && fabs(val) <= fabs(calc.payment()))) {
+ // case b)
+ val = 0;
+ }
+
+ MyMoneyMoney refVal(static_cast<double>(val));
+ result = i18n("KMyMoney has calculated a balloon payment of %1 for this loan.")
+ .arg(refVal.abs().formatMoney("", m_wizard->precision()));
+
+ if(!m_balloonAmount->lineedit()->text().isEmpty()) {
+ if((m_balloonAmount->value().abs() - refVal.abs()).abs().toDouble() > 1) {
+ throw new MYMONEYEXCEPTION("incorrect fincancial calculation");
+ }
+ result = i18n("KMyMoney has successfully verified your loan information.");
+ }
+ m_balloonAmount->loadText(refVal.abs().formatMoney("", m_wizard->precision()));
+ }
+
+ } catch (MyMoneyException *e) {
+ delete e;
+ KMessageBox::error(0,
+ i18n("You have entered mis-matching information. Please modify "
+ "your figures or leave one value empty "
+ "to let KMyMoney calculate it for you"),
+ i18n("Calculation error"));
+ return;
+ }
+
+ result += i18n("\n\nAccept this or modify the loan information and recalculate.");
+
+ KMessageBox::information(0, result, i18n("Calculation successful"));
+ m_needCalculate = false;
+
+ // now update change
+ m_wizard->completeStateChanged();
+}
+
+int LoanDetailsPage::term(void) const
+{
+ int factor = 0;
+
+ if(m_termAmount->value() != 0) {
+ factor = 1;
+ switch(m_termUnit->currentItem()) {
+ case MyMoneySchedule::OCCUR_YEARLY: // years
+ factor = 12;
+ // tricky fall through here
+
+ case MyMoneySchedule::OCCUR_MONTHLY: // months
+ factor *= 30;
+ factor *= m_termAmount->value();
+ // factor now is the duration in days. we divide this by the
+ // payment frequency and get the number of payments
+ factor /= m_wizard->m_generalLoanInfoPage->m_paymentFrequency->daysBetweenEvents();
+ break;
+
+ default:
+ qDebug("Unknown term unit %d in LoanDetailsPage::term(). Using payments.", m_termUnit->currentItem());
+ // tricky fall through here
+
+ case MyMoneySchedule::OCCUR_ONCE: // payments
+ factor = m_termAmount->value();
+ break;
+ }
+ }
+ return factor;
+}
+
+QString LoanDetailsPage::updateTermWidgets(const long double val)
+{
+ long long vl = static_cast<long long>(floorl(val));
+
+ QString valString;
+ MyMoneySchedule::occurenceE unit = m_termUnit->currentItem();
+
+ if((unit == MyMoneySchedule::OCCUR_MONTHLY)
+ && ((vl % 12) == 0)) {
+ vl /= 12;
+ unit = MyMoneySchedule::OCCUR_YEARLY;
+ }
+
+ switch(unit) {
+ case MyMoneySchedule::OCCUR_MONTHLY:
+ valString = i18n("one month", "%n months", vl);
+ m_termUnit->setCurrentItem(MyMoneySchedule::OCCUR_MONTHLY);
+ break;
+ case MyMoneySchedule::OCCUR_YEARLY:
+ valString = i18n("one year", "%n years", vl);
+ m_termUnit->setCurrentItem(MyMoneySchedule::OCCUR_YEARLY);
+ break;
+ default:
+ valString = i18n("one payment", "%n payments", vl);
+ m_termUnit->setCurrentItem(MyMoneySchedule::OCCUR_ONCE);
+ break;
+ }
+ m_termAmount->setValue(vl);
+ return valString;
+}
+
+bool LoanDetailsPage::isComplete(void) const
+{
+ // bool rc = KMyMoneyWizardPage::isComplete();
+
+ int fieldCnt = 0;
+ QWidget* calculatedField = 0;
+
+ if(m_loanAmount->lineedit()->text().length() > 0) {
+ fieldCnt++;
+ } else {
+ calculatedField = m_loanAmount;
+ }
+
+ if(m_interestRate->lineedit()->text().length() > 0) {
+ fieldCnt++;
+ } else {
+ calculatedField = m_interestRate;
+ }
+
+ if(m_termAmount->value() != 0) {
+ fieldCnt++;
+ } else {
+ calculatedField = m_termAmount;
+ }
+
+ if(m_paymentAmount->lineedit()->text().length() > 0) {
+ fieldCnt++;
+ } else {
+ calculatedField = m_paymentAmount;
+ }
+
+ if(m_balloonAmount->lineedit()->text().length() > 0) {
+ fieldCnt++;
+ } else {
+ calculatedField = m_balloonAmount;
+ }
+
+ if(fieldCnt == 5)
+ calculatedField = 0;
+
+ m_calculateButton->setEnabled(fieldCnt == 4 || (fieldCnt == 5 && m_needCalculate));
+
+ m_calculateButton->setAutoDefault(false);
+ m_calculateButton->setDefault(false);
+ if(m_needCalculate && fieldCnt == 4) {
+ QToolTip::add(m_wizard->m_nextButton, i18n("Press Calculate to verify the values"));
+ m_calculateButton->setAutoDefault(true);
+ m_calculateButton->setDefault(true);
+ } else if(fieldCnt != 5) {
+ QToolTip::add(m_wizard->m_nextButton, i18n("Not all details supplied"));
+ m_calculateButton->setAutoDefault(true);
+ m_calculateButton->setDefault(true);
+ }
+ m_wizard->m_nextButton->setAutoDefault(!m_calculateButton->autoDefault());
+ m_wizard->m_nextButton->setDefault(!m_calculateButton->autoDefault());
+
+ return (fieldCnt == 5) && !m_needCalculate;
+}
+
+KMyMoneyWizardPage* LoanDetailsPage::nextPage(void) const
+{
+ return m_wizard->m_loanPaymentPage;
+}
+
+
+class NewAccountWizard::LoanPaymentPage::Private
+{
+public:
+ MyMoneyAccount phonyAccount;
+ MyMoneySplit phonySplit;
+ MyMoneyTransaction additionalFeesTransaction;
+ MyMoneyMoney additionalFees;
+};
+
+LoanPaymentPage::LoanPaymentPage(Wizard* wizard, const char* name) :
+ KLoanPaymentPageDecl(wizard),
+ WizardPage<Wizard>(StepFees, this, wizard, name),
+ d(new Private)
+{
+ d->phonyAccount = MyMoneyAccount(QString("Phony-ID"), MyMoneyAccount());
+
+ d->phonySplit.setAccountId(d->phonyAccount.id());
+ d->phonySplit.setValue(0);
+ d->phonySplit.setShares(0);
+
+ d->additionalFeesTransaction.addSplit(d->phonySplit);
+
+ connect(m_additionalFeesButton, SIGNAL(clicked()), this, SLOT(slotAdditionalFees()));
+}
+
+LoanPaymentPage::~LoanPaymentPage()
+{
+ delete d;
+}
+
+MyMoneyMoney LoanPaymentPage::basePayment(void) const
+{
+ return m_wizard->m_loanDetailsPage->m_paymentAmount->value();
+}
+
+MyMoneyMoney LoanPaymentPage::additionalFees(void) const
+{
+ return d->additionalFees;
+}
+
+void LoanPaymentPage::additionalFeesSplits(QValueList<MyMoneySplit>& list)
+{
+ list.clear();
+
+ QValueList<MyMoneySplit>::ConstIterator it;
+ for(it = d->additionalFeesTransaction.splits().begin(); it != d->additionalFeesTransaction.splits().end(); ++it) {
+ if((*it).accountId() != d->phonyAccount.id()) {
+ list << (*it);
+ }
+ }
+}
+
+void LoanPaymentPage::updateAmounts(void)
+{
+ m_additionalFees->setText(d->additionalFees.formatMoney(m_wizard->currency().tradingSymbol(), m_wizard->precision()));
+ m_totalPayment->setText((basePayment() + d->additionalFees).formatMoney(m_wizard->currency().tradingSymbol(), m_wizard->precision()));
+}
+
+void LoanPaymentPage::enterPage(void)
+{
+ const MyMoneySecurity& currency = m_wizard->currency();
+
+ m_basePayment->setText(basePayment().formatMoney(currency.tradingSymbol(), m_wizard->precision()));
+ d->phonyAccount.setCurrencyId(currency.id());
+ d->additionalFeesTransaction.setCommodity(currency.id());
+
+ updateAmounts();
+}
+
+void LoanPaymentPage::slotAdditionalFees(void)
+{
+ QMap<QString, MyMoneyMoney> priceInfo;
+ KSplitTransactionDlg* dlg = new KSplitTransactionDlg(d->additionalFeesTransaction, d->phonySplit, d->phonyAccount, false, !m_wizard->moneyBorrowed(), MyMoneyMoney(0), priceInfo);
+
+ // connect(dlg, SIGNAL(newCategory(MyMoneyAccount&)), this, SIGNAL(newCategory(MyMoneyAccount&)));
+
+ if(dlg->exec() == QDialog::Accepted) {
+ d->additionalFeesTransaction = dlg->transaction();
+ // sum up the additional fees
+ QValueList<MyMoneySplit>::ConstIterator it;
+
+ d->additionalFees = MyMoneyMoney(0);
+ for(it = d->additionalFeesTransaction.splits().begin(); it != d->additionalFeesTransaction.splits().end(); ++it) {
+ if((*it).accountId() != d->phonyAccount.id()) {
+ d->additionalFees += (*it).shares();
+ }
+ }
+ updateAmounts();
+ }
+
+ delete dlg;
+}
+
+KMyMoneyWizardPage* LoanPaymentPage::nextPage(void) const
+{
+ return m_wizard->m_loanSchedulePage;
+}
+
+
+LoanSchedulePage::LoanSchedulePage(Wizard* wizard, const char* name) :
+ KLoanSchedulePageDecl(wizard),
+ WizardPage<Wizard>(StepSchedule, this, wizard, name)
+{
+ m_mandatoryGroup->add(m_interestCategory->lineEdit());
+ m_mandatoryGroup->add(m_paymentAccount->lineEdit());
+ connect(m_interestCategory, SIGNAL(createItem(const QString&, QString&)), this, SLOT(slotCreateCategory(const QString&, QString&)));
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotLoadWidgets()));
+}
+
+void LoanSchedulePage::slotCreateCategory(const QString& name, QString& id)
+{
+ MyMoneyAccount acc, parent;
+ acc.setName(name);
+
+ if(m_wizard->moneyBorrowed())
+ parent = MyMoneyFile::instance()->expense();
+ else
+ parent = MyMoneyFile::instance()->income();
+
+ emit m_wizard->createCategory(acc, parent);
+
+ // return id
+ id = acc.id();
+}
+
+QDate LoanSchedulePage::firstPaymentDueDate(void) const
+{
+ if(m_firstPaymentDueDate->isEnabled())
+ return m_firstPaymentDueDate->date();
+ return m_wizard->m_generalLoanInfoPage->m_firstPaymentDate->date();
+}
+
+void LoanSchedulePage::enterPage(void)
+{
+ m_interestCategory->setFocus();
+ m_firstPaymentDueDate->setDisabled(m_wizard->m_generalLoanInfoPage->recordAllPayments());
+ slotLoadWidgets();
+}
+
+void LoanSchedulePage::slotLoadWidgets(void)
+{
+ AccountSet set;
+ if(m_wizard->moneyBorrowed())
+ set.addAccountGroup(MyMoneyAccount::Expense);
+ else
+ set.addAccountGroup(MyMoneyAccount::Income);
+ set.load(m_interestCategory->selector());
+
+ set.clear();
+ set.addAccountGroup(MyMoneyAccount::Asset);
+ set.load(m_paymentAccount->selector());
+}
+
+KMyMoneyWizardPage* LoanSchedulePage::nextPage(void) const
+{
+ // if the balance widget of the general loan info page is enabled and
+ // the value is not zero, then the payout already happened and we don't
+ // aks for it.
+ if(m_wizard->openingBalance().isZero())
+ return m_wizard->m_loanPayoutPage;
+ return m_wizard->m_accountSummaryPage;
+}
+
+LoanPayoutPage::LoanPayoutPage(Wizard* wizard, const char* name) :
+ KLoanPayoutPageDecl(wizard),
+ WizardPage<Wizard>(StepPayout, this, wizard, name)
+{
+ m_mandatoryGroup->add(m_assetAccount->lineEdit());
+ m_mandatoryGroup->add(m_loanAccount->lineEdit());
+
+ KIconLoader* il = KGlobal::iconLoader();
+ KGuiItem createAssetButtenItem( i18n( "&Create..." ),
+ QIconSet(il->loadIcon("filenew", KIcon::Small, KIcon::SizeSmall)),
+ i18n("Create a new asset account"),
+ i18n("If the asset account does not yet exist, press this button to create it."));
+ m_createAssetButton->setGuiItem(createAssetButtenItem);
+ QToolTip::add(m_createAssetButton, createAssetButtenItem.toolTip());
+ QWhatsThis::add(m_createAssetButton, createAssetButtenItem.whatsThis());
+ connect(m_createAssetButton, SIGNAL(clicked()), this, SLOT(slotCreateAssetAccount()));
+
+ connect(m_noPayoutTransaction, SIGNAL(toggled(bool)), this, SLOT(slotButtonsToggled()));
+ connect(m_refinanceLoan, SIGNAL(toggled(bool)), this, SLOT(slotButtonsToggled()));
+
+ connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotLoadWidgets()));
+ slotLoadWidgets();
+}
+
+void LoanPayoutPage::slotButtonsToggled(void)
+{
+ // we don't go directly, as the order of the emission of signals to slots is
+ // not defined. Using a single shot timer postpones the call of m_mandatoryGroup::changed()
+ // until the next round of the main loop so we can be sure to see all relevant changes
+ // that happened in the meantime (eg. widgets are enabled and disabled)
+ QTimer::singleShot(0, m_mandatoryGroup, SLOT(changed()));
+}
+
+void LoanPayoutPage::slotCreateAssetAccount(void)
+{
+ MyMoneyAccount acc;
+ acc.setAccountType(MyMoneyAccount::Asset);
+ acc.setOpeningDate(m_wizard->m_accountTypePage->m_openingDate->date());
+
+ emit m_wizard->createAccount(acc);
+
+ if(!acc.id().isEmpty()) {
+ m_assetAccount->setSelectedItem(acc.id());
+ }
+}
+
+void LoanPayoutPage::slotLoadWidgets(void)
+{
+ AccountSet set;
+ set.addAccountGroup(MyMoneyAccount::Asset);
+ set.load(m_assetAccount->selector());
+
+ set.clear();
+ set.addAccountType(MyMoneyAccount::Loan);
+ set.load(m_loanAccount->selector());
+}
+
+void LoanPayoutPage::enterPage(void)
+{
+ // only allow to create new asset accounts for liability loans
+ m_createAssetButton->setEnabled(m_wizard->moneyBorrowed());
+ m_refinanceLoan->setEnabled(m_wizard->moneyBorrowed());
+ if(!m_wizard->moneyBorrowed()) {
+ m_refinanceLoan->setChecked(false);
+ }
+ m_payoutDetailFrame->setDisabled(m_noPayoutTransaction->isChecked());
+}
+
+KMyMoneyWizardPage* LoanPayoutPage::nextPage(void) const
+{
+ return m_wizard->m_accountSummaryPage;
+}
+
+bool LoanPayoutPage::isComplete(void) const
+{
+ return KMyMoneyWizardPage::isComplete() | m_noPayoutTransaction->isChecked();
+}
+
+const QString& LoanPayoutPage::payoutAccountId(void) const
+{
+ if(m_refinanceLoan->isChecked()) {
+ return m_loanAccount->selectedItem();
+ } else {
+ return m_assetAccount->selectedItem();
+ }
+}
+
+HierarchyPage::HierarchyPage(Wizard* wizard, const char* name) :
+ KHierarchyPageDecl(wizard),
+ WizardPage<Wizard>(StepParentAccount, this, wizard, name)
+{
+ // the next line causes a warning to be shown in the console output
+ // since at least one of the major groups is selected, and the user
+ // cannot deselect an account, at least one is selected all the time
+ // and we don't need this check
+ // m_mandatoryGroup->add(m_qlistviewParentAccounts);
+ m_qlistviewParentAccounts->setEnabled(true);
+ m_qlistviewParentAccounts->setRootIsDecorated(true);
+ m_qlistviewParentAccounts->setAllColumnsShowFocus(true);
+ m_qlistviewParentAccounts->addColumn("Accounts");
+ m_qlistviewParentAccounts->setMultiSelection(false);
+ m_qlistviewParentAccounts->header()->setResizeEnabled(true);
+ m_qlistviewParentAccounts->setColumnWidthMode(0, QListView::Maximum);
+ // never show the horizontal scroll bar
+ // m_qlistviewParentAccounts->setHScrollBarMode(QScrollView::AlwaysOff);
+}
+
+void HierarchyPage::enterPage(void)
+{
+ // Ensure that the list reflects the Account Type
+ // - if the type has changed
+ // - - clear the list
+ // - - populate the account list (also occurs first time we come here)
+ MyMoneyAccount topAccount = m_wizard->m_accountTypePage->parentAccount();
+
+ // If the list was not populated with this top account we populate it now
+ if ( &m_topAccount == NULL || m_topAccount.id() != topAccount.id())
+ {
+ if ( &m_topAccount != NULL )
+ {
+ // If the list has alrady been populated clear it
+ if ( (*m_qlistviewParentAccounts).childCount() > 0 )
+ (*m_qlistviewParentAccounts).clear();
+ }
+
+ // Add the Tree for the Top Account
+ KMyMoneyAccountTreeItem *topAccountTree = buildAccountTree(m_qlistviewParentAccounts, topAccount, false);
+ topAccountTree->setOpen(true);
+ // Record the top account used to populate the list
+ m_topAccount = topAccount;
+ }
+}
+
+KMyMoneyAccountTreeItem* HierarchyPage::buildAccountTree
+ ( KMyMoneyAccountTreeBase* parent
+ , const MyMoneyAccount& account
+ , bool open ) const
+{
+ // Recursively add child accounts to the list
+ if ( account.accountType() == MyMoneyAccount::Investment)
+ return NULL;
+ KMyMoneyAccountTreeItem* childItem = new KMyMoneyAccountTreeItem( parent, account );
+ if ( open )
+ childItem->setOpen(true);
+ for ( QStringList::ConstIterator it = account.accountList().begin();
+ it != account.accountList().end();
+ ++it )
+ {
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(*it);
+ if(acc.isClosed())
+ continue;
+ if(acc.accountType() == MyMoneyAccount::Investment)
+ continue;
+ buildAccountTree( childItem, acc, open );
+ }
+ return childItem;
+}
+
+KMyMoneyAccountTreeItem* HierarchyPage::buildAccountTree
+ ( KMyMoneyAccountTreeItem* parent
+ , const MyMoneyAccount& account
+ , bool open ) const
+{
+ // Recursively add child accounts to the list
+ if ( account.accountType() == MyMoneyAccount::Investment)
+ return NULL;
+ KMyMoneyAccountTreeItem* childItem = new KMyMoneyAccountTreeItem( parent, account );
+ if ( open )
+ childItem->setOpen(true);
+ for ( QStringList::ConstIterator it = account.accountList().begin();
+ it != account.accountList().end();
+ ++it )
+ {
+ MyMoneyAccount acc = MyMoneyFile::instance()->account(*it);
+ if(acc.isClosed())
+ continue;
+ if (account.accountType() == MyMoneyAccount::Investment)
+ continue;
+ buildAccountTree( childItem, acc, open );
+ }
+ return childItem;
+}
+
+KMyMoneyWizardPage* HierarchyPage::nextPage(void) const
+{
+ return m_wizard->m_accountSummaryPage;
+}
+
+const MyMoneyAccount& HierarchyPage::parentAccount(void)
+{
+ // TODO
+ // Instead of returning the Parent Account we can simply
+ // return the account associated with the current item
+ // in the ListView
+ KMyMoneyAccountTreeItem* item = dynamic_cast<KMyMoneyAccountTreeItem*>(m_qlistviewParentAccounts->currentItem());
+ return dynamic_cast<const MyMoneyAccount&>(item->itemObject());
+}
+
+AccountSummaryPage::AccountSummaryPage(Wizard* wizard, const char* name) :
+ KAccountSummaryPageDecl(wizard),
+ WizardPage<Wizard>(StepFinish, this, wizard, name)
+{
+ m_dataList->setSorting(-1);
+ m_dataList->setColumnWidthMode(1, QListView::Maximum);
+ m_dataList->setResizeMode(QListView::LastColumn);
+}
+
+void AccountSummaryPage::enterPage(void)
+{
+ MyMoneyAccount acc = m_wizard->account();
+ MyMoneySecurity sec = m_wizard->currency();
+ acc.fraction(sec);
+
+ // assign an id to the account inside the wizard which is required for a schedule
+ // get the schedule and clear the id again in the wizards object.
+ MyMoneyAccount tmp(QString("Phony-ID"), acc);
+ m_wizard->setAccount(tmp);
+ MyMoneySchedule sch = m_wizard->schedule();
+ m_wizard->setAccount(acc);
+
+ m_dataList->clear();
+
+ // Account data
+ QListViewItem* group = new KMyMoneyCheckListItem(m_dataList, i18n("Account information"), QString(), QString(), QCheckListItem::RadioButtonController);
+ group->setOpen(true);
+ QListViewItem* p;
+ p = new KListViewItem(group, i18n("Name"), acc.name());
+ if(!acc.isLoan())
+ p = new KListViewItem(group, p, i18n("Subaccount of"),
+ m_wizard->parentAccount().name());
+ if(acc.accountType() == MyMoneyAccount::AssetLoan)
+ p = new KListViewItem(group, p, i18n("Type"), i18n("Loan"));
+ else
+ p = new KListViewItem(group, p, i18n("Type"), m_wizard->m_accountTypePage->m_typeSelection->currentText());
+ p = new KListViewItem(group, p, i18n("Currency"), m_wizard->currency().name());
+ p = new KListViewItem(group, p, i18n("Opening date"), KGlobal::locale()->formatDate(acc.openingDate()));
+ if(m_wizard->currency().id() != MyMoneyFile::instance()->baseCurrency().id()) {
+ p = new KListViewItem(group, p, i18n("Conversion rate"), m_wizard->conversionRate().rate(QString()).formatMoney("", KMyMoneyGlobalSettings::pricePrecision()));
+ }
+ if(!acc.isLoan() || !m_wizard->openingBalance().isZero())
+ p = new KListViewItem(group, p, i18n("Opening balance"), m_wizard->openingBalance().formatMoney(acc, sec));
+
+ if(!m_wizard->m_institutionPage->institution().id().isEmpty()) {
+ p = new KListViewItem(group, p, i18n("Institution"), m_wizard->m_institutionPage->institution().name());
+ if(!acc.number().isEmpty()) {
+ p = new KListViewItem(group, p, i18n("Number"), acc.number());
+ }
+ if(!acc.value("IBAN").isEmpty()) {
+ p = new KListViewItem(group, p, i18n("IBAN"), acc.value("IBAN"));
+ }
+ }
+
+ if(acc.accountType() == MyMoneyAccount::Investment) {
+ if(m_wizard->m_brokeragepage->m_createBrokerageButton->isChecked()) {
+ group = new KMyMoneyCheckListItem(m_dataList, group, i18n("Brokerage Account"), QString(), QString(), QCheckListItem::RadioButtonController);
+ group->setOpen(true);
+ p = new KListViewItem(group, p, i18n("Name"), QString("%1 (Brokerage)").arg(acc.name()));
+ p = new KListViewItem(group, p, i18n("Currency"), m_wizard->m_brokeragepage->m_brokerageCurrency->security().name());
+ if(m_wizard->m_brokeragepage->m_accountNumber->isEnabled() && !m_wizard->m_brokeragepage->m_accountNumber->text().isEmpty())
+ p = new KListViewItem(group, p, i18n("Number"), m_wizard->m_brokeragepage->m_accountNumber->text());
+ if(m_wizard->m_brokeragepage->m_iban->isEnabled() && !m_wizard->m_brokeragepage->m_iban->text().isEmpty())
+ p = new KListViewItem(group, p, i18n("IBAN"), m_wizard->m_brokeragepage->m_iban->text());
+ }
+ }
+
+ // Loan
+ if(acc.isLoan()) {
+ group = new KMyMoneyCheckListItem(m_dataList, group, i18n("Loan information"), QString(), QString(), QCheckListItem::RadioButtonController);
+ group->setOpen(true);
+ if(m_wizard->moneyBorrowed()) {
+ p = new KListViewItem(group, p, i18n("Amount borrowed"), m_wizard->m_loanDetailsPage->m_loanAmount->value().formatMoney(m_wizard->currency().tradingSymbol(), m_wizard->precision()));
+ } else {
+ p = new KListViewItem(group, p, i18n("Amount lent"), m_wizard->m_loanDetailsPage->m_loanAmount->value().formatMoney(m_wizard->currency().tradingSymbol(), m_wizard->precision()));
+ }
+ p = new KListViewItem(group, p, i18n("Interest rate"), QString("%1 %").arg(m_wizard->m_loanDetailsPage->m_interestRate->value().formatMoney("", -1)));
+ p = new KListViewItem(group, p, i18n("Interest rate is"), m_wizard->m_generalLoanInfoPage->m_interestType->currentText());
+ p = new KListViewItem(group, p, i18n("Principal and interest"), m_wizard->m_loanDetailsPage->m_paymentAmount->value().formatMoney(acc, sec));
+ p = new KListViewItem(group, p, i18n("Additional fees"), m_wizard->m_loanPaymentPage->additionalFees().formatMoney(acc, sec));
+ p = new KListViewItem(group, p, i18n("Payment frequency"), m_wizard->m_generalLoanInfoPage->m_paymentFrequency->currentText());
+ p = new KListViewItem(group, p, i18n("Payment account"), m_wizard->m_loanSchedulePage->m_paymentAccount->currentText());
+
+ if(!m_wizard->m_loanPayoutPage->m_noPayoutTransaction->isChecked() && m_wizard->openingBalance().isZero()) {
+ group = new KMyMoneyCheckListItem(m_dataList, group, i18n("Payout information"), QString(), QString(), QCheckListItem::RadioButtonController);
+ group->setOpen(true);
+ if(m_wizard->m_loanPayoutPage->m_refinanceLoan->isChecked()) {
+ p = new KListViewItem(group, p, i18n("Refinance"), m_wizard->m_loanPayoutPage->m_loanAccount->currentText());
+ } else {
+ if(m_wizard->moneyBorrowed())
+ p = new KListViewItem(group, p, i18n("Transfer amount to"), m_wizard->m_loanPayoutPage->m_assetAccount->currentText());
+ else
+ p = new KListViewItem(group, p, i18n("Transfer amount from"), m_wizard->m_loanPayoutPage->m_assetAccount->currentText());
+ }
+ p = new KListViewItem(group, p, i18n("Payment date"), KGlobal::locale()->formatDate(m_wizard->m_loanPayoutPage->m_payoutDate->date()));
+ }
+ }
+
+ // Schedule
+ if(!(sch == MyMoneySchedule())) {
+ group = new KMyMoneyCheckListItem(m_dataList, group, i18n("Schedule information"), QString(), QString(), QCheckListItem::RadioButtonController);
+ group->setOpen(true);
+ p = new KListViewItem(group, i18n("Name"), sch.name());
+ if(acc.accountType() == MyMoneyAccount::CreditCard) {
+ MyMoneyAccount paymentAccount = MyMoneyFile::instance()->account(m_wizard->m_schedulePage->m_paymentAccount->selectedItem());
+ p = new KListViewItem(group, p, i18n("Occurence"), i18n("Monthly"));
+ p = new KListViewItem(group, p, i18n("Paid from"), paymentAccount.name());
+ p = new KListViewItem(group, p, i18n("Pay to"), m_wizard->m_schedulePage->m_payee->currentText());
+ p = new KListViewItem(group, p, i18n("Amount"), m_wizard->m_schedulePage->m_amount->value().formatMoney(acc, sec));
+ p = new KListViewItem(group, p, i18n("First payment due"), KGlobal::locale()->formatDate(sch.nextDueDate()));
+ p = new KListViewItem(group, p, i18n("Payment method"), m_wizard->m_schedulePage->m_method->currentText());
+ }
+ if(acc.isLoan()) {
+ p = new KListViewItem(group, p, i18n("Occurence"), m_wizard->m_generalLoanInfoPage->m_paymentFrequency->currentText());
+ p = new KListViewItem(group, p, i18n("Amount"), (m_wizard->m_loanPaymentPage->basePayment() + m_wizard->m_loanPaymentPage->additionalFees()).formatMoney(acc, sec));
+ p = new KListViewItem(group, p, i18n("First payment due"), KGlobal::locale()->formatDate(m_wizard->m_loanSchedulePage->firstPaymentDueDate()));
+ }
+ }
+}
+
+#include "knewaccountwizard.moc"
diff --git a/kmymoney2/wizards/newaccountwizard/knewaccountwizard.h b/kmymoney2/wizards/newaccountwizard/knewaccountwizard.h
new file mode 100644
index 0000000..c8a149c
--- /dev/null
+++ b/kmymoney2/wizards/newaccountwizard/knewaccountwizard.h
@@ -0,0 +1,182 @@
+/***************************************************************************
+ knewaccountwizard.h
+ -------------------
+ begin : Tue Sep 25 2007
+ copyright : (C) 2007 Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KNEWACCOUNTWIZARD_H
+#define KNEWACCOUNTWIZARD_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+class QString;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/kmymoneywizard.h>
+class MyMoneyPrice;
+
+/**
+ * @author Thomas Baumgart
+ */
+namespace NewAccountWizard {
+
+class AccountTypePage;
+class InstitutionPage;
+class BrokeragePage;
+class CreditCardSchedulePage;
+class GeneralLoanInfoPage;
+class LoanDetailsPage;
+class LoanPaymentPage;
+class LoanSchedulePage;
+class LoanPayoutPage;
+class HierarchyPage;
+class AccountSummaryPage;
+
+/**
+ * @author Thomas Baumgart
+ *
+ * This class implements the new account wizard which is used to gather
+ * the required information from the user to create a new account
+ */
+class Wizard : public KMyMoneyWizard
+{
+ friend class AccountTypePage;
+ friend class InstitutionPage;
+ friend class BrokeragePage;
+ friend class CreditCardSchedulePage;
+ friend class GeneralLoanInfoPage;
+ friend class LoanDetailsPage;
+ friend class LoanPaymentPage;
+ friend class LoanSchedulePage;
+ friend class LoanPayoutPage;
+ friend class HierarchyPage;
+ friend class AccountSummaryPage;
+
+ Q_OBJECT
+public:
+ Wizard(QWidget* parent = 0, const char* name = 0, bool modal = false, WFlags flags = 0);
+
+ /**
+ * Returns the information about the account as entered by
+ * the user.
+ */
+ const MyMoneyAccount& account(void);
+
+ /**
+ * Method to load the generated account information back into the widget
+ */
+ void setAccount(const MyMoneyAccount& acc);
+
+ /**
+ * Returns the information about the parent account as entered by
+ * the user.
+ * @note For now it's either fixed as Asset or Liability. We will provide
+ * user selected parent accounts later.
+ */
+ const MyMoneyAccount& parentAccount(void);
+
+ /**
+ * Returns information about the schedule. If the returned value
+ * equals MyMoneySchedule() then the user did not select to create
+ * a schedule.
+ */
+ const MyMoneySchedule& schedule(void);
+
+ /**
+ * This method returns the value of the opening balance
+ * entered by the user
+ */
+ MyMoneyMoney openingBalance(void) const;
+
+ /**
+ * This method returns the interest rate as factor, ie an
+ * interest rate of 6.5% will be returned as 0.065
+ */
+ MyMoneyMoney interestRate(void) const;
+
+ /**
+ * This method returns the payout transaction for loans.
+ * If the account to be created is not a loan or no
+ * payout transaction should be generated, this method
+ * returns an emtpy transaction.
+ */
+ MyMoneyTransaction payoutTransaction(void);
+
+ /**
+ * This method returns a MyMoneyAccount() object filled
+ * with the data to create a brokerage account. If the
+ * user selected not to create a brokerage account or
+ * the account type is not able to create a brokerage
+ * account, an empty MyMoneyAccount() object is returned.
+ *
+ * @note Make sure to call the account() method before you call this method.
+ * Otherwise the returned object might contain unexpected results.
+ */
+ MyMoneyAccount brokerageAccount(void) const;
+
+ /**
+ * This method returns the conversion rate
+ */
+ MyMoneyPrice conversionRate(void) const;
+
+protected:
+ /**
+ * This method returns the currently selected currency for the account
+ */
+ const MyMoneySecurity& currency(void) const;
+
+ /**
+ * This method returns the precision in digits for the selected currency.
+ * @sa currency()
+ */
+ int precision(void) const;
+
+ /**
+ * This method returns information about the selection of the user
+ * if the loan is for borrowing or lending money.
+ *
+ * @retval true loan is for money borrowed
+ * @retval false loan is for money lent
+ */
+ bool moneyBorrowed() const;
+
+signals:
+ void createInstitution(MyMoneyInstitution& institution);
+ void createAccount(MyMoneyAccount& account);
+ void createCategory(MyMoneyAccount&, const MyMoneyAccount&);
+
+private:
+ InstitutionPage* m_institutionPage;
+ AccountTypePage* m_accountTypePage;
+ BrokeragePage* m_brokeragepage;
+ CreditCardSchedulePage* m_schedulePage;
+ GeneralLoanInfoPage* m_generalLoanInfoPage;
+ LoanDetailsPage* m_loanDetailsPage;
+ LoanPaymentPage* m_loanPaymentPage;
+ LoanSchedulePage* m_loanSchedulePage;
+ LoanPayoutPage* m_loanPayoutPage;
+ HierarchyPage* m_hierarchyPage;
+ AccountSummaryPage* m_accountSummaryPage;
+
+ MyMoneyAccountLoan m_account;
+ MyMoneySchedule m_schedule;
+};
+
+}; // namespace
+
+
+#endif
diff --git a/kmymoney2/wizards/newaccountwizard/knewaccountwizard_p.h b/kmymoney2/wizards/newaccountwizard/knewaccountwizard_p.h
new file mode 100644
index 0000000..b8a7cb1
--- /dev/null
+++ b/kmymoney2/wizards/newaccountwizard/knewaccountwizard_p.h
@@ -0,0 +1,327 @@
+/***************************************************************************
+ knewaccountwizard_p.h
+ -------------------
+ begin : Tue Sep 25 2007
+ copyright : (C) 2007 Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KNEWACCOUNTWIZARD_P_H
+#define KNEWACCOUNTWIZARD_P_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qcheckbox.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kcombobox.h>
+#include <klineedit.h>
+#include <klistview.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/kmymoneywizard.h>
+#include <kmymoney/kmymoneydateinput.h>
+#include <kmymoney/kmymoneycurrencyselector.h>
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/kmymoneyedit.h>
+#include <kmymoney/kmymoneycategory.h>
+#include <kmymoney/kmymoneyaccounttreebase.h>
+
+#include "kinstitutionpagedecl.h"
+#include "kaccounttypepagedecl.h"
+#include "kbrokeragepagedecl.h"
+#include "kschedulepagedecl.h"
+#include "kgeneralloaninfopagedecl.h"
+#include "kloandetailspagedecl.h"
+#include "kloanpaymentpagedecl.h"
+#include "kloanschedulepagedecl.h"
+#include "kloanpayoutpagedecl.h"
+#include "khierarchypagedecl.h"
+#include "kaccountsummarypagedecl.h"
+
+class Wizard;
+class MyMoneyInstitution;
+class KMyMoneyAccountTreeItem;
+
+namespace NewAccountWizard {
+
+class InstitutionPage : public KInstitutionPageDecl, public WizardPage<Wizard>
+{
+ Q_OBJECT
+public:
+ InstitutionPage(Wizard* parent, const char* name = 0);
+ ~InstitutionPage();
+ KMyMoneyWizardPage* nextPage(void) const;
+
+ QWidget* initialFocusWidget(void) const { return m_institutionComboBox; }
+
+ /**
+ * Returns the information about an institution if entered by
+ * the user. If the id field is empty, then he did not enter
+ * such information.
+ */
+ const MyMoneyInstitution& institution(void) const;
+
+private slots:
+ void slotLoadWidgets(void);
+ void slotNewInstitution(void);
+ void slotSelectInstitution(int id);
+
+private:
+ /// \internal d-pointer class.
+ class Private;
+ /// \internal d-pointer instance.
+ Private* const d;
+};
+
+class AccountTypePage : public KAccountTypePageDecl, public WizardPage<Wizard>
+{
+ Q_OBJECT
+public:
+ AccountTypePage(Wizard* parent, const char* name = 0);
+ virtual bool isComplete(void) const;
+ KMyMoneyWizardPage* nextPage(void) const;
+
+ QWidget* initialFocusWidget(void) const { return m_accountName; }
+
+ MyMoneyAccount::accountTypeE accountType(void) const;
+ const MyMoneyAccount& parentAccount(void);
+ bool allowsParentAccount(void) const;
+ const MyMoneySecurity& currency(void) const;
+
+ void setAccount(const MyMoneyAccount& acc);
+
+private:
+ void hideShowPages(MyMoneyAccount::accountTypeE i) const;
+ void priceWarning(bool);
+
+private slots:
+ void slotLoadWidgets(void);
+ void slotUpdateType(int i);
+ void slotUpdateCurrency(void);
+ void slotUpdateConversionRate(const QString&);
+ void slotGetOnlineQuote(void);
+ void slotPriceWarning(void);
+
+private:
+ bool m_showPriceWarning;
+};
+
+class BrokeragePage : public KBrokeragePageDecl, public WizardPage<Wizard>
+{
+ Q_OBJECT
+public:
+ BrokeragePage(Wizard* parent, const char* name = 0);
+ KMyMoneyWizardPage* nextPage(void) const;
+ void enterPage(void);
+
+ QWidget* initialFocusWidget(void) const { return m_createBrokerageButton; }
+
+private slots:
+ void slotLoadWidgets(void);
+};
+
+class CreditCardSchedulePage : public KSchedulePageDecl, public WizardPage<Wizard>
+{
+ Q_OBJECT
+public:
+ CreditCardSchedulePage(Wizard* parent, const char* name = 0);
+ KMyMoneyWizardPage* nextPage(void) const;
+ virtual bool isComplete(void) const;
+ void enterPage(void);
+
+ QWidget* initialFocusWidget(void) const { return m_reminderCheckBox; }
+
+private slots:
+ void slotLoadWidgets(void);
+};
+
+class GeneralLoanInfoPage : public KGeneralLoanInfoPageDecl, public WizardPage<Wizard>
+{
+ Q_OBJECT
+public:
+ GeneralLoanInfoPage(Wizard* parent, const char* name = 0);
+ KMyMoneyWizardPage* nextPage(void) const;
+ virtual bool isComplete(void) const;
+ void enterPage(void);
+ const MyMoneyAccount& parentAccount(void);
+
+ QWidget* initialFocusWidget(void) const { return m_loanDirection; }
+
+ /**
+ * Returns @p true if the user decided to record all payments, @p false otherwise.
+ */
+ bool recordAllPayments(void) const;
+
+private slots:
+ void slotLoadWidgets(void);
+
+private:
+ bool m_firstTime;
+};
+
+class LoanDetailsPage : public KLoanDetailsPageDecl, public WizardPage<Wizard>
+{
+ Q_OBJECT
+public:
+ LoanDetailsPage(Wizard* parent, const char* name = 0);
+ void enterPage(void);
+ KMyMoneyWizardPage* nextPage(void) const;
+ virtual bool isComplete(void) const;
+
+ QWidget* initialFocusWidget(void) const { return m_paymentDue; }
+
+ /**
+ * This method returns the number of payments depending on
+ * the settings of m_termAmount and m_termUnit widgets
+ */
+ int term(void) const;
+
+private:
+ /**
+ * This method is used to update the term widgets
+ * according to the length of the given @a term.
+ * The term is also converted into a string and returned.
+ */
+ QString updateTermWidgets(const long double term);
+
+private:
+ bool m_needCalculate;
+
+private slots:
+ void slotValuesChanged(void);
+ void slotCalculate(void);
+};
+
+class LoanPaymentPage : public KLoanPaymentPageDecl, public WizardPage<Wizard>
+{
+ Q_OBJECT
+public:
+ LoanPaymentPage(Wizard* parent, const char* name = 0);
+ ~LoanPaymentPage();
+
+ KMyMoneyWizardPage* nextPage(void) const;
+
+ void enterPage(void);
+
+ /**
+ * This method returns the sum of the additional fees
+ */
+ MyMoneyMoney additionalFees(void) const;
+
+ /**
+ * This method returns the base payment, that's principal and interest
+ */
+ MyMoneyMoney basePayment(void) const;
+
+ /**
+ * This method returns the splits that make up the additional fees in @p list.
+ * @note The splits may contain assigned ids which the caller must remove before
+ * adding the splits to a MyMoneyTransaction object.
+ */
+ void additionalFeesSplits(QValueList<MyMoneySplit>& list);
+
+protected slots:
+ void slotAdditionalFees(void);
+
+protected:
+ void updateAmounts(void);
+
+private:
+ /// \internal d-pointer class.
+ class Private;
+ /// \internal d-pointer instance.
+ Private* const d;
+};
+
+class LoanSchedulePage : public KLoanSchedulePageDecl, public WizardPage<Wizard>
+{
+ Q_OBJECT
+public:
+ LoanSchedulePage(Wizard* parent, const char* name = 0);
+ void enterPage(void);
+
+ KMyMoneyWizardPage* nextPage(void) const;
+
+ /**
+ * This method returns the due date of the first payment to be recorded.
+ */
+ QDate firstPaymentDueDate(void) const;
+
+ QWidget* initialFocusWidget(void) const { return m_interestCategory; }
+
+private slots:
+ void slotLoadWidgets(void);
+ void slotCreateCategory(const QString& name, QString& id);
+};
+
+
+class LoanPayoutPage : public KLoanPayoutPageDecl, public WizardPage<Wizard>
+{
+ Q_OBJECT
+public:
+ LoanPayoutPage(Wizard* parent, const char* name = 0);
+ void enterPage(void);
+ virtual bool isComplete(void) const;
+
+ KMyMoneyWizardPage* nextPage(void) const;
+
+ QWidget* initialFocusWidget(void) const { return m_noPayoutTransaction; }
+
+ const QString& payoutAccountId(void) const;
+
+private slots:
+ void slotLoadWidgets(void);
+ void slotCreateAssetAccount(void);
+ void slotButtonsToggled(void);
+};
+
+class HierarchyPage : public KHierarchyPageDecl, public WizardPage<Wizard>
+{
+ Q_OBJECT
+public:
+ HierarchyPage(Wizard* parent, const char* name = 0);
+ void enterPage(void);
+ KMyMoneyWizardPage* nextPage(void) const;
+ QWidget* initialFocusWidget(void) const { return m_qlistviewParentAccounts; }
+ const MyMoneyAccount& parentAccount(void);
+
+private:
+ KMyMoneyAccountTreeItem* buildAccountTree
+ ( KMyMoneyAccountTreeBase* parent
+ , const MyMoneyAccount& account
+ , bool open = false ) const;
+ KMyMoneyAccountTreeItem* buildAccountTree
+ ( KMyMoneyAccountTreeItem* parent
+ , const MyMoneyAccount& account
+ , bool open = false ) const;
+ MyMoneyAccount m_topAccount; // Last populated top account
+ bool bFirstTime;
+};
+
+class AccountSummaryPage : public KAccountSummaryPageDecl, public WizardPage<Wizard>
+{
+ Q_OBJECT
+public:
+ AccountSummaryPage(Wizard* parent, const char* name = 0);
+ void enterPage(void);
+ QWidget* initialFocusWidget(void) const { return m_dataList; }
+};
+
+} // namespace
+
+#endif
diff --git a/kmymoney2/wizards/newaccountwizard/kschedulepagedecl.ui b/kmymoney2/wizards/newaccountwizard/kschedulepagedecl.ui
new file mode 100644
index 0000000..fd4f886
--- /dev/null
+++ b/kmymoney2/wizards/newaccountwizard/kschedulepagedecl.ui
@@ -0,0 +1,187 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KSchedulePageDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KSchedulePageDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>544</width>
+ <height>391</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel16</cstring>
+ </property>
+ <property name="text">
+ <string>For credit card accounts you can create a monthly schedule which will automatically remind you about the payment. Please fill in the details about this payment here.</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_reminderCheckBox</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>StrongFocus</enum>
+ </property>
+ <property name="text">
+ <string>Yes, remind me when the payment is due</string>
+ </property>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>m_paymentFrame</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Plain</enum>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>180</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Name of schedule</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>m_name</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Payee</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyPayeeCombo" row="1" column="1">
+ <property name="name">
+ <cstring>m_payee</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Estimated monthly payment</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit" row="2" column="1">
+ <property name="name">
+ <cstring>m_amount</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>StrongFocus</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel4_3</cstring>
+ </property>
+ <property name="text">
+ <string>Due date of next payment</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyDateInput" row="3" column="1">
+ <property name="name">
+ <cstring>m_date</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>StrongFocus</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel3_3</cstring>
+ </property>
+ <property name="text">
+ <string>Payment should be made
+from account</string>
+ </property>
+ <property name="alignment">
+ <set>AlignTop</set>
+ </property>
+ </widget>
+ <widget class="KMyMoneyCategory" row="4" column="1">
+ <property name="name">
+ <cstring>m_paymentAccount</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Payment method</string>
+ </property>
+ </widget>
+ <widget class="KMyMoneyGeneralCombo" row="5" column="1">
+ <property name="name">
+ <cstring>m_method</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer23</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>31</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>m_reminderCheckBox</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>m_paymentFrame</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/wizards/newuserwizard/Makefile.am b/kmymoney2/wizards/newuserwizard/Makefile.am
new file mode 100644
index 0000000..36b9fdd
--- /dev/null
+++ b/kmymoney2/wizards/newuserwizard/Makefile.am
@@ -0,0 +1,18 @@
+noinst_LIBRARIES = libnewuserwizard.a
+KDE_OPTIONS = noautodist
+
+INCLUDES = $(all_includes) -I../wizardpages -I$(top_srcdir) -I.
+
+libnewuserwizard_a_METASOURCES = AUTO
+
+libnewuserwizard_a_SOURCES = knewuserwizard.cpp kgeneralpagedecl.ui kcurrencypagedecl.ui kpasswordpagedecl.ui kaccountpagedecl.ui kpreferencepagedecl.ui kfilepagedecl.ui kintropagedecl.ui
+
+EXTRA_DIST = kgeneralpagedecl.ui kcurrencypagedecl.ui kpasswordpagedecl.ui kaccountpagedecl.ui kpreferencepagedecl.ui kfilepagedecl.ui kintropagedecl.ui
+
+DISTCLEANFILES= kgeneralpagedecl.cpp kgeneralpagedecl.h kcurrencypagedecl.cpp kcurrencypagedecl.h kpasswordpagedecl.cpp kpasswordpagedecl.h kaccountpagedecl.cpp kaccountpagedecl.h kpreferencepagedecl.cpp kpreferencepagedecl.h kfilepagedecl.cpp kfilepagedecl.h kintropagedecl.cpp kintropagedecl.h
+
+noinst_HEADERS = knewuserwizard.h knewuserwizard_p.h
+
+SUBDIRS =
+
+messages: rc.cpp
diff --git a/kmymoney2/wizards/newuserwizard/kaccountpagedecl.ui b/kmymoney2/wizards/newuserwizard/kaccountpagedecl.ui
new file mode 100644
index 0000000..e0e3620
--- /dev/null
+++ b/kmymoney2/wizards/newuserwizard/kaccountpagedecl.ui
@@ -0,0 +1,268 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KAccountPageDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KAccountPageDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>481</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel2</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>A typical KMyMoney user maintains a checking a account with some institution and uses it to receive money or pay bills. If this is not the case, please deselect the checkbox below and continue on the next page.</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>m_haveCheckingAccountButton</cstring>
+ </property>
+ <property name="text">
+ <string>I have a checking account that I want to manage with KMyMoney</string>
+ </property>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>m_accountDataFrame</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Plain</enum>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="KLineEdit" row="5" column="1">
+ <property name="name">
+ <cstring>m_institutionNameEdit</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>The name of the instititution that issued the account.</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="6" column="1">
+ <property name="name">
+ <cstring>m_institutionNumberEdit</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Each institution has a routing number. Enter it here. If uncertain, leave the field blank. You can modify it later.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Name of the institution</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="6" column="0">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Routing number</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>m_accountNumberEdit</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>In general the institution that issued the account also issued a number for it. Enter it here. If uncertain, you can modify this entry later.</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>m_accountNameEdit</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Enter a descriptive name that will be used by KMyMoney to identify your checking account.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>Opening date</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="3" column="1">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="kMyMoneyDateInput">
+ <property name="name">
+ <cstring>m_openingDateEdit</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Enter the date from when on you plan to keep track of the transactions in that account. This is usually the date of the last statement. If uncertain, leave as is.</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>81</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Number of the account</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Name of the account</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>textLabel2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Opening balance</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="4" column="1">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>m_accountCurrencyLabel</cstring>
+ </property>
+ <property name="text">
+ <string>xxx</string>
+ </property>
+ </widget>
+ <widget class="kMyMoneyEdit">
+ <property name="name">
+ <cstring>m_openingBalanceEdit</cstring>
+ </property>
+ <property name="resetButtonVisibility" stdset="0">
+ <bool>false</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Enter the opening balance of the account. This is usually the ending balance of the last statement. If uncertain, leave as is.</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>200</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="KActiveLabel" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>kActiveLabel1</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>The fields below allow you to enter some information about your checking account. Once this wizard finishes, the account will be created for you within KMyMoney.</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>m_haveCheckingAccountButton</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>m_accountDataFrame</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>m_accountNameEdit</tabstop>
+ <tabstop>m_accountNumberEdit</tabstop>
+ <tabstop>m_openingDateEdit</tabstop>
+ <tabstop>m_openingBalanceEdit</tabstop>
+ <tabstop>m_institutionNameEdit</tabstop>
+ <tabstop>m_institutionNumberEdit</tabstop>
+ <tabstop>m_haveCheckingAccountButton</tabstop>
+ <tabstop>kActiveLabel2</tabstop>
+ <tabstop>kActiveLabel1</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/wizards/newuserwizard/kcurrencypagedecl.ui b/kmymoney2/wizards/newuserwizard/kcurrencypagedecl.ui
new file mode 100644
index 0000000..579bf1e
--- /dev/null
+++ b/kmymoney2/wizards/newuserwizard/kcurrencypagedecl.ui
@@ -0,0 +1,82 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KCurrencyPageDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KCurrencyPageDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>626</width>
+ <height>186</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel3</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>KMyMoney supports multiple currencies. Your reports will be based on a default curreny which you can select here. The default for new accounts is also the currency you select here.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout19</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer11</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>61</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KMyMoneySecuritySelector">
+ <property name="name">
+ <cstring>m_baseCurrencyEdit</cstring>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer10</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>51</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/wizards/newuserwizard/kfilepagedecl.ui b/kmymoney2/wizards/newuserwizard/kfilepagedecl.ui
new file mode 100644
index 0000000..dcae784
--- /dev/null
+++ b/kmymoney2/wizards/newuserwizard/kfilepagedecl.ui
@@ -0,0 +1,86 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KFilePageDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KFilePageDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>350</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel1</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>KMyMoney will store your financial data in a file on the disk. A standard filename within your KDE user environment will be the default. This is just provided for convenience and you can choose any other location here.</string>
+ </property>
+ </widget>
+ <widget class="KURLRequester">
+ <property name="name">
+ <cstring>m_dataFileEdit</cstring>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>30</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>m_existingFileLabel</cstring>
+ </property>
+ <property name="paletteForegroundColor">
+ <color>
+ <red>255</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </property>
+ <property name="text">
+ <string>Either the currently selected file exists or the selected directory does not exist. Please make sure, that
+
+&lt;ul&gt;
+&lt;li&gt;the selected directory exists and&lt;/li&gt;
+&lt;li&gt;the filename is not currently used in this directory.&lt;/li&gt;
+&lt;/ul&gt;</string>
+ </property>
+ </widget>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>m_finishLabel</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>This finishes the setup of your KMyMoney environment. You can now press the Finish button and start using KMyMoney to record your financial transactions.</string>
+ </property>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/wizards/newuserwizard/kgeneralpagedecl.ui b/kmymoney2/wizards/newuserwizard/kgeneralpagedecl.ui
new file mode 100644
index 0000000..916493d
--- /dev/null
+++ b/kmymoney2/wizards/newuserwizard/kgeneralpagedecl.ui
@@ -0,0 +1,258 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>KGeneralPageDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KGeneralPageDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>415</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Please enter some information about yourself.&lt;br&gt;&lt;br&gt;
+
+This information will be seen and used only by you. The information is used to personalize KMyMoney, to encrypt your file, etc.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout18</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>frame8</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>25</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Plain</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout17</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout20</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>County/State:</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>m_userNameEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="3" column="1">
+ <property name="name">
+ <cstring>m_countyEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>m_townEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Street:</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>m_streetEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="6" column="0">
+ <property name="name">
+ <cstring>TextLabel7</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Email:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Your name:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>TextLabel6</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Telephone:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Town:</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="6" column="1">
+ <property name="name">
+ <cstring>m_emailEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel5</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Zip code</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="5" column="1">
+ <property name="name">
+ <cstring>m_telephoneEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="4" column="1">
+ <property name="name">
+ <cstring>m_zipcodeEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout12</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_loadAddressButton</cstring>
+ </property>
+ <property name="text">
+ <string>Load from Addressbook</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer9</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>61</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>frame8_2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>25</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Plain</enum>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/wizards/newuserwizard/kintropagedecl.ui b/kmymoney2/wizards/newuserwizard/kintropagedecl.ui
new file mode 100644
index 0000000..d9dd326
--- /dev/null
+++ b/kmymoney2/wizards/newuserwizard/kintropagedecl.ui
@@ -0,0 +1,66 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KIntroPageDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KIntroPageDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>415</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>16</pointsize>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Welcome to KMyMoney!</string>
+ </property>
+ <property name="alignment">
+ <set>AlignCenter</set>
+ </property>
+ </widget>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>You have started KMyMoney for the first time on this computer. Before this program can help you to manage your finances, it needs to collect some data from you.&lt;p&gt;
+
+On the next few pages you will be guided through the steps necessary to setup the program. This will happen only once.</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>41</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/wizards/newuserwizard/knewuserwizard.cpp b/kmymoney2/wizards/newuserwizard/knewuserwizard.cpp
new file mode 100644
index 0000000..608afb6
--- /dev/null
+++ b/kmymoney2/wizards/newuserwizard/knewuserwizard.cpp
@@ -0,0 +1,363 @@
+/***************************************************************************
+ knewuserwizard.cpp
+ -------------------
+ begin : Sat Feb 18 2006
+ copyright : (C) 2006 Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include <locale.h>
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qpixmap.h>
+#include <qbitmap.h>
+#include <qcheckbox.h>
+#include <qpushbutton.h>
+#include <qdir.h>
+#include <qlabel.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <klistview.h>
+#include <kstandarddirs.h>
+#include <klineedit.h>
+#include <ktextedit.h>
+#include <kuser.h>
+#include <kurlrequester.h>
+#include <kio/netaccess.h>
+#include <kurl.h>
+#include <kabc/addressee.h>
+#include <kabc/stdaddressbook.h>
+#include <kmessagebox.h>
+#include <kactivelabel.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "knewuserwizard.h"
+#include "knewuserwizard_p.h"
+#include <kmymoney/mymoneysecurity.h>
+#include <kmymoney/mymoneyfile.h>
+#include <kmymoney/kguiutils.h>
+#include <kmymoney/kmymoneyaccounttree.h>
+#include <kmymoney/mymoneypayee.h>
+#include <kmymoney/mymoneymoney.h>
+#include <kmymoney/mymoneyinstitution.h>
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/kmymoneydateinput.h>
+#include <kmymoney/kmymoneyedit.h>
+#include <kmymoney/kaccounttemplateselector.h>
+
+#include "../../kmymoney2.h"
+#include "../../kmymoneyglobalsettings.h"
+
+using namespace NewUserWizard;
+
+static int stepCount;
+
+NewUserWizard::Wizard::Wizard(QWidget *parent, const char *name, bool modal, WFlags flags) :
+ KMyMoneyWizard(parent, name, modal, flags),
+ m_introPage(0)
+{
+ bool isFirstTime = KMyMoneyGlobalSettings::firstTimeRun();
+
+ stepCount = 1;
+
+ setTitle(i18n("KMyMoney New File Setup"));
+ if(isFirstTime)
+ addStep(i18n("Introduction"));
+ addStep(i18n("Personal Data"));
+ addStep(i18n("Select Currency"));
+ addStep(i18n("Select Accounts"));
+ addStep(i18n("Set preferences"));
+ addStep(i18n("Finish"));
+
+ if(isFirstTime)
+ m_introPage = new IntroPage(this);
+ m_generalPage = new GeneralPage(this);
+ m_currencyPage = new CurrencyPage(this);
+ m_accountPage = new AccountPage(this);
+ m_categoriesPage = new CategoriesPage(this);
+ m_preferencePage = new PreferencePage(this);
+ m_filePage = new FilePage(this);
+
+ m_accountPage->m_haveCheckingAccountButton->setChecked(true);
+ if(isFirstTime)
+ setFirstPage(m_introPage);
+ else
+ setFirstPage(m_generalPage);
+
+ setHelpContext("firsttime-3");
+}
+
+MyMoneyPayee NewUserWizard::Wizard::user(void) const
+{
+ return m_generalPage->user();
+}
+
+QString NewUserWizard::Wizard::url(void) const
+{
+ return m_filePage->m_dataFileEdit->url();
+}
+
+MyMoneyInstitution NewUserWizard::Wizard::institution(void) const
+{
+ MyMoneyInstitution inst;
+ if(m_accountPage->m_haveCheckingAccountButton->isChecked()) {
+ if(m_accountPage->m_institutionNameEdit->text().length()) {
+ inst.setName(m_accountPage->m_institutionNameEdit->text());
+ if(m_accountPage->m_institutionNumberEdit->text().length())
+ inst.setSortcode(m_accountPage->m_institutionNumberEdit->text());
+ }
+ }
+ return inst;
+}
+
+MyMoneyAccount NewUserWizard::Wizard::account(void) const
+{
+ MyMoneyAccount acc;
+ if(m_accountPage->m_haveCheckingAccountButton->isChecked()) {
+ acc.setName(m_accountPage->m_accountNameEdit->text());
+ if(m_accountPage->m_accountNumberEdit->text().length())
+ acc.setNumber(m_accountPage->m_accountNumberEdit->text());
+ acc.setOpeningDate(m_accountPage->m_openingDateEdit->date());
+ acc.setCurrencyId(m_baseCurrency.id());
+ acc.setAccountType(MyMoneyAccount::Checkings);
+ }
+ return acc;
+}
+
+MyMoneyMoney NewUserWizard::Wizard::openingBalance(void) const
+{
+ return m_accountPage->m_openingBalanceEdit->value();
+}
+
+MyMoneySecurity NewUserWizard::Wizard::baseCurrency(void) const
+{
+ return m_baseCurrency;
+}
+
+QValueList<MyMoneyTemplate> NewUserWizard::Wizard::templates(void) const
+{
+ return m_categoriesPage->selectedTemplates();
+}
+
+IntroPage::IntroPage(Wizard* wizard, const char* name) :
+ KIntroPageDecl(wizard),
+ WizardPage<Wizard>(stepCount++, this, wizard, name)
+{
+}
+
+KMyMoneyWizardPage* IntroPage::nextPage(void) const
+{
+ return m_wizard->m_generalPage;
+}
+
+GeneralPage::GeneralPage(Wizard* wizard, const char* name) :
+ UserInfo(wizard),
+ WizardPage<Wizard>(stepCount++, this, wizard, name)
+{
+ m_userNameEdit->setFocus();
+ KABC::StdAddressBook *ab = KABC::StdAddressBook::self(true);
+ connect(ab, SIGNAL(addressBookChanged(AddressBook*)), this, SLOT(slotAddressBookLoaded()));
+ connect(m_loadAddressButton, SIGNAL(clicked()), this, SLOT(slotLoadFromKABC()));
+ m_loadAddressButton->setEnabled(false);
+}
+
+void GeneralPage::slotAddressBookLoaded(void)
+{
+ KABC::StdAddressBook *ab = KABC::StdAddressBook::self();
+ if (!ab)
+ return;
+
+ m_loadAddressButton->setEnabled(!ab->whoAmI().isEmpty());
+}
+
+void GeneralPage::slotLoadFromKABC(void)
+{
+ KABC::StdAddressBook *ab = KABC::StdAddressBook::self();
+ if (!ab)
+ return;
+
+ KABC::Addressee addr = ab->whoAmI();
+ if ( addr.isEmpty() ) {
+ KMessageBox::sorry(this, i18n("Unable to load data, because no contact has been associated with the owner of the standard addressbook."), i18n("Addressbook import"));
+ return;
+ }
+
+ m_userNameEdit->setText( addr.formattedName() );
+ m_emailEdit->setText( addr.preferredEmail() );
+
+ KABC::PhoneNumber phone = addr.phoneNumber( KABC::PhoneNumber::Home );
+ m_telephoneEdit->setText( phone.number() );
+
+ KABC::Address a = addr.address( KABC::Address::Home );
+ QString sep;
+ if(!a.country().isEmpty() && !a.region().isEmpty())
+ sep = " / ";
+ m_countyEdit->setText(QString("%1%2%3").arg(a.country(), sep, a.region()));
+ m_postcodeEdit->setText( a.postalCode() );
+ m_townEdit->setText( a.locality() );
+ m_streetEdit->setText( a.street() );
+}
+
+KMyMoneyWizardPage* GeneralPage::nextPage(void) const
+{
+ return m_wizard->m_currencyPage;
+}
+
+CurrencyPage::CurrencyPage(Wizard* wizard, const char* name) :
+ Currency(wizard),
+ WizardPage<Wizard>(stepCount++, this, wizard, name)
+{
+ QListViewItem *first = 0;
+ QValueList<MyMoneySecurity> list = MyMoneyFile::instance()->currencyList();
+ QValueList<MyMoneySecurity>::const_iterator it;
+
+ QString localCurrency(localeconv()->int_curr_symbol);
+ localCurrency.truncate(3);
+
+ QString baseCurrency = MyMoneyFile::instance()->baseCurrency().id();
+
+ // construct a transparent 16x16 pixmap
+ QPixmap empty(16, 16);
+ empty.setMask(QBitmap(16, 16, true));
+
+ m_currencyList->clear();
+ for(it = list.begin(); it != list.end(); ++it) {
+ QListViewItem* p = insertCurrency(*it);
+ if((*it).id() == baseCurrency) {
+ first = p;
+ p->setPixmap(0, QPixmap( locate("icon","hicolor/16x16/apps/kmymoney2.png")));
+ } else {
+ p->setPixmap(0, empty);
+ }
+ if(!first && (*it).id() == localCurrency)
+ first = p;
+ }
+
+ if(first == 0)
+ first = m_currencyList->firstChild();
+ if(first != 0) {
+ m_currencyList->setCurrentItem(first);
+ m_currencyList->setSelected(first, true);
+ m_currencyList->ensureItemVisible(first);
+ }
+}
+
+void CurrencyPage::enterPage(void)
+{
+ m_currencyList->setFocus();
+}
+
+
+KMyMoneyWizardPage* CurrencyPage::nextPage(void) const
+{
+ m_wizard->m_baseCurrency = MyMoneyFile::instance()->security(selectedCurrency());
+ m_wizard->m_accountPage->m_accountCurrencyLabel->setText(m_wizard->m_baseCurrency.tradingSymbol());
+ return m_wizard->m_accountPage;
+}
+
+AccountPage::AccountPage(Wizard* wizard, const char* name) :
+ KAccountPageDecl(wizard, name),
+ WizardPage<Wizard>(stepCount, this, wizard, name) // don't inc. the step count here
+{
+ m_mandatoryGroup->add(m_accountNameEdit);
+ connect(m_mandatoryGroup, SIGNAL(stateChanged()), object(), SIGNAL(completeStateChanged()));
+ connect(m_haveCheckingAccountButton, SIGNAL(toggled(bool)), object(), SIGNAL(completeStateChanged()));
+ m_accountNameEdit->setFocus();
+ m_openingDateEdit->setDate(QDate(QDate::currentDate().year(),1,1));
+}
+
+KMyMoneyWizardPage* AccountPage::nextPage(void) const
+{
+ return m_wizard->m_categoriesPage;
+}
+
+bool AccountPage::isComplete(void) const
+{
+ return !m_haveCheckingAccountButton->isChecked() || m_mandatoryGroup->isEnabled();
+}
+
+CategoriesPage::CategoriesPage(Wizard* wizard, const char* name) :
+ Accounts(wizard),
+ WizardPage<Wizard>(stepCount++, this, wizard, name)
+{
+}
+
+KMyMoneyWizardPage* CategoriesPage::nextPage(void) const
+{
+ return m_wizard->m_preferencePage;
+}
+
+QValueList<MyMoneyTemplate> CategoriesPage::selectedTemplates(void) const
+{
+ return m_templateSelector->selectedTemplates();
+}
+
+PreferencePage::PreferencePage(Wizard* wizard, const char* name) :
+ KPreferencePageDecl(wizard),
+ WizardPage<Wizard>(stepCount++, this, wizard, name)
+{
+ connect(m_openConfigButton, SIGNAL(clicked()), kmymoney2, SLOT(slotSettings()));
+}
+
+KMyMoneyWizardPage* PreferencePage::nextPage(void) const
+{
+ return m_wizard->m_filePage;
+}
+
+FilePage::FilePage(Wizard* wizard, const char* name) :
+ KFilePageDecl(wizard),
+ WizardPage<Wizard>(stepCount++, this, wizard, name)
+{
+ m_mandatoryGroup->add(m_dataFileEdit->lineEdit());
+ connect(m_mandatoryGroup, SIGNAL(stateChanged()), object(), SIGNAL(completeStateChanged()));
+
+ KUser user;
+ m_dataFileEdit->setShowLocalProtocol(false);
+ m_dataFileEdit->setURL(QString("%1/%2.kmy").arg(QDir::homeDirPath(), user.loginName()));
+
+ // allow selection of non-existing files
+ m_dataFileEdit->setMode(KFile::File);
+}
+
+bool FilePage::isComplete(void) const
+{
+ bool rc = m_mandatoryGroup->isEnabled();
+ m_existingFileLabel->hide();
+ m_finishLabel->show();
+ if(rc) {
+ // if a filename is present, check that
+ // a) the file does not exist
+ // b) the directory does exist
+ rc = !KIO::NetAccess::exists(m_dataFileEdit->url(), false, m_wizard);
+ if(rc) {
+ QRegExp exp("(.*)/(.*)");
+ rc = false;
+ if(exp.search(m_dataFileEdit->url()) != -1) {
+ if(exp.cap(2).length() > 0) {
+ rc = KIO::NetAccess::exists(exp.cap(1), true, m_wizard);
+ }
+ }
+ }
+ m_existingFileLabel->setHidden(rc);
+ m_finishLabel->setShown(rc);
+ }
+ return rc;
+}
+
+#include "knewuserwizard.moc"
diff --git a/kmymoney2/wizards/newuserwizard/knewuserwizard.h b/kmymoney2/wizards/newuserwizard/knewuserwizard.h
new file mode 100644
index 0000000..a8cd8d5
--- /dev/null
+++ b/kmymoney2/wizards/newuserwizard/knewuserwizard.h
@@ -0,0 +1,123 @@
+/***************************************************************************
+ knewuserwizard.h
+ -------------------
+ begin : Sat Feb 18 2006
+ copyright : (C) 2006 Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KNEWUSERWIZARD_H
+#define KNEWUSERWIZARD_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+class QString;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/kmymoneywizard.h>
+#include <kmymoney/mymoneysecurity.h>
+class MyMoneyPayee;
+class MyMoneyInstitution;
+class MyMoneyAccount;
+class MyMoneyMoney;
+class MyMoneyTemplate;
+
+/**
+ * @author Thomas Baumgart
+ */
+namespace NewUserWizard {
+
+class IntroPage;
+class GeneralPage;
+class CurrencyPage;
+class AccountPage;
+class CategoriesPage;
+class PreferencePage;
+class FilePage;
+
+/**
+ * @author Thomas Baumgart
+ *
+ * This class implements the new user wizard which is used to gather
+ * some initial information from the user who creates a new KMyMoney
+ * 'file'.
+ */
+class Wizard : public KMyMoneyWizard
+{
+ friend class IntroPage;
+ friend class GeneralPage;
+ friend class CurrencyPage;
+ friend class AccountPage;
+ friend class CategoriesPage;
+ friend class PreferencePage;
+ friend class FilePage;
+
+ Q_OBJECT
+public:
+ Wizard(QWidget* parent = 0, const char* name = 0, bool modal = false, WFlags flags = 0);
+ /**
+ * Returns the personal information of the user (e.g. name, address, etc.)
+ */
+ MyMoneyPayee user(void) const;
+
+ /**
+ * Returns the URL that the user has chosen to store the file
+ */
+ QString url(void) const;
+
+ /**
+ * Returns the information about an institution if entered by
+ * the user. If the name field is empty, then he did not enter
+ * such information.
+ */
+ MyMoneyInstitution institution(void) const;
+
+ /**
+ * Returns the information about a checking account if entered by
+ * the user. If the name field is empty, then he did not enter
+ * such information.
+ */
+ MyMoneyAccount account(void) const;
+
+ /**
+ * Returns the opening balance value provided by the user. not enter
+ */
+ MyMoneyMoney openingBalance(void) const;
+
+ /**
+ * Returns the security to be used as base currency.
+ */
+ MyMoneySecurity baseCurrency(void) const;
+
+ /**
+ * Returns a list of templates including accounts to be created
+ */
+ QValueList<MyMoneyTemplate> templates(void) const;
+
+private:
+ MyMoneySecurity m_baseCurrency;
+ IntroPage* m_introPage;
+ GeneralPage* m_generalPage;
+ CurrencyPage* m_currencyPage;
+ AccountPage* m_accountPage;
+ CategoriesPage* m_categoriesPage;
+ PreferencePage* m_preferencePage;
+ FilePage* m_filePage;
+};
+
+}; // namespace
+
+
+#endif
diff --git a/kmymoney2/wizards/newuserwizard/knewuserwizard_p.h b/kmymoney2/wizards/newuserwizard/knewuserwizard_p.h
new file mode 100644
index 0000000..aa62725
--- /dev/null
+++ b/kmymoney2/wizards/newuserwizard/knewuserwizard_p.h
@@ -0,0 +1,140 @@
+/***************************************************************************
+ knewuserwizard_p.h
+ -------------------
+ begin : Sat Feb 18 2006
+ copyright : (C) 2006 Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KNEWUSERWIZARD_P_H
+#define KNEWUSERWIZARD_P_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/kmymoneywizard.h>
+
+#include "kintropagedecl.h"
+#include "kaccountpagedecl.h"
+#include "kpreferencepagedecl.h"
+#include "kfilepagedecl.h"
+
+#include "../wizardpages/userinfo.h"
+#include "../wizardpages/currency.h"
+#include "../wizardpages/accounts.h"
+
+#include <kmymoney/mymoneytemplate.h>
+
+class Wizard;
+
+namespace NewUserWizard {
+
+class IntroPage : public KIntroPageDecl, public WizardPage<Wizard>
+{
+ Q_OBJECT
+public:
+ IntroPage(Wizard* parent, const char* name = 0);
+ KMyMoneyWizardPage* nextPage(void) const;
+};
+
+/**
+ * Wizard page collecting information about the user
+ *
+ * @author Thomas Baumgart
+ */
+class GeneralPage : public UserInfo, public WizardPage<Wizard>
+{
+ Q_OBJECT
+public:
+ GeneralPage(Wizard* parent, const char* name = 0);
+ KMyMoneyWizardPage* nextPage(void) const;
+
+protected slots:
+ void slotLoadFromKABC(void);
+ void slotAddressBookLoaded(void);
+
+};
+
+/**
+ * Wizard page collecting information about the base currency
+ *
+ * @author Thomas Baumgart
+ */
+class CurrencyPage : public Currency, public WizardPage<Wizard>
+{
+ Q_OBJECT
+public:
+ CurrencyPage(Wizard* parent, const char* name = 0);
+ void enterPage(void);
+ KMyMoneyWizardPage* nextPage(void) const;
+};
+
+/**
+ * Wizard page collecting information about the checking account
+ */
+class AccountPage : public KAccountPageDecl, public WizardPage<Wizard>
+{
+ Q_OBJECT
+public:
+ AccountPage(Wizard* parent, const char* name = 0);
+ KMyMoneyWizardPage* nextPage(void) const;
+
+ virtual bool isComplete(void) const;
+};
+
+/**
+ * Wizard page collecting information about the account templates.
+ *
+ * @author Thomas Baumgart
+ */
+class CategoriesPage : public Accounts, public WizardPage<Wizard>
+{
+ Q_OBJECT
+public:
+ CategoriesPage(Wizard* parent, const char* name = 0);
+ KMyMoneyWizardPage* nextPage(void) const;
+ QValueList<MyMoneyTemplate> selectedTemplates(void) const;
+};
+
+/**
+ * Wizard page to allow changing the preferences during setup
+ *
+ * @author Thomas Baumgart
+ */
+class PreferencePage : public KPreferencePageDecl, public WizardPage<Wizard>
+{
+ Q_OBJECT
+public:
+ PreferencePage(Wizard* parent, const char* name = 0);
+ KMyMoneyWizardPage* nextPage(void) const;
+};
+
+/**
+ * Wizard page to allow selecting the filename
+ *
+ * @author Thomas Baumgart
+ */
+class FilePage : public KFilePageDecl, public WizardPage<Wizard>
+{
+ Q_OBJECT
+public:
+ FilePage(Wizard* parent, const char* name = 0);
+
+ virtual bool isComplete(void) const;
+};
+
+} // namespace
+
+#endif
diff --git a/kmymoney2/wizards/newuserwizard/kpasswordpagedecl.ui b/kmymoney2/wizards/newuserwizard/kpasswordpagedecl.ui
new file mode 100644
index 0000000..3d3c062
--- /dev/null
+++ b/kmymoney2/wizards/newuserwizard/kpasswordpagedecl.ui
@@ -0,0 +1,33 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>KPasswordPageDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KPasswordPageDecl</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>599</width>
+ <height>149</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>&lt;p&gt;KMyMoney can encrypt your datafile using GPG Encryption. GPG encryption is one of the most secure methods in the world for protecting data. All of your account numbers and other important financial information will be very secure.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/wizards/newuserwizard/kpreferencepagedecl.ui b/kmymoney2/wizards/newuserwizard/kpreferencepagedecl.ui
new file mode 100644
index 0000000..bfe6446
--- /dev/null
+++ b/kmymoney2/wizards/newuserwizard/kpreferencepagedecl.ui
@@ -0,0 +1,96 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KPreferencePageDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KPreferencePageDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>288</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel1</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>If you would like to review or change any preference settings for KMyMoney at this time, you can do so here. If not just click &lt;b&gt;Next&lt;/b&gt;.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>51</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_openConfigButton</cstring>
+ </property>
+ <property name="text">
+ <string>Configure preferences now</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>31</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel2</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>You can change the configuration options at any time using the configuration dialog. Just select the &lt;b&gt;Configure KMyMoney...&lt;/b&gt; option in the &lt;b&gt;Settings&lt;/b&gt; menu.</string>
+ </property>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/wizards/wizardpages/Makefile.am b/kmymoney2/wizards/wizardpages/Makefile.am
new file mode 100644
index 0000000..65ea6a7
--- /dev/null
+++ b/kmymoney2/wizards/wizardpages/Makefile.am
@@ -0,0 +1,18 @@
+noinst_LIBRARIES = libwizardpages.a
+KDE_OPTIONS = noautodist
+
+INCLUDES = $(all_includes) -I$(top_srcdir) -I.
+
+libwizardpages_a_METASOURCES = AUTO
+
+libwizardpages_a_SOURCES = userinfodecl.ui userinfo.cpp currencydecl.ui currency.cpp accountsdecl.ui accounts.cpp
+
+EXTRA_DIST = userinfodecl.ui currencydecl.ui accountsdecl.ui
+
+DISTCLEANFILES= userinfodecl.cpp userinfodecl.h currencydecl.cpp currencydecl.h accountsdecl.cpp accountsdecl.h
+
+noinst_HEADERS = userinfo.h currency.h accounts.h
+
+SUBDIRS =
+
+messages: rc.cpp
diff --git a/kmymoney2/wizards/wizardpages/accounts.cpp b/kmymoney2/wizards/wizardpages/accounts.cpp
new file mode 100644
index 0000000..0a6c82b
--- /dev/null
+++ b/kmymoney2/wizards/wizardpages/accounts.cpp
@@ -0,0 +1,39 @@
+/***************************************************************************
+ accounts.cpp
+ -------------------
+ begin : Fri Jun 1 2007
+ copyright : (C) 2007 Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qheader.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klistview.h>
+#include <kmymoney/kmymoneyaccounttree.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "accounts.h"
+
+Accounts::Accounts(QWidget* parent, const char* name) :
+ AccountsDecl(parent, name)
+{
+}
+
+#include "accounts.moc"
diff --git a/kmymoney2/wizards/wizardpages/accounts.h b/kmymoney2/wizards/wizardpages/accounts.h
new file mode 100644
index 0000000..d1f3175
--- /dev/null
+++ b/kmymoney2/wizards/wizardpages/accounts.h
@@ -0,0 +1,42 @@
+/***************************************************************************
+ accounts.h
+ -------------------
+ begin : Fri Jun 1 2007
+ copyright : (C) 2007 Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef ACCOUNTS_H
+#define ACCOUNTS_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "accountsdecl.h"
+
+/**
+ * @author Thomas Baumgart
+ */
+class Accounts : public AccountsDecl
+{
+ Q_OBJECT
+public:
+ Accounts(QWidget* parent = 0, const char* name = 0);
+
+private:
+};
+
+
+#endif
diff --git a/kmymoney2/wizards/wizardpages/accountsdecl.ui b/kmymoney2/wizards/wizardpages/accountsdecl.ui
new file mode 100644
index 0000000..9e7b7c9
--- /dev/null
+++ b/kmymoney2/wizards/wizardpages/accountsdecl.ui
@@ -0,0 +1,54 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>AccountsDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>AccountsDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>550</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Select groups of accounts that correspond to the ways that you will use KMyMoney. Each group you select will cause several accounts and categories to be created. Select the groups that are relevant to you. You can always create additional accounts manually later.</string>
+ </property>
+ </widget>
+ <widget class="KAccountTemplateSelector">
+ <property name="name">
+ <cstring>m_templateSelector</cstring>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/wizards/wizardpages/currency.cpp b/kmymoney2/wizards/wizardpages/currency.cpp
new file mode 100644
index 0000000..8693089
--- /dev/null
+++ b/kmymoney2/wizards/wizardpages/currency.cpp
@@ -0,0 +1,66 @@
+/***************************************************************************
+ userinfo.cpp
+ -------------------
+ begin : Fri Jun 1 2007
+ copyright : (C) 2007 Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <klistview.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "currency.h"
+
+Currency::Currency(QWidget* parent, const char* name) :
+ CurrencyDecl(parent, name)
+{
+ m_currencyList->setAllColumnsShowFocus(true);
+ m_currencyList->setMultiSelection(false);
+}
+
+QListViewItem* Currency::insertCurrency(const MyMoneySecurity& sec)
+{
+ return new KListViewItem(m_currencyList, sec.name(), QString(sec.id()), sec.tradingSymbol());
+}
+
+void Currency::selectCurrency(const MyMoneySecurity& sec)
+{
+ QListViewItem* it_v;
+ QListViewItemIterator it(m_currencyList);
+ while((it_v = it.current()) != 0) {
+ if(it_v->text(1) == QString(sec.id())) {
+ m_currencyList->setSelected(it_v, true);
+ m_currencyList->ensureItemVisible(it_v);
+ break;
+ }
+ }
+}
+
+QString Currency::selectedCurrency(void) const
+{
+ QString id;
+ if(m_currencyList->selectedItem()) {
+ id = m_currencyList->selectedItem()->text(1);
+ }
+ return id;
+}
+
+#include "currency.moc"
diff --git a/kmymoney2/wizards/wizardpages/currency.h b/kmymoney2/wizards/wizardpages/currency.h
new file mode 100644
index 0000000..1ce2649
--- /dev/null
+++ b/kmymoney2/wizards/wizardpages/currency.h
@@ -0,0 +1,45 @@
+/***************************************************************************
+ currency.h
+ -------------------
+ begin : Fri Jun 1 2007
+ copyright : (C) 2007 Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef CURRENCY_H
+#define CURRENCY_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+class KListViewItem;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "currencydecl.h"
+#include <kmymoney/mymoneysecurity.h>
+
+/**
+ * @author Thomas Baumgart
+ */
+class Currency : public CurrencyDecl
+{
+ Q_OBJECT
+public:
+ Currency(QWidget* parent = 0, const char* name = 0);
+ QListViewItem* insertCurrency(const MyMoneySecurity& sec);
+ void selectCurrency(const MyMoneySecurity& sec);
+ QString selectedCurrency(void) const;
+};
+
+#endif
diff --git a/kmymoney2/wizards/wizardpages/currencydecl.ui b/kmymoney2/wizards/wizardpages/currencydecl.ui
new file mode 100644
index 0000000..f2b857a
--- /dev/null
+++ b/kmymoney2/wizards/wizardpages/currencydecl.ui
@@ -0,0 +1,96 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>CurrencyDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>CurrencyDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>573</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KActiveLabel">
+ <property name="name">
+ <cstring>kActiveLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>&lt;p&gt;KMyMoney supports multiple currencies, nevertheless one of them will be used as your base currency. The base currency is used as default for new accounts and reports. Please select the base currency from the following list.</string>
+ </property>
+ </widget>
+ <widget class="KListView">
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>ISO Code</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Symbol</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>m_currencyList</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>1</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="fullWidth">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>31</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/wizards/wizardpages/userinfo.cpp b/kmymoney2/wizards/wizardpages/userinfo.cpp
new file mode 100644
index 0000000..412c5a1
--- /dev/null
+++ b/kmymoney2/wizards/wizardpages/userinfo.cpp
@@ -0,0 +1,52 @@
+/***************************************************************************
+ userinfo.cpp
+ -------------------
+ begin : Fri Jun 1 2007
+ copyright : (C) 2007 Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klocale.h>
+#include <klineedit.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "userinfo.h"
+#include <kmymoney/mymoneypayee.h>
+
+UserInfo::UserInfo(QWidget* parent, const char* name) :
+ UserInfoDecl(parent, name)
+{
+ m_userNameEdit->setFocus();
+}
+
+MyMoneyPayee UserInfo::user(void) const
+{
+ MyMoneyPayee user;
+ user.setName(m_userNameEdit->text());
+ user.setAddress(m_streetEdit->text());
+ user.setCity(m_townEdit->text());
+ user.setState(m_countyEdit->text());
+ user.setPostcode(m_postcodeEdit->text());
+ user.setTelephone(m_telephoneEdit->text());
+ user.setEmail(m_emailEdit->text());
+ return user;
+}
+
+#include "userinfo.moc"
diff --git a/kmymoney2/wizards/wizardpages/userinfo.h b/kmymoney2/wizards/wizardpages/userinfo.h
new file mode 100644
index 0000000..9242868
--- /dev/null
+++ b/kmymoney2/wizards/wizardpages/userinfo.h
@@ -0,0 +1,44 @@
+/***************************************************************************
+ userinfo.h
+ -------------------
+ begin : Fri Jun 1 2007
+ copyright : (C) 2007 Thomas Baumgart
+ email : Thomas Baumgart <ipwizard@users.sourceforge.net>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef USERINFO_H
+#define USERINFO_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "userinfodecl.h"
+class MyMoneyPayee;
+
+/**
+ * @author Thomas Baumgart
+ */
+class UserInfo : public UserInfoDecl
+{
+ Q_OBJECT
+public:
+ UserInfo(QWidget* parent = 0, const char* name = 0);
+ MyMoneyPayee user(void) const;
+
+private:
+};
+
+
+#endif
diff --git a/kmymoney2/wizards/wizardpages/userinfodecl.ui b/kmymoney2/wizards/wizardpages/userinfodecl.ui
new file mode 100644
index 0000000..4240d49
--- /dev/null
+++ b/kmymoney2/wizards/wizardpages/userinfodecl.ui
@@ -0,0 +1,225 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>UserInfoDecl</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>UserInfoDecl</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>603</width>
+ <height>374</height>
+ </rect>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KActiveLabel" row="0" column="0" rowspan="1" colspan="4">
+ <property name="name">
+ <cstring>kActiveLabel1</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="text">
+ <string>&lt;p&gt;Use the fields below to enter some information about yourself.&lt;/p&gt;
+
+&lt;p&gt;All information is optional and only used to personalize your KMyMoney file.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="1" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>m_userNameEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Town:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>County/State:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Street:</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="2" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>m_streetEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="6" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>m_emailEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="3" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>m_townEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="5" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>m_telephoneEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="6" column="0">
+ <property name="name">
+ <cstring>TextLabel7</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Email:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>TextLabel6</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Telephone:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Your name:</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="7" column="0" rowspan="1" colspan="4">
+ <property name="name">
+ <cstring>layout22</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>m_loadAddressButton</cstring>
+ </property>
+ <property name="text">
+ <string>Load from Addressbook</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer11</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>305</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer row="8" column="2">
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KLineEdit" row="4" column="1">
+ <property name="name">
+ <cstring>m_countyEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="2">
+ <property name="name">
+ <cstring>TextLabel5</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Postal Code:</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="4" column="3">
+ <property name="name">
+ <cstring>m_postcodeEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<tabstops>
+ <tabstop>m_userNameEdit</tabstop>
+ <tabstop>m_streetEdit</tabstop>
+ <tabstop>m_townEdit</tabstop>
+ <tabstop>m_countyEdit</tabstop>
+ <tabstop>m_postcodeEdit</tabstop>
+ <tabstop>m_telephoneEdit</tabstop>
+ <tabstop>m_emailEdit</tabstop>
+ <tabstop>m_loadAddressButton</tabstop>
+ <tabstop>kActiveLabel1</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kmymoney2/x-kmymoney2.desktop b/kmymoney2/x-kmymoney2.desktop
new file mode 100644
index 0000000..2ec91ef
--- /dev/null
+++ b/kmymoney2/x-kmymoney2.desktop
@@ -0,0 +1,13 @@
+[Desktop Entry]
+Encoding=UTF-8
+Comment=KMyMoney File
+Comment[de]=KMyMoney-Datei
+Comment[fr]=Fichier KMyMoney
+Comment[tr]=KMyMoney Dosyası
+Comment[ro]=Fișier KMyMoney
+Comment[ru]=Финансовые данные KMyMoney
+Comment[zh_CN]=KMyMoney文件
+Icon=kmy
+Type=MimeType
+MimeType=application/x-kmymoney
+Patterns=*.kmy;*.kmt;
diff --git a/libkdchart/CMakeLists.txt b/libkdchart/CMakeLists.txt
new file mode 100644
index 0000000..40a8907
--- /dev/null
+++ b/libkdchart/CMakeLists.txt
@@ -0,0 +1,51 @@
+INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}
+ ${ZLIB_INCLUDE_DIR} )
+
+########### next target ###############
+
+SET(libkmm_kdchart_la_SOURCES
+ KDChartAreaPainter.cpp
+ KDChartAxesPainter.cpp
+ KDChartAxisParams.cpp
+ KDChartAxisParamsWrapper.cpp
+ KDChartBarPainter.cpp
+ KDChartBaseSeries.cpp
+ KDChartBWPainter.cpp
+ KDChart.cpp
+ KDChartCustomBox.cpp
+ KDChartCustomBoxWrapper.cpp
+ KDChartDataIntern.cpp
+ KDChartEnums.cpp
+ KDChartHiLoPainter.cpp
+ KDChartLinesPainter.cpp
+ KDChartPainter.cpp
+ KDChartParams.cpp
+ KDChartParams_frame.cpp
+ KDChartParams_io.cpp
+ KDChartParamsWrapper.cpp
+ KDChartPiePainter.cpp
+ KDChartPlaneSeries.cpp
+ KDChartPolarPainter.cpp
+ KDChartPropertySet.cpp
+ KDChartRingPainter.cpp
+ KDChartSeriesCollection.cpp
+ KDChartTableBase.cpp
+ KDChartTableDataWrapper.cpp
+ KDChartTextPiece.cpp
+ KDChartVectorSeries.cpp
+ KDChartVectorTable.cpp
+ KDChartWidget.cpp
+ KDDrawText.cpp
+ KDFrame.cpp
+ KDFrameProfileSection.cpp
+ KDXMLTools.cpp
+ )
+
+KDE3_AUTOMOC(${libkmm_kdchart_la_SOURCES})
+ADD_LIBRARY(kmm_kdchart SHARED ${libkmm_kdchart_la_SOURCES})
+SET_TARGET_PROPERTIES(kmm_kdchart PROPERTIES VERSION 0.0.0 SOVERSION 0)
+TARGET_LINK_LIBRARIES(kmm_kdchart ${QT_AND_KDECORE_LIBS} ${ZLIB_LIBRARIES})
+
+########### install files ###############
+INSTALL(TARGETS kmm_kdchart
+ DESTINATION lib)
diff --git a/libkdchart/KDChart.cpp b/libkdchart/KDChart.cpp
new file mode 100644
index 0000000..5a4b471
--- /dev/null
+++ b/libkdchart/KDChart.cpp
@@ -0,0 +1,491 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#if defined KDAB_EVAL
+#include "../evaldialog/evaldialog.h"
+#endif
+
+/**
+ \dontinclude KDChartPainter.h
+ */
+#include <KDChart.h>
+#include <KDChartPainter.h>
+#include <KDChartParams.h>
+#include <KDChartGlobal.h>
+#include <KDChartAxisParams.h>
+
+#include <qglobal.h>
+#include <qpainter.h>
+#include <qpaintdevice.h>
+#include <qpaintdevicemetrics.h>
+
+#ifdef QSA
+#if 0 // Disabled by ingwa to make it compile
+#include <qsinterpreter.h>
+#include "KDChartWrapperFactory.h"
+#include "KDChartObjectFactory.h"
+#endif
+#endif
+
+/**
+ \class KDChart KDChart.h
+
+ \brief Provides a single entry-point to the charting engine for
+ applications that wish to provide their own QPainter.
+
+ It is not useful to instantiate this class as it contains
+ static methods only.
+
+ \note If for some reason you are NOT using the
+ KDChartWidget class but calling the painting methods of KDChart directly,
+ you probably will also use the KDChartDataRegionList class:
+ This class is derived from QPtrList, so all of the Qt documentation
+ for this class is valid for KDChartDataRegionList too, e.g. freeing
+ of the pointers stored can either be done automatically or
+ manually - so PLEASE take the time to read the reference information for this class!
+
+ \sa KDChartWidget, KDChartDataRegionList
+ */
+
+KDChartParams* KDChart::oldParams = 0;
+KDChartPainter* KDChart::cpainter = 0;
+KDChartPainter* KDChart::cpainter2 = 0;
+KDChartParams::ChartType KDChart::cpainterType = KDChartParams::NoType;
+KDChartParams::ChartType KDChart::cpainterType2 = KDChartParams::NoType;
+
+/**
+ A global function that cleans up possible KDChartPainter objects at
+ application shutdown.
+ */
+void cleanupPainter();
+
+
+bool hasCartesianAxes( KDChartParams::ChartType chartType )
+{
+ switch( chartType ){
+ case KDChartParams::NoType: return false;
+ case KDChartParams::Bar: return true;
+ case KDChartParams::Line: return true;
+ case KDChartParams::Area: return true;
+ case KDChartParams::Pie: return false;
+ case KDChartParams::HiLo: return true;
+ case KDChartParams::Ring: return false;
+ case KDChartParams::Polar: return false; // Polar axes are NO cartesian axes!
+ case KDChartParams::BoxWhisker: return true;
+ default:
+ qDebug("\n\n\n\nKDCHART ERROR: Type missing in KDChart.cpp hasCartesianAxes()\n"
+ "=============================================================\n"
+ "=============================================================\n\n\n\n");
+ }
+ return false;
+}
+
+
+/**
+ Calculates the drawing area from a given QPainter.
+
+ Use this function to get a QRect that you may pass to
+ KDChart::setupGeometry() if you need to know the positions and
+ sizes of the axis areas and/or the data area *before* drawing
+ the chart. After calling KDChart::setupGeometry() you may use
+ KDChartParams::axisArea() and/or KDChartParams::dataArea()
+ to retrieve the desired information.
+
+ \return True if the painter was valid and the drawing area
+ could be calculated successfully, else false.
+ */
+bool KDChart::painterToDrawRect( QPainter* painter, QRect& drawRect )
+{
+ if( painter ){
+ QPaintDeviceMetrics painterMetrics( painter->device() );
+ drawRect = QRect( 0, 0, painterMetrics.width(), painterMetrics.height() );
+ drawRect.setWidth( drawRect.width() -2 );
+ drawRect.setHeight( drawRect.height()-2 );
+ return true;
+ }else{
+ drawRect = QRect( QPoint(0,0), QSize(0,0) );
+ qDebug("ERROR: KDChartPainter::painterToDrawRect() was called with *no* painter.");
+ return false;
+ }
+}
+
+
+/**
+ Calculates the axis and data area rects of a chart with the
+ specified parameters on the specified painter.
+
+ \note Call this function if you need to know the positions and
+ sizes of the axis areas and/or the data area *before* drawing
+ the chart. After calling this function you may use
+ KDChartParams::axisArea() and/or KDChartParams::dataArea()
+ to retrieve the desired information.
+
+ To get the right drawing area from a given QPainter please
+ use the static method KDChart::painterToDrawRect().
+
+ \param painter the painter that is eventually to be used for drawing
+ \param params the parameters defining the chart
+ \param data the data that should be displayed as a chart
+ \param drawRect the position and size of the drawing area to be used
+ */
+bool KDChart::setupGeometry( QPainter* painter,
+ KDChartParams* params,
+ KDChartTableDataBase* data,
+ const QRect& drawRect )
+{
+//qDebug("INVOKING: KDChart::setupGeometry()");
+ if( !params ){
+ qDebug("ERROR: setupGeometry::paint() was called with *no* params.");
+ return false;
+ }
+ if( !data ){
+ qDebug("ERROR: setupGeometry::paint() was called with *no* data.");
+ return false;
+ }
+ // don't crash due to memory problems when running on windows
+#ifdef Q_WS_WIN
+ QPixmap::setDefaultOptimization(QPixmap::MemoryOptim);
+#endif
+
+ // Install a cleanup routine that is called when the Qt
+ // application shuts down and cleans up any potentially still
+ // existing painters. Only do this once.
+ static bool bFirstCleanUpInstall = true;
+ if( bFirstCleanUpInstall ) {
+ bFirstCleanUpInstall = false;
+ qAddPostRoutine( cleanupPainter );
+ }
+
+ // Check whether last call of this methode gave us the same params pointer.
+ // If params changed we must create new painter(s).
+ bool paramsHasChanged = ( params != oldParams );
+ if( paramsHasChanged )
+ oldParams = params;
+
+ // Check whether there already is painter and, if that is the
+ // case, whether the painter still has the correct type (the chart
+ // type might have changed in the meantime).
+ if ( paramsHasChanged || !cpainter || cpainterType != params->chartType() )
+ {
+ delete cpainter; /* save, since always 0 if there was not yet
+ a chart painter */
+ // create a new painter
+ cpainter = KDChartPainter::create( params, false );
+ cpainterType = params->chartType();
+ }
+
+ // Check whether there already is a 2nd painter and, if that is the
+ // case, whether the painter still has the correct type (the
+ // additional chart type might have changed in the meantime).
+ if ( paramsHasChanged || !cpainter2 || cpainterType2 != params->additionalChartType() )
+ {
+ delete cpainter2; /* save, since always 0 if there was not yet
+ a chart painter */
+ // create a new painter
+ if( hasCartesianAxes( params->chartType() )
+ && hasCartesianAxes( params->additionalChartType() ) ){
+ cpainter2 = KDChartPainter::create( params, true );
+ cpainterType2 = params->additionalChartType();
+ }else{
+ cpainter2 = 0;
+ cpainterType2 = KDChartParams::NoType;
+ }
+ }
+
+ if ( cpainter ){ // can be 0 if no exceptions are used
+ cpainter->setupGeometry( painter, data, drawRect );
+ }
+
+ if ( cpainter2 ){ // can be 0 if no exceptions are used
+ cpainter2->setupGeometry( painter, data, drawRect );
+ }
+
+ return true;
+}
+
+/**
+ Paints a chart with the specified parameters on the specified
+ painter.
+
+ \note If you are passing \c regions pointer, KD Chart will call
+ the \c clear() method on it, to delete any regions that might
+ still be registered from previous painting.
+ Make sure to copy any regions information into your own, private
+ data structure, in case you need to keep track of region information,
+ that was valid for such previous times.
+
+ \param painter the QPainter onto which the chart should be painted
+ \param params the parameters defining the chart
+ \param data the data that should be displayed as a chart
+ \param regions if not null, this points to a
+ KDChartDataRegionList that will be filled with the regions
+ of the data segments. This information is needed internally for both
+ recognizing the data segment when reporting mouse clicks and
+ for finding the correct position to draw the respective data value texts.
+ \param rect the position and size of the drawing area to be used,
+ if this parameter is zero the painter's device metrics will be used.
+ \param mustCalculateGeometry may be set to false if paint() is called
+ immediately after a previous call of setupGeometry() to save some
+ time in case you have specified a lot of data cells.
+ */
+void KDChart::paint( QPainter* painter,
+ KDChartParams* paraParams,
+ KDChartTableDataBase* paraData,
+ KDChartDataRegionList* regions,
+ const QRect* rect,
+ bool mustCalculateGeometry )
+{
+//qDebug("KDChart::paint() mustCalculateGeometry: "+QString(mustCalculateGeometry?"TRUE":"FALSE") );
+#if defined KDAB_EVAL
+ EvalDialog::checkEvalLicense( "KD Chart" );
+#endif
+
+ // delete old contents, to avoid the region from constantly growing
+ if( regions )
+ regions->clear();
+
+ KDChartParams* params = paraParams;
+ KDChartTableDataBase* data = paraData;
+ if( !paraParams && !paraData ){
+ qDebug("-----");
+ qDebug("Note: KDChart::paint() was called without \"params\" and without \"data\".");
+ qDebug("----- Showing a default bar chart.");
+ params = new KDChartParams();
+ params->setDatasetGap(3 * params->valueBlockGap());
+ params->setPrintDataValues( false );
+ params->setLegendPosition( KDChartParams::NoLegend );
+ params->setAxisLabelsVisible( KDChartAxisParams::AxisPosBottom, false );
+ params->setAxisShowGrid( KDChartAxisParams::AxisPosBottom, false );
+ params->setHeader1Text( "KDChartWidget" );
+ data = new KDChartTableData( 3, 1 );
+ // 1st series
+ data->setCell( 0, 0, 12.5 );
+ // 2nd series
+ data->setCell( 1, 0, 8.0 );
+ // 3rd series
+ data->setCell( 2, 0, 15.0 );
+ }
+
+ QRect drawRect;
+ bool bOk = true;
+ if( mustCalculateGeometry || !cpainter || cpainter->outermostRect().isNull() ){
+ if( rect )
+ drawRect = *rect;
+ else if( !painterToDrawRect( painter, drawRect ) ){
+ qDebug("ERROR: KDChart::paint() could not calculate a drawing area.");
+ bOk = false;
+ }
+ //qDebug("xxx" );
+ if( (params || data) && !setupGeometry( painter, params, data, drawRect ) ){
+ qDebug("ERROR: KDChart::paint() could not calculate the chart geometry.");
+ bOk = false;
+ }
+ }else{
+ drawRect = cpainter->outermostRect();
+ }
+
+ //qDebug("yyy" );
+
+ if( bOk ){
+ // Note: the following *must* paint the main-chart first
+ // and the additional chart afterwards
+ // since all axes computations are only done when
+ // the first chart is painted but will be needed for both of course.
+ //
+ bool paintFirst = true;
+ bool paintLast = ! ( cpainter && cpainter2 );
+ if ( cpainter ) { // can be 0 if no exceptions are used
+ //qDebug("zzz" );
+ cpainter->paint( painter, data, paintFirst, paintLast, regions, &drawRect, false );
+
+ paintFirst = false;
+ }
+ paintLast = true;
+ if ( cpainter2 ) // can be 0 if no exceptions are used
+ cpainter2->paint( painter, data, paintFirst, paintLast, regions, &drawRect, false );
+ }
+
+ if( !paraParams && !paraData ){
+ delete params;
+ delete data;
+ }
+ KDChartAutoColor::freeInstance(); // stuff that memory leak
+}
+
+
+/**
+ Paints a chart with the specified parameters on the specified
+ painter which should use a QPrinter as it's output device.
+
+ This method is provided for your convenience, it behaves
+ like the paint() method described above but additionally
+ it takes care for the output mode flag: Before painting is
+ started the internal optimizeOutputForScreen flag is set
+ to FALSE and after painting is done it is restored to
+ it's previous value.
+
+ \sa paint
+ */
+void KDChart::print( QPainter* painter, KDChartParams* params,
+ KDChartTableDataBase* data,
+ KDChartDataRegionList* regions,
+ const QRect* rect,
+ bool mustCalculateGeometry )
+{
+ bool oldOpt=true;
+ if( params ){
+ oldOpt = params->optimizeOutputForScreen();
+ params->setOptimizeOutputForScreen( false );
+ }
+ paint( painter, params, data, regions, rect, mustCalculateGeometry );
+ if( params )
+ params->setOptimizeOutputForScreen( oldOpt );
+}
+
+
+/*
+ This method is called at application shut-down and cleans up the
+ last created painter.
+ */
+void cleanupPainter()
+{
+ delete KDChart::cpainter;
+ delete KDChart::cpainter2;
+ KDChart::oldParams = 0;
+}
+
+#ifdef QSA
+void KDChart::initInterpreter( QSInterpreter* interpreter )
+{
+ privateInitInterpreter( interpreter );
+ interpreter->evaluate( globals() );
+}
+
+void KDChart::initProject( QSProject* project )
+{
+ project->createScript( QString::fromLatin1( "KDCHART_Globals" ), globals() );
+ privateInitInterpreter( project->interpreter() );
+}
+
+QString KDChart::globals()
+{
+ QString globals;
+ QMap<char*, double> intMap;
+
+ intMap.insert( "KDCHART_POS_INFINITE", KDCHART_POS_INFINITE );
+ intMap.insert( "KDCHART_NEG_INFINITE", KDCHART_NEG_INFINITE );
+ intMap.insert( "KDCHART_AlignAuto", KDCHART_AlignAuto );
+ intMap.insert( "KDCHART_ALL_AXES", KDCHART_ALL_AXES );
+ intMap.insert( "KDCHART_NO_AXIS", KDCHART_NO_AXIS );
+ intMap.insert( "KDCHART_ALL_DATASETS", KDCHART_ALL_DATASETS );
+ intMap.insert( "KDCHART_NO_DATASET", KDCHART_NO_DATASET );
+ intMap.insert( "KDCHART_UNKNOWN_CHART", KDCHART_UNKNOWN_CHART );
+ intMap.insert( "KDCHART_ALL_CHARTS", KDCHART_ALL_CHARTS );
+ intMap.insert( "KDCHART_NO_CHART", KDCHART_NO_CHART );
+ intMap.insert( "KDCHART_GLOBAL_LINE_STYLE", KDCHART_GLOBAL_LINE_STYLE );
+ intMap.insert( "KDCHART_AUTO_SIZE", KDCHART_AUTO_SIZE );
+ intMap.insert( "KDCHART_DATA_VALUE_AUTO_DIGITS", KDCHART_DATA_VALUE_AUTO_DIGITS );
+ intMap.insert( "KDCHART_SAGITTAL_ROTATION", KDCHART_SAGITTAL_ROTATION );
+ intMap.insert( "KDCHART_TANGENTIAL_ROTATION", KDCHART_TANGENTIAL_ROTATION );
+ intMap.insert( "KDCHART_PROPSET_NORMAL_DATA", KDCHART_PROPSET_NORMAL_DATA );
+ intMap.insert( "KDCHART_PROPSET_TRANSPARENT_DATA", KDCHART_PROPSET_TRANSPARENT_DATA );
+ intMap.insert( "KDCHART_PROPSET_HORI_LINE", KDCHART_PROPSET_HORI_LINE );
+ intMap.insert( "KDCHART_PROPSET_VERT_LINE", KDCHART_PROPSET_VERT_LINE );
+ intMap.insert( "KDCHART_SAGGITAL_ROTATION", KDCHART_SAGGITAL_ROTATION );
+ intMap.insert( "KDCHART_CNT_ORDINATES", KDCHART_CNT_ORDINATES );
+ intMap.insert( "KDCHART_MAX_POLAR_DELIMS_AND_LABELS_POS", KDCHART_MAX_POLAR_DELIMS_AND_LABELS_POS );
+ intMap.insert( "KDCHART_MAX_AXES", KDCHART_MAX_AXES );
+ intMap.insert( "KDCHART_AXIS_LABELS_AUTO_DELTA", KDCHART_AXIS_LABELS_AUTO_DELTA );
+ intMap.insert( "KDCHART_AXIS_LABELS_AUTO_LEAVEOUT", KDCHART_AXIS_LABELS_AUTO_LEAVEOUT );
+ intMap.insert( "KDCHART_AXIS_LABELS_AUTO_DIGITS", KDCHART_AXIS_LABELS_AUTO_DIGITS );
+ intMap.insert( "KDCHART_AXIS_GRID_AUTO_LINEWIDTH", KDCHART_AXIS_GRID_AUTO_LINEWIDTH );
+ intMap.insert( "KDCHART_AXIS_IGNORE_EMPTY_INNER_SPAN", KDCHART_AXIS_IGNORE_EMPTY_INNER_SPAN );
+ intMap.insert( "KDCHART_DONT_CHANGE_EMPTY_INNER_SPAN_NOW", KDCHART_DONT_CHANGE_EMPTY_INNER_SPAN_NOW );
+ intMap.insert( "DBL_MIN", DBL_MIN );
+ intMap.insert( "DBL_MAX", DBL_MAX );
+
+ for( QMapIterator<char*,double> it= intMap.begin(); it != intMap.end(); ++it ) {
+ // This is written this way to be efficient
+ globals += QString::fromLatin1( "const " );
+ globals += it.key();
+ globals += " = ";
+ globals += QString::number( it.data() );
+ globals += ";\n";
+ }
+
+ globals += QString::fromLatin1( "const KDCHART_AXIS_LABELS_AUTO_DATETIME_FORMAT=\"%1\";\n" )
+ .arg( QString::fromLatin1( KDCHART_AXIS_LABELS_AUTO_DATETIME_FORMAT ) );
+ globals += QString::fromLatin1( "const KDCHART_AXIS_LABELS_AUTO_LIMIT = 140319.64;\n" );
+ globals += QString::fromLatin1( "const KDCHART_DEFAULT_AXIS_GRID_COLOR = new Color(\"%1\");\n" )
+ .arg(KDCHART_DEFAULT_AXIS_GRID_COLOR.name());
+ globals += QString::fromLatin1( "const KDCHART_DATA_VALUE_AUTO_COLOR = new Color(\"%1\");\n" )
+ .arg( (KDCHART_DATA_VALUE_AUTO_COLOR)->name());
+
+
+ QMap<char*,QColor> colorMap;
+ colorMap.insert( "Qt.color0", Qt::color0 );
+ colorMap.insert( "Qt.color1", Qt::color1 );
+ colorMap.insert( "Qt.black", Qt::black );
+ colorMap.insert( "Qt.white", Qt::white );
+ colorMap.insert( "Qt.darkGray", Qt::darkGray );
+ colorMap.insert( "Qt.gray", Qt::gray );
+ colorMap.insert( "Qt.lightGray", Qt::lightGray );
+ colorMap.insert( "Qt.red", Qt::red );
+ colorMap.insert( "Qt.green", Qt::green );
+ colorMap.insert( "Qt.blue", Qt::blue );
+ colorMap.insert( "Qt.cyan", Qt::cyan );
+ colorMap.insert( "Qt.magenta", Qt::magenta );
+ colorMap.insert( "Qt.yellow", Qt::yellow );
+ colorMap.insert( "Qt.darkRed", Qt::darkRed );
+ colorMap.insert( "Qt.darkGreen", Qt::darkGreen );
+ colorMap.insert( "Qt.darkBlue", Qt::darkBlue );
+ colorMap.insert( "Qt.darkCyan", Qt::darkCyan );
+ colorMap.insert( "Qt.darkMagenta", Qt::darkMagenta );
+ colorMap.insert( "Qt.darkYellow", Qt::darkYellow );
+ for( QMapIterator<char*,QColor> it2= colorMap.begin(); it2 != colorMap.end(); ++it2 ) {
+ // This is written this way to be efficient
+ globals += QString::fromLatin1( it2.key() );
+ globals += QString::fromLatin1( " = new Color( " );
+ globals += QString::number( it2.data().red() );
+ globals += ',';
+ globals += QString::number( it2.data().green() );
+ globals += ',';
+ globals += QString::number( it2.data().blue() );
+ globals += QString::fromLatin1( " );\n" );
+ }
+ //qDebug( "%s",globals.latin1() );
+ return globals;
+}
+
+void KDChart::privateInitInterpreter( QSInterpreter* interpreter )
+{
+ interpreter->addWrapperFactory( new KDChartWrapperFactory );
+ interpreter->addObjectFactory ( new KDChartObjectFactory );
+}
+
+#endif
diff --git a/libkdchart/KDChart.h b/libkdchart/KDChart.h
new file mode 100644
index 0000000..4d4944e
--- /dev/null
+++ b/libkdchart/KDChart.h
@@ -0,0 +1,97 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHART_H__
+#define __KDCHART_H__
+
+#ifdef QSA
+#include <qsproject.h>
+#endif // QSA
+
+#include "KDChartGlobal.h"
+#include "KDChartTable.h"
+#include "KDChartUnknownTypeException.h"
+#include "KDChartParams.h"
+#include "KDChartDataRegion.h"
+
+/** \file KDChart.h
+ \brief Definition of a single entry-point to the charting engine for
+ applications that wish to provide their own QPainter.
+
+ It is not useful to instantiate the KDChart class as it only contains
+ static methods.
+ */
+
+class KDChartPainter;
+class QPainter;
+class QSInterpreter;
+
+
+class KDCHART_EXPORT KDChart
+{
+ friend void cleanupPainter();
+
+ public:
+ static bool setupGeometry( QPainter* painter,
+ KDChartParams* params,
+ KDChartTableDataBase* data,
+ const QRect& drawRect );
+
+ static bool painterToDrawRect( QPainter* painter, QRect& drawRect );
+
+ static void paint( QPainter*, KDChartParams*, KDChartTableDataBase*,
+ KDChartDataRegionList* regions = 0,
+ const QRect* rect = 0,
+ bool mustCalculateGeometry = true );
+
+ static void print( QPainter*, KDChartParams*, KDChartTableDataBase*,
+ KDChartDataRegionList* regions = 0,
+ const QRect* rect = 0,
+ bool mustCalculateGeometry = true );
+
+#ifdef QSA
+ static void initInterpreter( QSInterpreter* );
+ static void initProject( QSProject* );
+#endif
+
+ private:
+ KDChart(); // prevent instantiations
+
+ static KDChartParams* oldParams;
+ static KDChartPainter* cpainter;
+ static KDChartPainter* cpainter2;
+ static KDChartParams::ChartType cpainterType;
+ static KDChartParams::ChartType cpainterType2;
+
+#ifdef QSA
+ static QString globals();
+ static void privateInitInterpreter( QSInterpreter* interpreter );
+#endif
+};
+
+#endif
diff --git a/libkdchart/KDChartAreaPainter.cpp b/libkdchart/KDChartAreaPainter.cpp
new file mode 100644
index 0000000..19a8123
--- /dev/null
+++ b/libkdchart/KDChartAreaPainter.cpp
@@ -0,0 +1,80 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#include "KDChartAreaPainter.h"
+
+/**
+ \class KDChartAreaPainter KDChartAreaPainter.h
+
+ \brief Implements a chart painter that draws area charts.
+ */
+
+/**
+ Constructor. Sets up internal data structures as necessary.
+
+ \param params the KDChartParams structure that defines the chart
+ */
+ KDChartAreaPainter::KDChartAreaPainter( KDChartParams* params ) :
+KDChartLinesPainter( params )
+{
+ // This constructor intentionally left blank so far; we cannot setup the
+ // geometry yet since we do not know the size of the painter.
+}
+
+
+/**
+ Destructor.
+ */
+KDChartAreaPainter::~KDChartAreaPainter()
+{
+ // intentionally left blank
+}
+
+
+/**
+ Paints the actual data area.
+
+ \param painter the QPainter onto which the chart should be painted
+ \param data the data that will be displayed as a chart
+ \param paint2nd specifies whether the main chart or the additional chart is to be drawn now
+ \param regions a pointer to a list of regions that will be filled
+ with regions representing the data segments, if not null
+ */
+void KDChartAreaPainter::paintData( QPainter* painter,
+ KDChartTableDataBase* data,
+ bool paint2nd,
+ KDChartDataRegionList* regions )
+{
+ paintDataInternal( painter, data,
+ false, // non-centered points
+ false, // no line markers
+ true, // an area
+ paint2nd,
+ regions );
+}
+
diff --git a/libkdchart/KDChartAreaPainter.h b/libkdchart/KDChartAreaPainter.h
new file mode 100644
index 0000000..f334783
--- /dev/null
+++ b/libkdchart/KDChartAreaPainter.h
@@ -0,0 +1,50 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTAREAPAINTER_H__
+#define __KDCHARTAREAPAINTER_H__
+
+#include "KDChartLinesPainter.h"
+#include <KDChartTable.h>
+
+class KDChartParams;
+
+class KDChartAreaPainter : public KDChartLinesPainter
+{
+ friend class KDChartPainter;
+ protected:
+ KDChartAreaPainter( KDChartParams* params );
+ virtual ~KDChartAreaPainter();
+
+ virtual void paintData( QPainter* painter,
+ KDChartTableDataBase* data,
+ bool paint2nd,
+ KDChartDataRegionList* regions = 0 );
+};
+
+#endif
diff --git a/libkdchart/KDChartAxesPainter.cpp b/libkdchart/KDChartAxesPainter.cpp
new file mode 100644
index 0000000..68e70af
--- /dev/null
+++ b/libkdchart/KDChartAxesPainter.cpp
@@ -0,0 +1,4525 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klar�vdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#include <qpainter.h>
+#include <qlabel.h>
+
+#include <KDDrawText.h>
+#include "KDChartAxesPainter.h"
+#include "KDChartAxisParams.h"
+#include "KDChartParams.h"
+
+#include <stdlib.h>
+
+
+/**
+ Little helper function returning the number of seconds
+ between UTC start date 1970/01/01 00:00 and a given date \c dt.
+ The return value is negative for \c dt < 1970/01/01.
+ */
+int secondsSinceUTCStart( const QDateTime& dt )
+{
+ QDateTime dtStart( QDate( 1970, 1, 1 ) );
+ return dtStart.secsTo( dt );
+}
+
+
+/**
+ \class KDChartAxesPainter KDChartAxesPainter.h
+
+ \brief A common base class for classes that implement chart
+ painters for chart types ith axes.
+ */
+
+/**
+ Constructor. Sets up internal data structures as necessary.
+
+ \param params the KDChartParams structure that defines the chart
+ */
+ KDChartAxesPainter::KDChartAxesPainter( KDChartParams* params ) :
+KDChartPainter( params )
+{
+ // Intentionally left blank.
+ // We cannot setup the geometry yet
+ // since we do not know the size of the painter.
+}
+
+/**
+ Destructor.
+ */
+KDChartAxesPainter::~KDChartAxesPainter()
+{
+ // intentionally left blank
+}
+
+
+#if COMPAT_QT_VERSION < 0x030000
+QDateTime dateTimeFromString( const QString& s ) // only ISODate is allowed
+{
+ int year( s.mid( 0, 4 ).toInt() );
+ int month( s.mid( 5, 2 ).toInt() );
+ int day( s.mid( 8, 2 ).toInt() );
+ QString t( s.mid( 11 ) );
+ int hour( t.mid( 0, 2 ).toInt() );
+ int minute( t.mid( 3, 2 ).toInt() );
+ int second( t.mid( 6, 2 ).toInt() );
+ int msec( t.mid( 9, 3 ).toInt() );
+ if ( year && month && day )
+ return QDateTime( QDate( year, month, day ),
+ QTime( hour, minute, second, msec ) );
+ else
+ return QDateTime();
+}
+QString dateTimeToString( const QDateTime& dt ) // ISODate is returned
+{
+ QString date;
+ QString month(
+ QString::number( dt.date().month() ).rightJustify( 2, '0' ) );
+ QString day(
+ QString::number( dt.date().day() ).rightJustify( 2, '0' ) );
+ date = QString::number( dt.date().year() ) + "-" + month + "-" + day;
+ QString time;
+ time.sprintf( "%.2d:%.2d:%.2d",
+ dt.time().hour(), dt.time().minute(), dt.time().second() );
+ return date + "T" + time;
+}
+#endif
+
+
+/**
+ ReCalculate the labels based upon given nDelta and nDeltaPix.
+
+ This is necessary to build isometric axes.
+ */
+void reCalculateLabelTexts(
+ QPainter* painter,
+ const KDChartTableDataBase& data,
+ const KDChartParams& params,
+ uint axisNumber,
+ double averageValueP1000,
+ double delimLen,
+ internal__KDChart__CalcValues& cv )
+{
+ KDChartAxesPainter::calculateLabelTexts(
+ painter,
+ data,
+ params,
+ axisNumber,
+ averageValueP1000,
+ delimLen,
+ // start of reference parameters
+ cv.basicPos,
+ cv.orig,
+ cv.dest,
+ cv.pXDeltaFactor,
+ cv.pYDeltaFactor,
+ cv.pXDelimDeltaFaktor,
+ cv.pYDelimDeltaFaktor,
+ cv.nSubDelimFactor,
+ cv.pDelimDelta,
+ cv.nTxtHeight,
+ cv.pTextsX,
+ cv.pTextsY,
+ cv.pTextsW,
+ cv.pTextsH,
+ cv.textAlign,
+ cv.bLogarithmic,
+ cv.isDateTime,
+ cv.autoDtLabels,
+ cv.dtLow,
+ cv.dtHigh,
+ cv.dtDeltaScale,
+ true,
+ cv.nDelta,
+ cv.nDeltaPix );
+ const KDChartAxisParams & para = params.axisParams( axisNumber );
+ cv.bSteadyCalc = para.axisSteadyValueCalc();
+ cv.bDecreasing = para.axisValuesDecreasing();
+ cv.nLow = para.trueAxisLow();
+ cv.nHigh = para.trueAxisHigh();
+}
+
+
+bool KDChartAxesPainter::calculateAllAxesLabelTextsAndCalcValues(
+ QPainter* painter,
+ KDChartTableDataBase* data,
+ double areaWidthP1000,
+ double areaHeightP1000,
+ double& delimLen)
+{
+ uint iAxis;
+ double averageValueP1000 = QMIN(areaWidthP1000, areaHeightP1000);//( areaWidthP1000 + areaHeightP1000 ) / 2.0;
+ //qDebug("KChart::KDChartAxesPainter::calculateAllAxesLabelTextsAndCalcValues() averageValueP1000: %f", averageValueP1000);
+ // length of little delimiter-marks indicating axis scaling
+ delimLen = 20.0 * averageValueP1000; // per mille of area
+
+ // Determine axes calculation values and labels before drawing the axes.
+
+ // step #1: calculate all values independendly from the other axes' values
+ for( iAxis = 0; iAxis < KDCHART_MAX_AXES; ++iAxis )
+ {
+ internal__KDChart__CalcValues& cv = calcVal[iAxis];
+ cv.processThisAxis = ( params()->axisParams( iAxis ).axisVisible()
+ && KDChartAxisParams::AxisTypeUnknown
+ != params()->axisParams( iAxis ).axisType() );
+ if( cv.processThisAxis ){
+ cv.nSubDelimFactor = 0.0;
+ cv.pDelimDelta = 0.0;
+ cv.nTxtHeight = 0.0;
+ cv.pTextsX = 0.0;
+ cv.pTextsY = 0.0;
+ cv.pTextsW = 0.0;
+ cv.pTextsH = 0.0;
+ cv.textAlign = Qt::AlignHCenter | Qt::AlignVCenter;
+ cv.isDateTime = false;
+ cv.autoDtLabels = false;
+ calculateLabelTexts( painter,
+ *data,
+ *params(),
+ iAxis,
+ averageValueP1000,
+ delimLen,
+ // start of reference parameters
+ cv.basicPos,
+ cv.orig,
+ cv.dest,
+ cv.pXDeltaFactor,
+ cv.pYDeltaFactor,
+ cv.pXDelimDeltaFaktor,
+ cv.pYDelimDeltaFaktor,
+ cv.nSubDelimFactor,
+ cv.pDelimDelta,
+ cv.nTxtHeight,
+ cv.pTextsX,
+ cv.pTextsY,
+ cv.pTextsW,
+ cv.pTextsH,
+ cv.textAlign,
+ cv.bLogarithmic,
+ cv.isDateTime,
+ cv.autoDtLabels,
+ cv.dtLow,
+ cv.dtHigh,
+ cv.dtDeltaScale );
+ const KDChartAxisParams & para = params()->axisParams( iAxis );
+ cv.bSteadyCalc = para.axisSteadyValueCalc();
+ cv.bDecreasing = para.axisValuesDecreasing();
+ cv.nLow = para.trueAxisLow();
+ cv.nHigh = para.trueAxisHigh();
+ cv.nDelta = para.trueAxisDelta();
+ cv.nDeltaPix = para.trueAxisDeltaPixels();
+ cv.pLastX = cv.dest.x();
+ cv.pLastY = cv.dest.y();
+ }
+ }
+
+ // step #2: if isometric axes are desired adjust/re-calculate some values
+ for ( iAxis = 0; iAxis < KDCHART_MAX_AXES; ++iAxis ){
+ internal__KDChart__CalcValues& cv = calcVal[iAxis];
+ if( cv.processThisAxis
+ && cv.bSteadyCalc ){
+ const KDChartAxisParams & para = params()->axisParams( iAxis );
+ const uint isoRef = para.isometricReferenceAxis();
+ if( KDCHART_NO_AXIS != isoRef
+ && iAxis != isoRef
+ && ( KDCHART_MAX_AXES > isoRef
+ || KDCHART_ALL_AXES == isoRef ) ){
+ if( KDCHART_ALL_AXES == isoRef ){
+ uint iAxis2;
+ // first find the axis values to be taken as reference
+ double nDelta = cv.nDelta;
+ double nDeltaPix = cv.nDeltaPix;
+ double nSubDelimFactor = cv.nSubDelimFactor;
+ for ( iAxis2 = 0;
+ iAxis2 < KDCHART_MAX_AXES;
+ ++iAxis2 ){
+ internal__KDChart__CalcValues& cv2 = calcVal[iAxis2];
+ if( cv2.processThisAxis
+ && cv2.bSteadyCalc
+ && (0.0 != cv2.nDelta)
+ && (fabs(cv2.nDeltaPix / cv2.nDelta) < fabs(nDeltaPix / nDelta)) ){
+ if( (nDelta >= 0.0) == (cv2.nDelta >= 0.0) )
+ nDelta = cv2.nDelta;
+ else
+ nDelta = cv2.nDelta * -1.0;
+ if( (nDeltaPix >= 0.0) == (cv2.nDeltaPix >= 0.0) )
+ nDeltaPix = cv2.nDeltaPix;
+ else
+ nDeltaPix = cv2.nDeltaPix * -1.0;
+ if( (nSubDelimFactor >= 0.0) == (cv2.nSubDelimFactor >= 0.0) )
+ nSubDelimFactor = cv2.nSubDelimFactor;
+ else
+ nSubDelimFactor = cv2.nSubDelimFactor * -1.0;
+ }
+ }
+ // now adjust all axes (if necessary)
+ for ( iAxis2 = 0;
+ iAxis2 < KDCHART_MAX_AXES;
+ ++iAxis2 ){
+ internal__KDChart__CalcValues& cv2 = calcVal[iAxis2];
+ if( cv2.processThisAxis
+ && cv2.bSteadyCalc
+ && ( fabs(cv2.nDelta) != fabs(nDelta)
+ || fabs(cv2.nDeltaPix) != fabs(nDeltaPix) ) ){
+ //qDebug("\nrecalculating scale for axis %x", iAxis2);
+ //qDebug("cv2.nDelta %f cv2.nDeltaPix %f nDelta %f nDeltaPix %f\n",
+ // cv2.nDelta,cv2.nDeltaPix,nDelta,nDeltaPix);
+ if( (cv2.nDelta >= 0.0) == (nDelta >= 0.0) )
+ cv2.nDelta = nDelta;
+ else
+ cv2.nDelta = nDelta * -1.0;
+ if( (cv2.nDeltaPix >= 0.0) == (nDeltaPix >= 0.0) )
+ cv2.nDeltaPix = nDeltaPix;
+ else
+ cv2.nDeltaPix = nDeltaPix * -1.0;
+ reCalculateLabelTexts( painter,
+ *data,
+ *params(),
+ iAxis2,
+ averageValueP1000,
+ delimLen,
+ cv2 );
+ if( (cv2.nSubDelimFactor >= 0.0) == (nSubDelimFactor >= 0.0) )
+ cv2.nSubDelimFactor = nSubDelimFactor;
+ else
+ cv2.nSubDelimFactor = nSubDelimFactor * -1.0;
+ }
+ }
+ }else{
+ internal__KDChart__CalcValues& cv2 = calcVal[isoRef];
+ // adjust this axis or the other axis (if necessary)
+ if( cv2.processThisAxis
+ && cv2.bSteadyCalc
+ && ( cv2.nDelta != cv.nDelta
+ || cv2.nDeltaPix != cv.nDeltaPix ) ){
+ if( cv2.nDelta > cv.nDelta
+ || ( cv2.nDelta == cv.nDelta
+ && cv2.nDeltaPix < cv.nDeltaPix ) ){
+ // adjust this axis
+ //qDebug("recalculating scale for this axis %x", iAxis);
+ cv.nDelta = cv2.nDelta;
+ cv.nDeltaPix = cv2.nDeltaPix;
+ reCalculateLabelTexts(
+ painter,
+ *data,
+ *params(),
+ iAxis,
+ averageValueP1000,
+ delimLen,
+ cv );
+ cv.nSubDelimFactor = cv2.nSubDelimFactor;
+ }else{
+ // adjust the other axis
+ //qDebug("\nrecalculating scale for other axis %x", isoRef);
+ //qDebug("cv2.nDelta %f cv2.nDeltaPix %f cv.nDelta %f cv.nDeltaPix %f",
+ // cv2.nDelta,cv2.nDeltaPix,cv.nDelta,cv.nDeltaPix);
+ cv2.nDelta = cv.nDelta;
+ cv2.nDeltaPix = cv.nDeltaPix;
+ reCalculateLabelTexts(
+ painter,
+ *data,
+ *params(),
+ isoRef,
+ averageValueP1000,
+ delimLen,
+ cv2 );
+ cv2.nSubDelimFactor = cv.nSubDelimFactor;
+ }
+ }
+ }
+ }
+ }
+ }
+ return true;
+}
+
+
+/**
+ Paints the actual axes areas.
+
+ \param painter the QPainter onto which the chart should be painted
+ \param data the data that will be displayed as a chart
+ */
+void KDChartAxesPainter::paintAxes( QPainter* painter,
+ KDChartTableDataBase* data )
+{
+ if ( !painter || !data || 0 == params() )
+ return ;
+
+ const bool bMultiRowBarChart = KDChartParams::Bar == params()->chartType() &&
+ KDChartParams::BarMultiRows == params()->barChartSubType();
+
+ double areaWidthP1000 = _logicalWidth / 1000.0;
+ double areaHeightP1000 = _logicalHeight / 1000.0;
+ double averageValueP1000 = QMIN(areaWidthP1000, areaHeightP1000);//( areaWidthP1000 + areaHeightP1000 ) / 2.0;
+ // length of little delimiter-marks indicating axis scaling
+ double delimLen;
+
+//qDebug("-------------------------------------------------------------------------------------");
+
+ calculateAllAxesLabelTextsAndCalcValues( painter, data, areaWidthP1000, areaHeightP1000, delimLen );
+
+
+ // Now the labels are known, so let us paint the axes...
+ painter->save();
+ painter->setPen( Qt::NoPen );
+
+ bool screenOutput = params()->optimizeOutputForScreen();
+ uint iAxis;
+
+ for ( iAxis = 0; iAxis < KDCHART_MAX_AXES; ++iAxis ){
+ internal__KDChart__CalcValues& cv = calcVal[iAxis];
+ if( cv.processThisAxis ){
+
+ const KDChartAxisParams & para = params()->axisParams( iAxis );
+
+ internal__KDChart__CalcValues& cv = calcVal[iAxis];
+
+ const QColor labelsColor( para.axisLabelsColor() );
+
+ // Debugging axis areas:
+ //painter->fillRect(para.axisTrueAreaRect(), Qt::yellow);
+
+ uint lineWidth = 0 <= para.axisLineWidth()
+ ? para.axisLineWidth()
+ : -1 * static_cast < int > ( para.axisLineWidth()
+ * averageValueP1000 );
+ ( ( KDChartAxisParams& ) para ).setAxisTrueLineWidth( lineWidth );
+
+ uint gridLineWidth
+ = ( KDCHART_AXIS_GRID_AUTO_LINEWIDTH
+ == para.axisGridLineWidth() )
+ ? lineWidth
+ : ( ( 0 <= para.axisGridLineWidth() )
+ ? para.axisGridLineWidth()
+ : -1 * static_cast < int > ( para.axisGridLineWidth()
+ * averageValueP1000 ) );
+
+ uint gridSubLineWidth
+ = ( KDCHART_AXIS_GRID_AUTO_LINEWIDTH
+ == para.axisGridSubLineWidth() )
+ ? lineWidth
+ : ( ( 0 <= para.axisGridSubLineWidth() )
+ ? para.axisGridSubLineWidth()
+ : -1 * static_cast < int > ( para.axisGridSubLineWidth()
+ * averageValueP1000 ) );
+
+ // Magic to find out axis scaling factors and labels text height
+ // =============================================================
+ // - khz, 02/24/2001
+ //
+ // 1st Calculate the axis label texts height regarding to
+ // user-defined per-axis settings.
+ //
+ // 2nd This height is given to calculateLabelTexts() to
+ // calculate the delimiter and sub-delimiter distances as
+ // well as the axis scaling factors.
+ // If neccessary and possible the short replacement strings
+ // are taken that might have been specified by the user.
+ // - see KDChartAxisParams::setAxisLabelStringLists() -
+ //
+ // 3rd Before displaying the texts we make sure they fit into
+ // their space, if needed we will do the following
+ // in order to avoid clipping of text parts:
+ //
+ // (a) ABSCISSA axes only: rotate the texts in 5 steps
+ // until they are drawn vertically
+ //
+ // (b) further reduce the texts' font height down to 6pt
+ // .
+ //
+ // If the texts *still* don't fit into their space, we are lost
+ // and they will be clipped. Such is live.
+ //
+ // Why all this?
+ //
+ // Because I do not believe in axis areas growing and shrinking
+ // regarding to long or short label texts: start such behaviour
+ // and become mad.
+ //
+ // Better plan: ask the user to specify a way how to abbreviate
+ // label texts (e.g. by writing "200" instead
+ // of that wide and unreadable "200,000.00")
+ //
+ //
+ // F E A T U R E P L A N N E D F O R F U T U R E . . .
+ //
+ //
+
+ // Note: The labels-touch-edges flag may have been set to true
+ // inside the calculateLabelTexts() function.
+ bool bTouchEdges = para.axisLabelsTouchEdges();
+
+ // NOTE: The steady-value-calc flag may have been set to true
+ // inside the calculateLabelTexts() function
+ // by a special setAxisLabelTextParams() call,
+ // therefor we do not store its value before calling that function.
+ if( cv.bLogarithmic )
+ cv.nSubDelimFactor = 0.1;
+
+ const double nUsableAxisHeight = cv.pTextsH;
+ const double nUsableAxisWidth = cv.pTextsW;
+
+ const bool isHorizontalAxis
+ = (KDChartAxisParams::AxisPosBottom == cv.basicPos) ||
+ (KDChartAxisParams::AxisPosTop == cv.basicPos);
+
+ QStringList* labelTexts = ( QStringList* ) para.axisLabelTexts();
+ uint nLabels = ( 0 != labelTexts )
+ ? labelTexts->count()
+ : 0;
+ // start point of 1st delimiter on the axis-line == grid-start
+ QPoint p1( cv.orig );
+ // end point of 1st delimiter near the label text
+ QPoint p2( cv.orig );
+ // end point of small sub-delimiter
+ QPoint p2a( cv.orig );
+ // start point of 1st grid-line (beginnig at the axis)
+ QPoint pGA( cv.orig );
+ // end point of 1st grid-line at the other side of the chart
+ QPoint pGZ( cv.orig );
+ // start point of zero-line, this is often identical with p1
+ // but will be different in case of shifted zero-line
+ double axisZeroLineStartX = p1.x();
+ double axisZeroLineStartY = p1.y();
+
+ p2.setX( p2.x() + static_cast < int > ( cv.pXDelimDeltaFaktor * delimLen ) );
+ p2.setY( p2.y() + static_cast < int > ( cv.pYDelimDeltaFaktor * delimLen ) );
+ p2a.setX( p2a.x() + static_cast < int > ( cv.pXDelimDeltaFaktor * delimLen * 2.0 / 3.0 ) );
+ p2a.setY( p2a.y() + static_cast < int > ( cv.pYDelimDeltaFaktor * delimLen * 2.0 / 3.0 ) );
+ pGZ.setX( pGZ.x() - static_cast < int > ( cv.pXDelimDeltaFaktor * (_dataRect.width() - 1) ) );
+ pGZ.setY( pGZ.y() - static_cast < int > ( cv.pYDelimDeltaFaktor * (_dataRect.height() - 1) ) );
+
+ if ( nLabels ) {
+ // Sometimes the first or last labels partially reach out of
+ // their axis area: we allow this
+ const bool oldClippingFlag = painter->hasClipping();
+ painter->setClipping( false );
+
+ if( para.hasAxisFirstLabelText() )
+ labelTexts->first() = para.axisFirstLabelText();
+ if( para.hasAxisLastLabelText() )
+ labelTexts->last() = para.axisLastLabelText();
+
+ const double pXDelta = cv.pXDeltaFactor * cv.pDelimDelta;
+ const double pYDelta = cv.pYDeltaFactor * cv.pDelimDelta;
+
+ // draw label texts and delimiters and grid
+ painter->setPen( QPen( para.axisLineColor(),
+ lineWidth ) );
+
+ const QString formatDT = cv.isDateTime
+ ? para.axisLabelsDateTimeFormat()
+ : QString();
+
+ // calculate font size
+ const double minTextHeight = para.axisLabelsFontMinSize();
+ //qDebug("KChart::KDChartAxesPainter::paintAxes() cv.nTxtHeight: %f minTextHeight: %f", cv.nTxtHeight, minTextHeight);
+ if ( minTextHeight > cv.nTxtHeight )
+ cv.nTxtHeight = minTextHeight;
+ QFont actFont( para.axisLabelsFont() );
+ if ( para.axisLabelsFontUseRelSize() ) {
+ actFont.setPixelSize( static_cast < int > ( cv.nTxtHeight ) );
+ }
+ painter->setFont( actFont );
+ QFontMetrics fm( painter->fontMetrics() );
+
+ int nLeaveOut = 0;
+ int nRotation = 0;
+
+ // Draw simple string labels
+ // or calculate and draw nice Date/Time ruler?
+ QString commonDtHeader;
+ if( cv.autoDtLabels ){
+ cv.textAlign = Qt::AlignCenter;
+ //qDebug(dtLow.toString("\nd.MM.yyyy - h:mm:ss" ));
+ //qDebug(dtHigh.toString( "d.MM.yyyy - h:mm:ss" ));
+ const QDate& dLow = cv.dtLow.date();
+ const QTime& tLow = cv.dtLow.time();
+ const QDate& dHigh = cv.dtHigh.date();
+ const QTime& tHigh = cv.dtHigh.time();
+ bool sameYear = dLow.year() == dHigh.year();
+ bool sameMonth = sameYear && (dLow.month() == dHigh.month() );
+ bool sameDay = sameMonth && (dLow.day() == dHigh.day() );
+ bool sameHour = sameDay && (tLow.hour() == tHigh.hour() );
+ bool sameMinute = sameHour && (tLow.minute() == tHigh.minute());
+ bool sameSecond = sameMinute && (tLow.second() == tHigh.second());
+ if( sameDay ){
+ commonDtHeader = QString::number( dLow.day() )
+ + ". "
+#if COMPAT_QT_VERSION >= 0x030000
+ + QDate::longMonthName( dLow.month() )
+#else
+ + dLow.monthName( dLow.month() )
+#endif
+ + ' '
+ + QString::number( dLow.year() );
+ if( sameHour ){
+ commonDtHeader += " / "
+ + QString::number( tLow.hour() )
+ + ':';
+ if( sameMinute ){
+ if( 10 > tLow.minute() )
+ commonDtHeader += '0';
+ commonDtHeader += QString::number( tLow.minute() )
+ + ':';
+ if( sameSecond ){
+ if( 10 > tLow.second() )
+ commonDtHeader += '0';
+ commonDtHeader += QString::number( tLow.second() );
+ //
+ // " Huston, we have a problem! "
+ //
+ // Currently we don't support milli secs
+ // since they will not fit into a double
+ // when looking at years...
+ //
+ // This will be improved in release 2.0.
+ // (khz, 2002/07/12)
+ }
+ else
+ commonDtHeader += "00";
+ }
+ else
+ commonDtHeader += "00";
+ }
+ }else if( sameMonth )
+#if COMPAT_QT_VERSION >= 0x030000
+ commonDtHeader = QDate::longMonthName( dLow.month() )
+#else
+ commonDtHeader = dLow.monthName( dLow.month() )
+#endif
+ + ' '
+ + QString::number( dLow.year() );
+ else if( sameYear )
+ commonDtHeader = QString::number( dLow.year() );
+ //if( !commonDtHeader.isEmpty() )
+ // qDebug(commonDtHeader);
+ }else{
+ // make sure all label texts fit into their space
+ // by rotating and/or shrinking the texts
+ // or by leaving out some of the labels
+ QRegion unitedRegions;
+
+ const bool tryLeavingOut =
+ ( para.axisValueLeaveOut() == KDCHART_AXIS_LABELS_AUTO_LEAVEOUT )
+ || ( 0 < para.axisValueLeaveOut() );
+ if( tryLeavingOut ) {
+ if( para.axisValueLeaveOut()
+ == KDCHART_AXIS_LABELS_AUTO_LEAVEOUT )
+ nLeaveOut = 0;
+ else
+ nLeaveOut = para.axisValueLeaveOut();
+
+ }
+ else
+ nLeaveOut = 0;
+ int stepWidthLeaveOut = nLeaveOut+1;
+ int iStepsLeaveOut = 0;
+
+ const bool tryShrinking = !para.axisLabelsDontShrinkFont();
+ const double nInitialTxtHeight = cv.nTxtHeight;
+
+ const bool tryRotating = isHorizontalAxis
+ && !para.axisLabelsDontAutoRotate();
+ const int nInitialRotation = ( (360 > para.axisLabelsRotation())
+ && (270 <= para.axisLabelsRotation()) )
+ ? para.axisLabelsRotation()
+ : 0;
+ nRotation = nInitialRotation;
+
+ bool textsDontFitIntoArea;
+ bool textsOverlapping;
+ bool textsMatching;
+ do {
+ textsDontFitIntoArea = false;
+ textsOverlapping = false;
+ textsMatching = true;
+ // test if all texts match without mutually overlapping
+ unitedRegions = QRegion();
+ int align = nRotation
+ ? (Qt::AlignRight | Qt::AlignVCenter) // adjusting for rotation
+ : cv.textAlign;
+ QPoint anchor(200,200);
+ int iLeaveOut = 0;
+ double iLabel=0.0;
+ for ( QStringList::Iterator it = labelTexts->begin();
+ it != labelTexts->end();
+ ++it ) {
+ iLabel += 1.0;
+ if( iLeaveOut < nLeaveOut ) {
+ ++iLeaveOut;
+ } else {
+ iLeaveOut = 0;
+ anchor.setX( p2.x() + static_cast < int > ( pXDelta * (iLabel - 0.5) ) );
+ anchor.setY( p2.y() + static_cast < int > ( pYDelta * (iLabel - 0.5) ) );
+
+ // allow for shearing and/or scaling of the painter
+ anchor = painter->worldMatrix().map( anchor );
+
+ QString text;
+ if( cv.isDateTime ){
+#if COMPAT_QT_VERSION >= 0x030000
+ QDateTime dt( QDateTime::fromString( *it,
+ Qt::ISODate ) );
+ text = dt.toString( formatDT );
+#else
+ QDateTime dt( dateTimeFromString( *it ) );
+ text = dt.toString();
+#endif
+ }else{
+ text = *it;
+ }
+ KDDrawTextRegionAndTrueRect infosKDD =
+ KDDrawText::measureRotatedText( painter,
+ nRotation,
+ anchor,
+ text,
+ 0,
+ align,
+ &fm,
+ false,
+ false,
+ 15 );
+ if( infosKDD.region.boundingRect().left()
+ < params()->globalLeadingLeft()+1 ){
+ textsMatching = false;
+ textsDontFitIntoArea = true;
+ //qDebug("too wide");
+ }
+ //qDebug("nRotation: %i",nRotation);
+ QRegion sectReg;
+ if( nRotation ){
+ //qDebug("test 1");
+ sectReg = infosKDD.region.intersect( unitedRegions );
+ }else{
+ //qDebug("test 2");
+ QRect rect( infosKDD.region.boundingRect() );
+ rect.addCoords(-2,-2,2,2);
+ QRegion biggerRegion( rect );
+ sectReg = biggerRegion.intersect( unitedRegions );
+ }
+ if ( sectReg.isEmpty() )
+ unitedRegions = unitedRegions.unite( infosKDD.region );
+ else {
+ textsMatching = false;
+ textsOverlapping = true;
+ //qDebug("label regions are intersecting");
+ break;
+ }
+ }
+ }
+/*
+ if(!iAxis){
+
+ qDebug("nTxtHeight: "+QString::number(cv.nTxtHeight)+" nRotation: "+QString::number(nRotation)+
+ " matching: "+QString(textsMatching ? "TRUE":"FALSE"));
+ qDebug("nUsableAxisHeight: %f, unitedRegions.boundingRect().height(): %i ",
+ nUsableAxisHeight, unitedRegions.boundingRect().height());
+ }
+*/
+ if( isHorizontalAxis ) {
+ if( nUsableAxisHeight < unitedRegions.boundingRect().height() ){
+ //textsMatching = false;
+ textsDontFitIntoArea = true;
+ }
+ } else {
+ if( nUsableAxisWidth < unitedRegions.boundingRect().width() ){
+ //qDebug("textsMatching: %s",textsMatching ? "TRUE" : "FALSE");
+ textsMatching = false;
+ textsDontFitIntoArea = true;
+ //qDebug("too wide");
+ }
+ //else qDebug("not too wide");
+ }
+ /*
+ if(textsMatching && !iAxis){
+ qDebug("--------------------------");
+ qDebug("nTxtHeight: "+QString::number(cv.nTxtHeight)+" nRotation: "+QString::number(nRotation));
+ qDebug("matching");
+ }
+ */
+ if( !textsMatching ) {
+ bool rotatingDoesNotHelp = false;
+ // step 1: In case of labels being too wide
+ // to fit into the available space
+ // we try to rotate the texts in 5 steps.
+ // This is done for Abscissa axes only.
+ if ( tryRotating ) {
+ //qDebug("try rotating");
+ // The following is designed for horizontal axes
+ // since we currently don't support label rotating
+ // on vertical axes. (khz, 2002/08/15)
+ if( textsDontFitIntoArea ){
+ if( nRotation != nInitialRotation ){
+ //textsDontFitIntoArea = false;
+ nRotation = nInitialRotation;
+ }
+ rotatingDoesNotHelp = true;
+ //qDebug("rotating does not help (a)");
+ }
+ else{
+ if( nRotation ) {
+ if( 270 < nRotation ) {
+ nRotation -= 5;
+ if( 270 > nRotation )
+ nRotation = 270; // drawing vertically now
+ } else {
+ if( nInitialRotation )
+ nRotation = nInitialRotation;
+ else
+ nRotation = 0; // reset rotation to ZERO
+ rotatingDoesNotHelp = true;
+ //qDebug("rotating does not help (b)");
+ }
+ } else {
+ if( nInitialRotation )
+ nRotation = nInitialRotation;
+ else
+ nRotation = 350; // (re-)start rotating with -10
+ }
+ }
+ }
+ if ( !tryRotating || rotatingDoesNotHelp ) {
+
+ // step 2: In case of labels being too wide and
+ // rotating them did not help or is forbidden
+ // we try to reduce the font size.
+ if ( tryShrinking && (minTextHeight < cv.nTxtHeight) ) {
+ //qDebug("try shrinking");
+ cv.nTxtHeight -= 1.0;
+ if ( minTextHeight > cv.nTxtHeight )
+ cv.nTxtHeight = minTextHeight;
+ } else {
+
+ // step 3: In case reducing the font size is not possible
+ // any further (or is not allowed at all) we try
+ // to leave out some of the labels.
+ if( tryLeavingOut
+ && textsOverlapping
+ && (nLeaveOut+1 < static_cast < int > ( nLabels ) ) ) {
+ //qDebug("try leaving out");
+ ++iStepsLeaveOut;
+ //if(!iAxis)qDebug("iStepsLeaveOut: %i", iStepsLeaveOut);
+ nLeaveOut =
+ iStepsLeaveOut*stepWidthLeaveOut - 1;
+ if( tryShrinking )
+ cv.nTxtHeight = nInitialTxtHeight;
+ }
+ else
+ break;
+ }
+ if( tryShrinking ) {
+ actFont.setPixelSize( static_cast < int > ( cv.nTxtHeight ) );
+ //qDebug("axis: cv.nTxtHeight: %f", iAxis, cv.nTxtHeight);
+ painter->setFont( actFont );
+ fm = painter->fontMetrics();
+ }
+ }
+ }
+//qDebug("nLeaveOut: %i",nLeaveOut);
+ } while( !textsMatching );
+
+ if( nRotation ){
+ // The following is designed for horizontal axes
+ // since we currently don't support label rotating
+ // on vertical axes. (khz, 2002/08/15)
+ //int oldVert = textAlign & (Qt::AlignTop | Qt::AlignBottom);
+ //int steepness = abs(270-nRotation);
+ //bool steep = (30 > steepness);
+ cv.textAlign = Qt::AlignRight | Qt::AlignVCenter; // adjusting for rotation
+ //cv.textAlign = Qt::AlignRight | Qt::AlignVCenter;
+ /* ( steep ? Qt::AlignVCenter : oldVert);*/
+ //int dx = pXDelta / 2 - steep ? (nTxtHeight / 4) : 0;
+ double dx = (pXDelta / 2) - (cv.nTxtHeight / 4);
+ double dy = /*steep ? 0 : */(cv.nTxtHeight / 2.0);
+ cv.pTextsX += dx;
+ cv.pTextsY += dy;
+ }
+ /*
+ QBrush oldBrush = painter->brush();
+ QRegion oldReg = painter->clipRegion();//QPainter::CoordPainter);
+ painter->setBrush(Qt::Dense4Pattern);
+ painter->setClipRegion(unitedRegions);//,QPainter::CoordPainter);
+ painter->drawRect(0,0,2000,1500);
+ painter->setClipRegion(oldReg);//,QPainter::CoordPainter);
+ painter->setBrush(oldBrush);
+ */
+ /*if(!iAxis){
+ qDebug("==========================");
+ qDebug("nTxtHeight: "+QString::number(nTxtHeight)+" nRotation: "+QString::number(nRotation));
+ qDebug(textsMatching ? "matching":"not matching");
+ }*/
+ }
+
+ painter->setFont( actFont );
+ fm = QFontMetrics( painter->fontMetrics() );
+
+ // set colour of grid pen
+ QPen gridPen, leaveOutGridPen;
+ if( para.axisShowGrid() && !bMultiRowBarChart )
+ gridPen.setColor( para.axisGridColor() );
+
+ const int pXDeltaDiv2 = static_cast < int > ( pXDelta / 2.0 );
+ const int pYDeltaDiv2 = static_cast < int > ( pYDelta / 2.0 );
+
+ bool bDrawAdditionalSubGridLine = false;
+ double pGXMicroAdjust = 0.0;
+ double pGYMicroAdjust = 0.0;
+ if ( !bTouchEdges ) {
+ // adjust the data values pos
+ p1.setX( p1.x() + pXDeltaDiv2 );
+ p1.setY( p1.y() + pYDeltaDiv2 );
+ p2.setX( p2.x() + pXDeltaDiv2 );
+ p2.setY( p2.y() + pYDeltaDiv2 );
+ // adjust the short delimiter lines pos
+ p2a.setX( p2a.x() + pXDeltaDiv2 );
+ p2a.setY( p2a.y() + pYDeltaDiv2 );
+ // adjust grid lines pos
+ bDrawAdditionalSubGridLine =
+ isHorizontalAxis && !
+ params()->axisParams(
+ KDChartAxisParams::AxisPosRight ).axisVisible() &&
+ !bMultiRowBarChart;
+ pGA.setX( pGA.x() + pXDeltaDiv2 );
+ pGA.setY( pGA.y() + pYDeltaDiv2 );
+ pGZ.setX( pGZ.x() + pXDeltaDiv2 );
+ pGZ.setY( pGZ.y() + pYDeltaDiv2 );
+ // fine-tune grid line pos for grid of vertical axis
+ if( KDChartAxisParams::AxisTypeNORTH == para.axisType() ) {
+ pGXMicroAdjust = cv.pXDeltaFactor * lineWidth / 2.0;
+ pGYMicroAdjust = cv.pYDeltaFactor * lineWidth / 2.0;
+ }
+ }
+ double x1, y1, x2, y2, xGA, yGA, xGZ, yGZ,
+ p1X, p1Y, p2X, p2Y, pGAX, pGAY, pGZX, pGZY, xT, yT;
+
+ double pXSubDelimDelta = pXDelta * cv.nSubDelimFactor;
+ double pYSubDelimDelta = pYDelta * cv.nSubDelimFactor;
+
+ if ( !cv.autoDtLabels
+ && 0.0 != cv.nSubDelimFactor
+ && para.axisShowSubDelimiters()
+ && para.axisLabelsVisible()
+ && !nLeaveOut ) {
+ QPen pen( para.axisLineColor(), static_cast < int > ( 0.5 * lineWidth ) );
+ uint penWidth = pen.width();
+ bool bOk = true;
+
+ if( cv.bLogarithmic )
+ cv.nSubDelimFactor = 0.1;
+
+ while ( fabs( ( pXDelta + pYDelta ) * cv.nSubDelimFactor / 6.0 )
+ <= 1.0 + penWidth
+ && bOk ) {
+ if ( 0 < penWidth ) {
+ --penWidth;
+ pen.setWidth( penWidth );
+ }else{
+ if( cv.bLogarithmic ){
+ break; // there is nothing we can do: we allways
+ // want 10 sub-delims per logarithmic step
+ }else{
+ if ( 0.5 != cv.nSubDelimFactor ) {
+ // emercency: reduce number of sub-scaling
+ cv.nSubDelimFactor = 0.5;
+
+ pXSubDelimDelta = pXDelta * cv.nSubDelimFactor;
+ pYSubDelimDelta = pYDelta * cv.nSubDelimFactor;
+ } else
+ bOk = false;
+ }
+ }
+ }
+ if ( bOk ) {
+ x1 = p1.x();
+ y1 = p1.y();
+ x2 = p2a.x();
+ y2 = p2a.y();
+ xGA = pGA.x();
+ yGA = pGA.y();
+ xGZ = pGZ.x();
+ yGZ = pGZ.y();
+ p1X = x1;
+ p1Y = y1;
+ p2X = x2;
+ p2Y = y2;
+ pGAX = xGA;
+ pGAY = yGA;
+ pGZX = xGZ;
+ pGZY = yGZ;
+
+ // set up grid pen for drawing the sub-grid lines
+ const QPen oldGridPen( gridPen );
+ if ( para.axisShowGrid() ) {
+ gridPen.setColor( para.axisGridSubColor() );
+ gridPen.setWidth( gridSubLineWidth );
+ gridPen.setStyle( para.axisGridSubStyle() );
+ }
+ const QPen oldPen( painter->pen() );
+ painter->setPen( pen );
+ double nSubDelim = ( labelTexts->count() - 1 )
+ / cv.nSubDelimFactor;
+
+ //qDebug("subDelim: %f",
+ modf( nSubDelim, &nSubDelim );
+
+ int logarithCnt = 1;
+ double xLogarithOffs = 0;
+ double yLogarithOffs = 0;
+ double dDummy;
+ double mainDelim = 0.0;
+ bool paint = true;
+
+ for ( double iDelim = 1.0;
+ iDelim <= nSubDelim + 1.0;
+ iDelim += 1.0, logarithCnt++ ) {
+ // test if it is a sub or a main delimiter
+ if ( mainDelim > 0.0 )
+ paint = true;
+ else
+ paint = false;
+
+ if ( cv.bLogarithmic )
+ {
+ if ( logarithCnt == 11 )
+ {
+ xLogarithOffs +=
+ pXDelta * log10( 10*cv.nSubDelimFactor*10 );
+ yLogarithOffs +=
+ pYDelta * log10( 10*cv.nSubDelimFactor*10 );
+ logarithCnt=1;
+ }
+
+ pXSubDelimDelta =
+ pXDelta * log10( 10*cv.nSubDelimFactor*logarithCnt );
+ pYSubDelimDelta =
+ pYDelta * log10( 10*cv.nSubDelimFactor*logarithCnt );
+ }
+
+ if ( para.axisShowGrid() && !bMultiRowBarChart) {
+ // draw the sub grid line
+ if( 0.0 != modf((iDelim-1.0) * cv.nSubDelimFactor, &dDummy) )
+
+ saveDrawLine( *painter,
+ QPoint( static_cast<int>( pGAX - pGXMicroAdjust ),
+ static_cast<int>( pGAY - pGYMicroAdjust ) ),
+ QPoint( static_cast<int>( pGZX - pGXMicroAdjust ),
+ static_cast<int>( pGZY - pGYMicroAdjust ) ),
+ gridPen );
+
+ if( cv.bLogarithmic ){
+ pGAX = xGA + pXSubDelimDelta + xLogarithOffs;
+ pGAY = yGA + pYSubDelimDelta + yLogarithOffs;
+ pGZX = xGZ + pXSubDelimDelta + xLogarithOffs;
+ pGZY = yGZ + pYSubDelimDelta + yLogarithOffs;
+ }else{
+ pGAX = xGA + iDelim * pXSubDelimDelta;
+ pGAY = yGA + iDelim * pYSubDelimDelta;
+ pGZX = xGZ + iDelim * pXSubDelimDelta;
+ pGZY = yGZ + iDelim * pYSubDelimDelta;
+ /*
+ if( !modf(iDelim * cv.nSubDelimFactor, &dDummy) ){
+ pGAX = xGA + (iDelim * cv.nSubDelimFactor) * pXDelta;
+ pGAY = yGA + (iDelim * cv.nSubDelimFactor) * pYDelta;
+ pGZX = xGZ + (iDelim * cv.nSubDelimFactor) * pXDelta;
+ pGZY = yGZ + (iDelim * cv.nSubDelimFactor) * pYDelta;
+ }
+ */
+ }
+ }
+
+
+ // draw the short delimiter line
+ // PENDING: Michel - make sure not to draw the sub-delimiters over the main ones.
+ // by testing if it is a sub delimiter or a main one
+ if ( paint )
+ painter->drawLine( QPoint( static_cast<int>( p1X ), static_cast<int>( p1Y ) ),
+ QPoint( static_cast<int>( p2X ), static_cast<int>( p2Y ) ) );
+
+ mainDelim += 1.0;
+
+
+ if( cv.bLogarithmic ){
+ p1X = x1 + pXSubDelimDelta + xLogarithOffs;
+ p1Y = y1 + pYSubDelimDelta + yLogarithOffs;
+ p2X = x2 + pXSubDelimDelta + xLogarithOffs;
+ p2Y = y2 + pYSubDelimDelta + yLogarithOffs;
+ }else{
+ p1X = x1 + iDelim * pXSubDelimDelta;
+ p1Y = y1 + iDelim * pYSubDelimDelta;
+ p2X = x2 + iDelim * pXSubDelimDelta;
+ p2Y = y2 + iDelim * pYSubDelimDelta;
+ }
+
+ if ( mainDelim >= nSubDelim/(labelTexts->count() -1) )
+ mainDelim = 0.0;
+
+
+ } // for
+ // draw additional sub grid line
+ if( bDrawAdditionalSubGridLine
+ && para.axisShowGrid() ) {
+
+ saveDrawLine( *painter,
+ QPoint( static_cast<int>( pGAX - pGXMicroAdjust ),
+ static_cast<int>( pGAY - pGYMicroAdjust ) ),
+ QPoint( static_cast<int>( pGZX - pGXMicroAdjust ),
+ static_cast<int>( pGZY - pGYMicroAdjust ) ),
+ gridPen );
+
+ }
+ painter->setPen( oldPen );
+ gridPen = oldGridPen;
+ }
+ }
+ x1 = p1.x();
+ y1 = p1.y();
+ x2 = p2.x();
+ y2 = p2.y();
+ xGA = pGA.x();
+ yGA = pGA.y();
+ xGZ = pGZ.x();
+ yGZ = pGZ.y();
+ p1X = x1;
+ p1Y = y1;
+ p2X = x2;
+ p2Y = y2;
+ pGAX = xGA;
+ pGAY = yGA;
+ pGZX = xGZ;
+ pGZY = yGZ;
+ xT = cv.pTextsX;
+ yT = cv.pTextsY;
+ // set up grid pen for drawing the normal grid lines
+ if ( para.axisShowGrid() ) {
+ gridPen.setWidth( gridLineWidth );
+ gridPen.setStyle( para.axisGridStyle() );
+ // if axis not visible draw the 1st grid line too
+ if( !para.axisLineVisible() )
+ saveDrawLine( *painter, cv.orig, cv.dest, gridPen );
+ }
+ if( nLeaveOut ) {
+ leaveOutGridPen = gridPen;
+ leaveOutGridPen.setWidth( gridLineWidth / 2 );
+ leaveOutGridPen.setStyle( Qt::DotLine );
+ }
+ // =========================================================
+ // || The labels and delimiters and grid printing loops ||
+ // =========================================================
+ //
+ double iLabel = 0.0;
+ if( cv.autoDtLabels )
+ {
+ /*
+ qDebug("\ndtLow: %i %i %i %i:%i:%i",
+ dtLow.date().year(),
+ dtLow.date().month(),
+ dtLow.date().day(),
+ dtLow.time().hour(),
+ dtLow.time().minute(),
+ dtLow.time().second());
+ qDebug("dtHigh: %i %i %i %i:%i:%i",
+ dtHigh.date().year(),
+ dtHigh.date().month(),
+ dtHigh.date().day(),
+ dtHigh.time().hour(),
+ dtHigh.time().minute(),
+ dtHigh.time().second());
+ */
+ int pXD = static_cast <int> (cv.pXDelimDeltaFaktor * 1.25 * (cv.nTxtHeight+4));
+ int pYD = static_cast <int> (cv.pYDelimDeltaFaktor * 1.25 * (cv.nTxtHeight+4));
+ int orgXD = pXD;
+ int orgYD = pYD;
+ cv.pTextsW = fabs( (0.0 == pXDelta) ? pXD : pXDelta );
+ cv.pTextsH = fabs( (0.0 == pYDelta) ? pYD : pYDelta );
+
+ double pSecX = x1;
+ double pSecY = y1;
+ bool secPaint= false;
+ double pMinX = x1;
+ double pMinY = y1;
+ bool minPaint= false;
+ double pHourX = x1;
+ double pHourY = y1;
+ bool hourPaint= false;
+ double pDayX = x1;
+ double pDayY = y1;
+ bool dayPaint= false;
+ /* khz: currently not used
+ double pWeekX = x1;
+ double pWeekY = y1;
+ bool weekPaint= false;
+ */
+ double pMonthX = x1;
+ double pMonthY = y1;
+ bool monthPaint= false;
+ /*double pQuarterX = x1;
+ double pQuarterY = y1;
+ bool minPaint= false;
+ */
+ double pYearX = x1;
+ double pYearY = y1;
+ bool yearPaint= false;
+
+ double pXYDelta = fabs( pXDelta ) + fabs( pYDelta );
+
+ if( 0.0 == para.trueAxisDeltaPixels() )
+ ( ( KDChartAxisParams& ) para ).setTrueAxisDeltaPixels( QMIN(_logicalWidth, _logicalHeight) / 150 );
+
+ bool dtGoDown = cv.dtLow > cv.dtHigh;
+ int mult = dtGoDown ? -1 : 1;
+ const QDateTime& startDt = dtGoDown ? cv.dtHigh : cv.dtLow;
+
+ ( ( KDChartAxisParams& ) para ).setAxisDtLowPos( x1, y1 );
+ // adjust stored dt-low and scale settings
+ ( ( KDChartAxisParams& ) para ).setTrueAxisDtLow( startDt );
+ ( ( KDChartAxisParams& ) para ).setTrueAxisDtScale( cv.dtDeltaScale );
+
+ int gridDX = pGZ.x() - pGA.x();
+ int gridDY = pGZ.y() - pGA.y();
+ if ( para.axisShowGrid() ) {
+ gridPen.setColor( para.axisGridColor() );
+ gridPen.setWidth( gridLineWidth );
+ gridPen.setStyle( para.axisGridStyle() );
+ }
+ QPen subGridPen( gridPen.color(), 1, para.axisGridStyle() );
+ QPen subSubGridPen( gridPen.color(), 1, para.axisGridSubStyle() );
+ QPen pen = subGridPen;
+
+ QDateTime dt( startDt );
+ QDateTime newDt( startDt );
+ for( uint i=1; i <= nLabels; ++i ){
+ switch( cv.dtDeltaScale ) {
+ case KDChartAxisParams::ValueScaleSecond:
+ dtAddSecs( dt, 1 * mult, newDt );
+ break;
+ case KDChartAxisParams::ValueScaleMinute:
+ dtAddSecs( dt, 60 * mult, newDt );
+ break;
+ case KDChartAxisParams::ValueScaleHour:
+ dtAddSecs( dt, 3600 * mult, newDt );
+ break;
+ case KDChartAxisParams::ValueScaleDay:
+ dtAddDays( dt, 1 * mult, newDt );
+ break;
+ case KDChartAxisParams::ValueScaleWeek:
+ dtAddDays( dt, 7 * mult, newDt );
+ break;
+ case KDChartAxisParams::ValueScaleMonth:
+ dtAddMonths( dt,1 * mult, newDt );
+ break;
+ case KDChartAxisParams::ValueScaleQuarter:
+ dtAddMonths( dt,3 * mult, newDt );
+ break;
+ case KDChartAxisParams::ValueScaleYear:
+ dtAddYears( dt, 1 * mult, newDt );
+ break;
+ default:
+ dtAddDays( dt, 1 * mult, newDt );
+ break;
+ }
+ const QDateTime& testDt
+ = dtGoDown
+ ? ( ( newDt < cv.dtLow )
+ ? cv.dtLow
+ : newDt )
+ : ( ( newDt > cv.dtHigh )
+ ? cv.dtHigh
+ : newDt );
+ /*
+ qDebug(" dt: %i %i %i %i:%i:%i",
+ newDt.date().year(),newDt.date().month(),newDt.date().day(),
+ newDt.time().hour(),newDt.time().minute(),newDt.time().second());
+ qDebug("testDt: %i %i %i %i:%i:%i",
+ testDt.date().year(),testDt.date().month(),testDt.date().day(),
+ testDt.time().hour(),testDt.time().minute(),testDt.time().second());
+ */
+ bool endLoop = (i == nLabels) || (&testDt != &newDt);
+
+ secPaint = ( KDChartAxisParams::ValueScaleSecond >= cv.dtDeltaScale ) &&
+ ( testDt.time().second() != dt.time().second() ||
+ ( endLoop && ((pSecX != x1) || (pSecY != y1))));
+ minPaint = ( KDChartAxisParams::ValueScaleMinute >= cv.dtDeltaScale ) &&
+ ( testDt.time().minute() != dt.time().minute() ||
+ ( endLoop && ((pMinX != x1) || (pMinY != y1))));
+ hourPaint = ( KDChartAxisParams::ValueScaleHour >= cv.dtDeltaScale ) &&
+ ( testDt.time().hour() != dt.time().hour() ||
+ ( endLoop && ((pHourX != x1) || (pHourY != y1))));
+ dayPaint = ( KDChartAxisParams::ValueScaleDay >= cv.dtDeltaScale ) &&
+ ( testDt.date().day() != dt.date().day() ||
+ ( endLoop && ((pDayX != x1) || (pDayY != y1))));
+ /* khz: currently not used
+ weekPaint = ( KDChartAxisParams::ValueScaleWeek >= cv.dtDeltaScale ) &&
+ ( testDt.date().week() != dt.date().week() ||
+ ( endLoop && ((pWeekX != x1) || (pWeekY != y1))));
+ */
+ monthPaint = ( KDChartAxisParams::ValueScaleMonth >= cv.dtDeltaScale ) &&
+ ( testDt.date().month() != dt.date().month() ||
+ ( endLoop && ((pMonthX != x1) || (pMonthY != y1))));
+ yearPaint = ( KDChartAxisParams::ValueScaleYear >= cv.dtDeltaScale ) &&
+ ( testDt.date().year() != dt.date().year() ||
+ ( endLoop && ((pYearX != x1) || (pYearY != y1))));
+
+ p1X = x1 + iLabel * pXDelta;
+ p1Y = y1 + iLabel * pYDelta;
+ p2X = p1X + pXDelta;
+ p2Y = p1Y + pYDelta;
+ pXD = orgXD;
+ pYD = orgYD;
+
+ if( endLoop ){
+ ( ( KDChartAxisParams& ) para ).setAxisDtHighPos( p1X, p1Y );
+ // adjust stored dt-high settings
+ ( ( KDChartAxisParams& ) para ).setTrueAxisDtHigh( dt );
+ }
+ pen = subGridPen;
+ /*
+ // old code: just draw the seconds without any tests
+ // (not wise to do that when supporting sec1000
+ // and the like some day...)
+ if( newDt.time().second() != dt.time().second() ){
+ painter->drawLine( QPoint( p1X, p1Y ), QPoint( p1X+pXD, p1Y+pYD ) );
+ painter->drawLine( QPoint( p1X+pXD, p1Y+pYD ),
+ QPoint( p1X+pXD + pXDelta, p1Y+pYD + pYDelta ) );
+ painter->drawText( p1X+pXD-orgXD, p1Y+pYD-orgYD,
+ pTextsW, pTextsH,
+ textAlign | Qt::DontClip,
+ QString::number( dt.time().second() ) );
+ pXD += orgXD;
+ pYD += orgYD;
+ }
+ */
+ if( secPaint ){
+ painter->drawLine( QPoint( static_cast<int>( pSecX+pXD ),
+ static_cast<int>( pSecY+pYD ) ),
+ QPoint( static_cast<int>( p2X + pXD ),
+ static_cast<int>( p2Y + pYD ) ) );
+ if( (pXDelta/2.0 < p2X - pSecX) || (pYDelta/2.0 < p2Y - pSecY) ){
+ QPen oldPen( painter->pen() );
+ painter->setPen( QPen( labelsColor ) );
+ painter->drawText( static_cast<int>( pSecX+pXD-orgXD ),
+ static_cast<int>( pSecY+pYD-orgYD ),
+ static_cast<int>( fabs((0.0 == pXDelta) ? cv.pTextsW : (p2X - pSecX))),
+ static_cast<int>( fabs((0.0 == pYDelta) ? cv.pTextsH : (p2Y - pSecY))),
+ cv.textAlign | Qt::DontClip,
+ QString::number( dt.time().second() ) );
+ painter->setPen( oldPen );
+ if ( para.axisShowGrid() ){
+
+ saveDrawLine( *painter,
+ QPoint( static_cast<int>( pSecX ),
+ static_cast<int>( pSecY ) ),
+ QPoint( static_cast<int>( pSecX + gridDX ),
+ static_cast<int>( pSecY + gridDY ) ),
+ pen );
+ pen = gridPen;
+ }
+ if( !minPaint || pMinX != pSecX || pMinY != pSecY ){
+ painter->drawLine( QPoint( static_cast<int>( pSecX ),
+ static_cast<int>( pSecY ) ),
+ QPoint( static_cast<int>( pSecX+pXD ),
+ static_cast<int>( pSecY+pYD ) ) );
+ }
+ }
+ if( endLoop && !minPaint )
+ painter->drawLine( QPoint( static_cast<int>( p2X ),
+ static_cast<int>( p2Y ) ),
+ QPoint( static_cast<int>( p2X+pXD ),
+ static_cast<int>( p2Y+pYD ) ) );
+ pSecX = p1X + pXDelta;
+ pSecY = p1Y + pYDelta;
+ pXD += orgXD;
+ pYD += orgYD;
+ }
+ if( minPaint ){
+ painter->drawLine( QPoint( static_cast<int>( pMinX+pXD ),
+ static_cast<int>( pMinY+pYD ) ),
+ QPoint( static_cast<int>( p2X + pXD ),
+ static_cast<int>( p2Y + pYD ) ) );
+ if( (pXDelta/2.0 < p2X - pMinX) || (pYDelta/2.0 < p2Y - pMinY) ){
+ QPen oldPen( painter->pen() );
+ painter->setPen( QPen( labelsColor ) );
+ painter->drawText( static_cast<int>( pMinX+pXD-orgXD ),
+ static_cast<int>( pMinY+pYD-orgYD ),
+ static_cast<int>( fabs((0.0 == pXDelta) ? cv.pTextsW : (p2X - pMinX)) ),
+ static_cast<int>( fabs((0.0 == pYDelta) ? cv.pTextsH : (p2Y - pMinY)) ),
+ cv.textAlign | Qt::DontClip,
+ QString::number( dt.time().minute() ) );
+ painter->setPen( oldPen );
+ if ( para.axisShowGrid() ){
+ if( !secPaint && 10 < pXYDelta ){
+ saveDrawLine( *painter,
+ QPoint( static_cast<int>( pMinX+pXDelta/2 ),
+ static_cast<int>( pMinY+pYDelta/2 ) ),
+ QPoint( static_cast<int>( pMinX+pXDelta/2 + gridDX ),
+ static_cast<int>( pMinY+pYDelta/2 + gridDY ) ),
+ subSubGridPen );
+ }
+ saveDrawLine( *painter,
+ QPoint( static_cast<int>( pMinX ),
+ static_cast<int>( pMinY ) ),
+ QPoint( static_cast<int>( pMinX + gridDX ),
+ static_cast<int>( pMinY + gridDY ) ),
+ pen );
+ pen = gridPen;
+ }
+ if( !hourPaint || pHourX != pMinX || pHourY != pMinY ){
+ painter->drawLine( QPoint( static_cast<int>( pMinX ),
+ static_cast<int>( pMinY ) ),
+ QPoint( static_cast<int>( pMinX+pXD ),
+ static_cast<int>( pMinY+pYD ) ) );
+ }
+ }
+ if( endLoop && !hourPaint )
+ painter->drawLine( QPoint( static_cast<int>( p2X ),
+ static_cast<int>( p2Y ) ),
+ QPoint( static_cast<int>( p2X+pXD ),
+ static_cast<int>( p2Y+pYD ) ) );
+ pMinX = p1X + pXDelta;
+ pMinY = p1Y + pYDelta;
+ pXD += orgXD;
+ pYD += orgYD;
+ }
+ if( hourPaint ){
+ painter->drawLine( QPoint( static_cast<int>( pHourX+pXD ),
+ static_cast<int>( pHourY+pYD ) ),
+ QPoint( static_cast<int>( p2X + pXD ),
+ static_cast<int>( p2Y + pYD ) ) );
+ /*
+ qDebug("line");
+ qDebug("pXDelta / 2.0 : %f", pXDelta/2.0);
+ qDebug("p2X - pHourX : %f", p2X - pHourX);
+ */
+ if( (pXDelta/2.0 < p2X - pHourX) || (pYDelta/2.0 < p2Y - pHourY) ){
+ /*
+ qDebug("pHourX %f", pHourX );
+ qDebug(" +pXD %i", pXD );
+ qDebug(" -orgXD %i", orgXD);
+ qDebug("pHourY %f", pHourY );
+ qDebug(" +pYD %i", pYD );
+ qDebug(" -orgYD %i", orgYD);
+ */
+ QPen oldPen( painter->pen() );
+ painter->setPen( QPen( labelsColor ) );
+ painter->drawText( static_cast<int>( pHourX+pXD-orgXD ),
+ static_cast<int>( pHourY+pYD-orgYD ),
+ static_cast<int>( fabs((0.0 == pXDelta) ? cv.pTextsW : (p2X - pHourX))),
+ static_cast<int>( fabs((0.0 == pYDelta) ? cv.pTextsH : (p2Y - pHourY))),
+ cv.textAlign | Qt::DontClip,
+ QString::number( dt.time().hour() ) );
+ painter->setPen( oldPen );
+ if ( para.axisShowGrid() ){
+ if( !minPaint && 10 < pXYDelta ){
+ saveDrawLine( *painter,
+ QPoint( static_cast<int>( pHourX+pXDelta/2 ),
+ static_cast<int>( pHourY+pYDelta/2 ) ),
+ QPoint( static_cast<int>( pHourX+pXDelta/2 + gridDX ),
+ static_cast<int>( pHourY+pYDelta/2 + gridDY ) ),
+ subSubGridPen );
+ }
+ saveDrawLine( *painter,
+ QPoint( static_cast<int>( pHourX ),
+ static_cast<int>( pHourY ) ),
+ QPoint( static_cast<int>( pHourX + gridDX ),
+ static_cast<int>( pHourY + gridDY ) ),
+ pen );
+ pen = gridPen;
+ }
+ if( !dayPaint || pDayX != pHourX || pDayY != pHourY ){
+ painter->drawLine( QPoint( static_cast<int>( pHourX ),
+ static_cast<int>( pHourY ) ),
+ QPoint( static_cast<int>( pHourX+pXD ),
+ static_cast<int>( pHourY+pYD ) ) );
+ }
+ }
+ if( endLoop && !dayPaint )
+ painter->drawLine( QPoint( static_cast<int>( p2X ),
+ static_cast<int>( p2Y ) ),
+ QPoint( static_cast<int>( p2X+pXD ),
+ static_cast<int>( p2Y+pYD ) ) );
+ pHourX = p1X + pXDelta;
+ pHourY = p1Y + pYDelta;
+ pXD += orgXD;
+ pYD += orgYD;
+ }
+ if( dayPaint ){
+ painter->drawLine( QPoint( static_cast<int>( pDayX+pXD ),
+ static_cast<int>( pDayY+pYD ) ),
+ QPoint( static_cast<int>( p2X + pXD ),
+ static_cast<int>( p2Y + pYD ) ) );
+ if( (pXDelta/2.0 < p2X - pDayX) || (pYDelta/2.0 < p2Y - pDayY) ){
+ QPen oldPen( painter->pen() );
+ painter->setPen( QPen( labelsColor ) );
+ painter->drawText( static_cast<int>( pDayX+pXD-orgXD ),
+ static_cast<int>( pDayY+pYD-orgYD ),
+ static_cast<int>( fabs((0.0 == pXDelta) ? cv.pTextsW : (p2X - pDayX)) ),
+ static_cast<int>( fabs((0.0 == pYDelta) ? cv.pTextsH : (p2Y - pDayY)) ),
+ cv.textAlign | Qt::DontClip,
+ QString::number( dt.date().day() ) );
+ painter->setPen( oldPen );
+ /* khz: currently not used
+ if( !weekPaint || pWeekX != pDayX || pWeekY != pDayY )
+ */
+ if ( para.axisShowGrid() ){
+ if( !hourPaint && 10 < pXYDelta ){
+ saveDrawLine( *painter,
+ QPoint( static_cast<int>( pDayX+pXDelta/2 ),
+ static_cast<int>( pDayY+pYDelta/2 ) ),
+ QPoint( static_cast<int>( pDayX+pXDelta/2 + gridDX ),
+ static_cast<int>( pDayY+pYDelta/2 + gridDY ) ),
+ subSubGridPen );
+ }
+ saveDrawLine( *painter,
+ QPoint( static_cast<int>( pDayX ),
+ static_cast<int>( pDayY ) ),
+ QPoint( static_cast<int>( pDayX + gridDX ),
+ static_cast<int>( pDayY + gridDY ) ),
+ pen );
+ pen = gridPen;
+ }
+ if( !monthPaint || pMonthX != pDayX || pMonthY != pDayY ){
+ painter->drawLine( QPoint( static_cast<int>( pDayX ),
+ static_cast<int>( pDayY ) ),
+ QPoint( static_cast<int>( pDayX+pXD ),
+ static_cast<int>( pDayY+pYD ) ) );
+ }
+ }
+ /* khz: currently not used
+ if( endLoop && !weekPaint )
+ */
+ if( endLoop && !monthPaint )
+ painter->drawLine( QPoint( static_cast<int>( p2X ),
+ static_cast<int>( p2Y ) ),
+ QPoint( static_cast<int>( p2X+pXD ),
+ static_cast<int>( p2Y+pYD ) ) );
+ pDayX = p1X + pXDelta;
+ pDayY = p1Y + pYDelta;
+ pXD += orgXD;
+ pYD += orgYD;
+ }
+ /* khz: currently unused
+ if( weekPaint ){
+ painter->drawLine( QPoint( pWeekX+pXD, pWeekY+pYD ),
+ QPoint( p2X + pXD, p2Y + pYD ) );
+ if( (pXDelta/2.0 < p2X - pWeekX) || (pYDelta/2.0 < p2Y - pWeekY) ){
+ QPen oldPen( painter->pen() );
+ painter->setPen( QPen( labelsColor ) );
+ painter->drawText( pWeekX+pXD-orgXD, pWeekY+pYD-orgYD,
+ painter->setPen( oldPen );
+ fabs((0.0 == pXDelta) ? pTextsW : (p2X - pWeekX)),
+ fabs((0.0 == pYDelta) ? pTextsH : (p2Y - pWeekY)),
+ textAlign | Qt::DontClip,
+ QString::number( dt.date().week() ) );
+ if ( para.axisShowGrid() ){
+ if( !dayPaint && 40 < pXYDelta ){
+ // draw 7 lines:
+ //saveDrawLine( *painter,
+ // QPoint( pWeekX+pXDelta/2,
+ // pWeekY+pYDelta/2 ),
+ // QPoint( pWeekX+pXDelta/2 + gridDX,
+ // pWeekY+pYDelta/2 + gridDY ),
+ // subSubGridPen );
+ }
+ saveDrawLine( *painter,
+ QPoint( pWeekX,
+ pWeekY ),
+ QPoint( pWeekX + gridDX,
+ pWeekY + gridDY ),
+ pen );
+ pen = gridPen;
+ }
+ if( !monthPaint || pMonthX != pDayX || pMonthY != pDayY ){
+ painter->drawLine( QPoint( pWeekX, pWeekY ), QPoint( pWeekX+pXD, pWeekY+pYD ) );
+ }
+ }
+ if( endLoop && !monthPaint )
+ painter->drawLine( QPoint( p2X, p2Y ), QPoint( p2X+pXD, p2Y+pYD ) );
+ pWeekX = p1X + pXDelta;
+ pWeekY = p1Y + pYDelta;
+ pXD += orgXD;
+ pYD += orgYD;
+ }
+ */
+ if( monthPaint ){
+ painter->drawLine( QPoint( static_cast<int>( pMonthX+pXD ),
+ static_cast<int>( pMonthY+pYD ) ),
+ QPoint( static_cast<int>( p2X + pXD ),
+ static_cast<int>( p2Y + pYD ) ) );
+ if( (pXDelta/2.0 < p2X - pMonthX) || (pYDelta/2.0 < p2Y - pMonthY) ){
+ QPen oldPen( painter->pen() );
+ painter->setPen( QPen( labelsColor ) );
+ painter->drawText( static_cast<int>( pMonthX+pXD-orgXD ),
+ static_cast<int>( pMonthY+pYD-orgYD ),
+ static_cast<int>( fabs((0.0 == pXDelta) ? cv.pTextsW : (p2X - pMonthX)) ),
+ static_cast<int>( fabs((0.0 == pYDelta) ? cv.pTextsH : (p2Y - pMonthY)) ),
+ cv.textAlign | Qt::DontClip,
+ QString::number( dt.date().month() ) );
+ painter->setPen( oldPen );
+ if ( para.axisShowGrid() ){
+ /* khz: currently unused
+ if( !weekPaint &&
+ && 10 < pXYDelta ){
+ saveDrawLine( *painter,
+ QPoint( pMonthX+pXDelta/2,
+ pMonthY+pYDelta/2 ),
+ QPoint( pMonthX+pXDelta/2 + gridDX,
+ pMonthY+pYDelta/2 + gridDY ),
+ subSubGridPen );
+ }
+ */
+ saveDrawLine( *painter,
+ QPoint( static_cast<int>( pMonthX ),
+ static_cast<int>( pMonthY ) ),
+ QPoint( static_cast<int>( pMonthX + gridDX ),
+ static_cast<int>( pMonthY + gridDY ) ),
+ pen );
+ pen = gridPen;
+ }
+ if( !yearPaint || pYearX != pMonthX || pYearY != pMonthY ){
+ painter->drawLine( QPoint( static_cast<int>( pMonthX ),
+ static_cast<int>( pMonthY ) ),
+ QPoint( static_cast<int>( pMonthX+pXD ),
+ static_cast<int>( pMonthY+pYD ) ) );
+ }
+ }
+ if( endLoop && !yearPaint )
+ painter->drawLine( QPoint( static_cast<int>( p2X ),
+ static_cast<int>( p2Y ) ),
+ QPoint( static_cast<int>( p2X+pXD ),
+ static_cast<int>( p2Y+pYD ) ) );
+ pMonthX = p1X + pXDelta;
+ pMonthY = p1Y + pYDelta;
+ pXD += orgXD;
+ pYD += orgYD;
+ }
+ if( yearPaint ){
+ painter->drawLine( QPoint( static_cast<int>( pYearX+pXD ),
+ static_cast<int>( pYearY+pYD ) ),
+ QPoint( static_cast<int>( p2X + pXD ),
+ static_cast<int>( p2Y + pYD ) ) );
+ if( (pXDelta/2.0 < p2X - pYearX) || (pYDelta/2.0 < p2Y - pYearY) ){
+ QPen oldPen( painter->pen() );
+ painter->setPen( QPen( labelsColor ) );
+ painter->drawText( static_cast<int>( pYearX+pXD-orgXD ),
+ static_cast<int>( pYearY+pYD-orgYD ),
+ static_cast<int>( fabs((0.0 == pXDelta) ? cv.pTextsW : (p2X - pYearX)) ),
+ static_cast<int>( fabs((0.0 == pYDelta) ? cv.pTextsH : (p2Y - pYearY)) ),
+ cv.textAlign | Qt::DontClip,
+ QString::number( dt.date().year() ) );
+ painter->setPen( oldPen );
+ if ( para.axisShowGrid() ){
+ if( !monthPaint && 10 < pXYDelta ){
+ saveDrawLine( *painter,
+ QPoint( static_cast<int>( pYearX+pXDelta/2 ),
+ static_cast<int>( pYearY+pYDelta/2 ) ),
+ QPoint( static_cast<int>( pYearX+pXDelta/2 + gridDX ),
+ static_cast<int>( pYearY+pYDelta/2 + gridDY ) ),
+ subSubGridPen );
+ }
+ saveDrawLine( *painter,
+ QPoint( static_cast<int>( pYearX ),
+ static_cast<int>( pYearY ) ),
+ QPoint( static_cast<int>( pYearX + gridDX ),
+ static_cast<int>( pYearY + gridDY ) ),
+ pen );
+ pen = gridPen;
+ }
+ painter->drawLine( QPoint( static_cast<int>( pYearX ),
+ static_cast<int>( pYearY ) ),
+ QPoint( static_cast<int>( pYearX+pXD ),
+ static_cast<int>( pYearY+pYD ) ) );
+ }
+ if( endLoop )
+ painter->drawLine( QPoint( static_cast<int>( p2X ),
+ static_cast<int>( p2Y ) ),
+ QPoint( static_cast<int>( p2X+pXD ),
+ static_cast<int>( p2Y+pYD ) ) );
+ pYearX = p1X + pXDelta;
+ pYearY = p1Y + pYDelta;
+ pXD += orgXD;
+ pYD += orgYD;
+ }
+ if( &testDt != &newDt )
+ break;
+ dt = newDt;
+ iLabel += 1.0;
+ }
+ if( !commonDtHeader.isEmpty() ){
+ QPen oldPen( painter->pen() );
+ painter->setPen( QPen( labelsColor ) );
+ painter->drawText( static_cast<int>( x1 + pXD ), static_cast<int>( y1 + pYD ),
+ commonDtHeader );
+ painter->setPen( oldPen );
+ }
+ }else{
+ int iLeaveOut = nLeaveOut;
+ QString label;
+ for ( QStringList::Iterator labelIter = labelTexts->begin();
+ labelIter != labelTexts->end();
+ ++labelIter ) {
+ QDateTime dt;
+ if( cv.isDateTime ){
+#if COMPAT_QT_VERSION >= 0x030000
+ dt = QDateTime::fromString( *labelIter,
+ Qt::ISODate );
+ label = dt.toString( formatDT );
+#else
+ dt = dateTimeFromString( *labelIter );
+ label = dt.toString();
+#endif
+ }else{
+ label = *labelIter;
+ }
+
+ if( iLeaveOut < nLeaveOut )
+ ++iLeaveOut;
+ else
+ iLeaveOut = 0;
+ //Pending Michel: test if the user implicitely wants to get rid
+ //of the non fractional values delimiters and grid lines.
+ // axisDigitsBehindComma == 0 and the user implicitely
+ // setAxisShowFractionalValuesDelimiters() to false
+ bool showDelim = para.axisShowFractionalValuesDelimiters();
+ if ( para.axisShowGrid() && !bMultiRowBarChart ) {
+ if ( !label.isNull() || showDelim ){
+ if( !iLeaveOut )
+ // draw the main grid line
+
+ saveDrawLine( *painter,
+ QPoint( static_cast<int>( pGAX - pGXMicroAdjust ),
+ static_cast<int>( pGAY - pGYMicroAdjust ) ),
+ QPoint( static_cast<int>( pGZX - pGXMicroAdjust ),
+ static_cast<int>( pGZY - pGYMicroAdjust ) ),
+ gridPen );
+
+ else if( para.axisShowSubDelimiters() )
+ // draw a thin sub grid line instead of main line
+ saveDrawLine( *painter,
+ QPoint( static_cast<int>( pGAX - pGXMicroAdjust ),
+ static_cast<int>( pGAY - pGYMicroAdjust ) ),
+ QPoint( static_cast<int>( pGZX - pGXMicroAdjust ),
+ static_cast<int>( pGZY - pGYMicroAdjust ) ),
+ leaveOutGridPen );
+ }
+ }
+ if ( para.axisLabelsVisible() ) {
+ if( !iLeaveOut ) {
+ /*PENDING Michel: those points should not be redrawn if sub-delimiters are drawn
+ *drawing the submarkers
+ * make it visible or not
+ *In the case we have a null label - axisDigitsBehindComma is implicitely set to 0 -
+ *also paint or dont paint the delimiter corresponding to this label - default is paint.
+ */
+ if ( !label.isNull() || showDelim )
+ painter->drawLine( QPoint( static_cast<int>( p1X ),
+ static_cast<int>( p1Y ) ),
+ QPoint( static_cast<int>( p2X ),
+ static_cast<int>( p2Y ) ) );
+
+ cv.pLastX = p1X;
+ cv.pLastY = p1Y;
+ QPen oldPen( painter->pen() );
+ painter->setPen( QPen( labelsColor ) );
+ if( para.axisLabelsDontShrinkFont()
+ && isHorizontalAxis
+ && (Qt::AlignHCenter == (cv.textAlign & Qt::AlignHCenter)) ) {
+ double w = fm.width( label ) + 4.0;
+ double x0 = cv.pTextsX + cv.pTextsW / 2.0;
+
+ painter->drawText( static_cast<int>( x0 - w / 2.0 ),
+ static_cast<int>( cv.pTextsY ),
+ static_cast<int>( w ),
+ static_cast<int>( cv.pTextsH ),
+ cv.textAlign, label );
+ } else {
+ if( nRotation ){
+ KDDrawText::drawRotatedText(
+ painter,
+ nRotation,
+ painter->worldMatrix().map(
+ QPoint( static_cast<int>( cv.pTextsX ),
+ static_cast<int>( cv.pTextsY ) ) ),
+ label,
+ 0,
+ cv.textAlign,
+ false,
+ &fm,
+ screenOutput,screenOutput,0,
+ screenOutput );
+ } else {
+ // Pending Michel draw the axis labels
+ painter->drawText( static_cast<int>( cv.pTextsX ),
+ static_cast<int>( cv.pTextsY ),
+ static_cast<int>( cv.pTextsW ),
+ static_cast<int>( cv.pTextsH ),
+ cv.textAlign | Qt::DontClip,
+ label );
+
+ // debugging text rect
+ /*
+ painter->drawRect(static_cast <int>(cv.pTextsX),
+ static_cast <int>(cv.pTextsY),
+ static_cast <int> (nUsableAxisWidth),
+ static_cast <int> (nUsableAxisHeight));
+ */
+ }
+ }
+ painter->setPen( oldPen );
+ }
+ }
+
+
+ if( cv.isDateTime ){
+ if( labelTexts->begin() == labelIter ){
+ ((KDChartAxisParams&)para).setAxisDtLowPos(
+ pGAX - pGXMicroAdjust,
+ pGAY - pGYMicroAdjust );
+ // adjust stored dt-low settings
+ ( ( KDChartAxisParams& ) para ).setTrueAxisDtLow( dt );
+ }else{
+ ((KDChartAxisParams&)para).setAxisDtHighPos(
+ pGAX - pGXMicroAdjust,
+ pGAY - pGYMicroAdjust );
+ // adjust stored dt-high settings
+ ( ( KDChartAxisParams& ) para ).setTrueAxisDtHigh( dt );
+ }
+ }
+
+ iLabel += 1.0;
+ p1X = x1 + iLabel * pXDelta;
+ p1Y = y1 + iLabel * pYDelta;
+ p2X = x2 + iLabel * pXDelta;
+ p2Y = y2 + iLabel * pYDelta;
+ cv.pTextsX = xT + iLabel * pXDelta;
+ cv.pTextsY = yT + iLabel * pYDelta;
+
+ pGAX = xGA + iLabel * pXDelta;
+ pGAY = yGA + iLabel * pYDelta;
+ pGZX = xGZ + iLabel * pXDelta;
+ pGZY = yGZ + iLabel * pYDelta;
+ /*
+ pGAX = xGA + iLabel * pXSubDelimDelta / cv.nSubDelimFactor;
+ pGAY = yGA + iLabel * pYSubDelimDelta / cv.nSubDelimFactor;
+ pGZX = xGZ + iLabel * pXSubDelimDelta / cv.nSubDelimFactor;
+ pGZY = yGZ + iLabel * pYSubDelimDelta / cv.nSubDelimFactor;
+ */
+ }
+ }
+
+
+ // adjust zero-line start, if not starting at origin
+ if ( cv.bSteadyCalc &&
+ ( para.axisValuesDecreasing() ||
+ (0.0 != para.trueAxisLow()) ) ) {
+ //double x = p1.x();
+ double x = 0.0;
+ /* we have to find the *real* X axis position,
+ this is NOT always the p1.x() as it is the
+ case for left2 or right2 axes. [cmw, 12/01/2005] */
+ if (cv.basicPos==KDChartAxisParams::AxisPosRight)
+ x = static_cast<double>(_dataRect.right());
+ else
+ x = static_cast<double>(_dataRect.left());
+ double y = p1.y();
+ double mult = para.trueAxisLow() / para.trueAxisDelta();
+ x -= mult * pXDelta;
+ y -= mult * pYDelta;
+ axisZeroLineStartX = x;
+ axisZeroLineStartY = y;
+ //qDebug( "axisZeroLineStartX %f, axisZeroLineStartY %f",
+ // axisZeroLineStartX, axisZeroLineStartY );
+ }
+
+ painter->setClipping( oldClippingFlag );
+ } // if( nLabels )
+
+ // draw zero-line (Ok, this might be overwritten by axes
+ // cause those are drawn after all labels and grid and
+ // zero-line(s) has been painted, see code below, starting
+ // with "// draw all the axes".
+ if ( cv.bSteadyCalc && !cv.isDateTime ) {
+ ( ( KDChartAxisParams& ) para ).setAxisZeroLineStart( axisZeroLineStartX, axisZeroLineStartY );
+ double axisZeroLineStart;
+ int minCoord, maxCoord;
+ double xFactor, yFactor;
+ switch( cv.basicPos ){
+ case KDChartAxisParams::AxisPosLeft:
+ xFactor = 1.0;
+ yFactor = 0.0;
+ axisZeroLineStart = axisZeroLineStartY;
+ minCoord = QMIN( cv.orig.y(), cv.dest.y() );
+ maxCoord = QMAX( cv.orig.y(), cv.dest.y() );
+
+ break;
+ case KDChartAxisParams::AxisPosRight:
+ xFactor = -1.0;
+ yFactor = 0.0;
+ axisZeroLineStart = axisZeroLineStartY;
+ minCoord = QMIN( cv.orig.y(), cv.dest.y() );
+ maxCoord = QMAX( cv.orig.y(), cv.dest.y() );
+ break;
+ case KDChartAxisParams::AxisPosTop:
+ xFactor = 0.0;
+ yFactor = 1.0;
+ axisZeroLineStart = axisZeroLineStartX;
+ minCoord = QMIN( cv.orig.x(), cv.dest.x() );
+ maxCoord = QMAX( cv.orig.x(), cv.dest.x() );
+ break;
+ case KDChartAxisParams::AxisPosBottom:
+ xFactor = 0.0;
+ yFactor = -1.0;
+ axisZeroLineStart = axisZeroLineStartX;
+ minCoord = QMIN( cv.orig.x(), cv.dest.x() );
+ maxCoord = QMAX( cv.orig.x(), cv.dest.x() );
+ break;
+ default:
+ xFactor = 0.0;
+ yFactor = 0.0;
+ axisZeroLineStart = 0.0;
+ minCoord = 0;
+ maxCoord = 0;
+ }
+ if( axisZeroLineStart >= minCoord &&
+ axisZeroLineStart <= maxCoord ){
+ QPoint pZ0( static_cast<int>( para.axisZeroLineStartX() ),
+ static_cast<int>( para.axisZeroLineStartY() ) );
+ QPoint pZ( static_cast<int>( para.axisZeroLineStartX()
+ + xFactor * _dataRect.width() ),
+ static_cast<int>( para.axisZeroLineStartY()
+ + yFactor * _dataRect.height() ) );
+ //qDebug("------");
+ saveDrawLine( *painter,
+ pZ0,
+ pZ,
+ QPen( para.axisZeroLineColor(),
+ lineWidth ) );
+ }
+ }
+
+ }
+
+ }
+
+ // Drawing all the axes lines:
+/*
+ // 1. test if the standard axes are share one or several corner points
+ // if yes, we first draw a polyline using a "Qt::MiterJoin" PenJoinStyle
+ // to make sure the corners are filled
+ internal__KDChart__CalcValues& cv1 = calcVal[ KDChartAxisParams::AxisPosLeft ];
+ internal__KDChart__CalcValues& cv2 = calcVal[ KDChartAxisParams::AxisPosBottom ];
+ const KDChartAxisParams& pa1 = params()->axisParams( KDChartAxisParams::AxisPosLeft );
+ const KDChartAxisParams& pa2 = params()->axisParams( KDChartAxisParams::AxisPosBottom );
+qDebug("\n\nx1: %i y1: %i w1: %i\nx2: %i y2: %i w2: %i",
+cv1.orig.x(), cv1.orig.y(), pa1.axisTrueLineWidth(),
+cv2.orig.x(), cv2.orig.y(), pa2.axisTrueLineWidth() );
+ if( cv1.orig == cv2.orig ){
+ const QColor c1( pa1.axisLineColor() );
+ const QColor c2( pa2.axisLineColor() );
+ const QPoint pA( cv1.dest );
+ const QPoint pB( cv1.orig );
+ const QPoint pC( cv2.dest );
+ QPen pen( QColor( (c1.red() + c2.red()) /2,
+ (c1.green() + c2.green())/2,
+ (c1.blue() + c2.blue()) /2 ),
+ QMIN(pa1.axisTrueLineWidth(), pa2.axisTrueLineWidth()) );
+ pen.setJoinStyle( Qt::MiterJoin );
+ painter->setPen( pen );
+ QPointArray a;
+ a.putPoints( 0, 3, pA.x(),pA.y(), pB.x(),pB.y(), pC.x(),pC.y() );
+ painter->drawPolyline( a );
+qDebug("done\n" );
+ }
+*/
+ // 2. draw the axes using their normal color
+ for( iAxis = 0; iAxis < KDCHART_MAX_AXES; ++iAxis ){
+ internal__KDChart__CalcValues& cv = calcVal[iAxis];
+ const KDChartAxisParams & para = params()->axisParams( iAxis );
+ if( cv.processThisAxis && para.axisLineVisible() ){
+ painter->setPen( QPen( para.axisLineColor(),
+ para.axisTrueLineWidth() ) );
+ int x = cv.dest.x();
+ if( 2.0 >= QABS(cv.pLastX - x) )
+ x = static_cast < int > ( cv.pLastX );
+ int y = cv.dest.y();
+ if( 2.0 >= QABS(cv.pLastY - y) )
+ y = static_cast < int > ( cv.pLastY );
+ painter->drawLine( cv.orig, QPoint(x,y) );
+ }
+ }
+
+ painter->restore();
+}
+
+
+double fastPow10( int x )
+{
+ double res = 1.0;
+ if( 0 <= x ){
+ for( int i = 1; i <= x; ++i )
+ res *= 10.0;
+ }else{
+ for( int i = -1; i >= x; --i )
+ res /= 10.0;
+ }
+ return res;
+}
+double fastPow10( double x )
+{
+ return pow(10.0, x);
+}
+
+
+/**
+ Calculates the actual label texts for one axis.
+
+ \note When calling this function the actual area size for this
+ axis must be set, this means you may only call it when
+ \c KDChartPainter::setupGeometry() has been called before.
+
+ \param painter the QPainter onto which the chart should be painted
+ \param data the data that will be displayed as a chart
+ \param params the KDChartParams that were specified globally
+ \param axisNumber the number of this axis (used in some params structures)
+ \param averageValueP1000 (average height+width of the prtbl. area) / 1000
+ \param basicPos the basic axis position returned by
+ KDChartAxisParams::basicAxisPos()
+ \param orig the axis start point
+ \param delimLen the length of one delimiter mark
+ \param (all others) the reference parameters to be returned
+ by this function
+ */
+/**** static ****/
+void KDChartAxesPainter::calculateLabelTexts(
+ QPainter* painter,
+ const KDChartTableDataBase& data,
+ const KDChartParams& params,
+ uint axisNumber,
+ double averageValueP1000,
+ double delimLen,
+ // start of return parameters
+ KDChartAxisParams::AxisPos& basicPos,
+ QPoint& orig,
+ QPoint& dest,
+ double& pXDeltaFactor,
+ double& pYDeltaFactor,
+ double& pXDelimDeltaFaktor,
+ double& pYDelimDeltaFaktor,
+ double& nSubDelimFactor,
+ double& pDelimDelta,
+ double& nTxtHeight,
+ double& pTextsX,
+ double& pTextsY,
+ double& pTextsW,
+ double& pTextsH,
+ int& textAlign,
+ bool& isLogarithmic,
+ bool& isDateTime,
+ bool& autoDtLabels,
+ QDateTime& dtLow,
+ QDateTime& dtHigh,
+ KDChartAxisParams::ValueScale& dtDeltaScale,
+ bool adjustTheValues,
+ double trueDelta,
+ double trueDeltaPix )
+{
+//qDebug("\nentering KDChartAxesPainter::calculateLabelTexts() : nTxtHeight: "+QString::number(nTxtHeight));
+ const KDChartAxisParams & para = params.axisParams( axisNumber );
+
+ // store whether the labels are to be drawn in reverted order
+ const bool bDecreasing = para.axisValuesDecreasing();
+
+ basicPos = KDChartAxisParams::basicAxisPos( axisNumber );
+
+ pXDeltaFactor = 0.0;
+ pYDeltaFactor = 0.0;
+ pXDelimDeltaFaktor = 0.0;
+ pYDelimDeltaFaktor = 0.0;
+ int axisLength;
+ switch ( basicPos ) {
+ case KDChartAxisParams::AxisPosBottom: {
+ axisLength = para.axisTrueAreaRect().width();
+ orig = bDecreasing
+ ? para.axisTrueAreaRect().topRight()
+ : para.axisTrueAreaRect().topLeft();
+ dest = bDecreasing
+ ? para.axisTrueAreaRect().topLeft()
+ : para.axisTrueAreaRect().topRight();
+ pYDelimDeltaFaktor = 1.0;
+ pXDeltaFactor = bDecreasing ? -1.0 : 1.0;
+ //qDebug("\nsetting pXDeltaFactor for axis %x", axisNumber);
+ //qDebug(bDecreasing ? "bDecreasing = TRUE" : "bDecreasing = FALSE");
+ //qDebug("pXDeltaFactor = %f\n",pXDeltaFactor);
+ }
+ break;
+ case KDChartAxisParams::AxisPosLeft: {
+ axisLength = para.axisTrueAreaRect().height();
+ orig = bDecreasing
+ ? para.axisTrueAreaRect().topRight()
+ : para.axisTrueAreaRect().bottomRight();
+ dest = bDecreasing
+ ? para.axisTrueAreaRect().bottomRight()
+ : para.axisTrueAreaRect().topRight();
+ pXDelimDeltaFaktor = -1.0;
+ pYDeltaFactor = bDecreasing ? 1.0 : -1.0;
+ }
+ break;
+ case KDChartAxisParams::AxisPosTop: {
+ axisLength = para.axisTrueAreaRect().width();
+ orig = bDecreasing
+ ? para.axisTrueAreaRect().bottomRight()
+ : para.axisTrueAreaRect().bottomLeft();
+ dest = bDecreasing
+ ? para.axisTrueAreaRect().bottomLeft()
+ : para.axisTrueAreaRect().bottomRight();
+ pYDelimDeltaFaktor = -1.0;
+ pXDeltaFactor = bDecreasing ? -1.0 : 1.0;
+ }
+ break;
+ case KDChartAxisParams::AxisPosRight: {
+ axisLength = para.axisTrueAreaRect().height();
+ orig = bDecreasing
+ ? para.axisTrueAreaRect().topLeft()
+ : para.axisTrueAreaRect().bottomLeft();
+ dest = bDecreasing
+ ? para.axisTrueAreaRect().bottomLeft()
+ : para.axisTrueAreaRect().topLeft();
+ pXDelimDeltaFaktor = 1.0;
+ pYDeltaFactor = bDecreasing ? 1.0 : -1.0;
+ }
+ break;
+ default: {
+ axisLength = 0;
+ qDebug( "IMPLEMENTATION ERROR: KDChartAxesPainter::paintAxes() unhandled enum value." );
+ }
+ break;
+ }
+
+ // which dataset(s) is/are represented by this axis?
+ uint dataset, dataset2, chart;
+ if ( !params.axisDatasets( axisNumber, dataset, dataset2, chart ) ) {
+ dataset = KDCHART_ALL_DATASETS;
+ dataset2 = KDCHART_ALL_DATASETS;
+ chart = 0;
+ //qDebug("\nautomatic set values: chart: %u,\ndataset: %u, dataset2: %u",
+ //chart, dataset, dataset2);
+ }
+ // which dataset(s) with mode DataEntry (or mode ExtraLinesAnchor, resp.)
+ // is/are represented by this axis?
+ uint dataDataset, dataDataset2;
+ if( params.findDatasets( KDChartParams::DataEntry,
+ KDChartParams::ExtraLinesAnchor,
+ dataDataset,
+ dataDataset2,
+ chart ) ) {
+ // adjust dataDataset in case MORE THAN ONE AXIS
+ // is representing THIS CHART
+ if( ( KDCHART_ALL_DATASETS != dataset
+ && KDCHART_NO_DATASET != dataset )
+ || ( KDCHART_ALL_DATASETS != dataDataset
+ && KDCHART_NO_DATASET != dataDataset ) ){
+ int ds = (KDCHART_ALL_DATASETS != dataset)
+ ? dataset
+ : 0;
+ int dds = (KDCHART_ALL_DATASETS != dataDataset)
+ ? dataDataset
+ : 0;
+ dataDataset = QMAX( ds, dds );
+ }
+ if( ( KDCHART_ALL_DATASETS != dataset2
+ && KDCHART_NO_DATASET != dataset2 )
+ || ( KDCHART_ALL_DATASETS != dataDataset2
+ && KDCHART_NO_DATASET != dataDataset2 ) ){
+ int ds2 = (KDCHART_ALL_DATASETS != dataset2)
+ ? dataset2
+ : KDCHART_MAX_AXES-1;
+ int dds2 = (KDCHART_ALL_DATASETS != dataDataset2)
+ ? dataDataset2
+ : KDCHART_MAX_AXES-1;
+ dataDataset2 = QMIN( ds2, dds2 );
+ }
+ }
+ else {
+ // Should not happen
+ qDebug( "IMPLEMENTATION ERROR: findDatasets( DataEntry, ExtraLinesAnchor ) should *always* return true. (b)" );
+ dataDataset = KDCHART_ALL_DATASETS;
+ }
+ //qDebug("\naxisNumber: %x\nchart: %x\ndataset: %x, dataset2: %x,\ndataDataset: %x, dataDataset2: %x",
+ //axisNumber, chart, dataset, dataset2, dataDataset, dataDataset2);
+
+ if ( para.axisLabelsFontUseRelSize() ){
+ nTxtHeight = para.axisLabelsFontRelSize()
+ * averageValueP1000;
+//qDebug("using rel. size in KDChartAxesPainter::calculateLabelTexts() : nTxtHeight: "+QString::number(nTxtHeight));
+ }else {
+ QFontInfo info( para.axisLabelsFont() );
+ nTxtHeight = info.pointSize();
+//qDebug("using FIXED size in KDChartAxesPainter::calculateLabelTexts() : nTxtHeight: "+QString::number(nTxtHeight));
+ }
+
+ const KDChartEnums::NumberNotation notation = para.axisLabelsNotation();
+ const int behindComma = para.axisDigitsBehindComma();
+ const int divPow10 = para.axisLabelsDivPow10();
+ const QString decimalPoint = para.axisLabelsDecimalPoint();
+ const QString thousandsPoint = para.axisLabelsThousandsPoint();
+ const QString prefix = para.axisLabelsPrefix();
+ const QString postfix = para.axisLabelsPostfix();
+ const int totalLen = para.axisLabelsTotalLen();
+ const QChar padFill = para.axisLabelsPadFill();
+ const bool blockAlign = para.axisLabelsBlockAlign();
+
+ QStringList labelTexts;
+ int colNum = para.labelTextsDataRow();
+ bool bDone = true;
+ switch ( para.axisLabelTextsFormDataRow() ) {
+ case KDChartAxisParams::LabelsFromDataRowYes: {
+ // Take whatever is in the specified column (even if not a string)
+ int trueBehindComma = -1;
+ QVariant value;
+ for ( uint iDataset = 0; iDataset < data.usedRows(); iDataset++ ) {
+ if( data.cellCoord( iDataset, colNum, value, 1 ) ){
+ if( QVariant::String == value.type() )
+ labelTexts.append( value.toString() );
+ else {
+ labelTexts.append( applyLabelsFormat( value.toDouble(),
+ divPow10,
+ behindComma,
+ para.axisValueDelta(),
+ trueBehindComma,
+ notation,
+ decimalPoint,
+ thousandsPoint,
+ prefix,
+ postfix,
+ totalLen,
+ padFill,
+ blockAlign ) );
+
+ }
+ }
+ }
+ break;
+ }
+ case KDChartAxisParams::LabelsFromDataRowGuess: {
+ QVariant value;
+ for ( uint iDataset = 0; iDataset < data.usedRows(); iDataset++ ) {
+ if( data.cellCoord( iDataset, colNum, value, 1 ) ){
+ if( QVariant::String == value.type() ){
+ const QString sVal( value.toString() );
+ if( !sVal.isEmpty() && !sVal.isNull() )
+ labelTexts.append( sVal );
+ }
+ }else{
+ labelTexts.clear();
+ bDone = false;
+ break;
+ }
+ }
+ break;
+ }
+ case KDChartAxisParams::LabelsFromDataRowNo: {
+ bDone = false;
+ break;
+ }
+ default:
+ // Should not happen
+ qDebug( "KDChart: Unknown label texts source" );
+ }
+
+ // if necessary adjust text params *including* the steady value calc setting
+ const bool dataCellsHaveSeveralCoordinates =
+ (KDCHART_ALL_DATASETS == dataDataset)
+ ? data.cellsHaveSeveralCoordinates()
+ : data.cellsHaveSeveralCoordinates( dataDataset, dataDataset2 );
+ if( dataCellsHaveSeveralCoordinates && !para.axisSteadyValueCalc() )
+ ((KDChartParams&)params).setAxisLabelTextParams(
+ axisNumber,
+ true,
+ KDCHART_AXIS_LABELS_AUTO_LIMIT,
+ KDCHART_AXIS_LABELS_AUTO_LIMIT,
+ KDCHART_AXIS_LABELS_AUTO_DELTA,
+ para.axisLabelsDigitsBehindComma() );// NOTE: This sets MANY other params to default values too!
+
+
+ const KDChartParams::ChartType params_chartType
+ = ( 0 == chart )
+ ? params.chartType()
+ : params.additionalChartType();
+
+
+ // store whether we are calculating Ordinate-like axis values
+ const bool bSteadyCalc = para.axisSteadyValueCalc();
+
+ // store whether logarithmic calculation is wanted
+ isLogarithmic = bSteadyCalc &&
+ (KDChartParams::Line == params_chartType) &&
+ (KDChartAxisParams::AxisCalcLogarithmic == para.axisCalcMode());
+
+ //qDebug(bSteadyCalc ? "bSteadyCalc":"NOT bSteadyCalc");
+ //qDebug(isLogarithmic? "isLogarithmic":"NOT isLogarithmic");
+
+ // store whether this is a vertical axis or a horizontal axis
+ const bool bVertAxis = (KDChartAxisParams::AxisPosLeft == basicPos) ||
+ (KDChartAxisParams::AxisPosRight == basicPos);
+
+ // store the coordinate number to be used for this axis
+ const int coordinate = bVertAxis ? 1 : 2;
+
+ // store whether our coordinates are double or QDateTime values
+ const QVariant::Type valueType =
+ (KDCHART_ALL_DATASETS == dataDataset)
+ ? data.cellsValueType( coordinate )
+ : data.cellsValueType( dataDataset, dataDataset2, coordinate );
+ isDateTime = valueType == QVariant::DateTime;
+ bool bIsDouble = valueType == QVariant::Double;
+
+ autoDtLabels = isDateTime && ( KDCHART_AXIS_LABELS_AUTO_DATETIME_FORMAT
+ == para.axisLabelsDateTimeFormat() );
+
+ if( autoDtLabels || bSteadyCalc )
+ ( ( KDChartAxisParams& ) para ).setAxisLabelsTouchEdges( true );
+
+ bool bStatistical = KDChartParams::HiLo == params_chartType
+ || KDChartParams::BoxWhisker == params_chartType;
+
+ if ( !bVertAxis && KDChartParams::BoxWhisker == params_chartType
+ && ! para.axisLabelStringCount() ) {
+ uint ds1 = (KDCHART_ALL_DATASETS == dataDataset)
+ ? 0
+ : dataDataset;
+ uint ds2 = (KDCHART_ALL_DATASETS == dataDataset)
+ ? data.usedRows() - 1
+ : dataDataset2;
+ for (uint i = ds1; i <= ds2; ++i)
+ labelTexts.append(
+ QObject::tr( "Series " ) + QString::number( i + 1 ) );
+ bDone = true;
+ }
+
+ double nLow = 1.0 + bSteadyCalc;// ? 0.0 : data.colsScrolledBy();
+ double nHigh = 10.0;
+ double nDelta = 1.0;
+ if ( !bDone ) {
+ bDone = true;
+
+ // look if exact label specification was made via limits and delta
+ if ( ! isLogarithmic
+ && ! para.axisLabelStringCount()
+ && ! ( KDCHART_AXIS_LABELS_AUTO_LIMIT == para.axisValueStart() )
+ && ! ( KDCHART_AXIS_LABELS_AUTO_LIMIT == para.axisValueEnd() )
+ && ! ( para.axisValueStart() == para.axisValueEnd() )
+ && ! ( KDCHART_AXIS_LABELS_AUTO_DELTA == para.axisValueDelta() )
+ && ! ( 0.0 == para.axisValueDelta() ) ) {
+ nLow = para.axisValueStart().toDouble();
+ nHigh = para.axisValueEnd().toDouble();
+ nDelta = para.axisValueDelta();
+ int behindComma = para.axisDigitsBehindComma();
+ int trueBehindComma = -1;
+ bool upwards = (nLow < nHigh);
+ if( upwards != (0.0 < nDelta) )
+ nDelta *= -1.0;
+ double nVal = nLow;
+ bDone = false;
+ bool bShowVeryLastLabel = false;
+ //qDebug("\n nLow: %f, nHigh: %f, nDelta: %f", nLow, nHigh, nDelta );
+ while( bShowVeryLastLabel || (upwards ? (nVal <= nHigh) : (nVal >= nHigh)) ){
+ //qDebug("nVal : %f", nVal );
+ labelTexts.append( applyLabelsFormat( nVal,
+ divPow10,
+ behindComma,
+ nDelta,
+ trueBehindComma,
+ notation,
+ decimalPoint,
+ thousandsPoint,
+ prefix,
+ postfix,
+ totalLen,
+ padFill,
+ blockAlign ) );
+ nVal += nDelta;
+ //qDebug("nVal-neu: %f", nVal );
+ if( ! (upwards ? (nVal <= nHigh) : (nVal >= nHigh)) ){
+ // work around a rounding error: show the last label, even if not nVal == nHigh is not matching exactly
+ if( bShowVeryLastLabel )
+ bShowVeryLastLabel = false;
+ else{
+ QString sHigh( applyLabelsFormat( nHigh,
+ divPow10,
+ behindComma,
+ nDelta,
+ trueBehindComma,
+ notation,
+ decimalPoint,
+ thousandsPoint,
+ prefix,
+ postfix,
+ totalLen,
+ padFill,
+ blockAlign ) );
+ QString sValue( applyLabelsFormat( nVal,
+ divPow10,
+ behindComma,
+ nDelta,
+ trueBehindComma,
+ notation,
+ decimalPoint,
+ thousandsPoint,
+ prefix,
+ postfix,
+ totalLen,
+ padFill,
+ blockAlign ) );
+ bShowVeryLastLabel = (sValue == sHigh);
+ //qDebug("test: sHigh: "+sHigh+" sValue: "+sValue );
+ }
+ }
+ bDone = true;
+ }
+ ( ( KDChartAxisParams& ) para ).setTrueAxisLowHighDelta( nLow, nHigh, nDelta );
+ //qDebug("\n[Z-0] nLow: %f, nHigh: %f, nDelta: %f", nLow, nHigh, nDelta );
+ } // look if a string list was specified
+ else if ( para.axisLabelStringCount() ) {
+ int nLabels = bSteadyCalc
+ ? para.axisLabelStringCount()
+ : bStatistical ? data.usedRows() : data.usedCols();
+ calculateBasicTextFactors( nTxtHeight, para, averageValueP1000,
+ basicPos, orig, delimLen, nLabels,
+ // start of return parameters
+ pDelimDelta,
+ pTextsX, pTextsY, pTextsW, pTextsH,
+ textAlign );
+ bool useShortLabels = false;
+ QStringList tmpList( para.axisLabelStringList() );
+
+ // find start- and/or end-entry
+ int iStart = 0;
+ int iEnd = para.axisLabelStringCount() - 1;
+ if( ! ( KDCHART_AXIS_LABELS_AUTO_LIMIT == para.axisValueStart() )
+ || ! ( KDCHART_AXIS_LABELS_AUTO_LIMIT == para.axisValueEnd() ) ) {
+ const bool testStart = !( QVariant::String == para.axisValueStart().type() );
+ const bool testEnd = !( QVariant::String == para.axisValueEnd().type() );
+ QString sStart = testStart
+ ? para.axisValueStart().toString().upper()
+ : QString::null;
+ QString sEnd = testEnd
+ ? para.axisValueEnd().toString().upper()
+ : QString::null;
+
+ uint i = 0;
+ for ( QStringList::Iterator it = tmpList.begin();
+ it != tmpList.end(); ++it, ++i ) {
+ if ( 0 == iStart &&
+ 0 == QString::compare( sStart, ( *it ).upper() ) ) {
+ iStart = i;
+ }
+ if ( 0 == QString::compare( sEnd, ( *it ).upper() ) ) {
+ iEnd = i;
+ }
+ }
+ }
+
+ // check text widths to ensure all the entries will fit
+ // into the available space
+ if ( para.axisLabelStringCount()
+ && para.axisShortLabelsStringCount()
+ && para.axisLabelStringList() != para.axisShortLabelsStringList() ) {
+ QFont font( para.axisLabelsFont() );
+ if ( para.axisLabelsFontUseRelSize() )
+ font.setPixelSize( static_cast < int > ( nTxtHeight ) );
+ painter->setFont( font );
+ QFontMetrics fm( painter->fontMetrics() );
+
+ QStringList::Iterator it = tmpList.begin();
+ for ( int i = 0; i < nLabels; ++i ) {
+ if ( it != tmpList.end() ) {
+ if ( fm.width( *it ) > pTextsW ) {
+ useShortLabels = true;
+ break;
+ }
+ ++it;
+ }
+ }
+ }
+ if ( useShortLabels )
+ tmpList = para.axisShortLabelsStringList();
+ else
+ tmpList = para.axisLabelStringList();
+
+ // prepare transfering the strings into the labelTexts list
+ double ddelta
+ = ( KDCHART_AXIS_LABELS_AUTO_DELTA == para.axisValueDelta() )
+ ? 1.0
+ : para.axisValueDelta();
+ modf( ddelta, &ddelta );
+ bool positive = ( 0.0 <= ddelta );
+ int delta = static_cast < int > ( fabs( ddelta ) );
+ // find 1st significant entry
+ QStringList::Iterator it = positive
+ ? tmpList.begin()
+ : tmpList.fromLast();
+ if ( positive )
+ for ( int i = 0; i < (int)tmpList.count(); ++i ) {
+ if ( i >= iStart )
+ break;
+ ++it;
+ }
+ else
+ for ( int i = tmpList.count() - 1; i >= 0; --i ) {
+ if ( i <= iEnd )
+ break;
+ --it;
+ }
+ // transfer the strings
+ int meter = delta;
+ int i2 = positive ? iStart : iEnd;
+ for ( int iLabel = 0; iLabel < nLabels; ) {
+ if ( positive ) {
+ if ( it == tmpList.end() ) {
+ it = tmpList.begin();
+ i2 = 0;
+ }
+ } else {
+ if ( it == tmpList.begin() ) {
+ it = tmpList.end();
+ i2 = tmpList.count();
+ }
+ }
+ if ( ( positive && i2 >= iStart )
+ || ( !positive && i2 <= iEnd ) ) {
+ if ( meter >= delta ) {
+ labelTexts << *it;
+ ++iLabel;
+ meter = 1;
+ } else {
+ meter += 1;
+ }
+ }
+ if ( positive ) {
+ if ( i2 == iEnd ) {
+ it = tmpList.begin();
+ i2 = 0;
+ } else {
+ ++it;
+ ++i2;
+ }
+ } else {
+ if ( i2 == iStart ) {
+ it = tmpList.end();
+ i2 = tmpList.count();
+ } else {
+ --it;
+ --i2;
+ }
+ }
+ }
+ } else {
+ // find out if the associated dataset contains only strings
+ // if yes, we will take these as label texts
+ uint dset = ( dataset == KDCHART_ALL_DATASETS ) ? 0 : dataset;
+ //qDebug("\ndset: %u", dset);
+ bDone = false;
+ QVariant value;
+ for ( uint col = 0; col < data.usedCols(); ++col ) {
+ if( data.cellCoord( dset, col, value, coordinate ) ){
+ if( QVariant::String == value.type() ){
+ const QString sVal = value.toString();
+ if( !sVal.isEmpty() && !sVal.isNull() ){
+ labelTexts.append( sVal );
+ bDone = true;
+ }
+ }else{
+ labelTexts.clear();
+ bDone = false;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+
+ if ( bDone ) {
+ // Some strings were found, now let us see which of them are
+ // actually to be taken right now.
+ //
+ //
+ // F E A T U R E P L A N N E D F O R F U T U R E . . .
+ //
+ //
+
+ }
+ else {
+ // No strings were found, so let us either calculate the texts
+ // based upon the numerical values of the associated dataset(s)
+ // or just compose some default texts...
+ if ( data.usedCols() && bSteadyCalc ) {
+ // double values for numerical coordinates
+ double nLow = 0.01;
+ double nHigh = 0.0;
+ double orgLow = 0.0;
+ double orgHigh = 0.0;
+ double nDelta = 0.0;
+ double nDist = 0.0;
+
+ // VERTICAL axes support three modes:
+ enum { Normal, Stacked, Percent } mode;
+
+ if( bVertAxis ){
+ switch ( params_chartType ) {
+ case KDChartParams::Bar:
+ if ( KDChartParams::BarStacked
+ == params.barChartSubType() )
+ mode = Stacked;
+ else if ( KDChartParams::BarPercent
+ == params.barChartSubType() )
+ mode = Percent;
+ else
+ mode = Normal;
+ break;
+ case KDChartParams::Line:
+ if ( KDChartParams::LineStacked
+ == params.lineChartSubType() )
+ mode = Stacked;
+ else if ( KDChartParams::LinePercent
+ == params.lineChartSubType() )
+ mode = Percent;
+ else
+ mode = Normal;
+ break;
+ case KDChartParams::Area:
+ if ( KDChartParams::AreaStacked
+ == params.areaChartSubType() )
+ mode = Stacked;
+ else if ( KDChartParams::AreaPercent
+ == params.areaChartSubType() )
+ mode = Percent;
+ else
+ mode = Normal;
+ break;
+ case KDChartParams::HiLo:
+ case KDChartParams::BoxWhisker:
+ mode = Normal;
+ break;
+ case KDChartParams::Polar:
+ if ( KDChartParams::PolarStacked
+ == params.polarChartSubType() )
+ mode = Stacked;
+ else if ( KDChartParams::PolarPercent
+ == params.polarChartSubType() )
+ mode = Percent;
+ else
+ mode = Normal;
+ break;
+ default: {
+ // Should not happen
+ qDebug( "IMPLEMENTATION ERROR: Unknown params_chartType in calculateLabelTexts()" );
+ mode = Normal;
+ }
+ }
+ }else
+ mode = Normal; // this axis is not a vertical axis
+
+ uint nLabels = 200;
+
+ // find highest and lowest value of associated dataset(s)
+ bool bOrdFactorsOk = false;
+
+ if( adjustTheValues ){
+ nDelta = fabs( trueDelta );
+ pDelimDelta = trueDeltaPix;
+ nLow = QMIN( para.trueAxisLow(), para.trueAxisHigh() );
+ //qDebug("\nsearching: para.trueAxisLow() %f para.trueAxisHigh() %f",para.trueAxisLow(),para.trueAxisHigh());
+ double orgLow( nLow );
+ modf( nLow / nDelta, &nLow );
+ nLow *= nDelta;
+ if ( nLow > orgLow )
+ nLow -= nDelta;
+ if ( 0.0 < nLow && 0.0 >= orgLow )
+ nLow = 0.0;
+ nHigh = nLow;
+ double dx = fabs( pXDeltaFactor * pDelimDelta );
+ double dy = fabs( pYDeltaFactor * pDelimDelta );
+ double x = 0.0;
+ double y = 0.0;
+ nLabels = 1;
+ if( axisLength ){
+ do{
+ ++nLabels;
+ nHigh += nDelta;
+ x += dx;
+ y += dy;
+ }while( x < axisLength && y < axisLength );
+ nHigh -= nDelta;
+ --nLabels;
+ }
+ nDist = nHigh - nLow;
+ bOrdFactorsOk = true;
+
+ }
+
+ if( !bOrdFactorsOk ){
+ const bool bAutoCalcStart =
+ ( Percent != mode )
+ && ( KDCHART_AXIS_LABELS_AUTO_LIMIT == para.axisValueStart() );
+ const bool bAutoCalcEnd =
+ ( Percent != mode )
+ && ( KDCHART_AXIS_LABELS_AUTO_LIMIT == para.axisValueEnd() );
+
+ if( !bIsDouble && !isDateTime ){
+ // no data at all: let us use our default 0..10 range
+ nLow = 0.0;
+ nHigh = 10.0;
+ nDist = 10.0;
+ nDelta = 1.0;
+ nSubDelimFactor = 0.5;
+ bIsDouble = true;
+ bOrdFactorsOk = true;
+ }else if( mode == Percent ){
+ // precentage mode: we use a 0..100 range
+ nLow = 0.0;
+ nHigh = 100.0;
+ nDist = 100.0;
+ nDelta = 10.0;
+ nSubDelimFactor = 0.25;
+ bOrdFactorsOk = true;
+ }else{
+ //qDebug("\ngo: nLow: %f nHigh: %f", nLow, nHigh );
+ // get the raw start value
+ const bool bStackedMode = (mode == Stacked);
+ if( bAutoCalcStart ){
+ if ( dataDataset == KDCHART_ALL_DATASETS ) {
+ if( bIsDouble ){
+ nLow = bStackedMode
+ ? QMIN( data.minColSum(), 0.0 )
+ : data.minValue( coordinate,
+ isLogarithmic );
+ //qDebug("\n1: nLow: %f", nLow );
+
+ }else{
+ dtLow = data.minDtValue( coordinate );
+ }
+ } else {
+ if( bIsDouble ){
+ nLow = bStackedMode
+ ? QMIN( data.minColSum( dataDataset, dataDataset2 ),
+ 0.0 )
+ : data.minInRows( dataDataset,dataDataset2,
+ coordinate,
+ isLogarithmic );
+ }else{
+ dtLow = data.minDtInRows( dataDataset,dataDataset2,
+ coordinate );
+ }
+ }
+ }else{
+ if( bIsDouble ){
+ if( QVariant::Double == para.axisValueStart().type() )
+ nLow = para.axisValueStart().toDouble();
+ }else{
+ if( QVariant::DateTime == para.axisValueStart().type() )
+ dtLow = para.axisValueStart().toDateTime();
+ }
+ }
+
+ // get the raw end value
+ if( bAutoCalcEnd ){
+ if ( dataDataset == KDCHART_ALL_DATASETS ) {
+ if( bIsDouble ){
+ nHigh = bStackedMode
+ ? QMAX( data.maxColSum(), 0.0 )
+ : data.maxValue( coordinate );
+ }else{
+ dtHigh = data.maxDtValue( coordinate );
+ }
+ } else {
+ if( bIsDouble )
+ nHigh = bStackedMode
+ ? QMAX( data.maxColSum( dataDataset, dataDataset2 ),
+ 0.0 )
+ : data.maxInRows( dataDataset,dataDataset2,
+ coordinate );
+ else
+ dtHigh = data.maxDtInRows( dataDataset,dataDataset2,
+ coordinate );
+ }
+ //qDebug("\nbAutoCalcEnd:\n nLow: %f\n nHigh: %f", nLow, nHigh );
+ }else{
+ if( bIsDouble ){
+ if( QVariant::Double == para.axisValueEnd().type() )
+ nHigh = para.axisValueEnd().toDouble();
+ }else{
+ if( QVariant::DateTime == para.axisValueEnd().type() )
+ dtHigh = para.axisValueEnd().toDateTime();
+ }
+ }
+ }
+
+
+ //qDebug("\nnew: nLow: %f nHigh: %f", nLow, nHigh );
+
+ if( bIsDouble ) {
+ if( DBL_MAX == nLow
+ || ( ( 0.0 == nHigh || 0 == nHigh )
+ && ( 0.0 == nLow || 0 == nLow ) ) ) {
+ // qDebug("NO values or all values have ZERO value, showing 0.0 - 10.0 span");
+ nLow = 0.0;
+ nHigh = 10.0;
+ nDist = 10.0;
+ nDelta = 1.0;
+ nSubDelimFactor = 0.5;
+ bOrdFactorsOk = true;
+ //qDebug("nLow: %f, nHigh: %f", nLow, nHigh);
+ }else if( nLow == nHigh ){
+ // if both values are equal, but NOT Zero
+ // -> move the appropriate one to Zero
+ if( nLow < 0.0 )
+ nHigh = 0.0;
+ else
+ nLow = 0.0;
+ //qDebug("nLow: %f, nHigh: %f", nLow, nHigh);
+ }else if( nHigh < nLow ){
+ // make sure nLow is <= nHigh
+ double nTmp = nLow;
+ nLow = nHigh;
+ nHigh = nTmp;
+ }
+ } else if( isDateTime ){
+ bool toggleDts = dtLow > dtHigh;
+ if( toggleDts ) {
+ QDateTime dt( dtLow );
+ dtLow = dtHigh;
+ dtHigh = dt;
+ }
+ double secDist = dtLow.secsTo( dtHigh );
+ secDist += (dtHigh.time().msec() - dtLow.time().msec()) / 1000.0;
+ const double aDist = fabs( secDist );
+ const double secMin = 60.0;
+ const double secHour = 60.0 * secMin;
+ const double secDay = 24.0 * secHour;
+ //
+ // we temporarily disable week alignment until bug
+ // is fixed (1st week of year must not start in the
+ // preceeding year but rather be shown incompletely)
+ //
+ // (khz, 2003/10/10)
+ //
+ //const int secWeek = 7 * secDay;
+ const double secMonth = 30 * secDay; // approx.
+ const double secYear = 12 * secMonth; // approx.
+ if( 2.0*secMin > aDist )
+ dtDeltaScale = KDChartAxisParams::ValueScaleSecond;
+ else if( 2.0*secHour > aDist )
+ dtDeltaScale = KDChartAxisParams::ValueScaleMinute;
+ else if( 2.0*secDay > aDist )
+ dtDeltaScale = KDChartAxisParams::ValueScaleHour;
+ // khz: else if( 2*secWeek > aDist )
+ // khz: dtDeltaScale = KDChartAxisParams::ValueScaleDay;
+ else if( 2.0*secMonth > aDist )
+ dtDeltaScale = KDChartAxisParams::ValueScaleDay;
+ // khz: dtDeltaScale = KDChartAxisParams::ValueScaleWeek;
+
+ else if( 2.0*secYear > aDist )
+ dtDeltaScale = KDChartAxisParams::ValueScaleMonth;
+ else if( 10.0*secYear > aDist )
+ dtDeltaScale = KDChartAxisParams::ValueScaleQuarter;
+ else
+ dtDeltaScale = KDChartAxisParams::ValueScaleYear;
+
+
+ //const int yearLow = dtLow.date().year();
+ const int monthLow = dtLow.date().month();
+ // khz: currently unused: const int dowLow = dtLow.date().dayOfWeek();
+ const int dayLow = dtLow.date().day();
+ const int hourLow = dtLow.time().hour();
+ const int minuteLow = dtLow.time().minute();
+ const int secondLow = dtLow.time().second();
+
+ //const int yearHigh = dtHigh.date().year();
+ const int monthHigh = dtHigh.date().month();
+ // khz: currently unused: const int dowHigh = dtHigh.date().dayOfWeek();
+ const int hourHigh = dtHigh.time().hour();
+ const int minuteHigh = dtHigh.time().minute();
+ const int secondHigh = dtHigh.time().second();
+ int yearLowD = 0;
+ int monthLowD = 0;
+ int dayLowD = 0;
+ int hourLowD = 0;
+ int minuteLowD = 0;
+ int secondLowD = 0;
+ int yearHighD = 0;
+ int monthHighD = 0;
+ int dayHighD = 0;
+ int hourHighD = 0;
+ int minuteHighD = 0;
+ int secondHighD = 0;
+ bool gotoEndOfMonth = false;
+ switch( dtDeltaScale ) {
+ case KDChartAxisParams::ValueScaleSecond:
+ //qDebug("\nKDChartAxisParams::ValueScaleSecond");
+ if( 5.0 < aDist ){
+ secondLowD = secondLow % 5;
+ if( secondHigh % 5 )
+ secondHighD = 5 - secondHigh % 5;
+ }
+ break;
+ case KDChartAxisParams::ValueScaleMinute:
+ //qDebug("\nKDChartAxisParams::ValueScaleMinute");
+ secondLowD = secondLow;
+ secondHighD = 59-secondHigh;
+ break;
+ case KDChartAxisParams::ValueScaleHour:
+ //qDebug("\nKDChartAxisParams::ValueScaleHour");
+ minuteLowD = minuteLow;
+ secondLowD = secondLow;
+ minuteHighD = 59-minuteHigh;
+ secondHighD = 59-secondHigh;
+ break;
+ case KDChartAxisParams::ValueScaleDay:
+ //qDebug("\nKDChartAxisParams::ValueScaleDay");
+ hourLowD = hourLow;
+ minuteLowD = minuteLow;
+ secondLowD = secondLow;
+ hourHighD = 23-hourHigh;
+ minuteHighD = 59-minuteHigh;
+ secondHighD = 59-secondHigh;
+ break;
+ case KDChartAxisParams::ValueScaleWeek:
+ //qDebug("\nKDChartAxisParams::ValueScaleWeek");
+ // khz: week scaling is disabled at the moment
+ /*
+ dayLowD = dowLow - 1;
+ hourLowD = hourLow;
+ minuteLowD = minuteLow;
+ secondLowD = secondLow;
+ if( 7 > dowHigh )
+ dayHighD = 7 - dowHigh + 1;
+ */
+ break;
+ case KDChartAxisParams::ValueScaleMonth:
+ //qDebug("\nKDChartAxisParams::ValueScaleMonth");
+ if( 1 < dayLow )
+ dayLowD = dayLow - 1;
+ hourLowD = hourLow;
+ minuteLowD = minuteLow;
+ secondLowD = secondLow;
+ gotoEndOfMonth = true;
+ break;
+ case KDChartAxisParams::ValueScaleQuarter:
+ //qDebug("\nKDChartAxisParams::ValueScaleQuarter");
+ monthLowD = ( monthLow - 1 ) % 3;
+ dayLowD = dayLow;
+ hourLowD = hourLow;
+ minuteLowD = minuteLow;
+ secondLowD = secondLow;
+ if( ( monthHigh - 1 ) % 3 )
+ monthHighD = 3 - ( monthHigh - 1 ) % 3;
+ gotoEndOfMonth = true;
+ break;
+ case KDChartAxisParams::ValueScaleYear:
+ //qDebug("\nKDChartAxisParams::ValueScaleYear");
+ monthLowD = monthLow;
+ dayLowD = dayLow;
+ hourLowD = hourLow;
+ minuteLowD = minuteLow;
+ secondLowD = secondLow;
+ if( 12 > monthHigh )
+ monthHighD = 12 - monthHigh;
+ gotoEndOfMonth = true;
+ break;
+ default:
+ /* NOOP */
+ break;
+ }
+ dtLow = dtLow.addSecs( -1 * (secondLowD + 60*minuteLowD + 3600*hourLowD) );
+ dtLow = dtLow.addDays( -1 * dayLowD );
+ dtAddMonths( dtLow, -1 * monthLowD, dtLow );
+ dtAddYears( dtLow, -1 * yearLowD, dtLow );
+ dtHigh = dtHigh.addSecs( secondHighD + 60*minuteHighD + 3600* hourHighD );
+ dtHigh = dtHigh.addDays( dayHighD );
+ dtAddMonths( dtHigh, monthHighD, dtHigh );
+ dtAddYears( dtHigh, yearHighD, dtHigh );
+ if( gotoEndOfMonth ){
+ dtHigh.setDate( QDate( dtHigh.date().year(),
+ dtHigh.date().month(),
+ dtHigh.date().daysInMonth() ) );
+ dtHigh.setTime( QTime( 23, 59, 59 ) );
+ }
+ if( toggleDts ) {
+ QDateTime dt( dtLow );
+ dtLow = dtHigh;
+ dtHigh = dt;
+ }
+ // secDist = dtLow.secsTo( dtHigh );
+
+ // NOTE: nSubDelimFactor is not set here since it
+ // cannot be used for QDateTime values.
+ nSubDelimFactor = 0.0;
+ bOrdFactorsOk = true;
+ }
+
+
+ if( !bOrdFactorsOk ) {
+ // adjust one or both of our limit values
+ // according to max-empty-inner-span settings
+ nDist = nHigh - nLow;
+ if( !isLogarithmic ){
+ // replace nLow (or nHigh, resp.) by zero if NOT ALL OF
+ // our values are located outside of the 'max. empty
+ // inner space' (i.e. percentage of the y-axis range
+ // that may to contain NO data entries)
+ int maxEmpty = para.axisMaxEmptyInnerSpan();
+ if( bAutoCalcStart ) {
+ //qDebug("\nbAutoCalcStart:\n nLow: %f\n nHigh: %f", nLow, nHigh );
+ if( 0.0 < nLow ) {
+ if( maxEmpty == KDCHART_AXIS_IGNORE_EMPTY_INNER_SPAN
+ || maxEmpty > ( nLow / nHigh * 100.0 ) )
+ nLow = 0.0;
+ else if( nDist / 100.0 < nLow )
+ nLow -= nDist / 100.0; // shift lowest value
+ }
+ else if( nDist / 100.0 < fabs( nLow ) )
+ nLow -= nDist / 100.0; // shift lowest value
+ nDist = nHigh - nLow;
+ //qDebug("* nLow: %f\n nHigh: %f", nLow, nHigh );
+ }
+ if( bAutoCalcEnd ) {
+ //qDebug("\nbAutoCalcEnd:\n nLow: %f\n nHigh: %f", nLow, nHigh );
+ if( 0.0 > nHigh ) {
+ if( maxEmpty == KDCHART_AXIS_IGNORE_EMPTY_INNER_SPAN
+ || maxEmpty > ( nHigh / nLow * 100.0 ) )
+ nHigh = 0.0;
+ else if( nDist / 100.0 > nHigh )
+ nHigh += nDist / 100.0; // shift highest value
+ }
+ else if( nDist / 100.0 < fabs( nHigh ) )
+ nHigh += nDist / 100.0; // shift highest value
+ nDist = nHigh - nLow;
+ //qDebug("* nLow: %f\n nHigh: %f\n\n", nLow, nHigh );
+ }
+ }
+ }
+
+
+ if( isLogarithmic ){
+ if( bIsDouble ) {
+ //qDebug("\n[L--] nLow: %f, nHigh: %f, nDelta: %f", nLow, nHigh, nDelta );
+ if( 0.0 == QABS( nLow ) )
+ nLow = -5;
+ else{
+ // find the Low / High values for the log. axis
+ nLow = log10( QABS( nLow ) );
+ //if( 0.0 >= nLow ){
+ //nLow = fastPow10( -nLow );
+ //}
+ }
+ nHigh = log10( QABS( nHigh ) );
+
+ //qDebug("[L-0] nLow: %f, nHigh: %f", nLow, nHigh );
+ double intPart=0.0; // initialization necessary for Borland C++
+ double fractPart = modf( nLow, &intPart );
+ //qDebug(" intPart: %f\nfractPart: %f", intPart, fractPart );
+ if( 0.0 > nLow && 0.0 != fractPart )
+ nLow = intPart - 1.0;
+ else
+ nLow = intPart;
+ fractPart = modf( nHigh, &intPart );
+ if( 0.0 != fractPart )
+ nHigh = intPart + 1.0;
+
+ nDist = nHigh - nLow;
+ nDelta = 1.0;
+ nSubDelimFactor = 0.1;
+ //qDebug("\n[L-1] nLow: %f, nHigh: %f, nDelta: %f", nLow, nHigh, nDelta );
+ bOrdFactorsOk = true;
+ }
+ }
+
+
+ if ( !bOrdFactorsOk ) {
+ // adjust one or both of our limit values
+ // according to first two digits of (nHigh - nLow) delta
+ double nDivisor;
+ double nRound;
+ nDist = nHigh - nLow;
+ //qDebug("* nLow: %f\n nHigh: %f nDist: %f\n\n", nLow, nHigh, nDist );
+ // find out factors and adjust nLow and nHigh
+ orgLow = nLow;
+ orgHigh = nHigh;
+ calculateOrdinateFactors( para, isLogarithmic,
+ nDist, nDivisor, nRound,
+ nDelta, nSubDelimFactor,
+ nLow, nHigh );
+ nLabels = params.roundVal( nDist / nDelta );
+
+ //qDebug("\n0. nOrgHigh: %f\n nOrgLow: %f",
+ // orgHigh, orgLow);
+ //qDebug("\n nDist: %f\n nHigh: %f\n nLow: %f",
+ // nDist, nHigh, nLow);
+ //qDebug(" nDelta: %f", nDelta);
+ //qDebug(" nRound: %f", nRound);
+ //qDebug(" nLabels: %u", nLabels);
+
+ if( para.axisSteadyValueCalc() ) {
+ ++nLabels;
+ //qDebug("* nLabels: %u", nLabels );
+ }
+ }
+
+
+ // calculate the amount of nLabels to be written we could take
+ // based on the space we have for writing the label texts
+ if( ! ( KDCHART_AXIS_LABELS_AUTO_DELTA
+ == para.axisValueDelta() ) ){
+ nDist = nHigh - nLow;
+ nDelta = para.axisValueDelta();
+ nLabels = params.roundVal( nDist / nDelta );
+
+ //qDebug("\nI nLow: %f\n nHigh: %f\n nDelta: %f\n nLabels: %u",
+ // nLow, nHigh, nDelta, nLabels );
+
+ if( para.axisSteadyValueCalc() ) {
+ ++nLabels;
+
+ //qDebug("* nLabels: %u", nLabels );
+
+ }
+ }
+
+ // make sure labels fit into available height, if vertical axis
+ if( bVertAxis ) {
+ //Pending Michel
+ //find out the width
+ const KDChartAxisParams & xpara = params.axisParams( KDChartAxisParams::AxisPosBottom );
+ double areaWidth = xpara.axisTrueAreaRect().width();
+ //make sure to avoid inf
+ double areaHeight = para.axisTrueAreaRect().height()>0?para.axisTrueAreaRect().height():1.0;
+ double widthHeight = areaWidth / areaHeight;
+ //qDebug( "widthHeight %f, nDelta %f", widthHeight, nDelta);
+ //qDebug( "maxValue %f", data.maxValue());
+ //qDebug( "maxColSum %f", data.maxColSum());
+ //qDebug( "axisValueEnd() %f", para.axisValueEnd().toDouble());
+ double nDivisor;
+ double nRound;
+ orgLow = nLow;
+ orgHigh = nHigh;
+
+ //check if there are axis limitation - if not (auto calculation):
+ //adjust the axis for 3dbars in order to display the whole top of the bar
+ //in relation to the with and the height of the area.
+ // add conditions for multirows here
+ if ( KDCHART_AXIS_LABELS_AUTO_LIMIT == para.axisValueEnd().toDouble()) {
+ if (params.threeDBars() ) {
+ if ( KDChartParams::BarPercent != params.barChartSubType()) {
+ if ( widthHeight > 1.5 )
+ orgHigh += nDelta * widthHeight;
+ else
+ orgHigh += widthHeight * 0.5;
+ }
+ }
+ } else {
+ orgHigh = nHigh = para.axisValueEnd().toDouble();
+ }
+ //qDebug("\ncalc ordinate 0. nDist: %f\n nLow: %f\n nHigh: %f\n nDelta: %f\n nLabels: %u", nDist, nLow, nHigh, nDelta, nLabels );
+ bool bTryNext = false;
+ uint minLabels = para.axisSteadyValueCalc() ? 3 : 2;
+ // the following must be processed at least twice - to avoid rounding errors
+ int pass = 0;
+ do{
+ nDist = nHigh - nLow;
+ nLow = orgLow;
+ nHigh = orgHigh;
+ /*
+ qDebug("\n=============================================================================\ncalc ordinate 1. nDist: %f\n nLow: %f\n nHigh: %f\n nDelta: %f\n nLabels: %u",
+ nDist, nLow, nHigh, nDelta, nLabels );
+ */
+ calculateOrdinateFactors( para, isLogarithmic,
+ nDist, nDivisor, nRound,
+ nDelta,
+ nSubDelimFactor, nLow, nHigh,
+ bTryNext );
+ nLabels = params.roundVal( nDist / nDelta );
+
+ //qDebug("\ncalc ordinate 2. nDist: %f\n+ nLow: %f\n nHigh: %f\n nDelta: %f\n nLabels: %u",
+ //nDist, nLow, nHigh, nDelta, nLabels );
+ //QString sDelta;sDelta.setNum( nDelta, 'f', 24 );
+ //QString sLow; sLow.setNum( nLow, 'f', 24 );
+ //qDebug("nLow: %f, sLow: %s, sDelta: %s", nLow, sLow.latin1(), sDelta.latin1());
+
+ // special case: End values was set by the user, but no Detla values was set.
+ if( !bAutoCalcEnd && orgHigh > nLow + nLabels * nDelta ) {
+ ++nLabels;
+ //qDebug("\nnLabels: %u\n", nLabels );
+ }
+ if( para.axisSteadyValueCalc() ) {
+ ++nLabels;
+ //qDebug("\nnLabels: %u\n", nLabels );
+ }
+ //qDebug("calc ordinate n. nDist = nHigh - nLow: %f = %f - %f",nDist, nHigh, nLow);
+ //qDebug(" nRound: %f\n", nRound);
+ bTryNext = true;
+ ++pass;
+ }while ( ( pass < 2 )
+ || ( ( minLabels < nLabels )
+ && ( areaHeight < ( nTxtHeight * 1.5 ) * nLabels ) ) );
+ }
+ }
+
+ // finally we can build the texts
+ if( bIsDouble ) {
+ int trueBehindComma = -1;
+ double nVal = nLow;
+ for ( uint i = 0; i < nLabels; ++i ) {
+ if( isLogarithmic ) {
+ labelTexts.append( applyLabelsFormat(
+ fastPow10( static_cast < int > ( nVal ) ),
+ divPow10,
+ behindComma,
+ 1.0 == nDelta ? KDCHART_AXIS_LABELS_AUTO_DELTA : nDelta,
+ trueBehindComma,
+ notation,
+ decimalPoint,
+ thousandsPoint,
+ prefix,
+ postfix,
+ totalLen,
+ padFill,
+ blockAlign ) );
+ } else {
+ labelTexts.append( applyLabelsFormat( nVal,
+ divPow10,
+ behindComma,
+ nDelta,
+ trueBehindComma,
+ notation,
+ decimalPoint,
+ thousandsPoint,
+ prefix,
+ postfix,
+ totalLen,
+ padFill,
+ blockAlign ) );
+ }
+ nVal += nDelta;
+ }
+
+ // save our true Low and High value
+ //qDebug(para.axisSteadyValueCalc()?"\ntrue " : "\nfalse");
+ //qDebug("nVal: %f, nDelta: %f", nVal, nDelta );
+ if ( para.axisSteadyValueCalc() ) {
+ nHigh = nVal - nDelta;
+ }
+ ( ( KDChartAxisParams& ) para ).setTrueAxisLowHighDelta( nLow, nHigh, nDelta );
+ //qDebug("[Z] nLow: %f, nHigh: %f, nDelta: %f", nLow, nHigh, nDelta );
+
+ } else {
+ bool goDown = dtLow > dtHigh;
+ int mult = goDown ? -1 : 1;
+ QDateTime dt( dtLow );
+ nLabels = 0;
+ /*
+ qDebug("dtLow: ");
+ qDebug(dtLow.toString( Qt::ISODate ));
+ qDebug("dtHigh: ");
+ qDebug(dtHigh.toString( Qt::ISODate ));
+ */
+ bool bDone=false;
+ while( !bDone ) {
+ /*
+ qDebug("dtLow: %i %i %i %i:%i:%i",
+ dtLow.date().year(),
+ dtLow.date().month(),
+ dtLow.date().day(),
+ dtLow.time().hour(),
+ dtLow.time().minute(),
+ dtLow.time().second());
+ qDebug("dtHigh: %i %i %i %i:%i:%i",
+ dtHigh.date().year(),
+ dtHigh.date().month(),
+ dtHigh.date().day(),
+ dtHigh.time().hour(),
+ dtHigh.time().minute(),
+ dtHigh.time().second());
+ qDebug("dt: %i %i %i %i:%i:%i",
+ dt.date().year(),
+ dt.date().month(),
+ dt.date().day(),
+ dt.time().hour(),
+ dt.time().minute(),
+ dt.time().second());
+ */
+ ++nLabels;
+ if( autoDtLabels )
+ labelTexts.append( "x" );
+ else
+#if COMPAT_QT_VERSION >= 0x030000
+ labelTexts.append( dt.toString( Qt::ISODate ) );
+#else
+ labelTexts.append( dateTimeToString( dt ) );
+#endif
+ bDone = (goDown ? (dt < dtLow ) : (dt > dtHigh));
+ /*if( bDone ){
+ dtHigh = dt;
+ }else*/{
+ switch( dtDeltaScale ) {
+ case KDChartAxisParams::ValueScaleSecond:
+ dtAddSecs( dt, 1 * mult, dt );
+ break;
+ case KDChartAxisParams::ValueScaleMinute:
+ dtAddSecs( dt, 60 * mult, dt );
+ break;
+ case KDChartAxisParams::ValueScaleHour:
+ dtAddSecs( dt, 3600 * mult, dt );
+ break;
+ case KDChartAxisParams::ValueScaleDay:
+ dtAddDays( dt, 1 * mult, dt );
+ break;
+ case KDChartAxisParams::ValueScaleWeek:
+ dtAddDays( dt, 7 * mult, dt );
+ break;
+ case KDChartAxisParams::ValueScaleMonth:
+ dtAddMonths( dt,1 * mult, dt );
+ break;
+ case KDChartAxisParams::ValueScaleQuarter:
+ dtAddMonths( dt,3 * mult, dt );
+ break;
+ case KDChartAxisParams::ValueScaleYear:
+ dtAddYears( dt, 1 * mult, dt );
+ break;
+ default:
+ dtAddDays( dt, 1 * mult, dt );
+ break;
+ }
+ }
+ }
+ //if( autoDtLabels )
+ // labelTexts.append( "x" );
+ ( ( KDChartAxisParams& ) para ).setTrueAxisDtLowHighDeltaScale(
+ dtLow, dtHigh,
+ dtDeltaScale );
+ // note: pDelimDelta will be calculated below,
+ // look for "COMMOM CALC OF NLABELS, DELIM DELTA..."
+ }
+ bDone = true;
+ }
+
+ // let's generate some strings
+ if ( !bDone ) {
+ // default scenario for abscissa axes
+ uint count = bStatistical
+ ? (data.usedRows() ? data.usedRows() : 1)
+ : (data.usedCols() ? data.usedCols() : 1);
+ //double start( 1.0 );
+ double start( 1.0 + (bSteadyCalc ? 0.0 : static_cast < double >(data.colsScrolledBy())) );
+//qDebug("colsScrolledBy: %i", data.colsScrolledBy());
+//if(bVertAxis)
+//qDebug("vert nVal starting: %f",start);
+//else
+//qDebug("horz nVal starting: %f",start);
+//if(bSteadyCalc)
+//qDebug("bSteadyCalc");
+//else
+//qDebug("not bSteadyCalc");
+ double delta( 1.0 );
+ double finis( start + delta * ( count - 1 ) );
+ const bool startIsDouble = QVariant::Double == para.axisValueStart().type();
+ const bool endIsDouble = QVariant::Double == para.axisValueEnd().type();
+
+ bool deltaIsAuto = true;
+ if ( !( KDCHART_AXIS_LABELS_AUTO_DELTA == para.axisValueDelta() ) ) {
+ delta = para.axisValueDelta();
+ deltaIsAuto = false;
+ }
+ if ( KDCHART_AXIS_LABELS_AUTO_LIMIT == para.axisValueStart() ) {
+ if ( ( KDCHART_AXIS_LABELS_AUTO_LIMIT == para.axisValueEnd() ) ) {
+ finis = start + delta * ( count - 1 );
+ } else {
+ if( endIsDouble ){
+ finis = para.axisValueEnd().toDouble();
+ start = finis - delta * ( count - 1 );
+//qDebug("1 changing: start: %f",start);
+ } else {
+ //
+ //
+ // F E A T U R E P L A N N E D F O R F U T U R E . . .
+ //
+ //
+ }
+ }
+ }else{
+ if ( startIsDouble ) {
+ start = para.axisValueStart().toDouble() + (bSteadyCalc ? 0.0 : static_cast < double >(data.colsScrolledBy()));
+//qDebug("2 changing: start: %f",start);
+ } else {
+ //
+ //
+ // F E A T U R E P L A N N E D F O R F U T U R E . . .
+ //
+ //
+ }
+ if ( !( KDCHART_AXIS_LABELS_AUTO_LIMIT == para.axisValueEnd() ) ) {
+ if (endIsDouble ) {
+ finis = para.axisValueEnd().toDouble();
+ if ( deltaIsAuto ) {
+ delta = ( finis - start ) / count;
+ } else {
+ count = static_cast < uint > (
+ ( finis - start ) / delta );
+ }
+ } else {
+ // auto-rows like
+ // sunday, monday, tuesday, ...
+ //
+ //
+ // F E A T U R E P L A N N E D F O R F U T U R E . . .
+ //
+ //
+ }
+ }
+ else {
+ finis = start + delta * ( count - 1 );
+ }
+ }
+ QString prefix( QObject::tr( "Item " ) );
+ QString postfix;
+
+
+ if ( startIsDouble && endIsDouble ) {
+ int precis =
+ KDCHART_AXIS_LABELS_AUTO_DIGITS == para.axisDigitsBehindComma()
+ ? 0
+ : para.axisDigitsBehindComma();
+ double s = start;
+ double f = finis;
+//qDebug("label loop: s: %f f: %f",s,f);
+ bool up = ( 0.0 < delta );
+ // check the text widths of one large(?) entry
+ // and hope all the entries will
+ // fit into the available space
+ double value = up ? s : f;
+ uint nLabels = 0;
+ while ( up ? ( value <= f ) : ( value >= s ) ) {
+ ++nLabels;
+ value += delta * up ? 1.0 : -1.0;
+ }
+ calculateBasicTextFactors( nTxtHeight, para,
+ averageValueP1000,
+ basicPos, orig, delimLen, nLabels,
+ // start of return parameters
+ pDelimDelta,
+ pTextsX, pTextsY, pTextsW, pTextsH,
+ textAlign );
+ QFont font( para.axisLabelsFont() );
+ if ( para.axisLabelsFontUseRelSize() )
+ font.setPixelSize( static_cast < int > ( nTxtHeight ) );
+ painter->setFont( font );
+ QFontMetrics fm( painter->fontMetrics() );
+
+ if ( fm.width( prefix +
+ QString::number( -fabs( ( s + f ) / 2.0 + delta ),
+ 'f', precis ) )
+ > pTextsW ) {
+ prefix = "";
+ postfix = "";
+ }
+ // now transfer the strings into labelTexts
+ value = up ? s : f;
+ while ( up ? ( value <= f ) : ( value >= s ) ) {
+ labelTexts.append(
+ prefix + QString::number( value, 'f', precis )
+ + postfix );
+ value += delta * up ? 1.0 : -1.0;
+ }
+ } else {
+ // pending(KHZ): make sure this branch will ever be reached
+ // check the text widths largest entry
+ // to make sure it will fit into the available space
+ calculateBasicTextFactors( nTxtHeight, para,
+ averageValueP1000,
+ basicPos, orig, delimLen,
+ count,
+ // start of return parameters
+ pDelimDelta,
+ pTextsX, pTextsY, pTextsW, pTextsH,
+ textAlign );
+ QFont font( para.axisLabelsFont() );
+ if ( para.axisLabelsFontUseRelSize() )
+ font.setPixelSize( static_cast < int > ( nTxtHeight ) );
+ painter->setFont( font );
+ QFontMetrics fm( painter->fontMetrics() );
+
+ if ( fm.width( prefix + QString::number( count - 1 ) )
+ > pTextsW ) {
+ prefix = "";
+ postfix = "";
+ }
+ // now transfer the strings into labelTexts
+ for ( uint i = 1; i <= count; ++i )
+ labelTexts.append(
+ prefix + QString::number( i ) + postfix );
+ }
+ }
+ }
+
+ /*
+ finishing: COMMOM CALC OF NLABELS, DELIM DELTA...
+ */
+ uint nLabels = labelTexts.count()
+ ? labelTexts.count()
+ : 0;
+ ( ( KDChartAxisParams& ) para ).setAxisLabelTexts( &labelTexts );
+
+ if( !adjustTheValues ){
+
+ calculateBasicTextFactors( nTxtHeight, para, averageValueP1000,
+ basicPos, orig, delimLen, nLabels,
+ // start of return parameters
+ pDelimDelta,
+ pTextsX, pTextsY, pTextsW, pTextsH,
+ textAlign );
+ }
+
+ ( ( KDChartAxisParams& ) para ).setTrueAxisDeltaPixels( pDelimDelta );
+
+ //qDebug("\nsetting: para.trueAxisLow() %f para.trueAxisHigh() %f",para.trueAxisLow(),para.trueAxisHigh());
+ //qDebug("\npDelimDelta: %f", pDelimDelta );
+
+ /*
+ qDebug( "Found label texts:" );
+ for ( QStringList::Iterator it = labelTexts.begin();
+ it != labelTexts.end(); ++it )
+ qDebug( ">>> %s", (*it).latin1() );
+ qDebug( "\n" );
+ */
+//qDebug("\nleaving KDChartAxesPainter::calculateLabelTexts() : nTxtHeight: "+QString::number(nTxtHeight));
+}
+
+
+/**
+ Calculates some label text factors needed
+ by function \c calculateLabelTexts()
+
+ \note When calling this function the actual area size for this
+ axis must be set, this means you may only call it when
+ \c KDChartPainter::setupGeometry() has been called before.
+
+ \param nTxtHeight the text height to be used for calculating
+ the return values
+ \param para the KDChartAxisParams that were specified for this axis
+ \param averageValueP1000 (average height+width of the prtbl. area) / 1000
+ \param basicPos the basic axis position returned by
+ KDChartAxisParams::basicAxisPos()
+ \param orig the axis start point
+ \param delimLen the length of one delimiter mark
+ \param nLabels the number of labels to be shown at this axis
+ \param (all others) the reference parameters to be returned
+ by this function
+ */
+/**** static ****/
+void KDChartAxesPainter::calculateBasicTextFactors( double nTxtHeight,
+ const KDChartAxisParams& para,
+ double /*averageValueP1000*/,
+ KDChartAxisParams::AxisPos basicPos,
+ const QPoint& orig,
+ double delimLen,
+ uint nLabels,
+ // start of return params
+ double& pDelimDelta,
+ double& pTextsX,
+ double& pTextsY,
+ double& pTextsW,
+ double& pTextsH,
+ int& textAlign )
+{
+ switch ( basicPos ) {
+ case KDChartAxisParams::AxisPosBottom: {
+ bool bTouchEdges = para.axisLabelsTouchEdges();
+ double wid = para.axisTrueAreaRect().width();
+ double divi = bTouchEdges
+ ? ( 1 < nLabels ? nLabels - 1 : 1 )
+ : ( nLabels ? nLabels : 10 );
+ pDelimDelta = wid / divi;
+
+ pTextsW = pDelimDelta - 4.0;
+ pTextsX = orig.x() + 2.0
+ - ( bTouchEdges
+ ? pDelimDelta / 2.0
+ : 0.0 );
+ pTextsH = para.axisTrueAreaRect().height() - delimLen * 1.33;
+ pTextsY = orig.y()
+ + delimLen * 1.33;
+ textAlign = Qt::AlignHCenter | Qt::AlignTop;
+ /*
+ qDebug("pTextsW %f wid %f nLabels %u", pTextsW, wid, nLabels );
+ */
+ }
+ break;
+ case KDChartAxisParams::AxisPosLeft: {
+ double hig = para.axisTrueAreaRect().height();
+ pDelimDelta = hig / ( 1 < nLabels ? nLabels - 1 : 1 );
+
+ pTextsX = para.axisTrueAreaRect().bottomLeft().x()
+ + 2.0;
+ pTextsY = orig.y() - nTxtHeight / 2;
+ pTextsW = para.axisTrueAreaRect().width()
+ - delimLen * 1.33 - 2.0;
+ pTextsH = nTxtHeight;
+ textAlign = Qt::AlignRight | Qt::AlignVCenter;
+ }
+ break;
+ case KDChartAxisParams::AxisPosTop: {
+ bool bTouchEdges = para.axisLabelsTouchEdges();
+ double wid = para.axisTrueAreaRect().width();
+ double divi = bTouchEdges
+ ? ( 1 < nLabels ? nLabels - 1 : 1 )
+ : ( nLabels ? nLabels : 10 );
+ pDelimDelta = wid / divi;
+
+ pTextsW = pDelimDelta - 4.0;
+ pDelimDelta = wid / divi;
+
+ pTextsX = orig.x() + 2.0
+ - ( bTouchEdges
+ ? pDelimDelta / 2.0
+ : 0.0 );
+ pTextsH = para.axisTrueAreaRect().height() - delimLen * 1.33;
+ pTextsY = para.axisTrueAreaRect().topLeft().y();
+ textAlign = Qt::AlignHCenter | Qt::AlignBottom;
+ }
+ break;
+ case KDChartAxisParams::AxisPosRight: {
+ double hig = para.axisTrueAreaRect().height();
+ pDelimDelta = hig / ( 1 < nLabels ? nLabels - 1 : 1 );
+
+ pTextsX = para.axisTrueAreaRect().bottomLeft().x()
+ + delimLen * 1.33;
+ pTextsY = orig.y() - nTxtHeight / 2;
+ pTextsW = para.axisTrueAreaRect().width()
+ - delimLen * 1.33 - 2.0;
+ pTextsH = nTxtHeight;
+ textAlign = Qt::AlignLeft | Qt::AlignVCenter;
+ }
+ break;
+ default: {
+ qDebug( "IMPLEMENTATION ERROR: KDChartAxesPainter::calculateBasicTextFactors() unhandled enum value." );
+ // NOOP since the 'basicPos' does not support more that these four values.
+ }
+ break;
+ }
+}
+
+
+/**
+ Takes double \c nVal and returns a QString showing the amount of digits
+ behind the comma that was specified by \c behindComma (or calculated
+ automatically by removing trailing zeroes, resp.).
+ To make sure the resulting string looks fine together with other strings
+ of the same label row please specify \c nDelta indicating the step width
+ from one label text to the other.
+ To prevent the function from having to re-calculate the number of
+ digits to keep behind the comma, provide it with a temporary helper
+ variable "trueBehindComma" that has to be initialized with a value
+ smaller than zero.
+
+ \note This function is reserved for internal use.
+ */
+QString KDChartAxesPainter::truncateBehindComma( const double nVal,
+ const int behindComma,
+ const double nDelta,
+ int& trueBehindComma )
+{
+ const int nTrustedPrecision = 6; // when using 15 we got 1.850000 rounded to 1.849999999999999
+
+ const bool bUseAutoDigits = KDCHART_AXIS_LABELS_AUTO_DIGITS == behindComma;
+ const bool bAutoDelta = KDCHART_AXIS_LABELS_AUTO_DELTA == nDelta;
+ QString sVal;
+ sVal.setNum( nVal, 'f', bUseAutoDigits ? nTrustedPrecision
+ : QMIN(behindComma, nTrustedPrecision) );
+ //qDebug("nVal: %f sVal: "+sVal, nVal );
+ //qDebug( QString(" %1").arg(sVal));
+ if ( bUseAutoDigits ) {
+ int comma = sVal.find( '.' );
+ if ( -1 < comma ) {
+ if ( bAutoDelta ) {
+ int i = sVal.length();
+ while ( 1 < i
+ && '0' == sVal[ i - 1 ] )
+ --i;
+ sVal.truncate( i );
+ if ( '.' == sVal[ i - 1 ] )
+ sVal.truncate( i - 1 );
+ } else {
+ if ( 0 > trueBehindComma ) {
+ QString sDelta = QString::number( nDelta, 'f', nTrustedPrecision );
+ int i = sDelta.length();
+ while ( 1 < i
+ && '0' == sDelta[ i - 1 ] )
+ --i;
+ sDelta.truncate( i );
+ if ( '.' == sDelta[ i - 1 ] )
+ trueBehindComma = 0;
+ else {
+ int deltaComma = sDelta.find( '.' );
+ if ( -1 < deltaComma )
+ trueBehindComma = sDelta.length() - deltaComma - 1;
+ else
+ trueBehindComma = 0;
+ }
+ }
+ // now we cut off the too-many digits behind the comma
+ int nPos = comma + ( trueBehindComma ? trueBehindComma + 1 : 0 );
+ sVal.truncate( nPos );
+ }
+ }
+ }
+ //qDebug( QString(" - %1").arg(trueBehindComma));
+ return sVal;
+}
+
+#if 0
+
+#if defined ( Q_WS_WIN)
+#define trunc(x) ((int)(x))
+#endif
+
+#else
+
+// Ugly hack because Solaris (among others?) doesn't have trunc(),
+// since the libs are not C99. I could do a complex #if expression,
+// but instead I will just define trunc() here.
+
+double trunc(double x)
+{
+ return x >= 0.0 ? floor(x) : -floor(-x);
+}
+
+#endif
+
+
+QString KDChartAxesPainter::applyLabelsFormat( const double nVal_,
+ int divPow10,
+ int behindComma,
+ double nDelta_,
+ int& trueBehindComma,
+ KDChartEnums::NumberNotation notation,
+ const QString& decimalPoint,
+ const QString& thousandsPoint,
+ const QString& prefix,
+ const QString& postfix,
+ int totalLen,
+ const QChar& padFill,
+ bool blockAlign )
+{
+ double nVal = nVal_ / fastPow10( divPow10 );
+ double nDelta = nDelta_;
+
+ double valLog10 = 0.0;
+ if( notation == KDChartEnums::NumberNotationScientific ||
+ notation == KDChartEnums::NumberNotationScientificBig ){
+ valLog10 = (nVal != 0.0) ? trunc( log10(QABS(nVal)) ) : 0.0;
+ //qDebug("nVal old: %f valLog10: %f",nVal,valLog10);
+ nVal /= fastPow10( valLog10 );
+ nDelta /= fastPow10( valLog10 );
+ //qDebug("nVal new: %f",nVal);
+ }
+ QString sVal = truncateBehindComma( nVal,
+ behindComma,
+ nDelta,
+ trueBehindComma );
+ //qDebug("sVal : "+sVal+" behindComma: %i",behindComma);
+
+ int posComma = sVal.find( '.' );
+ if( 0 <= posComma ){
+ sVal.replace( posComma, 1, decimalPoint);
+ }else{
+ posComma = sVal.length();
+ }
+ if( notation == KDChartEnums::NumberNotationScientific ||
+ notation == KDChartEnums::NumberNotationScientificBig ){
+ if( notation == KDChartEnums::NumberNotationScientific )
+ sVal.append( "e" );
+ else
+ sVal.append( "E" );
+ sVal.append( QString::number( valLog10, 'f', 0 ) );
+ } else {
+ if( thousandsPoint.length() ){
+ const int minLen = (0 < sVal.length() && '-' == sVal[0])
+ ? 4
+ : 3;
+ int n = posComma; // number of digits at the left side of the comma
+ while( minLen < n ){
+ n -= 3;
+ sVal.insert(n, thousandsPoint);
+ }
+ }
+ }
+ sVal.append( postfix );
+ int nFill = totalLen - (sVal.length() + prefix.length());
+ if( 0 > nFill )
+ nFill = 0;
+ if( !blockAlign )
+ sVal.prepend( prefix );
+ for(int i=0; i < nFill; ++i)
+ sVal.prepend( padFill );
+ if( blockAlign )
+ sVal.prepend( prefix );
+ if ( totalLen > 0 )
+ sVal.truncate( totalLen );
+ /*Pending Michel: Force non fractional values
+ *In case it is a fractional value
+ *and the user has set axisLabelsDigitsBehindComma() == 0
+ *return an empty string
+ */
+ if ( behindComma == 0 && QString::number(nVal).find('.') > 0 )
+ sVal = QString::null;//sVal = "";
+ return sVal;
+}
+
+/**
+ Calculates the factors to be used for calculating ordinate labels texts.
+
+ \note This function is reserved for internal use.
+ */
+void KDChartAxesPainter::calculateOrdinateFactors(
+ const KDChartAxisParams& para,
+ bool isLogarithmic,
+ double& nDist,
+ double& nDivisor,
+ double& nRound,
+ double& nDelta,
+ double& nSubDelimFactor,
+ double& nLow,
+ double& nHigh,
+ bool findNextRound )
+{
+ if ( findNextRound ) {
+ if ( 1.0 > nRound )
+ nRound = 1.0;
+ else
+ if ( 2.0 > nRound )
+ nRound = 2.0;
+ else
+ if ( 2.5 > nRound )
+ nRound = 2.5;
+ else
+ if ( 5.0 > nRound )
+ nRound = 5.0;
+ else {
+ nDivisor *= 10.0;
+ nRound = 1.0;
+ }
+ } else {
+ nDivisor = 1.0;
+ QString sDistDigis2;
+ sDistDigis2.setNum( nDist, 'f', 24);
+ if ( 1.0 > nDist ) {
+ sDistDigis2.remove( 0, 2 );
+ nDivisor = 0.01;
+ while ( 0 < sDistDigis2.length()
+ && '0' == sDistDigis2[ 0 ] ) {
+ nDivisor *= 0.1;
+ sDistDigis2.remove( 0, 1 );
+ }
+ } else {
+ if ( 10.0 > nDist ) {
+ nDivisor = 0.1;
+ // remove comma, if present
+ sDistDigis2.remove( 1, 1 );
+ } else
+ if ( 100.0 > nDist )
+ nDivisor = 1.0;
+ else {
+ int comma = sDistDigis2.find( '.' );
+ if ( -1 < comma )
+ sDistDigis2.truncate( comma );
+ nDivisor = fastPow10( (int)sDistDigis2.length() - 2 );
+ }
+ }
+ sDistDigis2.truncate( 2 );
+ bool bOk;
+ double nDistDigis2( sDistDigis2.toDouble( &bOk ) );
+ if ( !bOk )
+ nDistDigis2 = 10.0;
+ if ( 75.0 <= nDistDigis2 )
+ nRound = 5.0;
+ else
+ if ( 40.0 <= nDistDigis2 )
+ nRound = 2.5;
+ else
+ if ( 20.0 <= nDistDigis2 )
+ nRound = 2.0;
+ else
+ nRound = 1.0;
+ }
+
+ nDelta = nRound * nDivisor;
+
+ // make sure its a whole number > 0 if its a log axis. Just round up.
+ if( isLogarithmic )
+ nDelta = static_cast < int > ( nDelta ) < nDelta
+ ? static_cast < int > ( nDelta ) + 1
+ : static_cast < int > ( nDelta );
+
+ bool bInvertedAxis = ( 0.0 > nDist );
+ if( bInvertedAxis )
+ nDelta *= -1.0;
+
+ /*
+ qDebug(" n D i s t : %f", nDist );
+ qDebug(" n D i v i s o r : %f", nDivisor);
+ qDebug(" n R o u n d : %f", nRound );
+ qDebug(" n D e l t a : %f", nDelta );
+ qDebug(" nHigh : %f", nHigh );
+ qDebug(" nLow : %f", nLow );
+ */
+ if( KDCHART_AXIS_LABELS_AUTO_LIMIT == para.axisValueStart()
+ || !para.axisValueStartIsExact() ) {
+ double orgLow( nLow );
+ modf( nLow / nDelta, &nLow );
+ nLow *= nDelta;
+ if( bInvertedAxis ){
+ if ( nLow < orgLow )
+ nLow += nDelta;
+ if ( 0.0 > nLow && 0.0 <= orgLow )
+ nLow = 0.0;
+ }else{
+ if ( nLow > orgLow )
+ nLow -= nDelta;
+ if ( 0.0 < nLow && 0.0 >= orgLow )
+ nLow = 0.0;
+ }
+ }
+ if ( KDCHART_AXIS_LABELS_AUTO_LIMIT == para.axisValueEnd() ) {
+ double orgHigh( nHigh );
+ modf( nHigh / nDelta, &nHigh );
+ nHigh *= nDelta;
+ if( bInvertedAxis ){
+ if ( nHigh > orgHigh )
+ nHigh -= nDelta;
+ if ( 0.0 < nHigh && 0.0 >= orgHigh )
+ nHigh = 0.0;
+ }else{
+ if ( nHigh < orgHigh )
+ nHigh += nDelta;
+ if ( 0.0 > nHigh && 0.0 <= orgHigh )
+ nHigh = 0.0;
+ }
+ }
+
+ //qDebug(" n H i g h : %f", nHigh );
+ //qDebug(" n L o w : %f\n\n", nLow );
+
+ if ( 1.0 == nRound )
+ nSubDelimFactor = 0.5;
+ else
+ if ( 2.0 == nRound )
+ nSubDelimFactor = 0.25;
+ else
+ if ( 2.5 == nRound )
+ nSubDelimFactor = 0.2;
+ else
+ if ( 5.0 == nRound )
+ nSubDelimFactor = 0.2;
+ else {
+ // Should not happen
+ qDebug( "IMPLEMENTATION ERROR: Unknown nRound in calculateOrdinateFactors()" );
+ nSubDelimFactor = 1.0;
+ }
+
+ nDist = nHigh - nLow;
+}
+
+/**** static ****/
+void KDChartAxesPainter::saveDrawLine( QPainter& painter,
+ QPoint pA,
+ QPoint pZ,
+ QPen pen )
+{
+ const QPen oldPen( painter.pen() );
+ bool bNice = ( pen.color() == oldPen.color() )
+ && ( pen.width() == oldPen.width() )
+ && ( pen.style() == oldPen.style() );
+ if ( !bNice )
+ painter.setPen( pen );
+ painter.drawLine( pA, pZ );
+ if ( !bNice )
+ painter.setPen( oldPen );
+}
+
+/**** static ****/
+void KDChartAxesPainter::dtAddSecs( const QDateTime& org, const int secs, QDateTime& dest )
+{
+ //qDebug("entering KDChartAxesPainter::dtAddSecs() ..");
+ int s = org.time().second();
+ int m = org.time().minute();
+ int h = org.time().hour();
+ int days = 0;
+ if( -1 < secs ){
+ int mins = (s + secs) / 60;
+ if( 0 == mins )
+ s += secs;
+ else{
+ s = (s + secs) % 60;
+ int hours = (m + mins) / 60;
+ if( 0 == hours )
+ m += mins;
+ else{
+ m = (m + mins) % 60;
+ days = (h + hours) / 24;
+ if( 0 == days )
+ h += hours;
+ else{
+ h = (h + hours) % 24;
+ }
+ }
+ }
+ }
+ dest.setTime( QTime(h,m,s) );
+ dest.setDate( org.date() );
+ if( days )
+ dtAddDays( dest, days, dest );
+ //qDebug(".. KDChartAxesPainter::dtAddSecs() done.");
+}
+
+/**** static ****/
+void KDChartAxesPainter::dtAddDays( const QDateTime& org, const int days, QDateTime& dest )
+{
+ //qDebug("entering KDChartAxesPainter::dtAddDays() ..");
+ int d = org.date().day();
+ int m = org.date().month();
+ int y = org.date().year();
+ int dd = (-1 < days) ? 1 : -1;
+ int di = 0;
+ while( di != days ){
+ d += dd;
+ // underrunning day?
+ if( 1 > d ){
+ if( 1 < m ){
+ --m;
+ d = QDate( y,m,1 ).daysInMonth();
+ }
+ else{
+ --y;
+ m = 12;
+ d = 31;
+ }
+ // overrunning day?
+ }else if( QDate( y,m,1 ).daysInMonth() < d ){
+ if( 12 > m )
+ ++m;
+ else{
+ ++y;
+ m = 1;
+ }
+ d = 1;
+ }
+ di += dd;
+ }
+ dest = QDateTime( QDate( y,m,d ), org.time() );
+ //qDebug(".. KDChartAxesPainter::dtAddDays() done.");
+}
+
+/**** static ****/
+void KDChartAxesPainter::dtAddMonths( const QDateTime& org, const int months, QDateTime& dest )
+{
+ //qDebug("entering KDChartAxesPainter::dtAddMonths() ..");
+ int d = org.date().day();
+ int m = org.date().month();
+ int y = org.date().year();
+ int md = (-1 < months) ? 1 : -1;
+ int mi = 0;
+ while( mi != months ){
+ m += md;
+ if( 1 > m ){
+ --y;
+ m = 12;
+ }else if( 12 < m ){
+ ++y;
+ m = 1;
+ }
+ mi += md;
+ }
+ // QMIN takes care for intercalary day
+ dest = QDateTime( QDate( y,m,QMIN( d, QDate( y,m,1 ).daysInMonth() ) ),
+ org.time() );
+ //qDebug(".. KDChartAxesPainter::dtAddMonths() done.");
+}
+
+/**** static ****/
+void KDChartAxesPainter::dtAddYears( const QDateTime& org, const int years, QDateTime& dest )
+{
+ //qDebug("entering KDChartAxesPainter::dtAddYears() ..");
+ int d = org.date().day();
+ int m = org.date().month();
+ int y = org.date().year() + years;
+ dest.setTime( org.time() );
+ // QMIN takes care for intercalary day
+ dest = QDateTime( QDate( y,m,QMIN( d, QDate( y,m,d ).daysInMonth() ) ),
+ org.time() );
+ //qDebug(".. KDChartAxesPainter::dtAddYears() done.");
+}
+
+
+
+void KDChartAxesPainter::calculateAbscissaInfos( const KDChartParams& params,
+ const KDChartTableDataBase& data,
+ uint datasetStart,
+ uint datasetEnd,
+ double logWidth,
+ const QRect& dataRect,
+ abscissaInfos& infos )
+{
+ if( params.axisParams( KDChartAxisParams::AxisPosBottom ).axisVisible()
+ && ( KDChartAxisParams::AxisTypeUnknown
+ != params.axisParams( KDChartAxisParams::AxisPosBottom ).axisType() ) )
+ infos.abscissaPara = &params.axisParams( KDChartAxisParams::AxisPosBottom );
+ else
+ if( params.axisParams( KDChartAxisParams::AxisPosBottom2 ).axisVisible()
+ && ( KDChartAxisParams::AxisTypeUnknown
+ != params.axisParams( KDChartAxisParams::AxisPosBottom2 ).axisType() ) )
+ infos.abscissaPara = &params.axisParams( KDChartAxisParams::AxisPosBottom2 );
+ else
+ if( params.axisParams( KDChartAxisParams::AxisPosTop ).axisVisible()
+ && ( KDChartAxisParams::AxisTypeUnknown
+ != params.axisParams( KDChartAxisParams::AxisPosTop ).axisType() ) )
+ infos.abscissaPara = &params.axisParams( KDChartAxisParams::AxisPosTop );
+ else
+ if( params.axisParams( KDChartAxisParams::AxisPosTop2 ).axisVisible()
+ && ( KDChartAxisParams::AxisTypeUnknown
+ != params.axisParams( KDChartAxisParams::AxisPosTop2 ).axisType() ) )
+ infos.abscissaPara = &params.axisParams( KDChartAxisParams::AxisPosTop2 );
+ else
+ // default is bottom axis:
+ infos.abscissaPara = &params.axisParams( KDChartAxisParams::AxisPosBottom );
+
+ if( infos.abscissaPara->axisLabelsTouchEdges() )
+ infos.bCenterThePoints = false;
+
+ infos.bAbscissaDecreasing = infos.abscissaPara->axisValuesDecreasing();
+ infos.bAbscissaIsLogarithmic
+ = KDChartAxisParams::AxisCalcLogarithmic == infos.abscissaPara->axisCalcMode();
+
+
+ // Number of values: If -1, use all values, otherwise use the
+ // specified number of values.
+ infos.numValues = 0;
+ if ( params.numValues() > -1 )
+ infos.numValues = params.numValues();
+ else
+ infos.numValues = data.usedCols();
+
+ QVariant::Type type2Ref = QVariant::Invalid;
+ infos.bCellsHaveSeveralCoordinates =
+ data.cellsHaveSeveralCoordinates( datasetStart, datasetEnd,
+ &type2Ref );
+
+ infos.numLabels = (infos.abscissaPara &&
+ infos.abscissaPara->axisLabelTexts())
+ ? infos.abscissaPara->axisLabelTexts()->count()
+ : infos.numValues;
+ if( 0 >= infos.numLabels )
+ infos.numLabels = 1;
+
+ infos.bAbscissaHasTrueAxisValues =
+ infos.abscissaPara && (0.0 != infos.abscissaPara->trueAxisDelta());
+ infos.abscissaStart = infos.bAbscissaHasTrueAxisValues
+ ? infos.abscissaPara->trueAxisLow()
+ : 0.0;
+ infos.abscissaEnd = infos.bAbscissaHasTrueAxisValues
+ ? infos.abscissaPara->trueAxisHigh()
+ : 1.0 * (infos.numLabels - 1);
+ infos.abscissaSpan = fabs( infos.abscissaEnd - infos.abscissaStart );
+ infos.abscissaDelta = infos.bAbscissaHasTrueAxisValues
+ ? infos.abscissaPara->trueAxisDelta()
+ : ( ( 0.0 != infos.abscissaSpan )
+ ? ( infos.abscissaSpan / infos.numLabels )
+ : infos.abscissaSpan );
+
+ //qDebug( bAbscissaDecreasing ? "bAbscissaDecreasing = TRUE" : "bAbscissaDecreasing = FALSE");
+ //qDebug( abscissaHasTrueAxisValues ? "abscissaHasTrueAxisValues = TRUE" : "abscissaHasTrueAxisValues = FALSE");
+ //qDebug( "abscissaDelta = %f", abscissaDelta);
+
+ infos.bAbscissaHasTrueAxisDtValues =
+ (QVariant::DateTime == type2Ref) &&
+ infos.abscissaPara &&
+ infos.abscissaPara->trueAxisDtLow().isValid();
+ if( infos.bAbscissaHasTrueAxisDtValues ){
+ infos.numLabels = 200;
+ infos.bCenterThePoints = false;
+ }
+
+ infos.dtLowPos = infos.bAbscissaHasTrueAxisDtValues
+ ? infos.abscissaPara->axisDtLowPosX() - dataRect.x()
+ : 0.0;
+ infos.dtHighPos = infos.bAbscissaHasTrueAxisDtValues
+ ? infos.abscissaPara->axisDtHighPosX() - dataRect.x()
+ : logWidth;
+ infos.abscissaDtStart = infos.bAbscissaHasTrueAxisDtValues
+ ? infos.abscissaPara->trueAxisDtLow()
+ : QDateTime();
+ infos.abscissaDtEnd = infos.bAbscissaHasTrueAxisDtValues
+ ? infos.abscissaPara->trueAxisDtHigh()
+ : QDateTime();
+
+ //Pending Michel case when same hh:mm:ss but different msecs
+ infos.bScaleLessThanDay = ( infos.bAbscissaHasTrueAxisDtValues
+ ? infos.abscissaPara->trueAxisDtDeltaScale()
+ : KDChartAxisParams::ValueScaleDay )
+ < KDChartAxisParams::ValueScaleDay;
+ if ( infos.abscissaDtStart.time() == infos.abscissaDtEnd.time() && infos.bScaleLessThanDay )
+ infos.dtHighPos = logWidth;
+
+ // adjust the milli seconds:
+ infos.abscissaDtStart.setTime(
+ QTime( infos.abscissaDtStart.time().hour(),
+ infos.abscissaDtStart.time().minute(),
+ infos.abscissaDtStart.time().second(),
+ 0 ) );
+ infos.abscissaDtEnd.setTime(
+ QTime( infos.abscissaDtEnd.time().hour(),
+ infos.abscissaDtEnd.time().minute(),
+ infos.abscissaDtEnd.time().second(),
+ 999 ) );
+ //qDebug( infos.abscissaPara->trueAxisDtLow().toString("yyyy-MM-dd-hh:mm:ss.zzz"));
+ //qDebug( infos.abscissaPara->trueAxisDtHigh().toString("yyyy-MM-dd-hh:mm:ss.zzz"));
+ //qDebug(infos.abscissaDtStart.toString("yyyy-MM-dd-hh:mm:ss.zzz"));
+ //qDebug(infos.abscissaDtEnd.toString("yyyy-MM-dd-hh:mm:ss.zzz"));
+/*
+ infos.bScaleLessThanDay = ( infos.bAbscissaHasTrueAxisDtValues
+ ? infos.abscissaPara->trueAxisDtDeltaScale()
+ : KDChartAxisParams::ValueScaleDay )
+ < KDChartAxisParams::ValueScaleDay;
+*/
+ if( infos.bAbscissaHasTrueAxisDtValues ){
+ if( infos.bScaleLessThanDay ){
+ infos.abscissaDtSpan = infos.abscissaDtStart.secsTo( infos.abscissaDtEnd );
+
+ /* NOTE: We do *not* add the milli seconds because they aren't covered
+ by the span indicated by infos.dtHighPos - infos.dtLowPos.
+ if( infos.abscissaDtStart.time().msec() || infos.abscissaDtEnd.time().msec() )
+ infos.abscissaDtSpan =
+ ( infos.abscissaDtEnd.time().msec() -
+ infos.abscissaDtStart.time().msec() ) / 1000.0;
+ */
+ }
+ else{
+ infos.abscissaDtSpan = infos.abscissaDtStart.daysTo( infos.abscissaDtEnd );
+ if( infos.abscissaDtStart.time().msec() || infos.abscissaDtEnd.time().msec() )
+ infos.abscissaDtSpan +=
+ ( infos.abscissaDtEnd.time().msec() -
+ infos.abscissaDtStart.time().msec() ) / (86400.0 * 1000.0);
+ if( infos.abscissaDtEnd.time().second() )
+ infos.abscissaDtSpan += infos.abscissaDtEnd.time().second() / 86400.0;
+ if( infos.abscissaDtEnd.time().minute() )
+ infos.abscissaDtSpan += infos.abscissaDtEnd.time().minute() / 1440.0;
+ if( infos.abscissaDtEnd.time().hour() )
+ infos.abscissaDtSpan += infos.abscissaDtEnd.time().hour() / 24.0;
+ }
+ }else
+ infos.abscissaDtSpan = 10.0;
+ if( 0 == infos.abscissaDtSpan || 0.0 == infos.abscissaDtSpan )
+ infos.abscissaDtSpan = 1.0;
+
+ infos.abscissaDtPixelsPerScaleUnit = (infos.dtHighPos - infos.dtLowPos)/ infos.abscissaDtSpan;
+
+ if( infos.bAbscissaHasTrueAxisDtValues )
+ infos.abscissaDelta = 20.0;
+
+ infos.pointDist
+ = ( infos.abscissaPara && (0.0 != infos.abscissaPara->trueAxisDeltaPixels()) )
+ ? infos.abscissaPara->trueAxisDeltaPixels()
+ : ( logWidth /
+ (
+ (1 > ((double)(infos.numLabels) - (infos.bCenterThePoints ? 0.0 : 1.0)))
+ ? ((double)(infos.numLabels) - (infos.bCenterThePoints ? 0.0 : 1.0))
+ : 1 ) );
+
+ infos.abscissaPixelsPerUnit = ( 0.0 != infos.abscissaDelta )
+ ? ( infos.pointDist / infos.abscissaDelta )
+ : infos.pointDist;
+
+ //const double infos.abscissaZeroPos2 = -1.0 * infos.abscissaPixelsPerUnit * infos.abscissaStart;
+ infos.abscissaZeroPos = infos.abscissaPara->axisZeroLineStartX() - dataRect.x();
+ //qDebug("abscissaZeroPos %f abscissaZeroPos2 %f",abscissaZeroPos,abscissaZeroPos2);
+
+ /*
+ qDebug(abscissaPara ?
+ "\nabscissaPara: OK" :
+ "\nabscissaPara: leer");
+ qDebug(abscissaHasTrueAxisValues ?
+ "abscissaHasTrueAxisValues: TRUE" :
+ "abscissaHasTrueAxisValues: FALSE");
+ qDebug("abscissaStart: %f", abscissaStart);
+ qDebug("abscissaEnd : %f", abscissaEnd);
+ qDebug("abscissaPara->trueAxisDelta(): %f", abscissaPara->trueAxisDelta());
+ qDebug("numValues : %u, numLabels : %u", numValues, numLabels);
+ */
+}
+
+
+
+bool KDChartAxesPainter::calculateAbscissaAxisValue( const QVariant& value,
+ abscissaInfos& ai,
+ int colNumber,
+ double& xValue )
+{
+ if( ai.bCellsHaveSeveralCoordinates ) {
+ if( QVariant::Double == value.type() ) {
+ double dVal = value.toDouble();
+ if( ai.bAbscissaIsLogarithmic ){
+ if( 0.0 < dVal )
+ xValue = ai.abscissaPixelsPerUnit * log10( dVal );
+ else
+ xValue = -10250.0;
+ }else{
+ xValue = ai.abscissaPixelsPerUnit * dVal;
+ }
+ xValue *= ai.bAbscissaDecreasing ? -1.0 : 1.0;
+ xValue += ai.abscissaZeroPos;
+ }
+ else if( ai.bAbscissaHasTrueAxisDtValues &&
+ QVariant::DateTime == value.type() ) {
+ const QDateTime dtVal = value.toDateTime();
+ double dT = ( ai.bScaleLessThanDay )
+ ? ai.abscissaDtStart.secsTo( dtVal )
+ : ai.abscissaDtStart.daysTo( dtVal );
+ /*
+ qDebug("abscissaDtStart: %i %i %i %i:%i:%i.%i",
+ ai.abscissaDtStart.date().year(),
+ ai.abscissaDtStart.date().month(),
+ ai.abscissaDtStart.date().day(),
+ ai.abscissaDtStart.time().hour(),
+ ai.abscissaDtStart.time().minute(),
+ ai.abscissaDtStart.time().second(),
+ ai.abscissaDtStart.time().msec());
+ */
+ //qDebug("days to = %f",dT);
+
+ /*
+ qDebug(" dtVal: %i %i %i %i:%i:%i.%i",
+ dtVal.date().year(),
+ dtVal.date().month(),
+ dtVal.date().day(),
+ dtVal.time().hour(),
+ dtVal.time().minute(),
+ dtVal.time().second(),
+ dtVal.time().msec());
+ */
+ xValue = ai.abscissaDtPixelsPerScaleUnit * dT;
+ if( dtVal.time().msec() )
+ xValue += (ai.abscissaDtPixelsPerScaleUnit * dtVal.time().msec())
+ / ( ai.bScaleLessThanDay
+ ? 1000.0
+ : (1000.0 * 86400.0) );
+ //qDebug("xValue: %f",xValue);
+ if( !ai.bScaleLessThanDay ){
+ if( dtVal.time().second() )
+ xValue += (ai.abscissaDtPixelsPerScaleUnit * dtVal.time().second())
+ / 86400.0;
+ if( dtVal.time().minute() )
+ xValue += (ai.abscissaDtPixelsPerScaleUnit * dtVal.time().minute())
+ / 1440.0;
+ if( dtVal.time().hour() )
+ xValue += (ai.abscissaDtPixelsPerScaleUnit * dtVal.time().hour())
+ / 24.0;
+ }
+ xValue *= ai.bAbscissaDecreasing ? -1.0 : 1.0;
+ xValue += ai.dtLowPos;
+ // qDebug("xValue = dtLowPos + abscissaDtPixelsPerScaleUnit * dT\n%f = %f + %f * %f",
+ // xValue, dtLowPos, abscissaDtPixelsPerScaleUnit, dT);
+ }
+ else
+ return false;
+ } else
+ xValue = ai.pointDist * ( double ) colNumber;
+ return true;
+}
+
+
+
+/*************************************************************************/
+/*************************************************************************/
+/*************************************************************************/
+/*** ***/
+/*** Framework for data drawing using cartesian axes (Bar, Line, ...) ***/
+/*** ***/
+/*************************************************************************/
+/*************************************************************************/
+/*************************************************************************/
+
+/**
+ Paints the actual data area and registers the region for the data
+ points if \a regions is not 0.
+
+ \param painter the QPainter onto which the chart should be painted
+ \param data the data that will be displayed as a chart
+ \param paint2nd specifies whether the main chart or the additional chart is to be drawn now
+ \param regions a pointer to a list of regions that will be filled
+ with regions representing the data segments, if not null
+ */
+void KDChartAxesPainter::paintData( QPainter* painter,
+ KDChartTableDataBase* data,
+ bool paint2nd,
+ KDChartDataRegionList* regions )
+{
+ bool bNormalMode = isNormalMode();
+
+ uint chart = paint2nd ? 1 : 0;
+
+ // find out the ordinate axis (or axes, resp.) belonging to this chart
+ // (up to 4 ordinates might be in use: 2 left ones and 2 right ones)
+ uint axesCount;
+ KDChartParams::AxesArray ordinateAxes;
+ ordinateAxes.resize( KDCHART_CNT_ORDINATES );
+ if( !params()->chartAxes( chart, axesCount, ordinateAxes ) ) {
+ // no axis - no fun!
+ return;
+ // We cannot draw data without an axis having calculated high/low
+ // values and position of the zero line before.
+
+ // PENDING(khz) Allow drawing without having a visible axis!
+ }
+
+ //const KDChartParams::ChartType params_chartType
+ // = paint2nd ? params()->additionalChartType() : params()->chartType();
+
+ double logWidth = _dataRect.width();
+ double areaWidthP1000 = logWidth / 1000.0;
+
+ int nClipShiftUp = clipShiftUp(bNormalMode, areaWidthP1000);
+ QRect ourClipRect( _dataRect );
+ if ( 0 < ourClipRect.top() ) {
+ ourClipRect.setTop( ourClipRect.top() - nClipShiftUp );
+ ourClipRect.setHeight( ourClipRect.height() + nClipShiftUp - 1 );
+ } else
+ ourClipRect.setHeight( ourClipRect.height() + nClipShiftUp / 2 - 1 );
+
+ // protect axes ?
+ //ourClipRect.setBottom( ourClipRect.bottom() - 1 );
+ //ourClipRect.setLeft( ourClipRect.left() + 1 );
+ //ourClipRect.setRight( ourClipRect.right() - 1 );
+
+ const QWMatrix & world = painter->worldMatrix();
+ ourClipRect =
+#if COMPAT_QT_VERSION >= 0x030000
+ world.mapRect( ourClipRect );
+#else
+ world.map( ourClipRect );
+#endif
+ painter->setClipRect( ourClipRect );
+ painter->translate( _dataRect.x(), _dataRect.y() );
+
+ painter->setPen( params()->outlineDataColor() );
+
+ // find out which datasets are to be represented by this chart
+ uint chartDatasetStart, chartDatasetEnd;
+ findChartDatasets( data, paint2nd, chart, chartDatasetStart, chartDatasetEnd );
+
+ // Note: 'aI' is *not* the axis number!
+ for( uint aI = 0; aI < axesCount; ++aI ) {
+ // 'axis' is the REAL axis number!
+ uint axis = ordinateAxes.at( aI );
+
+ const KDChartAxisParams* axisPara = &params()->axisParams( axis );
+
+ uint datasetStart, datasetEnd;
+ uint axisDatasetStart, axisDatasetEnd;
+ uint dummy;
+ if( params()->axisDatasets( axis,
+ axisDatasetStart,
+ axisDatasetEnd, dummy )
+ && ( KDCHART_ALL_DATASETS != axisDatasetStart ) ) {
+
+ if( KDCHART_NO_DATASET == axisDatasetStart ){
+ //==========
+ continue; // NO DATASETS --> STOP PROCESSING THIS AXIS
+ //==========
+ }
+
+ if( axisDatasetStart >= chartDatasetStart
+ && axisDatasetStart <= chartDatasetEnd )
+ datasetStart = QMAX( axisDatasetStart, chartDatasetStart );
+ else if( axisDatasetStart <= chartDatasetStart
+ && axisDatasetEnd >= chartDatasetStart )
+ datasetStart = chartDatasetStart;
+ else
+ datasetStart = 20;
+ if( axisDatasetEnd >= chartDatasetStart
+ && axisDatasetEnd <= chartDatasetEnd )
+ datasetEnd = QMIN( axisDatasetEnd, chartDatasetEnd );
+ else if( axisDatasetEnd >= chartDatasetEnd
+ && axisDatasetStart <= chartDatasetEnd )
+ datasetEnd = chartDatasetEnd;
+ else
+ datasetEnd = 0;
+ } else {
+ datasetStart = chartDatasetStart;
+ datasetEnd = chartDatasetEnd;
+ }
+
+ //qDebug("\n=========================================================="
+ // "\naxis %u axisDatasetStart %u axisDatasetEnd %u / chartDatasetStart %u chartDatasetEnd %u",
+ //axis, axisDatasetStart, axisDatasetEnd, chartDatasetStart, chartDatasetEnd );
+
+ double logHeight = axisPara->axisTrueAreaRect().height();
+ double axisYOffset = axisPara->axisTrueAreaRect().y() - _dataRect.y();
+
+ //qDebug("\n==========================================================\naxis %u logHeight %f axisDatasetStart %u chartDatasetStart %u axisDatasetEnd %u chartDatasetEnd %u",
+ //axis, logHeight, axisDatasetStart, chartDatasetStart, axisDatasetEnd, chartDatasetEnd );
+ //if( KDCHART_ALL_DATASETS == axisDatasetStart )
+ // qDebug(" ALL DATASETS");
+ //if( KDCHART_NO_DATASET == axisDatasetStart )
+ // qDebug(" N O DATESETS");
+
+ double maxColumnValue = axisPara->trueAxisHigh();
+ double minColumnValue = axisPara->trueAxisLow();
+ double columnValueDistance = maxColumnValue - minColumnValue;
+
+
+ // call the chart type specific data painter:
+ specificPaintData( painter,
+ ourClipRect,
+ data,
+ regions,
+ axisPara,
+ bNormalMode,
+ chart,
+ logWidth,
+ areaWidthP1000,
+ logHeight,
+ axisYOffset,
+ minColumnValue,
+ maxColumnValue,
+ columnValueDistance,
+ chartDatasetStart,
+ chartDatasetEnd,
+ datasetStart,
+ datasetEnd );
+ }
+ painter->translate( - _dataRect.x(), - _dataRect.y() );
+}
diff --git a/libkdchart/KDChartAxesPainter.h b/libkdchart/KDChartAxesPainter.h
new file mode 100644
index 0000000..29e955b
--- /dev/null
+++ b/libkdchart/KDChartAxesPainter.h
@@ -0,0 +1,220 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTAXESPAINTER_H__
+#define __KDCHARTAXESPAINTER_H__
+
+#include <qpen.h>
+#include <qpainter.h>
+
+#include <KDChartPainter.h>
+#include <KDChartTable.h>
+#include <KDChartAxisParams.h>
+
+class QDateTime;
+class KDChartParams;
+
+class KDChartAxesPainter : public KDChartPainter
+{
+ protected:
+ KDChartAxesPainter( KDChartParams* params );
+ virtual ~KDChartAxesPainter();
+
+ virtual void paintAxes( QPainter* painter,
+ KDChartTableDataBase* data );
+
+ virtual void paintData( QPainter* painter,
+ KDChartTableDataBase* data,
+ bool paint2nd,
+ KDChartDataRegionList* regions );
+
+ // note: Classes inheriting from KDChartAxesPainter
+ // MUST implement the following abstract functions:
+
+ // Returns whether a normal chart is to be drawn
+ // or a stacked or percentage (or ... ) chart .
+ virtual bool isNormalMode() const = 0;
+
+ // Returns the number of pixels to be added to the clipping area's height
+ // to make room for special arrows indicating oversized, cut data entries.
+ // Chart classes not drawing such indicators must return 0.
+ virtual int clipShiftUp( bool normalMode, double areaWidthP1000 ) const = 0;
+
+ // The actual, chart type specific drawing of the data.
+ virtual void specificPaintData( QPainter* painter,
+ const QRect& ourClipRect,
+ KDChartTableDataBase* data,
+ KDChartDataRegionList* regions,
+ const KDChartAxisParams* axisPara,
+ bool bNormalMode,
+ uint chart,
+ double logWidth,
+ double areaWidthP1000,
+ double logHeight,
+ double axisYOffset,
+ double minColumnValue,
+ double maxColumnValue,
+ double columnValueDistance,
+ uint chartDatasetStart,
+ uint chartDatasetEnd,
+ uint datasetStart,
+ uint datasetEnd ) = 0;
+
+ virtual bool calculateAllAxesLabelTextsAndCalcValues(
+ QPainter* painter,
+ KDChartTableDataBase* data,
+ double areaWidthP1000,
+ double areaHeightP1000,
+ double& delimLen );
+
+ private:
+ public:
+ // special infos needed by the different painters' implementations
+ // of the specificPaintData() function
+ struct abscissaInfos{
+ const KDChartAxisParams* abscissaPara;
+ bool bCenterThePoints;
+ bool bAbscissaDecreasing;
+ bool bAbscissaIsLogarithmic;
+ bool bCellsHaveSeveralCoordinates;
+ int numValues;
+ int numLabels;
+ bool bAbscissaHasTrueAxisValues;
+ double abscissaStart;
+ double abscissaEnd;
+ double abscissaSpan;
+ double abscissaDelta;
+ bool bAbscissaHasTrueAxisDtValues;
+ double dtLowPos;
+ double dtHighPos;
+ QDateTime abscissaDtStart;
+ QDateTime abscissaDtEnd;
+ bool bScaleLessThanDay;
+ double abscissaDtSpan;
+ double abscissaDtPixelsPerScaleUnit;
+ double pointDist;
+ double abscissaPixelsPerUnit;
+ double abscissaZeroPos;
+ };
+ static void calculateAbscissaInfos(
+ const KDChartParams& params,
+ const KDChartTableDataBase& data,
+ uint datasetStart,
+ uint datasetEnd,
+ double logWidth,
+ const QRect& dataRect,
+ abscissaInfos& infos );
+ static bool calculateAbscissaAxisValue( const QVariant& value,
+ abscissaInfos& ai,
+ int colNumber,
+ double& xValue );
+
+ static void saveDrawLine( QPainter& painter,
+ QPoint pA,
+ QPoint pZ,
+ QPen pen );
+ static void calculateLabelTexts(
+ QPainter* painter,
+ const KDChartTableDataBase& data,
+ const KDChartParams& params,
+ uint axisNumber,
+ double averageValueP1000,
+ double delimLen,
+ // start of return parameters
+ KDChartAxisParams::AxisPos& basicPos,
+ QPoint& orig,
+ QPoint& dest,
+ double& pXDeltaFactor,
+ double& pYDeltaFactor,
+ double& pXDelimDeltaFaktor,
+ double& pYDelimDeltaFaktor,
+ double& nSubDelimFactor,
+ double& pDelimDelta,
+ double& nTxtHeight,
+ double& pTextsX,
+ double& pTextsY,
+ double& pTextsW,
+ double& pTextsH,
+ int& textAlign,
+ bool& isLogarithmic,
+ bool& isDateTime,
+ bool& autoDtLabels,
+ QDateTime& dtLow,
+ QDateTime& dtHigh,
+ KDChartAxisParams::ValueScale& dtDeltaScale,
+ bool adjustTheValues = false,
+ double trueDelta = 0.0,
+ double trueDeltaPix = 0.0 );
+ static void calculateBasicTextFactors( double nTxtHeight,
+ const KDChartAxisParams& para,
+ double averageValueP1000,
+ KDChartAxisParams::AxisPos basicPos,
+ const QPoint& orig,
+ double delimLen,
+ uint nLabels,
+ // start of return parameters
+ double& pDelimDelta,
+ double& pTextsX,
+ double& pTextsY,
+ double& pTextsW,
+ double& pTextsH,
+ int& textAlign );
+ static QString truncateBehindComma( const double nVal,
+ const int behindComma,
+ const double nDelta,
+ int& trueBehindComma );
+ static QString applyLabelsFormat( const double nVal,
+ int divPow10,
+ int behindComma,
+ double nDelta,
+ int& trueBehindComma,
+ KDChartEnums::NumberNotation notation,
+ const QString& decimalPoint,
+ const QString& thousandsPoint,
+ const QString& prefix,
+ const QString& postfix,
+ int totalLen,
+ const QChar& padFill,
+ bool blockAlign );
+ static void calculateOrdinateFactors( const KDChartAxisParams& para,
+ bool bLogarithmic,
+ double& nDist,
+ double& nDivisor,
+ double& nRound,
+ double& nDelta,
+ double& nSubDelimFactor,
+ double& nLow,
+ double& nHigh,
+ bool findNextRound = false );
+ static void dtAddSecs( const QDateTime& org, const int secs, QDateTime& dest );
+ static void dtAddDays( const QDateTime& org, const int days, QDateTime& dest );
+ static void dtAddMonths( const QDateTime& org, const int months, QDateTime& dest );
+ static void dtAddYears( const QDateTime& org, const int years, QDateTime& dest );
+};
+
+#endif
diff --git a/libkdchart/KDChartAxisParams.cpp b/libkdchart/KDChartAxisParams.cpp
new file mode 100644
index 0000000..158ea1a
--- /dev/null
+++ b/libkdchart/KDChartAxisParams.cpp
@@ -0,0 +1,3318 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarävdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#include <KDChartAxisParams.h>
+#ifndef KDCHART_MASTER_CVS
+#include "KDChartAxisParams.moc"
+#endif
+
+
+/**
+ \class KDChartAxisParams KDChartAxisParams.h
+ \brief access the chart axis parameters.
+
+ To be used in combination with the axis access methods in
+ class KDChartParams.
+
+
+ \see KDChartParams.h
+ \see KDChartParams.cpp
+
+ Bundles all parameters of one axis including the type except the
+ actual data displayed. Serializing an object of this type plus the
+ data displayed is enough to be able to recreate the chart later.
+
+*/
+
+
+
+
+
+/**
+ \c enum KDChartAxisParams::Axistype { AxisTypeUnknown,
+ AxisTypeEAST,
+ AxisTypeNORTH,
+ AxisUP };
+
+ The axis type - the kind of the axis (x-, y- or z-axis).
+
+ \li \c AxisTypeEAST axis of abscisses, the so-called \em X-axis.
+ In world coordinates this is the EAST axis as used
+ on topographical maps.
+ This axis normally is assigned to the 1st dimension
+ of the represented data, to change this use
+ KDChartAxesPainter::setAxisAssignment().
+
+ \li \c AxisTypeNORTH axis of ordinates, the so-called \em Y-axis.
+ when are represented by the chart.
+ In world coordinates this is the NORTH axis as used
+ on topographical maps for 2-dimensional data,
+ or the NORTH axis as used on bird's-eys views of
+ buildings etc for 3-dimensional data, resp..
+ This axis normally is assigned to the 2nd dimension
+ of the represented data.
+
+ \li \c AxisTypeUP axis of the 3rd dimension, the so-called \em Z-axis.
+ In world coordinates this is the UP axis as used
+ on bird's-eys views of buildings etc.
+ This axis normally is assigned to the 3rd dimension
+ of the represented data.
+
+ The following picture shows the default positions of the
+ different axes:
+ \verbatim
+
+ +-----------+
+ /| |
+ n +------------+ / | |
+ . | | / | |
+ NORTH, y . | 2-dim. | / | |
+ . | | / +-----------+
+ . | chart | / / / n
+ . | | n + / 3-dim. / .
+ . | | . | / / . NORTH, y
+ . | | UP, z . | / chart / .
+ . | | . | / / .
+ . | | . |/ / .
+ 0 +------------+ 0 +-----------+ .
+ 0
+ 0............n 0...........n
+ EAST, x EAST, x
+ \endverbatim
+
+ \note Normally you will not have to specify the AxisType since it
+ will be set automatically in KDChartAxesPainter::setDefaultAxesTypes()
+ called by c'tor of class KDChartAxesPainter
+
+ \sa setAxisType, axisType, KDChartAxesPainter::setAxisAssignment()
+ */
+
+
+/**
+ Constructor. Define default values:
+
+ - do not show this axis at all,
+ - use circa 100 per thousand of the printable area
+ size for drawing this axis,
+ - calc mode linear,
+ - line is visible,
+ - line width: 3 per mille of the printable area size
+ - line color: black,
+ - labels are visible,
+ - labels font: helvetica
+ - labels font size: 20 / 1000 of the printable area size
+ - labels color: black,
+ - this axis will be used for an ordinate
+ - label value limits will be calculated automatically,
+ */
+KDChartAxisParams::KDChartAxisParams()
+{
+ _axisType = AxisTypeUnknown;
+ _axisVisible = false;
+ _axisAreaMode = AxisAreaModeAutoSize;
+ _axisUseAvailableSpaceFrom = 0;
+ _axisUseAvailableSpaceTo = -1000;
+ _axisAreaMin = -100;
+ _axisAreaMax = 0;
+ _axisCalcMode = AxisCalcLinear;
+ _axisIsoRefAxis = UINT_MAX; // == KDCHART_NO_AXIS, see KDChartParams.cpp
+ _axisTrueAreaSize = 0;
+ _axisZeroLineStartX = 0.0;
+ _axisZeroLineStartY = 0.0;
+ _axisDtLowPosX = 0.0;
+ _axisDtLowPosY = 0.0;
+ _axisDtHighPosX = 0.0;
+ _axisDtHighPosY = 0.0;
+
+ _axisLineWidth = -3; // == 3/1000
+ _axisTrueLineWidth = 1;
+ _axisLineVisible = true;
+ _axisLineColor = QColor( 0, 0, 0 );
+
+ _axisShowFractionalValuesDelimiters = true;
+ _axisShowGrid = false;
+ _axisGridColor = KDCHART_DEFAULT_AXIS_GRID_COLOR;
+ _axisGridLineWidth = KDCHART_AXIS_GRID_AUTO_LINEWIDTH;
+ _axisGridStyle = Qt::SolidLine;
+
+ _axisShowSubDelimiters = true;
+ _axisGridSubColor = KDCHART_DEFAULT_AXIS_GRID_COLOR;
+ _axisGridSubLineWidth = KDCHART_AXIS_GRID_AUTO_LINEWIDTH;
+ _axisGridSubStyle = Qt::DotLine;
+
+ _axisZeroLineColor = QColor( 0x00, 0x00, 0x80 );
+
+ _axisLabelsVisible = true;
+ _axisLabelsFont = QFont( "helvetica", 12,
+ QFont::Normal, false );
+ _axisLabelsFontUseRelSize = true;
+ _axisLabelsFontRelSize = 32;
+ _axisLabelsFontMinSize = 6;
+ _axisLabelsDontShrinkFont = false;
+ _axisLabelsDontAutoRotate = false;
+ _axisLabelsRotation = 0;
+ _axisLabelsColor = QColor( 0, 0, 0 );
+
+ _axisSteadyValueCalc = true;
+ _axisValueStartIsExact = true;
+ _axisValueStart = KDCHART_AXIS_LABELS_AUTO_LIMIT;
+ _axisValueEnd = KDCHART_AXIS_LABELS_AUTO_LIMIT;
+ _axisValueDelta = KDCHART_AXIS_LABELS_AUTO_DELTA;
+ _axisValueDeltaScale = ValueScaleNumerical;
+ _axisValueLeaveOut = KDCHART_AXIS_LABELS_AUTO_LEAVEOUT;
+ _axisValuesDecreasing = false;
+
+ // First we used "h:mm:ss\nd.MM.yyyy" but now we calculate the
+ // format automatically - based on the time span to be displayed.
+ _axisLabelsDateTimeFormat = KDCHART_AXIS_LABELS_AUTO_DATETIME_FORMAT;
+
+ _axisMaxEmptyInnerSpan = 90;
+ _takeLabelsFromDataRow = LabelsFromDataRowNo;
+ _labelTextsDataRow = 0;
+ _axisLabelStringList.clear();
+ _axisShortLabelsStringList.clear();
+
+ setAxisLabelTexts( 0 );
+ setAxisFirstLabelText();
+ setAxisLastLabelText();
+ setTrueAxisDeltaPixels( 0.0 );
+ setTrueAxisLowHighDelta( 0.0, 0.0, 0.0 );
+ setTrueAxisDtLowHighDeltaScale( QDateTime(), QDateTime(), ValueScaleDay );
+
+ _axisLabelsDivPow10 = 0;
+ _axisDigitsBehindComma = KDCHART_AXIS_LABELS_AUTO_DIGITS;
+ _axisLabelsNotation = KDChartEnums::NumberNotationDecimal;
+ _axisLabelsDecimalPoint = ".";
+ _axisLabelsThousandsPoint = ",";
+ _axisLabelsPrefix = "";
+ _axisLabelsPostfix = "";
+ _axisLabelsTotalLen = 0;
+ _axisLabelsPadFill = ' ';
+ _axisLabelsBlockAlign = true;
+}
+
+/**
+ Destructor. Only defined to have it virtual.
+
+*/
+
+KDChartAxisParams::~KDChartAxisParams()
+{
+ // Intentionally left blank for now.
+}
+
+
+/**
+ Specifies the axis type. The default is unknown (AxisTypeUnknown).
+
+ \note Normally you will not have to specify the AxisType since it
+ will be set automatically in KDChartAxesPainter::setDefaultAxesTypes()
+ called by c'tor of class KDChartAxesPainter
+
+ \param axisType the axis type to use
+ \sa axisType, AxisType
+ */
+void KDChartAxisParams::setAxisType( AxisType axisType )
+{
+ _axisType = axisType;
+ emit changed();
+}
+
+/**
+ \fn AxisType KDChartAxisParams::axisType() const
+
+ \return the axis type configured in this params object.
+
+ \sa setAxisType, AxisType
+ */
+
+
+/**
+
+ \c enum KDChartAxisParams::AxisPos { AxisPosSTART = 0,
+
+ AxisPosBottom = 0,
+ AxisPosSagittal = 0, // <-- for POLAR charts
+ AxisPosLeft = 1,
+ AxisPosCircular = 1, // <-- for POLAR charts
+ AxisPosLowerRightEdge = 2,
+
+ AxisPosTop = 3,
+ AxisPosRight = 4,
+ AxisPosLowerLeftEdge = 5,
+
+// diese Markierung muss jeweils mitgepflegt werden,
+// wenn AxisPos erweitert werden sollte.
+AxisPosAdditionalsSTART = 6,
+
+AxisPosBottom2 = 6,
+AxisPosLeft2 = 7,
+AxisPosLowerRightEdge2 = 8,
+
+AxisPosTop2 = 9,
+AxisPosRight2 = 10,
+AxisPosLowerLeftEdge2 = 11,
+
+// auch diese Markierung muss jeweils mitgepflegt werden,
+// wenn AxisPos erweitert werden sollte.
+AxisPosEND = 11 };
+
+Since the chart area is defined by subtracting the space consumed by
+the axes from the printable area there are two options that are
+mutually exclusive.
+
+- Define the chart by precisely specifying (in absolute or in
+relative numbers) how much space may be used by each axis.
+and/or define start and end values for the axes' labels.
+
+-> This produces results that are comparable to each other
+since the chart will have an exactly fixed size and its position
+on the paper will remain the same even if the labels of its axes
+become wider or more narrow.
+Also the graphical representation of the date will be comparable
+since all your charts will use the same scale if you wish this.
+
+- Let the program calculate the chart layout based upon the kind
+of and width of the labels to be drawn at the axes.
+Also the program can calculate the labels for you and find the
+boundary values for start and end of the scale automatically.
+-> This will produce good looking results without you having
+to fiddle around with the settings.
+Unfortunately these charts will not allways be comparable to
+each other if the axes' labels change since both the size of
+the area reserved for the chart and the scaling of the
+scales will vary if the data values do so.
+
+With KDChart both ways are possible, see hints given with
+setAxisAreaMode(), setAxisAreaMin() and setAxisAreaMax().
+
+To optimize your results you might want to use setAxisLineWidth() and
+setAxisLabelsFontPointSize(): negative values will specify it
+in per thousand of the printable area size - producing a result
+looking fine even if the chart is
+printed at very large dimensions.
+
+\sa setAxisAreaMode, setAxisAreaMin, setAxisAreaMax
+\sa setAxisLineWidth(), setAxisLabelsFontPointSize()
+\sa setAxisLabelsLimitsAuto(), setAxisLabelsLimitsLow()
+\sa setAxisLabelsLimitsHeigh()
+*/
+
+/**
+ The axis position.
+ Use AxisPosBottom for X-axis and AxisPosLeft for traditional Y-axis.
+ When showing 3-dimensional charts you may use AxisPosLowerRightEdge
+ to have an Y-axis on the lower right side going into the 'depth' of
+ the picture and a z-axis going 'upwards' at the left edge.
+ The other, optional values (AxisPosRight, AxisPosTop and
+ AxisPosLowerLeftEdge, resp.) could be used to show a second
+ axis on the other side of the picture - useful in case you want
+ to show two data sets in one chart, like two curves showing data sets
+ sharing the same abscissa axis but having differently scaled ordinates.
+ The additional values (AxisPosBottom2, AxisPosTop2 ..) may be used
+ to specify composed charts having two ordinates at the same side of
+ the drawing and the like...
+
+ These AxisPos values are used to specify which axis' settings are
+ to be modified or retrieved, resp.
+
+ \note Use special values \c AxisPossagittal and \c AxisPosCircular
+ to set delimiter/label/grid parameters for polar charts.
+
+ \sa setAxisAreaMode, axisAreaMode, setAxisCalcMode, axisCalcMode
+ \sa KDChartParams::setAxisParams, KDChartParams::axisParams
+ */
+
+
+/**
+ The basic axis type.
+
+ \param pos the axis type to be analyzed
+ \return the basic axis type (Bottom, Left, Top or Right)
+ */
+KDChartAxisParams::AxisPos KDChartAxisParams::basicAxisPos( uint pos )
+{
+ AxisPos ret = AxisPos( pos );
+ switch ( pos ) {
+ case AxisPosBottom:
+ case AxisPosLeft:
+ case AxisPosTop:
+ case AxisPosRight:
+ break;
+ case AxisPosLowerRightEdge:
+ ret = AxisPosRight;
+ break;
+ case AxisPosLowerLeftEdge:
+ ret = AxisPosLeft;
+ break;
+ case AxisPosBottom2:
+ ret = AxisPosBottom;
+ break;
+ case AxisPosLeft2:
+ ret = AxisPosLeft;
+ break;
+ case AxisPosTop2:
+ ret = AxisPosTop;
+ break;
+ case AxisPosRight2:
+ ret = AxisPosRight;
+ break;
+ case AxisPosLowerRightEdge2:
+ ret = AxisPosRight;
+ break;
+ case AxisPosLowerLeftEdge2:
+ ret = AxisPosLeft;
+ break;
+ default: {
+ qDebug( "IMPLEMENTATION ERROR: type missing in KDChartAxisParams::basicAxisPos()" );
+ Q_ASSERT( ret != AxisPos( pos ) );
+ }
+ }
+ return ret;
+}
+
+/**
+ Specifies if the axis will be drawn. The default is false.
+
+ \param axisVisible set true to make visible the respective axis.
+ \sa axisVisible, AxisVisible
+ */
+void KDChartAxisParams::setAxisVisible( bool axisVisible )
+{
+ _axisVisible = axisVisible;
+ emit changed();
+}
+
+/**
+ Returns weither the axis will be drawn or not.
+
+ \return if the axis is visible or not.
+ \sa setAxisVisible, AxisVisible
+ */
+bool KDChartAxisParams::axisVisible() const
+{
+ return _axisVisible;
+}
+
+
+/**
+ \c enum AxisAreaMode { AxisAreaModeFixedSize,
+ AxisAreaModeAutoSize,
+ AxisAreaModeMinMaxSize };
+
+ The axis size, determines how to calculate the size of area used
+ by the axis - i.e. the width of left axis area (or the right
+ one, resp.) or the height of the top axis area (or the bottom one,
+ resp.).
+ \li \c AxisAreaModeFixedSize (default) value will be taken
+ from \c AxisAreaMinSize() or \c AxisAreaMaxSize() - whichever
+ returns the smaller value
+ \li \c AxisAreaModeAutoSize (default) will be calculated
+ automatically based on the size of the labels to be drawn
+ \li \c AxisAreaModeMinMaxSize will be calculated automatically but
+ bearing user defined limits in mind (this is not implemented yet)
+
+ \sa setAxisAreaMode, axisAreaMode, AxisAreaMode
+ \sa setAxisAreaMin, setAxisAreaMax, setAxisArea
+ */
+
+/**
+ Specifies the axis size mode.
+ The default is auto size (AxisAreaModeAutoSize).
+
+ \param axisAreaMode the way how to find out the
+ size of the area where the axis shall be drawn.
+ \sa axisAreaMode, AxisAreaMode
+ \sa setAxisAreaMin, setAxisAreaMax, setAxisArea
+ */
+void KDChartAxisParams::setAxisAreaMode( AxisAreaMode axisAreaMode )
+{
+ _axisAreaMode = axisAreaMode;
+ emit changed();
+}
+
+
+
+/**
+ Returns the axis size mode configured in this params object.
+
+ \return the axis size mode configured in this params object.
+ \sa setAxisAreaMode, AxisAreaMode, setAxisAreaMin, setAxisAreaMax
+ \sa setAxisArea
+ */
+KDChartAxisParams::AxisAreaMode KDChartAxisParams::axisAreaMode() const
+{
+ return _axisAreaMode;
+}
+
+/**
+ Converts the specified axis area mode enum to a string representation.
+
+ \param mode the axis area mode enum to convert
+ \return the string representation of the mode enum
+ */
+QString KDChartAxisParams::axisAreaModeToString( AxisAreaMode mode ) {
+ switch( mode ) {
+ case AxisAreaModeFixedSize:
+ return "FixedSize";
+ case AxisAreaModeAutoSize:
+ return "AutoSize";
+ case AxisAreaModeMinMaxSize:
+ return "MinMaxSize";
+ default: // should not happen
+ qDebug( "Unknown axis area mode" );
+ return "AxisAreaMode";
+ }
+}
+
+/**
+ Converts the specified string to an axis area mode enum value.
+
+ \param string the string to convert
+ \return the axis area mode enum value
+ */
+KDChartAxisParams::AxisAreaMode KDChartAxisParams::stringToAxisAreaMode( const QString& type ) {
+ if( type == "FixedSize" )
+ return AxisAreaModeFixedSize;
+ else if( type == "AutoSize" )
+ return AxisAreaModeAutoSize;
+ else if( type == "MinMaxSize" )
+ return AxisAreaModeMinMaxSize;
+ else // should not happen
+ return AxisAreaModeAutoSize;
+}
+
+/**
+ Specifies the axis area minimum width (or height, resp.).
+
+ \param axisAreaMin the axis area minimum width (or height, resp.)
+ If value is negative, the absolute value is per thousand
+ of the size of the printable area to
+ be used. This will make the axis look the same even if scaled
+ to very different size.
+
+ Note: It AxisAreaModeFixedSize is set the smaller value of
+ axisAreaMax and axisAreaMin is used for the area size.
+
+\sa axisAreaMin, axisAreaMax, setAxisAreaMode, setAxisAreaMax
+\sa setAxisArea
+*/
+void KDChartAxisParams::setAxisAreaMin( int axisAreaMin )
+{
+ _axisAreaMin = axisAreaMin;
+ emit changed();
+}
+
+/**
+ \fn int KDChartAxisParams::axisAreaMin() const
+ Returns the axis area minimum width (or height, resp.).
+
+ \return the axis area minimum width (or height, resp.).
+ \sa setAxisAreaMin, setAxisAreaMax, setAxisArea
+ */
+
+
+
+/**
+ Specifies how the axis will make use of the available space.
+
+ Use this function to specify how large the area of the axis
+ will be and where it will be positioned.
+
+ \note This function is to be used for (vertical) ordinate axes <b>only</b>,
+ available space usage specified for abscissa axes will be ignored.
+
+example: setAxisUseAvailableSpace( 0, -499 ) will make the
+axis occupy the first half of the available space,
+so there could be a second axis (for chart #2 having the same
+x-axis as chart #1) using the remaining
+part of the available space, this one would be specified
+by setAxisUseAvailableSpace( -500, -1000 ).
+
+See also the examples given with \c KDChartParams::setAdditionalChartType().
+
+\param axisUseAvailableSpaceFrom the beginning offset
+of the space to be covered by this axis.
+Set this to 0 to have your axis start at the very beginning
+of the avaliable space - this is the default setting.
+Use negative values to specify an offset in per mil
+of the available space, or use positive values to specify
+it in pixels.
+
+\param axisUseAvailableSpaceTo the ending offset
+of the space to be covered by this axis.
+Set this to -1000 (== 1000 per mille) to let the axis
+end at the very end of the available space, this is the default setting.
+to a smaller negative value to specify the percantage
+Use negative values to specify an offset in per mil
+of the available space, or use positive values to specify
+it in pixels.
+
+\sa axisUseAvailableSpaceFrom, axisUseAvailableSpaceTo
+*/
+void KDChartAxisParams::setAxisUseAvailableSpace( int axisUseAvailableSpaceFrom,
+ int axisUseAvailableSpaceTo )
+{
+ _axisUseAvailableSpaceFrom = axisUseAvailableSpaceFrom;
+ _axisUseAvailableSpaceTo = axisUseAvailableSpaceTo;
+ emit changed();
+}
+
+
+/**
+ \fn int KDChartAxisParams::axisUseAvailableSpaceFrom() const
+ Returns the beginning offset of the space used by this
+ axis in comparison to the available space that could
+ be used by this axis.
+
+ \sa setAxisUseAvailableSpace, axisUseAvailableSpaceTo
+ */
+
+
+/**
+ \fn int KDChartAxisParams::axisUseAvailableSpaceTo() const
+ Returns the ending offset of the space used by this
+ axis in comparison to the available space that could
+ be used by this axis.
+
+ \sa setAxisUseAvailableSpace, axisUseAvailableSpaceFrom
+ */
+
+/**
+ Specifies the axis area maximum width (or height, resp.).
+
+ \param axisAreaMax the axis area maximum width (or height, resp.)
+ If value is negative, the absolute value is per thousand
+ of the size of the printable area to
+ be used. This will make the axis look the same even if scaled
+ to very different size.
+
+ Note: If AxisAreaModeFixedSize is set the smaller value of
+ axisAreaMax and axisAreaMin is used for the area size.
+
+\sa axisAreaMax, axisAreaMin, setAxisAreaMode, setAxisAreaMin
+\sa setAxisArea
+*/
+void KDChartAxisParams::setAxisAreaMax( int axisAreaMax )
+{
+ _axisAreaMax = axisAreaMax;
+ emit changed();
+}
+/**
+ \fn int KDChartAxisParams::axisAreaMax() const
+ Returns the axis area maximum width (or height, resp.).
+
+ \return the axis area maximum width (or height, resp.).
+ \sa setAxisAreaMax, setAxisAreaMin, setAxisArea
+ */
+
+/**
+ Specifies the axis area size mode and the
+ minimum and maximum width (or height, resp.) of the area.
+ This method is here for convenience, see \c setAxisAreaMode,
+ \c setAreaMin and \c setAreaMax for details.
+
+ Note: Is AxisAreaModeFixedSize is set the smaller value of
+ axisAreaMax and axisAreaMin is used for the area size.
+
+ \param axisAreaMode the way how to find out the
+ size of the area where the axis shall be drawn.
+ \param axisAreaMin the axis area minimum width (or height, resp.)
+ \param axisAreaMax the axis area maximum width (or height, resp.)
+
+ \sa setAxisAreaMode, setAxisAreaMin, setAxisAreaMax
+ */
+void KDChartAxisParams::setAxisArea( AxisAreaMode axisAreaMode,
+ int axisAreaMin,
+ int axisAreaMax )
+{
+ _axisAreaMode = axisAreaMode;
+ _axisAreaMin = axisAreaMin;
+ _axisAreaMax = axisAreaMax;
+ emit changed();
+}
+
+/**
+ \c enum AxisCalcMode { AxisCalcLinear, AxisCalcLogarithmic };
+ The axis calculation mode.
+
+ \sa setAxisCalcMode, axisCalcMode, AxisCalcMode
+ */
+
+/**
+ Specifies the axis calculation mode.
+ The default is linear calculation (AxisCalcLinear).
+
+ \note Specifying an AxisCalcLogarithmic calculation mode
+ also results in the axis's label parameters being adjusted,
+ in detail these settings will become valid:
+
+ \li steady-value-calculation mode is activated
+ \li automatic limit calculation will be set for the begin and the end of the axis
+ \li logarithmical step width will be calculated automatically: 0.001, 0.01, 0.1, 1, 10, ..
+ \li number of Digits shown behind the comma will be calculated automatically.
+
+ This is done by implicitely calling setAxisValues(),
+ so you don't need to explicitely call that function,
+ actually the following is what happens inside:
+
+ \verbatim
+ if( AxisCalcLogarithmic == axisCalcMode )
+ setAxisValues( true,
+ KDCHART_AXIS_LABELS_AUTO_LIMIT,
+ KDCHART_AXIS_LABELS_AUTO_LIMIT,
+ 1.0,
+ KDCHART_AXIS_LABELS_AUTO_DIGITS );
+ \endverbatim
+
+ You may override these setting by making an extra setAxisValues()
+ call AFTER calling setAxisCalcMode( AxisCalcLogarithmic ).
+
+ \param axisCalcMode the axis calculation mode to be used.
+ \sa axisCalcMode, AxisCalcMode
+ \sa setAxisSteadyValueCalc
+ */
+void KDChartAxisParams::setAxisCalcMode( AxisCalcMode axisCalcMode )
+{
+ _axisCalcMode = axisCalcMode;
+ if( AxisCalcLogarithmic == axisCalcMode ){
+ setAxisValues( true,
+ KDCHART_AXIS_LABELS_AUTO_LIMIT,
+ KDCHART_AXIS_LABELS_AUTO_LIMIT,
+ 1.0,
+ KDCHART_AXIS_LABELS_AUTO_DIGITS );
+ }
+ emit changed();
+}
+/**
+ \fn AxisCalcMode KDChartAxisParams::axisCalcMode() const
+ Returns the axis calculation mode configured in this params object.
+
+ \return the axis calculation mode configured in this params object.
+ \sa setAxisCalcMode, AxisCalcMode
+ */
+
+/**
+ Converts the specified axis calc mode enum to a string representation.
+
+ \param mode the axis calc mode enum to convert
+ \return the string representation of the mode enum
+ */
+QString KDChartAxisParams::axisCalcModeToString( AxisCalcMode mode ) {
+ switch( mode ) {
+ case AxisCalcLinear:
+ return "Linear";
+ case AxisCalcLogarithmic:
+ return "Logarithmic";
+ default: // should not happen
+ qDebug( "Unknown axis calc mode" );
+ return "Linear";
+ }
+}
+
+/**
+ Converts the specified string to an axis calc mode enum value.
+
+ \param string the string to convert
+ \return the axis calc mode enum value
+ */
+KDChartAxisParams::AxisCalcMode KDChartAxisParams::stringToAxisCalcMode( const QString& type ) {
+ if( type == "Linear" )
+ return AxisCalcLinear;
+ else if( type == "Logarithmic" )
+ return AxisCalcLogarithmic;
+ else // should not happen
+ return AxisCalcLinear;
+}
+
+/**
+ Specifies another axis which this axis shall be isometric with.
+
+ \param isoRefAxis axis which this axis shall be isometric with.
+
+ Normally all axes' step widths are calculated independently from
+ each other. By specifying a reference axis for one axis you make
+ KDChart use the same scale for both axes.
+
+ For example to have the left axis using the same scale as the
+ right axis you could invoke this:
+
+ \verbatim
+ KDChartAxisParams pa(
+ _p->axisParams( KDChartAxisParams::AxisPosLeft ) );
+ pa.setIsometricReferenceAxis( KDChartAxisParams::AxisPosBottom );
+ _p->setAxisParams( KDChartAxisParams::AxisPosLeft, pa );
+ \endverbatim
+
+ These commands are equivalent to the following ones:
+
+ \verbatim
+ KDChartAxisParams pa(
+ _p->axisParams( KDChartAxisParams::AxisPosBottom ) );
+ pa.setIsometricReferenceAxis( KDChartAxisParams::AxisPosLeft );
+ _p->setAxisParams( KDChartAxisParams::AxisPosBottom, pa );
+ \endverbatim
+
+ In any case both axes will use the same scale so - unless you are
+ using more axes than these two ones - the resulting chart will be true
+ to scale.
+
+ \note Use special value KDCHART_ALL_AXES if your chart
+ has got more than two axes and all of them shall use the same scale, specifying
+ this for one of the axes is enough, there is no need to set it several times.
+
+ Use special value KDCHART_NO_AXIS to undo any previous setting
+ that was specified for this axis, this has to be called for any axis that was
+ modified by previous calls.
+
+ \sa isometricReferenceAxis
+ */
+void KDChartAxisParams::setIsometricReferenceAxis( uint isoRefAxis )
+{
+ _axisIsoRefAxis = isoRefAxis;
+ emit changed();
+}
+
+/**
+ \fn uint KDChartAxisParams::isometricReferenceAxis() const
+ Returns which axis this axis shall be isometric with, this will
+ be either the axis position - see KDChartAxisParams::AxisPos - or one of the special
+ values KDCHART_ALL_AXES and KDCHART_NO_AXIS.
+
+ \return which axis this axis shall be isometric with.
+
+ \sa setIsometricReferenceAxis
+ */
+
+
+/**
+ \fn void KDChartAxisParams::setAxisTrueAreaSize( int axisTrueAreaSize )
+ Specifies the true axis area width (or height, resp.).
+
+ \param axisAreaMax the true axis area width (or height, resp.)
+ as it was calculated and drawn.
+ This is allways an absolute value.
+
+ \note Do <b>not call</b> this function unless you are knowing
+ exactly what you are doing. \c setAxisTrueAreaSize is normally
+ reserved for internal usage by methods calculating the area
+ size based upon \c axisAreaMin and \c axisAreaMax. Thus the
+ signal \c changed() is not sended here.
+
+ \sa axisAreaMax, axisAreaMin, setAxisAreaMode, setAxisAreaMin
+ \sa setAxisArea
+ */
+
+/**
+ \fn int KDChartAxisParams::axisTrueAreaSize() const
+ Returns the true axis area width (or height, resp.)
+ as calculated and drawn.
+
+ \return the true axis area width (or height, resp.).
+ \sa setAxisAreaMax, setAxisAreaMin, setAxisArea
+ */
+
+/**
+ \fn void KDChartAxisParams::setAxisTrueAreaRect( const QRect& axisTrueAreaRect )
+ Specifies the true axis area rectangle.
+
+ \param axisAreaMax the true axis area rectangle
+ as it was calculated and drawn.
+
+ \note Do <b>not call</b> this function unless you are knowing
+ exactly what you are doing. \c setAxisTrueAreaRect is normally
+ reserved for internal usage by methods calculating the area
+ size based upon \c axisAreaMin and \c axisAreaMax. Thus the
+ signal \c changed() is not sended here.
+
+ \sa axisAreaMax, axisAreaMin, setAxisAreaMode, setAxisAreaMin
+ \sa setAxisArea
+ */
+
+/**
+ \fn QRect KDChartAxisParams::axisTrueAreaRect() const
+ Returns the true axis area rectangle
+ as calculated and drawn.
+
+ \return the true axis area rectangle
+ \sa setAxisAreaMax, setAxisAreaMin, setAxisArea
+ */
+
+/**
+ Specifies whether the axis sub-delimiters should be drawn.
+
+ \note If true and axisShowGrid is also true the grid on the
+ chart data area will show a thin dotted line for each sub-delimiter
+ (or a line with a pattern defined by \c setAxisGridSubStyle, resp.)
+
+ \param axisShowSubDelimiters if true sub-delimiters will be drawn at this axis.
+ \sa axisShowSubDelimiters, setAxisShowGrid, setAxisGridSubStyle
+ */
+void KDChartAxisParams::setAxisShowSubDelimiters( bool axisShowSubDelimiters )
+{
+ _axisShowSubDelimiters = axisShowSubDelimiters;
+ emit changed();
+}
+
+/**
+ Specifies whether the delimiters should be drawn at the position for the fractional values.
+
+ \note This can be useful if you want to force only painting non fractional values on the axis and
+ do not want the delimiters and grid lines to be drawn at the position where some fractional values
+ (auto calculation) were meant to be displayed. It will have no effect in case fractional values labels
+ are painted.
+ In order to force painting only non fractional values you need to call setAxisBehindDigitsComma(0).
+ \param axisShowFracValDelim if false delimiters and grid line will not be drawn on this axis at the positon
+ where fractional values were meant to be drawn.
+ \sa setAxisDigitBehindComma
+*/
+
+void KDChartAxisParams::setAxisShowFractionalValuesDelimiters( bool axisShowFracValDelim )
+{
+ _axisShowFractionalValuesDelimiters = axisShowFracValDelim;
+ emit changed();
+}
+
+
+/**
+ \fn bool KDChartAxisParams::axisShowSubDelimiters() const
+ Returns whether the axis sub-delimiters will be drawn.
+
+ \return whether the axis sub-delimiters will be drawn.
+ \sa setAxisShowSubDelimiters
+ */
+
+/**
+ Specifies whether the axis line should be drawn.
+
+ \param axisLineVisible if true the line of this axis will be drawn.
+ \sa axisLineVisible
+ */
+void KDChartAxisParams::setAxisLineVisible( bool axisLineVisible )
+{
+ _axisLineVisible = axisLineVisible;
+ emit changed();
+}
+
+
+/**
+ \fn bool KDChartAxisParams::axisLineVisible() const
+ Returns whether the axis line should be drawn.
+
+ \return whether the axis line should be drawn.
+ \sa setAxisLineVisible
+ */
+
+/**
+ Specifies the axis line width.
+
+ \param axisLineWidth the axis line width.
+ If value is negative, the absolute value is per thousand
+ of the printable area size to be used. This will make the
+ axis look the same even if scaled to very different size.
+
+ \sa axisLineWidth
+ */
+void KDChartAxisParams::setAxisLineWidth( int axisLineWidth )
+{
+ _axisLineWidth = axisLineWidth;
+ emit changed();
+}
+
+
+/**
+ \fn int KDChartAxisParams::axisLineWidth() const
+ Returns the axis line width.
+
+ \return the axis line width.
+ \sa setAxisLineWidth
+ */
+
+
+/**
+ \fn void s KDChartAxisParams::setAxisTrueLineWidth( int axisTrueLineWidth )
+ Specifies the actual axis line width, as calculated and drawn.
+
+ \Note You may not use this internal function.
+
+ \param axisTrueLineWidth the actual axis line width,
+ as calculated and drawn.
+
+ \sa axisTrueLineWidth
+ */
+
+/**
+ \fn int KDChartAxisParams::axisTrueLineWidth() const
+ Returns the axis true line width, as calculated and drawn.
+
+ \return the axis true line width, as calculated and drawn.
+ \sa setAxisTrueLineWidth
+ */
+
+
+/**
+ Specifies the axis line colour.
+
+ \param axisLineColor the axis line colour.
+ \sa axisLineColor
+ */
+void KDChartAxisParams::setAxisLineColor( QColor axisLineColor )
+{
+ _axisLineColor = axisLineColor;
+ emit changed();
+}
+
+/**
+ \fn QColor KDChartAxisParams::axisLineColor() const
+ Returns the axis line colour.
+
+ \return the axis line colour.
+ \sa setAxisLineColor
+ */
+
+
+/**
+ Specifies whether a grid should be drawn at the chart data area.
+ By default the grid will be drawn based on the left
+ ordinate axis and on the bottom abscissa axis.
+
+ The grid will show a solid line for each delimiter.
+ (or a line with a pattern defined by \c setAxisGridStyle, resp.)
+
+ \note If true and axisShowSubDelimiters is also true the grid
+ will show a thin dotted line for each sub-delimiter.
+ (or a line with a pattern defined by \c setAxisGridSubStyle, resp.)
+
+ \param axisShowGrid if true a grid will be drawn on the chart data area.
+ \sa axisShowGrid, setAxisGridStyle, setAxisGridSubStyle
+ */
+void KDChartAxisParams::setAxisShowGrid( bool axisShowGrid )
+{
+ _axisShowGrid = axisShowGrid;
+ emit changed();
+}
+
+/**
+ \fn bool KDChartAxisParams::axisShowGrid() const
+ Returns whether a grid should be drawn at the chart data area.
+
+ \return whether a grid should be drawn at the chart data area.
+ \sa setAxisShowGrid, setAxisShowSubDelimiters
+ */
+
+
+
+/**
+ Specifies the axis grid colour.
+
+ To reset the color to the built-in default value
+ please call \c setAxisGridColor( KDCHART_DEFAULT_AXIS_GRID_COLOR )
+
+ \param axisGridColor the axis grid color.
+ \sa axisGridColor, setAxisShowGrid
+ */
+void KDChartAxisParams::setAxisGridColor( QColor axisGridColor )
+{
+ _axisGridColor = axisGridColor;
+ emit changed();
+}
+
+/**
+ \fn QColor KDChartAxisParams::axisGridColor() const
+ Returns the axis grid color.
+
+ \return the axis grid color.
+ \sa setAxisGridColor, setAxisShowGrid
+ */
+
+
+/**
+ Specifies the colour to be used for the thin lines between the
+ normal axis grid lines.
+
+ To reset the color to the built-in default value
+ please call \c setAxisGridSubColor( KDCHART_DEFAULT_AXIS_GRID_COLOR )
+
+ \param axisGridSubColor the axis grid sub color.
+ \sa axisGridSubColor, setAxisGridColor, setAxisShowGrid, setAxisShowSubDelimiters
+ */
+void KDChartAxisParams::setAxisGridSubColor( QColor axisGridSubColor )
+{
+ _axisGridSubColor = axisGridSubColor;
+ emit changed();
+}
+
+
+/**
+ \fn QColor KDChartAxisParams::axisGridSubColor() const
+ Returns the axis grid sub color.
+
+ \return the axis grid sub color.
+ \sa setAxisGridSubColor
+ */
+
+/**
+ Specifies the width of the axis grid lines.
+
+ \note Normally you would <b>not</b> call this function since
+ grid lines in most cases look best in their default line
+width: the same width as the axis line they belong to.
+However when combining multiple datasets or multiple charts
+sharing the same abscissa axes but having their ordinates
+differently scaled you might want to reduce the line width
+of the respective grid lines and use different grid colours
+to show two grids at the same time. In such cases it might
+also be a good idea to deactivate \c setAxisShowSubDelimiters
+thus avoiding the dotted sub-grid lines or to set their
+style to Qt::NoPen to get sub-delimiters on the axis
+but no sub-grid lines.
+
+You may use setAxisGridLineWidth( KDCHART_AXIS_GRID_AUTO_LINEWIDTH )
+to reset the value to its default: being automatically
+adjusted to the width of the axis line.
+
+\param axisGridLineWidth the width of the axis grid lines.
+If value is negative, the absolute value is per thousand
+of the printable area size to be used. This will make the
+grid look the same even if scaled to very different size.
+\sa axisGridLineWidth, setAxisGridColor, setAxisGridStyle
+\sa setAxisShowGrid, setAxisShowSubDelimiters
+*/
+void KDChartAxisParams::setAxisGridLineWidth( int axisGridLineWidth )
+{
+ _axisGridLineWidth = axisGridLineWidth;
+ emit changed();
+}
+
+/**
+ \fn int KDChartAxisParams::axisGridLineWidth() const
+ Returns the width of the axis grid lines.
+ (see explanation given with \c setAxisGridLineWidth )
+
+ \return the width of the axis grid lines.
+ \sa setAxisGridLineWidth, setAxisShowGrid
+ */
+
+/**
+ Specifies the width of the thin lines between the
+ normal axis grid lines.
+
+ You may use setAxisGridSubLineWidth( KDCHART_AXIS_GRID_AUTO_LINEWIDTH )
+ to reset the value to its default: being automatically
+ adjusted to the width of the axis line.
+
+ \param axisGridSubLineWidth the axis grid sub line width.
+ \sa axisGridSubLineWidth, setAxisGridLineWidth, setAxisShowGrid, setAxisShowSubDelimiters
+ */
+void KDChartAxisParams::setAxisGridSubLineWidth( int axisGridSubLineWidth )
+{
+ _axisGridSubLineWidth = axisGridSubLineWidth;
+ emit changed();
+}
+
+
+/**
+ \fn QColor KDChartAxisParams::axisGridSubLineWidth() const
+ Returns the axis grid sub line width.
+
+ \return the axis grid sub line width.
+ \sa setAxisGridSubLineWidth
+ */
+
+
+/**
+ Specifies the axis grid line pattern.
+
+ \param axisGridStyle the axis grid line pattern.
+ \sa axisGridStyle, setAxisShowGrid
+ */
+void KDChartAxisParams::setAxisGridStyle( PenStyle axisGridStyle )
+{
+ _axisGridStyle = axisGridStyle;
+ emit changed();
+}
+
+/**
+ \fn PenStyle KDChartAxisParams::axisGridStyle() const
+ Returns the axis grid line pattern.
+
+ \return the axis grid line pattern.
+ \sa setAxisGridStyle, setAxisShowGrid
+ */
+
+
+/**
+ Specifies the axis grid line pattern for the thin lines
+ showing the sub-delimiter values.
+
+ \param axisGridStyle the axis grid line pattern for the thin lines
+ showing the sub-delimiter values.
+ \sa axisGridSubStyle, setAxisGridStyle, axisGridStyle
+ \sa setAxisShowGrid
+ */
+void KDChartAxisParams::setAxisGridSubStyle( PenStyle axisGridSubStyle )
+{
+ _axisGridSubStyle = axisGridSubStyle;
+ emit changed();
+}
+
+/**
+ \fn PenStyle KDChartAxisParams::axisGridSubStyle() const
+ Returns the axis grid line pattern for the thin lines
+ showing the sub-delimiter values.
+
+ \return the axis grid line pattern for the thin lines
+ showing the sub-delimiter values.
+ \sa setAxisGridSubStyle
+ \sa setAxisGridStyle, axisGridStyle, setAxisShowGrid
+ */
+
+/**
+ Specifies the colour of the zero-line
+ that is drawn if zero is not at the lower
+ edge of the chart.
+
+ \param axisZeroLineColor the zero-line colour.
+ \sa axisZeroLineColor
+ */
+void KDChartAxisParams::setAxisZeroLineColor( QColor axisZeroLineColor )
+{
+ _axisZeroLineColor = axisZeroLineColor;
+ emit changed();
+}
+
+/**
+ \fn QColor KDChartAxisParams::axisZeroLineColor() const
+ Returns the colour used for the zero-value line
+ that is drawn if zero is not at the lower
+ edge of the chart.
+
+ \return the zero-line colour.
+ \sa setAxisZeroLineColor
+ */
+
+/**
+ Specifies whether the axis labels should be drawn.
+
+ \param axisLabelsVisible if true the labels of this axis will be
+ drawn.
+ \sa axisLabelsVisible
+ */
+void KDChartAxisParams::setAxisLabelsVisible( bool axisLabelsVisible )
+{
+ _axisLabelsVisible = axisLabelsVisible;
+ emit changed();
+}
+
+
+/**
+ \fn bool KDChartAxisParams::axisLabelsVisible() const
+ Returns whether the axis labels should be drawn.
+
+ \return whether the axis labels should be drawn.
+ \sa setAxisLabelsVisible
+ */
+
+
+/**
+ \fn void KDChartAxisParams::setAxisLabelsFontMinSize( int axisLabelsFontMinSize )
+
+ Specifies the minimal font size to be used for displaying the axis labels.
+
+ Use this to specify the minimal font size to be used for axis labels,
+ in case KD Chart is calculating the axis labels fonts dynamically. Default value is 10 points.
+
+ \sa setAxisLabelsFont, setAxisLabelsFontUseRelSize, setAxisLabelsFontRelSize
+ */
+
+
+
+/**
+ Specifies whether the axis labels start and end at the
+ edges of the charts instead being positioned in the
+ middle of the first data point (or the last one, resp.)
+
+ \param axisLabelsTouchEdges if the axis labels start and end at the
+ edges of the charts instead being positioned in the
+ middle of the first data point (or the last one, resp.)
+
+ \sa axisLabelsTouchEdges
+ */
+void KDChartAxisParams::setAxisLabelsTouchEdges( bool axisLabelsTouchEdges )
+{
+ _axisLabelsTouchEdges = axisLabelsTouchEdges;
+ emit changed();
+}
+
+/**
+ \fn bool KDChartAxisParams::axisLabelsTouchEdges() const
+ Returns whether the axis labels start and end at the
+ edges of the charts instead being positioned in the
+ middle of the first data point (or the last one, resp.)
+
+ \return whether the axis labels start and end at the
+ edges of the charts instead being positioned in the
+ middle of the first data point (or the last one, resp.)
+ \sa setAxisLabelsTouchEdges
+ */
+
+/**
+ Specifies the axis labels font.
+
+ \note The font size will be ignored if \c useFontSize is false,
+ in this case the font size will be calculated dynamically using
+ the value stored by you calling setAxisLabelsFontRelSize().
+
+ \param axisLabelsFont the font to be used for the axis' labels.
+ \param useFontSize set ti true if the fixed font size of
+ the \c axisLabelsFont is to be used, otherwise the font size
+ will be calculated dynamically.
+
+ \sa setAxisLabelsFontRelSize, setAxisLabelsFontUseRelSize
+ \sa axisLabelsFont, axisLabelsFontRelSize
+ */
+void KDChartAxisParams::setAxisLabelsFont( QFont axisLabelsFont, bool useFontSize )
+{
+ _axisLabelsFont = axisLabelsFont;
+ _axisLabelsFontUseRelSize = ! useFontSize;
+ emit changed();
+}
+/**
+ \fn QFont KDChartAxisParams::axisLabelsFont() const
+ Returns the axis labels font.
+
+ \return the axis labels font.
+ \sa setAxisLabelsFont, setAxisLabelsFontRelSize
+ \sa axisLabelsFontRelSize
+ */
+
+/**
+ Specifies whether axis labels shall be drawn
+ using relative font size.
+
+ \param axisLabelsFontUseRelSize whether axis labels shall be drawn
+ using relative font size.
+ If true the absolute value of the value set by \c
+ setAxisLabelsFontRelSize is per thousand
+ of of the printable area size
+ to be used. This will make the axis look the same even if scaled
+ to very different size.
+
+ \sa setAxisLabelsFontRelSize, setAxisLabelsFont
+ */
+void KDChartAxisParams::setAxisLabelsFontUseRelSize( bool axisLabelsFontUseRelSize )
+{
+ _axisLabelsFontUseRelSize = axisLabelsFontUseRelSize;
+ emit changed();
+}
+
+/**
+ \fn bool KDChartAxisParams::axisLabelsFontUseRelSize() const
+ Returns whether the fix axis font size is used.
+
+ \return whether the fix axis labels font size is used.
+ \sa setAxisLabelsFontRelSize, setAxisLabelsFont
+ */
+
+
+/**
+ Specifies the axis labels relative font size.
+
+ \param axisLabelsFontRelSize the relative axis font size.
+ If this value unequals zero the absolute value is per thousand
+ of the printable area width size
+ to be used. This will make the axis look the same even if scaled
+ to very different size.
+
+ \sa setAxisLabelsFontUseRelSize, setAxisLabelsFont
+ */
+void KDChartAxisParams::setAxisLabelsFontRelSize( int axisLabelsFontRelSize )
+{
+ _axisLabelsFontRelSize = axisLabelsFontRelSize;
+ emit changed();
+}
+
+
+/**
+ \fn int KDChartAxisParams::axisLabelsFontRelSize() const
+ Returns the axis labels relative font size.
+
+ \return the axis labels relative font size.
+ \sa setAxisLabelsFontRelSize, setAxisLabelsFontUseRelSize
+ */
+
+/**
+ \fn bool KDChartAxisParams::axisLabelsDontShrinkFont() const
+ Specifies whether the axis labels' font size may be shrinked
+ to avoid overwriting neighboring areas.
+
+ \sa axisLabelsDontShrinkFont
+ \sa setAxisLabelsDontAutoRotate, setAxisLabelsRotation
+ \sa setAxisLabelsFontUseRelSize, setAxisLabelsFont
+ */
+
+
+/**
+ \fn void KDChartAxisParams::setAxisLabelsDontAutoRotate( bool labelsDontAutoRotate )
+
+ Specifies whether the axis labels may be rotated
+ to avoid overwriting neighboring areas.
+
+ \sa axisLabelsDontAutoRotate
+ \sa setAxisLabelsDontShrinkFont, setAxisLabelsRotation
+ \sa setAxisLabelsFontUseRelSize, setAxisLabelsFont
+ */
+
+/**
+ \fn bool KDChartAxisParams::axisLabelsDontAutoRotate() const
+ Returns whether the axis labels may not be rotated
+ to avoid overwriting neighboring areas.
+
+ \return whether the axis labels may not be rotated
+ to avoid overwriting neighboring areas.
+ \sa setAxisLabelsDontAutoRotate
+ \sa axisLabelsDontShrinkFont, setAxisLabelsRotation
+ \sa setAxisLabelsFontRelSize, setAxisLabelsFont
+ */
+
+/**
+ \fn void KDChartAxisParams::setAxisLabelsRotation( int rotation )
+ Specifies by how many degrees the axis labels shall be rotated.
+
+ \param rotation The rotation of the labels - value must be either
+ zero or between 360 and 270. 360 degrees means don't rotate.
+
+ \note This setting specifies the <b>minimum</b> rotation of
+ the labels. Rotation may be increased to fit labels into
+ available space unless you explicitely called the
+ setAxisLabelsDontAutoRotate() function.
+
+ \sa axisLabelsDontAutoRotate
+ \sa setAxisLabelsDontShrinkFont, setAxisLabelsRotation
+ \sa setAxisLabelsFontUseRelSize, setAxisLabelsFont
+ */
+
+
+/**
+ \fn int KDChartAxisParams::axisLabelsRotation() const
+ Returns by how many degrees the axis labels will be rotated.
+
+ \sa setAxisLabelsDontAutoRotate
+ \sa axisLabelsDontShrinkFont, setAxisLabelsRotation
+ \sa setAxisLabelsFontRelSize, setAxisLabelsFont
+ */
+
+
+/**
+ Specifies the axis labels colour.
+
+ \param axisLabelsColor the axis labels colour.
+ \sa axisLabelsColor
+ */
+void KDChartAxisParams::setAxisLabelsColor( QColor axisLabelsColor )
+{
+ _axisLabelsColor = axisLabelsColor;
+ emit changed();
+}
+
+/**
+ \fn QColor KDChartAxisParams::axisLabelsColor() const
+ Returns the axis labels colour.
+
+ \return the axis labels colour.
+ \sa setAxisLabelsColor
+ */
+
+/**
+ Specifies the calculations to be applied to the axis labels.
+
+ \param divPow10 The power of 10 which the data value is to be divided by.
+ A value of 2 means divide by 100, a value of -3 means multiply by 1000,
+ and 0 (by definition) would result in multiplying by 1.
+ \param digitsBehindComma The number of digits to show behind the comma,
+ to have this calculated automatically just use the default value
+ KDCHART_DATA_VALUE_AUTO_DIGITS.
+ \sa setAxisLabelsFormat
+ \sa setAxisLabelsNotation
+ \sa axisLabelsDivPow10, axisLabelsDigitsBehindComma
+ */
+void KDChartAxisParams::setAxisLabelsCalc( int divPow10,
+ int digitsBehindComma )
+{
+ _axisLabelsDivPow10 = divPow10;
+ _axisDigitsBehindComma = digitsBehindComma;
+ emit changed();
+}
+
+/**
+ Specifies the way how the axis label strings will be formatted. Will be ignored for non-numerical axis labels.
+
+ \param decimalPoint The 'radix character' (or text, resp.) to be inserted
+ into the string (default is '.').
+ \param thousandsPoint The character (or text, resp.) to be used as delimiter
+ between the hundred digit and the thousand digit and between the
+ 100.000 and the 1.000.000 digit (default is ',').
+
+ \sa setAxisLabelsFormat, setAxisLabelsCalc
+ \sa setAxisLabelsNotation
+ \sa axisLabelsDecimalPoint, axisLabelsThousandsPoint
+ */
+void KDChartAxisParams::setAxisLabelsRadix( const QString& decimalPoint,
+ const QString& thousandsPoint )
+{
+ _axisLabelsDecimalPoint = decimalPoint;
+ _axisLabelsThousandsPoint = thousandsPoint;
+}
+
+
+/**
+ Specifies the way how the number part of the axis label strings will be formatted.
+ Will be ignored for non-numerical axis labels.
+
+ \param notation The way of notation to be used for the number part.
+
+ \note If you need exponential notation with a common magnitude, just use
+ setAxisLabelsCalc to declare the divisor, and then add a KDChartCustomBox
+ to the end of your axis's area, informing the user about the magnitude to
+ be added to each of the values, e.g. by saying "x 1e3".
+
+ \sa KDChartEnums::NumberNotation, setAxisLabelsCalc, setAxisLabelsRadix, setAxisLabelsFormat
+ */
+void KDChartAxisParams::setAxisLabelsNotation( KDChartEnums::NumberNotation notation )
+{
+ _axisLabelsNotation = notation;
+}
+
+/**
+ Specifies the way how the axis label strings will be formatted. Will be ignored for non-numerical axis labels.
+
+ \param prefix The character (or text, resp.) to be prepended before the string
+ after inserting the decimalPoint and the thousandsPoint.
+ \param postfix The character (or text, resp.) to be appended to the string
+ after adding decimalPoint, thousandsPoint, prefix.
+ \param totalLen The forced size of the string after adding decimalPoint,
+ thousandsPoint, prefix, postfix. If this parameter is set to zero
+ (default) no padding will be performed.
+ If the string has more characters than the (non-zero) value of totalLen,
+ the respective number of characters will be cut off at the right side.
+ \param padFill The padding character to be prepended before the string
+ (or inserted into the string, resp.) when increasing its length until
+ the totalLen is reached.
+ \param blockAlign If set to true (default) the padFill character(s) will be
+ inserted between the number and the prefix, if set to false they will be
+ prepended before the prefix.
+
+ \sa setAxisLabelsRadix, setAxisLabelsCalc
+ \sa setAxisLabelsNotation
+ \sa axisLabelsPrefix, axisLabelsPostfix, axisLabelsTotalLen
+ \sa axisLabelsPadFill, axisLabelsBlockAlign
+ */
+void KDChartAxisParams::setAxisLabelsFormat( const QString& prefix,
+ const QString& postfix,
+ const int& totalLen,
+ const QChar& padFill,
+ const bool& blockAlign )
+{
+ _axisLabelsPrefix = prefix;
+ _axisLabelsPostfix = postfix;
+ _axisLabelsTotalLen = totalLen;
+ _axisLabelsPadFill = padFill;
+ _axisLabelsBlockAlign = blockAlign;
+}
+
+
+
+/**
+ \c enum LabelsFromDataRow { LabelsFromDataRowYes,
+ LabelsFromDataRowNo,
+ LabelsFromDataRowGuess };
+
+ Are the axis labels stored in a data row?
+ If \c LabelsFromDataRowGuess we assume yes only if
+ all the entries of that data row contain strings - no numbers.
+
+ \li \c LabelsFromDataRowYes = label texts are to be taken from data row
+ \li \c LabelsFromDataRowNo = do not take label texts from data row
+ \li \c LabelsFromDataRowGuess = take label texts from data row if all
+ entries in that row are strings (no numerical values!)
+
+ \sa setAxisValues, setAxisValueStart, setAxisValueEnd, setAxisValueDelta
+ \sa setLabelTextsFormDataRow
+ \sa axisLabelTextsFormDataRow
+ */
+
+
+/**
+ Converts the specified labels from data row enum to a string
+ representation.
+
+ \param mode the enum to convert
+ \return the string representation of the mode enum
+ */
+QString KDChartAxisParams::labelsFromDataRowToString( LabelsFromDataRow mode ) {
+ switch( mode ) {
+ case LabelsFromDataRowYes:
+ return "Yes";
+ case LabelsFromDataRowNo:
+ return "No";
+ case LabelsFromDataRowGuess:
+ return "Guess";
+ default: // should not happen
+ qDebug( "Unknown labels from data row mode" );
+ return "Guess";
+ }
+}
+
+/**
+ Converts the specified string to a data row enum value.
+
+ \param string the string to convert
+ \return the data row mode enum value
+ */
+KDChartAxisParams::LabelsFromDataRow KDChartAxisParams::stringToLabelsFromDataRow( const QString& type ) {
+ if( type == "Yes" )
+ return LabelsFromDataRowYes;
+ else if( type == "No" )
+ return LabelsFromDataRowNo;
+ else if( type == "Guess" )
+ return LabelsFromDataRowGuess;
+ else // should not happen
+ return LabelsFromDataRowGuess;
+}
+
+/**
+
+ \c enum ValueScale { ValueScaleNumerical = 0, ( have gaps here to allow specifying of additional scaling steps in between )
+ ValueScaleSecond = 20,
+ ValueScaleMinute = 30,
+ ValueScaleHour = 40,
+ ValueScaleDay = 50,
+ ValueScaleWeek = 60,
+ ValueScaleMonth = 70,
+ ValueScaleQuarter = 80,
+ ValueScaleYear = 90 };
+
+ Are axis labels scaled mumerically or fixing a time period?
+ If \c ValueScaleNumerical axis labels are just numbers like "item 1", "item 2"...
+
+ \li \c ValueScaleSecond = seconds
+ \li \c ValueScaleMinute = minutes
+ ..
+ \li \c ValueScaleYear = years
+
+ \sa setAxisValues, setAxisValueStart, setAxisValueEnd, setAxisValueDelta
+ \sa setLabelTextsFormDataRow
+ \sa axisLabelTextsFormDataRow
+ */
+
+
+/**
+
+Note: The following text is to become part of the setAxisValues() doku
+you see below.
+It shall be added once the automatic string support has been added!
+
+
+Currently the following strings are supported by the automatical
+numbering feature. (These strings are implemented for your convenience,
+you may specify any other set of label texts by passing a \c QStringList
+pointer to \c axisLabelStringList.)
+
+\li Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
+\li January, February, March, May, June, July, August, September, October, November, December
+\li Spring, Summer, Autumn, Winter
+
+...
+
+To specify the start value and the way the label values
+are calculated you may
+
+\li \b either pass one of the <b>above strings</b> as start value
+<br>
+In this case the label texts will be taken from the respective
+list restarting at the beginnig whenever the end is reached.
+<br>
+In case you specify a non-zero integer value for
+\c axisValueDelta the width and direction
+of steps will be performed accordingly:
+<br>
+A value of <b>1.0</b>
+(specifying a step-length of 1 ) will cause every entry to be
+taken.
+<br>
+A <b>4.0</b> would take the start entry, skip 3 entries, take
+the 4th entry and so forth...
+<br>
+By using negative numbers you can specify backward stepping.
+<br>
+(Of course all non-integer values will be ignored here.)
+*/
+
+/**
+ <B>General axis texts setup routine.</B><BR>
+ Specifies how the axis limits shall be calculated
+ and specifies the lower and the upper limit,
+ the step-width and the list of strings
+ (if such is to be used).
+
+ \note Start and end values are \c KDChartData so you may either
+ specify numerical data or pass a string. <br>
+ However if passing a string make sure to also specify a
+ valid QStringList* for \c axisLabelStringList.
+ In that case it could be wise to also also specify a second
+ QStringList* for \c axisShortLabelsStringsList to be used in
+ case the axes area is not wide enough to display the
+ label texts in their full length.
+
+ <P>
+
+ To specify the start value and the way the label values
+ are calculated you may
+
+ \li \b either pass a <b>string</b> as start value
+ <br>
+ In this case the label texts will be taken from the string
+ list passed to the function via \c axisLabelStringList
+ starting with the string you specified as start value and
+ restarting at the beginnig whenever the end is reached.
+ In case the start value is not contained in the
+ \c axisLabelStringList list it will be ignored and labelling
+ will be done as if you had specified
+ KDCHART_AXIS_LABELS_AUTO_LIMIT as start value (see below).
+ <br>
+ In case you specify a non-zero integer value for
+ \c axisValueDelta the width and direction
+ of steps will be performed accordingly:
+ <br>
+ A value of <b>1.0</b>
+ (specifying a step-length of 1 ) will cause every entry
+ of the list to be taken.
+ <br>
+ A <b>4.0</b> would take the start entry, skip 3 entries, take
+ the 4th entry and so forth...
+ <br>
+ By using negative numbers you can specify backward stepping.
+ <br>
+ (Of course all non-integer values will be ignored here.)
+ \li \b or pass <b>KDCHART_AXIS_LABELS_AUTO_LIMIT</b> as start value
+ <br>
+ In this case the first label text <br>
+ <i>either</i> will be calculated
+ based upon the lowest value of the associated
+ datasets row number \c labelTextsDataRow if
+ \c axisLabelsFromDataRow is set to true, <br>
+ <i>or</i> the first entry of the texts list will be taken
+ if \c axisLabelStringList is set properly, <br>
+ <i>otherwise</i> it will be set to "1".
+
+ \li \b or pass a <b>numerical value</b> as start value
+ <br>
+ In this case the first label text will be set to that value.
+ <br>
+ <b>In either case</b> (KDCHART_AXIS_LABELS_AUTO_LIMIT or numerical value)
+ the \c axisValueDelta may be used to specify the value to be
+ added to obtain the next values:
+ <br>
+ A value of <b>1.0</b> will cause 1.0 to be added to the current
+ value to make the next value.
+ <br>
+ A <b>-0.25</b> would cause 0.25 to be subtracted from the current value.
+ <br>
+ (Negative or non-integer numbers are allowed here.)
+
+<P>
+
+Examples:
+
+\verbatim
+setAxisValues();
+\endverbatim
+This would specify a default ordinate-axis obtaining its values from the
+attached dataset. Looks nice but it is difficult to compare it to another
+chart representing slightly different min/max values since it neither starts
+at zero nor ends at an allways same value.
+
+\verbatim
+setAxisValues( true, KDChartData( 0.0 ) );
+\endverbatim
+This would specify a half-automatical ordinate-axis obtaining its values from
+the attached dataset. Looks nice and can be slightly easier compared to
+another chart since it allways starts at zero, causing negative values to be
+ignored completely.
+
+\verbatim
+setAxisValues( true, KDChartData( -2.0 ),
+ KDChartData( 7.5 ),
+ 0.5, 1 );
+\endverbatim
+This would specify an ordinate-axis \not obtaining its values
+from the attached dataset.
+<b>Since both the start value and the end value are specified the range
+of the dataset values are ignored completely.</b>
+It will show one digit behind the comma.
+The resulting chart can be perfectly compared to
+another chart since it allways starts and ends at the very same level - no
+matter what the dataset values are about actually.
+
+\verbatim
+setAxisValues( false, KDChartData( 0.0 ),
+ KDChartData( 3.5),
+ 0.25, 2 );
+\endverbatim
+This would specify a default abscissa-axis starting with value 0.0 and
+adding 0.25 to get the next value, will count until 3.5.
+It will show two digits behind the comma.
+
+\verbatim
+setAxisValues( false,
+ KDChartData( 1964.0 ), KDCHART_AXIS_LABELS_AUTO_LIMIT, 1, 0 );
+\endverbatim
+This would specify a default abscissa-axis starting with value 1964 and
+adding 1 to get the next value.
+It will show no digits behind the comma.
+
+\verbatim
+KDChartParams p;
+KDChartAxisParams pa( p.axisParams( KDChartAxisParams::AxisPosBottom ) );
+
+QStringList abscissaNames;
+abscissaNames << "Sunday" << "Monday" << "Tuesday" << "Wednesday"
+<< "Thursday" << "Friday" << "Saturday";
+
+QStringList abscissaShortNames;
+abscissaShortNames << "Sun" << "Mon" << "Tue" << "Wed"
+<< "Thu" << "Fri" << "Sat";
+
+pa.setAxisValues( false,
+ KDChartData( "Monday" ),
+ KDCHART_AXIS_LABELS_AUTO_LIMIT,
+ KDCHART_AXIS_LABELS_AUTO_DELTA,
+ KDCHART_AXIS_LABELS_AUTO_DIGITS,
+ KDChartAxisParams::LabelsFromDataRowNo,
+ 0,
+ &abscissaNames,
+ &abscissaShortNames );
+p.setAxisParams( KDChartAxisParams::AxisPosBottom, pa );
+\endverbatim
+This would specify a default abscissa-axis starting with 'Monday' and
+counting the days of the week as far as neccessary to represent
+all the entries in the associated dataset.
+Note this \c LabelsFromDataRowNo indicating that the texts are <b>not</b> to
+be taken from a data row and note \c &abscissaNames indicating the
+\c QStringList where to take the texts from instead. (In case the axis area
+ is not wide enough to display the strings in their full length their
+ counterparts stored in abscissaShortNames will be displayed instead.)
+<b>Note also:</b> The strings in those two QStringList are <b>not</b>
+copied into the \c KDChartAxisParams nor into the \c KDChartParams
+so please make sure the Lists are alive and valid till the end of
+the param objects. Otherwise you will not be able to display the
+texts.
+<P>
+
+\param axisSteadyValueCalc specifies whether label values shall be calculataed based upon the associated dataset values (normally this is true for ordinate axes) or based upon some string list (as you might expect it for abscissa labels).
+\param axisValueStart specifies first label value to be written.
+\param axisValueEnd specifies the last label value to be written.
+\param axisValueDelta specifies the length of the steps to be taken from one label text to the next one.
+\param axisDigitsBehindComma specifies how many digits are to be shown behind the axis label texts comma.
+\param axisMaxEmptyInnerSpan specifies the percentage of the y-axis range that may to contain NO data entries, if - and only if - axisValueStart (or axisValueEnd, resp.) is set to KDCHART_AXIS_LABELS_AUTO_LIMIT. To prevent \c setAxisValues from changing the current setting you may specify KDCHART_DONT_CHANGE_EMPTY_INNER_SPAN_NOW here, to deactivate taking into account the inner span entirely just use KDCHART_AXIS_IGNORE_EMPTY_INNER_SPAN.
+\param takeLabelsFromDataRow specifies whether the labels texts shall be taken from a special row (reserved for this in each dataset) or not.
+\param axisLabelStringList points to a \c QStringList containing the label texts to be used.
+\param axisShortLabelsStringList points to a \c QStringList containing the label texts to be used in case their full-size counterparts cannot be shown due to limited axis area size.
+\param axisValueLeaveOut is used for horizontal (top or bottom) axes only; it specifies whether some of the axis labels are to be skipped if there is not enough room for drawing them all without overlapping - this parameter may be set to KDCHART_AXIS_LABELS_AUTO_LEAVEOUT or to zero or to another positive value.
+\param axisValueDeltaScale is used to specify the scaling mode of \c axisValueDelta - either just ValueScaleNumbers of a special time scale indicator.
+\sa setAxisValueStart, setAxisValueEnd, setAxisValueDelta, setAxisValuesDecreasing
+\sa axisValueStart axisValueEnd, axisValueDelta, ValueScale
+\sa LabelsFromDataRow, axisLabelTextsFormDataRow, axisLabelTexts
+\sa axisSteadyValueCalc, setAxisValueLeaveOut
+*/
+void KDChartAxisParams::setAxisValues( bool axisSteadyValueCalc,
+ const QVariant& axisValueStart,
+ const QVariant& axisValueEnd,
+ double axisValueDelta,
+ int axisDigitsBehindComma,
+ int axisMaxEmptyInnerSpan,
+ LabelsFromDataRow takeLabelsFromDataRow,
+ int labelTextsDataRow,
+ QStringList* axisLabelStringList,
+ QStringList* axisShortLabelsStringList,
+ int axisValueLeaveOut,
+ ValueScale axisValueDeltaScale )
+{
+ _axisSteadyValueCalc = axisSteadyValueCalc;
+ _axisValueStart = axisValueStart;
+ _axisValueEnd = axisValueEnd;
+ _axisValueLeaveOut = axisValueLeaveOut;
+ _axisValueDelta = axisValueDelta;
+ _axisValueDeltaScale = axisValueDeltaScale;
+ _axisDigitsBehindComma = axisDigitsBehindComma;
+ if ( KDCHART_DONT_CHANGE_EMPTY_INNER_SPAN_NOW != axisMaxEmptyInnerSpan ) {
+ if ( 100 < axisMaxEmptyInnerSpan
+ || 1 > axisMaxEmptyInnerSpan )
+ _axisMaxEmptyInnerSpan = KDCHART_AXIS_IGNORE_EMPTY_INNER_SPAN;
+ else
+ _axisMaxEmptyInnerSpan = axisMaxEmptyInnerSpan;
+ }
+ _takeLabelsFromDataRow = takeLabelsFromDataRow;
+ _labelTextsDataRow = labelTextsDataRow;
+ if( axisLabelStringList )
+ _axisLabelStringList = *axisLabelStringList;
+ else
+ _axisLabelStringList.clear();
+ if( axisShortLabelsStringList )
+ _axisShortLabelsStringList = *axisShortLabelsStringList;
+ else
+ _axisShortLabelsStringList.clear();
+ // label texts must be recalculated?
+ setAxisLabelTexts( 0 );
+ setTrueAxisDeltaPixels( 0.0 );
+ setTrueAxisLowHighDelta( 0.0, 0.0, 0.0 );
+ setTrueAxisDtLowHighDeltaScale( QDateTime(), QDateTime(), ValueScaleDay );
+ emit changed();
+}
+
+/**
+ \fn void KDChartAxisParams::setAxisValueStart( const KDChartData axisValueStart )
+ Specifies the lower limit for the axis labels: the start value.
+
+ \param axisValueStart the lower limit for the axis labels: the start
+ value.
+ \sa setAxisValues, setAxisValueStartIsExact
+ \sa setAxisValueEnd, setAxisValueDelta
+ \sa axisValueStart, axisValueEnd, axisValueDelta
+ \sa axisLabelsFromDataRow, axisLabelTexts
+ \sa axisLabelStringList, axisShortLabelsStringList
+ */
+
+/**
+ \fn KDChartData KDChartAxisParams::axisValueStart() const
+ Returns the lower limit for the axis labels: the start value.
+
+ \return the lower limit for the axis labels: the start value.
+ \sa setAxisValues, setAxisValueStart, setAxisValueStartIsExact
+ \sa setAxisValueEnd, setAxisValueDelta
+ \sa axisValueEnd, axisValueDelta
+ \sa axisLabelsFromDataRow, axisLabelTexts
+ \sa axisLabelStringList, axisShortLabelsStringList
+ */
+
+/**
+ \fn void setAxisValueStartIsExact( bool isExactValue )
+ Specifies whether the lower limit for the axis labels that
+ is specified via setAxisValueStart() is to be used as the
+ axis start value even if this will not look very nice: this is
+ the default, KD Chart just takes the value specified by you, e.g.
+ if you specify 75003.00 as start value you will get exactly this.
+
+ By setting this flag to FALSE you let KD Chart find a better
+ value for you: if your value is not Zero the axis will start
+ with the next value lower than your start value that can be
+ divided by the delta factor.
+
+ \param isExactValue set this to FALSE if KD Chart shall find
+ a better value than the one you have specified by setAxisValueStart()
+ \sa setAxisValues, setAxisValueEnd, setAxisValueDelta
+ \sa axisValueStartIsExact, axisValueStart
+ \sa axisValueEnd, axisValueDelta
+ \sa axisLabelsFromDataRow, axisLabelTexts
+ \sa axisLabelStringList, axisShortLabelsStringList
+ */
+
+/**
+ \fn bool axisValueStartIsExact() const
+ Returns whether the lower limit for the axis labels that
+ is specified via setAxisValueStart() is to be used as the
+ axis start value even if this will not look very nice: this is
+ the default, KD Chart just takes the value specified by you, e.g.
+ if you specify 75003.00 as start value you will get exactly this.
+
+ \return whether the lower limit for the axis labels that
+ is specified via setAxisValueStart() is to be used as the
+ axis start value even if this will not look very nice.
+ \sa setAxisValues, setAxisValueStartIsExact, setAxisValueStart
+ \sa setAxisValueEnd, setAxisValueDelta
+ \sa axisValueEnd, axisValueDelta
+ \sa axisLabelsFromDataRow, axisLabelTexts
+ \sa axisLabelStringList, axisShortLabelsStringList
+ */
+
+
+/**
+ \fn void KDChartAxisParams::setAxisValueEnd( const KDChartData axisValueEnd )
+ Specifies the upper limit for the axis labels: the end value.
+
+ \param axisValueStart the upper limit for the axis labels: the end
+ value.
+ \sa setAxisValues, setAxisValueStart, setAxisValueStartIsExact
+ \sa setAxisValueDelta
+ \sa axisValueStart, axisValueEnd, axisValueDelta
+ \sa axisLabelsFromDataRow, axisLabelTexts
+ \sa axisLabelStringList, axisShortLabelsStringList
+ */
+
+/**
+ \fn KDChartData KDChartAxisParams::axisValueEnd() const
+ Returns the upper limit for the axis labels: the end value.
+
+ \return the upper limit for the axis labels: the end value.
+ \sa setAxisValues, setAxisValueStart, setAxisValueStartIsExact
+ \sa setAxisValueEnd, setAxisValueDelta
+ \sa axisValueStart, axisValueDelta
+ \sa axisLabelsFromDataRow, axisLabelTexts
+ \sa axisLabelStringList, axisShortLabelsStringList
+ */
+
+
+/**
+ Specifies the DELTA value for the axis labels: the distance
+ between two labels.
+
+ \param axisValueDelta the DELTA value for the axis labels: the distance
+ between two labels.
+ \param scale the scaling of the DELTA value
+ \sa ValueScale
+ \sa setAxisValues
+ \sa setAxisValueStart, setAxisValueStartIsExact
+ \sa setAxisValueEnd, setAxisValueDelta
+ \sa axisValueStart, axisValueEnd, axisValueDelta
+ \sa axisLabelsFromDataRow, axisLabelTexts
+ \sa axisLabelStringList, axisShortLabelsStringList
+ */
+void KDChartAxisParams::setAxisValueDelta( const double axisValueDelta,
+ ValueScale scale )
+{
+ _axisValueDelta = axisValueDelta;
+ _axisValueDeltaScale = scale;
+}
+
+/**
+ \fn double KDChartAxisParams::axisValueDelta() const
+ Returns the DELTA value for the axis labels: the distance
+ between two labels.
+
+ \return the DELTA value for the axis labels: the distance
+ between two labels.
+ \sa setAxisValueDelta
+ */
+
+
+/**
+ \fn ValueScale KDChartAxisParams::axisValueDeltaScale() const
+ Returns the DELTA value scaling mode for the axis labels
+
+ \sa setAxisValueDelta
+ */
+
+
+
+/**
+ \fn void KDChartAxisParams::setAxisValueLeaveOut( const int leaveOut )
+ Specifies how many axis labels are to be skipped
+ if there is not enough space for displaying all of them.
+ This is usefull in case you have lots of entries in one dataset.
+
+ \sa setAxisValues
+ */
+/**
+ \fn int KDChartAxisParams::axisValueLeaveOut() const
+ Returns how many axis labels are to be skipped
+ if there is not enough space for displaying all of them.
+
+ \sa setAxisValueLeaveOut
+ */
+
+/**
+ \fn void KDChartAxisParams::setAxisValuesDecreasing( bool valuesDecreasing )
+ Specifies whether axis values should be printed in reverted order: starting
+ with the highest label and decreasing until the lowest label is reached.
+
+ \note This feature is supported for LINE charts only.
+
+ \sa setAxisValues
+*/
+
+/**
+ \fn bool KDChartAxisParams::axisValuesDecreasing() const
+ Returns whether axis values should be printed in reverted order: starting
+ with the highest label and decreasing until the lowest label is reached.
+
+ \note This feature is supported for LINE charts only.
+
+ \sa setAxisValuesDecreasing
+ */
+
+/**
+ \fn void KDChartAxisParams::setTrueAxisDeltaPixels( double nDeltaPixels )
+ Specifies the true axis pixel distance between two label delimiters.
+
+ \param nDeltaPixels the true value as it was calculated.
+
+ \note Do <b>not call</b> this function unless you are knowing
+ exactly what you are doing. \c setTrueAxisDeltaPixels is normally
+ reserved for internal usage by methods calculating the axis
+ label texts. Thus the signal \c changed() is not sended here.
+
+ \sa trueAxisDeltaPixels, trueAxisLow, trueAxisHigh, trueAxisDelta
+ \sa setAxisArea
+ */
+
+/**
+ \fn double KDChartAxisParams::trueAxisDeltaPixels() const
+ Returns the <b>true</b> delimiter delta pixel value of the axis labels
+ as is was calculated and set by \c setTrueAxisDeltaPixels.
+
+ \return the true delimiter delta pixel value of the axis labels
+ \sa setAxisValues
+ \sa trueAxisLow, trueAxisHigh, trueAxisDelta
+ */
+
+
+
+/**
+ Specifies the true axis lower and upper limit values of the axis
+ and the exact Delta value between the axis delimiters.
+
+ \param nLow/nHigh/nDelta the true values as they were calculated.
+
+ \note Do <b>not call</b> this function unless you are knowing
+ exactly what you are doing. \c setAxisTrueAreaSize is normally
+ reserved for internal usage by methods calculating the axis
+ label texts. Thus the signal \c changed() is not sended here.
+
+ \sa trueAxisLow, trueAxisHigh, trueAxisDelta, trueAxisDeltaPixels
+ \sa setAxisArea
+ */
+void KDChartAxisParams::setTrueAxisLowHighDelta( double nLow, double nHigh, double nDelta )
+{
+ _trueLow = nLow;
+ _trueHigh = nHigh;
+ _trueDelta = nDelta;
+
+}
+
+
+/**
+ \fn double KDChartAxisParams::trueAxisLow() const
+ Returns the <b>true</b> start value of the ordinate axis labels
+ as is was calculated and set by \c setTrueAxisLowHighDelta.
+
+ \return the true lower limit of the axis labels
+ \sa setAxisValues
+ \sa trueAxisHigh, trueAxisDelta, trueAxisDeltaPixels
+ */
+
+/**
+ \fn double KDChartAxisParams::trueAxisHigh() const
+ Returns the <b>true</b> end value of the ordinate axis labels
+ as is was calculated and set by \c setTrueAxisLowHighDelta.
+
+ \return the true upper limit of the axis labels
+ \sa setAxisValues
+ \sa trueAxisLow, trueAxisDelta, trueAxisDeltaPixels
+ */
+
+/**
+ \fn double KDChartAxisParams::trueAxisDelta() const
+ Returns the <b>true</b> delta value of the ordinate axis labels
+ as is was calculated and set by \c setTrueAxisLowHighDelta.
+
+ \return the true delta value of the axis labels
+ \sa setAxisValues
+ \sa trueAxisLow, trueAxisHigh, trueAxisDeltaPixels
+ */
+
+
+
+void KDChartAxisParams::setTrueAxisDtLowHighDeltaScale( QDateTime dtLow, QDateTime dtHigh,
+ ValueScale dtDeltaScale )
+{
+ _trueDtLow = dtLow;
+ _trueDtHigh = dtHigh;
+ _trueDtDeltaScale = dtDeltaScale;
+}
+
+/**
+ \fn void KDChartAxisParams::setTrueAxisDtLow( QDateTime dtLow )
+
+*/
+
+/**
+ \fn void KDChartAxisParams::void setTrueAxisDtHigh( QDateTime dtHigh )
+
+*/
+
+/**
+ \fn void KDChartAxisParams::void setTrueAxisDtScale( ValueScale scale )
+
+*/
+
+/**
+ \fn void KDChartAxisParams::QDateTime trueAxisDtLow() const
+
+*/
+
+/**
+ \fn void KDChartAxisParams::QDateTime trueAxisDtHigh() const
+
+*/
+
+/**
+ \fn void KDChartAxisParams::ValueScale trueAxisDtDeltaScale() const
+
+*/
+
+
+/**
+ Specifies the not-rounded screen positions where drawing of
+ this axis zero line started.
+
+ \Note You may not call this internal function - it is reserved for
+ internal usage of methodes needing to know the zero-line offsets
+
+ \param Pt the not-rounded screen positions where drawing of
+ this axis zero line started.
+
+ \sa axisZeroLineStartX, axisZeroLineStartY
+ */
+void KDChartAxisParams::setAxisZeroLineStart( double x, double y )
+{
+ _axisZeroLineStartX = x;
+ _axisZeroLineStartY = y;
+}
+
+/**
+ \fn double KDChartAxisParams::axisZeroLineStartX() const
+ Returns the not-rounded x-position where drawing of
+ this axis zero line started. This function needed
+ when painting the data of isometric axes (bars, lines, dots...).
+
+ \return the unrounded x-position where drawing of
+ this axis zero line started.
+
+ \sa setAxisZeroLineStart, axisZeroLineStartY
+ */
+
+/**
+ \fn double KDChartAxisParams::axisZeroLineStartY() const
+ Returns the not-rounded y-position where drawing of
+ this axis zero line started. This function needed
+ when painting the data of isometric axes (bars, lines, dots...).
+
+ \return the unrounded y-position where drawing of
+ this axis zero line started.
+
+ \sa setAxisZeroLineStart, axisZeroLineStartX
+ */
+
+/**
+ Specifies the not-rounded screen positions where drawing of
+ this axis low date/time value could be done.
+
+ \Note You may not call this internal function - it is reserved for
+ internal usage of methodes needing to know the zero-line offsets
+
+ \param Pt the not-rounded screen positions where drawing of
+ this axis low date/time value could be done.
+
+ \sa axisDtLowPosX, axisDtLowPosY
+ */
+void KDChartAxisParams::setAxisDtLowPos( double x, double y )
+{
+ _axisDtLowPosX = x;
+ _axisDtLowPosY = y;
+}
+
+/**
+ \fn double void KDChartAxisParams::axisDtLowPosX() const
+ Returns the not-rounded x-position where drawing of
+ this axis low date/time value could be done. This function needed
+ when painting the data of isometric axes (bars, lines, dots...).
+
+ \return the unrounded x-position where drawing of
+ this axis low date/time value could be done.
+
+ \sa setAxisDtLowPos, axisDtLowPosY
+ */
+
+/**
+ \fn double KDChartAxisParams::axisDtLowPosY() const
+ Returns the not-rounded y-position where drawing of
+ this axis low date/time value could be done. This function needed
+ when painting the data of isometric axes (bars, lines, dots...).
+
+ \return the unrounded y-position where drawing of
+ this axis low date/time value could be done.
+
+ \sa setAxisDtLowPos, axisDtLowPosX
+ */
+
+
+/**
+ Specifies the not-rounded screen positions where drawing of
+ this axis high date/time value could be done.
+
+ \Note You may not call this internal function - it is reserved for
+ internal usage of methodes needing to know the zero-line offsets
+
+ \param Pt the not-rounded screen positions where drawing of
+ this axis high date/time value could be done.
+
+ \sa axisDtHighPosX, axisDtHighPosY
+ */
+void KDChartAxisParams::setAxisDtHighPos( double x, double y )
+{
+ _axisDtHighPosX = x;
+ _axisDtHighPosY = y;
+}
+
+/**
+ \fn double KDChartAxisParams::axisDtHighPosX() const
+ Returns the not-rounded x-position where drawing of
+ this axis high date/time value could be done. This function needed
+ when painting the data of isometric axes (bars, lines, dots...).
+
+ \return the unrounded x-position where drawing of
+ this axis high date/time value could be done.
+
+ \sa setAxisDtHighPos, axisDtHighPosY
+ */
+
+/**
+ \fn double KDChartAxisParams::axisDtHighPosY() const
+ Returns the not-rounded y-position where drawing of
+ this axis high date/time value could be done. This function needed
+ when painting the data of isometric axes (bars, lines, dots...).
+
+ \return the unrounded y-position where drawing of
+ this axis high date/time value could be done.
+
+ \sa setAxisDtHighPos, axisDtHighPosX
+ */
+
+
+/**
+ \fn void KDChartAxisParams::setAxisDigitsBehindComma( const int digits )
+ Specifies the number of digits to be printed behind the comma
+ on the axis labels.
+
+ \param digits the number of digits to be printed behind the comma
+ on the axis labels.
+
+ \sa axisDigitsBehindComma
+ */
+
+/**
+ \fn int KDChartAxisParams::axisDigitsBehindComma() const
+ Returns the number of digits to be printed behind the comma
+ on the axis labels.
+
+ \return the number of digits to be printed behind the comma
+ on the axis labels.
+ \sa setAxisValues
+ \sa axisValueStart
+ \sa axisLabelsFromDataRow, axisLabelTexts
+ \sa axisLabelStringList, axisShortLabelsStringList
+ \sa setAxisLabelStringLists
+ */
+
+/**
+ \fn void KDChartAxisParams::setAxisLabelsDateTimeFormat( const QString& format )
+ Specifies the format to be used for displaying abscissa axis
+ QDateTime item labels.
+
+ \note This feature is only available when using Qt 3.0 or newer,
+ previous versions use a non changable format.
+
+ To calculate the format automatically (based on the
+ time span to be displayed) use the special value
+ \c KDCHART_AXIS_LABELS_AUTO_DATETIME_FORMAT - this is the default setting.
+
+ See Qt documentation on the format to be used here:
+
+ $QTDIR/doc/html/qdatetime.html#toString-2
+
+ \note Insert a '\n' character if you want to print the labels in two rows, e.g. "h:mm:ss\nd.MM.yyyy" would do that.
+
+ \sa axisLabelsDateTimeFormat
+ */
+
+/**
+ \fn QString KDChartAxisParams::axisLabelsDateTimeFormat() const
+ Returns the format to be used for displaying abscissa axis
+ QDateTime item labels.
+
+ \sa setAxisLabelsDateTimeFormat
+ */
+
+
+/**
+ \fn void KDChartAxisParams::setAxisMaxEmptyInnerSpan( const int maxEmpty )
+ Specifies the percentage of the y-axis range that may to contain NO
+ data entries, if - and only if - axisValueStart (or axisValueEnd,
+ resp.) is set to KDCHART_AXIS_LABELS_AUTO_LIMIT.
+
+ \param maxEmpty the percentage of the y-axis range that may to contain NO
+ data entries, if - and only if - axisValueStart (or axisValueEnd,
+ resp.) is set to KDCHART_AXIS_LABELS_AUTO_LIMIT.
+
+ \sa axisMaxEmptyInnerSpan
+ */
+
+/**
+ \fn int KDChartAxisParams::axisMaxEmptyInnerSpan() const
+ Returns the percentage of the y-axis range that may to contain NO
+ data entries, if - and only if - axisValueStart (or axisValueEnd,
+ resp.) is set to KDCHART_AXIS_LABELS_AUTO_LIMIT.
+
+ \note If more space is empty the zero-line will not be included info the chart but the lowest (or highest, resp.) entry of the axis will be shifted accordingly.
+ \sa setAxisValues
+ */
+
+
+/**
+ Specifies whether the axis labels are stored in a data row.
+ If \c LabelsFromDataRowGuess we assume yes only if
+ all the entries of that data row contain strings - no numbers.
+
+ \note Calling this function results in overwriting the information
+ that you might have set by previous calls of that function.
+ Only <b>one</b> data row can be specified as containing label texts.
+ To specify a data row that contains (or might contain) axis label texts just
+ call this function with \c LabelsFromDataRowYes (or \c LabelsFromDataRowGuess,
+ resp.) specifying this row but do <b>not</b> call the function n times with
+ the \c LabelsFromDataRowNo parameter to 'deactivate' the other rows.
+ The \c LabelsFromDataRowNo should be used to specify that <b>none</b> of
+ the data rows is containing the axis label texts (this is the default
+ setting).
+
+ \param row the data row number that contains (or might contain, resp.) the labels
+ \param mode the state of our information concerning that row (see: \c LabelsFromDataRow)
+
+ \sa LabelsFromDataRow, axisLabelTextsFormDataRow, setAxisValues
+ */
+void KDChartAxisParams::setLabelTextsFormDataRow( int row, LabelsFromDataRow mode )
+{
+ _labelTextsDataRow = row;
+ _takeLabelsFromDataRow = mode;
+}
+
+
+/**
+ \fn void void KDChartAxisParams::setLabelTextsFormDataRow( int row, LabelsFromDataRow mode );
+ Returns whether the axis labels will be taken from the associated dataset.
+
+ \return whether the axis limits will be taken from the associated dataset.
+ \sa setAxisValues
+ \sa axisValueStart, axisValueEnd
+ \sa axisLabelsFromDataRow, axisLabelTexts
+ */
+
+
+/**
+ \fn int KDChartAxisParams::labelTextsDataRow() const
+ Returns the number of the data row that contains (or might contain,
+ resp.) the texts to be taken for the axis labels.
+ <br>
+ Use \c axisLabelTextsFormDataRow to make sure the texts are
+ to be taken from that row.
+ <br>
+ Use \c axisLabelStringList to get a QStringList* of texts from
+ which the texts to be drawn will be taken.
+
+ Use \c axisShortLabelsStringList to get a QStringList* of texts from
+ which the texts to be drawn will be taken in case the axis area size
+ is too small to display their full-size counterparts stored in
+ \c axisLabelStringList.
+
+ Use \c axisLabelTexts to get a QStringList* containing the label
+ texts that are <b>actually</b> drawn at the axis.
+
+ \return the number of the data row that contains (or might contain,
+ resp.) the texts to be taken for the axis labels.
+ \sa setAxisValues
+ \sa axisValueStart, axisValueEnd
+ \sa axisLabelsFromDataRow, axisLabelTexts
+ \sa axisLabelStringList, axisShortLabelsStringList
+ */
+
+
+/**
+ Specifies a \c QStringList which the axis label texts are to
+ be taken from, the second parameter (if not zero) specifies an
+ alternative list of strings that are to be displayed in case
+ the axis area size is too small for showing the full-length names.
+
+ \note Normally axis labeling starts with the list's first string
+ and end with its last string, but by specifying a start and an
+ end value as additional parameters you can make KDChart repeat
+ the strings between these two values only, as shown here:
+
+ \verbatim
+ QStringList abscissaNames;
+ abscissaNames << "Sunday" << "Monday" << "Tuesday" << "Wednesday"
+ << "Thursday" << "Friday" << "Saturday";
+ QStringList abscissaShortNames;
+ abscissaShortNames << "Sun" << "Mon" << "Tue" << "Wed"
+ << "Thu" << "Fri" << "Sat";
+
+ KDChartAxisParams pa( _p->axisParams(
+ KDChartAxisParams::AxisPosBottom ) );
+
+ setAxisLabelStringParams( &abscissaNames,
+ &abscissaShortNames,
+ "Monday",
+ "Friday")
+
+ _p->setAxisParams( KDChartAxisParams::AxisPosBottom, pa );
+ \endverbatim
+
+
+ \param QStringList* axisLabelStringList points to the list of labels to be displayed
+ \param QStringList* axisShortLabelStringList points to
+ an alternative list of short names to be displayed if the long labels take too much place
+ \param QString valueStart ( default null ) the label to begin with
+ \param QString valueEnd ( default null ) the label to end with
+
+ \sa KDChartParams::setAxisLabelStringParams
+ \sa axisLabelStringList, axisShortLabelsStringList
+ \sa setAxisValues, setLabelTextsFormDataRow
+ \sa axisLabelTexts
+ */
+void KDChartAxisParams::setAxisLabelStringLists( QStringList* axisLabelStringList,
+ QStringList* axisShortLabelStringList,
+ const QString& valueStart,
+ const QString& valueEnd )
+{
+ QVariant axisValueStart, axisValueEnd;
+
+ if( valueStart.isNull() )
+ axisValueStart = KDCHART_AXIS_LABELS_AUTO_LIMIT;
+ else
+ axisValueStart = valueStart;
+
+ if( valueEnd.isNull() )
+ axisValueEnd = KDCHART_AXIS_LABELS_AUTO_LIMIT;
+ else
+ axisValueEnd = valueEnd;
+
+ setAxisValues( false,
+ axisValueStart,
+ axisValueEnd,
+ KDCHART_AXIS_LABELS_AUTO_DELTA,
+ KDCHART_AXIS_LABELS_AUTO_DIGITS,
+ KDCHART_AXIS_IGNORE_EMPTY_INNER_SPAN,
+ LabelsFromDataRowNo,
+ 0,
+ axisLabelStringList,
+ axisShortLabelStringList,
+ KDCHART_AXIS_LABELS_AUTO_LEAVEOUT );
+
+}
+
+
+/**
+ \fn QStringList KDChartAxisParams::axisLabelStringList() const
+ Returns a \c QStringList containing the label texts to be used.
+
+ Calling \c axisShortLabelsStringList() instead will return
+ another \c QStringList containing the label texts to be displayed
+ in case the axis area size is too small to show the full-size names.
+
+ \note This is the list of texts you specified by \c setAxisValues
+ or by \c setAxisLabelStringLists.
+ The texts <b>actually</b> drawn at the axis are <b>not neccessarily</b> the
+ same as the ones in this list since (regarding Start and/or End and/or
+ Delta value) they might be only a subset of this list. Whenever label texts
+ are calculated automatically the resulting labels are also stored in a
+ second list that you may access via \c axisLabelTexts().
+
+ \return a \c QStringList containing the label texts to be used.
+ \sa axisShortLabelsStringList
+ \sa setAxisLabelStringLists
+ \sa setAxisValues
+ \sa axisValueStart, axisValueEnd, axisLabelTexts
+ \sa axisLabelsFromDataRow, setLabelTextsFormDataRow
+ */
+
+/**
+ \fn uint KDChartAxisParams::axisLabelStringCount() const
+ Returns the number of strings stored as label texts,
+ the texts can be retrieved by calling \c axisLabelStringList().
+
+ \sa axisShortLabelsStringCount
+ \sa axisLabelStringList, axisShortLabelsStringList
+ */
+
+/**
+ \fn QStringList KDChartAxisParams::axisShortLabelsStringList() const
+ Returns a \c QStringList containing the label texts to be used
+ in case the axis area size is too small to show the full-size
+ label texts.
+
+ Calling \c axisLabelStringList() instead will return
+ another \c QStringList containing their full-size counterparts.
+
+ \note This is the list of texts you specified by \c setAxisValues
+ or by \c setAxisShortLabelsStringList.
+ The texts <b>actually</b> drawn at the axis are <b>not neccessarily</b> the
+ same as the ones in this list since (regarding Start and/or End and/or
+ Delta value) they might be only a subset of this list. Whenever label texts
+ are calculated automatically the resulting labels are also stored in a
+ second list that you may access via \c axisLabelTexts().
+
+ \return a \c QStringList containing the label texts to be used
+ in case the axis area size is too small to show the full-size
+ label texts.
+ \sa axisLabelStringList
+ \sa setAxisLabelStringLists
+ \sa setAxisValues
+ \sa axisValueStart, axisValueEnd, axisLabelTexts
+ \sa axisLabelsFromDataRow, setLabelTextsFormDataRow
+ */
+
+/**
+ \fn uint KDChartAxisParamsaxisShortLabelsStringCount() const
+ Returns the number of strings stored as label texts,
+ the texts can be retrieved by calling \c axisLabelStringList().
+
+ \sa axisLabelStringCount
+ \sa axisLabelStringList, axisShortLabelsStringList
+ */
+
+
+/**
+ \fn const QStringList* KDChartAxisParamsaxisLabelTexts() const
+ Returns a \c QStringList containing the label texts
+ that are <b>actually</b> drawn at the axis.
+
+ In case the texts are unknown returns zero.
+
+ \note This is the list of texts <b>actually</b> drawn at the axis.
+ This strings are not neccessarily the same as the ones in the list given by
+ \c setAxisValues since (regarding Start and/or End and/or Delta value) it
+ might be only a subset of that list. Whenever labels text are calculated
+ automatically the resulting labels also stored in this list - it will
+ allways be a true copy of the texts painted at the axis.
+
+ \return a \c QStringList containing the label texts actually being used.
+ \sa setAxisValues
+ \sa axisValueStart, axisValueEnd, axisLabelStringList
+ \sa axisLabelsFromDataRow, setLabelTextsFormDataRow
+ \sa setAxisLabelStringLists, setAxisValues
+ */
+
+
+
+/**
+ Specifies the label texts that are <b>actually</b> drawn
+ at the axis labels.
+
+ \note Do not call this function unless you know what you are
+ doing. It is used internally whenever the texts to be drawn
+ have been re-calculated or the charts parameters have changed.
+ For specifying another list of strings to be used as label texts
+ you might rather want to call \c setAxisLabelStringLists() or
+ \c setLabelTextsFormDataRow() depending from whether your texts
+ are stored in a \c QStringList or in a data row.
+
+ \param axisLabelTexts specifies the texts that are
+ <b>actually</b> drawn at the axis labels are unknown.
+
+ \sa setAxisLabelStringLists, setLabelTextsFormDataRow, setAxisValues
+ \sa setAxisFirstLabelText, setAxisLastLabelText
+ */
+void KDChartAxisParams::setAxisLabelTexts( const QStringList* axisLabelTexts )
+{
+ _axisLabelTexts.clear();
+ _axisLabelTextsDirty = ( 0 == axisLabelTexts );
+ if ( !_axisLabelTextsDirty )
+ _axisLabelTexts = *axisLabelTexts;
+}
+
+/**
+ \fn void KDChartAxisParamssetAxisLabelTextsDirty( bool axisLabelTextsDirty )
+ Specifies whether the label texts are <b>actually</b> drawn
+ at the axis labels are unknown. If \c false, they could
+ successfully be retrieved by \c axisLabelTexts().
+
+ \note Do not call this function unless you know what you are
+ doing. It is used internally whenever the texts to be drawn
+ have been re-calculated or the charts parameters have changed.
+ For specifying another list of strings to be used as label texts
+ you might rather want to call \c setAxisLabelStringLists() or
+ \c setLabelTextsFormDataRow() depending from whether your texts
+ are stored in a \c QStringList or in a data row.
+
+ \param axisLabelTextsDirty specifies whether the texts are
+ <b>actually</b> drawn at the axis labels are unknown.
+
+ \sa setAxisLabelStringLists, setLabelTextsFormDataRow, setAxisValues
+ */
+
+/**
+ \fn bool KDChartAxisParams::axisLabelTextsDirty() const
+ Returns whether the label texts that are <b>actually</b> drawn
+ at the axis labels are unknown. If \c false, they could
+ successfully be retrieved by \c axisLabelTexts().
+
+ \return whether the texts that are <b>actually</b> drawn at
+ the axis labels are unknown.
+
+ \sa setAxisLabelStringLists, setLabelTextsFormDataRow, setAxisValues
+ */
+
+
+/**
+ Sets a special text that is to be displayed _instead_of_
+ the first axis label IF the parameter is not a NULL string.
+
+ \note This function does not affect axis label and axis range
+ calculation but it replaces the first label after all calculation
+ is done. This may be used in case you want to replace the first
+ label by some special text string, e.g. you might want to display
+ the text "origo" instead of the start value.
+
+ To remove a first label string that was set by a previous call of this
+ function just call it again, with no parameter.
+
+ \param axisFirstLabelText specifies the text that is
+ <b>actually</b> drawn as the first label: a NULL string
+ ( as produced by QString() ) will be ignored, to suppress
+ the first label please specify an EMPTY but NOT NULL string
+ by passing "" as parameter.
+
+
+ \sa setAxisLastLabelText
+ \sa setAxisLabelStringLists, setLabelTextsFormDataRow, setAxisValues
+ */
+void KDChartAxisParams::setAxisFirstLabelText( const QString& axisFirstLabelText )
+{
+ _axisFirstLabelText = axisFirstLabelText;
+}
+
+/**
+ Sets a special text that is to be displayed _instead_of_
+ the last axis label IF the parameter is not a NULL string.
+
+ \note This function does not affect axis label and axis range
+ calculation but it replaces the last label after all calculation
+ is done. This may be used in case you want to replace the last
+ label by some special text string, e.g. you might want to display
+ the text "maximum" instead of the end value.
+
+ To remove a last label string that was set by a previous call of this
+ function just call it again, with no parameter.
+
+ \param axisFirstLabelText specifies the text that is
+ <b>actually</b> drawn as the last label: a NULL string
+ ( as produced by QString() ) will be ignored, to suppress
+ the first label please specify an EMPTY but NOT NULL string
+ by passing "" as parameter.
+
+ \sa setAxisFirstLabelText
+ \sa setAxisLabelStringLists, setLabelTextsFormDataRow, setAxisValues
+ */
+void KDChartAxisParams::setAxisLastLabelText( const QString& axisLastLabelText )
+{
+ _axisLastLabelText = axisLastLabelText;
+}
+
+
+
+/**
+ \fn void KDChartAxisParams::setAxisSteadyValueCalc( bool axisSteadyValueCalc )
+ Specifies whether label values shall be calculated based upon the
+ associated dataset values (normally this is true for ordinate axes)
+ or based upon some string list (as you might expect it for abscissa
+ labels).
+
+ \sa setAxisValues
+ */
+
+/**
+ \fn bool KDChartAxisParams::axisSteadyValueCalc() const
+ Returns whether label values shall be calculataed based upon the associated
+ dataset values (normally this is true for ordinate axes) or based upon some
+ string list (as you might expect it for abscissa labels).
+
+ \sa setAxisValues
+ */
+
+/**
+ \fn KDChartAxisParams::KDChartAxisParams( const KDChartAxisParams& R ) : QObject()
+ Copy-constructor: By calling the copy method,
+ see also the assignment operator.
+ */
+
+
+/**
+ Assignment operator: By calling the copy method,
+ see also the copy constructor.
+ */
+
+KDChartAxisParams& KDChartAxisParams::operator=( const KDChartAxisParams& R )
+{
+ if ( this != &R )
+ deepCopy( *this, R );
+ return *this;
+}
+
+void KDChartAxisParams::deepCopy( KDChartAxisParams& D, const KDChartAxisParams& R )
+{
+ D._axisType = R._axisType;
+ D._axisVisible = R._axisVisible;
+ D._axisAreaMode = R._axisAreaMode;
+ D._axisUseAvailableSpaceFrom = R._axisUseAvailableSpaceFrom;
+ D._axisUseAvailableSpaceTo = R._axisUseAvailableSpaceTo;
+ D._axisAreaMin = R._axisAreaMin;
+ D._axisAreaMax = R._axisAreaMax;
+ D._axisCalcMode = R._axisCalcMode;
+ D._axisIsoRefAxis = R._axisIsoRefAxis;
+ D._axisTrueAreaSize = R._axisTrueAreaSize;
+ D._axisTrueAreaRect = R._axisTrueAreaRect;
+ D._axisZeroLineStartX = R._axisZeroLineStartX;
+ D._axisZeroLineStartY = R._axisZeroLineStartY;
+ D._axisDtLowPosX = R._axisDtLowPosX;
+ D._axisDtLowPosY = R._axisDtLowPosY;
+ D._axisDtHighPosX = R._axisDtHighPosX;
+ D._axisDtHighPosY = R._axisDtHighPosY;
+ D._axisLineVisible = R._axisLineVisible;
+ D._axisLineWidth = R._axisLineWidth;
+ D._axisTrueLineWidth = R._axisTrueLineWidth;
+ D._axisLineColor = R._axisLineColor;
+ // main grid:
+ D._axisShowFractionalValuesDelimiters = R._axisShowFractionalValuesDelimiters;
+ D._axisShowGrid = R._axisShowGrid;
+ D._axisGridColor = R._axisGridColor;
+ D._axisGridLineWidth = R._axisGridLineWidth;
+ D._axisGridStyle = R._axisGridStyle;
+ // sub grid:
+ D._axisShowSubDelimiters = R._axisShowSubDelimiters;
+ D._axisGridSubColor = R._axisGridSubColor;
+ D._axisGridSubLineWidth = R._axisGridSubLineWidth;
+ D._axisGridSubStyle = R._axisGridSubStyle;
+
+ D._axisZeroLineColor = R._axisZeroLineColor;
+ D._axisLabelsVisible = R._axisLabelsVisible;
+ D._axisLabelsFont = R._axisLabelsFont;
+ D._axisLabelsFontUseRelSize = R._axisLabelsFontUseRelSize;
+ D._axisLabelsDontShrinkFont = R._axisLabelsDontShrinkFont;
+ D._axisLabelsDontAutoRotate = R._axisLabelsDontAutoRotate;
+ D._axisLabelsRotation = R._axisLabelsRotation;
+ D._axisLabelsFontRelSize = R._axisLabelsFontRelSize;
+ D._axisLabelsFontMinSize = R._axisLabelsFontMinSize;
+ D._axisLabelsColor = R._axisLabelsColor;
+
+ D._axisSteadyValueCalc = R._axisSteadyValueCalc;
+ D._axisValueStartIsExact = R._axisValueStartIsExact;
+ D._axisValueStart = R._axisValueStart;
+ D._axisValueEnd = R._axisValueEnd;
+ D._axisValueDelta = R._axisValueDelta;
+ D._axisValueDeltaScale = R._axisValueDeltaScale;
+ D._axisValueLeaveOut = R._axisValueLeaveOut;
+ D._axisValuesDecreasing = R._axisValuesDecreasing;
+ D._axisDigitsBehindComma = R._axisDigitsBehindComma;
+ D._axisLabelsDateTimeFormat = R._axisLabelsDateTimeFormat;
+ D._axisMaxEmptyInnerSpan = R._axisMaxEmptyInnerSpan;
+ D._takeLabelsFromDataRow = R._takeLabelsFromDataRow;
+ D._labelTextsDataRow = R._labelTextsDataRow;
+ D._axisLabelStringList = R._axisLabelStringList;
+ D._axisShortLabelsStringList = R._axisShortLabelsStringList;
+ D._axisLabelTextsDirty = R._axisLabelTextsDirty;
+
+ D._axisLabelsDivPow10 = R._axisLabelsDivPow10;
+ D._axisLabelsDecimalPoint = R._axisLabelsDecimalPoint;
+ D._axisLabelsNotation = R._axisLabelsNotation;
+ D._axisLabelsThousandsPoint= R._axisLabelsThousandsPoint;
+ D._axisLabelsPrefix = R._axisLabelsPrefix;
+ D._axisLabelsPostfix = R._axisLabelsPostfix;
+ D._axisLabelsTotalLen = R._axisLabelsTotalLen;
+ D._axisLabelsPadFill = R._axisLabelsPadFill;
+ D._axisLabelsBlockAlign = R._axisLabelsBlockAlign;
+
+ D._axisFirstLabelText = R._axisFirstLabelText;
+ D._axisLastLabelText = R._axisLastLabelText;
+
+ D._axisLabelTexts = R._axisLabelTexts;
+ D._trueAxisDeltaPixels = R._trueAxisDeltaPixels;
+ D._trueHigh = R._trueHigh;
+ D._trueLow = R._trueLow;
+ D._trueDelta = R._trueDelta;
+ D._trueDtLow = R._trueDtLow;
+ D._trueDtHigh = R._trueDtHigh;
+ D._trueDtDeltaScale = R._trueDtDeltaScale;
+}
+
+
+/**
+ Converts the specified axis type enum to a string representation.
+
+ \param type the axis type enum to convert
+ \return the string representation of the axis type enum
+ */
+QString KDChartAxisParams::axisTypeToString( AxisType type ) {
+ switch( type ) {
+ case AxisTypeUnknown:
+ return "Unknown";
+ case AxisTypeEAST:
+ return "East";
+ case AxisTypeNORTH:
+ return "North";
+ case AxisUP:
+ return "Up";
+ default: // should not happen
+ qDebug( "Unknown axis type" );
+ return "Unknown";
+ }
+}
+
+/**
+ Converts the specified string to an axis type enum value.
+
+ \param string the string to convert
+ \return the axis type enum value
+ */
+KDChartAxisParams::AxisType KDChartAxisParams::stringToAxisType( const QString& type ) {
+ if( type == "Unknown" )
+ return AxisTypeUnknown;
+ else if( type == "East" )
+ return AxisTypeEAST;
+ else if( type == "North" )
+ return AxisTypeNORTH;
+ else if( type == "Up" )
+ return AxisUP;
+ else // should not happen
+ return AxisTypeUnknown;
+}
+
+
+
+/**
+ \fn void KDChartAxisParams::changed()
+ \c Signals:
+ This signal is emitted when any of the chart axis
+ parameters have changed.
+ */
+
+/**
+ \var AxisType _axisType
+ \c private:
+
+ Specifies the axis type.
+
+ \sa setAxisType
+ */
+
+/**
+ \var bool _axisVisible
+ \c private:
+ Specifies whether this axis is to be drawn. False by default.
+
+ \sa setAxisVisible
+ */
+
+
+/**
+ \var bool _axisLabelsTouchEdges
+ \private:
+ Specifies whether the axis labels start and end at the
+ edges of the charts instead being positioned in the
+ middle of the first data point (or the last one, resp.)
+
+ \sa axisLabelsTouchEdges
+ */
+
+
+/**
+ \var AxisAreaMode _axisAreaMode
+ \private:
+ Specifies how to find out the size of the area to be
+ used by this axis.
+
+ \sa setAxisAreaMode, setAxisAreaMin, setAxisAreaMax, setAxisArea
+ */
+
+/**
+ \var int _axisUseAvailableSpaceFrom
+ \private:
+ Specifies the beginning offset of the space used by this axis
+ in comparison to the space that could be used by this axis.
+
+ \sa setAxisUseAvailableSpace
+ */
+
+/**
+ \var int _axisUseAvailableSpaceTo
+ \private:
+ Specifies the ending offset of the space used by this axis
+ in comparison to the space that could be used by this axis.
+
+ \sa setAxisUseAvailableSpace
+ */
+
+/**
+ \var int _axisAreaMin
+ Specifies the minimum axis area width (or height, resp.).
+ \sa setAxisAreaMin, setAxisAreaMode, setAxisAreaMax, setAxisArea
+ */
+
+/**
+ \var int _axisAreaMax
+ Specifies the maximum axis area width (or height, resp.).
+
+ \sa setAxisAreaMax, setAxisAreaMode, setAxisAreaMin, setAxisArea
+ */
+
+/**
+ \var AxisCalcMode _axisCalcMode
+ Specifies the axis calculation mode.
+
+ \sa setAxisCalcMode
+ */
+/**
+ \var uint _axisIsoRefAxis
+ Specifies which axis this axis shall be isometric with.
+
+ \sa setIsometricReferenceAxis
+ */
+
+/**
+ \var int _axisTrueAreaSize
+ Specifies the axis area width (or height, resp.)
+ as it was calculated and drawn.
+
+ \sa setAxisAreaMax, setAxisAreaMode, setAxisAreaMin, setAxisArea
+ */
+
+/**
+ \var QRect _axisTrueAreaRect
+ Specifies the true axis area rectangle
+ as it was calculated and drawn.
+
+ \sa setAxisAreaMax, setAxisAreaMin, setAxisArea
+ */
+
+/**
+ \var bool _axisShowSubDelimiters
+ Specifies whether the axis sub-delimiters will be drawn.
+
+ \sa setAxisShowSubDelimiters
+ */
+/**
+ \var bool _axisLineVisible
+ Specifies whether the axis line is visible or not.
+
+ \sa setAxisLineVisible
+ */
+
+/**
+ \var int _axisLineWidth
+ Specifies the axis line width.
+
+ \sa setAxisLineWidth
+ */
+/**
+ \var int _axisTrueLineWidth
+ Specifies the actual axis line width, as calculated and drawn.
+
+ \sa setAxisTrueLineWidth
+ */
+
+/**
+ \var QColor _axisLineColor
+ Specifies the axis line colour.
+
+ \sa setAxisLineColor
+ */
+
+/**
+ \var bool _axisShowGrid
+ Specifies whether a grid will be drawn at the chart data area.
+
+ \sa setAxisShowGrid
+ */
+
+/**
+ \var QColor _axisGridColor
+ Specifies the axis grid colour.
+
+ \sa setAxisGridColor, setAxisShowGrid
+ */
+
+
+/**
+ \var int _axisGridLineWidth
+ Specifies the width of the axis grid lines.
+
+ \sa setAxisGridLineWidth
+ */
+
+/**
+ \var QColor _axisGridSubColor
+ Specifies the axis grid sub colour.
+
+ \sa setAxisGridSubColor, setAxisShowGrid, setAxisShowSubDelimiters
+ */
+
+
+/**
+ \var int _axisGridSubLineWidth
+ Specifies the width of the axis grid sub lines.
+
+ \sa setAxisGridSubLineWidth, setAxisShowGrid, setAxisShowSubDelimiters
+ */
+
+/**
+ \var PenStyle _axisGridStyle
+ Specifies the axis grid line pattern for main grid lines.
+
+ \sa setAxisGridStyle, setAxisShowGrid
+ */
+
+/**
+ \var PenStyle _axisGridSubStyle
+ Specifies the axis grid line pattern for sub-delimiter grid lines.
+
+ \sa setAxisGridSubStyle, setAxisGridStyle, setAxisShowGrid
+ */
+
+/**
+ \var QColor _axisZeroLineColor
+ Specifies the zero-line colour.
+
+ \sa setAxisZeroLineColor
+ */
+
+/**
+ \var bool _axisLabelsVisible
+ Specifies whether the axis' labels are visible or not.
+
+ \sa setAxisLabelsVisible
+ */
+
+/**
+ \var QFont _axisLabelsFont
+ Specifies the axis labels font.
+
+ \sa setAxisLabelsFont
+ \sa setAxisLabelsFontUseRelSize, setAxisLabelsFontRelSize
+ */
+
+/**
+ \var bool _axisLabelsFontUseRelSize
+ Specifies whether the size of the label font is to be calculated
+ on a relative basis.
+
+ \sa setAxisLabelsFontUseRelSize, setAxisLabelsFontRelSize
+ \sa setAxisLabelsFont
+ */
+
+/**
+ \var int _axisLabelsFontRelSize
+ Specifies the per mille basis for calculating the relative
+ axis labels font size.
+
+ \sa setAxisLabelsFontRelSize, setAxisLabelsFontUseRelSize
+ \sa setAxisLabelsFont
+ */
+
+/**
+ \var QColor _axisLabelsColor
+ Specifies the axis labels color.
+
+ \sa setAxisLabelsColor
+ */
+
+/**
+ \var bool _axisSteadyValueCalc
+ Specifies whether label values shall be calculataed based upon the associated dataset values (normally this is true for ordinate axes) or based upon some string list (as you might expect it for abscissa labels).
+
+ \sa setAxisValues
+ */
+
+/**
+ \var KDChartData _axisValueStart;
+ Specifies the lower limit for the axis labels: the start value.
+
+ \sa setAxisValues
+ */
+
+/**
+ \var bool _axisValueStartIsExact;
+ Specifies whether the lower limit for the axis labels is
+ to be used the start value even if this might not look good.
+
+ \sa setAxisValueStartIsExact
+ */
+
+/**
+ \var KDChartData _axisValueEnd
+ Specifies the higher limit for the axis labels: the end value.
+
+ \sa setAxisValues
+ */
+
+/**
+ \var double _axisValueDelta
+ Stores the DELTA value for the axis labels: the distance
+ between two labels.
+
+ \sa setAxisValues
+ */
+
+/**
+ \var ValueScale _axisValueDeltaScale
+ Stores the scaling mode for axis labels: either just numbers
+ or a specified time scale (e.g. milliseconds or hours or months...)
+ */
+
+/**
+ \var int _axisValueLeaveOut
+ Stores how many axis labels are to be skipped after drawing one.
+ This is usefull in case you have lots of entries in one dataset.
+
+ \sa setAxisValues
+ */
+
+/**
+ \var bool _axisValuesDecreasing;
+ Stores whether the axis labels are printed in reverted order.
+
+ \sa setAxisValuesDecreasing
+ */
+
+/**
+ \var double _trueAxisDeltaPixels
+ Stores the <b>true</b> delimiter delta pixel value of the axis labels
+ as is was calculated and set by \c setTrueAxisDeltaPixels.
+
+ \sa setAxisValues
+ \sa trueAxisDeltaPixels
+ */
+
+/**
+ \var double _trueLow
+ Specifies the <b>true</b> start value of the axis labels
+ as is was calculated and set by \c setTrueAxisLowHighDelta.
+
+ \sa setAxisValues
+ \sa trueAxisLow, trueAxisHigh, trueAxisDelta
+ */
+
+/**
+ \var double _trueHigh
+ Specifies the <b>true</b> end value of the axis labels
+ as is was calculated and set by \c setTrueAxisLowHighDelta.
+
+ \sa setAxisValues
+ \sa trueAxisLow, trueAxisHigh, trueAxisDelta
+ */
+
+/**
+ \var double _trueDelta
+ Specifies the <b>true</b> delta value of the axis labels
+ as is was calculated and set by \c setTrueAxisLowHighDelta.
+
+ \sa setAxisValues
+ \sa trueAxisLow, trueAxisHigh, trueAxisDelta
+ */
+/**
+ \var double _axisZeroLineStartX
+ Specifies the not-rounded screen x-position where drawing of
+ this axis zero line started.
+ */
+
+/**
+ \var double _axisZeroLineStartY
+ Specifies the not-rounded screen y-position where drawing of
+ this axis zero line started.
+ */
+
+/**
+ \var int _axisDigitsBehindComma
+ Specifies the number of digits to be printed behind the comma
+ on the axis labels.
+
+ \sa setAxisValues
+ */
+
+/**
+ \var int _axisMaxEmptyInnerSpan
+ Specifies the percentage of the y-axis range that may to contain NO
+ data entries, if - and only if - axisValueStart (or axisValueEnd,
+ resp.) is set to KDCHART_AXIS_LABELS_AUTO_LIMIT.
+
+ \sa setAxisValues
+ */
+/**
+ \var LabelsFromDataRow _takeLabelsFromDataRow
+ Specifies whether the axis labels shall be taken directly
+ from the entries of a data row.
+
+ \sa setAxisValues
+ */
+
+
+/**
+ \var int _labelTextsDataRow
+ Specifies a data row which the axis labels shall be taken from.
+
+ \sa setAxisValues
+ */
+
+/**
+ \var QStringList _axisLabelStringList
+ Specifies a QStringList containing the label texts to be used.
+
+ \sa _axisShortLabelsStringList
+ \sa setAxisValues, _axisLabelTexts, _axisLabelTextsDirty
+ */
+
+
+/**
+ \var QStringList _axisShortLabelsStringList
+ Specifies a QStringList containing the label texts to be used
+ in case the axis area is not wide enough to show their full-size
+ counterparts.
+
+ \sa _axisLabelStringList
+ \sa setAxisValues, _axisLabelTexts, _axisLabelTextsDirty
+ */
+
+/**
+ \var QStringList _axisLabelTexts
+ Contains the label texts <b>actually</b> being used.
+
+ \sa setAxisValues, _axisLabelStringList, _axisLabelTextsDirty
+ */
+
+/**
+ \var bool _axisLabelTextsDirty
+ Specifies whether the QStringList _axisLabelTexts content is invalid.
+
+ \sa setAxisValues, _axisLabelTexts
+ */
diff --git a/libkdchart/KDChartAxisParams.h b/libkdchart/KDChartAxisParams.h
new file mode 100644
index 0000000..5817b37
--- /dev/null
+++ b/libkdchart/KDChartAxisParams.h
@@ -0,0 +1,515 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTAXISPARAMS_H__
+#define __KDCHARTAXISPARAMS_H__
+
+#include <qfont.h>
+#include <qcolor.h>
+#include <qmap.h>
+#include <qobject.h>
+#include <qtextstream.h>
+#include <qstringlist.h>
+#include <qdatetime.h>
+#include <qvariant.h>
+
+#include "KDChartGlobal.h"
+#include "KDChartEnums.h"
+
+class KDChartParams;
+
+/**
+ Use this to specify that the axis label limits
+ are to be calculated automatically.
+
+ \sa setAxisValues
+ */
+#define KDCHART_AXIS_LABELS_AUTO_LIMIT QVariant( 140319.64 )
+// If you edit the above, also edit KD Chart.cpp
+
+/**
+ Use this to specify that the step-width from one label
+ to the other shall be calculated automatically.
+
+ \sa setAxisValues
+ */
+#define KDCHART_AXIS_LABELS_AUTO_DELTA 140319.64
+
+/**
+ Use this to specify that an automatically computed amount of
+ axis labels are to be skipped if there is not enough space
+ for displaying all of them.
+ This is usefull in case you have lots of entries in one dataset.
+
+ \sa setAxisValues
+ */
+#define KDCHART_AXIS_LABELS_AUTO_LEAVEOUT 14364
+
+/**
+ Use this to specify that date/time format to be used for
+ displaying the axis labels is to be determined automatically.
+ */
+#define KDCHART_AXIS_LABELS_AUTO_DATETIME_FORMAT "AUTO"
+
+/**
+ Use this to specify that the number of digits to be shown
+ on the axis labels behind the comma is to be calculated
+ automatically.
+
+ \sa setAxisValues
+ */
+#define KDCHART_AXIS_LABELS_AUTO_DIGITS 14364
+
+/**
+ Use this to reset the grid colour to its default value
+ for re-doing changes made by calling \c setAxisGridColor().
+
+ \sa setAxisGridColor
+ */
+
+
+#define KDCHART_DEFAULT_AXIS_GRID_COLOR QColor( 0xA0, 0xA0, 0xA0 )
+
+/**
+ Use this to specify that the width of the axis grid lines
+ shall be equal to the width of the axis line.
+
+ \sa setAxisGridLineWidth
+ */
+#define KDCHART_AXIS_GRID_AUTO_LINEWIDTH 14364
+
+/**
+ Use this to specify that the zero-line shall NOT be omitted
+ in case all of the data are grouped far away from zero.
+
+ \sa setAxisValues
+ */
+#define KDCHART_AXIS_IGNORE_EMPTY_INNER_SPAN 1
+
+/**
+ Use this to prevent \c setAxisValues from changing the current
+ setting of _axisMaxEmptyInnerSpan.
+
+ \sa setAxisValues
+ */
+
+#define KDCHART_DONT_CHANGE_EMPTY_INNER_SPAN_NOW -2
+
+
+
+
+/** \file KDChartAxisParams.h
+ \brief Provide access to the chart axis parameters.
+
+ Use the KDChartAxisParams class to modify parameters of one axis each.
+ */
+
+class KDCHART_EXPORT KDChartAxisParams : public QObject
+{
+ Q_OBJECT
+ Q_ENUMS(AxisType)
+ Q_ENUMS(AxisPos)
+ Q_ENUMS(AxisAreaMode)
+ Q_ENUMS(AxisCalcMode)
+ Q_ENUMS(LabelsFromDataRow)
+ Q_ENUMS(ValueScale)
+
+ // Neede by QSA
+ Q_ENUMS( PenStyle )
+
+public:
+
+ enum AxisType { AxisTypeUnknown,
+ AxisTypeEAST,
+ AxisTypeNORTH,
+ AxisUP };
+
+public slots: // PENDING(blackie) Go through this file and reorder, so all slots are in one section
+ void setAxisType( AxisType axisType );
+
+
+ AxisType axisType() const { return _axisType; }
+ static QString axisTypeToString( AxisType type );
+ static AxisType stringToAxisType( const QString& type );
+
+public:
+
+ // Attention: In case you extent AxisPos, make sure to also
+ // increase MAX_AXES and AxisPosEND.
+ enum AxisPos { AxisPosSTART = 0,
+
+ AxisPosBottom = 0,
+ AxisPosSagittal = 0, // <-- for POLAR charts
+ AxisPosSaggital = 0, // <-- wrong spelling kept for backward compatibility
+ AxisPosLeft = 1,
+ AxisPosCircular = 1, // <-- for POLAR charts
+ AxisPosLowerRightEdge = 2,
+
+ AxisPosTop = 3,
+ AxisPosRight = 4,
+ AxisPosLowerLeftEdge = 5,
+
+ // diese Markierung muss jeweils mitgepflegt werden,
+ // wenn AxisPos erweitert werden sollte.
+ AxisPosAdditionalsSTART = 6,
+
+ AxisPosBottom2 = 6,
+ AxisPosLeft2 = 7,
+ AxisPosLowerRightEdge2 = 8,
+
+ AxisPosTop2 = 9,
+ AxisPosRight2 = 10,
+ AxisPosLowerLeftEdge2 = 11,
+ // auch diese Markierung muss jeweils mitgepflegt werden,
+ // wenn AxisPos erweitert werden sollte.
+ AxisPosEND = 11 };
+
+public slots:
+ static AxisPos basicAxisPos( uint pos );
+ void setAxisVisible( bool axisVisible );
+ bool axisVisible() const;
+
+public:
+ enum AxisAreaMode { AxisAreaModeFixedSize,
+ AxisAreaModeAutoSize,
+ AxisAreaModeMinMaxSize };
+
+public slots:
+ void setAxisAreaMode( AxisAreaMode axisAreaMode );
+ AxisAreaMode axisAreaMode() const;
+ static QString axisAreaModeToString( AxisAreaMode mode );
+ static AxisAreaMode stringToAxisAreaMode( const QString& type );
+ void setAxisAreaMin( int axisAreaMin );
+
+ //Returns the axis area minimum width (or height, resp.).
+ int axisAreaMin() const { return _axisAreaMin; }
+ void setAxisUseAvailableSpace( int axisUseAvailableSpaceFrom,
+ int axisUseAvailableSpaceTo );
+ int axisUseAvailableSpaceFrom() const { return _axisUseAvailableSpaceFrom; }
+ int axisUseAvailableSpaceTo() const { return _axisUseAvailableSpaceTo; }
+ void setAxisAreaMax( int axisAreaMax );
+ int axisAreaMax() const { return _axisAreaMax; }
+ void setAxisArea( AxisAreaMode axisAreaMode,
+ int axisAreaMin,
+ int axisAreaMax );
+
+public:
+ enum AxisCalcMode { AxisCalcLinear, AxisCalcLogarithmic };
+
+public slots:
+ void setAxisCalcMode( AxisCalcMode axisCalcMode );
+ AxisCalcMode axisCalcMode() const { return _axisCalcMode; }
+ static QString axisCalcModeToString( AxisCalcMode mode );
+ static AxisCalcMode stringToAxisCalcMode( const QString& type );
+ void setIsometricReferenceAxis( uint isoRefAxis );
+ uint isometricReferenceAxis() const { return _axisIsoRefAxis; }
+ void setAxisTrueAreaSize( int axisTrueAreaSize ) { _axisTrueAreaSize = axisTrueAreaSize; }
+ int axisTrueAreaSize() const { return _axisTrueAreaSize; }
+ void setAxisTrueAreaRect( const QRect& axisTrueAreaRect ) { _axisTrueAreaRect = axisTrueAreaRect; }
+ QRect axisTrueAreaRect() const { return _axisTrueAreaRect; }
+ void setAxisLineVisible( bool axisLineVisible );
+ bool axisLineVisible() const { return _axisLineVisible; }
+ void setAxisLineWidth( int axisLineWidth );
+ int axisLineWidth() const { return _axisLineWidth; }
+ void setAxisTrueLineWidth( int axisTrueLineWidth ) { _axisTrueLineWidth = axisTrueLineWidth; }
+ int axisTrueLineWidth() const { return _axisTrueLineWidth; }
+ void setAxisLineColor( QColor axisLineColor );
+ QColor axisLineColor() const { return _axisLineColor; }
+ // main grid:
+ void setAxisShowFractionalValuesDelimiters( bool axisShowFractValDelim );
+ bool axisShowFractionalValuesDelimiters() const { return _axisShowFractionalValuesDelimiters; }
+ void setAxisShowGrid( bool axisShowGrid );
+ bool axisShowGrid() const { return _axisShowGrid; }
+ void setAxisGridStyle( PenStyle axisGridStyle );
+ PenStyle axisGridStyle() const { return _axisGridStyle; }
+ void setAxisGridColor( QColor axisGridColor );
+ QColor axisGridColor() const { return _axisGridColor; }
+ void setAxisGridLineWidth( int axisGridLineWidth );
+ int axisGridLineWidth() const { return _axisGridLineWidth; }
+ // sub grid:
+ void setAxisShowSubDelimiters( bool axisShowSubDelimiters );
+ bool axisShowSubDelimiters() const { return _axisShowSubDelimiters; }
+ void setAxisGridSubStyle( PenStyle axisGridSubStyle );
+ PenStyle axisGridSubStyle() const { return _axisGridSubStyle; }
+ void setAxisGridSubColor( QColor axisGridSubColor );
+ QColor axisGridSubColor() const { return _axisGridSubColor; }
+ void setAxisGridSubLineWidth( int axisGridSubLineWidth );
+ int axisGridSubLineWidth() const { return _axisGridSubLineWidth; }
+
+ void setAxisZeroLineColor( QColor axisZeroLineColor );
+ QColor axisZeroLineColor() const { return _axisZeroLineColor; }
+
+ void setAxisLabelsVisible( bool axisLabelsVisible );
+ bool axisLabelsVisible() const { return _axisLabelsVisible; }
+ void setAxisLabelsTouchEdges( bool axisLabelsTouchEdges );
+ bool axisLabelsTouchEdges() const { return _axisLabelsTouchEdges; }
+ void setAxisLabelsFont( QFont axisLabelsFont, bool useFontSize );
+ QFont axisLabelsFont() const { return _axisLabelsFont; }
+ void setAxisLabelsFontUseRelSize( bool axisLabelsFontUseRelSize );
+ bool axisLabelsFontUseRelSize() const { return _axisLabelsFontUseRelSize; }
+ void setAxisLabelsFontRelSize( int axisLabelsFontRelSize );
+ int axisLabelsFontRelSize() const { return _axisLabelsFontRelSize; }
+ void setAxisLabelsFontMinSize( int axisLabelsFontMinSize ) { _axisLabelsFontMinSize = axisLabelsFontMinSize; }
+ int axisLabelsFontMinSize() const { return _axisLabelsFontMinSize; }
+ void setAxisLabelsDontShrinkFont( bool labelsDontShrinkFont ) { _axisLabelsDontShrinkFont = labelsDontShrinkFont; }
+ bool axisLabelsDontShrinkFont() const { return _axisLabelsDontShrinkFont; }
+ void setAxisLabelsDontAutoRotate( bool labelsDontAutoRotate ) { _axisLabelsDontAutoRotate = labelsDontAutoRotate; }
+ bool axisLabelsDontAutoRotate() const { return _axisLabelsDontAutoRotate; }
+ void setAxisLabelsRotation( int rotation ) { _axisLabelsRotation = rotation; }
+ int axisLabelsRotation() const { return _axisLabelsRotation; }
+ void setAxisLabelsColor( QColor axisLabelsColor );
+ QColor axisLabelsColor() const { return _axisLabelsColor; }
+
+ void setAxisLabelsCalc( int divPow10 = 0,
+ int digitsBehindComma = KDCHART_AXIS_LABELS_AUTO_DIGITS );
+ int axisLabelsDivPow10() const { return _axisLabelsDivPow10; }
+ int axisLabelsDigitsBehindComma() const { return _axisDigitsBehindComma; }
+ void setAxisLabelsRadix( const QString& decimalPoint,
+ const QString& thousandsPoint );
+ QString axisLabelsDecimalPoint() const { return _axisLabelsDecimalPoint; }
+ QString axisLabelsThousandsPoint() const { return _axisLabelsThousandsPoint; }
+
+ void setAxisLabelsNotation( KDChartEnums::NumberNotation notation );
+ KDChartEnums::NumberNotation axisLabelsNotation() const { return _axisLabelsNotation; }
+
+ void setAxisLabelsFormat( const QString& prefix = "",
+ const QString& postfix = "",
+ const int& totalLen = 0,
+ const QChar& padFill = ' ',
+ const bool& blockAlign = true );
+ QString axisLabelsPrefix() const { return _axisLabelsPrefix; }
+ QString axisLabelsPostfix() const { return _axisLabelsPostfix; }
+ int axisLabelsTotalLen() const { return _axisLabelsTotalLen; }
+ QChar axisLabelsPadFill() const { return _axisLabelsPadFill; }
+ bool axisLabelsBlockAlign() const { return _axisLabelsBlockAlign; }
+
+public:
+ enum LabelsFromDataRow { LabelsFromDataRowYes,
+ LabelsFromDataRowNo,
+ LabelsFromDataRowGuess };
+
+public slots:
+ static QString labelsFromDataRowToString( LabelsFromDataRow mode );
+ static LabelsFromDataRow stringToLabelsFromDataRow( const QString& type );
+
+public:
+ enum ValueScale { ValueScaleNumerical = 0, // have gaps here to allow specifying of additional scaling steps in between
+ ValueScaleSecond = 20,
+ ValueScaleMinute = 30,
+ ValueScaleHour = 40,
+ ValueScaleDay = 50,
+ ValueScaleWeek = 60,
+ ValueScaleMonth = 70,
+ ValueScaleQuarter = 80,
+ ValueScaleYear = 90 };
+
+public slots:
+ void setAxisValues( bool axisSteadyValueCalc = true,
+ const QVariant& axisValueStart = KDCHART_AXIS_LABELS_AUTO_LIMIT,
+ const QVariant& axisValueEnd = KDCHART_AXIS_LABELS_AUTO_LIMIT,
+ double axisValueDelta = KDCHART_AXIS_LABELS_AUTO_DELTA,
+ int axisDigitsBehindComma = KDCHART_AXIS_LABELS_AUTO_DIGITS,
+ int axisMaxEmptyInnerSpan = KDCHART_DONT_CHANGE_EMPTY_INNER_SPAN_NOW,
+ LabelsFromDataRow takeLabelsFromDataRow = LabelsFromDataRowNo,
+ int labelTextsDataRow = 0,
+ QStringList* axisLabelStringList = 0,
+ QStringList* axisShortLabelsStringList = 0,
+ int axisValueLeaveOut = KDCHART_AXIS_LABELS_AUTO_LEAVEOUT,
+ ValueScale axisValueDeltaScale = ValueScaleNumerical );
+
+
+ void setAxisValueStartIsExact( bool isExactValue=true ) { _axisValueStartIsExact = isExactValue; }
+ bool axisValueStartIsExact() const { return _axisValueStartIsExact; }
+ void setAxisValueStart( const QVariant& axisValueStart ) { _axisValueStart = axisValueStart; }
+ QVariant axisValueStart() const { return _axisValueStart; }
+ void setAxisValueEnd( const QVariant& axisValueEnd ) {_axisValueEnd = axisValueEnd; }
+ QVariant axisValueEnd() const { return _axisValueEnd; }
+ void setAxisValueDelta( const double axisValueDelta,
+ ValueScale scale = ValueScaleNumerical );
+ double axisValueDelta() const { return _axisValueDelta; }
+ ValueScale axisValueDeltaScale() const { return _axisValueDeltaScale; }
+ void setAxisValueLeaveOut( const int leaveOut ) { _axisValueLeaveOut = leaveOut; }
+ int axisValueLeaveOut() const { return _axisValueLeaveOut; }
+ void setAxisValuesDecreasing( bool valuesDecreasing = true )
+ {
+ _axisValuesDecreasing = valuesDecreasing;
+ }
+ bool axisValuesDecreasing() const { return _axisValuesDecreasing; }
+ void setTrueAxisDeltaPixels( double nDeltaPixels ) { _trueAxisDeltaPixels = nDeltaPixels; }
+ double trueAxisDeltaPixels() const { return _trueAxisDeltaPixels; }
+ void setTrueAxisLowHighDelta( double nLow, double nHigh, double nDelta );
+ double trueAxisLow() const { return _trueLow; }
+ double trueAxisHigh() const { return _trueHigh; }
+ double trueAxisDelta() const { return _trueDelta; }
+ void setTrueAxisDtLowHighDeltaScale( QDateTime dtLow, QDateTime dtHigh,
+ ValueScale dtDeltaScale );
+ void setTrueAxisDtLow( QDateTime dtLow ) { _trueDtLow = dtLow; }
+ void setTrueAxisDtHigh( QDateTime dtHigh ) { _trueDtHigh = dtHigh; }
+ void setTrueAxisDtScale( ValueScale scale ) { _trueDtDeltaScale = scale; }
+ QDateTime trueAxisDtLow() const { return _trueDtLow; }
+ QDateTime trueAxisDtHigh() const { return _trueDtHigh; }
+ ValueScale trueAxisDtDeltaScale() const { return _trueDtDeltaScale; }
+ void setAxisZeroLineStart( double x, double y );
+ double axisZeroLineStartX() const { return _axisZeroLineStartX; }
+ double axisZeroLineStartY() const { return _axisZeroLineStartY; }
+ void setAxisDtLowPos( double x, double y );
+ double axisDtLowPosX() const { return _axisDtLowPosX; }
+ double axisDtLowPosY() const { return _axisDtLowPosY; }
+ void setAxisDtHighPos( double x, double y );
+ double axisDtHighPosX() const { return _axisDtHighPosX; }
+ double axisDtHighPosY() const { return _axisDtHighPosY; }
+ void setAxisDigitsBehindComma( const int digits ) { _axisDigitsBehindComma = digits; }
+ int axisDigitsBehindComma() const { return _axisDigitsBehindComma; }
+ void setAxisLabelsDateTimeFormat( const QString& format ) { _axisLabelsDateTimeFormat = format; }
+ QString axisLabelsDateTimeFormat() const { return _axisLabelsDateTimeFormat; }
+ void setAxisMaxEmptyInnerSpan( const int maxEmpty ) { _axisMaxEmptyInnerSpan = maxEmpty; }
+ int axisMaxEmptyInnerSpan() const { return _axisMaxEmptyInnerSpan; }
+ void setLabelTextsFormDataRow( int row, LabelsFromDataRow mode );
+ LabelsFromDataRow axisLabelTextsFormDataRow() const { return _takeLabelsFromDataRow; }
+ int labelTextsDataRow() const { return _labelTextsDataRow; }
+ void setAxisLabelStringLists( QStringList* axisLabelStringList,
+ QStringList* axisShortLabelStringList,
+ const QString& valueStart = QString::null,
+ const QString& valueEnd = QString::null );
+ QStringList axisLabelStringList() const { return _axisLabelStringList; }
+ uint axisLabelStringCount() const { return _axisLabelStringList.count(); }
+ QStringList axisShortLabelsStringList() const { return _axisShortLabelsStringList; }
+ uint axisShortLabelsStringCount() const { return _axisShortLabelsStringList.count(); }
+ const QStringList* axisLabelTexts() const { return _axisLabelTextsDirty ? 0 : &_axisLabelTexts; }
+ void setAxisLabelTexts( const QStringList* axisLabelTexts );
+ void setAxisLabelTextsDirty( bool axisLabelTextsDirty ) { _axisLabelTextsDirty = axisLabelTextsDirty; }
+ bool axisLabelTextsDirty() const { return _axisLabelTextsDirty; }
+ void setAxisFirstLabelText( const QString& axisFirstLabelText = QString() );
+ void setAxisLastLabelText( const QString& axisLastLabelText = QString() );
+ QString axisFirstLabelText() const { return _axisFirstLabelText; }
+ QString axisLastLabelText() const { return _axisLastLabelText; }
+ bool hasAxisFirstLabelText() const { return !_axisFirstLabelText.isNull(); }
+ bool hasAxisLastLabelText() const { return !_axisLastLabelText.isNull(); }
+ void setAxisSteadyValueCalc( bool axisSteadyValueCalc ) { _axisSteadyValueCalc = axisSteadyValueCalc; }
+ bool axisSteadyValueCalc() const { return _axisSteadyValueCalc; }
+
+public:
+ KDChartAxisParams();
+ virtual ~KDChartAxisParams();
+ KDChartAxisParams& operator=( const KDChartAxisParams& R );
+ static void deepCopy( KDChartAxisParams& D, const KDChartAxisParams& R );
+ friend QTextStream& operator<<( QTextStream& s, const KDChartParams& p );
+ friend QTextStream& operator>>( QTextStream& s, KDChartParams& p );
+ friend class KDChartParams;
+
+signals:
+
+ // emitted when any of the chart axis parameters have changed.
+ void changed();
+
+private:
+
+ AxisType _axisType;
+ bool _axisVisible;
+ bool _axisLabelsTouchEdges;
+ AxisAreaMode _axisAreaMode;
+ int _axisUseAvailableSpaceFrom;
+ int _axisUseAvailableSpaceTo;
+ int _axisAreaMin;
+ int _axisAreaMax;
+ AxisCalcMode _axisCalcMode;
+ uint _axisIsoRefAxis;
+ int _axisTrueAreaSize;
+ QRect _axisTrueAreaRect;
+ bool _axisLineVisible;
+ int _axisLineWidth;
+ int _axisTrueLineWidth;
+ QColor _axisLineColor;
+
+ bool _axisShowFractionalValuesDelimiters;
+ bool _axisShowGrid;
+ QColor _axisGridColor;
+ int _axisGridLineWidth;
+ PenStyle _axisGridStyle;
+
+ bool _axisShowSubDelimiters;
+ QColor _axisGridSubColor;
+ int _axisGridSubLineWidth;
+ PenStyle _axisGridSubStyle;
+
+ QColor _axisZeroLineColor;
+ bool _axisLabelsVisible;
+ QFont _axisLabelsFont;
+ bool _axisLabelsFontUseRelSize;
+ int _axisLabelsFontRelSize;
+ int _axisLabelsFontMinSize;
+ bool _axisLabelsDontShrinkFont;
+ bool _axisLabelsDontAutoRotate;
+ int _axisLabelsRotation;
+ QColor _axisLabelsColor;
+
+ bool _axisSteadyValueCalc;
+ bool _axisValueStartIsExact;
+ QVariant _axisValueStart;
+ QVariant _axisValueEnd;
+ double _axisValueDelta;
+ ValueScale _axisValueDeltaScale;
+ int _axisValueLeaveOut;
+ bool _axisValuesDecreasing;
+ double _trueAxisDeltaPixels;
+ double _trueLow;
+ double _trueHigh;
+ double _trueDelta;
+ QDateTime _trueDtLow;
+ QDateTime _trueDtHigh;
+ ValueScale _trueDtDeltaScale;
+ double _axisZeroLineStartX;
+ double _axisZeroLineStartY;
+ double _axisDtLowPosX;
+ double _axisDtLowPosY;
+ double _axisDtHighPosX;
+ double _axisDtHighPosY;
+ int _axisDigitsBehindComma;
+ QString _axisLabelsDateTimeFormat;
+ int _axisMaxEmptyInnerSpan;
+ LabelsFromDataRow _takeLabelsFromDataRow;
+ int _labelTextsDataRow;
+ QStringList _axisLabelStringList;
+ QStringList _axisShortLabelsStringList;
+ QStringList _axisLabelTexts;
+ bool _axisLabelTextsDirty;
+ QString _axisFirstLabelText;
+ QString _axisLastLabelText;
+
+ int _axisLabelsDivPow10;
+ QString _axisLabelsDecimalPoint;
+ QString _axisLabelsThousandsPoint;
+ KDChartEnums::NumberNotation _axisLabelsNotation;
+ QString _axisLabelsPrefix;
+ QString _axisLabelsPostfix;
+ int _axisLabelsTotalLen;
+ QChar _axisLabelsPadFill;
+ bool _axisLabelsBlockAlign;
+};
+
+#endif
diff --git a/libkdchart/KDChartAxisParamsWrapper.cpp b/libkdchart/KDChartAxisParamsWrapper.cpp
new file mode 100644
index 0000000..5250a71
--- /dev/null
+++ b/libkdchart/KDChartAxisParamsWrapper.cpp
@@ -0,0 +1,73 @@
+#include "KDChartAxisParamsWrapper.h"
+#include <KDChartAxisParams.h>
+
+KDChartAxisParamsWrapper::KDChartAxisParamsWrapper( KDChartAxisParams* data ) :QObject(0), _data(data)
+{
+}
+
+void KDChartAxisParamsWrapper::setAxisValueStart( double axisValueStart )
+{
+ _data->setAxisValueStart( axisValueStart );
+}
+
+void KDChartAxisParamsWrapper::setAxisValueEnd( double axisValueEnd )
+{
+ _data->setAxisValueEnd( axisValueEnd);
+}
+
+void KDChartAxisParamsWrapper::setAxisValueStart( const QVariant axisValueStart )
+{
+ _data->setAxisValueStart( axisValueStart );
+}
+
+void KDChartAxisParamsWrapper::setAxisValueEnd( const QVariant axisValueEnd )
+{
+ _data->setAxisValueEnd( axisValueEnd );
+}
+
+void KDChartAxisParamsWrapper::setAxisValues( bool axisSteadyValueCalc,
+ QVariant axisValueStart,
+ QVariant axisValueEnd,
+ double axisValueDelta,
+ int axisDigitsBehindComma,
+ int axisMaxEmptyInnerSpan,
+ int takeLabelsFromDataRow,
+ int labelTextsDataRow,
+ const QVariant& axisLabelStringList,
+ const QVariant& axisShortLabelsStringList,
+ int axisValueLeaveOut,
+ int axisValueDeltaScale )
+{
+ QStringList l1 = axisLabelStringList.toStringList();
+ QStringList l2 = axisShortLabelsStringList.toStringList();
+ _data->setAxisValues( axisSteadyValueCalc,
+ axisValueStart,
+ axisValueEnd,
+ axisValueDelta,
+ axisDigitsBehindComma,
+ axisMaxEmptyInnerSpan,
+ (KDChartAxisParams::LabelsFromDataRow) takeLabelsFromDataRow,
+ labelTextsDataRow,
+ &l1,
+ &l2,
+ axisValueLeaveOut,
+ (KDChartAxisParams::ValueScale) axisValueDeltaScale );
+}
+
+void KDChartAxisParamsWrapper::setAxisLabelStringLists( const QVariant& axisLabelStringList,
+ const QVariant& axisShortLabelStringList,
+ const QString& valueStart,
+ const QString& valueEnd )
+{
+ QStringList l1 = axisLabelStringList.toStringList();
+ QStringList l2 = axisShortLabelStringList.toStringList();
+ _data->setAxisLabelStringLists( &l1, &l2, valueStart, valueEnd );
+}
+
+void KDChartAxisParamsWrapper::setAxisLabelTexts( const QVariant& axisLabelTexts )
+{
+ QStringList l = axisLabelTexts.toStringList();
+ _data->setAxisLabelTexts( &l );
+}
+
+#include "KDChartAxisParamsWrapper.moc"
diff --git a/libkdchart/KDChartAxisParamsWrapper.h b/libkdchart/KDChartAxisParamsWrapper.h
new file mode 100644
index 0000000..de8dbcc
--- /dev/null
+++ b/libkdchart/KDChartAxisParamsWrapper.h
@@ -0,0 +1,50 @@
+#ifndef KDCHARTAXISPARAMSWRAPPER_H
+#define KDCHARTAXISPARAMSWRAPPER_H
+#include <qobject.h>
+#include <KDChartEnums.h>
+#include <KDChartAxisParams.h>
+#include <qstringlist.h>
+#include <qvariant.h>
+class KDChartAxisParams;
+
+class KDChartAxisParamsWrapper :public QObject
+{
+ Q_OBJECT
+
+public:
+ KDChartAxisParamsWrapper( KDChartAxisParams* );
+
+public slots:
+ // These overload are only for convenience.
+ void setAxisValueStart( double axisValueStart );
+ void setAxisValueEnd( double axisValueEnd );
+ void setAxisValueStart( const QVariant axisValueStart );
+ void setAxisValueEnd( const QVariant axisValueEnd );
+
+public slots:
+ void setAxisValues( bool axisSteadyValueCalc = true,
+ QVariant axisValueStart = KDCHART_AXIS_LABELS_AUTO_LIMIT,
+ QVariant axisValueEnd = KDCHART_AXIS_LABELS_AUTO_LIMIT,
+ double axisValueDelta = KDCHART_AXIS_LABELS_AUTO_DELTA,
+ int axisDigitsBehindComma = KDCHART_AXIS_LABELS_AUTO_DIGITS,
+ int axisMaxEmptyInnerSpan = KDCHART_DONT_CHANGE_EMPTY_INNER_SPAN_NOW,
+ int takeLabelsFromDataRow = KDChartAxisParams::LabelsFromDataRowNo,
+ int labelTextsDataRow = 0,
+ const QVariant& axisLabelStringList = QVariant( QStringList() ),
+ const QVariant& axisShortLabelsStringList = QVariant( QStringList() ),
+ int axisValueLeaveOut = KDCHART_AXIS_LABELS_AUTO_LEAVEOUT,
+ int axisValueDeltaScale = KDChartAxisParams::ValueScaleNumerical );
+
+ void setAxisLabelStringLists( const QVariant& axisLabelStringList,
+ const QVariant& axisShortLabelStringList,
+ const QString& valueStart = QString::null,
+ const QString& valueEnd = QString::null );
+
+ void setAxisLabelTexts( const QVariant& axisLabelTexts );
+private:
+ KDChartAxisParams* _data;
+};
+
+
+#endif /* KDCHARTAXISPARAMSWRAPPER_H */
+
diff --git a/libkdchart/KDChartBWPainter.cpp b/libkdchart/KDChartBWPainter.cpp
new file mode 100644
index 0000000..96bd2bc
--- /dev/null
+++ b/libkdchart/KDChartBWPainter.cpp
@@ -0,0 +1,483 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#include "KDChartBWPainter.h"
+#include <KDChartParams.h>
+#include "KDChartTextPiece.h"
+
+#include <qpainter.h>
+#if COMPAT_QT_VERSION >= 0x030000
+#include <qmemarray.h>
+#else
+#include <qarray.h>
+#define QMemArray QArray
+#endif
+
+#include <stdlib.h>
+
+/**
+ \class KDChartBWPainter KDChartBWPainter.h
+
+ \brief A chart painter implementation that can paint Box&Whisker charts.
+ */
+
+/**
+ Constructor. Sets up internal data structures as necessary.
+
+ \param params the KDChartParams structure that defines the chart
+ */
+ KDChartBWPainter::KDChartBWPainter( KDChartParams* params ) :
+KDChartAxesPainter( params )
+{
+ // This constructor intentionally left blank so far; we cannot setup the
+ // geometry yet since we do not know the size of the painter.
+}
+
+
+/**
+ Destructor.
+ */
+KDChartBWPainter::~KDChartBWPainter()
+{
+ // intentionally left blank
+}
+
+
+void quicksort( QMemArray<double>& a, int lo, int hi )
+{
+ int i=lo, j=hi;
+ double h;
+ double x=a[(lo+hi)/2];
+ do
+ {
+ while (a[i]<x) i++;
+ while (a[j]>x) j--;
+ if (i<=j)
+ {
+ h=a[i]; a[i]=a[j]; a[j]=h;
+ i++; j--;
+ }
+ } while (i<=j);
+ if (lo<j) quicksort(a, lo, j);
+ if (i<hi) quicksort(a, i, hi);
+}
+
+
+// The following function returns the number of used cells containing a double.
+int KDChartBWPainter::calculateStats( KDChartTableDataBase& data,
+ uint dataset )
+{
+ const uint nMax = data.usedCols();
+ int nUsed = 0;
+ QMemArray<double> values( nMax );
+ double sum = 0.0;
+ QVariant vVal;
+ if( data.sorted() ){
+ for( uint i=0; i<nMax; ++i){
+ if( data.cellCoord( dataset, i, vVal, 1 ) &&
+ QVariant::Double == vVal.type() ) {
+ values[nUsed] = vVal.toDouble();
+ sum += values[nUsed];
+ ++nUsed;
+ }
+ }
+ }else{
+ // make copy of the dataset and look if it is sorted
+ bool sorted = true;
+ double last = 0.0; // <-- avoids an annoying compile-time warning
+ for( uint i=0; i<nMax; ++i){
+ if( data.cellCoord( dataset, i, vVal, 1 ) &&
+ QVariant::Double == vVal.type() ) {
+ values[nUsed] = vVal.toDouble();
+ if( nUsed // skip 1st value
+ && last > values[nUsed] )
+ sorted = false;
+ last = values[nUsed];
+ sum += last;
+ ++nUsed;
+ }
+ }
+ if( !sorted ){
+ // sort our copy of the dataset
+ quicksort( values, 0, nUsed-1 );
+ }
+ }
+
+ // Values now contains all used values without empty gaps.
+ // nUsed contains their number, so values[nUsed-1] is the last value.
+
+ if( nUsed ){
+ // store some values
+ stats[ KDChartParams::MaxValue ] = values[nUsed-1];
+ stats[ KDChartParams::MinValue ] = values[0];
+
+ stats[ KDChartParams::MeanValue ] = sum / nUsed;
+ // calculate statistics
+ bool bOdd = 1 == nUsed % 2;
+ // find median
+ int nUd2 = nUsed/2;
+ if( bOdd )
+ stats[ KDChartParams::Median ] = values[ nUd2 ];
+ else
+ stats[ KDChartParams::Median ] =
+ (values[ QMAX(nUd2-1, 0) ] + values[ nUd2 ]) /2;
+ // find last value of lower quartile
+ nLastQ1 = QMAX( nUd2-1, 0 );
+ // find 1st value of lower quartile
+ nFirstQ1 = nLastQ1 / 2;
+
+ // determine how many values are below the median ( == how many are above it)
+ int nLowerCount = nLastQ1 - nFirstQ1 + 1;
+
+ // find 1st value of upper quartile
+ nFirstQ3 = bOdd ? QMIN( nUd2+1, nUsed-1 ) : nUd2;
+ // find last value of upper quartile
+ nLastQ3 = nFirstQ3 + nLowerCount - 1;
+
+ // find quartiles
+ bool bOdd2 = 1 == nLowerCount % 2;
+ // find lower quartile
+ if( bOdd2 )
+ stats[ KDChartParams::Quartile1 ] = values[ nFirstQ1 ];
+ else
+ stats[ KDChartParams::Quartile1 ] =
+ (values[ QMAX(nFirstQ1-1, 0) ] + values[ nFirstQ1 ]) /2;
+ // find upper quartile
+ if( bOdd2 ){
+ stats[ KDChartParams::Quartile3 ] = values[ nLastQ3 ];
+}
+ else{
+ //qDebug(" "+QString::number(nLastQ3)+" "+QString::number(KDChartParams::Quartile3)
+ // +" "+QString::number(nUsed)+" "+QString::number(QMIN(nLastQ3+1, nUsed-1)));
+ stats[ KDChartParams::Quartile3 ] =
+ (values[ nLastQ3 ] + values[ QMIN(nLastQ3+1, nUsed-1) ]) /2;
+}
+ // find the interquartile range (IQR)
+ double iqr = stats[ KDChartParams::Quartile3 ] - stats[ KDChartParams::Quartile1 ];
+
+ // calculate the fences
+ double upperInner, lowerInner, upperOuter, lowerOuter;
+ params()->bWChartFences( upperInner, lowerInner,
+ upperOuter, lowerOuter );
+ stats[ KDChartParams::UpperInnerFence ] =
+ stats[ KDChartParams::Quartile3 ] + iqr * upperInner;
+ stats[ KDChartParams::LowerInnerFence ] =
+ stats[ KDChartParams::Quartile1 ] - iqr * lowerInner;
+ stats[ KDChartParams::UpperOuterFence ] =
+ stats[ KDChartParams::Quartile3 ] + iqr * upperOuter;
+ stats[ KDChartParams::LowerOuterFence ] =
+ stats[ KDChartParams::Quartile1 ] - iqr * lowerOuter;
+ }
+ return nUsed;
+}
+
+
+/**
+ This method is a specialization that returns a fallback legend text
+ appropriate for BW that do not have the same notion of a dataset like
+ e.g. bars.
+
+ This method is only used when automatic legends are used, because
+ manual and first-column legends do not need fallback texts.
+
+ \param uint dataset the dataset number for which to generate a
+ fallback text
+ \return the fallback text to use for describing the specified
+ dataset in the legend
+ */
+QString KDChartBWPainter::fallbackLegendText( uint dataset ) const
+{
+ return QObject::tr( "Series " ) + QString::number( dataset + 1 );
+}
+
+
+/**
+ This methods returns the number of elements to be shown in the
+ legend in case fallback texts are used.
+
+ This method is only used when automatic legends are used, because
+ manual and first-column legends do not need fallback texts.
+
+ \return the number of fallback texts to use
+ */
+uint KDChartBWPainter::numLegendFallbackTexts( KDChartTableDataBase* data ) const
+{
+ return data->usedRows();
+}
+
+
+bool KDChartBWPainter::isNormalMode() const
+{
+ return KDChartParams::BWNormal == params()->bWChartSubType();
+}
+
+int KDChartBWPainter::clipShiftUp( bool, double ) const
+{
+ return 0;
+}
+
+/**
+ Paints the actual data area and registers the region for the data
+ points if \a regions is not 0.
+
+ \param painter the QPainter onto which the chart should be painted
+ \param data the data that will be displayed as a chart
+ \param paint2nd specifies whether the main chart or the additional chart is to be drawn now
+ \param regions a pointer to a list of regions that will be filled
+ with regions representing the data segments, if not null
+ */
+void KDChartBWPainter::specificPaintData( QPainter* painter,
+ const QRect& ourClipRect,
+ KDChartTableDataBase* data,
+ KDChartDataRegionList* /*regions*/,
+ const KDChartAxisParams* axisPara,
+ bool /*bNormalMode*/,
+ uint /*chart*/,
+ double logWidth,
+ double /*areaWidthP1000*/,
+ double logHeight,
+ double /*axisYOffset*/,
+ double /*minColumnValue*/,
+ double /*maxColumnValue*/,
+ double /*columnValueDistance*/,
+ uint chartDatasetStart,
+ uint chartDatasetEnd,
+ uint datasetStart,
+ uint datasetEnd )
+{
+ //double areaHeightP1000 = logHeight / 1000.0;
+
+ uint datasetNum = ( chartDatasetEnd - chartDatasetStart ) + 1;
+
+ double pixelsPerUnit = 0.0;
+ if( 0.0 != axisPara->trueAxisHigh() - axisPara->trueAxisLow() )
+ pixelsPerUnit = logHeight / (axisPara->trueAxisHigh() - axisPara->trueAxisLow());
+ else
+ pixelsPerUnit = logHeight / 10;
+
+ // Distance between the individual "stocks"
+ double pointDist = logWidth / ( ( double ) datasetNum );
+
+ // compute the position of the 0 axis
+ double zeroXAxisI = axisPara->axisZeroLineStartY() - _dataRect.y();
+
+ const int lineWidth = static_cast<int>( pointDist / 66.0 ) * QMAX(params()->lineWidth(), 1);
+ const int lineWidthD2 = lineWidth * 2 / 3;
+
+ const bool noBrush = Qt::NoBrush == params()->bWChartBrush().style();
+
+ // Loop over the datasets, draw one box and whisker shape for each series.
+ for ( uint dataset = chartDatasetStart;
+ dataset <= chartDatasetEnd;
+ ++dataset ) {
+
+ if( dataset >= datasetStart &&
+ dataset <= datasetEnd &&
+ 0 < calculateStats( *data, dataset ) ) {
+ const QColor color( params()->dataColor( dataset ) );
+ // transform calculated values
+ double drawUOF = stats[ KDChartParams::UpperOuterFence ] * pixelsPerUnit;
+ double drawUIF = stats[ KDChartParams::UpperInnerFence ] * pixelsPerUnit;
+ double drawQu3 = stats[ KDChartParams::Quartile3 ] * pixelsPerUnit;
+ double drawMed = stats[ KDChartParams::Median ] * pixelsPerUnit;
+ double drawQu1 = stats[ KDChartParams::Quartile1 ] * pixelsPerUnit;
+ double drawLIF = stats[ KDChartParams::LowerInnerFence ] * pixelsPerUnit;
+ double drawLOF = stats[ KDChartParams::LowerOuterFence ] * pixelsPerUnit;
+ double drawMax = stats[ KDChartParams::MaxValue ] * pixelsPerUnit;
+ double drawMin = stats[ KDChartParams::MinValue ] * pixelsPerUnit;
+ double drawMean= stats[ KDChartParams::MeanValue ] * pixelsPerUnit;
+ // get whisker values
+ double drawUWhisker = QMIN(drawUIF, drawMax);
+ double drawLWhisker = QMAX(drawLIF, drawMin);
+ // get the box width
+ const int boxWidth = QMAX( 6, static_cast<int>( pointDist * 0.2 ) );
+ // get marker size (for the outliers and/or for the median value)
+ int markWidth = params()->bWChartOutValMarkerSize();
+ bool drawOutliers = ( 0 != markWidth );
+ if( drawOutliers ){
+ if( 0 > markWidth)
+ markWidth = QMAX( 4, markWidth * boxWidth / -100 );
+ else
+ markWidth = QMAX( 4, markWidth );
+ }
+ else
+ markWidth = boxWidth * 25 / 100; // use the default for the Median marker
+
+ painter->setPen( QPen( color, lineWidth ) );
+ painter->setBrush( params()->bWChartBrush() );
+ // draw the box
+ int boxWidthD2 = boxWidth / 2;
+ int xPos = static_cast<int>(
+ pointDist * ( (double)(dataset - chartDatasetStart) + 0.5 )
+ - lineWidth / 2);
+ painter->drawRect( xPos - boxWidthD2,
+ static_cast<int>( zeroXAxisI - drawQu3 ),
+ boxWidth,
+ static_cast<int>( drawQu3 - drawQu1) + 1 );
+ // draw the median
+ painter->drawLine( xPos - boxWidthD2,
+ static_cast<int>( zeroXAxisI - drawMed ),
+ xPos - boxWidthD2 + boxWidth,
+ static_cast<int>( zeroXAxisI - drawMed ) );
+ // draw the whisker
+ painter->drawLine( xPos - boxWidthD2,
+ static_cast<int>( zeroXAxisI - drawUWhisker ),
+ xPos - boxWidthD2 + boxWidth,
+ static_cast<int>( zeroXAxisI - drawUWhisker ) );
+ painter->drawLine( xPos,
+ static_cast<int>( zeroXAxisI - drawUWhisker ),
+ xPos,
+ static_cast<int>( zeroXAxisI - drawQu3 ) );
+ painter->drawLine( xPos - boxWidthD2,
+ static_cast<int>( zeroXAxisI - drawLWhisker ),
+ xPos - boxWidthD2 + boxWidth,
+ static_cast<int>( zeroXAxisI - drawLWhisker ) );
+ painter->drawLine( xPos,
+ static_cast<int>( zeroXAxisI - drawLWhisker ),
+ xPos,
+ static_cast<int>( zeroXAxisI - drawQu1 ) );
+ // draw the values
+ int xPos2 = static_cast<int>(
+ pointDist * ( (double)(dataset - chartDatasetStart) + 0.5 )
+ - lineWidthD2 / 2);
+ int markWidthD2 = QMAX(markWidth / 2, 2);
+ int markWidthD25 = QMAX(static_cast<int>( 0.85 * markWidth / 2.0), 2);
+ int markWidthD35 = QMAX(static_cast<int>( 0.85 * markWidth / 3.0), 2);
+ // draw the outliers
+ if( drawOutliers ){
+ const uint nMax = data->usedCols();
+ int drawVal;
+ QVariant vVal;
+ for( uint i=0; i<nMax; ++i)
+ if( data->cellCoord( dataset, i, vVal, 1 ) &&
+ QVariant::Double == vVal.type() ) {
+ drawVal = static_cast<int>( pixelsPerUnit * vVal.toDouble() );
+ if( drawLOF > drawVal || drawUOF < drawVal ) {
+ painter->setPen( Qt::NoPen );
+ painter->drawChord( xPos2 - markWidthD2,
+ static_cast<int>(zeroXAxisI - drawVal) - markWidthD2,
+ markWidth,
+ markWidth,
+ 0, 5760 );
+ painter->setPen( QPen( color, lineWidthD2 ) );
+ painter->drawArc( xPos2 - markWidthD2,
+ static_cast<int>(zeroXAxisI - drawVal) - markWidthD2,
+ markWidth,
+ markWidth,
+ 0, 5760 );
+ } else if( drawLIF > drawVal || drawUIF < drawVal ) {
+ painter->setPen( Qt::NoPen );
+ painter->drawChord( xPos2 - markWidthD2,
+ static_cast<int>( zeroXAxisI - drawVal) - markWidthD2,
+ markWidth,
+ markWidth,
+ 0, 5760 );
+ painter->setPen( QPen( color, lineWidthD2 ) );
+ painter->drawLine( xPos2,
+ static_cast<int>(zeroXAxisI - drawVal) - markWidthD2,
+ xPos2,
+ static_cast<int>(zeroXAxisI - drawVal) + markWidthD2 );
+ painter->drawLine( xPos2 - markWidthD25,
+ static_cast<int>(zeroXAxisI - drawVal) - markWidthD35,
+ xPos2 + markWidthD25,
+ static_cast<int>(zeroXAxisI - drawVal) + markWidthD35 );
+ painter->drawLine( xPos2 + markWidthD25,
+ static_cast<int>(zeroXAxisI - drawVal) - markWidthD35,
+ xPos2 - markWidthD25,
+ static_cast<int>(zeroXAxisI - drawVal) + markWidthD35 );
+ }
+ }
+ }
+ // draw the mean value
+ bool evenLineWidthD2 = floor( ((double)lineWidthD2)/2.0 ) == ((double)lineWidthD2)/2.0;
+ painter->setPen( params()->bWChartBrush().color() );
+ painter->drawChord( xPos2 - markWidthD2-1 - (evenLineWidthD2 ? 0 : 1),
+ static_cast<int>( zeroXAxisI - drawMean ) - markWidthD2 - 1,
+ markWidthD2*2 + (evenLineWidthD2 ? 2 : 3),
+ markWidthD2*2 + (evenLineWidthD2 ? 2 : 3),
+ 0, 5760 );
+ if( noBrush ) {
+ // use different color brightness for the Mean marker
+ int h,s,v;
+ color.hsv(&h,&s,&v);
+ painter->setPen( QPen( 128 > v ? color.light(150) : color.dark(150),
+ lineWidthD2 ) );
+ } else
+ painter->setPen( QPen( color, lineWidthD2 ) );
+ painter->drawLine( xPos2 - markWidthD2 - (evenLineWidthD2 ? 0 : 1),
+ static_cast<int>( zeroXAxisI - drawMean ),
+ xPos2 + markWidthD2,
+ static_cast<int>( zeroXAxisI - drawMean ) );
+ painter->drawLine( xPos2 - (evenLineWidthD2 ? 0 : 1),
+ static_cast<int>( zeroXAxisI - drawMean ) - markWidthD2,
+ xPos2 - (evenLineWidthD2 ? 0 : 1),
+ static_cast<int>( zeroXAxisI - drawMean ) + markWidthD2 + (evenLineWidthD2 ? 0 : 1) );
+
+ // draw the statistical value texts
+ painter->setPen( Qt::NoPen );
+ for( int ii = KDChartParams::BWStatValSTART;
+ ii <= KDChartParams::BWStatValEND;
+ ++ii ){
+ KDChartParams::BWStatVal i = (KDChartParams::BWStatVal)ii;
+ if( params()->bWChartPrintStatistics( i ) ) {
+ QFont statFont( params()->bWChartStatisticsFont( i ) );
+ float nTxtHeight = statFont.pointSizeFloat();
+ if ( params()->bWChartStatisticsUseRelSize( i ) ) {
+ nTxtHeight = params()->bWChartStatisticsFontRelSize( i )
+ * boxWidth / 100;
+ statFont.setPointSizeFloat( nTxtHeight );
+ }
+ double drawStat = pixelsPerUnit * stats[i];
+ KDChartTextPiece statText( painter, QString::number( stats[i] ),
+ statFont );
+ int tw = statText.width();
+ int xDelta = ( KDChartParams::MaxValue == i
+ || KDChartParams::MeanValue == i
+ || KDChartParams::MinValue == i )
+ ? -1 * (tw + static_cast<int>( 1.3*boxWidthD2 ))
+ : static_cast<int>( 1.3*boxWidthD2 );
+ QBrush brush( params()->bWChartStatisticsBrush( i ) );
+ painter->setBrush( brush );
+ int y = static_cast<int>( zeroXAxisI - drawStat - nTxtHeight/2);
+ painter->drawRect( xPos + xDelta - 1,
+ y,
+ tw + 2,
+ QMAX(static_cast < int > ( nTxtHeight ), 8) + 1 );
+ statText.draw( painter,
+ xPos + xDelta,
+ y,
+ ourClipRect,
+ params()->bWChartStatisticsColor( i ),
+ 0 );
+ }
+ }
+
+ } else
+ continue; // we cannot display this value
+ }
+}
diff --git a/libkdchart/KDChartBWPainter.h b/libkdchart/KDChartBWPainter.h
new file mode 100644
index 0000000..3dd9ad7
--- /dev/null
+++ b/libkdchart/KDChartBWPainter.h
@@ -0,0 +1,76 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTBWPAINTER_H__
+#define __KDCHARTBWPAINTER_H__
+
+#include "KDChartAxesPainter.h"
+#include <KDChartParams.h>
+#include <KDChartTable.h>
+
+#include <qnamespace.h>
+
+class KDChartParams;
+
+class KDChartBWPainter : public KDChartAxesPainter, public Qt
+{
+ friend class KDChartPainter;
+ protected:
+ KDChartBWPainter( KDChartParams* params );
+ virtual ~KDChartBWPainter();
+
+ virtual bool isNormalMode() const;
+ virtual int clipShiftUp( bool, double ) const;
+ virtual void specificPaintData( QPainter* painter,
+ const QRect& ourClipRect,
+ KDChartTableDataBase* data,
+ KDChartDataRegionList* regions,
+ const KDChartAxisParams* axisPara,
+ bool bNormalMode,
+ uint chart,
+ double logWidth,
+ double areaWidthP1000,
+ double logHeight,
+ double axisYOffset,
+ double minColumnValue,
+ double maxColumnValue,
+ double columnValueDistance,
+ uint chartDatasetStart,
+ uint chartDatasetEnd,
+ uint datasetStart,
+ uint datasetEnd );
+
+ virtual QString fallbackLegendText( uint dataset ) const;
+ virtual uint numLegendFallbackTexts( KDChartTableDataBase* data ) const;
+ private:
+ int calculateStats( KDChartTableDataBase&, uint );// returns number of used cells containing a double
+ double stats[ KDChartParams::BWStatValOffEndValue]; // y cordinates
+ int nFirstQ1, nLastQ1, nFirstQ3, nLastQ3;
+};
+
+#endif
diff --git a/libkdchart/KDChartBarPainter.cpp b/libkdchart/KDChartBarPainter.cpp
new file mode 100644
index 0000000..b41fa34
--- /dev/null
+++ b/libkdchart/KDChartBarPainter.cpp
@@ -0,0 +1,1707 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+*/
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#include "KDChartBarPainter.h"
+#include <KDChartParams.h>
+
+#include <qpainter.h>
+
+#include <stdlib.h>
+
+/**
+ \class KDChartBarPainter KDChartBarPainter.h
+
+ \brief A chart painter implementation that can paint bar charts.
+*/
+
+/**
+ Constructor. Sets up internal data structures as necessary.
+
+ \param params the KDChartParams structure that defines the chart
+*/
+KDChartBarPainter::KDChartBarPainter( KDChartParams* params ) :
+ KDChartAxesPainter( params )
+{
+ // This constructor intentionally left blank so far; we cannot setup the
+ // geometry yet since we do not know the size of the painter.
+}
+
+
+/**
+ Destructor.
+*/
+KDChartBarPainter::~KDChartBarPainter()
+{
+ // intentionally left blank
+}
+
+bool KDChartBarPainter::isNormalMode() const
+{
+
+ return KDChartParams::BarNormal == params()->barChartSubType();
+}
+
+int KDChartBarPainter::clipShiftUp( bool normalMode, double areaWidthP1000 ) const
+{
+
+ const bool bThreeDBars = params()->threeDBars() || (KDChartParams::BarMultiRows == params()->barChartSubType());
+ return ( normalMode && !bThreeDBars )
+ ? static_cast < int > ( areaWidthP1000 * 16.0 )
+ : 0;
+}
+
+
+void KDChartBarPainter::initMyPainter( QPainter* painter )
+{
+ _myPainter = painter;
+ _painterDX = 0.0;
+ _painterDY = 0.0;
+}
+
+void KDChartBarPainter::shiftMyPainter( double dx, double dy )
+{
+ if( dx != 0.0 || dy != 0.0 ){
+ _myPainter->translate(dx, dy);
+ _painterDX += dx;
+ _painterDY += dy;
+ }
+}
+
+void KDChartBarPainter::shiftMyPainterBack()
+{
+ if( _painterDX != 0.0 || _painterDY != 0.0 ){
+ _myPainter->translate(-_painterDX, -_painterDY);
+ _painterDX = 0.0;
+ _painterDY = 0.0;
+ }
+}
+
+
+void KDChartBarPainter::calculateXFront1_2( bool bNormalMode, bool bIsVeryFirstBar, bool bIsFirstDataset, bool _bThreeDBars,
+ double xpos, double valueBlockGap, double datasetGap, double frontBarWidth,
+ int& frontX1, int& frontX2, int& prevFrontX2 ){
+
+ if( _bThreeDBars || bIsVeryFirstBar || !bNormalMode )
+ frontX1 = static_cast<int>( xpos );
+ else if( bIsFirstDataset )
+ frontX1 = prevFrontX2 + static_cast <int> ( valueBlockGap ) + 1;
+ else
+ frontX1 = prevFrontX2 + static_cast < int > ( datasetGap ) + 1;
+
+ // Note: frontX2 is calculated by using xpos but NOT by using frontX1.
+ // So we make sure that (a) the gaps between all bars of one dataset
+ // are exactly the same size, and that (b) the bars are automatically
+ // adjusted in their width: to match their very position within the abscissa range.
+ // Adjusting will result in them being ONE pixel wider sometimes.
+ frontX2 = static_cast < int > ( xpos + frontBarWidth );
+ prevFrontX2 = frontX2;
+}
+
+
+QPointArray rectToPointArray( const QRect& r )
+{
+ QPointArray a(4);
+ a.putPoints( 0, 4, r.left(),r.top(), r.right(),r.top(), r.right(),r.bottom(), r.left(),r.bottom() );
+ return a;
+}
+
+
+void KDChartBarPainter::specificPaintData( QPainter* painter,
+ const QRect& ourClipRect,
+ KDChartTableDataBase* data,
+ KDChartDataRegionList* regions,
+ const KDChartAxisParams* ordinatePara,
+ bool bNormalMode,
+ uint chart,
+ double logWidth,
+ double areaWidthP1000,
+ double logHeight,
+ double axisYOffset,
+ double minColumnValue,
+ double maxColumnValue,
+ double columnValueDistance,
+ uint chartDatasetStart,
+ uint chartDatasetEnd,
+ uint datasetStart,
+ uint datasetEnd )
+{
+ /****************Pending Michel***********************
+ *Rectangles are painted in the following order: *
+ *front , right side, top. *
+ *Store the painted rectangles in order to paint *
+ *them in relation to each other for more precision. *
+ ****************************************************/
+ QRect frontRectPositive,frontRectNegative,
+ rightRectPositive, rightRectNegative,
+ excessRectPositive,excessRectNegative;
+
+ _areaP1000 = areaWidthP1000;
+
+
+
+ if( !data ) return;
+ // qDebug("datasetStart: %i datasetEnd: %i", datasetStart, datasetEnd);
+ const QPen defaultOutlinePen( params()->outlineDataColor(),
+ params()->outlineDataLineWidth(),
+ params()->outlineDataLineStyle() );
+ abscissaInfos ai;
+ ai.bCenterThePoints = true;
+ calculateAbscissaInfos( *params(), *data,
+ datasetStart, datasetEnd,
+ logWidth, _dataRect,
+ ai );
+
+ const QRect devRect( painter->window() );
+
+ initMyPainter( painter );
+
+ const bool ordinateIsLogarithmic
+ = KDChartAxisParams::AxisCalcLogarithmic == ordinatePara->axisCalcMode();
+
+ const bool bMultiRows = KDChartParams::BarMultiRows == params()->barChartSubType();
+ _bThreeDBars = params()->threeDBars() || bMultiRows;
+ int numChartDataEntryDatasets = 0;
+ uint myLastDataEntryDataset = 0;
+ for( uint iD = chartDatasetStart; iD <= chartDatasetEnd; ++iD ){
+ if( params()->chartSourceMode( iD ) == KDChartParams::DataEntry ){
+ ++numChartDataEntryDatasets;
+ myLastDataEntryDataset = iD;
+ }
+ }
+
+ const bool bHadClipping = painter->hasClipping();
+
+ //this allow the height/size of the bar to be painted fully
+ if( bMultiRows ) {
+ painter->setClipping( false );
+ }
+ // Number of columns in one dataset: If -1, use all values,
+ // otherwise use the specified number of values.
+ int numValues = 0;
+ if ( params()->numValues() != -1 )
+ numValues = params()->numValues();
+ else
+ numValues = data->usedCols();
+
+ double datasetGap = bMultiRows
+ ? 0.0
+ : params()->datasetGap()
+ * ( params()->datasetGapIsRelative()
+ ? areaWidthP1000
+ : 1.0 );
+ double valueBlockGap = bMultiRows
+ ? 0.0
+ : params()->valueBlockGap()
+ * ( params()->valueBlockGapIsRelative()
+ ? areaWidthP1000
+ : 1.0 );
+
+ // This is the same for all three bar types except for multi-bar Surface charts.
+ double spaceBetweenValueBlocks = bMultiRows
+ ? 0.0
+ : static_cast<int>( valueBlockGap ) * numValues;
+
+ // Set some geometry values that apply to bar charts only
+ double totalNumberOfBars = 0.0;
+ double spaceBetweenDatasets = 0.0;
+ switch ( params()->barChartSubType() ) {
+ case KDChartParams::BarNormal: {
+ totalNumberOfBars = numChartDataEntryDatasets * numValues;
+ spaceBetweenDatasets = datasetGap
+ * ( totalNumberOfBars - numValues );
+ break;
+ }
+ case KDChartParams::BarStacked:
+ case KDChartParams::BarPercent:
+ case KDChartParams::BarMultiRows:
+ totalNumberOfBars = numValues;
+ spaceBetweenDatasets = 0; // always 0 when stacked/percent/multi-rows
+ break;
+ default:
+ qFatal( "Unsupported bar chart type" );
+ };
+
+ double barWidth = 0.0;
+ if( params()->barWidth() == KDCHART_AUTO_SIZE ) {
+
+ //Default auto calc. to optimize when many bars datasetGap == blockGap/2 == barWidth/2
+ //unless valueBlockGap or datasetGap are different from default values == users value
+ barWidth = logWidth / totalNumberOfBars;
+ do {
+ barWidth -= 0.1;
+ params()->valueBlockGap() != 24 ? spaceBetweenValueBlocks = params()->valueBlockGap() * numValues
+ : spaceBetweenValueBlocks = ( barWidth/2 ) * numValues;
+ if ( spaceBetweenDatasets != 0 )
+ params()->datasetGap()!= 6 ? spaceBetweenDatasets = params()->datasetGap() * ( totalNumberOfBars - numValues )
+ : spaceBetweenDatasets = ( barWidth/4 ) * ( totalNumberOfBars - numValues );
+ }
+ while ( barWidth*totalNumberOfBars + spaceBetweenValueBlocks + spaceBetweenDatasets > logWidth );
+
+ valueBlockGap = ( spaceBetweenValueBlocks )/ numValues;
+ if ( spaceBetweenDatasets != 0 )
+ datasetGap = spaceBetweenDatasets / ( totalNumberOfBars - numValues );
+
+ barWidth = (logWidth - ( valueBlockGap * numValues ) - ( datasetGap * ( totalNumberOfBars - numValues ) ) ) / totalNumberOfBars;
+ ;
+
+ /* Debug space available
+ qDebug ( " logWidth %f" , logWidth );
+ qDebug ( "compare value %f", barWidth*totalNumberOfBars + spaceBetweenValueBlocks + datasetGap * ( totalNumberOfBars - numValues ) );
+ */
+ } else if( 0 > params()->barWidth() )
+ barWidth = params()->barWidth() * -areaWidthP1000;
+ else
+ barWidth = params()->barWidth();
+
+ //sideBarWidth: pre-calculate in order to have a reference
+ //we will correct according to the available space later.
+ //This in order to center the labels in relation to the front width
+ //when painting 3DBars
+ double sideBarWidth = _bThreeDBars
+ ? ( barWidth - barWidth / (1.0 + params()->cosThreeDBarAngle()) ) *
+ params()->threeDBarDepth()
+ : 0.0;
+
+ const double frontBarWidth = _bThreeDBars && !bMultiRows
+ ? barWidth - sideBarWidth
+ : barWidth;
+
+ //correct the width for the side of the bar
+ double totalThreeDBarWidth = totalNumberOfBars*barWidth + sideBarWidth;
+ double totalSpaceOccupied = totalThreeDBarWidth + spaceBetweenDatasets + spaceBetweenValueBlocks;
+ if ( logWidth < totalSpaceOccupied) {
+ sideBarWidth -= (totalSpaceOccupied /*+ spaceBetweenDatasets + spaceBetweenValueBlocks*/ - logWidth)/totalNumberOfBars;
+
+ //qDebug ( "logWidth %f", logWidth );
+ //qDebug ( "totalSpaceOccupied %f", totalSpaceOccupied );
+ }
+
+ const double sideBarHeight = sideBarWidth;
+
+
+ double pixelsPerUnit = 0.0;
+
+ if ( params()->barChartSubType() != KDChartParams::BarPercent ) // not used for percent
+ pixelsPerUnit = logHeight / ( columnValueDistance ? columnValueDistance : 10 );
+
+ //qDebug("\nordinatePara->trueAxisLow() = %f", ordinatePara->trueAxisLow());
+ //qDebug( "ordinatePara->trueAxisHigh() = %f", ordinatePara->trueAxisHigh());
+ //qDebug( "sideBarHeight = %f", sideBarHeight);
+ //qDebug( "pixelsPerUnit = %f", pixelsPerUnit);
+
+ double zeroXAxisI;
+ if ( params()->barChartSubType() == KDChartParams::BarPercent ) {
+ if ( minColumnValue == 0.0 )
+ zeroXAxisI = 0.0;
+ else if ( maxColumnValue == 0.0 )
+ zeroXAxisI = logHeight - sideBarHeight;
+ else
+ zeroXAxisI = ( logHeight - sideBarHeight ) / 2.0;
+
+ } else {
+ zeroXAxisI = logHeight
+ - ordinatePara->axisZeroLineStartY()
+ + _dataRect.y();
+ }
+
+ double shiftUpperBars = (params()->barChartSubType() != KDChartParams::BarPercent)
+ && (ordinatePara->axisTrueLineWidth() % 2)
+ ? 1.0
+ : 0.0;
+
+ // Initializing drawing positions
+ double yposPositivesStart = logHeight;
+ double yposNegativesStart = logHeight;
+ if( params()->barChartSubType() == KDChartParams::BarPercent ){
+ yposPositivesStart += axisYOffset;
+ yposNegativesStart += axisYOffset;
+ }
+
+ for ( int iPaintExtraLinesOrTheData = 0;
+ iPaintExtraLinesOrTheData < 3;
+ ++iPaintExtraLinesOrTheData )
+ {
+
+ const bool bDrawExtraLines = (1 != iPaintExtraLinesOrTheData);
+ const bool bDrawExtraLinesInFront = (2 == iPaintExtraLinesOrTheData);
+
+ double xpos = 0.0;
+
+ if ( _bThreeDBars && !bMultiRows )
+ xpos = 0.0 + (barWidth/2) + (valueBlockGap/2) - (frontBarWidth/2);
+ else
+ xpos = 0.0 + (valueBlockGap / 2.0);
+
+ double yposPositives = yposPositivesStart;
+ double yposNegatives = yposNegativesStart;
+
+ /* Pending Michel: no need for this anymore */
+ //double totalThreeDBarWidth = bMultiRows
+ //? barWidth + sideBarWidth
+ // : barWidth;
+
+ double nShiftX = bMultiRows
+ ? sideBarWidth
+ : 0.0;
+ double nShiftY = bMultiRows
+ ? sideBarHeight
+ : 0.0;
+
+ double valueTotal = 0.0; // valueTotal is used for percent bars only
+
+ // iterate over all columns: item1, item2, item3 ...
+ int prevFrontX2 = 0;
+ bool bIsVeryFirstBar = true;
+ for ( int value = 0; value < numValues; ++value ) {
+
+ bool bFirstValidValueUnknown = true;
+ uint firstValidValue = 0;
+ uint lastValidPositiveValue = 0;
+ double maxValueInThisColumn = 0.0, minValueInThisColumn = 0.0;
+ if ( params()->barChartSubType() == KDChartParams::BarStacked ||
+ params()->barChartSubType() == KDChartParams::BarPercent) {
+ valueTotal = 0.0;
+ // iterate over datasets of this axis only:
+ for ( uint dataset = datasetStart;
+ dataset <= datasetEnd;
+ ++dataset ) {
+
+ QVariant vVal;
+ if( data->cellCoord( dataset, value, vVal, 1 )
+ && params()->chartSourceMode( dataset ) == KDChartParams::DataEntry
+ && QVariant::Double == vVal.type() ){
+
+ const double cellValue
+ = ordinateIsLogarithmic
+ ? log10( vVal.toDouble() )
+ : vVal.toDouble();
+ //qDebug("value %u dataset %u logHeight %f", value,dataset,logHeight);
+
+ if( bFirstValidValueUnknown ){
+ firstValidValue = dataset;
+ bFirstValidValueUnknown = false;
+ }
+ if( 0.0 <= cellValue )
+ lastValidPositiveValue = dataset;
+
+ maxValueInThisColumn = QMAX( maxValueInThisColumn, cellValue );
+ minValueInThisColumn = QMIN( minValueInThisColumn, cellValue );
+ if( params()->barChartSubType() == KDChartParams::BarPercent /*||
+ params()->barChartSubType() == KDChartParams::BarStacked*/ )
+ valueTotal += cellValue;
+ }
+ }
+ }
+
+ //qDebug("shiftMyPainter( (numChartDataEntryDatasets-1)*nShiftX, (numChartDataEntryDatasets-1)*-nShiftY );");
+ shiftMyPainter( (numChartDataEntryDatasets-1)*nShiftX, (numChartDataEntryDatasets-1)*-nShiftY );
+
+ // iterate over all datasets of this chart:
+ // (but draw only the bars of this axis)
+ bool bIsFirstDataset = true;
+ for ( uint dataset = bMultiRows
+ ? chartDatasetEnd
+ : chartDatasetStart;
+ dataset >= chartDatasetStart && dataset <= chartDatasetEnd;
+ bMultiRows
+ ? --dataset
+ : ++dataset ) {
+ //qDebug("value %u dataset %u logHeight %f", value,dataset,logHeight);
+
+ const bool bDataEntrySourceMode
+ = (params()->chartSourceMode( dataset ) == KDChartParams::DataEntry);
+
+
+ QVariant coord1;
+ QVariant coord2;
+ int propID;
+ if( data->cellContent( dataset, value, coord1, coord2, propID )
+ && QVariant::Double == coord1.type() ){
+
+ const double cellValue
+ = ordinateIsLogarithmic
+ ? log10( coord1.toDouble() )
+ : coord1.toDouble();
+ //qDebug("b");
+ // there is a numeric value
+
+ double barHeight;
+
+ if ( params()->barChartSubType() == KDChartParams::BarPercent )
+ barHeight = ( cellValue / valueTotal ) * fabs(zeroXAxisI - logHeight );
+ else {
+ barHeight = pixelsPerUnit * cellValue;
+
+ if( 0.0 <= barHeight )
+ //barHeight = QMAX(0.0, barHeight - sideBarHeight);
+ barHeight = barHeight - sideBarHeight;
+ else
+ barHeight -= sideBarHeight;
+ }
+
+ // This little adjustment avoids a crash when trying
+ // to retrieve the bounding rect of a zero size region...
+ if( 0 == barHeight || 0.0 == barHeight ) {
+
+ barHeight = 1.0; // makes sense to have a min size anyway
+ }
+
+ // draw only the bars belonging to the axis
+ // which we are processing currently
+ if( dataset >= datasetStart && dataset <= datasetEnd ) {
+ //qDebug("b2");
+
+ // calculate Abscissa axis value, if there are X coordinates
+ // ---------------------------------------------------------
+ bool skipMe = false;
+ if( ai.bCellsHaveSeveralCoordinates ){
+ skipMe = !calculateAbscissaAxisValue( coord2,
+ ai, 0, xpos );
+ // adjust bar position to have it horizontally centered to the point
+ if( ai.bAbscissaHasTrueAxisDtValues &&
+ QVariant::DateTime == coord2.type() )
+ xpos -= frontBarWidth / 2.0;
+ }
+
+ if( !skipMe ){
+ // Configure colors
+ QColor myBarColor( params()->dataColor( dataset ) );
+ QColor myShadow1Color( params()->dataShadow1Color( dataset ) );
+ QColor myShadow2Color( params()->dataShadow2Color( dataset ) );
+
+ // Get default values for extra lines and their markers
+ const KDChartParams::LineMarkerStyle
+ defaultMarkerStyle = params()->lineMarkerStyle( dataset );
+ const QPen defaultPen( params()->lineColor().isValid()
+ ? params()->lineColor()
+ : params()->dataColor( dataset ),
+ params()->lineWidth(),
+ params()->lineStyle( dataset ) );
+
+ // --------------------------------------------------------
+ // determine any 'extra' properties assigned to this cell
+ // by traversing the property set chain (if necessary)
+ // --------------------------------------------------------
+ KDChartPropertySet propSet;
+ bool bCellPropertiesFound =
+ params()->calculateProperties( propID,
+ propSet );
+ bool bShowThisBar = bDataEntrySourceMode;
+ if( bCellPropertiesFound ){
+ if( bShowThisBar && !bDrawExtraLines ){
+ int iDummy;
+ if( propSet.hasOwnShowBar( iDummy, bShowThisBar ) ){
+ // NOP
+ }
+ if( propSet.hasOwnBarColor( iDummy, myBarColor ) ){
+ // adjust the shadow colors
+ params()->calculateShadowColors( myBarColor,
+ myShadow1Color,
+ myShadow2Color );
+ }
+ }
+ }
+
+ if( !bDrawExtraLines || bCellPropertiesFound ){
+
+ //QRegion* region = 0;
+ KDChartDataRegion::PointArrayList * pointArrayList = 0;
+ if( bDataEntrySourceMode && !bDrawExtraLines ){
+ painter->setPen( defaultOutlinePen );
+ if ( myBarColor.isValid() )
+ painter->setBrush( myBarColor );
+ else
+ painter->setBrush( NoBrush );
+
+ // Prepare region for detection of mouse clicks
+ // and for finding anchor positions of data value texts
+ if ( regions )
+ pointArrayList = new KDChartDataRegion::PointArrayList();
+ }
+
+ // Start drawing
+ int frontX1 = 0;
+ int frontX2 = 0;
+ bool tooLow = false;
+ bool tooHigh = false;
+
+ if ( cellValue < 0 || cellValue < minColumnValue ) {
+ double maxValueYPos = maxColumnValue * pixelsPerUnit;
+ double yZero = yposNegatives - zeroXAxisI - sideBarHeight;
+
+ tooLow = (barHeight - yZero + logHeight + axisYOffset) < 0;
+
+ /*we need to handle those values in case we have a negative view*/
+ if ( cellValue <= 0 && cellValue > maxColumnValue && minColumnValue < 0 && maxColumnValue < 0 )
+ tooLow = true;
+
+ if ( tooLow && ( bNormalMode || bMultiRows) ) {
+ double delta = 0.0125 * logHeight;
+ double height = -1*(-1.0 * (yZero + sideBarHeight) - 2 * delta);
+ double height1 = height - 3.0 * delta;
+
+ int yArrowGap = static_cast < int > ( 2.5 * delta );
+ calculateXFront1_2( bNormalMode, bIsVeryFirstBar, bIsFirstDataset, _bThreeDBars,
+ xpos, valueBlockGap, datasetGap, frontBarWidth,
+ frontX1, frontX2, prevFrontX2 );
+
+ const int xm = static_cast < int > ( (frontX1 + frontX2) / 2.0 );
+ QRect rect( ourClipRect );
+
+ rect.setHeight( static_cast<int>( rect.height() + 3.0 * delta ) );
+ painter->setClipRect( rect );
+
+ //Pending Michel: Make sure the point of the arrow is always at the same distance
+ //from the X axis reference to the point of the arrow.
+ int arrowXAxisGap;
+ QPoint arrowTop( xm,static_cast<int>( yZero + height1 + 2 * yArrowGap) );
+
+ if ( arrowTop.y()== yposNegatives )
+ arrowXAxisGap = -2;
+ else
+ arrowXAxisGap = static_cast <int> (yposNegatives - arrowTop.y() - 2);
+
+ if( bDrawExtraLines ){
+ drawExtraLinesAndMarkers(
+ propSet,
+ defaultPen,
+ defaultMarkerStyle,
+ xm, static_cast<int>( yZero + height1 ),
+ painter,
+ ai.abscissaPara,
+ ordinatePara,
+ areaWidthP1000,
+ logHeight/1000.0,
+ bDrawExtraLinesInFront );
+ }else if( bShowThisBar ){
+ if( params()->drawSolidExcessArrows() ) {
+
+ /* PENDING Michel:
+ * Here we have two situations.
+ * The value is too low because over the Min negative value
+ * or it is not within the configured view.
+ */
+ // Draw solid excess arrows negatives
+
+ QPointArray points( 5 );
+ /*this works in a positive view -> 200 500*/
+ points.setPoint( 0, frontX1, cellValue < 0 ?
+ static_cast<int>(yZero+height1 - 3.0*delta)+(2*yArrowGap)+ arrowXAxisGap:
+ static_cast<int>( yZero + height1)+(2*yArrowGap)+ arrowXAxisGap);
+ points.setPoint( 1, frontX2, cellValue < 0 ?
+ static_cast<int>(yZero+height1 - 3.0*delta)+(2*yArrowGap)+ arrowXAxisGap:
+ static_cast<int>( yZero + height1)+(2*yArrowGap)+ arrowXAxisGap );
+ points.setPoint( 2, frontX2, cellValue < 0 ?
+ static_cast<int>(yZero+height1 - 3.0*delta)+(2*yArrowGap)+ arrowXAxisGap:
+ static_cast<int>( yZero + height1)+(2*yArrowGap)+ arrowXAxisGap);
+ points.setPoint( 3, xm, cellValue < 0 ?
+ static_cast<int>( yZero + height1)+(2*yArrowGap)+ arrowXAxisGap:
+ static_cast<int>(yZero+height1 - 3.0*delta)+(2*yArrowGap)+ arrowXAxisGap);
+ points.setPoint( 4, frontX1, cellValue < 0 ?
+ static_cast<int>(yZero+height1 - 3.0*delta)+(2*yArrowGap)+ arrowXAxisGap:
+ static_cast<int>( yZero + height1)+(2*yArrowGap)+ arrowXAxisGap);
+
+ /* 0 between start and end -> -500 500*/
+ if ( minColumnValue < 0 && maxColumnValue > 0 ) {
+ points.setPoint(0, points.point(0).x(), static_cast <int> (yposNegatives - zeroXAxisI) );
+ points.setPoint(1, points.point(1).x(), static_cast <int> (yposNegatives - zeroXAxisI) );
+ }
+
+ /* negative view -> -200 -500 */
+ if ( minColumnValue < 0 && maxColumnValue < 0 ) {
+ /*value negative or zero > maxColumnValue*/
+ if ( cellValue > maxColumnValue ) {
+ // the view is under Yaxis 0 level
+ // we need to show a symbol for the bars which are over the Yaxis.
+ // calculate the coordinate and direction for the arrow.
+ // arrow downward for negative values and upward for positives value
+ int diffArrowBase = points.point(2).y() - points.point(3).y();
+ double maxValueYPos = maxColumnValue * pixelsPerUnit;
+ double minValueYPos = minColumnValue * pixelsPerUnit;
+ double adjustedArrow = (cellValue == 0 ? minValueYPos - maxValueYPos + diffArrowBase + 2:
+ minValueYPos - maxValueYPos - diffArrowBase + 1);
+ points.setPoint( 0, frontX1, points.point(0).y() + static_cast <int> (adjustedArrow));
+ points.setPoint( 1, frontX2, points.point(1).y() + static_cast <int> (adjustedArrow ));
+ points.setPoint( 2, frontX2, points.point(2).y() + static_cast <int> (adjustedArrow));
+ points.setPoint( 3, xm, points.point(3).y() + static_cast <int> (adjustedArrow));
+ points.setPoint( 4, frontX1, points.point(4).y() + static_cast <int> (adjustedArrow));
+ }
+ /*value < mincolumn value*/
+ if ( cellValue < minColumnValue ) {
+ points.setPoint( 0, frontX1, static_cast <int> ( yZero - maxValueYPos ) );
+ points.setPoint( 1, frontX2, static_cast <int> ( yZero - maxValueYPos ) );
+ }
+
+ }
+
+ /*Pending Michel: case setbarWidth */
+ //adjust the painting in case we have a user given Width allow it
+ //to be larger than the auto calculated width in case we want to overlap
+
+ if ( params()->userWidth() != 0 ) {
+ int userwidth = 0;
+ if ( params()->userWidth() < 0 )
+ userwidth = static_cast <int> (params()->userWidth() * -areaWidthP1000);
+ else
+ userwidth = static_cast <int> (params()->userWidth() * areaWidthP1000);
+ //if ( userwidth < frontBarWidth ) {
+ QRect tmpRect ( points.point(0), points.point(2));
+ points.setPoint(0, static_cast <int>(tmpRect.center().x() - userwidth/2),
+ points.point(0).y());
+ points.setPoint(1, static_cast <int>(tmpRect.center().x() + userwidth/2),
+ points.point(1).y());
+ points.setPoint(2, static_cast <int>(tmpRect.center().x() + userwidth/2),
+ points.point(2).y());
+ points.setPoint(4, static_cast <int>(tmpRect.center().x() - userwidth/2),
+ points.point(4).y());
+ //}
+ }
+ if ( bMultiRows )painter->setClipping( false );
+ painter->drawPolygon( points );
+
+ //correct the y position: displaying position for the value label
+ QPoint tpLeft (points.point(4).x(), points.point(4).y() - 2 * yArrowGap );
+ QPoint tpRight(points.point(2).x(), points.point(2).y() - 2 * yArrowGap );
+
+ //store the front rectangle
+ excessRectNegative.setTopLeft(tpLeft);
+ excessRectNegative.setTopRight(tpRight);
+ excessRectNegative.setBottomRight(points.point(1));
+ excessRectNegative.setBottomLeft(points.point(0));
+
+ // Don't use points for drawing after this!
+ if ( pointArrayList ) {
+ if ( cellValue < 0 ) {
+ //correction for labels vertical position
+ int size = static_cast <int> ( ( points.point( 3 ).y() - tpRight.y() + excessRectNegative.width() )/2 );
+ points.setPoint( 4 ,tpLeft );
+ points.setPoint( 2, tpRight );
+ if ( cellValue < maxColumnValue )
+ points.translate( _dataRect.x(), -_dataRect.y() - size );
+ else
+ points.translate( _dataRect.x(), _dataRect.y() );
+ } else
+ points.translate( _dataRect.x(), _dataRect.y() );
+
+ pointArrayList->append( points );
+ }
+
+ } else {
+ // Draw split excess arrows negatives
+
+ /* PENDING Michel:
+ * Here we have two situations.
+ * The value is too low because over the Min negative value
+ * The value is not within the configured view..
+ */
+ QPointArray points( 5 );
+ /*this works in a positive view -> 200 500*/
+ points.setPoint( 0, frontX1, cellValue < 0 ?
+ static_cast<int>(yZero+height1 - 3.0*delta) + arrowXAxisGap:
+ static_cast<int>( yZero + height1)+(2 * yArrowGap)+ arrowXAxisGap);
+ points.setPoint( 1, frontX2, cellValue < 0 ?
+ static_cast<int>(yZero+height1 - 3.0*delta) + arrowXAxisGap:
+ static_cast<int>( yZero + height1)+(2 * yArrowGap)+ arrowXAxisGap);
+ points.setPoint( 2, frontX2, cellValue < 0 ?
+ static_cast<int>(yZero+height1 - 3.0*delta) + arrowXAxisGap:
+ static_cast<int>( yZero + height1)+(2 * yArrowGap)+ arrowXAxisGap);
+ points.setPoint( 3, xm, cellValue < 0 ?
+ static_cast<int>( yZero + height1) + arrowXAxisGap:
+ static_cast<int>(yZero+height1 - 3.0*delta)+(2 * yArrowGap)+ arrowXAxisGap);
+ points.setPoint( 4, frontX1, cellValue < 0 ?
+ static_cast<int>(yZero+height1 - 3.0*delta) + arrowXAxisGap:
+ static_cast<int>( yZero + height1)+(2 * yArrowGap)+ arrowXAxisGap);
+
+ /* 0 between start and end -> -500 500*/
+ if ( minColumnValue < 0 && maxColumnValue > 0 ) {
+ points.setPoint(0, points.point(0).x(), static_cast <int> (yposNegatives - zeroXAxisI) );
+ points.setPoint(1, points.point(1).x(), static_cast <int> (yposNegatives - zeroXAxisI) );
+ }
+
+ /* negative view -> -200 -500 */
+ if ( minColumnValue < 0 && maxColumnValue < 0 ) {
+ /*value negative or zero > maxColumnValue*/
+ if ( cellValue > maxColumnValue ) {
+ // the view is under Yaxis 0 level
+ // we need to show a symbol for the bars which are over the Yaxis.
+ // calculate the coordinate and direction for the arrow.
+ // arrow downward for negative values and upward for positives value
+ int diffArrowBase = points.point(2).y() - points.point(3).y();
+ double maxValueYPos = maxColumnValue * pixelsPerUnit;
+
+ points.setPoint( 0, frontX1, static_cast <int> ( yZero - maxValueYPos) );
+ points.setPoint( 1, frontX2, static_cast <int> ( yZero - maxValueYPos) );
+ points.setPoint( 2, frontX2, static_cast <int> ( yZero - maxValueYPos) );
+ points.setPoint( 3, xm, static_cast <int> ( yZero - maxValueYPos - diffArrowBase ) );
+ points.setPoint( 4, frontX1, static_cast <int> ( yZero - maxValueYPos) );
+ }
+ /*value < mincolumn value*/
+ if ( cellValue < minColumnValue ) {
+ points.setPoint( 0, frontX1, static_cast <int> ( yZero - maxValueYPos) );
+ points.setPoint( 1, frontX2, static_cast <int> ( yZero - maxValueYPos) );
+ }
+ }
+
+ //Pending Michel adjust the painting in case we have a user given Width
+ //allow it to be larger than the auto calculated width in case we want
+ //to overlap
+ if ( params()->userWidth() != 0 ) {
+ int userwidth = 0;
+ if ( params()->userWidth() < 0 )
+ userwidth = static_cast <int> (params()->userWidth() * -areaWidthP1000);
+ else
+ userwidth = static_cast <int> (params()->userWidth() * areaWidthP1000);
+ //if ( userwidth < frontBarWidth ) {
+ QRect tmpRect ( points.point(0), points.point(2));
+ points.setPoint(0, static_cast <int>(tmpRect.center().x() - userwidth/2),
+ points.point(0).y());
+ points.setPoint(1, static_cast <int>(tmpRect.center().x() + userwidth/2),
+ points.point(1).y());
+ points.setPoint(2, static_cast <int>(tmpRect.center().x() + userwidth/2),
+ points.point(2).y());
+ points.setPoint(4, static_cast <int>(tmpRect.center().x() - userwidth/2),
+ points.point(4).y());
+ }
+ if ( bMultiRows )painter->setClipping( false );
+ painter->drawPolygon( points );
+
+ //correct the y position: displaying position for the value label
+ QPoint tpLeft (points.point(4).x(), points.point(4).y() - 2 * yArrowGap );
+ QPoint tpRight(points.point(2).x(), points.point(2).y() - 2 * yArrowGap );
+
+ //store the excess front rectangle
+ excessRectNegative.setTopLeft(tpLeft);
+ excessRectNegative.setTopRight(tpRight);
+ excessRectNegative.setBottomRight(points.point(1));
+ excessRectNegative.setBottomLeft(points.point(0));
+
+ // Don't use points for drawing after this!
+ if ( pointArrayList ) {
+ if ( cellValue < 0 ) {
+ //calculate correction for labels vertical position
+ int size = static_cast <int> ( ( points.point( 3 ).y() - tpRight.y() + excessRectNegative.width() )/2 );
+ if ( cellValue < maxColumnValue )
+ points.translate( _dataRect.x(), -_dataRect.y() - size );
+ else
+ points.translate( _dataRect.x(), _dataRect.y() + ( 2 * yArrowGap ) );
+ } else
+ points.translate( _dataRect.x(), -_dataRect.y() );
+
+ pointArrayList->append( points );
+ }
+
+ QPointArray points2( 6 );
+ points2.setPoint( 0, frontX1, cellValue < 0 ?
+ static_cast<int>( yZero + height1 - 3.0 * delta ) + arrowXAxisGap:
+ static_cast<int>(yZero + height1) + arrowXAxisGap);
+ points2.setPoint( 1, xm, cellValue < 0 ?
+ static_cast<int>(yZero + height1) + arrowXAxisGap:
+ static_cast<int>( yZero + height1 - 3.0 * delta ) + arrowXAxisGap);
+ points2.setPoint( 2, frontX2, cellValue < 0 ?
+ static_cast<int>(yZero + height1 - 3.0 * delta) + arrowXAxisGap:
+ static_cast<int>(yZero + height1) + arrowXAxisGap);
+ points2.setPoint( 3, frontX2, cellValue < 0 ?
+ static_cast<int>(yZero + height1 - 3.75 * delta) + arrowXAxisGap :
+ static_cast<int>(yZero + height1 - 0.75 * delta) + arrowXAxisGap);
+ points2.setPoint( 4, xm, cellValue < 0 ?
+ static_cast<int>(yZero + height1 - 0.75 * delta) + arrowXAxisGap:
+ static_cast<int>(yZero + height1 - 3.75 * delta) + arrowXAxisGap);
+ points2.setPoint( 5, frontX1, cellValue < 0 ?
+ static_cast<int>(yZero + height1 - 3.75 * delta) + arrowXAxisGap:
+ static_cast<int>(yZero + height1 - 0.75 * delta) + arrowXAxisGap);
+ points2.translate( 0, yArrowGap );
+
+ if ( minColumnValue < 0 && maxColumnValue < 0 && cellValue > maxColumnValue ) {
+ // the view is under Yaxis 0 level
+ // we need to show a symbol for the bars which are over the Yaxis.
+ // calculate the coordinate and direction for the arrow.
+ // arrow downward for negative values and upward for positives value
+ int diffArrowBase = points.point(2).y() - points.point(3).y();
+ double maxValueYPos = maxColumnValue * pixelsPerUnit;
+ double minValueYPos = minColumnValue * pixelsPerUnit;
+ double adjustedArrow = cellValue == 0 ? minValueYPos - maxValueYPos + diffArrowBase:
+ minValueYPos - maxValueYPos - diffArrowBase + 1;
+
+ points2.setPoint( 0, frontX1, points2.point(0).y()
+ + static_cast <int> (adjustedArrow - diffArrowBase + yArrowGap) );
+ points2.setPoint( 1, xm, points2.point(1).y()
+ + static_cast <int> (adjustedArrow - diffArrowBase + yArrowGap) );
+ points2.setPoint( 2, frontX2, points2.point(2).y()
+ + static_cast <int> (adjustedArrow - diffArrowBase + yArrowGap) );
+ points2.setPoint( 3, frontX2, points2.point(3).y()
+ + static_cast <int> (adjustedArrow - diffArrowBase + yArrowGap) );
+ points2.setPoint( 4, xm, points2.point(4).y()
+ + static_cast <int> (adjustedArrow - diffArrowBase + yArrowGap) );
+ points2.setPoint( 5, frontX1, points2.point(5).y()
+ + static_cast <int> (adjustedArrow - diffArrowBase + yArrowGap) );
+ }
+
+ //Pending Michel adjust the painting in case we have a user given Width
+ //allow it to be larger than the auto calculated width in case we want
+ //to overlap
+ if ( params()->userWidth() != 0 ) {
+ int userwidth = 0;
+ if ( params()->userWidth() < 0 )
+ userwidth = static_cast <int> (params()->userWidth() * -areaWidthP1000);
+ else
+ userwidth = static_cast <int> (params()->userWidth() * areaWidthP1000);
+ //if ( userwidth < frontBarWidth ) {
+
+ points2.setPoint(0, excessRectNegative.topLeft().x(),points2.point(0).y());
+ points2.setPoint(2, excessRectNegative.topRight().x(),points2.point(2).y());
+ points2.setPoint(3, excessRectNegative.topRight().x(),points2.point(3).y());
+ points2.setPoint(5, excessRectNegative.topLeft().x(),points2.point(5).y());
+ }
+
+ painter->drawPolygon( points2 );
+
+ /*
+ NOTE: We do NOT want to store the region here, but
+ we use the front rectangle above in order to display the
+ data value labels inside the front rectangle.
+ Disadvantage: clicking onto these excess arrows, will not
+ result in a signal being sent, because KDChartWidget will
+ not notice, that the user has clicked onto the bar.
+ That's a minor drawback, compared to the gain of being
+ able to position the labels correctly.
+ */
+
+ if ( cellValue < 0 )
+ points2.translate( 0, yArrowGap );
+ else
+ points2.translate( 0, -yArrowGap );
+
+ painter->drawPolygon( points2 );
+
+
+ /*
+ NOTE: We do NOT want to store the region here
+ (see comment above)
+ */
+ }
+ }
+ painter->setClipRect( ourClipRect );
+ } /*if (tooLow && bNormalMode)*/
+ else {
+ //
+ // old code (sometimes not touching the grid):
+ //QRect rec( xpos, yZero, frontBarWidth, -barHeight );
+ //painter->drawRect( rec );
+ //
+
+ int pt1Y = static_cast < int > ( yZero - barHeight /*- sideBarsHeight*/ );
+
+ /*
+ if ( cellValue != 0 ) {
+ pt1Y = static_cast <int> (cellValue * pixelsPerUnit * -2);
+ qDebug( "value %s",QString::number(static_cast <int> (cellValue)).latin1());
+ qDebug( "pt1Y %s", QString::number(static_cast <int> (cellValue * pixelsPerUnit * -2)).latin1());
+ }
+ else
+ pt1Y = static_cast < int > ( yZero - barHeight);
+ */
+ calculateXFront1_2( bNormalMode, bIsVeryFirstBar, bIsFirstDataset, _bThreeDBars,
+ xpos, valueBlockGap, datasetGap, frontBarWidth,
+ frontX1, frontX2, prevFrontX2 );
+
+ QPoint pt1( frontX1, pt1Y );
+ QPoint pt2( frontX2,
+ static_cast < int > ( yZero + sideBarHeight) );
+
+ if( 0.0 > maxColumnValue ){
+ pt2.setY(pt2.y() - static_cast < int > (pixelsPerUnit * maxColumnValue));
+ }
+ if( pt2.y() < pt1Y ) {
+ pt1.setY( pt2.y() );
+ pt2.setY( pt1Y );
+ }
+ if( pt2.x() < frontX1 ) {
+ pt1.setX( frontX2 );
+ pt2.setX( frontX1 );
+ }
+ if( bDrawExtraLines ){
+ int y = pt2.y();
+ if( _bThreeDBars )
+ y -= static_cast < int > ( sideBarHeight );
+ drawExtraLinesAndMarkers(
+ propSet,
+ defaultPen,
+ defaultMarkerStyle,
+ (frontX1+frontX2)/2, y,
+ painter,
+ ai.abscissaPara,
+ ordinatePara,
+ areaWidthP1000,
+ logHeight/1000.0,
+ bDrawExtraLinesInFront );
+ }else if( bShowThisBar ){
+
+ QSize siz( pt2.x() - pt1.x(),
+ pt2.y() - pt1.y() );
+ QRect rect( pt1, siz );
+
+ if( 1.5 > frontBarWidth ){
+ QPen oldPen( painter->pen() );
+ painter->setPen( QPen(painter->brush().color(), 0) );
+ painter->drawLine(pt1, QPoint(pt1.x(),pt2.y()));
+ painter->setPen( oldPen );
+ }else{
+ // store the front rect negative
+ if ( tooLow || cellValue < minColumnValue) {
+ frontRectNegative.setTopLeft(excessRectNegative.bottomLeft());
+ frontRectNegative.setTopRight(excessRectNegative.bottomRight());
+ frontRectNegative.setBottomRight(excessRectNegative.topRight());
+ frontRectNegative.setBottomLeft(excessRectNegative.topLeft());
+
+ } else {
+ frontRectNegative.setTopLeft(rect.topLeft());
+ frontRectNegative.setTopRight(rect.topRight());
+ frontRectNegative.setBottomRight(rect.bottomRight());
+ frontRectNegative.setBottomLeft(rect.bottomLeft());
+
+ if ( cellValue == 0 && params()->barChartSubType() == KDChartParams::BarPercent)
+ rect.setTop( rect.bottom());
+ }
+
+ //debug lines and points
+ /*
+ painter->drawLine( rect.topLeft(), rect.topRight());
+ painter->drawLine( rect.topRight(), rect.bottomRight());
+ painter->drawLine( rect.bottomRight(), rect.bottomLeft());
+ painter->drawLine( rect.bottomLeft(), rect.topLeft());
+
+ painter->drawText( frontRectNegative.topLeft(), "0f");
+ painter->drawText( frontRectNegative.topRight(), "1f");
+ painter->drawText( frontRectNegative.bottomRight(), "2f");
+ painter->drawText( frontRectNegative.bottomLeft(), "3f");
+ */
+
+ //Pending Michel adjust the painting in case we have a user given Width
+ //and it is not larger than the auto calculated width
+
+ if ( params()->userWidth() != 0 ) {
+ int userwidth = 0;
+ if ( params()->userWidth() < 0 )
+ userwidth = static_cast <int> (params()->userWidth() * -areaWidthP1000);
+ else
+ userwidth = static_cast <int> (params()->userWidth() * areaWidthP1000);
+ //if ( userwidth < frontBarWidth ) {
+ rect.setLeft( static_cast <int> (rect.center().x() - (userwidth/2)));
+ rect.setRight( static_cast <int> (rect.center().x() + (userwidth/2)));
+ rect.setWidth( static_cast <int> (userwidth) );
+ frontRectNegative.setLeft( tooLow || cellValue < minColumnValue ?
+ static_cast <int> (excessRectNegative.center().x() - (userwidth/2)):rect.left());
+ frontRectNegative.setRight( tooHigh ? static_cast <int> (excessRectNegative.center().x() + (userwidth/2)):rect.right());
+ }
+ //drawing the front size negative values
+ if ( cellValue != 0 && params()->barChartSubType() != KDChartParams::BarPercent) {
+ painter->setClipping( false );
+ painter->drawRect( rect );
+ }
+ }
+ // Don't use rect for drawing after this!
+ if ( pointArrayList ) {
+ rect.moveBy( _dataRect.x(), _dataRect.y() );
+ pointArrayList->append( rectToPointArray( rect ) );
+ }
+ }
+ }
+ } else {
+ //
+ // Positive values:
+ //
+ /*Pending Michel: all values under the min value are handled as negative*/
+
+ double maxValueYPos = maxColumnValue * pixelsPerUnit;
+ double minValueYPos = minColumnValue * pixelsPerUnit;
+ double minDataValueYPos = maxValueYPos - minValueYPos;
+ double yZero = yposPositives - zeroXAxisI;
+ //qDebug( "yposPositives %f - zeroXAxisI %f = %f" , yposPositives, zeroXAxisI, yZero );
+ //qDebug( "yZero %s", QString::number( yZero ).latin1());
+ //qDebug( "minDataValueYPos = %s", QString::number( minDataValueYPos).latin1());
+ //qDebug( "positive value %s", QString::number( cellValue).latin1());
+ //Pending Michel: draw the default split excess arrows
+ //when the front top of the 3d chart reach the max Y value
+
+ if(!_bThreeDBars)
+ tooHigh = ( barHeight > maxValueYPos*1.001 ) || ( cellValue < minColumnValue );
+ else {
+ //calculate the Y position for the top front line
+ //if it is over the max height pos - tooHigh becomes true
+ if ( params()->barChartSubType()!= KDChartParams::BarStacked ) {
+ int dataValueYPos = static_cast <int>( ( cellValue * pixelsPerUnit ) );
+ tooHigh = dataValueYPos > maxValueYPos;
+ } else {
+ tooHigh = maxValueInThisColumn > maxColumnValue;
+ }
+ }
+
+ if ( tooHigh && bNormalMode ||
+ tooHigh && params()->barChartSubType()== KDChartParams::BarStacked
+ || tooHigh && bMultiRows ) {
+
+ double delta = -0.0125 * logHeight;
+ double height = -1.0 * yZero
+ - 2.0 * delta;
+ double height1 = height + -3.0 * delta;
+
+ int yArrowGap = static_cast < int > ( 2.5 * delta );
+ calculateXFront1_2( bNormalMode, bIsVeryFirstBar, bIsFirstDataset, _bThreeDBars,
+ xpos, valueBlockGap, datasetGap, frontBarWidth,
+ frontX1, frontX2, prevFrontX2 );
+
+ const int xm = static_cast < int > ( ( frontX1 + frontX2 ) / 2.0 );
+ QRect rect( ourClipRect );
+
+ rect.setTop( static_cast<int>( rect.top() + 3 * delta ) );
+ rect.setHeight( static_cast<int>( rect.height() - 3 * delta ) );
+ painter->setClipRect( rect );
+
+ if( bDrawExtraLines ){
+ drawExtraLinesAndMarkers(
+ propSet,
+ defaultPen,
+ defaultMarkerStyle,
+ xm, static_cast<int>( yZero + height1 ),
+ painter,
+ ai.abscissaPara,
+ ordinatePara,
+ areaWidthP1000,
+ logHeight/1000.0,
+ bDrawExtraLinesInFront );
+ }else if( bShowThisBar ){
+ if( params()->drawSolidExcessArrows() ) {
+ // Draw solid excess arrows
+ QPointArray points( 5 );
+ /*this works for positive config and 0 include config*/
+ points.setPoint( 0, frontX1,
+ (minDataValueYPos < static_cast <int> (yZero))?
+ static_cast <int> (minDataValueYPos-1):static_cast <int>(yZero));
+ points.setPoint( 1, frontX2,
+ (minDataValueYPos < static_cast <int> (yZero))?
+ static_cast <int> (minDataValueYPos-1):static_cast <int>(yZero));
+ points.setPoint( 2, frontX2, static_cast<int>( yZero + height1 - 3.0 * delta )
+ + 2 * yArrowGap );
+ points.setPoint( 3, xm, static_cast<int>( yZero + height1 )
+ + 2 * yArrowGap );
+ points.setPoint( 4, frontX1, static_cast<int>( yZero + height1 - 3.0 * delta )
+ + 2 * yArrowGap );
+
+ /*case where start and end value are negatives */
+ if ( cellValue > maxColumnValue && 0 >= maxColumnValue ) {
+ points.setPoint( 0, frontX1,static_cast<int>( yZero + height1 - 3.0 * delta ) + 2 * yArrowGap);
+ points.setPoint( 1, frontX2,static_cast<int>( yZero + height1 - 3.0 * delta ) + 2 * yArrowGap);
+ }
+
+ //Pending Michel adjust the painting in case we have a user given Width
+ //allow it to be larger than the auto calculated width in case we want
+ //to overlap
+ if ( params()->userWidth() != 0 ) {
+ int userwidth = 0;
+ if ( params()->userWidth() < 0 )
+ userwidth = static_cast <int> (params()->userWidth() * -areaWidthP1000);
+ else
+ userwidth = static_cast <int> (params()->userWidth() * areaWidthP1000);
+ //if ( userwidth < frontBarWidth ) {
+ QRect tmpRect ( points.point(0), points.point(2));
+ points.setPoint(0, static_cast <int>(tmpRect.center().x() - userwidth/2),
+ points.point(0).y());
+ points.setPoint(1, static_cast <int>(tmpRect.center().x() + userwidth/2),
+ points.point(1).y());
+ points.setPoint(2, static_cast <int>(tmpRect.center().x() + userwidth/2),
+ points.point(2).y());
+ points.setPoint(4, static_cast <int>(tmpRect.center().x() - userwidth/2),
+ points.point(4).y());
+ //}
+ }
+ if ( params()->barChartSubType() != KDChartParams::BarStacked ||
+ params()->barChartSubType() == KDChartParams::BarStacked && dataset != datasetEnd ) {
+ //drawing a single front in case it is too high
+ painter->setClipping( false );
+ painter->drawPolygon( points );
+ }
+ //correct the y position: displaying position for the value label
+ QPoint tpLeft (points.point(4).x(), static_cast <int> (points.point(4).y() - yArrowGap));
+ QPoint tpRight(points.point(2).x(), static_cast <int> (points.point(2).y() - yArrowGap));
+
+ //debugging points
+ /*
+ painter->drawText( points.point(0), "p0");
+ painter->drawText( points.point(1), "p1");
+ painter->drawText( points.point(2), "p2");
+ painter->drawText( points.point(3), "p3");
+ */
+ //store the front rectangle
+ excessRectPositive.setTopLeft(tpLeft);
+ excessRectPositive.setTopRight(tpRight);
+ excessRectPositive.setBottomRight(points.point(1));
+ excessRectPositive.setBottomLeft(points.point(0));
+
+ // Don't use points for drawing after this!
+ if ( pointArrayList && params()->barChartSubType() != KDChartParams::BarStacked ) {
+ points.translate( _dataRect.x(), _dataRect.y() + excessRectPositive.top() - yArrowGap );
+ pointArrayList->append( points );
+ } else if ( params()->barChartSubType() == KDChartParams::BarStacked ) {
+ if ( dataset != datasetEnd ) {
+ points.translate( _dataRect.x(), _dataRect.y() + excessRectPositive.top() );
+ pointArrayList->append( points );
+ } else {
+ //adjust the display of the value label under Y max value level
+ points.translate( _dataRect.x(), _dataRect.y() - excessRectPositive.bottom() - yArrowGap);
+ pointArrayList->append( points );
+ }
+ }
+ } else {
+
+ // Draw split excess arrows (default)
+ /* PENDING Michel:
+ * Here we have two situations.
+ * The value is too high because over the Max positive value
+ * or it is not within the configured view.
+ */
+ QPointArray points( 5 );
+ /*this works for positive config and 0 include config*/
+ points.setPoint( 0, frontX1,
+ (minDataValueYPos < static_cast <int> (yZero))?
+ static_cast <int> (minDataValueYPos - 1) : static_cast <int>(yZero));
+ points.setPoint( 1, frontX2,
+ (minDataValueYPos < static_cast <int> (yZero))?
+ static_cast<int> ( minDataValueYPos - 1) : static_cast <int>(yZero));
+ points.setPoint( 2, frontX2, static_cast<int>( yZero + height1 - 3.0 * delta ) );
+ points.setPoint( 3, xm, static_cast<int>( yZero + height1 ) );
+ points.setPoint( 4, frontX1, static_cast<int>( yZero + height1 - 3.0 * delta ) );
+
+ /*case where start and end value are negatives */
+ if ( cellValue > maxColumnValue && 0 >= maxColumnValue || cellValue == 0) {
+ points.setPoint( 0, frontX1, static_cast<int>( yZero + height1 - 3.0 * delta ));
+ points.setPoint( 1, frontX2, static_cast<int>( yZero + height1 - 3.0 * delta ));
+ }
+
+ //Pending Michel adjust the painting in case we have a user given Width
+ //allow it to be larger than the auto calculated width in case we want
+ //to overlap
+ if ( params()->userWidth() != 0 ) {
+ int userwidth = 0;
+ if ( params()->userWidth() < 0 )
+ userwidth = static_cast <int> (params()->userWidth() * -areaWidthP1000);
+ else
+ userwidth = static_cast <int> (params()->userWidth() * areaWidthP1000);
+ //if ( userwidth < frontBarWidth ) {
+ QRect tmpRect ( points.point(0), points.point(2));
+ points.setPoint(0, static_cast <int>(tmpRect.center().x() - userwidth/2),
+ points.point(0).y());
+ points.setPoint(1, static_cast <int>(tmpRect.center().x() + userwidth/2),
+ points.point(1).y());
+ points.setPoint(2, static_cast <int>(tmpRect.center().x() + userwidth/2),
+ points.point(2).y());
+ points.setPoint(4, static_cast <int>(tmpRect.center().x() - userwidth/2),
+ points.point(4).y());
+ //}
+ }
+ if ( params()->barChartSubType() != KDChartParams::BarStacked ||
+ params()->barChartSubType() == KDChartParams::BarStacked && dataset != datasetEnd ) {
+ painter->setClipping( false );
+ painter->drawPolygon( points );
+ }
+
+ //store the front rectangle
+ excessRectPositive.setTopLeft(points.point(4));
+ excessRectPositive.setTopRight(points.point(2));
+ excessRectPositive.setBottomRight(points.point(1));
+ excessRectPositive.setBottomLeft(points.point(0));
+
+ // Don't use points for drawing after this!
+ if ( pointArrayList && params()->barChartSubType() != KDChartParams::BarStacked ) {
+ points.translate( _dataRect.x(), _dataRect.y() + excessRectPositive.top() );
+ pointArrayList->append( points );
+ } else if ( params()->barChartSubType() == KDChartParams::BarStacked ) {
+ if ( dataset != datasetEnd ) {
+ points.translate( _dataRect.x(), _dataRect.y() + excessRectPositive.top() );
+ pointArrayList->append( points );
+ } else {
+ //adjust the display of the value label under Y max value level
+ points.translate( _dataRect.x(), _dataRect.y() - excessRectPositive.bottom() - yArrowGap);
+ pointArrayList->append( points );
+ }
+ }
+
+ QPointArray points2( 6 );
+ points2.setPoint( 0, frontX1, static_cast<int>( yZero + height1 - 3.0 * delta ) );
+ points2.setPoint( 1, xm, static_cast<int>( yZero + height1 ) );
+ points2.setPoint( 2, frontX2, static_cast<int>( yZero + height1 - 3.0 * delta ) );
+ points2.setPoint( 3, frontX2, static_cast<int>( yZero + height1 - 3.75 * delta ) );
+ points2.setPoint( 4, xm, static_cast<int>( yZero + height1 - 0.75 * delta ) );
+ points2.setPoint( 5, frontX1, static_cast<int>( yZero + height1 - 3.75 * delta ) );
+ points2.translate( 0, yArrowGap );
+
+ //Pending Michel adjust the painting in case we have a user given Width
+ //allow it to be larger than the auto calculated width in case we want
+ //to overlap
+ if ( params()->userWidth() != 0 ) {
+ int userwidth = 0;
+ if ( params()->userWidth() < 0 )
+ userwidth = static_cast <int> (params()->userWidth() * -areaWidthP1000);
+ else
+ userwidth = static_cast <int> (params()->userWidth() * areaWidthP1000);
+ //if ( userwidth < frontBarWidth ) {
+ points2.setPoint(0, excessRectPositive.topLeft().x(),points2.point(0).y());
+ points2.setPoint(2, excessRectPositive.topRight().x(),points2.point(2).y());
+ points2.setPoint(3, excessRectPositive.topRight().x(),points2.point(3).y());
+ points2.setPoint(5, excessRectPositive.topLeft().x(),points2.point(5).y());
+ //}
+ }
+
+ painter->drawPolygon( points2 );
+ /*
+ NOTE: We do NOT want to store the region here, but
+ we use the front rectangle above in order to display the
+ data value labels inside the front rectangle.
+ Disadvantage: clicking onto these excess arrows, will not
+ result in a signal being sent, because KDChartWidget will
+ not notice, that the user has clicked onto the bar.
+ That's a minor drawback, compared to the gain of being
+ able to position the labels correctly.
+ */
+ points2.translate( 0, yArrowGap );
+ painter->drawPolygon( points2 );
+ /*
+ NOTE: We do NOT want to store the region here
+ (see comment above)
+ */
+ } // draw split excess arrow
+ } //if( bShowThisBar )
+
+ painter->setClipRect( ourClipRect );
+ } // not tooLow && bNormalMode )
+ else {
+ //bool fromBottom = bNormalMode && !_bThreeDBars;
+ double y0 = yposPositives - zeroXAxisI;
+
+ int pt1Y = static_cast < int > ( y0 - barHeight - sideBarHeight);
+
+ calculateXFront1_2( bNormalMode, bIsVeryFirstBar, bIsFirstDataset, _bThreeDBars,
+ xpos, valueBlockGap, datasetGap, frontBarWidth,
+ frontX1, frontX2, prevFrontX2 );
+
+ QPoint pt1( frontX1, pt1Y );
+ QPoint pt2( frontX2,
+ static_cast < int > ( y0 + shiftUpperBars ) );
+
+ if( 0.0 < minColumnValue )
+ pt2.setY(pt2.y() - static_cast < int > ( pixelsPerUnit * minColumnValue ));
+
+ if( pt2.y() < pt1Y ) {
+ pt1.setY( pt2.y() );
+ pt2.setY( pt1Y );
+ }
+ if( pt2.x() < frontX1 ) {
+ pt1.setX( frontX2 );
+ pt2.setX( frontX1 );
+ }
+ if( bDrawExtraLines ){
+ int y = pt1.y();
+ if( _bThreeDBars )
+ y -= static_cast < int > ( sideBarHeight );
+
+ drawExtraLinesAndMarkers(
+ propSet,
+ defaultPen,
+ defaultMarkerStyle,
+ (frontX1+frontX2)/2, y,
+ painter,
+ ai.abscissaPara,
+ ordinatePara,
+ areaWidthP1000,
+ logHeight/1000.0,
+ bDrawExtraLinesInFront );
+ }else if( bShowThisBar ){
+
+ QSize siz( pt2.x() - pt1.x(),
+ pt2.y() - pt1.y());
+
+ QRect rect( pt1, siz );
+
+ //adjust display for the 3d percent bars - last dataset.
+ if ( params()->barChartSubType() == KDChartParams::BarPercent && cellValue != 0)
+ rect.setTop( rect.top() + static_cast <int> (sideBarHeight) - 1);
+
+ // store the front rect
+ if( tooHigh ) {
+ frontRectPositive.setTopLeft(excessRectPositive.topLeft());
+ frontRectPositive.setTopRight(excessRectPositive.topRight());
+ frontRectPositive.setBottomRight(excessRectPositive.bottomRight());
+ frontRectPositive.setBottomLeft(excessRectPositive.bottomLeft());
+ } else {
+ frontRectPositive.setTopLeft(rect.topLeft());
+ frontRectPositive.setTopRight(rect.topRight());
+ frontRectPositive.setBottomRight(rect.bottomRight());
+ frontRectPositive.setBottomLeft(rect.bottomLeft());
+ if( _bThreeDBars && cellValue == 0 )
+ frontRectNegative = frontRectPositive;
+ }
+
+ if( 1.5 > frontBarWidth ){
+ //qDebug("1.5 > frontBarWidth ");
+ QPen oldPen( painter->pen() );
+ painter->setPen( QPen(painter->brush().color(), 0) );
+ painter->drawLine(pt1, QPoint(pt1.x(),pt2.y()));
+ painter->setPen( oldPen );
+ }else{
+ //debugging points and lines
+ /*
+ painter->drawText( rect.topLeft(), QString::number(cellValue).latin1());
+ painter->drawText( rect.topRight(), "1f");
+ painter->drawText( rect.bottomRight(), "2f");
+ painter->drawText( rect.bottomLeft(), "3f");
+ painter->drawLine( rect.topLeft(), rect.topRight());
+ painter->drawLine( rect.topRight(), rect.bottomRight());
+ painter->drawLine( rect.bottomRight(), rect.bottomLeft());
+ painter->drawLine( rect.bottomLeft(), rect.topLeft());
+ */
+
+ //Pending Michel adjust the painting in case we have a user given Width
+ //allow it to be larger than the auto calculated width in case we want
+ //to overlap
+ if ( params()->userWidth() != 0 ) {
+ int userwidth = 0;
+ if ( params()->userWidth() < 0 )
+ userwidth = static_cast <int> (params()->userWidth() * -areaWidthP1000);
+ else
+ userwidth = static_cast <int> (params()->userWidth() * areaWidthP1000);
+ //if ( userwidth < frontBarWidth ) {
+ rect.setLeft( static_cast <int> (rect.center().x() - (userwidth/2)));
+ rect.setRight( static_cast <int> (rect.center().x() + (userwidth/2)));
+ rect.setWidth( static_cast <int> (userwidth) );
+ //adjust the front rect
+ frontRectPositive.setLeft( tooHigh ? static_cast <int> (excessRectPositive.center().x() - (userwidth/2)):rect.left());
+ frontRectPositive.setRight( tooHigh ? static_cast <int> (excessRectPositive.center().x() + (userwidth/2)):rect.right());
+ }
+
+ // drawing the front side
+ if (!tooHigh && !tooLow || params()->barChartSubType() == KDChartParams::BarPercent ) {
+ if ( bMultiRows )
+ painter->setClipping( false );
+ else
+ painter->setClipping( true );
+ painter->drawRect( rect );
+ }
+ // Don't use rect for drawing after this
+ if ( pointArrayList ) {
+ rect.moveBy( _dataRect.x(), _dataRect.y());
+ pointArrayList->append( rectToPointArray( rect ) );
+ }
+ }
+ } // bShowThisBar
+ } // positive values
+ }
+ if ( bShowThisBar && _bThreeDBars && !bDrawExtraLines ) {
+ //Pending Michel: no need to use that anymore
+ //const int maxY = 2*devRect.height();
+ QPointArray points( 4 );
+ if (cellValue <= 0 || cellValue < minColumnValue) {
+ if ( tooLow || cellValue < minColumnValue ) {
+ points.setPoint(0, excessRectNegative.topRight());
+ points.setPoint(1, excessRectNegative.topRight().x() + static_cast<int>(sideBarHeight),
+ excessRectNegative.top() - static_cast<int>(sideBarHeight));
+ points.setPoint(2, excessRectNegative.bottomRight().x() + static_cast<int>(sideBarHeight),
+ excessRectNegative.bottom() - static_cast<int>(sideBarHeight));
+ points.setPoint(3, excessRectNegative.bottomRight());
+ } else {
+ points.setPoint( 0, frontRectNegative.bottomRight());
+ points.setPoint( 1, frontRectNegative.bottomRight().x() + static_cast<int>(sideBarHeight),
+ frontRectNegative.bottom() - static_cast<int>(sideBarHeight) );
+ points.setPoint(2, frontRectNegative.bottomRight().x() + static_cast<int>(sideBarHeight),
+ frontRectNegative.top() - static_cast<int>(sideBarHeight));
+ points.setPoint(3, frontRectNegative.topRight() );
+ }
+
+ rightRectNegative.setTopLeft( points.point(0));
+ rightRectNegative.setTopRight( points.point(2));
+ rightRectNegative.setBottomRight(points.point(1));
+ rightRectNegative.setBottomLeft(points.point(3));
+
+ } else {
+ // Pending Michel
+ // Make sure to align the right side top and bottom points
+ // to the front side points
+ if ( tooHigh ) {
+ points.setPoint(0, excessRectPositive.topRight());
+ points.setPoint(1, excessRectPositive.topRight().x() + static_cast <int> (sideBarHeight),
+ excessRectPositive.top() - static_cast <int> (sideBarHeight) );
+ points.setPoint(2, excessRectPositive.bottomRight().x() + static_cast <int> (sideBarHeight),
+ excessRectPositive.bottom() - static_cast <int> (sideBarHeight));
+ points.setPoint(3, excessRectPositive.bottomRight());
+ } else {
+ points.setPoint(0, frontRectPositive.topRight());
+ points.setPoint(1, frontRectPositive.topRight().x() + static_cast <int> (sideBarHeight),
+ frontRectPositive.top() - static_cast<int>(sideBarHeight));
+ points.setPoint(2, frontRectPositive.bottomRight().x() + static_cast <int> (sideBarHeight),
+ frontRectPositive.bottom() - static_cast<int>(sideBarHeight));
+ points.setPoint(3, frontRectPositive.bottomRight());
+ }
+ //register the right rect
+ rightRectPositive.setTopLeft( points.point(0));
+ rightRectPositive.setTopRight( points.point(1));
+ rightRectPositive.setBottomLeft( points.point(3));
+ rightRectPositive.setBottomRight(points.point(2));
+ }
+
+ if ( myShadow2Color.isValid() )
+ painter->setBrush( QBrush( myShadow2Color, params()->shadowPattern() ) );
+ else
+ painter->setBrush( NoBrush );
+
+ //debug points and lines
+ /*
+ painter->drawText( points.point(0), "0r");
+ painter->drawText( points.point(1), "1r");
+ painter->drawText( points.point(2), "2r");
+ painter->drawText( points.point(3), "3r");
+
+ painter->drawLine( points.point(0), points.point(1));
+ painter->drawLine( points.point(1), points.point(2));
+ painter->drawLine( points.point(2), points.point(3));
+ painter->drawLine( points.point(3), points.point(0));
+ */
+
+ //drawing the right side
+ if( (!tooHigh && !tooLow) || (tooHigh && cellValue <= 0 ) ) {
+ if (( cellValue != 0 && params()->barChartSubType() == KDChartParams::BarPercent ) ||
+ ( cellValue != 0 && params()->barChartSubType() == KDChartParams::BarStacked ) ||
+ ( cellValue != 0 && bNormalMode ||
+ cellValue != 0 && bMultiRows)) {
+ painter->setClipping( false );
+ painter->drawPolygon( points );
+ }
+ }
+
+ // Dont override the region stored in case of excess values or barPercent this in order to display
+ // the value labels closer to the corner of the front bar.
+ if ( pointArrayList && !tooHigh && !tooLow && params()->barChartSubType() != KDChartParams::BarPercent ) {
+ QPointArray points2cpy( points.copy() );
+ //qDebug("g2");
+ points2cpy.translate( _dataRect.x(), _dataRect.y());
+ //qDebug("g3");
+ pointArrayList->append( points2cpy );
+ //qDebug("g4");
+ }
+
+ // drawing the top, but only for the topmost piece for stacked and percent
+ if ( bNormalMode || bMultiRows ||
+ // For stacked and percent bars, there are three ways to determine
+ // the top:
+ // 1. all values are negative: the top is the one in the first dataset
+ ( maxValueInThisColumn <= 0.0 && dataset == firstValidValue ) ||
+ // 2. all values are positive: the top is the one in the last dataset
+ ( minValueInThisColumn >= 0.0 && dataset == lastValidPositiveValue ) ||
+ // 3. some values are positive, some negative:
+ // the top is the one in the last positive
+ // dataset value
+ ( dataset == lastValidPositiveValue ) ) {
+ if (cellValue <= 0 || cellValue < minColumnValue) {
+ if ( tooLow ) {
+ points.setPoint(0,excessRectNegative.bottomLeft());
+ points.setPoint(1,excessRectNegative.topLeft().x() + static_cast <int> (sideBarHeight),
+ excessRectNegative.bottom() - static_cast <int> (sideBarHeight));
+ points.setPoint(2,excessRectNegative.bottomRight().x() + static_cast <int> (sideBarHeight),
+ excessRectNegative.bottom() - static_cast <int> (sideBarHeight));
+ points.setPoint(3,excessRectNegative.bottomRight());
+ }else {
+ // Align the top to the front and the right side
+ points.setPoint(0,frontRectNegative.topLeft() );
+ points.setPoint(1,frontRectNegative.topLeft().x() + static_cast <int> (sideBarHeight), rightRectNegative.top());
+ points.setPoint(2,rightRectNegative.topRight() );
+ points.setPoint(3,rightRectNegative.topRight().x() - static_cast <int> (sideBarHeight),
+ frontRectNegative.topRight().y() );
+ //make sure the top rect color is the right one - barStacked - Noll values
+ if ( (params()->barChartSubType() == KDChartParams::BarStacked && cellValue == 0 && maxValueInThisColumn != 0 ) )
+ points.translate(0, maxValueInThisColumn <= 0?-(static_cast <int> (1*pixelsPerUnit) + 1):
+ -static_cast<int>(maxValueInThisColumn*pixelsPerUnit));
+
+ if ( params()->barChartSubType() == KDChartParams::BarPercent && cellValue == 0 ) {
+ if ( dataset == datasetEnd && maxValueInThisColumn != 0)
+ points.translate(0, -static_cast<int>( logHeight - sideBarHeight ));
+ else if ( maxValueInThisColumn == 0)
+ points.translate(0, static_cast <int> (logHeight + (sideBarHeight - sideBarWidth)));
+ }
+ }
+ } else {
+ if ( tooHigh ) {
+ points.setPoint(0, excessRectPositive.topLeft());
+ points.setPoint(1, excessRectPositive.topLeft().x() + static_cast <int> (sideBarHeight),
+ excessRectPositive.top() - static_cast <int> (sideBarHeight) );
+ points.setPoint(2, excessRectPositive.topRight().x() + static_cast <int> (sideBarHeight),
+ excessRectPositive.top() - static_cast <int> (sideBarHeight));
+ points.setPoint(3, excessRectPositive.topRight());
+ } else {
+ // Pending Michel
+ // Align the top to the front and the right side
+ points.setPoint(0, frontRectPositive.topLeft());
+ points.setPoint(1, frontRectPositive.topLeft().x() + static_cast <int> (sideBarHeight),
+ rightRectPositive.top() );
+ points.setPoint(2, rightRectPositive.topRight());
+ points.setPoint(3, rightRectPositive.topRight().x() - static_cast <int> (sideBarHeight),
+ frontRectPositive.topRight().y());
+ }
+ }
+
+ if (cellValue < 0.0 && maxValueInThisColumn < 0)
+ painter->setBrush( bMultiRows ? myBarColor : black );
+ else
+ painter->setBrush( QBrush( myShadow1Color, params()->shadowPattern() ) );
+
+ if ( !myShadow1Color.isValid() )
+ painter->setBrush( NoBrush ); // override prev. setting
+ // debug points and lines
+ /*
+ painter->drawText( points.point(0), "0t");
+ painter->drawText( points.point(1), "1t");
+ painter->drawText( points.point(2), "2t");
+ painter->drawText( points.point(3), "3t");
+
+ painter->drawLine( points.point(0), points.point(1) );
+ painter->drawLine( points.point(1),points.point(2) );
+ painter->drawLine( points.point(2),points.point(3) );
+ painter->drawLine( points.point(3),points.point(0) );
+ */
+
+ // drawing the top side
+ if (!tooHigh && !tooLow || (tooHigh && cellValue <= 0) )
+ painter->drawPolygon( points );
+
+ // dont override the region stored in case of excess values.
+ if (pointArrayList && !tooHigh && !tooLow
+ && params()->barChartSubType() != KDChartParams::BarPercent
+ && params()->barChartSubType() != KDChartParams::BarStacked) {
+ points.translate( _dataRect.x(), _dataRect.y());
+ pointArrayList->append( points );
+ }
+ }
+ }//if ( _bThreeDBars )
+
+ if( regions && pointArrayList && ! pointArrayList->empty() ) {
+ if( bShowThisBar && !bDrawExtraLines ){
+ KDChartDataRegion * region;
+ if( _bThreeDBars ){
+ region = new KDChartDataRegion( dataset, value, chart,
+ pointArrayList, true );
+ } else {
+ // just store a rectangle if NOT in 3-D bar mode
+ region = new KDChartDataRegion( dataset, value, chart,
+ pointArrayList->first().boundingRect() );
+ delete pointArrayList;
+ }
+ /*qDebug("KDChartDataRegion stored! x: %i y: %i w: %i h: %i",
+ region->rect().x(),region->rect().y(),
+ region->rect().width(),region->rect().height());*/
+ regions->append( region );
+ } else {
+ delete pointArrayList;
+ }
+ }
+ }// if( !bDrawExtraLines || bCellPropertiesFound )
+ }// if( !skipMe )
+ }else{
+ // Do not paint a bar, but update the position
+ // variable: to find the exact x1 position for
+ // the next bar that will be drawn.
+ int iDummy1, iDummy2;
+ calculateXFront1_2( bNormalMode, bIsVeryFirstBar, bIsFirstDataset, _bThreeDBars,
+ xpos, valueBlockGap, datasetGap, frontBarWidth,
+ iDummy1, iDummy2, prevFrontX2 );
+ }// if( dataset >= datasetStart && dataset <= datasetEnd )
+
+ // Vertical advancement in stacked or percent only if there was a value
+ // Pending Michel add sideBarHeight in case we are in 3D mode but not for Percent
+ // where we need to display the top rect but cant resize the YAxis.
+ if ( params()->barChartSubType() == KDChartParams::BarStacked ||
+ params()->barChartSubType() == KDChartParams::BarPercent )
+ if ( /*barHeight*/ cellValue < 0 )
+ (_bThreeDBars && params()->barChartSubType() != KDChartParams::BarPercent)?yposNegatives -= sideBarHeight + barHeight:
+ yposNegatives -= barHeight;
+ else
+ (_bThreeDBars && params()->barChartSubType() != KDChartParams::BarPercent)?yposPositives -= sideBarHeight + barHeight:
+ yposPositives -= barHeight;
+
+ } else {
+ // Do not paint a bar, but update the position
+ // variable: to find the exact x1 position for
+ // the next bar that will be drawn.
+ int iDummy1, iDummy2;
+ calculateXFront1_2( bNormalMode, bIsVeryFirstBar, bIsFirstDataset, _bThreeDBars,
+ xpos, valueBlockGap, datasetGap, frontBarWidth,
+ iDummy1, iDummy2, prevFrontX2 );
+ }
+
+
+ // advance only if the next dataset has DataEntry mode
+ bool bAdvanceToNextValue =
+ ( bMultiRows ? (dataset == chartDatasetStart) : (dataset == chartDatasetEnd)
+ || ( params()->chartSourceMode( bMultiRows ? dataset-1 : dataset+1 )
+ == KDChartParams::DataEntry ) );
+ // Advance to next value; only for normal bars
+ if ( bNormalMode ) {
+ if( bAdvanceToNextValue )
+ xpos += barWidth;
+ // skip gap between datasets, unless last dataset
+ if ( dataset < myLastDataEntryDataset )
+ xpos += datasetGap;
+ }
+ if( bAdvanceToNextValue || bMultiRows ){
+ //qDebug("shiftMyPainter( -nShiftX, nShiftY );");
+ shiftMyPainter( -nShiftX, nShiftY );
+ }
+ bIsVeryFirstBar = false;
+ bIsFirstDataset = false;
+ }
+
+
+ // Advancement between value blocks
+ if ( bNormalMode ){
+ // skip gap between value blocks, don't worry about last one here
+ xpos += valueBlockGap;
+ //qDebug("**************************** xpos: %f + valueBlockGap: %f = %f", xpos, valueBlockGap, xpos+valueBlockGap);
+ }else{
+ // skip gap between value blocks
+ xpos += valueBlockGap + barWidth;
+ //qDebug ( "2/ barWidth %f", barWidth );
+ //qDebug ( " valueBlockGap %f", valueBlockGap );
+ // start at bottom with next value group
+ yposPositives = yposPositivesStart;
+ yposNegatives = yposNegativesStart;
+ }
+ //qDebug("shiftMyPainterBack");
+ shiftMyPainterBack();
+ }
+
+ }
+
+
+ if( bMultiRows )
+ painter->setClipping( bHadClipping );
+}
diff --git a/libkdchart/KDChartBarPainter.h b/libkdchart/KDChartBarPainter.h
new file mode 100644
index 0000000..10b0e05
--- /dev/null
+++ b/libkdchart/KDChartBarPainter.h
@@ -0,0 +1,86 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTBARPAINTER_H__
+#define __KDCHARTBARPAINTER_H__
+
+#include "KDChartAxesPainter.h"
+#include <KDChartTable.h>
+
+#include <qnamespace.h>
+
+class KDChartParams;
+
+class KDChartBarPainter : public KDChartAxesPainter, public Qt
+{
+ friend class KDChartPainter;
+ protected:
+ KDChartBarPainter( KDChartParams* params );
+ virtual ~KDChartBarPainter();
+
+ /*
+ virtual void paintData( QPainter* painter,
+ KDChartTableDataBase* data,
+ bool paint2nd,
+ KDChartDataRegionList* regions );
+ */
+ virtual bool isNormalMode() const;
+ virtual int clipShiftUp( bool normalMode, double areaWidthP1000 ) const;
+ virtual void specificPaintData( QPainter* painter,
+ const QRect& ourClipRect,
+ KDChartTableDataBase* data,
+ KDChartDataRegionList* regions,
+ const KDChartAxisParams* axisPara,
+ bool bNormalMode,
+ uint chart,
+ double logWidth,
+ double areaWidthP1000,
+ double logHeight,
+ double axisYOffset,
+ double minColumnValue,
+ double maxColumnValue,
+ double columnValueDistance,
+ uint chartDatasetStart,
+ uint chartDatasetEnd,
+ uint datasetStart,
+ uint datasetEnd );
+ virtual void calculateXFront1_2( bool bNormalMode, bool bIsVeryFirstBar, bool bIsFirstDataset, bool _bThreeDBars,
+ double xpos, double valueBlockGap, double datasetGap, double frontBarWidth,
+ int& frontX1, int& frontX2, int& previousFrontX2 );
+ private:
+ void initMyPainter( QPainter* painter );
+ void shiftMyPainter( double dx, double dy );
+ void shiftMyPainterBack();
+ QPainter* _myPainter;
+ double _painterDX;
+ double _painterDY;
+ bool _bThreeDBars;
+ double _areaP1000;
+};
+
+#endif
diff --git a/libkdchart/KDChartBaseSeries.cpp b/libkdchart/KDChartBaseSeries.cpp
new file mode 100644
index 0000000..c2c8d6d
--- /dev/null
+++ b/libkdchart/KDChartBaseSeries.cpp
@@ -0,0 +1,39 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+
+
+#include "KDChartBaseSeries.h"
+
+/**
+ Destructor. Does nothing, only defined to have it virtual.
+ */
+KDChartBaseSeries::~KDChartBaseSeries()
+{
+ // this bloc left empty intentionally
+}
diff --git a/libkdchart/KDChartBaseSeries.h b/libkdchart/KDChartBaseSeries.h
new file mode 100644
index 0000000..5b615ee
--- /dev/null
+++ b/libkdchart/KDChartBaseSeries.h
@@ -0,0 +1,60 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTBASESERIES_H__
+#define __KDCHARTBASESERIES_H__
+
+// A single data series abstracted.
+// Is included in a DataSeriesBag.
+// Will be a base class for other series objects, such as DataVectorSeries,
+// and DataQuerySeries.
+//
+// Requirements:
+// - Able to handle its own parameters, colours, legend texts, etc.
+// - Able to hide/show itself.
+// - Almost completely abstract, so we can inherit it from other classes.
+// Implement things like hide and show here tho.
+
+#include "KDChartDataIntern.h"
+
+class KDCHART_EXPORT KDChartBaseSeries
+{
+ public:
+ virtual ~KDChartBaseSeries();
+ virtual uint rows() const = 0;
+ virtual const KDChartData& cell( uint row ) const = 0;
+ virtual void setCell( uint row, const KDChartData& element) = 0;
+ virtual void expand( uint rows ) = 0;
+
+ // methods modelled on the TableBase methods.
+ virtual double maxValue( int coordinate, bool &ok ) const = 0;
+ virtual double minValue( int coordinate, bool &ok ) const = 0;
+};
+
+
+#endif
diff --git a/libkdchart/KDChartCustomBox.cpp b/libkdchart/KDChartCustomBox.cpp
new file mode 100644
index 0000000..4f765f0
--- /dev/null
+++ b/libkdchart/KDChartCustomBox.cpp
@@ -0,0 +1,495 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#include <qpainter.h>
+#include <qregion.h>
+#include <qpalette.h>
+#include <qpoint.h>
+#include <qsimplerichtext.h>
+#include <qpaintdevicemetrics.h>
+
+#include <KDChartCustomBox.h>
+#include <KDXMLTools.h>
+#include <KDFrame.h>
+
+
+
+KDChartCustomBox::~KDChartCustomBox()
+{
+ // Intentionally left blank for now.
+}
+
+
+void KDChartCustomBox::deepCopy( const KDChartCustomBox* source )
+{
+ if( !source || this == source )
+ return;
+ _rotation = source->_rotation;
+ _content.deepCopy( &source->_content);
+ _fontSize = source->_fontSize;
+ _fontScaleGlobal = source->_fontScaleGlobal;
+ _deltaX = source->_deltaX;
+ _deltaY = source->_deltaY;
+ _width = source->_width;
+ _height = source->_height;
+ _color = source->_color;
+ _paper = source->_paper;
+ _anchorArea = source->_anchorArea;
+ _anchorPos = source->_anchorPos;
+ _anchorAlign = source->_anchorAlign;
+ _dataRow = source->_dataRow;
+ _dataCol = source->_dataCol;
+ _data3rd = source->_data3rd;
+ _deltaAlign = source->_deltaAlign;
+ _deltaScaleGlobal = source->_deltaScaleGlobal;
+ _anchorBeingCalculated = source->_anchorBeingCalculated;
+ _parentAxisArea = source->_parentAxisArea;
+}
+
+const KDChartCustomBox* KDChartCustomBox::clone() const
+{
+ KDChartCustomBox* newBox = new KDChartCustomBox();
+ newBox->deepCopy( this );
+ return newBox;
+}
+
+
+float KDChartCustomBox::trueFontSize( double areaWidthP1000,
+ double areaHeightP1000,
+ int rectHeight ) const
+{
+ float size;
+ if( 0 > _fontSize ) {
+ if( _fontScaleGlobal ) {
+
+ size = _fontSize * QMIN(areaWidthP1000, areaHeightP1000) * -1.0;//(areaWidthP1000 + areaHeightP1000) / -2.0;
+
+ } else {
+
+ // calculate the exact size:
+ float targetLineSpacing = (_fontSize * rectHeight)/ -1000;
+ size = targetLineSpacing;
+ // step #1 - try to make the right font size:
+ QFont font( content().font() );
+ font.setPointSizeFloat( size );
+ QFontMetrics fm( font );
+ //qDebug(QString("\nsize : ")+QString::number(size));
+ //qDebug(QString("(float)rectHeight : ")+QString::number((float)rectHeight));
+ //qDebug(QString("(float)fm.lineSpacing(): ")+QString::number((float)fm.lineSpacing()));
+ size *= targetLineSpacing / fm.lineSpacing();
+ //qDebug(QString("size : ")+QString::number(size));
+ // step #2 - make sure the font size is not too big:
+ font.setPointSizeFloat( size );
+ QFontMetrics fm2( font );
+ size *= targetLineSpacing / fm2.lineSpacing();
+ //qDebug(QString("(float)rectHeight : ")+QString::number((float)rectHeight));
+ //qDebug(QString("(float)fm.lineSpacing(): ")+QString::number((float)fm.lineSpacing()));
+ //qDebug(QString("size : ")+QString::number(size));
+ }
+ }
+ else {
+//qDebug(QString("\n_fontsize: ")+QString::number(_fontSize));
+ if( _fontSize )
+ size = _fontSize;
+ else{
+ size = content().font().pointSize();
+ if( -1 == size )
+ size = content().font().pixelSize();
+ if( -1 == size )
+ size = 10;
+ }
+ }
+ return size;
+}
+
+
+int KDChartCustomBox::trueFontLineSpacing( double areaWidthP1000,
+ double areaHeightP1000,
+ int rectHeight ) const
+{
+ QFont font( content().font() );
+ font.setPointSizeFloat( trueFontSize( areaWidthP1000,areaHeightP1000, rectHeight ) );
+ QFontMetrics fm( font );
+ return fm.lineSpacing();
+}
+
+
+void KDChartCustomBox::getTrueShift( double areaWidthP1000,
+ double areaHeightP1000,
+ int rectHeight,
+ int& dX,
+ int& dY ) const
+{
+ int x, y;
+ if( _deltaScaleGlobal ){
+ x = (0 > _deltaX) ? static_cast < int > ( -areaWidthP1000 * _deltaX ) : _deltaX;
+ y = (0 > _deltaY) ? static_cast < int > ( -areaHeightP1000 * _deltaY ) : _deltaY;
+ }else{
+ int fontHeight = trueFontLineSpacing( areaWidthP1000, areaHeightP1000, rectHeight );
+ //qDebug("\nfontHeight %i",fontHeight);
+ x = (0 > _deltaX) ? static_cast < int > ( fontHeight * _deltaX / -100.0 ) : _deltaX;
+ y = (0 > _deltaY) ? static_cast < int > ( fontHeight * _deltaY / -100.0 ) : _deltaY;
+ //qDebug("y %i",y);
+ }
+ uint deltaAlign = (KDCHART_AlignAuto == _deltaAlign) ? _anchorAlign : _deltaAlign;
+ if ( Qt::AlignLeft == (Qt::AlignLeft & deltaAlign) )
+ dX = x;
+ else if ( Qt::AlignRight == (Qt::AlignRight & deltaAlign) )
+ dX = -x;
+ else
+ dX = 0; // <-- so the _deltaX value becomes ineffective!
+
+ if ( Qt::AlignTop == (Qt::AlignTop & deltaAlign) )
+ dY = y;
+ else if ( Qt::AlignBottom == (Qt::AlignBottom & deltaAlign) )
+ dY = -y;
+ else
+ dY = 0; // <-- so the _deltaY value becomes ineffective!
+}
+
+QRect KDChartCustomBox::trueRect( QPainter * /*painter*/, QPoint /*anchor*/, double /*areaWidthP1000*/, double /*areaHeightP1000*/ ) const
+{
+ //temporary allow KDC_Presentation to compile
+ qDebug( "Sorry, not implemented yet: KDChartCustomBox::trueRect()" );
+ return QRect( 1, 1, 2, 2 );
+}
+
+//static QPainter* pppainter=0;
+//static int pdWidth =1280;
+//static int pdHeight =1024;
+
+QRect KDChartCustomBox::trueRect( QPoint anchor, double areaWidthP1000, double areaHeightP1000 ) const
+{
+ int w = (0 > _width ) ? static_cast < int > ( -areaWidthP1000 * _width ) : _width;
+ int h = (0 > _height) ? static_cast < int > ( -areaHeightP1000 * _height ) : _height;
+
+ //qDebug("w: %i h: %i", w,h );
+
+ if( _fontScaleGlobal && 0 == w && 0 == h ){
+ //Now calculate the size of the box based upon the content!
+ QFont font( content().font() );
+ if ( _fontSize ) {
+ font.setPointSizeFloat(
+ (0 > _fontSize)
+ ? (_fontSize * QMIN(areaWidthP1000, areaHeightP1000) * -1.0)//(areaWidthP1000 + areaHeightP1000) / -2.0
+ : _fontSize );
+ //qDebug("\n_fontSize * QMIN(areaWidthP1000, areaHeightP1000) %i * QMIN(%f, %f) text: %s", _fontSize , areaWidthP1000, areaHeightP1000, content().text().latin1());
+ }
+ QString txt( content().text() );
+ QString txtTest( txt.stripWhiteSpace().lower() );
+#if QT_VERSION >= 200 && QT_VERSION < 300
+// version 2.x
+ if( !(txtTest.left(4) == "<qt>") )
+ txt.prepend( "<qt>" );
+ if( !(txtTest.right(5)== "</qt>"))
+ txt.append( "</qt>");
+#else
+ if( !txtTest.startsWith("<qt>" ) )
+ txt.prepend( "<qt>" );
+ if( !txtTest.endsWith( "</qt>") )
+ txt.append( "</qt>");
+#endif
+
+ //qDebug("\nw: %i h: %i", w,h );
+ QSimpleRichText tmpContent( txt, font );
+// tmpContent.setWidth(pdWidth);
+// tmpContent.setHeight(pdHeight);
+// tmpContent.adjustSize();
+// if( pppainter ){
+// tmpContent.setWidth(pppainter, 2000);
+// tmpContent.adjustSize();
+// }
+ w = tmpContent.widthUsed();
+ h = tmpContent.height();
+ //qDebug("pdWidth: %i w: %i h %i",pdWidth,w,h);
+ //qDebug("w: %i h: %i", w,h );
+ }
+
+ //qDebug("\nw: %i h: %i", w,h );
+ int x,y;
+ if ( Qt::AlignLeft == (Qt::AlignLeft & _anchorAlign) )
+ x = 0;
+ else if ( Qt::AlignRight == (Qt::AlignRight & _anchorAlign) )
+ x = - w + 1;
+ else
+ x = - w / 2;
+
+ if ( Qt::AlignTop == (Qt::AlignTop & _anchorAlign) )
+ y = 0;
+ else if ( Qt::AlignBottom == (Qt::AlignBottom & _anchorAlign) )
+ y = - h + 1;
+ else
+ y = - h / 2;
+ int dX,dY;
+ getTrueShift( areaWidthP1000, areaHeightP1000, h,
+ dX, dY );
+ //qDebug("trueRect: x %i y %i w %i h %i text: %s", anchor.x()+x+dX, anchor.y()+y+dY, w,h, content().text().latin1());
+
+ return QRect( anchor.x()+x+dX, anchor.y()+y+dY, w, h );
+}
+
+
+int KDChartCustomBox::trueRectAlignX(const QRect& rect) const
+{
+ int ret = rect.center().x();
+ if ( Qt::AlignLeft == (Qt::AlignLeft & _anchorAlign) )
+ ret -= rect.width();
+ else if ( Qt::AlignRight == (Qt::AlignRight & _anchorAlign) )
+ ret += rect.width();
+ return ret;
+}
+int KDChartCustomBox::trueRectAlignY(const QRect& rect) const
+{
+ int ret = rect.center().y();
+ if ( Qt::AlignTop == (Qt::AlignTop & _anchorAlign) )
+ ret -= rect.height();
+ else if ( Qt::AlignBottom == (Qt::AlignBottom & _anchorAlign) )
+ ret += rect.height();
+ return ret;
+}
+
+void KDChartCustomBox::paint( QPainter* painter,
+ QPoint anchor,
+ double areaWidthP1000,
+ double areaHeightP1000,
+ const KDFrame* frame,
+ const QRect& frameRect,
+ const QColor * color,
+ const QBrush * paper ) const
+{
+ painter->save();
+ int rotDX = 0;
+ int rotDY = 0;
+/*
+//pppainter=painter;
+const QPaintDeviceMetrics metrics(painter->device());
+pdWidth = metrics.width();
+const int aWidthP1000 = metrics.width() /1000;
+const int aHeightP1000 = metrics.height()/1000;
+//pdHeight = metrics.height();
+*/
+
+ QRect myRect( trueRect( anchor, areaWidthP1000, areaHeightP1000 ) );
+
+
+ /*
+QPaintDeviceMetrics metrics(painter->device());
+int pdWidth = metrics.width();
+int dpiY = metrics.logicalDpiY();
+int dpiX = metrics.logicalDpiX();
+qDebug("dpiY: %i dpiX: %i",dpiY,dpiX);
+qDebug("pdWidth: %i box myRect w: %i h %i",pdWidth,myRect.width(),myRect.height());
+ */
+//myRect.setSize(myRect.size()*6);
+
+
+ QRect myFrameRect( frameRect );
+ if ( myRect.isValid() ) {
+//qDebug("box myRect center: x %i y %i",myRect.center().x(),myRect.center().y());
+ if( _rotation ){
+ getTrueShift( areaWidthP1000, areaHeightP1000, myRect.height(),
+ rotDX, rotDY );
+ myRect.moveBy( -rotDX, -rotDY );
+ if( frame )
+ myFrameRect.moveBy( -rotDX, -rotDY );
+//qDebug("\nrotDelta: x %i y %i",rotDX,rotDY);
+//qDebug("\nbox myRect center: x %i y %i",myRect.center().x(),myRect.center().y());
+ myRect.moveCenter( QPoint( anchor.x() - trueRectAlignX(myRect),
+ anchor.y() - trueRectAlignY(myRect) ) );
+ if( frame )
+ myFrameRect.moveCenter( QPoint( anchor.x() - trueRectAlignX(myFrameRect),
+ anchor.y() - trueRectAlignY(myFrameRect) ) );
+//qDebug("box myRect center: x %i y %i",myRect.center().x(),myRect.center().y());
+ painter->translate( anchor.x(), anchor.y() );
+ painter->rotate( _rotation );
+ painter->translate( rotDX, rotDY );
+ }
+ if( frame )
+ frame->paint( painter, KDFrame::PaintAll, myFrameRect );
+ if ( _fontSize ) {
+ QFont font( content().font() );
+
+ float trueSize = trueFontSize(areaWidthP1000,areaHeightP1000, myRect.height() );
+ font.setPointSizeFloat( trueSize );
+ //adjust the area height related to the font size
+ myRect.setHeight( (int)(trueSize )+ (int)(trueSize*0.5));
+ const KDChartTextPiece tmpTextPiece( painter, content().text(), font );
+
+ tmpTextPiece.draw( painter, myRect.x(), myRect.y(), myRect,
+ color ? *color : _color,
+ paper ? paper : &_paper );
+ }else{
+
+ content().draw( painter, myRect.x(), myRect.y(), myRect,
+ color ? *color : _color,
+ paper ? paper : &_paper );
+ }
+ }
+ painter->restore();
+}
+
+
+void KDChartCustomBox::createCustomBoxNode( QDomDocument& document,
+ QDomNode& parent,
+ const QString& elementName,
+ const KDChartCustomBox* custombox )
+{
+ QDomElement customBoxElement = document.createElement( elementName );
+ parent.appendChild( customBoxElement );
+ KDXML::createIntNode( document, customBoxElement, "Rotation", custombox->_rotation );
+ KDXML::createStringNode( document, customBoxElement, "ContentText",
+ custombox->_content.text() );
+ KDXML::createFontNode( document, customBoxElement, "ContentFont",
+ custombox->_content.font() );
+ KDXML::createIntNode( document, customBoxElement, "FontSize", custombox->_fontSize );
+ KDXML::createBoolNode( document, customBoxElement, "FontScaleGlobal",
+ custombox->_fontScaleGlobal );
+ KDXML::createIntNode( document, customBoxElement, "DeltaX", custombox->_deltaX );
+ KDXML::createIntNode( document, customBoxElement, "DeltaY", custombox->_deltaY );
+ KDXML::createIntNode( document, customBoxElement, "Width", custombox->_width );
+ KDXML::createIntNode( document, customBoxElement, "Height", custombox->_height );
+ KDXML::createColorNode( document, customBoxElement, "Color", custombox->_color );
+ KDXML::createBrushNode( document, customBoxElement, "Paper", custombox->_paper );
+ KDXML::createIntNode( document, customBoxElement, "AnchorArea",
+ custombox->_anchorArea );
+ KDXML::createStringNode( document, customBoxElement, "AnchorPos",
+ KDChartEnums::positionFlagToString( custombox->_anchorPos ) );
+ KDXML::createIntNode( document, customBoxElement, "AnchorAlign",
+ custombox->_anchorAlign );
+ KDXML::createIntNode( document, customBoxElement, "DataRow",
+ custombox->_dataRow );
+ KDXML::createIntNode( document, customBoxElement, "DataCol",
+ custombox->_dataCol );
+ KDXML::createIntNode( document, customBoxElement, "Data3rd",
+ custombox->_data3rd );
+ KDXML::createIntNode( document, customBoxElement, "DeltaAlign",
+ custombox->_deltaAlign );
+ KDXML::createBoolNode( document, customBoxElement, "DeltaScaleGlobal",
+ custombox->_deltaScaleGlobal );
+ KDXML::createIntNode( document, customBoxElement, "ParentAxisArea",
+ custombox->_parentAxisArea );
+}
+
+
+bool KDChartCustomBox::readCustomBoxNode( const QDomElement& element,
+ KDChartCustomBox& custombox )
+{
+ bool ok = true;
+ QString tempContentText;
+ QFont tempContentFont;
+ int tempRotation = 0; // must be initialized: new parameter, not present in old versions of KDChart
+ int tempDeltaAlign = KDCHART_AlignAuto; // must be initialized too: new parameter
+ bool tempDeltaScaleGlobal = true; // must be initialized too: new parameter
+ int tempFontSize, tempDeltaX, tempDeltaY,
+ tempWidth, tempHeight, tempAnchorArea, tempParentAxisArea, tempAnchorAlign,
+ tempDataRow, tempDataCol, tempData3rd;
+ bool tempFontScaleGlobal;
+ QColor tempColor;
+ QBrush tempPaper;
+ KDChartEnums::PositionFlag tempAnchorPos = KDChartEnums::PosTopLeft;
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "Rotation" ) {
+ ok = ok & KDXML::readIntNode( element, tempRotation );
+ } else if( tagName == "ContentText" ) {
+ ok = ok & KDXML::readStringNode( element, tempContentText );
+ } else if( tagName == "ContentFont" ) {
+ ok = ok & KDXML::readFontNode( element, tempContentFont );
+ } else if( tagName == "FontSize" ) {
+ ok = ok & KDXML::readIntNode( element, tempFontSize );
+ } else if( tagName == "FontScaleGlobal" ) {
+ ok = ok & KDXML::readBoolNode( element, tempFontScaleGlobal );
+ } else if( tagName == "DeltaX" ) {
+ ok = ok & KDXML::readIntNode( element, tempDeltaX );
+ } else if( tagName == "DeltaY" ) {
+ ok = ok & KDXML::readIntNode( element, tempDeltaY );
+ } else if( tagName == "Width" ) {
+ ok = ok & KDXML::readIntNode( element, tempWidth );
+ } else if( tagName == "Height" ) {
+ ok = ok & KDXML::readIntNode( element, tempHeight );
+ } else if( tagName == "Color" ) {
+ ok = ok & KDXML::readColorNode( element, tempColor );
+ } else if( tagName == "Paper" ) {
+ ok = ok & KDXML::readBrushNode( element, tempPaper );
+ } else if( tagName == "AnchorArea" ) {
+ ok = ok & KDXML::readIntNode( element, tempAnchorArea );
+ } else if( tagName == "AnchorPos" ) {
+ QString value;
+ ok = ok & KDXML::readStringNode( element, value );
+ tempAnchorPos = KDChartEnums::stringToPositionFlag( value );
+ } else if( tagName == "AnchorAlign" ) {
+ ok = ok & KDXML::readIntNode( element, tempAnchorAlign );
+ } else if( tagName == "DataRow" ) {
+ ok = ok & KDXML::readIntNode( element, tempDataRow );
+ } else if( tagName == "DataCol" ) {
+ ok = ok & KDXML::readIntNode( element, tempDataCol );
+ } else if( tagName == "Data3rd" ) {
+ ok = ok & KDXML::readIntNode( element, tempData3rd );
+ } else if( tagName == "DeltaAlign" ) {
+ ok = ok & KDXML::readIntNode( element, tempDeltaAlign );
+ } else if( tagName == "DeltaScaleGlobal" ) {
+ ok = ok & KDXML::readBoolNode( element, tempDeltaScaleGlobal );
+ } else if ( tagName == "ParentAxisArea" ) {
+ ok = ok & KDXML::readIntNode( element, tempParentAxisArea );
+ } else {
+ qDebug( "Unknown tag in custom box" );
+ }
+ }
+ node = node.nextSibling();
+ }
+
+ if( ok ) {
+ const KDChartTextPiece piece( 0, tempContentText, tempContentFont );
+ custombox._content.deepCopy( &piece );
+ custombox._rotation = tempRotation;
+ custombox._fontSize = tempFontSize;
+ custombox._fontScaleGlobal = tempFontScaleGlobal;
+ custombox._deltaX = tempDeltaX;
+ custombox._deltaY = tempDeltaY;
+ custombox._width = tempWidth;
+ custombox._height = tempHeight;
+ custombox._color = tempColor;
+ custombox._paper = tempPaper;
+ custombox._anchorArea = tempAnchorArea;
+ custombox._anchorPos = tempAnchorPos;
+ custombox._anchorAlign = tempAnchorAlign;
+ custombox._dataRow = tempDataRow;
+ custombox._dataCol = tempDataCol;
+ custombox._data3rd = tempData3rd;
+ custombox._deltaAlign = tempDeltaAlign;
+ custombox._deltaScaleGlobal = tempDeltaScaleGlobal;
+ custombox._parentAxisArea = tempParentAxisArea;
+ }
+
+ return ok;
+}
+
+#include "KDChartCustomBox.moc"
diff --git a/libkdchart/KDChartCustomBox.h b/libkdchart/KDChartCustomBox.h
new file mode 100644
index 0000000..f4f8694
--- /dev/null
+++ b/libkdchart/KDChartCustomBox.h
@@ -0,0 +1,1043 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTCUSTOMBOX_H__
+#define __KDCHARTCUSTOMBOX_H__
+
+#include <qobject.h>
+#include <qtextstream.h>
+#include <qfont.h>
+#include <qdom.h>
+#include "KDChartGlobal.h"
+#include "KDChartEnums.h"
+#include "KDChartTextPiece.h"
+
+
+class KDFrame;
+
+// needed because there was no AlignAuto before Qt 3.0
+#define KDCHART_AlignAuto 0
+
+
+/** \file KDChartCustomBox.h
+ \brief Definition of a class for specifying and drawing custom boxes.
+ */
+
+/**
+ Class for specifying and drawing custom boxes.
+ */
+class KDCHART_EXPORT KDChartCustomBox :public QObject
+{
+ Q_OBJECT
+ friend class KDChartPainter;
+ friend class KDChartParams;
+
+public:
+
+ /**
+ Constructor.
+ Set default values.
+ */
+ KDChartCustomBox() :
+ _rotation( 0 ),
+ _fontSize( -10 ),
+ _fontScaleGlobal( true ),
+ _deltaX( 0 ),
+ _deltaY( 0 ),
+ _width( 0 ),
+ _height( 0 ),
+ _color( Qt::black ),
+ _paper( Qt::NoBrush ),
+ _anchorArea( KDChartEnums::AreaInnermost ),
+ _anchorPos( KDChartEnums::PosTopLeft ),
+ _anchorAlign( Qt::AlignTop + Qt::AlignLeft ),
+ _dataRow( 0 ),
+ _dataCol( 0 ),
+ _data3rd( 0 ),
+ _deltaAlign( KDCHART_AlignAuto ),
+ _deltaScaleGlobal( true ),
+ _anchorBeingCalculated( false ),
+ _parentAxisArea( -1 )
+ {
+ const KDChartTextPiece piece( 0, "", QFont( "helvetica", 8, QFont::Normal, false ) );
+ _content.deepCopy( &piece );
+ }
+
+ /**
+ Constructor.
+ Set content and font size but no position/size parameters.
+
+ \note If \c fontScaleGlobal is set to true it is not necessary to
+ specify the size of the box: if both \c width and \c height are zero
+ and \c fontScaleGlobal is true the size of the box will be calculated
+ automatically based upon the content size. In this case the content
+ size is interpreted as rich text string - even if the text is NOT
+ framed by <tt><qt></tt> and <tt></qt></tt>.
+
+ \param content The string or rich text string to be written into the box.
+ \param fontSize The size of the font to be used, see explanation above.
+ \param fontScaleGlobal If true the font size will be calculated based
+ upon the the size of the drawing area, otherwise it will be calculated
+ based upon the height of the box.
+ */
+ KDChartCustomBox( const KDChartTextPiece & content,
+ int fontSize,
+ bool fontScaleGlobal = true ) :
+ _rotation( 0 ),
+ _fontSize( fontSize ),
+ _fontScaleGlobal( fontScaleGlobal ),
+ _deltaX( 0 ),
+ _deltaY( 0 ),
+ _width( 0 ),
+ _height( 0 ),
+ _color( Qt::black ),
+ _paper( Qt::NoBrush ),
+ _anchorArea( KDChartEnums::AreaInnermost ),
+ _anchorPos( KDChartEnums::PosTopLeft ),
+ _anchorAlign( Qt::AlignTop + Qt::AlignLeft ),
+ _dataRow( 0 ),
+ _dataCol( 0 ),
+ _data3rd( 0 ),
+ _deltaAlign( KDCHART_AlignAuto ),
+ _deltaScaleGlobal( true ),
+ _anchorBeingCalculated( false ),
+ _parentAxisArea( -1 )
+ {
+ _content.deepCopy( &content );
+ }
+
+
+ /**
+ Constructor.
+ Set content and position/size parameters and the color and brush to be used.
+
+ \note If \c fontScaleGlobal is set to true it is not necessary to
+ specify the size of the box: if both \c width and \c height are zero
+ and \c fontScaleGlobal is true the size of the box will be calculated
+ automatically based upon the content size. In this case the content
+ size is interpreted as rich text string - even if the text is NOT
+ framed by <tt><qt></tt> and <tt></qt></tt>.
+
+ \param content The text piece to be displayed.
+ \param fontSize If \c fontSize value is greater 0, the value is taken as exact size,
+ if \c fontSize is less than 0 it is interpreted as being a per-mille value
+ of the size of the drawing area (or of the height of the box in case
+ \c fontScaleGlobal is set to false, resp.).
+ Normally the actual font size is calculated dynamically in methode paint.
+ <b>However</b> if fontSize is zero no calculating will take place but the
+ size of the content font is used.
+ \param fontScaleGlobal If true the font size will be calculated based
+ upon the the size of the drawing area, otherwise it will be calculated
+ based upon the height of the box.
+ \param deltaX The X distance between the box and its anchor.
+ <b>Note: </b> If greater 0, the value is taken as exact offset,
+ if less than 0, it is interpreted as being a per-mille value of the
+ size of the drawing area (or as percent value of the actual font size
+ (as returned by QFontMetrics::lineSpacing() ) if deltaScaleGlobal is FALSE, resp.).
+ Actual drawing position/size is calculated dynamically in methode trueRect.
+ \param deltaY The Y distance between the box and its anchor.
+ \param width The width of the box.
+ \param height The height of the box.
+ \param color The text color.
+ \param paper The brush to be used for the background.
+ \param area The area to which the box is to be aligned.
+ \param position The anchor position. This is the edge (or
+ the corner, resp.) of the area to which
+ the box is to be aligned.
+ \param align The way how the box is to be aligned to its anchor.
+ \param dataRow The row number of the KDChart data region that is to be used
+ as anchor area. This parameter is ignored if \c area is not \c AreaChartDataRegion.
+ \param dataCol The column number of the KDChart data region that is to be used
+ as anchor area. This parameter is ignored if \c area is not \c AreaChartDataRegion.
+ \param data3rd The third dimensions number of the KDChart data region that is to be used
+ as anchor area. This parameter is ignored if \c area is not \c AreaChartDataRegion
+ or if there is no 3-dimensional data structure.
+ \param deltaAlign The way how \c deltaX and \deltaY affect the position of the box.
+ Leave this parameter to its default value KDCHART_AlignAuto to have the delta values
+ used according to the box's main \c align settings, otherwise specify your own
+ alignment settings: e.g. right means there will be a gap between the right side of
+ the box and its anchor point - if the main \c align parameter is set to right too
+ the anchor point will to be outside of the box / if \c align is set to left
+ (but the \c deltaAlign to right) the anchor point will be inside the box.
+ Possible values for \c deltaAlign are:
+ \li \c KDCHART_AlignAuto
+ \li \c Qt::AlignLeft | Qt::AlignTop
+ \li \c Qt::AlignLeft | Qt::AlignBottom
+ \li \c Qt::AlignRight | Qt::AlignTop
+ \li \c Qt::AlignRight | Qt::AlignBottom
+ Using AlignVCenter or AlignHCenter or AlignCenter does not make sense here:
+ center delta alignment will cause KDChart to ignore the respective delta
+ settings: deltaX or deltaY or both will become ineffective.
+ \param deltaScaleGlobal If true the actual delta X and delta Y values will
+ be calculated by \c deltaX and \c deltaY based upon the size of the
+ drawing area, otherwise they will be calculated based upon the actual
+ font size.
+ */
+ KDChartCustomBox( const KDChartTextPiece & content,
+ int fontSize,
+ bool fontScaleGlobal,
+ int deltaX,
+ int deltaY,
+ int width,
+ int height,
+ const QColor & color = QColor( Qt::black ),
+ const QBrush & paper = QBrush( Qt::NoBrush ),
+ uint area = KDChartEnums::AreaInnermost,
+ KDChartEnums::PositionFlag position = KDChartEnums::PosTopLeft,
+ uint align = Qt::AlignTop + Qt::AlignLeft,
+ uint dataRow = 0,
+ uint dataCol = 0,
+ uint data3rd = 0,
+ uint deltaAlign = KDCHART_AlignAuto,
+ bool deltaScaleGlobal = true,
+ int parentAxis = -1 )
+ : _rotation( 0 ),
+ _fontSize( fontSize ),
+ _fontScaleGlobal( fontScaleGlobal ),
+ _deltaX( deltaX ),
+ _deltaY( deltaY ),
+ _width( width ),
+ _height( height ),
+ _color( color ),
+ _paper( paper ),
+ _anchorArea( area ),
+ _anchorPos( position ),
+ _anchorAlign( align ),
+ _dataRow( dataRow ),
+ _dataCol( dataCol ),
+ _data3rd( data3rd ),
+ _deltaAlign( deltaAlign ),
+ _deltaScaleGlobal( deltaScaleGlobal ),
+ _anchorBeingCalculated( false ),
+ _parentAxisArea( parentAxis )
+ {
+ _content.deepCopy( &content );
+ }
+
+
+ /**
+ Constructor.
+ Use this special constructor to specify a <b>rotated</b> box, reference
+ point of the rotation is the anchor specified by the \c area and the
+ \c position parameters.
+
+ \note If \c fontScaleGlobal is set to true it is not necessary to
+ specify the size of the box: if both \c width and \c height are zero
+ and \c fontScaleGlobal is true the size of the box will be calculated
+ automatically based upon the content size. In this case the content
+ size is interpreted as rich text string - even if the text is NOT
+ framed by <tt><qt></tt> and <tt></qt></tt>.
+
+ \param rotation The box's rotation angle in degrees (0 .. 360).
+ \param content The text piece to be displayed.
+ \param fontSize If \c fontSize value is greater 0, the value is taken as exact size,
+ if \c fontSize is less than 0 it is interpreted as being a per-mille value
+ of the size of the drawing area (or of the height of the box in case
+ \c fontScaleGlobal is set to false, resp.).
+ Normally the actual font size is calculated dynamically in methode paint.
+ <b>However</b> if fontSize is zero no calculating will take place but the
+ size of the content font is used.
+ \param fontScaleGlobal If true the font size will be calculated based
+ upon the the size of the drawing area, otherwise it will be calculated
+ based upon the height of the box.
+ \param deltaX The X distance between the box and its anchor.
+ <b>Note: </b> If greater 0, the value is taken as exact offset,
+ if less than 0, it is interpreted as being a per-mille value of the
+ width of the drawing area (or as percent value of the actual font size
+ (as returned by QFontMetrics::lineSpacing() ) if deltaScaleGlobal is FALSE, resp.).
+ Actual drawing position/size is calculated dynamically in method trueRect.
+ \param deltaY The Y distance between the box and its anchor.
+ <b>Note: </b> If greater 0, the value is taken as exact offset,
+ if less than 0, it is interpreted as being a per-mille value of the
+ height of the drawing area (or as percent value of the actual font size
+ (as returned by QFontMetrics::lineSpacing() ) if deltaScaleGlobal is FALSE, resp.).
+ Actual drawing position/size is calculated dynamically in method trueRect.
+ \param width The width of the box.
+ \param height The height of the box.
+ \param color The text color.
+ \param paper The brush to be used for the background.
+ \param area The area to which the box is to be aligned.
+ \param position The anchor position. This is the edge (or
+ the corner, resp.) of the area to which the box is to be aligned
+ and it is also used as the reference point of the rotation.
+ \param align The way how the box is to be aligned to its anchor.
+ \param dataRow The row number of the KDChart data region that is to be used
+ as anchor area. This parameter is ignored if \c area is not \c AreaChartDataRegion.
+ \param dataCol The column number of the KDChart data region that is to be used
+ as anchor area. This parameter is ignored if \c area is not \c AreaChartDataRegion.
+ \param data3rd The third dimensions number of the KDChart data region that is to be used
+ as anchor area. This parameter is ignored if \c area is not \c AreaChartDataRegion
+ or if there is no 3-dimensional data structure.
+ \param deltaAlign The way how \c deltaX and \deltaY affect the position of the box.
+ Leave this parameter to its default value KDCHART_AlignAuto to have the delta values
+ used according to the box's main \c align settings, otherwise specify your own
+ alignment settings: e.g. Qt::AlignRight means the box will be moved to the left
+ (by the amount calculated using the \c deltaX value), so there will be a gap
+ between the right side of the box and its anchor point IF the main \c align flag
+ is set to Qt::AlignRight too, so the anchor point will to be outside of the
+ box then. However if the main \c align flag is set to Qt::AlignLeft the anchor
+ point will be inside the box.
+ Possible values for \c deltaAlign are:
+ \li \c KDCHART_AlignAuto
+ \li \c Qt::AlignLeft | Qt::AlignTop
+ \li \c Qt::AlignLeft | Qt::AlignBottom
+ \li \c Qt::AlignRight | Qt::AlignTop
+ \li \c Qt::AlignRight | Qt::AlignBottom
+ Using AlignVCenter or AlignHCenter or AlignCenter does not make sense here:
+ center delta alignment will cause KDChart to ignore the respective delta
+ settings: deltaX or deltaY or both will become ineffective.
+ \note Moving of the box due to \c deltaAlign settings is applied after
+ the box is rotated: e.g. this means a gap specified by \c deltaAlign = Qt::AlignTop
+ gap will actually result in a left gap if the box is rotated by 90 degrees.
+ \param deltaScaleGlobal If true the actual delta X and delta Y values will
+ be calculated by \c deltaX and \c deltaY based upon the size of the
+ drawing area, otherwise they will be calculated based upon the actual
+ font size.
+ */
+ KDChartCustomBox( int rotation,
+ const KDChartTextPiece & content,
+ int fontSize,
+ bool fontScaleGlobal,
+ int deltaX,
+ int deltaY,
+ int width,
+ int height,
+ const QColor & color = QColor( Qt::black ),
+ const QBrush & paper = QBrush( Qt::NoBrush ),
+ uint area = KDChartEnums::AreaInnermost,
+ KDChartEnums::PositionFlag position = KDChartEnums::PosTopLeft,
+ uint align = Qt::AlignTop + Qt::AlignLeft,
+ uint dataRow = 0,
+ uint dataCol = 0,
+ uint data3rd = 0,
+ uint deltaAlign = KDCHART_AlignAuto,
+ bool deltaScaleGlobal = true,
+ int parentAxis = -1 )
+ : _rotation( rotation ),
+ _fontSize( fontSize ),
+ _fontScaleGlobal( fontScaleGlobal ),
+ _deltaX( deltaX ),
+ _deltaY( deltaY ),
+ _width( width ),
+ _height( height ),
+ _color( color ),
+ _paper( paper ),
+ _anchorArea( area ),
+ _anchorPos( position ),
+ _anchorAlign( align ),
+ _dataRow( dataRow ),
+ _dataCol( dataCol ),
+ _data3rd( data3rd ),
+ _deltaAlign( deltaAlign ),
+ _deltaScaleGlobal( deltaScaleGlobal ),
+ _anchorBeingCalculated( false ),
+ _parentAxisArea( parentAxis )
+ {
+ _content.deepCopy( &content );
+ }
+
+
+ /**
+ Creates a DOM element node that represents a custom box for use
+ in a DOM document.
+
+ \param document the DOM document to which the node will belong
+ \param parent the parent node to which the new node will be appended
+ \param elementName the name of the new node
+ \param custombox the custom box to be represented
+ */
+ static void createCustomBoxNode( QDomDocument& document,
+ QDomNode& parent,
+ const QString& elementName,
+ const KDChartCustomBox* custombox );
+
+ /**
+ Reads data from a DOM element node that represents a custom box
+ object and fills a KDChartCustomBox object with the data.
+
+ \param element the DOM element to read from
+ \param settings the custom box object to read the data into
+ */
+ static bool readCustomBoxNode( const QDomElement& element,
+ KDChartCustomBox& custombox );
+
+public slots: // PENDING(blackie) merge slots sections.
+
+ float trueFontSize( double areaWidthP1000,
+ double areaHeightP1000,
+ int rectHeight ) const;
+ int trueFontLineSpacing( double areaWidthP1000,
+ double areaHeightP1000,
+ int rectHeight ) const;
+ int trueRectAlignX(const QRect& rect) const;
+ int trueRectAlignY(const QRect& rect) const;
+ void getTrueShift( double areaWidthP1000,
+ double areaHeightP1000,
+ int rectHeight,
+ int& dX,
+ int& dY )const;
+
+
+ /**
+ Return the actual rectangle which to draw box into.
+
+ \note When ever possible, use this method, instead of the other trueRect(), that
+ has no \c QPainter parameter. Passing a QPainter will give you more exact results.
+
+ \param painter The QPainter to be used.
+ \param anchor The anchor point which the box is to be aligned to.
+ This can be any point within the painter drawing area but you
+ will probably compute a point using anchorArea(), anchorPosition(), anchorAlign()
+ (and dataRow(), dataCol(), data3rd() when dealing with KDChart data regions, resp.)
+ \param areaWidthP1000 The thousands part of the logical width
+ of the area to be used for drawing.
+ \param areaHeightP1000 The thousands part of the logical height
+ of the area to be used for drawing.
+ */
+ QRect trueRect( QPainter * painter,
+ QPoint anchor, double areaWidthP1000, double areaHeightP1000 ) const ;
+
+ /**
+ Return the actual rectangle which to draw box into.
+
+ \param anchor The anchor point which the box is to be aligned to.
+ This can be any point within the painter drawing area but you
+ will probably compute a point using anchorArea(), anchorPosition(), anchorAlign()
+ (and dataRow(), dataCol(), data3rd() when dealing with KDChart data regions, resp.)
+ \param areaWidthP1000 The thousands part of the logical width
+ of the area to be used for drawing.
+ \param areaHeightP1000 The thousands part of the logical height
+ of the area to be used for drawing.
+ */
+ virtual QRect trueRect( QPoint anchor,
+ double areaWidthP1000,
+ double areaHeightP1000 ) const ;
+
+ /**
+ Paints the box.
+
+ \param painter The QPainter to be used for drawing.
+ \param anchor The anchor point which the box is to be aligned to.
+ This can be any point within the painter drawing area but you
+ will probably compute a point using anchorArea(), anchorPosition(), anchorAlign()
+ (and dataRow(), dataCol(), data3rd() when dealing with KDChart data regions, resp.)
+ \param areaWidthP1000 The thousands part of the drawing area width.
+ \param areaHeightP1000 The thousands part of the drawing area height.
+ \param color The text color to be used.
+ \param paper The brush to be used for the background.
+ \param rect The rectangle to be drawn into. If empty the rectangle will be
+ calculated dynamically based upon the \c x, \c y, \c width, \c height values
+ (that were set via Constructor or via setPosAndSize) and based upon the
+ logical height (or width, resp.) of the painters drawing area.
+ */
+ virtual void paint( QPainter* painter,
+ QPoint anchor,
+ double areaWidthP1000,
+ double areaHeightP1000,
+ const KDFrame* frame = 0,
+ const QRect& frameRect = QRect(),
+ const QColor * color = 0,
+ const QBrush * paper = 0 ) const ;
+
+ /**
+ Specifies the rotation angle of the box in degrees (0..360).
+ */
+ void setRotation( int rotation )
+ {
+ _rotation = rotation;
+ }
+
+ /**
+ Specifies the text piece content to be drawn.
+ */
+ void setContent( const KDChartTextPiece & content )
+ {
+ _content.deepCopy( &content );
+ }
+
+ /**
+ Specifies the font size to be used.
+
+ \note If \c fontScaleGlobal is set to true it is not necessary to
+ specify the size of the box: if both \c width and \c height are zero
+ and \c fontScaleGlobal is true the size of the box will be calculated
+ automatically based upon the content size. In this case the content
+ size is interpreted as rich text string - even if the text is NOT
+ framed by <tt><qt></tt> and <tt></qt></tt>.
+
+ \param fontSize If \c fontSize value is greater 0, the value is taken as exact size,
+ if \c fontSize is less than 0 it is interpreted as being a per-mille value
+ of the size of the drawing area (or of the height of the box in case
+ \c fontScaleGlobal is set to false, resp.).
+ Normally the actual font size is calculated dynamically in methode paint.
+ <b>However</b> if fontSize is zero no calculating will take place but the
+ size of the content font is used.
+ \param fontScaleGlobal If true the font size will be calculated based
+ upon the the size of the drawing area, otherwise it will be calculated
+ based upon the height of the box.
+ */
+ void setFontSize( int fontSize, bool fontScaleGlobal )
+ {
+ _fontSize = fontSize;
+ _fontScaleGlobal = fontScaleGlobal;
+ }
+
+ /**
+ Specifies the area to which the box is to be aligned.
+ */
+ void setAnchorArea( uint area )
+ {
+ _anchorArea = area;
+ }
+
+ /**
+ Specifies the anchor position.
+ This is the edge (or the corner, resp.) of the area
+ to which the box is to be aligned.
+ */
+ void setAnchorPosition( KDChartEnums::PositionFlag position )
+ {
+ // Note if you change the parameters here, then you must also change them in wrappers/KDChartCustomBoxWrapper.h
+ _anchorPos = position;
+ }
+
+ /**
+ Specifies the way how the box is to be aligned to its anchor.
+ */
+ void setAnchorAlign( uint align )
+ {
+ _anchorAlign = align;
+ }
+
+ /**
+ Specifies the row number of the KDChart data region that is to be used
+ as anchor area. This value is ignored if anchorArea is not \c AreaChartDataRegion.
+ */
+ void setDataRow( uint dataRow )
+ {
+ _dataRow = dataRow;
+ }
+
+ /**
+ Specifies the column number of the KDChart data region that is to be used
+ as anchor area. This value is ignored if anchorArea is not \c AreaChartDataRegion.
+ */
+ void setDataCol( uint dataCol )
+ {
+ _dataCol = dataCol;
+ }
+
+ /**
+ Specifies the third dimensions number of the KDChart data region that is to be used
+ as anchor area. This value is ignored if anchorArea is not \c AreaChartDataRegion
+ or if there is no 3-dimensional data structure.
+ */
+ void setData3rd( uint data3rd )
+ {
+ _data3rd = data3rd;
+ }
+
+ /**
+ Specifies the distance between the box and the anchor point and
+ specifies the size of the box.
+
+ \param deltaX The X distance between the box and its anchor.
+ <b>Note: </b> If greater 0, the value is taken as exact offset,
+ if less than 0, it is interpreted as being a per-mille value of the
+ size of the drawing area (or as percent value of the actual font size
+ (as returned by QFontMetrics::lineSpacing() ) if deltaScaleGlobal is FALSE, resp.).
+ Actual drawing position/size is calculated dynamically in methode trueRect.
+ \param deltaY The Y distance between the box and its anchor.
+ \param width The width of the drawing region.
+ \param height The height of the drawing region.
+ \param deltaAlign the way how the values specified for deltaX and/or deltaY
+ affect the position of the box.
+ \param deltaScaleGlobal If true the actual delta X and delta Y values will
+ be calculated by \c deltaX and \c deltaY based upon the size of the
+ drawing area, otherwise they will be calculated based upon the actual
+ font size.
+
+ \sa setDistance, setSize, setDeltaAlign, setDeltaScale
+ */
+ void setDistanceAndSize( int deltaX,
+ int deltaY,
+ int width,
+ int height,
+ uint deltaAlign = KDCHART_AlignAuto,
+ bool deltaScaleGlobal = true )
+ {
+ _deltaX = deltaX;
+ _deltaY = deltaY;
+ _width = width;
+ _height = height;
+ _deltaAlign = deltaAlign;
+ _deltaScaleGlobal = deltaScaleGlobal;
+ }
+
+ /**
+ Specifies the distance between the box and the anchor point.
+
+ \note If \c fontScaleGlobal is set to true it is not necessary to
+ specify the size of the box: if both \c width and \c height are zero
+ and \c fontScaleGlobal is true the size of the box will be calculated
+ automatically based upon the content size. In this case the content
+ size is interpreted as rich text string - even if the text is NOT
+ framed by <tt><qt></tt> and <tt></qt></tt>.
+
+ \param deltaX The X distance between the box and its anchor.
+ <b>Note: </b> If greater 0, the value is taken as exact offset,
+ if less than 0, it is interpreted as being a per-mille value of the
+ size of the drawing area (or as percent value of the actual font size
+ (as returned by QFontMetrics::lineSpacing() ) if deltaScaleGlobal is FALSE, resp.).
+ Actual drawing position/size is calculated dynamically in methode trueRect.
+ \param deltaY The Y distance between the box and its anchor.
+ \param align the way how the values specified for deltaX and/or deltaY
+ affect the position of the box.
+ \param deltaScaleGlobal If true the actual delta X and delta Y values will
+ be calculated by \c deltaX and \c deltaY based upon the size of the
+ drawing area, otherwise they will be calculated based upon the actual
+ font size.
+
+ \sa setDistanceAndSize, setSize, setDeltaAlign, setDeltaScale
+ */
+ void setDistance( int deltaX,
+ int deltaY,
+ uint align = KDCHART_AlignAuto,
+ bool deltaScaleGlobal = true )
+ {
+ _deltaX = deltaX;
+ _deltaY = deltaY;
+ _deltaAlign = align;
+ _deltaScaleGlobal = deltaScaleGlobal;
+ }
+
+ /**
+ Specifies the way how the values specified for deltaX and/or deltaY
+ affect the position of the box.
+
+ Set this to KDHART_KDCHART_AlignAuto to have the delta values
+ used according to the box's main \c align settings, otherwise specify your own
+ alignment settings: e.g. right means there will be a gap between the right side of
+ the box and its anchor point - if the main \c align parameter is set to right too
+ the anchor point will to be outside of the box / if \c align is set to left
+ (but the \c deltaAlign to right) the anchor point will be inside the box.
+ Possible values for \c deltaAlign are:
+ \li \c KDCHART_AlignAuto
+ \li \c Qt::AlignLeft | Qt::AlignTop
+ \li \c Qt::AlignLeft | Qt::AlignBottom
+ \li \c Qt::AlignRight | Qt::AlignTop
+ \li \c Qt::AlignRight | Qt::AlignBottom
+ Using AlignVCenter or AlignHCenter or AlignCenter does not make sense here:
+ center delta alignment will cause KDChart to ignore the respective delta
+ settings: deltaX or deltaY or both will become ineffective.
+ \note Moving of the box due to \c deltaAlign settings is applied after
+ the box is rotated: e.g. this means a gap specified by \c deltaAlign = Qt::AlignTop
+ gap will actually result in a left gap if the box is rotated by 90 degrees.
+ \param deltaScaleGlobal If true the actual delta X and delta Y values will
+ be calculated by \c deltaX and \c deltaY based upon the size of the
+ drawing area, otherwise they will be calculated based upon the actual
+ font size.
+
+ \sa setDeltaScale, setDistance, setDistanceAndSize, deltaAlign
+ */
+ void setDeltaAlign( uint align,
+ bool deltaScaleGlobal = true )
+ {
+ _deltaAlign = align;
+ _deltaScaleGlobal = deltaScaleGlobal;
+ }
+
+ /**
+ Specifies the way how the distance between the box and its anchor
+ will be calculated.
+
+ \param deltaScaleGlobal If true the actual delta X and delta Y values will
+ be calculated by \c deltaX and \c deltaY based upon the size of the
+ drawing area, otherwise they will be calculated based upon the actual
+ font size.
+
+ \sa setDeltaAlign, setDistance, setDistanceAndSize, deltaAlign
+ */
+ void setDeltaScale( bool deltaScaleGlobal )
+ {
+ _deltaScaleGlobal = deltaScaleGlobal;
+ }
+
+ /**
+ Specifies the size of the box.
+
+ \note If \c fontScaleGlobal is set to true it is not necessary to
+ specify the size of the box: if both \c width and \c height are zero
+ and \c fontScaleGlobal is true the size of the box will be calculated
+ automatically based upon the content size. In this case the content
+ size is interpreted as rich text string - even if the text is NOT
+ framed by <tt><qt></tt> and <tt></qt></tt>.
+
+ \param width The width of the box.
+ <b>Note:</b> If greater 0, the value is taken as exact offset,
+ if less than 0, it is interpreted as being a per-mille value
+ of the logical height (or width, resp.) of the area to be used for drawing.
+ Actual drawing position/size is calculated dynamically in methode trueRect.
+ \param height The height of the box.
+
+ \sa setDistance, setDistanceAndSize, setDeltaAlign
+ */
+ void setSize( int width, int height )
+ {
+ _width = width;
+ _height = height;
+ }
+
+ /**
+ Specifies the text color to be used.
+
+ \param color The text color.
+ */
+ void setColor( QColor color )
+ {
+ _color = color;
+ }
+
+ /**
+ Specifies the brush to be used for the background.
+
+ \param paper The brush to be used for the background.
+ */
+ void setPaper( const QBrush & paper )
+ {
+ _paper = paper;
+ }
+
+ /**
+ Returns the rotation angle of the box in degrees (0..360).
+ */
+ int rotation() const
+ {
+ return _rotation;
+ }
+
+ /**
+ Returns the text piece content that is to be drawn.
+ */
+ const KDChartTextPiece & content() const
+ {
+ return _content;
+ }
+
+ /**
+ Returns the font size to be used.
+
+ \note If fontSize value is greater 0, the value is taken as exact size,
+ if less than 0, it is interpreted as being a per-mille value of the logical
+ height (or width, resp.) of the area to be used for drawing.
+ Normally the actual font size is calculated dynamically in methode paint.
+ <b>However</b> if fontSize is zero no calculating will take place but the
+ size of the content font is used.
+ */
+ int fontSize() const
+ {
+ return _fontSize;
+ }
+
+ /**
+ Returns the way how the font size is calculated <b>if</b> fontSize() is negative.
+
+ If true the font size will be calculated based upon the the size of the drawing
+ area, otherwise it will be calculated based upon the height of the box.
+ */
+ bool fontScaleGlobal() const
+ {
+ return _fontScaleGlobal;
+ }
+
+ /**
+ Returns the area to which the box is to be aligned.
+ */
+ uint anchorArea() const
+ {
+ return _anchorArea;
+ }
+
+ /**
+ Returns the anchor position.
+ This is the edge (or the corner, resp.) of the area
+ to which the box is to be aligned.
+ */
+ KDChartEnums::PositionFlag anchorPosition() const
+ {
+ return _anchorPos;
+ }
+
+ /**
+ Returns the way how the box is to be aligned to its anchor.
+ */
+ uint anchorAlign() const
+ {
+ return _anchorAlign;
+ }
+
+ /**
+ Returns the row number of the KDChart data region that is to be used
+ as anchor area. You should use this if anchorArea is \c AreaChartDataRegion
+ to find out the data region which the box is to be aligned to.
+ */
+ uint dataRow() const
+ {
+ return _dataRow;
+ }
+
+ /**
+ Returns the column number of the KDChart data region that is to be used
+ as anchor area. You should use this if anchorArea is \c AreaChartDataRegion
+ to find out the data region which the box is to be aligned to.
+ */
+ uint dataCol() const
+ {
+ return _dataCol;
+ }
+
+ /**
+ Returns the third dimensions number of the KDChart data region that is to be used
+ as anchor area. You should use this if anchorArea is \c AreaChartDataRegion
+ and if there is a 3-dimensional data structure
+ to find out the data region which the box is to be aligned to.
+ */
+ uint data3rd() const
+ {
+ return _data3rd;
+ }
+
+ /**
+ Returns the X distance between the box and its anchor.
+ <b>Note: </b> If greater 0, the value is taken as exact offset,
+ if less than 0, it is interpreted as being a per-mille value of the
+ size of the drawing area (or as percent value of the actual font size
+ (as returned by QFontMetrics::lineSpacing() ) if deltaScaleGlobal is FALSE, resp.).
+ Actual drawing position/size is calculated dynamically in methode trueRect.
+
+ \sa deltaY, deltaAlign, deltaScaleGlobal
+ */
+ int deltaX() const
+ {
+ return _deltaX;
+ }
+
+ /**
+ Returns the Y distance between the box and its anchor.
+ <b>Note: </b> If greater 0, the value is taken as exact offset,
+ if less than 0, it is interpreted as being a per-mille value of the
+ size of the drawing area (or as percent value of the actual font size
+ (as returned by QFontMetrics::lineSpacing() ) if deltaScaleGlobal is FALSE, resp.).
+ Actual drawing position/size is calculated dynamically in methode trueRect.
+
+ \sa deltaX, deltaAlign, deltaScaleGlobal
+ */
+ int deltaY() const
+ {
+ return _deltaY;
+ }
+
+ /**
+ Returns the way how the values specified for deltaX and/or deltaY
+ affect the position of the box.
+
+ \sa setDeltaAlign, deltaX, deltaY, deltaScaleGlobal
+ */
+ uint deltaAlign() const
+ {
+ return _deltaAlign;
+ }
+
+ /**
+ Returns the way how the distance between the box and its anchor
+ is calculated.
+
+ \sa setDeltaScaleGlobal, deltaX, deltaY, deltaAlign
+ */
+ bool deltaScaleGlobal() const
+ {
+ return _deltaScaleGlobal;
+ }
+
+ /**
+ Returns the width of the region where
+ to draw the box. <b>Note:</b> If greater 0, the value is the exact offset,
+ if less than 0, it is interpreted as being a per-mille value
+ of the logical height (or width, resp.) of the area to be used for drawing.
+ Actual drawing position/size is calculated dynamically in methode trueRect.
+ */
+ int width() const
+ {
+ return _width;
+ }
+
+ /**
+ Returns the height of the region where
+ to draw the box. <b>Note:</b> If greater 0, the value is the exact offset,
+ if less than 0, it is interpreted as being a per-mille value
+ of the logical height (or width, resp.) of the area to be used for drawing.
+ Actual drawing position/size is calculated dynamically in methode trueRect.
+ */
+ int height() const
+ {
+ return _height;
+ }
+
+ /**
+ Returns the text color.
+ */
+ QColor color() const
+ {
+ return _color;
+ }
+
+ /**
+ Returns the background brush.
+ */
+ const QBrush & paper() const
+ {
+ return _paper;
+ }
+
+public:
+ /**
+ Destructor. Only defined to have it virtual.
+ */
+ virtual ~KDChartCustomBox();
+
+ /**
+ Copy the settings of box \c source into this box.
+
+ \note Use this method instead of using the assignment operator.
+
+ \sa clone
+ */
+ void deepCopy( const KDChartCustomBox* source );
+
+
+ /**
+ Create a new box on the heap, copy the settings stored by
+ this box into the newly created box and return
+ the pointer to the new box.
+
+ \note Use this method instead of using the copy constructor.
+
+ \sa deepCopy
+ */
+ const KDChartCustomBox* clone() const;
+
+private:
+ KDChartCustomBox( const KDChartCustomBox& ) : QObject(0) {}
+
+protected:
+ /**
+ Internal routine for recursion handling.
+ Note: This is a const methode changing NO VITAL information
+ of the box but setting an internal, temporary flag.
+ */
+ void setInternalFlagAnchorBeingCalculated( bool flag ) const
+ {
+ KDChartCustomBox* that = const_cast<KDChartCustomBox*>(this);
+ that->_anchorBeingCalculated = flag;
+ }
+ /**
+ Internal routine for recursion handling.
+ */
+ bool anchorBeingCalculated() const
+ {
+ return _anchorBeingCalculated;
+ }
+
+ void setParentAxisArea( int parentAxis ) const
+ {
+ KDChartCustomBox* that = const_cast<KDChartCustomBox*>(this);
+ that->_parentAxisArea = parentAxis;
+ }
+
+ int parentAxisArea() const
+ {
+ return _parentAxisArea;
+ }
+
+private:
+ int _rotation;
+ KDChartTextPiece _content;
+ int _fontSize;
+ bool _fontScaleGlobal;
+ // Values to be transformed into a real rect at painting time.
+ // If greater 0, values are exact, if less than 0, values are in per-mille
+ // of the size of the drawing area.
+ int _deltaX;
+ int _deltaY;
+ int _width;
+ int _height;
+
+ QColor _color;
+ QBrush _paper;
+
+ uint _anchorArea;
+ KDChartEnums::PositionFlag _anchorPos;
+ uint _anchorAlign;
+ uint _dataRow;
+ uint _dataCol;
+ uint _data3rd;
+ uint _deltaAlign;
+ bool _deltaScaleGlobal;
+ //
+ // The following flag is NOT to be saved/restored in a file.
+ //
+ // Being a TEMPORARY flag preventing circular recursion
+ // it must be set to f a l s e
+ // after loading a KDChartCustomBox from a file.
+ bool _anchorBeingCalculated;
+ int _parentAxisArea;
+};
+
+
+/**
+ Writes the KDChartCustomBox object p as an XML document to the text stream s.
+
+ \param s the text stream to write to
+ \param p the KDChartCustomBox object to write
+ \return the text stream after the write operation
+ */
+//QTextStream& operator<<( QTextStream& s, const KDChartCustomBox& p );
+
+
+/**
+ Reads the an XML document from the text stream s into the
+ KDChartCustomBox object p
+
+ \param s the text stream to read from
+ \param p the KDChartCustomBox object to read into
+ \return the text stream after the read operation
+ */
+//QTextStream& operator>>( QTextStream& s, KDChartCustomBox& p );
+
+
+#endif
diff --git a/libkdchart/KDChartCustomBoxWrapper.cpp b/libkdchart/KDChartCustomBoxWrapper.cpp
new file mode 100644
index 0000000..2ee28eb
--- /dev/null
+++ b/libkdchart/KDChartCustomBoxWrapper.cpp
@@ -0,0 +1,13 @@
+#include "KDChartCustomBoxWrapper.h"
+KDChartCustomBoxWrapper::KDChartCustomBoxWrapper( KDChartCustomBox* data)
+ :QObject(0), _data(data)
+{
+}
+
+const KDChartTextPiece* KDChartCustomBoxWrapper::content() const
+{
+ return &_data->content();
+}
+
+
+#include "KDChartCustomBoxWrapper.moc"
diff --git a/libkdchart/KDChartCustomBoxWrapper.h b/libkdchart/KDChartCustomBoxWrapper.h
new file mode 100644
index 0000000..b294a24
--- /dev/null
+++ b/libkdchart/KDChartCustomBoxWrapper.h
@@ -0,0 +1,33 @@
+#ifndef KDCHARTCUSTOMBOX_H
+#define KDCHARTCUSTOMBOX_H
+
+#include <qobject.h>
+#include "KDChartCustomBox.h"
+class KDChartCustomBox;
+class KDChartTextPiece;
+class KDChartCustomBoxWrapper :public QObject
+{
+ Q_OBJECT
+
+public:
+ KDChartCustomBoxWrapper( KDChartCustomBox* );
+
+public slots:
+ const KDChartTextPiece* content() const;
+
+
+ // These methods need to be here, for the enums to work.
+ void setAnchorPosition( int position )
+ {
+ _data->setAnchorPosition( (KDChartEnums::PositionFlag) position );
+ }
+
+
+
+private:
+ KDChartCustomBox* _data;
+};
+
+
+#endif /* KDCHARTCUSTOMBOX_H */
+
diff --git a/libkdchart/KDChartDataIntern.cpp b/libkdchart/KDChartDataIntern.cpp
new file mode 100644
index 0000000..21640f4
--- /dev/null
+++ b/libkdchart/KDChartDataIntern.cpp
@@ -0,0 +1,221 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#include <KDChartDataIntern.h>
+
+/**
+ \class KDChartData KDChartData.h
+
+ \brief Encapsulates one data cell in a chart.
+
+ Data cells either hold one value for the ordinate axis
+ or they hold two values: one for the ordinate axis and
+ an extra one for the abscissa axis.
+
+ Ordinate values can either be of type double or non-existant,
+ abscissa values can either be of type double or QDateTime or non-existant.
+
+ \note All methods returning one of the data values (or one of the data
+ types, resp.) expect a valNo parameter with either a 1 for the first value
+ (the Y or ordinate value)
+ or a 2 for the second value (the X or abscissa value).
+ */
+
+
+/**
+ \fn KDChartData::KDChartData()
+
+ Constructor. Creates a KDChartData object that represents no value.
+ */
+
+/**
+ \fn KDChartData::KDChartData( double value )
+
+ Constructor. Assigns a double value to this object.
+
+ \param value the double value which this object should represent.
+ */
+
+/**
+ \fn KDChartData::KDChartData( double yValue, double xValue )
+
+ Constructor. Assigns two double values to this object.
+
+ \param yValue the double value which this object should represent.
+ \param xValue the position on the abscissa axis which this object
+ should be assigned to.
+ */
+
+
+/**
+ \fn KDChartData::KDChartData( double yValue, QDateTime xValue )
+
+ Constructor. Assigns a double value and a QDateTime value to this object.
+
+ \param yValue the double value which this object should represent.
+ \param xValue the position on the abscissa axis which this object
+ should be assigned to.
+ */
+
+
+/**
+ \fn KDChartData::KDChartData( const QString& value )
+
+ Constructor. Assigns a string value to this object.
+
+ This data type may be used to store axis labels or legend texts
+ in extra data cells.
+
+ \param value the string value which this object should represent
+ */
+
+
+/**
+ \fn bool KDChartData::hasValue(int) const
+
+ Returns true if the object represents a value (double or QString)
+ and false otherwise.
+
+ \return true if the object represents a value
+ */
+
+/**
+ \fn bool KDChartData::isDateTime(int) const
+
+ Returns true if the object represents a QDateTime value and false
+ otherwise.
+
+ \return true if the object represents a QDateTime value
+ */
+
+/**
+ \fn bool KDChartData::isString(int) const
+
+ Returns true if the object represents a QString value and false
+ otherwise.
+
+ \return true if the object represents a QString value
+ */
+
+/**
+ \fn bool KDChartData::isDouble(int) const
+
+ Returns true if the object represents a double value and false
+ otherwise.
+
+ \return true if the object represents a double value
+ */
+
+/**
+ \fn bool KDChartData::isNormalDouble(int) const
+
+ Returns true if the object represents a double value that
+ is neither KDCHART_POS_INFINITE nor KDCHART_NEG_INFINITE.
+
+ \return true if the object represents a normal double value
+ */
+
+/**
+ \fn bool KDChartData::isPosInfiniteDouble(int) const
+
+ Returns true if the object represents a double value that
+ is KDCHART_POS_INFINITE.
+
+ \return true if the object represents a KDCHART_POS_INFINITE value
+ */
+
+/**
+ \fn bool KDChartData::isNegInfiniteDouble(int) const
+
+ Returns true if the object represents a double value that
+ is KDCHART_NEG_INFINITE.
+
+ \return true if the object represents a KDCHART_NEG_INFINITE value
+ */
+
+
+/**
+ \fn double KDChartData::doubleValue( int valNo=1 ) const
+
+ Returns the double value represented by this object,
+ or DBL_MIN if this object does not represent a double value.
+
+ You may use isDouble() or isNormalDouble() to check if it
+ is appropriate to call this function.
+
+ \return the double value represented by this object,
+ or DBL_MIN if this object does not represent a double value
+ */
+
+/**
+ \fn QDateTime KDChartData::dateTimeValue( int valNo=1 ) const
+
+ Returns the QDateTime value represented by this object,
+ or QDateTime() if this object does not represent a QDateTime value.
+
+ You may use isDateTime() to check if it
+ is appropriate to call this function.
+
+ \return the QDateTime value represented by this object,
+ or QDateTime() if this object does not represent a QDateTime value
+ */
+
+/**
+ \fn QString KDChartData::stringValue( int valNo=1 ) const
+
+ Returns the string value represented by this object,
+ or QString::null if this object does not represent a string value.
+
+ You may use isString() to check if it
+ is appropriate to call this function.
+
+ \note String values may be used to store axis labels or legend texts
+ in extra data cells.
+
+ \return the string value represented by this object,
+ or QString::null if this object does not represent a string value
+ */
+
+
+/**
+ \fn KDChartData::ValueType KDChartData::valueType( int valNo ) const
+
+ Returns the type of the respective value.
+
+ \param valNo specifies the value number: 1 means the Y value, 2 means the X value
+
+ \return the type of the respective value
+ */
+
+
+/**
+ \fn void KDChartData::clearValue()
+
+ Resets both of the data types of this cell to KDChartData::NoValue
+ and sets the property set ID to KDCHART_PROPSET_NORMAL_DATA.
+ */
diff --git a/libkdchart/KDChartDataIntern.h b/libkdchart/KDChartDataIntern.h
new file mode 100644
index 0000000..cb41b5c
--- /dev/null
+++ b/libkdchart/KDChartDataIntern.h
@@ -0,0 +1,432 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+*/
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klar�vdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTDATAINTERN_H__
+#define __KDCHARTDATAINTERN_H__
+
+#include <qvariant.h>
+#include <qstring.h>
+#include <qdatetime.h>
+#include "KDChartGlobal.h"
+
+/**
+ \file KDChartData.h
+
+ \brief Provides a class to encapsulate one data value in a chart.
+*/
+
+
+
+// Please leave all methods in this class inline!
+// It's necessary since it's part of the interface provided by KDChart
+class KDCHART_EXPORT KDChartData
+{
+public:
+ // 0. default c'tor: initializing all values as undefined
+
+ KDChartData() :
+ _valueType( QVariant::Invalid ),
+ _valueType2( QVariant::Invalid ),
+ _propSetID( 0 )
+ {}
+
+ // 1. simple c'tors: used for 1-coordinate data
+
+ KDChartData( double value ) :
+ _valueType( QVariant::Double ), dValue( value ),
+ _valueType2( QVariant::Invalid ),
+ _propSetID( 0 )
+ {}
+ /* string values are only supported for legend texts or axis labels */
+ KDChartData( const QString& value ) :
+ _valueType( QVariant::String ), sValue( value ),
+ _valueType2( QVariant::Invalid ),
+ _propSetID( 0 )
+ {}
+ /* date/time values for /ordinate/ axes are not implemented yet
+ KDChartData( QDateTime value ) :
+ _valueType( QVariant::DateTime ), dtValue( value ),
+ _valueType2( QVariant::Invalid ),
+ _propSetID( 0 )
+ {}*/
+
+ // 2. complex c'tors: used for 2-coordinate data
+
+ // 2.a) with additional Date/Time: normally used when Date on x-axis
+ // e.g. for time related index numbers like water level measurements
+ KDChartData( double yValue, QDateTime xValue ) :
+ _valueType( QVariant::Double ), dValue( yValue ),
+ _valueType2( QVariant::DateTime ), dtValue2( xValue ),
+ _propSetID( 0 )
+ {}
+
+
+ KDChartData( const QVariant& _value1,
+ const QVariant& _value2 )
+ {
+ switch( _value1.type() ){
+ case QVariant::Int:
+ case QVariant::UInt:
+ case QVariant::Double:
+ _valueType = QVariant::Double;
+ dValue = _value1.toDouble();
+ break;
+ case QVariant::DateTime:
+ _valueType = QVariant::DateTime;
+ dtValue = _value1.toDateTime();
+ break;
+ case QVariant::String:
+ _valueType = QVariant::String;
+ sValue = _value1.toString();
+ break;
+ default:
+ _valueType = QVariant::Invalid;
+ }
+ switch( _value2.type() ){
+ case QVariant::Int:
+ case QVariant::UInt:
+ case QVariant::Double:
+ _valueType2 = QVariant::Double;
+ dValue2 = _value2.toDouble();
+ break;
+ case QVariant::DateTime:
+ _valueType2 = QVariant::DateTime;
+ dtValue2 = _value2.toDateTime();
+ break;
+ default:
+ _valueType2 = QVariant::Invalid;
+ }
+ _propSetID = 0;
+ }
+
+ /* date/time values for /ordinate/ axes are not implemented yet
+ KDChartData( QDateTime yValue, QDateTime xValue ) :
+ _valueType( DateTime ), dtValue( yValue ),
+ _valueType2( DateTime ), dtValue2( xValue ),
+ _propSetID( 0 )
+ {}*/
+ // 2.b) with additional Double: may be used for mathematical data...
+ KDChartData( double yValue, double xValue ) :
+ _valueType( QVariant::Double ), dValue( yValue ),
+ _valueType2( QVariant::Double ), dValue2( xValue ),
+ _propSetID( 0 )
+ {}
+ /* date/time values for /ordinate/ axes are not implemented yet
+ KDChartData( QDateTime yValue, double xValue ) :
+ _valueType( DateTime ), dtValue( yValue ),
+ _valueType2( Double ), dValue2( xValue ),
+ _propSetID( 0 )
+ {}*/
+
+/*
+ /-**
+ Copy constructor.
+
+ \sa setData
+ * /
+ KDChartData( const KDChartData& other ) :
+ {
+ setData( other );
+ }
+
+ /-**
+ Assignment operator.
+
+ \sa setData
+ * /
+ KDChartData& operator=( const KDChartData& R )
+ {
+ setData( R );
+ return *this;
+ }
+*/
+ /**
+ Compare operator.
+
+ \sa isEqual
+ */
+ bool operator==( const KDChartData& it ) const
+ {
+ return isEqual(*this, it);
+ }
+
+ /**
+ Compare operator.
+
+ \sa isEqual
+ */
+ bool operator!=( const KDChartData& it ) const
+ {
+ return !isEqual(*this, it);
+ }
+
+ /**
+ Compare method.
+
+ \note The property set ID is <b>not</b> taken into account while comparing.
+ Two KDChartData are considered equal if their data values are equal - the
+ property set ID is ignored.
+ */
+ bool isEqual( const KDChartData& a, const KDChartData& b ) const
+ {
+ bool bRet = (a.hasValue( 1 ) == b.hasValue( 1 )) &&
+ (a.hasValue( 2 ) == b.hasValue( 2 ));
+ if ( bRet && a.hasValue( 1 ) ) {
+ bRet = a.valueType( 1 ) == b.valueType( 1 );
+ if ( bRet ) {
+ switch ( a.valueType( 1 ) ) {
+ case QVariant::String:
+ bRet = a.stringValue( 1 ) == b.stringValue( 1 );
+ break;
+ case QVariant::Double:
+ bRet = a.doubleValue( 1 ) == b.doubleValue( 1 );
+ break;
+ case QVariant::DateTime:
+ bRet = a.dateTimeValue( 1 ) == b.dateTimeValue( 1 );
+ break;
+ default:
+ bRet = false;
+ }
+ }
+ if ( bRet && a.hasValue( 2 ) ) {
+ bRet = a.valueType( 2 ) == b.valueType( 2 );
+ if ( bRet ) {
+ switch ( a.valueType( 2 ) ) {
+ // note: the 2nd value can not be a string
+ // - must be a date or a number!
+ case QVariant::Double:
+ bRet = a.doubleValue( 2 ) == b.doubleValue( 2 );
+ break;
+ case QVariant::DateTime:
+ bRet = a.dateTimeValue( 2 ) == b.dateTimeValue( 2 );
+ break;
+ default:
+ bRet = false;
+ }
+ }
+ }
+ // Note: We do *not* compare the _propSetID here since it contains
+ // no values but is used to handle some layout information...
+ }
+ return bRet;
+ }
+
+ /**
+ Method setAll.
+
+ \note The property set ID is <b>also</b> changed by the setAll method.
+
+ \sa setData
+ */
+ void setAll( const KDChartData& R )
+ {
+ setData( R );
+ setPropertySet( R.propertySet() );
+ }
+
+
+ /**
+ Method setData.
+
+ \note The property set ID is <b>not</b> changed by the setData method.
+ If you want to set it please call \c KDChartData::setPropertySet() explicitely.
+
+ \sa setAll
+ */
+ void setData( const KDChartData& R )
+ {
+ if( &R != this ){
+ _valueType = R._valueType;
+ _valueType2 = R._valueType2;
+ switch ( valueType( 1 ) ) {
+ case QVariant::String:
+ sValue = R.sValue;
+ break;
+ case QVariant::Double:
+ dValue = R.dValue;
+ break;
+ case QVariant::DateTime:
+ dtValue = R.dtValue;
+ break;
+ default:
+ /* NOOP */;
+ }
+ switch ( valueType( 2 ) ) {
+ // note: the 2nd value can not be a string
+ // - must be a date or a number!
+ case QVariant::Double:
+ dValue2 = R.dValue2;
+ break;
+ case QVariant::DateTime:
+ dtValue2 = R.dtValue2;
+ break;
+ default:
+ /* NOOP */;
+ }
+ // Note: We do *not* copy the _propSetID here since it contains
+ // no values but is used to handle some layout information...
+ }
+ }
+
+ QVariant::Type valueType( int valNo=1 ) const
+ {
+ return (1 == valNo)
+ ? _valueType
+ : _valueType2;
+ }
+ bool hasValue( int valNo=1 ) const
+ {
+ return (1 == valNo)
+ ? (_valueType != QVariant::Invalid)
+ : ((_valueType2 == QVariant::Double) || (_valueType2 == QVariant::DateTime));
+ }
+ /* string values are only supported for legend texts or axis labels */
+ bool isString( int valNo=1 ) const
+ {
+ return (1 == valNo)
+ ? (_valueType == QVariant::String)
+ : false;
+ }
+ bool isDouble( int valNo=1 ) const
+ {
+ return (1 == valNo)
+ ? (_valueType == QVariant::Double)
+ : (_valueType2 == QVariant::Double);
+ }
+ bool isDateTime( int valNo=1 ) const
+ {
+ return (1 == valNo)
+ ? (_valueType == QVariant::DateTime)
+ : (_valueType2 == QVariant::DateTime);
+ }
+
+
+ void clearValue()
+ {
+ _valueType = QVariant::Invalid;
+ _valueType2 = QVariant::Invalid;
+ _propSetID = 0;
+ }
+
+ QVariant value( int valNo=1 ) const
+ {
+ if( 1 == valNo )
+ switch ( valueType( 1 ) ) {
+ case QVariant::String:
+ return sValue;
+ case QVariant::Double:
+ return dValue;
+ case QVariant::DateTime:
+ return dtValue;
+ default:
+ return QVariant();
+ }
+ else if( 2 == valNo )
+ switch ( valueType( 2 ) ) {
+ case QVariant::Double:
+ return dValue2;
+ case QVariant::DateTime:
+ return dtValue2;
+ default:
+ return QVariant();
+ }
+ else
+ return QVariant();
+ }
+
+ /* string values are only supported for legend texts or axis labels */
+ QString stringValue( int valNo=1 ) const
+ {
+ // note: the 2nd value can not be a string
+ // - must be a date or a number!
+ if ((1 == valNo) && isString( valNo ))
+ return sValue;
+ else
+ return QString::null;
+ }
+ double doubleValue( int valNo=1 ) const
+ {
+ return isDouble( valNo )
+ ? ((1 == valNo) ? dValue : dValue2)
+ : DBL_MIN;
+ }
+ QDateTime dateTimeValue( int valNo=1 ) const
+ {
+ return isDateTime( valNo )
+ ? ((1 == valNo) ? dtValue : dtValue2)
+ : QDateTime();
+ }
+
+ /**
+ Assign a property set to a data cell.
+
+ \param propSetID The ID of the property set to be assigned to this data cell.
+ This ID can either be one of the built-in IDs documented
+ at KDChartPropertySet::BuiltinDataPropertySetIDs or
+ a special ID that was given back by a
+ KDChartParams::registerProperties function call.
+
+ \sa propertySet
+ \sa KDCHART_PROPSET_NORMAL_DATA, KDCHART_PROPSET_TRANSPARENT_DATA
+ */
+ void setPropertySet( int propSetID = 0 )
+ {
+ _propSetID = propSetID;
+ }
+ /**
+ Return the ID of the property set that is assigned to this data cell.
+
+ Use KDChartParams::properties( int ID ) for accessing the respective property set information.
+
+ \sa setPropertySet
+ \sa KDCHART_PROPSET_NORMAL_DATA, KDCHART_PROPSET_TRANSPARENT_DATA
+ */
+ int propertySet() const
+ {
+ return _propSetID;
+ }
+
+
+private:
+ // OBLIGATORY 1st value: usually used for ordinate axis
+ QVariant::Type _valueType;
+ QDateTime dtValue;
+ double dValue; // Sorry, d(t)Value and sValue cannot be a union,
+ QString sValue; // since QString has a non-default constructor.
+
+ // OPTIONAL 2nd value: if valid, normally used for abscissa axis
+ // note: this 2nd value can not be a string - must be a date or a number!
+ QVariant::Type _valueType2;
+ QDateTime dtValue2;
+ double dValue2;
+
+ // ID number of the property set assigned to this cell
+ int _propSetID;
+};
+
+#endif
diff --git a/libkdchart/KDChartDataRegion.h b/libkdchart/KDChartDataRegion.h
new file mode 100644
index 0000000..a1d8303
--- /dev/null
+++ b/libkdchart/KDChartDataRegion.h
@@ -0,0 +1,226 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTDATAREGION__
+#define __KDCHARTDATAREGION__
+
+#include <qregion.h>
+#include <qpointarray.h>
+
+#include "KDChartGlobal.h"
+
+/*!
+ \internal
+ */
+struct KDCHART_EXPORT KDChartDataRegion
+{
+ typedef QValueList<QPointArray> PointArrayList;
+
+ KDChartDataRegion()
+ {
+ init();
+ }
+
+ KDChartDataRegion( QRegion region, uint r, uint c, uint ch )
+ {
+ init();
+ pRegion = new QRegion( region );
+ row = r;
+ col = c;
+ chart = ch;
+ }
+
+ KDChartDataRegion( uint r, uint c, uint ch, QPointArray array )
+ {
+ init();
+ pArray = new QPointArray( array );
+ row = r;
+ col = c;
+ chart = ch;
+ }
+
+ KDChartDataRegion( uint r, uint c, uint ch, QRect rect )
+ {
+ init();
+ pRect = new QRect( rect );
+ row = r;
+ col = c;
+ chart = ch;
+ }
+ KDChartDataRegion( uint r, uint c, uint ch, PointArrayList * list, bool takeOwnership )
+ {
+ init();
+ if( takeOwnership )
+ pPointArrayList = list;
+ else
+ pPointArrayList = new PointArrayList( * list );
+ row = r;
+ col = c;
+ chart = ch;
+ }
+
+ ~KDChartDataRegion()
+ {
+ //qDebug ("~KDChartDataRegion");
+ if( pPointArrayList )
+ delete pPointArrayList;
+ if( pRegion )
+ delete pRegion;
+ if( pArray )
+ delete pArray;
+ if( pRect )
+ delete pRect;
+ if( pTextRegion )
+ delete pTextRegion;
+ }
+
+ QRegion region() const
+ {
+ if( pPointArrayList && ! pPointArrayList->empty() ){
+ QRegion region;
+ PointArrayList::iterator it;
+ for ( it = pPointArrayList->begin(); it != pPointArrayList->end(); ++it ){
+ region += QRegion( *it );
+ }
+ return region;
+ }
+ if( pRegion )
+ return *pRegion;
+ if( pArray )
+ return QRegion( *pArray );
+ if( pRect )
+ return QRegion( *pRect );
+ return QRegion();
+ }
+
+ QRect rect() const
+ {
+ if( pPointArrayList && ! pPointArrayList->empty() ){
+ QRect rect;
+ PointArrayList::iterator it;
+ for ( it = pPointArrayList->begin(); it != pPointArrayList->end(); ++it ){
+ rect = rect.unite( (*it).boundingRect() );
+ }
+ return rect;
+ }
+ if( pRegion )
+ return pRegion->boundingRect();
+ if( pArray )
+ return pArray->boundingRect();
+ if( pRect )
+ return *pRect;
+ return QRect();
+ }
+
+ bool contains(const QPoint & p) const
+ {
+ if( pPointArrayList && ! pPointArrayList->empty() ){
+ PointArrayList::iterator it;
+ for ( it = pPointArrayList->begin(); it != pPointArrayList->end(); ++it ){
+ QRegion region( *it );
+ if( region.contains( p ) )
+ return true;
+ }
+ return false;
+ }
+ if( pRegion )
+ return pRegion->contains( p );
+ if( pArray )
+ return QRegion( *pArray ).contains( p );
+ if( pRect )
+ return pRect->contains( p );
+ return false;
+ }
+
+ void init()
+ {
+ pRegion = 0;
+ pArray = 0;
+ pRect = 0;
+ pTextRegion = 0;
+ pPointArrayList = 0;
+ row = 0;
+ col = 0;
+ chart = 0;
+ negative = false; // default value (useful if value is a string)
+ points.resize( 9 );
+ startAngle = 1440;
+ angleLen = 1;
+ }
+
+ QRegion* pRegion;
+ QPointArray* pArray;
+ QRect* pRect;
+ QRegion* pTextRegion; // for the data values text
+
+ // for three-dimensional bars, and for comparable structures, needing
+ // more than one QPointArray, we use this list:
+ PointArrayList* pPointArrayList;
+
+ // For rectangular data representation (bar, line, area, point, ...)
+ // we use the above declared 'pRect'.
+ // For curved data representations (pie slice, ring segment, ...)
+ // we store the following additional anchor information:
+
+ // store 9 elements: one for each value of KDChartEnums::PositionFlag
+ QPointArray points;
+
+ int startAngle; // Note: 5760 makes a full circle, 2880 is left 'corner'.
+ int angleLen;
+
+ uint row;
+ uint col;
+ // members needed for calculation of data values texts
+ uint chart;
+ QString text; // the data values text
+ bool negative; // stores whether the data value is less than zero
+};
+
+
+/**
+ \class KDChartDataRegionList KDChartDataRegion.h
+
+ \brief The collection class used by KD Chart to store data region information.
+
+ This class is derived from QPtrList, so all of the Qt documentation for this class
+ is valid for KDChartDataRegionList too.
+
+ \note Normally there is no need to use this class yourself, since it
+ is instantiated by the KDChartWidget. If however you are not using the
+ KDChartWidget class but calling the painting methods of KDChart directly,
+ make sure to either free the pointer stored in KDChartDataRegionList manually,
+ or to call setAutoDelete( true ) to let your KDChartDataRegionList own these pointers:
+ in this case please also make sure to call the clear() method whenever you want
+ your KDChartDataRegionList to free these pointers.
+ Note that all of this ONLY applies in case of NOT using the KDChartWidget.
+
+ \sa KDChart, KDChartWidget
+ */
+typedef QPtrList < KDChartDataRegion > KDChartDataRegionList;
+
+#endif
diff --git a/libkdchart/KDChartEnums.cpp b/libkdchart/KDChartEnums.cpp
new file mode 100644
index 0000000..b94f16d
--- /dev/null
+++ b/libkdchart/KDChartEnums.cpp
@@ -0,0 +1,98 @@
+#include "KDChartEnums.h"
+
+QString KDChartEnums::positionFlagToString( PositionFlag type )
+{
+ switch( type ) {
+ case PosTopLeft:
+ return "TopLeft";
+ case PosTopCenter:
+ return "TopCenter";
+ case PosTopRight:
+ return "TopRight";
+ case PosCenterLeft:
+ return "CenterLeft";
+ case PosCenter:
+ return "Center";
+ case PosCenterRight:
+ return "CenterRight";
+ case PosBottomLeft:
+ return "BottomLeft";
+ case PosBottomCenter:
+ return "BottomCenter";
+ case PosBottomRight:
+ return "BottomRight";
+ default: // should not happen
+ qDebug( "Unknown content position" );
+ return "TopLeft";
+ }
+}
+
+KDChartEnums::PositionFlag KDChartEnums::stringToPositionFlag( const QString& string )
+{
+ if( string == "TopLeft" )
+ return PosTopLeft;
+ else if( string == "TopCenter" )
+ return PosTopCenter;
+ else if( string == "TopRight" )
+ return PosTopRight;
+ else if( string == "CenterLeft" )
+ return PosCenterLeft;
+ else if( string == "Center" )
+ return PosCenter;
+ else if( string == "CenterRight" )
+ return PosCenterRight;
+ else if( string == "BottomLeft" )
+ return PosBottomLeft;
+ else if( string == "BottomCenter" )
+ return PosBottomCenter;
+ else if( string == "BottomRight" )
+ return PosBottomRight;
+ else // default, should not happen
+ return PosTopLeft;
+}
+
+QPoint KDChartEnums::positionFlagToPoint( const QRect& rect,
+ PositionFlag pos )
+{
+ QPoint pt;
+ if( rect.isValid() ) {
+ switch( pos ) {
+ case KDChartEnums::PosTopLeft:
+ pt = rect.topLeft();
+ break;
+ case KDChartEnums::PosTopCenter:
+ pt.setY( rect.top() );
+ pt.setX( rect.center().x() );
+ break;
+ case KDChartEnums::PosTopRight:
+ pt = rect.topRight();
+ break;
+ case KDChartEnums::PosCenterLeft:
+ pt.setY( rect.center().y() );
+ pt.setX( rect.left() );
+ break;
+ case KDChartEnums::PosCenter:
+ pt = rect.center();
+ break;
+ case KDChartEnums::PosCenterRight:
+ pt.setY( rect.center().y() );
+ pt.setX( rect.right() );
+ break;
+ case KDChartEnums::PosBottomLeft:
+ pt = rect.bottomLeft();
+ break;
+ case KDChartEnums::PosBottomCenter:
+ pt.setY( rect.bottom() );
+ pt.setX( rect.center().x() );
+ break;
+ case KDChartEnums::PosBottomRight:
+ pt = rect.bottomRight();
+ break;
+ }
+ }
+ return pt;
+}
+
+#ifndef KDCHART_MASTER_CVS
+#include "KDChartEnums.moc"
+#endif
diff --git a/libkdchart/KDChartEnums.h b/libkdchart/KDChartEnums.h
new file mode 100644
index 0000000..530a66e
--- /dev/null
+++ b/libkdchart/KDChartEnums.h
@@ -0,0 +1,305 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTENUMS_H__
+#define __KDCHARTENUMS_H__
+
+#include <qrect.h>
+#include <qpointarray.h>
+
+#include "KDChartGlobal.h"
+#include <qobject.h>
+
+/** \file KDChartEnums.h
+ \brief Definition of global enums.
+ */
+
+/**
+ Project global class providing some enums needed both by KDChartParams
+ and by KDChartCustomBox.
+ */
+class KDCHART_EXPORT KDChartEnums :public QObject
+{
+ Q_OBJECT
+ Q_ENUMS( TextLayoutPolicy )
+ Q_ENUMS( AreaName )
+ Q_ENUMS( PositionFlag )
+
+public:
+ /**
+ Text layout policy: what to do if text that is to be drawn would
+ cover neighboring text or neighboring areas.
+
+ \li \c LayoutJustOverwrite Just ignore the layout collision and write the text nevertheless.
+ \li \c LayoutPolicyRotate Try counter-clockwise rotation to make the text fit into the space.
+ \li \c LayoutPolicyShiftVertically Shift the text baseline upwards (or downwards, resp.) and draw a connector line between the text and its anchor.
+ \li \c LayoutPolicyShiftHorizontally Shift the text baseline to the left (or to the right, resp.) and draw a connector line between the text and its anchor.
+ \li \c LayoutPolicyShrinkFontSize Reduce the text font size.
+
+ \sa KDChartParams::setPrintDataValues
+ */
+ enum TextLayoutPolicy { LayoutJustOverwrite,
+ LayoutPolicyRotate,
+ LayoutPolicyShiftVertically,
+ LayoutPolicyShiftHorizontally,
+ LayoutPolicyShrinkFontSize };
+
+ /**
+ Converts the specified text layout policy enum to a
+ string representation.
+
+ \param type the text layout policy to convert
+ \return the string representation of the text layout policy enum
+ */
+ static QString layoutPolicyToString( TextLayoutPolicy type ) {
+ switch( type ) {
+ case LayoutJustOverwrite:
+ return "JustOverwrite";
+ case LayoutPolicyRotate:
+ return "Rotate";
+ case LayoutPolicyShiftVertically:
+ return "ShiftVertically";
+ case LayoutPolicyShiftHorizontally:
+ return "ShiftHorizontally";
+ case LayoutPolicyShrinkFontSize:
+ return "ShrinkFontSize";
+ default: // should not happen
+ qDebug( "Unknown text layout policy" );
+ return "JustOverwrite";
+ }
+ }
+
+
+ /**
+ Number notation specifies the general way, how a number is to be shown.
+
+ \li \c NumberNotationDecimal Traditional way of writing a decimal number.
+ \li \c NumberNotationScientific Exponential notation, with exactly one non-zero digit to the left of the decimal.
+ \li \c NumberNotationScientificBig Same as \c NumberNotationScientific, but using 'E' instead of 'e'.
+
+ \sa KDChartAxisParams::setAxisLabelsNotation
+ */
+ enum NumberNotation { NumberNotationDecimal,
+ NumberNotationScientific,
+ NumberNotationScientificBig };
+
+ /**
+ Converts the specified number notation enum to a
+ string representation.
+
+ \param notation the number notation to convert
+ \return the string representation of the number notation enum
+ */
+ static QString numberNotationToString( NumberNotation notation ) {
+ switch( notation ) {
+ case NumberNotationDecimal:
+ return "NumberNotationDecimal";
+ case NumberNotationScientific:
+ return "NumberNotationScientific";
+ case NumberNotationScientificBig:
+ return "NumberNotationScientificBig";
+ default: // should not happen
+ qDebug( "Unknown text number notation" );
+ return "NumberNotationDecimal";
+ }
+ }
+
+
+ /**
+ Converts the specified string to a number notation enum value.
+
+ \param string the string to convert
+ \return the number notation enum value
+ */
+ static NumberNotation stringToNumberNotation( const QString& notation ) {
+ if( notation == "NumberNotationDecimal" )
+ return NumberNotationDecimal;
+ else if( notation == "NumberNotationScientific" )
+ return NumberNotationScientific;
+ else if( notation == "NumberNotationScientificBig" )
+ return NumberNotationScientificBig;
+ else // default, should not happen
+ return NumberNotationDecimal;
+ }
+
+
+ /**
+ Converts the specified string to a text layout policy enum value.
+
+ \param string the string to convert
+ \return the text layout policy enum value
+ */
+ static TextLayoutPolicy stringToLayoutPolicy( const QString& string ) {
+ if( string == "JustOverwrite" )
+ return LayoutJustOverwrite;
+ else if( string == "Rotate" )
+ return LayoutPolicyRotate;
+ else if( string == "ShiftVertically" )
+ return LayoutPolicyShiftVertically;
+ else if( string == "ShiftHorizontally" )
+ return LayoutPolicyShiftHorizontally;
+ else if( string == "ShrinkFontSize" )
+ return LayoutPolicyShrinkFontSize;
+ else // default, should not happen
+ return LayoutJustOverwrite;
+ }
+
+ /**
+ Areas of the chart that may have their own backgrounds
+ and/or may be surrounded by a simple or complex border.
+
+ \li \c AreaData surrounding the data area
+ \li \c AreaAxes surrounding the axes but leaving out the data area
+ \li \c AreaDataAxes surrounding the data+axes area
+ \li \c AreaLegend surrounding the legend area
+ \li \c AreaDataAxesLegend surrounding the data+axes+legend area
+ \li \c AreaHeaders surrounding the headers area
+ \li \c AreaFooters surrounding the footers area
+ \li \c AreaDataAxesLegendHeadersFooters surrounding the data+axes+legend+headers+footers area
+ \li \c AreaInnermost covering the complete drawing area but <b>not</b> covering the global left/top/right/bottom leading
+ \li \c AreaOutermost covering the complete drawing area including the global left/top/right/bottom leading
+
+ \li \c AreaChartDataRegion covering the area used to display one data entry (i.e. one point, bar, line, pie slice,...).
+ The respective data coordinates are specified by additional parameters, this is used by
+ KDChartCustomBox where you have the parameters \c dataRow, \c dataCol, \c data3rd.
+
+ In addition there is a special value specifying a <b>list</b> of regions:
+
+ \li \c AreasCustomBoxes specifies many small areas surrounding all the custom boxes that you might have added to the chart,
+ this is useful in case you want to specify some default frame settings to be used for all custom boxes
+ not having frame settings of their own.
+
+ Finally there are three special values that you may use to specify
+ a single axis area (or a header/footer area, or a custom box area resp.).
+ Just add the number of the axis (or header/footer, or custom box resp.)
+ to the respective base value:
+
+ \li \c AreaAxisBASE value to be added to the axis number in case you want to specify a single axis area,
+ e.g. for specifying the area of the left ordinate axis just type <b>AreaAxisBASE + AxisPosLeft</b>.
+ \li \c AreaHdFtBASE value to be added to the header/footer number in case you want to specify a single header (or footer, resp.) area,
+ e.g. for specifying the area of the main header just type <b>AreaHdFtBASE + HdFtPosHeader</b>.
+ \li \c AreaCustomBoxBASE value to be added to the number of a custom box that you might have added to your chart,
+ e.g. for specifying the area a custom box you have added to the chart
+ (let us assume the index of that box is in \c boxIdx1) just type <b>AreaCustBoxBASE + boxIdx1</b>.
+
+ \sa KDChartParams::setSimpleFrame, KDChartParams::setFrame
+ \sa KDChartParams::insertCustomBox, KDChartCustomBox
+ */
+ enum AreaName { AreaUNKNOWN = 0x0000,
+ AreaData = 0x0001,
+ AreaAxes = 0x0002,
+ AreaDataAxes = 0x0003,
+ AreaLegend = 0x0004,
+ AreaDataAxesLegend = 0x0005,
+ AreaHeaders = 0x0006,
+ AreaFooters = 0x0007,
+ AreaDataAxesLegendHeadersFooters = 0x0008,
+ AreaInnermost = 0x0009,
+ AreaOutermost = 0x000a,
+ AreaChartDataRegion = 0x000b,
+ AreasCustomBoxes = 0x000d,
+ AreaAxisBASE = 0x1000,
+ AreaHdFtBASE = 0x2000,
+ AreaCustomBoxesBASE = 0x4000,
+ AreaBASEMask = 0xF000 };
+
+
+ /**
+ The general position flag to specify a point of
+ an area, for example this could be the anchor point
+ which an annotation box should be aligned to.
+
+ The following picture shows the different positions:
+
+ \image html "../refman_images/positions.png"
+ \image latex "../refman_images/positions.png" "the PositionFlag enum" width=4in
+
+ \note The position and alignment of content to be printed at (or
+ inside of, resp.) an area or a point -- like for printing data value texts next
+ to their graphical representations (which might be a bar, line, pie slice,...) --
+ is specified by two parameters: a \c PositionFlag and a uint holding a combination of \c Qt::AlignmentFlags.
+ Remember that Qt::AlignmentFlags are used to specify <b>with which edge</b> something
+ is to be aligned to its anchor, e.g. \c AlignLeft means align with the left edge.
+
+ The position of content and the way it is aligned to this
+ position is shown in the following drawing, note that annotation #2 and annotation #3
+ share the same PositionFlag but have different alignment flags set:
+
+ \image html "../refman_images/alignment.png"
+ \image latex "../refman_images/alignment.png" "positioning and aligning" width=4in
+
+ \sa KDChartParams::setPrintDataValues
+ */
+ enum PositionFlag { PosTopLeft =0, PosTopCenter =1, PosTopRight =2,
+ PosCenterLeft=3, PosCenter =4, PosCenterRight=5,
+ PosBottomLeft=6, PosBottomCenter=7, PosBottomRight=8 };
+
+
+ /**
+ Returns the point representing a position of a rectangle.
+ */
+ static QPoint positionFlagToPoint( const QRect& rect,
+ PositionFlag pos );
+
+ /**
+ Returns the point representing a position of a corresponding
+ QPointArray.
+
+ \note The array \c points <b>must</b> have at least nine elements.
+ */
+ static QPoint positionFlagToPoint( const QPointArray& points,
+ PositionFlag pos )
+ {
+ QPoint pt;
+ if( 9 <= points.size() )
+ pt = points[ pos ];
+ return pt;
+ }
+
+
+ /**
+ Converts the specified content position enum to a
+ string representation.
+
+ \param type the content position to convert
+ \return the string representation of the type enum
+ */
+ static QString positionFlagToString( PositionFlag type );
+
+
+ /**
+ Converts the specified string to a content position enum value.
+
+ \param string the string to convert
+ \return the content position enum value
+ */
+ static PositionFlag stringToPositionFlag( const QString& string );
+};
+
+
+#endif
diff --git a/libkdchart/KDChartGlobal.h b/libkdchart/KDChartGlobal.h
new file mode 100644
index 0000000..4a5f9e7
--- /dev/null
+++ b/libkdchart/KDChartGlobal.h
@@ -0,0 +1,203 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTGLOBAL_H__
+#define __KDCHARTGLOBAL_H__
+
+#include <qglobal.h>
+
+#include <float.h>
+
+#if defined(unix) || defined(__unix__) || defined(Q_WS_MAC) || defined(Q_WS_LINUX)
+#include <limits.h>
+#else
+#define MINDOUBLE DBL_MIN
+#define MAXDOUBLE DBL_MAX
+#endif
+
+#if defined(_MSC_VER)
+#pragma warning(disable: 4251)
+#endif
+#include <kdchart_export.h>
+
+
+/* \file KDChartGlobal.h
+ \brief Definition of global macros.
+ */
+
+
+
+#if defined(_MSC_VER)
+#ifndef QT_NO_STL
+#define QT_NO_STL // Avoid a name clash
+#endif
+#endif
+
+
+
+// important: make the old format of QT_VERSION comparable
+// to the new format that is used since Qt 3.0.0
+#if QT_VERSION == 141
+#define COMPAT_QT_VERSION 0x010401
+#endif
+#if QT_VERSION == 142
+#define COMPAT_QT_VERSION 0x010402
+#endif
+#if QT_VERSION == 143
+#define COMPAT_QT_VERSION 0x010403
+#endif
+#if QT_VERSION == 144
+#define COMPAT_QT_VERSION 0x010404
+#endif
+#if QT_VERSION == 145
+#define COMPAT_QT_VERSION 0x010405
+#endif
+#if QT_VERSION == 200
+#define COMPAT_QT_VERSION 0x020000
+#endif
+#if QT_VERSION == 201
+#define COMPAT_QT_VERSION 0x020001
+#endif
+#if QT_VERSION == 202
+#define COMPAT_QT_VERSION 0x020002
+#endif
+#if QT_VERSION == 210
+#define COMPAT_QT_VERSION 0x020100
+#endif
+#if QT_VERSION == 211
+#define COMPAT_QT_VERSION 0x020101
+#endif
+#if QT_VERSION == 220
+#define COMPAT_QT_VERSION 0x020200
+#endif
+#if QT_VERSION == 221
+#define COMPAT_QT_VERSION 0x020201
+#endif
+#if QT_VERSION == 222
+#define COMPAT_QT_VERSION 0x020202
+#endif
+#if QT_VERSION == 223
+#define COMPAT_QT_VERSION 0x020203
+#endif
+#if QT_VERSION == 224
+#define COMPAT_QT_VERSION 0x020204
+#endif
+#if QT_VERSION == 230
+#define COMPAT_QT_VERSION 0x020300
+#endif
+#if QT_VERSION == 231
+#define COMPAT_QT_VERSION 0x020301
+#endif
+#if QT_VERSION == 232
+#define COMPAT_QT_VERSION 0x020302
+#if defined(_MSC_VER)
+#pragma message( "using Qt 2.3.2" )
+#endif
+#endif
+#if QT_VERSION == 300
+#define COMPAT_QT_VERSION 0x030000
+#endif
+#if QT_VERSION == 301
+#define COMPAT_QT_VERSION 0x030001
+#endif
+#if QT_VERSION == 302
+#define COMPAT_QT_VERSION 0x030002
+#endif
+#if QT_VERSION == 303
+#define COMPAT_QT_VERSION 0x030003
+#endif
+#if QT_VERSION == 304
+#define COMPAT_QT_VERSION 0x030004
+#endif
+#if QT_VERSION == 305
+#define COMPAT_QT_VERSION 0x030005
+#endif
+#if QT_VERSION == 310
+#define COMPAT_QT_VERSION 0x030100
+#endif
+// --- new format since Qt 3.0.0 or since 3.0.4 ???
+#ifndef COMPAT_QT_VERSION
+#if defined(_MSC_VER)
+#pragma message( "using Qt > 2.3.2" )
+#endif
+#define COMPAT_QT_VERSION QT_VERSION
+#endif
+
+// since Qt 3.1 they do /not/ include limits.h or climits on windows anymore
+// so we must include that manually
+#if COMPAT_QT_VERSION > 0x030099
+#if defined(_MSC_VER)
+#include <climits>
+#endif
+#endif
+
+
+#if COMPAT_QT_VERSION < 0x030000
+
+#if !defined(Q_ASSERT)
+#if defined(QT_CHECK_STATE)
+#if defined(QT_FATAL_ASSERT)
+#define Q_ASSERT(x) ((x) ? (void)0 : qFatal("ASSERT: \"%s\" in %s (%d)",#x,__FILE__,__LINE__))
+#else
+#define Q_ASSERT(x) ((x) ? (void)0 : qWarning("ASSERT: \"%s\" in %s (%d)",#x,__FILE__,__LINE__))
+#endif
+#else
+#define Q_ASSERT(x)
+#endif
+#endif
+
+#if !defined(QT_NO_COMPAT)
+// source compatibility with Qt 2.x
+#ifndef Q_OS_TEMP
+# if !defined(ASSERT)
+# define ASSERT(x) Q_ASSERT(x)
+# endif
+#endif // Q_OS_TEMP
+#endif // QT_NO_COMPAT
+
+#define QPtrList QList
+#define QPtrListIterator QListIterator
+#define QPtrVector QVector
+#define QMemArray QArray
+
+#include <qlist.h>
+#include <qvector.h>
+#include <qarray.h>
+
+#else
+
+#include <qptrlist.h>
+#include <qptrvector.h>
+#include <qmemarray.h>
+
+#endif
+// end of #if COMPAT_QT_VERSION < 0x030000
+
+
+
+#endif
diff --git a/libkdchart/KDChartHiLoPainter.cpp b/libkdchart/KDChartHiLoPainter.cpp
new file mode 100644
index 0000000..c95d482
--- /dev/null
+++ b/libkdchart/KDChartHiLoPainter.cpp
@@ -0,0 +1,390 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#include "KDChartHiLoPainter.h"
+#include <KDChartParams.h>
+#include "KDChartTextPiece.h"
+
+#include <qpainter.h>
+
+#include <stdlib.h>
+
+/**
+ \class KDChartHiLoPainter KDChartHiLoPainter.h
+
+ \brief A chart painter implementation that can paint HiLo charts.
+ */
+
+/**
+ Constructor. Sets up internal data structures as necessary.
+
+ \param params the KDChartParams structure that defines the chart
+ */
+ KDChartHiLoPainter::KDChartHiLoPainter( KDChartParams* params ) :
+KDChartAxesPainter( params )
+{
+ // This constructor intentionally left blank so far; we cannot setup the
+ // geometry yet since we do not know the size of the painter.
+}
+
+
+/**
+ Destructor.
+ */
+KDChartHiLoPainter::~KDChartHiLoPainter()
+{
+ // intentionally left blank
+}
+
+
+/**
+ This method is a specialization that returns a fallback legend text
+ appropriate for HiLo that do not have the same notion of a dataset like
+ e.g. bars.
+
+ This method is only used when automatic legends are used, because
+ manual and first-column legends do not need fallback texts.
+
+ \param uint dataset the dataset number for which to generate a
+ fallback text
+ \return the fallback text to use for describing the specified
+ dataset in the legend
+ */
+QString KDChartHiLoPainter::fallbackLegendText( uint dataset ) const
+{
+ return QObject::tr( "Value " ) + QString::number( dataset + 1 );
+}
+
+
+/**
+ This methods returns the number of elements to be shown in the
+ legend in case fallback texts are used.
+
+ This method is only used when automatic legends are used, because
+ manual and first-column legends do not need fallback texts.
+
+ \return the number of fallback texts to use
+ */
+uint KDChartHiLoPainter::numLegendFallbackTexts( KDChartTableDataBase* data ) const
+{
+ return data->usedRows();
+}
+
+
+bool KDChartHiLoPainter::isNormalMode() const
+{
+ return KDChartParams::HiLoNormal == params()->hiLoChartSubType();
+}
+
+int KDChartHiLoPainter::clipShiftUp( bool, double ) const
+{
+ return 0;
+}
+
+void KDChartHiLoPainter::specificPaintData( QPainter* painter,
+ const QRect& ourClipRect,
+ KDChartTableDataBase* data,
+ KDChartDataRegionList* /*regions*/,
+ const KDChartAxisParams* axisPara,
+ bool /*bNormalMode*/,
+ uint /*chart*/,
+ double logWidth,
+ double areaWidthP1000,
+ double logHeight,
+ double axisYOffset,
+ double /*minColumnValue*/,
+ double /*maxColumnValue*/,
+ double /*columnValueDistance*/,
+ uint chartDatasetStart,
+ uint chartDatasetEnd,
+ uint datasetStart,
+ uint datasetEnd )
+{
+ double areaHeightP1000 = logHeight / 1000.0;
+ double averageValueP1000 = ( areaWidthP1000 + areaHeightP1000 ) / 2.0;
+ int datasetNum=abs(static_cast<int>(chartDatasetEnd-chartDatasetStart))+1;
+
+ painter->setPen( params()->outlineDataColor() );
+
+ // Number of values: If -1, use all values, otherwise use the
+ // specified number of values.
+ int numValues = 0;
+ if ( params()->numValues() != -1 )
+ numValues = params()->numValues();
+ else
+ numValues = data->usedCols();
+
+ // We need to make sure that we have a certain number of
+ // cells in the dataset(s), depending on the sub type to display.
+ if( (numValues < 2) ||
+ ((params()->hiLoChartSubType() == KDChartParams::HiLoClose) && (numValues < 3)) ||
+ ((params()->hiLoChartSubType() == KDChartParams::HiLoOpenClose) && (numValues < 4)) ){
+ qDebug( "\nNot enough data to display a High/Low Chart!\n" );
+ qDebug( "type requiring" );
+ qDebug( "---- ---------" );
+ qDebug( "High/Low 2 data cells per series" );
+ qDebug( "High/Low/Close 3 data cells per series" );
+ qDebug( "High/Low/open/Close 4 data cells per series\n" );
+ return; // PENDING(kalle) Throw exception?
+ }
+
+ double pixelsPerUnit = 0.0;
+ if( 0.0 != axisPara->trueAxisHigh() - axisPara->trueAxisLow() )
+ pixelsPerUnit = logHeight / (axisPara->trueAxisHigh() - axisPara->trueAxisLow());
+ else
+ pixelsPerUnit = logHeight / 10;
+
+ // Distance between the individual "stocks"
+ double pointDist = logWidth / (double)datasetNum;
+
+ // compute the position of the 0 axis
+ double zeroXAxisI = axisPara->axisZeroLineStartY() - _dataRect.y();
+
+ const int nLineWidth = params()->lineWidth();
+
+ // Loop over the datasets, draw one "stock" line for each series.
+ for ( uint dataset = chartDatasetStart;
+ dataset <= chartDatasetEnd;
+ ++dataset ) {
+ // The first and the second col are always high and low; we sort them
+ // accordingly.
+ QVariant valueA;
+ QVariant valueB;
+ if( dataset >= datasetStart &&
+ dataset <= datasetEnd &&
+ data->cellCoord( dataset, 0, valueA, 1 ) &&
+ data->cellCoord( dataset, 1, valueB, 1 ) &&
+ QVariant::Double == valueA.type() &&
+ QVariant::Double == valueB.type() ){
+ const double cellValue1 = valueA.toDouble();
+ const double cellValue2 = valueB.toDouble();
+ const double lowValue = QMIN( cellValue1, cellValue2 );
+ const double highValue = QMAX( cellValue1, cellValue2 );
+ const double lowDrawValue = lowValue * pixelsPerUnit;
+ const double highDrawValue = highValue * pixelsPerUnit;
+
+ painter->setPen( QPen( params()->dataColor( dataset ),
+ nLineWidth ) );
+ // draw line from low to high
+ int xpos = static_cast<int>(
+ pointDist * ( (double)(dataset-chartDatasetStart) + 0.5 ) );
+ int lowYPos = static_cast<int>( zeroXAxisI - lowDrawValue );
+ int highYPos = static_cast<int>( zeroXAxisI - highDrawValue );
+
+ painter->drawLine( xpos, lowYPos, xpos, highYPos );
+
+ // Find out how long open/close lines need to be in case we
+ // need them. We make them 1/10 of the space available for one
+ // "stock".
+ int openCloseTickLength = static_cast<int>( pointDist * 0.1 );
+ // we need these here because we might need to consider these
+ // later when drawing the low and high labels
+ bool hasOpen = false, hasClose = false;
+ double openValue = 0.0, openDrawValue = 0.0,
+ closeValue = 0.0, closeDrawValue = 0.0;
+
+ // if we have an open/close chart, show the open value
+ if( params()->hiLoChartSubType() == KDChartParams::HiLoOpenClose ) {
+ // Only do this if there is a value in the third col.
+ if( data->cellCoord( dataset, 2, valueA, 1 ) &&
+ QVariant::Double == valueA.type() ) {
+ hasOpen = true;
+ openValue = valueA.toDouble();
+ openDrawValue = openValue * pixelsPerUnit;
+ painter->drawLine( xpos - openCloseTickLength,
+ static_cast<int>( zeroXAxisI - openDrawValue ),
+ xpos,
+ static_cast<int>( zeroXAxisI - openDrawValue ) );
+ }
+ }
+
+ // If we have an open/close chart or a close chart, show the
+ // close value, but only if there is a value in the
+ // corresponding column (2 for HiLoClose, 3 for
+ // HiLoOpenClose).
+ if( ( params()->hiLoChartSubType() == KDChartParams::HiLoClose &&
+ data->cellCoord( dataset, 2, valueA, 1 ) &&
+ QVariant::Double == valueA.type() ) ||
+ ( params()->hiLoChartSubType() == KDChartParams::HiLoOpenClose &&
+ data->cellCoord( dataset, 3, valueB, 1 ) &&
+ QVariant::Double == valueB.type() ) ) {
+ hasClose = true;
+ closeValue = ( params()->hiLoChartSubType() == KDChartParams::HiLoClose )
+ ? valueA.toDouble()
+ : valueB.toDouble();
+ closeDrawValue = closeValue * pixelsPerUnit;
+ painter->drawLine( xpos,
+ static_cast<int>( zeroXAxisI - closeDrawValue ),
+ xpos + openCloseTickLength,
+ static_cast<int>( zeroXAxisI - closeDrawValue ) );
+ }
+
+ // Draw the low value, if requested.
+ if( params()->hiLoChartPrintLowValues() ) {
+ // PENDING(kalle) Number formatting?
+ QFont theFont( params()->hiLoChartLowValuesFont() );
+ if ( params()->hiLoChartLowValuesUseFontRelSize() ) {
+ int nTxtHeight =
+ static_cast < int > ( params()->hiLoChartLowValuesFontRelSize()
+ * averageValueP1000 );
+ theFont.setPointSizeFloat( nTxtHeight );
+ }
+ KDChartTextPiece lowText( painter, QString::number( lowValue ),
+ theFont );
+ int width = lowText.width();
+ int height = lowText.height();
+
+ // Check whether there is enough space below the data display
+ int valX = 0, valY = 0;
+ //qDebug("\nzeroXAxisI %f lowDrawValue %f height %i logHeight %f _dataRect.y() %i axisYOffset %f",zeroXAxisI,highDrawValue,height,logHeight,_dataRect.y(),axisYOffset);
+ //qDebug("zeroXAxisI - lowDrawValue + height %f < axisYOffset + logHeight %f",
+ //zeroXAxisI - lowDrawValue + height, axisYOffset+logHeight);
+ if( zeroXAxisI - lowDrawValue + height < axisYOffset+logHeight ) {
+ // enough space
+ valX = xpos - ( width / 2 );
+ valY = (int)lowDrawValue - lowText.fontLeading();
+ } else {
+ // not enough space - move to left
+ if( !hasOpen || height < openDrawValue ) {
+ // Either there is no open value or it is high enough
+ // that we can put the low value to the left.
+ valX = xpos - width - nLineWidth;
+ valY = static_cast<int>(zeroXAxisI)
+ - lowYPos
+ + height/2
+ + nLineWidth/2;
+ }// else
+ ; // no way to draw it (really?)
+ }
+ lowText.draw( painter,
+ valX, static_cast<int>( zeroXAxisI - valY ),
+ ourClipRect,
+ params()->hiLoChartLowValuesColor() );
+ }
+
+ // Draw the high value, if requested.
+ if( params()->hiLoChartPrintHighValues() ) {
+ // PENDING(kalle) Number formatting?
+ QFont theFont( params()->hiLoChartHighValuesFont() );
+ if ( params()->hiLoChartHighValuesUseFontRelSize() ) {
+ int nTxtHeight =
+ static_cast < int > ( params()->hiLoChartHighValuesFontRelSize()
+ * averageValueP1000 );
+ theFont.setPointSizeFloat( nTxtHeight );
+ }
+ KDChartTextPiece highText( painter, QString::number( highValue ),
+ theFont );
+ int width = highText.width();
+ int height = highText.height();
+
+ // Check whether there is enough space above the data display
+ int valX = 0, valY = 0;
+ if( zeroXAxisI - highDrawValue - height > axisYOffset ) {
+ // enough space
+ valX = xpos - ( width / 2 );
+ valY = (int)highDrawValue + highText.fontLeading() + height;
+ } else {
+ // not enough space - move to right
+ if( !hasClose ||
+ height < ( _dataRect.height() - closeDrawValue ) ) {
+ // Either there is no close value or it is low enough
+ // that we can put the high value to the right.
+ valX = xpos + nLineWidth;
+ valY = static_cast<int>(zeroXAxisI)
+ - highYPos
+ + height/2
+ - nLineWidth/2;
+ } //else
+ ; // no way to draw it (really?)
+ }
+ highText.draw( painter,
+ valX, static_cast<int>( zeroXAxisI - valY ),
+ ourClipRect,
+ params()->hiLoChartHighValuesColor() );
+ }
+
+ // Draw the open value, if requested.
+ if( params()->hiLoChartPrintOpenValues() &&
+ params()->hiLoChartSubType() == KDChartParams::HiLoOpenClose ) {
+ // PENDING(kalle) Number formatting?
+ QFont theFont( params()->hiLoChartOpenValuesFont() );
+ if ( params()->hiLoChartOpenValuesUseFontRelSize() ) {
+ int nTxtHeight =
+ static_cast < int > ( params()->hiLoChartOpenValuesFontRelSize()
+ * averageValueP1000 );
+ theFont.setPointSizeFloat( nTxtHeight );
+ }
+ KDChartTextPiece openText( painter, QString::number( openValue ),
+ theFont );
+ int width = openText.width();
+ int height = openText.height();
+
+ // We can pretty safely assume that there is always enough
+ // space to the left and right of the data display.
+ int valX = 0, valY = 0;
+ valX = xpos - openCloseTickLength - width;
+ valY = (int)openDrawValue + ( height / 2 );
+ openText.draw( painter,
+ valX, static_cast<int>( zeroXAxisI - valY ),
+ ourClipRect,
+ params()->hiLoChartOpenValuesColor() );
+ }
+
+ // Draw the close value, if requested.
+ if( params()->hiLoChartPrintCloseValues() &&
+ ( params()->hiLoChartSubType() == KDChartParams::HiLoOpenClose
+ ||
+ params()->hiLoChartSubType() == KDChartParams::HiLoClose ) ) {
+ // PENDING(kalle) Number formatting?
+ QFont theFont( params()->hiLoChartCloseValuesFont() );
+ if ( params()->hiLoChartCloseValuesUseFontRelSize() ) {
+ int nTxtHeight =
+ static_cast < int > ( params()->hiLoChartCloseValuesFontRelSize()
+ * averageValueP1000 );
+ theFont.setPointSizeFloat( nTxtHeight );
+ }
+ KDChartTextPiece closeText( painter, QString::number( closeValue ),
+ theFont );
+ //int width = closeText.width();
+ int height = closeText.height();
+
+ // We can pretty safely assume that there is always enough
+ // space to the left and right of the data display.
+ int valX = 0, valY = 0;
+ valX = xpos + openCloseTickLength;
+ valY = (int)closeDrawValue + ( height / 2 );
+ closeText.draw( painter,
+ valX, static_cast<int>( zeroXAxisI - valY ),
+ ourClipRect,
+ params()->hiLoChartCloseValuesColor() );
+ }
+
+ } else
+ continue; // we cannot display this value
+ }
+}
diff --git a/libkdchart/KDChartHiLoPainter.h b/libkdchart/KDChartHiLoPainter.h
new file mode 100644
index 0000000..79dd09c
--- /dev/null
+++ b/libkdchart/KDChartHiLoPainter.h
@@ -0,0 +1,71 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTHILOPAINTER_H__
+#define __KDCHARTHILOPAINTER_H__
+
+#include "KDChartAxesPainter.h"
+#include <KDChartTable.h>
+
+#include <qnamespace.h>
+
+class KDChartParams;
+
+class KDChartHiLoPainter : public KDChartAxesPainter, public Qt
+{
+ friend class KDChartPainter;
+ protected:
+ KDChartHiLoPainter( KDChartParams* params );
+ virtual ~KDChartHiLoPainter();
+
+ virtual bool isNormalMode() const;
+ virtual int clipShiftUp( bool, double ) const;
+ virtual void specificPaintData( QPainter* painter,
+ const QRect& ourClipRect,
+ KDChartTableDataBase* data,
+ KDChartDataRegionList* regions,
+ const KDChartAxisParams* axisPara,
+ bool bNormalMode,
+ uint chart,
+ double logWidth,
+ double areaWidthP1000,
+ double logHeight,
+ double axisYOffset,
+ double minColumnValue,
+ double maxColumnValue,
+ double columnValueDistance,
+ uint chartDatasetStart,
+ uint chartDatasetEnd,
+ uint datasetStart,
+ uint datasetEnd );
+
+ virtual QString fallbackLegendText( uint dataset ) const;
+ virtual uint numLegendFallbackTexts( KDChartTableDataBase* data ) const;
+};
+
+#endif
diff --git a/libkdchart/KDChartLinesPainter.cpp b/libkdchart/KDChartLinesPainter.cpp
new file mode 100644
index 0000000..8b80341
--- /dev/null
+++ b/libkdchart/KDChartLinesPainter.cpp
@@ -0,0 +1,947 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+*/
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#include "KDChartLinesPainter.h"
+#include <KDChartParams.h>
+#include <KDChartPropertySet.h>
+
+#include <qpainter.h>
+
+#if COMPAT_QT_VERSION >= 0x030000
+#include <qvaluevector.h>
+#else
+#include <qarray.h>
+#endif
+
+#include <stdlib.h>
+
+/**
+ \class KDChartLinesPainter KDChartLinesPainter.h
+
+ \brief A chart painter implementation that can paint line charts.
+*/
+
+/**
+ Constructor. Sets up internal data structures as necessary.
+
+ \param params the KDChartParams structure that defines the chart
+ \param data the data that will be displayed as a chart
+*/
+KDChartLinesPainter::KDChartLinesPainter( KDChartParams* params ) :
+ KDChartAxesPainter( params )
+{
+ // This constructor intentionally left blank so far; we cannot setup the
+ // geometry yet since we do not know the size of the painter.
+}
+
+
+/**
+ Destructor.
+*/
+KDChartLinesPainter::~KDChartLinesPainter()
+{
+ // intentionally left blank
+}
+
+
+/**
+ Paints the actual data area. Data regions will only be added if \a
+ regions is not 0.
+
+ \param painter the QPainter onto which the chart should be painted
+ \param data the data that will be displayed as a chart
+ \param paint2nd specifies whether the main chart or the additional chart is to be drawn now
+ \param regions a pointer to a list of regions that will be filled
+ with regions representing the data segments, if not null
+*/
+void KDChartLinesPainter::paintData( QPainter* painter,
+ KDChartTableDataBase* data,
+ bool paint2nd,
+ KDChartDataRegionList* regions )
+{
+ paintDataInternal( painter, data,
+ true, // center points
+ params()->lineMarker() && !params()->threeDLines(), // line markers yes/no, 3D lines have no markers
+ false, // not an area
+ paint2nd,
+ regions );
+}
+
+/**
+ \internal
+
+ Does the actual painting of a line or an area chart and is provided
+ with the appropriate parameters from \c
+ KDChartLinesPainter::paintData() and
+ KDChartAreaPainter::paintData().
+
+ \param painter the QPainter onto which the chart should be painted
+ \param data the data that will be displayed as a chart
+ \param centerThePoints if true, the value points will be centered in
+ their segment (typically used for line charts), if false, the first
+ value point will be on the ordinate, the second one at the right
+ margin of the chart.
+ \param isArea true if an area will be drawn, false for lines. Using
+ this parameter should be avoided.
+ \param paint2nd specifies whether the main chart or the additional chart is to be drawn now
+ \param regions a pointer to a list of regions that will be filled
+ with regions representing the data segments, if not null
+*/
+void KDChartLinesPainter::paintDataInternal( QPainter* painter,
+ KDChartTableDataBase* data,
+ bool centerThePoints,
+ bool drawMarkers,
+ bool isArea,
+ bool paint2nd,
+ KDChartDataRegionList* regions )
+{
+ mCenterThePoints = centerThePoints;
+ mDrawMarkers = drawMarkers;
+ mIsArea = isArea;
+ mChartType = paint2nd ? params()->additionalChartType()
+ : params()->chartType();
+
+ KDChartAxesPainter::paintData( painter, data, paint2nd, regions );
+}
+
+
+#define DEGTORAD(d) (d)*M_PI/180
+
+/*!
+ Projects a point in a space defined by its x, y, and z coordinates
+ into a point onto a plane, given two rotation angles around the x
+ resp. y axis.
+*/
+QPoint KDChartLinesPainter::project( int x, int y, int z )
+{
+
+ double xrad = DEGTORAD( params()->threeDLineXRotation() );
+ double yrad = DEGTORAD( params()->threeDLineYRotation() );
+ QPoint ret( static_cast<int>( x*cos( yrad ) + z * sin( yrad ) ),
+ static_cast<int>( y*cos( xrad ) - z * sin( xrad ) ) );
+ return ret;
+}
+
+bool KDChartLinesPainter::isNormalMode() const
+{
+ return KDChartParams::LineNormal == params()->lineChartSubType();
+}
+
+int KDChartLinesPainter::clipShiftUp( bool, double ) const
+{
+ return 0;
+}
+
+
+class MyPoint
+{
+public:
+ MyPoint() : bValid( false ), bSkipThis( false ), cellValue( 0.0 ) {}
+ void set( int x, int y, double value ) {
+ bValid = true;
+ p.setX( x );
+ p.setY( y );
+ cellValue = value;
+ }
+ void setSkipThis( bool skipThis ) {
+ bSkipThis = skipThis;
+ }
+ QPoint p;
+ bool bValid;
+ bool bSkipThis;
+ double cellValue;
+};
+
+
+void KDChartLinesPainter::specificPaintData( QPainter* painter,
+ const QRect& /*ourClipRect*/,
+ KDChartTableDataBase* data,
+ KDChartDataRegionList* regions,
+ const KDChartAxisParams* ordinatePara,
+ bool /*bNormalMode*/,
+ uint chart,
+ double logWidth,
+ double /*areaWidthP1000*/,
+ double logHeight,
+ double axisYOffset,
+ double minColumnValue,
+ double maxColumnValue,
+ double columnValueDistance,
+ uint /*chartDatasetStart*/,
+ uint /*chartDatasetEnd*/,
+ uint datasetStart,
+ uint datasetEnd )
+{
+ if( !data ) return;
+
+
+ abscissaInfos ai;
+ ai.bCenterThePoints = mCenterThePoints;
+ calculateAbscissaInfos( *params(), *data,
+ datasetStart, datasetEnd,
+ logWidth, _dataRect,
+ ai );
+ mCenterThePoints = ai.bCenterThePoints;
+
+ bool bOrdinateDecreasing = ordinatePara
+ ? ordinatePara->axisValuesDecreasing()
+ : false;
+ bool bOrdinateIsLogarithmic
+ = ordinatePara
+ ? (KDChartAxisParams::AxisCalcLogarithmic == ordinatePara->axisCalcMode())
+ : false;
+
+ //const double ordinatePixelsPerUnit = logHeight / columnValueDistance;
+ const double ordinatePixelsPerUnit
+ = ( ordinatePara
+ && (0.0 != ordinatePara->trueAxisDeltaPixels())
+ && (0.0 != ordinatePara->trueAxisDelta()))
+ ? ordinatePara->trueAxisDeltaPixels() / ordinatePara->trueAxisDelta()
+ : logHeight / columnValueDistance;;
+ //qDebug("ordinatePixelsPerUnit: %f",ordinatePixelsPerUnit);
+
+
+ const bool showThreeDLines = !mIsArea && params()->threeDLines();
+
+ enum { Normal, Stacked, Percent } mode = Normal;
+ if ( ( ( mChartType == KDChartParams::Line )
+ && ( params()->lineChartSubType() == KDChartParams::LineNormal ) )
+ || ( ( mChartType == KDChartParams::Area )
+ && ( params()->areaChartSubType() == KDChartParams::AreaNormal ) ) )
+ mode = Normal;
+ else if ( ( ( mChartType == KDChartParams::Line )
+ && ( params()->lineChartSubType() == KDChartParams::LineStacked ) )
+ || ( ( mChartType == KDChartParams::Area )
+ && ( params()->areaChartSubType() == KDChartParams::AreaStacked ) ) )
+ mode = Stacked;
+ else if ( ( ( mChartType == KDChartParams::Line )
+ && ( params()->lineChartSubType() == KDChartParams::LinePercent ) )
+ || ( ( mChartType == KDChartParams::Area )
+ && ( params()->areaChartSubType() == KDChartParams::AreaPercent ) ) )
+ mode = Percent;
+ else
+ qDebug( "Internal error in KDChartLinesPainter::paintDataInternal(): Unknown subtype" );
+
+
+ QMap < int, double > currentValueSums;
+ if ( mode == Stacked || mode == Percent ) {
+ // this array is only used for stacked and percent lines, no need
+ // to waste time initializing it for normal types
+ for ( int value = 0; value < ai.numValues; ++value )
+ currentValueSums[ value ] = 0.0;
+ }
+ QMap < int, double > totalValueSums;
+
+ // compute the position of the 0 axis
+ double zeroXAxisI;
+ if ( mode == Percent ) {
+ if ( minColumnValue == 0.0 )
+ zeroXAxisI = logHeight + axisYOffset;
+ else if( maxColumnValue == 0.0 )
+ zeroXAxisI = _dataRect.y() + axisYOffset;
+ else
+ zeroXAxisI = logHeight / 2.0 + _dataRect.y();
+ } else
+ zeroXAxisI = ordinatePara->axisZeroLineStartY() - _dataRect.y();
+
+
+ // compute how to shift of the points in case we want them in the
+ // middle of their respective columns
+ int xShift = mCenterThePoints ? static_cast < int > ( ai.pointDist * 0.5 ) : 0;
+
+
+ // calculate all points' positions
+ // ===============================
+ int arrayNumDatasets = 0;
+ int arrayNumValues = ai.bAbscissaHasTrueAxisDtValues
+ ? data->cols()
+ : ai.numValues;
+ int dataset;
+ for( dataset = datasetEnd;
+ ( dataset >= static_cast < int > ( datasetStart ) && dataset >= 0 );
+ --dataset )
+ ++arrayNumDatasets;
+#if COMPAT_QT_VERSION >= 0x030000
+ QValueVector<MyPoint> allPoints(
+#else
+ QArray<MyPoint> allPoints(
+#endif
+ arrayNumDatasets * arrayNumValues );
+
+ KDChartPropertySet curPropSet;
+ int curPropSetId = KDChartPropertySet::UndefinedID;
+
+ for( dataset = datasetEnd; ( dataset >= (int)datasetStart && dataset >= 0 ); --dataset ) {
+
+ int prevPointX = -1;
+ int prevPointY = -1;
+
+ const KDChartParams::LineMarkerStyle
+ defaultMarkerStyle = params()->lineMarkerStyle( dataset );
+ const QPen default2DPen( params()->lineColor().isValid()
+ ? params()->lineColor()
+ : params()->dataColor( dataset ),
+ params()->lineWidth(),
+ params()->lineStyle( dataset ) );
+
+ if( ai.bAbscissaHasTrueAxisDtValues )
+ ai.numValues = data->cols();
+
+ QVariant vValY;
+ QVariant vValX;
+ int cellPropID;
+ for( int value = 0; value < ai.numValues; ++value ) {
+ //if ( mode == Percent )
+ // valueTotal = data->colAbsSum( value );
+ double valueTotal = 0.0; // Will only be used for Percent
+ if( mode == Percent ) {
+ valueTotal = 0.0;
+ // iterate over datasets of this axis only:
+ for ( uint dataset2 = datasetStart;
+ dataset2 <= datasetEnd;
+ ++dataset2 ) {
+ if( data->cellCoord( dataset2, value, vValY, 1 ) &&
+ QVariant::Double == vValY.type() )
+ valueTotal += vValY.toDouble();
+ }
+ }
+
+ if( data->cellContent( dataset, value, vValY, vValX, cellPropID ) &&
+ QVariant::Double == vValY.type() &&
+ ( !ai.bCellsHaveSeveralCoordinates || QVariant::Invalid != vValX.type() ) ){
+ //qDebug("a. cellPropID: %i",cellPropID);
+
+ // calculate Ordinate axis value
+ // -----------------------------
+ double cellValue = vValY.toDouble();
+ double drawValue = 0.0;
+ // PENDING(kalle) This does not work for AreaPercent yet
+ if ( mode == Stacked )
+ drawValue = ( cellValue + currentValueSums[ value ] ) * ordinatePixelsPerUnit;
+ else if ( mode == Percent )
+ drawValue = ( ( cellValue + currentValueSums[ value ] ) / valueTotal ) * 100.0 * ordinatePixelsPerUnit;
+ else {
+ // LineNormal or AreaNormal
+ if( bOrdinateIsLogarithmic ){
+ if( 0.0 < cellValue )
+ drawValue = log10( cellValue ) * ordinatePixelsPerUnit;
+ else
+ drawValue = -10250.0;
+ //qDebug("\nlogarithmic calc - cellValue: %f drawValue: %f",
+ // cellValue, drawValue );
+ }else{
+ drawValue = cellValue * ordinatePixelsPerUnit * (bOrdinateDecreasing ? -1.0 : 1.0);
+ //qDebug("\nlinear calc - cellValue: %f\n - drawValue: %f",
+ // cellValue, drawValue );
+ }
+ }
+
+
+ // calculate Abscissa axis value
+ // -----------------------------
+ double xValue;
+ bool skipMe = !calculateAbscissaAxisValue( vValX, ai, value,
+ xValue );
+
+
+ // calculate and store the point and region / draw the marker
+ // ----------------------------------------------------------
+ if( !skipMe ){
+ // prevent the point from being toooo far
+ // below the bottom (or above the top, resp.)
+ // of the cliprect
+ double pY = QMIN( zeroXAxisI - drawValue,
+ (logHeight + axisYOffset) * 3 );
+ pY = QMAX( pY, -(logHeight + axisYOffset) * 3 );
+ // specify the Point
+ int myPointX = static_cast < int > ( xValue ) + xShift;
+ int myPointY = static_cast < int > ( pY );
+
+ if( cellPropID == curPropSetId &&
+ myPointX == prevPointX &&
+ myPointY == prevPointY ){
+ allPoints[ static_cast < int > ( datasetEnd-dataset )
+ * arrayNumValues + value ].setSkipThis( true );
+ skipMe = true;
+ //qDebug("skipped");
+ }else{
+ // use typecast to make it compile on windows using qt232
+ allPoints[ static_cast < int > ( datasetEnd-dataset )
+ * arrayNumValues + value ].set( myPointX, myPointY, cellValue );
+ //qDebug("ok");
+ }
+ if( !skipMe ){
+ // --------------------------------------------------------
+ // determine any 'extra' properties assigned to this cell
+ // by traversing the property set chain (if necessary)
+ // --------------------------------------------------------
+ if( cellPropID != curPropSetId ){
+ //qDebug("b. ( curPropSetId: %i )",curPropSetId);
+ //qDebug("b. cellPropID: %i",cellPropID);
+ //qDebug(curPropSet.name().latin1());
+ if( cellPropID != KDChartPropertySet::UndefinedID &&
+ params()->calculateProperties( cellPropID,
+ curPropSet ) ){
+ curPropSetId = cellPropID;
+ //qDebug("c. curPropSetId: %i",curPropSetId);
+ //qDebug(curPropSet.name().latin1());
+ }else{
+ curPropSetId = KDChartPropertySet::UndefinedID;
+ }
+ }
+ // make sure any extra horiz. and/or vert. lines and/or markers
+ // are drawn *before* the data lines and/or markers are painted
+ if( mChartType == KDChartParams::Line ){
+ if( curPropSetId != KDChartPropertySet::UndefinedID ){
+ drawExtraLinesAndMarkers(
+ curPropSet,
+ default2DPen,
+ defaultMarkerStyle,
+ myPointX, myPointY,
+ painter,
+ ai.abscissaPara,
+ ordinatePara,
+ logWidth/1000.0,
+ logHeight/1000.0,
+ false );
+ }
+ }
+ prevPointX = myPointX;
+ prevPointY = myPointY;
+ }
+ }
+ // calculate running sum for stacked and percent
+ if ( mode == Stacked || mode == Percent ) {
+ if( cellValue == KDCHART_POS_INFINITE )
+ currentValueSums[ value ] = KDCHART_POS_INFINITE;
+ else if( currentValueSums[ value ] != KDCHART_POS_INFINITE )
+ currentValueSums[ value ] += cellValue;
+ }
+ }
+ }
+ }
+
+
+
+ QPointArray previousPoints; // no vector since only areas need it,
+ // and these do not support 3d yet
+
+ // Store some (dataset-independend) default values
+ // to be used unless other properties
+ // have been specified for the respective data cell:
+ //
+ const bool defaultDrawMarkers = mDrawMarkers;
+
+ for ( dataset = datasetEnd; ( dataset >= (int)datasetStart && dataset >= 0 ); --dataset ) {
+
+ // Store some (dataset-dependend) default values
+ // to be used unless other properties
+ // have been specified for the respective data cell:
+ //
+ const QPen default2DPen( params()->lineColor().isValid()
+ ? params()->lineColor()
+ : params()->dataColor( dataset ),
+ params()->lineWidth(),
+ params()->lineStyle( dataset ) );
+ bool currentDrawMarkers = defaultDrawMarkers;
+ const KDChartParams::LineMarkerStyle markerStyle = params()->lineMarkerStyle( dataset );
+
+ // the +2 is for the areas (if any)
+ QPtrVector< QPointArray > points( 2 );
+ points.setAutoDelete( true );
+ /* Pending Michel - we need to keep track of the
+ * non rotated points for 3D lines
+ */
+ QPtrVector< QPointArray > oripoints( 2 );
+ oripoints.setAutoDelete( true );
+
+ int i = 0;
+ for( i = 0; i < 2; ++i ) {
+ points.insert( i, new QPointArray( ai.numValues + 2 ) );
+ oripoints.insert( i, new QPointArray( ai.numValues + 2 ) );
+ }
+
+ if( ai.bAbscissaHasTrueAxisDtValues )
+ ai.numValues = data->cols();
+
+ int point = 0;
+
+ for ( int value = 0; value < ai.numValues; ++value ) {
+
+ // determine and store marker properties assigned to this cell
+ // -----------------------------------------------------------
+ currentDrawMarkers = defaultDrawMarkers;
+ int cellPropID;
+ if( data->cellProp( dataset, value, cellPropID ) &&
+ cellPropID != curPropSetId ){
+ if( cellPropID != KDChartPropertySet::UndefinedID &&
+ params()->calculateProperties( cellPropID,
+ curPropSet ) )
+ curPropSetId = cellPropID;
+ else
+ curPropSetId = KDChartPropertySet::UndefinedID;
+ }
+ if( curPropSetId != KDChartPropertySet::UndefinedID ){
+ // we can safely call the following functions and ignore their
+ // return values since they will touch the parameters' values
+ // if the propSet *contains* corresponding own values only.
+ int iDummy;
+ curPropSet.hasOwnShowMarker( iDummy, currentDrawMarkers );
+ }
+
+
+ int iVec = static_cast < int > ( datasetEnd-dataset ) * arrayNumValues + value;
+ if( allPoints[ iVec ].bValid && !allPoints[ iVec ].bSkipThis ){
+ const MyPoint& mp = allPoints[iVec];
+
+
+ //qDebug("\np.x() %i p.y() %i", p.x(), p.y() );
+ // For 3D lines, we need two points (that lie
+ // behind each other on the Z axis). For 2D lines and
+ // areas, we need only one point.
+ if( showThreeDLines ) {
+ points[0]->setPoint( point, project( mp.p.x(), mp.p.y(),
+ (datasetStart+dataset)*params()->threeDLineDepth() ) );
+ points[1]->setPoint( point, project( mp.p.x(), mp.p.y(),
+ (datasetStart+dataset + 1)*params()->threeDLineDepth() ) );
+ oripoints[0]->setPoint( point, mp.p.x(), mp.p.y() );
+ oripoints[1]->setPoint( point, mp.p.x() - (datasetStart+dataset + 1)*params()->threeDLineDepth(),
+ mp.p.y() - (datasetStart+dataset + 1)*params()->threeDLineDepth() );
+
+ } else
+ // 2D lines or areas
+ points[0]->setPoint( point, mp.p );
+ ++point;
+
+ int x = mp.p.x();
+ int y = QMAX(QMIN(mp.p.y(),
+ static_cast < int > (logHeight +axisYOffset)),
+ 0);
+ bool markerIsOutside = y != mp.p.y();
+ // draw the marker and store the region
+ if ( currentDrawMarkers ){
+ uint theAlignment = Qt::AlignCenter;
+ bool hasOwnSize = false;
+ int theWidth = 0;
+ int theHeight = 0;
+ QColor theColor(params()->dataColor( dataset ));
+ int theStyle = markerStyle;
+ if( curPropSetId != KDChartPropertySet::UndefinedID ){
+ // we can safely call the following functions and ignore their
+ // return values since they will touch the parameters' values
+ // if the propSet *contains* corresponding own values only.
+ int iDummy;
+ curPropSet.hasOwnMarkerAlign( iDummy, theAlignment );
+ curPropSet.hasOwnMarkerColor( iDummy, theColor );
+ curPropSet.hasOwnMarkerStyle( iDummy, theStyle );
+ QSize size(theWidth, theHeight);
+ hasOwnSize = curPropSet.hasOwnMarkerSize(iDummy, size);
+ if( hasOwnSize ){
+ theWidth = size.width();
+ theHeight = size.height();
+ }
+ }
+
+ drawMarker( painter,
+ params(),
+ _areaWidthP1000, _areaHeightP1000,
+ _dataRect.x(),
+ _dataRect.y(),
+ markerIsOutside
+ ? KDChartParams::LineMarker1Pixel
+ : theStyle,
+ theColor,
+ QPoint(x,y),
+ dataset, value, chart, regions,
+ hasOwnSize ? &theWidth : 0,
+ hasOwnSize ? &theHeight : 0,
+ theAlignment );
+
+ }
+ // store the region
+ else if( regions ) {
+ QRect rect(
+ QPoint( x-params()->lineWidth()-1, y-params()->lineWidth()-1 ),
+ QPoint( x+params()->lineWidth()+1, y+params()->lineWidth()+1 )
+ );
+ rect.moveBy( _dataRect.x(), _dataRect.y() );
+ regions->append(
+ new KDChartDataRegion(dataset, value, chart, rect) );
+ }
+
+ }
+ }
+ if ( point ) {
+ bool bDrawLines = (0 != params()->lineWidth());
+
+ if ( mIsArea ) {
+ // first draw with the fill brush, no pen, with the
+ // zero axis points or upper border points added for the first
+ // dataset or with the previous points reversed for all other
+ // datasets.
+ painter->setPen( QPen( Qt::NoPen ) );
+ const QBrush datasetBrush( params()->dataColor( dataset ), Qt::SolidPattern );
+ painter->setBrush( datasetBrush );
+ QBrush currentBrush( datasetBrush );
+
+ if ( mode == Normal || dataset == (int)datasetEnd ) {
+ /// first dataset (or any dataset in normal mode, where
+ /// the datasets overwrite each other)
+
+ // no 3d handling for areas yet
+ QPoint lastPoint = points[0]->point( point - 1 );
+
+ // zeroXAxisI can be too far below the abscissa, but it's
+ // the only thing we have. Likewise can 0 be too far above
+ // the upper boundary, but again it's the only thing we
+ // have, at the rest is clipped anyway.
+ int yCoord;
+ if ( params()->areaLocation() == KDChartParams::AreaBelow ||
+ mode == Percent )
+ yCoord = static_cast<int>(zeroXAxisI);
+ else
+ yCoord = static_cast<int>(axisYOffset);
+
+ // old: draw the complete area in on go:
+ /*
+ // no 3d handling for areas yet
+ points[0]->setPoint( point, lastPoint.x(), yCoord );
+ point++;
+
+ QPoint firstPoint = points[0]->point( 0 );
+ points[0]->setPoint( point, firstPoint.x(), yCoord );
+ point++;
+
+ painter->drawPolygon( *points[0], false, 0, point );
+ */
+
+ // new: draw individual area segments:
+ curPropSetId = KDChartPropertySet::UndefinedID;
+ for( int value = 0; value < point-1; ++value ) {
+
+ int cellPropID;
+ if( data->cellProp( dataset, value, cellPropID ) &&
+ cellPropID != curPropSetId ){
+
+ if( cellPropID != KDChartPropertySet::UndefinedID &&
+ params()->calculateProperties( cellPropID,
+ curPropSet ) ){
+ curPropSetId = cellPropID;
+ }else{
+ curPropSetId = KDChartPropertySet::UndefinedID;
+ }
+ // preset with default value
+ QBrush theAreaBrush = datasetBrush;
+
+ if( curPropSetId != KDChartPropertySet::UndefinedID ){
+ // we can safely call the following functions and ignore their
+ // return values since they will touch the parameters' values
+ // if the propSet *contains* corresponding own values only.
+ int iDummy;
+ curPropSet.hasOwnAreaBrush( iDummy, theAreaBrush );
+ }
+ painter->setBrush( theAreaBrush );
+
+ }
+ QPointArray segment( 4 );
+ segment.setPoint( 0, points[0]->point( value ) );
+ segment.setPoint( 1, points[0]->point( value+1 ) );
+ segment.setPoint( 2, points[0]->point( value+1 ).x(), yCoord );
+ segment.setPoint( 3, points[0]->point( value ).x(), yCoord );
+ painter->drawPolygon( segment );
+ }
+
+ // old: draw the complete area in on go:
+ /*
+ // remove the last two points added
+ point -= 2;
+ */
+ //qDebug("\n111");
+ } // if ( mode == Normal || dataset == (int)datasetEnd )
+ else {
+ // don't mess around with the original array; we'll need
+ // that for the next time through.
+
+ //qDebug("222");
+ // no 3d handling for areas yet
+ QPointArray thisSection = points[0]->copy();
+
+ thisSection.resize( point + previousPoints.size() );
+ // append the previous array (there is guaranteed to be
+ // one because we are at least the second time through
+ // here) in reverse order
+ for ( unsigned int i = 0; i < previousPoints.size(); ++i ) {
+ thisSection.setPoint( point + i,
+ previousPoints.point( previousPoints.size() - i - 1 ) );
+ //qDebug("\nx: %i",previousPoints.point( previousPoints.size() - i - 1 ).x());
+ //qDebug("y: %i",previousPoints.point( previousPoints.size() - i - 1 ).y());
+ }
+ painter->drawPolygon( thisSection );
+ }
+ // draw the line with no brush and outline color
+ painter->setBrush( Qt::NoBrush );
+ painter->setPen( QPen( params()->outlineDataColor(),
+ params()->outlineDataLineWidth() ) );
+ } else {
+ // line
+ if( showThreeDLines ) {
+ // This is a 3D line:
+ // We draw the line with the data color brush
+ // and the outline data pen.
+ painter->setBrush( params()->dataColor( dataset ) );
+ painter->setPen( QPen( params()->outlineDataColor(),
+ params()->outlineDataLineWidth() ) );
+ } else {
+ // This is a 2D line:
+ // We draw the line with the no brush
+ // and the data color if no special line color was specified.
+ painter->setBrush( Qt::NoBrush );
+ painter->setPen( default2DPen );
+ }
+ }
+
+ // Neither draw the contour line if this is a pure Point chart
+ // nor draw it for the last row of a percent area chart.
+
+ if( bDrawLines &&
+ ( (mode != Percent) || !mIsArea || (dataset != (int)datasetEnd) ) ){
+ if( showThreeDLines ) {
+
+ // A 3D line needs to be drawn piece-wise
+ for ( int value = 0; value < point-1; ++value ) {
+ // if( data->cell( dataset, value ).hasValue() &&
+ // data->cell( dataset, value+1 ).hasValue() ) {
+ // qDebug( "Draw a segment in dataset %d from %d to %d", dataset, value, value+1 );
+
+ //store the rotated points ( see project() )
+ QPointArray rotatedSegment( 4 );
+ rotatedSegment.setPoint( 0, points[0]->point( value ));
+ rotatedSegment.setPoint( 1, points[0]->point( value+1 ) );
+ rotatedSegment.setPoint( 2, points[1]->point( value+1 ) );
+ rotatedSegment.setPoint( 3, points[1]->point( value ) );
+
+ //store the true points without rotation
+ QPointArray trueSegment( 4 );
+ trueSegment.setPoint( 0, oripoints[0]->point( value ));
+ trueSegment.setPoint( 1, oripoints[0]->point( value+1 ) );
+ trueSegment.setPoint( 2, oripoints[1]->point( value+1 ) );
+ trueSegment.setPoint( 3, oripoints[1]->point( value ) );
+
+ // calculate the rotated points position relative to each other
+ // we will then be able to keep the rotation ( see: project () )
+ // by reporting this position relative to the true segment line
+ //left side pt3 and pt0
+ int dx30 = rotatedSegment.point(3).x() - rotatedSegment.point(0).x();
+ int dy30 = rotatedSegment.point(3).y() - rotatedSegment.point(0).y();
+ //right side pt1 and pt2
+ int dx12 = rotatedSegment.point(2).x() - rotatedSegment.point(1).x();
+ int dy12 = rotatedSegment.point(2).y() - rotatedSegment.point(1).y();
+
+ // store and paint the "3D" segment
+ QPointArray segment( 4 );
+ segment.setPoint( 0, trueSegment.point(0) );
+ segment.setPoint( 1, trueSegment.point(1) );
+ segment.setPoint( 2, trueSegment.point(1).x() + dx12, trueSegment.point(1).y() + dy12 );
+ segment.setPoint( 3, trueSegment.point(0).x() + dx30, trueSegment.point(0).y() + dy30);
+
+
+ //PENDING Michel 3dlines drawing a segment with showThreeDLines
+ painter->drawPolygon( segment );
+
+
+ // } else
+ // qDebug( "Can't draw a segment in dataset %d from %d to %d", dataset, value, value+1 );
+ }
+ } else {
+ QPoint p1, p2;
+ // Note: If markers are drawn very near to each other
+ // and tiny markers are used
+ // we don't draw the connecting lines.
+ bool b4PMarkers = KDChartParams::LineMarker4Pixels == markerStyle;
+ bool bTinyMarkers =
+ KDChartParams::LineMarker1Pixel == markerStyle || b4PMarkers;
+ curPropSetId = KDChartPropertySet::UndefinedID;
+ painter->setPen( default2DPen );
+ for ( int value = 0; value < point-1; ++value ) {
+ p1 = points[0]->point( value );
+ p2 = points[0]->point( value+1 );
+
+ // Determine properties assigned to this cell
+ // and change the painter if necessarry:
+ currentDrawMarkers = defaultDrawMarkers;
+ int cellPropID;
+ if( data->cellProp( dataset, value, cellPropID ) &&
+ cellPropID != curPropSetId ){
+ if( cellPropID != KDChartPropertySet::UndefinedID &&
+ params()->calculateProperties( cellPropID,
+ curPropSet ) ){
+ curPropSetId = cellPropID;
+ }else{
+ curPropSetId = KDChartPropertySet::UndefinedID;
+ }
+ // preset with default values
+ int theLineWidth = default2DPen.width();
+ QColor theLineColor = default2DPen.color();
+ Qt::PenStyle theLineStyle = default2DPen.style();
+ if( curPropSetId != KDChartPropertySet::UndefinedID ){
+ // we can safely call the following functions and ignore their
+ // return values since they will touch the parameters' values
+ // if the propSet *contains* corresponding own values only.
+ int iDummy;
+ curPropSet.hasOwnLineWidth ( iDummy, theLineWidth );
+ curPropSet.hasOwnLineColor ( iDummy, theLineColor );
+ curPropSet.hasOwnLineStyle ( iDummy, theLineStyle );
+ curPropSet.hasOwnShowMarker( iDummy, currentDrawMarkers );
+ }
+ painter->setPen( QPen( theLineColor,
+ theLineWidth,
+ theLineStyle ) );
+ }
+
+ if( !currentDrawMarkers ){
+ //PENDING Michel: drawing a line - not currentMarkers
+ painter->drawLine( p1, p2 );
+ }else{
+ int dx = p2.x() - p1.x();
+ int dy = p2.y() - p1.y();
+ if( !bTinyMarkers || (abs(dx) > 4) || (abs(dy) > 4) ){
+ if( bTinyMarkers ) {
+ double m = !dx ? 100.0
+ : !dy ? 0.01
+ : ((double)dy / (double)dx);
+ double am = fabs(m);
+ int dxx;
+ int dyy;
+ if( 0.25 > am ){
+ dxx = 3;
+ dyy = 0;
+ }else if( 0.67 > am ){
+ dxx = 3;
+ dyy = 1;
+ }else if( 1.33 > am ){
+ dxx = 2;
+ dyy = 2;
+ }else if( 4.0 > am ){
+ dxx = 1;
+ dyy = 3;
+ }else{
+ dxx = 0;
+ dyy = 3;
+ }
+ if( 0 > dx )
+ dxx *= -1;
+ if( 0 > dy )
+ dyy *= -1;
+ if( b4PMarkers ){
+ if( 0 < dx )
+ ++p1.rx();
+ else if( 0 > dx )
+ ++p2.rx();
+ if( 0 < dy )
+ ++p1.ry();
+ else if( 0 > dy )
+ ++p2.ry();
+ }
+ p1.rx() += dxx; p1.ry() += dyy;
+ p2.rx() -= dxx; p2.ry() -= dyy;
+ }
+ //PENDING Michel: drawing a line - currentMarkers
+ painter->drawLine( p1, p2 );
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // Save point array for next way through (needed for e.g. stacked
+ // areas), not for 3D currently
+ points[0]->resize( point );
+ previousPoints = points[0]->copy();
+ }
+
+
+ // Now draw any extra lines (and/or their markers, resp.) that
+ // are to be printed IN FRONT of the normal lines:
+ if( mChartType == KDChartParams::Line ){
+ for( dataset = datasetEnd; ( dataset >= (int)datasetStart && dataset >= 0 ); --dataset ) {
+
+ const KDChartParams::LineMarkerStyle
+ defaultMarkerStyle = params()->lineMarkerStyle( dataset );
+ const QPen default2DPen( params()->lineColor().isValid()
+ ? params()->lineColor()
+ : params()->dataColor( dataset ),
+ params()->lineWidth(),
+ params()->lineStyle( dataset ) );
+
+ if( ai.bAbscissaHasTrueAxisDtValues )
+ ai.numValues = data->cols();
+
+ for ( int value = 0; value < ai.numValues; ++value ) {
+ int iVec = static_cast < int > ( datasetEnd-dataset ) * arrayNumValues + value;
+ if( allPoints[ iVec ].bValid ){
+ const MyPoint& mp = allPoints[iVec];
+ //qDebug("\np.x() %i p.y() %i", p.x(), p.y() );
+
+ // --------------------------------------------------------
+ // determine any 'extra' properties assigned to this cell
+ // by traversing the property set chain (if necessary)
+ // --------------------------------------------------------
+ int cellPropID;
+ if( data->cellProp( dataset, value, cellPropID ) &&
+ cellPropID != curPropSetId ){
+ if( cellPropID != KDChartPropertySet::UndefinedID &&
+ params()->calculateProperties( cellPropID,
+ curPropSet ) )
+ curPropSetId = cellPropID;
+ else
+ curPropSetId = KDChartPropertySet::UndefinedID;
+ }
+ if( curPropSetId != KDChartPropertySet::UndefinedID ){
+ drawExtraLinesAndMarkers(
+ curPropSet,
+ default2DPen,
+ defaultMarkerStyle,
+ mp.p.x(), mp.p.y(),
+ painter,
+ ai.abscissaPara,
+ ordinatePara,
+ logWidth/1000.0,
+ logHeight/1000.0,
+ true );
+ }
+ }
+ }
+ }
+ }
+ //qDebug(const_cast < KDChartParams* > ( params() )->properties( KDCHART_PROPSET_NORMAL_DATA )->name().latin1());
+ //qDebug(const_cast < KDChartParams* > ( params() )->properties( KDCHART_PROPSET_TRANSPARENT_DATA )->name().latin1());
+ //qDebug(const_cast < KDChartParams* > ( params() )->properties( KDCHART_PROPSET_HORI_LINE )->name().latin1());
+ //qDebug(const_cast < KDChartParams* > ( params() )->properties( KDCHART_PROPSET_VERT_LINE )->name().latin1());
+ //qDebug("--");
+ }
diff --git a/libkdchart/KDChartLinesPainter.h b/libkdchart/KDChartLinesPainter.h
new file mode 100644
index 0000000..cd2c40f
--- /dev/null
+++ b/libkdchart/KDChartLinesPainter.h
@@ -0,0 +1,86 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTLINESPAINTER_H__
+#define __KDCHARTLINESPAINTER_H__
+
+#include "KDChartAxesPainter.h"
+#include <KDChartTable.h>
+#include <KDChartParams.h>
+
+class QSize;
+
+class KDChartLinesPainter : public KDChartAxesPainter
+{
+ friend class KDChartPainter;
+
+ protected:
+ KDChartLinesPainter( KDChartParams* params );
+ virtual ~KDChartLinesPainter();
+
+ virtual void paintData( QPainter* painter,
+ KDChartTableDataBase* data,
+ bool paint2nd,
+ KDChartDataRegionList* regions = 0 );
+ virtual bool isNormalMode() const;
+ virtual int clipShiftUp( bool, double ) const;
+ virtual void specificPaintData( QPainter* painter,
+ const QRect& ourClipRect,
+ KDChartTableDataBase* data,
+ KDChartDataRegionList* regions,
+ const KDChartAxisParams* axisPara,
+ bool bNormalMode,
+ uint chart,
+ double logWidth,
+ double areaWidthP1000,
+ double logHeight,
+ double axisYOffset,
+ double minColumnValue,
+ double maxColumnValue,
+ double columnValueDistance,
+ uint chartDatasetStart,
+ uint chartDatasetEnd,
+ uint datasetStart,
+ uint datasetEnd );
+
+ void paintDataInternal( QPainter* painter,
+ KDChartTableDataBase* data,
+ bool centerThePoints,
+ bool drawMarkers,
+ bool isArea,
+ bool paint2nd,
+ KDChartDataRegionList* regions = 0 );
+ QPoint project( int x, int y, int z );
+ private:
+ KDChartParams::ChartType mChartType;
+ bool mCenterThePoints;
+ bool mDrawMarkers;
+ bool mIsArea;
+};
+
+#endif
diff --git a/libkdchart/KDChartListTable.h b/libkdchart/KDChartListTable.h
new file mode 100644
index 0000000..a11c44e
--- /dev/null
+++ b/libkdchart/KDChartListTable.h
@@ -0,0 +1,484 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTLISTTABLE_H__
+#define __KDCHARTLISTTABLE_H__
+
+#include <qvaluelist.h>
+#include <qshared.h>
+#include <qtable.h>
+
+#include <KDChartDataIntern.h>
+#include <KDChartTableBase.h>
+
+class KDCHART_EXPORT KDChartListTablePrivate : public QShared
+{
+ public:
+ KDChartListTablePrivate() : QShared() {
+ row_count = 0;
+ col_count = 0;
+ }
+
+ KDChartListTablePrivate( uint _rows, uint _cols ) : QShared() {
+ for ( uint i = 0; i < _rows; i++ )
+ row_list.append( int() );
+ for ( uint j = 0; j < _cols; j++ )
+ col_list.append( int() );
+ for ( uint k = 0; k < _rows * _cols; k++ )
+ matrix.append( KDChartData() );
+ col_count = _cols;
+ row_count = _rows;
+ }
+
+ KDChartListTablePrivate( const KDChartListTablePrivate& _t ) :
+ QShared(),
+ matrix( _t.matrix ),
+ row_list( _t.row_list ),
+ col_list( _t.col_list ),
+ col_count( _t.col_count ),
+ row_count( _t.row_count ) {}
+ ~KDChartListTablePrivate() {}
+
+ void expand( uint _rows, uint _cols ) {
+ if ( _rows > row_count ) {
+ for ( uint r = 0; r < _rows - row_count; ++r ) {
+ row_list.append( int() );
+ for ( uint i = 0; i < col_count; ++i )
+ matrix.append( KDChartData() );
+ }
+ row_count = _rows;
+ }
+ if ( _cols > col_count ) {
+ uint old = col_count;
+ col_count = _cols;
+ for ( uint c = 0; c < _cols - old; ++c ) {
+ col_list.append( int() );
+ for ( uint i = 0; i < row_count; ++i )
+ matrix.insert( matrix.at( i * col_count + old + c ), KDChartData() );
+ }
+ }
+ }
+
+ const KDChartData& cell( uint _row, uint _col ) const
+ {
+ Q_ASSERT( _row < row_count && _col < col_count );
+ return matrix[ static_cast < int > ( _row * col_count + _col ) ];
+ }
+ KDChartData& cell( uint _row, uint _col )
+ {
+ Q_ASSERT( _row < row_count && _col < col_count );
+ return matrix[ static_cast < int > ( _row * col_count + _col ) ];
+ }
+
+ void setCell( uint _row, uint _col, const KDChartData& _element )
+ {
+ Q_ASSERT( _row < row_count && _col < col_count );
+ matrix[ static_cast < int > ( _row * col_count + _col ) ].setAll( _element );
+ }
+
+ void clearCell( uint _row, uint _col ) {
+ Q_ASSERT( _row < row_count && _col < col_count );
+ matrix[ static_cast < int > ( _row * col_count + _col ) ].clearValue();
+ }
+
+ void clearAllCells() {
+ for ( uint r = 0; r < row_count; ++r )
+ for ( uint c = 0; c < col_count; ++c )
+ matrix[ static_cast < int > ( r * col_count + c ) ].clearValue();
+ }
+
+ int& row( uint _row ) {
+ Q_ASSERT( _row < row_count );
+ return row_list[ _row ];
+ }
+
+ const int& row( uint _row ) const {
+ Q_ASSERT( _row < row_count );
+ return row_list[ _row ];
+ }
+
+ void setRow( uint _row, const int& _v ) {
+ Q_ASSERT( _row < row_count );
+ row_list[ _row ] = _v;
+ }
+
+ int& col( uint _col ) {
+ Q_ASSERT( _col < col_count );
+ return col_list[ _col ];
+ }
+
+
+ const int& col( uint _col ) const {
+ Q_ASSERT( _col < col_count );
+ return col_list[ _col ];
+ }
+
+ void setCol( uint _col, const int& _v ) {
+ Q_ASSERT( _col < col_count );
+ col_list[ _col ] = _v;
+ }
+
+ void insertColumn( uint _c ) {
+ Q_ASSERT( _c <= col_count );
+ ++col_count;
+ QValueList < KDChartData > ::Iterator it;
+ for ( uint i = 0; i < row_count; ++i ) {
+ it = matrix.at( i * col_count + _c );
+ matrix.insert( it, KDChartData() );
+ }
+
+ QValueList < int > ::Iterator it2 = col_list.at( _c );
+ col_list.insert( it2, int() );
+ }
+
+ void insertRow( uint _r ) {
+ Q_ASSERT( _r <= row_count );
+ ++row_count;
+ QValueList < KDChartData > ::Iterator it = matrix.at( _r * col_count );
+ for ( uint i = 0; i < col_count; ++i )
+ matrix.insert( it, KDChartData() );
+
+ QValueList < int > ::Iterator it2 = row_list.at( _r );
+ row_list.insert( it2, int() );
+ }
+
+ void removeColumn( uint _c ) {
+ Q_ASSERT( _c < col_count );
+ --col_count;
+ QValueList < KDChartData > ::Iterator it;
+ for ( uint i = 0; i < row_count; ++i ) {
+ it = matrix.at( i * col_count + _c );
+ matrix.remove( it );
+ }
+
+ QValueList < int > ::Iterator it2 = col_list.at( _c );
+ col_list.remove( it2 );
+ }
+
+ void removeRow( uint _r ) {
+ Q_ASSERT( _r < row_count );
+ --row_count;
+ QValueList < KDChartData > ::Iterator it = matrix.at( _r * col_count );
+ for ( uint i = 0; i < col_count; ++i )
+ it = matrix.remove( it );
+
+ QValueList < int > ::Iterator it2 = row_list.at( _r );
+ row_list.remove( it2 );
+ }
+
+ QValueList < KDChartData > matrix;
+ QValueList < int > row_list;
+ QValueList < int > col_list;
+
+ uint col_count;
+ uint row_count;
+};
+
+
+class KDChartListTableData : public KDChartTableDataBase
+{
+ private:
+ typedef KDChartListTablePrivate Priv;
+ uint _usedRows, _usedCols;
+
+ public:
+ /**
+ * Typedefs
+ */
+ typedef QValueList < KDChartData > ::Iterator Iterator;
+ typedef QValueList < KDChartData > ::ConstIterator ConstIterator;
+
+ typedef QValueList < int > ::Iterator RowIterator;
+ typedef QValueList < int > ::ConstIterator ConstRowIterator;
+
+ typedef QValueList < int > ::Iterator ColIterator;
+ typedef QValueList < int > ::ConstIterator ConstColIterator;
+
+ /**
+ * API
+ */
+ KDChartListTableData() :
+ KDChartTableDataBase()
+ {
+ sh = new Priv;
+ _usedCols = 0;
+ _usedRows = 0;
+ }
+ KDChartListTableData( uint _rows, uint _cols ) :
+ KDChartTableDataBase()
+ {
+ sh = new Priv( _rows, _cols );
+ _usedRows = _rows;
+ _usedCols = _cols;
+ }
+
+ KDChartListTableData( const KDChartListTableData& _t ) :
+ KDChartTableDataBase( _t ) {
+ _useUsedRows = _t._useUsedRows;
+ _useUsedCols = _t._useUsedCols;
+ _usedRows = _t._usedRows;
+ _usedCols = _t._usedCols;
+ sh = _t.sh;
+ sh->ref();
+ setSorted( _t.sorted() );
+ }
+
+ virtual ~KDChartListTableData() {
+ if ( sh->deref() )
+ delete sh;
+ }
+
+ KDChartListTableData& operator=( const KDChartListTableData& t ) {
+ if ( &t == this )
+ return * this;
+ _useUsedRows = t._useUsedRows;
+ _useUsedCols = t._useUsedCols;
+ _usedRows = t._usedRows;
+ _usedCols = t._usedCols;
+ t.sh->ref();
+ if ( sh->deref() )
+ delete sh;
+ sh = t.sh;
+ setSorted( t.sorted() );
+ return *this;
+ }
+
+ Iterator begin() {
+ return sh->matrix.begin();
+ }
+
+ ConstIterator begin() const {
+ return sh->matrix.begin();
+ }
+
+ Iterator end() {
+ return sh->matrix.end();
+ }
+
+ ConstIterator end() const {
+ return sh->matrix.end();
+ }
+
+ ColIterator colBegin() {
+ return sh->col_list.begin();
+ }
+
+ ConstColIterator colBegin() const {
+ return sh->col_list.begin();
+ }
+
+ ColIterator colEnd() {
+ return sh->col_list.end();
+ }
+
+ ConstColIterator colEnd() const
+ {
+ return sh->col_list.end();
+ }
+
+ RowIterator rowBegin() {
+ return sh->row_list.begin();
+ }
+
+ ConstRowIterator rowBegin() const {
+ return sh->row_list.begin();
+ }
+
+ RowIterator rowEnd() {
+ return sh->row_list.end();
+ }
+
+ ConstRowIterator rowEnd() const {
+ return sh->row_list.end();
+ }
+
+ bool isEmpty() const {
+ return ( sh->col_count == 0 && sh->row_count == 0 );
+ }
+
+ uint cols() const {
+ return sh->col_count;
+ }
+
+ uint rows() const {
+ return sh->row_count;
+ }
+
+ virtual bool cellCoord( uint _row, uint _col,
+ QVariant& _value,
+ int coordinate=1 ) const
+ {
+ if( _row >= sh->row_count || _col >= sh->col_count )
+ return false;
+ _value = sh->cell( _row, _col ).value( coordinate );
+ return true;
+ }
+
+ virtual bool cellProp( uint _row, uint _col,
+ int& _prop ) const
+ {
+ if( _row >= sh->row_count || _col >= sh->col_count )
+ return false;
+ _prop = sh->cell( _row, _col ).propertySet();
+ return true;
+ }
+
+ virtual void setCell( uint _row, uint _col,
+ const QVariant& _value1,
+ const QVariant& _value2=QVariant() )
+ {
+ detach();
+ const KDChartData element( _value1, _value2 );
+ sh->setCell( _row, _col, element );
+ }
+
+ virtual void setProp( uint _row, uint _col,
+ int _propSet=0 )
+ {
+ sh->cell( _row, _col ).setPropertySet( _propSet );
+ }
+
+ void clearCell( uint _row, uint _col ) {
+ detach();
+ sh->clearCell( _row, _col );
+ }
+
+ void clearAllCells() {
+ detach();
+ sh->clearAllCells();
+ }
+
+ int& row( uint _row ) {
+ detach();
+ return sh->row( _row );
+ }
+
+ const int& row( uint _row ) const {
+ return sh->row( _row );
+ }
+
+ void setRow( uint _row, const int& _v ) {
+ detach();
+ sh->setRow( _row, _v );
+ }
+
+ int& col( uint _col ) {
+ detach();
+ return sh->col( _col );
+ }
+
+ const int& col( uint _col ) const {
+ return sh->col( _col );
+ }
+
+ void setCol( uint _col, const int& _v ) {
+ detach();
+ sh->setCol( _col, _v );
+ }
+
+ void insertColumn( uint _c ) {
+ detach();
+ sh->insertColumn( _c );
+ ++_usedCols;
+ }
+
+ void insertRow( uint _r ) {
+ detach();
+ sh->insertRow( _r );
+ ++_usedRows;
+ }
+
+ void removeColumn( uint _c ) {
+ detach();
+ sh->removeColumn( _c );
+ if( _usedCols )
+ --_usedCols;
+ }
+
+ void removeRow( uint _r ) {
+ detach();
+ sh->removeRow( _r );
+ if( _usedRows )
+ --_usedRows;
+ }
+
+ void expand( uint _rows, uint _cols ) {
+ detach();
+ sh->expand( _rows, _cols );
+ // adjust the usedRows / usedCols, if they had been set before
+ if( _useUsedCols )
+ setUsedCols( QMIN( _usedCols, _cols ) );
+ if( _useUsedRows )
+ setUsedRows( QMIN( _usedRows, _rows ) );
+ }
+
+ void setUsedRows( uint _rows ) {
+ Q_ASSERT( _rows <= rows() );
+ if( _usedRows < _rows )
+ setSorted( false );
+ _usedRows = _rows;
+ _useUsedRows = true;
+ }
+
+ uint usedRows() const {
+ return _useUsedRows ? _usedRows : rows();
+ }
+
+ void setUsedCols( uint _cols ) {
+ Q_ASSERT( _cols <= cols() );
+ if( _usedCols < _cols )
+ setSorted( false );
+ _usedCols = _cols;
+ _useUsedCols = true;
+ }
+
+ uint usedCols() const {
+ return _useUsedCols ? _usedCols : cols();
+ }
+
+ private:
+ /**
+ * Helpers
+ */
+ void detach() {
+ if ( sh->count > 1 ) {
+ sh->deref();
+ sh = new Priv( *sh );
+ }
+ setSorted( false );
+ }
+
+ /**
+ * Variables
+ */
+ Priv* sh;
+};
+
+#endif
+// __KDCHARTLISTTABLE_H__
+
diff --git a/libkdchart/KDChartNotEnoughSpaceException.h b/libkdchart/KDChartNotEnoughSpaceException.h
new file mode 100644
index 0000000..b97adde
--- /dev/null
+++ b/libkdchart/KDChartNotEnoughSpaceException.h
@@ -0,0 +1,50 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTNOTENOUGHSPACEEXCEPTION_H__
+#define __KDCHARTNOTENOUGHSPACEEXCEPTION_H__
+
+#ifdef USE_EXCEPTIONS
+
+#include <qstring.h>
+
+#include "KDChartGlobal.h"
+
+/**
+ This exception is thrown when there is not enough space for
+ drawing all selected parts of a chart.
+ */
+class KDCHART_EXPORT KDChartNotEnoughSpaceException
+{
+ public:
+ KDChartNotEnoughSpaceException();
+};
+
+#endif
+
+#endif
diff --git a/libkdchart/KDChartObjectFactory.cpp b/libkdchart/KDChartObjectFactory.cpp
new file mode 100644
index 0000000..6106390
--- /dev/null
+++ b/libkdchart/KDChartObjectFactory.cpp
@@ -0,0 +1,531 @@
+#include "KDChartObjectFactory.h"
+#include <KDChartParams.h>
+#include <KDChartTable.h>
+#include <qsargument.h>
+#include <qdatetime.h>
+#include <KDChartEnums.h>
+#include <qfont.h>
+#include <KDChartTextPiece.h>
+#include <qcolor.h>
+#include <KDChartWidget.h>
+#include <KDChartPropertySet.h>
+#include "factories/QtFactory.h"
+#include "factories/QFontFactory.h"
+
+// PENDING(blackie) Clean up code in this file, so it uses the correct getter methods like getBool.
+KDChartObjectFactory::KDChartObjectFactory()
+{
+ registerClass( QString::fromLatin1( "KDChartWidget" ) );
+ registerClass( QString::fromLatin1( "KDChartParams" ), new KDChartParams );
+ registerClass( QString::fromLatin1( "KDChartTableData" ) );
+ registerClass( QString::fromLatin1( "KDChartAxisParams" ), new KDChartAxisParams );
+ registerClass( QString::fromLatin1( "KDChartEnums" ), 0, new KDChartEnums );
+ registerClass( QString::fromLatin1( "KDChartTextPiece" ) );
+ registerClass( QString::fromLatin1( "KDChartCustomBox" ), new KDChartCustomBox );
+ registerClass( QString::fromLatin1( "KDChartPropertySet" ), new KDChartPropertySet );
+ registerClass( QString::fromLatin1( "KDFrame" ), QString::null, new KDFrame );
+
+ registerClass( QString::fromLatin1( "Qt" ), QString::null, new QtFactory() );
+ registerClass( QString::fromLatin1( "QFont" ), QString::null, new QFontFactory );
+}
+
+QObject* KDChartObjectFactory::create( const QString& className, const QSArgumentList& args, QObject* /*context*/ )
+{
+ if ( className == QString::fromLatin1( "KDChartWidget" ) )
+ return createKDChartWidget( args );
+
+ if ( className == QString::fromLatin1("KDChartParams") )
+ return new KDChartParams();
+
+ else if ( className == QString::fromLatin1("KDChartTableData") )
+ return createKDChartTableData( args );
+
+ else if ( className == QString::fromLatin1("KDChartAxisParams") )
+ return new KDChartAxisParams();
+
+
+ else if ( className == QString::fromLatin1( "KDChartTextPiece" ) )
+ return createKDChartTextPiece( args );
+
+ else if ( className == QString::fromLatin1( "KDChartCustomBox" ) )
+ return createKDChartCustomBox( args );
+
+ else if ( className == QString::fromLatin1( "KDChartPropertySet" ) )
+ return createKDChartPropertySet( args );
+
+ else
+ return 0;
+}
+
+QObject* KDChartObjectFactory::createKDChartWidget( const QSArgumentList& args )
+{
+ if ( !checkArgCount( "KDChartWidget", args.count(), 2, 2 ) ) return 0;
+ if ( !checkArgsIsQtClass( args, 1, "KDChartParams", "KDChartWidget" ) ) return 0;
+ if ( !checkArgsIsQtClass( args, 2, "KDChartTableDataBase", "KDChartWidget" ) ) return 0;
+ KDChartParams* params = static_cast<KDChartParams*>( args[0].qobject() );
+ KDChartTableDataBase* data = static_cast<KDChartTableDataBase*>( args[1].qobject() );
+
+ return new KDChartWidget( params, data );
+
+}
+
+QObject* KDChartObjectFactory::createKDChartTableData( const QSArgumentList& args )
+{
+ if ( args.count() != 2 ) {
+ throwError( QObject::tr( "wrong number of arguments to KDChartTableData" ) );
+ return 0;
+ }
+ QSArgument arg1 = args[0];
+ QSArgument arg2 = args[1];
+
+ if ( arg1.type() != QSArgument::Variant || !isNumber(arg1.variant()) ) {
+ throwError( QObject::tr( "wrong type for argument 1 of KDChartTableData" ) );
+ return 0;
+ }
+ if ( arg2.type() != QSArgument::Variant || !isNumber(arg2.variant() ) ) {
+ throwError( QObject::tr( "wrong type for argument 2 of KDChartTableData" ) );
+ return 0;
+ }
+ return new KDChartTableData( arg1.variant().toUInt(), arg2.variant().toUInt() );
+}
+
+
+QObject* KDChartObjectFactory::createKDChartTextPiece( const QSArgumentList& args )
+{
+ if ( !checkArgCount( "KDChartTextPiece", args.count(), 2, 2 ) ) return 0;
+ QSArgument arg1 = args[0];
+ QSArgument arg2 = args[1];
+
+ QString str;
+ if ( !getString( args, 1, &str, "KDChartTextPiece" ) ) return 0;
+ if ( !checkIsQtVariant( args, 2, QVariant::Font, QString::fromLatin1( "QFont" ), "KDChartTextPiece" ) ) return 0;
+ QFont font = args[1].variant().toFont();
+
+ return new KDChartTextPiece( str, font );
+}
+
+QObject* KDChartObjectFactory::createKDChartCustomBox( const QSArgumentList& args )
+{
+ int tmp;
+
+ if ( args.count() == 0 )
+ return new KDChartCustomBox();
+
+
+ if ( args[0].type() == QSArgument::Variant && isNumber( args[0].variant() ) ) {
+ if ( args.count() < 8 ) {
+ throwError( QObject::tr( "Too few arguments to KDChartCustomBox" ) );
+ return 0;
+ }
+
+ int rotation;
+ if ( !getNumber( args, 1, &rotation, "KDChartCustomBox" ) ) return 0;
+
+ if (!checkArgsIsQtClass( args, 2, "KDChartTextPiece", "KDChartCustomBox" )) return 0;
+ KDChartTextPiece* content = static_cast<KDChartTextPiece*>( args[1].qobject() );
+
+ int fontSize;
+ if ( !getNumber( args, 3, &fontSize, "KDChartCustomBox" ) ) return 0;
+
+
+ bool fontScaleGlobal;
+ if ( !getBool( args, 4, &fontScaleGlobal, "KDChartCustomBox" ) ) return 0;
+
+ int deltaX;
+ if ( !getNumber( args, 5, &deltaX, "KDChartCustomBox" ) ) return 0;
+
+ int deltaY;
+ if ( !getNumber( args, 6, &deltaY, "KDChartCustomBox" ) ) return 0;
+
+ int width;
+ if ( !getNumber( args, 7, &width, "KDChartCustomBox" ) ) return 0;
+
+ int height;
+ if ( !getNumber( args, 8, &height, "KDChartCustomBox" ) ) return 0;
+
+ QColor color = Qt::black;
+ if ( args.count() >= 9 ) {
+ if ( !checkIsQtVariant( args, 9, QVariant::Color, QString::fromLatin1( "QColor" ), "KDChartCustomBox" ) ) return 0;
+ color = args[8].variant().toColor();
+ }
+
+ QBrush paper = Qt::NoBrush;
+ if ( args.count() >= 10 ) {
+ if ( !checkIsQtVariant( args, 10, QVariant::Brush, QString::fromLatin1( "QBrush" ), "KDChartCustomBox" ) ) return 0;
+ paper = args[9].variant().toBrush();
+ }
+
+ uint area = KDChartEnums::AreaInnermost;
+ if ( args.count() >= 11 ) {
+ if ( !getNumber( args, 11, &area, "KDChartCustomBox" ) ) return 0;
+ }
+
+ KDChartEnums::PositionFlag position = KDChartEnums::PosTopLeft;
+ if ( args.count() >= 12 ) {
+ if ( !getNumber( args, 12, &tmp, "KDChartCustomBox" ) ) return 0;
+ position = (KDChartEnums::PositionFlag) tmp;
+ }
+
+ uint align = Qt::AlignTop + Qt::AlignLeft;
+ if ( args.count() >= 13 ) {
+ if ( !getNumber( args, 13, &align, "KDChartCustomBox" ) ) return 0;
+ }
+
+ uint dataRow = 0;
+ if ( args.count() >= 14 ) {
+ if ( !getNumber( args, 14, &dataRow, "KDChartCustomBox" ) ) return 0;
+ }
+
+ uint dataCol = 0;
+ if ( args.count() >= 15 ) {
+ if ( !getNumber( args, 15, &dataCol, "KDChartCustomBox" ) ) return 0;
+ }
+
+ uint data3rd = 0;
+ if ( args.count() >= 16 ) {
+ if ( !getNumber( args, 16, &data3rd, "KDChartCustomBox" ) ) return 0;
+ }
+
+ uint deltaAlign = KDCHART_AlignAuto;
+ if ( args.count() >= 17 ) {
+ if ( !getNumber( args, 17, &deltaAlign, "KDChartCustomBox" ) ) return 0;
+ }
+
+ bool deltaScaleGlobal = true;
+ if ( args.count() >= 18 ) {
+ if ( !getBool( args, 18, &deltaScaleGlobal, "KDChartCustomBox" ) ) return 0;
+ }
+
+ return new KDChartCustomBox( rotation, *content, fontSize, fontScaleGlobal, deltaX, deltaY,
+ width, height, color, paper, area, position, align, dataRow,
+ dataCol, data3rd, deltaAlign, deltaScaleGlobal );
+ }
+
+ if (!checkArgsIsQtClass( args, 1, "KDChartTextPiece", "KDChartCustomBox" )) return 0;
+ KDChartTextPiece* content = static_cast<KDChartTextPiece*>( args[0].qobject() );
+
+ if ( args.count() < 2 ) {
+ throwError( QObject::tr( "Too few arguments to KDChartCustomBox" ) );
+ return 0;
+ }
+
+ int fontSize;
+ if ( ! getNumber( args, 2, &fontSize, "KDChartCustomBox" ) ) return 0;
+
+ bool fontScaleGlobal = true;
+ if ( args.count() > 2 && !getBool( args, 3, &fontScaleGlobal, "KDChartCustomBox" ) ) return 0;
+
+ if ( args.count() <= 3 )
+ return new KDChartCustomBox( *content, fontSize, fontScaleGlobal );
+
+ checkArgCount( "KDChartCustomBox", args.count(), 7, 17 );
+
+ int deltaX;
+ if ( !getNumber( args, 4, &deltaX, "KDChartCustomBox" ) ) return 0;
+
+ int deltaY;
+ if ( !getNumber( args, 5, &deltaY, "KDChartCustomBox" ) ) return 0;
+
+ int width;
+ if ( !getNumber( args, 6, &width, "KDChartCustomBox" ) ) return 0;
+
+ int height;
+ if ( !getNumber( args, 7, &height, "KDChartCustomBox" ) ) return 0;
+
+
+ QColor color = Qt::black;
+ if ( args.count() >= 8 ) {
+ if ( !checkIsQtVariant( args, 8, QVariant::Color, QString::fromLatin1( "QColor" ), "KDChartCustomBox" ) ) return 0;
+ color = args[7].variant().toColor();
+ }
+
+ QBrush paper = Qt::NoBrush;
+ if ( args.count() >= 9 ) {
+ if ( !checkIsQtVariant( args, 9, QVariant::Brush, QString::fromLatin1( "QBrush" ), "KDChartCustomBox" ) ) return 0;
+ paper = args[8].variant().toBrush();
+ }
+
+ uint area = KDChartEnums::AreaInnermost;
+ if ( args.count() >= 10 ) {
+ if ( !getNumber( args, 10, &area, "KDChartCustomBox" ) ) return 0;
+ }
+
+ KDChartEnums::PositionFlag position = KDChartEnums::PosTopLeft;
+ if ( args.count() >= 11 ) {
+ if ( !getNumber( args, 11, &tmp, "KDChartCustomBox" ) ) return 0;
+ position = (KDChartEnums::PositionFlag) tmp;
+ }
+
+ uint align = Qt::AlignTop + Qt::AlignLeft;
+ if ( args.count() >= 12 ) {
+ if ( !getNumber( args, 12, &align, "KDChartCustomBox" ) ) return 0;
+ }
+
+ uint dataRow = 0;
+ if ( args.count() >= 13 ) {
+ if ( !getNumber( args, 13, &dataRow, "KDChartCustomBox" ) ) return 0;
+ }
+
+ uint dataCol = 0;
+ if ( args.count() >= 14 ) {
+ if ( !getNumber( args, 14, &dataCol, "KDChartCustomBox" ) ) return 0;
+ }
+
+ uint data3rd = 0;
+ if ( args.count() >= 15 ) {
+ if ( !getNumber( args, 15, &data3rd, "KDChartCustomBox" ) ) return 0;
+ }
+
+ uint deltaAlign = KDCHART_AlignAuto;
+ if ( args.count() >= 16 ) {
+ if ( !getNumber( args, 16, &deltaAlign, "KDChartCustomBox" ) ) return 0;
+ }
+
+ bool deltaScaleGlobal = true;
+ if ( args.count() >= 17 ) {
+ if ( !getBool( args, 17, &deltaScaleGlobal, "KDChartCustomBox" ) ) return 0;
+ }
+
+
+ return new KDChartCustomBox( *content, fontSize, fontScaleGlobal, deltaX, deltaY, width, height, color,
+ paper, area, position, align, dataRow, dataCol, data3rd, deltaAlign, deltaScaleGlobal );
+}
+
+QObject* KDChartObjectFactory::createKDChartPropertySet(const QSArgumentList& args )
+{
+ if ( args.count() == 0 )
+ return new KDChartPropertySet();
+
+ QString name;
+ if ( !getString( args, 1, &name, "KDChartPropertySet" ) ) return 0;
+
+ if ( args.count() == 1 )
+ return new KDChartPropertySet( name );
+
+ int i;
+ if ( !getNumber( args, 2, &i, "KDChartPropertySet" ) ) return 0;
+ if ( args.count() == 2 )
+ return new KDChartPropertySet( name, i );
+
+ if ( !checkArgCount( "KDChartPropertySet", args.count(), 33, 33 ) ) return 0;
+
+ int idLineWidth = i;
+
+ int lineWidth;
+ if ( !getNumber( args, 3,&lineWidth, "KDChartPropertySet" ) ) return 0;
+
+ int idLineColor;
+ if ( !getNumber( args, 4,&idLineColor, "KDChartPropertySet" ) ) return 0;
+
+
+ if ( !checkIsQtVariant( args, 5, QVariant::Color, QString::fromLatin1( "QColor" ), "KDChartPropertySet" ) ) return 0;
+ QColor lineColor = args[4].variant().toColor();
+
+ int idLineStyle;
+ if ( !getNumber( args, 6,&idLineStyle, "KDChartPropertySet" ) ) return 0;
+
+
+
+ if ( !getNumber( args, 7,&i, "KDChartPropertySet" ) ) return 0;
+ Qt::PenStyle lineStyle = (Qt::PenStyle) i;
+
+ int idShowMarker;
+ if ( !getNumber( args, 8,&idShowMarker, "KDChartPropertySet" ) ) return 0;
+
+ bool showMarker;
+ if ( !getBool( args, 9, &showMarker, "KDChartPropertySet" ) ) return 0;
+
+ int idExtraLinesAlign;
+ if ( !getNumber( args, 10,&idExtraLinesAlign, "KDChartPropertySet" ) ) return 0;
+
+ uint extraLinesAlign;
+ if ( !getNumber( args, 11,&extraLinesAlign, "KDChartPropertySet" ) ) return 0;
+
+ int idExtraLinesInFront;
+ if ( !getNumber( args, 12,&idExtraLinesInFront, "KDChartPropertySet" ) ) return 0;
+
+ bool extraLinesInFront;
+ if ( !getBool( args, 13, &extraLinesInFront, "KDChartPropertySet" ) ) return 0;
+
+ int idExtraLinesLength;
+ if ( !getNumber( args, 14,&idExtraLinesLength, "KDChartPropertySet" ) ) return 0;
+
+ int extraLinesLength;
+ if ( !getNumber( args, 15,&extraLinesLength, "KDChartPropertySet" ) ) return 0;
+
+ int idExtraLinesWidth;
+ if ( !getNumber( args, 16,&idExtraLinesWidth, "KDChartPropertySet" ) ) return 0;
+
+ int extraLinesWidth;
+ if ( !getNumber( args, 17,&extraLinesWidth, "KDChartPropertySet" ) ) return 0;
+
+ int idExtraLinesColor;
+ if ( !getNumber( args, 18,&idExtraLinesColor, "KDChartPropertySet" ) ) return 0;
+
+ if ( !checkIsQtVariant( args, 19, QVariant::Color, QString::fromLatin1( "QColor" ), "KDChartPropertySet" ) ) return 0;
+ QColor extraLinesColor = args[18].variant().toColor();
+
+ int idExtraLinesStyle;
+ if ( !getNumber( args, 20,&idExtraLinesStyle, "KDChartPropertySet" ) ) return 0;
+
+ if ( !getNumber( args, 21,&i, "KDChartPropertySet" ) ) return 0;
+ Qt::PenStyle extraLinesStyle = (Qt::PenStyle) i;
+
+ int idExtraMarkersAlign;
+ if ( !getNumber( args, 22,&idExtraMarkersAlign, "KDChartPropertySet" ) ) return 0;
+
+ uint extraMarkersAlign;
+ if ( !getNumber( args, 23,&extraMarkersAlign, "KDChartPropertySet" ) ) return 0;
+
+ int idExtraMarkersSize;
+ if ( !getNumber( args, 24,&idExtraMarkersSize, "KDChartPropertySet" ) ) return 0;
+
+ if ( !checkIsQtVariant( args, 25, QVariant::Size, QString::fromLatin1( "QSize" ), "KDChartPropertySet" ) ) return 0;
+ QSize extraMarkersSize = args[24].variant().toSize();
+
+ int idExtraMarkersColor;
+ if ( !getNumber( args, 26,&idExtraMarkersColor, "KDChartPropertySet" ) ) return 0;
+
+ if ( !checkIsQtVariant( args, 27, QVariant::Color, QString::fromLatin1( "QColor" ), "KDChartPropertySet" ) ) return 0;
+ QColor extraMarkersColor = args[26].variant().toColor();
+
+ int idExtraMarkersStyle;
+ if ( !getNumber( args, 28,&idExtraMarkersStyle, "KDChartPropertySet" ) ) return 0;
+
+ int extraMarkersStyle;
+ if ( !getNumber( args, 29,&extraMarkersStyle, "KDChartPropertySet" ) ) return 0;
+
+ int idShowBar;
+ if ( !getNumber( args, 30,&idShowBar, "KDChartPropertySet" ) ) return 0;
+
+ bool showBar;
+ if ( !getBool( args, 31, &showBar, "KDChartPropertySet" ) ) return 0;
+
+ int idBarColor;
+ if ( !getNumber( args, 32,&idBarColor, "KDChartPropertySet" ) ) return 0;
+
+ if ( !checkIsQtVariant( args, 33, QVariant::Color, QString::fromLatin1( "QColor" ), "KDChartPropertySet" ) ) return 0;
+ QColor barColor = args[32].variant().toColor();
+
+ KDChartPropertySet* set = new KDChartPropertySet;
+ set->setName( name );
+ set->setLineWidth( idLineWidth, lineWidth );
+ set->setLineColor( idLineColor, lineColor );
+ set->setLineStyle( idLineStyle, lineStyle );
+ set->setShowMarker( idShowMarker, showMarker );
+ set->setExtraLinesAlign( idExtraLinesAlign, extraLinesAlign );
+ set->setExtraLinesInFront( idExtraLinesInFront, extraLinesInFront );
+ set->setExtraLinesLength( idExtraLinesLength, extraLinesLength );
+ set->setExtraLinesWidth( idExtraLinesWidth, extraLinesWidth );
+ set->setExtraLinesColor( idExtraLinesColor, extraLinesColor );
+ set->setExtraLinesStyle( idExtraLinesStyle, extraLinesStyle );
+ set->setExtraMarkersAlign( idExtraMarkersAlign, extraMarkersAlign );
+ set->setExtraMarkersSize( idExtraMarkersSize, extraMarkersSize );
+ set->setExtraMarkersColor( idExtraMarkersColor, extraMarkersColor );
+ set->setExtraMarkersStyle( idExtraMarkersStyle, extraMarkersStyle );
+ set->setShowBar( idShowMarker, showBar );
+ set->setBarColor( idBarColor, barColor );
+ return set;
+}
+
+
+bool KDChartObjectFactory::isNumber( const QVariant& v )
+{
+ return ( v.type() == QVariant::Int || v.type() == QVariant::UInt || v.type() == QVariant::Double );
+}
+
+ // PENDING(blackie) rework order of parameters so it matches the other methods
+bool KDChartObjectFactory::checkArgCount( const QString& className, int count, int min, int max )
+{
+ if ( count < min ) {
+ throwError( QObject::tr( "Too few arguments when creating %1 object." ).arg( className ) );
+ return false;
+ }
+ if ( count > max ) {
+ throwError( QObject::tr( "Too many arguments when creating %1 object." ).arg( className ) );
+ return false;
+ }
+ return true;
+}
+
+
+bool KDChartObjectFactory::checkArgsIsQtClass( const QSArgumentList& args, int index, const char* expected, const char* constructing )
+{
+ const QSArgument& arg = args[index-1];
+ if ( arg.type() != QSArgument::QObjectPtr || !arg.qobject()->inherits( expected ) ) {
+ throwError( QObject::tr( "Invalid type for argument no %1 to %2, must be a %3" ).arg(index).arg(constructing).arg(expected) );
+ return false;
+ }
+ return true;
+}
+
+
+bool KDChartObjectFactory::getString( const QSArgumentList& args, int index, QString* str, const char* constructing )
+{
+ const QSArgument& arg = args[index-1];
+ if ( arg.type() != QSArgument::Variant || arg.variant().type() != QVariant::String ) {
+ throwError( QObject::tr( "Invalid type for argument %1 to %2, must be a string" ).arg(index).arg(constructing) );
+ return false;
+ }
+ else {
+ *str = arg.variant().toString();
+ return true;
+ }
+}
+
+bool KDChartObjectFactory::getNumber( const QSArgumentList& args, int index, double* number, const char* constructing )
+{
+ const QSArgument& arg = args[index-1];
+ if ( arg.type() != QSArgument::Variant || !isNumber(arg.variant()) ) {
+ throwError( QObject::tr( "Invalid type for argument %1 to %2, must be a number" ).arg(index).arg( constructing ) );
+ return false;
+ }
+ else {
+ *number = arg.variant().toDouble();
+ return true;
+ }
+}
+
+bool KDChartObjectFactory::getNumber( const QSArgumentList& args, int index, int* number, const char* constructing )
+{
+ double tmp;
+ bool ok = getNumber( args, index, &tmp, constructing );
+ *number = static_cast<int>( tmp );
+ return ok;
+}
+
+bool KDChartObjectFactory::getNumber( const QSArgumentList& args, int index, uint* number, const char* constructing )
+{
+ double tmp;
+ bool ok = getNumber( args, index, &tmp, constructing );
+ *number = static_cast<uint>( tmp );
+ return ok;
+}
+
+
+
+bool KDChartObjectFactory::getBool( const QSArgumentList& args, int index, bool* b, const char* constructing )
+{
+ const QSArgument& arg = args[index-1];
+ if ( arg.type() != QSArgument::Variant || arg.variant().type() != QVariant::Bool ) {
+ throwError( QObject::tr( "Invalid type for argument %1 to %2, must be a boolean" ).arg(index).arg( constructing ) );
+ return false;
+ }
+ else {
+ *b = arg.variant().toBool();
+ return true;
+ }
+}
+
+bool KDChartObjectFactory::checkIsQtVariant( const QSArgumentList& args, int index, QVariant::Type expected, const QString& variantName, const char* constructing )
+{
+ const QSArgument& arg = args[index-1];
+ if ( arg.type() != QSArgument::Variant || arg.variant().type() != expected ) {
+ throwError( QObject::tr( "Invalid type for argument %1 to %2, must be a %3").arg(index).arg(constructing).arg(variantName) );
+ return false;
+ }
+ else
+ return true;
+}
+
+
diff --git a/libkdchart/KDChartObjectFactory.h b/libkdchart/KDChartObjectFactory.h
new file mode 100644
index 0000000..15fdb94
--- /dev/null
+++ b/libkdchart/KDChartObjectFactory.h
@@ -0,0 +1,37 @@
+#ifndef KDCHARTQSA_H
+#define KDCHARTQSA_H
+#include <qsobjectfactory.h>
+
+class KDChartObjectFactory :public QSObjectFactory {
+
+public:
+ KDChartObjectFactory();
+ virtual QObject* create( const QString& className, const QSArgumentList& args, QObject* context );
+protected:
+ QObject* createKDChartWidget( const QSArgumentList& args );
+ QObject* createKDChartTableData( const QSArgumentList& args );
+ QObject* createQDateTime( const QSArgumentList& args );
+ QObject* createQDate( const QSArgumentList& args );
+ QObject* createQTime( const QSArgumentList& args );
+ QObject* createKDChartTextPiece( const QSArgumentList& args );
+ QObject* createQFont( const QSArgumentList& args );
+ QObject* createKDChartCustomBox( const QSArgumentList& args );
+ QObject* createQColor(const QSArgumentList& args );
+ QObject* createKDChartPropertySet(const QSArgumentList& args );
+
+ bool isNumber( const QVariant& );
+ bool checkArgCount( const QString& className, int count, int min, int max );
+ bool checkArgsIsQtClass( const QSArgumentList& args, int index, const char* expected, const char* constructing );
+ bool getString( const QSArgumentList& arg, int index, QString* str, const char* constructing );
+
+ bool getNumber( const QSArgumentList& args, int index, double* number, const char* constructing );
+ bool getNumber( const QSArgumentList& args, int index, int* number, const char* constructing );
+ bool getNumber( const QSArgumentList& args, int index, uint* number, const char* constructing );
+
+ bool getBool( const QSArgumentList& arg, int index, bool* b, const char* constructing );
+ bool checkIsQtVariant( const QSArgumentList& arg, int index, QVariant::Type expected, const QString& variantName, const char* constructing );
+};
+
+
+#endif /* KDCHARTQSA_H */
+
diff --git a/libkdchart/KDChartPainter.cpp b/libkdchart/KDChartPainter.cpp
new file mode 100644
index 0000000..7643589
--- /dev/null
+++ b/libkdchart/KDChartPainter.cpp
@@ -0,0 +1,2984 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#include <KDChartParams.h>
+#if defined ( SUN7 ) || defined (_SGIAPI) || defined ( Q_WS_WIN)
+ #include <math.h>
+#else
+ #include <cmath>
+ #include <stdlib.h>
+#endif
+
+#include <KDDrawText.h>
+#include <KDChartPainter.h>
+#include <KDChartEnums.h>
+#include <KDChartParams.h>
+#include <KDChartCustomBox.h>
+#include <KDChartTableBase.h>
+#include <KDChartDataRegion.h>
+#include <KDChartUnknownTypeException.h>
+#include <KDChartNotEnoughSpaceException.h>
+#include <KDChartBarPainter.h>
+#include <KDChartAreaPainter.h>
+#include <KDChartLinesPainter.h>
+#include <KDChartPiePainter.h>
+#include <KDChartPolarPainter.h>
+#include <KDChartRingPainter.h>
+#include <KDChartHiLoPainter.h>
+#include <KDChartBWPainter.h>
+#include <KDChartTextPiece.h>
+
+#include <KDChart.h> // for static method KDChart::painterToDrawRect()
+
+#include <qpainter.h>
+#include <qpaintdevice.h>
+#include <qpaintdevicemetrics.h>
+
+#define DEGTORAD(d) (d)*M_PI/180
+
+
+/**
+ \class KDChartPainter KDChartPainter.h
+
+ \brief An abstract base class that defines an interface for classes
+ that implement chart drawing.
+
+ Applications don't use this class directly (except for
+ registering/unregistering, see below) new chart implementations,
+ but instead use the method KDChart::paint() which takes care of the
+ correct creation and deletion of the painter implementation
+ used. Or they use KDChartWidget which handles everything
+ automatically.
+
+ This class cannot be instantiated directly. Even the concrete
+ subclasses are not instantiated directly, but are instantiated via
+ KDChartPainter::create() which creates a subclass according to the
+ parameters passed.
+
+ Application developers can provide their own chart implementations
+ by subclassing from KDChartPainter, instantiating their subclass
+ and registering their implementation with
+ KDChartPainter::registerPainter(). These registrations can be
+ removed with KDChartPainter::unregisterPainter().
+ */
+
+/**
+ Constructor. Will only be called by subclass constructors since
+ this class can never be instantiated directly.
+
+ \param params the parameters of the chart to be drawn
+ */
+KDChartPainter::KDChartPainter( KDChartParams* params ) :
+_outermostRect( QRect(QPoint(0,0), QSize(0,0))),
+_legendTitle( 0 ),
+_params( params ),
+_legendNewLinesStartAtLeft( true ),
+_legendTitleHeight( 0 ),
+_legendTitleWidth( 0 ),
+_legendTitleMetricsHeight( 0 )
+{
+ // This constructor intentionally left blank so far; we cannot setup the
+ // geometry yet since we do not know the size of the painter.
+}
+
+/**
+ Destructor. Cleans up any data structures that might have been allocated in
+ the meantime.
+ */
+KDChartPainter::~KDChartPainter()
+{
+ delete _legendTitle;
+}
+
+bool KDChartPainter::calculateAllAxesLabelTextsAndCalcValues(
+ QPainter*,
+ KDChartTableDataBase*,
+ double,
+ double,
+ double& )
+{
+ // This function intentionally returning false; it is implemented
+ // by the KDChartAxesPainter class only.
+ return false;
+}
+
+/**
+ Creates an object of a concrete subclass of KDChartPainter that
+ KDChart::paint() (and consequently, the application) can use to
+ have charts painted. The subclass is determined on the base of the
+ params parameter which among other things indicates the type of the
+ chart.
+
+ \param params the parameter set which is used to determine the
+ painter implementation to be used
+ \return a pointer to an object of a subclass of KDChartPainter that
+ can be used to draw charts as defined by the \a params
+ parameter. Returns 0 if there is no registered
+ KDChartPainter subclass for the type specified in \a params. This
+ can only happen with user-defined chart types.
+ */
+KDChartPainter* KDChartPainter::create( KDChartParams* params, bool make2nd )
+{
+ KDChartParams::ChartType cType = make2nd
+ ? params->additionalChartType()
+ : params->chartType();
+ switch ( cType )
+ {
+ case KDChartParams::Bar:
+ return new KDChartBarPainter( params );
+ case KDChartParams::Line:
+ return new KDChartLinesPainter( params );
+ case KDChartParams::Area:
+ return new KDChartAreaPainter( params );
+ case KDChartParams::Pie:
+ return new KDChartPiePainter( params );
+ case KDChartParams::Ring:
+ return new KDChartRingPainter( params );
+ case KDChartParams::HiLo:
+ return new KDChartHiLoPainter( params );
+ case KDChartParams::BoxWhisker:
+ return new KDChartBWPainter( params );
+ case KDChartParams::Polar:
+ return new KDChartPolarPainter( params );
+ case KDChartParams::NoType:
+ default:
+ return 0;
+ }
+}
+
+
+/**
+ Registers a user-defined painter implementation which is identified
+ by a string. If there is already a painter implementation
+ registered under that name, the old registration will be deleted.
+
+ KDChartPainter does not assume ownership of the registered painter,
+ but you should unregister a painter before deleting an
+ implementation object to avoid that that object is called after its
+ deletion.
+
+ \param painterName the name under which the painter implementation
+ should be registered. This will be matched against the user-defined
+ chart type name in the KDChartParams structure.
+ \param painter an implementation object of a user-defined chart
+ implementation
+ */
+void KDChartPainter::registerPainter( const QString& /*painterName*/,
+ KDChartPainter* /*painter*/ )
+{
+ // PENDING(kalle) Implement this
+ qDebug( "Sorry, not implemented: KDChartPainter::registerPainter()" );
+}
+
+
+/**
+ Unregisters a user-defined painter implementation. Does not delete
+ the implementation object. If no implementation has been registered
+ under this name, an exception is thrown if KDChart is compiled with
+ exceptions, otherwise nothing happens.
+
+ \param the name under which the painter implementation is
+ registered
+ */
+void KDChartPainter::unregisterPainter( const QString& /*painterName*/ )
+{
+ // PENDING(kalle) Implement this
+ qDebug( "Sorry, not implemented: KDChartPainter::unregisterPainter()" );
+}
+
+
+/**
+ Paints the chart for which this chart painter is configured on a
+ QPainter. This is the method that bundles all the painting
+ functions that paint specific parts of the chart like axes or
+ legends. Subclasses can override this method, but should rarely
+ need to do so.
+
+ \param painter the QPainter onto which the chart should be drawn
+ \param data the data which will be displayed as a chart
+ \param regions a pointer to a region list that will be filled with
+ regions representing the data segments if not null
+ */
+void KDChartPainter::paint( QPainter* painter,
+ KDChartTableDataBase* data,
+ bool paintFirst,
+ bool paintLast,
+ KDChartDataRegionList* regions,
+ const QRect* rect,
+ bool mustCalculateGeometry )
+{
+
+
+ if( paintFirst && regions )
+ regions->clear();
+
+ // Protect against non-existing data
+ if( data->usedCols() == 0 && data->usedRows() == 0 )
+ return ;
+
+ QRect drawRect;
+ //Pending Michel: at this point we have to setupGeometry
+ if( mustCalculateGeometry || _outermostRect.isNull() ){
+ if( rect )
+ drawRect = *rect;
+ else if( !KDChart::painterToDrawRect( painter, drawRect ) ){
+ qDebug("ERROR: KDChartPainter::paint() could not calculate the drawing area.");
+ return;
+ }
+ setupGeometry( painter, data, drawRect );
+ }
+ else
+ drawRect = _outermostRect;
+
+ //qDebug("A2: _legendRect:\n%i,%i\n%i,%i", _legendRect.left(),_legendRect.top(),_legendRect.right(),_legendRect.bottom() );
+
+
+ // Note: In addition to the below paintArea calls there might be several
+ // other paintArea calls regarding to the BASE areas (AreaAxisBASE,
+ // AreaHdFtBASE, AreaCustomBoxesBASE).
+ // These additional calls result in smaller areas being drawn inside
+ // on the larger ones specifies here.
+ if ( paintFirst ) {
+ paintArea( painter, KDChartEnums::AreaOutermost );
+ paintArea( painter, KDChartEnums::AreaInnermost );
+
+ paintArea( painter, KDChartEnums::AreaDataAxesLegendHeadersFooters );
+
+ paintArea( painter, KDChartEnums::AreaHeaders );
+ paintArea( painter, KDChartEnums::AreaFooters );
+ // header areas are drawn in the following order:
+ // 1st center: main header, left main header, right main header
+ // 2nd above: header #0, left header #0, right header #0
+ // 3rd below: header #2, left header #2, right header #2
+ paintArea( painter, KDChartEnums::AreaHdFtBASE + KDChartParams::HdFtPosHeader );
+ paintArea( painter, KDChartEnums::AreaHdFtBASE + KDChartParams::HdFtPosHeaderL );
+ paintArea( painter, KDChartEnums::AreaHdFtBASE + KDChartParams::HdFtPosHeaderR );
+ paintArea( painter, KDChartEnums::AreaHdFtBASE + KDChartParams::HdFtPosHeader0 );
+ paintArea( painter, KDChartEnums::AreaHdFtBASE + KDChartParams::HdFtPosHeader0L );
+ paintArea( painter, KDChartEnums::AreaHdFtBASE + KDChartParams::HdFtPosHeader0R );
+ paintArea( painter, KDChartEnums::AreaHdFtBASE + KDChartParams::HdFtPosHeader2 );
+ paintArea( painter, KDChartEnums::AreaHdFtBASE + KDChartParams::HdFtPosHeader2L );
+ paintArea( painter, KDChartEnums::AreaHdFtBASE + KDChartParams::HdFtPosHeader2R );
+ // footer areas are drawn in the same order as the header areas:
+ paintArea( painter, KDChartEnums::AreaHdFtBASE + KDChartParams::HdFtPosFooter );
+ paintArea( painter, KDChartEnums::AreaHdFtBASE + KDChartParams::HdFtPosFooterL );
+ paintArea( painter, KDChartEnums::AreaHdFtBASE + KDChartParams::HdFtPosFooterR );
+ paintArea( painter, KDChartEnums::AreaHdFtBASE + KDChartParams::HdFtPosFooter0 );
+ paintArea( painter, KDChartEnums::AreaHdFtBASE + KDChartParams::HdFtPosFooter0L );
+ paintArea( painter, KDChartEnums::AreaHdFtBASE + KDChartParams::HdFtPosFooter0R );
+ paintArea( painter, KDChartEnums::AreaHdFtBASE + KDChartParams::HdFtPosFooter2 );
+ paintArea( painter, KDChartEnums::AreaHdFtBASE + KDChartParams::HdFtPosFooter2L );
+ paintArea( painter, KDChartEnums::AreaHdFtBASE + KDChartParams::HdFtPosFooter2R );
+
+ paintHeaderFooter( painter, data );
+
+ paintArea( painter, KDChartEnums::AreaDataAxesLegend );
+ paintArea( painter, KDChartEnums::AreaDataAxes );
+ paintArea( painter, KDChartEnums::AreaAxes );
+ for( int axis = KDChartAxisParams::AxisPosSTART;
+ KDChartAxisParams::AxisPosEND >= axis; ++axis )
+ paintArea( painter, KDChartEnums::AreaAxisBASE + axis );
+ paintArea( painter, KDChartEnums::AreaData );
+ paintAxes( painter, data );
+ }
+
+ painter->save();
+ paintData( painter, data, !paintFirst, regions );
+ painter->restore();
+
+ if ( paintLast ) {
+ // paint the frame lines of all little data region areas
+ // on top of all data representations
+ paintDataRegionAreas( painter, regions );
+ if( KDChartParams::Bar != params()->chartType() ||
+ KDChartParams::BarMultiRows != params()->barChartSubType() )
+ paintDataValues( painter, data, regions );
+ if (params()->legendPosition()!=KDChartParams::NoLegend)
+ paintArea( painter, KDChartEnums::AreaLegend );
+ paintLegend( painter, data );
+ paintCustomBoxes( painter, regions );
+ }
+}
+
+
+/**
+ Paints an area frame.
+ */
+void KDChartPainter::paintArea( QPainter* painter,
+ uint area,
+ KDChartDataRegionList* regions,
+ uint dataRow,
+ uint dataCol,
+ uint data3rd )
+{
+ if( KDChartEnums::AreaCustomBoxesBASE != (KDChartEnums::AreaBASEMask & area) ){
+ bool bFound;
+ const KDChartParams::KDChartFrameSettings* settings =
+ params()->frameSettings( area, bFound );
+ if( bFound ) {
+ bool allCustomBoxes;
+ QRect rect( calculateAreaRect( allCustomBoxes,
+ area,
+ dataRow, dataCol, data3rd, regions ) );
+
+ if( !allCustomBoxes )
+ paintAreaWithGap( painter, rect, *settings );
+ }
+ }
+}
+
+
+void KDChartPainter::paintDataRegionAreas( QPainter* painter,
+ KDChartDataRegionList* regions )
+{
+ if( regions ){
+ int iterIdx;
+ bool bFound;
+ const KDChartParams::KDChartFrameSettings* settings =
+ params()->frameSettings( KDChartEnums::AreaChartDataRegion, bFound, &iterIdx );
+ while( bFound ) {
+ bool bDummy;
+ QRect rect( calculateAreaRect( bDummy,
+ KDChartEnums::AreaChartDataRegion,
+ settings->dataRow(),
+ settings->dataCol(),
+ settings->data3rd(),
+ regions ) );
+ // NOTE: we can *not* draw any background behind the
+ // data representations.
+ // reason: for being able to do that we would have to
+ // know the respective regions _before_ the
+ // data representations are drawn; since that
+ // is impossible, we just draw the borders only
+ // ( == the corners and the edges ) and ignore the background
+ //
+ // (actually: Since the respective interface function does not allow
+ // specifying a background there is nothing to be ignored anyway.)
+ settings->frame().paint( painter,
+ KDFrame::PaintBorder,
+ trueFrameRect( rect, settings ) );
+ settings = params()->nextFrameSettings( bFound, &iterIdx );
+ }
+ }
+}
+
+
+QRect KDChartPainter::trueFrameRect( const QRect& orgRect,
+ const KDChartParams::KDChartFrameSettings* settings ) const
+{
+ QRect rect( orgRect );
+ if( settings ){
+ rect.moveBy( -settings->innerGapX(), -settings->innerGapY() );
+ rect.setWidth( rect.width() + 2*settings->innerGapX() );
+ rect.setHeight( rect.height() + 2*settings->innerGapY() );
+ }
+ return rect;
+}
+
+
+/**
+ Paints an area frame.
+ This methode is called internally by KDChartPainter::paintArea.
+ NOTE: areas around KDChartCustomBoxes are _not_ drawn here but
+ in KDChartCustomBox::paint() which is called by paintCustomBoxes().
+ */
+void KDChartPainter::paintAreaWithGap( QPainter* painter,
+ QRect rect,
+ const KDChartParams::KDChartFrameSettings& settings )
+{
+ if( painter && rect.isValid() )
+ settings.frame().paint( painter,
+ KDFrame::PaintAll,
+ trueFrameRect( rect, &settings ) );
+}
+
+
+/**
+ Paints the data value texts near the data representations.
+ */
+void KDChartPainter::paintDataValues( QPainter* painter,
+ KDChartTableDataBase* data,
+ KDChartDataRegionList* regions )
+{
+ KDChartDataRegion* region;
+ if ( painter
+ && data
+ && regions
+ && regions->count()
+ && params()
+ && ( params()->printDataValues( 0 )
+ || params()->printDataValues( 1 ) ) ) {
+
+ // out of loop status saving
+ painter->save();
+
+ QFont font0( params()->dataValuesFont( 0 ) );
+
+ if( params()->dataValuesUseFontRelSize( 0 ) ) {
+ float size = QMIN(_areaWidthP1000, _areaHeightP1000) * abs(params()->dataValuesFontRelSize( 0 ));
+ if ( 9.0 > size )
+ size = 9.0;
+ font0.setPixelSize( static_cast < int > ( size ) );
+ }
+ painter->setFont( font0 );
+ QFontMetrics fm0( painter->fontMetrics() );
+ double fm0HeightP100( fm0.height() / 100.0 );
+ QFont font1( params()->dataValuesFont( 1 ) );
+
+ if( params()->dataValuesUseFontRelSize( 1 ) ) {
+ float size = QMIN(_areaWidthP1000, _areaHeightP1000) * abs(params()->dataValuesFontRelSize( 1 ));
+ if ( 9.0 > size )
+ size = 9.0;
+ font1.setPixelSize( static_cast < int > ( size ) );
+ } else
+ font1.setPixelSize( font0.pixelSize());
+ painter->setFont( font1 );
+ QFontMetrics fm1( painter->fontMetrics() );
+ double fm1HeightP100( fm1.height() / 100.0 );
+
+ bool lastDigitIrrelevant0 = true;
+ bool lastDigitIrrelevant1 = true;
+ // get and format the texts
+ for ( region=regions->first();
+ region != 0;
+ region = regions->next() ) {
+ QVariant vValY;
+ if( data->cellCoord( region->row, region->col, vValY, 1 ) ){
+ if( QVariant::String == vValY.type() ){
+ const QString sVal( vValY.toString() );
+ if( !sVal.isEmpty() )
+ region->text = sVal;
+ }else if( QVariant::Double == vValY.type() ){
+ double value( vValY.toDouble() );
+ region->negative = 0.0 > value;
+ double divi( pow( 10.0, params()->dataValuesDivPow10( region->chart ) ) );
+ if ( 1.0 != divi )
+ value /= divi;
+ int digits( params()->dataValuesDigitsBehindComma( region->chart ) );
+ bool autoDigits( KDCHART_DATA_VALUE_AUTO_DIGITS == digits );
+ if( autoDigits ) {
+ if( 10 < digits )
+ digits = 10;
+ } else
+ ( region->chart
+ ? lastDigitIrrelevant1
+ : lastDigitIrrelevant0 ) = false;
+ if( value == KDCHART_NEG_INFINITE )
+ region->text = "-LEMNISKATE";
+ else if( value == KDCHART_POS_INFINITE )
+ region->text = "+LEMNISKATE";
+ else {
+ region->text.setNum( value, 'f', digits );
+ if ( autoDigits && region->text.contains( '.' ) ) {
+ int len = region->text.length();
+ while ( 3 < len
+ && '0' == region->text[ len-1 ]
+ && '.' != region->text[ len-2 ] ) {
+ --len;
+ region->text.truncate( len );
+ }
+ if( '0' != region->text[ len-1 ] )
+ ( region->chart
+ ? lastDigitIrrelevant1
+ : lastDigitIrrelevant0 ) = false;
+ }
+ }
+ }
+ }
+ }
+
+ if ( lastDigitIrrelevant0 || lastDigitIrrelevant1 )
+ for ( region=regions->first();
+ region != 0;
+ region = regions->next() )
+ if ( ( ( lastDigitIrrelevant0 && !region->chart )
+ || ( lastDigitIrrelevant1 && region->chart ) )
+ && region->text.contains( '.' )
+ && ( 2 < region->text.length() ) )
+ region->text.truncate ( region->text.length() - 2 );
+
+
+ // draw the Data Value Texts and calculate the text regions
+ painter->setPen( Qt::black );
+
+ bool allowOverlapping = params()->allowOverlappingDataValueTexts();
+ bool drawThisOne;
+ QRegion lastRegionDone;
+
+ QFontMetrics actFM( painter->fontMetrics() );
+
+ QFont* oldFont = 0;
+ int oldRotation = 0;
+ uint oldChart = UINT_MAX;
+ uint oldDatacolorNo = UINT_MAX;
+ for ( region=regions->first();
+ region != 0;
+ region = regions->next() ) {
+
+ // in loop status saving
+ painter->save();
+
+ if ( region->text.length() ) {
+
+ QVariant vValY;
+ bool zero =
+ data->cellCoord( region->row, region->col, vValY, 1 ) &&
+ QVariant::Double == vValY.type() &&
+ ( 0.0 == vValY.toDouble() || 0 == vValY.toDouble() );
+ uint align( params()->dataValuesAnchorAlign( region->chart,
+ region->negative ) );
+ KDChartParams::ChartType cType = region->chart
+ ? params()->additionalChartType()
+ : params()->chartType();
+
+
+ // these use the bounding rect of region-region:
+ bool bIsAreaChart = KDChartParams::Area == cType;
+ bool rectangular = ( KDChartParams::Bar == cType
+ || KDChartParams::Line == cType
+ || bIsAreaChart
+ || KDChartParams::HiLo == cType
+ || KDChartParams::BoxWhisker == cType );
+
+ // these use the nine anchor points stored in region->points
+ bool circular = ( KDChartParams::Pie == cType
+ || KDChartParams::Ring == cType
+ || KDChartParams::Polar == cType );
+
+
+ KDChartEnums::PositionFlag anchorPos(
+ params()->dataValuesAnchorPosition( region->chart, region->negative ) );
+
+ QPoint anchor(
+ rectangular
+ ? KDChartEnums::positionFlagToPoint( region->rect(), anchorPos )
+ : KDChartEnums::positionFlagToPoint( region->points, anchorPos ) );
+
+ double & fmHeightP100 = region->chart ? fm1HeightP100 : fm0HeightP100;
+
+ int angle = region->startAngle;
+ switch ( anchorPos ) {
+ case KDChartEnums::PosTopLeft:
+ case KDChartEnums::PosCenterLeft:
+ case KDChartEnums::PosBottomLeft:
+ angle += region->angleLen;
+ break;
+ case KDChartEnums::PosTopCenter:
+ case KDChartEnums::PosCenter:
+ case KDChartEnums::PosBottomCenter:
+ angle += region->angleLen / 2;
+ break;
+ /*
+ case KDChartEnums::PosTopRight:
+ case KDChartEnums::PosCenterRight:
+ case KDChartEnums::PosBottomRight:
+ angle += 0;
+ break;
+ */
+ default:
+ break;
+ }
+ double anchorDX( params()->dataValuesAnchorDeltaX( region->chart, region->negative )
+ * fmHeightP100 );
+ double anchorDY( params()->dataValuesAnchorDeltaY( region->chart, region->negative )
+ * fmHeightP100 );
+ if ( circular ) {
+ if ( 0.0 != anchorDY ) {
+ double normAngle = angle / 16;
+ double normAngleRad = DEGTORAD( normAngle );
+ double sinAngle = sin( normAngleRad );
+ QPoint& pM = region->points[ KDChartEnums::PosCenter ];
+ double dX( pM.x() - anchor.x() );
+ double dY( pM.y() - anchor.y() );
+ double radialLen( sinAngle ? dY / sinAngle : dY );
+ double radialFactor( ( radialLen == 0.0 ) ? 0.0 : ( ( radialLen - anchorDY ) / radialLen ) );
+ anchor.setX( static_cast < int > ( pM.x() - dX * radialFactor ) );
+ anchor.setY( static_cast < int > ( pM.y() - dY * radialFactor ) );
+ }
+ } else {
+ anchor.setX( anchor.x() + static_cast < int > ( anchorDX ) );
+ anchor.setY( anchor.y() + static_cast < int > ( anchorDY ) );
+ }
+
+
+ if(anchor.x() < -250){
+ anchor.setX(-250);
+ //qDebug("!! bad negative x position in KDChartPainter::paintDataValues() !!");
+ }
+ if(anchor.y() < -2500){
+ anchor.setY(-2500);
+ //qDebug("!! bad negative y position in KDChartPainter::paintDataValues() !!");
+ }
+
+ int rotation( params()->dataValuesRotation( region->chart,
+ region->negative ) );
+ bool incRotationBy90 = false;
+ if( region->text == "-LEMNISKATE" ||
+ region->text == "+LEMNISKATE" ){
+ if( params()->dataValuesShowInfinite( region->chart ) ){
+ //bool bIsLineChart = KDChartParams::Line == cType;
+ if( region->text == "-LEMNISKATE" )
+ align = Qt::AlignRight + Qt::AlignVCenter;
+ else
+ align = Qt::AlignLeft + Qt::AlignVCenter;
+ if( !rotation )
+ rotation = 90;
+ else
+ incRotationBy90 = true;
+ region->text = " 8 ";
+ }else{
+ region->text = "";
+ }
+ }
+
+ if ( rotation ) {
+ anchor = painter->worldMatrix().map( anchor );
+
+ // Temporary solution for fixing the data labels size
+ // bug when in QPrinter::HighResolution mode:
+ // There seem to be no backdraws by acting like this,
+ // but further investigation is required to detect the
+ // real error in the previous code/
+ if ( KDCHART_SAGGITAL_ROTATION == rotation
+ || KDCHART_TANGENTIAL_ROTATION == rotation ) {
+ rotation = ( KDCHART_TANGENTIAL_ROTATION == rotation
+ ? -1440
+ : 0 )
+ + angle;
+ rotation /= 16;
+ if( incRotationBy90 )
+ rotation += 90;
+ if ( 360 <= rotation )
+ rotation -= 360;
+ else if ( 0 > rotation )
+ rotation += 360;
+ rotation = 360 - rotation;
+ }else if( incRotationBy90 )
+ rotation = (rotation + 90) % 360;
+
+
+ if( rotation != oldRotation ) {
+ painter->rotate( rotation - oldRotation );
+ // Comment this out - zooming and scrolling
+ // oldRotation = rotation;
+ }
+
+ QFont* actFont = region->chart ? &font1 : &font0;
+ if( oldFont != actFont ) {
+ painter->setFont( *actFont );
+ actFM = QFontMetrics( painter->fontMetrics() );
+ // Comment this out - zooming and scrolling
+ //oldFont = actFont;
+ }
+
+ KDDrawTextRegionAndTrueRect infosKDD =
+ KDDrawText::measureRotatedText( painter,
+ rotation,
+ anchor,
+ region->text,
+ 0,
+ align,
+ &actFM,
+ true,
+ true,
+ 5 );
+ //anchor = painter->worldMatrix().map( anchor );
+
+ if( allowOverlapping ) {
+ drawThisOne = true;
+ }else {
+ QRegion sectReg( infosKDD.region.intersect( lastRegionDone ) );
+ drawThisOne = sectReg.isEmpty();
+ }
+ if( drawThisOne ) {
+ lastRegionDone = lastRegionDone.unite( infosKDD.region );
+ region->pTextRegion = new QRegion( infosKDD.region );
+
+ if( params()->dataValuesAutoColor( region->chart ) ) {
+ if( bIsAreaChart ){
+ QColor color( params()->dataColor( region->row ) );
+ /*
+ if( ( (0.0 > anchorDY) && region->negative )
+ || ( (0.0 < anchorDY) && !region->negative ) )
+ painter->setPen(
+ QColor( static_cast < int > ( 255- color.red() ),
+ static_cast < int > ( 255- color.green() ),
+ static_cast < int > ( 255- color.blue() ) ) );
+ else
+ */
+ painter->setPen( color.dark() );
+ }else{
+ if( zero ) {
+ if( oldDatacolorNo != UINT_MAX ) {
+ painter->setPen( Qt::black );
+ oldDatacolorNo = UINT_MAX;
+ }
+ }
+ else {
+ uint datacolorNo = ( KDChartParams::Pie == cType
+ || KDChartParams::Ring == cType )
+ ? region->col
+ : region->row;
+ if( oldDatacolorNo != datacolorNo ) {
+ oldDatacolorNo = datacolorNo;
+ QColor color( params()->dataColor( datacolorNo ) );
+ painter->setPen( QColor(
+ static_cast < int > (255-color.red() ),
+ static_cast < int > (255-color.green()),
+ static_cast < int > (255-color.blue() )));
+ }
+ }
+ }
+ }
+ else if( oldChart != region->chart ) {
+ oldChart = region->chart;
+ painter->setPen( params()->dataValuesColor( region->chart ) );
+ }
+
+ if( params()->optimizeOutputForScreen() ){
+ painter->rotate( -oldRotation );
+ oldRotation = 0;
+ if ( anchor.y() < 0 )
+ anchor.setY( -anchor.y() );
+
+ KDDrawText::drawRotatedText( painter,
+ rotation,
+ anchor,
+ region->text,
+ region->chart ? &font1 : &font0,
+ align,
+ false, // bool showAnchor
+ 0, // const QFontMetrics* fontMet
+ false, // bool noFirstrotate
+ false, // bool noBackrotate
+ 0, // KDDrawTextRegionAndTrueRect* infos
+ true ); // bool optimizeOutputForScreen
+ }else{
+ painter->setPen( params()->dataValuesColor( region->chart ) );
+ //Pending Michel Painting data value labels rotated.
+ painter->drawText( infosKDD.x , infosKDD.y ,
+ infosKDD.width, infosKDD.height,
+ Qt::AlignHCenter | Qt::AlignVCenter | Qt::SingleLine,
+ region->text );
+
+ }
+
+
+ } // if not intersect
+
+ } else {
+
+ // no rotation:
+ painter->rotate( -oldRotation );
+ oldRotation = 0;
+ QFontMetrics & fm = region->chart ? fm1 : fm0;
+ int boundingRectWidth = fm.boundingRect( region->text ).width();
+ int leftBearing = fm.leftBearing( region->text[ 0 ] );
+ const QChar c = region->text.at( region->text.length() - 1 );
+ int rightBearing = fm.rightBearing( c );
+ int w = boundingRectWidth + leftBearing + rightBearing + 1;
+ int h = fm.height(); // ascent + descent + 1
+ int dx = 0;
+ int dy = 0;
+ switch( align & ( Qt::AlignLeft | Qt::AlignRight | Qt::AlignHCenter ) ) {
+ case Qt::AlignRight:
+ dx = -w+1;
+ break;
+ case Qt::AlignHCenter:
+ // Center on the middle of the bounding rect, not
+ // the painted area, because numbers appear centered then
+ dx = -( ( boundingRectWidth / 2 ) + leftBearing );
+ break;
+ }
+ switch( align & ( Qt::AlignTop | Qt::AlignBottom | Qt::AlignVCenter ) ) {
+ case Qt::AlignBottom:
+ dy = -h+1;
+ break;
+ case Qt::AlignVCenter:
+ dy = -h / 2;
+ break;
+ }
+
+ QRegion thisRegion(
+ QRect( anchor.x() + dx, anchor.y() + dy, w, h ) );
+ if( allowOverlapping )
+ drawThisOne = true;
+ else {
+ QRegion sectReg( thisRegion.intersect( lastRegionDone ) );
+ drawThisOne = sectReg.isEmpty();
+ }
+ if( drawThisOne ) {
+ lastRegionDone = lastRegionDone.unite( thisRegion );
+ region->pTextRegion = new QRegion( thisRegion );
+#ifdef DEBUG_TEXT_PAINTING
+ // for testing:
+ QRect rect( region->pTextRegion->boundingRect() );
+ painter->drawRect( rect );
+ painter->setPen( Qt::red );
+ rect.setLeft( rect.left() + leftBearing );
+ rect.setTop( rect.top() + ( fm.height()-fm.boundingRect( region->text ).height() ) /2 );
+ rect.setWidth( fm.boundingRect( region->text ).width() );
+ rect.setHeight( fm.boundingRect( region->text ).height() );
+ painter->drawRect( rect );
+ painter->setPen( Qt::black );
+#endif
+ /*
+
+NOTE: The following will be REMOVED again once
+the layout policy feature is implemented !!!
+
+*/
+ QRect textRect( region->pTextRegion->boundingRect() );
+ if( bIsAreaChart ){
+ QBrush brush( params()->dataValuesBackground( region->chart ) );
+ painter->setBrush( brush );
+ painter->setPen( Qt::NoPen );
+ QRect rect( textRect );
+ rect.moveBy( -2, 0 );
+ rect.setWidth( rect.width() + 4 );
+ painter->drawRect( rect );
+ }
+ painter->setFont( region->chart ? font1 : font0 );
+ if( params()->dataValuesAutoColor( region->chart ) ) {
+ if( bIsAreaChart ){
+ QColor color( params()->dataColor( region->row ) );
+ /*
+ if( ( (0.0 > anchorDY) && region->negative )
+ || ( (0.0 < anchorDY) && !region->negative ) )
+ painter->setPen(
+ QColor( static_cast < int > ( 255- color.red() ),
+ static_cast < int > ( 255- color.green() ),
+ static_cast < int > ( 255- color.blue() ) ) );
+ else
+ */
+ painter->setPen( color.dark() );
+ }else{
+ if( zero )
+ painter->setPen( Qt::black );
+ else {
+ QColor color( params()->dataColor(
+ ( KDChartParams::Pie == params()->chartType()
+ || KDChartParams::Ring == params()->chartType() )
+ ? region->col
+ : region->row ) );
+ painter->setPen( QColor( static_cast < int > ( 255- color.red() ),
+ static_cast < int > ( 255- color.green() ),
+ static_cast < int > ( 255- color.blue() ) ) );
+ }
+ }
+ }else{
+ painter->setPen( params()->dataValuesColor( region->chart ) );
+ }
+
+ painter->drawText( textRect.left(), textRect.top(),
+ textRect.width()+1, textRect.height()+1,
+ Qt::AlignLeft | Qt::AlignTop, region->text );
+
+ }
+
+
+ }
+ }
+ //
+ painter->restore();
+
+ }
+ painter->restore();
+ }
+
+}
+
+
+/**
+ Paints all custom boxes.
+ */
+void KDChartPainter::paintCustomBoxes( QPainter* painter,
+ KDChartDataRegionList* regions )
+{
+ // paint all of the custom boxes AND their surrounding frames+background (if any)
+ bool bGlobalFound;
+ const KDChartParams::KDChartFrameSettings* globalFrameSettings
+ = params()->frameSettings( KDChartEnums::AreasCustomBoxes, bGlobalFound );
+
+ uint idx;
+ for( idx = 0; idx <= params()->maxCustomBoxIdx(); ++idx ) {
+ const KDChartCustomBox * box = params()->customBox( idx );
+ if( box ) {
+ // paint border and background
+ paintArea( painter,
+ KDChartEnums::AreaCustomBoxesBASE + idx,
+ regions,
+ box->dataRow(),
+ box->dataCol(),
+ box->data3rd() );
+ // retrieve frame information
+ bool bIndividualFound;
+ const KDChartParams::KDChartFrameSettings * individualFrameSettings
+ = params()->frameSettings( KDChartEnums::AreaCustomBoxesBASE + idx,
+ bIndividualFound );
+ const KDChartParams::KDChartFrameSettings * settings
+ = bIndividualFound ? individualFrameSettings
+ : bGlobalFound ? globalFrameSettings : 0;
+ // paint content
+ const QPoint anchor( calculateAnchor( *box, regions ) );
+ box->paint( painter,
+ anchor,
+ _areaWidthP1000,
+ _areaHeightP1000,
+ settings ? settings->framePtr() : 0,
+ trueFrameRect( box->trueRect( anchor, _areaWidthP1000, _areaHeightP1000 ),
+ settings ) );
+ }
+ }
+}
+
+
+/**
+ Calculated the top left corner of a custom box.
+ */
+QPoint KDChartPainter::calculateAnchor( const KDChartCustomBox & box,
+ KDChartDataRegionList* regions ) const
+{
+ QPoint pt(0,0);
+
+ // Recursion handling:
+ //
+ // * calculateAnchor() normally calls calculateAreaRect()
+ //
+ // * calculateAreaRect() will in turn calls calculateAnchor() in case of
+ // box.anchorArea() being based on KDChartEnums::AreaCustomBoxesBASE
+ //
+ // This is Ok as long as the recursive call of calculateAnchor() is NOT
+ // intend examination the same box as a previous call.
+ //
+ // Rule:
+ //
+ // A box may be aligned to another box (and the 2nd box may again be
+ // aligned to a 3rd box and so on) but NO CIRCULAR alignment is allowed.
+ //
+ if( !box.anchorBeingCalculated() ) {
+
+ box.setInternalFlagAnchorBeingCalculated( true );
+
+ bool allCustomBoxes;
+ QRect rect( calculateAreaRect( allCustomBoxes,
+ box.anchorArea(),
+ box.dataRow(),
+ box.dataCol(),
+ box.data3rd(),
+ regions ) );
+ if( allCustomBoxes ) {
+ //
+ // Dear user of this library.
+ //
+ // You faced the above error during program runtime?
+ //
+ // The reason for this is that you may NOT use AreasCustomBoxes
+ // as a value for the KDChartCustomBox anchor area.
+ //
+ // This is due to the fact that an anchor area allways must specify one AREA
+ // or some contiguous areas that form an area when combined.
+ // The flag AreasCustomBoxes however specifies a list of custom boxes
+ // that normally do not form a contiguos ares, so they cannot be used as anchor area.
+ //
+ // In order to specify a SINGLE custom box please use AreaCustomBoxBASE+boxId.
+ //
+ }
+ pt = KDChartEnums::positionFlagToPoint( rect, box.anchorPosition() );
+
+ box.setInternalFlagAnchorBeingCalculated( false );
+ }
+
+ return pt;
+}
+
+
+/**
+ Calculated the rectangle covered by an area.
+ NOTE: KDChartCustomBox areas are _not_ calculated here.
+ */
+QRect KDChartPainter::calculateAreaRect( bool & allCustomBoxes,
+ uint area,
+ uint dataRow,
+ uint dataCol,
+ uint /*data3rd*/,
+ KDChartDataRegionList* regions ) const
+{
+ QRect rect(0,0, 0,0);
+ allCustomBoxes = false;
+ uint pos;
+ switch( area ) {
+ case KDChartEnums::AreaData:
+ rect = _dataRect;
+ break;
+ case KDChartEnums::AreaAxes:
+ break;
+ case KDChartEnums::AreaLegend:
+ rect = _legendRect;
+ break;
+ case KDChartEnums::AreaDataAxes:
+ rect = _axesRect;
+ break;
+ case KDChartEnums::AreaDataAxesLegend:
+ rect = _axesRect;
+ if( _legendRect.isValid() ) {
+ if( rect.isValid() )
+ rect = rect.unite( _legendRect );
+ else
+ rect = _legendRect;
+ }
+ break;
+ case KDChartEnums::AreaHeaders: {
+ bool bStart = true;
+ for( pos = KDChartParams::HdFtPosHeadersSTART;
+ KDChartParams::HdFtPosHeadersEND >= pos;
+ ++pos ) {
+ const QRect& r = params()->headerFooterRect( pos );
+ if( r.isValid() ) {
+ if( bStart )
+ rect = r;
+ else
+ rect = rect.unite( r );
+ bStart = false;
+ }
+ }
+ }
+ break;
+ case KDChartEnums::AreaFooters: {
+ bool bStart = true;
+ for( pos = KDChartParams::HdFtPosFootersSTART;
+ KDChartParams::HdFtPosFootersEND >= pos;
+ ++pos ) {
+ const QRect& r = params()->headerFooterRect( pos );
+ if( r.isValid() ) {
+ if( bStart )
+ rect = r;
+ else
+ rect = rect.unite( r );
+ bStart = false;
+ }
+ }
+ }
+ break;
+ case KDChartEnums::AreaDataAxesLegendHeadersFooters: {
+ rect = _axesRect;
+ bool bStart = !rect.isValid();
+ if( _legendRect.isValid() ) {
+ if( bStart )
+ rect = _legendRect;
+ else
+ rect = rect.unite( _legendRect );
+ bStart = false;
+ }
+ for( pos = KDChartParams::HdFtPosSTART;
+ KDChartParams::HdFtPosEND >= pos;
+ ++pos ) {
+ const QRect& r = params()->headerFooterRect( pos );
+ if( r.isValid() ) {
+ if( bStart )
+ rect = r;
+ else
+ rect = rect.unite( r );
+ bStart = false;
+ }
+ }
+ }
+ break;
+ case KDChartEnums::AreaOutermost:
+ rect = _outermostRect;
+ break;
+ case KDChartEnums::AreaInnermost:
+ rect = _innermostRect;
+ break;
+ case KDChartEnums::AreasCustomBoxes:
+ allCustomBoxes = true;
+ break;
+ case KDChartEnums::AreaChartDataRegion:
+ if( regions ) {
+ KDChartDataRegion* current;
+ for ( current = regions->first();
+ current != 0;
+ current = regions->next() ) {
+ if ( current->row == dataRow
+ && current->col == dataCol
+ //
+ // the line below prepared for true 3-dimensional data charts
+ //
+ /* && current->region.thirdDimension == data3rd */ ) {
+ rect = current->rect();
+ break;
+ }
+ }
+ }
+ break;
+ case KDChartEnums::AreaUNKNOWN:
+ break;
+
+ default: {
+ uint maskBASE = KDChartEnums::AreaBASEMask & area;
+ pos = area - maskBASE;
+ if ( KDChartEnums::AreaAxisBASE == maskBASE ) {
+ rect = params()->axisParams( pos ).axisTrueAreaRect();
+ } else if ( KDChartEnums::AreaHdFtBASE == maskBASE ) {
+ rect = params()->headerFooterRect( pos );
+ } else if ( KDChartEnums::AreaCustomBoxesBASE == maskBASE ) {
+ const KDChartCustomBox * box = params()->customBox( pos );
+ if( box ) {
+ rect = box->trueRect( calculateAnchor( *box, regions ),
+ _areaWidthP1000,
+ _areaHeightP1000 );
+ }
+ }
+ }
+ }
+ return rect;
+}
+
+
+QPoint KDChartPainter::pointOnCircle( const QRect& rect, double angle )
+{
+ // There are two ways of computing this: The simple, but slow one
+ // is to use QPointArray.makeArc() and take the first point. The
+ // more advanced, but faster one is to do the trigonometric
+ // computionations ourselves. Since the comments in
+ // QPointArray::makeArc() very often say that the code there is
+ // "poor", we'd better do it outselves...
+
+ double normAngle = angle / 16.0;
+ double normAngleRad = DEGTORAD( normAngle );
+ double cosAngle = cos( normAngleRad );
+ double sinAngle = -sin( normAngleRad );
+ double posX = floor( cosAngle * ( double ) rect.width() / 2.0 + 0.5 );
+ double posY = floor( sinAngle * ( double ) rect.height() / 2.0 + 0.5 );
+ return QPoint( static_cast<int>(posX) + rect.center().x(),
+ static_cast<int>(posY) + rect.center().y() );
+
+}
+
+void KDChartPainter::makeArc( QPointArray& points,
+ const QRect& rect,
+ double startAngle, double angles )
+{
+ double endAngle = startAngle + angles;
+ int rCX = rect.center().x();
+ int rCY = rect.center().y();
+ double rWid2 = ( double ) rect.width() / 2.0;
+ double rHig2 = ( double ) rect.height() / 2.0;
+ int numSteps = static_cast<int>(angles);
+ if( floor( angles ) < angles )
+ ++numSteps;
+ points.resize( numSteps );
+ double angle = startAngle;
+ if( angle < 0.0 )
+ angle += 5760.0;
+ else if( angle >= 5760.0 )
+ angle -= 5760.0;
+ for(int i = 0; i < numSteps; ++i){
+ double normAngle = angle / 16.0;
+ double normAngleRad = DEGTORAD( normAngle );
+ double cosAngle = cos( normAngleRad );
+ double sinAngle = -sin( normAngleRad );
+ double posX = floor( cosAngle * rWid2 + 0.5 );
+ double posY = floor( sinAngle * rHig2 + 0.5 );
+ points[i] = QPoint( ( int ) posX + rCX,
+ ( int ) posY + rCY );
+ if( i+1 >= numSteps-1 )
+ angle = endAngle; // the very last step width may be smaller than 1.0
+ else
+ angle += 1.0;
+ if( angle >= 5760.0 )
+ angle -= 5760.0;
+ }
+}
+
+/**
+ Paints the axes for the chart. The implementation in KDChartPainter
+ does nothing; subclasses for chart types that have axes will
+ provide the appropriate drawing code here. This method serves as a
+ fallback for chart types that do not have axes (like pies).
+
+ \param painter the QPainter onto which the chart should be drawn
+ \param data the data that will be displayed as a chart
+ */
+void KDChartPainter::paintAxes( QPainter* /*painter*/, KDChartTableDataBase* /*data*/ )
+{
+ // This method intentionally left blank.
+}
+
+
+int KDChartPainter::legendTitleVertGap() const
+{
+ return _legendTitleHeight
+ + static_cast < int > ( _legendTitleMetricsHeight * 0.20 );
+}
+
+
+QFont KDChartPainter::trueLegendFont() const
+{
+ QFont trueFont = params()->legendFont();
+ if ( params()->legendFontUseRelSize() ) {
+ const double averageValueP1000 = QMIN(_areaWidthP1000, _areaHeightP1000);//( _areaWidthP1000 + _areaHeightP1000 ) / 2.0;
+ trueFont.setPixelSize(
+ static_cast < int > ( params()->legendFontRelSize() * averageValueP1000 ) );
+ }
+ return trueFont;
+}
+
+
+/**
+ Calculates the size of the rectangle for horizontal legend orientation.
+
+ \param painter the QPainter onto which the chart should be drawn
+ */
+void KDChartPainter::calculateHorizontalLegendSize( QPainter* painter,
+ QSize& size,
+ bool& legendNewLinesStartAtLeft ) const
+{
+
+ legendNewLinesStartAtLeft = false;
+ QRect legendRect( _legendRect );
+ /*
+ * Pending Michel reset the left side before calculating
+ *the new legend position calculation
+ *otherwise we occasionally reach the edge and get a wrong
+ *result
+ */
+
+ legendRect.setLeft( _innermostRect.left() );
+
+ const int em2 = 2 * _legendEMSpace;
+ const int em4 = 4 * _legendEMSpace;
+ const int emDiv2 = static_cast < int > ( _legendEMSpace / 2.0 );
+
+ const int xposHori0 = legendRect.left() + _legendEMSpace;
+
+ int xpos = xposHori0;
+
+ int ypos = legendRect.top() + emDiv2;
+
+ // first paint the title, if any
+ if( _legendTitle )
+ xpos += _legendTitleWidth + em4;
+
+ int maxX = _legendTitleWidth + _legendEMSpace;
+
+ // save the x position: here start the item texts if in horizontal mode
+ int xposHori1 = xpos;
+
+ // add the space of the box plus the space between the box and the text
+ int x2 = xpos + em2;
+
+ // loop over all the datasets, each one has one row in the legend
+ // if its data are to be used in at least one of the charts drawn
+ // *but* only if there is a legend text for it!
+ const int rightEdge = _innermostRect.right()-_legendEMSpace;
+ bool bFirstLFWithTitle = _legendTitle;
+ painter->setFont( trueLegendFont() );
+ QFontMetrics txtMetrics( painter->fontMetrics() );
+ int dataset;
+ for ( dataset = 0; dataset < _numLegendTexts; ++dataset ) {
+ /*
+ if( KDChartParams::DataEntry == params()->chartSourceMode( dataset ) ) {
+ */
+ if( !_legendTexts[ dataset ].isEmpty() ){
+ int txtWidth = txtMetrics.width( _legendTexts[ dataset ] ) + 1;
+ if( x2 + txtWidth > rightEdge ){
+ if( xposHori1 + em2 + txtWidth > rightEdge){
+ xposHori1 = xposHori0;
+ legendNewLinesStartAtLeft = true;
+ }
+ xpos = xposHori1;
+ x2 = xpos + em2;
+ ypos += bFirstLFWithTitle ? legendTitleVertGap() : _legendSpacing;
+ bFirstLFWithTitle = false;
+ }
+ maxX = QMAX(maxX, x2+txtWidth+_legendEMSpace);
+
+ xpos += txtWidth + em4;
+ x2 += txtWidth + em4;
+ }
+ }
+ if( bFirstLFWithTitle )
+ ypos += _legendTitleHeight;
+ else
+ ypos += txtMetrics.height();
+
+ size.setWidth( maxX - legendRect.left() );
+ size.setHeight( ypos + emDiv2 - _legendRect.top() );
+}
+
+
+bool KDChartPainter::mustDrawVerticalLegend() const
+{
+ return
+ params()->legendOrientation() == Qt::Vertical ||
+ params()->legendPosition() == KDChartParams::LegendLeft ||
+ params()->legendPosition() == KDChartParams::LegendRight ||
+ params()->legendPosition() == KDChartParams::LegendTopLeft ||
+ params()->legendPosition() == KDChartParams::LegendTopLeftLeft ||
+ params()->legendPosition() == KDChartParams::LegendTopRight ||
+ params()->legendPosition() == KDChartParams::LegendTopRightRight ||
+ params()->legendPosition() == KDChartParams::LegendBottomLeft ||
+ params()->legendPosition() == KDChartParams::LegendBottomLeftLeft ||
+ params()->legendPosition() == KDChartParams::LegendBottomRight ||
+ params()->legendPosition() == KDChartParams::LegendBottomRightRight;
+}
+
+QFont KDChartPainter::trueLegendTitleFont() const
+{
+ const double averageValueP1000 = QMIN(_areaWidthP1000, _areaHeightP1000);//( _areaWidthP1000 + _areaHeightP1000 ) / 2.0;
+ QFont font( params()->legendTitleFont() );
+ if ( params()->legendTitleFontUseRelSize() ) {
+ int nTxtHeight =
+ static_cast < int > ( params()->legendTitleFontRelSize()
+ * averageValueP1000 );
+ font.setPixelSize( nTxtHeight );
+ // qDebug("l-t-height %i",nTxtHeight);
+ }
+ return font;
+}
+
+/**
+ Paints the legend for the chart. The implementation in KDChartPainter
+ draws a standard legend that should be suitable for most chart
+ types. Subclasses can provide their own implementations.
+
+ \param painter the QPainter onto which the chart should be drawn
+ \param data the data that will be displayed as a chart
+ */
+void KDChartPainter::paintLegend( QPainter* painter,
+ KDChartTableDataBase* /*data*/ )
+{
+ if ( params()->legendPosition() == KDChartParams::NoLegend )
+ return ; // do not draw legend
+
+ const bool bVertical = mustDrawVerticalLegend();
+ painter->save();
+
+
+ bool bFrameFound;
+ params()->frameSettings( KDChartEnums::AreaLegend, bFrameFound );
+
+ // start out with a rectangle around the legend
+ //painter->setPen( QPen( Qt::black, 1 ) );
+ //painter->setBrush( QBrush::NoBrush );
+ //Pending Michel: let us paint the frame at the end of the drawmarker
+ //and draw text process, in case we need to resize it then
+ /*
+ if( !bFrameFound ) {
+ painter->drawRect( _legendRect );
+ }
+ */
+ //qDebug("B: _legendRect:\n %i,%i\n %i,%i", _legendRect.left(),_legendRect.top(),_legendRect.right(),_legendRect.bottom() );
+ //qDebug("B: legendArea():\n %i,%i\n %i,%i\n", _params->legendArea().left(),_params->legendArea().top(),_params->legendArea().right(),_params->legendArea().bottom() );
+
+ const int em2 = 2 * _legendEMSpace;
+ const int em4 = 4 * _legendEMSpace;
+ const int emDiv2 = static_cast < int > ( _legendEMSpace / 2.0 );
+
+ const int xposHori0 = _legendRect.left() + _legendEMSpace;
+
+ int xpos = xposHori0;
+
+ int ypos = _legendRect.top() + emDiv2;
+
+
+
+
+ // first paint the title, if any
+ if( _legendTitle ) {
+ painter->setFont( trueLegendTitleFont() );
+ _legendTitle->draw( painter,
+ xpos,
+ ypos,
+ QRegion( xpos,
+ ypos ,
+ _legendTitleWidth,
+ _legendTitleHeight ),
+ params()->legendTitleTextColor() );
+ if( bVertical )
+ ypos += legendTitleVertGap();
+
+ else
+ xpos += _legendTitleWidth + em4;
+
+ }
+
+ // save the x position: here start the item texts if in horizontal mode
+ const int xposHori1 = _legendNewLinesStartAtLeft ? xposHori0 : xpos;
+
+ // add the space of the box plus the space between the box and the text
+ int x2 = xpos + em2;
+
+ // loop over all the datasets, each one has one row in the legend
+ // if its data are to be used in at least one of the charts drawn
+ // *but* only if there is a legend text for it!
+ const int rightEdge = _legendRect.right();
+ bool bFirstLF = true;
+ painter->setFont( trueLegendFont() );
+ QFontMetrics txtMetrics( painter->fontMetrics() );
+ int dataset;
+ for ( dataset = 0; dataset < _numLegendTexts; ++dataset ) {
+ /*
+ if( KDChartParams::DataEntry == params()->chartSourceMode( dataset ) ) {
+ */
+ if( !_legendTexts[ dataset ].isEmpty() ){
+ int txtWidth = txtMetrics.width( _legendTexts[ dataset ] ) + 1;
+
+ // calculate the width and height for the marker, relative to the font height
+ // we need the legend text to be aligned to the marker
+ // substract a gap.
+ int legHeight = static_cast <int>((txtMetrics.height() - (int)(txtMetrics.height() * 0.1))*0.85);
+
+ //int legHeight = static_cast <int> (_legendRect.height()*0.8);
+
+ if( !bVertical && x2 + txtWidth >= rightEdge ){
+ _legendRect.setHeight( _legendRect.height() + _legendSpacing );
+ xpos = xposHori1;
+ x2 = xpos + em2;
+ ypos += bFirstLF ? legendTitleVertGap() : _legendSpacing;
+ bFirstLF = false;
+ }
+ painter->setBrush( QBrush( params()->dataColor( dataset ),
+ QBrush::SolidPattern ) );
+
+ if( params()->legendShowLines() ){
+ painter->setPen( QPen( params()->dataColor( dataset ), 2,
+ params()->lineStyle( dataset ) ) );
+ painter->drawLine(
+ xpos - emDiv2,
+ ypos + emDiv2 + 1,
+ xpos + static_cast < int > ( _legendEMSpace * 1.5 ),
+ ypos + emDiv2 + 1);
+ }
+
+ /*
+ // draw marker if we have a marker, OR we have no marker and no line
+ if ( params()->lineMarker() ||
+ params()->lineStyle( dataset ) == Qt::NoPen )*/
+ drawMarker( painter,
+ params(),
+ _areaWidthP1000, _areaHeightP1000,
+ _dataRect.x(), _dataRect.y(),
+ params()->lineMarker()
+ ? params()->lineMarkerStyle( dataset )
+ : KDChartParams::LineMarkerSquare,
+ params()->dataColor(dataset),
+ QPoint(xpos + emDiv2,
+ bVertical? ypos + emDiv2: !bFirstLF ?ypos + _legendSpacing:_legendRect.center().y() - (legHeight / 2 ))/*ypos + emDiv2*/ ,
+ 0, 0, 0, NULL, // these params are deadweight here. TODO
+ &legHeight /*&_legendEMSpace*/, &legHeight /*&_legendEMSpace*/,
+ bVertical ? Qt::AlignCenter : (Qt::AlignTop | Qt::AlignHCenter) );
+ /*
+ painter->drawText(_legendRect.topLeft(), "topLeft" );
+ painter->drawText(_legendRect.topLeft().x(), _legendRect.center().y(), "center" );
+ painter->drawText(_legendRect.bottomLeft(), "bottomLeft" );
+ */
+ /* old:
+ painter->setPen( Qt::black );
+ painter->drawRect( xpos,
+ ypos + ( _legendHeight - _legendEMSpace ) / 2,
+ _legendEMSpace,
+ _legendEMSpace );
+ */
+ painter->setPen( params()->legendTextColor() );
+ painter->drawText( x2,
+ bVertical ? ypos : !bFirstLF ? ypos + _legendSpacing : _legendRect.center().y() - (legHeight / 2 ),
+ txtWidth,
+ legHeight,
+ Qt::AlignLeft | Qt::AlignVCenter,
+ _legendTexts[ dataset ] );
+
+ if( bVertical )
+ ypos += _legendSpacing;
+ else {
+ xpos += txtWidth + em4;
+ x2 += txtWidth + em4;
+ }
+ }
+ }
+
+ painter->setPen( QPen( Qt::black, 1 ) );
+ painter->setBrush( QBrush::NoBrush );
+ if( !bFrameFound )
+ painter->drawRect( _legendRect );
+
+
+ painter->restore();
+}
+
+
+void adjustFromTo(int& from, int& to)
+{
+ if( abs(from) > abs(to) ){
+ int n = from;
+ from = to;
+ to = n;
+ }
+}
+
+
+bool KDChartPainter::axesOverlapping( int axis1, int axis2 )
+{
+ KDChartAxisParams::AxisPos basicPos = KDChartAxisParams::basicAxisPos( axis1 );
+ if( basicPos != KDChartAxisParams::basicAxisPos( axis2 ) )
+ // Only axes of the same position can be compared. (e.g. 2 left axes)
+ return false;
+
+ if( KDChartAxisParams::AxisPosLeft != basicPos &&
+ KDChartAxisParams::AxisPosRight != basicPos )
+ // Available space usage only possible for (vertical) ordinate axes.
+ return false;
+
+ int f1 = params()->axisParams( axis1 ).axisUseAvailableSpaceFrom();
+ int t1 = params()->axisParams( axis1 ).axisUseAvailableSpaceTo();
+ int f2 = params()->axisParams( axis2 ).axisUseAvailableSpaceFrom();
+ int t2 = params()->axisParams( axis2 ).axisUseAvailableSpaceTo();
+ adjustFromTo(f1,t1);
+ adjustFromTo(f2,t2);
+ // give these values some meaning
+ // to be able to compare mixed fixed and/or relative figures:
+ const double guessedAxisHeightP1000 = _areaHeightP1000 * 80.0 / 100.0;
+ if(f1 < 0) f1 = static_cast < int > ( f1 * -guessedAxisHeightP1000 );
+ if(t1 < 0) t1 = static_cast < int > ( t1 * -guessedAxisHeightP1000 );
+ if(f2 < 0) f2 = static_cast < int > ( f2 * -guessedAxisHeightP1000 );
+ if(t2 < 0) t2 = static_cast < int > ( t2 * -guessedAxisHeightP1000 );
+ const bool res = (f1 >= f2 && f1 < t2) || (f2 >= f1 && f2 < t1);
+ return res;
+}
+
+
+void internSetAxisArea( KDChartParams* params, int axis,
+ int x0, int y0, int w0, int h0 )
+{
+ // axis may never occupy more than 1000 per mille of the available space
+ int nFrom = QMAX(-1000, params->axisParams( axis ).axisUseAvailableSpaceFrom());
+ int nTo = QMAX(-1000, params->axisParams( axis ).axisUseAvailableSpaceTo());
+ adjustFromTo(nFrom,nTo);
+
+ KDChartAxisParams::AxisPos basicPos = KDChartAxisParams::basicAxisPos( axis );
+ int x, y, w, h;
+ if( KDChartAxisParams::AxisPosBottom == basicPos ||
+ KDChartAxisParams::AxisPosTop == basicPos ){
+
+ // Note: available space usage is ignored for abscissa axes!
+ //
+ //if( nFrom < 0 )
+ // x = x0 + w0*nFrom/-1000;
+ //else
+ // x = x0 + nFrom;
+ //y = y0;
+ //if( nTo < 0 )
+ // w = x0 + w0*nTo/-1000 - x;
+ //else
+ // w = x0 + nTo - x;
+ //h = h0;
+
+ x = x0;
+ y = y0;
+ w = w0;
+ h = h0;
+
+ }else{
+ x = x0;
+ if( nTo < 0 )
+ y = y0 + h0 - h0*nTo/-1000;
+ else
+ y = y0 + h0 - nTo;
+ w = w0;
+ if( nFrom < 0 )
+ h = y0 + h0 - h0*nFrom/-1000 - y;
+ else
+ h = y0 + h0 - nFrom - y;
+ }
+
+ params->setAxisArea( axis,
+ QRect( x,
+ y,
+ w,
+ h ) );
+}
+
+
+/**
+ Paints the header and footers for the chart. The implementation
+ in KDChartPainter draws a standard header that should be suitable
+ for most chart types. Subclasses can provide their own implementations.
+
+ \param painter the QPainter onto which the chart should be drawn
+ \param data the data that will be displayed as a chart
+ */
+void KDChartPainter::paintHeaderFooter( QPainter* painter,
+ KDChartTableDataBase* /*data*/ )
+{
+ const double averageValueP1000 = QMIN(_areaWidthP1000, _areaHeightP1000);//( _areaWidthP1000 + _areaHeightP1000 ) / 2.0;
+
+ painter->save();
+
+ for( int iHdFt = KDChartParams::HdFtPosSTART;
+ iHdFt <= KDChartParams::HdFtPosEND; ++iHdFt ){
+ QString txt( params()->headerFooterText( iHdFt ) );
+ if ( !txt.isEmpty() ) {
+ QFont actFont( params()->headerFooterFont( iHdFt ) );
+ if ( params()->headerFooterFontUseRelSize( iHdFt ) )
+ actFont.setPixelSize( static_cast < int > (
+ params()->headerFooterFontRelSize( iHdFt ) * averageValueP1000 ) );
+ painter->setPen( params()->headerFooterColor( iHdFt ) );
+ painter->setFont( actFont );
+ // Note: The alignment flags used here match the rect calculation
+ // done in KDChartPainter::setupGeometry().
+ // AlignTop is done to ensure that the hd/ft texts of the same
+ // group (e.g. Hd2L and Hd2 and Hd2R) have the same baselines.
+
+ QRect rect( params()->headerFooterRect( iHdFt ) );
+ int dXY = iHdFt < KDChartParams::HdFtPosFootersSTART
+ ? _hdLeading/3
+ : _ftLeading/3;
+ rect.moveBy(dXY, dXY);
+ rect.setWidth( rect.width() -2*dXY +1 );
+ rect.setHeight( rect.height()-2*dXY +1 );
+ painter->drawText( rect,
+ Qt::AlignLeft | Qt::AlignTop | Qt::SingleLine,
+ txt );
+ }
+ }
+ painter->restore();
+}
+
+
+int KDChartPainter::calculateHdFtRects(
+ QPainter* painter,
+ double averageValueP1000,
+ int xposLeft,
+ int xposRight,
+ bool bHeader,
+ int& yposTop,
+ int& yposBottom )
+{
+ int& leading = (bHeader ? _hdLeading : _ftLeading);
+ leading = 0; // pixels between the header (or footer, resp.) text
+ // and the border of the respective Hd/Ft area
+
+ const int rangesCnt = 3;
+ const int ranges[ rangesCnt ]
+ = { bHeader ? KDChartParams::HdFtPosHeaders0START : KDChartParams::HdFtPosFooters0START,
+ bHeader ? KDChartParams::HdFtPosHeaders1START : KDChartParams::HdFtPosFooters1START,
+ bHeader ? KDChartParams::HdFtPosHeaders2START : KDChartParams::HdFtPosFooters2START };
+ const int rangeSize = 3;
+ QFontMetrics* metrics[rangesCnt * rangeSize];
+
+ int i;
+ for( i = 0; i < rangesCnt*rangeSize; ++i )
+ metrics[ i ] = 0;
+
+ int iRange;
+ int iHdFt;
+ for( iRange = 0; iRange < rangesCnt; ++iRange ){
+ for( i = 0; i < rangeSize; ++i ){
+ iHdFt = ranges[iRange] + i;
+ QString txt( params()->headerFooterText( iHdFt ) );
+ if ( !txt.isEmpty() ) {
+ QFont actFont( params()->headerFooterFont( iHdFt ) );
+ if ( params()->headerFooterFontUseRelSize( iHdFt ) ) {
+ actFont.setPixelSize( static_cast < int > (
+ params()->headerFooterFontRelSize( iHdFt ) * averageValueP1000 ) );
+ }
+ painter->setFont( actFont );
+ metrics[ iRange*rangeSize + i ] = new QFontMetrics( painter->fontMetrics() );
+ leading = QMAX( leading, metrics[ iRange*rangeSize + i ]->lineSpacing() / 2 );
+ }
+ }
+ }
+
+ if( bHeader )
+ ++yposTop;//yposTop += leading/3;
+ //else
+ //--yposBottom;//yposBottom -= leading/3;
+
+ int leading23 = leading*2/3 +1;
+
+ for( iRange =
+ bHeader ? 0 : rangesCnt-1;
+ bHeader ? iRange < rangesCnt : iRange >= 0;
+ bHeader ? ++iRange : --iRange ){
+ // Ascents and heights must be looked at to ensure that the hd/ft texts
+ // of the same group (e.g. Hd2L and Hd2 and Hd2R) have equal baselines.
+ int ascents[rangeSize];
+ int heights[rangeSize];
+ int widths[ rangeSize];
+ int maxAscent = 0;
+ int maxHeight = 0;
+ for( i = 0; i < rangeSize; ++i ){
+ iHdFt = ranges[iRange] + i;
+ if ( metrics[ iRange*rangeSize + i ] ) {
+ QFontMetrics& m = *metrics[ iRange*rangeSize + i ];
+ ascents[i] = m.ascent();
+ heights[i] = m.height() + leading23;
+
+ // the following adds two spaces to work around a bug in Qt:
+ // bounding rect sometimes is too small, if using italicized fonts
+ widths[ i] = m.boundingRect( params()->headerFooterText( iHdFt )+" " ).width() + leading23;
+
+ maxAscent = QMAX( maxAscent, ascents[i] );
+ maxHeight = QMAX( maxHeight, heights[i] );
+ }else{
+ heights[i] = 0;
+ }
+ }
+
+ if( !bHeader )
+ yposBottom -= maxHeight;
+
+ for( i = 0; i < rangeSize; ++i ){
+ if( heights[i] ){
+ iHdFt = ranges[iRange] + i;
+ int x1;
+ switch( i ){
+ case 1: x1 = xposLeft+1;
+ break;
+ case 2: x1 = xposRight-widths[i]-1;
+ break;
+ default: x1 = xposLeft + (xposRight-xposLeft-widths[i]) / 2;
+ }
+ ((KDChartParams*)params())->__internalStoreHdFtRect( iHdFt,
+ QRect( x1,
+ bHeader
+ ? yposTop + maxAscent - ascents[i]
+ : yposBottom + maxAscent - ascents[i],
+ widths[ i],
+ heights[i] - 1 ) );
+ }
+ }
+ if( bHeader )
+ yposTop += leading + maxHeight;
+ else
+ yposBottom -= leading;
+ }
+ for( i = 0; i < rangesCnt*rangeSize; ++i )
+ if( metrics[ i ] )
+ delete metrics[ i ];
+ return leading;
+}
+
+
+
+void KDChartPainter::findChartDatasets( KDChartTableDataBase* data,
+ bool paint2nd,
+ uint chart,
+ uint& chartDatasetStart,
+ uint& chartDatasetEnd )
+{
+ chartDatasetStart = 0;
+ chartDatasetEnd = 0;
+ if( params()->neverUsedSetChartSourceMode()
+ || !params()->findDatasets( KDChartParams::DataEntry,
+ KDChartParams::ExtraLinesAnchor,
+ chartDatasetStart,
+ chartDatasetEnd,
+ chart ) ) {
+ uint maxRow, maxRowMinus1;
+ switch ( data->usedRows() ) {
+ case 0:
+ return ;
+ case 1:
+ maxRow = 0;
+ maxRowMinus1 = 0;
+ break;
+ default:
+ maxRow = data->usedRows() - 1;
+ maxRowMinus1 = maxRow;
+ }
+ chartDatasetStart = paint2nd ? maxRow : 0;
+ chartDatasetEnd = paint2nd
+ ? maxRow
+ : ( ( KDChartParams::NoType == params()->additionalChartType() )
+ ? maxRow
+ : maxRowMinus1 );
+
+ }
+}
+
+
+void KDChartPainter::calculateAllAxesRects(
+ QPainter* painter,
+ bool finalPrecision,
+ KDChartTableDataBase* data
+ )
+{
+ const bool bIsAreaChart = KDChartParams::Area == params()->chartType();
+ const bool bMultiRows = KDChartParams::Bar == params()->chartType() &&
+ KDChartParams::BarMultiRows == params()->barChartSubType();
+
+ const int trueWidth = _outermostRect.width();
+ const int trueHeight = _outermostRect.height();
+ const double averageValueP1000 = QMIN(_areaWidthP1000, _areaHeightP1000);//( _areaWidthP1000 + _areaHeightP1000 ) / 2.0;
+
+ // store the axes' 0 offsets
+ int nAxesLeft0 = _axesRect.left() - _outermostRect.left();
+ int nAxesRight0 = _outermostRect.right() - _axesRect.right();
+ int nAxesTop0 = _axesRect.top() - _outermostRect.top();
+ int nAxesBottom0 = _outermostRect.bottom() - _axesRect.bottom();
+ if( bMultiRows ){
+ uint chartDatasetStart, chartDatasetEnd;
+ findChartDatasets( data, false, 0, chartDatasetStart, chartDatasetEnd );
+ const int datasets = chartDatasetEnd - chartDatasetStart + 1;
+ int numValues = 0;
+ if ( params()->numValues() != -1 )
+ numValues = params()->numValues();
+ else
+ numValues = data->usedCols();
+ if( datasets ){
+ const int additionalGapWidth = static_cast < int > ( 1.0 * _axesRect.width() / (9.75*numValues + 4.0*datasets) * 4.0*datasets );
+ nAxesRight0 += additionalGapWidth;
+ nAxesTop0 += static_cast < int > ( additionalGapWidth * 0.52 );
+ //const double widthFactor = additionalGapWidth*1.0 / _axesRect.width();
+ //nAxesTop0 += static_cast < int > ( _axesRect.height() * widthFactor );
+ }
+ }
+ // store the distances to be added to the axes' 0 offsets
+ int nAxesLeftADD =0;
+ int nAxesRightADD =0;
+ int nAxesTopADD =0;
+ int nAxesBottomADD=0;
+
+ // determine whether the axes widths of one side should be added
+ // or their maximum should be used
+ bool bAddLeft = axesOverlapping( KDChartAxisParams::AxisPosLeft,
+ KDChartAxisParams::AxisPosLeft2 );
+ bool bAddRight = axesOverlapping( KDChartAxisParams::AxisPosRight,
+ KDChartAxisParams::AxisPosRight2 );
+ bool bAddTop = axesOverlapping( KDChartAxisParams::AxisPosTop,
+ KDChartAxisParams::AxisPosTop2 );
+ bool bAddBottom = axesOverlapping( KDChartAxisParams::AxisPosBottom,
+ KDChartAxisParams::AxisPosBottom2 );
+ // iterate over all axes
+ uint iAxis;
+ for ( iAxis = 0; iAxis < KDCHART_MAX_AXES; ++iAxis ) {
+ //qDebug( "iAxis %i", iAxis );
+ const KDChartAxisParams& para = params()->axisParams( iAxis );
+ int areaSize = 0;
+
+ if ( para.axisVisible()
+ && KDChartAxisParams::AxisTypeUnknown != para.axisType() ) {
+
+ const KDChartAxisParams::AxisPos
+ basicPos( KDChartAxisParams::basicAxisPos( iAxis ) );
+
+ int areaMin = para.axisAreaMin();
+ int areaMax = para.axisAreaMax();
+ if ( 0 > areaMin )
+ areaMin = static_cast < int > ( -1.0 * averageValueP1000 * areaMin );
+ if ( 0 > areaMax )
+ areaMax = static_cast < int > ( -1.0 * averageValueP1000 * areaMax );
+
+ // make sure areaMin will not be too small
+ // for the label texts and check if there is an axis Title
+ switch ( basicPos ) {
+ case KDChartAxisParams::AxisPosBottom:
+ case KDChartAxisParams::AxisPosTop:
+ if ( para.axisLabelsVisible() ) {
+ int fntHeight;
+ if ( para.axisLabelsFontUseRelSize() )
+ fntHeight = QMAX(static_cast < int > ( para.axisLabelsFontRelSize() * averageValueP1000 ),
+ para.axisLabelsFontMinSize() );
+ else {
+ painter->setFont( para.axisLabelsFont() );
+ QFontMetrics metrics( painter->fontMetrics() );
+ fntHeight = metrics.height();
+ }
+ // adjust text height in case of formatted Date/Time values
+ uint dataDataset, dataDataset2;
+ if( !params()->findDataset( KDChartParams::DataEntry,
+ dataDataset,
+ dataDataset2,
+ KDCHART_ALL_CHARTS ) ) {
+ qDebug( "IMPLEMENTATION ERROR: findDataset( DataEntry, ... ) should *always* return true. (a)" );
+ dataDataset = KDCHART_ALL_DATASETS;
+ }
+ QVariant::Type valType = QVariant::Invalid;
+ const bool dataCellsHaveSeveralCoordinates =
+ (KDCHART_ALL_DATASETS == dataDataset)
+ ? data->cellsHaveSeveralCoordinates( &valType )
+ : data->cellsHaveSeveralCoordinates( dataDataset, dataDataset2, &valType );
+ QString format( para.axisLabelsDateTimeFormat() );
+ if( dataCellsHaveSeveralCoordinates
+ && QVariant::DateTime == valType ){
+ if( KDCHART_AXIS_LABELS_AUTO_DATETIME_FORMAT == format )
+ areaMin = QMAX( areaMin, static_cast < int > ( fntHeight * 6.75 ) );
+ else
+ areaMin = QMAX( areaMin, fntHeight * ( 3 + format.contains("\n") ) );
+ }
+ else
+ areaMin = QMAX( areaMin, fntHeight * 3 );
+ }
+ break;
+ case KDChartAxisParams::AxisPosLeft:
+ case KDChartAxisParams::AxisPosRight:
+ default:
+ break;
+ }
+
+
+ switch ( para.axisAreaMode() ) {
+ case KDChartAxisParams::AxisAreaModeAutoSize:
+ {
+ areaSize = areaMin;
+ switch ( basicPos ) {
+ case KDChartAxisParams::AxisPosBottom:
+ case KDChartAxisParams::AxisPosTop:
+ break;
+ case KDChartAxisParams::AxisPosLeft:
+ case KDChartAxisParams::AxisPosRight:
+ if( finalPrecision ){
+ internal__KDChart__CalcValues& cv = calcVal[iAxis];
+ const int nUsableAxisWidth = static_cast < int > (cv.pTextsW);
+ const KDChartAxisParams & para = params()->axisParams( iAxis );
+ QFont axisLabelsFont( para.axisLabelsFont() );
+ if ( para.axisLabelsFontUseRelSize() ) {
+ axisLabelsFont.setPixelSize( static_cast < int > ( cv.nTxtHeight ) );
+ }
+ painter->setFont( para.axisLabelsFont() );
+ QFontMetrics axisLabelsFontMetrics( painter->fontMetrics() );
+ const int lenEM( axisLabelsFontMetrics.boundingRect("M").width() );
+ const QStringList* labelTexts = para.axisLabelTexts();
+ uint nLabels = ( 0 != labelTexts )
+ ? labelTexts->count()
+ : 0;
+ int maxLabelsWidth = 0;
+ for ( uint i = 0; i < nLabels; ++i )
+ maxLabelsWidth =
+ QMAX( maxLabelsWidth,
+ axisLabelsFontMetrics.boundingRect(*labelTexts->at(i)).width() );
+ if( nUsableAxisWidth < maxLabelsWidth )
+ areaSize = maxLabelsWidth
+ + (para.axisTrueAreaRect().width() - nUsableAxisWidth)
+ + lenEM;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ case KDChartAxisParams::AxisAreaModeMinMaxSize:
+ {
+ qDebug( "Sorry, not implemented: AxisAreaModeMinMaxSize" );
+ }
+
+ //
+ //
+ // F E A T U R E P L A N N E D F O R F U T U R E . . .
+ //
+ //
+
+ // break;
+
+ case KDChartAxisParams::AxisAreaModeFixedSize:
+ {
+ areaSize = areaMax ? QMIN( areaMin, areaMax ) : areaMin;
+ }
+ break;
+ }
+
+ //find out if there is a title box
+ uint idx;
+ int boxSize = 0;
+ for( idx = 0; idx <= params()->maxCustomBoxIdx(); ++idx ) {
+ const KDChartCustomBox * box = params()->customBox( idx );
+ if ( box )
+ if ( box->parentAxisArea() == KDChartAxisParams::AxisPosBottom
+ || box->parentAxisArea() == KDChartAxisParams::AxisPosLeft
+ || box->parentAxisArea() == KDChartAxisParams::AxisPosTop
+ || box->parentAxisArea() == KDChartAxisParams::AxisPosRight )
+ boxSize = box->trueRect(QPoint( 0,0 ), _areaWidthP1000, _areaHeightP1000 ).height();
+ }
+
+ areaSize += boxSize;
+
+ switch ( basicPos ) {
+ case KDChartAxisParams::AxisPosBottom:
+ if( bAddBottom ) {
+ //areaSize += boxSize;
+ nAxesBottomADD += areaSize;
+ }
+ else{
+ // areaSize += boxSize;
+ nAxesBottomADD = QMAX( nAxesBottomADD + boxSize, areaSize );
+ }
+ break;
+ case KDChartAxisParams::AxisPosLeft:
+ if( bAddLeft )
+ nAxesLeftADD += areaSize;
+ else
+ nAxesLeftADD = QMAX( nAxesLeftADD + boxSize, areaSize );
+ break;
+ case KDChartAxisParams::AxisPosTop:
+ if( bAddTop )
+ nAxesTopADD += areaSize;
+ else
+ nAxesTopADD = QMAX( nAxesTopADD + boxSize, areaSize );
+ break;
+ case KDChartAxisParams::AxisPosRight:
+ if( bAddRight )
+ nAxesRightADD += areaSize;
+ else
+ nAxesRightADD = QMAX( nAxesRightADD + boxSize, areaSize );
+ break;
+ default:
+ break;
+ }
+ }
+ // Note: to prevent users from erroneously calling this
+ // function we do *not* provide a wrapper for it
+ // in the KDChartParams class but rather call it
+ // *directly* using a dirty typecast.
+ ( ( KDChartAxisParams& ) para ).setAxisTrueAreaSize( areaSize );
+ }
+ int nMinDistance = static_cast < int > ( 30.0 * averageValueP1000 );
+
+ int nAxesBottom = QMAX( nAxesBottom0 + nAxesBottomADD, nMinDistance );
+
+ // for micro alignment with the X axis, we adjust the Y axis - but not for Area Charts:
+ // otherwise the areas drawn would overwrite the Y axis line.
+ int nAxesLeft = QMAX( nAxesLeft0 + nAxesLeftADD, nMinDistance )
+ - (bIsAreaChart ? 0 : 1);
+
+ int nAxesTop = QMAX( nAxesTop0 + nAxesTopADD, nMinDistance );
+
+ int nAxesRight = QMAX( nAxesRight0 + nAxesRightADD, nMinDistance );
+
+ int nBottom = params()->axisParams( KDChartAxisParams::AxisPosBottom ).axisTrueAreaSize();
+ int nLeft = params()->axisParams( KDChartAxisParams::AxisPosLeft ).axisTrueAreaSize();
+ int nTop = params()->axisParams( KDChartAxisParams::AxisPosTop ).axisTrueAreaSize();
+ int nRight = params()->axisParams( KDChartAxisParams::AxisPosRight ).axisTrueAreaSize();
+ int nBottom2 = params()->axisParams( KDChartAxisParams::AxisPosBottom2 ).axisTrueAreaSize();
+ int nLeft2 = params()->axisParams( KDChartAxisParams::AxisPosLeft2 ).axisTrueAreaSize();
+ int nTop2 = params()->axisParams( KDChartAxisParams::AxisPosTop2 ).axisTrueAreaSize();
+ int nRight2 = params()->axisParams( KDChartAxisParams::AxisPosRight2 ).axisTrueAreaSize();
+
+ internSetAxisArea( _params,
+ KDChartAxisParams::AxisPosBottom,
+ _outermostRect.left() + nAxesLeft,
+ _outermostRect.top() + trueHeight - nAxesBottom,
+ trueWidth - nAxesLeft - nAxesRight + 1,
+ nBottom );
+ internSetAxisArea( _params,
+ KDChartAxisParams::AxisPosLeft,
+ _outermostRect.left() + (bAddLeft ? nAxesLeft0 + nLeft2 : nAxesLeft0),
+ _outermostRect.top() + nAxesTop,
+ nLeft,
+ trueHeight - nAxesTop - nAxesBottom + 1 );
+
+ internSetAxisArea( _params,
+ KDChartAxisParams::AxisPosTop,
+ _outermostRect.left() + nAxesLeft,
+ _outermostRect.top() + (bAddTop ? nAxesTop0 + nTop2 : nAxesTop0),
+ trueWidth - nAxesLeft - nAxesRight + 1,
+ nTop );
+ internSetAxisArea( _params,
+ KDChartAxisParams::AxisPosRight,
+ _outermostRect.left() + trueWidth - nAxesRight,
+ _outermostRect.top() + nAxesTop,
+ nRight,
+ trueHeight - nAxesTop - nAxesBottom + 1 );
+
+ internSetAxisArea( _params,
+ KDChartAxisParams::AxisPosBottom2,
+ _outermostRect.left() + nAxesLeft,
+ _outermostRect.top() + trueHeight - nAxesBottom + (bAddBottom ? nBottom : 0),
+ trueWidth - nAxesLeft - nAxesRight + 1,
+ nBottom2 );
+ internSetAxisArea( _params,
+ KDChartAxisParams::AxisPosLeft2,
+ _outermostRect.left() + nAxesLeft0,
+ _outermostRect.top() + nAxesTop,
+ nLeft2,
+ trueHeight - nAxesTop - nAxesBottom + 1 );
+
+ internSetAxisArea( _params,
+ KDChartAxisParams::AxisPosTop2,
+ _outermostRect.left() + nAxesLeft,
+ _outermostRect.top() + nAxesTop0,
+ trueWidth - nAxesLeft - nAxesRight + 1,
+ nTop2 );
+ internSetAxisArea( _params,
+ KDChartAxisParams::AxisPosRight2,
+ _outermostRect.left() + trueWidth - nAxesRight + (bAddRight ? nRight : 0),
+ _outermostRect.top() + nAxesTop,
+ nRight2,
+ trueHeight - nAxesTop - nAxesBottom + 1 );
+
+ _dataRect = QRect( _outermostRect.left() + nAxesLeft,
+ _outermostRect.top() + nAxesTop,
+ trueWidth - nAxesLeft - nAxesRight + 1,
+ trueHeight - nAxesTop - nAxesBottom + 1 );
+}
+
+
+
+/**
+ This method will be called whenever any parameters that affect
+ geometry have been changed. It will compute the appropriate
+ positions for the various parts of the chart (legend, axes, data
+ area etc.). The implementation in KDChartPainter computes a
+ standard geometry that should be suitable for most chart
+ types. Subclasses can provide their own implementations.
+
+ \param data the data that will be displayed as a chart
+ \param drawRect the position and size of the area where the chart
+ is to be displayed in
+ */
+void KDChartPainter::setupGeometry( QPainter* painter,
+ KDChartTableDataBase* data,
+ const QRect& drawRect )
+{
+ //qDebug("INVOKING: KDChartPainter::setupGeometry()");
+ // avoid recursion from repaint() being called due to params() changed signals...
+ const bool oldBlockSignalsState = params()->signalsBlocked();
+ const_cast < KDChartParams* > ( params() )->blockSignals( true );
+
+ _outermostRect = drawRect;
+
+ int yposTop = _outermostRect.topLeft().y();
+ int xposLeft = _outermostRect.topLeft().x();
+ int yposBottom = _outermostRect.bottomRight().y();
+ int xposRight = _outermostRect.bottomRight().x();
+
+ const int trueWidth = _outermostRect.width();
+ const int trueHeight = _outermostRect.height();
+
+ // Temporary values used to calculate start values xposLeft, yposTop, xposRight, yposBottom.
+ // They will be replaced immediately after these calculations.
+ _areaWidthP1000 = trueWidth / 1000.0;
+ _areaHeightP1000 = trueHeight / 1000.0;
+
+
+ xposLeft += 0 < params()->globalLeadingLeft()
+ ? params()->globalLeadingLeft()
+ : static_cast < int > ( params()->globalLeadingLeft() * -_areaWidthP1000 );
+ yposTop += 0 < params()->globalLeadingTop()
+ ? params()->globalLeadingTop()
+ : static_cast < int > ( params()->globalLeadingTop() * -_areaHeightP1000 );
+ xposRight -= 0 < params()->globalLeadingRight()
+ ? params()->globalLeadingRight()
+ : static_cast < int > ( params()->globalLeadingRight() * -_areaWidthP1000 );
+ yposBottom -= 0 < params()->globalLeadingBottom()
+ ? params()->globalLeadingBottom()
+ : static_cast < int > ( params()->globalLeadingBottom()* -_areaHeightP1000 );
+
+ _innermostRect = QRect( QPoint(xposLeft, yposTop),
+ QPoint(xposRight, yposBottom) );
+
+ _logicalWidth = xposRight - xposLeft;
+ _logicalHeight = yposBottom - yposTop;
+
+ // true values (having taken the global leadings into account)
+ // to be used by all following functions
+ _areaWidthP1000 = _logicalWidth / 1000.0;
+ _areaHeightP1000 = _logicalHeight / 1000.0;
+
+ double averageValueP1000 = QMIN(_areaWidthP1000, _areaHeightP1000);//( _areaWidthP1000 + _areaHeightP1000 ) / 2.0;
+
+ // new code design:
+ // 1. now min-header-leading is text height/2
+ // 2. leading or legendSpacing (whichever is larger)
+ // will be added if legend is below the header(s)
+ // 3. leading will be added between header and data area
+ // in case there is no top legend but grid is to be shown.
+ int headerLineLeading = calculateHdFtRects(
+ painter,
+ averageValueP1000,
+ xposLeft, xposRight,
+ false,
+ yposTop, yposBottom );
+ calculateHdFtRects(
+ painter,
+ averageValueP1000,
+ xposLeft, xposRight,
+ true,
+ yposTop, yposBottom );
+
+ // Calculate legend position. First check whether there is going
+ // to be a legend at all:
+ if ( params()->legendPosition() != KDChartParams::NoLegend ) {
+ // Now calculate the size needed for the legend
+ findLegendTexts( data );
+
+ bool hasLegendTitle = false;
+ if ( !params()->legendTitleText().isEmpty() )
+ hasLegendTitle = true;
+
+ _legendTitleWidth = 0;
+ if( _legendTitle )
+ delete _legendTitle;
+ _legendTitle = 0;
+ if ( hasLegendTitle ) {
+ const QFont font( trueLegendTitleFont() );
+ painter->setFont( font );
+ QFontMetrics legendTitleMetrics( painter->fontMetrics() );
+ _legendTitleMetricsHeight = legendTitleMetrics.height();
+
+ _legendTitle = new KDChartTextPiece( painter,
+ params()->legendTitleText(),
+ font );
+ _legendTitleWidth = _legendTitle->width();
+ _legendTitleHeight = _legendTitle->height();
+ // qDebug("1. _legendTitleHeight %i",_legendTitleHeight);
+ }
+
+ painter->setFont( trueLegendFont() );
+ QFontMetrics legendMetrics( painter->fontMetrics() );
+ _legendSpacing = legendMetrics.lineSpacing();
+ _legendHeight = legendMetrics.height();
+ _legendLeading = legendMetrics.leading();
+
+ _legendEMSpace = legendMetrics.width( 'M' );
+
+ int sizeX = 0;
+ int sizeY = 0;
+
+ for ( int dataset = 0; dataset < _numLegendTexts; dataset++ ) {
+ sizeX = QMAX( sizeX, legendMetrics.width( _legendTexts[ dataset ] ) );
+ if( !_legendTexts[ dataset ].isEmpty() )
+ sizeY += _legendSpacing;
+ }
+ // add space below the legend's bottom line
+ sizeY += _legendEMSpace - _legendLeading;
+ // add space for the legend title if any was set
+ if ( hasLegendTitle )
+ sizeY += legendTitleVertGap();
+
+ // assume 4 em spaces: before the color box, the color box, after the
+ // color box and after the legend text
+ sizeX += ( _legendEMSpace * 4 );
+
+ // We cannot setup the title width earlier as the title does
+ // not have a color box. The two em spaces are before the
+ // color box (where the title does not start yet, it is
+ // left-aligned with the color boxes) and after the title (to
+ // have some space before the boundary line comes).
+ sizeX = QMAX( sizeX, _legendTitleWidth + _legendEMSpace*2 );
+
+ //qDebug("setupGeometry mustDrawVerticalLegend: %s", mustDrawVerticalLegend() ? "YES":"NO ");
+
+ // PENDING Michel: do that after having calculated the position
+ if( !mustDrawVerticalLegend() ){
+ QSize size;
+ calculateHorizontalLegendSize( painter,
+ size,
+ _legendNewLinesStartAtLeft );
+ sizeX = size.width();
+ sizeY = size.height();
+ }
+
+ switch ( params()->legendPosition() ) {
+ case KDChartParams::LegendTop:
+ if ( headerLineLeading )
+ yposTop += QMAX( (int)params()->legendSpacing(), headerLineLeading );
+ _legendRect = QRect( xposLeft + ( (xposRight-xposLeft) - sizeX ) / 2,
+ yposTop, sizeX, sizeY );
+ yposTop = _legendRect.bottom() + params()->legendSpacing();
+ //qDebug("A: _legendRect:\n%i,%i\n%i,%i", _legendRect.left(),_legendRect.top(),_legendRect.right(),_legendRect.bottom() );
+ break;
+ case KDChartParams::LegendBottom:
+ if ( params()->showGrid() )
+ yposTop += headerLineLeading;
+ _legendRect = QRect( xposLeft + ( (xposRight-xposLeft) - sizeX ) / 2,
+ yposBottom - sizeY,
+ sizeX, sizeY );
+ yposBottom = _legendRect.top() - params()->legendSpacing();
+ break;
+ case KDChartParams::LegendLeft:
+ if ( params()->showGrid() )
+ yposTop += headerLineLeading;
+ _legendRect = QRect( xposLeft + 1, ( yposBottom - yposTop - sizeY ) / 2 +
+ yposTop,
+ sizeX, sizeY );
+ xposLeft = _legendRect.right() + params()->legendSpacing();
+ break;
+ case KDChartParams::LegendRight:
+ if ( params()->showGrid() )
+ yposTop += headerLineLeading;
+ _legendRect = QRect( xposRight - sizeX - 1,
+ ( yposBottom - yposTop - sizeY ) / 2 + yposTop,
+ sizeX, sizeY );
+ xposRight = _legendRect.left() - params()->legendSpacing();
+ break;
+ case KDChartParams::LegendTopLeft:
+ if ( headerLineLeading )
+ yposTop += QMAX( (int)params()->legendSpacing(), headerLineLeading );
+ _legendRect = QRect( xposLeft + 1, yposTop, sizeX, sizeY );
+ yposTop = _legendRect.bottom() + params()->legendSpacing();
+ xposLeft = _legendRect.right() + params()->legendSpacing();
+ break;
+ case KDChartParams::LegendTopLeftTop:
+ if ( headerLineLeading )
+ yposTop += QMAX( (int)params()->legendSpacing(), headerLineLeading );
+ _legendRect = QRect( xposLeft + 1, yposTop, sizeX, sizeY );
+ yposTop = _legendRect.bottom() + params()->legendSpacing();
+ break;
+ case KDChartParams::LegendTopLeftLeft:
+ if ( headerLineLeading )
+ yposTop += QMAX( (int)params()->legendSpacing(), headerLineLeading );
+ _legendRect = QRect( xposLeft + 1, yposTop, sizeX, sizeY );
+ xposLeft = _legendRect.right() + params()->legendSpacing();
+ break;
+ case KDChartParams::LegendTopRight:
+ if ( headerLineLeading )
+ yposTop += QMAX( (int)params()->legendSpacing(), headerLineLeading );
+ _legendRect = QRect( xposRight - sizeX - 1,
+ yposTop, sizeX, sizeY );
+ yposTop = _legendRect.bottom() + params()->legendSpacing();
+ xposRight = _legendRect.left() - params()->legendSpacing();
+ break;
+ case KDChartParams::LegendTopRightTop:
+ if ( headerLineLeading )
+ yposTop += QMAX( (int)params()->legendSpacing(), headerLineLeading );
+ _legendRect = QRect( xposRight - sizeX - 1,
+ yposTop, sizeX, sizeY );
+ yposTop = _legendRect.bottom() + params()->legendSpacing();
+ break;
+ case KDChartParams::LegendTopRightRight:
+ if ( headerLineLeading )
+ yposTop += QMAX( (int)params()->legendSpacing(), headerLineLeading );
+ _legendRect = QRect( xposRight - sizeX - 1,
+ yposTop, sizeX, sizeY );
+ xposRight = _legendRect.left() - params()->legendSpacing();
+ break;
+ case KDChartParams::LegendBottomLeft:
+ if ( params()->showGrid() )
+ yposTop += headerLineLeading;
+ _legendRect = QRect( xposLeft + 1, yposBottom - sizeY, sizeX, sizeY );
+ yposBottom = _legendRect.top() - params()->legendSpacing();
+ xposLeft = _legendRect.right() + params()->legendSpacing();
+ break;
+ case KDChartParams::LegendBottomLeftBottom:
+ if ( params()->showGrid() )
+ yposTop += headerLineLeading;
+ _legendRect = QRect( xposLeft + 1, yposBottom - sizeY, sizeX, sizeY );
+ yposBottom = _legendRect.top() - params()->legendSpacing();
+ break;
+ case KDChartParams::LegendBottomLeftLeft:
+ if ( params()->showGrid() )
+ yposTop += headerLineLeading;
+ _legendRect = QRect( xposLeft + 1, yposBottom - sizeY, sizeX, sizeY );
+ xposLeft = _legendRect.right() + params()->legendSpacing();
+ break;
+ case KDChartParams::LegendBottomRight:
+ if ( params()->showGrid() )
+ yposTop += headerLineLeading;
+ _legendRect = QRect( xposRight - sizeX - 1,
+ yposBottom - sizeY, sizeX, sizeY );
+ yposBottom = _legendRect.top() - params()->legendSpacing();
+ xposRight = _legendRect.left() - params()->legendSpacing();
+ break;
+ case KDChartParams::LegendBottomRightBottom:
+ if ( params()->showGrid() )
+ yposTop += headerLineLeading;
+ _legendRect = QRect( xposRight - sizeX - 1,
+ yposBottom - sizeY, sizeX, sizeY );
+ yposBottom = _legendRect.top() - params()->legendSpacing();
+ break;
+ case KDChartParams::LegendBottomRightRight:
+ if ( params()->showGrid() )
+ yposTop += headerLineLeading;
+ _legendRect = QRect( xposRight - sizeX - 1,
+ yposBottom - sizeY, sizeX, sizeY );
+ xposRight = _legendRect.left() - params()->legendSpacing();
+ break;
+ default:
+ // Should not be able to happen
+ qDebug( "KDChart: Unknown legend position" );
+ }
+ _params->setLegendArea( _legendRect );
+
+ }else{
+ _params->setLegendArea( QRect(QPoint(0,0), QSize(0,0)) );
+ }
+
+
+ _axesRect = QRect( QPoint(xposLeft, yposTop), QPoint(xposRight, yposBottom) );
+
+ // important rule: do *not* calculate axes areas for Polar charts!
+ // (even if left and bottom axes might be set active)
+ if( KDChartParams::Polar == params()->chartType() ) {
+ _dataRect = _axesRect;
+ } else {
+ // 1st step: make a preliminary approximation of the axes sizes,
+ // as a basis of following label texts calculation
+ calculateAllAxesRects( painter, false, data );
+ // 2nd step: calculate all labels (preliminary data, will be
+ // overwritten by KDChartAxesPainter)
+ // to find out the longest possible axis labels
+ double dblDummy;
+ if( calculateAllAxesLabelTextsAndCalcValues(
+ painter,
+ data,
+ _areaWidthP1000,
+ _areaHeightP1000,
+ dblDummy ) )
+ // 3rd step: calculate the _true_ axes rects based upon
+ // the preliminary axes labels
+ calculateAllAxesRects( painter, true, data );
+ }
+ _params->setDataArea( _dataRect );
+
+ const_cast < KDChartParams* > ( params() )->blockSignals( oldBlockSignalsState );
+}
+
+
+/**
+ This method implements the algorithm to find the texts for the legend.
+ */
+void KDChartPainter::findLegendTexts( KDChartTableDataBase* data )
+{
+ uint dataset;
+ QVariant vValY;
+ switch ( params()->legendSource() ) {
+ case KDChartParams::LegendManual: {
+ // The easiest case: Take manually set strings, no matter whether any
+ // have been set.
+ _numLegendTexts = numLegendFallbackTexts( data );
+ for ( dataset = 0; dataset < static_cast<uint>(_numLegendTexts); dataset++ )
+ _legendTexts[ dataset ] = params()->legendText( dataset );
+ break;
+ }
+ case KDChartParams::LegendFirstColumn: {
+ // Take whatever is in the first column
+ for ( dataset = 0; dataset < data->usedRows(); dataset++ ){
+ if( data->cellCoord( dataset, 0, vValY, 1 ) ){
+ if( QVariant::String == vValY.type() )
+ _legendTexts[ dataset ] = vValY.toString();
+ else
+ _legendTexts[ dataset ] = "";
+ }
+ }
+ _numLegendTexts = data->usedRows();
+ break;
+ }
+ case KDChartParams::LegendAutomatic: {
+ // First, try the first row
+ bool notfound = false;
+ _numLegendTexts = numLegendFallbackTexts( data ); // assume this for cleaner
+ // code below
+ for ( dataset = 0; dataset < data->usedRows(); dataset++ ) {
+ if( data->cellCoord( dataset, 0, vValY, 1 ) ){
+ if( QVariant::String == vValY.type() )
+ _legendTexts[ dataset ] = vValY.toString();
+ else
+ _legendTexts[ dataset ] = "";
+ if( _legendTexts[ dataset ].isEmpty() ){
+ notfound = true;
+ break;
+ }
+ }
+ }
+
+ // If there were no entries for all the datasets, use the manually set
+ // texts, and resort to Series 1, Series 2, ... where nothing has been
+ // set.
+ if ( notfound ) {
+ for ( dataset = 0; dataset < numLegendFallbackTexts( data );
+ dataset++ ) {
+ _legendTexts[ dataset ] = params()->legendText( dataset );
+ if ( _legendTexts[ dataset ].isEmpty() || _legendTexts[ dataset ].isNull() ) {
+ _legendTexts[ dataset ] = fallbackLegendText( dataset );
+ // there
+ _numLegendTexts = numLegendFallbackTexts( data );
+ }
+ }
+ }
+ break;
+ }
+ default:
+ // Should not happen
+ qDebug( "KDChart: Unknown legend source" );
+ }
+}
+
+
+/**
+ This method provides a fallback legend text for the specified
+ dataset, if there was no other way to determine a legend text, but
+ a legend should be shown nevertheless. The default is to return
+ "Series" plus a dataset number (with datasets starting at 1 for
+ this purpose; inherited painter implementations can override this.
+
+ This method is only used when automatic legends are used, because
+ manual and first-column legends do not need fallback texts.
+
+ \param uint dataset the dataset number for which to generate a
+ fallback text
+ \return the fallback text to use for describing the specified
+ dataset in the legend
+ */
+QString KDChartPainter::fallbackLegendText( uint dataset ) const
+{
+ return QObject::tr( "Series " ) + QString::number( dataset + 1 );
+}
+
+
+/**
+ This methods returns the number of elements to be shown in the
+ legend in case fallback texts are used. By default, this will be
+ the number of datasets, but specialized painters can override this
+ (e.g., painters that draw charts that can only display one dataset
+ will return the number of values instead).
+
+ This method is only used when automatic legends are used, because
+ manual and first-column legends do not need fallback texts.
+
+ \return the number of fallback texts to use
+ */
+uint KDChartPainter::numLegendFallbackTexts( KDChartTableDataBase* data ) const
+{
+ return data->usedRows();
+}
+
+
+/**
+ Draws the marker for one data point according to the specified style, color, size.
+
+ \param painter the painter to draw on
+ \param style what kind of marker is drawn (square, diamond, circle, ...)
+ \param color the color in which to draw the marker
+ \param p the center of the marker
+ \param size the width and height of the marker: both values must be positive.
+ */
+void KDChartPainter::drawMarker( QPainter* painter,
+ int style,
+ const QColor& color,
+ const QPoint& p,
+ const QSize& size,
+ uint align )
+{
+ int width = size.width();
+ int height = size.height();
+ drawMarker( painter,
+ 0,
+ 0.0, 0.0,
+ 0,0,
+ style,
+ color,
+ p,
+ 0,0,0,
+ 0,
+ &width,
+ &height,
+ align );
+}
+
+
+/**
+ Draws the marker for one data point according to the specified style.
+
+ \param painter the painter to draw on
+ \param style what kind of marker is drawn (square, diamond, circle, ...)
+ \param color the color in which to draw the marker
+ \param p the center of the marker
+ \param dataset the dataset which this marker represents
+ \param value the value which this marker represents
+ \param regions a list of regions for data points, a new region for the new
+ marker will be appended to this list if it is not 0
+
+ \return pointer to the KDChartDataRegion that was appended to the regions list,
+ or zero if if parameter regions was zero
+ */
+KDChartDataRegion* KDChartPainter::drawMarker( QPainter* painter,
+ const KDChartParams* params,
+ double areaWidthP1000,
+ double areaHeightP1000,
+ int deltaX,
+ int deltaY,
+ int style,
+ const QColor& color,
+ const QPoint& _p,
+ uint dataset, uint value, uint chart,
+ KDChartDataRegionList* regions,
+ int* width,
+ int* height,
+ uint align )
+{
+ KDChartDataRegion* datReg = 0;
+ const double areaSizeP1000 = QMIN(areaWidthP1000, areaHeightP1000);
+ int xsize = width ? *width : (params ? params->lineMarkerSize().width() : 12);
+ if( 0 > xsize )
+ xsize = static_cast < int > (xsize * -areaSizeP1000);
+ int ysize = height ? *height : (params ? params->lineMarkerSize().height() : 12);
+ if( 0 > ysize )
+ ysize = static_cast < int > (ysize * -areaSizeP1000);
+ if( KDChartParams::LineMarkerCross != style ){
+ xsize = QMAX( xsize, 4 );
+ ysize = QMAX( ysize, 4 );
+ }
+ uint xsize2 = xsize / 2;
+ uint ysize2 = ysize / 2;
+ uint xsize4 = xsize / 4;
+ uint ysize4 = ysize / 4;
+ uint xsize6 = xsize / 6;
+ uint ysize6 = ysize / 6;
+ painter->setPen( color );
+ const uint xysize2 = QMIN( xsize2, ysize2 );
+
+ int x = _p.x();
+ int y = _p.y();
+ if( align & Qt::AlignLeft )
+ x += xsize2;
+ else if( align & Qt::AlignRight )
+ x -= xsize2;
+ if( align & Qt::AlignTop )
+ y += ysize2;
+ else if( align & Qt::AlignBottom )
+ y -= ysize2;
+ const QPoint p(x, y);
+
+ switch ( style ) {
+ case KDChartParams::LineMarkerSquare: {
+ const QPen oldPen( painter->pen() );
+ const QBrush oldBrush( painter->brush() );
+ painter->setBrush( color );
+ painter->setPen( color );
+ QRect rect( QPoint( p.x() - xsize2, p.y() - ysize2 ), QPoint( p.x() + xsize2, p.y() + ysize2 ) );
+ painter->drawRect( rect );
+ // Don't use rect for drawing after this!
+ rect.moveBy( deltaX, deltaY );
+ if ( regions ){
+ datReg =
+ new KDChartDataRegion(
+ dataset, value,
+ chart, rect );
+ regions->append( datReg );
+ }
+ painter->setPen( oldPen );
+ painter->setBrush( oldBrush );
+ break;
+ }
+ case KDChartParams::LineMarkerDiamond:{
+ const QBrush oldBrush( painter->brush() );
+ painter->setBrush( color );
+ QPointArray points( 4 );
+ points.setPoint( 0, p.x() - xsize2, p.y() );
+ points.setPoint( 1, p.x(), p.y() - ysize2 );
+ points.setPoint( 2, p.x() + xsize2, p.y() );
+ points.setPoint( 3, p.x(), p.y() + ysize2 );
+ painter->drawPolygon( points );
+ // Don't use points for drawing after this!
+ points.translate( deltaX, deltaY );
+ if ( regions ){
+ datReg = new KDChartDataRegion(
+ dataset, value,
+ chart, points );
+ regions->append( datReg );
+ }
+ painter->setBrush( oldBrush );
+ break;
+ }
+ case KDChartParams::LineMarker1Pixel: {
+ QRect rect( p, p );
+ painter->drawRect( rect );
+ // Don't use rect for drawing after this!
+ rect.moveBy( deltaX, deltaY );
+ if ( regions ){
+ datReg = new KDChartDataRegion(
+ dataset, value,
+ chart, rect );
+ regions->append( datReg );
+ }
+ break;
+ }
+ case KDChartParams::LineMarker4Pixels:{
+ QRect rect( p, QPoint( p.x()+1, p.y()+1 ) );
+ painter->drawRect( rect );
+ // Don't use rect for drawing after this!
+ rect.moveBy( deltaX, deltaY );
+ if ( regions ){
+ datReg = new KDChartDataRegion(
+ dataset, value,
+ chart, rect );
+ regions->append( datReg );
+ }
+ break;
+ }
+ case KDChartParams::LineMarkerRing: {
+ const QPen oldPen( painter->pen() );
+ painter->setPen( QPen( color, QMIN(xsize4, ysize4) ) );
+ const QBrush oldBrush( painter->brush() );
+ painter->setBrush( Qt::NoBrush );
+ painter->drawEllipse( p.x() - xsize2, p.y() - ysize2, xsize, ysize );
+ if ( regions ) {
+ QPointArray points;
+ points.makeEllipse( p.x() - xsize2, p.y() - ysize2, xsize, ysize );
+ // Don't use points for drawing after this!
+ points.translate( deltaX, deltaY );
+ if( points.size() > 0 ){
+ datReg = new KDChartDataRegion(
+ dataset, value,
+ chart, points );
+ regions->append( datReg );
+ }
+ }
+ painter->setBrush( oldBrush );
+ painter->setPen( oldPen );
+ break;
+ }
+ case KDChartParams::LineMarkerCross: {
+ const QPen oldPen( painter->pen() );
+ painter->setPen( color );
+ const QBrush oldBrush( painter->brush() );
+ painter->setBrush( color );
+ int numPoints = (ysize && xsize) ? 12 : 4;
+ QPointArray points( numPoints );
+ if( ysize && xsize ){
+ points.setPoint( 0, p.x() - xsize6, p.y() - ysize6 );
+ points.setPoint( 1, p.x() - xsize6, p.y() - ysize2 );
+ points.setPoint( 2, p.x() + xsize6, p.y() - ysize2 );
+ points.setPoint( 3, p.x() + xsize6, p.y() - ysize6 );
+ points.setPoint( 4, p.x() + xsize2, p.y() - ysize6 );
+ points.setPoint( 5, p.x() + xsize2, p.y() + ysize6 );
+ points.setPoint( 6, p.x() + xsize6, p.y() + ysize6 );
+ points.setPoint( 7, p.x() + xsize6, p.y() + ysize2 );
+ points.setPoint( 8, p.x() - xsize6, p.y() + ysize2 );
+ points.setPoint( 9, p.x() - xsize6, p.y() + ysize6 );
+ points.setPoint(10, p.x() - xsize2, p.y() + ysize6 );
+ points.setPoint(11, p.x() - xsize2, p.y() - ysize6 );
+ }else if( ysize ){
+ points.setPoint( 0, p.x() - ysize6, p.y() - ysize2 );
+ points.setPoint( 1, p.x() + ysize6, p.y() - ysize2 );
+ points.setPoint( 2, p.x() + ysize6, p.y() + ysize2 );
+ points.setPoint( 3, p.x() - ysize6, p.y() + ysize2 );
+ }else{
+ points.setPoint( 0, p.x() - xsize2, p.y() - xsize6 );
+ points.setPoint( 1, p.x() + xsize2, p.y() - xsize6 );
+ points.setPoint( 2, p.x() + xsize2, p.y() + xsize6 );
+ points.setPoint( 3, p.x() - xsize2, p.y() + xsize6 );
+ }
+ painter->drawPolygon( points );
+ // Don't use points for drawing after this!
+ points.translate( deltaX, deltaY );
+ if( regions ){
+ datReg = new KDChartDataRegion(
+ dataset, value,
+ chart, points );
+ regions->append( datReg );
+ }
+ painter->setBrush( oldBrush );
+ painter->setPen( oldPen );
+ break;
+ }
+ case KDChartParams::LineMarkerFastCross: {
+ const QPen oldPen( painter->pen() );
+ painter->setPen( color );
+ painter->drawLine( QPoint(p.x() - xysize2, p.y()),
+ QPoint(p.x() + xysize2, p.y()) );
+ painter->drawLine( QPoint(p.x(), p.y() - xysize2),
+ QPoint(p.x(), p.y() + xysize2) );
+ QRect rect( QPoint( p.x() - 2, p.y() - 2 ),
+ QPoint( p.x() + 2, p.y() + 2 ) );
+ // Don't use rect for drawing after this!
+ rect.moveBy( deltaX, deltaY );
+ if ( regions ){
+ datReg =
+ new KDChartDataRegion(
+ dataset, value,
+ chart, rect );
+ regions->append( datReg );
+ }
+ painter->setPen( oldPen );
+ break;
+ }
+ case KDChartParams::LineMarkerCircle:
+ default: {
+ const QBrush oldBrush( painter->brush() );
+ painter->setBrush( color );
+ painter->drawEllipse( p.x() - xsize2, p.y() - ysize2, xsize, ysize );
+ if ( regions ) {
+ QPointArray points;
+ points.makeEllipse( p.x() - xsize2, p.y() - ysize2, xsize, ysize );
+ // Don't use points for drawing after this!
+ points.translate( deltaX, deltaY );
+ if( points.size() > 0 ){
+ datReg = new KDChartDataRegion(
+ dataset, value,
+ chart, points );
+ regions->append( datReg );
+ }
+ }
+ painter->setBrush( oldBrush );
+ }
+ }
+ return datReg;
+}
+
+
+void KDChartPainter::drawExtraLinesAndMarkers(
+ KDChartPropertySet& propSet,
+ const QPen& defaultPen,
+ const KDChartParams::LineMarkerStyle& defaultMarkerStyle,
+ int myPointX,
+ int myPointY,
+ QPainter* painter,
+ const KDChartAxisParams* abscissaPara,
+ const KDChartAxisParams* ordinatePara,
+ const double areaWidthP1000,
+ const double areaHeightP1000,
+ bool bDrawInFront )
+{
+
+ // we can safely call the following functions and ignore their
+ // return values since they will touch the parameters' values
+ // if the propSet *contains* corresponding own values only.
+ int iDummy;
+ uint extraLinesAlign = 0;
+ if( propSet.hasOwnExtraLinesAlign( iDummy, extraLinesAlign )
+ && ( extraLinesAlign
+ & ( Qt::AlignLeft | Qt::AlignRight | Qt::AlignHCenter |
+ Qt::AlignTop | Qt::AlignBottom | Qt::AlignVCenter ) ) ){
+ bool extraLinesInFront = false;
+ propSet.hasOwnExtraLinesInFront( iDummy, extraLinesInFront );
+ if( bDrawInFront == extraLinesInFront ){
+ const double areaSizeP1000 = QMIN(areaWidthP1000, areaHeightP1000);
+ int extraLinesLength = -20;
+ int extraLinesWidth = defaultPen.width();
+ QColor extraLinesColor = defaultPen.color();
+ Qt::PenStyle extraLinesStyle = defaultPen.style();
+ uint extraMarkersAlign = 0;
+ propSet.hasOwnExtraLinesLength( iDummy, extraLinesLength );
+ propSet.hasOwnExtraLinesWidth( iDummy, extraLinesWidth );
+ propSet.hasOwnExtraLinesColor( iDummy, extraLinesColor );
+ propSet.hasOwnExtraLinesStyle( iDummy, extraLinesStyle );
+ const int horiLenP2 = (0 > extraLinesLength)
+ ? static_cast<int>(areaWidthP1000 * extraLinesLength) / 2
+ : extraLinesLength / 2;
+ const int vertLenP2 = (0 > extraLinesLength)
+ ? static_cast<int>(areaHeightP1000 * extraLinesLength) / 2
+ : extraLinesLength / 2;
+ // draw the extra line(s)
+ QPoint pL( (Qt::AlignLeft == (extraLinesAlign & Qt::AlignLeft))
+ ? 0
+ : (Qt::AlignHCenter == (extraLinesAlign & Qt::AlignHCenter))
+ ? myPointX - horiLenP2
+ : myPointX,
+ myPointY );
+ QPoint pR( (Qt::AlignRight == (extraLinesAlign & Qt::AlignRight))
+ ? abscissaPara->axisTrueAreaRect().width()
+ : (Qt::AlignHCenter == (extraLinesAlign & Qt::AlignHCenter))
+ ? myPointX + horiLenP2
+ : myPointX,
+ myPointY );
+ QPoint pT( myPointX,
+ (Qt::AlignTop == (extraLinesAlign & Qt::AlignTop))
+ ? 0
+ : (Qt::AlignVCenter == (extraLinesAlign & Qt::AlignVCenter))
+ ? myPointY - vertLenP2
+ : myPointY );
+ QPoint pB( myPointX,
+ (Qt::AlignBottom == (extraLinesAlign & Qt::AlignBottom))
+ ? ordinatePara->axisTrueAreaRect().height()
+ : (Qt::AlignVCenter == (extraLinesAlign & Qt::AlignVCenter))
+ ? myPointY + vertLenP2
+ : myPointY );
+ const QPen extraPen( extraLinesColor,
+ 0 > extraLinesWidth
+ ? static_cast < int > ( areaSizeP1000 * -extraLinesWidth )
+ : extraLinesWidth,
+ extraLinesStyle );
+ const QPen oldPen( painter->pen() );
+ painter->setPen( extraPen );
+ if( extraLinesAlign & ( Qt::AlignLeft | Qt::AlignRight | Qt::AlignHCenter ) )
+ painter->drawLine( pL, pR );
+ if( extraLinesAlign & ( Qt::AlignTop | Qt::AlignBottom | Qt::AlignVCenter ) )
+ painter->drawLine( pT, pB );
+ painter->setPen( oldPen );
+ // draw the marker(s) of the extra line(s)
+ propSet.hasOwnExtraMarkersAlign( iDummy, extraMarkersAlign );
+ if( extraMarkersAlign
+ & ( Qt::AlignLeft | Qt::AlignRight |
+ Qt::AlignTop | Qt::AlignBottom ) ){
+ QSize extraMarkersSize = params()->lineMarkerSize();
+ QColor extraMarkersColor = extraLinesColor;
+ int extraMarkersStyle = defaultMarkerStyle;
+ propSet.hasOwnExtraMarkersSize( iDummy, extraMarkersSize );
+ propSet.hasOwnExtraMarkersColor( iDummy, extraMarkersColor );
+ propSet.hasOwnExtraMarkersStyle( iDummy, extraMarkersStyle );
+ // draw the extra marker(s)
+ int w = extraMarkersSize.width();
+ int h = extraMarkersSize.height();
+ if( w < 0 )
+ w = static_cast < int > (w * -areaSizeP1000);
+ if( h < 0 )
+ h = static_cast < int > (h * -areaSizeP1000);
+ if( extraMarkersAlign & Qt::AlignLeft )
+ drawMarker( painter,
+ params(),
+ _areaWidthP1000, _areaHeightP1000,
+ _dataRect.x(), _dataRect.y(),
+ (KDChartParams::LineMarkerStyle)extraMarkersStyle,
+ extraMarkersColor,
+ pL,
+ 0, 0, 0, 0,
+ &w, &h,
+ Qt::AlignCenter );
+ if( extraMarkersAlign & Qt::AlignRight )
+ drawMarker( painter,
+ params(),
+ _areaWidthP1000, _areaHeightP1000,
+ _dataRect.x(), _dataRect.y(),
+ (KDChartParams::LineMarkerStyle)extraMarkersStyle,
+ extraMarkersColor,
+ pR,
+ 0, 0, 0, 0,
+ &w, &h,
+ Qt::AlignCenter );
+ if( extraMarkersAlign & Qt::AlignTop )
+ drawMarker( painter,
+ params(),
+ _areaWidthP1000, _areaHeightP1000,
+ _dataRect.x(), _dataRect.y(),
+ (KDChartParams::LineMarkerStyle)extraMarkersStyle,
+ extraMarkersColor,
+ pT,
+ 0, 0, 0, 0,
+ &w, &h,
+ Qt::AlignCenter );
+ if( extraMarkersAlign & Qt::AlignBottom )
+ drawMarker( painter,
+ params(),
+ _areaWidthP1000, _areaHeightP1000,
+ _dataRect.x(), _dataRect.y(),
+ (KDChartParams::LineMarkerStyle)extraMarkersStyle,
+ extraMarkersColor,
+ pB,
+ 0, 0, 0, 0,
+ &w, &h,
+ Qt::AlignCenter );
+ }
+ }
+ }
+}
+
+
diff --git a/libkdchart/KDChartPainter.h b/libkdchart/KDChartPainter.h
new file mode 100644
index 0000000..a93ef7d
--- /dev/null
+++ b/libkdchart/KDChartPainter.h
@@ -0,0 +1,296 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTPAINTER_H__
+#define __KDCHARTPAINTER_H__
+
+#include <qmap.h>
+#include <qrect.h>
+#include <qdatetime.h>
+#include <qregion.h>
+#include <qstring.h>
+
+#include "KDChartGlobal.h"
+#include "KDChartUnknownTypeException.h"
+#include "KDChartNotEnoughSpaceException.h"
+#include "KDChartTable.h"
+#include "KDChartDataRegion.h"
+#include "KDChartParams.h"
+
+class KDChartTableDataBase;
+class KDChartCustomBox;
+class KDChartTextPiece;
+class KDChartPropertySet;
+class KDChartAxisParams;
+class QPainter;
+
+
+struct internal__KDChart__CalcValues {
+ bool processThisAxis;
+ bool bSteadyCalc;
+ bool bLogarithmic;
+ bool bDecreasing;
+ KDChartAxisParams::AxisPos basicPos;
+ QPoint orig;
+ QPoint dest;
+ double pXDeltaFactor;
+ double pYDeltaFactor;
+ double pXDelimDeltaFaktor;
+ double pYDelimDeltaFaktor;
+ double nSubDelimFactor;
+ double pDelimDelta;
+ double nTxtHeight;
+ double pTextsX;
+ double pTextsY;
+ double pTextsW;
+ double pTextsH;
+ int textAlign;
+ bool isDateTime;
+ bool autoDtLabels;
+ QDateTime dtLow;
+ QDateTime dtHigh;
+ KDChartAxisParams::ValueScale dtDeltaScale;
+ double nLow;
+ double nHigh;
+ double nDelta;
+ double nDeltaPix;
+ double pLastX;
+ double pLastY;
+};
+
+
+class KDCHART_EXPORT KDChartPainter
+{
+ public:
+ static KDChartPainter* create( KDChartParams* params,
+ bool make2nd = false );
+
+ virtual ~KDChartPainter();
+
+ static void registerPainter( const QString& painterName,
+ KDChartPainter* painter );
+ static void unregisterPainter( const QString& painterName );
+
+ virtual void setupGeometry ( QPainter* painter,
+ KDChartTableDataBase* data,
+ const QRect& rect );
+
+ virtual void paint( QPainter* painter, KDChartTableDataBase* data,
+ bool paintFirst,
+ bool paintLast,
+ KDChartDataRegionList* regions = 0,
+ const QRect* rect = 0,
+ bool mustCalculateGeometry = true );
+
+ virtual QRect outermostRect() const { return _outermostRect; }
+
+ static void drawMarker( QPainter* painter,
+ int style,
+ const QColor& color,
+ const QPoint& p,
+ const QSize& size,
+ uint align = Qt::AlignCenter );
+
+ protected:
+ KDChartPainter( KDChartParams* );
+
+ // Note: dataRow, dataCol (and data3rd, resp.)
+ // must only be set if area == KDChartEnums::AreaChartDataRegion
+ virtual void paintArea( QPainter* painter,
+ uint area,
+ KDChartDataRegionList* regions = 0,
+ uint dataRow = 0,
+ uint dataCol = 0,
+ uint data3rd = 0 );
+
+ virtual void paintDataRegionAreas( QPainter* painter,
+ KDChartDataRegionList* regions );
+
+ virtual void paintAreaWithGap( QPainter* painter,
+ QRect rect,
+ const KDChartParams::KDChartFrameSettings& settings );
+ virtual void paintCustomBoxes( QPainter* painter,
+ KDChartDataRegionList* regions );
+
+ virtual void paintData( QPainter* painter, KDChartTableDataBase* data,
+ bool paint2nd,
+ KDChartDataRegionList* regions = 0 ) = 0;
+ virtual void paintDataValues( QPainter* painter,
+ KDChartTableDataBase* data,
+ KDChartDataRegionList* regions );
+ virtual void paintAxes( QPainter* painter,
+ KDChartTableDataBase* data );
+ virtual void paintLegend( QPainter* painter,
+ KDChartTableDataBase* data );
+ virtual void paintHeaderFooter( QPainter* painter,
+ KDChartTableDataBase* data );
+ virtual bool axesOverlapping( int axis1, int axis2 );
+
+ virtual void findChartDatasets( KDChartTableDataBase* data,
+ bool paint2nd,
+ uint chart,
+ uint& chartDatasetStart,
+ uint& chartDatasetEnd );
+
+ virtual void calculateAllAxesRects( QPainter* painter,
+ bool finalPrecision,
+ KDChartTableDataBase* data );
+
+ virtual QPoint calculateAnchor( const KDChartCustomBox & box,
+ KDChartDataRegionList* regions = 0 ) const;
+ virtual QRect calculateAreaRect( bool & allCustomBoxes,
+ uint area,
+ uint dataRow,
+ uint dataCol,
+ uint data3rd,
+ KDChartDataRegionList* regions ) const;
+
+ virtual QString fallbackLegendText( uint dataset ) const;
+ virtual uint numLegendFallbackTexts( KDChartTableDataBase* data ) const;
+
+ static QPoint pointOnCircle( const QRect& rect, double angle );
+ static void makeArc( QPointArray& points,
+ const QRect& rect,
+ double startAngle, double angles );
+
+ const KDChartParams* params() const
+ {
+ return _params;
+ }
+
+ QRect _outermostRect; /* The Outermost rect covers the complete
+ area of the painter. */
+
+ QRect _innermostRect; /* The Innermost rect covers the area of
+ the painter MINUS the the global
+ left/top/right/bottom leading.
+ ALL following ones are INSIDE the Innermost.
+ */
+
+ QRect _dataRect;
+
+ QRect _axesRect; /* The Axes rect contains the Data rect. Up to 4
+ axes might be at the left and bottom as well
+ as at the right and/or at the to top of the
+ chart.
+ */
+
+ QRect _legendRect; /* The legend position depends on the parameter
+ settings. If it is not directly to the left or
+ to the right of the data display, it will be
+ below the headers and on top of the footers.
+ */
+ int _legendEMSpace; // an em space in the legend font
+ int _legendSpacing; // the line spacing in the legend font
+ int _legendHeight; // the font height in the legend font
+ int _legendLeading; // the font leading in the legend font
+ // int _legendTitleSpacing; // the line spacing in the legend title font
+ // int _legendTitleLeading; // the font leading in the legend title font
+ KDChartTextPiece* _legendTitle;
+
+ int _numLegendTexts; // the number of legend items to show
+
+ int _logicalWidth;
+ int _logicalHeight;
+ double _areaWidthP1000;
+ double _areaHeightP1000;
+
+ QMap < int, QString > _legendTexts; // precomputed legend texts
+
+ internal__KDChart__CalcValues calcVal[ KDCHART_MAX_AXES ];
+ virtual bool calculateAllAxesLabelTextsAndCalcValues(
+ QPainter* painter,
+ KDChartTableDataBase* data,
+ double areaWidthP1000,
+ double areaHeightP1000,
+ double& delimLen );
+
+ virtual void drawExtraLinesAndMarkers(
+ KDChartPropertySet& propSet,
+ const QPen& defaultPen,
+ const KDChartParams::LineMarkerStyle& defaultMarkerStyle,
+ int myPointX,
+ int myPointY,
+ QPainter* painter,
+ const KDChartAxisParams* abscissaPara,
+ const KDChartAxisParams* ordinatePara,
+ const double areaWidthP1000,
+ const double areaHeightP1000,
+ bool bDrawInFront = FALSE );
+
+ static KDChartDataRegion* drawMarker( QPainter* painter,
+ const KDChartParams* params,
+ double areaWidthP1000,
+ double areaHeightP1000,
+ int deltaX,
+ int deltaY,
+ int style,
+ const QColor& color,
+ const QPoint& p,
+ uint dataset, uint value, uint chart,
+ KDChartDataRegionList* regions = 0,
+ int* width = 0,
+ int* height = 0,
+ uint align = Qt::AlignCenter );
+
+ private:
+ // disallow copy-construction and assignment
+ KDChartPainter( const KDChartPainter& );
+ KDChartPainter& operator=( const KDChartPainter& );
+
+
+ QMap < QString, KDChartPainter* > _customPainters;
+ KDChartParams* _params;
+
+ QRect trueFrameRect( const QRect& orgRect,
+ const KDChartParams::KDChartFrameSettings* settings ) const;
+
+ int legendTitleVertGap() const;
+ QFont trueLegendTitleFont() const;
+ QFont trueLegendFont() const;
+ void calculateHorizontalLegendSize( QPainter* painter,
+ QSize& size,
+ bool& legendNewLinesStartAtLeft ) const;
+ bool mustDrawVerticalLegend() const;
+ void findLegendTexts( KDChartTableDataBase* );
+ int calculateHdFtRects( QPainter* painter,
+ double averageValueP1000,
+ int xposLeft,
+ int xposRight,
+ bool bHeader,
+ int& yposTop,
+ int& yposBottom );
+ bool _legendNewLinesStartAtLeft;
+ int _legendTitleHeight;
+ int _legendTitleWidth;
+ int _legendTitleMetricsHeight; // the font height in the legend title font
+ int _hdLeading;
+ int _ftLeading;
+};
+
+#endif
diff --git a/libkdchart/KDChartParams.cpp b/libkdchart/KDChartParams.cpp
new file mode 100644
index 0000000..8673522
--- /dev/null
+++ b/libkdchart/KDChartParams.cpp
@@ -0,0 +1,9567 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#include <KDChartParams.h>
+#include <KDChartAxisParams.h>
+#include <KDChartEnums.h>
+#include <KDFrame.h>
+#include <KDChartCustomBox.h>
+#include <KDChartTextPiece.h>
+#include <KDXMLTools.h>
+#ifndef KDCHART_MASTER_CVS
+#include "KDChartParams.moc"
+#endif
+
+class KDChartData;
+
+//#include <qdom.h>
+
+/**
+ \class KDChartParams KDChartParams.h
+ \brief Bundles the display parameters of a chart.
+
+ Bundles all parameters of a chart including the type except the
+ actual data displayed. Serializing an object of this type plus the
+ data displayed is enough to be able to recreate the chart later.
+ */
+
+
+
+//QColor KDChartParams::_internalPointer_DataValueAutoColor = QColor( 0,1,0 );
+
+KDChartAutoColor* KDChartAutoColor::mInstance = NULL;
+
+KDChartAutoColor::KDChartAutoColor()
+{
+}
+
+KDChartAutoColor::KDChartAutoColor( KDChartAutoColor const& )
+{
+}
+
+KDChartAutoColor::~KDChartAutoColor()
+{
+}
+
+const KDChartAutoColor* KDChartAutoColor::instance()
+{
+ if( mInstance == 0 )
+ mInstance = new KDChartAutoColor();
+ return mInstance;
+}
+
+void KDChartAutoColor::freeInstance()
+{
+ if( mInstance )
+ delete mInstance;
+ mInstance = 0;
+}
+
+
+/*
+static QColor defaultColor;
+QT_STATIC_CONST_IMPL QColor & KDChartParams_AutoColor = defaultColor;
+*/
+
+/**
+ Constructor. Defines default values.
+ */
+KDChartParams::KDChartParams()
+{
+ tempPropSetA = new KDChartPropertySet();
+ tempPropSetB = new KDChartPropertySet();
+
+ // GENERAL
+
+ // Avoid Purify UMR
+ _maxDatasetColor = 1;
+ _maxDatasetSourceMode = 0;
+ _setChartSourceModeWasUsed = false;
+
+ _customBoxDictMayContainHoles = false;
+
+ // Set the default font params flag for data value texts
+ // but do *not* call setPrintDataValues() there since
+ // this will be called internally by setChartType() below.
+ setPrintDataValuesWithDefaultFontParams( KDCHART_ALL_CHARTS, false );
+ _printDataValuesSettings._dataValuesShowInfinite = true;
+ _printDataValuesSettings2._dataValuesShowInfinite = true;
+
+ setAllowOverlappingDataValueTexts( false );
+
+#if COMPAT_QT_VERSION >= 0x030100
+ setOptimizeOutputForScreen( false );
+#else
+ setOptimizeOutputForScreen( true );
+#endif
+
+ setGlobalLeading( 0,0,0,0 );
+
+
+ // Default type is bar charts
+ setChartType( Bar );
+
+ // By default, there is no additional chart type
+ setAdditionalChartType( NoType );
+
+ // Default is to show all values.
+ setNumValues( static_cast<unsigned int>( -1 ) );
+
+ _defaultFont = QFont( "helvetica", 8, QFont::Normal, false );
+
+ // The default frame settings: no border, no corners, no background
+ _noFrame.clearAll();
+
+ // The default frame settings: no inner gap, no outer gap and use the _noFrame
+ // *** no need to initialize _noFrameSettings: it is initialized by a default c'tor!
+
+ // The default brightness of shadow colors (needs to be set
+ // before the data colors to avoid an UMR).
+ setShadowBrightnessFactor( 1.0 );
+
+ // The default shadow fill style.
+ setShadowPattern( Qt::SolidPattern );
+
+ // Some default colors for the data.
+ setDataDefaultColors();
+
+ // Default color for data display outlines.
+ setOutlineDataColor( black );
+
+ // Default line width for data display outlines.
+ setOutlineDataLineWidth( 1 );
+
+ // Default line style for data display outlines.
+ setOutlineDataLineStyle( Qt::SolidLine );
+
+ // END GENERAL
+
+
+ setDataArea( QRect( QPoint(0,0), QSize(0,0)) );
+ setLegendArea(QRect( QPoint(0,0), QSize(0,0)) );
+
+
+ // BAR CHART-SPECIFIC
+
+ // Default bar subtype is normal
+ setBarChartSubType( BarNormal );
+
+ // Default is not to draw 3D bars
+ setThreeDBars( false );
+
+ // Default is to used shadowed colors for 3D bar effects
+ setThreeDBarsShadowColors( true );
+
+ // Default angle for 3D bars is 45 degrees.
+ setThreeDBarAngle( 45 );
+
+ // Default depth of 3D bars is 1.0
+ setThreeDBarDepth( 1.0 );
+
+ // Default gap between datasets is 6 per mille of chart data area.
+ setDatasetGap( 6 );
+ setDatasetGapIsRelative( true );
+
+ // Default gap between value blocks is 24 per mille of chart data area.
+ setValueBlockGap( 24 );
+ setValueBlockGapIsRelative( true );
+
+ // Default is to have the bar width's calculated indiidually
+ setBarWidth( KDCHART_AUTO_SIZE );
+ // reset the special indicator members storing the number
+ // of bars that were drawn last time / could not be drawn
+ // due to too less horizontal space
+ setBarsDisplayed( 0 );
+ setBarsLeft( 0 );
+
+ // By default, excess arrows are drawn in a split fashion
+ setDrawSolidExcessArrows( false );
+
+ // END BAR CHART-SPECIFIC
+
+
+ // LINE/AREA CHART-SPECIFIC
+ // Normal lines by default
+ setLineChartSubType( LineNormal );
+
+ // No markers by default
+ setLineMarker( false );
+
+ // Lines have a width of 1 pixel by default
+ setLineWidth( 1 );
+
+ // Lines are solid by default
+ setLineStyle( Qt::SolidLine );
+
+ // Lines have the same color as their
+ // respective data points by default
+ setLineColor();
+
+
+ // Default line marker styles and size
+ _maxDatasetLineMarkerStyle = 0; // avoid UMR
+ setLineMarkerStyle( 0, LineMarkerCircle );
+ setLineMarkerStyle( 1, LineMarkerSquare );
+ setLineMarkerStyle( 2, LineMarkerDiamond );
+ setLineMarkerSize( QSize( 6, 6 ) );
+
+ // 3D line settings
+ setThreeDLines( false );
+ setThreeDLineDepth( 10 );
+ /* temporary disabled:
+ setThreeDLineXRotation( 30 );
+ setThreeDLineYRotation( 30 );
+ */
+ setThreeDLineXRotation( 15 );
+ setThreeDLineYRotation( 15 );
+
+ // Normal areas by default
+ setAreaChartSubType( AreaNormal );
+
+ // Areas are filled below the value points by default.
+ setAreaLocation( AreaBelow );
+
+ // END LINE/AREA CHART-SPECIFIC
+
+ // POLAR CHART-SPECIFIC
+ // Normal polar charts by default
+ setPolarChartSubType( PolarNormal );
+
+ // Have markers by default
+ setPolarMarker( true );
+
+ // Polar charts show the zero point at the right side of the circle
+ setPolarZeroDegreePos( 0 );
+
+ // Lines have a width of 3/1000 of the chart's min size
+ // (either width or height) by default
+ setPolarLineWidth( -3 );
+
+ // Default polar marker styles and size
+ _maxDatasetPolarMarkerStyle = 0; // avoid UMR
+ setPolarMarkerStyle( 0, PolarMarkerCircle );
+ setPolarMarkerStyle( 1, PolarMarkerSquare );
+ setPolarMarkerStyle( 2, PolarMarkerDiamond );
+ setPolarMarkerSize( QSize( -40,-40 ) );
+
+ // default circular axes delimiters
+ setPolarRotateCircularLabels( false );
+ setPolarDelimsAndLabelsAtPos( KDChartEnums::PosTopLeft, false, false );
+ setPolarDelimsAndLabelsAtPos( KDChartEnums::PosTopCenter, true, true );
+ setPolarDelimsAndLabelsAtPos( KDChartEnums::PosTopRight, false, false );
+
+ setPolarDelimsAndLabelsAtPos( KDChartEnums::PosCenterLeft, false, false );
+ setPolarDelimsAndLabelsAtPos( KDChartEnums::PosCenterRight, false, false );
+
+ setPolarDelimsAndLabelsAtPos( KDChartEnums::PosBottomLeft, false, false );
+ setPolarDelimsAndLabelsAtPos( KDChartEnums::PosBottomCenter, true, true );
+ setPolarDelimsAndLabelsAtPos( KDChartEnums::PosBottomRight, false, false );
+
+
+ /* for test:
+ setPolarDelimsAndLabelsAtPos( KDChartEnums::PosTopLeft, true, true );
+ setPolarDelimsAndLabelsAtPos( KDChartEnums::PosTopCenter, true, true );
+ setPolarDelimsAndLabelsAtPos( KDChartEnums::PosTopRight, true, true );
+ setPolarDelimsAndLabelsAtPos( KDChartEnums::PosCenterRight, true, true );
+ setPolarDelimsAndLabelsAtPos( KDChartEnums::PosBottomRight, true, true );
+ setPolarDelimsAndLabelsAtPos( KDChartEnums::PosBottomCenter, true, true );
+ setPolarDelimsAndLabelsAtPos( KDChartEnums::PosBottomLeft, true, true );
+ setPolarDelimsAndLabelsAtPos( KDChartEnums::PosCenterLeft, true, true );
+ */
+
+
+ // END POLAR CHART-SPECIFIC
+
+ // PIE/RING CHART-SPECIFIC
+ // Pie/ring charts do not explode by default.
+ setExplode( false );
+ // But if they do, the explode factor is 10%
+ setExplodeFactor( 0.1 );
+ // setExplodeValues() is not called for initialization, the default
+ // empty list is the default.
+ // Flat pies by default
+ setThreeDPies( false );
+ // Height of 3D effect
+ setThreeDPieHeight( 20 );
+ // Start of pie circle
+ setPieStart( 0 );
+ // Start of ring circle
+ setRingStart( 0 );
+ // Ring thickness is constant by default
+ setRelativeRingThickness( false );
+ // END PIE/RING CHART-SPECIFIC
+
+
+ // HILO CHART-SPECIFIC
+ // Simple HiLo charts by default
+ setHiLoChartSubType( KDChartParams::HiLoSimple );
+ setHiLoChartPrintLowValues( false );
+ setHiLoChartPrintHighValues( false );
+ setHiLoChartPrintOpenValues( false );
+ setHiLoChartPrintCloseValues( false );
+
+
+ // BOX+WHISKER CHART-SPECIFIC
+ // Simple Box-and-Whisker charts by default
+ setBWChartSubType( KDChartParams::BWSimple );
+ setBWChartFences(1.5, 1.5, 3.0, 3.0);
+ setBWChartOutValMarkerSize( -25 );
+ setBWChartPrintStatistics( BWStatValALL, false );
+ setBWChartBrush( Qt::white );
+
+ // LEGEND
+ // Distance between legend and data.
+ setLegendSpacing( 20 );
+ // Position of the legend
+ setLegendPosition( LegendRight );
+ // Orientation of the legend
+ setLegendOrientation( Qt::Vertical );
+ // Whether the legend shall show lines or just
+ // show the markers (or squares, resp.)
+ setLegendShowLines( false );
+ // Where the legend labels come from
+ setLegendSource( LegendAutomatic );
+ // legend texts are drawn in black by default
+ setLegendTextColor( Qt::black );
+ // legend font size is calculated dynamically, but ignore the font size
+ setLegendFont( QFont( "helvetica", 10, QFont::Normal, false ), false );
+ // legend font size is calculated dynamically:
+ // 40 / 1000 of the minimal value of
+ // the printable area height and width
+ setLegendFontRelSize( 40 );
+ // the default legend title is "Legend"
+ setLegendTitleText( tr( "Legend" ) );
+ // legend title is drawn in black by default
+ setLegendTitleTextColor( Qt::black );
+ // legend title font size is calculated dynamically, but ignore
+ // the font size
+ setLegendTitleFont( QFont( "helvetica", 12, QFont::Normal, false ), false );
+ // legend title font size is calculated dynamically:
+ // 50 / 1000 of the minimal value of
+ // the printable area height and width
+ setLegendTitleFontRelSize( 50 );
+ // END LEGEND
+
+
+ // AXES
+
+ setDefaultAxesTypes();
+ // activate bottom (ordinate) and left (abcissa) axis
+ activateDefaultAxes();
+
+ // END AXES
+
+
+ // HEADERS/FOOTERS
+
+ // Set a default font for all sections not taking the build-in
+ // defaults from c'tor KDChartParams::HdFtParams::HdFtParams()
+ QFont defaultHdFtFont( "helvetica", 14, QFont::Normal, false );
+ int relHd0Size = 15;
+ int relHdSize = 22;
+ int relHd2Size = 19;
+
+ int relFt0Size = 15;
+ int relFtSize = 19;
+ int relFt2Size = 12;
+ setHeaderFooterFont( KDChartParams::HdFtPosHeader0,
+ defaultHdFtFont, true, relHd0Size );
+ setHeaderFooterFont( KDChartParams::HdFtPosHeader0L,
+ defaultHdFtFont, true, relHd0Size );
+ setHeaderFooterFont( KDChartParams::HdFtPosHeader0R,
+ defaultHdFtFont, true, relHd0Size );
+ setHeaderFooterFont( KDChartParams::HdFtPosHeader,
+ defaultHdFtFont, true, relHdSize );
+ setHeaderFooterFont( KDChartParams::HdFtPosHeaderL,
+ defaultHdFtFont, true, relHdSize );
+ setHeaderFooterFont( KDChartParams::HdFtPosHeaderR,
+ defaultHdFtFont, true, relHdSize );
+ setHeaderFooterFont( KDChartParams::HdFtPosHeader2,
+ defaultHdFtFont, true, relHd2Size );
+ setHeaderFooterFont( KDChartParams::HdFtPosHeader2L,
+ defaultHdFtFont, true, relHd2Size );
+ setHeaderFooterFont( KDChartParams::HdFtPosHeader2R,
+ defaultHdFtFont, true, relHd2Size );
+
+ setHeaderFooterFont( KDChartParams::HdFtPosFooter0,
+ defaultHdFtFont, true, relFt0Size );
+ setHeaderFooterFont( KDChartParams::HdFtPosFooter0L,
+ defaultHdFtFont, true, relFt0Size );
+ setHeaderFooterFont( KDChartParams::HdFtPosFooter0R,
+ defaultHdFtFont, true, relFt0Size );
+ setHeaderFooterFont( KDChartParams::HdFtPosFooter,
+ defaultHdFtFont, true, relFtSize );
+ setHeaderFooterFont( KDChartParams::HdFtPosFooterL,
+ defaultHdFtFont, true, relFtSize );
+ setHeaderFooterFont( KDChartParams::HdFtPosFooterR,
+ defaultHdFtFont, true, relFtSize );
+ setHeaderFooterFont( KDChartParams::HdFtPosFooter2,
+ defaultHdFtFont, true, relFt2Size );
+ setHeaderFooterFont( KDChartParams::HdFtPosFooter2L,
+ defaultHdFtFont, true, relFt2Size );
+ setHeaderFooterFont( KDChartParams::HdFtPosFooter2R,
+ defaultHdFtFont, true, relFt2Size );
+ // END HEADERS/FOOTERS
+
+ // PROPERTY SETS
+ tempPropSetA->fullReset("normal data");
+ setProperties(KDCHART_PROPSET_NORMAL_DATA, *tempPropSetA);
+ // don't show the line, don't show the marker
+ tempPropSetA->setName("transparent data");
+ tempPropSetA->setLineStyle( KDChartPropertySet::OwnID, Qt::NoPen );
+ tempPropSetA->setShowMarker( KDChartPropertySet::OwnID, false );
+ setProperties(KDCHART_PROPSET_TRANSPARENT_DATA, *tempPropSetA);
+ // don't show line nor marker, but do show the horizontal line
+ tempPropSetA->setName("horizontal line");
+ tempPropSetA->setExtraLinesAlign( KDChartPropertySet::OwnID, Qt::AlignLeft | Qt::AlignRight );
+ setProperties(KDCHART_PROPSET_HORI_LINE, *tempPropSetA);
+ // don't show line nor marker, but do show the vertical line
+ tempPropSetA->setName("vertical line");
+ tempPropSetA->setExtraLinesAlign( KDChartPropertySet::OwnID, Qt::AlignTop | Qt::AlignBottom );
+ setProperties(KDCHART_PROPSET_VERT_LINE, *tempPropSetA);
+ // END PROPERTY SETS
+}
+
+
+/**
+ Destructor. Only defined to have it virtual.
+ */
+KDChartParams::~KDChartParams()
+{
+ KDChartAutoColor::freeInstance();
+ delete tempPropSetA;
+ delete tempPropSetB;
+}
+
+
+// GENERAL
+/** @name General parameters.
+
+ These methods set general parameters that apply to several or all chart types.
+ */
+//@{
+
+
+/**
+ Stores a new property set: data are stored by value so you may
+ use your \c rSet instance for other purpose later...
+
+ \returns The property set's ID to be used for later retrieving
+ the property information by calling the properties() function
+ or for assigning these properties to a data cell - either in the
+ KDChartData constructor or by calling KDChartData::setPropertySet().
+
+ \note The property set's ID may also be retrieved by calling
+ <b>set.id()</b> after calling registerProperties( set )
+
+ \note The predefined (build-in) property ids (like KDCHART_PROPSET_NORMAL_DATA
+ and KDCHART_PROPSET_TRANSPARENT_DATA) must not be registered
+ but should be used without further initialization.
+
+ \sa KDCHART_PROPSET_NORMAL_DATA, KDCHART_PROPSET_TRANSPARENT_DATA
+ \sa KDCHART_PROPSET_HORI_LINE, KDCHART_PROPSET_VERT_LINE
+ \sa KDChartData::setPropertySet
+ \sa removeProperties
+ */
+int KDChartParams::registerProperties( KDChartPropertySet& rSet )
+{
+ _propertySetList.setAutoDelete( true );
+ rSet.mOwnID = _propertySetList.count();
+ _propertySetList.insert( rSet.mOwnID, rSet.clone() );
+ return rSet.mOwnID;
+}
+
+/**
+ Overwrites a property set with a new property set.
+
+ \note This function might also be used to initialy store
+ a property set using a specific ID number, but note
+ that another property set having the same number
+ would be replaced by this property set automatically. Therefor
+ in general it is better to use the registerProperties function
+ to initially obtain a unique ID number for your new property set.
+
+ \returns TRUE if the property set had been stored before,
+ or FALSE if the set was now stored initially.
+
+ \sa KDCHART_PROPSET_TRANSPARENT_DATA
+ \sa KDCHART_PROPSET_HORI_LINE, KDCHART_PROPSET_VERT_LINE
+ \sa KDChartData::setPropertySet
+ \sa removeProperties
+ */
+void KDChartParams::setProperties( int id, KDChartPropertySet& rSet )
+{
+ _propertySetList.setAutoDelete( true );
+ rSet.mOwnID = id;
+ _propertySetList.replace( rSet.mOwnID, rSet.clone() );
+}
+
+/**
+ Removes a property set from the registry
+ that was registered via registerProperties().
+
+ \note It is not possible to remove the build-in default property set:
+ function calls using KDCHART_PROPSET_NORMAL_DATA as ID
+ will be ignored.
+
+ \returns TRUE if the property set was found and removed, or FALSE
+ if the set was not found or KDCHART_PROPSET_NORMAL_DATA
+ was specified as ID value.
+
+ \sa registerProperties, setProperties
+ */
+bool KDChartParams::removeProperties( int id )
+{
+ _propertySetList.setAutoDelete( true );
+ // Removing the default property set is not allowed!
+ if( KDCHART_PROPSET_NORMAL_DATA == id )
+ return false;
+ return _propertySetList.remove( id );
+}
+
+
+/**
+ Retrieves the values specified for a property set that
+ was stored by registerProperties().
+
+ Use this function to retrieve the exact specification
+ of a property set.
+
+ Don't use this function to retrieve the properties that are
+ valid for a given data cell but use KDChartParams::calculateProperties()
+ instead.
+
+ \note This function does <b>not</b> return a pointer
+ to the property set itself but a copy of the data
+ stored therein. To change a stored property set
+ you may use the setProperties() function.
+
+ \returns TRUE if the property set was found, FALSE
+ if it no property set was registred with this ID.
+
+ \sa registerProperties, KDChartData::setPropertySet
+ */
+bool KDChartParams::properties( int id, KDChartPropertySet& rSet ) const
+{
+ const KDChartPropertySet* R = _propertySetList.find( id );
+ const bool bFound = (0 != R);
+ if( bFound )
+ rSet.deepCopy( R );
+ return bFound;
+}
+
+
+/**
+ Retrieves the internal property set object that
+ created when you called registerProperties().
+
+ Use this function to access a property set for modifying it directly.
+
+ Don't use this function to retrieve the properties that are
+ valid for a given data cell but use KDChartParams::calculateProperties()
+ instead.
+
+ \note This function <b>does</b> return a pointer
+ to the property set itself, so you can directly modify its contents.
+ <b>However</b> you have to make sure NOT to delete this pointer,
+ since KDChartParams is owning it, so it would try to free
+ the pointer again later, most likely resulting in a program crash.
+ To delete a stored property set you may use the removeProperties() function.
+
+ \returns A pointer to the internally stored property set if the property set was found,
+ Zero if no property set was registred with this ID.
+
+ \sa registerProperties, removeProperties, KDChartData::setPropertySet
+ */
+KDChartPropertySet* KDChartParams::properties( int id )
+{
+ return _propertySetList.find( id );
+}
+
+
+/**
+ Retrieves the values that correspond to a property set by
+ reading this set's properties and obtaining other property
+ set's values if necessary (according to ID numbers that might
+ be stored in the property set).
+
+ Use this function to retrieve the properties that are
+ valid for a given data cell.
+
+ Don't use this function to retrieve the exact specification
+ of a property set but use KDChartParams::properties() instead.
+
+ \returns TRUE if the property set was found, FALSE
+ if it no property set was registred with this ID.
+
+ \sa registerProperties, KDChartData::setPropertySet
+ */
+bool KDChartParams::calculateProperties( int startId, KDChartPropertySet& rSet ) const
+{
+ KDChartPropertySet& startSet = *tempPropSetA;
+ startSet.quickReset("");
+
+ rSet.deepCopy( &startSet ); // reset all properties of rSet to the default !!
+
+//qDebug("in KDChartParams::calculateProperties():");
+//qDebug(" startId: %i",startId);
+//qDebug(" startSet: %s",startSet.name().latin1());
+
+ bool bOk = properties(startId, startSet);
+ if( bOk ){
+ int lineWidth;
+ QColor lineColor;
+ Qt::PenStyle lineStyle;
+ bool showMarker;
+ uint markerAlign;
+ QSize markerSize;
+ QColor markerColor;
+ int markerStyle;
+ uint extraLinesAlign;
+ bool extraLinesInFront;
+ int extraLinesLength;
+ int extraLinesWidth;
+ QColor extraLinesColor;
+ Qt::PenStyle extraLinesStyle;
+ uint extraMarkersAlign;
+ QSize extraMarkersSize;
+ QColor extraMarkersColor;
+ int extraMarkersStyle;
+ bool showBar;
+ QColor barColor;
+ QBrush areaBrush;
+ // c'tor sets all IDs to unknown by default
+ KDChartPropertySet& propSet = *tempPropSetB;
+ propSet.quickReset("");
+ // PENDING(khz) replace the rustic depth counter i by a smart way
+ // to quickly and safely recognize forbidden circular ID dependencies
+ // *without* using this artificial maximal tree depth limitation.
+ const int maxDepth = 1000;
+ int i;
+ int id;
+ // retrieve lineWidth
+ propSet.deepCopy( &startSet ); i=0;
+ do{
+ if( propSet.hasOwnLineWidth( id, lineWidth ) ){
+ rSet.setLineWidth( KDChartPropertySet::OwnID, lineWidth );
+ break;
+ }else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
+ break;
+ ++i;
+ }while( properties(id, propSet) );
+ // retrieve lineColor
+ propSet.deepCopy( &startSet ); i=0;
+ do{
+ if( propSet.hasOwnLineColor( id, lineColor ) ){
+ rSet.setLineColor( KDChartPropertySet::OwnID, lineColor );
+ break;
+ }else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
+ break;
+ ++i;
+ }while( properties(id, propSet) );
+ // retrieve lineStyle
+ propSet.deepCopy( &startSet ); i=0;
+ do{
+ if( propSet.hasOwnLineStyle( id, lineStyle ) ){
+ rSet.setLineStyle( KDChartPropertySet::OwnID, lineStyle );
+ break;
+ }else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
+ break;
+ ++i;
+ }while( properties(id, propSet) );
+
+ // markers at cell value position:
+
+ // retrieve showMarker
+ propSet.deepCopy( &startSet ); i=0;
+ do{
+ if( propSet.hasOwnShowMarker( id, showMarker ) ){
+ rSet.setShowMarker( KDChartPropertySet::OwnID, showMarker );
+ break;
+ }else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
+ break;
+ ++i;
+ }while( properties(id, propSet) );
+ // retrieve marker alignment
+ propSet.deepCopy( &startSet ); i=0;
+ do{
+ if( propSet.hasOwnMarkerAlign( id, markerAlign ) ){
+ rSet.setMarkerAlign( KDChartPropertySet::OwnID, markerAlign );
+ break;
+ }else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
+ break;
+ ++i;
+ }while( properties(id, propSet) );
+ // retrieve marker size
+ propSet.deepCopy( &startSet ); i=0;
+ do{
+ if( propSet.hasOwnMarkerSize( id, markerSize ) ){
+ rSet.setMarkerSize( KDChartPropertySet::OwnID, markerSize );
+ break;
+ }else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
+ break;
+ ++i;
+ }while( properties(id, propSet) );
+ // retrieve marker color
+ propSet.deepCopy( &startSet ); i=0;
+ do{
+ if( propSet.hasOwnMarkerColor( id, markerColor ) ){
+ rSet.setMarkerColor( KDChartPropertySet::OwnID, markerColor );
+ break;
+ }else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
+ break;
+ ++i;
+ }while( properties(id, propSet) );
+ // retrieve marker style
+ propSet.deepCopy( &startSet ); i=0;
+ do{
+ if( propSet.hasOwnMarkerStyle( id, markerStyle ) ){
+ rSet.setMarkerStyle( KDChartPropertySet::OwnID, markerStyle );
+ break;
+ }else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
+ break;
+ ++i;
+ }while( properties(id, propSet) );
+
+ // extra lines:
+
+ // retrieve alignment of extra lines
+ propSet.deepCopy( &startSet ); i=0;
+ do{
+ if( propSet.hasOwnExtraLinesAlign( id, extraLinesAlign ) ){
+ rSet.setExtraLinesAlign( KDChartPropertySet::OwnID, extraLinesAlign );
+ break;
+ }else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
+ break;
+ ++i;
+ }while( properties(id, propSet) );
+ // retrieve whether the extra lines shall be printed in front of the normal lines
+ propSet.deepCopy( &startSet ); i=0;
+ do{
+ if( propSet.hasOwnExtraLinesInFront( id, extraLinesInFront ) ){
+ rSet.setExtraLinesInFront( KDChartPropertySet::OwnID, extraLinesInFront );
+ break;
+ }else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
+ break;
+ ++i;
+ }while( properties(id, propSet) );
+ // retrieve lineLength
+ propSet.deepCopy( &startSet ); i=0;
+ do{
+ if( propSet.hasOwnExtraLinesLength( id, extraLinesLength ) ){
+ rSet.setExtraLinesLength( KDChartPropertySet::OwnID, extraLinesLength );
+ break;
+ }else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
+ break;
+ ++i;
+ }while( properties(id, propSet) );
+ // retrieve lineWidth
+ propSet.deepCopy( &startSet ); i=0;
+ do{
+ if( propSet.hasOwnExtraLinesWidth( id, extraLinesWidth ) ){
+ rSet.setExtraLinesWidth( KDChartPropertySet::OwnID, extraLinesWidth );
+ break;
+ }else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
+ break;
+ ++i;
+ }while( properties(id, propSet) );
+ // retrieve lineColor
+ propSet.deepCopy( &startSet ); i=0;
+ do{
+ if( propSet.hasOwnExtraLinesColor( id, extraLinesColor ) ){
+ rSet.setExtraLinesColor( KDChartPropertySet::OwnID, extraLinesColor );
+ break;
+ }else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
+ break;
+ ++i;
+ }while( properties(id, propSet) );
+ // retrieve lineStyle
+ propSet.deepCopy( &startSet ); i=0;
+ do{
+ if( propSet.hasOwnExtraLinesStyle( id, extraLinesStyle ) ){
+ rSet.setExtraLinesStyle( KDChartPropertySet::OwnID, extraLinesStyle );
+ break;
+ }else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
+ break;
+ ++i;
+ }while( properties(id, propSet) );
+
+ // markers at the ends of the extra lines:
+
+ // retrieve marker alignment
+ propSet.deepCopy( &startSet ); i=0;
+ do{
+ if( propSet.hasOwnExtraMarkersAlign( id, extraMarkersAlign ) ){
+ rSet.setExtraMarkersAlign( KDChartPropertySet::OwnID, extraMarkersAlign );
+ break;
+ }else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
+ break;
+ ++i;
+ }while( properties(id, propSet) );
+ // retrieve marker size
+ propSet.deepCopy( &startSet ); i=0;
+ do{
+ if( propSet.hasOwnExtraMarkersSize( id, extraMarkersSize ) ){
+ rSet.setExtraMarkersSize( KDChartPropertySet::OwnID, extraMarkersSize );
+ break;
+ }else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
+ break;
+ ++i;
+ }while( properties(id, propSet) );
+ // retrieve marker color
+ propSet.deepCopy( &startSet ); i=0;
+ do{
+ if( propSet.hasOwnExtraMarkersColor( id, extraMarkersColor ) ){
+ rSet.setExtraMarkersColor( KDChartPropertySet::OwnID, extraMarkersColor );
+ break;
+ }else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
+ break;
+ ++i;
+ }while( properties(id, propSet) );
+ // retrieve marker style
+ propSet.deepCopy( &startSet ); i=0;
+ do{
+ if( propSet.hasOwnExtraMarkersStyle( id, extraMarkersStyle ) ){
+ rSet.setExtraMarkersStyle( KDChartPropertySet::OwnID, extraMarkersStyle );
+ break;
+ }else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
+ break;
+ ++i;
+ }while( properties(id, propSet) );
+
+ // retrieve showBar
+ propSet.deepCopy( &startSet ); i=0;
+ do{
+ if( propSet.hasOwnShowBar( id, showBar ) ){
+ rSet.setShowBar( KDChartPropertySet::OwnID, showBar );
+ break;
+ }else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
+ break;
+ ++i;
+ }while( properties(id, propSet) );
+ // retrieve barColor
+ propSet.deepCopy( &startSet ); i=0;
+ do{
+ if( propSet.hasOwnBarColor( id, barColor ) ){
+ rSet.setBarColor( KDChartPropertySet::OwnID, barColor );
+ break;
+ }else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
+ break;
+ ++i;
+ }while( properties(id, propSet) );
+
+ // retrieve areaBrush
+ propSet.deepCopy( &startSet ); i=0;
+ do{
+ if( propSet.hasOwnAreaBrush( id, areaBrush ) ){
+ rSet.setAreaBrush( KDChartPropertySet::OwnID, areaBrush );
+ break;
+ }else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
+ break;
+ ++i;
+ }while( properties(id, propSet) );
+
+ }
+ return bOk;
+}
+
+
+/**
+ \fn int KDChartParams::roundVal(double)
+
+ Returns the parameter \c d rounded to the nearest integer.
+ */
+
+
+
+/**
+ Specifies if and how a chart will print the data value texts near
+ their respective entries.
+
+ Data value texts will be printed immediately after drawing all of
+ the chart data points (or bars, lines,...) but before drawing the
+ legend and before drawing any custom boxes. If more than one chart
+ ist to be drawn (sharing the same data area) printing of the data
+ text values will take place after drawing all of the last charts
+ data points, this enables us to see the texts even if their
+ respective data representations are covered by the second charts
+ drawings. The same covering/colliding problem might occur with Area
+ charts if one area is (partially) covering another area. In such
+ cases you might either want to specify an appropriate
+ TextLayoutPolicy for getting a better looking result or specify an
+ other text color for data value texts of the second chart since by
+ default the first chart has black texts while the second chart
+ shows its data value texts in dark blue color.
+
+ \note Only used if chartType() is <b>neither HiLo nor
+ BoxWhisker</b>. To specify printing of data values in a HiLo chart
+ please use setHiLoChartPrintLowValues, setHiLoChartPrintHighValues,
+ setHiLoChartPrintOpenValues, setHiLoChartPrintCloseValues. To
+ specify printing of data values in a BoxWhisker chart please use
+ setBWChartPrintStatistics.
+
+ Calling <b>setPrintDataValues( false )</b> will <b>deactivate</b>
+ printing of the values.
+
+ Calling setPrintDataValuesWithDefaultFontParams( chart ) will
+ <b>reset</b> the respective font size and colour and position
+ parameters (but not the QFont itself) and <b>activate</b> printing
+ of the values for the \c chart speficied (or for all charts by
+ using \c KDCHART_ALL_CHARTS, resp.).
+
+ \param active specifies whether the value texts are to be printed or not.
+ \param chart The number of the chart: 0 for the first chart, 1 for
+ the second chart in case there are two charts to be drawn sharing the
+ same data area. Use the special value KDCHART_ALL_CHARTS
+ to specify that your settings are to be taken for both charts.
+ \param divPow10 The power of 10 which the data value is to be divided by.
+ A value of 2 means divide by 100, a value of -3 means multiply by 1000,
+ and 0 (by definition) would result in multiplying by 1.
+ \param digitsBehindComma The number of digits to show behind the comma,
+ to have this calculated automatically just use the default value
+ KDCHART_DATA_VALUE_AUTO_DIGITS.
+ \param font a Pointer to the font to be used, if zero the default data value
+ texts font will be taken (this is a Times font since small Times digits are
+ clearer than small Helvetica digits).
+
+ Changing of one or more of <b>the following parameters</b>
+ automatically de-activates all future font parameter adjustments
+ that would otherwise take place after each call of setChartType (or
+ setAdditionalChartType, resp.). To re-enable this usefull feature
+ you may call setPrintDataValuesWithDefaultFontParams at any time
+ afterwards.
+
+ \param size (in per mille of the chart width) the dynamic size of
+ the font to be used. If this parameter is zero the size of the
+ \c font is used instead - regardless of the size of the chart!
+ You may use setPrintDataValuesFontRelSize to change this parameter setting
+ without affecting the other ones.
+ \param color the color to be used when printing the values.
+ To have the color calculated automatically - useful when printing
+ inside the bars (or pie slices, areas, ... resp.) - please use
+ \c KDCHART_DATA_VALUE_AUTO_COLOR instead of a QColor*.
+ You may use setPrintDataValuesColor to change this parameter setting
+ without affecting the other ones.
+
+ The following parameters apply to values less than zero only:
+
+ \param negativePosition The anchor position which the text is to be
+aligned to.
+\param negativeAlign The way how the text is to be aligned to the anchor.
+This must be a reasonable combination of Qt::AlignmentFlags.
+\param negativeDeltaX The X distance between the <b>anchor
+point</b> -- specified by \c negativePosition (or \c
+ positivePosition, resp.) -- and the internal <b>alignment point</b>
+of the text -- specified by \c negativeAlign (or \c positiveAlign,
+ resp.). <b>Note: </b> For better compatibility to the dynamic font
+size this parameter is interpreted as being a per-cent value of the
+used font height. If greater 0, the X position is increased, if
+less than 0, it is reduced. Actual font size and thus also this
+delta value are calculated dynamically before painting based on the
+size of the chart and the specification made via parameter \c size.
+
+\param negativeDeltaY The Y distance between the <b>anchor
+point</b> -- specified by \c negativePosition (or \c
+ positivePosition, resp.) -- and the internal <b>alignment point</b>
+of the text -- specified by \c negativeAlign (or \c positiveAlign,
+ resp.). <b>Note: </b> For better compatibility to the dynamic font
+size this parameter is interpreted as being a per-cent value of the
+used font height. If greater 0, the Y position is increased, if
+less than 0, it is reduced. Actual font size and thus also this
+delta value are calculated dynamically before painting based on the
+size of the chart and the specification made via parameter \c size.
+\param negativeRotation The amount of degrees (using a circle of
+ 360 degrees) taken to rotate the text. Positive values rotate
+clockwise, negative values rotate counter-clockwise. There are two
+special values that you might find usefull for Pie charts or for
+Ring charts: \c KDCHART_SAGGITAL_ROTATION and \c
+KDCHART_TANGENTIAL_ROTATION both leading to individual
+calculation of appropriate rotation for each data value. Rotation
+will be performed around the internal <b>alignment point</b> of the
+text -- specified by \c negativeAlign (or \c positiveAlign, resp.).
+
+The following parameters apply to values greater than zero or equal zero:
+
+\param positivePosition The anchor position which the text is to be
+aligned to.
+\param positiveAlign The way how the text is to be aligned to the anchor.
+This must be a reasonable combination of Qt::AlignmentFlags.
+\param negativeDeltaX The X distance between the <b>anchor
+point</b> -- specified by \c negativePosition (or \c
+ positivePosition, resp.) -- and the internal <b>alignment point</b>
+of the text -- specified by \c negativeAlign (or \c positiveAlign,
+ resp.). <b>Note: </b> For better compatibility to the dynamic font
+size this parameter is interpreted as being a per-cent value of the
+used font height. If greater 0, the X position is increased, if
+less than 0, it is reduced. Actual font size and thus also this
+delta value are calculated dynamically before painting based on the
+size of the chart and the specification made via parameter \c size.
+\param positiveDeltaY The Y distance between the <b>anchor
+point</b> -- specified by \c negativePosition (or \c
+ positivePosition, resp.) -- and the internal <b>alignment point</b>
+of the text -- specified by \c negativeAlign (or \c positiveAlign,
+ resp.). <b>Note: </b> For better compatibility to the dynamic font
+size this parameter is interpreted as being a per-cent value of the
+used font height. If greater 0, the Y position is increased, if
+less than 0, it is reduced. Actual font size and thus also this
+delta value are calculated dynamically before painting based on the
+size of the chart and the specification made via parameter \c size.
+\param positiveRotation The amount of degrees (using a circle of
+ 360 degrees) taken to rotate the text. Positive values rotate
+clockwise, negative values rotate counter-clockwise. There are two
+special values that you might find usefull for Pie charts or for
+Ring charts: \c KDCHART_SAGGITAL_ROTATION and \c
+KDCHART_TANGENTIAL_ROTATION both leading to individual
+calculation of appropriate rotation for each data value. Rotation
+will be performed around the internal <b>alignment point</b> of the
+text -- specified by \c negativeAlign (or \c positiveAlign, resp.).
+
+\param layoutPolicy The way to handle too narrow space conflicts:
+what to do if a data text covers a neighboring data text (or a
+ neighboring data area, resp.).
+
+\sa printDataValues
+\sa setPrintDataValuesWithDefaultFontParams, printDataValuesWithDefaultFontParams
+\sa setPrintDataValuesFontRelSize, setPrintDataValuesColor
+\sa dataValuesDivPow10
+\sa dataValuesDigitsBehindComma
+\sa dataValuesFontUseRelSize
+\sa dataValuesFontRelSize
+\sa dataValuesFontColor
+\sa dataValuesAnchorPosition
+\sa dataValuesAnchorAlign
+\sa dataValuesAnchorDeltaX
+\sa dataValuesAnchorDeltaY
+\sa dataValuesRotation
+\sa dataValuesLayoutPolicy
+*/
+void KDChartParams::setPrintDataValues( bool active,
+ uint chart,
+ int divPow10,
+ int digitsBehindComma,
+ QFont* font,
+ uint size,
+ const QColor* color,
+ KDChartEnums::PositionFlag negativePosition,
+ uint negativeAlign,
+ int negativeDeltaX,
+ int negativeDeltaY,
+ int negativeRotation,
+ KDChartEnums::PositionFlag positivePosition,
+ uint positiveAlign,
+ int positiveDeltaX,
+ int positiveDeltaY,
+ int positiveRotation,
+ KDChartEnums::TextLayoutPolicy policy )
+{
+ uint count = (KDCHART_ALL_CHARTS == chart) ? 2 : 1;
+ PrintDataValuesSettings * settings = (( 1 < count ) || ( 0 == chart ))
+ ? &_printDataValuesSettings
+ : &_printDataValuesSettings2;
+ for ( uint i = 0; i < count; ++i ) {
+ settings->_printDataValues = active;
+ settings->_divPow10 = divPow10;
+ settings->_digitsBehindComma = digitsBehindComma;
+
+ const ChartType cType
+ = ( ( 1 < count && i )
+ || ( 1 == count && 0 < chart && chart < 1000 ) )
+ ? additionalChartType()
+ : chartType();
+
+ bool finished( false );
+ if ( UINT_MAX == size ) {
+ finished = true;
+ switch ( cType ) {
+ case NoType:
+ case Bar: {
+ if ( font )
+ settings->_dataValuesFont = *font;
+ else
+ settings->_dataValuesFont = QFont( "times", 1, QFont::Bold );
+ settings->_dataValuesUseFontRelSize = true;
+ settings->_dataValuesFontRelSize = 16;
+ settings->_dataValuesAutoColor = false; // !!!
+ settings->_dataValuesColor = QColor( Qt::darkBlue );
+ settings->_dataValuesBrush = QBrush( Qt::NoBrush );
+ // for values below zero:
+ settings->_dataValuesAnchorNegativePosition = KDChartEnums::PosBottomRight;
+ settings->_dataValuesAnchorNegativeAlign = Qt::AlignBottom + Qt::AlignRight;
+ settings->_dataValuesAnchorNegativeDeltaX = 20;
+ settings->_dataValuesAnchorNegativeDeltaY = 55;
+ settings->_dataValuesNegativeRotation = 300;
+ // for values greater/equal zero:
+ settings->_dataValuesAnchorPositivePosition = KDChartEnums::PosTopLeft;
+ settings->_dataValuesAnchorPositiveAlign = Qt::AlignTop + Qt::AlignLeft;
+ settings->_dataValuesAnchorPositiveDeltaX = - 20;
+ settings->_dataValuesAnchorPositiveDeltaY = - 65;
+ settings->_dataValuesPositiveRotation = 300;
+
+ settings->_dataValuesLayoutPolicy = KDChartEnums::LayoutPolicyRotate;
+ }
+ break;
+ case Line: {
+ if ( font )
+ settings->_dataValuesFont = *font;
+ else
+ settings->_dataValuesFont = QFont( "times", 1, QFont::Normal );
+ settings->_dataValuesUseFontRelSize = true;
+ settings->_dataValuesFontRelSize = 16;
+ settings->_dataValuesAutoColor = false; // !!!
+ settings->_dataValuesColor = QColor( Qt::darkBlue );
+ settings->_dataValuesBrush = QBrush( Qt::NoBrush );
+ // for values below zero:
+ settings->_dataValuesAnchorNegativePosition = KDChartEnums::PosBottomCenter;
+ settings->_dataValuesAnchorNegativeAlign = Qt::AlignTop + Qt::AlignHCenter;
+ settings->_dataValuesAnchorNegativeDeltaX = 0;
+ settings->_dataValuesAnchorNegativeDeltaY = 0;
+ settings->_dataValuesNegativeRotation = 0;
+ // for values greater/equal zero:
+ settings->_dataValuesAnchorPositivePosition = KDChartEnums::PosTopCenter;
+ settings->_dataValuesAnchorPositiveAlign = Qt::AlignBottom + Qt::AlignHCenter;
+ settings->_dataValuesAnchorPositiveDeltaX = 0;
+ settings->_dataValuesAnchorPositiveDeltaY = 0;
+ settings->_dataValuesPositiveRotation = 0;
+
+ settings->_dataValuesLayoutPolicy = KDChartEnums::LayoutPolicyRotate;
+ }
+ break;
+ case Area: {
+ if ( font )
+ settings->_dataValuesFont = *font;
+ else
+ settings->_dataValuesFont = QFont( "times", 1, QFont::Bold );
+ settings->_dataValuesUseFontRelSize = true;
+ settings->_dataValuesFontRelSize = 21;
+ settings->_dataValuesAutoColor = true; // !!!
+ settings->_dataValuesColor = QColor( Qt::black );
+ settings->_dataValuesBrush = QBrush( Qt::white );
+
+ bool bShowOutside = areaChartSubType() == AreaNormal;
+ // for values below zero:
+ settings->_dataValuesAnchorNegativePosition = KDChartEnums::PosBottomCenter;
+ settings->_dataValuesAnchorNegativeAlign = Qt::AlignHCenter
+ + (bShowOutside ? Qt::AlignTop : Qt::AlignBottom);
+ settings->_dataValuesAnchorNegativeDeltaX = 0;
+ settings->_dataValuesAnchorNegativeDeltaY = bShowOutside ? 20 : -35;
+ settings->_dataValuesNegativeRotation = 0;
+ // for values greater/equal zero:
+ settings->_dataValuesAnchorPositivePosition = KDChartEnums::PosTopCenter;
+ settings->_dataValuesAnchorPositiveAlign = Qt::AlignHCenter
+ + (bShowOutside ? Qt::AlignBottom : Qt::AlignTop);
+ settings->_dataValuesAnchorPositiveDeltaX = 0;
+ settings->_dataValuesAnchorPositiveDeltaY = bShowOutside ? -20 : 35;
+ settings->_dataValuesPositiveRotation = 0;
+
+ settings->_dataValuesLayoutPolicy = KDChartEnums::LayoutPolicyRotate;
+ }
+ break;
+ case HiLo:
+ case BoxWhisker:
+ // settings are not defined here because HiLo and BW charts
+ // are *not* set up using setPrintDataValues()
+ // but by using their own methods
+ break;
+ case Pie: {
+ if ( font )
+ settings->_dataValuesFont = *font;
+ else
+ settings->_dataValuesFont = QFont( "times", 1, QFont::Bold );
+ settings->_dataValuesUseFontRelSize = true;
+ settings->_dataValuesFontRelSize = 25;
+ settings->_dataValuesAutoColor = true; // !!!
+ settings->_dataValuesColor = QColor( Qt::black );
+ settings->_dataValuesBrush = QBrush( Qt::NoBrush );
+ // for values below zero:
+ settings->_dataValuesAnchorNegativePosition = KDChartEnums::PosTopCenter;
+ settings->_dataValuesAnchorNegativeAlign = Qt::AlignTop + Qt::AlignHCenter;
+ settings->_dataValuesAnchorNegativeDeltaX = 0;
+ settings->_dataValuesAnchorNegativeDeltaY = 50;
+ settings->_dataValuesNegativeRotation = KDCHART_TANGENTIAL_ROTATION;
+ // for values greater/equal zero:
+ settings->_dataValuesAnchorPositivePosition = KDChartEnums::PosTopCenter;
+ settings->_dataValuesAnchorPositiveAlign = Qt::AlignTop + Qt::AlignHCenter;
+ settings->_dataValuesAnchorPositiveDeltaX = 0;
+ settings->_dataValuesAnchorPositiveDeltaY = 50;
+ settings->_dataValuesPositiveRotation = KDCHART_TANGENTIAL_ROTATION;
+
+ settings->_dataValuesLayoutPolicy = KDChartEnums::LayoutPolicyRotate;
+ }
+ break;
+ case Ring: {
+ if ( font )
+ settings->_dataValuesFont = *font;
+ else
+ settings->_dataValuesFont = QFont( "times", 1, QFont::Bold );
+ settings->_dataValuesUseFontRelSize = true;
+ settings->_dataValuesFontRelSize = 25;
+ settings->_dataValuesAutoColor = true; // !!!
+ settings->_dataValuesColor = QColor( Qt::black );
+ settings->_dataValuesBrush = QBrush( Qt::NoBrush );
+ // for values below zero:
+ settings->_dataValuesAnchorNegativePosition = KDChartEnums::PosCenter;
+ settings->_dataValuesAnchorNegativeAlign = Qt::AlignCenter;
+ settings->_dataValuesAnchorNegativeDeltaX = 0;
+ settings->_dataValuesAnchorNegativeDeltaY = 10;
+ settings->_dataValuesNegativeRotation = KDCHART_TANGENTIAL_ROTATION;
+ // for values greater/equal zero:
+ settings->_dataValuesAnchorPositivePosition = KDChartEnums::PosCenter;
+ settings->_dataValuesAnchorPositiveAlign = Qt::AlignCenter;
+ settings->_dataValuesAnchorPositiveDeltaX = 0;
+ settings->_dataValuesAnchorPositiveDeltaY = 10;
+ settings->_dataValuesPositiveRotation = KDCHART_TANGENTIAL_ROTATION;
+
+ settings->_dataValuesLayoutPolicy = KDChartEnums::LayoutPolicyRotate;
+ }
+ break;
+
+ case Polar: {
+ settings->_dataValuesFontRelSize = 18;
+ if ( font )
+ settings->_dataValuesFont = *font;
+ else
+ settings->_dataValuesFont = QFont( "times", 1, QFont::Bold );
+ settings->_dataValuesUseFontRelSize = true;
+ settings->_dataValuesFontRelSize = 26;
+ settings->_dataValuesAutoColor = polarMarker(); // !!!
+ settings->_dataValuesColor = QColor( Qt::black );
+ settings->_dataValuesBrush = QBrush( Qt::NoBrush );
+
+ // for values below zero:
+ settings->_dataValuesAnchorNegativePosition = KDChartEnums::PosCenter;
+ settings->_dataValuesAnchorNegativeAlign = Qt::AlignCenter;
+ settings->_dataValuesAnchorNegativeDeltaX = 0;
+ settings->_dataValuesAnchorNegativeDeltaY = 0;
+ settings->_dataValuesNegativeRotation = 0;
+ // for values greater/equal zero:
+ settings->_dataValuesAnchorNegativePosition = KDChartEnums::PosCenter;
+ settings->_dataValuesAnchorNegativeAlign = Qt::AlignCenter;
+ settings->_dataValuesAnchorNegativeDeltaX = 0;
+ settings->_dataValuesAnchorNegativeDeltaY = 0;
+ settings->_dataValuesNegativeRotation = 0;
+
+ //settings->_dataValuesLayoutPolicy = KDChartEnums::LayoutPolicyShrinkFontSize;
+ //settings->_dataValuesFontRelSize = 26;
+ //setDefaultAxesTypes();
+ //finished = false; // use build-in default params, see KDChartParams.h::setPrintDataValues()
+ }
+ break;
+
+ default: {
+ qDebug( "IMPLEMENTATION ERROR: Unknown chartType in setPrintDataValues()" );
+ finished = false; // use build-in default params, see KDChartParams.h::setPrintDataValues()
+ }
+ }
+ }
+ if ( !finished ) {
+ settings->_useDefaultFontParams = false;
+
+ if ( font )
+ settings->_dataValuesFont = *font;
+ else
+ settings->_dataValuesFont = QFont( "times", 1, QFont::Bold );
+
+ uint theSize( UINT_MAX == size ? 14 : size );
+ settings->_dataValuesUseFontRelSize = ( 0 < theSize );
+ settings->_dataValuesFontRelSize = theSize;
+ if ( KDCHART_DATA_VALUE_AUTO_COLOR == color
+ && ( Polar != cType || polarMarker() ) ) {
+ settings->_dataValuesAutoColor = true; // !!!
+ settings->_dataValuesColor = QColor( Qt::black );
+ }
+ else {
+ settings->_dataValuesAutoColor = false;
+ if ( 0 == color )
+ settings->_dataValuesColor
+ = QColor( i ? Qt::darkBlue : Qt::black );
+ else
+ settings->_dataValuesColor = *color;
+ }
+ settings->_dataValuesBrush = Qt::NoBrush;
+ // for values below zero:
+ settings->_dataValuesAnchorNegativePosition = negativePosition;
+ settings->_dataValuesAnchorNegativeAlign = negativeAlign;
+ settings->_dataValuesAnchorNegativeDeltaX = negativeDeltaX;
+ settings->_dataValuesAnchorNegativeDeltaY = negativeDeltaY;
+ settings->_dataValuesNegativeRotation = negativeRotation;
+ // for values greater/equal zero:
+ settings->_dataValuesAnchorPositivePosition = positivePosition;
+ settings->_dataValuesAnchorPositiveAlign = positiveAlign;
+ settings->_dataValuesAnchorPositiveDeltaX = positiveDeltaX;
+ settings->_dataValuesAnchorPositiveDeltaY = positiveDeltaY;
+ settings->_dataValuesPositiveRotation = positiveRotation;
+
+ settings->_dataValuesLayoutPolicy = policy;
+ }
+ if ( 0 < chart )
+ settings = &_printDataValuesSettings2;
+ }
+ emit changed();
+}
+
+
+/**
+ \enum KDChartParams::SourceMode
+
+ The chart source mode.
+ Use \c setChartSourceMode to specify if and how any data
+ should be taken into account for a given chart.
+
+ \sa setChartSourceMode, chartSourceMode, setAdditionalChartType
+ */
+
+
+/**
+ Specifies the chart source mode of one or more datasets.
+ Use this to specify if and how any data should be taken
+ into account for a given chart. You may call this function
+ multiple times to specify how the different datasets are to
+ be used. Number of datasets is only limited by the data that
+ you actually provide to the chart widget. Usage of this method
+ is mandatory when specifying combinations of more than one
+ chart (e.g. via \c setAdditionalChartType() ).
+
+ \note If specifying <b>more than one dataset</b> for the very
+ same chart and the same source mode make sure they form
+ a contiguous <b>series</b>.<br>
+ It is not possible to use dataset 0..3 as DataEntry, dataset
+ 4 as AxisLabel and again dataset 5..6 as DataEntry for the
+ very same chart!<br>
+ Of course you could specify 0..3 as DataEntry for chart 0
+ while 5..6 would contain the data entries for chart 1
+ when specifying a widget showing two charts.
+
+ <b>Also note:</b><br>
+ Whenever you use \c setChartSourceMode() make sure not to
+ forget any of the datasets which you want to define: not
+ specifying a dataset would result in it being ignored.<br>
+ So the rule is: either don't call setChartSourceMode() at all
+ or call it for each dataset!
+
+ To quickly clear all such settings just might want to call
+ <b>setChartSourceMode( UnknownMode, KDCHART_ALL_DATASETS );</b>
+ without specifying a dataset number and without specifying
+ a chart number.<br>
+ However this KDCHART_ALL_DATASETS may only be used to
+ <b>clear</b> SourceMode settings - but not for defining the
+ SourceMode for all datasets - the above mentioned combination
+ with <b>UnknownMode</b> is the only way how to use
+ <b>KDCHART_ALL_DATASETS</b> here!
+
+ <b>Examples:</b>
+
+ \verbatim
+ setChartSourceMode( DataEntry, 2 );
+ \endverbatim
+ This would specify a simple chart obtaining its values from dataset 2.
+
+ \verbatim
+ setChartSourceMode( DataEntry, 0, 0, 0 );
+ setChartSourceMode( DataEntry, 3, 3, 1 );
+ \endverbatim
+ This would specify a two chart widget - the 1st obtaining its values
+ from dataset 0 and the 2nd taking the values from dataset 3.
+
+ \verbatim
+ setChartSourceMode( LegendText, 1, 1, 0 );
+ setChartSourceMode( AxisLabel, 2, 2, 0 );
+ setChartSourceMode( DataEntry, 3, 6, 0 );
+ setChartSourceMode( ExtraLinesAnchor, 7, 7, 0 );
+ setChartSourceMode( LegendText, 8, 8, 1 );
+ setChartSourceMode( AxisLabel, 9, 9, 1 );
+ setChartSourceMode( DataEntry, 10, 13, 1 );
+ \endverbatim
+ This would specify a two chart widget - the 1st obtaining its values
+ from datasets 3..6 and the 2nd taking the values from datasets 10..13.
+ Their respective legends and axes would take their values from
+ datasets 1 and 2 (or 8 and 9, resp.).
+ Additionally the 1st chart would use dataset 7 to determine the
+ horizontal (or vertical, resp.) position of any extra lines
+ that might be specified by KDChartPropertySet IDs assigned to
+ the cells in dataset 7.
+
+ \note If source mode is ExtraLinesAnchor all cells
+ of the respective datset will be ignored when the normal
+ cell representations (e.g. Bars or Lines) are drawn - these
+ cells will <em>only</em> be used as anchor points for any
+ extra lines that are specified with these cell's property sets.
+
+ When specifying \c ExtraLinesAnchor for more than one dataset
+ of the same chart make sure they form a contiguous row
+ <b>together</b> with the \c DataEntry dataset(s): e.g
+ you may use datasets 3..8 for DataEntry cells and datasets
+ 9..10 for ExtraLinesAnchor cells.
+ All datasets with mode DataEntry or ExtraLinesAnchor are taken
+ into account for calculation of the axes ranges and delimiters.
+
+ <P>
+
+ \param mode the way how to use information stored in this dataset.
+ \param dataset the dataset number to be used (or ignored, resp.).
+ Use \c KDCHART_ALL_DATASETS to indicate that information given
+ applies to all of the datasets.
+ \param dataset2 a second dataset number to be taken into account
+ (or ignored, resp.). Use this one together with the \dataset
+param to specify a range of datasets.
+\param chart the chart taking into account this dataset.
+Use this parameter only if more than one chart is to be displayed.
+By using KDCHART_ALL_CHARTS here you may specify that the dataset
+(or the range of datasets, resp.) is to be taken into account for
+all of the charts displayed.
+
+\sa SourceMode, chartSourceMode, findDataset
+\sa maxDatasetSourceMode, setAdditionalChartType
+*/
+void KDChartParams::setChartSourceMode( SourceMode mode,
+ uint dataset,
+ uint dataset2,
+ uint chart )
+{
+ if ( KDCHART_NO_DATASET != dataset
+ && KDCHART_ALL_DATASETS != dataset
+ && KDCHART_ALL_DATASETS != dataset2 ) {
+ uint i;
+ uint last = ( KDCHART_NO_DATASET == dataset2 ) ? dataset : dataset2;
+ for ( i = dataset; i <= last; ++i )
+ _dataSourceModeAndChart[ i ] = ModeAndChart( mode, chart );
+ _maxDatasetSourceMode = QMAX( _maxDatasetSourceMode, --i );
+ _setChartSourceModeWasUsed = true;
+ } else if ( UnknownMode == mode && dataset == KDCHART_ALL_DATASETS ) {
+ _dataSourceModeAndChart.clear();
+ _setChartSourceModeWasUsed = false;
+ }
+
+ emit changed();
+}
+
+
+/**
+ Retrieves usage information of a given dataset or a range of
+ datasets.
+
+ \note If you specify a range of datasets and not all of them
+ share the same SourceMode the return value will be \c UnknownMode
+ whereas in case of the dataset(s) not being used it will be \c DontUse.
+ Accordingly if you provide a chart pointer and not all the
+ datasets share the same chart the chart pointer will receive
+ the value KDCHART_UNKNOWN_CHART.<br>
+
+ <b>Also note:</b>
+ If \c setChartSourceMode() was not used at all
+ chartSourceMode() will return <b>DataEntry</b> no matter what
+ dataset number is specified.
+
+ <p>
+
+ \param dataset the dataset number to be looked at.
+ Use \c KDCHART_ALL_DATASETS to find out if all of the datasets share
+ the very same SourceMode.
+ \param dataset2 a second dataset number.
+ Use this one together with the \dataset param to look at a range of
+ datasets and find out if all of them share the very same SourceMode.
+ \param chart If this parameter points to an int the method will
+ provide you with the chart number that this dataset (or this range
+ of datasets, resp.) is taken into account for.
+
+ \sa SourceMode, setChartSourceMode, setAdditionalChartType
+ \sa maxDatasetSourceMode, findDataset
+ */
+KDChartParams::SourceMode KDChartParams::chartSourceMode( uint dataset,
+ uint dataset2,
+ uint* pChart ) const
+{
+ uint chart = KDCHART_UNKNOWN_CHART;
+ SourceMode mode = UnknownMode;
+
+ if ( _setChartSourceModeWasUsed ) {
+ if ( dataset <= _maxDatasetSourceMode
+ && ( KDCHART_NO_DATASET == dataset2
+ || dataset2 <= _maxDatasetSourceMode ) ) {
+
+ uint a, b;
+ if ( KDCHART_ALL_DATASETS == dataset ) {
+ a = 0;
+ b = UINT_MAX;
+ } else {
+ a = dataset;
+ b = KDCHART_NO_DATASET == dataset2 ? a : dataset2;
+ }
+
+ bool bStart = true;
+ ModeAndChartMap::ConstIterator it;
+ for( it = _dataSourceModeAndChart.find( a );
+ ( it != _dataSourceModeAndChart.end() ) && ( it.key() <= b );
+ ++it ){
+ if ( bStart ) {
+ mode = it.data().mode();
+ chart = it.data().chart();
+ bStart = false;
+ } else {
+ if ( mode != it.data().mode() )
+ mode = UnknownMode;
+ if ( chart != it.data().chart() )
+ chart = KDCHART_UNKNOWN_CHART;
+ }
+ }
+ }
+ } else {
+ mode = DataEntry;
+ chart = 0;
+ }
+ if ( pChart )
+ * pChart = chart;
+ return mode;
+}
+
+
+/**
+ Retrieves the dataset number or a range of datasets
+ being used with a given SourceMode for a given chart
+ or KDCHART_NO_DATASET if no dataset was specified for
+ that mode and that chart.
+
+ \note If \c setChartSourceMode() was not used at all
+ findDataset() will return true and set the dataset
+ to KDCHART_ALL_DATASETS when called for SourceMode
+ <b>DataEntry</b>. All other SourceModes will return false then.
+
+ \return True if at least one dataset was found.
+
+ \param mode the SourceMode to search for.
+ \param dataset the dataset number found (or the first
+ dataset number in case a series of datasets was found, resp.)
+ \param dataset2 the dataset number found (or the last
+ dataset number in case a series of datasets was found, resp.)
+ <b>Hint:</b> You may give the same variable both for
+ dataset and for dataset2, e.g. this makes sense in case you
+ are sure that findDataset will find only one dataset anyway.
+ \param chart the chart number that the dataset (or this range
+ of datasets, resp.) must have been defined for. If this is missing
+ findDataset assumes you are looking for datasets of the first chart.
+
+ \sa findDatasets, SourceMode, setChartSourceMode, chartSourceMode
+ \sa maxDatasetSourceMode, setAdditionalChartType
+ */
+bool KDChartParams::findDataset( SourceMode mode,
+ uint& dataset,
+ uint& dataset2,
+ uint chart ) const
+{
+ bool res = false;
+ dataset = KDCHART_NO_DATASET;
+ dataset2 = KDCHART_NO_DATASET;
+ if ( _setChartSourceModeWasUsed ) {
+ bool bStart = true;
+ ModeAndChartMap::ConstIterator it;
+ for ( it = _dataSourceModeAndChart.begin();
+ it != _dataSourceModeAndChart.end(); ++it ) {
+ if ( ( it.data().mode() == mode )
+ && ( ( KDCHART_ALL_CHARTS == chart )
+ || ( it.data().chart() == chart ) ) ) {
+ if ( bStart ) {
+ dataset = it.key();
+ bStart = false;
+ }
+ dataset2 = it.key();
+ res = true;
+ } else if ( !bStart )
+ return res;
+ }
+ } else if ( DataEntry == mode ) {
+ dataset = KDCHART_ALL_DATASETS;
+ dataset2 = KDCHART_ALL_DATASETS;
+ res = true;
+ }
+ return res;
+}
+
+
+/**
+ Retrieves the dataset number or a range of datasets
+ being used with one of two given SourceModes
+ for a given chart or KDCHART_NO_DATASET
+ if no dataset was specified for that mode and that chart.
+
+ If \c setChartSourceMode() was not used at all
+ findDataset() will return true and set the dataset
+ to KDCHART_ALL_DATASETS when either \c modeA or \c modeB
+ is <b>DataEntry</b>. All other SourceModes will return
+ false then.
+
+ \note If the found datasets do <em>not</em> form a
+ <b>contiguous series</b> the return value will be false
+ and the value of \c dataset will be KDCHART_NO_DATASET
+ and a comment will be written to stderr
+ (if KDChart was compiled in debug mode).
+
+ \return True if at least one dataset was found.
+
+ \param modeA one of the SourceModes to search for.
+ \param modeB the other one of the two SourceModes to search for.
+ \param dataset the dataset number found (or the first
+ dataset number in case a series of datasets was found, resp.)
+ \param dataset2 the dataset number found (or the last
+ dataset number in case a series of datasets was found, resp.)
+ <b>Hint:</b> You may give the same variable both for
+ dataset and for dataset2, e.g. this makes sense in case you
+ are sure that findDataset will find only one dataset anyway.
+ \param chart the chart number that the dataset (or this range
+ of datasets, resp.) must have been defined for. If this is missing
+ findDataset assumes you are looking for datasets of the first chart.
+
+ \sa findDataset, SourceMode, setChartSourceMode, chartSourceMode
+ \sa maxDatasetSourceMode, setAdditionalChartType
+ */
+bool KDChartParams::findDatasets( SourceMode modeA,
+ SourceMode modeB,
+ uint& dataset,
+ uint& dataset2,
+ uint chart ) const
+{
+ bool res = false;
+ dataset = KDCHART_NO_DATASET;
+ dataset2 = KDCHART_NO_DATASET;
+ uint dsA1, dsA2, dsB1, dsB2;
+ bool foundA = findDataset( modeA, dsA1, dsA2, chart );
+ bool foundB = findDataset( modeB, dsB1, dsB2, chart );
+ if( foundA || foundB ){
+ if( dsA1 == KDCHART_ALL_DATASETS || dsB1 == KDCHART_ALL_DATASETS ){
+ dataset = KDCHART_ALL_DATASETS;
+ dataset2 = KDCHART_ALL_DATASETS;
+ res = true;
+ }else{
+ if( foundA && foundB ){
+ if( QMIN(dsA2, dsB2) + 1 == QMAX(dsA1, dsB1) ){
+ dataset = QMIN(dsA1, dsB1);
+ dataset2 = QMAX(dsA2, dsB2);
+ res = true;
+ }else{
+ qDebug("ERROR in KDChartParams::findDatasets(): Datasets found are *not* a contiguous series.");
+ }
+ }else{
+ dataset = foundA ? dsA1 : dsB1;
+ dataset2 = foundA ? dsA2 : dsB2;
+ res = true;
+ }
+ }
+ }
+ return res;
+}
+
+
+/**
+ Specifies a color for a dataset. Note that if you define a color for a
+ dataset but not for a dataset with a lower number (and there is neither
+ a default value), the color for that dataset with the lower number will
+ be undefined. If you do not want any color, pass an invalid color
+ (i.e. a default-constructed QColor object). This is only useful
+ for chart types that have an outline (like bars or pies),
+ because you would not see anything otherwise.<br>
+ In charts that can only display one dataset (like pies), the specified
+ colors are used for the different values instead.
+
+ \param dataset the number of the dataset (or value for pies and similar
+ charts) for which the color is specified
+ \param color the color to use for this dataset/value
+ \sa setDataDefaultColors, setDataRainbowColors, setDataSubduedColors
+ \sa dataColor, maxDataColor
+ */
+void KDChartParams::setDataColor( uint dataset, QColor color )
+{
+ QColor shadow1;
+ QColor shadow2;
+ calculateShadowColors( color, shadow1, shadow2 );
+ _dataColors[ dataset ] = color;
+ _dataColorsShadow1[ dataset ] = shadow1;
+ _dataColorsShadow2[ dataset ] = shadow2;
+ _maxDatasetColor = QMAX( _maxDatasetColor, dataset );
+
+ emit changed();
+}
+
+/**
+ Specifies KD Chart's default colors for the datasets 0..11.
+
+ This method may be usefull to re-set the colors after changing the
+ colors of the datasets.
+
+ \sa setDataColor, setDataRainbowColors, setDataSubduedColors
+ \sa dataColor, maxDataColor
+ */
+void KDChartParams::setDataDefaultColors()
+{
+ setDataColor( 0, red );
+ setDataColor( 1, green );
+ setDataColor( 2, blue );
+ setDataColor( 3, cyan );
+ setDataColor( 4, magenta );
+ setDataColor( 5, yellow );
+ setDataColor( 6, darkRed );
+ setDataColor( 7, darkGreen );
+ setDataColor( 8, darkBlue );
+ setDataColor( 9, darkCyan );
+ setDataColor( 10, darkMagenta );
+ setDataColor( 11, darkYellow );
+}
+
+/**
+ Specifies a set of eight rainbow-like colors for the datasets 0..7
+ and sets the lighter versions of this colors to datasets 8..15.
+
+ This is a convenience method setting colors that look best on
+ a dark gray or black background.
+
+ \sa setDataColor, setDataDefaultColors, setDataSubduedColors
+ \sa dataColor, maxDataColor
+ */
+void KDChartParams::setDataRainbowColors()
+{
+ setDataColor( 0, QColor(255, 0,196) );
+ setDataColor( 1, QColor(255, 0, 96) );
+ setDataColor( 2, QColor(255, 128,64) );
+ setDataColor( 3, Qt::yellow );
+ setDataColor( 4, Qt::green );
+ setDataColor( 5, Qt::cyan );
+ setDataColor( 6, QColor( 96, 96,255) );
+ setDataColor( 7, QColor(160, 0,255) );
+ for( int i=8; i<16; ++i )
+ setDataColor( i, dataColor(i-8).light() );
+}
+
+/**
+ Specifies a set of eighteen subdued colors for the datasets 0..17.
+
+ This is a convenience method setting colors that is ideal for
+ area charts since the dark data value texts can be easily
+ read when printed onto such background colors.
+
+ \param ordered if true all eighteen colors will be set according
+ to their appearance in the color circle, if false they will be
+ arranged in a logical order making it very easy ti distinguish
+ two neighboring colors. Set this parameter to true if you want
+ your neighboring colors look quite similiar, the default is false.
+
+ \sa setDataColor, setDataDefaultColors, setDataRainbowColors
+ \sa dataColor, maxDataColor
+ */
+void KDChartParams::setDataSubduedColors( bool ordered )
+{
+static const int NUM_SUBDUEDCOLORS = 18;
+static const QColor SUBDUEDCOLORS[ NUM_SUBDUEDCOLORS ] = {
+ QColor( 0xe0,0x7f,0x70 ),
+ QColor( 0xe2,0xa5,0x6f ),
+ QColor( 0xe0,0xc9,0x70 ),
+ QColor( 0xd1,0xe0,0x70 ),
+ QColor( 0xac,0xe0,0x70 ),
+ QColor( 0x86,0xe0,0x70 ),
+ QColor( 0x70,0xe0,0x7f ),
+ QColor( 0x70,0xe0,0xa4 ),
+ QColor( 0x70,0xe0,0xc9 ),
+ QColor( 0x70,0xd1,0xe0 ),
+ QColor( 0x70,0xac,0xe0 ),
+ QColor( 0x70,0x86,0xe0 ),
+ QColor( 0x7f,0x70,0xe0 ),
+ QColor( 0xa4,0x70,0xe0 ),
+ QColor( 0xc9,0x70,0xe0 ),
+ QColor( 0xe0,0x70,0xd1 ),
+ QColor( 0xe0,0x70,0xac ),
+ QColor( 0xe0,0x70,0x86 ),
+};
+ if( ordered )
+ for(int i=0; i<NUM_SUBDUEDCOLORS; ++i)
+ setDataColor( i, SUBDUEDCOLORS[i] );
+ else{
+ setDataColor( 0, SUBDUEDCOLORS[ 0] );
+ setDataColor( 1, SUBDUEDCOLORS[ 5] );
+ setDataColor( 2, SUBDUEDCOLORS[10] );
+ setDataColor( 3, SUBDUEDCOLORS[15] );
+ setDataColor( 4, SUBDUEDCOLORS[ 2] );
+ setDataColor( 5, SUBDUEDCOLORS[ 7] );
+ setDataColor( 6, SUBDUEDCOLORS[12] );
+ setDataColor( 7, SUBDUEDCOLORS[17] );
+ setDataColor( 8, SUBDUEDCOLORS[ 4] );
+ setDataColor( 9, SUBDUEDCOLORS[ 9] );
+ setDataColor(10, SUBDUEDCOLORS[14] );
+ setDataColor(11, SUBDUEDCOLORS[ 1] );
+ setDataColor(12, SUBDUEDCOLORS[ 6] );
+ setDataColor(13, SUBDUEDCOLORS[11] );
+ setDataColor(14, SUBDUEDCOLORS[16] );
+ setDataColor(15, SUBDUEDCOLORS[ 3] );
+ setDataColor(16, SUBDUEDCOLORS[ 8] );
+ setDataColor(17, SUBDUEDCOLORS[13] );
+ }
+}
+
+
+void KDChartParams::calculateShadowColors( QColor color,
+ QColor& shadow1,
+ QColor& shadow2 ) const
+{
+ if ( !color.isValid() ) { // no fill color
+ shadow1 = QColor();
+ shadow2 = QColor();
+ } else {
+ int hue, saturation, value;
+ color.hsv( &hue, &saturation, &value );
+ double v = value;
+ v = v * 2.0 / 3.0 * shadowBrightnessFactor();
+ if ( 255.0 < v )
+ v = 255.0;
+ else if ( 1.0 > v )
+ v = 0.0;
+ shadow1.setHsv( hue, saturation, static_cast < int > ( v ) );
+ v = value;
+ v = v / 3.0 * shadowBrightnessFactor();
+ if ( 255.0 < v )
+ v = 255.0;
+ else if ( 1.0 > v )
+ v = 0.0;
+ shadow2.setHsv( hue, saturation, static_cast < int > ( v ) );
+ }
+}
+
+
+/**
+ Returns the color for a dataset. If no color has been defined for this
+ dataset and none for a higher dataset either, the number will be mapped
+ to the range of defined colors. If no color has been defined for this
+ dataset, but at least one for a higher dataset, the return value of
+ this method is undefined.
+
+ \param dataset the number of the dataset for which to return the color
+ \return the color for this dataset
+ \sa setDataColor, maxDataColor
+ */
+QColor KDChartParams::dataColor( uint dataset ) const
+{
+ uint index = dataset % (_maxDatasetColor+1);
+ if( _dataColors.find( index ) != _dataColors.end() )
+ return _dataColors[ index ];
+ else
+ return QColor(); // documentation says undefined
+}
+
+
+QString KDChartParams::dataRegionFrameAreaName( uint dataRow,
+ uint dataCol,
+ uint data3rd )
+{
+ return QString( "%1/%2/%3/%4" )
+ .arg( KDChartEnums::AreaChartDataRegion, 5 )
+ .arg( dataRow, 5 )
+ .arg( dataCol, 5 )
+ .arg( data3rd, 5 );
+}
+
+
+/**
+ Recomputes the shadow colors by iterating over all configured
+ data colors and reassigning the data colors with exactly the
+ same values which in turn triggers computation of the shadow
+ colors. Expensive if many data colors are set, but performance
+ is OK for typical cases.
+ */
+void KDChartParams::recomputeShadowColors()
+{
+ // Simply reassign the available colors; this will trigger
+ // recomputation of the shadow colors.
+ for( QMap<uint,QColor>::Iterator it = _dataColors.begin();
+ it != _dataColors.end(); ++it ) {
+ setDataColor( it.key(), it.data() );
+ }
+}
+
+
+
+
+/**
+ Returns the first shadow color for a dataset. This is the color that
+ is used to draw the top bars with 3D effects. It is somewhat
+ darker than the original data color. If no color has been defined for this
+ dataset and none for a higher dataset either, the number will be mapped
+ to the range of defined colors. If no color has been defined for this
+ dataset, but at least one for a higher dataset, the return value of
+ this method is undefined.
+
+ \param dataset the number of the dataset for which to return the color
+ \return the color for this dataset
+ \sa setDataColor, maxDataColor, dataShadow2Color
+ */
+QColor KDChartParams::dataShadow1Color( uint dataset ) const
+{
+ uint index = dataset % _maxDatasetColor;
+ if ( _threeDShadowColors )
+ if( _dataColorsShadow1.find( index ) != _dataColorsShadow1.end() )
+ return _dataColorsShadow1[ index ];
+ else
+ return QColor(); // documentation says undefined
+ else
+ if( _dataColors.find( index ) != _dataColors.end() )
+ return _dataColors[ index ];
+ else
+ return QColor(); // documentation says undefined
+}
+
+
+/**
+ Returns the second shadow color for a dataset. This is the color that
+ is used to draw the sides of bars with 3D effects. It is
+ darker than the original data color. If no color has been defined for this
+ dataset and none for a higher dataset either, the number will be mapped
+ to the range of defined colors. If no color has been defined for this
+ dataset, but at least one for a higher dataset, the return value of
+ this method is undefined.
+
+ \param dataset the number of the dataset for which to return the color
+ \return the color for this dataset
+ \sa setDataColor, maxDataColor, dataShadow1Color
+ */
+QColor KDChartParams::dataShadow2Color( uint dataset ) const
+{
+ uint index = dataset % _maxDatasetColor;
+ if ( _threeDShadowColors )
+ if( _dataColorsShadow2.find( index ) != _dataColorsShadow2.end() )
+ return _dataColorsShadow2[ index ];
+ else
+ return QColor(); // documentation says undefined
+ else
+ if( _dataColors.find( index ) != _dataColors.end() )
+ return _dataColors[ index ];
+ else
+ return QColor(); // documentation says undefined
+}
+
+
+/**
+ Set the default axis types for all the axes the user might activate for this chart:
+ \li Pie charts by default have no axes at all
+ \li Bar/Line/Area charts may have up to 8 axes (up to 2 at each side of the chart)
+ \li charts representing 3-dimensional data may have up to 12 axes
+
+ \note This function also specifies the default way how to calculate
+ the axis labels: abscissa starts with zero and counts by 1, ordinate
+ is calculating the labels automatically based upon the values found in
+ the associated dataset(s).
+ */
+void KDChartParams::setDefaultAxesTypes()
+{
+ // reset types of all axes
+ uint i = 0;
+ for ( i = 0; i < KDCHART_MAX_AXES; ++i )
+ setAxisType( i, KDChartAxisParams::AxisTypeUnknown );
+
+ // Note that abscissa axes should start labeling at the very
+ // first position and end at the last position when drawing
+ // area charts.
+ // Bar charts and line charts look better with their abscissa labels
+ // in the respective middle positions below each bar (or point, resp.)
+ for ( i = KDChartAxisParams::AxisPosSTART;
+ i <= KDChartAxisParams::AxisPosEND; ++i )
+ switch ( i ) {
+ // abscissa axes:
+ case KDChartAxisParams::AxisPosBottom:
+ case KDChartAxisParams::AxisPosTop:
+ case KDChartAxisParams::AxisPosBottom2:
+ case KDChartAxisParams::AxisPosTop2:
+ setAxisLabelsTouchEdges( i, Area == chartType() );
+ break;
+ // ordinate axes:
+ case KDChartAxisParams::AxisPosLeft:
+ case KDChartAxisParams::AxisPosRight:
+ case KDChartAxisParams::AxisPosLeft2:
+ case KDChartAxisParams::AxisPosRight2:
+ setAxisLabelsTouchEdges( i, true ); //Polar != chartType() );
+ break;
+ // additional axes for charts representing 3-dimensional data:
+ case KDChartAxisParams::AxisPosLowerRightEdge:
+ case KDChartAxisParams::AxisPosLowerLeftEdge:
+ case KDChartAxisParams::AxisPosLowerRightEdge2:
+ case KDChartAxisParams::AxisPosLowerLeftEdge2:
+ setAxisLabelsTouchEdges( i, false );
+ break;
+ default: {
+ qDebug( "IMPLEMENTATION ERROR: axis type missing in KDChartParams::setDefaultAxesTypes()" );
+ Q_ASSERT( !this );
+ }
+ }
+
+ // set default axis types according to chart type
+ switch ( chartType() ) {
+ case NoType:
+ break;
+ case Bar:
+ case Line:
+ case Area:
+ // default axes
+ setAxisType( KDChartAxisParams::AxisPosBottom,
+ KDChartAxisParams::AxisTypeEAST );
+ setAxisShowGrid( KDChartAxisParams::AxisPosBottom,
+ true );
+ setAxisType( KDChartAxisParams::AxisPosLeft,
+ KDChartAxisParams::AxisTypeNORTH );
+ setAxisShowGrid( KDChartAxisParams::AxisPosLeft,
+ true );
+ // 'other side' axes
+ setAxisType( KDChartAxisParams::AxisPosTop,
+ KDChartAxisParams::AxisTypeEAST );
+ setAxisType( KDChartAxisParams::AxisPosRight,
+ KDChartAxisParams::AxisTypeNORTH );
+ // additional, 2nd axes
+ setAxisType( KDChartAxisParams::AxisPosBottom2,
+ KDChartAxisParams::AxisTypeEAST );
+ setAxisType( KDChartAxisParams::AxisPosLeft2,
+ KDChartAxisParams::AxisTypeNORTH );
+ // additional, 2nd axes for 'other' sides
+ setAxisType( KDChartAxisParams::AxisPosTop2,
+ KDChartAxisParams::AxisTypeEAST );
+ setAxisType( KDChartAxisParams::AxisPosRight2,
+ KDChartAxisParams::AxisTypeNORTH );
+
+ // Specify default numbering information
+ // for all 'non-ordinate' axes (this are the X axes):
+ //
+ // axisSteadyValueCalc flag is set to false
+ // Start value 1
+ // End value following the number of entries
+ // in the associated dataset(s)
+ // Delta value 1.0
+ // and dont show any Digits behind the comma.
+ setAxisLabelTextParams( KDChartAxisParams::AxisPosBottom, false,
+ 1.0,
+ KDCHART_AXIS_LABELS_AUTO_LIMIT,
+ 1.0, 0 );
+ setAxisLabelTextParams( KDChartAxisParams::AxisPosTop, false,
+ 1.0,
+ KDCHART_AXIS_LABELS_AUTO_LIMIT,
+ 1.0, 0 );
+ setAxisLabelTextParams( KDChartAxisParams::AxisPosBottom2, false,
+ 1.0,
+ KDCHART_AXIS_LABELS_AUTO_LIMIT,
+ 1.0, 0 );
+ setAxisLabelTextParams( KDChartAxisParams::AxisPosTop2, false,
+ 1.0,
+ KDCHART_AXIS_LABELS_AUTO_LIMIT,
+ 1.0, 0 );
+
+ // no need to specify numbering information for
+ // the ordinate-axes since the default auto-calc
+ // feature is fine for here.
+
+ break;
+
+ // Code for charts representing 3-dimensional data.
+
+ /*
+
+ // ( not active since there are no such charts yet )
+
+ case KDChartParams::BarMatrix:
+ // default axes
+ setAxisType( KDChartAxisParams::AxisPosBottom,
+ KDChartAxisParams::AxisTypeEAST );
+ setAxisType( KDChartAxisParams::AxisPosLowerRightEdge,
+ KDChartAxisParams::AxisTypeNORTH );
+ setAxisType( KDChartAxisParams::AxisPosLeft,
+ KDChartAxisParams::AxisTypeUP );
+ // 'other side' axes
+ setAxisType( KDChartAxisParams::AxisPosTop,
+ KDChartAxisParams::AxisTypeEAST );
+ setAxisType( KDChartAxisParams::AxisPosLowerLeftEdge,
+ KDChartAxisParams::AxisTypeNORTH );
+ setAxisType( KDChartAxisParams::AxisPosRight,
+ KDChartAxisParams::AxisTypeUP );
+ // additional, 2nd axes
+ setAxisType( KDChartAxisParams::AxisPosBottom2,
+ KDChartAxisParams::AxisTypeEAST );
+ setAxisType( KDChartAxisParams::AxisPosLowerRightEdge2,
+ KDChartAxisParams::AxisTypeNORTH );
+ setAxisType( KDChartAxisParams::AxisPosLeft2,
+ KDChartAxisParams::AxisTypeUP );
+ // additional, 2nd axes for 'other' sides
+ setAxisType( KDChartAxisParams::AxisPosTop2,
+ KDChartAxisParams::AxisTypeEAST );
+ setAxisType( KDChartAxisParams::AxisPosLowerLeftEdge2,
+ KDChartAxisParams::AxisTypeNORTH );
+ setAxisType( KDChartAxisParams::AxisPosRight2,
+ KDChartAxisParams::AxisTypeUP );
+
+ // Specify default numbering information
+ // for all 'non-ordinate' axes (this are the X and the Y axes):
+ // Start vaule 1
+ // End value following the number of entries
+ // in the associated dataset(s)
+ // Delta value 1.0
+ // and don't show any Digits behind the comma.
+ setAxisLabelTextParams( KDChartAxisParams::AxisPosBottom, false,
+ 1.0, KDCHART_AXIS_LABELS_AUTO_LIMIT, 1.0, 0 );
+ setAxisLabelTextParams( KDChartAxisParams::AxisPosTop, false,
+ 1.0, KDCHART_AXIS_LABELS_AUTO_LIMIT, 1.0, 0 );
+ setAxisLabelTextParams( KDChartAxisParams::AxisPosLowerRightEdge,
+ false,
+ 1.0, KDCHART_AXIS_LABELS_AUTO_LIMIT, 1.0, 0 );
+ setAxisLabelTextParams( KDChartAxisParams::AxisPosLowerLeftEdge,
+ false,
+ 1.0, KDCHART_AXIS_LABELS_AUTO_LIMIT, 1.0, 0 );
+ setAxisLabelTextParams( KDChartAxisParams::AxisPosBottom2, false,
+ 1.0, KDCHART_AXIS_LABELS_AUTO_LIMIT, 1.0, 0 );
+ setAxisLabelTextParams( KDChartAxisParams::AxisPosTop2, false,
+ 1.0, KDCHART_AXIS_LABELS_AUTO_LIMIT, 1.0, 0 );
+ setAxisLabelTextParams(KDChartAxisParams::AxisPosLowerRightEdge2,
+ false,
+ 1.0, KDCHART_AXIS_LABELS_AUTO_LIMIT, 1.0, 0 );
+ setAxisLabelTextParams( KDChartAxisParams::AxisPosLowerLeftEdge2,
+ false,
+ 1.0, KDCHART_AXIS_LABELS_AUTO_LIMIT, 1.0, 0 );
+
+ false,
+ 1.0, KDCHART_AXIS_LABELS_AUTO_LIMIT, 1.0, 0 );
+
+ // no need to specify numbering information for
+ // the ordinate-axes since the default auto-calc
+ // feature is fine for here.
+
+ break;
+ */
+
+ case KDChartParams::Pie:
+ case KDChartParams::Ring:
+ // by default there are no axes defined for pie and ring charts
+ break;
+ case KDChartParams::Polar:
+ setAxisType( KDChartAxisParams::AxisPosSaggital,
+ KDChartAxisParams::AxisTypeEAST );
+ setAxisType( KDChartAxisParams::AxisPosCircular,
+ KDChartAxisParams::AxisTypeNORTH );
+ setAxisLabelsVisible( KDChartAxisParams::AxisPosSaggital, true );
+ setAxisLabelsFont( KDChartAxisParams::AxisPosSaggital,
+ QFont( "helvetica", 1, QFont::Bold ),
+ -30,
+ Qt::darkBlue );
+ setAxisLabelsVisible( KDChartAxisParams::AxisPosCircular, true );
+ setAxisLabelsFont( KDChartAxisParams::AxisPosCircular,
+ QFont( "helvetica", 1, QFont::Bold ),
+ -22,
+ Qt::darkBlue );
+ setPolarRotateCircularLabels( false );
+ break;
+ default: {
+ qDebug( "IMPLEMENTATION ERROR: type missing in KDChartParams::setDefaultAxesTypes()" );
+ Q_ASSERT( !this );
+ }
+ }
+
+ emit changed();
+}
+
+
+/**
+ activate the default axis types for this chart:
+ \li Pie charts by default have no axes at all
+ \li Bar/Line/Area by default have 2 axes: the abscissa and the ordinate
+ \li charts representing 3-dimensional data by default have 3 axes
+ */
+void KDChartParams::activateDefaultAxes()
+{
+ // deactivate all axes: specifying KDCHART_NO_DATASET will
+ // also remove their visability flag
+ for ( uint i = 0; i < KDCHART_MAX_AXES; ++i )
+ setAxisDatasets( i, KDCHART_NO_DATASET );
+
+ switch ( chartType() ) {
+ case NoType:
+ break;
+ case Bar:
+ case Line:
+ case Area:
+ setAxisVisible( KDChartAxisParams::AxisPosBottom, true );
+ setAxisDatasets( KDChartAxisParams::AxisPosBottom, KDCHART_ALL_DATASETS );
+ setAxisVisible( KDChartAxisParams::AxisPosLeft, true );
+ setAxisDatasets( KDChartAxisParams::AxisPosLeft, KDCHART_ALL_DATASETS );
+ /* test:
+ setAxisVisible( KDChartAxisParams::AxisPosTop, true );
+ setAxisDatasets(KDChartAxisParams::AxisPosTop, KDCHART_ALL_DATASETS );
+ setAxisVisible( KDChartAxisParams::AxisPosRight, true );
+ setAxisDatasets(KDChartAxisParams::AxisPosRight, KDCHART_ALL_DATASETS );
+
+ setAxisVisible( KDChartAxisParams::AxisPosBottom2, true );
+ setAxisDatasets(KDChartAxisParams::AxisPosBottom2, KDCHART_ALL_DATASETS );
+ setAxisVisible( KDChartAxisParams::AxisPosLeft2, true );
+ setAxisDatasets(KDChartAxisParams::AxisPosLeft2, KDCHART_ALL_DATASETS );
+
+ setAxisVisible( KDChartAxisParams::AxisPosTop2, true );
+ setAxisDatasets(KDChartAxisParams::AxisPosTop2, KDCHART_ALL_DATASETS );
+ setAxisVisible( KDChartAxisParams::AxisPosRight2, true );
+ setAxisDatasets(KDChartAxisParams::AxisPosRight2, KDCHART_ALL_DATASETS );
+ */
+ break;
+ // Code for charts representing 3-dimensional data.
+
+ /*
+
+ // ( not active since there are no such charts yet )
+
+ case KDChartParams::BarMatrix:
+ setAxisVisible( KDChartAxisParams::AxisPosBottom, true );
+ setAxisDatasets(KDChartAxisParams::AxisPosBottom, KDCHART_ALL_DATASETS );
+ setAxisVisible( KDChartAxisParams::AxisPosLeft, true );
+ setAxisDatasets(KDChartAxisParams::AxisPosLeft, KDCHART_ALL_DATASETS );
+ setAxisVisible( KDChartAxisParams::AxisPosLowerRightEdge, true );
+ setAxisDatasets(KDChartAxisParams::AxisPosLowerRightEdge,
+ KDCHART_ALL_DATASETS);
+ break;
+ */
+ case KDChartParams::Pie:
+ case KDChartParams::Ring:
+ case KDChartParams::Polar:
+ // by default there are no axes defined for pie, ring, and polar charts
+ break;
+ default: {
+ qDebug( "IMPLEMENTATION ERROR: type missing in KDChartParams::activateDefaultAxes()" );
+ Q_ASSERT( !this );
+ }
+ }
+}
+
+
+
+
+
+
+
+
+/**
+ \fn KDChartParams::setOptimizeOutputForScreen(bool)
+
+ Specify whether drawing should be optimized for (low resolution)
+ screen output or whether other routines should be used to obtain
+ best quality when using a printer.
+
+ \note The default of this flag is TRUE, so make sure to deactivate
+ it before painting your KDChart onto a QPrinter device!
+
+ \note This setting is NOT stored together with the other parameters,
+ it is recommended to set the flag each time when the drawing targed
+ (printer or screen, resp) is changed.
+
+ \sa optimizeOutputForScreen
+ */
+
+
+/**
+ \fn bool KDChartParams::optimizeOutputForScreen() const
+ Returns whether drawing is optimized for (low resolution)
+ screen output (this is the default) or whether other routines
+ are used to obtain best quality when using a printer.
+
+ \sa setOptimizeOutputForScreen
+ */
+
+
+/**
+ Specifies the distance between the chart and the left border of the
+ painter area. If \c leading is a negative value it is interpreted
+ as per-mille value of the painter area, the true offset will then
+ be calculated dynamically at drawing time.
+
+ \sa setGlobalLeading, setGlobalLeadingTop, setGlobalLeadingRight,
+ setGlobalLeadingBottom
+ \sa globalLeadingLeft, globalLeadingTop, globalLeadingRight,
+ globalLeadingBottom
+ */
+void KDChartParams::setGlobalLeading( int left, int top, int right, int bottom )
+{
+ _globalLeadingLeft = left;
+ _globalLeadingTop = top;
+ _globalLeadingRight = right;
+ _globalLeadingBottom = bottom;
+ emit changed();
+}
+
+
+/**
+ \fn void KDChartParams::setGlobalLeadingLeft( int )
+
+ Specifies the distance between the chart and the left border of the
+ painter area. If \c leading is a negative value it is interpreted
+ as per-mille value of the painter area, the true offset will then
+ be calculated dynamically at drawing time.
+
+ \sa setGlobalLeading, setGlobalLeadingTop, setGlobalLeadingRight,
+ setGlobalLeadingBottom
+ \sa globalLeadingLeft, globalLeadingTop, globalLeadingRight,
+ globalLeadingBottom
+ */
+
+
+/**
+ \fn void KDChartParams::setGlobalLeadingTop( int )
+
+ Specifies the distance between the chart and the upper border of
+ the painter area. If \c leading is a negative value it is
+ interpreted as per-mille value of the painter area, the true offset
+ will then be calculated dynamically at drawing time.
+
+ \sa setGlobalLeading, setGlobalLeadingLeft, setGlobalLeadingRight,
+ setGlobalLeadingBottom
+ \sa globalLeadingLeft, globalLeadingTop, globalLeadingRight,
+ globalLeadingBottom
+ */
+
+
+/**
+ \fn void KDChartParams::setGlobalLeadingRight( int )
+
+ Specifies the distance between the chart and the right border
+ of the painter area. If \c leading is a negative value it is
+ interpreted as per-mille value of the painter area, the true
+ offset will then be calculated dynamically at drawing time.
+
+ \sa setGlobalLeading, setGlobalLeadingLeft, setGlobalLeadingTop,
+ setGlobalLeadingBottom
+ \sa globalLeadingLeft, globalLeadingTop, globalLeadingRight,
+ globalLeadingBottom
+ */
+
+
+/**
+ \fn void KDChartParams::setGlobalLeadingBottom( int )
+
+ Specifies the distance between the chart and the lower border of
+ the painter area. If \c leading is a negative value it is
+ interpreted as per-mille value of the painter area, the true offset
+ will then be calculated dynamically at drawing time.
+
+ \sa setGlobalLeading, setGlobalLeadingLeft, setGlobalLeadingTop,
+ setGlobalLeadingRight
+ \sa globalLeadingLeft, globalLeadingTop, globalLeadingRight,
+ globalLeadingBottom
+ */
+
+
+/**
+ \fn int KDChartParams::globalLeadingLeft() const
+
+ Return the distance between the chart and the left border of the
+ painter area. If \c leading is a negative value it is interpreted
+ as per-mille value of the painter area, the true offset will then
+ be calculated dynamically at drawing time.
+
+ \sa setGlobalLeading, setGlobalLeadingLeft, setGlobalLeadingTop,
+ setGlobalLeadingRight, setGlobalLeadingBottom
+ \sa globalLeadingTop, globalLeadingRight, globalLeadingBottom
+ */
+
+
+/**
+ \fn KDChartParams::globalLeadingTop() const
+
+ Return the distance between the chart and the upper border of the
+ painter area. If \c leading is a negative value it is interpreted
+ as per-mille value of the painter area, the true offset will then
+ be calculated dynamically at drawing time.
+
+ \sa setGlobalLeading, setGlobalLeadingLeft, setGlobalLeadingTop,
+ setGlobalLeadingRight, setGlobalLeadingBottom
+ \sa globalLeadingLeft, globalLeadingRight, globalLeadingBottom
+ */
+
+
+/**
+ \fn KDChartParams::globalLeadingRight() const
+
+ Return the distance between the chart and the right border of the
+ painter area. If \c leading is a negative value it is interpreted
+ as per-mille value of the painter area, the true offset will then
+ be calculated dynamically at drawing time.
+
+ \sa setGlobalLeading, setGlobalLeadingLeft, setGlobalLeadingTop,
+ setGlobalLeadingRight, setGlobalLeadingBottom
+ \sa globalLeadingLeft, globalLeadingTop, globalLeadingBottom
+ */
+
+
+/**
+ \fn int KDChartParams::globalLeadingBottom() const
+
+ Return the distance between the chart and the lower border of the
+ painter area. If \c leading is a negative value it is interpreted
+ as per-mille value of the painter area, the true offset will then
+ be calculated dynamically at drawing time.
+
+ \sa setGlobalLeading, setGlobalLeadingLeft, setGlobalLeadingTop,
+ setGlobalLeadingRight, setGlobalLeadingBottom
+ \sa globalLeadingLeft, globalLeadingTop, globalLeadingRight
+ */
+
+
+/**
+ \fn void KDChartParams::setFrame( uint, const KDFrame&, int, int,
+ int, int, bool, bool )
+
+ \ifnot v200
+ \deprecated Feature scheduled for future release, at present not implemented.
+ \else
+ Specify the frame settings to be used for one of the chart areas.
+
+ The names and the meaning of the areas are explained with the enum
+ AreaName. The KDFrame class is explained in detail here: KDFrame
+ <b>Note however:</b> The \c innerRect settings of this KDFrame will
+ be ignored since position and size of this frame will be calculated
+ dynamically based upon the AreaName!
+
+ \param area The area to be surrounded by a frame.
+ \param outerGap The distance between the frame and the surrounding
+ parts of the chart.
+ \param innerGap The distance between the frame and the inner area.
+ \param addFrameWidthToLayout Specifies whether the inner area will
+ shrink the area AND its frame will occupy the same space of the
+ chart as the area would occupy if no frame were drawn. If false,
+ the frame is drawn around the area without taking care not to
+ override other content of the chart.
+
+ \note An easier way to specify a frame setting is selecting a pre-defined
+ setting using the setSimpleFrame methode.
+
+ \sa setSimpleFrame, frameSettings, removeFrame
+ \endif
+ */
+
+/**
+ \fn void KDChartParams::setSimpleFrame( uint, int, int, int, int,
+ bool, bool, KDFrame::SimpleFrame, int, int, QPen, QBrush, const
+ QPixmap*, KDFrame::BackPixmapMode, int, KDFrame::CornerName )
+
+ Select a pre-defined frame setting to be used for one of the chart areas.
+
+ \param area The area to be surrounded by a frame.
+ \param outerGap The distance between the frame and the surrounding
+ parts of the chart.
+ \param innerGap The distance between the frame and the inner area.
+ \if v200
+ \param addFrameWidthToLayout Specifies whether the inner area will
+ shrink the area AND its frame will occupy the same space of the
+ chart as the area would occupy if no frame were drawn. If false,
+ the frame is drawn around the area without taking care not to
+ override other content of the chart.
+
+ The parameters specifying the pre-defined frame settings are
+ defined here: KDFrame::setSimpleFrame.
+ \sa setFrame, frameSettings
+ \else
+ \param addFrameWidthToLayout For internal use - must be \c true.
+ \param addFrameHeightToLayout For internal use - must be \c true.
+ \param simpleFrame For internal use - must be \c KDFrame::FrameFlat.
+ \param lineWidth For internal use - must be \c 1.
+ \param midLineWidth For internal use - must be \c 0.
+ \param pen The pen to be used for drawing the four frame border lines.
+ \param background The brush to be used for painting the frame background.
+ \param backPixmap The picture to be displayed as background image
+ of the frame.
+ \param backPixmapMode The way how backPixmap is to be modified to
+ fill the frame, these are possible:
+ \li \c KDFrame::PixCentered Image will not be scaled nor stretched
+ but shown in original size.
+ \li \c KDFrame::PixScaled Image will be scaled until it's height or
+ it's width match the frame's height (or width, resp.) - whichever
+ comes first - but image proportions will be preserved.
+ \li \c KDFrame::PixStretched Image will be stretched to have the
+ same height and the same width as the frame - normally this results
+ in changing the original image proportions.
+ \param shadowWidth For internal use - do not set this parameter or
+ set it to \c 0.
+ \param sunPos For internal use - do not set this parameter or set
+ it to \c KDFrame::CornerTopLeft.
+ \endif
+
+ \sa removeFrame
+ */
+
+
+/**
+ \fn void KDChartParams::setDataRegionFrame( uint, uint, uint, int, int, int, int,
+ bool, bool, KDFrame::SimpleFrame, int, int, QPen, QBrush, const
+ QPixmap*, KDFrame::BackPixmapMode, int, KDFrame::CornerName )
+
+ Select a pre-defined frame setting to be used for one of the data representations
+ (e.g. to have the frame surrounding one of the bars in a Bar chart).
+
+ \note KDChart currently supports specifying data frames without background only,
+ it is not possible to draw a special background behind a data representation.
+
+ \param dataRow The table row of the cell to be surrounded by a frame.
+ \param dataCol The table column of the cell.
+ \param data3rd The third table coordinate of the cell (parameter not used, its value will be ignored, set to 0, reserved for future use).
+ \param innerGap The distance between the frame and the inner area.
+ \if v200
+ \param addFrameWidthToLayout Specifies whether the inner area will
+ shrink the area AND its frame will occupy the same space of the
+ chart as the area would occupy if no frame were drawn. If false,
+ the frame is drawn around the area without taking care not to
+ override other content of the chart.
+
+ The parameters specifying the pre-defined frame settings are
+ defined here: KDFrame::setSimpleFrame.
+ \sa setFrame, frameSettings
+ \else
+ \param addFrameWidthToLayout For internal use - must be \c true.
+ \param addFrameHeightToLayout For internal use - must be \c true.
+ \param simpleFrame For internal use - must be \c KDFrame::FrameFlat.
+ \param lineWidth For internal use - must be \c 1.
+ \param midLineWidth For internal use - must be \c 0.
+ \param pen The pen to be used for drawing the four frame border lines.
+ \param shadowWidth For internal use - do not set this parameter or
+ set it to \c 0.
+ \param sunPos For internal use - do not set this parameter or set
+ it to \c KDFrame::CornerTopLeft.
+ \endif
+ */
+
+
+/**
+ \fn bool KDChartParams::moveDataRegionFrame( uint, uint, uint, uint, uint, uint )
+
+ Move a frame that was previously specified using setDataRegionFrame
+ to another location: moves the frame from cell[ oldDataRow, oldDataCol ]
+ to cell[ newDataRow, newDataCol ] without changing looking of the frame,
+ or just removes the frame entirely.
+
+ \param oldDataRow The table row of the frame to be removed.
+ \param oldDataCol The table column of the frame to be removed.
+ \param oldData3rd The third table coordinate of the old cell (parameter not used, its value will be ignored, set to 0, reserved for future use).
+ \param newDataRow The table row of the cell to be framed instead, or KDCHART_NO_DATASET if the frame is to be removed
+ without framing another cell then.
+ \param newDataCol The table column of the cell to be framed instead.
+ \param newData3rd The third table coordinate of the new cell (parameter not used, its value will be ignored, set to 0, reserved for future use).
+
+ \note Using KDCHART_NO_DATASET for the newDataRow parameter will not
+ result in returning FALSE because it is an allowed action: the frame is just removed then.
+
+ \return TRUE if the frame could be moved or was removed; FALSE if either there was no frame around the old cell or the target cell does not exist.
+ */
+bool KDChartParams::moveDataRegionFrame( uint oldDataRow,
+ uint oldDataCol,
+ uint, // important: we ignore the data3rd parameter for now!
+ uint newDataRow,
+ uint newDataCol,
+ uint// important: we ignore the data3rd parameter for now!
+ )
+{
+ const QString oldKey( dataRegionFrameAreaName( oldDataRow, oldDataCol, 0 ) ); // oldData3rd ) );
+ KDChartFrameSettings* it = _areaDict.find( oldKey );
+ bool bFound = ( it != 0 );
+ if( bFound ){
+ if( KDCHART_NO_DATASET != newDataRow ){
+ KDChartFrameSettings* frame = new KDChartFrameSettings;
+ KDChartFrameSettings::deepCopy( *frame, *it );
+ frame->setDataRow( newDataRow );
+ frame->setDataCol( newDataCol );
+ frame->setData3rd( 0 ); // newData3rd );
+ _areaDict.setAutoDelete( TRUE );
+ _areaDict.replace(
+ dataRegionFrameAreaName( newDataRow, newDataCol, 0 ), //data3rd 5 ),
+ frame );
+ }
+ _areaDict.remove( oldKey );
+ emit changed();
+ }
+ return bFound;
+}
+
+/**
+ \var KDChartParams::CustomBoxDict
+
+ The type that stores the custom boxes in a chart.
+ */
+
+/**
+ Return the frame settings of one of the chart areas.
+
+ \sa nextFrameSettings, setSimpleFrame, setFrame, removeFrame
+ */
+const KDChartParams::KDChartFrameSettings* KDChartParams::frameSettings( uint area,
+ bool& bFound,
+ int* pIterIdx ) const
+{
+ if( pIterIdx )
+ *pIterIdx = 0;
+ const QString key( QString( "%1/-----/-----/-----" ).arg( area, 5 ) );
+ KDChartFrameSettings* it = _areaDict.find( key );
+ bFound = ( it != 0 );
+ if( bFound )
+ return it;
+ else if( pIterIdx ){
+ QString keyStart( key.left(6) );
+ QDictIterator<KDChartFrameSettings> it2( _areaDict );
+ for( ; it2.current(); ++it2 ){
+ if( it2.currentKey().startsWith( keyStart ) ){
+ bFound = true;
+ return it2.current();
+ }
+ ++*pIterIdx;
+ }
+ }
+ return &_noFrameSettings;
+}
+
+
+/**
+ Remove the last frame, that was specified for this chart area.
+ If you have more than one frame attached to the same area,
+ make sure to call this method repeatedly, if you want
+ to remove all of them.
+
+ \note This method can be used to remove frames, that were specified
+ via setFrame (or via setSimpleFrame, resp.), but if can not be used
+ to remove frames, that were specified using setDataRegionFrame.
+
+ \sa nextFrameSettings, setSimpleFrame, setFrame
+ */
+bool KDChartParams::removeFrame( uint area )
+{
+ return _areaDict.remove( QString( "%1/-----/-----/-----" ).arg( area, 5 ) );
+}
+
+
+/**
+ Return the next frame settings specified for the same area type
+ as the frame that was retrieved by previous calls of \c frameSettings()
+ or \c nextFrameSettings().
+
+ \sa setDataRegionFrame, frameSettings
+ */
+const KDChartParams::KDChartFrameSettings* KDChartParams::nextFrameSettings( bool& bFound,
+ int* pIterIdx ) const
+{
+ bFound = false;
+ if( pIterIdx ){
+ int i=0;
+ QDictIterator<KDChartFrameSettings> it( _areaDict );
+ for( ; it.current(); ++it ){
+ if( *pIterIdx == i )
+ break;
+ ++i;
+ }
+ if( *pIterIdx == i ){
+ QString keyStart( it.currentKey().left(6) );
+ ++it;
+ for( ; it.current(); ++it ){
+ ++*pIterIdx;
+ if( it.currentKey().startsWith( keyStart ) ){
+ bFound = true;
+ return it.current();
+ }
+ }
+ }
+ }
+ return &_noFrameSettings;
+}
+
+
+/**
+ Add a new custom box to the list of boxes.
+ To remove this box from the list lateron just call removeCustomBox
+ with the index that was returned by insertCustomBox.
+
+ \sa removeCustomBox, removeAllCustomBoxes, customBox, maxCustomBoxIdx
+ */
+uint KDChartParams::insertCustomBox( const KDChartCustomBox & box )
+{
+ _customBoxDict.setAutoDelete( true );
+ uint newIdx;
+ if( _customBoxDictMayContainHoles ){
+ _customBoxDictMayContainHoles = false;
+ const uint maxIndex = maxCustomBoxIdx();
+ newIdx = 1 + maxIndex;
+ for( uint idx = 0; idx <= maxIndex; ++idx ) {
+ if( ! _customBoxDict.find( idx ) ) {
+ newIdx = idx;
+ _customBoxDictMayContainHoles = true; // we found a hole, so there might be more of them
+ break;
+ }
+ }
+ }else{
+ newIdx = _customBoxDict.count();
+ }
+ _customBoxDict.insert( newIdx, box.clone() );
+ emit changed();
+ return newIdx;
+}
+
+
+/**
+ Remove a custom box from the list of boxes.
+ Please fill in the index parameter with the value
+ that was returned by insertCustomBox.
+
+ \note This method also removes the last frame, that was attached to this
+ box (if any), so the only reason for calling removeFrame() manually would
+ be, that you have specified more than one frame for this box.
+
+
+ \sa removeAllCustomBoxes, insertCustomBox, customBox, maxCustomBoxIdx
+ */
+bool KDChartParams::removeCustomBox( const uint & idx )
+{
+ const bool bFound = _customBoxDict.remove( idx );
+ if( bFound ){
+ // also remove any frame, that was attached to this box
+ removeFrame( KDChartEnums::AreaCustomBoxesBASE + idx );
+ }
+ _customBoxDictMayContainHoles = true;
+ emit changed();
+ return bFound;
+}
+
+
+/**
+ \fn void KDChartParams::removeAllCustomBoxes()
+ Remove all custom boxes from the list of boxes.
+
+ \sa removeCustomBox, insertCustomBox, customBox, maxCustomBoxIdx
+ */
+
+
+/**
+ Retrieve a const pointer to a custom box from the list.
+ You may fill in the index parameter with the value
+ that was returned by insertCustomBox, or you may use a numerical value,
+ e.g. when iterating from zero up to maxCustomBoxIdx().
+
+ \return Zero if the custom box has been removed by calling removeCustomBox.
+
+ \sa insertCustomBox customBoxRef, removeCustomBox, removeAllCustomBoxes, maxCustomBoxIdx
+ */
+const KDChartCustomBox* KDChartParams::customBox( uint box ) const
+{
+ return _customBoxDict.find( box );
+}
+
+/**
+ Retrieve a non-const pointer to a custom box from the list.
+ You may fill in the index parameter with the value
+ that was returned by insertCustomBox, or you may use a numerical value,
+ e.g. when iterating from zero up to maxCustomBoxIdx().
+
+ \note The reference returned by this method may be used to directly
+ modify the properties of the respective box.
+
+ \return Zero if the custom box has been removed by calling removeCustomBox.
+
+ \sa insertCustomBox customBox, removeCustomBox, removeAllCustomBoxes, maxCustomBoxIdx
+ */
+KDChartCustomBox* KDChartParams::customBoxRef( uint box )
+{
+ return _customBoxDict.find( box );
+}
+
+/**
+ Retrieve the biggest custom boxes ID used.
+
+ \sa insertCustomBox, removeCustomBox, removeAllCustomBoxes, customBox
+ */
+uint KDChartParams::maxCustomBoxIdx() const
+{
+ uint cnt( _customBoxDict.count() );
+ if( cnt ) {
+ int maxIndex = cnt-1;
+ QIntDictIterator<KDChartCustomBox> it( _customBoxDict );
+ for( ; it.current(); ++it )
+ if( it.currentKey() > maxIndex )
+ maxIndex = it.currentKey();
+ return maxIndex;
+ }
+ return 0;
+}
+
+/**
+ \enum KDChartParams::ChartType
+
+ The chart type. Covers only built-in chart types.
+
+ \sa setChartType, chartType
+ \sa setAdditionalChartType, additionalChartType,
+ \sa setChartSourceMode
+ */
+
+
+/**
+ Specifies the chart type. The default is bar charts (Bar).
+
+ \note Allways call this <b>before</b> specifying other
+ axis properties and before calling \c setAdditionalChartType().<br>
+ \c setChartType() deactivates the right axis and also sets the
+ axisLabelsTouchEdges back to their default for all bottom and
+ top axes.
+
+ \note Calling setChartType() results in changing the default data value
+ texts font settings (i.e. the font size, colour, position, but not the
+ QFont itself) <b>if</b> these parameters were not changed by
+ setPrintDataValues().
+ In order to re-activate this automatical adjustment of font settings
+ even after you have changed them manually you may call
+ setPrintDataValuesWithDefaultFontParams().
+ \li When calling setPrintDataValuesWithDefaultFontParams()
+ <b>before</b> calling setChartType() make sure you set the
+ \c callSetPrintDataValues parameter to \c false.
+ \li When calling setPrintDataValuesWithDefaultFontParams()
+ <b>after</b> calling setChartType() you may set the \c
+ callSetPrintDataValues parameter to \c true <b>or</b> you may call
+ setPrintDataValues() yourself after calling
+ setPrintDataValuesWithDefaultFontParams() to specify additional
+ parameters.
+
+ \param chartType the chart type to use
+ \sa chartType, ChartType
+ \sa setAdditionalChartType, additionalChartType,
+ \sa setBarChartSubType, barChartSubType
+ \sa setLineChartSubType, lineChartSubType
+ \sa setPolarChartSubType, polarChartSubType
+ \sa setChartSourceMode, chartSourceMode
+ \sa setAxisLabelsTouchEdges
+ */
+void KDChartParams::setChartType( ChartType chartType )
+{
+ _chartType = chartType;
+
+ // de-activate 2nd axis that might have been set automatically
+ // by a previous call of \c setAdditionalChartType()
+ setAxisVisible( KDChartAxisParams::AxisPosRight, false );
+
+ // Make sure abscissa axes start their labeling at the very
+ // first position and end at the last position when drawing
+ // area charts.
+ // Bar charts and line charts look better with their abscissa labels
+ // in the respective middle positions below each bar (or point, resp.)
+ bool bAbscissaAxisLabelsTouchEdges = ( Area == chartType );
+ setAxisLabelsTouchEdges( KDChartAxisParams::AxisPosBottom,
+ bAbscissaAxisLabelsTouchEdges );
+ setAxisLabelsTouchEdges( KDChartAxisParams::AxisPosTop,
+ bAbscissaAxisLabelsTouchEdges );
+ setAxisLabelsTouchEdges( KDChartAxisParams::AxisPosBottom2,
+ bAbscissaAxisLabelsTouchEdges );
+ setAxisLabelsTouchEdges( KDChartAxisParams::AxisPosTop2,
+ bAbscissaAxisLabelsTouchEdges );
+ // activate default data value text settings for this chart type
+ if ( printDataValues( 0 )
+ && printDataValuesWithDefaultFontParams( 0 ) )
+ setPrintDataValues( true, 0 );
+ emit changed();
+}
+
+
+/**
+ \fn KDChartParams::ChartType KDChartParams::chartType() const
+
+ Returns the chart type configured in this params object.
+
+ \return the chart type configured in this params object.
+ \sa setChartType, ChartType
+ \sa setAdditionalChartType, additionalChartType,
+ \sa setBarChartSubType, barChartSubType
+ \sa setLineChartSubType, lineChartSubType
+ \sa setPolarChartSubType, polarChartSubType
+ \sa setChartSourceMode, chartSourceMode
+ */
+
+
+
+/**
+ Specifies the additional chart type.
+ The default is no additional chart (NoType).
+ The additional chart will have <b>no grid</b> so either make sure you
+ specify the chart that should have a grid via \c setChartType() and
+ the other one as additional chart or specify the grid manually if you
+ need one for the additional chart too.
+
+ The additional chart uses the same abscissa axis as the main chart,
+ but cannot change the abscissa settings: the abscissa range and step width
+ is determined according to the main chart's values.
+
+ You may combine all different types of cartesian charts
+ (== Bar, Line, HiLo, ..., but not Polar, Pie, ...)
+ so e.g. the following combinations are possible:<br>
+
+ \verbatim
+ setChartType( KDChartParams::Bar );
+ setAdditionalChartType( KDChartParams::Line );
+ \endverbatim
+ or
+ \verbatim
+ setChartType( KDChartParams::Line );
+ setAdditionalChartType( KDChartParams::HiLo );
+ \endverbatim
+ or
+ \verbatim
+ setChartType( KDChartParams::Bar );
+ setAdditionalChartType( KDChartParams::Bar );
+ ...
+ \endverbatim
+
+ \note When defining multiple charts it is mandatory to
+ call \c setChartSourceMode() for specifying the dataset(s)
+ and their respective charts after calling \c setAdditionalChartType(),
+ also it is recommended to call \c setAxisDatasets() for all
+ axes to be used by the different datasets - otherwise the
+ default setting will be used (all datasets except the last
+ one match the left axis, the last dataset matches the right axis),
+ so e.g. your code to have a bar chart for datasets 0..2 (using the
+ left axis) and a line chart for datasets 3..4 (using the right axis)
+ could look like this:
+
+ \verbatim
+ setChartType( KDChartParams::Bar );
+ setAdditionalChartType( KDChartParams::Line );
+ setChartSourceMode( KDChartParams::DataEntry, 0,2, 0 );
+ setChartSourceMode( KDChartParams::DataEntry, 3,4, 1 );
+ setAxisDatasets( KDChartAxisParams::AxisPosLeft, 0,2, 0 );
+ setAxisDatasets( KDChartAxisParams::AxisPosRight, 3,4, 1 );
+ \endverbatim
+
+ \note In case you DON'T want to use the right axis but the left axis #2
+ make sure to reset the dataset assignment that is automatically done for
+ the right axis. Doing this will also clear the visibility flag of the
+ right axis that is automatically set by setAdditionalChartType()
+ implicitely assuming that the additional chart will use the right axis,
+ so there is no need to explicitely call setAxisVisible( false ) for
+ the right axis: specifying KDCHART_NO_DATASET is enough to disable it.
+ e.g. in the example shown above you would replace the
+ last line by these ones:
+
+ \verbatim
+ setAxisDatasets( KDChartAxisParams::AxisPosLeft2, 3,4, 1 );
+ setAxisDatasets( KDChartAxisParams::AxisPosRight,
+ KDCHART_NO_DATASET );
+ \endverbatim
+
+ Often your additional chart will look better when not overlapping with
+ the first chart, specifying different y-positions for the charts
+ is possible by \c KDChartAxisParams::setAxisUseAvailableSpace(),
+ e.g. like this:
+
+\verbatim
+// specify which amount of the available space
+// is to be used by the first y-axis:
+
+KDChartAxisParams pa(
+ _p->axisParams( KDChartAxisParams::AxisPosLeft ) );
+pa.setAxisUseAvailableSpace( 0, -499 );
+_p->setAxisParams( KDChartAxisParams::AxisPosLeft, pa );
+
+// specify which amount of the available space
+// is to be used by the second y-axis:
+
+pa = _p->axisParams( KDChartAxisParams::AxisPosLeft2 );
+pa.setAxisUseAvailableSpace( -750, -1000 );
+_p->setAxisParams( KDChartAxisParams::AxisPosLeft2, pa );
+\endverbatim
+
+\param chartType the additional chart type to use
+
+\sa additionalChartType, setChartSourceMode, setAxisDatasets
+\sa <br>chartType, ChartType
+\sa setBarChartSubType, barChartSubType
+\sa setLineChartSubType, lineChartSubType
+ */
+void KDChartParams::setAdditionalChartType( ChartType chartType )
+{
+ _additionalChartType = chartType;
+ if ( KDChartParams::NoType == chartType ) {
+ setAxisDatasets( KDChartAxisParams::AxisPosRight,
+ KDCHART_NO_DATASET );
+ } else {
+ setAxisDatasets( KDChartAxisParams::AxisPosRight,
+ KDCHART_ALL_DATASETS,
+ KDCHART_ALL_DATASETS,
+ 1 );
+ if( printDataValues( 1 )
+ && printDataValuesWithDefaultFontParams( 1 ) )
+ setPrintDataValues( true, 1 );
+ }
+ emit changed();
+}
+
+
+/**
+ \fn void KDChartParams::ChartType KDChartParams::additionalChartType() const
+
+ Returns the additional chart type configured in this params object.
+
+ \return the additional chart type configured in this params object.
+ \sa setAdditionalChartType, setChartSourceMode, chartSourceMode
+ \sa <br>setChartType, ChartType
+ \sa setBarChartSubType, barChartSubType
+ \sa setLineChartSubType, lineChartSubType
+ */
+
+
+
+/**
+ \fn bool KDChartParams::neverUsedSetChartSourceMode() const
+
+ Retrieves whether setChartSourceMode() was called or not
+ */
+
+
+
+
+/**
+ \fn uint KDChartParams::maxDatasetSourceMode() const
+
+ Returns the number of the highest dataset for which a SourceMode has been
+ defined.
+
+ \return the number of the highest dataset for which a SourceMode has been
+ defined.
+ \sa setChartSourceMode, chartSourceMode, findDataset
+ */
+
+/**
+ \fn void KDChartParams::setNumValues( uint )
+
+ Specifies how many of the values should be shown. -1 means all
+ available values.
+
+ \param numValues the number of values to be shown
+ \sa numValues
+ */
+
+/**
+ \fn int KDChartParams::numValues() const
+
+ Returns how many of the values should be shown. -1 means all
+ available values.
+
+ \return the number of values to be shown
+ \sa setNumValues
+ */
+
+
+/**
+ \fn void KDChartParams::setShadowBrightnessFactor( double factor )
+
+ Specifies a factor to be used to adjust the
+ built-in brightness of shadow colors in
+ 3-dimensional drawings like e.g. 3D Bar charts.
+
+ \param factor a factor that is to be taken into account for internal
+ calculation of shadow colors. By specifying values greater 1.0 you
+ may lighten the shadows until the most intensive brightness is
+ reached, while values smaller than 1.0 will darken the shadows until
+ the respective colors are black.
+
+ \sa shadowBrightnessFactor
+ */
+
+
+/**
+ \fn double KDChartParams::shadowBrightnessFactor() const
+
+ Returns a factor to be used to adjust the
+ built-in brightness of shadow colors in
+ 3-dimensional drawings like e.g. 3D Bar charts.
+
+ \return a factor that is to be taken into account for internal
+ calculation of shadow colors.
+
+ \sa setShadowBrightnessFactor
+ */
+
+
+/**
+ \fn void KDChartParams::setShadowPattern( Qt::BrushStyle style )
+
+ Specifies a filling style for filling the shadow areas in
+ 3-dimensional drawings like 3D bar charts. The default is to
+ fill with a solid color, the color is determined with \a
+ setThreeDShadowColors.
+
+ \param style the fill style to use
+ \sa shadowPattern(), setThreeDShadowColors(),
+ threeDShadowColors()
+ */
+
+
+/**
+ \fn Qt::BrushStyle KDChartParams::shadowPattern() const
+
+ Returns the filling style used for filling the shadow areas in
+ 3-dimensional drawings like 3D bar charts. The default is to
+ fill with a solid color, the fill color can be queried with \a
+ threeDShadowColors().
+
+ \return the fill style used
+ \sa setShadowPattern(), setThreeDShadowColors(),
+ threeDShadowColors()
+ */
+
+/**
+ \fn void KDChartParams::setOutlineDataColor( QColor color )
+
+ Specifies a color for the outlines of data displays. The default is
+ black.
+
+ \note Use setOutlineDataLineStyle( Qt::NoPen ) to hide the line.
+
+ \param color the color to use for the outlines
+ \sa outlineDataColor, setOutlineDataLineStyle, setOutlineDataLineWidth
+ */
+
+
+/**
+ \fn QColor KDChartParams::outlineDataColor() const
+
+ Returns the color for the outlines of data displays.
+
+ \return the outline color
+ \sa setOutlineDataColor
+ */
+
+
+/**
+ \fn void KDChartParams::setOutlineDataLineWidth( uint width )
+
+ Specifies the width of the outlines of data displays. The default is 1
+ pixel.
+
+ \note Use setOutlineDataLineStyle( Qt::NoPen ) to hide the line.
+
+ \param width the line width to use for the outlines
+ \sa outlineDataLineWidth, setOutlineDataLineStyle, setOutlineDataColor
+ */
+
+
+/**
+ \fn uint KDChartParams::outlineDataLineWidth() const
+
+ Returns the width of the outlines of data displays.
+
+ \param style the line width that is used for outlines
+ \sa setOutlineDataLineWidth
+ */
+
+
+/**
+ \fn void KDChartParams::setOutlineDataLineStyle( PenStyle style )
+
+ Specifies the line style of the outlines of data displays. The default
+ is a solid line. Warning: On Windows 95/98, the style setting (other
+ than NoPen and SolidLine) has no effect for lines with width greater
+ than 1, due to a bug in the operating system.
+
+ \param width the line style to use for the outlines
+ \sa outlineDataLineStyle, setOutlineDataColor, setOutlineDataLineWidth
+ */
+
+
+/**
+ \fn PenStyle KDChartParams::outlineDataLineStyle() const
+
+ Returns the style of the outlines of data displays.
+
+ \param style the line style that is used for outlines
+ \sa setOutlineDataLineStyle
+ */
+
+
+/**
+ \fn uint KDChartParams::maxDataColor() const
+
+ Returns the number of the highest dataset for which a color has been
+ defined.
+
+ \return the number of the highest dataset for which a color has been
+ defined.
+ \sa setDataColor, dataColor
+ */
+
+
+/**
+ \fn void KDChartParams::setThreeDShadowColors( bool shadow )
+
+ Specifies whether the engine should draw the sides and tops of
+ 3D effects in shadowed versions of the data colors (the
+ default) or in the data colors themselves. Only used with 3D
+ effects in charts that support these.
+
+ \param shadow true for shadowed colors, false for original colors
+ \sa threeDShadowColors
+ */
+
+
+/**
+ \fn bool KDChartParams::threeDShadowColors() const
+
+ Returns whether the engine should draw the sides and tops of 3D effects in
+ shadowed versions of the data colors or in the data colors
+ themselves. Only used with 3D effects in charts that
+ support these. The default is true.
+
+ \return true if shadowed colors are used for 3D effects
+ \sa setThreeDShadowColors
+ */
+
+
+/**
+ \fn void KDChartParams::setAllowOverlappingDataValueTexts( bool allow )
+
+ Specifies whether a data value text may be drawn even if it's
+ region intersects with another data value text's region.
+
+ By default this is FALSE to prevent ugly mutual overwriting of
+ data value texts and to speed up drawing of cahrts containing
+ thousands of data points.
+ */
+
+
+/**
+ \fn bool KDChartParams::allowOverlappingDataValueTexts() const
+
+ Returns whether a data value text may be drawn even if it's region
+ intersects with another data value text's region.
+
+ By default this is FALSE to prevent ugly mutual overwriting of data
+ value texts and to speed up drawing of cahrts containing thousands
+ of data points.
+ */
+
+
+/**
+ Specifies how the data value text figures are modified before printing.
+
+ This methode is provided for your convenience, to learn how to set the
+ other text parameters please have a look at setPrintDataValues.
+
+ \sa printDataValuesWithDefaultFontParams, setPrintDataValues
+ \sa dataValuesColor
+ \sa setPrintDataValuesFontRelSize setPrintDataValuesBackground
+ */
+void KDChartParams::setDataValuesCalc( int divPow10,
+ int digitsBehindComma,
+ uint chart )
+{
+ uint count = (KDCHART_ALL_CHARTS == chart) ? 2 : 1;
+ PrintDataValuesSettings * settings = (( 1 < count ) || ( 0 == chart ))
+ ? &_printDataValuesSettings
+ : &_printDataValuesSettings2;
+ for ( uint i = 0; i < count; ++i ) {
+ settings->_divPow10 = divPow10;
+ settings->_digitsBehindComma = digitsBehindComma;
+ if ( 0 < chart )
+ settings = &_printDataValuesSettings2;
+ }
+ emit changed();
+}
+
+/**
+ Specifies the font to be used for printing the data value texts.
+
+ This methode is provided for your convenience, to learn how to set the
+ other text parameters please have a look at setPrintDataValues.
+
+ \sa printDataValuesWithDefaultFontParams, setPrintDataValues
+ \sa dataValuesColor
+ \sa setPrintDataValuesFontRelSize setPrintDataValuesBackground
+ */
+void KDChartParams::setDataValuesFont( QFont* font,
+ uint size,
+ uint chart )
+{
+ uint count = (KDCHART_ALL_CHARTS == chart) ? 2 : 1;
+ PrintDataValuesSettings * settings = (( 1 < count ) || ( 0 == chart ))
+ ? &_printDataValuesSettings
+ : &_printDataValuesSettings2;
+ for ( uint i = 0; i < count; ++i ) {
+ settings->_useDefaultFontParams = false;
+ if( font )
+ settings->_dataValuesFont = *font;
+ if( UINT_MAX != size ){
+ settings->_dataValuesUseFontRelSize = ( 0 < size );
+ settings->_dataValuesFontRelSize = size;
+ }
+ if ( 0 < chart )
+ settings = &_printDataValuesSettings2;
+ }
+ emit changed();
+}
+
+/**
+ Specifies the position and rotation of the data value texts to be printed.
+
+ This methode is provided for your convenience, to learn how to set the
+ other text parameters please have a look at setPrintDataValues.
+
+ \sa printDataValuesWithDefaultFontParams, setPrintDataValues
+ \sa dataValuesColor
+ \sa setPrintDataValuesFontRelSize setPrintDataValuesBackground
+ */
+void KDChartParams::setDataValuesPlacing( KDChartEnums::PositionFlag position,
+ uint align,
+ int deltaX,
+ int deltaY,
+ int rotation,
+ bool specifyingPositiveValues,
+ uint chart )
+{
+ uint count = (KDCHART_ALL_CHARTS == chart) ? 2 : 1;
+ PrintDataValuesSettings * settings = (( 1 < count ) || ( 0 == chart ))
+ ? &_printDataValuesSettings
+ : &_printDataValuesSettings2;
+ for ( uint i = 0; i < count; ++i ) {
+ if( specifyingPositiveValues ){
+ // for values greater/equal zero:
+ settings->_dataValuesAnchorPositivePosition = position;
+ settings->_dataValuesAnchorPositiveAlign = align;
+ settings->_dataValuesAnchorPositiveDeltaX = deltaX;
+ settings->_dataValuesAnchorPositiveDeltaY = deltaY;
+ settings->_dataValuesPositiveRotation = rotation;
+ }else{
+ // for values below zero:
+ settings->_dataValuesAnchorNegativePosition = position;
+ settings->_dataValuesAnchorNegativeAlign = align;
+ settings->_dataValuesAnchorNegativeDeltaX = deltaX;
+ settings->_dataValuesAnchorNegativeDeltaY = deltaY;
+ settings->_dataValuesNegativeRotation = rotation;
+ }
+ if ( 0 < chart )
+ settings = &_printDataValuesSettings2;
+ }
+ emit changed();
+}
+
+/**
+ Specifies the text color and background brush to be used for
+ printing the data value texts.
+
+ To have the color calculated automatically - useful when printing
+ inside the bars (or pie slices, areas, ... resp.) - please use
+ \c KDCHART_DATA_VALUE_AUTO_COLOR instead of a QColor*.
+
+ Setting the background is normally not needed since reasonable
+ settings are done by default: Area charts have a white background
+ behind the data value texts while all other chart types use no
+ special background (the value is Qt::NoBrush then).
+
+ In case you want to use it to remove the extra background from
+ your Area chart's data value texts you should consider changing
+ the dataset colors as well: an idea might be trying the subdued
+ colorset by calling \c setSubduedColors().
+
+ \sa printDataValuesWithDefaultFontParams
+ \sa setPrintDataValues
+ \sa dataValuesColor
+ \sa setPrintDataValuesFontRelSize
+ */
+void KDChartParams::setDataValuesColors( const QColor* color,
+ const QBrush& background,
+ uint chart )
+{
+ // first store the color
+ if( color )
+ setPrintDataValuesColor( chart, color );
+ // now store the background
+ uint count = (KDCHART_ALL_CHARTS == chart) ? 2 : 1;
+ PrintDataValuesSettings * settings = (( 1 < count ) || ( 0 == chart ))
+ ? &_printDataValuesSettings
+ : &_printDataValuesSettings2;
+ for ( uint i = 0; i < count; ++i ) {
+ settings->_dataValuesBrush = background;
+ if ( 0 < chart )
+ settings = &_printDataValuesSettings2;
+ }
+ emit changed();
+}
+
+
+/* sorry, but policy handling is not implemnted yet: */
+void KDChartParams::setDataValuesPolicy(
+ KDChartEnums::TextLayoutPolicy policy,
+ uint chart )
+{
+ uint count = (KDCHART_ALL_CHARTS == chart) ? 2 : 1;
+ PrintDataValuesSettings * settings = (( 1 < count ) || ( 0 == chart ))
+ ? &_printDataValuesSettings
+ : &_printDataValuesSettings2;
+ for ( uint i = 0; i < count; ++i ) {
+ settings->_dataValuesLayoutPolicy = policy;
+ if ( 0 < chart )
+ settings = &_printDataValuesSettings2;
+ }
+ emit changed();
+}
+
+
+/**
+ Specifies whether data value texts should be printed even if the
+ value is KDCHART_POS_INFINITE (or KDCHART_NEG_INFINITE).
+
+ Printing of an infinite symbol (lemniskate) is done by default,
+ ou may use this function to disable it.
+
+ \sa printDataValuesWithDefaultFontParams
+ \sa setPrintDataValues
+ \sa dataValuesColor
+ \sa setPrintDataValuesFontRelSize
+ */
+void KDChartParams::setDataValuesShowInfinite( bool dataValuesShowInfinite,
+ uint chart)
+{
+ uint count = (KDCHART_ALL_CHARTS == chart) ? 2 : 1;
+ PrintDataValuesSettings * settings = (( 1 < count ) || ( 0 == chart ))
+ ? &_printDataValuesSettings
+ : &_printDataValuesSettings2;
+ for ( uint i = 0; i < count; ++i ) {
+ settings->_dataValuesShowInfinite = dataValuesShowInfinite;
+ if ( 0 < chart )
+ settings = &_printDataValuesSettings2;
+ }
+ emit changed();
+}
+
+
+/* function only there for backward compatibility */
+void KDChartParams::setPrintDataValuesColor( uint chart, const QColor* color )
+{
+ uint count = (KDCHART_ALL_CHARTS == chart) ? 2 : 1;
+ PrintDataValuesSettings * settings = (( 1 < count ) || ( 0 == chart ))
+ ? &_printDataValuesSettings
+ : &_printDataValuesSettings2;
+ for ( uint i = 0; i < count; ++i ) {
+ if ( KDCHART_DATA_VALUE_AUTO_COLOR == color ) {
+ settings->_dataValuesAutoColor = true; // !!!
+ settings->_dataValuesColor = QColor( Qt::black );
+ }
+ else {
+ settings->_dataValuesAutoColor = false;
+ if ( 0 == color )
+ settings->_dataValuesColor
+ = QColor( i ? Qt::darkBlue : Qt::black );
+ else
+ settings->_dataValuesColor = *color;
+ }
+ if ( 0 < chart )
+ settings = &_printDataValuesSettings2;
+ }
+ emit changed();
+}
+
+
+/**
+ Specifies the dynamic font size to be used for printing the data
+ value texts. To change settings for all charts specify \c
+ KDCHART_ALL_CHARTS as \chart parameter.
+
+ This methode is provided for your convenience, to learn how to set the
+ other text parameters please have a look at setPrintDataValues.
+
+ \sa printDataValuesWithDefaultFontParams, setPrintDataValues
+ \sa setPrintdataValuesColor, dataValuesFontRelSize
+ */
+void KDChartParams::setPrintDataValuesFontRelSize( uint chart, uint size )
+{
+ uint count = (KDCHART_ALL_CHARTS == chart) ? 2 : 1;
+ PrintDataValuesSettings * settings = (( 1 < count ) || ( 0 == chart ))
+ ? &_printDataValuesSettings
+ : &_printDataValuesSettings2;
+ uint theSize( UINT_MAX == size ? 16 : size );
+ for ( uint i = 0; i < count; ++i ) {
+ settings->_dataValuesUseFontRelSize = ( 0 < theSize );
+ settings->_dataValuesFontRelSize = theSize;
+ if ( 0 < chart )
+ settings = &_printDataValuesSettings2;
+ }
+ emit changed();
+}
+
+
+/**
+ Specifies that data value texts are to be printed with default font
+ parameters. Calling this methode results in resetting the
+ respective font size and colour and position parameters but not the
+ QFont itself. By setting \c callSetPrintDataValues to true you
+ select general enabling of text printing, when doing so it is
+ <b>not</b> neccessary to call setPrintDataValues() after calling
+ setPrintDataValuesWithDefaultFontParams().
+
+ \note If you want to call setChartType() after calling
+ setPrintDataValuesWithDefaultFontParams() you should set the \c
+ callSetPrintDataValues parameter to false to prevent
+ setPrintDataValues() from being called twice since it is called
+ internally each time you call setChartType() <b>if</b> the default
+ font params are to be set.
+
+ \sa printDataValuesWithDefaultFontParams, setPrintDataValues
+ */
+void KDChartParams::setPrintDataValuesWithDefaultFontParams( uint chart,
+ bool callSetPrintDataValues )
+{
+ uint count = (KDCHART_ALL_CHARTS == chart) ? 2 : 1;
+ PrintDataValuesSettings * settings = (( 1 < count ) || ( 0 == chart ))
+ ? &_printDataValuesSettings
+ : &_printDataValuesSettings2;
+ for ( uint i = 0; i < count; ++i ) {
+ settings->_printDataValues = true;
+ settings->_useDefaultFontParams = true;
+ if ( 0 < chart )
+ settings = &_printDataValuesSettings2;
+ }
+ if ( callSetPrintDataValues )
+ setPrintDataValues( true, chart );
+}
+
+
+/**
+ \fn bool KDChartParams::printDataValuesWithDefaultFontParams( uint chart ) const
+
+ Retrieves whether data value texts are to be printed with
+ non-default font parameters or not - <b>when</b> text printing is
+ active.
+
+ \note You might also want to call printDataValues to see if text
+ printing is active since this default flag remains set in
+ background even when printing has been de-activated.
+
+ \sa setPrintDataValuesWithDefaultFontParams, printDataValues
+ */
+
+
+/**
+ \fn bool KDChartParams::printDataValues( uint chart ) const
+
+ Returns whether the data values will be printed near their
+ respective entries.
+
+ \param chart The number of the chart: 0 for the first chart, 1 for
+ the second chart in case there are two charts to be drawn sharing the
+ same data area.
+
+ \return whether the data values will be printed near their
+ respective entries.
+
+ \sa setPrintDataValues
+ */
+
+
+/**
+ \fn QFont KDChartParams::dataValuesFont( uint chart ) const
+
+ Returns the font to be used for printing the data values
+
+ \param chart The number of the chart: 0 for the first chart, 1 for
+ the second chart in case there are two charts to be drawn sharing the
+ same data area.
+
+ \returns the font to be used for printing the data values
+
+ \sa setPrintDataValues
+ */
+
+
+/**
+ \fn bool KDChartParams::dataValuesUseFontRelSize( uint chart ) const
+
+ Returns whether the font size to be used for printing the
+ data values is calculated dynamically.
+
+ \param chart The number of the chart: 0 for the first chart, 1 for
+ the second chart in case there are two charts to be drawn sharing the
+ same data area.
+
+ \return whether the font size to be used for printing the
+ data values is calculated dynamically.
+
+ \sa setPrintDataValues, setPrintDataValuesFontRelSize
+ */
+
+
+/**
+ \fn int KDChartParams::dataValuesFontRelSize( uint chart ) const
+
+ Returns the relative size (in per mille of the chart width)
+ of font size to be used for printing the
+ data values.
+
+ \param chart The number of the chart: 0 for the first chart, 1 for
+ the second chart in case there are two charts to be drawn sharing the
+ same data area.
+
+ \return the relative size (in per mille of the chart width)
+ of font size to be used for printing the
+ data values.
+
+ \sa setPrintDataValues, setPrintDataValuesFontRelSize
+ */
+
+
+/**
+ \fn QColor KDChartParams::dataValuesColor( uint chart ) const
+
+ Returns the colour of the font to be used for printing the
+ data values.
+
+ \param chart The number of the chart: 0 for the first chart, 1 for
+ the second chart in case there are two charts to be drawn sharing the
+ same data area.
+
+ \return the colour of the font to be used for printing the
+ data values.
+
+ \sa setPrintDataValues, setPrintDataValuesColor
+ */
+
+
+/**
+ \fn bool KDChartParams::dataValuesAutoColor( uint chart ) const
+
+ Returns whether the font to be used for printing the data values
+ texts shall have automatically calculated colors fitting to their
+ respectivs data representations.
+
+ \param chart The number of the chart: 0 for the first chart, 1 for
+ the second chart in case there are two charts to be drawn sharing the
+ same data area.
+
+ \return whether the font to be used for printing the data values texts
+ shall have automatically calculated colors fitting to their respectivs data representations.
+
+ \sa setPrintDataValues
+ */
+
+
+/**
+ Returns the anchor position which the text is to be aligned to.
+
+ \param chart The number of the chart: 0 for the first chart, 1 for
+ the second chart in case there are two charts to be drawn sharing the
+ same data area.
+
+ \param negative If true the return value is only valid for data
+ values less than zero, if false it applies to data values greater
+ or equal to zero.
+
+ \returns the anchor position which the text is to be aligned to in case of
+ the value being less than zero.
+
+ \sa setPrintDataValues
+ */
+KDChartEnums::PositionFlag KDChartParams::dataValuesAnchorPosition( uint chart, bool negative ) const
+{
+ if ( negative )
+ return chart ? _printDataValuesSettings2._dataValuesAnchorNegativePosition
+ : _printDataValuesSettings._dataValuesAnchorNegativePosition;
+ else
+ return chart ? _printDataValuesSettings2._dataValuesAnchorPositivePosition
+ : _printDataValuesSettings._dataValuesAnchorPositivePosition;
+}
+
+
+/**
+ Returns the way how the text is to be aligned to the anchor.
+
+ This must be a reasonable combination of Qt::AlignmentFlags.
+
+ \param chart The number of the chart: 0 for the first chart, 1 for
+ the second chart in case there are two charts to be drawn sharing the
+ same data area.
+
+ \param negative If true the return value is only valid for data
+ values less than zero, if false it applies to data values greater
+ or equal to zero.
+
+ \returns the way how the text is to be aligned to the anchor in case of
+ the value being less than zero.
+
+ \sa setPrintDataValues
+ */
+uint KDChartParams::dataValuesAnchorAlign( uint chart, bool negative ) const
+{
+ if ( negative )
+ return chart ? _printDataValuesSettings2._dataValuesAnchorNegativeAlign
+ : _printDataValuesSettings._dataValuesAnchorNegativeAlign;
+ else
+ return chart ? _printDataValuesSettings2._dataValuesAnchorPositiveAlign
+ : _printDataValuesSettings._dataValuesAnchorPositiveAlign;
+}
+
+
+/**
+ Returns the X distance between the text and its anchor.
+
+ \note For better compatibility to the dynamic font size,
+ this parameter is <b>always</b> interpreted as being a per-mille
+ value of the logical width of the drawing area. If greater 0, the X
+ position is increased, if less than 0, it is reduced, this is
+ calculated dynamically before painting.
+
+ \param chart The number of the chart: 0 for the first chart, 1 for
+ the second chart in case there are two charts to be drawn sharing the
+ same data area.
+
+ \param negative If true the return value is only valid for data
+ values less than zero, if false it applies to data values greater
+ or equal to zero.
+
+ \returns the X distance between the text and its anchor.
+
+ \sa setPrintDataValues
+ */
+int KDChartParams::dataValuesAnchorDeltaX( uint chart, bool negative ) const
+{
+ if ( negative )
+ return chart ? _printDataValuesSettings2._dataValuesAnchorNegativeDeltaX
+ : _printDataValuesSettings._dataValuesAnchorNegativeDeltaX;
+ else
+ return chart ? _printDataValuesSettings2._dataValuesAnchorPositiveDeltaX
+ : _printDataValuesSettings._dataValuesAnchorPositiveDeltaX;
+}
+
+
+/**
+ Returns the Y distance between the text and its anchor.
+
+ \note For better compatibility to the dynamic font size this
+ parameter is <b>always</b> interpreted as being a per-mille value
+ of the logical width of the drawing area. If greater 0, the Y
+ position is increased, if less than 0, it is reduced, this is
+ calculated dynamically before painting.
+
+ \param chart The number of the chart: 0 for the first chart, 1 for
+ the second chart in case there are two charts to be drawn sharing the
+ same data area.
+
+ \param negative If true the return value is only valid for data
+ values less than zero, if false it applies to data values greater
+ or equal to zero.
+
+ \returns the Y distance between the text and its anchor.
+
+ \sa setPrintDataValues
+ */
+int KDChartParams::dataValuesAnchorDeltaY( uint chart, bool negative ) const
+{
+ if ( negative )
+ return chart ? _printDataValuesSettings2._dataValuesAnchorNegativeDeltaY
+ : _printDataValuesSettings._dataValuesAnchorNegativeDeltaY;
+ else
+ return chart ? _printDataValuesSettings2._dataValuesAnchorPositiveDeltaY
+ : _printDataValuesSettings._dataValuesAnchorPositiveDeltaY;
+}
+
+
+/**
+ Returns the amount of degrees (using a circle of 360 degrees) taken to
+ rotate the text. Positive values rotate clockwise, negative values rotate counter-clockwise.
+
+ \param chart The number of the chart: 0 for the first chart, 1 for
+ the second chart in case there are two charts to be drawn sharing the
+ same data area.
+
+ \param negative If true the return value is only valid for data
+ values less than zero, if false it applies to data values greater
+ or equal to zero.
+
+ \returns the amount of degrees (using a circle of 360 degrees) taken to
+ rotate the text.
+
+ \sa setPrintDataValues
+ */
+int KDChartParams::dataValuesRotation( uint chart, bool negative ) const
+{
+ if ( negative )
+ return chart ? _printDataValuesSettings2._dataValuesNegativeRotation
+ : _printDataValuesSettings._dataValuesNegativeRotation;
+ else
+ return chart ? _printDataValuesSettings2._dataValuesPositiveRotation
+ : _printDataValuesSettings._dataValuesPositiveRotation;
+}
+
+
+/**
+ \fn KDChartEnums::TextLayoutPolicy KDChartParams::dataValuesLayoutPolicy( uint chart ) const
+
+ Returns the way to handle too narrow space conflicts: what to do if
+ a data text covers a neighboring data text (or a neighboring data
+ area, resp.).
+
+ \note A layout policy different from LayoutJustOverwrite from does
+ not mean that this policy is followed in any case. Rather than
+ giving up when the selected policy does not result in a good layout
+ the program will automatically try the next policy: if
+ LayoutPolicyRotate did not succeed LayoutPolicyShiftVertically will
+ be tried, if this did not succeed either
+ LayoutPolicyShiftHorizontally will be tried.
+
+ \param chart The number of the chart: 0 for the first chart, 1 for
+ the second chart in case there are two charts to be drawn sharing the
+ same data area.
+
+ \returns the way to handle too narrow space conflicts.
+
+ \sa setPrintDataValues
+ */
+
+/**
+ \fn void KDChartParams::changed()
+
+ This signal is emitted when any of the chart parameters has changed.
+ */
+
+/**
+ \var const uint KDCHART_MAX_AXES
+
+ Charts have up to 12 axes:
+ up to two axes on both sides for X, Y
+ and Z (if data is 3-dimensional). This constant is located here and
+ in KDChartAxisParams, because one KDChartAxisParams object
+ describes only one axis.
+ */
+
+/**
+ \var static const int KDCHART_PROPSET_NORMAL_DATA;
+
+ Default (built-in) property ID, used for data cells
+ without any special properties.
+
+ Use this IDs <b>without</b> previously defining a respective
+ set of properties via KDChartParams::registerProperties(...).
+
+ \note While (in theory) it <b>is</b> possible to assign special
+ property values to this build-in property set this normally might not
+ a very good idea since these values would apply to every(!) data cell
+ that has no other property set assigned. Such general changes
+ would rather be done calling KDChartParam's main functions, e.g. you
+ would invoke KDChartParams::setLineMarker(true) instead of changing
+ the normal-data property set.
+
+ \sa KDCHART_PROPSET_TRANSPARENT_DATA
+ \sa KDCHART_PROPSET_HORI_LINE, KDCHART_PROPSET_VERT_LINE
+ \sa KDChartData::setPropertySet
+ \sa KDChartParams::registerProperties, KDChartParams::setProperties, KDChartParams::properties
+ */
+
+/**
+ \var static const int KDCHART_PROPSET_TRANSPARENT_DATA;
+
+ Predefined (build-in) property ID. used to specify a cell that should be displayed
+ using a null pen: neither the data representation nor
+ the connecting line to the next point will be shown,
+ but the line will be drawn using line style Qt::NoPen.
+
+ Use this IDs <b>without</b> previously defining a respective
+ set of properties via KDChartParams::registerProperties(...).
+
+ \note: Assigning this property to a data cell will result in the
+ cell being invisible: there will be no marker for this point and
+ there will be a 'gap' in this dataset's line from the point to the next one.
+ In case you want to change this default behavior,
+ use KDChartParams::setProperties(),
+ e.g. the following piece of code still has an invisible line while now
+ enabeling showing of the marker - but only if it was set active by
+ KDChartParams::setLineMarker(true).
+
+ \verbatim
+ KDChartPropertySet transpProps;
+ bool bDummy;
+ if( properties(KDCHART_PROPSET_TRANSPARENT_DATA,
+ transpProps) ){
+// build-in property was found, let's modify it a bit:
+transpProps.setShowMarker(
+KDCHART_PROPSET_NORMAL_DATA, bDummy );
+setProperties(KDCHART_PROPSET_TRANSPARENT_DATA,
+transpProps);
+}else{
+// Ooops? The build-in property was NOT found!
+// OK, never mind, let's specify it from scratch:
+transpProps.setName("transparent data");
+transpProps.setLineStyle(KDChartPropertySet::OwnID, Qt::NoPen);
+transpProps.setShowMarker(
+KDCHART_PROPSET_NORMAL_DATA, bDummy);
+setProperties(KDCHART_PROPSET_TRANSPARENT_DATA,
+transpProps);
+}
+\endverbatim
+
+\note The example above uses setProperties (in the last line) to
+define a property set. This is the right way for build-in property sets,
+but it is not recomended for your additional user-defined property sets:
+these should be registered with the registerProperties function
+to initially obtain a unique ID number for your new property set,
+see the second example given with \c KDCHART_PROPSET_VERT_LINE.
+
+\sa KDCHART_PROPSET_NORMAL_DATA
+\sa KDCHART_PROPSET_HORI_LINE, KDCHART_PROPSET_VERT_LINE
+\sa KDChartData::setPropertySet
+\sa KDChartParams::registerProperties, KDChartParams::setProperties, KDChartParams::properties
+*/
+
+/**
+ \var static const int KDCHART_PROPSET_HORI_LINE;
+
+ Predefined (build-in) property ID. may be used to specify a special cell
+ which is not part of the normal data but to be used for positioning
+ a separate horizontal line.
+ Data display will be surpressed for this point: neither the data
+ representation nor the connecting line to the next point will
+ be shown, actually the point will remain invisible but a horizontal
+ line will be drawn instead: using line style Qt::DotLine and the
+ respective dataset's line color.
+
+ Use this IDs <b>without</b> previously defining a respective
+ set of properties via KDChartParams::registerProperties(...).
+
+ In case you want to change this default behavior,
+ use KDChartParams::setProperties(),
+ e.g. the following piece of code still has an invisible line and
+ also does not show the point's marker while now showing two
+ separate markers at the horizontal line's start and end.
+
+ \verbatim
+ KDChartPropertySet horiProps;
+ if( properties(KDCHART_PROPSET_HORI_LINE,
+ horiProps) ){
+// build-in property was found, let's modify it a bit:
+horiProps.setExtraMarkersAlign(
+KDChartPropertySet::OwnID,
+Qt::AlignLeft | Qt::AlignRight );
+setProperties(KDCHART_PROPSET_HORI_LINE,
+horiProps);
+}else{
+// Ooops? The build-in property was NOT found!
+// OK, never mind, let's specify it from scratch:
+horiProps.setName("horizontal line");
+horiProps.setLineStyle(KDChartPropertySet::OwnID, Qt::NoPen);
+horiProps.setShowMarker( KDChartPropertySet::OwnID, false );
+horiProps.setExtraMarkersAlign( KDChartPropertySet::OwnID,
+Qt::AlignLeft | Qt::AlignRight );
+horiProps.setExtraMarkersAlign(
+KDChartPropertySet::OwnID,
+Qt::AlignLeft | Qt::AlignRight );
+setProperties(KDCHART_PROPSET_HORI_LINE,
+horiProps);
+}
+\endverbatim
+
+\note The example above uses setProperties (in the last line) to
+define a property set. This is the right way for build-in property sets,
+but it is not recomended for your additional user-defined property sets:
+these should be registered with the registerProperties function
+to initially obtain a unique ID number for your new property set,
+see the second example given with \c KDCHART_PROPSET_VERT_LINE.
+
+\sa KDCHART_PROPSET_NORMAL_DATA
+\sa KDCHART_PROPSET_VERT_LINE
+\sa KDChartData::setPropertySet
+\sa KDChartParams::registerProperties, KDChartParams::setProperties, KDChartParams::properties
+*/
+
+/**
+ \var static const int KDCHART_PROPSET_VERT_LINE;
+
+ Predefined (build-in) property ID. may be used to specify a special cell
+ which is not part of the normal data but to be used for positioning
+ a separate vertical line.
+ Data display will be surpressed for this point: neither the data
+ representation nor the connecting line to the next point will
+ be shown, actually the point will remain invisible but a vertical
+ line will be drawn instead: using line style Qt::DotLine and the
+ respective dataset's line color.
+
+ Use this IDs <b>without</b> previously defining a respective
+ set of properties via KDChartParams::registerProperties(...).
+
+ In case you want to change this default behavior,
+ use KDChartParams::setProperties(),
+ e.g. the following piece of code still has an invisible line and
+ also does not show the point's marker while now showing a
+ separate marker at the top end of the vertical line which
+ will <b>not</b> run across the complete data area but start
+ on the respective point's Y position and go to the top edge
+ of the chart's area.
+
+ \verbatim
+ KDChartPropertySet vertProps;
+ if( properties(KDCHART_PROPSET_VERT_LINE,
+ vertProps) ){
+// build-in property was found, let's modify it a bit:
+vertProps.setExtraMarkersAlign(
+KDChartPropertySet::OwnID, Qt::AlignTop );
+setProperties(KDCHART_PROPSET_VERT_LINE,
+vertProps);
+}else{
+// Ooops? The build-in property was NOT found!
+// OK, never mind, let's specify it from scratch:
+vertProps.setName("vertical line");
+vertProps.setLineStyle(KDChartPropertySet::OwnID, Qt::NoPen);
+vertProps.setShowMarker( KDChartPropertySet::OwnID, false );
+vertProps.setExtraMarkersAlign( KDChartPropertySet::OwnID,
+Qt::AlignTop );
+vertProps.setExtraMarkersAlign(
+KDChartPropertySet::OwnID,
+Qt::AlignTop );
+setProperties(KDCHART_PROPSET_VERT_LINE,
+vertProps);
+}
+\endverbatim
+
+\note The example above uses setProperties (in the last line) to
+define a property set. This is the right way for build-in property sets,
+but it is not recomended for your additional user-defined property sets:
+these should be registered with the registerProperties function
+to initially obtain a unique ID number for your new property set,
+see the following example:
+
+The code shown below demonstrates how to specify a <b>new</b>
+property set which then can be used for adding a red vertical
+line with marker to some of your normal data points:
+
+\verbatim
+// 1. specify and register the new property set
+KDChartPropertySet dataWithTopLineProps;
+dataWithTopLineProps.setName(
+"normal data with red vertical line on top");
+dataWithTopLineProps.setExtraLinesAlign(
+KDChartPropertySet::OwnID,
+Qt::AlignTop );
+dataWithTopLineProps.setExtraLinesWidth(
+KDChartPropertySet::OwnID,
+-2 );
+dataWithTopLineProps.setExtraLinesColor(
+KDChartPropertySet::OwnID,
+ Qt::red );
+dataWithTopLineProps.setExtraLinesStyle(
+ KDChartPropertySet::OwnID,
+ Qt::SolidLine );
+dataWithTopLineProps.setExtraMarkersAlign(
+ KDChartPropertySet::OwnID,
+ Qt::AlignTop );
+dataWithTopLineProps.setExtraMarkersSize(
+ KDChartPropertySet::OwnID,
+ QSize(-10, -10) );
+dataWithTopLineProps.setExtraMarkersColor(
+ KDChartPropertySet::OwnID,
+ Qt::darkRed );
+dataWithTopLineProps.setExtraMarkersStyle(
+ KDChartPropertySet::OwnID,
+ KDChartParams::LineMarkerCircle );
+int idDataWithTopLineProps
+= registerProperties( dataWithTopLineProps );
+// 2. assign this property set
+// to some of your data cells
+d = new KDChartTableData( 5, 10 );
+// ...
+d->cell( 0, 2 ).setPropertySet( idDataWithTopLineProps );
+d->cell( 2, 5 ).setPropertySet( idDataWithTopLineProps );
+\endverbatim
+
+\sa KDCHART_PROPSET_NORMAL_DATA
+\sa KDCHART_PROPSET_HORI_LINE
+\sa KDChartData::setPropertySet
+\sa KDChartParams::registerProperties, KDChartParams::setProperties, KDChartParams::properties
+*/
+
+
+
+//@}
+// END GENERAL
+
+// START BARCHART
+/** @name Bar chart-specific methods.
+
+ These methods query and set barchart-specific parameters.
+ */
+//@{
+
+/**
+ \enum KDChartParams::BarChartSubType
+
+ The bar subtype. Only used when chartType() == Bar
+
+ \sa setBarChartSubType, barChartSubType
+ */
+
+
+/**
+ \fn void KDChartParams::setBarChartSubType( BarChartSubType barChartSubType )
+ Specifies the bar chart subtype.
+
+ This setting only has an effect in bar charts.
+
+ \param barChartSubType the bar chart subtype
+ \sa barChartSubType, BarChartSubType, setChartType, chartType
+ */
+
+
+/**
+ \fn KDChartParams::BarChartSubType KDChartParams::barChartSubType() const
+
+ Returns the bar chart subtype.
+
+ This setting only has an effect in bar charts.
+
+ \return the bar chart sub type
+ \sa setBarChartSubType, BarChartSubType, setChartType, chartType
+ */
+
+
+
+/**
+ \fn void KDChartParams::setThreeDBars( bool threeDBars )
+
+ Specifies whether the engine should draw the bars in 3D.
+
+ This setting only has an effect in bar charts.
+
+ \param threeDBars true if bars should be drawn with a 3D effect
+ \sa threeDBars, setThreeDBarAngle, threeDBarAngle
+ */
+
+
+/**
+ \fn bool KDChartParams::threeDBars() const
+
+ Returns whether the engine should draw any bars in 3D.
+
+ This setting only has an effect in bar charts.
+
+ \return true if bars should be draws with a 3D effect, false
+ otherwise
+ \sa setThreeDBars, threeDBarAngle, setThreeDBarAngle
+ */
+
+/**
+ \fn void KDChartParams::setThreeDBarsShadowColors( bool shadow )
+ \obsolete
+ Specifies whether the engine should draw the sides and tops of 3D bars
+ in shadowed versions of the data colors or in the data colors
+ themselves. Only used if threeDBars() == true. The default is true.
+
+ This setting only has an effect in bar charts.
+
+ This method is obsolete; use setThreeDShadowColors instead
+
+ \param shadow true for shadowed colors, false for original colors
+ \sa setThreeDShadowColors
+ */
+
+/**
+ \fn bool KDChartParams::threeDBarsShadowColors() const
+
+ \obsolete
+ Returns whether the engine should draw the sides and tops of 3D bars in
+ shadowed versions of the data colors or in the data colors
+ themselves. Only used if threeDBars() == true. The default is true.
+
+ This setting only has an effect in bar charts.
+
+ This method is obsolete; use threeDShadowColors instead
+
+ \return true if bars use shadowed colors for 3D effects
+ \sa setThreeDBarsShadowColors
+ */
+
+
+/**
+ Specifies the angle used for 3D bars. Only used if threeDBars() == true.
+
+ This setting only has an effect in bar charts.
+
+ \param angle the angle in degrees. The default (and most useful
+ value) is 45. Angle can be between 0 and 90, all other values
+ are ignored. Values close to 0 or close to 90 may look
+ strange, depending on the resolution of the output device.
+ \sa setThreeDBars, threeDBars
+ \sa threeDBarAngle, cosThreeDBarAngle
+ \sa setThreeDBarDepth, threeDBarDepth
+ */
+void KDChartParams::setThreeDBarAngle( uint angle )
+{
+ if ( angle > 90 ) /* since angle is an uint, we do not need to
+ test for < 0 */
+ return ;
+ _threeDBarAngle = angle;
+
+ // cache the cosine of this value
+ _cosThreeDBarAngle = cos( static_cast < double > ( _threeDBarAngle ) * M_PI / 180.0 );
+ emit changed();
+}
+
+
+/**
+ \fn uint KDChartParams::threeDBarAngle() const
+
+ Returns the angle in degrees used for 3D bars. Only used if threeDBars() == true.
+
+ This setting only has an effect in bar charts.
+
+ \return the angle in degrees used for 3D bars, always between 0 and 90.
+ \sa setThreeDBars, threeDBars
+ \sa setThreeDBarAngle, cosThreeDBarAngle
+ \sa setThreeDBarDepth, threeDBarDepth
+ */
+
+
+/**
+ \fn double KDChartParams::cosThreeDBarAngle() const
+
+ Returns the cosine in rad of the angle used for 3D bars. Only used
+ if threeDBars() == true.
+
+ This setting only has an effect in bar charts.
+
+ \return the cosine in rad of the angle used for 3D bars, always
+ between 0 and 90. \sa setThreeDBars, threeDBars \sa
+ setThreeDBarAngle, threeDBarAngle \sa setThreeDBarDepth,
+ threeDBarDepth
+ */
+
+
+/**
+ \fn void KDChartParams::setThreeDBarDepth( double depth )
+
+ Specifies the depth of the 3D Effect used for 3D bars.
+ Only used if threeDBars() == true.
+
+ This setting only has an effect in bar charts.
+
+ \param depth the depth of the 3D Effect in relation to
+ the bar width. The default (and most useful) value of
+ 1.0 may be used to specify bars with square basis.
+ \sa threeDBarDepth
+ \sa setThreeDBars, threeDBars
+ \sa setThreeDBarAngle, threeDBarAngle, cosThreeDBarAngle
+ */
+
+
+/**
+ \fn double KDChartParams::threeDBarDepth() const
+
+ Returns the depth of the 3D Effect used for 3D bars.
+ Only used if threeDBars() == true.
+
+ This setting only has an effect in bar charts.
+
+ \return the depth of the 3D Effect in relation to the bar width.
+ \sa setThreeDBarDepth
+ \sa setThreeDBars, threeDBars
+ \sa setThreeDBarAngle, threeDBarAngle, cosThreeDBarAngle
+ */
+
+
+/**
+ \fn void KDChartParams::setDatasetGap( int gap )
+
+ Specifies the number of pixels between two dataset values.
+ In addition you might want to use \c setOutlineDataLineStyle( Qt::NoPen ) to hide the line.
+
+ Also the method \c setValueBlockGap might be usefull, please read the information given there ...
+
+ This setting only has an effect in bar charts: if there is more than one dataset shown by your chart.
+
+ \note Use negative values for overlaps, use \c
+ setDatasetGapIsRelative to specify that the \c gap
+ value is a per mille value of the chart data area width.
+
+ The default is 6 per mille of the data area of the chart.
+
+ \param gap the number of pixels between two dataset values.
+ \sa setValueBlockGap
+ \sa datasetGap
+ \sa datasetGapIsRelative, setDatasetGapIsRelative
+ \sa setOutlineDataLineStyle
+ */
+
+
+/**
+ \fn int KDChartParams::datasetGap() const
+
+ Returns the number of pixels between two dataset values.
+
+ This setting only has an effect in bar charts.
+
+ \note Negative values signify overlaps, use \c datasetGapIsRelative
+ to find out if the \datasetGap value is a per mille value of the
+ chart data area width.
+
+ \return the number of pixels between two dataset values.
+ \sa setDatasetGap
+ \sa datasetGapIsRelative, setDatasetGapIsRelative
+ */
+
+
+/**
+ \fn void KDChartParams::setDatasetGapIsRelative( bool gapIsRelative )
+
+ Specifies if the value set by \c setDatasetGap is a
+ per mille value of the chart data area width.
+
+ This setting only has an effect in bar charts.
+
+ \param gapIsRelative specifies if the value set by \c setDatasetGap
+ is a per mille value of the chart data area width.
+ \sa datasetGapIsRelative, datasetGap, setDatasetGap
+ */
+
+
+/**
+ \fn bool KDChartParams::datasetGapIsRelative() const
+
+ Returns if the value set by \c setDatasetGap
+ is a per mille value of the chart data area width.
+
+ This setting only has an effect in bar charts.
+
+ \return if the value set by \c setDatasetGap
+ is a per mille value of the chart data area width.
+ \sa setDatasetGap, setDatasetGapIsRelative, datasetGap, setDatasetGap
+ */
+
+
+/**
+ \fn void KDChartParams::setValueBlockGap( int gap )
+
+ Specifies the number of pixels between each value block.
+ If there is only one dataset shown this gap is appearing between each of the bars, otherwise it is appearing between each of the bar blocks.
+ In addition you might want to use \c setOutlineDataLineStyle( Qt::NoPen ) to hide the line.
+
+ Also the method \c setDatasetGap might be usefull, please read the information given there ...
+
+ This setting only has an effect in bar charts.
+
+ Use negative values for overlaps (which might look strange),
+ use \c setValueBlockGapIsRelative to specify that the \c gap
+ value is a per mille value of the chart data area width.
+
+ The default is 15 per mille of the data area of the chart.
+
+ \note Specifying a value block gap width AND a bar width
+ may result in KD Chart not being able to display all bars
+ if the data area is not wide enough. To make your
+ application notice when this
+ happens you should consider connecting the
+ barsDisplayed() signal emitted by your KDChartWidget object
+ to an appropriate slot function. Additionally (or in case
+ you are not using the KDChartWidget class, resp.)
+ you may access the number of actually displayed/not displayed
+ bars by the KDChartParams functions numBarsDisplayed
+ and numBarsLeft, the return value of these functions
+ are not not defined if they are called before drawing is done.
+
+ \param gap the number of pixels between each value block.
+ \sa setDatasetGap
+ \sa setBarWidth, valueBlockGap
+ \sa KDChartWidget::barsDisplayed, KDChart::barsDisplayed
+ \sa numBarsDisplayed, numBarsLeft
+ \sa valueBlockGapIsRelative, setValueBlockGapIsRelative
+ \sa setOutlineDataLineStyle
+ */
+
+
+/**
+ \fn int KDChartParams::valueBlockGap() const
+
+ Returns the number of pixels between each value block.
+
+ This setting only has an effect in bar charts.
+
+ \note Negative values signify overlaps, use \c valueBlockGapIsRelative
+ to find out if the \valueBlockGap value is a per mille value of the
+ chart data area width.
+
+ \return the number of pixels between each value block.
+ \sa valueBlockGap
+ \sa valueBlockGapIsRelative, setValueBlockGapIsRelative
+ */
+
+
+/**
+ \fn void KDChartParams::setBarWidth( int width )
+
+ Specifies the width of one bar: makes sure that all of
+ the bars have exactly the same width.
+
+ This setting only has an effect in bar charts.
+
+ \note Use negative values for to specify that the \c width
+ value is a per mille value of the chart data area width,
+ use no value or the default KDCHART_AUTO_SIZE
+ to (re)activate normal calculation mode making sure that all
+ bars fit into the available space but might not look so nice
+ if many bars are there.
+
+ \note Specifying a bar width AND a value block gap width
+ may result in KD Chart not being able to display all bars
+ if the data area is not wide enough. To make your
+ application notice when this
+ happens you should consider connecting the
+ barsDisplayed() signal emitted by your KDChartWidget object
+ to an appropriate slot function. Additionally (or in case
+ you are not using the KDChartWidget class)
+ you may access the number of actually displayed/not displayed
+ bars by the KDChartParams functions numBarsDisplayed
+ and numBarsLeft, the return value of these functions
+ are not not defined if they are called before drawing is done.
+
+ \param width the width of one bar.
+ \sa KDChartWidget::barsDisplayed, KDChart::barsDisplayed
+ \sa numBarsDisplayed, numBarsLeft
+ \sa setValueBlockGap
+ */
+
+/**
+ \fn int KDChartParams::barWidth() const
+
+ Returns the width of one bar as set by setBarWidth
+ or KDCHART_AUTO_SIZE if setBarWidth
+ was never called.
+
+ This setting only has an effect in bar charts.
+
+ \note Negative values signify that the bar width is
+ a per mille value of the chart data area width.
+
+ \return the width of one bar as set by setBarWidth
+ or KDCHART_AUTO_SIZE if setBarWidth
+ was never called.
+ \sa setBarWidth
+ */
+
+/**
+ \fn int KDChartParams::numBarsDisplayed() const
+
+ Returns the number of bars that were displayed last
+ time your bar chart was drawn.
+
+ This setting only has an effect in bar charts.
+
+ This can be different from the number of bars you
+ actually wanted to display: by specifying both
+ the bar width and the value block gap width you
+ may controll your chart very well but take the risk
+ of not getting all bars drawn if there is not enough
+ horizontal space to display them with the given width
+ and gap width.
+
+ To quickly determine if all bars were drawn just check
+ if the numBarsLeft() function returns a zero value.
+
+ \return the number of bars that were drawn.
+ \sa KDChartWidget::barsDisplayed, KDChart::barsDisplayed
+ \sa numBarsLeft
+ \sa setBarWidth, setValueBlockGap
+ */
+
+/**
+ \fn int KDChartParams::numBarsLeft() const
+
+ Returns the number of bars that could NOT be painted
+ last time your bar chart was drawn.
+
+ This setting only has an effect in bar charts.
+
+ If this value is greater than zero, the bar chart
+ shows less bars than you
+ actually wanted to display: by specifying both
+ the bar width and the value block gap width you
+ may controll your chart very well but take the risk
+ of not getting all bars drawn if there is not enough
+ horizontal space to display them with the given width
+ and gap width.
+
+ You may call the numBarsDisplayed() function to see
+ how many bars were drawn.
+
+ \return the number of bars that could not be drawn.
+ \sa KDChartWidget::barsDisplayed, KDChart::barsDisplayed
+ \sa numBarsDisplayed
+ \sa setBarWidth, setValueBlockGap
+ */
+
+/**
+ \fn void KDChartParams::setValueBlockGapIsRelative( bool gapIsRelative )
+
+ Specifies if the value set by \c setValueBlockGap is a
+ per mille value of the chart data area width.
+
+ This setting only has an effect in bar charts.
+
+ \param gapIsRelative specifies if the value set by \c setValueBlockGap
+ is a per mille value of the chart data area width.
+ \sa valueBlockGapIsRelative, valueBlockGap, setValueBlockGap
+ */
+
+
+/**
+ \fn bool KDChartParams::valueBlockGapIsRelative() const
+
+ Returns if the value set by \c setValueBlockGap
+ is a per mille value of the chart data area width.
+
+ This setting only has an effect in bar charts.
+
+ \return if the value set by \c setValueBlockGap
+ is a per mille value of the chart data area width.
+ \sa setValueBlockGapIsRelative, setValueBlockGap, valueBlockGap
+ \sa setValueBlockGap
+ */
+
+
+/**
+ \fn void KDChartParams::setDrawSolidExcessArrows( bool solidArrows )
+
+ Specifies whether arrows showing excess values in bar charts should
+ be drawn solidly or split.
+
+ This setting only has an effect in bar charts.
+
+ If \a solidArrows is true, the bars with excess values (like
+ infinity, or any other value that exceeds the y-axis labelling) will
+ have an integrated arrow head. If \a solidArrows is false, they will
+ still have an integrated arrow head at a lower position, but also
+ two flat arrows on top of them to better indicate that there could
+ be a large gap. It is recommended to set this value to false (this
+ is also the default), as this makes the excess value situation much
+ more obvious.
+
+ This setting only has an effect in bar charts.
+
+ \param solidArrows whether excess arrows shown be drawn solidly or
+ split
+ \sa drawSolidExcessArrows
+*/
+
+
+/**
+ \fn bool KDChartParams::drawSolidExcessArrows() const
+
+ Returns whether arrows showing excess values in bar charts should
+ be drawn solidly or split.
+
+ This setting only has an effect in bar charts.
+
+ \return true if excess arrows are drawn solidly, false if they are
+ split
+ \sa setDrawSolidExcessArrows
+*/
+
+
+//@}
+// END BARCHART
+
+// START LINECHART
+/** @name Line and area chart-specific methods.
+
+ These methods query and set line and area chart-specific parameters.
+ */
+//@{
+
+/**
+ \enum KDChartParams::LineChartSubType
+
+ The line subtype. Only used when chartType == Line
+
+ \sa setLineChartSubType, lineChartSubType
+ */
+
+
+/**
+ \fn void KDChartParams::setLineChartSubType( LineChartSubType lineChartSubType )
+
+ Specifies the line chart subtype. Only used if chartType() ==
+ Line. The default is LineNormal.
+
+ \param lineChartSubType the line chart subtype
+ \sa lineChartSubType, LineChartSubType, setChartType, chartType
+ */
+
+
+/**
+ \fn KDChartParams::LineChartSubType KDChartParams::lineChartSubType() const
+
+ Returns the line chart subtype. Only used if chartType() ==
+ Line.
+
+ \return the line chart sub type
+ \sa setLineChartSubType, LineChartSubType, setChartType, chartType
+ */
+
+
+
+/**
+ \fn void KDChartParams::setLineMarker( bool marker )
+
+ Specifies whether there should be a marker at each data
+ point. Only used if chartType() == Line and if threeDLines() ==
+ false. The default is not to draw markers.
+
+ \note Use the setLineMarkerStyle function to specify the shape
+ of the markers, use the setLineWidth function to set the
+ width of the lines connecting the markers (or to surpress
+ drawing of such lines, resp.)
+
+ \param marker true if markers should be drawn
+ \sa setLineMarker, setLineMarkerSize
+ \sa setLineMarkerStyle, setLineColor, setLineWidth, setLineStyle
+ */
+
+
+/**
+ \fn bool KDChartParams::lineMarker() const
+
+ Returns whether line markers should be drawn at each data
+ point. Only used if chartType() == Line and if threeDLines() ==
+ false.
+
+ \return true if markers should be drawn.
+ */
+
+
+/**
+ \enum KDChartParams::LineMarkerStyle
+
+ The available line marker styles.
+ */
+
+
+/**
+ Specifies the line marker to be used for a dataset. Only used if
+ chartType() == Line and lineMarker() == true. If you specify a
+ marker for a dataset, but not for a dataset with a lower
+ value, then the marker for the dataset with the lower value
+ will be undefined unless it was previously defined. The default
+ is a circle for the first dataset, a square for the second, a
+ diamond for the third and undefined for all subsequent
+ datasets.
+
+ \note Extra marker styles LineMarker1Pixel and LineMarker4Pixels
+ are intended for drawing charts representing large numbers
+ of data cells, when using these styles it might be a good
+ idea to set the line width to zero. This would surpress
+ drawing of the lines resulting in drawing the markers only.
+
+ \param dataset the dataset for which to set the line marker
+ \param style the style to set for the specified dataset
+ \sa LineMarkerStyle, lineMarkerStyle, setLineMarkerSize
+ \sa setLineColor, setLineWidth, setLineStyle
+ */
+void KDChartParams::setLineMarkerStyle( uint dataset, LineMarkerStyle style )
+{
+ _lineMarkerStyles[ dataset ] = style;
+ _maxDatasetLineMarkerStyle = QMAX( dataset,
+ _maxDatasetLineMarkerStyle );
+ emit changed();
+}
+
+/**
+ Returns the marker to be used for a dataset. Only used if
+ chartType() == Line and lineMarker() == true.
+
+ \param dataset the dataset for which to return the line marker
+ \return the line marker for the specified data set
+ \sa LineMarkerStyle, setLineMarkerStyle
+ */
+KDChartParams::LineMarkerStyle KDChartParams::lineMarkerStyle( uint dataset ) const
+{
+ if( _lineMarkerStyles.find( dataset ) != _lineMarkerStyles.end() )
+ return _lineMarkerStyles[ dataset ];
+ else
+ return LineMarkerCircle; // default
+}
+
+
+
+
+/**
+ \var KDChartParams::LineMarkerStyleMap;
+
+ The type of the storage structure for line marker styles. You
+ should normally not need to use this.
+ */
+
+
+/**
+ Sets a whole map of line marker styles. You can use this for
+ assigning many line marker styles at the same time, but
+ typically it is better to set them individually with \a
+ setLineMarkerStyle().
+
+ \param map the map of styles
+ \sa lineMarkerStyles, setLineMarker, setLineMarkerStyle, setLineMarkerSize
+ \sa setLineColor, setLineWidth, setLineStyle
+ */
+void KDChartParams::setLineMarkerStyles( LineMarkerStyleMap map ) {
+ _lineMarkerStyles = map;
+ // update _maxDatasetLineMarkerStyle
+ uint maxDataset = 0;
+ for( LineMarkerStyleMap::ConstIterator it = _lineMarkerStyles.begin();
+ it != _lineMarkerStyles.end(); ++it )
+ maxDataset = QMAX( maxDataset, it.key() );
+ _maxDatasetLineMarkerStyle = maxDataset;
+}
+
+
+/**
+ \fn KDChartParams::LineMarkerStyleMap KDChartParams::lineMarkerStyles() const
+
+ Returns the whole map of line marker styles. You will typically
+ not need this. You can query individual line marker styles by
+ calling \a lineMarkerStyle().
+
+ \return the map of styles
+ \sa lineMarkerStyle, setLineMarkerStyles
+ */
+
+
+/**
+ \fn uint KDChartParams::maxDatasetLineMarkerStyle() const
+
+
+ Returns the highest dataset for which a line marker style has been
+ defined. Not all datasets with a lower number necessarily have
+ a defined line marker.
+
+ \return the highest dataset with a defined line marker
+ \sa LineMarkerStyle, setLineMarkerStyle, lineMarkerStyle
+ */
+
+
+/**
+ \fn void KDChartParams::setLineMarkerSize( QSize size )
+
+ Specifies the sizes of line markers. Only used if chartType() == Line
+ and lineMarker() == true. The default is 6x6.
+
+ Negative values of \c size.width() and/or \c size.height() will
+ be interpreted as per-mille value of the chart's drawing area,
+ the true marker width (or height, resp.) will then be calculated
+ dynamically depending on the actual chart size.
+
+ \param size the size of the line marker in pixels
+ \sa lineMarkerSize, setLineMarker, setLineMarkerStyle
+ \sa setLineColor, setLineWidth, setLineStyle
+ */
+
+
+/**
+ \fn QSize KDChartParams::lineMarkerSize() const
+
+ Returns the sizes of line markers. Only used if chartType() == Line and
+ lineMarker() == true.
+
+ \return the size of the line marker in pixels
+ \sa setLineMarkerSize
+ */
+
+
+/**
+ \fn void KDChartParams::setLineWidth( int width )
+
+ Specifies the width for lines in line charts. Default is 1.
+ Only used if threeDLines() == false.
+
+ If \c width is negative it is interpreted as per-mille
+ value of the chart's drawing area, the true line width
+ will then be calculated dynamically depending on the
+ actual chart size.
+
+ \note Set the line width to zero to surpress drawing of the lines
+ but do not forget to call setLineMarker( true ) and specify an
+ appropriate marker style to have the data points drawn.
+
+ \param width the new width
+ \sa lineWidth, setLineColor, setLineStyle
+ \sa setLineMarker, setLineMarkerSize, setLineMarkerStyle
+ */
+
+
+/**
+ \fn int KDChartParams::lineWidth() const
+
+ Returns the line width of the lines in line charts.
+
+ \return the line width of lines in line charts
+ \sa lineWidth
+ */
+
+
+/**
+ \fn void KDChartParams::setLineColor( QColor color = QColor() )
+
+ Specifies the color of the lines in line charts. By default
+ line chart lines are drawn in the color specified by the
+ respective setDataColor function, to reset your chart to
+ this default just call setLineColor() without specifying a
+ parameter.
+
+ \note Setting the line color to a special value is usefull to
+ visualize gaps in a normally very narrow series of data values.
+
+ e.g. You might want to specify setLineMarkerStyle( i, LineMarker4Pixels )
+ or even setLineMarkerStyle( i, LineMarker1Pixel ) and have your
+ marker dots normally form a contiguous line without the need of
+ any connecting lines except at the places where missing data
+ values would interrupt the 'line'. Using setLineColor( Qt::darkGray)
+ could make your chart more readable in such cases.
+
+ \param color of the lines in line charts
+ \sa lineColor, setLineWidth, setLineStyle
+ \sa setLineMarker, setLineMarkerSize, setLineMarkerStyle
+ */
+
+
+/**
+ \fn QColor KDChartParams::lineColor() const
+
+ Returns the color of the lines in line charts.
+
+ \return the color of the lines in line charts
+ \sa setLineColor
+ */
+
+
+/**
+ Specifies a line style to be used for line charts.
+
+ The dataset parameter is optional, by default saying
+ KDCHART_GLOBAL_LINE_STYLE, you may use it to
+ set a dataset specific line style for one the lines.
+
+ Global and dataset specific line styles may be used
+ simultaneously: If no dataset specific style is
+ defined the global style is used which by default
+ is Qt::SolidLine.
+
+ Warning: On Windows 95/98, the style setting (other
+ than NoPen and SolidLine) has no effect for lines with width greater
+ than 1, due to a bug in the operating system.
+
+ \param style the line style of the line
+ \param dataset the number of the dataset controlling the respective line
+ \sa lineStyle, setLineWidth, setLineColor
+ \sa setLineMarker, setLineMarkerSize, setLineMarkerStyle
+ */
+void KDChartParams::setLineStyle( Qt::PenStyle style, uint dataset )
+{
+ if( KDCHART_GLOBAL_LINE_STYLE == dataset )
+ _lineStyle = style;
+ else
+ _datasetLineStyles[ dataset ] = style;
+ emit changed();
+}
+
+/**
+ Returns the line style of one of the lines in a line chart
+ or the global line style if no style was specified for the
+ dataset or if the optional dataset parameter has its default
+ value KDCHART_GLOBAL_LINE_STYLE.
+
+ Warning: On Windows 95/98, the style setting (other than NoPen and
+ SolidLine) has no effect for lines with width greater than 1, due
+ to a bug in the operating system.
+
+ \param dataset the dataset for which to return the line style
+ \return the line style for the specified data set
+ \sa setLineStyle, setLineMarkerStyle
+ */
+Qt::PenStyle KDChartParams::lineStyle( uint dataset ) const
+{
+ if( KDCHART_GLOBAL_LINE_STYLE == dataset )
+ // global line style
+ return _lineStyle;
+ else if( _datasetLineStyles.find( dataset ) == _datasetLineStyles.end() )
+ return lineStyle();
+ else
+ return _datasetLineStyles[ dataset ];
+}
+
+
+/**
+ \fn void KDChartParams::setThreeDLines( bool threeD )
+
+ Specifies whether lines should be drawn three-dimensionally or
+ not. The default is to draw two-dimensionally. Only used if
+ chartType() == Line.
+
+ \param threeD if true, draw three-dimensionally, otherwise draw
+ two-dimensionally.
+ \sa threeDLines(), setThreeDLineDepth(), threeDLineDepth(),
+// setThreeDLineXRotation(), threeDLineXRotation(),
+// setThreeDLineYRotation(), threeDLineYRotation()
+*/
+
+
+/**
+ \fn bool KDChartParams::threeDLines() const
+
+ Returns whether lines are drawn three-dimensionally or not. The
+ default is to draw two-dimensionally. Only used if chartType() ==
+ Line.
+
+ \return true if lines are drawn three-dimensionally, false
+ otherwise.
+ \sa setThreeDLines(), setThreeDLineDepth(), threeDLineDepth(),
+// setThreeDLineXRotation(), threeDLineXRotation(),
+// setThreeDLineYRotation(), threeDLineYRotation()
+*/
+
+
+/**
+ \fn void KDChartParams::setThreeDLineDepth( int depth )
+
+ Specifies the depth of 3D lines (the "width" in Z
+ direction). Only used if chartType() == Line and threeDLines() ==
+ true. The default is 20 pixels.
+
+ \param depth the depth in pixels
+ \sa setThreeDLines(), threeDLines(), threeDLineDepth()
+ */
+
+
+/**
+ \fn int KDChartParams::threeDLineDepth() const
+
+ Returns the depth of 3D lines (the "width" in Z direction). Only
+ used if chartType() == Line and threeDLines() == true. The
+ default is 20 pixels.
+
+ \return the depth in pixels
+ \sa setThreeDLines(), threeDLines(), setThreeDLineDepth()
+ */
+
+
+/**
+ \fn void KDChartParams::setThreeDLineXRotation( int degrees )
+
+ \deprecated Feature scheduled for future release, at present not implemented.
+ */
+/*
+ \fn void KDChartParams::setThreeDLineXRotation( int degrees )
+
+ Specifies the rotation around the X axis in degrees. The value
+ may be between 0 and 90. Only used if chartType() == Line and
+ threeDLines() == true. The default is 30 degrees. If 0 degrees is
+ specified for both the X and the Y rotation, the lines will look
+ like 2D lines.
+
+ \param rotation the rotation in degrees. Must be between 0 and
+ 90.
+ \sa setThreeDLines(), threeDLines(), threeDLineXRotation()
+ */
+
+
+
+/**
+ \fn int KDChartParams::threeDLineXRotation() const
+
+ \deprecated Feature scheduled for future release, at present not implemented.
+ */
+/*
+ \fn int KDChartParams::threeDLineXRotation() const
+
+ Returns the rotation around the X axis in degrees. The value may
+ be between 0 and 90. Only used if chartType() == Line and
+ threeDLines() == true. The default is 30 degrees.
+
+ \return the rotation in degrees. Is always between 0 and 90.
+ */
+
+
+/**
+ \fn void KDChartParams::setThreeDLineYRotation( int degrees )
+
+ \deprecated Feature scheduled for future release, at present not implemented.
+ */
+/*
+ \fn void KDChartParams::setThreeDLineYRotation( int degrees )
+
+ Specifies the rotation around the Y axis in degrees. The value
+ may be between 0 and 90. Only used if chartType() == Line and
+ threeDLines() == true. The default is 30 degrees. If 0 degrees is
+ specified for both the X and the Y rotation, the lines will look
+ like 2D lines.
+
+ \param rotation the rotation in degrees. Must be between 0 and
+ 90.
+ \sa setThreeDLines(), threeDLines(), threeDLineYRotation()
+ */
+
+/**
+ \fn int KDChartParams::threeDLineYRotation() const
+
+ \deprecated Feature scheduled for future release, at present not implemented.
+ */
+/*
+ \fn int KDChartParams::threeDLineYRotation() const
+
+ Returns the rotation around the X axis in degrees. The value may
+ be between 0 and 90. Only used if chartType() == Line and
+ threeDLines() == true. The default is 30 degrees.
+
+ \return the rotation in degrees. Is always between 0 and 90.
+ */
+
+
+/**
+ \enum KDChartParams::AreaChartSubType
+
+ The area subtype. Only used when chartType == Area
+
+ \sa setAreaChartSubType, areaChartSubType
+ */
+
+
+/**
+ \fn void KDChartParams::setAreaChartSubType( AreaChartSubType areaChartSubType )
+
+ Specifies the area chart subtype. Only used if chartType() ==
+ Area. The default is AreaNormal.
+
+ \param areaChartSubType the area chart subtype
+ \sa areaChartSubType, AreaChartSubType, setChartType, chartType
+ */
+
+
+/**
+ \fn KDChartParams::AreaChartSubType KDChartParams::areaChartSubType() const
+
+
+ Returns the area chart subtype. Only used if chartType() ==
+ Area.
+
+ \return the area chart sub type
+ \sa setAreaChartSubType, AreaChartSubType, setChartType, chartType
+ */
+
+
+/**
+ \enum KDChartParams::AreaLocation
+
+ Specifies whether the area above the value points or below the
+ value points should be filled. The default is to fill below the
+ value points.
+
+ \sa setAreaLocation(), areaLocation()
+ */
+
+
+/**
+ \fn void KDChartParams::setAreaLocation( AreaLocation location )
+
+ Specifies whether the area above or below the value points
+ should be filled. The default is to fill below the value
+ points.
+
+ This setting is <em>not</em> used with percent areas
+ (i.e. areaChartSubType() == AreaPercent), because these always
+ cover the whole chart.
+
+ \param location whether to fill above or below the value points
+ \sa AreaLocation, areaLocation()
+ */
+
+
+/**
+ \fn KDChartParams::AreaLocation KDChartParams::areaLocation() const
+
+ Returns whether the area above or below the value points is
+ filled.
+
+ \return whether the area above or below the value points is
+ filled.
+ \sa AreaLocation, setAreaLocation()
+ */
+
+
+//@}
+// END LINECHART
+
+// START POLARCHART
+/** @name Polar chart-specific methods.
+
+ These methods query and set polar chart-specific parameters.
+ */
+//@{
+
+
+/**
+ \enum KDChartParams::PolarChartSubType
+
+ The polar subtype. Only used when chartType == Polar
+
+ \sa setPolarChartSubType, polarChartSubType
+ */
+
+
+/**
+ \fn void KDChartParams::setPolarChartSubType( PolarChartSubType polarChartSubType )
+
+ Specifies the polar chart subtype. Only used if chartType() ==
+ Polar. The default is PolarNormal.
+
+ \param polarChartSubType the polar chart subtype
+ \sa polarChartSubType, PolarChartSubType, setChartType, chartType
+ */
+
+
+/**
+ \fn KDChartParams::PolarChartSubType KDChartParams::polarChartSubType() const
+
+ Returns the polar chart subtype. Only used if chartType() ==
+ Polar.
+
+ \return the polar chart sub type
+ \sa setPolarChartSubType, PolarChartSubType, setChartType, chartType
+ */
+
+
+/**
+ \fn void KDChartParams::setPolarMarker( bool marker )
+
+ Specifies whether there should be a marker at each data
+ point. Only used if chartType() == Polar. The default is not to
+ draw markers.
+
+ \param marker true if markers should be drawn
+ */
+
+
+/**
+ \fn bool KDChartParams::polarMarker() const
+
+ Returns whether polar markers should be drawn at each data
+ point. Only used if chartType() == Polar.
+
+ \return true if markers should be drawn.
+ */
+
+
+/**
+ \enum KDChartParams::PolarMarkerStyle
+
+ The available polar marker styles.
+ */
+
+
+/**
+ Specifies the polar marker to be used for a dataset. Only used if
+ chartType() == Polar and polarMarker() == true. If you specify a
+ marker for a dataset, but not for a dataset with a lower
+ value, then the marker for the dataset with the lower value
+ will be undefined unless it was previously defined. The default
+ is a circle for the first dataset, a square for the second, a
+ diamond for the third and undefined for all subsequent
+ datasets.
+
+ \param dataset the dataset for which to set the polar marker
+ \param style the style to set for the specified dataset
+ \sa PolarMarkerStyle, polarMarkerStyle
+ */
+void KDChartParams::setPolarMarkerStyle( uint dataset, PolarMarkerStyle style )
+{
+ _polarMarkerStyles[ dataset ] = style;
+ _maxDatasetPolarMarkerStyle = QMAX( dataset,
+ _maxDatasetPolarMarkerStyle );
+ emit changed();
+}
+
+/**
+ Returns the marker to be used for a dataset. Only used if
+ chartType() == Polar and polarMarker() == true.
+
+ \param dataset the dataset for which to return the polar marker
+ \return the polar marker for the specified data set
+ \sa PolarMarkerStyle, setPolarMarkerStyle
+ */
+KDChartParams::PolarMarkerStyle KDChartParams::polarMarkerStyle( uint dataset ) const
+{
+ if( _polarMarkerStyles.find( dataset ) != _polarMarkerStyles.end() )
+ return _polarMarkerStyles[ dataset ];
+ else
+ return PolarMarkerCircle; // default
+}
+
+
+/**
+ \var KDChartParams::PolarMarkerStyleMap
+
+ The type of the storage structure for polar marker styles. You
+ should normally not need to use this.
+ */
+
+
+
+/**
+ Sets a whole map of polar marker styles. You can use this for
+ assigning many polar marker styles at the same time, but
+ typically it is better to set them individually with \a
+ setPolarMarkerStyle().
+
+ \param map the map of styles
+ \sa polarMarkerStyles(), setPolarMarkerStyle()
+ */
+void KDChartParams::setPolarMarkerStyles( PolarMarkerStyleMap map ) {
+ _polarMarkerStyles = map;
+ // update _maxDatasetPolarMarkerStyle
+ uint maxDataset = 0;
+ for( PolarMarkerStyleMap::ConstIterator it = _polarMarkerStyles.begin();
+ it != _polarMarkerStyles.end(); ++it )
+ maxDataset = QMAX( maxDataset, it.key() );
+ _maxDatasetPolarMarkerStyle = maxDataset;
+}
+
+
+/**
+ \fn KDChartParams::PolarMarkerStyleMap KDChartParams::polarMarkerStyles() const
+
+ Returns the whole map of polar marker styles. You will usually
+ not need this. You can query individual polar marker styles by
+ calling \a polarMarkerStyle().
+
+ \return the map of styles
+ \sa polarMarkerStyle(), setPolarMarkerStyles()
+ */
+
+
+/**
+ \fn uint KDChartParams::maxDatasetPolarMarkerStyle() const
+
+ Returns the highest dataset for which a polar marker style has been
+ defined. Not all datasets with a lower number necessarily have
+ a defined polar marker.
+
+ \return the highest dataset with a defined polar marker
+ \sa PolarMarkerStyle, setPolarMarkerStyle, polarMarkerStyle
+ */
+
+
+/**
+ \fn void KDChartParams::setPolarMarkerSize( QSize )
+
+ Specifies the sizes of polar markers. Only used if chartType() == Polar
+ and polarMarker() == true. The default is -40 x -40.
+
+ \param size the size of the polar marker in pixels, if negative this is a
+ per mille value of the chart min. size (the chart width or height, depending
+ what is smaller), if positive the value is taken as absolute number of pixels.
+
+ \sa polarMarkerSize
+ */
+
+
+/**
+ \fn QSize KDChartParams::polarMarkerSize() const
+
+ Returns the sizes of polar markers. Only used if chartType() ==
+ Polar and polarMarker() == true.
+
+ \return the size of the polar marker in pixels
+ \sa setPolarMarkerSize
+ */
+
+
+/**
+ \fn void KDChartParams::setPolarLineWidth( int width )
+
+ Specifies the width for lines in polar charts. Default is -3.
+
+ \param width the new width
+ \sa polarLineWidth
+ */
+
+
+/**
+ \fn int KDChartParams::polarLineWidth() const
+
+ Returns the line width of the lines in polar charts.
+
+ \return the line width of lines in polar charts
+ \sa setPolarLineWidth
+ */
+
+
+/**
+ \fn void KDChartParams::setPolarZeroDegreePos( int degrees )
+
+ Specifies the zero degree position in polar charts.
+
+ Use this function to have the zero degree point on a position
+ different from the right side of the circle. Valid parameters
+ are -359..359.
+
+ \sa polarZeroDegreePos
+ */
+
+
+/**
+ \fn int KDChartParams::polarZeroDegreePos() const
+
+ Returns the zero degree position in polar charts.
+
+ \sa setPolarZeroDegreePos
+ */
+
+
+/**
+ \fn void KDChartParams::setPolarRotateCircularLabels( bool rotateCircularLabels )
+
+ Specifies whether to rotate circular labels in polar charts.
+
+ \sa polarRotateCircularLabels, setPolarDelimsAndLabelsAtPos
+ */
+
+
+/**
+ \fn bool KDChartParams::polarRotateCircularLabels() const
+
+ Returns whether circular labels will be rotated in polar charts.
+
+ \sa setPolarRotateCircularLabels, polarDelimAtPos, polarLabelsAtPos
+ */
+
+
+/**
+ Specifies whether to show circular delimiters and labels at a given
+ position in polar charts.
+
+ \note Value \c KDChartEnums::PosCenter will be ignored.
+
+ \sa setPolarRotateCircularLabels, polarDelimAtPos, polarLabelsAtPos
+ */
+void KDChartParams::setPolarDelimsAndLabelsAtPos( KDChartEnums::PositionFlag pos,
+ bool showDelimiters,
+ bool showLabels )
+{
+ if( KDCHART_MAX_POLAR_DELIMS_AND_LABELS_POS >= pos ) {
+ _polarDelimsAndLabels[ pos ].showDelimiters = showDelimiters;
+ _polarDelimsAndLabels[ pos ].showLabels = showLabels;
+ }
+}
+
+/**
+ Returns whether to show circular delimiters at a given
+ position in polar charts.
+
+ \sa polarRotateCircularLabels, setPolarDelimAndLabelsPos, polarLabelsAtPos
+ */
+bool KDChartParams::polarDelimAtPos( KDChartEnums::PositionFlag pos ) const
+{
+ if( KDCHART_MAX_POLAR_DELIMS_AND_LABELS_POS >= pos )
+ return _polarDelimsAndLabels[ pos ].showDelimiters;
+ else
+ return false;
+}
+
+/**
+ Returns whether to show circular labels at a given
+ position in polar charts.
+
+ \sa polarRotateCircularLabels, setPolarDelimAndLabelsPos, polarDelimAtPos
+ */
+bool KDChartParams::polarLabelsAtPos( KDChartEnums::PositionFlag pos ) const
+{
+ if( KDCHART_MAX_POLAR_DELIMS_AND_LABELS_POS >= pos )
+ return _polarDelimsAndLabels[ pos ].showLabels;
+ else
+ return false;
+}
+
+
+
+//@}
+// END LINECHART
+
+// START RING/PIECHART
+/** @name Ring and pie chart-specific methods.
+
+ These methods query and set ring and pie chart-specific parameters.
+ */
+//@{
+
+/**
+ \fn void KDChartParams::setExplode( bool explode )
+
+ Specifies whether the pie chart or ring chart should be
+ exploding (all pies or ring segments are slightly displaced
+ from the center) or not. The default is not to explode. Only
+ used if chartType() == Pie or chartType() == Ring.
+
+ Note that calling this method by passing true turns on
+ exploding for all segments. You can turn exploding on and off
+ for individual segments by calling setExplodeValues() and also
+ change the explode factors by calling setExplodeFactor() or
+ setExplodeFactors().
+
+ Note that in ring charts, only the outermost ring is
+ exploded. Also note that exploding rings are only useful if
+ none of the values in the outermost dataset covers more than
+ 1/4 of the ring, otherwise the exploded ring will look funny.
+
+ \param explode true if the pie or ring should be exploding,
+ false otherwise
+ \sa exploding(), setExplodeFactor(), explodeFactor(),
+ setExplodeFactors(), explodeFactors(), setExplodeValues(),
+ explodeValues()
+ */
+
+
+/**
+ \fn bool KDChartParams::explode() const
+
+ Returns whether the pie or ring chart should be exploding or not
+
+ \return true if the pie should be exploding
+ \sa setExplode, setExplodeFactor(), explodeFactor(),
+ setExplodeFactors(), explodeFactors(), setExplodeValues(),
+ explodeValues()
+ */
+
+
+/**
+ \fn void KDChartParams::setExplodeValues( QValueList<int> explodeList )
+
+ Specifies which values to explode. Explosion of values only
+ happens if setExplode( true ) has been called. Normally, all
+ values are exploded (all values on the outer ring in the case of a
+ ring chart). With this function, you have a finer control about
+ the explosion. You can specify the values that should be exploded
+ by their position. Passing an empty list here turns on explosion
+ for all pies or ring segments (but only if explosion is turned on
+ in general).
+
+ To repeat: Setting anything here has no effect if setExplode( true )
+ is not called. You can, however, set any values here even if explosion is
+ not turned on; they will be saved in case explosion will be turned on in
+ the future and then be valid automatically.
+
+ The explode factor, i.e., the amount with which a segment is moved
+ from the center can either be set for all segments with
+ \a setExplodeFactor() or for individual segments with
+ \a setExplodeFactors(). The default is 10%.
+
+ \param explodeList the list of positions in the displayed dataset that
+ should be drawn in an exploded position. Pass an empty list here to
+ explode all values.
+ \sa setExplode(), explode(), setExplodeFactor(), explodeFactor(),
+ explodeValues(), setExplodeFactors(), explodeFactors()
+ */
+
+
+/**
+ \fn QValueList<int> KDChartParams::explodeValues() const
+
+ Returns which values are exploded in a pie or ring chart. For a detailed
+ explanation of this feature, please see \a setExplodeValues().
+
+ \return the list of values that are exploded
+ \sa setExplode(), explode(), setExplodeFactor(), explodeFactor(),
+ setExplodeValues()
+ */
+
+
+/**
+ \fn void KDChartParams::setExplodeFactors( QMap<int,double> factors )
+
+ Specifies the explode factors for each segment in percent,
+ i.e. how much an exploded pie or ring segment is displaced from
+ the center. The factor is given as a double value between 0 and 1;
+ 0.1 means 10%. Only used if chartType() == Pie or chartType() ==
+ Ring and explode() == true.
+
+ Segments that are not contained in the map specified here will
+ have the default explode factor of 10%, if exploding is turned on
+ for them at all. This also means that passing an empty list to
+ this method does not turn off exploding in general; use \a
+ setExplode( false ) for that.
+
+Note: This method has no immediate effect if setExplode( true )
+has not been called. It is, however, possible to preset explode
+factors and then turn on exploding later.
+
+Note: Besides giving a segment an explode factor and turning on
+exploding in general, you also need to specify to explode a
+certain segment by calling \a setExplodeValues(). This gives maximum
+flexibility as it allows you to preset explode factors and then
+explode or not not explode a segment at leisure - at the expense
+of one more method call.
+
+\param factors the list of explode factors
+\sa setExplode(), explode(), setExplodeValues(), explodeValues(),
+setExplodeFactor(), explodeFactor(), explodeFactors()
+*/
+
+
+/**
+ \fn QMap<int,double> KDChartParams::explodeFactors() const {
+
+ Returns the list of explode factors. Each explode factor in the
+ list corresponds to the segment at the same position.
+
+ \return the list of explode factors
+ \sa setExplode(), explode(), setExplodeValues(), explodeValues(),
+ setExplodeFactor(), explodeFactor(), setExplodeFactors()
+ */
+
+
+/**
+ \fn void KDChartParams::setExplodeFactor( double factor )
+
+ Specifies the explode factor in percent, i.e. how much an
+ exploded pie or ring segment is displaced from the center. The
+ factor is given as a double value between 0 and 1; 0.1 means
+ 10% and is the default. Only used if
+ chartType() == Pie or chartType() == Ring and explode() == true.
+
+ Note that this method sets the explode factor for all segments
+ that are exploded but for which no more specific explode factor
+ has been set with \a setExplodeFactors(). Thus, to make the value
+ specified here the default value, you can pass an empty list to
+ \a setExplodeFactors() (which also is the default).
+
+ \param factor the explode factor
+ \sa setExplode(), explode(), explodeFactor(),
+ setExplodeValues(), explodeValues(), setExplodeFactors(),
+ explodeFactors()
+ */
+
+
+/**
+ \fn double KDChartParams::explodeFactor() const
+
+ Returns the default explode factor, i.e., the explode factor
+ used for those segments which should be exploded but for which
+ no more specific explode factor has been set. See \a
+ setExplodeFactor() for an explanation of the value.
+
+ \return the explode factor
+ \sa setExplodeFactor(), setExplode(), explode()
+ */
+
+
+/**
+ \fn void KDChartParams::setThreeDPies( bool threeDPies )
+
+ Specifies whether the engine should draw the pies in 3D. Only
+ used if chartType() == Pie.
+
+ \param threeDPies true if pies should be drawn with a 3D effect
+ \sa threeDPies(), setThreeDPieHeight(), threeDPieHeight()
+ */
+
+
+/**
+ \fn bool KDChartParams::threeDPies() const
+
+ Returns whether the engine should draw any pies in 3D. Only
+ used if chartType() == Pie.
+
+ \return true if pies should be drawn with a 3D effect, false
+ otherwise
+ \sa setThreeDPies(), threeDPieHeight(), setThreeDPieHeight()
+ */
+
+
+/**
+ \fn void KDChartParams::setThreeDPieHeight( int pixels )
+
+ Specifies the height of the 3D effect for pies in pixels. Only used if
+ chartType() == Pie and threeDPies() == true. Negative values are
+ interpreted relative to the height of the pie where -100 means
+ that the 3D effect has the same height as the pie itself; values
+ smaller than -25 are hardly useful. Positive values are
+ interpreted as absolute sizes in pixels. The default is an
+ absolute value of 20 pixels.
+
+ \param height the height of the 3D effect in pixels
+ \sa threeDHeight(), setThreeDPies(), threeDPies()
+ */
+
+
+/**
+ \fn int KDChartParams::threeDPieHeight() const
+
+ Returns the height of the 3D effect for pies in pixels. See \a
+ setThreeDPieHeight for the interpretation of the value.
+
+ \return the height of the 3D effect in pixels
+ \sa setThreeDPieHeight(), setThreeDPies(), threeDPies()
+ */
+
+
+/**
+ \fn void KDChartParams::setPieStart( int degrees )
+
+ Specifies the starting point of the pie circle. The default is the 3 o'
+ clock position which equals to 0. Positive values are angles in degrees
+ counterclockwise, negative values are angles in degrees
+ clockwise. All values will be normalized to [0;360[.
+
+ \param degrees the starting point in degrees
+ \sa pieStart()
+ */
+
+
+/**
+ \fn int KDChartParams::pieStart() const
+
+ Returns the starting point of the pie circle. See \a setPieStart() for
+ the interpretation of these values. The return value is
+ always in the interval [0;360[
+
+ \return the starting point of the pie circle in degrees
+ \sa setPieStart()
+ */
+
+
+/**
+ \fn void KDChartParams::setRingStart( int degrees )
+
+ Specifies the starting point of the ring circle. The default is the 3 o'
+ clock position which equals to 0. Positive values are angles in degrees
+ counterclockwise, negative values are angles in degrees
+ clockwise. All values will be normalized to [0;360[.
+
+ \param degrees the starting point in degrees
+ \sa pieStart()
+ */
+
+
+/**
+ \fn int KDChartParams::ringStart() const
+
+ Returns the starting point of the ring circle. See \a
+ setRingStart() for the interpretation of these values. The
+ return value is always in the interval [0;360[
+
+ \return the starting point of the ring circle in degrees
+ \sa setRingStart()
+ */
+
+
+/**
+ \fn void KDChartParams::setRelativeRingThickness( bool relativeThickness )
+
+ Specifies whether the ring thickness should be relative to the sum of the
+ values in the dataset that the ring represents. The default is to have all
+ the rings with the same thickness which itself depends on the size of the
+ chart and the number of rings.
+
+ \param relativeThickness if true, ring thickness is relative, if false, it
+ is constant.
+ \sa relativeThickness()
+ */
+
+
+/**
+ \fn bool KDChartParams::relativeRingThickness() const
+
+ Returns whether the ring thickness is relative to the sum of values in the
+ dataset that the ring represents, or whether the ring thickness should be
+ constant.
+
+ \return true if thickness is relative, false if it is constant
+ \sa setRelativeRingThickness()
+ */
+
+
+
+//@}
+// END RING/PIECHART
+
+// START HILO CHART
+/** @name Hi-lo chart-specific methods.
+
+ These methods query and set hi-lo chart-specific parameters.
+ */
+//@{
+
+/**
+ \enum KDChartParams::HiLoChartSubType
+
+ The HiLo subtype. Only used when chartType == HiLo
+
+ \sa setHiLoChartSubType, hiLoChartSubType
+ */
+
+/**
+ \fn void KDChartParams::setHiLoChartSubType( HiLoChartSubType hiLoChartSubType )
+
+ Specifies the HiLo chart subtype. Only used if chartType() ==
+ HiLo
+
+ \param hiLoChartSubType the HiLo chart subtype
+ \sa hiLoChartSubType, HiLoChartSubType, setChartType, chartType
+ */
+
+
+/**
+ \fn KDChartParams::HiLoChartSubType KDChartParams::hiLoChartSubType() const
+
+ Returns the HiLo chart subtype. Only used if chartType() ==
+ HiLo.
+
+ \return the HiLo chart sub type
+ \sa setHiLoChartSubType, HiLoChartSubType, setChartType, chartType
+ */
+
+
+/**
+ Specifies if and how a HiLo chart will print the Low
+ values below their respective entries. Only used if chartType() == HiLo
+
+ \note <b>setHiLoChartPrintLowValues( false )</b> will
+ deactivate printing of Low values.
+
+ \param active specifies whether the values are to be printed or not.
+ \param font a Pointer to the font to be used.
+ \param size (in per mille of the chart width) the dynamic size of
+ the font to be used. If this parameter is zero the size of the
+ \c font is used instead - regardless of the size of the chart!
+ \param color the color to be used when printing the values.
+ \sa setChartType, chartType
+ \sa setHiLoChartSubType, hiLoChartSubType
+ \sa setHiLoChartPrintHighValues
+ \sa hiLoChartPrintLowValues, hiLoChartPrintLowValues
+ \sa hiLoChartLowValuesFontColor, hiLoChartLowValuesFontColor
+ \sa hiLoChartLowValuesFontUseRelSize, hiLoChartLowValuesFontUseRelSize
+ \sa hiLoChartLowValuesFontRelSize, hiLoChartLowValuesFontRelSize
+ \sa hiLoChartPrintHighValues, hiLoChartPrintHighValues
+ \sa hiLoChartHighValuesFontColor, hiLoChartHighValuesFontColor
+ \sa hiLoChartHighValuesFontUseRelSize, hiLoChartHighValuesFontUseRelSize
+ \sa hiLoChartHighValuesFontRelSize, hiLoChartHighValuesFontRelSize
+ */
+void KDChartParams::setHiLoChartPrintLowValues( bool active, QFont* font,
+ int size, QColor* color )
+{
+ _hiLoChartPrintLowValues = active;
+ if ( font )
+ _hiLoChartLowValuesFont = *font;
+ else
+ _hiLoChartLowValuesFont = _defaultFont;
+ _hiLoChartLowValuesUseFontRelSize = ( 0 < size );
+ _hiLoChartLowValuesFontRelSize = size;
+ if ( 0 == color )
+ _hiLoChartLowValuesColor = QColor( 0, 0, 0 );
+ else
+ _hiLoChartLowValuesColor = *color;
+ emit changed();
+}
+
+
+/**
+ \fn bool KDChartParams::hiLoChartPrintLowValues() const
+
+ Returns whether the low values
+ will be printed under their respective entries.
+
+ \return whether the low values
+ will be printed under their respective entries.
+
+ \sa setHiLoChartPrintLowValues, setHiLoChartPrintHighValues
+ \sa setHiLoChartSubType, hiLoChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ \fn QFont KDChartParams::hiLoChartLowValuesFont() const
+
+ Returns the font to be used for printing the
+ low values
+
+ \returns the font to be used for printing the
+ low values
+
+ \sa setHiLoChartPrintLowValues, setHiLoChartPrintHighValues
+ \sa setHiLoChartSubType, hiLoChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ \fn bool KDChartParams::hiLoChartLowValuesUseFontRelSize() const
+
+ Returns whether the font size to be used for printing the
+ low values is calculated dynamically.
+
+ \return whether the font size to be used for printing the
+ low values is calculated dynamically.
+
+ \sa setHiLoChartPrintLowValues, setHiLoChartPrintHighValues
+ \sa setHiLoChartSubType, hiLoChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ \fn int KDChartParams::hiLoChartLowValuesFontRelSize() const
+
+ Returns the relative size (in per mille of the chart width)
+ of font size to be used for printing the
+ low values.
+
+ \return the relative size (in per mille of the chart width)
+ of font size to be used for printing the
+ low values.
+
+ \sa setHiLoChartPrintLowValues, setHiLoChartPrintHighValues
+ \sa setHiLoChartSubType, hiLoChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ \fn QColor KDChartParams::hiLoChartLowValuesColor() const
+
+ Returns the colour of the font size to be used for printing the
+ low values.
+
+ \return the colour of the font size to be used for printing the
+ low values.
+
+ \sa setHiLoChartPrintLowValues, setHiLoChartPrintHighValues
+ \sa setHiLoChartSubType, hiLoChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ Specifies if and how a HiLo chart will print the High
+ values below their respective entries.
+ Only used if chartType() == HiLo
+
+ \note <b>setHiLoChartPrintHighValues( false )</b> will
+ deactivate printing of High values.
+
+ \param active specifies whether the values are to be printed or not.
+ \param font specifies a Pointer to the font to be used.
+ \param size (in per mille of the chart width) specifies the
+ dynamic size of the font to be used. If this parameter is zero
+ the size of the
+ \c font is used instead - regardless of the size of the chart!
+ \param specifies the color the color to be used when printing
+ the values.
+ \sa setHiLoChartPrintLowValues
+ \sa setHiLoChartSubType, hiLoChartSubType
+ \sa setChartType, chartType
+ \sa hiLoChartPrintHighValues, hiLoChartPrintHighValues
+ \sa hiLoChartHighValuesFontColor, hiLoChartHighValuesFontColor
+ \sa hiLoChartHighValuesFontUseRelSize, hiLoChartHighValuesFontUseRelSize
+ \sa hiLoChartHighValuesFontRelSize, hiLoChartHighValuesFontRelSize
+ \sa hiLoChartPrintLowValues, hiLoChartPrintLowValues
+ \sa hiLoChartLowValuesFontColor, hiLoChartLowValuesFontColor
+ \sa hiLoChartLowValuesFontUseRelSize, hiLoChartLowValuesFontUseRelSize
+ \sa hiLoChartLowValuesFontRelSize, hiLoChartLowValuesFontRelSize
+ */
+void KDChartParams::setHiLoChartPrintHighValues( bool active, QFont* font,
+ int size, QColor* color )
+{
+ _hiLoChartPrintHighValues = active;
+ if ( font )
+ _hiLoChartHighValuesFont = *font;
+ else
+ _hiLoChartHighValuesFont = _defaultFont;
+ _hiLoChartHighValuesUseFontRelSize = ( 0 < size );
+ _hiLoChartHighValuesFontRelSize = size;
+ if ( 0 == color )
+ _hiLoChartHighValuesColor = QColor( 0, 0, 0 );
+ else
+ _hiLoChartHighValuesColor = *color;
+ emit changed();
+}
+
+
+/**
+ \fn bool KDChartParams::hiLoChartPrintHighValues() const
+
+ Returns whether the high values
+ will be printed under their respective entries.
+
+ \return whether the high values
+ will be printed under their respective entries.
+
+ \sa setHiLoChartPrintHighValues, setHiLoChartPrintLowValues
+ \sa setHiLoChartSubType, hiLoChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ \fn QFont KDChartParams::hiLoChartHighValuesFont() const
+
+ Returns the font to be used for printing the
+ high values.
+
+ \returns the font to be used for printing the
+ high values.
+
+ \sa setHiLoChartPrintHighValues, setHiLoChartPrintLowValues
+ \sa setHiLoChartSubType, hiLoChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ \fn bool KDChartParams::hiLoChartHighValuesUseFontRelSize() const
+
+ Returns whether the font size to be used for printing the
+ high values is calculated dynamically.
+
+ \return whether the font size to be used for printing the
+ high values is calculated dynamically.
+
+ \sa setHiLoChartPrintHighValues, setHiLoChartPrintLowValues
+ \sa setHiLoChartSubType, hiLoChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ \fn int KDChartParams::hiLoChartHighValuesFontRelSize() const
+
+ Returns the relative size (in per mille of the chart width)
+ of font size to be used for printing the
+ high values.
+
+ \return the relative size (in per mille of the chart width)
+ of font size to be used for printing the
+ high values.
+
+ \sa setHiLoChartPrintHighValues, setHiLoChartPrintHighValues
+ \sa setHiLoChartSubType, hiLoChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ \fn QColor KDChartParams::hiLoChartHighValuesColor() const
+
+ Returns the colour of the font size to be used for printing the
+ high values.
+
+ \return the colour of the font size to be used for printing the
+ high values.
+
+ \sa setHiLoChartPrintHighValues, setHiLoChartPrintLowValues
+ \sa setHiLoChartSubType, hiLoChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ Specifies if and how a HiLo chart will print the Open values
+ below their respective entries.
+ Only used if chartType() == HiLo and if the HiLo chart sub type
+ shows open values.
+
+ \note <b>setHiLoChartPrintOpenValues( false )</b> will
+ deactivate printing of Open values.
+
+ \param active specifies whether the values are to be printed or not.
+ \param font a Pointer to the font to be used.
+ \param size (in per mille of the chart width) the dynamic size of
+ the font to be used. If this parameter is zero the size of the
+ \c font is used instead - regardless of the size of the chart!
+ \param color the color to be used when printing the values.
+ \sa setHiLoChartPrintCloseValues
+ \sa setHiLoChartSubType, hiLoChartSubType
+ \sa setChartType, chartType
+ \sa hiLoChartPrintOpenValues, hiLoChartPrintOpenValues
+ \sa hiLoChartOpenValuesFontColor, hiLoChartOpenValuesFontColor
+ \sa hiLoChartOpenValuesFontUseRelSize, hiLoChartOpenValuesFontUseRelSize
+ \sa hiLoChartOpenValuesFontRelSize, hiLoChartOpenValuesFontRelSize
+ \sa hiLoChartPrintCloseValues, hiLoChartPrintCloseValues
+ \sa hiLoChartCloseValuesFontColor, hiLoChartCloseValuesFontColor
+ \sa hiLoChartCloseValuesFontUseRelSize, hiLoChartCloseValuesFontUseRelSize
+ \sa hiLoChartCloseValuesFontRelSize, hiLoChartCloseValuesFontRelSize
+ */
+void KDChartParams::setHiLoChartPrintOpenValues( bool active, QFont* font,
+ uint size, QColor* color )
+{
+ _hiLoChartPrintOpenValues = active;
+ if ( font )
+ _hiLoChartOpenValuesFont = *font;
+ else
+ _hiLoChartOpenValuesFont = _defaultFont;
+ _hiLoChartOpenValuesUseFontRelSize = ( 0 < size );
+ _hiLoChartOpenValuesFontRelSize = size;
+ if ( 0 == color )
+ _hiLoChartOpenValuesColor = QColor( 0, 0, 0 );
+ else
+ _hiLoChartOpenValuesColor = *color;
+ emit changed();
+}
+
+
+/**
+ \fn bool KDChartParams::hiLoChartPrintOpenValues() const
+
+ Returns whether the open values will be printed under their
+ respective entries.
+
+ \return whether the open values will be printed under their
+ respective entries.
+
+ \sa setHiLoChartPrintOpenValues, setHiLoChartPrintCloseValues
+ \sa setHiLoChartSubType, hiLoChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ \fn QFont KDChartParams::hiLoChartOpenValuesFont() const
+
+ Returns the font to be used for printing the
+ open values.
+
+ \returns the font to be used for printing the
+ open values.
+
+ \sa setHiLoChartPrintOpenValues, setHiLoChartPrintCloseValues
+ \sa setHiLoChartSubType, hiLoChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ \fn bool KDChartParams::hiLoChartOpenValuesUseFontRelSize() const
+
+ Returns whether the font size to be used for printing the
+ open values is calculated dynamically.
+
+ \return whether the font size to be used for printing the
+ open values is calculated dynamically.
+
+ \sa setHiLoChartPrintOpenValues, setHiLoChartPrintCloseValues
+ \sa setHiLoChartSubType, hiLoChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ \fn int KDChartParams::hiLoChartOpenValuesFontRelSize() const
+
+ Returns the relative size (in per mille of the chart width)
+ of font size to be used for printing the open values.
+
+ \return the relative size (in per mille of the chart width) of
+ font size to be used for printing the open values.
+
+ \sa setHiLoChartPrintOpenValues, setHiLoChartPrintCloseValues
+ \sa setHiLoChartSubType, hiLoChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ \fn QColor KDChartParams::hiLoChartOpenValuesColor() const
+
+ Returns the colour of the font size to be used for printing the
+ open values.
+
+ \return the colour of the font size to be used for printing the
+ open values.
+
+ \sa setHiLoChartPrintOpenValues, setHiLoChartPrintCloseValues
+ \sa setHiLoChartSubType, hiLoChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ Specifies if and how a HiLo chart will print the Close
+ values next to their respective entries.
+ Only used if chartType() == HiLo and the HiLo chart sub type
+ contains Close values.
+
+ \note <b>setHiLoChartPrintCloseValues( false )</b> will
+ deactivate printing of Close values.
+
+ \param active specifies whether the values are to be printed or not.
+ \param font specifies a Pointer to the font to be used.
+ \param size (in per mille of the chart width) specifies the dynamic size of
+ the font to be used. If this parameter is zero the size of the
+ \c font is used instead - regardless of the size of the chart!
+ \param specifies the color the color to be used when printing the values.
+ \sa setHiLoChartPrintOpenValues
+ \sa setHiLoChartSubType, hiLoChartSubType
+ \sa setChartType, chartType
+ \sa hiLoChartPrintCloseValues, hiLoChartPrintCloseValues
+ \sa hiLoChartCloseValuesFontColor, hiLoChartCloseValuesFontColor
+ \sa hiLoChartCloseValuesFontUseRelSize, hiLoChartCloseValuesFontUseRelSize
+ \sa hiLoChartCloseValuesFontRelSize, hiLoChartCloseValuesFontRelSize
+ \sa hiLoChartPrintOpenValues, hiLoChartPrintOpenValues
+ \sa hiLoChartOpenValuesFontColor, hiLoChartOpenValuesFontColor
+ \sa hiLoChartOpenValuesFontUseRelSize, hiLoChartOpenValuesFontUseRelSize
+ \sa hiLoChartOpenValuesFontRelSize, hiLoChartOpenValuesFontRelSize
+ */
+void KDChartParams::setHiLoChartPrintCloseValues( bool active, QFont* font,
+ int size, QColor* color )
+{
+ _hiLoChartPrintCloseValues = active;
+ if ( font )
+ _hiLoChartCloseValuesFont = *font;
+ else
+ _hiLoChartCloseValuesFont = _defaultFont;
+ _hiLoChartCloseValuesUseFontRelSize = ( 0 < size );
+ _hiLoChartCloseValuesFontRelSize = size;
+ if ( 0 == color )
+ _hiLoChartCloseValuesColor = QColor( 0, 0, 0 );
+ else
+ _hiLoChartCloseValuesColor = *color;
+ emit changed();
+}
+
+/**
+ \fn bool KDChartParams::hiLoChartPrintCloseValues() const
+
+ Returns whether the close values will be printed under their
+ respective entries.
+
+ \return whether the close values will be printed under their
+ respective entries.
+
+ \sa setHiLoChartPrintCloseValues, setHiLoChartPrintOpenValues
+ \sa setHiLoChartSubType, hiLoChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ \fn QFont KDChartParams::hiLoChartCloseValuesFont() const
+
+ Returns the font to be used for printing the close values.
+
+ \returns the font to be used for printing the close values.
+
+ \sa setHiLoChartPrintCloseValues, setHiLoChartPrintOpenValues
+ \sa setHiLoChartSubType, hiLoChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ \fn bool KDChartParams::hiLoChartCloseValuesUseFontRelSize() const
+
+ Returns whether the font size to be used for printing the close
+ values is calculated dynamically.
+
+ \return whether the font size to be used for printing the close
+ values is calculated dynamically.
+
+ \sa setHiLoChartPrintCloseValues, setHiLoChartPrintOpenValues
+ \sa setHiLoChartSubType, hiLoChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ \fn int KDChartParams::hiLoChartCloseValuesFontRelSize() const
+ Returns the relative size (in per mille of the chart width) of
+ font size to be used for printing the close values.
+
+ \return the relative size (in per mille of the chart width) of
+ font size to be used for printing the close values.
+
+ \sa setHiLoChartPrintCloseValues, setHiLoChartPrintOpenValues
+ \sa setHiLoChartSubType, hiLoChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ \fn QColor KDChartParams::hiLoChartCloseValuesColor() const
+
+ Returns the colour of the font size to be used for printing the
+ close values.
+
+ \return the colour of the font size to be used for printing the
+ close values.
+
+ \sa setHiLoChartPrintCloseValues, setHiLoChartPrintOpenValues
+ \sa setHiLoChartSubType, hiLoChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ \fn void KDChartParams::setHiLoChartPrintFirstValues( bool, QFont*, uint, QColor* )
+
+ \obsolete
+
+ This method is obsolete; use \a setHiLoChartPrintOpenValues().
+ */
+
+
+/**
+ \fn bool KDChartParams::hiLoChartPrintFirstValues() const
+
+ \obsolete
+
+ This method is obsolete; use \a hiLoChartPrintOpenValues()
+ instead.
+ */
+
+
+/**
+ \fn QFont KDChartParams::hiLoChartFirstValuesFont() const
+
+ \obsolete
+
+ This method is obsolete; use \a hiLoChartOpenValuesFont()
+ instead.
+ */
+
+
+/**
+ \fn bool KDChartParams::hiLoChartFirstValuesUseFontRelSize() const
+
+ \obsolete
+
+ This method is obsolete; use \a
+ hiLoChartOpenValuesUseFontRelSize() instead.
+ */
+
+
+/**
+ \fn int KDChartParams::hiLoChartFirstValuesFontRelSize() const
+
+ \obsolete
+
+ This method is obsolete; use \a
+ hiLoChartOpenValuesFontRelSize() instead.
+ */
+
+
+/**
+ \fn QColor KDChartParams::hiLoChartFirstValuesColor() const
+
+ \obsolete
+
+ This method is obsolete; use \a hiLoChartOpenValuesColor()
+ instead.
+ */
+
+
+/**
+ \fn void KDChartParams::setHiLoChartPrintLastValues( bool, QFont*, int, QColor* )
+
+ \obsolete
+
+ This method is obsolete; use \a setHiLoChartPrintCloseValues()
+ instead.
+ */
+
+
+/**
+ \fn bool KDChartParams::hiLoChartPrintLastValues() const
+
+ \obsolete
+
+ This method is obsolete; use \a hiLoChartPrintCloseValues()
+ instead.
+ */
+
+
+/**
+ \fn QFont KDChartParams::hiLoChartLastValuesFont() const
+
+ \obsolete
+
+ This method is obsolete; use \a hiLoChartCloseValuesFont()
+ instead.
+ */
+
+
+/**
+ \fn bool KDChartParams::hiLoChartLastValuesUseFontRelSize() const
+
+ \obsolete
+
+ This method is obsolete; use \a hiLoChartCloseValuesUseFontRelSize()
+ instead.
+ */
+
+
+/**
+ \fn int KDChartParams::hiLoChartLastValuesFontRelSize() const
+
+ \obsolete
+
+ This method is obsolete; use \a hiLoChartCloseValuesFontRelSize()
+ instead.
+ */
+
+
+/**
+ \fn QColor KDChartParams::hiLoChartLastValuesColor() const
+
+ \obsolete
+
+ This method is obsolete; use \a hiLoChartCloseValuesColor()
+ instead.
+ */
+
+
+
+//@}
+// END HILO CHART
+
+// START BOX/WHISKER CHART
+/** @name Box-and-whisker chart-specific methods.
+
+ These methods query and set box-and-whisker chart-specific parameters.
+ */
+//@{
+
+/**
+ \enum KDChartParams::BWChartSubType
+
+ The BoxWhisker subtype. Only used when chartType == BoxWhisker
+
+ \sa setBWChartSubType, bWChartSubType
+ */
+
+
+/**
+ \enum KDChartParams::BWStatVal
+
+ The different statistical values that can be printed into or
+ asked from a Box and Whisker chart. Only used when chartType == BoxWhisker
+
+ \sa setBWChartSubType, bWChartSubType
+ */ // use the following syntax to avoid warnings:
+
+
+/**
+ \fn void KDChartParams::setBWChartSubType( BWChartSubType bWChartSubType )
+
+ Specifies the BoxWhisker chart subtype. Only used if chartType() ==
+ BoxWhisker
+
+ \param bWChartSubType the BoxWhisker chart subtype
+ \sa bWChartSubType, BWChartSubType, setChartType, chartType
+ */
+
+
+/**
+ \fn KDChartParams::BWChartSubType KDChartParams::bWChartSubType() const
+
+ Returns the BoxWhisker chart subtype. Only used if chartType() ==
+ BoxWhisker.
+
+ \return the BoxWhisker chart sub type
+ \sa setBWChartSubType, BWChartSubType, setChartType, chartType
+ */
+
+
+
+/**
+ Specifies the factors to be used to calculate the position of
+ the inner (or outer, resp.) fences.
+
+ Default values for both inner fences are 1.5 times the
+ interquartile range from the corresponding quartile,
+ for both outer fences default is 3.0 times the IQR.
+
+ \sa bWChartFences
+ \sa setBWChartOutValMarkerSize, setBWChartPrintStatistics
+ \sa setBWChartSubType, bWChartSubType
+ \sa setChartType, chartType
+ */
+void KDChartParams::setBWChartFences( double upperInner, double lowerInner,
+ double upperOuter, double lowerOuter )
+{
+ _BWChartFenceUpperInner = upperInner;
+ _BWChartFenceLowerInner = lowerInner;
+ _BWChartFenceUpperOuter = upperOuter;
+ _BWChartFenceLowerOuter = lowerOuter;
+}
+/**
+ Retrievs the factors to be used to calculate the position of
+ the inner (or outer, resp.) fences.
+
+ \sa setBWChartFences
+ \sa setBWChartOutValMarkerSize, setBWChartPrintStatistics
+ \sa setBWChartSubType, bWChartSubType
+ \sa setChartType, chartType
+ */
+void KDChartParams::bWChartFences( double& upperInner, double& lowerInner,
+ double& upperOuter, double& lowerOuter ) const
+{
+ upperInner = _BWChartFenceUpperInner;
+ lowerInner = _BWChartFenceLowerInner;
+ upperOuter = _BWChartFenceUpperOuter;
+ lowerOuter = _BWChartFenceLowerOuter;
+}
+
+
+/**
+ \fn void KDChartParams::setBWChartBrush( const QBrush& bWChartBrush )
+
+ Specifies the brush to be used to fill the BoxWhisker charts.
+
+ \param bWChartBrush the brush to be used
+ \sa bWChartBrush, setChartType, chartType
+ */
+
+
+/**
+ \fn QBrush KDChartParams::bWChartBrush() const
+
+ Returns the brush to be used to fill the BoxWhisker charts.
+
+ \return the brush to be used
+ \sa setBWChartBrush, setChartType, chartType
+ */
+
+
+/**
+ \fn void KDChartParams::setBWChartOutValMarkerSize( int size )
+
+ Specifies how big outlier markers (representing the values outside
+ the inner fences) will be drawn.
+
+ When specifying a value different from 0 the chart will show the outlier
+ markers in the respective size, use zero to disable showing the outliers,
+ use negative values to have the marker size calculated dynamically
+ (in percent of the current boxes' width). Thus marker sizes will be
+ recalculated after modification of either the number of boxes
+ or the size of the entire chart.
+
+ \note Shapes of the outlier markers depend on their distance to the
+ respective fence: circles are used to represent near outside values
+ while asteriscs indicate far outside values (the ones outside the
+ outer fence), you may use setBWChartFences() to specify the factor
+ to be used to calculate the value of the inner and outer fence.
+
+ \sa bWChartOutValMarkerSize
+ \sa setBWChartFences, setBWChartPrintStatistics
+ \sa setBWChartSubType, bWChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ \fn int KDChartParams::bWChartOutValMarkerSize() const
+
+ Returns how big outlier markers (representing the values outside
+ the inner fences) will be drawn.
+
+ \return how big outside value markers will be drawn, zero means
+ they will be invisible, negative values indicate that the size
+ is calculated dynamically based upon the current boxes' width.
+
+ \sa setBWChartOutValMarkerSize
+ \sa setBWChartFences, setBWChartPrintStatistics
+ \sa setBWChartSubType, bWChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ Specifies if and how a BoxWhisker chart will print the
+ respective statistical values near to the drawing.
+ Only used if chartType() == BoxWhisker
+
+ \note <b>setBWChartPrintStatistics( BWStatVal, false )</b> will
+ deactivate printing of the respective statistical values.
+
+ \param statValue specifies the statistical value to be set, use
+ BWStatValALL to define equal settings for all
+ of the statistical values.
+ \param active specifies whether the values are to be printed or not.
+ \param font a Pointer to the font to be used.
+ \param size (relative to the boxes' width) the dynamic size of
+ the font to be used. If this parameter is zero the size of the
+ \c font is used instead - regardless of the size of the chart
+ and regardless of the number of boxes!
+ \param color the color to be used when printing the values.
+ \param brush the brush to be used to fill the text's area before printing
+ \sa setChartType
+ \sa setBWChartSubType
+ \sa bWChartPrintStatistics
+ \sa bWChartStatisticsColor,
+ \sa bWChartStatisticsBrush,
+ \sa bWChartStatisticsFontUseRelSize
+ \sa bWChartStatisticsFontRelSize
+ */
+void KDChartParams::setBWChartPrintStatistics( BWStatVal statValue,
+ bool active,
+ QFont* font,
+ int size,
+ QColor* color,
+ QBrush* brush )
+{
+ BWStatVal statValA = (BWStatValALL == statValue) ? BWStatValSTART : statValue;
+ BWStatVal statValZ = (BWStatValALL == statValue) ? BWStatValEND : statValue;
+ for( int i = statValA; i <= statValZ; ++i ){
+ _BWChartStatistics[ i ].active = active;
+ if ( font )
+ _BWChartStatistics[ i ].font = *font;
+ else
+ _BWChartStatistics[ i ].font = _defaultFont;
+ _BWChartStatistics[ i ].useRelSize = ( 0 < size );
+ _BWChartStatistics[ i ].relSize = size;
+ if ( 0 == color )
+ _BWChartStatistics[ i ].color = QColor( 0, 0, 0 );
+ else
+ _BWChartStatistics[ i ].color = *color;
+ if ( 0 == brush )
+ _BWChartStatistics[ i ].brush = QBrush( Qt::white );
+ else
+ _BWChartStatistics[ i ].brush = *brush;
+ }
+ emit changed();
+}
+
+
+/**
+ \fn bool KDChartParams::bWChartPrintStatistics( BWStatVal statValue ) const
+
+ Returns whether the respective statistical values
+ will be printed near to the drawing.
+
+ \return whether the respective statistical values
+ will be printed near to the drawing.
+
+ \sa setBWChartPrintStatistics
+ \sa setBWChartSubType, bWChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ \fn QFont KDChartParams::bWChartStatisticsFont( BWStatVal statValue ) const
+
+ Returns the font to be used for printing the respective statistical values
+
+ \returns the font to be used for printing the respective statistical values
+
+ \sa setBWChartPrintStatistics
+ \sa setBWChartSubType, bWChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ \fn bool KDChartParams::bWChartStatisticsUseRelSize( BWStatVal statValue ) const
+
+ Returns whether the font size to be used for printing the respective statistical values
+ is calculated dynamically.
+
+ \returns whether the font size to be used for printing the respective statistical values
+ is calculated dynamically.
+
+ \sa setBWChartPrintStatistics
+ \sa setBWChartSubType, bWChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ \fn int KDChartParams::bWChartStatisticsFontRelSize( BWStatVal statValue ) const
+
+ Returns the relative size (in per mille of the chart width)
+ of the font to be used for printing the respective statistical values.
+
+ \returns the relative size (in per mille of the chart width)
+ of the font to be used for printing the respective statistical values.
+
+ \sa setBWChartPrintStatistics
+ \sa setBWChartSubType, bWChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ \fn QColor KDChartParams::bWChartStatisticsColor( BWStatVal statValue ) const
+
+ Returns the colour
+ of the font to be used for printing the respective statistical values.
+
+ \returns the colour
+ of the font to be used for printing the respective statistical values.
+
+ \sa setBWChartPrintStatistics
+ \sa setBWChartSubType, bWChartSubType
+ \sa setChartType, chartType
+ */
+
+
+/**
+ \fn QBrush KDChartParams::bWChartStatisticsBrush( BWStatVal statValue ) const
+
+ Returns the brush used
+ to fill the text's area before printing the respective statistical values.
+
+ \returns the brush used
+ to fill the text's area before printing the respective statistical values.
+
+ \sa setBWChartPrintStatistics
+ \sa setBWChartSubType, bWChartSubType
+ \sa setChartType, chartType
+ */
+
+
+//@}
+// END BOX/WHISKER CHART
+
+// START LEGENDS
+/** @name Legend methods.
+
+ These methods query and set legend parameters.
+ */
+//@{
+
+/**
+ \enum KDChartParams::LegendPosition
+
+ The possible positions for a legend. NoLegend turns legend display
+ off.
+
+ \sa setLegendPosition, legendPosition
+ */
+
+
+/**
+ \fn void KDChartParams::setLegendPosition( LegendPosition position )
+
+ Specifies where the legend should be shown. NoLegend turns legend
+ display off. The default is LegendRight which positions the legend
+ right to the data display.
+
+ \param the position for the legend
+ \sa LegendPosition, legendPosition, setLegendOrientation, setLegendShowLines
+ */
+
+
+/**
+ \fn KDChartParams::LegendPosition KDChartParams::legendPosition() const
+
+ Returns where the legend will be shown.
+
+ \return where the legend will be shown
+ \sa LegendPosition, setLegendPosition, setLegendShowLines
+ */
+
+
+/**
+ \fn void KDChartParams::setLegendOrientation( Qt::Orientation orientation )
+
+ Specifies how the legend should be printed. Qt::Vertical (the default)
+ prints the legend entries below each other, Qt::Horizontal prints them
+ aside each other.
+
+ \note Horizontal orientation is only possible if the chart is NOT making
+ room in horizontal direction, this means you may specify horizontal
+ orientation if the legend position in one of the following values
+ only: LegendTop, LegendBottom, LegendTopLeftTop, LegendTopRightTop,
+ LegendBottomLeftBottom, LegendBottomRightBottom
+
+ \param the orientation for the legend
+ \sa legendOrientation, setLegendPosition, setLegendShowLines
+ */
+
+
+/**
+ \fn Qt::Orientation KDChartParams::legendOrientation() const
+
+ Returns how the legend will be printed.
+
+ \return how the legend will be printed.
+ \sa setLegendOrientation, setLegendPosition, setLegendShowLines
+ */
+
+/**
+ \fn void KDChartParams::setLegendShowLines( bool legendShowLines )
+
+ Specifies whether the legend shall show lines or just
+ show the markers (or squares, resp.).
+
+ \note By default no lines are drawn but just the markers are shown,
+ for Line charts you might want to set this flag to true.
+
+ \param flag whether lines are drawn or only the markers
+ \sa legendShowLines, setLegendOrientation, setLegendPosition
+ */
+
+
+/**
+ \fn bool KDChartParams::legendShowLines() const
+
+ Returns whether the legend shows lines or just
+ the markers (or squares, resp.).
+
+ \return whether the legend shows lines or just the markers (or squares, resp.).
+ \sa setLegendShowLines, setLegendOrientation, setLegendPosition
+ */
+
+
+
+/**
+ \enum KDChartParams::LegendSource
+
+ The possible ways for getting the legend text. Available are:
+ <ul>
+ <li>Manual - Uses texts set with setLegendText(); if no text is set for
+ a dataset, the legend text will be empty.
+ <li>FirstColumn - Uses values from the first column, no matter what
+ this contains.
+ <li>Automatic - Tries first to use values from the first column; if
+ this does not contain any string values, tries to use values set
+ manually with setLegendText(). If there are no values set manually
+ either, resolves to standard texts like Series 1, Series 2, .... This
+ is the default.
+ </ul>
+ \sa setLegendSource, legendSource, setLegendText, legendText
+ */
+
+
+/**
+ \fn void KDChartParams::setLegendSource( LegendSource source )
+
+ Specifies where the legend text is coming from. See LegendSource for an
+ explanation of the possible values.
+
+ \param source the source of the legend texts
+ \sa legendSource, LegendSource, setLegendText, legendText
+ */
+
+
+/**
+ \fn LegendSource KDChartParams::legendSource() const
+
+ Returns where the legend text is coming from. See LegendSource for an
+ explanation of the possible return values.
+
+ \return where the legend text is coming from
+ \sa LegendSource, setLegendSource, setLegendText, legendText
+ */
+
+
+
+/**
+ \fn void KDChartParams::setLegendText( uint dataset, const QString& text )
+
+ Manually specifies a legend text for a certain dataset. This is only
+ used if legendSource() == Manual or if legendSource() == Automatic and
+ it is not possible to retrieve values from the first column.
+
+ \param dataset the dataset for which to set the legend text
+ \param the legend text to be set for a given dataset
+ \sa LegendSource, setLegendSource, legendSource, legendText
+ */
+
+
+/**
+ \fn QString KDChartParams::legendText( uint dataset ) const
+
+ Returns the manually specified legend text for a given dataset.
+
+ \return the manually specified legend text for the specified dataset
+ \sa setLegendText, LegendSource, setLegendSource, legendSource
+ */
+
+
+/**
+ \fn void KDChartParams::setLegendTextColor( const QColor& color )
+
+ Specifies the color to be used for the legend texts. The
+ default is black.
+
+ \param color the color to be used for the legend texts
+ \sa legendTextColor(), setLegendTitleTextColor()
+ */
+
+
+/**
+ \fn QColor KDChartParams::legendTextColor() const
+
+ Returns the color in which the legend texts are drawn. The
+ default is black.
+
+ \return the color in which the legend texts are drawn
+ \sa setLegendTextColor(), legendTitleTextColor()
+ */
+
+
+/**
+ \fn void KDChartParams::setLegendFont( const QFont& font, bool useFontSize )
+
+ Specifies the font in which the legend texts are drawn. The default is a
+ 10pt helvetica font.
+
+ \note The font size will be ignored if \c useFontSize is false,
+ in this case the font size will be calculated dynamically using
+ the value stored by you calling setLegendFontRelSize().
+
+ \param font the font to draw the legend texts in
+ \sa setLegendFontUseRelSize, legendFont
+ */
+
+
+/**
+ \fn QFont KDChartParams::legendFont() const
+
+ Returns the font in which the legend texts are drawn.
+
+ \return the font in which the legend texts are drawn
+ \sa setLegendFont, setLegendFontUseRelSize
+ */
+
+
+/**
+ \fn void KDChartParams::setLegendFontUseRelSize( bool legendFontUseRelSize )
+
+ Specifies whether the legend shall be drawn
+ using relative font size.
+
+ \param legendFontUseRelSize whether legend shall be drawn
+ using relative font size.
+ If true the absolute value of the value set by \c
+ setLegendFontRelSize is per thousand
+ of of the average value of the printable area height and width.
+ This will make the legend look nice even if scaled to very
+ different size.
+
+ \sa setLegendFontRelSize, setAxisLabelsFont
+ */
+
+
+/**
+ \fn bool KDChartParams::legendFontUseRelSize() const
+
+ Returns whether the legend font size is used.
+
+ \return whether the fix legend font size is used.
+ \sa setLegendFontRelSize, setLegendFont
+ */
+
+
+/**
+ \fn void KDChartParams::setLegendFontRelSize( int legendFontRelSize )
+
+ Specifies the legend relative font size.
+
+ \param legendFontRelSize the relative legend size.
+ If this value unequals zero the absolute value is per thousand
+ of of the average value of the printable area height and width.
+ This will make the legend look nice even if scaled to very
+ different size.
+
+ \sa setLegendFontUseRelSize, setLegendFont
+ */
+
+
+/**
+ \fn int KDChartParams::legendFontRelSize() const
+
+ Returns the relative legend font size.
+
+ \return the relative legend font size.
+ \sa setLegendFontRelSize, setLegendFontUseRelSize
+ */
+
+
+/**
+ \fn void KDChartParams::setLegendTitleText( const QString& text )
+
+ Specifies a text to be shown as the title of the legend. The
+ default is "Legend" (possibly localized). To turn off the
+ legend title completely, pass an empty string.
+
+ \param text the text to use as the legend title
+ \sa legendTitleText(), setLegendTitleFont(),
+ setLegendTitleFontUseRelSize()
+ */
+
+
+
+
+/**
+ \fn QString KDChartParams::legendTitleText() const
+
+ Returns the text that is shown as the title of the legend.
+
+ \return the text that is used as the legend title
+ \sa setLegendTitleText(), legendTitleFont(),
+ legendTitleFontUseRelSize()
+ */
+
+
+/**
+ \fn void KDChartParams::setLegendTitleTextColor( const QColor& color )
+
+ Specifies the color to be used for the legend title. The
+ default is black. Note that this color is only the default when
+ rich text is used; tags in the rich text might change the color.
+
+ \param color the color to be used for the legend title
+ \sa legendTitleTextColor(), setLegendTextColor()
+ */
+
+
+/**
+ \fn QColor KDChartParams::legendTitleTextColor() const
+
+ Returns the color in which the legend title is drawn. The
+ default is black.
+
+ \return the color in which the legend title is drawn
+ \sa setLegendTitleTextColor(), legendTextColor()
+ */
+
+
+/**
+ \fn void KDChartParams::setLegendTitleFont( const QFont& font, bool useFontSize )
+
+ Specifies the font in which the legend title (if any) is drawn. The
+ default is a 12pt helvetica font.
+
+ \note The font size will be ignored if \c useFontSize is false,
+ in this case the font size will be calculated dynamically using
+ the value stored by you calling setLegendFontRelSize().
+
+ \param font the font to draw the legend texts in
+ \sa setLegendTitleFontUseRelSize, legendTitleFont
+ */
+
+
+/**
+ \fn QFont KDChartParams::legendTitleFont() const
+
+ Returns the font in which the legend title (if any) is drawn.
+
+ \return the font in which the legend texts are drawn
+ \sa setLegendTitleFont, setLegendTitleFontUseRelSize
+ */
+
+
+/**
+ \fn void KDChartParams::setLegendTitleFontUseRelSize( bool legendTitleFontUseRelSize )
+
+
+ Specifies whether the legend title (if any) shall be drawn using
+ relative font size.
+
+ \param legendTitleFontUseRelSize whether the legend title shall
+ be drawn using relative font size.
+ If true the absolute value of the value set by \c
+ setLegendTitleFontRelSize is per thousandth of the average
+ value of the printable area height and width.
+ This will make the legend title look nice even if scaled to a very
+ different size.
+
+ \sa setLegendTitleFontRelSize, setAxisLabelsFont
+ */
+
+
+/**
+ \fn bool KDChartParams::legendTitleFontUseRelSize() const
+
+ Returns whether the legend title font size is used.
+
+ \return whether the fixed legend title font size is used.
+ \sa setLegendTitleFontRelSize, setLegendTitleFont
+ */
+
+
+/**
+ \fn void KDChartParams::setLegendTitleFontRelSize( int legendTitleFontRelSize )
+
+
+ Specifies the legend title relative font size.
+
+ \param legendTitleFontRelSize the relative legend size.
+ If this value unequals zero the absolute value is per thousand
+ of of the average value of the printable area height and width.
+ This will make the legend title look nice even if scaled to a very
+ different size.
+
+ \sa setLegendTitleFontUseRelSize, setLegendTitleFont
+ */
+
+
+/**
+ \fn int KDChartParams::legendTitleFontRelSize() const
+
+ Returns the relative legend title font size.
+
+ \return the relative legend title font size.
+ \sa setLegendTitleFontRelSize, setLegendTitleFontUseRelSize
+ */
+
+
+/**
+ \fn void KDChartParams::setLegendSpacing( uint space )
+
+ Specifies how much space in pixels there should be between the legend
+ and the data display. The default is 20 pixels.
+
+ \param space the space in pixels between the legend and the data
+ display
+ \sa legendSpacing
+ */
+
+
+/**
+ \fn uint KDChartParams::legendSpacing() const
+
+ Returns how much space in pixels there is between the legend and the
+ data display.
+
+ \return the space in pixels between the legend and the data display
+ \sa setLegendSpacing
+ */
+
+//@}
+// END LEGENDS
+
+// START AXES
+/** @name Axis methods.
+
+ These methods query and set axis parameters.
+ */
+//@{
+
+/**
+ \fn void KDChartParams::setAxisType( uint n, const KDChartAxisParams::AxisType axisType )
+
+ Specifies the axis type.
+
+ \param n the number of the axis settings to be modified
+ \param axisType the type of the axis.
+ \sa axisVisible
+ */
+
+
+/**
+ \fn void KDChartParams::setAxisVisible( uint n, const bool axisVisible )
+
+ Specifies if the axis will be drawn. The default is false.
+
+ \param n the number of the axis settings to be modified
+ \param axisVisible set true to make visible the respective axis.
+ \sa axisVisible
+ */
+
+
+/**
+ \fn bool KDChartParams::axisVisible( uint n ) const
+
+ Returns if the axis will be drawn.
+
+ \return if the axis is visible or not.
+ \sa setAxisVisible
+ */
+
+
+/**
+ Specifies whether a grid should be drawn at the chart data area.
+
+ The grid will show a solid line for each delimiter.
+ (or a line with a pattern defined by \c KDChartAxisParams::setAxisGridStyle(), resp.)
+
+ \note If true and axisShowSubDelimiters is also true the grid
+ will show a thin dotted line for each sub-delimiter.
+ (or a line with a pattern defined by \c KDChartAxisParams::setAxisGridSubStyle(), resp.)
+
+ \param n the number of the axis for which to specify whether a grid should be drawn.
+ \param axisShowGrid if true a grid will be drawn on the chart data area.
+ \sa axisShowGrid, setAxisGridStyle, setAxisGridSubStyle
+ */
+void KDChartParams::setAxisShowGrid( uint n, bool axisShowGrid )
+{
+ if ( n < KDCHART_MAX_AXES ) {
+ _axisSettings[ n ].params.setAxisShowGrid( axisShowGrid );
+ emit changed();
+ }
+}
+
+/**
+ Returns if any grid will be drawn at the data area.
+
+ \return if any grid will be drawn at the data area.
+ \sa KDChartAxisParams::setAxisShowGrid
+ */
+bool KDChartParams::showGrid() const
+{
+ for ( uint i = 0; i < KDCHART_MAX_AXES; ++i ) {
+ if ( _axisSettings[ i ].params.axisVisible()
+ && _axisSettings[ i ].params.axisShowGrid() )
+ return true;
+ }
+ return false;
+}
+
+/**
+ Specifies which data are to be represented by a given axis.<br>
+ If you specify a valid dataset-number for parameter dataset
+ you may use the same number or a greater number for
+ parameter dataset2 to specify a range of contiguous series
+ of datasets.<br>
+ If you specify <b>KDCHART_ALL_DATASETS</b> for dataset
+ the value of dataset2 does not matter.<br>
+ By setting the \c chart parameter you may specify which chart is
+ represented by the axis, you may use this when displaying
+ more than one chart in the same widget.
+
+ Calling setAxisDataset() with a dataset number will automatically set
+ the visability flag of the respective axis (or axes, resp.) while calling
+ it with KDCHART_NO_DATASET will clear the visibility flag so there is no
+ need to explicitely call \c setAxisVisible() after calling setAxisDatasets().
+
+ \note If you specify \c KDCHART_ALL_DATASETS the axis will
+ represent all the datasets with SourceMode DataEntry
+ (see \c setChartSourceMode for explanation) that have been
+ specified for this chart.<br>
+
+ \param n the number of the axis for which to specify the dataset(s)
+ \param dataset the dataset represented by axis \c n
+
+ \sa axisDatasets, chartAxes, setChartSourceMode, setAdditionalChartType
+ */
+void KDChartParams::setAxisDatasets( uint n, uint dataset,
+ uint dataset2,
+ uint chart )
+{
+ uint a1 = ( KDCHART_ALL_AXES == n )
+ ? 0
+ : QMIN( n, KDCHART_MAX_AXES-1 );
+ uint a2 = ( KDCHART_ALL_AXES == n )
+ ? KDCHART_MAX_AXES-1
+ : QMIN( n, KDCHART_MAX_AXES-1 );
+ for( uint i = a1; i <= a2; ++i ) {
+ _axisSettings[ i ].params.setAxisVisible( KDCHART_NO_DATASET != dataset );
+ _axisSettings[ i ].dataset = dataset;
+ _axisSettings[ i ].dataset2 =
+ ( KDCHART_ALL_DATASETS == dataset
+ || KDCHART_NO_DATASET == dataset
+ || KDCHART_ALL_DATASETS == dataset2
+ || KDCHART_NO_DATASET == dataset2 )
+ ? dataset
+ : dataset2;
+ _axisSettings[ i ].chart = chart;
+ }
+ emit changed();
+}
+
+/**
+ Returns which data are to be represented by a given axis.
+ ( see explanation given with \c setAxisDatasets() )
+
+ \param n the axis for which to return the dataset number(s)
+ \param dataset the starting number of the series of datasets represented by axis \c n or KDCHART_ALL_DATASETS
+ \param dataset2 the end number of the series of datasets
+ \param chart the chart represented by axis \c n
+ \return true if a valid axis number was specified by parameter n
+ \sa setAxisDataset, chartAxes
+ */
+bool KDChartParams::axisDatasets( uint n, uint& dataset,
+ uint& dataset2, uint& chart ) const
+{
+ bool bOk = ( n < KDCHART_MAX_AXES );
+ if ( bOk ) {
+ dataset = _axisSettings[ n ].dataset;
+ dataset2 = _axisSettings[ n ].dataset2;
+ chart = _axisSettings[ n ].chart;
+ }
+ return bOk;
+}
+
+
+/**
+ Returns which ORDINATE axis(axes) is(are) representing a given chart.
+ This will look for the following axes: AxisPosLeft, AxisPosRight,
+ AxisPosLeft2, AxisPosRight2.
+
+ It is allowed to specify the same variable as axis1, axis2, axis3,
+ axis4 - when doing this you will get the last axis number that was
+ found for this chart. In case you are sure there is only one axis
+ per chart you may act that way.
+
+ \param chart the chart for which to return the axis number(s)
+ \param cnt the count of axis numbers returned
+ \param axes on return, a vector with the numbers of the axes
+ \return true if at least one axis is representing the chart \c chart
+ \sa setAxisDataset, axisDataset
+ */
+bool KDChartParams::chartAxes( uint chart, uint& cnt, AxesArray& axes ) const
+{
+ cnt = 0;
+ axes.resize( KDCHART_CNT_ORDINATES );
+ for ( int i2 = 0; i2 < KDCHART_CNT_ORDINATES; ++i2 ) {
+ axes[ i2 ] = KDCHART_NO_AXIS;
+ }
+ for ( uint i = 0; i < KDCHART_MAX_AXES; ++i ) {
+ if ( chart == _axisSettings[ i ].chart
+ && ( KDChartAxisParams::AxisPosLeft == i
+ || KDChartAxisParams::AxisPosRight == i
+ || KDChartAxisParams::AxisPosLeft2 == i
+ || KDChartAxisParams::AxisPosRight2 == i ) ) {
+ for( int j = 0; j < KDCHART_CNT_ORDINATES; ++j ) {
+ if( KDCHART_NO_AXIS == axes[ j ] || axes[ j ] == i ) {
+ if( KDCHART_NO_AXIS == axes[ j ] ) {
+ ++cnt;
+ axes[ j ] = i;
+ }
+ break;
+ }
+ }
+ }
+ }
+ return (0 < cnt);
+}
+
+
+
+
+/**
+ \fn QRect KDChartParams::axisArea( const uint n ) const
+
+ Returns the true axis area rectangle as it was was calculate
+ by KD Chart.
+
+ \param n the number of the axis
+
+ \note This special function may be called *after* calling
+ KDChart::setupGeometry(). Normally you don't need to call
+ it at all, its only purpose is to provide you with a way to
+ retrieve the true position and size of an axis area.
+
+ \sa dataArea
+ */
+
+/**
+ \fn QRect KDChartParams::legendArea() const
+
+ Returns the true legend area rectangle as it was was calculate
+ by KD Chart.
+
+ \note This special function may be called *after* calling
+ KDChart::setupGeometry(). Normally you don't need to call
+ it at all, its only purpose is to provide you with a way to
+ retrieve the true position and size of an legend area.
+
+ \sa dataArea
+ */
+
+/**
+ \fn QRect KDChartParams::dataArea() const
+
+ Returns the true data area rectangle as it was was calculate
+ by KD Chart.
+
+ \note This special function may be called *after* calling
+ KDChart::setupGeometry(). Normally you don't need to call
+ it at all, its only purpose is to provide you with a way to
+ retrieve the true position and size of the data area.
+
+ \sa axisArea
+ */
+
+
+/**
+ \fn void KDChartParams::setAxisArea( const uint n, const QRect& areaRect )
+
+ Specifies the true axis area rectangle.
+
+ \note Do <b>not call</b> this function unless you are knowing
+ exactly what you are doing. \c setAxisTrueAreaRect is normally
+ reserved for internal usage by methods calculating the area
+ size based upon \c axisAreaMin and \c axisAreaMax. Thus the
+ signal \c changed() is not sended here.
+
+ \sa axisAreaMax, axisAreaMin, setAxisAreaMode, setAxisAreaMin
+ \sa setAxisArea
+ */
+
+
+/**
+ \fn void KDChartParams::setAxisLabelsTouchEdges( uint n, bool axisLabelsTouchEdges )
+
+ Specifies whether the axis labels start and end at the
+ edges of the charts instead being positioned in the
+ middle of the first data point (or the last one, resp.)
+
+ \note If you decide to call setAxisLabelsTouchEdges() to
+ override the default settings of abscissa axes
+ (AxisPosBottom, AxisPosTop, AxisPosBottom2, AxisPosTop2)
+ make sure to call it again each time you have called
+ setChartType() since your settings will be overwritten
+ when changing the chart type.
+
+ \param axisLabelsTouchEdges if the axis labels start and end at
+ the edges of the charts instead being positioned in the
+ middle of the first data point (or the last one, resp.)
+
+ \sa axisLabelsTouchEdges
+ */
+
+
+/**
+ \fn void KDChartParams::setAxisLabelsVisible( uint n, bool axisLabelsVisible )
+
+ Specifies whether the axis labels of an axis are to be shown.
+
+ \param axisLabelsVisible if true the labels of this axis will be drawn.
+
+ \sa setAxisLabelsFont
+ */
+
+
+/**
+ Specifies the axis labels font for one axis.
+
+ \note The font size will be ignored if \c axisLabelsFontSize is not zero,
+ in this case the font size will be calculated dynamically using
+ the value axisLabelsFontSize.
+
+ \param axisLabelsFont the font to be used for the axis' labels.
+ \param axisLabelsFontSize the (fixed or relative) axis font size.
+ If this value is less than zero the absolute value is per thousand
+ of the average value of the printable area height and width
+ to be used. This will make the axis look the same even if scaled
+ to very different size.
+ \param axisLabelsColor the axis labels colour.
+
+ \sa setAxisLabelsVisible
+ \sa setAxisLabelsFontUseRelSize, setAxisLabelsFontRelSize
+ \sa KDChartAxisParams::setAxisLabelsFontMinSize
+ */
+void KDChartParams::setAxisLabelsFont( uint n,
+ QFont axisLabelsFont,
+ int axisLabelsFontSize,
+ QColor axisLabelsColor )
+{
+ if ( n < KDCHART_MAX_AXES ) {
+ bool extraSize = (0 != axisLabelsFontSize);
+ QFont theFont( axisLabelsFont );
+ bool useFontFixedSize = true;
+ if ( extraSize ){
+ if( 0 > axisLabelsFontSize ){
+ useFontFixedSize = false;
+ _axisSettings[ n ].params.setAxisLabelsFontRelSize( -axisLabelsFontSize );
+ }else{
+ theFont.setPointSize( axisLabelsFontSize );
+ }
+ }
+ _axisSettings[ n ].params.setAxisLabelsFont( theFont, useFontFixedSize );
+ _axisSettings[ n ].params.setAxisLabelsColor( axisLabelsColor );
+ }
+}
+
+
+/**
+ \fn void KDChartParams::setAxisLabelTextParams( uint n, bool axisSteadyValueCalc,
+ KDChartData axisValueStart, KDChartData axisValueEnd,
+ double axisValueDelta, int axisDigitsBehindComma,
+ int axisMaxEmptyInnerSpan,
+ KDChartAxisParams::LabelsFromDataRow takeLabelsFromDataRow,
+ int labelTextsDataRow, QStringList* axisLabelStringList,
+ QStringList* axisShortLabelsStringList )
+
+ Specifies the label text parameters for one axis.
+
+ \sa KDChartAxisParams::setAxisLabelTextParams
+ */
+
+
+/**
+ Specifies a \c QStringList which the axis label texts for one
+ axis are to be taken from, the optional short-labels parameter
+ (if not zero) may be used to specify an alternative list of
+ strings that are to be displayed in case the axis area size
+ is too small for showing the full-length names.
+
+ \note Normally axis labeling starts with the list's first string
+ and end with its last string, but by specifying a start and an
+ end value as additional parameters you can make KDChart repeat
+ the strings between these two values only, as shown here:
+
+ \verbatim
+ QStringList abscissaNames;
+ abscissaNames << "Sunday" << "Monday" << "Tuesday" << "Wednesday"
+ << "Thursday" << "Friday" << "Saturday";
+ QStringList abscissaShortNames;
+ abscissaShortNames << "Sun" << "Mon" << "Tue" << "Wed"
+ << "Thu" << "Fri" << "Sat";
+
+ setAxisLabelStringParams( KDChartAxisParams::AxisPosBottom,
+ &names, &shortNames,
+ "Monday", "Friday")
+ \endverbatim
+
+
+ \param n the ID of the axis
+ \param QStringList* axisLabelStringList points to the list of labels to be displayed
+ \param QStringList* axisShortLabelStringList points to
+ an alternative list of short names to be displayed if the long labels take too much place
+ \param QString valueStart ( default null ) the label to begin with
+ \param QString valueEnd ( default null ) the label to end with
+
+ \sa KDChartAxisParams::setAxisLabelStringLists
+ */
+void KDChartParams::setAxisLabelStringParams( uint n,
+ QStringList* axisLabelStringList,
+ QStringList* axisShortLabelStringList,
+ const QString& valueStart,
+ const QString& valueEnd )
+{
+ if ( n < KDCHART_MAX_AXES ) {
+ _axisSettings[ n ].params.setAxisLabelStringLists( axisLabelStringList,
+ axisShortLabelStringList,
+ valueStart,
+ valueEnd );
+ emit changed();
+ }
+}
+
+
+/**
+ Specifies the parameters for one axis.
+
+ \param axisParams the axis parameters to be used.
+ \sa axisParams, AxisParams
+ */
+void KDChartParams::setAxisParams( uint n,
+ const KDChartAxisParams& axisParams )
+{
+ if ( n < KDCHART_MAX_AXES ) {
+ _axisSettings[ n ].params = axisParams;
+ emit changed();
+ }
+}
+
+
+/**
+ \fn const KDChartAxisParams& KDChartParams::axisParams( uint n ) const
+
+ Returns the parameters that are currently defined for axis n.
+
+ \return all the parameters defined for axis n. If called with invalid
+ value for \c n it returns the default axis parameters.
+ \sa setAxisParams, AxisParams
+ */
+
+
+//@}
+// END AXES
+
+// START HEADERFOOTER
+
+/** @name Header and footer methods.
+
+ These methods query and set header and footer parameters.
+
+ The names of the Header and Footer sections.
+
+ You may use up to 9 header and/or up to 9 footer sections.
+
+ \li Up to three <b>leading headers</b> ( \c HdFtPosHeader0 , \c
+ HdFtPosHeader0L , \c HdFtPosHeader0R ) may be drawn at the very upper
+ edge of the printable area. <br>
+ You might want to use those sections to show some marginal information
+ like department name, print date, page number... <br>
+ <b>Note:</b> Those headers <b>share the same area</b> so make sure to
+ specify propper horizontal alignment for each section when using more than
+ one of them. By default \c HdFtPosHeader0 has centered alignement,
+ \c HdFtPosHeader0L is aligned to the left and \c HdFtPosHeader0R to the
+ right side. All of them are vertically aligned to the bottom, you may
+ change this at your own risk: the resulting output might look strange. <br>
+ <b>also note:</b> Alignment to bottom here means their baselines are
+ horizontally adjusted to each other when more than one of them is used - it
+ does <b>not</b> mean the <b>lowest pixel positions</b> of their output will
+ be at the very same y coordinate since those might vary depending from the
+ font size and or the font size you have specified for each of the sections.
+
+ \li Up to three <b>main headers</b> ( \c HdFtPosHeader , \c
+ HdFtPosHeaderL , \c HdFtPosHeaderR ) may be drawn under the
+ leading header(s). <br>
+ You could use this headers to show the main information such as project name,
+ chart title or period of time (e.g. census year). <br>
+ Like their counterparts they share the same part of the printable area so the
+ restrictions regarding alignment mentioned above apply also to these three
+ sections.
+
+ \li Up to three <b>additional headers</b> ( \c HdFtPosHeader2 , \c
+ HdFtPosHeader2L , \c HdFtPosHeader2R ) may be drawn under the main
+ header(s). <br>
+ This headers could show additional information such as project phase, chart
+ sub-title or sub-period of time (e.g. census quarter-year). <br>
+ Like their counterparts they share the same part of the printable area so the
+ restrictions regarding alignment mentioned above apply also to these three
+ sections.
+
+ <p>
+
+ \li Up to three <b>main footers</b> ( \c HdFtPosFooter , \c
+ HdFtPosFooterL , \c HdFtPosFooterR ) may be drawn under the chart data
+ area (or the legend that might be shown below that area, resp.). <br>
+ You might want to use these footers instead of (or additional to) the
+ main header(s) for showing the main information... <br>
+ Like their header-counterparts they share the same part of the printable area
+ so the restrictions regarding alignment mentioned above apply also to these
+ three sections.
+
+ \li Up to three <b>additional footers</b> ( \c HdFtPosFooter2 , \c
+ HdFtPosFooter2L , \c HdFtPosHeader2R ) may be drawn under the main
+ footer(s). <br>
+ This footers could show additional information instead of (or additional to)
+ the additional header(s). <br>
+ Like their counterparts they share the same part of the printable area so the
+ restrictions regarding alignment mentioned above apply also to these three
+ sections.
+
+ \li Up to three <b>trailing footers</b> ( \c HdFtPosFooter0 , \c
+ HdFtPosFooter0L , \c HdFtPosFooter0R ) may be drawn at the very lower
+ edge of the printable area: <b>under</b> the other footer sections <br>
+ You might want to use those sections to show some marginal information
+ instead of (or additional to) the leading header(s). <br>
+ Like their counterparts they share the same part of the printable area so the
+ restrictions regarding alignment mentioned above apply also to these three
+ sections.
+
+\note The names \c HdFtPosHeader or \c HdFtPosFooter are the basic names also returned by \c basicAxisPos.
+
+<p>
+<b>Usage:</b> Please see example code at \c setHeaderFooterText function explanation.
+
+\sa setHeaderFooterText, headerFooterText
+\sa setHeaderFooterFont, headerFooterFont
+\sa setHeaderFooterFontUseRelSize, headerFooterFontUseRelSize
+\sa setHeaderFooterFontRelSize, headerFooterFontRelSize
+*/
+//@{
+
+
+/**
+ \enum KDChartParams::HdFtPos
+
+ This enum lists the positions that headers and footers can take.
+ */
+
+
+/**
+ \enum KDChartParams::HdFtPosSTART,
+
+ start of all sections
+ */
+
+/**
+ \enum KDChartParams::HdFtPosHeadersSTART
+
+ start of header sections
+ */
+
+/**
+ \enum KDChartParams::HdFtPosHeader0
+
+ leading header (at the very top of the printable area)
+ */
+
+/**
+ \enum KDChartParams::HdFtPosHeader0L
+
+ another leading header, by default left-aligned
+ */
+
+/**
+ \enum KDChartParams::HdFtPosHeader0R
+
+ yet another leading header, by default right-aligned
+ */
+
+/**
+ \enum KDChartParams::HdFtPosHeader
+
+ main header (below the leading header)
+ */
+
+/**
+ \enum KDChartParams::HdFtPosHeaderL
+
+ another main header, by default left-aligned
+ */
+
+/**
+ \enum KDChartParams::HdFtPosHeaderR
+
+ yet another main header, by default right-aligned
+ */
+
+/**
+ \enum KDChartParams::HdFtPosHeader2
+
+ additional header (below the main header)
+ */
+
+/**
+ \enum KDChartParams::HdFtPosHeader2L
+
+ another additional header, by default left-aligned
+ */
+
+/**
+ \enum KDChartParams::HdFtPosHeader2R
+
+ yet another additional header, by default right-aligned
+ */
+
+/**
+ \enum KDChartParams::HdFtPosHeadersEND
+
+ end of header sections
+ */
+
+/**
+ \enum KDChartParams::HdFtPosFootersSTART
+
+ start of footer sections
+ */
+
+
+/**
+ \enum KDChartParams::HdFtPosFooter
+
+ main footer (below the data area or the bottom legend (if any), resp.)
+ */
+
+/**
+ \enum KDChartParams::HdFtPosFooterL
+
+ another main footer, by default left-aligned
+ */
+
+/**
+ \enum KDChartParams::HdFtPosFooterR
+
+ yet another main footer, by default right-aligned
+ */
+
+
+/**
+ \enum KDChartParams::HdFtPosFooter2
+
+ additional footer (below the main footer)
+ */
+
+/**
+ \enum KDChartParams::HdFtPosFooter2L
+
+ another additional footer, by default left-aligned
+ */
+
+/**
+ \enum KDChartParams::HdFtPosFooter2R
+
+ yet another additional footer, by default right-aligned
+ */
+
+
+/**
+ \enum KDChartParams::HdFtPosFooter0
+
+ trailing footer (below the additional footer)
+ */
+
+/**
+ \enum KDChartParams::HdFtPosFooter0L
+
+ another trailing footer, by default left-aligned
+ */
+
+/**
+ \enum KDChartParams::HdFtPosFooter0R
+
+ yet another trailing footer, by default right-aligned
+ */
+
+/**
+ \enum KDChartParams::HdFtPosFootersEND
+
+ end of footer sections
+ */
+
+/**
+ \enum KDChartParams::HdFtPosEND
+
+ end of all sections
+ */
+
+
+/**
+ Specifies the text to be displayed in the header (or footer, resp.)
+ section specified by \c pos.
+ The default is not to display any header text nor footer text.
+
+ \note To learn about the different header (or footer, resp.)
+ sections please see information given at \c HdFtPos enum explanation.
+
+ \param pos the section in which the text is to be shown
+ \param text the text to be shown
+ \sa HdFtPos, headerFooterText()
+ \sa setHeaderFooterFont, headerFooterFont
+ \sa setHeaderFooterFontUseRelSize, headerFooterFontUseRelSize
+ \sa setHeaderFooterFontRelSize, headerFooterFontRelSize
+ \sa setHeader1Text(), header1Text()
+ \sa setHeader2Text(), header2Text()
+ \sa setFooterText(), footerText()
+ */
+void KDChartParams::setHeaderFooterText( uint pos, const QString& text )
+{
+ if ( HdFtPosEND >= pos ) {
+ _hdFtParams[ pos ]._text = text;
+ emit changed();
+ }
+}
+
+
+/**
+ Returns the text that is displayed in the header (or footer, resp.)
+ section specified by \c pos.
+
+ \note To learn about the different header (or footer, resp.)
+ sections please see information given at \c HdFtPos enum explanation.
+
+ \param pos the section for which to return the text
+ \return the displayed text
+ \sa HdFtPos, setHeaderFooterText()
+ \sa setHeaderFooterFont, headerFooterFont
+ \sa setHeaderFooterFontUseRelSize, headerFooterFontUseRelSize
+ \sa setHeaderFooterFontRelSize, headerFooterFontRelSize
+ \sa setHeader1Text(), header1Text()
+ \sa setHeader2Text(), header2Text()
+ \sa setFooterText(), footerText()
+ */
+QString KDChartParams::headerFooterText( uint pos ) const
+{
+ if ( HdFtPosEND >= pos )
+ return _hdFtParams[ pos ]._text;
+ else
+ return QString::null;
+}
+
+
+
+/**
+ \note This methode for internal use.
+ Return the position and size of one header/footer area.
+ <b>Will return valid data only if called after KDChartPainter::setupGeometry()!</b>
+ */
+const QRect& KDChartParams::headerFooterRect( uint pos ) const
+{
+ if ( HdFtPosEND >= pos )
+ return _hdFtParams[ pos ].rect();
+ else
+ return _noRect;
+}
+
+
+/**
+ Specifies the colour to be used for the header text (or footer text, resp.)
+ of the header/footer section specified by \c pos.
+ The default colour is <b>QColor( Qt::black )</b>.
+
+ \note To learn about the different header (or footer, resp.)
+ sections please see information given at \c HdFtPos enum explanation.
+
+ \param pos the section for which the colour is to be changed
+ \param color the text colour to be used
+ \sa HdFtPos, headerFooterText()
+ \sa setHeaderFooterFont, headerFooterFont
+ \sa setHeaderFooterFontUseRelSize, headerFooterFontUseRelSize
+ \sa setHeaderFooterFontRelSize, headerFooterFontRelSize
+ \sa setHeader1Text(), header1Text()
+ \sa setHeader2Text(), header2Text()
+ \sa setFooterText(), footerText()
+ */
+void KDChartParams::setHeaderFooterColor( uint pos, const QColor color )
+{
+ if ( HdFtPosEND >= pos ) {
+ _hdFtParams[ pos ]._color = color;
+ emit changed();
+ }
+}
+
+
+/**
+ Returns the colour used for the header text (or footer text, resp.)
+ of the header/footer section specified by \c pos.
+
+ \note To learn about the different header (or footer, resp.)
+ sections please see information given at \c HdFtPos enum explanation.
+
+ \param pos the section for which to return the text colour
+ \return the text colour
+ \sa HdFtPos, setHeaderFooterText()
+ \sa setHeaderFooterFont, headerFooterFont
+ \sa setHeaderFooterFontUseRelSize, headerFooterFontUseRelSize
+ \sa setHeaderFooterFontRelSize, headerFooterFontRelSize
+ \sa setHeader1Text(), header1Text()
+ \sa setHeader2Text(), header2Text()
+ \sa setFooterText(), footerText()
+ */
+QColor KDChartParams::headerFooterColor( uint pos ) const
+{
+ if ( HdFtPosEND >= pos )
+ return _hdFtParams[ pos ]._color;
+ else
+ return QColor( Qt::black );
+}
+
+
+/**
+ Specifies the font to be used in the header (or footer,
+ resp.) section specified by \c pos..
+ The default is a 14pt Helvetica font.
+
+ \note To learn about the different header (or footer, resp.)
+ sections please see information given at \c HdFtPos enum explanation.
+
+ \param pos the section in which the font is to be used
+ \param font the font to use
+ \sa HdFtPos, setHeaderFooterText(), headerFooterText()
+ \sa headerFooterFont()
+ \sa setHeaderFooterFontUseRelSize, headerFooterFontUseRelSize
+ \sa setHeaderFooterFontRelSize, headerFooterFontRelSize
+ \sa setHeader1Font(), header1Font()
+ \sa setHeader2Font(), header2Font()
+ \sa setFooterFont(), footerFont()
+ \sa setHeader1Text(), header1Text()
+ \sa setHeader2Text(), header2Text()
+ \sa setFooterText(), footerText()
+ */
+void KDChartParams::setHeaderFooterFont( uint pos, const QFont& font,
+ bool fontUseRelSize,
+ int fontRelSize )
+{
+ if ( HdFtPosEND >= pos ) {
+ _hdFtParams[ pos ]._font = font;
+ _hdFtParams[ pos ]._fontUseRelSize = fontUseRelSize;
+ _hdFtParams[ pos ]._fontRelSize = fontRelSize;
+ emit changed();
+ }
+}
+
+
+/**
+ Returns the font used in the header (or footer, resp.)
+ section specified by \c pos.
+
+ \note To learn about the different header (or footer, resp.)
+ sections please see information given at \c HdFtPos enum explanation.
+
+ \param pos the section for which to return the font
+ \return the used font
+ \sa HdFtPos, setHeaderFooterText(), headerFooterText()
+ \sa setHeaderFooterFont()
+ \sa setHeaderFooterFontUseRelSize, headerFooterFontUseRelSize
+ \sa setHeaderFooterFontRelSize, headerFooterFontRelSize
+ \sa setHeader1Font(), header1Font()
+ \sa setHeader2Font(), header2Font()
+ \sa setFooterFont(), footerFont()
+ \sa setHeader1Text(), header1Text()
+ \sa setHeader2Text(), header2Text()
+ \sa setFooterText(), footerText()
+ */
+QFont KDChartParams::headerFooterFont( uint pos ) const
+{
+ if ( HdFtPosEND >= pos )
+ return _hdFtParams[ pos ]._font;
+ else
+ return QApplication::font();
+}
+
+
+/**
+ Returns is the font size used in the header (or footer, resp.)
+ section specified by \c pos will be calculated dynamically.
+
+ \note To learn about the different header (or footer, resp.)
+ sections please see information given at \c HdFtPos enum explanation.
+
+ \param pos the section for which to return the font calculation flag
+ \return the font calculation flag
+ \sa HdFtPos, setHeaderFooterText(), headerFooterText()
+ \sa setHeaderFooterFont()
+ \sa setHeaderFooterFontUseRelSize, headerFooterFontUseRelSize
+ \sa setHeaderFooterFontRelSize, headerFooterFontRelSize
+ \sa setHeader1Font(), header1Font()
+ \sa setHeader2Font(), header2Font()
+ \sa setFooterFont(), footerFont()
+ \sa setHeader1Text(), header1Text()
+ \sa setHeader2Text(), header2Text()
+ \sa setFooterText(), footerText()
+ */
+bool KDChartParams::headerFooterFontUseRelSize( uint pos ) const
+{
+ if ( HdFtPosEND >= pos )
+ return _hdFtParams[ pos ]._fontUseRelSize;
+ else
+ return false;
+}
+
+
+/**
+ Returns the factor used for dynamical calculation of
+ the font size of the text in the header (or footer, resp.)
+ section specified by \c pos.
+
+ \note To learn about the different header (or footer, resp.)
+ sections please see information given at \c HdFtPos enum explanation.
+
+ \param pos the section for which to return the font size factor
+ \return the font size factor
+ \sa HdFtPos, setHeaderFooterText(), headerFooterText()
+ \sa setHeaderFooterFont()
+ \sa setHeaderFooterFontUseRelSize, headerFooterFontUseRelSize
+ \sa setHeaderFooterFontRelSize, headerFooterFontRelSize
+ \sa setHeader1Font(), header1Font()
+ \sa setHeader2Font(), header2Font()
+ \sa setFooterFont(), footerFont()
+ \sa setHeader1Text(), header1Text()
+ \sa setHeader2Text(), header2Text()
+ \sa setFooterText(), footerText()
+ */
+int KDChartParams::headerFooterFontRelSize( uint pos ) const
+{
+ if ( HdFtPosEND >= pos )
+ return _hdFtParams[ pos ]._fontRelSize;
+ else
+ return 10;
+}
+
+
+/**
+ \fn void KDChartParams::setHeader1Text( const QString& text )
+
+ Specifies the text to be displayed as the first header line. The
+ default is not to display any header text.
+
+ \note This function provided for convenience only. <br>
+ To gain the <b>full</b> benefits of the header/footer management
+ please consider learning about the different header (or footer,
+ resp.) sections, see information given at \c HdFtPos enum
+ explanation. <br>
+ The 'better' way to specify content and settings of headers or
+ footers is to call \c setHeaderFooterText ( or \c setHeaderFooterFont
+ , \c setHeaderFooterFontUseRelSize , \c setHeaderFooterFontRelSize ,
+ resp.) while specifying the appropriate \c HdFtPos. <br>
+ The canonical way to retrieve settings and content of headers or
+ footers is to call \c headerFooterText (or \c headerFooterFont ,
+ \c headerFooterFontUseRelSize , \c headerFooterFontRelSize, resp.).
+
+ \param text the text to display
+ \sa HdFtPos, setHeaderFooterText(), headerFooterText()
+ \sa header2Text(), setHeader1Text(), header1Text(), setFooterText(),
+ footerText()
+ */
+
+
+/**
+ \fn QString KDChartParams::header1Text() const
+
+ Returns the text that is displayed as the first header line.
+
+ \note This function provided for convenience only. <br>
+ To gain the <b>full</b> benefits of the header/footer management
+ please consider learning about the different header (or footer,
+ resp.) sections, see information given at \c HdFtPos enum
+ explanation. <br>
+ The 'better' way to specify content and settings of headers or
+ footers is to call \c setHeaderFooterText ( or \c setHeaderFooterFont
+ , \c setHeaderFooterFontUseRelSize , \c setHeaderFooterFontRelSize ,
+ resp.) while specifying the appropriate \c HdFtPos. <br>
+ The canonical way to retrieve settings and content of headers or
+ footers is to call \c headerFooterText (or \c headerFooterFont ,
+ \c headerFooterFontUseRelSize , \c headerFooterFontRelSize, resp.).
+
+ \return the displayed text
+ \sa HdFtPos, setHeaderFooterText(), headerFooterText()
+ \sa setHeader2Text(), setHeader1Text(), header1Text()
+ \sa setFooterText(), footerText()
+ */
+
+
+/**
+ \fn void KDChartParams::setHeader1Font( const QFont& font )
+
+ Specifies the font to be used for displaying the first header line.
+ The default is a 14pt Helvetica font.
+
+ \note This function provided for convenience only. <br>
+ To gain the <b>full</b> benefits of the header/footer management
+ please consider learning about the different header (or footer,
+ resp.) sections, see information given at \c HdFtPos enum
+ explanation. <br>
+ The 'better' way to specify content and settings of headers or
+ footers is to call \c setHeaderFooterText ( or \c setHeaderFooterFont
+ , \c setHeaderFooterFontUseRelSize , \c setHeaderFooterFontRelSize ,
+ resp.) while specifying the appropriate \c HdFtPos. <br>
+ The canonical way to retrieve settings and content of headers or
+ footers is to call \c headerFooterText (or \c headerFooterFont ,
+ \c headerFooterFontUseRelSize , \c headerFooterFontRelSize, resp.).
+
+ \param font the font to use
+ \sa HdFtPos, setHeaderFooterFont(), headerFooterFont()
+ \sa setHeaderFooterFontUseRelSize(), headerFooterFontUseRelSize()
+ \sa setHeaderFooterFontRelSize(), headerFooterFontRelSize()
+ \sa header2Font(), setHeader2Text(), header2Text()
+ \sa setHeader1Font(), header1Font()
+ \sa setFooterFont(), footerFont()
+ */
+
+
+/**
+ \fn QFont KDChartParams::header1Font() const
+
+ Returns the font used for displaying the second header line.
+
+ \note This function provided for convenience only. <br>
+ To gain the <b>full</b> benefits of the header/footer management
+ please consider learning about the different header (or footer,
+ resp.) sections, see information given at \c HdFtPos enum
+ explanation. <br>
+ The 'better' way to specify content and settings of headers or
+ footers is to call \c setHeaderFooterText ( or \c setHeaderFooterFont
+ , \c setHeaderFooterFontUseRelSize , \c setHeaderFooterFontRelSize ,
+ resp.) while specifying the appropriate \c HdFtPos. <br>
+ The canonical way to retrieve settings and content of headers or
+ footers is to call \c headerFooterText (or \c headerFooterFont ,
+ \c headerFooterFontUseRelSize , \c headerFooterFontRelSize, resp.).
+
+ \return the used font
+ \sa HdFtPos, setHeaderFooterFont(), headerFooterFont()
+ \sa setHeaderFooterFontUseRelSize(), headerFooterFontUseRelSize()
+ \sa setHeaderFooterFontRelSize(), headerFooterFontRelSize()
+ \sa setHeader2Font(), setHeader2Text(), header2Text(),
+ setHeader1Font(), header1Font(), setFooterFont(), footerFont()
+ */
+
+
+/**
+ \fn void KDChartParams::setHeader2Text( const QString& text )
+
+ Specifies the text to be displayed as the second header line. The
+ default is not to display any header text.
+
+ \note This function provided for convenience only. <br>
+ To gain the <b>full</b> benefits of the header/footer management
+ please consider learning about the different header (or footer,
+ resp.) sections, see information given at \c HdFtPos enum
+ explanation. <br>
+ The 'better' way to specify content and settings of headers or
+ footers is to call \c setHeaderFooterText ( or \c setHeaderFooterFont
+ , \c setHeaderFooterFontUseRelSize , \c setHeaderFooterFontRelSize ,
+ resp.) while specifying the appropriate \c HdFtPos. <br>
+ The canonical way to retrieve settings and content of headers or
+ footers is to call \c headerFooterText (or \c headerFooterFont ,
+ \c headerFooterFontUseRelSize , \c headerFooterFontRelSize, resp.).
+
+ \param text the text to display
+ \sa HdFtPos, setHeaderFooterText(), headerFooterText()
+ \sa header2Text(), setHeader1Text(), header1Text(), setFooterText(),
+ footerText()
+ */
+
+
+/**
+ \fn QString KDChartParams::header2Text() const
+
+ Returns the text that is displayed as the second header line.
+
+ \note This function provided for convenience only. <br>
+ To gain the <b>full</b> benefits of the header/footer management
+ please consider learning about the different header (or footer,
+ resp.) sections, see information given at \c HdFtPos enum
+ explanation. <br>
+ The 'better' way to specify content and settings of headers or
+ footers is to call \c setHeaderFooterText ( or \c setHeaderFooterFont
+ , \c setHeaderFooterFontUseRelSize , \c setHeaderFooterFontRelSize ,
+ resp.) while specifying the appropriate \c HdFtPos. <br>
+ The canonical way to retrieve settings and content of headers or
+ footers is to call \c headerFooterText (or \c headerFooterFont ,
+ \c headerFooterFontUseRelSize , \c headerFooterFontRelSize, resp.).
+
+ \return the displayed text
+ \sa HdFtPos, setHeaderFooterText(), headerFooterText()
+ \sa setHeader2Text(), setHeader1Text(), header1Text(), setFooterText(),
+ footerText()
+ */
+
+
+/**
+ \fn void KDChartParams::setHeader2Font( const QFont& font )
+
+ Specifies the font to be used for displaying the second header line. The
+ default is a 12pt Helvetica font.
+
+ \note This function provided for convenience only. <br>
+ To gain the <b>full</b> benefits of the header/footer management
+ please consider learning about the different header (or footer,
+ resp.) sections, see information given at \c HdFtPos enum
+ explanation. <br>
+ The 'better' way to specify content and settings of headers or
+ footers is to call \c setHeaderFooterText ( or \c setHeaderFooterFont
+ , \c setHeaderFooterFontUseRelSize , \c setHeaderFooterFontRelSize ,
+ resp.) while specifying the appropriate \c HdFtPos. <br>
+ The canonical way to retrieve settings and content of headers or
+ footers is to call \c headerFooterText (or \c headerFooterFont ,
+ \c headerFooterFontUseRelSize , \c headerFooterFontRelSize, resp.).
+
+ \param font the font to use
+ \sa HdFtPos, setHeaderFooterFont(), headerFooterFont()
+ \sa setHeaderFooterFontUseRelSize(), headerFooterFontUseRelSize()
+ \sa setHeaderFooterFontRelSize(), headerFooterFontRelSize()
+ \sa header2Font(), setHeader2Text(), header2Text(), setHeader1Font(), header1Font(),
+ setFooterFont(), footerFont()
+ */
+
+
+
+/**
+ \fn QFont KDChartParams::header2Font() const
+
+ Returns the font used for displaying the second header line.
+
+ \note This function provided for convenience only. <br>
+ To gain the <b>full</b> benefits of the header/footer management
+ please consider learning about the different header (or footer,
+ resp.) sections, see information given at \c HdFtPos enum
+ explanation. <br>
+ The 'better' way to specify content and settings of headers or
+ footers is to call \c setHeaderFooterText ( or \c setHeaderFooterFont
+ , \c setHeaderFooterFontUseRelSize , \c setHeaderFooterFontRelSize ,
+ resp.) while specifying the appropriate \c HdFtPos. <br>
+ The canonical way to retrieve settings and content of headers or
+ footers is to call \c headerFooterText (or \c headerFooterFont ,
+ \c headerFooterFontUseRelSize , \c headerFooterFontRelSize, resp.).
+
+ \return the used font
+ \sa HdFtPos, setHeaderFooterFont(), headerFooterFont()
+ \sa setHeaderFooterFontUseRelSize(), headerFooterFontUseRelSize()
+ \sa setHeaderFooterFontRelSize(), headerFooterFontRelSize()
+ \sa setHeader2Font(), setHeader2Text(), header2Text(),
+ setHeader1Font(), header1Font(), setFooterFont(), footerFont()
+ */
+
+
+/**
+ \fn void KDChartParams::setFooterText( const QString& text )
+
+ Specifies the text to be displayed as the footer line. The
+ default is not to display any footer text.
+
+ \note This function provided for convenience only. <br>
+ To gain the <b>full</b> benefits of the header/footer management
+ please consider learning about the different header (or footer,
+ resp.) sections, see information given at \c HdFtPos enum
+ explanation. <br>
+ The 'better' way to specify content and settings of headers or
+ footers is to call \c setHeaderFooterText ( or \c setHeaderFooterFont
+ , \c setHeaderFooterFontUseRelSize , \c setHeaderFooterFontRelSize ,
+ resp.) while specifying the appropriate \c HdFtPos. <br>
+ The canonical way to retrieve settings and content of headers or
+ footers is to call \c headerFooterText (or \c headerFooterFont ,
+ \c headerFooterFontUseRelSize , \c headerFooterFontRelSize, resp.).
+
+ \param text the text to display
+ \sa HdFtPos, setHeaderFooterText(), headerFooterText()
+ \sa footerText(), setHeader1Text(), header1Text(), setHeader2Text(),
+ header2Text()
+ */
+
+
+/**
+ \fn QString KDChartParams::footerText() const
+
+ Returns the text that is displayed as the footer line.
+
+ \note This function provided for convenience only. <br>
+ To gain the <b>full</b> benefits of the header/footer management
+ please consider learning about the different header (or footer,
+ resp.) sections, see information given at \c HdFtPos enum
+ explanation. <br>
+ The 'better' way to specify content and settings of headers or
+ footers is to call \c setHeaderFooterText ( or \c setHeaderFooterFont
+ , \c setHeaderFooterFontUseRelSize , \c setHeaderFooterFontRelSize ,
+ resp.) while specifying the appropriate \c HdFtPos. <br>
+ The canonical way to retrieve settings and content of headers or
+ footers is to call \c headerFooterText (or \c headerFooterFont ,
+ \c headerFooterFontUseRelSize , \c headerFooterFontRelSize, resp.).
+
+ \return the displayed text
+ \sa HdFtPos, setHeaderFooterText(), headerFooterText()
+ \sa setFooterText(), setHeader1Text(), header1Text(), setHeader2Text(),
+ header2Text()
+ */
+
+
+/**
+ \fn void KDChartParams::setFooterFont( const QFont& font )
+
+ Specifies the font to be used for displaying the footer line. The
+ default is a 12pt Helvetica font.
+
+ \note This function provided for convenience only. <br>
+ To gain the <b>full</b> benefits of the header/footer management
+ please consider learning about the different header (or footer,
+ resp.) sections, see information given at \c HdFtPos enum
+ explanation. <br>
+ The 'better' way to specify content and settings of headers or
+ footers is to call \c setHeaderFooterText ( or \c setHeaderFooterFont
+ , \c setHeaderFooterFontUseRelSize , \c setHeaderFooterFontRelSize ,
+ resp.) while specifying the appropriate \c HdFtPos. <br>
+ The canonical way to retrieve settings and content of headers or
+ footers is to call \c headerFooterText (or \c headerFooterFont ,
+ \c headerFooterFontUseRelSize , \c headerFooterFontRelSize, resp.).
+
+ \param font the font to use
+ \sa HdFtPos, setHeaderFooterFont(), headerFooterFont()
+ \sa setHeaderFooterFontUseRelSize(), headerFooterFontUseRelSize()
+ \sa setHeaderFooterFontRelSize(), headerFooterFontRelSize()
+ \sa footerFont(), setFooterText(), footerText(), setHeader1Font(), header1Font(),
+ setHeader2Font(), header2Font()
+ */
+
+
+/**
+ \fn QFont KDChartParams::footerFont() const
+
+ Returns the font used for displaying the footer line.
+
+ \note This function provided for convenience only. <br>
+ To gain the <b>full</b> benefits of the header/footer management
+ please consider learning about the different header (or footer,
+ resp.) sections, see information given at \c HdFtPos enum
+ explanation. <br>
+ The 'better' way to specify content and settings of headers or
+ footers is to call \c setHeaderFooterText ( or \c setHeaderFooterFont
+ , \c setHeaderFooterFontUseRelSize , \c setHeaderFooterFontRelSize ,
+ resp.) while specifying the appropriate \c HdFtPos. <br>
+ The canonical way to retrieve settings and content of headers or
+ footers is to call \c headerFooterText (or \c headerFooterFont ,
+ \c headerFooterFontUseRelSize , \c headerFooterFontRelSize, resp.).
+
+ \return the used font
+ \sa HdFtPos, setHeaderFooterFont(), headerFooterFont()
+ \sa setHeaderFooterFontUseRelSize(), headerFooterFontUseRelSize()
+ \sa setHeaderFooterFontRelSize(), headerFooterFontRelSize()
+ \sa setFooterFont(), setFooterText(), footerText(),
+ setHeader1Font(), header1Font(), setHeader2Font(), header2Font()
+ */
+
+
+//@}
+// END HEADERFOOTER
+
+
+
+// PRIVATE VARIABLES
+/**
+ \var int KDChartParams::_globalLeadingLeft;
+ Stores the distance between the chart and the left border of the painter area.
+ */
+
+/**
+ \var int KDChartParams::_globalLeadingTop;
+
+ Stores the distance between the chart and the upper border of the painter area.
+ */
+
+
+/**
+ \var int KDChartParams::_globalLeadingRight;
+
+ Stores the distance between the chart and the left border of the painter area.
+ */
+
+
+/**
+ \var int KDChartParams::_globalLeadingBottom;
+
+ Stores the distance between the chart and the right border of the painter area.
+ */
+
+/**
+ \var ChartType KDChartParams::_chartType;
+
+ Stores the chart type.
+ */
+
+/**
+ \var ChartType KDChartParams::_additionalChartType;
+
+ Stores the additional chart type.
+ */
+
+/**
+ \var int KDChartParams::_numValues;
+
+ Stores how many of the values should be shown. -1 means all
+ available values.
+ */
+
+/**
+ \var QFont KDChartParams::_defaultFont;
+
+ Stores our default font used for many different purposes.
+ */
+
+/**
+ \var KDChartParams::AreaMap
+
+ The type used for storing the frame settings for all of the chart areas.
+ */
+
+/**
+ \var AreaMap KDChartParams::_areaMap;
+ Stores the frame settings for all of the chart areas.
+ */
+
+/**
+ \var CustomBoxMap KDChartParams::_customBoxDict;
+
+ Stores the settings for all of the custom boxes.
+ */
+
+
+/**
+ \var QRect KDChartParams::_noRect;
+
+ Stores an empty rectangle.
+ */
+
+/**
+ \var KDFrame KDChartParams::_noFrame;
+
+ Stores the default frame settings: no border, no corners, no background.
+ */
+
+/**
+ \var KDChartFrameSettings KDChartParams::_noFrameSettings;
+
+ Stores the default area settings: no frame, no inner gap, no outer gap.
+ */
+
+
+/**
+ \class KDChartParams::ModeAndChart
+
+ Stores the SourceMode and the chart(s) for one dataset.
+ */
+
+
+/**
+ \var ModeAndChartMap KDChartParams::_dataSourceModeAndChart;
+
+ Stores the SourceMode and the chart(s) for the datasets.
+ */
+
+/**
+ \var typedef KDChartParams::ModeAndChartMap
+
+ The type used for storing the source mode and charts of the datasets
+ */
+
+
+/**
+ \var bool KDChartParams::_setChartSourceModeWasUsed;
+
+ Stores whether setChartSourceMode() was called or not
+ */
+
+/**
+ \var QMap < uint, QColor > KDChartParams::_dataColors;
+
+ Stores the colors for the datasets.
+ */
+
+/**
+ \var uint KDChartParams::_maxDatasetSourceMode;
+
+ Stores the highest dataset number for which a SourceMode has been
+ defined. Note that if you define a value for a dataset but not for a
+ dataset with a lower number (and there is neither a default value), the
+ source mode for that dataset with the lower number will be undefined.
+ */
+
+
+/**
+ \var KDChartPropertySetList KDChartParams::_propertySetList;
+
+ Stores all property-sets that were defined.
+ Each of these sets may be assigned to an individual cell.
+ */
+
+
+/**
+ \var double KDChartParams::_shadowBrightnessFactor;
+
+ Stores a factor to be used to adjust the
+ built-in brightness of shadow colors in
+ 3-dimensional drawings like e.g. 3D bar charts.
+ */
+
+
+/**
+ \var Qt::BrushStyle KDChartParams::_shadowPattern;
+
+ Stores a fill style to be used for filling shadow area in
+ 3-dimensional drawings like e.g. 3D bar charts.
+ */
+
+/**
+ \var bool KDChartParams::_threeDShadowColors;
+
+ Stores whether shadowed colors are used for 3D effects. Only used
+ for 3D effects in charts that support these.
+ */
+
+
+/**
+ \var uint KDChartParams::_maxDatasetColor;
+
+ Stores the highest dataset number for which a color has been
+ defined. Note that if you define a value for a dataset but not for a
+ dataset with a lower number (and there is neither a default value), the
+ color for that dataset with the lower number will be undefined.
+ */
+
+/**
+ \var QMap < uint, QColor > KDChartParams::_dataColorsShadow1;
+
+ Stores the shadow colors that are somewhat darker than the colors in
+ _dataColors.
+ */
+
+/**
+ \var QMap < uint, QColor > KDChartParams::_dataColorsShadow2;
+
+ Stores the shadow colors that are even more darker than the colors in
+ _dataColorsShadow1;
+ */
+
+/**
+ \var QColor KDChartParams::_outlineDataColor;
+
+ Stores the color to be used for outlines of data displays.
+ */
+
+/**
+ \var uint KDChartParams::_outlineDataLineWidth;
+
+ Stores the line width to be used for outlines of data displays.
+ */
+
+/**
+ \var PenStyle KDChartParams::_outlineDataLineStyle;
+
+ Stores the line style to be used for outlines of data displays.
+ */
+
+
+
+/**
+ \struct PrintValueDataSettings KDChartParams.h
+
+ Stores if and how a chart will print the data values near their
+ respective entries.
+ */
+
+
+/**
+ \var PrintDataValuesSettings KDChartParams::_printDataValuesSettings;
+
+ Stores if and how the FIRST chart will print the data values
+ near their respective entries.
+ */
+
+/**
+ \var PrintDataValuesSettings KDChartParams::_printDataValuesSettings2;
+
+ Stores if and how the SECOND chart will print the data values
+ near their respective entries, in case two charts are to be
+ drawn sharing the same data area.
+ */
+
+/**
+ \var bool KDChartParams::_allowOverlappingDataValueTexts;
+
+ Stores whether a data value may be drawn near it's respective entry
+ even if it's region intersects with another data value text's region.
+
+ By default this is FALSE to prevent ugly mutual overwriting of data
+ value texts and to speed up drawing of cahrts containing thousands
+ of data points.
+ */
+
+
+/**
+ \var BarChartSubType KDChartParams::_barChartSubType;
+
+ Stores the bar chart subtype. Only used when chartType() ==
+ Bar
+ */
+
+/**
+ \var bool KDChartParams::_threeDBars;
+
+ Stores whether the engine should draw the bars in 3D. Only
+ used if chartType() == Bar.
+ */
+
+/**
+ \var int KDChartParams::_threeDBarAngle;
+
+ Stores the angle used for 3D display. Only used if
+ threeDBars == true.
+ */
+
+/**
+ \var double KDChartParams::_threeDBarDepth;
+
+ Stores the depth of the 3D Effect used for 3D bars
+ in relation to the bar width.
+ Only used if chartType() == Bar and threeDBars() == true.
+ */
+
+
+/**
+ \var double KDChartParams::_cosThreeDBarAngle;
+
+ The cosine in rad of the angle for 3D display. Only used if
+ threeDBars == true.
+ */
+
+/**
+ \var int KDChartParams::_datasetGap;
+
+ Stores the number of pixels between two dataset values.
+ */
+
+/**
+ \var bool KDChartParams::_datasetGapIsRelative;
+
+ Stores if the value set by \c setDatasetGap
+ is a per mille value of the chart data area width.
+ */
+
+/**
+ \var int KDChartParams::_valueBlockGap;
+
+ Stores the number of pixels between each value block.
+ */
+
+/**
+ \var bool KDChartParams::_valueBlockGapIsRelative;
+
+ Stores if the value set by \c setValueBlockGap
+ is a per mille value of the chart data area width.
+ */
+
+/// LINES/AREAS-specific
+/**
+ \var LineChartSubType KDChartParams::_lineChartSubType;
+
+ Stores the line chart subtype. Only used when chartType() ==
+ Line
+ */
+
+/**
+ \var bool KDChartParams::_threeDLines;
+
+ Stores whether 3D lines should be drawn.
+ */
+
+
+/**
+ \var int KDChartParams::_threeDLineDepth;
+
+ Stores the depth of 3D lines.
+ */
+
+
+// documentation of this member variable temporary disabled:
+// Feature is currently not supported, will be implemented
+// by future versions of KDChart
+/*
+ \var int KDChartParams::_threeDLineXRotation;
+
+ Stores the X rotation of 3D lines.
+ */
+
+
+// documentation of this member variable temporary disabled:
+// Feature is currently not supported, will be implemented
+// by future versions of KDChart
+/*
+ \var int KDChartParams::_threeDLineYRotation;
+
+ Stores the Y rotation of 3D lines.
+ */
+
+
+/**
+ \var bool KDChartParams::_lineMarker;
+
+ Stores whether line markers should be drawn. Only used when
+ chartType() == Line.
+ */
+
+
+/**
+ \var LineMarkerStyleMap KDChartParams::_lineMarkerStyles;
+
+ Stores the styles of the line makers
+ */
+
+/**
+ \var uint KDChartParams::_maxDatasetLineMarkerStyle;
+
+ Stores the highest dataset number for which a line marker has been
+ defined. Note that if you define a value for a dataset but not for a
+ dataset with a lower number (and there is neither a default value), the
+ line marker for that dataset with the lower number will be undefined.
+ */
+
+/**
+ \var QSize KDChartParams::_lineMarkerSize;
+
+ Stores the size of the line markers.
+ */
+
+
+/**
+ \var QColor KDChartParams::_lineColor;
+
+ Stores the color of lines in line charts.
+ */
+
+/**
+ \var int KDChartParams::_lineWidth;
+
+ Stores the line width of lines in line charts.
+ */
+
+/**
+ \var PenStyle KDChartParams::_lineStyle;
+
+ Stores the line style of lines in line charts.
+ */
+
+/**
+ \var AreaChartSubType KDChartParams::_areaChartSubType;
+
+ Stores the area chart subtype. Only used when chartType() ==
+ Area
+ */
+
+
+/**
+ \var AreaLocation KDChartParams::_areaLocation;
+
+ Stores whether the area above or below the value points should
+ be filled.
+ */
+
+
+/// POLAR-specific
+/**
+ \var PolarChartSubType KDChartParams::_polarChartSubType;
+
+ Stores the polar chart subtype. Only used when chartType() ==
+ Polar
+ */
+
+/**
+ \var bool KDChartParams::_polarMarker;
+
+ Stores whether polar markers should be drawn. Only used when
+ chartType() == Polar.
+ */
+
+/**
+ \var PolarMarkerStyleMap KDChartParams::_polarMarkerStyles;
+
+ Stores the styles of the markers in a polar char.
+ */
+
+/**
+ \var uint KDChartParams::_maxDatasetPolarMarkerStyle;
+
+ Stores the highest dataset number for which a polar marker has been
+ defined. Note that if you define a value for a dataset but not for a
+ dataset with a lower number (and there is neither a default value), the
+ polar marker for that dataset with the lower number will be undefined.
+ */
+
+/**
+ \var QSize KDChartParams::_polarMarkerSize;
+
+ Stores the size of the polar markers.
+ */
+
+
+/**
+ \var int KDChartParams::_polarLineWidth;
+
+ Stores the line width of lines in polar charts.
+ */
+
+
+/**
+ \var int KDChartParams::_polarZeroDegreePos;
+
+ Stores the zero degree position in polar charts.
+ */
+
+
+/**
+ \var bool KDChartParams::_polarRotateCircularLabels;
+
+ Stores whether to rotate circular labels in polar charts.
+ */
+
+/**
+ \struct KDChartParams::_polarDelimsAndLabelStruct KDChartParams.h
+
+ Stores whether to show circular delimiters and/or labels
+ at a given position in polar charts.
+ */
+
+/**
+ \var _polarDelimsAndLabelStruct KDChartParams::_polarDelimsAndLabels[ 1 + KDCHART_MAX_POLAR_DELIMS_AND_LABELS_POS ];
+
+ Stores where to show circular delimiters and labels in polar charts.
+ */
+
+
+
+// PIES/RINGS
+/**
+ \var bool KDChartParams::_explode;
+
+ Stores whether pies or ring segments are drawn exploding.
+ */
+
+/**
+ \var double KDChartParams::_explodeFactor;
+
+ Stores the default explode factor of pie or ring segments.
+ */
+
+/**
+ \var QMap<int,double> KDChartParams::_explodeFactors;
+
+ Stores the list of segment-specific explode factors of pie or
+ ring segments.
+ */
+
+/**
+ \var QValueList<int> KDChartParams::_explodeList;
+
+ Stores the list of pies or ring segments to explode.
+ */
+
+/**
+ \var bool KDChartParams::_threeDPies;
+
+ Stores whether pies will have a 3D effect.
+ */
+
+/**
+ \var int KDChartParams::_threeDPieHeight;
+
+ Stores the height of the pie 3D effect.
+ */
+
+/**
+ \var int KDChartParams::_pieStart;
+
+ Stores the starting point of the pie circle.
+ */
+
+/**
+ \var int KDChartParams::_ringStart;
+
+ Stores the starting point of the ring circle.
+ */
+
+/**
+ \var bool KDChartParams::_relativeRingThickness;
+
+ Stores whether the ring thickness is relativ or constant.
+ */
+
+
+// HI-LO CHARTS
+
+/**
+ \var HiLoChartSubType KDChartParams::_hiLoChartSubType;
+
+ Stores the HiLo subtype.
+ */
+
+/**
+ \var bool KDChartParams::_hiLoChartPrintLowValues;
+
+ Stores whether the low values
+ will be printed under their respective entries.
+ */
+
+
+/**
+ \var QFont KDChartParams::_hiLoChartLowValuesFont;
+
+ Stores the font to be used for printing the low values.
+ */
+
+
+/**
+ \var bool KDChartParams::_hiLoChartLowValuesUseFontRelSize;
+
+ Stores whether the font size to be used for printing the low
+ values is calculated dynamically.
+ */
+
+
+/**
+ \var int KDChartParams::_hiLoChartLowValuesFontRelSize;
+
+ Stores the relative size (in per mille of the chart width) of
+ font size to be used for printing the low values.
+ */
+
+
+/**
+ \var QColor KDChartParams::_hiLoChartLowValuesColor;
+
+ Stores the colour of the font size to be used for printing the
+ low values.
+ */
+
+/**
+ \var bool KDChartParams::_hiLoChartPrintHighValues;
+
+ Stores whether the high values will be printed under their
+ respective entries.
+ */
+
+
+/**
+ \var QFont KDChartParams::_hiLoChartHighValuesFont;
+
+ Stores the font to be used for printing the high values.
+ */
+
+
+/**
+ \var bool KDChartParams::_hiLoChartHighValuesUseFontRelSize;
+
+ Stores whether the font size to be used for printing the high
+ values is calculated dynamically.
+ */
+
+
+/**
+ \var int KDChartParams::_hiLoChartHighValuesFontRelSize;
+
+ Stores the relative size (in per mille of the chart width) of
+ font size to be used for printing the high values.
+ */
+
+
+/**
+ \var QColor KDChartParams::_hiLoChartHighValuesColor;
+
+ Stores the colour of the font size to be used for printing the
+ high values.
+ */
+
+/**
+ \var bool KDChartParams::_hiLoChartPrintOpenValues;
+
+ Stores whether the open values
+ will be printed under their respective entries.
+ */
+
+
+/**
+ \var QFont KDChartParams::_hiLoChartOpenValuesFont;
+
+ Stores the font to be used for printing the open values.
+ */
+
+
+/**
+ \var bool KDChartParams::_hiLoChartOpenValuesUseFontRelSize;
+
+ Stores whether the font size to be used for printing the open
+ values is calculated dynamically.
+ */
+
+
+/**
+ \var int KDChartParams::_hiLoChartOpenValuesFontRelSize;
+
+ Stores the relative size (in per mille of the chart width) of
+ font size to be used for printing the open values.
+ */
+
+
+/**
+ \var QColor KDChartParams::_hiLoChartOpenValuesColor;
+
+ Stores the colour of the font size to be used for printing the
+ open values.
+ */
+
+/**
+ \var bool KDChartParams::_hiLoChartPrintCloseValues;
+
+ Stores whether the close values will be printed under their
+ respective entries.
+ */
+
+
+/**
+ \var QFont KDChartParams::_hiLoChartCloseValuesFont;
+
+ Stores the font to be used for printing the close values.
+ */
+
+
+/**
+ \var bool KDChartParams::_hiLoChartCloseValuesUseFontRelSize;
+
+ Stores whether the font size to be used for printing the close
+ values is calculated dynamically.
+ */
+
+
+/**
+ \var int KDChartParams::_hiLoChartCloseValuesFontRelSize;
+
+ Stores the relative size (in per mille of the chart width) of
+ font size to be used for printing the close values.
+ */
+
+
+/**
+ \var QColor KDChartParams::_hiLoChartCloseValuesColor;
+
+ Stores the colour of the font size to be used for printing the
+ close values.
+ */
+
+
+/**
+ \var BWChartSubType KDChartParams::_BWChartSubType;
+
+ Stores the Box And Whisker subtype.
+ */
+
+/**
+ \struct BWChartStatistics KDChartParams.h
+
+ Stores the statistical data for a box-and-whisker chart
+ */
+
+/**
+ \var BWChartStatistics KDChartParams::_BWChartStatistics[ BWStatValOffEndValue ];
+
+ Stores whether and how the statistical data
+ will be printed near the drawing.
+ */
+
+/**
+ \var double KDChartParams::_BWChartFenceUpperInner;
+ \var double KDChartParams::_BWChartFenceLowerInner;
+ \var double KDChartParams::_BWChartFenceUpperOuter;
+ \var double KDChartParams::_BWChartFenceLowerOuter;
+
+ Stores the factors to be used to calculate the width of
+ the inner and outer fences.
+ */
+
+/**
+ \var int KDChartParams::_BWChartOutValMarkerSize;
+
+ Stores the size (or the negative size factor, resp.) of
+ the markers representing the outliers.
+ */
+
+
+/**
+ \var QBrush KDChartParams::_BWChartBrush;
+
+ Stores the brush to be used.
+ */
+
+/**
+ \var LegendPosition KDChartParams::_legendPosition;
+
+ Stores the legend position.
+ */
+
+/**
+ \var LegendSource KDChartParams::_legendSource;
+
+ Stores the legend source.
+ */
+
+/**
+ \var QMap < int, QString > KDChartParams::_legendText;
+
+ Stores the manually set legend texts.
+ */
+
+
+/**
+ \var QColor KDChartParams::_legendTextColor;
+
+ Stores the color for drawing the legend texts.
+ */
+
+/**
+ \var QFont KDChartParams::_legendFont;
+
+ Stores the font for drawing the legends.
+ */
+
+/**
+ \var bool KDChartParams::_legendFontUseRelSize;
+
+ Stores whether the size of the legend font is to be calculated
+ on a relative basis.
+
+ \sa setLegendFontUseRelSize, setLegendFontRelSize
+ \sa setLegendFont
+ */
+
+/**
+ \var int KDChartParams::_legendFontRelSize;
+
+ Stores the per mille basis for calculating the relative
+ legend font size.
+
+ \sa setLegendFontRelSize, setLegendFontUseRelSize
+ \sa setLegendFont
+ */
+
+
+/**
+ \var QString KDChartParams::_legendTitleText;
+
+ Stores the legend title text.
+ */
+
+
+/**
+ \var QColor KDChartParams::_legendTitleTextColor;
+
+ Stores the color for drawing the legend title.
+ */
+
+
+/**
+ \var QFont KDChartParams::_legendTitleFont;
+
+ Stores the font for drawing the legend title.
+ */
+
+/**
+ \var bool KDChartParams::_legendTitleFontUseRelSize;
+
+ Stores whether the size of the legend title font is to be
+ calculated on a relative basis.
+
+ \sa setLegendTitleFontUseRelSize, setLegendTitleFontRelSize
+ \sa setLegendTitleFont
+ */
+
+/**
+ \var int KDChartParams::_legendTitleFontRelSize;
+
+ Stores the per mille basis for calculating the relative
+ legend title font size.
+
+ \sa setLegendTitleFontRelSize, setLegendTitleFontUseRelSize
+ \sa setLegendTitleFont
+ */
+
+
+/**
+ \var uint KDChartParams::_legendSpacing;
+
+ Stores the number of pixels between the legend and the data display
+ */
+
+
+/**
+ \struct KDChartParams::AxisSettings KDChartParams.h
+
+ Stores all the settings of all the axis \em plus one more
+ parameter set containing the build-in defauls axis settings.
+ */
+
+/**
+ \var KDChartParams::_axisSettings
+
+ Stores the settings for each of the possible thirteen axes
+ */
+
+
+
+/**
+ \struct HdFtParams KDChartParams.h
+
+ Stores all the settings of all the header sections
+ and all the footer sections.
+ */
+
+
+
+/**
+ Retrieves the ID of the first KDChartCustomBox that is anchored at axis \c n.
+
+ By default this box is used for the default axis title text: it is created
+ (or modified, resp.) by calling one of the axis title convenience functions
+ setAxisTitleColor or setAxisTitleFont or setAxisTitleFontUseRelSize or setAxisTitleFontRelSize.
+
+ \note If you have specified another custom box manually that is anchored to this axis
+ before (or instead of, resp.) calling one of the convenience functions mentioned above
+ your custom box will become the default axis title text box: you then can access/modify
+ its properties using these convenience functions.
+
+ \return TRUE if a KDChartCustomBox was found that is anchored to axis \c n.
+ \param n the axis number, this could be KDChartAxisParams::AxisPosLeft or KDChartAxisParams::AxisPosBottom...
+ \param boxID will obtain the respective KDChartCustomBox's ID if return value is TRUE, otherwise the parameter's value remains unchanged.
+ \sa setAxisTitle, setAxisTitleColor, setAxisTitleFont, setAxisTitleFontUseRelSize, setAxisTitleFontRelSize
+ */
+bool KDChartParams::findFirstAxisCustomBoxID( uint n, uint& boxID ) const
+{
+ QIntDictIterator<KDChartCustomBox> it( _customBoxDict );
+ for( ; it.current(); ++it ){
+ if( (*it).anchorArea() == KDChartEnums::AreaAxisBASE + n ){
+ boxID = it.currentKey();
+ return true;
+ }
+ }
+ return false;
+}
+
+void KDChartParams::insertDefaultAxisTitleBox( uint n,
+ bool setTitle, const QString& axisTitle,
+ bool setColor, const QColor& axisTitleColor,
+ bool setFont, const QFont& axisTitleFont,
+ bool setFontUseRelSize, bool axisTitleFontUseRelSize,
+ bool setFontRelSize, int axisTitleFontRelSize )
+{
+ bool bVert = false;
+ bool bHorz = false;
+ bool b3rd = false;
+ switch( KDChartAxisParams::basicAxisPos( n ) ){
+ case KDChartAxisParams::AxisPosLeft:
+ case KDChartAxisParams::AxisPosRight:
+ case KDChartAxisParams::AxisPosLeft2:
+ case KDChartAxisParams::AxisPosRight2:
+ bVert = true;
+ break;
+ case KDChartAxisParams::AxisPosTop:
+ case KDChartAxisParams::AxisPosBottom:
+ case KDChartAxisParams::AxisPosTop2:
+ case KDChartAxisParams::AxisPosBottom2:
+ bHorz = true;
+ break;
+ default:
+ b3rd = true;
+ break;
+ }
+ const QFont defaultFont( "helvetica", 6, QFont::Normal, false );
+
+ // SGI IRIX: Compiling error.
+ // QString titleString( setTitle ? axisTitle : "<qt><center> </center></qt>" );
+ QString titleString;
+ if( setTitle )
+ titleString = axisTitle;
+ else
+ titleString = "<qt><center> </center></qt>";
+
+
+ const QString stripTitleString( titleString.simplifyWhiteSpace().upper() );
+ if( setTitle ){
+ if( !stripTitleString.startsWith("<QT>" ) )
+ titleString.prepend("<qt><center>");
+ if( !stripTitleString.endsWith("</QT>" ) )
+ titleString.append("</center></qt>");
+ }
+
+ KDChartTextPiece textPiece( titleString, setFont ? axisTitleFont : defaultFont );
+ int fixedFontSize = textPiece.font().pointSize();
+ if( -1 == fixedFontSize )
+ fixedFontSize = textPiece.font().pixelSize();
+ if( -1 == fixedFontSize )
+ fixedFontSize = 15;
+ int relFontSize = setFontRelSize ? -axisTitleFontRelSize : -18;
+
+ KDChartCustomBox customBox( bVert ? -90 : 0,
+ textPiece,
+ setFontUseRelSize
+ ? ( axisTitleFontUseRelSize ? relFontSize : fixedFontSize )
+ : relFontSize,
+ true,
+ 0, 0,
+ 0, 0,
+ setColor ? axisTitleColor : Qt::darkBlue,
+ Qt::NoBrush,
+ KDChartEnums::AreaAxisBASE + n,
+ bVert ? KDChartEnums::PosCenterLeft : KDChartEnums::PosBottomCenter, bVert ? (Qt::AlignTop + Qt::AlignHCenter) : (Qt::AlignBottom + Qt::AlignHCenter),
+ 0,0,0,
+ bVert ? (Qt::AlignBottom + Qt::AlignRight) : (Qt::AlignTop + Qt::AlignHCenter),
+ false, n );
+
+ customBox.setParentAxisArea( n );
+ insertCustomBox( customBox );
+ // J.Rodehuser: delete the unused variable 'id'
+ // const uint id = insertCustomBox( customBox );
+
+ /*debugging Title box*/
+ /*
+ setSimpleFrame(
+ KDChartEnums::AreaCustomBoxesBASE
+ + id,
+ 0,0, 0,0,
+ true,
+ true,
+ KDFrame::FrameFlat,
+ 1,
+ 0,
+ Qt::red,
+ QBrush( QColor ( 255,248,222 ) ) );
+ */
+}
+
+/**
+ Specifies the default axis title text.
+
+ \note This is a convenience function accessing the first KDChartCustomBox that is anchored at axis \c n.
+
+ \param axisTitle the axis title text
+ \sa setAxisTitleColor,setAxisTitleFont,setAxisTitleFontUseRelSize, setAxisTitleFontRelSize
+ \sa axisTitle, axisTitleColor, axisTitleFont, axisTitleFontUseRelSize, axisTitleFontRelSize
+ */
+void KDChartParams::setAxisTitle( uint n, const QString& axisTitle )
+{
+ bool bDone = false;
+ uint boxID;
+ if( findFirstAxisCustomBoxID( n, boxID ) ){
+ KDChartCustomBox* box = (KDChartCustomBox*)customBox( boxID );
+ if( box ){
+ QString title = axisTitle;
+ const QString stripTitleString( title.simplifyWhiteSpace().upper() );
+ if( !stripTitleString.startsWith("<QT>" ) )
+ title.prepend("<qt><center>");
+ if( !stripTitleString.endsWith("</QT>" ) )
+ title.append("</center></qt>");
+
+ KDChartTextPiece textPiece( 0, title,
+ box->content().font() );
+
+ box->setContent( textPiece );
+ //qDebug ("old Axis Title updated");
+ bDone = true;
+ }
+ }
+ if( !bDone ){
+ insertDefaultAxisTitleBox( n,
+ true, axisTitle,
+ false, QColor(),
+ false, QFont(),
+ false, false,
+ false, 0 );
+ //qDebug("new Axis Title Box inserted");
+ }
+ emit changed();
+}
+/**
+ Returns the default axis title text
+
+ \return the axis title text.
+ \sa setAxisTitle
+ */
+QString KDChartParams::axisTitle( uint n ) const
+{
+ uint boxID;
+ if( findFirstAxisCustomBoxID( n, boxID ) ){
+ const KDChartCustomBox* box = customBox( boxID );
+ if( box )
+ return box->content().text();
+ }
+ return QString();
+}
+
+/**
+ Specifies the color of the default axis title text.
+
+ \param axisTitleColor the color of the axis title text
+ \sa setAxisTitle, setAxisTitleFont,setAxisTitleFontUseRelSize, setAxisTitleFontRelSize
+ \sa axisTitle, axisTitleColor, axisTitleFont, axisTitleFontUseRelSize, axisTitleFontRelSize
+ */
+void KDChartParams::setAxisTitleColor( uint n, QColor axisTitleColor )
+{
+ bool bDone = false;
+ uint boxID;
+ if( findFirstAxisCustomBoxID( n, boxID ) ){
+ KDChartCustomBox* box = (KDChartCustomBox*)customBox( boxID );
+ if( box ){
+ box->setColor( axisTitleColor );
+ bDone = true;
+ }
+ }
+ if( !bDone )
+ insertDefaultAxisTitleBox( n,
+ false, QString(),
+ true, axisTitleColor,
+ false, QFont(),
+ false, false,
+ false, 0 );
+ emit changed();
+}
+/**
+ Returns the color of the default axis title text
+
+ \return the color of the axis title text.
+ \sa setAxisTitleColor
+ */
+QColor KDChartParams::axisTitleColor( uint n ) const
+{
+ uint boxID;
+ if( findFirstAxisCustomBoxID( n, boxID ) ){
+ const KDChartCustomBox* box = customBox( boxID );
+ if( box )
+ return box->color();
+ }
+ return Qt::darkBlue;
+}
+
+/**
+ Specifies the font and the size of the default axis title text.
+
+ \param axisTitleFont the font of the axis title text
+ \param useFontSize flag indicating whether the font's size is to be used
+ \param axisTitleFontRelSize the size to be used if \c useFontSize is false, this is interpreted as per mil value of the printable area size
+ \sa setAxisTitle, setAxisTitleColor,setAxisTitleFontUseRelSize, setAxisTitleFontRelSize
+ \sa axisTitle, axisTitleColor, axisTitleFont, axisTitleFontUseRelSize, axisTitleFontRelSize
+ */
+void KDChartParams::setAxisTitleFont( uint n,
+ QFont axisTitleFont )
+{
+ bool bDone = false;
+ uint boxID;
+ if( findFirstAxisCustomBoxID( n, boxID ) ){
+ KDChartCustomBox* box = (KDChartCustomBox*)customBox( boxID );
+ if( box ){
+ KDChartTextPiece textPiece( 0, box->content().text(),
+ axisTitleFont );
+ box->setContent( textPiece );
+ bDone = true;
+ }
+ }
+ if( !bDone )
+ insertDefaultAxisTitleBox( n,
+ false, QString(),
+ false, QColor(),
+ true, axisTitleFont,
+ false, false,
+ false, 0 );
+ emit changed();
+}
+
+/**
+ Specifies the font and the size of the default axis title text.
+ \param axisTitleFont the font of the axis title text - by default the font will be relative
+ \param useFixedFontSize flag indicating whether the font's size is to be used as fixed or calculated as per mil value.
+ \param axisTitleFontRelSize the size to be used if \c useFixedFontSize is false, this is interpreted as per mil value of the printable area size
+ \sa setAxisTitle, setAxisTitleColor, setAxisTitleFont, setAxisTitleFontUseRelSize, setAxisTitleFontRelSize
+ \sa axisTitle, axisTitleColor, axisTitleFont, axisTitleFontUseRelSize, axisTitleFontRelSize
+ */
+
+void KDChartParams::setAxisTitleFont( uint n,
+ QFont axisTitleFont,
+ bool useFixedFontSize )
+{
+
+ bool bDone = false;
+ uint boxID;
+ if( findFirstAxisCustomBoxID( n, boxID ) ){
+ KDChartCustomBox* box = (KDChartCustomBox*)customBox( boxID );
+ if( box ){
+ KDChartTextPiece textPiece( 0, box->content().text(),
+ axisTitleFont );
+ int fixedFontSize = textPiece.font().pointSize();
+ setAxisTitleFontRelSize( n, fixedFontSize );
+ box->setContent( textPiece );
+ bDone = true;
+ }
+ }
+ if( !bDone )
+ insertDefaultAxisTitleBox( n,
+ false, QString(),
+ false, QColor(),
+ true, axisTitleFont,
+ false, false,
+ false, 0 );
+
+ emit changed();
+
+ if ( useFixedFontSize )
+ setAxisTitleFontUseRelSize( n, false);
+
+}
+
+
+/**
+ Returns the font of the default axis title text.
+
+ \return the axis title's font.
+ \sa setAxisTitleFont
+ */
+QFont KDChartParams::axisTitleFont( uint n ) const
+{
+ uint boxID;
+ if( findFirstAxisCustomBoxID( n, boxID ) ){
+ const KDChartCustomBox* box = customBox( boxID );
+ if( box )
+ return box->content().font();
+ }
+ return QFont( "helvetica", 6, QFont::Normal, false );
+}
+
+/**
+ Specifies whether the fixed size of the the default axis title text's font.
+
+ \param axisTitleFontUseRelSize flag indicating whether the font's size is to be used or the size specified via setAxisTitleFontRelSize.
+ \sa setAxisTitle, setAxisTitleColor,setAxisTitleFont, setAxisTitleFontRelSize
+ \sa axisTitle, axisTitleColor, axisTitleFont, axisTitleFontUseRelSize, axisTitleFontRelSize
+ */
+void KDChartParams::setAxisTitleFontUseRelSize( uint n,
+ bool axisTitleFontUseRelSize )
+{
+ bool bDone = false;
+ uint boxID;
+ if( findFirstAxisCustomBoxID( n, boxID ) ){
+ KDChartCustomBox* box = (KDChartCustomBox*)customBox( boxID );
+ if( box ){
+ if ( !axisTitleFontUseRelSize ) {
+ if ( box->fontSize() < 0 )
+ box->setFontSize( -(box->fontSize()), true );
+ } else {
+ if( 0 <= box->fontSize() ) {
+ box->setFontSize( -(box->fontSize()), true );
+ } else
+ box->setFontSize( box->fontSize(), true);
+ }
+ bDone = true;
+ }
+ }
+ if( !bDone )
+ insertDefaultAxisTitleBox( n,
+ false, QString(),
+ false, QColor(),
+ false, QFont(),
+ true, axisTitleFontUseRelSize,
+ false, 0 );
+ emit changed();
+}
+/**
+ Returns whether the fix font size is used for the default axis title text.
+
+ \return whether the fix axis title font size is used.
+ \sa setAxisTitleFontUseRelSize
+ */
+bool KDChartParams::axisTitleFontUseRelSize( uint n ) const
+{
+ uint boxID;
+ if( findFirstAxisCustomBoxID( n, boxID ) ){
+ const KDChartCustomBox* box = customBox( boxID );
+ if( box )
+ return ( 0 > box->fontSize() );
+ }
+ return true;
+}
+
+/**
+ Specifies whether a relative size to be used for the default axis title text instead of the fixed size of the font.
+
+ Calling this function implicitely sets this axis's \c axisTitleFontUseRelSize flag to TRUE.
+
+ \param axisTitleFontRelSize the size to be used, this is interpreted as per mil value of the printable area size.
+ \sa setAxisTitle, setAxisTitleColor,setAxisTitleFont, setAxisTitleFontUseRelSize
+ \sa axisTitle, axisTitleColor, axisTitleFont, axisTitleFontUseRelSize, axisTitleFontRelSize
+ */
+void KDChartParams::setAxisTitleFontRelSize( uint n,
+ int axisTitleFontRelSize )
+{
+ bool bDone = false;
+ uint boxID;
+ if( findFirstAxisCustomBoxID( n, boxID ) ){
+ KDChartCustomBox* box = (KDChartCustomBox*)customBox( boxID );
+ if( box ){
+ box->setFontSize( -axisTitleFontRelSize, true );
+ bDone = true;
+ }
+ }
+ if( !bDone )
+ insertDefaultAxisTitleBox( n,
+ false, QString(),
+ false, QColor(),
+ false, QFont(),
+ true, true,
+ true, axisTitleFontRelSize );
+ emit changed();
+}
+/**
+ Returns the relative size of the default axis title text, should
+ be ignored if \c axisTitleFontUseRelSize returns false.
+
+ \return the axis title's relative font size.
+ \sa setAxisTitleFontRelSize
+ */
+int KDChartParams::axisTitleFontRelSize( uint n ) const
+{
+ uint boxID;
+ if( findFirstAxisCustomBoxID( n, boxID ) ){
+ const KDChartCustomBox* box = customBox( boxID );
+ if( box ){
+ int i = box->fontSize();
+ return (0 > i) ? -i : i;
+ }
+ }
+ return 18;
+}
diff --git a/libkdchart/KDChartParams.h b/libkdchart/KDChartParams.h
new file mode 100644
index 0000000..0667348
--- /dev/null
+++ b/libkdchart/KDChartParams.h
@@ -0,0 +1,2787 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+*/
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTPARAMS_H__
+#define __KDCHARTPARAMS_H__
+
+#include <qapplication.h>
+#include <qfont.h>
+#include <qcolor.h>
+#include <qpen.h>
+#include <qmap.h>
+#include <qdict.h>
+#include <qintdict.h>
+#include <qobject.h>
+#include <qtextstream.h>
+#include <qsimplerichtext.h>
+#include <qdom.h>
+#include <limits.h>
+
+#include <math.h>
+#ifdef Q_WS_WIN
+#define M_PI 3.14159265358979323846
+#endif
+
+#include "KDChartGlobal.h"
+#include "KDChartEnums.h"
+#include "KDChartCustomBox.h"
+#include "KDFrame.h"
+#include "KDChartAxisParams.h"
+#include "KDChartPropertySet.h"
+
+#if COMPAT_QT_VERSION >= 0x030000
+#include <qvaluevector.h>
+#else
+#include <qarray.h>
+#endif
+
+/** \file KDChartParams.h
+ \brief Header for all common chart parameters.
+
+ This file is used to access all chart parameters except of the
+ axis settings which you will find in \c KDChartAxisParams.h
+
+ \see KDChartAxisParams.h
+*/
+
+
+typedef QIntDict<KDChartPropertySet> KDChartPropertySetList;
+
+#define KDCHART_ALL_AXES UINT_MAX-1
+
+// PENDING(blackie) KHZ, please clean up here. I guess this defined can be removed now.
+// Note: The following specification matches the UINT_MAX value used
+// in KDChartAxisParams::KDChartAxisParams() to initialize the
+// axis' _axisIsoRefAxis member.
+// OK, this is a dirty hack but is avoids circular dependency
+// between KDChartParams and KDChartAxisParams
+#define KDCHART_NO_AXIS UINT_MAX
+#define KDCHART_ALL_DATASETS UINT_MAX - 1
+
+#define KDCHART_NO_DATASET UINT_MAX
+#define KDCHART_UNKNOWN_CHART UINT_MAX - 2
+#define KDCHART_ALL_CHARTS UINT_MAX - 1
+#define KDCHART_NO_CHART UINT_MAX
+#define KDCHART_GLOBAL_LINE_STYLE UINT_MAX
+#define KDCHART_AUTO_SIZE INT_MAX
+#define KDCHART_DATA_VALUE_AUTO_DIGITS INT_MAX
+#define KDCHART_SAGITTAL_ROTATION INT_MAX
+#define KDCHART_TANGENTIAL_ROTATION INT_MAX - 1
+#define KDCHART_PROPSET_NORMAL_DATA 0
+#define KDCHART_PROPSET_TRANSPARENT_DATA 1
+#define KDCHART_PROPSET_HORI_LINE 2
+#define KDCHART_PROPSET_VERT_LINE 3
+
+// #define KDCHART_DATA_VALUE_AUTO_COLOR KDChartAutoColor::instance()->color()
+
+// PENDING(blackie) Can we delete this now?
+/* we must keep this wrongly spelled value for backward compatibility reasons */
+#define KDCHART_SAGGITAL_ROTATION INT_MAX
+
+/**
+ Our charts may have up to 4 ordinate axes:
+ 2 left ones and 2 right ones
+ */
+#define KDCHART_CNT_ORDINATES 4
+
+#define KDCHART_MAX_POLAR_DELIMS_AND_LABELS_POS 8
+#define KDCHART_MAX_AXES 12
+
+
+#define KDCHART_DATA_VALUE_AUTO_COLOR (KDChartAutoColor::instance()->color())
+
+class KDCHART_EXPORT KDChartAutoColor {
+public:
+ static const KDChartAutoColor* instance();
+ static void freeInstance();
+ const QColor* color() const
+ {
+ return &mColor;
+ }
+private:
+ KDChartAutoColor();
+ KDChartAutoColor( KDChartAutoColor const& );
+ ~KDChartAutoColor();
+ QColor mColor;
+ static KDChartAutoColor *mInstance;
+};
+
+/*
+// #define KDCHART_DATA_VALUE_AUTO_COLOR KDChartParams_KDChartAutoColor
+*/
+
+
+class KDCHART_EXPORT KDChartParams : public QObject
+{
+
+ Q_OBJECT
+ Q_ENUMS(ChartType)
+ Q_ENUMS(SourceMode)
+ Q_ENUMS(BarChartSubType)
+ Q_ENUMS(LineChartSubType)
+ Q_ENUMS(LineMarkerStyle)
+ Q_ENUMS(AreaChartSubType)
+ Q_ENUMS(AreaLocation)
+ Q_ENUMS(PolarChartSubType)
+ Q_ENUMS(PolarMarkerStyle)
+ Q_ENUMS(HiLoChartSubType)
+ Q_ENUMS(BWChartSubType)
+ Q_ENUMS(BWStatVal)
+ Q_ENUMS(LegendPosition)
+ Q_ENUMS(LegendSource)
+ Q_ENUMS(HdFtPos)
+
+ // Needed for QSA
+ Q_ENUMS( BrushStyle )
+ Q_ENUMS( PenStyle )
+ Q_ENUMS( Orientation )
+
+
+public slots: // PENDING(blackie) merge public slots into one section.
+ void setOptimizeOutputForScreen( bool screenOutput )
+ {
+ _optimizeOutputForScreen = screenOutput;
+ }
+
+
+ bool optimizeOutputForScreen() const
+ {
+ return _optimizeOutputForScreen;
+ }
+
+ void setGlobalLeading( int left, int top, int right, int bottom );
+
+ void setGlobalLeadingLeft( int leading )
+ {
+ _globalLeadingLeft = leading;
+ emit changed();
+ }
+ void setGlobalLeadingTop( int leading )
+ {
+ _globalLeadingTop = leading;
+ emit changed();
+ }
+ void setGlobalLeadingRight( int leading )
+ {
+ _globalLeadingRight = leading;
+ emit changed();
+ }
+ void setGlobalLeadingBottom( int leading )
+ {
+ _globalLeadingBottom = leading;
+ emit changed();
+ }
+ int globalLeadingLeft() const
+ {
+ return _globalLeadingLeft;
+ }
+ int globalLeadingTop() const
+ {
+ return _globalLeadingTop;
+ }
+ int globalLeadingRight() const
+ {
+ return _globalLeadingRight;
+ }
+ int globalLeadingBottom() const
+ {
+ return _globalLeadingBottom;
+ }
+
+ int registerProperties( KDChartPropertySet& rSet );
+ void setProperties( int id, KDChartPropertySet& rSet );
+ bool removeProperties( int id );
+ bool properties( int id, KDChartPropertySet& rSet ) const;
+ KDChartPropertySet* properties( int id );
+ bool calculateProperties( int startId, KDChartPropertySet& rSet ) const;
+
+public:
+
+// MOC_SKIP_BEGIN
+ class KDCHART_EXPORT KDChartFrameSettings
+ {
+ // Q_OBJECT
+ public:
+ KDChartFrameSettings();
+ KDChartFrameSettings( uint dataRow,
+ uint dataCol,
+ uint data3rd,
+ const KDFrame& frame,
+ int outerGapX,
+ int outerGapY,
+ int innerGapX,
+ int innerGapY,
+ bool addFrameWidthToLayout = true,
+ bool addFrameHeightToLayout = true );
+
+ // public slots:
+ uint dataRow() const
+ {
+ return _dataRow;
+ }
+ uint dataCol() const
+ {
+ return _dataCol;
+ }
+ uint data3rd() const
+ {
+ return _data3rd;
+ }
+
+ void setDataRow( uint dataRow )
+ {
+ _dataRow = dataRow;
+ }
+ void setDataCol( uint dataCol )
+ {
+ _dataCol = dataCol;
+ }
+ void setData3rd( uint data3rd )
+ {
+ _data3rd = data3rd;
+ }
+
+
+ void resetFrame()
+ {
+ if( _frame )
+ delete _frame;
+ _frame = new KDFrame();
+ }
+
+
+ const KDFrame* framePtr() const
+ {
+ return _frame;
+ }
+
+
+ const KDFrame& frame() const
+ {
+ return *_frame;
+ }
+
+
+ int innerGapX() const
+ {
+ return _innerGapX;
+ }
+
+
+ int innerGapY() const
+ {
+ return _innerGapY;
+ }
+
+
+ int outerGapX() const
+ {
+ return _outerGapX;
+ }
+
+
+ int outerGapY() const
+ {
+ return _outerGapY;
+ }
+
+
+ bool addFrameWidthToLayout() const
+ {
+ return _addFrameWidthToLayout;
+ }
+
+
+ bool addFrameHeightToLayout() const
+ {
+ return _addFrameHeightToLayout;
+ }
+
+ // public:
+ virtual ~KDChartFrameSettings();
+
+
+ static void createFrameSettingsNode( QDomDocument& document,
+ QDomNode& parent,
+ const QString& elementName,
+ const KDChartFrameSettings* settings,
+ uint areaId );
+
+ static bool readFrameSettingsNode( const QDomElement& element,
+ KDChartFrameSettings& settings,
+ uint& areaId );
+
+
+ static void deepCopy( KDChartFrameSettings& D, const KDChartFrameSettings& R ) {
+ D._dataRow = R._dataRow;
+ D._dataCol = R._dataCol;
+ D._data3rd = R._data3rd;
+
+ delete D._frame;
+ if( R._frame ){
+ D._frame = new KDFrame();
+ KDFrame::deepCopy(*D._frame, *R._frame);
+ }else{
+ D._frame = 0;
+ }
+
+ D._outerGapX = R._outerGapX;
+ D._outerGapY = R._outerGapY;
+ D._innerGapX = R._innerGapX;
+ D._innerGapY = R._innerGapY;
+ D._addFrameWidthToLayout = R._addFrameWidthToLayout;
+ D._addFrameHeightToLayout = R._addFrameHeightToLayout;
+ }
+
+ private:
+ // KDChartFrameSettings( const KDChartFrameSettings& other ) :QObject( 0 ) {
+ KDChartFrameSettings( const KDChartFrameSettings& ) {}
+ KDChartFrameSettings& operator=( const KDChartFrameSettings& ){return *this;}
+
+
+ private:
+ uint _dataRow;
+ uint _dataCol;
+ uint _data3rd;
+ KDFrame* _frame;
+ int _outerGapX;
+ int _outerGapY;
+ int _innerGapX;
+ int _innerGapY;
+ bool _addFrameWidthToLayout;
+ bool _addFrameHeightToLayout;
+ };
+
+// MOC_SKIP_END
+
+public slots:
+
+ void setFrame( uint area,
+ const KDFrame& frame,
+ int outerGapX,
+ int outerGapY,
+ int innerGapX,
+ int innerGapY,
+ bool addFrameWidthToLayout = true,
+ bool addFrameHeightToLayout = true )
+ {
+ _areaDict.setAutoDelete( TRUE );
+ _areaDict.replace( QString( "%1/-----/-----/-----" ).arg( area, 5 ),
+ new KDChartFrameSettings(0,0,0,
+ frame,
+ outerGapX,
+ outerGapY,
+ innerGapX,
+ innerGapY,
+ addFrameWidthToLayout,
+ addFrameHeightToLayout ) );
+ emit changed();
+ }
+
+
+ // Note if you change the parameters here, then you must also change them in wrappers/KDChartParametersWrapper.h
+ void setSimpleFrame( uint area,
+ int outerGapX = 0,
+ int outerGapY = 0,
+ int innerGapX = 0,
+ int innerGapY = 0,
+ bool addFrameWidthToLayout = true,
+ bool addFrameHeightToLayout = true,
+ KDFrame::SimpleFrame simpleFrame = KDFrame::FrameFlat,
+ int lineWidth = 1,
+ int midLineWidth = 0,
+ QPen pen = QPen(),
+ QBrush background = QBrush( Qt::NoBrush ),
+ const QPixmap* backPixmap = 0, // no pixmap
+ KDFrame::BackPixmapMode backPixmapMode = KDFrame::PixStretched,
+ int shadowWidth = 0,
+ KDFrame::CornerName sunPos = KDFrame::CornerTopLeft )
+ {
+ _areaDict.setAutoDelete( TRUE );
+ KDFrame frame( QRect(0,0,0,0),
+ simpleFrame,
+ lineWidth,
+ midLineWidth,
+ pen,
+ background,
+ backPixmap,
+ backPixmapMode,
+ shadowWidth,
+ sunPos );
+
+ _areaDict.replace( QString( "%1/-----/-----/-----" ).arg( area, 5 ),
+ new KDChartFrameSettings( 0,0,0, frame,
+ outerGapX,
+ outerGapY,
+ innerGapX,
+ innerGapY,
+ addFrameWidthToLayout,
+ addFrameHeightToLayout ) );
+ emit changed();
+ }
+
+ bool removeFrame( uint area );
+
+
+ // Note if you change the parameters here, then you must also change them in wrappers/KDChartParametersWrapper.h
+ void setDataRegionFrame( uint dataRow,
+ uint dataCol,
+ uint, // important: we ignore the data3rd parameter for now!
+ int innerGapX = 0,
+ int innerGapY = 0,
+ bool addFrameWidthToLayout = true,
+ bool addFrameHeightToLayout = true,
+ KDFrame::SimpleFrame simpleFrame = KDFrame::FrameFlat,
+ int lineWidth = 1,
+ int midLineWidth = 0,
+ QPen pen = QPen(),
+ int shadowWidth = 0,
+ KDFrame::CornerName sunPos = KDFrame::CornerTopLeft )
+ {
+ _areaDict.setAutoDelete( TRUE );
+ KDFrame frame( QRect(0,0,0,0),
+ simpleFrame,
+ lineWidth,
+ midLineWidth,
+ pen,
+ QBrush( Qt::NoBrush ),
+ 0,
+ KDFrame::PixStretched,
+ shadowWidth,
+ sunPos );
+
+ _areaDict.replace(
+ dataRegionFrameAreaName( dataRow, dataCol, 0 ), //data3rd 5 ),
+ new KDChartFrameSettings( dataRow,
+ dataCol,
+ 0, // important: we ignore the data3rd parameter for now!
+ frame,
+ 0,
+ 0,
+ innerGapX,
+ innerGapY,
+ addFrameWidthToLayout,
+ addFrameHeightToLayout ) );
+ emit changed();
+ }
+
+
+ // Note if you change the parameters here, then you must also change them in wrappers/KDChartParametersWrapper.h
+ bool moveDataRegionFrame( uint oldDataRow,
+ uint oldDataCol,
+ uint, // important: we ignore the data3rd parameter for now!
+ uint newDataRow,
+ uint newDataCol,
+ uint // important: we ignore the data3rd parameter for now!
+ );
+
+
+ const KDChartFrameSettings* frameSettings( uint area,
+ bool& bFound,
+ int* pIterIdx=0 ) const;
+
+ const KDChartFrameSettings* nextFrameSettings( bool& bFound,
+ int* pIterIdx ) const;
+
+
+public:
+ typedef QIntDict <KDChartCustomBox > CustomBoxDict;
+
+public slots:
+ uint insertCustomBox( const KDChartCustomBox & box );
+ bool removeCustomBox( const uint & idx );
+
+ void removeAllCustomBoxes()
+ {
+ emit changed();
+ _customBoxDict.setAutoDelete( true );
+ _customBoxDict.clear();
+ }
+
+ KDChartCustomBox* customBoxRef( uint box );
+ const KDChartCustomBox* customBox( uint box ) const;
+ uint maxCustomBoxIdx() const;
+
+
+public:
+ enum ChartType { NoType, Bar, Line, Area, Pie, HiLo, Ring, Polar, BoxWhisker };
+
+public slots:
+ void setChartType( ChartType chartType );
+ ChartType chartType() const
+ {
+ return _chartType;
+ }
+
+
+ static QString chartTypeToString( ChartType type );
+ static ChartType stringToChartType( const QString& string );
+
+ void setAdditionalChartType( ChartType chartType );
+ ChartType additionalChartType() const
+ {
+ return _additionalChartType;
+ }
+public:
+
+ enum SourceMode {
+ UnknownMode = 0,
+ DontUse = 1,
+ DataEntry = 2,
+ AxisLabel = 3,
+ LegendText = 4,
+ ExtraLinesAnchor = 5,
+ Last_SourceMode = ExtraLinesAnchor };
+
+public slots:
+ void setChartSourceMode( SourceMode mode,
+ uint dataset,
+ uint dataset2 = KDCHART_NO_DATASET,
+ uint chart = 0 );
+
+ static QString chartSourceModeToString( const SourceMode& mode );
+ static SourceMode stringToChartSourceMode( const QString& string );
+
+
+ bool neverUsedSetChartSourceMode() const
+ {
+ return !_setChartSourceModeWasUsed;
+ }
+
+ SourceMode chartSourceMode( uint dataset,
+ uint dataset2 = KDCHART_NO_DATASET,
+ uint* chart = 0 ) const;
+
+ bool findDataset( SourceMode mode,
+ uint& dataset,
+ uint& dataset2,
+ uint chart = 0 ) const;
+
+ bool findDatasets( SourceMode mode1,
+ SourceMode mode2,
+ uint& dataset,
+ uint& dataset2,
+ uint chart = 0 ) const;
+
+ uint maxDatasetSourceMode() const
+ {
+ return _maxDatasetSourceMode;
+ }
+
+
+ void setDefaultAxesTypes();
+ void activateDefaultAxes();
+
+
+ void setNumValues( uint numValues )
+ {
+ _numValues = numValues;
+ emit changed();
+ }
+
+
+ int numValues() const
+ {
+ return _numValues;
+ }
+
+
+ void calculateShadowColors( QColor color,
+ QColor& shadow1,
+ QColor& shadow2 ) const;
+
+ void setDataColor( uint dataset, QColor color );
+ QColor dataColor( uint dataset ) const;
+
+ void setDataDefaultColors();
+ void setDataRainbowColors();
+ void setDataSubduedColors( bool ordered = false );
+
+
+ void setShadowBrightnessFactor( double factor )
+ {
+ _shadowBrightnessFactor = factor;
+ recomputeShadowColors();
+ emit changed();
+ }
+
+ double shadowBrightnessFactor() const
+ {
+ return _shadowBrightnessFactor;
+ }
+
+
+ void setShadowPattern( BrushStyle style ) {
+ _shadowPattern = style;
+ emit changed();
+ }
+
+ Qt::BrushStyle shadowPattern() const {
+ return _shadowPattern;
+ }
+
+
+ void setOutlineDataColor( QColor color )
+ {
+ _outlineDataColor = color;
+ emit changed();
+ }
+
+
+ QColor outlineDataColor() const
+ {
+ return _outlineDataColor;
+ }
+
+
+ void setOutlineDataLineWidth( uint width )
+ {
+ _outlineDataLineWidth = width;
+ emit changed();
+ }
+
+ uint outlineDataLineWidth() const
+ {
+ return _outlineDataLineWidth;
+ }
+
+
+ void setOutlineDataLineStyle( PenStyle style )
+ {
+ _outlineDataLineStyle = style;
+ emit changed();
+ }
+
+ PenStyle outlineDataLineStyle() const
+ {
+ return _outlineDataLineStyle;
+ }
+
+
+ uint maxDataColor() const
+ {
+ return _maxDatasetColor;
+ }
+
+
+ void setThreeDShadowColors( bool shadow )
+ {
+ _threeDShadowColors = shadow;
+ emit changed();
+ }
+
+
+ bool threeDShadowColors() const
+ {
+ return _threeDShadowColors;
+ }
+
+
+ static int roundVal( double d )
+ {
+ double fr;
+ double i=0.0; // initialization necessary for Borland C++
+ fr = modf( d, &i );
+ int ret = static_cast < int > ( i );
+ if( 0.49999 <= fabs( fr ) )
+ ret += ( 0.0 < d ) ? 1 : -1;
+ return ret;
+ }
+
+ // Note if you change the parameters here, then you must also change them in wrappers/KDChartParametersWrapper.h
+ void setPrintDataValues( bool active,
+ uint chart = KDCHART_ALL_CHARTS,
+ int divPow10 = 0,
+ int digitsBehindComma = KDCHART_DATA_VALUE_AUTO_DIGITS,
+ QFont* font = 0,
+ uint size = UINT_MAX, // <-- makes us use the *default* font params
+ // by IGNORING settings of
+ // the following parameters!
+ const QColor* color = KDCHART_DATA_VALUE_AUTO_COLOR,
+ KDChartEnums::PositionFlag negativePosition = KDChartEnums::PosCenter,
+ uint negativeAlign = Qt::AlignCenter,
+ int negativeDeltaX = 0,
+ int negativeDeltaY = 0,
+ int negativeRotation = 0,
+ KDChartEnums::PositionFlag positivePosition = KDChartEnums::PosCenter,
+ uint positiveAlign = Qt::AlignCenter,
+ int positiveDeltaX = 0,
+ int positiveDeltaY = 0,
+ int positiveRotation = 0,
+ KDChartEnums::TextLayoutPolicy policy = KDChartEnums::LayoutPolicyRotate );
+
+ void setDataValuesCalc( int divPow10 = 0,
+ int digitsBehindComma = KDCHART_DATA_VALUE_AUTO_DIGITS,
+ uint chart = KDCHART_ALL_CHARTS );
+ void setDataValuesFont( QFont* font,
+ uint size = UINT_MAX,
+ uint chart = KDCHART_ALL_CHARTS );
+
+ // Note if you change the parameters here, then you must also change them in wrappers/KDChartParametersWrapper.h
+ void setDataValuesPlacing( KDChartEnums::PositionFlag position,
+ uint align,
+ int deltaX,
+ int deltaY,
+ int rotation,
+ bool specifyingPositiveValues = true,
+ uint chart = KDCHART_ALL_CHARTS );
+
+ void setDataValuesColors( const QColor* color = KDCHART_DATA_VALUE_AUTO_COLOR,
+ const QBrush& background = Qt::NoBrush,
+ uint chart = KDCHART_ALL_CHARTS );
+
+ // Note if you change the parameters here, then you must also change them in wrappers/KDChartParametersWrapper.h
+ void setDataValuesPolicy( KDChartEnums::TextLayoutPolicy policy = KDChartEnums::LayoutPolicyRotate,
+ uint chart = KDCHART_ALL_CHARTS );
+
+ void setDataValuesShowInfinite( bool dataValuesShowInfinite = true,
+ uint chart = KDCHART_ALL_CHARTS );
+
+ void setPrintDataValuesWithDefaultFontParams( uint chart = KDCHART_ALL_CHARTS,
+ bool callSetPrintDataValues = true );
+
+ void setAllowOverlappingDataValueTexts( bool allow )
+ {
+ _allowOverlappingDataValueTexts = allow;
+ }
+
+
+ bool allowOverlappingDataValueTexts() const
+ {
+ return _allowOverlappingDataValueTexts;
+ }
+
+ bool printDataValuesWithDefaultFontParams( uint chart ) const
+ {
+ return chart ? _printDataValuesSettings2._useDefaultFontParams
+ : _printDataValuesSettings._useDefaultFontParams;
+ }
+
+ bool printDataValues( uint chart ) const
+ {
+ return chart ? _printDataValuesSettings2._printDataValues
+ : _printDataValuesSettings._printDataValues;
+ }
+
+
+ int dataValuesDivPow10( uint chart ) const
+ {
+ return chart ? _printDataValuesSettings2._divPow10
+ : _printDataValuesSettings._divPow10;
+ }
+
+
+ int dataValuesDigitsBehindComma( uint chart ) const
+ {
+ return chart ? _printDataValuesSettings2._digitsBehindComma
+ : _printDataValuesSettings._digitsBehindComma;
+ }
+
+
+ QFont dataValuesFont( uint chart ) const
+ {
+ return chart ? _printDataValuesSettings2._dataValuesFont
+ : _printDataValuesSettings._dataValuesFont;
+ }
+
+
+ bool dataValuesUseFontRelSize( uint chart ) const
+ {
+ return chart ? _printDataValuesSettings2._dataValuesUseFontRelSize
+ : _printDataValuesSettings._dataValuesUseFontRelSize;
+ }
+
+
+ int dataValuesFontRelSize( uint chart ) const
+ {
+ return chart ? _printDataValuesSettings2._dataValuesFontRelSize
+ : _printDataValuesSettings._dataValuesFontRelSize;
+ }
+
+
+ QColor dataValuesColor( uint chart ) const
+ {
+ return chart ? _printDataValuesSettings2._dataValuesColor
+ : _printDataValuesSettings._dataValuesColor;
+ }
+
+
+ QBrush dataValuesBackground( uint chart ) const
+ {
+ return chart ? _printDataValuesSettings2._dataValuesBrush
+ : _printDataValuesSettings._dataValuesBrush;
+ }
+
+
+ bool dataValuesAutoColor( uint chart ) const
+ {
+ return chart ? _printDataValuesSettings2._dataValuesAutoColor
+ : _printDataValuesSettings._dataValuesAutoColor;
+ }
+
+
+ KDChartEnums::PositionFlag dataValuesAnchorPosition( uint chart,
+ bool negative ) const;
+ uint dataValuesAnchorAlign( uint chart, bool negative ) const;
+ int dataValuesAnchorDeltaX( uint chart, bool negative ) const;
+ int dataValuesAnchorDeltaY( uint chart, bool negative ) const;
+ int dataValuesRotation( uint chart, bool negative ) const;
+
+ KDChartEnums::TextLayoutPolicy dataValuesLayoutPolicy( uint chart ) const
+ {
+ return chart ? _printDataValuesSettings2._dataValuesLayoutPolicy
+ : _printDataValuesSettings._dataValuesLayoutPolicy;
+ }
+
+
+ bool dataValuesShowInfinite( uint chart ) const
+ {
+ return chart ? _printDataValuesSettings2._dataValuesShowInfinite
+ : _printDataValuesSettings._dataValuesShowInfinite;
+ }
+
+
+ // for backward compatibility we may NOT remove these functions:
+ void setPrintDataValuesColor( uint chart = KDCHART_ALL_CHARTS,
+ const QColor* color = KDCHART_DATA_VALUE_AUTO_COLOR );
+ void setPrintDataValuesFontRelSize( uint chart, uint size );
+
+
+ static QString markerStyleToString( int style );
+ static QString markerStyleToStringTr( int style );
+ static int stringToMarkerStyle( const QString& string );
+ static int stringToMarkerStyleTr( const QString& string );
+
+ // END GENERAL
+
+
+public:
+
+ // BAR CHART-SPECIFIC
+ enum BarChartSubType { BarNormal, BarStacked, BarPercent, BarMultiRows };
+
+public slots:
+ void setBarChartSubType( BarChartSubType barChartSubType )
+ {
+ _barChartSubType = barChartSubType;
+ emit changed();
+ }
+
+ BarChartSubType barChartSubType() const
+ {
+ return _barChartSubType;
+ }
+
+
+
+
+
+ static QString barChartSubTypeToString( BarChartSubType type );
+ static BarChartSubType stringToBarChartSubType( const QString& string );
+
+
+ void setThreeDBars( bool threeDBars )
+ {
+ _threeDBars = threeDBars;
+ emit changed();
+ }
+
+ bool threeDBars() const
+ {
+ return _threeDBars;
+ }
+
+
+ void setThreeDBarsShadowColors( bool shadow )
+ {
+ _threeDShadowColors = shadow;
+ emit changed();
+ }
+
+
+ bool threeDBarsShadowColors() const
+ {
+ return _threeDShadowColors;
+ }
+
+
+ QColor dataShadow1Color( uint dataset ) const;
+ QColor dataShadow2Color( uint dataset ) const;
+
+
+ void setThreeDBarAngle( uint angle );
+ uint threeDBarAngle() const
+ {
+ return _threeDBarAngle;
+ }
+
+
+ double cosThreeDBarAngle() const
+ {
+ return _cosThreeDBarAngle;
+ }
+
+
+ void setThreeDBarDepth( double depth )
+ {
+ _threeDBarDepth = depth;
+ emit changed();
+ }
+
+
+ double threeDBarDepth() const
+ {
+ return _threeDBarDepth;
+ }
+
+
+ void setDatasetGap( int gap )
+ {
+ _datasetGap = gap;
+ emit changed();
+ }
+
+ int datasetGap() const
+ {
+ return _datasetGap;
+ }
+
+
+ void setDatasetGapIsRelative( bool gapIsRelative )
+ {
+ _datasetGapIsRelative = gapIsRelative;
+ emit changed();
+ }
+
+ bool datasetGapIsRelative() const
+ {
+ return _datasetGapIsRelative;
+ }
+
+
+ void setValueBlockGap( int gap )
+ {
+ _valueBlockGap = gap;
+ emit changed();
+ }
+
+ int valueBlockGap() const
+ {
+ return _valueBlockGap;
+ }
+
+
+ void setValueBlockGapIsRelative( bool gapIsRelative )
+ {
+ _valueBlockGapIsRelative = gapIsRelative;
+ emit changed();
+ }
+
+ bool valueBlockGapIsRelative() const
+ {
+ return _valueBlockGapIsRelative;
+ }
+
+
+ void setBarWidth( int width = KDCHART_AUTO_SIZE )
+ {
+ if ( width == KDCHART_AUTO_SIZE ) {
+ _barWidth = width;
+ _userWidth = 0;
+ }
+ else
+ _userWidth = width;
+
+ emit changed();
+ }
+
+
+ int barWidth() const
+ {
+ return _barWidth;
+ }
+
+ int userWidth() const
+ {
+ return _userWidth;
+ }
+
+ int numBarsDisplayed() const
+ {
+ return _barsDisplayed;
+ }
+
+ int numBarsLeft() const
+ {
+ return _barsLeft;
+ }
+
+ void setDrawSolidExcessArrows( bool solidArrows ) {
+ _solidExcessArrows = solidArrows;
+ emit changed();
+ }
+
+ bool drawSolidExcessArrows() const
+ {
+ return _solidExcessArrows;
+ }
+
+ // END BAR CHART-SPECIFIC
+
+public:
+ // LINE/AREA CHART-SPECIFIC
+ enum LineChartSubType { LineNormal, LineStacked, LinePercent };
+
+public slots:
+ void setLineChartSubType( LineChartSubType lineChartSubType )
+ {
+ _lineChartSubType = lineChartSubType;
+ emit changed();
+ }
+
+ LineChartSubType lineChartSubType() const
+ {
+ return _lineChartSubType;
+ }
+
+
+ static LineChartSubType stringToLineChartSubType( const QString& string );
+ static QString lineChartSubTypeToString( LineChartSubType type );
+
+
+ void setLineMarker( bool marker )
+ {
+ _lineMarker = marker;
+ emit changed();
+ }
+
+ bool lineMarker() const
+ {
+ return _lineMarker;
+ }
+
+public:
+ enum LineMarkerStyle { LineMarkerCircle = 0,
+ LineMarkerSquare = 1,
+ LineMarkerDiamond = 2,
+ LineMarker1Pixel = 3,
+ LineMarker4Pixels = 4,
+ LineMarkerRing = 5,
+ LineMarkerCross = 6,
+ LineMarkerFastCross = 7 };
+
+ // PENDING(blackie) Add a wrapper for this
+ typedef QMap<uint,LineMarkerStyle> LineMarkerStyleMap;
+public slots:
+
+ void setLineMarkerStyle( uint dataset, LineMarkerStyle style );
+ void setLineMarkerStyles( LineMarkerStyleMap map );
+ LineMarkerStyle lineMarkerStyle( uint dataset ) const;
+
+ static QString lineMarkerStyleToString( LineMarkerStyle style );
+ static QString lineMarkerStyleToStringTr( LineMarkerStyle style );
+ static LineMarkerStyle stringToLineMarkerStyle( const QString& string );
+ static LineMarkerStyle stringToLineMarkerStyleTr( const QString& string );
+
+ LineMarkerStyleMap lineMarkerStyles() const {
+ return _lineMarkerStyles;
+ }
+
+
+ uint maxDatasetLineMarkerStyle() const
+ {
+ return _maxDatasetLineMarkerStyle;
+ }
+
+
+ void setLineMarkerSize( QSize size )
+ {
+ _lineMarkerSize = size;
+ emit changed();
+ }
+
+ QSize lineMarkerSize() const
+ {
+ return _lineMarkerSize;
+ }
+
+ void setLineWidth( int width )
+ {
+ _lineWidth = width;
+ emit changed();
+ }
+
+ int lineWidth() const
+ {
+ return _lineWidth;
+ }
+
+
+ void setLineColor( QColor color = QColor() )
+ {
+ _lineColor = color;
+ emit changed();
+ }
+
+ QColor lineColor() const
+ {
+ return _lineColor;
+ }
+
+ void setLineStyle( PenStyle style, uint dataset=KDCHART_GLOBAL_LINE_STYLE );
+
+ PenStyle lineStyle( uint dataset=KDCHART_GLOBAL_LINE_STYLE ) const;
+
+
+ void setThreeDLines( bool threeD ) {
+ _threeDLines = threeD;
+ emit changed();
+ }
+
+
+ bool threeDLines() const {
+ return _threeDLines;
+ }
+
+
+ void setThreeDLineDepth( int depth ) {
+ _threeDLineDepth = depth;
+ emit changed();
+ }
+
+
+ int threeDLineDepth() const {
+ return _threeDLineDepth;
+ }
+
+
+ // NOTE: documentation of this function is temporary disabled.
+ // Feature is currently not supported, will be implemented
+ // by future versions of KDChart
+ void setThreeDLineXRotation( int degrees ) {
+ _threeDLineXRotation = degrees;
+ emit changed();
+ }
+
+
+ // NOTE: documentation of this function is temporary disabled.
+ // Feature is currently not supported, will be implemented
+ // by future versions of KDChart
+ int threeDLineXRotation() const {
+ return _threeDLineXRotation;
+ }
+
+
+ // NOTE: documentation of this function is temporary disabled.
+ // Feature is currently not supported, will be implemented
+ // by future versions of KDChart
+ void setThreeDLineYRotation( int degrees ) {
+ _threeDLineYRotation = degrees;
+ emit changed();
+ }
+
+
+ // NOTE: documentation of this function is temporary disabled.
+ // Feature is currently not supported, will be implemented
+ // by future versions of KDChart
+ int threeDLineYRotation() const {
+ return _threeDLineYRotation;
+ }
+
+public:
+ enum AreaChartSubType { AreaNormal, AreaStacked, AreaPercent };
+
+public slots:
+ void setAreaChartSubType( AreaChartSubType areaChartSubType )
+ {
+ _areaChartSubType = areaChartSubType;
+ // activate default data value text settings for this chart type
+ if( printDataValues( 0 )
+ && printDataValuesWithDefaultFontParams( 0 ) )
+ setPrintDataValues( true, 0 );
+ emit changed();
+ }
+
+
+ AreaChartSubType areaChartSubType() const
+ {
+ return _areaChartSubType;
+ }
+
+
+ static QString areaChartSubTypeToString( AreaChartSubType type );
+ static AreaChartSubType stringToAreaChartSubType( const QString& string );
+
+public:
+ enum AreaLocation { AreaAbove, AreaBelow };
+public slots:
+
+ void setAreaLocation( AreaLocation location )
+ {
+ _areaLocation = location;
+ emit changed();
+ }
+
+ AreaLocation areaLocation() const
+ {
+ return _areaLocation;
+ }
+
+
+ static QString areaLocationToString( AreaLocation type );
+ static AreaLocation stringToAreaLocation( const QString& string );
+
+ // END LINE/AREA CHART-SPECIFIC
+
+public:
+ // POLAR CHART-SPECIFIC
+ enum PolarChartSubType { PolarNormal, PolarStacked, PolarPercent };
+
+public slots:
+ void setPolarChartSubType( PolarChartSubType polarChartSubType )
+ {
+ _polarChartSubType = polarChartSubType;
+ emit changed();
+ }
+
+ PolarChartSubType polarChartSubType() const
+ {
+ return _polarChartSubType;
+ }
+
+
+ static PolarChartSubType stringToPolarChartSubType( const QString& string );
+ static QString polarChartSubTypeToString( PolarChartSubType type );
+
+ void setPolarMarker( bool marker )
+ {
+ _polarMarker = marker;
+ emit changed();
+ }
+
+ bool polarMarker() const
+ {
+ return _polarMarker;
+ }
+
+public:
+ enum PolarMarkerStyle { PolarMarkerCircle = 0,
+ PolarMarkerSquare = 1,
+ PolarMarkerDiamond = 2,
+ PolarMarker1Pixel = 3,
+ PolarMarker4Pixels = 4,
+ PolarMarkerRing = 5,
+ PolarMarkerCross = 6 };
+
+public slots:
+ void setPolarMarkerStyle( uint dataset, PolarMarkerStyle style );
+ PolarMarkerStyle polarMarkerStyle( uint dataset ) const;
+ static QString polarMarkerStyleToString( PolarMarkerStyle style );
+ static QString polarMarkerStyleToStringTr( PolarMarkerStyle style );
+ static PolarMarkerStyle stringToPolarMarkerStyle( const QString& string );
+ static PolarMarkerStyle stringToPolarMarkerStyleTr( const QString& string );
+
+public:
+ typedef QMap<uint,PolarMarkerStyle> PolarMarkerStyleMap;
+
+public slots:
+ void setPolarMarkerStyles( PolarMarkerStyleMap map );
+
+ PolarMarkerStyleMap polarMarkerStyles() const {
+ return _polarMarkerStyles;
+ }
+
+ uint maxDatasetPolarMarkerStyle() const
+ {
+ return _maxDatasetPolarMarkerStyle;
+ }
+
+ void setPolarMarkerSize( QSize size = QSize( -40, -40 ) )
+ {
+ _polarMarkerSize = size;
+ emit changed();
+ }
+
+ QSize polarMarkerSize() const
+ {
+ return _polarMarkerSize;
+ }
+
+ void setPolarLineWidth( int width = -3 )
+ {
+ _polarLineWidth = width;
+ emit changed();
+ }
+
+ int polarLineWidth() const
+ {
+ return _polarLineWidth;
+ }
+
+
+ void setPolarZeroDegreePos( int degrees )
+ {
+ _polarZeroDegreePos = degrees;
+ }
+
+ int polarZeroDegreePos() const
+ {
+ return _polarZeroDegreePos;
+ }
+
+
+ void setPolarRotateCircularLabels( bool rotateCircularLabels )
+ {
+ _polarRotateCircularLabels = rotateCircularLabels;
+ }
+
+ bool polarRotateCircularLabels() const
+ {
+ return _polarRotateCircularLabels;
+ }
+
+
+ // Note if you change the parameters here, then you must also change them in wrappers/KDChartParametersWrapper.h
+ void setPolarDelimsAndLabelsAtPos( KDChartEnums::PositionFlag pos,
+ bool showDelimiters,
+ bool showLabels );
+
+ // Note if you change the parameters here, then you must also change them in wrappers/KDChartParametersWrapper.h
+ bool polarDelimAtPos( KDChartEnums::PositionFlag pos ) const;
+
+ // Note if you change the parameters here, then you must also change them in wrappers/KDChartParametersWrapper.h
+ bool polarLabelsAtPos( KDChartEnums::PositionFlag pos ) const;
+
+ // END POLAR CHART-SPECIFIC
+
+
+ // PIE/RING CHART-SPECIFIC
+
+ void setExplode( bool explode )
+ {
+ _explode = explode;
+ emit changed();
+ }
+
+ bool explode() const
+ {
+ return _explode;
+ }
+
+
+ void setExplodeValues( QValueList<int> explodeList ) {
+ _explodeList = explodeList;
+ emit changed();
+ }
+
+
+ // Unfortunately this is not avaialble from QSA-
+ QValueList<int> explodeValues() const {
+ return _explodeList;
+ }
+
+public:
+ typedef QMap<int,double> ExplodeFactorsMap;
+
+public slots:
+ void setExplodeFactors( ExplodeFactorsMap factors ) {
+ _explodeFactors = factors;
+ emit changed();
+ }
+
+
+ ExplodeFactorsMap explodeFactors() const {
+ return _explodeFactors;
+ }
+
+
+ void setExplodeFactor( double factor )
+ {
+ _explodeFactor = factor;
+ emit changed();
+ }
+
+ double explodeFactor() const
+ {
+ return _explodeFactor;
+ }
+
+
+ void setThreeDPies( bool threeDPies )
+ {
+ _threeDPies = threeDPies;
+ emit changed();
+ }
+
+ bool threeDPies() const
+ {
+ return _threeDPies;
+ }
+
+
+ void setThreeDPieHeight( int pixels )
+ {
+ _threeDPieHeight = pixels;
+ emit changed();
+ }
+
+ int threeDPieHeight() const
+ {
+ return _threeDPieHeight;
+ }
+
+ void setPieStart( int degrees )
+ {
+ while ( degrees < 0 )
+ degrees += 360;
+ while ( degrees >= 360 )
+ degrees -= 360;
+ _pieStart = degrees;
+
+ emit changed();
+ }
+
+
+ int pieStart() const
+ {
+ return _pieStart;
+ }
+
+ void setRingStart( int degrees )
+ {
+ while ( degrees < 0 )
+ degrees += 360;
+ while ( degrees >= 360 )
+ degrees -= 360;
+ _ringStart = degrees;
+
+ emit changed();
+ }
+
+
+ int ringStart() const
+ {
+ return _ringStart;
+ }
+
+ void setRelativeRingThickness( bool relativeThickness ) {
+ _relativeRingThickness = relativeThickness;
+
+ emit changed();
+ }
+
+
+ bool relativeRingThickness() const {
+ return _relativeRingThickness;
+ }
+
+ // END PIE/RING CHART-SPECIFIC
+
+public:
+ // HI/LO CHART-SPECIFIC
+ enum HiLoChartSubType { HiLoNormal, HiLoSimple = HiLoNormal,
+ HiLoClose, HiLoOpenClose };
+
+public slots:
+ void setHiLoChartSubType( HiLoChartSubType hiLoChartSubType )
+ {
+ _hiLoChartSubType = hiLoChartSubType;
+ emit changed();
+ }
+
+ HiLoChartSubType hiLoChartSubType() const
+ {
+ return _hiLoChartSubType;
+ }
+
+ static QString hiLoChartSubTypeToString( HiLoChartSubType type );
+ static HiLoChartSubType stringToHiLoChartSubType( const QString& string );
+ void setHiLoChartPrintLowValues( bool active,
+ QFont* font = 0,
+ int size = 14,
+ QColor* color = 0 );
+
+ bool hiLoChartPrintLowValues() const
+ {
+ return _hiLoChartPrintLowValues;
+ }
+
+
+ QFont hiLoChartLowValuesFont() const
+ {
+ return _hiLoChartLowValuesFont;
+ }
+
+
+ bool hiLoChartLowValuesUseFontRelSize() const
+ {
+ return _hiLoChartLowValuesUseFontRelSize;
+ }
+
+
+ int hiLoChartLowValuesFontRelSize() const
+ {
+ return _hiLoChartLowValuesFontRelSize;
+ }
+
+
+ QColor hiLoChartLowValuesColor() const
+ {
+ return _hiLoChartLowValuesColor;
+ }
+
+ void setHiLoChartPrintHighValues( bool active,
+ QFont* font = 0,
+ int size = 14,
+ QColor* color = 0 );
+
+
+ bool hiLoChartPrintHighValues() const
+ {
+ return _hiLoChartPrintHighValues;
+ }
+
+
+ QFont hiLoChartHighValuesFont() const
+ {
+ return _hiLoChartHighValuesFont;
+ }
+
+
+ bool hiLoChartHighValuesUseFontRelSize() const
+ {
+ return _hiLoChartHighValuesUseFontRelSize;
+ }
+
+
+ int hiLoChartHighValuesFontRelSize() const
+ {
+ return _hiLoChartHighValuesFontRelSize;
+ }
+
+
+ QColor hiLoChartHighValuesColor() const
+ {
+ return _hiLoChartHighValuesColor;
+ }
+
+ void setHiLoChartPrintOpenValues( bool active,
+ QFont* font = 0,
+ uint size = 14,
+ QColor* color = 0 );
+
+ bool hiLoChartPrintOpenValues() const
+ {
+ return _hiLoChartPrintOpenValues;
+ }
+
+
+ QFont hiLoChartOpenValuesFont() const
+ {
+ return _hiLoChartOpenValuesFont;
+ }
+
+
+ bool hiLoChartOpenValuesUseFontRelSize() const
+ {
+ return _hiLoChartOpenValuesUseFontRelSize;
+ }
+
+
+ int hiLoChartOpenValuesFontRelSize() const
+ {
+ return _hiLoChartOpenValuesFontRelSize;
+ }
+
+
+ QColor hiLoChartOpenValuesColor() const
+ {
+ return _hiLoChartOpenValuesColor;
+ }
+
+ void setHiLoChartPrintCloseValues( bool active,
+ QFont* font = 0,
+ int size = 14,
+ QColor* color = 0 );
+
+ bool hiLoChartPrintCloseValues() const
+ {
+ return _hiLoChartPrintCloseValues;
+ }
+
+
+ QFont hiLoChartCloseValuesFont() const
+ {
+ return _hiLoChartCloseValuesFont;
+ }
+
+
+ bool hiLoChartCloseValuesUseFontRelSize() const
+ {
+ return _hiLoChartCloseValuesUseFontRelSize;
+ }
+
+
+ int hiLoChartCloseValuesFontRelSize() const
+ {
+ return _hiLoChartCloseValuesFontRelSize;
+ }
+
+
+ QColor hiLoChartCloseValuesColor() const
+ {
+ return _hiLoChartCloseValuesColor;
+ }
+
+
+ void setHiLoChartPrintFirstValues( bool active,
+ QFont* font = 0,
+ uint size = 14,
+ QColor* color = 0 )
+ {
+ setHiLoChartPrintOpenValues( active, font, size, color );
+ }
+
+ bool hiLoChartPrintFirstValues() const
+ {
+ return hiLoChartPrintOpenValues();
+ }
+
+
+ QFont hiLoChartFirstValuesFont() const
+ {
+ return hiLoChartOpenValuesFont();
+ }
+
+
+ bool hiLoChartFirstValuesUseFontRelSize() const
+ {
+ return hiLoChartOpenValuesUseFontRelSize();
+ }
+
+ int hiLoChartFirstValuesFontRelSize() const
+ {
+ return hiLoChartOpenValuesFontRelSize();
+ }
+
+ QColor hiLoChartFirstValuesColor() const
+ {
+ return hiLoChartOpenValuesColor();
+ }
+
+ void setHiLoChartPrintLastValues( bool active,
+ QFont* font = 0,
+ int size = 14,
+ QColor* color = 0 )
+ {
+ setHiLoChartPrintCloseValues( active, font, size, color );
+ }
+
+ bool hiLoChartPrintLastValues() const
+ {
+ return hiLoChartPrintCloseValues();
+ }
+
+ QFont hiLoChartLastValuesFont() const
+ {
+ return hiLoChartCloseValuesFont();
+ }
+
+ bool hiLoChartLastValuesUseFontRelSize() const
+ {
+ return hiLoChartCloseValuesUseFontRelSize();
+ }
+
+ int hiLoChartLastValuesFontRelSize() const
+ {
+ return hiLoChartCloseValuesFontRelSize();
+ }
+
+ QColor hiLoChartLastValuesColor() const
+ {
+ return hiLoChartCloseValuesColor();
+ }
+
+
+ // END HI/LO CHART-SPECIFIC
+
+
+public:
+ // BOX WHISKER CHART-SPECIFIC
+ enum BWChartSubType { BWNormal, BWSimple = BWNormal };
+
+ enum BWStatVal { BWStatValSTART,
+ UpperOuterFence = BWStatValSTART, // first value stored in array
+ UpperInnerFence,
+ Quartile3,
+ Median,
+ Quartile1,
+ LowerInnerFence,
+ LowerOuterFence,
+ MaxValue,
+ MeanValue,
+ MinValue,
+ BWStatValEND = MinValue, // last value stored in array
+ // extra values - not stored in the array:
+ BWStatValOffEndValue, // the number of array values
+ BWStatValALL, // special flag reprsenting *all* array values
+ BWStatValUNKNOWN }; // to be returned when value is undefined
+public slots:
+
+ void setBWChartSubType( BWChartSubType bWChartSubType )
+ {
+ _BWChartSubType = bWChartSubType;
+ emit changed();
+ }
+
+ BWChartSubType bWChartSubType() const
+ {
+ return _BWChartSubType;
+ }
+
+ static QString bWChartSubTypeToString( BWChartSubType type );
+ static BWChartSubType stringToBWChartSubType( const QString& string );
+ static QString bWChartStatValToString( BWStatVal type );
+ static BWStatVal stringToBWChartStatVal( const QString& string );
+
+ void setBWChartFences( double upperInner, double lowerInner,
+ double upperOuter, double lowerOuter );
+ void bWChartFences( double& upperInner, double& lowerInner,
+ double& upperOuter, double& lowerOuter ) const;
+
+ void setBWChartBrush( const QBrush& bWChartBrush )
+ {
+ _BWChartBrush = bWChartBrush;
+ emit changed();
+ }
+
+ QBrush bWChartBrush() const
+ {
+ return _BWChartBrush;
+ }
+
+ void setBWChartOutValMarkerSize( int size )
+ {
+ _BWChartOutValMarkerSize = size;
+ }
+
+
+ int bWChartOutValMarkerSize() const
+ {
+ return _BWChartOutValMarkerSize;
+ }
+
+ void setBWChartPrintStatistics( BWStatVal statValue,
+ bool active,
+ QFont* font = 0,
+ int size = 24,
+ QColor* color = 0,
+ QBrush* brush = 0 );
+
+ bool bWChartPrintStatistics( BWStatVal statValue ) const
+ {
+ return _BWChartStatistics[ statValue ].active;
+ }
+
+
+ QFont bWChartStatisticsFont( BWStatVal statValue ) const
+ {
+ return _BWChartStatistics[ statValue ].font;
+ }
+
+
+ bool bWChartStatisticsUseRelSize( BWStatVal statValue ) const
+ {
+ return _BWChartStatistics[ statValue ].useRelSize;
+ }
+
+
+ int bWChartStatisticsFontRelSize( BWStatVal statValue ) const
+ {
+ return _BWChartStatistics[ statValue ].relSize;
+ }
+
+
+ QColor bWChartStatisticsColor( BWStatVal statValue ) const
+ {
+ return _BWChartStatistics[ statValue ].color;
+ }
+
+ QBrush bWChartStatisticsBrush( BWStatVal statValue ) const
+ {
+ return _BWChartStatistics[ statValue ].brush;
+ }
+
+
+public:
+ // LEGENDS
+
+ enum LegendPosition { NoLegend, LegendTop, LegendBottom,
+ LegendLeft, LegendRight,
+ LegendTopLeft,
+ LegendTopLeftTop,
+ LegendTopLeftLeft,
+ LegendTopRight,
+ LegendTopRightTop,
+ LegendTopRightRight,
+ LegendBottomLeft,
+ LegendBottomLeftBottom,
+ LegendBottomLeftLeft,
+ LegendBottomRight,
+ LegendBottomRightBottom,
+ LegendBottomRightRight
+ };
+
+public slots:
+ void setLegendPosition( LegendPosition position )
+ {
+ _legendPosition = position;
+ emit changed();
+ }
+
+ LegendPosition legendPosition() const
+ {
+ return _legendPosition;
+ }
+
+ void setLegendOrientation( Orientation orientation )
+ {
+ _legendOrientation = orientation;
+ emit changed();
+ }
+
+ Orientation legendOrientation() const
+ {
+ return _legendOrientation;
+ }
+
+
+ void setLegendShowLines( bool legendShowLines )
+ {
+ _legendShowLines = legendShowLines;
+ emit changed();
+ }
+
+ bool legendShowLines() const
+ {
+ return _legendShowLines;
+ }
+
+
+ static QString legendPositionToString( LegendPosition pos );
+ static LegendPosition stringToLegendPosition( const QString& string );
+
+public:
+ enum LegendSource { LegendManual, LegendFirstColumn, LegendAutomatic };
+
+public slots:
+ void setLegendSource( LegendSource source )
+ {
+ _legendSource = source;
+ emit changed();
+ }
+
+ LegendSource legendSource() const
+ {
+ return _legendSource;
+ }
+
+ static QString legendSourceToString( LegendSource source );
+ static LegendSource stringToLegendSource( const QString& string );
+
+ void setLegendText( uint dataset, const QString& text )
+ {
+ _legendText[ dataset ] = text;
+ emit changed();
+ }
+
+ QString legendText( uint dataset ) const
+ {
+ if( _legendText.find( dataset ) != _legendText.end() )
+ return _legendText[ dataset ];
+ else
+ return QString::null;
+ }
+
+
+ void setLegendTextColor( const QColor& color )
+ {
+ _legendTextColor = color;
+ emit changed();
+ }
+
+
+ QColor legendTextColor() const
+ {
+ return _legendTextColor;
+ }
+
+
+ void setLegendFont( const QFont& font, bool useFontSize )
+ {
+ _legendFont = font;
+ _legendFontUseRelSize = ! useFontSize;
+ emit changed();
+ }
+
+ QFont legendFont() const
+ {
+ return _legendFont;
+ }
+
+
+ void setLegendFontUseRelSize( bool legendFontUseRelSize )
+ {
+ _legendFontUseRelSize = legendFontUseRelSize;
+ emit changed();
+ }
+
+ bool legendFontUseRelSize() const
+ {
+ return _legendFontUseRelSize;
+ }
+
+ void setLegendFontRelSize( int legendFontRelSize )
+ {
+ _legendFontRelSize = legendFontRelSize;
+ emit changed();
+ }
+
+ int legendFontRelSize() const
+ {
+ return _legendFontRelSize;
+ }
+
+
+ void setLegendTitleText( const QString& text )
+ {
+ _legendTitleText = text;
+ emit changed();
+ }
+
+
+ QString legendTitleText() const
+ {
+ return _legendTitleText;
+ }
+
+
+ void setLegendTitleTextColor( const QColor& color )
+ {
+ _legendTitleTextColor = color;
+ emit changed();
+ }
+
+
+ QColor legendTitleTextColor() const
+ {
+ return _legendTitleTextColor;
+ }
+
+
+
+ void setLegendTitleFont( const QFont& font, bool useFontSize )
+ {
+ _legendTitleFont = font;
+ _legendTitleFontUseRelSize = ! useFontSize;
+ emit changed();
+ }
+
+ QFont legendTitleFont() const
+ {
+ return _legendTitleFont;
+ }
+
+
+ void setLegendTitleFontUseRelSize( bool legendTitleFontUseRelSize )
+ {
+ _legendTitleFontUseRelSize = legendTitleFontUseRelSize;
+ emit changed();
+ }
+
+ bool legendTitleFontUseRelSize() const
+ {
+ return _legendTitleFontUseRelSize;
+ }
+
+ void setLegendTitleFontRelSize( int legendTitleFontRelSize )
+ {
+ _legendTitleFontRelSize = legendTitleFontRelSize;
+ emit changed();
+ }
+
+ int legendTitleFontRelSize() const
+ {
+ return _legendTitleFontRelSize;
+ }
+
+
+ void setLegendSpacing( uint space )
+ {
+ _legendSpacing = space;
+ }
+
+
+ uint legendSpacing() const
+ {
+ return _legendSpacing;
+ }
+
+ // END LEGENDS
+
+
+
+ // AXES
+
+ // Note if you change the parameters here, then you must also change them in wrappers/KDChartParametersWrapper.h
+ void setAxisType( uint n, const KDChartAxisParams::AxisType axisType )
+ {
+ if ( n < KDCHART_MAX_AXES ) {
+ _axisSettings[ n ].params.setAxisType( axisType );
+ emit changed();
+ }
+ }
+
+ void setAxisVisible( uint n,
+ const bool axisVisible )
+ {
+ if ( n < KDCHART_MAX_AXES ) {
+ _axisSettings[ n ].params.setAxisVisible( axisVisible );
+ emit changed();
+ }
+ }
+
+ bool axisVisible( uint n ) const
+ {
+ return n < KDCHART_MAX_AXES ? _axisSettings[ n ].params.axisVisible()
+ : false;
+ }
+
+ void setAxisShowGrid( uint n,
+ bool axisShowGrid );
+ bool showGrid() const;
+ void setAxisDatasets( uint n,
+ uint dataset,
+ uint dataset2 = KDCHART_NO_DATASET,
+ uint chart = 0 );
+ bool axisDatasets( uint n,
+ uint& dataset,
+ uint& dataset2,
+ uint& chart ) const;
+
+public:
+#if COMPAT_QT_VERSION >= 0x030000
+ typedef QValueVector<uint> AxesArray;
+#else
+ typedef QArray<uint> AxesArray;
+#endif
+
+public slots:
+ bool chartAxes( uint chart, uint& cnt, AxesArray& axes ) const;
+
+ void setAxisArea( const uint n, const QRect& areaRect )
+ {
+ if ( n < KDCHART_MAX_AXES ) {
+ _axisSettings[ n ].params.setAxisTrueAreaRect( areaRect );
+ // Do not do emit changed() here!
+ }
+ }
+
+ void setAxisLabelsTouchEdges( uint n, bool axisLabelsTouchEdges )
+ {
+ _axisSettings[ n ].params.setAxisLabelsTouchEdges(
+ axisLabelsTouchEdges );
+ emit changed();
+ }
+
+ void setAxisLabelsVisible( uint n,
+ bool axisLabelsVisible )
+ {
+ if ( n < KDCHART_MAX_AXES )
+ _axisSettings[ n ].params.setAxisLabelsVisible( axisLabelsVisible );
+ }
+
+ void setAxisLabelsFont( uint n,
+ QFont axisLabelsFont,
+ int axisLabelsFontSize = 0,
+ QColor axisLabelsColor = Qt::black );
+
+ // Note if you change the parameters here, then you must also change them in wrappers/KDChartParametersWrapper.h
+ void setAxisLabelTextParams( uint n,
+ bool axisSteadyValueCalc = true,
+ QVariant axisValueStart = KDCHART_AXIS_LABELS_AUTO_LIMIT,
+ QVariant axisValueEnd = KDCHART_AXIS_LABELS_AUTO_LIMIT,
+ double axisValueDelta = KDCHART_AXIS_LABELS_AUTO_DELTA,
+ int axisDigitsBehindComma = KDCHART_AXIS_LABELS_AUTO_DIGITS,
+ int axisMaxEmptyInnerSpan = 67,
+ KDChartAxisParams::LabelsFromDataRow takeLabelsFromDataRow
+ = KDChartAxisParams::LabelsFromDataRowNo,
+ int labelTextsDataRow = 0,
+ QStringList* axisLabelStringList = 0,
+ QStringList* axisShortLabelsStringList = 0,
+ int axisValueLeaveOut = KDCHART_AXIS_LABELS_AUTO_LEAVEOUT,
+ KDChartAxisParams::ValueScale axisValueDeltaScale = KDChartAxisParams::ValueScaleNumerical )
+ {
+ _axisSettings[ n ].params.setAxisValues(
+ axisSteadyValueCalc,
+ axisValueStart,
+ axisValueEnd,
+ axisValueDelta,
+ axisDigitsBehindComma,
+ axisMaxEmptyInnerSpan,
+ takeLabelsFromDataRow,
+ labelTextsDataRow,
+ axisLabelStringList,
+ axisShortLabelsStringList,
+ axisValueLeaveOut,
+ axisValueDeltaScale );
+ emit changed();
+ }
+
+
+ void setAxisLabelStringParams( uint n,
+ QStringList* axisLabelStringList,
+ QStringList* axisShortLabelStringList,
+ const QString& valueStart = QString::null,
+ const QString& valueEnd = QString::null );
+
+
+ void setAxisParams( uint n,
+ const KDChartAxisParams& axisParams );
+
+ const KDChartAxisParams& axisParams( uint n ) const
+ {
+ return n < KDCHART_MAX_AXES ? _axisSettings[ n ].params
+ : _axisSettings[ KDCHART_MAX_AXES ].params;
+ }
+
+ // some convenience functions refering to the first KDChartCustomBox
+ // that is anchored to the axis n.
+ bool findFirstAxisCustomBoxID( uint n, uint& boxID ) const;
+ void setAxisTitle( uint n, const QString& axisTitle );
+
+ QString axisTitle( uint n ) const;
+ void setAxisTitleColor( uint n, QColor axisTitleColor );
+ QColor axisTitleColor( uint n ) const;
+ void setAxisTitleFont( uint n, QFont axisTitleFont );
+ void setAxisTitleFont( uint n, QFont axisTitleFont, bool useFixedFontSize );
+ QFont axisTitleFont( uint n ) const;
+ void setAxisTitleFontUseRelSize( uint n, bool useRelSize );
+ bool axisTitleFontUseRelSize( uint n ) const;
+ void setAxisTitleFontRelSize( uint n, int axisTitleFontRelSize );
+ int axisTitleFontRelSize( uint n ) const;
+
+ QRect axisArea( const uint n ) const
+ {
+ if ( n < KDCHART_MAX_AXES ) {
+ return _axisSettings[ n ].params.axisTrueAreaRect();
+ // Do not do emit changed() here!
+ }else{
+ return QRect(QPoint(0,0),QSize(0,0));
+ }
+ }
+ // END AXES
+
+
+
+ QRect dataArea() const { return _dataAreaRect; }
+ QRect legendArea() const { return _legendAreaRect; }
+
+
+
+ // HEADERS/FOOTERS
+
+public:
+
+ /*
+ READ before changing/enhancing the following enum
+ =================================================
+
+ Please note: The following enum is made in a way that
+ sections with smaller Y values come first.
+ Thus one can construct a loop itterating over theHdFtPos values
+ and so going from the top of the screen toiwards the bottom...
+
+ Also please note that extending this enum shound NOT break the
+ tripple groups (numbers 0/1/2, 3/4/5, and 6/7/8) since the
+ algorithms in
+ KDChartPainter::setupGeometry() and
+ KDChartPainter::paintHeaderFooter() rely on this schema.
+ Also don't forget to always update the auxiliary values
+ HdFtPosSTART, HdFtPosHeadersSTART,
+ HdFtPosHeadersEND, HdFtPosFootersSTART,
+ HdFtPosFootersEND, and HdFtPosEND muessen - these are used
+ fpr other itarators...
+ */
+ enum HdFtPos{ // start of all sections
+ HdFtPosSTART = 0,
+
+ // headers:
+ HdFtPosHeadersSTART = 0,
+ // top-most headers
+ HdFtPosHeaders0START = 0,
+ HdFtPosHeader0 = 0,
+ HdFtPosHeader0L = 1,
+ HdFtPosHeader0R = 2,
+ HdFtPosHeaders0END = 2,
+ // normal ( == middle ) headers
+ HdFtPosHeaders1START = 3,
+ HdFtPosHeader = 3, // center
+ HdFtPosHeaderL = 4, // left
+ HdFtPosHeaderR = 5, // right
+ HdFtPosHeaders1END = 5,
+ // bottom headers
+ HdFtPosHeaders2START = 6,
+ HdFtPosHeader2 = 6,
+ HdFtPosHeader2L = 7,
+ HdFtPosHeader2R = 8,
+ HdFtPosHeaders2END = 8,
+
+ HdFtPosHeadersEND = 8,
+
+ // footers:
+ HdFtPosFootersSTART = 9,
+ // normal ( == middle ) footers
+ HdFtPosFooters1START = 9,
+ HdFtPosFooter = 9,
+ HdFtPosFooterL = 10,
+ HdFtPosFooterR = 11,
+ HdFtPosFooters1END = 11,
+ // bottom footers
+ HdFtPosFooters2START = 12,
+ HdFtPosFooter2 = 12,
+ HdFtPosFooter2L = 13,
+ HdFtPosFooter2R = 14,
+ HdFtPosFooters2END = 14,
+ // top-most footers
+ HdFtPosFooters0START = 15,
+ HdFtPosFooter0 = 15,
+ HdFtPosFooter0L = 16,
+ HdFtPosFooter0R = 17,
+ HdFtPosFooters0END = 17,
+
+ HdFtPosFootersEND = 17,
+
+ HdFtPosEND = 17 };
+
+public slots:
+
+ void setHeaderFooterText( uint pos, const QString& text );
+ QString headerFooterText( uint pos ) const;
+ const QRect& headerFooterRect( uint pos ) const;
+ void setHeaderFooterColor( uint pos, const QColor color );
+ QColor headerFooterColor( uint pos ) const;
+ void setHeaderFooterFont( uint pos, const QFont& font,
+ bool fontUseRelSize,
+ int fontRelSize );
+ QFont headerFooterFont( uint pos ) const;
+ bool headerFooterFontUseRelSize( uint pos ) const;
+ int headerFooterFontRelSize( uint pos ) const;
+
+
+ // quick&dirty functions: access Header, Header2 and Footer
+ // without having to specify the HdFtPos
+ //
+ // This may be convenient for specifying simple charts with
+ // up to two centered header(s) and up to one centered footer.
+
+
+ void setHeader1Text( const QString& text )
+ {
+ _hdFtParams[ HdFtPosHeader ]._text = text;
+ emit changed();
+ }
+
+
+ QString header1Text() const
+ {
+ return _hdFtParams[ HdFtPosHeader ]._text;
+ }
+
+ void setHeader1Font( const QFont& font )
+ {
+ _hdFtParams[ HdFtPosHeader ]._font = font;
+ emit changed();
+ }
+
+
+ QFont header1Font() const
+ {
+ return _hdFtParams[ HdFtPosHeader ]._font;
+ }
+
+ void setHeader2Text( const QString& text )
+ {
+ _hdFtParams[ HdFtPosHeader2 ]._text = text;
+ emit changed();
+ }
+
+
+ QString header2Text() const
+ {
+ return _hdFtParams[ HdFtPosHeader2 ]._text;
+ }
+
+ void setHeader2Font( const QFont& font )
+ {
+ _hdFtParams[ HdFtPosHeader2 ]._font = font;
+ emit changed();
+ }
+
+
+ QFont header2Font() const
+ {
+ return _hdFtParams[ HdFtPosHeader2 ]._font;
+ }
+
+
+
+ void setFooterText( const QString& text )
+ {
+ _hdFtParams[ HdFtPosFooter ]._text = text;
+ emit changed();
+ }
+
+
+ QString footerText() const
+ {
+ return _hdFtParams[ HdFtPosFooter ]._text;
+ }
+
+ void setFooterFont( const QFont& font )
+ {
+ _hdFtParams[ HdFtPosFooter ]._font = font;
+ emit changed();
+ }
+
+
+ QFont footerFont() const
+ {
+ return _hdFtParams[ HdFtPosFooter ]._font;
+ }
+
+
+ /**
+ \internal
+ */
+ void __internalStoreHdFtRect( int pos, QRect rect )
+ {
+ if ( 0 <= pos && HdFtPosEND >= pos )
+ _hdFtParams[ pos ].setRect( rect );
+ }
+
+
+ // END HEADERS/FOOTERS
+
+
+
+public:
+ KDChartParams();
+ virtual ~KDChartParams();
+
+public slots:
+ void loadAxesFormXML(int& curAxisSettings, QDomElement& element);
+ bool loadXML( const QDomDocument& doc );
+
+ void saveAxesToXML(QDomDocument& doc, QDomElement& docRoot) const;
+ QDomDocument saveXML( bool withPI = true ) const;
+
+public:
+ friend QTextStream& operator<<( QTextStream& s, const KDChartParams& p );
+ friend QTextStream& operator>>( QTextStream& s, KDChartParams& p );
+
+public slots:
+ static void createChartValueNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName,
+ const QVariant& valY,
+ const QVariant& valX,
+ const int& propID );
+ static void createColorMapNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName,
+ const QMap< uint, QColor >& map );
+ static void createDoubleMapNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName,
+ const QMap< int, double >& map );
+ static void createChartFontNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName,
+ const QFont& font, bool useRelFont,
+ int relFont,
+ int minFont=-1 );
+ static bool readColorMapNode( const QDomElement& element,
+ QMap<uint,QColor>* map );
+ static bool readDoubleMapNode( const QDomElement& element,
+ QMap<int,double>* map );
+ static bool readChartFontNode( const QDomElement& element, QFont& font,
+ bool& useRelFont, int& relFontSize,
+ int* minFontSize=0 );
+ static bool readChartValueNode( const QDomElement& element,
+ QVariant& valY,
+ QVariant& valX,
+ int& propID );
+
+
+ // do *not* call this function manually: it is used by KDChartPainter::setupGeometry()
+ void setDataArea( const QRect& areaRect )
+ {
+ _dataAreaRect = areaRect;
+ // Do not do emit changed() here!
+ }
+ // do *not* call this function manually: it is used by KDChartPainter::setupGeometry()
+ void setLegendArea( const QRect& areaRect )
+ {
+ _legendAreaRect = areaRect;
+ // Do not do emit changed() here!
+ }
+
+
+signals:
+ void changed();
+
+
+protected:
+ void setBarsDisplayed( int barsDisplayed )
+ {
+ _barsDisplayed = barsDisplayed;
+ }
+ void setBarsLeft( int barsLeft )
+ {
+ _barsLeft = barsLeft;
+ }
+
+
+private:
+ QString dataRegionFrameAreaName( uint dataRow,
+ uint dataCol,
+ uint data3rd );
+ void recomputeShadowColors();
+ void insertDefaultAxisTitleBox( uint n,
+ bool setTitle, const QString& axisTitle,
+ bool setColor, const QColor& axisTitleColor,
+ bool setFont, const QFont& axisTitleFont,
+ bool setFontUseRel, bool useFontSize,
+ bool setFontRelSize, int axisTitleFontRelSize );
+
+ static QColor _internalPointer_DataValueAutoColor;
+
+ KDChartPropertySet* tempPropSetA;
+ KDChartPropertySet* tempPropSetB;
+
+ bool _optimizeOutputForScreen;
+ int _globalLeadingLeft;
+ int _globalLeadingTop;
+ int _globalLeadingRight;
+ int _globalLeadingBottom;
+ ChartType _chartType;
+ ChartType _additionalChartType;
+ int _numValues;
+ QFont _defaultFont;
+
+ typedef QDict < KDChartFrameSettings > AreaDict;
+ AreaDict _areaDict;
+
+ CustomBoxDict _customBoxDict;
+ bool _customBoxDictMayContainHoles;
+ QRect _noRect;
+ KDFrame _noFrame;
+
+ KDChartFrameSettings _noFrameSettings;
+
+ class ModeAndChart
+ {
+ public:
+ ModeAndChart()
+ : _mode( UnknownMode ), _chart( KDCHART_NO_CHART )
+ {}
+ ModeAndChart( SourceMode mode, uint chart )
+ : _mode( mode ), _chart( chart )
+ {}
+
+ SourceMode mode() const
+ {
+ return _mode;
+ };
+ uint chart() const
+ {
+ return _chart;
+ };
+
+ void setMode( SourceMode mode )
+ {
+ _mode = mode;
+ };
+ void setChart( uint chart )
+ {
+ _chart = chart;
+ };
+ private:
+ SourceMode _mode;
+ uint _chart;
+ };
+
+ typedef QMap < uint, ModeAndChart > ModeAndChartMap;
+ ModeAndChartMap _dataSourceModeAndChart;
+ bool _setChartSourceModeWasUsed;
+ QMap < uint, QColor > _dataColors;
+ uint _maxDatasetSourceMode;
+ KDChartPropertySetList _propertySetList;
+ double _shadowBrightnessFactor;
+ Qt::BrushStyle _shadowPattern;
+ bool _threeDShadowColors;
+ uint _maxDatasetColor;
+ QMap < uint, QColor > _dataColorsShadow1;
+ QMap < uint, QColor > _dataColorsShadow2;
+ QColor _outlineDataColor;
+ uint _outlineDataLineWidth;
+ PenStyle _outlineDataLineStyle;
+
+
+ struct PrintDataValuesSettings {
+ bool _printDataValues;
+ int _divPow10;
+ int _digitsBehindComma;
+ QFont _dataValuesFont;
+ bool _dataValuesUseFontRelSize;
+ int _dataValuesFontRelSize;
+ QColor _dataValuesColor;
+ QBrush _dataValuesBrush;
+ bool _dataValuesAutoColor;
+ KDChartEnums::PositionFlag _dataValuesAnchorNegativePosition;
+ uint _dataValuesAnchorNegativeAlign;
+ int _dataValuesAnchorNegativeDeltaX;
+ int _dataValuesAnchorNegativeDeltaY;
+ int _dataValuesNegativeRotation;
+ KDChartEnums::PositionFlag _dataValuesAnchorPositivePosition;
+ uint _dataValuesAnchorPositiveAlign;
+ int _dataValuesAnchorPositiveDeltaX;
+ int _dataValuesAnchorPositiveDeltaY;
+ int _dataValuesPositiveRotation;
+ KDChartEnums::TextLayoutPolicy _dataValuesLayoutPolicy;
+ bool _dataValuesShowInfinite;
+
+ bool _useDefaultFontParams; // internal flag, do NOT store it!
+ };
+ PrintDataValuesSettings _printDataValuesSettings;
+ PrintDataValuesSettings _printDataValuesSettings2;
+
+ bool _allowOverlappingDataValueTexts;
+ BarChartSubType _barChartSubType;
+ bool _threeDBars;
+ int _threeDBarAngle;
+ double _threeDBarDepth;
+ double _cosThreeDBarAngle;
+ int _datasetGap;
+ bool _datasetGapIsRelative;
+ int _valueBlockGap;
+ bool _valueBlockGapIsRelative;
+ int _barWidth;
+ int _userWidth;
+ bool _solidExcessArrows;
+ // volatile bar chart information, not saved in the stream
+ QRect _dataAreaRect;
+ QRect _legendAreaRect;
+ int _barsDisplayed;
+ int _barsLeft;
+
+ // LINES/AREAS-specific
+ LineChartSubType _lineChartSubType;
+ bool _threeDLines;
+ int _threeDLineDepth;
+ int _threeDLineXRotation;
+ int _threeDLineYRotation;
+ bool _lineMarker;
+ LineMarkerStyleMap _lineMarkerStyles;
+ uint _maxDatasetLineMarkerStyle;
+ QSize _lineMarkerSize;
+ QColor _lineColor;
+ int _lineWidth;
+ PenStyle _lineStyle;
+ typedef QMap<uint, PenStyle> LineStyleMap;
+ LineStyleMap _datasetLineStyles;
+ AreaChartSubType _areaChartSubType;
+ AreaLocation _areaLocation;
+
+
+ // POLAR-specific
+ PolarChartSubType _polarChartSubType;
+ bool _polarMarker;
+ PolarMarkerStyleMap _polarMarkerStyles;
+ uint _maxDatasetPolarMarkerStyle;
+ QSize _polarMarkerSize;
+ int _polarLineWidth;
+ int _polarZeroDegreePos;
+ bool _polarRotateCircularLabels;
+ struct _polarDelimsAndLabelStruct {
+ bool showDelimiters;
+ bool showLabels;
+ };
+ _polarDelimsAndLabelStruct _polarDelimsAndLabels[ 1 + KDCHART_MAX_POLAR_DELIMS_AND_LABELS_POS ];
+
+
+
+ // PIES/RINGS
+ bool _explode;
+ double _explodeFactor;
+ ExplodeFactorsMap _explodeFactors;
+ QValueList<int> _explodeList;
+ bool _threeDPies;
+ int _threeDPieHeight;
+ int _pieStart;
+ int _ringStart;
+ bool _relativeRingThickness;
+
+
+ // HI-LO CHARTS
+
+ HiLoChartSubType _hiLoChartSubType;
+ bool _hiLoChartPrintLowValues;
+ QFont _hiLoChartLowValuesFont;
+ bool _hiLoChartLowValuesUseFontRelSize;
+ int _hiLoChartLowValuesFontRelSize;
+ QColor _hiLoChartLowValuesColor;
+ bool _hiLoChartPrintHighValues;
+ QFont _hiLoChartHighValuesFont;
+ bool _hiLoChartHighValuesUseFontRelSize;
+ int _hiLoChartHighValuesFontRelSize;
+ QColor _hiLoChartHighValuesColor;
+ bool _hiLoChartPrintOpenValues;
+ QFont _hiLoChartOpenValuesFont;
+ bool _hiLoChartOpenValuesUseFontRelSize;
+ int _hiLoChartOpenValuesFontRelSize;
+ QColor _hiLoChartOpenValuesColor;
+ bool _hiLoChartPrintCloseValues;
+ QFont _hiLoChartCloseValuesFont;
+ bool _hiLoChartCloseValuesUseFontRelSize;
+ int _hiLoChartCloseValuesFontRelSize;
+ QColor _hiLoChartCloseValuesColor;
+
+
+
+ // BOX AND WHISKER CHARTS
+
+ BWChartSubType _BWChartSubType;
+
+ struct BWChartStatistics {
+ double value;
+ int y;
+ bool active;
+ QFont font;
+ bool useRelSize;
+ int relSize;
+ QColor color;
+ QBrush brush;
+ };
+ BWChartStatistics _BWChartStatistics[ BWStatValOffEndValue ];
+ double _BWChartFenceUpperInner;
+ double _BWChartFenceLowerInner;
+ double _BWChartFenceUpperOuter;
+ double _BWChartFenceLowerOuter;
+ int _BWChartOutValMarkerSize;
+ QBrush _BWChartBrush;
+
+
+ // LEGENDS
+
+ LegendPosition _legendPosition;
+ Qt::Orientation _legendOrientation;
+ bool _legendShowLines;
+ LegendSource _legendSource;
+ QMap < int, QString > _legendText;
+ QColor _legendTextColor;
+ QFont _legendFont;
+ bool _legendFontUseRelSize;
+ int _legendFontRelSize;
+ QString _legendTitleText;
+ QColor _legendTitleTextColor;
+ QFont _legendTitleFont;
+ bool _legendTitleFontUseRelSize;
+ int _legendTitleFontRelSize;
+ uint _legendSpacing;
+
+
+ // AXES (private)
+ // Must be exported because of the inline methods
+ struct KDCHART_EXPORT AxisSettings
+ {
+ uint dataset;
+ uint dataset2;
+ uint chart;
+ KDChartAxisParams params;
+ AxisSettings()
+ {
+ dataset = KDCHART_NO_DATASET;
+ dataset2 = KDCHART_NO_DATASET;
+ chart = KDCHART_NO_CHART;
+ }
+ };
+
+ // 13 == KDCHART_MAX_AXES + 1
+ AxisSettings _axisSettings[ 13 ];
+ // END AXES (private)
+
+
+ // HEADER/FOOTER (private)
+ // Must be exported because of the inline methods
+ struct KDCHART_EXPORT HdFtParams
+ {
+ QString _text;
+ QColor _color;
+ QFont _font;
+ bool _fontUseRelSize;
+ int _fontRelSize;
+ HdFtParams()
+ {
+ _color = QColor( Qt::black );
+ _font = QFont( "helvetica", 10, QFont::Normal, false );
+ _fontUseRelSize = true;
+ _fontRelSize = 8; // per default quite small
+ }
+ void setRect( QRect rect )
+ {
+ _rect = rect;
+ }
+ const QRect& rect() const
+ {
+ return _rect;
+ }
+ private:
+ // temporary data that are NOT to be stored within sessions:
+ QRect _rect;
+ };
+
+ HdFtParams _hdFtParams[ HdFtPosEND + 1 ];
+ // END HEADER/FOOTER (private)
+};
+
+
+QTextStream& operator<<( QTextStream& s, const KDChartParams& p );
+
+
+QTextStream& operator>>( QTextStream& s, KDChartParams& p );
+
+
+#endif
diff --git a/libkdchart/KDChartParamsWrapper.cpp b/libkdchart/KDChartParamsWrapper.cpp
new file mode 100644
index 0000000..49e5166
--- /dev/null
+++ b/libkdchart/KDChartParamsWrapper.cpp
@@ -0,0 +1,73 @@
+#include "KDChartParamsWrapper.h"
+#include <KDChartParams.h>
+
+KDChartParamsWrapper::KDChartParamsWrapper( KDChartParams* data ) :QObject(0), _data(data)
+{
+}
+
+const KDChartAxisParams* KDChartParamsWrapper::axisParams( uint n ) const
+{
+ const KDChartAxisParams& a = _data->axisParams( n );
+ return &a;
+}
+
+void KDChartParamsWrapper::setExplodeValues( QVariant explodeList )
+{
+ if ( !explodeList.type() == QVariant::List )
+ return;
+ QValueList<QVariant> list = explodeList.toList();
+
+ QValueList<int> res;
+ for( QValueList<QVariant>::Iterator it = list.begin(); it != list.end(); ++it ) {
+ int x = (*it).toInt();
+ res.append(x);
+ }
+ _data->setExplodeValues( res );
+}
+
+void KDChartParamsWrapper::setExplodeFactors( QVariant factors )
+{
+ if ( !factors.type() == QVariant::List )
+ return;
+
+ QValueList<QVariant> list = factors.toList();
+
+ KDChartParams::ExplodeFactorsMap res;
+ int i = 0;
+ for( QValueList<QVariant>::Iterator it = list.begin(); it != list.end(); ++it, ++i ) {
+ res[i] = (*it).toDouble();
+ }
+ _data->setExplodeFactors( res );
+}
+
+void KDChartParamsWrapper::setAxisLabelStringParams( uint n, QVariant axisLabelStringList, QVariant axisShortLabelStringList,
+ const QString& valueStart, const QString& valueEnd )
+{
+ QStringList l1 = axisLabelStringList.toStringList();
+ QStringList l2 = axisShortLabelStringList.toStringList();
+ _data->setAxisLabelStringParams( n, &l1, &l2, valueStart, valueEnd );
+}
+
+void KDChartParamsWrapper::setAxisLabelTextParams( uint n,
+ bool axisSteadyValueCalc,
+ QVariant axisValueStart,
+ QVariant axisValueEnd,
+ double axisValueDelta,
+ int axisDigitsBehindComma,
+ int axisMaxEmptyInnerSpan,
+ int takeLabelsFromDataRow,
+ int labelTextsDataRow,
+ const QVariant& axisLabelStringList,
+ const QVariant& axisShortLabelsStringList,
+ int axisValueLeaveOut,
+ int axisValueDeltaScale ) {
+
+ QStringList l1 = axisLabelStringList.toStringList();
+ QStringList l2 = axisShortLabelsStringList.toStringList();
+
+ _data->setAxisLabelTextParams( n, axisSteadyValueCalc, axisValueStart, axisValueEnd, axisValueDelta, axisDigitsBehindComma, axisMaxEmptyInnerSpan,
+ (KDChartAxisParams::LabelsFromDataRow) takeLabelsFromDataRow, labelTextsDataRow, &l1, &l2,
+ axisValueLeaveOut, (KDChartAxisParams::ValueScale) axisValueDeltaScale );
+}
+
+#include "KDChartParamsWrapper.moc"
diff --git a/libkdchart/KDChartParamsWrapper.h b/libkdchart/KDChartParamsWrapper.h
new file mode 100644
index 0000000..827cef1
--- /dev/null
+++ b/libkdchart/KDChartParamsWrapper.h
@@ -0,0 +1,175 @@
+#ifndef KDCHARTPARAMSWRAPPER_H
+#define KDCHARTPARAMSWRAPPER_H
+#include <qobject.h>
+#include <KDFrame.h>
+#include <KDChartParams.h>
+#include <qvariant.h>
+class KDChartAxisParams;
+
+class KDChartParamsWrapper :public QObject
+{
+ Q_OBJECT
+
+public:
+ KDChartParamsWrapper( KDChartParams* );
+public slots:
+ const KDChartAxisParams* axisParams( uint n ) const;
+ void setExplodeValues( QVariant explodeList );
+ void setExplodeFactors( QVariant factors );
+ void setAxisLabelStringParams( uint n,
+ QVariant axisLabelStringList,
+ QVariant axisShortLabelStringList,
+ const QString& valueStart = QString::null,
+ const QString& valueEnd = QString::null );
+
+ // These methods need to be here, for the enums to work.
+ void setSimpleFrame( uint area,
+ int outerGapX = 0,
+ int outerGapY = 0,
+ int innerGapX = 0,
+ int innerGapY = 0,
+ bool addFrameWidthToLayout = true,
+ bool addFrameHeightToLayout = true,
+ int simpleFrame = KDFrame::FrameFlat,
+ int lineWidth = 1,
+ int midLineWidth = 0,
+ QPen pen = QPen(),
+ QBrush background = QBrush( Qt::NoBrush ),
+ const QPixmap* backPixmap = 0, // no pixmap
+ int backPixmapMode = KDFrame::PixStretched,
+ int shadowWidth = 0,
+ int sunPos = KDFrame::CornerTopLeft )
+ {
+ _data->setSimpleFrame(area, outerGapX, outerGapY, innerGapX, innerGapY, addFrameWidthToLayout, addFrameHeightToLayout,
+ (KDFrame::SimpleFrame) simpleFrame, lineWidth, midLineWidth, pen, background, backPixmap,
+ (KDFrame::BackPixmapMode) backPixmapMode, shadowWidth, (KDFrame::CornerName) sunPos );
+ }
+
+ void setDataRegionFrame( uint dataRow,
+ uint dataCol,
+ uint data3rd, // important: we ignore the data3rd parameter for now!
+ int innerGapX = 0,
+ int innerGapY = 0,
+ bool addFrameWidthToLayout = true,
+ bool addFrameHeightToLayout = true,
+ int simpleFrame = KDFrame::FrameFlat,
+ int lineWidth = 1,
+ int midLineWidth = 0,
+ QPen pen = QPen(),
+ int shadowWidth = 0,
+ int sunPos = KDFrame::CornerTopLeft )
+ {
+ _data->setDataRegionFrame( dataRow, dataCol,
+ data3rd, innerGapX, innerGapY, addFrameWidthToLayout, addFrameHeightToLayout,
+ (KDFrame::SimpleFrame) simpleFrame, lineWidth, midLineWidth, pen, shadowWidth, (KDFrame::CornerName) sunPos );
+ }
+
+ bool moveDataRegionFrame( uint oldDataRow,
+ uint oldDataCol,
+ uint oldData3rd, // important: we ignore the data3rd parameter for now!
+ uint newDataRow,
+ uint newDataCol,
+ uint newData3rd// important: we ignore the data3rd parameter for now!
+ )
+ {
+ return _data->moveDataRegionFrame(
+ oldDataRow, oldDataCol, oldData3rd, newDataRow, newDataCol, newData3rd );
+ }
+
+ void setPrintDataValues( bool active,
+ uint chart = KDCHART_ALL_CHARTS,
+ int divPow10 = 0,
+ int digitsBehindComma = KDCHART_DATA_VALUE_AUTO_DIGITS,
+ QFont* font = 0,
+ uint size = UINT_MAX, // <-- makes us use the *default* font params
+ // by IGNORING settings of
+ // the following parameters!
+ const QColor* color = KDCHART_DATA_VALUE_AUTO_COLOR,
+ int negativePosition = KDChartEnums::PosCenter,
+ uint negativeAlign = Qt::AlignCenter,
+ int negativeDeltaX = 0,
+ int negativeDeltaY = 0,
+ int negativeRotation = 0,
+ int positivePosition = KDChartEnums::PosCenter,
+ uint positiveAlign = Qt::AlignCenter,
+ int positiveDeltaX = 0,
+ int positiveDeltaY = 0,
+ int positiveRotation = 0,
+ int policy = KDChartEnums::LayoutPolicyRotate )
+ {
+ _data->setPrintDataValues( active, chart, divPow10, digitsBehindComma,font, size, color, (KDChartEnums::PositionFlag) negativePosition,
+ negativeAlign, negativeDeltaX, negativeDeltaY, negativeRotation, (KDChartEnums::PositionFlag) positivePosition,
+ positiveAlign, positiveDeltaX, positiveDeltaY, positiveRotation, (KDChartEnums::TextLayoutPolicy) policy );
+ }
+
+
+ void setDataValuesPlacing( int position,
+ uint align,
+ int deltaX,
+ int deltaY,
+ int rotation,
+ bool specifyingPositiveValues = true,
+ uint chart = KDCHART_ALL_CHARTS )
+ {
+ _data->setDataValuesPlacing( (KDChartEnums::PositionFlag) position, align, deltaX, deltaY, rotation, specifyingPositiveValues, chart );
+ }
+
+
+ void setDataValuesPolicy( int policy = KDChartEnums::LayoutPolicyRotate,
+ uint chart = KDCHART_ALL_CHARTS )
+ {
+ _data->setDataValuesPolicy( (KDChartEnums::TextLayoutPolicy) policy, chart );
+ }
+
+
+ void setPolarDelimsAndLabelsAtPos( int pos,
+ bool showDelimiters,
+ bool showLabels )
+ {
+ _data->setPolarDelimsAndLabelsAtPos( (KDChartEnums::PositionFlag) pos, showDelimiters, showLabels );
+ }
+
+
+ bool polarDelimAtPos( int pos ) const
+ {
+ return _data->polarDelimAtPos( (KDChartEnums::PositionFlag) pos );
+ }
+
+
+
+ bool polarLabelsAtPos( int pos ) const
+ {
+ return _data->polarLabelsAtPos( (KDChartEnums::PositionFlag) pos );
+ }
+
+
+ void setAxisType( uint n, int axisType )
+ {
+ _data->setAxisType( n, (KDChartAxisParams::AxisType) axisType );
+ }
+
+
+ void setAxisLabelTextParams( uint n,
+ bool axisSteadyValueCalc = true,
+ QVariant axisValueStart = KDCHART_AXIS_LABELS_AUTO_LIMIT,
+ QVariant axisValueEnd = KDCHART_AXIS_LABELS_AUTO_LIMIT,
+ double axisValueDelta = KDCHART_AXIS_LABELS_AUTO_DELTA,
+ int axisDigitsBehindComma = KDCHART_AXIS_LABELS_AUTO_DIGITS,
+ int axisMaxEmptyInnerSpan = 67,
+ int takeLabelsFromDataRow = KDChartAxisParams::LabelsFromDataRowNo,
+ int labelTextsDataRow = 0,
+ const QVariant& axisLabelStringList = QStringList(),
+ const QVariant& axisShortLabelsStringList = QStringList(),
+ int axisValueLeaveOut = KDCHART_AXIS_LABELS_AUTO_LEAVEOUT,
+ int axisValueDeltaScale = KDChartAxisParams::ValueScaleNumerical );
+
+
+
+private:
+ KDChartParams* _data;
+};
+
+
+
+#endif /* KDCHARTPARAMSWRAPPER_H */
+
diff --git a/libkdchart/KDChartParams_frame.cpp b/libkdchart/KDChartParams_frame.cpp
new file mode 100644
index 0000000..c873a0a
--- /dev/null
+++ b/libkdchart/KDChartParams_frame.cpp
@@ -0,0 +1,288 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+
+#include "KDChartParams.h"
+#include <KDXMLTools.h>
+
+
+/**
+ \class KDChartParams::KDChartFrameSettings KDChartParams.h
+
+ Stores the frame settings for one of the chart areas:
+ \li frame (consisting of edges, corners, background, shadow)
+ \li distance of frame to inner area
+ \li distance of frame to surrounding parts of the chart
+
+ \sa setSimpleFrame, setFrame, frameSettings
+ */
+
+
+/**
+ Constructor. Setting default values.
+ */
+KDChartParams::KDChartFrameSettings::KDChartFrameSettings()
+{
+ _dataRow = 0;
+ _dataCol = 0;
+ _data3rd = 0;
+ _frame = 0;
+ resetFrame();
+ _outerGapX = 0;
+ _outerGapY = 0;
+ _innerGapX = 0;
+ _innerGapY = 0;
+ _addFrameWidthToLayout = true;
+ _addFrameHeightToLayout = true;
+}
+
+
+/**
+ Constructor.
+
+ \param outerGap Distance between the frame and the surrounding parts of the chart.
+ \param innerGap Distance between the frame and inner area.
+ \param addFrameWidthToLayout If true, shrink inner area so the area AND its frame will occupy
+ the same space of the chart as the area would occupy if no frame were drawn.
+ If false, the frame is drawn around the area without taking care not to override other
+ content of the chart.
+ \param frame The frame settings to be used for this area. The values of this parameter
+ will be copied into a KDFrame object stored internally in this KDChartFrameSettings so
+ it is save to use the same KDFrame object for specifying the settings of more than one area.
+ */
+KDChartParams::KDChartFrameSettings::KDChartFrameSettings(
+ uint dataRow,
+ uint dataCol,
+ uint data3rd,
+ const KDFrame& frame,
+ int outerGapX,
+ int outerGapY,
+ int innerGapX,
+ int innerGapY,
+ bool addFrameWidthToLayout,
+ bool addFrameHeightToLayout )
+ : _dataRow( dataRow ),
+ _dataCol( dataCol ),
+ _data3rd( data3rd ),
+ _frame( 0 ),
+ _outerGapX( outerGapX ),
+ _outerGapY( outerGapY ),
+ _innerGapX( innerGapX ),
+ _innerGapY( innerGapY ),
+ _addFrameWidthToLayout( addFrameWidthToLayout ),
+_addFrameHeightToLayout( addFrameHeightToLayout )
+{
+ resetFrame();
+ KDFrame::deepCopy(*_frame, frame);
+}
+
+
+
+/**
+ Destructor. Only defined to have it virtual.
+ */
+KDChartParams::KDChartFrameSettings::~KDChartFrameSettings()
+{
+ delete _frame;
+}
+
+/**
+ Reads data from a DOM element node that represents a frame
+ settings object and fills a KDChartFrameSettings object
+ with the data.
+
+ \param element the DOM element to read from
+ \param settings the frame settings object to read the data into
+ */
+bool KDChartParams::KDChartFrameSettings::readFrameSettingsNode( const QDomElement& element,
+ KDChartFrameSettings& settings,
+ uint& areaId )
+{
+ bool ok = true;
+ KDFrame tempFrame;
+ int tempId = KDChartEnums::AreaUNKNOWN;
+ int tempDataRow = 0; // these 3 need initialization since they were not
+ int tempDataCol = 0;// existent in previous releases of KDChart
+ int tempData3rd = 0;
+
+ int tempOuterGapX, tempOuterGapY, tempInnerGapX, tempInnerGapY;
+ bool tempAddFrameWidthToLayout, tempAddFrameHeightToLayout;
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "Frame" ) {
+ ok = ok & KDFrame::readFrameNode( element, tempFrame );
+ } else if( tagName == "AreaId" ) {
+ ok = ok & KDXML::readIntNode( element, tempId );
+ } else if( tagName == "DataRow" ) {
+ ok = ok & KDXML::readIntNode( element, tempDataRow );
+ } else if( tagName == "DataCol" ) {
+ ok = ok & KDXML::readIntNode( element, tempDataCol );
+ } else if( tagName == "Data3rd" ) {
+ ok = ok & KDXML::readIntNode( element, tempData3rd );
+ } else if( tagName == "OuterGapX" ) {
+ ok = ok & KDXML::readIntNode( element, tempOuterGapX );
+ } else if( tagName == "OuterGapY" ) {
+ ok = ok & KDXML::readIntNode( element, tempOuterGapY );
+ } else if( tagName == "InnerGapX" ) {
+ ok = ok & KDXML::readIntNode( element, tempInnerGapX );
+ } else if( tagName == "InnerGapY" ) {
+ ok = ok & KDXML::readIntNode( element, tempInnerGapY );
+ } else if( tagName == "AddFrameWidthToLayout" ) {
+ ok = ok & KDXML::readBoolNode( element, tempAddFrameWidthToLayout );
+ } else if( tagName == "AddFrameHeightToLayout" ) {
+ ok = ok & KDXML::readBoolNode( element, tempAddFrameHeightToLayout );
+ } else {
+ qDebug( "Unknown tag in frame settings" );
+ }
+ }
+ node = node.nextSibling();
+ }
+
+ if( ok ) {
+ settings.resetFrame();
+ KDFrame::deepCopy(*settings._frame, tempFrame);
+
+ settings._dataRow = tempDataRow;
+ settings._dataCol = tempDataCol;
+ settings._data3rd = tempData3rd;
+ settings._outerGapX = tempOuterGapX;
+ settings._outerGapY = tempOuterGapY;
+ settings._innerGapX = tempInnerGapX;
+ settings._innerGapY = tempInnerGapY;
+ settings._addFrameWidthToLayout = tempAddFrameWidthToLayout;
+ settings._addFrameHeightToLayout = tempAddFrameHeightToLayout;
+ areaId = tempId;
+ }
+
+ return ok;
+}
+
+
+
+/**
+ \fn const KDFrame& KDChartParams::KDChartFrameSettings::frame() const
+
+ Return the KDFrame object used for drawing this areas frame.
+ */
+
+
+/**
+ \fn int KDChartParams::KDChartFrameSettings::innerGapX() const
+
+ Return the X-distance between the frame and the inner area.
+ */
+
+/**
+ \fn int KDChartParams::KDChartFrameSettings::innerGapY() const
+
+ Return the Y-distance between the frame and the inner area.
+ */
+
+/**
+ \fn int KDChartParams::KDChartFrameSettings::outerGapX() const
+
+ Return the X-distance between the frame and the surrounding parts of the chart.
+ */
+
+/**
+ \fn int KDChartParams::KDChartFrameSettings::outerGapY() const
+
+ Return the Y-distance between the frame and the surrounding parts of the chart.
+ */
+
+/**
+ \fn bool KDChartParams::KDChartFrameSettings::addFrameWidthToLayout() const
+
+ Return whether the inner area will shrink the area AND its frame will occupy
+ the same space of the chart as the area would occupy if no frame were drawn.
+ If false, the frame is drawn around the area without taking care not to override other
+ content of the chart.
+
+ \sa addFrameHeightToLayout
+ */
+
+
+/**
+ \fn bool KDChartParams::KDChartFrameSettings::addFrameHeightToLayout() const
+
+ Return whether the inner area will shrink the area AND its frame will occupy
+ the same space of the chart as the area would occupy if no frame were drawn.
+ If false, the frame is drawn around the area without taking care not to override other
+ content of the chart.
+
+ \sa addFrameWidthToLayout
+ */
+
+
+
+/**
+ Creates a DOM element node that represents a frame settings
+ object for use in a DOM document.
+
+ \param document the DOM document to which the node will belong
+ \param parent the parent node to which the new node will be appended
+ \param elementName the name of the new node
+ \param settings the frame settings to be represented
+ */
+void KDChartParams::KDChartFrameSettings::createFrameSettingsNode( QDomDocument& document,
+ QDomNode& parent,
+ const QString& elementName,
+ const KDChartParams::KDChartFrameSettings* settings,
+ uint areaId )
+{
+ QDomElement frameSettingsElement = document.createElement( elementName );
+ parent.appendChild( frameSettingsElement );
+ if( settings->_frame )
+ KDFrame::createFrameNode( document, frameSettingsElement, "Frame",
+ *settings->_frame );
+ KDXML::createIntNode( document, frameSettingsElement, "AreaId",
+ areaId );
+ KDXML::createIntNode( document, frameSettingsElement, "DataRow",
+ settings->_dataRow );
+ KDXML::createIntNode( document, frameSettingsElement, "DataCol",
+ settings->_dataCol );
+ KDXML::createIntNode( document, frameSettingsElement, "Data3rd",
+ settings->_data3rd );
+ KDXML::createIntNode( document, frameSettingsElement, "OuterGapX",
+ settings->_outerGapX );
+ KDXML::createIntNode( document, frameSettingsElement, "OuterGapY",
+ settings->_outerGapY );
+ KDXML::createIntNode( document, frameSettingsElement, "InnerGapX",
+ settings->_innerGapX );
+ KDXML::createIntNode( document, frameSettingsElement, "InnerGapY",
+ settings->_innerGapY );
+ KDXML::createBoolNode( document, frameSettingsElement,
+ "AddFrameWidthToLayout",
+ settings->_addFrameWidthToLayout );
+ KDXML::createBoolNode( document, frameSettingsElement,
+ "AddFrameHeightToLayout",
+ settings->_addFrameHeightToLayout );
+}
diff --git a/libkdchart/KDChartParams_io.cpp b/libkdchart/KDChartParams_io.cpp
new file mode 100644
index 0000000..092229e
--- /dev/null
+++ b/libkdchart/KDChartParams_io.cpp
@@ -0,0 +1,3333 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#include "KDChartParams.h"
+#include <KDXMLTools.h>
+
+#include <qintdict.h>
+
+/**
+ \fn QTextStream& operator<<( QTextStream& s, const KDChartParams& p );
+
+ Writes the KDChartParams object p as an XML document to the text stream s.
+
+ \param s the text stream to write to
+ \param p the KDChartParams object to write
+ \return the text stream after the write operation
+ */
+QTextStream& operator<<( QTextStream& s, const KDChartParams& p )
+{
+ QDomDocument document = p.saveXML();
+ s << document.toString();
+
+ return s;
+}
+
+/**
+ Helper method saving the axis parameters to an XML file,
+ this is called by saveXML() only.
+*/
+void KDChartParams::saveAxesToXML(QDomDocument& doc, QDomElement& docRoot) const
+{
+ // the AxisSettings elements
+ for( int axis = 0; axis < 13; axis++ ) {
+ QDomElement axisSettingsElement =
+ doc.createElement( "AxisSettings" );
+ docRoot.appendChild( axisSettingsElement );
+ axisSettingsElement.setAttribute( "Dataset",
+ _axisSettings[axis].dataset );
+ axisSettingsElement.setAttribute( "Dataset2",
+ _axisSettings[axis].dataset2 );
+ axisSettingsElement.setAttribute( "Chart",
+ _axisSettings[axis].chart );
+ {
+ // the Type element
+ KDXML::createStringNode( doc, axisSettingsElement, "Type",
+ KDChartAxisParams::axisTypeToString( _axisSettings[axis].params._axisType ) );
+
+ // the Visible element
+ KDXML::createBoolNode( doc, axisSettingsElement, "Visible",
+ _axisSettings[axis].params._axisVisible );
+
+ // the LabelsTouchEdges element
+ KDXML::createBoolNode( doc, axisSettingsElement, "LabelsTouchEdges",
+ _axisSettings[axis].params._axisLabelsTouchEdges );
+
+ // the AreaMode element
+ KDXML::createStringNode( doc, axisSettingsElement, "AreaMode",
+ KDChartAxisParams::axisAreaModeToString( _axisSettings[axis].params._axisAreaMode ) );
+
+ // the UseAvailableSpaceFrom element
+ KDXML::createIntNode( doc, axisSettingsElement, "UseAvailableSpaceFrom",
+ _axisSettings[axis].params._axisUseAvailableSpaceFrom );
+
+ // the UseAvailableSpaceTo element
+ KDXML::createIntNode( doc, axisSettingsElement, "UseAvailableSpaceTo",
+ _axisSettings[axis].params._axisUseAvailableSpaceTo );
+
+ // the IsometricReferenceAxis element
+ KDXML::createIntNode( doc, axisSettingsElement, "IsometricReferenceAxis",
+ _axisSettings[axis].params._axisIsoRefAxis );
+
+ // the AreaMin element
+ KDXML::createIntNode( doc, axisSettingsElement, "AreaMin",
+ _axisSettings[axis].params._axisAreaMin );
+
+ // the AreaMax element
+ KDXML::createIntNode( doc, axisSettingsElement, "AreaMax",
+ _axisSettings[axis].params._axisAreaMax );
+
+ // the CalcMode element
+ KDXML::createStringNode( doc, axisSettingsElement, "CalcMode",
+ KDChartAxisParams::axisCalcModeToString( _axisSettings[axis].params._axisCalcMode ) );
+
+ // the TrueAreaSize element
+ KDXML::createIntNode( doc, axisSettingsElement, "TrueAreaSize",
+ _axisSettings[axis].params._axisTrueAreaSize );
+
+ // the TrueAreaRect element
+ KDXML::createRectNode( doc, axisSettingsElement, "TrueAreaRect",
+ _axisSettings[axis].params._axisTrueAreaRect );
+
+ // the ShowSubDelimiters element
+ KDXML::createBoolNode( doc, axisSettingsElement, "ShowSubDelimiters",
+ _axisSettings[axis].params._axisShowSubDelimiters );
+
+ // the LineVisible element
+ KDXML::createBoolNode( doc, axisSettingsElement, "LineVisible",
+ _axisSettings[axis].params._axisLineVisible );
+
+ // the LineWidth element
+ KDXML::createIntNode( doc, axisSettingsElement, "LineWidth",
+ _axisSettings[axis].params._axisLineWidth );
+
+ // the TrueLineWidth element
+ KDXML::createIntNode( doc, axisSettingsElement, "TrueLineWidth",
+ _axisSettings[axis].params._axisTrueLineWidth );
+
+ // the LineColor element
+ KDXML::createColorNode( doc, axisSettingsElement, "LineColor",
+ _axisSettings[axis].params._axisLineColor );
+
+ // the ShowGrid element
+ KDXML::createBoolNode( doc, axisSettingsElement, "ShowGrid",
+ _axisSettings[axis].params._axisShowGrid );
+
+ // the GridColor element
+ KDXML::createColorNode( doc, axisSettingsElement, "GridColor",
+ _axisSettings[axis].params._axisGridColor );
+
+ // the GridLineWidth element
+ KDXML::createIntNode( doc, axisSettingsElement, "GridLineWidth",
+ _axisSettings[axis].params._axisGridLineWidth );
+
+ // the GridStyle element
+ KDXML::createStringNode( doc, axisSettingsElement, "GridStyle",
+ KDXML::penStyleToString( _axisSettings[axis].params._axisGridStyle ) );
+
+ // the GridSubColor element
+ KDXML::createColorNode( doc, axisSettingsElement, "GridSubColor",
+ _axisSettings[axis].params._axisGridSubColor );
+
+ // the GridSubLineWidth element
+ KDXML::createIntNode( doc, axisSettingsElement, "GridSubLineWidth",
+ _axisSettings[axis].params._axisGridSubLineWidth );
+
+ // the GridSubStyle element
+ KDXML::createStringNode( doc, axisSettingsElement, "GridSubStyle",
+ KDXML::penStyleToString( _axisSettings[axis].params._axisGridSubStyle ) );
+
+ // the ZeroLineColor element
+ KDXML::createColorNode( doc, axisSettingsElement, "ZeroLineColor",
+ _axisSettings[axis].params._axisZeroLineColor );
+
+ // the LabelsVisible element
+ KDXML::createBoolNode( doc, axisSettingsElement, "LabelsVisible",
+ _axisSettings[axis].params._axisLabelsVisible );
+
+ // the LabelsFont element
+ createChartFontNode( doc, axisSettingsElement, "LabelsFont",
+ _axisSettings[axis].params._axisLabelsFont,
+ _axisSettings[axis].params._axisLabelsFontUseRelSize,
+ _axisSettings[axis].params._axisLabelsFontRelSize,
+ _axisSettings[axis].params._axisLabelsFontMinSize );
+
+ // the LabelsDontShrinkFont element
+ KDXML::createBoolNode( doc, axisSettingsElement, "LabelsDontShrinkFont",
+ _axisSettings[axis].params._axisLabelsDontShrinkFont );
+
+ // the LabelsDontAutoRotate element
+ KDXML::createBoolNode( doc, axisSettingsElement, "LabelsDontAutoRotate",
+ _axisSettings[axis].params._axisLabelsDontAutoRotate );
+
+ // the LabelsRotation element
+ KDXML::createIntNode( doc, axisSettingsElement, "LabelsRotation",
+ _axisSettings[axis].params._axisLabelsRotation );
+
+ // the LabelsLeaveOut element
+ KDXML::createIntNode( doc, axisSettingsElement, "LabelsLeaveOut",
+ _axisSettings[axis].params._axisValueLeaveOut );
+
+ // the LabelsColor element
+ KDXML::createColorNode( doc, axisSettingsElement, "LabelsColor",
+ _axisSettings[axis].params._axisLabelsColor );
+
+ // the SteadyValueCalc element
+ KDXML::createBoolNode( doc, axisSettingsElement, "SteadyValueCalc",
+ _axisSettings[axis].params._axisSteadyValueCalc );
+
+ // the ValueStart element
+ if( ! ( KDCHART_AXIS_LABELS_AUTO_LIMIT == _axisSettings[axis].params._axisValueStart ))
+ createChartValueNode( doc, axisSettingsElement, "ValueStart",
+ _axisSettings[axis].params._axisValueStart,
+ 0.0,
+ 0 );
+
+ // the ValueStartIsExact element
+ KDXML::createBoolNode( doc, axisSettingsElement, "ValueStartIsExact",
+ _axisSettings[axis].params._axisValueStartIsExact );
+
+ // the ValueEnd element
+ if( ! ( KDCHART_AXIS_LABELS_AUTO_LIMIT == _axisSettings[axis].params._axisValueEnd ))
+ createChartValueNode( doc, axisSettingsElement, "ValueEnd",
+ _axisSettings[axis].params._axisValueEnd,
+ 0.0,
+ 0 );
+
+ // the ValueDelta element
+ if( ! ( KDCHART_AXIS_LABELS_AUTO_DELTA == _axisSettings[axis].params._axisValueDelta ))
+ KDXML::createDoubleNode( doc, axisSettingsElement, "ValueDelta",
+ _axisSettings[axis].params._axisValueDelta );
+ KDXML::createIntNode( doc, axisSettingsElement, "ValueDeltaScale",
+ _axisSettings[axis].params._axisValueDeltaScale );
+
+ // the ValuesDecreasing element
+ KDXML::createBoolNode( doc, axisSettingsElement, "ValuesDecreasing",
+ _axisSettings[axis].params._axisValuesDecreasing );
+
+ // the TrueLow element
+ KDXML::createDoubleNode( doc, axisSettingsElement, "TrueLow",
+ _axisSettings[axis].params._trueLow );
+
+ // the TrueHigh element
+ KDXML::createDoubleNode( doc, axisSettingsElement, "TrueHigh",
+ _axisSettings[axis].params._trueHigh );
+
+ // the TrueDelta element
+ KDXML::createDoubleNode( doc, axisSettingsElement, "TrueDelta",
+ _axisSettings[axis].params._trueDelta );
+
+ // the ZeroLineStart element
+ QDomElement zeroLineStartElement = doc.createElement( "ZeroLineStart" );
+ axisSettingsElement.appendChild( zeroLineStartElement );
+ zeroLineStartElement.setAttribute( "X", _axisSettings[axis].params._axisZeroLineStartX );
+ zeroLineStartElement.setAttribute( "Y", _axisSettings[axis].params._axisZeroLineStartY );
+
+ // the DigitsBehindComma element
+ KDXML::createIntNode( doc, axisSettingsElement, "DigitsBehindComma",
+ _axisSettings[axis].params._axisDigitsBehindComma );
+
+ // the LabelsDateTimeFormat element
+ KDXML::createStringNode( doc, axisSettingsElement, "LabelsDateTimeFormat",
+ _axisSettings[axis].params._axisLabelsDateTimeFormat );
+
+ // the MaxEmptyInnerSpan element
+ KDXML::createIntNode( doc, axisSettingsElement, "MaxEmptyInnerSpan",
+ _axisSettings[axis].params._axisMaxEmptyInnerSpan );
+
+ // the LabelsFromDataRow element
+ KDXML::createStringNode( doc, axisSettingsElement, "LabelsFromDataRow",
+ KDChartAxisParams::labelsFromDataRowToString( _axisSettings[axis].params._takeLabelsFromDataRow ) );
+
+ // the TextsDataRow element
+ KDXML::createIntNode( doc, axisSettingsElement, "TextsDataRow",
+ _axisSettings[axis].params._labelTextsDataRow );
+
+ // the LabelString elements
+ KDXML::createStringListNodes( doc, axisSettingsElement, "LabelString",
+ &_axisSettings[axis].params._axisLabelStringList );
+
+ // the ShortLabelString elements
+ KDXML::createStringListNodes( doc, axisSettingsElement, "ShortLabelString",
+ &_axisSettings[axis].params._axisShortLabelsStringList );
+
+ // the LabelText elements
+ KDXML::createStringListNodes( doc, axisSettingsElement, "LabelText",
+ &_axisSettings[axis].params._axisLabelTexts );
+
+ // the LabelTextsDirty element
+ KDXML::createBoolNode( doc, axisSettingsElement, "LabelTextsDirty",
+ _axisSettings[axis].params._axisLabelTextsDirty );
+
+ // labels formatting:
+
+ // the extra FirstLabelText element
+ KDXML::createStringNode( doc, axisSettingsElement, "FirstLabelReplacementText",
+ _axisSettings[axis].params._axisFirstLabelText );
+
+ // the extra LastLabelText element
+ KDXML::createStringNode( doc, axisSettingsElement, "LastLabelReplacementText",
+ _axisSettings[axis].params._axisLastLabelText );
+
+ // the LabelsDivPow10 element
+ KDXML::createIntNode( doc, axisSettingsElement, "LabelsDivPow10",
+ _axisSettings[axis].params._axisLabelsDivPow10 );
+
+ // the LabelsDecimalPoint element
+ KDXML::createStringNode( doc, axisSettingsElement, "LabelsDecimalPoint",
+ _axisSettings[axis].params._axisLabelsDecimalPoint );
+
+ // the LabelsThousandsPoint element
+ KDXML::createStringNode( doc, axisSettingsElement, "LabelsThousandsPoint",
+ _axisSettings[axis].params._axisLabelsThousandsPoint );
+
+ // the LabelsNotation element
+ KDXML::createStringNode( doc, axisSettingsElement, "LabelsNotation",
+ KDChartEnums::numberNotationToString( _axisSettings[axis].params._axisLabelsNotation ) );
+
+ // the LabelsPrefix element
+ KDXML::createStringNode( doc, axisSettingsElement, "LabelsPrefix",
+ _axisSettings[axis].params._axisLabelsPrefix );
+
+ // the LabelsPostfix element
+ KDXML::createStringNode( doc, axisSettingsElement, "LabelsPostfix",
+ _axisSettings[axis].params._axisLabelsPostfix );
+
+ // the LabelsTotalLen element
+ KDXML::createIntNode( doc, axisSettingsElement, "LabelsTotalLen",
+ _axisSettings[axis].params._axisLabelsTotalLen );
+
+ // the LabelsPadFill element
+ KDXML::createStringNode( doc, axisSettingsElement, "LabelsPadFill",
+ _axisSettings[axis].params._axisLabelsPadFill );
+
+ // the LabelsBlockAlign element
+ KDXML::createBoolNode( doc, axisSettingsElement, "LabelsBlockAlign",
+ _axisSettings[axis].params._axisLabelsBlockAlign );
+ }
+ }
+}
+
+
+/**
+ Saves the parameters to an XML document.
+
+ \return the XML document that represents the parameters
+ \sa loadXML
+ */
+QDomDocument KDChartParams::saveXML( bool withPI ) const
+{
+ // Create an inital DOM document
+ QString docstart = "<ChartParams/>";
+
+ QDomDocument doc( "ChartParams" );
+ doc.setContent( docstart );
+ if( withPI )
+ doc.appendChild( doc.createProcessingInstruction( "xml", "version=\"1.0\" encoding=\"UTF-8\"" ) );
+
+ QDomElement docRoot = doc.documentElement();
+ docRoot.setAttribute( "xmlns", "http://www.klaralvdalens-datakonsult.se/kdchart" );
+ docRoot.setAttribute( "xmlns:xsi", "http://www.w3.org/2000/10/XMLSchema-instance" );
+ docRoot.setAttribute( "xsi:schemaLocation", "http://www.klaralvdalens-datakonsult.se/kdchart" );
+
+ // the ChartType element
+ QDomElement chartTypeElement = doc.createElement( "ChartType" );
+ docRoot.appendChild( chartTypeElement );
+ chartTypeElement.setAttribute( "primary",
+ chartTypeToString( _chartType ) );
+ chartTypeElement.setAttribute( "secondary",
+ chartTypeToString( _additionalChartType ) );
+
+
+ // the NumValues element
+ KDXML::createIntNode( doc, docRoot, "NumValues", _numValues );
+
+ // the ModeAndChartMap element
+ QDomElement modeAndChartMapElement =
+ doc.createElement( "ModeAndChartMap" );
+ docRoot.appendChild( modeAndChartMapElement );
+ for( QMap<uint,KDChartParams::ModeAndChart>::ConstIterator it = _dataSourceModeAndChart.begin();
+ it != _dataSourceModeAndChart.end(); ++it ) {
+ // Dataset element
+ QDomElement datasetElement = doc.createElement( "Dataset" );
+ QDomText datasetContent =
+ doc.createTextNode( QString::number( it.key() ) );
+ datasetElement.appendChild( datasetContent );
+ modeAndChartMapElement.appendChild( datasetElement );
+ // ModeAndChart element
+ QDomElement modeAndChartElement = doc.createElement( "ModeAndChart" );
+ modeAndChartElement.setAttribute( "Mode", chartSourceModeToString( it.data().mode() ) );
+ modeAndChartElement.setAttribute( "Chart", it.data().chart() );
+ modeAndChartMapElement.appendChild( modeAndChartElement );
+ }
+
+ // the PropertySetMap element
+ QDomElement propertySetMapElement =
+ doc.createElement( "PropertySetMap" );
+ docRoot.appendChild( propertySetMapElement );
+ QIntDictIterator<KDChartPropertySet> it2( _propertySetList );
+ for( ; it2.current(); ++it2 )
+ propertySetMapElement.appendChild( it2.current()->saveXML( doc ) );
+
+ KDXML::createBoolNode( doc, docRoot, "ChartSourceModeWasUsed",
+ _setChartSourceModeWasUsed );
+
+ // the MaxDatasetSourceMode element
+ KDXML::createIntNode( doc, docRoot, "MaxDatasetSourceMode",
+ _maxDatasetSourceMode );
+
+ // the ColorSettings element
+ QDomElement colorSettingsElement =
+ doc.createElement( "ColorSettings" );
+ docRoot.appendChild( colorSettingsElement );
+
+ {
+ // the DataColors element
+ createColorMapNode( doc, colorSettingsElement,
+ "DataColors", _dataColors );
+
+ // the MaxDatasetColor element
+ KDXML::createIntNode( doc, colorSettingsElement, "MaxDatasetColor",
+ _maxDatasetColor );
+
+ // the ShadowBrightnessFactor element
+ KDXML::createDoubleNode( doc, colorSettingsElement,
+ "ShadowBrightnessFactor",
+ _shadowBrightnessFactor );
+
+ // the ShadowPattern element
+ KDXML::createStringNode( doc, colorSettingsElement,
+ "ShadowPattern",
+ KDXML::brushStyleToString(_shadowPattern ) );
+
+ // the ThreeDShadowColors element
+ KDXML::createBoolNode( doc, colorSettingsElement,
+ "ThreeDShadowColors",
+ _threeDShadowColors );
+
+ // the DataColorsShadow1 element
+ createColorMapNode( doc, colorSettingsElement,
+ "DataColorsShadow1",
+ _dataColorsShadow1 );
+
+ // the DataColorsShadow2 element
+ createColorMapNode( doc, colorSettingsElement,
+ "DataColorsShadow2",
+ _dataColorsShadow2 );
+
+ // the OutlineDataColor element
+ KDXML::createColorNode( doc, colorSettingsElement,
+ "OutlineDataColor",
+ _outlineDataColor );
+
+ // the OutlineDataLineWidth element
+ KDXML::createIntNode( doc, colorSettingsElement,
+ "OutlineDataLineWidth",
+ _outlineDataLineWidth );
+
+ // the OutlineDataLineStyle element
+ QDomElement outlineDataLineStyleElement =
+ doc.createElement( "OutlineDataLineStyle" );
+ colorSettingsElement.appendChild( outlineDataLineStyleElement );
+ outlineDataLineStyleElement.setAttribute( "Style",
+ KDXML::penStyleToString( _outlineDataLineStyle ) );
+ }
+
+
+ // the BarSettings elemenet
+ QDomElement barSettingsElement =
+ doc.createElement( "BarSettings" );
+ docRoot.appendChild( barSettingsElement );
+
+ {
+ // the SubType element
+ KDXML::createStringNode( doc, barSettingsElement,
+ "SubType", KDChartParams::barChartSubTypeToString( _barChartSubType ) );
+
+ KDXML::createBoolNode( doc, barSettingsElement,
+ "ThreeDBars", _threeDBars );
+
+ KDXML::createDoubleNode( doc, barSettingsElement,
+ "ThreeDBarDepth", _threeDBarDepth );
+
+ KDXML::createIntNode( doc, barSettingsElement,
+ "DatasetGap", _datasetGap );
+
+ KDXML::createBoolNode( doc, barSettingsElement,
+ "DatasetGapIsRelative", _datasetGapIsRelative );
+
+ KDXML::createIntNode( doc, barSettingsElement,
+ "ValueBlockGap", _valueBlockGap );
+
+ KDXML::createBoolNode( doc, barSettingsElement,
+ "ValueBlockGapIsRelative",
+ _valueBlockGapIsRelative );
+
+ KDXML::createIntNode( doc, barSettingsElement,
+ "BarWidth", _barWidth );
+
+ KDXML::createBoolNode( doc, barSettingsElement,
+ "SolidExcessArrows", _solidExcessArrows );
+ }
+
+
+ // the LineSettings element
+ QDomElement lineSettingsElement =
+ doc.createElement( "LineSettings" );
+ docRoot.appendChild( lineSettingsElement );
+
+ {
+ // the SubType element
+ KDXML::createStringNode( doc, lineSettingsElement,
+ "SubType", KDChartParams::lineChartSubTypeToString( _lineChartSubType ) );
+
+ // the Marker element
+ KDXML::createBoolNode( doc, lineSettingsElement,
+ "Marker", _lineMarker );
+
+ // the MarkerStyles elements
+ {for( QMap<uint,KDChartParams::LineMarkerStyle>::ConstIterator it = _lineMarkerStyles.begin();
+ it != _lineMarkerStyles.end(); ++it ) {
+ QDomElement markerStyleElement = doc.createElement( "MarkerStyle" );
+ lineSettingsElement.appendChild( markerStyleElement );
+ markerStyleElement.setAttribute( "Dataset", it.key() );
+ markerStyleElement.setAttribute( "Style", KDChartParams::lineMarkerStyleToString( it.data() ) );
+ }}
+
+ // the MarkerSize element
+ KDXML::createSizeNode( doc, lineSettingsElement,
+ "MarkerSize", _lineMarkerSize );
+
+ // the LineWidth element
+ KDXML::createIntNode( doc, lineSettingsElement,
+ "LineWidth", _lineWidth );
+
+ // the LineColor element
+ KDXML::createColorNode( doc, lineSettingsElement,
+ "LineColor",
+ _lineColor );
+
+ // the LineStyle element
+ QDomElement lineStyleElement =
+ doc.createElement( "LineStyle" );
+ lineSettingsElement.appendChild( lineStyleElement );
+ lineStyleElement.setAttribute( "Style",
+ KDXML::penStyleToString( _lineStyle ) );
+
+ // the DatasetLineStyles elements
+ {for( QMap<uint, PenStyle>::ConstIterator it = _datasetLineStyles.begin();
+ it != _datasetLineStyles.end(); ++it ) {
+ QDomElement lineStyleElement = doc.createElement( "DatasetLineStyle" );
+ lineSettingsElement.appendChild( lineStyleElement );
+ lineStyleElement.setAttribute( "Dataset", it.key() );
+ lineStyleElement.setAttribute( "Style", KDXML::penStyleToString( it.data() ) );
+ }}
+
+ // the ThreeD element
+ KDXML::createBoolNode( doc, lineSettingsElement,
+ "ThreeD", _threeDLines );
+
+ // the ThreeDDepth element
+ KDXML::createIntNode( doc, lineSettingsElement,
+ "ThreeDDepth", _threeDLineDepth );
+
+ // the ThreeDXRotation element
+ KDXML::createIntNode( doc, lineSettingsElement,
+ "ThreeDXRotation", _threeDLineXRotation );
+
+ // the ThreeDYRotation element
+ KDXML::createIntNode( doc, lineSettingsElement,
+ "ThreeDYRotation", _threeDLineYRotation );
+ }
+
+
+ // the AreaSettings element
+ QDomElement areaSettingsElement =
+ doc.createElement( "AreaSettings" );
+ docRoot.appendChild( areaSettingsElement );
+
+ {
+ // the SubType element
+ KDXML::createStringNode( doc, areaSettingsElement, "SubType",
+ KDChartParams::areaChartSubTypeToString( _areaChartSubType ) );
+
+ // the Location elemenet
+ KDXML::createStringNode( doc, areaSettingsElement, "Location",
+ KDChartParams::areaLocationToString( _areaLocation ) );
+ }
+
+
+ // the PieRingSettings element
+ QDomElement pieRingSettingsElement =
+ doc.createElement( "PieRingSettings" );
+ docRoot.appendChild( pieRingSettingsElement );
+
+ {
+ // the Explode element
+ KDXML::createBoolNode( doc, pieRingSettingsElement, "Explode",
+ _explode );
+
+ // the DefaultExplodeFactor element
+ KDXML::createDoubleNode( doc, pieRingSettingsElement, "DefaultExplodeFactor",
+ _explodeFactor );
+
+ // the ExplodeFactors element
+ createDoubleMapNode( doc, pieRingSettingsElement, "ExplodeFactors",
+ _explodeFactors );
+
+ // the ExplodeSegment element
+ for( QValueList<int>::ConstIterator it = _explodeList.begin();
+ it != _explodeList.end(); ++it )
+ KDXML::createIntNode( doc, pieRingSettingsElement,
+ "ExplodeSegment", *it );
+
+ // the ThreeDPies element
+ KDXML::createBoolNode( doc, pieRingSettingsElement, "ThreeDPies",
+ _threeDPies );
+
+ // the ThreeDPieHeight element
+ KDXML::createIntNode( doc, pieRingSettingsElement, "ThreeDPieHeight",
+ _threeDPieHeight );
+
+ // the PieStart element
+ KDXML::createIntNode( doc, pieRingSettingsElement, "PieStart",
+ _pieStart );
+
+ // the RingStart element
+ KDXML::createIntNode( doc, pieRingSettingsElement, "RingStart",
+ _ringStart );
+
+ // the RelativeRingThickness element
+ KDXML::createBoolNode( doc, pieRingSettingsElement,
+ "RelativeRingThickness", _relativeRingThickness );
+ }
+
+ // the HiLoSettings element
+ QDomElement hiLoSettingsElement =
+ doc.createElement( "HiLoSettings" );
+ docRoot.appendChild( hiLoSettingsElement );
+ {
+ // the SubType element
+ KDXML::createStringNode( doc, hiLoSettingsElement, "SubType",
+ KDChartParams::hiLoChartSubTypeToString( _hiLoChartSubType ) );
+
+ // the PrintLowValues element
+ KDXML::createBoolNode( doc, hiLoSettingsElement, "PrintLowValues",
+ _hiLoChartPrintLowValues );
+
+ // the LowValuesFont element
+ createChartFontNode( doc, hiLoSettingsElement, "LowValuesFont",
+ _hiLoChartLowValuesFont,
+ _hiLoChartLowValuesUseFontRelSize,
+ _hiLoChartLowValuesFontRelSize );
+
+ // the LowValuesColor element
+ KDXML::createColorNode( doc, hiLoSettingsElement, "LowValuesColor",
+ _hiLoChartLowValuesColor );
+
+ // the PrintHighValues element
+ KDXML::createBoolNode( doc, hiLoSettingsElement, "PrintHighValues",
+ _hiLoChartPrintHighValues );
+
+ // the HighValuesFont element
+ createChartFontNode( doc, hiLoSettingsElement, "HighValuesFont",
+ _hiLoChartHighValuesFont,
+ _hiLoChartHighValuesUseFontRelSize,
+ _hiLoChartHighValuesFontRelSize );
+
+ // the HighValuesColor element
+ KDXML::createColorNode( doc, hiLoSettingsElement, "HighValuesColor",
+ _hiLoChartHighValuesColor );
+
+ // the PrintOpenValues element
+ KDXML::createBoolNode( doc, hiLoSettingsElement, "PrintOpenValues",
+ _hiLoChartPrintOpenValues );
+
+ // the OpenValuesFont element
+ createChartFontNode( doc, hiLoSettingsElement, "OpenValuesFont",
+ _hiLoChartOpenValuesFont,
+ _hiLoChartOpenValuesUseFontRelSize,
+ _hiLoChartOpenValuesFontRelSize );
+
+ // the OpenValuesColor element
+ KDXML::createColorNode( doc, hiLoSettingsElement, "OpenValuesColor",
+ _hiLoChartOpenValuesColor );
+
+ // the PrintCloseValues element
+ KDXML::createBoolNode( doc, hiLoSettingsElement, "PrintCloseValues",
+ _hiLoChartPrintCloseValues );
+
+ // the CloseValuesFont element
+ createChartFontNode( doc, hiLoSettingsElement, "CloseValuesFont",
+ _hiLoChartCloseValuesFont,
+ _hiLoChartCloseValuesUseFontRelSize,
+ _hiLoChartCloseValuesFontRelSize );
+
+ // the CloseValuesColor element
+ KDXML::createColorNode( doc, hiLoSettingsElement, "CloseValuesColor",
+ _hiLoChartCloseValuesColor );
+ }
+
+
+
+ // the BoxAndWhiskerSettings element
+ QDomElement bWSettingsElement =
+ doc.createElement( "BoxAndWhiskerSettings" );
+ docRoot.appendChild( bWSettingsElement );
+ {
+ // the SubType element
+ KDXML::createStringNode( doc, bWSettingsElement, "SubType",
+ KDChartParams::bWChartSubTypeToString( _BWChartSubType ) );
+
+ // the fences elements
+ KDXML::createDoubleNode( doc, bWSettingsElement, "FenceUpperInner",
+ _BWChartFenceUpperInner );
+ KDXML::createDoubleNode( doc, bWSettingsElement, "FenceLowerInner",
+ _BWChartFenceLowerInner );
+ KDXML::createDoubleNode( doc, bWSettingsElement, "FenceUpperOuter",
+ _BWChartFenceUpperInner );
+ KDXML::createDoubleNode( doc, bWSettingsElement, "FenceLowerOuter",
+ _BWChartFenceLowerOuter );
+
+ // the brush to be used
+ KDXML::createBrushNode( doc, bWSettingsElement, "Brush",
+ _BWChartBrush );
+
+ // the size of the outlier markers
+ KDXML::createIntNode( doc, bWSettingsElement, "OutlierSize",
+ _BWChartOutValMarkerSize );
+
+ // the PrintStatistics elements
+ for( int i = BWStatValSTART; i <= BWStatValEND; ++i ){
+ QDomElement printStatElement =
+ doc.createElement( "PrintStatistics"+bWChartStatValToString( (BWStatVal)i ) );
+ KDXML::createBoolNode( doc, printStatElement, "Active",
+ _BWChartStatistics[ i ].active );
+ createChartFontNode( doc, printStatElement, "Font",
+ _BWChartStatistics[ i ].font,
+ _BWChartStatistics[ i ].useRelSize,
+ _BWChartStatistics[ i ].relSize );
+ KDXML::createColorNode( doc, printStatElement, "Color",
+ _BWChartStatistics[ i ].color );
+ KDXML::createBrushNode( doc, printStatElement, "Brush",
+ _BWChartStatistics[ i ].brush );
+ }
+ }
+
+
+
+ // the PolarSettings element
+ QDomElement polarSettingsElement =
+ doc.createElement( "PolarSettings" );
+ docRoot.appendChild( polarSettingsElement );
+
+ {
+ // the SubType element
+ KDXML::createStringNode( doc, polarSettingsElement,
+ "SubType", KDChartParams::polarChartSubTypeToString( _polarChartSubType ) );
+
+ // the Marker element
+ KDXML::createBoolNode( doc, polarSettingsElement,
+ "Marker", _polarMarker );
+
+ // the MarkerStyles elements
+ for( QMap<uint,KDChartParams::PolarMarkerStyle>::ConstIterator it = _polarMarkerStyles.begin();
+ it != _polarMarkerStyles.end(); ++it ) {
+ QDomElement markerStyleElement = doc.createElement( "MarkerStyle" );
+ polarSettingsElement.appendChild( markerStyleElement );
+ markerStyleElement.setAttribute( "Dataset", it.key() );
+ markerStyleElement.setAttribute( "Style", KDChartParams::polarMarkerStyleToString( it.data() ) );
+ }
+
+ // the MarkerSize element
+ KDXML::createSizeNode( doc, polarSettingsElement,
+ "MarkerSize", _polarMarkerSize );
+
+ // the PolarLineWidth element
+ KDXML::createIntNode( doc, polarSettingsElement,
+ "PolarLineWidth", _polarLineWidth );
+ }
+
+
+
+ // the LegendSettings element
+ QDomElement legendSettingsElement =
+ doc.createElement( "LegendSettings" );
+ docRoot.appendChild( legendSettingsElement );
+ {
+ // the Position element
+ KDXML::createStringNode( doc, legendSettingsElement, "Position",
+ KDChartParams::legendPositionToString( _legendPosition ) );
+
+ // the Orientation element
+ KDXML::createOrientationNode( doc, legendSettingsElement,
+ "Orientation", _legendOrientation );
+
+ // the ShowLines element
+ KDXML::createBoolNode( doc, legendSettingsElement,
+ "ShowLines", _legendShowLines );
+
+ // the Source element
+ KDXML::createStringNode( doc, legendSettingsElement, "Source",
+ KDChartParams::legendSourceToString( _legendSource ) );
+
+ // the Text elements
+ for( QMap<int,QString>::ConstIterator it = _legendText.begin();
+ it != _legendText.end(); ++it ) {
+ QDomElement legendTextElement = doc.createElement( "LegendText" );
+ legendSettingsElement.appendChild( legendTextElement );
+ legendTextElement.setAttribute( "Dataset", it.key() );
+ legendTextElement.setAttribute( "Text", it.data() );
+ }
+
+ // the TextColor element
+ KDXML::createColorNode( doc, legendSettingsElement, "TextColor",
+ _legendTextColor );
+
+ // the TextFont element
+ createChartFontNode( doc, legendSettingsElement, "TextFont",
+ _legendFont,
+ _legendFontUseRelSize,
+ _legendFontRelSize );
+
+ // the TitleText element
+ KDXML::createStringNode( doc, legendSettingsElement, "TitleText",
+ _legendTitleText );
+
+ // the TitleColor element
+ KDXML::createColorNode( doc, legendSettingsElement, "TitleColor",
+ _legendTitleTextColor );
+
+ // the TitleFont element
+ createChartFontNode( doc, legendSettingsElement, "TitleFont",
+ _legendTitleFont,
+ _legendTitleFontUseRelSize,
+ _legendTitleFontRelSize );
+
+ // the Spacing element
+ KDXML::createIntNode( doc, legendSettingsElement, "Spacing",
+ _legendSpacing );
+ }
+
+ saveAxesToXML(doc, docRoot);
+
+ // the HeaderFooterSettings elements
+ for( int hf = 0; hf < 18; hf++ ) {
+ QDomElement hfSettingsElement =
+ doc.createElement( "HeaderFooterSettings" );
+ docRoot.appendChild( hfSettingsElement );
+ {
+ KDXML::createStringNode( doc, hfSettingsElement, "Text",
+ _hdFtParams[hf]._text );
+ createChartFontNode( doc, hfSettingsElement, "Font",
+ _hdFtParams[hf]._font,
+ _hdFtParams[hf]._fontUseRelSize,
+ _hdFtParams[hf]._fontRelSize );
+ KDXML::createColorNode( doc, hfSettingsElement, "Color",
+ _hdFtParams[hf]._color );
+ }
+ }
+
+
+ // the GlobalLeading element
+ QDomElement globalLeadingElement =
+ doc.createElement( "GlobalLeading" );
+ docRoot.appendChild( legendSettingsElement );
+ {
+ KDXML::createIntNode( doc, globalLeadingElement, "Left",
+ _globalLeadingLeft );
+ KDXML::createIntNode( doc, globalLeadingElement, "Top",
+ _globalLeadingTop );
+ KDXML::createIntNode( doc, globalLeadingElement, "Right",
+ _globalLeadingRight );
+ KDXML::createIntNode( doc, globalLeadingElement, "Bottom",
+ _globalLeadingBottom );
+ }
+
+ // the DataValuesSettings1 element
+ QDomElement dataValuesSettings1Element =
+ doc.createElement( "DataValuesSettings1" );
+ docRoot.appendChild( dataValuesSettings1Element );
+ {
+ KDXML::createBoolNode( doc, dataValuesSettings1Element, "PrintDataValues",
+ _printDataValuesSettings._printDataValues );
+ KDXML::createIntNode( doc, dataValuesSettings1Element, "DivPow10",
+ _printDataValuesSettings._divPow10 );
+ KDXML::createIntNode( doc, dataValuesSettings1Element, "DigitsBehindComma",
+ _printDataValuesSettings._digitsBehindComma );
+ createChartFontNode( doc, dataValuesSettings1Element, "Font",
+ _printDataValuesSettings._dataValuesFont,
+ _printDataValuesSettings._dataValuesUseFontRelSize,
+ _printDataValuesSettings._dataValuesFontRelSize );
+ KDXML::createColorNode( doc, dataValuesSettings1Element, "Color",
+ _printDataValuesSettings._dataValuesColor );
+ KDXML::createBrushNode( doc, dataValuesSettings1Element, "Background",
+ _printDataValuesSettings._dataValuesBrush );
+ KDXML::createBoolNode( doc, dataValuesSettings1Element, "AutoColor",
+ _printDataValuesSettings._dataValuesAutoColor );
+ KDXML::createStringNode( doc, dataValuesSettings1Element,
+ "AnchorNegativePosition",
+ KDChartEnums::positionFlagToString( _printDataValuesSettings._dataValuesAnchorNegativePosition ) );
+ KDXML::createIntNode( doc, dataValuesSettings1Element,
+ "AnchorNegativeAlign",
+ _printDataValuesSettings._dataValuesAnchorNegativeAlign );
+ KDXML::createIntNode( doc, dataValuesSettings1Element,
+ "AnchorNegativeDeltaX",
+ _printDataValuesSettings._dataValuesAnchorNegativeDeltaX );
+ KDXML::createIntNode( doc, dataValuesSettings1Element,
+ "AnchorNegativeDeltaY",
+ _printDataValuesSettings._dataValuesAnchorNegativeDeltaY );
+ KDXML::createIntNode( doc, dataValuesSettings1Element,
+ "NegativeRotation",
+ _printDataValuesSettings._dataValuesNegativeRotation );
+ KDXML::createStringNode( doc, dataValuesSettings1Element,
+ "AnchorPositivePosition",
+ KDChartEnums::positionFlagToString( _printDataValuesSettings._dataValuesAnchorPositivePosition ) );
+ KDXML::createIntNode( doc, dataValuesSettings1Element,
+ "AnchorPositiveAlign",
+ _printDataValuesSettings._dataValuesAnchorPositiveAlign );
+ KDXML::createIntNode( doc, dataValuesSettings1Element,
+ "AnchorPositiveDeltaX",
+ _printDataValuesSettings._dataValuesAnchorPositiveDeltaX );
+ KDXML::createIntNode( doc, dataValuesSettings1Element,
+ "AnchorPositiveDeltaY",
+ _printDataValuesSettings._dataValuesAnchorPositiveDeltaY );
+ KDXML::createIntNode( doc, dataValuesSettings1Element,
+ "PositiveRotation",
+ _printDataValuesSettings._dataValuesPositiveRotation );
+
+ KDXML::createStringNode( doc, dataValuesSettings1Element,
+ "LayoutPolicy",
+ KDChartEnums::layoutPolicyToString( _printDataValuesSettings._dataValuesLayoutPolicy ) );
+
+ KDXML::createBoolNode( doc, dataValuesSettings1Element, "ShowInfinite",
+ _printDataValuesSettings._dataValuesShowInfinite );
+ }
+
+ // the DataValuesSettings2 element
+ QDomElement dataValuesSettings2Element =
+ doc.createElement( "DataValuesSettings2" );
+ docRoot.appendChild( dataValuesSettings2Element );
+ {
+ KDXML::createBoolNode( doc, dataValuesSettings2Element, "PrintDataValues",
+ _printDataValuesSettings2._printDataValues );
+ KDXML::createIntNode( doc, dataValuesSettings2Element, "DivPow10",
+ _printDataValuesSettings2._divPow10 );
+ KDXML::createIntNode( doc, dataValuesSettings2Element, "DigitsBehindComma",
+ _printDataValuesSettings2._digitsBehindComma );
+ createChartFontNode( doc, dataValuesSettings2Element, "Font",
+ _printDataValuesSettings2._dataValuesFont,
+ _printDataValuesSettings2._dataValuesUseFontRelSize,
+ _printDataValuesSettings2._dataValuesFontRelSize );
+ KDXML::createColorNode( doc, dataValuesSettings2Element, "Color",
+ _printDataValuesSettings2._dataValuesColor );
+ KDXML::createBrushNode( doc, dataValuesSettings2Element, "Background",
+ _printDataValuesSettings2._dataValuesBrush );
+ KDXML::createBoolNode( doc, dataValuesSettings2Element, "AutoColor",
+ _printDataValuesSettings2._dataValuesAutoColor );
+ KDXML::createStringNode( doc, dataValuesSettings2Element,
+ "AnchorNegativePosition",
+ KDChartEnums::positionFlagToString( _printDataValuesSettings2._dataValuesAnchorNegativePosition ) );
+ KDXML::createIntNode( doc, dataValuesSettings2Element,
+ "AnchorNegativeAlign",
+ _printDataValuesSettings2._dataValuesAnchorNegativeAlign );
+ KDXML::createIntNode( doc, dataValuesSettings2Element,
+ "AnchorNegativeDeltaX",
+ _printDataValuesSettings2._dataValuesAnchorNegativeDeltaX );
+ KDXML::createIntNode( doc, dataValuesSettings2Element,
+ "AnchorNegativeDeltaY",
+ _printDataValuesSettings2._dataValuesAnchorNegativeDeltaY );
+ KDXML::createIntNode( doc, dataValuesSettings2Element,
+ "NegativeRotation",
+ _printDataValuesSettings2._dataValuesNegativeRotation );
+ KDXML::createStringNode( doc, dataValuesSettings2Element,
+ "AnchorPositivePosition",
+ KDChartEnums::positionFlagToString( _printDataValuesSettings2._dataValuesAnchorPositivePosition ) );
+ KDXML::createIntNode( doc, dataValuesSettings2Element,
+ "AnchorPositiveAlign",
+ _printDataValuesSettings2._dataValuesAnchorPositiveAlign );
+ KDXML::createIntNode( doc, dataValuesSettings2Element,
+ "AnchorPositiveDeltaX",
+ _printDataValuesSettings2._dataValuesAnchorPositiveDeltaX );
+ KDXML::createIntNode( doc, dataValuesSettings2Element,
+ "AnchorPositiveDeltaY",
+ _printDataValuesSettings2._dataValuesAnchorPositiveDeltaY );
+ KDXML::createIntNode( doc, dataValuesSettings2Element,
+ "PositiveRotation",
+ _printDataValuesSettings2._dataValuesPositiveRotation );
+
+ KDXML::createStringNode( doc, dataValuesSettings2Element,
+ "LayoutPolicy",
+ KDChartEnums::layoutPolicyToString( _printDataValuesSettings2._dataValuesLayoutPolicy ) );
+
+ KDXML::createBoolNode( doc, dataValuesSettings2Element, "ShowInfinite",
+ _printDataValuesSettings2._dataValuesShowInfinite );
+ }
+
+ // global settings for data value settings of _all_ charts
+ QDomElement dataValuesGlobalSettingsElement =
+ doc.createElement( "DataValuesGlobalSettings" );
+ docRoot.appendChild( dataValuesGlobalSettingsElement );
+ {
+ KDXML::createBoolNode( doc, dataValuesGlobalSettingsElement,
+ "allowOverlappingTexts",
+ _allowOverlappingDataValueTexts );
+ }
+
+ // the AreaMap element
+ QDomElement areaMapElement =
+ doc.createElement( "AreaMap" );
+ docRoot.appendChild( areaMapElement );
+ {
+ QDictIterator<KDChartFrameSettings> it( _areaDict );
+ for( ; it.current(); ++it ){
+ KDChartFrameSettings::createFrameSettingsNode( doc, areaMapElement,
+ "FrameSettings",
+ it.current(),
+ it.currentKey().left(5).stripWhiteSpace().toUInt() );
+ }
+ }
+
+ // the CustomBoxMap element
+ QDomElement customBoxMapElement =
+ doc.createElement( "CustomBoxMap" );
+ docRoot.appendChild( customBoxMapElement );
+ {
+ QIntDictIterator<KDChartCustomBox> it( _customBoxDict );
+ for( ; it.current(); ++it ){
+ KDXML::createIntNode( doc, customBoxMapElement, "Number", it.currentKey() );
+ KDChartCustomBox::createCustomBoxNode( doc, customBoxMapElement,
+ "CustomBox", it );
+ }
+ }
+
+
+ return doc;
+}
+
+
+/**
+ \fn QTextStream& operator>>( QTextStream& s, KDChartParams& p );
+
+ Reads the an XML document from the text stream s into the
+ KDChartParams object p
+
+ \param s the text stream to read from
+ \param p the KDChartParams object to read into
+ \return the text stream after the read operation
+ */
+QTextStream& operator>>( QTextStream& s, KDChartParams& p )
+{
+ QDomDocument doc( "ChartParams" );
+ // would be nicer if QDomDocument could read from a QTextStream...
+ QString docString = s.read();
+ doc.setContent( docString );
+
+ p.loadXML( doc );
+
+ return s;
+}
+
+
+/**
+ Helper method called by loadXML() only.
+ */
+void KDChartParams::loadAxesFormXML(int& curAxisSettings, QDomElement& element)
+{
+ KDChartAxisParams* axisSettings =
+ &( _axisSettings[ curAxisSettings ].params );
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "Type" ) {
+ QString string;
+ if( KDXML::readStringNode( element, string ) )
+ axisSettings->_axisType = KDChartAxisParams::stringToAxisType( string );
+ } else if( tagName == "Visible" ) {
+ bool visible;
+ if( KDXML::readBoolNode( element, visible ) )
+ axisSettings->_axisVisible = visible;
+ } else if( tagName == "LabelsTouchEdges" ) {
+ bool labelsTouchEdges;
+ if( KDXML::readBoolNode( element, labelsTouchEdges ) )
+ axisSettings->_axisLabelsTouchEdges = labelsTouchEdges;
+ } else if( tagName == "AreaMode" ) {
+ QString string;
+ if( KDXML::readStringNode( element, string ) )
+ axisSettings->_axisAreaMode = KDChartAxisParams::stringToAxisAreaMode( string );
+ } else if( tagName == "UseAvailableSpaceFrom" ) {
+ int spaceFrom;
+ if( KDXML::readIntNode( element, spaceFrom ) )
+ axisSettings->_axisUseAvailableSpaceFrom = spaceFrom;
+ } else if( tagName == "UseAvailableSpaceTo" ) {
+ int spaceTo;
+ if( KDXML::readIntNode( element, spaceTo ) )
+ axisSettings->_axisUseAvailableSpaceTo = spaceTo;
+ } else if( tagName == "IsometricReferenceAxis" ) {
+ int isoRefAxis;
+ if( KDXML::readIntNode( element, isoRefAxis ) )
+ axisSettings->_axisIsoRefAxis = isoRefAxis;
+ } else if( tagName == "AreaMin" ) {
+ int areaMin;
+ if( KDXML::readIntNode( element, areaMin ) )
+ axisSettings->_axisAreaMin = areaMin;
+ } else if( tagName == "AreaMax" ) {
+ int areaMax;
+ if( KDXML::readIntNode( element, areaMax ) )
+ axisSettings->_axisAreaMax = areaMax;
+ } else if( tagName == "CalcMode" ) {
+ QString string;
+ if( KDXML::readStringNode( element, string ) )
+ axisSettings->_axisCalcMode = KDChartAxisParams::stringToAxisCalcMode( string );
+ } else if( tagName == "TrueAreaSize" ) {
+ int trueAreaSize;
+ if( KDXML::readIntNode( element, trueAreaSize ) )
+ axisSettings->_axisTrueAreaSize = trueAreaSize;
+ } else if( tagName == "TrueAreaRect" ) {
+ QRect trueAreaRect;
+ if( KDXML::readRectNode( element, trueAreaRect ) )
+ axisSettings->_axisTrueAreaRect = trueAreaRect;
+ } else if( tagName == "ShowSubDelimiters" ) {
+ bool showSubDelimiters;
+ if( KDXML::readBoolNode( element, showSubDelimiters ) )
+ axisSettings->_axisShowSubDelimiters = showSubDelimiters;
+ } else if( tagName == "LineVisible" ) {
+ bool lineVisible;
+ if( KDXML::readBoolNode( element, lineVisible ) )
+ axisSettings->_axisLineVisible = lineVisible;
+ } else if( tagName == "LineWidth" ) {
+ int lineWidth;
+ if( KDXML::readIntNode( element, lineWidth ) )
+ axisSettings->_axisLineWidth = lineWidth;
+ } else if( tagName == "TrueLineWidth" ) {
+ int trueLineWidth;
+ if( KDXML::readIntNode( element, trueLineWidth ) )
+ axisSettings->_axisTrueLineWidth = trueLineWidth;
+ } else if( tagName == "LineColor" ) {
+ QColor color;
+ if( KDXML::readColorNode( element, color ) )
+ axisSettings->_axisLineColor = color;
+ } else if( tagName == "ShowGrid" ) {
+ bool showGrid;
+ if( KDXML::readBoolNode( element, showGrid ) )
+ axisSettings->_axisShowGrid = showGrid;
+ } else if( tagName == "GridColor" ) {
+ QColor color;
+ if( KDXML::readColorNode( element, color ) )
+ axisSettings->_axisGridColor = color;
+ } else if( tagName == "GridLineWidth" ) {
+ int gridLineWidth;
+ if( KDXML::readIntNode( element, gridLineWidth ) )
+ axisSettings->_axisGridLineWidth = gridLineWidth;
+ } else if( tagName == "GridStyle" ) {
+ if( element.hasAttribute( "Style" ) )
+ axisSettings->_axisGridStyle = KDXML::stringToPenStyle( element.attribute( "Style" ) );
+ } else if( tagName == "GridSubColor" ) {
+ QColor color;
+ if( KDXML::readColorNode( element, color ) )
+ axisSettings->_axisGridSubColor = color;
+ } else if( tagName == "GridSubLineWidth" ) {
+ int gridSubLineWidth;
+ if( KDXML::readIntNode( element, gridSubLineWidth ) )
+ axisSettings->_axisGridSubLineWidth = gridSubLineWidth;
+ } else if( tagName == "GridSubStyle" ) {
+ if( element.hasAttribute( "Style" ) )
+ axisSettings->_axisGridSubStyle = KDXML::stringToPenStyle( element.attribute( "Style" ) );
+ } else if( tagName == "ZeroLineColor" ) {
+ QColor color;
+ if( KDXML::readColorNode( element, color ) )
+ axisSettings->_axisZeroLineColor = color;
+ } else if( tagName == "LabelsVisible" ) {
+ bool labelsVisible;
+ if( KDXML::readBoolNode( element, labelsVisible ) )
+ axisSettings->_axisLabelsVisible = labelsVisible;
+ } else if( tagName == "LabelsFont" ) {
+ readChartFontNode( element,
+ axisSettings->_axisLabelsFont,
+ axisSettings->_axisLabelsFontUseRelSize,
+ axisSettings->_axisLabelsFontRelSize,
+ &axisSettings->_axisLabelsFontMinSize );
+ } else if( tagName == "LabelsDontShrinkFont" ) {
+ bool dontShrink;
+ if( KDXML::readBoolNode( element, dontShrink ) )
+ axisSettings->_axisLabelsDontShrinkFont = dontShrink;
+ } else if( tagName == "LabelsDontAutoRotate" ) {
+ bool dontRotate;
+ if( KDXML::readBoolNode( element, dontRotate ) )
+ axisSettings->_axisLabelsDontAutoRotate = dontRotate;
+ } else if( tagName == "LabelsRotation" ) {
+ int rotation;
+ if( KDXML::readIntNode( element, rotation ) )
+ axisSettings->_axisLabelsRotation = rotation;
+ } else if( tagName == "LabelsLeaveOut" ) {
+ int leaveOut;
+ if( KDXML::readIntNode( element, leaveOut ) )
+ axisSettings->_axisValueLeaveOut = leaveOut;
+ } else if( tagName == "LabelsColor" ) {
+ QColor color;
+ if( KDXML::readColorNode( element, color ) )
+ axisSettings->_axisLabelsColor = color;
+ } else if( tagName == "SteadyValueCalc" ) {
+ bool steadyValueCalc;
+ if( KDXML::readBoolNode( element, steadyValueCalc ) )
+ axisSettings->_axisSteadyValueCalc = steadyValueCalc;
+ } else if( tagName == "ValueStart" ) {
+ QVariant valX, valY;
+ int propID;
+ if( readChartValueNode( element, valY, valX, propID ) &&
+ QVariant::Double == valY.type() )
+ axisSettings->_axisValueStart = valY.toDouble();
+ } else if( tagName == "ValueStartIsExact" ) {
+ bool isExactValue;
+ if( KDXML::readBoolNode( element, isExactValue ) )
+ axisSettings->_axisValueStartIsExact = isExactValue;
+ } else if( tagName == "ValueEnd" ) {
+ QVariant valX, valY;
+ int propID;
+ if( readChartValueNode( element, valY, valX, propID ) &&
+ QVariant::Double == valY.type() )
+ axisSettings->_axisValueEnd = valY.toDouble();
+ } else if( tagName == "ValueDelta" ) {
+ double valueDelta;
+ if( KDXML::readDoubleNode( element, valueDelta ) )
+ axisSettings->_axisValueDelta = valueDelta;
+ } else if( tagName == "ValueDeltaScale" ) {
+ int valueDeltaScale;
+ if( KDXML::readIntNode( element, valueDeltaScale ) )
+ axisSettings->_axisValueDeltaScale = (KDChartAxisParams::ValueScale)valueDeltaScale;
+ } else if( tagName == "ValuesDecreasing" ) {
+ bool decreasing;
+ if( KDXML::readBoolNode( element, decreasing ) )
+ axisSettings->_axisValuesDecreasing = decreasing;
+ } else if( tagName == "TrueLow" ) {
+ double trueLow;
+ if( KDXML::readDoubleNode( element, trueLow ) )
+ axisSettings->_trueLow = trueLow;
+ } else if( tagName == "TrueHigh" ) {
+ double trueHigh;
+ if( KDXML::readDoubleNode( element, trueHigh ) )
+ axisSettings->_trueHigh = trueHigh;
+ } else if( tagName == "TrueDelta" ) {
+ double trueDelta;
+ if( KDXML::readDoubleNode( element, trueDelta ) )
+ axisSettings->_trueDelta = trueDelta;
+ } else if( tagName == "ZeroLineStart" ) {
+ double x = 0.0;
+ double y = 0.0;
+ bool ok = true;
+ if( element.hasAttribute( "X" ) &&
+ element.hasAttribute( "Y" ) ) {
+ x = element.attribute( "X" ).toDouble( &ok );
+ if( ok )
+ y = element.attribute( "Y" ).toDouble( &ok );
+ } else
+ ok = false;
+
+ if( ok ) {
+ axisSettings->_axisZeroLineStartX = x;
+ axisSettings->_axisZeroLineStartY = y;
+ }
+ } else if( tagName == "DigitsBehindComma" ) {
+ int digitsBehindComma;
+ if( KDXML::readIntNode( element, digitsBehindComma ) )
+ axisSettings->_axisDigitsBehindComma = digitsBehindComma;
+ } else if( tagName == "LabelsDateTimeFormat" ) {
+ QString string;
+ if( KDXML::readStringNode( element, string ) )
+ axisSettings->_axisLabelsDateTimeFormat = string;
+ } else if( tagName == "MaxEmptyInnerSpan" ) {
+ int maxEmptyInnerSpan;
+ if( KDXML::readIntNode( element, maxEmptyInnerSpan ) )
+ axisSettings->_axisMaxEmptyInnerSpan = maxEmptyInnerSpan;
+ } else if( tagName == "LabelsFromDataRow" ) {
+ QString string;
+ if( KDXML::readStringNode( element, string ) )
+ axisSettings->_labelTextsDataRow = KDChartAxisParams::stringToLabelsFromDataRow( string );
+ } else if( tagName == "TextsDataRow" ) {
+ int textsDataRow;
+ if( KDXML::readIntNode( element, textsDataRow ) )
+ axisSettings->_labelTextsDataRow = textsDataRow;
+ } else if( tagName == "LabelString" ) {
+ QString string;
+ if( KDXML::readStringNode( element, string ) )
+ axisSettings->_axisLabelStringList << string;
+ } else if( tagName == "ShortLabelString" ) {
+ QString string;
+ if( KDXML::readStringNode( element, string ) )
+ axisSettings->_axisShortLabelsStringList << string;
+ } else if( tagName == "LabelText" ) {
+ QString string;
+ if( KDXML::readStringNode( element, string ) )
+ axisSettings->_axisLabelTexts = string;
+ } else if( tagName == "LabelTextsDirty" ) {
+ bool labelTextsDirty;
+ if( KDXML::readBoolNode( element, labelTextsDirty ) )
+ axisSettings->_axisLabelTextsDirty = labelTextsDirty;
+ } else if( tagName == "FirstLabelReplacementText" ) {
+ QString value;
+ if( KDXML::readStringNode( element, value ) )
+ axisSettings->_axisFirstLabelText = value;
+ } else if( tagName == "LastLabelReplacementText" ) {
+ QString value;
+ if( KDXML::readStringNode( element, value ) )
+ axisSettings->_axisLastLabelText = value;
+ } else if( tagName == "LabelsDivPow10" ) {
+ int divPow10;
+ if( KDXML::readIntNode( element, divPow10 ) )
+ axisSettings->_axisLabelsDivPow10 = divPow10;
+ } else if( tagName == "LabelsDecimalPoint" ) {
+ QString value;
+ if( KDXML::readStringNode( element, value ) )
+ axisSettings->_axisLabelsDecimalPoint = value;
+ } else if( tagName == "LabelsThousandsPoint" ) {
+ QString value;
+ if( KDXML::readStringNode( element, value ) )
+ axisSettings->_axisLabelsThousandsPoint = value;
+ } else if( tagName == "LabelsNotation" ) {
+ QString string;
+ if( KDXML::readStringNode( element, string ) )
+ axisSettings->_axisLabelsNotation = KDChartEnums::stringToNumberNotation( string );
+ } else if( tagName == "LabelsPrefix" ) {
+ QString value;
+ if( KDXML::readStringNode( element, value ) )
+ axisSettings->_axisLabelsPrefix = value;
+ } else if( tagName == "LabelsPostfix" ) {
+ QString value;
+ if( KDXML::readStringNode( element, value ) )
+ axisSettings->_axisLabelsPostfix = value;
+ } else if( tagName == "LabelsTotalLen" ) {
+ int totalLen;
+ if( KDXML::readIntNode( element, totalLen ) )
+ axisSettings->_axisLabelsTotalLen = totalLen;
+ } else if( tagName == "LabelsPadFill" ) {
+ QString value;
+ if( KDXML::readStringNode( element, value ) ){
+ if( value.isEmpty() )
+ axisSettings->_axisLabelsPadFill = ' ';
+ else
+ axisSettings->_axisLabelsPadFill = value.at(0);
+ }
+ } else if( tagName == "LabelsBlockAlign" ) {
+ bool blockAlign;
+ if( KDXML::readBoolNode( element, blockAlign ) )
+ axisSettings->_axisLabelsBlockAlign = blockAlign;
+ } else {
+ qDebug( "Unknown subelement of AxisSettings found: %s", tagName.latin1() );
+ }
+ }
+ node = node.nextSibling();
+ }
+ curAxisSettings++; // one axis settings entry finished
+}
+
+
+/**
+ Reads the parameters from an XML document.
+ \param doc the XML document to read from
+ \return true if the parameters could be read, false if a file
+ format error occurred
+ \sa saveXML
+ */
+bool KDChartParams::loadXML( const QDomDocument& doc )
+{
+ int curAxisSettings = 0;
+ int curHFSettings = 0;
+
+ QDomElement docRoot = doc.documentElement(); // ChartParams element
+ QDomNode node = docRoot.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "ChartType" ) {
+ if( element.hasAttribute( "primary" ) )
+ _chartType = KDChartParams::stringToChartType( element.attribute( "primary" ) );
+ if( element.hasAttribute( "secondary" ) )
+ _additionalChartType = KDChartParams::stringToChartType( element.attribute( "secondary" ) );
+ } else if( tagName == "NumValues" ) {
+ int numValues;
+ if( KDXML::readIntNode( element, numValues ) )
+ _numValues = numValues;
+ } else if( tagName == "ModeAndChartMap" ) {
+ int dataset = -1;
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "Dataset" ) {
+ KDXML::readIntNode( element, dataset );
+ } else if( tagName == "ModeAndChart" ) {
+ Q_ASSERT( dataset != -1 ); // there must have been a dataset tag before
+ if( element.hasAttribute( "Mode" ) &&
+ element.hasAttribute( "Chart" ) ) {
+ KDChartParams::SourceMode sourceMode = KDChartParams::stringToChartSourceMode( element.attribute( "Mode" ) );
+ bool ok = false;
+ uint chart = element.attribute( "Chart" ).toUInt( &ok );
+ if( ok )
+ _dataSourceModeAndChart[dataset] = KDChartParams::ModeAndChart( sourceMode, chart );
+ }
+ } else {
+ qDebug( "Unknown subelement of ModeAndChartMap found: %s", tagName.latin1() );
+ }
+ }
+ node = node.nextSibling();
+ }
+ } else if( tagName == "PropertySetMap" ) {
+ // the PropertySetMap element
+ QDomNode node = element.firstChild();
+ KDChartPropertySet set;
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() // was really an element
+ && KDChartPropertySet::loadXML( element, set ) ) // parsed OK
+ setProperties( set.id(), set );
+ node = node.nextSibling();
+ }
+ } else if( tagName == "ChartSourceModeWasUsed" ) {
+ bool chartSourceModeWasUsed;
+ if( KDXML::readBoolNode( element, chartSourceModeWasUsed ) )
+ _setChartSourceModeWasUsed = chartSourceModeWasUsed;
+ } else if( tagName == "MaxDatasetSourceMode" ) {
+ int maxDatasetSourceMode;
+ if( KDXML::readIntNode( element, maxDatasetSourceMode ) )
+ _maxDatasetSourceMode = maxDatasetSourceMode;
+ } else if( tagName == "ColorSettings" ) {
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "DataColors" ) {
+ QMap<uint,QColor>* map = &_dataColors;
+ readColorMapNode( element, map );
+ } else if( tagName == "MaxDatasetColor" ) {
+ int maxDatasetColor;
+ if( KDXML::readIntNode( element, maxDatasetColor ) )
+ _maxDatasetColor = maxDatasetColor;
+ } else if( tagName == "ShadowBrightnessFactor" ) {
+ double shadowBrightnessFactor;
+ if( KDXML::readDoubleNode( element, shadowBrightnessFactor ) )
+ _shadowBrightnessFactor = shadowBrightnessFactor;
+ } else if( tagName == "ShadowPattern" ) {
+ QString value;
+ if( KDXML::readStringNode( element, value ) )
+ _shadowPattern = KDXML::stringToBrushStyle( value );
+ } else if( tagName == "ThreeDShadowColors" ) {
+ bool threeDShadowColors;
+ if( KDXML::readBoolNode( element, threeDShadowColors ) )
+ _threeDShadowColors = threeDShadowColors;
+ } else if( tagName == "DataColorsShadow1" ) {
+ QMap<uint,QColor>* map = &_dataColorsShadow1;
+ readColorMapNode( element, map );
+ } else if( tagName == "DataColorsShadow2" ) {
+ QMap<uint,QColor>* map = &_dataColorsShadow2;
+ readColorMapNode( element, map );
+ } else if( tagName == "OutlineDataColor" ) {
+ QColor color;
+ if( KDXML::readColorNode( element, color ) )
+ _outlineDataColor = color;
+ } else if( tagName == "OutlineDataLineWidth" ) {
+ int outlineDataLineWidth;
+ if( KDXML::readIntNode( element, outlineDataLineWidth ) )
+ _outlineDataLineWidth = outlineDataLineWidth;
+ } else if( tagName == "OutlineDataLineStyle" ) {
+ if( element.hasAttribute( "Style" ) )
+ _outlineDataLineStyle = KDXML::stringToPenStyle( element.attribute( "Style" ) );
+ } else {
+ qDebug( "!!!Unknown subelement of ColorSettings found: %s", tagName.latin1() );
+ }
+ }
+ node = node.nextSibling();
+ }
+ } else if( tagName == "BarSettings" ) {
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "SubType" ) {
+ QString value;
+ if( KDXML::readStringNode( element, value ) )
+ _barChartSubType = KDChartParams::stringToBarChartSubType( value );
+ } else if( tagName == "ThreeDBars" ) {
+ bool threeDBars;
+ if( KDXML::readBoolNode( element, threeDBars ) )
+ _threeDBars = threeDBars;
+ } else if( tagName == "ThreeDBarDepth" ) {
+ double threeDBarDepth;
+ if( KDXML::readDoubleNode( element, threeDBarDepth ) )
+ _threeDBarDepth = threeDBarDepth;
+ } else if( tagName == "DatasetGap" ) {
+ int datasetGap;
+ if( KDXML::readIntNode( element, datasetGap ) )
+ _datasetGap = datasetGap;
+ } else if( tagName == "DatasetGapIsRelative" ) {
+ bool datasetGapIsRelative;
+ if( KDXML::readBoolNode( element, datasetGapIsRelative ) )
+ _datasetGapIsRelative = datasetGapIsRelative;
+ } else if( tagName == "ValueBlockGap" ) {
+ int valueBlockGap;
+ if( KDXML::readIntNode( element, valueBlockGap ) )
+ _valueBlockGap = valueBlockGap;
+ } else if( tagName == "ValueBlockGapIsRelative" ) {
+ bool valueBlockGapIsRelative;
+ if( KDXML::readBoolNode( element, valueBlockGapIsRelative ) )
+ _valueBlockGapIsRelative = valueBlockGapIsRelative;
+ } else if( tagName == "BarWidth" ) {
+ int barWidth;
+ if( KDXML::readIntNode( element, barWidth ) )
+ _barWidth = barWidth;
+ } else if( tagName == "SolidExcessArrows" ) {
+ bool solidExcessArrows;
+ if( KDXML::readBoolNode( element, solidExcessArrows ) )
+ _solidExcessArrows = solidExcessArrows;
+ } else {
+ qDebug( "Unknown subelement of BarSettings found: %s", tagName.latin1() );
+ }
+ }
+ node = node.nextSibling();
+ }
+ } else if( tagName == "LineSettings" ) {
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "SubType" ) {
+ QString value;
+ if( KDXML::readStringNode( element, value ) )
+ _lineChartSubType = KDChartParams::stringToLineChartSubType( value );
+ } else if( tagName == "Marker" ) {
+ bool marker;
+ if( KDXML::readBoolNode( element, marker ) )
+ _lineMarker = marker;
+ } else if( tagName == "MarkerStyle" ) {
+ bool ok = true;
+ uint dataset;
+ KDChartParams::LineMarkerStyle style = LineMarkerCircle;
+ if( element.hasAttribute( "Dataset" ) &&
+ element.hasAttribute( "Style" ) ) {
+ dataset = element.attribute( "Dataset" ).toUInt( &ok );
+ if( ok )
+ style = KDChartParams::stringToLineMarkerStyle( element.attribute( "Style" ) );
+ } else
+ ok = false;
+ if( ok )
+ _lineMarkerStyles[dataset] = style;
+ } else if( tagName == "MarkerSize" ) {
+ int width = 1;
+ int height= 1;
+ bool ok = true;
+ if( element.hasAttribute( "Width" ) &&
+ element.hasAttribute( "Height" ) ) {
+ width = element.attribute( "Width" ).toInt( &ok );
+ if( ok )
+ height = element.attribute( "Height" ).toInt( &ok );
+ } else
+ ok = false;
+
+ if( ok ) {
+ _lineMarkerSize.setWidth( width );
+ _lineMarkerSize.setHeight( height );
+ }
+ } else if( tagName == "LineWidth" ) {
+ int lineWidth;
+ if( KDXML::readIntNode( element, lineWidth ) )
+ _lineWidth = lineWidth;
+ } else if( tagName == "LineColor" ) {
+ QColor color;
+ if( KDXML::readColorNode( element, color ) )
+ _lineColor = color;
+ } else if( tagName == "LineStyle" ) {
+ if( element.hasAttribute( "Style" ) )
+ _lineStyle = KDXML::stringToPenStyle( element.attribute( "Style" ) );
+ } else if( tagName == "DatasetLineStyle" ) {
+ bool ok = true;
+ uint dataset;
+ PenStyle style = Qt::SolidLine;
+ if( element.hasAttribute( "Dataset" ) &&
+ element.hasAttribute( "Style" ) ) {
+ dataset = element.attribute( "Dataset" ).toUInt( &ok );
+ if( ok )
+ style = KDXML::stringToPenStyle( element.attribute( "Style" ) );
+ } else
+ ok = false;
+ if( ok )
+ _datasetLineStyles[dataset] = style;
+ } else if( tagName == "ThreeD" ) {
+ bool threeD;
+ if( KDXML::readBoolNode( element, threeD ) )
+ _threeDLines = threeD;
+ } else if( tagName == "ThreeDDepth" ) {
+ int depth;
+ if( KDXML::readIntNode( element, depth ) )
+ _threeDLineDepth = depth;
+ } else if( tagName == "ThreeDXRotation" ) {
+ int rotation;
+ if( KDXML::readIntNode( element, rotation ) )
+ _threeDLineXRotation = rotation;
+ } else if( tagName == "ThreeDYRotation" ) {
+ int rotation;
+ if( KDXML::readIntNode( element, rotation ) )
+ _threeDLineYRotation = rotation;
+ } else {
+ qDebug( "Unknown subelement of LineSettings found: %s", tagName.latin1() );
+ }
+ }
+ node = node.nextSibling();
+ }
+ } else if( tagName == "AreaSettings" ) {
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "SubType" ) {
+ QString value;
+ if( KDXML::readStringNode( element, value ) )
+ _areaChartSubType = KDChartParams::stringToAreaChartSubType( value );
+ } else if( tagName == "Location" ) {
+ QString string;
+ if( KDXML::readStringNode( element, string ) )
+ _areaLocation = KDChartParams::stringToAreaLocation( string );
+ } else {
+ qDebug( "Unknown subelement of AreaSettings found: %s", tagName.latin1() );
+ }
+ }
+ node = node.nextSibling();
+ }
+ } else if( tagName == "PieRingSettings" ) {
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "Explode" ) {
+ bool explode;
+ if( KDXML::readBoolNode( element, explode ) )
+ _explode = explode;
+ } else if( tagName == "DefaultExplodeFactor" ) {
+ double defaultExplodeFactor;
+ if( KDXML::readDoubleNode( element, defaultExplodeFactor ) )
+ _explodeFactor = defaultExplodeFactor;
+ } else if( tagName == "ExplodeFactors" ) {
+ QMap<int,double>* map = &_explodeFactors;
+ readDoubleMapNode( element, map );
+ } else if( tagName == "ExplodeSegment" ) {
+ int explodeSegment;
+ if( KDXML::readIntNode( element, explodeSegment ) )
+ _explodeList << explodeSegment;
+ } else if( tagName == "ThreeDPies" ) {
+ bool threeDPies;
+ if( KDXML::readBoolNode( element, threeDPies ) )
+ _threeDPies = threeDPies;
+ } else if( tagName == "ThreeDPieHeight" ) {
+ int threeDPieHeight;
+ if( KDXML::readIntNode( element, threeDPieHeight ) )
+ _threeDPieHeight = threeDPieHeight;
+ } else if( tagName == "PieStart" ) {
+ int pieStart;
+ if( KDXML::readIntNode( element, pieStart ) )
+ _pieStart = pieStart;
+ } else if( tagName == "RingStart" ) {
+ int ringStart;
+ if( KDXML::readIntNode( element, ringStart ) )
+ _ringStart = ringStart;
+ } else if( tagName == "RelativeRingThickness" ) {
+ bool relativeRingThickness;
+ if( KDXML::readBoolNode( element, relativeRingThickness ) )
+ _relativeRingThickness = relativeRingThickness;
+ } else {
+ qDebug( "Unknown subelement of PieRingSettings found: %s", tagName.latin1() );
+ }
+ }
+ node = node.nextSibling();
+ }
+ } else if( tagName == "HiLoSettings" ) {
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "SubType" ) {
+ QString value;
+ if( KDXML::readStringNode( element, value ) )
+ _hiLoChartSubType = KDChartParams::stringToHiLoChartSubType( value );
+ } else if( tagName == "PrintLowValues" ) {
+ bool printLowValues;
+ if( KDXML::readBoolNode( element, printLowValues ) )
+ _hiLoChartPrintLowValues = printLowValues;
+ } else if( tagName == "LowValuesFont" ) {
+ readChartFontNode( element,
+ _hiLoChartLowValuesFont,
+ _hiLoChartLowValuesUseFontRelSize,
+ _hiLoChartLowValuesFontRelSize );
+ } else if( tagName == "LowValuesColor" ) {
+ QColor color;
+ if( KDXML::readColorNode( element, color ) )
+ _hiLoChartLowValuesColor = color;
+ } else if( tagName == "PrintHighValues" ) {
+ bool printHighValues;
+ if( KDXML::readBoolNode( element, printHighValues ) )
+ _hiLoChartPrintHighValues = printHighValues;
+ } else if( tagName == "HighValuesFont" ) {
+ readChartFontNode( element,
+ _hiLoChartHighValuesFont,
+ _hiLoChartHighValuesUseFontRelSize,
+ _hiLoChartHighValuesFontRelSize );
+ } else if( tagName == "HighValuesColor" ) {
+ QColor color;
+ if( KDXML::readColorNode( element, color ) )
+ _hiLoChartHighValuesColor = color;
+ } else if( tagName == "PrintOpenValues" ) {
+ bool printOpenValues;
+ if( KDXML::readBoolNode( element, printOpenValues ) )
+ _hiLoChartPrintOpenValues = printOpenValues;
+ } else if( tagName == "OpenValuesFont" ) {
+ readChartFontNode( element,
+ _hiLoChartOpenValuesFont,
+ _hiLoChartOpenValuesUseFontRelSize,
+ _hiLoChartOpenValuesFontRelSize );
+ } else if( tagName == "OpenValuesColor" ) {
+ QColor color;
+ if( KDXML::readColorNode( element, color ) )
+ _hiLoChartOpenValuesColor = color;
+ } else if( tagName == "PrintCloseValues" ) {
+ bool printCloseValues;
+ if( KDXML::readBoolNode( element, printCloseValues ) )
+ _hiLoChartPrintCloseValues = printCloseValues;
+ } else if( tagName == "CloseValuesFont" ) {
+ readChartFontNode( element,
+ _hiLoChartCloseValuesFont,
+ _hiLoChartCloseValuesUseFontRelSize,
+ _hiLoChartCloseValuesFontRelSize );
+ } else if( tagName == "CloseValuesColor" ) {
+ QColor color;
+ if( KDXML::readColorNode( element, color ) )
+ _hiLoChartCloseValuesColor = color;
+ } else {
+ qDebug( "Unknown subelement of HiLoSettings found: %s", tagName.latin1() );
+ }
+ }
+ node = node.nextSibling();
+ }
+
+
+ } else if( tagName == "BoxAndWhiskerSettings" ) {
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "SubType" ) {
+ QString value;
+ if( KDXML::readStringNode( element, value ) )
+ _BWChartSubType = KDChartParams::stringToBWChartSubType( value );
+ } else if( tagName == "FenceUpperInner" ) {
+ double fence;
+ if( KDXML::readDoubleNode( element, fence ) )
+ _BWChartFenceUpperInner = fence;
+ } else if( tagName == "FenceLowerInner" ) {
+ double fence;
+ if( KDXML::readDoubleNode( element, fence ) )
+ _BWChartFenceUpperOuter = fence;
+ } else if( tagName == "FenceUpperOuter" ) {
+ double fence;
+ if( KDXML::readDoubleNode( element, fence ) )
+ _BWChartFenceUpperOuter = fence;
+ } else if( tagName == "FenceLowerOuter" ) {
+ double fence;
+ if( KDXML::readDoubleNode( element, fence ) )
+ _BWChartFenceUpperOuter = fence;
+ } else if( tagName == "Brush" ) {
+ QBrush brush;
+ if( KDXML::readBrushNode( element, brush ) )
+ _BWChartBrush = brush;
+ } else if( tagName == "OutlierSize" ) {
+ int size;
+ if( KDXML::readIntNode( element, size ) )
+ _BWChartOutValMarkerSize = size;
+ } else if( tagName.startsWith("PrintStatistics") ) {
+ // 012345678901234
+ QString statName(tagName.mid( 15 ));
+ BWStatVal i( stringToBWChartStatVal( statName ) );
+ if( BWStatValSTART <= i && i <= BWStatValEND ) {
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "Active" ) {
+ bool active;
+ if( KDXML::readBoolNode( element, active ) )
+ _BWChartStatistics[ i ].active = active;
+ } else if( tagName == "Font" ) {
+ readChartFontNode( element,
+ _BWChartStatistics[ i ].font,
+ _BWChartStatistics[ i ].useRelSize,
+ _BWChartStatistics[ i ].relSize );
+ } else if( tagName == "Color" ) {
+ QColor color;
+ if( KDXML::readColorNode( element, color ) )
+ _BWChartStatistics[ i ].color = color;
+ } else if( tagName == "Brush" ) {
+ QBrush brush;
+ if( KDXML::readBrushNode( element, brush ) )
+ _BWChartStatistics[ i ].brush = brush;
+ } else {
+ qDebug( "Unknown subelement of BoxAndWhiskerSettings found: %s", tagName.latin1() );
+ }
+ }
+ }
+ } else {
+ qDebug( "Unknown subelement of BoxAndWhiskerSettings found: %s", tagName.latin1() );
+ }
+ } else {
+ qDebug( "Unknown subelement of BoxAndWhiskerSettings found: %s", tagName.latin1() );
+ }
+ }
+ node = node.nextSibling();
+ }
+ } else if( tagName == "PolarSettings" ) {
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "SubType" ) {
+ QString value;
+ if( KDXML::readStringNode( element, value ) )
+ _polarChartSubType = KDChartParams::stringToPolarChartSubType( value );
+ } else if( tagName == "Marker" ) {
+ bool marker;
+ if( KDXML::readBoolNode( element, marker ) )
+ _polarMarker = marker;
+ } else if( tagName == "MarkerStyle" ) {
+ bool ok = true;
+ uint dataset;
+ KDChartParams::PolarMarkerStyle style = PolarMarkerCircle;
+ if( element.hasAttribute( "Dataset" ) &&
+ element.hasAttribute( "Style" ) ) {
+ dataset = element.attribute( "Dataset" ).toUInt( &ok );
+ if( ok )
+ style = KDChartParams::stringToPolarMarkerStyle( element.attribute( "Style" ) );
+ } else
+ ok = false;
+ if( ok )
+ _polarMarkerStyles[dataset] = style;
+ } else if( tagName == "MarkerSize" ) {
+ int width = 1;
+ int height= 1;
+ bool ok = true;
+ if( element.hasAttribute( "Width" ) &&
+ element.hasAttribute( "Height" ) ) {
+ width = element.attribute( "Width" ).toInt( &ok );
+ if( ok )
+ height = element.attribute( "Height" ).toInt( &ok );
+ } else
+ ok = false;
+
+ if( ok ) {
+ _polarMarkerSize.setWidth( width );
+ _polarMarkerSize.setHeight( height );
+ }
+ } else if( tagName == "PolarLineWidth" ) {
+ int polarLineWidth;
+ if( KDXML::readIntNode( element, polarLineWidth ) )
+ _polarLineWidth = polarLineWidth;
+ } else {
+ qDebug( "Unknown subelement of PolarSettings found: %s", tagName.latin1() );
+ }
+ }
+ node = node.nextSibling();
+ }
+ } else if( tagName == "LegendSettings" ) {
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "Position" ) {
+ QString string;
+ if( KDXML::readStringNode( element, string ) )
+ _legendPosition = KDChartParams::stringToLegendPosition( string );
+ } else if( tagName == "Orientation" ) {
+ Qt::Orientation value=Qt::Vertical;
+ if( KDXML::readOrientationNode( element, value ) )
+ _legendOrientation = value;
+ } else if( tagName == "ShowLines" ) {
+ bool showLines;
+ if( KDXML::readBoolNode( element, showLines ) )
+ _legendShowLines = showLines;
+ } else if( tagName == "Source" ) {
+ QString string;
+ if( KDXML::readStringNode( element, string ) )
+ _legendSource = KDChartParams::stringToLegendSource( string );
+ } else if( tagName == "LegendText" ) {
+ bool ok = true;
+ uint dataset = 0;
+ QString text;
+ if( element.hasAttribute( "Dataset" ) &&
+ element.hasAttribute( "Text" ) ) {
+ dataset = element.attribute( "Dataset" ).toUInt( &ok );
+ if( ok )
+ text = element.attribute( "Text" );
+ } else
+ ok = false;
+ if( ok )
+ _legendText[dataset] = text;
+ } else if( tagName == "TextColor" ) {
+ QColor color;
+ if( KDXML::readColorNode( element, color ) )
+ _legendTextColor = color;
+ } else if( tagName == "TextFont" ) {
+ readChartFontNode( element,
+ _legendFont,
+ _legendFontUseRelSize,
+ _legendFontRelSize );
+ } else if( tagName == "TitleText" ) {
+ QString string;
+ if( KDXML::readStringNode( element, string ) )
+ _legendTitleText = string;
+ } else if( tagName == "TitleColor" ) {
+ QColor color;
+ if( KDXML::readColorNode( element, color ) )
+ _legendTitleTextColor = color;
+ } else if( tagName == "TitleFont" ) {
+ readChartFontNode( element,
+ _legendTitleFont,
+ _legendTitleFontUseRelSize,
+ _legendTitleFontRelSize );
+ } else if( tagName == "Spacing" ) {
+ int spacing;
+ if( KDXML::readIntNode( element, spacing ) )
+ _legendSpacing = spacing;
+ } else {
+ qDebug( "Unknown subelement of LegendSettings found: %s", tagName.latin1() );
+ }
+ }
+ node = node.nextSibling();
+ }
+ } else if( tagName == "AxisSettings" ) {
+
+ loadAxesFormXML(curAxisSettings, element);
+
+ } else if( tagName == "HeaderFooterSettings" ) {
+ KDChartParams::HdFtParams* hfSettings =
+ &( _hdFtParams[ curHFSettings ] );
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "Text" ) {
+ QString string;
+ if( KDXML::readStringNode( element, string ) )
+ hfSettings->_text = string;
+ } else if( tagName == "Font" ) {
+ readChartFontNode( element,
+ hfSettings->_font,
+ hfSettings->_fontUseRelSize,
+ hfSettings->_fontRelSize );
+ } else if( tagName == "Color" ) {
+ QColor color;
+ if( KDXML::readColorNode( element, color ) )
+ hfSettings->_color = color;
+ } else {
+ qDebug( "Unknown subelement of HeaderFooterSettings found: %s", tagName.latin1() );
+ }
+ }
+ node = node.nextSibling();
+ }
+ curHFSettings++; // one header/footer setting finished
+ } else if( tagName == "GlobalLeading" ) {
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an elemente
+ QString tagName = element.tagName();
+ if( tagName == "Left" ) {
+ int value;
+ if( KDXML::readIntNode( element, value ) )
+ _globalLeadingLeft = value;
+ }
+ else if( tagName == "Top" ) {
+ int value;
+ if( KDXML::readIntNode( element, value ) )
+ _globalLeadingTop = value;
+ }
+ else if( tagName == "Right" ) {
+ int value;
+ if( KDXML::readIntNode( element, value ) )
+ _globalLeadingRight = value;
+ }
+ else if( tagName == "Bottom" ) {
+ int value;
+ if( KDXML::readIntNode( element, value ) )
+ _globalLeadingBottom = value;
+ } else {
+ qDebug( "Unknown subelement of GlobalLeading found: %s", tagName.latin1() );
+ }
+ }
+ node = node.nextSibling();
+ }
+ } else if( tagName == "DataValuesSettings1" ) {
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "PrintDataValues" ) {
+ bool value;
+ if( KDXML::readBoolNode( element, value ) )
+ _printDataValuesSettings._printDataValues = value;
+ } else if( tagName == "DivPow10" ) {
+ int value;
+ if( KDXML::readIntNode( element, value ) )
+ _printDataValuesSettings._divPow10 = value;
+ } else if( tagName == "DigitsBehindComma" ) {
+ int value;
+ if( KDXML::readIntNode( element, value ) )
+ _printDataValuesSettings._digitsBehindComma = value;
+ } else if( tagName == "Font" ) {
+ readChartFontNode( element,
+ _printDataValuesSettings._dataValuesFont,
+ _printDataValuesSettings._dataValuesUseFontRelSize,
+ _printDataValuesSettings._dataValuesFontRelSize );
+ } else if( tagName == "Color" ) {
+ KDXML::readColorNode( element, _printDataValuesSettings._dataValuesColor );
+ } else if( tagName == "Background" ) {
+ KDXML::readBrushNode( element, _printDataValuesSettings._dataValuesBrush );
+ } else if( tagName == "AutoColor" ) {
+ KDXML::readBoolNode( element,
+ _printDataValuesSettings._dataValuesAutoColor );
+ } else if( tagName == "AnchorNegativePosition" ) {
+ QString value;
+ if( KDXML::readStringNode( element, value ) )
+ _printDataValuesSettings._dataValuesAnchorNegativePosition = KDChartEnums::stringToPositionFlag( value );
+ } else if( tagName == "AnchorNegativeAlign" ) {
+ int value;
+ if( KDXML::readIntNode( element, value ) )
+ _printDataValuesSettings._dataValuesAnchorNegativeAlign = value;
+ } else if( tagName == "AnchorNegativeDeltaX" ) {
+ int value;
+ if( KDXML::readIntNode( element, value ) )
+ _printDataValuesSettings._dataValuesAnchorNegativeDeltaX = value;
+ } else if( tagName == "AnchorNegativeDeltaY" ) {
+ int value;
+ if( KDXML::readIntNode( element, value ) )
+ _printDataValuesSettings._dataValuesAnchorNegativeDeltaY = value;
+ } else if( tagName == "NegativeRotation" ) {
+ int value;
+ if( KDXML::readIntNode( element, value ) )
+ _printDataValuesSettings._dataValuesNegativeRotation = value;
+ } else if( tagName == "AnchorPositivePosition" ) {
+ QString value;
+ if( KDXML::readStringNode( element, value ) )
+ _printDataValuesSettings._dataValuesAnchorPositivePosition = KDChartEnums::stringToPositionFlag( value );
+ } else if( tagName == "AnchorPositiveAlign" ) {
+ int value;
+ if( KDXML::readIntNode( element, value ) )
+ _printDataValuesSettings._dataValuesAnchorPositiveAlign = value;
+ } else if( tagName == "AnchorPositiveDeltaX" ) {
+ int value;
+ if( KDXML::readIntNode( element, value ) )
+ _printDataValuesSettings._dataValuesAnchorPositiveDeltaX = value;
+ } else if( tagName == "AnchorPositiveDeltaY" ) {
+ int value;
+ if( KDXML::readIntNode( element, value ) )
+ _printDataValuesSettings._dataValuesAnchorPositiveDeltaY = value;
+ } else if( tagName == "PositiveRotation" ) {
+ int value;
+ if( KDXML::readIntNode( element, value ) )
+ _printDataValuesSettings._dataValuesPositiveRotation = value;
+ } else if( tagName == "LayoutPolicy" ) {
+ QString value;
+ if( KDXML::readStringNode( element, value ) )
+ _printDataValuesSettings._dataValuesLayoutPolicy = KDChartEnums::stringToLayoutPolicy( value );
+ } else if( tagName == "ShowInfinite" ) {
+ KDXML::readBoolNode( element, _printDataValuesSettings._dataValuesShowInfinite );
+ } else {
+ qDebug( "Unknown subelement of DataValuesSettings1 found: %s", tagName.latin1() );
+ }
+ }
+ node = node.nextSibling();
+ }
+ } else if( tagName == "DataValuesSettings2" ) {
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "PrintDataValues" ) {
+ bool value;
+ if( KDXML::readBoolNode( element, value ) )
+ _printDataValuesSettings2._printDataValues = value;
+ } else if( tagName == "DivPow10" ) {
+ int value;
+ if( KDXML::readIntNode( element, value ) )
+ _printDataValuesSettings2._divPow10 = value;
+ } else if( tagName == "DigitsBehindComma" ) {
+ int value;
+ if( KDXML::readIntNode( element, value ) )
+ _printDataValuesSettings2._digitsBehindComma = value;
+ } else if( tagName == "Font" ) {
+ readChartFontNode( element,
+ _printDataValuesSettings2._dataValuesFont,
+ _printDataValuesSettings2._dataValuesUseFontRelSize,
+ _printDataValuesSettings2._dataValuesFontRelSize );
+ } else if( tagName == "Color" ) {
+ KDXML::readColorNode( element, _printDataValuesSettings2._dataValuesColor );
+ } else if( tagName == "Background" ) {
+ KDXML::readBrushNode( element, _printDataValuesSettings2._dataValuesBrush );
+ } else if( tagName == "AutoColor" ) {
+ KDXML::readBoolNode( element,
+ _printDataValuesSettings2._dataValuesAutoColor );
+ } else if( tagName == "AnchorNegativePosition" ) {
+ QString value;
+ if( KDXML::readStringNode( element, value ) )
+ _printDataValuesSettings2._dataValuesAnchorNegativePosition = KDChartEnums::stringToPositionFlag( value );
+ } else if( tagName == "AnchorNegativeAlign" ) {
+ int value;
+ if( KDXML::readIntNode( element, value ) )
+ _printDataValuesSettings2._dataValuesAnchorNegativeAlign = value;
+ } else if( tagName == "AnchorNegativeDeltaX" ) {
+ int value;
+ if( KDXML::readIntNode( element, value ) )
+ _printDataValuesSettings2._dataValuesAnchorNegativeDeltaX = value;
+ } else if( tagName == "AnchorNegativeDeltaY" ) {
+ int value;
+ if( KDXML::readIntNode( element, value ) )
+ _printDataValuesSettings2._dataValuesAnchorNegativeDeltaY = value;
+ } else if( tagName == "NegativeRotation" ) {
+ int value;
+ if( KDXML::readIntNode( element, value ) )
+ _printDataValuesSettings2._dataValuesNegativeRotation = value;
+ } else if( tagName == "AnchorPositivePosition" ) {
+ QString value;
+ if( KDXML::readStringNode( element, value ) )
+ _printDataValuesSettings2._dataValuesAnchorPositivePosition = KDChartEnums::stringToPositionFlag( value );
+ } else if( tagName == "AnchorPositiveAlign" ) {
+ int value;
+ if( KDXML::readIntNode( element, value ) )
+ _printDataValuesSettings2._dataValuesAnchorPositiveAlign = value;
+ } else if( tagName == "AnchorPositiveDeltaX" ) {
+ int value;
+ if( KDXML::readIntNode( element, value ) )
+ _printDataValuesSettings2._dataValuesAnchorPositiveDeltaX = value;
+ } else if( tagName == "AnchorPositiveDeltaY" ) {
+ int value;
+ if( KDXML::readIntNode( element, value ) )
+ _printDataValuesSettings2._dataValuesAnchorPositiveDeltaY = value;
+ } else if( tagName == "PositiveRotation" ) {
+ int value;
+ if( KDXML::readIntNode( element, value ) )
+ _printDataValuesSettings2._dataValuesPositiveRotation = value;
+ } else if( tagName == "LayoutPolicy" ) {
+ QString value;
+ if( KDXML::readStringNode( element, value ) )
+ _printDataValuesSettings2._dataValuesLayoutPolicy = KDChartEnums::stringToLayoutPolicy( value );
+ } else if( tagName == "ShowInfinite" ) {
+ KDXML::readBoolNode( element, _printDataValuesSettings2._dataValuesShowInfinite );
+ } else {
+ qDebug( "Unknown subelement of DataValuesSettings2 found: %s", tagName.latin1() );
+ }
+ }
+ node = node.nextSibling();
+ }
+ } else if( tagName == "DataValuesGlobalSettings" ) {
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "allowOverlappingTexts" ) {
+ bool value;
+ if( KDXML::readBoolNode( element, value ) )
+ _allowOverlappingDataValueTexts = value;
+ }
+ else
+ qDebug( "Unknown subelement of DataValuesGlobalSettings found: %s", tagName.latin1() );
+ // do _not_ return false here (to enable future extentions)
+ }
+ node = node.nextSibling();
+ }
+ } else if( tagName == "AreaMap" ) {
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "FrameSettings" ) {
+ KDChartFrameSettings* frameSettings = new KDChartFrameSettings;
+ uint areaId = KDChartEnums::AreaUNKNOWN;
+ if( KDChartFrameSettings::readFrameSettingsNode(
+ element, *frameSettings, areaId ) ) {
+ QString str;
+ if(areaId == KDChartEnums::AreaChartDataRegion)
+ str = QString( "%1/%2/%3/%4" )
+ .arg( areaId, 5 )
+ .arg( frameSettings->dataRow(), 5 )
+ .arg( frameSettings->dataCol(), 5 )
+ .arg( 0, 5 );//frameSettings->data3rd(), 5 );
+ else
+ str = QString( "%1/-----/-----/-----" ).arg( areaId, 5 );
+ _areaDict.replace( str, frameSettings );
+ }
+ }
+ else
+ qDebug( "Unknown tag in AreaMap found: %s", tagName.latin1() );
+ // do _not_ return false here (to enable future extentions)
+ }
+ node = node.nextSibling();
+ }
+ } else if( tagName == "CustomBoxMap" ) {
+ QDomNode node = element.firstChild();
+ int curNumber = -1;
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "Number" ) {
+ KDXML::readIntNode( element, curNumber );
+ } else if( tagName == "CustomBox" ) {
+ Q_ASSERT( curNumber != -1 ); // there was a Dataset tag before
+ KDChartCustomBox customBox;
+ KDChartCustomBox::readCustomBoxNode( element,
+ customBox );
+ _customBoxDict.insert( curNumber, customBox.clone() );
+ }
+ else
+ qDebug( "Unknown tag in CustomBoxMap found: %s", tagName.latin1() );
+ }
+ node = node.nextSibling();
+ }
+ } else {
+ qDebug( "Unknown second-level element found: %s", tagName.latin1() );
+ // NOTE: We do *not* 'return false' here but continue normal operation
+ // since additional elements might have been added in future versions
+ }
+ }
+ node = node.nextSibling();
+ }
+ return true;
+}
+
+
+/**
+ Creates a DOM element node that represents a map of QColor objects
+ for use in a DOM document.
+
+ \param doc the DOM document to which the node will belong
+ \param parent the parent node to which the new node will be appended
+ \param elementName the name of the new node
+ \param map the map of colors to be represented
+ */
+void KDChartParams::createColorMapNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName,
+ const QMap< uint, QColor >& map )
+{
+ QDomElement mapElement =
+ doc.createElement( elementName );
+ parent.appendChild( mapElement );
+ for( QMap<uint,QColor>::ConstIterator it = map.begin();
+ it != map.end(); ++it ) {
+ // Dataset element
+ QDomElement datasetElement = doc.createElement( "Dataset" );
+ mapElement.appendChild( datasetElement );
+ QDomText datasetContent =
+ doc.createTextNode( QString::number( it.key() ) );
+ datasetElement.appendChild( datasetContent );
+ // Color element
+ KDXML::createColorNode( doc, mapElement, "Color", it.data() );
+ }
+}
+
+
+/**
+ Creates a DOM element node that represents a map of doubles
+ for use in a DOM document.
+
+ \param doc the DOM document to which the node will belong
+ \param parent the parent node to which the new node will be appended
+ \param elementName the name of the new node
+ \param map the map of doubles to be represented
+ */
+void KDChartParams::createDoubleMapNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName,
+ const QMap< int, double >& map )
+{
+ QDomElement mapElement =
+ doc.createElement( elementName );
+ parent.appendChild( mapElement );
+ for( QMap<int,double>::ConstIterator it = map.begin();
+ it != map.end(); ++it ) {
+ // Dataset element
+ QDomElement valueElement = doc.createElement( "Value" );
+ mapElement.appendChild( valueElement );
+ QDomText valueContent =
+ doc.createTextNode( QString::number( it.key() ) );
+ valueElement.appendChild( valueContent );
+ // Color element
+ KDXML::createDoubleNode( doc, mapElement, "Factor", it.data() );
+ }
+}
+
+
+void dataCoordToElementAttr(const QVariant& val, QDomElement& element, const QString& postfix)
+{
+ if( QVariant::Double == val.type() )
+ element.setAttribute( "DoubleValue"+postfix,
+ QString::number( val.toDouble() ) );
+ else if( QVariant::String == val.type() )
+ element.setAttribute( "StringValue"+postfix, val.toString() );
+ else if( QVariant::DateTime == val.type() )
+ element.setAttribute( "DateTimeValue"+postfix,
+ val.toDateTime().toString( Qt::ISODate ) );
+ else
+ element.setAttribute( "NoValue"+postfix, "true" );
+}
+
+/**
+ Creates a DOM element node that represents a
+ chart value for use in a DOM document.
+
+ \param doc the DOM document to which the node will belong
+ \param parent the parent node to which the new node will be appended
+ \param elementName the name of the new node
+ \param data the chart value to be represented
+ */
+void KDChartParams::createChartValueNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName,
+ const QVariant& valY,
+ const QVariant& valX,
+ const int& propID )
+{
+ QDomElement element = doc.createElement( elementName );
+ parent.appendChild( element );
+ dataCoordToElementAttr( valY, element, "" ); // no postfix for Y value: backwards compat.
+ dataCoordToElementAttr( valX, element, "X" );
+ element.setAttribute( "PropertySetID",
+ QString::number( propID ) );
+}
+
+
+
+/**
+ Creates a DOM element node that represents a font used in a
+ chart for use in a DOM document.
+
+ \param doc the DOM document to which the node will belong
+ \param parent the parent node to which the new node will be appended
+ \param elementName the name of the new node
+ \param font the font to be resented
+ \param useRelFont the specification whether the font size
+ is relative
+ \param relFont the relative font size
+ \param minFont the minimal font size in points, leave this parameter out if not needed
+ */
+void KDChartParams::createChartFontNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName,
+ const QFont& font, bool useRelFont,
+ int relFont,
+ int minFont )
+{
+ QDomElement chartFontElement = doc.createElement( elementName );
+ parent.appendChild( chartFontElement );
+ KDXML::createFontNode( doc, chartFontElement, "Font", font );
+ KDXML::createBoolNode( doc, chartFontElement, "UseRelFontSize",
+ useRelFont );
+ KDXML::createIntNode( doc, chartFontElement, "RelFontSize", relFont );
+ if( 0 <= minFont )
+ KDXML::createIntNode( doc, chartFontElement, "MinFontSize", minFont );
+}
+
+
+
+
+
+/**
+ Creates a DOM element node that represents a color map
+ for use in a DOM document.
+
+ \param doc the DOM document to which the node will belong
+ \param parent the parent node to which the new node will be appended
+ \param elementName the name of the new node
+ \param map the color map to be represented
+ */
+bool KDChartParams::readColorMapNode( const QDomElement& element,
+ QMap<uint,QColor>* value )
+{
+ QDomNode node = element.firstChild();
+ int curDataset = -1;
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "Dataset" ) {
+ KDXML::readIntNode( element, curDataset );
+ } else if( tagName == "Color" ) {
+ Q_ASSERT( curDataset != -1 ); // there was a Dataset tag before
+ QColor color;
+ KDXML::readColorNode( element, color );
+ value->insert( curDataset, color );
+ } else {
+ qDebug( "Unknown tag in color map" );
+ }
+ }
+ node = node.nextSibling();
+ }
+
+ return true;
+}
+
+
+/**
+ Reads data from a DOM element node that represents a double
+ map and fills a double map with the data.
+
+ \param element the DOM element to read from
+ \param map the frame settings object to read the data into
+ */
+bool KDChartParams::readDoubleMapNode( const QDomElement& element,
+ QMap<int,double>* value )
+{
+ QDomNode node = element.firstChild();
+ int curValue = -1;
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "Value" ) {
+ KDXML::readIntNode( element, curValue );
+ } else if( tagName == "Factor" ) {
+ Q_ASSERT( curValue != -1 ); // there was a Value tag before
+ double doubleValue;
+ KDXML::readDoubleNode( element, doubleValue );
+ value->insert( curValue, doubleValue );
+ } else {
+ qDebug( "Unknown tag in double map" );
+ }
+ }
+ node = node.nextSibling();
+ }
+
+ return true;
+}
+
+
+
+/**
+ Reads data from a DOM element node that represents a font
+ uses in a chart and fills the reference parameters
+ with the data.
+
+ \param element the DOM element to read from
+ \param font the represented font
+ \param useRelFont whether the font size is relative
+ \param relFontSize the relative font size
+ */
+bool KDChartParams::readChartFontNode( const QDomElement& element,
+ QFont& font,
+ bool& useRelFont,
+ int& relFontSize,
+ int* minFontSize )
+{
+ bool ok = true;
+ QFont tempFont;
+ bool tempRelFont;
+ int tempRelFontSize;
+ int tempMinFontSize=-1;
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "Font" ) {
+ ok = ok & KDXML::readFontNode( element, tempFont );
+ } else if( tagName == "UseRelFontSize" ) {
+ ok = ok & KDXML::readBoolNode( element, tempRelFont );
+ } else if( tagName == "RelFontSize" ) {
+ ok = ok & KDXML::readIntNode( element, tempRelFontSize );
+ } else if( tagName == "MinFontSize" ) {
+ ok = ok & KDXML::readIntNode( element, tempMinFontSize );
+ } else {
+ qDebug( "Unknown tag in color map" );
+ }
+ }
+ node = node.nextSibling();
+ }
+
+ if( ok ) {
+ font = tempFont;
+ useRelFont = tempRelFont;
+ relFontSize = tempRelFontSize;
+ if( minFontSize && 0 <= tempMinFontSize )
+ *minFontSize = tempMinFontSize;
+ }
+
+ return ok;
+}
+
+
+bool foundCoordAttribute( const QDomElement& element, const QString& postfix,
+ QVariant& val )
+{
+ if( element.hasAttribute( "NoValue"+postfix ) )
+ val = QVariant();
+ else if( element.hasAttribute( "DoubleValue"+postfix ) )
+ val = element.attribute( "DoubleValue"+postfix );
+ else if( element.hasAttribute( "DateTimeValue"+postfix ) )
+ val = element.attribute( "DateTimeValue"+postfix );
+ else if( element.hasAttribute( "StringValue"+postfix ) )
+ val = element.attribute( "StringValue"+postfix );
+ else
+ return false;
+
+ return true;
+}
+
+// PENDING(kalle) Support DateTime values, even when writing.
+/**
+ Reads data from a DOM element node that represents a chart
+ value and fills a KDChartData object with the data.
+
+ \param element the DOM element to read from
+ \param value the chart data object to read the data into
+ */
+bool KDChartParams::readChartValueNode( const QDomElement& element,
+ QVariant& valY,
+ QVariant& valX,
+ int& propID )
+{
+ if( foundCoordAttribute( element, "", valY ) ||
+ foundCoordAttribute( element, "Y", valY ) ){ // valY must be there
+ if( !foundCoordAttribute( element, "X", valX ) ){
+ valX = QVariant();
+ }
+ propID = 0;
+ if( element.hasAttribute( "PropertySetID" ) ) {
+ bool ok;
+ int i = element.attribute( "PropertySetID" ).toInt( &ok );
+ if( ok )
+ propID = i;
+ }
+ return true; // if Y value found everything is OK
+ }
+
+ return false;
+}
+
+
+/**
+ Converts the specified chart type enum to a string representation.
+
+ \param type the type enum to convert
+ \return the string representation of the type enum
+ */
+QString KDChartParams::chartTypeToString( ChartType type )
+{
+ switch( type ) {
+ case NoType:
+ return "NoType";
+ case Bar:
+ return "Bar";
+ case Line:
+ return "Line";
+ case Area:
+ return "Area";
+ case Pie:
+ return "Pie";
+ case HiLo:
+ return "HiLo";
+ case BoxWhisker:
+ return "BoxWhisker";
+ case Ring:
+ return "Ring";
+ case Polar:
+ return "Polar";
+ default: // should not happen
+ return "NoType";
+ }
+}
+
+
+/**
+ Converts the specified string to a chart type enum value.
+
+ \param string the string to convert
+ \return the chart type enum value
+ */
+KDChartParams::ChartType KDChartParams::stringToChartType( const QString& string )
+{
+ if( string == "NoType" )
+ return NoType;
+ else if( string == "Bar" )
+ return Bar;
+ else if( string == "Line" )
+ return Line;
+ else if( string == "Area" )
+ return Area;
+ else if( string == "Pie" )
+ return Pie;
+ else if( string == "HiLo" )
+ return HiLo;
+ else if( string == "BoxWhisker" )
+ return BoxWhisker;
+ else if( string == "Ring" )
+ return Ring;
+ else if( string == "Polar" )
+ return Polar;
+ else // default, should not happen
+ return NoType;
+}
+
+
+
+QString KDChartParams::markerStyleToString( int style )
+{
+ switch( style ) {
+ case LineMarkerSquare:
+ return "Square";
+ case LineMarkerDiamond:
+ return "Diamond";
+ case LineMarkerCircle:
+ return "Circle";
+ case LineMarker1Pixel:
+ return "one Pixel";
+ case LineMarker4Pixels:
+ return "four Pixels";
+ case LineMarkerRing:
+ return "Ring";
+ case LineMarkerCross:
+ return "Cross";
+ case LineMarkerFastCross:
+ return "fast Cross";
+ default: // should not happen
+ qDebug( "Unknown marker style" );
+ return "Circle";
+ }
+}
+QString KDChartParams::markerStyleToStringTr( int style )
+{
+ switch( style ) {
+ case LineMarkerSquare:
+ return tr( "Square" );
+ case LineMarkerDiamond:
+ return tr( "Diamond" );
+ case LineMarkerCircle:
+ return tr( "Circle" );
+ case LineMarker1Pixel:
+ return tr( "One pixel" );
+ case LineMarker4Pixels:
+ return tr( "Four pixels" );
+ case LineMarkerRing:
+ return tr( "Ring" );
+ case LineMarkerCross:
+ return tr( "Cross" );
+ case LineMarkerFastCross:
+ return tr( "fast Cross" );
+ default: // should not happen
+ qDebug( "Unknown line marker style!" );
+ return tr( "Circle" );
+ }
+}
+int KDChartParams::stringToMarkerStyle( const QString& string )
+{
+ if( string == "Square" )
+ return LineMarkerSquare;
+ else if( string == "Diamond" )
+ return LineMarkerDiamond;
+ else if( string == "Circle" )
+ return LineMarkerCircle;
+ else if( string == "one Pixel" )
+ return LineMarker1Pixel;
+ else if( string == "four Pixels" )
+ return LineMarker4Pixels;
+ else if( string == "Ring" )
+ return LineMarkerRing;
+ else if( string == "Cross" )
+ return LineMarkerCross;
+ else if( string == "fast Cross" )
+ return LineMarkerFastCross;
+ else // default, should not happen
+ return LineMarkerCircle;
+}
+int KDChartParams::stringToMarkerStyleTr( const QString& string )
+{
+ if( string == tr( "Square" ) )
+ return LineMarkerSquare;
+ else if( string == tr( "Diamond" ) )
+ return LineMarkerDiamond;
+ else if( string == tr( "Circle" ) )
+ return LineMarkerCircle;
+ else if( string == tr( "One pixel" ) )
+ return LineMarker1Pixel;
+ else if( string == tr( "Four pixels" ) )
+ return LineMarker4Pixels;
+ else if( string == tr( "Ring" ) )
+ return LineMarkerRing;
+ else if( string == tr( "Cross" ) )
+ return LineMarkerCross;
+ else if( string == tr( "fast Cross" ) )
+ return LineMarkerFastCross;
+ else // default, should not happen
+ return LineMarkerCircle;
+}
+
+
+
+/**
+ Converts the specified bar chart subtype enum to a string representation.
+
+ \param type the type enum to convert
+ \return the string representation of the type enum
+ */
+QString KDChartParams::barChartSubTypeToString( BarChartSubType type ) {
+ switch( type ) {
+ case BarNormal:
+ return "BarNormal";
+ case BarStacked:
+ return "BarStacked";
+ case BarPercent:
+ return "BarPercent";
+ case BarMultiRows:
+ return "BarMultiRows";
+ default: // should not happen
+ qDebug( "Unknown bar type" );
+ return "BarNormal";
+ }
+}
+
+
+/**
+ Converts the specified string to a bar chart subtype enum value.
+
+ \param string the string to convert
+ \return the bar chart subtype enum value
+ */
+KDChartParams::BarChartSubType KDChartParams::stringToBarChartSubType( const QString& string ) {
+ if( string == "BarNormal" )
+ return BarNormal;
+ else if( string == "BarStacked" )
+ return BarStacked;
+ else if( string == "BarPercent" )
+ return BarPercent;
+ else if( string == "BarMultiRows" )
+ return BarMultiRows;
+ else // should not happen
+ return BarNormal;
+}
+
+
+
+/**
+ Converts the specified string to a line chart subtype enum value.
+
+ \param string the string to convert
+ \return the line chart subtype enum value
+ */
+KDChartParams::LineChartSubType KDChartParams::stringToLineChartSubType( const QString& string ) {
+ if( string == "LineNormal" )
+ return LineNormal;
+ else if( string == "LineStacked" )
+ return LineStacked;
+ else if( string == "LinePercent" )
+ return LinePercent;
+ else // should not happen
+ return LineNormal;
+}
+
+
+
+/**
+ Converts the specified line chart subtype enum to a string representation.
+
+ \param type the type enum to convert
+ \return the string representation of the type enum
+ */
+QString KDChartParams::lineChartSubTypeToString( LineChartSubType type ) {
+ switch( type ) {
+ case LineNormal:
+ return "LineNormal";
+ case LineStacked:
+ return "LineStacked";
+ case LinePercent:
+ return "LinePercent";
+ default: // should not happen
+ qDebug( "Unknown bar type" );
+ return "LineNormal";
+ }
+}
+
+
+/**
+ Converts the specified line marker style enum to a string
+ representation.
+
+ \param type the type enum to convert
+ \return the string representation of the type enum
+ */
+QString KDChartParams::lineMarkerStyleToString( LineMarkerStyle style )
+{
+ return markerStyleToString( style );
+}
+
+
+/**
+ Converts the specified line marker style enum to a localized
+ string representation that can be used for string output.
+
+ \param type the type enum to convert
+ \return the localized string representation of the type enum
+ */
+QString KDChartParams::lineMarkerStyleToStringTr( LineMarkerStyle style )
+{
+ return markerStyleToStringTr( style );
+}
+
+
+/**
+ Converts the specified string to a line marker style value.
+
+ \param string the string to convert
+ \return the line marker style enum value
+ */
+KDChartParams::LineMarkerStyle KDChartParams::stringToLineMarkerStyle( const QString& string )
+{
+ return static_cast<KDChartParams::LineMarkerStyle>(stringToMarkerStyle( string ));
+}
+
+/**
+ Converts the specified localized string to a line marker style
+ value.
+
+ \param string the string to convert
+ \return the line marker style enum value
+ */
+KDChartParams::LineMarkerStyle KDChartParams::stringToLineMarkerStyleTr( const QString& string )
+{
+ return static_cast<KDChartParams::LineMarkerStyle>(stringToMarkerStyleTr( string ));
+}
+
+
+/**
+ Converts the specified area chart subtype enum to a string representation.
+
+ \param type the subtype enum to convert
+ \return the string representation of the type enum
+ */
+QString KDChartParams::areaChartSubTypeToString( AreaChartSubType type ) {
+ switch( type ) {
+ case AreaNormal:
+ return "AreaNormal";
+ case AreaStacked:
+ return "AreaStacked";
+ case AreaPercent:
+ return "AreaPercent";
+ default: // should not happen
+ qDebug( "Unknown area chart subtype" );
+ return "AreaNormal";
+ }
+}
+
+
+/**
+ Converts the specified string to a area chart subtype enum value.
+
+ \param string the string to convert
+ \return the area chart subtype enum value
+ */
+KDChartParams::AreaChartSubType KDChartParams::stringToAreaChartSubType( const QString& string ) {
+ if( string == "AreaNormal" )
+ return AreaNormal;
+ else if( string == "AreaStacked" )
+ return AreaStacked;
+ else if( string == "AreaPercent" )
+ return AreaPercent;
+ else // should not happen
+ return AreaNormal;
+}
+
+
+/**
+ Converts the specified area location enum to a string representation.
+
+ \param type the location enum to convert
+ \return the string representation of the type enum
+ */
+QString KDChartParams::areaLocationToString( AreaLocation type ) {
+ switch( type ) {
+ case AreaAbove:
+ return "Above";
+ case AreaBelow:
+ return "Below";
+ default: // should not happen
+ qDebug( "Unknown area location" );
+ return "Below";
+ }
+}
+
+
+/**
+ Converts the specified string to an area location enum value.
+
+ \param string the string to convert
+ \return the aration location enum value
+ */
+KDChartParams::AreaLocation KDChartParams::stringToAreaLocation( const QString& string ) {
+ if( string == "Above" )
+ return AreaAbove;
+ else if( string == "Below" )
+ return AreaBelow;
+ else // default, should not happen
+ return AreaBelow;
+}
+
+
+/**
+ Converts the specified string to a polar chart subtype enum value.
+
+ \param string the string to convert
+ \return the polar chart subtype enum value
+ */
+KDChartParams::PolarChartSubType KDChartParams::stringToPolarChartSubType( const QString& string ) {
+ if( string == "PolarNormal" )
+ return PolarNormal;
+ else if( string == "PolarStacked" )
+ return PolarStacked;
+ else if( string == "PolarPercent" )
+ return PolarPercent;
+ else // should not happen
+ return PolarNormal;
+}
+
+
+/**
+ Converts the specified polar chart subtype enum to a string representation.
+
+ \param type the type enum to convert
+ \return the string representation of the type enum
+ */
+QString KDChartParams::polarChartSubTypeToString( PolarChartSubType type ) {
+ switch( type ) {
+ case PolarNormal:
+ return "PolarNormal";
+ case LineStacked:
+ return "PolarStacked";
+ case LinePercent:
+ return "PolarPercent";
+ default: // should not happen
+ qDebug( "Unknown polar type" );
+ return "PolarNormal";
+ }
+}
+
+
+/**
+ Converts the specified polar marker style enum to a string
+ representation.
+
+ \param type the type enum to convert
+ \return the string representation of the type enum
+ */
+QString KDChartParams::polarMarkerStyleToString( PolarMarkerStyle style )
+{
+ return markerStyleToString( style );
+}
+
+
+/**
+ Converts the specified polar marker style enum to a localized
+ string representation that can be used for string output.
+
+ \param type the type enum to convert
+ \return the localized string representation of the type enum
+ */
+QString KDChartParams::polarMarkerStyleToStringTr( PolarMarkerStyle style )
+{
+ return markerStyleToStringTr( style );
+}
+
+
+/**
+ Converts the specified string to a polar marker style value.
+
+ \param string the string to convert
+ \return the polar marker style enum value
+ */
+KDChartParams::PolarMarkerStyle KDChartParams::stringToPolarMarkerStyle( const QString& string )
+{
+ return static_cast<KDChartParams::PolarMarkerStyle>(stringToMarkerStyle( string ));
+}
+
+
+/**
+ Converts the specified localized string to a polar marker style
+ value.
+
+ \param string the string to convert
+ \return the polar marker style enum value
+ */
+KDChartParams::PolarMarkerStyle KDChartParams::stringToPolarMarkerStyleTr( const QString& string )
+{
+ return static_cast<KDChartParams::PolarMarkerStyle>(stringToMarkerStyle( string ));
+}
+
+
+/**
+ Converts the specified HiLo chart subtype enum to a string representation.
+
+ \param type the subtype enum to convert
+ \return the string representation of the type enum
+ */
+QString KDChartParams::hiLoChartSubTypeToString( HiLoChartSubType type ) {
+ switch( type ) {
+ case HiLoSimple:
+ return "HiLoSimple";
+ case HiLoClose:
+ return "HiLoClose";
+ case HiLoOpenClose:
+ return "HiLoOpenClose";
+ default: // should not happen
+ qDebug( "Unknown HiLo chart subtype" );
+ return "HiLoNormal";
+ }
+}
+
+
+/**
+ Converts the specified string to a HiLo chart subtype enum value.
+
+ \param string the string to convert
+ \return the HiLo chart subtype enum value
+ */
+KDChartParams::HiLoChartSubType KDChartParams::stringToHiLoChartSubType( const QString& string ) {
+ if( string == "HiLoSimple" )
+ return HiLoSimple;
+ else if( string == "HiLoClose" )
+ return HiLoClose;
+ else if( string == "HiLoOpenClose" )
+ return HiLoOpenClose;
+ else // should not happen
+ return HiLoNormal;
+}
+
+
+/**
+ Converts the specified string to a BoxWhisker chart subtype enum value.
+
+ \param string the string to convert
+ \return the BoxWhisker chart subtype enum value
+ */
+KDChartParams::BWChartSubType KDChartParams::stringToBWChartSubType( const QString& string ) {
+ if( string == "BWSimple" )
+ return BWSimple;
+ else // should not happen
+ return BWNormal;
+}
+
+/**
+ Converts the specified BWStatVal enum to a string representation.
+
+ \param type the BWStatVal enum to convert
+ \return the string representation of the type BWStatVal
+ */
+QString KDChartParams::bWChartStatValToString( BWStatVal type ) {
+ switch( type ) {
+ case UpperOuterFence:
+ return "UpperOuterFence";
+ case UpperInnerFence:
+ return "UpperInnerFence";
+ case Quartile3:
+ return "Quartile3";
+ case Median:
+ return "Median";
+ case Quartile1:
+ return "Quartile1";
+ case LowerInnerFence:
+ return "LowerInnerFence";
+ case LowerOuterFence:
+ return "LowerOuterFence";
+ case MaxValue:
+ return "MaxValue";
+ case MeanValue:
+ return "MeanValue";
+ case MinValue:
+ return "MinValue";
+ default: // should not happen
+ qDebug( "Unknown BoxWhisker statistical value type" );
+ return "unknown";
+ }
+}
+
+/**
+ Converts the specified string to a BWStatVal enum value.
+
+ \param string the string to convert
+ \return the BWStatVal enum value
+ */
+KDChartParams::BWStatVal KDChartParams::stringToBWChartStatVal( const QString& string ) {
+ if( string == "UpperOuterFence" )
+ return UpperOuterFence;
+ else if( string == "UpperInnerFence" )
+ return UpperInnerFence;
+ else if( string == "Quartile3" )
+ return Quartile3;
+ else if( string == "Median" )
+ return Median;
+ else if( string == "Quartile1" )
+ return Quartile1;
+ else if( string == "LowerInnerFence" )
+ return LowerInnerFence;
+ else if( string == "LowerOuterFence" )
+ return LowerOuterFence;
+ else if( string == "MaxValue" )
+ return MaxValue;
+ else if( string == "MeanValue" )
+ return MeanValue;
+ else if( string == "MinValue" )
+ return MinValue;
+ else // should not happen
+ return BWStatValUNKNOWN;
+}
+
+
+/**
+ Converts the specified legend position enum to a string representation.
+
+ \param type the legend position enum to convert
+ \return the string representation of the type enum
+ */
+QString KDChartParams::legendPositionToString( LegendPosition pos ) {
+ switch( pos ) {
+ case NoLegend:
+ return "NoLegend";
+ case LegendTop:
+ return "LegendTop";
+ case LegendBottom:
+ return "LegendBottom";
+ case LegendLeft:
+ return "LegendLeft";
+ case LegendRight:
+ return "LegendRight";
+ case LegendTopLeft:
+ return "LegendTopLeft";
+ case LegendTopLeftTop:
+ return "LegendTopLeftTop";
+ case LegendTopLeftLeft:
+ return "LegendTopLeftLeft";
+ case LegendBottomLeft:
+ return "LegendBottomLeft";
+ case LegendBottomLeftBottom:
+ return "LegendBottomLeftBottom";
+ case LegendBottomLeftLeft:
+ return "LegendBottomLeftLeft";
+ case LegendTopRight:
+ return "LegendTopRight";
+ case LegendTopRightTop:
+ return "LegendTopRightTop";
+ case LegendTopRightRight:
+ return "LegendTopRightRight";
+ case LegendBottomRight:
+ return "LegendBottomRight";
+ case LegendBottomRightBottom:
+ return "LegendBottomRightBottom";
+ case LegendBottomRightRight:
+ return "LegendBottomRightRight";
+ default: // should not happen
+ qDebug( "Unknown legend position" );
+ return "LegendLeft";
+ }
+}
+
+
+/**
+ Converts the specified string to a legend position enum value.
+
+ \param string the string to convert
+ \return the legend position enum value
+ */
+KDChartParams::LegendPosition KDChartParams::stringToLegendPosition( const QString& string ) {
+ if( string == "NoLegend" )
+ return NoLegend;
+ else if( string == "LegendTop" )
+ return LegendTop;
+ else if( string == "LegendBottom" )
+ return LegendBottom;
+ else if( string == "LegendLeft" )
+ return LegendLeft;
+ else if( string == "LegendRight" )
+ return LegendRight;
+ else if( string == "LegendTopLeft" )
+ return LegendTopLeft;
+ else if( string == "LegendTopLeftTop" )
+ return LegendTopLeftTop;
+ else if( string == "LegendTopLeftLeft" )
+ return LegendTopLeftLeft;
+ else if( string == "LegendBottomLeft" )
+ return LegendBottomLeft;
+ else if( string == "LegendBottomLeftBottom" )
+ return LegendBottomLeftBottom;
+ else if( string == "LegendBottomLeftLeft" )
+ return LegendBottomLeftLeft;
+ else if( string == "LegendTopRight" )
+ return LegendTopRight;
+ else if( string == "LegendTopRightTop" )
+ return LegendTopRightTop;
+ else if( string == "LegendTopRightRight" )
+ return LegendTopRightRight;
+ else if( string == "LegendBottomRight" )
+ return LegendBottomRight;
+ else if( string == "LegendBottomRightBottom" )
+ return LegendBottomRightBottom;
+ else if( string == "LegendBottomRightRight" )
+ return LegendBottomRightRight;
+ else // default, should not happen
+ return LegendLeft;
+}
+
+/**
+ Converts the specified legend source enum to a string representation.
+
+ \param source the legend source enum to convert
+ \return the string representation of the type enum
+ */
+QString KDChartParams::legendSourceToString( LegendSource source ) {
+ switch( source ) {
+ case LegendManual:
+ return "Manual";
+ case LegendFirstColumn:
+ return "FirstColumn";
+ case LegendAutomatic:
+ return "Automatic";
+ default: // should not happen
+ qDebug( "Unknown legend source" );
+ return "Automatic";
+ }
+}
+
+
+/**
+ Converts the specified string to a legend source enum value.
+
+ \param string the string to convert
+ \return the legend source enum value
+ */
+KDChartParams::LegendSource KDChartParams::stringToLegendSource( const QString& string ) {
+ if( string == "Manual" )
+ return LegendManual;
+ else if( string == "FirstColumn" )
+ return LegendFirstColumn;
+ else if( string == "Automatic" )
+ return LegendAutomatic;
+ else // default, should not happen
+ return LegendAutomatic;
+}
+
+
+/**
+ Converts the specified chart source mode enum value to a string.
+
+ \param mode the chart source mode enum value to convert
+ \return the string
+ */
+QString KDChartParams::chartSourceModeToString( const SourceMode& mode )
+{
+ switch( mode ){
+ case UnknownMode:
+ return "UnknownMode";
+ case DontUse:
+ return "DontUse";
+ case DataEntry:
+ return "DataEntry";
+ case AxisLabel:
+ return "AxisLabel";
+ case LegendText:
+ return "LegendText";
+ case ExtraLinesAnchor:
+ return "ExtraLinesAnchor";
+ default: // should not happen
+ return "UnknownMode";
+ }
+}
+
+
+/**
+ Converts the specified string to a chart source mode enum value.
+
+ \param string the string to convert
+ \return the chart source mode enum value
+ */
+KDChartParams::SourceMode KDChartParams::stringToChartSourceMode( const QString& string )
+{
+ if( string.isEmpty() )
+ return UnknownMode;
+ // compatibility with pre-1.0 KDChart stream format:
+ bool bOk;
+ int mode = string.toInt( &bOk );
+ if( bOk && mode >= 0 && mode <= Last_SourceMode )
+ return (KDChartParams::SourceMode)mode;
+ // new (KDChart 1.0...) stream format:
+ if( string == "UnknownMode" )
+ return UnknownMode;
+ if( string == "DontUse" )
+ return DontUse;
+ if( string == "DataEntry" )
+ return DataEntry;
+ if( string == "AxisLabel" )
+ return AxisLabel;
+ if( string == "LegendText" )
+ return LegendText;
+ if( string == "ExtraLinesAnchor" )
+ return ExtraLinesAnchor;
+ // should not happen
+ return UnknownMode;
+}
+
+
+/**
+ Converts the specified BoxWhisker chart subtype enum to a string
+ representation.
+
+ \param type the subtype enum to convert
+ \return the string representation of the type enum
+ */
+QString KDChartParams::bWChartSubTypeToString( BWChartSubType type ) {
+ switch( type ) {
+ case BWSimple:
+ return "BWSimple";
+ default: // should not happen
+ qDebug( "Unknown BoxWhisker chart subtype" );
+ return "BWNormal";
+ }
+}
+
diff --git a/libkdchart/KDChartPiePainter.cpp b/libkdchart/KDChartPiePainter.cpp
new file mode 100644
index 0000000..f1715f1
--- /dev/null
+++ b/libkdchart/KDChartPiePainter.cpp
@@ -0,0 +1,831 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#include "KDChartEnums.h"
+#include "KDChartPiePainter.h"
+#include "KDChartParams.h"
+
+#include <qpainter.h>
+#include <qvaluestack.h>
+#include <qmessagebox.h>
+
+#define DEGTORAD(d) (d)*M_PI/180
+
+#include <math.h>
+
+/**
+ \class KDChartPiePainter KDChartPiePainter.h
+
+ \brief A chart painter implementation that can paint pie charts.
+
+ PENDING(kalle) Write more documentation.
+ */
+
+/**
+ Constructor. Sets up internal data structures as necessary.
+
+ \param params the KDChartParams structure that defines the chart
+ */
+ KDChartPiePainter::KDChartPiePainter( KDChartParams* params ) :
+KDChartPainter( params )
+{
+ // This constructor intentionally left blank so far; we cannot setup the
+ // geometry yet since we do not know the size of the painter.
+}
+
+
+/**
+ Destructor.
+ */
+KDChartPiePainter::~KDChartPiePainter()
+{
+ // intentionally left blank
+}
+
+//static bool bHelp=true;
+
+/**
+ Paints the actual data area.
+
+ \param painter the QPainter onto which the chart should be painted
+ \param data the data that will be displayed as a chart
+ \param paint2nd specifies whether the main chart or the additional chart is to be drawn now
+ \param regions a pointer to a list of regions that will be filled
+ with regions representing the data segments, if not null
+ */
+void KDChartPiePainter::paintData( QPainter* painter,
+ KDChartTableDataBase* data,
+ bool paint2nd,
+ KDChartDataRegionList* regions )
+{
+//bHelp=true;
+ uint chart = paint2nd ? 1 : 0;
+
+ QRect ourClipRect( _dataRect );
+ ourClipRect.addCoords( -1,-1,1,1 );
+
+ const QWMatrix & world = painter->worldMatrix();
+ ourClipRect =
+#if COMPAT_QT_VERSION >= 0x030000
+ world.mapRect( ourClipRect );
+#else
+ world.map( ourClipRect );
+#endif
+
+ painter->setClipRect( ourClipRect );
+
+ // find which dataset to paint
+ uint dataset;
+ if ( !params()->findDataset( KDChartParams::DataEntry
+ ,
+ dataset, dataset ) ) {
+ return ; // nothing to draw
+ }
+
+ if ( dataset == KDCHART_ALL_DATASETS )
+ // setChartSourceMode() has not been used (or all datasets have been
+ // configured to be used); use the first dataset by
+ // default
+ dataset = 0;
+
+
+ // Number of values: If -1, use all values, otherwise use the
+ // specified number of values.
+ if ( params()->numValues() != -1 )
+ _numValues = params()->numValues();
+ else
+ _numValues = data->usedCols();
+
+ _startAngles.resize( _numValues );
+ _angleLens.resize( _numValues );
+
+ // compute position
+ _size = QMIN( _dataRect.width(), _dataRect.height() ); // initial size
+ // if the pies explode, we need to give them additional space =>
+ // make the basic size smaller
+ if ( params()->explode() ) {
+ double doubleSize = ( double ) _size;
+ doubleSize /= ( 1.0 + params()->explodeFactor() * 2 );
+ _size = ( int ) doubleSize;
+ }
+
+ int sizeFor3DEffect = 0;
+ if ( !params()->threeDPies() ) {
+
+ int x = ( _dataRect.width() == _size ) ? 0 : ( ( _dataRect.width() - _size ) / 2 );
+ int y = ( _dataRect.height() == _size ) ? 0 : ( ( _dataRect.height() - _size ) / 2 );
+ _position = QRect( x, y, _size, _size );
+ _position.moveBy( _dataRect.left(), _dataRect.top() );
+ } else {
+ // threeD: width is the maximum possible width; height is 1/2 of that
+ int x = ( _dataRect.width() == _size ) ? 0 : ( ( _dataRect.width() - _size ) / 2 );
+ int height = _size;
+ // make sure that the height plus the threeDheight is not more than the
+ // available size
+ if ( params()->threeDPieHeight() >= 0 ) {
+ // positive pie height: absolute value
+ sizeFor3DEffect = params()->threeDPieHeight();
+ height = _size - sizeFor3DEffect;
+ } else {
+ // negative pie height: relative value
+ sizeFor3DEffect = -( int ) ( ( ( double ) params()->threeDPieHeight() / 100.0 ) * ( double ) height );
+ height = _size - sizeFor3DEffect;
+ }
+ int y = ( _dataRect.height() == height ) ? 0 : ( ( _dataRect.height() - height - sizeFor3DEffect ) / 2 );
+
+ _position = QRect( _dataRect.left() + x, _dataRect.top() + y,
+ _size, height );
+ // _position.moveBy( _dataRect.left(), _dataRect.top() );
+ }
+
+ double sum = data->rowAbsSum( dataset );
+ if( sum==0 ) //nothing to draw
+ return;
+ double sectorsPerValue = 5760.0 / sum; // 5760 == 16*360, number of sections in Qt circle
+
+ int currentValue = params()->pieStart() * 16;
+ bool atLeastOneValue = false; // guard against completely empty tables
+ QVariant vValY;
+ for ( int value = 0; value < _numValues; value++ ) {
+ // is there anything at all at this value
+ /* see above for meaning of 16 */
+
+ if( data->cellCoord( dataset, value, vValY, 1 ) &&
+ QVariant::Double == vValY.type() ){
+ _startAngles[ value ] = currentValue;
+ const double cellValue = fabs( vValY.toDouble() );
+ _angleLens[ value ] = ( int ) floor( cellValue * sectorsPerValue + 0.5 );
+ atLeastOneValue = true;
+ } else { // mark as non-existent
+ _angleLens[ value ] = 0;
+ if ( value > 0 )
+ _startAngles[ value ] = _startAngles[ value - 1 ];
+ else
+ _startAngles[ value ] = currentValue;
+ }
+
+ currentValue = _startAngles[ value ] + _angleLens[ value ];
+ }
+
+ // If there was no value at all, bail out, to avoid endless loops
+ // later on (e.g. in findPieAt()).
+ if( !atLeastOneValue )
+ return;
+
+
+ // Find the backmost pie which is at +90° and needs to be drawn
+ // first
+ int backmostpie = findPieAt( 90 * 16 );
+ // Find the frontmost pie (at -90°/+270°) that should be drawn last
+ int frontmostpie = findPieAt( 270 * 16 );
+ // and put the backmost pie on the TODO stack to initialize it,
+ // but only if it is not the frontmostpie
+ QValueStack < int > todostack;
+ if ( backmostpie != frontmostpie )
+ todostack.push( backmostpie );
+ else {
+ // Otherwise, try to find something else
+ int leftOfCurrent = findLeftPie( backmostpie );
+ if ( leftOfCurrent != frontmostpie ) {
+ todostack.push( leftOfCurrent );
+ } else {
+ int rightOfCurrent = findRightPie( backmostpie );
+ if ( rightOfCurrent != frontmostpie ) {
+ todostack.push( rightOfCurrent );
+ }
+ }
+ // If we get here, there was nothing else, and we will bail
+ // out of the while loop below.
+ }
+
+ // The list with pies that have already been drawn
+
+ QValueList < int > donelist;
+
+ // Draw pies until the todostack is empty or only the frontmost
+ // pie is there
+ while ( !todostack.isEmpty() &&
+ !( ( todostack.count() == 1 ) &&
+ ( ( todostack.top() == frontmostpie ) ) ) ) {
+ // The while loop cannot be cancelled if frontmostpie is on
+ // top of the stack, but this is also backmostpie (can happen
+ // when one of the pies covers more than 1/2 of the circle. In
+ // this case, we need to find something else to put on the
+ // stack to get things going.
+
+ // take one pie from the stack
+ int currentpie = todostack.pop();
+ // if this pie was already drawn, ignore it
+ if ( donelist.find( currentpie ) != donelist.end() )
+ continue;
+
+ // If this pie is the frontmost pie, put it back, but at the
+ // second position (otherwise, there would be an endless
+ // loop). If this pie is the frontmost pie, there must be at
+ // least one other pie, otherwise the loop would already have
+ // been terminated by the loop condition.
+ if ( currentpie == frontmostpie ) {
+ Q_ASSERT( !todostack.isEmpty() );
+ // QValueStack::exchange() would be nice here...
+ int secondpie = todostack.pop();
+ if ( currentpie == secondpie )
+ // no need to have the second pie twice on the stack,
+ // forget about one instance and take the third
+ // instead
+ if ( todostack.isEmpty() )
+ break; // done anyway
+ else
+ secondpie = todostack.pop();
+ todostack.push( currentpie );
+ todostack.push( secondpie );
+ continue;
+ }
+
+ // When we get here, we can just draw the pie and proceed.
+ drawOnePie( painter, data, dataset, currentpie, chart,
+ sizeFor3DEffect,
+ regions );
+
+ // Mark the pie just drawn as done.
+ donelist.append( currentpie );
+
+ // Now take the pie to the left and to the right, check
+ // whether these have not been painted already, and put them
+ // on the stack.
+ int leftOfCurrent = findLeftPie( currentpie );
+ if ( donelist.find( leftOfCurrent ) == donelist.end() )
+ todostack.push( leftOfCurrent );
+ int rightOfCurrent = findRightPie( currentpie );
+ if ( donelist.find( rightOfCurrent ) == donelist.end() )
+ todostack.push( rightOfCurrent );
+ }
+
+ // now only the frontmost pie is left to draw
+ drawOnePie( painter, data, dataset, frontmostpie, chart,
+ sizeFor3DEffect,
+ regions );
+}
+
+
+/**
+ Internal method that draws one of the pies in a pie chart.
+
+ \param painter the QPainter to draw in
+ \param dataset the dataset to draw the pie for
+ \param pie the pie to draw
+ \param the chart to draw the pie in
+ \param regions a pointer to a list of regions that will be filled
+ with regions representing the data segments, if not null
+ */
+void KDChartPiePainter::drawOnePie( QPainter* painter,
+ KDChartTableDataBase* /*data*/,
+ uint dataset, uint pie, uint chart,
+ uint threeDPieHeight,
+ KDChartDataRegionList* regions )
+{
+ // Is there anything to draw at all?
+ int angleLen = _angleLens[ ( int ) pie ];
+ if ( angleLen ) {
+ int startAngle = _startAngles[ ( int ) pie ];
+
+ KDChartDataRegion* datReg = 0;
+ QRegion* region = 0;
+ bool mustDeleteRegion = false;
+ if ( regions ){
+ region = new QRegion();
+ mustDeleteRegion = true;
+ }
+
+ QRect drawPosition = _position;
+ if ( params()->explode() ) {
+ // need to compute a new position for each or some of the pie
+ QValueList<int> explodeList = params()->explodeValues();
+ if( explodeList.count() == 0 || // nothing on list, explode all
+ explodeList.find( pie ) != explodeList.end() ) {
+ double explodeAngle = ( startAngle + angleLen / 2 ) / 16;
+ double explodeAngleRad = DEGTORAD( explodeAngle );
+ double cosAngle = cos( explodeAngleRad );
+ double sinAngle = -sin( explodeAngleRad );
+
+ // find the explode factor for this particular pie
+ double explodeFactor = 0.0;
+ QMap<int,double> explodeFactors = params()->explodeFactors();
+ if( !explodeFactors.contains( pie ) ) // not on factors list, use default
+ explodeFactor = params()->explodeFactor();
+ else // on factors list, use segment-specific value
+ explodeFactor = explodeFactors[pie];
+
+ double explodeX = explodeFactor * _size * cosAngle;
+ double explodeY = explodeFactor * _size * sinAngle;
+ drawPosition.moveBy( static_cast<int>( explodeX ), static_cast<int>( explodeY ) );
+ } else
+ drawPosition = _position;
+ } else
+ drawPosition = _position;
+
+ // The 3D effect needs to be drawn first because it could
+ // otherwise partly hide the pie itself.
+ if ( params()->threeDPies() ) {
+ draw3DEffect( painter, drawPosition, dataset, pie, chart,
+ threeDPieHeight,
+ params()->explode(), region );
+ }
+
+ painter->setBrush( params()->dataColor( pie ) );
+ if ( angleLen == 5760 ) {
+ // full circle, avoid nasty line in the middle
+ painter->drawEllipse( drawPosition );
+ if ( regions ) {
+ QPointArray hitregion;
+ hitregion.makeEllipse( drawPosition.x(), drawPosition.y(),
+ drawPosition.width(),
+ drawPosition.height() );
+ datReg = new KDChartDataRegion( region->unite( QRegion( hitregion ) ),
+ dataset,
+ pie,
+ chart );
+ datReg->points[ KDChartEnums::PosCenter ]
+ = drawPosition.center();
+ datReg->points[ KDChartEnums::PosCenterRight ]
+ = pointOnCircle( drawPosition, 0 );
+ datReg->points[ KDChartEnums::PosTopRight ]
+ = pointOnCircle( drawPosition, 720 );
+ datReg->points[ KDChartEnums::PosTopCenter ]
+ = pointOnCircle( drawPosition, 1440 );
+ datReg->points[ KDChartEnums::PosTopLeft ]
+ = pointOnCircle( drawPosition, 2160 );
+ datReg->points[ KDChartEnums::PosCenterLeft ]
+ = pointOnCircle( drawPosition, 2880 );
+ datReg->points[ KDChartEnums::PosBottomLeft ]
+ = pointOnCircle( drawPosition, 3600 );
+ datReg->points[ KDChartEnums::PosBottomCenter ]
+ = pointOnCircle( drawPosition, 4320 );
+ datReg->points[ KDChartEnums::PosBottomRight ]
+ = pointOnCircle( drawPosition, 5040 );
+ datReg->startAngle = 2880;
+ datReg->angleLen = 5760;
+ regions->append( datReg );
+ }
+ } else {
+ // draw the top of this piece
+ // Start with getting the points for the arc.
+ const int arcPoints = angleLen;
+ QPointArray collect(arcPoints+2);
+ int i=0;
+ for ( ; i<=angleLen; ++i){
+ collect.setPoint(i, pointOnCircle( drawPosition, startAngle+i ));
+ }
+ // Adding the center point of the piece.
+ collect.setPoint(i, drawPosition.center() );
+
+
+
+ painter->drawPolygon( collect );
+
+//if( bHelp ){
+// painter->drawPolyline( collect );
+//bHelp=false;
+//}
+
+
+
+ if ( regions ) {
+ QPointArray hitregion;
+ hitregion.makeArc( drawPosition.x(), drawPosition.y(),
+ drawPosition.width(),
+ drawPosition.height(),
+ ( int ) startAngle, ( int ) angleLen );
+ hitregion.resize( hitregion.size() + 1 );
+ hitregion.setPoint( hitregion.size() - 1,
+ drawPosition.center() );
+ datReg = new KDChartDataRegion( region->unite( QRegion( hitregion ) ),
+ dataset,
+ pie,
+ chart );
+
+ datReg->points[ KDChartEnums::PosTopLeft ]
+ = pointOnCircle( drawPosition, startAngle + angleLen );
+ datReg->points[ KDChartEnums::PosTopCenter ]
+ = pointOnCircle( drawPosition, startAngle + angleLen / 2 );
+ datReg->points[ KDChartEnums::PosTopRight ]
+ = pointOnCircle( drawPosition, startAngle );
+
+ datReg->points[ KDChartEnums::PosBottomLeft ] = drawPosition.center();
+ datReg->points[ KDChartEnums::PosBottomCenter ]
+ = datReg->points[ KDChartEnums::PosBottomLeft ];
+ datReg->points[ KDChartEnums::PosBottomRight ]
+ = datReg->points[ KDChartEnums::PosBottomLeft ];
+
+ datReg->points[ KDChartEnums::PosCenterLeft ]
+ = QPoint( ( datReg->points[ KDChartEnums::PosTopLeft ].x()
+ + datReg->points[ KDChartEnums::PosBottomLeft ].x() ) / 2,
+ ( datReg->points[ KDChartEnums::PosTopLeft ].y()
+ + datReg->points[ KDChartEnums::PosBottomLeft ].y() ) / 2 );
+ datReg->points[ KDChartEnums::PosCenter ]
+ = QPoint( ( datReg->points[ KDChartEnums::PosTopCenter ].x()
+ + datReg->points[ KDChartEnums::PosBottomCenter ].x() ) / 2,
+ ( datReg->points[ KDChartEnums::PosTopCenter ].y()
+ + datReg->points[ KDChartEnums::PosBottomCenter ].y() ) / 2 );
+ datReg->points[ KDChartEnums::PosCenterRight ]
+ = QPoint( ( datReg->points[ KDChartEnums::PosTopRight ].x()
+ + datReg->points[ KDChartEnums::PosBottomRight ].x() ) / 2,
+ ( datReg->points[ KDChartEnums::PosTopRight ].y()
+ + datReg->points[ KDChartEnums::PosBottomRight ].y() ) / 2 );
+
+ datReg->startAngle = startAngle;
+ datReg->angleLen = angleLen;
+ regions->append( datReg );
+ }
+ }
+ if( mustDeleteRegion )
+ delete region;
+ }
+}
+
+
+/**
+ Internal method that draws the shadow creating the 3D effect of a pie
+
+ \param painter the QPainter to draw in
+ \param rect the position to draw at
+ \param dataset the dataset to draw the pie for
+ \param pie the pie to draw the shadow for
+ \param the chart to draw the pie in
+ \param threeDHeight the height of the shadow
+ \param regions a pointer to a list of regions that will be filled
+ with regions representing the data segments, if not null
+ */
+void KDChartPiePainter::draw3DEffect( QPainter* painter,
+ const QRect& drawPosition,
+ uint dataset, uint pie, uint chart,
+ uint threeDHeight,
+ bool /*explode*/,
+ QRegion* region )
+{
+ // NOTE: We cannot optimize away drawing some of the effects (even
+ // when not exploding), because some of the pies might be left out
+ // in future versions which would make some of the normally hidden
+ // pies visible. Complex hidden-line algorithms would be much more
+ // expensive than just drawing for nothing.
+
+ // No need to save the brush, will be changed on return from this
+ // method anyway.
+ painter->setBrush( QBrush( params()->dataShadow1Color( pie ),
+ params()->shadowPattern() ) );
+
+ int startAngle = _startAngles[ ( int ) pie ];
+ int endAngle = startAngle + _angleLens[ ( int ) pie ];
+ // Normalize angles
+ while ( startAngle >= 5760 )
+ startAngle -= 5760;
+ while ( endAngle >= 5760 )
+ endAngle -= 5760;
+ Q_ASSERT( startAngle >= 0 && startAngle <= 360 * 16 );
+ Q_ASSERT( endAngle >= 0 && endAngle <= 360 * 16 );
+
+ //int centerY = drawPosition.center().y();
+
+ if ( startAngle == endAngle ||
+ startAngle == endAngle - 5760 ) { // full circle
+ drawArcEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, 2880, 5760, region );
+ } else if ( startAngle <= 90 * 16 ) {
+ if ( endAngle <= 90 * 16 ) {
+ if ( startAngle <= endAngle ) {
+ /// starts and ends in first quadrant, less than 1/4
+ drawStraightEffectSegment( painter, drawPosition, dataset,
+ pie, chart, threeDHeight, startAngle,
+ region );
+ } else {
+ /// starts and ends in first quadrant, more than 3/4
+ drawStraightEffectSegment( painter, drawPosition, dataset,
+ pie, chart, threeDHeight, startAngle,
+ region );
+ drawArcEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, 2880, 5760, region );
+ }
+ } else if ( endAngle <= 180 * 16 ) {
+ /// starts in first quadrant, ends in second quadrant,
+ /// less than 1/2
+ drawStraightEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, startAngle, region );
+ drawStraightEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, endAngle, region );
+ } else if ( endAngle <= 270 * 16 ) {
+ /// starts in first quadrant, ends in third quadrant
+ drawStraightEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, startAngle,
+ region );
+ drawStraightEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, endAngle, region );
+ drawArcEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, 2880, endAngle, region );
+ } else { // 270*16 < endAngle < 360*16
+ /// starts in first quadrant, ends in fourth quadrant,
+ /// more than 3/4
+ drawStraightEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, startAngle, region );
+ drawArcEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, 2880, endAngle, region );
+ }
+ } else if ( startAngle <= 180 * 16 ) {
+ if ( endAngle <= 90 * 16 ) {
+ drawArcEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, 2880, 5760, region );
+ } else if ( endAngle <= 180 * 16 ) {
+ if ( startAngle <= endAngle ) {
+ /// starts in second quadrant, ends in second
+ /// quadrant, less than 1/4
+ drawStraightEffectSegment( painter, drawPosition, dataset,
+ pie, chart, threeDHeight, endAngle,
+ region );
+ } else {
+ /// starts in second quadrant, ends in second
+ /// quadrant, more than 1/4
+ drawStraightEffectSegment( painter, drawPosition, dataset,
+ pie, chart, threeDHeight, endAngle,
+ region );
+ drawArcEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, 2880, 5760, region );
+ }
+ } else if ( endAngle <= 270 * 16 ) {
+ drawStraightEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, endAngle, region );
+ drawArcEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, 2880, endAngle, region );
+ } else { // 270*16 < endAngle < 360*16
+ drawArcEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, 2880, endAngle, region );
+ }
+ } else if ( startAngle <= 270 * 16 ) {
+ if ( endAngle <= 90 * 16 ) {
+ drawArcEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, startAngle, 5760, region );
+ } else if ( endAngle <= 180 * 16 ) {
+ drawStraightEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, endAngle, region );
+ drawArcEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, startAngle, 5760, region );
+ } else if ( endAngle <= 270 * 16 ) {
+ if ( startAngle <= endAngle ) {
+ /// starts in third quadrant, ends in third quadrant,
+ /// less than 1/4
+ drawStraightEffectSegment( painter, drawPosition, dataset,
+ pie, chart, threeDHeight, endAngle,
+ region );
+ drawArcEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, startAngle, endAngle,
+ region );
+ } else {
+ /// starts in third quadrant, ends in third quadrant,
+ /// more than 3/4
+ drawStraightEffectSegment( painter, drawPosition, dataset,
+ pie, chart, threeDHeight, endAngle,
+ region );
+ drawArcEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, 2880, endAngle,
+ region );
+ drawArcEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, startAngle, 5760,
+ region );
+ }
+ } else { // 270*16 < endAngle < 360*16
+ drawArcEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, startAngle, endAngle,
+ region );
+ }
+ } else { // 270*16 < startAngle < 360*16
+ if ( endAngle <= 90 * 16 ) {
+ drawStraightEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, startAngle, region );
+ drawArcEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, startAngle, 5760, region );
+ } else if ( endAngle <= 180 * 16 ) {
+ drawStraightEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, startAngle, region );
+ drawStraightEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, endAngle, region );
+ drawArcEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, startAngle, 5760, region );
+ } else if ( endAngle <= 270 * 16 ) {
+ drawStraightEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, startAngle, region );
+ drawStraightEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, endAngle, region );
+ drawArcEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, 2880, endAngle, region );
+ drawArcEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, startAngle, 5760, region );
+ } else { // 270*16 < endAngle < 360*16
+ if ( startAngle <= endAngle ) {
+ /// starts in fourth quadrant, ends in fourth
+ /// quadrant, less than 1/4
+ drawStraightEffectSegment( painter, drawPosition, dataset,
+ pie, chart, threeDHeight, startAngle,
+ region );
+ drawArcEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, startAngle, endAngle,
+ region );
+ } else {
+ /// starts in fourth quadrant, ends in fourth
+ /// quadrant, more than 3/4
+ drawStraightEffectSegment( painter, drawPosition, dataset,
+ pie, chart, threeDHeight, startAngle,
+ region );
+ drawArcEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, startAngle, 5760,
+ region );
+ drawArcEffectSegment( painter, drawPosition, dataset, pie, chart,
+ threeDHeight, 2880, endAngle, region );
+ }
+ }
+ }
+}
+
+
+/**
+ Internal method that draws a segment with a straight 3D effect
+
+ \param painter the QPainter to draw in
+ \param rect the position to draw at
+ \param threeDHeight the height of the shadow
+ \param angle the angle of the segment
+ \param regions a pointer to a list of regions that will be filled
+ with regions representing the data segments, if not null
+ */
+void KDChartPiePainter::drawStraightEffectSegment( QPainter* painter,
+ const QRect& rect,
+ uint /*dataset*/, uint /*pie*/, uint /*chart*/,
+ int threeDHeight,
+ int angle,
+ QRegion* region )
+{
+ QPoint center = rect.center();
+ QPointArray points( 4 );
+ QPoint circlePoint = pointOnCircle( rect, angle );
+ points.setPoint( 0, center );
+ points.setPoint( 1, circlePoint );
+ points.setPoint( 2, circlePoint.x(), circlePoint.y() + threeDHeight );
+ points.setPoint( 3, center.x(),
+ center.y() + threeDHeight );
+ painter->drawPolygon( points );
+ if ( region )
+ *region += QRegion( points );
+}
+
+
+/**
+ Internal method that draws a segment with an arc 3D effect
+
+ \param painter the QPainter to draw in
+ \param rect the position to draw at
+ \param threeDHeight the height of the shadow
+ \param startAngle the starting angle of the segment
+ \param endAngle the ending angle of the segment
+ \param regions a pointer to a list of regions that will be filled
+ with regions representing the data segments, if not null
+ */
+void KDChartPiePainter::drawArcEffectSegment( QPainter* painter,
+ const QRect& rect,
+ uint /*dataset*/, uint /*pie*/, uint /*chart*/,
+ int threeDHeight,
+ int startAngle,
+ int endAngle,
+ QRegion* region )
+{
+ // Start with getting the points for the inner arc.
+ const int startA = QMIN(startAngle, endAngle);
+ const int endA = QMAX(startAngle, endAngle);
+ const int arcPoints = endA-startA+1;
+ QPointArray collect(arcPoints * 2);
+ for ( int angle=endA; angle>=startA; --angle){
+ collect.setPoint(endA-angle, pointOnCircle( rect, angle ));
+ }
+
+ // Now copy these arcs again into the same array, but in the
+ // opposite direction and moved down by the 3D height.
+ for ( int i = arcPoints - 1; i >= 0; --i ) {
+ QPoint pointOnFirstArc = collect.point( i );
+ pointOnFirstArc.setY( pointOnFirstArc.y() + threeDHeight );
+ collect.setPoint( arcPoints * 2 - i - 1, pointOnFirstArc );
+ }
+ painter->drawPolygon( collect );
+ if ( region )
+ *region += QRegion( collect );
+}
+
+
+/**
+ Internal method that finds the pie that is located at the position
+ specified by \c angle.
+
+ \param angle the angle at which to search for a pie
+ \return the number of the pie found
+ */
+uint KDChartPiePainter::findPieAt( int angle )
+{
+ for ( int i = 0; i < _numValues; i++ ) {
+ int endseg = _startAngles[ i ] + _angleLens[ i ];
+ if ( ( _startAngles[ i ] <= angle ) &&
+ ( endseg >= angle ) )
+ // found!
+ return i;
+ }
+
+ // If we have not found it, try wrap around
+ return findPieAt( angle + 5760 );
+}
+
+
+/**
+ Internal method that finds the pie that is located to the left of
+ the pie specified by \c pie.
+
+ \param pie the pie to start the search from
+ \return the number of the pie to the left of \c pie
+ */
+uint KDChartPiePainter::findLeftPie( uint pie )
+{
+ if ( pie == 0 )
+ if ( _numValues > 1 )
+ return _numValues - 1;
+ else
+ return 0;
+ else {
+ return pie - 1;
+ }
+}
+
+
+/**
+ Internal method that finds the pie that is located to the right of
+ the pie specified by \c pie.
+
+ \param pie the pie to start the search from
+ \return the number of the pie to the right of \c pie
+ */
+uint KDChartPiePainter::findRightPie( uint pie )
+{
+ int rightpie = pie + 1;
+ if ( rightpie == _numValues )
+ rightpie = 0;
+ return rightpie;
+}
+
+
+/**
+ This method is a specialization that returns a fallback legend text
+ appropriate for pies that do not have more than one dataset
+
+ This method is only used when automatic legends are used, because
+ manual and first-column legends do not need fallback texts.
+
+ \param uint dataset the dataset number for which to generate a
+ fallback text
+ \return the fallback text to use for describing the specified
+ dataset in the legend
+ */
+QString KDChartPiePainter::fallbackLegendText( uint dataset ) const
+{
+ return QObject::tr( "Item " ) + QString::number( dataset + 1 );
+}
+
+
+/**
+ This methods returns the number of elements to be shown in the
+ legend in case fallback texts are used.
+
+ This method is only used when automatic legends are used, because
+ manual and first-column legends do not need fallback texts.
+
+ \return the number of fallback texts to use
+ */
+uint KDChartPiePainter::numLegendFallbackTexts( KDChartTableDataBase* data ) const
+{
+ return data->usedCols();
+}
diff --git a/libkdchart/KDChartPiePainter.h b/libkdchart/KDChartPiePainter.h
new file mode 100644
index 0000000..047aa33
--- /dev/null
+++ b/libkdchart/KDChartPiePainter.h
@@ -0,0 +1,84 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTPIEPAINTER_H__
+#define __KDCHARTPIEPAINTER_H__
+
+#include <KDChartPainter.h>
+#include <KDChartTable.h>
+
+class KDChartParams;
+
+class KDChartPiePainter : public KDChartPainter
+{
+ friend class KDChartPainter;
+ protected:
+ KDChartPiePainter( KDChartParams* params );
+ virtual ~KDChartPiePainter();
+
+ virtual void paintData( QPainter* painter,
+ KDChartTableDataBase* data,
+ bool paint2nd,
+ KDChartDataRegionList* regions = 0 );
+ virtual void drawOnePie( QPainter* painter,
+ KDChartTableDataBase* data,
+ uint dataset, uint pie, uint chart,
+ uint threeDPieHeight,
+ KDChartDataRegionList* regions = 0 );
+ virtual void draw3DEffect( QPainter* painter, const QRect& drawPosition,
+ uint dataset, uint pie, uint chart,
+ uint threeDPieHeight,
+ bool explode,
+ QRegion* region = 0 );
+ void drawStraightEffectSegment( QPainter* painter, const QRect& rect,
+ uint dataset, uint pie, uint chart,
+ int threeDHeight, int angle,
+ QRegion* region = 0 );
+ void drawArcEffectSegment( QPainter* painter, const QRect& rect,
+ uint dataset, uint pie, uint chart,
+ int threeDHeight, int startAngle,
+ int endAngle,
+ QRegion* region = 0 );
+
+ virtual QString fallbackLegendText( uint dataset ) const;
+ virtual uint numLegendFallbackTexts( KDChartTableDataBase* data ) const;
+
+ uint findPieAt( int angle );
+ uint findLeftPie( uint pie );
+ uint findRightPie( uint pie );
+
+ QMemArray < int > _startAngles;
+ QMemArray < int > _angleLens;
+
+ QRect _position;
+ int _size;
+ int _numValues; // PENDING(kalle) Move to base class
+}
+;
+
+#endif
diff --git a/libkdchart/KDChartPlaneSeries.cpp b/libkdchart/KDChartPlaneSeries.cpp
new file mode 100644
index 0000000..319302c
--- /dev/null
+++ b/libkdchart/KDChartPlaneSeries.cpp
@@ -0,0 +1,138 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+
+
+#include "KDChartPlaneSeries.h"
+
+KDChartPlaneSeries::KDChartPlaneSeries( bool isX, double location )
+{
+ setXAxis(isX);
+ setLocation(location);
+}
+
+KDChartPlaneSeries::~KDChartPlaneSeries()
+{
+}
+
+
+uint KDChartPlaneSeries::rows() const
+{
+ return 2;
+}
+
+
+const KDChartData& KDChartPlaneSeries::cell( uint row ) const
+{
+ switch (row)
+ {
+ case 0: return _start;
+ case 1: return _stop;
+ default: Q_ASSERT(0);
+ return _start; // won't get here
+ }
+}
+
+void KDChartPlaneSeries::setCell( uint row, const KDChartData& element)
+{
+ Q_ASSERT(0); // not possible
+ // avoid compiler warnings
+ row = (uint)element.doubleValue();
+}
+
+void KDChartPlaneSeries::expand( uint rows )
+{
+ Q_ASSERT(0); // not possible
+ // avoid compiler warnings
+ rows = 0;
+}
+
+
+
+// NOW for our special API.
+bool KDChartPlaneSeries::isXAxis() const
+{
+ return _isX;
+}
+
+double KDChartPlaneSeries::location() const
+{
+ return _location;
+}
+
+void KDChartPlaneSeries::setXAxis( bool isX )
+{
+ _isX = isX;
+ update();
+}
+
+void KDChartPlaneSeries::setLocation( double location )
+{
+ _location = location;
+ update();
+}
+
+// this is the magic part of the class.
+// draw a line from DBL_MIN to DBL_MAX.
+void KDChartPlaneSeries::update()
+{
+ if ( _isX )
+ {
+ _start = KDChartData( DBL_MIN, _location );
+ _stop = KDChartData( DBL_MAX, _location );
+ }
+ else
+ {
+ _start = KDChartData( _location, DBL_MIN );
+ _stop = KDChartData( _location, DBL_MAX );
+ }
+}
+
+
+
+// we return !ok if its on the infinite axis
+double KDChartPlaneSeries::maxValue( int coordinate, bool &ok ) const
+{
+ // coordinate==0 is the x value...
+ // is not ok
+ if ( _isX == (coordinate==0) )
+ {
+ ok = false;
+ return 0;
+ }
+
+ ok = true;
+ return _location;
+}
+
+
+
+double KDChartPlaneSeries::minValue( int coordinate, bool &ok ) const
+{
+ return maxValue(coordinate,ok);
+}
diff --git a/libkdchart/KDChartPlaneSeries.h b/libkdchart/KDChartPlaneSeries.h
new file mode 100644
index 0000000..5974d43
--- /dev/null
+++ b/libkdchart/KDChartPlaneSeries.h
@@ -0,0 +1,69 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTPLANESERIES_H__
+#define __KDCHARTPLANESERIES_H__
+
+
+#include "KDChartBaseSeries.h"
+
+
+class KDCHART_EXPORT KDChartPlaneSeries : public KDChartBaseSeries
+{
+ public:
+ KDChartPlaneSeries( bool isX = false, double location = 0 );
+ virtual ~KDChartPlaneSeries();
+
+ virtual uint rows() const;
+ virtual const KDChartData& cell( uint row ) const;
+ virtual void setCell( uint row, const KDChartData& element);
+ virtual void expand( uint rows );
+
+
+ // methods modelled on the TableBase methods, but these
+ // inherit from BaseSeries.
+ virtual double maxValue( int coordinate, bool &ok ) const;
+ virtual double minValue( int coordinate, bool &ok ) const;
+
+
+ // NOW for our special API.
+ virtual bool isXAxis() const;
+ virtual double location() const;
+
+ virtual void setXAxis( bool isX ); // if false, its a y axis plane
+ virtual void setLocation( double location );
+
+ protected:
+ bool _isX;
+ double _location;
+ KDChartData _start, _stop;
+ virtual void update();
+};
+
+
+#endif
diff --git a/libkdchart/KDChartPolarPainter.cpp b/libkdchart/KDChartPolarPainter.cpp
new file mode 100644
index 0000000..41009a1
--- /dev/null
+++ b/libkdchart/KDChartPolarPainter.cpp
@@ -0,0 +1,805 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#include "KDChartPolarPainter.h"
+#include <KDChartParams.h>
+#include <KDChartAxisParams.h>
+#include "KDChartAxesPainter.h"
+#include "KDDrawText.h"
+
+#include <qpainter.h>
+
+/**
+ \class KDChartPolarPainter KDChartPolarPainter.h
+
+ \brief A chart painter implementation that can paint polar charts.
+*/
+
+/**
+ Constructor. Sets up internal data structures as necessary.
+
+ \param params the KDChartParams structure that defines the chart
+ \param data the data that will be displayed as a chart
+*/
+KDChartPolarPainter::KDChartPolarPainter( KDChartParams* params ) :
+ KDChartPainter( params )
+{
+ // This constructor intentionally left blank so far; we cannot setup the
+ // geometry yet since we do not know the size of the painter.
+}
+
+
+/**
+ Destructor.
+*/
+KDChartPolarPainter::~KDChartPolarPainter()
+{
+ // intentionally left blank
+}
+
+
+/**
+ Paints the actual data area. Data regions will only be added if \a
+ regions is not 0 and the chart is configured to be drawn with
+ markers.
+
+ \param painter the QPainter onto which the chart should be painted
+ \param data the data that will be displayed as a chart
+ \param paint2nd specifies whether the main chart or the additional chart is to be drawn now
+ \param regions a pointer to a list of regions that will be filled
+ with regions representing the data segments, if not null
+*/
+void KDChartPolarPainter::paintData( QPainter* painter,
+ KDChartTableDataBase* data,
+ bool paint2nd,
+ KDChartDataRegionList* regions )
+{
+ uint chart = paint2nd ? 1 : 0;
+
+ QRect ourClipRect( _dataRect );
+ ourClipRect.setBottom( ourClipRect.bottom() - 1 ); // protect axes
+ ourClipRect.setLeft( ourClipRect.left() + 1 );
+ ourClipRect.setRight( ourClipRect.right() - 1 );
+ //
+ // PENDING(khz) adjust the clip rect if neccessary...
+ //
+
+ const QWMatrix & world = painter->worldMatrix();
+ ourClipRect =
+#if COMPAT_QT_VERSION >= 0x030000
+ world.mapRect( ourClipRect );
+#else
+ world.map( ourClipRect );
+#endif
+
+ painter->setClipRect( ourClipRect );
+
+
+ uint datasetStart, datasetEnd;
+ findChartDatasets( data, paint2nd, chart, datasetStart, datasetEnd );
+
+
+ painter->translate( _dataRect.x(), _dataRect.y() );
+
+
+ // Number of values: If -1, use all values, otherwise use the
+ // specified number of values.
+ int numValues = 0;
+ if ( params()->numValues() != -1 )
+ numValues = params()->numValues();
+ else
+ numValues = data->usedCols();
+
+ // compute position
+ int size = QMIN( _dataRect.width(), _dataRect.height() ); // initial size
+
+ const double minSizeP1000 = size / 1000.0;
+
+ int x = ( _dataRect.width() == size ) ? 0 : ( ( _dataRect.width() - size ) / 2 );
+ int y = ( _dataRect.height() == size ) ? 0 : ( ( _dataRect.height() - size ) / 2 );
+ QRect position( x, y, size, size );
+
+ QPoint center( position.width() / 2 + position.x(),
+ position.height() / 2 + position.y() );
+
+
+ double maxValue;
+ switch ( params()->polarChartSubType() ) {
+ case KDChartParams::PolarNormal:
+ maxValue = data->maxValue();
+ break;
+ case KDChartParams::PolarPercent:
+ maxValue = 100.0;
+ break;
+ default:
+ maxValue = QMAX( data->maxColSum(), 0.0 );
+ }
+
+ double pixelsPerUnit = 0.0;
+ // the / 2 in the next line is there because we need the space in
+ // both directions
+ pixelsPerUnit = (position.height() / maxValue / 2) * 1000 / 1250;
+
+ QMap < int, double > currentValueSums;
+ if ( params()->polarChartSubType() == KDChartParams::PolarStacked
+ || params()->polarChartSubType() == KDChartParams::PolarPercent )
+ // this array is only used for stacked and percent polar
+ // charts, no need to waste time initializing it for normal
+ // ones
+ for ( int value = 0; value < numValues; value++ )
+ currentValueSums[ value ] = 0.0;
+ QMap < int, double > totalValueSums;
+
+
+ /*
+ axes schema: use AxisPosSagittal for sagittal 'axis' lines
+ use AxisPosCircular for circular 'axis'
+ */
+ const KDChartAxisParams & paraSagittal = params()->axisParams( KDChartAxisParams::AxisPosSagittal );
+ const KDChartAxisParams & paraCircular = params()->axisParams( KDChartAxisParams::AxisPosCircular );
+
+ int sagittalLineWidth = 0 <= paraSagittal.axisLineWidth()
+ ? paraSagittal.axisLineWidth()
+ : -1 * static_cast < int > ( paraSagittal.axisLineWidth()
+ * minSizeP1000 );
+ ( ( KDChartAxisParams& ) paraSagittal ).setAxisTrueLineWidth( sagittalLineWidth );
+ int sagittalGridLineWidth
+ = ( KDCHART_AXIS_GRID_AUTO_LINEWIDTH
+ == paraSagittal.axisGridLineWidth() )
+ ? sagittalLineWidth
+ : ( ( 0 <= paraSagittal.axisGridLineWidth() )
+ ? paraSagittal.axisGridLineWidth()
+ : -1 * static_cast < int > ( paraSagittal.axisGridLineWidth()
+ * minSizeP1000 ) );
+
+ int circularLineWidth = 0 <= paraCircular.axisLineWidth()
+ ? paraCircular.axisLineWidth()
+ : -1 * static_cast < int > ( paraCircular.axisLineWidth()
+ * minSizeP1000 );
+ ( ( KDChartAxisParams& ) paraCircular ).setAxisTrueLineWidth( circularLineWidth );
+ int circularGridLineWidth
+ = ( KDCHART_AXIS_GRID_AUTO_LINEWIDTH
+ == paraCircular.axisGridLineWidth() )
+ ? circularLineWidth
+ : ( ( 0 <= paraCircular.axisGridLineWidth() )
+ ? paraCircular.axisGridLineWidth()
+ : -1 * static_cast < int > ( paraCircular.axisGridLineWidth()
+ * minSizeP1000 ) );
+
+ QFont actFont;
+ int labels = 0;
+ double currentRadiusPPU = position.height() / 2.0;
+
+ // draw the "axis" circles
+ if( paraCircular.axisShowGrid()
+ || paraCircular.axisVisible()
+ || paraCircular.axisLabelsVisible() ) {
+
+ double radiusPPU = maxValue * pixelsPerUnit;
+ double pDelimDelta = 0.0;
+
+ // calculate label texts
+ QStringList* labelTexts = 0;
+ ((KDChartParams*)params())->setAxisArea( KDChartAxisParams::AxisPosCircular,
+ QRect( 0,
+ 0,
+ static_cast<int>( radiusPPU ),
+ static_cast<int>( radiusPPU ) ) );
+
+ double delimLen = 20.0 * minSizeP1000; // per mille of area
+ KDChartAxisParams::AxisPos basicPos;
+ QPoint orig, dest;
+ double dDummy;
+ double nSubDelimFactor = 0.0;
+ double nTxtHeight = 0.0;
+ double pTextsX = 0.0;
+ double pTextsY = 0.0;
+ double pTextsW = 0.0;
+ double pTextsH = 0.0;
+ int textAlign = Qt::AlignHCenter | Qt::AlignVCenter;
+ bool isLogarithmic = false;
+ bool isDateTime = false;
+ bool autoDtLabels = false;
+ QDateTime dtLow;
+ QDateTime dtHigh;
+ KDChartAxisParams::ValueScale dtDeltaScale;
+ KDChartAxesPainter::calculateLabelTexts(
+ painter,
+ *data,
+ *params(),
+ KDChartAxisParams::AxisPosCircular,
+ minSizeP1000,
+ delimLen,
+ // start of reference parameters
+ basicPos,
+ orig,
+ dest,
+ dDummy,dDummy,dDummy,dDummy,
+ nSubDelimFactor,
+ pDelimDelta,
+ nTxtHeight,
+ pTextsX,
+ pTextsY,
+ pTextsW,
+ pTextsH,
+ textAlign,
+ isLogarithmic,
+ isDateTime,
+ autoDtLabels,
+ dtLow,
+ dtHigh,
+ dtDeltaScale );
+ labelTexts = ( QStringList* ) paraCircular.axisLabelTexts();
+ if( paraCircular.axisLabelsVisible() ) {
+//qDebug("\nnTxtHeight: "+QString::number(nTxtHeight));
+ // calculate font size
+ actFont = paraCircular.axisLabelsFont();
+ if ( paraCircular.axisLabelsFontUseRelSize() ) {
+//qDebug("paraCircular.axisLabelsFontUseRelSize() is TRUE");
+ actFont.setPointSizeFloat( nTxtHeight );
+ }
+ QFontMetrics fm( actFont );
+ QString strMax;
+ int maxLabelsWidth = 0;
+ for ( QStringList::Iterator it = labelTexts->begin();
+ it != labelTexts->end();
+ ++it ) {
+ if ( fm.width( *it ) > maxLabelsWidth ) {
+ maxLabelsWidth = fm.width( *it );
+ strMax = *it;
+ }
+ }
+ while ( fm.width( strMax ) > pTextsW
+ && 6.0 < nTxtHeight ) {
+ nTxtHeight -= 0.5;
+ actFont.setPointSizeFloat( nTxtHeight );
+ fm = QFontMetrics( actFont );
+ }
+ painter->setFont( actFont );
+ }
+
+ double radiusDelta = pDelimDelta;
+
+ labels = labelTexts
+ ? labelTexts->count()
+ : 0;
+ if( labels )
+ currentRadiusPPU = -radiusDelta;
+ for( int iLabel = 0; iLabel < labels; ++iLabel ) {
+ //while( currentRadius < maxValue ) {
+ //double currentRadiusPPU = currentRadius;
+ currentRadiusPPU += radiusDelta;
+ double currentRadiusPPU2 = currentRadiusPPU * 2;
+ int circularAxisAngle = ( currentRadiusPPU != 0.0 ) ? ( static_cast < int > (4.0 * radiusPPU / currentRadiusPPU) ) : 0;
+ if( paraCircular.axisShowGrid() ) {
+ painter->setPen( QPen( paraCircular.axisGridColor(),
+ circularGridLineWidth ) );
+ painter->drawEllipse( static_cast<int>( center.x() - currentRadiusPPU ),
+ static_cast<int>( center.y() - currentRadiusPPU ),
+ static_cast<int>( currentRadiusPPU2 ), static_cast<int>( currentRadiusPPU2 ) );
+ }
+ if( paraCircular.axisVisible() ) {
+ painter->setPen( QPen( paraCircular.axisLineColor(),
+ circularLineWidth ) );
+ if( params()->polarDelimAtPos( KDChartEnums::PosTopCenter ) )
+ painter->drawArc( static_cast<int>( center.x() - currentRadiusPPU ),
+ static_cast<int>( center.y() - currentRadiusPPU ),
+ static_cast<int>( currentRadiusPPU2 ), static_cast<int>( currentRadiusPPU2 ),
+ (90 - circularAxisAngle/2) * 16,
+ circularAxisAngle * 16 );
+ if( params()->polarDelimAtPos( KDChartEnums::PosBottomCenter ) )
+ painter->drawArc( static_cast<int>( center.x() - currentRadiusPPU ),
+ static_cast<int>( center.y() - currentRadiusPPU ),
+ static_cast<int>( currentRadiusPPU2 ), static_cast<int>( currentRadiusPPU2 ),
+ (270 - circularAxisAngle/2) * 16,
+ circularAxisAngle * 16 );
+
+ if( params()->polarDelimAtPos( KDChartEnums::PosCenterRight ) )
+ painter->drawArc( static_cast<int>( center.x() - currentRadiusPPU ),
+ static_cast<int>( center.y() - currentRadiusPPU ),
+ static_cast<int>( currentRadiusPPU2 ), static_cast<int>( currentRadiusPPU2 ),
+ (0 - circularAxisAngle/2) * 16,
+ circularAxisAngle * 16 );
+ if( params()->polarDelimAtPos( KDChartEnums::PosCenterLeft ) )
+ painter->drawArc( static_cast<int>( center.x() - currentRadiusPPU ),
+ static_cast<int>( center.y() - currentRadiusPPU ),
+ static_cast<int>( currentRadiusPPU2 ), static_cast<int>( currentRadiusPPU2 ),
+ (180 - circularAxisAngle/2) * 16,
+ circularAxisAngle * 16 );
+
+ if( params()->polarDelimAtPos( KDChartEnums::PosTopRight ) )
+ painter->drawArc( static_cast<int>( center.x() - currentRadiusPPU ),
+ static_cast<int>( center.y() - currentRadiusPPU ),
+ static_cast<int>( currentRadiusPPU2 ), static_cast<int>( currentRadiusPPU2 ),
+ (45 - circularAxisAngle/2) * 16,
+ circularAxisAngle * 16 );
+ if( params()->polarDelimAtPos( KDChartEnums::PosBottomLeft ) )
+ painter->drawArc( static_cast<int>( center.x() - currentRadiusPPU ),
+ static_cast<int>( center.y() - currentRadiusPPU ),
+ static_cast<int>( currentRadiusPPU2 ), static_cast<int>( currentRadiusPPU2 ),
+ (225 - circularAxisAngle/2) * 16,
+ circularAxisAngle * 16 );
+
+ if( params()->polarDelimAtPos( KDChartEnums::PosBottomRight ) )
+ painter->drawArc( static_cast<int>( center.x() - currentRadiusPPU ),
+ static_cast<int>( center.y() - currentRadiusPPU ),
+ static_cast<int>( currentRadiusPPU2 ), static_cast<int>( currentRadiusPPU2 ),
+ (315 - circularAxisAngle/2) * 16,
+ circularAxisAngle * 16 );
+ if( params()->polarDelimAtPos( KDChartEnums::PosTopLeft ) )
+ painter->drawArc( static_cast<int>( center.x() - currentRadiusPPU ),
+ static_cast<int>( center.y() - currentRadiusPPU ),
+ static_cast<int>( currentRadiusPPU2 ), static_cast<int>( currentRadiusPPU2 ),
+ (135 - circularAxisAngle/2) * 16,
+ circularAxisAngle * 16 );
+ }
+ if( paraCircular.axisLabelsVisible() ) {
+ const bool rotate = params()->polarRotateCircularLabels();
+ painter->setPen( QPen( paraCircular.axisLabelsColor(),
+ circularLineWidth ) );
+ const QString& txt = (*labelTexts)[ iLabel ];
+ if( params()->polarLabelsAtPos( KDChartEnums::PosTopCenter ) )
+ paintCircularAxisLabel( painter, rotate, 90, center, currentRadiusPPU, txt,
+ Qt::AlignBottom | Qt::AlignHCenter, iLabel );
+
+ if( params()->polarLabelsAtPos( KDChartEnums::PosBottomCenter ) )
+ paintCircularAxisLabel( painter, rotate, 270, center, currentRadiusPPU, txt,
+ Qt::AlignTop | Qt::AlignHCenter, iLabel );
+
+ if( params()->polarLabelsAtPos( KDChartEnums::PosCenterRight ) )
+ paintCircularAxisLabel( painter, rotate, 0, center, currentRadiusPPU, txt,
+ Qt::AlignVCenter | Qt::AlignRight, iLabel );
+
+ if( params()->polarLabelsAtPos( KDChartEnums::PosCenterLeft ) )
+ paintCircularAxisLabel( painter, rotate, 180, center, currentRadiusPPU, txt,
+ Qt::AlignVCenter | Qt::AlignLeft, iLabel );
+
+ if( params()->polarLabelsAtPos( KDChartEnums::PosTopRight ) )
+ paintCircularAxisLabel( painter, rotate, 45, center, currentRadiusPPU, txt,
+ Qt::AlignBottom | Qt::AlignRight, iLabel );
+
+ if( params()->polarLabelsAtPos( KDChartEnums::PosBottomLeft ) )
+ paintCircularAxisLabel( painter, rotate, 225, center, currentRadiusPPU, txt,
+ Qt::AlignTop | Qt::AlignLeft, iLabel );
+
+ if( params()->polarLabelsAtPos( KDChartEnums::PosBottomRight ) )
+ paintCircularAxisLabel( painter, rotate, 315, center, currentRadiusPPU, txt,
+ Qt::AlignTop | Qt::AlignRight, iLabel );
+
+ if( params()->polarLabelsAtPos( KDChartEnums::PosTopLeft ) )
+ paintCircularAxisLabel( painter, rotate, 135, center, currentRadiusPPU, txt,
+ Qt::AlignBottom | Qt::AlignLeft, iLabel );
+ }
+ }
+ }
+
+
+ double circularSpan = params()->polarChartSubType() == KDChartParams::PolarPercent
+ ? 100.0
+ : paraCircular.trueAxisHigh() - paraCircular.trueAxisLow();
+ double radius = currentRadiusPPU;
+ if( !labels
+ || params()->polarChartSubType() == KDChartParams::PolarPercent )
+ radius = (position.width() / 2.0) * 1000.0 / 1250.0;
+
+ if( params()->polarChartSubType() != KDChartParams::PolarPercent )
+ pixelsPerUnit = labels ? currentRadiusPPU / circularSpan
+ : (position.height() / maxValue / 2.0) * 1000.0 / 1250.0;
+ else
+ pixelsPerUnit = (position.height() / 100.0 / 2.0) * 1000.0 / 1250.0;
+
+ // draw the sagittal grid and axis lines
+ if( paraSagittal.axisShowGrid()
+ || paraSagittal.axisVisible()
+ || paraSagittal.axisLabelsVisible() ) {
+
+ // calculate label texts
+ QStringList* labelTexts = 0;
+ bool onlyDefaultLabels = true;
+ if( paraSagittal.axisLabelsVisible() ) {
+ ((KDChartParams*)params())->setAxisArea( KDChartAxisParams::AxisPosSagittal,
+ QRect( 0,
+ 0,
+ static_cast < int > ( 2.0 * M_PI * radius ),
+ static_cast < int > ( 0.5 * radius ) ) );
+ double delimLen = 20.0 * minSizeP1000; // per mille of area
+ KDChartAxisParams::AxisPos basicPos;
+ QPoint orig, dest;
+ double dDummy;
+ double nSubDelimFactor = 0.0;
+ double pDelimDelta = 0.0;
+ double nTxtHeight = 0.0;
+ double pTextsX = 0.0;
+ double pTextsY = 0.0;
+ double pTextsW = 0.0;
+ double pTextsH = 0.0;
+ int textAlign = Qt::AlignCenter;
+ bool isLogarithmic = false;
+ bool isDateTime = false;
+ bool autoDtLabels = false;
+ QDateTime dtLow;
+ QDateTime dtHigh;
+ KDChartAxisParams::ValueScale dtDeltaScale;
+ KDChartAxesPainter::calculateLabelTexts(
+ painter,
+ *data,
+ *params(),
+ KDChartAxisParams::AxisPosSagittal,
+ minSizeP1000,
+ delimLen,
+ // start of reference parameters
+ basicPos,
+ orig,
+ dest,
+ dDummy,dDummy,dDummy,dDummy,
+ nSubDelimFactor,
+ pDelimDelta,
+ nTxtHeight,
+ pTextsX,
+ pTextsY,
+ pTextsW,
+ pTextsH,
+ textAlign,
+ isLogarithmic,
+ isDateTime,
+ autoDtLabels,
+ dtLow,
+ dtHigh,
+ dtDeltaScale );
+ labelTexts = ( QStringList* ) paraSagittal.axisLabelTexts();
+ // calculate font size
+ actFont = paraSagittal.axisLabelsFont();
+ if ( paraSagittal.axisLabelsFontUseRelSize() ) {
+ actFont.setPointSizeFloat( nTxtHeight );
+ }
+ QFontMetrics fm( actFont );
+ QString strMax;
+ int maxLabelsWidth = 0;
+ for ( QStringList::Iterator it = labelTexts->begin();
+ it != labelTexts->end();
+ ++it ) {
+ if ( fm.width( *it ) > maxLabelsWidth ) {
+ maxLabelsWidth = fm.width( *it );
+ strMax = *it;
+ }
+ if ( !(*it).startsWith( "Item ") )
+ onlyDefaultLabels = false;
+ }
+ while ( fm.width( strMax ) > pTextsW && 6.0 < nTxtHeight ) {
+ nTxtHeight -= 0.5;
+ actFont.setPointSizeFloat( nTxtHeight );
+ fm = QFontMetrics( actFont );
+ }
+ painter->setFont( actFont );
+ }
+
+ int currentAngle = params()->polarZeroDegreePos();
+ if( -360 > currentAngle
+ || 360 < currentAngle )
+ currentAngle = 0;
+ if( 0 > currentAngle )
+ currentAngle += 360;
+ int r1 = static_cast < int > ( radius * 1050 / 1000 );
+ int r2 = static_cast < int > ( radius * 1100 / 1000 );
+ int r3 = static_cast < int > ( radius * 1175 / 1000 );
+ QPoint pt1, pt2, pt3;
+ uint nLabels = labelTexts->count();
+ int angleBetweenRays = 360 / nLabels;
+ for( uint value = 0; value < nLabels; ++value ) {
+ pt1 = center + polarToXY( r1, currentAngle );
+ pt2 = center + polarToXY( r2, currentAngle );
+ pt3 = center + polarToXY( r3, currentAngle );
+
+ //pt3 = painter->worldMatrix().map( pt3 );
+
+ if( paraSagittal.axisShowGrid() ) {
+ painter->setPen( QPen( paraSagittal.axisGridColor(),
+ sagittalGridLineWidth ) );
+ painter->drawLine( center, pt1 );
+ }
+ if( paraSagittal.axisVisible() ) {
+ painter->setPen( QPen( paraSagittal.axisLineColor(),
+ sagittalLineWidth ) );
+ painter->drawLine( pt1, pt2 );
+ }
+ if( paraSagittal.axisLabelsVisible()
+ && labelTexts
+ && labelTexts->count() > value ) {
+ painter->setPen( QPen( paraSagittal.axisLabelsColor(),
+ sagittalLineWidth ) );
+ QString label( onlyDefaultLabels
+ ? QString::number( currentAngle )
+ : (*labelTexts)[ value ] );
+
+ KDDrawText::drawRotatedText( painter,
+ currentAngle+90,
+ painter->worldMatrix().map(pt3),
+ label,
+ 0,
+ Qt::AlignCenter );
+ }
+ currentAngle += angleBetweenRays;
+ }
+ }
+
+
+ // Now draw the data
+ int dataLinesWidth = 0 <= params()->polarLineWidth()
+ ? params()->polarLineWidth()
+ : -1 * static_cast < int > ( params()->polarLineWidth()
+ * minSizeP1000 );
+ painter->setBrush( Qt::NoBrush );
+ for ( unsigned int dataset = datasetStart; dataset <= datasetEnd; dataset++ ) {
+ painter->setPen( QPen( params()->dataColor( dataset ),
+ dataLinesWidth ) );
+ QPointArray points( numValues );
+ int totalPoints = 0;
+ double valueTotal = 0.0; // Will only be used for Percent
+ int angleBetweenRays = 360 / numValues;
+ QVariant vValY;
+ for ( int value = 0; value < numValues; value++ ) {
+ if( params()->polarChartSubType() == KDChartParams::PolarPercent )
+ valueTotal = data->colAbsSum( value );
+ // the value determines the angle, the dataset only the color
+ if( data->cellCoord( dataset, value, vValY, 1 ) &&
+ QVariant::Double == vValY.type() ){
+ const double cellValue = vValY.toDouble();
+ double drawValue;
+ if ( params()->polarChartSubType() == KDChartParams::PolarStacked )
+ drawValue = ( cellValue + currentValueSums[ value ] ) * pixelsPerUnit;
+ else if( params()->polarChartSubType() == KDChartParams::PolarPercent ) {
+ drawValue = ( ( cellValue + currentValueSums[ value ] )
+ / valueTotal * static_cast<double>( radius ) );
+ } else
+ drawValue = cellValue * pixelsPerUnit;
+
+ // record the point for drawing the polygon later
+ int drawAngle = value * angleBetweenRays;
+ QPoint drawPoint( center + polarToXY( static_cast<int>( drawValue ),
+ drawAngle ) );
+ points.setPoint( totalPoints, drawPoint );
+ totalPoints++;
+ KDChartDataRegion* datReg = 0;
+ // the marker can be drawn now
+ if( params()->polarMarker() ) {
+ int xsize = params()->polarMarkerSize().width();
+ int ysize = params()->polarMarkerSize().height();
+ datReg = drawMarker( painter,
+ params(),
+ _areaWidthP1000, _areaHeightP1000,
+ _dataRect.x(), _dataRect.y(),
+ params()->polarMarkerStyle( dataset ),
+ params()->dataColor( dataset ),
+ drawPoint,
+ dataset, value, chart,
+ regions,
+ xsize ? &xsize : 0,
+ ysize ? &ysize : 0 );
+ painter->setPen( QPen( params()->dataColor( dataset ),
+ dataLinesWidth ) );
+ }
+ if ( regions ) {
+ bool bMustAppendDatReg = 0 == datReg;
+ if( bMustAppendDatReg ){
+ QRect rect( QPoint( drawPoint.x() - 1,
+ drawPoint.y() - 1 ),
+ QSize( 3, 3 ) );
+ datReg = new KDChartDataRegion( dataset,
+ value,
+ chart,
+ rect );
+ }
+ datReg->points[ KDChartEnums::PosTopLeft ] =
+ drawPoint + _dataRect.topLeft();
+
+ datReg->points[ KDChartEnums::PosTopCenter ] =
+ datReg->points[ KDChartEnums::PosTopLeft ];
+ datReg->points[ KDChartEnums::PosTopRight ] =
+ datReg->points[ KDChartEnums::PosTopLeft ];
+ datReg->points[ KDChartEnums::PosBottomLeft ] =
+ datReg->points[ KDChartEnums::PosTopLeft ];
+ datReg->points[ KDChartEnums::PosBottomCenter ] =
+ datReg->points[ KDChartEnums::PosTopLeft ];
+ datReg->points[ KDChartEnums::PosBottomRight ] =
+ datReg->points[ KDChartEnums::PosTopLeft ];
+ datReg->points[ KDChartEnums::PosCenterLeft ] =
+ datReg->points[ KDChartEnums::PosTopLeft ];
+ datReg->points[ KDChartEnums::PosCenter ] =
+ datReg->points[ KDChartEnums::PosTopLeft ];
+ datReg->points[ KDChartEnums::PosCenterRight ] =
+ datReg->points[ KDChartEnums::PosTopLeft ];
+ /*
+ // test the center positions:
+ painter->drawEllipse( datReg->points[ KDChartEnums::PosCenterLeft ].x() - 2,
+ datReg->points[ KDChartEnums::PosCenterLeft ].y() - 2, 5, 5);
+ */
+ datReg->startAngle = drawAngle;
+ datReg->angleLen = drawAngle;
+ if( bMustAppendDatReg )
+ regions->append( datReg );
+ }
+ // calculate running sum for stacked and percent
+ if ( params()->polarChartSubType() == KDChartParams::PolarStacked ||
+ params()->polarChartSubType() == KDChartParams::PolarPercent )
+ currentValueSums[ value ] += cellValue;
+ }
+ }
+ painter->drawPolygon( points );
+ }
+
+ painter->translate( -_dataRect.x(), -_dataRect.y() );
+}
+
+
+/*
+ Helper methode being called by KDChartPolarPainter::paintData()
+*/
+void KDChartPolarPainter::paintCircularAxisLabel( QPainter* painter,
+ bool rotate,
+ int txtAngle,
+ QPoint center,
+ double currentRadiusPPU,
+ const QString& txt,
+ int align,
+ int step )
+{
+ if( !rotate && (0 != (align & (Qt::AlignLeft | Qt::AlignRight) ) ) )
+ currentRadiusPPU += center.x()*0.01;
+ KDDrawText::drawRotatedText(
+ painter,
+ rotate ? txtAngle - 90 : 0,
+ painter->worldMatrix().map(center - polarToXY( static_cast<int>( currentRadiusPPU ), txtAngle )),
+ txt,
+ 0,
+ step
+ ? (rotate ? Qt::AlignBottom | Qt::AlignHCenter : align)
+ : Qt::AlignCenter,
+ false,0,false,
+ false );
+}
+
+
+/*!
+ Draws the marker for one data point according to the specified style.
+
+ \param painter the painter to draw on
+ \param style what kind of marker is drawn (square, diamond or circle)
+ \param color the color in which to draw the marker
+ \param p the center of the marker
+ \param dataset the dataset which this marker represents
+ \param value the value which this marker represents
+ \param regions a list of regions for data points, a new region for the new
+ marker will be appended to this list if it is not 0
+*//*
+void KDChartPolarPainter::drawMarker( QPainter* painter,
+ KDChartParams::PolarMarkerStyle style,
+ const QColor& color,
+ const QPoint& p,
+ uint, //dataset,
+ uint, //value,
+ uint, //chart,
+ double minSizeP1000,
+ QRegion& region )
+{
+ int xsize = params()->polarMarkerSize().width();
+ if ( 0 > xsize )
+ xsize = -1 * static_cast < int > ( xsize * minSizeP1000 );
+ int ysize = params()->polarMarkerSize().height();
+ if ( 0 > ysize )
+ ysize = -1 * static_cast < int > ( ysize * minSizeP1000 );
+ int xsize2 = xsize / 2;
+ int ysize2 = ysize / 2;
+ painter->setPen( color );
+ switch ( style ) {
+ case KDChartParams::PolarMarkerSquare: {
+ painter->save();
+ painter->setBrush( color );
+ QRect rect( QPoint( p.x() - xsize2, p.y() - ysize2 ), QPoint( p.x() + xsize2, p.y() + ysize2 ) );
+ painter->drawRect( rect );
+ // Don't use rect for drawing after this!
+ rect.moveBy( _dataRect.x(), _dataRect.y() );
+ region = QRegion( rect );
+ painter->restore();
+ break;
+ }
+ case KDChartParams::PolarMarkerDiamond: {
+ painter->save();
+ painter->setBrush( color );
+ QPointArray points( 4 );
+ points.setPoint( 0, p.x() - xsize2, p.y() );
+ points.setPoint( 1, p.x(), p.y() - ysize2 );
+ points.setPoint( 2, p.x() + xsize2, p.y() );
+ points.setPoint( 3, p.x(), p.y() + ysize2 );
+ painter->drawPolygon( points );
+ // Don't use points for drawing after this!
+ points.translate( _dataRect.x(), _dataRect.y() );
+ region = QRegion( points );
+ painter->restore();
+ break;
+ }
+ case KDChartParams::PolarMarkerCircle:
+ default: {
+ painter->save();
+ painter->setBrush( color );
+ painter->drawEllipse( p.x() - xsize2, p.y() - ysize2, xsize, ysize );
+ QPointArray points;
+ points.makeEllipse( p.x() - xsize2, p.y() - ysize2, xsize, ysize );
+ // Don't use points for drawing after this!
+ points.translate( _dataRect.x(), _dataRect.y() );
+ if( points.size() > 0 )
+ region = QRegion( points );
+ else
+ region = QRegion();
+ painter->restore();
+ }
+ };
+}*/
+
+#define DEGTORAD(d) (d)*M_PI/180
+
+QPoint KDChartPolarPainter::polarToXY( int radius, int angle )
+{
+ double anglerad = DEGTORAD( static_cast<double>( angle ) );
+ QPoint ret( static_cast<int>( cos( anglerad ) * radius ),
+ static_cast<int>( sin( anglerad ) * radius ) );
+ return ret;
+}
+
+
+/**
+ This method is a specialization that returns a fallback legend text
+ appropriate for polar charts where the fallbacks should come from
+ the values, not from the datasets.
+
+ This method is only used when automatic legends are used, because
+ manual and first-column legends do not need fallback texts.
+
+ \param uint dataset the dataset number for which to generate a
+ fallback text
+ \return the fallback text to use for describing the specified
+ dataset in the legend
+*/
+QString KDChartPolarPainter::fallbackLegendText( uint dataset ) const
+{
+ return QObject::tr( "Series " ) + QString::number( dataset + 1 );
+}
+
+
+/**
+ This methods returns the number of elements to be shown in the
+ legend in case fallback texts are used.
+
+ This method is only used when automatic legends are used, because
+ manual and first-column legends do not need fallback texts.
+
+ \return the number of fallback texts to use
+*/
+uint KDChartPolarPainter::numLegendFallbackTexts( KDChartTableDataBase* data ) const
+{
+ return data->usedRows();
+}
diff --git a/libkdchart/KDChartPolarPainter.h b/libkdchart/KDChartPolarPainter.h
new file mode 100644
index 0000000..52a264a
--- /dev/null
+++ b/libkdchart/KDChartPolarPainter.h
@@ -0,0 +1,78 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTPOLARPAINTER_H__
+#define __KDCHARTPOLARPAINTER_H__
+
+#include "KDChartPainter.h"
+#include <KDChartTable.h>
+#include <KDChartParams.h>
+
+class KDChartPolarPainter : public KDChartPainter
+{
+ friend class KDChartPainter;
+
+ protected:
+ KDChartPolarPainter( KDChartParams* params );
+ virtual ~KDChartPolarPainter();
+
+ virtual void paintData( QPainter* painter,
+ KDChartTableDataBase* data,
+ bool paint2nd,
+ KDChartDataRegionList* regions = 0 );
+/* void drawMarker( QPainter* painter,
+ KDChartParams::PolarMarkerStyle style,
+ const QColor& color, const QPoint& p,
+ uint dataset, uint value, uint chart,
+ double minSizeP1000,
+ QRegion & region );*/
+ virtual QString fallbackLegendText( uint dataset ) const;
+ virtual uint numLegendFallbackTexts( KDChartTableDataBase* data ) const;
+
+ private:
+ QPoint polarToXY( int radius, int angle );
+ void paintAxisLabels( QPainter* painter,
+ QStringList& labelTexts,
+ double radiusDelta,
+ const QRect& position,
+ const QPoint& center,
+ double radiusPPU,
+ double& currentRadiusPPU,
+ const KDChartAxisParams & paraCircular,
+ double minSizeP1000 );
+ void paintCircularAxisLabel( QPainter* painter,
+ bool rotate,
+ int txtAngle,
+ QPoint center,
+ double currentRadiusPPU,
+ const QString& txt,
+ int align,
+ int step );
+};
+
+#endif
diff --git a/libkdchart/KDChartPropertySet.cpp b/libkdchart/KDChartPropertySet.cpp
new file mode 100644
index 0000000..6abec75
--- /dev/null
+++ b/libkdchart/KDChartPropertySet.cpp
@@ -0,0 +1,384 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+
+#include "KDChartPropertySet.h"
+#include "KDChartParams.h"
+#include <KDXMLTools.h>
+
+#include <qpainter.h>
+#include <qvaluestack.h>
+
+#include <stdlib.h>
+
+/**
+ \file KDChartPropertySet.cpp
+
+ \brief Implementation of property settings of a single KDChart data cell.
+ */
+
+void KDChartPropertySet::deepCopy( const KDChartPropertySet* source )
+{
+ if( !source || this == source )
+ return;
+ mOwnID = source->mOwnID;
+ mName = source->mName;
+ mIdShowBar = source->mIdShowBar; mShowBar = source->mShowBar;
+ mIdBarColor = source->mIdBarColor; mBarColor = source->mBarColor;
+ mIdAreaBrush = source->mIdAreaBrush; mAreaBrush = source->mAreaBrush;
+ mIdLineWidth = source->mIdLineWidth; mLineWidth = source->mLineWidth;
+ mIdLineColor = source->mIdLineColor; mLineColor = source->mLineColor;
+ mIdLineStyle = source->mIdLineStyle; mLineStyle = source->mLineStyle;
+ mIdShowMarker = source->mIdShowMarker; mShowMarker = source->mShowMarker;
+ mIdMarkerSize = source->mIdMarkerSize; mMarkerSize = source->mMarkerSize;
+ mIdMarkerColor = source->mIdMarkerColor; mMarkerColor = source->mMarkerColor;
+ mIdMarkerStyle = source->mIdMarkerStyle; mMarkerStyle = source->mMarkerStyle;
+ mIdMarkerAlign = source->mIdMarkerAlign; mMarkerAlign = source->mMarkerAlign;
+ mIdExtraLinesAlign = source->mIdExtraLinesAlign; mExtraLinesAlign = source->mExtraLinesAlign;
+ mIdExtraLinesInFront = source->mIdExtraLinesInFront; mExtraLinesInFront = source->mExtraLinesInFront;
+ mIdExtraLinesLength = source->mIdExtraLinesLength; mExtraLinesLength = source->mExtraLinesLength;
+ mIdExtraLinesWidth = source->mIdExtraLinesWidth; mExtraLinesWidth = source->mExtraLinesWidth;
+ mIdExtraLinesColor = source->mIdExtraLinesColor; mExtraLinesColor = source->mExtraLinesColor;
+ mIdExtraLinesStyle = source->mIdExtraLinesStyle; mExtraLinesStyle = source->mExtraLinesStyle;
+ mIdExtraMarkersAlign = source->mIdExtraMarkersAlign; mExtraMarkersAlign = source->mExtraMarkersAlign;
+ mIdExtraMarkersSize = source->mIdExtraMarkersSize; mExtraMarkersSize = source->mExtraMarkersSize;
+ mIdExtraMarkersColor = source->mIdExtraMarkersColor; mExtraMarkersColor = source->mExtraMarkersColor;
+ mIdExtraMarkersStyle = source->mIdExtraMarkersStyle; mExtraMarkersStyle = source->mExtraMarkersStyle;
+}
+
+const KDChartPropertySet* KDChartPropertySet::clone() const
+{
+ KDChartPropertySet* newSet = new KDChartPropertySet();
+ newSet->deepCopy( this );
+ return newSet;
+}
+
+void KDChartPropertySet::quickReset( const QString& name, int idParent )
+{
+ // set the name
+ mName = name;
+ // fill with idParent
+ mOwnID = idParent;
+ mIdLineWidth = idParent;
+ mIdLineColor = idParent;
+ mIdLineStyle = idParent;
+ mIdShowMarker = idParent;
+ mIdMarkerSize = idParent;
+ mIdMarkerColor = idParent;
+ mIdMarkerStyle = idParent;
+ mIdMarkerAlign = idParent;
+ mIdExtraLinesAlign = idParent;
+ mIdExtraLinesInFront = idParent;
+ mIdExtraLinesLength = idParent;
+ mIdExtraLinesWidth = idParent;
+ mIdExtraLinesColor = idParent;
+ mIdExtraLinesStyle = idParent;
+ mIdExtraMarkersAlign = idParent;
+ mIdExtraMarkersSize = idParent;
+ mIdExtraMarkersColor = idParent;
+ mIdExtraMarkersStyle = idParent;
+ mIdShowBar = idParent;
+ mIdBarColor = idParent;
+ mIdAreaBrush = idParent;
+}
+
+void KDChartPropertySet::fullReset( const QString& name, int idParent )
+{
+ quickReset( name, idParent );
+ fillValueMembersWithDummyValues();
+}
+
+void KDChartPropertySet::fillValueMembersWithDummyValues()
+{
+ // fill with dummy values to avoid problems when saving us into a stream
+ mLineWidth = 1;
+ mLineColor = Qt::black;
+ mLineStyle = Qt::SolidLine;
+ mShowMarker = true;
+ mMarkerAlign = Qt::AlignCenter;
+ mMarkerSize = QSize(6,6);
+ mMarkerColor = Qt::black;
+ mMarkerStyle = 0;
+ mExtraLinesAlign = Qt::AlignLeft|Qt::AlignTop;
+ mExtraLinesInFront = false;
+ mExtraLinesLength = -20;
+ mExtraLinesWidth = 1;
+ mExtraLinesColor = Qt::black;
+ mExtraLinesStyle = Qt::SolidLine;
+ mExtraMarkersAlign = Qt::AlignLeft|Qt::AlignTop;
+ mExtraMarkersSize = QSize(6,6);
+ mExtraMarkersColor = Qt::black;
+ mExtraMarkersStyle = 0;
+ mShowBar = true;
+ mBarColor = Qt::black;
+ mAreaBrush = QBrush( Qt::blue );
+}
+
+
+QDomElement KDChartPropertySet::saveXML(QDomDocument& doc) const
+{
+ QDomElement propertySetElement = doc.createElement( "PropertySet" );
+ propertySetElement.setAttribute( "OwnID", mOwnID );
+ KDXML::createStringNode( doc, propertySetElement, "Name", mName );
+ // normal bar properties:
+ KDXML::createIntNode( doc, propertySetElement, "IDShowBar", mIdShowBar );
+ KDXML::createBoolNode( doc, propertySetElement, "ShowBar", mShowBar );
+ KDXML::createIntNode( doc, propertySetElement, "IDBarColor", mIdBarColor );
+ KDXML::createColorNode( doc, propertySetElement, "BarColor", mBarColor );
+ // normal area properties:
+ KDXML::createIntNode( doc, propertySetElement, "IDAreaBrush", mIdAreaBrush );
+ KDXML::createBrushNode( doc, propertySetElement, "AreaBrush", mAreaBrush );
+ // normal line properties:
+ KDXML::createIntNode( doc, propertySetElement, "IDLineWidth", mIdLineWidth );
+ KDXML::createIntNode( doc, propertySetElement, "LineWidth", mLineWidth );
+ KDXML::createIntNode( doc, propertySetElement, "IDLineColor", mIdLineColor );
+ KDXML::createColorNode( doc, propertySetElement, "LineColor", mLineColor );
+ KDXML::createIntNode( doc, propertySetElement, "IDLineStyle", mIdLineStyle );
+ QDomElement lineStyleElement = doc.createElement( "LineStyle" );
+ propertySetElement.appendChild( lineStyleElement );
+ lineStyleElement.setAttribute( "Style", KDXML::penStyleToString( mLineStyle));
+ // normal marker properties:
+ KDXML::createIntNode( doc, propertySetElement, "IDShowMarker", mIdShowMarker);
+ KDXML::createBoolNode( doc, propertySetElement, "ShowMarker", mShowMarker);
+ KDXML::createIntNode( doc, propertySetElement, "IDMarkerAlign", mIdMarkerAlign );
+ KDXML::createIntNode( doc, propertySetElement, "MarkerAlign", mMarkerAlign );
+ KDXML::createIntNode( doc, propertySetElement, "IDMarkerSize", mIdMarkerSize );
+ KDXML::createSizeNode( doc, propertySetElement, "MarkerSize", mMarkerSize );
+ KDXML::createIntNode( doc, propertySetElement, "IDMarkerColor", mIdMarkerColor );
+ KDXML::createColorNode( doc, propertySetElement, "MarkerColor", mMarkerColor );
+ KDXML::createIntNode( doc, propertySetElement, "IDMarkerStyle", mIdMarkerStyle );
+ QDomElement markerStElem = doc.createElement( "MarkerStyle" );
+ propertySetElement.appendChild( markerStElem );
+ markerStElem.setAttribute("Style",
+ KDChartParams::lineMarkerStyleToString( (KDChartParams::LineMarkerStyle)mMarkerStyle));
+ // extra lines:
+ KDXML::createIntNode( doc, propertySetElement, "IDExtraLinesAlign", mIdExtraLinesAlign );
+ KDXML::createIntNode( doc, propertySetElement, "ExtraLinesAlign", mExtraLinesAlign );
+ KDXML::createIntNode( doc, propertySetElement, "IDExtraLinesInFront",mIdExtraLinesInFront );
+ KDXML::createBoolNode( doc, propertySetElement, "ExtraLinesInFront", mExtraLinesInFront );
+ KDXML::createIntNode( doc, propertySetElement, "IDExtraLinesLength", mIdExtraLinesLength );
+ KDXML::createIntNode( doc, propertySetElement, "ExtraLinesLength", mExtraLinesLength );
+ KDXML::createIntNode( doc, propertySetElement, "IDExtraLinesWidth", mIdExtraLinesWidth );
+ KDXML::createIntNode( doc, propertySetElement, "ExtraLinesWidth", mExtraLinesWidth );
+ KDXML::createIntNode( doc, propertySetElement, "IDExtraLinesColor", mIdExtraLinesColor );
+ KDXML::createColorNode( doc, propertySetElement, "ExtraLinesColor", mExtraLinesColor );
+ KDXML::createIntNode( doc, propertySetElement, "IDExtraLinesStyle", mIdExtraLinesStyle );
+ QDomElement specLineStElem = doc.createElement( "ExtraLinesStyle" );
+ propertySetElement.appendChild( specLineStElem );
+ specLineStElem.setAttribute( "Style", KDXML::penStyleToString( mExtraLinesStyle));
+ // extra markers:
+ KDXML::createIntNode( doc, propertySetElement, "IDExtraMarkersAlign", mIdExtraMarkersAlign );
+ KDXML::createIntNode( doc, propertySetElement, "ExtraMarkersAlign", mExtraMarkersAlign );
+ KDXML::createIntNode( doc, propertySetElement, "IDExtraMarkersSize", mIdExtraMarkersSize );
+ KDXML::createSizeNode( doc, propertySetElement, "ExtraMarkersSize", mExtraMarkersSize );
+ KDXML::createIntNode( doc, propertySetElement, "IDExtraMarkersColor", mIdExtraMarkersColor );
+ KDXML::createColorNode( doc, propertySetElement, "ExtraMarkersColor", mExtraMarkersColor );
+ KDXML::createIntNode( doc, propertySetElement, "IDExtraMarkersStyle", mIdExtraMarkersStyle );
+ QDomElement specMarkerStElem = doc.createElement( "ExtraMarkersStyle" );
+ propertySetElement.appendChild( specMarkerStElem );
+ specMarkerStElem.setAttribute("Style",
+ KDChartParams::lineMarkerStyleToString( (KDChartParams::LineMarkerStyle)mExtraMarkersStyle));
+ return propertySetElement;
+}
+
+bool KDChartPropertySet::loadXML( const QDomElement& element, KDChartPropertySet& set )
+{
+ bool bOwnIDFound = false;
+ QString s;
+ QColor color;
+ QBrush brush;
+ QSize size;
+ bool bValue;
+ int i;
+ // initialize the property set with default values
+ set.fillValueMembersWithDummyValues();
+ // parse the element
+ if( element.hasAttribute("OwnID") ){
+ i = element.attribute( "OwnID" ).toInt( &bOwnIDFound );
+ if( bOwnIDFound ){
+ set.mOwnID = i;
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "Name" ) {
+ if( KDXML::readStringNode( element, s ) )
+ set.mName = s;
+ } else
+ // normal bar properties:
+ if( tagName == "IDShowBar" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mIdShowBar = i;
+ } else if( tagName == "ShowBar" ) {
+ if( KDXML::readBoolNode( element, bValue ) )
+ set.mShowBar = bValue;
+ } else if( tagName == "IDBarColor" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mIdBarColor = i;
+ } else if( tagName == "BarColor" ) {
+ if( KDXML::readColorNode( element, color ) )
+ set.mBarColor = color;
+ } else
+ // normal area properties:
+ if( tagName == "IDAreaBrush" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mIdAreaBrush = i;
+ } else if( tagName == "AreaBrush" ) {
+ if( KDXML::readBrushNode( element, brush ) )
+ set.mAreaBrush = color;
+ } else
+ // normal line properties:
+ if( tagName == "IDLineWidth" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mIdLineWidth = i;
+ } else if( tagName == "LineWidth" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mLineWidth = i;
+ } else if( tagName == "IDLineColor" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mIdLineColor = i;
+ } else if( tagName == "LineColor" ) {
+ if( KDXML::readColorNode( element, color ) )
+ set.mLineColor = color;
+ } else if( tagName == "IDLineStyle" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mIdLineStyle = i;
+ } else if( tagName == "LineStyle" ) {
+ if( element.hasAttribute( "Style" ) )
+ set.mLineStyle = KDXML::stringToPenStyle( element.attribute( "Style" ) );
+ } else
+ // normal marker properties:
+ if( tagName == "IDShowMarker" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mIdShowMarker = i;
+ } else if( tagName == "ShowMarker" ) {
+ if( KDXML::readBoolNode( element, bValue ) )
+ set.mShowMarker = bValue;
+ } else if( tagName == "IDMarkerAlign" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mIdMarkerAlign = i;
+ } else if( tagName == "MarkerAlign" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mMarkerAlign = i;
+ } else if( tagName == "IDMarkerSize" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mIdMarkerSize = i;
+ } else if( tagName == "MarkerSize" ) {
+ if( KDXML::readSizeNode( element, size ) )
+ set.mMarkerSize = size;
+ } else if( tagName == "IDMarkerColor" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mIdMarkerColor = i;
+ } else if( tagName == "MarkerColor" ) {
+ if( KDXML::readColorNode( element, color ) )
+ set.mMarkerColor = color;
+ } else if( tagName == "IDMarkerStyle" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mIdMarkerStyle = i;
+ } else if( tagName == "MarkerStyle" ) {
+ if( element.hasAttribute( "Style" ) )
+ set.mMarkerStyle
+ = KDChartParams::stringToLineMarkerStyle( element.attribute( "Style" ) );
+ } else
+ // extra lines:
+ if( tagName == "IDExtraLinesAlign" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mIdExtraLinesAlign = i;
+ } else if( tagName == "ExtraLinesAlign" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mExtraLinesAlign = i;
+ } else if( tagName == "IDExtraLinesInFront" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mIdExtraLinesInFront = i;
+ } else if( tagName == "ExtraLinesInFront" ) {
+ if( KDXML::readBoolNode( element, bValue ) )
+ set.mExtraLinesInFront = bValue;
+ } else if( tagName == "IDExtraLinesLength" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mIdExtraLinesLength = i;
+ } else if( tagName == "ExtraLinesLength" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mExtraLinesLength = i;
+ } else if( tagName == "IDExtraLinesWidth" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mIdExtraLinesWidth = i;
+ } else if( tagName == "ExtraLinesWidth" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mExtraLinesWidth = i;
+ } else if( tagName == "IDExtraLinesColor" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mIdExtraLinesColor = i;
+ } else if( tagName == "ExtraLinesColor" ) {
+ if( KDXML::readColorNode( element, color ) )
+ set.mExtraLinesColor = color;
+ } else if( tagName == "IDExtraLinesStyle" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mIdExtraLinesStyle = i;
+ } else if( tagName == "ExtraLinesStyle" ) {
+ if( element.hasAttribute( "Style" ) )
+ set.mExtraLinesStyle = KDXML::stringToPenStyle( element.attribute( "Style" ) );
+ } else
+ // extra markers:
+ if( tagName == "IDExtraMarkersAlign" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mIdExtraMarkersAlign = i;
+ } else if( tagName == "ExtraMarkersAlign" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mExtraMarkersAlign = i;
+ } else if( tagName == "IDExtraMarkersSize" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mIdExtraMarkersSize = i;
+ } else if( tagName == "ExtraMarkersSize" ) {
+ if( KDXML::readSizeNode( element, size ) )
+ set.mExtraMarkersSize = size;
+ } else if( tagName == "IDExtraMarkersColor" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mIdExtraMarkersColor = i;
+ } else if( tagName == "ExtraMarkersColor" ) {
+ if( KDXML::readColorNode( element, color ) )
+ set.mExtraMarkersColor = color;
+ } else if( tagName == "IDExtraMarkersStyle" ) {
+ if( KDXML::readIntNode( element, i ) )
+ set.mIdExtraMarkersStyle = i;
+ } else if( tagName == "ExtraMarkersStyle" ) {
+ if( element.hasAttribute( "Style" ) )
+ set.mExtraMarkersStyle
+ = KDChartParams::stringToLineMarkerStyle( element.attribute( "Style" ) );
+ } else {
+ qDebug( "Unknown subelement of KDChartPropertySet found: %s", tagName.latin1() );
+ }
+ }
+ node = node.nextSibling();
+ }
+ }
+ }
+ return bOwnIDFound;
+}
+
+#include "KDChartPropertySet.moc"
diff --git a/libkdchart/KDChartPropertySet.h b/libkdchart/KDChartPropertySet.h
new file mode 100644
index 0000000..306109c
--- /dev/null
+++ b/libkdchart/KDChartPropertySet.h
@@ -0,0 +1,985 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTPROPERTYSET__
+#define __KDCHARTPROPERTYSET__
+
+
+#include <KDChartEnums.h>
+#include <kdchart_export.h>
+#include <qdom.h>
+#include <qcolor.h>
+#include <qbrush.h>
+
+/**
+ \file KDChartPropertySet.h
+
+ \brief Property settings of a single KDChart data cell.
+ */
+
+/**
+ \class KDChartPropertySet KDChartPropertySet.h
+ \brief Property settings of a single KDChart data cell.
+
+ \note The property settings feature currently is supported by
+ normal (== not 3-dimensional!) Line Charts only. Future releases
+ of KDChart will offer a rich set of options to use cell-specific
+ properties for other chart types as well...
+
+ The KDChartPropertySet class stores several settings to be
+ used by the painter classes to decide how to visualize the
+ respective data cell.
+ Each of the settings may be specified either by giving a
+ value for it or by using the ID of another KDChartPropertySet
+instance: If the later the value of that instance is used
+instead of the value that is stored locally.
+
+\sa KDChartData::setPropertySet
+\sa KDCHART_PROPSET_NORMAL_DATA, KDCHART_PROPSET_TRANSPARENT_DATA
+\sa KDChartParams::registerProperties
+*/
+class KDCHART_EXPORT KDChartPropertySet :public QObject
+{
+ Q_OBJECT
+ Q_ENUMS( SpecialDataPropertyID )
+
+ // Required by QSA
+ Q_ENUMS( PenStyle )
+
+ friend class KDChartParams;
+
+ public:
+ /**
+ Special property IDs.
+
+ \li \c UndefinedID (the default value)
+ used to indicate that <b>no</b> ID was set for
+ members \c mIdLineWidth, \c mIdLineColor,
+ \c mIdLineStyle, \c mIdShowMarker and the like...
+
+ \li \c OwnID used for referencing a property set's *own* ID.
+
+ \sa KDChartPropertySet
+ */
+ enum SpecialDataPropertyID {
+ UndefinedID = -2,
+ OwnID = -1
+ };
+
+ /**
+ default constructor setting all values to undefined
+ and name to empty string
+ */
+ KDChartPropertySet() :
+ mOwnID( UndefinedID )
+ { fullReset(""); }
+
+
+ /**
+ Constructor setting all Property Set IDs to the same ID value.
+
+ This constructor may be used to initialize a property set
+ and let it have all property IDs set to a specific value,
+ e.g. you might pass KDCHART_PROPSET_NORMAL_DATA
+ as ID to make the default property set the parent of all
+ values.
+
+ \param name (may be empty) a name describing this property set.
+ \param idParent the ID of the parent property set. Skip this paramter
+ to define a property set without specifying a parent.
+ */
+ KDChartPropertySet( const QString& name, int idParent=KDChartPropertySet::UndefinedID ) :
+ mOwnID( UndefinedID )
+ { fullReset( name, idParent ); }
+
+
+ /**
+ Copy the settings stored by property set \c source into this property set.
+
+ \note Use this method instead of using the assignment operator.
+
+ \sa clone, quickReset, fullReset
+ */
+ void deepCopy( const KDChartPropertySet* source );
+
+
+ /**
+ Create a new property set on the heap, copy the settings stored by
+ this property set into the newly created property set and return
+ the pointer to the new property set.
+
+ \note Use this method instead of using the copy constructor.
+
+ \sa deepCopy, quickReset, fullReset
+ */
+ const KDChartPropertySet* clone() const;
+
+
+ /**
+ Set the name,
+ set all of the ID settings to idParent,
+ but do NOT change the value settings,
+ and do NOT modify mOwnID.
+
+ \note Use this to quickly reset the ID settings: in most cases this should
+ be sufficient for resetting the property set.
+
+ \sa clone, fullReset
+ */
+ void quickReset( const QString& name, int idParent=KDChartPropertySet::UndefinedID );
+
+
+ /**
+ Set the name,
+ set all of the ID settings to idParent,
+ set all of the value settings back to their default value,
+ but do NOT modify mOwnID.
+
+ \note Use this to entirely reset both the ID values and the value settings: one of
+ the very few reasons why you might want to do that might be your saving this property set
+ into a data stream. In most other cases just calling quickReset should be sufficient.
+
+ \sa clone, quickReset
+ */
+ void fullReset( const QString& name, int idParent=KDChartPropertySet::UndefinedID );
+
+
+ /**
+ Save this property set's settings in a stream,
+ this stores the own property set ID as well.
+
+ \sa loadXML
+ */
+ QDomElement saveXML(QDomDocument& doc) const;
+
+
+ /**
+ Retrieves a property set and stores it in parameter set.
+
+ \note Since the property set's internal <b>ID</b> is also read
+ make sure to call KDChartParams::setProperties( set.id(), set )
+ after calling \c load() if you want to use the loaded
+ property set in the context of KDChartParam settings.
+
+ \returns TRUE if the property set could be read.
+
+ \sa id, saveXLM
+ */
+ static bool loadXML( const QDomElement& element, KDChartPropertySet& set );
+
+public slots:
+ /**
+ Returns the name of this property set.
+ */
+ int id() const { return mOwnID; }
+
+ /**
+ Change the descriptive name of this property set.
+ */
+ void setName( const QString& name )
+ {
+ mName = name;
+ }
+
+ /**
+ Returns the name of this property set.
+ */
+ QString name() const { return mName; }
+
+
+
+ /**
+ Specify the ID of the property set specifying a boolean flag indicating
+ whether this cell's bar is to be painted
+ <b>or</b> specifying this flag directly.
+
+ \note This function should be used for Bar Charts only, otherwise
+ the settings specified here will be ignored.
+
+ \param idShowBar ID of the property set specifying the flag
+ indicating whether this cell's bar is to be painted.
+ Use special value KDChartPropertySet::UndefinedID
+ to specify neither another property set's ID
+ nor an own value for this flag.
+ Use special value KDChartPropertySet::OwnID
+ if you do NOT want to inherit another property set's
+ settings but want to specify the flag by using
+ the following parameter.
+ \param showBar Flag indicating whether this cell's bar is to be painted.
+ This parameter is stored but ignored if the previous parameter
+ is not set to KDChartPropertySet::OwnID.
+
+ \sa hasOwnShowBar
+ \sa setBarColor
+ \sa hasOwnBarColor
+ */
+ void setShowBar( int idShowBar, bool showBar )
+ {
+ mIdShowBar = idShowBar;
+ mShowBar = showBar;
+ }
+
+ /**
+ Returns whether this property set is specifying it's own flag indicating
+ whether this cell's bar is to be painted.
+
+ \note This function should be used for Bar Charts only, otherwise
+ the settings specified here will be ignored.
+
+ \returns TRUE if this property set is specifying it's own showBar flag,
+ FALSE if the settings of another property set are to be used instead.
+
+ \note The return value will also be FALSE if the 'default' properties
+ are to be used: in this case idShowBar will be KDChartParams::NormalData
+
+ \param idShowBar to be ignored if return value is TRUE.
+ If idShowBar is KDChartPropertySet::UndefinedID
+ then neither a property set ID
+ nor an own flag were specified (so no special
+ enabeling/disabeling of bars is associated to the
+ respective data cell), else idShowBar contains the
+ ID of another property set that is specifying the flag
+ to be used.
+ \param showBar this parameter's value is not modified if return value is FALSE.
+ Parameter showBar contains the showBar flag
+ associated with the respective data cell.
+ If return value is FALSE the showBar
+ flag is not set (so the parameter keeps its previous value)
+ but this is to be overridden by the respective value
+ of another property set that is indicated
+ by the idShowBar parameter - unless this has the special
+ value KDChartPropertySet::UndefinedID as decribed above.
+
+ \sa setShowBar
+ \sa setBarColor
+ \sa hasOwnBarColor
+ */
+ bool hasOwnShowBar( int& idShowBar, bool& showBar )
+ {
+ idShowBar = mIdShowBar;
+ if( OwnID == idShowBar ){
+ showBar = mShowBar;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ Specify the ID of the property set specifying the bar color
+ to be used for this cell
+ <b>or</b> specify the bar color directly.
+
+ \note This function should be used for Bar Charts only, otherwise
+ the settings specified here will be ignored.
+
+ \param idBarColor ID of the property set specifying the bar color.
+ Use special value KDChartPropertySet::UndefinedID
+ to specify neither another property set's ID
+ nor an own value for the bar color.
+ Use special value KDChartPropertySet::OwnID
+ if you do NOT want to inherit another property set's
+ settings but want to specify the bar color by using
+ the following parameter.
+ \param barColor The bar color to be used.
+ This parameter is stored but ignored if the previous parameter
+ is not set to KDChartPropertySet::OwnID.
+
+ \sa hasOwnBarColor
+ */
+ void setBarColor( int idBarColor, const QColor& barColor )
+ {
+ mIdBarColor = idBarColor;
+ mBarColor = barColor;
+ }
+
+ /**
+ Returns whether this property set is specifying it's own bar color settings.
+
+ \note This function should be used for Bar Charts only, otherwise
+ the settings specified here will be ignored.
+
+ \returns TRUE if this property set is specifying it's own bar color settings,
+ FALSE if the settings of another property set are to be used instead.
+
+ \note The return value will also be FALSE if the 'default' properties
+ are to be used: in this case idBarColor will be KDChartParams::NormalData
+
+ \param idBarColor to be ignored if return value is TRUE.
+ If idBarColor is KDChartPropertySet::UndefinedID
+ then neither a property set ID
+ nor an own bar color were specified (so no special
+ Bar color is associated to the respective data cell),
+ else idBarColor contains the ID of another property set
+ that is specifying the Bar color to be used.
+ \param barColor this parameter's value is not modified if return value is FALSE.
+ Parameter barColor contains the bar color value
+ associated with the respective data cell.
+ If return value is FALSE the barColor
+ value is not set (so the parameter keeps its previous value)
+ but this is to be overridden by the respective value
+ of another property set that is indicated
+ by the idBarColor parameter - unless this has the special
+ value KDChartPropertySet::UndefinedID as decribed above.
+
+ \sa setBarColor
+ */
+ bool hasOwnBarColor( int& idBarColor, QColor& barColor )
+ {
+ idBarColor = mIdBarColor;
+ if( OwnID == mIdBarColor ){
+ barColor = mBarColor;
+ return true;
+ }
+ return false;
+ }
+
+
+ /**
+ Specify the ID of the property set specifying the line width
+ to be used for drawing a line from this data point to the next one
+ <b>or</b> specify the line width directly.
+
+ \note This function should be used for Line Charts only, otherwise
+ the settings specified here will be ignored.
+
+ \param idLineWidth ID of the property set specifying the line width.
+ Use special value KDChartPropertySet::UndefinedID
+ to specify neither another property set's ID
+ nor an own value for the line width.
+ Use special value KDChartPropertySet::OwnID
+ if you do NOT want to inherit another property set's
+ settings but want to specify the line width by using
+ the following parameter.
+ \param lineWidth The line width to be used.
+ This parameter is stored but ignored if the previous parameter
+ is not set to KDChartPropertySet::OwnID.
+
+ \sa setLineWidth, setLineColor, setLineStyle, setShowMarker
+ \sa hasOwnLineWidth, hasOwnLineColor, hasOwnLineStyle, hasOwnShowMarker
+ */
+ void setLineWidth( int idLineWidth, int lineWidth )
+ {
+ mIdLineWidth = idLineWidth;
+ mLineWidth = lineWidth;
+ }
+
+ /**
+ Returns whether this property set is specifying it's own line width settings.
+
+ \note This function should be used for Line Charts only.
+
+ \returns TRUE if this property set is specifying it's own line width settings,
+ FALSE if the settings of another property set are to be used instead.
+
+ \param idLineWidth to be ignored if return value is TRUE.
+ If idLineWidth is KDChartPropertySet::UndefinedID
+ then neither a property set ID
+ nor an own line width were specified (so no special
+ line width is associated to the respective data cell),
+ else idLineWidth contains the ID of another property set
+ that is specifying the line width to be used.
+ \param lineWidth this parameter's value is not modified if return value is FALSE.
+ Parameter lineWidth contains the line width value
+ associated with the respective data cell.
+ If return value is FALSE the lineWidth
+ value is not set (so the parameter keeps its previous value)
+ but this is to be overridden by the respective value
+ of another property set that is indicated
+ by the idLineWidth parameter - unless this has the special
+ value KDChartPropertySet::UndefinedID as decribed above.
+
+ \sa setLineWidth, setLineColor, setLineStyle, setShowMarker
+ \sa hasOwnLineColor, hasOwnLineStyle, hasOwnShowMarker
+ */
+ bool hasOwnLineWidth( int& idLineWidth, int& lineWidth )
+ {
+ idLineWidth = mIdLineWidth;
+ if( OwnID == mIdLineWidth ){
+ lineWidth = mLineWidth;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ Specify the ID of the property set specifying the line color
+ to be used for drawing a line from this data point to the next one
+ <b>or</b> specify the line color directly.
+
+ \note This function should be used for Line Charts only, otherwise
+ the settings specified here will be ignored.
+
+ \param idLineColor ID of the property set specifying the line color.
+ Use special value KDChartPropertySet::UndefinedID
+ to specify neither another property set's ID
+ nor an own value for the line color.
+ Use special value KDChartPropertySet::OwnID
+ if you do NOT want to inherit another property set's
+ settings but want to specify the line color by using
+ the following parameter.
+ \param lineColor The line color to be used.
+ This parameter is stored but ignored if the previous parameter
+ is not set to KDChartPropertySet::OwnID.
+
+ \sa setLineWidth, setLineStyle, setShowMarker
+ \sa hasOwnLineWidth, hasOwnLineColor, hasOwnLineStyle, hasOwnShowMarker
+ */
+ void setLineColor( int idLineColor, const QColor& lineColor )
+ {
+ mIdLineColor = idLineColor;
+ mLineColor = lineColor;
+ }
+
+ /**
+ Returns whether this property set is specifying it's own line color settings.
+
+ \note This function should be used for Line Charts only, otherwise
+ the settings specified here will be ignored.
+
+ \returns TRUE if this property set is specifying it's own line color settings,
+ FALSE if the settings of another property set are to be used instead.
+
+ \note The return value will also be FALSE if the 'default' properties
+ are to be used: in this case idLineColor will be KDChartParams::NormalData
+
+ \param idLineColor to be ignored if return value is TRUE.
+ If idLineColor is KDChartPropertySet::UndefinedID
+ then neither a property set ID
+ nor an own line color were specified (so no special
+ line color is associated to the respective data cell),
+ else idLineColor contains the ID of another property set
+ that is specifying the line color to be used.
+ \param lineColor this parameter's value is not modified if return value is FALSE.
+ Parameter lineColor contains the line color value
+ associated with the respective data cell.
+ If return value is FALSE the lineColor
+ value is not set (so the parameter keeps its previous value)
+ but this is to be overridden by the respective value
+ of another property set that is indicated
+ by the idLineColor parameter - unless this has the special
+ value KDChartPropertySet::UndefinedID as decribed above.
+
+ \sa setLineWidth, setLineColor, setLineStyle, setShowMarker
+ \sa hasOwnLineWidth, hasOwnLineStyle, hasOwnShowMarker
+ */
+ bool hasOwnLineColor( int& idLineColor, QColor& lineColor )
+ {
+ idLineColor = mIdLineColor;
+ if( OwnID == mIdLineColor ){
+ lineColor = mLineColor;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ Specify the ID of the property set specifying the line style
+ to be used for drawing a line from this data point to the next one
+ <b>or</b> specify the line width directly.
+
+ \note This function should be used for Line Charts only, otherwise
+ the settings specified here will be ignored.
+
+ \param idLineStyle ID of the property set specifying the line style.
+ Use special value KDChartPropertySet::UndefinedID
+ to specify neither another property set's ID
+ nor an own value for the line style.
+ Use special value KDChartPropertySet::OwnID
+ if you do NOT want to inherit another property set's
+ settings but want to specify the line style by using
+ the following parameter.
+ \param lineStyle The line style to be used.
+ This parameter is stored but ignored if the previous parameter
+ is not set to KDChartPropertySet::OwnID.
+
+ \sa setLineWidth, setLineColor, setShowMarker
+ \sa hasOwnLineWidth, hasOwnLineColor, hasOwnLineStyle, hasOwnShowMarker
+ */
+ void setLineStyle( int idLineStyle, const PenStyle& lineStyle )
+ {
+ mIdLineStyle = idLineStyle;
+ mLineStyle = lineStyle;
+ }
+
+ /**
+ Returns whether this property set is specifying it's own line style settings.
+
+ \note This function should be used for Line Charts only, otherwise
+ the settings specified here will be ignored.
+
+ \returns TRUE if this property set is specifying it's own line style settings,
+ FALSE if the settings of another property set are to be used instead.
+
+ \note The return value will also be FALSE if the 'default' properties
+ are to be used: in this case idLineStyle will be KDChartParams::NormalData
+
+ \param idLineStyle to be ignored if return value is TRUE.
+ If idLineStyle is KDChartPropertySet::UndefinedID
+ then neither a property set ID
+ nor an own line style were specified (so no special
+ line style is associated to the respective data cell),
+ else idLineStyle contains the ID of another property set
+ that is specifying the line style to be used.
+ \param lineStyle this parameter's value is not modified if return value is FALSE.
+ Parameter lineStyle contains the line style value
+ associated with the respective data cell.
+ If return value is FALSE the lineStyle
+ value is not set (so the parameter keeps its previous value)
+ but this is to be overridden by the respective value
+ of another property set that is indicated
+ by the idLineStyle parameter - unless this has the special
+ value KDChartPropertySet::UndefinedID as decribed above.
+
+ \sa setLineWidth, setLineColor, setLineStyle, setShowMarker
+ \sa hasOwnLineWidth, hasOwnLineColor, hasOwnShowMarker
+ */
+ bool hasOwnLineStyle( int& idLineStyle, PenStyle& lineStyle )
+ {
+ idLineStyle = mIdLineStyle;
+ if( OwnID == mIdLineStyle ){
+ lineStyle = mLineStyle;
+ return true;
+ }
+ return false;
+ }
+
+
+
+ /**
+ Specify the ID of the property set specifying the area brush
+ to be used for this cell
+ <b>or</b> specify the area brush directly.
+
+ \note This function should be used for Area Charts in <b>Normal</b> mode
+ only, otherwise the settings specified here will be ignored.
+
+ \param idAreaBrush ID of the property set specifying the area brush.
+ Use special value KDChartPropertySet::UndefinedID
+ to specify neither another property set's ID
+ nor an own value for the area brush.
+ Use special value KDChartPropertySet::OwnID
+ if you do NOT want to inherit another property set's
+ settings but want to specify the area brush by using
+ the following parameter.
+ \param areaBrush The area brush to be used.
+ This parameter is stored but ignored if the previous parameter
+ is not set to KDChartPropertySet::OwnID.
+
+ \sa hasOwnAreaBrush
+ */
+ void setAreaBrush( int idAreaBrush, const QBrush& areaBrush )
+ {
+ mIdAreaBrush = idAreaBrush;
+ mAreaBrush = areaBrush;
+ }
+
+ /**
+ Returns whether this property set is specifying it's own area brush settings.
+
+ \note This function should be used for Area Charts in <b>Normal</b> mode
+ only, otherwise the settings specified here will be ignored.
+
+ \returns TRUE if this property set is specifying it's own area brush settings,
+ FALSE if the settings of another property set are to be used instead.
+
+ \note The return value will also be FALSE if the 'default' properties
+ are to be used: in this case idAreaBrush will be KDChartParams::NormalData
+
+ \param idAreaBrush to be ignored if return value is TRUE.
+ If idAreaBrush is KDChartPropertySet::UndefinedID
+ then neither a property set ID
+ nor an own area brush were specified (so no special
+ area brush is associated to the respective data cell),
+ else idAreaBrush contains the ID of another property set
+ that is specifying the area brush to be used.
+ \param areaBrush this parameter's value is not modified if return value is FALSE.
+ Parameter areaBrush contains the area brush value
+ associated with the respective data cell.
+ If return value is FALSE the areaBrush
+ value is not set (so the parameter keeps its previous value)
+ but this is to be overridden by the respective value
+ of another property set that is indicated
+ by the idAreaBrush parameter - unless this has the special
+ value KDChartPropertySet::UndefinedID as decribed above.
+
+ \sa setAreaBrush
+ */
+ bool hasOwnAreaBrush( int& idAreaBrush, QBrush& areaBrush )
+ {
+ idAreaBrush = mIdAreaBrush;
+ if( OwnID == mIdAreaBrush ){
+ areaBrush = mAreaBrush;
+ return true;
+ }
+ return false;
+ }
+
+
+
+
+
+ /**
+ Specify the ID of the property set specifying a boolean flag indicating
+ whether a Marker is to be displayed for this data value
+ <b>or</b> specifying this flag directly.
+
+ \note This function should be used for Line Charts only, otherwise
+ the settings specified here will be ignored.
+
+ \param idShowMarker ID of the property set specifying the flag
+ indicating whether a marker is to be shown.
+ Use special value KDChartPropertySet::UndefinedID
+ to specify neither another property set's ID
+ nor an own value for this flag.
+ Use special value KDChartPropertySet::OwnID
+ if you do NOT want to inherit another property set's
+ settings but want to specify the flag by using
+ the following parameter.
+ \param showMarker Flag indicating whether a marker is to be shown.
+ This parameter is stored but ignored if the previous parameter
+ is not set to KDChartPropertySet::OwnID.
+
+ \sa hasOwnShowMarker
+ \sa setMarkerAlign, setMarkerSize, setMarkerColor, setMarkerStyle
+ \sa setLineWidth, setLineColor, setLineStyle
+ */
+ void setShowMarker( int idShowMarker, bool showMarker )
+ {
+ mIdShowMarker = idShowMarker;
+ mShowMarker = showMarker;
+ }
+
+ /**
+ Returns whether this property set is specifying it's own flag indicating
+ whether a Marker is to be displayed.
+
+ \note This function should be used for Line Charts only, otherwise
+ the settings specified here will be ignored.
+
+ \returns TRUE if this property set is specifying it's own showMarker flag,
+ FALSE if the settings of another property set are to be used instead.
+
+ \note The return value will also be FALSE if the 'default' properties
+ are to be used: in this case idShowMarker will be KDChartParams::NormalData
+
+ \param idShowMarker to be ignored if return value is TRUE.
+ If idShowMarker is KDChartPropertySet::UndefinedID
+ then neither a property set ID
+ nor an own flag were specified (so no special
+ enabeling/disabeling of markers is associated to the
+ respective data cell), else idShowMarker contains the
+ ID of another property set that is specifying the flag
+ to be used.
+ \param showMarker this parameter's value is not modified if return value is FALSE.
+ Parameter showMarker contains the showMarker flag
+ associated with the respective data cell.
+ If return value is FALSE the showMarker
+ flag is not set (so the parameter keeps its previous value)
+ but this is to be overridden by the respective value
+ of another property set that is indicated
+ by the idShowMarker parameter - unless this has the special
+ value KDChartPropertySet::UndefinedID as decribed above.
+
+ \sa setShowMarker
+ \sa hasOwnMarkerAlign, hasOwnMarkerSize, hasOwnMarkerColor, hasOwnMarkerStyle
+ \sa hasOwnLineWidth, hasOwnLineColor, hasOwnLineStyle
+ */
+ bool hasOwnShowMarker( int& idShowMarker, bool& showMarker )
+ {
+ idShowMarker = mIdShowMarker;
+ if( OwnID == idShowMarker ){
+ showMarker = mShowMarker;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ Specify the ID of the property set specifying the alignment of the
+ Marker to be displayed for this data value
+ <b>or</b> specifying this flag directly.
+
+ \note This function should be used for Line Charts only, otherwise
+ the settings specified here will be ignored.
+
+ \param idMarkerAlign ID of the property set specifying the alignment
+ of the Marker to be shown.
+ Use special value KDChartPropertySet::UndefinedID
+ to specify neither another property set's ID
+ nor an own value for this flag.
+ Use special value KDChartPropertySet::OwnID
+ if you do NOT want to inherit another property set's
+ settings but want to specify the flag by using
+ the following parameter.
+ \param markerAlign The alignment of the marker to be shown.
+ This parameter is stored but ignored if the previous parameter
+ is not set to KDChartPropertySet::OwnID.
+
+ \sa hasOwnShowMarker
+ \sa setMarkerAlign, setMarkerSize, setMarkerColor, setMarkerStyle
+ \sa setLineWidth, setLineColor, setLineStyle
+ */
+ void setMarkerAlign( int idMarkerAlign, uint markerAlign )
+ {
+ mIdMarkerAlign = idMarkerAlign;
+ mMarkerAlign = markerAlign;
+ }
+ bool hasOwnMarkerAlign( int& idMarkerAlign, uint& markerAlign )
+ {
+ idMarkerAlign = mIdMarkerAlign;
+ if( OwnID == idMarkerAlign ){
+ markerAlign = mMarkerAlign;
+ return true;
+ }
+ return false;
+ }
+ void setMarkerSize( int idMarkerSize, const QSize& markerSize )
+ {
+ mIdMarkerSize = idMarkerSize;
+ mMarkerSize = markerSize;
+ }
+ bool hasOwnMarkerSize( int& idMarkerSize, QSize& markerSize )
+ {
+ idMarkerSize = mIdMarkerSize;
+ if( OwnID == idMarkerSize ){
+ markerSize = mMarkerSize;
+ return true;
+ }
+ return false;
+ }
+ void setMarkerColor( int idMarkerColor, const QColor& markerColor )
+ {
+ mIdMarkerColor = idMarkerColor;
+ mMarkerColor = markerColor;
+ }
+ bool hasOwnMarkerColor( int& idMarkerColor, QColor& markerColor )
+ {
+ idMarkerColor = mIdMarkerColor;
+ if( OwnID == idMarkerColor ){
+ markerColor = mMarkerColor;
+ return true;
+ }
+ return false;
+ }
+ void setMarkerStyle( int idMarkerStyle, int markerStyle )
+ {
+ mIdMarkerStyle = idMarkerStyle;
+ mMarkerStyle = markerStyle;
+ }
+ bool hasOwnMarkerStyle( int& idMarkerStyle, int& markerStyle )
+ {
+ idMarkerStyle = mIdMarkerStyle;
+ if( OwnID == idMarkerStyle ){
+ markerStyle = mMarkerStyle;
+ return true;
+ }
+ return false;
+ }
+
+
+
+
+
+
+ void setExtraLinesAlign( int idExtraLinesAlign, uint extraLinesAlign )
+ {
+ mIdExtraLinesAlign = idExtraLinesAlign;
+ mExtraLinesAlign = extraLinesAlign;
+ }
+ bool hasOwnExtraLinesAlign( int& idExtraLinesAlign, uint& extraLinesAlign )
+ {
+ idExtraLinesAlign = mIdExtraLinesAlign;
+ if( OwnID == idExtraLinesAlign ){
+ extraLinesAlign = mExtraLinesAlign;
+ return true;
+ }
+ return false;
+ }
+ void setExtraLinesInFront( int idExtraLinesInFront, bool extraLinesInFront )
+ {
+ mIdExtraLinesInFront = idExtraLinesInFront;
+ mExtraLinesInFront = extraLinesInFront;
+ }
+ bool hasOwnExtraLinesInFront( int& idExtraLinesInFront, bool& extraLinesInFront )
+ {
+ idExtraLinesInFront = mIdExtraLinesInFront;
+ if( OwnID == idExtraLinesInFront ){
+ extraLinesInFront = mExtraLinesInFront;
+ return true;
+ }
+ return false;
+ }
+ void setExtraLinesLength( int idExtraLinesLength, int extraLinesLength )
+ {
+ mIdExtraLinesLength = idExtraLinesLength;
+ mExtraLinesLength = extraLinesLength;
+ }
+ bool hasOwnExtraLinesLength( int& idExtraLinesLength, int& extraLinesLength )
+ {
+ idExtraLinesLength = mIdExtraLinesLength;
+ if( OwnID == idExtraLinesLength ){
+ extraLinesLength = mExtraLinesLength;
+ return true;
+ }
+ return false;
+ }
+ void setExtraLinesWidth( int idExtraLinesWidth, int extraLinesWidth )
+ {
+ mIdExtraLinesWidth = idExtraLinesWidth;
+ mExtraLinesWidth = extraLinesWidth;
+ }
+ bool hasOwnExtraLinesWidth( int& idExtraLinesWidth, int& extraLinesWidth )
+ {
+ idExtraLinesWidth = mIdExtraLinesWidth;
+ if( OwnID == idExtraLinesWidth ){
+ extraLinesWidth = mExtraLinesWidth;
+ return true;
+ }
+ return false;
+ }
+ void setExtraLinesColor( int idExtraLinesColor, const QColor& extraLinesColor )
+ {
+ mIdExtraLinesColor = idExtraLinesColor;
+ mExtraLinesColor = extraLinesColor;
+ }
+ bool hasOwnExtraLinesColor( int& idExtraLinesColor, QColor& extraLinesColor )
+ {
+ idExtraLinesColor = mIdExtraLinesColor;
+ if( OwnID == idExtraLinesColor ){
+ extraLinesColor = mExtraLinesColor;
+ return true;
+ }
+ return false;
+ }
+ void setExtraLinesStyle( int idExtraLinesStyle, const PenStyle extraLinesStyle )
+ {
+ mIdExtraLinesStyle = idExtraLinesStyle;
+ mExtraLinesStyle = extraLinesStyle;
+ }
+ bool hasOwnExtraLinesStyle( int& idExtraLinesStyle, PenStyle& extraLinesStyle )
+ {
+ idExtraLinesStyle = mIdExtraLinesStyle;
+ if( OwnID == idExtraLinesStyle ){
+ extraLinesStyle = mExtraLinesStyle;
+ return true;
+ }
+ return false;
+ }
+
+ void setExtraMarkersAlign( int idExtraMarkersAlign, uint extraMarkersAlign )
+ {
+ mIdExtraMarkersAlign = idExtraMarkersAlign;
+ mExtraMarkersAlign = extraMarkersAlign;
+ }
+ bool hasOwnExtraMarkersAlign( int& idExtraMarkersAlign, uint& extraMarkersAlign )
+ {
+ idExtraMarkersAlign = mIdExtraMarkersAlign;
+ if( OwnID == idExtraMarkersAlign ){
+ extraMarkersAlign = mExtraMarkersAlign;
+ return true;
+ }
+ return false;
+ }
+ void setExtraMarkersSize( int idExtraMarkersSize, const QSize& extraMarkersSize )
+ {
+ mIdExtraMarkersSize = idExtraMarkersSize;
+ mExtraMarkersSize = extraMarkersSize;
+ }
+ bool hasOwnExtraMarkersSize( int& idExtraMarkersSize, QSize& extraMarkersSize )
+ {
+ idExtraMarkersSize = mIdExtraMarkersSize;
+ if( OwnID == idExtraMarkersSize ){
+ extraMarkersSize = mExtraMarkersSize;
+ return true;
+ }
+ return false;
+ }
+ void setExtraMarkersColor( int idExtraMarkersColor, const QColor& extraMarkersColor )
+ {
+ mIdExtraMarkersColor = idExtraMarkersColor;
+ mExtraMarkersColor = extraMarkersColor;
+ }
+ bool hasOwnExtraMarkersColor( int& idExtraMarkersColor, QColor& extraMarkersColor )
+ {
+ idExtraMarkersColor = mIdExtraMarkersColor;
+ if( OwnID == idExtraMarkersColor ){
+ extraMarkersColor = mExtraMarkersColor;
+ return true;
+ }
+ return false;
+ }
+ void setExtraMarkersStyle( int idExtraMarkersStyle, int extraMarkersStyle )
+ {
+ mIdExtraMarkersStyle = idExtraMarkersStyle;
+ mExtraMarkersStyle = extraMarkersStyle;
+ }
+ bool hasOwnExtraMarkersStyle( int& idExtraMarkersStyle, int& extraMarkersStyle )
+ {
+ idExtraMarkersStyle = mIdExtraMarkersStyle;
+ if( OwnID == idExtraMarkersStyle ){
+ extraMarkersStyle = mExtraMarkersStyle;
+ return true;
+ }
+ return false;
+ }
+
+protected:
+ // the following member only to be set internally by KDChartParams::registerProperties
+ // and by KDChartParams::setProperties
+ int mOwnID;
+
+private:
+ KDChartPropertySet( const KDChartPropertySet& ) : QObject(0) {}
+
+ QString mName;
+ // IDs: values used if ID == OwnID:
+ int mIdLineWidth; int mLineWidth;
+ int mIdLineColor; QColor mLineColor;
+ int mIdLineStyle; Qt::PenStyle mLineStyle;
+ int mIdShowMarker; bool mShowMarker;
+ int mIdMarkerSize; QSize mMarkerSize;
+ int mIdMarkerColor; QColor mMarkerColor;
+ int mIdMarkerStyle; int mMarkerStyle;
+ int mIdMarkerAlign; uint mMarkerAlign;
+ int mIdExtraLinesAlign; uint mExtraLinesAlign;
+ int mIdExtraLinesInFront; bool mExtraLinesInFront;
+ int mIdExtraLinesLength; int mExtraLinesLength;
+ int mIdExtraLinesWidth; int mExtraLinesWidth;
+ int mIdExtraLinesColor; QColor mExtraLinesColor;
+ int mIdExtraLinesStyle; Qt::PenStyle mExtraLinesStyle;
+ int mIdExtraMarkersAlign; uint mExtraMarkersAlign;
+ int mIdExtraMarkersSize; QSize mExtraMarkersSize;
+ int mIdExtraMarkersColor; QColor mExtraMarkersColor;
+ int mIdExtraMarkersStyle; int mExtraMarkersStyle;
+ int mIdShowBar; bool mShowBar;
+ int mIdBarColor; QColor mBarColor;
+ int mIdAreaBrush; QBrush mAreaBrush;
+ void fillValueMembersWithDummyValues();
+};
+
+#endif
diff --git a/libkdchart/KDChartRingPainter.cpp b/libkdchart/KDChartRingPainter.cpp
new file mode 100644
index 0000000..2087066
--- /dev/null
+++ b/libkdchart/KDChartRingPainter.cpp
@@ -0,0 +1,400 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#include "KDChartRingPainter.h"
+#include "KDChartParams.h"
+
+#include <qpainter.h>
+#include <qvaluestack.h>
+
+#include <stdlib.h>
+
+#define DEGTORAD(d) (d)*M_PI/180
+
+/**
+ \class KDChartRingPainter KDChartRingPainter.h
+
+ \brief A chart painter implementation that can paint pie charts.
+
+ PENDING(kalle) Write more documentation.
+ */
+
+/**
+ Constructor. Sets up internal data structures as necessary.
+
+ \param params the KDChartParams structure that defines the chart
+ */
+ KDChartRingPainter::KDChartRingPainter( KDChartParams* params ) :
+KDChartPainter( params )
+{
+ // This constructor intentionally left blank so far; we cannot setup the
+ // geometry yet since we do not know the size of the painter.
+}
+
+
+/**
+ Destructor.
+ */
+KDChartRingPainter::~KDChartRingPainter()
+{
+ // intentionally left blank
+}
+
+
+/**
+ Paints the actual data area.
+
+ \param painter the QPainter onto which the chart should be painted
+ \param data the data that will be displayed as a chart
+ \param paint2nd specifies whether the main chart or the additional chart is to be drawn now
+ \param regions a pointer to a list of regions that will be filled
+ with regions representing the data segments, if not null
+ */
+void KDChartRingPainter::paintData( QPainter* painter,
+ KDChartTableDataBase* data,
+ bool paint2nd,
+ KDChartDataRegionList* regions )
+{
+ uint chart = paint2nd ? 1 : 0;
+
+ QRect ourClipRect( _dataRect );
+
+ const QWMatrix & world = painter->worldMatrix();
+ ourClipRect =
+#if COMPAT_QT_VERSION >= 0x030000
+ world.mapRect( ourClipRect );
+#else
+ world.map( ourClipRect );
+#endif
+
+ ourClipRect.setTop(ourClipRect.top()-1);
+ ourClipRect.setLeft(ourClipRect.left()-1);
+ ourClipRect.setBottom(ourClipRect.bottom()+1);
+ ourClipRect.setRight(ourClipRect.right()+1);
+ painter->setClipRect( ourClipRect );
+
+ uint datasetStart, datasetEnd;
+ if ( params()->neverUsedSetChartSourceMode()
+ || !params()->findDataset( KDChartParams::DataEntry,
+ datasetStart,
+ datasetEnd,
+ chart ) ) {
+ uint maxRow, maxRowMinus1;
+ switch ( data->usedRows() ) {
+ case 0:
+ return ;
+ case 1:
+ maxRow = 0;
+ maxRowMinus1 = 0;
+ break;
+ default:
+ maxRow = data->usedRows() - 1;
+ maxRowMinus1 = maxRow - 1;
+ }
+ datasetStart = paint2nd ? maxRow
+ : 0;
+ datasetEnd = paint2nd ? maxRow
+ : ( ( KDChartParams::NoType
+ == params()->additionalChartType() )
+ ? maxRow
+ : maxRowMinus1 );
+ }
+ uint datasetNum = abs( (int)( datasetEnd - datasetStart ) + 1 );
+
+
+ // Number of values: If -1, use all values, otherwise use the
+ // specified number of values.
+ if ( params()->numValues() != -1 )
+ _numValues = params()->numValues();
+ else
+ _numValues = data->usedCols();
+
+ // compute position
+ _size = QMIN( _dataRect.width(), _dataRect.height() ); // initial size
+ // if the rings explode, we need to give them additional space =>
+ // make the basic size smaller
+ if ( params()->explode() ) {
+ double doubleSize = ( double ) _size;
+ doubleSize /= ( 1.0 + params()->explodeFactor() * 2 );
+ _size = ( int ) doubleSize;
+ }
+
+ int x = ( _dataRect.width() == _size ) ? 0 : ( ( _dataRect.width() - _size ) / 2 );
+ int y = ( _dataRect.height() == _size ) ? 0 : ( ( _dataRect.height() - _size ) / 2 );
+ _position = QRect( x, y, _size, _size );
+ _position.moveBy( _dataRect.left(), _dataRect.top() );
+
+ // We need the row sums anyway later, so we can just as well compute them
+ // here, because we need them in case of relative ring thicknesses.
+ QMemArray<double> rowsums;
+ double totalSum = 0.0;
+ rowsums.resize( datasetEnd+1 ); // not datasetNum!
+ for( int d1 = (int)datasetStart; d1 <= (int)datasetEnd; d1++ ) {
+ rowsums[d1] = data->rowAbsSum( d1 );
+ totalSum += rowsums[d1];
+ }
+
+ QMemArray<int> ringthicknesses;
+ ringthicknesses.resize( datasetEnd+1 ); // not datasetNum!
+
+ // constant ring thickness
+ int ringthickness = _size / ( datasetNum * 2 );
+ // Never let the ring thickness be more than 1/10 of the size to
+ // ensure "ringness"
+ if( ringthickness > ( _size/10 ) )
+ ringthickness = _size / 10;
+
+ for( int d2 = (int)datasetStart; d2 <= (int)datasetEnd; d2++ )
+ if( params()->relativeRingThickness() ) {
+ // 50% should be the same thickness as the one used when ring
+ // thickness is constant.
+ ringthicknesses[d2] = (uint)floor( (rowsums[d2] / totalSum) *
+ ( 2.0 * (double)ringthickness ) + 0.5 );
+ } else {
+ ringthicknesses[d2] = ringthickness;
+ }
+
+ int currentouterradius = _size/2;
+
+ // Loop through all the displayable datasets; each dataset is one ring
+ for( int dataset = (int)datasetStart; dataset <= (int)datasetEnd; dataset++ ) {
+ double sectorsPerValue = 5760.0 / rowsums[dataset]; // 5760 == 16*360, number of sections in Qt circle
+ //int sectorsPerValueI = static_cast<int>( sectorsPerValue );
+ double currentstartpos = (double)params()->ringStart() * 16.0;
+ // Loop through all the values; each value is one piece on the ring.
+ QVariant vValY;
+ for( int value = 0; value < _numValues; value++ ) {
+ // is there anything at all at this value?
+ double cellValue = 0.0;
+ if( data->cellCoord( dataset, value, vValY, 1 ) &&
+ QVariant::Double == vValY.type() ){
+ cellValue = fabs( vValY.toDouble() );
+ // Explosion: Only explode if explosion is turned on generally
+ // and we are on the first ring. Besides, if there is a list
+ // of explodeable values, the current value must be on this
+ // list.
+
+ QValueList<int> explodeList = params()->explodeValues();
+ bool explode = params()->explode() && // explosion is on at all
+ ( dataset == (int)datasetStart ) && // outermost ring
+ ( ( explodeList.count() == 0 ) || // either nothing on explode list
+ ( explodeList.find( value ) != explodeList.end() ) ); // or pie is on it
+
+ drawOneSegment( painter,
+ currentouterradius,
+ currentouterradius-ringthicknesses[dataset],
+ currentstartpos,
+ sectorsPerValue * cellValue,
+ dataset, value, chart, explode, regions );
+ }
+ currentstartpos += sectorsPerValue * cellValue;
+ }
+ currentouterradius -= ringthicknesses[dataset];
+ }
+}
+
+
+
+void KDChartRingPainter::drawOneSegment( QPainter* painter,
+ uint outerRadius,
+ uint innerRadius,
+ double startAngle,
+ double angles,
+ uint dataset,
+ uint value,
+ uint chart,
+ bool explode,
+ KDChartDataRegionList* regions )
+{
+ // special case for full circle
+ if( angles == 5760.0 )
+ startAngle = 0.0;
+
+ painter->setPen( QPen( params()->outlineDataColor(),
+ params()->outlineDataLineWidth() ) );
+ painter->setBrush( params()->dataColor( value ) );
+
+ uint outerRadius2 = outerRadius * 2;
+ uint innerRadius2 = innerRadius * 2;
+
+ QRect drawPosition = _position;
+ if ( explode ) {
+ // need to compute a new position for each pie
+ double explodeAngle = ( startAngle + angles / 2.0 ) / 16.0;
+ double explodeAngleRad = DEGTORAD( explodeAngle );
+ double cosAngle = cos( explodeAngleRad );
+ double sinAngle = -sin( explodeAngleRad );
+
+ // find the explode factor for this particular ring segment
+ double explodeFactor = 0.0;
+ QMap<int,double> explodeFactors = params()->explodeFactors();
+ if( !explodeFactors.contains( value ) ) // not on factors list, use default
+ explodeFactor = params()->explodeFactor();
+ else // on factors list, use segment-specific value
+ explodeFactor = explodeFactors[value];
+
+ double explodeX = explodeFactor * _size * cosAngle;
+ double explodeY = explodeFactor * _size * sinAngle;
+ drawPosition.moveBy( static_cast<int>( explodeX ), static_cast<int>( explodeY ) );
+ }
+
+ QRect outerRect( drawPosition.x() +
+ ( drawPosition.width() - outerRadius2 ) / 2,
+ drawPosition.y() +
+ ( drawPosition.height() - outerRadius2 ) / 2,
+ outerRadius2, outerRadius2 );
+ QRect innerRect( drawPosition.x() +
+ ( drawPosition.width() - innerRadius2 ) / 2,
+ drawPosition.y() +
+ ( drawPosition.height() - innerRadius2 ) / 2,
+ innerRadius2, innerRadius2 );
+
+ // Start with getting the points for the inner arc.
+ QPointArray innerArc;
+ makeArc( innerArc, innerRect, startAngle, angles );
+
+ // And the points for the outer arc
+ QPointArray outerArc;
+ makeArc( outerArc, outerRect, startAngle, angles );
+
+ // Now copy the points from the outer arc in the reverse order onto the
+ // inner arc array and draw that.
+ uint innerArcPoints = innerArc.size();
+ uint outerArcPoints = outerArc.size();
+ innerArc.resize( innerArcPoints + outerArcPoints );
+ for ( int i = outerArcPoints - 1; i >= 0; i-- ) {
+ innerArc.setPoint( innerArcPoints+outerArcPoints-i-1,
+ outerArc.point( i ) );
+ }
+
+ painter->drawPolygon( innerArc );
+ if ( regions /* && ( innerArc.size() > 2 )*/ ) {
+ KDChartDataRegion* datReg = new KDChartDataRegion( dataset,
+ value,
+ chart,
+ innerArc );
+
+ const int aA = static_cast<int>( startAngle );
+ const int aM = static_cast<int>( startAngle + angles / 2.0 );
+ const int aZ = static_cast<int>( startAngle + angles );
+
+ datReg->points[ KDChartEnums::PosTopLeft ]
+ = pointOnCircle( outerRect, aZ );
+ datReg->points[ KDChartEnums::PosTopCenter ]
+ = pointOnCircle( outerRect, aM );
+ datReg->points[ KDChartEnums::PosTopRight ]
+ = pointOnCircle( outerRect, aA );
+
+ datReg->points[ KDChartEnums::PosBottomLeft ]
+ = pointOnCircle( innerRect, aZ );
+ datReg->points[ KDChartEnums::PosBottomCenter ]
+ = pointOnCircle( innerRect, aM );
+ datReg->points[ KDChartEnums::PosBottomRight ]
+ = pointOnCircle( innerRect, aA );
+
+ datReg->points[ KDChartEnums::PosCenterLeft ]
+ = QPoint( ( datReg->points[ KDChartEnums::PosTopLeft ].x()
+ + datReg->points[ KDChartEnums::PosBottomLeft ].x() ) / 2,
+ ( datReg->points[ KDChartEnums::PosTopLeft ].y()
+ + datReg->points[ KDChartEnums::PosBottomLeft ].y() ) / 2 );
+ datReg->points[ KDChartEnums::PosCenter ]
+ = QPoint( ( datReg->points[ KDChartEnums::PosTopCenter ].x()
+ + datReg->points[ KDChartEnums::PosBottomCenter ].x() ) / 2,
+ ( datReg->points[ KDChartEnums::PosTopCenter ].y()
+ + datReg->points[ KDChartEnums::PosBottomCenter ].y() ) / 2 );
+ datReg->points[ KDChartEnums::PosCenterRight ]
+ = QPoint( ( datReg->points[ KDChartEnums::PosTopRight ].x()
+ + datReg->points[ KDChartEnums::PosBottomRight ].x() ) / 2,
+ ( datReg->points[ KDChartEnums::PosTopRight ].y()
+ + datReg->points[ KDChartEnums::PosBottomRight ].y() ) / 2 );
+
+ // test the 9 positions:
+ /*
+ painter->drawEllipse( datReg->points[ KDChartEnums::PosTopLeft ].x() - 2,
+ datReg->points[ KDChartEnums::PosTopLeft ].y() - 2, 5, 5);
+ painter->drawEllipse( datReg->points[ KDChartEnums::PosCenterLeft ].x() - 2,
+ datReg->points[ KDChartEnums::PosCenterLeft ].y() - 2, 5, 5);
+ painter->drawEllipse( datReg->points[ KDChartEnums::PosBottomLeft ].x() - 2,
+ datReg->points[ KDChartEnums::PosBottomLeft ].y() - 2, 5, 5);
+
+ qDebug( "\ncenter: (%i, %i)",
+ datReg->points[ KDChartEnums::PosCenter ].x(),
+ datReg->points[ KDChartEnums::PosCenter ].y() );
+ painter->drawEllipse( datReg->points[ KDChartEnums::PosTopCenter ].x() - 2,
+ datReg->points[ KDChartEnums::PosTopCenter ].y() - 2, 5, 5);
+ painter->drawEllipse( datReg->points[ KDChartEnums::PosCenter ].x() - 2,
+ datReg->points[ KDChartEnums::PosCenter ].y() - 2, 5, 5);
+ painter->drawEllipse( datReg->points[ KDChartEnums::PosBottomCenter].x() - 2,
+ datReg->points[ KDChartEnums::PosBottomCenter].y() - 2, 5, 5);
+
+ painter->drawRect( datReg->points[ KDChartEnums::PosCenterRight ].x() - 2,
+ datReg->points[ KDChartEnums::PosCenterRight ].y() - 2, 5, 5);
+ //painter->drawRect( datReg->points[ KDChartEnums::PosTopRight ].x() - 2,
+ // datReg->points[ KDChartEnums::PosTopRight ].y() - 2, 5, 5);
+ painter->drawRect( datReg->points[ KDChartEnums::PosBottomRight ].x() - 2,
+ datReg->points[ KDChartEnums::PosBottomRight ].y() - 2, 5, 5);
+ */
+ datReg->startAngle = static_cast<int>( startAngle );
+ datReg->angleLen = static_cast<int>( angles );
+ regions->append( datReg );
+ }
+}
+
+
+/**
+ This method is a specialization that returns a fallback legend text
+ appropriate for rings where the fallbacks should come from the values, not
+ from the datasets.
+
+ This method is only used when automatic legends are used, because
+ manual and first-column legends do not need fallback texts.
+
+ \param uint dataset the dataset number for which to generate a
+ fallback text
+ \return the fallback text to use for describing the specified
+ dataset in the legend
+ */
+QString KDChartRingPainter::fallbackLegendText( uint dataset ) const
+{
+ return QObject::tr( "Item " ) + QString::number( dataset + 1 );
+}
+
+
+/**
+ This methods returns the number of elements to be shown in the
+ legend in case fallback texts are used.
+
+ This method is only used when automatic legends are used, because
+ manual and first-column legends do not need fallback texts.
+
+ \return the number of fallback texts to use
+ */
+uint KDChartRingPainter::numLegendFallbackTexts( KDChartTableDataBase* data ) const
+{
+ return data->usedCols();
+}
diff --git a/libkdchart/KDChartRingPainter.h b/libkdchart/KDChartRingPainter.h
new file mode 100644
index 0000000..be70f0c
--- /dev/null
+++ b/libkdchart/KDChartRingPainter.h
@@ -0,0 +1,64 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTRINGPAINTER_H__
+#define __KDCHARTRINGPAINTER_H__
+
+#include <KDChartPainter.h>
+#include <KDChartTable.h>
+
+class KDChartParams;
+
+class KDChartRingPainter : public KDChartPainter
+{
+ friend class KDChartPainter;
+ protected:
+ KDChartRingPainter( KDChartParams* params );
+ virtual ~KDChartRingPainter();
+
+ virtual void paintData( QPainter* painter,
+ KDChartTableDataBase* data,
+ bool paint2nd,
+ KDChartDataRegionList* regions = 0 );
+ void drawOneSegment( QPainter* painter,
+ uint outerRadius, uint innerRadius,
+ double startAngle, double angles,
+ uint dataset, uint value, uint chart,
+ bool explode,
+ KDChartDataRegionList* regions = 0 );
+
+ virtual QString fallbackLegendText( uint dataset ) const;
+ virtual uint numLegendFallbackTexts( KDChartTableDataBase* data ) const;
+
+ QRect _position;
+ int _size;
+ int _numValues; // PENDING(kalle) Move to base class
+}
+;
+
+#endif
diff --git a/libkdchart/KDChartSeriesCollection.cpp b/libkdchart/KDChartSeriesCollection.cpp
new file mode 100644
index 0000000..185625e
--- /dev/null
+++ b/libkdchart/KDChartSeriesCollection.cpp
@@ -0,0 +1,240 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+
+
+#include "KDChartSeriesCollection.h"
+#include "KDChartParams.h"
+
+
+KDChartSeriesCollection::KDChartSeriesCollection( KDChartParams *params )
+{
+ _params = params;
+}
+
+
+KDChartSeriesCollection::~KDChartSeriesCollection()
+{
+ for ( int i = 0; i < static_cast < int > ( (*this).size() ); i ++ )
+ delete (*this)[i];
+}
+
+
+// both rows return the same amount
+uint KDChartSeriesCollection::rows() const
+{
+ return usedRows();
+}
+uint KDChartSeriesCollection::usedRows() const
+{
+ return (*this).size();
+}
+
+
+uint KDChartSeriesCollection::cols() const
+{
+ return usedCols();
+}
+
+
+uint KDChartSeriesCollection::usedCols() const
+{
+ uint result = 0;
+
+ // find the maximum number of rows in all the visible series
+
+ for ( int i = 0; i < static_cast < int > ( (*this).size() ); i ++ )
+ if ( result < (*this)[i]->rows())
+ result = (*this)[i]->rows();
+
+ return result;
+}
+
+// Don't really know how to handle these yet, I have no need yet.
+// It appears to be only used to load QTables.
+// ASSERT if used.
+void KDChartSeriesCollection::setUsedRows( uint )
+{
+ Q_ASSERT(0);
+}
+void KDChartSeriesCollection::setUsedCols( uint )
+{
+ Q_ASSERT(0);
+}
+
+
+void KDChartSeriesCollection::setCell( uint row, uint col,
+ const KDChartData& element )
+{
+ Q_ASSERT( row < (*this).size() );
+ this->at(row)->setCell(col, element);
+}
+
+const KDChartData& KDChartSeriesCollection::cell( uint row, uint col ) const
+{
+ Q_ASSERT( row < (*this).size() );
+ // Put this back in if/when KHZ adds the performance improvements
+ // re usedCols( uint row ) Q_ASSERT( col < (*this)[row]->rows() );
+
+ if ( col < this->at(row)->rows() )
+ return this->at(row)->cell(col);
+ else
+ return _blank;
+}
+
+void KDChartSeriesCollection::expand( uint cols, uint rows )
+{
+ // first expand ourselves - cols-wise
+ (*this).resize(rows);
+
+ // now expand our babies
+ for ( int i = 0; i < static_cast < int > ( (*this).size() ); i ++ )
+ (*this)[i]->expand(cols);
+}
+
+
+
+// coordinate is the first or second value in a data point
+double KDChartSeriesCollection::maxValue( int coordinate ) const
+{
+ // IF there are no series to read from, then just return zero.
+ // KHZ: perhaps this should assert?
+
+ bool ok; // the ok is required in case we check a PlaneSeries, which
+ // cannot possibly have a min or max on one of the axis.
+
+ double result = 0; // if no valid min/max, then this is the default
+ bool first_max = true;
+
+ // find the first max
+#if COMPAT_QT_VERSION >= 0x030000
+ QValueVector<KDChartBaseSeries *>::const_iterator i;
+#else
+ QArray<KDChartBaseSeries *>::ConstIterator i;
+#endif
+ for ( i = (*this).begin(); i != (*this).end(); i ++ )
+ {
+ double temp = (*i)->maxValue(coordinate, ok);
+ if ( ok && (first_max || temp > result) )
+ {
+ first_max = false;
+ result = temp;
+ }
+ }
+
+ return result;
+}
+
+
+
+double KDChartSeriesCollection::minValue( int coordinate ) const
+{
+ // IF there are no series to read from, then just return zero.
+ // KHZ: perhaps this should assert?
+
+ bool ok = false; // the ok is required in case we check a PlaneSeries, which
+ // cannot possibly have a min or max on one of the axis.
+
+ double result = 0; // if no valid min/max, then this is the default
+
+ // find the first min
+#if COMPAT_QT_VERSION >= 0x030000
+ QValueVector<KDChartBaseSeries *>::const_iterator i;
+#else
+ QArray<KDChartBaseSeries *>::ConstIterator i;
+#endif
+ for ( i = (*this).begin(); !ok && i != (*this).end(); i ++ )
+ result = (*i)->minValue(coordinate, ok);
+
+ if ( ok )
+ for ( ; i != (*this).end(); i ++ )
+ {
+ double temp = (*i)->minValue(coordinate, ok);
+ if (ok)
+ result = QMIN( result, temp );
+ }
+
+ return result;
+}
+
+
+unsigned int KDChartSeriesCollection::indexOf( KDChartBaseSeries *series )
+{
+ unsigned int index = 0;
+#if COMPAT_QT_VERSION >= 0x030000
+ QValueVector<KDChartBaseSeries *>::const_iterator i;
+#else
+ QArray<KDChartBaseSeries *>::ConstIterator i;
+#endif
+ for ( i = (*this).begin(); i != (*this).end(); i ++, index ++ )
+ if ( *i == series )
+ break;
+
+ // must find it
+ Q_ASSERT( index < (*this).size() );
+
+ return index;
+}
+
+
+void KDChartSeriesCollection::setLegendText( KDChartBaseSeries *series, QString text )
+{
+ _params->setLegendText( indexOf( series ), text );
+}
+
+
+
+void KDChartSeriesCollection::setYaxis( KDChartBaseSeries *series,
+ KDChartAxisParams::AxisPos axis )
+{
+ unsigned int index = indexOf( series );
+ _params->setAxisDatasets( axis, index, index, 0 );
+}
+
+
+
+
+QString KDChartSeriesCollection::legendText( KDChartBaseSeries *series )
+{
+ return _params->legendText( indexOf(series) );
+}
+
+
+KDChartAxisParams::AxisPos KDChartSeriesCollection::yAxis( KDChartBaseSeries *series )
+{
+ unsigned int index = indexOf( series );
+ unsigned int tempchart = 0; // needed cause for some reason KHZ wants a reference.
+
+ // now we have to look through
+ for ( int i = 0; i < KDCHART_MAX_AXES; i ++ )
+ if ( _params->axisDatasets( i, index, index, tempchart ) )
+ return (KDChartAxisParams::AxisPos) i;
+
+ Q_ASSERT(0); // should find it
+ return (KDChartAxisParams::AxisPos) 0;
+}
diff --git a/libkdchart/KDChartSeriesCollection.h b/libkdchart/KDChartSeriesCollection.h
new file mode 100644
index 0000000..ac0a1c9
--- /dev/null
+++ b/libkdchart/KDChartSeriesCollection.h
@@ -0,0 +1,93 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTSERIESCOLLECTION_H__
+#define __KDCHARTSERIESCOLLECTION_H__
+
+// to avoid problems in TableBase - it doesn't include this - bug!
+#include <qtable.h>
+
+#include "KDChartTableBase.h"
+#include "KDChartBaseSeries.h"
+#if COMPAT_QT_VERSION >= 0x030000
+#include <qvaluevector.h>
+#else
+#include <qarray.h>
+#endif
+class KDChartParams;
+#include "KDChartAxisParams.h"
+
+// takes ownership of any series passed to it, and will delete
+// them when it is deleted.
+class KDCHART_EXPORT KDChartSeriesCollection : public KDChartTableDataBase,
+#if COMPAT_QT_VERSION >= 0x030000
+ public QValueVector<KDChartBaseSeries *>
+#else
+ public QArray<KDChartBaseSeries *>
+#endif
+{
+ // Standard KDChartTableDataBase interface
+ public:
+ KDChartSeriesCollection( KDChartParams *params );
+ virtual ~KDChartSeriesCollection();
+
+ virtual uint rows() const;
+ virtual uint cols() const;
+ virtual void setUsedRows( uint _rows );
+ virtual uint usedRows() const;
+ virtual void setUsedCols( uint _cols );
+ virtual uint usedCols() const;
+ virtual void setCell( uint _row, uint _col,
+ const KDChartData& _element );
+ virtual const KDChartData& cell( uint _row, uint _col ) const;
+ virtual void expand( uint _rows, uint _cols );
+
+
+ // Methods we need KHZ to modify in HIS code so we can use our code
+ // needs to become virtual!
+ virtual double minValue( int coordinate=1 ) const;
+ virtual double maxValue( int coordinate=1 ) const;
+
+
+ // extra functions for our use
+ virtual void setLegendText( KDChartBaseSeries *series, QString text );
+ virtual QString legendText( KDChartBaseSeries *series );
+
+ virtual void setYaxis( KDChartBaseSeries *series,
+ KDChartAxisParams::AxisPos axis );// PENDING(blackie) possible enum problem
+ virtual KDChartAxisParams::AxisPos yAxis( KDChartBaseSeries *series );// PENDING(blackie) possible enum problem
+
+ virtual unsigned int indexOf( KDChartBaseSeries *series );
+
+ protected:
+ KDChartData _blank;
+ KDChartParams *_params;
+};
+
+
+#endif
diff --git a/libkdchart/KDChartTable.h b/libkdchart/KDChartTable.h
new file mode 100644
index 0000000..297cb45
--- /dev/null
+++ b/libkdchart/KDChartTable.h
@@ -0,0 +1,47 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTTABLE_H__
+#define __KDCHARTTABLE_H__
+
+// *must* include this one as first one:
+#include <KDChartGlobal.h>
+
+#include <KDChartListTable.h>
+#if COMPAT_QT_VERSION >= 0x030000
+#include <KDChartVectorTable.h>
+#endif
+
+#if COMPAT_QT_VERSION >= 0x030000
+typedef KDChartVectorTableData KDChartTableData;
+#else
+typedef KDChartListTableData KDChartTableData;
+#endif
+
+
+#endif
diff --git a/libkdchart/KDChartTableBase.cpp b/libkdchart/KDChartTableBase.cpp
new file mode 100644
index 0000000..d25e13f
--- /dev/null
+++ b/libkdchart/KDChartTableBase.cpp
@@ -0,0 +1,779 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+*/
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#include <math.h>
+#include <limits.h>
+#include <qtable.h>
+
+#include <KDChartTableBase.h>
+
+
+/**
+ \class KDChartTableDataBase KDChartTableBase.h
+ \brief Encapsulates all data values that are to be used in a chart.
+
+ \note To create your data table you would <em>not</em> use a
+ \c KDChartTableDataBase but instantiate the class \c KDChartTableData.
+ The \c KDChartTableData class is an auxiliary class: depending on your
+ Qt version it will be mapped onto a \c KDChartVectorTableData or onto
+ a \c KDChartListTableData both of which are derived from
+ \c KDChartTableDataBase and implement all of its functions.
+ Thus you would create a table of 3 datasets with 25 cells each like this:
+ \verbatim
+
+ KDChartTableData myData( 3, 25 );
+
+ \endverbatim
+
+ Data values may be specified via \c setCell().
+ Cell specific properties may be specified via \c setCellProp().
+
+ You may adjust or modify your table like this:
+
+ \li Entering the data can be done either manually using \c setCell()
+ or by passing a QTable to the \c importFromQTable() function.
+
+ \li Performance of KD Chart can be increased by specifying the number
+ of rows and or the number of columns actually used: \c setUsedRows()
+ and/or \c setUsedCols() prevents KD Chart from iterating over thousands
+ of empty rows/cols that might follow your data cells in case your
+ table is much bigger than needed.
+
+ \li In case you want to increase your table's size without using the
+ data stored in it please call the \c expand() function with the new
+ total number of rows and cells.
+
+ \li Accessing one data cell is possible via \c cellCoord()
+ and via \c cellProp(),
+ e.g. you might assign a special property set ID to all cells with a
+ future absicssa axis value:
+ \verbatim
+
+ const QDateTime currentTime( QDateTime::currentDateTime() );
+ for( int iCell = 0; iCell < usedValues; ++iCell ){
+ KDChartData& cell = myData.cell( 0, iCell );
+ // assign special property set ID if X value is in the future
+ if( cell.isDateTime( 2 ) && cell.dateTimeValue( 2 ) > currentTime )
+ cell.setPropertySet( idProp_FutureValues );
+ }
+
+ \endverbatim
+
+ \note All of the other functions provided by KDChartTableDataBase are
+ either used internally by KD Chart or they are const methods
+ returning some usefull figures like the sum of all values in a row...
+*/
+
+
+void KDChartTableDataBase::setUsedRows( uint _rows ) {
+ _usedRows = _rows;
+ _useUsedRows = true;
+}
+uint KDChartTableDataBase::usedRows() const {
+ return _useUsedRows ? _usedRows : rows();
+}
+void KDChartTableDataBase::setUsedCols( uint _cols ) {
+ _usedCols = _cols;
+ _useUsedCols = true;
+}
+uint KDChartTableDataBase::usedCols() const {
+ return _useUsedCols ? _usedCols : cols();
+}
+
+
+bool KDChartTableDataBase::cellsHaveSeveralCoordinates(
+ QVariant::Type* type2Ref ) const
+{
+ return cellsHaveSeveralCoordinates( 0, UINT_MAX, type2Ref );
+}
+
+
+bool KDChartTableDataBase::cellsHaveSeveralCoordinates(
+ uint row1,
+ uint row2,
+ QVariant::Type* type2Ref ) const
+{
+ // return true if all wanted datasets have at least two coordinates
+ // stored in all of their cells - BUT only if these coordinates are
+ // of equal type for each of the cells
+ // note: We skip cells that are empty, this means having
+ // set neither coordinate #1 nor coordinate #2.
+ bool severalCoordinates = row1 < usedRows();
+ if( severalCoordinates ) {
+ severalCoordinates = false;
+ QVariant::Type testType = QVariant::Invalid;
+ const uint r2 = (UINT_MAX == row2)
+ ? usedRows()
+ : QMIN( row2+1, usedRows() );
+ QVariant value1;
+ QVariant value2;
+ for ( uint row = row1; row < r2; ++row ){
+ for ( uint col = 0; col < usedCols(); ++col ){
+ if( cellCoords( row, col, value1, value2 ) ){
+ if( QVariant::Invalid != value2.type() ){
+ if( (QVariant::Invalid != testType) &&
+ (value2.type() != testType) ){
+ severalCoordinates = false;
+ break;
+ }else{
+ testType = value2.type();
+ if( NULL != type2Ref )
+ *type2Ref = testType;
+ severalCoordinates = true;
+ }
+ }else if( QVariant::Invalid != value1.type() ){
+ severalCoordinates = false;
+ break;
+ }
+ }
+ }
+ }
+ }
+ return severalCoordinates;
+}
+
+
+QVariant::Type KDChartTableDataBase::cellsValueType(
+ uint row1,
+ uint row2,
+ int coordinate ) const
+{
+ QVariant::Type res = QVariant::Invalid;
+ const uint r2 = (UINT_MAX == row2)
+ ? usedRows()
+ : QMIN( row2+1, usedRows() );
+
+ QVariant value;
+ for ( uint row = row1; row < r2; ++row )
+ for ( uint col = 0; col < usedCols(); ++col )
+ if( cellCoord( row, col, value, coordinate ) )
+ if( QVariant::Invalid != value.type() )
+ res = value.type();
+ return res;
+}
+
+
+QVariant::Type KDChartTableDataBase::cellsValueType(
+ int coordinate ) const
+{
+ return cellsValueType( 0, UINT_MAX, coordinate );
+}
+
+
+double KDChartTableDataBase::maxValue( int coordinate ) const
+{
+ double maxValue = 0.0;
+ bool bStart = true;
+ QVariant value;
+ double dVal;
+ for ( uint row = 0; row < usedRows(); row++ ) {
+ for ( uint col = 0; col < usedCols(); col++ ) {
+ if( cellCoord( row, col, value, coordinate ) &&
+ QVariant::Double == value.type() ) {
+ dVal = value.toDouble();
+ if( isNormalDouble( dVal ) ){
+ if ( bStart ) {
+ maxValue = dVal;
+ bStart = false;
+ } else
+ maxValue = QMAX( maxValue, dVal );
+ }
+ }
+ }
+ }
+ return maxValue;
+}
+
+
+
+double KDChartTableDataBase::minValue( int coordinate, bool bOnlyGTZero ) const
+{
+ double minValue = 0.0;
+ bool bStart = true;
+ QVariant value;
+ double dVal;
+ for ( uint row = 0; row < usedRows(); row++ ) {
+ for ( uint col = 0; col < usedCols(); col++ ) {
+ if( cellCoord( row, col, value, coordinate ) &&
+ QVariant::Double == value.type() ) {
+ dVal = value.toDouble();
+ if( !bOnlyGTZero || 0.0 < dVal ){
+ if ( bStart ) {
+ minValue = dVal;
+ bStart = false;
+ }else{
+ minValue = QMIN( minValue, dVal );
+ }
+ }
+ }
+ }
+ }
+ return minValue;
+}
+
+
+QDateTime KDChartTableDataBase::maxDtValue( int coordinate ) const
+{
+ QDateTime maxValue = QDateTime( QDate(1970,1,1) );
+ bool bStart = true;
+ QVariant value;
+ QDateTime dtVal;
+ for ( uint row = 0; row < usedRows(); row++ ) {
+ for ( uint col = 0; col < usedCols(); col++ ) {
+ if( cellCoord( row, col, value, coordinate ) &&
+ QVariant::DateTime == value.type() ) {
+ dtVal = value.toDateTime();
+ if ( bStart ) {
+ maxValue = dtVal;
+ bStart = false;
+ } else
+ maxValue = QMAX(maxValue, dtVal);
+ }
+ }
+ }
+ return maxValue;
+}
+
+
+
+QDateTime KDChartTableDataBase::minDtValue( int coordinate ) const
+{
+ QDateTime minValue = QDateTime( QDate(1970,1,1) );
+ bool bStart = true;
+ QVariant value;
+ QDateTime dtVal;
+ for ( uint row = 0; row < usedRows(); row++ ) {
+ for ( uint col = 0; col < usedCols(); col++ ) {
+ if( cellCoord( row, col, value, coordinate ) &&
+ QVariant::DateTime == value.type() ) {
+ dtVal = value.toDateTime();
+ if ( bStart ) {
+ minValue = dtVal;
+ bStart = false;
+ } else
+ minValue = QMIN(minValue, dtVal);
+ }
+ }
+ }
+ return minValue;
+}
+
+
+double KDChartTableDataBase::maxColSum( int coordinate ) const
+{
+ double maxValue = 0.0;
+ bool bStart = true;
+ for ( uint col = 0; col < usedCols(); col++ ) {
+ double colValue = colSum( col, coordinate );
+ if ( bStart ) {
+ maxValue = colValue;
+ bStart = false;
+ } else
+ maxValue = QMAX( maxValue, colValue );
+ }
+ return maxValue;
+}
+
+
+double KDChartTableDataBase::minColSum( int coordinate ) const
+{
+ double minValue = 0.0;
+ bool bStart = true;
+ for ( uint col = 0; col < usedCols(); col++ ) {
+ double colValue = colSum( col, coordinate );
+ if ( bStart ) {
+ minValue = colValue;
+ bStart = false;
+ } else
+ minValue = QMIN( minValue, colValue );
+ }
+
+ return minValue;
+}
+
+
+double KDChartTableDataBase::maxColSum( uint row, uint row2, int coordinate ) const
+{
+ double maxValue = 0;
+ bool bStart = true;
+ if ( 0 < usedRows() ) {
+ uint a = row;
+ uint z = row2;
+ if ( usedRows() <= a )
+ a = usedRows() - 1;
+ if ( usedRows() <= z )
+ z = usedRows() - 1;
+ for ( uint col = 0; col < usedCols(); col++ ) {
+ double valueValue = 0.0;
+ QVariant value;
+ double dVal;
+ for ( uint row = a; row <= z; row++ ) {
+ if( cellCoord( row, col, value, coordinate ) &&
+ QVariant::Double == value.type() ) {
+ dVal = value.toDouble();
+ if( isNormalDouble( dVal ) )
+ valueValue += dVal;
+ }
+ }
+ if ( bStart ) {
+ maxValue = valueValue;
+ bStart = false;
+ } else
+ maxValue = QMAX( maxValue, valueValue );
+ }
+ }
+ return maxValue;
+}
+
+
+double KDChartTableDataBase::minColSum( uint row, uint row2, int coordinate ) const
+{
+ double minValue = 0;
+ bool bStart = true;
+ if ( 0 < usedRows() ) {
+ uint a = row;
+ uint z = row2;
+ if ( usedRows() <= a )
+ a = usedRows() - 1;
+ if ( usedRows() <= z )
+ z = usedRows() - 1;
+ for ( uint col = 0; col < usedCols(); col++ ) {
+ double valueValue = 0.0;
+ QVariant value;
+ double dVal;
+ for ( uint row = a; row <= z; row++ ) {
+ if( cellCoord( row, col, value, coordinate ) &&
+ QVariant::Double == value.type() ) {
+ dVal = value.toDouble();
+ if( isNormalDouble( dVal ) )
+ valueValue += dVal;
+ }
+ }
+ if ( bStart ) {
+ minValue = valueValue;
+ bStart = false;
+ } else
+ minValue = QMIN( minValue, valueValue );
+ }
+ }
+ return minValue;
+}
+
+
+double KDChartTableDataBase::colSum( uint col, int coordinate ) const
+{
+ double sum = 0.0;
+ QVariant value;
+ double dVal;
+ for ( uint row = 0; row < usedRows(); row++ ) {
+ if( cellCoord( row, col, value, coordinate ) &&
+ QVariant::Double == value.type() ) {
+ dVal = value.toDouble();
+ if( isNormalDouble( dVal ) )
+ sum += dVal;
+ }
+ }
+
+ return sum;
+}
+
+
+double KDChartTableDataBase::colAbsSum( uint col, int coordinate ) const
+{
+ double sum = 0.0;
+ QVariant value;
+ double dVal;
+ for ( uint row = 0; row < usedRows(); row++ ) {
+ if( cellCoord( row, col, value, coordinate ) &&
+ QVariant::Double == value.type() ) {
+ dVal = value.toDouble();
+ if( isNormalDouble( dVal ) )
+ sum += fabs( dVal );
+ }
+ }
+
+ return sum;
+}
+
+
+double KDChartTableDataBase::maxRowSum( int coordinate ) const
+{
+ double maxValue = 0.0;
+ bool bStart = true;
+ for ( uint row = 0; row < usedRows(); row++ ) {
+ double rowValue = rowSum( row, coordinate );
+ if ( bStart ) {
+ maxValue = rowValue;
+ bStart = false;
+ } else
+ maxValue = QMAX( maxValue, rowValue );
+ }
+ return maxValue;
+}
+
+
+double KDChartTableDataBase::minRowSum( int coordinate ) const
+{
+ double minValue = 0.0;
+ bool bStart = true;
+ for ( uint row = 0; row < usedRows(); row++ ) {
+ double rowValue = rowSum( row, coordinate );
+ if ( bStart ) {
+ minValue = rowValue;
+ bStart = false;
+ } else
+ minValue = QMIN( minValue, rowValue );
+ }
+
+ return minValue;
+}
+
+
+double KDChartTableDataBase::rowSum( uint row, int coordinate ) const
+{
+ double sum = 0.0;
+ QVariant value;
+ double dVal;
+ for ( uint col = 0; col < usedCols(); col++ ) {
+ if( cellCoord( row, col, value, coordinate ) &&
+ QVariant::Double == value.type() ) {
+ dVal = value.toDouble();
+ if( isNormalDouble( dVal ) )
+ sum += dVal;
+ }
+ }
+ return sum;
+}
+
+
+double KDChartTableDataBase::rowAbsSum( uint row, int coordinate ) const
+{
+ double sum = 0.0;
+ QVariant value;
+ double dVal;
+ for ( uint col = 0; col < usedCols(); col++ ) {
+ if( cellCoord( row, col, value, coordinate ) &&
+ QVariant::Double == value.type() ) {
+ dVal = value.toDouble();
+ if( isNormalDouble( dVal ) )
+ sum += fabs( dVal );
+ }
+ }
+ return sum;
+}
+
+
+double KDChartTableDataBase::maxInColumn( uint col, int coordinate ) const
+{
+ double maxValue = 0.0;
+ bool bStart = true;
+ QVariant value;
+ double dVal;
+ for ( uint row = 0; row < usedRows(); row++ ) {
+ if( cellCoord( row, col, value, coordinate ) &&
+ QVariant::Double == value.type() ) {
+ dVal = value.toDouble();
+ if( isNormalDouble( dVal ) ){
+ if ( bStart ) {
+ maxValue = dVal;
+ bStart = false;
+ } else
+ maxValue = QMAX( maxValue, dVal );
+ }
+ }
+ }
+
+ return maxValue;
+}
+
+
+double KDChartTableDataBase::minInColumn( uint col, int coordinate ) const
+{
+ double minValue = 0.0;
+ bool bStart = true;
+ QVariant value;
+ double dVal;
+ for ( uint row = 0; row < usedRows(); row++ ) {
+ if( cellCoord( row, col, value, coordinate ) &&
+ QVariant::Double == value.type() ) {
+ dVal = value.toDouble();
+ if( isNormalDouble( dVal ) ){
+ if ( bStart ) {
+ minValue = dVal;
+ bStart = false;
+ } else
+ minValue = QMIN( minValue, dVal );
+ }
+ }
+ }
+
+ return minValue;
+}
+
+
+double KDChartTableDataBase::maxInRow( uint row, int coordinate ) const
+{
+ double maxValue = DBL_MIN;
+ bool bStart = true;
+ QVariant value;
+ double dVal;
+ if ( UINT_MAX > row ) {
+ for ( uint col = 0; col < usedCols(); col++ ) {
+ if( cellCoord( row, col, value, coordinate ) &&
+ QVariant::Double == value.type() ) {
+ dVal = value.toDouble();
+ if( isNormalDouble( dVal ) ){
+ if ( bStart ) {
+ maxValue = dVal;
+ bStart = false;
+ } else
+ maxValue = QMAX( maxValue, dVal );
+ }
+ }
+ }
+ }
+ return maxValue;
+}
+
+
+double KDChartTableDataBase::minInRow( uint row, int coordinate ) const
+{
+ double minValue = DBL_MAX;
+ bool bStart = true;
+ QVariant value;
+ double dVal;
+ if ( UINT_MAX > row ) {
+ for ( uint col = 0; col < usedCols(); col++ ) {
+ if( cellCoord( row, col, value, coordinate ) &&
+ QVariant::Double == value.type() ) {
+ dVal = value.toDouble();
+ if( isNormalDouble( dVal ) ){
+ if ( bStart ) {
+ minValue = dVal;
+ bStart = false;
+ } else
+ minValue = QMIN( minValue, dVal );
+ }
+ }
+ }
+ }
+ return minValue;
+}
+
+
+double KDChartTableDataBase::maxInRows( uint row, uint row2, int coordinate ) const
+{
+ double maxValue = 0.0;
+ bool bStart = true;
+ if ( 0 < usedRows() ) {
+ uint a = row;
+ uint z = row2;
+ // qDebug("KDChartTableDataBase::maxInRows() (1) a: %u z: %u", a, z);
+ if ( usedRows() <= a )
+ a = usedRows() - 1;
+ if ( usedRows() <= z )
+ z = usedRows() - 1;
+ // qDebug("KDChartTableDataBase::maxInRows() (2) a: %u z: %u", a, z);
+ for ( uint row = a; row <= z; ++row ) {
+ QVariant value;
+ double dVal;
+ for ( uint col = 0; col < usedCols(); ++col ) {
+ if( cellCoord( row, col, value, coordinate ) &&
+ QVariant::Double == value.type() ) {
+ dVal = value.toDouble();
+ if( isNormalDouble( dVal ) ){
+ if ( bStart ) {
+ maxValue = dVal;
+ bStart = false;
+ } else
+ maxValue = QMAX( maxValue, dVal );
+ }
+ }
+ }
+ }
+ }
+ return maxValue;
+}
+
+
+double KDChartTableDataBase::minInRows( uint row, uint row2, int coordinate, bool bOnlyGTZero ) const
+{
+ double minValue = 0.0;
+ bool bStart = true;
+ if ( 0 < usedRows() ) {
+ uint a = row;
+ uint z = row2;
+ // qDebug("KDChartTableDataBase::minInRows() (1) a: %u z: %u", a, z);
+ if ( usedRows() <= a )
+ a = usedRows() - 1;
+ if ( usedRows() <= z )
+ z = usedRows() - 1;
+ //qDebug("KDChartTableDataBase::minInRows() (2) a: %u z: %u", a, z);
+ for ( uint row = a; row <= z; ++row ) {
+ QVariant value;
+ double dVal;
+ for ( uint col = 0; col < usedCols(); ++col ) {
+ if( cellCoord( row, col, value, coordinate ) &&
+ QVariant::Double == value.type() ) {
+ dVal = value.toDouble();
+ if( isNormalDouble( dVal ) ){
+ if( !bOnlyGTZero || 0.0 < dVal ){
+ if ( bStart ) {
+ minValue = dVal;
+ bStart = false;
+ }else{
+ minValue = QMIN( minValue, dVal );
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return minValue;
+}
+
+
+QDateTime KDChartTableDataBase::maxDtInRows( uint row, uint row2,
+ int coordinate ) const
+{
+ QDateTime maxValue = QDateTime( QDate(1970,1,1) );
+ bool bStart = true;
+ if ( 0 < usedRows() ) {
+ uint a = row;
+ uint z = row2;
+ if ( usedRows() <= a )
+ a = usedRows() - 1;
+ if ( usedRows() <= z )
+ z = usedRows() - 1;
+ for ( uint row = a; row <= z; ++row ) {
+ QVariant value;
+ QDateTime dtVal;
+ for ( uint col = 0; col < usedCols(); ++col ) {
+ if( cellCoord( row, col, value, coordinate ) &&
+ QVariant::DateTime == value.type() ) {
+ dtVal = value.toDateTime();
+ if ( bStart ) {
+ maxValue = dtVal;
+ bStart = false;
+ } else
+ maxValue = QMAX( maxValue, dtVal );
+ }
+ }
+ }
+ }
+ return maxValue;
+}
+
+
+QDateTime KDChartTableDataBase::minDtInRows( uint row, uint row2,
+ int coordinate ) const
+{
+ QDateTime minValue = QDateTime( QDate(1970,1,1) );
+ bool bStart = true;
+ if ( 0 < usedRows() ) {
+ uint a = row;
+ uint z = row2;
+ if ( usedRows() <= a )
+ a = usedRows() - 1;
+ if ( usedRows() <= z )
+ z = usedRows() - 1;
+ for ( uint row = a; row <= z; ++row ) {
+ QVariant value;
+ QDateTime dtVal;
+ for ( uint col = 0; col < usedCols(); ++col ) {
+ if( cellCoord( row, col, value, coordinate ) &&
+ QVariant::DateTime == value.type() ) {
+ dtVal = value.toDateTime();
+ if ( bStart ) {
+ minValue = dtVal;
+ bStart = false;
+ } else
+ minValue = QMIN( minValue, dtVal );
+ }
+ }
+ }
+ }
+ return minValue;
+}
+
+
+uint KDChartTableDataBase::lastPositiveCellInColumn( uint col, int coordinate ) const
+{
+ uint ret = UINT_MAX;
+ QVariant value;
+ double dVal;
+ for ( uint row = 0; row < usedRows(); row++ ) {
+ if( cellCoord( row, col, value, coordinate ) &&
+ QVariant::Double == value.type() ) {
+ dVal = value.toDouble();
+ if( isNormalDouble( dVal ) && 0 < dVal )
+ ret = row;
+ }
+ }
+ return ret;
+}
+
+
+void KDChartTableDataBase::importFromQTable( QTable* table )
+{
+ if( table->numRows() > (int)rows() ||
+ table->numCols() > (int)cols() )
+ expand( table->numRows(), table->numCols() );
+ setUsedRows( table->numRows() );
+ setUsedCols( table->numCols() );
+ for( int row = 0; row < table->numRows(); row++ )
+ for( int col = 0; col < table->numCols(); col++ ) {
+ QString cellContents = table->text( row, col );
+ if( !cellContents.isEmpty() ) {
+ // First try to parse a double
+ bool ok = false;
+ double value = cellContents.toDouble( &ok );
+ if( ok ) {
+ // there was a double
+ setCell( row, col, value );
+ } else {
+ // no double, but at least a string
+ setCell( row, col, cellContents );
+ }
+ } // don't do anything if no contents
+ }
+ setSorted( false );
+}
+
+
+void KDChartTableDataBase::setSorted(bool sorted)
+{
+ _sorted = sorted;
+}
+bool KDChartTableDataBase::sorted() const
+{
+ return _sorted;
+}
+
+#include "KDChartTableBase.moc"
diff --git a/libkdchart/KDChartTableBase.h b/libkdchart/KDChartTableBase.h
new file mode 100644
index 0000000..5031449
--- /dev/null
+++ b/libkdchart/KDChartTableBase.h
@@ -0,0 +1,478 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+*/
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTTABLEINTERFACE_H__
+#define __KDCHARTTABLEINTERFACE_H__
+
+
+class QTable;
+
+#include <qvariant.h>
+#include <qobject.h>
+#include <qdatetime.h>
+
+#include <kdchart_export.h>
+
+#if defined( SUN7 ) || defined (_SGIAPI)
+ #include <float.h>
+ #include <limits.h>
+#else
+ #include <cfloat>
+ #include <climits>
+#endif
+
+
+/**
+ Use special value KDCHART_POS_INFINITE to indicate positive infinite values.
+
+ If your own table class (derived from KDChartTableDataBase) does
+ not store your positive infinite values as KDCHART_POS_INFINITE
+ please make sure to reimplement \sa isPosInfinite() accordingly.
+
+ \sa isPosInfinite, isNegInfinite
+*/
+#define KDCHART_POS_INFINITE DBL_MAX
+
+/**
+ Use special value KDCHART_NEG_INFINITE to indicate negative infinite values.
+
+ If your own table class (derived from KDChartTableDataBase) does
+ not store your negative infinite values as KDCHART_NEG_INFINITE
+ please make sure to reimplement \sa isNegInfinite() accordingly.
+
+ \sa isNegInfinite, isPosInfinite
+*/
+#define KDCHART_NEG_INFINITE -DBL_MAX
+
+
+/**
+ \file KDChartTableBase.h
+
+ \brief Provides a table class holding all data values
+ that are to be used in a chart.
+
+ By subclassing KDChartTableDataBase you may provide your own
+ methods to access data stored somewhere else instead of
+ using the setCell function to move them into KD Chart's cells.
+
+ \note See the files in doc/tutorial/step07/ for a sample implementation you might want to use as starting-point for your own data handling class.
+*/
+
+///KD Chart's build-in table data for an easy way of storing data values.
+class KDCHART_EXPORT KDChartTableDataBase :public QObject
+{
+ Q_OBJECT
+public:
+ /**
+ Default constructor.
+
+ Creates an empty table and sets the sorted flag to false.
+ */
+ KDChartTableDataBase() :
+ QObject( 0 ),
+ _sorted(false),
+ _useUsedRows(false),
+ _useUsedCols(false) {}
+ /**
+ Default copy constructor.
+
+ Just initializes the QObject part of this class and copies the sorted flag.
+ */
+ KDChartTableDataBase( const KDChartTableDataBase& other ) :QObject(0)
+ {
+ _sorted = other._sorted;
+ _useUsedRows = other._useUsedRows;
+ _useUsedCols = other._useUsedCols;
+ _usedRows = other._usedRows;
+ _usedCols = other._usedCols;
+ }
+ /**
+ Default destructor.
+
+ Does nothing, only defined to have it virtual.
+ */
+ virtual ~KDChartTableDataBase() {}
+
+public slots:
+ /**
+ Returns the number of rows in the table.
+
+ \note This pure-virtual function has to be implemented by
+ each class derived from KDChartTableDataBase.
+
+ \returns the number of rows in the table.
+
+ \sa setRows, usedRows, cols
+ */
+ virtual uint rows() const = 0;
+ /**
+ Returns the number of cols in the table.
+
+ \note This pure-virtual function has to be implemented by
+ each class derived from KDChartTableDataBase.
+
+ \returns the number of cols in the table.
+
+ \sa setCols, usedCols, rows
+ */
+ virtual uint cols() const = 0;
+
+ /**
+ Stores data in a cell.
+
+ \note This pure-virtual function has to be implemented by
+ each class derived from KDChartTableDataBase.
+
+ \param _row the row number of the cell to store the data object into.
+ \param _col the column number of the cell to store the data object into.
+ \param _value1 the first value to be stored, normally the Y value, possible types: int, double, QString
+ QString might be used in case you want to use this cell's content for axis label
+ \param _value2 the second value to be stored, normally the X value (if any), possible types: int, double, QDateTime
+
+ \sa cellCoords, cellContent, setProp
+ */
+ virtual void setCell( uint _row, uint _col,
+ const QVariant& _value1,
+ const QVariant& _value2=QVariant() ) = 0;
+ /**
+ Specifies the property set ID for a cell.
+
+ \note This pure-virtual function has to be implemented by
+ each class derived from KDChartTableDataBase.
+
+ \param _row the row number of the cell.
+ \param _col the column number of the cell.
+ \param _propSet the property set ID to be stored for this data cell, defaults to zero for normal data.
+
+ \sa cellProp, cellContent, setCell
+ */
+ virtual void setProp( uint _row, uint _col,
+ int _propSet=0 ) = 0;
+
+ /**
+ Returns one of the coordinate data value(s) stored in a cell.
+
+ \note This pure-virtual function has to be implemented by
+ each class derived from KDChartTableDataBase.
+
+ \param _row the row number of the cell to be retrieved.
+ \param _col the column number of the cell to be retrieved.
+ \param _value the coordinate variable to be filled by this method.
+ \param coordinate the number of the coordinate to be retrieved, normally
+ 1 is the Y value and 2 is the X value.
+
+ \returns TRUE if the row and col are addressing a cell in the table.
+
+ \sa cellCoords, cellProp, cellContent, cellVal, setCell, setProp
+ */
+ virtual bool cellCoord( uint _row, uint _col,
+ QVariant& _value,
+ int coordinate=1 ) const = 0;
+
+ /**
+ Returns one of the coordinate data value(s) stored in a cell.
+
+ This convenience method calls the bool cellCoord() function and returns
+ the result if it returned successfully - otherwise it returns an invalid QVariant.
+
+ \note If you \em know that a cell is containing valid double data
+ you may quickly access them like this:
+\verbatim const double yVal = data.cellVal( r, c ).toDouble();
+const double xVal = data.cellVal( r, c, 2 ).toDouble(); \endverbatim
+
+ \param _row the row number of the cell to be retrieved.
+ \param _col the column number of the cell to be retrieved.
+ \param coordinate the number of the coordinate to be retrieved, normally
+ 1 is the Y value and 2 is the X value.
+
+ \returns cell contens if the row and col are addressing a cell in the
+ table, otherwise an invalid QVariant is returned.
+
+ \sa cellCoords, cellProp, cellContent, setCell, setProp
+ */
+ virtual QVariant cellVal( uint _row, uint _col, int coordinate=1 ) const {
+ QVariant value;
+ if( cellCoord( _row, _col, value, coordinate ) )
+ return value;
+ else
+ return QVariant();
+ }
+
+ /**
+ Returns the property set ID stored in a cell.
+
+ \note This pure-virtual function has to be implemented by
+ each class derived from KDChartTableDataBase.
+
+ \param _prop the property set ID of the cell to be retrieved.
+
+ \returns TRUE if the row and col are addressing a cell in the table.
+
+ \sa cellCoord, cellCoords, cellContent, setCell, setProp
+ */
+ virtual bool cellProp( uint _row, uint _col,
+ int& _prop ) const = 0;
+
+ /**
+ Increases the number of rows (and/or columns, resp.) stored in this table.
+
+ \note This pure-virtual function has to be implemented by
+ each class derived from KDChartTableDataBase.
+
+ \note The old content of the table must be preserved (e.g. by copying
+ the data into the cells of the new table).
+
+ \param _row the new number of rows.
+ \param _col the new number of columns.
+
+ \sa cell
+ */
+ virtual void expand( uint _rows, uint _cols ) = 0;
+
+
+
+ // E N D O F pure-virtual function declarations
+
+
+
+ /**
+ \note To improve runtime speed this virtual function
+ may be reimplemented by classes derived from KDChartTableDataBase.
+
+ \sa cellCoords, cellProp, setCell, setProp
+ */
+ virtual bool cellContent( uint _row, uint _col,
+ QVariant& _value1,
+ QVariant& _value2,
+ int& _prop ) const
+ {
+ return cellCoords(_row,_col, _value1,_value2) &&
+ cellProp(_row,_col, _prop);
+ }
+ /**
+ \note To improve runtime speed this virtual function
+ may be reimplemented by classes derived from KDChartTableDataBase.
+
+ \sa cellCoord, cellProp, cellContent, setCell, setProp
+ */
+ virtual bool cellCoords( uint _row, uint _col,
+ QVariant& _value1,
+ QVariant& _value2 ) const
+ {
+ return cellCoord(_row,_col, _value1, 1) &&
+ cellCoord(_row,_col, _value2, 2);
+ }
+
+
+ /**
+ Sets the number of rows in the table that actually contain data.
+
+ \note You might want to re-implement this function in derived classes,
+ the default implementation just stores the new number of used rows.
+
+ \param _rows the number of rows in the table that actually contain data.
+
+ \sa usedRows, rows, cols
+ */
+ virtual void setUsedRows( uint _rows );
+ /**
+ Returns the number of rows in the table that actually contain data.
+
+ \returns the number of rows in the table that actually contain data.
+
+ \sa setUsedRows, rows, cols
+ */
+ virtual uint usedRows() const;
+
+ /**
+ Sets the number of cols in the table that actually contain data.
+
+ \note You might want to re-implement this function in derived classes,
+ the default implementation just stores the new number of used cols.
+
+ \param _cols the number of cols in the table that actually contain data.
+
+ \sa usedCols, rows, cols
+ */
+ virtual void setUsedCols( uint _cols );
+ /**
+ Returns the number of cols in the table that actually contain data.
+
+ \returns the number of cols in the table that actually contain data.
+
+ \sa setUsedCols, rows, cols
+ */
+ virtual uint usedCols() const;
+
+
+ /**
+ Returns the number of cols the table has been scrolled by.
+
+ Default implementation of this always returns zero, so make sure
+ to return the appropriate value if your class derived from KDChartTableDataBase
+ is supporting internal data scrolling technics.
+
+ See the KD Chart Programmers Manual for details described in the
+ Data Scrolling chapter.
+
+ \returns the number of cols the table has been scrolled by.
+
+ \sa cols, rows
+ */
+ virtual uint colsScrolledBy() const
+ {
+ return 0;
+ }
+
+
+ /**
+ Specified whether the table is sorted.
+
+ \sa sorted
+ */
+ virtual void setSorted(bool sorted);
+ /**
+ Returns whether the table is sorted.
+
+ \sa setSorted
+ */
+ virtual bool sorted() const;
+
+ /**
+ Returns true if the given value represents a positive infinite value.
+
+ \note This virtual function may be implemented by
+ classes derived from KDChartTableDataBase.
+ This should be done if your data are not stored as
+ special value KDCHART_POS_INFINITE
+ to indicate positive infinite values
+
+ \returns TRUE if the value given is a positive infinite value.
+ */
+ virtual bool isPosInfinite( double value ) const
+ {
+ return value == KDCHART_POS_INFINITE;
+ }
+
+ /**
+ Returns true if the given value represents a negative infinite value.
+
+ \note This virtual function may be implemented by
+ classes derived from KDChartTableDataBase.
+ This should be done if your data are not stored as
+ special value KDCHART_NEG_INFINITE
+ to indicate negative infinite values
+
+ \returns TRUE if the value given is a negative infinite value.
+ */
+ virtual bool isNegInfinite( double value ) const
+ {
+ return value == KDCHART_NEG_INFINITE;
+ }
+
+ /**
+ Returns true if the given value represents a normal double value.
+
+ Normal double values are defined as values that are neither positive infinite
+ nor negative infinite. This method is provided to let derived classed use
+ their own way to determine when a double value is to be threated as normal.
+
+ \note To improve runtime speed this virtual function
+ may be reimplemented by classes derived from KDChartTableDataBase.
+
+ \returns TRUE if the value given is neither positive infinite nor negativr infinite.
+ */
+ virtual bool isNormalDouble( double value ) const
+ {
+ return !isPosInfinite( value ) && !isNegInfinite( value );
+ }
+
+ /**
+ Returns true if the given QVariant value represents a normal double value.
+
+ This method tests if \c value has type QVariant::Double: if no, it returns false;
+ if yes, it sets \c dVal accordingly and calls the virtual method
+ isNormalDouble( double value ).
+
+ \param value The QVariant value to be tested and converted.
+ \param dVal Points to the double variable to be filled with the converted value.
+
+ \returns TRUE if the value given is neither positive infinite nor negative
+ infinite, \c value is set to the converted value if the type of \c value
+ is QVariant::Double, otherwise it is not modified.
+ */
+ bool isNormalDouble( QVariant value, double& dVal ) const
+ {
+ if( QVariant::Double != value.type() )
+ return false;
+ dVal = value.toDouble();
+ return isNormalDouble( dVal );
+ }
+
+ virtual void importFromQTable( QTable* table );
+
+ virtual double maxValue( int coordinate=1 ) const;
+ virtual double minValue( int coordinate=1, bool bOnlyGTZero=false ) const;
+
+ virtual QDateTime maxDtValue( int coordinate=1 ) const;
+ virtual QDateTime minDtValue( int coordinate=1 ) const;
+
+ virtual double maxColSum( int coordinate=1 ) const;
+ virtual double minColSum( int coordinate=1 ) const;
+ virtual double maxColSum( uint row, uint row2, int coordinate=1 ) const;
+ virtual double minColSum( uint row, uint row2, int coordinate=1 ) const;
+ virtual double colSum( uint col, int coordinate=1 ) const;
+ virtual double colAbsSum( uint col, int coordinate=1 ) const;
+ virtual double maxRowSum( int coordinate=1 ) const;
+ virtual double minRowSum( int coordinate=1 ) const;
+ virtual double rowSum( uint row, int coordinate=1 ) const;
+ virtual double rowAbsSum( uint row, int coordinate=1 ) const;
+ virtual double maxInColumn( uint col, int coordinate=1 ) const;
+ virtual double minInColumn( uint col, int coordinate=1 ) const;
+ virtual double maxInRow( uint row, int coordinate=1 ) const;
+ virtual double minInRow( uint row, int coordinate=1 ) const;
+ virtual double maxInRows( uint row, uint row2, int coordinate=1 ) const;
+ virtual double minInRows( uint row, uint row2, int coordinate=1, bool bOnlyGTZero=false ) const;
+ virtual QDateTime maxDtInRows( uint row, uint row2, int coordinate=1 ) const;
+ virtual QDateTime minDtInRows( uint row, uint row2, int coordinate=1 ) const;
+ virtual uint lastPositiveCellInColumn( uint col, int coordinate=1 ) const;
+ virtual bool cellsHaveSeveralCoordinates(QVariant::Type* type2Ref) const;
+ virtual bool cellsHaveSeveralCoordinates(uint row1=0, uint row2=UINT_MAX,
+ QVariant::Type* type2Ref=NULL) const;
+ virtual QVariant::Type cellsValueType( uint row1, uint row2=UINT_MAX,
+ int coordinate=1 ) const;
+ virtual QVariant::Type cellsValueType( int coordinate=1 ) const;
+private:
+ bool _sorted;
+protected:
+ bool _useUsedRows, _useUsedCols;
+private:
+ uint _usedRows, _usedCols;
+};
+
+#endif
diff --git a/libkdchart/KDChartTableDataWrapper.cpp b/libkdchart/KDChartTableDataWrapper.cpp
new file mode 100644
index 0000000..6cae581
--- /dev/null
+++ b/libkdchart/KDChartTableDataWrapper.cpp
@@ -0,0 +1,36 @@
+#include "KDChartTableDataWrapper.h"
+
+KDChartTableDataWrapper::KDChartTableDataWrapper( KDChartTableData* data ) :QObject(0), _data(data)
+{
+}
+/*
+KDChartData* KDChartTableDataWrapper::cell( uint row, uint col )
+{
+ KDChartData& item = _data->cell( row, col );
+ return &item;
+}
+
+void KDChartTableDataWrapper::setCell( uint _row, uint _col, double _element )
+{
+ // Without this, the user has to wrap the element in a KDChartData
+ // In C++ this is handled bu default constructors.
+ _data->setCell( _row, _col, _element );
+
+}
+
+void KDChartTableDataWrapper::setCell( uint _row, uint _col, QString _element )
+{
+ // Without this, the user has to wrap the element in a KDChartData
+ // In C++ this is handled bu default constructors.
+ _data->setCell( _row, _col, _element );
+}
+
+void KDChartTableDataWrapper::setCell( uint _row, uint _col, const KDChartData& _element )
+{
+ // When overriding setCell above, I also had to override this one. I believe that must be due to a bug in QSA
+ _data->setCell( _row, _col, _element );
+}
+
+*/
+
+#include "KDChartTableDataWrapper.moc"
diff --git a/libkdchart/KDChartTableDataWrapper.h b/libkdchart/KDChartTableDataWrapper.h
new file mode 100644
index 0000000..90b557d
--- /dev/null
+++ b/libkdchart/KDChartTableDataWrapper.h
@@ -0,0 +1,29 @@
+#ifndef KDCHARTTABLEDATAWRAPPER_H
+#define KDCHARTTABLEDATAWRAPPER_H
+#include <qobject.h>
+#include <KDChartTable.h>
+class KDChartData;
+
+class KDChartTableDataWrapper :public QObject
+{
+ Q_OBJECT
+public:
+ KDChartTableDataWrapper( KDChartTableData* );
+public slots:
+/*
+ QVariant cell( uint _row, uint _col );
+ void setCell( uint _row, uint _col,
+ const QVariant& _value1,
+ const QVariant& _value2=QVariant() );
+ void setCell( uint _row, uint _col, double _element );
+
+ // PENDING(blackie) This one do not work, due to QSA bug regarding function overloading.
+ void setCell( uint _row, uint _col, QString _element );
+*/
+private:
+ KDChartTableData* _data;
+};
+
+
+#endif /* KDCHARTTABLEDATAWRAPPER_H */
+
diff --git a/libkdchart/KDChartTextPiece.cpp b/libkdchart/KDChartTextPiece.cpp
new file mode 100644
index 0000000..2b451c2
--- /dev/null
+++ b/libkdchart/KDChartTextPiece.cpp
@@ -0,0 +1,292 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#include "KDChartTextPiece.h"
+
+#include <qstylesheet.h>
+#include <qsimplerichtext.h>
+#include <qfontmetrics.h>
+#include <qpainter.h>
+#include <qapplication.h>
+#include <qrect.h>
+
+KDChartTextPiece::KDChartTextPiece()
+ :QObject(0)
+{
+ _isRichText = false;
+ _richText = 0;
+
+ _font = QApplication::font();
+ // These three are needed for both
+ _metrics = new QFontMetrics( _font );
+ _dirtyMetrics = true;
+ _text = QString("");
+}
+
+
+KDChartTextPiece::KDChartTextPiece( const QString& text, const QFont& font )
+ :QObject(0)
+{
+ if( QStyleSheet::mightBeRichText( text ) ) {
+ _isRichText = true;
+ _richText = new QSimpleRichText( text, font );
+ _richText->adjustSize();
+ } else {
+ _isRichText = false;
+ _richText = 0;
+ }
+
+ // These three are needed for both
+ _metrics = new QFontMetrics( font );
+ _dirtyMetrics = true;
+ _text = text;
+ _font = font;
+}
+
+
+KDChartTextPiece::KDChartTextPiece( QPainter *p, const QString& text, const QFont& font )
+ :QObject(0)
+{
+
+ if( QStyleSheet::mightBeRichText( text ) ) {
+ _isRichText = true;
+ _richText = new QSimpleRichText( text, font );
+ //qDebug( "richtext width %s", QString::number(_richText->width()).latin1());
+ //qDebug( "richtext height %s", QString::number(_richText->height()).latin1());
+ _richText->adjustSize();
+ //qDebug( "richtext width %s", QString::number(_richText->width()).latin1());
+ //qDebug( "richtext height %s", QString::number(_richText->height()).latin1());
+
+ } else {
+ _isRichText = false;
+ _richText = 0;
+ }
+
+ // These three are needed for both
+ _dirtyMetrics = (p == 0);
+ if( _dirtyMetrics ) {
+ _metrics = new QFontMetrics( font );
+ //qDebug("dirty metrics text: %s", text.latin1());
+ }
+ else{
+ p->save();
+ p->setFont( font );
+ _metrics = new QFontMetrics( p->fontMetrics() );
+ //qDebug ( "drawing metrics text: %s", text.latin1() );
+ //p->drawRect( _metrics->boundingRect( text) );
+ //p->drawText( _metrics->boundingRect(text).bottomRight(), text);
+ p->restore();
+ }
+ _text = text;
+ _font = font;
+}
+
+
+void KDChartTextPiece::deepCopy( const KDChartTextPiece* source )
+{
+ if( !source || this == source )
+ return;
+ if( _richText )
+ delete _richText;
+ _isRichText = source->_isRichText;
+ if( source->_richText ) {
+ _richText = new QSimpleRichText( source->_text, source->_font );
+ _richText->adjustSize();
+ }
+ else
+ _richText = 0;
+
+ // used for both
+ if( _metrics )
+ delete _metrics;
+ _metrics = new QFontMetrics( *source->_metrics );
+ _dirtyMetrics = source->_dirtyMetrics;
+ _text = source->_text;
+ _font = source->_font;
+}
+
+const KDChartTextPiece* KDChartTextPiece::clone() const
+{
+ KDChartTextPiece* newPiece = new KDChartTextPiece();
+ newPiece->deepCopy( this );
+ return newPiece;
+}
+
+
+KDChartTextPiece::~KDChartTextPiece()
+{
+ if( _richText )
+ delete _richText;
+ if( _metrics )
+ delete _metrics;
+}
+
+
+int KDChartTextPiece::width() const
+{
+ if( _isRichText )
+ return _richText->widthUsed();
+ else
+ return _metrics->width( _text );
+}
+
+
+int KDChartTextPiece::height() const
+{
+
+ if( _isRichText ) {
+ //qDebug ("_richText height %s", QString::number(_richText->height()).latin1());
+ return _richText->height();
+ }
+ else {
+
+ //qDebug ("_metrics height %s", QString::number(_metrics->height()).latin1());
+ return _metrics->height();
+ }
+}
+
+
+int KDChartTextPiece::fontLeading() const
+{
+ return _metrics->leading();
+}
+
+QRect KDChartTextPiece::rect( QPainter *p, const QRect& clipRect) const
+{
+ QRect rect( clipRect );
+ QFont font( _font );
+
+ if( _isRichText ) {
+
+ // Pending Michel make sure the fonts are not too large
+ if ( _richText->height() > clipRect.height() || _richText->width() > clipRect.width() )
+ font.setPixelSize( QMIN( (int)clipRect.width(),(int)clipRect.height() ) );
+
+ _richText->setDefaultFont( font );
+ _richText->setWidth( p, clipRect.width() );
+ rect.setWidth( _richText->width() );
+ rect.setHeight( _richText->height() );
+ } else
+ rect = clipRect;
+
+ return rect;
+}
+
+void KDChartTextPiece::draw( QPainter *p, int x, int y,
+ const QRect& clipRect,
+ const QColor& color,
+ const QBrush* paper ) const
+{
+
+ if( _isRichText ) {
+
+ QColorGroup cg;
+ //calculate the text area before drawing
+ QRect txtArea = rect( p,clipRect);
+ cg.setColor( QColorGroup::Text, color );
+ _richText->draw( p, txtArea.x(), txtArea.y(),txtArea , cg, paper );
+ } else {
+ p->save();
+ p->setFont( _font );
+ if( paper )
+ p->setBrush( *paper );
+ p->setPen( color );
+ //dont clip to avoid truncated text
+ //p->setClipRect( txtArea );
+ if( _dirtyMetrics ){
+ if( _metrics )
+ delete _metrics;
+ KDChartTextPiece* meNotConst = const_cast<KDChartTextPiece*>(this);
+ //KDChartTextPiece* meNotConst(const_cast<KDChartTextPiece*>(this));
+ meNotConst->_metrics = new QFontMetrics( p->fontMetrics() );
+ meNotConst->_dirtyMetrics = false;
+ }
+
+ p->drawText( x, y + _metrics->ascent(), _text );
+ p->restore();
+ }
+}
+
+
+void KDChartTextPiece::draw( QPainter *p, int x, int y,
+ const QRegion& clipRegion,
+ const QColor& color,
+ const QBrush* paper ) const
+{
+ if( _isRichText ) {
+ QColorGroup cg;
+ cg.setColor( QColorGroup::Text, color );
+ _richText->setDefaultFont( _font );
+ _richText->setWidth( p, clipRegion.boundingRect().width() );
+ _richText->draw( p, x, y, clipRegion, cg, paper );
+ } else {
+ p->save();
+ p->setFont( _font );
+ if( paper )
+ p->setBrush( *paper );
+ p->setPen( color );
+ p->setClipRegion( clipRegion );
+
+ if( _dirtyMetrics ){
+ if( _metrics )
+ delete _metrics;
+
+ // this line does not compile with MSVC++:
+ // KDChartTextPiece* meNotConst( const_cast<KDChartTextPiece*>(this) );
+ KDChartTextPiece* meNotConst = const_cast<KDChartTextPiece*>(this);
+
+ meNotConst->_metrics = new QFontMetrics( p->fontMetrics() );
+ meNotConst->_dirtyMetrics = false;
+ }
+
+ p->drawText( x, y + _metrics->ascent(), _text );
+ p->restore();
+ }
+}
+
+
+QString KDChartTextPiece::text() const
+{
+ return _text;
+}
+
+
+QFont KDChartTextPiece::font() const
+{
+ return _font;
+}
+
+
+bool KDChartTextPiece::isRichText() const
+{
+ return _isRichText;
+}
+
+
+
+#include "KDChartTextPiece.moc"
diff --git a/libkdchart/KDChartTextPiece.h b/libkdchart/KDChartTextPiece.h
new file mode 100644
index 0000000..16d5a1b
--- /dev/null
+++ b/libkdchart/KDChartTextPiece.h
@@ -0,0 +1,101 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTTEXTPIECE_H__
+#define __KDCHARTTEXTPIECE_H__
+
+#include <qstring.h>
+#include <qfont.h>
+#include <qregion.h>
+#include <qpalette.h>
+#include <qobject.h>
+#include <kdchart_export.h>
+
+class QBrush;
+class QPainter;
+class QSimpleRichText;
+class QFontMetrics;
+
+class KDCHART_EXPORT KDChartTextPiece :public QObject
+{
+ Q_OBJECT
+
+ public:
+ KDChartTextPiece();
+ KDChartTextPiece( const QString& text, const QFont& font );
+ KDChartTextPiece( QPainter* painter, const QString& text, const QFont& font );
+ virtual ~KDChartTextPiece();
+ /**
+ Copy the settings of text piece \c source into this box.
+
+ \note Use this method instead of using the assignment operator.
+
+ \sa clone
+ */
+ void deepCopy( const KDChartTextPiece* source );
+
+
+ /**
+ Create a new text piece on the heap, copy the settings stored by
+ this text piece into the newly created text piece and return
+ the pointer to the new text piece.
+
+ \note Use this method instead of using the copy constructor.
+
+ \sa deepCopy
+ */
+ const KDChartTextPiece* clone() const;
+
+ private:
+ KDChartTextPiece( const KDChartTextPiece& ) : QObject(0) {}
+
+ public slots:
+ virtual int width() const;
+ virtual int height() const;
+ virtual int fontLeading() const;
+ virtual QRect rect( QPainter *p, const QRect& clipRect) const;
+ virtual void draw( QPainter *p, int x, int y, const QRect& clipRect,
+ const QColor& color, const QBrush* paper = 0 ) const;
+ virtual void draw( QPainter *p, int x, int y, const QRegion& clipRegion,
+ const QColor& color, const QBrush* paper = 0 ) const;
+
+ QString text() const;
+ QFont font() const;
+ bool isRichText() const;
+
+
+ protected:
+ bool _isRichText;
+ QSimpleRichText* _richText; // used when _isRichText == true
+ QString _text; // used when _isRichText == false
+ QFont _font; // used when _isRichText == false
+ QFontMetrics* _metrics;
+ bool _dirtyMetrics;
+};
+
+#endif
diff --git a/libkdchart/KDChartUnknownTypeException.h b/libkdchart/KDChartUnknownTypeException.h
new file mode 100644
index 0000000..8f36a76
--- /dev/null
+++ b/libkdchart/KDChartUnknownTypeException.h
@@ -0,0 +1,60 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTUNKNOWNTYPEEXCEPTION_H__
+#define __KDCHARTUNKNOWNTYPEEXCEPTION_H__
+
+#ifdef USE_EXCEPTIONS
+
+#include <qstring.h>
+
+#include "KDChartGlobal.h"
+
+/**
+ This exception is thrown when it is attempted to create a chart of
+ non-registered user-defined type.
+ */
+class KDCHART_EXPORT KDChartUnknownTypeException
+{
+ public:
+ KDChartUnknownTypeException( const QString& type ) :
+ _type( type )
+ {}
+
+ QString type() const
+ {
+ return _type;
+ }
+
+ private:
+ QString _type;
+};
+
+#endif
+
+#endif
diff --git a/libkdchart/KDChartVectorSeries.cpp b/libkdchart/KDChartVectorSeries.cpp
new file mode 100644
index 0000000..79b4374
--- /dev/null
+++ b/libkdchart/KDChartVectorSeries.cpp
@@ -0,0 +1,126 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+
+#include "KDChartVectorSeries.h"
+#include "KDChartSeriesCollection.h"
+
+
+KDChartVectorSeries::~KDChartVectorSeries()
+{
+}
+
+
+
+uint KDChartVectorSeries::rows() const
+{
+ return size();
+}
+
+const KDChartData& KDChartVectorSeries::cell( uint row ) const
+{
+ Q_ASSERT( row < size() );
+ // make it compile on windows using qt232
+ return this->at(row);
+}
+
+void KDChartVectorSeries::setCell( uint row, const KDChartData& element)
+{
+ Q_ASSERT( row < size() );
+ // make it compile on windows using qt232
+ this->at(row) = element;
+}
+
+void KDChartVectorSeries::expand( uint rows )
+{
+ resize(rows);
+}
+
+
+// we return !ok if its on the infinite axis
+double KDChartVectorSeries::maxValue( int coordinate, bool &ok ) const
+{
+ double maxValue = 0.0;
+ bool bStart = true;
+
+#if COMPAT_QT_VERSION >= 0x030000
+ KDChartVectorSeries::const_iterator i;
+#else
+ KDChartVectorSeries::ConstIterator i;
+#endif
+
+ for ( i = begin(); i != end(); i ++ )
+ {
+ const KDChartData& d = *i;
+ if ( d.isDouble( coordinate ) )
+ {
+ if ( bStart )
+ {
+ maxValue = d.doubleValue( coordinate );
+ bStart = false;
+ }
+ else
+ maxValue = QMAX( maxValue, d.doubleValue( coordinate ) );
+ }
+ }
+
+ ok = !bStart;
+ return maxValue;
+}
+
+
+
+double KDChartVectorSeries::minValue( int coordinate, bool &ok ) const
+{
+ double minValue = 0.0;
+ bool bStart = true;
+
+#if COMPAT_QT_VERSION >= 0x030000
+ KDChartVectorSeries::const_iterator i;
+#else
+ KDChartVectorSeries::ConstIterator i;
+#endif
+
+ for ( i = begin(); i != end(); i ++ )
+ {
+ const KDChartData& d = *i;
+ if ( d.isDouble( coordinate ) )
+ {
+ if ( bStart )
+ {
+ minValue = d.doubleValue( coordinate );
+ bStart = false;
+ }
+ else
+ minValue = QMIN( minValue, d.doubleValue( coordinate ) );
+ }
+ }
+
+ ok = !bStart;
+ return minValue;
+}
diff --git a/libkdchart/KDChartVectorSeries.h b/libkdchart/KDChartVectorSeries.h
new file mode 100644
index 0000000..6e6f72e
--- /dev/null
+++ b/libkdchart/KDChartVectorSeries.h
@@ -0,0 +1,71 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTVECTORSERIES_H__
+#define __KDCHARTVECTORSERIES_H__
+
+// A single data series abstracted.
+// Is included in a DataSeriesBag.
+// Will be a base class for other series objects, such as DataVectorSeries,
+// and my DataQuerySeries.
+//
+// Requirements:
+// - Implement a QValueVector interface
+
+#include "KDChartBaseSeries.h"
+#if COMPAT_QT_VERSION >= 0x030000
+#include <qvaluevector.h>
+#else
+#include <qarray.h>
+#endif
+class KDChartSeriesCollection;
+
+
+
+class KDCHART_EXPORT KDChartVectorSeries : public KDChartBaseSeries,
+#if COMPAT_QT_VERSION >= 0x030000
+ public QValueVector<KDChartData>
+#else
+ public QArray<KDChartData>
+#endif
+{
+ public:
+ virtual ~KDChartVectorSeries();
+
+ virtual uint rows() const;
+ virtual const KDChartData& cell( uint row ) const;
+ virtual void setCell( uint row, const KDChartData& element);
+ virtual void expand( uint rows );
+
+ // methods modelled on the TableBase methods, but these
+ // inherit from BaseSeries.
+ virtual double maxValue( int coordinate, bool &ok ) const;
+ virtual double minValue( int coordinate, bool &ok ) const;
+};
+
+#endif
diff --git a/libkdchart/KDChartVectorTable.cpp b/libkdchart/KDChartVectorTable.cpp
new file mode 100644
index 0000000..40e5c5b
--- /dev/null
+++ b/libkdchart/KDChartVectorTable.cpp
@@ -0,0 +1,33 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+*/
+
+/****************************************************************************
+ ** Copyright (C) 2006 Inge Wallin. All rights reserved.
+ **
+ ** This file is an addition to the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ **********************************************************************/
+
+
+#include "KDChartVectorTable.moc"
+
+#if 0 // Already defined in the .h file
+KDChartVectorTableData::~KDChartVectorTableData()
+{
+ if ( sh->deref() )
+ delete sh;
+}
+#endif
diff --git a/libkdchart/KDChartVectorTable.h b/libkdchart/KDChartVectorTable.h
new file mode 100644
index 0000000..b31b081
--- /dev/null
+++ b/libkdchart/KDChartVectorTable.h
@@ -0,0 +1,319 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+*/
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTVECTORTABLE_H__
+#define __KDCHARTVECTORTABLE_H__
+
+#include <qvaluevector.h>
+#include <qshared.h>
+#include <qtable.h>
+
+#include <KDChartDataIntern.h>
+#include <KDChartTableBase.h>
+
+class KDCHART_EXPORT KDChartVectorTablePrivate : public QShared
+{
+public:
+ KDChartVectorTablePrivate() : QShared() {
+ row_count = 0;
+ col_count = 0;
+ }
+
+ KDChartVectorTablePrivate( uint _rows, uint _cols ) : QShared() {
+ matrix.resize( _rows * _cols, KDChartData() );
+ col_count = _cols;
+ row_count = _rows;
+ }
+
+ KDChartVectorTablePrivate( const KDChartVectorTablePrivate& _t ) :
+ QShared(),
+ matrix( _t.matrix ),
+ col_count( _t.col_count ),
+ row_count( _t.row_count ) {}
+
+ ~KDChartVectorTablePrivate() {}
+
+ void expand( uint _rows, uint _cols ) {
+ // Save the old table
+ QValueVector<KDChartData> save( matrix );
+
+ // Delete old data, then resize
+ matrix.resize( 0 );
+ matrix.resize( _rows * _cols, KDChartData() );
+
+ // Copy over the old data
+ for( uint row = 0; row < QMIN( row_count, _rows ); row++ )
+ for( uint col = 0; col < QMIN( col_count, _cols ); col++ )
+ matrix[ row * _cols + col ].setAll( save[ row * col_count + col ] );
+
+ // set the new counts
+ col_count = _cols;
+ row_count = _rows;
+ }
+
+ KDChartData& cell( uint _row, uint _col ) {
+ Q_ASSERT( _row < row_count );
+ Q_ASSERT( _col < col_count );
+ return matrix[ static_cast < int > ( _row * col_count + _col ) ];
+ }
+ const KDChartData& cell( uint _row, uint _col ) const {
+ Q_ASSERT( _row < row_count );
+ Q_ASSERT( _col < col_count );
+ return matrix[ static_cast < int > ( _row * col_count + _col ) ];
+ }
+ void setCell( uint _row, uint _col, const KDChartData& _element ) {
+ Q_ASSERT( _row < row_count );
+ Q_ASSERT( _col < col_count );
+ matrix[ static_cast < int > ( _row * col_count + _col ) ].setAll( _element );
+ }
+
+ void clearCell( uint _row, uint _col ) {
+ Q_ASSERT( _row < row_count );
+ Q_ASSERT( _col < col_count );
+ matrix[ static_cast < int > ( _row * col_count + _col ) ].clearValue();
+ }
+
+ void clearAllCells() {
+ for ( uint r = 0; r < row_count; ++r )
+ for ( uint c = 0; c < col_count; ++c )
+ matrix[ r * col_count + c ].clearValue();
+ }
+
+ QValueVector<KDChartData> matrix;
+
+ uint col_count;
+ uint row_count;
+};
+
+
+class KDCHART_EXPORT KDChartVectorTableData : public KDChartTableDataBase
+{
+ Q_OBJECT
+
+private:
+ typedef KDChartVectorTablePrivate Priv;
+ uint _usedRows, _usedCols;
+
+public:
+ /**
+ * Typedefs
+ */
+ typedef QValueVector<KDChartData>::iterator Iterator;
+ typedef QValueVector<KDChartData>::const_iterator ConstIterator;
+
+ typedef QValueVector<int>::iterator RowIterator;
+ typedef QValueVector<int>::const_iterator ConstRowIterator;
+
+ typedef QValueVector<int>::iterator ColIterator;
+ typedef QValueVector<int>::const_iterator ConstColIterator;
+
+ /**
+ * API
+ */
+ KDChartVectorTableData() :
+ KDChartTableDataBase()
+ {
+ sh = new Priv;
+ _usedCols = 0;
+ _usedRows = 0;
+ }
+ KDChartVectorTableData( uint _rows, uint _cols ) :
+ KDChartTableDataBase()
+ {
+ sh = new Priv( _rows, _cols );
+ _usedRows = _rows;
+ _usedCols = _cols;
+ }
+
+ KDChartVectorTableData( const KDChartVectorTableData& _t ) :
+ KDChartTableDataBase( _t ) {
+ _useUsedRows = _t._useUsedRows;
+ _useUsedCols = _t._useUsedCols;
+ _usedRows = _t._usedRows;
+ _usedCols = _t._usedCols;
+ sh = _t.sh;
+ sh->ref();
+ setSorted( _t.sorted() );
+ }
+
+ virtual ~KDChartVectorTableData() {
+ if ( sh->deref() )
+ delete sh;
+ }
+
+ KDChartVectorTableData& operator=( const KDChartVectorTableData& t ) {
+ if ( &t == this )
+ return * this;
+ _useUsedRows = t._useUsedRows;
+ _useUsedCols = t._useUsedCols;
+ _usedRows = t._usedRows;
+ _usedCols = t._usedCols;
+ t.sh->ref();
+ if ( sh->deref() )
+ delete sh;
+ sh = t.sh;
+ setSorted( t.sorted() );
+ return *this;
+ }
+
+public slots:
+ Iterator begin() {
+ return sh->matrix.begin();
+ }
+
+ ConstIterator begin() const {
+ return sh->matrix.begin();
+ }
+
+ Iterator end() {
+ return sh->matrix.end();
+ }
+
+ ConstIterator end() const {
+ return sh->matrix.end();
+ }
+
+ bool isEmpty() const {
+ return ( sh->col_count == 0 && sh->row_count == 0 );
+ }
+
+ uint cols() const {
+ return sh->col_count;
+ }
+
+ uint rows() const {
+ return sh->row_count;
+ }
+ // WARNING: The KDChartData class is an internal class now,
+ // and nobody supposed to use it any longer.
+ // Instead, please use cellCoord(), cellProp(), setCell(), setProp(), ...
+ // (khz, 2006-05-23)
+/*
+ KDChartData& cell( uint _row, uint _col ) {
+ detach();
+ return sh->cell( _row, _col );
+ }
+*/
+ virtual bool cellCoord( uint _row, uint _col,
+ QVariant& _value,
+ int coordinate=1 ) const
+ {
+ if( _row >= sh->row_count || _col >= sh->col_count )
+ return false;
+ _value = sh->cell( _row, _col ).value( coordinate );
+ return true;
+ }
+
+ virtual bool cellProp( uint _row, uint _col,
+ int& _prop ) const
+ {
+ if( _row >= sh->row_count || _col >= sh->col_count )
+ return false;
+ _prop = sh->cell( _row, _col ).propertySet();
+ return true;
+ }
+
+ virtual void setCell( uint _row, uint _col,
+ const QVariant& _value1,
+ const QVariant& _value2=QVariant() ) {
+ detach();
+ const KDChartData element( _value1, _value2 );
+ sh->setCell( _row, _col, element );
+ }
+
+ virtual void setProp( uint _row, uint _col,
+ int _propSet=0 )
+ {
+ sh->cell( _row, _col ).setPropertySet( _propSet );
+ }
+
+ void clearCell( uint _row, uint _col ) {
+ detach();
+ sh->clearCell( _row, _col );
+ }
+
+ void clearAllCells() {
+ detach();
+ sh->clearAllCells();
+ }
+
+ void expand( uint _rows, uint _cols ) {
+ detach();
+ sh->expand( _rows, _cols );
+ // adjust the usedRows / usedCols, if they had been set before
+ if( _useUsedCols )
+ setUsedCols( QMIN( _usedCols, _cols ) );
+ if( _useUsedRows )
+ setUsedRows( QMIN( _usedRows, _rows ) );
+ }
+
+ void setUsedRows( uint _rows ) {
+ Q_ASSERT( _rows <= rows() );
+ if( _usedRows < _rows )
+ setSorted( false );
+ _usedRows = _rows;
+ _useUsedRows = true;
+ }
+
+ uint usedRows() const {
+ return _useUsedRows ? _usedRows : rows();
+ }
+
+ void setUsedCols( uint _cols ) {
+ Q_ASSERT( _cols <= cols() );
+ if( _usedCols < _cols )
+ setSorted( false );
+ _usedCols = _cols;
+ _useUsedCols = true;
+ }
+
+ uint usedCols() const {
+ return _useUsedCols ? _usedCols : cols();
+ }
+
+private:
+ /**
+ * Helpers
+ */
+ void detach() {
+ if ( sh->count > 1 ) {
+ sh->deref();
+ sh = new Priv( *sh );
+ }
+ setSorted( false );
+ }
+
+ /**
+ * Variables
+ */
+ Priv* sh;
+};
+
+#endif
+// __KDCHARTLISTTABLE_H__
+
diff --git a/libkdchart/KDChartWidget.cpp b/libkdchart/KDChartWidget.cpp
new file mode 100644
index 0000000..81164ea
--- /dev/null
+++ b/libkdchart/KDChartWidget.cpp
@@ -0,0 +1,438 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#include <KDChartWidget.h>
+#include <KDChart.h>
+#include <KDChartParams.h>
+#include <KDChartTableBase.h>
+#ifndef KDCHART_MASTER_CVS
+#include "KDChartWidget.moc"
+#endif
+
+#include <qpainter.h>
+
+/**
+ \class KDChartWidget KDChartWidget.h
+
+ \brief The entry point into the charting that most people will want
+ to use.
+
+ Simply create a KChartWidget in your application and put it where
+ you want in your widget hierarchy and create a KChartParams object
+ that specifies how the chart should be drawn.
+
+ \note If for some reason you are NOT using the
+ KDChartWidget class but calling the painting methods of KDChart directly,
+ you probably will also use the KDChartDataRegionList class:
+ This class is derived from QPtrList, so all of the Qt documentation
+ for this class is valid for KDChartDataRegionList too, e.g. freeing
+ of the pointers stored can either be done automatically or
+ manually - so PLEASE take the time to read the reference information for this class!
+
+ \sa KDChart, KDChartDataRegionList
+ */
+
+
+/**
+ Default Constructor.
+
+ Sets params and data pointers to zero, you should call setParams
+ and setData before using this chart otherwise only a simple
+ default bar chart will be shown.
+
+ \param parent the widget parent; passed on to QWidget
+ \param name the widget name; passed on to QWidget
+ */
+
+KDChartWidget::KDChartWidget( QWidget* parent, const char* name ) :
+QWidget( parent, name ),
+ _params( 0 ),
+ _data( 0 ),
+ _activeData( false ),
+_mousePressedOnRegion( 0 )
+{
+ _dataRegions.setAutoDelete( true );
+ setDoubleBuffered( true );
+ setBackgroundMode( Qt::NoBackground );
+}
+
+
+/**
+ Constructor. Stores the chart parameters.
+
+ \param params the specification of the chart
+ \param data the data to be displayed as a chart
+ \param parent the widget parent; passed on to QWidget
+ \param name the widget name; passed on to QWidget
+ */
+
+KDChartWidget::KDChartWidget( KDChartParams* params,
+ KDChartTableDataBase* data,
+ QWidget* parent, const char* name ) :
+QWidget( parent, name ),
+ _params( params ),
+ _data( data ),
+ _activeData( false ),
+_mousePressedOnRegion( 0 )
+{
+ _dataRegions.setAutoDelete( true );
+ setDoubleBuffered( true );
+ setBackgroundMode( Qt::NoBackground );
+}
+
+
+/**
+ Destructor.
+ */
+KDChartWidget::~KDChartWidget()
+{
+ // delete any regions that might still be registered
+ _dataRegions.clear();
+ KDChartAutoColor::freeInstance();
+}
+
+void KDChartWidget::paintTo( QPainter& painter,
+ const QRect* rect )
+{
+ KDChart::paint( &painter, _params, _data, &_dataRegions, rect );
+}
+
+void KDChartWidget::print( QPainter& painter,
+ const QRect* rect )
+{
+ bool oldOpt=true;
+ if( _params ){
+ oldOpt = _params->optimizeOutputForScreen();
+ _params->setOptimizeOutputForScreen( false );
+ }
+ bool bOldBuf = _doubleBuffered;
+ _doubleBuffered = false;
+ paintTo( painter, rect );
+ _doubleBuffered = bOldBuf;
+ if( _params )
+ _params->setOptimizeOutputForScreen( oldOpt );
+}
+
+void KDChartWidget::paintEvent( QPaintEvent* event )
+{
+ if( _doubleBuffered ) {
+ // if double-buffering, paint onto the pixmap and copy
+ // afterwards
+ _buffer.fill( backgroundColor() );
+ QPainter painter( &_buffer );
+ paintTo( painter );
+ bitBlt( this, event->rect().topLeft(), &_buffer, event->rect() );
+ } else {
+ // if not double-buffering, paint directly into the window
+ QPainter painter( this );
+ paintTo( painter );
+ }
+}
+
+
+/**
+ \internal
+ */
+void KDChartWidget::mousePressEvent( QMouseEvent* event )
+{
+ if ( !_activeData )
+ return ;
+
+ _mousePressedOnRegion = 0;
+ KDChartDataRegion* current = 0;
+ //QPtrListIterator < KDChartDataRegion > it( _dataRegions );
+ for( current = _dataRegions.last(); current; current = _dataRegions.prev() ){
+ //while ( ( current = it.current() ) ) {
+ if ( current->contains( event->pos() ) ) {
+ _mousePressedOnRegion = current;
+ if ( event->button() == LeftButton ){
+ emit dataLeftPressed( current->row, current->col );
+ emit dataLeftPressed( event->pos() );
+ }else if ( event->button() == MidButton ){
+ emit dataMiddlePressed( current->row, current->col );
+ emit dataMiddlePressed( event->pos() );
+ }else{
+ emit dataRightPressed( current->row, current->col );
+ emit dataRightPressed( event->pos() );
+ }
+ return;
+ }
+ }
+}
+
+
+/**
+ \internal
+ */
+void KDChartWidget::mouseReleaseEvent( QMouseEvent* event )
+{
+ if ( !_activeData )
+ return ;
+
+ KDChartDataRegion* current = 0;
+ QPtrListIterator < KDChartDataRegion > it( _dataRegions );
+ while ( ( current = it.current() ) ) {
+ ++it;
+ if ( current->contains( event->pos() ) ) {
+ if ( event->button() == LeftButton ) {
+ emit dataLeftReleased( current->row, current->col );
+ emit dataLeftReleased( event->pos() );
+ if ( _mousePressedOnRegion == current ){
+ emit dataLeftClicked( current->row, current->col );
+ emit dataLeftClicked( event->pos() );
+ }
+ } else if ( event->button() == MidButton ) {
+ emit dataMiddleReleased( current->row, current->col );
+ emit dataMiddleReleased( event->pos() );
+ if ( _mousePressedOnRegion == current ){
+ emit dataMiddleClicked( current->row, current->col );
+ emit dataMiddleClicked( event->pos() );
+ }
+ } else {
+ emit dataRightReleased( current->row, current->col );
+ emit dataRightReleased( event->pos() );
+ if ( _mousePressedOnRegion == current ){
+ emit dataRightClicked( current->row, current->col );
+ emit dataRightClicked( event->pos() );
+ }
+ }
+ }
+ }
+}
+
+
+/**
+ \internal
+ */
+void KDChartWidget::resizeEvent( QResizeEvent* /*event*/ )
+{
+ // if we use double-buffering, resize the buffer to the new size,
+ // otherwise leave it alone
+ if( _doubleBuffered )
+ _buffer.resize( size() );
+}
+
+
+/**
+ If \a active is true, this widget reports mouse presses, releases
+ and clicks on the data segments it displays. This can slow down the
+ display process, so this is turned off by default.
+
+ If active data reporting is turned on when the widget is already
+ shown, data will be reported after the next repaint(). Call
+ repaint() explicitly if necessary.
+
+ Active data is currently supported for bar, pie, and line charts
+ (the latter only with markers, as trying to hit the line would be
+ too difficult for the user anyway).
+
+ \param active if true, the widget reports mouse events
+ \sa isActiveData()
+ */
+void KDChartWidget::setActiveData( bool active )
+{
+ _activeData = active;
+}
+
+
+/**
+ Returns true if the widget is configured to report mouse
+ events. The default is not to report mouse events.
+
+ \return true if the widget is configured to report mouse events,
+ false otherwise
+ \sa setActiveData()
+ */
+bool KDChartWidget::isActiveData() const
+{
+ return _activeData;
+}
+
+
+/**
+ If \a doublebuffered is true, the widget will double-buffer
+ everything while drawing which reduces flicker a lot, but requires
+ more memory as an off-screen buffer of the same size as the widget
+ needs to be kept around. However, in most cases, it is worth
+ spending the extra memory. Double-buffering is on by
+ default. Turning double-buffering on or off does not trigger a
+ repaint.
+
+ \param doublebuffered if true, turns double-buffering on, if false,
+ turns double-buffering off
+ \sa isDoubleBuffered
+ */
+void KDChartWidget::setDoubleBuffered( bool doublebuffered )
+{
+ _doubleBuffered = doublebuffered;
+ if( doublebuffered ) {
+ // turn double-buffering on
+ // resize the buffer to the size of the widget
+ _buffer.resize( size() );
+ } else {
+ // turn double-buffering off
+ // minimize the buffer so that it does not take any memory
+ _buffer.resize( 0, 0 );
+ }
+}
+
+
+/**
+ Returns whether the widget uses double-buffering for drawing. See
+ \a setDoubleBuffered() for an explanation of double-buffering.
+
+ \return true if double-buffering is turned on, false otherwise
+ */
+bool KDChartWidget::isDoubleBuffered() const
+{
+ return _doubleBuffered;
+}
+
+
+/**
+ Set an entire new parameter set.
+ (Normally you might prefer modifying the existing parameters
+ rather than specifying a new set.)
+ */
+void KDChartWidget::setParams( KDChartParams* params )
+{
+ _params = params;
+}
+
+/**
+ Set an entire new data table.
+ */
+void KDChartWidget::setData( KDChartTableDataBase* data )
+{
+ _data = data;
+}
+
+/**
+ Returns a pointer to the current parameter set.
+ */
+KDChartParams* KDChartWidget::params() const
+{
+ return _params;
+}
+
+/**
+ Returns a pointer to the current data table.
+ */
+KDChartTableDataBase* KDChartWidget::data() const
+{
+ return _data;
+}
+
+/**
+ \fn void KDChartWidget::barsDisplayed( int barsDisplayed, int barsLeft )
+
+ This signal is emitted when drawing of a bar chart is done.
+ Use it to determine if all bars have been drawn: in case
+ you specified both the bar width and the value block gap width
+ it might be that KD Chart is not able to display all bars since
+ they do not fit into the available horizontal space.
+
+ The value of barsLeft indicates how many bars could not be
+ drawn because the data area was not wide enough.
+
+ \sa KDChartParams::numBarsDisplayed, KDChartParams::numBarsLeft
+ */
+
+/**
+ \fn void KDChartWidget::dataLeftClicked( uint row, uint col )
+
+ This signal is emitted when a data item was clicked onto with the left mouse button.
+
+ The values of row / col indicate the respective dataset (row) and item (col).
+
+ \note There is another signal sent simultaneously: reporting the screen coordinates clicked onto.
+
+ \sa dataLeftReleased
+ \sa dataRightClicked, dataMiddleClicked
+ */
+/**
+ \fn void KDChartWidget::dataRightClicked( uint row, uint col )
+
+ This signal is emitted when a data item was clicked onto with the right mouse button.
+
+ The values of row / col indicate the respective dataset (row) and item (col).
+
+ \note There is another signal sent simultaneously: reporting the screen coordinates clicked onto.
+
+ \sa dataRightReleased
+ \sa dataLeftClicked, dataMiddleClicked
+ */
+/**
+ \fn void KDChartWidget::dataMiddleClicked( uint row, uint col )
+
+ This signal is emitted when a data item was clicked onto with the middle mouse button.
+
+ The values of row / col indicate the respective dataset (row) and item (col).
+
+ \note There is another signal sent simultaneously: reporting the screen coordinates clicked onto.
+
+ \sa dataMiddleReleased
+ \sa dataLeftClicked, dataRightClicked
+ */
+
+/**
+ \fn void KDChartWidget::dataLeftClicked( const QPoint & pnt )
+
+ This signal is emitted when a data item was clicked onto with the left mouse button.
+
+ The value of pnt indicates the screen coordinates in relation to the origin of the data area.
+
+ \note There is another signal sent simultaneously: reporting which data item was clicked onto.
+
+ \sa dataLeftReleased
+ \sa dataRightClicked, dataMiddleClicked
+ */
+/**
+ \fn void KDChartWidget::dataRightClicked( const QPoint & pnt )
+
+ This signal is emitted when a data item was clicked onto with the right mouse button.
+
+ The values of row / col indicate the screen coordinates in relation to the origin of the data area.
+
+ \note There is another signal sent simultaneously: reporting which data item was clicked onto.
+
+ \sa dataRightReleased
+ \sa dataLeftClicked, dataMiddleClicked
+ */
+/**
+ \fn void KDChartWidget::dataMiddleClicked( const QPoint & pnt )
+
+ This signal is emitted when a data item was clicked onto with the middle mouse button.
+
+ The values of row / col indicate the screen coordinates in relation to the origin of the data area.
+
+ \note There is another signal sent simultaneously: reporting which data item was clicked onto.
+
+ \sa dataMiddleReleased
+ \sa dataLeftClicked, dataRightClicked
+ */
diff --git a/libkdchart/KDChartWidget.h b/libkdchart/KDChartWidget.h
new file mode 100644
index 0000000..d117daa
--- /dev/null
+++ b/libkdchart/KDChartWidget.h
@@ -0,0 +1,120 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTWIDGET_H__
+#define __KDCHARTWIDGET_H__
+
+#include <KDChartGlobal.h>
+#include <KDChartTable.h>
+#include <KDChartDataRegion.h>
+#include <qwidget.h>
+#include <qscrollview.h>
+#include <qpixmap.h>
+
+/**
+ \file KDChartWidget.h
+
+ \brief Provids the entry point into the charting that most
+ people will want to use.
+ */
+
+class KDChartParams;
+
+class KDCHART_EXPORT KDChartWidget : public QWidget
+{
+ Q_OBJECT
+ Q_PROPERTY( bool activeData READ isActiveData WRITE setActiveData )
+ Q_PROPERTY( bool doubleBuffered READ isDoubleBuffered WRITE setDoubleBuffered )
+
+public:
+ KDChartWidget( QWidget* parent = 0, const char* name = 0 );
+ KDChartWidget( KDChartParams* params,
+ KDChartTableDataBase* data,
+ QWidget* parent = 0, const char* name = 0 );
+ ~KDChartWidget();
+
+public slots:
+ bool isActiveData() const;
+ bool isDoubleBuffered() const;
+
+ KDChartParams* params() const;
+ KDChartTableDataBase* data() const;
+
+ const KDChartDataRegionList* dataRegions() const { return &_dataRegions; }
+
+ void setActiveData( bool active );
+ void setDoubleBuffered( bool doublebuffered );
+ void setParams( KDChartParams* params );
+ void setData( KDChartTableDataBase* data );
+ // use this method to paint to low resolution devices
+ void paintTo( QPainter& painter,
+ const QRect* rect = 0 );
+ // use this method to paint to high res devices like printers...
+ void print( QPainter& painter,
+ const QRect* rect = 0 );
+
+
+
+signals:
+ void dataLeftClicked( uint row, uint col );
+ void dataLeftClicked( const QPoint & pnt );
+ void dataMiddleClicked( uint row, uint col );
+ void dataMiddleClicked( const QPoint & pnt );
+ void dataRightClicked( uint row, uint col );
+ void dataRightClicked( const QPoint & pnt );
+ void dataLeftPressed( uint row, uint col );
+ void dataLeftPressed( const QPoint & pnt );
+ void dataMiddlePressed( uint row, uint col );
+ void dataMiddlePressed( const QPoint & pnt );
+ void dataRightPressed( uint row, uint col );
+ void dataRightPressed( const QPoint & pnt );
+ void dataLeftReleased( uint row, uint col );
+ void dataLeftReleased( const QPoint & pnt );
+ void dataMiddleReleased( uint row, uint col );
+ void dataMiddleReleased( const QPoint & pnt );
+ void dataRightReleased( uint row, uint col );
+ void dataRightReleased( const QPoint & pnt );
+ void barsDisplayed( int barsDisplayed, int barsLeft );
+
+protected:
+ virtual void paintEvent( QPaintEvent* event );
+ virtual void mousePressEvent( QMouseEvent* event );
+ virtual void mouseReleaseEvent( QMouseEvent* event );
+ virtual void resizeEvent( QResizeEvent* event );
+
+private:
+ KDChartParams* _params;
+ KDChartTableDataBase* _data;
+ bool _activeData;
+ bool _doubleBuffered;
+ QPixmap _buffer;
+ KDChartDataRegion* _mousePressedOnRegion;
+ KDChartDataRegionList _dataRegions;
+};
+
+#endif
diff --git a/libkdchart/KDChartWrapperFactory.cpp b/libkdchart/KDChartWrapperFactory.cpp
new file mode 100644
index 0000000..430ef3a
--- /dev/null
+++ b/libkdchart/KDChartWrapperFactory.cpp
@@ -0,0 +1,33 @@
+#include "KDChartWrapperFactory.h"
+#include <KDChartTable.h>
+#include <qfont.h>
+#include "wrappers/KDChartParamsWrapper.h"
+#include "wrappers/KDChartTableDataWrapper.h"
+#include "wrappers/KDChartCustomBoxWrapper.h"
+#include <KDChartCustomBox.h>
+#include "wrappers/KDChartAxisParamsWrapper.h"
+
+KDChartWrapperFactory::KDChartWrapperFactory()
+{
+ registerWrapper( "KDChartParams", "KDChartParamsWrapper" );
+ registerWrapper( "KDChartVectorTableData", "KDChartTableDataWrapper" );
+ registerWrapper( "KDChartCustomBox", "KDChartCustomBoxWrapper" );
+ registerWrapper( "KDChartAxisParams", "KDChartAxisParamsWrapper" );
+}
+
+QObject* KDChartWrapperFactory::create( const QString& className, void* ptr )
+{
+ if ( className == QString::fromLatin1( "KDChartParams" ) )
+ return new KDChartParamsWrapper( static_cast<KDChartParams*>( ptr ) );
+
+ if ( className == QString::fromLatin1( "KDChartVectorTableData" ) )
+ return new KDChartTableDataWrapper( static_cast<KDChartTableData*>( ptr ) );
+
+ if ( className == QString::fromLatin1( "KDChartCustomBox" ) )
+ return new KDChartCustomBoxWrapper( static_cast<KDChartCustomBox*>( ptr ) );
+
+ if ( className == QString::fromLatin1( "KDChartAxisParams" ) )
+ return new KDChartAxisParamsWrapper( static_cast<KDChartAxisParams*>( ptr ) );
+
+ return 0;
+}
diff --git a/libkdchart/KDChartWrapperFactory.h b/libkdchart/KDChartWrapperFactory.h
new file mode 100644
index 0000000..aa07277
--- /dev/null
+++ b/libkdchart/KDChartWrapperFactory.h
@@ -0,0 +1,13 @@
+#ifndef KDCHARTWRAPPERFACTORY_H
+#define KDCHARTWRAPPERFACTORY_H
+#include <qswrapperfactory.h>
+
+class KDChartWrapperFactory :public QSWrapperFactory
+{
+public:
+ KDChartWrapperFactory();
+ virtual QObject* create ( const QString& className, void* ptr );
+};
+
+#endif /* KDCHARTWRAPPERFACTORY_H */
+
diff --git a/libkdchart/KDDrawText.cpp b/libkdchart/KDDrawText.cpp
new file mode 100644
index 0000000..4b9467f
--- /dev/null
+++ b/libkdchart/KDDrawText.cpp
@@ -0,0 +1,483 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#include <qpainter.h>
+#include <qbitmap.h>
+#include <qpixmap.h>
+#include <math.h>
+#include <limits.h>
+
+#include <KDDrawText.h>
+
+#ifndef M_PI
+#define M_PI 3.14159265358979323846
+#endif
+
+void KDDrawText::drawRotatedText( QPainter* painter,
+ float degrees,
+ QPoint anchor,
+ const QString& text,
+ const QFont* font,
+ int align,
+ bool showAnchor,
+ const QFontMetrics* fontMet,
+ bool noFirstrotate,
+ bool noBackrotate,
+ KDDrawTextRegionAndTrueRect* infos,
+ bool optimizeOutputForScreen )
+{
+ drawRotatedTxt( painter,
+ optimizeOutputForScreen,
+ degrees,
+ anchor,
+ text,
+ font,
+ align,
+ showAnchor,
+ INT_MAX,
+ INT_MAX,
+ fontMet,
+ false,
+ 0 != infos,
+ noFirstrotate,
+ noBackrotate,
+ infos );
+}
+
+
+KDDrawTextRegionAndTrueRect KDDrawText::measureRotatedText(
+ QPainter* painter,
+ float degrees,
+ QPoint anchor,
+ const QString& text,
+ const QFont* font,
+ int align,
+ const QFontMetrics* fontMet,
+ bool noFirstrotate,
+ bool noBackrotate,
+ int addPercentOfHeightToRegion )
+{
+ KDDrawTextRegionAndTrueRect infos;
+ drawRotatedTxt( painter,
+ false,
+ degrees,
+ anchor,
+ text,
+ font,
+ align,
+ false,
+ INT_MAX,
+ INT_MAX,
+ fontMet,
+ true,
+ false,
+ noFirstrotate,
+ noBackrotate,
+ &infos,
+ addPercentOfHeightToRegion );
+ return infos;
+}
+
+
+void KDDrawText::drawRotatedTxt( QPainter* painter,
+ bool optimizeOutputForScreen,
+ float degrees,
+ QPoint anchor,
+ const QString& text,
+ const QFont* font,
+ int align,
+ bool showAnchor,
+ int txtWidth,
+ int txtHeight,
+ const QFontMetrics* fontMet,
+ bool calculateOnly,
+ bool doNotCalculate,
+ bool noFirstrotate,
+ bool noBackrotate,
+ KDDrawTextRegionAndTrueRect* infos,
+ int addPercentOfHeightToRegion )
+{
+
+// showAnchor=true;
+ //qDebug("\nanchor: "+ text + " / "+QString::number(anchor.x())
+ // +" / "+QString::number(anchor.y()));
+ bool useInfos = doNotCalculate && infos;
+ bool fontChanged = ( 0 != font );
+ QFont oldFont;
+ if( fontChanged ) {
+ oldFont = painter->font();
+ painter->setFont( *font );
+ }
+ else
+ font = &painter->font();
+
+ bool mustBackrotate = false;
+ if( !optimizeOutputForScreen && !noFirstrotate ){
+ painter->rotate( degrees );
+ if( !noBackrotate )
+ mustBackrotate = true;
+ }
+
+ QPoint pos = useInfos ? infos->pos : painter->xFormDev( anchor );
+
+ if( useInfos )
+ {
+ txtWidth = infos->width;
+ txtHeight = infos->height;
+ }
+ else
+ {
+ int newHeight=0;
+
+ // a bug in the AIX 5.2 compiler means using (?:) syntax doesn't work here
+ // therefor we do it the following way:
+ QFontMetrics* pFM=0;
+ if( ! pFM ) {
+ pFM = new QFontMetrics( painter->fontMetrics() );
+ } else {
+ pFM = const_cast<QFontMetrics*>(fontMet);
+ }
+
+ int nLF = text.contains('\n');
+ if( INT_MAX == txtWidth ) {
+ if( nLF ){
+ int tw;
+ txtWidth = 0;
+ int i0 = 0;
+ int iLF = text.find('\n');
+ while( -1 != iLF ){
+ const QRect r(pFM->boundingRect( text.mid(i0, iLF-i0) ));
+ tw = r.width()+ 2;
+ newHeight = r.height();
+ if( tw > txtWidth )
+ txtWidth = tw;
+ i0 = iLF+1;
+ iLF = text.find('\n', i0);
+ }
+ if( iLF < (int)text.length() ){
+ const QRect r(pFM->boundingRect( text.mid( i0 ) ));
+ tw = r.width()+2;
+ newHeight = r.height();
+ if( tw > txtWidth )
+ txtWidth = tw;
+ i0 = iLF+1;
+ }
+ }else{
+ const QRect r(painter->boundingRect( 0,0,1,1, Qt::AlignAuto, text ));
+ // correct width and height before painting with 2 unit to avoid truncating.
+ // PENDING Michel - improve
+ txtWidth = r.width()+2;
+ newHeight = r.height()+2;
+ }
+ }
+ if( INT_MAX == txtWidth || INT_MAX == txtHeight ) {
+ txtHeight = newHeight ? newHeight : pFM->height() * (1+nLF);
+ }
+ if( pFM != fontMet )
+ delete pFM;
+ if( infos ) {
+ infos->pos = pos;
+ // PENDING infos
+ infos->width = txtWidth;
+ infos->height = txtHeight;
+ }
+ }
+ if( showAnchor ) {
+ int d = txtHeight/4;
+ QPen savePen = painter->pen();
+ painter->setPen( QColor( Qt::darkRed ) );
+ painter->drawLine( pos.x(), pos.y()-d,
+ pos.x(), pos.y()+d );
+ painter->drawLine( pos.x()-d, pos.y(),
+ pos.x()+d, pos.y() );
+ painter->setPen( savePen );
+ }
+ int x = useInfos ? infos->x : pos.x();
+ int y = useInfos ? infos->y : pos.y();
+ //qDebug("1.: (x / y) :" + text + " / "+QString::number(x)
+ // +" / "+QString::number(y));
+ //qDebug("2.: (posx / posy) :" + text );
+ // qDebug ( "%d", pos.x() ); qDebug ( "%d", pos.y() );
+ //qDebug("3.: (infosx / infosy) :" + text + " / "+QString::number(infos->x)
+ // +" / "+QString::number(infos->y));
+
+ if( !useInfos && !optimizeOutputForScreen ) {
+ switch( align & ( Qt::AlignLeft | Qt::AlignRight | Qt::AlignHCenter ) ) {
+ case Qt::AlignLeft:
+ break;
+ case Qt::AlignRight:
+//qDebug( QPaintDeviceMetrics::logicalDpiX() );
+ x -= txtWidth;
+ break;
+ case Qt::AlignHCenter:
+ x -= txtWidth - txtWidth/2;
+ break;
+ }
+ switch( align & ( Qt::AlignTop | Qt::AlignBottom | Qt::AlignVCenter ) ) {
+ case Qt::AlignTop:
+ break;
+ case Qt::AlignBottom:
+ y -= txtHeight;
+ break;
+ case Qt::AlignVCenter:
+ y -= txtHeight/2;
+ break;
+ }
+ }
+ if( infos && !useInfos ) {
+ painter->xForm( pos );
+ infos->x = x - 4;
+ infos->y = y - 4;
+ //PENDING Michel updating info using x , y from pos
+ //qDebug("4.: (infosx / infosy) :" + text + " / "+QString::number(infos->x)
+ //+" / "+QString::number(infos->y));
+ //qDebug("5.: (x / y) :" + text + " / "+QString::number(x)
+ // +" / "+QString::number(y));
+ //qDebug("6.: (anchorx /anchory) :" + text + " / "+QString::number(x)
+ // +" / "+QString::number(y));
+ QRect rect( painter->boundingRect( x, y,
+ txtWidth, txtHeight,
+ Qt::AlignLeft + Qt::AlignTop,
+ text ) );
+ //painter->fillRect (rect, Qt::blue );
+
+ QPoint topLeft( painter->xForm( rect.topLeft() ) );
+ QPoint topRight( painter->xForm( rect.topRight() ) );
+ QPoint bottomRight( painter->xForm( rect.bottomRight() ) );
+ QPoint bottomLeft( painter->xForm( rect.bottomLeft() ) );
+
+ int additor = addPercentOfHeightToRegion * txtHeight / 100;
+ QPointArray points;
+ points.setPoints( 4, topLeft.x()-additor, topLeft.y()-additor,
+ topRight.x()+additor, topRight.y()-additor,
+ bottomRight.x()+additor, bottomRight.y()+additor,
+ bottomLeft.x()-additor, bottomLeft.y()+additor );
+ infos->region = QRegion( points );
+ }
+
+ // When the Qt initialization bug is fixed the following scope
+ // will be put into an "if( showAnchor )" entirely.
+ {
+ int d = txtHeight/4;
+ QPen savePen = painter->pen();
+ if( showAnchor ) {
+ painter->setPen( QColor( Qt::blue ) );
+ painter->drawLine( x, y-d,
+ x, y+d );
+ painter->drawLine( x-d, y,
+ x+d, y );
+ painter->setPen( QColor( Qt::darkGreen ) );
+ painter->drawRect(x,y,txtWidth,txtHeight);
+ //painter->drawText( x, y-d, text);
+
+/*
+ }else{
+ // Working around a strange Qt bug: Rotated painter must be
+ // initialized by drawing before text can be painted there.
+ painter->setPen( QColor( Qt::white ) );
+ painter->drawLine( 30000,0,30001,0 );
+*/
+ }
+ painter->setPen( savePen );
+ }
+
+ if( mustBackrotate && optimizeOutputForScreen ){
+ painter->rotate( -degrees );
+ mustBackrotate = false;
+ }
+
+ if( !calculateOnly ){
+ //qDebug("txtWidth: %i txtHeight: %i", txtWidth, txtHeight);
+ if( !optimizeOutputForScreen ){
+/*
+ painter->drawText( x, y,
+ txtWidth, txtHeight,
+ Qt::AlignLeft + Qt::AlignTop,
+ text );
+*/
+ painter->drawText( x, y,
+ txtWidth, txtHeight,
+ Qt::AlignLeft + Qt::AlignTop,
+ text );
+/*
+ painter->drawText( x, y,
+ text,
+ -1,
+ Qt::AlignRight + Qt::AlignTop );
+*/
+ }else{
+ // new code (rotating the text ourselves for better quality on screens)
+ QPixmap pm( txtWidth+2, txtHeight+2, 1 );
+ // note: When using colored axis labels it will be necessary
+ // to change this code and use a 256 color pixmap instead
+ // of a monochrome one. (khz, 2002/08/15)
+ pm.fill(Qt::color0);
+ QPainter p;
+ p.begin( &pm );
+ if( showAnchor ){
+ p.drawRect(0,0, txtWidth,txtHeight);
+ p.drawLine(0,0, txtWidth,txtHeight);
+ p.drawLine(0,txtHeight, txtWidth,0);
+ }
+ p.setFont(painter->font());
+
+ p.drawText( 0, 0, txtWidth, txtHeight,
+ Qt::AlignLeft + Qt::AlignTop,
+ text );
+/*
+ p.drawText( 0,0,
+ text,
+ -1,
+ Qt::AlignLeft + Qt::AlignTop );
+*/
+
+ QBitmap mask;
+ mask = pm;
+ pm.setMask( mask );
+ QWMatrix m;
+ m.rotate( degrees );
+ QPixmap theRotatedPixmap = pm.xForm(m);
+
+ // where are our four corner points now:
+ double degreesRad = degrees;
+ while( degreesRad > 360 )
+ degreesRad -= 360;
+ degreesRad *= M_PI / 180.0;
+ double cosA = cos( degreesRad );
+ double sinA = sin( degreesRad );
+ QPoint pTopLeft( 0,
+ 0 );
+ QPoint pBotLeft( static_cast < int > ( 0 * cosA - txtHeight * sinA ),
+ static_cast < int > ( txtHeight * cosA + 0 * sinA ) );
+ QPoint pTopRight( static_cast < int > ( txtWidth * cosA - 0 * sinA ),
+ static_cast < int > ( 0 * cosA + txtWidth * sinA ) );
+ QPoint pBotRight( static_cast < int > ( txtWidth * cosA - txtHeight * sinA ),
+ static_cast < int > ( txtHeight * cosA + txtWidth * sinA ) );
+
+ // make our four corner points relative
+ // to the bounding rect of the rotated pixmap
+ {
+ QPoint pDeltaTL( QMIN(0, QMIN(pBotLeft.x(), QMIN(pTopRight.x(), pBotRight.x()))),
+ QMIN(0, QMIN(pBotLeft.y(), QMIN(pTopRight.y(), pBotRight.y()))) );
+ pTopLeft -= pDeltaTL;
+ pBotLeft -= pDeltaTL;
+ pTopRight -= pDeltaTL;
+ pBotRight -= pDeltaTL;
+ }
+
+ /*
+ painter->setPen( QColor( Qt::black ) );
+ painter->drawLine( x-13, y, x+13, y );
+ painter->drawLine( x, y-13, x, y+13 );
+ painter->setPen( QColor( Qt::blue ) );
+ painter->drawLine( x+pTopLeft.x()-3, y+pTopLeft.y(), x+pTopLeft.x()+3, y+pTopLeft.y() );
+ painter->drawLine( x+pTopLeft.x(), y+pTopLeft.y()-3, x+pTopLeft.x(), y+pTopLeft.y()+3 );
+ painter->setPen( QColor( Qt::red ) );
+ painter->drawLine( x+pTopRight.x()-3, y+pTopRight.y(), x+pTopRight.x()+3, y+pTopRight.y() );
+ painter->drawLine( x+pTopRight.x(), y+pTopRight.y()-3, x+pTopRight.x(), y+pTopRight.y()+3 );
+ painter->setPen( QColor( Qt::green ) );
+ painter->drawLine( x+pBotLeft.x()-3, y+pBotLeft.y(), x+pBotLeft.x()+3, y+pBotLeft.y() );
+ painter->drawLine( x+pBotLeft.x(), y+pBotLeft.y()-3, x+pBotLeft.x(), y+pBotLeft.y()+3 );
+ painter->setPen( QColor( Qt::yellow ) );
+ painter->drawLine( x+pBotRight.x()-3, y+pBotRight.y(), x+pBotRight.x()+3, y+pBotRight.y() );
+ painter->drawLine( x+pBotRight.x(), y+pBotRight.y()-3, x+pBotRight.x(), y+pBotRight.y()+3 );
+ */
+
+ // The horizontal and vertical alignment together define one of
+ // NINE possible points: this point must be moved on the anchor.
+ int hAlign = align & ( Qt::AlignLeft | Qt::AlignRight | Qt::AlignHCenter );
+ int vAlign = align & ( Qt::AlignTop | Qt::AlignBottom | Qt::AlignVCenter );
+
+ QPoint pixPoint;
+ switch( hAlign ) {
+ case Qt::AlignLeft:
+ switch( vAlign ) {
+ case Qt::AlignTop:
+ pixPoint = pTopLeft;
+ break;
+ case Qt::AlignBottom:
+ pixPoint = pBotLeft;
+ break;
+ case Qt::AlignVCenter:
+ default:
+ pixPoint = QPoint( (pTopLeft.x() + pBotLeft.x()) / 2,
+ (pTopLeft.y() + pBotLeft.y()) / 2 );
+ break;
+ }
+ break;
+ case Qt::AlignRight:
+ switch( vAlign ) {
+ case Qt::AlignTop:
+ pixPoint = pTopRight;
+ break;
+ case Qt::AlignBottom:
+ pixPoint = pBotRight;
+ break;
+ case Qt::AlignVCenter:
+ default:
+ pixPoint = QPoint( (pTopRight.x() + pBotRight.x()) / 2,
+ (pTopRight.y() + pBotRight.y()) / 2 );
+ break;
+ }
+ break;
+ case Qt::AlignHCenter:
+ default:
+ switch( vAlign ) {
+ case Qt::AlignTop:
+ pixPoint = QPoint( (pTopLeft.x() + pTopRight.x()) / 2,
+ (pTopLeft.y() + pTopRight.y()) / 2 );
+ break;
+ case Qt::AlignBottom:
+ pixPoint = QPoint( (pBotLeft.x() + pBotRight.x()) / 2,
+ (pBotLeft.y() + pBotRight.y()) / 2 );
+ break;
+ case Qt::AlignVCenter:
+ default:
+ pixPoint = QPoint( (pTopLeft.x() + pBotRight.x()) / 2,
+ (pTopLeft.y() + pBotRight.y()) / 2 );
+ break;
+ }
+ break;
+ }
+ //qDebug("2.: (x / y) : "+QString::number(x)
+ // +" / "+QString::number(y));
+ painter->drawPixmap( QPoint( x - pixPoint.x(),
+ y - pixPoint.y() ),
+ theRotatedPixmap );
+ p.end();
+ }
+ }
+
+ if( mustBackrotate )
+ painter->rotate( -degrees );
+
+ if( fontChanged )
+ painter->setFont( oldFont );
+}
+
+
diff --git a/libkdchart/KDDrawText.h b/libkdchart/KDDrawText.h
new file mode 100644
index 0000000..64337e5
--- /dev/null
+++ b/libkdchart/KDDrawText.h
@@ -0,0 +1,102 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDDRAWTEXT_H__
+#define __KDDRAWTEXT_H__
+
+#include <qpainter.h>
+#ifdef linux
+#include <values.h>
+#endif
+#include "KDChartGlobal.h"
+
+
+struct KDDrawTextRegionAndTrueRect
+{
+ QRegion region;
+ QPoint pos;
+ int x,y,width,height;
+};
+
+
+class KDDrawText
+{
+ public:
+ static void drawRotatedText( QPainter* painter,
+ float degrees,
+ QPoint anchor,
+ const QString& text,
+ const QFont* font = 0,
+ int align = Qt::AlignLeft | Qt::AlignTop,
+ // useful for debugging of your layout:
+ bool showAnchor = false,
+ const QFontMetrics* fontMet = 0,
+ bool noFirstrotate = false,
+ bool noBackrotate = false,
+ KDDrawTextRegionAndTrueRect* infos = 0,
+ bool optimizeOutputForScreen = false );
+
+ static KDDrawTextRegionAndTrueRect measureRotatedText(
+ QPainter* painter,
+ float degrees,
+ QPoint anchor,
+ const QString& text,
+ const QFont* font,
+ int align,
+ const QFontMetrics* fontMet,
+ bool noFirstrotate,
+ bool noBackrotate,
+ int addPercentOfHeightToRegion );
+
+ private:
+ static void drawRotatedTxt( QPainter* painter,
+ bool optimizeOutputForScreen,
+ float degrees,
+ QPoint anchor,
+ const QString& text,
+ const QFont* font = 0,
+ int align = Qt::AlignLeft | Qt::AlignTop,
+ // usefull for debugging of your layout:
+ bool showAnchor = false,
+ // speed-up parameters
+ // used internally by drawCircleText()
+ // to avoid duplicate calculation
+ int txtWidth = INT_MAX,
+ int txtHeight = INT_MAX,
+ const QFontMetrics* fontMet = 0,
+ // additional speed-up parameters used by KDChart
+ bool calculateOnly = false,
+ bool doNotCalculate= false,
+ bool noFirstrotate = false,
+ bool noBackrotate = false,
+ KDDrawTextRegionAndTrueRect* infos = 0,
+ int addPercentOfHeightToRegion = 0 );
+
+};
+
+#endif
diff --git a/libkdchart/KDFrame.cpp b/libkdchart/KDFrame.cpp
new file mode 100644
index 0000000..a8a1833
--- /dev/null
+++ b/libkdchart/KDFrame.cpp
@@ -0,0 +1,618 @@
+/* -*- Mode: C++ -*-
+ KD Tools - a set of useful widgets for Qt
+*/
+
+/****************************************************************************
+** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+**
+** This file is part of the KD Tools library.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** Licensees holding valid commercial KD Tools licenses may use this file in
+** accordance with the KD Tools Commercial License Agreement provided with
+** the Software.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.klaralvdalens-datakonsult.se/?page=products for
+** information about KD Tools Commercial License Agreements.
+**
+** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+** licensing are not clear to you.
+**
+**********************************************************************/
+
+#include <qpainter.h>
+#include <qbrush.h>
+
+#include <KDFrame.h>
+#include <KDFrameProfileSection.h>
+#include <KDXMLTools.h>
+
+#if defined( SUN7 ) || defined( _SGIAPI )
+#include <math.h>
+#else
+#include <cmath>
+#endif
+#ifdef Q_WS_WIN
+#define M_PI 3.14159265358979323846
+#endif
+
+
+KDFrame::~KDFrame()
+{
+ _profileSections.clear(); // is ignored if auto-deletion is disabled
+}
+
+KDFrame::KDFrameCorner::~KDFrameCorner()
+{
+ // Intentionally left blank for now.
+}
+
+
+
+
+
+void KDFrame::paintBackground( QPainter& painter, const QRect& innerRect ) const
+{
+ /* first draw the brush (may contain a pixmap)*/
+ if( Qt::NoBrush != _background.style() ) {
+ QPen oldPen( painter.pen() );
+ QPoint oldOrig( painter.brushOrigin() );
+ QBrush oldBrush( painter.brush() );
+ painter.setPen( Qt::NoPen );
+ const QPoint newTopLeft( painter.xForm( innerRect.topLeft() ) );
+ painter.setBrushOrigin( newTopLeft.x(), newTopLeft.y() );
+ painter.setBrush( _background );
+ painter.drawRect( innerRect.x(), innerRect.y(),
+ innerRect.width(), innerRect.height() );
+ painter.setPen( oldPen );
+ painter.setBrushOrigin( oldOrig );
+ painter.setBrush( oldBrush );
+ }
+ /* next draw the backPixmap over the brush */
+ if( ! _backPixmap.isNull() ) {
+ QPoint ol = innerRect.topLeft();
+ if( PixCentered == _backPixmapMode )
+ {
+ ol.setX( innerRect.center().x() - _backPixmap.width() / 2 );
+ ol.setY( innerRect.center().y() - _backPixmap.height()/ 2 );
+ bitBlt( painter.device(), ol, &_backPixmap );
+ } else {
+ QWMatrix m;
+ double zW = (double)innerRect.width() / (double)_backPixmap.width();
+ double zH = (double)innerRect.height() / (double)_backPixmap.height();
+ switch ( _backPixmapMode ) {
+ case PixCentered:
+ break;
+ case PixScaled: {
+ double z;
+ z = QMIN( zW, zH );
+ m.scale( z, z );
+ }
+ break;
+ case PixStretched:
+ m.scale( zW, zH );
+ break;
+ }
+ QPixmap pm = _backPixmap.xForm( m );
+ ol.setX( innerRect.center().x() - pm.width() / 2 );
+ ol.setY( innerRect.center().y() - pm.height()/ 2 );
+ bitBlt( painter.device(), ol, &pm );
+ }
+ }
+}
+
+
+void KDFrame::paintEdges( QPainter& painter, const QRect& innerRect ) const
+ {
+
+/*
+ Note: The following code OF COURSE is only dummy-code and will be replaced.
+
+ At the moment it is used to draw the simple frames which were set by
+ the setSimpleFrame() function.
+*/
+ if( !_topProfile.isEmpty() ){
+
+ KDFrameProfileSection* section;
+ for ( section = ((KDFrameProfile)_topProfile).last(); section; section = ((KDFrameProfile)_topProfile).prev() ){
+ const QPen oldPen = painter.pen();
+ const QBrush oldBrush = painter.brush();
+ QPen thePen;
+ thePen = section->pen();
+ int penWidth = QMAX(thePen.width(), 1) * QMAX(section->width(), 1);
+//qDebug("paintEdges: thePen.width() = %i", thePen.width());
+//qDebug("paintEdges: section->width() = %i", section->width());
+//qDebug("paintEdges: penWidth = %i", penWidth);
+ thePen.setWidth( penWidth );
+ painter.setPen( thePen );
+ painter.setBrush( Qt::NoBrush );
+ painter.drawRect( innerRect.x()-penWidth,
+ innerRect.y()-penWidth,
+ innerRect.width() +2*penWidth,
+ innerRect.height() +2*penWidth );
+ painter.setBrush( oldBrush );
+ painter.setPen( oldPen );
+ }
+ }
+}
+
+
+void KDFrame::paintCorners( QPainter& /*painter*/, const QRect& /*innerRect*/ ) const
+{
+ // At the moment nothing is done here since the setSimpleFrame() function
+ // does not allow specifying corners: all predefined frames have normal
+ // (default) corners.
+ ;
+}
+
+
+void KDFrame::paint( QPainter* painter,
+ KDFramePaintSteps steps,
+ QRect innerRect ) const
+{
+ if( painter ) {
+ const QRect& rect = innerRect.isValid() ? innerRect : _innerRect;
+ switch( steps ) {
+ case PaintBackground:
+ paintBackground( *painter, rect );
+ break;
+ case PaintEdges:
+ paintEdges( *painter, rect );
+ break;
+ case PaintCorners:
+ paintCorners( *painter, rect );
+ break;
+ case PaintBorder:
+ paintEdges( *painter, rect );
+ paintCorners( *painter, rect );
+ break;
+ case PaintAll:
+ paintBackground( *painter, rect );
+ paintEdges( *painter, rect );
+ paintCorners( *painter, rect );
+ break;
+ }
+ }
+}
+
+
+void KDFrame::clearProfile( ProfileName name )
+{
+ switch( name ) {
+ case ProfileTop: _topProfile.clear();
+ break;
+ case ProfileRight: _rightProfile.clear();
+ break;
+ case ProfileBottom:_bottomProfile.clear();
+ break;
+ case ProfileLeft: _leftProfile.clear();
+ break;
+ }
+}
+
+void KDFrame::addProfileSection( ProfileName name,
+ int wid,
+ QPen pen,
+ KDFrameProfileSection::Direction dir,
+ KDFrameProfileSection::Curvature curv )
+{
+ switch( name ) {
+ case ProfileTop: _topProfile.append( new KDFrameProfileSection( dir, curv, wid, pen ) );
+ break;
+ case ProfileRight: _rightProfile.append( new KDFrameProfileSection( dir, curv, wid, pen ) );
+ break;
+ case ProfileBottom:_bottomProfile.append(new KDFrameProfileSection( dir, curv, wid, pen ) );
+ break;
+ case ProfileLeft: _leftProfile.append( new KDFrameProfileSection( dir, curv, wid, pen ) );
+ break;
+ }
+}
+
+void KDFrame::setProfile( ProfileName name, const KDFrameProfile& profile )
+{
+ switch( name ) {
+ case ProfileTop: _topProfile = profile;
+ break;
+ case ProfileRight: _rightProfile = profile;
+ break;
+ case ProfileBottom:_bottomProfile = profile;
+ break;
+ case ProfileLeft: _leftProfile = profile;
+ break;
+ }
+}
+
+const KDFrameProfile& KDFrame::profile( ProfileName name ) const
+{
+ switch( name ) {
+ case ProfileTop: return _topProfile;
+ break;
+ case ProfileRight: return _rightProfile;
+ break;
+ case ProfileBottom:return _bottomProfile;
+ break;
+ default: return _leftProfile;
+ }
+
+ return _leftProfile;
+}
+
+
+void KDFrame::setSimpleFrame( SimpleFrame frame,
+ int lineWidth,
+ int midLineWidth,
+ QPen pen,
+ QBrush background,
+ const QPixmap* backPixmap,
+ BackPixmapMode backPixmapMode )
+{
+ _profileSections.clear();
+ _topProfile.clear();
+ _rightProfile.clear();
+ _bottomProfile.clear();
+ _leftProfile.clear();
+ _background = background;
+ _backPixmap = backPixmap ? *backPixmap : QPixmap();
+ _backPixmapMode = backPixmapMode;
+ if( FrameFlat == frame ) {
+ //qDebug("_profileSections.count() before = %i", _profileSections.count());
+ KDFrameProfileSection* newsection =
+ new KDFrameProfileSection( KDFrameProfileSection::DirPlain,
+ KDFrameProfileSection::CvtPlain,
+ lineWidth, pen );
+ _profileSections.append( newsection );
+ //qDebug( "_profileSections.count() after = %i, lineWidth = %i",
+ // _profileSections.count(),
+ // lineWidth );
+ _topProfile.append( newsection );
+ _rightProfile = _topProfile;
+ _bottomProfile = _topProfile;
+ _leftProfile = _topProfile;
+ }
+ else {
+ switch( frame ) {
+ case FrameElegance: {
+ int line1 = lineWidth / 8;
+ int line2 = lineWidth / 16;
+ int line3 = line2;
+ int gap2 = line2 * 4;
+ int gap1 = lineWidth - line1 - line2 - line3 - gap2;
+ QPen noP( Qt::NoPen );
+ KDFrameProfileSection* newsection;
+ newsection = new KDFrameProfileSection( KDFrameProfileSection::DirPlain,
+ KDFrameProfileSection::CvtPlain,
+ line1, pen );
+ _profileSections.append( newsection );
+ _topProfile.append( newsection );
+ newsection = new KDFrameProfileSection( KDFrameProfileSection::DirPlain,
+ KDFrameProfileSection::CvtPlain,
+ gap1, noP );
+ _profileSections.append( newsection );
+ _topProfile.append( newsection );
+ newsection = new KDFrameProfileSection( KDFrameProfileSection::DirPlain,
+ KDFrameProfileSection::CvtPlain,
+ line2, pen );
+ _profileSections.append( newsection );
+ _topProfile.append( newsection );
+ newsection = new KDFrameProfileSection( KDFrameProfileSection::DirPlain,
+ KDFrameProfileSection::CvtPlain,
+ gap2, noP );
+ _profileSections.append( newsection );
+ _topProfile.append( newsection );
+ newsection = new KDFrameProfileSection( KDFrameProfileSection::DirPlain,
+ KDFrameProfileSection::CvtPlain,
+ line3, pen );
+ _profileSections.append( newsection );
+ _topProfile.append( newsection );
+ }
+ break;
+ case FrameBoxRaized:
+ {
+ KDFrameProfileSection* newsection;
+ newsection = new KDFrameProfileSection( KDFrameProfileSection::DirRaising,
+ KDFrameProfileSection::CvtPlain,
+ lineWidth, pen );
+ _profileSections.append( newsection );
+ _topProfile.append( newsection );
+ newsection = new KDFrameProfileSection( KDFrameProfileSection::DirPlain,
+ KDFrameProfileSection::CvtPlain,
+ midLineWidth, pen );
+ _profileSections.append( newsection );
+ _topProfile.append( newsection );
+ newsection = new KDFrameProfileSection( KDFrameProfileSection::DirSinking,
+ KDFrameProfileSection::CvtPlain,
+ lineWidth, pen );
+ _profileSections.append( newsection );
+ _topProfile.append( newsection );
+ break;
+ }
+ case FrameBoxSunken:
+ {
+ KDFrameProfileSection* newsection;
+ newsection = new KDFrameProfileSection( KDFrameProfileSection::DirSinking,
+ KDFrameProfileSection::CvtPlain,
+ lineWidth, pen );
+ _profileSections.append( newsection );
+ _topProfile.append( newsection );
+ newsection = new KDFrameProfileSection( KDFrameProfileSection::DirPlain,
+ KDFrameProfileSection::CvtPlain,
+ midLineWidth, pen );
+ _profileSections.append( newsection );
+ _topProfile.append( newsection );
+ newsection = new KDFrameProfileSection( KDFrameProfileSection::DirRaising,
+ KDFrameProfileSection::CvtPlain,
+ lineWidth, pen );
+ _profileSections.append( newsection );
+ _topProfile.append( newsection );
+ }
+ break;
+ case FramePanelRaized:
+ {
+ KDFrameProfileSection* newsection;
+ newsection = new KDFrameProfileSection( KDFrameProfileSection::DirRaising,
+ KDFrameProfileSection::CvtPlain,
+ lineWidth, pen );
+ _profileSections.append( newsection );
+ _topProfile.append( newsection );
+ break;
+ }
+ case FramePanelSunken:
+ {
+ KDFrameProfileSection* newsection;
+ newsection = new KDFrameProfileSection( KDFrameProfileSection::DirSinking,
+ KDFrameProfileSection::CvtPlain,
+ lineWidth, pen );
+ _profileSections.append( newsection );
+ _topProfile.append( newsection );
+ }
+ break;
+ case FrameSemicircular:
+ {
+ KDFrameProfileSection* newsection;
+ newsection = new KDFrameProfileSection( KDFrameProfileSection::DirRaising,
+ KDFrameProfileSection::CvtConvex,
+ lineWidth, pen );
+ _profileSections.append( newsection );
+ _topProfile.append( newsection );
+ newsection = new KDFrameProfileSection( KDFrameProfileSection::DirPlain,
+ KDFrameProfileSection::CvtPlain,
+ midLineWidth, pen );
+ _profileSections.append( newsection );
+ _topProfile.append( newsection );
+ newsection = new KDFrameProfileSection( KDFrameProfileSection::DirSinking,
+ KDFrameProfileSection::CvtConcave,
+ lineWidth, pen );
+ _profileSections.append( newsection );
+ _topProfile.append( newsection );
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ _rightProfile = _topProfile;
+ _bottomProfile = _topProfile;
+ _leftProfile = _topProfile;
+ setCorners( CornerNormal, 0 );
+}
+
+
+void KDFrame::createFrameNode( QDomDocument& document, QDomNode& parent,
+ const QString& elementName,
+ const KDFrame& frame )
+{
+ QDomElement frameElement = document.createElement( elementName );
+ parent.appendChild( frameElement );
+ KDXML::createIntNode( document, frameElement, "ShadowWidth",
+ frame._shadowWidth );
+ KDXML::createStringNode( document, frameElement, "CornerName",
+ cornerNameToString( frame._sunPos ) );
+
+ KDXML::createBrushNode( document, frameElement, "Background",
+ frame._background );
+ KDXML::createPixmapNode( document, frameElement, "BackPixmap",
+ frame._backPixmap );
+ KDXML::createStringNode( document, frameElement, "BackPixmapMode",
+ backPixmapModeToString( frame._backPixmapMode ) );
+
+ KDXML::createRectNode( document, frameElement, "InnerRect",
+ frame._innerRect );
+ createFrameProfileNode( document, frameElement, "TopProfile",
+ frame._topProfile );
+ createFrameProfileNode( document, frameElement, "RightProfile",
+ frame._rightProfile );
+ createFrameProfileNode( document, frameElement, "BottomProfile",
+ frame._bottomProfile );
+ createFrameProfileNode( document, frameElement, "LeftProfile",
+ frame._leftProfile );
+ KDFrameCorner::createFrameCornerNode( document, frameElement, "CornerTL",
+ frame._cornerTL );
+ KDFrameCorner::createFrameCornerNode( document, frameElement, "CornerTR",
+ frame._cornerTR );
+ KDFrameCorner::createFrameCornerNode( document, frameElement, "CornerBL",
+ frame._cornerBL );
+ KDFrameCorner::createFrameCornerNode( document, frameElement, "CornerBR",
+ frame._cornerBR );
+}
+
+void KDFrame::createFrameProfileNode( QDomDocument& document, QDomNode& parent,
+ const QString& elementName,
+ KDFrameProfile profile )
+{
+ QDomElement profileElement = document.createElement( elementName );
+ parent.appendChild( profileElement );
+ for( const KDFrameProfileSection* section = profile.first(); section != 0;
+ section = profile.next() )
+ KDFrameProfileSection::createFrameProfileSectionNode( document,
+ profileElement,
+ "ProfileSection",
+ section );
+}
+
+
+void KDFrame::KDFrameCorner::createFrameCornerNode( QDomDocument& document,
+ QDomNode& parent,
+ const QString& elementName,
+ const KDFrameCorner& corner )
+{
+ QDomElement cornerElement = document.createElement( elementName );
+ parent.appendChild( cornerElement );
+ KDXML::createStringNode( document, cornerElement, "Style",
+ KDFrame::cornerStyleToString( corner._style ) );
+ KDXML::createIntNode( document, cornerElement, "Width",
+ corner._width );
+ createFrameProfileNode( document, cornerElement, "Profile",
+ corner._profile );
+}
+
+bool KDFrame::readFrameNode( const QDomElement& element, KDFrame& frame )
+{
+ bool ok = true;
+ int tempShadowWidth;
+ CornerName tempCornerName=CornerTopLeft;
+ QBrush tempBackground;
+ QPixmap tempBackPixmap;
+ BackPixmapMode tempBackPixmapMode=PixStretched;
+ QRect tempInnerRect;
+ KDFrameProfile tempTopProfile, tempRightProfile,
+ tempBottomProfile, tempLeftProfile;
+ KDFrameCorner tempCornerTL, tempCornerTR, tempCornerBL, tempCornerBR;
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "ShadowWidth" ) {
+ ok = ok & KDXML::readIntNode( element, tempShadowWidth );
+ } else if( tagName == "CornerName" ) {
+ QString value;
+ ok = ok & KDXML::readStringNode( element, value );
+ tempCornerName = stringToCornerName( value );
+ } else if( tagName == "Background" ) {
+ ok = ok & KDXML::readBrushNode( element, tempBackground );
+ } else if( tagName == "BackPixmap" ) {
+ ok = ok & KDXML::readPixmapNode( element, tempBackPixmap );
+ } else if( tagName == "BackPixmapMode" ) {
+ QString value;
+ ok = ok & KDXML::readStringNode( element, value );
+ tempBackPixmapMode = stringToBackPixmapMode( value );
+ } else if( tagName == "InnerRect" ) {
+ ok = ok & KDXML::readRectNode( element, tempInnerRect );
+ } else if( tagName == "TopProfile" ) {
+ ok = ok & readFrameProfileNode( element, tempTopProfile );
+ } else if( tagName == "RightProfile" ) {
+ ok = ok & readFrameProfileNode( element, tempRightProfile );
+ } else if( tagName == "BottomProfile" ) {
+ ok = ok & readFrameProfileNode( element, tempBottomProfile );
+ } else if( tagName == "LeftProfile" ) {
+ ok = ok & readFrameProfileNode( element, tempLeftProfile );
+ } else if( tagName == "CornerTL" ) {
+ ok = ok & KDFrameCorner::readFrameCornerNode( element,
+ tempCornerTL );
+ } else if( tagName == "CornerTR" ) {
+ ok = ok & KDFrameCorner::readFrameCornerNode( element,
+ tempCornerTR );
+ } else if( tagName == "CornerBL" ) {
+ ok = ok & KDFrameCorner::readFrameCornerNode( element,
+ tempCornerBL );
+ } else if( tagName == "CornerBR" ) {
+ ok = ok & KDFrameCorner::readFrameCornerNode( element,
+ tempCornerBR );
+ } else {
+ qDebug( "Unknown tag in frame" );
+ }
+ }
+ node = node.nextSibling();
+ }
+
+ if( ok ) {
+ frame._shadowWidth = tempShadowWidth;
+ frame._sunPos = tempCornerName;
+ frame._background = tempBackground;
+ frame._backPixmap = tempBackPixmap;
+ frame._backPixmapMode = tempBackPixmapMode;
+ frame._innerRect = tempInnerRect;
+ frame._topProfile = tempTopProfile;
+ frame._rightProfile = tempRightProfile;
+ frame._bottomProfile = tempBottomProfile;
+ frame._leftProfile = tempLeftProfile;
+ frame._cornerTL = tempCornerTL;
+ frame._cornerTR = tempCornerTR;
+ frame._cornerBL = tempCornerBL;
+ frame._cornerBR = tempCornerBR;
+ }
+
+ return ok;
+}
+
+
+bool KDFrame::readFrameProfileNode( const QDomElement& element,
+ KDFrameProfile& profile )
+{
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "ProfileSection" ) {
+ KDFrameProfileSection* section = new KDFrameProfileSection();
+ KDFrameProfileSection::readFrameProfileSectionNode( element,
+ section );
+ profile.append( section );
+ } else {
+ qDebug( "Unknown tag in double map" );
+ return false;
+ }
+ }
+ node = node.nextSibling();
+ }
+
+ return true;
+}
+
+
+bool KDFrame::KDFrameCorner::readFrameCornerNode( const QDomElement& element,
+ KDFrameCorner& corner )
+{
+ bool ok = true;
+ CornerStyle tempStyle=CornerNormal;
+ int tempWidth;
+ KDFrameProfile tempProfile;
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "Style" ) {
+ QString value;
+ ok = ok & KDXML::readStringNode( element, value );
+ tempStyle = stringToCornerStyle( value );
+ } else if( tagName == "Width" ) {
+ ok = ok & KDXML::readIntNode( element, tempWidth );
+ } else if( tagName == "Profile" ) {
+ KDFrameProfile profile;
+ ok = ok & readFrameProfileNode( element, profile );
+ } else {
+ qDebug( "Unknown tag in frame" );
+ }
+ }
+ node = node.nextSibling();
+ }
+
+ if( ok ) {
+ corner._style = tempStyle;
+ corner._width = tempWidth;
+ corner._profile = tempProfile;
+ }
+
+ return ok;
+}
+
+#include "KDFrame.moc"
diff --git a/libkdchart/KDFrame.h b/libkdchart/KDFrame.h
new file mode 100644
index 0000000..bbc4915
--- /dev/null
+++ b/libkdchart/KDFrame.h
@@ -0,0 +1,1167 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDFRAME_H__
+#define __KDFRAME_H__
+
+#include <qapplication.h>
+#include <qfont.h>
+#include <qcolor.h>
+#include <qpixmap.h>
+#include <qpen.h>
+#include <qmap.h>
+#include <qobject.h>
+#include <qtextstream.h>
+#include <qdom.h>
+
+#include <KDFrameProfileSection.h>
+
+
+/** \file KDFrame.h
+ \brief Header of the KDFrame class providing highly configurable rectangular frame drawing.
+
+ \ifnot v200
+ This class is work in progress, at present only single line frame borders
+ and (scaled/streched) background pictures are available.
+ See KDChartParams::setSimpleFrame() to learn how to use them.
+ \else
+ A frame may consist of an (optional) border and/or an (optional) background.
+ The border may consist of up to four edges and/or up to four border corners.
+
+ \note Each of the edges and each of the corners may use their own user-definable profile.
+
+ The frame corners ( see types defined in \c CornerStyle ) are set up via setCorner()
+
+ Some commonly used frame profiles (e.g. raised box, sunken panel) are predefined in \c SimpleFrame, see setSimpleFrame().
+ To learn how to specify your frame profiles have a look at example code given with setProfile()
+ \endif
+ */
+
+
+/**
+ \brief The main class of KDFrame.
+
+ KDFrame is made for highly configurable rectangular frame drawing.
+
+ A frame may consist of an (optional) border and/or an (optional) background.
+ \ifndef v200
+ This class is work in progress, at present only single line frame borders
+ and (scaled/streched) background pictures are available.
+ See KDChartParams::setSimpleFrame() to learn how to use them.
+ \else
+ The border may consist of up to four edges and/or up to four border corners.
+
+ \note Each of the edges and each of the corners may use their own user-definable profile.
+
+ The frame corners ( see types defined in CornerStyle ) are set up via setCorner()
+
+ Some commonly used frame profiles (e.g. raised box, sunken panel) are predefined in SimpleFrame, see setSimpleFrame().
+ To learn how to specify your frame profiles have a look at example code given with setProfile()
+ \endif
+ */
+class KDCHART_EXPORT KDFrame : public QObject
+{
+ Q_OBJECT
+ Q_ENUMS( BackPixmapMode )
+ Q_ENUMS( SimpleFrame )
+ Q_ENUMS( ProfileName )
+ Q_ENUMS( CornerName )
+ Q_ENUMS( CornerStyle )
+ Q_ENUMS( KDFramePaintSteps )
+
+public:
+ //// GENERAL
+
+
+ /**
+ These are ways how to display a pixmap that might
+ be painted into the inner area.
+
+ \Note To have a 'tiled' background image do not use a background
+ pixmap but use a background <b>brush</b> holding this pixmap.
+ */
+ enum BackPixmapMode { PixCentered, PixScaled, PixStretched };
+
+public slots:
+
+ /**
+ Converts the specified background pixmap mode enum to a string
+ representation.
+
+ \param type the background pixmap mode to convert
+ \return the string representation of the background pixmap mode enum
+ */
+ static QString backPixmapModeToString( BackPixmapMode type ) {
+ switch( type ) {
+ case PixCentered:
+ return "Centered";
+ case PixScaled:
+ return "Scaled";
+ case PixStretched:
+ return "Stretched";
+ }
+
+ return "Stretched";
+ }
+
+
+ /**
+ Converts the specified string to a background pixmap mode enum value.
+
+ \param string the string to convert
+ \return the background pixmap mode enum value
+ */
+ static BackPixmapMode stringToBackPixmapMode( const QString& string ) {
+ if( string == "Centered" )
+ return PixCentered;
+ else if( string == "Scaled" )
+ return PixScaled;
+ else if( string == "Stretched" )
+ return PixStretched;
+
+ return PixStretched;
+ }
+
+
+public:
+
+
+ /**
+ These simple frames are pre-defined for your convenience
+
+ \li \c FrameFlat a flat rectangular frame
+ \li \c FrameElegance a flat frame consisting of three lines
+ \li \c FrameBoxRaized a raised box
+ \li \c FrameBoxSunken a sunken box
+ \li \c FramePanelRaized a raised panel
+ \li \c FramePanelSunken a sunken panel
+ \li \c FrameSemicircular a raised box with round edges
+
+ \ifnot v200
+ All pre-defined frames have normal corners.
+ \else
+ All pre-defined frames have normal corners but
+ of course you may specify differently looking corners by
+ calling setCorners() (or setCorner(), resp.) after having
+ called setSimpleFrame()
+
+ \sa setSimpleFrame
+ \endif
+ */
+ enum SimpleFrame { FrameFlat, FrameElegance,
+ FrameBoxRaized, FrameBoxSunken,
+ FramePanelRaized, FramePanelSunken,
+ FrameSemicircular };
+
+public slots:
+
+ /**
+ \ifnot v200
+ \deprecated Feature scheduled for future release, at present not implemented.
+ \else
+ Select a pre-defined frame.
+ This methode is provided for convenience, the same results can be obtained by calling
+ addProfileSection multiple times specifying the appropriate parameters and finally
+ setting the corners to \c CornerNormal
+
+ \note When using FrameElegance the midLineWidth value will be ignored since
+ in this special case the lineValue will indicate the <b>total width</b> of the frame.
+ FrameElegance frames look best when lineWidth is 16 or the multiple of 16.
+
+ \Note To have a 'tiled' background image do not use a background
+ pixmap but use a background <b>brush</b> holding this pixmap.
+
+ See setProfile for a short example using this method.
+
+ \param frame one of the values defined for enum \c SimpleFrame
+ \param lineWidth for FrameFlat and FrameElegance: the complete frame width;
+ for frames with 2-line edges (FramePanelRaized, FramePanelSunken): the width of each of the lines;
+ for frames with 3-line edges (FrameBoxRaized, FrameBoxSunken, FrameSemicircular): the width of the outer and the
+ width of the inner line.
+ \param midLineWidth only used for frames with 3-line edges: the width
+ of the middle line.
+ \param pen the basic pen to be used for this frame's lines
+ \param background the brush to be used for the frame's background or QBrush() if the background is not to be filled by a brush
+ \param backPixmap if not zero points to a pixmap to be used for the background
+ \param backPixmapMode determines how the size pixmap is adjusted to the frame size,
+ see \c BackPixmapMode for the possible values.
+
+ \sa SimpleFrame, BackPixmapMode, addProfileSection, setProfile, profile, setCorners, setCorner, cornerStyle, cornerWidth
+ \endif
+ */
+ void setSimpleFrame( SimpleFrame frame,
+ int lineWidth,
+ int midLineWidth,
+ QPen pen,
+ QBrush background = QBrush(),
+ const QPixmap* backPixmap = 0,
+ BackPixmapMode backPixmapMode = PixStretched );
+
+public:
+ /**
+ \ifnot v200
+ \deprecated Feature scheduled for future release, at present not implemented.
+ \else
+ Names of the four frame edges
+
+ \li \c ProfileTop
+ \li \c ProfileRight
+ \li \c ProfileBottom
+ \li \c ProfileLeft
+
+ \sa setSimpleFrame, clearProfile, addProfileSection, setProfile, profile
+ \endif
+ */
+ enum ProfileName { ProfileTop, ProfileRight,
+ ProfileBottom, ProfileLeft };
+
+public slots:
+ /**
+ \ifnot v200
+ \deprecated Feature scheduled for future release, at present not implemented.
+ \else
+ Add another section to one of the frames profiles.
+
+ \note The sections will be drawn in the order in which they were added to the profile
+ beginning at the outside and ending with the inner section of the frame
+
+ See setProfile for a short example using this method.
+
+ \sa ProfileName, setSimpleFrame, addProfileSection, setProfile, profile
+ \endif
+ */
+ void clearProfile( ProfileName name );
+
+ /**
+ \ifnot v200
+ \deprecated Feature scheduled for future release, at present not implemented.
+ \else
+ Add another section to one of the frames profiles.
+
+ \note The sections will be drawn in the order in which they were added to the profile
+ beginning at the outside and ending with the inner section of the frame.
+
+ Adding a gap between two sections can be done by specifying a <b>QPen( Qt::NoPen )</b>.
+
+ See setProfile for a short example using this method.
+
+ \sa ProfileName, setSimpleFrame, clearProfile, setProfile, profile
+ \endif
+ */
+ void addProfileSection( ProfileName name,
+ int wid,
+ QPen pen,
+ KDFrameProfileSection::Direction dir = KDFrameProfileSection::DirPlain, // PENDING(blackie) possible enum problem
+ KDFrameProfileSection::Curvature curv = KDFrameProfileSection::CvtPlain );
+
+ /**
+ \ifnot v200
+ \deprecated Feature scheduled for future release, at present not implemented.
+ \else
+ Specify one of the frames profiles by copying another KDFrameProfile.
+ Use this function if a profile shall look the same as another one.
+
+ <b>Example:</b>
+
+ \verbatim
+ // instantiate a frame around an inner rectangle 50/20, 250/20
+ KDFrame myFrame( 50,20, 250,120 );
+
+ // select a very simple rectangular frame with normal corners, black border, white background
+ myFrame.setSimpleFrame( KDFrame::FrameFlat, 1, 0, QPen( Qt::Black ), QBrush( Qt::White ) );
+
+ // make the top profile look more nice
+ myFrame.clearProfile( KDFrame::ProfileTop );
+ myFrame.addProfileSection( KDFrame::ProfileTop, 2, QPen( Qt::Black ),
+ KDFrameProfileSection::DirPlain,
+ KDFrameProfileSection::CvtPlain );
+ myFrame.addProfileSection( KDFrame::ProfileTop, 5, QPen( Qt::NoPen ),
+ KDFrameProfileSection::DirPlain,
+ KDFrameProfileSection::CvtPlain );
+ myFrame.addProfileSection( KDFrame::ProfileTop, 1, QPen( Qt::Black ),
+ KDFrameProfileSection::DirPlain,
+ KDFrameProfileSection::CvtPlain );
+
+ // copy the top profile settings into the bottom profile
+ myFrame.setProfile( KDFrame::ProfileBottom,
+ myFrame.profile( KDFrame::ProfileTop ) );
+ \endverbatim
+
+
+ \sa ProfileName, setSimpleFrame, clearProfile, addProfileSection, profile
+ \endif
+ */
+ void setProfile( ProfileName name, const KDFrameProfile& profile );
+
+ /**
+ \ifnot v200
+ \deprecated Feature scheduled for future release, at present not implemented.
+ \else
+ Return one of the frames profiles.
+
+ \sa ProfileName, setSimpleFrame, clearProfile, addProfileSection, setProfile
+ \endif
+ */
+ const KDFrameProfile& profile( ProfileName name ) const;
+
+public:
+
+ /**
+ \ifnot v200
+ \deprecated Feature scheduled for future release, at present not implemented.
+ \else
+ Names of the frame corners:
+
+ \li \c CornerTopLeft
+ \li \c CornerTopRight
+ \li \c CornerBottomLeft
+ \li \c CornerBottomRight
+
+ \sa setCorners, setCorner, setSunPos, cornerStyle, cornerWidth, sunPos
+ \endif
+ */
+ enum CornerName { CornerTopLeft,
+ CornerTopRight,
+ CornerBottomLeft,
+ CornerBottomRight,
+ CornerUNKNOWN };
+
+public slots:
+ /**
+ \ifnot v200
+ \deprecated Feature scheduled for future release, at present not implemented.
+ \else
+ Converts the specified corner name enum to a string representation.
+
+ \param type the corner name to convert
+ \return the string representation of the corner name enum
+ \endif
+ */
+ static QString cornerNameToString( CornerName type ) {
+ switch( type ) {
+ case CornerTopLeft:
+ return "TopLeft";
+ case CornerTopRight:
+ return "TopRight";
+ case CornerBottomLeft:
+ return "BottomLeft";
+ case CornerBottomRight:
+ return "BottomRight";
+ case CornerUNKNOWN:
+ return "UNKNOWN";
+ }
+
+ return "UNKNOWN";
+ }
+
+
+ /**
+ \ifnot v200
+ \deprecated Feature scheduled for future release, at present not implemented.
+ \else
+ Converts the specified string to a corner name enum value.
+
+ \param string the string to convert
+ \return the corner name enum value
+ \endif
+ */
+ static CornerName stringToCornerName( const QString& string ) {
+ if( string == "TopLeft" )
+ return CornerTopLeft;
+ else if( string == "TopRight" )
+ return CornerTopRight;
+ else if( string == "BottomLeft" )
+ return CornerBottomLeft;
+ else if( string == "BottomRight" )
+ return CornerBottomRight;
+ else if( string == "UNKNOWN" )
+ return CornerUNKNOWN;
+
+ return CornerUNKNOWN;
+ }
+
+public:
+
+
+ /**
+ \ifnot v200
+ \deprecated Feature scheduled for future release, at present not implemented.
+ \else
+ Look of the frame corners:
+
+ \li \c CornerNormal a square angle corner.
+ \li \c CornerRound a quarter of a circle.
+ \li \c CornerOblique corner cut-off by 45 degrees.
+
+ \sa setCorners, setCorner, cornerStyle, cornerWidth
+ \endif
+ */
+ enum CornerStyle { CornerNormal,
+ CornerRound,
+ CornerOblique };
+
+public slots:
+ /**
+ \ifnot v200
+ \deprecated Feature scheduled for future release, at present not implemented.
+ \else
+ Converts the specified corner style enum to a string representation.
+
+ \param type the corner style enum to convert
+ \return the string representation of the corner style enum
+ \endif
+ */
+ static QString cornerStyleToString( CornerStyle type ) {
+ switch( type ) {
+ case CornerNormal:
+ return "Normal";
+ case CornerRound:
+ return "Round";
+ case CornerOblique:
+ return "Oblique";
+ }
+
+ return "Normal";
+ }
+
+
+ /**
+ \ifnot v200
+ \deprecated Feature scheduled for future release, at present not implemented.
+ \else
+ Converts the specified string to a corner stylye enum value.
+
+ \param string the string to convert
+ \return the corner style enum value
+ \endif
+ */
+ static CornerStyle stringToCornerStyle( const QString& string ) {
+ if( string == "Normal" )
+ return CornerNormal;
+ else if( string == "Round" )
+ return CornerRound;
+ else if( string == "Oblique" )
+ return CornerOblique;
+
+ return CornerNormal;
+ }
+
+
+public:
+
+// MOC_SKIP_BEGIN
+ /**
+ \ifnot v200
+ \deprecated Feature scheduled for future release, at present not implemented.
+ \else
+ Helper class storing settings for one corner of the frame.
+
+ To set/retrieve information stored in this class please use
+ the appropriate methods of the KDFrame class.
+
+ \sa setCorners, setCorner, cornerStyle, cornerWidth, cornerProfile, CornerName, CornerStyle
+ \endif
+ */
+ class KDCHART_EXPORT KDFrameCorner
+ {
+ friend class KDFrame;
+ public:
+ KDFrameCorner( CornerStyle style = CornerNormal,
+ int width = 0,
+ KDFrameProfile* const profile = 0 )
+ : _style( style ),
+ _width( width )
+ {
+ if( profile )
+ _profile = *profile;
+ else
+ _profile.clear();
+ }
+ /**
+ Destructor. Only defined to have it virtual.
+ */
+ virtual ~KDFrameCorner();
+
+ /**
+ \ifnot v200
+ \deprecated Feature scheduled for future release, at present not implemented.
+ \else
+ Creates a DOM element node that represents a frame corner for use
+ in a DOM document.
+
+ \param document the DOM document to which the node will belong
+ \param parent the parent node to which the new node will be appended
+ \param elementName the name of the new node
+ \param corner the corner to be represented
+ \endif
+ */
+ static void createFrameCornerNode( QDomDocument& document,
+ QDomNode& parent,
+ const QString& elementName,
+ const KDFrameCorner& corner );
+
+ /**
+ \ifnot v200
+ \deprecated Feature scheduled for future release, at present not implemented.
+ \else
+ Reads data from a DOM element node that represents a frame
+ corner and fills a KDFrameCorner object with the data.
+
+ \param element the DOM element to read from
+ \param corner the frame corner object to read the data into
+ \endif
+ */
+ static bool readFrameCornerNode( const QDomElement& element,
+ KDFrameCorner& corner );
+
+ protected:
+ void setAll( CornerStyle style,
+ int width,
+ KDFrameProfile* const profile = 0 )
+ {
+ _style = style;
+ _width = width;
+ if( profile )
+ _profile = *profile;
+ else
+ _profile.clear();
+ }
+ CornerStyle style() const
+ {
+ return _style;
+ }
+ int width() const
+ {
+ return _width;
+ }
+ const KDFrameProfile& profile() const
+ {
+ return _profile;
+ }
+ private:
+ CornerStyle _style;
+ int _width;
+ KDFrameProfile _profile;
+ };
+
+// MOC_SKIP_END
+
+public slots:
+ /**
+ \ifnot v200
+ \deprecated Feature scheduled for future release, at present not implemented.
+ \else
+ Specify the look and the width and (optionally) the profile
+ of one of the frame corners.
+
+ \sa setCorners, cornerStyle, cornerWidth, cornerWidth, CornerName, CornerStyle
+ \endif
+ */
+ void setCorner( CornerName name,
+ CornerStyle style,
+ int width,
+ KDFrameProfile* const profile = 0 )
+ {
+ switch( name ) {
+ case CornerTopLeft: _cornerTL.setAll( style, width, profile );
+ break;
+ case CornerTopRight: _cornerTR.setAll( style, width, profile );
+ break;
+ case CornerBottomLeft: _cornerBL.setAll( style, width, profile );
+ break;
+ case CornerBottomRight: _cornerBR.setAll( style, width, profile );
+ break;
+ case CornerUNKNOWN:
+ break;
+ }
+ }
+
+ /**
+ \ifnot v200
+ \deprecated Feature scheduled for future release, at present not implemented.
+ \else
+ Specify the look and the width and (optionally) the profile
+ of all of the frame corners.
+
+ \sa setCorner, cornerStyle, cornerWidth, CornerName, CornerStyle
+ \endif
+ */
+ void setCorners( CornerStyle style,
+ int width,
+ KDFrameProfile* const profile = 0 )
+ {
+ _cornerTL.setAll( style, width, profile );
+ _cornerTR.setAll( style, width, profile );
+ _cornerBL.setAll( style, width, profile );
+ _cornerBR.setAll( style, width, profile );
+ }
+
+
+ /**
+ \ifnot v200
+ \deprecated Feature scheduled for future release, at present not implemented.
+ \else
+ Returns the look of one of the frame corners.
+
+ \sa setCorners, cornerWidth, CornerName, CornerStyle
+ \endif
+ */
+ CornerStyle cornerStyle( CornerName name ) const
+ {
+ switch( name ) {
+ case CornerTopLeft: return _cornerTL.style();
+ case CornerTopRight: return _cornerTR.style();
+ case CornerBottomLeft: return _cornerBL.style();
+ case CornerBottomRight: return _cornerBR.style();
+ case CornerUNKNOWN:
+ default: return CornerNormal;
+ }
+ }
+
+ /**
+ \ifnot v200
+ \deprecated Feature scheduled for future release, at present not implemented.
+ \else
+ Returns the width of one of the frame corners.
+
+ \sa setCorners, cornerStyle, CornerName, CornerStyle
+ \endif
+ */
+ int cornerWidth( CornerName name ) const
+ {
+ switch( name ) {
+ case CornerTopLeft: return _cornerTL.width();
+ case CornerTopRight: return _cornerTR.width();
+ case CornerBottomLeft: return _cornerBL.width();
+ case CornerBottomRight: return _cornerBR.width();
+ case CornerUNKNOWN:
+ default: return 0;
+ }
+ }
+
+ /**
+ \ifnot v200
+ \deprecated Feature scheduled for future release, at present not implemented.
+ \else
+ Returns the profile of one of the frame corners.
+
+ \sa setCorners, cornerStyle, CornerName, CornerStyle
+ \endif
+ */
+ const KDFrameProfile& cornerProfile( CornerName name ) const
+ {
+ switch( name ) {
+ case CornerUNKNOWN:
+ case CornerTopLeft: return _cornerTL.profile();
+ case CornerTopRight: return _cornerTR.profile();
+ case CornerBottomLeft: return _cornerBL.profile();
+ case CornerBottomRight: return _cornerBR.profile();
+ default: return _cornerTL.profile();
+ }
+ }
+
+
+ /**
+ \ifnot v200
+ \deprecated Feature scheduled for future release, at present not implemented.
+ \else
+ Specifies the position of the sun, normally this is the upper left corner.
+
+ \sa sunPos
+ \endif
+ */
+ void setSunPos( CornerName sunPos )
+ {
+ _sunPos = sunPos;
+ }
+
+ /**
+ \ifnot v200
+ \deprecated Feature scheduled for future release, at present not implemented.
+ \else
+ Returns the position of the sun.
+
+ \sa setSunPos
+ \endif
+ */
+ CornerName sunPos() const
+ {
+ return _sunPos;
+ }
+
+
+ /**
+ Specifies the brush to be used to fill the inner area of this frame,
+ calling this methode without passing in a parameter re-sets the background brush
+ to \c QBrush( \cQt::NoBrush \c).
+
+ \Note To have a 'tiled' background image just use a brush
+ holding this pixmap - for other ways to show background
+ images please use setBackPixmap.
+
+ \sa setBackPixmap, background
+ */
+ void setBackground( QBrush background = QBrush( Qt::NoBrush ) )
+ {
+ _background = background;
+ }
+
+ /**
+ Specifies a pixmap to be used to fill the inner area of this frame,
+ calling this methode without passing in a parameter removes the background pixmap.
+
+ \Note To have a 'tiled' background image do not use setBackPixmap
+ but use setBackground specifying a brush holding the pixmap.
+
+ \sa setBackground, background
+ */
+ void setBackPixmap( const QPixmap* backPixmap = 0,
+ BackPixmapMode backPixmapMode = PixStretched )
+ {
+ _backPixmap = backPixmap ? *backPixmap : QPixmap();
+ _backPixmapMode = backPixmapMode;
+ }
+
+ /**
+ Returns the brush that is used to fill the inner area of this frame,
+ or a QBrush( \cNoBrush \c) if no background is to be drawn.
+
+ \param backPixmap receives the pixmap used for drawing the background or
+ a null pixmap, test this by calling backPixmap.isNull()
+
+ \Note If a 'tiled' background image is shown the respective pixmap
+ may be found by calling the <b>brush's</b> pixmap() function.
+
+ \sa setBackground, setBackPixmap
+ */
+ const QBrush& background( const QPixmap*& backPixmap,
+ BackPixmapMode& backPixmapMode ) const
+ {
+ backPixmap = &_backPixmap;
+ backPixmapMode = _backPixmapMode;
+ return _background;
+ }
+
+
+ /**
+ Specifies the position and the size of area that is surrounded by the frame.
+
+ \note The rectangle applies to the <b>inner</b> area of the frame.
+ The Frame is drawn around this area: touching it but not covering it.
+ The outer size of the frame and the position of its outer left corner
+ depends from the frame profile width(s).
+
+ \sa innerRect, setCorners, setSimpleFrame, setProfile
+ */
+ void setInnerRect( QRect innerRect )
+ {
+ _innerRect = innerRect;
+ }
+
+ /**
+ Returns the position and the size of the frame.
+
+ \note The rectangle returns to the <b>inner</b> area of the frame.
+ The Frame is drawn around this area: touching it but not covering it.
+ The outer size of the frame and the position of its outer left corner
+ depends from the frame profile width.
+
+ \sa setInnerRect, setProfile
+ */
+ QRect innerRect() const
+ {
+ return _innerRect;
+ }
+
+
+ /**
+ Paint methode drawing the background (if any) of the frame.
+
+ \note Under normal circumstances you will <b>never</b> have to
+ call this methode since it is called internally by paint() if you
+ start it with \c PaintBackground (or with \c PaintAll, resp.) for the \c steps parameter.
+ */
+ virtual void paintBackground( QPainter& painter, const QRect& innerRect ) const;
+ /**
+ Paint methode drawing the edges (if any) of the frame.
+
+ \note Under normal circumstances you will <b>never</b> have to
+ call this methode since it is called internally by paint() if you
+ start it with \c PaintEdges (or with \c PaintAll, \c PaintBorder, resp.) for the \c steps parameter.
+ */
+ virtual void paintEdges( QPainter& painter, const QRect& innerRect ) const;
+ /**
+ Paint methode drawing the corners (if any) of the frame.
+
+ \note Under normal circumstances you will <b>never</b> have to
+ call this methode since it is called internally by paint() if you
+ start it with \c PaintCorners (or with \c PaintAll, \c PaintBorder, resp.) for the \c steps parameter.
+ */
+ virtual void paintCorners( QPainter& painter, const QRect& innerRect ) const;
+
+
+public:
+ /**
+ The different steps taken to paint the frame:
+ first paint the background then the edges then the corners.
+ By choosing \c PaintAll all the parts of the frame will be drawn.
+
+ \li \c PaintBackground -- first paints the brush, then paints the pixmap if any
+ \li \c PaintEdges
+ \li \c PaintCorners
+ \li \c PaintBorder -- paint the edges and the corners but not the background
+ \li \c PaintAll
+
+ \sa paint
+ */
+ enum KDFramePaintSteps { PaintBackground, PaintEdges, PaintCorners, PaintBorder, PaintAll };
+
+public slots:
+
+ /**
+ Paint methode actually drawing the frame.
+
+ This method must be called from inside the \c paint() methode of your widget.
+
+ In order not to override the inner contents of the frame you normally would
+ first call <b>paint( painter, PaintBackground );</b> then do all the inside
+ drawing and finally call <b>paint( painter, PaintBorder );</b>. In case the
+ inner contents <b>are</b> allowed to (partially) override the frame border
+ you could do the following: First call <b>paint( painter, PaintBackground );</b>
+ immediately followed by <b>paint( painter, PaintEdges );</b> then do all your
+ inside work and finally draw <b>paint( painter, PaintCorners );</b>.
+
+ \param painter The QPainter to be used for drawing.
+ \param steps The part of the frame to be drawn, use KDFrame::PaintAll to draw the entire frame and the background,
+ use KDFrame::PaintBackground to draw only the background, use KDFrame::PaintEdges to draw just the edges,
+ use KDFrame::PaintCorners to draw only the corners.
+ \param innerRect The area inside the frame. Use this parameter to temporarily override the \c innerRect set by
+ the constructor of KDFrame or by setInnerRect(). This approach can be usefull if you want to draw several
+ frames that differ only regarding to their position and size but share the same edges/corners/background settings.
+ In this case you could decide to instantiate only one KDFrame set up the desired settings and just call
+ its paint() methode several time - giving it the appropriate innerRect for each frame. This would result in
+ less memory usage since you could use that single KDFrame object as kind of a shared ressource.
+ */
+ virtual void paint( QPainter* painter,
+ KDFramePaintSteps steps = PaintAll,
+ QRect innerRect = QRect(0,0,0,0) ) const;
+
+
+ /**
+ Remove all settings and specify no border, no edges, no background.
+ */
+ void clearAll()
+ {
+ _background = QBrush();
+ _backPixmap = QPixmap();
+ _backPixmapMode = PixStretched;
+ _shadowWidth = 0;
+ _sunPos = CornerTopLeft;
+ _innerRect = QRect( 0,0, 0,0 );
+ _topProfile.clear();
+ _rightProfile.clear();
+ _bottomProfile.clear();
+ _leftProfile.clear();
+ _cornerTL.setAll( CornerNormal, 0, 0 );
+ _cornerTR.setAll( CornerNormal, 0, 0 );
+ _cornerBL.setAll( CornerNormal, 0, 0 );
+ _cornerBR.setAll( CornerNormal, 0, 0 );
+ }
+
+public:
+
+ /**
+ Default Constructor. Defines default values.
+
+ The constructor does *not* have a \c parent parameter since drawing
+ of the frame is not done transparently but by (one or more) explicit
+ calls of the frames paint() methode. See explanation given there
+ to learn about the why and how of this...
+
+ \note The rectangle applies to the <b>inner</b> area of the frame.
+ The Frame is drawn around this area: touching it but not covering it.
+ The outer size of the frame and the position of its outer left corner
+ depends from the frame profile width.
+
+ \Note To have a 'tiled' background image do not specify a backPixmap
+ but use a background <b>brush</b> holding this pixmap.
+
+ \sa rect, setInnerRect, setProfile
+ */
+ KDFrame( QRect innerRect = QRect(0,0,0,0),
+ SimpleFrame frame = FrameFlat,
+ int lineWidth = 1,
+ int midLineWidth = 0,
+ QPen pen = QPen(), // solid black line with 0 width
+ QBrush background = QBrush(), // no brush
+ const QPixmap* backPixmap = 0, // no pixmap
+ BackPixmapMode backPixmapMode = PixStretched,
+ int shadowWidth = 0,
+ CornerName sunPos = CornerTopLeft )
+ {
+ _profileSections.setAutoDelete( true );
+ _innerRect = innerRect;
+ setSimpleFrame( frame,
+ lineWidth,
+ midLineWidth,
+ pen,
+ background,
+ backPixmap,
+ backPixmapMode );
+ _shadowWidth = shadowWidth;
+ _sunPos = sunPos;
+ }
+
+
+/*
+ Constructor. Set up a frame by copying settings of another frame.
+
+ The constructor does *not* have a \c parent parameter since drawing
+ of the frame is not done transparently but by (one or more) explicit
+ calls of the frames paint() methode. See explanation given there
+ to learn about the why and how of this...
+
+ \note The rectangle applies to the <b>inner</b> area of the frame.
+ The Frame is drawn around this area: touching it but not covering it.
+ The outer size of the frame and the position of its outer left corner
+ depends from the frame profile width.
+
+ \sa rect, setInnerRect, setProfile
+
+ KDFrame( QRect innerRect,
+ const KDFrame& R,
+ CornerName sunPos = CornerUNKNOWN )
+ {
+ deepCopy( *this, R );
+ if( innerRect.isValid() )
+ _innerRect = innerRect;
+ if( CornerUNKNOWN != sunPos )
+ _sunPos = sunPos;
+
+ _profileSections.setAutoDelete( true );
+ }
+*/
+private:
+ KDFrame( const KDFrame& ) : QObject(0) {}
+ KDFrame& operator=( const KDFrame& ){return *this;}
+
+
+
+public:
+ /**
+ Destructor. Only defined to have it virtual.
+ */
+ virtual ~KDFrame();
+
+ /*
+ Kopierroutine, aufgerufen im Copy-C'tor und im Zuweisungs-Operator
+ */
+ static void deepCopy( KDFrame& D, const KDFrame& R )
+ {
+ D._shadowWidth = R._shadowWidth;
+ D._sunPos = R._sunPos;
+ D._background = R._background;
+ D._backPixmap = R._backPixmap;
+ D._backPixmapMode = R._backPixmapMode;
+ D._innerRect = R._innerRect;
+ D._topProfile = R._topProfile;
+ D._rightProfile = R._rightProfile;
+ D._bottomProfile = R._bottomProfile;
+ D._leftProfile = R._leftProfile;
+ D._cornerTL = R._cornerTL;
+ D._cornerTR = R._cornerTR;
+ D._cornerBL = R._cornerBL;
+ D._cornerBR = R._cornerBR;
+ D._profileSections= R._profileSections;
+ D._profileSections.setAutoDelete( true );
+ R.setProfileSectionsAutoDelete( false );
+ }
+
+ friend QTextStream& operator<<( QTextStream& s, const KDFrame& p );
+ friend QTextStream& operator>>( QTextStream& s, KDFrame& p );
+
+ /**
+ Creates a DOM element node that represents a frame for use
+ in a DOM document.
+
+ \param document the DOM document to which the node will belong
+ \param parent the parent node to which the new node will be appended
+ \param elementName the name of the new node
+ \param frame the frame to be represented
+ */
+ static void createFrameNode( QDomDocument& document, QDomNode& parent,
+ const QString& elementName,
+ const KDFrame& frame );
+
+ /**
+ Creates a DOM element node that represents a frame profile for use
+ in a DOM document.
+
+ \param document the DOM document to which the node will belong
+ \param parent the parent node to which the new node will be appended
+ \param elementName the name of the new node
+ \param profile the profile to be represented
+ */
+ static void createFrameProfileNode( QDomDocument& document,
+ QDomNode& parent,
+ const QString& elementName,
+ KDFrameProfile profile );
+
+ /**
+ Reads data from a DOM element node that represents a frame
+ object and fills a KDFrame object with the data.
+
+ \param element the DOM element to read from
+ \param frame the frame object to read the data into
+ */
+ static bool readFrameNode( const QDomElement& element,
+ KDFrame& frame );
+
+ /**
+ Reads data from a DOM element node that represents a frame
+ profile and fills a KDFrameProfile object with the data.
+
+ \param element the DOM element to read from
+ \param profile the frame profile object to read the data into
+ */
+ static bool readFrameProfileNode( const QDomElement& element,
+ KDFrameProfile& profile );
+
+signals:
+ /**
+ This signal is emitted when any of the frame parameters has changed.
+ */
+ void changed();
+
+private:
+ void setProfileSectionsAutoDelete( bool on ) const
+ {
+ ((KDFrame*)this)->_profileSections.setAutoDelete( on );
+ }
+
+ /**
+ Stores the width of the shadow.
+ */
+ int _shadowWidth;
+
+ /**
+ Stores the position of the sun.
+ */
+ CornerName _sunPos;
+
+ /**
+ Stores the brush to be used to fill the inner area.
+ */
+ QBrush _background;
+
+ /**
+ Stores the pixmap to be painted into the inner area.
+ */
+ QPixmap _backPixmap;
+
+ /**
+ Stores the way how to display the pixmap that is
+ to be painted into the inner area.
+ */
+ BackPixmapMode _backPixmapMode;
+
+ /**
+ Stores the position and size of the frame.
+ */
+ QRect _innerRect;
+
+ /**
+ Stores all currently used profile settings for a controlled deletion.
+
+ \note The other pointer lists (like _topProfile or _rightProfile)
+ do NOT delete the objects that belong to their pointers,
+ but all sections will be deleted via this extra _profileSections list:
+ this allows for using the same KDFrameProfileSection* to be used
+ by several lists - typically done for simple frames where all 4 sides
+ are composed the same way.
+ */
+ KDFrameProfile _profileSections;
+
+ /**
+ Stores the profile settings for the top side of the frame.
+ */
+ KDFrameProfile _topProfile;
+ /**
+ Stores the profile settings for the right side of the frame.
+ */
+ KDFrameProfile _rightProfile;
+ /**
+ Stores the profile settings for the bottom side of the frame.
+ */
+ KDFrameProfile _bottomProfile;
+ /**
+ Stores the profile settings for the left side of the frame.
+ */
+ KDFrameProfile _leftProfile;
+
+ /**
+ Stores the settings for the top left corner of the frame.
+ */
+ KDFrameCorner _cornerTL;
+ /**
+ Stores the settings for the top right corner of the frame.
+ */
+ KDFrameCorner _cornerTR;
+ /**
+ Stores the settings for the bottom left corner of the frame.
+ */
+ KDFrameCorner _cornerBL;
+ /**
+ Stores the settings for the bottom right corner of the frame.
+ */
+ KDFrameCorner _cornerBR;
+};
+
+
+/**
+ Writes the KDFrame object p as an XML document to the text stream s.
+
+ \param s the text stream to write to
+ \param p the KDFrame object to write
+ \return the text stream after the write operation
+ */
+QTextStream& operator<<( QTextStream& s, const KDFrame& p );
+
+
+/**
+ Reads the an XML document from the text stream s into the
+ KDFrame object p
+
+ \param s the text stream to read from
+ \param p the KDFrame object to read into
+ \return the text stream after the read operation
+ */
+QTextStream& operator>>( QTextStream& s, KDFrame& p );
+
+
+#endif
diff --git a/libkdchart/KDFrameProfileSection.cpp b/libkdchart/KDFrameProfileSection.cpp
new file mode 100644
index 0000000..bfd64ff
--- /dev/null
+++ b/libkdchart/KDFrameProfileSection.cpp
@@ -0,0 +1,95 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#include <KDFrameProfileSection.h>
+#include <KDXMLTools.h>
+
+KDFrameProfileSection::~KDFrameProfileSection()
+{
+ // Intentionally left blank for now.
+}
+
+
+void KDFrameProfileSection::createFrameProfileSectionNode( QDomDocument& document,
+ QDomNode& parent,
+ const QString& elementName,
+ const KDFrameProfileSection* section )
+
+{
+ QDomElement sectionElement = document.createElement( elementName );
+ parent.appendChild( sectionElement );
+ KDXML::createStringNode( document, sectionElement, "Direction",
+ KDFrameProfileSection::directionToString( section->_direction ) );
+ KDXML::createStringNode( document, sectionElement, "Curvature",
+ KDFrameProfileSection::curvatureToString( section->_curvature ) );
+ KDXML::createIntNode( document, sectionElement, "Width", section->_width );
+ KDXML::createPenNode( document, sectionElement, "Style", section->_pen );
+}
+
+
+bool KDFrameProfileSection::readFrameProfileSectionNode( const QDomElement& element,
+ KDFrameProfileSection* section )
+{
+ bool ok = true;
+ Direction tempDirection = DirPlain;
+ Curvature tempCurvature = CvtPlain;
+ int tempWidth;
+ QPen tempPen;
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "Direction" ) {
+ QString value;
+ ok = ok & KDXML::readStringNode( element, value );
+ tempDirection = stringToDirection( value );
+ } else if( tagName == "Curvature" ) {
+ QString value;
+ ok = ok & KDXML::readStringNode( element, value );
+ tempCurvature = stringToCurvature( value );
+ } else if( tagName == "Width" ) {
+ ok = ok & KDXML::readIntNode( element, tempWidth );
+ } else if( tagName == "Style" || tagName == "Pen" ) {
+ ok = ok & KDXML::readPenNode( element, tempPen );
+ } else {
+ qDebug( "Unknown tag in frame" );
+ }
+ }
+ node = node.nextSibling();
+ }
+
+ if( ok ) {
+ section->_direction = tempDirection;
+ section->_curvature = tempCurvature;
+ section->_width = tempWidth;
+ section->_pen = tempPen;
+ }
+
+ return ok;
+}
diff --git a/libkdchart/KDFrameProfileSection.h b/libkdchart/KDFrameProfileSection.h
new file mode 100644
index 0000000..f1b4ac8
--- /dev/null
+++ b/libkdchart/KDFrameProfileSection.h
@@ -0,0 +1,232 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDFRAMEPROFILESECTION__
+#define __KDFRAMEPROFILESECTION__
+
+#include <qregion.h>
+#include <qpen.h>
+#include <qdom.h>
+#include "KDChartGlobal.h"
+
+
+/**
+ Settings for one profile section of one side of the frame.
+ */
+class KDCHART_EXPORT KDFrameProfileSection
+{
+public:
+ /**
+ Profile Direction Mode: specifying whether a part of a profile looks embossed or
+ engraved in comparison to the next outer part (or to the surrounding area, resp.).
+
+ \li \c DirPlain the part of the profile is neither embossed nor engraved.
+ \li \c DirRaising the part of the profile lookes embossed from the outer part.
+ \li \c DirSinking the part of the profile lookes engraved into the outer part.
+
+ \Note Since a frame border may consist of several parts you must specify the
+ direction mode for each of these parts. This is quite different from the
+ QFrame::Shadow / QFrame::Shape schema where you would select a predefined
+ profile. KDFrame lets you specify both the number of sections used
+ to compose frame border's profile and the look of each individual
+ section by calling \c addProfileSection() multiple times.
+
+ Some commonly used profiles are allready pre-defined for your convenience,
+ \c setSimpleProfile is used to select one of them, see \c setProfile
+ for an example how to do this.
+
+ \sa addProfileSection, setProfile, setSimpleProfile, SimpleProfile
+ */
+ enum Direction { DirPlain, DirRaising, DirSinking };
+
+ /**
+ Converts the specified direction enum to a string representation.
+
+ \param dir the direction enum to convert
+ \return the string representation of the direction enum
+ */
+ static QString directionToString( Direction dir ) {
+ switch( dir ) {
+ case DirPlain:
+ return "Plain";
+ case DirRaising:
+ return "Raising";
+ case DirSinking:
+ return "Sinking";
+ default: // should not happen
+ return "Plain";
+ }
+ }
+
+
+ /**
+ Converts the specified string to a direction enum value.
+
+ \param string the string to convert
+ \return the direction enum value
+ */
+ static Direction stringToDirection( const QString& string ) {
+ if( string == "Plain" )
+ return DirPlain;
+ else if( string == "Raising" )
+ return DirRaising;
+ else if( string == "Sinking" )
+ return DirSinking;
+ else // default, should not happen
+ return DirPlain;
+ }
+
+
+
+ /**
+ Profile Curvature Mode: specifying the shape of a frame profile section.
+ (curvature setting will be ignored for \c DirPlain profiles)
+
+ \li \c CvtFlat looking like a evenly sloping surface.
+ \li \c CvtConvex looking like quarter of a torus.
+ \li \c CvtConcave looking like half of a groove.
+ */
+ enum Curvature { CvtPlain, CvtConvex, CvtConcave };
+
+ /**
+ Converts the specified curvature enum to a string representation.
+
+ \param curv the curvature enum to convert
+ \return the string representation of the curvature enum
+ */
+ static QString curvatureToString( Curvature curv ) {
+ switch( curv ) {
+ case CvtPlain:
+ return "Plain";
+ case CvtConvex:
+ return "Convex";
+ case CvtConcave:
+ return "Concave";
+ default: // should not happen
+ return "Plain";
+ }
+ }
+
+
+ /**
+ Converts the specified string to a curvature enum value.
+
+ \param string the string to convert
+ \return the curvature enum value
+ */
+ static Curvature stringToCurvature( const QString& string ) {
+ if( string == "Plain" )
+ return CvtPlain;
+ else if( string == "Convex" )
+ return CvtConvex;
+ else if( string == "Concave" )
+ return CvtConcave;
+ else // default, should not happen
+ return CvtPlain;
+ }
+
+
+ /**
+ Ctor of KDFrameProfileSection.
+
+ \Note Instead of instantiating KDFrameProfileSection yourself
+ you would normally rather call \c KDFrame::addProfileSection()
+ */
+ KDFrameProfileSection( Direction direction,
+ Curvature curvature,
+ int width,
+ QPen pen )
+ : _direction( direction ),
+ _curvature( curvature ),
+ _width( width ),
+ _pen( pen ) {}
+
+ /**
+ Default ctor of FrameProfileSection.
+
+ \Note Instead of instantiating KDFrameProfileSection yourself,
+ you would normally rather call \c KDFrame::addProfileSection()
+ */
+ KDFrameProfileSection() {
+ _direction = DirPlain;
+ _curvature = CvtPlain;
+ _width = 1;
+ _pen = QPen( Qt::SolidLine );
+ }
+
+ /**
+ Destructor. Only defined to have it virtual.
+ */
+ virtual ~KDFrameProfileSection();
+
+ /**
+ Creates a DOM element node that represents a frame profile
+ section for use in a DOM document.
+
+ \param document the DOM document to which the node will belong
+ \param parent the parent node to which the new node will be appended
+ \param elementName the name of the new node
+ \param section the section to be represented
+ */
+ static void createFrameProfileSectionNode( QDomDocument& document,
+ QDomNode& parent,
+ const QString& elementName,
+ const KDFrameProfileSection* section );
+
+ /**
+ Reads data from a DOM element node that represents a frame
+ profile section and fills a KDFrameProfileSection object with
+ the data.
+
+ \param element the DOM element to read from
+ \param section a pointer to the frame profile section object to
+ read the data into
+ */
+ static bool readFrameProfileSectionNode( const QDomElement& element,
+ KDFrameProfileSection* section );
+
+ Direction direction() const { return _direction; }
+ Curvature curvature() const { return _curvature; }
+ int width() const { return _width; }
+ QPen pen() const { return _pen; }
+
+private:
+ Direction _direction;
+ Curvature _curvature;
+ int _width;
+ QPen _pen;
+};
+
+/**
+ Settings for all the profile sections of one side the frame.
+
+ \sa setProfile, profile
+ */
+typedef QPtrList < KDFrameProfileSection > KDFrameProfile;
+
+#endif
diff --git a/libkdchart/KDXMLTools.cpp b/libkdchart/KDXMLTools.cpp
new file mode 100644
index 0000000..a78c163
--- /dev/null
+++ b/libkdchart/KDXMLTools.cpp
@@ -0,0 +1,809 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#include "KDXMLTools.h"
+#include <qbuffer.h>
+#include <qimage.h>
+#include <zlib.h>
+
+namespace KDXML {
+
+ void createBoolNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, bool value )
+ {
+ QDomElement newElement =
+ doc.createElement( elementName );
+ parent.appendChild( newElement );
+ QDomText elementContent =
+ doc.createTextNode( value ? "true" : "false" );
+ newElement.appendChild( elementContent );
+ }
+
+
+ void createOrientationNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, Qt::Orientation value )
+ {
+ QDomElement newElement =
+ doc.createElement( elementName );
+ parent.appendChild( newElement );
+ QDomText elementContent =
+ doc.createTextNode( (Qt::Vertical == value) ? "vertical" : "horizontal" );
+ newElement.appendChild( elementContent );
+ }
+
+
+
+ void createSizeNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, const QSize& value )
+ {
+ QDomElement newElement =
+ doc.createElement( elementName );
+ parent.appendChild( newElement );
+ newElement.setAttribute( "Width", value.width() );
+ newElement.setAttribute( "Height", value.height() );
+ }
+
+
+ void createIntNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, int value )
+ {
+ QDomElement newElement =
+ doc.createElement( elementName );
+ parent.appendChild( newElement );
+ QDomText elementContent =
+ doc.createTextNode( QString::number( value ) );
+ newElement.appendChild( elementContent );
+ }
+
+
+ void createDoubleNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, double value )
+ {
+ QDomElement newElement =
+ doc.createElement( elementName );
+ parent.appendChild( newElement );
+ QDomText elementContent =
+ doc.createTextNode( QString::number( value ) );
+ newElement.appendChild( elementContent );
+ }
+
+
+ void createStringNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName,
+ const QString& text )
+ {
+ QDomElement newElement =
+ doc.createElement( elementName );
+ parent.appendChild( newElement );
+ QDomText elementContent =
+ doc.createTextNode( text );
+ newElement.appendChild( elementContent );
+ }
+
+
+ void createColorNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, const QColor& color )
+ {
+ QDomElement colorElement = doc.createElement( elementName );
+ parent.appendChild( colorElement );
+ colorElement.setAttribute( "Red",
+ QString::number( color.red() ) );
+ colorElement.setAttribute( "Green",
+ QString::number( color.green() ) );
+ colorElement.setAttribute( "Blue",
+ QString::number( color.blue() ) );
+ }
+
+
+ void createBrushNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, const QBrush& brush )
+
+ {
+ QDomElement brushElement = doc.createElement( elementName );
+ parent.appendChild( brushElement );
+ createColorNode( doc, brushElement, "Color", brush.color() );
+ createStringNode( doc, brushElement, "Style",
+ KDXML::brushStyleToString( brush.style() ) );
+ if( brush.style() == Qt::CustomPattern && brush.pixmap() )
+ createPixmapNode( doc, brushElement, "Pixmap", *brush.pixmap() );
+ }
+
+
+ void createPixmapNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, const QPixmap& pixmap )
+ {
+ QDomElement pixmapElement = doc.createElement( elementName );
+ parent.appendChild( pixmapElement );
+
+ createStringNode( doc, pixmapElement, "Format", "XPM.GZ" );
+ if( pixmap.isNull() ){
+ // we store an empty image without any data
+ createIntNode( doc, pixmapElement, "Length", 0 );
+ }else{
+ // Convert the pixmap to an image, save that image to an in-memory
+ // XPM representation and compress this representation. This
+ // conforms to the file format Qt Designer uses.
+ QByteArray ba;
+ QBuffer buffer( ba );
+ buffer.open( IO_WriteOnly );
+ QImageIO imgio( &buffer, "XPM" );
+ QImage image = pixmap.convertToImage();
+ imgio.setImage( image );
+ imgio.write();
+ buffer.close();
+ ulong len = ba.size() * 2;
+ QByteArray bazip( len );
+ ::compress( (uchar*) bazip.data(), &len, (uchar*) ba.data(), ba.size() );
+ QString dataString;
+ static const char hexchars[] = "0123456789abcdef";
+ for ( int i = 0; i < (int)len; ++i ) {
+ uchar c = (uchar) bazip[i];
+ dataString += hexchars[c >> 4];
+ dataString += hexchars[c & 0x0f];
+ }
+ createIntNode( doc, pixmapElement, "Length", ba.size() );
+ createStringNode( doc, pixmapElement, "Data", dataString );
+ }
+ }
+
+
+ void createRectNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, const QRect& rect )
+ {
+ QDomElement rectElement = doc.createElement( elementName );
+ parent.appendChild( rectElement );
+ QDomElement xElement = doc.createElement( "X" );
+ rectElement.appendChild( xElement );
+ QDomText xContent = doc.createTextNode( QString::number( rect.x() ) );
+ xElement.appendChild( xContent );
+ QDomElement yElement = doc.createElement( "Y" );
+ rectElement.appendChild( yElement );
+ QDomText yContent = doc.createTextNode( QString::number( rect.y() ) );
+ yElement.appendChild( yContent );
+ QDomElement widthElement = doc.createElement( "Width" );
+ rectElement.appendChild( widthElement );
+ QDomText widthContent = doc.createTextNode( QString::number( rect.width() ) );
+ widthElement.appendChild( widthContent );
+ QDomElement heightElement = doc.createElement( "Height" );
+ rectElement.appendChild( heightElement );
+ QDomText heightContent = doc.createTextNode( QString::number( rect.height() ) );
+ heightElement.appendChild( heightContent );
+ }
+
+
+ void createStringListNodes( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName,
+ const QStringList* list )
+ {
+ if( !list )
+ return;
+
+ for( QStringList::ConstIterator it = list->begin();
+ it != list->end(); ++it ) {
+ QDomElement element = doc.createElement( elementName );
+ parent.appendChild( element );
+ QDomText elementContent = doc.createTextNode( *it );
+ element.appendChild( elementContent );
+ }
+ }
+
+
+ void createFontNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, const QFont& font )
+ {
+ QDomElement fontElement = doc.createElement( elementName );
+ parent.appendChild( fontElement );
+ createStringNode( doc, fontElement, "Family", font.family() );
+ createIntNode( doc, fontElement, "PointSize", font.pointSize() );
+ createIntNode( doc, fontElement, "Weight", font.weight() );
+ createBoolNode( doc, fontElement, "Italic", font.italic() );
+#if COMPAT_QT_VERSION < 0x030000
+ // Qt 3 handles the charset internally.
+ createIntNode( doc, fontElement, "CharSet", font.charSet() );
+#endif
+ }
+
+
+ void createPenNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, const QPen& pen )
+ {
+ QDomElement penElement = doc.createElement( elementName );
+ parent.appendChild( penElement );
+ createIntNode( doc, penElement, "Width", pen.width() );
+ createColorNode( doc, penElement, "Color", pen.color() );
+ createStringNode( doc, penElement, "Style", penStyleToString( pen.style() ) );
+ }
+
+
+ void createDateTimeNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName,
+ const QDateTime& datetime )
+ {
+ QDomElement dateTimeElement = doc.createElement( elementName );
+ parent.appendChild( dateTimeElement );
+ createDateNode( doc, dateTimeElement, "Date", datetime.date() );
+ createTimeNode( doc, dateTimeElement, "Time", datetime.time() );
+ }
+
+
+ void createDateNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, const QDate& date )
+ {
+ QDomElement dateElement = doc.createElement( elementName );
+ parent.appendChild( dateElement );
+ dateElement.setAttribute( "Year", QString::number( date.year() ) );
+ dateElement.setAttribute( "Month", QString::number( date.month() ) );
+ dateElement.setAttribute( "Day", QString::number( date.day() ) );
+ }
+
+
+ void createTimeNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, const QTime& time )
+ {
+ QDomElement timeElement = doc.createElement( elementName );
+ parent.appendChild( timeElement );
+ timeElement.setAttribute( "Hour",
+ QString::number( time.hour() ) );
+ timeElement.setAttribute( "Minute",
+ QString::number( time.minute() ) );
+ timeElement.setAttribute( "Second",
+ QString::number( time.second() ) );
+ timeElement.setAttribute( "Millisecond",
+ QString::number( time.msec() ) );
+ }
+
+
+ QString penStyleToString( Qt::PenStyle style )
+ {
+ switch( style ) {
+ case Qt::NoPen:
+ return "NoPen";
+ case Qt::SolidLine:
+ return "SolidLine";
+ case Qt::DashLine:
+ return "DashLine";
+ case Qt::DotLine:
+ return "DotLine";
+ case Qt::DashDotLine:
+ return "DashDotLine";
+ case Qt::DashDotDotLine:
+ return "DashDotDotLine";
+ default: // should not happen
+ return "SolidLine";
+ }
+ }
+
+
+
+ QString brushStyleToString( Qt::BrushStyle style )
+ {
+ // PENDING(kalle) Support custom patterns
+ switch( style ) {
+ case Qt::NoBrush:
+ return "NoBrush";
+ case Qt::SolidPattern:
+ return "SolidPattern";
+ case Qt::Dense1Pattern:
+ return "Dense1Pattern";
+ case Qt::Dense2Pattern:
+ return "Dense2Pattern";
+ case Qt::Dense3Pattern:
+ return "Dense3Pattern";
+ case Qt::Dense4Pattern:
+ return "Dense4Pattern";
+ case Qt::Dense5Pattern:
+ return "Dense5Pattern";
+ case Qt::Dense6Pattern:
+ return "Dense6Pattern";
+ case Qt::Dense7Pattern:
+ return "Dense7Pattern";
+ case Qt::HorPattern:
+ return "HorPattern";
+ case Qt::VerPattern:
+ return "VerPattern";
+ case Qt::CrossPattern:
+ return "CrossPattern";
+ case Qt::BDiagPattern:
+ return "BDiagPattern";
+ case Qt::FDiagPattern:
+ return "FDiagPattern";
+ case Qt::DiagCrossPattern:
+ return "DiagCrossPattern";
+ default: // should not happen (but can for a custom pattern)
+ return "SolidPattern";
+ }
+ }
+
+
+ bool readStringNode( const QDomElement& element, QString& value )
+ {
+ value = element.text();
+ return true;
+ }
+
+
+ bool readIntNode( const QDomElement& element, int& value )
+ {
+ bool ok = false;
+ int temp = element.text().toInt( &ok );
+ if( ok )
+ value = temp;
+ return ok;
+ }
+
+
+ bool readDoubleNode( const QDomElement& element, double& value )
+ {
+ bool ok = false;
+ double temp = element.text().toDouble( &ok );
+ if( ok )
+ value = temp;
+ return ok;
+ }
+
+
+ bool readBoolNode( const QDomElement& element, bool& value )
+ {
+ if( element.text() == "true" ) {
+ value = true;
+ return true;
+ } else if( element.text() == "false" ) {
+ value = false;
+ return true;
+ } else
+ return false;
+ }
+
+
+ bool readOrientationNode( const QDomElement& element, Qt::Orientation& value )
+ {
+ if( element.text() == "vertical" ) {
+ value = Qt::Vertical;
+ return true;
+ } else if( element.text() == "horizontal" ) {
+ value = Qt::Horizontal;
+ return true;
+ } else
+ return false;
+ }
+
+
+ bool readSizeNode( const QDomElement& element, QSize& value )
+ {
+ bool ok = false;
+ int width, height;
+ if( element.hasAttribute( "Width" ) ) {
+ width = element.attribute( "Width" ).toInt( &ok );
+ if( ok && element.hasAttribute( "Height" ) ) {
+ height = element.attribute( "Height" ).toInt( &ok );
+ if( ok ){
+ value.setWidth( width );
+ value.setHeight( height );
+ }
+ }
+ }
+ return ok;
+ }
+
+
+ bool readColorNode( const QDomElement& element, QColor& value )
+ {
+ bool ok = true;
+ int red=0, green=0, blue=0;
+ if( element.hasAttribute( "Red" ) ) {
+ bool redOk = false;
+ red = element.attribute( "Red" ).toInt( &redOk );
+ ok = ok & redOk;
+ }
+ if( element.hasAttribute( "Green" ) ) {
+ bool greenOk = false;
+ green = element.attribute( "Green" ).toInt( &greenOk );
+ ok = ok & greenOk;
+ }
+ if( element.hasAttribute( "Blue" ) ) {
+ bool blueOk = false;
+ blue = element.attribute( "Blue" ).toInt( &blueOk );
+ ok = ok & blueOk;
+ }
+
+ if( ok )
+ value.setRgb( red, green, blue );
+
+ return ok;
+ }
+
+
+ bool readBrushNode( const QDomElement& element, QBrush& brush )
+ {
+ bool ok = true;
+ QColor tempColor;
+ Qt::BrushStyle tempStyle=Qt::SolidPattern;
+ QPixmap tempPixmap;
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "Color" ) {
+ ok = ok & readColorNode( element, tempColor );
+ } else if( tagName == "Style" ) {
+ QString value;
+ ok = ok & readStringNode( element, value );
+ tempStyle = stringToBrushStyle( value );
+ } else if( tagName == "Pixmap" ) {
+ ok = ok & readPixmapNode( element, tempPixmap );
+ } else {
+ qDebug( "Unknown tag in brush" );
+ }
+ }
+ node = node.nextSibling();
+ }
+
+ if( ok ) {
+ brush.setColor( tempColor );
+ brush.setStyle( tempStyle );
+ if( !tempPixmap.isNull() )
+ brush.setPixmap( tempPixmap );
+ }
+
+ return ok;
+ }
+
+
+ bool readPixmapNode( const QDomElement& element, QPixmap& pixmap )
+ {
+ bool ok = true;
+ unsigned long tempLength;
+ QString tempData;
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "Format" ) {
+ QString formatName;
+ ok = ok & readStringNode( element, formatName );
+#ifndef NDEBUG
+ if( formatName != "XPM.GZ" )
+ qDebug( "Unsupported pixmap format in XML file" );
+#endif
+ } else if( tagName == "Length" ) {
+ int itempLength;
+ ok = ok & readIntNode( element, itempLength );
+ tempLength = itempLength;
+ } else if( tagName == "Data" ) {
+ ok = ok & readStringNode( element, tempData );
+ } else {
+ qDebug( "Unknown tag in Pixmap" );
+ }
+ }
+ node = node.nextSibling();
+ }
+
+ if( ok ) {
+ if( 0 < tempLength ) {
+ // Decode the image file format in the same way Qt Designer does.
+ char *ba = new char[ tempData.length() / 2 ];
+ for ( int i = 0; i < (int)tempData.length() / 2; ++i ) {
+ char h = tempData[ 2 * i ].latin1();
+ char l = tempData[ 2 * i + 1 ].latin1();
+ uchar r = 0;
+ if ( h <= '9' )
+ r += h - '0';
+ else
+ r += h - 'a' + 10;
+ r = r << 4;
+ if ( l <= '9' )
+ r += l - '0';
+ else
+ r += l - 'a' + 10;
+ ba[ i ] = r;
+ }
+
+ if( tempLength < tempData.length() * 5 )
+ tempLength = tempData.length() * 5;
+ QByteArray baunzip( tempLength );
+ ::uncompress( (uchar*) baunzip.data(), &tempLength,
+ (uchar*) ba, tempData.length()/2 );
+ QImage image;
+ image.loadFromData( (const uchar*)baunzip.data(), tempLength, "XPM" );
+
+ if( image.isNull() )
+ pixmap.resize( 0, 0 ); // This is _not_ an error, we just read a NULL pixmap!
+ else
+ ok = ok & pixmap.convertFromImage( image, 0 );
+ } else
+ pixmap.resize( 0, 0 ); // This is _not_ an error, we just read a empty pixmap!
+ }
+
+ return ok;
+ }
+
+
+ bool readPenNode( const QDomElement& element, QPen& pen )
+ {
+ bool ok = true;
+ int tempWidth;
+ QColor tempColor;
+ Qt::PenStyle tempStyle=Qt::SolidLine;
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "Width" ) {
+ ok = ok & readIntNode( element, tempWidth );
+ } else if( tagName == "Color" ) {
+ ok = ok & readColorNode( element, tempColor );
+ } else if( tagName == "Style" ) {
+ QString value;
+ ok = ok & readStringNode( element, value );
+ tempStyle = stringToPenStyle( value );
+ } else {
+ qDebug( "Unknown tag in brush" );
+ }
+ }
+ node = node.nextSibling();
+ }
+
+ if( ok ) {
+ pen.setWidth( tempWidth );
+ pen.setColor( tempColor );
+ pen.setStyle( tempStyle );
+ }
+
+ return ok;
+ }
+
+ bool readFontNode( const QDomElement& element, QFont& font )
+ {
+ bool ok = true;
+ QString family;
+ int pointSize, weight;
+ bool italic;
+ int charSet;
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "Family" ) {
+ ok = ok & readStringNode( element, family );
+ } else if( tagName == "PointSize" ) {
+ ok = ok & readIntNode( element, pointSize );
+ } else if( tagName == "Weight" ) {
+ ok = ok & readIntNode( element, weight );
+ } else if( tagName == "Italic" ) {
+ ok = ok & readBoolNode( element, italic );
+ } else if( tagName == "CharSet" ) {
+ ok = ok & readIntNode( element, charSet );
+ } else {
+ qDebug( "Unknown tag in color map" );
+ }
+ }
+ node = node.nextSibling();
+ }
+
+ if( ok ) {
+ font.setFamily( family );
+ font.setPointSize( pointSize );
+ font.setWeight( weight );
+ font.setItalic( italic );
+#if COMPAT_QT_VERSION < 0x030000
+ // Qt 3 handles charsets internally.
+ font.setCharSet( (QFont::CharSet)charSet );
+#endif
+ }
+
+ return ok;
+ }
+
+ bool readRectNode( const QDomElement& element, QRect& value )
+ {
+ bool ok = true;
+ int width, height, x, y;
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "Width" ) {
+ ok = ok & readIntNode( element, width );
+ } else if( tagName == "Height" ) {
+ ok = ok & readIntNode( element, height );
+ } else if( tagName == "X" ) {
+ ok = ok & readIntNode( element, x );
+ } else if( tagName == "Y" ) {
+ ok = ok & readIntNode( element, y );
+ } else {
+ qDebug( "Unknown tag in rect" );
+ }
+ }
+ node = node.nextSibling();
+ }
+
+ if( ok ) {
+ value.setX( x );
+ value.setY( y );
+ value.setWidth( width );
+ value.setHeight( height );
+ }
+
+ return ok;
+ }
+
+
+
+ bool readDateTimeNode( const QDomElement& element, QDateTime& datetime )
+ {
+ bool ok = true;
+ QDate tempDate;
+ QTime tempTime;
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "Date" ) {
+ ok = ok & readDateNode( element, tempDate );
+ } else if( tagName == "Time" ) {
+ ok = ok & readTimeNode( element, tempTime );
+ } else {
+ qDebug( "Unknown tag in datetime" );
+ }
+ }
+ node = node.nextSibling();
+ }
+
+ if( ok ) {
+ datetime.setDate( tempDate );
+ datetime.setTime( tempTime );
+ }
+
+ return ok;
+ }
+
+
+ bool readDateNode( const QDomElement& element, QDate& value )
+ {
+ bool ok = true;
+ int year=0, month=0, day=0;
+ if( element.hasAttribute( "Year" ) ) {
+ bool yearOk = false;
+ year = element.attribute( "Year" ).toInt( &yearOk );
+ ok = ok & yearOk;
+ }
+ if( element.hasAttribute( "Month" ) ) {
+ bool monthOk = false;
+ month = element.attribute( "Month" ).toInt( &monthOk );
+ ok = ok & monthOk;
+ }
+ if( element.hasAttribute( "Day" ) ) {
+ bool dayOk = false;
+ day = element.attribute( "Day" ).toInt( &dayOk );
+ ok = ok & dayOk;
+ }
+
+ if( ok )
+ value.setYMD( year, month, day );
+
+ return ok;
+ }
+
+
+
+ bool readTimeNode( const QDomElement& element, QTime& value )
+ {
+ bool ok = true;
+ int hour=0, minute=0, second=0, msec=0;
+ if( element.hasAttribute( "Hour" ) ) {
+ bool hourOk = false;
+ hour = element.attribute( "Hour" ).toInt( &hourOk );
+ ok = ok & hourOk;
+ }
+ if( element.hasAttribute( "Minute" ) ) {
+ bool minuteOk = false;
+ minute = element.attribute( "Minute" ).toInt( &minuteOk );
+ ok = ok & minuteOk;
+ }
+ if( element.hasAttribute( "Second" ) ) {
+ bool secondOk = false;
+ second = element.attribute( "Second" ).toInt( &secondOk );
+ ok = ok & secondOk;
+ }
+ if( element.hasAttribute( "Millisecond" ) ) {
+ bool msecOk = false;
+ msec = element.attribute( "Millisecond" ).toInt( &msecOk );
+ ok = ok & msecOk;
+ }
+
+ if( ok )
+ value.setHMS( hour, minute, second, msec );
+
+ return ok;
+ }
+
+
+
+ Qt::PenStyle stringToPenStyle( const QString& style )
+ {
+ if( style == "NoPen" )
+ return Qt::NoPen;
+ else if( style == "SolidLine" )
+ return Qt::SolidLine;
+ else if( style == "DashLine" )
+ return Qt::DashLine;
+ else if( style == "DotLine" )
+ return Qt::DotLine;
+ else if( style == "DashDotLine" )
+ return Qt::DashDotLine;
+ else if( style == "DashDotDotLine" )
+ return Qt::DashDotDotLine;
+ else // should not happen
+ return Qt::SolidLine;
+ }
+
+
+ Qt::BrushStyle stringToBrushStyle( const QString& style )
+ {
+ // PENDING(kalle) Support custom patterns
+ if( style == "NoBrush" )
+ return Qt::NoBrush;
+ else if( style == "SolidPattern" )
+ return Qt::SolidPattern;
+ else if( style == "Dense1Pattern" )
+ return Qt::Dense1Pattern;
+ else if( style == "Dense2Pattern" )
+ return Qt::Dense2Pattern;
+ else if( style == "Dense3Pattern" )
+ return Qt::Dense3Pattern;
+ else if( style == "Dense4Pattern" )
+ return Qt::Dense4Pattern;
+ else if( style == "Dense5Pattern" )
+ return Qt::Dense5Pattern;
+ else if( style == "Dense6Pattern" )
+ return Qt::Dense6Pattern;
+ else if( style == "Dense7Pattern" )
+ return Qt::Dense7Pattern;
+ else if( style == "HorPattern" )
+ return Qt::HorPattern;
+ else if( style == "VerPattern" )
+ return Qt::VerPattern;
+ else if( style == "CrossPattern" )
+ return Qt::CrossPattern;
+ else if( style == "BDiagPattern" )
+ return Qt::BDiagPattern;
+ else if( style == "FDiagPattern" )
+ return Qt::FDiagPattern;
+ else if( style == "DiagCrossPattern" )
+ return Qt::DiagCrossPattern;
+ else // should not happen (but can with custom patterns)
+ return Qt::SolidPattern;
+ }
+
+}
diff --git a/libkdchart/KDXMLTools.h b/libkdchart/KDXMLTools.h
new file mode 100644
index 0000000..7798c20
--- /dev/null
+++ b/libkdchart/KDXMLTools.h
@@ -0,0 +1,104 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDXMLTOOLS_H__
+#define __KDXMLTOOLS_H__
+
+// *must* include this one as first one:
+#include <KDChartGlobal.h>
+
+#include <qpen.h>
+#include <qdom.h>
+#include <qstring.h>
+#include <qcolor.h>
+#include <qbrush.h>
+#include <qsize.h>
+#include <qrect.h>
+#include <qfont.h>
+#include <qstringlist.h>
+#include <qdatetime.h>
+
+namespace KDXML {
+ QString penStyleToString( Qt::PenStyle style );
+ Qt::PenStyle stringToPenStyle( const QString& style );
+ QString brushStyleToString( Qt::BrushStyle style );
+ Qt::BrushStyle stringToBrushStyle( const QString& style );
+
+ void createBoolNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, bool value );
+ void createOrientationNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, Qt::Orientation value );
+ void createSizeNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, const QSize& value );
+ void createIntNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, int value );
+ void createDoubleNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, double value );
+ void createStringNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName,
+ const QString& text );
+ void createColorNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, const QColor& color );
+ void createBrushNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, const QBrush& brush );
+ void createPixmapNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, const QPixmap& pixmap );
+ void createRectNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, const QRect& rect );
+ void createStringListNodes( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName,
+ const QStringList* thelist ); // PCH: This is required to avoid MSVC compiler warnings and errors.
+ void createFontNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, const QFont& font );
+
+ void createPenNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, const QPen& pen );
+ void createDateTimeNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName,
+ const QDateTime& datetime );
+ void createDateNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, const QDate& date );
+ void createTimeNode( QDomDocument& doc, QDomNode& parent,
+ const QString& elementName, const QTime& time );
+ bool readIntNode( const QDomElement& element, int& value );
+ bool readStringNode( const QDomElement& element, QString& value );
+ bool readDoubleNode( const QDomElement& element, double& value );
+ bool readBoolNode( const QDomElement& element, bool& value );
+ bool readOrientationNode( const QDomElement& element, Qt::Orientation& value );
+ bool readSizeNode( const QDomElement& element, QSize& value );
+ bool readColorNode( const QDomElement& element, QColor& value );
+ bool readBrushNode( const QDomElement& element, QBrush& brush );
+ bool readPixmapNode( const QDomElement& element, QPixmap& pixmap );
+ bool readRectNode( const QDomElement& element, QRect& value );
+ bool readFontNode( const QDomElement& element, QFont& font );
+ bool readPenNode( const QDomElement& element, QPen& pen );
+ bool readDateTimeNode( const QDomElement& element, QDateTime& datetime );
+ bool readDateNode( const QDomElement& element, QDate& date );
+ bool readTimeNode( const QDomElement& element, QTime& time );
+}
+#endif
diff --git a/libkdchart/LICENSE b/libkdchart/LICENSE
new file mode 100644
index 0000000..8d0b878
--- /dev/null
+++ b/libkdchart/LICENSE
@@ -0,0 +1,349 @@
+
+ The KDChart Library is Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB.
+
+ You may use, distribute and copy the KDChart Library under the terms of
+ GNU General Public License version 2, which is displayed below.
+
+-------------------------------------------------------------------------
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
+-------------------------------------------------------------------------
diff --git a/libkdchart/Makefile.am b/libkdchart/Makefile.am
new file mode 100644
index 0000000..0a1048e
--- /dev/null
+++ b/libkdchart/Makefile.am
@@ -0,0 +1,95 @@
+lib_LTLIBRARIES = libkmm_kdchart.la
+
+libkmm_kdchart_la_SOURCES = KDChart.cpp \
+ KDChartAreaPainter.cpp \
+ KDChartAxesPainter.cpp \
+ KDChartAxisParams.cpp \
+ KDChartBarPainter.cpp \
+ KDChartBaseSeries.cpp \
+ KDChartBWPainter.cpp \
+ KDChartCustomBox.cpp \
+ KDChartDataIntern.cpp \
+ KDChartHiLoPainter.cpp \
+ KDChartLinesPainter.cpp \
+ KDChartPainter.cpp \
+ KDChartParams.cpp \
+ KDChartParams_frame.cpp\
+ KDChartParams_io.cpp \
+ KDChartPiePainter.cpp \
+ KDChartPlaneSeries.cpp \
+ KDChartPolarPainter.cpp \
+ KDChartPropertySet.cpp \
+ KDChartRingPainter.cpp \
+ KDChartSeriesCollection.cpp \
+ KDChartTableBase.cpp \
+ KDChartTextPiece.cpp \
+ KDChartVectorSeries.cpp \
+ KDChartVectorTable.cpp \
+ KDChartWidget.cpp \
+ KDDrawText.cpp \
+ KDFrame.cpp \
+ KDFrameProfileSection.cpp \
+ KDXMLTools.cpp \
+ KDChartEnums.cpp \
+ KDChartAxisParamsWrapper.cpp \
+ KDChartCustomBoxWrapper.cpp \
+ KDChartParamsWrapper.cpp \
+ KDChartTableDataWrapper.cpp
+ #KDChartObjectFactory.cpp
+ #KDChartWrapperFactory.cpp
+
+libkmm_kdchart_la_LDFLAGS = $(all_libraries) -no-undefined
+libkmm_kdchart_la_LIBADD = $(LIB_QT) $(LIB_KDECORE)
+
+noinst_HEADERS = KDChart.h \
+ KDChartAreaPainter.h \
+ KDChartAxesPainter.h \
+ KDChartBarPainter.h \
+ KDChartBaseSeries.h \
+ KDChartBWPainter.h \
+ KDChartDataIntern.h \
+ KDChartDataRegion.h \
+ KDChartHiLoPainter.h \
+ KDChartLinesPainter.h \
+ KDChartNotEnoughSpaceException.h \
+ KDChartUnknownTypeException.h \
+ KDChartPainter.h \
+ KDChartPiePainter.h \
+ KDChartPlaneSeries.h \
+ KDChartPolarPainter.h \
+ KDChartRingPainter.h \
+ KDChartSeriesCollection.h \
+ KDChartTextPiece.h \
+ KDChartUnknownTypeException.h \
+ KDChartVectorSeries.h \
+ KDDrawText.h \
+ KDXMLTools.h \
+ KDChartTableBase.h \
+ KDChartListTable.h \
+ KDChartVectorTable.h \
+ KDChartTable.h \
+ KDChartParams.h \
+ KDFrameProfileSection.h \
+ KDChartPropertySet.h \
+ KDChartDataIntern.h \
+ KDChartDataRegion.h \
+ KDFrame.h \
+ KDChartGlobal.h \
+ KDChartWidget.h \
+ KDChartCustomBox.h \
+ KDChartEnums.h \
+ KDChartTextPiece.h \
+ KDChartAxisParams.h \
+ kdchart_export.h \
+ KDChartCustomBoxWrapper.h \
+ KDChartWrapperFactory.h \
+ KDChartAxisParamsWrapper.h \
+ KDChartParamsWrapper.h \
+ KDChartTableDataWrapper.h \
+ KDChartObjectFactory.h
+
+METASOURCES = AUTO
+
+# INCLUDES = $(KOFFICECORE_INCLUDES) -I$(srcdir)/.. -I$(srcdir) $(all_includes)
+INCLUDES = -I$(srcdir) $(all_includes)
+
diff --git a/libkdchart/README b/libkdchart/README
new file mode 100644
index 0000000..075e9d8
--- /dev/null
+++ b/libkdchart/README
@@ -0,0 +1,77 @@
+README last edited: 20.11.2003
+
+
+
+CONTENTS
+
+ 1. What you find here
+ 2. Which projects are allowed to used this code
+ 3. Where to find additional information
+ 4. Obtaining commercial support
+
+
+
+1. What you find here
+---------------------
+
+ This directory contains the GPL'ed version of KD Chart,
+ this is from the KD Chart webpage:
+
+ ''KD Chart is a tool for creating business charts and is
+ the most powerful Qt component of its kind.
+
+ Besides having all the standard features, KD Chart(...)''
+
+ Go on
+ reading: http://www.klaralvdalens-datakonsult.se/kdchart/
+
+
+
+2. Which projects are allowed to used this code
+-----------------------------------------------
+
+ This version of the KD Chart code may be used EXCLUSIVELY
+ for software projects using the GNU General Public License,
+ for details see file LICENSE included with these sources.
+
+ If you intend to develop software that is closed-source or
+ otherwise not compatible with the GNU General Public License
+ contact Klarälvdalens Datakonsult AB for further information
+ and licensing conditions: info@klaralvdalens-datakonsult.se
+
+
+
+3. Where to find additional information
+---------------------------------------
+
+ * See the function calls embedded in KChart to learn how
+ to use KD Chart for your own projects.
+
+ * See the (doxygen enabled) documentation inside the
+ source.
+
+ * Carefully study the KD Chart Programmers Manual
+ provided here:
+
+http://www.klaralvdalens-datakonsult.se/kdchart/ProgrammersManual/KDChart.pdf
+
+ Note that this manual frequently refers to a lot of sample
+ files which are shipped together with the commercial
+ version of KD Chart (being dual-licensed, see section 2).
+ It is possible to understand the manual without studying
+ these samples by just reading the documentation inside
+ the source.
+
+
+
+4. Obtaining commercial support
+-------------------------------
+ Commercial support (and licensing for software projects that
+ are not compatible to the GPL, see section 2.) is available
+ from Klarälvdalens Datakonsult AB, please send your mail to:
+
+ info@klaralvdalens-datakonsult.se
+
+
+
+filename: KOffice / kchart / kdchart / README
diff --git a/libkdchart/README_BEFORE_HACKING b/libkdchart/README_BEFORE_HACKING
new file mode 100644
index 0000000..034ed38
--- /dev/null
+++ b/libkdchart/README_BEFORE_HACKING
@@ -0,0 +1,8 @@
+This is a mostly verbatim copy of KDChart, Klarälvdalens Datakonsult AB's
+charting engine. We are developing KDChart at a rapid pace and will update
+the version here quite often, so in order to avoid clashes, we would like
+to ask you to get in contact with us first before changing, adding or removing
+anything here. You can reach us at kalle@klaralvdalens-datakonsult.se or
+khz@klaralvdalens-datakonsult.se
+
+Thanks!
diff --git a/libkdchart/kdchart_export.h b/libkdchart/kdchart_export.h
new file mode 100644
index 0000000..16d8b21
--- /dev/null
+++ b/libkdchart/kdchart_export.h
@@ -0,0 +1,47 @@
+#ifndef KDCHART_EXPORT_H
+#define KDCHART_EXPORT_H
+
+#include <qglobal.h>
+
+#if 0
+#include <koffice_export.h>
+#else
+
+#if defined(Q_OS_WIN32) && defined(KDCHART_DLL)
+#define DLL_EXPORT __declspec(dllexport)
+#define DLL_IMPORT __declspec(dllimport)
+#else
+#define DLL_EXPORT
+#define DLL_IMPORT
+#endif
+
+#if defined(KDCHART_DLL)
+#define KDCHART_EXPORT DLL_EXPORT
+#else
+#define KDCHART_EXPORT DLL_IMPORT
+#endif
+
+#endif
+
+#endif // #if 1
+
+/*
+ How to make a KD Chart DLL rather than linking statically:
+
+ 1. We have an #include <kdchart_export.h> statement in all
+ of our public KD Chart header files
+
+ 2. We have the KDCHART_EXPORT macro added to all of our
+ public classes.
+
+ So e.g. the class header reads:
+
+ class KDCHART_EXPORT KDChartWidget : public QWidget
+ {
+
+ }
+
+
+ 3. In order to create a DLL
+ just add "CONFIG += dll" to the qmake command line or to the [KD Chart directory]/src/src.pro file
+*/
diff --git a/libkgpgfile/Makefile.am b/libkgpgfile/Makefile.am
new file mode 100644
index 0000000..885750c
--- /dev/null
+++ b/libkgpgfile/Makefile.am
@@ -0,0 +1,12 @@
+KDE_OPTIONS = noautodist
+
+INCLUDES = $(all_includes) -I$(top_srcdir)
+METASOURCES = AUTO
+
+noinst_LTLIBRARIES = libkgpgfile.la
+libkgpgfile_la_SOURCES = kgpgfile.cpp
+libkgpgfile_la_LDFLAGS = $(all_libraries) $(KDE_RPATH)
+#libkgpgfile_la_LIBADD = $(top_builddir)/libkdepim/libkdepim.la
+
+instdir=$(includedir)/kmymoney
+inst_HEADERS = kgpgfile.h
diff --git a/libkgpgfile/kgpgfile.cpp b/libkgpgfile/kgpgfile.cpp
new file mode 100644
index 0000000..a7fc338
--- /dev/null
+++ b/libkgpgfile/kgpgfile.cpp
@@ -0,0 +1,698 @@
+/***************************************************************************
+ kgpgfile.cpp
+ -------------------
+ begin : Fri Jan 23 2004
+ copyright : (C) 2004,2005 by Thomas Baumgart
+ email : thb@net-bembel.de
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG
+#include <config.h>
+#endif
+
+#include "kdecompat.h"
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qfile.h>
+#include <qdir.h>
+#include <qstring.h>
+
+#if QT_IS_VERSION(3,3,0)
+#include <qeventloop.h>
+#endif
+
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kapplication.h>
+#include <klocale.h>
+#include <kprocess.h>
+#include <kpassdlg.h>
+#include <klibloader.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kgpgfile.h"
+
+#if 0
+class KGPGFileFactory : public KLibFactory
+{
+public:
+ KGPGFileFactory() : KLibFactory() {}
+ ~KGPGFileFactory(){}
+ QObject *createObject( QObject *, const char *, const char*, const QStringList & )
+ {
+ return new KGPGFile;
+ }
+};
+
+extern "C" {
+ void *init_libkgpgfile()
+ {
+ return new KGPGFileFactory;
+ }
+}
+#endif
+
+KGPGFile::KGPGFile(const QString& fn, const QString& homedir, const QString& options) :
+ m_options(options),
+ m_homedir(homedir),
+ m_readRemain(0),
+ m_needExitLoop(false)
+{
+ setName(fn);
+ m_exitStatus = -2;
+ m_comment = "created by KGPGFile";
+ // qDebug("ungetchbuffer %d", m_ungetchBuffer.length());
+}
+
+KGPGFile::~KGPGFile()
+{
+ close();
+}
+
+void KGPGFile::init(void)
+{
+ setFlags(IO_Sequential);
+ setStatus(IO_Ok);
+ setState(0);
+}
+
+void KGPGFile::setName(const QString& fn)
+{
+ m_fn = fn;
+ if(fn[0] == '~') {
+ m_fn = QDir::homeDirPath()+fn.mid(1);
+
+ } else if(QDir::isRelativePath(m_fn)) {
+ QDir dir(fn);
+ m_fn = dir.absPath();
+ }
+ // qDebug("setName: '%s'", m_fn.data());
+}
+
+void KGPGFile::flush(void)
+{
+ // no functionality
+}
+
+void KGPGFile::addRecipient(const QCString& recipient)
+{
+ m_recipient << recipient;
+}
+
+bool KGPGFile::open(int mode)
+{
+ return open(mode, QString(), false);
+}
+
+bool KGPGFile::open(int mode, const QString& cmdArgs, bool skipPasswd)
+{
+ bool useOwnPassphrase = (getenv("GPG_AGENT_INFO") == 0);
+
+ // qDebug("KGPGFile::open(%d)", mode);
+ m_errmsg.resize(1);
+ if(isOpen()) {
+ // qDebug("File already open");
+ return false;
+ }
+
+ // qDebug("check filename empty");
+ if(m_fn.isEmpty())
+ return false;
+
+ // qDebug("setup file structures");
+ init();
+ setMode(mode);
+
+ // qDebug("check valid access mode");
+ if(!(isReadable() || isWritable()))
+ return false;
+
+ if(isWritable()) {
+ // qDebug("check recipient count");
+ if(m_recipient.count() == 0)
+ return false;
+ // qDebug("check access rights");
+ if(!checkAccess(m_fn, W_OK))
+ return false;
+ }
+
+ QStringList args;
+ if(cmdArgs.isEmpty()) {
+ args << "--homedir" << QString("\"%1\"").arg(m_homedir)
+ << "-q"
+ << "--batch";
+
+ if(isWritable()) {
+ args << "-ea"
+ << "-z" << "6"
+ << "--comment" << QString("\"%1\"").arg(m_comment)
+ << "--trust-model=always"
+ << "-o" << QString("\"%1\"").arg(m_fn);
+ QValueList<QCString>::Iterator it;
+ for(it = m_recipient.begin(); it != m_recipient.end(); ++it)
+ args << "-r" << QString("\"%1\"").arg(*it);
+
+ // some versions of GPG had trouble to replace a file
+ // so we delete it first
+ QFile::remove(m_fn);
+ } else {
+ args << "-da";
+ if(useOwnPassphrase)
+ args << "--passphrase-fd" << "0";
+ else
+ args << "--use-agent";
+ args << "--no-default-recipient" << QString("\"%1\"").arg(m_fn);
+ }
+ } else {
+ args = QStringList::split(" ", cmdArgs);
+ }
+
+ QCString pwd;
+ if(isReadable() && useOwnPassphrase && !skipPasswd) {
+ KPasswordDialog dlg(KPasswordDialog::Password,false,0);
+ dlg.setPrompt(i18n("Enter passphrase"));
+ dlg.addLine(i18n("File"), m_fn);
+ dlg.adjustSize();
+ if (dlg.exec() == QDialog::Rejected)
+ return false;
+ pwd = QCString(dlg.password());
+ }
+
+ // qDebug("starting GPG process");
+ if(!startProcess(args))
+ return false;
+
+ // qDebug("check GPG process running");
+ if(!m_process) {
+ // if the process is not present anymore, we have to check
+ // if it was a read operation and we might already have data
+ // and the process finished normally. In that case, we
+ // just continue.
+ if(isReadable()) {
+ if(m_ungetchBuffer.isEmpty())
+ return false;
+ } else
+ return false;
+ }
+
+ if(isReadable() && useOwnPassphrase && !skipPasswd) {
+ // qDebug("Passphrase is '%s'", pwd.data());
+ if(_writeBlock(pwd.data(), pwd.length()) == -1) {
+ // qDebug("Sending passphrase failed");
+ return false;
+ }
+ m_process->closeStdin();
+ }
+
+ setState( IO_Open );
+ ioIndex = 0;
+ // qDebug("File open");
+ return true;
+}
+
+bool KGPGFile::startProcess(const QStringList& args)
+{
+ // now start the KProcess with GPG
+ m_process = new KShellProcess();
+ *m_process << "gpg";
+ *m_process << args;
+
+ // QString arglist = args.join(":");
+ // qDebug("gpg '%s'", arglist.data());
+
+ connect(m_process, SIGNAL(processExited(KProcess *)),
+ this, SLOT(slotGPGExited(KProcess *)));
+
+ connect(m_process, SIGNAL(receivedStdout(KProcess*, char*, int)),
+ this, SLOT(slotDataFromGPG(KProcess*, char*, int)));
+
+ connect(m_process, SIGNAL(receivedStderr(KProcess*, char*, int)),
+ this, SLOT(slotErrorFromGPG(KProcess*, char*, int)));
+
+ connect(m_process, SIGNAL(wroteStdin(KProcess *)),
+ this, SLOT(slotSendDataToGPG(KProcess *)));
+
+ if(!m_process->start(KProcess::NotifyOnExit, (KProcess::Communication)(KProcess::Stdin|KProcess::Stdout|KProcess::Stderr))) {
+ // qDebug("m_process->start failed");
+ delete m_process;
+ m_process = 0;
+ return false;
+ }
+
+ // let the process settle and see if it starts and survives ;-)
+ kapp->processEvents(100);
+ return true;
+}
+
+void KGPGFile::close(void)
+{
+ // qDebug("KGPGFile::close()");
+ if(!isOpen()) {
+ // qDebug("File not open");
+ return;
+ }
+
+ // finish the KProcess and clean up things
+ if(m_process) {
+ if(isWritable()) {
+ // qDebug("Finish writing");
+ if(m_process->isRunning()) {
+ m_process->closeStdin();
+ // now wait for GPG to finish
+ m_needExitLoop = true;
+ qApp->enter_loop();
+ } else
+ m_process->kill();
+
+ } else if(isReadable()) {
+ // qDebug("Finish reading");
+ if(m_process->isRunning()) {
+ m_process->closeStdout();
+ // now wait for GPG to finish
+ m_needExitLoop = true;
+ qApp->enter_loop();
+ } else
+ m_process->kill();
+ }
+ }
+ m_ungetchBuffer = QCString();
+ setState(0);
+ m_recipient.clear();
+ // qDebug("File closed");
+}
+
+int KGPGFile::getch(void)
+{
+ if(!isOpen())
+ return EOF;
+ if(!isReadable())
+ return EOF;
+
+ int ch;
+
+ if(!m_ungetchBuffer.isEmpty()) {
+ ch = (m_ungetchBuffer)[0] & 0xff;
+ m_ungetchBuffer.remove(0, 1);
+
+ } else {
+ char buf[1];
+ ch = (readBlock(buf,1) == 1) ? (buf[0] & 0xff) : EOF;
+ }
+
+ // qDebug("getch returns 0x%02X", ch);
+ return ch;
+}
+
+int KGPGFile::ungetch(int ch)
+{
+ if(!isOpen())
+ return EOF;
+ if(!isReadable())
+ return EOF;
+
+ if(ch != EOF) {
+ // qDebug("store 0x%02X in ungetchbuffer", ch & 0xff);
+ m_ungetchBuffer.insert(0, ch & 0xff);
+ }
+
+ return ch;
+}
+
+int KGPGFile::putch(int c)
+{
+ char buf[1];
+ buf[0] = c;
+ if(writeBlock(buf, 1) != EOF)
+ return c;
+ return EOF;
+}
+
+Q_LONG KGPGFile::writeBlock(const char *data, Q_ULONG maxlen)
+{
+ if(!isOpen())
+ return EOF;
+ if(!isWritable())
+ return EOF;
+
+ return _writeBlock(data, maxlen);
+}
+
+Q_LONG KGPGFile::_writeBlock(const char *data, Q_ULONG maxlen)
+{
+ if(!m_process)
+ return EOF;
+ if(!m_process->isRunning())
+ return EOF;
+
+ if(m_process->writeStdin(data, maxlen)) {
+ // wait until the data has been written
+ m_needExitLoop = true;
+ qApp->enter_loop();
+ if(!m_process)
+ return EOF;
+ return maxlen;
+
+ } else
+ return EOF;
+}
+
+Q_LONG KGPGFile::readBlock(char *data, Q_ULONG maxlen)
+{
+ // char *oridata = data;
+ if(maxlen == 0)
+ return 0;
+
+ if(!isOpen())
+ return EOF;
+ if(!isReadable())
+ return EOF;
+
+ Q_ULONG nread = 0;
+ if(!m_ungetchBuffer.isEmpty()) {
+ unsigned l = m_ungetchBuffer.length();
+ if(maxlen < l)
+ l = maxlen;
+ memcpy(data, m_ungetchBuffer, l);
+ nread += l;
+ data = &data[l];
+ m_ungetchBuffer.remove(0, l);
+
+ if(!m_process) {
+ // qDebug("read %d bytes from unget buffer", nread);
+ // dumpBuffer(oridata, nread);
+ return nread;
+ }
+ }
+
+ // check for EOF
+ if(!m_process) {
+ // qDebug("EOF (no process)");
+ return EOF;
+ }
+
+ m_readRemain = maxlen - nread;
+ m_ptrRemain = data;
+ if(m_readRemain) {
+ m_process->resume();
+ m_needExitLoop = true;
+ qApp->enter_loop();
+ }
+ // if nothing has been read (maxlen-m_readRemain == 0) then we assume EOF
+ if((maxlen - m_readRemain) == 0) {
+ // qDebug("EOF (nothing read)");
+ return EOF;
+ }
+ // qDebug("return %d bytes", maxlen - m_readRemain);
+ // dumpBuffer(oridata, maxlen - m_readRemain);
+ return maxlen - m_readRemain;
+}
+
+QByteArray KGPGFile::readAll(void)
+{
+ // use a larger blocksize than in the QIODevice version
+ const int blocksize = 8192;
+ int nread = 0;
+ QByteArray ba;
+ while ( !atEnd() ) {
+ ba.resize( nread + blocksize );
+ int r = readBlock( ba.data()+nread, blocksize );
+ if ( r < 0 )
+ return QByteArray();
+ nread += r;
+ }
+ ba.resize( nread );
+ return ba;
+}
+
+void KGPGFile::slotGPGExited(KProcess* )
+{
+ // qDebug("GPG finished");
+ if(m_process) {
+ if(m_process->normalExit()) {
+ m_exitStatus = m_process->exitStatus();
+ if(m_exitStatus != 0)
+ setStatus(IO_UnspecifiedError);
+ } else {
+ m_exitStatus = -1;
+ }
+ delete m_process;
+ m_process = 0;
+ }
+
+ if(m_needExitLoop) {
+ m_needExitLoop = false;
+ qApp->exit_loop();
+ }
+}
+
+void KGPGFile::slotDataFromGPG(KProcess* proc, char* buf, int len)
+{
+ // qDebug("Received %d bytes on stdout", len);
+
+ // copy current buffer to application
+ int copylen;
+ copylen = m_readRemain < len ? m_readRemain : len;
+ if(copylen != 0) {
+ memcpy(m_ptrRemain, buf, copylen);
+ m_ptrRemain += copylen;
+ buf += copylen;
+ m_readRemain -= copylen;
+ len -= copylen;
+ }
+
+ // store rest of buffer in ungetch buffer
+ while(len--) {
+ m_ungetchBuffer += *buf++;
+ }
+
+ // if we have all the data the app requested, we can safely suspend
+ if(m_readRemain == 0) {
+ proc->suspend();
+ // wake up the recipient
+ if(m_needExitLoop) {
+ m_needExitLoop = false;
+ qApp->exit_loop();
+ }
+ }
+ // qDebug("end slotDataFromGPG");
+}
+
+void KGPGFile::slotErrorFromGPG(KProcess *, char *buf, int len)
+{
+ // qDebug("Received %d bytes on stderr", len);
+ QCString msg;
+ msg.setRawData(buf, len);
+ m_errmsg += msg;
+ msg.resetRawData(buf, len);
+}
+
+void KGPGFile::slotSendDataToGPG(KProcess *)
+{
+ // qDebug("wrote stdin");
+ if(m_needExitLoop) {
+ m_needExitLoop = false;
+ qApp->exit_loop();
+ }
+}
+
+bool KGPGFile::GPGAvailable(void)
+{
+ QString output;
+ char buffer[1024];
+ Q_LONG len;
+
+ KGPGFile file;
+ file.open(IO_ReadOnly, "--version", true);
+ while((len = file.readBlock(buffer, sizeof(buffer)-1)) != EOF) {
+ buffer[len] = 0;
+ output += QString(buffer);
+ }
+ file.close();
+ return !output.isEmpty();
+}
+
+bool KGPGFile::keyAvailable(const QString& name)
+{
+ QStringList list;
+ publicKeyList(list, name);
+ return !list.isEmpty();
+}
+
+void KGPGFile::publicKeyList(QStringList& list, const QString& pattern)
+{
+ QMap<QString, QString> map;
+ QString output;
+ char buffer[1024];
+ Q_LONG len;
+
+ list.clear();
+ KGPGFile file;
+ QString args("--list-keys --with-colons");
+ if(!pattern.isEmpty())
+ args += QString(" %1").arg(pattern);
+ file.open(IO_ReadOnly, args, true);
+ while((len = file.readBlock(buffer, sizeof(buffer)-1)) != EOF) {
+ buffer[len] = 0;
+ output += QString(buffer);
+ }
+ file.close();
+
+ // now parse the data. it looks like:
+ /*
+ tru::0:1210616414:1214841688:3:1:5
+ pub:u:1024:17:9C59DB40B75DD3BA:2001-06-23:::u:Thomas Baumgart <thomas.baumgart@syrocon.de>::scaESCA:
+ uid:u::::2001-11-29::63493BF182C494227E198FE5DA00ACDF63961AFB::Thomas Baumgart <thb@net-bembel.de>:
+ uid:u::::2001-11-29::00A393737BC120C98A6402B921599F6D72058DD8::Thomas Baumgart <ipwizard@users.sourceforge.net>:
+ sub:u:1024:16:85968A70D1F83C2B:2001-06-23::::::e:
+ */
+ QStringList lines = QStringList::split("\n", output);
+ QStringList::iterator it;
+ QString currentKey;
+ for(it = lines.begin(); it != lines.end(); ++it) {
+ // qDebug("Parsing: '%s'", (*it).data());
+ QStringList fields = QStringList::split(":", (*it), true);
+ QString val;
+ if(fields[0] == "pub") {
+ QDate expiration = QDate::fromString(fields[6], Qt::ISODate);
+ if(expiration > QDate::currentDate()) {
+ currentKey = fields[4];
+ val = QString("%1:%2").arg(currentKey).arg(fields[9]);
+ map[val] = val;
+ } else {
+ qDebug("'%s' is expired", fields[9].data());
+ }
+ } else if(fields[0] == "uid") {
+ val = QString("%1:%2").arg(currentKey).arg(fields[9]);
+ map[val] = val;
+ }
+ }
+ list = map.values();
+}
+
+
+void KGPGFile::secretKeyList(QStringList& list)
+{
+ QString output;
+ char buffer[1024];
+ Q_LONG len;
+
+ list.clear();
+ KGPGFile file;
+ file.open(IO_ReadOnly, "--list-secret-keys --with-colons", true);
+ while((len = file.readBlock(buffer, sizeof(buffer)-1)) != EOF) {
+ buffer[len] = 0;
+ output += QString(buffer);
+ }
+ file.close();
+
+ // now parse the data. it looks like:
+ /*
+ sec::1024:17:9C59DB40B75DD3BA:2001-06-23::::Thomas Baumgart <ipwizard@users.sourceforge.net>:::
+ uid:::::::::Thomas Baumgart <thb@net-bembel.de>:
+ ssb::1024:16:85968A70D1F83C2B:2001-06-23:::::::
+ sec::1024:17:59B0F826D2B08440:2005-01-03:2010-01-02:::KMyMoney emergency data recovery <kmymoney-recover@users.sourceforge.net>:::
+ ssb::2048:16:B3DABDC48C0FE2F3:2005-01-03:::::::
+ */
+ QStringList lines = QStringList::split("\n", output);
+ QStringList::iterator it;
+ QString currentKey;
+ for(it = lines.begin(); it != lines.end(); ++it) {
+ // qDebug("Parsing: '%s'", (*it).data());
+ QStringList fields = QStringList::split(":", (*it), true);
+ if(fields[0] == "sec") {
+ currentKey = fields[4];
+ list << QString("%1:%2").arg(currentKey).arg(fields[9]);
+ } else if(fields[0] == "uid") {
+ list << QString("%1:%2").arg(currentKey).arg(fields[9]);
+ }
+ }
+}
+
+/*
+// key generation
+ char * gpg_input =
+ g_strdup_printf("Key-Type: DSA\n"
+ "Key-Length: 1024\n"
+ "Subkey-Type: ELG-E\n"
+ "Subkey-Length: 1024\n"
+ "Name-Real: %s\n"
+ "Name-Comment: %s\n"
+ "Name-Email: %s\n"
+ "Passphrase: %s\n"
+ "%%commit\n",
+ username ? username : "",
+ idstring ? idstring : "",
+ email ? email : "",
+ passphrase ? passphrase : "");
+ char * argv [] =
+ { "gpg",
+ "--batch",
+ "-q",
+ "--gen-key",
+ "--keyring",
+ "~/.gnucash/gnucash.pub",
+ "--secret-keyring",
+ "~/.gnucash/gnucash.sec",
+ NULL
+ };
+
+ char * retval = gnc_gpg_transform(gpg_input, strlen(gpg_input), NULL, argv);
+ g_free(gpg_input);
+ return retval;
+
+ */
+
+#if KMM_DEBUG
+void KGPGFile::dumpBuffer(char *s, int len) const
+{
+ QString data, tmp, chars;
+ unsigned long addr = 0x0;
+
+ while(1) {
+ if(addr && !(addr & 0x0f)) {
+ qDebug("%s %s", data.data(), chars.data());
+ if(!len)
+ break;
+ }
+ if(!(addr & 0x0f)) {
+ data = tmp.sprintf("%08lX", addr);
+ chars = QString();
+ }
+ if(!(addr & 0x03)) {
+ data += " ";
+ }
+ ++addr;
+
+ if(!len) {
+ data += " ";
+ chars += " ";
+ continue;
+ }
+
+ data += tmp.sprintf("%02X", *s & 0xff);
+ if(*s >= ' ' && *s <= '~')
+ chars += *s & 0xff;
+ else
+ chars += '.';
+ ++s;
+ --len;
+ }
+}
+#endif
+
+#include "kgpgfile.moc"
diff --git a/libkgpgfile/kgpgfile.h b/libkgpgfile/kgpgfile.h
new file mode 100644
index 0000000..ba5c7d2
--- /dev/null
+++ b/libkgpgfile/kgpgfile.h
@@ -0,0 +1,185 @@
+/***************************************************************************
+ kgpgfile.h
+ -------------------
+ begin : Fri Jan 23 2004
+ copyright : (C) 2004,2005 by Thomas Baumgart
+ email : thb@net-bembel.de
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KGPGFILE_H
+#define KGPGFILE_H
+
+#include <qfile.h>
+#include <qobject.h>
+#include <qstring.h>
+#include <qstringlist.h>
+
+/**
+ * @author Thomas Baumgart
+ */
+
+class KShellProcess;
+class KProcess;
+
+/**
+ * A class for reading and writing data to/from an
+ * encrypted e.g. file.
+ *
+ * This class presents a QFile based object to the application
+ * but reads/writes data from/to the file through an instance of GPG.
+ *
+ * @code
+ *
+ * +------------------+ write +-----------+ stdin +-------+ +--------+
+ * | |--------->|\ |---------->| |---->| |
+ * | Application code | read | QFile | stdout | GPG | | File |
+ * | |<---------|/ |<----------| |<----| |
+ * +------------------+ | KGPGFile | +-------+ +--------+
+ * | control| |
+ * +-------------->| |
+ * +-----------+
+ * @endcode
+ *
+ * The @p write interface contains methods as writeBlock() and putch(), the @p read
+ * interface the methods readBlock(), getch() and ungetch(). The @p control interface
+ * special methods only available with KGPGFile e.g. addRecipient(), keyAvailable() and
+ * GPGAvailable(). Other, more general methods such as open(), close() and flush() are
+ * not shown in the above picture.
+ */
+class KGPGFile : public QObject, public QFile
+{
+ Q_OBJECT
+
+public:
+ KGPGFile(const QString& fname = "",
+ const QString& homedir = "~/.gnupg",
+ const QString& options = "");
+
+ ~KGPGFile();
+
+ virtual bool open(int mode);
+ virtual void close(void);
+ virtual void flush(void);
+
+ virtual Offset size(void) const { return 0; };
+
+ virtual Q_LONG readBlock(char *data, Q_ULONG maxlen);
+ virtual Q_LONG writeBlock(const char *data, Q_ULONG maxlen);
+ virtual QByteArray readAll(void);
+
+ virtual int getch(void);
+ virtual int putch(int c);
+ virtual int ungetch(int c);
+
+ /**
+ * Adds a recipient for whom the file should be encrypted.
+ * At least one recipient must be specified using this
+ * method before the file can be written to. @p recipient
+ * must contain a valid name as defined by GPG. See the
+ * GPG documentation for more information.
+ *
+ * @param recipient recipients identification (e.g. e-mail address)
+ */
+ void addRecipient(const QCString& recipient);
+
+ /**
+ * sets the name of the file to @p fn. This method must be
+ * called prior to open().
+ */
+ void setName(const QString& fn);
+ void setComment(const QString& txt);
+
+ const QCString errmsg(void) const { return m_errmsg; };
+ int exitStatus(void) const { return m_exitStatus; };
+
+ /**
+ * Checks whether GPG is available or not
+ *
+ * @retval true GPG can be started and returns a version number
+ * @retval false GPG is not available
+ */
+ static bool GPGAvailable(void);
+
+ /**
+ * Checks whether a key for a given user-id @p name exists.
+ *
+ * @param name the user-id to be checked. @p name can be
+ * any reference understood by GPG (e.g. an e-mail
+ * address or a key-id)
+ * @retval true key for user-id @p name was found
+ * @retval false key for user-id @p not available
+ */
+ static bool keyAvailable(const QString& name);
+
+ /**
+ * This function returns a list of the secret keys contained
+ * in the keyring. Each list item is devided into two fields
+ * separated by a colon (':'). The first field contains the
+ * key id, the second field the name. The list may contain
+ * multiple entries with the same key-id and different names.
+ *
+ * Example of an entry in the list:
+ *
+ * "9C59DB40B75DD3BA:Thomas Baumgart <ipwizard@users.sourceforge.net>"
+ */
+ static void secretKeyList(QStringList& list);
+
+ /**
+ * This function returns a list of the public keys contained
+ * in the keyring. Each list item is devided into two fields
+ * separated by a colon (':'). The first field contains the
+ * key id, the second field the name. The list may contain
+ * multiple entries with the same key-id and different names.
+ *
+ * Example of an entry in the list:
+ *
+ * "9C59DB40B75DD3BA:Thomas Baumgart <ipwizard@users.sourceforge.net>"
+ */
+ static void publicKeyList(QStringList& list, const QString& pattern = QString());
+
+#ifdef KMM_DEBUG
+ void dumpUngetBuffer(void);
+ void dumpBuffer(char *s, int len) const;
+#endif
+
+protected slots:
+ void slotGPGExited(KProcess *);
+ void slotDataFromGPG(KProcess *, char *buf, int len);
+ void slotErrorFromGPG(KProcess *, char *buf, int len);
+ void slotSendDataToGPG(KProcess *);
+
+private:
+ void init(void);
+ bool startProcess(const QStringList& args);
+ Q_LONG _writeBlock(const char *data, Q_ULONG maxlen);
+ bool open(int mode, const QString&, bool skipPasswd);
+
+private:
+ QString m_fn;
+ QString m_pubring;
+ QString m_secring;
+ QString m_options;
+ QString m_comment;
+ QString m_homedir;
+
+ KShellProcess* m_process;
+
+ QValueList<QCString> m_recipient;
+ QCString m_ungetchBuffer;
+ QCString m_errmsg;
+ int m_exitStatus;
+ Q_LONG m_readRemain;
+ char* m_ptrRemain;
+ bool m_needExitLoop;
+};
+
+#endif
diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt
new file mode 100644
index 0000000..059ee99
--- /dev/null
+++ b/po/CMakeLists.txt
@@ -0,0 +1,10 @@
+INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} )
+
+FILE(GLOB PO_FILES *.po)
+ADD_TRANSLATIONS(kmymoney2 ${PO_FILES})
+
+
+add_custom_target(message-stats
+ COMMAND "sh" "${CMAKE_CURRENT_SOURCE_DIR}/message-stats.sh" "${CMAKE_CURRENT_SOURCE_DIR}")
+
+########### install files ###############
diff --git a/po/Makefile.am b/po/Makefile.am
new file mode 100644
index 0000000..23ef5de
--- /dev/null
+++ b/po/Makefile.am
@@ -0,0 +1,25 @@
+####### kdevelop will overwrite this part!!! (begin)##########
+
+
+####### kdevelop will overwrite this part!!! (end)############
+POFILES = AUTO
+
+CONFIG_CLEAN_FILES = $(GMOFILES)
+
+message-stats:
+ @echo "<?xml version='1.0' standalone='yes'?>"
+ @echo "<!DOCTYPE issuelist>"
+ @echo "<translist>"
+ @echo "<translation><flag>C</flag>"
+ @echo "<cvsrevision>"
+ @cvs stat kmymoney2.pot | grep Working | cut -d: -f2 | sed -e 's/\ *//'
+ @echo "</cvsrevision>"
+ @echo -n "<potrevision>"
+ @R=`grep POT kmymoney2.pot | cut -d' ' -f 2`; \
+ echo "$$R</potrevision>"
+ @echo "</translation>"
+
+ @for i in ${srcdir}/*.po; do \
+ ${srcdir}/stats.pl $$i; \
+ done;
+ @echo "</translist>"
diff --git a/po/ca.po b/po/ca.po
new file mode 100644
index 0000000..42dbbd5
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,14153 @@
+# Translation of kmymoney2-0.8.5.po to Catalan
+# This file is put in the public domain.
+#
+# Orestes Mas Casals <orestes@tsc.upc.edu>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmymoney2-0.8.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-25 19:04+0200\n"
+"PO-Revision-Date: 2006-08-28 02:34+0200\n"
+"Last-Translator: Orestes Mas <orestes@tsc.upc.edu>\n"
+"Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.2\n"
+
+#: wizards/wizardpages/rc.cpp:1
+msgid ""
+"Select groups of accounts that correspond to the ways that you will use "
+"KMyMoney. Each group you select will cause several accounts and categories "
+"to be created. Select the groups that are relevant to you. You can always "
+"create additional accounts manually later."
+msgstr ""
+
+#: wizards/wizardpages/rc.cpp:2
+msgid ""
+"<p>KMyMoney supports multiple currencies, nevertheless one of them will be "
+"used as your base currency. The base currency is used as default for new "
+"accounts and reports. Please select the base currency from the following "
+"list."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:71 dialogs/rc.cpp:399 dialogs/rc.cpp:485
+#: dialogs/rc.cpp:724 dialogs/settings/rc.cpp:108 reports/listtable.cpp:226
+#: views/kinvestmentview.cpp:71 views/kpayeesview.cpp:351 views/rc.cpp:13
+#: widgets/rc.cpp:5 widgets/rc.cpp:34
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1599
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1629
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1673
+#: wizards/wizardpages/rc.cpp:3
+msgid "Name"
+msgstr "Nom"
+
+#: wizards/wizardpages/rc.cpp:4
+msgid "ISO Code"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:69 dialogs/kequitypriceupdatedlg.cpp:70
+#: dialogs/rc.cpp:71 dialogs/rc.cpp:725 dialogs/settings/rc.cpp:112
+#: views/kinvestmentview.cpp:72 widgets/rc.cpp:37 wizards/wizardpages/rc.cpp:5
+msgid "Symbol"
+msgstr "Símbol"
+
+#: wizards/wizardpages/rc.cpp:6
+#, fuzzy
+msgid ""
+"<p>Use the fields below to enter some information about yourself.</p>\n"
+"\n"
+"<p>All information is optional and only used to personalize your KMyMoney "
+"file.</p>"
+msgstr ""
+"Empreu aquest diàleg per introduir la vostra informació personal.\n"
+"\n"
+"Tota la informació és optativa i s'utilitza per personalitzar \n"
+"el vostre fitxer KMyMoney."
+
+#: dialogs/rc.cpp:425 wizards/newuserwizard/rc.cpp:27
+#: wizards/wizardpages/rc.cpp:7
+msgid "Town:"
+msgstr "Població:"
+
+#: dialogs/rc.cpp:420 wizards/newuserwizard/rc.cpp:22
+#: wizards/wizardpages/rc.cpp:8
+msgid "County/State:"
+msgstr "Regió/País:"
+
+#: dialogs/rc.cpp:391 dialogs/rc.cpp:421 wizards/newuserwizard/rc.cpp:23
+#: wizards/wizardpages/rc.cpp:9
+msgid "Street:"
+msgstr "Carrer:"
+
+#: dialogs/rc.cpp:422 wizards/newuserwizard/rc.cpp:24
+#: wizards/wizardpages/rc.cpp:10
+msgid "Email:"
+msgstr "Correu electrònic:"
+
+#: dialogs/rc.cpp:424 wizards/newuserwizard/rc.cpp:26
+#: wizards/wizardpages/rc.cpp:11
+msgid "Telephone:"
+msgstr "Telèfon:"
+
+#: dialogs/rc.cpp:423 wizards/newuserwizard/rc.cpp:25
+#: wizards/wizardpages/rc.cpp:12
+msgid "Your name:"
+msgstr "El vostre nom:"
+
+#: dialogs/rc.cpp:427 wizards/newuserwizard/rc.cpp:29
+#: wizards/wizardpages/rc.cpp:13
+msgid "Load from Addressbook"
+msgstr ""
+
+#: dialogs/rc.cpp:392 dialogs/rc.cpp:426 views/rc.cpp:68
+#: wizards/wizardpages/rc.cpp:14
+msgid "Postal Code:"
+msgstr "Codi postal:"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:82
+msgid "KMyMoney New Account Setup"
+msgstr ""
+
+#: dialogs/rc.cpp:360 dialogs/rc.cpp:361 reports/listtable.cpp:230
+#: wizards/newaccountwizard/knewaccountwizard.cpp:83
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1616
+#: wizards/newaccountwizard/rc.cpp:61
+msgid "Institution"
+msgstr "Institució"
+
+#: dialogs/investactivities.cpp:198 dialogs/investactivities.cpp:286
+#: dialogs/investactivities.cpp:367 dialogs/kfindtransactiondlg.cpp:181
+#: dialogs/rc.cpp:139 dialogs/rc.cpp:192 dialogs/rc.cpp:207
+#: dialogs/transactioneditor.cpp:734 reports/listtable.cpp:201
+#: reports/pivottable.cpp:1336 reports/pivottable.cpp:1586
+#: views/kforecastview.cpp:393 views/kgloballedgerview.cpp:175
+#: views/khomeview.cpp:418 views/khomeview.cpp:491 views/khomeview.cpp:525
+#: views/khomeview.cpp:764 views/khomeview.cpp:967 views/khomeview.cpp:1437
+#: views/kscheduledview.cpp:71 views/rc.cpp:17 views/rc.cpp:44
+#: widgets/kmymoneyaccounttreebase.cpp:58
+#: widgets/kmymoneyaccounttreeforecast.cpp:41 widgets/rc.cpp:109
+#: widgets/register.cpp:566 widgets/transaction.cpp:978
+#: widgets/transaction.cpp:1535
+#: wizards/newaccountwizard/knewaccountwizard.cpp:84
+msgid "Account"
+msgstr "Compte"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:85
+#, fuzzy
+msgid "Broker"
+msgstr " (Gestoria)"
+
+#: dialogs/kfindtransactiondlg.cpp:225 dialogs/rc.cpp:70 dialogs/rc.cpp:104
+#: dialogs/rc.cpp:159 dialogs/rc.cpp:223 dialogs/rc.cpp:246 dialogs/rc.cpp:751
+#: dialogs/settings/rc.cpp:109 widgets/rc.cpp:35 widgets/register.cpp:568
+#: wizards/newaccountwizard/knewaccountwizard.cpp:86
+msgid "Details"
+msgstr "Detalls"
+
+#: dialogs/knewloanwizard.cpp:636 dialogs/rc.cpp:231 dialogs/rc.cpp:608
+#: kmymoneyutils.cpp:191 views/khomeview.cpp:399
+#: wizards/newaccountwizard/knewaccountwizard.cpp:87
+#: wizards/newaccountwizard/knewaccountwizard.cpp:880
+msgid "Payments"
+msgstr "Pagaments"
+
+#: dialogs/investactivities.cpp:195 dialogs/investactivities.cpp:283
+#: dialogs/investactivities.cpp:422 dialogs/investtransactioneditor.cpp:217
+#: reports/listtable.cpp:221 widgets/transaction.cpp:1565
+#: wizards/newaccountwizard/knewaccountwizard.cpp:88
+msgid "Fees"
+msgstr ""
+
+#: dialogs/rc.cpp:624 views/khomeview.cpp:415 views/khomeview.cpp:488
+#: views/khomeview.cpp:522 wizards/newaccountwizard/knewaccountwizard.cpp:89
+msgid "Schedule"
+msgstr "Programació"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:90
+#, fuzzy
+msgid "Payout"
+msgstr "Paga a"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:91
+#, fuzzy
+msgid "Parent Account"
+msgstr "Comptes monetaris"
+
+#: dialogs/rc.cpp:719 wizards/newaccountwizard/knewaccountwizard.cpp:92
+#: wizards/newuserwizard/knewuserwizard.cpp:86
+#, fuzzy
+msgid "Finish"
+msgstr "&Acaba"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:248
+#, fuzzy
+msgid "Credit card payment"
+msgstr "Targeta de crèdit"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:264
+#, fuzzy, c-format
+msgid "Loan payment for %1"
+msgstr "Verifica els pagaments"
+
+#: mymoney/mymoneyscheduled.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:279
+msgid "Loan payment"
+msgstr ""
+
+#: dialogs/rc.cpp:134 wizards/newaccountwizard/knewaccountwizard.cpp:293
+msgid "Amortization"
+msgstr "Amortització"
+
+#: dialogs/investactivities.cpp:196 dialogs/investactivities.cpp:284
+#: dialogs/investactivities.cpp:366 dialogs/investactivities.cpp:423
+#: dialogs/investtransactioneditor.cpp:227 dialogs/rc.cpp:135
+#: dialogs/rc.cpp:152 dialogs/rc.cpp:544 reports/listtable.cpp:222
+#: widgets/transaction.cpp:1597
+#: wizards/newaccountwizard/knewaccountwizard.cpp:302
+msgid "Interest"
+msgstr "Interès"
+
+#: dialogs/kcurrencycalculator.cpp:282
+#: wizards/newaccountwizard/knewaccountwizard.cpp:351
+#: wizards/newaccountwizard/knewaccountwizard.cpp:356
+msgid "User"
+msgstr "Usuari"
+
+#: kmymoneyutils.cpp:64 mymoney/mymoneyaccount.cpp:711
+#: reports/querytabletest.cpp:422
+#: wizards/newaccountwizard/knewaccountwizard.cpp:451
+msgid "Checking"
+msgstr "Compte Corrent"
+
+#: kmymoneyutils.cpp:66 mymoney/mymoneyaccount.cpp:714
+#: wizards/newaccountwizard/knewaccountwizard.cpp:452
+msgid "Savings"
+msgstr "Estalvis"
+
+#: kmymoneyutils.cpp:68 mymoney/mymoneyaccount.cpp:717
+#: reports/querytabletest.cpp:423
+#: wizards/newaccountwizard/knewaccountwizard.cpp:453
+msgid "Credit Card"
+msgstr "Targeta de crèdit"
+
+#: kmymoneyutils.cpp:70 mymoney/mymoneyaccount.cpp:720
+#: wizards/newaccountwizard/knewaccountwizard.cpp:454
+msgid "Cash"
+msgstr "Efectiu"
+
+#: kmymoneyutils.cpp:72 mymoney/mymoneyaccount.cpp:723
+#: wizards/newaccountwizard/knewaccountwizard.cpp:455
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+msgid "Loan"
+msgstr "Préstec"
+
+#: kmymoneyutils.cpp:76 mymoney/mymoneyaccount.cpp:729
+#: wizards/newaccountwizard/knewaccountwizard.cpp:456
+msgid "Investment"
+msgstr "Inversions"
+
+#: converter/mymoneytemplate.cpp:178 converter/mymoneytemplate.cpp:179
+#: dialogs/knewaccountdlg.cpp:1014 kmymoneyutils.cpp:80
+#: mymoney/mymoneyaccount.cpp:735 views/kaccountsview.cpp:352
+#: views/kmymoneyview.cpp:765 widgets/kmymoneyaccountselector.cpp:177
+#: widgets/kmymoneyaccountselector.cpp:356
+#: wizards/newaccountwizard/knewaccountwizard.cpp:457
+msgid "Asset"
+msgstr "Actiu"
+
+#: converter/mymoneytemplate.cpp:182 converter/mymoneytemplate.cpp:183
+#: dialogs/knewaccountdlg.cpp:1016 kmymoneyutils.cpp:82
+#: mymoney/mymoneyaccount.cpp:738 views/kaccountsview.cpp:356
+#: views/kmymoneyview.cpp:766 widgets/kmymoneyaccountselector.cpp:178
+#: widgets/kmymoneyaccountselector.cpp:363
+#: wizards/newaccountwizard/knewaccountwizard.cpp:458
+msgid "Liability"
+msgstr "Passiu"
+
+#: converter/mymoneytemplate.cpp:194 converter/mymoneytemplate.cpp:195
+#: kmymoneyutils.cpp:94 mymoney/mymoneyaccount.cpp:756
+#: views/kaccountsview.cpp:369 views/kmymoneyview.cpp:769
+#: widgets/kmymoneyaccountselector.cpp:181
+#: widgets/kmymoneyaccountselector.cpp:390
+#: wizards/newaccountwizard/knewaccountwizard.cpp:460
+msgid "Equity"
+msgstr "Patrimoni"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid ""
+"Please make sure to enter the correct conversion for the selected opening "
+"date. If you requested an online quote it might be provided for a different "
+"date."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+#, fuzzy
+msgid "Check date"
+msgstr "Taló/Xec"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:562
+msgid "1 %1 equals %2"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:577
+msgid "Conversion rate is not positive"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:583
+msgid "No account name supplied"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:114 mymoney/mymoneyscheduled.cpp:1026
+#: wizards/newaccountwizard/knewaccountwizard.cpp:680
+msgid "Write check"
+msgstr "Taló"
+
+#: dialogs/keditscheduledlg.cpp:111 mymoney/mymoneyscheduled.cpp:1014
+#: wizards/newaccountwizard/knewaccountwizard.cpp:682
+msgid "Direct debit"
+msgstr "Càrrec/Domiciliació"
+
+#: dialogs/keditscheduledlg.cpp:113 mymoney/mymoneyscheduled.cpp:1032
+#: wizards/newaccountwizard/knewaccountwizard.cpp:683
+#, fuzzy
+msgid "Bank transfer"
+msgstr "Transferència"
+
+#: dialogs/keditscheduledlg.cpp:112 mymoney/mymoneyscheduled.cpp:1029
+#: wizards/newaccountwizard/knewaccountwizard.cpp:685
+msgid "Standing order"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:110 mymoney/mymoneyscheduled.cpp:1020
+#: wizards/newaccountwizard/knewaccountwizard.cpp:686
+msgid "Manual deposit"
+msgstr "Ingrés manual"
+
+#: dialogs/keditscheduledlg.cpp:109 mymoney/mymoneyscheduled.cpp:1017
+#: wizards/newaccountwizard/knewaccountwizard.cpp:687
+msgid "Direct deposit"
+msgstr "Ingrés directe"
+
+#: dialogs/keditscheduledlg.cpp:115 mymoney/mymoneyscheduled.cpp:1023
+#: wizards/newaccountwizard/knewaccountwizard.cpp:688
+msgid "Other"
+msgstr "Altres"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:697
+#, fuzzy
+msgid "CreditCard %1 monthly payment"
+msgstr "Pagament mensual estimat"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:703
+msgid "Finish entry and create account"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:705
+msgid "Finish entry and create account and schedule"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:708
+msgid "Next due date is prior to opening date"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:712
+#, fuzzy
+msgid "No account selected"
+msgstr "Selecció de compte"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:716
+msgid "No amount for payment selected"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:720
+msgid "No payee for payment selected"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:724
+msgid "No name assigned for schedule"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:805
+msgid "No payee supplied"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:819
+#, fuzzy
+msgid "No opening balance supplied"
+msgstr "Saldos d'obertura"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:826
+msgid "An interest change can only happen after the first payment"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:615 dialogs/knewloanwizard.cpp:634
+#: wizards/newaccountwizard/knewaccountwizard.cpp:884
+#: wizards/newaccountwizard/rc.cpp:55
+msgid "Months"
+msgstr "Mesos"
+
+#: dialogs/knewloanwizard.cpp:616 dialogs/knewloanwizard.cpp:635
+#: wizards/newaccountwizard/knewaccountwizard.cpp:885
+#: wizards/newaccountwizard/knewaccountwizard.cpp:889
+#: wizards/newaccountwizard/rc.cpp:56
+msgid "Years"
+msgstr "Anys"
+
+#: dialogs/knewloanwizard.cpp:711
+#: wizards/newaccountwizard/knewaccountwizard.cpp:961
+#, c-format
+msgid "KMyMoney has calculated the amount of the loan as %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:718
+#: wizards/newaccountwizard/knewaccountwizard.cpp:968
+msgid "KMyMoney has calculated the interest rate to %1%."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:731
+#: wizards/newaccountwizard/knewaccountwizard.cpp:981
+msgid ""
+"KMyMoney has calculated a periodic payment of %1 to cover principal and "
+"interest."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:993
+#, c-format
+msgid ""
+"The number of payments has been decremented and the balloon payment has been "
+"modified to %1."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1001
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1021
+#, c-format
+msgid "The balloon payment has been modified to %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:763
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1013
+msgid "KMyMoney has calculated the term of your loan as %1. "
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1052
+msgid "KMyMoney has calculated a balloon payment of %1 for this loan."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:809
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1059
+msgid "KMyMoney has successfully verified your loan information."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1067
+msgid ""
+"You have entered mis-matching information. Please modify your figures or "
+"leave one value empty to let KMyMoney calculate it for you"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:504 dialogs/knewloanwizard.cpp:513
+#: dialogs/knewloanwizard.cpp:522 dialogs/knewloanwizard.cpp:532
+#: dialogs/knewloanwizard.cpp:820
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1070
+msgid "Calculation error"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:824
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1074
+msgid ""
+"\n"
+"\n"
+"Accept this or modify the loan information and recalculate."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:826
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1076
+msgid "Calculation successful"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:846
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1129
+#, c-format
+msgid ""
+"_n: one month\n"
+"%n months"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:850
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1133
+#, c-format
+msgid ""
+"_n: one year\n"
+"%n years"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:854
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1137
+#, c-format
+msgid ""
+"_n: one payment\n"
+"%n payments"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1190
+msgid "Press Calculate to verify the values"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1194
+msgid "Not all details supplied"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:70 dialogs/knewloanwizard.cpp:122
+#: dialogs/knewloanwizard.cpp:136
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1381
+msgid "&Create..."
+msgstr "&Crea..."
+
+#: dialogs/knewloanwizard.cpp:138
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1383
+msgid "Create a new asset account"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1384
+msgid ""
+"If the asset account does not yet exist, press this button to create it."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1596
+#, fuzzy
+msgid "Account information"
+msgstr "Opcions del compte"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1601
+#: wizards/newaccountwizard/rc.cpp:59
+#, fuzzy
+msgid "Subaccount of"
+msgstr "compte"
+
+#: dialogs/rc.cpp:225 dialogs/rc.cpp:326 dialogs/rc.cpp:371 dialogs/rc.cpp:723
+#: plugins/ofximport/dialogs/rc.cpp:23 reports/listtable.cpp:225
+#: widgets/kmymoneyaccounttreebase.cpp:113 widgets/register.cpp:61
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1606
+msgid "Type"
+msgstr "Tipus"
+
+#: dialogs/kcurrencyeditdlg.cpp:62 dialogs/rc.cpp:56 dialogs/rc.cpp:59
+#: dialogs/rc.cpp:75 dialogs/rc.cpp:727 dialogs/rc.cpp:792
+#: kmymoneyutils.cpp:84 kmymoneyutils.cpp:111 mymoney/mymoneyaccount.cpp:741
+#: mymoney/mymoneysecurity.cpp:169 reports/listtable.cpp:233
+#: widgets/kmymoneypriceview.cpp:127
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1607
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1630
+#: wizards/newaccountwizard/rc.cpp:6 wizards/newaccountwizard/rc.cpp:24
+msgid "Currency"
+msgstr "Divisa"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1608
+#: wizards/newaccountwizard/rc.cpp:7 wizards/newuserwizard/rc.cpp:9
+#, fuzzy
+msgid "Opening date"
+msgstr "Saldos d'obertura"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1610
+#: wizards/newaccountwizard/rc.cpp:9
+#, fuzzy
+msgid "Conversion rate"
+msgstr "Tipus d'interès"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1613
+#: wizards/newaccountwizard/rc.cpp:15 wizards/newuserwizard/rc.cpp:13
+#, fuzzy
+msgid "Opening balance"
+msgstr "Saldos d'obertura"
+
+#: dialogs/keditscheduledlg.cpp:507 dialogs/transactioneditor.cpp:784
+#: dialogs/transactioneditor.cpp:848 plugins/ofximport/dialogs/rc.cpp:22
+#: widgets/rc.cpp:111 widgets/register.cpp:59 widgets/transaction.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1618
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1632
+msgid "Number"
+msgstr "Número"
+
+#: dialogs/rc.cpp:365 wizards/newaccountwizard/knewaccountwizard.cpp:1621
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1634
+#: wizards/newaccountwizard/rc.cpp:26 wizards/newaccountwizard/rc.cpp:66
+msgid "IBAN"
+msgstr "IBAN"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1627
+#, fuzzy
+msgid "Brokerage Account"
+msgstr "Compte preferit"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1640
+#, fuzzy
+msgid "Loan information"
+msgstr "Informació de pagament"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1643
+#, fuzzy
+msgid "Amount borrowed"
+msgstr "demanat"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1645
+#, fuzzy
+msgid "Amount lent"
+msgstr "Total"
+
+#: dialogs/rc.cpp:515 dialogs/rc.cpp:546
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1647
+#: wizards/newaccountwizard/rc.cpp:75
+msgid "Interest rate"
+msgstr "Tipus d'interès"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1648
+#, fuzzy
+msgid "Interest rate is"
+msgstr "Tipus d'interès"
+
+#: dialogs/rc.cpp:509 dialogs/rc.cpp:572
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1649
+msgid "Principal and interest"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1650
+#: wizards/newaccountwizard/rc.cpp:90
+msgid "Additional fees"
+msgstr ""
+
+#: dialogs/rc.cpp:525 wizards/newaccountwizard/knewaccountwizard.cpp:1651
+#: wizards/newaccountwizard/rc.cpp:44
+msgid "Payment frequency"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1652
+#: wizards/newaccountwizard/rc.cpp:105
+#, fuzzy
+msgid "Payment account"
+msgstr "Comptes monetaris"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1655
+#, fuzzy
+msgid "Payout information"
+msgstr "Informació de pagament"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1658
+#, fuzzy
+msgid "Refinance"
+msgstr "Re&nomena"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1661
+#, fuzzy
+msgid "Transfer amount to"
+msgstr "Transfereix a"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1663
+#, fuzzy
+msgid "Transfer amount from"
+msgstr "Transfereix de"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1665
+#, fuzzy
+msgid "Payment date"
+msgstr "Pagaments a"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1671
+#, fuzzy
+msgid "Schedule information"
+msgstr "Assentaments programats"
+
+#: reports/listtable.cpp:228
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1684
+#, fuzzy
+msgid "Occurence"
+msgstr "Divises"
+
+#: mymoney/mymoneyscheduled.cpp:891 mymoney/mymoneyscheduled.cpp:947
+#: mymoney/mymoneyscheduled.cpp:1283 mymoney/mymoneyscheduletest.cpp:1343
+#: widgets/rc.cpp:19 widgets/rc.cpp:74
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+msgid "Monthly"
+msgstr "Mensual"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1677
+#, fuzzy
+msgid "Paid from"
+msgstr "Vàlid des de:"
+
+#: widgets/kmymoneycombo.cpp:473 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1678
+msgid "Pay to"
+msgstr "Paga a"
+
+#: dialogs/investactivities.cpp:197 dialogs/investactivities.cpp:285
+#: dialogs/investactivities.cpp:365 dialogs/kfindtransactiondlg.cpp:197
+#: dialogs/kmymoneysplittable.cpp:80 dialogs/rc.cpp:51 dialogs/rc.cpp:212
+#: reports/listtable.cpp:197 views/khomeview.cpp:421 views/khomeview.cpp:494
+#: views/khomeview.cpp:528 views/kscheduledview.cpp:73 views/rc.cpp:63
+#: widgets/register.cpp:58 widgets/transaction.cpp:1055
+#: widgets/transaction.cpp:1578 widgets/transaction.cpp:1610
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1679
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1685
+msgid "Amount"
+msgstr "Total"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1680
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1686
+#, fuzzy
+msgid "First payment due"
+msgstr "Pagaments propers"
+
+#: dialogs/rc.cpp:102 wizards/newaccountwizard/knewaccountwizard.cpp:1681
+#: wizards/newaccountwizard/rc.cpp:115
+msgid "Payment method"
+msgstr "Mètode de pagament"
+
+#: wizards/newaccountwizard/rc.cpp:1
+msgid ""
+"This page summarizes the data you have entered. Press <b>Finish</b> to "
+"create the account, schedules, etc. or use <b>Back</b> to modify your "
+"entries."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:2
+msgid "Item"
+msgstr ""
+
+#: dialogs/rc.cpp:110 dialogs/rc.cpp:165 dialogs/rc.cpp:252 dialogs/rc.cpp:757
+#: dialogs/rc.cpp:818 views/kinvestmentview.cpp:74 widgets/register.cpp:574
+#: wizards/newaccountwizard/rc.cpp:3
+msgid "Value"
+msgstr "Valor"
+
+#: wizards/newaccountwizard/rc.cpp:4
+msgid ""
+"Enter the name of the account under which it is known within KMyMoney.\n"
+"Select the type for the new account. Use the <b>What's this?</b> feature to "
+"see more details about the various account types.\n"
+"Enter the date the account was opened and its currency."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:5
+msgid "Select the currency in which this account is denominated."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:8
+msgid ""
+"The opening balance is the balance of the account when you start using it "
+"with KMyMoney. For new accounts this is usually 0 but for existing accounts "
+"this may well differ. Please consult the account statements to figure out "
+"this value. The opening balance is to be provided in the currency of the "
+"account as selected with the currency button."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:10
+#, fuzzy
+msgid ""
+"The opening date would be the date of the last statement. In case you want "
+"to keep track of transactions prior to this date, enter the ending balance "
+"and statement date of a prior statement and add all following transactions "
+"into KMyMoney.\n"
+"<br>\n"
+"<i>Note</i>: If you do not know the exact amount of the opening balance, "
+"enter an estimate. You can change this value later before you reconcile this "
+"account for the first time."
+msgstr ""
+"Entreu el saldo final del vostre darrer extracte. En cas que vulgueu tenir "
+"un registre d'assentaments anteriors a aquesta data, entreu el saldo final "
+"d'algun extracte anterior i afegiu tots els assentaments subsegüents.\n"
+"<br>\n"
+"Nota: Si voleu mantenir aquest compte des de la data d'obertura, entreu 0. "
+"Si no en coneixeu el saldo exacte, entreu una estimació. Més tard podreu "
+"canviar aquest valor quan concilieu aquest compte."
+
+#: dialogs/rc.cpp:52 dialogs/rc.cpp:54 dialogs/rc.cpp:57 dialogs/rc.cpp:60
+#: dialogs/rc.cpp:748 dialogs/rc.cpp:749 dialogs/rc.cpp:768 widgets/rc.cpp:6
+#: widgets/rc.cpp:7 widgets/rc.cpp:8 widgets/rc.cpp:9 widgets/rc.cpp:10
+#: widgets/rc.cpp:11 widgets/rc.cpp:12 widgets/rc.cpp:13 widgets/rc.cpp:14
+#: widgets/rc.cpp:15 widgets/rc.cpp:16 widgets/rc.cpp:17
+#: wizards/newaccountwizard/rc.cpp:11 wizards/newaccountwizard/rc.cpp:88
+#: wizards/newaccountwizard/rc.cpp:91 wizards/newaccountwizard/rc.cpp:93
+#: wizards/newuserwizard/rc.cpp:14
+msgid "xxx"
+msgstr "xxx"
+
+#: wizards/newaccountwizard/rc.cpp:12
+#, fuzzy
+msgid "Account type"
+msgstr "Nom del compte"
+
+#: wizards/newaccountwizard/rc.cpp:13
+msgid ""
+"For foreign currencies an initial conversion rate needs to be provided. This "
+"should be the price of the foreign currency in the base currency on the "
+"opening date of the account."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:14
+#, fuzzy
+msgid "Account name"
+msgstr "Nom del compte"
+
+#: wizards/newaccountwizard/rc.cpp:16
+msgid ""
+"<p><b>Checking</b>\n"
+"Use the checking account type to manage activities on your checking account "
+"e.g. payments, checks and cash card purchases.</p>\n"
+"\n"
+"<p><b>Savings</b>\n"
+"Use the savings account type to manage activities on your savings account.</"
+"p>\n"
+"\n"
+"<p><b>Credit Card</b>\n"
+"Use the credit card account type to manage activities on your credit card.</"
+"p>\n"
+"\n"
+"<p><b>Cash</b>\n"
+"\n"
+"Use the cash account type to manage activities in your wallet.</p>\n"
+"\n"
+"<p><b>Loan</b>\n"
+"Use the loan account type to manage amortization loans (e.g. mortgages, car "
+"loan, money you lend, private loans etc.).</p>\n"
+"\n"
+"<p><b>Investment</b>\n"
+"Use the investment account to manage your stock, mutual fund and other "
+"investments.</p>\n"
+"\n"
+"<p><b>Asset</b>\n"
+"Use the asset account type to manage assets (e.g. your house, car or art "
+"collection).</p>\n"
+"\n"
+"<p><b>Liability</b>\n"
+"Use the liability account type to manage any type of liability except "
+"amortization loans. Use it for taxes you owe or money you borrowed from "
+"friends. For amortization loans like mortgages you should create a loan "
+"account.</p>"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:17
+msgid "Preferred account"
+msgstr "Compte preferit"
+
+#: wizards/newaccountwizard/rc.cpp:18
+msgid ""
+"Mark this checkbox if the account should be maintained as preferred account"
+msgstr ""
+"Marqueu aquesta opció si el compte s'ha de tractar com un compte preferit"
+
+#: wizards/newaccountwizard/rc.cpp:19
+#, fuzzy
+msgid ""
+"Selecting the <b>Preferred Account</b> checkbox will allow preferred access "
+"in some dialogs and views of KMyMoney."
+msgstr ""
+"Activant l'opció de la caixa selectora <b>Compte preferit</b> permetrà "
+"l'accés preferit en algunes caixes de diàleg."
+
+#: wizards/newaccountwizard/rc.cpp:20
+msgid "Enter a name under which this account is known within KMyMoney."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:21
+#, fuzzy
+msgid "Online quote"
+msgstr "Cotitzacions en línia"
+
+#: wizards/newaccountwizard/rc.cpp:22
+#, fuzzy
+msgid ""
+"Does this investment account have a brokerage account?<p>\n"
+"\n"
+"<b>Check</b> the mark if this investment account has an associated account "
+"for money that is not invested.<br>\n"
+"\n"
+"<b>Uncheck</b> it if you don't use this account for active stock brokerage. "
+"You should also uncheck it if this account is not maintained by a bank or "
+"broker."
+msgstr ""
+"Escolliu <b>Sí</b> si aquest compte d'inversions té associat un compte per a "
+"diners que no estan invertits.<br>\n"
+"\n"
+"Escolliu <b>No</b> si no utilitzeu aquest compte per fer una correduría de "
+"valors activa. També hauríeu d'escollir <b>No</b> si aquest compte no està "
+"mantingut per cap banc o agent."
+
+#: wizards/newaccountwizard/rc.cpp:23
+#, fuzzy
+msgid "Create brokerage account"
+msgstr "Compte preferit"
+
+#: wizards/newaccountwizard/rc.cpp:25 wizards/newaccountwizard/rc.cpp:64
+#, fuzzy
+msgid "Account number"
+msgstr "Número de compte"
+
+#: wizards/newaccountwizard/rc.cpp:27
+msgid ""
+"Please select the required options. Please use the <b>What's this?</b> "
+"feature to see more information about the items."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:28
+#, fuzzy
+msgid "What is the type of the loan?"
+msgstr "Quin nom voleu donar al compte?"
+
+#: dialogs/rc.cpp:481 wizards/newaccountwizard/rc.cpp:29
+msgid "I am borrowing money"
+msgstr "Estic demanant diners"
+
+#: dialogs/rc.cpp:482 wizards/newaccountwizard/rc.cpp:30
+msgid "I am lending money"
+msgstr "Estic deixant diners"
+
+#: wizards/newaccountwizard/rc.cpp:31
+#, fuzzy
+msgid "Who is the payee/payer of the loan?"
+msgstr "Quin nom voleu donar al compte?"
+
+#: wizards/newaccountwizard/rc.cpp:32
+msgid ""
+"Enter the name of the person or bank you owe money or who owes you money.\n"
+"\n"
+"If the name does not exist within KMyMoney's database, you are asked if you "
+"want to create it."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:33
+msgid "Did you make/receive any payments yet?"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:36
+msgid ""
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?\n"
+"\n"
+"Note: Payments made to obtain the loan (e.g. Disagio) are not considered as "
+"payments in this context."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:37
+#, fuzzy
+msgid "Which payments do you want to record?"
+msgstr "Quin tipus de compte voleu crear?"
+
+#: wizards/newaccountwizard/rc.cpp:38
+#, fuzzy
+msgid "All payments"
+msgstr "Pagaments"
+
+#: wizards/newaccountwizard/rc.cpp:39
+#, fuzzy
+msgid "Start with this year's payments"
+msgstr "Mostra la pàgina principal en començar"
+
+#: wizards/newaccountwizard/rc.cpp:40
+msgid ""
+"<qt>Select which transactions should be recorded.\n"
+"\n"
+"<b>All payments</b> allows you to enter all payments made for this loan.\n"
+"\n"
+"The option to <b>start from the beginning of the current year</b> is meant "
+"for loans that are active for a longer period of time already and you don't "
+"want to enter all transactions of the past.\n"
+"</qt>"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:41
+msgid "Balance before start of recording"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:42
+msgid ""
+"Enter the ending balance found on the statement that is the last one before "
+"you want to start recording this loan in KMyMoney."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:43
+msgid ""
+"You have selected to record only payments from the beginning of this year. "
+"Since prior transactions will not be recorded, you need to supply the "
+"balance of the loan on January 1st of this year."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:45
+msgid "Interest Compounding frequency"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:46
+msgid ""
+"Select the frequency with which the interest is compounded. If uncertain, "
+"select the same as the payment frequency. Consult your loan contract for "
+"details."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:47
+#, fuzzy
+msgid "Due date of first payment to be recorded"
+msgstr "Data de venciment del proper pagament"
+
+#: wizards/newaccountwizard/rc.cpp:48
+msgid ""
+"Depending on the answer to <b>What do you want to record?</b> this field "
+"means the following:<p>\n"
+"\n"
+"<b>All payments</b><br>\n"
+"Enter the due date of the very first payment<p>\n"
+"\n"
+"<b>Start with this year's payments</b><br>\n"
+"Enter the due date of the first payment in the current year"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:49
+#, fuzzy
+msgid "Type of interest rate"
+msgstr "Tipus d'inversió"
+
+#: wizards/newaccountwizard/rc.cpp:50
+#, fuzzy
+msgid "Fixed"
+msgstr "Camp"
+
+#: wizards/newaccountwizard/rc.cpp:51
+#, fuzzy
+msgid "Variable"
+msgstr "Valor"
+
+#: wizards/newaccountwizard/rc.cpp:52
+msgid "Time between interest changes"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:613 wizards/newaccountwizard/rc.cpp:53
+msgid "Days"
+msgstr "Dies"
+
+#: dialogs/knewloanwizard.cpp:614 wizards/newaccountwizard/rc.cpp:54
+msgid "Weeks"
+msgstr "Setmanes"
+
+#: wizards/newaccountwizard/rc.cpp:57
+#, fuzzy
+msgid "Next interest change is due"
+msgstr "L'interès venç el:"
+
+#: wizards/newaccountwizard/rc.cpp:58
+msgid "This page allows you to select the parent account."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:60
+#, fuzzy
+msgid ""
+"If this account is managed by an institution please select the institution "
+"from the list. If the institution does not exist yet, please choose the "
+"<b>New Institution</b> button to create it. Otherwise, leave this field "
+"empty.\n"
+"Enter the account number used by the institution to identify the account."
+msgstr ""
+"Si aquest compte està gestionat per alguna institució, si us plau escolliu-"
+"la de la llista. Si la institució encara no existeix, premeu el botó "
+"<b>Institució nova</b> per crear-la.\n"
+"<br>\n"
+"Altrament, deixeu aquest camp buit."
+
+#: wizards/newaccountwizard/rc.cpp:62
+msgid "Select the institution which manages this account or leave empty"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:63
+#, fuzzy
+msgid "New Institution"
+msgstr "Institució &nova"
+
+#: wizards/newaccountwizard/rc.cpp:65
+msgid ""
+"Accounts managed by an institution are usually referenced by a unique number "
+"the so called account number. Enter that number here.\n"
+"\n"
+"KMyMoney currently uses this number only for some online banking functions."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:67
+msgid "Enter the International Bank Account Number into this field"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:68
+msgid ""
+"You can enter the IBAN (International Bank Account Number) into this field "
+"if you know it. Usually, people at your institution can tell you the number "
+"or it is printed on your statements.\n"
+"\n"
+"See also http://en.wikipedia.org/wiki/International_Bank_Account_Number for "
+"more information.\n"
+"\n"
+"KMyMoney keeps this field only for documentation purposes and does not use "
+"it otherwise."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:69
+msgid ""
+"Now enter the details for your loan. You can leave one of the fields empty "
+"and KMyMoney will calculate it when you press the <b>Calculate</b> button. "
+"Before you can continue with the next page you also need to press "
+"<b>Calculate</b> so that KMyMoney can check the logical correctness of the "
+"values you have supplied."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:70
+msgid "The interest rate gets calculated"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:71
+msgid "when the payment is received"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:72
+#, fuzzy
+msgid "when the payment is due"
+msgstr "L'interès venç el:"
+
+#: dialogs/rc.cpp:531 dialogs/rc.cpp:533 wizards/newaccountwizard/rc.cpp:73
+msgid "Loan amount"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:74
+msgid ""
+"Enter the amount of the loan in this field. If you want to calculate this "
+"field out of the other parameters, please leave it empty. If the field is "
+"marked as required (colored background) you have informed KMyMoney about the "
+"fact that there were already some payments towards the loan. In this case, "
+"please enter the ending balance of your last statement."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:76
+#, fuzzy
+msgid ""
+"Please enter the interest rate in percent or leave the field empty to "
+"calculate it."
+msgstr ""
+"Si us plau introduïu la quantitat inicial prestada en el camp de sota, o "
+"deixeu-lo en blanc per tal que es calculi automàticament."
+
+#: dialogs/rc.cpp:559 wizards/newaccountwizard/rc.cpp:77
+msgid "Term"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:78
+msgid ""
+"Please enter the term of this loan or enter 0 to calculate it. The term is "
+"the time that is required to fully repay the loan. This time might be "
+"different from the time your loan contract is signed for."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:79
+msgid "Payment (principal and interest)"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:80
+#, fuzzy
+msgid ""
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"Si us plau introduïu la quantitat inicial prestada en el camp de sota, o "
+"deixeu-lo en blanc per tal que es calculi automàticament."
+
+#: wizards/newaccountwizard/rc.cpp:81
+#, fuzzy
+msgid "Balloon payment"
+msgstr "Verifica els pagaments"
+
+#: wizards/newaccountwizard/rc.cpp:82
+#, fuzzy
+msgid ""
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"Si us plau introduïu la quantitat inicial prestada en el camp de sota, o "
+"deixeu-lo en blanc per tal que es calculi automàticament."
+
+#: wizards/newaccountwizard/rc.cpp:83
+#, fuzzy
+msgid "Calculate"
+msgstr "calcula-ho"
+
+#: wizards/newaccountwizard/rc.cpp:84
+msgid "Press this button to calculate/verify your loan details."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:85
+msgid ""
+"Pressing this button calculates a possibly missing parameter for your loan "
+"or verifies that the values entered match. If something is not correct you "
+"will receive information about it."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:86
+msgid ""
+"Now enter the information required for the periodic loan payments. If your "
+"regular payments contains any additional fees, click on the <b>Additional "
+"fees</b> button to enter them."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:87
+msgid "Principal + Interest"
+msgstr ""
+
+#: dialogs/rc.cpp:620 wizards/newaccountwizard/rc.cpp:89
+msgid "+"
+msgstr "+"
+
+#: wizards/newaccountwizard/rc.cpp:92
+#, fuzzy
+msgid "= periodical payments"
+msgstr "Pagaments d'avui"
+
+#: dialogs/rc.cpp:643 wizards/newaccountwizard/rc.cpp:94
+msgid ""
+"If this loan is for an asset, such as a car or a house, you can create the "
+"asset account now. An asset account represents the total value of an asset. "
+"The money from this loan will be transfered into the asset account you "
+"create or select.\n"
+"If this loan is a 'consumer loan' (money to use however you want), you can "
+"use a checking account instead."
+msgstr ""
+
+#: dialogs/rc.cpp:644 wizards/newaccountwizard/rc.cpp:95
+msgid "Don't create payout transaction"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:96
+msgid "Refinance existing loan"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:97
+msgid ""
+"Check this if you are refinancing a loan that already exists in KMyMoney"
+msgstr ""
+
+#: dialogs/rc.cpp:642 wizards/newaccountwizard/rc.cpp:98
+msgid "Asset Account"
+msgstr "Compte d'actiu"
+
+#: dialogs/rc.cpp:2 wizards/newaccountwizard/rc.cpp:99
+#, fuzzy
+msgid "Create"
+msgstr "&Crea"
+
+#: wizards/newaccountwizard/rc.cpp:100
+#, fuzzy
+msgid "Loan account"
+msgstr "compte"
+
+#: dialogs/rc.cpp:646 wizards/newaccountwizard/rc.cpp:101
+msgid "Date of payment"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:102
+msgid ""
+"KMyMoney creates a schedule for this payment and reminds you whenever a "
+"payment must be made. Please select the account to/from which payments will "
+"be made and the category the interest will be assigned to.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+
+#: dialogs/rc.cpp:613 wizards/newaccountwizard/rc.cpp:103
+msgid "Interest category"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:104
+msgid ""
+"The category the interest part of the payment will be assigned to. If you "
+"borrow money you usually have to pay interest, so this should be an expense "
+"category. If you lend the money, you receive the interest. In this case, "
+"select an income category here."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:106
+msgid ""
+"Select the account from which you make your periodical payments or where you "
+"receive regular payments in case you lend the money. In most cases, this is "
+"a checking account."
+msgstr ""
+
+#: dialogs/rc.cpp:519 wizards/newaccountwizard/rc.cpp:107
+msgid "First payment due on"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:108
+msgid ""
+"For credit card accounts you can create a monthly schedule which will "
+"automatically remind you about the payment. Please fill in the details about "
+"this payment here."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:109
+msgid "Yes, remind me when the payment is due"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:110
+#, fuzzy
+msgid "Name of schedule"
+msgstr "Nova programació"
+
+#: dialogs/rc.cpp:151 dialogs/rc.cpp:218 dialogs/rc.cpp:219
+#: reports/listtable.cpp:199 views/kscheduledview.cpp:72 widgets/rc.cpp:113
+#: widgets/register.cpp:57 wizards/newaccountwizard/rc.cpp:111
+msgid "Payee"
+msgstr "Detalls de l'assentament"
+
+#: wizards/newaccountwizard/rc.cpp:112
+msgid "Estimated monthly payment"
+msgstr "Pagament mensual estimat"
+
+#: wizards/newaccountwizard/rc.cpp:113
+msgid "Due date of next payment"
+msgstr "Data de venciment del proper pagament"
+
+#: wizards/newaccountwizard/rc.cpp:114
+msgid ""
+"Payment should be made\n"
+"from account"
+msgstr ""
+"El pagament s'ha de fer\n"
+"des del compte"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:79
+msgid "KMyMoney New File Setup"
+msgstr ""
+
+#: wizards/newuserwizard/knewuserwizard.cpp:81
+#, fuzzy
+msgid "Introduction"
+msgstr "Institució"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:82
+#, fuzzy
+msgid "Personal Data"
+msgstr "Dades personals..."
+
+#: wizards/newuserwizard/knewuserwizard.cpp:83
+#, fuzzy
+msgid "Select Currency"
+msgstr "Divisa"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:84
+#, fuzzy
+msgid "Select Accounts"
+msgstr "Escolliu un compte:"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:85
+msgid "Set preferences"
+msgstr ""
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid ""
+"Unable to load data, because no contact has been associated with the owner "
+"of the standard addressbook."
+msgstr ""
+"No s'han pogut carregar les dades, perquè no s'ha associat cap contacte amb "
+"el propietari de la llibreta d'adreces estàndard ."
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid "Addressbook import"
+msgstr "Importació de llibreta d'adreces"
+
+#: wizards/newuserwizard/rc.cpp:1
+msgid ""
+"A typical KMyMoney user maintains a checking a account with some institution "
+"and uses it to receive money or pay bills. If this is not the case, please "
+"deselect the checkbox below and continue on the next page."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:2
+msgid "I have a checking account that I want to manage with KMyMoney"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:3
+msgid "The name of the instititution that issued the account."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:4
+msgid ""
+"Each institution has a routing number. Enter it here. If uncertain, leave "
+"the field blank. You can modify it later."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:5
+#, fuzzy
+msgid "Name of the institution"
+msgstr "Nom del préstec"
+
+#: wizards/newuserwizard/rc.cpp:6
+#, fuzzy
+msgid "Routing number"
+msgstr "Codi:"
+
+#: wizards/newuserwizard/rc.cpp:7
+msgid ""
+"In general the institution that issued the account also issued a number for "
+"it. Enter it here. If uncertain, you can modify this entry later."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:8
+msgid ""
+"Enter a descriptive name that will be used by KMyMoney to identify your "
+"checking account."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:10
+msgid ""
+"Enter the date from when on you plan to keep track of the transactions in "
+"that account. This is usually the date of the last statement. If uncertain, "
+"leave as is."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:11
+#, fuzzy
+msgid "Number of the account"
+msgstr "Nom del préstec"
+
+#: wizards/newuserwizard/rc.cpp:12
+#, fuzzy
+msgid "Name of the account"
+msgstr "Nom del préstec"
+
+#: wizards/newuserwizard/rc.cpp:15
+msgid ""
+"Enter the opening balance of the account. This is usually the ending balance "
+"of the last statement. If uncertain, leave as is."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:16
+msgid ""
+"The fields below allow you to enter some information about your checking "
+"account. Once this wizard finishes, the account will be created for you "
+"within KMyMoney."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:17
+msgid ""
+"KMyMoney supports multiple currencies. Your reports will be based on a "
+"default curreny which you can select here. The default for new accounts is "
+"also the currency you select here."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:18
+msgid ""
+"KMyMoney will store your financial data in a file on the disk. A standard "
+"filename within your KDE user environment will be the default. This is just "
+"provided for convenience and you can choose any other location here."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:19
+msgid ""
+"Either the currently selected file exists or the selected directory does not "
+"exist. Please make sure, that\n"
+"\n"
+"<ul>\n"
+"<li>the selected directory exists and</li>\n"
+"<li>the filename is not currently used in this directory.</li>\n"
+"</ul>"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:20
+msgid ""
+"This finishes the setup of your KMyMoney environment. You can now press the "
+"Finish button and start using KMyMoney to record your financial transactions."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:21
+#, fuzzy
+msgid ""
+"Please enter some information about yourself.<br><br>\n"
+"\n"
+"This information will be seen and used only by you. The information is used "
+"to personalize KMyMoney, to encrypt your file, etc."
+msgstr ""
+"Empreu aquest diàleg per introduir la vostra informació personal.\n"
+"\n"
+"Tota la informació és optativa i s'utilitza per personalitzar \n"
+"el vostre fitxer KMyMoney."
+
+#: wizards/newuserwizard/rc.cpp:28
+msgid "Zip code"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:30
+msgid "Welcome to KMyMoney!"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:31
+msgid ""
+"You have started KMyMoney for the first time on this computer. Before this "
+"program can help you to manage your finances, it needs to collect some data "
+"from you.<p>\n"
+"\n"
+"On the next few pages you will be guided through the steps necessary to "
+"setup the program. This will happen only once."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:32
+msgid ""
+"<p>KMyMoney can encrypt your datafile using GPG Encryption. GPG encryption "
+"is one of the most secure methods in the world for protecting data. All of "
+"your account numbers and other important financial information will be very "
+"secure.</p>"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:33
+msgid ""
+"If you would like to review or change any preference settings for KMyMoney "
+"at this time, you can do so here. If not just click <b>Next</b>."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:34
+msgid "Configure preferences now"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:35
+msgid ""
+"You can change the configuration options at any time using the configuration "
+"dialog. Just select the <b>Configure KMyMoney...</b> option in the "
+"<b>Settings</b> menu."
+msgstr ""
+
+#: dialogs/rc.cpp:83 dialogs/rc.cpp:411 dialogs/rc.cpp:435
+#: kmymoneyutils.cpp:92 kmymoneyutils.cpp:105 mymoney/mymoneyaccount.cpp:753
+#: mymoney/mymoneysecurity.cpp:160
+msgid "Stock"
+msgstr "Valor"
+
+#: dialogs/rc.cpp:84 dialogs/rc.cpp:412 dialogs/rc.cpp:436
+#: kmymoneyutils.cpp:107 mymoney/mymoneysecurity.cpp:163
+msgid "Mutual Fund"
+msgstr "Fons d'inversió"
+
+#: dialogs/rc.cpp:85 dialogs/rc.cpp:413 dialogs/rc.cpp:437
+#: kmymoneyutils.cpp:109 mymoney/mymoneysecurity.cpp:166
+msgid "Bond"
+msgstr "Bo"
+
+#: mymoney/mymoneysecurity.cpp:172 reports/querytable.cpp:1150
+#: widgets/kmymoneyaccountselector.cpp:76
+msgid "None"
+msgstr "Cap"
+
+#: dialogs/rc.cpp:46 kmymoneyutils.cpp:402 mymoney/mymoneyaccount.cpp:759
+#: mymoney/mymoneyscheduled.cpp:1002 mymoney/mymoneysecurity.cpp:175
+#: views/kforecastview.cpp:174 widgets/register.cpp:54
+#: widgets/register.cpp:485 widgets/transaction.cpp:708
+#: widgets/transaction.cpp:1459
+msgid "Unknown"
+msgstr "Desconegut"
+
+#: mymoney/storage/mymoneystoragesql.cpp:191
+msgid ""
+"Database apparently in use\n"
+"Opened by %1 on %2 at %3.\n"
+"Open anyway?"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragesql.cpp:229
+msgid "Cannot currently create database for driver %1; please create manually"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragesql.cpp:244
+msgid "Error in create database %1; do you have create permissions?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1329
+#: mymoney/storage/mymoneystoragexml.cpp:166
+msgid "Loading transactions..."
+msgstr "S'estan carregant assentaments..."
+
+#: converter/mymoneygncreader.cpp:1190
+#: mymoney/storage/mymoneystoragexml.cpp:173
+msgid "Loading accounts..."
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:180
+#, fuzzy
+msgid "Loading securities..."
+msgstr "S'estan carregant les cotitzacions..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:187
+#, fuzzy
+msgid "Loading reports..."
+msgstr "S'estan carregant les cotitzacions..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:268
+msgid "Unknown XML tag %1 found in line %2"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:274
+msgid "Exception while creating a %1 element: %2"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:513
+#, fuzzy
+msgid "Loading file information..."
+msgstr "S'estan carregant assentaments..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:591
+#, fuzzy
+msgid "Loading user information..."
+msgstr "S'estan carregant assentaments..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:655
+#, fuzzy
+msgid "Saving accounts..."
+msgstr "Compte nou..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:678
+#, fuzzy
+msgid "Saving transactions..."
+msgstr "S'estan carregant assentaments..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:747
+#, fuzzy
+msgid "Saving reports..."
+msgstr "S'està desant el fitxer..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:762
+#, fuzzy
+msgid "Saving budgets..."
+msgstr "S'està desant el fitxer..."
+
+#: mymoney/storage/mymoneystoragedump.cpp:414
+msgid "not reconciled"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragedump.cpp:417
+msgid "cleared"
+msgstr "verificat"
+
+#: mymoney/storage/mymoneystoragedump.cpp:420
+msgid "reconciled"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragedump.cpp:423
+msgid "frozen"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragedump.cpp:426
+msgid "unknown"
+msgstr "desconegut"
+
+#: mymoney/mymoneyaccount.cpp:101
+msgid ""
+"Account %1 contains an opening balance. Please use a KMyMoney version >= 0.8 "
+"and < 0.9 to correct the problem."
+msgstr ""
+
+#: mymoney/mymoneyaccount.cpp:597
+msgid ""
+"_: Brokerage (suffix for account names)\n"
+"Brokerage"
+msgstr ""
+
+#: kmymoneyutils.cpp:74 mymoney/mymoneyaccount.cpp:726
+msgid "Certificate of Deposit"
+msgstr ""
+
+#: kmymoneyutils.cpp:78 mymoney/mymoneyaccount.cpp:732
+msgid "Money Market"
+msgstr "Mercat monetari"
+
+#: converter/mymoneytemplate.cpp:186 converter/mymoneytemplate.cpp:187
+#: dialogs/knewaccountdlg.cpp:1018 kmymoneyutils.cpp:86
+#: mymoney/mymoneyaccount.cpp:744 views/kaccountsview.cpp:360
+#: views/kbudgetview.cpp:372 views/kcategoriesview.cpp:178
+#: views/khomeview.cpp:1813 views/kmymoneyview.cpp:767
+#: widgets/kmymoneyaccountselector.cpp:68
+#: widgets/kmymoneyaccountselector.cpp:179
+#: widgets/kmymoneyaccountselector.cpp:370 widgets/register.cpp:828
+msgid "Income"
+msgstr "Ingressos"
+
+#: converter/mymoneytemplate.cpp:190 converter/mymoneytemplate.cpp:191
+#: dialogs/knewaccountdlg.cpp:1020 kmymoneyutils.cpp:88
+#: mymoney/mymoneyaccount.cpp:747 views/kaccountsview.cpp:364
+#: views/kbudgetview.cpp:378 views/kcategoriesview.cpp:182
+#: views/kmymoneyview.cpp:768 widgets/kmymoneyaccountselector.cpp:72
+#: widgets/kmymoneyaccountselector.cpp:180
+#: widgets/kmymoneyaccountselector.cpp:380 widgets/register.cpp:829
+msgid "Expense"
+msgstr "Despeses"
+
+#: kmymoneyutils.cpp:90 mymoney/mymoneyaccount.cpp:750
+msgid "Investment Loan"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:47
+msgid "Opening Balances"
+msgstr "Saldos d'obertura"
+
+#: mymoney/mymoneyfile.cpp:398
+#, fuzzy
+msgid "Cannot remove transaction that references a closed account."
+msgstr "Selecciona els assentaments sense beneficiaris"
+
+#: mymoney/mymoneyfile.cpp:1414 mymoney/mymoneyfile.cpp:1433
+#: mymoney/mymoneyfile.cpp:1447 mymoney/mymoneyfile.cpp:1469
+#, fuzzy
+msgid "* Problem with account '%1'"
+msgstr "No s'ha pogut afegir l'assentament: "
+
+#: mymoney/mymoneyfile.cpp:1419
+msgid " * Parent account '%1' belongs to a different group."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1420 mymoney/mymoneyfile.cpp:1450
+msgid " New parent account is the top level account '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1436
+msgid " * Parent account '%1' does not contain '%2' as sub-account."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1449
+msgid " * The parent with id %1 does not exist anymore."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1471
+msgid " * Child account with id %1 does not exist anymore."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1472
+msgid " The child account list will be reconstructed."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1492
+#, fuzzy
+msgid " * Unable to update account data in engine."
+msgstr "No s'ha pogut afegir l'assentament: "
+
+#: mymoney/mymoneyfile.cpp:1499
+msgid "* Reconstructing the child lists for"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1536
+msgid " * Unable to update account data for account %1 in engine"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1554
+msgid " * Payee %1 recreated with fixed id"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1583
+msgid " * Payee id updated in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1596
+msgid " * shares set to value in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1599
+msgid " * value set to shares in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1605
+msgid ""
+" * Split %2 in transaction '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1616
+msgid " * action marked as interest in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1643
+msgid " * Payee id updated in split of schedule '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1649
+msgid ""
+" * Split in scheduled transaction '%1' contained value != 0 and shares == 0."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1650
+msgid " Shares set to value."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1658
+msgid " * Removed bankid from split in scheduled transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1671
+msgid " * shares set to value in split in schedule '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1674
+msgid " * value set to shares in split in schedule '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1680
+msgid ""
+" * Split %2 in schedule '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1706
+msgid " * Payee id updated in report '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1723
+msgid " * Payee '%1' removed."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1730
+msgid "Finish! Data is consistent."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1732
+msgid "Finish! %1 problem(s) corrected. %2 problem(s) still present."
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:873 mymoney/mymoneyscheduled.cpp:918
+#: mymoney/mymoneyscheduled.cpp:969 mymoney/mymoneyscheduled.cpp:1265
+#: mymoney/mymoneyscheduletest.cpp:1336
+msgid "Once"
+msgstr "Una vegada"
+
+#: mymoney/mymoneyscheduled.cpp:875 mymoney/mymoneyscheduled.cpp:924
+#: mymoney/mymoneyscheduled.cpp:1267 mymoney/mymoneyscheduletest.cpp:1337
+#: widgets/rc.cpp:72
+msgid "Daily"
+msgstr "Diàriament"
+
+#: mymoney/mymoneyscheduled.cpp:877 mymoney/mymoneyscheduled.cpp:931
+#: mymoney/mymoneyscheduled.cpp:1269 mymoney/mymoneyscheduletest.cpp:1338
+#: widgets/rc.cpp:73
+msgid "Weekly"
+msgstr "Setmanalment"
+
+#: mymoney/mymoneyscheduled.cpp:881 mymoney/mymoneyscheduled.cpp:932
+#: mymoney/mymoneyscheduled.cpp:1273 mymoney/mymoneyscheduletest.cpp:1339
+msgid "Every other week"
+msgstr "La resta de setmanes"
+
+#: mymoney/mymoneyscheduled.cpp:879 mymoney/mymoneyscheduled.cpp:1271
+#: mymoney/mymoneyscheduletest.cpp:1340
+msgid "Fortnightly"
+msgstr "Quinzenalment"
+
+#: mymoney/mymoneyscheduled.cpp:883 mymoney/mymoneyscheduled.cpp:941
+#: mymoney/mymoneyscheduled.cpp:1275 mymoney/mymoneyscheduletest.cpp:1341
+#, fuzzy
+msgid "Every half month"
+msgstr "Cada quatre mesos"
+
+#: mymoney/mymoneyscheduled.cpp:887 mymoney/mymoneyscheduled.cpp:934
+#: mymoney/mymoneyscheduled.cpp:1279 mymoney/mymoneyscheduletest.cpp:1342
+msgid "Every four weeks"
+msgstr "Cada quatre setmanes"
+
+#: mymoney/mymoneyscheduled.cpp:893 mymoney/mymoneyscheduled.cpp:935
+#: mymoney/mymoneyscheduled.cpp:1285 mymoney/mymoneyscheduletest.cpp:1344
+#, fuzzy
+msgid "Every eight weeks"
+msgstr "La resta de setmanes"
+
+#: mymoney/mymoneyscheduled.cpp:895 mymoney/mymoneyscheduled.cpp:948
+#: mymoney/mymoneyscheduled.cpp:1287 mymoney/mymoneyscheduletest.cpp:1345
+msgid "Every two months"
+msgstr "Cada dos mesos"
+
+#: mymoney/mymoneyscheduled.cpp:897 mymoney/mymoneyscheduled.cpp:949
+#: mymoney/mymoneyscheduled.cpp:1289 mymoney/mymoneyscheduletest.cpp:1346
+msgid "Every three months"
+msgstr "Cada tres mesos"
+
+#: mymoney/mymoneyscheduled.cpp:899 mymoney/mymoneyscheduled.cpp:1291
+#: mymoney/mymoneyscheduletest.cpp:1347 widgets/rc.cpp:76
+msgid "Quarterly"
+msgstr "Trimestral"
+
+#: mymoney/mymoneyscheduled.cpp:901 mymoney/mymoneyscheduled.cpp:950
+#: mymoney/mymoneyscheduled.cpp:1293 mymoney/mymoneyscheduletest.cpp:1348
+msgid "Every four months"
+msgstr "Cada quatre mesos"
+
+#: mymoney/mymoneyscheduled.cpp:903 mymoney/mymoneyscheduled.cpp:951
+#: mymoney/mymoneyscheduled.cpp:1295 mymoney/mymoneyscheduletest.cpp:1349
+msgid "Twice yearly"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:905 mymoney/mymoneyscheduled.cpp:957
+#: mymoney/mymoneyscheduled.cpp:1297 mymoney/mymoneyscheduletest.cpp:1350
+#: widgets/rc.cpp:20 widgets/rc.cpp:77
+msgid "Yearly"
+msgstr "Anual"
+
+#: mymoney/mymoneyscheduled.cpp:907 mymoney/mymoneyscheduled.cpp:958
+#: mymoney/mymoneyscheduled.cpp:1299 mymoney/mymoneyscheduletest.cpp:1351
+msgid "Every other year"
+msgstr "La resta d'anys"
+
+#: mymoney/mymoneyscheduled.cpp:870 mymoney/mymoneyscheduled.cpp:913
+#: mymoney/mymoneyscheduled.cpp:966
+msgid "Any"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:885 mymoney/mymoneyscheduled.cpp:933
+#: mymoney/mymoneyscheduled.cpp:1277
+#, fuzzy
+msgid "Every three weeks"
+msgstr "La resta de setmanes"
+
+#: mymoney/mymoneyscheduled.cpp:889 mymoney/mymoneyscheduled.cpp:925
+#: mymoney/mymoneyscheduled.cpp:1281
+#, fuzzy
+msgid "Every thirty days"
+msgstr "La resta d'anys"
+
+#: mymoney/mymoneyscheduled.cpp:971
+#, fuzzy
+msgid "Day"
+msgstr "Dies"
+
+#: mymoney/mymoneyscheduled.cpp:973 reports/listtable.cpp:206
+#: widgets/kmymoneycalendar.cpp:123 widgets/rc.cpp:97
+msgid "Week"
+msgstr "Setmana"
+
+#: mymoney/mymoneyscheduled.cpp:975
+#, fuzzy
+msgid "Half-month"
+msgstr "Cada quatre mesos"
+
+#: mymoney/mymoneyscheduled.cpp:977 reports/listtable.cpp:205
+#: widgets/kmymoneycalendar.cpp:124 widgets/rc.cpp:96
+msgid "Month"
+msgstr "Mes"
+
+#: dialogs/rc.cpp:400 mymoney/mymoneyscheduled.cpp:979 views/rc.cpp:14
+#, fuzzy
+msgid "Year"
+msgstr "Anys"
+
+#: mymoney/mymoneyscheduled.cpp:989
+msgid "Bill"
+msgstr "Factura"
+
+#: dialogs/rc.cpp:107 dialogs/rc.cpp:162 dialogs/rc.cpp:249 dialogs/rc.cpp:754
+#: mymoney/mymoneyscheduled.cpp:992 widgets/kmymoneycombo.cpp:420
+#: widgets/register.cpp:571
+msgid "Deposit"
+msgstr "Ingrés"
+
+#: mymoney/mymoneyscheduled.cpp:995 reports/querytable.cpp:594
+#: reports/querytable.cpp:696 widgets/kmymoneycombo.cpp:419
+msgid "Transfer"
+msgstr "Transferència"
+
+#: mymoney/mymoneyscheduled.cpp:1035
+msgid "Any (Error)"
+msgstr ""
+
+#: dialogs/rc.cpp:114 mymoney/mymoneyscheduled.cpp:1047
+msgid "Change the date to the previous Friday"
+msgstr "Canvia la data al divendres anterior"
+
+#: dialogs/rc.cpp:115 mymoney/mymoneyscheduled.cpp:1050
+msgid "Change the date to the next Monday"
+msgstr "Canvia la data al proper dilluns"
+
+#: mymoney/mymoneyscheduled.cpp:1053
+msgid "Do Nothing"
+msgstr "No facis res"
+
+#: kmymoney2.cpp:312
+#, fuzzy
+msgid "Open database..."
+msgstr "Desa com..."
+
+#: kmymoney2.cpp:313
+#, fuzzy
+msgid "Save as database..."
+msgstr "Desa com..."
+
+#: kmymoney2.cpp:314
+msgid "Backup..."
+msgstr "Còpia de seguretat..."
+
+#: kmymoney2.cpp:315 kmymoney2.cpp:321
+#, fuzzy
+msgid "QIF..."
+msgstr "QIF ..."
+
+#: kmymoney2.cpp:316
+#, fuzzy
+msgid "Gnucash..."
+msgstr "GnuCash ..."
+
+#: kmymoney2.cpp:317
+#, fuzzy
+msgid "Statement file..."
+msgstr "S'està desant el fitxer..."
+
+#: kmymoney2.cpp:319 kmymoney2.cpp:320
+#, fuzzy
+msgid "Account Template..."
+msgstr "Plantilla de compte ..."
+
+#: kmymoney2.cpp:322
+msgid "Personal Data..."
+msgstr "Dades personals..."
+
+#: kmymoney2.cpp:325
+#, fuzzy
+msgid "Dump Memory"
+msgstr "Bolca la memòria..."
+
+#: kmymoney2.cpp:327
+#, fuzzy
+msgid "File-Information..."
+msgstr "Informació del beneficiari"
+
+#: kmymoney2.cpp:332
+msgid "Find transaction..."
+msgstr "Cerca un assentament..."
+
+#: kmymoney2.cpp:337
+msgid "Show Transaction Detail"
+msgstr "Mostra el detall dels assentaments"
+
+#: kmymoney2.cpp:338 rc.cpp:60
+msgid "Hide reconciled transactions"
+msgstr "Amaga els assentaments conciliats"
+
+#: kmymoney2.cpp:339 rc.cpp:57
+#, fuzzy
+msgid "Hide unused categories"
+msgstr "Categories de Despeses"
+
+#: kmymoney2.cpp:340
+#, fuzzy
+msgid "Show all accounts"
+msgstr " comptes\n"
+
+#: kmymoney2.cpp:345
+#, fuzzy
+msgid "New institution..."
+msgstr "Institució nova..."
+
+#: kmymoney2.cpp:346
+#, fuzzy
+msgid "Edit institution..."
+msgstr "Afegeix una institució nova..."
+
+#: kmymoney2.cpp:347
+#, fuzzy
+msgid "Delete institution..."
+msgstr "Institució nova..."
+
+#: kmymoney2.cpp:352
+msgid "New account..."
+msgstr "Compte nou..."
+
+#: kmymoney2.cpp:354
+msgid "Open ledger"
+msgstr ""
+
+#: kmymoney2.cpp:355
+msgid "Reconcile..."
+msgstr "Concilia..."
+
+#: kmymoney2.cpp:356
+#, fuzzy
+msgid ""
+"_: Finish reconciliation\n"
+"Finish"
+msgstr "Posposa la conciliació"
+
+#: kmymoney2.cpp:357
+#, fuzzy
+msgid ""
+"_: Postpone reconciliation\n"
+"Postpone"
+msgstr "Posposa la conciliació"
+
+#: kmymoney2.cpp:358
+#, fuzzy
+msgid "Edit account..."
+msgstr "Compte nou..."
+
+#: kmymoney2.cpp:359
+#, fuzzy
+msgid "Delete account..."
+msgstr "Compte nou..."
+
+#: kmymoney2.cpp:360
+#, fuzzy
+msgid "Close account"
+msgstr "Comptes d'Actiu"
+
+#: kmymoney2.cpp:361
+#, fuzzy
+msgid "Reopen account"
+msgstr "Comptes monetaris"
+
+#: kmymoney2.cpp:362
+#, fuzzy
+msgid "Transaction report"
+msgstr "Import de l'assentament"
+
+#: kmymoney2.cpp:364
+msgid "Show balance chart..."
+msgstr ""
+
+#: kmymoney2.cpp:366
+#, fuzzy
+msgid "Map to online account"
+msgstr "Nom del préstec"
+
+#: kmymoney2.cpp:367
+#, fuzzy
+msgid "Unmap account"
+msgstr "compte"
+
+#: dialogs/settings/rc.cpp:126 kmymoney2.cpp:368 views/kpayeesview.cpp:363
+#: widgets/rc.cpp:50
+#, fuzzy
+msgid "Update"
+msgstr "&Amunt"
+
+#: kmymoney2.cpp:372
+#, fuzzy
+msgid "Update account..."
+msgstr "Compte nou..."
+
+#: kmymoney2.cpp:373
+#, fuzzy
+msgid "Update all accounts..."
+msgstr "Compte nou..."
+
+#: kmymoney2.cpp:378
+msgid "New category..."
+msgstr ""
+
+#: kmymoney2.cpp:379
+#, fuzzy
+msgid "Edit category..."
+msgstr "Edita ..."
+
+#: kmymoney2.cpp:380
+#, fuzzy
+msgid "Delete category..."
+msgstr "Esborra..."
+
+#: kmymoney2.cpp:386
+msgid "QIF Profile Editor..."
+msgstr "Editor del perfil QIF..."
+
+#: kmymoney2.cpp:387
+#, fuzzy
+msgid "Securities..."
+msgstr "Valors bursàtils ..."
+
+#: kmymoney2.cpp:388
+#, fuzzy
+msgid "Currencies..."
+msgstr "Divises ..."
+
+#: kmymoney2.cpp:389
+#, fuzzy
+msgid "Prices..."
+msgstr "Cotitzacions ..."
+
+#: kmymoney2.cpp:390
+msgid "Update Stock and Currency Prices..."
+msgstr "Actualitza les cotitzacions de valors i divises..."
+
+#: kmymoney2.cpp:391
+msgid "Consistency Check"
+msgstr ""
+
+#: kmymoney2.cpp:392
+msgid "Performance-Test"
+msgstr ""
+
+#: kmymoney2.cpp:393
+msgid "KCalc..."
+msgstr ""
+
+#: kmymoney2.cpp:399
+msgid "Enable all messages"
+msgstr "Habilita tots els missatges"
+
+#: kmymoney2.cpp:400
+msgid "KDE language settings..."
+msgstr ""
+
+#: kmymoney2.cpp:405
+msgid "&Show tip of the day"
+msgstr "Mostra el &consell del dia "
+
+#: kmymoney2.cpp:410
+#, fuzzy
+msgid ""
+"_: New transaction button\n"
+"New"
+msgstr "Mostra el formulari d'assentament"
+
+#: kmymoney2.cpp:415
+#, fuzzy
+msgid ""
+"_: Edit transaction button\n"
+"Edit"
+msgstr "Assentament desglossat"
+
+#: kmymoney2.cpp:417
+#, fuzzy
+msgid ""
+"_: Enter transaction\n"
+"Enter"
+msgstr "Qualsevol assentament"
+
+#: kmymoney2.cpp:420
+msgid ""
+"_: Edit split button\n"
+"Edit splits"
+msgstr ""
+
+#: kmymoney2.cpp:421
+#, fuzzy
+msgid ""
+"_: Cancel transaction edit\n"
+"Cancel"
+msgstr "Assentament vàlid"
+
+#: kmymoney2.cpp:422
+#, fuzzy
+msgid ""
+"_: Delete transaction\n"
+"Delete"
+msgstr "S'estan afegint assentaments"
+
+#: kmymoney2.cpp:423
+#, fuzzy
+msgid ""
+"_: Duplicate transaction\n"
+"Duplicate"
+msgstr "Assentament desglossat"
+
+#: kmymoney2.cpp:425 kmymoney2.cpp:4826 kmymoney2.cpp:5107
+#, fuzzy
+msgid ""
+"_: Button text for match transaction\n"
+"Match"
+msgstr "Qualsevol assentament"
+
+#: kmymoney2.cpp:426
+#, fuzzy
+msgid ""
+"_: Accept 'imported' and 'matched' transaction\n"
+"Accept"
+msgstr "Importa assentaments"
+
+#: kmymoney2.cpp:428
+#, fuzzy
+msgid ""
+"_: Toggle reconciliation flag\n"
+"Toggle"
+msgstr "Posposa la conciliació"
+
+#: kmymoney2.cpp:429
+#, fuzzy
+msgid ""
+"_: Mark transaction cleared\n"
+"Cleared"
+msgstr "Cerca assentaments"
+
+#: kmymoney2.cpp:430
+#, fuzzy
+msgid ""
+"_: Mark transaction reconciled\n"
+"Reconciled"
+msgstr "Cerca assentaments"
+
+#: kmymoney2.cpp:431
+#, fuzzy
+msgid ""
+"_: Mark transaction not reconciled\n"
+"Not reconciled"
+msgstr "Cerca assentaments"
+
+#: kmymoney2.cpp:432
+#, fuzzy
+msgid ""
+"_: Select all transactions\n"
+"Select all"
+msgstr "Cerca assentaments"
+
+#: kmymoney2.cpp:434 kmymoney2.cpp:5497
+#, fuzzy
+msgid "Goto account"
+msgstr "compte"
+
+#: kmymoney2.cpp:435 kmymoney2.cpp:5495
+msgid "Goto payee"
+msgstr ""
+
+#: kmymoney2.cpp:436
+#, fuzzy
+msgid "Create scheduled transaction..."
+msgstr "Assentaments programats"
+
+#: kmymoney2.cpp:437
+msgid "Assign next number"
+msgstr ""
+
+#: kmymoney2.cpp:438
+#, fuzzy
+msgid ""
+"_: Combine transactions\n"
+"Combine"
+msgstr "Esmena assentaments"
+
+#: kmymoney2.cpp:440
+#, fuzzy
+msgid "New investment"
+msgstr "Inversions"
+
+#: kmymoney2.cpp:441
+#, fuzzy
+msgid "Edit investment..."
+msgstr "Inversions"
+
+#: kmymoney2.cpp:442
+#, fuzzy
+msgid "Delete investment..."
+msgstr "Esborra aquesta entrada"
+
+#: kmymoney2.cpp:443
+#, fuzzy
+msgid "Online price update..."
+msgstr "Actualització en línia emprant OFX ..."
+
+#: kmymoney2.cpp:444
+msgid "Manual price update..."
+msgstr ""
+
+#: kmymoney2.cpp:446
+#, fuzzy
+msgid "New scheduled transaction..."
+msgstr "Assentaments programats"
+
+#: kmymoney2.cpp:447
+#, fuzzy
+msgid "Edit scheduled transaction..."
+msgstr "Assentaments programats"
+
+#: kmymoney2.cpp:448
+#, fuzzy
+msgid "Delete scheduled transaction..."
+msgstr "Assentaments programats"
+
+#: kmymoney2.cpp:449
+#, fuzzy
+msgid "Duplicate scheduled transaction"
+msgstr "Assentaments programats"
+
+#: kmymoney2.cpp:450
+#, fuzzy
+msgid "Enter next transaction..."
+msgstr "Assentaments programats"
+
+#: kmymoney2.cpp:451
+#, fuzzy
+msgid "Skip next transaction..."
+msgstr "Cerca un assentament..."
+
+#: kmymoney2.cpp:453
+msgid "New payee"
+msgstr ""
+
+#: kmymoney2.cpp:454
+#, fuzzy
+msgid "Rename payee"
+msgstr "Re&nomena"
+
+#: kmymoney2.cpp:455
+#, fuzzy
+msgid "Delete payee"
+msgstr "Seleccioneu una setmana"
+
+#: kmymoney2.cpp:457
+msgid "New budget"
+msgstr ""
+
+#: kmymoney2.cpp:458
+msgid "Rename budget"
+msgstr ""
+
+#: kmymoney2.cpp:459
+#, fuzzy
+msgid "Delete budget"
+msgstr "Esborra valor bursàtil"
+
+#: kmymoney2.cpp:460
+msgid "Copy budget"
+msgstr ""
+
+#: kmymoney2.cpp:461
+msgid "Change budget year"
+msgstr ""
+
+#: kmymoney2.cpp:462
+msgid ""
+"_: Budget based on forecast\n"
+"Forecast"
+msgstr ""
+
+#: kmymoney2.cpp:467 kmymoney2.cpp:3990 kmymoney2.cpp:3993 kmymoney2.cpp:3999
+msgid "New currency"
+msgstr "Nova divisa"
+
+#: kmymoney2.cpp:468 kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, fuzzy
+msgid "Rename currency"
+msgstr "Nova divisa"
+
+#: kmymoney2.cpp:469 kmymoney2.cpp:4039
+#, fuzzy
+msgid "Delete currency"
+msgstr "Nova divisa"
+
+#: dialogs/rc.cpp:69 kmymoney2.cpp:470
+msgid "Select as base currency"
+msgstr ""
+
+#: kmymoney2.cpp:481
+msgid "View back"
+msgstr "Vista anterior"
+
+#: kmymoney2.cpp:482
+msgid "View forward"
+msgstr "Vista posterior"
+
+#: kmymoney2.cpp:611
+msgid "KMyMoney file needs saving. Save ?"
+msgstr ""
+
+#: kmymoney2.cpp:757
+msgid "Creating new document..."
+msgstr "S'està creant un nou document..."
+
+#: kmymoney2.cpp:869 kmymoney2.cpp:884
+msgid "Open a file."
+msgstr ""
+
+#: kmymoney2.cpp:872
+msgid ""
+"%1|KMyMoney files\n"
+"%2|All files (*.*)"
+msgstr ""
+
+#: kmymoney2.cpp:873
+msgid "Open File..."
+msgstr ""
+
+#: kmymoney2.cpp:925 kstartuplogo.cpp:100
+msgid "Loading file..."
+msgstr ""
+
+#: kmymoney2.cpp:986
+msgid ""
+"<b>%1</b> is either an invalid filename or the file does not exist. You can "
+"open another file or create a new one."
+msgstr ""
+
+#: kmymoney2.cpp:986
+msgid "File not found"
+msgstr "No s'ha trobat el fitxer"
+
+#: kmymoney2.cpp:989
+msgid "File <b>%1</b> is already opened in another instance of KMyMoney"
+msgstr ""
+
+#: kmymoney2.cpp:989
+msgid "Duplicate open"
+msgstr ""
+
+#: kmymoney2.cpp:1001
+msgid "Saving file..."
+msgstr "S'està desant el fitxer..."
+
+#: kmymoney2.cpp:1035 kmymoney2.cpp:1047 kmymoney2.cpp:1071
+#, c-format
+msgid "Additional encryption key(s) to be used: %1"
+msgstr ""
+
+#: kmymoney2.cpp:1056
+msgid "Saving file with a new filename..."
+msgstr "S'està desant el fitxer amb un nou nom..."
+
+#: kmymoney2.cpp:1067
+msgid "Encryption key to be used"
+msgstr ""
+
+#: kmymoney2.cpp:1072
+msgid "Manage additional keys"
+msgstr ""
+
+#: kmymoney2.cpp:1079
+#, fuzzy
+msgid "No encryption"
+msgstr "Xifrat"
+
+#: kmymoney2.cpp:1102
+msgid ""
+"_: KMyMoney (Filefilter)\n"
+"KMyMoney files"
+msgstr ""
+
+#: kmymoney2.cpp:1103
+msgid ""
+"_: XML (Filefilter)\n"
+"XML files"
+msgstr ""
+
+#: kmymoney2.cpp:1104
+msgid ""
+"_: Anonymous (Filefilter)\n"
+"Anonymous files"
+msgstr ""
+
+#: kmymoney2.cpp:1105
+#, fuzzy
+msgid "All files"
+msgstr "Totes les dates"
+
+#: kmymoney2.cpp:1193
+#, fuzzy
+msgid "Saving file to database..."
+msgstr "S'està desant el fitxer..."
+
+#: kmymoney2.cpp:1207
+msgid "Cannot save to current database."
+msgstr ""
+
+#: kmymoney2.cpp:1225
+msgid "Closing window..."
+msgstr ""
+
+#: kmymoney2.cpp:1228 kmymoney2.cpp:1249
+msgid "The file has been changed, save it ?"
+msgstr ""
+
+#: kmymoney2.cpp:1339 kmymoney2.cpp:1352
+msgid "Ready."
+msgstr "Llest."
+
+#: kmymoney2.cpp:1397 kmymoney2.cpp:1433
+#, fuzzy
+msgid "No KMyMoneyFile open"
+msgstr "Mostra la pàgina de benvinguda de KMyMoney"
+
+#: kmymoney2.cpp:1401
+msgid "Viewing personal data..."
+msgstr ""
+
+#: kmymoney2.cpp:1408
+msgid "Edit Personal Data"
+msgstr "Editeu les dades personals"
+
+#: kmymoney2.cpp:1424
+#, fuzzy, c-format
+msgid "Unable to store user information: %1"
+msgstr "No s'ha pogut afegir l'assentament: "
+
+#: kmymoney2.cpp:1447
+msgid "Importing account templates."
+msgstr ""
+
+#: kmymoney2.cpp:1462
+#, fuzzy
+msgid "Unable to import template(s): %1, thrown in %2:%3"
+msgstr "No s'ha pogut afegir l'assentament: "
+
+#: kmymoney2.cpp:1471
+#, fuzzy
+msgid "Exporting account templates."
+msgstr "Plantilla de compte ..."
+
+#: kmymoney2.cpp:1474
+msgid ""
+"*.kmt|KMyMoney template files\n"
+"*.*|All files"
+msgstr ""
+
+#: kmymoney2.cpp:1475
+msgid "Save as..."
+msgstr "Desa com..."
+
+#: kmymoney2.cpp:1517
+msgid "Importing file..."
+msgstr ""
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "The statements have been processed with the following results:"
+msgstr ""
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:1754 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+#, fuzzy
+msgid "Statement stats"
+msgstr "Data de l'extracte:"
+
+#: kmymoney2.cpp:1602
+msgid ""
+"You cannot import GnuCash data into an existing file. Do you wish to save "
+"this file?"
+msgstr ""
+
+#: kmymoney2.cpp:1615
+msgid "Importing a Gnucash file."
+msgstr ""
+
+#: kmymoney2.cpp:1618
+msgid ""
+"%1|Gnucash files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Fitxers de Gnucash\n"
+"%2|Tots els fitxers (*.*)"
+
+#: kmymoney2.cpp:1619
+msgid "Import Gnucash file..."
+msgstr "Importa un fitxer de GnuCash..."
+
+#: kmymoney2.cpp:1658
+msgid "Importing an XML Statement."
+msgstr "S'està important un extracte XML."
+
+#: kmymoney2.cpp:1661
+msgid ""
+"%1|XML files\n"
+"%2|All files (*.*)"
+msgstr ""
+
+#: kmymoney2.cpp:1662
+msgid "Import XML Statement..."
+msgstr "Importa un extracte XML..."
+
+#: kmymoney2.cpp:1718
+msgid "Error importing %1: This file is not a valid KMM statement file."
+msgstr ""
+"S'ha produït un error en importar %1: Aquest fitxer no és un fitxer "
+"d'extracte vàlid del KMM."
+
+#: kmymoney2.cpp:1718
+msgid "Invalid Statement"
+msgstr "Extracte invàlid"
+
+#: kmymoney2.cpp:1754
+msgid "The statement has been processed with the following results:"
+msgstr ""
+
+#: kmymoney2.cpp:1763
+msgid "Exporting file..."
+msgstr "S'està exportant el fitxer..."
+
+#: kmymoney2.cpp:1786
+msgid "The file <b>%1</b> already exists. Do you really want to override it?"
+msgstr ""
+
+#: kmymoney2.cpp:1786
+msgid "File already exists"
+msgstr ""
+
+#: dialogs/rc.cpp:347 dialogs/rc.cpp:649 dialogs/rc.cpp:798 kmymoney2.cpp:1815
+msgid "General"
+msgstr "General"
+
+#: kmymoney2.cpp:1816
+msgid "Register"
+msgstr "Llibre"
+
+#: kmymoney2.cpp:1817 views/khomeview.cpp:88 views/kmymoneyview.cpp:136
+msgid "Home"
+msgstr "Principal"
+
+#: kmymoney2.cpp:1818 views/kmymoneyview.cpp:176
+#, fuzzy
+msgid ""
+"Scheduled\n"
+"transactions"
+msgstr "Assentaments programats"
+
+#: kmymoney2.cpp:1819
+msgid "Encryption"
+msgstr "Xifrat"
+
+#: kmymoney2.cpp:1820
+#, fuzzy
+msgid "Colors"
+msgstr "Colors"
+
+#: dialogs/rc.cpp:344 dialogs/settings/rc.cpp:107 kmymoney2.cpp:1822
+#: widgets/rc.cpp:33
+msgid "Online Quotes"
+msgstr "Cotitzacions en línia"
+
+#: kmymoney2.cpp:1823 reports/pivottable.cpp:2426 views/kmymoneyview.cpp:251
+#: views/kmymoneyview.cpp:253 views/kreportsview.cpp:1415 views/rc.cpp:41
+msgid "Forecast"
+msgstr ""
+
+#: kmymoney2.cpp:1824
+#, fuzzy
+msgid "Plugins"
+msgstr "&Endollables"
+
+#: kmymoney2.cpp:1893
+msgid ""
+"The file must be saved first before it can be backed up. Do you want to "
+"continue?"
+msgstr ""
+
+#: kmymoney2.cpp:1910
+msgid ""
+"The current implementation of the backup functionality only supports local "
+"files as source files! Your current source file is '%1'."
+msgstr ""
+
+#: kmymoney2.cpp:1913
+msgid "Local files only"
+msgstr ""
+
+#: kmymoney2.cpp:1928
+#, c-format
+msgid "Mounting %1"
+msgstr "S'està muntant %1"
+
+#: kmymoney2.cpp:1967
+msgid "Backup file for today exists on that device. Replace ?"
+msgstr ""
+
+#: dialogs/rc.cpp:7 kmymoney2.cpp:1967 kmymoney2.cpp:1994 kmymoney2.cpp:2024
+#: kmymoney2.cpp:2032 kmymoney2.cpp:2057 kmymoney2.cpp:2059
+msgid "Backup"
+msgstr "Còpia de seguretat"
+
+#: kmymoney2.cpp:1967
+msgid "&Replace"
+msgstr "&Substitueix"
+
+#: kmymoney2.cpp:1972 kmymoney2.cpp:1997 kmymoney2.cpp:2016 kmymoney2.cpp:2035
+#, c-format
+msgid "Unmounting %1"
+msgstr ""
+
+#: kmymoney2.cpp:1987
+#, c-format
+msgid "Writing %1"
+msgstr ""
+
+#: kmymoney2.cpp:1994
+msgid "Error mounting device"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1995 kmymoney2.cpp:2023 kmymoney2.cpp:2055
+msgid "Done"
+msgstr "Fet"
+
+#: kmymoney2.cpp:2024 kmymoney2.cpp:2057
+msgid "File successfully backed up"
+msgstr ""
+
+#: kmymoney2.cpp:2032
+msgid "Error copying file to device"
+msgstr ""
+
+#: kmymoney2.cpp:2059
+msgid "Error unmounting device"
+msgstr ""
+
+#: kmymoney2.cpp:2143
+#, fuzzy, c-format
+msgid "Cannot add institution: %1"
+msgstr "No s'ha pogut afegir la institució: "
+
+#: kmymoney2.cpp:2185
+#, fuzzy, c-format
+msgid "Unable to store institution: %1"
+msgstr "No s'ha pogut editar la institució: "
+
+#: kmymoney2.cpp:2192
+#, fuzzy, c-format
+msgid "Unable to edit institution: %1"
+msgstr "No s'ha pogut editar la institució: "
+
+#: kmymoney2.cpp:2203
+msgid "Do you really want to delete institution <b>%1</b> ?"
+msgstr ""
+
+#: kmymoney2.cpp:2211 kmymoney2.cpp:2215
+#, fuzzy, c-format
+msgid "Unable to delete institution: %1"
+msgstr "No s'ha pogut editar la institució: "
+
+#: kmymoney2.cpp:2268
+#, fuzzy, c-format
+msgid "Unable to find account: %1"
+msgstr "No s'ha pogut afegir l'assentament: "
+
+#: kmymoney2.cpp:2309
+msgid ""
+"This account is a liability and if the opening balance represents money "
+"owed, then it should be negative. Negate the amount?\n"
+"\n"
+"Please click Yes to change the opening balance to %1,\n"
+"Please click No to leave the amount as %2,\n"
+"Please click Cancel to abort the account creation."
+msgstr ""
+"Aquest compte és de passiu, i si el saldo inicial representa diners que es "
+"deuen, hauria de ser negatiu. Voleu fer el total negatiu?\n"
+"\n"
+"Si us plau premeu Si per canviar el saldo d'obertura a %1.\n"
+"Si us plau premeu No per deixar el total com %2.\n"
+"Si us plau premeu Cancel·lar per avortar la creació del compte."
+
+#: kmymoney2.cpp:2345 kmymoney2.cpp:2346
+msgid "Loan payout"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:892 kmymoney2.cpp:2374
+#, fuzzy, c-format
+msgid "Unable to add account: %1"
+msgstr "No s'ha pogut afegir l'assentament: "
+
+#: kmymoney2.cpp:2392
+msgid ""
+"The category <b>%1</b> currently does not exist. Do you want to create it?"
+"<p><i>The parent account will default to <b>%2</b> but can be changed in the "
+"following dialog</i>."
+msgstr ""
+
+#: kmymoney2.cpp:2392
+msgid "Create category"
+msgstr ""
+
+#: kmymoney2.cpp:2429
+msgid "Create a new Category"
+msgstr ""
+
+#: kmymoney2.cpp:2505
+#, fuzzy, c-format
+msgid "Unable to create account: %1"
+msgstr "No s'ha pogut afegir l'assentament: "
+
+#: kmymoney2.cpp:2516
+msgid ""
+"The security <b>%1</b> currently does not exist as sub-account of <b>%2</b>. "
+"Do you want to create it?"
+msgstr ""
+
+#: kmymoney2.cpp:2517
+#, fuzzy
+msgid "Create security"
+msgstr "Esborra valor bursàtil"
+
+#: kmymoney2.cpp:2551
+#, fuzzy
+msgid "Do you really want to delete the investment <b>%1</b>?"
+msgstr "Esteu segur que voleu esborrar la programació seleccionada?"
+
+#: kmymoney2.cpp:2551
+msgid "Delete investment"
+msgstr ""
+
+#: kmymoney2.cpp:2558
+#, fuzzy, c-format
+msgid "Unable to delete investment: %1"
+msgstr "No s'ha pogut editar la institució: "
+
+#: kmymoney2.cpp:2640 kmymoney2.cpp:2646
+#, fuzzy
+msgid "Unable to add scheduled transaction: "
+msgstr "No s'ha pogut afegir l'assentament: "
+
+#: kmymoney2.cpp:2722
+#, fuzzy
+msgid "Adjusting transactions..."
+msgstr "S'estan carregant assentaments..."
+
+#: kmymoney2.cpp:2747
+#, fuzzy
+msgid "Adjusting scheduled transactions..."
+msgstr "S'estan carregant assentaments..."
+
+#: kmymoney2.cpp:2765
+#, fuzzy
+msgid "Adjusting budgets..."
+msgstr "S'està desant el fitxer..."
+
+#: kmymoney2.cpp:2783
+msgid ""
+"Unable to exchange category <b>%1</b> with category <b>%2</b>. Reason: %3"
+msgstr ""
+
+#: kmymoney2.cpp:2804
+msgid "Do you really want to delete category <b>%1</b>?"
+msgstr ""
+
+#: kmymoney2.cpp:2811
+msgid "Unable to delete category <b>%1</b>. Cause: %2"
+msgstr ""
+
+#: kmymoney2.cpp:2823
+msgid ""
+"Do you want to delete category <b>%1</b> with all its sub-categories or only "
+"the category itself? If you only delete the category itself, all its sub-"
+"categories will be made sub-categories of <b>%2</b>."
+msgstr ""
+
+#: kmymoney2.cpp:2827
+#, fuzzy
+msgid "Delete all"
+msgstr "Selecciona-ho tot"
+
+#: kmymoney2.cpp:2828
+#, fuzzy
+msgid "Just the category"
+msgstr "Crea una nova categoria"
+
+#: kmymoney2.cpp:2858
+msgid ""
+"Some sub-categories of category <b>%1</b> cannot be deleted, because they "
+"are still used. They will be made sub-categories of <b>%2</b>. Proceed?"
+msgstr ""
+
+#: kmymoney2.cpp:2878
+msgid "Unable to delete a sub-category of category <b>%1</b>. Reason: %2"
+msgstr ""
+
+#: kmymoney2.cpp:2889
+msgid "Do you really want to delete account <b>%1</b>?"
+msgstr ""
+
+#: kmymoney2.cpp:2901
+msgid "Unable to delete account '%1'. Cause: %2"
+msgstr ""
+
+#: kmymoney2.cpp:2917
+#, fuzzy
+msgid "Edit account '%1'"
+msgstr "Compte nou..."
+
+#: kmymoney2.cpp:2922
+#, fuzzy
+msgid "Edit category '%1'"
+msgstr "Edita ..."
+
+#: kmymoney2.cpp:3008
+#, fuzzy
+msgid "Unable to modify account '%1'. Cause: %2"
+msgstr "No s'ha pogut modificar la programació: "
+
+#: kmymoney2.cpp:3065
+msgid ""
+"KMyMoney has detected some overdue scheduled transactions for this account. "
+"Do you want to enter those scheduled transactions now?"
+msgstr ""
+
+#: kmymoney2.cpp:3065
+#, fuzzy
+msgid "Scheduled transactions found"
+msgstr "Assentaments programats"
+
+#: kmymoney2.cpp:3163
+msgid ""
+"You are about to finish the reconciliation of this account with a difference "
+"between your bank statement and the transactions marked as cleared.\n"
+"Are you sure you want to finish the reconciliation ?"
+msgstr ""
+
+#: kmymoney2.cpp:3165
+#, fuzzy
+msgid "Confirm end of reconciliation"
+msgstr "Posposa la conciliació"
+
+#: kmymoney2.cpp:3339
+msgid ""
+"You have closed this account. It remains in the system because you have "
+"transactions which still refer to it, but is not shown in the views. You can "
+"make it visible again by going to the View menu and selecting <b>Show all "
+"accounts</b> or by unselecting the <b>Don't show closed accounts</b> setting."
+msgstr ""
+
+#: kmymoney2.cpp:3379
+msgid "<b>%1</b> cannot be moved to institution <b>%2</b>. Reason: %3"
+msgstr ""
+
+#: kmymoney2.cpp:3393
+msgid "<b>%1</b> cannot be moved to <b>%2</b>. Reason: %3"
+msgstr ""
+
+#: kmymoney2.cpp:3408
+#, fuzzy
+msgid "%1 YTD Account Transactions"
+msgstr "Assentaments d'impostos"
+
+#: dialogs/kbalancechartdlg.cpp:71 kmymoney2.cpp:3409
+#: views/kforecastview.cpp:650 views/khomeview.cpp:276
+#: views/khomeview.cpp:1384 views/kreportsview.cpp:619
+#, fuzzy
+msgid "Generated Report"
+msgstr "Informe per omissió"
+
+#: dialogs/rc.cpp:324 dialogs/settings/rc.cpp:80 kmymoney2.cpp:3411
+#: views/kreportsview.cpp:1062 views/rc.cpp:58 views/rc.cpp:59
+msgid "Transactions"
+msgstr "Assentaments"
+
+#: kmymoney2.cpp:3449
+#, fuzzy, c-format
+msgid "Unable to add scheduled transaction: %1"
+msgstr "No s'ha pogut modificar la programació: "
+
+#: kmymoney2.cpp:3449
+#, fuzzy
+msgid "Add scheduled transaction"
+msgstr "Assentaments programats"
+
+#: kmymoney2.cpp:3489
+msgid ""
+"You have entered a scheduled transaction date of <b>%1</b>. Because the "
+"scheduled transaction was last paid on <b>%2</b>, KMyMoney will "
+"automatically adjust the scheduled transaction date to the next date unless "
+"the last payment date is reset. Do you want to reset the last payment date?"
+msgstr ""
+
+#: kmymoney2.cpp:3489
+#, fuzzy
+msgid "Reset Last Payment Date"
+msgstr "Pagaments a"
+
+#: kmymoney2.cpp:3499 kmymoney2.cpp:3519 kmymoney2.cpp:3531
+#, fuzzy
+msgid "Unable to modify scheduled transaction '%1'"
+msgstr "No s'ha pogut modificar la programació: "
+
+#: kmymoney2.cpp:3543
+#, fuzzy
+msgid "Are you sure you want to delete the scheduled transaction <b>%1</b>?"
+msgstr "Esteu segur que voleu esborrar la programació seleccionada?"
+
+#: kmymoney2.cpp:3546
+msgid ""
+"In case of loan payments it is currently not possible to recreate the "
+"scheduled transaction."
+msgstr ""
+
+#: kmymoney2.cpp:3555
+#, fuzzy
+msgid "Unable to remove scheduled transaction '%1'"
+msgstr "No s'ha pogut modificar la programació: "
+
+#: kmymoney2.cpp:3569
+#, fuzzy, c-format
+msgid ""
+"_: Copy of scheduled transaction name\n"
+"Copy of %1"
+msgstr "Llença els assentaments programats sospitosos"
+
+#: kmymoney2.cpp:3581 kmymoney2.cpp:4352
+#, fuzzy
+msgid "Unable to duplicate transaction(s): %1, thrown in %2:%3"
+msgstr "No s'ha pogut afegir l'assentament: "
+
+#: kmymoney2.cpp:3595
+#, fuzzy
+msgid ""
+"Do you really want to skip the <b>%1</b> transaction scheduled for <b>%2</b>?"
+msgstr "Esteu segur que voleu esborrar la programació seleccionada?"
+
+#: kmymoney2.cpp:3605
+#, fuzzy
+msgid "Unable to skip scheduled transaction <b>%1</b>."
+msgstr "No s'ha pogut modificar la programació: "
+
+#: kmymoney2.cpp:3618
+#, fuzzy
+msgid "Unknown scheduled transaction '%1'"
+msgstr "Assentaments programats"
+
+#: kmymoney2.cpp:3673
+msgid ""
+"Are you sure you wish to stop this scheduled transaction from being entered "
+"into the register?\n"
+"\n"
+"KMyMoney will prompt you again next time it starts unless you manually enter "
+"it later."
+msgstr ""
+
+#: kmymoney2.cpp:3725 kmymoney2.cpp:3732
+#, fuzzy
+msgid "Unable to enter scheduled transaction '%1'"
+msgstr "Assentaments programats"
+
+#: kmymoney2.cpp:3743 kmymoney2.cpp:3783
+msgid "New Payee"
+msgstr ""
+
+#: kmymoney2.cpp:3745
+msgid "Do you want to add <b>%1</b> as payer/receiver ?"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:892 kmymoney2.cpp:3747
+msgid "New payee/receiver"
+msgstr ""
+
+#: kmymoney2.cpp:3773
+msgid "Unable to add payee"
+msgstr ""
+
+#: kmymoney2.cpp:3826
+#, fuzzy
+msgid "Do you really want to remove the payee <b>%1</b>?"
+msgstr "Esteu segur que voleu esborrar la programació seleccionada?"
+
+#: kmymoney2.cpp:3828
+#, fuzzy
+msgid "Do you really want to remove all selected payees?"
+msgstr "Esteu segur que voleu esborrar la programació seleccionada?"
+
+#: kmymoney2.cpp:3830
+msgid "Remove Payee"
+msgstr ""
+
+#: kmymoney2.cpp:3870
+msgid ""
+"At least one transaction/scheduled transaction is still referenced by a "
+"payee. Currently you have all payees selected. However, at least one payee "
+"must remain so that the transaction/scheduled transaction can be reassigned."
+msgstr ""
+
+#: kmymoney2.cpp:3925
+#, fuzzy
+msgid "Unable to reassign payee of transaction/split"
+msgstr "No s'ha pogut afegir l'assentament: "
+
+#: converter/mymoneyqifreader.cpp:534 converter/mymoneystatementreader.cpp:959
+#: kmymoney2.cpp:3926 kmymoney2.cpp:3983 views/kbudgetview.cpp:636
+#: views/kbudgetview.cpp:737 views/kbudgetview.cpp:751
+#: views/kpayeesview.cpp:519 views/kpayeesview.cpp:870
+msgid "thrown in"
+msgstr "llançada en"
+
+#: kmymoney2.cpp:3982
+msgid "Unable to remove payee(s)"
+msgstr ""
+
+#: kmymoney2.cpp:3990
+msgid "Enter ISO 4217 code for the new currency"
+msgstr ""
+
+#: kmymoney2.cpp:3999
+#, fuzzy, c-format
+msgid "Cannot create new currency. %1"
+msgstr "No s'ha pogut crear la nova divisa."
+
+#: kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, fuzzy, c-format
+msgid "Cannot rename currency. %1"
+msgstr "No s'ha pogut crear la nova divisa."
+
+#: kmymoney2.cpp:4039
+#, fuzzy
+msgid "Cannot delete currency %1. %2"
+msgstr "No s'ha pogut crear la nova divisa."
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+#, fuzzy
+msgid "Cannot set %1 as base currency: %2"
+msgstr "No s'ha pogut crear la nova divisa."
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+#, fuzzy
+msgid "Set base currency"
+msgstr "Nova divisa"
+
+#: kmymoney2.cpp:4065
+#, c-format
+msgid "Budget %1"
+msgstr ""
+
+#: kmymoney2.cpp:4075
+msgid "Budget %1 (%2)"
+msgstr ""
+
+#: kmymoney2.cpp:4090 kmymoney2.cpp:4139
+msgid "Unable to add budget: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4105
+#, fuzzy
+msgid "Do you really want to remove the budget <b>%1</b>?"
+msgstr "Esteu segur que voleu esborrar la programació seleccionada?"
+
+#: kmymoney2.cpp:4107
+#, fuzzy
+msgid "Do you really want to remove all selected budgets?"
+msgstr "Esteu segur que voleu esborrar la programació seleccionada?"
+
+#: kmymoney2.cpp:4109
+msgid "Remove Budget"
+msgstr ""
+
+#: kmymoney2.cpp:4122
+msgid "Unable to remove budget: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4134 views/kreportsview.cpp:659
+#, c-format
+msgid "Copy of %1"
+msgstr ""
+
+#: kmymoney2.cpp:4164
+#, fuzzy
+msgid "Select year"
+msgstr "Seleccioneu un any"
+
+#: kmymoney2.cpp:4164
+#, fuzzy
+msgid "Budget year"
+msgstr "Any següent"
+
+#: kmymoney2.cpp:4176 kmymoney2.cpp:4214 kmymoney2.cpp:4274
+msgid "Unable to modify budget: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4192 kmymoney2.cpp:4250
+msgid ""
+"The current budget already contains data. Continuing will replace all "
+"current values of this budget."
+msgstr ""
+
+#: kmymoney2.cpp:4222
+msgid ""
+"Please be aware that changes made in the following dialog affect all KDE "
+"applications not only KMyMoney."
+msgstr ""
+
+#: kmymoney2.cpp:4292
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to delete the transactions anyway?"
+msgstr ""
+
+#: kmymoney2.cpp:4295 views/kgloballedgerview.cpp:1043
+msgid "Transaction already reconciled"
+msgstr ""
+
+#: kmymoney2.cpp:4301
+#, fuzzy
+msgid "Do you really want to delete the selected transaction?"
+msgstr "Esteu segur que voleu esborrar la programació seleccionada?"
+
+#: kmymoney2.cpp:4303
+#, fuzzy
+msgid "Do you really want to delete all %1 selected transactions?"
+msgstr "Esteu segur que voleu esborrar la programació seleccionada?"
+
+#: kmymoney2.cpp:4305
+msgid "Delete transaction"
+msgstr ""
+
+#: kmymoney2.cpp:4306
+#, fuzzy
+msgid "Deleting transactions"
+msgstr "S'estan afegint assentaments"
+
+#: kmymoney2.cpp:4321
+#, fuzzy
+msgid "Duplicating transactions"
+msgstr "Assentament desglossat"
+
+#: kmymoney2.cpp:4378
+#, fuzzy
+msgid "Unable to delete transaction(s): %1, thrown in %2:%3"
+msgstr "No s'ha pogut afegir l'assentament: "
+
+#: kmymoney2.cpp:4452 kmymoney2.cpp:4622
+#, fuzzy
+msgid "Unable to modify transaction: %1, thrown in %2:%3"
+msgstr "No s'ha pogut afegir l'assentament: "
+
+#: kmymoney2.cpp:4514
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling and<br>- <b>Cancel</b> returns to the "
+"transaction editor.<p>You can also select an option to save the transaction "
+"automatically when e.g. selecting another transaction."
+msgstr ""
+
+#: kmymoney2.cpp:4514 kmymoney2.cpp:4517
+#, fuzzy
+msgid "Cancel transaction edit"
+msgstr "Assentament vàlid"
+
+#: kmymoney2.cpp:4517
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling.<p>You can also select an option to save the "
+"transaction automatically when e.g. selecting another transaction."
+msgstr ""
+
+#: kmymoney2.cpp:4667
+#, fuzzy
+msgid "Unable to accept transaction: %1, thrown in %2:%3"
+msgstr "No s'ha pogut afegir l'assentament: "
+
+#: kmymoney2.cpp:4846
+#, fuzzy
+msgid "Unable to unmatch the selected transactions"
+msgstr "No s'ha pogut afegir l'assentament: "
+
+#: kmymoney2.cpp:4885
+msgid "No manually entered transaction selected for matching"
+msgstr ""
+
+#: kmymoney2.cpp:4887
+#, fuzzy
+msgid "No imported transaction selected for matching"
+msgstr "Accepta els assentaments importats i continua"
+
+#: kmymoney2.cpp:4895
+#, fuzzy
+msgid "Unable to match the selected transactions"
+msgstr "No s'ha pogut afegir l'assentament: "
+
+#: kmymoney2.cpp:5097
+#, fuzzy
+msgid "Create a new transaction"
+msgstr "Crea un compte nou"
+
+#: kmymoney2.cpp:5163
+#, fuzzy
+msgid "Duplicate the current selected transactions"
+msgstr "Esborra el perfil seleccionat"
+
+#: kmymoney2.cpp:5223
+#, fuzzy
+msgid ""
+"_: Button text for unmatch transaction\n"
+"Unmatch"
+msgstr "Qualsevol assentament"
+
+#: kmymoney2.cpp:5451 kmymoney2.cpp:5473
+msgid "Goto '%1'"
+msgstr ""
+
+#: kmymoney2.cpp:5582
+msgid "Running consistency check..."
+msgstr ""
+
+#: kmymoney2.cpp:5590
+#, c-format
+msgid "Consistency check failed: %1"
+msgstr ""
+
+#: kmymoney2.cpp:5594
+msgid "Consistency check result"
+msgstr ""
+
+#: kmymoney2.cpp:5603
+#, fuzzy
+msgid "Checking for overdue scheduled transactions..."
+msgstr "Assentaments programats"
+
+#: kmymoney2.cpp:5740
+msgid ""
+"You must first select a KMyMoney file before you can import a statement."
+msgstr ""
+
+#: kmymoney2.cpp:5746
+msgid "Importing a statement via Web Connect"
+msgstr ""
+
+#: kmymoney2.cpp:5759
+msgid ""
+"Unable to import %1 using %2 plugin. The plugin returned the following "
+"error: %3"
+msgstr ""
+
+#: kmymoney2.cpp:5759 plugins/ofximport/ofximporterplugin.cpp:646
+msgid "Importing error"
+msgstr ""
+
+#: kmymoney2.cpp:5780
+msgid "All messages have been enabled."
+msgstr ""
+
+#: kmymoney2.cpp:5780
+msgid "All messages"
+msgstr ""
+
+#: kmymoney2.cpp:5855
+#, fuzzy
+msgid "Auto saving..."
+msgstr "S'està desant el fitxer..."
+
+#: kmymoney2.cpp:5913
+#, fuzzy
+msgid "Unable to setup online parameters for account ''%1'"
+msgstr "No s'ha pogut afegir l'assentament: "
+
+#: kmymoney2.cpp:5928
+msgid ""
+"Do you really want to remove the mapping of account <b>%1</b> to an online "
+"account? Depending on the details of the online banking method used, this "
+"action cannot be reverted."
+msgstr ""
+
+#: kmymoney2.cpp:5928
+#, fuzzy
+msgid "Remove mapping to online account"
+msgstr "Nom del préstec"
+
+#: kmymoney2.cpp:5939
+#, fuzzy, c-format
+msgid "Unable to unmap account from online account: %1"
+msgstr "No s'ha pogut afegir l'assentament: "
+
+#: kmymoney2.cpp:5956
+#, fuzzy
+msgid " (Brokerage)"
+msgstr " (Gestoria)"
+
+#: kmymoney2.cpp:5957
+msgid ""
+"You try to map a brokerage account to an online account. This is usually not "
+"advisable. In general, the investment account should be mapped to the online "
+"account. Please cancel if you intended to map the investment account, "
+"continue otherwise"
+msgstr ""
+
+#: kmymoney2.cpp:5957
+#, fuzzy
+msgid "Mapping brokerage account"
+msgstr "Compte preferit"
+
+#: kmymoney2.cpp:5964
+msgid "Select online banking plugin"
+msgstr ""
+
+#: kmymoney2.cpp:6005
+#, fuzzy, c-format
+msgid "Unable to map account to online account: %1"
+msgstr "No s'ha pogut afegir l'assentament: "
+
+#: converter/mymoneyqifreader.cpp:407 converter/mymoneytemplate.cpp:73
+#: views/kmymoneyview.cpp:590
+msgid "Error while loading file '%1'!"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:409 converter/mymoneyqifreader.cpp:965
+#: converter/mymoneytemplate.cpp:75 views/kmymoneyview.cpp:592
+msgid "File access error"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:84
+msgid "<b>%1</b> is not a template file."
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:85 views/kmymoneyview.cpp:603
+msgid "Filetype Error"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:93
+msgid "Error while reading template file <b>%1</b> in line %2, column %3"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:94
+msgid "Template Error"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:101
+msgid "File '%1' not found!"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:142
+msgid "Invalid tag <b>%1</b> in template file <b>%2</b>!"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:214
+#, c-format
+msgid "Loading template %1"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:241
+msgid "Invalid top-level account type <b>%1</b> in template file <b>%2</b>!"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:309
+msgid ""
+"Invalid flag type <b>%1</b> for account <b>%3</b> in template file <b>%2</b>!"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:398 converter/mymoneytemplate.cpp:401
+#: views/kmymoneyview.cpp:1151 views/kmymoneyview.cpp:1154
+msgid "Unable to write changes to '%1'"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:407 views/kmymoneyview.cpp:1162
+msgid "Unable to upload to '%1'"
+msgstr ""
+
+#: converter/mymoneyqifwriter.cpp:70
+msgid ""
+"Unexpected exception '%1' thrown in %2, line %3 caught in MyMoneyQifWriter::"
+"write()"
+msgstr ""
+
+#: converter/mymoneyqifwriter.cpp:80
+msgid "Unable to open file '%1' for writing"
+msgstr "No es pot obrir el fitxer '%1' per a escriptura"
+
+#: converter/webpricequote.cpp:340
+#, c-format
+msgid "Symbol found: %1"
+msgstr ""
+
+#: converter/webpricequote.cpp:368
+msgid "Price found: %1 (%2)"
+msgstr ""
+
+#: converter/webpricequote.cpp:380
+#, c-format
+msgid "Date found: %1"
+msgstr ""
+
+#: converter/webpricequote.cpp:397 converter/webpricequote.cpp:403
+#, c-format
+msgid "Unable to update price for %1"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:170
+msgid ""
+"_: Category name\n"
+"Reinvested dividend"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:173
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (long term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:176
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (short term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:179
+msgid ""
+"_: Category name\n"
+"Dividend"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:182
+msgid ""
+"_: Category name\n"
+"Interest"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:185
+msgid ""
+"_: Category name\n"
+"Capital Gain (short term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:188
+msgid ""
+"_: Category name\n"
+"Capital Gain (mid term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:191
+msgid ""
+"_: Category name\n"
+"Capital Gain (long term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:194
+msgid ""
+"_: Category name\n"
+"Returned capital"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:197
+msgid ""
+"_: Category name\n"
+"Miscellaneous income"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:200
+msgid ""
+"_: Category name\n"
+"Miscellaneous expense"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:203
+msgid ""
+"_: Category name\n"
+"Investment fees"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:205
+#, c-format
+msgid "Unknown QIF type %1"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:355
+#, fuzzy
+msgid "Date format selection"
+msgstr "Informació del beneficiari"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Pick the date format that suits your input file"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:366
+#, fuzzy
+msgid "Importing QIF ..."
+msgstr "Importa un fitxer de GnuCash..."
+
+#: converter/mymoneyqifreader.cpp:442
+#, fuzzy
+msgid "Reading QIF ..."
+msgstr "QIF ..."
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Adding transactions"
+msgstr "S'estan afegint assentaments"
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Now adding the transactions to your ledger..."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:533
+#, fuzzy
+msgid "Unable to add transactions"
+msgstr "No s'ha pogut afegir l'assentament: "
+
+#: converter/mymoneyqifreader.cpp:567
+msgid ""
+"_: QIF tag for liability account\n"
+"Oth L"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:572
+msgid ""
+"_: QIF tag for category\n"
+"Cat"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:575
+msgid ""
+"_: QIF tag for security\n"
+"Security"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:578
+#, fuzzy
+msgid ""
+"_: QIF tag for investment account\n"
+"Invst"
+msgstr "Demana un compte d'inversions per cada valor"
+
+#: converter/mymoneyqifreader.cpp:581
+msgid ""
+"_: QIF tag for prices\n"
+"Prices"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:599
+msgid ""
+"_: QIF tag for a class\n"
+"Class"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:753 converter/mymoneyqifreader.cpp:2203
+msgid ""
+"The %1 account currently has an opening balance of %2. This QIF file reports "
+"an opening balance of %3. Would you like to overwrite the current balance "
+"with the one from the QIF file?"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:754 converter/mymoneyqifreader.cpp:2204
+msgid "Overwrite opening balance"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:879 converter/mymoneyqifreader.cpp:890
+#: converter/mymoneyqifreader.cpp:914
+msgid "Autogenerated by QIF importer"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:907
+msgid "QIF imported, no account name supplied"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:940
+msgid ""
+"KMyMoney has imported a second opening balance transaction into account <b>%"
+"1</b> which differs from the one found already on file. Please correct this "
+"manually once the import is done."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:940
+#, fuzzy
+msgid "Opening balance problem"
+msgstr "Saldos d'obertura"
+
+#: converter/mymoneyqifreader.cpp:963
+#, fuzzy
+msgid "Error while creating opening balance transaction"
+msgstr "Amaga els assentaments conciliats"
+
+#: converter/mymoneyqifreader.cpp:1029 converter/mymoneyqifreader.cpp:1276
+msgid ""
+"The date entry \"%1\" read from the file cannot be interpreted through the "
+"current date profile setting of \"%2\".\n"
+"\n"
+"Pressing \"Continue\" will assign todays date to the transaction. Pressing "
+"\"Cancel\" will abort the import operation. You can then restart the import "
+"and select a different QIF profile or create a new one."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1035 converter/mymoneyqifreader.cpp:1282
+msgid "Invalid date format"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1398
+#: converter/mymoneystatementreader.cpp:589
+#: converter/mymoneystatementreader.cpp:592
+msgid "Statement Importer"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1413
+#: converter/mymoneystatementreader.cpp:644
+msgid ""
+"This investment account does not contain the \"%1\" security. Transactions "
+"involving this security will be ignored."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1415
+#: converter/mymoneystatementreader.cpp:612
+#: converter/mymoneystatementreader.cpp:644
+msgid "Security not found"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2021
+#, fuzzy
+msgid "%1 (Investment)"
+msgstr "Inversions"
+
+#: converter/mymoneyqifreader.cpp:2022
+msgid "Autogenerated by QIF importer from type Mutual account entry"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2085 converter/mymoneyqifreader.cpp:2228
+msgid "account"
+msgstr "compte"
+
+#: converter/mymoneyqifreader.cpp:2086
+msgid "al"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2093
+msgid "category"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2094
+msgid "ei"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2095
+msgid "Category selection"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2110
+msgid "Account \"%1\" disappeared: "
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2131
+msgid "The %1 '%2' does not exist. Do you want to create it?"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2140
+#, c-format
+msgid "Select %1"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2142
+msgid ""
+"The %1 <b>%2</b> currently exists. Do you want to import transactions to "
+"this account?"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2147
+msgid ""
+"The %1 <b>%2</b> currently does not exist. You can create a new %3 by "
+"pressing the <b>Create</b> button or select another %4 manually from the "
+"selection box."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2154
+#, c-format
+msgid "Import transactions to %1"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2155
+msgid ""
+"No %1 information has been found in the selected QIF file. Please select an "
+"account using the selection box in the dialog or create a new %2 by pressing "
+"the <b>Create</b> button."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2229
+msgid "You must select or create an account."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2231
+msgid "You must select or create a category."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:100
+#, fuzzy
+msgid "_Fees"
+msgstr "Setmanes"
+
+#: converter/mymoneystatementreader.cpp:106
+msgid "_Dividend"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:289
+#, fuzzy, c-format
+msgid "Importing statement for account %1"
+msgstr "S'està important un extracte emprant l'endollable %1"
+
+#: converter/mymoneystatementreader.cpp:291
+#, fuzzy
+msgid "Importing statement without transactions"
+msgstr "S'està important un extracte emprant l'endollable %1"
+
+#: converter/mymoneystatementreader.cpp:385
+#, fuzzy
+msgid " Statement balance is not contained in statement."
+msgstr "Saldo inicial de l'extracte:"
+
+#: converter/mymoneystatementreader.cpp:387
+msgid " Statement balance on %1 is reported to be %2"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:389
+#, fuzzy
+msgid " Transactions"
+msgstr "Assentaments"
+
+#: converter/mymoneystatementreader.cpp:390
+msgid " %1 processed"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:391
+msgid " %1 added"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:392
+msgid " %1 matched"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:393
+#, fuzzy
+msgid " %1 duplicates"
+msgstr "Duplica"
+
+#: converter/mymoneystatementreader.cpp:394
+#, fuzzy
+msgid " Payees"
+msgstr "Beneficiaris"
+
+#: converter/mymoneystatementreader.cpp:395
+msgid " %1 created"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:483
+#, c-format
+msgid "Error creating security record: %1"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:612
+msgid ""
+"This imported statement contains investment transactions with no security. "
+"These transactions will be ignored."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:803
+msgid "(Fees) "
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:880
+msgid ""
+"Do you want to add \"%1\" as payee/receiver?\n"
+"\n"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:881
+msgid ""
+"Selecting \"Yes\" will create the payee, \"No\" will skip creation of a "
+"payee record and remove the payee information from this transaction. "
+"Selecting \"Cancel\" aborts the import operation.\n"
+"\n"
+"If you select \"No\" here and mark the \"Don't ask again\" checkbox, the "
+"payee information for all following transactions referencing \"%1\" will be "
+"removed."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:917
+#, fuzzy
+msgid "Save Category"
+msgstr "Categoria"
+
+#: converter/mymoneystatementreader.cpp:918
+#, fuzzy
+msgid "No Category"
+msgstr "Categoria"
+
+#: converter/mymoneystatementreader.cpp:919 dialogs/rc.cpp:4
+msgid "Abort"
+msgstr "Avorta"
+
+#: converter/mymoneystatementreader.cpp:926
+msgid "Please select a default category for payee '%1':"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:958
+msgid "Unable to add payee/receiver"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid ""
+"KMyMoney has found a scheduled transaction named <b>%1</b> which matches an "
+"imported transaction. Do you want KMyMoney to enter this schedule now so "
+"that the transaction can be matched? "
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1162
+#, fuzzy
+msgid "Schedule found"
+msgstr "Programació"
+
+#: converter/mymoneystatementreader.cpp:1219
+#, fuzzy
+msgid "Problem adding or matching imported transaction with id '%1': %2"
+msgstr "No s'ha pogut afegir l'assentament: "
+
+#: converter/mymoneystatementreader.cpp:1268
+msgid ""
+"<b>You have downloaded a statement for the following account:</b><br><br>"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1269
+#, fuzzy, c-format
+msgid " - Account Name: %1"
+msgstr "Nom del compte"
+
+#: converter/mymoneystatementreader.cpp:1270
+#, fuzzy, c-format
+msgid " - Account Type: %1"
+msgstr "Comptes"
+
+#: converter/mymoneystatementreader.cpp:1271
+#, fuzzy, c-format
+msgid " - Account Number: %1"
+msgstr "Número de compte"
+
+#: converter/mymoneystatementreader.cpp:1279
+msgid "Do you want to import transactions to this account?"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1281
+msgid ""
+"KMyMoney cannot determine which of your accounts to use. You can create a "
+"new account by pressing the <b>Create</b> button or select another one "
+"manually from the selection box below."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1287
+msgid ""
+"No account information has been found in the selected statement file. Please "
+"select an account using the selection box in the dialog or create a new "
+"account by pressing the <b>Create</b> button."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1294
+msgid "Import transactions"
+msgstr "Importa assentaments"
+
+#: converter/mymoneystatementreader.cpp:1330
+msgid ""
+"You must select an account, create a new one, or press the <b>Abort</b> "
+"button."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:119
+msgid "%1: Sorry. This importer cannot handle version %2 of element %3"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:193
+#, c-format
+msgid "Account%1"
+msgstr "Compte %1"
+
+#: converter/mymoneygncreader.cpp:197
+#, c-format
+msgid "Stock%1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:206
+#, c-format
+msgid "Payee%1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:212
+#, c-format
+msgid "Schedule%1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:262
+msgid "This version of the importer cannot handle multi-book files."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:912
+msgid "Invalid header for file. Should be 'gnc-v2'"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:937 converter/mymoneygncreader.cpp:972
+#: converter/mymoneygncreader.cpp:1062
+#, fuzzy, c-format
+msgid ""
+"Import failed:\n"
+"\n"
+"%1"
+msgstr "Importa un fitxer de GnuCash..."
+
+#: converter/mymoneygncreader.cpp:1065
+#, fuzzy
+msgid "Import complete"
+msgstr "Opcions d'importació"
+
+#: converter/mymoneygncreader.cpp:1120
+msgid "Disguise your wealth"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1121
+msgid ""
+"Each monetary value on your file will be multiplied by a random number "
+"between 0.01 and 1.99\n"
+"with a different value used for each transaction. In addition, to further "
+"disguise the true\n"
+"values, you may enter a number between %1 and %2 which will be applied to "
+"all values.\n"
+"These numbers will not be stored in the file."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1135
+msgid "Loading commodities..."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1160
+msgid "Loading prices..."
+msgstr "S'estan carregant les cotitzacions..."
+
+#: converter/mymoneygncreader.cpp:1164 converter/mymoneygncreader.cpp:1171
+msgid "Imported History"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1251
+#, c-format
+msgid "Current importer does not recognize GnuCash account type %1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1471
+msgid "Imported Transaction"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1519
+msgid "Loading templates..."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1531
+msgid "Unknown payee"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1723
+msgid "Loading schedules..."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1735
+#, c-format
+msgid "Can't find template transaction for schedule %1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1910
+msgid "Reorganizing accounts..."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1972
+msgid ""
+"Your main currency seems to be %1 (%2); do you want to set this as your base "
+"currency?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1993
+msgid "More"
+msgstr "Més"
+
+#: converter/mymoneygncreader.cpp:1997
+#, fuzzy
+msgid "Save Report"
+msgstr "Informes preferits"
+
+#: converter/mymoneygncreader.cpp:2017
+msgid ""
+"Problems were encountered in converting schedule '%1'.\n"
+"Do you want to review or edit it now?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2039
+msgid ""
+"Found:\n"
+"\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2040
+msgid " commodities (equities)\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2041
+msgid " prices\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2042
+msgid " accounts\n"
+msgstr " comptes\n"
+
+#: converter/mymoneygncreader.cpp:2043
+msgid " transactions\n"
+msgstr " assentaments\n"
+
+#: converter/mymoneygncreader.cpp:2044
+msgid " schedules\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2047
+msgid "No inconsistencies were detected"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2049
+msgid " inconsistencies were detected and corrected\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2054
+msgid " orphan accounts were created\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2059
+msgid " possible schedule problems were noted\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2064
+msgid "Small Business Features (Customers, Invoices, etc.)"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2065 views/kmymoneyview.cpp:241
+#: views/kmymoneyview.cpp:243
+msgid "Budgets"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2066
+#, fuzzy
+msgid "Lots"
+msgstr "Préstecs"
+
+#: converter/mymoneygncreader.cpp:2068
+msgid "The following features found in your file are not currently supported:"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2071
+msgid ""
+"\n"
+"\n"
+"Press More for further information"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2139
+msgid "Orphan created from unknown gnucash account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2170
+msgid "Internal error - invalid interval char in incrDate"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2233
+msgid "Enter the investment account name "
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2234
+msgid "My Investments"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2269
+#, c-format
+msgid "Select parent investment account or enter new name. Stock %1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2292 converter/mymoneygncreader.cpp:2307
+msgid "%1 is not an Investment Account. Do you wish to make it one?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2408
+msgid ""
+"An Investment account must be a child of an Asset account\n"
+"Account %1 will be stored under the main Asset account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2410
+msgid ""
+"An Income account must be a child of an Income account\n"
+"Account %1 will be stored under the main Income account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2412
+msgid ""
+"An Expense account must be a child of an Expense account\n"
+"Account %1 will be stored under the main Expense account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2414
+msgid ""
+"One or more transactions contain a reference to an otherwise unknown "
+"account\n"
+"An asset account with the name %1 has been created to hold the data"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2416
+msgid "Schedule %1 has interval of %2 which is not currently available"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2417
+msgid "Schedule %1 dropped at user request"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2418
+msgid "Schedule %1 contains unknown action (key = %2, type = %3)"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2419
+msgid "Schedule %1 contains multiple actions; only one has been imported"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2420
+msgid "Schedule %1 contains no valid splits"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2421
+msgid ""
+"Schedule %1 appears to contain a formula. GnuCash formulae are not "
+"convertible"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2422
+msgid ""
+"Schedule %1 contains unknown interval specification; please check for "
+"correct operation"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2423
+msgid ""
+"Schedule %1 contains a deferred interval specification; please check for "
+"correct operation"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2424
+msgid ""
+"Account or Category %1, transaction date %2; split contains invalid value; "
+"please check"
+msgstr ""
+
+#: kmymoneyutils.cpp:146
+msgid "&New Schedule..."
+msgstr "&Nova programació..."
+
+#: kmymoneyutils.cpp:148
+msgid "Create a new schedule."
+msgstr ""
+
+#: kmymoneyutils.cpp:149
+msgid "Use this to create a new schedule."
+msgstr ""
+
+#: kmymoneyutils.cpp:158
+msgid "&Filter"
+msgstr "&Filtre"
+
+#: kmymoneyutils.cpp:160
+msgid "Filter out accounts"
+msgstr ""
+
+#: kmymoneyutils.cpp:161
+msgid "Use this to filter out accounts"
+msgstr ""
+
+#: kmymoneyutils.cpp:192
+msgid "Preferred accounts"
+msgstr "Comptes preferits"
+
+#: kmymoneyutils.cpp:193
+msgid "Payment accounts"
+msgstr "Comptes monetaris"
+
+#: kmymoneyutils.cpp:194
+msgid "Favorite reports"
+msgstr "Informes preferits"
+
+#: kmymoneyutils.cpp:195
+#, fuzzy
+msgid "Forecast (schedule)"
+msgstr "Escolliu les programacions"
+
+#: kmymoneyutils.cpp:196
+#, fuzzy
+msgid "Networth forecast"
+msgstr "Valor net a dia d'avui"
+
+#: kmymoneyutils.cpp:197
+msgid "Forecast (history)"
+msgstr ""
+
+#: kmymoneyutils.cpp:198
+#, fuzzy
+msgid "Assets and Liabilities"
+msgstr "Actius i Passius"
+
+#: kmymoneyutils.cpp:199 reports/pivottable.cpp:2416 views/khomeview.cpp:1393
+#: widgets/rc.cpp:70
+msgid "Budget"
+msgstr ""
+
+#: kmymoneyutils.cpp:200
+#, fuzzy
+msgid "CashFlow"
+msgstr "Efectiu"
+
+#: dialogs/kenterscheduledlg.cpp:153 kmymoneyutils.cpp:366
+msgid "Unable to load schedule details"
+msgstr "No s'han pogut carregar els detalls de la planificació"
+
+#: kmymoneyutils.cpp:390 widgets/register.cpp:473
+#, fuzzy
+msgid ""
+"_: Reconcile state 'Not reconciled'\n"
+"Not reconciled"
+msgstr "No conciliat"
+
+#: kmymoneyutils.cpp:393 widgets/register.cpp:476
+#, fuzzy
+msgid ""
+"_: Reconcile state 'Cleared'\n"
+"Cleared"
+msgstr "Assistent per a la conciliació"
+
+#: kmymoneyutils.cpp:396 widgets/register.cpp:479
+#, fuzzy
+msgid ""
+"_: Reconcile state 'Reconciled'\n"
+"Reconciled"
+msgstr "No conciliat"
+
+#: kmymoneyutils.cpp:399 widgets/register.cpp:482
+#, fuzzy
+msgid ""
+"_: Reconcile state 'Frozen'\n"
+"Frozen"
+msgstr "Darrer extracte conciliat: %1"
+
+#: kmymoneyutils.cpp:410
+#, fuzzy
+msgid ""
+"_: Reconcile flag C\n"
+"C"
+msgstr "Conciliat"
+
+#: kmymoneyutils.cpp:413
+#, fuzzy
+msgid ""
+"_: Reconcile flag R\n"
+"R"
+msgstr "Conciliat"
+
+#: kmymoneyutils.cpp:416
+#, fuzzy
+msgid ""
+"_: Reconcile flag F\n"
+"F"
+msgstr "Conciliat"
+
+#: kmymoneyutils.cpp:419
+msgid ""
+"_: Flag for unknown reconciliation state\n"
+"?"
+msgstr ""
+
+#: _tips.cpp:3
+msgid ""
+"<p>...that you can change the sort order of ledger entries by\n"
+"right-clicking the header of the ledger view?\n"
+msgstr ""
+
+#: _tips.cpp:9
+msgid ""
+"<p>...that you can easily move to the other side of a transfer transaction\n"
+"by opening the context menu with the right mouse button and selecting one of "
+"the\n"
+"'Goto' functions?\n"
+msgstr ""
+
+#: _tips.cpp:16
+msgid ""
+"<p>...that you can start editing a transaction by double-clicking on the\n"
+"transaction in the register?\n"
+msgstr ""
+
+#: _tips.cpp:22
+msgid ""
+"<p>...that you can show more details of the selected transaction in the\n"
+"register by selecting the 'ledger lens' feature in the settings dialog?\n"
+msgstr ""
+
+#: _tips.cpp:28
+msgid ""
+"<p>...that transactions with no category assigned or split\n"
+"transactions with unassigned values are marked with an exclamation mark \n"
+"on a yellow triangle in the register?\n"
+msgstr ""
+
+#: _tips.cpp:35
+msgid ""
+"<p>...that you can show all details of the transactions in the register\n"
+"by typing &lt;Ctrl-T&gt; or selecting the 'Settings/Show Transaction "
+"Detail'\n"
+"menu entry? You can turn this feature off the same way.\n"
+msgstr ""
+
+#: _tips.cpp:42
+msgid ""
+"<p>...that you can switch between a listing of all accounts or\n"
+"an icon view of all asset and liability accounts with the tabs\n"
+"in the accounts view?\n"
+msgstr ""
+
+#: _tips.cpp:49
+msgid "<p>...that the KMyMoney development team wishes you a nice day?\n"
+msgstr ""
+
+#: _tips.cpp:54
+msgid ""
+"<p>...you can use your own external filter program to convert any\n"
+"import format to QIF on the fly? See the QIF profile editor for\n"
+"more details.\n"
+msgstr ""
+
+#: _tips.cpp:61
+msgid ""
+"<p>...that you can create a scheduled transaction from an existing\n"
+"one by selecting the context menu on a transaction in the ledger\n"
+"or the \"More...\"-menu in the transaction form?\n"
+msgstr ""
+
+#: _tips.cpp:68
+msgid ""
+"<p>...that you can switch to the payee of a transaction\n"
+"by selecting the context menu on a transaction in the ledger\n"
+"or in the transaction menu?\n"
+msgstr ""
+
+#: _tips.cpp:75
+msgid ""
+"<p>...that you can modify the colors and fonts used for the ledgers\n"
+"via <i>Configure/Register/...</i>?\n"
+msgstr ""
+
+#: _tips.cpp:81
+msgid ""
+"<p>...that you can hide transactions prior to a specific date?\n"
+"The date can be modified via <i>Configure/Register/Filter</i>.\n"
+msgstr ""
+
+#: _tips.cpp:87
+msgid ""
+"<p>...that you can customize the \"Home-Page\"\n"
+"via <i>Configure/Home</i>?\n"
+msgstr ""
+
+#: _tips.cpp:93
+msgid ""
+"<p>...that you can enter new transactions even while reconciling\n"
+"an account? You can also make the transaction form visible.\n"
+msgstr ""
+
+#: _tips.cpp:99
+msgid ""
+"<p>...that you can actively support the KMyMoney development team in\n"
+"cases that heavily depend on your data? You can save your data in an\n"
+"anonymized way for this support.<p>\n"
+"Just open your data file and immediately\n"
+"select <b>File/Save as...</b>. In the <b>Save As...</b> dialog\n"
+"select the filter <b>Anonymous Files</b> and make sure your file gets\n"
+"the extensions <b>.anon.xml</b>. <p>\n"
+"To verify, how the data looks like you are about to send away, you can open\n"
+"this file in KMyMoney and see how the developers see your data.\n"
+msgstr ""
+
+#: _tips.cpp:112
+msgid ""
+"<p>... that you can import your bank statements even without a network \n"
+"connection? Just select the file (OFX or QIF) from the File->Import menu.</"
+"p>\n"
+"<p>Provided by Jose Jorge</p>\n"
+msgstr ""
+
+#: reports/listtable.cpp:159 reports/listtable.cpp:163
+#: reports/pivottable.cpp:1564
+msgid ""
+"_: Report date range\n"
+"%1 through %2"
+msgstr ""
+
+#: reports/listtable.cpp:171 reports/pivottable.cpp:1571
+#, c-format
+msgid "All currencies converted to %1"
+msgstr "Totes les divises s'han convertit a %1"
+
+#: reports/listtable.cpp:172 reports/pivottable.cpp:1328
+msgid "All currencies converted to %1\n"
+msgstr "Totes les divises s'han convertit a %1\n"
+
+#: reports/listtable.cpp:176 reports/pivottable.cpp:1573
+msgid "All values shown in %1 unless otherwise noted"
+msgstr ""
+
+#: reports/listtable.cpp:177 reports/pivottable.cpp:1330
+msgid "All values shown in %1 unless otherwise noted\n"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:73 dialogs/kfindtransactiondlg.cpp:188
+#: dialogs/rc.cpp:53 dialogs/rc.cpp:63 dialogs/rc.cpp:208 dialogs/rc.cpp:805
+#: dialogs/settings/rc.cpp:111 dialogs/transactioneditor.cpp:844
+#: reports/listtable.cpp:196 views/khomeview.cpp:412 views/khomeview.cpp:485
+#: views/khomeview.cpp:519 views/rc.cpp:61 widgets/kmymoneypriceview.cpp:128
+#: widgets/rc.cpp:36 widgets/register.cpp:565 widgets/transaction.cpp:1027
+#: widgets/transaction.cpp:1484
+msgid "Date"
+msgstr "Data"
+
+#: reports/listtable.cpp:198
+msgid "Num"
+msgstr "Núm"
+
+#: dialogs/kfindtransactiondlg.cpp:204 dialogs/kmymoneysplittable.cpp:78
+#: dialogs/kmymoneysplittable.cpp:831 dialogs/rc.cpp:217
+#: dialogs/transactioneditor.cpp:831 dialogs/transactioneditor.cpp:1374
+#: dialogs/transactioneditor.cpp:1382 dialogs/transactioneditor.cpp:1396
+#: dialogs/transactioneditor.cpp:1449 dialogs/transactioneditor.cpp:1456
+#: dialogs/transactioneditor.cpp:1504 reports/listtable.cpp:200
+#: views/kcategoriesview.cpp:76 views/rc.cpp:62 widgets/rc.cpp:115
+#: widgets/register.cpp:62 widgets/transaction.cpp:848
+#: widgets/transaction.cpp:906
+msgid "Category"
+msgstr "Categoria"
+
+#: dialogs/kmymoneysplittable.cpp:79 dialogs/kmymoneysplittable.cpp:837
+#: reports/listtable.cpp:202 widgets/rc.cpp:101 widgets/transaction.cpp:1042
+#: widgets/transaction.cpp:1628
+msgid "Memo"
+msgstr "Descripció"
+
+#: reports/listtable.cpp:203
+msgid "Top Category"
+msgstr ""
+
+#: reports/listtable.cpp:204
+msgid "Category Type"
+msgstr ""
+
+#: dialogs/rc.cpp:229 dialogs/settings/rc.cpp:152 reports/listtable.cpp:207
+#: widgets/kmymoneycombo.cpp:346 widgets/rc.cpp:107
+msgid "Reconciled"
+msgstr "Conciliat"
+
+#: reports/listtable.cpp:208 widgets/rc.cpp:117
+msgid "Action"
+msgstr "Acció"
+
+#: dialogs/investactivities.cpp:199 dialogs/investactivities.cpp:287
+#: dialogs/investactivities.cpp:424 dialogs/investactivities.cpp:504
+#: dialogs/investactivities.cpp:544 dialogs/investtransactioneditor.cpp:241
+#: reports/listtable.cpp:209 widgets/rc.cpp:103 widgets/transaction.cpp:1513
+msgid "Shares"
+msgstr "Accions"
+
+#: dialogs/investtransactioneditor.cpp:248
+#: dialogs/investtransactioneditor.cpp:1067
+#: dialogs/investtransactioneditor.cpp:1068
+#: dialogs/investtransactioneditor.cpp:1072
+#: dialogs/kequitypriceupdatedlg.cpp:72 dialogs/rc.cpp:109 dialogs/rc.cpp:164
+#: dialogs/rc.cpp:251 dialogs/rc.cpp:756 dialogs/rc.cpp:827
+#: dialogs/settings/rc.cpp:117 reports/listtable.cpp:210
+#: reports/listtable.cpp:211 reports/pivottable.cpp:2441
+#: views/kinvestmentview.cpp:80 widgets/kmymoneypriceview.cpp:129
+#: widgets/rc.cpp:43 widgets/rc.cpp:105 widgets/register.cpp:573
+msgid "Price"
+msgstr "Preu"
+
+#: reports/listtable.cpp:212
+msgid "Net Value"
+msgstr ""
+
+#: reports/listtable.cpp:213
+msgid "Buys"
+msgstr ""
+
+#: reports/listtable.cpp:214
+msgid "Sells"
+msgstr ""
+
+#: reports/listtable.cpp:215
+msgid "Dividends Reinvested"
+msgstr ""
+
+#: reports/listtable.cpp:216
+msgid "Dividends Paid Out"
+msgstr ""
+
+#: reports/listtable.cpp:217
+msgid "Starting Balance"
+msgstr ""
+
+#: reports/listtable.cpp:218
+msgid "Ending Balance"
+msgstr ""
+
+#: reports/listtable.cpp:219
+msgid "Annualized Return"
+msgstr ""
+
+#: reports/listtable.cpp:220
+#, fuzzy
+msgid "Return On Investment"
+msgstr "Inversions"
+
+#: dialogs/rc.cpp:106 dialogs/rc.cpp:161 dialogs/rc.cpp:248 dialogs/rc.cpp:505
+#: dialogs/rc.cpp:570 dialogs/rc.cpp:667 dialogs/rc.cpp:753
+#: reports/listtable.cpp:223 widgets/register.cpp:570
+msgid "Payment"
+msgstr "Pagament"
+
+#: dialogs/rc.cpp:111 dialogs/rc.cpp:166 dialogs/rc.cpp:253 dialogs/rc.cpp:709
+#: dialogs/rc.cpp:758 reports/listtable.cpp:224 widgets/rc.cpp:119
+#: widgets/register.cpp:575
+msgid "Balance"
+msgstr "Saldo"
+
+#: reports/listtable.cpp:227 views/kscheduledview.cpp:74
+msgid "Next Due Date"
+msgstr "Proper venciment"
+
+#: reports/listtable.cpp:229 views/kscheduledview.cpp:76
+msgid "Payment Method"
+msgstr "Mètode de pagament"
+
+#: dialogs/rc.cpp:803 reports/listtable.cpp:231 widgets/rc.cpp:2
+msgid "Description"
+msgstr "Descripció"
+
+#: reports/listtable.cpp:232
+#, fuzzy
+msgid "Opening Date"
+msgstr "Saldos d'obertura"
+
+#: reports/listtable.cpp:234
+msgid "Balance Early Warning"
+msgstr ""
+
+#: reports/listtable.cpp:235
+#, fuzzy
+msgid "Balance Max Limit"
+msgstr "Saldo: "
+
+#: reports/listtable.cpp:236
+#, fuzzy
+msgid "Credit Early Warning"
+msgstr "Importa assentaments"
+
+#: reports/listtable.cpp:237
+#, fuzzy
+msgid "Credit Max Limit"
+msgstr "Targeta de crèdit"
+
+#: dialogs/rc.cpp:376 reports/listtable.cpp:238
+msgid "Tax"
+msgstr "Impost"
+
+#: reports/listtable.cpp:239
+#, fuzzy
+msgid "Preferred"
+msgstr "Compte preferit"
+
+#: reports/listtable.cpp:240
+#, fuzzy
+msgid "Loan Amount"
+msgstr "compte"
+
+#: dialogs/rc.cpp:511 reports/listtable.cpp:241
+msgid "Interest Rate"
+msgstr "Tipus d'interès"
+
+#: reports/listtable.cpp:242
+#, fuzzy
+msgid "Next Interest Change"
+msgstr "L'interès venç el:"
+
+#: reports/listtable.cpp:243
+#, fuzzy
+msgid "Periodic Payment"
+msgstr "Pagaments d'avui"
+
+#: reports/listtable.cpp:244
+#, fuzzy
+msgid "Final Payment"
+msgstr "Pagament final:"
+
+#: reports/listtable.cpp:245 views/khomeview.cpp:766 views/khomeview.cpp:1265
+#: views/khomeview.cpp:1273
+#, fuzzy
+msgid "Current Balance"
+msgstr "Saldo actual: "
+
+#: dialogs/investactivities.cpp:201 dialogs/investactivities.cpp:289
+#: dialogs/investactivities.cpp:368 dialogs/investactivities.cpp:426
+#: dialogs/rc.cpp:327 reports/listtable.cpp:360 reports/listtable.cpp:364
+#: reports/listtable.cpp:556 reports/listtable.cpp:558
+#: reports/pivottable.cpp:1343 reports/pivottable.cpp:1445
+#: reports/pivottable.cpp:1505 reports/pivottable.cpp:1598
+#: reports/pivottable.cpp:1768 reports/pivottable.cpp:1845
+#: reports/pivottable.cpp:2165 reports/pivottable.cpp:2167
+#: reports/pivottable.cpp:2187 reports/pivottable.cpp:2189
+#: reports/querytabletest.cpp:134 reports/querytabletest.cpp:135
+#: reports/querytabletest.cpp:136 reports/querytabletest.cpp:137
+#: reports/querytabletest.cpp:162 reports/querytabletest.cpp:163
+#: reports/querytabletest.cpp:164 reports/querytabletest.cpp:197
+#: reports/querytabletest.cpp:198 reports/querytabletest.cpp:224
+#: reports/querytabletest.cpp:250 reports/querytabletest.cpp:251
+#: reports/querytabletest.cpp:252 reports/querytabletest.cpp:275
+#: reports/querytabletest.cpp:276 reports/querytabletest.cpp:277
+#: reports/querytabletest.cpp:366 reports/querytabletest.cpp:422
+#: reports/querytabletest.cpp:423 views/kforecastview.cpp:568 views/rc.cpp:18
+#: widgets/kmymoneyaccounttreeforecast.cpp:139 widgets/transaction.cpp:1643
+msgid "Total"
+msgstr "Total"
+
+#: reports/listtable.cpp:444
+msgid "Initial Market Value"
+msgstr ""
+
+#: reports/listtable.cpp:445
+msgid "Ending Market Value"
+msgstr ""
+
+#: reports/listtable.cpp:448 reports/querytabletest.cpp:651
+#, fuzzy
+msgid "Opening Balance"
+msgstr "Saldos d'obertura"
+
+#: reports/listtable.cpp:449 reports/querytabletest.cpp:652
+#: reports/querytabletest.cpp:653
+#, fuzzy
+msgid "Closing Balance"
+msgstr "Saldo final:"
+
+#: reports/listtable.cpp:490 reports/listtable.cpp:491
+#, fuzzy
+msgid "Calculated"
+msgstr "calcula-ho"
+
+#: reports/listtable.cpp:572 reports/listtable.cpp:574
+#: reports/pivottable.cpp:1530 reports/pivottable.cpp:1886
+#: reports/querytabletest.cpp:138 reports/querytabletest.cpp:165
+#: reports/querytabletest.cpp:199 reports/querytabletest.cpp:225
+#: reports/querytabletest.cpp:253 reports/querytabletest.cpp:278
+#: reports/querytabletest.cpp:367 reports/querytabletest.cpp:402
+#: reports/querytabletest.cpp:424 reports/querytabletest.cpp:548
+#: reports/querytabletest.cpp:551 reports/querytabletest.cpp:586
+msgid "Grand Total"
+msgstr "Suma total"
+
+#: dialogs/rc.cpp:233 reports/pivottable.cpp:339 views/kscheduledview.cpp:174
+#: views/kscheduledview.cpp:433 views/kscheduledview.cpp:449
+#: widgets/kmymoneyscheduledcalendar.cpp:48
+msgid "Transfers"
+msgstr "Transferències"
+
+#: reports/pivottable.cpp:1951
+#, fuzzy
+msgid "Legend"
+msgstr "Llibres"
+
+#: reports/pivottable.cpp:2411 views/khomeview.cpp:1406
+#: views/khomeview.cpp:1443
+msgid "Actual"
+msgstr ""
+
+#: reports/pivottable.cpp:2421 views/khomeview.cpp:1409
+#: views/khomeview.cpp:1446
+#, fuzzy
+msgid "Difference"
+msgstr "Diferència:"
+
+#: reports/pivottable.cpp:2431
+#, fuzzy
+msgid "Moving Average"
+msgstr "Tots els estats"
+
+#: reports/pivottable.cpp:2436
+#, fuzzy
+msgid "Moving Average Price"
+msgstr "Tots els estats"
+
+#: reports/objectinfotable.cpp:214 reports/querytable.cpp:693
+#: reports/querytable.cpp:736 reports/querytable.cpp:1356
+#: reports/querytable.cpp:1375 views/kpayeesview.cpp:742
+#, c-format
+msgid "Transfer from %1"
+msgstr "Transfereix de %1"
+
+#: reports/objectinfotable.cpp:215 reports/querytable.cpp:694
+#: reports/querytable.cpp:735 reports/querytable.cpp:1355
+#: reports/querytable.cpp:1374 views/kpayeesview.cpp:740
+#, c-format
+msgid "Transfer to %1"
+msgstr "Transfereix a %1"
+
+#: reports/querytabletest.cpp:471 views/kreportsview.cpp:1144
+msgid "Investment Transactions"
+msgstr "Assentaments d'inversió"
+
+#: reports/querytabletest.cpp:472 reports/querytabletest.cpp:564
+msgid "Test Report"
+msgstr ""
+
+#: reports/querytabletest.cpp:547 reports/querytabletest.cpp:550
+msgid "Total Stock 1"
+msgstr ""
+
+#: reports/querytabletest.cpp:563 views/kreportsview.cpp:1174
+msgid "Investment Performance by Account"
+msgstr "Comportament de les inversions per compte"
+
+#: reports/querytable.cpp:431 reports/querytable.cpp:1200
+#, c-format
+msgid "Month of %1"
+msgstr ""
+
+#: reports/querytable.cpp:432 reports/querytable.cpp:1201
+#, c-format
+msgid "Week of %1"
+msgstr "Setmana del %1"
+
+#: reports/querytable.cpp:576 reports/querytable.cpp:739
+#: reports/querytable.cpp:858 reports/querytable.cpp:1325
+#: reports/querytable.cpp:1481
+#, fuzzy
+msgid "No Institution"
+msgstr "<Cap institució>"
+
+#: reports/querytable.cpp:580 reports/querytable.cpp:1329
+msgid "[Empty Payee]"
+msgstr ""
+
+#: reports/querytable.cpp:615 reports/querytable.cpp:1361
+#, fuzzy
+msgid "[Split Transaction]"
+msgstr "Transacció desglossada"
+
+#: reports/querytable.cpp:616 reports/querytable.cpp:617
+msgid "Split"
+msgstr "Desglossa"
+
+#: main.cpp:51
+msgid ""
+"\n"
+"KMyMoney, the Personal Finance Manager for KDE.\n"
+"\n"
+"Please consider contributing to this project with code and/or suggestions."
+msgstr ""
+"\n"
+"KMyMoney, el gestor de les finances personals per al KDE.\n"
+"\n"
+"Si us plau, considereu la possibilitat de contribuir a aquest projecte amb "
+"codi i/o suggerències."
+
+#: main.cpp:55
+msgid "language to be used"
+msgstr ""
+
+#: main.cpp:56
+msgid "don't open last used file"
+msgstr ""
+
+#: main.cpp:57
+msgid "enable performance timers"
+msgstr ""
+
+#: main.cpp:61
+msgid "turn on program traces"
+msgstr ""
+
+#: main.cpp:62
+msgid "dump the names of all defined KAction objects to stdout and quit"
+msgstr ""
+
+#: main.cpp:66
+msgid "file to open"
+msgstr ""
+
+#: main.cpp:92
+msgid "Memory leakage detection"
+msgstr "Detecció de pèrdues de memòria"
+
+#: main.cpp:96
+msgid "Compiled with the following settings:\n"
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:650 dialogs/ksplittransactiondlg.cpp:277
+#: main.cpp:98
+msgid "KMyMoney"
+msgstr ""
+
+#: main.cpp:104
+msgid "Initial idea, much initial source code, Project admin"
+msgstr ""
+
+#: main.cpp:105
+msgid "Core engine, Release Manager, Project admin"
+msgstr ""
+
+#: main.cpp:106
+msgid "Reporting logic, OFX Import"
+msgstr ""
+
+#: main.cpp:107
+msgid "Database backend, maintainer stable branch"
+msgstr ""
+
+#: main.cpp:108
+#, fuzzy
+msgid "Forecast, Reports"
+msgstr "Informes preferits"
+
+#: main.cpp:109
+msgid "Project Admin"
+msgstr ""
+
+#: main.cpp:110
+msgid "Developer"
+msgstr "Desenvolupador"
+
+#: main.cpp:111
+#, fuzzy
+msgid "Database backend"
+msgstr "Rang de dates"
+
+#: main.cpp:113
+msgid "Initial investment support"
+msgstr ""
+
+#: main.cpp:114
+msgid "Developer & Artist"
+msgstr "Desenvolupador i artista"
+
+#: main.cpp:115
+msgid "Icons & splash screen"
+msgstr ""
+
+#: main.cpp:116 main.cpp:117
+msgid "Patches"
+msgstr "Pedaços"
+
+#: main.cpp:136
+msgid ""
+"The monetary decimal symbol is not correctly set in the KDE Control Center's "
+"Country/Region & Language settings. Please set it to a reasonable value and "
+"start KMyMoney again."
+msgstr ""
+
+#: main.cpp:136
+msgid "Invalid settings"
+msgstr "Arranjaments invàlids"
+
+#: main.cpp:228
+msgid "Another instance of KMyMoney is already running. Do you want to quit?"
+msgstr ""
+
+#: main.cpp:289
+msgid "Uncaught error. Please report the details to the developers"
+msgstr ""
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Orestes Mas Casals"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "orestes@tsc.upc.edu"
+
+#: dialogs/kcsvprogressdlg.cpp:62 dialogs/kimportdlg.cpp:66 rc.cpp:1
+msgid "&Import"
+msgstr "&Importa"
+
+#: rc.cpp:2
+msgid "E&xport"
+msgstr "E&xporta"
+
+#: rc.cpp:3
+msgid "&Institution"
+msgstr "&Institució"
+
+#: rc.cpp:4
+msgid "&Account"
+msgstr "&Compte"
+
+#: rc.cpp:5
+#, fuzzy
+msgid "&Category"
+msgstr "Categoria"
+
+#: rc.cpp:6
+#, fuzzy
+msgid "&Transaction"
+msgstr "Assentaments"
+
+#: rc.cpp:7 rc.cpp:20
+#, fuzzy
+msgid "Mark transaction as..."
+msgstr "S'estan mesclant els assentaments ..."
+
+#: rc.cpp:8 rc.cpp:21
+#, fuzzy
+msgid "Mark transaction"
+msgstr " assentaments\n"
+
+#: rc.cpp:9
+#, fuzzy
+msgid "T&ools"
+msgstr "Total"
+
+#: rc.cpp:10
+msgid "Account options"
+msgstr ""
+
+#: rc.cpp:11
+#, fuzzy
+msgid "Category options"
+msgstr "Categories"
+
+#: rc.cpp:12
+#, fuzzy
+msgid "Institution options"
+msgstr "Opcions d'institució"
+
+#: rc.cpp:13
+#, fuzzy
+msgid "Payee options"
+msgstr "Opcions del dispositiu"
+
+#: rc.cpp:14
+#, fuzzy
+msgid "Budget options"
+msgstr "Opcions del dispositiu"
+
+#: rc.cpp:15
+#, fuzzy
+msgid "Investment options"
+msgstr "Assentaments d'inversió"
+
+#: rc.cpp:16
+#, fuzzy
+msgid "Scheduled transactions options"
+msgstr "Assentaments programats"
+
+#: rc.cpp:17
+#, fuzzy
+msgid "Transaction options"
+msgstr "Assentaments"
+
+#: rc.cpp:18
+#, fuzzy
+msgid "Move transaction to..."
+msgstr "S'estan mesclant els assentaments ..."
+
+#: rc.cpp:19
+#, fuzzy
+msgid "Select account"
+msgstr "Escolliu un compte:"
+
+#: rc.cpp:22
+#, fuzzy
+msgid "Currency options"
+msgstr "Divises"
+
+#: rc.cpp:24
+msgid "Always show a No. field in transaction form"
+msgstr "Mostra sempre un camp Núm. en el formulari d'assentament"
+
+#: rc.cpp:25
+msgid "Auto fill with previous transaction data"
+msgstr "Emplena automàticament amb les dades de l'assentament previ"
+
+#: rc.cpp:26
+msgid "Treat two transactions as identical, if amount differs less than"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:144 rc.cpp:27
+msgid "Auto increment check number"
+msgstr "Autoincrementa el número de xec"
+
+#: rc.cpp:28
+msgid "Autosave file periodically"
+msgstr ""
+
+#: rc.cpp:29
+msgid "Autosave interval in minutes"
+msgstr ""
+
+#: rc.cpp:30
+msgid "Check schedules upon startup"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:171 rc.cpp:31
+msgid "Enter transactions this number of days in advance"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:172 rc.cpp:32
+msgid "Number of days to preview schedules in ledger"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:143 rc.cpp:33
+msgid "Insert transaction type into No. field for new transactions"
+msgstr "Insereix el tipus de transacció en el camp Núm. dels assentaments nous"
+
+#: dialogs/settings/rc.cpp:145 rc.cpp:34
+msgid "Keep changes when selecting a different transaction/split"
+msgstr "Preserva els canvis en seleccionar un assentament/desglossat diferent"
+
+#: rc.cpp:35
+msgid "Using the Enter key moves between the fields"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:130 rc.cpp:36
+msgid "Use the ledger lens"
+msgstr "Usa la lupa del llibre"
+
+#: rc.cpp:37
+#, fuzzy
+msgid "Price Precision"
+msgstr "Històric de cotitzacions"
+
+#: dialogs/rc.cpp:65 rc.cpp:38
+msgid "Update price history"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:132 rc.cpp:39
+msgid "Show transaction form"
+msgstr "Mostra el formulari d'assentament"
+
+#: rc.cpp:40
+#, fuzzy
+msgid "Start with last selected view or homepage"
+msgstr "Mostra la pàgina principal en començar"
+
+#: rc.cpp:41
+msgid "Use GPG to encrypt data file"
+msgstr ""
+
+#: rc.cpp:42
+msgid "Also encrypt against recover key"
+msgstr ""
+
+#: rc.cpp:43
+#, fuzzy
+msgid "GPG User ID (deprecated)"
+msgstr "ID d'usuari"
+
+#: rc.cpp:44
+#, fuzzy
+msgid "GPG User ID"
+msgstr "ID d'usuari"
+
+#: rc.cpp:45
+msgid "Run in expert (accountant) mode"
+msgstr ""
+
+#: rc.cpp:46
+msgid "Show splash screen during startup"
+msgstr ""
+
+#: rc.cpp:47
+msgid "Synchronize account in ledger and investment view"
+msgstr ""
+
+#: rc.cpp:48
+msgid "Icon size for view selection"
+msgstr ""
+
+#: rc.cpp:49
+msgid "list of hidden views"
+msgstr ""
+
+#: rc.cpp:50
+msgid "Firsttime switch to start new user wizard"
+msgstr ""
+
+#: rc.cpp:51
+msgid "Show title bar on each view"
+msgstr ""
+
+#: rc.cpp:52
+msgid "Start string matches for e.g. payees at start of string"
+msgstr ""
+
+#: rc.cpp:53
+msgid "Order of items on homepage"
+msgstr ""
+
+#: rc.cpp:54
+msgid "Percentage of default font size used for home view HTML page"
+msgstr ""
+
+#: rc.cpp:55
+msgid "Remember (manually adjusted) font size in home view on program end."
+msgstr ""
+
+#: rc.cpp:56
+msgid "Show account limit information on the Homepage"
+msgstr ""
+
+#: rc.cpp:58
+#, fuzzy
+msgid "Hide closed accounts"
+msgstr "Comptes d'Actiu"
+
+#: rc.cpp:59
+msgid "Hide finished schedules"
+msgstr ""
+
+#: rc.cpp:61
+msgid "Show all register entries in full detail"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:129 rc.cpp:62
+#, fuzzy
+msgid "Show a grid in the register"
+msgstr "Mostra una graella en el llibre."
+
+#: rc.cpp:63
+msgid "Show fancy group markers"
+msgstr ""
+
+#: rc.cpp:64
+msgid "Show fancy markers for previous and current fiscal year"
+msgstr ""
+
+#: rc.cpp:65
+msgid "Starting month of the fiscal year"
+msgstr ""
+
+#: rc.cpp:66
+#, fuzzy
+msgid "Starting day of the fiscal year"
+msgstr "Data inicial de l'extracte"
+
+#: rc.cpp:67
+#, fuzzy
+msgid "Start date"
+msgstr "Data d'inici: "
+
+#: dialogs/settings/rc.cpp:9 rc.cpp:68
+msgid "Use system colors"
+msgstr ""
+
+#: rc.cpp:69
+msgid "List color"
+msgstr ""
+
+#: rc.cpp:70
+msgid "List background color"
+msgstr ""
+
+#: rc.cpp:71
+msgid "List grid color"
+msgstr ""
+
+#: rc.cpp:72
+msgid "Background color for imported transactions"
+msgstr ""
+
+#: rc.cpp:73
+msgid "Background color for matched transactions"
+msgstr ""
+
+#: rc.cpp:74
+msgid "List color for erronous transactions"
+msgstr ""
+
+#: rc.cpp:75
+msgid "List color for missing conversion rate"
+msgstr ""
+
+#: rc.cpp:76
+msgid "List color for negative values"
+msgstr ""
+
+#: rc.cpp:77
+msgid "Background color for group marker"
+msgstr ""
+
+#: rc.cpp:78
+msgid "Background color for required fields"
+msgstr ""
+
+#: rc.cpp:79
+msgid "Use system font"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:21 rc.cpp:80
+msgid "Cell font"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:22 rc.cpp:81
+msgid "Header font"
+msgstr ""
+
+#: rc.cpp:82 rc.cpp:83
+msgid "Sort order of register in normal view"
+msgstr ""
+
+#: rc.cpp:84
+msgid "Sort order of register in search dialog"
+msgstr ""
+
+#: rc.cpp:85
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation"
+msgstr ""
+
+#: rc.cpp:86
+#, fuzzy
+msgid "Number of days (plus/minus) to search for matching transactions"
+msgstr "Pren els criteris actuals i cerca assentaments coincidents."
+
+#: rc.cpp:87
+msgid "During import, ask for a new payee's default category"
+msgstr ""
+
+#: rc.cpp:88
+msgid "Method to calculate forecast"
+msgstr ""
+
+#: rc.cpp:89
+msgid "Days to forecast"
+msgstr ""
+
+#: rc.cpp:90
+msgid "Days of normal account cycle"
+msgstr ""
+
+#: rc.cpp:91
+msgid "Number of historic cycles to use in forecast"
+msgstr ""
+
+#: rc.cpp:92
+msgid "Day of month to start forecast"
+msgstr ""
+
+#: rc.cpp:93
+msgid "Method to calculate history-based forecast"
+msgstr ""
+
+#: rc.cpp:94
+msgid "Skip opening date when fetching transactions"
+msgstr ""
+
+#: rc.cpp:95
+msgid "Include future transaction when using Schedule Forecast"
+msgstr ""
+
+#: rc.cpp:96
+#, fuzzy
+msgid "Include scheduled transactions when using Schedule Forecast"
+msgstr "Assentaments programats"
+
+#: rc.cpp:97
+msgid "additional names for cash account"
+msgstr ""
+
+#: rc.cpp:98
+msgid "additional names for checking account"
+msgstr ""
+
+#: rc.cpp:99
+msgid "additional names for credit card account"
+msgstr ""
+
+#: rc.cpp:100
+msgid "additional names for asset account"
+msgstr ""
+
+#: rc.cpp:101
+msgid "additional names for opening balance payee"
+msgstr ""
+
+#: rc.cpp:102
+msgid "additional names for invoice accounts"
+msgstr ""
+
+#: rc.cpp:103 widgets/rc.cpp:161 widgets/rc.cpp:163
+msgid "..."
+msgstr "..."
+
+#: views/kcategoriesview.cpp:276
+#, fuzzy
+msgid "Profit: "
+msgstr "Benefici: %1"
+
+#: views/kcategoriesview.cpp:278
+#, fuzzy
+msgid "Loss: "
+msgstr "Pèrdua: %1"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:54
+#: dialogs/transactioneditor.cpp:605 views/kpayeesview.cpp:365
+#: widgets/kmymoneyonlinequoteconfig.cpp:54
+msgid "Accepts the entered data and stores it"
+msgstr "Accepta les dades introduïdes i les desa"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:55 views/kpayeesview.cpp:366
+#: widgets/kmymoneyonlinequoteconfig.cpp:55
+msgid "Use this to accept the modified data."
+msgstr ""
+
+#: views/kpayeesview.cpp:491
+msgid ""
+"A payee with the name '%1' already exists. It is not advisable to have "
+"multiple payees with the same identification name. Are you sure you would "
+"like to rename the payee?"
+msgstr ""
+
+#: views/kpayeesview.cpp:518 views/kpayeesview.cpp:869
+msgid "Unable to modify payee"
+msgstr ""
+
+#: views/kpayeesview.cpp:564
+#, fuzzy
+msgid "Do you want to save the changes for <b>%1</b>?"
+msgstr "Esteu segur que voleu esborrar la programació seleccionada?"
+
+#: views/kbudgetview.cpp:490 views/kpayeesview.cpp:565
+#, fuzzy
+msgid "Save changes"
+msgstr "Descarta els canvis"
+
+#: views/kgloballedgerview.cpp:737 views/kpayeesview.cpp:662
+#: views/kpayeesview.cpp:753
+#, c-format
+msgid "Balance: %1"
+msgstr "Saldo: %1"
+
+#: views/kpayeesview.cpp:725 views/kpayeesview.cpp:731
+#, c-format
+msgid "Amortization of %1"
+msgstr ""
+
+#: views/kpayeesview.cpp:727 views/kpayeesview.cpp:733
+#, c-format
+msgid "Payment to %1"
+msgstr ""
+
+#: views/kpayeesview.cpp:736
+#, c-format
+msgid "Loan payment from %1"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:123
+#: dialogs/kconfirmmanualenterdlg.cpp:133 views/kpayeesview.cpp:745
+#: widgets/kmymoneycategory.cpp:160 widgets/kmymoneycategory.cpp:166
+#: widgets/transaction.cpp:851 widgets/transaction.cpp:1397
+#: widgets/transaction.cpp:1411
+#, fuzzy
+msgid ""
+"_: Split transaction (category replacement)\n"
+"Split transaction"
+msgstr "Selecciona els assentaments sense beneficiaris"
+
+#: views/kreportsview.cpp:262
+msgid ""
+"There was an error creating your report: \"%1\".\n"
+"Please report this error to the developer's list: kmymoney2-developer@lists."
+"sourceforge.net"
+msgstr ""
+"S'ha produït un error en crear el vostre informe: \"%1\".\n"
+"Si us plau, comuniqueu l'error a la llista de desenvolupadors: kmymoney2-"
+"developer@lists.sourceforge.net"
+
+#: views/kreportsview.cpp:264
+msgid "Critical Error"
+msgstr "Error crític"
+
+#: views/kreportsview.cpp:268
+msgid "Unable to generate report"
+msgstr "No s'ha pogut generar l'informe"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:125 views/kreportsview.cpp:286
+#: views/rc.cpp:53 widgets/rc.cpp:146
+msgid "Chart"
+msgstr "Gràfic"
+
+#: views/kreportsview.cpp:287 widgets/rc.cpp:147
+msgid "Show the chart version of this report"
+msgstr ""
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:112 views/khomeview.cpp:900
+#: views/kreportsview.cpp:294 views/kreportsview.cpp:328
+msgid "Report"
+msgstr "Informe"
+
+#: views/kreportsview.cpp:295
+msgid "Show the report version of this chart"
+msgstr ""
+
+#: views/kmymoneyview.cpp:236 views/kreportsview.cpp:314
+#: views/kreportsview.cpp:326
+msgid "Reports"
+msgstr "Informes"
+
+#: views/khomeview.cpp:902 views/kreportsview.cpp:329 widgets/rc.cpp:56
+msgid "Comment"
+msgstr "Comentari"
+
+#: views/kreportsview.cpp:432
+#, fuzzy
+msgid "Charts"
+msgstr "Gràfic"
+
+#: views/khomeview.cpp:897 views/kreportsview.cpp:470
+msgid "Favorite Reports"
+msgstr "Informes preferits"
+
+#: views/kreportsview.cpp:486
+msgid "Old Customized Reports"
+msgstr "Informes personalitzats antics"
+
+#: views/kreportsview.cpp:579
+msgid "Include Stylesheet"
+msgstr ""
+
+#: views/kreportsview.cpp:585
+msgid ""
+"_: CSV (Filefilter)\n"
+"CSV files"
+msgstr ""
+
+#: views/kreportsview.cpp:586
+msgid ""
+"_: HTML (Filefilter)\n"
+"HTML files"
+msgstr ""
+
+#: views/kreportsview.cpp:591
+#, fuzzy
+msgid "Export as"
+msgstr "E&xporta"
+
+#: views/kreportsview.cpp:619 views/kreportsview.cpp:660
+#: views/kreportsview.cpp:942 views/kreportsview.cpp:950
+#: views/kreportsview.cpp:958 views/kreportsview.cpp:968
+#: views/kreportsview.cpp:980 views/kreportsview.cpp:998
+#: views/kreportsview.cpp:1006 views/kreportsview.cpp:1014
+#: views/kreportsview.cpp:1022 views/kreportsview.cpp:1034
+#: views/kreportsview.cpp:1046 views/kreportsview.cpp:1056
+#: views/kreportsview.cpp:1070 views/kreportsview.cpp:1079
+#: views/kreportsview.cpp:1087 views/kreportsview.cpp:1095
+#: views/kreportsview.cpp:1103 views/kreportsview.cpp:1111
+#: views/kreportsview.cpp:1120 views/kreportsview.cpp:1132
+#: views/kreportsview.cpp:1145 views/kreportsview.cpp:1155
+#: views/kreportsview.cpp:1165 views/kreportsview.cpp:1175
+#: views/kreportsview.cpp:1185 views/kreportsview.cpp:1195
+#: views/kreportsview.cpp:1208 views/kreportsview.cpp:1222
+#: views/kreportsview.cpp:1239 views/kreportsview.cpp:1257
+#: views/kreportsview.cpp:1273 views/kreportsview.cpp:1295
+#: views/kreportsview.cpp:1304 views/kreportsview.cpp:1313
+#: views/kreportsview.cpp:1322 views/kreportsview.cpp:1336
+#: views/kreportsview.cpp:1347 views/kreportsview.cpp:1362
+#: views/kreportsview.cpp:1372 views/kreportsview.cpp:1383
+#: views/kreportsview.cpp:1393 views/kreportsview.cpp:1404
+#: views/kreportsview.cpp:1423 views/kreportsview.cpp:1432
+#: views/kreportsview.cpp:1444 views/kreportsview.cpp:1463
+#: views/kreportsview.cpp:1472 views/kreportsview.cpp:1481
+#: views/kreportsview.cpp:1490
+msgid "Default Report"
+msgstr "Informe per omissió"
+
+#: views/kreportsview.cpp:621 views/kreportsview.cpp:661
+msgid "Custom Report"
+msgstr "Informe personalitzat"
+
+#: views/kreportsview.cpp:622
+msgid " (Customized)"
+msgstr " (Personalitzat)"
+
+#: views/kreportsview.cpp:690
+#, fuzzy
+msgid ""
+"Are you sure you want to delete report <b>%1</b>? There is no way to "
+"recover it!"
+msgstr "Esteu segur que voleu esborrar %1?.. No hi ha manera de recuperar-lo!"
+
+#: views/kreportsview.cpp:690 views/kreportsview.cpp:702
+msgid "Delete Report?"
+msgstr ""
+
+#: views/kreportsview.cpp:702
+#, fuzzy
+msgid "Sorry, <b>%1</b> is a default report. You may not delete it."
+msgstr "Perdoneu, %1 és un informe per omissió. No l'heu d'esborrar."
+
+#: views/kreportsview.cpp:882
+msgid "&Open"
+msgstr "&Obre"
+
+#: views/kreportsview.cpp:884
+msgid "&New report"
+msgstr ""
+
+#: views/kreportsview.cpp:934
+msgid "Income and Expenses"
+msgstr "Ingressos i despeses"
+
+#: views/kreportsview.cpp:941
+msgid "Income and Expenses This Month"
+msgstr "Ingressos i despeses d'aquest mes"
+
+#: views/kreportsview.cpp:949
+msgid "Income and Expenses This Year"
+msgstr "Ingressos i despeses d'aquest any"
+
+#: views/kreportsview.cpp:957
+#, fuzzy
+msgid "Income and Expenses By Year"
+msgstr "Ingressos i despeses d'aquest any"
+
+#: views/kreportsview.cpp:967
+#, fuzzy
+msgid "Income and Expenses Graph"
+msgstr "Ingressos i despeses"
+
+#: views/kreportsview.cpp:979
+#, fuzzy
+msgid "Income and Expenses Pie Chart"
+msgstr "Ingressos i despeses d'aquest any"
+
+#: views/khomeview.cpp:1361 views/kreportsview.cpp:990
+msgid "Net Worth"
+msgstr "Valor net"
+
+#: views/kreportsview.cpp:997
+msgid "Net Worth By Month"
+msgstr "Valor net per mes"
+
+#: views/kreportsview.cpp:1005
+msgid "Net Worth Today"
+msgstr "Valor net a dia d'avui"
+
+#: views/kreportsview.cpp:1013
+msgid "Net Worth By Year"
+msgstr "Valor net per any"
+
+#: views/kreportsview.cpp:1021
+msgid "7-day Cash Flow Forecast"
+msgstr ""
+
+#: views/kreportsview.cpp:1033
+#, fuzzy
+msgid "Net Worth Graph"
+msgstr "Valor net: "
+
+#: views/kreportsview.cpp:1045
+msgid "Account Balances by Institution"
+msgstr "Balanç comptable per institució"
+
+#: views/kreportsview.cpp:1055
+msgid "Account Balances by Type"
+msgstr "Balanç comptable per tipus"
+
+#: views/kreportsview.cpp:1069
+msgid "Transactions by Account"
+msgstr "Assentaments per compte"
+
+#: views/kreportsview.cpp:1078
+msgid "Transactions by Category"
+msgstr "Assentaments per categoria"
+
+#: views/kreportsview.cpp:1086
+msgid "Transactions by Payee"
+msgstr "Assentaments per beneficiari"
+
+#: views/kreportsview.cpp:1094
+msgid "Transactions by Month"
+msgstr "Assentaments per mes"
+
+#: views/kreportsview.cpp:1102
+msgid "Transactions by Week"
+msgstr "Assentaments per setmana"
+
+#: views/kreportsview.cpp:1110
+#, fuzzy
+msgid "Loan Transactions"
+msgstr "Assentaments d'impostos"
+
+#: views/kreportsview.cpp:1119
+#, fuzzy
+msgid "Transactions by Reconciliation Status"
+msgstr "Assentaments per compte"
+
+#: views/kreportsview.cpp:1125
+#, fuzzy
+msgid "Cash Flow"
+msgstr "Efectiu"
+
+#: views/kreportsview.cpp:1131
+#, fuzzy
+msgid "Cash Flow Transactions This Month"
+msgstr "Assentaments per mes"
+
+#: views/kmymoneyview.cpp:226 views/kmymoneyview.cpp:228
+#: views/kreportsview.cpp:1137
+msgid "Investments"
+msgstr "Inversions"
+
+#: views/kreportsview.cpp:1154
+msgid "Investment Holdings by Account"
+msgstr ""
+
+#: views/kreportsview.cpp:1164
+msgid "Investment Holdings by Type"
+msgstr ""
+
+#: views/kreportsview.cpp:1184
+msgid "Investment Performance by Type"
+msgstr "Comportament de les inversions per tipus"
+
+#: views/kreportsview.cpp:1194
+#, fuzzy
+msgid "Investment Holdings Pie"
+msgstr "Tractament de les inversions"
+
+#: views/kreportsview.cpp:1207
+#, fuzzy
+msgid "Investment Worth Graph"
+msgstr "Valor net: "
+
+#: views/kreportsview.cpp:1221
+#, fuzzy
+msgid "Investment Price Graph"
+msgstr "Valor net: "
+
+#: views/kreportsview.cpp:1238
+#, fuzzy
+msgid "Investment Moving Average Price Graph"
+msgstr "Tractament de les inversions"
+
+#: views/kreportsview.cpp:1256
+#, fuzzy
+msgid "Investment Moving Average"
+msgstr "Tractament de les inversions"
+
+#: views/kreportsview.cpp:1272
+msgid "Investment Moving Average vs Actual"
+msgstr ""
+
+#: views/kreportsview.cpp:1287
+msgid "Taxes"
+msgstr "Impostos"
+
+#: views/kreportsview.cpp:1294
+#, fuzzy
+msgid "Tax Transactions by Category"
+msgstr "Assentaments per categoria"
+
+#: views/kreportsview.cpp:1303
+#, fuzzy
+msgid "Tax Transactions by Payee"
+msgstr "Assentaments per beneficiari"
+
+#: views/kreportsview.cpp:1312
+#, fuzzy
+msgid "Tax Transactions by Category Last Fiscal Year"
+msgstr "Assentaments per categoria"
+
+#: views/kreportsview.cpp:1321
+#, fuzzy
+msgid "Tax Transactions by Payee Last Fiscal Year"
+msgstr "Assentaments per beneficiari"
+
+#: views/kreportsview.cpp:1328
+msgid "Budgeting"
+msgstr ""
+
+#: views/kreportsview.cpp:1335
+msgid "Budgeted vs. Actual This Year"
+msgstr ""
+
+#: views/kreportsview.cpp:1346
+msgid "Budgeted vs. Actual This Year (YTM)"
+msgstr ""
+
+#: views/khomeview.cpp:1383 views/kreportsview.cpp:1361
+msgid "Monthly Budgeted vs. Actual"
+msgstr ""
+
+#: views/kreportsview.cpp:1371
+msgid "Yearly Budgeted vs. Actual"
+msgstr ""
+
+#: views/kreportsview.cpp:1382
+#, fuzzy
+msgid "Monthly Budget"
+msgstr "Mensual"
+
+#: views/kreportsview.cpp:1392
+#, fuzzy
+msgid "Yearly Budget"
+msgstr "Anual"
+
+#: views/kreportsview.cpp:1403
+msgid "Yearly Budgeted vs Actual Graph"
+msgstr ""
+
+#: views/kreportsview.cpp:1422
+#, fuzzy
+msgid "Forecast By Month"
+msgstr "Mètode de pagament"
+
+#: views/kreportsview.cpp:1431
+#, fuzzy
+msgid "Forecast Next Quarter"
+msgstr "Proper venciment"
+
+#: views/kreportsview.cpp:1443
+#, fuzzy
+msgid "Net Worth Forecast Graph"
+msgstr "Valor net a dia d'avui"
+
+#: dialogs/rc.cpp:126 dialogs/rc.cpp:128 dialogs/rc.cpp:466
+#: views/kreportsview.cpp:1455
+msgid "General Information"
+msgstr "Informació general"
+
+#: views/kreportsview.cpp:1462
+#, fuzzy
+msgid "Schedule Information"
+msgstr "Assentaments programats"
+
+#: views/kreportsview.cpp:1471
+#, fuzzy
+msgid "Schedule Summary Information"
+msgstr "Assentaments programats"
+
+#: views/kreportsview.cpp:1480
+#, fuzzy
+msgid "Account Information"
+msgstr "Opcions del compte"
+
+#: views/kreportsview.cpp:1489
+#, fuzzy
+msgid "Loan Information"
+msgstr "Informació de pagament"
+
+#: dialogs/rc.cpp:323 views/kmymoneyview.cpp:148 views/kmymoneyview.cpp:150
+msgid "Institutions"
+msgstr "Institucions"
+
+#: dialogs/knewaccountdlg.cpp:98 views/kmymoneyview.cpp:162
+#: views/kmymoneyview.cpp:164 widgets/rc.cpp:4 widgets/rc.cpp:94
+msgid "Accounts"
+msgstr "Comptes"
+
+#: views/kmymoneyview.cpp:176
+msgid "Bills & Reminders"
+msgstr ""
+
+#: views/kmymoneyview.cpp:178
+#, fuzzy
+msgid "Scheduled transactions"
+msgstr "Assentaments programats"
+
+#: dialogs/knewaccountdlg.cpp:98 dialogs/rc.cpp:193 views/kmymoneyview.cpp:188
+#: views/kmymoneyview.cpp:190 widgets/rc.cpp:91
+msgid "Categories"
+msgstr "Categories"
+
+#: dialogs/kfindtransactiondlg.cpp:212 dialogs/rc.cpp:318
+#: views/kmymoneyview.cpp:199 views/kmymoneyview.cpp:201 widgets/rc.cpp:93
+msgid "Payees"
+msgstr "Beneficiaris"
+
+#: views/kgloballedgerview.cpp:149 views/kmymoneyview.cpp:211
+msgid "Ledgers"
+msgstr "Llibres"
+
+#: views/kmymoneyview.cpp:353
+msgid "Creating transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:367
+msgid "Modifying transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:382
+msgid "Duplicating transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:394
+#, fuzzy
+msgid "Edit the current selected transactions"
+msgstr "Amaga els assentaments conciliats"
+
+#: views/kmymoneyview.cpp:602
+msgid "<b>%1</b> is not a KMyMoney file."
+msgstr ""
+
+#: views/kmymoneyview.cpp:643
+msgid "GPG is not available for decryption of file <b>%1</b>"
+msgstr ""
+
+#: views/kmymoneyview.cpp:721
+msgid ""
+"File <b>%1</b> contains the old binary format used by KMyMoney. Please use "
+"an older version of KMyMoney (0.8.x) that still supports this format to "
+"convert it to the new XML based format."
+msgstr ""
+
+#: views/kmymoneyview.cpp:723
+#, fuzzy
+msgid "File <b>%1</b> contains an unknown file format!"
+msgstr "El fitxer '%1' té un format desconegut!"
+
+#: views/kmymoneyview.cpp:728
+msgid "Cannot read from file <b>%1</b>!"
+msgstr ""
+
+#: views/kmymoneyview.cpp:732
+msgid "Cannot load file <b>%1</b>. Reason: %2"
+msgstr ""
+
+#: views/kmymoneyview.cpp:742 views/kmymoneyview.cpp:748
+#, fuzzy
+msgid "File <b>%1</b> not found!"
+msgstr "No s'ha trobat el fitxer"
+
+#: views/kmymoneyview.cpp:812
+msgid "Can't open database %1\n"
+msgstr ""
+
+#: views/kmymoneyview.cpp:844
+msgid "An unrecoverable error occurred while reading the database"
+msgstr ""
+
+#: views/kmymoneyview.cpp:846 views/kmymoneyview.cpp:1208
+msgid "Database malfunction"
+msgstr ""
+
+#: views/kmymoneyview.cpp:938
+msgid "Unknown fix level in input file"
+msgstr ""
+
+#: views/kmymoneyview.cpp:984
+msgid ""
+"GPG does not seem to be installed on your system. Please make sure, that GPG "
+"can be found using the standard search path. This time, encryption is "
+"disabled."
+msgstr ""
+
+#: views/kmymoneyview.cpp:984
+msgid "GPG not found"
+msgstr ""
+
+#: views/kmymoneyview.cpp:991
+msgid ""
+"You have selected to encrypt your data also with the KMyMoney recover key, "
+"but the key with id</p><p><center><b>%1</b></center></p>has not been found "
+"in your keyring at this time. Please make sure to import this key into your "
+"keyring. You can find it on the <a href=\"http://kmymoney2.sourceforge.net/"
+"\">KMyMoney web-site</a>. This time your data will not be encrypted with the "
+"KMyMoney recover key."
+msgstr ""
+
+#: views/kmymoneyview.cpp:991 views/kmymoneyview.cpp:1000
+msgid "GPG-Key not found"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1000
+msgid ""
+"You have specified to encrypt your data for the user-id</p><p><center><b>%1</"
+"b>.</center></p>Unfortunately, a valid key for this user-id was not found in "
+"your keyring. Please make sure to import a valid key for this user-id. This "
+"time, encryption is disabled."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1006
+msgid ""
+"You have configured to save your data in encrypted form using GPG. Please be "
+"aware, that this is a brand new feature which is yet untested. Make sure, "
+"you have the necessary understanding that you might loose all your data if "
+"you store it encrypted and cannot decrypt it later on! If unsure, answer "
+"<b>No</b>."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1008
+msgid "Store GPG encrypted"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1038 views/kmymoneyview.cpp:1052
+msgid "Unable to open file '%1' for writing."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1065 views/kmymoneyview.cpp:1074
+msgid "Failure while writing to '%1'"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1086 views/kmymoneyview.cpp:1181
+msgid "Tried to access a file when it's not open"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1092
+msgid ""
+"Since this version of KMyMoney only writes data files in its new format, "
+"files written with this version cannot be read by KMyMoney version 0.4. If "
+"you still want to use older versions of KMyMoney with your data files, "
+"please make sure you keep a backup-file of your finance data. If you want to "
+"abort this operation, please press Cancel now"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1122
+msgid "Malformed URL '%1'"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1192
+msgid ""
+"Database contains data which must be removed before using SaveAs.\n"
+"Do you wish to continue?"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1205
+msgid ""
+"An unrecoverable error occurred while writing to the database.\n"
+"It may well be corrupt."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1215
+msgid ""
+"Can't open or create database %1\n"
+"Retry SaveAsDatabase and click Help for further info"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1354
+msgid "Afghanistan Afghani"
+msgstr "Afghani afganès"
+
+#: views/kmymoneyview.cpp:1355
+msgid "Albanian Lek"
+msgstr "Lek albanès"
+
+#: views/kmymoneyview.cpp:1356
+msgid "Netherland Antillian Guilder"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1357
+msgid "Algerian Dinar"
+msgstr "Dínar algerià"
+
+#: views/kmymoneyview.cpp:1358
+msgid "Andorran Franc"
+msgstr "Franc andorrà"
+
+#: views/kmymoneyview.cpp:1359
+msgid "Andorran Peseta"
+msgstr "Pesseta andorrana"
+
+#: views/kmymoneyview.cpp:1360
+msgid "Angolan New Kwanza"
+msgstr "Nou Kwanza d'Angola"
+
+#: views/kmymoneyview.cpp:1361
+msgid "Argentine Peso"
+msgstr "Pes Argentí"
+
+#: views/kmymoneyview.cpp:1362
+msgid "Aruban Florin"
+msgstr "Florí d'Aruba"
+
+#: views/kmymoneyview.cpp:1363
+msgid "Australian Dollar"
+msgstr "Dòlar australià"
+
+#: views/kmymoneyview.cpp:1364
+msgid "Azerbaijani Manat"
+msgstr "Manat d'Azerbaidjan"
+
+#: views/kmymoneyview.cpp:1365
+msgid "Bahamian Dollar"
+msgstr "Dòlar de les Bahames"
+
+#: views/kmymoneyview.cpp:1366
+msgid "Bahraini Dinar"
+msgstr "Dínar de Bahrain"
+
+#: views/kmymoneyview.cpp:1367
+msgid "Bangladeshi Taka"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1368
+msgid "Barbados Dollar"
+msgstr "Dòlar de Barbados"
+
+#: views/kmymoneyview.cpp:1369
+msgid "Belarussian Ruble"
+msgstr "Ruble bielorús"
+
+#: views/kmymoneyview.cpp:1370
+msgid "Belize Dollar"
+msgstr "Dòlar de Belize"
+
+#: views/kmymoneyview.cpp:1371
+msgid "Bermudian Dollar"
+msgstr "Dòlar de les Bermudes"
+
+#: views/kmymoneyview.cpp:1372
+msgid "Bhutan Ngultrum"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1373
+msgid "Bolivian Boliviano"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1374
+msgid "Bosnian Convertible Mark"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1375
+msgid "Botswana Pula"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1376
+msgid "Brazilian Real"
+msgstr "Real brasiler"
+
+#: views/kmymoneyview.cpp:1377
+msgid "British Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1378
+msgid "Brunei Dollar"
+msgstr "Dòlar de Brunei"
+
+#: views/kmymoneyview.cpp:1379
+msgid "Bulgarian Lev"
+msgstr "Lev búlgar"
+
+#: views/kmymoneyview.cpp:1380
+msgid "Burundi Franc"
+msgstr "Franc de Burundi"
+
+#: views/kmymoneyview.cpp:1381
+msgid "CFA Franc BEAC"
+msgstr "Franc CFA de la BEAC"
+
+#: views/kmymoneyview.cpp:1382
+msgid "CFA Franc BCEAO"
+msgstr "Franc CFA de la BCEAO"
+
+#: views/kmymoneyview.cpp:1383
+msgid "CFP Franc Pacifique"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1384
+msgid "Cambodia Riel"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1385
+msgid "Canadian Dollar"
+msgstr "Dòlar canadenc"
+
+#: views/kmymoneyview.cpp:1386
+msgid "Cape Verde Escudo"
+msgstr "Escut de Cap Verd"
+
+#: views/kmymoneyview.cpp:1387
+msgid "Cayman Islands Dollar"
+msgstr "Dòlar de les Illes Caimà"
+
+#: views/kmymoneyview.cpp:1388
+msgid "Chilean Peso"
+msgstr "Pes xilè"
+
+#: views/kmymoneyview.cpp:1389
+msgid "Chinese Yuan Renminbi"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1390
+msgid "Colombian Peso"
+msgstr "Pes colombià"
+
+#: views/kmymoneyview.cpp:1391
+msgid "Comoros Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1392
+msgid "Costa Rican Colon"
+msgstr "Colón de Costa Rica"
+
+#: views/kmymoneyview.cpp:1393
+msgid "Croatian Kuna"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1394
+msgid "Cuban Peso"
+msgstr "Pes cubà"
+
+#: views/kmymoneyview.cpp:1395
+msgid "Czech Koruna"
+msgstr "Corona txeca"
+
+#: views/kmymoneyview.cpp:1396
+msgid "Danish Krone"
+msgstr "Corona danesa"
+
+#: views/kmymoneyview.cpp:1397
+msgid "Djibouti Franc"
+msgstr "Franc de Djibouti"
+
+#: views/kmymoneyview.cpp:1398
+msgid "Dominican Peso"
+msgstr "Pes dominicà"
+
+#: views/kmymoneyview.cpp:1399
+msgid "East Caribbean Dollar"
+msgstr "Dòlar del Carib Est"
+
+#: views/kmymoneyview.cpp:1400
+msgid "Egyptian Pound"
+msgstr "Lliura egípcia"
+
+#: views/kmymoneyview.cpp:1401
+msgid "El Salvador Colon"
+msgstr "Colón d'El Salvador"
+
+#: views/kmymoneyview.cpp:1402
+msgid "Eritrean Nakfa"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1403
+msgid "Estonian Kroon"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1404
+msgid "Ethiopian Birr"
+msgstr "Birr etíop"
+
+#: views/kmymoneyview.cpp:1405
+msgid "Euro"
+msgstr "Euro"
+
+#: views/kmymoneyview.cpp:1406
+msgid "Falkland Islands Pound"
+msgstr "Lliura de les Illes Malvines"
+
+#: views/kmymoneyview.cpp:1407
+msgid "Fiji Dollar"
+msgstr "Dòlar de Fidji"
+
+#: views/kmymoneyview.cpp:1408
+msgid "Gambian Dalasi"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1409
+msgid "Georgian Lari"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1410
+msgid "Ghanaian Cedi"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1411
+msgid "Gibraltar Pound"
+msgstr "Lliura gibraltarenca"
+
+#: views/kmymoneyview.cpp:1412
+msgid "Guatemalan Quetzal"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1413
+msgid "Guinea-Bissau Peso"
+msgstr "Pes de Guinea-Bissau"
+
+#: views/kmymoneyview.cpp:1414
+msgid "Guyanan Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1415
+msgid "Haitian Gourde"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1416
+msgid "Honduran Lempira"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1417
+msgid "Hong Kong Dollar"
+msgstr "Dòlar de Hong Kong"
+
+#: views/kmymoneyview.cpp:1418
+msgid "Hungarian Forint"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1419
+msgid "Iceland Krona"
+msgstr "Corona islandesa"
+
+#: views/kmymoneyview.cpp:1420
+msgid "Indian Rupee"
+msgstr "Rúpia índia"
+
+#: views/kmymoneyview.cpp:1421
+msgid "Indonesian Rupiah"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1422
+msgid "Iranian Rial"
+msgstr "Rial iraní"
+
+#: views/kmymoneyview.cpp:1423
+msgid "Iraqi Dinar"
+msgstr "Dínar iraquià"
+
+#: views/kmymoneyview.cpp:1424
+msgid "Israeli New Shekel"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1425
+msgid "Jamaican Dollar"
+msgstr "Dòlar de Jamaica"
+
+#: views/kmymoneyview.cpp:1426
+msgid "Japanese Yen"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1427
+msgid "Jordanian Dinar"
+msgstr "Dínar de Jordània"
+
+#: views/kmymoneyview.cpp:1428
+msgid "Kazakhstan Tenge"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1429
+msgid "Kenyan Shilling"
+msgstr "Xíling kenià"
+
+#: views/kmymoneyview.cpp:1430
+msgid "Kuwaiti Dinar"
+msgstr "Dínar kuwaití"
+
+#: views/kmymoneyview.cpp:1431
+msgid "Kyrgyzstan Som"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1432
+msgid "Laos Kip"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1433
+msgid "Latvian Lats"
+msgstr "Lats letó"
+
+#: views/kmymoneyview.cpp:1434
+msgid "Lebanese Pound"
+msgstr "Lliura libanesa"
+
+#: views/kmymoneyview.cpp:1435
+msgid "Lesotho Loti"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1436
+msgid "Liberian Dollar"
+msgstr "Dòlar de Libèria"
+
+#: views/kmymoneyview.cpp:1437
+msgid "Libyan Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1438
+msgid "Lithuanian Litas"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1439
+msgid "Macau Pataca"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1440
+msgid "Macedonian Denar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1441
+msgid "Malagasy Franc"
+msgstr "Franc malgatxe"
+
+#: views/kmymoneyview.cpp:1442
+msgid "Malawi Kwacha"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1443
+msgid "Malaysian Ringgit"
+msgstr "Ringgit de Malàisia"
+
+#: views/kmymoneyview.cpp:1444
+msgid "Maldive Rufiyaa"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1445
+msgid "Mali Republic Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1446
+msgid "Mauritanian Ouguiya"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1447
+msgid "Mauritius Rupee"
+msgstr "Rúpia de Maurici"
+
+#: views/kmymoneyview.cpp:1448
+msgid "Mexican Peso"
+msgstr "Pes mexicà"
+
+#: views/kmymoneyview.cpp:1449
+#, fuzzy
+msgid "Moldavian Leu"
+msgstr "Lek albanès"
+
+#: views/kmymoneyview.cpp:1450
+msgid "Mongolian Tugrik"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1451
+msgid "Moroccan Dirham"
+msgstr "Dirham marroquí"
+
+#: views/kmymoneyview.cpp:1452
+msgid "Mozambique Metical"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1453
+msgid "Myanmar Kyat"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1454
+msgid "Namibian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1455
+msgid "Nepalese Rupee"
+msgstr "Rúpia nepalesa"
+
+#: views/kmymoneyview.cpp:1456
+msgid "New Zealand Dollar"
+msgstr "Dòlar de Nova Zelanda"
+
+#: views/kmymoneyview.cpp:1457
+msgid "Nicaraguan Cordoba Oro"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1458
+msgid "Nigerian Naira"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1459
+msgid "North Korean Won"
+msgstr "Won nordcoreà"
+
+#: views/kmymoneyview.cpp:1460
+msgid "Norwegian Kroner"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1461
+msgid "Omani Rial"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1462
+msgid "Pakistan Rupee"
+msgstr "Rúpia pakistanesa"
+
+#: views/kmymoneyview.cpp:1463
+msgid "Panamanian Balboa"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1464
+msgid "Papua New Guinea Kina"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1465
+msgid "Paraguay Guarani"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1466
+msgid "Peruvian Nuevo Sol"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1467
+msgid "Philippine Peso"
+msgstr "Pes filipí"
+
+#: views/kmymoneyview.cpp:1468
+msgid "Polish Zloty"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1469
+msgid "Qatari Rial"
+msgstr "Rial de Qatar"
+
+#: views/kmymoneyview.cpp:1470
+msgid "Romanian Leu (new)"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1471
+msgid "Russian Ruble"
+msgstr "Ruble rus"
+
+#: views/kmymoneyview.cpp:1472
+msgid "Rwanda Franc"
+msgstr "Franc de Ruanda"
+
+#: views/kmymoneyview.cpp:1473
+msgid "Samoan Tala"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1474
+msgid "Sao Tome and Principe Dobra"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1475
+msgid "Saudi Riyal"
+msgstr "Rial saudí"
+
+#: views/kmymoneyview.cpp:1476
+msgid "Seychelles Rupee"
+msgstr "Rúpia de les Seychelles"
+
+#: views/kmymoneyview.cpp:1477
+msgid "Sierra Leone Leone"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1478
+msgid "Singapore Dollar"
+msgstr "Dòlar de Singapur"
+
+#: views/kmymoneyview.cpp:1481
+msgid "Solomon Islands Dollar"
+msgstr "Dòlar de les Illes Salomó"
+
+#: views/kmymoneyview.cpp:1482
+msgid "Somali Shilling"
+msgstr "Xíling somalí"
+
+#: views/kmymoneyview.cpp:1483
+msgid "South African Rand"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1484
+msgid "South Korean Won"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1485
+msgid "Sri Lanka Rupee"
+msgstr "Rúpia d'Sri Lanka"
+
+#: views/kmymoneyview.cpp:1486
+msgid "St. Helena Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1487
+msgid "Sudanese Dinar"
+msgstr "Dínar de Sudan"
+
+#: views/kmymoneyview.cpp:1488
+msgid "Suriname Guilder"
+msgstr "Guilder de Surinam"
+
+#: views/kmymoneyview.cpp:1489
+msgid "Swaziland Lilangeni"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1490
+msgid "Swedish Krona"
+msgstr "Corona sueca"
+
+#: views/kmymoneyview.cpp:1491
+msgid "Swiss Franc"
+msgstr "Franc suís"
+
+#: views/kmymoneyview.cpp:1492
+msgid "Syrian Pound"
+msgstr "Lliura de Síria"
+
+#: views/kmymoneyview.cpp:1493
+msgid "Taiwan Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1494
+msgid "Tajikistan Somani"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1495
+msgid "Tanzanian Shilling"
+msgstr "Xíling tanzà"
+
+#: views/kmymoneyview.cpp:1496
+msgid "Thai Baht"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1497
+msgid "Tongan Pa'anga"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1498
+msgid "Trinidad and Tobago Dollar"
+msgstr "Dòlar de Trinidad i Tobago"
+
+#: views/kmymoneyview.cpp:1499
+msgid "Tunisian Dinar"
+msgstr "Dínar tunisià"
+
+#: views/kmymoneyview.cpp:1500
+msgid "Turkish Lira (new)"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1501
+msgid "Turkmenistan Manat"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1502
+msgid "US Dollar"
+msgstr "Dòlar dels EUA"
+
+#: views/kmymoneyview.cpp:1503
+msgid "Uganda Shilling"
+msgstr "Xíling d'Uganda"
+
+#: views/kmymoneyview.cpp:1504
+msgid "Ukraine Hryvnia"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1505
+msgid "United Arab Emirates Dirham"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1506
+msgid "Uruguayan Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1507
+msgid "Uzbekistani Sum"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1508
+msgid "Vanuatu Vatu"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1509
+msgid "Venezuelan Bolivar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1510
+msgid "Vietnamese Dong"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1511
+msgid "Yugoslav Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1512
+msgid "Zambian Kwacha"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1513
+msgid "Zimbabwe Dollar"
+msgstr "Dòlar de Zimbabwe"
+
+#: views/kmymoneyview.cpp:1515
+msgid "Gold"
+msgstr "Or"
+
+#: views/kmymoneyview.cpp:1516
+msgid "Palladium"
+msgstr "Pal·ladi"
+
+#: views/kmymoneyview.cpp:1517
+msgid "Platinum"
+msgstr "Platí"
+
+#: views/kmymoneyview.cpp:1518
+msgid "Silver"
+msgstr "Argent"
+
+#: views/kmymoneyview.cpp:1551
+msgid "Austrian Schilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1552
+msgid "German Mark"
+msgstr "Marc alemany"
+
+#: views/kmymoneyview.cpp:1553
+msgid "French Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1554
+msgid "Italian Lira"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1555
+msgid "Spanish Peseta"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1556
+msgid "Dutch Guilder"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1557
+msgid "Belgian Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1558
+msgid "Luxembourg Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1559
+msgid "Portuguese Escudo"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1560
+msgid "Irish Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1561
+msgid "Finnish Markka"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1562
+msgid "Greek Drachma"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1564
+msgid "Romanian Leu"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1566
+msgid "Russian Ruble (old)"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1568
+msgid "Slovenian Tolar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1571
+msgid "Turkish Lira"
+msgstr "Lira turca"
+
+#: views/kmymoneyview.cpp:1574
+msgid "Maltese Lira"
+msgstr "Lira maltesa"
+
+#: views/kmymoneyview.cpp:1575
+msgid "Cyprus Pound"
+msgstr "Lliura xipriota"
+
+#: views/kmymoneyview.cpp:1578
+msgid "Slovak Koruna"
+msgstr "Corona eslovaca"
+
+#: views/kmymoneyview.cpp:1888
+msgid ""
+"The account \"%1\" was previously created as loan account but some "
+"information is missing. The new loan wizard will be started to collect all "
+"relevant information. Please use a KMyMoney version >= 0.8.7 and < 0.9 to "
+"correct the problem."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1892
+msgid "Account problem"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1941
+msgid "Unable to add schedule: "
+msgstr ""
+
+#: views/kmymoneyview.cpp:1970
+msgid "Fix transactions"
+msgstr "Esmena assentaments"
+
+#: views/kaccountsview.cpp:522 views/kinstitutionsview.cpp:300
+msgid "Net Worth: "
+msgstr "Valor net: "
+
+#: dialogs/rc.cpp:108 dialogs/rc.cpp:163 dialogs/rc.cpp:250 dialogs/rc.cpp:755
+#: dialogs/rc.cpp:830 views/kinvestmentview.cpp:77 widgets/register.cpp:572
+msgid "Quantity"
+msgstr "Quantitat"
+
+#: views/kscheduledlistitem.cpp:137
+msgid "Finished"
+msgstr "Ha finalitzat"
+
+#: views/kbudgetview.cpp:109
+#, fuzzy
+msgid "Creates a new budget"
+msgstr "Crea una nova categoria"
+
+#: views/kbudgetview.cpp:110
+#, fuzzy
+msgid "Use this to create a new empty budget."
+msgstr "Useu això per crear una nova entrada per les cotitzacions en línia"
+
+#: views/kbudgetview.cpp:116
+#, fuzzy
+msgid "Rename the current selected budget"
+msgstr "Esborra el perfil seleccionat"
+
+#: views/kbudgetview.cpp:117
+#, fuzzy
+msgid "Use this to start renaming the selected budget."
+msgstr "Useu aquest per esborrar el perfil seleccionat"
+
+#: views/kbudgetview.cpp:123
+#, fuzzy
+msgid "Delete the current selected budget"
+msgstr "Esborra el perfil seleccionat"
+
+#: views/kbudgetview.cpp:124
+#, fuzzy
+msgid "Use this to delete the selected budget."
+msgstr "Useu aquest per esborrar el perfil seleccionat"
+
+#: views/kbudgetview.cpp:130
+#, fuzzy
+msgid "Accepts the entered values and stores the budget"
+msgstr "Accepta les dades introduïdes i les desa"
+
+#: views/kbudgetview.cpp:131
+#, fuzzy
+msgid "Use this to store the modified data."
+msgstr "Useu això per acceptar les dades."
+
+#: views/kbudgetview.cpp:137
+msgid "Revert budget to last saved state"
+msgstr ""
+
+#: views/kbudgetview.cpp:138
+#, fuzzy
+msgid "Use this to discard the modified data."
+msgstr "Useu això per acceptar les dades."
+
+#: views/kbudgetview.cpp:489
+#, fuzzy
+msgid "Do you want to save the changes for <b>%1</b>"
+msgstr "Esteu segur que voleu esborrar la programació seleccionada?"
+
+#: views/kbudgetview.cpp:610
+msgid ""
+"A budget with the name '%1' already exists. It is not advisable to have "
+"multiple budgets with the same identification name. Are you sure you would "
+"like to rename the budget?"
+msgstr ""
+
+#: views/kbudgetview.cpp:635 views/kbudgetview.cpp:750
+#, fuzzy
+msgid "Unable to modify budget"
+msgstr "No s'ha pogut modificar la programació: "
+
+#: views/kbudgetview.cpp:736
+#, fuzzy
+msgid "Unable to reset budget"
+msgstr "No s'ha pogut modificar la programació: "
+
+#: views/rc.cpp:1
+msgid "List"
+msgstr "Llista"
+
+#: views/rc.cpp:2 views/rc.cpp:20
+msgid "Collapse all accounts in the list"
+msgstr ""
+
+#: views/rc.cpp:3 views/rc.cpp:21
+msgid "Expand all accounts in the list"
+msgstr ""
+
+#: views/rc.cpp:4
+msgid "Icons"
+msgstr "Icones"
+
+#: views/rc.cpp:5 views/rc.cpp:22
+msgid "Note: Unused categories are not shown as selected by settings."
+msgstr ""
+
+#: views/rc.cpp:6 views/rc.cpp:23 views/rc.cpp:54
+msgid "Total Profits:"
+msgstr ""
+
+#: views/rc.cpp:7
+msgid "Your budgets"
+msgstr ""
+
+#: dialogs/rc.cpp:340 dialogs/rc.cpp:841 dialogs/settings/rc.cpp:124
+#: views/rc.cpp:8 widgets/rc.cpp:48 widgets/rc.cpp:150
+msgid "New"
+msgstr "Nou"
+
+#: views/rc.cpp:9
+#, fuzzy
+msgid "Ren"
+msgstr "&Executa"
+
+#: views/rc.cpp:10
+#, fuzzy
+msgid "Del"
+msgstr "Detalls"
+
+#: views/rc.cpp:11
+#, fuzzy
+msgid "Res"
+msgstr "Inicialitza"
+
+#: views/rc.cpp:12
+#, fuzzy
+msgid "Upd"
+msgstr "&Amunt"
+
+#: views/rc.cpp:15
+#, fuzzy
+msgid "Hide unused budget categories"
+msgstr "Categories de Despeses"
+
+#: views/rc.cpp:16
+#, fuzzy
+msgid "Assignments"
+msgstr "Actiu"
+
+#: views/rc.cpp:19
+#, fuzzy
+msgid "Include subaccounts"
+msgstr "Inclou en els informes d'impostos"
+
+#: dialogs/settings/rc.cpp:23 views/rc.cpp:24
+#, fuzzy
+msgid "Forecast Settings"
+msgstr "Arranjaments de les fonts"
+
+#: views/rc.cpp:25
+#, fuzzy
+msgid "Days to Forecast:"
+msgstr "Nombre d'assentaments que manquen:"
+
+#: views/rc.cpp:26
+msgid "Days of Accounts Cycle:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:25 views/rc.cpp:27
+msgid "Day of Month to start Forecast:"
+msgstr ""
+
+#: views/rc.cpp:28
+msgid "Historic Cycles:"
+msgstr ""
+
+#: views/rc.cpp:29
+#, fuzzy
+msgid "Chart Detail:"
+msgstr "Gràfic"
+
+#: views/rc.cpp:30 widgets/kmymoneyaccountselector.cpp:64 widgets/rc.cpp:65
+msgid "All"
+msgstr "Tots"
+
+#: views/rc.cpp:31 widgets/rc.cpp:66
+msgid "Top-Level"
+msgstr ""
+
+#: views/rc.cpp:32 widgets/rc.cpp:67
+msgid "Groups"
+msgstr ""
+
+#: views/rc.cpp:33 widgets/rc.cpp:68
+#, fuzzy
+msgid "Totals"
+msgstr "Total"
+
+#: views/rc.cpp:34
+msgid "<p>Choose what level of detail to show on the chart.</p>"
+msgstr ""
+
+#: views/rc.cpp:35
+#, fuzzy
+msgid "Current Forecast Method:"
+msgstr "Mètode de pagament"
+
+#: views/rc.cpp:36
+#, fuzzy
+msgid "method"
+msgstr "Mètode:"
+
+#: dialogs/settings/rc.cpp:32 views/rc.cpp:37
+#, fuzzy
+msgid "History Forecast Method"
+msgstr "Mètode de pagament"
+
+#: dialogs/settings/rc.cpp:33 views/rc.cpp:38
+msgid "Simple Moving Average"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:34 views/rc.cpp:39
+msgid "Weighted Moving Average"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:35 views/rc.cpp:40
+msgid "Linear Regression"
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:315 dialogs/rc.cpp:628 dialogs/rc.cpp:647
+#: views/rc.cpp:43
+msgid "Summary"
+msgstr "Resum"
+
+#: views/rc.cpp:45
+#, fuzzy
+msgid "0 days"
+msgstr "Darrers 30 dies"
+
+#: views/rc.cpp:46
+#, fuzzy
+msgid "30 days"
+msgstr "Darrers 30 dies"
+
+#: views/rc.cpp:47
+#, fuzzy
+msgid "60 days"
+msgstr "Darrers 30 dies"
+
+#: views/rc.cpp:48
+#, fuzzy
+msgid "90 days"
+msgstr "Darrers 30 dies"
+
+#: views/rc.cpp:49
+msgid "New Item"
+msgstr ""
+
+#: views/rc.cpp:50 widgets/rc.cpp:64
+#, fuzzy
+msgid "Detail"
+msgstr "Detalls"
+
+#: views/rc.cpp:51
+#, fuzzy
+msgid "Advanced"
+msgstr "&Avançats..."
+
+#: views/rc.cpp:52
+#, fuzzy
+msgid "Budget Forecast"
+msgstr "Any següent"
+
+#: views/rc.cpp:55
+msgid "Investment Summary"
+msgstr "Resum d'inversions"
+
+#: views/rc.cpp:56
+msgid "Select Account:"
+msgstr "Escolliu un compte:"
+
+#: views/rc.cpp:57
+msgid ""
+"Summary of the equities contained in this account, showing your holdings and "
+"their most recent price."
+msgstr ""
+"Resum dels valors continguts en aquest compte, mostrant les vostres "
+"propietats i la seva cotització més recent."
+
+#: views/rc.cpp:60 widgets/register.cpp:564
+msgid "No."
+msgstr "Núm."
+
+#: views/rc.cpp:64
+msgid "Balance: "
+msgstr "Saldo: "
+
+#: views/rc.cpp:65
+#, fuzzy
+msgid "Address"
+msgstr "Adreça:"
+
+#: views/rc.cpp:66
+msgid "Payee Information"
+msgstr "Informació del beneficiari"
+
+#: views/rc.cpp:67
+msgid "E-Mail:"
+msgstr ""
+
+#: dialogs/rc.cpp:393 views/rc.cpp:69
+msgid "Telephone/Fax:"
+msgstr "Telèfon/Fax:"
+
+#: views/rc.cpp:70
+#, fuzzy
+msgid "Notes"
+msgstr "Notes:"
+
+#: views/rc.cpp:71
+msgid "Address:"
+msgstr "Adreça:"
+
+#: views/rc.cpp:72
+#, fuzzy
+msgid "Matching"
+msgstr "No facis res"
+
+#: views/rc.cpp:73
+#, fuzzy
+msgid "Transaction Matching"
+msgstr "Import de l'assentament"
+
+#: views/rc.cpp:74
+#, fuzzy
+msgid "No matching"
+msgstr "No facis res"
+
+#: views/rc.cpp:75
+#, fuzzy
+msgid "Match on Payee name"
+msgstr "Nom del gestor:"
+
+#: views/rc.cpp:76
+#, fuzzy
+msgid "Match on a name listed below"
+msgstr "Nom del gestor:"
+
+#: views/rc.cpp:77
+#, fuzzy
+msgid "List of matching names"
+msgstr "No facis res"
+
+#: views/rc.cpp:78
+msgid ""
+"This list contains the names that will match this payee if a transaction is "
+"imported from an external source. Keep in mind, that you can specify regular "
+"expressions here."
+msgstr ""
+
+#: views/rc.cpp:79
+#, fuzzy
+msgid "Ignore Case"
+msgstr "Increment"
+
+#: views/rc.cpp:80
+#, fuzzy
+msgid "Default Account"
+msgstr "Escolliu un compte:"
+
+#: views/rc.cpp:81
+#, fuzzy
+msgid ""
+"Use the default account for\n"
+"new transactions with this payee"
+msgstr "Descarta els canvis i entra l'assentament original al llibre."
+
+#: views/rc.cpp:82
+#, fuzzy
+msgid "Default category:"
+msgstr "Esborra..."
+
+#: views/rc.cpp:83
+#, fuzzy
+msgid "Suggest a category"
+msgstr "Crea una nova categoria"
+
+#: views/rc.cpp:85
+#, fuzzy
+msgid "New Scheduled transaction..."
+msgstr "Assentaments programats"
+
+#: views/rc.cpp:86
+msgid "Filter Accounts"
+msgstr "Filtra els comptes"
+
+#: views/rc.cpp:87
+msgid "List View"
+msgstr "Vista de llista"
+
+#: views/rc.cpp:88
+msgid "Calendar View"
+msgstr "Vista de calendari"
+
+#: views/kinstitutionsview.cpp:43
+#, fuzzy
+msgid "Institution/Account"
+msgstr "Institució"
+
+#: views/kinstitutionsview.cpp:157
+msgid "Accounts with no institution assigned"
+msgstr "Comptes sense institució assignada"
+
+#: views/kscheduledview.cpp:70
+msgid "Type/Name"
+msgstr "Tipus/Nom"
+
+#: views/kscheduledview.cpp:75
+msgid "Frequency"
+msgstr "Freqüència"
+
+#: views/kscheduledview.cpp:157
+msgid "Unable to load accounts: "
+msgstr ""
+
+#: views/kscheduledview.cpp:171 views/kscheduledview.cpp:429
+#: views/kscheduledview.cpp:445 widgets/kmymoneyscheduledcalendar.cpp:46
+msgid "Bills"
+msgstr "Factures"
+
+#: dialogs/rc.cpp:232 dialogs/rc.cpp:706 views/kscheduledview.cpp:172
+#: views/kscheduledview.cpp:431 views/kscheduledview.cpp:447
+#: widgets/kmymoneyscheduledcalendar.cpp:47
+msgid "Deposits"
+msgstr "Ingressos"
+
+#: views/kscheduledview.cpp:173 views/kscheduledview.cpp:435
+#: views/kscheduledview.cpp:451
+msgid "Loans"
+msgstr "Préstecs"
+
+#: views/kscheduledview.cpp:357
+msgid "Error activating context menu"
+msgstr ""
+
+#: views/kscheduledview.cpp:385
+msgid "Error executing item"
+msgstr ""
+
+#: views/kscheduledview.cpp:419
+msgid "Unable to filter account"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:508
+#, fuzzy
+msgid "Statement Details"
+msgstr "Data de l'extracte:"
+
+#: views/kgloballedgerview.cpp:512
+#, fuzzy
+msgid "Statement Deposit Details"
+msgstr "Data de l'extracte:"
+
+#: views/kgloballedgerview.cpp:513
+#, fuzzy
+msgid "Statement Payment Details"
+msgstr "Data de l'extracte:"
+
+#: views/kgloballedgerview.cpp:642
+msgid "%1 deposits (%3), %2 payments (%4)"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:649
+#, fuzzy
+msgid "%1 payments (%2)"
+msgstr "Verifica els pagaments"
+
+#: views/kgloballedgerview.cpp:653
+#, fuzzy
+msgid "%1 deposits (%2)"
+msgstr "Les unitats de %1 són en %2"
+
+#: views/kgloballedgerview.cpp:721
+#, c-format
+msgid "Statement: %1"
+msgstr "Extracte: %1"
+
+#: views/kgloballedgerview.cpp:722 views/kgloballedgerview.cpp:736
+#, c-format
+msgid "Cleared: %1"
+msgstr "Verificat: %1"
+
+#: views/kgloballedgerview.cpp:723
+#, c-format
+msgid "Difference: %1"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:730
+#, fuzzy, c-format
+msgid "Last reconciled: %1"
+msgstr "Darrer extracte conciliat: %1"
+
+#: views/kgloballedgerview.cpp:732
+#, fuzzy
+msgid "Never reconciled"
+msgstr "No conciliat"
+
+#: views/kgloballedgerview.cpp:772
+#, fuzzy
+msgid "Investment value: %1%2"
+msgstr "Inversió: %1"
+
+#: views/kgloballedgerview.cpp:1040
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to continue to edit the transactions anyway?"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1051
+msgid ""
+"At least one split of the selected transactions has been frozen. Editing the "
+"transactions is therefore prohibited."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1053
+msgid "Transaction already frozen"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1058
+msgid ""
+"At least one split of the selected transaction references an account that "
+"has been closed. Editing the transactions is therefore prohibited."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1060
+#, fuzzy
+msgid "Account closed"
+msgstr "Comptes"
+
+#: views/kgloballedgerview.cpp:1349
+#, fuzzy
+msgid "Cannot create transactions when no account is selected."
+msgstr "Selecciona els assentaments sense beneficiaris"
+
+#: views/kgloballedgerview.cpp:1354
+msgid "Cannot create transactions in the context of a category."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1358
+#, fuzzy
+msgid "Cannot create transactions in a closed account."
+msgstr "Selecciona els assentaments sense beneficiaris"
+
+#: views/kgloballedgerview.cpp:1370
+#, fuzzy
+msgid "Cannot process transaction with focus if it is not selected."
+msgstr "Selecciona els assentaments sense beneficiaris"
+
+#: views/kgloballedgerview.cpp:1400
+#, fuzzy
+msgid "Cannot edit transactions with frozen splits."
+msgstr "Selecciona els assentaments sense beneficiaris"
+
+#: views/kgloballedgerview.cpp:1411
+msgid "Cannot edit transactions in the context of a category."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1430
+msgid ""
+"Cannot edit investment transactions and non-investment transactions together."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1438
+msgid "Cannot edit multiple split transactions at once."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1448
+msgid "Cannot edit investment transactions in the context of this account."
+msgstr ""
+
+#: views/kforecastview.cpp:164
+#, fuzzy
+msgid "Scheduled"
+msgstr "Programació"
+
+#: views/kforecastview.cpp:169
+#, fuzzy
+msgid "History"
+msgstr "Històric de cotitzacions"
+
+#: views/kforecastview.cpp:296
+msgid "The balance of %2 is below the minimum balance %3 today."
+msgstr ""
+
+#: views/kforecastview.cpp:301 views/khomeview.cpp:1043
+msgid "The balance of %1 will drop below the minimum balance %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:318 views/khomeview.cpp:1059
+msgid "The balance of %1 is below %2 today."
+msgstr ""
+
+#: views/kforecastview.cpp:323 views/khomeview.cpp:1064
+msgid "The balance of %1 is above %2 today."
+msgstr ""
+
+#: views/kforecastview.cpp:330 views/khomeview.cpp:1070
+msgid "The balance of %1 will drop below %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:335 views/khomeview.cpp:1075
+msgid "The balance of %1 will raise above %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:348
+msgid "The account %1 is decreasing %2 per cycle."
+msgstr ""
+
+#: views/kforecastview.cpp:404 widgets/kmymoneyaccounttreeforecast.cpp:114
+#, c-format
+msgid "Min Bal %1"
+msgstr ""
+
+#: views/kforecastview.cpp:406 widgets/kmymoneyaccounttreeforecast.cpp:116
+#, c-format
+msgid "Min Date %1"
+msgstr ""
+
+#: views/kforecastview.cpp:409 widgets/kmymoneyaccounttreeforecast.cpp:119
+#, c-format
+msgid "Max Bal %1"
+msgstr ""
+
+#: views/kforecastview.cpp:411 widgets/kmymoneyaccounttreeforecast.cpp:121
+#, c-format
+msgid "Max Date %1"
+msgstr ""
+
+#: views/kforecastview.cpp:413 widgets/kmymoneyaccounttreeforecast.cpp:123
+#, fuzzy
+msgid "Average"
+msgstr "Tots els estats"
+
+#: views/kforecastview.cpp:649 views/khomeview.cpp:268 views/khomeview.cpp:275
+#, fuzzy
+msgid "Networth Forecast"
+msgstr "Valor net a dia d'avui"
+
+#: views/khomeview.cpp:203
+msgid "Your Financial Summary"
+msgstr "El vostre resum financer"
+
+#: views/khomeview.cpp:218
+msgid "Preferred Accounts"
+msgstr "Comptes preferits"
+
+#: views/khomeview.cpp:225 views/khomeview.cpp:227
+msgid "Payment Accounts"
+msgstr "Comptes monetaris"
+
+#: views/khomeview.cpp:256
+msgid "Show KMyMoney welcome page"
+msgstr "Mostra la pàgina de benvinguda de KMyMoney"
+
+#: views/khomeview.cpp:409
+msgid "Overdue payments"
+msgstr "Pagaments vençuts"
+
+#: views/khomeview.cpp:424 views/khomeview.cpp:497 views/khomeview.cpp:531
+#, fuzzy
+msgid "Balance after"
+msgstr "Saldo: "
+
+#: views/khomeview.cpp:482
+#, fuzzy
+msgid "Today's payments"
+msgstr "Pagaments d'avui"
+
+#: views/khomeview.cpp:516
+msgid "Future payments"
+msgstr "Pagaments propers"
+
+#: views/khomeview.cpp:585
+#, fuzzy
+msgid "Less..."
+msgstr "Menys..."
+
+#: views/khomeview.cpp:587
+#, fuzzy
+msgid "More..."
+msgstr "Més..."
+
+#: views/khomeview.cpp:622
+#, fuzzy
+msgid "Enter schedule"
+msgstr "Nova programació"
+
+#: views/khomeview.cpp:624
+#, fuzzy
+msgid "Skip schedule"
+msgstr "&Nova programació..."
+
+#: views/khomeview.cpp:627
+#, fuzzy
+msgid "Edit schedule"
+msgstr "Edita una factura programada"
+
+#: views/khomeview.cpp:631
+#, fuzzy
+msgid " (%1 payments)"
+msgstr "Verifica els pagaments"
+
+#: views/khomeview.cpp:771
+#, fuzzy
+msgid "To Minimum Balance / Maximum Credit"
+msgstr "Saldo final:"
+
+#: views/khomeview.cpp:964
+#, fuzzy
+msgid "%1 Day Forecast"
+msgstr "Nombre d'assentaments que manquen:"
+
+#: views/khomeview.cpp:973 widgets/kmymoneyaccounttreeforecast.cpp:67
+msgid "%1 days"
+msgstr ""
+
+#: views/khomeview.cpp:1039
+msgid "The balance of %1 is below the minimum balance %2 today."
+msgstr ""
+
+#: views/khomeview.cpp:1175
+msgid ""
+"Before KMyMoney can give you detailed information about your financial "
+"status, you need to create at least one account. Until then, KMyMoney shows "
+"the welcome page instead."
+msgstr ""
+
+#: views/khomeview.cpp:1258
+#, fuzzy
+msgid "Assets and Liabilities Summary"
+msgstr "Actius i Passius"
+
+#: views/khomeview.cpp:1262
+#, fuzzy
+msgid "Asset Accounts"
+msgstr "Compte d'actiu"
+
+#: views/khomeview.cpp:1270
+#, fuzzy
+msgid "Liability Accounts"
+msgstr "Comptes de Passiu"
+
+#: views/khomeview.cpp:1348
+#, fuzzy
+msgid "Total Assets"
+msgstr "Total"
+
+#: views/khomeview.cpp:1354
+#, fuzzy
+msgid "Total Liabilities"
+msgstr "Actius i Passius"
+
+#: views/khomeview.cpp:1399
+#, fuzzy
+msgid "Current Month Summary"
+msgstr "Mes actual"
+
+#: views/khomeview.cpp:1403 views/khomeview.cpp:1440
+#, fuzzy
+msgid "Budgeted"
+msgstr "Any següent"
+
+#: views/khomeview.cpp:1433
+#, fuzzy
+msgid "Budget Overruns"
+msgstr "Any següent"
+
+#: views/khomeview.cpp:1502
+msgid "No Budget Categories have been overrun"
+msgstr ""
+
+#: views/khomeview.cpp:1801
+msgid "Cash Flow Summary"
+msgstr ""
+
+#: views/khomeview.cpp:1808
+#, fuzzy
+msgid "Income and Expenses of Current Month"
+msgstr "Ingressos i despeses d'aquest mes"
+
+#: views/khomeview.cpp:1816
+#, fuzzy
+msgid "Scheduled Income"
+msgstr "Nom de la programació:"
+
+#: views/khomeview.cpp:1819
+#, fuzzy
+msgid "Expenses"
+msgstr "Despeses"
+
+#: views/khomeview.cpp:1822
+#, fuzzy
+msgid "Scheduled Expenses"
+msgstr "Ingressos i despeses d'aquest mes"
+
+#: views/khomeview.cpp:1850
+#, fuzzy
+msgid "Liquid Assets and Liabilities"
+msgstr "Actius i Passius"
+
+#: views/khomeview.cpp:1855
+#, fuzzy
+msgid "Liquid Assets"
+msgstr "Actiu"
+
+#: views/khomeview.cpp:1858
+#, fuzzy
+msgid "Transfers to Liquid Liabilities"
+msgstr "Actius i Passius"
+
+#: views/khomeview.cpp:1861
+#, fuzzy
+msgid "Liquid Liabilities"
+msgstr "Passiu"
+
+#: views/khomeview.cpp:1864
+#, fuzzy
+msgid "Other Transfers"
+msgstr "Transferències"
+
+#: views/khomeview.cpp:1908
+msgid "Cash Flow Status"
+msgstr ""
+
+#: views/khomeview.cpp:1914
+msgid "Expected Liquid Assets"
+msgstr ""
+
+#: views/khomeview.cpp:1917
+#, fuzzy
+msgid "Expected Liquid Liabilities"
+msgstr "Actius i Passius"
+
+#: views/khomeview.cpp:1920
+#, fuzzy
+msgid "Expected Profit/Loss"
+msgstr "Verificació de l'import"
+
+#: plugins/ofximport/ofximporterplugin.cpp:64
+#, fuzzy
+msgid "OFX..."
+msgstr "QIF ..."
+
+#: plugins/ofximport/ofximporterplugin.cpp:69
+#, fuzzy
+msgid "OFX import file selection"
+msgstr "Ubicació del filtre de sortida"
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid ""
+"Unable to import %1 using the OFX importer plugin. This file is not the "
+"correct format."
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid "Incorrect format"
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:122
+#, fuzzy
+msgid "Unable to parse file"
+msgstr "No s'ha pogut modificar la programació: "
+
+#: plugins/ofximport/ofximporterplugin.cpp:576
+#, fuzzy
+msgid "Online settings"
+msgstr "Arranjaments de les cotitzacions en línia"
+
+#: plugins/ofximport/ofximporterplugin.cpp:635
+#, c-format
+msgid "Error connecting to bank: %1"
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:646
+msgid ""
+"Unable to import %1 using the OFX importer plugin. The plugin returned the "
+"following error:<p>%2"
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Importing process terminated unexpectedly."
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Failed to import all statements."
+msgstr ""
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "The HTTP request failed."
+msgstr "La petició HTTP ha fallat."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "Failed"
+msgstr "Ha fallat"
+
+#: plugins/ofximport/ofxpartner.cpp:410
+#, fuzzy
+msgid "Cannot open file %1 for writing"
+msgstr "No es pot obrir el fitxer '%1' per a escriptura"
+
+#: plugins/ofximport/ofxpartner.cpp:414
+msgid "OFX setup error"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+#, fuzzy
+msgid "Loading banklist"
+msgstr "S'estan carregant assentaments..."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid ""
+"Getting list of banks from http://moneycentral.msn.com/\n"
+"This may take some time depending on the available bandwidth."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:155
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:199
+msgid "Supports online statements<br>"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:157
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:201
+#, fuzzy
+msgid "Supports investments<br>"
+msgstr "Tipus d'inversió"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:159
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:203
+msgid "Supports bill payment (but not supported by KMyMoney yet)<br>"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:163
+msgid "Does not support online banking</p>"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:173
+msgid "Please choose a bank."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:179
+msgid "Please fill all fields with values."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:271
+msgid "No suitable accounts were found at this bank."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:283
+#, fuzzy
+msgid "Please choose an account"
+msgstr "Si us plau, seleccioneu el compte."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:386
+msgid "Server message: %1\n"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+msgid "Your bank returned warnings when signing on"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+#, c-format
+msgid "WARNING %1"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+msgid "Error signing onto your bank"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, c-format
+msgid "ERROR %1"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingstatus.cpp:59
+msgid "Enabled & configured"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:1
+msgid "OFX Direct Connect"
+msgstr "Connexió OFX directa"
+
+#: plugins/ofximport/dialogs/rc.cpp:2
+msgid "Contacting bank..."
+msgstr "S'està contactant amb el banc..."
+
+#: plugins/ofximport/dialogs/rc.cpp:4
+msgid "Online Banking Account Setup"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:5
+#, fuzzy
+msgid "Select Financial Institution"
+msgstr "Balanç comptable per institució"
+
+#: plugins/ofximport/dialogs/rc.cpp:6
+msgid "Please select your financial institution from the list below..."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:7
+msgid "Automatic"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:8
+#, fuzzy
+msgid "Financial Institution"
+msgstr "Institució"
+
+#: plugins/ofximport/dialogs/rc.cpp:9
+#, fuzzy
+msgid "Manual"
+msgstr "Ingrés manual"
+
+#: plugins/ofximport/dialogs/rc.cpp:10
+msgid "Org"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:11
+#, fuzzy
+msgid "FID"
+msgstr "FIID"
+
+#: dialogs/settings/rc.cpp:120 plugins/ofximport/dialogs/rc.cpp:12
+#: widgets/rc.cpp:46
+msgid "URL"
+msgstr "URL"
+
+#: plugins/ofximport/dialogs/rc.cpp:13
+#, fuzzy
+msgid "Enter Login Details"
+msgstr "Detalls de la institució"
+
+#: plugins/ofximport/dialogs/rc.cpp:14
+msgid ""
+"Please enter the username and password you use to log into this bank for "
+"online banking. Please note that many banks require a separate signup, and "
+"assign a separate PIN or password just for online banking from home."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:15
+#, fuzzy
+msgid "Connection Details"
+msgstr "Detalls de la institució"
+
+#: plugins/ofximport/dialogs/rc.cpp:16
+msgid "Username"
+msgstr "Nom d'usuari"
+
+#: plugins/ofximport/dialogs/rc.cpp:17 plugins/ofximport/dialogs/rc.cpp:36
+msgid "Header Version"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:18 plugins/ofximport/dialogs/rc.cpp:37
+#, fuzzy
+msgid "Identify as"
+msgstr "Identificació"
+
+#: dialogs/rc.cpp:742 plugins/ofximport/dialogs/rc.cpp:19
+msgid "Password"
+msgstr "Contrasenya"
+
+#: plugins/ofximport/dialogs/rc.cpp:20
+#, fuzzy
+msgid "Select Account"
+msgstr "Escolliu un compte:"
+
+#: plugins/ofximport/dialogs/rc.cpp:21
+msgid ""
+"Please select the account from your financial institution from the list "
+"below which matches this account."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:24
+msgid "Bank"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:25
+#, fuzzy
+msgid "Branch"
+msgstr "Saldo"
+
+#: plugins/ofximport/dialogs/rc.cpp:26
+msgid "WizardPage"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:27
+msgid ""
+"Congratulations! You have successfully set up your bank for online banking "
+"via OFX."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:28
+msgid "Account Details"
+msgstr "Detalls del compte"
+
+#: plugins/ofximport/dialogs/rc.cpp:29 plugins/ofximport/dialogs/rc.cpp:31
+msgid "&lt;Not configured&gt;"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:30
+msgid "BANK/BROKER:"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:32
+#, fuzzy
+msgid "Unavailable"
+msgstr "Valor"
+
+#: plugins/ofximport/dialogs/rc.cpp:33
+msgid "ACCOUNT:"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:34
+msgid "STATUS:"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:35
+#, fuzzy
+msgid "OFX Details"
+msgstr "Detalls"
+
+#: plugins/ofximport/dialogs/rc.cpp:38
+#, fuzzy
+msgid "Start date of import"
+msgstr "Data inicial de l'extracte"
+
+#: plugins/ofximport/dialogs/rc.cpp:39
+#, fuzzy
+msgid "To&day minus"
+msgstr "Pagaments d'avui"
+
+#: plugins/ofximport/dialogs/rc.cpp:40
+#, fuzzy
+msgid "days"
+msgstr "Darrers 30 dies"
+
+#: plugins/ofximport/dialogs/rc.cpp:41
+#, fuzzy
+msgid "Last &update"
+msgstr "Any anterior"
+
+#: plugins/ofximport/dialogs/rc.cpp:42
+msgid "Pi&ck date"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:43
+msgid "Name is derived from"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:44
+msgid "P&AYEEID"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:45
+msgid "&NAME"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:46
+msgid "field if both are present in download"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:81
+msgid "Quicken Windows 2003"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:82
+msgid "Quicken Windows 2004"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:83
+msgid "Quicken Windows 2005"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:84
+msgid "Quicken Windows 2006"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:85
+msgid "Quicken Windows 2007"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:86
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:111
+msgid "Quicken Windows 2008"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:89
+msgid "MS-Money 2003"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:90
+msgid "MS-Money 2004"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:91
+msgid "MS-Money 2005"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:92
+msgid "MS-Money 2006"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:93
+msgid "MS-Money 2007"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:94
+msgid "MS-Money Plus"
+msgstr ""
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:91
+msgid "Report Configuration"
+msgstr "Configuració de l'informe"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:117
+#: dialogs/kreportconfigurationfilterdlg.cpp:135
+msgid "Rows/Columns"
+msgstr "Files/Columnes"
+
+#: dialogs/investtransactioneditor.cpp:203
+#: dialogs/investtransactioneditor.cpp:537
+#: dialogs/investtransactioneditor.cpp:579 dialogs/rc.cpp:103
+#: dialogs/rc.cpp:158 dialogs/rc.cpp:245 dialogs/rc.cpp:750 dialogs/rc.cpp:794
+#: widgets/kmymoneyaccountselector.cpp:182 widgets/register.cpp:64
+#: widgets/register.cpp:567 widgets/transaction.cpp:1500
+msgid "Security"
+msgstr "Valor bursàtil"
+
+#: dialogs/investtransactioneditor.cpp:211
+#, fuzzy
+msgid "Asset account"
+msgstr "Comptes d'Actiu"
+
+#: dialogs/investtransactioneditor.cpp:1073
+#, fuzzy
+msgid "Price/Share"
+msgstr "Cotització per acció"
+
+#: dialogs/kmergetransactionsdlg.cpp:39
+#, fuzzy
+msgid "Merge Transactions"
+msgstr "Assentaments"
+
+#: dialogs/kmergetransactionsdlg.cpp:40
+#, fuzzy
+msgid "Are you sure you wish to merge these transactions?"
+msgstr "Esteu segur que voleu esborrar la programació seleccionada?"
+
+#: dialogs/kstartdlg.cpp:59
+msgid "Start Dialog"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Templates"
+msgstr "Plantilles"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Select templates"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:80 dialogs/kstartdlg.cpp:119
+msgid "New KMyMoney document"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:90
+msgid "Open a KMyMoney document"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:96
+msgid ""
+"%1|KMyMoney files (*.kmy)\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|fitxers KMyMoney (*.kmy)\n"
+"%2|Tots els fitxers (*.*)"
+
+#: dialogs/kstartdlg.cpp:102
+msgid "Recent Files"
+msgstr "Fitxers recents"
+
+#: dialogs/kstartdlg.cpp:217
+msgid "Blank Document"
+msgstr ""
+
+#: dialogs/knewbudgetdlg.cpp:71
+msgid "Please specify a budget name"
+msgstr ""
+
+#: dialogs/kgncpricesourcedlg.cpp:48
+#, c-format
+msgid "Investment: %1"
+msgstr "Inversió: %1"
+
+#: dialogs/kgncpricesourcedlg.cpp:49
+#, c-format
+msgid "Quote source: %1"
+msgstr "Font de les cotitzacions: %1"
+
+#: dialogs/kmymoneypricedlg.cpp:62 dialogs/ksecuritylisteditor.cpp:69
+msgid "Delete this entry"
+msgstr "Esborra aquesta entrada"
+
+#: dialogs/ksecuritylisteditor.cpp:70
+msgid "Remove this security item from the file"
+msgstr "Elimina aquest valor bursàtil del fitxer"
+
+#: dialogs/ksecuritylisteditor.cpp:73
+msgid "&Add"
+msgstr "&Afegeix"
+
+#: dialogs/kmymoneypricedlg.cpp:68 dialogs/ksecuritylisteditor.cpp:75
+msgid "Add a new entry"
+msgstr "Afegeix una nova entrada"
+
+#: dialogs/ksecuritylisteditor.cpp:76
+msgid "Create a new security entry."
+msgstr "Crea una nova entrada de valor bursàtil."
+
+#: dialogs/keditequityentrydlg.cpp:77 dialogs/kmymoneypricedlg.cpp:74
+#: dialogs/ksecuritylisteditor.cpp:81
+msgid "Modify the selected entry"
+msgstr "Modifica l'entrada seleccionada"
+
+#: dialogs/ksecuritylisteditor.cpp:82
+msgid "Change the security information of the selected entry."
+msgstr "Canvia la informació de valor bursàtil de l'entrada seleccionada."
+
+#: dialogs/kmymoneypricedlg.cpp:80 dialogs/ksecuritylisteditor.cpp:87
+msgid "Close the dialog"
+msgstr "Tanca el diàleg"
+
+#: dialogs/kmymoneypricedlg.cpp:81 dialogs/ksecuritylisteditor.cpp:88
+msgid "Use this to close the dialog and return to the application."
+msgstr "Useu això per tancar el diàleg i retornar a l'aplicació."
+
+#: dialogs/ksecuritylisteditor.cpp:184
+msgid ""
+"Do you really want to remove the currency <b>%1</b> from the file?</"
+"p><i>Note: It is currently not supported to add currencies.</i>"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:187
+msgid "Do you really want to remove the %1 <b>%2</b> from the file?"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:190
+msgid "Delete security"
+msgstr "Esborra valor bursàtil"
+
+#: dialogs/kmymoneypricedlg.cpp:63
+msgid "Remove this price item from the file"
+msgstr "Elimina del fitxer aquest element de cotització"
+
+#: dialogs/kmymoneypricedlg.cpp:66 dialogs/mymoneyqifprofileeditor.cpp:94
+msgid "&New"
+msgstr "&Nou"
+
+#: dialogs/kmymoneypricedlg.cpp:69
+msgid "Create a new price entry."
+msgstr "Crea una nova entrada de cotització."
+
+#: dialogs/kmymoneypricedlg.cpp:75
+msgid "Change the details of selected price information."
+msgstr "Canvia els detalls de la informació sobre la cotització seleccionada."
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Do you really want to delete the selected price entry?"
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Delete price information"
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:46
+msgid ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Si us plau, escolliu el tipus d'importació que voleu fer. Al dessota de la "
+"pantalla trobareu una explicació senzilla del tipus d'importació, que es va "
+"actualitzant \n"
+"a mida que seleccionau un element de la llista desplegable.\n"
+"\n"
+"Un cop hàgiu escollit un tipus d'importació, premeu el botó OK."
+
+#: dialogs/kchooseimportexportdlg.cpp:50 dialogs/rc.cpp:22
+msgid "Choose import type:"
+msgstr "Escolliu el tipus d'importació:"
+
+#: dialogs/kchooseimportexportdlg.cpp:51 dialogs/rc.cpp:20
+msgid "Choose Import Type Dialog"
+msgstr "Diàleg de selecció del tipus d'importació"
+
+#: dialogs/kchooseimportexportdlg.cpp:53
+msgid ""
+"Please choose the type of export you wish to perform. A simple explanation\n"
+"of the export type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an export type please press the OK button."
+msgstr ""
+"Si us plau, escolliu el tipus d'exportació que voleu fer. Al dessota de la "
+"pantalla trobareu una explicació senzilla del tipus d'exportació, que es va "
+"actualitzant \n"
+"a mida que seleccionau un element de la llista desplegable.\n"
+"\n"
+"Un cop hàgiu escollit un tipus d'importació, premeu el botó OK."
+
+#: dialogs/kchooseimportexportdlg.cpp:57
+msgid "Choose export type:"
+msgstr "Escolliu el tipus d'exportació:"
+
+#: dialogs/kchooseimportexportdlg.cpp:58
+msgid "Choose Export Type Dialog"
+msgstr "Diàleg de selecció del tipus d'exportació"
+
+#: dialogs/kchooseimportexportdlg.cpp:78
+msgid ""
+"QIF files are created by the popular accounting program Quicken.\n"
+"Another dialog will appear, if you choose this type, asking for further\n"
+"information relevant to the Quicken format."
+msgstr ""
+"Els fitxers QIF són creats pel Quicken, un popular programa de "
+"comptabilitat.\n"
+"Si escolliu aquest tipus, us apareixerà un nou diàleg demanant-vos més "
+"informació\n"
+"relativa al format de Quicken."
+
+#: dialogs/kchooseimportexportdlg.cpp:82
+msgid ""
+"The CSV type uses a comma delimeted text file that can be used by\n"
+"most popular spreadsheet programs available for Linux and other operating\n"
+"systems."
+msgstr ""
+"El tiups CSV fa servir un fitxer de text delimitat per comes que pot ser "
+"llegit\n"
+"per la major part de programes de full de càlcul disponibles per GNU/Linux \n"
+"i altres sistemes operatius."
+
+#: dialogs/kequitypriceupdatedlg.cpp:222
+msgid "%1 units in %2"
+msgstr "Les unitats de %1 són en %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+#, fuzzy
+msgid ""
+"Failed to retrieve an exchange rate for %1 from %2. It will be skipped this "
+"time."
+msgstr ""
+"No s'ha pogut obtenir la cotització de %1 des de %2. Voleu inhabilitar les "
+"actualitzacions en línia de la cotització d'aquest valor?"
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+#, fuzzy
+msgid "Price Update Failed"
+msgstr "Ha fallat l'actualització de les cotitzacions"
+
+#: dialogs/kequitypriceupdatedlg.cpp:427
+msgid ""
+"Failed to retrieve a quote for %1 from %2. Press <b>No</b> to remove the "
+"online price source from this security permanently, <b>Yes</b> to continue "
+"updating this security during future price updates or <b>Cancel</b> to stop "
+"the current update operation."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:427 dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Price Update Failed"
+msgstr "Ha fallat l'actualització de les cotitzacions"
+
+#: dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Cannot update security <b>%1</b>: %2"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:528
+#, fuzzy
+msgid "Price for %1 updated (id %2)"
+msgstr "S'ha actualitzat la cotització de %1"
+
+#: dialogs/kequitypriceupdatedlg.cpp:534
+msgid "Received an invalid price for %1, unable to update."
+msgstr "S'ha rebut una cotització invàlida per a %1; no es pot actualitzar."
+
+#: dialogs/kequitypriceupdatedlg.cpp:554
+#, fuzzy
+msgid ""
+"Received a price for %1 (id %2), but this symbol is not on the list! "
+"Aborting entire update."
+msgstr ""
+"S'ha rebut una cotització per a %1, però aquest símbol no és a la llista! "
+"S'avortarà l'actualització sencera."
+
+#: dialogs/transactioneditor.cpp:222
+msgid ""
+"The number <b>%1</b> has already been used in account <b>%2</b>. Do you want "
+"to replace it with the next available number?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:222
+msgid "Duplicate number"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:303
+msgid ""
+"This transaction has more than two splits and is based on a different "
+"currency (%1). Using this account to modify the transaction is currently not "
+"very well supported by KMyMoney and may result in false results."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:305
+msgid ""
+"KMyMoney was not able to find a more appropriate account to edit this "
+"transaction. Nevertheless, you are allowed to modify the transaction. If you "
+"don't want to edit this transaction, please cancel from editing next."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:307
+msgid ""
+"Using e.g. <b>%1</b> to edit this transaction is a better choice. "
+"Nevertheless, you are allowed to modify the transaction. If you want to use "
+"the suggested account instead, please cancel from editing next and change "
+"the view to the suggested account."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:410
+msgid ""
+"This transaction has more than two splits and is originally based on a "
+"different currency (%1). Using this account to modify the transaction may "
+"result in rounding errors. Do you want to continue?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:412
+msgid ""
+"At least one of the selected transactions has more than two splits and is "
+"originally based on a different currency (%1). Using this account to modify "
+"the transactions may result in rounding errors. Do you want to continue?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:557
+#, fuzzy
+msgid "Storing transactions"
+msgstr "S'estan afegint assentaments"
+
+#: dialogs/transactioneditor.cpp:603 widgets/kmymoneybriefschedule.cpp:65
+msgid "&Enter"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:606
+#, fuzzy
+msgid "Use this to enter the transaction into the ledger."
+msgstr "Descarta els canvis i entra l'assentament original al llibre."
+
+#: dialogs/transactioneditor.cpp:607
+#, fuzzy
+msgid "&Schedule"
+msgstr "Programació"
+
+#: dialogs/transactioneditor.cpp:609
+#, fuzzy
+msgid "Accepts the entered data and stores it as schedule"
+msgstr "Accepta les dades introduïdes i les desa"
+
+#: dialogs/transactioneditor.cpp:610
+#, fuzzy
+msgid "Use this to schedule the transaction for later entry into the ledger."
+msgstr "Useu això per acceptar tots els assentaments i importar-los al fitxer."
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"The transaction you are about to enter has a post date in the future.<br/"
+"><br/>Do you want to enter it in the ledger or add it to the schedules?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"_: Dialog caption for 'Enter or schedule' dialog\n"
+"Enter or schedule?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:671
+msgid ""
+"The balance of account <b>%1</b> dropped below the warning balance of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:677
+msgid ""
+"The balance of account <b>%1</b> dropped below the minimum balance of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:683
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit warning "
+"limit of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:689
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit limit of %"
+"2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:740
+#, fuzzy
+msgid "Payer/Receiver"
+msgstr "Receptor"
+
+#: dialogs/transactioneditor.cpp:748
+msgid "Category/Account"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:980 dialogs/transactioneditor.cpp:1016
+#: dialogs/transactioneditor.cpp:1378 dialogs/transactioneditor.cpp:1399
+#: dialogs/transactioneditor.cpp:1422 dialogs/transactioneditor.cpp:1443
+#: dialogs/transactioneditor.cpp:1505 dialogs/transactioneditor.cpp:1509
+#: widgets/transaction.cpp:902
+msgid "Transfer from"
+msgstr "Transfereix de"
+
+#: dialogs/transactioneditor.cpp:982 dialogs/transactioneditor.cpp:1018
+#: dialogs/transactioneditor.cpp:1401 dialogs/transactioneditor.cpp:1445
+#: dialogs/transactioneditor.cpp:1506 widgets/transaction.cpp:902
+msgid "Transfer to"
+msgstr "Transfereix a"
+
+#: dialogs/transactioneditor.cpp:1259
+#, fuzzy
+msgid "Select autofill transaction"
+msgstr "Assentament desglossat"
+
+#: dialogs/transactionmatcher.cpp:77
+msgid "First transaction does not match requirement for matching"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:79
+msgid "Second transaction does not match requirement for matching"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:83 dialogs/transactionmatcher.cpp:133
+msgid "Splits for %1 have conflicting values (%2,%3)"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:96 dialogs/transactionmatcher.cpp:149
+msgid ""
+"Both of these transactions have been imported into %1. Therefore they "
+"cannot be matched. Matching works with one imported transaction and one non-"
+"imported transaction."
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:101 dialogs/transactionmatcher.cpp:156
+msgid "Unable to match all splits (%1)"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:65
+msgid "Account and transfer account are the same. Please change one."
+msgstr ""
+"El compte actual i el de destí són el mateix. Si us plau canvieu-ne un."
+
+#: dialogs/kconfirmmanualenterdlg.cpp:84
+msgid "Payee changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:92
+#: dialogs/kconfirmmanualenterdlg.cpp:100
+msgid "Account changed. Old: \"%1\", New: \"%2\""
+msgstr "S'ha canviat el compte. Antic: \"%1\", Nou: \"%2\""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:107
+msgid "Account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:115
+#, fuzzy
+msgid ""
+"Transfer account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</"
+"b><p>"
+msgstr "S'ha canviat el compte de transferència. Antic: \"%1\", Nou: \"%2\""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:143
+msgid ""
+"Category changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:151
+#: dialogs/kconfirmmanualenterdlg.cpp:153
+msgid "empty"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:157
+msgid "Memo changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:166
+msgid "Amount changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:175
+msgid ""
+"Reconciliation flag changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%"
+"2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:182
+msgid "Fatal error in determining data: "
+msgstr "S'ha produït un error fatal en determinar les dades: "
+
+#: dialogs/kselectdatabasedlg.cpp:56
+msgid ""
+"There are no Qt SQL drivers installed in your system.\n"
+"Please consult documentation for your distro, or visit the Qt web site (www."
+"trolltech.com) and search for SQL drivers."
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:100
+msgid "Qt SQL driver %1 is no longer installed on your system"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:107
+msgid "Qt SQL driver %1 is not suported"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:164
+#, fuzzy
+msgid "SQLite files (*.sql);; All files (*.*)"
+msgstr ""
+"%1|Fitxers de Gnucash\n"
+"%2|Tots els fitxers (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:167
+#, fuzzy
+msgid "Select SQLite file"
+msgstr "Seleccioneu l'estil"
+
+#: dialogs/kselectdatabasedlg.cpp:188
+#, fuzzy
+msgid "All files (*.*)"
+msgstr "Totes les dates"
+
+#: dialogs/kselectdatabasedlg.cpp:191
+#, fuzzy
+msgid "Select output file"
+msgstr "Seleccioneu l'estil"
+
+#: dialogs/investactivities.cpp:168
+#, fuzzy
+msgid "%1 (Brokerage)"
+msgstr " (Gestoria)"
+
+#: dialogs/investactivities.cpp:200 dialogs/investactivities.cpp:288
+#: dialogs/investactivities.cpp:425 widgets/transaction.cpp:1548
+#, fuzzy
+msgid "Price/share"
+msgstr "Cotització per acció"
+
+#: dialogs/investactivities.cpp:586
+msgid "Ratio 1/"
+msgstr ""
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid ""
+"<p>Please check that all the details in the following dialog are correct and "
+"press OK.</p><p>Editable data can be changed and can either be applied to "
+"just this occurence or for all subsequent occurences for this schedule. "
+"(You will be asked what you intend after pressing OK in the following dialog)"
+"</p>"
+msgstr ""
+
+#: dialogs/kenterscheduledlg.cpp:201
+#, fuzzy
+msgid "Enter scheduled transaction"
+msgstr "Assentaments programats"
+
+#: dialogs/kcsvprogressdlg.cpp:65 dialogs/kexportdlg.cpp:65
+msgid "&Export"
+msgstr "&Exporta"
+
+#: dialogs/kexportdlg.cpp:67 dialogs/kimportdlg.cpp:68
+msgid "Start operation"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:68
+msgid "Use this to start the export operation"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:71 dialogs/kimportdlg.cpp:72
+msgid "&Browse..."
+msgstr "&Fulleja..."
+
+#: dialogs/kexportdlg.cpp:73 dialogs/kimportdlg.cpp:74
+msgid "Select filename"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:74 dialogs/kimportdlg.cpp:75
+msgid "Use this to select a filename to export to"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:77 dialogs/kimportdlg.cpp:78
+#: dialogs/settings/ksettingsonlinequotes.cpp:64
+#: widgets/kmymoneyonlinequoteconfig.cpp:64
+msgid "&New..."
+msgstr "&Nou..."
+
+#: dialogs/kexportdlg.cpp:79 dialogs/kimportdlg.cpp:80
+#: dialogs/mymoneyqifprofileeditor.cpp:96
+msgid "Create a new profile"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:80 dialogs/kimportdlg.cpp:81
+msgid "Use this to open the profile editor"
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:56
+msgid "Edit loan wizard"
+msgstr "Assistent per a l'edició de préstec"
+
+#: dialogs/keditloanwizard.cpp:58
+msgid ""
+"Please enter the date from which on the following changes will be effective. "
+"The date entered must be later than the opening date of this account (%1), "
+"but must not be in the future. The default will be today."
+msgstr ""
+"Si us plau entreu la data a partir de la qual es faran efectius els canvis "
+"següents. La data introduïda ha d'ésser posterior a la data d'obertura "
+"d'aquest compte (%1), però no ha d'ésser una data futura. El valor per "
+"omissió és avui."
+
+#: dialogs/keditloanwizard.cpp:76
+msgid ""
+"Note: you will not be able to modify this account today, because the opening "
+"date \"%1\" is in the future. Please revisit this dialog when the time has "
+"come."
+msgstr ""
+"Nota: No podreu modificar aquest compte avui, perquè la data d'obertura \"%1"
+"\" és futura. Si us plau retorneu a aquest diàleg quan sigui el moment."
+
+#: dialogs/keditloanwizard.cpp:244
+msgid ""
+"Your previous selection was \"%1\". If you select another option, KMyMoney "
+"will dismiss the changes you have just entered. Do you wish to proceed?"
+msgstr ""
+"La vostra selecció prèvia fou \"%1\". Si escolliu una altra opció, el "
+"KMyMoney descartarà els canvis que acabeu d'introduir. Voleu continuar?"
+
+#: dialogs/kcategoryreassigndlg.cpp:81
+msgid ""
+"At least one transaction/schedule still references the category <b>%1</b>. "
+"However, at least one category with the same currency must exist so that the "
+"transactions/schedules can be reassigned."
+msgstr ""
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid ""
+"This dialog does not allow to create new categories. Please pick a category "
+"from the list."
+msgstr ""
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+#, fuzzy
+msgid "Category creation"
+msgstr "Categoria"
+
+#: dialogs/kbackupdlg.cpp:61
+msgid "C&hoose..."
+msgstr "E&scolliu..."
+
+#: dialogs/kbackupdlg.cpp:63
+msgid "Select mount point"
+msgstr ""
+
+#: dialogs/kbackupdlg.cpp:64
+msgid "Use this to browse to the mount point."
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:293
+#, fuzzy
+msgid "Next due date"
+msgstr "Proper venciment:"
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid ""
+"You have turned on the GPG encryption support. This means, that new files "
+"will be stored encrypted. Existing files will not be encrypted "
+"automatically. To achieve encryption of existing files, please use the "
+"<b>File/Save as...</b> feature and store the file under a different name. "
+"Once confident with the result, feel free to delete the old file and rename "
+"the encrypted one to the old name."
+msgstr ""
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+#, fuzzy
+msgid "GPG encryption activated"
+msgstr "Xifrat"
+
+#: dialogs/settings/ksettingshome.cpp:51
+msgid "&Up"
+msgstr "&Amunt"
+
+#: dialogs/settings/ksettingshome.cpp:53
+msgid "Move selected item up"
+msgstr "Mou amunt l'ítem seleccionat"
+
+#: dialogs/settings/ksettingshome.cpp:54
+msgid "Use this to move the selected item up by one position in the list."
+msgstr ""
+
+#: dialogs/settings/ksettingshome.cpp:55
+msgid "&Down"
+msgstr "A&vall"
+
+#: dialogs/settings/ksettingshome.cpp:57
+msgid "Move selected item down"
+msgstr "Mou avall l'ítem seleccionat"
+
+#: dialogs/settings/ksettingshome.cpp:58
+msgid "Use this to move the selected item down by one position in the list."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:1
+#, fuzzy
+msgid "Color settings"
+msgstr "Arranjaments del color"
+
+#: dialogs/settings/rc.cpp:2
+msgid "Foreground"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:3
+msgid "Text colors"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:4
+msgid "Grid color"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:5
+#, fuzzy
+msgid "Erronous transaction"
+msgstr "Qualsevol assentament"
+
+#: dialogs/settings/rc.cpp:6
+msgid "Value with missing conversion rate"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:7
+msgid "Negative value"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:8
+#, fuzzy
+msgid "Background"
+msgstr "Còpia de seguretat"
+
+#: dialogs/settings/rc.cpp:10
+msgid "List background colors"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:11
+#, fuzzy
+msgid "Normal"
+msgstr "No hi ha manual"
+
+#: dialogs/settings/rc.cpp:12
+#, fuzzy
+msgid "Alternate"
+msgstr "Tots els estats"
+
+#: dialogs/settings/rc.cpp:13
+msgid "Special background colors"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:14
+msgid "Ledger group separator"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:15
+msgid "Required field"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:16
+#, fuzzy
+msgid "Imported transaction"
+msgstr "Importa assentaments"
+
+#: dialogs/settings/rc.cpp:17
+#, fuzzy
+msgid "Matched transaction"
+msgstr "Cerca assentaments"
+
+#: dialogs/settings/rc.cpp:18
+msgid "Font settings"
+msgstr "Arranjaments de les fonts"
+
+#: dialogs/settings/rc.cpp:19
+msgid "Use system fonts"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:20
+#, fuzzy
+msgid "Individual font settings"
+msgstr "Arranjaments invàlids"
+
+#: dialogs/settings/rc.cpp:24
+msgid "Number of Days of Account Cycle:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:26
+#, fuzzy
+msgid "Number of Days to Forecast:"
+msgstr "Nombre d'assentaments que manquen:"
+
+#: dialogs/settings/rc.cpp:27
+#, fuzzy
+msgid "Forecast Method"
+msgstr "Mètode de pagament"
+
+#: dialogs/settings/rc.cpp:28
+#, fuzzy
+msgid "Scheduled and Future Transactions"
+msgstr "Assentaments programats"
+
+#: dialogs/settings/rc.cpp:29
+#, fuzzy
+msgid "History-based"
+msgstr "Arranjaments del llibre"
+
+#: dialogs/settings/rc.cpp:30
+#, fuzzy
+msgid "History-based settings"
+msgstr "Arranjaments del llibre"
+
+#: dialogs/settings/rc.cpp:31
+msgid "Number of Cycles to use in Forecast:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:36
+msgid "General Settings"
+msgstr "Arranjaments generals"
+
+#: dialogs/settings/rc.cpp:37
+msgid "Global"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:38
+msgid "Startup page options"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:39
+#, fuzzy
+msgid "Start with homepage"
+msgstr "Mostra la pàgina principal en començar"
+
+#: dialogs/settings/rc.cpp:40
+msgid "Start with last selected view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:41
+#, fuzzy
+msgid "Precision settings"
+msgstr "Arranjaments de l'encriptació GPG"
+
+#: dialogs/settings/rc.cpp:42
+#, fuzzy
+msgid "Price precision"
+msgstr "Històric de cotitzacions"
+
+#: dialogs/settings/rc.cpp:43
+msgid "digits"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:44
+#, fuzzy
+msgid "Autosave options"
+msgstr "Opcions del dispositiu"
+
+#: dialogs/settings/rc.cpp:45
+msgid "Autosave periodically"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:46
+msgid "minutes"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:47
+msgid "Fiscal Year"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:48
+#, fuzzy
+msgid "Your fiscal year starts on"
+msgstr "Any actual"
+
+#: dialogs/settings/rc.cpp:49
+msgid "January"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:50
+msgid "February"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:51
+#, fuzzy
+msgid "March"
+msgstr "Cerca"
+
+#: dialogs/settings/rc.cpp:52
+msgid "April"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:53
+msgid "May"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:54
+msgid "June"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:55
+msgid "July"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:56
+msgid "August"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:57
+msgid "September"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:58
+#, fuzzy
+msgid "October"
+msgstr "Altres"
+
+#: dialogs/settings/rc.cpp:59
+#, fuzzy
+msgid "November"
+msgstr "Número"
+
+#: dialogs/settings/rc.cpp:60
+#, fuzzy
+msgid "December"
+msgstr "Decrement"
+
+#: dialogs/settings/rc.cpp:61
+msgid "Views"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:62
+msgid "Synchronize account selection of ledger and investment view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:63
+msgid ""
+"Check the views you want to enable, uncheck those you want to hide, because "
+"you don't need the functionality."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:64
+msgid "Icon size of navigation bar"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:65
+msgid "Micro (16px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:66
+msgid "Small (32px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:67
+msgid "Normal (48px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:68
+msgid "Large (64px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:69
+msgid "Show title bar on each page"
+msgstr ""
+
+#: dialogs/rc.cpp:835 dialogs/settings/rc.cpp:70
+msgid "Filter"
+msgstr "Filtre"
+
+#: dialogs/settings/rc.cpp:71
+#, fuzzy
+msgid "Accounts / Categories"
+msgstr "Categories"
+
+#: dialogs/settings/rc.cpp:72
+msgid "Don't show unused categories"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:73
+msgid ""
+"This option hides all categories in the categories view that are not used in "
+"at least a single transaction. They are still shown in the category "
+"selection lists."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:74
+msgid "Don't show closed accounts"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:75
+msgid ""
+"This option hides all accounts that have been closed by the user in views "
+"and selection lists.\n"
+"\n"
+"You can use <b>View/Show all accounts</b> to temporarily show hidden "
+"accounts in the views."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:76
+#, fuzzy
+msgid "Show equity accounts"
+msgstr "Comptes de Passiu"
+
+#: dialogs/rc.cpp:332 dialogs/settings/rc.cpp:77 widgets/rc.cpp:160
+msgid "Schedules"
+msgstr "Programacions"
+
+#: dialogs/settings/rc.cpp:78
+msgid "Don't show finished schedules"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:79
+msgid "This option hides all finished schedules in the schedules view."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:81
+#, fuzzy
+msgid "Don't show transactions prior to"
+msgstr "Amaga els assentaments conciliats"
+
+#: dialogs/settings/rc.cpp:82
+#, fuzzy
+msgid "Don't show reconciled transactions"
+msgstr "Amaga els assentaments conciliats"
+
+#: dialogs/settings/rc.cpp:83
+msgid "This option hides all reconciled transactions in the ledger view."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:84 widgets/rc.cpp:22
+msgid "GPG encryption settings"
+msgstr "Arranjaments de l'encriptació GPG"
+
+#: dialogs/settings/rc.cpp:85
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Access to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>additional recovery encryption</i> is only accessible, if the "
+"necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id "
+"0x8AFDDC8E is found in your keyring."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:86 widgets/rc.cpp:24
+msgid "Use GPG encryption"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:87
+#, fuzzy
+msgid "GPG encryption"
+msgstr "Xifrat"
+
+#: dialogs/settings/rc.cpp:88
+#, fuzzy
+msgid "Your key"
+msgstr "El vostre nom:"
+
+#: dialogs/settings/rc.cpp:89
+msgid ""
+"This combo box lists all the secret keys you have in your keyring. Select "
+"the one you want to use for encryption when saving to a file."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:90
+msgid "Additonal keys"
+msgstr ""
+
+#: dialogs/kgpgkeyselectiondlg.cpp:50 dialogs/settings/rc.cpp:91
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading 0x."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:92 widgets/rc.cpp:28
+msgid ""
+"This symbol denotes, if the key for the given user id has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+
+#: dialogs/kgpgkeyselectiondlg.cpp:61 dialogs/settings/rc.cpp:93
+msgid "Keys for all of the above user ids found"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:94 widgets/rc.cpp:31
+msgid ""
+"This symbol denotes, if the KMyMoney recovery key has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:95
+msgid "Recover Key available in keyring"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:96
+msgid "Also encrypt with KMyMoney's recover key"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:97
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out.."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:98
+#, fuzzy
+msgid "Homepage Settings"
+msgstr "Arranjaments de la pàgina principal"
+
+#: dialogs/settings/rc.cpp:99
+#, fuzzy
+msgid "Up"
+msgstr "&Amunt"
+
+#: dialogs/settings/rc.cpp:100
+#, fuzzy
+msgid "Down"
+msgstr "A&vall"
+
+#: dialogs/settings/rc.cpp:101
+#, fuzzy
+msgid ""
+"Selected entries are shown on the home page of the application.<p>\n"
+"Use the buttons and checkboxes to customize the layout of the home page."
+msgstr ""
+"A la pàgina principal de l'aplicació es mostraran les entrades "
+"seleccionades.\n"
+"\n"
+"Useu els botons i les caixes selectores per personalitzar l'aparença de la "
+"pàgina principal."
+
+#: dialogs/settings/rc.cpp:102
+msgid "Homepage/Summary page font scaling"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:103
+msgid "Percentage of default font size:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:104
+msgid ""
+"Remember font size when leaving the program if manually changed with mouse-"
+"wheel"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:105
+#, fuzzy
+msgid "Information display"
+msgstr "Informació de pagament"
+
+#: dialogs/settings/rc.cpp:106
+#, fuzzy
+msgid "Show Account Limit Information"
+msgstr "Opcions del compte"
+
+#: dialogs/settings/rc.cpp:110 widgets/rc.cpp:47
+msgid ""
+"<i>Enter regular expressions which can be used to parse the data returned "
+"from the URL entered above. The symbol, price, and date must be found in "
+"the quote data to be usable. You may also try the KMyMoney user's "
+"mailinglist at <a href=\"mailto:kmymoney2-user@lists.sourceforge.net"
+"\">kmymoney2-user@lists.sourceforge.net</a> to find what settings work for "
+"other users in your country.</i>"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:113 widgets/rc.cpp:38
+msgid "Regular Expression to extract the symbol from the downloaded data"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:114 widgets/rc.cpp:39
+msgid "Regular Expression to extract the price from the downloaded data"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:115 widgets/rc.cpp:41
+msgid "URL to be used to download the quote"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:116 widgets/rc.cpp:42
+msgid ""
+"Enter the URL from which stock quotes will be fetched. <b>%1</b> will be "
+"replaced with the symbol for the security being quoted. For currency "
+"conversions, <b>%2</b> will be replaced with the currency to be quoted and "
+"<b>%1</b> with the currency the quote is based on."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:118 dialogs/settings/rc.cpp:121 widgets/rc.cpp:40
+#: widgets/rc.cpp:44
+msgid "Regular Expression to extract the date from the downloaded data"
+msgstr ""
+
+#: dialogs/rc.cpp:807 dialogs/settings/rc.cpp:119 widgets/rc.cpp:45
+msgid "Date Format"
+msgstr "Format de la data"
+
+#: dialogs/settings/rc.cpp:122
+msgid "Skip HTML stripping"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:123
+msgid ""
+"<p>For easier processing of the data returned by the online source, KMyMoney "
+"usually strips unused parts before it is parsed with the regular "
+"expressions. If matching of the fields relies on those items, then use this "
+"option to turn stripping off.</p>\n"
+"\n"
+"<p>The following items are usually removed by stripping:\n"
+"\n"
+"<ul>\n"
+"<li>HTML tags such as <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded characters such as <b>&amp;nbsp;</b></li>\n"
+"<li>duplicate whitespace</li>\n"
+"</ul>\n"
+"</p>"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:127
+msgid "Register settings"
+msgstr "Arranjaments del llibre"
+
+#: dialogs/settings/rc.cpp:128
+#, fuzzy
+msgid "Display"
+msgstr "Diàriament"
+
+#: dialogs/settings/rc.cpp:131
+msgid ""
+"Using the ledger lens shows the details for the transaction that has focus "
+"in the ledger. Usually, when using the transaction form, only a one line "
+"summary is displayed for each transaction as the details are shown in the "
+"form."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:133
+#, fuzzy
+msgid "Always show a No. field"
+msgstr "Mostra sempre un camp Núm. en el formulari d'assentament"
+
+#: dialogs/settings/rc.cpp:134
+#, fuzzy
+msgid "Show group header between transactions"
+msgstr "Crea un compte nou"
+
+#: dialogs/settings/rc.cpp:135
+msgid ""
+"Draws a larger header above each group of transaction. The grouping depends "
+"on the current sort order."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:136
+msgid "Show header for the previous and current fiscal year"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:137
+msgid "Sorting"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:138
+msgid "Normal view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:139
+#, fuzzy
+msgid "Reconciliation view"
+msgstr "Assistent per a la conciliació"
+
+#: dialogs/settings/rc.cpp:140
+#, fuzzy
+msgid "Search view"
+msgstr "Cerca"
+
+#: dialogs/settings/rc.cpp:141
+msgid ""
+"Use the <i>left</i> and <i>right</i> buttons to add and remove sort options. "
+"Use the <i>up</i> and <i>down</i> buttons to modify the sort order. Double-"
+"Click a selected entry to toggle the sort order between <i>ascending</i> and "
+"<i>descending</i>."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:142
+#, fuzzy
+msgid "Data entry"
+msgstr "Rang de dates"
+
+#: dialogs/settings/rc.cpp:146
+msgid "Use Enter to move between fields"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:147
+msgid "Match names from start"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:148
+msgid ""
+"Mark this option, if you always want to match names e.g. for payees from the "
+"start. If unset, any substring is matched."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:149
+#, fuzzy
+msgid "Default reconciliation state"
+msgstr "Posposa la conciliació"
+
+#: dialogs/rc.cpp:227 dialogs/settings/rc.cpp:150
+#: widgets/kmymoneycombo.cpp:348 widgets/registersearchline.cpp:84
+msgid "Not reconciled"
+msgstr "No conciliat"
+
+#: dialogs/rc.cpp:228 dialogs/settings/rc.cpp:151
+#: widgets/kmymoneycombo.cpp:347 widgets/registersearchline.cpp:85
+msgid "Cleared"
+msgstr "Verificat"
+
+#: dialogs/settings/rc.cpp:153
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation "
+"of an account"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:154
+msgid "Autofill"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:155
+msgid "No Autofill"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:156
+#, fuzzy
+msgid "Don't do autofill of transaction data at all."
+msgstr "Emplena automàticament amb les dades de l'assentament previ"
+
+#: dialogs/settings/rc.cpp:157
+msgid "Same transaction if amount differs less than"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:158
+msgid ""
+"Collect all transactions for the given payee. Treat all transactions that "
+"refer to the same category and have an amount with +/- X % as identical. If "
+"more than one transaction is found, a list of them is presented to the "
+"user.\n"
+"\n"
+"Selecting 0% will list all transactions."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:159
+msgid ""
+"Two transactions are usually treated identical for autofill, if they refer "
+"the same accounts. They are treated as different transactions though, when "
+"their amount varies by more than the percentage given here."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:160
+msgid ""
+"_: Same transaction if amount differs less than percent.\n"
+"percent."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:161
+msgid "with previously most often used transaction for the payee"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:162
+msgid ""
+"The data of the last transaction assigned to the category used most often "
+"for this payee is autofilled into the transaction editor."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:164
+#, fuzzy
+msgid "Match transactions within days"
+msgstr "Selecciona els assentaments sense beneficiaris"
+
+#: dialogs/settings/rc.cpp:165
+msgid ""
+"Search for matching transactions within the range of the posting date of the "
+"imported transaction +/- the number of given days."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:166
+msgid "Ask for a new payee's default category"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:167
+msgid ""
+"Whenever a new payee is detected during import of a statement, the user will "
+"be asked to assign a default category for this user when this option is "
+"selected."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:168
+#, fuzzy
+msgid "Schedule Settings"
+msgstr "Arranjaments de la programació"
+
+#: dialogs/settings/rc.cpp:169
+#, fuzzy
+msgid "Startup options"
+msgstr "Opcions d'importació"
+
+#: dialogs/settings/rc.cpp:170
+msgid "Check schedules on startup"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:60
+#: widgets/kmymoneyonlinequoteconfig.cpp:60
+msgid "Delete the selected source entry"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:61
+#: widgets/kmymoneyonlinequoteconfig.cpp:61
+msgid "Use this to delete the selected online source entry"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:66
+#: widgets/kmymoneyonlinequoteconfig.cpp:66
+msgid "Create a new source entry for online quotes"
+msgstr "Crea una nova font de cotitzacions en línia"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:67
+#: widgets/kmymoneyonlinequoteconfig.cpp:67
+msgid "Use this to create a new entry for online quotes"
+msgstr "Useu això per crear una nova entrada per les cotitzacions en línia"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:107
+#: dialogs/settings/ksettingsonlinequotes.cpp:190
+#: dialogs/settings/ksettingsonlinequotes.cpp:193
+#: dialogs/settings/ksettingsonlinequotes.cpp:216
+#: widgets/kmymoneyonlinequoteconfig.cpp:107
+#: widgets/kmymoneyonlinequoteconfig.cpp:185
+#: widgets/kmymoneyonlinequoteconfig.cpp:188
+#: widgets/kmymoneyonlinequoteconfig.cpp:211
+msgid "New Quote Source"
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:77 dialogs/rc.cpp:788
+msgid "Clear &All"
+msgstr "&Neteja-ho tot"
+
+#: dialogs/ksplittransactiondlg.cpp:79
+msgid "Clear all splits"
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:80
+msgid "Use this to clear all splits of this transaction"
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:84
+#, fuzzy
+msgid "&Merge"
+msgstr "Tots els estats"
+
+#: dialogs/ksplittransactiondlg.cpp:183
+msgid ""
+"The total amount of this transaction is %1 while the sum of the splits is %"
+"2. The remaining %3 are unassigned."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:191
+#, c-format
+msgid "Change &total amount of transaction to %1."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:194
+msgid "&Distribute difference of %1 among all splits."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:203
+#, c-format
+msgid "&Leave total amount of transaction at %1."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:205
+msgid "&Leave %1 unassigned."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:275
+msgid ""
+"You are about to delete all splits of this transaction. Do you really want "
+"to continue?"
+msgstr ""
+"Esteu a punt d'esborrar tots els desglossaments d'aquest assentament. "
+"Realment voleu continuar?"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:97
+msgid "Use this to create a new QIF import/export profile"
+msgstr "Useu aquest per crear un nou perfil d'importació/exportació QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:148
+#: dialogs/mymoneyqifprofileeditor.cpp:403 dialogs/rc.cpp:797
+msgid "QIF Profile Editor"
+msgstr "Editor del perfil QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:150
+msgid "QIF Profile Selector"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:236
+msgid "The default QIF profile"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:404
+#: dialogs/mymoneyqifprofileeditor.cpp:417
+msgid "Enter new profile name"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:436
+msgid "Do you really want to delete profile '%1'?"
+msgstr ""
+
+#: dialogs/kgpgkeyselectiondlg.cpp:38
+#, fuzzy
+msgid "Select additional keys"
+msgstr "No en seleccionis cap"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:48 widgets/rc.cpp:25
+msgid "User identification"
+msgstr ""
+
+#: dialogs/kendingbalancedlg.cpp:71
+#, fuzzy
+msgid ""
+"Please enter the following fields with the information as you find them on "
+"your statement. Make sure to enter all values in <b>%1</b>."
+msgstr ""
+"Si us plau, ompliu els camps següents amb la informació sol·licitada, tal i "
+"com figura en el vostre extracte."
+
+#: dialogs/kendingbalancedlg.cpp:124
+#, c-format
+msgid "Last reconciled statement: %1"
+msgstr "Darrer extracte conciliat: %1"
+
+#: dialogs/kendingbalancedlg.cpp:437 dialogs/kendingbalancedlg.cpp:577
+#: dialogs/rc.cpp:137
+msgid "Adjustment transaction"
+msgstr ""
+
+#: dialogs/kendingbalancedlg.cpp:510
+msgid ""
+"KMyMoney has calculated the following amounts for interest and amortization "
+"according to recorded payments between %1 and %2."
+msgstr ""
+
+#: dialogs/kbalancechartdlg.cpp:59
+#, fuzzy, c-format
+msgid "Balance of %1"
+msgstr "Saldo: %1"
+
+#: dialogs/kbalancechartdlg.cpp:70
+#, fuzzy
+msgid "%1 Balance History"
+msgstr "Històric de cotitzacions"
+
+#: dialogs/kmymoneysplittable.cpp:98
+msgid "Split Options"
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:99 dialogs/rc.cpp:731
+#: widgets/kmymoneypriceview.cpp:149
+#, fuzzy
+msgid "Edit..."
+msgstr "Edita ..."
+
+#: dialogs/kmymoneysplittable.cpp:100
+msgid "Duplicate"
+msgstr "Duplica"
+
+#: dialogs/kmymoneysplittable.cpp:102
+msgid "Delete ..."
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:275
+#, fuzzy
+msgid ""
+"_: Duplicate split\n"
+"CTRL+c"
+msgstr "Duplica"
+
+#: dialogs/kmymoneysplittable.cpp:562
+msgid "will be calculated"
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:648
+msgid ""
+"You are about to delete the selected split. Do you really want to continue?"
+msgstr ""
+
+#: dialogs/rc.cpp:1
+msgid "Account selection"
+msgstr "Selecció de compte"
+
+#: dialogs/rc.cpp:3
+msgid "Account to import to"
+msgstr "Compte on s'importarà"
+
+#: dialogs/rc.cpp:6 dialogs/rc.cpp:170 widgets/rc.cpp:169
+#, fuzzy
+msgid "Skip"
+msgstr "&Omet"
+
+#: dialogs/rc.cpp:8
+msgid ""
+"Use this dialog to backup your data. \n"
+"\n"
+"Please make sure you have a disk inserted and that the drive is ready. Then "
+"choose the mount point from either the Choose button or by entering the path "
+"in the available box.\n"
+"\n"
+"Click OK to perform the backup. If your system does not use an automounter, "
+"make sure you mark the checkbox below to \"mount this directory before "
+"backing up.\""
+msgstr ""
+
+#: dialogs/rc.cpp:9
+msgid "Device options"
+msgstr "Opcions del dispositiu"
+
+#: dialogs/rc.cpp:10
+msgid ""
+"_: This is the mount point\n"
+"Mount Point:"
+msgstr ""
+
+#: dialogs/rc.cpp:11
+#, fuzzy
+msgid "Choose..."
+msgstr "E&scolliu..."
+
+#: dialogs/rc.cpp:12
+msgid "Mount this directory before backing up."
+msgstr "Munta aquest directori abans de fer la còpia de seguretat."
+
+#: dialogs/rc.cpp:15
+#, fuzzy
+msgid "Reassign categories"
+msgstr "Categories de Despeses"
+
+#: dialogs/rc.cpp:16
+msgid ""
+"The transactions, schedules and budgets associated with the selected "
+"category need to be re-assigned to a different category before the selected "
+"category can be deleted. Please select a category from the list below."
+msgstr ""
+
+#: dialogs/rc.cpp:17
+#, fuzzy
+msgid "Available categories:"
+msgstr "Categories d'Ingressos"
+
+#: dialogs/rc.cpp:21
+#, fuzzy
+msgid ""
+"Please choose the type of import you wish to perform. A simple "
+"explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Si us plau, escolliu el tipus d'importació que voleu fer. Una explicació "
+"senzilla\n"
+"del tipus d'importació està disponible al dessota i s'actualitza quan "
+"escolliu un\n"
+"ítem de la "
+
+#: dialogs/rc.cpp:23
+msgid "QIF"
+msgstr "QIF"
+
+#: dialogs/rc.cpp:24
+msgid "CSV"
+msgstr "CSV"
+
+#: dialogs/rc.cpp:25
+msgid "Some descripton"
+msgstr "Alguna descripció"
+
+#: dialogs/rc.cpp:28
+msgid "Confirm Manual Enter"
+msgstr "Confirma l'entrada manual"
+
+#: dialogs/rc.cpp:29
+#, fuzzy
+msgid "The following changes have been made to the transaction data:"
+msgstr "S'han fet alguns canvis a les dades de l'assentament."
+
+#: dialogs/rc.cpp:30
+msgid "Please choose what you wish to do with the above changes"
+msgstr "Si us plau, escolliu què voleu fer amb els canvis de sobre"
+
+#: dialogs/rc.cpp:31
+msgid ""
+"Discard the changes and enter the original transaction into the register."
+msgstr "Descarta els canvis i entra l'assentament original al llibre."
+
+#: dialogs/rc.cpp:32
+msgid "Enter these new values this one time, for this occurence only."
+msgstr ""
+
+#: dialogs/rc.cpp:33
+msgid "Set all further occurences in this schedule to be these values."
+msgstr ""
+
+#: dialogs/rc.cpp:36
+msgid "CSV Dialog"
+msgstr "Diàleg CSV"
+
+#: dialogs/rc.cpp:37
+msgid ""
+"CSV Dialog. Choose a file and then click on Run. You can view your "
+"progress at\n"
+"the bottom of the screen.\n"
+"\n"
+"You can cancel the process at any time by clicking on the Cancel button."
+msgstr ""
+"Diàleg CSV. Escolliu un fitxer i cliqueu a Executa. Podeu veure la "
+"progressió \n"
+"a la part inferior de la pantalla.\n"
+"\n"
+"Podeu cancełlar el procés en qualsevol instant clicant el botó Cancel·la."
+
+#: dialogs/rc.cpp:38
+msgid "Choose the csv file:"
+msgstr "Escolliu el fitxer csv:"
+
+#: dialogs/rc.cpp:39
+#, fuzzy
+msgid "Browse"
+msgstr "&Explora"
+
+#: dialogs/rc.cpp:40
+msgid "Between These Dates"
+msgstr "Entre aquestes dates"
+
+#: dialogs/rc.cpp:41 dialogs/rc.cpp:196
+msgid "Start on:"
+msgstr "Comença el:"
+
+#: dialogs/rc.cpp:42 dialogs/rc.cpp:195
+msgid "End on:"
+msgstr "Acaba el:"
+
+#: dialogs/rc.cpp:43
+#, fuzzy
+msgid "Run"
+msgstr "&Executa"
+
+#: dialogs/rc.cpp:44
+msgid "Progress Info"
+msgstr "Informació de progrés"
+
+#: dialogs/rc.cpp:45
+msgid "Processing Account:"
+msgstr "S'està processant el compte:"
+
+#: dialogs/rc.cpp:47
+msgid "Processing Transaction:"
+msgstr "S'està processant l'assentament:"
+
+#: dialogs/rc.cpp:48
+msgid "0 of 0"
+msgstr "0 de 0"
+
+#: dialogs/rc.cpp:50
+#, fuzzy
+msgid "Exchange Rate/Price Editor"
+msgstr "Editor de ràtios de canvi"
+
+#: dialogs/rc.cpp:55
+msgid "Convert from"
+msgstr "Converteix de"
+
+#: dialogs/rc.cpp:58
+msgid "Convert to"
+msgstr "Converteix a"
+
+#: dialogs/rc.cpp:61
+#, fuzzy
+msgid "To amount"
+msgstr "Total net"
+
+#: dialogs/rc.cpp:62
+msgid "Exchange rate / Price"
+msgstr "Ràtio de canvi / cotització"
+
+#: dialogs/rc.cpp:64
+msgid ""
+"xx\n"
+"xx"
+msgstr ""
+"xx\n"
+"xx"
+
+#: dialogs/rc.cpp:68
+msgid "Currencies"
+msgstr "Divises"
+
+#: dialogs/rc.cpp:72
+msgid "real ID"
+msgstr ""
+
+#: dialogs/rc.cpp:73 dialogs/rc.cpp:722
+msgid "ID"
+msgstr "ID"
+
+#: dialogs/rc.cpp:74
+msgid "X"
+msgstr "X"
+
+#: dialogs/rc.cpp:76 dialogs/rc.cpp:459
+msgid "Online Source"
+msgstr ""
+
+#: dialogs/rc.cpp:78 dialogs/rc.cpp:278 dialogs/rc.cpp:312 dialogs/rc.cpp:684
+msgid "F1"
+msgstr "F1"
+
+#: dialogs/rc.cpp:80
+msgid "If this button is not activated, select the base currency first."
+msgstr ""
+
+#: dialogs/rc.cpp:81
+msgid ""
+"Press this button to close the dialog. If the button is not activated, "
+"select your base currency."
+msgstr ""
+
+#: dialogs/rc.cpp:82
+msgid "Edit Equity"
+msgstr ""
+
+#: dialogs/rc.cpp:86 dialogs/rc.cpp:410
+msgid "Smallest fraction:"
+msgstr "Fracció menor:"
+
+#: dialogs/rc.cpp:87 dialogs/rc.cpp:408 dialogs/rc.cpp:440
+msgid "1 /"
+msgstr "1 /"
+
+#: dialogs/rc.cpp:88 dialogs/rc.cpp:405
+msgid "Investment Type:"
+msgstr "Tipus d'inversió:"
+
+#: dialogs/rc.cpp:89 dialogs/rc.cpp:404
+msgid "Equity Name:"
+msgstr ""
+
+#: dialogs/rc.cpp:90 dialogs/rc.cpp:409
+msgid "Market Symbol:"
+msgstr ""
+
+#: dialogs/rc.cpp:91
+msgid "Price History"
+msgstr "Històric de cotitzacions"
+
+#: dialogs/rc.cpp:97
+#, fuzzy
+msgid "Edit Scheduled transaction"
+msgstr "Assentaments programats"
+
+#: dialogs/rc.cpp:98
+#, fuzzy
+msgid "Schedule name:"
+msgstr "Nom de la programació:"
+
+#: dialogs/rc.cpp:99
+msgid "Frequency:"
+msgstr "Freqüència:"
+
+#: dialogs/rc.cpp:100
+msgid "Number of selected periods between entries"
+msgstr ""
+
+#: dialogs/rc.cpp:101
+#, fuzzy
+msgid "Payment information"
+msgstr "Informació de pagament"
+
+#: dialogs/rc.cpp:105 dialogs/rc.cpp:160 dialogs/rc.cpp:247 dialogs/rc.cpp:752
+#: widgets/register.cpp:569
+msgid "C"
+msgstr "V"
+
+#: dialogs/rc.cpp:113
+#, fuzzy
+msgid "Do nothing"
+msgstr "No facis res"
+
+#: dialogs/rc.cpp:116
+msgid "If this schedule occurs on the weekend:"
+msgstr "Si aquesta programació s'esdevé en cap de setmana:"
+
+#: dialogs/rc.cpp:117
+#, fuzzy
+msgid "The amount is an estimate because it varies for each payment"
+msgstr "És una estimació atès que l'import varia"
+
+#: dialogs/rc.cpp:118
+#, fuzzy
+msgid "Enter this schedule into the register automatically when it is due"
+msgstr "Entra-ho al llibre automàticament"
+
+#: dialogs/rc.cpp:119
+#, fuzzy
+msgid "This schedule will end at some time"
+msgstr "Aquesta seqüència acabarà en algun moment"
+
+#: dialogs/rc.cpp:120
+msgid "Number of transactions remaining:"
+msgstr "Nombre d'assentaments que manquen:"
+
+#: dialogs/rc.cpp:121
+msgid "Date of final transaction:"
+msgstr "Data del darrer assentament:"
+
+#: dialogs/rc.cpp:125
+msgid "Reconciliation Wizard"
+msgstr "Assistent per a la conciliació"
+
+#: dialogs/rc.cpp:127
+msgid ""
+"Reconciling your account assures, that your recordings match those of your "
+"institution and that there are no mistakes on either side. You should "
+"reconcile your account whenever you receive a statement from your "
+"institution.\n"
+"\n"
+"All relevant information necessary for this process is usually printed on "
+"your statement.\n"
+"\n"
+"On the next page you will verify, that the starting and ending balance are "
+"matching those on your statement. If not, please modify the figures."
+msgstr ""
+"Conciliant el compte us assegureu que els vostres registres coincideixen amb "
+"els de la vostra institució, i que no hi ha errors en cap de les dues "
+"bandes. Hauríeu de conciliar el vostre compte cada vegada que rebeu un "
+"extracte de la institució.\n"
+"\n"
+"Normalment l'esmentat extracte conté tota la informació rellevant per a "
+"aquest procés.\n"
+"\n"
+"En la pàgina següent verificareu que els saldos inicial i final del compte "
+"coincideixen amb els del vostre extracte. Si no és així, modifiqueu les "
+"xifres."
+
+#: dialogs/rc.cpp:129
+msgid ""
+"KMyMoney calculates your loan payments automatically. The amounts can "
+"deviate from those calculated by the creditor. Therefore, you possibly have "
+"to adjust amortization, interest and other costs according to your "
+"statement.\n"
+"\n"
+"Please enter the following information found on your statement:"
+msgstr ""
+
+#: dialogs/rc.cpp:130
+msgid "Ending date of statement"
+msgstr "Data final de l'extracte"
+
+#: dialogs/rc.cpp:131
+msgid "Starting date of statement"
+msgstr "Data inicial de l'extracte"
+
+#: dialogs/rc.cpp:132
+msgid "Verify payments"
+msgstr "Verifica els pagaments"
+
+#: dialogs/rc.cpp:133 dialogs/rc.cpp:148 dialogs/rc.cpp:476 dialogs/rc.cpp:477
+#: dialogs/rc.cpp:508 dialogs/rc.cpp:513 dialogs/rc.cpp:518 dialogs/rc.cpp:532
+#: dialogs/rc.cpp:539 dialogs/rc.cpp:540 dialogs/rc.cpp:541 dialogs/rc.cpp:542
+#: dialogs/rc.cpp:543 dialogs/rc.cpp:552 dialogs/rc.cpp:553 dialogs/rc.cpp:554
+#: dialogs/rc.cpp:555 dialogs/rc.cpp:556 dialogs/rc.cpp:565 dialogs/rc.cpp:566
+#: dialogs/rc.cpp:567 dialogs/rc.cpp:568 dialogs/rc.cpp:569 dialogs/rc.cpp:578
+#: dialogs/rc.cpp:579 dialogs/rc.cpp:580 dialogs/rc.cpp:581 dialogs/rc.cpp:582
+#: dialogs/rc.cpp:591 dialogs/rc.cpp:592 dialogs/rc.cpp:593 dialogs/rc.cpp:594
+#: dialogs/rc.cpp:595 dialogs/rc.cpp:603 dialogs/rc.cpp:604 dialogs/rc.cpp:605
+#: dialogs/rc.cpp:606 dialogs/rc.cpp:607 dialogs/rc.cpp:618 dialogs/rc.cpp:619
+#: dialogs/rc.cpp:621 dialogs/rc.cpp:636 dialogs/rc.cpp:637 dialogs/rc.cpp:638
+#: dialogs/rc.cpp:639 dialogs/rc.cpp:640 dialogs/rc.cpp:641 dialogs/rc.cpp:651
+#: dialogs/rc.cpp:652 dialogs/rc.cpp:654 dialogs/rc.cpp:657 dialogs/rc.cpp:658
+#: dialogs/rc.cpp:659 dialogs/rc.cpp:664 dialogs/rc.cpp:665 dialogs/rc.cpp:668
+#: dialogs/rc.cpp:670 dialogs/rc.cpp:672 dialogs/rc.cpp:674 dialogs/rc.cpp:676
+#: dialogs/rc.cpp:678 dialogs/rc.cpp:681 dialogs/rc.cpp:823 widgets/rc.cpp:167
+msgid "1"
+msgstr "1"
+
+#: dialogs/rc.cpp:136
+msgid ""
+"If your statement shows different amounts, please cancel this dialog and "
+"correct the false transactions or correct the values in this dialog. In the "
+"later case, KMyMoney will create an adjustment transaction and add it to the "
+"ledger."
+msgstr ""
+
+#: dialogs/rc.cpp:138
+msgid ""
+"In order to create the adjustment transaction, KMyMoney requires an account "
+"and possibly an interest category to assign the differences to. Please "
+"select an account and - if necessary - a category."
+msgstr ""
+
+#: dialogs/rc.cpp:140
+msgid "Interest-Category"
+msgstr ""
+
+#: dialogs/rc.cpp:141
+msgid "Restarting postponed reconciliation"
+msgstr "S'està reengegant una conciliació posposada"
+
+#: dialogs/rc.cpp:142
+msgid ""
+"You have previously postponed the reconciliation of this account. If you "
+"have entered charges or interests the last time you started reconciling this "
+"account you can modify these in the ledger later on.\n"
+"\n"
+"It is important, that you continue with the same statement you used when you "
+"postponed the reconciliation.\n"
+"\n"
+"All information you have entered into this wizard will be shown and all "
+"transactions that you already cleared are marked with a 'C'."
+msgstr ""
+
+#: dialogs/rc.cpp:143
+msgid "Statement Information"
+msgstr "Informació de l'extracte"
+
+#: dialogs/rc.cpp:144 dialogs/rc.cpp:315 dialogs/rc.cpp:317 dialogs/rc.cpp:320
+#: dialogs/rc.cpp:321 dialogs/rc.cpp:329 dialogs/rc.cpp:330 dialogs/rc.cpp:333
+#: dialogs/rc.cpp:334 dialogs/rc.cpp:335 dialogs/rc.cpp:336 dialogs/rc.cpp:366
+msgid "x"
+msgstr ""
+
+#: dialogs/rc.cpp:145
+msgid "Statement date:"
+msgstr "Data de l'extracte:"
+
+#: dialogs/rc.cpp:146
+msgid "Starting balance of this statement:"
+msgstr "Saldo inicial de l'extracte:"
+
+#: dialogs/rc.cpp:147
+msgid "Ending balance of this statement:"
+msgstr "Saldo final de l'extracte:"
+
+#: dialogs/rc.cpp:149
+msgid "Interest / Charges"
+msgstr "Interès / Càrrecs"
+
+#: dialogs/rc.cpp:150
+#, fuzzy
+msgid ""
+"If necessary, enter information about interest or charges here. KMyMoney "
+"will create transactions and clear them directly for you."
+msgstr ""
+"Si s'escau, entreu aquí la informació sobre interessos i càrrecs. KMyMoney "
+"s'encarregarà de crear els assentaments per vós i de verificar-los "
+"directament."
+
+#: dialogs/rc.cpp:153
+msgid "Charges"
+msgstr "Càrrecs"
+
+#: dialogs/rc.cpp:154
+#, fuzzy
+msgid "Enter Schedule"
+msgstr "Nova programació"
+
+#: dialogs/rc.cpp:155
+msgid "Schedule Details"
+msgstr ""
+
+#: dialogs/rc.cpp:156 dialogs/rc.cpp:348 dialogs/rc.cpp:389 widgets/rc.cpp:164
+msgid "Name:"
+msgstr "Nom:"
+
+#: dialogs/rc.cpp:157 dialogs/rc.cpp:351 widgets/rc.cpp:165
+msgid "Type:"
+msgstr "Tipus:"
+
+#: dialogs/rc.cpp:168
+#, fuzzy
+msgid "Enter"
+msgstr "Accepta"
+
+#: dialogs/rc.cpp:169
+msgid ""
+"Enter the transaction and advance the next due date of this schedule to the "
+"next payment date."
+msgstr ""
+
+#: dialogs/rc.cpp:171
+msgid ""
+"Do not enter the transaction but advance the next due date of this schedule "
+"to the next payment date."
+msgstr ""
+
+#: dialogs/rc.cpp:172
+#, fuzzy
+msgid "Ignore"
+msgstr "Increment"
+
+#: dialogs/rc.cpp:173
+msgid ""
+"Do not enter or skip payments for this schedule but continue with the next "
+"schedule."
+msgstr ""
+
+#: dialogs/rc.cpp:175
+msgid "Cancel processing of schedule entry."
+msgstr ""
+
+#: dialogs/rc.cpp:176
+msgid "Update Stock and Currency Prices"
+msgstr "Actualitza les cotitzacions de valors i divises"
+
+#: dialogs/rc.cpp:177
+msgid "List of known Equities, and the date they were last updated on."
+msgstr ""
+
+#: dialogs/rc.cpp:179
+#, fuzzy
+msgid "Update All"
+msgstr "&Amunt"
+
+#: dialogs/rc.cpp:180
+msgid "Update Selected"
+msgstr ""
+
+#: dialogs/rc.cpp:181
+msgid "Status:"
+msgstr "Estat:"
+
+#: dialogs/rc.cpp:184
+msgid "QIF Export"
+msgstr "Exportació QIF"
+
+#: dialogs/rc.cpp:185
+msgid ""
+"From this dialog you are able to export transactions to a quicken compatible "
+"file, (known as a QIF file, because of the extension). Please enter the "
+"path to the QIF file or select it by clicking on the Browse button.\n"
+"\n"
+"You can choose the file's path, the account and the format of the QIF file "
+"(profile). Choose Account to export all the transactions between the "
+"specified dates or just categories. You can also limit the transactions "
+"that are exported by start and ending date. Once you have pressed the "
+"Export button a message box will appear when the export has completed "
+"detailing how many transactions, categories and payees were exported."
+msgstr ""
+"Des d'aquest diàleg podeu exportar assentaments a un fitxer compatible amb "
+"Quicken (anomenat fitxer QIF a causa de l'extensió). Si us plau introduïu "
+"la ruta al fitxer QIF o escolliu-lo clicant el botó «Fulleja».\n"
+"\n"
+"Podeu escollir la ruta del fitxer, el compte i el format del fitxer QIF "
+"(perfil). En els continguts a exportar, escolliu «Compte» per tal d'exportar "
+"tots els assentaments entre les dates especificades, o tan sols Categories. "
+"També podeu limitar per dates inicial i final els assentaments que "
+"s'exportaran. Una vegada hàgiu clicat el botó d'exportar, us apareixerà una "
+"caixa de missatge quan s'hagi completat l'exportació, detallant quants "
+"assentaments, categories i beneficiaris s'han exportat."
+
+#: dialogs/rc.cpp:186
+msgid "File to export to:"
+msgstr "Fitxer on s'exportarà:"
+
+#: dialogs/rc.cpp:188
+msgid "Account to export"
+msgstr "Compte a exportar"
+
+#: dialogs/rc.cpp:189 dialogs/rc.cpp:297
+msgid "QIF Profile"
+msgstr "Perfil QIF"
+
+#: dialogs/rc.cpp:190 dialogs/rc.cpp:298 dialogs/rc.cpp:362
+#: widgets/kmymoneypriceview.cpp:145
+msgid "New..."
+msgstr "Nou..."
+
+#: dialogs/rc.cpp:191
+msgid "Contents to Export"
+msgstr "Continguts a exportar"
+
+#: dialogs/rc.cpp:194
+msgid "Date Range"
+msgstr "Rang de dates"
+
+#: dialogs/rc.cpp:199
+msgid "Search transactions"
+msgstr "Cerca assentaments"
+
+#: dialogs/rc.cpp:200
+msgid "Criteria"
+msgstr ""
+
+#: dialogs/rc.cpp:201
+msgid "Define your search criteria"
+msgstr "Definiu els vostres criteris de cerca"
+
+#: dialogs/kfindtransactiondlg.cpp:169 dialogs/rc.cpp:202
+msgid "Text"
+msgstr "Text"
+
+#: dialogs/rc.cpp:203
+#, fuzzy
+msgid "Contains"
+msgstr "Préstecs"
+
+#: dialogs/rc.cpp:204
+#, fuzzy
+msgid "Does not contain"
+msgstr "No facis res"
+
+#: dialogs/rc.cpp:205
+msgid "Treat text as regular expression"
+msgstr "Tracta el text com una expressió regular"
+
+#: dialogs/rc.cpp:206
+msgid "Case sensitive"
+msgstr "Sensible a majúscules"
+
+#: dialogs/rc.cpp:209
+msgid "Range"
+msgstr "Rang"
+
+#: dialogs/rc.cpp:210
+#, fuzzy
+msgid ""
+"_: To (Date)\n"
+"To"
+msgstr "Fins"
+
+#: dialogs/rc.cpp:211
+#, fuzzy
+msgid ""
+"_: From (Date)\n"
+"From"
+msgstr "Del dia"
+
+#: dialogs/rc.cpp:213
+msgid "Search this amount"
+msgstr "Cerca aquesta quantitat"
+
+#: dialogs/rc.cpp:214
+msgid "Search amount in the range"
+msgstr "Cerca una quantitat en el rang"
+
+#: dialogs/rc.cpp:215
+#, fuzzy
+msgid ""
+"_: to (amount)\n"
+"to"
+msgstr "Total net"
+
+#: dialogs/rc.cpp:216
+#, fuzzy
+msgid ""
+"_: from (amount)\n"
+"from"
+msgstr "Total brut"
+
+#: dialogs/rc.cpp:220
+msgid "Select transactions without payees"
+msgstr "Selecciona els assentaments sense beneficiaris"
+
+#: dialogs/rc.cpp:221
+msgid "Select all"
+msgstr "Selecciona-ho tot"
+
+#: dialogs/rc.cpp:222
+msgid "Select none"
+msgstr "No en seleccionis cap"
+
+#: dialogs/rc.cpp:224
+msgid "Validity"
+msgstr "Validesa"
+
+#: dialogs/rc.cpp:226
+msgid "All states"
+msgstr "Tots els estats"
+
+#: dialogs/rc.cpp:230
+msgid "All types"
+msgstr "Tots els tipus"
+
+#: dialogs/rc.cpp:234
+msgid "Any transaction"
+msgstr "Qualsevol assentament"
+
+#: dialogs/rc.cpp:235
+msgid "Valid transaction"
+msgstr "Assentament vàlid"
+
+#: dialogs/rc.cpp:236
+msgid "Invalid transaction"
+msgstr "Assentament invàlid"
+
+#: dialogs/rc.cpp:237
+msgid "State"
+msgstr "Estat"
+
+#: dialogs/rc.cpp:238
+msgid "Search this number"
+msgstr "Cerca aquest número"
+
+#: dialogs/rc.cpp:239
+msgid "Search number in range"
+msgstr "Cerca un número en el rang"
+
+#: dialogs/rc.cpp:240
+msgid ""
+"_: to (number)\n"
+"to"
+msgstr ""
+
+#: dialogs/rc.cpp:241
+msgid ""
+"_: from (number)\n"
+"from"
+msgstr ""
+
+#: dialogs/rc.cpp:242
+msgid "text"
+msgstr "text"
+
+#: dialogs/rc.cpp:243
+msgid "warning"
+msgstr ""
+
+#: dialogs/rc.cpp:244
+#, fuzzy
+msgid "Result"
+msgstr "Inicialitza"
+
+#: dialogs/rc.cpp:254
+msgid "F"
+msgstr "F"
+
+#: dialogs/rc.cpp:257 dialogs/rc.cpp:844
+msgid "&Reset"
+msgstr "&Inicialitza"
+
+#: dialogs/rc.cpp:258
+#, fuzzy
+msgid "&Find"
+msgstr "&Acaba"
+
+#: dialogs/rc.cpp:259
+msgid "GnuCash Import Options"
+msgstr "Opcions d'importació des de GnuCash"
+
+#: dialogs/rc.cpp:260
+msgid "Use 'Help' for more information on these options"
+msgstr ""
+
+#: dialogs/rc.cpp:261
+msgid "Investment Handling"
+msgstr "Tractament de les inversions"
+
+#: dialogs/rc.cpp:262
+msgid "One investment account for each stock"
+msgstr "Un compte d'inversions per cada valor"
+
+#: dialogs/rc.cpp:263
+msgid "One investment account for all stocks"
+msgstr "Un compte d'inversions per tots els valors"
+
+#: dialogs/rc.cpp:264
+msgid "Prompt for an investment account for each stock"
+msgstr "Demana un compte d'inversions per cada valor"
+
+#: dialogs/rc.cpp:265
+#, fuzzy
+msgid "Online price quotes"
+msgstr "Cotitzacions en línia"
+
+#: dialogs/rc.cpp:266
+msgid "Use Finance::Quote for share price quotes"
+msgstr ""
+
+#: dialogs/rc.cpp:267
+msgid "Scheduled Transactions"
+msgstr "Assentaments programats"
+
+#: dialogs/rc.cpp:268
+msgid "Drop suspect scheduled transactions"
+msgstr "Llença els assentaments programats sospitosos"
+
+#: dialogs/rc.cpp:269
+msgid "Decoding option"
+msgstr "Opció de descodificació"
+
+#: dialogs/rc.cpp:270
+msgid "Decode using"
+msgstr ""
+
+#: dialogs/rc.cpp:271
+#, fuzzy
+msgid "Transaction Notes option"
+msgstr "Assentaments"
+
+#: dialogs/rc.cpp:272
+#, fuzzy
+msgid "Use transaction notes on non-split transactions"
+msgstr "Insereix el tipus de transacció en el camp Núm. dels assentaments nous"
+
+#: dialogs/rc.cpp:273
+msgid "Debug Options"
+msgstr ""
+
+#: dialogs/rc.cpp:274
+msgid "General debug data"
+msgstr ""
+
+#: dialogs/rc.cpp:275
+msgid "Display XML data"
+msgstr ""
+
+#: dialogs/rc.cpp:276
+msgid "Anonymize data"
+msgstr "Anonimitza les dades"
+
+#: dialogs/rc.cpp:281
+msgid "Online Quotes - Select price source"
+msgstr "Cotitzacions en línia - Escolliu la font de les cotitzacions"
+
+#: dialogs/rc.cpp:284
+msgid ""
+"This price source is not known to KMyMoney. Please select an option below."
+msgstr ""
+"El KMyMoney no coneix aquesta font de cotitzacions. Si us plau, escolliu una "
+"opció del dessota."
+
+#: dialogs/rc.cpp:285
+#, fuzzy
+msgid "Do not perform online quotes for this investment"
+msgstr "&No utilitzis les cotitzacions en línia per aquesta inversió"
+
+#: dialogs/rc.cpp:286
+#, fuzzy
+msgid "Select a known KMyMoney source from the list below"
+msgstr "Escolliu una font coneguda pel KMyMoney de la llista del &dessota"
+
+#: dialogs/rc.cpp:287
+msgid ""
+"Use the following name for the price source.\n"
+"(Click Help for further information.)"
+msgstr ""
+
+#: dialogs/rc.cpp:288
+msgid "Always use this selection for this price source."
+msgstr ""
+
+#: dialogs/rc.cpp:289
+msgid "QIF Import"
+msgstr "Importació QIF"
+
+#: dialogs/rc.cpp:290
+msgid ""
+"From this dialog you are able to import transactions from a Quicken<b>&trade;"
+"</b> compatible file, (known as a QIF file, because of the extension).<p>\n"
+"\n"
+"Please enter the path to the QIF file or select it by clicking on the Browse "
+"button. Once you have the file's path press the Import button and KMyMoney "
+"will import all the transactions, categories and payees it finds."
+msgstr ""
+"Des d'aquest diàleg podeu importar assentaments des d'un fitxer compatible "
+"amb Quicken<b>&trade;</b> (anomenat fitxer QIF a causa de l'extensió).<p>\n"
+"\n"
+" Si us plau introduïu la ruta al fitxer QIF o escolliu-lo clicant el botó "
+"«Fulleja». Una vegada tingueu la ruta al fitxer, cliqueu el botó «Importa» i "
+"el KMyMoney importarà tots els assentaments, categories i beneficiaris que "
+"trobi."
+
+#: dialogs/rc.cpp:291
+msgid "QIF File to Import:"
+msgstr "Fitxer QIF a importar:"
+
+#: dialogs/rc.cpp:292
+msgid "Import options"
+msgstr "Opcions d'importació"
+
+#: dialogs/rc.cpp:293
+#, fuzzy
+msgid "Bank statement"
+msgstr "Extracte:"
+
+#: dialogs/rc.cpp:294
+#, fuzzy
+msgid "Other application"
+msgstr "Ubicació del filtre de sortida"
+
+#: dialogs/rc.cpp:295
+msgid ""
+"Select <b>Bank statement</b> turns on automatic category matching which is "
+"turned off in case of <b>Historic data</b>. Use the latter if you import "
+"files from other Personal Finance Management software."
+msgstr ""
+
+#: dialogs/rc.cpp:296
+#, fuzzy
+msgid "Source of QIF"
+msgstr "Font"
+
+#: dialogs/rc.cpp:302
+msgid "Verify Import"
+msgstr ""
+
+#: dialogs/rc.cpp:304
+#, fuzzy
+msgid "Ok"
+msgstr "&Accepta"
+
+#: dialogs/rc.cpp:306
+#, fuzzy
+msgid "MyDialog"
+msgstr "Diàleg CSV"
+
+#: dialogs/rc.cpp:310
+#, fuzzy
+msgid "File Information"
+msgstr "Informació del beneficiari"
+
+#: dialogs/rc.cpp:316
+#, fuzzy
+msgid "Last modified on"
+msgstr "Mes anterior"
+
+#: dialogs/rc.cpp:319
+#, fuzzy
+msgid "Base currency"
+msgstr "Nova divisa"
+
+#: dialogs/rc.cpp:322
+#, fuzzy
+msgid "Created on"
+msgstr "&Crea"
+
+#: dialogs/rc.cpp:325
+#, fuzzy
+msgid "Accounts/Categories"
+msgstr "Categories"
+
+#: dialogs/rc.cpp:328
+#, fuzzy
+msgid "Closed"
+msgstr "&Tanca"
+
+#: dialogs/rc.cpp:331
+#, fuzzy
+msgid "Prices"
+msgstr "Preu"
+
+#: dialogs/rc.cpp:337
+#, fuzzy
+msgid "Splits"
+msgstr "Desglossa"
+
+#: dialogs/rc.cpp:338
+msgid "Price Editor"
+msgstr "Editor de cotitzacions"
+
+#: dialogs/rc.cpp:339
+msgid "Show all stored prices"
+msgstr "Mostra totes les cotitzacions emmagatzemades"
+
+#: dialogs/rc.cpp:343
+#, fuzzy
+msgid "Delete Range..."
+msgstr "Compte nou..."
+
+#: dialogs/rc.cpp:346
+msgid "New Account Dialog"
+msgstr "Diàleg de Compte Nou"
+
+#: dialogs/rc.cpp:349
+#, fuzzy
+msgid "Opening information"
+msgstr "Informació de pagament"
+
+#: dialogs/rc.cpp:350
+msgid "Currency:"
+msgstr "Divisa:"
+
+#: dialogs/rc.cpp:352 dialogs/rc.cpp:793
+msgid "Date:"
+msgstr "Data:"
+
+#: dialogs/rc.cpp:353
+#, fuzzy
+msgid "Balance:"
+msgstr "Saldo: "
+
+#: dialogs/rc.cpp:355
+#, fuzzy
+msgid "Last check number:"
+msgstr "Autoincrementa el número de xec"
+
+#: dialogs/rc.cpp:356
+msgid "Notes:"
+msgstr "Notes:"
+
+#: dialogs/rc.cpp:357
+msgid "No auto-VAT-assignment"
+msgstr "No calculis l'IVA automàticament"
+
+#: dialogs/rc.cpp:358 dialogs/rc.cpp:441
+#, fuzzy
+msgid "Price entry"
+msgstr "Històric de cotitzacions"
+
+#: dialogs/rc.cpp:359
+msgid "Preferred Account"
+msgstr "Compte preferit"
+
+#: dialogs/rc.cpp:363
+msgid "Number:"
+msgstr "Número:"
+
+#: dialogs/rc.cpp:364 dialogs/rc.cpp:395
+msgid "BIC"
+msgstr ""
+
+#: dialogs/rc.cpp:367
+#, fuzzy
+msgid "Hierarchy"
+msgstr "Cerca"
+
+#: dialogs/rc.cpp:368
+msgid "Subaccount"
+msgstr ""
+
+#: dialogs/rc.cpp:369
+msgid "Limits"
+msgstr ""
+
+#: dialogs/rc.cpp:370
+msgid ""
+"This page allows to setup certain limits. KMyMoney will warn you when the "
+"account balance reaches a limit."
+msgstr ""
+
+#: dialogs/rc.cpp:372
+#, fuzzy
+msgid "Absolute limit"
+msgstr "Delimitador de compte"
+
+#: dialogs/rc.cpp:373
+msgid "Maximum credit limit"
+msgstr ""
+
+#: dialogs/rc.cpp:374
+msgid "Minimum balance"
+msgstr ""
+
+#: dialogs/rc.cpp:375
+msgid "Early warning"
+msgstr ""
+
+#: dialogs/rc.cpp:377
+msgid "VAT details"
+msgstr ""
+
+#: dialogs/rc.cpp:378
+msgid "VAT category"
+msgstr ""
+
+#: dialogs/rc.cpp:379
+msgid "VAT percentage"
+msgstr ""
+
+#: dialogs/rc.cpp:380
+msgid "Enable auto VAT assignment"
+msgstr ""
+
+#: dialogs/rc.cpp:381
+msgid "Amount entered"
+msgstr ""
+
+#: dialogs/rc.cpp:382
+msgid "Gross amount"
+msgstr "Total brut"
+
+#: dialogs/rc.cpp:383
+msgid "Net amount"
+msgstr "Total net"
+
+#: dialogs/rc.cpp:384
+msgid "Include on Tax Reports"
+msgstr "Inclou en els informes d'impostos"
+
+#: dialogs/rc.cpp:387
+msgid "New Institution Dialog"
+msgstr "Diàleg d'institució nova"
+
+#: dialogs/rc.cpp:388
+msgid "Institution Details"
+msgstr "Detalls de la institució"
+
+#: dialogs/rc.cpp:390
+msgid "City:"
+msgstr "Ciutat:"
+
+#: dialogs/rc.cpp:394
+msgid "Routing Number:"
+msgstr "Codi:"
+
+#: dialogs/rc.cpp:398
+msgid "New Budget"
+msgstr ""
+
+#: dialogs/rc.cpp:403
+msgid "New Equity"
+msgstr ""
+
+#: dialogs/rc.cpp:406 dialogs/rc.cpp:407
+msgid "Trading Symbol of the stock or mutual fund, not required."
+msgstr ""
+
+#: dialogs/rc.cpp:414 dialogs/rc.cpp:415
+msgid "Name of the company, or mutual fund."
+msgstr ""
+
+#: dialogs/rc.cpp:418
+msgid "New File Dialog"
+msgstr ""
+
+#: dialogs/rc.cpp:419
+msgid ""
+"Use this dialog to enter personal information about yourself.\n"
+"\n"
+"All information is optional and is provided to personalize\n"
+"your KMyMoney file."
+msgstr ""
+"Empreu aquest diàleg per introduir la vostra informació personal.\n"
+"\n"
+"Tota la informació és optativa i s'utilitza per personalitzar \n"
+"el vostre fitxer KMyMoney."
+
+#: dialogs/rc.cpp:430
+msgid "New Investment wizard"
+msgstr "Assistent de nova inversió"
+
+#: dialogs/rc.cpp:431
+msgid "Investment Type"
+msgstr "Tipus d'inversió"
+
+#: dialogs/rc.cpp:432
+msgid "This wizard allows you to create a new investment."
+msgstr ""
+
+#: dialogs/rc.cpp:433
+msgid ""
+"The first step in this process requires to select the type of investment. "
+"The following steps collect more details about the investment from you."
+msgstr ""
+
+#: dialogs/rc.cpp:434
+msgid "Type of investment"
+msgstr "Tipus d'inversió"
+
+#: dialogs/rc.cpp:438
+msgid "Investment details"
+msgstr "Detalls de la inversió"
+
+#: dialogs/rc.cpp:439
+msgid ""
+"Enter the details below and click <b>Next</b> to continue entering the "
+"online update details."
+msgstr ""
+
+#: dialogs/rc.cpp:442 dialogs/rc.cpp:728
+msgid "Fraction"
+msgstr "Fracció"
+
+#: dialogs/rc.cpp:443
+msgid "Trading Currency"
+msgstr ""
+
+#: dialogs/rc.cpp:444
+msgid "Full name"
+msgstr ""
+
+#: dialogs/rc.cpp:445
+msgid "AMEX"
+msgstr ""
+
+#: dialogs/rc.cpp:446
+msgid "EUREX"
+msgstr ""
+
+#: dialogs/rc.cpp:447
+msgid "FUND"
+msgstr ""
+
+#: dialogs/rc.cpp:448
+msgid "NASDAQ"
+msgstr ""
+
+#: dialogs/rc.cpp:449
+msgid "NYSE"
+msgstr ""
+
+#: dialogs/rc.cpp:450
+msgid "XETRA"
+msgstr ""
+
+#: dialogs/rc.cpp:451
+msgid "Trading symbol"
+msgstr ""
+
+#: dialogs/rc.cpp:452
+msgid "Identification"
+msgstr "Identificació"
+
+#: dialogs/rc.cpp:453
+msgid "Enter the ticker symbol (e.g. RHAT)."
+msgstr ""
+
+#: dialogs/rc.cpp:454
+msgid "Enter the CUSIP/ISIN/WKN identification number here"
+msgstr ""
+
+#: dialogs/rc.cpp:455
+msgid "Trading market"
+msgstr ""
+
+#: dialogs/rc.cpp:456
+msgid "Online Update"
+msgstr ""
+
+#: dialogs/rc.cpp:457
+msgid ""
+"Select an online source and click <b>Finish</b> to store the investment "
+"data. If you don't want to use online updates, just leave the data as is."
+msgstr ""
+
+#: dialogs/rc.cpp:458
+msgid "Use Finance::Quote"
+msgstr ""
+
+#: dialogs/rc.cpp:460
+msgid "Factor"
+msgstr "Factor"
+
+#: dialogs/rc.cpp:461
+msgid "New Loan Wizard"
+msgstr "Assistent per a un nou préstec"
+
+#: dialogs/rc.cpp:462
+msgid "New Loan Account Wizard"
+msgstr "Assistent per a un nou compte de préstec"
+
+#: dialogs/rc.cpp:463
+msgid ""
+"\n"
+"Welcome to the New Loan Account Wizard which will guide you through the "
+"creation of a new loan e.g. for your home, your car or any other loan that "
+"you pay or gain interest for.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Benvingut a l'assistent per a un nou compte de préstec, el qual us guiarà a "
+"través de la creació d'un nou préstec per la vostra casa, el vostre cotxe o "
+"qualsevol altre préstec del qual pagueu o rebeu interessos.\n"
+"\n"
+"Si us plau, assegureu-vos que teniu a mà la informació rellevant. Normalment "
+"obtindreu aquesta informació del vostre contracte i del darrer rebut."
+
+#: dialogs/rc.cpp:464
+msgid "Edit Loan Account Wizard"
+msgstr "Assistent per a l'edició de comptes de préstec"
+
+#: dialogs/rc.cpp:465
+msgid ""
+"\n"
+"Welcome to the Edit Loan Account Wizard. Please use this wizard to modify "
+"information about your loan account.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Benvingut a l'assistent per a l'edició de comptes de préstec. Si us plau "
+"useu aquest assistent per modificar la informació del vostre compte de "
+"préstec.\n"
+"\n"
+"Prengueu cura de tenir tota la informació rellevant a l'abast. Habitualment "
+"l'obtindreu del contracte de préstec i del darrer rebut."
+
+#: dialogs/rc.cpp:467
+msgid ""
+"\n"
+"In the first step, KMyMoney will ask you some general information about the "
+"loan account to be created."
+msgstr ""
+"\n"
+"En el primer pas, KMyMoney us preguntarà algunes dades generals sobre el "
+"compte de préstec que s'ha de crear."
+
+#: dialogs/rc.cpp:468 dialogs/rc.cpp:522 dialogs/rc.cpp:610
+msgid "1. General Information"
+msgstr "1. Informació general"
+
+#: dialogs/rc.cpp:469
+msgid ""
+"\n"
+"2. Calculate Loan\n"
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"2. Càlcul del préstec\n"
+"\n"
+"3. Pagaments"
+
+#: dialogs/rc.cpp:470
+msgid "Edit selection"
+msgstr ""
+
+#: dialogs/rc.cpp:471
+msgid ""
+"\n"
+"Please select, which data of the loan you want to modify."
+msgstr ""
+
+#: dialogs/rc.cpp:472
+msgid "Modify the interest rate"
+msgstr ""
+
+#: dialogs/rc.cpp:473
+msgid "Modify additional fees"
+msgstr ""
+
+#: dialogs/rc.cpp:474
+msgid "Modify other loan information"
+msgstr ""
+
+#: dialogs/rc.cpp:475
+msgid "Effective date"
+msgstr ""
+
+#: dialogs/rc.cpp:478
+msgid "When should the changes become active?"
+msgstr ""
+
+#: dialogs/rc.cpp:479
+msgid "Lending or borrowing money"
+msgstr "Deixant o demanant diners"
+
+#: dialogs/rc.cpp:480
+msgid ""
+"\n"
+"Do you borrow or lend money?"
+msgstr ""
+"\n"
+"Esteu demanant o deixant diners?"
+
+#: dialogs/rc.cpp:483
+msgid "Name of the loan"
+msgstr "Nom del préstec"
+
+#: dialogs/rc.cpp:484
+msgid ""
+"\n"
+"How do you want to call this loan? Examples for names are 'car loan', "
+"'school loan', 'home owner loan'."
+msgstr ""
+"\n"
+"Com voleu anomenar aquest préstec? Exemples de noms són «préstec del cotxe», "
+"«préstec d'estudis» o «hipoteca»."
+
+#: dialogs/rc.cpp:486
+msgid "TextLabel6"
+msgstr ""
+
+#: dialogs/rc.cpp:487
+msgid "TextLabel7"
+msgstr ""
+
+#: dialogs/rc.cpp:488
+msgid "Type of interest"
+msgstr ""
+
+#: dialogs/rc.cpp:489
+msgid ""
+"\n"
+"Is the interest of this loan fixed over a period of time or is it adapted "
+"from time to time? If the interest rate changes during the amortization "
+"phase of the loan you should choose the option 'variable interest rate'."
+msgstr ""
+
+#: dialogs/rc.cpp:490
+msgid "Fixed interest rate"
+msgstr ""
+
+#: dialogs/rc.cpp:491
+msgid "Variable interest rate"
+msgstr ""
+
+#: dialogs/rc.cpp:492
+msgid "Payments?"
+msgstr ""
+
+#: dialogs/rc.cpp:493
+msgid ""
+"\n"
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?"
+msgstr ""
+
+#: dialogs/rc.cpp:494
+msgid "No, no payments were made yet."
+msgstr ""
+
+#: dialogs/rc.cpp:495
+msgid "Yes, payments were made."
+msgstr ""
+
+#: dialogs/rc.cpp:496
+msgid ""
+"Note: Payments made to obtain the loan (e.g. Dissagio) are not considered as "
+"payments in this context."
+msgstr ""
+
+#: dialogs/rc.cpp:497
+msgid "Recording payments?"
+msgstr ""
+
+#: dialogs/rc.cpp:498
+msgid ""
+"\n"
+"Do you want to record all payments of this loan with KMyMoney?"
+msgstr ""
+
+#: dialogs/rc.cpp:499
+msgid "Yes, record all payments."
+msgstr ""
+
+#: dialogs/rc.cpp:500
+msgid "No, only record payments since the beginning of this year."
+msgstr ""
+
+#: dialogs/rc.cpp:501
+msgid "Date of next interest change"
+msgstr ""
+
+#: dialogs/rc.cpp:502
+msgid ""
+"\n"
+"Select the date when the interest rate for this loan will be modified and "
+"the frequency of the future changes."
+msgstr ""
+
+#: dialogs/rc.cpp:503
+msgid "Next interest change on"
+msgstr ""
+
+#: dialogs/rc.cpp:504
+msgid "Time until next change"
+msgstr ""
+
+#: dialogs/rc.cpp:506 dialogs/rc.cpp:571
+msgid ""
+"\n"
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+
+#: dialogs/rc.cpp:507
+msgid "Current amount"
+msgstr ""
+
+#: dialogs/rc.cpp:510
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the amount for principal and interest then enter "
+"it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+
+#: dialogs/rc.cpp:512 dialogs/rc.cpp:545
+msgid ""
+"\n"
+"Please enter the interest rate or leave the field empty to calculate it."
+msgstr ""
+
+#: dialogs/rc.cpp:514
+msgid "Current rate"
+msgstr ""
+
+#: dialogs/rc.cpp:516
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the interest rate then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+
+#: dialogs/rc.cpp:517
+msgid "Date of first payment"
+msgstr ""
+
+#: dialogs/rc.cpp:520
+msgid "Calculate Loan"
+msgstr ""
+
+#: dialogs/rc.cpp:521
+msgid ""
+"\n"
+"You have successfully entered the general information about your loan. Next, "
+"KMyMoney needs some information about the calculation of the loan."
+msgstr ""
+
+#: dialogs/rc.cpp:523 dialogs/rc.cpp:611
+msgid ""
+"\n"
+"2. Calculate Loan"
+msgstr ""
+
+#: dialogs/rc.cpp:524 dialogs/rc.cpp:612
+msgid ""
+"\n"
+"3. Payments"
+msgstr ""
+
+#: dialogs/rc.cpp:526
+msgid ""
+"\n"
+"How often will there be payments made to this loan?"
+msgstr ""
+
+#: dialogs/rc.cpp:527
+msgid "Interest calculation"
+msgstr ""
+
+#: dialogs/rc.cpp:528
+msgid ""
+"\n"
+"When does the actual interest rate get calculated?"
+msgstr ""
+
+#: dialogs/rc.cpp:529
+msgid "When the payment is received."
+msgstr ""
+
+#: dialogs/rc.cpp:530
+msgid "When the payment is due."
+msgstr ""
+
+#: dialogs/rc.cpp:534 dialogs/rc.cpp:547 dialogs/rc.cpp:560 dialogs/rc.cpp:573
+#: dialogs/rc.cpp:586 dialogs/rc.cpp:598 dialogs/rc.cpp:679
+msgid "Loan amount:"
+msgstr ""
+
+#: dialogs/rc.cpp:535 dialogs/rc.cpp:548 dialogs/rc.cpp:561 dialogs/rc.cpp:574
+#: dialogs/rc.cpp:587 dialogs/rc.cpp:599 dialogs/rc.cpp:633 dialogs/rc.cpp:671
+msgid "Interest rate:"
+msgstr ""
+
+#: dialogs/rc.cpp:536 dialogs/rc.cpp:549 dialogs/rc.cpp:562 dialogs/rc.cpp:575
+#: dialogs/rc.cpp:588 dialogs/rc.cpp:600 dialogs/rc.cpp:669
+msgid "Term:"
+msgstr ""
+
+#: dialogs/rc.cpp:537 dialogs/rc.cpp:550 dialogs/rc.cpp:563 dialogs/rc.cpp:576
+#: dialogs/rc.cpp:589 dialogs/rc.cpp:601 dialogs/rc.cpp:622 dialogs/rc.cpp:630
+#: dialogs/rc.cpp:677
+msgid "Principal + Interest:"
+msgstr ""
+
+#: dialogs/rc.cpp:538 dialogs/rc.cpp:551 dialogs/rc.cpp:564 dialogs/rc.cpp:577
+#: dialogs/rc.cpp:583 dialogs/rc.cpp:585 dialogs/rc.cpp:590 dialogs/rc.cpp:602
+msgid "Final amortization payment"
+msgstr ""
+
+#: dialogs/rc.cpp:557
+msgid "Duration"
+msgstr "Durada"
+
+#: dialogs/rc.cpp:558
+msgid ""
+"\n"
+"Please enter the term of this loan or leave the field empty to calculate it. "
+"The term is the time that is required to fully repay the loan. This time "
+"might be different from the time your loan contract is signed for."
+msgstr ""
+
+#: dialogs/rc.cpp:584
+msgid ""
+"\n"
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+
+#: dialogs/rc.cpp:596
+msgid "Calculation Overview"
+msgstr ""
+
+#: dialogs/rc.cpp:597
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown in the overview below. You can "
+"accept these values by selecting \"Next\" or change them by choosing \"Back"
+"\" to return to the input field for the information you want to change."
+msgstr ""
+
+#: dialogs/rc.cpp:609
+msgid ""
+"\n"
+"In the following steps, KMyMoney supports you in setting up categories and "
+"schedules for your loan payments."
+msgstr ""
+
+#: dialogs/rc.cpp:614
+msgid ""
+"\n"
+"Please select the category you want to assign the interest payments to or "
+"create a new category."
+msgstr ""
+
+#: dialogs/rc.cpp:615
+msgid "Additional Fees"
+msgstr ""
+
+#: dialogs/rc.cpp:616
+msgid ""
+"\n"
+"If your regular payment contains any additional fees, click on the button "
+"\"Additional fees\" to enter them."
+msgstr ""
+
+#: dialogs/rc.cpp:617
+msgid "= periodical payment:"
+msgstr ""
+
+#: dialogs/rc.cpp:623
+msgid ""
+"If no additional fees are included in your periodical payment or you have "
+"entered all such fees, then click on \"Next\"."
+msgstr ""
+
+#: dialogs/rc.cpp:625
+msgid ""
+"KMyMoney will create a schedule for this payment and reminds you whenever a "
+"payment must be made.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+
+#: dialogs/rc.cpp:626
+msgid "First payment due on:"
+msgstr ""
+
+#: dialogs/rc.cpp:627
+msgid "Make payment from/to:"
+msgstr ""
+
+#: dialogs/rc.cpp:629
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown below. If you want to accept these "
+"values use the \"Finish\" button to update your account, otherwise use the "
+"\"Back\" button to modify your settings."
+msgstr ""
+
+#: dialogs/rc.cpp:631
+msgid "Additional fees:"
+msgstr ""
+
+#: dialogs/rc.cpp:632
+msgid "Total payment:"
+msgstr ""
+
+#: dialogs/rc.cpp:634
+msgid "Valid from:"
+msgstr "Vàlid des de:"
+
+#: dialogs/rc.cpp:635
+msgid "Affected payments:"
+msgstr ""
+
+#: dialogs/rc.cpp:645
+msgid "Press this to create a new asset account"
+msgstr ""
+
+#: dialogs/rc.cpp:648
+msgid ""
+"\n"
+"This page summarizes the data you entered. If you need to modify anything, "
+"please use the \"Back\" button to go to respective page. Otherwise use the "
+"\"Finish\" button to create the account."
+msgstr ""
+
+#: dialogs/rc.cpp:650
+msgid "Payee:"
+msgstr "Beneficiari:"
+
+#: dialogs/rc.cpp:653
+msgid "First payment:"
+msgstr ""
+
+#: dialogs/rc.cpp:655
+msgid "Amount is:"
+msgstr ""
+
+#: dialogs/rc.cpp:656
+msgid "Loan calculation"
+msgstr ""
+
+#: dialogs/rc.cpp:660
+msgid "Periodic Payment:"
+msgstr ""
+
+#: dialogs/rc.cpp:661
+msgid "Additional Fees:"
+msgstr ""
+
+#: dialogs/rc.cpp:662
+msgid "Interest category:"
+msgstr "Categoria per a l'interès:"
+
+#: dialogs/rc.cpp:663
+msgid "Payment from:"
+msgstr "Pagar des de:"
+
+#: dialogs/rc.cpp:666
+msgid "Next due date:"
+msgstr "Proper venciment:"
+
+#: dialogs/rc.cpp:673
+msgid "Final Payment:"
+msgstr "Pagament final:"
+
+#: dialogs/rc.cpp:675
+msgid "Interest is due:"
+msgstr "L'interès venç el:"
+
+#: dialogs/rc.cpp:680
+msgid "Payment frequency:"
+msgstr "Freqüència dels pagaments:"
+
+#: dialogs/rc.cpp:682
+msgid "Online Quote Configuration"
+msgstr "Configuració de les cotitzacions en línia"
+
+#: dialogs/rc.cpp:687
+msgid "Perl Location:"
+msgstr ""
+
+#: dialogs/rc.cpp:688
+msgid "Script:"
+msgstr "Seqüència:"
+
+#: dialogs/rc.cpp:690
+msgid "Reassign payees"
+msgstr ""
+
+#: dialogs/rc.cpp:691
+msgid ""
+"The transactions associated with the selected payees need to be re-assigned "
+"to a different payee before the selected payees can be deleted. Please "
+"select a payee from the list below."
+msgstr ""
+
+#: dialogs/rc.cpp:692
+msgid "Available payees:"
+msgstr ""
+
+#: dialogs/rc.cpp:693
+msgid "Assign deleted names to the above selected payee's matching list"
+msgstr ""
+
+#: dialogs/rc.cpp:696
+#, fuzzy
+msgid "PluginDlg"
+msgstr "&Endollables"
+
+#: dialogs/rc.cpp:697
+#, fuzzy
+msgid "PlugIn"
+msgstr "&Endollables"
+
+#: dialogs/rc.cpp:698 widgets/transaction.cpp:1071
+#: widgets/transaction.cpp:1658
+#, fuzzy
+msgid "Status"
+msgstr "Estat:"
+
+#: dialogs/rc.cpp:699
+#, fuzzy
+msgid "Feature"
+msgstr "&Crea"
+
+#: dialogs/rc.cpp:703
+msgid "Reconciliation Dialog"
+msgstr "Diàleg de conciliació"
+
+#: dialogs/rc.cpp:704
+msgid ""
+"This dialog will assist in helping you to balance your account.\n"
+"\n"
+"Click on an appropriate transaction within one of the two list views to mark "
+"it as reconciled. To create a transaction or edit\n"
+"a transaction you can return to the register by clicking on the Edit "
+"Transactions button.\n"
+"\n"
+"Your account is balanced when the Difference is Zero. Click on the Finish "
+"button to save the reconciled transactions."
+msgstr ""
+
+#: dialogs/rc.cpp:705
+msgid "Withdrawals"
+msgstr "Reintegraments"
+
+#: dialogs/rc.cpp:707 dialogs/rc.cpp:708 dialogs/rc.cpp:822
+msgid "$"
+msgstr "$"
+
+#: dialogs/rc.cpp:710
+msgid "Previous Balance:"
+msgstr "Saldo anterior:"
+
+#: dialogs/rc.cpp:711 dialogs/rc.cpp:713 dialogs/rc.cpp:715 dialogs/rc.cpp:717
+#: dialogs/rc.cpp:820
+msgid "0"
+msgstr "0"
+
+#: dialogs/rc.cpp:712
+msgid "Ending Balance:"
+msgstr "Saldo final:"
+
+#: dialogs/rc.cpp:714
+msgid "Cleared Balance:"
+msgstr "Saldo verificat:"
+
+#: dialogs/rc.cpp:716
+msgid "Difference:"
+msgstr "Diferència:"
+
+#: dialogs/rc.cpp:718
+#, fuzzy
+msgid "Edit Transactions..."
+msgstr "&Edita assentaments..."
+
+#: dialogs/rc.cpp:721
+msgid "Security List Editor"
+msgstr "Editor de la cartera de valors bursàtils"
+
+#: dialogs/rc.cpp:726
+msgid "Market"
+msgstr ""
+
+#: dialogs/rc.cpp:729
+msgid "Cash Fraction"
+msgstr ""
+
+#: dialogs/rc.cpp:730
+#, fuzzy
+msgid "Add..."
+msgstr "Edita ..."
+
+#: dialogs/rc.cpp:732 widgets/kmymoneypriceview.cpp:157
+#, fuzzy
+msgid "Delete..."
+msgstr "Esborra..."
+
+#: dialogs/rc.cpp:733
+msgid "Show national currencies"
+msgstr "Mostra les divises nacionals"
+
+#: dialogs/rc.cpp:735
+msgid "KMyMoney - Select Database"
+msgstr ""
+
+#: dialogs/rc.cpp:736
+msgid "CAUTION!"
+msgstr ""
+
+#: dialogs/rc.cpp:737
+msgid ""
+"<font color=\"#ff2727\">This software is still in an experimental stage, and "
+"there are still some known response time problems. Please be patient; we are "
+"working on them.\n"
+"As always, please make sure you have adequate backups of your data.</font>"
+msgstr ""
+
+#: dialogs/rc.cpp:738
+msgid "Database Type"
+msgstr ""
+
+#: dialogs/rc.cpp:739
+#, fuzzy
+msgid "Database Name"
+msgstr "Rang de dates"
+
+#: dialogs/rc.cpp:740
+#, fuzzy
+msgid "Host Name"
+msgstr "Nom de l'informe"
+
+#: dialogs/rc.cpp:741
+#, fuzzy
+msgid "User Name"
+msgstr "Nom d'usuari"
+
+#: dialogs/rc.cpp:743
+#, fuzzy
+msgid "Preload &all data"
+msgstr "Dades personals..."
+
+#: dialogs/rc.cpp:745
+#, fuzzy
+msgid "&Generate SQL"
+msgstr "General"
+
+#: dialogs/rc.cpp:747
+msgid "Ca&ncel"
+msgstr ""
+
+#: dialogs/rc.cpp:762 widgets/rc.cpp:172
+#, fuzzy
+msgid "Sort options"
+msgstr "Opcions d'importació"
+
+#: dialogs/rc.cpp:763
+#, fuzzy
+msgid "Use default"
+msgstr "Definit per l'usuari"
+
+#: dialogs/rc.cpp:767
+msgid "Correct splits"
+msgstr ""
+
+#: dialogs/rc.cpp:769
+msgid "How do you want to proceed?"
+msgstr ""
+
+#: dialogs/rc.cpp:770
+#, fuzzy
+msgid "Continue to edit splits"
+msgstr "Mostra la pàgina principal en començar"
+
+#: dialogs/rc.cpp:771
+#, c-format
+msgid "Change total amount of transaction to %1."
+msgstr ""
+
+#: dialogs/rc.cpp:772
+msgid "Distribute difference of %1 among all splits."
+msgstr ""
+
+#: dialogs/rc.cpp:773
+#, fuzzy
+msgid "Leave %1 unassigned."
+msgstr "Sense assignar"
+
+#: dialogs/rc.cpp:776
+msgid "Split transaction"
+msgstr "Assentament desglossat"
+
+#: dialogs/rc.cpp:777
+msgid "<b>11,00<b>"
+msgstr ""
+
+#: dialogs/rc.cpp:778
+msgid "<b>111,00<b>"
+msgstr ""
+
+#: dialogs/rc.cpp:779
+msgid "Unassigned"
+msgstr "Sense assignar"
+
+#: dialogs/rc.cpp:780
+msgid "Sum of splits"
+msgstr "Suma dels desglossaments"
+
+#: dialogs/rc.cpp:781
+msgid "100,00"
+msgstr ""
+
+#: dialogs/rc.cpp:782
+msgid "Transaction amount"
+msgstr "Import de l'assentament"
+
+#: dialogs/rc.cpp:783
+#, fuzzy
+msgid "Merge"
+msgstr "Més"
+
+#: dialogs/rc.cpp:784
+msgid "Merges splits with the same category to one split"
+msgstr ""
+
+#: dialogs/rc.cpp:785
+msgid ""
+"In case you have multiple split entries to the same category and you like to "
+"keep them as a single split, press this button. The amount for identical "
+"categories will be added and stored in a single split for that category."
+msgstr ""
+
+#: dialogs/rc.cpp:786
+#, fuzzy
+msgid "Clear &Zero"
+msgstr "Verificat"
+
+#: dialogs/rc.cpp:787
+msgid "Removes all splits that have a value of zero."
+msgstr ""
+
+#: dialogs/rc.cpp:791
+msgid "New price entry"
+msgstr ""
+
+#: dialogs/rc.cpp:799
+msgid "Void mark"
+msgstr "Marca de «buit»"
+
+#: dialogs/rc.cpp:800
+msgid "Opening Balance text"
+msgstr "Text per al saldo d'obertura"
+
+#: dialogs/rc.cpp:801
+msgid "Type field text"
+msgstr "Text per al camp de «tipus»"
+
+#: dialogs/rc.cpp:802
+msgid "Account delimiter"
+msgstr "Delimitador de compte"
+
+#: dialogs/rc.cpp:804
+#, fuzzy
+msgid "Attempt to match similar transactions"
+msgstr "Intenta fer concordar assentaments similars"
+
+#: dialogs/rc.cpp:806 dialogs/rc.cpp:808
+msgid "The format of the dates in the QIF file."
+msgstr "El format de les dates en el fitxer QIF."
+
+#: dialogs/rc.cpp:809 dialogs/rc.cpp:811
+msgid ""
+"If a QIF file contains date entries with years represented with two digits "
+"then either an apostrophe or a slash may be used to delimit the year in the "
+"dates for certain centuries. This enables 1905 to be distinguished from "
+"2005. Specify here which range of years will have year delimited by an "
+"apostrophe (eg. for Quicken this is usually 1900-1949)."
+msgstr ""
+"Si un fitxer QIF conté dates amb els anys representats amb dos dígits, "
+"aleshores es pot emprar un apòstrof o una barra inclinada per delimitar "
+"l'any de la data a certs segles. Això permet distingir el 1905 del 2005. "
+"Especifiqueu aquí quin rang d'anys tindrà l'any delimitat per un apòstrof (p."
+"ex. en el Quicken sol ser el període 1900-1949)."
+
+#: dialogs/rc.cpp:810
+msgid "Apostrophe Handling"
+msgstr "Tractament de l'apòstrof"
+
+#: dialogs/rc.cpp:812
+msgid "Amounts"
+msgstr "Quantitats"
+
+#: dialogs/rc.cpp:813
+msgid "Field"
+msgstr "Camp"
+
+#: dialogs/rc.cpp:814
+msgid "QIF-Record"
+msgstr "Registre QIF"
+
+#: dialogs/rc.cpp:815 dialogs/rc.cpp:833
+msgid "Decimal Symbol"
+msgstr "Símbol decimal"
+
+#: dialogs/rc.cpp:816
+msgid "Thousand Delimiter"
+msgstr "Delimitador de milers"
+
+#: dialogs/rc.cpp:817
+msgid "SortColumnInvisible"
+msgstr ""
+
+#: dialogs/rc.cpp:819
+msgid "T"
+msgstr "T"
+
+#: dialogs/rc.cpp:821
+msgid "Split-Value"
+msgstr ""
+
+#: dialogs/rc.cpp:824
+msgid "Commission"
+msgstr ""
+
+#: dialogs/rc.cpp:825
+msgid "O"
+msgstr "O"
+
+#: dialogs/rc.cpp:826
+msgid "2"
+msgstr "2"
+
+#: dialogs/rc.cpp:828
+msgid "I"
+msgstr "I"
+
+#: dialogs/rc.cpp:829
+msgid "3"
+msgstr "3"
+
+#: dialogs/rc.cpp:831
+msgid "Q"
+msgstr "Q"
+
+#: dialogs/rc.cpp:832
+msgid "4"
+msgstr "4"
+
+#: dialogs/rc.cpp:834
+msgid "Thousands Separator"
+msgstr "Separador de milers"
+
+#: dialogs/rc.cpp:836
+msgid "Output filter location"
+msgstr "Ubicació del filtre de sortida"
+
+#: dialogs/rc.cpp:837
+msgid "Input filter file type"
+msgstr "Tipus de fitxer de filtre d'entrada"
+
+#: dialogs/rc.cpp:838
+msgid "*.qif"
+msgstr ""
+
+#: dialogs/rc.cpp:839
+msgid "Input filter location"
+msgstr "Ubicació del filtre d'entrada"
+
+#: dialogs/rc.cpp:843
+#, fuzzy
+msgid "Rename"
+msgstr "Re&nomena"
+
+#: dialogs/kselecttransactionsdlg.cpp:44
+#, fuzzy
+msgid "Select Transaction"
+msgstr "Transacció desglossada"
+
+#: dialogs/kselecttransactionsdlg.cpp:45
+msgid ""
+"Select a transaction and press the OK button or use Cancel to select none."
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:62
+msgid "Investment detail wizard"
+msgstr "Assistent pels detalls de la inversió"
+
+#: dialogs/knewinvestmentwizard.cpp:82
+msgid "Security detail wizard"
+msgstr "Assistent per als detalls de valor bursàtil"
+
+#: dialogs/knewaccountdlg.cpp:121 dialogs/knewinvestmentwizard.cpp:109
+msgid ""
+"_: default price mode\n"
+"<default>"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:122 dialogs/knewinvestmentwizard.cpp:110
+#, fuzzy
+msgid "Price per share"
+msgstr "Cotització per acció"
+
+#: dialogs/knewaccountdlg.cpp:123 dialogs/knewinvestmentwizard.cpp:111
+msgid "Total for all shares"
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:129
+msgid "This wizard allows you to modify the selected investment."
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:132
+msgid "This wizard allows you to modify the selected security."
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid ""
+"The selected symbol is already on file. Do you want to reuse the existing "
+"security?"
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:186
+#, fuzzy
+msgid "Security found"
+msgstr "Valor bursàtil"
+
+#: dialogs/knewinvestmentwizard.cpp:309
+msgid "Unable to create all objects for the investment"
+msgstr ""
+
+#: dialogs/keditequityentrydlg.cpp:78
+msgid "Change the price information of the selected entry."
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:64 widgets/kmymoneybriefschedule.cpp:59
+msgid "&Skip"
+msgstr "&Omet"
+
+#: dialogs/kaccountselectdlg.cpp:66 widgets/kmymoneybriefschedule.cpp:61
+msgid "Skip this transaction"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:67
+msgid ""
+"Use this to skip importing this transaction and proceed with the next one."
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:72
+msgid "Create a new account/category"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:73
+msgid "Use this to add a new account/category to the file"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:77
+msgid "&Abort"
+msgstr "&Avorta"
+
+#: dialogs/kaccountselectdlg.cpp:79
+msgid "Abort the import operation and dismiss all changes"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:80
+msgid ""
+"Use this to abort the import. Your financial data will be in the state "
+"before you started the QIF import."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:110
+msgid "Is a sub account"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:184
+#, fuzzy
+msgid "VAT account"
+msgstr "Compte"
+
+#: dialogs/knewaccountdlg.cpp:474
+msgid ""
+"You have not specified a name.\n"
+"Please fill in this field."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:482
+msgid "Please select a parent account."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:489 dialogs/knewaccountdlg.cpp:1029
+msgid "<No Institution>"
+msgstr "<Cap institució>"
+
+#: dialogs/knewaccountdlg.cpp:552
+msgid ""
+"An account named <b>%1</b> already exists. You cannot create a second "
+"account with the same name."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:567
+msgid ""
+"A category named <b>%1</b> already exists. You cannot create a second "
+"category with the same name."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid ""
+"You have selected to suppress the display of unused categories in the "
+"KMyMoney configuration dialog. The category you just created will therefore "
+"only be shown if it is used. Otherwise, it will be hidden in the accounts/"
+"categories view."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid "Hidden categories"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:927 dialogs/knewaccountdlg.cpp:979
+#, c-format
+msgid "Is a sub account of %1"
+msgstr "és un subcompte de %1"
+
+#: dialogs/knewaccountdlg.cpp:1082
+msgid "Cannot add institution"
+msgstr "No es pot afegir la institució"
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid ""
+"This dialog does not allow to create new payees. Please pick a payee from "
+"the list."
+msgstr ""
+
+#: dialogs/kpayeereassigndlg.cpp:75
+#, fuzzy
+msgid "Payee creation"
+msgstr "Informació del beneficiari"
+
+#: dialogs/kimportdlg.cpp:69
+msgid "Use this to start the import operation"
+msgstr ""
+
+#: dialogs/kimportdlg.cpp:110
+#, fuzzy
+msgid ""
+"%1|Import files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Fitxers de Gnucash\n"
+"%2|Tots els fitxers (*.*)"
+
+#: dialogs/kimportdlg.cpp:111
+#, fuzzy
+msgid "Import File..."
+msgstr "Importa un fitxer de GnuCash..."
+
+#: dialogs/knewloanwizard.cpp:124
+msgid "Create a new category"
+msgstr "Crea una nova categoria"
+
+#: dialogs/knewloanwizard.cpp:125
+msgid "Use this to open the new account editor"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:129
+msgid "&Additional fees..."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:131
+msgid "Enter additional fees"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:132
+msgid ""
+"Use this to add any additional fees other than principal and interest "
+"contained in your periodical payments."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:139
+msgid ""
+"Use this to create a new account to which the initial payment should be made"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:208
+msgid "To whom do you make payments?"
+msgstr "A qui efectueu els pagaments?"
+
+#: dialogs/knewloanwizard.cpp:209
+msgid "Payments to"
+msgstr "Pagaments a"
+
+#: dialogs/knewloanwizard.cpp:214
+msgid "From whom do you expect payments?"
+msgstr "De qui espereu els pagaments?"
+
+#: dialogs/knewloanwizard.cpp:215
+msgid "Payments from"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:233
+msgid "Please enter the date, the first payment for this loan was/is due."
+msgstr ""
+"Si us plau entreu la data en què venç/ha vençut el primer pagament d'aquest "
+"préstec."
+
+#: dialogs/knewloanwizard.cpp:235
+msgid ""
+"Note: Consult the loan contract for details of the first due date. Keep in "
+"mind, that the first due date usually differs from the date the contract was "
+"signed"
+msgstr ""
+"Nota: Consulteu el contracte del préstec per conèixer els detalls del primer "
+"venciment. Recordeu que la data del primer venciment acostuma a ser diferent "
+"de la data de signatura del contracte"
+
+#: dialogs/knewloanwizard.cpp:240
+msgid ""
+"Please enter the original loan amount in the field below or leave it empty "
+"to be calculated."
+msgstr ""
+"Si us plau introduïu la quantitat inicial prestada en el camp de sota, o "
+"deixeu-lo en blanc per tal que es calculi automàticament."
+
+#: dialogs/knewloanwizard.cpp:248
+msgid ""
+"Please enter the date, the first payment for this loan was/is due this year."
+msgstr ""
+"Si us plau introduïu quina és/fou la data de venciment del primer pagament "
+"d'aquest any."
+
+#: dialogs/knewloanwizard.cpp:250
+msgid ""
+"Note: You can easily figure out the date of the first payment if you consult "
+"the last statement of last year."
+msgstr ""
+"Nota: Podeu afigurar-vos la data del primer pagament si consulteu el darrer "
+"rebut de l'any anterior."
+
+#: dialogs/knewloanwizard.cpp:254
+msgid ""
+"Please enter the remaining loan amount of last years final statement in the "
+"field below. You should not leave this field empty."
+msgstr ""
+"Si us plau introduïu en el camp del dessota el romanent del préstec que "
+"figura en el darrer rebut de l'any anterior. No hauríeu de deixar aquest "
+"camp en blanc."
+
+#: dialogs/knewloanwizard.cpp:311 dialogs/knewloanwizard.cpp:326
+#: dialogs/knewloanwizard.cpp:341 dialogs/knewloanwizard.cpp:357
+#: dialogs/knewloanwizard.cpp:373
+msgid "calculate"
+msgstr "calcula-ho"
+
+#: dialogs/knewloanwizard.cpp:417
+msgid "borrowed"
+msgstr "demanat"
+
+#: dialogs/knewloanwizard.cpp:419
+msgid "lend"
+msgstr "deixat"
+
+#: dialogs/knewloanwizard.cpp:423
+msgid "not assigned"
+msgstr "no assignat"
+
+#: dialogs/knewloanwizard.cpp:430
+msgid "on reception"
+msgstr "a la recepció"
+
+#: dialogs/knewloanwizard.cpp:432
+msgid "on due date"
+msgstr "a la data de venciment"
+
+#: dialogs/knewloanwizard.cpp:471
+msgid ""
+"The loan wizard is unable to calculate two different values for your loan at "
+"the same time. Please enter a value for the %1 on this page or backup to the "
+"page where the current value to be calculated is defined and fill in a "
+"value."
+msgstr ""
+"L'assistent per al préstec no pot calcular alhora dos valors diferents pel "
+"vostre préstec. Si us plau introduïu aquí un valor per %1 o torneu enrere "
+"fins a la pàgina on es defineix la dada a calcular i ompliu-la amb algun "
+"valor."
+
+#: dialogs/knewloanwizard.cpp:500
+msgid ""
+"You selected, that payments have already been made towards this loan. This "
+"requires you to enter the loan amount exactly as found on your last "
+"statement."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:513
+msgid "interest rate"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:522
+msgid "term"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:532
+msgid "principal and interest"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:743
+#, c-format
+msgid ""
+"The number of payments has been decremented and the final payment has been "
+"modified to %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:751 dialogs/knewloanwizard.cpp:771
+#, c-format
+msgid "The final payment has been modified to %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:802
+msgid "KMyMoney has calculated a final payment of %1 for this loan."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:817
+msgid ""
+"You have entered mis-matching information. Please backup to the appropriate "
+"page and update your figures or leave one value empty to let KMyMoney "
+"calculate it for you"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:230
+msgid ""
+"Warning: Filtering by Category will exclude all transfers from the results."
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:239
+msgid "(None)"
+msgstr "(Cap)"
+
+#: dialogs/kfindtransactiondlg.cpp:241
+msgid "Current selections: "
+msgstr "Seleccions actuals: "
+
+#: dialogs/kfindtransactiondlg.cpp:716
+msgid "Found %1 matching transactions (D %2 / P %3 = %4)"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:719
+#, fuzzy
+msgid "Found %1 matching transactions"
+msgstr "Assentament desglossat"
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "The institution name field is empty. Please enter the name."
+msgstr "El nom de la institució és buit. Si us plau introduïu el nom."
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "Adding New Institution"
+msgstr "S'està afegint una nova institució"
+
+#: dialogs/kcsvprogressdlg.cpp:69
+msgid "C&lose"
+msgstr "&Tanca"
+
+#: dialogs/kcsvprogressdlg.cpp:247
+msgid " of "
+msgstr ""
+
+#: widgets/kmymoneypriceview.cpp:126
+msgid "Commodity"
+msgstr "Mercaderia"
+
+#: widgets/kmymoneypriceview.cpp:130
+msgid "Source"
+msgstr "Font"
+
+#: widgets/kmymoneypriceview.cpp:143
+msgid "Price Options"
+msgstr ""
+
+#: widgets/kmymoneypriceview.cpp:153
+#, fuzzy
+msgid "Online Price Update..."
+msgstr "Actualització en línia emprant OFX ..."
+
+#: widgets/kmymoneycombo.cpp:472 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+msgid "From"
+msgstr "Des de"
+
+#: widgets/transaction.cpp:668
+#, fuzzy
+msgid "Transaction is missing a category assignment."
+msgstr "Assentaments per categoria"
+
+#: widgets/transaction.cpp:671
+msgid "The transaction has a missing assignment of <b>%1</b>."
+msgstr ""
+
+#: widgets/transaction.cpp:874
+msgid "Sell"
+msgstr "Ven"
+
+#: widgets/transaction.cpp:876
+msgid "Buy"
+msgstr "Compra"
+
+#: widgets/kmymoneycombo.cpp:520 widgets/transaction.cpp:879
+#: widgets/transaction.cpp:1447
+msgid "Dividend"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:518 widgets/transaction.cpp:881
+#: widgets/transaction.cpp:1453
+msgid "Yield"
+msgstr ""
+
+#: widgets/transaction.cpp:886 widgets/transaction.cpp:1473
+msgid "Activity"
+msgstr "Activitat"
+
+#: widgets/transaction.cpp:887
+#, fuzzy
+msgid "Investment transaction"
+msgstr "Assentaments d'inversió"
+
+#: widgets/transaction.cpp:1021 widgets/transaction.cpp:1114
+#: widgets/transaction.cpp:1165
+msgid "*** UNASSIGNED ***"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:517 widgets/transaction.cpp:1435
+#, fuzzy
+msgid "Add shares"
+msgstr "Adreça:"
+
+#: widgets/kmymoneycombo.cpp:516 widgets/transaction.cpp:1438
+msgid "Remove shares"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:522 widgets/transaction.cpp:1441
+#, fuzzy
+msgid "Buy shares"
+msgstr "Compra accions"
+
+#: widgets/kmymoneycombo.cpp:521 widgets/transaction.cpp:1444
+#, fuzzy
+msgid "Sell shares"
+msgstr "Ven accions"
+
+#: widgets/transaction.cpp:1450
+msgid "Reinvest Dividend"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:515 widgets/transaction.cpp:1456
+#, fuzzy
+msgid "Split shares"
+msgstr "Ven accions"
+
+#: widgets/transaction.cpp:1515
+#, fuzzy
+msgid "Ratio"
+msgstr "Fracció"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:241
+msgid "%1 Bills."
+msgstr ""
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:257
+msgid "%1 Deposits."
+msgstr ""
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:273
+msgid "%1 Transfers."
+msgstr "%1 transferències."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:355
+msgid ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+msgstr "r-n-r-t-è-è-è-è-è-è-è-è-è-è-è-è-è-è-è-è-è-è-è-è-è-è-è-è-è-è-è"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:57
+#: widgets/kmymoneyaccounttreeforecast.cpp:84
+#, fuzzy
+msgid "Current"
+msgstr "Divisa"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:72
+#: widgets/kmymoneyaccounttreeforecast.cpp:93
+#, fuzzy
+msgid "Total variation"
+msgstr "Verificació de l'import"
+
+#: widgets/stdtransactionmatched.cpp:130
+msgid ""
+"KMyMoney has matched a downloaded transaction with a manually entered one "
+"(result above)"
+msgstr ""
+
+#: widgets/stdtransactionmatched.cpp:138
+#, fuzzy
+msgid "Bank entry:"
+msgstr "Afegeix una nova entrada"
+
+#: widgets/stdtransactionmatched.cpp:166
+#, fuzzy
+msgid "Your entry:"
+msgstr "El vostre nom:"
+
+#: widgets/kbudgetvalues.cpp:187
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a monthly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:187 widgets/kbudgetvalues.cpp:206
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"_: Auto assignment (caption)\n"
+"Auto assignment"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:206
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a yearly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"You have entered budget values using a different base which would result in "
+"an individual monthly budget of <b>%1</b>. Should this value be used to fill "
+"the monthly budgets?"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:62
+#, fuzzy
+msgid "Use this button to skip this transaction"
+msgstr "Insereix el tipus de transacció en el camp Núm. dels assentaments nous"
+
+#: widgets/kmymoneybriefschedule.cpp:67
+msgid "Record this transaction into the register"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:68
+msgid "Use this button to record this transaction"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:96
+msgid "%1 of %2"
+msgstr "%1 de %2"
+
+#: widgets/kmymoneybriefschedule.cpp:109
+msgid "Payment on %1 for %2 with %3 transactions remaining occuring %4."
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:115
+msgid "Payment on %1 for %2 occuring %4."
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:136
+msgid "%1 days overdue (%2 occurences)."
+msgstr ""
+
+#: widgets/register.cpp:55
+msgid "Post date"
+msgstr ""
+
+#: widgets/register.cpp:56
+#, fuzzy
+msgid "Date entered"
+msgstr "Rang de dates"
+
+#: widgets/register.cpp:60
+#, fuzzy
+msgid "Entry order"
+msgstr "Accepta"
+
+#: widgets/register.cpp:63
+#, fuzzy
+msgid "Reconcile state"
+msgstr "Conciliat"
+
+#: widgets/register.cpp:440
+#, fuzzy
+msgid ""
+"_: Deposits onto account\n"
+"Deposits"
+msgstr "Comptes d'Actiu"
+
+#: widgets/register.cpp:442
+#, fuzzy
+msgid ""
+"_: Payments towards credit card\n"
+"Payments"
+msgstr "Mètode de pagament"
+
+#: widgets/register.cpp:446
+#, fuzzy
+msgid ""
+"_: Payments made from account\n"
+"Payments"
+msgstr ""
+"El pagament s'ha de fer\n"
+"des del compte"
+
+#: widgets/register.cpp:448
+#, fuzzy
+msgid ""
+"_: Payments made with credit card\n"
+"Charges"
+msgstr "Mètode de pagament"
+
+#: widgets/register.cpp:736
+#, fuzzy
+msgid ""
+"_: Payment made from account\n"
+"Payment"
+msgstr ""
+"El pagament s'ha de fer\n"
+"des del compte"
+
+#: widgets/register.cpp:737
+#, fuzzy
+msgid ""
+"_: Deposit into account\n"
+"Deposit"
+msgstr "Opcions d'ingrés"
+
+#: widgets/register.cpp:813
+#, fuzzy
+msgid ""
+"_: Payment made with credit card\n"
+"Charge"
+msgstr "Mètode de pagament"
+
+#: widgets/register.cpp:814
+#, fuzzy
+msgid ""
+"_: Payment towards credit card\n"
+"Payment"
+msgstr "Mètode de pagament"
+
+#: widgets/register.cpp:818 widgets/register.cpp:824
+msgid ""
+"_: Decrease of asset/liability value\n"
+"Decrease"
+msgstr ""
+
+#: widgets/register.cpp:819 widgets/register.cpp:823
+msgid ""
+"_: Increase of asset/liability value\n"
+"Increase"
+msgstr ""
+
+#: widgets/register.cpp:2280
+#, fuzzy
+msgid "Prior transactions possibly filtered"
+msgstr "Cerca assentaments"
+
+#: widgets/register.cpp:2284
+#, fuzzy
+msgid "Last reconciliation"
+msgstr "Posposa la conciliació"
+
+#: widgets/register.cpp:2291
+#, fuzzy, c-format
+msgid "Online Statement Balance: %1"
+msgstr "Extracte: %1"
+
+#: widgets/register.cpp:2295
+#, fuzzy
+msgid "This year"
+msgstr "Any anterior"
+
+#: widgets/kmymoneycombo.cpp:674 widgets/register.cpp:2296
+msgid "Last month"
+msgstr "Mes anterior"
+
+#: widgets/register.cpp:2297
+#, fuzzy
+msgid "This month"
+msgstr "Mes anterior"
+
+#: widgets/register.cpp:2298
+#, fuzzy
+msgid "Last week"
+msgstr "Any anterior"
+
+#: widgets/register.cpp:2299
+msgid "This week"
+msgstr ""
+
+#: widgets/register.cpp:2300
+msgid "Yesterday"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:666 widgets/register.cpp:2301
+msgid "Today"
+msgstr ""
+
+#: widgets/register.cpp:2302 widgets/register.cpp:2307
+#, fuzzy
+msgid "Future transactions"
+msgstr "Esmena assentaments"
+
+#: widgets/register.cpp:2303
+#, fuzzy
+msgid "Next week"
+msgstr "Any anterior"
+
+#: widgets/kmymoneycalendar.cpp:131 widgets/register.cpp:2304
+msgid "Next month"
+msgstr "Mes següent"
+
+#: widgets/kmymoneycombo.cpp:670 widgets/register.cpp:2315
+#, fuzzy
+msgid "Current fiscal year"
+msgstr "Any actual"
+
+#: widgets/register.cpp:2316
+#, fuzzy
+msgid "Previous fiscal year"
+msgstr "Any anterior"
+
+#: widgets/register.cpp:2317
+#, fuzzy
+msgid "Next fiscal year"
+msgstr "Any anterior"
+
+#: widgets/register.cpp:2349
+msgid ""
+"_: Unknown payee\n"
+"Unknown"
+msgstr ""
+
+#: widgets/register.cpp:2368
+#, fuzzy
+msgid ""
+"_: Unknown category\n"
+"Unknown"
+msgstr "Desconegut"
+
+#: widgets/register.cpp:2387
+#, fuzzy
+msgid ""
+"_: Unknown security\n"
+"Unknown"
+msgstr "Desconegut"
+
+#: widgets/klistviewsearchline.cpp:249
+#, fuzzy
+msgid "Search Columns"
+msgstr "Columnes a mostrar"
+
+#: widgets/klistviewsearchline.cpp:251
+msgid "All Visible Columns"
+msgstr ""
+
+#: widgets/klistviewsearchline.cpp:266
+msgid ""
+"_: Column number %1\n"
+"Column No. %1"
+msgstr ""
+
+#: widgets/klistviewsearchline.cpp:461 widgets/registersearchline.cpp:286
+#, fuzzy
+msgid "S&earch:"
+msgstr "Cerca"
+
+#: widgets/kmymoneyaccountselector.cpp:110
+#: widgets/kmymoneyaccountselector.cpp:371
+msgid "Income categories"
+msgstr "Categories d'Ingressos"
+
+#: widgets/kmymoneyaccountselector.cpp:349
+#: widgets/kmymoneyaccountselector.cpp:350
+#, fuzzy
+msgid "Favorites"
+msgstr "Informes preferits"
+
+#: widgets/kmymoneyaccountselector.cpp:357
+msgid "Asset accounts"
+msgstr "Comptes d'Actiu"
+
+#: widgets/kmymoneyaccountselector.cpp:364
+msgid "Liability accounts"
+msgstr "Comptes de Passiu"
+
+#: widgets/kmymoneyaccountselector.cpp:381
+msgid "Expense categories"
+msgstr "Categories de Despeses"
+
+#: widgets/kmymoneyaccountselector.cpp:391
+#, fuzzy
+msgid "Equity accounts"
+msgstr "Comptes de Passiu"
+
+#: widgets/kmymoneyaccounttreebase.cpp:120
+#, fuzzy
+msgid "Total Balance"
+msgstr "Saldo"
+
+#: widgets/kmymoneyaccounttreebase.cpp:124
+#, fuzzy
+msgid "Total Value"
+msgstr "Actius i Passius"
+
+#: widgets/registersearchline.cpp:75
+msgid ""
+"_: label for status combo\n"
+"Stat&us"
+msgstr ""
+
+#: widgets/registersearchline.cpp:79
+#, fuzzy
+msgid "Any status"
+msgstr "Tots els estats"
+
+#: widgets/registersearchline.cpp:80
+#, fuzzy
+msgid "Imported"
+msgstr "&Importa"
+
+#: widgets/registersearchline.cpp:81
+#, fuzzy
+msgid "Matched"
+msgstr "Pedaços"
+
+#: widgets/registersearchline.cpp:82
+msgid "Erroneous"
+msgstr ""
+
+#: widgets/registersearchline.cpp:83
+#, fuzzy
+msgid "Not marked"
+msgstr "No verificat"
+
+#: widgets/kmymoneyaccounttree.cpp:54
+msgid ""
+"_: Column heading for category in tax report\n"
+"Tax"
+msgstr ""
+
+#: widgets/kmymoneyaccounttree.cpp:58
+msgid ""
+"_: Column heading for VAT category\n"
+"VAT"
+msgstr ""
+
+#: widgets/kmymoneywizard.cpp:101
+#, fuzzy
+msgid "Continue with next page"
+msgstr "Mostra la pàgina principal en començar"
+
+#: widgets/kmymoneywizard.cpp:103
+#, fuzzy
+msgid "Finish wizard"
+msgstr "Ha finalitzat"
+
+#: widgets/kmymoneywizard.cpp:121
+#, fuzzy
+msgid "&Back"
+msgstr "Còpia de seguretat"
+
+#: widgets/kmymoneywizard.cpp:122
+#, fuzzy
+msgid "&Next"
+msgstr "&Nou"
+
+#: widgets/kmymoneywizard.cpp:123
+msgid "&Finish"
+msgstr "&Acaba"
+
+#: widgets/kmymoneywizard.cpp:274
+#, fuzzy
+msgid "Step %1 of %2"
+msgstr "%1 de %2"
+
+#: widgets/kmymoneydateinput.cpp:235
+msgid ""
+"_: Enter todays date into date input widget\n"
+"T"
+msgstr ""
+
+#: widgets/transactionform.cpp:302
+msgid "&Deposit"
+msgstr "&Ingrés"
+
+#: widgets/transactionform.cpp:304 widgets/transactionform.cpp:313
+#: widgets/transactionform.cpp:323 widgets/transactionform.cpp:333
+msgid "&Transfer"
+msgstr "&Transferència"
+
+#: widgets/transactionform.cpp:306
+msgid "&Withdrawal"
+msgstr "&Reintegrament"
+
+#: widgets/transactionform.cpp:311
+msgid "&Payment"
+msgstr "&Pagament"
+
+#: widgets/transactionform.cpp:315
+#, fuzzy
+msgid "&Charge"
+msgstr "Càrrec"
+
+#: widgets/transactionform.cpp:321 widgets/transactionform.cpp:335
+#, fuzzy
+msgid "&Decrease"
+msgstr "Decrement"
+
+#: widgets/transactionform.cpp:325 widgets/transactionform.cpp:331
+#, fuzzy
+msgid "&Increase"
+msgstr "Increment"
+
+#: widgets/kmymoneyscheduledcalendar.cpp:42
+msgid "Select Schedules"
+msgstr "Escolliu les programacions"
+
+#: widgets/kmymoneycalendar.cpp:108
+msgid "Select Style"
+msgstr "Seleccioneu l'estil"
+
+#: widgets/kmymoneycalendar.cpp:128
+msgid "Choose Style"
+msgstr ""
+
+#: widgets/kmymoneycalendar.cpp:129
+msgid "Next year"
+msgstr "Any següent"
+
+#: widgets/kmymoneycalendar.cpp:130
+msgid "Previous year"
+msgstr "Any anterior"
+
+#: widgets/kmymoneycalendar.cpp:132
+msgid "Previous month"
+msgstr "Mes anterior"
+
+#: widgets/kmymoneycalendar.cpp:133
+msgid "Select a week"
+msgstr "Seleccioneu una setmana"
+
+#: widgets/kmymoneycalendar.cpp:134
+msgid "Select a month"
+msgstr "Seleccioneu un mes"
+
+#: widgets/kmymoneycalendar.cpp:135
+msgid "Select a year"
+msgstr "Seleccioneu un any"
+
+#: widgets/kmymoneycalendar.cpp:249
+msgid "Week XX"
+msgstr "Setmana XX"
+
+#: widgets/kmymoneycalendar.cpp:264 widgets/kmymoneycalendar.cpp:300
+#, c-format
+msgid "Week %1"
+msgstr "Setmana %1"
+
+#: widgets/rc.cpp:1
+#, fuzzy
+msgid "Account Types"
+msgstr "Comptes"
+
+#: widgets/rc.cpp:3
+#, fuzzy
+msgid "Detailed description"
+msgstr "Descripció"
+
+#: widgets/rc.cpp:18
+msgid "Period"
+msgstr ""
+
+#: widgets/rc.cpp:21
+msgid "Individual"
+msgstr ""
+
+#: widgets/rc.cpp:23
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Acces to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>Recovery encryption</i> group is only accessible, if the necessary "
+"key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is "
+"found."
+msgstr ""
+
+#: widgets/rc.cpp:26
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading <i>0x</i>."
+msgstr ""
+
+#: widgets/rc.cpp:27
+msgid "User ID"
+msgstr "ID d'usuari"
+
+#: widgets/rc.cpp:29
+msgid "Recovery encryption"
+msgstr ""
+
+#: widgets/rc.cpp:30
+msgid "Also encrypt with kmymoney-recover key"
+msgstr ""
+
+#: widgets/rc.cpp:32
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out."
+msgstr ""
+
+#: widgets/rc.cpp:51
+msgid "PriceInfo"
+msgstr ""
+
+#: widgets/rc.cpp:52
+msgid "Report Tab"
+msgstr ""
+
+#: widgets/rc.cpp:53
+msgid "<p>On this tab, you set the basic properties of this report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:54
+msgid "Report Name"
+msgstr "Nom de l'informe"
+
+#: widgets/rc.cpp:55
+msgid "<p>Choose a name for this report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:57
+msgid "<p>Enter a comment to help you remember the details of this report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:58
+msgid "Convert values to base currency"
+msgstr "Converteix els valors a la moneda base"
+
+#: widgets/rc.cpp:59
+msgid ""
+"_: Convert 'em!!\n"
+"<p>Select this option to convert all values in the report to your base "
+"currency.</p><p>Leave it unchecked if you'd like to see values in their "
+"original currency.</p><p>If currencies are not converted, then subtotals "
+"will not be shown.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:60
+msgid "Mark as a favorite report"
+msgstr "Marca com a informe preferit"
+
+#: widgets/rc.cpp:61
+msgid ""
+"<p>Select this option to notate this report as one of your favorites.</"
+"p><p>All your favorite reports are grouped in one place on the report list "
+"for easy access.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:62 widgets/rc.cpp:88
+msgid "Rows/Columns Tab"
+msgstr "Pestanya de Files/Columnes"
+
+#: widgets/rc.cpp:63 widgets/rc.cpp:89
+msgid ""
+"<p>On this tab, you configure how you'd like the rows and columns to be "
+"selected and organized.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:69 widgets/rc.cpp:81
+msgid ""
+"<p>Choose what kind of accounts to display as the rows of this report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:71
+msgid "Columns"
+msgstr "Columnes"
+
+#: widgets/rc.cpp:75
+msgid "Bi-Monthly"
+msgstr "Bimensual"
+
+#: widgets/rc.cpp:78
+msgid "<p>Choose how large of a time period each column should encompass</p>"
+msgstr ""
+
+#: widgets/rc.cpp:79
+msgid "Income & Expenses"
+msgstr "Ingressos i Despeses"
+
+#: widgets/rc.cpp:80
+msgid "Assets & Liabilities"
+msgstr "Actius i Passius"
+
+#: widgets/rc.cpp:82
+msgid "Rows"
+msgstr "Files"
+
+#: widgets/rc.cpp:83
+#, fuzzy
+msgid "Show totals column"
+msgstr " comptes\n"
+
+#: widgets/rc.cpp:84
+#, fuzzy
+msgid "Average days"
+msgstr "Tots els estats"
+
+#: widgets/rc.cpp:85
+#, fuzzy
+msgid "Include scheduled transactions"
+msgstr "Assentaments programats"
+
+#: widgets/rc.cpp:86
+#, fuzzy
+msgid "Include transfers"
+msgstr "Transferències"
+
+#: widgets/rc.cpp:87
+msgid "Include unused accounts/categories"
+msgstr ""
+
+#: widgets/rc.cpp:90
+msgid "Organize by:"
+msgstr ""
+
+#: widgets/rc.cpp:92
+msgid "Top Categories"
+msgstr ""
+
+#: widgets/rc.cpp:95
+msgid "Top Accounts"
+msgstr ""
+
+#: widgets/rc.cpp:98
+msgid "<p>Choose how to group the transactions in this report</p>"
+msgstr ""
+
+#: widgets/rc.cpp:99
+msgid "Show Columns"
+msgstr "Columnes a mostrar"
+
+#: widgets/rc.cpp:100
+msgid ""
+"<p>Choose which columns should be shown in the report.</p><p>The date and "
+"transaction amount are always shown.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:102
+msgid "<p>Select this option to show the Memo column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:104
+msgid "<p>Select this option to show the Shares column for investments</p>"
+msgstr ""
+
+#: widgets/rc.cpp:106
+msgid "<p>Select this option to show the Price column for investments</p>"
+msgstr ""
+
+#: widgets/rc.cpp:108
+msgid "<p>Select this option to show the Reconciled column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:110
+msgid "<p>Select this option to show the Account column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:112
+msgid "<p>Select this option to show the Number column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:114
+msgid "<p>Select this option to show the Payee column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:116
+msgid "<p>Select this option to show the Category column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:118
+msgid "<p>Select this option to show the Action column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:120
+msgid "<p>Select this option to show the Running balance column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:121
+#, fuzzy
+msgid "Include only Loan accounts"
+msgstr "Inclou en els informes d'impostos"
+
+#: widgets/rc.cpp:122
+msgid "Include only Investment accounts"
+msgstr ""
+
+#: widgets/rc.cpp:123 widgets/rc.cpp:127
+msgid ""
+"<p>Check this box to include only those categories which have been marked to "
+"\"Include on Tax Reports\"</p>"
+msgstr ""
+
+#: widgets/rc.cpp:124
+#, fuzzy
+msgid "Hide Split Transaction Details"
+msgstr "Mostra el detall dels assentaments"
+
+#: widgets/rc.cpp:125
+msgid ""
+"Do not display the individual transactions that make up a split transaction"
+msgstr ""
+
+#: widgets/rc.cpp:126
+msgid "Include only Tax categories"
+msgstr ""
+
+#: widgets/rc.cpp:128
+#, fuzzy
+msgid "Chart Tab"
+msgstr "Gràfic"
+
+#: widgets/rc.cpp:129
+msgid "<p>On this tab, you configure the chart drawn forthis report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:130
+#, fuzzy
+msgid "Chart Type"
+msgstr "Gràfic"
+
+#: widgets/rc.cpp:131
+msgid "<p>Select what form you would like the chart to be drawn as.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:132
+msgid "Line"
+msgstr ""
+
+#: widgets/rc.cpp:133
+msgid "Bar"
+msgstr ""
+
+#: widgets/rc.cpp:134
+msgid "Stacked Bar"
+msgstr ""
+
+#: widgets/rc.cpp:135
+#, fuzzy
+msgid "Pie"
+msgstr "Preu"
+
+#: widgets/rc.cpp:136
+#, fuzzy
+msgid "Ring"
+msgstr "Rang"
+
+#: widgets/rc.cpp:137
+#, fuzzy
+msgid "Show grid lines"
+msgstr "Mostra una graella en el llibre."
+
+#: widgets/rc.cpp:138
+msgid ""
+"<p>Select this option to show horizontal and vertical grid lines on the "
+"chart.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:139
+msgid "Draw values on chart"
+msgstr ""
+
+#: widgets/rc.cpp:140
+msgid ""
+"<p>Select this option to draw the numeric values for data points next to "
+"their plot location.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:141
+msgid "Show as chart by default"
+msgstr ""
+
+#: widgets/rc.cpp:142
+msgid ""
+"<p>Select this option to cause the report to be shown as a chart when you "
+"first open the report. Otherwise, it will come up as a text report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:143
+msgid "Line width"
+msgstr ""
+
+#: widgets/rc.cpp:144
+msgid "<p>Select what width should be used to draw the line on the chart</p>"
+msgstr ""
+
+#: widgets/rc.cpp:145
+msgid "ReportControl"
+msgstr ""
+
+#: widgets/rc.cpp:149
+msgid "Configure this report"
+msgstr ""
+
+#: widgets/rc.cpp:151
+msgid "Create a new report based on this one"
+msgstr ""
+
+#: widgets/rc.cpp:153
+msgid "Copy this report to the clipboard"
+msgstr ""
+
+#: widgets/rc.cpp:155
+msgid "Export this report as an HTML or CSV file"
+msgstr "Exporta aquest informe com un fitxer HTML o CSV"
+
+#: widgets/rc.cpp:157
+msgid "Permanently delete this report"
+msgstr ""
+
+#: widgets/rc.cpp:159
+msgid "Close this window"
+msgstr "Tanca aquesta finestra"
+
+#: widgets/rc.cpp:162
+msgid "n of n"
+msgstr ""
+
+#: widgets/rc.cpp:166
+msgid "Account:"
+msgstr "Compte:"
+
+#: widgets/rc.cpp:168
+msgid "Enter..."
+msgstr ""
+
+#: widgets/rc.cpp:171
+#, fuzzy
+msgid "TransactionSortOptionDecl"
+msgstr "Import de l'assentament"
+
+#: widgets/rc.cpp:173
+msgid "Sort order"
+msgstr ""
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Sunday\n"
+"Sun"
+msgstr ""
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Saturday\n"
+"Sat"
+msgstr ""
+
+#: widgets/kmymoneydatetbl.cpp:171 widgets/kmymoneydatetbl.cpp:178
+msgid "Week %1 for year %2."
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:417
+msgid "ATM"
+msgstr "Caixer automàtic"
+
+#: widgets/kmymoneycombo.cpp:418
+msgid "Withdrawal"
+msgstr "Reintegrament"
+
+#: widgets/kmymoneycombo.cpp:421
+msgid "Cheque"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:469
+#, fuzzy
+msgid ""
+"_: Activity for expense categories\n"
+"Paid"
+msgstr "Categories de Despeses"
+
+#: widgets/kmymoneycombo.cpp:470
+#, fuzzy
+msgid ""
+"_: Activity for income categories\n"
+"Received"
+msgstr "Categories d'Ingressos"
+
+#: widgets/kmymoneycombo.cpp:519
+msgid "Reinvest dividend"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:664
+msgid "All dates"
+msgstr "Totes les dates"
+
+#: widgets/kmymoneycombo.cpp:665
+msgid "As of today"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:667
+msgid "Current month"
+msgstr "Mes actual"
+
+#: widgets/kmymoneycombo.cpp:668
+#, fuzzy
+msgid "Current quarter"
+msgstr "Any actual"
+
+#: widgets/kmymoneycombo.cpp:669
+#, fuzzy
+msgid "Current year"
+msgstr "Any actual"
+
+#: widgets/kmymoneycombo.cpp:671
+msgid "Month to date"
+msgstr "Mes en curs"
+
+#: widgets/kmymoneycombo.cpp:672
+msgid "Year to date"
+msgstr "Any en curs"
+
+#: widgets/kmymoneycombo.cpp:673
+#, fuzzy
+msgid "Year to month"
+msgstr "Cada dos mesos"
+
+#: widgets/kmymoneycombo.cpp:675
+#, fuzzy
+msgid "Last year"
+msgstr "Any anterior"
+
+#: widgets/kmymoneycombo.cpp:676
+#, fuzzy
+msgid "Last fiscal year"
+msgstr "Any anterior"
+
+#: widgets/kmymoneycombo.cpp:677
+#, fuzzy
+msgid "Last 7 days"
+msgstr "Darrers 30 dies"
+
+#: widgets/kmymoneycombo.cpp:678
+msgid "Last 30 days"
+msgstr "Darrers 30 dies"
+
+#: widgets/kmymoneycombo.cpp:679
+msgid "Last 3 months"
+msgstr "Darrers 3 mesos"
+
+#: widgets/kmymoneycombo.cpp:680
+#, fuzzy
+msgid "Last quarter"
+msgstr "Any anterior"
+
+#: widgets/kmymoneycombo.cpp:681
+msgid "Last 6 months"
+msgstr "Darrers 6 mesos"
+
+#: widgets/kmymoneycombo.cpp:682
+#, fuzzy
+msgid "Last 11 months"
+msgstr "Darrers 12 mesos"
+
+#: widgets/kmymoneycombo.cpp:683
+msgid "Last 12 months"
+msgstr "Darrers 12 mesos"
+
+#: widgets/kmymoneycombo.cpp:684
+#, fuzzy
+msgid "Next 7 days"
+msgstr "Propers 30 dies"
+
+#: widgets/kmymoneycombo.cpp:685
+msgid "Next 30 days"
+msgstr "Propers 30 dies"
+
+#: widgets/kmymoneycombo.cpp:686
+msgid "Next 3 months"
+msgstr "Propers 3 mesos"
+
+#: widgets/kmymoneycombo.cpp:687
+#, fuzzy
+msgid "Next quarter"
+msgstr "Proper venciment"
+
+#: widgets/kmymoneycombo.cpp:688
+msgid "Next 6 months"
+msgstr "Propers 6 mesos"
+
+#: widgets/kmymoneycombo.cpp:689
+msgid "Next 12 months"
+msgstr "Propers 12 mesos"
+
+#: widgets/kmymoneycombo.cpp:690
+#, fuzzy
+msgid "Last 3 months to next 3 months"
+msgstr "Darrers 3 mesos"
+
+#: widgets/kmymoneycombo.cpp:691
+msgid "User defined"
+msgstr "Definit per l'usuari"
+
+#~ msgid "Reset"
+#~ msgstr "Inicialitza"
+
+#, fuzzy
+#~ msgid "New schedule..."
+#~ msgstr "&Nova programació..."
+
+#, fuzzy
+#~ msgid "Edit schedule..."
+#~ msgstr "Edita una factura programada"
+
+#, fuzzy
+#~ msgid "Delete schedule..."
+#~ msgstr "&Nova programació..."
+
+#, fuzzy
+#~ msgid "Duplicate schedule"
+#~ msgstr "Duplica"
+
+#, fuzzy
+#~ msgid "Enter schedule..."
+#~ msgstr "&Nova programació..."
+
+#, fuzzy
+#~ msgid "Skip schedule..."
+#~ msgstr "&Nova programació..."
+
+#, fuzzy
+#~ msgid "Adjusting schedules..."
+#~ msgstr "S'està desant el fitxer..."
+
+#, fuzzy
+#~ msgid "Add schedule"
+#~ msgstr "Programació"
+
+#, fuzzy
+#~ msgid "Unable to enter transaction for schedule '%1'"
+#~ msgstr "No s'ha pogut afegir l'assentament/modificar la programació"
+
+#, fuzzy
+#~ msgid "Loaded"
+#~ msgstr "Préstec"
+
+#, fuzzy
+#~ msgid "not loaded: %1"
+#~ msgstr "Verificat: %1"
+
+#, fuzzy
+#~ msgid "Schedule options"
+#~ msgstr "Arranjaments de la programació"
+
+#~ msgid "New Schedule"
+#~ msgstr "Nova programació"
+
+#, fuzzy
+#~ msgid "Edit Schedule"
+#~ msgstr "Edita una factura programada"
+
+#~ msgid "Search transactions containing the following text"
+#~ msgstr "Cerca assentaments que continguin el text següent"
+
+#~ msgid "Search"
+#~ msgstr "Cerca"
+
+#~ msgid "&Search"
+#~ msgstr "&Cerca"
+
+#~ msgid "Start the search"
+#~ msgstr "Inicia la cerca"
+
+#~ msgid "Takes the current criteria and searches for matching transactions."
+#~ msgstr "Pren els criteris actuals i cerca assentaments coincidents."
+
+#~ msgid "Reset all settings"
+#~ msgstr "Restaura tots els arranjaments"
+
+#~ msgid ""
+#~ "Use this to reset all settings to the state they were when the dialog was "
+#~ "opened."
+#~ msgstr ""
+#~ "Useu això per tal de restaurar tots els arranjaments a l'estat en què es "
+#~ "trobaven quan s'obrí el diàleg."
+
+#, fuzzy
+#~ msgid "Budget "
+#~ msgstr "Any següent"
+
+#, fuzzy
+#~ msgid "Forecast "
+#~ msgstr "Mètode de pagament"
+
+#, fuzzy
+#~ msgid "Budget Total"
+#~ msgstr "Any següent"
+
+#, fuzzy
+#~ msgid "Forecast Total"
+#~ msgstr "Mètode de pagament"
+
+#, fuzzy
+#~ msgid "Incomes and Expenses This Month"
+#~ msgstr "Ingressos i despeses d'aquest mes"
+
+#, fuzzy
+#~ msgid "Incomes"
+#~ msgstr "Ingressos"
+
+#, fuzzy
+#~ msgid "Schedules This Month"
+#~ msgstr "Assentaments programats"
+
+#~ msgid "&Ok"
+#~ msgstr "&Accepta"
+
+#~ msgid "Accepts the value and stores them"
+#~ msgstr "Accepta el valor i el desa"
+
+#~ msgid "Use this to accept all values and close the dialog."
+#~ msgstr "Useu això per acceptar tots els valors i tancar el diàleg."
+
+#~ msgid "Cancel the operation"
+#~ msgstr "Cancełla l'operació"
+
+#~ msgid "Use this to dismiss all the changes made in this dialog."
+#~ msgstr "Useu això per descartar tots els canvis fets en aquest diàleg."
+
+#~ msgid "Close dialog"
+#~ msgstr "Tanca el diàleg"
+
+#~ msgid "Use this to close the dialog and abort the operation"
+#~ msgstr "Useu aquest per tancar el diàleg i avortar l'operació"
+
+#~ msgid "Use this to accept and store data"
+#~ msgstr "Useu aquest per acceptar i desar les dades"
+
+#~ msgid "Delete the selected profile"
+#~ msgstr "Esborra el perfil seleccionat"
+
+#~ msgid "Use this to delete the selected profile"
+#~ msgstr "Useu aquest per esborrar el perfil seleccionat"
+
+#~ msgid "Use this to accept the data."
+#~ msgstr "Useu això per acceptar les dades."
+
+#~ msgid "Reject all changes to the data and closes the dialog"
+#~ msgstr "Rebutja tots els canvis fets a les dades i tanca aquest diàleg"
+
+#~ msgid "Use this to reject all changes."
+#~ msgstr "Useu això per descartar tots els canvis."
+
+#, fuzzy
+#~ msgid "Scan"
+#~ msgstr "&Explora"
+
+#~ msgid "Automatically create missing payees"
+#~ msgstr "Crea automàticament els beneficiaris desconeguts"
+
+#~ msgid "Reject any changes"
+#~ msgstr "Rebutja els canvis"
+
+#~ msgid "Accept modifications"
+#~ msgstr "Accepta les modificacions"
+
+#, fuzzy
+#~ msgid "S&ummary"
+#~ msgstr "Resum"
+
+#, fuzzy
+#~ msgid "Det&ail"
+#~ msgstr "Detalls"
+
+#, fuzzy
+#~ msgid "Total Incomes This Month"
+#~ msgstr "Ingressos i despeses d'aquest mes"
+
+#, fuzzy
+#~ msgid "Total Expenses This Month"
+#~ msgstr "Ingressos i despeses d'aquest mes"
+
+#, fuzzy
+#~ msgid "Scheduled Transfers This Month"
+#~ msgstr "Ingressos i despeses d'aquest mes"
+
+#, fuzzy
+#~ msgid "&Use the ledger lens"
+#~ msgstr "Usa la lupa del llibre"
+
+#~ msgid "&Create"
+#~ msgstr "&Crea"
+
+#, fuzzy
+#~ msgid "Te&xt"
+#~ msgstr "Text"
+
+#~ msgid "Online &Quotes"
+#~ msgstr "&Cotitzacions en línia"
+
+#~ msgid "&Edit ..."
+#~ msgstr "&Edita ..."
+
+#, fuzzy
+#~ msgid "&Yearly"
+#~ msgstr "Anual"
+
+#~ msgid "Advanced Institution Settings"
+#~ msgstr "Arranjaments avançats d'institució"
+
+#~ msgid "OFX Direct Connect Settings"
+#~ msgstr "Arranjaments de la connexió directa OFX (Open Financial Exchange)"
+
+#~ msgid "Enable OFX Direct Connect"
+#~ msgstr "Habilita la connexió OFX directa"
+
+#~ msgid "FIORG"
+#~ msgstr "FIORG"
+
+#~ msgid ""
+#~ "Failed to retrieve a quote for %1 from %2. Would you like to disable "
+#~ "online price updates for this security?"
+#~ msgstr ""
+#~ "No s'ha pogut obtenir la cotització de %1 des de %2. Voleu inhabilitar "
+#~ "les actualitzacions en línia de la cotització d'aquest valor?"
+
+#, fuzzy
+#~ msgid "Commodity Editor"
+#~ msgstr "Mercaderia"
+
+#, fuzzy
+#~ msgid "1/"
+#~ msgstr "1 /"
+
+#, fuzzy
+#~ msgid "Account Fraction"
+#~ msgstr "Selecció de compte"
+
+#, fuzzy
+#~ msgid "Online Banking"
+#~ msgstr "Configura la &banca en línia..."
+
+#~ msgid "R"
+#~ msgstr "C"
+
+#, fuzzy
+#~ msgid "Column 1"
+#~ msgstr "Columnes"
+
+#~ msgid "Transaction History"
+#~ msgstr "Històric d'assentaments"
+
+#~ msgid "Personal Information"
+#~ msgstr "Informació personal"
+
+#~ msgid "TextLabel2"
+#~ msgstr "TextLabel2"
+
+#~ msgid "TextLabel4"
+#~ msgstr "TextLabel4"
+
+#~ msgid "Online update using OFX..."
+#~ msgstr "Actualització en línia emprant OFX ..."
+
+#, fuzzy
+#~ msgid "Match Transaction..."
+#~ msgstr "&Edita assentaments..."
+
+#, fuzzy
+#~ msgid "Match With This Transaction"
+#~ msgstr "Cerca assentaments"
+
+#~ msgid "Import %1 Statement..."
+#~ msgstr "Importa l'extracte %1..."
+
+#~ msgid "%1 (Plugin)..."
+#~ msgstr "%1 (Endollable)..."
+
+#~ msgid "GnuCash Importer"
+#~ msgstr "Importador de GnuCash"
+
+#, fuzzy
+#~ msgid "Open Configuration Dialog"
+#~ msgstr "Ajuda per a la configuració de l'OFX"
+
+#, fuzzy
+#~ msgid "Importing templates..."
+#~ msgstr "Plantilla de compte ..."
+
+#~ msgid "Until today"
+#~ msgstr "Fins avui"
+
+#~ msgid "Tax Transactions"
+#~ msgstr "Assentaments d'impostos"
+
+#, fuzzy
+#~ msgid "Pa&yee"
+#~ msgstr "Detalls de l'assentament"
+
+#, fuzzy
+#~ msgid "Return"
+#~ msgstr "&Executa"
+
+#, fuzzy
+#~ msgid "Summar&y"
+#~ msgstr "Resum"
+
+#, fuzzy
+#~ msgid "one month"
+#~ msgstr "Mes següent"
+
+#, fuzzy
+#~ msgid "one year"
+#~ msgstr "Any següent"
+
+#, fuzzy
+#~ msgid "one payment"
+#~ msgstr "Verifica els pagaments"
+
+#~ msgid "Every four week"
+#~ msgstr "Cada quatre setmanes"
+
+#, fuzzy
+#~ msgid "E&dit"
+#~ msgstr "Edita..."
+
+#, fuzzy
+#~ msgid "Ne&w"
+#~ msgstr "Nou"
+
+#, fuzzy
+#~ msgid "Convert 'em!!"
+#~ msgstr "Converteix de"
+
+#~ msgid "Outbox"
+#~ msgstr "Tasques"
+
+#~ msgid "AqBanking importer ..."
+#~ msgstr "Importador d'AqBanking..."
+
+#~ msgid "&Split"
+#~ msgstr "&Desglossa"
+
+#~ msgid "&Reports"
+#~ msgstr "&Informes"
+
+#~ msgid "Add new account..."
+#~ msgstr "Afegeix un nou compte..."
+
+#~ msgid "Reconcile ..."
+#~ msgstr "Concilia..."
+
+#~ msgid "Toggling toolbar..."
+#~ msgstr "S'està permutant la barra d'eines..."
+
+#~ msgid "Toggle the statusbar..."
+#~ msgstr "Permuta la barra d'estat..."
+
+#~ msgid ""
+#~ "This function is used by the developers to\n"
+#~ "\n"
+#~ "perform a dump of the engine's data in memory."
+#~ msgstr ""
+#~ "Aquesta funció és emprada pels desenvolupadors\n"
+#~ "per bolcar les dades del motor a la memòria."
+
+#~ msgid "Cannot remove account from institution"
+#~ msgstr "No s'ha pogut esborrar el compte de la institució"
+
+#~ msgid "Cannot move account to institution"
+#~ msgstr "No s'ha pogut traslladar el compte a la institució"
+
+#~ msgid "Transfer to/from %1"
+#~ msgstr "Transfereix de/a %1"
+
+#~ msgid "Securities"
+#~ msgstr "Valors"
+
+#~ msgid "Reconciled: %1"
+#~ msgstr "Conciliat: %1"
+
+#~ msgid "You currently owe: "
+#~ msgstr "Actualment deveu: "
+
+#~ msgid "There is no user manual yet"
+#~ msgstr "Encara no hi ha manual d'usuari"
+
+#~ msgid "&Check"
+#~ msgstr "&Xec"
+
+#~ msgid "AT&M"
+#~ msgstr "Caixer auto&màtic"
+
+#~ msgid "Account Details ..."
+#~ msgstr "Detalls del compte ..."
+
+#~ msgid ""
+#~ "You are about to delete the selected transaction. Do you really want to "
+#~ "continue?"
+#~ msgstr ""
+#~ "Esteu a punt d'esborrar l'assentament seleccionat. Realment voleu "
+#~ "continuar?"
+
+#~ msgid "New Account..."
+#~ msgstr "Compte nou..."
+
+#~ msgid "Really delete this institution: "
+#~ msgstr "Voleu realment esborrar aquesta institució: "
+
+#~ msgid "Cannot delete institution: "
+#~ msgstr "No s'ha pogut esborrar la institució: "
+
+#~ msgid "Ready"
+#~ msgstr "Llest"
+
+#~ msgid "&Postpone"
+#~ msgstr "&Posposa"
+
+#~ msgid ""
+#~ "Use this to postpone reconciling your account against the bank statement "
+#~ "to a later point in time."
+#~ msgstr ""
+#~ "Useu-lo per tal de posposar fins un altre moment la conciliació amb "
+#~ "l'extracte del banc."
+
+#~ msgid "&Reconcile ..."
+#~ msgstr "&Concilia ..."
+
+#~ msgid ""
+#~ "<center><b>Reconcile account</b></center><hr>\n"
+#~ "<b>1.</b> Click on column 'C' to clear the transactions appearing on your "
+#~ "bank statement."
+#~ msgstr ""
+#~ "<center><b>Comcilia el compte</b></center><hr>\n"
+#~ "<b>1.</b> Cliqueu a la columna 'V' per verificar els assentaments que "
+#~ "apareixen al vostre extracte bancari."
+
+#~ msgid ""
+#~ "<b>2.</b> Match the cleared transactions with the amount noted on your "
+#~ "bank statement.<br>"
+#~ msgstr ""
+#~ "<b>2.</b> Feu concordar els assentaments verificats amb el total anotat "
+#~ "al vostre extracte bancari.<br>"
+
+#~ msgid "Cleared:"
+#~ msgstr "Verificat:"
+
+#~ msgid ""
+#~ "*.csv|CSV files\n"
+#~ "*.html|HTML files\n"
+#~ "*.*|All files"
+#~ msgstr ""
+#~ "*.csv|Fitxers CSV (Valors Separats per Comes)\n"
+#~ "*.html|Fitxers HTML\n"
+#~ "*.*|Tots els fitxers"
+
+#~ msgid "To"
+#~ msgstr "A"
+
+#~ msgid "Unable to add/modify security"
+#~ msgstr "No es pot afegir/modificar el valor bursàtil"
+
+#~ msgid "C&harge"
+#~ msgstr "&Càrrec"
+
+#~ msgid "Bill Options"
+#~ msgstr "Opcions de factura"
+
+#~ msgid "New Bill..."
+#~ msgstr "Nova factura..."
+
+#~ msgid "New Deposit..."
+#~ msgstr "Nou ingrés..."
+
+#~ msgid "New Transfer..."
+#~ msgstr "Nova transferència..."
+
+#~ msgid "Edit Transfer Schedule"
+#~ msgstr "Edita una transferència programada"
+
+#~ msgid "Edit Deposit Schedule"
+#~ msgstr "Edita un ingrés programat"
+
+#~ msgid "Direct Debit"
+#~ msgstr "Càrrec/Domiciliació"
+
+#~ msgid "Direct Deposit"
+#~ msgstr "Ingrés directe"
+
+#~ msgid "Manual Deposit"
+#~ msgstr "Ingrés manual"
+
+#~ msgid "Write Check"
+#~ msgstr "Taló"
+
+#~ msgid "Exception in slot split clicked"
+#~ msgstr "S'ha produït una excepció en el desglossament clicat"
+
+#~ msgid "Please fill in the category field."
+#~ msgstr "Si us plau ompliu el camp de la categoria."
+
+#~ msgid "Error in slotAmountChanged?"
+#~ msgstr "Error en slotAmountChanged?"
+
+#~ msgid "Withdrawal or Transfer"
+#~ msgstr "Reintegrament o transferència"
+
+#~ msgid "Cancel the import operation"
+#~ msgstr "Cancełla l'operació d'importació"
+
+#~ msgid ""
+#~ "Use this to abort the import and undo all changes made during import."
+#~ msgstr ""
+#~ "Useu això per avortar la importació i desfer tots els canvis efectuats "
+#~ "durant la importació."
+
+#~ msgid ""
+#~ "You are about to cancel the entire import. Any changes you have made in "
+#~ "this dialog will be lost. Are you sure you want to cancel?"
+#~ msgstr ""
+#~ "Esteu a punt de cancel·lar tot l'import. Tots els canvis que hàgiu fet "
+#~ "en aquest diàleg es perdran. Esteu segurs de voler cancel·lar?"
+
+#~ msgid "Verify cancel"
+#~ msgstr "Verificació de la cancełlació"
+
+#~ msgid "General settings"
+#~ msgstr "Arranjaments generals"
+
+#~ msgid "Accounts view settings"
+#~ msgstr "Arranjaments de la vista dels comptes"
+
+#~ msgid "Use the normal institution view"
+#~ msgstr "Usa la vista d'institució normal"
+
+#~ msgid "Restrict by date"
+#~ msgstr "Restringeix per data"
+
+#~ msgid "Restrict by transaction state"
+#~ msgstr "Restringeix per l'estat de l'assentament"
+
+#~ msgid "Data Encryption Settings"
+#~ msgstr "Arranjaments d'encriptació de les dades"
+
+#~ msgid "Mount Point:"
+#~ msgstr "Punt de muntatge:"
+
+#~ msgid "textLabel2"
+#~ msgstr "textLabel2"
+
+#~ msgid "Pay to:"
+#~ msgstr "Paga a:"
+
+#~ msgid "From:"
+#~ msgstr "Des de:"
+
+#~ msgid "To:"
+#~ msgstr "A:"
+
+#~ msgid "Amount:"
+#~ msgstr "Quantitat:"
+
+#~ msgid "Category:"
+#~ msgstr "Categoria:"
+
+#~ msgid "Memo:"
+#~ msgstr "Descripció:"
+
+#~ msgid "<b>Name:</b>"
+#~ msgstr "<b>Nom:</b>"
+
+#~ msgid "<b>Payee:</b>"
+#~ msgstr "<b>Beneficiari:</b>"
+
+#~ msgid "<b>Category:</b>"
+#~ msgstr "<b>Categoria:</b>"
+
+#, fuzzy
+#~ msgid "<b>From (account):</b>"
+#~ msgstr "<b>Des del compte:</b>"
+
+#~ msgid "<b>Memo:</b>"
+#~ msgstr "<b>Descripció:</b>"
+
+#, fuzzy
+#~ msgid "<b>To (account):</b>"
+#~ msgstr "<b>Des del compte:</b>"
+
+#~ msgid "to"
+#~ msgstr "a"
+
+#~ msgid "from"
+#~ msgstr "des de"
+
+#~ msgid "New Account"
+#~ msgstr "Compte nou"
+
+#~ msgid "Institution Selection"
+#~ msgstr "Selecció d'institució"
+
+#~ msgid "<u>I</u>nstitution"
+#~ msgstr "<u>I</u>nstitució"
+
+#~ msgid "Account Type Selection"
+#~ msgstr "Selecció de tipus de compte"
+
+#~ msgid "What is the account number?"
+#~ msgstr "Quin és el número de compte?"
+
+#~ msgid ""
+#~ "If you do not know the account number, please leave this field empty. You "
+#~ "can add the account number at any later time in the account details "
+#~ "dialog. The account number is only used by KMyMoney for online banking."
+#~ msgstr ""
+#~ "Si no sabeu el número de compte, deixeu aquest camp en blanc. Podreu "
+#~ "afegir-lo en qualsevol moment posterior a la caixa de diàleg de detalls "
+#~ "del compte. KMyMoney només usa el número de compte per a la banca en "
+#~ "línia."
+
+#~ msgid "Does this investment account has a brokerage account?"
+#~ msgstr "Aquest compte d'inversions té associat un compte de correduría?"
+
+#~ msgid "What is the opening balance and date of this account?"
+#~ msgstr "Quins són el saldo inicial i la data d'obertura d'aquest compte?"
+
+#~ msgid "What is the currency of this account?"
+#~ msgstr "En quina divisa ha de treballar el compte?"
+
+#~ msgid "&Price"
+#~ msgstr "&Cotització"
+
+#~ msgid ""
+#~ "The information to create the account has now been collected. Press the "
+#~ "<b>Finish</b> button to actually create the account or the <b>Back</b> "
+#~ "button to modify the settings. The <b>Cancel</b> button will dismiss all "
+#~ "data and leave this wizard.<br>\n"
+#~ "Once the account is successfully created you can enter your transactions "
+#~ "on this account."
+#~ msgstr ""
+#~ "Ja s'ha recollit la informació necessària per crear el compte. Premeu el "
+#~ "botó <b>Acaba</b> per a crear definitivament el compte o bé el botó "
+#~ "<b>Enrere</b> per tal de modificar-ne l'arranjament. El botó "
+#~ "<b>Cancel·la</b> oblidarà les dades i marxarà de l'assistent.<br>\n"
+#~ "Una vegada s'hagi creat correctament el compte, podreu entrar-hi els "
+#~ "vostres assentaments."
+
+#~ msgid ""
+#~ "Adding a new institution.\n"
+#~ "\n"
+#~ "The only required field is the name, which can be the name of a bank like "
+#~ "Woolwhich, or a descriptive name like Family Cash Accounts."
+#~ msgstr ""
+#~ "S'està afegint una nova institució.\n"
+#~ "\n"
+#~ "L'únic camp obligatori és el nom, el qual pot ser el nom d'un banc o "
+#~ "caixa com ara \"Caixa de Catalunya\", o bé un nom descriptiu com ara "
+#~ "\"Comptes familiars de caixa\"."
+
+#~ msgid ""
+#~ "The schedule %1 caused an internal problem. Please contact the developers "
+#~ "via e-mail on kmymoney2-developer@lists.sourceforge.net for further "
+#~ "instructions mentioning this problem."
+#~ msgstr ""
+#~ "La planificació %1 ha causat un problema intern. Si us plau, contacteu "
+#~ "amb els desenvolupadors via correu-e a l'adreça kmymoney2-developer@lists."
+#~ "sourceforge.net i expliqueu-los el problema per tal que us puguin "
+#~ "proporcionar més instruccions."
+
+#~ msgid "Payee changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "S'ha canviat el beneficiari. Antic: \"%1\", Nou: \"%2\""
+
+#~ msgid "Category changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "S'ha canviat la categoria. Antiga: \"%1\", Nova: \"%2\""
+
+#~ msgid "Memo changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "S'ha canviat la descripció. Antiga: \"%1\", Nova: \"%2\""
+
+#~ msgid "Amount changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "S'ha canviat el total. Antic: \"%1\", Nou: \"%2\""
+
+#~ msgid "%1 items of the details for the transaction have changed."
+#~ msgstr "Han canviat un total de %1 elements dels detalls de l'assentament."
+
+#~ msgid ""
+#~ "Some occurences that are older than '%1' have not been entered yet.\n"
+#~ "\n"
+#~ "Delete all occurences that have not been entered before this date?"
+#~ msgstr ""
+#~ "Algunes aparicions que són anteriors a '%1' no s'han entrat encara.\n"
+#~ "\n"
+#~ "Voleu esborrar totes les aparicions que no s'hagin entrat abans d'aquesta "
+#~ "data?"
+
+#~ msgid ""
+#~ "Are you sure you want to enter this occurence which is %1 days after "
+#~ "today?"
+#~ msgstr ""
+#~ "Esteu segur de voler entrar aquest assentament que s'esdevé %1 dies "
+#~ "d'avui enllà?"
+
+#~ msgid "The date must lie in the range %1 to %2"
+#~ msgstr "La data ha d'estar entre %1 i %2"
+
+#~ msgid "Use this to abort the dialog"
+#~ msgstr "Useu aquest per avortar la caixa de diàleg"
+
+#~ msgid "Use this to accept the data and possibly update the exchange rate"
+#~ msgstr ""
+#~ "Useu aquest per acceptar les dades i possiblement actualitzar la ràtio de "
+#~ "canvi"
+
+#~ msgid "Leave the dialog and return to where you came from."
+#~ msgstr "Marxeu del diàleg i torneu allà on éreu."
+
+#~ msgid "Open online help"
+#~ msgstr "Obre l'ajut en línia"
+
+#~ msgid ""
+#~ "Opens the online help and shows detailed information about transaction "
+#~ "searching."
+#~ msgstr ""
+#~ "Obre l'ajut en línia i mostra informació detallada sobre cerca "
+#~ "d'assentaments."
+
+#~ msgid "What is the opening balance and date of this brokerage account?"
+#~ msgstr ""
+#~ "Quin és el saldo i la data d'obertura d'aquest compte de correduría?"
+
+#~ msgid "Please enter the payment amount."
+#~ msgstr "Si us plau, entreu el total a pagar."
+
+#~ msgid "Please enter the schedule name."
+#~ msgstr "Si us plau entreu el nom de la programació."
+
+#~ msgid "Please enter the payee name."
+#~ msgstr "Si us plau introduïu el nom del beneficiari."
+
+#~ msgid ""
+#~ "Use the checking account type to manage activities on your checking "
+#~ "account e.g. payments, checks and cash card purchases."
+#~ msgstr ""
+#~ "Useu el tipus \"compte corrent\" per gestionar les activitats del vostre "
+#~ "compte corrent, p.ex. pagaments, talons i compres amb tarja de dèbit o "
+#~ "tarja moneder."
+
+#~ msgid ""
+#~ "Use the savings account type to manage activities on your savings account."
+#~ msgstr ""
+#~ "Utilitzeu el tipus \"Estalvis\" per gestionar les activitats de la vostra "
+#~ "llibreta d'estalvis."
+
+#~ msgid ""
+#~ "Use the credit card account type to manage activities on your credit card."
+#~ msgstr ""
+#~ "Utilitzeu el tipus \"Targeta de Crèdit\" per gestionar les activitats de "
+#~ "la vostra tarja de crèdit."
+
+#~ msgid "Use the cash account type to manage activities in your wallet."
+#~ msgstr ""
+#~ "Useu el tipus \"Efectiu\" per gestionar les activitats del vostre moneder."
+
+#~ msgid ""
+#~ "Use the asset account type to manage assets (e.g. your house, car or art "
+#~ "collection)."
+#~ msgstr ""
+#~ "Utilitzeu el tipus \"Actiu\" per gestionar els vostres actius (p.ex. la "
+#~ "vostra casa, cotxe o col·lecció d'art). També per diners que us deuen."
+
+#~ msgid ""
+#~ "Use the liability account type to manage any type of liability except "
+#~ "amortization loans. Use it for taxes you owe or money you borrowed from "
+#~ "friends. For amortization loans like mortgages you should create a loan "
+#~ "account."
+#~ msgstr ""
+#~ "Utilitzeu el tipus \"Passiu\" per gestionar qualsevol tipus de deute "
+#~ "excepte els préstecs. Típicament l'utilitzareu pels impostos que deveu, o "
+#~ "bé diners que us han deixat els amics. Pels préstecs amb amortització com "
+#~ "ara les hipoteques hauríeu de crear un compte de préstec."
+
+#~ msgid ""
+#~ "Use the loan account type to manage amortization loans (e.g. mortgages, "
+#~ "car loan, money you lend, private loans etc.)."
+#~ msgstr ""
+#~ "Utilitzeu el tipus \"Préstec\" per gestionar préstecs amb amortització "
+#~ "(ex.: hipoteques, préstec del cotxe, diners que vós presteu a altri, "
+#~ "préstecs privats, etc.)."
+
+#~ msgid ""
+#~ "Use the investment account to manage your stock, mutual fund and other "
+#~ "investments."
+#~ msgstr ""
+#~ "Utilitzeu un compte del tipus \"Inversions\" per gestionar les vostres "
+#~ "carteres de valors, fons d'inversió i altres inversions."
+
+#~ msgid "Explanation is not yet available! UnknownAccountType will be set"
+#~ msgstr ""
+#~ "L'explicació encara no està disponible! Es posarà el tipus de compte "
+#~ "«Desconegut»"
diff --git a/po/cs.po b/po/cs.po
new file mode 100644
index 0000000..ecfb3a5
--- /dev/null
+++ b/po/cs.po
@@ -0,0 +1,12922 @@
+# translation of cs.po to
+# translation of kmymoney2-cs.po to
+#
+# Marek Stopka <mstopka@opensuse.org>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: cs\n"
+"POT-Creation-Date: 2009-06-25 19:04+0200\n"
+"PO-Revision-Date: 2008-12-14 14:59+0100\n"
+"Last-Translator: Marek Stopka <mstopka@opensuse.org>\n"
+"Language-Team: <cs@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: wizards/wizardpages/rc.cpp:1
+msgid ""
+"Select groups of accounts that correspond to the ways that you will use "
+"KMyMoney. Each group you select will cause several accounts and categories "
+"to be created. Select the groups that are relevant to you. You can always "
+"create additional accounts manually later."
+msgstr ""
+
+#: wizards/wizardpages/rc.cpp:2
+msgid ""
+"<p>KMyMoney supports multiple currencies, nevertheless one of them will be "
+"used as your base currency. The base currency is used as default for new "
+"accounts and reports. Please select the base currency from the following "
+"list."
+msgstr ""
+"<p>KMyMoney podporuje více měn, nicméně jedna z nich musí být použita jako "
+"základní měna. Základní měna je použita jako výchozí pro nové účty a výkazy. "
+"Prosím vyberte základní měnu ze seznamu."
+
+#: dialogs/kequitypriceupdatedlg.cpp:71 dialogs/rc.cpp:399 dialogs/rc.cpp:485
+#: dialogs/rc.cpp:724 dialogs/settings/rc.cpp:108 reports/listtable.cpp:226
+#: views/kinvestmentview.cpp:71 views/kpayeesview.cpp:351 views/rc.cpp:13
+#: widgets/rc.cpp:5 widgets/rc.cpp:34
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1599
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1629
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1673
+#: wizards/wizardpages/rc.cpp:3
+msgid "Name"
+msgstr "Jméno"
+
+#: wizards/wizardpages/rc.cpp:4
+msgid "ISO Code"
+msgstr "ISO kód"
+
+#: dialogs/kequitypriceupdatedlg.cpp:69 dialogs/kequitypriceupdatedlg.cpp:70
+#: dialogs/rc.cpp:71 dialogs/rc.cpp:725 dialogs/settings/rc.cpp:112
+#: views/kinvestmentview.cpp:72 widgets/rc.cpp:37 wizards/wizardpages/rc.cpp:5
+msgid "Symbol"
+msgstr "Symbol"
+
+#: wizards/wizardpages/rc.cpp:6
+msgid ""
+"<p>Use the fields below to enter some information about yourself.</p>\n"
+"\n"
+"<p>All information is optional and only used to personalize your KMyMoney "
+"file.</p>"
+msgstr ""
+"<p>Použijte pole níže k tomu, abyste zadali nějaké informace o své osobě.</"
+"p>\n"
+"\n"
+"<p>Všechny informace jsou volitelné a použity jen pro zosobnění vašeho "
+"KMyMoney.</p>"
+
+#: dialogs/rc.cpp:425 wizards/newuserwizard/rc.cpp:27
+#: wizards/wizardpages/rc.cpp:7
+msgid "Town:"
+msgstr "Město:"
+
+#: dialogs/rc.cpp:420 wizards/newuserwizard/rc.cpp:22
+#: wizards/wizardpages/rc.cpp:8
+msgid "County/State:"
+msgstr "Země:"
+
+#: dialogs/rc.cpp:391 dialogs/rc.cpp:421 wizards/newuserwizard/rc.cpp:23
+#: wizards/wizardpages/rc.cpp:9
+msgid "Street:"
+msgstr "Ulice:"
+
+#: dialogs/rc.cpp:422 wizards/newuserwizard/rc.cpp:24
+#: wizards/wizardpages/rc.cpp:10
+msgid "Email:"
+msgstr "E-mail:"
+
+#: dialogs/rc.cpp:424 wizards/newuserwizard/rc.cpp:26
+#: wizards/wizardpages/rc.cpp:11
+msgid "Telephone:"
+msgstr "Telefonní číslo:"
+
+#: dialogs/rc.cpp:423 wizards/newuserwizard/rc.cpp:25
+#: wizards/wizardpages/rc.cpp:12
+msgid "Your name:"
+msgstr "Vaše jméno:"
+
+#: dialogs/rc.cpp:427 wizards/newuserwizard/rc.cpp:29
+#: wizards/wizardpages/rc.cpp:13
+msgid "Load from Addressbook"
+msgstr "Načíst z Adresáře"
+
+#: dialogs/rc.cpp:392 dialogs/rc.cpp:426 views/rc.cpp:68
+#: wizards/wizardpages/rc.cpp:14
+msgid "Postal Code:"
+msgstr "PSČ:"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:82
+msgid "KMyMoney New Account Setup"
+msgstr "Nastavení nového účtu KMyMoney"
+
+#: dialogs/rc.cpp:360 dialogs/rc.cpp:361 reports/listtable.cpp:230
+#: wizards/newaccountwizard/knewaccountwizard.cpp:83
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1616
+#: wizards/newaccountwizard/rc.cpp:61
+msgid "Institution"
+msgstr "Instituce"
+
+#: dialogs/investactivities.cpp:198 dialogs/investactivities.cpp:286
+#: dialogs/investactivities.cpp:367 dialogs/kfindtransactiondlg.cpp:181
+#: dialogs/rc.cpp:139 dialogs/rc.cpp:192 dialogs/rc.cpp:207
+#: dialogs/transactioneditor.cpp:734 reports/listtable.cpp:201
+#: reports/pivottable.cpp:1336 reports/pivottable.cpp:1586
+#: views/kforecastview.cpp:393 views/kgloballedgerview.cpp:175
+#: views/khomeview.cpp:418 views/khomeview.cpp:491 views/khomeview.cpp:525
+#: views/khomeview.cpp:764 views/khomeview.cpp:967 views/khomeview.cpp:1437
+#: views/kscheduledview.cpp:71 views/rc.cpp:17 views/rc.cpp:44
+#: widgets/kmymoneyaccounttreebase.cpp:58
+#: widgets/kmymoneyaccounttreeforecast.cpp:41 widgets/rc.cpp:109
+#: widgets/register.cpp:566 widgets/transaction.cpp:978
+#: widgets/transaction.cpp:1535
+#: wizards/newaccountwizard/knewaccountwizard.cpp:84
+msgid "Account"
+msgstr "Účet"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:85
+msgid "Broker"
+msgstr "Makléř"
+
+#: dialogs/kfindtransactiondlg.cpp:225 dialogs/rc.cpp:70 dialogs/rc.cpp:104
+#: dialogs/rc.cpp:159 dialogs/rc.cpp:223 dialogs/rc.cpp:246 dialogs/rc.cpp:751
+#: dialogs/settings/rc.cpp:109 widgets/rc.cpp:35 widgets/register.cpp:568
+#: wizards/newaccountwizard/knewaccountwizard.cpp:86
+msgid "Details"
+msgstr "Podrobnosti"
+
+#: dialogs/knewloanwizard.cpp:636 dialogs/rc.cpp:231 dialogs/rc.cpp:608
+#: kmymoneyutils.cpp:191 views/khomeview.cpp:399
+#: wizards/newaccountwizard/knewaccountwizard.cpp:87
+#: wizards/newaccountwizard/knewaccountwizard.cpp:880
+msgid "Payments"
+msgstr "Platby"
+
+#: dialogs/investactivities.cpp:195 dialogs/investactivities.cpp:283
+#: dialogs/investactivities.cpp:422 dialogs/investtransactioneditor.cpp:217
+#: reports/listtable.cpp:221 widgets/transaction.cpp:1565
+#: wizards/newaccountwizard/knewaccountwizard.cpp:88
+msgid "Fees"
+msgstr "Poplatky"
+
+#: dialogs/rc.cpp:624 views/khomeview.cpp:415 views/khomeview.cpp:488
+#: views/khomeview.cpp:522 wizards/newaccountwizard/knewaccountwizard.cpp:89
+msgid "Schedule"
+msgstr "Finanční plán"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:90
+msgid "Payout"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:91
+msgid "Parent Account"
+msgstr "Nadřazený účet"
+
+#: dialogs/rc.cpp:719 wizards/newaccountwizard/knewaccountwizard.cpp:92
+#: wizards/newuserwizard/knewuserwizard.cpp:86
+msgid "Finish"
+msgstr "Dokončit"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:248
+msgid "Credit card payment"
+msgstr "Splátka kreditní karty"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:264
+#, c-format
+msgid "Loan payment for %1"
+msgstr "Splátka půjčky %1"
+
+#: mymoney/mymoneyscheduled.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:279
+msgid "Loan payment"
+msgstr "Splátka půjčky"
+
+#: dialogs/rc.cpp:134 wizards/newaccountwizard/knewaccountwizard.cpp:293
+msgid "Amortization"
+msgstr "Amortizace"
+
+#: dialogs/investactivities.cpp:196 dialogs/investactivities.cpp:284
+#: dialogs/investactivities.cpp:366 dialogs/investactivities.cpp:423
+#: dialogs/investtransactioneditor.cpp:227 dialogs/rc.cpp:135
+#: dialogs/rc.cpp:152 dialogs/rc.cpp:544 reports/listtable.cpp:222
+#: widgets/transaction.cpp:1597
+#: wizards/newaccountwizard/knewaccountwizard.cpp:302
+msgid "Interest"
+msgstr "Úrok"
+
+#: dialogs/kcurrencycalculator.cpp:282
+#: wizards/newaccountwizard/knewaccountwizard.cpp:351
+#: wizards/newaccountwizard/knewaccountwizard.cpp:356
+msgid "User"
+msgstr ""
+
+#: kmymoneyutils.cpp:64 mymoney/mymoneyaccount.cpp:711
+#: reports/querytabletest.cpp:422
+#: wizards/newaccountwizard/knewaccountwizard.cpp:451
+msgid "Checking"
+msgstr "Běžný účet"
+
+#: kmymoneyutils.cpp:66 mymoney/mymoneyaccount.cpp:714
+#: wizards/newaccountwizard/knewaccountwizard.cpp:452
+msgid "Savings"
+msgstr "Úspory"
+
+#: kmymoneyutils.cpp:68 mymoney/mymoneyaccount.cpp:717
+#: reports/querytabletest.cpp:423
+#: wizards/newaccountwizard/knewaccountwizard.cpp:453
+msgid "Credit Card"
+msgstr "Kreditní karta"
+
+#: kmymoneyutils.cpp:70 mymoney/mymoneyaccount.cpp:720
+#: wizards/newaccountwizard/knewaccountwizard.cpp:454
+msgid "Cash"
+msgstr "Hotovost"
+
+#: kmymoneyutils.cpp:72 mymoney/mymoneyaccount.cpp:723
+#: wizards/newaccountwizard/knewaccountwizard.cpp:455
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+msgid "Loan"
+msgstr "Půjčka"
+
+#: kmymoneyutils.cpp:76 mymoney/mymoneyaccount.cpp:729
+#: wizards/newaccountwizard/knewaccountwizard.cpp:456
+msgid "Investment"
+msgstr "Investice"
+
+#: converter/mymoneytemplate.cpp:178 converter/mymoneytemplate.cpp:179
+#: dialogs/knewaccountdlg.cpp:1014 kmymoneyutils.cpp:80
+#: mymoney/mymoneyaccount.cpp:735 views/kaccountsview.cpp:352
+#: views/kmymoneyview.cpp:765 widgets/kmymoneyaccountselector.cpp:177
+#: widgets/kmymoneyaccountselector.cpp:356
+#: wizards/newaccountwizard/knewaccountwizard.cpp:457
+msgid "Asset"
+msgstr "Aktiva"
+
+#: converter/mymoneytemplate.cpp:182 converter/mymoneytemplate.cpp:183
+#: dialogs/knewaccountdlg.cpp:1016 kmymoneyutils.cpp:82
+#: mymoney/mymoneyaccount.cpp:738 views/kaccountsview.cpp:356
+#: views/kmymoneyview.cpp:766 widgets/kmymoneyaccountselector.cpp:178
+#: widgets/kmymoneyaccountselector.cpp:363
+#: wizards/newaccountwizard/knewaccountwizard.cpp:458
+msgid "Liability"
+msgstr "Pasiva"
+
+#: converter/mymoneytemplate.cpp:194 converter/mymoneytemplate.cpp:195
+#: kmymoneyutils.cpp:94 mymoney/mymoneyaccount.cpp:756
+#: views/kaccountsview.cpp:369 views/kmymoneyview.cpp:769
+#: widgets/kmymoneyaccountselector.cpp:181
+#: widgets/kmymoneyaccountselector.cpp:390
+#: wizards/newaccountwizard/knewaccountwizard.cpp:460
+msgid "Equity"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid ""
+"Please make sure to enter the correct conversion for the selected opening "
+"date. If you requested an online quote it might be provided for a different "
+"date."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+#, fuzzy
+msgid "Check date"
+msgstr "Vytvořit"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:562
+msgid "1 %1 equals %2"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:577
+msgid "Conversion rate is not positive"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:583
+msgid "No account name supplied"
+msgstr "Nebyl zadán název účtu"
+
+#: dialogs/keditscheduledlg.cpp:114 mymoney/mymoneyscheduled.cpp:1026
+#: wizards/newaccountwizard/knewaccountwizard.cpp:680
+msgid "Write check"
+msgstr "Šek"
+
+#: dialogs/keditscheduledlg.cpp:111 mymoney/mymoneyscheduled.cpp:1014
+#: wizards/newaccountwizard/knewaccountwizard.cpp:682
+msgid "Direct debit"
+msgstr "Bezhotovostní platba"
+
+#: dialogs/keditscheduledlg.cpp:113 mymoney/mymoneyscheduled.cpp:1032
+#: wizards/newaccountwizard/knewaccountwizard.cpp:683
+msgid "Bank transfer"
+msgstr "Bankovní převod"
+
+#: dialogs/keditscheduledlg.cpp:112 mymoney/mymoneyscheduled.cpp:1029
+#: wizards/newaccountwizard/knewaccountwizard.cpp:685
+msgid "Standing order"
+msgstr "Trvalý příkaz"
+
+#: dialogs/keditscheduledlg.cpp:110 mymoney/mymoneyscheduled.cpp:1020
+#: wizards/newaccountwizard/knewaccountwizard.cpp:686
+msgid "Manual deposit"
+msgstr "Ruční vklad"
+
+#: dialogs/keditscheduledlg.cpp:109 mymoney/mymoneyscheduled.cpp:1017
+#: wizards/newaccountwizard/knewaccountwizard.cpp:687
+msgid "Direct deposit"
+msgstr "Bezhotovostní vklad"
+
+#: dialogs/keditscheduledlg.cpp:115 mymoney/mymoneyscheduled.cpp:1023
+#: wizards/newaccountwizard/knewaccountwizard.cpp:688
+msgid "Other"
+msgstr "Ostatní"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:697
+msgid "CreditCard %1 monthly payment"
+msgstr "Měsíční splátka kreditní karty %1"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:703
+msgid "Finish entry and create account"
+msgstr "Ukončit průvodce a vytvořit účet"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:705
+msgid "Finish entry and create account and schedule"
+msgstr "Ukončit průvodce, vytvořit účet a finanční plán"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:708
+msgid "Next due date is prior to opening date"
+msgstr "Nalší datum splatnosti je dřívější, než je datum otevření"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:712
+msgid "No account selected"
+msgstr "Nebyl vybrán účet"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:716
+msgid "No amount for payment selected"
+msgstr "Pro platbu nebyla zadaná žádná částka"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:720
+msgid "No payee for payment selected"
+msgstr "Pro platbu nebyl vybrán žádný plátce/příjemce"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:724
+msgid "No name assigned for schedule"
+msgstr "Pro finanční plán nebylo zadáno žádné jméno"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:805
+msgid "No payee supplied"
+msgstr "Nebyl zadán plátce/příjemce"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:819
+msgid "No opening balance supplied"
+msgstr "Nebyla zadána otevírací bilance"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:826
+msgid "An interest change can only happen after the first payment"
+msgstr "Změna úroků může nastat až po první splátce."
+
+#: dialogs/knewloanwizard.cpp:615 dialogs/knewloanwizard.cpp:634
+#: wizards/newaccountwizard/knewaccountwizard.cpp:884
+#: wizards/newaccountwizard/rc.cpp:55
+msgid "Months"
+msgstr "Měsíce"
+
+#: dialogs/knewloanwizard.cpp:616 dialogs/knewloanwizard.cpp:635
+#: wizards/newaccountwizard/knewaccountwizard.cpp:885
+#: wizards/newaccountwizard/knewaccountwizard.cpp:889
+#: wizards/newaccountwizard/rc.cpp:56
+msgid "Years"
+msgstr "Roky"
+
+#: dialogs/knewloanwizard.cpp:711
+#: wizards/newaccountwizard/knewaccountwizard.cpp:961
+#, c-format
+msgid "KMyMoney has calculated the amount of the loan as %1."
+msgstr "KMyMoney spočítal, že výše půjčky je %1."
+
+#: dialogs/knewloanwizard.cpp:718
+#: wizards/newaccountwizard/knewaccountwizard.cpp:968
+msgid "KMyMoney has calculated the interest rate to %1%."
+msgstr "KMyMoney spočítal úrokovou sazbu ve výši %1%."
+
+#: dialogs/knewloanwizard.cpp:731
+#: wizards/newaccountwizard/knewaccountwizard.cpp:981
+msgid ""
+"KMyMoney has calculated a periodic payment of %1 to cover principal and "
+"interest."
+msgstr "KMyMoney spočítal pravidelnou platbu %1 na pokrytí splátky a úroku."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:993
+#, c-format
+msgid ""
+"The number of payments has been decremented and the balloon payment has been "
+"modified to %1."
+msgstr "Počet splátek byl snížen a poslední platba byla upravena na %1."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1001
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1021
+#, c-format
+msgid "The balloon payment has been modified to %1."
+msgstr "Poslední platba byla upravena na \"%1\"."
+
+#: dialogs/knewloanwizard.cpp:763
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1013
+msgid "KMyMoney has calculated the term of your loan as %1. "
+msgstr "KMyMoney spočítal délku úvěru na \"%1\"."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1052
+msgid "KMyMoney has calculated a balloon payment of %1 for this loan."
+msgstr "KMyMoney pro tuto půjčku spočítal poslední platbu na \"%1\"."
+
+#: dialogs/knewloanwizard.cpp:809
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1059
+msgid "KMyMoney has successfully verified your loan information."
+msgstr "KMyMoney úspěšně ověřil informace o vaší půjčce."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1067
+msgid ""
+"You have entered mis-matching information. Please modify your figures or "
+"leave one value empty to let KMyMoney calculate it for you"
+msgstr ""
+"Mate zadané neshodující se informace. Prosím upravte zadané údaje, nebo "
+"nechce jedno pole prázdné tak, aby KMyMoney mohl tuto hodnotu dopočítat."
+
+#: dialogs/knewloanwizard.cpp:504 dialogs/knewloanwizard.cpp:513
+#: dialogs/knewloanwizard.cpp:522 dialogs/knewloanwizard.cpp:532
+#: dialogs/knewloanwizard.cpp:820
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1070
+msgid "Calculation error"
+msgstr "Chyba při výpočtu"
+
+#: dialogs/knewloanwizard.cpp:824
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1074
+msgid ""
+"\n"
+"\n"
+"Accept this or modify the loan information and recalculate."
+msgstr ""
+"\n"
+"\n"
+"Přijměte, nebo upravte informace o půjčce a nechte ji přepočítat."
+
+#: dialogs/knewloanwizard.cpp:826
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1076
+msgid "Calculation successful"
+msgstr "Výpočet byl úspěšný"
+
+#: dialogs/knewloanwizard.cpp:846
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1129
+#, c-format
+msgid ""
+"_n: one month\n"
+"%n months"
+msgstr "%n měsíců"
+
+#: dialogs/knewloanwizard.cpp:850
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1133
+#, c-format
+msgid ""
+"_n: one year\n"
+"%n years"
+msgstr "%n let"
+
+#: dialogs/knewloanwizard.cpp:854
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1137
+#, c-format
+msgid ""
+"_n: one payment\n"
+"%n payments"
+msgstr "%n plateb"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1190
+msgid "Press Calculate to verify the values"
+msgstr "Stiskněte \"Vypočítat\" pro ověření hodnot"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1194
+msgid "Not all details supplied"
+msgstr "Nebyly zadány všechny podrobnosti"
+
+#: dialogs/kaccountselectdlg.cpp:70 dialogs/knewloanwizard.cpp:122
+#: dialogs/knewloanwizard.cpp:136
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1381
+msgid "&Create..."
+msgstr "&Vytvořit"
+
+#: dialogs/knewloanwizard.cpp:138
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1383
+msgid "Create a new asset account"
+msgstr "Vytvořit nový účet aktiv"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1384
+msgid ""
+"If the asset account does not yet exist, press this button to create it."
+msgstr ""
+"Pokud účet aktiv neexistuje, stiskněte toto tlačítko pro jeho vytvoření."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1596
+msgid "Account information"
+msgstr "Informace o účtu"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1601
+#: wizards/newaccountwizard/rc.cpp:59
+msgid "Subaccount of"
+msgstr "Je podúčtem od"
+
+#: dialogs/rc.cpp:225 dialogs/rc.cpp:326 dialogs/rc.cpp:371 dialogs/rc.cpp:723
+#: plugins/ofximport/dialogs/rc.cpp:23 reports/listtable.cpp:225
+#: widgets/kmymoneyaccounttreebase.cpp:113 widgets/register.cpp:61
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1606
+msgid "Type"
+msgstr "Druh"
+
+#: dialogs/kcurrencyeditdlg.cpp:62 dialogs/rc.cpp:56 dialogs/rc.cpp:59
+#: dialogs/rc.cpp:75 dialogs/rc.cpp:727 dialogs/rc.cpp:792
+#: kmymoneyutils.cpp:84 kmymoneyutils.cpp:111 mymoney/mymoneyaccount.cpp:741
+#: mymoney/mymoneysecurity.cpp:169 reports/listtable.cpp:233
+#: widgets/kmymoneypriceview.cpp:127
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1607
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1630
+#: wizards/newaccountwizard/rc.cpp:6 wizards/newaccountwizard/rc.cpp:24
+msgid "Currency"
+msgstr "Měna"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1608
+#: wizards/newaccountwizard/rc.cpp:7 wizards/newuserwizard/rc.cpp:9
+msgid "Opening date"
+msgstr "Datum otevření"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1610
+#: wizards/newaccountwizard/rc.cpp:9
+#, fuzzy
+msgid "Conversion rate"
+msgstr "Úroková sazba"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1613
+#: wizards/newaccountwizard/rc.cpp:15 wizards/newuserwizard/rc.cpp:13
+msgid "Opening balance"
+msgstr "Otevírací bilance"
+
+#: dialogs/keditscheduledlg.cpp:507 dialogs/transactioneditor.cpp:784
+#: dialogs/transactioneditor.cpp:848 plugins/ofximport/dialogs/rc.cpp:22
+#: widgets/rc.cpp:111 widgets/register.cpp:59 widgets/transaction.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1618
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1632
+msgid "Number"
+msgstr "Číslo účtu"
+
+#: dialogs/rc.cpp:365 wizards/newaccountwizard/knewaccountwizard.cpp:1621
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1634
+#: wizards/newaccountwizard/rc.cpp:26 wizards/newaccountwizard/rc.cpp:66
+msgid "IBAN"
+msgstr "IBAN"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1627
+msgid "Brokerage Account"
+msgstr "Makléřský účet"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1640
+msgid "Loan information"
+msgstr "Informace o úvěru"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1643
+msgid "Amount borrowed"
+msgstr "Půjčených peněz"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1645
+msgid "Amount lent"
+msgstr "Půjčených peněz"
+
+#: dialogs/rc.cpp:515 dialogs/rc.cpp:546
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1647
+#: wizards/newaccountwizard/rc.cpp:75
+msgid "Interest rate"
+msgstr "Úroková sazba"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1648
+msgid "Interest rate is"
+msgstr "Úroková sazba je"
+
+#: dialogs/rc.cpp:509 dialogs/rc.cpp:572
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1649
+msgid "Principal and interest"
+msgstr "Splátka a úrok"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1650
+#: wizards/newaccountwizard/rc.cpp:90
+msgid "Additional fees"
+msgstr "Další poplatky"
+
+#: dialogs/rc.cpp:525 wizards/newaccountwizard/knewaccountwizard.cpp:1651
+#: wizards/newaccountwizard/rc.cpp:44
+msgid "Payment frequency"
+msgstr "Pravidelnost (frekvence) plateb"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1652
+#: wizards/newaccountwizard/rc.cpp:105
+msgid "Payment account"
+msgstr "Platit z účtu"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1655
+msgid "Payout information"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1658
+msgid "Refinance"
+msgstr "Refinancovat"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1661
+msgid "Transfer amount to"
+msgstr "Převést částku na"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1663
+msgid "Transfer amount from"
+msgstr "Převést částku z"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1665
+msgid "Payment date"
+msgstr "Datum platby"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1671
+msgid "Schedule information"
+msgstr "Informace o finančních plánech"
+
+#: reports/listtable.cpp:228
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1684
+msgid "Occurence"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:891 mymoney/mymoneyscheduled.cpp:947
+#: mymoney/mymoneyscheduled.cpp:1283 mymoney/mymoneyscheduletest.cpp:1343
+#: widgets/rc.cpp:19 widgets/rc.cpp:74
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+msgid "Monthly"
+msgstr "Měsíčně"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1677
+msgid "Paid from"
+msgstr "Placeno z"
+
+#: widgets/kmymoneycombo.cpp:473 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1678
+msgid "Pay to"
+msgstr "Placeno na"
+
+#: dialogs/investactivities.cpp:197 dialogs/investactivities.cpp:285
+#: dialogs/investactivities.cpp:365 dialogs/kfindtransactiondlg.cpp:197
+#: dialogs/kmymoneysplittable.cpp:80 dialogs/rc.cpp:51 dialogs/rc.cpp:212
+#: reports/listtable.cpp:197 views/khomeview.cpp:421 views/khomeview.cpp:494
+#: views/khomeview.cpp:528 views/kscheduledview.cpp:73 views/rc.cpp:63
+#: widgets/register.cpp:58 widgets/transaction.cpp:1055
+#: widgets/transaction.cpp:1578 widgets/transaction.cpp:1610
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1679
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1685
+msgid "Amount"
+msgstr "Částka"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1680
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1686
+msgid "First payment due"
+msgstr ""
+
+#: dialogs/rc.cpp:102 wizards/newaccountwizard/knewaccountwizard.cpp:1681
+#: wizards/newaccountwizard/rc.cpp:115
+msgid "Payment method"
+msgstr "Druh platby"
+
+#: wizards/newaccountwizard/rc.cpp:1
+msgid ""
+"This page summarizes the data you have entered. Press <b>Finish</b> to "
+"create the account, schedules, etc. or use <b>Back</b> to modify your "
+"entries."
+msgstr ""
+"Tato stránka shrnuje informace, které jste zadali. Stiskněte tlačítko "
+"<b>Dokončit</b> abyste vytvořili účet, finanční plány,.. nebo stiskněte "
+"tlačítko <b>Zpět</b> pro upravení zadaných informací."
+
+#: wizards/newaccountwizard/rc.cpp:2
+msgid "Item"
+msgstr "Položka"
+
+#: dialogs/rc.cpp:110 dialogs/rc.cpp:165 dialogs/rc.cpp:252 dialogs/rc.cpp:757
+#: dialogs/rc.cpp:818 views/kinvestmentview.cpp:74 widgets/register.cpp:574
+#: wizards/newaccountwizard/rc.cpp:3
+msgid "Value"
+msgstr "Hodnota"
+
+#: wizards/newaccountwizard/rc.cpp:4
+msgid ""
+"Enter the name of the account under which it is known within KMyMoney.\n"
+"Select the type for the new account. Use the <b>What's this?</b> feature to "
+"see more details about the various account types.\n"
+"Enter the date the account was opened and its currency."
+msgstr ""
+"Zadejte jméno účtu pod kterým má být účet veden v programu KMyMoney.\n"
+"Vyberte druh nového účtu. Stiskněte tlačítko <b>Co je to?<b> abyste se "
+"dozvěděli více informací o jednotlivých druzích účtů.\n"
+"Zadejte den kdy byl účet založen a používanou měnu."
+
+#: wizards/newaccountwizard/rc.cpp:5
+msgid "Select the currency in which this account is denominated."
+msgstr "Vyberte měnu ve které je účet veden."
+
+#: wizards/newaccountwizard/rc.cpp:8
+msgid ""
+"The opening balance is the balance of the account when you start using it "
+"with KMyMoney. For new accounts this is usually 0 but for existing accounts "
+"this may well differ. Please consult the account statements to figure out "
+"this value. The opening balance is to be provided in the currency of the "
+"account as selected with the currency button."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:10
+msgid ""
+"The opening date would be the date of the last statement. In case you want "
+"to keep track of transactions prior to this date, enter the ending balance "
+"and statement date of a prior statement and add all following transactions "
+"into KMyMoney.\n"
+"<br>\n"
+"<i>Note</i>: If you do not know the exact amount of the opening balance, "
+"enter an estimate. You can change this value later before you reconcile this "
+"account for the first time."
+msgstr ""
+"Datum otevření by mělo být datum z posledního výpisu. V případě, že chcete "
+"sledovat i transakce před tímto datem zadejte konečný zůstatek a datum "
+"otevření z některého z předešlých výpisů a přidejte všechny následující "
+"transakce do KMyMoney.\n"
+"<br>\n"
+"<i>Poznámka</i>: Pokud nevíte přesnou částku konečného zůstatku, vložte "
+"přibližnou. Můžete tuto hodnotu změnit později, předtím než poprvé provedete "
+"srovnání účtu."
+
+#: dialogs/rc.cpp:52 dialogs/rc.cpp:54 dialogs/rc.cpp:57 dialogs/rc.cpp:60
+#: dialogs/rc.cpp:748 dialogs/rc.cpp:749 dialogs/rc.cpp:768 widgets/rc.cpp:6
+#: widgets/rc.cpp:7 widgets/rc.cpp:8 widgets/rc.cpp:9 widgets/rc.cpp:10
+#: widgets/rc.cpp:11 widgets/rc.cpp:12 widgets/rc.cpp:13 widgets/rc.cpp:14
+#: widgets/rc.cpp:15 widgets/rc.cpp:16 widgets/rc.cpp:17
+#: wizards/newaccountwizard/rc.cpp:11 wizards/newaccountwizard/rc.cpp:88
+#: wizards/newaccountwizard/rc.cpp:91 wizards/newaccountwizard/rc.cpp:93
+#: wizards/newuserwizard/rc.cpp:14
+msgid "xxx"
+msgstr "xxx"
+
+#: wizards/newaccountwizard/rc.cpp:12
+msgid "Account type"
+msgstr "Druh účtu"
+
+#: wizards/newaccountwizard/rc.cpp:13
+msgid ""
+"For foreign currencies an initial conversion rate needs to be provided. This "
+"should be the price of the foreign currency in the base currency on the "
+"opening date of the account."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:14
+msgid "Account name"
+msgstr "Název účtu"
+
+#: wizards/newaccountwizard/rc.cpp:16
+msgid ""
+"<p><b>Checking</b>\n"
+"Use the checking account type to manage activities on your checking account "
+"e.g. payments, checks and cash card purchases.</p>\n"
+"\n"
+"<p><b>Savings</b>\n"
+"Use the savings account type to manage activities on your savings account.</"
+"p>\n"
+"\n"
+"<p><b>Credit Card</b>\n"
+"Use the credit card account type to manage activities on your credit card.</"
+"p>\n"
+"\n"
+"<p><b>Cash</b>\n"
+"\n"
+"Use the cash account type to manage activities in your wallet.</p>\n"
+"\n"
+"<p><b>Loan</b>\n"
+"Use the loan account type to manage amortization loans (e.g. mortgages, car "
+"loan, money you lend, private loans etc.).</p>\n"
+"\n"
+"<p><b>Investment</b>\n"
+"Use the investment account to manage your stock, mutual fund and other "
+"investments.</p>\n"
+"\n"
+"<p><b>Asset</b>\n"
+"Use the asset account type to manage assets (e.g. your house, car or art "
+"collection).</p>\n"
+"\n"
+"<p><b>Liability</b>\n"
+"Use the liability account type to manage any type of liability except "
+"amortization loans. Use it for taxes you owe or money you borrowed from "
+"friends. For amortization loans like mortgages you should create a loan "
+"account.</p>"
+msgstr ""
+"<p><b>Běžný účet<b>\n"
+"Použijte druh účtu \"Běžný účet\" pro správu aktivit na vašem běžném účtu "
+"např. platby, šeky a nákupy platební kartou.</p>\n"
+"\n"
+"<p><b>Úspory</b>\n"
+"Použijte druh účtu \"Úspory\" pro správu aktivit vašich spořících účtů.</p>\n"
+"\n"
+"<p><b>Kreditní karta</b>\n"
+"Použijte typ účtu \"Kreditní karta\" pro správu aktivit vaší kreditní karty."
+"</p>\n"
+"\n"
+"<p><b>Hotovost</b>\n"
+"Použijte typ účtu \"Hotovost\" pro správu aktivit ve vaší peněžence.</p>\n"
+"\n"
+"<p><b>Úvěr</b>\n"
+"Použijte typ účtu \"Úvěr\" pro správu amortizace úvěrů (např. hypotéky, "
+"leasingy, soukromé půjčky,...).</p>\n"
+"\n"
+"<p><b>Investice</b>\n"
+"Použijte typ účtu \"Investice\" pro správu vašich akcií, podílových fondů a "
+"ostatních investic.</p>\n"
+"\n"
+"<p><b>Aktiva</b>\n"
+"Použijte typ účtu \"Aktiva\" pro správu aktiv (např. váš dům, auto, sbírka "
+"umění,...).</p>\n"
+"\n"
+"<p><b>Pasiva</b>\n"
+"Použijte typ účtu \"Pasiva\" pro správu dluhů, které nejsou amortizované. "
+"Použijte jej pro správu daní, které musíte zaplatit, peněz, které jste si "
+"půjčili od přátel,... Pro amortizované půjčky jako je hypotéka byste měli "
+"vytvořit účet typu \"Úvěr\".</p></p>"
+
+#: wizards/newaccountwizard/rc.cpp:17
+msgid "Preferred account"
+msgstr "Upřednostňovaný účet"
+
+#: wizards/newaccountwizard/rc.cpp:18
+msgid ""
+"Mark this checkbox if the account should be maintained as preferred account"
+msgstr ""
+"Zatrhněte tento přepínač pokud by měl být tento účet veden jako "
+"upřednostňovaný"
+
+#: wizards/newaccountwizard/rc.cpp:19
+msgid ""
+"Selecting the <b>Preferred Account</b> checkbox will allow preferred access "
+"in some dialogs and views of KMyMoney."
+msgstr ""
+"Zatržením přepínače <b>Upřednostňovaný účet</b> učiníte tento účet "
+"předvoleným v některých dialozích a pohledech programu KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:20
+msgid "Enter a name under which this account is known within KMyMoney."
+msgstr "Zadejte jméno pod kterým bude účet veden v programu KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:21
+#, fuzzy
+msgid "Online quote"
+msgstr "Vyhledat hodnotu online"
+
+#: wizards/newaccountwizard/rc.cpp:22
+msgid ""
+"Does this investment account have a brokerage account?<p>\n"
+"\n"
+"<b>Check</b> the mark if this investment account has an associated account "
+"for money that is not invested.<br>\n"
+"\n"
+"<b>Uncheck</b> it if you don't use this account for active stock brokerage. "
+"You should also uncheck it if this account is not maintained by a bank or "
+"broker."
+msgstr ""
+"Má tento investiční účet také makléřský účet?<p>\n"
+"\n"
+"<b>Zatrhněte</b> pokud má investiční účet přiřazený účet pro peníze, které "
+"nejsou investované.<br>\n"
+"\n"
+"<b>Nezatrhněte</b> pokud tento účet nepoužíváte pro aktivní burzovní "
+"operace. Také byste neměli tento přepínač volit pokud tento účet není "
+"spravován bankou, nebo makléřem."
+
+#: wizards/newaccountwizard/rc.cpp:23
+msgid "Create brokerage account"
+msgstr "Vytvořit makléřský účet"
+
+#: wizards/newaccountwizard/rc.cpp:25 wizards/newaccountwizard/rc.cpp:64
+msgid "Account number"
+msgstr "Číslo účtu"
+
+#: wizards/newaccountwizard/rc.cpp:27
+msgid ""
+"Please select the required options. Please use the <b>What's this?</b> "
+"feature to see more information about the items."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:28
+msgid "What is the type of the loan?"
+msgstr "O jaký druh úvěru se jedná?"
+
+#: dialogs/rc.cpp:481 wizards/newaccountwizard/rc.cpp:29
+msgid "I am borrowing money"
+msgstr "Já si půjčuji peníze (od někoho)"
+
+#: dialogs/rc.cpp:482 wizards/newaccountwizard/rc.cpp:30
+msgid "I am lending money"
+msgstr "Já půjčuji (někomu)"
+
+#: wizards/newaccountwizard/rc.cpp:31
+msgid "Who is the payee/payer of the loan?"
+msgstr "Kdo je dlužník/věřitel této půjčky?"
+
+#: wizards/newaccountwizard/rc.cpp:32
+msgid ""
+"Enter the name of the person or bank you owe money or who owes you money.\n"
+"\n"
+"If the name does not exist within KMyMoney's database, you are asked if you "
+"want to create it."
+msgstr ""
+"Zadejte jméno osoby, nebo banky od které dlužíte penízem, nebo která dluží "
+"vám.\n"
+"\n"
+"Pokud jméno v databázi KMyMoney neexistuje, budete dotázáni, zda má být "
+"vytvořeno."
+
+#: wizards/newaccountwizard/rc.cpp:33
+msgid "Did you make/receive any payments yet?"
+msgstr "Zaplatili jste/obdrželi jste již nějaké splátky?"
+
+#: wizards/newaccountwizard/rc.cpp:36
+msgid ""
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?\n"
+"\n"
+"Note: Payments made to obtain the loan (e.g. Disagio) are not considered as "
+"payments in this context."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:37
+msgid "Which payments do you want to record?"
+msgstr "Které splátky si přejete zaznamenat?"
+
+#: wizards/newaccountwizard/rc.cpp:38
+msgid "All payments"
+msgstr "Všechny splátky"
+
+#: wizards/newaccountwizard/rc.cpp:39
+msgid "Start with this year's payments"
+msgstr "Splátky provedené tento rok"
+
+#: wizards/newaccountwizard/rc.cpp:40
+msgid ""
+"<qt>Select which transactions should be recorded.\n"
+"\n"
+"<b>All payments</b> allows you to enter all payments made for this loan.\n"
+"\n"
+"The option to <b>start from the beginning of the current year</b> is meant "
+"for loans that are active for a longer period of time already and you don't "
+"want to enter all transactions of the past.\n"
+"</qt>"
+msgstr ""
+"<qt>Vyberte, které transakce by měli být zaznamenány.\n"
+"\n"
+"<b>Všechny splátky</b> vám umožní zadat všechny splátky, které byly v rámci "
+"tohoto úvěru zaznamenány.\n"
+"\n"
+"Možnost <b>Splátky provedené tento rok</b> je zde pro úvěry, které jsou "
+"aktivní již delší dobu a vy u nich nechcete zadávat všechny transakce "
+"provedené v minulosti.\n"
+"</qt>"
+
+#: wizards/newaccountwizard/rc.cpp:41
+msgid "Balance before start of recording"
+msgstr "Bilance před začátkem zaznamenávání"
+
+#: wizards/newaccountwizard/rc.cpp:42
+msgid ""
+"Enter the ending balance found on the statement that is the last one before "
+"you want to start recording this loan in KMyMoney."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:43
+msgid ""
+"You have selected to record only payments from the beginning of this year. "
+"Since prior transactions will not be recorded, you need to supply the "
+"balance of the loan on January 1st of this year."
+msgstr ""
+"Máte vybráno, že si přejete zaznamenávat pouze splátky od začátku tohoto "
+"roku. Jelikož předchozí transakce nebudou zaznamenány, musíte poskytnout "
+"bilanci tohoto úvěru k 1: lednu tohoto roku."
+
+#: wizards/newaccountwizard/rc.cpp:45
+msgid "Interest Compounding frequency"
+msgstr "Frekvence zvyšování úroků"
+
+#: wizards/newaccountwizard/rc.cpp:46
+msgid ""
+"Select the frequency with which the interest is compounded. If uncertain, "
+"select the same as the payment frequency. Consult your loan contract for "
+"details."
+msgstr ""
+"Vyberte frekvenci s jakou je úrok počítán. Pokud je to nejisté, pak zvolte "
+"stejnou frekvenci jako je frekvence splácení. Promluvte si s poskytovatelem "
+"půjčky abyste zjistili více podrobností."
+
+#: wizards/newaccountwizard/rc.cpp:47
+msgid "Due date of first payment to be recorded"
+msgstr "Datum provedení první platby, která má být zaznamenána"
+
+#: wizards/newaccountwizard/rc.cpp:48
+msgid ""
+"Depending on the answer to <b>What do you want to record?</b> this field "
+"means the following:<p>\n"
+"\n"
+"<b>All payments</b><br>\n"
+"Enter the due date of the very first payment<p>\n"
+"\n"
+"<b>Start with this year's payments</b><br>\n"
+"Enter the due date of the first payment in the current year"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:49
+msgid "Type of interest rate"
+msgstr "Druh úrokové sazby"
+
+#: wizards/newaccountwizard/rc.cpp:50
+msgid "Fixed"
+msgstr "Fixní"
+
+#: wizards/newaccountwizard/rc.cpp:51
+msgid "Variable"
+msgstr "Proměnná"
+
+#: wizards/newaccountwizard/rc.cpp:52
+msgid "Time between interest changes"
+msgstr "Doba mezi změnami úroků"
+
+#: dialogs/knewloanwizard.cpp:613 wizards/newaccountwizard/rc.cpp:53
+msgid "Days"
+msgstr "Dní"
+
+#: dialogs/knewloanwizard.cpp:614 wizards/newaccountwizard/rc.cpp:54
+msgid "Weeks"
+msgstr "Týdnů"
+
+#: wizards/newaccountwizard/rc.cpp:57
+msgid "Next interest change is due"
+msgstr "Příští změna úrokové sazby bude provedena"
+
+#: wizards/newaccountwizard/rc.cpp:58
+msgid "This page allows you to select the parent account."
+msgstr "Tato stránka vám umožňuje zvolit nadřazený účet."
+
+#: wizards/newaccountwizard/rc.cpp:60
+msgid ""
+"If this account is managed by an institution please select the institution "
+"from the list. If the institution does not exist yet, please choose the "
+"<b>New Institution</b> button to create it. Otherwise, leave this field "
+"empty.\n"
+"Enter the account number used by the institution to identify the account."
+msgstr ""
+"Pokud je tento účet spravován institucí, prosím vyberte ji ze seznamu, pokud "
+"instituce zatím neexistuje, prosím vyberte <b>Nová instituce</b> a vytvořte "
+"ji. Pokud účet u instituce veden není, ponechte pole prázdné.\n"
+"Zadejte číslo účtu, které instituce používá pro identifikaci účtu."
+
+#: wizards/newaccountwizard/rc.cpp:62
+msgid "Select the institution which manages this account or leave empty"
+msgstr "Vyberte instituci, která spravuje tento účet, nebo ponechte prázdné"
+
+#: wizards/newaccountwizard/rc.cpp:63
+msgid "New Institution"
+msgstr "Nová instituce"
+
+#: wizards/newaccountwizard/rc.cpp:65
+msgid ""
+"Accounts managed by an institution are usually referenced by a unique number "
+"the so called account number. Enter that number here.\n"
+"\n"
+"KMyMoney currently uses this number only for some online banking functions."
+msgstr ""
+"Účty, které spravuje instituce jsou obvykle identifikovatelné "
+"prostřednictvím jednoznačného čísla, kterému se říká \"číslo účtu\". Toto "
+"číslo zadejte zde.\n"
+"\n"
+"V současné době KMyMoney toto číslo používá jen k nějakým funkcím online "
+"bankovnictví."
+
+#: wizards/newaccountwizard/rc.cpp:67
+msgid "Enter the International Bank Account Number into this field"
+msgstr "Do tohoto poel zadejte Mezinárodní číslo účtu (IBAN)"
+
+#: wizards/newaccountwizard/rc.cpp:68
+msgid ""
+"You can enter the IBAN (International Bank Account Number) into this field "
+"if you know it. Usually, people at your institution can tell you the number "
+"or it is printed on your statements.\n"
+"\n"
+"See also http://en.wikipedia.org/wiki/International_Bank_Account_Number for "
+"more information.\n"
+"\n"
+"KMyMoney keeps this field only for documentation purposes and does not use "
+"it otherwise."
+msgstr ""
+"Do tohoto pole můžete zadat vaše číslo IBAN (International Bank Account "
+"Number), pokud jej znáte. Obvykle vám jej můžou sdělit lidé ve vaší bance, "
+"nebo je vytištěno na smlouvě.\n"
+"\n"
+"Pro více informací vizte http://en.wikipedia.org/wiki/"
+"International_Bank_Account_Number \n"
+"\n"
+"KMyMoney udržuje toto pole jen pro dokumentační účely a nijak jej nevyužívá."
+
+#: wizards/newaccountwizard/rc.cpp:69
+msgid ""
+"Now enter the details for your loan. You can leave one of the fields empty "
+"and KMyMoney will calculate it when you press the <b>Calculate</b> button. "
+"Before you can continue with the next page you also need to press "
+"<b>Calculate</b> so that KMyMoney can check the logical correctness of the "
+"values you have supplied."
+msgstr ""
+"Nyní zadejte podrobnosti o vaší půjčce. Můžete nechat jedno pole prázdné a "
+"KMyMoney japřičnou hodnotu vypočítá, jakmile stisknete tlačítko <b>Vypočíst</"
+"b>. Před tím, než budete pokračovat na další stránku musíte stisknout "
+"<b>Vypočíst</b> a KMyMoney zkontroluje logickou správnost hodnot, které jste "
+"zadali."
+
+#: wizards/newaccountwizard/rc.cpp:70
+msgid "The interest rate gets calculated"
+msgstr "Úroková míra je vypočítávána"
+
+#: wizards/newaccountwizard/rc.cpp:71
+msgid "when the payment is received"
+msgstr "když je obdržena platba"
+
+#: wizards/newaccountwizard/rc.cpp:72
+msgid "when the payment is due"
+msgstr ""
+
+#: dialogs/rc.cpp:531 dialogs/rc.cpp:533 wizards/newaccountwizard/rc.cpp:73
+msgid "Loan amount"
+msgstr "Půjčených peněz"
+
+#: wizards/newaccountwizard/rc.cpp:74
+msgid ""
+"Enter the amount of the loan in this field. If you want to calculate this "
+"field out of the other parameters, please leave it empty. If the field is "
+"marked as required (colored background) you have informed KMyMoney about the "
+"fact that there were already some payments towards the loan. In this case, "
+"please enter the ending balance of your last statement."
+msgstr ""
+"Do tohoto pole zadejte množství půjčených peněz. Pokud si přejete vypočítat "
+"tuto hodnotu z ostatních parametrů, pak ponechte pole prázdné. Pokud je pole "
+"označeno jako vyžadované (barevné pozadí) tak jste KMyMoney informovali o "
+"tom, že již byly provedeny nějaké splátky. V takovém případě zadejte hodnotu "
+"konečné bilance z posledního výpisu."
+
+#: wizards/newaccountwizard/rc.cpp:76
+msgid ""
+"Please enter the interest rate in percent or leave the field empty to "
+"calculate it."
+msgstr ""
+"Prosím zadejte úrokovou sazbu v procentech, nebo ponechte pole prázdné, aby "
+"byla hodnota dopočtena."
+
+#: dialogs/rc.cpp:559 wizards/newaccountwizard/rc.cpp:77
+msgid "Term"
+msgstr "Délka"
+
+#: wizards/newaccountwizard/rc.cpp:78
+msgid ""
+"Please enter the term of this loan or enter 0 to calculate it. The term is "
+"the time that is required to fully repay the loan. This time might be "
+"different from the time your loan contract is signed for."
+msgstr ""
+"Posím zadejte délku úvěru, nebo zadejte 0 aby byla dopočtena. Délka úvěru je "
+"doba za kterou je vyžadováno plné splacení úvěru. Tato doba může být jiná, "
+"než doba na kterou je podepsaná smlouva."
+
+#: wizards/newaccountwizard/rc.cpp:79
+msgid "Payment (principal and interest)"
+msgstr "Platba (splátka a úrok)"
+
+#: wizards/newaccountwizard/rc.cpp:80
+msgid ""
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"Prosím zadejte částku na pokrytí splátky a úroku, nebo ponechte pole "
+"prázdné, aby byla hodnota dopočtena."
+
+#: wizards/newaccountwizard/rc.cpp:81
+msgid "Balloon payment"
+msgstr "Poslední splátka"
+
+#: wizards/newaccountwizard/rc.cpp:82
+msgid ""
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"Prosím zadejte částku poslední splátky, nebo ponechte pole prázdné, aby byla "
+"hodnota dopočtena."
+
+#: wizards/newaccountwizard/rc.cpp:83
+msgid "Calculate"
+msgstr "Vypočíst"
+
+#: wizards/newaccountwizard/rc.cpp:84
+msgid "Press this button to calculate/verify your loan details."
+msgstr "Stiskněte toto tolačítko k dopočtění/ověření podrobností úvěru."
+
+#: wizards/newaccountwizard/rc.cpp:85
+msgid ""
+"Pressing this button calculates a possibly missing parameter for your loan "
+"or verifies that the values entered match. If something is not correct you "
+"will receive information about it."
+msgstr ""
+"Stisknutím tohoto tlačítka dopočítáte možný chybnějící parametr, nebo "
+"ověříte zadané parametry vašeho úvěru. Pokud je něco nesprávně vyplněno, tak "
+"na to budete upozorněni."
+
+#: wizards/newaccountwizard/rc.cpp:86
+msgid ""
+"Now enter the information required for the periodic loan payments. If your "
+"regular payments contains any additional fees, click on the <b>Additional "
+"fees</b> button to enter them."
+msgstr ""
+"Nyní zadejte informace vyžadované pro pravidelné splácení úvěru. Pokud vaše "
+"běžná platba zahrnuje nějaké další poplatky, klikněte na <b>Další poplatky</"
+"b> a zadejte je."
+
+#: wizards/newaccountwizard/rc.cpp:87
+msgid "Principal + Interest"
+msgstr "Splátka + Úrok"
+
+#: dialogs/rc.cpp:620 wizards/newaccountwizard/rc.cpp:89
+msgid "+"
+msgstr "+"
+
+#: wizards/newaccountwizard/rc.cpp:92
+msgid "= periodical payments"
+msgstr "= pravidelná splátka"
+
+#: dialogs/rc.cpp:643 wizards/newaccountwizard/rc.cpp:94
+msgid ""
+"If this loan is for an asset, such as a car or a house, you can create the "
+"asset account now. An asset account represents the total value of an asset. "
+"The money from this loan will be transfered into the asset account you "
+"create or select.\n"
+"If this loan is a 'consumer loan' (money to use however you want), you can "
+"use a checking account instead."
+msgstr ""
+"Pokud je tento úvěr určený na nákup nějakých aktiv, jako například auta, "
+"nebo domu, můžete nyní vytvořit účet aktiv. Účet aktiv reprezentuje celkovou "
+"hodnotu aktiv. Peníze z tohoto úvěru budou převedeny na účet aktiv, který "
+"vyberete, nebo vytvoříte.\n"
+"Pokud je tento úvěr \"spotřebitelský úvěr\" (peníze, které můžete užít na co "
+"chcete, ,můžete místo účtu aktiv vybrat běžný účet."
+
+#: dialogs/rc.cpp:644 wizards/newaccountwizard/rc.cpp:95
+msgid "Don't create payout transaction"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:96
+msgid "Refinance existing loan"
+msgstr "Refinancovat existující úvěr"
+
+#: wizards/newaccountwizard/rc.cpp:97
+msgid ""
+"Check this if you are refinancing a loan that already exists in KMyMoney"
+msgstr ""
+"Zvilte tuto volbu, pokud refinancujete úvěr, který již v KMyMoney existuje"
+
+#: dialogs/rc.cpp:642 wizards/newaccountwizard/rc.cpp:98
+msgid "Asset Account"
+msgstr "Účet aktiv"
+
+#: dialogs/rc.cpp:2 wizards/newaccountwizard/rc.cpp:99
+msgid "Create"
+msgstr "Vytvořit"
+
+#: wizards/newaccountwizard/rc.cpp:100
+msgid "Loan account"
+msgstr "Účet půjček"
+
+#: dialogs/rc.cpp:646 wizards/newaccountwizard/rc.cpp:101
+msgid "Date of payment"
+msgstr "Den splátky"
+
+#: wizards/newaccountwizard/rc.cpp:102
+msgid ""
+"KMyMoney creates a schedule for this payment and reminds you whenever a "
+"payment must be made. Please select the account to/from which payments will "
+"be made and the category the interest will be assigned to.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"KMyMoney vytvoří splátkový plán a připomene vám splátku pokaždě, když musí "
+"být provedena. Prosím vyberte na který/ze kterého účtu má být provedena a "
+"kategorii do které má být zařazen úrok.</p>\n"
+"Pokud jste vybrali zaznamenávat všechny spláky, datum již bylo nastaveno. "
+"Pokud jste vybrali zaznamenávat platby od tohoto roku, pak do pole <b>Datum "
+"první splátky</b> vložte datum první splátky z tohoto roku."
+
+#: dialogs/rc.cpp:613 wizards/newaccountwizard/rc.cpp:103
+msgid "Interest category"
+msgstr "Kategorie úroků"
+
+#: wizards/newaccountwizard/rc.cpp:104
+msgid ""
+"The category the interest part of the payment will be assigned to. If you "
+"borrow money you usually have to pay interest, so this should be an expense "
+"category. If you lend the money, you receive the interest. In this case, "
+"select an income category here."
+msgstr ""
+"Kategorie do které bude zařazena úroková část platby. Pokud si půjčujete "
+"peníze, tak obvykle musíte platit úroky, takže by tato kategorie měla být "
+"podkategorií kategorie výdaje. Pokud někomu půjčujete peníze, pak dostáváte "
+"úroky. V tomto případě zvolte kategorii, která je podkategorií kategorie "
+"příjmy."
+
+#: wizards/newaccountwizard/rc.cpp:106
+msgid ""
+"Select the account from which you make your periodical payments or where you "
+"receive regular payments in case you lend the money. In most cases, this is "
+"a checking account."
+msgstr ""
+"Vyberte účet ze kterého provádíte pravidelné splátky, nebo na který vám "
+"pravidelné splátky přicházejí v případě, že půjčujete peníze. Ve většině "
+"případů se jedná o běžný účet."
+
+#: dialogs/rc.cpp:519 wizards/newaccountwizard/rc.cpp:107
+msgid "First payment due on"
+msgstr "První platba provedena"
+
+#: wizards/newaccountwizard/rc.cpp:108
+msgid ""
+"For credit card accounts you can create a monthly schedule which will "
+"automatically remind you about the payment. Please fill in the details about "
+"this payment here."
+msgstr ""
+"Pro typ účtu \"Kreditní karta\" můžete vytvořit finanční plán, který vám "
+"bude automaticky připomínat splátky. Prosím vyplňte podrobné informace o "
+"vašich splátkách zde."
+
+#: wizards/newaccountwizard/rc.cpp:109
+msgid "Yes, remind me when the payment is due"
+msgstr "Ano, připomeň mi, když má být splátka provedena"
+
+#: wizards/newaccountwizard/rc.cpp:110
+msgid "Name of schedule"
+msgstr "Název finančního plánu"
+
+#: dialogs/rc.cpp:151 dialogs/rc.cpp:218 dialogs/rc.cpp:219
+#: reports/listtable.cpp:199 views/kscheduledview.cpp:72 widgets/rc.cpp:113
+#: widgets/register.cpp:57 wizards/newaccountwizard/rc.cpp:111
+msgid "Payee"
+msgstr "Plátce/Příjemce"
+
+#: wizards/newaccountwizard/rc.cpp:112
+msgid "Estimated monthly payment"
+msgstr "Přibližná měsíční platba"
+
+#: wizards/newaccountwizard/rc.cpp:113
+msgid "Due date of next payment"
+msgstr "Datum provedení další splátky"
+
+#: wizards/newaccountwizard/rc.cpp:114
+msgid ""
+"Payment should be made\n"
+"from account"
+msgstr ""
+"Platba by měla být provedena\n"
+"z účtu"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:79
+msgid "KMyMoney New File Setup"
+msgstr "Nastavení nového souboru KMyMoney"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:81
+msgid "Introduction"
+msgstr "Úvod"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:82
+msgid "Personal Data"
+msgstr "Osobní informace"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:83
+msgid "Select Currency"
+msgstr "Vyberte měnu"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:84
+msgid "Select Accounts"
+msgstr "Vyberte účty"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:85
+msgid "Set preferences"
+msgstr "Nastavit předvolby"
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid ""
+"Unable to load data, because no contact has been associated with the owner "
+"of the standard addressbook."
+msgstr ""
+"Selhalo načítání dat, jelikož standardní adresář nemá nastaven žádného "
+"vlastníka."
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid "Addressbook import"
+msgstr "Importovat z adresáře"
+
+#: wizards/newuserwizard/rc.cpp:1
+msgid ""
+"A typical KMyMoney user maintains a checking a account with some institution "
+"and uses it to receive money or pay bills. If this is not the case, please "
+"deselect the checkbox below and continue on the next page."
+msgstr ""
+"Běžný uživatel KMyMoney sprabuje běžný účet vedený u nějaké instituce, který "
+"používá pro příjem peněz, nebo placení účtů. Pokud nejde o tento případ, "
+"prosím zruště zvolení přepínače níže a pokračujte na následující stránku."
+
+#: wizards/newuserwizard/rc.cpp:2
+msgid "I have a checking account that I want to manage with KMyMoney"
+msgstr "Mám běžný účet, který chci spravovat pomocí KMyMoney"
+
+#: wizards/newuserwizard/rc.cpp:3
+msgid "The name of the instititution that issued the account."
+msgstr "Název instituce u které je tento účet veden."
+
+#: wizards/newuserwizard/rc.cpp:4
+msgid ""
+"Each institution has a routing number. Enter it here. If uncertain, leave "
+"the field blank. You can modify it later."
+msgstr ""
+"Každá instituce má své směrové číslo. Zadejte jej zde, pokud si nejste "
+"jisti, pak ponechte pole prázdné. Můžete jej upravit později."
+
+#: wizards/newuserwizard/rc.cpp:5
+msgid "Name of the institution"
+msgstr "Název instituce"
+
+#: wizards/newuserwizard/rc.cpp:6
+msgid "Routing number"
+msgstr "Směrové číslo"
+
+#: wizards/newuserwizard/rc.cpp:7
+msgid ""
+"In general the institution that issued the account also issued a number for "
+"it. Enter it here. If uncertain, you can modify this entry later."
+msgstr ""
+"Většinou instituce, která zakládala účet k němu přiřadila i číslo účtu. "
+"Zadejte jej zde. Pokud si nejste jisti, můžete jej zadat později."
+
+#: wizards/newuserwizard/rc.cpp:8
+msgid ""
+"Enter a descriptive name that will be used by KMyMoney to identify your "
+"checking account."
+msgstr ""
+"Vložte popisný název, který bude KMyMoney používat k identifikaci vašeho "
+"běžného účtu."
+
+#: wizards/newuserwizard/rc.cpp:10
+msgid ""
+"Enter the date from when on you plan to keep track of the transactions in "
+"that account. This is usually the date of the last statement. If uncertain, "
+"leave as is."
+msgstr ""
+"Zadejte datum od kdy si přejete sledovat transakce na tomto účtu. Obvykle se "
+"jedná o datum posledního výpisu. Pokud si nejste jisti, ponechte toto pole "
+"tak jak je."
+
+#: wizards/newuserwizard/rc.cpp:11
+msgid "Number of the account"
+msgstr "Číslo účtu"
+
+#: wizards/newuserwizard/rc.cpp:12
+msgid "Name of the account"
+msgstr "Název účtu"
+
+#: wizards/newuserwizard/rc.cpp:15
+msgid ""
+"Enter the opening balance of the account. This is usually the ending balance "
+"of the last statement. If uncertain, leave as is."
+msgstr ""
+"Vložte otevírací bilanci tohoto účtu. Jedná se obvykle o konečný zůstatek na "
+"posledním vypise. Pokud si nejste jisti ponechte toto pole tak jak je."
+
+#: wizards/newuserwizard/rc.cpp:16
+msgid ""
+"The fields below allow you to enter some information about your checking "
+"account. Once this wizard finishes, the account will be created for you "
+"within KMyMoney."
+msgstr ""
+"Pole níže vám umožňijí zadat nějaké informace o vašem běžném účtu. Jakmile "
+"dokončítet tohoto průvodce KMyMoney vám vytvočí bežný účet."
+
+#: wizards/newuserwizard/rc.cpp:17
+msgid ""
+"KMyMoney supports multiple currencies. Your reports will be based on a "
+"default curreny which you can select here. The default for new accounts is "
+"also the currency you select here."
+msgstr ""
+"KMyMoney podporuje více měn. Vaše zprávy však budou založeny na výchozí "
+"měne, kterou vyberete zde. Jako výchozí měna pro nové účty je také vybrána "
+"měna, kterou zde vyberete."
+
+#: wizards/newuserwizard/rc.cpp:18
+msgid ""
+"KMyMoney will store your financial data in a file on the disk. A standard "
+"filename within your KDE user environment will be the default. This is just "
+"provided for convenience and you can choose any other location here."
+msgstr ""
+"KMyMoney bude ukládat vaše finanční data do souboru na disku. Bežný název "
+"souboru je vaše uživatelské jméno v KDE. Je takto však zvoleno jen kvůli "
+"zvyklostem a vy si však zde můžete vybrat jakékoli jiný název a umístění."
+
+#: wizards/newuserwizard/rc.cpp:19
+msgid ""
+"Either the currently selected file exists or the selected directory does not "
+"exist. Please make sure, that\n"
+"\n"
+"<ul>\n"
+"<li>the selected directory exists and</li>\n"
+"<li>the filename is not currently used in this directory.</li>\n"
+"</ul>"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:20
+msgid ""
+"This finishes the setup of your KMyMoney environment. You can now press the "
+"Finish button and start using KMyMoney to record your financial transactions."
+msgstr ""
+"Tímto dokončíte nastavení vašeho KMyMoney prostředí. Nyní můžete stisknout "
+"tlačítko \"Dokončit\" a začít používat KMyMoney k zaznamenávání vašich "
+"finančních transakcí."
+
+#: wizards/newuserwizard/rc.cpp:21
+msgid ""
+"Please enter some information about yourself.<br><br>\n"
+"\n"
+"This information will be seen and used only by you. The information is used "
+"to personalize KMyMoney, to encrypt your file, etc."
+msgstr ""
+"Prosím zadejte nějaké informace o své osobě.<br><br>\n"
+"\n"
+"Tyto informace uvidíte a budete používat pouze vy. Informace jsou použity ke "
+"zosobnění KMyMoney, šifrování vašeho souboru,..."
+
+#: wizards/newuserwizard/rc.cpp:28
+msgid "Zip code"
+msgstr "PSČ:"
+
+#: wizards/newuserwizard/rc.cpp:30
+msgid "Welcome to KMyMoney!"
+msgstr "Vítejte v KMyMoney!"
+
+#: wizards/newuserwizard/rc.cpp:31
+msgid ""
+"You have started KMyMoney for the first time on this computer. Before this "
+"program can help you to manage your finances, it needs to collect some data "
+"from you.<p>\n"
+"\n"
+"On the next few pages you will be guided through the steps necessary to "
+"setup the program. This will happen only once."
+msgstr ""
+"Spustili jste KMyMoney poprvé na tomto počítači. Předtím, než vám může "
+"program pomoci se správou vašich financí musí od vás zjistit nějaké "
+"informace.</p>\n"
+"\n"
+"Na několika dalších stránkách budete provedeni nezbytnými kroky k nastavení "
+"programu. Musíte to provést jen jednou."
+
+#: wizards/newuserwizard/rc.cpp:32
+msgid ""
+"<p>KMyMoney can encrypt your datafile using GPG Encryption. GPG encryption "
+"is one of the most secure methods in the world for protecting data. All of "
+"your account numbers and other important financial information will be very "
+"secure.</p>"
+msgstr ""
+"<p>KMyMoney může zašifrovat váš datový soubor s použitím GPG šifrování. GPG "
+"šifrování je jedna z nejbezpečnějších metod ve světě ochrany dat. Všechny "
+"vaše čísla účtů a další důležité informace budou silně zabezpečeny.</p>"
+
+#: wizards/newuserwizard/rc.cpp:33
+msgid ""
+"If you would like to review or change any preference settings for KMyMoney "
+"at this time, you can do so here. If not just click <b>Next</b>."
+msgstr ""
+"Pokud si přejete zkontrolovat, nebo změnit libovolné nastavení programu "
+"KMyMoney, můžete to provést zde. Pokud ne, prostě stiskněte <b>Další</b>."
+
+#: wizards/newuserwizard/rc.cpp:34
+msgid "Configure preferences now"
+msgstr "Nastavit předvolby nyní"
+
+#: wizards/newuserwizard/rc.cpp:35
+#, fuzzy
+msgid ""
+"You can change the configuration options at any time using the configuration "
+"dialog. Just select the <b>Configure KMyMoney...</b> option in the "
+"<b>Settings</b> menu."
+msgstr ""
+"Nastavení můžete změnit kdykoli pomocí konfiguračního dialogu. Klikněte na "
+"položku <b>Nastavit: KMyMoney...</b> v menu <b>Nastavení</b>."
+
+#: dialogs/rc.cpp:83 dialogs/rc.cpp:411 dialogs/rc.cpp:435
+#: kmymoneyutils.cpp:92 kmymoneyutils.cpp:105 mymoney/mymoneyaccount.cpp:753
+#: mymoney/mymoneysecurity.cpp:160
+msgid "Stock"
+msgstr "Akcie"
+
+#: dialogs/rc.cpp:84 dialogs/rc.cpp:412 dialogs/rc.cpp:436
+#: kmymoneyutils.cpp:107 mymoney/mymoneysecurity.cpp:163
+msgid "Mutual Fund"
+msgstr "Podílový fond"
+
+#: dialogs/rc.cpp:85 dialogs/rc.cpp:413 dialogs/rc.cpp:437
+#: kmymoneyutils.cpp:109 mymoney/mymoneysecurity.cpp:166
+msgid "Bond"
+msgstr "Dluhopis"
+
+#: mymoney/mymoneysecurity.cpp:172 reports/querytable.cpp:1150
+#: widgets/kmymoneyaccountselector.cpp:76
+msgid "None"
+msgstr "Nic"
+
+#: dialogs/rc.cpp:46 kmymoneyutils.cpp:402 mymoney/mymoneyaccount.cpp:759
+#: mymoney/mymoneyscheduled.cpp:1002 mymoney/mymoneysecurity.cpp:175
+#: views/kforecastview.cpp:174 widgets/register.cpp:54
+#: widgets/register.cpp:485 widgets/transaction.cpp:708
+#: widgets/transaction.cpp:1459
+msgid "Unknown"
+msgstr "Neznámý"
+
+#: mymoney/storage/mymoneystoragesql.cpp:191
+msgid ""
+"Database apparently in use\n"
+"Opened by %1 on %2 at %3.\n"
+"Open anyway?"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragesql.cpp:229
+msgid "Cannot currently create database for driver %1; please create manually"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragesql.cpp:244
+msgid "Error in create database %1; do you have create permissions?"
+msgstr "Chyba při vytváření databáže %1, máte na vytváření oprávnění?"
+
+#: converter/mymoneygncreader.cpp:1329
+#: mymoney/storage/mymoneystoragexml.cpp:166
+msgid "Loading transactions..."
+msgstr "Nahrávám transakce..."
+
+#: converter/mymoneygncreader.cpp:1190
+#: mymoney/storage/mymoneystoragexml.cpp:173
+msgid "Loading accounts..."
+msgstr "Nahrávám účty..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:180
+msgid "Loading securities..."
+msgstr "Nahrávám zabezpečení..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:187
+msgid "Loading reports..."
+msgstr "Nahrávám výkazy..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:268
+msgid "Unknown XML tag %1 found in line %2"
+msgstr "Neznámý XML tag %1 nalezen na řádce %2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:274
+msgid "Exception while creating a %1 element: %2"
+msgstr "Vyjímka během vytváření %1 elementu %2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:513
+msgid "Loading file information..."
+msgstr "Nahrávám informace o souboru..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:591
+msgid "Loading user information..."
+msgstr "Nahrávám informace o uživateli..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:655
+msgid "Saving accounts..."
+msgstr "Ukládám účty..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:678
+msgid "Saving transactions..."
+msgstr "Ukládám transakce..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:747
+msgid "Saving reports..."
+msgstr "Ukládám výkazy..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:762
+msgid "Saving budgets..."
+msgstr "Ukládám rozpočty..."
+
+#: mymoney/storage/mymoneystoragedump.cpp:414
+msgid "not reconciled"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragedump.cpp:417
+msgid "cleared"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragedump.cpp:420
+msgid "reconciled"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragedump.cpp:423
+msgid "frozen"
+msgstr "zmrazeno"
+
+#: mymoney/storage/mymoneystoragedump.cpp:426
+msgid "unknown"
+msgstr "neznámý"
+
+#: mymoney/mymoneyaccount.cpp:101
+msgid ""
+"Account %1 contains an opening balance. Please use a KMyMoney version >= 0.8 "
+"and < 0.9 to correct the problem."
+msgstr ""
+"Účet %1 obsahuje otevírací bilanci. Použijte prosím KMyMoney verze >= 0.8 a "
+"< 0.9 pro napravení problému."
+
+#: mymoney/mymoneyaccount.cpp:597
+msgid ""
+"_: Brokerage (suffix for account names)\n"
+"Brokerage"
+msgstr "Makléřský"
+
+#: kmymoneyutils.cpp:74 mymoney/mymoneyaccount.cpp:726
+msgid "Certificate of Deposit"
+msgstr ""
+
+#: kmymoneyutils.cpp:78 mymoney/mymoneyaccount.cpp:732
+msgid "Money Market"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:186 converter/mymoneytemplate.cpp:187
+#: dialogs/knewaccountdlg.cpp:1018 kmymoneyutils.cpp:86
+#: mymoney/mymoneyaccount.cpp:744 views/kaccountsview.cpp:360
+#: views/kbudgetview.cpp:372 views/kcategoriesview.cpp:178
+#: views/khomeview.cpp:1813 views/kmymoneyview.cpp:767
+#: widgets/kmymoneyaccountselector.cpp:68
+#: widgets/kmymoneyaccountselector.cpp:179
+#: widgets/kmymoneyaccountselector.cpp:370 widgets/register.cpp:828
+msgid "Income"
+msgstr "Příjem"
+
+#: converter/mymoneytemplate.cpp:190 converter/mymoneytemplate.cpp:191
+#: dialogs/knewaccountdlg.cpp:1020 kmymoneyutils.cpp:88
+#: mymoney/mymoneyaccount.cpp:747 views/kaccountsview.cpp:364
+#: views/kbudgetview.cpp:378 views/kcategoriesview.cpp:182
+#: views/kmymoneyview.cpp:768 widgets/kmymoneyaccountselector.cpp:72
+#: widgets/kmymoneyaccountselector.cpp:180
+#: widgets/kmymoneyaccountselector.cpp:380 widgets/register.cpp:829
+msgid "Expense"
+msgstr "Výdaj"
+
+#: kmymoneyutils.cpp:90 mymoney/mymoneyaccount.cpp:750
+msgid "Investment Loan"
+msgstr "Investiční úvěr"
+
+#: mymoney/mymoneyfile.cpp:47
+msgid "Opening Balances"
+msgstr "Otevírací bilance"
+
+#: mymoney/mymoneyfile.cpp:398
+msgid "Cannot remove transaction that references a closed account."
+msgstr "Nemůžu odstranit transakci, která zahrnuje uzavřený účet."
+
+#: mymoney/mymoneyfile.cpp:1414 mymoney/mymoneyfile.cpp:1433
+#: mymoney/mymoneyfile.cpp:1447 mymoney/mymoneyfile.cpp:1469
+msgid "* Problem with account '%1'"
+msgstr "* Problém s účtem \"%1\""
+
+#: mymoney/mymoneyfile.cpp:1419
+msgid " * Parent account '%1' belongs to a different group."
+msgstr "Nadřazený účet \"%2\" patří do jiné skupiny."
+
+#: mymoney/mymoneyfile.cpp:1420 mymoney/mymoneyfile.cpp:1450
+msgid " New parent account is the top level account '%1'."
+msgstr "Novým nadřazeným účtem je účet nejvyšší úrovně \"%1\"."
+
+#: mymoney/mymoneyfile.cpp:1436
+msgid " * Parent account '%1' does not contain '%2' as sub-account."
+msgstr "* Nadřazeným účet \"%1\" neobsahuje podůčet \"%2\"."
+
+#: mymoney/mymoneyfile.cpp:1449
+msgid " * The parent with id %1 does not exist anymore."
+msgstr "* Nadřažený účet s id %1 již nadále neexistuje."
+
+#: mymoney/mymoneyfile.cpp:1471
+msgid " * Child account with id %1 does not exist anymore."
+msgstr "* Podúčet s id %1 již nadále neexistuje."
+
+#: mymoney/mymoneyfile.cpp:1472
+msgid " The child account list will be reconstructed."
+msgstr "Seznam podřízených účtů bude rekonstruován."
+
+#: mymoney/mymoneyfile.cpp:1492
+msgid " * Unable to update account data in engine."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1499
+msgid "* Reconstructing the child lists for"
+msgstr "* Rekonstruuji seznam podřízených účtů pro"
+
+#: mymoney/mymoneyfile.cpp:1536
+msgid " * Unable to update account data for account %1 in engine"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1554
+msgid " * Payee %1 recreated with fixed id"
+msgstr "* Plátce/Příjemce %1 byl znovu vytvořen s fixovaným id"
+
+#: mymoney/mymoneyfile.cpp:1583
+msgid " * Payee id updated in split of transaction '%1'."
+msgstr ""
+"* ID plátce/příjemce bylo aktualizováno při rozdělování transakce \"%1\"."
+
+#: mymoney/mymoneyfile.cpp:1596
+msgid " * shares set to value in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1599
+msgid " * value set to shares in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1605
+msgid ""
+" * Split %2 in transaction '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1616
+msgid " * action marked as interest in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1643
+msgid " * Payee id updated in split of schedule '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1649
+msgid ""
+" * Split in scheduled transaction '%1' contained value != 0 and shares == 0."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1650
+msgid " Shares set to value."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1658
+msgid " * Removed bankid from split in scheduled transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1671
+msgid " * shares set to value in split in schedule '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1674
+msgid " * value set to shares in split in schedule '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1680
+msgid ""
+" * Split %2 in schedule '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1706
+msgid " * Payee id updated in report '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1723
+msgid " * Payee '%1' removed."
+msgstr " * Plátce/Příjemce \"%1\" byl odstraněn."
+
+#: mymoney/mymoneyfile.cpp:1730
+msgid "Finish! Data is consistent."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1732
+msgid "Finish! %1 problem(s) corrected. %2 problem(s) still present."
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:873 mymoney/mymoneyscheduled.cpp:918
+#: mymoney/mymoneyscheduled.cpp:969 mymoney/mymoneyscheduled.cpp:1265
+#: mymoney/mymoneyscheduletest.cpp:1336
+msgid "Once"
+msgstr "Jednou"
+
+#: mymoney/mymoneyscheduled.cpp:875 mymoney/mymoneyscheduled.cpp:924
+#: mymoney/mymoneyscheduled.cpp:1267 mymoney/mymoneyscheduletest.cpp:1337
+#: widgets/rc.cpp:72
+msgid "Daily"
+msgstr "Denně"
+
+#: mymoney/mymoneyscheduled.cpp:877 mymoney/mymoneyscheduled.cpp:931
+#: mymoney/mymoneyscheduled.cpp:1269 mymoney/mymoneyscheduletest.cpp:1338
+#: widgets/rc.cpp:73
+msgid "Weekly"
+msgstr "Týdně"
+
+#: mymoney/mymoneyscheduled.cpp:881 mymoney/mymoneyscheduled.cpp:932
+#: mymoney/mymoneyscheduled.cpp:1273 mymoney/mymoneyscheduletest.cpp:1339
+msgid "Every other week"
+msgstr "Každý druhý týden"
+
+#: mymoney/mymoneyscheduled.cpp:879 mymoney/mymoneyscheduled.cpp:1271
+#: mymoney/mymoneyscheduletest.cpp:1340
+msgid "Fortnightly"
+msgstr "Každé dva týdny"
+
+#: mymoney/mymoneyscheduled.cpp:883 mymoney/mymoneyscheduled.cpp:941
+#: mymoney/mymoneyscheduled.cpp:1275 mymoney/mymoneyscheduletest.cpp:1341
+#, fuzzy
+msgid "Every half month"
+msgstr "Každé čtyři měsíce"
+
+#: mymoney/mymoneyscheduled.cpp:887 mymoney/mymoneyscheduled.cpp:934
+#: mymoney/mymoneyscheduled.cpp:1279 mymoney/mymoneyscheduletest.cpp:1342
+msgid "Every four weeks"
+msgstr "Každé čtyři týdny"
+
+#: mymoney/mymoneyscheduled.cpp:893 mymoney/mymoneyscheduled.cpp:935
+#: mymoney/mymoneyscheduled.cpp:1285 mymoney/mymoneyscheduletest.cpp:1344
+msgid "Every eight weeks"
+msgstr "Každých 8 týdnů"
+
+#: mymoney/mymoneyscheduled.cpp:895 mymoney/mymoneyscheduled.cpp:948
+#: mymoney/mymoneyscheduled.cpp:1287 mymoney/mymoneyscheduletest.cpp:1345
+msgid "Every two months"
+msgstr "Každé dva měsíce"
+
+#: mymoney/mymoneyscheduled.cpp:897 mymoney/mymoneyscheduled.cpp:949
+#: mymoney/mymoneyscheduled.cpp:1289 mymoney/mymoneyscheduletest.cpp:1346
+msgid "Every three months"
+msgstr "Každé tři měsíce"
+
+#: mymoney/mymoneyscheduled.cpp:899 mymoney/mymoneyscheduled.cpp:1291
+#: mymoney/mymoneyscheduletest.cpp:1347 widgets/rc.cpp:76
+msgid "Quarterly"
+msgstr "Čtvrtletně"
+
+#: mymoney/mymoneyscheduled.cpp:901 mymoney/mymoneyscheduled.cpp:950
+#: mymoney/mymoneyscheduled.cpp:1293 mymoney/mymoneyscheduletest.cpp:1348
+msgid "Every four months"
+msgstr "Každé čtyři měsíce"
+
+#: mymoney/mymoneyscheduled.cpp:903 mymoney/mymoneyscheduled.cpp:951
+#: mymoney/mymoneyscheduled.cpp:1295 mymoney/mymoneyscheduletest.cpp:1349
+msgid "Twice yearly"
+msgstr "Dvakrát ročně"
+
+#: mymoney/mymoneyscheduled.cpp:905 mymoney/mymoneyscheduled.cpp:957
+#: mymoney/mymoneyscheduled.cpp:1297 mymoney/mymoneyscheduletest.cpp:1350
+#: widgets/rc.cpp:20 widgets/rc.cpp:77
+msgid "Yearly"
+msgstr "Ročně"
+
+#: mymoney/mymoneyscheduled.cpp:907 mymoney/mymoneyscheduled.cpp:958
+#: mymoney/mymoneyscheduled.cpp:1299 mymoney/mymoneyscheduletest.cpp:1351
+msgid "Every other year"
+msgstr "Každý druhý rok"
+
+#: mymoney/mymoneyscheduled.cpp:870 mymoney/mymoneyscheduled.cpp:913
+#: mymoney/mymoneyscheduled.cpp:966
+msgid "Any"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:885 mymoney/mymoneyscheduled.cpp:933
+#: mymoney/mymoneyscheduled.cpp:1277
+msgid "Every three weeks"
+msgstr "Každé tři týdny"
+
+#: mymoney/mymoneyscheduled.cpp:889 mymoney/mymoneyscheduled.cpp:925
+#: mymoney/mymoneyscheduled.cpp:1281
+msgid "Every thirty days"
+msgstr "Každých 30 dní"
+
+#: mymoney/mymoneyscheduled.cpp:971
+#, fuzzy
+msgid "Day"
+msgstr "Dní"
+
+#: mymoney/mymoneyscheduled.cpp:973 reports/listtable.cpp:206
+#: widgets/kmymoneycalendar.cpp:123 widgets/rc.cpp:97
+msgid "Week"
+msgstr "Týden"
+
+#: mymoney/mymoneyscheduled.cpp:975
+#, fuzzy
+msgid "Half-month"
+msgstr "Každé čtyři měsíce"
+
+#: mymoney/mymoneyscheduled.cpp:977 reports/listtable.cpp:205
+#: widgets/kmymoneycalendar.cpp:124 widgets/rc.cpp:96
+msgid "Month"
+msgstr "Měsíc"
+
+#: dialogs/rc.cpp:400 mymoney/mymoneyscheduled.cpp:979 views/rc.cpp:14
+msgid "Year"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:989
+msgid "Bill"
+msgstr "Výběr"
+
+#: dialogs/rc.cpp:107 dialogs/rc.cpp:162 dialogs/rc.cpp:249 dialogs/rc.cpp:754
+#: mymoney/mymoneyscheduled.cpp:992 widgets/kmymoneycombo.cpp:420
+#: widgets/register.cpp:571
+msgid "Deposit"
+msgstr "Vklad"
+
+#: mymoney/mymoneyscheduled.cpp:995 reports/querytable.cpp:594
+#: reports/querytable.cpp:696 widgets/kmymoneycombo.cpp:419
+msgid "Transfer"
+msgstr "Převod"
+
+#: mymoney/mymoneyscheduled.cpp:1035
+msgid "Any (Error)"
+msgstr ""
+
+#: dialogs/rc.cpp:114 mymoney/mymoneyscheduled.cpp:1047
+msgid "Change the date to the previous Friday"
+msgstr "Změnit datum na předchozí pátek"
+
+#: dialogs/rc.cpp:115 mymoney/mymoneyscheduled.cpp:1050
+msgid "Change the date to the next Monday"
+msgstr "Změnit datum na příští pondělí"
+
+#: mymoney/mymoneyscheduled.cpp:1053
+msgid "Do Nothing"
+msgstr "Nedělat nic"
+
+#: kmymoney2.cpp:312
+#, fuzzy
+msgid "Open database..."
+msgstr "Otevřít databázi"
+
+#: kmymoney2.cpp:313
+#, fuzzy
+msgid "Save as database..."
+msgstr "Uložit jako databázi..."
+
+#: kmymoney2.cpp:314
+msgid "Backup..."
+msgstr "Záloha..."
+
+#: kmymoney2.cpp:315 kmymoney2.cpp:321
+#, fuzzy
+msgid "QIF..."
+msgstr "QIF..."
+
+#: kmymoney2.cpp:316
+#, fuzzy
+msgid "Gnucash..."
+msgstr "Gnucash..."
+
+#: kmymoney2.cpp:317
+#, fuzzy
+msgid "Statement file..."
+msgstr "Soubor s výpisem..."
+
+#: kmymoney2.cpp:319 kmymoney2.cpp:320
+#, fuzzy
+msgid "Account Template..."
+msgstr "Šablona účtů..."
+
+#: kmymoney2.cpp:322
+msgid "Personal Data..."
+msgstr "Osobní informace..."
+
+#: kmymoney2.cpp:325
+msgid "Dump Memory"
+msgstr ""
+
+#: kmymoney2.cpp:327
+msgid "File-Information..."
+msgstr "Informace o souboru..."
+
+#: kmymoney2.cpp:332
+msgid "Find transaction..."
+msgstr "Hledat transakci..."
+
+#: kmymoney2.cpp:337
+msgid "Show Transaction Detail"
+msgstr "Zobrazit podrobnosti o transakci"
+
+#: kmymoney2.cpp:338 rc.cpp:60
+msgid "Hide reconciled transactions"
+msgstr ""
+
+#: kmymoney2.cpp:339 rc.cpp:57
+msgid "Hide unused categories"
+msgstr "Skrýt nepoužité kategorie"
+
+#: kmymoney2.cpp:340
+msgid "Show all accounts"
+msgstr "Zobrazit všechny účty"
+
+#: kmymoney2.cpp:345
+msgid "New institution..."
+msgstr "Nová instituce..."
+
+#: kmymoney2.cpp:346
+msgid "Edit institution..."
+msgstr "Upravit instituci..."
+
+#: kmymoney2.cpp:347
+msgid "Delete institution..."
+msgstr "Odstranit instituci...."
+
+#: kmymoney2.cpp:352
+msgid "New account..."
+msgstr "Nový účet..."
+
+#: kmymoney2.cpp:354
+msgid "Open ledger"
+msgstr "Otevřít peněžní děník"
+
+#: kmymoney2.cpp:355
+msgid "Reconcile..."
+msgstr "Provést rozvahu..."
+
+#: kmymoney2.cpp:356
+msgid ""
+"_: Finish reconciliation\n"
+"Finish"
+msgstr ""
+
+#: kmymoney2.cpp:357
+msgid ""
+"_: Postpone reconciliation\n"
+"Postpone"
+msgstr ""
+
+#: kmymoney2.cpp:358
+msgid "Edit account..."
+msgstr "Úpravit účet..."
+
+#: kmymoney2.cpp:359
+msgid "Delete account..."
+msgstr "Odstranit účet..."
+
+#: kmymoney2.cpp:360
+msgid "Close account"
+msgstr "Uzavřít účet"
+
+#: kmymoney2.cpp:361
+msgid "Reopen account"
+msgstr "Znovuotevřít účet"
+
+#: kmymoney2.cpp:362
+msgid "Transaction report"
+msgstr "Výkaz transakcí"
+
+#: kmymoney2.cpp:364
+msgid "Show balance chart..."
+msgstr ""
+
+#: kmymoney2.cpp:366
+msgid "Map to online account"
+msgstr "Napojit na online účet"
+
+#: kmymoney2.cpp:367
+msgid "Unmap account"
+msgstr "Zrušit napojení"
+
+#: dialogs/settings/rc.cpp:126 kmymoney2.cpp:368 views/kpayeesview.cpp:363
+#: widgets/rc.cpp:50
+msgid "Update"
+msgstr ""
+
+#: kmymoney2.cpp:372
+msgid "Update account..."
+msgstr "Aktualizovat účet..."
+
+#: kmymoney2.cpp:373
+#, fuzzy
+msgid "Update all accounts..."
+msgstr "Aktualizovat účet..."
+
+#: kmymoney2.cpp:378
+msgid "New category..."
+msgstr "Nová kategorie..."
+
+#: kmymoney2.cpp:379
+msgid "Edit category..."
+msgstr "Upravit kategorii..."
+
+#: kmymoney2.cpp:380
+msgid "Delete category..."
+msgstr "Odstranit kategorii..."
+
+#: kmymoney2.cpp:386
+msgid "QIF Profile Editor..."
+msgstr "Editor profilu QIF..."
+
+#: kmymoney2.cpp:387
+#, fuzzy
+msgid "Securities..."
+msgstr "Nahrávám zabezpečení..."
+
+#: kmymoney2.cpp:388
+#, fuzzy
+msgid "Currencies..."
+msgstr "Měny..."
+
+#: kmymoney2.cpp:389
+#, fuzzy
+msgid "Prices..."
+msgstr "Ceny..."
+
+#: kmymoney2.cpp:390
+msgid "Update Stock and Currency Prices..."
+msgstr "Aktualizovat cenu akcií a směnné kurzy měn..."
+
+#: kmymoney2.cpp:391
+msgid "Consistency Check"
+msgstr "Kontrola konzistentnosti"
+
+#: kmymoney2.cpp:392
+msgid "Performance-Test"
+msgstr "Test výkonu"
+
+#: kmymoney2.cpp:393
+msgid "KCalc..."
+msgstr "KCalc..."
+
+#: kmymoney2.cpp:399
+msgid "Enable all messages"
+msgstr "Povolit všechny zprávy"
+
+#: kmymoney2.cpp:400
+msgid "KDE language settings..."
+msgstr "Nastavení jazyka KDE..."
+
+#: kmymoney2.cpp:405
+msgid "&Show tip of the day"
+msgstr "&Zobratit tip dne"
+
+#: kmymoney2.cpp:410
+msgid ""
+"_: New transaction button\n"
+"New"
+msgstr "Nová"
+
+#: kmymoney2.cpp:415
+msgid ""
+"_: Edit transaction button\n"
+"Edit"
+msgstr "Upravit"
+
+#: kmymoney2.cpp:417
+msgid ""
+"_: Enter transaction\n"
+"Enter"
+msgstr "Vložit"
+
+#: kmymoney2.cpp:420
+msgid ""
+"_: Edit split button\n"
+"Edit splits"
+msgstr "Upravit rozdělení"
+
+#: kmymoney2.cpp:421
+msgid ""
+"_: Cancel transaction edit\n"
+"Cancel"
+msgstr "Zrušit"
+
+#: kmymoney2.cpp:422
+msgid ""
+"_: Delete transaction\n"
+"Delete"
+msgstr "Odstranit"
+
+#: kmymoney2.cpp:423
+msgid ""
+"_: Duplicate transaction\n"
+"Duplicate"
+msgstr "Duplikovat"
+
+#: kmymoney2.cpp:425 kmymoney2.cpp:4826 kmymoney2.cpp:5107
+msgid ""
+"_: Button text for match transaction\n"
+"Match"
+msgstr "Spárovat"
+
+#: kmymoney2.cpp:426
+msgid ""
+"_: Accept 'imported' and 'matched' transaction\n"
+"Accept"
+msgstr "Příjmout"
+
+#: kmymoney2.cpp:428
+msgid ""
+"_: Toggle reconciliation flag\n"
+"Toggle"
+msgstr ""
+
+#: kmymoney2.cpp:429
+msgid ""
+"_: Mark transaction cleared\n"
+"Cleared"
+msgstr ""
+
+#: kmymoney2.cpp:430
+msgid ""
+"_: Mark transaction reconciled\n"
+"Reconciled"
+msgstr ""
+
+#: kmymoney2.cpp:431
+msgid ""
+"_: Mark transaction not reconciled\n"
+"Not reconciled"
+msgstr ""
+
+#: kmymoney2.cpp:432
+msgid ""
+"_: Select all transactions\n"
+"Select all"
+msgstr "Vybrat vše"
+
+#: kmymoney2.cpp:434 kmymoney2.cpp:5497
+msgid "Goto account"
+msgstr "Přejít na účet"
+
+#: kmymoney2.cpp:435 kmymoney2.cpp:5495
+msgid "Goto payee"
+msgstr "Přejít na plátce/příjemce"
+
+#: kmymoney2.cpp:436
+#, fuzzy
+msgid "Create scheduled transaction..."
+msgstr "Naplánované transakce nalezeny"
+
+#: kmymoney2.cpp:437
+msgid "Assign next number"
+msgstr "Přiřadit další číslo"
+
+#: kmymoney2.cpp:438
+msgid ""
+"_: Combine transactions\n"
+"Combine"
+msgstr ""
+
+#: kmymoney2.cpp:440
+msgid "New investment"
+msgstr "Nová investice"
+
+#: kmymoney2.cpp:441
+msgid "Edit investment..."
+msgstr "Upravit investici..."
+
+#: kmymoney2.cpp:442
+msgid "Delete investment..."
+msgstr "Odstranit investici..."
+
+#: kmymoney2.cpp:443
+msgid "Online price update..."
+msgstr "Aktualizovat cenu online..."
+
+#: kmymoney2.cpp:444
+msgid "Manual price update..."
+msgstr "Ruční aktualizace ceny..."
+
+#: kmymoney2.cpp:446
+#, fuzzy
+msgid "New scheduled transaction..."
+msgstr "Naplánované transakce nalezeny"
+
+#: kmymoney2.cpp:447
+#, fuzzy
+msgid "Edit scheduled transaction..."
+msgstr "Naplánované transakce nalezeny"
+
+#: kmymoney2.cpp:448
+#, fuzzy
+msgid "Delete scheduled transaction..."
+msgstr "Naplánované transakce nalezeny"
+
+#: kmymoney2.cpp:449
+#, fuzzy
+msgid "Duplicate scheduled transaction"
+msgstr "Naplánované transakce nalezeny"
+
+#: kmymoney2.cpp:450
+#, fuzzy
+msgid "Enter next transaction..."
+msgstr "Hledat transakci..."
+
+#: kmymoney2.cpp:451
+#, fuzzy
+msgid "Skip next transaction..."
+msgstr "Hledat transakci..."
+
+#: kmymoney2.cpp:453
+msgid "New payee"
+msgstr "Nový plátce/příjemce"
+
+#: kmymoney2.cpp:454
+msgid "Rename payee"
+msgstr "Přejmenovat plátce/příjemce"
+
+#: kmymoney2.cpp:455
+msgid "Delete payee"
+msgstr "Odstranit plátce/příjemce"
+
+#: kmymoney2.cpp:457
+msgid "New budget"
+msgstr "Nový rozpočet"
+
+#: kmymoney2.cpp:458
+msgid "Rename budget"
+msgstr "Přejmenovat rozpočet"
+
+#: kmymoney2.cpp:459
+msgid "Delete budget"
+msgstr "Odstranit rozpočet"
+
+#: kmymoney2.cpp:460
+msgid "Copy budget"
+msgstr "Kopírovat rozpočet"
+
+#: kmymoney2.cpp:461
+msgid "Change budget year"
+msgstr "Změnit rok rozpočtu"
+
+#: kmymoney2.cpp:462
+msgid ""
+"_: Budget based on forecast\n"
+"Forecast"
+msgstr "Předpovědět"
+
+#: kmymoney2.cpp:467 kmymoney2.cpp:3990 kmymoney2.cpp:3993 kmymoney2.cpp:3999
+msgid "New currency"
+msgstr "Nová měna"
+
+#: kmymoney2.cpp:468 kmymoney2.cpp:4021 kmymoney2.cpp:4026
+msgid "Rename currency"
+msgstr "Přejmenovat měnu"
+
+#: kmymoney2.cpp:469 kmymoney2.cpp:4039
+msgid "Delete currency"
+msgstr "Odstranit měnu"
+
+#: dialogs/rc.cpp:69 kmymoney2.cpp:470
+msgid "Select as base currency"
+msgstr "Zvolit jako základní měnu"
+
+#: kmymoney2.cpp:481
+msgid "View back"
+msgstr ""
+
+#: kmymoney2.cpp:482
+msgid "View forward"
+msgstr ""
+
+#: kmymoney2.cpp:611
+msgid "KMyMoney file needs saving. Save ?"
+msgstr "Soubor KMyMoney musí být uložen. Přejete si jej uložit?"
+
+#: kmymoney2.cpp:757
+msgid "Creating new document..."
+msgstr "Vytvářím nový dokument...."
+
+#: kmymoney2.cpp:869 kmymoney2.cpp:884
+msgid "Open a file."
+msgstr "Otevřít soubor..."
+
+#: kmymoney2.cpp:872
+msgid ""
+"%1|KMyMoney files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Soubory KMyMoney\n"
+"%2|Všechny soubory (*.*)"
+
+#: kmymoney2.cpp:873
+msgid "Open File..."
+msgstr "Otevřít soubor...."
+
+#: kmymoney2.cpp:925 kstartuplogo.cpp:100
+msgid "Loading file..."
+msgstr "Nahrávám soubor..."
+
+#: kmymoney2.cpp:986
+msgid ""
+"<b>%1</b> is either an invalid filename or the file does not exist. You can "
+"open another file or create a new one."
+msgstr ""
+
+#: kmymoney2.cpp:986
+msgid "File not found"
+msgstr "Soubor nebyl naleten"
+
+#: kmymoney2.cpp:989
+msgid "File <b>%1</b> is already opened in another instance of KMyMoney"
+msgstr "Soubor <b>%1</b> je již otevřen v jiné instanci KMyMoney"
+
+#: kmymoney2.cpp:989
+msgid "Duplicate open"
+msgstr ""
+
+#: kmymoney2.cpp:1001
+msgid "Saving file..."
+msgstr "Ukládám soubor..."
+
+#: kmymoney2.cpp:1035 kmymoney2.cpp:1047 kmymoney2.cpp:1071
+#, c-format
+msgid "Additional encryption key(s) to be used: %1"
+msgstr "Přídavné šifrovací klíče, které budou použity: %1"
+
+#: kmymoney2.cpp:1056
+msgid "Saving file with a new filename..."
+msgstr "Ukládám soubor s novým názvem souboru..."
+
+#: kmymoney2.cpp:1067
+msgid "Encryption key to be used"
+msgstr ""
+
+#: kmymoney2.cpp:1072
+msgid "Manage additional keys"
+msgstr "Spravovat přídavné klíče"
+
+#: kmymoney2.cpp:1079
+msgid "No encryption"
+msgstr "Bez šifrování"
+
+#: kmymoney2.cpp:1102
+msgid ""
+"_: KMyMoney (Filefilter)\n"
+"KMyMoney files"
+msgstr "Soubory KMyMoney"
+
+#: kmymoney2.cpp:1103
+msgid ""
+"_: XML (Filefilter)\n"
+"XML files"
+msgstr "XML soubory"
+
+#: kmymoney2.cpp:1104
+msgid ""
+"_: Anonymous (Filefilter)\n"
+"Anonymous files"
+msgstr "Anonymní soubory"
+
+#: kmymoney2.cpp:1105
+msgid "All files"
+msgstr "Všechny soubory"
+
+#: kmymoney2.cpp:1193
+msgid "Saving file to database..."
+msgstr "Ukládám soubor do databáze..."
+
+#: kmymoney2.cpp:1207
+msgid "Cannot save to current database."
+msgstr "Nemůžu uložit do současné databáze."
+
+#: kmymoney2.cpp:1225
+msgid "Closing window..."
+msgstr "Zavírám okno..."
+
+#: kmymoney2.cpp:1228 kmymoney2.cpp:1249
+msgid "The file has been changed, save it ?"
+msgstr "Soubor byl změněn, přejete si jej uložit?"
+
+#: kmymoney2.cpp:1339 kmymoney2.cpp:1352
+msgid "Ready."
+msgstr "Připraven."
+
+#: kmymoney2.cpp:1397 kmymoney2.cpp:1433
+msgid "No KMyMoneyFile open"
+msgstr "Není otevřen žádný KMyMoney soubor"
+
+#: kmymoney2.cpp:1401
+msgid "Viewing personal data..."
+msgstr "Zobrazit osobní informace..."
+
+#: kmymoney2.cpp:1408
+msgid "Edit Personal Data"
+msgstr "Upravit osobní informace"
+
+#: kmymoney2.cpp:1424
+#, c-format
+msgid "Unable to store user information: %1"
+msgstr "Nebylo možné uložit osobní informace: %1"
+
+#: kmymoney2.cpp:1447
+msgid "Importing account templates."
+msgstr "Importuji šablony účtů."
+
+#: kmymoney2.cpp:1462
+msgid "Unable to import template(s): %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:1471
+msgid "Exporting account templates."
+msgstr "Exportuji šablony účtů."
+
+#: kmymoney2.cpp:1474
+msgid ""
+"*.kmt|KMyMoney template files\n"
+"*.*|All files"
+msgstr ""
+"*.kmt| Soubory předloh KMyMoney\n"
+"*.*|Všechny soubory"
+
+#: kmymoney2.cpp:1475
+msgid "Save as..."
+msgstr "Uložit jako..."
+
+#: kmymoney2.cpp:1517
+msgid "Importing file..."
+msgstr "mportuji soubor..."
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "The statements have been processed with the following results:"
+msgstr ""
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:1754 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "Statement stats"
+msgstr ""
+
+#: kmymoney2.cpp:1602
+msgid ""
+"You cannot import GnuCash data into an existing file. Do you wish to save "
+"this file?"
+msgstr ""
+"Nemůžete naimportovat GNUcash data do již existujícího souboru. Přejete si "
+"uložit tento soubor?"
+
+#: kmymoney2.cpp:1615
+msgid "Importing a Gnucash file."
+msgstr "Importuji soubor GNUcash."
+
+#: kmymoney2.cpp:1618
+msgid ""
+"%1|Gnucash files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Soubory GNUcash\n"
+"%2|Všechny soubory (*.*)"
+
+#: kmymoney2.cpp:1619
+msgid "Import Gnucash file..."
+msgstr "Importovat GNUcash soubor..."
+
+#: kmymoney2.cpp:1658
+msgid "Importing an XML Statement."
+msgstr "Importuji XML výpis."
+
+#: kmymoney2.cpp:1661
+msgid ""
+"%1|XML files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1| Soubory XML\n"
+"%2|Všechny soubory (*.*)"
+
+#: kmymoney2.cpp:1662
+msgid "Import XML Statement..."
+msgstr "Importovat XML výpis..."
+
+#: kmymoney2.cpp:1718
+msgid "Error importing %1: This file is not a valid KMM statement file."
+msgstr ""
+
+#: kmymoney2.cpp:1718
+msgid "Invalid Statement"
+msgstr "Neplatný výpis"
+
+#: kmymoney2.cpp:1754
+msgid "The statement has been processed with the following results:"
+msgstr ""
+
+#: kmymoney2.cpp:1763
+msgid "Exporting file..."
+msgstr "Exportuji soubor..."
+
+#: kmymoney2.cpp:1786
+msgid "The file <b>%1</b> already exists. Do you really want to override it?"
+msgstr "Soubor <b>%1</b> již existuje. Opravdu si jej přejete přepsat?"
+
+#: kmymoney2.cpp:1786
+msgid "File already exists"
+msgstr "Soubor již existuje"
+
+#: dialogs/rc.cpp:347 dialogs/rc.cpp:649 dialogs/rc.cpp:798 kmymoney2.cpp:1815
+msgid "General"
+msgstr "Obecné"
+
+#: kmymoney2.cpp:1816
+msgid "Register"
+msgstr "Peněžní deníky"
+
+#: kmymoney2.cpp:1817 views/khomeview.cpp:88 views/kmymoneyview.cpp:136
+msgid "Home"
+msgstr "Domov"
+
+#: kmymoney2.cpp:1818 views/kmymoneyview.cpp:176
+#, fuzzy
+msgid ""
+"Scheduled\n"
+"transactions"
+msgstr "Naplánované transakce nalezeny"
+
+#: kmymoney2.cpp:1819
+msgid "Encryption"
+msgstr "Šifrování"
+
+#: kmymoney2.cpp:1820
+msgid "Colors"
+msgstr "Barvy"
+
+#: dialogs/rc.cpp:344 dialogs/settings/rc.cpp:107 kmymoney2.cpp:1822
+#: widgets/rc.cpp:33
+msgid "Online Quotes"
+msgstr "Vyhledat hodnotu online"
+
+#: kmymoney2.cpp:1823 reports/pivottable.cpp:2426 views/kmymoneyview.cpp:251
+#: views/kmymoneyview.cpp:253 views/kreportsview.cpp:1415 views/rc.cpp:41
+msgid "Forecast"
+msgstr "Předpovědi"
+
+#: kmymoney2.cpp:1824
+msgid "Plugins"
+msgstr "Moduly"
+
+#: kmymoney2.cpp:1893
+msgid ""
+"The file must be saved first before it can be backed up. Do you want to "
+"continue?"
+msgstr ""
+"Soubor musí být uložen předtím, než může být zazálohován. Přejete si "
+"pokračovat?"
+
+#: kmymoney2.cpp:1910
+msgid ""
+"The current implementation of the backup functionality only supports local "
+"files as source files! Your current source file is '%1'."
+msgstr ""
+"Současná implementace zálohování podporuje pouze místní soubory jako "
+"zdrojové soubory! Váš současný zdrojový soubor je \"%1\"."
+
+#: kmymoney2.cpp:1913
+msgid "Local files only"
+msgstr "Pouze místní soubory"
+
+#: kmymoney2.cpp:1928
+#, c-format
+msgid "Mounting %1"
+msgstr "Připojuji %1"
+
+#: kmymoney2.cpp:1967
+msgid "Backup file for today exists on that device. Replace ?"
+msgstr "Zálohovací soubor pro dnešek na zařízení již existuje. Přepsat?"
+
+#: dialogs/rc.cpp:7 kmymoney2.cpp:1967 kmymoney2.cpp:1994 kmymoney2.cpp:2024
+#: kmymoney2.cpp:2032 kmymoney2.cpp:2057 kmymoney2.cpp:2059
+msgid "Backup"
+msgstr "Záloha"
+
+#: kmymoney2.cpp:1967
+msgid "&Replace"
+msgstr "&Přepsat"
+
+#: kmymoney2.cpp:1972 kmymoney2.cpp:1997 kmymoney2.cpp:2016 kmymoney2.cpp:2035
+#, c-format
+msgid "Unmounting %1"
+msgstr "Odpojuji %1"
+
+#: kmymoney2.cpp:1987
+#, c-format
+msgid "Writing %1"
+msgstr "Zapisuji %1"
+
+#: kmymoney2.cpp:1994
+msgid "Error mounting device"
+msgstr "Chyba při připojování zařízení"
+
+#: converter/mymoneygncreader.cpp:1995 kmymoney2.cpp:2023 kmymoney2.cpp:2055
+msgid "Done"
+msgstr "Hotovo"
+
+#: kmymoney2.cpp:2024 kmymoney2.cpp:2057
+msgid "File successfully backed up"
+msgstr "Soubor byl úspěšně zazálohován"
+
+#: kmymoney2.cpp:2032
+msgid "Error copying file to device"
+msgstr "Chyba při kopírování souboru na zařízení"
+
+#: kmymoney2.cpp:2059
+msgid "Error unmounting device"
+msgstr "Chyba při odpojování zařízení"
+
+#: kmymoney2.cpp:2143
+#, c-format
+msgid "Cannot add institution: %1"
+msgstr "Nemůžu přidat instituci: %1"
+
+#: kmymoney2.cpp:2185
+#, c-format
+msgid "Unable to store institution: %1"
+msgstr "Nemůžu uložit instituci: %1"
+
+#: kmymoney2.cpp:2192
+#, c-format
+msgid "Unable to edit institution: %1"
+msgstr "Nemůžu upravit instituci: %1"
+
+#: kmymoney2.cpp:2203
+msgid "Do you really want to delete institution <b>%1</b> ?"
+msgstr "Opravdu si přejete odstranit instituci <b>%1</b>?"
+
+#: kmymoney2.cpp:2211 kmymoney2.cpp:2215
+#, c-format
+msgid "Unable to delete institution: %1"
+msgstr "Nemůžu smazat instituci: %1"
+
+#: kmymoney2.cpp:2268
+#, fuzzy, c-format
+msgid "Unable to find account: %1"
+msgstr "Nemůžu přidat účet: %1"
+
+#: kmymoney2.cpp:2309
+msgid ""
+"This account is a liability and if the opening balance represents money "
+"owed, then it should be negative. Negate the amount?\n"
+"\n"
+"Please click Yes to change the opening balance to %1,\n"
+"Please click No to leave the amount as %2,\n"
+"Please click Cancel to abort the account creation."
+msgstr ""
+
+#: kmymoney2.cpp:2345 kmymoney2.cpp:2346
+msgid "Loan payout"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:892 kmymoney2.cpp:2374
+#, c-format
+msgid "Unable to add account: %1"
+msgstr "Nemůžu přidat účet: %1"
+
+#: kmymoney2.cpp:2392
+msgid ""
+"The category <b>%1</b> currently does not exist. Do you want to create it?"
+"<p><i>The parent account will default to <b>%2</b> but can be changed in the "
+"following dialog</i>."
+msgstr ""
+"Kategorie <b>%1</b> v současné době neexistuje. Přejete si ji vytvořit?"
+"<p><i>Nadřazenou kategorií bude <b>%2</b>, to ale můžete změnit v "
+"následujícím dialogu</i>."
+
+#: kmymoney2.cpp:2392
+msgid "Create category"
+msgstr "Vytvořit kategorii"
+
+#: kmymoney2.cpp:2429
+msgid "Create a new Category"
+msgstr "Vytvořit novou kategorii"
+
+#: kmymoney2.cpp:2505
+#, c-format
+msgid "Unable to create account: %1"
+msgstr "Nemůžu vytvořit účet: %1"
+
+#: kmymoney2.cpp:2516
+msgid ""
+"The security <b>%1</b> currently does not exist as sub-account of <b>%2</b>. "
+"Do you want to create it?"
+msgstr ""
+
+#: kmymoney2.cpp:2517
+#, fuzzy
+msgid "Create security"
+msgstr "Vytvořit kategorii"
+
+#: kmymoney2.cpp:2551
+msgid "Do you really want to delete the investment <b>%1</b>?"
+msgstr "Opravdu si přejete odstranit investici <b>%1</b>?"
+
+#: kmymoney2.cpp:2551
+msgid "Delete investment"
+msgstr "Odstranit investici"
+
+#: kmymoney2.cpp:2558
+#, c-format
+msgid "Unable to delete investment: %1"
+msgstr "Nemůžu odstranit investici: %1"
+
+#: kmymoney2.cpp:2640 kmymoney2.cpp:2646
+#, fuzzy
+msgid "Unable to add scheduled transaction: "
+msgstr "Nemůžu přidat finanční plán: "
+
+#: kmymoney2.cpp:2722
+#, fuzzy
+msgid "Adjusting transactions..."
+msgstr "Nahrávám transakce..."
+
+#: kmymoney2.cpp:2747
+#, fuzzy
+msgid "Adjusting scheduled transactions..."
+msgstr "Nahrávám transakce..."
+
+#: kmymoney2.cpp:2765
+#, fuzzy
+msgid "Adjusting budgets..."
+msgstr "Ukládám rozpočty..."
+
+#: kmymoney2.cpp:2783
+msgid ""
+"Unable to exchange category <b>%1</b> with category <b>%2</b>. Reason: %3"
+msgstr ""
+
+#: kmymoney2.cpp:2804
+msgid "Do you really want to delete category <b>%1</b>?"
+msgstr "Opravdu si přejete odstranit kategorii <b>%1</b>?"
+
+#: kmymoney2.cpp:2811
+msgid "Unable to delete category <b>%1</b>. Cause: %2"
+msgstr "Nemůžu odstranit kategorii <b>%1</b>. Příčina: %2"
+
+#: kmymoney2.cpp:2823
+msgid ""
+"Do you want to delete category <b>%1</b> with all its sub-categories or only "
+"the category itself? If you only delete the category itself, all its sub-"
+"categories will be made sub-categories of <b>%2</b>."
+msgstr ""
+
+#: kmymoney2.cpp:2827
+msgid "Delete all"
+msgstr "Odstranit vše"
+
+#: kmymoney2.cpp:2828
+msgid "Just the category"
+msgstr "Jen kategorii"
+
+#: kmymoney2.cpp:2858
+msgid ""
+"Some sub-categories of category <b>%1</b> cannot be deleted, because they "
+"are still used. They will be made sub-categories of <b>%2</b>. Proceed?"
+msgstr ""
+
+#: kmymoney2.cpp:2878
+msgid "Unable to delete a sub-category of category <b>%1</b>. Reason: %2"
+msgstr "Nemůžu odstranit podkategorii kategorie <b>%1</b>. Důvod: %2"
+
+#: kmymoney2.cpp:2889
+msgid "Do you really want to delete account <b>%1</b>?"
+msgstr "Opravdu si přejete odstranit účet <b>%1</b>?"
+
+#: kmymoney2.cpp:2901
+msgid "Unable to delete account '%1'. Cause: %2"
+msgstr "Nemůžu odstranit účet \"%1\". Příčina: %2"
+
+#: kmymoney2.cpp:2917
+msgid "Edit account '%1'"
+msgstr "Upravit účet \"%1\""
+
+#: kmymoney2.cpp:2922
+msgid "Edit category '%1'"
+msgstr "Upravit kategorii \"%1\""
+
+#: kmymoney2.cpp:3008
+msgid "Unable to modify account '%1'. Cause: %2"
+msgstr "Nemůžu upravit účet \"%1\". Příčina: %2"
+
+#: kmymoney2.cpp:3065
+msgid ""
+"KMyMoney has detected some overdue scheduled transactions for this account. "
+"Do you want to enter those scheduled transactions now?"
+msgstr ""
+
+#: kmymoney2.cpp:3065
+msgid "Scheduled transactions found"
+msgstr "Naplánované transakce nalezeny"
+
+#: kmymoney2.cpp:3163
+msgid ""
+"You are about to finish the reconciliation of this account with a difference "
+"between your bank statement and the transactions marked as cleared.\n"
+"Are you sure you want to finish the reconciliation ?"
+msgstr ""
+
+#: kmymoney2.cpp:3165
+msgid "Confirm end of reconciliation"
+msgstr ""
+
+#: kmymoney2.cpp:3339
+msgid ""
+"You have closed this account. It remains in the system because you have "
+"transactions which still refer to it, but is not shown in the views. You can "
+"make it visible again by going to the View menu and selecting <b>Show all "
+"accounts</b> or by unselecting the <b>Don't show closed accounts</b> setting."
+msgstr ""
+
+#: kmymoney2.cpp:3379
+msgid "<b>%1</b> cannot be moved to institution <b>%2</b>. Reason: %3"
+msgstr "<b>%1</b> nemůže být převeden pod instituci <b>%2</b>. Důvod: %3"
+
+#: kmymoney2.cpp:3393
+msgid "<b>%1</b> cannot be moved to <b>%2</b>. Reason: %3"
+msgstr "<b>%1</b> nemůže být převeden do <b>%2</b>. Důvod: %3"
+
+#: kmymoney2.cpp:3408
+msgid "%1 YTD Account Transactions"
+msgstr ""
+
+#: dialogs/kbalancechartdlg.cpp:71 kmymoney2.cpp:3409
+#: views/kforecastview.cpp:650 views/khomeview.cpp:276
+#: views/khomeview.cpp:1384 views/kreportsview.cpp:619
+msgid "Generated Report"
+msgstr ""
+
+#: dialogs/rc.cpp:324 dialogs/settings/rc.cpp:80 kmymoney2.cpp:3411
+#: views/kreportsview.cpp:1062 views/rc.cpp:58 views/rc.cpp:59
+msgid "Transactions"
+msgstr "Transakce"
+
+#: kmymoney2.cpp:3449
+#, fuzzy, c-format
+msgid "Unable to add scheduled transaction: %1"
+msgstr "Nemůžu přidat finanční plán: %1"
+
+#: kmymoney2.cpp:3449
+#, fuzzy
+msgid "Add scheduled transaction"
+msgstr "Naplánované transakce nalezeny"
+
+#: kmymoney2.cpp:3489
+msgid ""
+"You have entered a scheduled transaction date of <b>%1</b>. Because the "
+"scheduled transaction was last paid on <b>%2</b>, KMyMoney will "
+"automatically adjust the scheduled transaction date to the next date unless "
+"the last payment date is reset. Do you want to reset the last payment date?"
+msgstr ""
+
+#: kmymoney2.cpp:3489
+msgid "Reset Last Payment Date"
+msgstr ""
+
+#: kmymoney2.cpp:3499 kmymoney2.cpp:3519 kmymoney2.cpp:3531
+#, fuzzy
+msgid "Unable to modify scheduled transaction '%1'"
+msgstr "Nemůžu upravit finanční plán \"%1\""
+
+#: kmymoney2.cpp:3543
+#, fuzzy
+msgid "Are you sure you want to delete the scheduled transaction <b>%1</b>?"
+msgstr "Jste si jisti, že chcete odstranit finanční plán <b>%1</b>?"
+
+#: kmymoney2.cpp:3546
+msgid ""
+"In case of loan payments it is currently not possible to recreate the "
+"scheduled transaction."
+msgstr ""
+
+#: kmymoney2.cpp:3555
+#, fuzzy
+msgid "Unable to remove scheduled transaction '%1'"
+msgstr "Nemůžu odstranit finanční plán \"%1\""
+
+#: kmymoney2.cpp:3569
+#, fuzzy, c-format
+msgid ""
+"_: Copy of scheduled transaction name\n"
+"Copy of %1"
+msgstr "Kopie %1"
+
+#: kmymoney2.cpp:3581 kmymoney2.cpp:4352
+msgid "Unable to duplicate transaction(s): %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:3595
+#, fuzzy
+msgid ""
+"Do you really want to skip the <b>%1</b> transaction scheduled for <b>%2</b>?"
+msgstr "Opravdu si přejete odstranit kategorii <b>%1</b>?"
+
+#: kmymoney2.cpp:3605
+#, fuzzy
+msgid "Unable to skip scheduled transaction <b>%1</b>."
+msgstr "Nemůžu přeskočit finanční plán <b>%1</b>."
+
+#: kmymoney2.cpp:3618
+#, fuzzy
+msgid "Unknown scheduled transaction '%1'"
+msgstr "Neznámý finanční plán \"%1\""
+
+#: kmymoney2.cpp:3673
+msgid ""
+"Are you sure you wish to stop this scheduled transaction from being entered "
+"into the register?\n"
+"\n"
+"KMyMoney will prompt you again next time it starts unless you manually enter "
+"it later."
+msgstr ""
+
+#: kmymoney2.cpp:3725 kmymoney2.cpp:3732
+#, fuzzy
+msgid "Unable to enter scheduled transaction '%1'"
+msgstr "Nemůžu odstranit finanční plán \"%1\""
+
+#: kmymoney2.cpp:3743 kmymoney2.cpp:3783
+msgid "New Payee"
+msgstr "Nový plátce/příjemce"
+
+#: kmymoney2.cpp:3745
+msgid "Do you want to add <b>%1</b> as payer/receiver ?"
+msgstr "Přejete si přidat <b>%1</b> jako plátce/příjemce?"
+
+#: converter/mymoneystatementreader.cpp:892 kmymoney2.cpp:3747
+msgid "New payee/receiver"
+msgstr "Nový plátce/příjemce"
+
+#: kmymoney2.cpp:3773
+msgid "Unable to add payee"
+msgstr "Nemůžu přidat plátce/příjemce"
+
+#: kmymoney2.cpp:3826
+msgid "Do you really want to remove the payee <b>%1</b>?"
+msgstr "Opravdu si přejete odstranit plátce/příjemce <b>%1</b>?"
+
+#: kmymoney2.cpp:3828
+msgid "Do you really want to remove all selected payees?"
+msgstr "Opravdu si přejete odstranit všechny vybrané plátce/příjemce?"
+
+#: kmymoney2.cpp:3830
+msgid "Remove Payee"
+msgstr "Odstranit plácte/příjemce"
+
+#: kmymoney2.cpp:3870
+msgid ""
+"At least one transaction/scheduled transaction is still referenced by a "
+"payee. Currently you have all payees selected. However, at least one payee "
+"must remain so that the transaction/scheduled transaction can be reassigned."
+msgstr ""
+
+#: kmymoney2.cpp:3925
+msgid "Unable to reassign payee of transaction/split"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:534 converter/mymoneystatementreader.cpp:959
+#: kmymoney2.cpp:3926 kmymoney2.cpp:3983 views/kbudgetview.cpp:636
+#: views/kbudgetview.cpp:737 views/kbudgetview.cpp:751
+#: views/kpayeesview.cpp:519 views/kpayeesview.cpp:870
+msgid "thrown in"
+msgstr ""
+
+#: kmymoney2.cpp:3982
+msgid "Unable to remove payee(s)"
+msgstr ""
+
+#: kmymoney2.cpp:3990
+msgid "Enter ISO 4217 code for the new currency"
+msgstr ""
+
+#: kmymoney2.cpp:3999
+#, c-format
+msgid "Cannot create new currency. %1"
+msgstr ""
+
+#: kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, c-format
+msgid "Cannot rename currency. %1"
+msgstr ""
+
+#: kmymoney2.cpp:4039
+msgid "Cannot delete currency %1. %2"
+msgstr ""
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Cannot set %1 as base currency: %2"
+msgstr ""
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Set base currency"
+msgstr ""
+
+#: kmymoney2.cpp:4065
+#, c-format
+msgid "Budget %1"
+msgstr "Rozpočet %1"
+
+#: kmymoney2.cpp:4075
+msgid "Budget %1 (%2)"
+msgstr "Rozpočet %1 (%2)"
+
+#: kmymoney2.cpp:4090 kmymoney2.cpp:4139
+msgid "Unable to add budget: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4105
+msgid "Do you really want to remove the budget <b>%1</b>?"
+msgstr ""
+
+#: kmymoney2.cpp:4107
+msgid "Do you really want to remove all selected budgets?"
+msgstr ""
+
+#: kmymoney2.cpp:4109
+msgid "Remove Budget"
+msgstr "Odstranit rozpočet"
+
+#: kmymoney2.cpp:4122
+msgid "Unable to remove budget: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4134 views/kreportsview.cpp:659
+#, c-format
+msgid "Copy of %1"
+msgstr ""
+
+#: kmymoney2.cpp:4164
+msgid "Select year"
+msgstr "Vyberte rok"
+
+#: kmymoney2.cpp:4164
+msgid "Budget year"
+msgstr ""
+
+#: kmymoney2.cpp:4176 kmymoney2.cpp:4214 kmymoney2.cpp:4274
+msgid "Unable to modify budget: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4192 kmymoney2.cpp:4250
+msgid ""
+"The current budget already contains data. Continuing will replace all "
+"current values of this budget."
+msgstr ""
+
+#: kmymoney2.cpp:4222
+msgid ""
+"Please be aware that changes made in the following dialog affect all KDE "
+"applications not only KMyMoney."
+msgstr ""
+
+#: kmymoney2.cpp:4292
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to delete the transactions anyway?"
+msgstr ""
+
+#: kmymoney2.cpp:4295 views/kgloballedgerview.cpp:1043
+msgid "Transaction already reconciled"
+msgstr ""
+
+#: kmymoney2.cpp:4301
+msgid "Do you really want to delete the selected transaction?"
+msgstr "Opravdu si přejete odstranit zvolenou transakci?"
+
+#: kmymoney2.cpp:4303
+msgid "Do you really want to delete all %1 selected transactions?"
+msgstr "Opravdu si přejete odstarnit všech %1 zvolených transakcí?"
+
+#: kmymoney2.cpp:4305
+msgid "Delete transaction"
+msgstr "Odstranit transakci"
+
+#: kmymoney2.cpp:4306
+msgid "Deleting transactions"
+msgstr "Odstraňuji transakce"
+
+#: kmymoney2.cpp:4321
+msgid "Duplicating transactions"
+msgstr "Duplikuji transakce"
+
+#: kmymoney2.cpp:4378
+msgid "Unable to delete transaction(s): %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4452 kmymoney2.cpp:4622
+msgid "Unable to modify transaction: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4514
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling and<br>- <b>Cancel</b> returns to the "
+"transaction editor.<p>You can also select an option to save the transaction "
+"automatically when e.g. selecting another transaction."
+msgstr ""
+
+#: kmymoney2.cpp:4514 kmymoney2.cpp:4517
+msgid "Cancel transaction edit"
+msgstr ""
+
+#: kmymoney2.cpp:4517
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling.<p>You can also select an option to save the "
+"transaction automatically when e.g. selecting another transaction."
+msgstr ""
+
+#: kmymoney2.cpp:4667
+msgid "Unable to accept transaction: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4846
+msgid "Unable to unmatch the selected transactions"
+msgstr ""
+
+#: kmymoney2.cpp:4885
+msgid "No manually entered transaction selected for matching"
+msgstr ""
+
+#: kmymoney2.cpp:4887
+msgid "No imported transaction selected for matching"
+msgstr ""
+
+#: kmymoney2.cpp:4895
+msgid "Unable to match the selected transactions"
+msgstr ""
+
+#: kmymoney2.cpp:5097
+msgid "Create a new transaction"
+msgstr ""
+
+#: kmymoney2.cpp:5163
+msgid "Duplicate the current selected transactions"
+msgstr ""
+
+#: kmymoney2.cpp:5223
+#, fuzzy
+msgid ""
+"_: Button text for unmatch transaction\n"
+"Unmatch"
+msgstr "Spárovat"
+
+#: kmymoney2.cpp:5451 kmymoney2.cpp:5473
+msgid "Goto '%1'"
+msgstr ""
+
+#: kmymoney2.cpp:5582
+msgid "Running consistency check..."
+msgstr ""
+
+#: kmymoney2.cpp:5590
+#, c-format
+msgid "Consistency check failed: %1"
+msgstr ""
+
+#: kmymoney2.cpp:5594
+msgid "Consistency check result"
+msgstr ""
+
+#: kmymoney2.cpp:5603
+#, fuzzy
+msgid "Checking for overdue scheduled transactions..."
+msgstr "Naplánované transakce nalezeny"
+
+#: kmymoney2.cpp:5740
+msgid ""
+"You must first select a KMyMoney file before you can import a statement."
+msgstr ""
+
+#: kmymoney2.cpp:5746
+msgid "Importing a statement via Web Connect"
+msgstr ""
+
+#: kmymoney2.cpp:5759
+msgid ""
+"Unable to import %1 using %2 plugin. The plugin returned the following "
+"error: %3"
+msgstr ""
+
+#: kmymoney2.cpp:5759 plugins/ofximport/ofximporterplugin.cpp:646
+msgid "Importing error"
+msgstr ""
+
+#: kmymoney2.cpp:5780
+msgid "All messages have been enabled."
+msgstr ""
+
+#: kmymoney2.cpp:5780
+msgid "All messages"
+msgstr ""
+
+#: kmymoney2.cpp:5855
+#, fuzzy
+msgid "Auto saving..."
+msgstr "Nastavení automatického ukládání"
+
+#: kmymoney2.cpp:5913
+msgid "Unable to setup online parameters for account ''%1'"
+msgstr ""
+
+#: kmymoney2.cpp:5928
+msgid ""
+"Do you really want to remove the mapping of account <b>%1</b> to an online "
+"account? Depending on the details of the online banking method used, this "
+"action cannot be reverted."
+msgstr ""
+
+#: kmymoney2.cpp:5928
+msgid "Remove mapping to online account"
+msgstr ""
+
+#: kmymoney2.cpp:5939
+#, c-format
+msgid "Unable to unmap account from online account: %1"
+msgstr ""
+
+#: kmymoney2.cpp:5956
+#, fuzzy
+msgid " (Brokerage)"
+msgstr "Makléř"
+
+#: kmymoney2.cpp:5957
+msgid ""
+"You try to map a brokerage account to an online account. This is usually not "
+"advisable. In general, the investment account should be mapped to the online "
+"account. Please cancel if you intended to map the investment account, "
+"continue otherwise"
+msgstr ""
+
+#: kmymoney2.cpp:5957
+#, fuzzy
+msgid "Mapping brokerage account"
+msgstr "Vytvořit makléřský účet"
+
+#: kmymoney2.cpp:5964
+msgid "Select online banking plugin"
+msgstr ""
+
+#: kmymoney2.cpp:6005
+#, c-format
+msgid "Unable to map account to online account: %1"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:407 converter/mymoneytemplate.cpp:73
+#: views/kmymoneyview.cpp:590
+msgid "Error while loading file '%1'!"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:409 converter/mymoneyqifreader.cpp:965
+#: converter/mymoneytemplate.cpp:75 views/kmymoneyview.cpp:592
+msgid "File access error"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:84
+msgid "<b>%1</b> is not a template file."
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:85 views/kmymoneyview.cpp:603
+msgid "Filetype Error"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:93
+msgid "Error while reading template file <b>%1</b> in line %2, column %3"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:94
+msgid "Template Error"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:101
+msgid "File '%1' not found!"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:142
+msgid "Invalid tag <b>%1</b> in template file <b>%2</b>!"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:214
+#, c-format
+msgid "Loading template %1"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:241
+msgid "Invalid top-level account type <b>%1</b> in template file <b>%2</b>!"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:309
+msgid ""
+"Invalid flag type <b>%1</b> for account <b>%3</b> in template file <b>%2</b>!"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:398 converter/mymoneytemplate.cpp:401
+#: views/kmymoneyview.cpp:1151 views/kmymoneyview.cpp:1154
+msgid "Unable to write changes to '%1'"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:407 views/kmymoneyview.cpp:1162
+msgid "Unable to upload to '%1'"
+msgstr ""
+
+#: converter/mymoneyqifwriter.cpp:70
+msgid ""
+"Unexpected exception '%1' thrown in %2, line %3 caught in MyMoneyQifWriter::"
+"write()"
+msgstr ""
+
+#: converter/mymoneyqifwriter.cpp:80
+msgid "Unable to open file '%1' for writing"
+msgstr ""
+
+#: converter/webpricequote.cpp:340
+#, c-format
+msgid "Symbol found: %1"
+msgstr ""
+
+#: converter/webpricequote.cpp:368
+msgid "Price found: %1 (%2)"
+msgstr ""
+
+#: converter/webpricequote.cpp:380
+#, c-format
+msgid "Date found: %1"
+msgstr ""
+
+#: converter/webpricequote.cpp:397 converter/webpricequote.cpp:403
+#, c-format
+msgid "Unable to update price for %1"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:170
+#, fuzzy
+msgid ""
+"_: Category name\n"
+"Reinvested dividend"
+msgstr "Investovat dividendu"
+
+#: converter/mymoneyqifreader.cpp:173
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (long term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:176
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (short term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:179
+msgid ""
+"_: Category name\n"
+"Dividend"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:182
+msgid ""
+"_: Category name\n"
+"Interest"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:185
+msgid ""
+"_: Category name\n"
+"Capital Gain (short term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:188
+msgid ""
+"_: Category name\n"
+"Capital Gain (mid term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:191
+msgid ""
+"_: Category name\n"
+"Capital Gain (long term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:194
+msgid ""
+"_: Category name\n"
+"Returned capital"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:197
+msgid ""
+"_: Category name\n"
+"Miscellaneous income"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:200
+msgid ""
+"_: Category name\n"
+"Miscellaneous expense"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:203
+msgid ""
+"_: Category name\n"
+"Investment fees"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:205
+#, fuzzy, c-format
+msgid "Unknown QIF type %1"
+msgstr "Neznámý plátce/příjemce"
+
+#: converter/mymoneyqifreader.cpp:355
+#, fuzzy
+msgid "Date format selection"
+msgstr "Výběr kategorie"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Pick the date format that suits your input file"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:366
+#, fuzzy
+msgid "Importing QIF ..."
+msgstr "mportuji soubor..."
+
+#: converter/mymoneyqifreader.cpp:442
+#, fuzzy
+msgid "Reading QIF ..."
+msgstr "QIF..."
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Adding transactions"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Now adding the transactions to your ledger..."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:533
+msgid "Unable to add transactions"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:567
+msgid ""
+"_: QIF tag for liability account\n"
+"Oth L"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:572
+#, fuzzy
+msgid ""
+"_: QIF tag for category\n"
+"Cat"
+msgstr "DPH"
+
+#: converter/mymoneyqifreader.cpp:575
+msgid ""
+"_: QIF tag for security\n"
+"Security"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:578
+msgid ""
+"_: QIF tag for investment account\n"
+"Invst"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:581
+msgid ""
+"_: QIF tag for prices\n"
+"Prices"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:599
+msgid ""
+"_: QIF tag for a class\n"
+"Class"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:753 converter/mymoneyqifreader.cpp:2203
+msgid ""
+"The %1 account currently has an opening balance of %2. This QIF file reports "
+"an opening balance of %3. Would you like to overwrite the current balance "
+"with the one from the QIF file?"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:754 converter/mymoneyqifreader.cpp:2204
+msgid "Overwrite opening balance"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:879 converter/mymoneyqifreader.cpp:890
+#: converter/mymoneyqifreader.cpp:914
+msgid "Autogenerated by QIF importer"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:907
+#, fuzzy
+msgid "QIF imported, no account name supplied"
+msgstr "Nebyl zadán název účtu"
+
+#: converter/mymoneyqifreader.cpp:940
+msgid ""
+"KMyMoney has imported a second opening balance transaction into account <b>%"
+"1</b> which differs from the one found already on file. Please correct this "
+"manually once the import is done."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:940
+#, fuzzy
+msgid "Opening balance problem"
+msgstr "Otevírací bilance"
+
+#: converter/mymoneyqifreader.cpp:963
+#, fuzzy
+msgid "Error while creating opening balance transaction"
+msgstr "Upravit právě vybranou transakci"
+
+#: converter/mymoneyqifreader.cpp:1029 converter/mymoneyqifreader.cpp:1276
+msgid ""
+"The date entry \"%1\" read from the file cannot be interpreted through the "
+"current date profile setting of \"%2\".\n"
+"\n"
+"Pressing \"Continue\" will assign todays date to the transaction. Pressing "
+"\"Cancel\" will abort the import operation. You can then restart the import "
+"and select a different QIF profile or create a new one."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1035 converter/mymoneyqifreader.cpp:1282
+msgid "Invalid date format"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1398
+#: converter/mymoneystatementreader.cpp:589
+#: converter/mymoneystatementreader.cpp:592
+msgid "Statement Importer"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1413
+#: converter/mymoneystatementreader.cpp:644
+msgid ""
+"This investment account does not contain the \"%1\" security. Transactions "
+"involving this security will be ignored."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1415
+#: converter/mymoneystatementreader.cpp:612
+#: converter/mymoneystatementreader.cpp:644
+msgid "Security not found"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2021
+#, fuzzy
+msgid "%1 (Investment)"
+msgstr "Investice"
+
+#: converter/mymoneyqifreader.cpp:2022
+msgid "Autogenerated by QIF importer from type Mutual account entry"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2085 converter/mymoneyqifreader.cpp:2228
+msgid "account"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2086
+msgid "al"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2093
+msgid "category"
+msgstr "kategorie"
+
+#: converter/mymoneyqifreader.cpp:2094
+msgid "ei"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2095
+msgid "Category selection"
+msgstr "Výběr kategorie"
+
+#: converter/mymoneyqifreader.cpp:2110
+msgid "Account \"%1\" disappeared: "
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2131
+msgid "The %1 '%2' does not exist. Do you want to create it?"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2140
+#, c-format
+msgid "Select %1"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2142
+msgid ""
+"The %1 <b>%2</b> currently exists. Do you want to import transactions to "
+"this account?"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2147
+msgid ""
+"The %1 <b>%2</b> currently does not exist. You can create a new %3 by "
+"pressing the <b>Create</b> button or select another %4 manually from the "
+"selection box."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2154
+#, c-format
+msgid "Import transactions to %1"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2155
+msgid ""
+"No %1 information has been found in the selected QIF file. Please select an "
+"account using the selection box in the dialog or create a new %2 by pressing "
+"the <b>Create</b> button."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2229
+msgid "You must select or create an account."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2231
+msgid "You must select or create a category."
+msgstr "Musíte zvolit, nebo vytvořit kategorii"
+
+#: converter/mymoneystatementreader.cpp:100
+msgid "_Fees"
+msgstr "_Poplatky"
+
+#: converter/mymoneystatementreader.cpp:106
+msgid "_Dividend"
+msgstr "_Dividenda"
+
+#: converter/mymoneystatementreader.cpp:289
+#, c-format
+msgid "Importing statement for account %1"
+msgstr "Importuji výpis pro účet %1"
+
+#: converter/mymoneystatementreader.cpp:291
+#, fuzzy
+msgid "Importing statement without transactions"
+msgstr "Importuji výpis pro účet %1"
+
+#: converter/mymoneystatementreader.cpp:385
+msgid " Statement balance is not contained in statement."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:387
+msgid " Statement balance on %1 is reported to be %2"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:389
+msgid " Transactions"
+msgstr " Transakce"
+
+#: converter/mymoneystatementreader.cpp:390
+msgid " %1 processed"
+msgstr " %1 zpracováno"
+
+#: converter/mymoneystatementreader.cpp:391
+msgid " %1 added"
+msgstr " %1 přidáno"
+
+#: converter/mymoneystatementreader.cpp:392
+msgid " %1 matched"
+msgstr " %1 spárováno"
+
+#: converter/mymoneystatementreader.cpp:393
+msgid " %1 duplicates"
+msgstr " %1 duplicitních"
+
+#: converter/mymoneystatementreader.cpp:394
+msgid " Payees"
+msgstr "Plátci/Příjemci"
+
+#: converter/mymoneystatementreader.cpp:395
+msgid " %1 created"
+msgstr " %1 vytvořeno"
+
+#: converter/mymoneystatementreader.cpp:483
+#, c-format
+msgid "Error creating security record: %1"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:612
+msgid ""
+"This imported statement contains investment transactions with no security. "
+"These transactions will be ignored."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:803
+msgid "(Fees) "
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:880
+msgid ""
+"Do you want to add \"%1\" as payee/receiver?\n"
+"\n"
+msgstr ""
+"Přejete si přidat \"%1\" jako plátce/příjemce?\n"
+"\n"
+
+#: converter/mymoneystatementreader.cpp:881
+msgid ""
+"Selecting \"Yes\" will create the payee, \"No\" will skip creation of a "
+"payee record and remove the payee information from this transaction. "
+"Selecting \"Cancel\" aborts the import operation.\n"
+"\n"
+"If you select \"No\" here and mark the \"Don't ask again\" checkbox, the "
+"payee information for all following transactions referencing \"%1\" will be "
+"removed."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:917
+#, fuzzy
+msgid "Save Category"
+msgstr "Kategorie"
+
+#: converter/mymoneystatementreader.cpp:918
+#, fuzzy
+msgid "No Category"
+msgstr "Kategorie"
+
+#: converter/mymoneystatementreader.cpp:919 dialogs/rc.cpp:4
+msgid "Abort"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:926
+msgid "Please select a default category for payee '%1':"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:958
+msgid "Unable to add payee/receiver"
+msgstr "Nemůžu přidat plátce/příjemce"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid ""
+"KMyMoney has found a scheduled transaction named <b>%1</b> which matches an "
+"imported transaction. Do you want KMyMoney to enter this schedule now so "
+"that the transaction can be matched? "
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid "Schedule found"
+msgstr "Finanční plán nalezen"
+
+#: converter/mymoneystatementreader.cpp:1219
+msgid "Problem adding or matching imported transaction with id '%1': %2"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1268
+msgid ""
+"<b>You have downloaded a statement for the following account:</b><br><br>"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1269
+#, fuzzy, c-format
+msgid " - Account Name: %1"
+msgstr " - Název účtu: %1<br>"
+
+#: converter/mymoneystatementreader.cpp:1270
+#, fuzzy, c-format
+msgid " - Account Type: %1"
+msgstr " - Druh účtu: %1<br>"
+
+#: converter/mymoneystatementreader.cpp:1271
+#, fuzzy, c-format
+msgid " - Account Number: %1"
+msgstr " - Číslo účtu: %1<br>"
+
+#: converter/mymoneystatementreader.cpp:1279
+msgid "Do you want to import transactions to this account?"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1281
+msgid ""
+"KMyMoney cannot determine which of your accounts to use. You can create a "
+"new account by pressing the <b>Create</b> button or select another one "
+"manually from the selection box below."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1287
+msgid ""
+"No account information has been found in the selected statement file. Please "
+"select an account using the selection box in the dialog or create a new "
+"account by pressing the <b>Create</b> button."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1294
+msgid "Import transactions"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1330
+msgid ""
+"You must select an account, create a new one, or press the <b>Abort</b> "
+"button."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:119
+msgid "%1: Sorry. This importer cannot handle version %2 of element %3"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:193
+#, c-format
+msgid "Account%1"
+msgstr "Účet%1"
+
+#: converter/mymoneygncreader.cpp:197
+#, c-format
+msgid "Stock%1"
+msgstr "Akcie%1"
+
+#: converter/mymoneygncreader.cpp:206
+#, c-format
+msgid "Payee%1"
+msgstr "Plátce/Příjemce %1"
+
+#: converter/mymoneygncreader.cpp:212
+#, c-format
+msgid "Schedule%1"
+msgstr "Finanční plán %1"
+
+#: converter/mymoneygncreader.cpp:262
+msgid "This version of the importer cannot handle multi-book files."
+msgstr "Tato verze importétu nemůže zpracovat soubory s více knihami."
+
+#: converter/mymoneygncreader.cpp:912
+msgid "Invalid header for file. Should be 'gnc-v2'"
+msgstr "Chybná hlavička souboru. Měla by být \"gnc-v2\""
+
+#: converter/mymoneygncreader.cpp:937 converter/mymoneygncreader.cpp:972
+#: converter/mymoneygncreader.cpp:1062
+#, c-format
+msgid ""
+"Import failed:\n"
+"\n"
+"%1"
+msgstr ""
+"Importování selhalo:\n"
+"\n"
+"%1"
+
+#: converter/mymoneygncreader.cpp:1065
+msgid "Import complete"
+msgstr "Importování bylo dokončeno"
+
+#: converter/mymoneygncreader.cpp:1120
+msgid "Disguise your wealth"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1121
+msgid ""
+"Each monetary value on your file will be multiplied by a random number "
+"between 0.01 and 1.99\n"
+"with a different value used for each transaction. In addition, to further "
+"disguise the true\n"
+"values, you may enter a number between %1 and %2 which will be applied to "
+"all values.\n"
+"These numbers will not be stored in the file."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1135
+msgid "Loading commodities..."
+msgstr "Nahrávám komodity..."
+
+#: converter/mymoneygncreader.cpp:1160
+msgid "Loading prices..."
+msgstr "Nahrávám ceny..."
+
+#: converter/mymoneygncreader.cpp:1164 converter/mymoneygncreader.cpp:1171
+msgid "Imported History"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1251
+#, c-format
+msgid "Current importer does not recognize GnuCash account type %1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1471
+msgid "Imported Transaction"
+msgstr "Importované transakce"
+
+#: converter/mymoneygncreader.cpp:1519
+msgid "Loading templates..."
+msgstr "Nahrávám šablony..."
+
+#: converter/mymoneygncreader.cpp:1531
+msgid "Unknown payee"
+msgstr "Neznámý plátce/příjemce"
+
+#: converter/mymoneygncreader.cpp:1723
+msgid "Loading schedules..."
+msgstr "Nahrávám finanční plány..."
+
+#: converter/mymoneygncreader.cpp:1735
+#, c-format
+msgid "Can't find template transaction for schedule %1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1910
+msgid "Reorganizing accounts..."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1972
+msgid ""
+"Your main currency seems to be %1 (%2); do you want to set this as your base "
+"currency?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1993
+msgid "More"
+msgstr "Více"
+
+#: converter/mymoneygncreader.cpp:1997
+msgid "Save Report"
+msgstr "Uložit výkaz"
+
+#: converter/mymoneygncreader.cpp:2017
+msgid ""
+"Problems were encountered in converting schedule '%1'.\n"
+"Do you want to review or edit it now?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2039
+msgid ""
+"Found:\n"
+"\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2040
+msgid " commodities (equities)\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2041
+msgid " prices\n"
+msgstr " ceny\n"
+
+#: converter/mymoneygncreader.cpp:2042
+msgid " accounts\n"
+msgstr " účty\n"
+
+#: converter/mymoneygncreader.cpp:2043
+msgid " transactions\n"
+msgstr " transakce\n"
+
+#: converter/mymoneygncreader.cpp:2044
+msgid " schedules\n"
+msgstr " finanční plány\n"
+
+#: converter/mymoneygncreader.cpp:2047
+msgid "No inconsistencies were detected"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2049
+msgid " inconsistencies were detected and corrected\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2054
+msgid " orphan accounts were created\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2059
+msgid " possible schedule problems were noted\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2064
+msgid "Small Business Features (Customers, Invoices, etc.)"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2065 views/kmymoneyview.cpp:241
+#: views/kmymoneyview.cpp:243
+msgid "Budgets"
+msgstr "Rozpočty"
+
+#: converter/mymoneygncreader.cpp:2066
+msgid "Lots"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2068
+msgid "The following features found in your file are not currently supported:"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2071
+msgid ""
+"\n"
+"\n"
+"Press More for further information"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2139
+msgid "Orphan created from unknown gnucash account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2170
+msgid "Internal error - invalid interval char in incrDate"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2233
+msgid "Enter the investment account name "
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2234
+msgid "My Investments"
+msgstr "Mé investice"
+
+#: converter/mymoneygncreader.cpp:2269
+#, c-format
+msgid "Select parent investment account or enter new name. Stock %1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2292 converter/mymoneygncreader.cpp:2307
+msgid "%1 is not an Investment Account. Do you wish to make it one?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2408
+msgid ""
+"An Investment account must be a child of an Asset account\n"
+"Account %1 will be stored under the main Asset account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2410
+msgid ""
+"An Income account must be a child of an Income account\n"
+"Account %1 will be stored under the main Income account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2412
+msgid ""
+"An Expense account must be a child of an Expense account\n"
+"Account %1 will be stored under the main Expense account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2414
+msgid ""
+"One or more transactions contain a reference to an otherwise unknown "
+"account\n"
+"An asset account with the name %1 has been created to hold the data"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2416
+msgid "Schedule %1 has interval of %2 which is not currently available"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2417
+msgid "Schedule %1 dropped at user request"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2418
+msgid "Schedule %1 contains unknown action (key = %2, type = %3)"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2419
+msgid "Schedule %1 contains multiple actions; only one has been imported"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2420
+msgid "Schedule %1 contains no valid splits"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2421
+msgid ""
+"Schedule %1 appears to contain a formula. GnuCash formulae are not "
+"convertible"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2422
+msgid ""
+"Schedule %1 contains unknown interval specification; please check for "
+"correct operation"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2423
+msgid ""
+"Schedule %1 contains a deferred interval specification; please check for "
+"correct operation"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2424
+msgid ""
+"Account or Category %1, transaction date %2; split contains invalid value; "
+"please check"
+msgstr ""
+
+#: kmymoneyutils.cpp:146
+msgid "&New Schedule..."
+msgstr "&Nový finanční plán..."
+
+#: kmymoneyutils.cpp:148
+msgid "Create a new schedule."
+msgstr "Vytvořit nový finanční plán."
+
+#: kmymoneyutils.cpp:149
+msgid "Use this to create a new schedule."
+msgstr "Nemůžu vytvořit nový finanční plán."
+
+#: kmymoneyutils.cpp:158
+msgid "&Filter"
+msgstr "&Filtr"
+
+#: kmymoneyutils.cpp:160
+msgid "Filter out accounts"
+msgstr ""
+
+#: kmymoneyutils.cpp:161
+msgid "Use this to filter out accounts"
+msgstr ""
+
+#: kmymoneyutils.cpp:192
+msgid "Preferred accounts"
+msgstr ""
+
+#: kmymoneyutils.cpp:193
+msgid "Payment accounts"
+msgstr ""
+
+#: kmymoneyutils.cpp:194
+msgid "Favorite reports"
+msgstr "Oblíbené výkazy"
+
+#: kmymoneyutils.cpp:195
+msgid "Forecast (schedule)"
+msgstr ""
+
+#: kmymoneyutils.cpp:196
+msgid "Networth forecast"
+msgstr "Předpověď čistého jmění"
+
+#: kmymoneyutils.cpp:197
+msgid "Forecast (history)"
+msgstr ""
+
+#: kmymoneyutils.cpp:198
+msgid "Assets and Liabilities"
+msgstr "Aktiva a pasiva"
+
+#: kmymoneyutils.cpp:199 reports/pivottable.cpp:2416 views/khomeview.cpp:1393
+#: widgets/rc.cpp:70
+msgid "Budget"
+msgstr "Rozpočet"
+
+#: kmymoneyutils.cpp:200
+#, fuzzy
+msgid "CashFlow"
+msgstr "Hotovost"
+
+#: dialogs/kenterscheduledlg.cpp:153 kmymoneyutils.cpp:366
+msgid "Unable to load schedule details"
+msgstr "Nepodařilo se načíst podrobnosti o finančním plánu"
+
+#: kmymoneyutils.cpp:390 widgets/register.cpp:473
+msgid ""
+"_: Reconcile state 'Not reconciled'\n"
+"Not reconciled"
+msgstr ""
+
+#: kmymoneyutils.cpp:393 widgets/register.cpp:476
+msgid ""
+"_: Reconcile state 'Cleared'\n"
+"Cleared"
+msgstr ""
+
+#: kmymoneyutils.cpp:396 widgets/register.cpp:479
+msgid ""
+"_: Reconcile state 'Reconciled'\n"
+"Reconciled"
+msgstr ""
+
+#: kmymoneyutils.cpp:399 widgets/register.cpp:482
+msgid ""
+"_: Reconcile state 'Frozen'\n"
+"Frozen"
+msgstr ""
+
+#: kmymoneyutils.cpp:410
+msgid ""
+"_: Reconcile flag C\n"
+"C"
+msgstr ""
+
+#: kmymoneyutils.cpp:413
+msgid ""
+"_: Reconcile flag R\n"
+"R"
+msgstr ""
+
+#: kmymoneyutils.cpp:416
+msgid ""
+"_: Reconcile flag F\n"
+"F"
+msgstr ""
+
+#: kmymoneyutils.cpp:419
+msgid ""
+"_: Flag for unknown reconciliation state\n"
+"?"
+msgstr ""
+
+#: _tips.cpp:3
+msgid ""
+"<p>...that you can change the sort order of ledger entries by\n"
+"right-clicking the header of the ledger view?\n"
+msgstr ""
+
+#: _tips.cpp:9
+msgid ""
+"<p>...that you can easily move to the other side of a transfer transaction\n"
+"by opening the context menu with the right mouse button and selecting one of "
+"the\n"
+"'Goto' functions?\n"
+msgstr ""
+
+#: _tips.cpp:16
+msgid ""
+"<p>...that you can start editing a transaction by double-clicking on the\n"
+"transaction in the register?\n"
+msgstr ""
+
+#: _tips.cpp:22
+msgid ""
+"<p>...that you can show more details of the selected transaction in the\n"
+"register by selecting the 'ledger lens' feature in the settings dialog?\n"
+msgstr ""
+
+#: _tips.cpp:28
+msgid ""
+"<p>...that transactions with no category assigned or split\n"
+"transactions with unassigned values are marked with an exclamation mark \n"
+"on a yellow triangle in the register?\n"
+msgstr ""
+
+#: _tips.cpp:35
+msgid ""
+"<p>...that you can show all details of the transactions in the register\n"
+"by typing &lt;Ctrl-T&gt; or selecting the 'Settings/Show Transaction "
+"Detail'\n"
+"menu entry? You can turn this feature off the same way.\n"
+msgstr ""
+
+#: _tips.cpp:42
+msgid ""
+"<p>...that you can switch between a listing of all accounts or\n"
+"an icon view of all asset and liability accounts with the tabs\n"
+"in the accounts view?\n"
+msgstr ""
+
+#: _tips.cpp:49
+msgid "<p>...that the KMyMoney development team wishes you a nice day?\n"
+msgstr ""
+
+#: _tips.cpp:54
+msgid ""
+"<p>...you can use your own external filter program to convert any\n"
+"import format to QIF on the fly? See the QIF profile editor for\n"
+"more details.\n"
+msgstr ""
+
+#: _tips.cpp:61
+msgid ""
+"<p>...that you can create a scheduled transaction from an existing\n"
+"one by selecting the context menu on a transaction in the ledger\n"
+"or the \"More...\"-menu in the transaction form?\n"
+msgstr ""
+
+#: _tips.cpp:68
+msgid ""
+"<p>...that you can switch to the payee of a transaction\n"
+"by selecting the context menu on a transaction in the ledger\n"
+"or in the transaction menu?\n"
+msgstr ""
+
+#: _tips.cpp:75
+msgid ""
+"<p>...that you can modify the colors and fonts used for the ledgers\n"
+"via <i>Configure/Register/...</i>?\n"
+msgstr ""
+
+#: _tips.cpp:81
+msgid ""
+"<p>...that you can hide transactions prior to a specific date?\n"
+"The date can be modified via <i>Configure/Register/Filter</i>.\n"
+msgstr ""
+
+#: _tips.cpp:87
+msgid ""
+"<p>...that you can customize the \"Home-Page\"\n"
+"via <i>Configure/Home</i>?\n"
+msgstr ""
+
+#: _tips.cpp:93
+msgid ""
+"<p>...that you can enter new transactions even while reconciling\n"
+"an account? You can also make the transaction form visible.\n"
+msgstr ""
+
+#: _tips.cpp:99
+msgid ""
+"<p>...that you can actively support the KMyMoney development team in\n"
+"cases that heavily depend on your data? You can save your data in an\n"
+"anonymized way for this support.<p>\n"
+"Just open your data file and immediately\n"
+"select <b>File/Save as...</b>. In the <b>Save As...</b> dialog\n"
+"select the filter <b>Anonymous Files</b> and make sure your file gets\n"
+"the extensions <b>.anon.xml</b>. <p>\n"
+"To verify, how the data looks like you are about to send away, you can open\n"
+"this file in KMyMoney and see how the developers see your data.\n"
+msgstr ""
+
+#: _tips.cpp:112
+msgid ""
+"<p>... that you can import your bank statements even without a network \n"
+"connection? Just select the file (OFX or QIF) from the File->Import menu.</"
+"p>\n"
+"<p>Provided by Jose Jorge</p>\n"
+msgstr ""
+
+#: reports/listtable.cpp:159 reports/listtable.cpp:163
+#: reports/pivottable.cpp:1564
+msgid ""
+"_: Report date range\n"
+"%1 through %2"
+msgstr ""
+
+#: reports/listtable.cpp:171 reports/pivottable.cpp:1571
+#, c-format
+msgid "All currencies converted to %1"
+msgstr "Všechny měny převedeny na %1"
+
+#: reports/listtable.cpp:172 reports/pivottable.cpp:1328
+msgid "All currencies converted to %1\n"
+msgstr ""
+
+#: reports/listtable.cpp:176 reports/pivottable.cpp:1573
+msgid "All values shown in %1 unless otherwise noted"
+msgstr ""
+
+#: reports/listtable.cpp:177 reports/pivottable.cpp:1330
+msgid "All values shown in %1 unless otherwise noted\n"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:73 dialogs/kfindtransactiondlg.cpp:188
+#: dialogs/rc.cpp:53 dialogs/rc.cpp:63 dialogs/rc.cpp:208 dialogs/rc.cpp:805
+#: dialogs/settings/rc.cpp:111 dialogs/transactioneditor.cpp:844
+#: reports/listtable.cpp:196 views/khomeview.cpp:412 views/khomeview.cpp:485
+#: views/khomeview.cpp:519 views/rc.cpp:61 widgets/kmymoneypriceview.cpp:128
+#: widgets/rc.cpp:36 widgets/register.cpp:565 widgets/transaction.cpp:1027
+#: widgets/transaction.cpp:1484
+msgid "Date"
+msgstr ""
+
+#: reports/listtable.cpp:198
+msgid "Num"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:204 dialogs/kmymoneysplittable.cpp:78
+#: dialogs/kmymoneysplittable.cpp:831 dialogs/rc.cpp:217
+#: dialogs/transactioneditor.cpp:831 dialogs/transactioneditor.cpp:1374
+#: dialogs/transactioneditor.cpp:1382 dialogs/transactioneditor.cpp:1396
+#: dialogs/transactioneditor.cpp:1449 dialogs/transactioneditor.cpp:1456
+#: dialogs/transactioneditor.cpp:1504 reports/listtable.cpp:200
+#: views/kcategoriesview.cpp:76 views/rc.cpp:62 widgets/rc.cpp:115
+#: widgets/register.cpp:62 widgets/transaction.cpp:848
+#: widgets/transaction.cpp:906
+msgid "Category"
+msgstr "Kategorie"
+
+#: dialogs/kmymoneysplittable.cpp:79 dialogs/kmymoneysplittable.cpp:837
+#: reports/listtable.cpp:202 widgets/rc.cpp:101 widgets/transaction.cpp:1042
+#: widgets/transaction.cpp:1628
+msgid "Memo"
+msgstr "Poznámka"
+
+#: reports/listtable.cpp:203
+msgid "Top Category"
+msgstr ""
+
+#: reports/listtable.cpp:204
+msgid "Category Type"
+msgstr "Druh kategorie"
+
+#: dialogs/rc.cpp:229 dialogs/settings/rc.cpp:152 reports/listtable.cpp:207
+#: widgets/kmymoneycombo.cpp:346 widgets/rc.cpp:107
+msgid "Reconciled"
+msgstr ""
+
+#: reports/listtable.cpp:208 widgets/rc.cpp:117
+msgid "Action"
+msgstr ""
+
+#: dialogs/investactivities.cpp:199 dialogs/investactivities.cpp:287
+#: dialogs/investactivities.cpp:424 dialogs/investactivities.cpp:504
+#: dialogs/investactivities.cpp:544 dialogs/investtransactioneditor.cpp:241
+#: reports/listtable.cpp:209 widgets/rc.cpp:103 widgets/transaction.cpp:1513
+msgid "Shares"
+msgstr ""
+
+#: dialogs/investtransactioneditor.cpp:248
+#: dialogs/investtransactioneditor.cpp:1067
+#: dialogs/investtransactioneditor.cpp:1068
+#: dialogs/investtransactioneditor.cpp:1072
+#: dialogs/kequitypriceupdatedlg.cpp:72 dialogs/rc.cpp:109 dialogs/rc.cpp:164
+#: dialogs/rc.cpp:251 dialogs/rc.cpp:756 dialogs/rc.cpp:827
+#: dialogs/settings/rc.cpp:117 reports/listtable.cpp:210
+#: reports/listtable.cpp:211 reports/pivottable.cpp:2441
+#: views/kinvestmentview.cpp:80 widgets/kmymoneypriceview.cpp:129
+#: widgets/rc.cpp:43 widgets/rc.cpp:105 widgets/register.cpp:573
+msgid "Price"
+msgstr "Cena"
+
+#: reports/listtable.cpp:212
+msgid "Net Value"
+msgstr "Čistá hodnota"
+
+#: reports/listtable.cpp:213
+msgid "Buys"
+msgstr "Nákupy"
+
+#: reports/listtable.cpp:214
+msgid "Sells"
+msgstr "Prodeje"
+
+#: reports/listtable.cpp:215
+msgid "Dividends Reinvested"
+msgstr ""
+
+#: reports/listtable.cpp:216
+msgid "Dividends Paid Out"
+msgstr ""
+
+#: reports/listtable.cpp:217
+msgid "Starting Balance"
+msgstr "Počáteční bilance"
+
+#: reports/listtable.cpp:218
+msgid "Ending Balance"
+msgstr "Konečná bilance"
+
+#: reports/listtable.cpp:219
+msgid "Annualized Return"
+msgstr ""
+
+#: reports/listtable.cpp:220
+msgid "Return On Investment"
+msgstr ""
+
+#: dialogs/rc.cpp:106 dialogs/rc.cpp:161 dialogs/rc.cpp:248 dialogs/rc.cpp:505
+#: dialogs/rc.cpp:570 dialogs/rc.cpp:667 dialogs/rc.cpp:753
+#: reports/listtable.cpp:223 widgets/register.cpp:570
+msgid "Payment"
+msgstr "Platba"
+
+#: dialogs/rc.cpp:111 dialogs/rc.cpp:166 dialogs/rc.cpp:253 dialogs/rc.cpp:709
+#: dialogs/rc.cpp:758 reports/listtable.cpp:224 widgets/rc.cpp:119
+#: widgets/register.cpp:575
+msgid "Balance"
+msgstr "Bilance"
+
+#: reports/listtable.cpp:227 views/kscheduledview.cpp:74
+msgid "Next Due Date"
+msgstr "Další datum splatnosti"
+
+#: reports/listtable.cpp:229 views/kscheduledview.cpp:76
+msgid "Payment Method"
+msgstr "Druh platby"
+
+#: dialogs/rc.cpp:803 reports/listtable.cpp:231 widgets/rc.cpp:2
+msgid "Description"
+msgstr "Popis"
+
+#: reports/listtable.cpp:232
+msgid "Opening Date"
+msgstr ""
+
+#: reports/listtable.cpp:234
+msgid "Balance Early Warning"
+msgstr ""
+
+#: reports/listtable.cpp:235
+msgid "Balance Max Limit"
+msgstr ""
+
+#: reports/listtable.cpp:236
+msgid "Credit Early Warning"
+msgstr ""
+
+#: reports/listtable.cpp:237
+msgid "Credit Max Limit"
+msgstr ""
+
+#: dialogs/rc.cpp:376 reports/listtable.cpp:238
+msgid "Tax"
+msgstr ""
+
+#: reports/listtable.cpp:239
+msgid "Preferred"
+msgstr ""
+
+#: reports/listtable.cpp:240
+msgid "Loan Amount"
+msgstr ""
+
+#: dialogs/rc.cpp:511 reports/listtable.cpp:241
+msgid "Interest Rate"
+msgstr ""
+
+#: reports/listtable.cpp:242
+msgid "Next Interest Change"
+msgstr ""
+
+#: reports/listtable.cpp:243
+msgid "Periodic Payment"
+msgstr "Pravidelná platba"
+
+#: reports/listtable.cpp:244
+msgid "Final Payment"
+msgstr "Konečná platba"
+
+#: reports/listtable.cpp:245 views/khomeview.cpp:766 views/khomeview.cpp:1265
+#: views/khomeview.cpp:1273
+msgid "Current Balance"
+msgstr "Současná bilance"
+
+#: dialogs/investactivities.cpp:201 dialogs/investactivities.cpp:289
+#: dialogs/investactivities.cpp:368 dialogs/investactivities.cpp:426
+#: dialogs/rc.cpp:327 reports/listtable.cpp:360 reports/listtable.cpp:364
+#: reports/listtable.cpp:556 reports/listtable.cpp:558
+#: reports/pivottable.cpp:1343 reports/pivottable.cpp:1445
+#: reports/pivottable.cpp:1505 reports/pivottable.cpp:1598
+#: reports/pivottable.cpp:1768 reports/pivottable.cpp:1845
+#: reports/pivottable.cpp:2165 reports/pivottable.cpp:2167
+#: reports/pivottable.cpp:2187 reports/pivottable.cpp:2189
+#: reports/querytabletest.cpp:134 reports/querytabletest.cpp:135
+#: reports/querytabletest.cpp:136 reports/querytabletest.cpp:137
+#: reports/querytabletest.cpp:162 reports/querytabletest.cpp:163
+#: reports/querytabletest.cpp:164 reports/querytabletest.cpp:197
+#: reports/querytabletest.cpp:198 reports/querytabletest.cpp:224
+#: reports/querytabletest.cpp:250 reports/querytabletest.cpp:251
+#: reports/querytabletest.cpp:252 reports/querytabletest.cpp:275
+#: reports/querytabletest.cpp:276 reports/querytabletest.cpp:277
+#: reports/querytabletest.cpp:366 reports/querytabletest.cpp:422
+#: reports/querytabletest.cpp:423 views/kforecastview.cpp:568 views/rc.cpp:18
+#: widgets/kmymoneyaccounttreeforecast.cpp:139 widgets/transaction.cpp:1643
+msgid "Total"
+msgstr "Celkové"
+
+#: reports/listtable.cpp:444
+msgid "Initial Market Value"
+msgstr ""
+
+#: reports/listtable.cpp:445
+msgid "Ending Market Value"
+msgstr ""
+
+#: reports/listtable.cpp:448 reports/querytabletest.cpp:651
+msgid "Opening Balance"
+msgstr "Otevírací bilance"
+
+#: reports/listtable.cpp:449 reports/querytabletest.cpp:652
+#: reports/querytabletest.cpp:653
+msgid "Closing Balance"
+msgstr "Konečná bilance"
+
+#: reports/listtable.cpp:490 reports/listtable.cpp:491
+msgid "Calculated"
+msgstr ""
+
+#: reports/listtable.cpp:572 reports/listtable.cpp:574
+#: reports/pivottable.cpp:1530 reports/pivottable.cpp:1886
+#: reports/querytabletest.cpp:138 reports/querytabletest.cpp:165
+#: reports/querytabletest.cpp:199 reports/querytabletest.cpp:225
+#: reports/querytabletest.cpp:253 reports/querytabletest.cpp:278
+#: reports/querytabletest.cpp:367 reports/querytabletest.cpp:402
+#: reports/querytabletest.cpp:424 reports/querytabletest.cpp:548
+#: reports/querytabletest.cpp:551 reports/querytabletest.cpp:586
+msgid "Grand Total"
+msgstr ""
+
+#: dialogs/rc.cpp:233 reports/pivottable.cpp:339 views/kscheduledview.cpp:174
+#: views/kscheduledview.cpp:433 views/kscheduledview.cpp:449
+#: widgets/kmymoneyscheduledcalendar.cpp:48
+msgid "Transfers"
+msgstr "Převody"
+
+#: reports/pivottable.cpp:1951
+msgid "Legend"
+msgstr "Vysvětlivky"
+
+#: reports/pivottable.cpp:2411 views/khomeview.cpp:1406
+#: views/khomeview.cpp:1443
+msgid "Actual"
+msgstr ""
+
+#: reports/pivottable.cpp:2421 views/khomeview.cpp:1409
+#: views/khomeview.cpp:1446
+msgid "Difference"
+msgstr "Rozdíl"
+
+#: reports/pivottable.cpp:2431
+#, fuzzy
+msgid "Moving Average"
+msgstr "Průměr"
+
+#: reports/pivottable.cpp:2436
+#, fuzzy
+msgid "Moving Average Price"
+msgstr "Průměr"
+
+#: reports/objectinfotable.cpp:214 reports/querytable.cpp:693
+#: reports/querytable.cpp:736 reports/querytable.cpp:1356
+#: reports/querytable.cpp:1375 views/kpayeesview.cpp:742
+#, c-format
+msgid "Transfer from %1"
+msgstr "Převod z %1"
+
+#: reports/objectinfotable.cpp:215 reports/querytable.cpp:694
+#: reports/querytable.cpp:735 reports/querytable.cpp:1355
+#: reports/querytable.cpp:1374 views/kpayeesview.cpp:740
+#, c-format
+msgid "Transfer to %1"
+msgstr "Převod na %1"
+
+#: reports/querytabletest.cpp:471 views/kreportsview.cpp:1144
+msgid "Investment Transactions"
+msgstr "Investiční transakce"
+
+#: reports/querytabletest.cpp:472 reports/querytabletest.cpp:564
+msgid "Test Report"
+msgstr ""
+
+#: reports/querytabletest.cpp:547 reports/querytabletest.cpp:550
+msgid "Total Stock 1"
+msgstr ""
+
+#: reports/querytabletest.cpp:563 views/kreportsview.cpp:1174
+msgid "Investment Performance by Account"
+msgstr ""
+
+#: reports/querytable.cpp:431 reports/querytable.cpp:1200
+#, c-format
+msgid "Month of %1"
+msgstr ""
+
+#: reports/querytable.cpp:432 reports/querytable.cpp:1201
+#, c-format
+msgid "Week of %1"
+msgstr ""
+
+#: reports/querytable.cpp:576 reports/querytable.cpp:739
+#: reports/querytable.cpp:858 reports/querytable.cpp:1325
+#: reports/querytable.cpp:1481
+msgid "No Institution"
+msgstr "Žádná instituce"
+
+#: reports/querytable.cpp:580 reports/querytable.cpp:1329
+msgid "[Empty Payee]"
+msgstr ""
+
+#: reports/querytable.cpp:615 reports/querytable.cpp:1361
+msgid "[Split Transaction]"
+msgstr ""
+
+#: reports/querytable.cpp:616 reports/querytable.cpp:617
+msgid "Split"
+msgstr ""
+
+#: main.cpp:51
+msgid ""
+"\n"
+"KMyMoney, the Personal Finance Manager for KDE.\n"
+"\n"
+"Please consider contributing to this project with code and/or suggestions."
+msgstr ""
+
+#: main.cpp:55
+msgid "language to be used"
+msgstr ""
+
+#: main.cpp:56
+msgid "don't open last used file"
+msgstr ""
+
+#: main.cpp:57
+msgid "enable performance timers"
+msgstr ""
+
+#: main.cpp:61
+msgid "turn on program traces"
+msgstr ""
+
+#: main.cpp:62
+msgid "dump the names of all defined KAction objects to stdout and quit"
+msgstr ""
+
+#: main.cpp:66
+msgid "file to open"
+msgstr ""
+
+#: main.cpp:92
+msgid "Memory leakage detection"
+msgstr ""
+
+#: main.cpp:96
+msgid "Compiled with the following settings:\n"
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:650 dialogs/ksplittransactiondlg.cpp:277
+#: main.cpp:98
+msgid "KMyMoney"
+msgstr ""
+
+#: main.cpp:104
+msgid "Initial idea, much initial source code, Project admin"
+msgstr ""
+
+#: main.cpp:105
+msgid "Core engine, Release Manager, Project admin"
+msgstr ""
+
+#: main.cpp:106
+msgid "Reporting logic, OFX Import"
+msgstr ""
+
+#: main.cpp:107
+msgid "Database backend, maintainer stable branch"
+msgstr ""
+
+#: main.cpp:108
+msgid "Forecast, Reports"
+msgstr "Předpovědi, Výkazy"
+
+#: main.cpp:109
+msgid "Project Admin"
+msgstr ""
+
+#: main.cpp:110
+msgid "Developer"
+msgstr ""
+
+#: main.cpp:111
+msgid "Database backend"
+msgstr ""
+
+#: main.cpp:113
+msgid "Initial investment support"
+msgstr ""
+
+#: main.cpp:114
+msgid "Developer & Artist"
+msgstr ""
+
+#: main.cpp:115
+msgid "Icons & splash screen"
+msgstr ""
+
+#: main.cpp:116 main.cpp:117
+msgid "Patches"
+msgstr ""
+
+#: main.cpp:136
+msgid ""
+"The monetary decimal symbol is not correctly set in the KDE Control Center's "
+"Country/Region & Language settings. Please set it to a reasonable value and "
+"start KMyMoney again."
+msgstr ""
+
+#: main.cpp:136
+msgid "Invalid settings"
+msgstr ""
+
+#: main.cpp:228
+msgid "Another instance of KMyMoney is already running. Do you want to quit?"
+msgstr ""
+
+#: main.cpp:289
+msgid "Uncaught error. Please report the details to the developers"
+msgstr ""
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr ""
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr ""
+
+#: dialogs/kcsvprogressdlg.cpp:62 dialogs/kimportdlg.cpp:66 rc.cpp:1
+msgid "&Import"
+msgstr ""
+
+#: rc.cpp:2
+msgid "E&xport"
+msgstr ""
+
+#: rc.cpp:3
+msgid "&Institution"
+msgstr "&Instituce"
+
+#: rc.cpp:4
+msgid "&Account"
+msgstr "&Účet"
+
+#: rc.cpp:5
+msgid "&Category"
+msgstr "&Kategorie"
+
+#: rc.cpp:6
+msgid "&Transaction"
+msgstr "&Transakce"
+
+#: rc.cpp:7 rc.cpp:20
+msgid "Mark transaction as..."
+msgstr "Označit transakci jako..."
+
+#: rc.cpp:8 rc.cpp:21
+msgid "Mark transaction"
+msgstr "Označit transakci"
+
+#: rc.cpp:9
+msgid "T&ools"
+msgstr "Nástroje"
+
+#: rc.cpp:10
+msgid "Account options"
+msgstr "Volby účtu"
+
+#: rc.cpp:11
+msgid "Category options"
+msgstr "Volby kategorie"
+
+#: rc.cpp:12
+msgid "Institution options"
+msgstr "Volby instituce"
+
+#: rc.cpp:13
+msgid "Payee options"
+msgstr "Volby plátce/příjemce"
+
+#: rc.cpp:14
+msgid "Budget options"
+msgstr "Volby rozpočtu"
+
+#: rc.cpp:15
+msgid "Investment options"
+msgstr "Volby investic"
+
+#: rc.cpp:16
+#, fuzzy
+msgid "Scheduled transactions options"
+msgstr "Naplánované transakce nalezeny"
+
+#: rc.cpp:17
+msgid "Transaction options"
+msgstr "Volby transakce"
+
+#: rc.cpp:18
+msgid "Move transaction to..."
+msgstr "Přesunout transakci do..."
+
+#: rc.cpp:19
+msgid "Select account"
+msgstr "Vybrat účet"
+
+#: rc.cpp:22
+msgid "Currency options"
+msgstr "Volby měn"
+
+#: rc.cpp:24
+msgid "Always show a No. field in transaction form"
+msgstr ""
+
+#: rc.cpp:25
+msgid "Auto fill with previous transaction data"
+msgstr ""
+
+#: rc.cpp:26
+msgid "Treat two transactions as identical, if amount differs less than"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:144 rc.cpp:27
+msgid "Auto increment check number"
+msgstr ""
+
+#: rc.cpp:28
+msgid "Autosave file periodically"
+msgstr "Pravidelně automaticky ukládat"
+
+#: rc.cpp:29
+msgid "Autosave interval in minutes"
+msgstr "Interval automatického ukládání v minutách"
+
+#: rc.cpp:30
+msgid "Check schedules upon startup"
+msgstr "Zkontrolovat plány po spuštění"
+
+#: dialogs/settings/rc.cpp:171 rc.cpp:31
+msgid "Enter transactions this number of days in advance"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:172 rc.cpp:32
+msgid "Number of days to preview schedules in ledger"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:143 rc.cpp:33
+msgid "Insert transaction type into No. field for new transactions"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:145 rc.cpp:34
+msgid "Keep changes when selecting a different transaction/split"
+msgstr ""
+
+#: rc.cpp:35
+msgid "Using the Enter key moves between the fields"
+msgstr "Použitím klávesy \"Enter\" se můžete pohybovat mezi poli"
+
+#: dialogs/settings/rc.cpp:130 rc.cpp:36
+msgid "Use the ledger lens"
+msgstr ""
+
+#: rc.cpp:37
+msgid "Price Precision"
+msgstr "Přesnost cen"
+
+#: dialogs/rc.cpp:65 rc.cpp:38
+msgid "Update price history"
+msgstr "Aktualizovat historii cen"
+
+#: dialogs/settings/rc.cpp:132 rc.cpp:39
+msgid "Show transaction form"
+msgstr ""
+
+#: rc.cpp:40
+msgid "Start with last selected view or homepage"
+msgstr "Spustit s posledním použitým pohledem, nebo domovskou stránkou"
+
+#: rc.cpp:41
+msgid "Use GPG to encrypt data file"
+msgstr "Použít GPG pro šifrování datového souboru"
+
+#: rc.cpp:42
+msgid "Also encrypt against recover key"
+msgstr "Šifrovat také oproti klíči obnovy"
+
+#: rc.cpp:43
+msgid "GPG User ID (deprecated)"
+msgstr "Uživatelské ID GPG (zastaralé)"
+
+#: rc.cpp:44
+msgid "GPG User ID"
+msgstr "Uživatelské ID GPG"
+
+#: rc.cpp:45
+msgid "Run in expert (accountant) mode"
+msgstr "Spustit v profesionálním (účetnickém) režimu"
+
+#: rc.cpp:46
+msgid "Show splash screen during startup"
+msgstr "Zobratit spouštěcí obrazovku během spouštění"
+
+#: rc.cpp:47
+msgid "Synchronize account in ledger and investment view"
+msgstr ""
+
+#: rc.cpp:48
+msgid "Icon size for view selection"
+msgstr "Velikost ikon pro výběr pohledu"
+
+#: rc.cpp:49
+msgid "list of hidden views"
+msgstr ""
+
+#: rc.cpp:50
+msgid "Firsttime switch to start new user wizard"
+msgstr ""
+
+#: rc.cpp:51
+msgid "Show title bar on each view"
+msgstr ""
+
+#: rc.cpp:52
+msgid "Start string matches for e.g. payees at start of string"
+msgstr ""
+
+#: rc.cpp:53
+msgid "Order of items on homepage"
+msgstr "Pořadí položek na domovské stránce"
+
+#: rc.cpp:54
+msgid "Percentage of default font size used for home view HTML page"
+msgstr ""
+
+#: rc.cpp:55
+msgid "Remember (manually adjusted) font size in home view on program end."
+msgstr ""
+
+#: rc.cpp:56
+msgid "Show account limit information on the Homepage"
+msgstr ""
+
+#: rc.cpp:58
+msgid "Hide closed accounts"
+msgstr "Skrýt uzavřené pčty"
+
+#: rc.cpp:59
+msgid "Hide finished schedules"
+msgstr "Skrýt dokončené plány"
+
+#: rc.cpp:61
+msgid "Show all register entries in full detail"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:129 rc.cpp:62
+msgid "Show a grid in the register"
+msgstr ""
+
+#: rc.cpp:63
+msgid "Show fancy group markers"
+msgstr ""
+
+#: rc.cpp:64
+msgid "Show fancy markers for previous and current fiscal year"
+msgstr ""
+
+#: rc.cpp:65
+msgid "Starting month of the fiscal year"
+msgstr "Počáteční měsíc fiskálního období"
+
+#: rc.cpp:66
+msgid "Starting day of the fiscal year"
+msgstr "Počáteční den fiskálního období"
+
+#: rc.cpp:67
+msgid "Start date"
+msgstr "Počáteční datum"
+
+#: dialogs/settings/rc.cpp:9 rc.cpp:68
+msgid "Use system colors"
+msgstr "Používat systémové barvy"
+
+#: rc.cpp:69
+msgid "List color"
+msgstr ""
+
+#: rc.cpp:70
+msgid "List background color"
+msgstr ""
+
+#: rc.cpp:71
+msgid "List grid color"
+msgstr ""
+
+#: rc.cpp:72
+msgid "Background color for imported transactions"
+msgstr ""
+
+#: rc.cpp:73
+msgid "Background color for matched transactions"
+msgstr ""
+
+#: rc.cpp:74
+msgid "List color for erronous transactions"
+msgstr ""
+
+#: rc.cpp:75
+msgid "List color for missing conversion rate"
+msgstr ""
+
+#: rc.cpp:76
+msgid "List color for negative values"
+msgstr ""
+
+#: rc.cpp:77
+msgid "Background color for group marker"
+msgstr ""
+
+#: rc.cpp:78
+msgid "Background color for required fields"
+msgstr ""
+
+#: rc.cpp:79
+msgid "Use system font"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:21 rc.cpp:80
+msgid "Cell font"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:22 rc.cpp:81
+msgid "Header font"
+msgstr ""
+
+#: rc.cpp:82 rc.cpp:83
+msgid "Sort order of register in normal view"
+msgstr ""
+
+#: rc.cpp:84
+msgid "Sort order of register in search dialog"
+msgstr ""
+
+#: rc.cpp:85
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation"
+msgstr ""
+
+#: rc.cpp:86
+msgid "Number of days (plus/minus) to search for matching transactions"
+msgstr ""
+
+#: rc.cpp:87
+msgid "During import, ask for a new payee's default category"
+msgstr ""
+
+#: rc.cpp:88
+msgid "Method to calculate forecast"
+msgstr ""
+
+#: rc.cpp:89
+msgid "Days to forecast"
+msgstr ""
+
+#: rc.cpp:90
+msgid "Days of normal account cycle"
+msgstr ""
+
+#: rc.cpp:91
+msgid "Number of historic cycles to use in forecast"
+msgstr ""
+
+#: rc.cpp:92
+msgid "Day of month to start forecast"
+msgstr ""
+
+#: rc.cpp:93
+msgid "Method to calculate history-based forecast"
+msgstr ""
+
+#: rc.cpp:94
+msgid "Skip opening date when fetching transactions"
+msgstr ""
+
+#: rc.cpp:95
+msgid "Include future transaction when using Schedule Forecast"
+msgstr ""
+
+#: rc.cpp:96
+msgid "Include scheduled transactions when using Schedule Forecast"
+msgstr ""
+
+#: rc.cpp:97
+msgid "additional names for cash account"
+msgstr ""
+
+#: rc.cpp:98
+msgid "additional names for checking account"
+msgstr ""
+
+#: rc.cpp:99
+msgid "additional names for credit card account"
+msgstr ""
+
+#: rc.cpp:100
+#, fuzzy
+msgid "additional names for asset account"
+msgstr "Vytvořit nový účet aktiv"
+
+#: rc.cpp:101
+msgid "additional names for opening balance payee"
+msgstr ""
+
+#: rc.cpp:102
+msgid "additional names for invoice accounts"
+msgstr ""
+
+#: rc.cpp:103 widgets/rc.cpp:161 widgets/rc.cpp:163
+msgid "..."
+msgstr ""
+
+#: views/kcategoriesview.cpp:276
+msgid "Profit: "
+msgstr ""
+
+#: views/kcategoriesview.cpp:278
+msgid "Loss: "
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:54
+#: dialogs/transactioneditor.cpp:605 views/kpayeesview.cpp:365
+#: widgets/kmymoneyonlinequoteconfig.cpp:54
+msgid "Accepts the entered data and stores it"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:55 views/kpayeesview.cpp:366
+#: widgets/kmymoneyonlinequoteconfig.cpp:55
+msgid "Use this to accept the modified data."
+msgstr ""
+
+#: views/kpayeesview.cpp:491
+msgid ""
+"A payee with the name '%1' already exists. It is not advisable to have "
+"multiple payees with the same identification name. Are you sure you would "
+"like to rename the payee?"
+msgstr ""
+
+#: views/kpayeesview.cpp:518 views/kpayeesview.cpp:869
+msgid "Unable to modify payee"
+msgstr ""
+
+#: views/kpayeesview.cpp:564
+msgid "Do you want to save the changes for <b>%1</b>?"
+msgstr ""
+
+#: views/kbudgetview.cpp:490 views/kpayeesview.cpp:565
+msgid "Save changes"
+msgstr "Uložit změny"
+
+#: views/kgloballedgerview.cpp:737 views/kpayeesview.cpp:662
+#: views/kpayeesview.cpp:753
+#, c-format
+msgid "Balance: %1"
+msgstr "Bilance: %1"
+
+#: views/kpayeesview.cpp:725 views/kpayeesview.cpp:731
+#, c-format
+msgid "Amortization of %1"
+msgstr ""
+
+#: views/kpayeesview.cpp:727 views/kpayeesview.cpp:733
+#, c-format
+msgid "Payment to %1"
+msgstr "Platba pro %1"
+
+#: views/kpayeesview.cpp:736
+#, c-format
+msgid "Loan payment from %1"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:123
+#: dialogs/kconfirmmanualenterdlg.cpp:133 views/kpayeesview.cpp:745
+#: widgets/kmymoneycategory.cpp:160 widgets/kmymoneycategory.cpp:166
+#: widgets/transaction.cpp:851 widgets/transaction.cpp:1397
+#: widgets/transaction.cpp:1411
+msgid ""
+"_: Split transaction (category replacement)\n"
+"Split transaction"
+msgstr ""
+
+#: views/kreportsview.cpp:262
+msgid ""
+"There was an error creating your report: \"%1\".\n"
+"Please report this error to the developer's list: kmymoney2-developer@lists."
+"sourceforge.net"
+msgstr ""
+
+#: views/kreportsview.cpp:264
+msgid "Critical Error"
+msgstr "Kritická chyba"
+
+#: views/kreportsview.cpp:268
+msgid "Unable to generate report"
+msgstr "Nepodařilo se vytvořit výkaz"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:125 views/kreportsview.cpp:286
+#: views/rc.cpp:53 widgets/rc.cpp:146
+msgid "Chart"
+msgstr "Graf"
+
+#: views/kreportsview.cpp:287 widgets/rc.cpp:147
+msgid "Show the chart version of this report"
+msgstr ""
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:112 views/khomeview.cpp:900
+#: views/kreportsview.cpp:294 views/kreportsview.cpp:328
+msgid "Report"
+msgstr "Výkaz"
+
+#: views/kreportsview.cpp:295
+msgid "Show the report version of this chart"
+msgstr ""
+
+#: views/kmymoneyview.cpp:236 views/kreportsview.cpp:314
+#: views/kreportsview.cpp:326
+msgid "Reports"
+msgstr "Výkazy"
+
+#: views/khomeview.cpp:902 views/kreportsview.cpp:329 widgets/rc.cpp:56
+msgid "Comment"
+msgstr "Komentář"
+
+#: views/kreportsview.cpp:432
+msgid "Charts"
+msgstr "Grafy"
+
+#: views/khomeview.cpp:897 views/kreportsview.cpp:470
+msgid "Favorite Reports"
+msgstr "Oblíbené výkazy"
+
+#: views/kreportsview.cpp:486
+msgid "Old Customized Reports"
+msgstr "Staré přizpůsobené výkazy"
+
+#: views/kreportsview.cpp:579
+msgid "Include Stylesheet"
+msgstr ""
+
+#: views/kreportsview.cpp:585
+msgid ""
+"_: CSV (Filefilter)\n"
+"CSV files"
+msgstr ""
+
+#: views/kreportsview.cpp:586
+msgid ""
+"_: HTML (Filefilter)\n"
+"HTML files"
+msgstr ""
+
+#: views/kreportsview.cpp:591
+msgid "Export as"
+msgstr "Exportovat jako"
+
+#: views/kreportsview.cpp:619 views/kreportsview.cpp:660
+#: views/kreportsview.cpp:942 views/kreportsview.cpp:950
+#: views/kreportsview.cpp:958 views/kreportsview.cpp:968
+#: views/kreportsview.cpp:980 views/kreportsview.cpp:998
+#: views/kreportsview.cpp:1006 views/kreportsview.cpp:1014
+#: views/kreportsview.cpp:1022 views/kreportsview.cpp:1034
+#: views/kreportsview.cpp:1046 views/kreportsview.cpp:1056
+#: views/kreportsview.cpp:1070 views/kreportsview.cpp:1079
+#: views/kreportsview.cpp:1087 views/kreportsview.cpp:1095
+#: views/kreportsview.cpp:1103 views/kreportsview.cpp:1111
+#: views/kreportsview.cpp:1120 views/kreportsview.cpp:1132
+#: views/kreportsview.cpp:1145 views/kreportsview.cpp:1155
+#: views/kreportsview.cpp:1165 views/kreportsview.cpp:1175
+#: views/kreportsview.cpp:1185 views/kreportsview.cpp:1195
+#: views/kreportsview.cpp:1208 views/kreportsview.cpp:1222
+#: views/kreportsview.cpp:1239 views/kreportsview.cpp:1257
+#: views/kreportsview.cpp:1273 views/kreportsview.cpp:1295
+#: views/kreportsview.cpp:1304 views/kreportsview.cpp:1313
+#: views/kreportsview.cpp:1322 views/kreportsview.cpp:1336
+#: views/kreportsview.cpp:1347 views/kreportsview.cpp:1362
+#: views/kreportsview.cpp:1372 views/kreportsview.cpp:1383
+#: views/kreportsview.cpp:1393 views/kreportsview.cpp:1404
+#: views/kreportsview.cpp:1423 views/kreportsview.cpp:1432
+#: views/kreportsview.cpp:1444 views/kreportsview.cpp:1463
+#: views/kreportsview.cpp:1472 views/kreportsview.cpp:1481
+#: views/kreportsview.cpp:1490
+msgid "Default Report"
+msgstr "Výchozí výkaz"
+
+#: views/kreportsview.cpp:621 views/kreportsview.cpp:661
+msgid "Custom Report"
+msgstr "Vlastní výkaz"
+
+#: views/kreportsview.cpp:622
+msgid " (Customized)"
+msgstr "(Přizpůsobeno)"
+
+#: views/kreportsview.cpp:690
+msgid ""
+"Are you sure you want to delete report <b>%1</b>? There is no way to "
+"recover it!"
+msgstr ""
+
+#: views/kreportsview.cpp:690 views/kreportsview.cpp:702
+msgid "Delete Report?"
+msgstr "Odstranit výkaz?"
+
+#: views/kreportsview.cpp:702
+msgid "Sorry, <b>%1</b> is a default report. You may not delete it."
+msgstr ""
+
+#: views/kreportsview.cpp:882
+msgid "&Open"
+msgstr "&Otevřít"
+
+#: views/kreportsview.cpp:884
+msgid "&New report"
+msgstr "&Nový výkaz"
+
+#: views/kreportsview.cpp:934
+msgid "Income and Expenses"
+msgstr "Příjmy a výdaje"
+
+#: views/kreportsview.cpp:941
+msgid "Income and Expenses This Month"
+msgstr "Příjmy a výdaje tento měsíc"
+
+#: views/kreportsview.cpp:949
+msgid "Income and Expenses This Year"
+msgstr "Příjmy a výdaje tento rok"
+
+#: views/kreportsview.cpp:957
+#, fuzzy
+msgid "Income and Expenses By Year"
+msgstr "Příjmy a výdaje tento rok"
+
+#: views/kreportsview.cpp:967
+msgid "Income and Expenses Graph"
+msgstr "Graf příjmů a výdajů"
+
+#: views/kreportsview.cpp:979
+msgid "Income and Expenses Pie Chart"
+msgstr "Koláčový graf příjmů a výdajů"
+
+#: views/khomeview.cpp:1361 views/kreportsview.cpp:990
+msgid "Net Worth"
+msgstr "Čisté jmění"
+
+#: views/kreportsview.cpp:997
+msgid "Net Worth By Month"
+msgstr "Čisté jmění po měsících"
+
+#: views/kreportsview.cpp:1005
+msgid "Net Worth Today"
+msgstr "Čisté jmění dnes"
+
+#: views/kreportsview.cpp:1013
+msgid "Net Worth By Year"
+msgstr "Čisté jmění po rocích"
+
+#: views/kreportsview.cpp:1021
+msgid "7-day Cash Flow Forecast"
+msgstr ""
+
+#: views/kreportsview.cpp:1033
+msgid "Net Worth Graph"
+msgstr "Graf čistého jmění"
+
+#: views/kreportsview.cpp:1045
+msgid "Account Balances by Institution"
+msgstr "Účetní bilance podle institucí"
+
+#: views/kreportsview.cpp:1055
+msgid "Account Balances by Type"
+msgstr "Účetní bilance podle druhů"
+
+#: views/kreportsview.cpp:1069
+msgid "Transactions by Account"
+msgstr "Transakce podle účtů"
+
+#: views/kreportsview.cpp:1078
+msgid "Transactions by Category"
+msgstr "Transakce podle kategorií"
+
+#: views/kreportsview.cpp:1086
+msgid "Transactions by Payee"
+msgstr "Transakce podle plátce/příjemce"
+
+#: views/kreportsview.cpp:1094
+msgid "Transactions by Month"
+msgstr "Transakce podle měsíců"
+
+#: views/kreportsview.cpp:1102
+msgid "Transactions by Week"
+msgstr "Transakce podle týdnů"
+
+#: views/kreportsview.cpp:1110
+msgid "Loan Transactions"
+msgstr ""
+
+#: views/kreportsview.cpp:1119
+msgid "Transactions by Reconciliation Status"
+msgstr ""
+
+#: views/kreportsview.cpp:1125
+#, fuzzy
+msgid "Cash Flow"
+msgstr "Hotovost"
+
+#: views/kreportsview.cpp:1131
+#, fuzzy
+msgid "Cash Flow Transactions This Month"
+msgstr "Transakce podle měsíců"
+
+#: views/kmymoneyview.cpp:226 views/kmymoneyview.cpp:228
+#: views/kreportsview.cpp:1137
+msgid "Investments"
+msgstr "Investice"
+
+#: views/kreportsview.cpp:1154
+msgid "Investment Holdings by Account"
+msgstr ""
+
+#: views/kreportsview.cpp:1164
+msgid "Investment Holdings by Type"
+msgstr ""
+
+#: views/kreportsview.cpp:1184
+msgid "Investment Performance by Type"
+msgstr "Výkonost investic podle druhu"
+
+#: views/kreportsview.cpp:1194
+msgid "Investment Holdings Pie"
+msgstr ""
+
+#: views/kreportsview.cpp:1207
+msgid "Investment Worth Graph"
+msgstr "Graf hodnoty investic"
+
+#: views/kreportsview.cpp:1221
+#, fuzzy
+msgid "Investment Price Graph"
+msgstr "Graf hodnoty investic"
+
+#: views/kreportsview.cpp:1238
+#, fuzzy
+msgid "Investment Moving Average Price Graph"
+msgstr "Volby investic"
+
+#: views/kreportsview.cpp:1256
+#, fuzzy
+msgid "Investment Moving Average"
+msgstr "Volby investic"
+
+#: views/kreportsview.cpp:1272
+msgid "Investment Moving Average vs Actual"
+msgstr ""
+
+#: views/kreportsview.cpp:1287
+msgid "Taxes"
+msgstr "Daně"
+
+#: views/kreportsview.cpp:1294
+msgid "Tax Transactions by Category"
+msgstr "Transakce daní podle kategorií"
+
+#: views/kreportsview.cpp:1303
+msgid "Tax Transactions by Payee"
+msgstr "Transakce daní podle plátce/příjemce"
+
+#: views/kreportsview.cpp:1312
+msgid "Tax Transactions by Category Last Fiscal Year"
+msgstr "Transakce daní za minulý fiskální rok podle kategorií"
+
+#: views/kreportsview.cpp:1321
+msgid "Tax Transactions by Payee Last Fiscal Year"
+msgstr "Transakce daní za minulý fiskální rok podle plátce/příjemce"
+
+#: views/kreportsview.cpp:1328
+msgid "Budgeting"
+msgstr ""
+
+#: views/kreportsview.cpp:1335
+msgid "Budgeted vs. Actual This Year"
+msgstr "Rozpočet vs. skutečnost v tomto roce"
+
+#: views/kreportsview.cpp:1346
+#, fuzzy
+msgid "Budgeted vs. Actual This Year (YTM)"
+msgstr "Rozpočet vs. skutečnost v tomto roce"
+
+#: views/khomeview.cpp:1383 views/kreportsview.cpp:1361
+msgid "Monthly Budgeted vs. Actual"
+msgstr ""
+
+#: views/kreportsview.cpp:1371
+msgid "Yearly Budgeted vs. Actual"
+msgstr ""
+
+#: views/kreportsview.cpp:1382
+msgid "Monthly Budget"
+msgstr "Měsíční rozpočet"
+
+#: views/kreportsview.cpp:1392
+msgid "Yearly Budget"
+msgstr "Roční rozpočet"
+
+#: views/kreportsview.cpp:1403
+msgid "Yearly Budgeted vs Actual Graph"
+msgstr ""
+
+#: views/kreportsview.cpp:1422
+msgid "Forecast By Month"
+msgstr "Předpověď po měsících"
+
+#: views/kreportsview.cpp:1431
+msgid "Forecast Next Quarter"
+msgstr "Předpověd pro následující čtvrtletí"
+
+#: views/kreportsview.cpp:1443
+msgid "Net Worth Forecast Graph"
+msgstr "Předpověď čistého jmění"
+
+#: dialogs/rc.cpp:126 dialogs/rc.cpp:128 dialogs/rc.cpp:466
+#: views/kreportsview.cpp:1455
+msgid "General Information"
+msgstr "Obecné informace"
+
+#: views/kreportsview.cpp:1462
+msgid "Schedule Information"
+msgstr "Informace o plánech"
+
+#: views/kreportsview.cpp:1471
+msgid "Schedule Summary Information"
+msgstr "Souhrn informací o plánech"
+
+#: views/kreportsview.cpp:1480
+msgid "Account Information"
+msgstr "Informace o účtu"
+
+#: views/kreportsview.cpp:1489
+msgid "Loan Information"
+msgstr "Informace o úvěru"
+
+#: dialogs/rc.cpp:323 views/kmymoneyview.cpp:148 views/kmymoneyview.cpp:150
+msgid "Institutions"
+msgstr "Instituce"
+
+#: dialogs/knewaccountdlg.cpp:98 views/kmymoneyview.cpp:162
+#: views/kmymoneyview.cpp:164 widgets/rc.cpp:4 widgets/rc.cpp:94
+msgid "Accounts"
+msgstr "Účty"
+
+#: views/kmymoneyview.cpp:176
+msgid "Bills & Reminders"
+msgstr "Výběry a připomínky"
+
+#: views/kmymoneyview.cpp:178
+#, fuzzy
+msgid "Scheduled transactions"
+msgstr "Naplánované transakce nalezeny"
+
+#: dialogs/knewaccountdlg.cpp:98 dialogs/rc.cpp:193 views/kmymoneyview.cpp:188
+#: views/kmymoneyview.cpp:190 widgets/rc.cpp:91
+msgid "Categories"
+msgstr "Kategorie"
+
+#: dialogs/kfindtransactiondlg.cpp:212 dialogs/rc.cpp:318
+#: views/kmymoneyview.cpp:199 views/kmymoneyview.cpp:201 widgets/rc.cpp:93
+msgid "Payees"
+msgstr "Plátci"
+
+#: views/kgloballedgerview.cpp:149 views/kmymoneyview.cpp:211
+msgid "Ledgers"
+msgstr "Penežní deníky"
+
+#: views/kmymoneyview.cpp:353
+msgid "Creating transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:367
+msgid "Modifying transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:382
+msgid "Duplicating transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:394
+msgid "Edit the current selected transactions"
+msgstr "Upravit právě vybranou transakci"
+
+#: views/kmymoneyview.cpp:602
+msgid "<b>%1</b> is not a KMyMoney file."
+msgstr "<b>%1</b> není soubor KMyMoney."
+
+#: views/kmymoneyview.cpp:643
+msgid "GPG is not available for decryption of file <b>%1</b>"
+msgstr "Není dostupné GPG k rozšifrování souboru <b>%1</b>"
+
+#: views/kmymoneyview.cpp:721
+msgid ""
+"File <b>%1</b> contains the old binary format used by KMyMoney. Please use "
+"an older version of KMyMoney (0.8.x) that still supports this format to "
+"convert it to the new XML based format."
+msgstr ""
+"Soubor <b>%1</b> obsahuje starý binární formát používaný KMyMoney. Prosím "
+"použijte starší verzi KMyMoney (0.8.x), která jej podporuje pro převedení "
+"na formát založený na XML."
+
+#: views/kmymoneyview.cpp:723
+msgid "File <b>%1</b> contains an unknown file format!"
+msgstr "Soubor <b>%1</b> obsahuje neznámý formát souboru!"
+
+#: views/kmymoneyview.cpp:728
+msgid "Cannot read from file <b>%1</b>!"
+msgstr "Nemůžu číst ze souboru <b>%1</b>!"
+
+#: views/kmymoneyview.cpp:732
+msgid "Cannot load file <b>%1</b>. Reason: %2"
+msgstr "Nemůžu číst ze souboru <b>%1</b>. Důvod: %2"
+
+#: views/kmymoneyview.cpp:742 views/kmymoneyview.cpp:748
+msgid "File <b>%1</b> not found!"
+msgstr "Soubor <b>%1</b> nebyl nalezen!"
+
+#: views/kmymoneyview.cpp:812
+msgid "Can't open database %1\n"
+msgstr "Nemůžu otevřít databázi %1\n"
+
+#: views/kmymoneyview.cpp:844
+msgid "An unrecoverable error occurred while reading the database"
+msgstr "Při čtení databáze nastala chyba ze které se nelze zotavit"
+
+#: views/kmymoneyview.cpp:846 views/kmymoneyview.cpp:1208
+msgid "Database malfunction"
+msgstr "Porucha databáze"
+
+#: views/kmymoneyview.cpp:938
+msgid "Unknown fix level in input file"
+msgstr ""
+
+#: views/kmymoneyview.cpp:984
+msgid ""
+"GPG does not seem to be installed on your system. Please make sure, that GPG "
+"can be found using the standard search path. This time, encryption is "
+"disabled."
+msgstr ""
+"Vypadá to, že nemáte nainstalováno GPG. Prosím ujistěte se, že GPG může být "
+"nalezeno s použitím standardních vyhledávacích cest. Nyní je šifrování "
+"zablokováno."
+
+#: views/kmymoneyview.cpp:984
+msgid "GPG not found"
+msgstr "GPG nebylo nalezeno"
+
+#: views/kmymoneyview.cpp:991
+msgid ""
+"You have selected to encrypt your data also with the KMyMoney recover key, "
+"but the key with id</p><p><center><b>%1</b></center></p>has not been found "
+"in your keyring at this time. Please make sure to import this key into your "
+"keyring. You can find it on the <a href=\"http://kmymoney2.sourceforge.net/"
+"\">KMyMoney web-site</a>. This time your data will not be encrypted with the "
+"KMyMoney recover key."
+msgstr ""
+"Máte vybráno šifrování datového souboru také pomocí KMyMoney obnovovacího "
+"klíče, ale klíč s ID </p><p><center><b>%1</center></p> nebyl nalezen ve vaší "
+"klíčence. Prosím ujistěte se, že máte klíč naimportován ve vaší klíčence. "
+"Můžete jej najít na <a href=\"http://kmymoney2.sourceforge.net/\">webové "
+"stránce KMyMoney</a>. Nyní vaše data nebudou šifrována klíčem obnovy "
+"KMyMoney."
+
+#: views/kmymoneyview.cpp:991 views/kmymoneyview.cpp:1000
+msgid "GPG-Key not found"
+msgstr "GPG klíč nebyl nalezen"
+
+#: views/kmymoneyview.cpp:1000
+msgid ""
+"You have specified to encrypt your data for the user-id</p><p><center><b>%1</"
+"b>.</center></p>Unfortunately, a valid key for this user-id was not found in "
+"your keyring. Please make sure to import a valid key for this user-id. This "
+"time, encryption is disabled."
+msgstr ""
+"Uvedli jste, že si přejete vaše data šifrovat pro uživatele</p><p><center><b>"
+"%1</b>.</center></p> Naneštěstí validní klíč pro zvoleného uživatele nebyl "
+"nalezen ve vašem svazku klíčů. Prosím ujistěte se, že máte naimportován "
+"správný klíč pro tohoto uživatele. Nyní bude šifrování zablokováno."
+
+#: views/kmymoneyview.cpp:1006
+msgid ""
+"You have configured to save your data in encrypted form using GPG. Please be "
+"aware, that this is a brand new feature which is yet untested. Make sure, "
+"you have the necessary understanding that you might loose all your data if "
+"you store it encrypted and cannot decrypt it later on! If unsure, answer "
+"<b>No</b>."
+msgstr ""
+"Máte nastaveno, aby vaše ukládaná data byla šifrována pomocí GPG. Prosím "
+"uvědomte si, že se jedná o zcela novou vlastnost, která zatím nebyla "
+"testována. Ujistěte se, že jste si vědomi toho, že můžeze přijít o všechna "
+"pokud je uložíte šifrovaná a později je nebudete schopni rozšifrovat! Pokud "
+"si nejste jisti odpovězde <b>Ne</b>."
+
+#: views/kmymoneyview.cpp:1008
+msgid "Store GPG encrypted"
+msgstr "Uložit zašifrováno pomocí GPG"
+
+#: views/kmymoneyview.cpp:1038 views/kmymoneyview.cpp:1052
+msgid "Unable to open file '%1' for writing."
+msgstr "Nebylo možné otevřít soubor \"%1\" pro zápis."
+
+#: views/kmymoneyview.cpp:1065 views/kmymoneyview.cpp:1074
+msgid "Failure while writing to '%1'"
+msgstr "Chyba při zápisu do souboru \"%1\""
+
+#: views/kmymoneyview.cpp:1086 views/kmymoneyview.cpp:1181
+msgid "Tried to access a file when it's not open"
+msgstr "Pokus o přístup do souboru, když není otevřen"
+
+#: views/kmymoneyview.cpp:1092
+msgid ""
+"Since this version of KMyMoney only writes data files in its new format, "
+"files written with this version cannot be read by KMyMoney version 0.4. If "
+"you still want to use older versions of KMyMoney with your data files, "
+"please make sure you keep a backup-file of your finance data. If you want to "
+"abort this operation, please press Cancel now"
+msgstr ""
+"Od této verze KMyMoney zapisuje data jen v novém formátu. Data zapsaná "
+"pomocí této verze nemohou být přečtena v KMyMoney verze 0.4, pokud si "
+"přejete stále používat starší verzi KMyMoney s vašim datovým souborem, "
+"prosím ujistěte se, že máte vaše finanční data zálohována. Pokud si přejete "
+"tuto operaci zrušit klikněte nyní na \"Zrušit\"."
+
+#: views/kmymoneyview.cpp:1122
+msgid "Malformed URL '%1'"
+msgstr "Neplatná URL \"%1\""
+
+#: views/kmymoneyview.cpp:1192
+msgid ""
+"Database contains data which must be removed before using SaveAs.\n"
+"Do you wish to continue?"
+msgstr ""
+"Databáze obsahuje data, které musí být před uložením odstarněna.\n"
+"Přejete si pokračovat?"
+
+#: views/kmymoneyview.cpp:1205
+msgid ""
+"An unrecoverable error occurred while writing to the database.\n"
+"It may well be corrupt."
+msgstr ""
+"Během zápisu do databáze nastala chyba ze které se nelze zotavit.\n"
+"Databáze může být poškozena."
+
+#: views/kmymoneyview.cpp:1215
+msgid ""
+"Can't open or create database %1\n"
+"Retry SaveAsDatabase and click Help for further info"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1354
+msgid "Afghanistan Afghani"
+msgstr "Afghánský afghání"
+
+#: views/kmymoneyview.cpp:1355
+msgid "Albanian Lek"
+msgstr "Albánský lek"
+
+#: views/kmymoneyview.cpp:1356
+msgid "Netherland Antillian Guilder"
+msgstr "Nizozemský gulden"
+
+#: views/kmymoneyview.cpp:1357
+msgid "Algerian Dinar"
+msgstr "Alžírský dinár"
+
+#: views/kmymoneyview.cpp:1358
+msgid "Andorran Franc"
+msgstr "Andorský frank"
+
+#: views/kmymoneyview.cpp:1359
+msgid "Andorran Peseta"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1360
+msgid "Angolan New Kwanza"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1361
+msgid "Argentine Peso"
+msgstr "Argentinské peso"
+
+#: views/kmymoneyview.cpp:1362
+msgid "Aruban Florin"
+msgstr "Arubský florin"
+
+#: views/kmymoneyview.cpp:1363
+msgid "Australian Dollar"
+msgstr "Australský dolar"
+
+#: views/kmymoneyview.cpp:1364
+msgid "Azerbaijani Manat"
+msgstr "Ázerbájdžánský manat"
+
+#: views/kmymoneyview.cpp:1365
+msgid "Bahamian Dollar"
+msgstr "Bahamský dolar"
+
+#: views/kmymoneyview.cpp:1366
+msgid "Bahraini Dinar"
+msgstr "Bahrajnský dinár"
+
+#: views/kmymoneyview.cpp:1367
+msgid "Bangladeshi Taka"
+msgstr "Bangladéšská taka"
+
+#: views/kmymoneyview.cpp:1368
+msgid "Barbados Dollar"
+msgstr "Barbadoský dolar"
+
+#: views/kmymoneyview.cpp:1369
+msgid "Belarussian Ruble"
+msgstr "Běloruská ruble"
+
+#: views/kmymoneyview.cpp:1370
+msgid "Belize Dollar"
+msgstr "Belizský dolar"
+
+#: views/kmymoneyview.cpp:1371
+msgid "Bermudian Dollar"
+msgstr "Bermudský dolar"
+
+#: views/kmymoneyview.cpp:1372
+msgid "Bhutan Ngultrum"
+msgstr "Bhútánský ngultrum"
+
+#: views/kmymoneyview.cpp:1373
+msgid "Bolivian Boliviano"
+msgstr "Bolivijský boliviano"
+
+#: views/kmymoneyview.cpp:1374
+msgid "Bosnian Convertible Mark"
+msgstr "Bosenská konvertibilní marka"
+
+#: views/kmymoneyview.cpp:1375
+msgid "Botswana Pula"
+msgstr "Botswanská pula"
+
+#: views/kmymoneyview.cpp:1376
+msgid "Brazilian Real"
+msgstr "Brazilský real"
+
+#: views/kmymoneyview.cpp:1377
+msgid "British Pound"
+msgstr "Britská libra"
+
+#: views/kmymoneyview.cpp:1378
+msgid "Brunei Dollar"
+msgstr "Bruneiský dolar"
+
+#: views/kmymoneyview.cpp:1379
+msgid "Bulgarian Lev"
+msgstr "Bulharská leva"
+
+#: views/kmymoneyview.cpp:1380
+msgid "Burundi Franc"
+msgstr "Burundský frank"
+
+#: views/kmymoneyview.cpp:1381
+msgid "CFA Franc BEAC"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1382
+msgid "CFA Franc BCEAO"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1383
+msgid "CFP Franc Pacifique"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1384
+msgid "Cambodia Riel"
+msgstr "Kambodžský riel"
+
+#: views/kmymoneyview.cpp:1385
+msgid "Canadian Dollar"
+msgstr "Kanadský dolar"
+
+#: views/kmymoneyview.cpp:1386
+msgid "Cape Verde Escudo"
+msgstr "Kapverdské escudo"
+
+#: views/kmymoneyview.cpp:1387
+msgid "Cayman Islands Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1388
+msgid "Chilean Peso"
+msgstr "Chilské peso"
+
+#: views/kmymoneyview.cpp:1389
+msgid "Chinese Yuan Renminbi"
+msgstr "Čínský jüan"
+
+#: views/kmymoneyview.cpp:1390
+msgid "Colombian Peso"
+msgstr "Kolumbíjské peso"
+
+#: views/kmymoneyview.cpp:1391
+msgid "Comoros Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1392
+msgid "Costa Rican Colon"
+msgstr "Kostarický colón"
+
+#: views/kmymoneyview.cpp:1393
+msgid "Croatian Kuna"
+msgstr "Řecká kuna"
+
+#: views/kmymoneyview.cpp:1394
+msgid "Cuban Peso"
+msgstr "Kubánské peso"
+
+#: views/kmymoneyview.cpp:1395
+msgid "Czech Koruna"
+msgstr "Česká koruna"
+
+#: views/kmymoneyview.cpp:1396
+msgid "Danish Krone"
+msgstr "Dánská koruna"
+
+#: views/kmymoneyview.cpp:1397
+msgid "Djibouti Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1398
+msgid "Dominican Peso"
+msgstr "Dominikánské peso"
+
+#: views/kmymoneyview.cpp:1399
+msgid "East Caribbean Dollar"
+msgstr "Východokaribský dolar"
+
+#: views/kmymoneyview.cpp:1400
+msgid "Egyptian Pound"
+msgstr "Egyptská libra"
+
+#: views/kmymoneyview.cpp:1401
+msgid "El Salvador Colon"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1402
+msgid "Eritrean Nakfa"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1403
+msgid "Estonian Kroon"
+msgstr "Estonská koruna"
+
+#: views/kmymoneyview.cpp:1404
+msgid "Ethiopian Birr"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1405
+msgid "Euro"
+msgstr "Euro"
+
+#: views/kmymoneyview.cpp:1406
+msgid "Falkland Islands Pound"
+msgstr "Falklandská libra"
+
+#: views/kmymoneyview.cpp:1407
+msgid "Fiji Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1408
+msgid "Gambian Dalasi"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1409
+msgid "Georgian Lari"
+msgstr "Gruzínské lari"
+
+#: views/kmymoneyview.cpp:1410
+msgid "Ghanaian Cedi"
+msgstr "Ghanský cedi"
+
+#: views/kmymoneyview.cpp:1411
+msgid "Gibraltar Pound"
+msgstr "Gibraltarská libra"
+
+#: views/kmymoneyview.cpp:1412
+msgid "Guatemalan Quetzal"
+msgstr "Guatemalský quetzal"
+
+#: views/kmymoneyview.cpp:1413
+msgid "Guinea-Bissau Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1414
+msgid "Guyanan Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1415
+msgid "Haitian Gourde"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1416
+msgid "Honduran Lempira"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1417
+msgid "Hong Kong Dollar"
+msgstr "Hong Kongský dolar"
+
+#: views/kmymoneyview.cpp:1418
+msgid "Hungarian Forint"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1419
+msgid "Iceland Krona"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1420
+msgid "Indian Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1421
+msgid "Indonesian Rupiah"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1422
+msgid "Iranian Rial"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1423
+msgid "Iraqi Dinar"
+msgstr "Irácký dinár"
+
+#: views/kmymoneyview.cpp:1424
+msgid "Israeli New Shekel"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1425
+msgid "Jamaican Dollar"
+msgstr "Jamajský dolar"
+
+#: views/kmymoneyview.cpp:1426
+msgid "Japanese Yen"
+msgstr "Japonský Yen"
+
+#: views/kmymoneyview.cpp:1427
+msgid "Jordanian Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1428
+msgid "Kazakhstan Tenge"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1429
+msgid "Kenyan Shilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1430
+msgid "Kuwaiti Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1431
+msgid "Kyrgyzstan Som"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1432
+msgid "Laos Kip"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1433
+msgid "Latvian Lats"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1434
+msgid "Lebanese Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1435
+msgid "Lesotho Loti"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1436
+msgid "Liberian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1437
+msgid "Libyan Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1438
+msgid "Lithuanian Litas"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1439
+msgid "Macau Pataca"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1440
+msgid "Macedonian Denar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1441
+msgid "Malagasy Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1442
+msgid "Malawi Kwacha"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1443
+msgid "Malaysian Ringgit"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1444
+msgid "Maldive Rufiyaa"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1445
+msgid "Mali Republic Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1446
+msgid "Mauritanian Ouguiya"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1447
+msgid "Mauritius Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1448
+msgid "Mexican Peso"
+msgstr "Mexické peso"
+
+#: views/kmymoneyview.cpp:1449
+msgid "Moldavian Leu"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1450
+msgid "Mongolian Tugrik"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1451
+msgid "Moroccan Dirham"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1452
+msgid "Mozambique Metical"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1453
+msgid "Myanmar Kyat"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1454
+msgid "Namibian Dollar"
+msgstr "Nimibský dolar"
+
+#: views/kmymoneyview.cpp:1455
+msgid "Nepalese Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1456
+msgid "New Zealand Dollar"
+msgstr "Novozélandský dolar"
+
+#: views/kmymoneyview.cpp:1457
+msgid "Nicaraguan Cordoba Oro"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1458
+msgid "Nigerian Naira"
+msgstr "Nigerijská niara"
+
+#: views/kmymoneyview.cpp:1459
+msgid "North Korean Won"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1460
+msgid "Norwegian Kroner"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1461
+msgid "Omani Rial"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1462
+msgid "Pakistan Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1463
+msgid "Panamanian Balboa"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1464
+msgid "Papua New Guinea Kina"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1465
+msgid "Paraguay Guarani"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1466
+msgid "Peruvian Nuevo Sol"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1467
+msgid "Philippine Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1468
+msgid "Polish Zloty"
+msgstr "Polský zloty"
+
+#: views/kmymoneyview.cpp:1469
+msgid "Qatari Rial"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1470
+msgid "Romanian Leu (new)"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1471
+msgid "Russian Ruble"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1472
+msgid "Rwanda Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1473
+msgid "Samoan Tala"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1474
+msgid "Sao Tome and Principe Dobra"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1475
+msgid "Saudi Riyal"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1476
+msgid "Seychelles Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1477
+msgid "Sierra Leone Leone"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1478
+msgid "Singapore Dollar"
+msgstr "Singapůrský dolar"
+
+#: views/kmymoneyview.cpp:1481
+msgid "Solomon Islands Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1482
+msgid "Somali Shilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1483
+msgid "South African Rand"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1484
+msgid "South Korean Won"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1485
+msgid "Sri Lanka Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1486
+msgid "St. Helena Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1487
+msgid "Sudanese Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1488
+msgid "Suriname Guilder"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1489
+msgid "Swaziland Lilangeni"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1490
+msgid "Swedish Krona"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1491
+msgid "Swiss Franc"
+msgstr "Švýcarský frank"
+
+#: views/kmymoneyview.cpp:1492
+msgid "Syrian Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1493
+msgid "Taiwan Dollar"
+msgstr "Taiwanský dolar"
+
+#: views/kmymoneyview.cpp:1494
+msgid "Tajikistan Somani"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1495
+msgid "Tanzanian Shilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1496
+msgid "Thai Baht"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1497
+msgid "Tongan Pa'anga"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1498
+msgid "Trinidad and Tobago Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1499
+msgid "Tunisian Dinar"
+msgstr "Tuniský dinár"
+
+#: views/kmymoneyview.cpp:1500
+msgid "Turkish Lira (new)"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1501
+msgid "Turkmenistan Manat"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1502
+msgid "US Dollar"
+msgstr "Americký dolar"
+
+#: views/kmymoneyview.cpp:1503
+msgid "Uganda Shilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1504
+msgid "Ukraine Hryvnia"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1505
+msgid "United Arab Emirates Dirham"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1506
+msgid "Uruguayan Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1507
+msgid "Uzbekistani Sum"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1508
+msgid "Vanuatu Vatu"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1509
+msgid "Venezuelan Bolivar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1510
+msgid "Vietnamese Dong"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1511
+msgid "Yugoslav Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1512
+msgid "Zambian Kwacha"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1513
+msgid "Zimbabwe Dollar"
+msgstr "Zimbabwský dolar"
+
+#: views/kmymoneyview.cpp:1515
+msgid "Gold"
+msgstr "Zlato"
+
+#: views/kmymoneyview.cpp:1516
+msgid "Palladium"
+msgstr "Palladium"
+
+#: views/kmymoneyview.cpp:1517
+msgid "Platinum"
+msgstr "Platina"
+
+#: views/kmymoneyview.cpp:1518
+msgid "Silver"
+msgstr "Stříbro"
+
+#: views/kmymoneyview.cpp:1551
+msgid "Austrian Schilling"
+msgstr "Rakouská schiling"
+
+#: views/kmymoneyview.cpp:1552
+msgid "German Mark"
+msgstr "Německá marka"
+
+#: views/kmymoneyview.cpp:1553
+msgid "French Franc"
+msgstr "Francouzský frank"
+
+#: views/kmymoneyview.cpp:1554
+msgid "Italian Lira"
+msgstr "Italská lira"
+
+#: views/kmymoneyview.cpp:1555
+msgid "Spanish Peseta"
+msgstr "Španělská peseta"
+
+#: views/kmymoneyview.cpp:1556
+msgid "Dutch Guilder"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1557
+msgid "Belgian Franc"
+msgstr "Belgický frank"
+
+#: views/kmymoneyview.cpp:1558
+msgid "Luxembourg Franc"
+msgstr "Lucemburský frank"
+
+#: views/kmymoneyview.cpp:1559
+msgid "Portuguese Escudo"
+msgstr "Portugalské escudo"
+
+#: views/kmymoneyview.cpp:1560
+msgid "Irish Pound"
+msgstr "Irská libra"
+
+#: views/kmymoneyview.cpp:1561
+msgid "Finnish Markka"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1562
+msgid "Greek Drachma"
+msgstr "Řecká drachma"
+
+#: views/kmymoneyview.cpp:1564
+msgid "Romanian Leu"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1566
+msgid "Russian Ruble (old)"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1568
+msgid "Slovenian Tolar"
+msgstr "Slovinský tolar"
+
+#: views/kmymoneyview.cpp:1571
+msgid "Turkish Lira"
+msgstr "Turecká lira"
+
+#: views/kmymoneyview.cpp:1574
+msgid "Maltese Lira"
+msgstr "Maltézská lira"
+
+#: views/kmymoneyview.cpp:1575
+msgid "Cyprus Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1578
+msgid "Slovak Koruna"
+msgstr "Slovenská koruna"
+
+#: views/kmymoneyview.cpp:1888
+msgid ""
+"The account \"%1\" was previously created as loan account but some "
+"information is missing. The new loan wizard will be started to collect all "
+"relevant information. Please use a KMyMoney version >= 0.8.7 and < 0.9 to "
+"correct the problem."
+msgstr ""
+"Účet \"%1\" byl v minulosti vytvořen jako úvěrový účet, ale scházejí nějaké "
+"informace. Bude spuštěn nový průvodce úvěrovým účtem, který sezbírá všechny "
+"relevantní informace. Prosím použihte KMyMoney verze >= 0.8.7 a < 0.9 pro "
+"nápravu problému."
+
+#: views/kmymoneyview.cpp:1892
+msgid "Account problem"
+msgstr "Problém s účtem"
+
+#: views/kmymoneyview.cpp:1941
+msgid "Unable to add schedule: "
+msgstr "Nemůžu přidat finanční plán: "
+
+#: views/kmymoneyview.cpp:1970
+msgid "Fix transactions"
+msgstr "Opravit transakci"
+
+#: views/kaccountsview.cpp:522 views/kinstitutionsview.cpp:300
+msgid "Net Worth: "
+msgstr "Čisté jmění:"
+
+#: dialogs/rc.cpp:108 dialogs/rc.cpp:163 dialogs/rc.cpp:250 dialogs/rc.cpp:755
+#: dialogs/rc.cpp:830 views/kinvestmentview.cpp:77 widgets/register.cpp:572
+msgid "Quantity"
+msgstr "Kvantita"
+
+#: views/kscheduledlistitem.cpp:137
+msgid "Finished"
+msgstr "Dokončeno"
+
+#: views/kbudgetview.cpp:109
+msgid "Creates a new budget"
+msgstr "Vytvořit nový rozpočet"
+
+#: views/kbudgetview.cpp:110
+msgid "Use this to create a new empty budget."
+msgstr "Použijte toto tlačítko k vytvoření nového rozpočtu."
+
+#: views/kbudgetview.cpp:116
+msgid "Rename the current selected budget"
+msgstr "Přejmenovat právě vybraný rozpočet"
+
+#: views/kbudgetview.cpp:117
+msgid "Use this to start renaming the selected budget."
+msgstr "Použijte toto tlačítko pro přejmenování vybraného rozpočtu."
+
+#: views/kbudgetview.cpp:123
+msgid "Delete the current selected budget"
+msgstr "Odstranit právě vybraný rozpočet"
+
+#: views/kbudgetview.cpp:124
+msgid "Use this to delete the selected budget."
+msgstr "Použijte toto tlačítko pro odstranění vybraného rozpočtu."
+
+#: views/kbudgetview.cpp:130
+msgid "Accepts the entered values and stores the budget"
+msgstr "Přijmout zadané hodnoty a uložit rozpočet"
+
+#: views/kbudgetview.cpp:131
+msgid "Use this to store the modified data."
+msgstr "Použijte toto tlačítko k uložení upravených informací."
+
+#: views/kbudgetview.cpp:137
+msgid "Revert budget to last saved state"
+msgstr "Vrátit rozpočet na poslední uložený stav"
+
+#: views/kbudgetview.cpp:138
+msgid "Use this to discard the modified data."
+msgstr "Použijte toto tlačítko ke znehodnocení upravených informací."
+
+#: views/kbudgetview.cpp:489
+msgid "Do you want to save the changes for <b>%1</b>"
+msgstr "Přejete si uložit změny pro <b>%1</b>"
+
+#: views/kbudgetview.cpp:610
+msgid ""
+"A budget with the name '%1' already exists. It is not advisable to have "
+"multiple budgets with the same identification name. Are you sure you would "
+"like to rename the budget?"
+msgstr ""
+
+#: views/kbudgetview.cpp:635 views/kbudgetview.cpp:750
+msgid "Unable to modify budget"
+msgstr ""
+
+#: views/kbudgetview.cpp:736
+msgid "Unable to reset budget"
+msgstr ""
+
+#: views/rc.cpp:1
+msgid "List"
+msgstr ""
+
+#: views/rc.cpp:2 views/rc.cpp:20
+msgid "Collapse all accounts in the list"
+msgstr ""
+
+#: views/rc.cpp:3 views/rc.cpp:21
+msgid "Expand all accounts in the list"
+msgstr ""
+
+#: views/rc.cpp:4
+msgid "Icons"
+msgstr ""
+
+#: views/rc.cpp:5 views/rc.cpp:22
+msgid "Note: Unused categories are not shown as selected by settings."
+msgstr ""
+
+#: views/rc.cpp:6 views/rc.cpp:23 views/rc.cpp:54
+msgid "Total Profits:"
+msgstr ""
+
+#: views/rc.cpp:7
+msgid "Your budgets"
+msgstr "Vaše rozpočty"
+
+#: dialogs/rc.cpp:340 dialogs/rc.cpp:841 dialogs/settings/rc.cpp:124
+#: views/rc.cpp:8 widgets/rc.cpp:48 widgets/rc.cpp:150
+msgid "New"
+msgstr "Nový"
+
+#: views/rc.cpp:9
+msgid "Ren"
+msgstr ""
+
+#: views/rc.cpp:10
+msgid "Del"
+msgstr ""
+
+#: views/rc.cpp:11
+msgid "Res"
+msgstr ""
+
+#: views/rc.cpp:12
+msgid "Upd"
+msgstr ""
+
+#: views/rc.cpp:15
+msgid "Hide unused budget categories"
+msgstr "Skrýt nepoužité rozpočtové kategorie"
+
+#: views/rc.cpp:16
+msgid "Assignments"
+msgstr ""
+
+#: views/rc.cpp:19
+msgid "Include subaccounts"
+msgstr "Včetně podúčtů"
+
+#: dialogs/settings/rc.cpp:23 views/rc.cpp:24
+msgid "Forecast Settings"
+msgstr "Nastavení předpovědí"
+
+#: views/rc.cpp:25
+msgid "Days to Forecast:"
+msgstr ""
+
+#: views/rc.cpp:26
+msgid "Days of Accounts Cycle:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:25 views/rc.cpp:27
+msgid "Day of Month to start Forecast:"
+msgstr ""
+
+#: views/rc.cpp:28
+msgid "Historic Cycles:"
+msgstr ""
+
+#: views/rc.cpp:29
+#, fuzzy
+msgid "Chart Detail:"
+msgstr "Podrobnosti"
+
+#: views/rc.cpp:30 widgets/kmymoneyaccountselector.cpp:64 widgets/rc.cpp:65
+msgid "All"
+msgstr "Vše"
+
+#: views/rc.cpp:31 widgets/rc.cpp:66
+msgid "Top-Level"
+msgstr "Vrchní úroveň"
+
+#: views/rc.cpp:32 widgets/rc.cpp:67
+msgid "Groups"
+msgstr "Skupiny"
+
+#: views/rc.cpp:33 widgets/rc.cpp:68
+msgid "Totals"
+msgstr ""
+
+#: views/rc.cpp:34
+#, fuzzy
+msgid "<p>Choose what level of detail to show on the chart.</p>"
+msgstr "<p>Vyberte jméno pro tento výkaz.</p>"
+
+#: views/rc.cpp:35
+msgid "Current Forecast Method:"
+msgstr ""
+
+#: views/rc.cpp:36
+msgid "method"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:32 views/rc.cpp:37
+msgid "History Forecast Method"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:33 views/rc.cpp:38
+msgid "Simple Moving Average"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:34 views/rc.cpp:39
+msgid "Weighted Moving Average"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:35 views/rc.cpp:40
+msgid "Linear Regression"
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:315 dialogs/rc.cpp:628 dialogs/rc.cpp:647
+#: views/rc.cpp:43
+msgid "Summary"
+msgstr "Souhrn"
+
+#: views/rc.cpp:45
+msgid "0 days"
+msgstr "0 dní"
+
+#: views/rc.cpp:46
+msgid "30 days"
+msgstr "30 dní"
+
+#: views/rc.cpp:47
+msgid "60 days"
+msgstr "60 dní"
+
+#: views/rc.cpp:48
+msgid "90 days"
+msgstr "90 dní"
+
+#: views/rc.cpp:49
+msgid "New Item"
+msgstr "Další položka"
+
+#: views/rc.cpp:50 widgets/rc.cpp:64
+msgid "Detail"
+msgstr "Podrobnosti"
+
+#: views/rc.cpp:51
+msgid "Advanced"
+msgstr ""
+
+#: views/rc.cpp:52
+msgid "Budget Forecast"
+msgstr "Předpověď rozpočtu"
+
+#: views/rc.cpp:55
+msgid "Investment Summary"
+msgstr "Shrnutí investic"
+
+#: views/rc.cpp:56
+msgid "Select Account:"
+msgstr ""
+
+#: views/rc.cpp:57
+msgid ""
+"Summary of the equities contained in this account, showing your holdings and "
+"their most recent price."
+msgstr ""
+
+#: views/rc.cpp:60 widgets/register.cpp:564
+msgid "No."
+msgstr ""
+
+#: views/rc.cpp:64
+msgid "Balance: "
+msgstr "Bilance: "
+
+#: views/rc.cpp:65
+msgid "Address"
+msgstr ""
+
+#: views/rc.cpp:66
+msgid "Payee Information"
+msgstr ""
+
+#: views/rc.cpp:67
+msgid "E-Mail:"
+msgstr ""
+
+#: dialogs/rc.cpp:393 views/rc.cpp:69
+msgid "Telephone/Fax:"
+msgstr ""
+
+#: views/rc.cpp:70
+msgid "Notes"
+msgstr ""
+
+#: views/rc.cpp:71
+msgid "Address:"
+msgstr ""
+
+#: views/rc.cpp:72
+msgid "Matching"
+msgstr ""
+
+#: views/rc.cpp:73
+msgid "Transaction Matching"
+msgstr ""
+
+#: views/rc.cpp:74
+msgid "No matching"
+msgstr ""
+
+#: views/rc.cpp:75
+msgid "Match on Payee name"
+msgstr ""
+
+#: views/rc.cpp:76
+msgid "Match on a name listed below"
+msgstr ""
+
+#: views/rc.cpp:77
+msgid "List of matching names"
+msgstr ""
+
+#: views/rc.cpp:78
+msgid ""
+"This list contains the names that will match this payee if a transaction is "
+"imported from an external source. Keep in mind, that you can specify regular "
+"expressions here."
+msgstr ""
+
+#: views/rc.cpp:79
+msgid "Ignore Case"
+msgstr ""
+
+#: views/rc.cpp:80
+#, fuzzy
+msgid "Default Account"
+msgstr "Vyberte účet"
+
+#: views/rc.cpp:81
+#, fuzzy
+msgid ""
+"Use the default account for\n"
+"new transactions with this payee"
+msgstr "Vybrat transakce bez plátců/příjemců"
+
+#: views/rc.cpp:82
+#, fuzzy
+msgid "Default category:"
+msgstr "Vytvořit kategorii"
+
+#: views/rc.cpp:83
+#, fuzzy
+msgid "Suggest a category"
+msgstr "Jen kategorii"
+
+#: views/rc.cpp:85
+#, fuzzy
+msgid "New Scheduled transaction..."
+msgstr "Naplánované transakce nalezeny"
+
+#: views/rc.cpp:86
+msgid "Filter Accounts"
+msgstr ""
+
+#: views/rc.cpp:87
+msgid "List View"
+msgstr "Stromový pohled"
+
+#: views/rc.cpp:88
+msgid "Calendar View"
+msgstr "Kalendářový pohled"
+
+#: views/kinstitutionsview.cpp:43
+msgid "Institution/Account"
+msgstr "Instituce/Účet"
+
+#: views/kinstitutionsview.cpp:157
+msgid "Accounts with no institution assigned"
+msgstr "Účty bez přiřazené instituce"
+
+#: views/kscheduledview.cpp:70
+msgid "Type/Name"
+msgstr "Druh/Jméno"
+
+#: views/kscheduledview.cpp:75
+msgid "Frequency"
+msgstr "Pravidelnost (frekvence)"
+
+#: views/kscheduledview.cpp:157
+msgid "Unable to load accounts: "
+msgstr ""
+
+#: views/kscheduledview.cpp:171 views/kscheduledview.cpp:429
+#: views/kscheduledview.cpp:445 widgets/kmymoneyscheduledcalendar.cpp:46
+msgid "Bills"
+msgstr "Výběry"
+
+#: dialogs/rc.cpp:232 dialogs/rc.cpp:706 views/kscheduledview.cpp:172
+#: views/kscheduledview.cpp:431 views/kscheduledview.cpp:447
+#: widgets/kmymoneyscheduledcalendar.cpp:47
+msgid "Deposits"
+msgstr "Vklady"
+
+#: views/kscheduledview.cpp:173 views/kscheduledview.cpp:435
+#: views/kscheduledview.cpp:451
+msgid "Loans"
+msgstr "Půjčky"
+
+#: views/kscheduledview.cpp:357
+msgid "Error activating context menu"
+msgstr ""
+
+#: views/kscheduledview.cpp:385
+msgid "Error executing item"
+msgstr ""
+
+#: views/kscheduledview.cpp:419
+msgid "Unable to filter account"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:508
+msgid "Statement Details"
+msgstr "Podrobnosti o výpisu"
+
+#: views/kgloballedgerview.cpp:512
+msgid "Statement Deposit Details"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:513
+msgid "Statement Payment Details"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:642
+msgid "%1 deposits (%3), %2 payments (%4)"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:649
+msgid "%1 payments (%2)"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:653
+msgid "%1 deposits (%2)"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:721
+#, c-format
+msgid "Statement: %1"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:722 views/kgloballedgerview.cpp:736
+#, c-format
+msgid "Cleared: %1"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:723
+#, c-format
+msgid "Difference: %1"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:730
+#, c-format
+msgid "Last reconciled: %1"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:732
+msgid "Never reconciled"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:772
+msgid "Investment value: %1%2"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1040
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to continue to edit the transactions anyway?"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1051
+msgid ""
+"At least one split of the selected transactions has been frozen. Editing the "
+"transactions is therefore prohibited."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1053
+msgid "Transaction already frozen"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1058
+msgid ""
+"At least one split of the selected transaction references an account that "
+"has been closed. Editing the transactions is therefore prohibited."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1060
+msgid "Account closed"
+msgstr "Účet je uzavřen"
+
+#: views/kgloballedgerview.cpp:1349
+msgid "Cannot create transactions when no account is selected."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1354
+msgid "Cannot create transactions in the context of a category."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1358
+msgid "Cannot create transactions in a closed account."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1370
+msgid "Cannot process transaction with focus if it is not selected."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1400
+msgid "Cannot edit transactions with frozen splits."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1411
+msgid "Cannot edit transactions in the context of a category."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1430
+msgid ""
+"Cannot edit investment transactions and non-investment transactions together."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1438
+msgid "Cannot edit multiple split transactions at once."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1448
+msgid "Cannot edit investment transactions in the context of this account."
+msgstr ""
+
+#: views/kforecastview.cpp:164
+msgid "Scheduled"
+msgstr "Naplánováno"
+
+#: views/kforecastview.cpp:169
+msgid "History"
+msgstr "Historie"
+
+#: views/kforecastview.cpp:296
+msgid "The balance of %2 is below the minimum balance %3 today."
+msgstr ""
+
+#: views/kforecastview.cpp:301 views/khomeview.cpp:1043
+msgid "The balance of %1 will drop below the minimum balance %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:318 views/khomeview.cpp:1059
+msgid "The balance of %1 is below %2 today."
+msgstr ""
+
+#: views/kforecastview.cpp:323 views/khomeview.cpp:1064
+msgid "The balance of %1 is above %2 today."
+msgstr ""
+
+#: views/kforecastview.cpp:330 views/khomeview.cpp:1070
+msgid "The balance of %1 will drop below %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:335 views/khomeview.cpp:1075
+msgid "The balance of %1 will raise above %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:348
+msgid "The account %1 is decreasing %2 per cycle."
+msgstr ""
+
+#: views/kforecastview.cpp:404 widgets/kmymoneyaccounttreeforecast.cpp:114
+#, c-format
+msgid "Min Bal %1"
+msgstr ""
+
+#: views/kforecastview.cpp:406 widgets/kmymoneyaccounttreeforecast.cpp:116
+#, c-format
+msgid "Min Date %1"
+msgstr ""
+
+#: views/kforecastview.cpp:409 widgets/kmymoneyaccounttreeforecast.cpp:119
+#, c-format
+msgid "Max Bal %1"
+msgstr ""
+
+#: views/kforecastview.cpp:411 widgets/kmymoneyaccounttreeforecast.cpp:121
+#, c-format
+msgid "Max Date %1"
+msgstr ""
+
+#: views/kforecastview.cpp:413 widgets/kmymoneyaccounttreeforecast.cpp:123
+msgid "Average"
+msgstr "Průměr"
+
+#: views/kforecastview.cpp:649 views/khomeview.cpp:268 views/khomeview.cpp:275
+msgid "Networth Forecast"
+msgstr "Předpověď čistého jmění"
+
+#: views/khomeview.cpp:203
+msgid "Your Financial Summary"
+msgstr "Shrnutí vašich financí"
+
+#: views/khomeview.cpp:218
+msgid "Preferred Accounts"
+msgstr "Upřednostňované účty"
+
+#: views/khomeview.cpp:225 views/khomeview.cpp:227
+msgid "Payment Accounts"
+msgstr "Platební účty"
+
+#: views/khomeview.cpp:256
+msgid "Show KMyMoney welcome page"
+msgstr "Zobraz mou KMyMoney uvítací stránku"
+
+#: views/khomeview.cpp:409
+msgid "Overdue payments"
+msgstr ""
+
+#: views/khomeview.cpp:424 views/khomeview.cpp:497 views/khomeview.cpp:531
+msgid "Balance after"
+msgstr "Bilance poté"
+
+#: views/khomeview.cpp:482
+msgid "Today's payments"
+msgstr "Dnešní platby"
+
+#: views/khomeview.cpp:516
+msgid "Future payments"
+msgstr "Budoucí platby"
+
+#: views/khomeview.cpp:585
+#, fuzzy
+msgid "Less..."
+msgstr "Méně..."
+
+#: views/khomeview.cpp:587
+#, fuzzy
+msgid "More..."
+msgstr "Více..."
+
+#: views/khomeview.cpp:622
+msgid "Enter schedule"
+msgstr "Vložit finanční plán"
+
+#: views/khomeview.cpp:624
+msgid "Skip schedule"
+msgstr "Přeskočit finanční plán"
+
+#: views/khomeview.cpp:627
+msgid "Edit schedule"
+msgstr "Upravit finanční plán"
+
+#: views/khomeview.cpp:631
+msgid " (%1 payments)"
+msgstr " (%1 plateb)"
+
+#: views/khomeview.cpp:771
+msgid "To Minimum Balance / Maximum Credit"
+msgstr ""
+
+#: views/khomeview.cpp:964
+msgid "%1 Day Forecast"
+msgstr "%1 denní předpověď"
+
+#: views/khomeview.cpp:973 widgets/kmymoneyaccounttreeforecast.cpp:67
+msgid "%1 days"
+msgstr "%1 dní"
+
+#: views/khomeview.cpp:1039
+msgid "The balance of %1 is below the minimum balance %2 today."
+msgstr ""
+
+#: views/khomeview.cpp:1175
+msgid ""
+"Before KMyMoney can give you detailed information about your financial "
+"status, you need to create at least one account. Until then, KMyMoney shows "
+"the welcome page instead."
+msgstr ""
+
+#: views/khomeview.cpp:1258
+#, fuzzy
+msgid "Assets and Liabilities Summary"
+msgstr "Aktiva a pasiva"
+
+#: views/khomeview.cpp:1262
+msgid "Asset Accounts"
+msgstr "Účty aktiv"
+
+#: views/khomeview.cpp:1270
+msgid "Liability Accounts"
+msgstr "Účty pasiv"
+
+#: views/khomeview.cpp:1348
+msgid "Total Assets"
+msgstr "Celková aktiva"
+
+#: views/khomeview.cpp:1354
+msgid "Total Liabilities"
+msgstr "Celková pasiva"
+
+#: views/khomeview.cpp:1399
+#, fuzzy
+msgid "Current Month Summary"
+msgstr "Současný měsíc"
+
+#: views/khomeview.cpp:1403 views/khomeview.cpp:1440
+msgid "Budgeted"
+msgstr ""
+
+#: views/khomeview.cpp:1433
+msgid "Budget Overruns"
+msgstr ""
+
+#: views/khomeview.cpp:1502
+msgid "No Budget Categories have been overrun"
+msgstr ""
+
+#: views/khomeview.cpp:1801
+msgid "Cash Flow Summary"
+msgstr ""
+
+#: views/khomeview.cpp:1808
+#, fuzzy
+msgid "Income and Expenses of Current Month"
+msgstr "Příjmy a výdaje tento měsíc"
+
+#: views/khomeview.cpp:1816
+#, fuzzy
+msgid "Scheduled Income"
+msgstr "Informace o plánech"
+
+#: views/khomeview.cpp:1819
+msgid "Expenses"
+msgstr "Výdaje"
+
+#: views/khomeview.cpp:1822
+#, fuzzy
+msgid "Scheduled Expenses"
+msgstr "Volby plánu"
+
+#: views/khomeview.cpp:1850
+#, fuzzy
+msgid "Liquid Assets and Liabilities"
+msgstr "Aktiva a pasiva"
+
+#: views/khomeview.cpp:1855
+msgid "Liquid Assets"
+msgstr ""
+
+#: views/khomeview.cpp:1858
+#, fuzzy
+msgid "Transfers to Liquid Liabilities"
+msgstr "Aktiva a pasiva"
+
+#: views/khomeview.cpp:1861
+#, fuzzy
+msgid "Liquid Liabilities"
+msgstr "Celková pasiva"
+
+#: views/khomeview.cpp:1864
+#, fuzzy
+msgid "Other Transfers"
+msgstr "Převody"
+
+#: views/khomeview.cpp:1908
+msgid "Cash Flow Status"
+msgstr ""
+
+#: views/khomeview.cpp:1914
+msgid "Expected Liquid Assets"
+msgstr ""
+
+#: views/khomeview.cpp:1917
+#, fuzzy
+msgid "Expected Liquid Liabilities"
+msgstr "Aktiva a pasiva"
+
+#: views/khomeview.cpp:1920
+#, fuzzy
+msgid "Expected Profit/Loss"
+msgstr "Zisky/ztráty"
+
+#: plugins/ofximport/ofximporterplugin.cpp:64
+#, fuzzy
+msgid "OFX..."
+msgstr "OFX..."
+
+#: plugins/ofximport/ofximporterplugin.cpp:69
+msgid "OFX import file selection"
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid ""
+"Unable to import %1 using the OFX importer plugin. This file is not the "
+"correct format."
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid "Incorrect format"
+msgstr "Nesprávný formát"
+
+#: plugins/ofximport/ofximporterplugin.cpp:122
+msgid "Unable to parse file"
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:576
+msgid "Online settings"
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:635
+#, c-format
+msgid "Error connecting to bank: %1"
+msgstr "Chyba při připojování k bance: %1"
+
+#: plugins/ofximport/ofximporterplugin.cpp:646
+msgid ""
+"Unable to import %1 using the OFX importer plugin. The plugin returned the "
+"following error:<p>%2"
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Importing process terminated unexpectedly."
+msgstr "Proces importování neočekávaně skončil"
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Failed to import all statements."
+msgstr "Selhalo importování všech výpisů."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "The HTTP request failed."
+msgstr ""
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "Failed"
+msgstr ""
+
+#: plugins/ofximport/ofxpartner.cpp:410
+#, fuzzy
+msgid "Cannot open file %1 for writing"
+msgstr "Nebylo možné otevřít soubor \"%1\" pro zápis."
+
+#: plugins/ofximport/ofxpartner.cpp:414
+msgid "OFX setup error"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid "Loading banklist"
+msgstr "Nahrávám seznam bank"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid ""
+"Getting list of banks from http://moneycentral.msn.com/\n"
+"This may take some time depending on the available bandwidth."
+msgstr ""
+"Získávám seznam bank z http://moneycentral.msn.com/\n"
+"Bude to nějakou dobu trvat v závislosti na rychlosti vašeho připojení k "
+"internetu."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:155
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:199
+msgid "Supports online statements<br>"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:157
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:201
+msgid "Supports investments<br>"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:159
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:203
+msgid "Supports bill payment (but not supported by KMyMoney yet)<br>"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:163
+msgid "Does not support online banking</p>"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:173
+msgid "Please choose a bank."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:179
+msgid "Please fill all fields with values."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:271
+msgid "No suitable accounts were found at this bank."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:283
+msgid "Please choose an account"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:386
+msgid "Server message: %1\n"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+msgid "Your bank returned warnings when signing on"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+#, c-format
+msgid "WARNING %1"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+msgid "Error signing onto your bank"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, c-format
+msgid "ERROR %1"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingstatus.cpp:59
+msgid "Enabled & configured"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:1
+msgid "OFX Direct Connect"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:2
+msgid "Contacting bank..."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:4
+msgid "Online Banking Account Setup"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:5
+msgid "Select Financial Institution"
+msgstr "Vyberte finanční instituci"
+
+#: plugins/ofximport/dialogs/rc.cpp:6
+msgid "Please select your financial institution from the list below..."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:7
+msgid "Automatic"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:8
+msgid "Financial Institution"
+msgstr "Finanční instituce"
+
+#: plugins/ofximport/dialogs/rc.cpp:9
+#, fuzzy
+msgid "Manual"
+msgstr "ledna"
+
+#: plugins/ofximport/dialogs/rc.cpp:10
+msgid "Org"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:11
+msgid "FID"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:120 plugins/ofximport/dialogs/rc.cpp:12
+#: widgets/rc.cpp:46
+msgid "URL"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:13
+msgid "Enter Login Details"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:14
+msgid ""
+"Please enter the username and password you use to log into this bank for "
+"online banking. Please note that many banks require a separate signup, and "
+"assign a separate PIN or password just for online banking from home."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:15
+msgid "Connection Details"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:16
+msgid "Username"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:17 plugins/ofximport/dialogs/rc.cpp:36
+msgid "Header Version"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:18 plugins/ofximport/dialogs/rc.cpp:37
+msgid "Identify as"
+msgstr ""
+
+#: dialogs/rc.cpp:742 plugins/ofximport/dialogs/rc.cpp:19
+msgid "Password"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:20
+msgid "Select Account"
+msgstr "Vyberte účet"
+
+#: plugins/ofximport/dialogs/rc.cpp:21
+msgid ""
+"Please select the account from your financial institution from the list "
+"below which matches this account."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:24
+msgid "Bank"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:25
+msgid "Branch"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:26
+msgid "WizardPage"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:27
+msgid ""
+"Congratulations! You have successfully set up your bank for online banking "
+"via OFX."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:28
+msgid "Account Details"
+msgstr "Podrobnosti o účtu"
+
+#: plugins/ofximport/dialogs/rc.cpp:29 plugins/ofximport/dialogs/rc.cpp:31
+msgid "&lt;Not configured&gt;"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:30
+msgid "BANK/BROKER:"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:32
+msgid "Unavailable"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:33
+msgid "ACCOUNT:"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:34
+msgid "STATUS:"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:35
+msgid "OFX Details"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:38
+#, fuzzy
+msgid "Start date of import"
+msgstr "Počáteční datum"
+
+#: plugins/ofximport/dialogs/rc.cpp:39
+#, fuzzy
+msgid "To&day minus"
+msgstr "Dnešní platby"
+
+#: plugins/ofximport/dialogs/rc.cpp:40
+#, fuzzy
+msgid "days"
+msgstr "0 dní"
+
+#: plugins/ofximport/dialogs/rc.cpp:41
+#, fuzzy
+msgid "Last &update"
+msgstr "Minulé čtvrtletí"
+
+#: plugins/ofximport/dialogs/rc.cpp:42
+msgid "Pi&ck date"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:43
+msgid "Name is derived from"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:44
+msgid "P&AYEEID"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:45
+msgid "&NAME"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:46
+msgid "field if both are present in download"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:81
+msgid "Quicken Windows 2003"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:82
+msgid "Quicken Windows 2004"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:83
+msgid "Quicken Windows 2005"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:84
+msgid "Quicken Windows 2006"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:85
+msgid "Quicken Windows 2007"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:86
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:111
+msgid "Quicken Windows 2008"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:89
+msgid "MS-Money 2003"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:90
+msgid "MS-Money 2004"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:91
+msgid "MS-Money 2005"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:92
+msgid "MS-Money 2006"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:93
+msgid "MS-Money 2007"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:94
+msgid "MS-Money Plus"
+msgstr ""
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:91
+msgid "Report Configuration"
+msgstr ""
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:117
+#: dialogs/kreportconfigurationfilterdlg.cpp:135
+msgid "Rows/Columns"
+msgstr "Řádky/Sloupce"
+
+#: dialogs/investtransactioneditor.cpp:203
+#: dialogs/investtransactioneditor.cpp:537
+#: dialogs/investtransactioneditor.cpp:579 dialogs/rc.cpp:103
+#: dialogs/rc.cpp:158 dialogs/rc.cpp:245 dialogs/rc.cpp:750 dialogs/rc.cpp:794
+#: widgets/kmymoneyaccountselector.cpp:182 widgets/register.cpp:64
+#: widgets/register.cpp:567 widgets/transaction.cpp:1500
+msgid "Security"
+msgstr "Cenina"
+
+#: dialogs/investtransactioneditor.cpp:211
+msgid "Asset account"
+msgstr "Účet aktiv"
+
+#: dialogs/investtransactioneditor.cpp:1073
+msgid "Price/Share"
+msgstr ""
+
+#: dialogs/kmergetransactionsdlg.cpp:39
+msgid "Merge Transactions"
+msgstr "Spojit transakce"
+
+#: dialogs/kmergetransactionsdlg.cpp:40
+msgid "Are you sure you wish to merge these transactions?"
+msgstr "Jste si jisti, že si přejete spojit tyto transakce?"
+
+#: dialogs/kstartdlg.cpp:59
+msgid "Start Dialog"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Templates"
+msgstr "Šablony"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Select templates"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:80 dialogs/kstartdlg.cpp:119
+msgid "New KMyMoney document"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:90
+msgid "Open a KMyMoney document"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:96
+msgid ""
+"%1|KMyMoney files (*.kmy)\n"
+"%2|All files (*.*)"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:102
+msgid "Recent Files"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:217
+msgid "Blank Document"
+msgstr ""
+
+#: dialogs/knewbudgetdlg.cpp:71
+msgid "Please specify a budget name"
+msgstr ""
+
+#: dialogs/kgncpricesourcedlg.cpp:48
+#, c-format
+msgid "Investment: %1"
+msgstr ""
+
+#: dialogs/kgncpricesourcedlg.cpp:49
+#, c-format
+msgid "Quote source: %1"
+msgstr "Zdroj kurzu: %1"
+
+#: dialogs/kmymoneypricedlg.cpp:62 dialogs/ksecuritylisteditor.cpp:69
+msgid "Delete this entry"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:70
+msgid "Remove this security item from the file"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:73
+msgid "&Add"
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:68 dialogs/ksecuritylisteditor.cpp:75
+msgid "Add a new entry"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:76
+msgid "Create a new security entry."
+msgstr ""
+
+#: dialogs/keditequityentrydlg.cpp:77 dialogs/kmymoneypricedlg.cpp:74
+#: dialogs/ksecuritylisteditor.cpp:81
+msgid "Modify the selected entry"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:82
+msgid "Change the security information of the selected entry."
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:80 dialogs/ksecuritylisteditor.cpp:87
+msgid "Close the dialog"
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:81 dialogs/ksecuritylisteditor.cpp:88
+msgid "Use this to close the dialog and return to the application."
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:184
+msgid ""
+"Do you really want to remove the currency <b>%1</b> from the file?</"
+"p><i>Note: It is currently not supported to add currencies.</i>"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:187
+msgid "Do you really want to remove the %1 <b>%2</b> from the file?"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:190
+msgid "Delete security"
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:63
+msgid "Remove this price item from the file"
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:66 dialogs/mymoneyqifprofileeditor.cpp:94
+msgid "&New"
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:69
+msgid "Create a new price entry."
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:75
+msgid "Change the details of selected price information."
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Do you really want to delete the selected price entry?"
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Delete price information"
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:46
+msgid ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:50 dialogs/rc.cpp:22
+msgid "Choose import type:"
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:51 dialogs/rc.cpp:20
+msgid "Choose Import Type Dialog"
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:53
+msgid ""
+"Please choose the type of export you wish to perform. A simple explanation\n"
+"of the export type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an export type please press the OK button."
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:57
+msgid "Choose export type:"
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:58
+msgid "Choose Export Type Dialog"
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:78
+msgid ""
+"QIF files are created by the popular accounting program Quicken.\n"
+"Another dialog will appear, if you choose this type, asking for further\n"
+"information relevant to the Quicken format."
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:82
+msgid ""
+"The CSV type uses a comma delimeted text file that can be used by\n"
+"most popular spreadsheet programs available for Linux and other operating\n"
+"systems."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:222
+msgid "%1 units in %2"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid ""
+"Failed to retrieve an exchange rate for %1 from %2. It will be skipped this "
+"time."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid "Price Update Failed"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:427
+msgid ""
+"Failed to retrieve a quote for %1 from %2. Press <b>No</b> to remove the "
+"online price source from this security permanently, <b>Yes</b> to continue "
+"updating this security during future price updates or <b>Cancel</b> to stop "
+"the current update operation."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:427 dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Price Update Failed"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Cannot update security <b>%1</b>: %2"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:528
+msgid "Price for %1 updated (id %2)"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:534
+msgid "Received an invalid price for %1, unable to update."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:554
+msgid ""
+"Received a price for %1 (id %2), but this symbol is not on the list! "
+"Aborting entire update."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:222
+msgid ""
+"The number <b>%1</b> has already been used in account <b>%2</b>. Do you want "
+"to replace it with the next available number?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:222
+msgid "Duplicate number"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:303
+msgid ""
+"This transaction has more than two splits and is based on a different "
+"currency (%1). Using this account to modify the transaction is currently not "
+"very well supported by KMyMoney and may result in false results."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:305
+msgid ""
+"KMyMoney was not able to find a more appropriate account to edit this "
+"transaction. Nevertheless, you are allowed to modify the transaction. If you "
+"don't want to edit this transaction, please cancel from editing next."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:307
+msgid ""
+"Using e.g. <b>%1</b> to edit this transaction is a better choice. "
+"Nevertheless, you are allowed to modify the transaction. If you want to use "
+"the suggested account instead, please cancel from editing next and change "
+"the view to the suggested account."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:410
+msgid ""
+"This transaction has more than two splits and is originally based on a "
+"different currency (%1). Using this account to modify the transaction may "
+"result in rounding errors. Do you want to continue?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:412
+msgid ""
+"At least one of the selected transactions has more than two splits and is "
+"originally based on a different currency (%1). Using this account to modify "
+"the transactions may result in rounding errors. Do you want to continue?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:557
+msgid "Storing transactions"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:603 widgets/kmymoneybriefschedule.cpp:65
+msgid "&Enter"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:606
+msgid "Use this to enter the transaction into the ledger."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:607
+msgid "&Schedule"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:609
+msgid "Accepts the entered data and stores it as schedule"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:610
+msgid "Use this to schedule the transaction for later entry into the ledger."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"The transaction you are about to enter has a post date in the future.<br/"
+"><br/>Do you want to enter it in the ledger or add it to the schedules?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"_: Dialog caption for 'Enter or schedule' dialog\n"
+"Enter or schedule?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:671
+msgid ""
+"The balance of account <b>%1</b> dropped below the warning balance of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:677
+msgid ""
+"The balance of account <b>%1</b> dropped below the minimum balance of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:683
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit warning "
+"limit of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:689
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit limit of %"
+"2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:740
+msgid "Payer/Receiver"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:748
+msgid "Category/Account"
+msgstr "Kategorie/Účet"
+
+#: dialogs/transactioneditor.cpp:980 dialogs/transactioneditor.cpp:1016
+#: dialogs/transactioneditor.cpp:1378 dialogs/transactioneditor.cpp:1399
+#: dialogs/transactioneditor.cpp:1422 dialogs/transactioneditor.cpp:1443
+#: dialogs/transactioneditor.cpp:1505 dialogs/transactioneditor.cpp:1509
+#: widgets/transaction.cpp:902
+msgid "Transfer from"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:982 dialogs/transactioneditor.cpp:1018
+#: dialogs/transactioneditor.cpp:1401 dialogs/transactioneditor.cpp:1445
+#: dialogs/transactioneditor.cpp:1506 widgets/transaction.cpp:902
+msgid "Transfer to"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:1259
+msgid "Select autofill transaction"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:77
+msgid "First transaction does not match requirement for matching"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:79
+msgid "Second transaction does not match requirement for matching"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:83 dialogs/transactionmatcher.cpp:133
+msgid "Splits for %1 have conflicting values (%2,%3)"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:96 dialogs/transactionmatcher.cpp:149
+msgid ""
+"Both of these transactions have been imported into %1. Therefore they "
+"cannot be matched. Matching works with one imported transaction and one non-"
+"imported transaction."
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:101 dialogs/transactionmatcher.cpp:156
+msgid "Unable to match all splits (%1)"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:65
+msgid "Account and transfer account are the same. Please change one."
+msgstr "Zdrojový i cílový účet je stejný. Prosím změňte alespoň jeden."
+
+#: dialogs/kconfirmmanualenterdlg.cpp:84
+msgid "Payee changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:92
+#: dialogs/kconfirmmanualenterdlg.cpp:100
+msgid "Account changed. Old: \"%1\", New: \"%2\""
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:107
+msgid "Account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:115
+msgid ""
+"Transfer account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</"
+"b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:143
+msgid ""
+"Category changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:151
+#: dialogs/kconfirmmanualenterdlg.cpp:153
+msgid "empty"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:157
+msgid "Memo changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:166
+msgid "Amount changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:175
+msgid ""
+"Reconciliation flag changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%"
+"2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:182
+msgid "Fatal error in determining data: "
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:56
+msgid ""
+"There are no Qt SQL drivers installed in your system.\n"
+"Please consult documentation for your distro, or visit the Qt web site (www."
+"trolltech.com) and search for SQL drivers."
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:100
+msgid "Qt SQL driver %1 is no longer installed on your system"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:107
+msgid "Qt SQL driver %1 is not suported"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:164
+#, fuzzy
+msgid "SQLite files (*.sql);; All files (*.*)"
+msgstr ""
+"%1| Soubory XML\n"
+"%2|Všechny soubory (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:167
+#, fuzzy
+msgid "Select SQLite file"
+msgstr "Vybrat styl"
+
+#: dialogs/kselectdatabasedlg.cpp:188
+#, fuzzy
+msgid "All files (*.*)"
+msgstr "Všechny soubory"
+
+#: dialogs/kselectdatabasedlg.cpp:191
+#, fuzzy
+msgid "Select output file"
+msgstr "Vybrat styl"
+
+#: dialogs/investactivities.cpp:168
+msgid "%1 (Brokerage)"
+msgstr ""
+
+#: dialogs/investactivities.cpp:200 dialogs/investactivities.cpp:288
+#: dialogs/investactivities.cpp:425 widgets/transaction.cpp:1548
+msgid "Price/share"
+msgstr ""
+
+#: dialogs/investactivities.cpp:586
+msgid "Ratio 1/"
+msgstr ""
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid ""
+"<p>Please check that all the details in the following dialog are correct and "
+"press OK.</p><p>Editable data can be changed and can either be applied to "
+"just this occurence or for all subsequent occurences for this schedule. "
+"(You will be asked what you intend after pressing OK in the following dialog)"
+"</p>"
+msgstr ""
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid "Enter scheduled transaction"
+msgstr ""
+
+#: dialogs/kcsvprogressdlg.cpp:65 dialogs/kexportdlg.cpp:65
+msgid "&Export"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:67 dialogs/kimportdlg.cpp:68
+msgid "Start operation"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:68
+msgid "Use this to start the export operation"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:71 dialogs/kimportdlg.cpp:72
+msgid "&Browse..."
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:73 dialogs/kimportdlg.cpp:74
+msgid "Select filename"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:74 dialogs/kimportdlg.cpp:75
+msgid "Use this to select a filename to export to"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:77 dialogs/kimportdlg.cpp:78
+#: dialogs/settings/ksettingsonlinequotes.cpp:64
+#: widgets/kmymoneyonlinequoteconfig.cpp:64
+msgid "&New..."
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:79 dialogs/kimportdlg.cpp:80
+#: dialogs/mymoneyqifprofileeditor.cpp:96
+msgid "Create a new profile"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:80 dialogs/kimportdlg.cpp:81
+msgid "Use this to open the profile editor"
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:56
+msgid "Edit loan wizard"
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:58
+msgid ""
+"Please enter the date from which on the following changes will be effective. "
+"The date entered must be later than the opening date of this account (%1), "
+"but must not be in the future. The default will be today."
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:76
+msgid ""
+"Note: you will not be able to modify this account today, because the opening "
+"date \"%1\" is in the future. Please revisit this dialog when the time has "
+"come."
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:244
+msgid ""
+"Your previous selection was \"%1\". If you select another option, KMyMoney "
+"will dismiss the changes you have just entered. Do you wish to proceed?"
+msgstr ""
+
+#: dialogs/kcategoryreassigndlg.cpp:81
+msgid ""
+"At least one transaction/schedule still references the category <b>%1</b>. "
+"However, at least one category with the same currency must exist so that the "
+"transactions/schedules can be reassigned."
+msgstr ""
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid ""
+"This dialog does not allow to create new categories. Please pick a category "
+"from the list."
+msgstr ""
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid "Category creation"
+msgstr "Vytvoření kategorie"
+
+#: dialogs/kbackupdlg.cpp:61
+msgid "C&hoose..."
+msgstr ""
+
+#: dialogs/kbackupdlg.cpp:63
+msgid "Select mount point"
+msgstr ""
+
+#: dialogs/kbackupdlg.cpp:64
+msgid "Use this to browse to the mount point."
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:293
+msgid "Next due date"
+msgstr "Další datum splatnosti"
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid ""
+"You have turned on the GPG encryption support. This means, that new files "
+"will be stored encrypted. Existing files will not be encrypted "
+"automatically. To achieve encryption of existing files, please use the "
+"<b>File/Save as...</b> feature and store the file under a different name. "
+"Once confident with the result, feel free to delete the old file and rename "
+"the encrypted one to the old name."
+msgstr ""
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+#, fuzzy
+msgid "GPG encryption activated"
+msgstr "Použít GPG pro šifrování datového souboru"
+
+#: dialogs/settings/ksettingshome.cpp:51
+msgid "&Up"
+msgstr ""
+
+#: dialogs/settings/ksettingshome.cpp:53
+msgid "Move selected item up"
+msgstr ""
+
+#: dialogs/settings/ksettingshome.cpp:54
+msgid "Use this to move the selected item up by one position in the list."
+msgstr ""
+
+#: dialogs/settings/ksettingshome.cpp:55
+msgid "&Down"
+msgstr ""
+
+#: dialogs/settings/ksettingshome.cpp:57
+msgid "Move selected item down"
+msgstr ""
+
+#: dialogs/settings/ksettingshome.cpp:58
+msgid "Use this to move the selected item down by one position in the list."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:1
+msgid "Color settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:2
+msgid "Foreground"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:3
+msgid "Text colors"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:4
+msgid "Grid color"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:5
+msgid "Erronous transaction"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:6
+msgid "Value with missing conversion rate"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:7
+msgid "Negative value"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:8
+msgid "Background"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:10
+msgid "List background colors"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:11
+msgid "Normal"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:12
+msgid "Alternate"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:13
+msgid "Special background colors"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:14
+msgid "Ledger group separator"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:15
+msgid "Required field"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:16
+msgid "Imported transaction"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:17
+msgid "Matched transaction"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:18
+msgid "Font settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:19
+msgid "Use system fonts"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:20
+msgid "Individual font settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:24
+msgid "Number of Days of Account Cycle:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:26
+msgid "Number of Days to Forecast:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:27
+msgid "Forecast Method"
+msgstr "Metoda předpovědí"
+
+#: dialogs/settings/rc.cpp:28
+msgid "Scheduled and Future Transactions"
+msgstr "Naplánované a budoucí transakce"
+
+#: dialogs/settings/rc.cpp:29
+msgid "History-based"
+msgstr "Založená na historii"
+
+#: dialogs/settings/rc.cpp:30
+msgid "History-based settings"
+msgstr "Nastavení na historii založených předpovědí"
+
+#: dialogs/settings/rc.cpp:31
+msgid "Number of Cycles to use in Forecast:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:36
+msgid "General Settings"
+msgstr "Obecné nastavení"
+
+#: dialogs/settings/rc.cpp:37
+msgid "Global"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:38
+msgid "Startup page options"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:39
+msgid "Start with homepage"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:40
+msgid "Start with last selected view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:41
+msgid "Precision settings"
+msgstr "Nastavení přesnosti"
+
+#: dialogs/settings/rc.cpp:42
+msgid "Price precision"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:43
+msgid "digits"
+msgstr "číslic"
+
+#: dialogs/settings/rc.cpp:44
+msgid "Autosave options"
+msgstr "Nastavení automatického ukládání"
+
+#: dialogs/settings/rc.cpp:45
+msgid "Autosave periodically"
+msgstr "Automatick ukládat každých"
+
+#: dialogs/settings/rc.cpp:46
+msgid "minutes"
+msgstr "minut"
+
+#: dialogs/settings/rc.cpp:47
+msgid "Fiscal Year"
+msgstr "Fiskální rok"
+
+#: dialogs/settings/rc.cpp:48
+msgid "Your fiscal year starts on"
+msgstr "Váš fiskální rok začíná"
+
+#: dialogs/settings/rc.cpp:49
+msgid "January"
+msgstr "ledna"
+
+#: dialogs/settings/rc.cpp:50
+msgid "February"
+msgstr "února"
+
+#: dialogs/settings/rc.cpp:51
+msgid "March"
+msgstr "března"
+
+#: dialogs/settings/rc.cpp:52
+msgid "April"
+msgstr "dubna"
+
+#: dialogs/settings/rc.cpp:53
+msgid "May"
+msgstr "května"
+
+#: dialogs/settings/rc.cpp:54
+msgid "June"
+msgstr "června"
+
+#: dialogs/settings/rc.cpp:55
+msgid "July"
+msgstr "července"
+
+#: dialogs/settings/rc.cpp:56
+msgid "August"
+msgstr "srpna"
+
+#: dialogs/settings/rc.cpp:57
+msgid "September"
+msgstr "září"
+
+#: dialogs/settings/rc.cpp:58
+msgid "October"
+msgstr "října"
+
+#: dialogs/settings/rc.cpp:59
+msgid "November"
+msgstr "listopadu"
+
+#: dialogs/settings/rc.cpp:60
+msgid "December"
+msgstr "prosince"
+
+#: dialogs/settings/rc.cpp:61
+msgid "Views"
+msgstr "Pohled"
+
+#: dialogs/settings/rc.cpp:62
+msgid "Synchronize account selection of ledger and investment view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:63
+msgid ""
+"Check the views you want to enable, uncheck those you want to hide, because "
+"you don't need the functionality."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:64
+msgid "Icon size of navigation bar"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:65
+msgid "Micro (16px)"
+msgstr "Nejmenší (16px)"
+
+#: dialogs/settings/rc.cpp:66
+msgid "Small (32px)"
+msgstr "Malé (32px)"
+
+#: dialogs/settings/rc.cpp:67
+msgid "Normal (48px)"
+msgstr "Běžné (48px)"
+
+#: dialogs/settings/rc.cpp:68
+msgid "Large (64px)"
+msgstr "Velké (64px)"
+
+#: dialogs/settings/rc.cpp:69
+msgid "Show title bar on each page"
+msgstr ""
+
+#: dialogs/rc.cpp:835 dialogs/settings/rc.cpp:70
+msgid "Filter"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:71
+msgid "Accounts / Categories"
+msgstr "Účty / Kategorie"
+
+#: dialogs/settings/rc.cpp:72
+msgid "Don't show unused categories"
+msgstr "Nezobrazovat nepožívané kategorie"
+
+#: dialogs/settings/rc.cpp:73
+msgid ""
+"This option hides all categories in the categories view that are not used in "
+"at least a single transaction. They are still shown in the category "
+"selection lists."
+msgstr ""
+"Tato volba skryje všechny kategorie ve zobrazení kategorií, pokud nebyly "
+"použity v alespoň jedné transakci. Kategorie však stále zůstanou v seznamu "
+"pro výběr kategorií."
+
+#: dialogs/settings/rc.cpp:74
+msgid "Don't show closed accounts"
+msgstr "Nezobrazovat uzavřené účty"
+
+#: dialogs/settings/rc.cpp:75
+msgid ""
+"This option hides all accounts that have been closed by the user in views "
+"and selection lists.\n"
+"\n"
+"You can use <b>View/Show all accounts</b> to temporarily show hidden "
+"accounts in the views."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:76
+#, fuzzy
+msgid "Show equity accounts"
+msgstr "Zobrazit všechny účty"
+
+#: dialogs/rc.cpp:332 dialogs/settings/rc.cpp:77 widgets/rc.cpp:160
+msgid "Schedules"
+msgstr "Finanční plány"
+
+#: dialogs/settings/rc.cpp:78
+msgid "Don't show finished schedules"
+msgstr "Nezobrazovat dokončené naplánované transakce"
+
+#: dialogs/settings/rc.cpp:79
+msgid "This option hides all finished schedules in the schedules view."
+msgstr ""
+"Tato volba skryje všechny dokončené finanční plány v záložce \"Finanční plán"
+"\"."
+
+#: dialogs/settings/rc.cpp:81
+msgid "Don't show transactions prior to"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:82
+msgid "Don't show reconciled transactions"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:83
+msgid "This option hides all reconciled transactions in the ledger view."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:84 widgets/rc.cpp:22
+msgid "GPG encryption settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:85
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Access to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>additional recovery encryption</i> is only accessible, if the "
+"necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id "
+"0x8AFDDC8E is found in your keyring."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:86 widgets/rc.cpp:24
+msgid "Use GPG encryption"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:87
+msgid "GPG encryption"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:88
+msgid "Your key"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:89
+msgid ""
+"This combo box lists all the secret keys you have in your keyring. Select "
+"the one you want to use for encryption when saving to a file."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:90
+msgid "Additonal keys"
+msgstr ""
+
+#: dialogs/kgpgkeyselectiondlg.cpp:50 dialogs/settings/rc.cpp:91
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading 0x."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:92 widgets/rc.cpp:28
+msgid ""
+"This symbol denotes, if the key for the given user id has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+
+#: dialogs/kgpgkeyselectiondlg.cpp:61 dialogs/settings/rc.cpp:93
+msgid "Keys for all of the above user ids found"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:94 widgets/rc.cpp:31
+msgid ""
+"This symbol denotes, if the KMyMoney recovery key has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:95
+msgid "Recover Key available in keyring"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:96
+msgid "Also encrypt with KMyMoney's recover key"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:97
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out.."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:98
+msgid "Homepage Settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:99
+msgid "Up"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:100
+msgid "Down"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:101
+msgid ""
+"Selected entries are shown on the home page of the application.<p>\n"
+"Use the buttons and checkboxes to customize the layout of the home page."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:102
+msgid "Homepage/Summary page font scaling"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:103
+msgid "Percentage of default font size:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:104
+msgid ""
+"Remember font size when leaving the program if manually changed with mouse-"
+"wheel"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:105
+msgid "Information display"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:106
+msgid "Show Account Limit Information"
+msgstr "Zobrazit informace o limitu účtu"
+
+#: dialogs/settings/rc.cpp:110 widgets/rc.cpp:47
+msgid ""
+"<i>Enter regular expressions which can be used to parse the data returned "
+"from the URL entered above. The symbol, price, and date must be found in "
+"the quote data to be usable. You may also try the KMyMoney user's "
+"mailinglist at <a href=\"mailto:kmymoney2-user@lists.sourceforge.net"
+"\">kmymoney2-user@lists.sourceforge.net</a> to find what settings work for "
+"other users in your country.</i>"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:113 widgets/rc.cpp:38
+msgid "Regular Expression to extract the symbol from the downloaded data"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:114 widgets/rc.cpp:39
+msgid "Regular Expression to extract the price from the downloaded data"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:115 widgets/rc.cpp:41
+msgid "URL to be used to download the quote"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:116 widgets/rc.cpp:42
+msgid ""
+"Enter the URL from which stock quotes will be fetched. <b>%1</b> will be "
+"replaced with the symbol for the security being quoted. For currency "
+"conversions, <b>%2</b> will be replaced with the currency to be quoted and "
+"<b>%1</b> with the currency the quote is based on."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:118 dialogs/settings/rc.cpp:121 widgets/rc.cpp:40
+#: widgets/rc.cpp:44
+msgid "Regular Expression to extract the date from the downloaded data"
+msgstr ""
+
+#: dialogs/rc.cpp:807 dialogs/settings/rc.cpp:119 widgets/rc.cpp:45
+msgid "Date Format"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:122
+msgid "Skip HTML stripping"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:123
+msgid ""
+"<p>For easier processing of the data returned by the online source, KMyMoney "
+"usually strips unused parts before it is parsed with the regular "
+"expressions. If matching of the fields relies on those items, then use this "
+"option to turn stripping off.</p>\n"
+"\n"
+"<p>The following items are usually removed by stripping:\n"
+"\n"
+"<ul>\n"
+"<li>HTML tags such as <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded characters such as <b>&amp;nbsp;</b></li>\n"
+"<li>duplicate whitespace</li>\n"
+"</ul>\n"
+"</p>"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:127
+msgid "Register settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:128
+msgid "Display"
+msgstr "Zobrazit"
+
+#: dialogs/settings/rc.cpp:131
+msgid ""
+"Using the ledger lens shows the details for the transaction that has focus "
+"in the ledger. Usually, when using the transaction form, only a one line "
+"summary is displayed for each transaction as the details are shown in the "
+"form."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:133
+msgid "Always show a No. field"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:134
+msgid "Show group header between transactions"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:135
+msgid ""
+"Draws a larger header above each group of transaction. The grouping depends "
+"on the current sort order."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:136
+msgid "Show header for the previous and current fiscal year"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:137
+msgid "Sorting"
+msgstr "Řazení"
+
+#: dialogs/settings/rc.cpp:138
+msgid "Normal view"
+msgstr "Běžný pohled"
+
+#: dialogs/settings/rc.cpp:139
+msgid "Reconciliation view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:140
+msgid "Search view"
+msgstr "Vyhledávací pohled"
+
+#: dialogs/settings/rc.cpp:141
+msgid ""
+"Use the <i>left</i> and <i>right</i> buttons to add and remove sort options. "
+"Use the <i>up</i> and <i>down</i> buttons to modify the sort order. Double-"
+"Click a selected entry to toggle the sort order between <i>ascending</i> and "
+"<i>descending</i>."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:142
+msgid "Data entry"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:146
+msgid "Use Enter to move between fields"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:147
+msgid "Match names from start"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:148
+msgid ""
+"Mark this option, if you always want to match names e.g. for payees from the "
+"start. If unset, any substring is matched."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:149
+msgid "Default reconciliation state"
+msgstr ""
+
+#: dialogs/rc.cpp:227 dialogs/settings/rc.cpp:150
+#: widgets/kmymoneycombo.cpp:348 widgets/registersearchline.cpp:84
+msgid "Not reconciled"
+msgstr ""
+
+#: dialogs/rc.cpp:228 dialogs/settings/rc.cpp:151
+#: widgets/kmymoneycombo.cpp:347 widgets/registersearchline.cpp:85
+msgid "Cleared"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:153
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation "
+"of an account"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:154
+msgid "Autofill"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:155
+msgid "No Autofill"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:156
+msgid "Don't do autofill of transaction data at all."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:157
+msgid "Same transaction if amount differs less than"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:158
+msgid ""
+"Collect all transactions for the given payee. Treat all transactions that "
+"refer to the same category and have an amount with +/- X % as identical. If "
+"more than one transaction is found, a list of them is presented to the "
+"user.\n"
+"\n"
+"Selecting 0% will list all transactions."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:159
+msgid ""
+"Two transactions are usually treated identical for autofill, if they refer "
+"the same accounts. They are treated as different transactions though, when "
+"their amount varies by more than the percentage given here."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:160
+msgid ""
+"_: Same transaction if amount differs less than percent.\n"
+"percent."
+msgstr "procent."
+
+#: dialogs/settings/rc.cpp:161
+msgid "with previously most often used transaction for the payee"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:162
+msgid ""
+"The data of the last transaction assigned to the category used most often "
+"for this payee is autofilled into the transaction editor."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:164
+msgid "Match transactions within days"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:165
+msgid ""
+"Search for matching transactions within the range of the posting date of the "
+"imported transaction +/- the number of given days."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:166
+msgid "Ask for a new payee's default category"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:167
+msgid ""
+"Whenever a new payee is detected during import of a statement, the user will "
+"be asked to assign a default category for this user when this option is "
+"selected."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:168
+msgid "Schedule Settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:169
+msgid "Startup options"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:170
+msgid "Check schedules on startup"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:60
+#: widgets/kmymoneyonlinequoteconfig.cpp:60
+msgid "Delete the selected source entry"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:61
+#: widgets/kmymoneyonlinequoteconfig.cpp:61
+msgid "Use this to delete the selected online source entry"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:66
+#: widgets/kmymoneyonlinequoteconfig.cpp:66
+msgid "Create a new source entry for online quotes"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:67
+#: widgets/kmymoneyonlinequoteconfig.cpp:67
+msgid "Use this to create a new entry for online quotes"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:107
+#: dialogs/settings/ksettingsonlinequotes.cpp:190
+#: dialogs/settings/ksettingsonlinequotes.cpp:193
+#: dialogs/settings/ksettingsonlinequotes.cpp:216
+#: widgets/kmymoneyonlinequoteconfig.cpp:107
+#: widgets/kmymoneyonlinequoteconfig.cpp:185
+#: widgets/kmymoneyonlinequoteconfig.cpp:188
+#: widgets/kmymoneyonlinequoteconfig.cpp:211
+msgid "New Quote Source"
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:77 dialogs/rc.cpp:788
+msgid "Clear &All"
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:79
+msgid "Clear all splits"
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:80
+msgid "Use this to clear all splits of this transaction"
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:84
+#, fuzzy
+msgid "&Merge"
+msgstr "Průměr"
+
+#: dialogs/ksplittransactiondlg.cpp:183
+msgid ""
+"The total amount of this transaction is %1 while the sum of the splits is %"
+"2. The remaining %3 are unassigned."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:191
+#, c-format
+msgid "Change &total amount of transaction to %1."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:194
+msgid "&Distribute difference of %1 among all splits."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:203
+#, c-format
+msgid "&Leave total amount of transaction at %1."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:205
+msgid "&Leave %1 unassigned."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:275
+msgid ""
+"You are about to delete all splits of this transaction. Do you really want "
+"to continue?"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:97
+msgid "Use this to create a new QIF import/export profile"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:148
+#: dialogs/mymoneyqifprofileeditor.cpp:403 dialogs/rc.cpp:797
+msgid "QIF Profile Editor"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:150
+msgid "QIF Profile Selector"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:236
+msgid "The default QIF profile"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:404
+#: dialogs/mymoneyqifprofileeditor.cpp:417
+msgid "Enter new profile name"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:436
+msgid "Do you really want to delete profile '%1'?"
+msgstr ""
+
+#: dialogs/kgpgkeyselectiondlg.cpp:38
+msgid "Select additional keys"
+msgstr ""
+
+#: dialogs/kgpgkeyselectiondlg.cpp:48 widgets/rc.cpp:25
+msgid "User identification"
+msgstr ""
+
+#: dialogs/kendingbalancedlg.cpp:71
+msgid ""
+"Please enter the following fields with the information as you find them on "
+"your statement. Make sure to enter all values in <b>%1</b>."
+msgstr ""
+
+#: dialogs/kendingbalancedlg.cpp:124
+#, c-format
+msgid "Last reconciled statement: %1"
+msgstr ""
+
+#: dialogs/kendingbalancedlg.cpp:437 dialogs/kendingbalancedlg.cpp:577
+#: dialogs/rc.cpp:137
+msgid "Adjustment transaction"
+msgstr ""
+
+#: dialogs/kendingbalancedlg.cpp:510
+msgid ""
+"KMyMoney has calculated the following amounts for interest and amortization "
+"according to recorded payments between %1 and %2."
+msgstr ""
+
+#: dialogs/kbalancechartdlg.cpp:59
+#, c-format
+msgid "Balance of %1"
+msgstr ""
+
+#: dialogs/kbalancechartdlg.cpp:70
+msgid "%1 Balance History"
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:98
+msgid "Split Options"
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:99 dialogs/rc.cpp:731
+#: widgets/kmymoneypriceview.cpp:149
+#, fuzzy
+msgid "Edit..."
+msgstr "Vložit..."
+
+#: dialogs/kmymoneysplittable.cpp:100
+msgid "Duplicate"
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:102
+msgid "Delete ..."
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:275
+msgid ""
+"_: Duplicate split\n"
+"CTRL+c"
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:562
+msgid "will be calculated"
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:648
+msgid ""
+"You are about to delete the selected split. Do you really want to continue?"
+msgstr ""
+
+#: dialogs/rc.cpp:1
+msgid "Account selection"
+msgstr "Výběr účtu"
+
+#: dialogs/rc.cpp:3
+msgid "Account to import to"
+msgstr ""
+
+#: dialogs/rc.cpp:6 dialogs/rc.cpp:170 widgets/rc.cpp:169
+msgid "Skip"
+msgstr ""
+
+#: dialogs/rc.cpp:8
+msgid ""
+"Use this dialog to backup your data. \n"
+"\n"
+"Please make sure you have a disk inserted and that the drive is ready. Then "
+"choose the mount point from either the Choose button or by entering the path "
+"in the available box.\n"
+"\n"
+"Click OK to perform the backup. If your system does not use an automounter, "
+"make sure you mark the checkbox below to \"mount this directory before "
+"backing up.\""
+msgstr ""
+
+#: dialogs/rc.cpp:9
+msgid "Device options"
+msgstr ""
+
+#: dialogs/rc.cpp:10
+msgid ""
+"_: This is the mount point\n"
+"Mount Point:"
+msgstr ""
+
+#: dialogs/rc.cpp:11
+msgid "Choose..."
+msgstr ""
+
+#: dialogs/rc.cpp:12
+msgid "Mount this directory before backing up."
+msgstr ""
+
+#: dialogs/rc.cpp:15
+msgid "Reassign categories"
+msgstr ""
+
+#: dialogs/rc.cpp:16
+msgid ""
+"The transactions, schedules and budgets associated with the selected "
+"category need to be re-assigned to a different category before the selected "
+"category can be deleted. Please select a category from the list below."
+msgstr ""
+
+#: dialogs/rc.cpp:17
+msgid "Available categories:"
+msgstr ""
+
+#: dialogs/rc.cpp:21
+msgid ""
+"Please choose the type of import you wish to perform. A simple "
+"explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+
+#: dialogs/rc.cpp:23
+msgid "QIF"
+msgstr ""
+
+#: dialogs/rc.cpp:24
+msgid "CSV"
+msgstr ""
+
+#: dialogs/rc.cpp:25
+msgid "Some descripton"
+msgstr ""
+
+#: dialogs/rc.cpp:28
+msgid "Confirm Manual Enter"
+msgstr ""
+
+#: dialogs/rc.cpp:29
+msgid "The following changes have been made to the transaction data:"
+msgstr ""
+
+#: dialogs/rc.cpp:30
+msgid "Please choose what you wish to do with the above changes"
+msgstr ""
+
+#: dialogs/rc.cpp:31
+msgid ""
+"Discard the changes and enter the original transaction into the register."
+msgstr ""
+
+#: dialogs/rc.cpp:32
+msgid "Enter these new values this one time, for this occurence only."
+msgstr ""
+
+#: dialogs/rc.cpp:33
+msgid "Set all further occurences in this schedule to be these values."
+msgstr ""
+
+#: dialogs/rc.cpp:36
+msgid "CSV Dialog"
+msgstr ""
+
+#: dialogs/rc.cpp:37
+msgid ""
+"CSV Dialog. Choose a file and then click on Run. You can view your "
+"progress at\n"
+"the bottom of the screen.\n"
+"\n"
+"You can cancel the process at any time by clicking on the Cancel button."
+msgstr ""
+
+#: dialogs/rc.cpp:38
+msgid "Choose the csv file:"
+msgstr ""
+
+#: dialogs/rc.cpp:39
+msgid "Browse"
+msgstr "Procházet"
+
+#: dialogs/rc.cpp:40
+msgid "Between These Dates"
+msgstr ""
+
+#: dialogs/rc.cpp:41 dialogs/rc.cpp:196
+msgid "Start on:"
+msgstr ""
+
+#: dialogs/rc.cpp:42 dialogs/rc.cpp:195
+msgid "End on:"
+msgstr ""
+
+#: dialogs/rc.cpp:43
+msgid "Run"
+msgstr ""
+
+#: dialogs/rc.cpp:44
+msgid "Progress Info"
+msgstr ""
+
+#: dialogs/rc.cpp:45
+msgid "Processing Account:"
+msgstr ""
+
+#: dialogs/rc.cpp:47
+msgid "Processing Transaction:"
+msgstr ""
+
+#: dialogs/rc.cpp:48
+msgid "0 of 0"
+msgstr ""
+
+#: dialogs/rc.cpp:50
+msgid "Exchange Rate/Price Editor"
+msgstr ""
+
+#: dialogs/rc.cpp:55
+msgid "Convert from"
+msgstr ""
+
+#: dialogs/rc.cpp:58
+msgid "Convert to"
+msgstr ""
+
+#: dialogs/rc.cpp:61
+msgid "To amount"
+msgstr ""
+
+#: dialogs/rc.cpp:62
+msgid "Exchange rate / Price"
+msgstr ""
+
+#: dialogs/rc.cpp:64
+msgid ""
+"xx\n"
+"xx"
+msgstr ""
+
+#: dialogs/rc.cpp:68
+msgid "Currencies"
+msgstr ""
+
+#: dialogs/rc.cpp:72
+msgid "real ID"
+msgstr ""
+
+#: dialogs/rc.cpp:73 dialogs/rc.cpp:722
+msgid "ID"
+msgstr ""
+
+#: dialogs/rc.cpp:74
+msgid "X"
+msgstr ""
+
+#: dialogs/rc.cpp:76 dialogs/rc.cpp:459
+msgid "Online Source"
+msgstr ""
+
+#: dialogs/rc.cpp:78 dialogs/rc.cpp:278 dialogs/rc.cpp:312 dialogs/rc.cpp:684
+msgid "F1"
+msgstr ""
+
+#: dialogs/rc.cpp:80
+msgid "If this button is not activated, select the base currency first."
+msgstr ""
+
+#: dialogs/rc.cpp:81
+msgid ""
+"Press this button to close the dialog. If the button is not activated, "
+"select your base currency."
+msgstr ""
+
+#: dialogs/rc.cpp:82
+msgid "Edit Equity"
+msgstr ""
+
+#: dialogs/rc.cpp:86 dialogs/rc.cpp:410
+msgid "Smallest fraction:"
+msgstr ""
+
+#: dialogs/rc.cpp:87 dialogs/rc.cpp:408 dialogs/rc.cpp:440
+msgid "1 /"
+msgstr ""
+
+#: dialogs/rc.cpp:88 dialogs/rc.cpp:405
+msgid "Investment Type:"
+msgstr ""
+
+#: dialogs/rc.cpp:89 dialogs/rc.cpp:404
+msgid "Equity Name:"
+msgstr ""
+
+#: dialogs/rc.cpp:90 dialogs/rc.cpp:409
+msgid "Market Symbol:"
+msgstr ""
+
+#: dialogs/rc.cpp:91
+msgid "Price History"
+msgstr ""
+
+#: dialogs/rc.cpp:97
+#, fuzzy
+msgid "Edit Scheduled transaction"
+msgstr "Naplánované transakce nalezeny"
+
+#: dialogs/rc.cpp:98
+msgid "Schedule name:"
+msgstr ""
+
+#: dialogs/rc.cpp:99
+msgid "Frequency:"
+msgstr "Pravidelnost (frekvence):"
+
+#: dialogs/rc.cpp:100
+msgid "Number of selected periods between entries"
+msgstr ""
+
+#: dialogs/rc.cpp:101
+msgid "Payment information"
+msgstr ""
+
+#: dialogs/rc.cpp:105 dialogs/rc.cpp:160 dialogs/rc.cpp:247 dialogs/rc.cpp:752
+#: widgets/register.cpp:569
+msgid "C"
+msgstr ""
+
+#: dialogs/rc.cpp:113
+msgid "Do nothing"
+msgstr "Neprovádět nic"
+
+#: dialogs/rc.cpp:116
+msgid "If this schedule occurs on the weekend:"
+msgstr "Pokud transakce nastane o víkendu:"
+
+#: dialogs/rc.cpp:117
+msgid "The amount is an estimate because it varies for each payment"
+msgstr "Částka je jen přibližná, neboť se mění při každé platbě"
+
+#: dialogs/rc.cpp:118
+msgid "Enter this schedule into the register automatically when it is due"
+msgstr "Vkládat tuto naplánovanou transakci automaticky do finančního deníku"
+
+#: dialogs/rc.cpp:119
+msgid "This schedule will end at some time"
+msgstr "Tento finanční plán má známý konec"
+
+#: dialogs/rc.cpp:120
+msgid "Number of transactions remaining:"
+msgstr "Počet zbývajících transakcí:"
+
+#: dialogs/rc.cpp:121
+msgid "Date of final transaction:"
+msgstr "Datum poslední transakce:"
+
+#: dialogs/rc.cpp:125
+msgid "Reconciliation Wizard"
+msgstr ""
+
+#: dialogs/rc.cpp:127
+msgid ""
+"Reconciling your account assures, that your recordings match those of your "
+"institution and that there are no mistakes on either side. You should "
+"reconcile your account whenever you receive a statement from your "
+"institution.\n"
+"\n"
+"All relevant information necessary for this process is usually printed on "
+"your statement.\n"
+"\n"
+"On the next page you will verify, that the starting and ending balance are "
+"matching those on your statement. If not, please modify the figures."
+msgstr ""
+
+#: dialogs/rc.cpp:129
+msgid ""
+"KMyMoney calculates your loan payments automatically. The amounts can "
+"deviate from those calculated by the creditor. Therefore, you possibly have "
+"to adjust amortization, interest and other costs according to your "
+"statement.\n"
+"\n"
+"Please enter the following information found on your statement:"
+msgstr ""
+
+#: dialogs/rc.cpp:130
+msgid "Ending date of statement"
+msgstr ""
+
+#: dialogs/rc.cpp:131
+msgid "Starting date of statement"
+msgstr ""
+
+#: dialogs/rc.cpp:132
+msgid "Verify payments"
+msgstr ""
+
+#: dialogs/rc.cpp:133 dialogs/rc.cpp:148 dialogs/rc.cpp:476 dialogs/rc.cpp:477
+#: dialogs/rc.cpp:508 dialogs/rc.cpp:513 dialogs/rc.cpp:518 dialogs/rc.cpp:532
+#: dialogs/rc.cpp:539 dialogs/rc.cpp:540 dialogs/rc.cpp:541 dialogs/rc.cpp:542
+#: dialogs/rc.cpp:543 dialogs/rc.cpp:552 dialogs/rc.cpp:553 dialogs/rc.cpp:554
+#: dialogs/rc.cpp:555 dialogs/rc.cpp:556 dialogs/rc.cpp:565 dialogs/rc.cpp:566
+#: dialogs/rc.cpp:567 dialogs/rc.cpp:568 dialogs/rc.cpp:569 dialogs/rc.cpp:578
+#: dialogs/rc.cpp:579 dialogs/rc.cpp:580 dialogs/rc.cpp:581 dialogs/rc.cpp:582
+#: dialogs/rc.cpp:591 dialogs/rc.cpp:592 dialogs/rc.cpp:593 dialogs/rc.cpp:594
+#: dialogs/rc.cpp:595 dialogs/rc.cpp:603 dialogs/rc.cpp:604 dialogs/rc.cpp:605
+#: dialogs/rc.cpp:606 dialogs/rc.cpp:607 dialogs/rc.cpp:618 dialogs/rc.cpp:619
+#: dialogs/rc.cpp:621 dialogs/rc.cpp:636 dialogs/rc.cpp:637 dialogs/rc.cpp:638
+#: dialogs/rc.cpp:639 dialogs/rc.cpp:640 dialogs/rc.cpp:641 dialogs/rc.cpp:651
+#: dialogs/rc.cpp:652 dialogs/rc.cpp:654 dialogs/rc.cpp:657 dialogs/rc.cpp:658
+#: dialogs/rc.cpp:659 dialogs/rc.cpp:664 dialogs/rc.cpp:665 dialogs/rc.cpp:668
+#: dialogs/rc.cpp:670 dialogs/rc.cpp:672 dialogs/rc.cpp:674 dialogs/rc.cpp:676
+#: dialogs/rc.cpp:678 dialogs/rc.cpp:681 dialogs/rc.cpp:823 widgets/rc.cpp:167
+msgid "1"
+msgstr ""
+
+#: dialogs/rc.cpp:136
+msgid ""
+"If your statement shows different amounts, please cancel this dialog and "
+"correct the false transactions or correct the values in this dialog. In the "
+"later case, KMyMoney will create an adjustment transaction and add it to the "
+"ledger."
+msgstr ""
+
+#: dialogs/rc.cpp:138
+msgid ""
+"In order to create the adjustment transaction, KMyMoney requires an account "
+"and possibly an interest category to assign the differences to. Please "
+"select an account and - if necessary - a category."
+msgstr ""
+
+#: dialogs/rc.cpp:140
+msgid "Interest-Category"
+msgstr ""
+
+#: dialogs/rc.cpp:141
+msgid "Restarting postponed reconciliation"
+msgstr ""
+
+#: dialogs/rc.cpp:142
+msgid ""
+"You have previously postponed the reconciliation of this account. If you "
+"have entered charges or interests the last time you started reconciling this "
+"account you can modify these in the ledger later on.\n"
+"\n"
+"It is important, that you continue with the same statement you used when you "
+"postponed the reconciliation.\n"
+"\n"
+"All information you have entered into this wizard will be shown and all "
+"transactions that you already cleared are marked with a 'C'."
+msgstr ""
+
+#: dialogs/rc.cpp:143
+msgid "Statement Information"
+msgstr ""
+
+#: dialogs/rc.cpp:144 dialogs/rc.cpp:315 dialogs/rc.cpp:317 dialogs/rc.cpp:320
+#: dialogs/rc.cpp:321 dialogs/rc.cpp:329 dialogs/rc.cpp:330 dialogs/rc.cpp:333
+#: dialogs/rc.cpp:334 dialogs/rc.cpp:335 dialogs/rc.cpp:336 dialogs/rc.cpp:366
+msgid "x"
+msgstr ""
+
+#: dialogs/rc.cpp:145
+msgid "Statement date:"
+msgstr ""
+
+#: dialogs/rc.cpp:146
+msgid "Starting balance of this statement:"
+msgstr ""
+
+#: dialogs/rc.cpp:147
+msgid "Ending balance of this statement:"
+msgstr ""
+
+#: dialogs/rc.cpp:149
+msgid "Interest / Charges"
+msgstr ""
+
+#: dialogs/rc.cpp:150
+msgid ""
+"If necessary, enter information about interest or charges here. KMyMoney "
+"will create transactions and clear them directly for you."
+msgstr ""
+
+#: dialogs/rc.cpp:153
+msgid "Charges"
+msgstr ""
+
+#: dialogs/rc.cpp:154
+msgid "Enter Schedule"
+msgstr ""
+
+#: dialogs/rc.cpp:155
+msgid "Schedule Details"
+msgstr ""
+
+#: dialogs/rc.cpp:156 dialogs/rc.cpp:348 dialogs/rc.cpp:389 widgets/rc.cpp:164
+msgid "Name:"
+msgstr ""
+
+#: dialogs/rc.cpp:157 dialogs/rc.cpp:351 widgets/rc.cpp:165
+msgid "Type:"
+msgstr ""
+
+#: dialogs/rc.cpp:168
+msgid "Enter"
+msgstr "Vložit"
+
+#: dialogs/rc.cpp:169
+msgid ""
+"Enter the transaction and advance the next due date of this schedule to the "
+"next payment date."
+msgstr ""
+
+#: dialogs/rc.cpp:171
+msgid ""
+"Do not enter the transaction but advance the next due date of this schedule "
+"to the next payment date."
+msgstr ""
+
+#: dialogs/rc.cpp:172
+msgid "Ignore"
+msgstr "Ignorovat"
+
+#: dialogs/rc.cpp:173
+msgid ""
+"Do not enter or skip payments for this schedule but continue with the next "
+"schedule."
+msgstr ""
+
+#: dialogs/rc.cpp:175
+msgid "Cancel processing of schedule entry."
+msgstr ""
+
+#: dialogs/rc.cpp:176
+msgid "Update Stock and Currency Prices"
+msgstr "Aktualizovat ceny akcií a směnné kurzy měn"
+
+#: dialogs/rc.cpp:177
+msgid "List of known Equities, and the date they were last updated on."
+msgstr ""
+
+#: dialogs/rc.cpp:179
+msgid "Update All"
+msgstr ""
+
+#: dialogs/rc.cpp:180
+msgid "Update Selected"
+msgstr ""
+
+#: dialogs/rc.cpp:181
+msgid "Status:"
+msgstr ""
+
+#: dialogs/rc.cpp:184
+msgid "QIF Export"
+msgstr ""
+
+#: dialogs/rc.cpp:185
+msgid ""
+"From this dialog you are able to export transactions to a quicken compatible "
+"file, (known as a QIF file, because of the extension). Please enter the "
+"path to the QIF file or select it by clicking on the Browse button.\n"
+"\n"
+"You can choose the file's path, the account and the format of the QIF file "
+"(profile). Choose Account to export all the transactions between the "
+"specified dates or just categories. You can also limit the transactions "
+"that are exported by start and ending date. Once you have pressed the "
+"Export button a message box will appear when the export has completed "
+"detailing how many transactions, categories and payees were exported."
+msgstr ""
+
+#: dialogs/rc.cpp:186
+msgid "File to export to:"
+msgstr ""
+
+#: dialogs/rc.cpp:188
+msgid "Account to export"
+msgstr ""
+
+#: dialogs/rc.cpp:189 dialogs/rc.cpp:297
+msgid "QIF Profile"
+msgstr ""
+
+#: dialogs/rc.cpp:190 dialogs/rc.cpp:298 dialogs/rc.cpp:362
+#: widgets/kmymoneypriceview.cpp:145
+msgid "New..."
+msgstr ""
+
+#: dialogs/rc.cpp:191
+msgid "Contents to Export"
+msgstr ""
+
+#: dialogs/rc.cpp:194
+msgid "Date Range"
+msgstr ""
+
+#: dialogs/rc.cpp:199
+msgid "Search transactions"
+msgstr "Vyhledávání transakcí"
+
+#: dialogs/rc.cpp:200
+msgid "Criteria"
+msgstr "Kritéria"
+
+#: dialogs/rc.cpp:201
+msgid "Define your search criteria"
+msgstr "Zadejte vaše vyhledávací kritéria"
+
+#: dialogs/kfindtransactiondlg.cpp:169 dialogs/rc.cpp:202
+msgid "Text"
+msgstr ""
+
+#: dialogs/rc.cpp:203
+#, fuzzy
+msgid "Contains"
+msgstr "Půjčky"
+
+#: dialogs/rc.cpp:204
+#, fuzzy
+msgid "Does not contain"
+msgstr "Neprovádět nic"
+
+#: dialogs/rc.cpp:205
+msgid "Treat text as regular expression"
+msgstr ""
+
+#: dialogs/rc.cpp:206
+msgid "Case sensitive"
+msgstr "Rozlišovat velikost písmen"
+
+#: dialogs/rc.cpp:209
+msgid "Range"
+msgstr "Rozsah"
+
+#: dialogs/rc.cpp:210
+msgid ""
+"_: To (Date)\n"
+"To"
+msgstr "Do"
+
+#: dialogs/rc.cpp:211
+msgid ""
+"_: From (Date)\n"
+"From"
+msgstr "Od"
+
+#: dialogs/rc.cpp:213
+msgid "Search this amount"
+msgstr "Vyhledat konkrétní částku"
+
+#: dialogs/rc.cpp:214
+msgid "Search amount in the range"
+msgstr "Vyhledat částku v rozsahu"
+
+#: dialogs/rc.cpp:215
+msgid ""
+"_: to (amount)\n"
+"to"
+msgstr "do"
+
+#: dialogs/rc.cpp:216
+msgid ""
+"_: from (amount)\n"
+"from"
+msgstr "od"
+
+#: dialogs/rc.cpp:220
+msgid "Select transactions without payees"
+msgstr "Vybrat transakce bez plátců/příjemců"
+
+#: dialogs/rc.cpp:221
+msgid "Select all"
+msgstr "Vybrat vše"
+
+#: dialogs/rc.cpp:222
+msgid "Select none"
+msgstr ""
+
+#: dialogs/rc.cpp:224
+msgid "Validity"
+msgstr "Správnost"
+
+#: dialogs/rc.cpp:226
+msgid "All states"
+msgstr "Všechny stavy"
+
+#: dialogs/rc.cpp:230
+msgid "All types"
+msgstr "Všechny druhy"
+
+#: dialogs/rc.cpp:234
+msgid "Any transaction"
+msgstr "Libovolná transakce"
+
+#: dialogs/rc.cpp:235
+msgid "Valid transaction"
+msgstr "Bezchybné transakce"
+
+#: dialogs/rc.cpp:236
+msgid "Invalid transaction"
+msgstr "Chybné transakce"
+
+#: dialogs/rc.cpp:237
+msgid "State"
+msgstr "Stav"
+
+#: dialogs/rc.cpp:238
+msgid "Search this number"
+msgstr "Vyhledat toto číslo"
+
+#: dialogs/rc.cpp:239
+msgid "Search number in range"
+msgstr "Vyhledat čísla v rozsahu"
+
+#: dialogs/rc.cpp:240
+msgid ""
+"_: to (number)\n"
+"to"
+msgstr "do"
+
+#: dialogs/rc.cpp:241
+msgid ""
+"_: from (number)\n"
+"from"
+msgstr "od"
+
+#: dialogs/rc.cpp:242
+msgid "text"
+msgstr "text"
+
+#: dialogs/rc.cpp:243
+msgid "warning"
+msgstr "varování"
+
+#: dialogs/rc.cpp:244
+msgid "Result"
+msgstr "Výsledek"
+
+#: dialogs/rc.cpp:254
+msgid "F"
+msgstr ""
+
+#: dialogs/rc.cpp:257 dialogs/rc.cpp:844
+msgid "&Reset"
+msgstr ""
+
+#: dialogs/rc.cpp:258
+#, fuzzy
+msgid "&Find"
+msgstr "Dokončeno"
+
+#: dialogs/rc.cpp:259
+msgid "GnuCash Import Options"
+msgstr ""
+
+#: dialogs/rc.cpp:260
+msgid "Use 'Help' for more information on these options"
+msgstr ""
+
+#: dialogs/rc.cpp:261
+msgid "Investment Handling"
+msgstr ""
+
+#: dialogs/rc.cpp:262
+msgid "One investment account for each stock"
+msgstr ""
+
+#: dialogs/rc.cpp:263
+msgid "One investment account for all stocks"
+msgstr ""
+
+#: dialogs/rc.cpp:264
+msgid "Prompt for an investment account for each stock"
+msgstr ""
+
+#: dialogs/rc.cpp:265
+msgid "Online price quotes"
+msgstr ""
+
+#: dialogs/rc.cpp:266
+msgid "Use Finance::Quote for share price quotes"
+msgstr ""
+
+#: dialogs/rc.cpp:267
+msgid "Scheduled Transactions"
+msgstr ""
+
+#: dialogs/rc.cpp:268
+msgid "Drop suspect scheduled transactions"
+msgstr ""
+
+#: dialogs/rc.cpp:269
+msgid "Decoding option"
+msgstr ""
+
+#: dialogs/rc.cpp:270
+msgid "Decode using"
+msgstr ""
+
+#: dialogs/rc.cpp:271
+#, fuzzy
+msgid "Transaction Notes option"
+msgstr "Volby transakce"
+
+#: dialogs/rc.cpp:272
+msgid "Use transaction notes on non-split transactions"
+msgstr ""
+
+#: dialogs/rc.cpp:273
+msgid "Debug Options"
+msgstr ""
+
+#: dialogs/rc.cpp:274
+msgid "General debug data"
+msgstr ""
+
+#: dialogs/rc.cpp:275
+msgid "Display XML data"
+msgstr ""
+
+#: dialogs/rc.cpp:276
+msgid "Anonymize data"
+msgstr ""
+
+#: dialogs/rc.cpp:281
+msgid "Online Quotes - Select price source"
+msgstr ""
+
+#: dialogs/rc.cpp:284
+msgid ""
+"This price source is not known to KMyMoney. Please select an option below."
+msgstr ""
+
+#: dialogs/rc.cpp:285
+msgid "Do not perform online quotes for this investment"
+msgstr ""
+
+#: dialogs/rc.cpp:286
+msgid "Select a known KMyMoney source from the list below"
+msgstr ""
+
+#: dialogs/rc.cpp:287
+msgid ""
+"Use the following name for the price source.\n"
+"(Click Help for further information.)"
+msgstr ""
+
+#: dialogs/rc.cpp:288
+msgid "Always use this selection for this price source."
+msgstr ""
+
+#: dialogs/rc.cpp:289
+msgid "QIF Import"
+msgstr ""
+
+#: dialogs/rc.cpp:290
+msgid ""
+"From this dialog you are able to import transactions from a Quicken<b>&trade;"
+"</b> compatible file, (known as a QIF file, because of the extension).<p>\n"
+"\n"
+"Please enter the path to the QIF file or select it by clicking on the Browse "
+"button. Once you have the file's path press the Import button and KMyMoney "
+"will import all the transactions, categories and payees it finds."
+msgstr ""
+
+#: dialogs/rc.cpp:291
+msgid "QIF File to Import:"
+msgstr ""
+
+#: dialogs/rc.cpp:292
+msgid "Import options"
+msgstr ""
+
+#: dialogs/rc.cpp:293
+#, fuzzy
+msgid "Bank statement"
+msgstr "Neplatný výpis"
+
+#: dialogs/rc.cpp:294
+msgid "Other application"
+msgstr ""
+
+#: dialogs/rc.cpp:295
+msgid ""
+"Select <b>Bank statement</b> turns on automatic category matching which is "
+"turned off in case of <b>Historic data</b>. Use the latter if you import "
+"files from other Personal Finance Management software."
+msgstr ""
+
+#: dialogs/rc.cpp:296
+#, fuzzy
+msgid "Source of QIF"
+msgstr "Zdroj"
+
+#: dialogs/rc.cpp:302
+msgid "Verify Import"
+msgstr ""
+
+#: dialogs/rc.cpp:304
+msgid "Ok"
+msgstr ""
+
+#: dialogs/rc.cpp:306
+msgid "MyDialog"
+msgstr ""
+
+#: dialogs/rc.cpp:310
+msgid "File Information"
+msgstr ""
+
+#: dialogs/rc.cpp:316
+msgid "Last modified on"
+msgstr ""
+
+#: dialogs/rc.cpp:319
+msgid "Base currency"
+msgstr ""
+
+#: dialogs/rc.cpp:322
+msgid "Created on"
+msgstr ""
+
+#: dialogs/rc.cpp:325
+msgid "Accounts/Categories"
+msgstr ""
+
+#: dialogs/rc.cpp:328
+msgid "Closed"
+msgstr ""
+
+#: dialogs/rc.cpp:331
+msgid "Prices"
+msgstr ""
+
+#: dialogs/rc.cpp:337
+msgid "Splits"
+msgstr ""
+
+#: dialogs/rc.cpp:338
+msgid "Price Editor"
+msgstr ""
+
+#: dialogs/rc.cpp:339
+msgid "Show all stored prices"
+msgstr "Zobrazit všechny uložené ceny"
+
+#: dialogs/rc.cpp:343
+#, fuzzy
+msgid "Delete Range..."
+msgstr "Odstranit rozsah..."
+
+#: dialogs/rc.cpp:346
+msgid "New Account Dialog"
+msgstr ""
+
+#: dialogs/rc.cpp:349
+msgid "Opening information"
+msgstr "Otevírací informace"
+
+#: dialogs/rc.cpp:350
+msgid "Currency:"
+msgstr "Měna:"
+
+#: dialogs/rc.cpp:352 dialogs/rc.cpp:793
+msgid "Date:"
+msgstr "Datum:"
+
+#: dialogs/rc.cpp:353
+msgid "Balance:"
+msgstr "Bilance:"
+
+#: dialogs/rc.cpp:355
+msgid "Last check number:"
+msgstr ""
+
+#: dialogs/rc.cpp:356
+msgid "Notes:"
+msgstr "Poznámky:"
+
+#: dialogs/rc.cpp:357
+msgid "No auto-VAT-assignment"
+msgstr ""
+
+#: dialogs/rc.cpp:358 dialogs/rc.cpp:441
+msgid "Price entry"
+msgstr ""
+
+#: dialogs/rc.cpp:359
+msgid "Preferred Account"
+msgstr "Upřednostňovaný účet"
+
+#: dialogs/rc.cpp:363
+msgid "Number:"
+msgstr "Číslo:"
+
+#: dialogs/rc.cpp:364 dialogs/rc.cpp:395
+msgid "BIC"
+msgstr "BIC"
+
+#: dialogs/rc.cpp:367
+msgid "Hierarchy"
+msgstr "Hierarchie"
+
+#: dialogs/rc.cpp:368
+msgid "Subaccount"
+msgstr "Podúčet"
+
+#: dialogs/rc.cpp:369
+msgid "Limits"
+msgstr "Limity"
+
+#: dialogs/rc.cpp:370
+msgid ""
+"This page allows to setup certain limits. KMyMoney will warn you when the "
+"account balance reaches a limit."
+msgstr ""
+
+#: dialogs/rc.cpp:372
+msgid "Absolute limit"
+msgstr ""
+
+#: dialogs/rc.cpp:373
+msgid "Maximum credit limit"
+msgstr ""
+
+#: dialogs/rc.cpp:374
+msgid "Minimum balance"
+msgstr ""
+
+#: dialogs/rc.cpp:375
+msgid "Early warning"
+msgstr ""
+
+#: dialogs/rc.cpp:377
+msgid "VAT details"
+msgstr ""
+
+#: dialogs/rc.cpp:378
+msgid "VAT category"
+msgstr ""
+
+#: dialogs/rc.cpp:379
+msgid "VAT percentage"
+msgstr ""
+
+#: dialogs/rc.cpp:380
+msgid "Enable auto VAT assignment"
+msgstr ""
+
+#: dialogs/rc.cpp:381
+msgid "Amount entered"
+msgstr ""
+
+#: dialogs/rc.cpp:382
+msgid "Gross amount"
+msgstr ""
+
+#: dialogs/rc.cpp:383
+msgid "Net amount"
+msgstr ""
+
+#: dialogs/rc.cpp:384
+msgid "Include on Tax Reports"
+msgstr "Zahrnovat daňě ve výkazech"
+
+#: dialogs/rc.cpp:387
+msgid "New Institution Dialog"
+msgstr "Dialog nové instituce"
+
+#: dialogs/rc.cpp:388
+msgid "Institution Details"
+msgstr "Podrobnosti o instituci"
+
+#: dialogs/rc.cpp:390
+msgid "City:"
+msgstr "Město:"
+
+#: dialogs/rc.cpp:394
+msgid "Routing Number:"
+msgstr "Směrové číslo:"
+
+#: dialogs/rc.cpp:398
+msgid "New Budget"
+msgstr "Nový rozpočet"
+
+#: dialogs/rc.cpp:403
+msgid "New Equity"
+msgstr ""
+
+#: dialogs/rc.cpp:406 dialogs/rc.cpp:407
+msgid "Trading Symbol of the stock or mutual fund, not required."
+msgstr "Obchodní symbol akcie, nebo podílového fondu není vyžadován."
+
+#: dialogs/rc.cpp:414 dialogs/rc.cpp:415
+msgid "Name of the company, or mutual fund."
+msgstr "Jméno společnosti, nebo podílového fondu."
+
+#: dialogs/rc.cpp:418
+msgid "New File Dialog"
+msgstr ""
+
+#: dialogs/rc.cpp:419
+msgid ""
+"Use this dialog to enter personal information about yourself.\n"
+"\n"
+"All information is optional and is provided to personalize\n"
+"your KMyMoney file."
+msgstr ""
+
+#: dialogs/rc.cpp:430
+msgid "New Investment wizard"
+msgstr "Průvodce novou investicí"
+
+#: dialogs/rc.cpp:431
+msgid "Investment Type"
+msgstr "Druh investice"
+
+#: dialogs/rc.cpp:432
+#, fuzzy
+msgid "This wizard allows you to create a new investment."
+msgstr "Tato stránka vám umožňuje zvolit nadřazený účet."
+
+#: dialogs/rc.cpp:433
+msgid ""
+"The first step in this process requires to select the type of investment. "
+"The following steps collect more details about the investment from you."
+msgstr ""
+
+#: dialogs/rc.cpp:434
+msgid "Type of investment"
+msgstr ""
+
+#: dialogs/rc.cpp:438
+msgid "Investment details"
+msgstr ""
+
+#: dialogs/rc.cpp:439
+msgid ""
+"Enter the details below and click <b>Next</b> to continue entering the "
+"online update details."
+msgstr ""
+
+#: dialogs/rc.cpp:442 dialogs/rc.cpp:728
+msgid "Fraction"
+msgstr ""
+
+#: dialogs/rc.cpp:443
+msgid "Trading Currency"
+msgstr ""
+
+#: dialogs/rc.cpp:444
+msgid "Full name"
+msgstr ""
+
+#: dialogs/rc.cpp:445
+msgid "AMEX"
+msgstr ""
+
+#: dialogs/rc.cpp:446
+msgid "EUREX"
+msgstr ""
+
+#: dialogs/rc.cpp:447
+msgid "FUND"
+msgstr ""
+
+#: dialogs/rc.cpp:448
+msgid "NASDAQ"
+msgstr ""
+
+#: dialogs/rc.cpp:449
+msgid "NYSE"
+msgstr ""
+
+#: dialogs/rc.cpp:450
+msgid "XETRA"
+msgstr ""
+
+#: dialogs/rc.cpp:451
+msgid "Trading symbol"
+msgstr ""
+
+#: dialogs/rc.cpp:452
+msgid "Identification"
+msgstr ""
+
+#: dialogs/rc.cpp:453
+msgid "Enter the ticker symbol (e.g. RHAT)."
+msgstr ""
+
+#: dialogs/rc.cpp:454
+msgid "Enter the CUSIP/ISIN/WKN identification number here"
+msgstr ""
+
+#: dialogs/rc.cpp:455
+msgid "Trading market"
+msgstr ""
+
+#: dialogs/rc.cpp:456
+msgid "Online Update"
+msgstr ""
+
+#: dialogs/rc.cpp:457
+msgid ""
+"Select an online source and click <b>Finish</b> to store the investment "
+"data. If you don't want to use online updates, just leave the data as is."
+msgstr ""
+
+#: dialogs/rc.cpp:458
+msgid "Use Finance::Quote"
+msgstr ""
+
+#: dialogs/rc.cpp:460
+msgid "Factor"
+msgstr ""
+
+#: dialogs/rc.cpp:461
+msgid "New Loan Wizard"
+msgstr ""
+
+#: dialogs/rc.cpp:462
+msgid "New Loan Account Wizard"
+msgstr ""
+
+#: dialogs/rc.cpp:463
+msgid ""
+"\n"
+"Welcome to the New Loan Account Wizard which will guide you through the "
+"creation of a new loan e.g. for your home, your car or any other loan that "
+"you pay or gain interest for.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+
+#: dialogs/rc.cpp:464
+msgid "Edit Loan Account Wizard"
+msgstr ""
+
+#: dialogs/rc.cpp:465
+msgid ""
+"\n"
+"Welcome to the Edit Loan Account Wizard. Please use this wizard to modify "
+"information about your loan account.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+
+#: dialogs/rc.cpp:467
+msgid ""
+"\n"
+"In the first step, KMyMoney will ask you some general information about the "
+"loan account to be created."
+msgstr ""
+
+#: dialogs/rc.cpp:468 dialogs/rc.cpp:522 dialogs/rc.cpp:610
+msgid "1. General Information"
+msgstr ""
+
+#: dialogs/rc.cpp:469
+msgid ""
+"\n"
+"2. Calculate Loan\n"
+"\n"
+"3. Payments"
+msgstr ""
+
+#: dialogs/rc.cpp:470
+msgid "Edit selection"
+msgstr ""
+
+#: dialogs/rc.cpp:471
+msgid ""
+"\n"
+"Please select, which data of the loan you want to modify."
+msgstr ""
+
+#: dialogs/rc.cpp:472
+msgid "Modify the interest rate"
+msgstr ""
+
+#: dialogs/rc.cpp:473
+msgid "Modify additional fees"
+msgstr ""
+
+#: dialogs/rc.cpp:474
+msgid "Modify other loan information"
+msgstr ""
+
+#: dialogs/rc.cpp:475
+msgid "Effective date"
+msgstr ""
+
+#: dialogs/rc.cpp:478
+msgid "When should the changes become active?"
+msgstr ""
+
+#: dialogs/rc.cpp:479
+msgid "Lending or borrowing money"
+msgstr ""
+
+#: dialogs/rc.cpp:480
+msgid ""
+"\n"
+"Do you borrow or lend money?"
+msgstr ""
+
+#: dialogs/rc.cpp:483
+msgid "Name of the loan"
+msgstr ""
+
+#: dialogs/rc.cpp:484
+msgid ""
+"\n"
+"How do you want to call this loan? Examples for names are 'car loan', "
+"'school loan', 'home owner loan'."
+msgstr ""
+
+#: dialogs/rc.cpp:486
+msgid "TextLabel6"
+msgstr ""
+
+#: dialogs/rc.cpp:487
+msgid "TextLabel7"
+msgstr ""
+
+#: dialogs/rc.cpp:488
+msgid "Type of interest"
+msgstr ""
+
+#: dialogs/rc.cpp:489
+msgid ""
+"\n"
+"Is the interest of this loan fixed over a period of time or is it adapted "
+"from time to time? If the interest rate changes during the amortization "
+"phase of the loan you should choose the option 'variable interest rate'."
+msgstr ""
+
+#: dialogs/rc.cpp:490
+msgid "Fixed interest rate"
+msgstr ""
+
+#: dialogs/rc.cpp:491
+msgid "Variable interest rate"
+msgstr ""
+
+#: dialogs/rc.cpp:492
+msgid "Payments?"
+msgstr ""
+
+#: dialogs/rc.cpp:493
+msgid ""
+"\n"
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?"
+msgstr ""
+
+#: dialogs/rc.cpp:494
+msgid "No, no payments were made yet."
+msgstr ""
+
+#: dialogs/rc.cpp:495
+msgid "Yes, payments were made."
+msgstr ""
+
+#: dialogs/rc.cpp:496
+msgid ""
+"Note: Payments made to obtain the loan (e.g. Dissagio) are not considered as "
+"payments in this context."
+msgstr ""
+
+#: dialogs/rc.cpp:497
+msgid "Recording payments?"
+msgstr ""
+
+#: dialogs/rc.cpp:498
+msgid ""
+"\n"
+"Do you want to record all payments of this loan with KMyMoney?"
+msgstr ""
+
+#: dialogs/rc.cpp:499
+msgid "Yes, record all payments."
+msgstr ""
+
+#: dialogs/rc.cpp:500
+msgid "No, only record payments since the beginning of this year."
+msgstr ""
+
+#: dialogs/rc.cpp:501
+msgid "Date of next interest change"
+msgstr ""
+
+#: dialogs/rc.cpp:502
+msgid ""
+"\n"
+"Select the date when the interest rate for this loan will be modified and "
+"the frequency of the future changes."
+msgstr ""
+
+#: dialogs/rc.cpp:503
+msgid "Next interest change on"
+msgstr ""
+
+#: dialogs/rc.cpp:504
+msgid "Time until next change"
+msgstr ""
+
+#: dialogs/rc.cpp:506 dialogs/rc.cpp:571
+msgid ""
+"\n"
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+
+#: dialogs/rc.cpp:507
+msgid "Current amount"
+msgstr ""
+
+#: dialogs/rc.cpp:510
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the amount for principal and interest then enter "
+"it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+
+#: dialogs/rc.cpp:512 dialogs/rc.cpp:545
+msgid ""
+"\n"
+"Please enter the interest rate or leave the field empty to calculate it."
+msgstr ""
+
+#: dialogs/rc.cpp:514
+msgid "Current rate"
+msgstr ""
+
+#: dialogs/rc.cpp:516
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the interest rate then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+
+#: dialogs/rc.cpp:517
+msgid "Date of first payment"
+msgstr ""
+
+#: dialogs/rc.cpp:520
+msgid "Calculate Loan"
+msgstr ""
+
+#: dialogs/rc.cpp:521
+msgid ""
+"\n"
+"You have successfully entered the general information about your loan. Next, "
+"KMyMoney needs some information about the calculation of the loan."
+msgstr ""
+
+#: dialogs/rc.cpp:523 dialogs/rc.cpp:611
+msgid ""
+"\n"
+"2. Calculate Loan"
+msgstr ""
+
+#: dialogs/rc.cpp:524 dialogs/rc.cpp:612
+msgid ""
+"\n"
+"3. Payments"
+msgstr ""
+
+#: dialogs/rc.cpp:526
+msgid ""
+"\n"
+"How often will there be payments made to this loan?"
+msgstr ""
+
+#: dialogs/rc.cpp:527
+msgid "Interest calculation"
+msgstr ""
+
+#: dialogs/rc.cpp:528
+msgid ""
+"\n"
+"When does the actual interest rate get calculated?"
+msgstr ""
+
+#: dialogs/rc.cpp:529
+msgid "When the payment is received."
+msgstr ""
+
+#: dialogs/rc.cpp:530
+msgid "When the payment is due."
+msgstr ""
+
+#: dialogs/rc.cpp:534 dialogs/rc.cpp:547 dialogs/rc.cpp:560 dialogs/rc.cpp:573
+#: dialogs/rc.cpp:586 dialogs/rc.cpp:598 dialogs/rc.cpp:679
+msgid "Loan amount:"
+msgstr ""
+
+#: dialogs/rc.cpp:535 dialogs/rc.cpp:548 dialogs/rc.cpp:561 dialogs/rc.cpp:574
+#: dialogs/rc.cpp:587 dialogs/rc.cpp:599 dialogs/rc.cpp:633 dialogs/rc.cpp:671
+msgid "Interest rate:"
+msgstr ""
+
+#: dialogs/rc.cpp:536 dialogs/rc.cpp:549 dialogs/rc.cpp:562 dialogs/rc.cpp:575
+#: dialogs/rc.cpp:588 dialogs/rc.cpp:600 dialogs/rc.cpp:669
+msgid "Term:"
+msgstr ""
+
+#: dialogs/rc.cpp:537 dialogs/rc.cpp:550 dialogs/rc.cpp:563 dialogs/rc.cpp:576
+#: dialogs/rc.cpp:589 dialogs/rc.cpp:601 dialogs/rc.cpp:622 dialogs/rc.cpp:630
+#: dialogs/rc.cpp:677
+msgid "Principal + Interest:"
+msgstr ""
+
+#: dialogs/rc.cpp:538 dialogs/rc.cpp:551 dialogs/rc.cpp:564 dialogs/rc.cpp:577
+#: dialogs/rc.cpp:583 dialogs/rc.cpp:585 dialogs/rc.cpp:590 dialogs/rc.cpp:602
+msgid "Final amortization payment"
+msgstr ""
+
+#: dialogs/rc.cpp:557
+msgid "Duration"
+msgstr ""
+
+#: dialogs/rc.cpp:558
+msgid ""
+"\n"
+"Please enter the term of this loan or leave the field empty to calculate it. "
+"The term is the time that is required to fully repay the loan. This time "
+"might be different from the time your loan contract is signed for."
+msgstr ""
+
+#: dialogs/rc.cpp:584
+msgid ""
+"\n"
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+
+#: dialogs/rc.cpp:596
+msgid "Calculation Overview"
+msgstr ""
+
+#: dialogs/rc.cpp:597
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown in the overview below. You can "
+"accept these values by selecting \"Next\" or change them by choosing \"Back"
+"\" to return to the input field for the information you want to change."
+msgstr ""
+
+#: dialogs/rc.cpp:609
+msgid ""
+"\n"
+"In the following steps, KMyMoney supports you in setting up categories and "
+"schedules for your loan payments."
+msgstr ""
+
+#: dialogs/rc.cpp:614
+msgid ""
+"\n"
+"Please select the category you want to assign the interest payments to or "
+"create a new category."
+msgstr ""
+
+#: dialogs/rc.cpp:615
+msgid "Additional Fees"
+msgstr ""
+
+#: dialogs/rc.cpp:616
+msgid ""
+"\n"
+"If your regular payment contains any additional fees, click on the button "
+"\"Additional fees\" to enter them."
+msgstr ""
+
+#: dialogs/rc.cpp:617
+msgid "= periodical payment:"
+msgstr ""
+
+#: dialogs/rc.cpp:623
+msgid ""
+"If no additional fees are included in your periodical payment or you have "
+"entered all such fees, then click on \"Next\"."
+msgstr ""
+
+#: dialogs/rc.cpp:625
+msgid ""
+"KMyMoney will create a schedule for this payment and reminds you whenever a "
+"payment must be made.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+
+#: dialogs/rc.cpp:626
+msgid "First payment due on:"
+msgstr ""
+
+#: dialogs/rc.cpp:627
+msgid "Make payment from/to:"
+msgstr ""
+
+#: dialogs/rc.cpp:629
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown below. If you want to accept these "
+"values use the \"Finish\" button to update your account, otherwise use the "
+"\"Back\" button to modify your settings."
+msgstr ""
+
+#: dialogs/rc.cpp:631
+msgid "Additional fees:"
+msgstr ""
+
+#: dialogs/rc.cpp:632
+msgid "Total payment:"
+msgstr ""
+
+#: dialogs/rc.cpp:634
+msgid "Valid from:"
+msgstr ""
+
+#: dialogs/rc.cpp:635
+msgid "Affected payments:"
+msgstr ""
+
+#: dialogs/rc.cpp:645
+msgid "Press this to create a new asset account"
+msgstr ""
+
+#: dialogs/rc.cpp:648
+msgid ""
+"\n"
+"This page summarizes the data you entered. If you need to modify anything, "
+"please use the \"Back\" button to go to respective page. Otherwise use the "
+"\"Finish\" button to create the account."
+msgstr ""
+
+#: dialogs/rc.cpp:650
+msgid "Payee:"
+msgstr ""
+
+#: dialogs/rc.cpp:653
+msgid "First payment:"
+msgstr ""
+
+#: dialogs/rc.cpp:655
+msgid "Amount is:"
+msgstr ""
+
+#: dialogs/rc.cpp:656
+msgid "Loan calculation"
+msgstr ""
+
+#: dialogs/rc.cpp:660
+msgid "Periodic Payment:"
+msgstr ""
+
+#: dialogs/rc.cpp:661
+msgid "Additional Fees:"
+msgstr ""
+
+#: dialogs/rc.cpp:662
+msgid "Interest category:"
+msgstr ""
+
+#: dialogs/rc.cpp:663
+msgid "Payment from:"
+msgstr ""
+
+#: dialogs/rc.cpp:666
+msgid "Next due date:"
+msgstr "Další datum splatnosti:"
+
+#: dialogs/rc.cpp:673
+msgid "Final Payment:"
+msgstr ""
+
+#: dialogs/rc.cpp:675
+msgid "Interest is due:"
+msgstr ""
+
+#: dialogs/rc.cpp:680
+msgid "Payment frequency:"
+msgstr ""
+
+#: dialogs/rc.cpp:682
+msgid "Online Quote Configuration"
+msgstr ""
+
+#: dialogs/rc.cpp:687
+msgid "Perl Location:"
+msgstr ""
+
+#: dialogs/rc.cpp:688
+msgid "Script:"
+msgstr ""
+
+#: dialogs/rc.cpp:690
+msgid "Reassign payees"
+msgstr ""
+
+#: dialogs/rc.cpp:691
+msgid ""
+"The transactions associated with the selected payees need to be re-assigned "
+"to a different payee before the selected payees can be deleted. Please "
+"select a payee from the list below."
+msgstr ""
+
+#: dialogs/rc.cpp:692
+msgid "Available payees:"
+msgstr ""
+
+#: dialogs/rc.cpp:693
+msgid "Assign deleted names to the above selected payee's matching list"
+msgstr ""
+
+#: dialogs/rc.cpp:696
+msgid "PluginDlg"
+msgstr ""
+
+#: dialogs/rc.cpp:697
+msgid "PlugIn"
+msgstr ""
+
+#: dialogs/rc.cpp:698 widgets/transaction.cpp:1071
+#: widgets/transaction.cpp:1658
+msgid "Status"
+msgstr ""
+
+#: dialogs/rc.cpp:699
+msgid "Feature"
+msgstr ""
+
+#: dialogs/rc.cpp:703
+msgid "Reconciliation Dialog"
+msgstr ""
+
+#: dialogs/rc.cpp:704
+msgid ""
+"This dialog will assist in helping you to balance your account.\n"
+"\n"
+"Click on an appropriate transaction within one of the two list views to mark "
+"it as reconciled. To create a transaction or edit\n"
+"a transaction you can return to the register by clicking on the Edit "
+"Transactions button.\n"
+"\n"
+"Your account is balanced when the Difference is Zero. Click on the Finish "
+"button to save the reconciled transactions."
+msgstr ""
+
+#: dialogs/rc.cpp:705
+msgid "Withdrawals"
+msgstr ""
+
+#: dialogs/rc.cpp:707 dialogs/rc.cpp:708 dialogs/rc.cpp:822
+msgid "$"
+msgstr ""
+
+#: dialogs/rc.cpp:710
+msgid "Previous Balance:"
+msgstr "Předchozí bilance:"
+
+#: dialogs/rc.cpp:711 dialogs/rc.cpp:713 dialogs/rc.cpp:715 dialogs/rc.cpp:717
+#: dialogs/rc.cpp:820
+msgid "0"
+msgstr ""
+
+#: dialogs/rc.cpp:712
+msgid "Ending Balance:"
+msgstr "Konečná bilance:"
+
+#: dialogs/rc.cpp:714
+msgid "Cleared Balance:"
+msgstr ""
+
+#: dialogs/rc.cpp:716
+msgid "Difference:"
+msgstr ""
+
+#: dialogs/rc.cpp:718
+msgid "Edit Transactions..."
+msgstr "Upravit transakce..."
+
+#: dialogs/rc.cpp:721
+msgid "Security List Editor"
+msgstr ""
+
+#: dialogs/rc.cpp:726
+msgid "Market"
+msgstr ""
+
+#: dialogs/rc.cpp:729
+msgid "Cash Fraction"
+msgstr ""
+
+#: dialogs/rc.cpp:730
+msgid "Add..."
+msgstr ""
+
+#: dialogs/rc.cpp:732 widgets/kmymoneypriceview.cpp:157
+#, fuzzy
+msgid "Delete..."
+msgstr "Odstranit rozsah..."
+
+#: dialogs/rc.cpp:733
+msgid "Show national currencies"
+msgstr ""
+
+#: dialogs/rc.cpp:735
+msgid "KMyMoney - Select Database"
+msgstr ""
+
+#: dialogs/rc.cpp:736
+msgid "CAUTION!"
+msgstr ""
+
+#: dialogs/rc.cpp:737
+msgid ""
+"<font color=\"#ff2727\">This software is still in an experimental stage, and "
+"there are still some known response time problems. Please be patient; we are "
+"working on them.\n"
+"As always, please make sure you have adequate backups of your data.</font>"
+msgstr ""
+
+#: dialogs/rc.cpp:738
+msgid "Database Type"
+msgstr ""
+
+#: dialogs/rc.cpp:739
+msgid "Database Name"
+msgstr ""
+
+#: dialogs/rc.cpp:740
+msgid "Host Name"
+msgstr ""
+
+#: dialogs/rc.cpp:741
+msgid "User Name"
+msgstr ""
+
+#: dialogs/rc.cpp:743
+#, fuzzy
+msgid "Preload &all data"
+msgstr "Osobní informace"
+
+#: dialogs/rc.cpp:745
+#, fuzzy
+msgid "&Generate SQL"
+msgstr "Obecné"
+
+#: dialogs/rc.cpp:747
+msgid "Ca&ncel"
+msgstr ""
+
+#: dialogs/rc.cpp:762 widgets/rc.cpp:172
+msgid "Sort options"
+msgstr ""
+
+#: dialogs/rc.cpp:763
+msgid "Use default"
+msgstr ""
+
+#: dialogs/rc.cpp:767
+msgid "Correct splits"
+msgstr ""
+
+#: dialogs/rc.cpp:769
+msgid "How do you want to proceed?"
+msgstr ""
+
+#: dialogs/rc.cpp:770
+msgid "Continue to edit splits"
+msgstr "Pokračovat v rozdělování transakce"
+
+#: dialogs/rc.cpp:771
+#, c-format
+msgid "Change total amount of transaction to %1."
+msgstr ""
+
+#: dialogs/rc.cpp:772
+msgid "Distribute difference of %1 among all splits."
+msgstr ""
+
+#: dialogs/rc.cpp:773
+msgid "Leave %1 unassigned."
+msgstr ""
+
+#: dialogs/rc.cpp:776
+msgid "Split transaction"
+msgstr ""
+
+#: dialogs/rc.cpp:777
+msgid "<b>11,00<b>"
+msgstr ""
+
+#: dialogs/rc.cpp:778
+msgid "<b>111,00<b>"
+msgstr ""
+
+#: dialogs/rc.cpp:779
+msgid "Unassigned"
+msgstr ""
+
+#: dialogs/rc.cpp:780
+msgid "Sum of splits"
+msgstr ""
+
+#: dialogs/rc.cpp:781
+msgid "100,00"
+msgstr ""
+
+#: dialogs/rc.cpp:782
+msgid "Transaction amount"
+msgstr ""
+
+#: dialogs/rc.cpp:783
+#, fuzzy
+msgid "Merge"
+msgstr "Více"
+
+#: dialogs/rc.cpp:784
+msgid "Merges splits with the same category to one split"
+msgstr ""
+
+#: dialogs/rc.cpp:785
+msgid ""
+"In case you have multiple split entries to the same category and you like to "
+"keep them as a single split, press this button. The amount for identical "
+"categories will be added and stored in a single split for that category."
+msgstr ""
+
+#: dialogs/rc.cpp:786
+#, fuzzy
+msgid "Clear &Zero"
+msgstr "Chilské peso"
+
+#: dialogs/rc.cpp:787
+msgid "Removes all splits that have a value of zero."
+msgstr ""
+
+#: dialogs/rc.cpp:791
+msgid "New price entry"
+msgstr ""
+
+#: dialogs/rc.cpp:799
+msgid "Void mark"
+msgstr ""
+
+#: dialogs/rc.cpp:800
+msgid "Opening Balance text"
+msgstr ""
+
+#: dialogs/rc.cpp:801
+msgid "Type field text"
+msgstr ""
+
+#: dialogs/rc.cpp:802
+msgid "Account delimiter"
+msgstr ""
+
+#: dialogs/rc.cpp:804
+msgid "Attempt to match similar transactions"
+msgstr ""
+
+#: dialogs/rc.cpp:806 dialogs/rc.cpp:808
+msgid "The format of the dates in the QIF file."
+msgstr ""
+
+#: dialogs/rc.cpp:809 dialogs/rc.cpp:811
+msgid ""
+"If a QIF file contains date entries with years represented with two digits "
+"then either an apostrophe or a slash may be used to delimit the year in the "
+"dates for certain centuries. This enables 1905 to be distinguished from "
+"2005. Specify here which range of years will have year delimited by an "
+"apostrophe (eg. for Quicken this is usually 1900-1949)."
+msgstr ""
+
+#: dialogs/rc.cpp:810
+msgid "Apostrophe Handling"
+msgstr ""
+
+#: dialogs/rc.cpp:812
+msgid "Amounts"
+msgstr ""
+
+#: dialogs/rc.cpp:813
+msgid "Field"
+msgstr ""
+
+#: dialogs/rc.cpp:814
+msgid "QIF-Record"
+msgstr ""
+
+#: dialogs/rc.cpp:815 dialogs/rc.cpp:833
+msgid "Decimal Symbol"
+msgstr ""
+
+#: dialogs/rc.cpp:816
+msgid "Thousand Delimiter"
+msgstr ""
+
+#: dialogs/rc.cpp:817
+msgid "SortColumnInvisible"
+msgstr ""
+
+#: dialogs/rc.cpp:819
+msgid "T"
+msgstr ""
+
+#: dialogs/rc.cpp:821
+msgid "Split-Value"
+msgstr ""
+
+#: dialogs/rc.cpp:824
+msgid "Commission"
+msgstr ""
+
+#: dialogs/rc.cpp:825
+msgid "O"
+msgstr ""
+
+#: dialogs/rc.cpp:826
+msgid "2"
+msgstr ""
+
+#: dialogs/rc.cpp:828
+msgid "I"
+msgstr ""
+
+#: dialogs/rc.cpp:829
+msgid "3"
+msgstr ""
+
+#: dialogs/rc.cpp:831
+msgid "Q"
+msgstr ""
+
+#: dialogs/rc.cpp:832
+msgid "4"
+msgstr ""
+
+#: dialogs/rc.cpp:834
+msgid "Thousands Separator"
+msgstr ""
+
+#: dialogs/rc.cpp:836
+msgid "Output filter location"
+msgstr ""
+
+#: dialogs/rc.cpp:837
+msgid "Input filter file type"
+msgstr ""
+
+#: dialogs/rc.cpp:838
+msgid "*.qif"
+msgstr ""
+
+#: dialogs/rc.cpp:839
+msgid "Input filter location"
+msgstr ""
+
+#: dialogs/rc.cpp:843
+msgid "Rename"
+msgstr "Přejmenovat"
+
+#: dialogs/kselecttransactionsdlg.cpp:44
+msgid "Select Transaction"
+msgstr ""
+
+#: dialogs/kselecttransactionsdlg.cpp:45
+msgid ""
+"Select a transaction and press the OK button or use Cancel to select none."
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:62
+msgid "Investment detail wizard"
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:82
+msgid "Security detail wizard"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:121 dialogs/knewinvestmentwizard.cpp:109
+msgid ""
+"_: default price mode\n"
+"<default>"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:122 dialogs/knewinvestmentwizard.cpp:110
+msgid "Price per share"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:123 dialogs/knewinvestmentwizard.cpp:111
+msgid "Total for all shares"
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:129
+#, fuzzy
+msgid "This wizard allows you to modify the selected investment."
+msgstr "Tato stránka vám umožňuje zvolit nadřazený účet."
+
+#: dialogs/knewinvestmentwizard.cpp:132
+#, fuzzy
+msgid "This wizard allows you to modify the selected security."
+msgstr "Tato stránka vám umožňuje zvolit nadřazený účet."
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid ""
+"The selected symbol is already on file. Do you want to reuse the existing "
+"security?"
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:186
+#, fuzzy
+msgid "Security found"
+msgstr "Cenina"
+
+#: dialogs/knewinvestmentwizard.cpp:309
+msgid "Unable to create all objects for the investment"
+msgstr ""
+
+#: dialogs/keditequityentrydlg.cpp:78
+msgid "Change the price information of the selected entry."
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:64 widgets/kmymoneybriefschedule.cpp:59
+msgid "&Skip"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:66 widgets/kmymoneybriefschedule.cpp:61
+msgid "Skip this transaction"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:67
+msgid ""
+"Use this to skip importing this transaction and proceed with the next one."
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:72
+msgid "Create a new account/category"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:73
+msgid "Use this to add a new account/category to the file"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:77
+msgid "&Abort"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:79
+msgid "Abort the import operation and dismiss all changes"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:80
+msgid ""
+"Use this to abort the import. Your financial data will be in the state "
+"before you started the QIF import."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:110
+msgid "Is a sub account"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:184
+msgid "VAT account"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:474
+msgid ""
+"You have not specified a name.\n"
+"Please fill in this field."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:482
+msgid "Please select a parent account."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:489 dialogs/knewaccountdlg.cpp:1029
+msgid "<No Institution>"
+msgstr "<Žádná instituce>"
+
+#: dialogs/knewaccountdlg.cpp:552
+msgid ""
+"An account named <b>%1</b> already exists. You cannot create a second "
+"account with the same name."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:567
+msgid ""
+"A category named <b>%1</b> already exists. You cannot create a second "
+"category with the same name."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid ""
+"You have selected to suppress the display of unused categories in the "
+"KMyMoney configuration dialog. The category you just created will therefore "
+"only be shown if it is used. Otherwise, it will be hidden in the accounts/"
+"categories view."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid "Hidden categories"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:927 dialogs/knewaccountdlg.cpp:979
+#, c-format
+msgid "Is a sub account of %1"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:1082
+msgid "Cannot add institution"
+msgstr "Nemůžu přidat instituci"
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid ""
+"This dialog does not allow to create new payees. Please pick a payee from "
+"the list."
+msgstr ""
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid "Payee creation"
+msgstr ""
+
+#: dialogs/kimportdlg.cpp:69
+msgid "Use this to start the import operation"
+msgstr ""
+
+#: dialogs/kimportdlg.cpp:110
+msgid ""
+"%1|Import files\n"
+"%2|All files (*.*)"
+msgstr ""
+
+#: dialogs/kimportdlg.cpp:111
+msgid "Import File..."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:124
+msgid "Create a new category"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:125
+msgid "Use this to open the new account editor"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:129
+msgid "&Additional fees..."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:131
+msgid "Enter additional fees"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:132
+msgid ""
+"Use this to add any additional fees other than principal and interest "
+"contained in your periodical payments."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:139
+msgid ""
+"Use this to create a new account to which the initial payment should be made"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:208
+msgid "To whom do you make payments?"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:209
+msgid "Payments to"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:214
+msgid "From whom do you expect payments?"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:215
+msgid "Payments from"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:233
+msgid "Please enter the date, the first payment for this loan was/is due."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:235
+msgid ""
+"Note: Consult the loan contract for details of the first due date. Keep in "
+"mind, that the first due date usually differs from the date the contract was "
+"signed"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:240
+msgid ""
+"Please enter the original loan amount in the field below or leave it empty "
+"to be calculated."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:248
+msgid ""
+"Please enter the date, the first payment for this loan was/is due this year."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:250
+msgid ""
+"Note: You can easily figure out the date of the first payment if you consult "
+"the last statement of last year."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:254
+msgid ""
+"Please enter the remaining loan amount of last years final statement in the "
+"field below. You should not leave this field empty."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:311 dialogs/knewloanwizard.cpp:326
+#: dialogs/knewloanwizard.cpp:341 dialogs/knewloanwizard.cpp:357
+#: dialogs/knewloanwizard.cpp:373
+msgid "calculate"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:417
+msgid "borrowed"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:419
+msgid "lend"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:423
+msgid "not assigned"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:430
+msgid "on reception"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:432
+msgid "on due date"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:471
+msgid ""
+"The loan wizard is unable to calculate two different values for your loan at "
+"the same time. Please enter a value for the %1 on this page or backup to the "
+"page where the current value to be calculated is defined and fill in a "
+"value."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:500
+msgid ""
+"You selected, that payments have already been made towards this loan. This "
+"requires you to enter the loan amount exactly as found on your last "
+"statement."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:513
+msgid "interest rate"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:522
+msgid "term"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:532
+msgid "principal and interest"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:743
+#, c-format
+msgid ""
+"The number of payments has been decremented and the final payment has been "
+"modified to %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:751 dialogs/knewloanwizard.cpp:771
+#, c-format
+msgid "The final payment has been modified to %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:802
+msgid "KMyMoney has calculated a final payment of %1 for this loan."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:817
+msgid ""
+"You have entered mis-matching information. Please backup to the appropriate "
+"page and update your figures or leave one value empty to let KMyMoney "
+"calculate it for you"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:230
+msgid ""
+"Warning: Filtering by Category will exclude all transfers from the results."
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:239
+msgid "(None)"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:241
+msgid "Current selections: "
+msgstr "Současný výběr: "
+
+#: dialogs/kfindtransactiondlg.cpp:716
+msgid "Found %1 matching transactions (D %2 / P %3 = %4)"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:719
+msgid "Found %1 matching transactions"
+msgstr "Nalezeno %1 vyhovujících transakcí"
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "The institution name field is empty. Please enter the name."
+msgstr ""
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "Adding New Institution"
+msgstr "Přidávám novou instituci"
+
+#: dialogs/kcsvprogressdlg.cpp:69
+msgid "C&lose"
+msgstr "&Zavřít"
+
+#: dialogs/kcsvprogressdlg.cpp:247
+msgid " of "
+msgstr ""
+
+#: widgets/kmymoneypriceview.cpp:126
+msgid "Commodity"
+msgstr "Komodita"
+
+#: widgets/kmymoneypriceview.cpp:130
+msgid "Source"
+msgstr "Zdroj"
+
+#: widgets/kmymoneypriceview.cpp:143
+msgid "Price Options"
+msgstr ""
+
+#: widgets/kmymoneypriceview.cpp:153
+#, fuzzy
+msgid "Online Price Update..."
+msgstr "Aktualizovat ceny z Internetu..."
+
+#: widgets/kmymoneycombo.cpp:472 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+msgid "From"
+msgstr "Platba od"
+
+#: widgets/transaction.cpp:668
+msgid "Transaction is missing a category assignment."
+msgstr ""
+
+#: widgets/transaction.cpp:671
+msgid "The transaction has a missing assignment of <b>%1</b>."
+msgstr ""
+
+#: widgets/transaction.cpp:874
+msgid "Sell"
+msgstr "Prodej"
+
+#: widgets/transaction.cpp:876
+msgid "Buy"
+msgstr "Nákup"
+
+#: widgets/kmymoneycombo.cpp:520 widgets/transaction.cpp:879
+#: widgets/transaction.cpp:1447
+msgid "Dividend"
+msgstr "Dividenda"
+
+#: widgets/kmymoneycombo.cpp:518 widgets/transaction.cpp:881
+#: widgets/transaction.cpp:1453
+msgid "Yield"
+msgstr ""
+
+#: widgets/transaction.cpp:886 widgets/transaction.cpp:1473
+msgid "Activity"
+msgstr "Aktivita"
+
+#: widgets/transaction.cpp:887
+msgid "Investment transaction"
+msgstr "Investiční transakce"
+
+#: widgets/transaction.cpp:1021 widgets/transaction.cpp:1114
+#: widgets/transaction.cpp:1165
+msgid "*** UNASSIGNED ***"
+msgstr "*** NEPŘIŘAZENO ***"
+
+#: widgets/kmymoneycombo.cpp:517 widgets/transaction.cpp:1435
+msgid "Add shares"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:516 widgets/transaction.cpp:1438
+msgid "Remove shares"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:522 widgets/transaction.cpp:1441
+msgid "Buy shares"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:521 widgets/transaction.cpp:1444
+msgid "Sell shares"
+msgstr ""
+
+#: widgets/transaction.cpp:1450
+msgid "Reinvest Dividend"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:515 widgets/transaction.cpp:1456
+msgid "Split shares"
+msgstr ""
+
+#: widgets/transaction.cpp:1515
+msgid "Ratio"
+msgstr ""
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:241
+msgid "%1 Bills."
+msgstr "%1 výběrů."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:257
+msgid "%1 Deposits."
+msgstr "%1 vkladů."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:273
+msgid "%1 Transfers."
+msgstr "%1 převodů."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:355
+msgid ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+msgstr ""
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:57
+#: widgets/kmymoneyaccounttreeforecast.cpp:84
+msgid "Current"
+msgstr ""
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:72
+#: widgets/kmymoneyaccounttreeforecast.cpp:93
+msgid "Total variation"
+msgstr ""
+
+#: widgets/stdtransactionmatched.cpp:130
+msgid ""
+"KMyMoney has matched a downloaded transaction with a manually entered one "
+"(result above)"
+msgstr ""
+
+#: widgets/stdtransactionmatched.cpp:138
+msgid "Bank entry:"
+msgstr ""
+
+#: widgets/stdtransactionmatched.cpp:166
+msgid "Your entry:"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:187
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a monthly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:187 widgets/kbudgetvalues.cpp:206
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"_: Auto assignment (caption)\n"
+"Auto assignment"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:206
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a yearly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"You have entered budget values using a different base which would result in "
+"an individual monthly budget of <b>%1</b>. Should this value be used to fill "
+"the monthly budgets?"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:62
+msgid "Use this button to skip this transaction"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:67
+msgid "Record this transaction into the register"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:68
+msgid "Use this button to record this transaction"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:96
+msgid "%1 of %2"
+msgstr "%1 z %2"
+
+#: widgets/kmymoneybriefschedule.cpp:109
+msgid "Payment on %1 for %2 with %3 transactions remaining occuring %4."
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:115
+msgid "Payment on %1 for %2 occuring %4."
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:136
+msgid "%1 days overdue (%2 occurences)."
+msgstr ""
+
+#: widgets/register.cpp:55
+msgid "Post date"
+msgstr ""
+
+#: widgets/register.cpp:56
+msgid "Date entered"
+msgstr ""
+
+#: widgets/register.cpp:60
+msgid "Entry order"
+msgstr ""
+
+#: widgets/register.cpp:63
+msgid "Reconcile state"
+msgstr ""
+
+#: widgets/register.cpp:440
+msgid ""
+"_: Deposits onto account\n"
+"Deposits"
+msgstr "Vklady"
+
+#: widgets/register.cpp:442
+msgid ""
+"_: Payments towards credit card\n"
+"Payments"
+msgstr "Platby"
+
+#: widgets/register.cpp:446
+msgid ""
+"_: Payments made from account\n"
+"Payments"
+msgstr "Platby"
+
+#: widgets/register.cpp:448
+msgid ""
+"_: Payments made with credit card\n"
+"Charges"
+msgstr ""
+
+#: widgets/register.cpp:736
+msgid ""
+"_: Payment made from account\n"
+"Payment"
+msgstr "Výběr"
+
+#: widgets/register.cpp:737
+msgid ""
+"_: Deposit into account\n"
+"Deposit"
+msgstr "Vklad"
+
+#: widgets/register.cpp:813
+msgid ""
+"_: Payment made with credit card\n"
+"Charge"
+msgstr ""
+
+#: widgets/register.cpp:814
+msgid ""
+"_: Payment towards credit card\n"
+"Payment"
+msgstr "Platba"
+
+#: widgets/register.cpp:818 widgets/register.cpp:824
+msgid ""
+"_: Decrease of asset/liability value\n"
+"Decrease"
+msgstr "Snížit"
+
+#: widgets/register.cpp:819 widgets/register.cpp:823
+msgid ""
+"_: Increase of asset/liability value\n"
+"Increase"
+msgstr "Zvýšit"
+
+#: widgets/register.cpp:2280
+msgid "Prior transactions possibly filtered"
+msgstr ""
+
+#: widgets/register.cpp:2284
+msgid "Last reconciliation"
+msgstr ""
+
+#: widgets/register.cpp:2291
+#, c-format
+msgid "Online Statement Balance: %1"
+msgstr ""
+
+#: widgets/register.cpp:2295
+msgid "This year"
+msgstr "Tento rok"
+
+#: widgets/kmymoneycombo.cpp:674 widgets/register.cpp:2296
+msgid "Last month"
+msgstr "Minulý měsíc"
+
+#: widgets/register.cpp:2297
+msgid "This month"
+msgstr "Tento měsíc"
+
+#: widgets/register.cpp:2298
+msgid "Last week"
+msgstr "Minulý týden"
+
+#: widgets/register.cpp:2299
+msgid "This week"
+msgstr "Tento týden"
+
+#: widgets/register.cpp:2300
+msgid "Yesterday"
+msgstr "Včera"
+
+#: widgets/kmymoneycombo.cpp:666 widgets/register.cpp:2301
+msgid "Today"
+msgstr "Dnes"
+
+#: widgets/register.cpp:2302 widgets/register.cpp:2307
+msgid "Future transactions"
+msgstr "Budoucí transakce"
+
+#: widgets/register.cpp:2303
+msgid "Next week"
+msgstr "Příští týden"
+
+#: widgets/kmymoneycalendar.cpp:131 widgets/register.cpp:2304
+msgid "Next month"
+msgstr "Příští měsíc"
+
+#: widgets/kmymoneycombo.cpp:670 widgets/register.cpp:2315
+msgid "Current fiscal year"
+msgstr "Současný fiskální rok"
+
+#: widgets/register.cpp:2316
+msgid "Previous fiscal year"
+msgstr "Minulý fiskální rok"
+
+#: widgets/register.cpp:2317
+msgid "Next fiscal year"
+msgstr "Příští fiskální rok"
+
+#: widgets/register.cpp:2349
+msgid ""
+"_: Unknown payee\n"
+"Unknown"
+msgstr "Neznámý"
+
+#: widgets/register.cpp:2368
+msgid ""
+"_: Unknown category\n"
+"Unknown"
+msgstr "Neznámá"
+
+#: widgets/register.cpp:2387
+msgid ""
+"_: Unknown security\n"
+"Unknown"
+msgstr "Neznámá"
+
+#: widgets/klistviewsearchline.cpp:249
+msgid "Search Columns"
+msgstr "Prohledávát sloupce"
+
+#: widgets/klistviewsearchline.cpp:251
+msgid "All Visible Columns"
+msgstr "Všechny viditelné sloupce"
+
+#: widgets/klistviewsearchline.cpp:266
+msgid ""
+"_: Column number %1\n"
+"Column No. %1"
+msgstr "Sloupec č. %1"
+
+#: widgets/klistviewsearchline.cpp:461 widgets/registersearchline.cpp:286
+msgid "S&earch:"
+msgstr "Hl&edat"
+
+#: widgets/kmymoneyaccountselector.cpp:110
+#: widgets/kmymoneyaccountselector.cpp:371
+msgid "Income categories"
+msgstr "Kategorie příjmů"
+
+#: widgets/kmymoneyaccountselector.cpp:349
+#: widgets/kmymoneyaccountselector.cpp:350
+msgid "Favorites"
+msgstr "Oblíbené"
+
+#: widgets/kmymoneyaccountselector.cpp:357
+msgid "Asset accounts"
+msgstr "Účty aktiv"
+
+#: widgets/kmymoneyaccountselector.cpp:364
+msgid "Liability accounts"
+msgstr "Účty pasiv"
+
+#: widgets/kmymoneyaccountselector.cpp:381
+msgid "Expense categories"
+msgstr "Kategorie výdajů"
+
+#: widgets/kmymoneyaccountselector.cpp:391
+msgid "Equity accounts"
+msgstr ""
+
+#: widgets/kmymoneyaccounttreebase.cpp:120
+msgid "Total Balance"
+msgstr "Celkový zůstatek"
+
+#: widgets/kmymoneyaccounttreebase.cpp:124
+msgid "Total Value"
+msgstr "Celková hodnota"
+
+#: widgets/registersearchline.cpp:75
+msgid ""
+"_: label for status combo\n"
+"Stat&us"
+msgstr "S&tav"
+
+#: widgets/registersearchline.cpp:79
+msgid "Any status"
+msgstr "Libovolný stav"
+
+#: widgets/registersearchline.cpp:80
+msgid "Imported"
+msgstr "Importováno"
+
+#: widgets/registersearchline.cpp:81
+msgid "Matched"
+msgstr "Spárováno"
+
+#: widgets/registersearchline.cpp:82
+msgid "Erroneous"
+msgstr "Chybující"
+
+#: widgets/registersearchline.cpp:83
+msgid "Not marked"
+msgstr "Neoznačeno"
+
+#: widgets/kmymoneyaccounttree.cpp:54
+msgid ""
+"_: Column heading for category in tax report\n"
+"Tax"
+msgstr "Daň"
+
+#: widgets/kmymoneyaccounttree.cpp:58
+msgid ""
+"_: Column heading for VAT category\n"
+"VAT"
+msgstr "DPH"
+
+#: widgets/kmymoneywizard.cpp:101
+msgid "Continue with next page"
+msgstr "Pokračovat na další stránce"
+
+#: widgets/kmymoneywizard.cpp:103
+msgid "Finish wizard"
+msgstr "Dokončit průvodce"
+
+#: widgets/kmymoneywizard.cpp:121
+msgid "&Back"
+msgstr "&Předchozí"
+
+#: widgets/kmymoneywizard.cpp:122
+msgid "&Next"
+msgstr "&Další"
+
+#: widgets/kmymoneywizard.cpp:123
+msgid "&Finish"
+msgstr ""
+
+#: widgets/kmymoneywizard.cpp:274
+msgid "Step %1 of %2"
+msgstr "Krok %1 z %2"
+
+#: widgets/kmymoneydateinput.cpp:235
+msgid ""
+"_: Enter todays date into date input widget\n"
+"T"
+msgstr "T"
+
+#: widgets/transactionform.cpp:302
+msgid "&Deposit"
+msgstr "Vkla&d"
+
+#: widgets/transactionform.cpp:304 widgets/transactionform.cpp:313
+#: widgets/transactionform.cpp:323 widgets/transactionform.cpp:333
+msgid "&Transfer"
+msgstr "&Převod"
+
+#: widgets/transactionform.cpp:306
+msgid "&Withdrawal"
+msgstr "&Výběr"
+
+#: widgets/transactionform.cpp:311
+msgid "&Payment"
+msgstr "&Platba"
+
+#: widgets/transactionform.cpp:315
+msgid "&Charge"
+msgstr ""
+
+#: widgets/transactionform.cpp:321 widgets/transactionform.cpp:335
+msgid "&Decrease"
+msgstr "&Snížit"
+
+#: widgets/transactionform.cpp:325 widgets/transactionform.cpp:331
+msgid "&Increase"
+msgstr "&Zvýšit"
+
+#: widgets/kmymoneyscheduledcalendar.cpp:42
+msgid "Select Schedules"
+msgstr "Vybrat plány"
+
+#: widgets/kmymoneycalendar.cpp:108
+msgid "Select Style"
+msgstr "Vybrat styl"
+
+#: widgets/kmymoneycalendar.cpp:128
+msgid "Choose Style"
+msgstr "Zvolit styl"
+
+#: widgets/kmymoneycalendar.cpp:129
+msgid "Next year"
+msgstr "Příští rok"
+
+#: widgets/kmymoneycalendar.cpp:130
+msgid "Previous year"
+msgstr "Předchozí rok"
+
+#: widgets/kmymoneycalendar.cpp:132
+msgid "Previous month"
+msgstr "Předchozí měsíc"
+
+#: widgets/kmymoneycalendar.cpp:133
+msgid "Select a week"
+msgstr "Vyberte týden"
+
+#: widgets/kmymoneycalendar.cpp:134
+msgid "Select a month"
+msgstr "Vyberte měsíc"
+
+#: widgets/kmymoneycalendar.cpp:135
+msgid "Select a year"
+msgstr "Vyberte rok"
+
+#: widgets/kmymoneycalendar.cpp:249
+msgid "Week XX"
+msgstr "Týden XX"
+
+#: widgets/kmymoneycalendar.cpp:264 widgets/kmymoneycalendar.cpp:300
+#, c-format
+msgid "Week %1"
+msgstr "Týden %1"
+
+#: widgets/rc.cpp:1
+msgid "Account Types"
+msgstr "Druhy účtů"
+
+#: widgets/rc.cpp:3
+msgid "Detailed description"
+msgstr "Podrobný popis"
+
+#: widgets/rc.cpp:18
+msgid "Period"
+msgstr ""
+
+#: widgets/rc.cpp:21
+msgid "Individual"
+msgstr "Vlastní"
+
+#: widgets/rc.cpp:23
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Acces to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>Recovery encryption</i> group is only accessible, if the necessary "
+"key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is "
+"found."
+msgstr ""
+
+#: widgets/rc.cpp:26
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading <i>0x</i>."
+msgstr ""
+
+#: widgets/rc.cpp:27
+msgid "User ID"
+msgstr "Uživatelské ID"
+
+#: widgets/rc.cpp:29
+msgid "Recovery encryption"
+msgstr ""
+
+#: widgets/rc.cpp:30
+msgid "Also encrypt with kmymoney-recover key"
+msgstr "Zašifrovat také kmymoney klíčem obnovy"
+
+#: widgets/rc.cpp:32
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out."
+msgstr ""
+
+#: widgets/rc.cpp:51
+msgid "PriceInfo"
+msgstr ""
+
+#: widgets/rc.cpp:52
+msgid "Report Tab"
+msgstr ""
+
+#: widgets/rc.cpp:53
+msgid "<p>On this tab, you set the basic properties of this report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:54
+msgid "Report Name"
+msgstr "Jméno výkazu"
+
+#: widgets/rc.cpp:55
+msgid "<p>Choose a name for this report.</p>"
+msgstr "<p>Vyberte jméno pro tento výkaz.</p>"
+
+#: widgets/rc.cpp:57
+msgid "<p>Enter a comment to help you remember the details of this report.</p>"
+msgstr ""
+"<p>Zadejte komentář, abyste si lépe zapamatovali podrobnosti o tomto výkazu."
+"</p>"
+
+#: widgets/rc.cpp:58
+msgid "Convert values to base currency"
+msgstr "Převést hodnoty na základní měnu"
+
+#: widgets/rc.cpp:59
+msgid ""
+"_: Convert 'em!!\n"
+"<p>Select this option to convert all values in the report to your base "
+"currency.</p><p>Leave it unchecked if you'd like to see values in their "
+"original currency.</p><p>If currencies are not converted, then subtotals "
+"will not be shown.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:60
+msgid "Mark as a favorite report"
+msgstr "Zvolit jako oblíbený výkaz"
+
+#: widgets/rc.cpp:61
+msgid ""
+"<p>Select this option to notate this report as one of your favorites.</"
+"p><p>All your favorite reports are grouped in one place on the report list "
+"for easy access.</p>"
+msgstr ""
+"<p>Zvolte tuto možnost, abyste tento výkaz označili jako oblíbený.</"
+"p><p>Všechny vaše oblíbené výkazy budou snadno dostupné v jedné skupině.</p>"
+
+#: widgets/rc.cpp:62 widgets/rc.cpp:88
+msgid "Rows/Columns Tab"
+msgstr ""
+
+#: widgets/rc.cpp:63 widgets/rc.cpp:89
+msgid ""
+"<p>On this tab, you configure how you'd like the rows and columns to be "
+"selected and organized.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:69 widgets/rc.cpp:81
+msgid ""
+"<p>Choose what kind of accounts to display as the rows of this report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:71
+msgid "Columns"
+msgstr ""
+
+#: widgets/rc.cpp:75
+msgid "Bi-Monthly"
+msgstr ""
+
+#: widgets/rc.cpp:78
+msgid "<p>Choose how large of a time period each column should encompass</p>"
+msgstr ""
+
+#: widgets/rc.cpp:79
+msgid "Income & Expenses"
+msgstr ""
+
+#: widgets/rc.cpp:80
+msgid "Assets & Liabilities"
+msgstr ""
+
+#: widgets/rc.cpp:82
+msgid "Rows"
+msgstr ""
+
+#: widgets/rc.cpp:83
+msgid "Show totals column"
+msgstr ""
+
+#: widgets/rc.cpp:84
+#, fuzzy
+msgid "Average days"
+msgstr "Průměr"
+
+#: widgets/rc.cpp:85
+#, fuzzy
+msgid "Include scheduled transactions"
+msgstr "Naplánované transakce nalezeny"
+
+#: widgets/rc.cpp:86
+#, fuzzy
+msgid "Include transfers"
+msgstr "Včetně převodů"
+
+#: widgets/rc.cpp:87
+msgid "Include unused accounts/categories"
+msgstr ""
+
+#: widgets/rc.cpp:90
+msgid "Organize by:"
+msgstr ""
+
+#: widgets/rc.cpp:92
+msgid "Top Categories"
+msgstr ""
+
+#: widgets/rc.cpp:95
+msgid "Top Accounts"
+msgstr ""
+
+#: widgets/rc.cpp:98
+msgid "<p>Choose how to group the transactions in this report</p>"
+msgstr ""
+
+#: widgets/rc.cpp:99
+msgid "Show Columns"
+msgstr ""
+
+#: widgets/rc.cpp:100
+msgid ""
+"<p>Choose which columns should be shown in the report.</p><p>The date and "
+"transaction amount are always shown.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:102
+msgid "<p>Select this option to show the Memo column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:104
+msgid "<p>Select this option to show the Shares column for investments</p>"
+msgstr ""
+
+#: widgets/rc.cpp:106
+msgid "<p>Select this option to show the Price column for investments</p>"
+msgstr ""
+
+#: widgets/rc.cpp:108
+msgid "<p>Select this option to show the Reconciled column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:110
+msgid "<p>Select this option to show the Account column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:112
+msgid "<p>Select this option to show the Number column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:114
+msgid "<p>Select this option to show the Payee column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:116
+msgid "<p>Select this option to show the Category column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:118
+msgid "<p>Select this option to show the Action column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:120
+msgid "<p>Select this option to show the Running balance column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:121
+msgid "Include only Loan accounts"
+msgstr ""
+
+#: widgets/rc.cpp:122
+msgid "Include only Investment accounts"
+msgstr ""
+
+#: widgets/rc.cpp:123 widgets/rc.cpp:127
+msgid ""
+"<p>Check this box to include only those categories which have been marked to "
+"\"Include on Tax Reports\"</p>"
+msgstr ""
+
+#: widgets/rc.cpp:124
+msgid "Hide Split Transaction Details"
+msgstr ""
+
+#: widgets/rc.cpp:125
+msgid ""
+"Do not display the individual transactions that make up a split transaction"
+msgstr ""
+
+#: widgets/rc.cpp:126
+msgid "Include only Tax categories"
+msgstr ""
+
+#: widgets/rc.cpp:128
+msgid "Chart Tab"
+msgstr ""
+
+#: widgets/rc.cpp:129
+msgid "<p>On this tab, you configure the chart drawn forthis report.</p>"
+msgstr "<p>Na této záložce nastavíte vykreslování grafu pro tento výkaz.</p>"
+
+#: widgets/rc.cpp:130
+msgid "Chart Type"
+msgstr "Druh grafu"
+
+#: widgets/rc.cpp:131
+msgid "<p>Select what form you would like the chart to be drawn as.</p>"
+msgstr "<p>Vyberte jakou formou si přejete graf vykreslit.</p>"
+
+#: widgets/rc.cpp:132
+msgid "Line"
+msgstr "Čára"
+
+#: widgets/rc.cpp:133
+msgid "Bar"
+msgstr ""
+
+#: widgets/rc.cpp:134
+msgid "Stacked Bar"
+msgstr ""
+
+#: widgets/rc.cpp:135
+msgid "Pie"
+msgstr "Koláč"
+
+#: widgets/rc.cpp:136
+msgid "Ring"
+msgstr ""
+
+#: widgets/rc.cpp:137
+msgid "Show grid lines"
+msgstr "Zobrazit mřížku"
+
+#: widgets/rc.cpp:138
+msgid ""
+"<p>Select this option to show horizontal and vertical grid lines on the "
+"chart.</p>"
+msgstr ""
+"<p>Vyberte tuto volbu aby byly v grafu vykresleny horizontální a vertikální "
+"čáry.</p>"
+
+#: widgets/rc.cpp:139
+msgid "Draw values on chart"
+msgstr "Vykreslit hodnoty do grafu"
+
+#: widgets/rc.cpp:140
+msgid ""
+"<p>Select this option to draw the numeric values for data points next to "
+"their plot location.</p>"
+msgstr ""
+"<p>Vyberte tuto volbu aby se číselná hodnota bodu vykreslila vedle jeho "
+"umístění v grafu.</p>"
+
+#: widgets/rc.cpp:141
+msgid "Show as chart by default"
+msgstr "Výchozí zobrazení jako graf"
+
+#: widgets/rc.cpp:142
+msgid ""
+"<p>Select this option to cause the report to be shown as a chart when you "
+"first open the report. Otherwise, it will come up as a text report.</p>"
+msgstr ""
+"<p>Vybrání této volby způsobí, že výkaz bude zobrazován jako graf, jakmile "
+"tento výkaz poprvé otevřete. Jinak bude výkaz zobrazen jako text.</p>"
+
+#: widgets/rc.cpp:143
+msgid "Line width"
+msgstr ""
+
+#: widgets/rc.cpp:144
+#, fuzzy
+msgid "<p>Select what width should be used to draw the line on the chart</p>"
+msgstr ""
+"<p>Vyberte tuto volbu aby byly v grafu vykresleny horizontální a vertikální "
+"čáry.</p>"
+
+#: widgets/rc.cpp:145
+msgid "ReportControl"
+msgstr ""
+
+#: widgets/rc.cpp:149
+msgid "Configure this report"
+msgstr "Nastavit tento výkaz"
+
+#: widgets/rc.cpp:151
+msgid "Create a new report based on this one"
+msgstr "Vytvořit nový výkaz založený na tomto výkazu"
+
+#: widgets/rc.cpp:153
+msgid "Copy this report to the clipboard"
+msgstr "Zkopírovat tento výkaz do schránky"
+
+#: widgets/rc.cpp:155
+msgid "Export this report as an HTML or CSV file"
+msgstr "Vyexportovat tento výkaz jako HTML, nebo CVS soubor"
+
+#: widgets/rc.cpp:157
+msgid "Permanently delete this report"
+msgstr "Trvale odstranit tento výkaz"
+
+#: widgets/rc.cpp:159
+msgid "Close this window"
+msgstr ""
+
+#: widgets/rc.cpp:162
+msgid "n of n"
+msgstr "n z n"
+
+#: widgets/rc.cpp:166
+msgid "Account:"
+msgstr "Účet:"
+
+#: widgets/rc.cpp:168
+msgid "Enter..."
+msgstr "Vložit..."
+
+#: widgets/rc.cpp:171
+msgid "TransactionSortOptionDecl"
+msgstr ""
+
+#: widgets/rc.cpp:173
+msgid "Sort order"
+msgstr "Pořadí řazení"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Sunday\n"
+"Sun"
+msgstr ""
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Saturday\n"
+"Sat"
+msgstr ""
+
+#: widgets/kmymoneydatetbl.cpp:171 widgets/kmymoneydatetbl.cpp:178
+msgid "Week %1 for year %2."
+msgstr "Týden %1 roku %2"
+
+#: widgets/kmymoneycombo.cpp:417
+msgid "ATM"
+msgstr "Bankomat"
+
+#: widgets/kmymoneycombo.cpp:418
+msgid "Withdrawal"
+msgstr "Výběr"
+
+#: widgets/kmymoneycombo.cpp:421
+msgid "Cheque"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:469
+msgid ""
+"_: Activity for expense categories\n"
+"Paid"
+msgstr "Zaplacené"
+
+#: widgets/kmymoneycombo.cpp:470
+msgid ""
+"_: Activity for income categories\n"
+"Received"
+msgstr "Přijaté"
+
+#: widgets/kmymoneycombo.cpp:519
+msgid "Reinvest dividend"
+msgstr "Investovat dividendu"
+
+#: widgets/kmymoneycombo.cpp:664
+msgid "All dates"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:665
+msgid "As of today"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:667
+msgid "Current month"
+msgstr "Současný měsíc"
+
+#: widgets/kmymoneycombo.cpp:668
+msgid "Current quarter"
+msgstr "Současné čtvrtletí"
+
+#: widgets/kmymoneycombo.cpp:669
+msgid "Current year"
+msgstr "Současný rok"
+
+#: widgets/kmymoneycombo.cpp:671
+msgid "Month to date"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:672
+msgid "Year to date"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:673
+msgid "Year to month"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:675
+msgid "Last year"
+msgstr "Minulý rok"
+
+#: widgets/kmymoneycombo.cpp:676
+msgid "Last fiscal year"
+msgstr "Minulý fiskální rok"
+
+#: widgets/kmymoneycombo.cpp:677
+msgid "Last 7 days"
+msgstr "Minulých 7 dní"
+
+#: widgets/kmymoneycombo.cpp:678
+msgid "Last 30 days"
+msgstr "Minulých 30 dní"
+
+#: widgets/kmymoneycombo.cpp:679
+msgid "Last 3 months"
+msgstr "Minulé 3 měsíce"
+
+#: widgets/kmymoneycombo.cpp:680
+msgid "Last quarter"
+msgstr "Minulé čtvrtletí"
+
+#: widgets/kmymoneycombo.cpp:681
+msgid "Last 6 months"
+msgstr "Minulých 6 měsíců"
+
+#: widgets/kmymoneycombo.cpp:682
+msgid "Last 11 months"
+msgstr "Minulých 11 měsíců"
+
+#: widgets/kmymoneycombo.cpp:683
+msgid "Last 12 months"
+msgstr "Minulých 12 měsíců"
+
+#: widgets/kmymoneycombo.cpp:684
+msgid "Next 7 days"
+msgstr "Následujících 7 dní"
+
+#: widgets/kmymoneycombo.cpp:685
+msgid "Next 30 days"
+msgstr "Následujících 30 dní"
+
+#: widgets/kmymoneycombo.cpp:686
+msgid "Next 3 months"
+msgstr "Následující 3 měsíce"
+
+#: widgets/kmymoneycombo.cpp:687
+msgid "Next quarter"
+msgstr "Následující čtvrtletí"
+
+#: widgets/kmymoneycombo.cpp:688
+msgid "Next 6 months"
+msgstr "Následujících 6 měsíců"
+
+#: widgets/kmymoneycombo.cpp:689
+msgid "Next 12 months"
+msgstr "Následujících 12 měsíců"
+
+#: widgets/kmymoneycombo.cpp:690
+msgid "Last 3 months to next 3 months"
+msgstr "Minulé 3 měsíce a následující 3 měsíce"
+
+#: widgets/kmymoneycombo.cpp:691
+msgid "User defined"
+msgstr "Nastaveno uživatelem"
+
+#~ msgid "No plugins loaded"
+#~ msgstr "Není načten žádný modul"
+
+#~ msgid "Create schedule..."
+#~ msgstr "Vytvořit finanční plán..."
+
+#~ msgid "New schedule..."
+#~ msgstr "Nový finanční plán..."
+
+#~ msgid "Edit schedule..."
+#~ msgstr "Upravit finanční plán..."
+
+#~ msgid "Delete schedule..."
+#~ msgstr "Odstranit finanční plán..."
+
+#~ msgid "Duplicate schedule"
+#~ msgstr "Duplikovat sfinanční plán"
+
+#~ msgid "Enter schedule..."
+#~ msgstr "Vložit finanční plán..."
+
+#~ msgid "Skip schedule..."
+#~ msgstr "Přeskočit finanční plán..."
+
+#, fuzzy
+#~ msgid "Adjusting schedules..."
+#~ msgstr "Nahrávám finanční plány..."
+
+#~ msgid "Add schedule"
+#~ msgstr "Přidat finanční plán"
+
+#~ msgid "Schedule options"
+#~ msgstr "Volby plánu"
+
+#~ msgid "Search transactions containing the following text"
+#~ msgstr "Vyhledat transakce obsahující následující text"
+
+#~ msgid "Multi-user mode not yet implemented\n"
+#~ msgstr "Víceuživatelský režim nebyl zatím naimplementován\n"
+
+#~ msgid "Budget "
+#~ msgstr "Rozpočet"
+
+#~ msgid "Forecast "
+#~ msgstr "Předpověď"
+
+#~ msgid "Incomes and Expenses This Month"
+#~ msgstr "Příjmy a výdaje tento měsíc"
+
+#~ msgid "Incomes"
+#~ msgstr "Příjmy"
+
+#~ msgid "Schedules This Month"
+#~ msgstr "Plány na tento měsíc"
diff --git a/po/da.po b/po/da.po
new file mode 100644
index 0000000..754406d
--- /dev/null
+++ b/po/da.po
@@ -0,0 +1,13804 @@
+# translation of da.po to
+# Daniel Sørensen <daniel@dumazz.dk>, 2005.
+# Daniel Sørensen <daniel@dumazz.dk>, 2005.
+# Daniel K. Sørensen <daniel@dallerweb.dk>, 2005.
+# Anders Ellenshøj Andersen <andersa@ellenshoej.dk>, 2006.
+# translation of kmymoney2.po to
+msgid ""
+msgstr ""
+"Project-Id-Version: da\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-25 19:04+0200\n"
+"PO-Revision-Date: 2006-01-21 13:53+0100\n"
+"Last-Translator: Anders Ellenshøj Andersen <andersa@ellenshoej.dk>\n"
+"Language-Team: <da@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.1\n"
+
+#: wizards/wizardpages/rc.cpp:1
+msgid ""
+"Select groups of accounts that correspond to the ways that you will use "
+"KMyMoney. Each group you select will cause several accounts and categories "
+"to be created. Select the groups that are relevant to you. You can always "
+"create additional accounts manually later."
+msgstr ""
+
+#: wizards/wizardpages/rc.cpp:2
+msgid ""
+"<p>KMyMoney supports multiple currencies, nevertheless one of them will be "
+"used as your base currency. The base currency is used as default for new "
+"accounts and reports. Please select the base currency from the following "
+"list."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:71 dialogs/rc.cpp:399 dialogs/rc.cpp:485
+#: dialogs/rc.cpp:724 dialogs/settings/rc.cpp:108 reports/listtable.cpp:226
+#: views/kinvestmentview.cpp:71 views/kpayeesview.cpp:351 views/rc.cpp:13
+#: widgets/rc.cpp:5 widgets/rc.cpp:34
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1599
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1629
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1673
+#: wizards/wizardpages/rc.cpp:3
+msgid "Name"
+msgstr "Navn"
+
+#: wizards/wizardpages/rc.cpp:4
+msgid "ISO Code"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:69 dialogs/kequitypriceupdatedlg.cpp:70
+#: dialogs/rc.cpp:71 dialogs/rc.cpp:725 dialogs/settings/rc.cpp:112
+#: views/kinvestmentview.cpp:72 widgets/rc.cpp:37 wizards/wizardpages/rc.cpp:5
+msgid "Symbol"
+msgstr "Symbol"
+
+#: wizards/wizardpages/rc.cpp:6
+msgid ""
+"<p>Use the fields below to enter some information about yourself.</p>\n"
+"\n"
+"<p>All information is optional and only used to personalize your KMyMoney "
+"file.</p>"
+msgstr ""
+
+#: dialogs/rc.cpp:425 wizards/newuserwizard/rc.cpp:27
+#: wizards/wizardpages/rc.cpp:7
+msgid "Town:"
+msgstr ""
+
+#: dialogs/rc.cpp:420 wizards/newuserwizard/rc.cpp:22
+#: wizards/wizardpages/rc.cpp:8
+msgid "County/State:"
+msgstr ""
+
+#: dialogs/rc.cpp:391 dialogs/rc.cpp:421 wizards/newuserwizard/rc.cpp:23
+#: wizards/wizardpages/rc.cpp:9
+msgid "Street:"
+msgstr "Adresse:"
+
+#: dialogs/rc.cpp:422 wizards/newuserwizard/rc.cpp:24
+#: wizards/wizardpages/rc.cpp:10
+msgid "Email:"
+msgstr ""
+
+#: dialogs/rc.cpp:424 wizards/newuserwizard/rc.cpp:26
+#: wizards/wizardpages/rc.cpp:11
+msgid "Telephone:"
+msgstr ""
+
+#: dialogs/rc.cpp:423 wizards/newuserwizard/rc.cpp:25
+#: wizards/wizardpages/rc.cpp:12
+msgid "Your name:"
+msgstr ""
+
+#: dialogs/rc.cpp:427 wizards/newuserwizard/rc.cpp:29
+#: wizards/wizardpages/rc.cpp:13
+msgid "Load from Addressbook"
+msgstr ""
+
+#: dialogs/rc.cpp:392 dialogs/rc.cpp:426 views/rc.cpp:68
+#: wizards/wizardpages/rc.cpp:14
+msgid "Postal Code:"
+msgstr "Postnr:"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:82
+msgid "KMyMoney New Account Setup"
+msgstr ""
+
+#: dialogs/rc.cpp:360 dialogs/rc.cpp:361 reports/listtable.cpp:230
+#: wizards/newaccountwizard/knewaccountwizard.cpp:83
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1616
+#: wizards/newaccountwizard/rc.cpp:61
+msgid "Institution"
+msgstr "Institution"
+
+#: dialogs/investactivities.cpp:198 dialogs/investactivities.cpp:286
+#: dialogs/investactivities.cpp:367 dialogs/kfindtransactiondlg.cpp:181
+#: dialogs/rc.cpp:139 dialogs/rc.cpp:192 dialogs/rc.cpp:207
+#: dialogs/transactioneditor.cpp:734 reports/listtable.cpp:201
+#: reports/pivottable.cpp:1336 reports/pivottable.cpp:1586
+#: views/kforecastview.cpp:393 views/kgloballedgerview.cpp:175
+#: views/khomeview.cpp:418 views/khomeview.cpp:491 views/khomeview.cpp:525
+#: views/khomeview.cpp:764 views/khomeview.cpp:967 views/khomeview.cpp:1437
+#: views/kscheduledview.cpp:71 views/rc.cpp:17 views/rc.cpp:44
+#: widgets/kmymoneyaccounttreebase.cpp:58
+#: widgets/kmymoneyaccounttreeforecast.cpp:41 widgets/rc.cpp:109
+#: widgets/register.cpp:566 widgets/transaction.cpp:978
+#: widgets/transaction.cpp:1535
+#: wizards/newaccountwizard/knewaccountwizard.cpp:84
+msgid "Account"
+msgstr "Konto"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:85
+#, fuzzy
+msgid "Broker"
+msgstr " (kurtage)"
+
+#: dialogs/kfindtransactiondlg.cpp:225 dialogs/rc.cpp:70 dialogs/rc.cpp:104
+#: dialogs/rc.cpp:159 dialogs/rc.cpp:223 dialogs/rc.cpp:246 dialogs/rc.cpp:751
+#: dialogs/settings/rc.cpp:109 widgets/rc.cpp:35 widgets/register.cpp:568
+#: wizards/newaccountwizard/knewaccountwizard.cpp:86
+msgid "Details"
+msgstr "Detajler"
+
+#: dialogs/knewloanwizard.cpp:636 dialogs/rc.cpp:231 dialogs/rc.cpp:608
+#: kmymoneyutils.cpp:191 views/khomeview.cpp:399
+#: wizards/newaccountwizard/knewaccountwizard.cpp:87
+#: wizards/newaccountwizard/knewaccountwizard.cpp:880
+msgid "Payments"
+msgstr "Betalinger"
+
+#: dialogs/investactivities.cpp:195 dialogs/investactivities.cpp:283
+#: dialogs/investactivities.cpp:422 dialogs/investtransactioneditor.cpp:217
+#: reports/listtable.cpp:221 widgets/transaction.cpp:1565
+#: wizards/newaccountwizard/knewaccountwizard.cpp:88
+msgid "Fees"
+msgstr ""
+
+#: dialogs/rc.cpp:624 views/khomeview.cpp:415 views/khomeview.cpp:488
+#: views/khomeview.cpp:522 wizards/newaccountwizard/knewaccountwizard.cpp:89
+msgid "Schedule"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:90
+#, fuzzy
+msgid "Payout"
+msgstr "Betal til"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:91
+#, fuzzy
+msgid "Parent Account"
+msgstr "Der er ingen konto til aktiver"
+
+#: dialogs/rc.cpp:719 wizards/newaccountwizard/knewaccountwizard.cpp:92
+#: wizards/newuserwizard/knewuserwizard.cpp:86
+#, fuzzy
+msgid "Finish"
+msgstr "&Færdig"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:248
+#, fuzzy
+msgid "Credit card payment"
+msgstr "Kreditkort"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:264
+#, fuzzy, c-format
+msgid "Loan payment for %1"
+msgstr "Betaling til %1"
+
+#: mymoney/mymoneyscheduled.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:279
+msgid "Loan payment"
+msgstr ""
+
+#: dialogs/rc.cpp:134 wizards/newaccountwizard/knewaccountwizard.cpp:293
+#, fuzzy
+msgid "Amortization"
+msgstr "Amortisation"
+
+#: dialogs/investactivities.cpp:196 dialogs/investactivities.cpp:284
+#: dialogs/investactivities.cpp:366 dialogs/investactivities.cpp:423
+#: dialogs/investtransactioneditor.cpp:227 dialogs/rc.cpp:135
+#: dialogs/rc.cpp:152 dialogs/rc.cpp:544 reports/listtable.cpp:222
+#: widgets/transaction.cpp:1597
+#: wizards/newaccountwizard/knewaccountwizard.cpp:302
+msgid "Interest"
+msgstr "Rente"
+
+#: dialogs/kcurrencycalculator.cpp:282
+#: wizards/newaccountwizard/knewaccountwizard.cpp:351
+#: wizards/newaccountwizard/knewaccountwizard.cpp:356
+msgid "User"
+msgstr "Bruger"
+
+#: kmymoneyutils.cpp:64 mymoney/mymoneyaccount.cpp:711
+#: reports/querytabletest.cpp:422
+#: wizards/newaccountwizard/knewaccountwizard.cpp:451
+msgid "Checking"
+msgstr ""
+
+#: kmymoneyutils.cpp:66 mymoney/mymoneyaccount.cpp:714
+#: wizards/newaccountwizard/knewaccountwizard.cpp:452
+msgid "Savings"
+msgstr "Opsparinger"
+
+#: kmymoneyutils.cpp:68 mymoney/mymoneyaccount.cpp:717
+#: reports/querytabletest.cpp:423
+#: wizards/newaccountwizard/knewaccountwizard.cpp:453
+msgid "Credit Card"
+msgstr "Kreditkort"
+
+#: kmymoneyutils.cpp:70 mymoney/mymoneyaccount.cpp:720
+#: wizards/newaccountwizard/knewaccountwizard.cpp:454
+msgid "Cash"
+msgstr "Kontanter"
+
+#: kmymoneyutils.cpp:72 mymoney/mymoneyaccount.cpp:723
+#: wizards/newaccountwizard/knewaccountwizard.cpp:455
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+msgid "Loan"
+msgstr "Lån"
+
+#: kmymoneyutils.cpp:76 mymoney/mymoneyaccount.cpp:729
+#: wizards/newaccountwizard/knewaccountwizard.cpp:456
+msgid "Investment"
+msgstr "Investeringer"
+
+#: converter/mymoneytemplate.cpp:178 converter/mymoneytemplate.cpp:179
+#: dialogs/knewaccountdlg.cpp:1014 kmymoneyutils.cpp:80
+#: mymoney/mymoneyaccount.cpp:735 views/kaccountsview.cpp:352
+#: views/kmymoneyview.cpp:765 widgets/kmymoneyaccountselector.cpp:177
+#: widgets/kmymoneyaccountselector.cpp:356
+#: wizards/newaccountwizard/knewaccountwizard.cpp:457
+msgid "Asset"
+msgstr "Aktiver"
+
+#: converter/mymoneytemplate.cpp:182 converter/mymoneytemplate.cpp:183
+#: dialogs/knewaccountdlg.cpp:1016 kmymoneyutils.cpp:82
+#: mymoney/mymoneyaccount.cpp:738 views/kaccountsview.cpp:356
+#: views/kmymoneyview.cpp:766 widgets/kmymoneyaccountselector.cpp:178
+#: widgets/kmymoneyaccountselector.cpp:363
+#: wizards/newaccountwizard/knewaccountwizard.cpp:458
+msgid "Liability"
+msgstr "Passiver"
+
+#: converter/mymoneytemplate.cpp:194 converter/mymoneytemplate.cpp:195
+#: kmymoneyutils.cpp:94 mymoney/mymoneyaccount.cpp:756
+#: views/kaccountsview.cpp:369 views/kmymoneyview.cpp:769
+#: widgets/kmymoneyaccountselector.cpp:181
+#: widgets/kmymoneyaccountselector.cpp:390
+#: wizards/newaccountwizard/knewaccountwizard.cpp:460
+msgid "Equity"
+msgstr "Egenkapital"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid ""
+"Please make sure to enter the correct conversion for the selected opening "
+"date. If you requested an online quote it might be provided for a different "
+"date."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+#, fuzzy
+msgid "Check date"
+msgstr "&Opret"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:562
+msgid "1 %1 equals %2"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:577
+msgid "Conversion rate is not positive"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:583
+msgid "No account name supplied"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:114 mymoney/mymoneyscheduled.cpp:1026
+#: wizards/newaccountwizard/knewaccountwizard.cpp:680
+msgid "Write check"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:111 mymoney/mymoneyscheduled.cpp:1014
+#: wizards/newaccountwizard/knewaccountwizard.cpp:682
+msgid "Direct debit"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:113 mymoney/mymoneyscheduled.cpp:1032
+#: wizards/newaccountwizard/knewaccountwizard.cpp:683
+#, fuzzy
+msgid "Bank transfer"
+msgstr "%1 Overførsler"
+
+#: dialogs/keditscheduledlg.cpp:112 mymoney/mymoneyscheduled.cpp:1029
+#: wizards/newaccountwizard/knewaccountwizard.cpp:685
+msgid "Standing order"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:110 mymoney/mymoneyscheduled.cpp:1020
+#: wizards/newaccountwizard/knewaccountwizard.cpp:686
+msgid "Manual deposit"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:109 mymoney/mymoneyscheduled.cpp:1017
+#: wizards/newaccountwizard/knewaccountwizard.cpp:687
+msgid "Direct deposit"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:115 mymoney/mymoneyscheduled.cpp:1023
+#: wizards/newaccountwizard/knewaccountwizard.cpp:688
+msgid "Other"
+msgstr "Andet"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:697
+msgid "CreditCard %1 monthly payment"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:703
+msgid "Finish entry and create account"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:705
+msgid "Finish entry and create account and schedule"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:708
+msgid "Next due date is prior to opening date"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:712
+#, fuzzy
+msgid "No account selected"
+msgstr "Konto-valg"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:716
+msgid "No amount for payment selected"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:720
+msgid "No payee for payment selected"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:724
+msgid "No name assigned for schedule"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:805
+msgid "No payee supplied"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:819
+#, fuzzy
+msgid "No opening balance supplied"
+msgstr "Åbningsbalancer"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:826
+msgid "An interest change can only happen after the first payment"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:615 dialogs/knewloanwizard.cpp:634
+#: wizards/newaccountwizard/knewaccountwizard.cpp:884
+#: wizards/newaccountwizard/rc.cpp:55
+msgid "Months"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:616 dialogs/knewloanwizard.cpp:635
+#: wizards/newaccountwizard/knewaccountwizard.cpp:885
+#: wizards/newaccountwizard/knewaccountwizard.cpp:889
+#: wizards/newaccountwizard/rc.cpp:56
+msgid "Years"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:711
+#: wizards/newaccountwizard/knewaccountwizard.cpp:961
+#, c-format
+msgid "KMyMoney has calculated the amount of the loan as %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:718
+#: wizards/newaccountwizard/knewaccountwizard.cpp:968
+msgid "KMyMoney has calculated the interest rate to %1%."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:731
+#: wizards/newaccountwizard/knewaccountwizard.cpp:981
+msgid ""
+"KMyMoney has calculated a periodic payment of %1 to cover principal and "
+"interest."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:993
+#, c-format
+msgid ""
+"The number of payments has been decremented and the balloon payment has been "
+"modified to %1."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1001
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1021
+#, c-format
+msgid "The balloon payment has been modified to %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:763
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1013
+msgid "KMyMoney has calculated the term of your loan as %1. "
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1052
+msgid "KMyMoney has calculated a balloon payment of %1 for this loan."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:809
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1059
+msgid "KMyMoney has successfully verified your loan information."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1067
+msgid ""
+"You have entered mis-matching information. Please modify your figures or "
+"leave one value empty to let KMyMoney calculate it for you"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:504 dialogs/knewloanwizard.cpp:513
+#: dialogs/knewloanwizard.cpp:522 dialogs/knewloanwizard.cpp:532
+#: dialogs/knewloanwizard.cpp:820
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1070
+msgid "Calculation error"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:824
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1074
+msgid ""
+"\n"
+"\n"
+"Accept this or modify the loan information and recalculate."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:826
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1076
+msgid "Calculation successful"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:846
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1129
+#, c-format
+msgid ""
+"_n: one month\n"
+"%n months"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:850
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1133
+#, c-format
+msgid ""
+"_n: one year\n"
+"%n years"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:854
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1137
+#, c-format
+msgid ""
+"_n: one payment\n"
+"%n payments"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1190
+msgid "Press Calculate to verify the values"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1194
+msgid "Not all details supplied"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:70 dialogs/knewloanwizard.cpp:122
+#: dialogs/knewloanwizard.cpp:136
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1381
+msgid "&Create..."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:138
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1383
+msgid "Create a new asset account"
+msgstr "Opret en ny konto for aktiver"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1384
+msgid ""
+"If the asset account does not yet exist, press this button to create it."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1596
+#, fuzzy
+msgid "Account information"
+msgstr "Betalings informationer"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1601
+#: wizards/newaccountwizard/rc.cpp:59
+#, fuzzy
+msgid "Subaccount of"
+msgstr "Underkonto"
+
+#: dialogs/rc.cpp:225 dialogs/rc.cpp:326 dialogs/rc.cpp:371 dialogs/rc.cpp:723
+#: plugins/ofximport/dialogs/rc.cpp:23 reports/listtable.cpp:225
+#: widgets/kmymoneyaccounttreebase.cpp:113 widgets/register.cpp:61
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1606
+msgid "Type"
+msgstr ""
+
+#: dialogs/kcurrencyeditdlg.cpp:62 dialogs/rc.cpp:56 dialogs/rc.cpp:59
+#: dialogs/rc.cpp:75 dialogs/rc.cpp:727 dialogs/rc.cpp:792
+#: kmymoneyutils.cpp:84 kmymoneyutils.cpp:111 mymoney/mymoneyaccount.cpp:741
+#: mymoney/mymoneysecurity.cpp:169 reports/listtable.cpp:233
+#: widgets/kmymoneypriceview.cpp:127
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1607
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1630
+#: wizards/newaccountwizard/rc.cpp:6 wizards/newaccountwizard/rc.cpp:24
+msgid "Currency"
+msgstr "Valuta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1608
+#: wizards/newaccountwizard/rc.cpp:7 wizards/newuserwizard/rc.cpp:9
+#, fuzzy
+msgid "Opening date"
+msgstr "Åbningsbalancer"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1610
+#: wizards/newaccountwizard/rc.cpp:9
+#, fuzzy
+msgid "Conversion rate"
+msgstr "Rente"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1613
+#: wizards/newaccountwizard/rc.cpp:15 wizards/newuserwizard/rc.cpp:13
+#, fuzzy
+msgid "Opening balance"
+msgstr "Åbningsbalancer"
+
+#: dialogs/keditscheduledlg.cpp:507 dialogs/transactioneditor.cpp:784
+#: dialogs/transactioneditor.cpp:848 plugins/ofximport/dialogs/rc.cpp:22
+#: widgets/rc.cpp:111 widgets/register.cpp:59 widgets/transaction.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1618
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1632
+msgid "Number"
+msgstr "Nummer"
+
+#: dialogs/rc.cpp:365 wizards/newaccountwizard/knewaccountwizard.cpp:1621
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1634
+#: wizards/newaccountwizard/rc.cpp:26 wizards/newaccountwizard/rc.cpp:66
+msgid "IBAN"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1627
+#, fuzzy
+msgid "Brokerage Account"
+msgstr "Standard-konto:"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1640
+#, fuzzy
+msgid "Loan information"
+msgstr "Betalings informationer"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1643
+#, fuzzy
+msgid "Amount borrowed"
+msgstr "Indtastet beløb"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1645
+#, fuzzy
+msgid "Amount lent"
+msgstr "Indtastet beløb"
+
+#: dialogs/rc.cpp:515 dialogs/rc.cpp:546
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1647
+#: wizards/newaccountwizard/rc.cpp:75
+msgid "Interest rate"
+msgstr "Rente"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1648
+#, fuzzy
+msgid "Interest rate is"
+msgstr "Rente"
+
+#: dialogs/rc.cpp:509 dialogs/rc.cpp:572
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1649
+#, fuzzy
+msgid "Principal and interest"
+msgstr "Amortisation og rente"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1650
+#: wizards/newaccountwizard/rc.cpp:90
+#, fuzzy
+msgid "Additional fees"
+msgstr "Ændr gebyrergebyrer"
+
+#: dialogs/rc.cpp:525 wizards/newaccountwizard/knewaccountwizard.cpp:1651
+#: wizards/newaccountwizard/rc.cpp:44
+msgid "Payment frequency"
+msgstr "Betalingsfrekvens"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1652
+#: wizards/newaccountwizard/rc.cpp:105
+#, fuzzy
+msgid "Payment account"
+msgstr "Der er ingen konto til aktiver"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1655
+#, fuzzy
+msgid "Payout information"
+msgstr "Betalings informationer"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1658
+#, fuzzy
+msgid "Refinance"
+msgstr "Om&døb"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1661
+#, fuzzy
+msgid "Transfer amount to"
+msgstr "Overfør til"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1663
+#, fuzzy
+msgid "Transfer amount from"
+msgstr "Overfør fra"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1665
+#, fuzzy
+msgid "Payment date"
+msgstr "Betaling"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1671
+#, fuzzy
+msgid "Schedule information"
+msgstr "Slet pris-information"
+
+#: reports/listtable.cpp:228
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1684
+#, fuzzy
+msgid "Occurence"
+msgstr "Valutaer"
+
+#: mymoney/mymoneyscheduled.cpp:891 mymoney/mymoneyscheduled.cpp:947
+#: mymoney/mymoneyscheduled.cpp:1283 mymoney/mymoneyscheduletest.cpp:1343
+#: widgets/rc.cpp:19 widgets/rc.cpp:74
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+msgid "Monthly"
+msgstr "Månedlig"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1677
+#, fuzzy
+msgid "Paid from"
+msgstr "Gyldig fra:"
+
+#: widgets/kmymoneycombo.cpp:473 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1678
+msgid "Pay to"
+msgstr "Betal til"
+
+#: dialogs/investactivities.cpp:197 dialogs/investactivities.cpp:285
+#: dialogs/investactivities.cpp:365 dialogs/kfindtransactiondlg.cpp:197
+#: dialogs/kmymoneysplittable.cpp:80 dialogs/rc.cpp:51 dialogs/rc.cpp:212
+#: reports/listtable.cpp:197 views/khomeview.cpp:421 views/khomeview.cpp:494
+#: views/khomeview.cpp:528 views/kscheduledview.cpp:73 views/rc.cpp:63
+#: widgets/register.cpp:58 widgets/transaction.cpp:1055
+#: widgets/transaction.cpp:1578 widgets/transaction.cpp:1610
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1679
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1685
+msgid "Amount"
+msgstr "Beløb"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1680
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1686
+#, fuzzy
+msgid "First payment due"
+msgstr "Første betaling forfalder den"
+
+#: dialogs/rc.cpp:102 wizards/newaccountwizard/knewaccountwizard.cpp:1681
+#: wizards/newaccountwizard/rc.cpp:115
+msgid "Payment method"
+msgstr "Betalingsmetode"
+
+#: wizards/newaccountwizard/rc.cpp:1
+msgid ""
+"This page summarizes the data you have entered. Press <b>Finish</b> to "
+"create the account, schedules, etc. or use <b>Back</b> to modify your "
+"entries."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:2
+#, fuzzy
+msgid "Item"
+msgstr "termin"
+
+#: dialogs/rc.cpp:110 dialogs/rc.cpp:165 dialogs/rc.cpp:252 dialogs/rc.cpp:757
+#: dialogs/rc.cpp:818 views/kinvestmentview.cpp:74 widgets/register.cpp:574
+#: wizards/newaccountwizard/rc.cpp:3
+msgid "Value"
+msgstr "Værdi"
+
+#: wizards/newaccountwizard/rc.cpp:4
+msgid ""
+"Enter the name of the account under which it is known within KMyMoney.\n"
+"Select the type for the new account. Use the <b>What's this?</b> feature to "
+"see more details about the various account types.\n"
+"Enter the date the account was opened and its currency."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:5
+msgid "Select the currency in which this account is denominated."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:8
+msgid ""
+"The opening balance is the balance of the account when you start using it "
+"with KMyMoney. For new accounts this is usually 0 but for existing accounts "
+"this may well differ. Please consult the account statements to figure out "
+"this value. The opening balance is to be provided in the currency of the "
+"account as selected with the currency button."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:10
+msgid ""
+"The opening date would be the date of the last statement. In case you want "
+"to keep track of transactions prior to this date, enter the ending balance "
+"and statement date of a prior statement and add all following transactions "
+"into KMyMoney.\n"
+"<br>\n"
+"<i>Note</i>: If you do not know the exact amount of the opening balance, "
+"enter an estimate. You can change this value later before you reconcile this "
+"account for the first time."
+msgstr ""
+
+#: dialogs/rc.cpp:52 dialogs/rc.cpp:54 dialogs/rc.cpp:57 dialogs/rc.cpp:60
+#: dialogs/rc.cpp:748 dialogs/rc.cpp:749 dialogs/rc.cpp:768 widgets/rc.cpp:6
+#: widgets/rc.cpp:7 widgets/rc.cpp:8 widgets/rc.cpp:9 widgets/rc.cpp:10
+#: widgets/rc.cpp:11 widgets/rc.cpp:12 widgets/rc.cpp:13 widgets/rc.cpp:14
+#: widgets/rc.cpp:15 widgets/rc.cpp:16 widgets/rc.cpp:17
+#: wizards/newaccountwizard/rc.cpp:11 wizards/newaccountwizard/rc.cpp:88
+#: wizards/newaccountwizard/rc.cpp:91 wizards/newaccountwizard/rc.cpp:93
+#: wizards/newuserwizard/rc.cpp:14
+msgid "xxx"
+msgstr "xxx"
+
+#: wizards/newaccountwizard/rc.cpp:12
+#, fuzzy
+msgid "Account type"
+msgstr "Kontonavn"
+
+#: wizards/newaccountwizard/rc.cpp:13
+msgid ""
+"For foreign currencies an initial conversion rate needs to be provided. This "
+"should be the price of the foreign currency in the base currency on the "
+"opening date of the account."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:14
+#, fuzzy
+msgid "Account name"
+msgstr "Kontonavn"
+
+#: wizards/newaccountwizard/rc.cpp:16
+msgid ""
+"<p><b>Checking</b>\n"
+"Use the checking account type to manage activities on your checking account "
+"e.g. payments, checks and cash card purchases.</p>\n"
+"\n"
+"<p><b>Savings</b>\n"
+"Use the savings account type to manage activities on your savings account.</"
+"p>\n"
+"\n"
+"<p><b>Credit Card</b>\n"
+"Use the credit card account type to manage activities on your credit card.</"
+"p>\n"
+"\n"
+"<p><b>Cash</b>\n"
+"\n"
+"Use the cash account type to manage activities in your wallet.</p>\n"
+"\n"
+"<p><b>Loan</b>\n"
+"Use the loan account type to manage amortization loans (e.g. mortgages, car "
+"loan, money you lend, private loans etc.).</p>\n"
+"\n"
+"<p><b>Investment</b>\n"
+"Use the investment account to manage your stock, mutual fund and other "
+"investments.</p>\n"
+"\n"
+"<p><b>Asset</b>\n"
+"Use the asset account type to manage assets (e.g. your house, car or art "
+"collection).</p>\n"
+"\n"
+"<p><b>Liability</b>\n"
+"Use the liability account type to manage any type of liability except "
+"amortization loans. Use it for taxes you owe or money you borrowed from "
+"friends. For amortization loans like mortgages you should create a loan "
+"account.</p>"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:17
+msgid "Preferred account"
+msgstr "Standard konto"
+
+#: wizards/newaccountwizard/rc.cpp:18
+msgid ""
+"Mark this checkbox if the account should be maintained as preferred account"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:19
+msgid ""
+"Selecting the <b>Preferred Account</b> checkbox will allow preferred access "
+"in some dialogs and views of KMyMoney."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:20
+msgid "Enter a name under which this account is known within KMyMoney."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:21
+#, fuzzy
+msgid "Online quote"
+msgstr "Online pris opdatering"
+
+#: wizards/newaccountwizard/rc.cpp:22
+msgid ""
+"Does this investment account have a brokerage account?<p>\n"
+"\n"
+"<b>Check</b> the mark if this investment account has an associated account "
+"for money that is not invested.<br>\n"
+"\n"
+"<b>Uncheck</b> it if you don't use this account for active stock brokerage. "
+"You should also uncheck it if this account is not maintained by a bank or "
+"broker."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:23
+#, fuzzy
+msgid "Create brokerage account"
+msgstr "Opret en ny konto for aktiver"
+
+#: wizards/newaccountwizard/rc.cpp:25 wizards/newaccountwizard/rc.cpp:64
+#, fuzzy
+msgid "Account number"
+msgstr "Kontonummer"
+
+#: wizards/newaccountwizard/rc.cpp:27
+msgid ""
+"Please select the required options. Please use the <b>What's this?</b> "
+"feature to see more information about the items."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:28
+#, fuzzy
+msgid "What is the type of the loan?"
+msgstr "Hvad er denne konto's valuta?"
+
+#: dialogs/rc.cpp:481 wizards/newaccountwizard/rc.cpp:29
+msgid "I am borrowing money"
+msgstr "Jeg låner penge"
+
+#: dialogs/rc.cpp:482 wizards/newaccountwizard/rc.cpp:30
+msgid "I am lending money"
+msgstr "Jeg udlåner penge"
+
+#: wizards/newaccountwizard/rc.cpp:31
+#, fuzzy
+msgid "Who is the payee/payer of the loan?"
+msgstr "Hvad er denne konto's valuta?"
+
+#: wizards/newaccountwizard/rc.cpp:32
+msgid ""
+"Enter the name of the person or bank you owe money or who owes you money.\n"
+"\n"
+"If the name does not exist within KMyMoney's database, you are asked if you "
+"want to create it."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:33
+msgid "Did you make/receive any payments yet?"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:36
+#, fuzzy
+msgid ""
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?\n"
+"\n"
+"Note: Payments made to obtain the loan (e.g. Disagio) are not considered as "
+"payments in this context."
+msgstr "Hint: Betalinger for at få lånet regnes ikke som en betaling her."
+
+#: wizards/newaccountwizard/rc.cpp:37
+msgid "Which payments do you want to record?"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:38
+#, fuzzy
+msgid "All payments"
+msgstr "Betalinger"
+
+#: wizards/newaccountwizard/rc.cpp:39
+msgid "Start with this year's payments"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:40
+msgid ""
+"<qt>Select which transactions should be recorded.\n"
+"\n"
+"<b>All payments</b> allows you to enter all payments made for this loan.\n"
+"\n"
+"The option to <b>start from the beginning of the current year</b> is meant "
+"for loans that are active for a longer period of time already and you don't "
+"want to enter all transactions of the past.\n"
+"</qt>"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:41
+msgid "Balance before start of recording"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:42
+msgid ""
+"Enter the ending balance found on the statement that is the last one before "
+"you want to start recording this loan in KMyMoney."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:43
+msgid ""
+"You have selected to record only payments from the beginning of this year. "
+"Since prior transactions will not be recorded, you need to supply the "
+"balance of the loan on January 1st of this year."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:45
+msgid "Interest Compounding frequency"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:46
+msgid ""
+"Select the frequency with which the interest is compounded. If uncertain, "
+"select the same as the payment frequency. Consult your loan contract for "
+"details."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:47
+#, fuzzy
+msgid "Due date of first payment to be recorded"
+msgstr "Dato for første betaling"
+
+#: wizards/newaccountwizard/rc.cpp:48
+msgid ""
+"Depending on the answer to <b>What do you want to record?</b> this field "
+"means the following:<p>\n"
+"\n"
+"<b>All payments</b><br>\n"
+"Enter the due date of the very first payment<p>\n"
+"\n"
+"<b>Start with this year's payments</b><br>\n"
+"Enter the due date of the first payment in the current year"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:49
+#, fuzzy
+msgid "Type of interest rate"
+msgstr "Rentetype"
+
+#: wizards/newaccountwizard/rc.cpp:50
+#, fuzzy
+msgid "Fixed"
+msgstr "Felt"
+
+#: wizards/newaccountwizard/rc.cpp:51
+#, fuzzy
+msgid "Variable"
+msgstr "Værdi"
+
+#: wizards/newaccountwizard/rc.cpp:52
+#, fuzzy
+msgid "Time between interest changes"
+msgstr "Dato for næste rentetilpasning"
+
+#: dialogs/knewloanwizard.cpp:613 wizards/newaccountwizard/rc.cpp:53
+msgid "Days"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:614 wizards/newaccountwizard/rc.cpp:54
+msgid "Weeks"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:57
+#, fuzzy
+msgid "Next interest change is due"
+msgstr "Næste rentetilpasning den:"
+
+#: wizards/newaccountwizard/rc.cpp:58
+#, fuzzy
+msgid "This page allows you to select the parent account."
+msgstr "Vælg venligst en over-konto"
+
+#: wizards/newaccountwizard/rc.cpp:60
+msgid ""
+"If this account is managed by an institution please select the institution "
+"from the list. If the institution does not exist yet, please choose the "
+"<b>New Institution</b> button to create it. Otherwise, leave this field "
+"empty.\n"
+"Enter the account number used by the institution to identify the account."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:62
+msgid "Select the institution which manages this account or leave empty"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:63
+#, fuzzy
+msgid "New Institution"
+msgstr "N&y Institution"
+
+#: wizards/newaccountwizard/rc.cpp:65
+msgid ""
+"Accounts managed by an institution are usually referenced by a unique number "
+"the so called account number. Enter that number here.\n"
+"\n"
+"KMyMoney currently uses this number only for some online banking functions."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:67
+msgid "Enter the International Bank Account Number into this field"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:68
+msgid ""
+"You can enter the IBAN (International Bank Account Number) into this field "
+"if you know it. Usually, people at your institution can tell you the number "
+"or it is printed on your statements.\n"
+"\n"
+"See also http://en.wikipedia.org/wiki/International_Bank_Account_Number for "
+"more information.\n"
+"\n"
+"KMyMoney keeps this field only for documentation purposes and does not use "
+"it otherwise."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:69
+msgid ""
+"Now enter the details for your loan. You can leave one of the fields empty "
+"and KMyMoney will calculate it when you press the <b>Calculate</b> button. "
+"Before you can continue with the next page you also need to press "
+"<b>Calculate</b> so that KMyMoney can check the logical correctness of the "
+"values you have supplied."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:70
+#, fuzzy
+msgid "The interest rate gets calculated"
+msgstr "Rente udregning"
+
+#: wizards/newaccountwizard/rc.cpp:71
+#, fuzzy
+msgid "when the payment is received"
+msgstr "Når betalinger modtages."
+
+#: wizards/newaccountwizard/rc.cpp:72
+#, fuzzy
+msgid "when the payment is due"
+msgstr "Når betalingen forfalder."
+
+#: dialogs/rc.cpp:531 dialogs/rc.cpp:533 wizards/newaccountwizard/rc.cpp:73
+msgid "Loan amount"
+msgstr "Lånets størrelse"
+
+#: wizards/newaccountwizard/rc.cpp:74
+msgid ""
+"Enter the amount of the loan in this field. If you want to calculate this "
+"field out of the other parameters, please leave it empty. If the field is "
+"marked as required (colored background) you have informed KMyMoney about the "
+"fact that there were already some payments towards the loan. In this case, "
+"please enter the ending balance of your last statement."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:76
+#, fuzzy
+msgid ""
+"Please enter the interest rate in percent or leave the field empty to "
+"calculate it."
+msgstr ""
+"\n"
+"Indtast renten, eller efterlad feltet blankt, hvis du ønsker at KMyMoney "
+"skal udregne det."
+
+#: dialogs/rc.cpp:559 wizards/newaccountwizard/rc.cpp:77
+msgid "Term"
+msgstr "Termin"
+
+#: wizards/newaccountwizard/rc.cpp:78
+msgid ""
+"Please enter the term of this loan or enter 0 to calculate it. The term is "
+"the time that is required to fully repay the loan. This time might be "
+"different from the time your loan contract is signed for."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:79
+#, fuzzy
+msgid "Payment (principal and interest)"
+msgstr "Amortisation og rente"
+
+#: wizards/newaccountwizard/rc.cpp:80
+#, fuzzy
+msgid ""
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"\n"
+"Indtast renten, eller efterlad feltet blankt, hvis du ønsker at KMyMoney "
+"skal udregne det."
+
+#: wizards/newaccountwizard/rc.cpp:81
+#, fuzzy
+msgid "Balloon payment"
+msgstr "Total betaling:"
+
+#: wizards/newaccountwizard/rc.cpp:82
+#, fuzzy
+msgid ""
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"\n"
+"Indtast renten, eller efterlad feltet blankt, hvis du ønsker at KMyMoney "
+"skal udregne det."
+
+#: wizards/newaccountwizard/rc.cpp:83
+#, fuzzy
+msgid "Calculate"
+msgstr "Udregn lån"
+
+#: wizards/newaccountwizard/rc.cpp:84
+msgid "Press this button to calculate/verify your loan details."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:85
+msgid ""
+"Pressing this button calculates a possibly missing parameter for your loan "
+"or verifies that the values entered match. If something is not correct you "
+"will receive information about it."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:86
+msgid ""
+"Now enter the information required for the periodic loan payments. If your "
+"regular payments contains any additional fees, click on the <b>Additional "
+"fees</b> button to enter them."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:87
+#, fuzzy
+msgid "Principal + Interest"
+msgstr "Amortisation + rente:"
+
+#: dialogs/rc.cpp:620 wizards/newaccountwizard/rc.cpp:89
+msgid "+"
+msgstr "+"
+
+#: wizards/newaccountwizard/rc.cpp:92
+#, fuzzy
+msgid "= periodical payments"
+msgstr "= Periodisk betaling"
+
+#: dialogs/rc.cpp:643 wizards/newaccountwizard/rc.cpp:94
+msgid ""
+"If this loan is for an asset, such as a car or a house, you can create the "
+"asset account now. An asset account represents the total value of an asset. "
+"The money from this loan will be transfered into the asset account you "
+"create or select.\n"
+"If this loan is a 'consumer loan' (money to use however you want), you can "
+"use a checking account instead."
+msgstr ""
+
+#: dialogs/rc.cpp:644 wizards/newaccountwizard/rc.cpp:95
+msgid "Don't create payout transaction"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:96
+msgid "Refinance existing loan"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:97
+msgid ""
+"Check this if you are refinancing a loan that already exists in KMyMoney"
+msgstr ""
+
+#: dialogs/rc.cpp:642 wizards/newaccountwizard/rc.cpp:98
+msgid "Asset Account"
+msgstr "Konto for aktiver"
+
+#: dialogs/rc.cpp:2 wizards/newaccountwizard/rc.cpp:99
+#, fuzzy
+msgid "Create"
+msgstr "&Opret"
+
+#: wizards/newaccountwizard/rc.cpp:100
+#, fuzzy
+msgid "Loan account"
+msgstr "Lånets størrelse"
+
+#: dialogs/rc.cpp:646 wizards/newaccountwizard/rc.cpp:101
+msgid "Date of payment"
+msgstr "Dato for betaling"
+
+#: wizards/newaccountwizard/rc.cpp:102
+msgid ""
+"KMyMoney creates a schedule for this payment and reminds you whenever a "
+"payment must be made. Please select the account to/from which payments will "
+"be made and the category the interest will be assigned to.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+
+#: dialogs/rc.cpp:613 wizards/newaccountwizard/rc.cpp:103
+msgid "Interest category"
+msgstr "Rente kategori"
+
+#: wizards/newaccountwizard/rc.cpp:104
+msgid ""
+"The category the interest part of the payment will be assigned to. If you "
+"borrow money you usually have to pay interest, so this should be an expense "
+"category. If you lend the money, you receive the interest. In this case, "
+"select an income category here."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:106
+msgid ""
+"Select the account from which you make your periodical payments or where you "
+"receive regular payments in case you lend the money. In most cases, this is "
+"a checking account."
+msgstr ""
+
+#: dialogs/rc.cpp:519 wizards/newaccountwizard/rc.cpp:107
+msgid "First payment due on"
+msgstr "Første betaling forfalder den"
+
+#: wizards/newaccountwizard/rc.cpp:108
+msgid ""
+"For credit card accounts you can create a monthly schedule which will "
+"automatically remind you about the payment. Please fill in the details about "
+"this payment here."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:109
+#, fuzzy
+msgid "Yes, remind me when the payment is due"
+msgstr "Når betalingen forfalder."
+
+#: wizards/newaccountwizard/rc.cpp:110
+#, fuzzy
+msgid "Name of schedule"
+msgstr "Navn på lånet"
+
+#: dialogs/rc.cpp:151 dialogs/rc.cpp:218 dialogs/rc.cpp:219
+#: reports/listtable.cpp:199 views/kscheduledview.cpp:72 widgets/rc.cpp:113
+#: widgets/register.cpp:57 wizards/newaccountwizard/rc.cpp:111
+msgid "Payee"
+msgstr "Betalingsmodtager"
+
+#: wizards/newaccountwizard/rc.cpp:112
+msgid "Estimated monthly payment"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:113
+msgid "Due date of next payment"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:114
+msgid ""
+"Payment should be made\n"
+"from account"
+msgstr ""
+
+#: wizards/newuserwizard/knewuserwizard.cpp:79
+#, fuzzy
+msgid "KMyMoney New File Setup"
+msgstr "Ingen MyMoneyFil åben"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:81
+#, fuzzy
+msgid "Introduction"
+msgstr "Institution"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:82
+#, fuzzy
+msgid "Personal Data"
+msgstr "Personlig information..."
+
+#: wizards/newuserwizard/knewuserwizard.cpp:83
+#, fuzzy
+msgid "Select Currency"
+msgstr "Vælg som standard valuta"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:84
+#, fuzzy
+msgid "Select Accounts"
+msgstr "Vælg konto:"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:85
+msgid "Set preferences"
+msgstr ""
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid ""
+"Unable to load data, because no contact has been associated with the owner "
+"of the standard addressbook."
+msgstr ""
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid "Addressbook import"
+msgstr "Adressebogs importering"
+
+#: wizards/newuserwizard/rc.cpp:1
+msgid ""
+"A typical KMyMoney user maintains a checking a account with some institution "
+"and uses it to receive money or pay bills. If this is not the case, please "
+"deselect the checkbox below and continue on the next page."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:2
+msgid "I have a checking account that I want to manage with KMyMoney"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:3
+msgid "The name of the instititution that issued the account."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:4
+msgid ""
+"Each institution has a routing number. Enter it here. If uncertain, leave "
+"the field blank. You can modify it later."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:5
+#, fuzzy
+msgid "Name of the institution"
+msgstr "Navn på lånet"
+
+#: wizards/newuserwizard/rc.cpp:6
+#, fuzzy
+msgid "Routing number"
+msgstr "Kontonummer"
+
+#: wizards/newuserwizard/rc.cpp:7
+msgid ""
+"In general the institution that issued the account also issued a number for "
+"it. Enter it here. If uncertain, you can modify this entry later."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:8
+msgid ""
+"Enter a descriptive name that will be used by KMyMoney to identify your "
+"checking account."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:10
+msgid ""
+"Enter the date from when on you plan to keep track of the transactions in "
+"that account. This is usually the date of the last statement. If uncertain, "
+"leave as is."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:11
+#, fuzzy
+msgid "Number of the account"
+msgstr "Navn på lånet"
+
+#: wizards/newuserwizard/rc.cpp:12
+#, fuzzy
+msgid "Name of the account"
+msgstr "Navn på lånet"
+
+#: wizards/newuserwizard/rc.cpp:15
+msgid ""
+"Enter the opening balance of the account. This is usually the ending balance "
+"of the last statement. If uncertain, leave as is."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:16
+msgid ""
+"The fields below allow you to enter some information about your checking "
+"account. Once this wizard finishes, the account will be created for you "
+"within KMyMoney."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:17
+msgid ""
+"KMyMoney supports multiple currencies. Your reports will be based on a "
+"default curreny which you can select here. The default for new accounts is "
+"also the currency you select here."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:18
+msgid ""
+"KMyMoney will store your financial data in a file on the disk. A standard "
+"filename within your KDE user environment will be the default. This is just "
+"provided for convenience and you can choose any other location here."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:19
+msgid ""
+"Either the currently selected file exists or the selected directory does not "
+"exist. Please make sure, that\n"
+"\n"
+"<ul>\n"
+"<li>the selected directory exists and</li>\n"
+"<li>the filename is not currently used in this directory.</li>\n"
+"</ul>"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:20
+msgid ""
+"This finishes the setup of your KMyMoney environment. You can now press the "
+"Finish button and start using KMyMoney to record your financial transactions."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:21
+msgid ""
+"Please enter some information about yourself.<br><br>\n"
+"\n"
+"This information will be seen and used only by you. The information is used "
+"to personalize KMyMoney, to encrypt your file, etc."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:28
+msgid "Zip code"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:30
+msgid "Welcome to KMyMoney!"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:31
+msgid ""
+"You have started KMyMoney for the first time on this computer. Before this "
+"program can help you to manage your finances, it needs to collect some data "
+"from you.<p>\n"
+"\n"
+"On the next few pages you will be guided through the steps necessary to "
+"setup the program. This will happen only once."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:32
+msgid ""
+"<p>KMyMoney can encrypt your datafile using GPG Encryption. GPG encryption "
+"is one of the most secure methods in the world for protecting data. All of "
+"your account numbers and other important financial information will be very "
+"secure.</p>"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:33
+msgid ""
+"If you would like to review or change any preference settings for KMyMoney "
+"at this time, you can do so here. If not just click <b>Next</b>."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:34
+msgid "Configure preferences now"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:35
+msgid ""
+"You can change the configuration options at any time using the configuration "
+"dialog. Just select the <b>Configure KMyMoney...</b> option in the "
+"<b>Settings</b> menu."
+msgstr ""
+
+#: dialogs/rc.cpp:83 dialogs/rc.cpp:411 dialogs/rc.cpp:435
+#: kmymoneyutils.cpp:92 kmymoneyutils.cpp:105 mymoney/mymoneyaccount.cpp:753
+#: mymoney/mymoneysecurity.cpp:160
+msgid "Stock"
+msgstr "Aktie"
+
+#: dialogs/rc.cpp:84 dialogs/rc.cpp:412 dialogs/rc.cpp:436
+#: kmymoneyutils.cpp:107 mymoney/mymoneysecurity.cpp:163
+#, fuzzy
+msgid "Mutual Fund"
+msgstr "Fælles kapital"
+
+#: dialogs/rc.cpp:85 dialogs/rc.cpp:413 dialogs/rc.cpp:437
+#: kmymoneyutils.cpp:109 mymoney/mymoneysecurity.cpp:166
+#, fuzzy
+msgid "Bond"
+msgstr "Obligation"
+
+#: mymoney/mymoneysecurity.cpp:172 reports/querytable.cpp:1150
+#: widgets/kmymoneyaccountselector.cpp:76
+msgid "None"
+msgstr "Aldrig"
+
+#: dialogs/rc.cpp:46 kmymoneyutils.cpp:402 mymoney/mymoneyaccount.cpp:759
+#: mymoney/mymoneyscheduled.cpp:1002 mymoney/mymoneysecurity.cpp:175
+#: views/kforecastview.cpp:174 widgets/register.cpp:54
+#: widgets/register.cpp:485 widgets/transaction.cpp:708
+#: widgets/transaction.cpp:1459
+msgid "Unknown"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragesql.cpp:191
+msgid ""
+"Database apparently in use\n"
+"Opened by %1 on %2 at %3.\n"
+"Open anyway?"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragesql.cpp:229
+msgid "Cannot currently create database for driver %1; please create manually"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragesql.cpp:244
+msgid "Error in create database %1; do you have create permissions?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1329
+#: mymoney/storage/mymoneystoragexml.cpp:166
+#, fuzzy
+msgid "Loading transactions..."
+msgstr "Find transaktion..."
+
+#: converter/mymoneygncreader.cpp:1190
+#: mymoney/storage/mymoneystoragexml.cpp:173
+#, fuzzy
+msgid "Loading accounts..."
+msgstr "Flytter konto"
+
+#: mymoney/storage/mymoneystoragexml.cpp:180
+#, fuzzy
+msgid "Loading securities..."
+msgstr "Åbner fil..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:187
+#, fuzzy
+msgid "Loading reports..."
+msgstr "Åbner fil..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:268
+msgid "Unknown XML tag %1 found in line %2"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:274
+msgid "Exception while creating a %1 element: %2"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:513
+#, fuzzy
+msgid "Loading file information..."
+msgstr "Åbner fil..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:591
+#, fuzzy
+msgid "Loading user information..."
+msgstr "Find transaktion..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:655
+#, fuzzy
+msgid "Saving accounts..."
+msgstr "Flytter konto"
+
+#: mymoney/storage/mymoneystoragexml.cpp:678
+#, fuzzy
+msgid "Saving transactions..."
+msgstr "Find transaktion..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:747
+#, fuzzy
+msgid "Saving reports..."
+msgstr "Gemmer fil..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:762
+#, fuzzy
+msgid "Saving budgets..."
+msgstr "Gemmer fil..."
+
+#: mymoney/storage/mymoneystoragedump.cpp:414
+msgid "not reconciled"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragedump.cpp:417
+msgid "cleared"
+msgstr "ryddet"
+
+#: mymoney/storage/mymoneystoragedump.cpp:420
+msgid "reconciled"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragedump.cpp:423
+msgid "frozen"
+msgstr "frosset"
+
+#: mymoney/storage/mymoneystoragedump.cpp:426
+msgid "unknown"
+msgstr "ukendt"
+
+#: mymoney/mymoneyaccount.cpp:101
+msgid ""
+"Account %1 contains an opening balance. Please use a KMyMoney version >= 0.8 "
+"and < 0.9 to correct the problem."
+msgstr ""
+
+#: mymoney/mymoneyaccount.cpp:597
+msgid ""
+"_: Brokerage (suffix for account names)\n"
+"Brokerage"
+msgstr ""
+
+#: kmymoneyutils.cpp:74 mymoney/mymoneyaccount.cpp:726
+msgid "Certificate of Deposit"
+msgstr ""
+
+#: kmymoneyutils.cpp:78 mymoney/mymoneyaccount.cpp:732
+msgid "Money Market"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:186 converter/mymoneytemplate.cpp:187
+#: dialogs/knewaccountdlg.cpp:1018 kmymoneyutils.cpp:86
+#: mymoney/mymoneyaccount.cpp:744 views/kaccountsview.cpp:360
+#: views/kbudgetview.cpp:372 views/kcategoriesview.cpp:178
+#: views/khomeview.cpp:1813 views/kmymoneyview.cpp:767
+#: widgets/kmymoneyaccountselector.cpp:68
+#: widgets/kmymoneyaccountselector.cpp:179
+#: widgets/kmymoneyaccountselector.cpp:370 widgets/register.cpp:828
+msgid "Income"
+msgstr "Indtægter"
+
+#: converter/mymoneytemplate.cpp:190 converter/mymoneytemplate.cpp:191
+#: dialogs/knewaccountdlg.cpp:1020 kmymoneyutils.cpp:88
+#: mymoney/mymoneyaccount.cpp:747 views/kaccountsview.cpp:364
+#: views/kbudgetview.cpp:378 views/kcategoriesview.cpp:182
+#: views/kmymoneyview.cpp:768 widgets/kmymoneyaccountselector.cpp:72
+#: widgets/kmymoneyaccountselector.cpp:180
+#: widgets/kmymoneyaccountselector.cpp:380 widgets/register.cpp:829
+msgid "Expense"
+msgstr "Udgifter"
+
+#: kmymoneyutils.cpp:90 mymoney/mymoneyaccount.cpp:750
+msgid "Investment Loan"
+msgstr "Investeringslån"
+
+#: mymoney/mymoneyfile.cpp:47
+msgid "Opening Balances"
+msgstr "Åbningsbalancer"
+
+#: mymoney/mymoneyfile.cpp:398
+msgid "Cannot remove transaction that references a closed account."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1414 mymoney/mymoneyfile.cpp:1433
+#: mymoney/mymoneyfile.cpp:1447 mymoney/mymoneyfile.cpp:1469
+#, fuzzy
+msgid "* Problem with account '%1'"
+msgstr "Kunne ikke fjerne konto:"
+
+#: mymoney/mymoneyfile.cpp:1419
+msgid " * Parent account '%1' belongs to a different group."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1420 mymoney/mymoneyfile.cpp:1450
+msgid " New parent account is the top level account '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1436
+msgid " * Parent account '%1' does not contain '%2' as sub-account."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1449
+msgid " * The parent with id %1 does not exist anymore."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1471
+msgid " * Child account with id %1 does not exist anymore."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1472
+msgid " The child account list will be reconstructed."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1492
+#, fuzzy
+msgid " * Unable to update account data in engine."
+msgstr "Kunne ikke fjerne konto:"
+
+#: mymoney/mymoneyfile.cpp:1499
+msgid "* Reconstructing the child lists for"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1536
+msgid " * Unable to update account data for account %1 in engine"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1554
+msgid " * Payee %1 recreated with fixed id"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1583
+msgid " * Payee id updated in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1596
+#, fuzzy
+msgid " * shares set to value in split of transaction '%1'."
+msgstr "Importér overførsler til %1"
+
+#: mymoney/mymoneyfile.cpp:1599
+msgid " * value set to shares in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1605
+msgid ""
+" * Split %2 in transaction '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1616
+msgid " * action marked as interest in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1643
+msgid " * Payee id updated in split of schedule '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1649
+msgid ""
+" * Split in scheduled transaction '%1' contained value != 0 and shares == 0."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1650
+msgid " Shares set to value."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1658
+msgid " * Removed bankid from split in scheduled transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1671
+msgid " * shares set to value in split in schedule '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1674
+msgid " * value set to shares in split in schedule '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1680
+msgid ""
+" * Split %2 in schedule '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1706
+msgid " * Payee id updated in report '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1723
+msgid " * Payee '%1' removed."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1730
+msgid "Finish! Data is consistent."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1732
+msgid "Finish! %1 problem(s) corrected. %2 problem(s) still present."
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:873 mymoney/mymoneyscheduled.cpp:918
+#: mymoney/mymoneyscheduled.cpp:969 mymoney/mymoneyscheduled.cpp:1265
+#: mymoney/mymoneyscheduletest.cpp:1336
+msgid "Once"
+msgstr "En gang"
+
+#: mymoney/mymoneyscheduled.cpp:875 mymoney/mymoneyscheduled.cpp:924
+#: mymoney/mymoneyscheduled.cpp:1267 mymoney/mymoneyscheduletest.cpp:1337
+#: widgets/rc.cpp:72
+msgid "Daily"
+msgstr "Daglig"
+
+#: mymoney/mymoneyscheduled.cpp:877 mymoney/mymoneyscheduled.cpp:931
+#: mymoney/mymoneyscheduled.cpp:1269 mymoney/mymoneyscheduletest.cpp:1338
+#: widgets/rc.cpp:73
+msgid "Weekly"
+msgstr "Ugentlig"
+
+#: mymoney/mymoneyscheduled.cpp:881 mymoney/mymoneyscheduled.cpp:932
+#: mymoney/mymoneyscheduled.cpp:1273 mymoney/mymoneyscheduletest.cpp:1339
+msgid "Every other week"
+msgstr "Hver anden uge"
+
+#: mymoney/mymoneyscheduled.cpp:879 mymoney/mymoneyscheduled.cpp:1271
+#: mymoney/mymoneyscheduletest.cpp:1340
+msgid "Fortnightly"
+msgstr "Hver fjortende dag"
+
+#: mymoney/mymoneyscheduled.cpp:883 mymoney/mymoneyscheduled.cpp:941
+#: mymoney/mymoneyscheduled.cpp:1275 mymoney/mymoneyscheduletest.cpp:1341
+#, fuzzy
+msgid "Every half month"
+msgstr "Hver fjerde måned"
+
+#: mymoney/mymoneyscheduled.cpp:887 mymoney/mymoneyscheduled.cpp:934
+#: mymoney/mymoneyscheduled.cpp:1279 mymoney/mymoneyscheduletest.cpp:1342
+msgid "Every four weeks"
+msgstr "Hver fjerde uge"
+
+#: mymoney/mymoneyscheduled.cpp:893 mymoney/mymoneyscheduled.cpp:935
+#: mymoney/mymoneyscheduled.cpp:1285 mymoney/mymoneyscheduletest.cpp:1344
+#, fuzzy
+msgid "Every eight weeks"
+msgstr "Hver anden uge"
+
+#: mymoney/mymoneyscheduled.cpp:895 mymoney/mymoneyscheduled.cpp:948
+#: mymoney/mymoneyscheduled.cpp:1287 mymoney/mymoneyscheduletest.cpp:1345
+msgid "Every two months"
+msgstr "Hver anden måned"
+
+#: mymoney/mymoneyscheduled.cpp:897 mymoney/mymoneyscheduled.cpp:949
+#: mymoney/mymoneyscheduled.cpp:1289 mymoney/mymoneyscheduletest.cpp:1346
+msgid "Every three months"
+msgstr "Hver tredie måned"
+
+#: mymoney/mymoneyscheduled.cpp:899 mymoney/mymoneyscheduled.cpp:1291
+#: mymoney/mymoneyscheduletest.cpp:1347 widgets/rc.cpp:76
+msgid "Quarterly"
+msgstr "Hvert kvartal"
+
+#: mymoney/mymoneyscheduled.cpp:901 mymoney/mymoneyscheduled.cpp:950
+#: mymoney/mymoneyscheduled.cpp:1293 mymoney/mymoneyscheduletest.cpp:1348
+msgid "Every four months"
+msgstr "Hver fjerde måned"
+
+#: mymoney/mymoneyscheduled.cpp:903 mymoney/mymoneyscheduled.cpp:951
+#: mymoney/mymoneyscheduled.cpp:1295 mymoney/mymoneyscheduletest.cpp:1349
+msgid "Twice yearly"
+msgstr "To gange om året"
+
+#: mymoney/mymoneyscheduled.cpp:905 mymoney/mymoneyscheduled.cpp:957
+#: mymoney/mymoneyscheduled.cpp:1297 mymoney/mymoneyscheduletest.cpp:1350
+#: widgets/rc.cpp:20 widgets/rc.cpp:77
+msgid "Yearly"
+msgstr "Årligt"
+
+#: mymoney/mymoneyscheduled.cpp:907 mymoney/mymoneyscheduled.cpp:958
+#: mymoney/mymoneyscheduled.cpp:1299 mymoney/mymoneyscheduletest.cpp:1351
+msgid "Every other year"
+msgstr "Hvert andet år"
+
+#: mymoney/mymoneyscheduled.cpp:870 mymoney/mymoneyscheduled.cpp:913
+#: mymoney/mymoneyscheduled.cpp:966
+msgid "Any"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:885 mymoney/mymoneyscheduled.cpp:933
+#: mymoney/mymoneyscheduled.cpp:1277
+#, fuzzy
+msgid "Every three weeks"
+msgstr "Hver anden uge"
+
+#: mymoney/mymoneyscheduled.cpp:889 mymoney/mymoneyscheduled.cpp:925
+#: mymoney/mymoneyscheduled.cpp:1281
+#, fuzzy
+msgid "Every thirty days"
+msgstr "Hvert andet år"
+
+#: mymoney/mymoneyscheduled.cpp:971
+#, fuzzy
+msgid "Day"
+msgstr "Daglig"
+
+#: mymoney/mymoneyscheduled.cpp:973 reports/listtable.cpp:206
+#: widgets/kmymoneycalendar.cpp:123 widgets/rc.cpp:97
+msgid "Week"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:975
+#, fuzzy
+msgid "Half-month"
+msgstr "Hver fjerde måned"
+
+#: mymoney/mymoneyscheduled.cpp:977 reports/listtable.cpp:205
+#: widgets/kmymoneycalendar.cpp:124 widgets/rc.cpp:96
+msgid "Month"
+msgstr ""
+
+#: dialogs/rc.cpp:400 mymoney/mymoneyscheduled.cpp:979 views/rc.cpp:14
+#, fuzzy
+msgid "Year"
+msgstr "Årligt"
+
+#: mymoney/mymoneyscheduled.cpp:989
+msgid "Bill"
+msgstr ""
+
+#: dialogs/rc.cpp:107 dialogs/rc.cpp:162 dialogs/rc.cpp:249 dialogs/rc.cpp:754
+#: mymoney/mymoneyscheduled.cpp:992 widgets/kmymoneycombo.cpp:420
+#: widgets/register.cpp:571
+msgid "Deposit"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:995 reports/querytable.cpp:594
+#: reports/querytable.cpp:696 widgets/kmymoneycombo.cpp:419
+msgid "Transfer"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:1035
+msgid "Any (Error)"
+msgstr "Alle (fejl)"
+
+#: dialogs/rc.cpp:114 mymoney/mymoneyscheduled.cpp:1047
+msgid "Change the date to the previous Friday"
+msgstr "Ændr datoen til den forrige fredag"
+
+#: dialogs/rc.cpp:115 mymoney/mymoneyscheduled.cpp:1050
+msgid "Change the date to the next Monday"
+msgstr "Ændr datoen til den efterfølgende mandag"
+
+#: mymoney/mymoneyscheduled.cpp:1053
+msgid "Do Nothing"
+msgstr "Gør ingenting"
+
+#: kmymoney2.cpp:312
+#, fuzzy
+msgid "Open database..."
+msgstr "Åbn fil..."
+
+#: kmymoney2.cpp:313
+#, fuzzy
+msgid "Save as database..."
+msgstr "Gemmer fil..."
+
+#: kmymoney2.cpp:314
+msgid "Backup..."
+msgstr "Backup..."
+
+#: kmymoney2.cpp:315 kmymoney2.cpp:321
+#, fuzzy
+msgid "QIF..."
+msgstr "QIF..."
+
+#: kmymoney2.cpp:316
+#, fuzzy
+msgid "Gnucash..."
+msgstr "Gnucash..."
+
+#: kmymoney2.cpp:317
+#, fuzzy
+msgid "Statement file..."
+msgstr "Gemmer fil..."
+
+#: kmymoney2.cpp:319 kmymoney2.cpp:320
+#, fuzzy
+msgid "Account Template..."
+msgstr "Konto skabelon..."
+
+#: kmymoney2.cpp:322
+msgid "Personal Data..."
+msgstr "Personlig information..."
+
+#: kmymoney2.cpp:325
+msgid "Dump Memory"
+msgstr ""
+
+#: kmymoney2.cpp:327
+#, fuzzy
+msgid "File-Information..."
+msgstr "Find transaktion..."
+
+#: kmymoney2.cpp:332
+msgid "Find transaction..."
+msgstr "Find transaktion..."
+
+#: kmymoney2.cpp:337
+msgid "Show Transaction Detail"
+msgstr "Vis overførselsdetaljer"
+
+#: kmymoney2.cpp:338 rc.cpp:60
+#, fuzzy
+msgid "Hide reconciled transactions"
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:339 rc.cpp:57
+#, fuzzy
+msgid "Hide unused categories"
+msgstr "Skjulte kategorier"
+
+#: kmymoney2.cpp:340
+#, fuzzy
+msgid "Show all accounts"
+msgstr "Der er ingen konto til aktiver"
+
+#: kmymoney2.cpp:345
+#, fuzzy
+msgid "New institution..."
+msgstr "Ny institution..."
+
+#: kmymoney2.cpp:346
+#, fuzzy
+msgid "Edit institution..."
+msgstr "Tilføj institution"
+
+#: kmymoney2.cpp:347
+#, fuzzy
+msgid "Delete institution..."
+msgstr "Ny institution..."
+
+#: kmymoney2.cpp:352
+msgid "New account..."
+msgstr "Ny konto..."
+
+#: kmymoney2.cpp:354
+#, fuzzy
+msgid "Open ledger"
+msgstr "Åbn en fil."
+
+#: kmymoney2.cpp:355
+msgid "Reconcile..."
+msgstr ""
+
+#: kmymoney2.cpp:356
+#, fuzzy
+msgid ""
+"_: Finish reconciliation\n"
+"Finish"
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:357
+#, fuzzy
+msgid ""
+"_: Postpone reconciliation\n"
+"Postpone"
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:358
+#, fuzzy
+msgid "Edit account..."
+msgstr "Rediger en konto"
+
+#: kmymoney2.cpp:359
+#, fuzzy
+msgid "Delete account..."
+msgstr "Ny konto..."
+
+#: kmymoney2.cpp:360
+#, fuzzy
+msgid "Close account"
+msgstr "Der er ingen konto til aktiver"
+
+#: kmymoney2.cpp:361
+#, fuzzy
+msgid "Reopen account"
+msgstr "Modkonto"
+
+#: kmymoney2.cpp:362
+#, fuzzy
+msgid "Transaction report"
+msgstr "Overførsels detaljer"
+
+#: kmymoney2.cpp:364
+msgid "Show balance chart..."
+msgstr ""
+
+#: kmymoney2.cpp:366
+#, fuzzy
+msgid "Map to online account"
+msgstr "Flytter konto"
+
+#: kmymoney2.cpp:367
+#, fuzzy
+msgid "Unmap account"
+msgstr "Lånets størrelse"
+
+#: dialogs/settings/rc.cpp:126 kmymoney2.cpp:368 views/kpayeesview.cpp:363
+#: widgets/rc.cpp:50
+#, fuzzy
+msgid "Update"
+msgstr "Opdatér &alle"
+
+#: kmymoney2.cpp:372
+#, fuzzy
+msgid "Update account..."
+msgstr "Rediger en konto"
+
+#: kmymoney2.cpp:373
+#, fuzzy
+msgid "Update all accounts..."
+msgstr "Rediger en konto"
+
+#: kmymoney2.cpp:378
+msgid "New category..."
+msgstr "Ny kategori..."
+
+#: kmymoney2.cpp:379
+#, fuzzy
+msgid "Edit category..."
+msgstr "Rediger en kategori"
+
+#: kmymoney2.cpp:380
+#, fuzzy
+msgid "Delete category..."
+msgstr "Ny kategori..."
+
+#: kmymoney2.cpp:386
+msgid "QIF Profile Editor..."
+msgstr ""
+
+#: kmymoney2.cpp:387
+#, fuzzy
+msgid "Securities..."
+msgstr "Sikkerheder"
+
+#: kmymoney2.cpp:388
+#, fuzzy
+msgid "Currencies..."
+msgstr "Valuta..."
+
+#: kmymoney2.cpp:389
+#, fuzzy
+msgid "Prices..."
+msgstr "Priser..."
+
+#: kmymoney2.cpp:390
+msgid "Update Stock and Currency Prices..."
+msgstr "Opdater aktie- og valutakurser "
+
+#: kmymoney2.cpp:391
+msgid "Consistency Check"
+msgstr ""
+
+#: kmymoney2.cpp:392
+msgid "Performance-Test"
+msgstr ""
+
+#: kmymoney2.cpp:393
+msgid "KCalc..."
+msgstr ""
+
+#: kmymoney2.cpp:399
+msgid "Enable all messages"
+msgstr "Aktivér alle meddelelser"
+
+#: kmymoney2.cpp:400
+msgid "KDE language settings..."
+msgstr ""
+
+#: kmymoney2.cpp:405
+msgid "&Show tip of the day"
+msgstr "&Vis dagens tip"
+
+#: kmymoney2.cpp:410
+#, fuzzy
+msgid ""
+"_: New transaction button\n"
+"New"
+msgstr "Justeringsoverførsel"
+
+#: kmymoney2.cpp:415
+#, fuzzy
+msgid ""
+"_: Edit transaction button\n"
+"Edit"
+msgstr "&Rediger overførsler..."
+
+#: kmymoney2.cpp:417
+#, fuzzy
+msgid ""
+"_: Enter transaction\n"
+"Enter"
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:420
+#, fuzzy
+msgid ""
+"_: Edit split button\n"
+"Edit splits"
+msgstr "Redigér opdelinger"
+
+#: kmymoney2.cpp:421
+#, fuzzy
+msgid ""
+"_: Cancel transaction edit\n"
+"Cancel"
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:422
+#, fuzzy
+msgid ""
+"_: Delete transaction\n"
+"Delete"
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:423
+#, fuzzy
+msgid ""
+"_: Duplicate transaction\n"
+"Duplicate"
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:425 kmymoney2.cpp:4826 kmymoney2.cpp:5107
+#, fuzzy
+msgid ""
+"_: Button text for match transaction\n"
+"Match"
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:426
+#, fuzzy
+msgid ""
+"_: Accept 'imported' and 'matched' transaction\n"
+"Accept"
+msgstr "Importér overførsler"
+
+#: kmymoney2.cpp:428
+msgid ""
+"_: Toggle reconciliation flag\n"
+"Toggle"
+msgstr ""
+
+#: kmymoney2.cpp:429
+#, fuzzy
+msgid ""
+"_: Mark transaction cleared\n"
+"Cleared"
+msgstr "Importér overførsler"
+
+#: kmymoney2.cpp:430
+#, fuzzy
+msgid ""
+"_: Mark transaction reconciled\n"
+"Reconciled"
+msgstr "Overførsels detaljer"
+
+#: kmymoney2.cpp:431
+#, fuzzy
+msgid ""
+"_: Mark transaction not reconciled\n"
+"Not reconciled"
+msgstr "Overførsels detaljer"
+
+#: kmymoney2.cpp:432
+#, fuzzy
+msgid ""
+"_: Select all transactions\n"
+"Select all"
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:434 kmymoney2.cpp:5497
+#, fuzzy
+msgid "Goto account"
+msgstr "Konto"
+
+#: kmymoney2.cpp:435 kmymoney2.cpp:5495
+#, fuzzy
+msgid "Goto payee"
+msgstr "ukendt"
+
+#: kmymoney2.cpp:436
+#, fuzzy
+msgid "Create scheduled transaction..."
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:437
+msgid "Assign next number"
+msgstr ""
+
+#: kmymoney2.cpp:438
+#, fuzzy
+msgid ""
+"_: Combine transactions\n"
+"Combine"
+msgstr "Find transaktion..."
+
+#: kmymoney2.cpp:440
+#, fuzzy
+msgid "New investment"
+msgstr "Investeringer"
+
+#: kmymoney2.cpp:441
+#, fuzzy
+msgid "Edit investment..."
+msgstr "Investeringer"
+
+#: kmymoney2.cpp:442
+#, fuzzy
+msgid "Delete investment..."
+msgstr "Slet modtgaer"
+
+#: kmymoney2.cpp:443
+#, fuzzy
+msgid "Online price update..."
+msgstr "Online pris opdatering"
+
+#: kmymoney2.cpp:444
+#, fuzzy
+msgid "Manual price update..."
+msgstr "Online pris opdatering"
+
+#: kmymoney2.cpp:446
+#, fuzzy
+msgid "New scheduled transaction..."
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:447
+#, fuzzy
+msgid "Edit scheduled transaction..."
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:448
+#, fuzzy
+msgid "Delete scheduled transaction..."
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:449
+#, fuzzy
+msgid "Duplicate scheduled transaction"
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:450
+#, fuzzy
+msgid "Enter next transaction..."
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:451
+#, fuzzy
+msgid "Skip next transaction..."
+msgstr "Find transaktion..."
+
+#: kmymoney2.cpp:453
+#, fuzzy
+msgid "New payee"
+msgstr "Ny modtager"
+
+#: kmymoney2.cpp:454
+#, fuzzy
+msgid "Rename payee"
+msgstr "Fjern modtager"
+
+#: kmymoney2.cpp:455
+#, fuzzy
+msgid "Delete payee"
+msgstr "Slet modtgaer"
+
+#: kmymoney2.cpp:457
+msgid "New budget"
+msgstr ""
+
+#: kmymoney2.cpp:458
+msgid "Rename budget"
+msgstr ""
+
+#: kmymoney2.cpp:459
+msgid "Delete budget"
+msgstr ""
+
+#: kmymoney2.cpp:460
+msgid "Copy budget"
+msgstr ""
+
+#: kmymoney2.cpp:461
+msgid "Change budget year"
+msgstr ""
+
+#: kmymoney2.cpp:462
+msgid ""
+"_: Budget based on forecast\n"
+"Forecast"
+msgstr ""
+
+#: kmymoney2.cpp:467 kmymoney2.cpp:3990 kmymoney2.cpp:3993 kmymoney2.cpp:3999
+#, fuzzy
+msgid "New currency"
+msgstr "Valuta"
+
+#: kmymoney2.cpp:468 kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, fuzzy
+msgid "Rename currency"
+msgstr "Valuta"
+
+#: kmymoney2.cpp:469 kmymoney2.cpp:4039
+#, fuzzy
+msgid "Delete currency"
+msgstr "Valuta"
+
+#: dialogs/rc.cpp:69 kmymoney2.cpp:470
+msgid "Select as base currency"
+msgstr "Vælg som standard valuta"
+
+#: kmymoney2.cpp:481
+msgid "View back"
+msgstr ""
+
+#: kmymoney2.cpp:482
+msgid "View forward"
+msgstr ""
+
+#: kmymoney2.cpp:611
+msgid "KMyMoney file needs saving. Save ?"
+msgstr "KMyMoney filen skal gemmes. Gem?"
+
+#: kmymoney2.cpp:757
+msgid "Creating new document..."
+msgstr "Opretter nyt dokument..."
+
+#: kmymoney2.cpp:869 kmymoney2.cpp:884
+msgid "Open a file."
+msgstr "Åbn en fil."
+
+#: kmymoney2.cpp:872
+msgid ""
+"%1|KMyMoney files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|KMyMoney filer\n"
+"%2|Alle filer (*.*)"
+
+#: kmymoney2.cpp:873
+msgid "Open File..."
+msgstr "Åbn fil..."
+
+#: kmymoney2.cpp:925 kstartuplogo.cpp:100
+msgid "Loading file..."
+msgstr "Åbner fil..."
+
+#: kmymoney2.cpp:986
+msgid ""
+"<b>%1</b> is either an invalid filename or the file does not exist. You can "
+"open another file or create a new one."
+msgstr ""
+
+#: kmymoney2.cpp:986
+msgid "File not found"
+msgstr "Fil ikke fundet"
+
+#: kmymoney2.cpp:989
+msgid "File <b>%1</b> is already opened in another instance of KMyMoney"
+msgstr "Filen <b>%1</b> er allerede åbnet i en anden KMyMoney"
+
+#: kmymoney2.cpp:989
+msgid "Duplicate open"
+msgstr ""
+
+#: kmymoney2.cpp:1001
+msgid "Saving file..."
+msgstr "Gemmer fil..."
+
+#: kmymoney2.cpp:1035 kmymoney2.cpp:1047 kmymoney2.cpp:1071
+#, c-format
+msgid "Additional encryption key(s) to be used: %1"
+msgstr ""
+
+#: kmymoney2.cpp:1056
+msgid "Saving file with a new filename..."
+msgstr "Gemmer fil med et nyt filnavn..."
+
+#: kmymoney2.cpp:1067
+msgid "Encryption key to be used"
+msgstr ""
+
+#: kmymoney2.cpp:1072
+#, fuzzy
+msgid "Manage additional keys"
+msgstr "Ændr gebyrergebyrer"
+
+#: kmymoney2.cpp:1079
+#, fuzzy
+msgid "No encryption"
+msgstr "Beskrivelse"
+
+#: kmymoney2.cpp:1102
+#, fuzzy
+msgid ""
+"_: KMyMoney (Filefilter)\n"
+"KMyMoney files"
+msgstr "Ingen MyMoneyFil åben"
+
+#: kmymoney2.cpp:1103
+msgid ""
+"_: XML (Filefilter)\n"
+"XML files"
+msgstr ""
+
+#: kmymoney2.cpp:1104
+msgid ""
+"_: Anonymous (Filefilter)\n"
+"Anonymous files"
+msgstr ""
+
+#: kmymoney2.cpp:1105
+msgid "All files"
+msgstr ""
+
+#: kmymoney2.cpp:1193
+#, fuzzy
+msgid "Saving file to database..."
+msgstr "Gemmer fil..."
+
+#: kmymoney2.cpp:1207
+msgid "Cannot save to current database."
+msgstr ""
+
+#: kmymoney2.cpp:1225
+msgid "Closing window..."
+msgstr "Lukker vindue..."
+
+#: kmymoney2.cpp:1228 kmymoney2.cpp:1249
+msgid "The file has been changed, save it ?"
+msgstr "Filen er blevet ændret. Skal den gemmes?"
+
+#: kmymoney2.cpp:1339 kmymoney2.cpp:1352
+msgid "Ready."
+msgstr "Klar."
+
+#: kmymoney2.cpp:1397 kmymoney2.cpp:1433
+#, fuzzy
+msgid "No KMyMoneyFile open"
+msgstr "Ingen MyMoneyFil åben"
+
+#: kmymoney2.cpp:1401
+msgid "Viewing personal data..."
+msgstr ""
+
+#: kmymoney2.cpp:1408
+msgid "Edit Personal Data"
+msgstr ""
+
+#: kmymoney2.cpp:1424
+#, fuzzy, c-format
+msgid "Unable to store user information: %1"
+msgstr "Ude af stand til at tilføje overførsel."
+
+#: kmymoney2.cpp:1447
+msgid "Importing account templates."
+msgstr "Importerer konto skabeloner."
+
+#: kmymoney2.cpp:1462
+#, fuzzy
+msgid "Unable to import template(s): %1, thrown in %2:%3"
+msgstr "Kunne ikke slette overførsel"
+
+#: kmymoney2.cpp:1471
+#, fuzzy
+msgid "Exporting account templates."
+msgstr "Importerer konto skabeloner."
+
+#: kmymoney2.cpp:1474
+msgid ""
+"*.kmt|KMyMoney template files\n"
+"*.*|All files"
+msgstr ""
+"*.kmt|KMyMoney skabelon\n"
+"*.*|Alle filer"
+
+#: kmymoney2.cpp:1475
+msgid "Save as..."
+msgstr ""
+
+#: kmymoney2.cpp:1517
+msgid "Importing file..."
+msgstr "Importerer fil..."
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "The statements have been processed with the following results:"
+msgstr ""
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:1754 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+#, fuzzy
+msgid "Statement stats"
+msgstr "Investeringsdetaljer"
+
+#: kmymoney2.cpp:1602
+msgid ""
+"You cannot import GnuCash data into an existing file. Do you wish to save "
+"this file?"
+msgstr ""
+
+#: kmymoney2.cpp:1615
+msgid "Importing a Gnucash file."
+msgstr "Importerer en GnuCash fil"
+
+#: kmymoney2.cpp:1618
+msgid ""
+"%1|Gnucash files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Gnucash filer\n"
+"%2|Alle filer (*.*)"
+
+#: kmymoney2.cpp:1619
+msgid "Import Gnucash file..."
+msgstr "Importér GnuCash fil..."
+
+#: kmymoney2.cpp:1658
+msgid "Importing an XML Statement."
+msgstr ""
+
+#: kmymoney2.cpp:1661
+msgid ""
+"%1|XML files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|XML filer\n"
+"%2|Alle filer (*.*)"
+
+#: kmymoney2.cpp:1662
+msgid "Import XML Statement..."
+msgstr ""
+
+#: kmymoney2.cpp:1718
+msgid "Error importing %1: This file is not a valid KMM statement file."
+msgstr ""
+
+#: kmymoney2.cpp:1718
+msgid "Invalid Statement"
+msgstr ""
+
+#: kmymoney2.cpp:1754
+msgid "The statement has been processed with the following results:"
+msgstr ""
+
+#: kmymoney2.cpp:1763
+msgid "Exporting file..."
+msgstr "Eksporterer fil..."
+
+#: kmymoney2.cpp:1786
+#, fuzzy
+msgid "The file <b>%1</b> already exists. Do you really want to override it?"
+msgstr "%1 '%2' Findes ikke. Skal den oprettes?"
+
+#: kmymoney2.cpp:1786
+msgid "File already exists"
+msgstr ""
+
+#: dialogs/rc.cpp:347 dialogs/rc.cpp:649 dialogs/rc.cpp:798 kmymoney2.cpp:1815
+msgid "General"
+msgstr "Generelt"
+
+#: kmymoney2.cpp:1816
+msgid "Register"
+msgstr ""
+
+#: kmymoney2.cpp:1817 views/khomeview.cpp:88 views/kmymoneyview.cpp:136
+msgid "Home"
+msgstr "Hjem"
+
+#: kmymoney2.cpp:1818 views/kmymoneyview.cpp:176
+#, fuzzy
+msgid ""
+"Scheduled\n"
+"transactions"
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:1819
+#, fuzzy
+msgid "Encryption"
+msgstr "Beskrivelse"
+
+#: kmymoney2.cpp:1820
+#, fuzzy
+msgid "Colors"
+msgstr "Kolonner"
+
+#: dialogs/rc.cpp:344 dialogs/settings/rc.cpp:107 kmymoney2.cpp:1822
+#: widgets/rc.cpp:33
+msgid "Online Quotes"
+msgstr ""
+
+#: kmymoney2.cpp:1823 reports/pivottable.cpp:2426 views/kmymoneyview.cpp:251
+#: views/kmymoneyview.cpp:253 views/kreportsview.cpp:1415 views/rc.cpp:41
+msgid "Forecast"
+msgstr ""
+
+#: kmymoney2.cpp:1824
+#, fuzzy
+msgid "Plugins"
+msgstr "&Plugins"
+
+#: kmymoney2.cpp:1893
+msgid ""
+"The file must be saved first before it can be backed up. Do you want to "
+"continue?"
+msgstr ""
+
+#: kmymoney2.cpp:1910
+msgid ""
+"The current implementation of the backup functionality only supports local "
+"files as source files! Your current source file is '%1'."
+msgstr ""
+
+#: kmymoney2.cpp:1913
+msgid "Local files only"
+msgstr "Kun lokale filer"
+
+#: kmymoney2.cpp:1928
+#, c-format
+msgid "Mounting %1"
+msgstr "Monterer %1"
+
+#: kmymoney2.cpp:1967
+msgid "Backup file for today exists on that device. Replace ?"
+msgstr "En backup fra i dag ligger allerede på mediet, skal denne overskrives?"
+
+#: dialogs/rc.cpp:7 kmymoney2.cpp:1967 kmymoney2.cpp:1994 kmymoney2.cpp:2024
+#: kmymoney2.cpp:2032 kmymoney2.cpp:2057 kmymoney2.cpp:2059
+msgid "Backup"
+msgstr "Backup"
+
+#: kmymoney2.cpp:1967
+msgid "&Replace"
+msgstr "&Erstat"
+
+#: kmymoney2.cpp:1972 kmymoney2.cpp:1997 kmymoney2.cpp:2016 kmymoney2.cpp:2035
+#, c-format
+msgid "Unmounting %1"
+msgstr "Afmonterer %1"
+
+#: kmymoney2.cpp:1987
+#, c-format
+msgid "Writing %1"
+msgstr "Skriver %1"
+
+#: kmymoney2.cpp:1994
+msgid "Error mounting device"
+msgstr "Fejl ved montering af medie"
+
+#: converter/mymoneygncreader.cpp:1995 kmymoney2.cpp:2023 kmymoney2.cpp:2055
+msgid "Done"
+msgstr "Færdig"
+
+#: kmymoney2.cpp:2024 kmymoney2.cpp:2057
+msgid "File successfully backed up"
+msgstr "Backup af filen lykkedes"
+
+#: kmymoney2.cpp:2032
+msgid "Error copying file to device"
+msgstr "Fejl ved kopiering af fil til medie"
+
+#: kmymoney2.cpp:2059
+msgid "Error unmounting device"
+msgstr "Fejl ved afmontering af medie"
+
+#: kmymoney2.cpp:2143
+#, fuzzy, c-format
+msgid "Cannot add institution: %1"
+msgstr "Kan ikke tilføje institution"
+
+#: kmymoney2.cpp:2185
+#, fuzzy, c-format
+msgid "Unable to store institution: %1"
+msgstr "Kunne ikke redigere institution:"
+
+#: kmymoney2.cpp:2192
+#, fuzzy, c-format
+msgid "Unable to edit institution: %1"
+msgstr "Kunne ikke redigere institution:"
+
+#: kmymoney2.cpp:2203
+#, fuzzy
+msgid "Do you really want to delete institution <b>%1</b> ?"
+msgstr "Vil du virkelig slette kontoen '%1'"
+
+#: kmymoney2.cpp:2211 kmymoney2.cpp:2215
+#, fuzzy, c-format
+msgid "Unable to delete institution: %1"
+msgstr "Kunne ikke redigere institution:"
+
+#: kmymoney2.cpp:2268
+#, fuzzy, c-format
+msgid "Unable to find account: %1"
+msgstr "Kunne ikke fjerne konto:"
+
+#: kmymoney2.cpp:2309
+msgid ""
+"This account is a liability and if the opening balance represents money "
+"owed, then it should be negative. Negate the amount?\n"
+"\n"
+"Please click Yes to change the opening balance to %1,\n"
+"Please click No to leave the amount as %2,\n"
+"Please click Cancel to abort the account creation."
+msgstr ""
+
+#: kmymoney2.cpp:2345 kmymoney2.cpp:2346
+msgid "Loan payout"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:892 kmymoney2.cpp:2374
+#, fuzzy, c-format
+msgid "Unable to add account: %1"
+msgstr "Kunne ikke fjerne konto:"
+
+#: kmymoney2.cpp:2392
+msgid ""
+"The category <b>%1</b> currently does not exist. Do you want to create it?"
+"<p><i>The parent account will default to <b>%2</b> but can be changed in the "
+"following dialog</i>."
+msgstr ""
+
+#: kmymoney2.cpp:2392
+msgid "Create category"
+msgstr "Opret katogori"
+
+#: kmymoney2.cpp:2429
+msgid "Create a new Category"
+msgstr ""
+
+#: kmymoney2.cpp:2505
+#, fuzzy, c-format
+msgid "Unable to create account: %1"
+msgstr "Kunne ikke fjerne konto:"
+
+#: kmymoney2.cpp:2516
+#, fuzzy
+msgid ""
+"The security <b>%1</b> currently does not exist as sub-account of <b>%2</b>. "
+"Do you want to create it?"
+msgstr "%1 '%2' Findes ikke. Skal den oprettes?"
+
+#: kmymoney2.cpp:2517
+#, fuzzy
+msgid "Create security"
+msgstr "Opret katogori"
+
+#: kmymoney2.cpp:2551
+#, fuzzy
+msgid "Do you really want to delete the investment <b>%1</b>?"
+msgstr "Vil du virkelig slette kontoen '%1'"
+
+#: kmymoney2.cpp:2551
+msgid "Delete investment"
+msgstr ""
+
+#: kmymoney2.cpp:2558
+#, fuzzy, c-format
+msgid "Unable to delete investment: %1"
+msgstr "Kunne ikke redigere institution:"
+
+#: kmymoney2.cpp:2640 kmymoney2.cpp:2646
+#, fuzzy
+msgid "Unable to add scheduled transaction: "
+msgstr "Ude af stand til at tilføje overførsel."
+
+#: kmymoney2.cpp:2722
+#, fuzzy
+msgid "Adjusting transactions..."
+msgstr "Find transaktion..."
+
+#: kmymoney2.cpp:2747
+#, fuzzy
+msgid "Adjusting scheduled transactions..."
+msgstr "Find transaktion..."
+
+#: kmymoney2.cpp:2765
+#, fuzzy
+msgid "Adjusting budgets..."
+msgstr "Åbner fil..."
+
+#: kmymoney2.cpp:2783
+msgid ""
+"Unable to exchange category <b>%1</b> with category <b>%2</b>. Reason: %3"
+msgstr ""
+
+#: kmymoney2.cpp:2804
+#, fuzzy
+msgid "Do you really want to delete category <b>%1</b>?"
+msgstr "Vil du virkelig slette kategorien '%1'"
+
+#: kmymoney2.cpp:2811
+#, fuzzy
+msgid "Unable to delete category <b>%1</b>. Cause: %2"
+msgstr "Kunne ikke fjerne kategori:"
+
+#: kmymoney2.cpp:2823
+msgid ""
+"Do you want to delete category <b>%1</b> with all its sub-categories or only "
+"the category itself? If you only delete the category itself, all its sub-"
+"categories will be made sub-categories of <b>%2</b>."
+msgstr ""
+
+#: kmymoney2.cpp:2827
+#, fuzzy
+msgid "Delete all"
+msgstr "Slet modtgaer"
+
+#: kmymoney2.cpp:2828
+#, fuzzy
+msgid "Just the category"
+msgstr "Opret katogori"
+
+#: kmymoney2.cpp:2858
+msgid ""
+"Some sub-categories of category <b>%1</b> cannot be deleted, because they "
+"are still used. They will be made sub-categories of <b>%2</b>. Proceed?"
+msgstr ""
+
+#: kmymoney2.cpp:2878
+msgid "Unable to delete a sub-category of category <b>%1</b>. Reason: %2"
+msgstr ""
+
+#: kmymoney2.cpp:2889
+#, fuzzy
+msgid "Do you really want to delete account <b>%1</b>?"
+msgstr "Vil du virkelig slette kontoen '%1'"
+
+#: kmymoney2.cpp:2901
+#, fuzzy
+msgid "Unable to delete account '%1'. Cause: %2"
+msgstr "Kunne ikke fjerne konto:"
+
+#: kmymoney2.cpp:2917
+#, fuzzy
+msgid "Edit account '%1'"
+msgstr "Rediger en konto"
+
+#: kmymoney2.cpp:2922
+#, fuzzy
+msgid "Edit category '%1'"
+msgstr "Rediger en kategori"
+
+#: kmymoney2.cpp:3008
+#, fuzzy
+msgid "Unable to modify account '%1'. Cause: %2"
+msgstr "Kunne ikke fjerne konto:"
+
+#: kmymoney2.cpp:3065
+msgid ""
+"KMyMoney has detected some overdue scheduled transactions for this account. "
+"Do you want to enter those scheduled transactions now?"
+msgstr ""
+
+#: kmymoney2.cpp:3065
+#, fuzzy
+msgid "Scheduled transactions found"
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:3163
+msgid ""
+"You are about to finish the reconciliation of this account with a difference "
+"between your bank statement and the transactions marked as cleared.\n"
+"Are you sure you want to finish the reconciliation ?"
+msgstr ""
+
+#: kmymoney2.cpp:3165
+msgid "Confirm end of reconciliation"
+msgstr ""
+
+#: kmymoney2.cpp:3339
+msgid ""
+"You have closed this account. It remains in the system because you have "
+"transactions which still refer to it, but is not shown in the views. You can "
+"make it visible again by going to the View menu and selecting <b>Show all "
+"accounts</b> or by unselecting the <b>Don't show closed accounts</b> setting."
+msgstr ""
+
+#: kmymoney2.cpp:3379
+msgid "<b>%1</b> cannot be moved to institution <b>%2</b>. Reason: %3"
+msgstr ""
+
+#: kmymoney2.cpp:3393
+msgid "<b>%1</b> cannot be moved to <b>%2</b>. Reason: %3"
+msgstr ""
+
+#: kmymoney2.cpp:3408
+#, fuzzy
+msgid "%1 YTD Account Transactions"
+msgstr "Konto-valg"
+
+#: dialogs/kbalancechartdlg.cpp:71 kmymoney2.cpp:3409
+#: views/kforecastview.cpp:650 views/khomeview.cpp:276
+#: views/khomeview.cpp:1384 views/kreportsview.cpp:619
+#, fuzzy
+msgid "Generated Report"
+msgstr "&Rapporter"
+
+#: dialogs/rc.cpp:324 dialogs/settings/rc.cpp:80 kmymoney2.cpp:3411
+#: views/kreportsview.cpp:1062 views/rc.cpp:58 views/rc.cpp:59
+msgid "Transactions"
+msgstr ""
+
+#: kmymoney2.cpp:3449
+#, fuzzy, c-format
+msgid "Unable to add scheduled transaction: %1"
+msgstr "Ude af stand til at ændre plan"
+
+#: kmymoney2.cpp:3449
+#, fuzzy
+msgid "Add scheduled transaction"
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:3489
+msgid ""
+"You have entered a scheduled transaction date of <b>%1</b>. Because the "
+"scheduled transaction was last paid on <b>%2</b>, KMyMoney will "
+"automatically adjust the scheduled transaction date to the next date unless "
+"the last payment date is reset. Do you want to reset the last payment date?"
+msgstr ""
+
+#: kmymoney2.cpp:3489
+#, fuzzy
+msgid "Reset Last Payment Date"
+msgstr "Betaling"
+
+#: kmymoney2.cpp:3499 kmymoney2.cpp:3519 kmymoney2.cpp:3531
+#, fuzzy
+msgid "Unable to modify scheduled transaction '%1'"
+msgstr "Ude af stand til at ændre plan"
+
+#: kmymoney2.cpp:3543
+#, fuzzy
+msgid "Are you sure you want to delete the scheduled transaction <b>%1</b>?"
+msgstr "Vil du virkelig slette kontoen '%1'"
+
+#: kmymoney2.cpp:3546
+msgid ""
+"In case of loan payments it is currently not possible to recreate the "
+"scheduled transaction."
+msgstr ""
+
+#: kmymoney2.cpp:3555
+#, fuzzy
+msgid "Unable to remove scheduled transaction '%1'"
+msgstr "Ude af stand til at ændre plan"
+
+#: kmymoney2.cpp:3569
+#, c-format
+msgid ""
+"_: Copy of scheduled transaction name\n"
+"Copy of %1"
+msgstr ""
+
+#: kmymoney2.cpp:3581 kmymoney2.cpp:4352
+#, fuzzy
+msgid "Unable to duplicate transaction(s): %1, thrown in %2:%3"
+msgstr "Ude af stand til at tilføje overførsel."
+
+#: kmymoney2.cpp:3595
+#, fuzzy
+msgid ""
+"Do you really want to skip the <b>%1</b> transaction scheduled for <b>%2</b>?"
+msgstr ""
+"Vil du virkelig flytte <b>%1</b> så det bliver en underkonto til <b>%2</b>?"
+
+#: kmymoney2.cpp:3605
+#, fuzzy
+msgid "Unable to skip scheduled transaction <b>%1</b>."
+msgstr "Ude af stand til at ændre plan"
+
+#: kmymoney2.cpp:3618
+#, fuzzy
+msgid "Unknown scheduled transaction '%1'"
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:3673
+msgid ""
+"Are you sure you wish to stop this scheduled transaction from being entered "
+"into the register?\n"
+"\n"
+"KMyMoney will prompt you again next time it starts unless you manually enter "
+"it later."
+msgstr ""
+
+#: kmymoney2.cpp:3725 kmymoney2.cpp:3732
+#, fuzzy
+msgid "Unable to enter scheduled transaction '%1'"
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:3743 kmymoney2.cpp:3783
+msgid "New Payee"
+msgstr "Ny modtager"
+
+#: kmymoney2.cpp:3745
+msgid "Do you want to add <b>%1</b> as payer/receiver ?"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:892 kmymoney2.cpp:3747
+msgid "New payee/receiver"
+msgstr ""
+
+#: kmymoney2.cpp:3773
+msgid "Unable to add payee"
+msgstr "Kunne ikke tilføje modtager"
+
+#: kmymoney2.cpp:3826
+#, fuzzy
+msgid "Do you really want to remove the payee <b>%1</b>?"
+msgstr "Vil du virkelige fjerne denne modtager:"
+
+#: kmymoney2.cpp:3828
+#, fuzzy
+msgid "Do you really want to remove all selected payees?"
+msgstr "Vil du virkelige fjerne denne modtager:"
+
+#: kmymoney2.cpp:3830
+msgid "Remove Payee"
+msgstr "Fjern modtager"
+
+#: kmymoney2.cpp:3870
+msgid ""
+"At least one transaction/scheduled transaction is still referenced by a "
+"payee. Currently you have all payees selected. However, at least one payee "
+"must remain so that the transaction/scheduled transaction can be reassigned."
+msgstr ""
+
+#: kmymoney2.cpp:3925
+#, fuzzy
+msgid "Unable to reassign payee of transaction/split"
+msgstr "Kunne ikke slette overførsel"
+
+#: converter/mymoneyqifreader.cpp:534 converter/mymoneystatementreader.cpp:959
+#: kmymoney2.cpp:3926 kmymoney2.cpp:3983 views/kbudgetview.cpp:636
+#: views/kbudgetview.cpp:737 views/kbudgetview.cpp:751
+#: views/kpayeesview.cpp:519 views/kpayeesview.cpp:870
+msgid "thrown in"
+msgstr ""
+
+#: kmymoney2.cpp:3982
+#, fuzzy
+msgid "Unable to remove payee(s)"
+msgstr "Kunne ikke fjerne modtager"
+
+#: kmymoney2.cpp:3990
+msgid "Enter ISO 4217 code for the new currency"
+msgstr ""
+
+#: kmymoney2.cpp:3999
+#, c-format
+msgid "Cannot create new currency. %1"
+msgstr ""
+
+#: kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, fuzzy, c-format
+msgid "Cannot rename currency. %1"
+msgstr "Kan ikke læse fra filen '%1'"
+
+#: kmymoney2.cpp:4039
+#, fuzzy
+msgid "Cannot delete currency %1. %2"
+msgstr "Kan ikke slette konto:"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+#, fuzzy
+msgid "Cannot set %1 as base currency: %2"
+msgstr "Vælg som standard valuta"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+#, fuzzy
+msgid "Set base currency"
+msgstr "Vælg som standard valuta"
+
+#: kmymoney2.cpp:4065
+#, c-format
+msgid "Budget %1"
+msgstr ""
+
+#: kmymoney2.cpp:4075
+msgid "Budget %1 (%2)"
+msgstr ""
+
+#: kmymoney2.cpp:4090 kmymoney2.cpp:4139
+msgid "Unable to add budget: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4105
+#, fuzzy
+msgid "Do you really want to remove the budget <b>%1</b>?"
+msgstr "Vil du virkelige fjerne denne modtager:"
+
+#: kmymoney2.cpp:4107
+#, fuzzy
+msgid "Do you really want to remove all selected budgets?"
+msgstr "Vil du virkelige fjerne denne modtager:"
+
+#: kmymoney2.cpp:4109
+#, fuzzy
+msgid "Remove Budget"
+msgstr "Fjern modtager"
+
+#: kmymoney2.cpp:4122
+#, fuzzy
+msgid "Unable to remove budget: %1, thrown in %2:%3"
+msgstr "Kunne ikke slette overførsel"
+
+#: kmymoney2.cpp:4134 views/kreportsview.cpp:659
+#, c-format
+msgid "Copy of %1"
+msgstr ""
+
+#: kmymoney2.cpp:4164
+#, fuzzy
+msgid "Select year"
+msgstr "Vælg et år"
+
+#: kmymoney2.cpp:4164
+#, fuzzy
+msgid "Budget year"
+msgstr "Næste år"
+
+#: kmymoney2.cpp:4176 kmymoney2.cpp:4214 kmymoney2.cpp:4274
+msgid "Unable to modify budget: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4192 kmymoney2.cpp:4250
+msgid ""
+"The current budget already contains data. Continuing will replace all "
+"current values of this budget."
+msgstr ""
+
+#: kmymoney2.cpp:4222
+msgid ""
+"Please be aware that changes made in the following dialog affect all KDE "
+"applications not only KMyMoney."
+msgstr ""
+
+#: kmymoney2.cpp:4292
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to delete the transactions anyway?"
+msgstr ""
+
+#: kmymoney2.cpp:4295 views/kgloballedgerview.cpp:1043
+msgid "Transaction already reconciled"
+msgstr ""
+
+#: kmymoney2.cpp:4301
+#, fuzzy
+msgid "Do you really want to delete the selected transaction?"
+msgstr "Vil du virkelig slette kontoen '%1'"
+
+#: kmymoney2.cpp:4303
+#, fuzzy
+msgid "Do you really want to delete all %1 selected transactions?"
+msgstr "Vil du virkelig slette kontoen '%1'"
+
+#: kmymoney2.cpp:4305
+msgid "Delete transaction"
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:4306
+#, fuzzy
+msgid "Deleting transactions"
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:4321
+#, fuzzy
+msgid "Duplicating transactions"
+msgstr "Find transaktion..."
+
+#: kmymoney2.cpp:4378
+#, fuzzy
+msgid "Unable to delete transaction(s): %1, thrown in %2:%3"
+msgstr "Ude af stand til at tilføje overførsel."
+
+#: kmymoney2.cpp:4452 kmymoney2.cpp:4622
+#, fuzzy
+msgid "Unable to modify transaction: %1, thrown in %2:%3"
+msgstr "Ude af stand til at tilføje overførsel."
+
+#: kmymoney2.cpp:4514
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling and<br>- <b>Cancel</b> returns to the "
+"transaction editor.<p>You can also select an option to save the transaction "
+"automatically when e.g. selecting another transaction."
+msgstr ""
+
+#: kmymoney2.cpp:4514 kmymoney2.cpp:4517
+#, fuzzy
+msgid "Cancel transaction edit"
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:4517
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling.<p>You can also select an option to save the "
+"transaction automatically when e.g. selecting another transaction."
+msgstr ""
+
+#: kmymoney2.cpp:4667
+#, fuzzy
+msgid "Unable to accept transaction: %1, thrown in %2:%3"
+msgstr "Ude af stand til at tilføje overførsel."
+
+#: kmymoney2.cpp:4846
+#, fuzzy
+msgid "Unable to unmatch the selected transactions"
+msgstr "Kunne ikke slette overførsel"
+
+#: kmymoney2.cpp:4885
+msgid "No manually entered transaction selected for matching"
+msgstr ""
+
+#: kmymoney2.cpp:4887
+#, fuzzy
+msgid "No imported transaction selected for matching"
+msgstr "Importér overførsler til %1"
+
+#: kmymoney2.cpp:4895
+#, fuzzy
+msgid "Unable to match the selected transactions"
+msgstr "Kunne ikke slette overførsel"
+
+#: kmymoney2.cpp:5097
+#, fuzzy
+msgid "Create a new transaction"
+msgstr "Opret en ny konto for aktiver"
+
+#: kmymoney2.cpp:5163
+#, fuzzy
+msgid "Duplicate the current selected transactions"
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:5223
+#, fuzzy
+msgid ""
+"_: Button text for unmatch transaction\n"
+"Unmatch"
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:5451 kmymoney2.cpp:5473
+msgid "Goto '%1'"
+msgstr "Gå til '%1'"
+
+#: kmymoney2.cpp:5582
+msgid "Running consistency check..."
+msgstr ""
+
+#: kmymoney2.cpp:5590
+#, c-format
+msgid "Consistency check failed: %1"
+msgstr ""
+
+#: kmymoney2.cpp:5594
+msgid "Consistency check result"
+msgstr ""
+
+#: kmymoney2.cpp:5603
+#, fuzzy
+msgid "Checking for overdue scheduled transactions..."
+msgstr "Slet overførsel"
+
+#: kmymoney2.cpp:5740
+msgid ""
+"You must first select a KMyMoney file before you can import a statement."
+msgstr ""
+
+#: kmymoney2.cpp:5746
+msgid "Importing a statement via Web Connect"
+msgstr ""
+
+#: kmymoney2.cpp:5759
+msgid ""
+"Unable to import %1 using %2 plugin. The plugin returned the following "
+"error: %3"
+msgstr ""
+
+#: kmymoney2.cpp:5759 plugins/ofximport/ofximporterplugin.cpp:646
+msgid "Importing error"
+msgstr "Import fejl"
+
+#: kmymoney2.cpp:5780
+msgid "All messages have been enabled."
+msgstr "Alle meddelelser er blevet aktiveret"
+
+#: kmymoney2.cpp:5780
+msgid "All messages"
+msgstr "Alle meddelelser"
+
+#: kmymoney2.cpp:5855
+#, fuzzy
+msgid "Auto saving..."
+msgstr "Gemmer fil..."
+
+#: kmymoney2.cpp:5913
+#, fuzzy
+msgid "Unable to setup online parameters for account ''%1'"
+msgstr "Kunne ikke fjerne konto:"
+
+#: kmymoney2.cpp:5928
+msgid ""
+"Do you really want to remove the mapping of account <b>%1</b> to an online "
+"account? Depending on the details of the online banking method used, this "
+"action cannot be reverted."
+msgstr ""
+
+#: kmymoney2.cpp:5928
+#, fuzzy
+msgid "Remove mapping to online account"
+msgstr "Flytter konto"
+
+#: kmymoney2.cpp:5939
+#, fuzzy, c-format
+msgid "Unable to unmap account from online account: %1"
+msgstr "Kunne ikke fjerne konto:"
+
+#: kmymoney2.cpp:5956
+#, fuzzy
+msgid " (Brokerage)"
+msgstr " (kurtage)"
+
+#: kmymoney2.cpp:5957
+msgid ""
+"You try to map a brokerage account to an online account. This is usually not "
+"advisable. In general, the investment account should be mapped to the online "
+"account. Please cancel if you intended to map the investment account, "
+"continue otherwise"
+msgstr ""
+
+#: kmymoney2.cpp:5957
+#, fuzzy
+msgid "Mapping brokerage account"
+msgstr "Opret en ny konto for aktiver"
+
+#: kmymoney2.cpp:5964
+msgid "Select online banking plugin"
+msgstr ""
+
+#: kmymoney2.cpp:6005
+#, fuzzy, c-format
+msgid "Unable to map account to online account: %1"
+msgstr "Kunne ikke fjerne konto:"
+
+#: converter/mymoneyqifreader.cpp:407 converter/mymoneytemplate.cpp:73
+#: views/kmymoneyview.cpp:590
+msgid "Error while loading file '%1'!"
+msgstr "Fejl under åbning af filen '%1'!"
+
+#: converter/mymoneyqifreader.cpp:409 converter/mymoneyqifreader.cpp:965
+#: converter/mymoneytemplate.cpp:75 views/kmymoneyview.cpp:592
+msgid "File access error"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:84
+msgid "<b>%1</b> is not a template file."
+msgstr "<b>%1</b> er ikke en skabelon."
+
+#: converter/mymoneytemplate.cpp:85 views/kmymoneyview.cpp:603
+msgid "Filetype Error"
+msgstr "Filtypefejl"
+
+#: converter/mymoneytemplate.cpp:93
+msgid "Error while reading template file <b>%1</b> in line %2, column %3"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:94
+msgid "Template Error"
+msgstr "Skabelon-fejl"
+
+#: converter/mymoneytemplate.cpp:101
+msgid "File '%1' not found!"
+msgstr "Filen '%1' blev ikke fundet!"
+
+#: converter/mymoneytemplate.cpp:142
+msgid "Invalid tag <b>%1</b> in template file <b>%2</b>!"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:214
+#, c-format
+msgid "Loading template %1"
+msgstr "Loader skabelon %1"
+
+#: converter/mymoneytemplate.cpp:241
+msgid "Invalid top-level account type <b>%1</b> in template file <b>%2</b>!"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:309
+msgid ""
+"Invalid flag type <b>%1</b> for account <b>%3</b> in template file <b>%2</b>!"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:398 converter/mymoneytemplate.cpp:401
+#: views/kmymoneyview.cpp:1151 views/kmymoneyview.cpp:1154
+msgid "Unable to write changes to '%1'"
+msgstr "Kan ikke skrive ændringer til '%1'"
+
+#: converter/mymoneytemplate.cpp:407 views/kmymoneyview.cpp:1162
+msgid "Unable to upload to '%1'"
+msgstr ""
+
+#: converter/mymoneyqifwriter.cpp:70
+msgid ""
+"Unexpected exception '%1' thrown in %2, line %3 caught in MyMoneyQifWriter::"
+"write()"
+msgstr ""
+
+#: converter/mymoneyqifwriter.cpp:80
+msgid "Unable to open file '%1' for writing"
+msgstr "Kunne ikke skrive til %1"
+
+#: converter/webpricequote.cpp:340
+#, c-format
+msgid "Symbol found: %1"
+msgstr "Symbol fundet: %1"
+
+#: converter/webpricequote.cpp:368
+#, fuzzy
+msgid "Price found: %1 (%2)"
+msgstr "Pris fundet: %1"
+
+#: converter/webpricequote.cpp:380
+#, c-format
+msgid "Date found: %1"
+msgstr "Dato fundet: %1"
+
+#: converter/webpricequote.cpp:397 converter/webpricequote.cpp:403
+#, c-format
+msgid "Unable to update price for %1"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:170
+msgid ""
+"_: Category name\n"
+"Reinvested dividend"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:173
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (long term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:176
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (short term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:179
+msgid ""
+"_: Category name\n"
+"Dividend"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:182
+msgid ""
+"_: Category name\n"
+"Interest"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:185
+msgid ""
+"_: Category name\n"
+"Capital Gain (short term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:188
+msgid ""
+"_: Category name\n"
+"Capital Gain (mid term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:191
+msgid ""
+"_: Category name\n"
+"Capital Gain (long term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:194
+msgid ""
+"_: Category name\n"
+"Returned capital"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:197
+msgid ""
+"_: Category name\n"
+"Miscellaneous income"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:200
+msgid ""
+"_: Category name\n"
+"Miscellaneous expense"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:203
+msgid ""
+"_: Category name\n"
+"Investment fees"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:205
+#, fuzzy, c-format
+msgid "Unknown QIF type %1"
+msgstr "ukendt"
+
+#: converter/mymoneyqifreader.cpp:355
+#, fuzzy
+msgid "Date format selection"
+msgstr "Kategori valg"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Pick the date format that suits your input file"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:366
+#, fuzzy
+msgid "Importing QIF ..."
+msgstr "Importerer fil..."
+
+#: converter/mymoneyqifreader.cpp:442
+#, fuzzy
+msgid "Reading QIF ..."
+msgstr "QIF..."
+
+#: converter/mymoneyqifreader.cpp:507
+#, fuzzy
+msgid "Adding transactions"
+msgstr "Find transaktion..."
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Now adding the transactions to your ledger..."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:533
+#, fuzzy
+msgid "Unable to add transactions"
+msgstr "Ude af stand til at tilføje overførsel."
+
+#: converter/mymoneyqifreader.cpp:567
+msgid ""
+"_: QIF tag for liability account\n"
+"Oth L"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:572
+msgid ""
+"_: QIF tag for category\n"
+"Cat"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:575
+msgid ""
+"_: QIF tag for security\n"
+"Security"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:578
+#, fuzzy
+msgid ""
+"_: QIF tag for investment account\n"
+"Invst"
+msgstr "Inkludér kun investerings-kontoer"
+
+#: converter/mymoneyqifreader.cpp:581
+msgid ""
+"_: QIF tag for prices\n"
+"Prices"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:599
+msgid ""
+"_: QIF tag for a class\n"
+"Class"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:753 converter/mymoneyqifreader.cpp:2203
+msgid ""
+"The %1 account currently has an opening balance of %2. This QIF file reports "
+"an opening balance of %3. Would you like to overwrite the current balance "
+"with the one from the QIF file?"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:754 converter/mymoneyqifreader.cpp:2204
+msgid "Overwrite opening balance"
+msgstr "Overskriv Åbningsbalance"
+
+#: converter/mymoneyqifreader.cpp:879 converter/mymoneyqifreader.cpp:890
+#: converter/mymoneyqifreader.cpp:914
+msgid "Autogenerated by QIF importer"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:907
+#, fuzzy
+msgid "QIF imported, no account name supplied"
+msgstr "Importerer konto skabeloner."
+
+#: converter/mymoneyqifreader.cpp:940
+msgid ""
+"KMyMoney has imported a second opening balance transaction into account <b>%"
+"1</b> which differs from the one found already on file. Please correct this "
+"manually once the import is done."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:940
+#, fuzzy
+msgid "Opening balance problem"
+msgstr "Åbningsbalancer"
+
+#: converter/mymoneyqifreader.cpp:963
+#, fuzzy
+msgid "Error while creating opening balance transaction"
+msgstr "Slet overførsel"
+
+#: converter/mymoneyqifreader.cpp:1029 converter/mymoneyqifreader.cpp:1276
+msgid ""
+"The date entry \"%1\" read from the file cannot be interpreted through the "
+"current date profile setting of \"%2\".\n"
+"\n"
+"Pressing \"Continue\" will assign todays date to the transaction. Pressing "
+"\"Cancel\" will abort the import operation. You can then restart the import "
+"and select a different QIF profile or create a new one."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1035 converter/mymoneyqifreader.cpp:1282
+msgid "Invalid date format"
+msgstr "Ugyldig datoformat"
+
+#: converter/mymoneyqifreader.cpp:1398
+#: converter/mymoneystatementreader.cpp:589
+#: converter/mymoneystatementreader.cpp:592
+msgid "Statement Importer"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1413
+#: converter/mymoneystatementreader.cpp:644
+msgid ""
+"This investment account does not contain the \"%1\" security. Transactions "
+"involving this security will be ignored."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1415
+#: converter/mymoneystatementreader.cpp:612
+#: converter/mymoneystatementreader.cpp:644
+msgid "Security not found"
+msgstr "Sikkerhed ikke fundet"
+
+#: converter/mymoneyqifreader.cpp:2021
+#, fuzzy
+msgid "%1 (Investment)"
+msgstr "Investeringer"
+
+#: converter/mymoneyqifreader.cpp:2022
+msgid "Autogenerated by QIF importer from type Mutual account entry"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2085 converter/mymoneyqifreader.cpp:2228
+msgid "account"
+msgstr "Konto"
+
+#: converter/mymoneyqifreader.cpp:2086
+msgid "al"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2093
+msgid "category"
+msgstr "kategori"
+
+#: converter/mymoneyqifreader.cpp:2094
+msgid "ei"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2095
+msgid "Category selection"
+msgstr "Kategori valg"
+
+#: converter/mymoneyqifreader.cpp:2110
+msgid "Account \"%1\" disappeared: "
+msgstr "Konto \"%1\" forsvandt: "
+
+#: converter/mymoneyqifreader.cpp:2131
+msgid "The %1 '%2' does not exist. Do you want to create it?"
+msgstr "%1 '%2' Findes ikke. Skal den oprettes?"
+
+#: converter/mymoneyqifreader.cpp:2140
+#, c-format
+msgid "Select %1"
+msgstr "Vælg %1"
+
+#: converter/mymoneyqifreader.cpp:2142
+msgid ""
+"The %1 <b>%2</b> currently exists. Do you want to import transactions to "
+"this account?"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2147
+msgid ""
+"The %1 <b>%2</b> currently does not exist. You can create a new %3 by "
+"pressing the <b>Create</b> button or select another %4 manually from the "
+"selection box."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2154
+#, c-format
+msgid "Import transactions to %1"
+msgstr "Importér overførsler til %1"
+
+#: converter/mymoneyqifreader.cpp:2155
+msgid ""
+"No %1 information has been found in the selected QIF file. Please select an "
+"account using the selection box in the dialog or create a new %2 by pressing "
+"the <b>Create</b> button."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2229
+msgid "You must select or create an account."
+msgstr "Du skal vælge eller oprette en konto."
+
+#: converter/mymoneyqifreader.cpp:2231
+msgid "You must select or create a category."
+msgstr "Du skal vælge eller oprette en kategori."
+
+#: converter/mymoneystatementreader.cpp:100
+msgid "_Fees"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:106
+#, fuzzy
+msgid "_Dividend"
+msgstr "Dividende"
+
+#: converter/mymoneystatementreader.cpp:289
+#, fuzzy, c-format
+msgid "Importing statement for account %1"
+msgstr "Importér overførsler til %1"
+
+#: converter/mymoneystatementreader.cpp:291
+#, fuzzy
+msgid "Importing statement without transactions"
+msgstr "Importér overførsler til %1"
+
+#: converter/mymoneystatementreader.cpp:385
+msgid " Statement balance is not contained in statement."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:387
+msgid " Statement balance on %1 is reported to be %2"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:389
+#, fuzzy
+msgid " Transactions"
+msgstr "Importér overførsler"
+
+#: converter/mymoneystatementreader.cpp:390
+msgid " %1 processed"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:391
+msgid " %1 added"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:392
+msgid " %1 matched"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:393
+#, fuzzy
+msgid " %1 duplicates"
+msgstr "Duplikér"
+
+#: converter/mymoneystatementreader.cpp:394
+#, fuzzy
+msgid " Payees"
+msgstr "Betalingsmodtager"
+
+#: converter/mymoneystatementreader.cpp:395
+msgid " %1 created"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:483
+#, fuzzy, c-format
+msgid "Error creating security record: %1"
+msgstr "Fejl under forbindelse til bank: %1"
+
+#: converter/mymoneystatementreader.cpp:612
+msgid ""
+"This imported statement contains investment transactions with no security. "
+"These transactions will be ignored."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:803
+msgid "(Fees) "
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:880
+msgid ""
+"Do you want to add \"%1\" as payee/receiver?\n"
+"\n"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:881
+msgid ""
+"Selecting \"Yes\" will create the payee, \"No\" will skip creation of a "
+"payee record and remove the payee information from this transaction. "
+"Selecting \"Cancel\" aborts the import operation.\n"
+"\n"
+"If you select \"No\" here and mark the \"Don't ask again\" checkbox, the "
+"payee information for all following transactions referencing \"%1\" will be "
+"removed."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:917
+#, fuzzy
+msgid "Save Category"
+msgstr "Kategori"
+
+#: converter/mymoneystatementreader.cpp:918
+#, fuzzy
+msgid "No Category"
+msgstr "Kategori"
+
+#: converter/mymoneystatementreader.cpp:919 dialogs/rc.cpp:4
+msgid "Abort"
+msgstr "Luk"
+
+#: converter/mymoneystatementreader.cpp:926
+msgid "Please select a default category for payee '%1':"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:958
+msgid "Unable to add payee/receiver"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid ""
+"KMyMoney has found a scheduled transaction named <b>%1</b> which matches an "
+"imported transaction. Do you want KMyMoney to enter this schedule now so "
+"that the transaction can be matched? "
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1162
+#, fuzzy
+msgid "Schedule found"
+msgstr "Vælg %1"
+
+#: converter/mymoneystatementreader.cpp:1219
+#, fuzzy
+msgid "Problem adding or matching imported transaction with id '%1': %2"
+msgstr "Problem ved at tilføje overførsel:"
+
+#: converter/mymoneystatementreader.cpp:1268
+msgid ""
+"<b>You have downloaded a statement for the following account:</b><br><br>"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1269
+#, fuzzy, c-format
+msgid " - Account Name: %1"
+msgstr " - Kontonavn: %1<br>"
+
+#: converter/mymoneystatementreader.cpp:1270
+#, fuzzy, c-format
+msgid " - Account Type: %1"
+msgstr " - Konto type: %1<br>"
+
+#: converter/mymoneystatementreader.cpp:1271
+#, fuzzy, c-format
+msgid " - Account Number: %1"
+msgstr " - Kontonummer: %1<br>"
+
+#: converter/mymoneystatementreader.cpp:1279
+msgid "Do you want to import transactions to this account?"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1281
+msgid ""
+"KMyMoney cannot determine which of your accounts to use. You can create a "
+"new account by pressing the <b>Create</b> button or select another one "
+"manually from the selection box below."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1287
+msgid ""
+"No account information has been found in the selected statement file. Please "
+"select an account using the selection box in the dialog or create a new "
+"account by pressing the <b>Create</b> button."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1294
+msgid "Import transactions"
+msgstr "Importér overførsler"
+
+#: converter/mymoneystatementreader.cpp:1330
+#, fuzzy
+msgid ""
+"You must select an account, create a new one, or press the <b>Abort</b> "
+"button."
+msgstr "Du skal vælge en konto, oprette en ny, eller trykke Annuller"
+
+#: converter/mymoneygncreader.cpp:119
+msgid "%1: Sorry. This importer cannot handle version %2 of element %3"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:193
+#, fuzzy, c-format
+msgid "Account%1"
+msgstr "Konto"
+
+#: converter/mymoneygncreader.cpp:197
+#, fuzzy, c-format
+msgid "Stock%1"
+msgstr "Aktie"
+
+#: converter/mymoneygncreader.cpp:206
+#, fuzzy, c-format
+msgid "Payee%1"
+msgstr "Betalingsmodtager"
+
+#: converter/mymoneygncreader.cpp:212
+#, fuzzy, c-format
+msgid "Schedule%1"
+msgstr "Vælg %1"
+
+#: converter/mymoneygncreader.cpp:262
+msgid "This version of the importer cannot handle multi-book files."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:912
+msgid "Invalid header for file. Should be 'gnc-v2'"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:937 converter/mymoneygncreader.cpp:972
+#: converter/mymoneygncreader.cpp:1062
+#, fuzzy, c-format
+msgid ""
+"Import failed:\n"
+"\n"
+"%1"
+msgstr "Importerer fil..."
+
+#: converter/mymoneygncreader.cpp:1065
+#, fuzzy
+msgid "Import complete"
+msgstr "Importerer konto skabeloner."
+
+#: converter/mymoneygncreader.cpp:1120
+msgid "Disguise your wealth"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1121
+msgid ""
+"Each monetary value on your file will be multiplied by a random number "
+"between 0.01 and 1.99\n"
+"with a different value used for each transaction. In addition, to further "
+"disguise the true\n"
+"values, you may enter a number between %1 and %2 which will be applied to "
+"all values.\n"
+"These numbers will not be stored in the file."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1135
+#, fuzzy
+msgid "Loading commodities..."
+msgstr "Åbner fil..."
+
+#: converter/mymoneygncreader.cpp:1160
+#, fuzzy
+msgid "Loading prices..."
+msgstr "Åbner fil..."
+
+#: converter/mymoneygncreader.cpp:1164 converter/mymoneygncreader.cpp:1171
+msgid "Imported History"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1251
+#, c-format
+msgid "Current importer does not recognize GnuCash account type %1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1471
+#, fuzzy
+msgid "Imported Transaction"
+msgstr "Importér overførsler"
+
+#: converter/mymoneygncreader.cpp:1519
+#, fuzzy
+msgid "Loading templates..."
+msgstr "Loader skabelon %1"
+
+#: converter/mymoneygncreader.cpp:1531
+#, fuzzy
+msgid "Unknown payee"
+msgstr "ukendt"
+
+#: converter/mymoneygncreader.cpp:1723
+#, fuzzy
+msgid "Loading schedules..."
+msgstr "Åbner fil..."
+
+#: converter/mymoneygncreader.cpp:1735
+#, c-format
+msgid "Can't find template transaction for schedule %1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1910
+#, fuzzy
+msgid "Reorganizing accounts..."
+msgstr "Flytter konto"
+
+#: converter/mymoneygncreader.cpp:1972
+msgid ""
+"Your main currency seems to be %1 (%2); do you want to set this as your base "
+"currency?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1993
+msgid "More"
+msgstr "Mere"
+
+#: converter/mymoneygncreader.cpp:1997
+#, fuzzy
+msgid "Save Report"
+msgstr "&Rapporter"
+
+#: converter/mymoneygncreader.cpp:2017
+msgid ""
+"Problems were encountered in converting schedule '%1'.\n"
+"Do you want to review or edit it now?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2039
+msgid ""
+"Found:\n"
+"\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2040
+msgid " commodities (equities)\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2041
+#, fuzzy
+msgid " prices\n"
+msgstr "Pris"
+
+#: converter/mymoneygncreader.cpp:2042
+#, fuzzy
+msgid " accounts\n"
+msgstr "Konto"
+
+#: converter/mymoneygncreader.cpp:2043
+#, fuzzy
+msgid " transactions\n"
+msgstr "Importér overførsler"
+
+#: converter/mymoneygncreader.cpp:2044
+msgid " schedules\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2047
+msgid "No inconsistencies were detected"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2049
+msgid " inconsistencies were detected and corrected\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2054
+msgid " orphan accounts were created\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2059
+msgid " possible schedule problems were noted\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2064
+msgid "Small Business Features (Customers, Invoices, etc.)"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2065 views/kmymoneyview.cpp:241
+#: views/kmymoneyview.cpp:243
+msgid "Budgets"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2066
+#, fuzzy
+msgid "Lots"
+msgstr "Noter:"
+
+#: converter/mymoneygncreader.cpp:2068
+msgid "The following features found in your file are not currently supported:"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2071
+#, fuzzy
+msgid ""
+"\n"
+"\n"
+"Press More for further information"
+msgstr "Ændr anden lån information"
+
+#: converter/mymoneygncreader.cpp:2139
+msgid "Orphan created from unknown gnucash account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2170
+msgid "Internal error - invalid interval char in incrDate"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2233
+#, fuzzy
+msgid "Enter the investment account name "
+msgstr "Inkludér kun investerings-kontoer"
+
+#: converter/mymoneygncreader.cpp:2234
+#, fuzzy
+msgid "My Investments"
+msgstr "Investeringer"
+
+#: converter/mymoneygncreader.cpp:2269
+#, c-format
+msgid "Select parent investment account or enter new name. Stock %1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2292 converter/mymoneygncreader.cpp:2307
+msgid "%1 is not an Investment Account. Do you wish to make it one?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2408
+msgid ""
+"An Investment account must be a child of an Asset account\n"
+"Account %1 will be stored under the main Asset account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2410
+msgid ""
+"An Income account must be a child of an Income account\n"
+"Account %1 will be stored under the main Income account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2412
+msgid ""
+"An Expense account must be a child of an Expense account\n"
+"Account %1 will be stored under the main Expense account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2414
+msgid ""
+"One or more transactions contain a reference to an otherwise unknown "
+"account\n"
+"An asset account with the name %1 has been created to hold the data"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2416
+msgid "Schedule %1 has interval of %2 which is not currently available"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2417
+msgid "Schedule %1 dropped at user request"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2418
+msgid "Schedule %1 contains unknown action (key = %2, type = %3)"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2419
+msgid "Schedule %1 contains multiple actions; only one has been imported"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2420
+msgid "Schedule %1 contains no valid splits"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2421
+msgid ""
+"Schedule %1 appears to contain a formula. GnuCash formulae are not "
+"convertible"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2422
+msgid ""
+"Schedule %1 contains unknown interval specification; please check for "
+"correct operation"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2423
+msgid ""
+"Schedule %1 contains a deferred interval specification; please check for "
+"correct operation"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2424
+msgid ""
+"Account or Category %1, transaction date %2; split contains invalid value; "
+"please check"
+msgstr ""
+
+#: kmymoneyutils.cpp:146
+msgid "&New Schedule..."
+msgstr ""
+
+#: kmymoneyutils.cpp:148
+msgid "Create a new schedule."
+msgstr ""
+
+#: kmymoneyutils.cpp:149
+msgid "Use this to create a new schedule."
+msgstr ""
+
+#: kmymoneyutils.cpp:158
+msgid "&Filter"
+msgstr ""
+
+#: kmymoneyutils.cpp:160
+msgid "Filter out accounts"
+msgstr ""
+
+#: kmymoneyutils.cpp:161
+msgid "Use this to filter out accounts"
+msgstr ""
+
+#: kmymoneyutils.cpp:192
+msgid "Preferred accounts"
+msgstr ""
+
+#: kmymoneyutils.cpp:193
+msgid "Payment accounts"
+msgstr ""
+
+#: kmymoneyutils.cpp:194
+msgid "Favorite reports"
+msgstr ""
+
+#: kmymoneyutils.cpp:195
+msgid "Forecast (schedule)"
+msgstr ""
+
+#: kmymoneyutils.cpp:196
+msgid "Networth forecast"
+msgstr ""
+
+#: kmymoneyutils.cpp:197
+msgid "Forecast (history)"
+msgstr ""
+
+#: kmymoneyutils.cpp:198
+#, fuzzy
+msgid "Assets and Liabilities"
+msgstr "Aktiver & Passiver"
+
+#: kmymoneyutils.cpp:199 reports/pivottable.cpp:2416 views/khomeview.cpp:1393
+#: widgets/rc.cpp:70
+msgid "Budget"
+msgstr ""
+
+#: kmymoneyutils.cpp:200
+#, fuzzy
+msgid "CashFlow"
+msgstr "Kontanter"
+
+#: dialogs/kenterscheduledlg.cpp:153 kmymoneyutils.cpp:366
+msgid "Unable to load schedule details"
+msgstr ""
+
+#: kmymoneyutils.cpp:390 widgets/register.cpp:473
+msgid ""
+"_: Reconcile state 'Not reconciled'\n"
+"Not reconciled"
+msgstr ""
+
+#: kmymoneyutils.cpp:393 widgets/register.cpp:476
+msgid ""
+"_: Reconcile state 'Cleared'\n"
+"Cleared"
+msgstr ""
+
+#: kmymoneyutils.cpp:396 widgets/register.cpp:479
+msgid ""
+"_: Reconcile state 'Reconciled'\n"
+"Reconciled"
+msgstr ""
+
+#: kmymoneyutils.cpp:399 widgets/register.cpp:482
+msgid ""
+"_: Reconcile state 'Frozen'\n"
+"Frozen"
+msgstr ""
+
+#: kmymoneyutils.cpp:410
+msgid ""
+"_: Reconcile flag C\n"
+"C"
+msgstr ""
+
+#: kmymoneyutils.cpp:413
+msgid ""
+"_: Reconcile flag R\n"
+"R"
+msgstr ""
+
+#: kmymoneyutils.cpp:416
+msgid ""
+"_: Reconcile flag F\n"
+"F"
+msgstr ""
+
+#: kmymoneyutils.cpp:419
+msgid ""
+"_: Flag for unknown reconciliation state\n"
+"?"
+msgstr ""
+
+#: _tips.cpp:3
+msgid ""
+"<p>...that you can change the sort order of ledger entries by\n"
+"right-clicking the header of the ledger view?\n"
+msgstr ""
+
+#: _tips.cpp:9
+msgid ""
+"<p>...that you can easily move to the other side of a transfer transaction\n"
+"by opening the context menu with the right mouse button and selecting one of "
+"the\n"
+"'Goto' functions?\n"
+msgstr ""
+
+#: _tips.cpp:16
+msgid ""
+"<p>...that you can start editing a transaction by double-clicking on the\n"
+"transaction in the register?\n"
+msgstr ""
+
+#: _tips.cpp:22
+msgid ""
+"<p>...that you can show more details of the selected transaction in the\n"
+"register by selecting the 'ledger lens' feature in the settings dialog?\n"
+msgstr ""
+
+#: _tips.cpp:28
+msgid ""
+"<p>...that transactions with no category assigned or split\n"
+"transactions with unassigned values are marked with an exclamation mark \n"
+"on a yellow triangle in the register?\n"
+msgstr ""
+
+#: _tips.cpp:35
+msgid ""
+"<p>...that you can show all details of the transactions in the register\n"
+"by typing &lt;Ctrl-T&gt; or selecting the 'Settings/Show Transaction "
+"Detail'\n"
+"menu entry? You can turn this feature off the same way.\n"
+msgstr ""
+
+#: _tips.cpp:42
+msgid ""
+"<p>...that you can switch between a listing of all accounts or\n"
+"an icon view of all asset and liability accounts with the tabs\n"
+"in the accounts view?\n"
+msgstr ""
+
+#: _tips.cpp:49
+msgid "<p>...that the KMyMoney development team wishes you a nice day?\n"
+msgstr ""
+
+#: _tips.cpp:54
+msgid ""
+"<p>...you can use your own external filter program to convert any\n"
+"import format to QIF on the fly? See the QIF profile editor for\n"
+"more details.\n"
+msgstr ""
+
+#: _tips.cpp:61
+msgid ""
+"<p>...that you can create a scheduled transaction from an existing\n"
+"one by selecting the context menu on a transaction in the ledger\n"
+"or the \"More...\"-menu in the transaction form?\n"
+msgstr ""
+
+#: _tips.cpp:68
+msgid ""
+"<p>...that you can switch to the payee of a transaction\n"
+"by selecting the context menu on a transaction in the ledger\n"
+"or in the transaction menu?\n"
+msgstr ""
+
+#: _tips.cpp:75
+msgid ""
+"<p>...that you can modify the colors and fonts used for the ledgers\n"
+"via <i>Configure/Register/...</i>?\n"
+msgstr ""
+
+#: _tips.cpp:81
+msgid ""
+"<p>...that you can hide transactions prior to a specific date?\n"
+"The date can be modified via <i>Configure/Register/Filter</i>.\n"
+msgstr ""
+
+#: _tips.cpp:87
+msgid ""
+"<p>...that you can customize the \"Home-Page\"\n"
+"via <i>Configure/Home</i>?\n"
+msgstr ""
+
+#: _tips.cpp:93
+msgid ""
+"<p>...that you can enter new transactions even while reconciling\n"
+"an account? You can also make the transaction form visible.\n"
+msgstr ""
+
+#: _tips.cpp:99
+msgid ""
+"<p>...that you can actively support the KMyMoney development team in\n"
+"cases that heavily depend on your data? You can save your data in an\n"
+"anonymized way for this support.<p>\n"
+"Just open your data file and immediately\n"
+"select <b>File/Save as...</b>. In the <b>Save As...</b> dialog\n"
+"select the filter <b>Anonymous Files</b> and make sure your file gets\n"
+"the extensions <b>.anon.xml</b>. <p>\n"
+"To verify, how the data looks like you are about to send away, you can open\n"
+"this file in KMyMoney and see how the developers see your data.\n"
+msgstr ""
+
+#: _tips.cpp:112
+msgid ""
+"<p>... that you can import your bank statements even without a network \n"
+"connection? Just select the file (OFX or QIF) from the File->Import menu.</"
+"p>\n"
+"<p>Provided by Jose Jorge</p>\n"
+msgstr ""
+
+#: reports/listtable.cpp:159 reports/listtable.cpp:163
+#: reports/pivottable.cpp:1564
+msgid ""
+"_: Report date range\n"
+"%1 through %2"
+msgstr ""
+
+#: reports/listtable.cpp:171 reports/pivottable.cpp:1571
+#, c-format
+msgid "All currencies converted to %1"
+msgstr ""
+
+#: reports/listtable.cpp:172 reports/pivottable.cpp:1328
+msgid "All currencies converted to %1\n"
+msgstr ""
+
+#: reports/listtable.cpp:176 reports/pivottable.cpp:1573
+msgid "All values shown in %1 unless otherwise noted"
+msgstr ""
+
+#: reports/listtable.cpp:177 reports/pivottable.cpp:1330
+msgid "All values shown in %1 unless otherwise noted\n"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:73 dialogs/kfindtransactiondlg.cpp:188
+#: dialogs/rc.cpp:53 dialogs/rc.cpp:63 dialogs/rc.cpp:208 dialogs/rc.cpp:805
+#: dialogs/settings/rc.cpp:111 dialogs/transactioneditor.cpp:844
+#: reports/listtable.cpp:196 views/khomeview.cpp:412 views/khomeview.cpp:485
+#: views/khomeview.cpp:519 views/rc.cpp:61 widgets/kmymoneypriceview.cpp:128
+#: widgets/rc.cpp:36 widgets/register.cpp:565 widgets/transaction.cpp:1027
+#: widgets/transaction.cpp:1484
+msgid "Date"
+msgstr "Dato"
+
+#: reports/listtable.cpp:198
+msgid "Num"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:204 dialogs/kmymoneysplittable.cpp:78
+#: dialogs/kmymoneysplittable.cpp:831 dialogs/rc.cpp:217
+#: dialogs/transactioneditor.cpp:831 dialogs/transactioneditor.cpp:1374
+#: dialogs/transactioneditor.cpp:1382 dialogs/transactioneditor.cpp:1396
+#: dialogs/transactioneditor.cpp:1449 dialogs/transactioneditor.cpp:1456
+#: dialogs/transactioneditor.cpp:1504 reports/listtable.cpp:200
+#: views/kcategoriesview.cpp:76 views/rc.cpp:62 widgets/rc.cpp:115
+#: widgets/register.cpp:62 widgets/transaction.cpp:848
+#: widgets/transaction.cpp:906
+msgid "Category"
+msgstr "Kategori"
+
+#: dialogs/kmymoneysplittable.cpp:79 dialogs/kmymoneysplittable.cpp:837
+#: reports/listtable.cpp:202 widgets/rc.cpp:101 widgets/transaction.cpp:1042
+#: widgets/transaction.cpp:1628
+msgid "Memo"
+msgstr ""
+
+#: reports/listtable.cpp:203
+msgid "Top Category"
+msgstr ""
+
+#: reports/listtable.cpp:204
+msgid "Category Type"
+msgstr ""
+
+#: dialogs/rc.cpp:229 dialogs/settings/rc.cpp:152 reports/listtable.cpp:207
+#: widgets/kmymoneycombo.cpp:346 widgets/rc.cpp:107
+msgid "Reconciled"
+msgstr ""
+
+#: reports/listtable.cpp:208 widgets/rc.cpp:117
+msgid "Action"
+msgstr ""
+
+#: dialogs/investactivities.cpp:199 dialogs/investactivities.cpp:287
+#: dialogs/investactivities.cpp:424 dialogs/investactivities.cpp:504
+#: dialogs/investactivities.cpp:544 dialogs/investtransactioneditor.cpp:241
+#: reports/listtable.cpp:209 widgets/rc.cpp:103 widgets/transaction.cpp:1513
+msgid "Shares"
+msgstr ""
+
+#: dialogs/investtransactioneditor.cpp:248
+#: dialogs/investtransactioneditor.cpp:1067
+#: dialogs/investtransactioneditor.cpp:1068
+#: dialogs/investtransactioneditor.cpp:1072
+#: dialogs/kequitypriceupdatedlg.cpp:72 dialogs/rc.cpp:109 dialogs/rc.cpp:164
+#: dialogs/rc.cpp:251 dialogs/rc.cpp:756 dialogs/rc.cpp:827
+#: dialogs/settings/rc.cpp:117 reports/listtable.cpp:210
+#: reports/listtable.cpp:211 reports/pivottable.cpp:2441
+#: views/kinvestmentview.cpp:80 widgets/kmymoneypriceview.cpp:129
+#: widgets/rc.cpp:43 widgets/rc.cpp:105 widgets/register.cpp:573
+msgid "Price"
+msgstr "Pris"
+
+#: reports/listtable.cpp:212
+msgid "Net Value"
+msgstr ""
+
+#: reports/listtable.cpp:213
+msgid "Buys"
+msgstr ""
+
+#: reports/listtable.cpp:214
+msgid "Sells"
+msgstr ""
+
+#: reports/listtable.cpp:215
+msgid "Dividends Reinvested"
+msgstr ""
+
+#: reports/listtable.cpp:216
+msgid "Dividends Paid Out"
+msgstr ""
+
+#: reports/listtable.cpp:217
+msgid "Starting Balance"
+msgstr ""
+
+#: reports/listtable.cpp:218
+msgid "Ending Balance"
+msgstr ""
+
+#: reports/listtable.cpp:219
+msgid "Annualized Return"
+msgstr ""
+
+#: reports/listtable.cpp:220
+#, fuzzy
+msgid "Return On Investment"
+msgstr "Investeringer"
+
+#: dialogs/rc.cpp:106 dialogs/rc.cpp:161 dialogs/rc.cpp:248 dialogs/rc.cpp:505
+#: dialogs/rc.cpp:570 dialogs/rc.cpp:667 dialogs/rc.cpp:753
+#: reports/listtable.cpp:223 widgets/register.cpp:570
+msgid "Payment"
+msgstr "Betaling"
+
+#: dialogs/rc.cpp:111 dialogs/rc.cpp:166 dialogs/rc.cpp:253 dialogs/rc.cpp:709
+#: dialogs/rc.cpp:758 reports/listtable.cpp:224 widgets/rc.cpp:119
+#: widgets/register.cpp:575
+msgid "Balance"
+msgstr "Balance"
+
+#: reports/listtable.cpp:227 views/kscheduledview.cpp:74
+msgid "Next Due Date"
+msgstr ""
+
+#: reports/listtable.cpp:229 views/kscheduledview.cpp:76
+msgid "Payment Method"
+msgstr ""
+
+#: dialogs/rc.cpp:803 reports/listtable.cpp:231 widgets/rc.cpp:2
+msgid "Description"
+msgstr "Beskrivelse"
+
+#: reports/listtable.cpp:232
+#, fuzzy
+msgid "Opening Date"
+msgstr "Åbningsbalancer"
+
+#: reports/listtable.cpp:234
+msgid "Balance Early Warning"
+msgstr ""
+
+#: reports/listtable.cpp:235
+#, fuzzy
+msgid "Balance Max Limit"
+msgstr "Balance:"
+
+#: reports/listtable.cpp:236
+#, fuzzy
+msgid "Credit Early Warning"
+msgstr "Importér overførsler"
+
+#: reports/listtable.cpp:237
+#, fuzzy
+msgid "Credit Max Limit"
+msgstr "Kreditkort"
+
+#: dialogs/rc.cpp:376 reports/listtable.cpp:238
+msgid "Tax"
+msgstr "Skat"
+
+#: reports/listtable.cpp:239
+#, fuzzy
+msgid "Preferred"
+msgstr "Standard-konto:"
+
+#: reports/listtable.cpp:240
+#, fuzzy
+msgid "Loan Amount"
+msgstr "Lånets størrelse"
+
+#: dialogs/rc.cpp:511 reports/listtable.cpp:241
+msgid "Interest Rate"
+msgstr "Rente"
+
+#: reports/listtable.cpp:242
+#, fuzzy
+msgid "Next Interest Change"
+msgstr "Næste rentetilpasning den:"
+
+#: reports/listtable.cpp:243
+#, fuzzy
+msgid "Periodic Payment"
+msgstr "Periodisk betaling:"
+
+#: reports/listtable.cpp:244
+#, fuzzy
+msgid "Final Payment"
+msgstr "Betaling"
+
+#: reports/listtable.cpp:245 views/khomeview.cpp:766 views/khomeview.cpp:1265
+#: views/khomeview.cpp:1273
+#, fuzzy
+msgid "Current Balance"
+msgstr "Nuværende beløb"
+
+#: dialogs/investactivities.cpp:201 dialogs/investactivities.cpp:289
+#: dialogs/investactivities.cpp:368 dialogs/investactivities.cpp:426
+#: dialogs/rc.cpp:327 reports/listtable.cpp:360 reports/listtable.cpp:364
+#: reports/listtable.cpp:556 reports/listtable.cpp:558
+#: reports/pivottable.cpp:1343 reports/pivottable.cpp:1445
+#: reports/pivottable.cpp:1505 reports/pivottable.cpp:1598
+#: reports/pivottable.cpp:1768 reports/pivottable.cpp:1845
+#: reports/pivottable.cpp:2165 reports/pivottable.cpp:2167
+#: reports/pivottable.cpp:2187 reports/pivottable.cpp:2189
+#: reports/querytabletest.cpp:134 reports/querytabletest.cpp:135
+#: reports/querytabletest.cpp:136 reports/querytabletest.cpp:137
+#: reports/querytabletest.cpp:162 reports/querytabletest.cpp:163
+#: reports/querytabletest.cpp:164 reports/querytabletest.cpp:197
+#: reports/querytabletest.cpp:198 reports/querytabletest.cpp:224
+#: reports/querytabletest.cpp:250 reports/querytabletest.cpp:251
+#: reports/querytabletest.cpp:252 reports/querytabletest.cpp:275
+#: reports/querytabletest.cpp:276 reports/querytabletest.cpp:277
+#: reports/querytabletest.cpp:366 reports/querytabletest.cpp:422
+#: reports/querytabletest.cpp:423 views/kforecastview.cpp:568 views/rc.cpp:18
+#: widgets/kmymoneyaccounttreeforecast.cpp:139 widgets/transaction.cpp:1643
+msgid "Total"
+msgstr ""
+
+#: reports/listtable.cpp:444
+msgid "Initial Market Value"
+msgstr ""
+
+#: reports/listtable.cpp:445
+msgid "Ending Market Value"
+msgstr ""
+
+#: reports/listtable.cpp:448 reports/querytabletest.cpp:651
+#, fuzzy
+msgid "Opening Balance"
+msgstr "Åbningsbalancer"
+
+#: reports/listtable.cpp:449 reports/querytabletest.cpp:652
+#: reports/querytabletest.cpp:653
+#, fuzzy
+msgid "Closing Balance"
+msgstr "Slut-balance:"
+
+#: reports/listtable.cpp:490 reports/listtable.cpp:491
+#, fuzzy
+msgid "Calculated"
+msgstr "Udregn lån"
+
+#: reports/listtable.cpp:572 reports/listtable.cpp:574
+#: reports/pivottable.cpp:1530 reports/pivottable.cpp:1886
+#: reports/querytabletest.cpp:138 reports/querytabletest.cpp:165
+#: reports/querytabletest.cpp:199 reports/querytabletest.cpp:225
+#: reports/querytabletest.cpp:253 reports/querytabletest.cpp:278
+#: reports/querytabletest.cpp:367 reports/querytabletest.cpp:402
+#: reports/querytabletest.cpp:424 reports/querytabletest.cpp:548
+#: reports/querytabletest.cpp:551 reports/querytabletest.cpp:586
+msgid "Grand Total"
+msgstr ""
+
+#: dialogs/rc.cpp:233 reports/pivottable.cpp:339 views/kscheduledview.cpp:174
+#: views/kscheduledview.cpp:433 views/kscheduledview.cpp:449
+#: widgets/kmymoneyscheduledcalendar.cpp:48
+msgid "Transfers"
+msgstr ""
+
+#: reports/pivottable.cpp:1951
+msgid "Legend"
+msgstr ""
+
+#: reports/pivottable.cpp:2411 views/khomeview.cpp:1406
+#: views/khomeview.cpp:1443
+msgid "Actual"
+msgstr ""
+
+#: reports/pivottable.cpp:2421 views/khomeview.cpp:1409
+#: views/khomeview.cpp:1446
+#, fuzzy
+msgid "Difference"
+msgstr "Difference:"
+
+#: reports/pivottable.cpp:2431
+msgid "Moving Average"
+msgstr ""
+
+#: reports/pivottable.cpp:2436
+#, fuzzy
+msgid "Moving Average Price"
+msgstr "Investeringslån"
+
+#: reports/objectinfotable.cpp:214 reports/querytable.cpp:693
+#: reports/querytable.cpp:736 reports/querytable.cpp:1356
+#: reports/querytable.cpp:1375 views/kpayeesview.cpp:742
+#, c-format
+msgid "Transfer from %1"
+msgstr "Overfør fra %1"
+
+#: reports/objectinfotable.cpp:215 reports/querytable.cpp:694
+#: reports/querytable.cpp:735 reports/querytable.cpp:1355
+#: reports/querytable.cpp:1374 views/kpayeesview.cpp:740
+#, c-format
+msgid "Transfer to %1"
+msgstr "Overfør til %1"
+
+#: reports/querytabletest.cpp:471 views/kreportsview.cpp:1144
+msgid "Investment Transactions"
+msgstr ""
+
+#: reports/querytabletest.cpp:472 reports/querytabletest.cpp:564
+msgid "Test Report"
+msgstr ""
+
+#: reports/querytabletest.cpp:547 reports/querytabletest.cpp:550
+msgid "Total Stock 1"
+msgstr ""
+
+#: reports/querytabletest.cpp:563 views/kreportsview.cpp:1174
+msgid "Investment Performance by Account"
+msgstr ""
+
+#: reports/querytable.cpp:431 reports/querytable.cpp:1200
+#, c-format
+msgid "Month of %1"
+msgstr ""
+
+#: reports/querytable.cpp:432 reports/querytable.cpp:1201
+#, c-format
+msgid "Week of %1"
+msgstr ""
+
+#: reports/querytable.cpp:576 reports/querytable.cpp:739
+#: reports/querytable.cpp:858 reports/querytable.cpp:1325
+#: reports/querytable.cpp:1481
+#, fuzzy
+msgid "No Institution"
+msgstr "<Ingen institution>"
+
+#: reports/querytable.cpp:580 reports/querytable.cpp:1329
+msgid "[Empty Payee]"
+msgstr ""
+
+#: reports/querytable.cpp:615 reports/querytable.cpp:1361
+#, fuzzy
+msgid "[Split Transaction]"
+msgstr "Opdel overførsel"
+
+#: reports/querytable.cpp:616 reports/querytable.cpp:617
+msgid "Split"
+msgstr "Opdeling"
+
+#: main.cpp:51
+msgid ""
+"\n"
+"KMyMoney, the Personal Finance Manager for KDE.\n"
+"\n"
+"Please consider contributing to this project with code and/or suggestions."
+msgstr ""
+
+#: main.cpp:55
+msgid "language to be used"
+msgstr "Sprog der skal bruges"
+
+#: main.cpp:56
+msgid "don't open last used file"
+msgstr ""
+
+#: main.cpp:57
+msgid "enable performance timers"
+msgstr ""
+
+#: main.cpp:61
+msgid "turn on program traces"
+msgstr ""
+
+#: main.cpp:62
+msgid "dump the names of all defined KAction objects to stdout and quit"
+msgstr ""
+
+#: main.cpp:66
+msgid "file to open"
+msgstr "Fil som skal åbnes"
+
+#: main.cpp:92
+msgid "Memory leakage detection"
+msgstr ""
+
+#: main.cpp:96
+msgid "Compiled with the following settings:\n"
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:650 dialogs/ksplittransactiondlg.cpp:277
+#: main.cpp:98
+msgid "KMyMoney"
+msgstr ""
+
+#: main.cpp:104
+msgid "Initial idea, much initial source code, Project admin"
+msgstr ""
+
+#: main.cpp:105
+msgid "Core engine, Release Manager, Project admin"
+msgstr ""
+
+#: main.cpp:106
+msgid "Reporting logic, OFX Import"
+msgstr ""
+
+#: main.cpp:107
+msgid "Database backend, maintainer stable branch"
+msgstr ""
+
+#: main.cpp:108
+#, fuzzy
+msgid "Forecast, Reports"
+msgstr "Nulstil alle indstillinger"
+
+#: main.cpp:109
+msgid "Project Admin"
+msgstr "Projektleder"
+
+#: main.cpp:110
+msgid "Developer"
+msgstr "Udviklere"
+
+#: main.cpp:111
+msgid "Database backend"
+msgstr ""
+
+#: main.cpp:113
+msgid "Initial investment support"
+msgstr ""
+
+#: main.cpp:114
+msgid "Developer & Artist"
+msgstr "Udviklere og designere"
+
+#: main.cpp:115
+msgid "Icons & splash screen"
+msgstr "Ikoner og opstartsskærm"
+
+#: main.cpp:116 main.cpp:117
+msgid "Patches"
+msgstr ""
+
+#: main.cpp:136
+msgid ""
+"The monetary decimal symbol is not correctly set in the KDE Control Center's "
+"Country/Region & Language settings. Please set it to a reasonable value and "
+"start KMyMoney again."
+msgstr ""
+
+#: main.cpp:136
+#, fuzzy
+msgid "Invalid settings"
+msgstr "Nulstil alle indstillinger"
+
+#: main.cpp:228
+msgid "Another instance of KMyMoney is already running. Do you want to quit?"
+msgstr "KMyMoney kører allerede, ønsker du at annullere?"
+
+#: main.cpp:289
+msgid "Uncaught error. Please report the details to the developers"
+msgstr ""
+
+#: _translatorinfo.cpp:1
+#, fuzzy
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Daniel Sørensen,Anders Ellenshøj Andersen"
+
+#: _translatorinfo.cpp:3
+#, fuzzy
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "daniel@dumazz.dk,andersa@ellenshoej.dk"
+
+#: dialogs/kcsvprogressdlg.cpp:62 dialogs/kimportdlg.cpp:66 rc.cpp:1
+msgid "&Import"
+msgstr "&Importér"
+
+#: rc.cpp:2
+msgid "E&xport"
+msgstr "E&ksportér"
+
+#: rc.cpp:3
+msgid "&Institution"
+msgstr "&Institution"
+
+#: rc.cpp:4
+msgid "&Account"
+msgstr "&Konto"
+
+#: rc.cpp:5
+#, fuzzy
+msgid "&Category"
+msgstr "Kategori"
+
+#: rc.cpp:6
+#, fuzzy
+msgid "&Transaction"
+msgstr "Importér overførsler"
+
+#: rc.cpp:7 rc.cpp:20
+#, fuzzy
+msgid "Mark transaction as..."
+msgstr "Find transaktion..."
+
+#: rc.cpp:8 rc.cpp:21
+#, fuzzy
+msgid "Mark transaction"
+msgstr "Importér overførsler"
+
+#: rc.cpp:9
+#, fuzzy
+msgid "T&ools"
+msgstr "Detajler"
+
+#: rc.cpp:10
+msgid "Account options"
+msgstr ""
+
+#: rc.cpp:11
+#, fuzzy
+msgid "Category options"
+msgstr "Kategori valg"
+
+#: rc.cpp:12
+#, fuzzy
+msgid "Institution options"
+msgstr "Institutionsindstillinger"
+
+#: rc.cpp:13
+#, fuzzy
+msgid "Payee options"
+msgstr "Pris valg"
+
+#: rc.cpp:14
+#, fuzzy
+msgid "Budget options"
+msgstr "Beskrivelse"
+
+#: rc.cpp:15
+#, fuzzy
+msgid "Investment options"
+msgstr "Investeringslån"
+
+#: rc.cpp:16
+#, fuzzy
+msgid "Scheduled transactions options"
+msgstr "Slet overførsel"
+
+#: rc.cpp:17
+#, fuzzy
+msgid "Transaction options"
+msgstr "Overførsels detaljer"
+
+#: rc.cpp:18
+#, fuzzy
+msgid "Move transaction to..."
+msgstr "Find transaktion..."
+
+#: rc.cpp:19
+#, fuzzy
+msgid "Select account"
+msgstr "Vælg konto:"
+
+#: rc.cpp:22
+#, fuzzy
+msgid "Currency options"
+msgstr "Valutaer"
+
+#: rc.cpp:24
+msgid "Always show a No. field in transaction form"
+msgstr ""
+
+#: rc.cpp:25
+msgid "Auto fill with previous transaction data"
+msgstr ""
+
+#: rc.cpp:26
+msgid "Treat two transactions as identical, if amount differs less than"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:144 rc.cpp:27
+msgid "Auto increment check number"
+msgstr ""
+
+#: rc.cpp:28
+msgid "Autosave file periodically"
+msgstr ""
+
+#: rc.cpp:29
+msgid "Autosave interval in minutes"
+msgstr ""
+
+#: rc.cpp:30
+msgid "Check schedules upon startup"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:171 rc.cpp:31
+msgid "Enter transactions this number of days in advance"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:172 rc.cpp:32
+msgid "Number of days to preview schedules in ledger"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:143 rc.cpp:33
+msgid "Insert transaction type into No. field for new transactions"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:145 rc.cpp:34
+msgid "Keep changes when selecting a different transaction/split"
+msgstr ""
+
+#: rc.cpp:35
+msgid "Using the Enter key moves between the fields"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:130 rc.cpp:36
+msgid "Use the ledger lens"
+msgstr ""
+
+#: rc.cpp:37
+#, fuzzy
+msgid "Price Precision"
+msgstr "Pris valg"
+
+#: dialogs/rc.cpp:65 rc.cpp:38
+msgid "Update price history"
+msgstr "Opdatér prishistorik"
+
+#: dialogs/settings/rc.cpp:132 rc.cpp:39
+msgid "Show transaction form"
+msgstr ""
+
+#: rc.cpp:40
+msgid "Start with last selected view or homepage"
+msgstr ""
+
+#: rc.cpp:41
+#, fuzzy
+msgid "Use GPG to encrypt data file"
+msgstr "Brug GPG-kryptering"
+
+#: rc.cpp:42
+#, fuzzy
+msgid "Also encrypt against recover key"
+msgstr "Kryptér også med KmyMoney-recovery nøgle"
+
+#: rc.cpp:43
+#, fuzzy
+msgid "GPG User ID (deprecated)"
+msgstr "Bruger ID"
+
+#: rc.cpp:44
+#, fuzzy
+msgid "GPG User ID"
+msgstr "Bruger ID"
+
+#: rc.cpp:45
+msgid "Run in expert (accountant) mode"
+msgstr ""
+
+#: rc.cpp:46
+msgid "Show splash screen during startup"
+msgstr ""
+
+#: rc.cpp:47
+msgid "Synchronize account in ledger and investment view"
+msgstr ""
+
+#: rc.cpp:48
+msgid "Icon size for view selection"
+msgstr ""
+
+#: rc.cpp:49
+msgid "list of hidden views"
+msgstr ""
+
+#: rc.cpp:50
+msgid "Firsttime switch to start new user wizard"
+msgstr ""
+
+#: rc.cpp:51
+msgid "Show title bar on each view"
+msgstr ""
+
+#: rc.cpp:52
+msgid "Start string matches for e.g. payees at start of string"
+msgstr ""
+
+#: rc.cpp:53
+msgid "Order of items on homepage"
+msgstr ""
+
+#: rc.cpp:54
+msgid "Percentage of default font size used for home view HTML page"
+msgstr ""
+
+#: rc.cpp:55
+msgid "Remember (manually adjusted) font size in home view on program end."
+msgstr ""
+
+#: rc.cpp:56
+msgid "Show account limit information on the Homepage"
+msgstr ""
+
+#: rc.cpp:58
+#, fuzzy
+msgid "Hide closed accounts"
+msgstr "Aktiver"
+
+#: rc.cpp:59
+#, fuzzy
+msgid "Hide finished schedules"
+msgstr "Åbner fil..."
+
+#: rc.cpp:61
+msgid "Show all register entries in full detail"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:129 rc.cpp:62
+msgid "Show a grid in the register"
+msgstr ""
+
+#: rc.cpp:63
+msgid "Show fancy group markers"
+msgstr ""
+
+#: rc.cpp:64
+msgid "Show fancy markers for previous and current fiscal year"
+msgstr ""
+
+#: rc.cpp:65
+msgid "Starting month of the fiscal year"
+msgstr ""
+
+#: rc.cpp:66
+#, fuzzy
+msgid "Starting day of the fiscal year"
+msgstr "Kontoopgørelsens primodato"
+
+#: rc.cpp:67
+#, fuzzy
+msgid "Start date"
+msgstr "Start operation"
+
+#: dialogs/settings/rc.cpp:9 rc.cpp:68
+msgid "Use system colors"
+msgstr ""
+
+#: rc.cpp:69
+msgid "List color"
+msgstr ""
+
+#: rc.cpp:70
+msgid "List background color"
+msgstr ""
+
+#: rc.cpp:71
+msgid "List grid color"
+msgstr ""
+
+#: rc.cpp:72
+#, fuzzy
+msgid "Background color for imported transactions"
+msgstr "Problem ved at tilføje overførsel:"
+
+#: rc.cpp:73
+msgid "Background color for matched transactions"
+msgstr ""
+
+#: rc.cpp:74
+msgid "List color for erronous transactions"
+msgstr ""
+
+#: rc.cpp:75
+msgid "List color for missing conversion rate"
+msgstr ""
+
+#: rc.cpp:76
+msgid "List color for negative values"
+msgstr ""
+
+#: rc.cpp:77
+msgid "Background color for group marker"
+msgstr ""
+
+#: rc.cpp:78
+msgid "Background color for required fields"
+msgstr ""
+
+#: rc.cpp:79
+msgid "Use system font"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:21 rc.cpp:80
+msgid "Cell font"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:22 rc.cpp:81
+msgid "Header font"
+msgstr ""
+
+#: rc.cpp:82 rc.cpp:83
+msgid "Sort order of register in normal view"
+msgstr ""
+
+#: rc.cpp:84
+msgid "Sort order of register in search dialog"
+msgstr ""
+
+#: rc.cpp:85
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation"
+msgstr ""
+
+#: rc.cpp:86
+msgid "Number of days (plus/minus) to search for matching transactions"
+msgstr ""
+
+#: rc.cpp:87
+msgid "During import, ask for a new payee's default category"
+msgstr ""
+
+#: rc.cpp:88
+msgid "Method to calculate forecast"
+msgstr ""
+
+#: rc.cpp:89
+msgid "Days to forecast"
+msgstr ""
+
+#: rc.cpp:90
+msgid "Days of normal account cycle"
+msgstr ""
+
+#: rc.cpp:91
+msgid "Number of historic cycles to use in forecast"
+msgstr ""
+
+#: rc.cpp:92
+msgid "Day of month to start forecast"
+msgstr ""
+
+#: rc.cpp:93
+msgid "Method to calculate history-based forecast"
+msgstr ""
+
+#: rc.cpp:94
+msgid "Skip opening date when fetching transactions"
+msgstr ""
+
+#: rc.cpp:95
+msgid "Include future transaction when using Schedule Forecast"
+msgstr ""
+
+#: rc.cpp:96
+#, fuzzy
+msgid "Include scheduled transactions when using Schedule Forecast"
+msgstr "Slet overførsel"
+
+#: rc.cpp:97
+msgid "additional names for cash account"
+msgstr ""
+
+#: rc.cpp:98
+msgid "additional names for checking account"
+msgstr ""
+
+#: rc.cpp:99
+msgid "additional names for credit card account"
+msgstr ""
+
+#: rc.cpp:100
+#, fuzzy
+msgid "additional names for asset account"
+msgstr "Opret en ny konto for aktiver"
+
+#: rc.cpp:101
+msgid "additional names for opening balance payee"
+msgstr ""
+
+#: rc.cpp:102
+msgid "additional names for invoice accounts"
+msgstr ""
+
+#: rc.cpp:103 widgets/rc.cpp:161 widgets/rc.cpp:163
+msgid "..."
+msgstr "..."
+
+#: views/kcategoriesview.cpp:276
+#, fuzzy
+msgid "Profit: "
+msgstr "Fortjeneste: %1"
+
+#: views/kcategoriesview.cpp:278
+#, fuzzy
+msgid "Loss: "
+msgstr "Tab: %1"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:54
+#: dialogs/transactioneditor.cpp:605 views/kpayeesview.cpp:365
+#: widgets/kmymoneyonlinequoteconfig.cpp:54
+msgid "Accepts the entered data and stores it"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:55 views/kpayeesview.cpp:366
+#: widgets/kmymoneyonlinequoteconfig.cpp:55
+msgid "Use this to accept the modified data."
+msgstr ""
+
+#: views/kpayeesview.cpp:491
+msgid ""
+"A payee with the name '%1' already exists. It is not advisable to have "
+"multiple payees with the same identification name. Are you sure you would "
+"like to rename the payee?"
+msgstr ""
+
+#: views/kpayeesview.cpp:518 views/kpayeesview.cpp:869
+msgid "Unable to modify payee"
+msgstr "Kunne ikke redigere modtager"
+
+#: views/kpayeesview.cpp:564
+#, fuzzy
+msgid "Do you want to save the changes for <b>%1</b>?"
+msgstr "Vil du annullere ændringerne i '%1'"
+
+#: views/kbudgetview.cpp:490 views/kpayeesview.cpp:565
+#, fuzzy
+msgid "Save changes"
+msgstr "Annullér ændringer"
+
+#: views/kgloballedgerview.cpp:737 views/kpayeesview.cpp:662
+#: views/kpayeesview.cpp:753
+#, c-format
+msgid "Balance: %1"
+msgstr "Balance: %1"
+
+#: views/kpayeesview.cpp:725 views/kpayeesview.cpp:731
+#, c-format
+msgid "Amortization of %1"
+msgstr ""
+
+#: views/kpayeesview.cpp:727 views/kpayeesview.cpp:733
+#, c-format
+msgid "Payment to %1"
+msgstr "Betaling til %1"
+
+#: views/kpayeesview.cpp:736
+#, c-format
+msgid "Loan payment from %1"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:123
+#: dialogs/kconfirmmanualenterdlg.cpp:133 views/kpayeesview.cpp:745
+#: widgets/kmymoneycategory.cpp:160 widgets/kmymoneycategory.cpp:166
+#: widgets/transaction.cpp:851 widgets/transaction.cpp:1397
+#: widgets/transaction.cpp:1411
+msgid ""
+"_: Split transaction (category replacement)\n"
+"Split transaction"
+msgstr ""
+
+#: views/kreportsview.cpp:262
+msgid ""
+"There was an error creating your report: \"%1\".\n"
+"Please report this error to the developer's list: kmymoney2-developer@lists."
+"sourceforge.net"
+msgstr ""
+
+#: views/kreportsview.cpp:264
+msgid "Critical Error"
+msgstr ""
+
+#: views/kreportsview.cpp:268
+msgid "Unable to generate report"
+msgstr ""
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:125 views/kreportsview.cpp:286
+#: views/rc.cpp:53 widgets/rc.cpp:146
+msgid "Chart"
+msgstr ""
+
+#: views/kreportsview.cpp:287 widgets/rc.cpp:147
+msgid "Show the chart version of this report"
+msgstr ""
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:112 views/khomeview.cpp:900
+#: views/kreportsview.cpp:294 views/kreportsview.cpp:328
+msgid "Report"
+msgstr ""
+
+#: views/kreportsview.cpp:295
+msgid "Show the report version of this chart"
+msgstr ""
+
+#: views/kmymoneyview.cpp:236 views/kreportsview.cpp:314
+#: views/kreportsview.cpp:326
+msgid "Reports"
+msgstr ""
+
+#: views/khomeview.cpp:902 views/kreportsview.cpp:329 widgets/rc.cpp:56
+msgid "Comment"
+msgstr ""
+
+#: views/kreportsview.cpp:432
+#, fuzzy
+msgid "Charts"
+msgstr "Gebyrer"
+
+#: views/khomeview.cpp:897 views/kreportsview.cpp:470
+msgid "Favorite Reports"
+msgstr ""
+
+#: views/kreportsview.cpp:486
+msgid "Old Customized Reports"
+msgstr ""
+
+#: views/kreportsview.cpp:579
+msgid "Include Stylesheet"
+msgstr ""
+
+#: views/kreportsview.cpp:585
+#, fuzzy
+msgid ""
+"_: CSV (Filefilter)\n"
+"CSV files"
+msgstr "Ingen MyMoneyFil åben"
+
+#: views/kreportsview.cpp:586
+msgid ""
+"_: HTML (Filefilter)\n"
+"HTML files"
+msgstr ""
+
+#: views/kreportsview.cpp:591
+#, fuzzy
+msgid "Export as"
+msgstr "E&ksportér"
+
+#: views/kreportsview.cpp:619 views/kreportsview.cpp:660
+#: views/kreportsview.cpp:942 views/kreportsview.cpp:950
+#: views/kreportsview.cpp:958 views/kreportsview.cpp:968
+#: views/kreportsview.cpp:980 views/kreportsview.cpp:998
+#: views/kreportsview.cpp:1006 views/kreportsview.cpp:1014
+#: views/kreportsview.cpp:1022 views/kreportsview.cpp:1034
+#: views/kreportsview.cpp:1046 views/kreportsview.cpp:1056
+#: views/kreportsview.cpp:1070 views/kreportsview.cpp:1079
+#: views/kreportsview.cpp:1087 views/kreportsview.cpp:1095
+#: views/kreportsview.cpp:1103 views/kreportsview.cpp:1111
+#: views/kreportsview.cpp:1120 views/kreportsview.cpp:1132
+#: views/kreportsview.cpp:1145 views/kreportsview.cpp:1155
+#: views/kreportsview.cpp:1165 views/kreportsview.cpp:1175
+#: views/kreportsview.cpp:1185 views/kreportsview.cpp:1195
+#: views/kreportsview.cpp:1208 views/kreportsview.cpp:1222
+#: views/kreportsview.cpp:1239 views/kreportsview.cpp:1257
+#: views/kreportsview.cpp:1273 views/kreportsview.cpp:1295
+#: views/kreportsview.cpp:1304 views/kreportsview.cpp:1313
+#: views/kreportsview.cpp:1322 views/kreportsview.cpp:1336
+#: views/kreportsview.cpp:1347 views/kreportsview.cpp:1362
+#: views/kreportsview.cpp:1372 views/kreportsview.cpp:1383
+#: views/kreportsview.cpp:1393 views/kreportsview.cpp:1404
+#: views/kreportsview.cpp:1423 views/kreportsview.cpp:1432
+#: views/kreportsview.cpp:1444 views/kreportsview.cpp:1463
+#: views/kreportsview.cpp:1472 views/kreportsview.cpp:1481
+#: views/kreportsview.cpp:1490
+msgid "Default Report"
+msgstr ""
+
+#: views/kreportsview.cpp:621 views/kreportsview.cpp:661
+msgid "Custom Report"
+msgstr ""
+
+#: views/kreportsview.cpp:622
+msgid " (Customized)"
+msgstr ""
+
+#: views/kreportsview.cpp:690
+msgid ""
+"Are you sure you want to delete report <b>%1</b>? There is no way to "
+"recover it!"
+msgstr ""
+
+#: views/kreportsview.cpp:690 views/kreportsview.cpp:702
+msgid "Delete Report?"
+msgstr ""
+
+#: views/kreportsview.cpp:702
+msgid "Sorry, <b>%1</b> is a default report. You may not delete it."
+msgstr ""
+
+#: views/kreportsview.cpp:882
+msgid "&Open"
+msgstr ""
+
+#: views/kreportsview.cpp:884
+msgid "&New report"
+msgstr ""
+
+#: views/kreportsview.cpp:934
+msgid "Income and Expenses"
+msgstr ""
+
+#: views/kreportsview.cpp:941
+msgid "Income and Expenses This Month"
+msgstr ""
+
+#: views/kreportsview.cpp:949
+msgid "Income and Expenses This Year"
+msgstr ""
+
+#: views/kreportsview.cpp:957
+#, fuzzy
+msgid "Income and Expenses By Year"
+msgstr "Indtægter og udgifter"
+
+#: views/kreportsview.cpp:967
+#, fuzzy
+msgid "Income and Expenses Graph"
+msgstr "Indtægter og udgifter"
+
+#: views/kreportsview.cpp:979
+#, fuzzy
+msgid "Income and Expenses Pie Chart"
+msgstr "Indtægter og udgifter"
+
+#: views/khomeview.cpp:1361 views/kreportsview.cpp:990
+msgid "Net Worth"
+msgstr ""
+
+#: views/kreportsview.cpp:997
+msgid "Net Worth By Month"
+msgstr ""
+
+#: views/kreportsview.cpp:1005
+msgid "Net Worth Today"
+msgstr ""
+
+#: views/kreportsview.cpp:1013
+msgid "Net Worth By Year"
+msgstr ""
+
+#: views/kreportsview.cpp:1021
+msgid "7-day Cash Flow Forecast"
+msgstr ""
+
+#: views/kreportsview.cpp:1033
+#, fuzzy
+msgid "Net Worth Graph"
+msgstr "Netto aktiver: "
+
+#: views/kreportsview.cpp:1045
+msgid "Account Balances by Institution"
+msgstr ""
+
+#: views/kreportsview.cpp:1055
+msgid "Account Balances by Type"
+msgstr ""
+
+#: views/kreportsview.cpp:1069
+msgid "Transactions by Account"
+msgstr ""
+
+#: views/kreportsview.cpp:1078
+msgid "Transactions by Category"
+msgstr ""
+
+#: views/kreportsview.cpp:1086
+msgid "Transactions by Payee"
+msgstr ""
+
+#: views/kreportsview.cpp:1094
+msgid "Transactions by Month"
+msgstr ""
+
+#: views/kreportsview.cpp:1102
+msgid "Transactions by Week"
+msgstr ""
+
+#: views/kreportsview.cpp:1110
+#, fuzzy
+msgid "Loan Transactions"
+msgstr "Find transaktion..."
+
+#: views/kreportsview.cpp:1119
+#, fuzzy
+msgid "Transactions by Reconciliation Status"
+msgstr "Overførsels detaljer"
+
+#: views/kreportsview.cpp:1125
+#, fuzzy
+msgid "Cash Flow"
+msgstr "Kontanter"
+
+#: views/kreportsview.cpp:1131
+#, fuzzy
+msgid "Cash Flow Transactions This Month"
+msgstr "Slet pris-information"
+
+#: views/kmymoneyview.cpp:226 views/kmymoneyview.cpp:228
+#: views/kreportsview.cpp:1137
+msgid "Investments"
+msgstr ""
+
+#: views/kreportsview.cpp:1154
+msgid "Investment Holdings by Account"
+msgstr ""
+
+#: views/kreportsview.cpp:1164
+msgid "Investment Holdings by Type"
+msgstr ""
+
+#: views/kreportsview.cpp:1184
+msgid "Investment Performance by Type"
+msgstr ""
+
+#: views/kreportsview.cpp:1194
+#, fuzzy
+msgid "Investment Holdings Pie"
+msgstr "Investeringslån"
+
+#: views/kreportsview.cpp:1207
+#, fuzzy
+msgid "Investment Worth Graph"
+msgstr "Netto aktiver: "
+
+#: views/kreportsview.cpp:1221
+#, fuzzy
+msgid "Investment Price Graph"
+msgstr "Netto aktiver: "
+
+#: views/kreportsview.cpp:1238
+#, fuzzy
+msgid "Investment Moving Average Price Graph"
+msgstr "Investeringslån"
+
+#: views/kreportsview.cpp:1256
+#, fuzzy
+msgid "Investment Moving Average"
+msgstr "Investeringslån"
+
+#: views/kreportsview.cpp:1272
+msgid "Investment Moving Average vs Actual"
+msgstr ""
+
+#: views/kreportsview.cpp:1287
+msgid "Taxes"
+msgstr ""
+
+#: views/kreportsview.cpp:1294
+#, fuzzy
+msgid "Tax Transactions by Category"
+msgstr "Overførsels detaljer"
+
+#: views/kreportsview.cpp:1303
+#, fuzzy
+msgid "Tax Transactions by Payee"
+msgstr "Find transaktion..."
+
+#: views/kreportsview.cpp:1312
+msgid "Tax Transactions by Category Last Fiscal Year"
+msgstr ""
+
+#: views/kreportsview.cpp:1321
+msgid "Tax Transactions by Payee Last Fiscal Year"
+msgstr ""
+
+#: views/kreportsview.cpp:1328
+msgid "Budgeting"
+msgstr ""
+
+#: views/kreportsview.cpp:1335
+msgid "Budgeted vs. Actual This Year"
+msgstr ""
+
+#: views/kreportsview.cpp:1346
+msgid "Budgeted vs. Actual This Year (YTM)"
+msgstr ""
+
+#: views/khomeview.cpp:1383 views/kreportsview.cpp:1361
+msgid "Monthly Budgeted vs. Actual"
+msgstr ""
+
+#: views/kreportsview.cpp:1371
+msgid "Yearly Budgeted vs. Actual"
+msgstr ""
+
+#: views/kreportsview.cpp:1382
+#, fuzzy
+msgid "Monthly Budget"
+msgstr "Månedlig"
+
+#: views/kreportsview.cpp:1392
+#, fuzzy
+msgid "Yearly Budget"
+msgstr "Årligt"
+
+#: views/kreportsview.cpp:1403
+msgid "Yearly Budgeted vs Actual Graph"
+msgstr ""
+
+#: views/kreportsview.cpp:1422
+#, fuzzy
+msgid "Forecast By Month"
+msgstr "Næste år"
+
+#: views/kreportsview.cpp:1431
+#, fuzzy
+msgid "Forecast Next Quarter"
+msgstr "Næste år"
+
+#: views/kreportsview.cpp:1443
+#, fuzzy
+msgid "Net Worth Forecast Graph"
+msgstr "Netto aktiver: "
+
+#: dialogs/rc.cpp:126 dialogs/rc.cpp:128 dialogs/rc.cpp:466
+#: views/kreportsview.cpp:1455
+msgid "General Information"
+msgstr "Generel information"
+
+#: views/kreportsview.cpp:1462
+#, fuzzy
+msgid "Schedule Information"
+msgstr "Slet pris-information"
+
+#: views/kreportsview.cpp:1471
+#, fuzzy
+msgid "Schedule Summary Information"
+msgstr "Slet pris-information"
+
+#: views/kreportsview.cpp:1480
+#, fuzzy
+msgid "Account Information"
+msgstr "Betalings informationer"
+
+#: views/kreportsview.cpp:1489
+#, fuzzy
+msgid "Loan Information"
+msgstr "Betalings informationer"
+
+#: dialogs/rc.cpp:323 views/kmymoneyview.cpp:148 views/kmymoneyview.cpp:150
+msgid "Institutions"
+msgstr "Institutioner"
+
+#: dialogs/knewaccountdlg.cpp:98 views/kmymoneyview.cpp:162
+#: views/kmymoneyview.cpp:164 widgets/rc.cpp:4 widgets/rc.cpp:94
+msgid "Accounts"
+msgstr "Kontoer"
+
+#: views/kmymoneyview.cpp:176
+msgid "Bills & Reminders"
+msgstr ""
+
+#: views/kmymoneyview.cpp:178
+#, fuzzy
+msgid "Scheduled transactions"
+msgstr "Slet overførsel"
+
+#: dialogs/knewaccountdlg.cpp:98 dialogs/rc.cpp:193 views/kmymoneyview.cpp:188
+#: views/kmymoneyview.cpp:190 widgets/rc.cpp:91
+msgid "Categories"
+msgstr "Kategorier"
+
+#: dialogs/kfindtransactiondlg.cpp:212 dialogs/rc.cpp:318
+#: views/kmymoneyview.cpp:199 views/kmymoneyview.cpp:201 widgets/rc.cpp:93
+msgid "Payees"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:149 views/kmymoneyview.cpp:211
+msgid "Ledgers"
+msgstr ""
+
+#: views/kmymoneyview.cpp:353
+msgid "Creating transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:367
+msgid "Modifying transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:382
+msgid "Duplicating transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:394
+#, fuzzy
+msgid "Edit the current selected transactions"
+msgstr "Slet overførsel"
+
+#: views/kmymoneyview.cpp:602
+msgid "<b>%1</b> is not a KMyMoney file."
+msgstr "<b>%1</b> er ikke en KMyMoney fil."
+
+#: views/kmymoneyview.cpp:643
+msgid "GPG is not available for decryption of file <b>%1</b>"
+msgstr ""
+
+#: views/kmymoneyview.cpp:721
+msgid ""
+"File <b>%1</b> contains the old binary format used by KMyMoney. Please use "
+"an older version of KMyMoney (0.8.x) that still supports this format to "
+"convert it to the new XML based format."
+msgstr ""
+
+#: views/kmymoneyview.cpp:723
+#, fuzzy
+msgid "File <b>%1</b> contains an unknown file format!"
+msgstr "Filen '%1' indeholder et ukendt filformat!"
+
+#: views/kmymoneyview.cpp:728
+#, fuzzy
+msgid "Cannot read from file <b>%1</b>!"
+msgstr "Kan ikke læse fra filen '%1'"
+
+#: views/kmymoneyview.cpp:732
+msgid "Cannot load file <b>%1</b>. Reason: %2"
+msgstr ""
+
+#: views/kmymoneyview.cpp:742 views/kmymoneyview.cpp:748
+#, fuzzy
+msgid "File <b>%1</b> not found!"
+msgstr "Filen '%1' blev ikke fundet!"
+
+#: views/kmymoneyview.cpp:812
+msgid "Can't open database %1\n"
+msgstr ""
+
+#: views/kmymoneyview.cpp:844
+msgid "An unrecoverable error occurred while reading the database"
+msgstr ""
+
+#: views/kmymoneyview.cpp:846 views/kmymoneyview.cpp:1208
+msgid "Database malfunction"
+msgstr ""
+
+#: views/kmymoneyview.cpp:938
+msgid "Unknown fix level in input file"
+msgstr ""
+
+#: views/kmymoneyview.cpp:984
+msgid ""
+"GPG does not seem to be installed on your system. Please make sure, that GPG "
+"can be found using the standard search path. This time, encryption is "
+"disabled."
+msgstr ""
+"GPG ser ikke ud til at være installeret på dit system. GPG kryptering "
+"aktiveres ikke!"
+
+#: views/kmymoneyview.cpp:984
+msgid "GPG not found"
+msgstr "GPG ikke fundet"
+
+#: views/kmymoneyview.cpp:991
+msgid ""
+"You have selected to encrypt your data also with the KMyMoney recover key, "
+"but the key with id</p><p><center><b>%1</b></center></p>has not been found "
+"in your keyring at this time. Please make sure to import this key into your "
+"keyring. You can find it on the <a href=\"http://kmymoney2.sourceforge.net/"
+"\">KMyMoney web-site</a>. This time your data will not be encrypted with the "
+"KMyMoney recover key."
+msgstr ""
+
+#: views/kmymoneyview.cpp:991 views/kmymoneyview.cpp:1000
+msgid "GPG-Key not found"
+msgstr "GPG-nøgle ikke fundet"
+
+#: views/kmymoneyview.cpp:1000
+msgid ""
+"You have specified to encrypt your data for the user-id</p><p><center><b>%1</"
+"b>.</center></p>Unfortunately, a valid key for this user-id was not found in "
+"your keyring. Please make sure to import a valid key for this user-id. This "
+"time, encryption is disabled."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1006
+msgid ""
+"You have configured to save your data in encrypted form using GPG. Please be "
+"aware, that this is a brand new feature which is yet untested. Make sure, "
+"you have the necessary understanding that you might loose all your data if "
+"you store it encrypted and cannot decrypt it later on! If unsure, answer "
+"<b>No</b>."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1008
+msgid "Store GPG encrypted"
+msgstr "Gem GPG krypteret"
+
+#: views/kmymoneyview.cpp:1038 views/kmymoneyview.cpp:1052
+msgid "Unable to open file '%1' for writing."
+msgstr "Kunne ikke skrive til '%1'"
+
+#: views/kmymoneyview.cpp:1065 views/kmymoneyview.cpp:1074
+msgid "Failure while writing to '%1'"
+msgstr "Fejl under skrivning til '%1'"
+
+#: views/kmymoneyview.cpp:1086 views/kmymoneyview.cpp:1181
+msgid "Tried to access a file when it's not open"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1092
+msgid ""
+"Since this version of KMyMoney only writes data files in its new format, "
+"files written with this version cannot be read by KMyMoney version 0.4. If "
+"you still want to use older versions of KMyMoney with your data files, "
+"please make sure you keep a backup-file of your finance data. If you want to "
+"abort this operation, please press Cancel now"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1122
+msgid "Malformed URL '%1'"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1192
+msgid ""
+"Database contains data which must be removed before using SaveAs.\n"
+"Do you wish to continue?"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1205
+msgid ""
+"An unrecoverable error occurred while writing to the database.\n"
+"It may well be corrupt."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1215
+msgid ""
+"Can't open or create database %1\n"
+"Retry SaveAsDatabase and click Help for further info"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1354
+msgid "Afghanistan Afghani"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1355
+msgid "Albanian Lek"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1356
+msgid "Netherland Antillian Guilder"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1357
+msgid "Algerian Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1358
+msgid "Andorran Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1359
+msgid "Andorran Peseta"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1360
+msgid "Angolan New Kwanza"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1361
+msgid "Argentine Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1362
+msgid "Aruban Florin"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1363
+msgid "Australian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1364
+msgid "Azerbaijani Manat"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1365
+msgid "Bahamian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1366
+msgid "Bahraini Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1367
+msgid "Bangladeshi Taka"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1368
+msgid "Barbados Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1369
+msgid "Belarussian Ruble"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1370
+msgid "Belize Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1371
+msgid "Bermudian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1372
+msgid "Bhutan Ngultrum"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1373
+msgid "Bolivian Boliviano"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1374
+msgid "Bosnian Convertible Mark"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1375
+msgid "Botswana Pula"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1376
+msgid "Brazilian Real"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1377
+msgid "British Pound"
+msgstr "Britiske Pund"
+
+#: views/kmymoneyview.cpp:1378
+msgid "Brunei Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1379
+msgid "Bulgarian Lev"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1380
+msgid "Burundi Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1381
+msgid "CFA Franc BEAC"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1382
+msgid "CFA Franc BCEAO"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1383
+msgid "CFP Franc Pacifique"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1384
+msgid "Cambodia Riel"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1385
+msgid "Canadian Dollar"
+msgstr "Canadiske dollar"
+
+#: views/kmymoneyview.cpp:1386
+msgid "Cape Verde Escudo"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1387
+msgid "Cayman Islands Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1388
+msgid "Chilean Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1389
+msgid "Chinese Yuan Renminbi"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1390
+msgid "Colombian Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1391
+msgid "Comoros Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1392
+msgid "Costa Rican Colon"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1393
+msgid "Croatian Kuna"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1394
+msgid "Cuban Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1395
+msgid "Czech Koruna"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1396
+msgid "Danish Krone"
+msgstr "Danske Kroner"
+
+#: views/kmymoneyview.cpp:1397
+msgid "Djibouti Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1398
+msgid "Dominican Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1399
+msgid "East Caribbean Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1400
+msgid "Egyptian Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1401
+msgid "El Salvador Colon"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1402
+msgid "Eritrean Nakfa"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1403
+msgid "Estonian Kroon"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1404
+msgid "Ethiopian Birr"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1405
+msgid "Euro"
+msgstr "Euro"
+
+#: views/kmymoneyview.cpp:1406
+msgid "Falkland Islands Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1407
+msgid "Fiji Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1408
+msgid "Gambian Dalasi"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1409
+msgid "Georgian Lari"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1410
+msgid "Ghanaian Cedi"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1411
+msgid "Gibraltar Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1412
+msgid "Guatemalan Quetzal"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1413
+msgid "Guinea-Bissau Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1414
+msgid "Guyanan Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1415
+msgid "Haitian Gourde"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1416
+msgid "Honduran Lempira"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1417
+msgid "Hong Kong Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1418
+msgid "Hungarian Forint"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1419
+msgid "Iceland Krona"
+msgstr "Islandske Kroner"
+
+#: views/kmymoneyview.cpp:1420
+msgid "Indian Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1421
+msgid "Indonesian Rupiah"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1422
+msgid "Iranian Rial"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1423
+msgid "Iraqi Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1424
+msgid "Israeli New Shekel"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1425
+msgid "Jamaican Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1426
+msgid "Japanese Yen"
+msgstr "Japanske Yen"
+
+#: views/kmymoneyview.cpp:1427
+msgid "Jordanian Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1428
+msgid "Kazakhstan Tenge"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1429
+msgid "Kenyan Shilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1430
+msgid "Kuwaiti Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1431
+msgid "Kyrgyzstan Som"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1432
+msgid "Laos Kip"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1433
+msgid "Latvian Lats"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1434
+msgid "Lebanese Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1435
+msgid "Lesotho Loti"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1436
+msgid "Liberian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1437
+msgid "Libyan Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1438
+msgid "Lithuanian Litas"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1439
+msgid "Macau Pataca"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1440
+msgid "Macedonian Denar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1441
+msgid "Malagasy Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1442
+msgid "Malawi Kwacha"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1443
+msgid "Malaysian Ringgit"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1444
+msgid "Maldive Rufiyaa"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1445
+msgid "Mali Republic Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1446
+msgid "Mauritanian Ouguiya"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1447
+msgid "Mauritius Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1448
+msgid "Mexican Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1449
+msgid "Moldavian Leu"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1450
+msgid "Mongolian Tugrik"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1451
+msgid "Moroccan Dirham"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1452
+msgid "Mozambique Metical"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1453
+msgid "Myanmar Kyat"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1454
+msgid "Namibian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1455
+msgid "Nepalese Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1456
+msgid "New Zealand Dollar"
+msgstr "New Zealand Dollar"
+
+#: views/kmymoneyview.cpp:1457
+msgid "Nicaraguan Cordoba Oro"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1458
+msgid "Nigerian Naira"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1459
+msgid "North Korean Won"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1460
+msgid "Norwegian Kroner"
+msgstr "Norske Kroner"
+
+#: views/kmymoneyview.cpp:1461
+msgid "Omani Rial"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1462
+msgid "Pakistan Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1463
+msgid "Panamanian Balboa"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1464
+msgid "Papua New Guinea Kina"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1465
+msgid "Paraguay Guarani"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1466
+msgid "Peruvian Nuevo Sol"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1467
+msgid "Philippine Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1468
+msgid "Polish Zloty"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1469
+msgid "Qatari Rial"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1470
+msgid "Romanian Leu (new)"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1471
+#, fuzzy
+msgid "Russian Ruble"
+msgstr "Russiske rubler"
+
+#: views/kmymoneyview.cpp:1472
+msgid "Rwanda Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1473
+msgid "Samoan Tala"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1474
+msgid "Sao Tome and Principe Dobra"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1475
+msgid "Saudi Riyal"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1476
+msgid "Seychelles Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1477
+msgid "Sierra Leone Leone"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1478
+msgid "Singapore Dollar"
+msgstr "Singapore Dollar"
+
+#: views/kmymoneyview.cpp:1481
+msgid "Solomon Islands Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1482
+msgid "Somali Shilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1483
+msgid "South African Rand"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1484
+msgid "South Korean Won"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1485
+msgid "Sri Lanka Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1486
+msgid "St. Helena Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1487
+msgid "Sudanese Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1488
+msgid "Suriname Guilder"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1489
+msgid "Swaziland Lilangeni"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1490
+msgid "Swedish Krona"
+msgstr "Svenske kroner"
+
+#: views/kmymoneyview.cpp:1491
+msgid "Swiss Franc"
+msgstr "Sweiziske Franc"
+
+#: views/kmymoneyview.cpp:1492
+msgid "Syrian Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1493
+msgid "Taiwan Dollar"
+msgstr "Taiwan Dollar"
+
+#: views/kmymoneyview.cpp:1494
+msgid "Tajikistan Somani"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1495
+msgid "Tanzanian Shilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1496
+msgid "Thai Baht"
+msgstr "Thai Baht"
+
+#: views/kmymoneyview.cpp:1497
+msgid "Tongan Pa'anga"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1498
+msgid "Trinidad and Tobago Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1499
+msgid "Tunisian Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1500
+msgid "Turkish Lira (new)"
+msgstr "Tyrkiske Lire (Ny)"
+
+#: views/kmymoneyview.cpp:1501
+msgid "Turkmenistan Manat"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1502
+msgid "US Dollar"
+msgstr "US Dollar"
+
+#: views/kmymoneyview.cpp:1503
+msgid "Uganda Shilling"
+msgstr "Uganda Shilling"
+
+#: views/kmymoneyview.cpp:1504
+msgid "Ukraine Hryvnia"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1505
+msgid "United Arab Emirates Dirham"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1506
+msgid "Uruguayan Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1507
+msgid "Uzbekistani Sum"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1508
+msgid "Vanuatu Vatu"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1509
+msgid "Venezuelan Bolivar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1510
+msgid "Vietnamese Dong"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1511
+msgid "Yugoslav Dinar"
+msgstr "Jugoslavisk Dinar"
+
+#: views/kmymoneyview.cpp:1512
+msgid "Zambian Kwacha"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1513
+msgid "Zimbabwe Dollar"
+msgstr "Zimbabwe Dollar"
+
+#: views/kmymoneyview.cpp:1515
+msgid "Gold"
+msgstr "Guld"
+
+#: views/kmymoneyview.cpp:1516
+msgid "Palladium"
+msgstr "Palladium"
+
+#: views/kmymoneyview.cpp:1517
+msgid "Platinum"
+msgstr "Platinum"
+
+#: views/kmymoneyview.cpp:1518
+msgid "Silver"
+msgstr "Sølv"
+
+#: views/kmymoneyview.cpp:1551
+#, fuzzy
+msgid "Austrian Schilling"
+msgstr "Uganda Shilling"
+
+#: views/kmymoneyview.cpp:1552
+msgid "German Mark"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1553
+msgid "French Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1554
+msgid "Italian Lira"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1555
+msgid "Spanish Peseta"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1556
+msgid "Dutch Guilder"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1557
+msgid "Belgian Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1558
+msgid "Luxembourg Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1559
+msgid "Portuguese Escudo"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1560
+#, fuzzy
+msgid "Irish Pound"
+msgstr "Britiske Pund"
+
+#: views/kmymoneyview.cpp:1561
+msgid "Finnish Markka"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1562
+msgid "Greek Drachma"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1564
+msgid "Romanian Leu"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1566
+#, fuzzy
+msgid "Russian Ruble (old)"
+msgstr "Russiske rubler"
+
+#: views/kmymoneyview.cpp:1568
+msgid "Slovenian Tolar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1571
+msgid "Turkish Lira"
+msgstr "Tyrkiske Lire"
+
+#: views/kmymoneyview.cpp:1574
+msgid "Maltese Lira"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1575
+msgid "Cyprus Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1578
+msgid "Slovak Koruna"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1888
+msgid ""
+"The account \"%1\" was previously created as loan account but some "
+"information is missing. The new loan wizard will be started to collect all "
+"relevant information. Please use a KMyMoney version >= 0.8.7 and < 0.9 to "
+"correct the problem."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1892
+msgid "Account problem"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1941
+msgid "Unable to add schedule: "
+msgstr ""
+
+#: views/kmymoneyview.cpp:1970
+msgid "Fix transactions"
+msgstr ""
+
+#: views/kaccountsview.cpp:522 views/kinstitutionsview.cpp:300
+msgid "Net Worth: "
+msgstr "Netto aktiver: "
+
+#: dialogs/rc.cpp:108 dialogs/rc.cpp:163 dialogs/rc.cpp:250 dialogs/rc.cpp:755
+#: dialogs/rc.cpp:830 views/kinvestmentview.cpp:77 widgets/register.cpp:572
+msgid "Quantity"
+msgstr "Antal"
+
+#: views/kscheduledlistitem.cpp:137
+msgid "Finished"
+msgstr "Færdig"
+
+#: views/kbudgetview.cpp:109
+#, fuzzy
+msgid "Creates a new budget"
+msgstr "Opret en ny profil"
+
+#: views/kbudgetview.cpp:110
+#, fuzzy
+msgid "Use this to create a new empty budget."
+msgstr "Tryk her for at oprette en ny konto til aktiver"
+
+#: views/kbudgetview.cpp:116
+#, fuzzy
+msgid "Rename the current selected budget"
+msgstr "Slet overførsel"
+
+#: views/kbudgetview.cpp:117
+msgid "Use this to start renaming the selected budget."
+msgstr ""
+
+#: views/kbudgetview.cpp:123
+#, fuzzy
+msgid "Delete the current selected budget"
+msgstr "Slet overførsel"
+
+#: views/kbudgetview.cpp:124
+#, fuzzy
+msgid "Use this to delete the selected budget."
+msgstr "Vil du virkelig slette kontoen '%1'"
+
+#: views/kbudgetview.cpp:130
+#, fuzzy
+msgid "Accepts the entered values and stores the budget"
+msgstr "Accepterer værdien og gemmer dem"
+
+#: views/kbudgetview.cpp:131
+#, fuzzy
+msgid "Use this to store the modified data."
+msgstr "Brug denne til at lukke dialogboksen"
+
+#: views/kbudgetview.cpp:137
+msgid "Revert budget to last saved state"
+msgstr ""
+
+#: views/kbudgetview.cpp:138
+#, fuzzy
+msgid "Use this to discard the modified data."
+msgstr "Brug denne til at lukke dialogboksen"
+
+#: views/kbudgetview.cpp:489
+#, fuzzy
+msgid "Do you want to save the changes for <b>%1</b>"
+msgstr "Vil du annullere ændringerne i '%1'"
+
+#: views/kbudgetview.cpp:610
+msgid ""
+"A budget with the name '%1' already exists. It is not advisable to have "
+"multiple budgets with the same identification name. Are you sure you would "
+"like to rename the budget?"
+msgstr ""
+
+#: views/kbudgetview.cpp:635 views/kbudgetview.cpp:750
+#, fuzzy
+msgid "Unable to modify budget"
+msgstr "Kunne ikke redigere modtager"
+
+#: views/kbudgetview.cpp:736
+#, fuzzy
+msgid "Unable to reset budget"
+msgstr "Kunne ikke redigere modtager"
+
+#: views/rc.cpp:1
+msgid "List"
+msgstr ""
+
+#: views/rc.cpp:2 views/rc.cpp:20
+msgid "Collapse all accounts in the list"
+msgstr ""
+
+#: views/rc.cpp:3 views/rc.cpp:21
+msgid "Expand all accounts in the list"
+msgstr ""
+
+#: views/rc.cpp:4
+msgid "Icons"
+msgstr "Ikoner"
+
+#: views/rc.cpp:5 views/rc.cpp:22
+msgid "Note: Unused categories are not shown as selected by settings."
+msgstr ""
+
+#: views/rc.cpp:6 views/rc.cpp:23 views/rc.cpp:54
+msgid "Total Profits:"
+msgstr "Total fortjeneste:"
+
+#: views/rc.cpp:7
+msgid "Your budgets"
+msgstr ""
+
+#: dialogs/rc.cpp:340 dialogs/rc.cpp:841 dialogs/settings/rc.cpp:124
+#: views/rc.cpp:8 widgets/rc.cpp:48 widgets/rc.cpp:150
+msgid "New"
+msgstr ""
+
+#: views/rc.cpp:9
+#, fuzzy
+msgid "Ren"
+msgstr "&Nulstil"
+
+#: views/rc.cpp:10
+#, fuzzy
+msgid "Del"
+msgstr "Detajler"
+
+#: views/rc.cpp:11
+#, fuzzy
+msgid "Res"
+msgstr "&Nulstil"
+
+#: views/rc.cpp:12
+msgid "Upd"
+msgstr ""
+
+#: views/rc.cpp:15
+#, fuzzy
+msgid "Hide unused budget categories"
+msgstr "Skjulte kategorier"
+
+#: views/rc.cpp:16
+#, fuzzy
+msgid "Assignments"
+msgstr "Aktiver"
+
+#: views/rc.cpp:19
+#, fuzzy
+msgid "Include subaccounts"
+msgstr "Er en under-konto"
+
+#: dialogs/settings/rc.cpp:23 views/rc.cpp:24
+#, fuzzy
+msgid "Forecast Settings"
+msgstr "Nulstil alle indstillinger"
+
+#: views/rc.cpp:25
+#, fuzzy
+msgid "Days to Forecast:"
+msgstr "Total beløb"
+
+#: views/rc.cpp:26
+msgid "Days of Accounts Cycle:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:25 views/rc.cpp:27
+msgid "Day of Month to start Forecast:"
+msgstr ""
+
+#: views/rc.cpp:28
+msgid "Historic Cycles:"
+msgstr ""
+
+#: views/rc.cpp:29
+#, fuzzy
+msgid "Chart Detail:"
+msgstr "Detajler"
+
+#: views/rc.cpp:30 widgets/kmymoneyaccountselector.cpp:64 widgets/rc.cpp:65
+msgid "All"
+msgstr "Alle"
+
+#: views/rc.cpp:31 widgets/rc.cpp:66
+msgid "Top-Level"
+msgstr ""
+
+#: views/rc.cpp:32 widgets/rc.cpp:67
+msgid "Groups"
+msgstr ""
+
+#: views/rc.cpp:33 widgets/rc.cpp:68
+#, fuzzy
+msgid "Totals"
+msgstr "Detajler"
+
+#: views/rc.cpp:34
+#, fuzzy
+msgid "<p>Choose what level of detail to show on the chart.</p>"
+msgstr "<p>Vælg et navn til denne rapport</p>"
+
+#: views/rc.cpp:35
+msgid "Current Forecast Method:"
+msgstr ""
+
+#: views/rc.cpp:36
+#, fuzzy
+msgid "method"
+msgstr "Metode:"
+
+#: dialogs/settings/rc.cpp:32 views/rc.cpp:37
+msgid "History Forecast Method"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:33 views/rc.cpp:38
+msgid "Simple Moving Average"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:34 views/rc.cpp:39
+msgid "Weighted Moving Average"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:35 views/rc.cpp:40
+msgid "Linear Regression"
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:315 dialogs/rc.cpp:628 dialogs/rc.cpp:647
+#: views/rc.cpp:43
+msgid "Summary"
+msgstr "Opsamling"
+
+#: views/rc.cpp:45
+msgid "0 days"
+msgstr ""
+
+#: views/rc.cpp:46
+msgid "30 days"
+msgstr ""
+
+#: views/rc.cpp:47
+msgid "60 days"
+msgstr ""
+
+#: views/rc.cpp:48
+msgid "90 days"
+msgstr ""
+
+#: views/rc.cpp:49
+msgid "New Item"
+msgstr ""
+
+#: views/rc.cpp:50 widgets/rc.cpp:64
+#, fuzzy
+msgid "Detail"
+msgstr "Detajler"
+
+#: views/rc.cpp:51
+#, fuzzy
+msgid "Advanced"
+msgstr "&Avanceret"
+
+#: views/rc.cpp:52
+#, fuzzy
+msgid "Budget Forecast"
+msgstr "Næste år"
+
+#: views/rc.cpp:55
+msgid "Investment Summary"
+msgstr ""
+
+#: views/rc.cpp:56
+msgid "Select Account:"
+msgstr "Vælg konto:"
+
+#: views/rc.cpp:57
+msgid ""
+"Summary of the equities contained in this account, showing your holdings and "
+"their most recent price."
+msgstr ""
+
+#: views/rc.cpp:60 widgets/register.cpp:564
+msgid "No."
+msgstr "Nr."
+
+#: views/rc.cpp:64
+msgid "Balance: "
+msgstr "Balance:"
+
+#: views/rc.cpp:65
+#, fuzzy
+msgid "Address"
+msgstr "Adresse:"
+
+#: views/rc.cpp:66
+msgid "Payee Information"
+msgstr ""
+
+#: views/rc.cpp:67
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#: dialogs/rc.cpp:393 views/rc.cpp:69
+msgid "Telephone/Fax:"
+msgstr "Tlf/Fax:"
+
+#: views/rc.cpp:70
+#, fuzzy
+msgid "Notes"
+msgstr "Noter:"
+
+#: views/rc.cpp:71
+msgid "Address:"
+msgstr "Adresse:"
+
+#: views/rc.cpp:72
+#, fuzzy
+msgid "Matching"
+msgstr "Gør ingenting"
+
+#: views/rc.cpp:73
+#, fuzzy
+msgid "Transaction Matching"
+msgstr "Overførsels detaljer"
+
+#: views/rc.cpp:74
+#, fuzzy
+msgid "No matching"
+msgstr "Gør ingenting"
+
+#: views/rc.cpp:75
+msgid "Match on Payee name"
+msgstr ""
+
+#: views/rc.cpp:76
+msgid "Match on a name listed below"
+msgstr ""
+
+#: views/rc.cpp:77
+#, fuzzy
+msgid "List of matching names"
+msgstr "Gør ingenting"
+
+#: views/rc.cpp:78
+msgid ""
+"This list contains the names that will match this payee if a transaction is "
+"imported from an external source. Keep in mind, that you can specify regular "
+"expressions here."
+msgstr ""
+
+#: views/rc.cpp:79
+msgid "Ignore Case"
+msgstr ""
+
+#: views/rc.cpp:80
+#, fuzzy
+msgid "Default Account"
+msgstr "Vælg konto:"
+
+#: views/rc.cpp:81
+msgid ""
+"Use the default account for\n"
+"new transactions with this payee"
+msgstr ""
+
+#: views/rc.cpp:82
+#, fuzzy
+msgid "Default category:"
+msgstr "Opret katogori"
+
+#: views/rc.cpp:83
+#, fuzzy
+msgid "Suggest a category"
+msgstr "Opret katogori"
+
+#: views/rc.cpp:85
+#, fuzzy
+msgid "New Scheduled transaction..."
+msgstr "Slet overførsel"
+
+#: views/rc.cpp:86
+msgid "Filter Accounts"
+msgstr "Filtrér konti"
+
+#: views/rc.cpp:87
+msgid "List View"
+msgstr ""
+
+#: views/rc.cpp:88
+msgid "Calendar View"
+msgstr ""
+
+#: views/kinstitutionsview.cpp:43
+#, fuzzy
+msgid "Institution/Account"
+msgstr "Institution"
+
+#: views/kinstitutionsview.cpp:157
+msgid "Accounts with no institution assigned"
+msgstr "Konti uden en tilknyttet institution"
+
+#: views/kscheduledview.cpp:70
+msgid "Type/Name"
+msgstr ""
+
+#: views/kscheduledview.cpp:75
+msgid "Frequency"
+msgstr ""
+
+#: views/kscheduledview.cpp:157
+msgid "Unable to load accounts: "
+msgstr ""
+
+#: views/kscheduledview.cpp:171 views/kscheduledview.cpp:429
+#: views/kscheduledview.cpp:445 widgets/kmymoneyscheduledcalendar.cpp:46
+msgid "Bills"
+msgstr ""
+
+#: dialogs/rc.cpp:232 dialogs/rc.cpp:706 views/kscheduledview.cpp:172
+#: views/kscheduledview.cpp:431 views/kscheduledview.cpp:447
+#: widgets/kmymoneyscheduledcalendar.cpp:47
+#, fuzzy
+msgid "Deposits"
+msgstr "Indsættelser"
+
+#: views/kscheduledview.cpp:173 views/kscheduledview.cpp:435
+#: views/kscheduledview.cpp:451
+msgid "Loans"
+msgstr ""
+
+#: views/kscheduledview.cpp:357
+#, fuzzy
+msgid "Error activating context menu"
+msgstr "Fejl under import af opgørelse."
+
+#: views/kscheduledview.cpp:385
+msgid "Error executing item"
+msgstr ""
+
+#: views/kscheduledview.cpp:419
+msgid "Unable to filter account"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:508
+#, fuzzy
+msgid "Statement Details"
+msgstr "Investeringsdetaljer"
+
+#: views/kgloballedgerview.cpp:512
+msgid "Statement Deposit Details"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:513
+#, fuzzy
+msgid "Statement Payment Details"
+msgstr "Investeringsdetaljer"
+
+#: views/kgloballedgerview.cpp:642
+msgid "%1 deposits (%3), %2 payments (%4)"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:649
+#, fuzzy
+msgid "%1 payments (%2)"
+msgstr "Total betaling:"
+
+#: views/kgloballedgerview.cpp:653
+msgid "%1 deposits (%2)"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:721
+#, c-format
+msgid "Statement: %1"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:722 views/kgloballedgerview.cpp:736
+#, c-format
+msgid "Cleared: %1"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:723
+#, c-format
+msgid "Difference: %1"
+msgstr "Difference: %1"
+
+#: views/kgloballedgerview.cpp:730
+#, fuzzy, c-format
+msgid "Last reconciled: %1"
+msgstr "Dato fundet: %1"
+
+#: views/kgloballedgerview.cpp:732
+msgid "Never reconciled"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:772
+#, fuzzy
+msgid "Investment value: %1%2"
+msgstr "Investeringer"
+
+#: views/kgloballedgerview.cpp:1040
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to continue to edit the transactions anyway?"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1051
+msgid ""
+"At least one split of the selected transactions has been frozen. Editing the "
+"transactions is therefore prohibited."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1053
+msgid "Transaction already frozen"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1058
+msgid ""
+"At least one split of the selected transaction references an account that "
+"has been closed. Editing the transactions is therefore prohibited."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1060
+#, fuzzy
+msgid "Account closed"
+msgstr "Kontoer"
+
+#: views/kgloballedgerview.cpp:1349
+#, fuzzy
+msgid "Cannot create transactions when no account is selected."
+msgstr "Kan ikke redigere konto/kategori:"
+
+#: views/kgloballedgerview.cpp:1354
+msgid "Cannot create transactions in the context of a category."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1358
+#, fuzzy
+msgid "Cannot create transactions in a closed account."
+msgstr "Kan ikke redigere konto/kategori:"
+
+#: views/kgloballedgerview.cpp:1370
+msgid "Cannot process transaction with focus if it is not selected."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1400
+msgid "Cannot edit transactions with frozen splits."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1411
+#, fuzzy
+msgid "Cannot edit transactions in the context of a category."
+msgstr "Kan ikke redigere konto/kategori:"
+
+#: views/kgloballedgerview.cpp:1430
+msgid ""
+"Cannot edit investment transactions and non-investment transactions together."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1438
+msgid "Cannot edit multiple split transactions at once."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1448
+msgid "Cannot edit investment transactions in the context of this account."
+msgstr ""
+
+#: views/kforecastview.cpp:164
+#, fuzzy
+msgid "Scheduled"
+msgstr "Vælg %1"
+
+#: views/kforecastview.cpp:169
+msgid "History"
+msgstr ""
+
+#: views/kforecastview.cpp:296
+msgid "The balance of %2 is below the minimum balance %3 today."
+msgstr ""
+
+#: views/kforecastview.cpp:301 views/khomeview.cpp:1043
+msgid "The balance of %1 will drop below the minimum balance %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:318 views/khomeview.cpp:1059
+msgid "The balance of %1 is below %2 today."
+msgstr ""
+
+#: views/kforecastview.cpp:323 views/khomeview.cpp:1064
+msgid "The balance of %1 is above %2 today."
+msgstr ""
+
+#: views/kforecastview.cpp:330 views/khomeview.cpp:1070
+msgid "The balance of %1 will drop below %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:335 views/khomeview.cpp:1075
+msgid "The balance of %1 will raise above %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:348
+msgid "The account %1 is decreasing %2 per cycle."
+msgstr ""
+
+#: views/kforecastview.cpp:404 widgets/kmymoneyaccounttreeforecast.cpp:114
+#, c-format
+msgid "Min Bal %1"
+msgstr ""
+
+#: views/kforecastview.cpp:406 widgets/kmymoneyaccounttreeforecast.cpp:116
+#, fuzzy, c-format
+msgid "Min Date %1"
+msgstr "Loader skabelon %1"
+
+#: views/kforecastview.cpp:409 widgets/kmymoneyaccounttreeforecast.cpp:119
+#, c-format
+msgid "Max Bal %1"
+msgstr ""
+
+#: views/kforecastview.cpp:411 widgets/kmymoneyaccounttreeforecast.cpp:121
+#, c-format
+msgid "Max Date %1"
+msgstr ""
+
+#: views/kforecastview.cpp:413 widgets/kmymoneyaccounttreeforecast.cpp:123
+msgid "Average"
+msgstr ""
+
+#: views/kforecastview.cpp:649 views/khomeview.cpp:268 views/khomeview.cpp:275
+msgid "Networth Forecast"
+msgstr ""
+
+#: views/khomeview.cpp:203
+msgid "Your Financial Summary"
+msgstr ""
+
+#: views/khomeview.cpp:218
+msgid "Preferred Accounts"
+msgstr ""
+
+#: views/khomeview.cpp:225 views/khomeview.cpp:227
+msgid "Payment Accounts"
+msgstr ""
+
+#: views/khomeview.cpp:256
+msgid "Show KMyMoney welcome page"
+msgstr ""
+
+#: views/khomeview.cpp:409
+msgid "Overdue payments"
+msgstr ""
+
+#: views/khomeview.cpp:424 views/khomeview.cpp:497 views/khomeview.cpp:531
+#, fuzzy
+msgid "Balance after"
+msgstr "Balance:"
+
+#: views/khomeview.cpp:482
+#, fuzzy
+msgid "Today's payments"
+msgstr "Total betaling:"
+
+#: views/khomeview.cpp:516
+msgid "Future payments"
+msgstr ""
+
+#: views/khomeview.cpp:585
+#, fuzzy
+msgid "Less..."
+msgstr "Ny..."
+
+#: views/khomeview.cpp:587
+#, fuzzy
+msgid "More..."
+msgstr "Mere"
+
+#: views/khomeview.cpp:622
+#, fuzzy
+msgid "Enter schedule"
+msgstr "Vælg %1"
+
+#: views/khomeview.cpp:624
+#, fuzzy
+msgid "Skip schedule"
+msgstr "Åbner fil..."
+
+#: views/khomeview.cpp:627
+#, fuzzy
+msgid "Edit schedule"
+msgstr "Vælg %1"
+
+#: views/khomeview.cpp:631
+#, fuzzy
+msgid " (%1 payments)"
+msgstr "Total betaling:"
+
+#: views/khomeview.cpp:771
+#, fuzzy
+msgid "To Minimum Balance / Maximum Credit"
+msgstr "Slut-balance:"
+
+#: views/khomeview.cpp:964
+#, fuzzy
+msgid "%1 Day Forecast"
+msgstr "Total beløb"
+
+#: views/khomeview.cpp:973 widgets/kmymoneyaccounttreeforecast.cpp:67
+msgid "%1 days"
+msgstr ""
+
+#: views/khomeview.cpp:1039
+msgid "The balance of %1 is below the minimum balance %2 today."
+msgstr ""
+
+#: views/khomeview.cpp:1175
+msgid ""
+"Before KMyMoney can give you detailed information about your financial "
+"status, you need to create at least one account. Until then, KMyMoney shows "
+"the welcome page instead."
+msgstr ""
+
+#: views/khomeview.cpp:1258
+#, fuzzy
+msgid "Assets and Liabilities Summary"
+msgstr "Aktiver & Passiver"
+
+#: views/khomeview.cpp:1262
+#, fuzzy
+msgid "Asset Accounts"
+msgstr "Konto for aktiver"
+
+#: views/khomeview.cpp:1270
+#, fuzzy
+msgid "Liability Accounts"
+msgstr "Passiver"
+
+#: views/khomeview.cpp:1348
+#, fuzzy
+msgid "Total Assets"
+msgstr "Detajler"
+
+#: views/khomeview.cpp:1354
+#, fuzzy
+msgid "Total Liabilities"
+msgstr "Aktiver & Passiver"
+
+#: views/khomeview.cpp:1399
+#, fuzzy
+msgid "Current Month Summary"
+msgstr "Nuværende beløb"
+
+#: views/khomeview.cpp:1403 views/khomeview.cpp:1440
+#, fuzzy
+msgid "Budgeted"
+msgstr "Næste år"
+
+#: views/khomeview.cpp:1433
+#, fuzzy
+msgid "Budget Overruns"
+msgstr "Næste år"
+
+#: views/khomeview.cpp:1502
+msgid "No Budget Categories have been overrun"
+msgstr ""
+
+#: views/khomeview.cpp:1801
+msgid "Cash Flow Summary"
+msgstr ""
+
+#: views/khomeview.cpp:1808
+#, fuzzy
+msgid "Income and Expenses of Current Month"
+msgstr "Indtægter og udgifter"
+
+#: views/khomeview.cpp:1816
+#, fuzzy
+msgid "Scheduled Income"
+msgstr "Vælg %1"
+
+#: views/khomeview.cpp:1819
+#, fuzzy
+msgid "Expenses"
+msgstr "Udgifter"
+
+#: views/khomeview.cpp:1822
+#, fuzzy
+msgid "Scheduled Expenses"
+msgstr "Skema detaljer"
+
+#: views/khomeview.cpp:1850
+#, fuzzy
+msgid "Liquid Assets and Liabilities"
+msgstr "Aktiver & Passiver"
+
+#: views/khomeview.cpp:1855
+#, fuzzy
+msgid "Liquid Assets"
+msgstr "Aktiver"
+
+#: views/khomeview.cpp:1858
+#, fuzzy
+msgid "Transfers to Liquid Liabilities"
+msgstr "Aktiver & Passiver"
+
+#: views/khomeview.cpp:1861
+#, fuzzy
+msgid "Liquid Liabilities"
+msgstr "Passiver"
+
+#: views/khomeview.cpp:1864
+#, fuzzy
+msgid "Other Transfers"
+msgstr "%1 Overførsler"
+
+#: views/khomeview.cpp:1908
+msgid "Cash Flow Status"
+msgstr ""
+
+#: views/khomeview.cpp:1914
+msgid "Expected Liquid Assets"
+msgstr ""
+
+#: views/khomeview.cpp:1917
+#, fuzzy
+msgid "Expected Liquid Liabilities"
+msgstr "Aktiver & Passiver"
+
+#: views/khomeview.cpp:1920
+#, fuzzy
+msgid "Expected Profit/Loss"
+msgstr "Total fortjeneste:"
+
+#: plugins/ofximport/ofximporterplugin.cpp:64
+#, fuzzy
+msgid "OFX..."
+msgstr "QIF..."
+
+#: plugins/ofximport/ofximporterplugin.cpp:69
+#, fuzzy
+msgid "OFX import file selection"
+msgstr "Sti til output-filteret"
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid ""
+"Unable to import %1 using the OFX importer plugin. This file is not the "
+"correct format."
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid "Incorrect format"
+msgstr "Ukorrekt format"
+
+#: plugins/ofximport/ofximporterplugin.cpp:122
+#, fuzzy
+msgid "Unable to parse file"
+msgstr "Kunne ikke tilføje modtager"
+
+#: plugins/ofximport/ofximporterplugin.cpp:576
+#, fuzzy
+msgid "Online settings"
+msgstr "Nulstil alle indstillinger"
+
+#: plugins/ofximport/ofximporterplugin.cpp:635
+#, c-format
+msgid "Error connecting to bank: %1"
+msgstr "Fejl under forbindelse til bank: %1"
+
+#: plugins/ofximport/ofximporterplugin.cpp:646
+msgid ""
+"Unable to import %1 using the OFX importer plugin. The plugin returned the "
+"following error:<p>%2"
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Importing process terminated unexpectedly."
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Failed to import all statements."
+msgstr ""
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "The HTTP request failed."
+msgstr ""
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+#, fuzzy
+msgid "Failed"
+msgstr "Felt"
+
+#: plugins/ofximport/ofxpartner.cpp:410
+#, fuzzy
+msgid "Cannot open file %1 for writing"
+msgstr "Kunne ikke skrive til %1"
+
+#: plugins/ofximport/ofxpartner.cpp:414
+#, fuzzy
+msgid "OFX setup error"
+msgstr "Filtypefejl"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+#, fuzzy
+msgid "Loading banklist"
+msgstr "Flytter konto"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid ""
+"Getting list of banks from http://moneycentral.msn.com/\n"
+"This may take some time depending on the available bandwidth."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:155
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:199
+msgid "Supports online statements<br>"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:157
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:201
+#, fuzzy
+msgid "Supports investments<br>"
+msgstr "Investeringstype:"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:159
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:203
+msgid "Supports bill payment (but not supported by KMyMoney yet)<br>"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:163
+msgid "Does not support online banking</p>"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:173
+msgid "Please choose a bank."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:179
+msgid "Please fill all fields with values."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:271
+msgid "No suitable accounts were found at this bank."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:283
+#, fuzzy
+msgid "Please choose an account"
+msgstr "Vælg venligst en over-konto"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:386
+msgid "Server message: %1\n"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+msgid "Your bank returned warnings when signing on"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+#, c-format
+msgid "WARNING %1"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, fuzzy
+msgid "Error signing onto your bank"
+msgstr "Fejl under forbindelse til bank: %1"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, c-format
+msgid "ERROR %1"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingstatus.cpp:59
+msgid "Enabled & configured"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:1
+msgid "OFX Direct Connect"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:2
+msgid "Contacting bank..."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:4
+msgid "Online Banking Account Setup"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:5
+msgid "Select Financial Institution"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:6
+msgid "Please select your financial institution from the list below..."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:7
+msgid "Automatic"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:8
+#, fuzzy
+msgid "Financial Institution"
+msgstr "Institution"
+
+#: plugins/ofximport/dialogs/rc.cpp:9
+#, fuzzy
+msgid "Manual"
+msgstr "Manuel indsættelse"
+
+#: plugins/ofximport/dialogs/rc.cpp:10
+msgid "Org"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:11
+#, fuzzy
+msgid "FID"
+msgstr "ID"
+
+#: dialogs/settings/rc.cpp:120 plugins/ofximport/dialogs/rc.cpp:12
+#: widgets/rc.cpp:46
+msgid "URL"
+msgstr "Link"
+
+#: plugins/ofximport/dialogs/rc.cpp:13
+#, fuzzy
+msgid "Enter Login Details"
+msgstr "Overførsels detaljer"
+
+#: plugins/ofximport/dialogs/rc.cpp:14
+msgid ""
+"Please enter the username and password you use to log into this bank for "
+"online banking. Please note that many banks require a separate signup, and "
+"assign a separate PIN or password just for online banking from home."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:15
+#, fuzzy
+msgid "Connection Details"
+msgstr "Overførsels detaljer"
+
+#: plugins/ofximport/dialogs/rc.cpp:16
+msgid "Username"
+msgstr "Brugernavn"
+
+#: plugins/ofximport/dialogs/rc.cpp:17 plugins/ofximport/dialogs/rc.cpp:36
+msgid "Header Version"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:18 plugins/ofximport/dialogs/rc.cpp:37
+#, fuzzy
+msgid "Identify as"
+msgstr "Identifikation"
+
+#: dialogs/rc.cpp:742 plugins/ofximport/dialogs/rc.cpp:19
+msgid "Password"
+msgstr "Kodeord"
+
+#: plugins/ofximport/dialogs/rc.cpp:20
+#, fuzzy
+msgid "Select Account"
+msgstr "Vælg konto:"
+
+#: plugins/ofximport/dialogs/rc.cpp:21
+msgid ""
+"Please select the account from your financial institution from the list "
+"below which matches this account."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:24
+msgid "Bank"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:25
+#, fuzzy
+msgid "Branch"
+msgstr "Balance"
+
+#: plugins/ofximport/dialogs/rc.cpp:26
+msgid "WizardPage"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:27
+msgid ""
+"Congratulations! You have successfully set up your bank for online banking "
+"via OFX."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:28
+msgid "Account Details"
+msgstr "Konto detaljer"
+
+#: plugins/ofximport/dialogs/rc.cpp:29 plugins/ofximport/dialogs/rc.cpp:31
+msgid "&lt;Not configured&gt;"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:30
+msgid "BANK/BROKER:"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:32
+#, fuzzy
+msgid "Unavailable"
+msgstr "Værdi"
+
+#: plugins/ofximport/dialogs/rc.cpp:33
+msgid "ACCOUNT:"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:34
+msgid "STATUS:"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:35
+#, fuzzy
+msgid "OFX Details"
+msgstr "Detajler"
+
+#: plugins/ofximport/dialogs/rc.cpp:38
+#, fuzzy
+msgid "Start date of import"
+msgstr "Kontoopgørelsens primodato"
+
+#: plugins/ofximport/dialogs/rc.cpp:39
+#, fuzzy
+msgid "To&day minus"
+msgstr "Total betaling:"
+
+#: plugins/ofximport/dialogs/rc.cpp:40
+msgid "days"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:41
+#, fuzzy
+msgid "Last &update"
+msgstr "Start operation"
+
+#: plugins/ofximport/dialogs/rc.cpp:42
+msgid "Pi&ck date"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:43
+msgid "Name is derived from"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:44
+msgid "P&AYEEID"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:45
+#, fuzzy
+msgid "&NAME"
+msgstr "AMEX"
+
+#: plugins/ofximport/dialogs/rc.cpp:46
+msgid "field if both are present in download"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:81
+msgid "Quicken Windows 2003"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:82
+msgid "Quicken Windows 2004"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:83
+msgid "Quicken Windows 2005"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:84
+msgid "Quicken Windows 2006"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:85
+msgid "Quicken Windows 2007"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:86
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:111
+msgid "Quicken Windows 2008"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:89
+msgid "MS-Money 2003"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:90
+msgid "MS-Money 2004"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:91
+msgid "MS-Money 2005"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:92
+msgid "MS-Money 2006"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:93
+msgid "MS-Money 2007"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:94
+msgid "MS-Money Plus"
+msgstr ""
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:91
+msgid "Report Configuration"
+msgstr ""
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:117
+#: dialogs/kreportconfigurationfilterdlg.cpp:135
+#, fuzzy
+msgid "Rows/Columns"
+msgstr "Rækker/Kolonner tab"
+
+#: dialogs/investtransactioneditor.cpp:203
+#: dialogs/investtransactioneditor.cpp:537
+#: dialogs/investtransactioneditor.cpp:579 dialogs/rc.cpp:103
+#: dialogs/rc.cpp:158 dialogs/rc.cpp:245 dialogs/rc.cpp:750 dialogs/rc.cpp:794
+#: widgets/kmymoneyaccountselector.cpp:182 widgets/register.cpp:64
+#: widgets/register.cpp:567 widgets/transaction.cpp:1500
+msgid "Security"
+msgstr "Sikkerhed"
+
+#: dialogs/investtransactioneditor.cpp:211
+#, fuzzy
+msgid "Asset account"
+msgstr "Aktiver"
+
+#: dialogs/investtransactioneditor.cpp:1073
+#, fuzzy
+msgid "Price/Share"
+msgstr "Pris per aktie"
+
+#: dialogs/kmergetransactionsdlg.cpp:39
+#, fuzzy
+msgid "Merge Transactions"
+msgstr "Importér overførsler"
+
+#: dialogs/kmergetransactionsdlg.cpp:40
+msgid "Are you sure you wish to merge these transactions?"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:59
+msgid "Start Dialog"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Templates"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Select templates"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:80 dialogs/kstartdlg.cpp:119
+msgid "New KMyMoney document"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:90
+msgid "Open a KMyMoney document"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:96
+msgid ""
+"%1|KMyMoney files (*.kmy)\n"
+"%2|All files (*.*)"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:102
+msgid "Recent Files"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:217
+msgid "Blank Document"
+msgstr ""
+
+#: dialogs/knewbudgetdlg.cpp:71
+msgid "Please specify a budget name"
+msgstr ""
+
+#: dialogs/kgncpricesourcedlg.cpp:48
+#, fuzzy, c-format
+msgid "Investment: %1"
+msgstr "Investeringer"
+
+#: dialogs/kgncpricesourcedlg.cpp:49
+#, fuzzy, c-format
+msgid "Quote source: %1"
+msgstr "Dato fundet: %1"
+
+#: dialogs/kmymoneypricedlg.cpp:62 dialogs/ksecuritylisteditor.cpp:69
+msgid "Delete this entry"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:70
+msgid "Remove this security item from the file"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:73
+msgid "&Add"
+msgstr "&Tilføj"
+
+#: dialogs/kmymoneypricedlg.cpp:68 dialogs/ksecuritylisteditor.cpp:75
+msgid "Add a new entry"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:76
+msgid "Create a new security entry."
+msgstr ""
+
+#: dialogs/keditequityentrydlg.cpp:77 dialogs/kmymoneypricedlg.cpp:74
+#: dialogs/ksecuritylisteditor.cpp:81
+msgid "Modify the selected entry"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:82
+msgid "Change the security information of the selected entry."
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:80 dialogs/ksecuritylisteditor.cpp:87
+msgid "Close the dialog"
+msgstr "Luk denne dialogboks"
+
+#: dialogs/kmymoneypricedlg.cpp:81 dialogs/ksecuritylisteditor.cpp:88
+msgid "Use this to close the dialog and return to the application."
+msgstr "Brug denne til at lukke dialogboksen, og vende tilbage til programmet."
+
+#: dialogs/ksecuritylisteditor.cpp:184
+msgid ""
+"Do you really want to remove the currency <b>%1</b> from the file?</"
+"p><i>Note: It is currently not supported to add currencies.</i>"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:187
+msgid "Do you really want to remove the %1 <b>%2</b> from the file?"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:190
+msgid "Delete security"
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:63
+msgid "Remove this price item from the file"
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:66 dialogs/mymoneyqifprofileeditor.cpp:94
+msgid "&New"
+msgstr "&Ny"
+
+#: dialogs/kmymoneypricedlg.cpp:69
+msgid "Create a new price entry."
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:75
+msgid "Change the details of selected price information."
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Do you really want to delete the selected price entry?"
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Delete price information"
+msgstr "Slet pris-information"
+
+#: dialogs/kchooseimportexportdlg.cpp:46
+msgid ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:50 dialogs/rc.cpp:22
+msgid "Choose import type:"
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:51 dialogs/rc.cpp:20
+msgid "Choose Import Type Dialog"
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:53
+msgid ""
+"Please choose the type of export you wish to perform. A simple explanation\n"
+"of the export type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an export type please press the OK button."
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:57
+msgid "Choose export type:"
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:58
+msgid "Choose Export Type Dialog"
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:78
+msgid ""
+"QIF files are created by the popular accounting program Quicken.\n"
+"Another dialog will appear, if you choose this type, asking for further\n"
+"information relevant to the Quicken format."
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:82
+msgid ""
+"The CSV type uses a comma delimeted text file that can be used by\n"
+"most popular spreadsheet programs available for Linux and other operating\n"
+"systems."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:222
+msgid "%1 units in %2"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid ""
+"Failed to retrieve an exchange rate for %1 from %2. It will be skipped this "
+"time."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+#, fuzzy
+msgid "Price Update Failed"
+msgstr "Pris per aktie"
+
+#: dialogs/kequitypriceupdatedlg.cpp:427
+msgid ""
+"Failed to retrieve a quote for %1 from %2. Press <b>No</b> to remove the "
+"online price source from this security permanently, <b>Yes</b> to continue "
+"updating this security during future price updates or <b>Cancel</b> to stop "
+"the current update operation."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:427 dialogs/kequitypriceupdatedlg.cpp:447
+#, fuzzy
+msgid "Price Update Failed"
+msgstr "Pris per aktie"
+
+#: dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Cannot update security <b>%1</b>: %2"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:528
+#, fuzzy
+msgid "Price for %1 updated (id %2)"
+msgstr "Pris for %1 er blevet opdateret"
+
+#: dialogs/kequitypriceupdatedlg.cpp:534
+msgid "Received an invalid price for %1, unable to update."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:554
+msgid ""
+"Received a price for %1 (id %2), but this symbol is not on the list! "
+"Aborting entire update."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:222
+msgid ""
+"The number <b>%1</b> has already been used in account <b>%2</b>. Do you want "
+"to replace it with the next available number?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:222
+msgid "Duplicate number"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:303
+msgid ""
+"This transaction has more than two splits and is based on a different "
+"currency (%1). Using this account to modify the transaction is currently not "
+"very well supported by KMyMoney and may result in false results."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:305
+msgid ""
+"KMyMoney was not able to find a more appropriate account to edit this "
+"transaction. Nevertheless, you are allowed to modify the transaction. If you "
+"don't want to edit this transaction, please cancel from editing next."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:307
+msgid ""
+"Using e.g. <b>%1</b> to edit this transaction is a better choice. "
+"Nevertheless, you are allowed to modify the transaction. If you want to use "
+"the suggested account instead, please cancel from editing next and change "
+"the view to the suggested account."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:410
+msgid ""
+"This transaction has more than two splits and is originally based on a "
+"different currency (%1). Using this account to modify the transaction may "
+"result in rounding errors. Do you want to continue?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:412
+msgid ""
+"At least one of the selected transactions has more than two splits and is "
+"originally based on a different currency (%1). Using this account to modify "
+"the transactions may result in rounding errors. Do you want to continue?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:557
+#, fuzzy
+msgid "Storing transactions"
+msgstr "Find transaktion..."
+
+#: dialogs/transactioneditor.cpp:603 widgets/kmymoneybriefschedule.cpp:65
+msgid "&Enter"
+msgstr "&Enter"
+
+#: dialogs/transactioneditor.cpp:606
+msgid "Use this to enter the transaction into the ledger."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:607
+#, fuzzy
+msgid "&Schedule"
+msgstr "Vælg %1"
+
+#: dialogs/transactioneditor.cpp:609
+#, fuzzy
+msgid "Accepts the entered data and stores it as schedule"
+msgstr "Accepterer værdien og gemmer dem"
+
+#: dialogs/transactioneditor.cpp:610
+msgid "Use this to schedule the transaction for later entry into the ledger."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"The transaction you are about to enter has a post date in the future.<br/"
+"><br/>Do you want to enter it in the ledger or add it to the schedules?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"_: Dialog caption for 'Enter or schedule' dialog\n"
+"Enter or schedule?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:671
+msgid ""
+"The balance of account <b>%1</b> dropped below the warning balance of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:677
+msgid ""
+"The balance of account <b>%1</b> dropped below the minimum balance of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:683
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit warning "
+"limit of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:689
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit limit of %"
+"2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:740
+#, fuzzy
+msgid "Payer/Receiver"
+msgstr "Modtager"
+
+#: dialogs/transactioneditor.cpp:748
+#, fuzzy
+msgid "Category/Account"
+msgstr "Kategori"
+
+#: dialogs/transactioneditor.cpp:980 dialogs/transactioneditor.cpp:1016
+#: dialogs/transactioneditor.cpp:1378 dialogs/transactioneditor.cpp:1399
+#: dialogs/transactioneditor.cpp:1422 dialogs/transactioneditor.cpp:1443
+#: dialogs/transactioneditor.cpp:1505 dialogs/transactioneditor.cpp:1509
+#: widgets/transaction.cpp:902
+msgid "Transfer from"
+msgstr "Overfør fra"
+
+#: dialogs/transactioneditor.cpp:982 dialogs/transactioneditor.cpp:1018
+#: dialogs/transactioneditor.cpp:1401 dialogs/transactioneditor.cpp:1445
+#: dialogs/transactioneditor.cpp:1506 widgets/transaction.cpp:902
+msgid "Transfer to"
+msgstr "Overfør til"
+
+#: dialogs/transactioneditor.cpp:1259
+#, fuzzy
+msgid "Select autofill transaction"
+msgstr "Slet overførsel"
+
+#: dialogs/transactionmatcher.cpp:77
+msgid "First transaction does not match requirement for matching"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:79
+msgid "Second transaction does not match requirement for matching"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:83 dialogs/transactionmatcher.cpp:133
+msgid "Splits for %1 have conflicting values (%2,%3)"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:96 dialogs/transactionmatcher.cpp:149
+msgid ""
+"Both of these transactions have been imported into %1. Therefore they "
+"cannot be matched. Matching works with one imported transaction and one non-"
+"imported transaction."
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:101 dialogs/transactionmatcher.cpp:156
+#, fuzzy
+msgid "Unable to match all splits (%1)"
+msgstr "Kan ikke skrive ændringer til '%1'"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:65
+msgid "Account and transfer account are the same. Please change one."
+msgstr "Konto og overførselskonto er den samme. Du skal derfor ændre én."
+
+#: dialogs/kconfirmmanualenterdlg.cpp:84
+msgid "Payee changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:92
+#: dialogs/kconfirmmanualenterdlg.cpp:100
+msgid "Account changed. Old: \"%1\", New: \"%2\""
+msgstr "Konto ændret. Gammel: \"%1\", Ny: \"%2\""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:107
+msgid "Account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:115
+#, fuzzy
+msgid ""
+"Transfer account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</"
+"b><p>"
+msgstr "Overførselskonto ændret. Gammel: \"%1\", Ny: \"%2\""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:143
+msgid ""
+"Category changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:151
+#: dialogs/kconfirmmanualenterdlg.cpp:153
+msgid "empty"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:157
+msgid "Memo changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:166
+msgid "Amount changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:175
+msgid ""
+"Reconciliation flag changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%"
+"2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:182
+msgid "Fatal error in determining data: "
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:56
+msgid ""
+"There are no Qt SQL drivers installed in your system.\n"
+"Please consult documentation for your distro, or visit the Qt web site (www."
+"trolltech.com) and search for SQL drivers."
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:100
+msgid "Qt SQL driver %1 is no longer installed on your system"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:107
+msgid "Qt SQL driver %1 is not suported"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:164
+#, fuzzy
+msgid "SQLite files (*.sql);; All files (*.*)"
+msgstr ""
+"*.%1|%2 filer\n"
+"*.*|Alle filer (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:167
+#, fuzzy
+msgid "Select SQLite file"
+msgstr "Vælg stil"
+
+#: dialogs/kselectdatabasedlg.cpp:188
+#, fuzzy
+msgid "All files (*.*)"
+msgstr ""
+"%1|XML filer\n"
+"%2|Alle filer (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:191
+#, fuzzy
+msgid "Select output file"
+msgstr "Vælg filnavn"
+
+#: dialogs/investactivities.cpp:168
+#, fuzzy
+msgid "%1 (Brokerage)"
+msgstr " (kurtage)"
+
+#: dialogs/investactivities.cpp:200 dialogs/investactivities.cpp:288
+#: dialogs/investactivities.cpp:425 widgets/transaction.cpp:1548
+#, fuzzy
+msgid "Price/share"
+msgstr "Pris per aktie"
+
+#: dialogs/investactivities.cpp:586
+msgid "Ratio 1/"
+msgstr ""
+
+#: dialogs/kenterscheduledlg.cpp:201
+#, fuzzy
+msgid ""
+"<p>Please check that all the details in the following dialog are correct and "
+"press OK.</p><p>Editable data can be changed and can either be applied to "
+"just this occurence or for all subsequent occurences for this schedule. "
+"(You will be asked what you intend after pressing OK in the following dialog)"
+"</p>"
+msgstr ""
+"<b><p>Tjek om alle oplyninger herunder er korrekte, og klik O.K.</"
+"p><p>Redigérbar data kan ændres, og kan enten bruges til netop denne "
+"indtastning, eller alle indtastninger i denne plan. (Du vil blive spurgt om "
+"hvad du vil, efter du har klikket O.K.).</p></b>"
+
+#: dialogs/kenterscheduledlg.cpp:201
+#, fuzzy
+msgid "Enter scheduled transaction"
+msgstr "Slet overførsel"
+
+#: dialogs/kcsvprogressdlg.cpp:65 dialogs/kexportdlg.cpp:65
+msgid "&Export"
+msgstr "&Eksportér"
+
+#: dialogs/kexportdlg.cpp:67 dialogs/kimportdlg.cpp:68
+msgid "Start operation"
+msgstr "Start operation"
+
+#: dialogs/kexportdlg.cpp:68
+msgid "Use this to start the export operation"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:71 dialogs/kimportdlg.cpp:72
+msgid "&Browse..."
+msgstr "&Find..."
+
+#: dialogs/kexportdlg.cpp:73 dialogs/kimportdlg.cpp:74
+msgid "Select filename"
+msgstr "Vælg filnavn"
+
+#: dialogs/kexportdlg.cpp:74 dialogs/kimportdlg.cpp:75
+msgid "Use this to select a filename to export to"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:77 dialogs/kimportdlg.cpp:78
+#: dialogs/settings/ksettingsonlinequotes.cpp:64
+#: widgets/kmymoneyonlinequoteconfig.cpp:64
+msgid "&New..."
+msgstr "&Ny"
+
+#: dialogs/kexportdlg.cpp:79 dialogs/kimportdlg.cpp:80
+#: dialogs/mymoneyqifprofileeditor.cpp:96
+msgid "Create a new profile"
+msgstr "Opret en ny profil"
+
+#: dialogs/kexportdlg.cpp:80 dialogs/kimportdlg.cpp:81
+msgid "Use this to open the profile editor"
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:56
+msgid "Edit loan wizard"
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:58
+msgid ""
+"Please enter the date from which on the following changes will be effective. "
+"The date entered must be later than the opening date of this account (%1), "
+"but must not be in the future. The default will be today."
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:76
+msgid ""
+"Note: you will not be able to modify this account today, because the opening "
+"date \"%1\" is in the future. Please revisit this dialog when the time has "
+"come."
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:244
+msgid ""
+"Your previous selection was \"%1\". If you select another option, KMyMoney "
+"will dismiss the changes you have just entered. Do you wish to proceed?"
+msgstr ""
+
+#: dialogs/kcategoryreassigndlg.cpp:81
+msgid ""
+"At least one transaction/schedule still references the category <b>%1</b>. "
+"However, at least one category with the same currency must exist so that the "
+"transactions/schedules can be reassigned."
+msgstr ""
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid ""
+"This dialog does not allow to create new categories. Please pick a category "
+"from the list."
+msgstr ""
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+#, fuzzy
+msgid "Category creation"
+msgstr "Kategori valg"
+
+#: dialogs/kbackupdlg.cpp:61
+msgid "C&hoose..."
+msgstr "V&alg"
+
+#: dialogs/kbackupdlg.cpp:63
+msgid "Select mount point"
+msgstr ""
+
+#: dialogs/kbackupdlg.cpp:64
+msgid "Use this to browse to the mount point."
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:293
+#, fuzzy
+msgid "Next due date"
+msgstr "Næste år"
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid ""
+"You have turned on the GPG encryption support. This means, that new files "
+"will be stored encrypted. Existing files will not be encrypted "
+"automatically. To achieve encryption of existing files, please use the "
+"<b>File/Save as...</b> feature and store the file under a different name. "
+"Once confident with the result, feel free to delete the old file and rename "
+"the encrypted one to the old name."
+msgstr ""
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+#, fuzzy
+msgid "GPG encryption activated"
+msgstr "Brug GPG-kryptering"
+
+#: dialogs/settings/ksettingshome.cpp:51
+msgid "&Up"
+msgstr ""
+
+#: dialogs/settings/ksettingshome.cpp:53
+msgid "Move selected item up"
+msgstr ""
+
+#: dialogs/settings/ksettingshome.cpp:54
+msgid "Use this to move the selected item up by one position in the list."
+msgstr ""
+
+#: dialogs/settings/ksettingshome.cpp:55
+msgid "&Down"
+msgstr ""
+
+#: dialogs/settings/ksettingshome.cpp:57
+msgid "Move selected item down"
+msgstr ""
+
+#: dialogs/settings/ksettingshome.cpp:58
+msgid "Use this to move the selected item down by one position in the list."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:1
+#, fuzzy
+msgid "Color settings"
+msgstr "Nulstil alle indstillinger"
+
+#: dialogs/settings/rc.cpp:2
+msgid "Foreground"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:3
+msgid "Text colors"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:4
+msgid "Grid color"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:5
+#, fuzzy
+msgid "Erronous transaction"
+msgstr "Importér overførsler"
+
+#: dialogs/settings/rc.cpp:6
+msgid "Value with missing conversion rate"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:7
+msgid "Negative value"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:8
+#, fuzzy
+msgid "Background"
+msgstr "Backup"
+
+#: dialogs/settings/rc.cpp:10
+msgid "List background colors"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:11
+msgid "Normal"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:12
+msgid "Alternate"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:13
+msgid "Special background colors"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:14
+msgid "Ledger group separator"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:15
+msgid "Required field"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:16
+#, fuzzy
+msgid "Imported transaction"
+msgstr "Importér overførsler"
+
+#: dialogs/settings/rc.cpp:17
+#, fuzzy
+msgid "Matched transaction"
+msgstr "Slet overførsel"
+
+#: dialogs/settings/rc.cpp:18
+msgid "Font settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:19
+msgid "Use system fonts"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:20
+#, fuzzy
+msgid "Individual font settings"
+msgstr "Nulstil alle indstillinger"
+
+#: dialogs/settings/rc.cpp:24
+msgid "Number of Days of Account Cycle:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:26
+msgid "Number of Days to Forecast:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:27
+msgid "Forecast Method"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:28
+#, fuzzy
+msgid "Scheduled and Future Transactions"
+msgstr "Slet overførsel"
+
+#: dialogs/settings/rc.cpp:29
+msgid "History-based"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:30
+msgid "History-based settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:31
+msgid "Number of Cycles to use in Forecast:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:36
+msgid "General Settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:37
+msgid "Global"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:38
+msgid "Startup page options"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:39
+#, fuzzy
+msgid "Start with homepage"
+msgstr "Start søgningen"
+
+#: dialogs/settings/rc.cpp:40
+msgid "Start with last selected view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:41
+#, fuzzy
+msgid "Precision settings"
+msgstr "GPG-krypterings indstillinger"
+
+#: dialogs/settings/rc.cpp:42
+#, fuzzy
+msgid "Price precision"
+msgstr "Pris valg"
+
+#: dialogs/settings/rc.cpp:43
+msgid "digits"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:44
+msgid "Autosave options"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:45
+msgid "Autosave periodically"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:46
+msgid "minutes"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:47
+msgid "Fiscal Year"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:48
+#, fuzzy
+msgid "Your fiscal year starts on"
+msgstr "Forrige år"
+
+#: dialogs/settings/rc.cpp:49
+msgid "January"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:50
+msgid "February"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:51
+#, fuzzy
+msgid "March"
+msgstr "&Søg"
+
+#: dialogs/settings/rc.cpp:52
+msgid "April"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:53
+msgid "May"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:54
+msgid "June"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:55
+msgid "July"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:56
+msgid "August"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:57
+msgid "September"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:58
+#, fuzzy
+msgid "October"
+msgstr "Andet"
+
+#: dialogs/settings/rc.cpp:59
+#, fuzzy
+msgid "November"
+msgstr "Nummer"
+
+#: dialogs/settings/rc.cpp:60
+#, fuzzy
+msgid "December"
+msgstr "Modtager"
+
+#: dialogs/settings/rc.cpp:61
+msgid "Views"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:62
+msgid "Synchronize account selection of ledger and investment view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:63
+msgid ""
+"Check the views you want to enable, uncheck those you want to hide, because "
+"you don't need the functionality."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:64
+msgid "Icon size of navigation bar"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:65
+msgid "Micro (16px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:66
+msgid "Small (32px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:67
+msgid "Normal (48px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:68
+msgid "Large (64px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:69
+msgid "Show title bar on each page"
+msgstr ""
+
+#: dialogs/rc.cpp:835 dialogs/settings/rc.cpp:70
+msgid "Filter"
+msgstr "Filter"
+
+#: dialogs/settings/rc.cpp:71
+#, fuzzy
+msgid "Accounts / Categories"
+msgstr "Top kategorier"
+
+#: dialogs/settings/rc.cpp:72
+msgid "Don't show unused categories"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:73
+msgid ""
+"This option hides all categories in the categories view that are not used in "
+"at least a single transaction. They are still shown in the category "
+"selection lists."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:74
+#, fuzzy
+msgid "Don't show closed accounts"
+msgstr "Der er ingen konto til aktiver"
+
+#: dialogs/settings/rc.cpp:75
+msgid ""
+"This option hides all accounts that have been closed by the user in views "
+"and selection lists.\n"
+"\n"
+"You can use <b>View/Show all accounts</b> to temporarily show hidden "
+"accounts in the views."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:76
+#, fuzzy
+msgid "Show equity accounts"
+msgstr "Rediger en konto"
+
+#: dialogs/rc.cpp:332 dialogs/settings/rc.cpp:77 widgets/rc.cpp:160
+msgid "Schedules"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:78
+msgid "Don't show finished schedules"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:79
+msgid "This option hides all finished schedules in the schedules view."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:81
+#, fuzzy
+msgid "Don't show transactions prior to"
+msgstr "Slet overførsel"
+
+#: dialogs/settings/rc.cpp:82
+#, fuzzy
+msgid "Don't show reconciled transactions"
+msgstr "Slet overførsel"
+
+#: dialogs/settings/rc.cpp:83
+msgid "This option hides all reconciled transactions in the ledger view."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:84 widgets/rc.cpp:22
+msgid "GPG encryption settings"
+msgstr "GPG-krypterings indstillinger"
+
+#: dialogs/settings/rc.cpp:85
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Access to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>additional recovery encryption</i> is only accessible, if the "
+"necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id "
+"0x8AFDDC8E is found in your keyring."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:86 widgets/rc.cpp:24
+msgid "Use GPG encryption"
+msgstr "Brug GPG-kryptering"
+
+#: dialogs/settings/rc.cpp:87
+#, fuzzy
+msgid "GPG encryption"
+msgstr "Brug GPG-kryptering"
+
+#: dialogs/settings/rc.cpp:88
+msgid "Your key"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:89
+msgid ""
+"This combo box lists all the secret keys you have in your keyring. Select "
+"the one you want to use for encryption when saving to a file."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:90
+#, fuzzy
+msgid "Additonal keys"
+msgstr "Ændr gebyrergebyrer"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:50 dialogs/settings/rc.cpp:91
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading 0x."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:92 widgets/rc.cpp:28
+msgid ""
+"This symbol denotes, if the key for the given user id has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+
+#: dialogs/kgpgkeyselectiondlg.cpp:61 dialogs/settings/rc.cpp:93
+msgid "Keys for all of the above user ids found"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:94 widgets/rc.cpp:31
+msgid ""
+"This symbol denotes, if the KMyMoney recovery key has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:95
+msgid "Recover Key available in keyring"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:96
+#, fuzzy
+msgid "Also encrypt with KMyMoney's recover key"
+msgstr "Kryptér også med KmyMoney-recovery nøgle"
+
+#: dialogs/settings/rc.cpp:97
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out.."
+msgstr ""
+"Du kan også vælge at kryptere dataene med KMyMoney's gendannelses nøgle. Det "
+"er kun kernen af KMyMoney udviklerne der har den private nøgle, som skal "
+"bruges til at dekryptere disse data.<p><br><br> Denne mekanisme er stillet "
+"til rådighed i tilfælde hvor du har mistet dine egen nøgle, og ikke kan "
+"tilgå dine data længere. Med denne mulighed aktiveret, kan KmyMoney "
+"udviklerne dekryptere dine data, og give dig dem i læselig form. Vær "
+"venligst indstillet på at du skal kunne besvare nogle detajlerede spørgsmål "
+"ang. indholdet a dataene, før du får noget tilsendt."
+
+#: dialogs/settings/rc.cpp:98
+msgid "Homepage Settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:99
+msgid "Up"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:100
+#, fuzzy
+msgid "Down"
+msgstr "Færdig"
+
+#: dialogs/settings/rc.cpp:101
+msgid ""
+"Selected entries are shown on the home page of the application.<p>\n"
+"Use the buttons and checkboxes to customize the layout of the home page."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:102
+msgid "Homepage/Summary page font scaling"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:103
+msgid "Percentage of default font size:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:104
+msgid ""
+"Remember font size when leaving the program if manually changed with mouse-"
+"wheel"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:105
+#, fuzzy
+msgid "Information display"
+msgstr "Betalings informationer"
+
+#: dialogs/settings/rc.cpp:106
+#, fuzzy
+msgid "Show Account Limit Information"
+msgstr "Betalings informationer"
+
+#: dialogs/settings/rc.cpp:110 widgets/rc.cpp:47
+msgid ""
+"<i>Enter regular expressions which can be used to parse the data returned "
+"from the URL entered above. The symbol, price, and date must be found in "
+"the quote data to be usable. You may also try the KMyMoney user's "
+"mailinglist at <a href=\"mailto:kmymoney2-user@lists.sourceforge.net"
+"\">kmymoney2-user@lists.sourceforge.net</a> to find what settings work for "
+"other users in your country.</i>"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:113 widgets/rc.cpp:38
+msgid "Regular Expression to extract the symbol from the downloaded data"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:114 widgets/rc.cpp:39
+msgid "Regular Expression to extract the price from the downloaded data"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:115 widgets/rc.cpp:41
+msgid "URL to be used to download the quote"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:116 widgets/rc.cpp:42
+msgid ""
+"Enter the URL from which stock quotes will be fetched. <b>%1</b> will be "
+"replaced with the symbol for the security being quoted. For currency "
+"conversions, <b>%2</b> will be replaced with the currency to be quoted and "
+"<b>%1</b> with the currency the quote is based on."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:118 dialogs/settings/rc.cpp:121 widgets/rc.cpp:40
+#: widgets/rc.cpp:44
+msgid "Regular Expression to extract the date from the downloaded data"
+msgstr ""
+
+#: dialogs/rc.cpp:807 dialogs/settings/rc.cpp:119 widgets/rc.cpp:45
+msgid "Date Format"
+msgstr "Datoformat"
+
+#: dialogs/settings/rc.cpp:122
+msgid "Skip HTML stripping"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:123
+msgid ""
+"<p>For easier processing of the data returned by the online source, KMyMoney "
+"usually strips unused parts before it is parsed with the regular "
+"expressions. If matching of the fields relies on those items, then use this "
+"option to turn stripping off.</p>\n"
+"\n"
+"<p>The following items are usually removed by stripping:\n"
+"\n"
+"<ul>\n"
+"<li>HTML tags such as <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded characters such as <b>&amp;nbsp;</b></li>\n"
+"<li>duplicate whitespace</li>\n"
+"</ul>\n"
+"</p>"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:127
+msgid "Register settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:128
+#, fuzzy
+msgid "Display"
+msgstr "Daglig"
+
+#: dialogs/settings/rc.cpp:131
+msgid ""
+"Using the ledger lens shows the details for the transaction that has focus "
+"in the ledger. Usually, when using the transaction form, only a one line "
+"summary is displayed for each transaction as the details are shown in the "
+"form."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:133
+msgid "Always show a No. field"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:134
+#, fuzzy
+msgid "Show group header between transactions"
+msgstr "Opret en ny konto for aktiver"
+
+#: dialogs/settings/rc.cpp:135
+msgid ""
+"Draws a larger header above each group of transaction. The grouping depends "
+"on the current sort order."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:136
+msgid "Show header for the previous and current fiscal year"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:137
+msgid "Sorting"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:138
+msgid "Normal view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:139
+#, fuzzy
+msgid "Reconciliation view"
+msgstr "Udregningsoversigt"
+
+#: dialogs/settings/rc.cpp:140
+#, fuzzy
+msgid "Search view"
+msgstr "&Søg"
+
+#: dialogs/settings/rc.cpp:141
+msgid ""
+"Use the <i>left</i> and <i>right</i> buttons to add and remove sort options. "
+"Use the <i>up</i> and <i>down</i> buttons to modify the sort order. Double-"
+"Click a selected entry to toggle the sort order between <i>ascending</i> and "
+"<i>descending</i>."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:142
+#, fuzzy
+msgid "Data entry"
+msgstr "Indtastet beløb"
+
+#: dialogs/settings/rc.cpp:146
+msgid "Use Enter to move between fields"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:147
+msgid "Match names from start"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:148
+msgid ""
+"Mark this option, if you always want to match names e.g. for payees from the "
+"start. If unset, any substring is matched."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:149
+#, fuzzy
+msgid "Default reconciliation state"
+msgstr "Slet overførsel"
+
+#: dialogs/rc.cpp:227 dialogs/settings/rc.cpp:150
+#: widgets/kmymoneycombo.cpp:348 widgets/registersearchline.cpp:84
+msgid "Not reconciled"
+msgstr ""
+
+#: dialogs/rc.cpp:228 dialogs/settings/rc.cpp:151
+#: widgets/kmymoneycombo.cpp:347 widgets/registersearchline.cpp:85
+msgid "Cleared"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:153
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation "
+"of an account"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:154
+msgid "Autofill"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:155
+msgid "No Autofill"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:156
+#, fuzzy
+msgid "Don't do autofill of transaction data at all."
+msgstr "Slet overførsel"
+
+#: dialogs/settings/rc.cpp:157
+msgid "Same transaction if amount differs less than"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:158
+msgid ""
+"Collect all transactions for the given payee. Treat all transactions that "
+"refer to the same category and have an amount with +/- X % as identical. If "
+"more than one transaction is found, a list of them is presented to the "
+"user.\n"
+"\n"
+"Selecting 0% will list all transactions."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:159
+msgid ""
+"Two transactions are usually treated identical for autofill, if they refer "
+"the same accounts. They are treated as different transactions though, when "
+"their amount varies by more than the percentage given here."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:160
+msgid ""
+"_: Same transaction if amount differs less than percent.\n"
+"percent."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:161
+msgid "with previously most often used transaction for the payee"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:162
+msgid ""
+"The data of the last transaction assigned to the category used most often "
+"for this payee is autofilled into the transaction editor."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:164
+#, fuzzy
+msgid "Match transactions within days"
+msgstr "Slet overførsel"
+
+#: dialogs/settings/rc.cpp:165
+msgid ""
+"Search for matching transactions within the range of the posting date of the "
+"imported transaction +/- the number of given days."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:166
+msgid "Ask for a new payee's default category"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:167
+msgid ""
+"Whenever a new payee is detected during import of a statement, the user will "
+"be asked to assign a default category for this user when this option is "
+"selected."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:168
+#, fuzzy
+msgid "Schedule Settings"
+msgstr "Skema detaljer"
+
+#: dialogs/settings/rc.cpp:169
+#, fuzzy
+msgid "Startup options"
+msgstr "Start operation"
+
+#: dialogs/settings/rc.cpp:170
+msgid "Check schedules on startup"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:60
+#: widgets/kmymoneyonlinequoteconfig.cpp:60
+msgid "Delete the selected source entry"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:61
+#: widgets/kmymoneyonlinequoteconfig.cpp:61
+msgid "Use this to delete the selected online source entry"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:66
+#: widgets/kmymoneyonlinequoteconfig.cpp:66
+msgid "Create a new source entry for online quotes"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:67
+#: widgets/kmymoneyonlinequoteconfig.cpp:67
+msgid "Use this to create a new entry for online quotes"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:107
+#: dialogs/settings/ksettingsonlinequotes.cpp:190
+#: dialogs/settings/ksettingsonlinequotes.cpp:193
+#: dialogs/settings/ksettingsonlinequotes.cpp:216
+#: widgets/kmymoneyonlinequoteconfig.cpp:107
+#: widgets/kmymoneyonlinequoteconfig.cpp:185
+#: widgets/kmymoneyonlinequoteconfig.cpp:188
+#: widgets/kmymoneyonlinequoteconfig.cpp:211
+msgid "New Quote Source"
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:77 dialogs/rc.cpp:788
+msgid "Clear &All"
+msgstr "Slet &alle"
+
+#: dialogs/ksplittransactiondlg.cpp:79
+msgid "Clear all splits"
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:80
+msgid "Use this to clear all splits of this transaction"
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:84
+#, fuzzy
+msgid "&Merge"
+msgstr "Gebyrer"
+
+#: dialogs/ksplittransactiondlg.cpp:183
+msgid ""
+"The total amount of this transaction is %1 while the sum of the splits is %"
+"2. The remaining %3 are unassigned."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:191
+#, fuzzy, c-format
+msgid "Change &total amount of transaction to %1."
+msgstr "Importér overførsler til %1"
+
+#: dialogs/ksplittransactiondlg.cpp:194
+msgid "&Distribute difference of %1 among all splits."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:203
+#, fuzzy, c-format
+msgid "&Leave total amount of transaction at %1."
+msgstr "Importér overførsler til %1"
+
+#: dialogs/ksplittransactiondlg.cpp:205
+msgid "&Leave %1 unassigned."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:275
+msgid ""
+"You are about to delete all splits of this transaction. Do you really want "
+"to continue?"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:97
+msgid "Use this to create a new QIF import/export profile"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:148
+#: dialogs/mymoneyqifprofileeditor.cpp:403 dialogs/rc.cpp:797
+msgid "QIF Profile Editor"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:150
+msgid "QIF Profile Selector"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:236
+msgid "The default QIF profile"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:404
+#: dialogs/mymoneyqifprofileeditor.cpp:417
+msgid "Enter new profile name"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:436
+msgid "Do you really want to delete profile '%1'?"
+msgstr ""
+
+#: dialogs/kgpgkeyselectiondlg.cpp:38
+#, fuzzy
+msgid "Select additional keys"
+msgstr "Ændr gebyrergebyrer"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:48 widgets/rc.cpp:25
+msgid "User identification"
+msgstr "Bruger identification"
+
+#: dialogs/kendingbalancedlg.cpp:71
+#, fuzzy
+msgid ""
+"Please enter the following fields with the information as you find them on "
+"your statement. Make sure to enter all values in <b>%1</b>."
+msgstr "Indtast dataene fra dit STATEMENT i de følgende felter."
+
+#: dialogs/kendingbalancedlg.cpp:124
+#, c-format
+msgid "Last reconciled statement: %1"
+msgstr ""
+
+#: dialogs/kendingbalancedlg.cpp:437 dialogs/kendingbalancedlg.cpp:577
+#: dialogs/rc.cpp:137
+msgid "Adjustment transaction"
+msgstr "Justeringsoverførsel"
+
+#: dialogs/kendingbalancedlg.cpp:510
+msgid ""
+"KMyMoney has calculated the following amounts for interest and amortization "
+"according to recorded payments between %1 and %2."
+msgstr ""
+
+#: dialogs/kbalancechartdlg.cpp:59
+#, fuzzy, c-format
+msgid "Balance of %1"
+msgstr "Balance: %1"
+
+#: dialogs/kbalancechartdlg.cpp:70
+msgid "%1 Balance History"
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:98
+msgid "Split Options"
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:99 dialogs/rc.cpp:731
+#: widgets/kmymoneypriceview.cpp:149
+#, fuzzy
+msgid "Edit..."
+msgstr "Lukker..."
+
+#: dialogs/kmymoneysplittable.cpp:100
+msgid "Duplicate"
+msgstr "Duplikér"
+
+#: dialogs/kmymoneysplittable.cpp:102
+msgid "Delete ..."
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:275
+#, fuzzy
+msgid ""
+"_: Duplicate split\n"
+"CTRL+c"
+msgstr "Duplikér"
+
+#: dialogs/kmymoneysplittable.cpp:562
+msgid "will be calculated"
+msgstr "vil blive udregnet"
+
+#: dialogs/kmymoneysplittable.cpp:648
+msgid ""
+"You are about to delete the selected split. Do you really want to continue?"
+msgstr ""
+
+#: dialogs/rc.cpp:1
+msgid "Account selection"
+msgstr "Konto-valg"
+
+#: dialogs/rc.cpp:3
+msgid "Account to import to"
+msgstr "Konto til at importere til"
+
+#: dialogs/rc.cpp:6 dialogs/rc.cpp:170 widgets/rc.cpp:169
+#, fuzzy
+msgid "Skip"
+msgstr "&Spring over"
+
+#: dialogs/rc.cpp:8
+msgid ""
+"Use this dialog to backup your data. \n"
+"\n"
+"Please make sure you have a disk inserted and that the drive is ready. Then "
+"choose the mount point from either the Choose button or by entering the path "
+"in the available box.\n"
+"\n"
+"Click OK to perform the backup. If your system does not use an automounter, "
+"make sure you mark the checkbox below to \"mount this directory before "
+"backing up.\""
+msgstr ""
+
+#: dialogs/rc.cpp:9
+msgid "Device options"
+msgstr ""
+
+#: dialogs/rc.cpp:10
+msgid ""
+"_: This is the mount point\n"
+"Mount Point:"
+msgstr ""
+
+#: dialogs/rc.cpp:11
+#, fuzzy
+msgid "Choose..."
+msgstr "V&alg"
+
+#: dialogs/rc.cpp:12
+msgid "Mount this directory before backing up."
+msgstr ""
+
+#: dialogs/rc.cpp:15
+#, fuzzy
+msgid "Reassign categories"
+msgstr "Skjulte kategorier"
+
+#: dialogs/rc.cpp:16
+msgid ""
+"The transactions, schedules and budgets associated with the selected "
+"category need to be re-assigned to a different category before the selected "
+"category can be deleted. Please select a category from the list below."
+msgstr ""
+
+#: dialogs/rc.cpp:17
+#, fuzzy
+msgid "Available categories:"
+msgstr "Skjulte kategorier"
+
+#: dialogs/rc.cpp:21
+msgid ""
+"Please choose the type of import you wish to perform. A simple "
+"explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+
+#: dialogs/rc.cpp:23
+msgid "QIF"
+msgstr ""
+
+#: dialogs/rc.cpp:24
+msgid "CSV"
+msgstr ""
+
+#: dialogs/rc.cpp:25
+msgid "Some descripton"
+msgstr ""
+
+#: dialogs/rc.cpp:28
+msgid "Confirm Manual Enter"
+msgstr ""
+
+#: dialogs/rc.cpp:29
+msgid "The following changes have been made to the transaction data:"
+msgstr ""
+
+#: dialogs/rc.cpp:30
+msgid "Please choose what you wish to do with the above changes"
+msgstr ""
+
+#: dialogs/rc.cpp:31
+msgid ""
+"Discard the changes and enter the original transaction into the register."
+msgstr ""
+
+#: dialogs/rc.cpp:32
+msgid "Enter these new values this one time, for this occurence only."
+msgstr ""
+
+#: dialogs/rc.cpp:33
+msgid "Set all further occurences in this schedule to be these values."
+msgstr ""
+
+#: dialogs/rc.cpp:36
+msgid "CSV Dialog"
+msgstr ""
+
+#: dialogs/rc.cpp:37
+msgid ""
+"CSV Dialog. Choose a file and then click on Run. You can view your "
+"progress at\n"
+"the bottom of the screen.\n"
+"\n"
+"You can cancel the process at any time by clicking on the Cancel button."
+msgstr ""
+
+#: dialogs/rc.cpp:38
+msgid "Choose the csv file:"
+msgstr ""
+
+#: dialogs/rc.cpp:39
+#, fuzzy
+msgid "Browse"
+msgstr "&Find..."
+
+#: dialogs/rc.cpp:40
+msgid "Between These Dates"
+msgstr ""
+
+#: dialogs/rc.cpp:41 dialogs/rc.cpp:196
+msgid "Start on:"
+msgstr ""
+
+#: dialogs/rc.cpp:42 dialogs/rc.cpp:195
+msgid "End on:"
+msgstr ""
+
+#: dialogs/rc.cpp:43
+msgid "Run"
+msgstr ""
+
+#: dialogs/rc.cpp:44
+msgid "Progress Info"
+msgstr ""
+
+#: dialogs/rc.cpp:45
+msgid "Processing Account:"
+msgstr ""
+
+#: dialogs/rc.cpp:47
+msgid "Processing Transaction:"
+msgstr ""
+
+#: dialogs/rc.cpp:48
+msgid "0 of 0"
+msgstr ""
+
+#: dialogs/rc.cpp:50
+#, fuzzy
+msgid "Exchange Rate/Price Editor"
+msgstr "Priseditor"
+
+#: dialogs/rc.cpp:55
+#, fuzzy
+msgid "Convert from"
+msgstr "Overfør fra"
+
+#: dialogs/rc.cpp:58
+msgid "Convert to"
+msgstr ""
+
+#: dialogs/rc.cpp:61
+#, fuzzy
+msgid "To amount"
+msgstr "Lånets størrelse"
+
+#: dialogs/rc.cpp:62
+msgid "Exchange rate / Price"
+msgstr ""
+
+#: dialogs/rc.cpp:64
+msgid ""
+"xx\n"
+"xx"
+msgstr ""
+"xx\n"
+"xx"
+
+#: dialogs/rc.cpp:68
+msgid "Currencies"
+msgstr "Valutaer"
+
+#: dialogs/rc.cpp:72
+msgid "real ID"
+msgstr "Rigtigt ID"
+
+#: dialogs/rc.cpp:73 dialogs/rc.cpp:722
+msgid "ID"
+msgstr "ID"
+
+#: dialogs/rc.cpp:74
+msgid "X"
+msgstr "X"
+
+#: dialogs/rc.cpp:76 dialogs/rc.cpp:459
+msgid "Online Source"
+msgstr "Online kilde"
+
+#: dialogs/rc.cpp:78 dialogs/rc.cpp:278 dialogs/rc.cpp:312 dialogs/rc.cpp:684
+msgid "F1"
+msgstr "F1"
+
+#: dialogs/rc.cpp:80
+msgid "If this button is not activated, select the base currency first."
+msgstr "Vælg først standard-valutaen, hvis denne knap er deaktiveret."
+
+#: dialogs/rc.cpp:81
+msgid ""
+"Press this button to close the dialog. If the button is not activated, "
+"select your base currency."
+msgstr ""
+"Tryk på denne knap, for at lukke dialogboksen. Vælg først standard-valutaen, "
+"hvis denne knap er deaktiveret."
+
+#: dialogs/rc.cpp:82
+msgid "Edit Equity"
+msgstr ""
+
+#: dialogs/rc.cpp:86 dialogs/rc.cpp:410
+msgid "Smallest fraction:"
+msgstr "Mindste del:"
+
+#: dialogs/rc.cpp:87 dialogs/rc.cpp:408 dialogs/rc.cpp:440
+msgid "1 /"
+msgstr "1 /"
+
+#: dialogs/rc.cpp:88 dialogs/rc.cpp:405
+msgid "Investment Type:"
+msgstr "Investeringstype:"
+
+#: dialogs/rc.cpp:89 dialogs/rc.cpp:404
+#, fuzzy
+msgid "Equity Name:"
+msgstr "Egenkapital navn:"
+
+#: dialogs/rc.cpp:90 dialogs/rc.cpp:409
+msgid "Market Symbol:"
+msgstr "Marked symbol:"
+
+#: dialogs/rc.cpp:91
+msgid "Price History"
+msgstr ""
+
+#: dialogs/rc.cpp:97
+#, fuzzy
+msgid "Edit Scheduled transaction"
+msgstr "Slet overførsel"
+
+#: dialogs/rc.cpp:98
+#, fuzzy
+msgid "Schedule name:"
+msgstr "Vælg %1"
+
+#: dialogs/rc.cpp:99
+msgid "Frequency:"
+msgstr ""
+
+#: dialogs/rc.cpp:100
+msgid "Number of selected periods between entries"
+msgstr ""
+
+#: dialogs/rc.cpp:101
+#, fuzzy
+msgid "Payment information"
+msgstr "Betalings informationer"
+
+#: dialogs/rc.cpp:105 dialogs/rc.cpp:160 dialogs/rc.cpp:247 dialogs/rc.cpp:752
+#: widgets/register.cpp:569
+msgid "C"
+msgstr "C"
+
+#: dialogs/rc.cpp:113
+#, fuzzy
+msgid "Do nothing"
+msgstr "Gør ingenting"
+
+#: dialogs/rc.cpp:116
+msgid "If this schedule occurs on the weekend:"
+msgstr ""
+
+#: dialogs/rc.cpp:117
+msgid "The amount is an estimate because it varies for each payment"
+msgstr ""
+
+#: dialogs/rc.cpp:118
+msgid "Enter this schedule into the register automatically when it is due"
+msgstr ""
+
+#: dialogs/rc.cpp:119
+msgid "This schedule will end at some time"
+msgstr ""
+
+#: dialogs/rc.cpp:120
+msgid "Number of transactions remaining:"
+msgstr ""
+
+#: dialogs/rc.cpp:121
+msgid "Date of final transaction:"
+msgstr ""
+
+#: dialogs/rc.cpp:125
+msgid "Reconciliation Wizard"
+msgstr ""
+
+#: dialogs/rc.cpp:127
+#, fuzzy
+msgid ""
+"Reconciling your account assures, that your recordings match those of your "
+"institution and that there are no mistakes on either side. You should "
+"reconcile your account whenever you receive a statement from your "
+"institution.\n"
+"\n"
+"All relevant information necessary for this process is usually printed on "
+"your statement.\n"
+"\n"
+"On the next page you will verify, that the starting and ending balance are "
+"matching those on your statement. If not, please modify the figures."
+msgstr ""
+"Afstemning af dine konti sikrer, at dine posteringer stemmer over ens med "
+"dem der er registreret i din institution, og at der ikke er nogen fejl på "
+"nogen af siderne. Du bør afstemme din konto hver gang du får en "
+"kontoopgørelse fra din institution.\n"
+"\n"
+"Al relevant information til brug i denne proces er normalt udskrevet på din "
+"kontoopgørelse.\n"
+"\n"
+"På næste side skal du kontrollere at primo- og ultimo-balancen stemmer "
+"overens med dem på din kontoopgørelse. Du har mulighed for at tallene hvis "
+"dette ikke er tilfældet."
+
+#: dialogs/rc.cpp:129
+msgid ""
+"KMyMoney calculates your loan payments automatically. The amounts can "
+"deviate from those calculated by the creditor. Therefore, you possibly have "
+"to adjust amortization, interest and other costs according to your "
+"statement.\n"
+"\n"
+"Please enter the following information found on your statement:"
+msgstr ""
+"KMyMoney udregner automatisk dine tilbagebetalinger af dine lån. Beløbene "
+"kan variere fra de udregnede. Du skal derfor måske justere amortisationen, "
+"renten og diverse andre gebyrer og udgifter, da de virkelige beløb kan "
+"variere fra de udregnede.\n"
+"\n"
+"Indtast venligst følgende informationer fra din opgørelse:"
+
+#: dialogs/rc.cpp:130
+msgid "Ending date of statement"
+msgstr "Kontoopgørelsens ultimodato"
+
+#: dialogs/rc.cpp:131
+msgid "Starting date of statement"
+msgstr "Kontoopgørelsens primodato"
+
+#: dialogs/rc.cpp:132
+msgid "Verify payments"
+msgstr "Verificér betalinger"
+
+#: dialogs/rc.cpp:133 dialogs/rc.cpp:148 dialogs/rc.cpp:476 dialogs/rc.cpp:477
+#: dialogs/rc.cpp:508 dialogs/rc.cpp:513 dialogs/rc.cpp:518 dialogs/rc.cpp:532
+#: dialogs/rc.cpp:539 dialogs/rc.cpp:540 dialogs/rc.cpp:541 dialogs/rc.cpp:542
+#: dialogs/rc.cpp:543 dialogs/rc.cpp:552 dialogs/rc.cpp:553 dialogs/rc.cpp:554
+#: dialogs/rc.cpp:555 dialogs/rc.cpp:556 dialogs/rc.cpp:565 dialogs/rc.cpp:566
+#: dialogs/rc.cpp:567 dialogs/rc.cpp:568 dialogs/rc.cpp:569 dialogs/rc.cpp:578
+#: dialogs/rc.cpp:579 dialogs/rc.cpp:580 dialogs/rc.cpp:581 dialogs/rc.cpp:582
+#: dialogs/rc.cpp:591 dialogs/rc.cpp:592 dialogs/rc.cpp:593 dialogs/rc.cpp:594
+#: dialogs/rc.cpp:595 dialogs/rc.cpp:603 dialogs/rc.cpp:604 dialogs/rc.cpp:605
+#: dialogs/rc.cpp:606 dialogs/rc.cpp:607 dialogs/rc.cpp:618 dialogs/rc.cpp:619
+#: dialogs/rc.cpp:621 dialogs/rc.cpp:636 dialogs/rc.cpp:637 dialogs/rc.cpp:638
+#: dialogs/rc.cpp:639 dialogs/rc.cpp:640 dialogs/rc.cpp:641 dialogs/rc.cpp:651
+#: dialogs/rc.cpp:652 dialogs/rc.cpp:654 dialogs/rc.cpp:657 dialogs/rc.cpp:658
+#: dialogs/rc.cpp:659 dialogs/rc.cpp:664 dialogs/rc.cpp:665 dialogs/rc.cpp:668
+#: dialogs/rc.cpp:670 dialogs/rc.cpp:672 dialogs/rc.cpp:674 dialogs/rc.cpp:676
+#: dialogs/rc.cpp:678 dialogs/rc.cpp:681 dialogs/rc.cpp:823 widgets/rc.cpp:167
+msgid "1"
+msgstr "1"
+
+#: dialogs/rc.cpp:136
+msgid ""
+"If your statement shows different amounts, please cancel this dialog and "
+"correct the false transactions or correct the values in this dialog. In the "
+"later case, KMyMoney will create an adjustment transaction and add it to the "
+"ledger."
+msgstr ""
+
+#: dialogs/rc.cpp:138
+msgid ""
+"In order to create the adjustment transaction, KMyMoney requires an account "
+"and possibly an interest category to assign the differences to. Please "
+"select an account and - if necessary - a category."
+msgstr ""
+
+#: dialogs/rc.cpp:140
+msgid "Interest-Category"
+msgstr "Rente-kategori"
+
+#: dialogs/rc.cpp:141
+msgid "Restarting postponed reconciliation"
+msgstr ""
+
+#: dialogs/rc.cpp:142
+msgid ""
+"You have previously postponed the reconciliation of this account. If you "
+"have entered charges or interests the last time you started reconciling this "
+"account you can modify these in the ledger later on.\n"
+"\n"
+"It is important, that you continue with the same statement you used when you "
+"postponed the reconciliation.\n"
+"\n"
+"All information you have entered into this wizard will be shown and all "
+"transactions that you already cleared are marked with a 'C'."
+msgstr ""
+
+#: dialogs/rc.cpp:143
+msgid "Statement Information"
+msgstr ""
+
+#: dialogs/rc.cpp:144 dialogs/rc.cpp:315 dialogs/rc.cpp:317 dialogs/rc.cpp:320
+#: dialogs/rc.cpp:321 dialogs/rc.cpp:329 dialogs/rc.cpp:330 dialogs/rc.cpp:333
+#: dialogs/rc.cpp:334 dialogs/rc.cpp:335 dialogs/rc.cpp:336 dialogs/rc.cpp:366
+msgid "x"
+msgstr ""
+
+#: dialogs/rc.cpp:145
+msgid "Statement date:"
+msgstr ""
+
+#: dialogs/rc.cpp:146
+msgid "Starting balance of this statement:"
+msgstr ""
+
+#: dialogs/rc.cpp:147
+msgid "Ending balance of this statement:"
+msgstr ""
+
+#: dialogs/rc.cpp:149
+msgid "Interest / Charges"
+msgstr "Rente / Genbyrer"
+
+#: dialogs/rc.cpp:150
+msgid ""
+"If necessary, enter information about interest or charges here. KMyMoney "
+"will create transactions and clear them directly for you."
+msgstr ""
+
+#: dialogs/rc.cpp:153
+msgid "Charges"
+msgstr "Gebyrer"
+
+#: dialogs/rc.cpp:154
+#, fuzzy
+msgid "Enter Schedule"
+msgstr "Vælg %1"
+
+#: dialogs/rc.cpp:155
+msgid "Schedule Details"
+msgstr "Skema detaljer"
+
+#: dialogs/rc.cpp:156 dialogs/rc.cpp:348 dialogs/rc.cpp:389 widgets/rc.cpp:164
+msgid "Name:"
+msgstr "Navn:"
+
+#: dialogs/rc.cpp:157 dialogs/rc.cpp:351 widgets/rc.cpp:165
+msgid "Type:"
+msgstr "Type:"
+
+#: dialogs/rc.cpp:168
+#, fuzzy
+msgid "Enter"
+msgstr "&Enter"
+
+#: dialogs/rc.cpp:169
+msgid ""
+"Enter the transaction and advance the next due date of this schedule to the "
+"next payment date."
+msgstr ""
+
+#: dialogs/rc.cpp:171
+msgid ""
+"Do not enter the transaction but advance the next due date of this schedule "
+"to the next payment date."
+msgstr ""
+
+#: dialogs/rc.cpp:172
+#, fuzzy
+msgid "Ignore"
+msgstr "Indtægter"
+
+#: dialogs/rc.cpp:173
+msgid ""
+"Do not enter or skip payments for this schedule but continue with the next "
+"schedule."
+msgstr ""
+
+#: dialogs/rc.cpp:175
+msgid "Cancel processing of schedule entry."
+msgstr ""
+
+#: dialogs/rc.cpp:176
+msgid "Update Stock and Currency Prices"
+msgstr "Opdater aktie- og valuta-kurser"
+
+#: dialogs/rc.cpp:177
+msgid "List of known Equities, and the date they were last updated on."
+msgstr ""
+
+#: dialogs/rc.cpp:179
+#, fuzzy
+msgid "Update All"
+msgstr "Opdatér &alle"
+
+#: dialogs/rc.cpp:180
+#, fuzzy
+msgid "Update Selected"
+msgstr "&Opdatér de valgte"
+
+#: dialogs/rc.cpp:181
+msgid "Status:"
+msgstr "Status:"
+
+#: dialogs/rc.cpp:184
+msgid "QIF Export"
+msgstr ""
+
+#: dialogs/rc.cpp:185
+msgid ""
+"From this dialog you are able to export transactions to a quicken compatible "
+"file, (known as a QIF file, because of the extension). Please enter the "
+"path to the QIF file or select it by clicking on the Browse button.\n"
+"\n"
+"You can choose the file's path, the account and the format of the QIF file "
+"(profile). Choose Account to export all the transactions between the "
+"specified dates or just categories. You can also limit the transactions "
+"that are exported by start and ending date. Once you have pressed the "
+"Export button a message box will appear when the export has completed "
+"detailing how many transactions, categories and payees were exported."
+msgstr ""
+
+#: dialogs/rc.cpp:186
+msgid "File to export to:"
+msgstr ""
+
+#: dialogs/rc.cpp:188
+msgid "Account to export"
+msgstr ""
+
+#: dialogs/rc.cpp:189 dialogs/rc.cpp:297
+msgid "QIF Profile"
+msgstr ""
+
+#: dialogs/rc.cpp:190 dialogs/rc.cpp:298 dialogs/rc.cpp:362
+#: widgets/kmymoneypriceview.cpp:145
+msgid "New..."
+msgstr "Ny..."
+
+#: dialogs/rc.cpp:191
+msgid "Contents to Export"
+msgstr ""
+
+#: dialogs/rc.cpp:194
+msgid "Date Range"
+msgstr ""
+
+#: dialogs/rc.cpp:199
+msgid "Search transactions"
+msgstr ""
+
+#: dialogs/rc.cpp:200
+msgid "Criteria"
+msgstr ""
+
+#: dialogs/rc.cpp:201
+msgid "Define your search criteria"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:169 dialogs/rc.cpp:202
+msgid "Text"
+msgstr ""
+
+#: dialogs/rc.cpp:203
+msgid "Contains"
+msgstr ""
+
+#: dialogs/rc.cpp:204
+#, fuzzy
+msgid "Does not contain"
+msgstr "Gør ingenting"
+
+#: dialogs/rc.cpp:205
+msgid "Treat text as regular expression"
+msgstr ""
+
+#: dialogs/rc.cpp:206
+msgid "Case sensitive"
+msgstr ""
+
+#: dialogs/rc.cpp:209
+msgid "Range"
+msgstr ""
+
+#: dialogs/rc.cpp:210
+#, fuzzy
+msgid ""
+"_: To (Date)\n"
+"To"
+msgstr "Dato"
+
+#: dialogs/rc.cpp:211
+msgid ""
+"_: From (Date)\n"
+"From"
+msgstr ""
+
+#: dialogs/rc.cpp:213
+msgid "Search this amount"
+msgstr ""
+
+#: dialogs/rc.cpp:214
+msgid "Search amount in the range"
+msgstr ""
+
+#: dialogs/rc.cpp:215
+#, fuzzy
+msgid ""
+"_: to (amount)\n"
+"to"
+msgstr "Netto beløb"
+
+#: dialogs/rc.cpp:216
+#, fuzzy
+msgid ""
+"_: from (amount)\n"
+"from"
+msgstr "Brutto beløb"
+
+#: dialogs/rc.cpp:220
+msgid "Select transactions without payees"
+msgstr ""
+
+#: dialogs/rc.cpp:221
+msgid "Select all"
+msgstr ""
+
+#: dialogs/rc.cpp:222
+msgid "Select none"
+msgstr ""
+
+#: dialogs/rc.cpp:224
+msgid "Validity"
+msgstr ""
+
+#: dialogs/rc.cpp:226
+msgid "All states"
+msgstr ""
+
+#: dialogs/rc.cpp:230
+msgid "All types"
+msgstr ""
+
+#: dialogs/rc.cpp:234
+msgid "Any transaction"
+msgstr ""
+
+#: dialogs/rc.cpp:235
+msgid "Valid transaction"
+msgstr ""
+
+#: dialogs/rc.cpp:236
+msgid "Invalid transaction"
+msgstr ""
+
+#: dialogs/rc.cpp:237
+msgid "State"
+msgstr ""
+
+#: dialogs/rc.cpp:238
+msgid "Search this number"
+msgstr ""
+
+#: dialogs/rc.cpp:239
+msgid "Search number in range"
+msgstr ""
+
+#: dialogs/rc.cpp:240
+msgid ""
+"_: to (number)\n"
+"to"
+msgstr ""
+
+#: dialogs/rc.cpp:241
+msgid ""
+"_: from (number)\n"
+"from"
+msgstr ""
+
+#: dialogs/rc.cpp:242
+msgid "text"
+msgstr ""
+
+#: dialogs/rc.cpp:243
+msgid "warning"
+msgstr ""
+
+#: dialogs/rc.cpp:244
+#, fuzzy
+msgid "Result"
+msgstr "&Nulstil"
+
+#: dialogs/rc.cpp:254
+msgid "F"
+msgstr ""
+
+#: dialogs/rc.cpp:257 dialogs/rc.cpp:844
+msgid "&Reset"
+msgstr "&Nulstil"
+
+#: dialogs/rc.cpp:258
+#, fuzzy
+msgid "&Find"
+msgstr "&Færdig"
+
+#: dialogs/rc.cpp:259
+msgid "GnuCash Import Options"
+msgstr ""
+
+#: dialogs/rc.cpp:260
+msgid "Use 'Help' for more information on these options"
+msgstr ""
+
+#: dialogs/rc.cpp:261
+msgid "Investment Handling"
+msgstr ""
+
+#: dialogs/rc.cpp:262
+msgid "One investment account for each stock"
+msgstr ""
+
+#: dialogs/rc.cpp:263
+msgid "One investment account for all stocks"
+msgstr ""
+
+#: dialogs/rc.cpp:264
+msgid "Prompt for an investment account for each stock"
+msgstr ""
+
+#: dialogs/rc.cpp:265
+#, fuzzy
+msgid "Online price quotes"
+msgstr "Online pris opdatering"
+
+#: dialogs/rc.cpp:266
+msgid "Use Finance::Quote for share price quotes"
+msgstr ""
+
+#: dialogs/rc.cpp:267
+msgid "Scheduled Transactions"
+msgstr ""
+
+#: dialogs/rc.cpp:268
+msgid "Drop suspect scheduled transactions"
+msgstr ""
+
+#: dialogs/rc.cpp:269
+#, fuzzy
+msgid "Decoding option"
+msgstr "Beskrivelse"
+
+#: dialogs/rc.cpp:270
+msgid "Decode using"
+msgstr ""
+
+#: dialogs/rc.cpp:271
+#, fuzzy
+msgid "Transaction Notes option"
+msgstr "Overførsels detaljer"
+
+#: dialogs/rc.cpp:272
+#, fuzzy
+msgid "Use transaction notes on non-split transactions"
+msgstr "Kunne ikke slette overførsel"
+
+#: dialogs/rc.cpp:273
+msgid "Debug Options"
+msgstr ""
+
+#: dialogs/rc.cpp:274
+msgid "General debug data"
+msgstr ""
+
+#: dialogs/rc.cpp:275
+msgid "Display XML data"
+msgstr ""
+
+#: dialogs/rc.cpp:276
+msgid "Anonymize data"
+msgstr ""
+
+#: dialogs/rc.cpp:281
+msgid "Online Quotes - Select price source"
+msgstr ""
+
+#: dialogs/rc.cpp:284
+msgid ""
+"This price source is not known to KMyMoney. Please select an option below."
+msgstr ""
+
+#: dialogs/rc.cpp:285
+msgid "Do not perform online quotes for this investment"
+msgstr ""
+
+#: dialogs/rc.cpp:286
+msgid "Select a known KMyMoney source from the list below"
+msgstr ""
+
+#: dialogs/rc.cpp:287
+msgid ""
+"Use the following name for the price source.\n"
+"(Click Help for further information.)"
+msgstr ""
+
+#: dialogs/rc.cpp:288
+msgid "Always use this selection for this price source."
+msgstr ""
+
+#: dialogs/rc.cpp:289
+msgid "QIF Import"
+msgstr ""
+
+#: dialogs/rc.cpp:290
+msgid ""
+"From this dialog you are able to import transactions from a Quicken<b>&trade;"
+"</b> compatible file, (known as a QIF file, because of the extension).<p>\n"
+"\n"
+"Please enter the path to the QIF file or select it by clicking on the Browse "
+"button. Once you have the file's path press the Import button and KMyMoney "
+"will import all the transactions, categories and payees it finds."
+msgstr ""
+
+#: dialogs/rc.cpp:291
+msgid "QIF File to Import:"
+msgstr ""
+
+#: dialogs/rc.cpp:292
+msgid "Import options"
+msgstr ""
+
+#: dialogs/rc.cpp:293
+#, fuzzy
+msgid "Bank statement"
+msgstr "Total betaling:"
+
+#: dialogs/rc.cpp:294
+#, fuzzy
+msgid "Other application"
+msgstr "Rente udregning"
+
+#: dialogs/rc.cpp:295
+msgid ""
+"Select <b>Bank statement</b> turns on automatic category matching which is "
+"turned off in case of <b>Historic data</b>. Use the latter if you import "
+"files from other Personal Finance Management software."
+msgstr ""
+
+#: dialogs/rc.cpp:296
+#, fuzzy
+msgid "Source of QIF"
+msgstr "Kilde"
+
+#: dialogs/rc.cpp:302
+msgid "Verify Import"
+msgstr "Verificér importering"
+
+#: dialogs/rc.cpp:304
+#, fuzzy
+msgid "Ok"
+msgstr "&O.k."
+
+#: dialogs/rc.cpp:306
+msgid "MyDialog"
+msgstr ""
+
+#: dialogs/rc.cpp:310
+#, fuzzy
+msgid "File Information"
+msgstr "Betalings informationer"
+
+#: dialogs/rc.cpp:316
+msgid "Last modified on"
+msgstr ""
+
+#: dialogs/rc.cpp:319
+#, fuzzy
+msgid "Base currency"
+msgstr "Valuta"
+
+#: dialogs/rc.cpp:322
+#, fuzzy
+msgid "Created on"
+msgstr "&Opret"
+
+#: dialogs/rc.cpp:325
+#, fuzzy
+msgid "Accounts/Categories"
+msgstr "Kategorier"
+
+#: dialogs/rc.cpp:328
+msgid "Closed"
+msgstr ""
+
+#: dialogs/rc.cpp:331
+#, fuzzy
+msgid "Prices"
+msgstr "Pris"
+
+#: dialogs/rc.cpp:337
+#, fuzzy
+msgid "Splits"
+msgstr "Opdeling"
+
+#: dialogs/rc.cpp:338
+msgid "Price Editor"
+msgstr "Priseditor"
+
+#: dialogs/rc.cpp:339
+msgid "Show all stored prices"
+msgstr "Vis alle gemte priser"
+
+#: dialogs/rc.cpp:343
+#, fuzzy
+msgid "Delete Range..."
+msgstr "Slet &område..."
+
+#: dialogs/rc.cpp:346
+msgid "New Account Dialog"
+msgstr "Ny konto dialog"
+
+#: dialogs/rc.cpp:349
+#, fuzzy
+msgid "Opening information"
+msgstr "Betalings informationer"
+
+#: dialogs/rc.cpp:350
+msgid "Currency:"
+msgstr "Valuta:"
+
+#: dialogs/rc.cpp:352 dialogs/rc.cpp:793
+msgid "Date:"
+msgstr "Dato:"
+
+#: dialogs/rc.cpp:353
+#, fuzzy
+msgid "Balance:"
+msgstr "Balance:"
+
+#: dialogs/rc.cpp:355
+msgid "Last check number:"
+msgstr ""
+
+#: dialogs/rc.cpp:356
+msgid "Notes:"
+msgstr "Noter:"
+
+#: dialogs/rc.cpp:357
+msgid "No auto-VAT-assignment"
+msgstr "Intet automatisk moms-tillæg"
+
+#: dialogs/rc.cpp:358 dialogs/rc.cpp:441
+#, fuzzy
+msgid "Price entry"
+msgstr "Priseditor"
+
+#: dialogs/rc.cpp:359
+msgid "Preferred Account"
+msgstr "Standard-konto:"
+
+#: dialogs/rc.cpp:363
+msgid "Number:"
+msgstr "Nummer:"
+
+#: dialogs/rc.cpp:364 dialogs/rc.cpp:395
+msgid "BIC"
+msgstr ""
+
+#: dialogs/rc.cpp:367
+#, fuzzy
+msgid "Hierarchy"
+msgstr "&Søg"
+
+#: dialogs/rc.cpp:368
+msgid "Subaccount"
+msgstr "Underkonto"
+
+#: dialogs/rc.cpp:369
+msgid "Limits"
+msgstr ""
+
+#: dialogs/rc.cpp:370
+msgid ""
+"This page allows to setup certain limits. KMyMoney will warn you when the "
+"account balance reaches a limit."
+msgstr ""
+
+#: dialogs/rc.cpp:372
+#, fuzzy
+msgid "Absolute limit"
+msgstr "Kontoadskiller"
+
+#: dialogs/rc.cpp:373
+msgid "Maximum credit limit"
+msgstr ""
+
+#: dialogs/rc.cpp:374
+msgid "Minimum balance"
+msgstr ""
+
+#: dialogs/rc.cpp:375
+msgid "Early warning"
+msgstr ""
+
+#: dialogs/rc.cpp:377
+msgid "VAT details"
+msgstr "moms detajler"
+
+#: dialogs/rc.cpp:378
+msgid "VAT category"
+msgstr "moms kategori"
+
+#: dialogs/rc.cpp:379
+msgid "VAT percentage"
+msgstr "moms procent"
+
+#: dialogs/rc.cpp:380
+msgid "Enable auto VAT assignment"
+msgstr "Aktivér automatisk moms-tillæg"
+
+#: dialogs/rc.cpp:381
+msgid "Amount entered"
+msgstr "Indtastet beløb"
+
+#: dialogs/rc.cpp:382
+msgid "Gross amount"
+msgstr "Brutto beløb"
+
+#: dialogs/rc.cpp:383
+msgid "Net amount"
+msgstr "Netto beløb"
+
+#: dialogs/rc.cpp:384
+msgid "Include on Tax Reports"
+msgstr "Inkludér på skatterapporter"
+
+#: dialogs/rc.cpp:387
+msgid "New Institution Dialog"
+msgstr ""
+
+#: dialogs/rc.cpp:388
+msgid "Institution Details"
+msgstr "Institutionsdetajler"
+
+#: dialogs/rc.cpp:390
+msgid "City:"
+msgstr "By:"
+
+#: dialogs/rc.cpp:394
+msgid "Routing Number:"
+msgstr ""
+
+#: dialogs/rc.cpp:398
+msgid "New Budget"
+msgstr ""
+
+#: dialogs/rc.cpp:403
+#, fuzzy
+msgid "New Equity"
+msgstr "Ny egenkapital"
+
+#: dialogs/rc.cpp:406 dialogs/rc.cpp:407
+msgid "Trading Symbol of the stock or mutual fund, not required."
+msgstr ""
+
+#: dialogs/rc.cpp:414 dialogs/rc.cpp:415
+msgid "Name of the company, or mutual fund."
+msgstr "Navnet på selskabet eller investeringsforeningen."
+
+#: dialogs/rc.cpp:418
+msgid "New File Dialog"
+msgstr ""
+
+#: dialogs/rc.cpp:419
+msgid ""
+"Use this dialog to enter personal information about yourself.\n"
+"\n"
+"All information is optional and is provided to personalize\n"
+"your KMyMoney file."
+msgstr ""
+
+#: dialogs/rc.cpp:430
+msgid "New Investment wizard"
+msgstr ""
+
+#: dialogs/rc.cpp:431
+msgid "Investment Type"
+msgstr "Investeringstype:"
+
+#: dialogs/rc.cpp:432
+#, fuzzy
+msgid "This wizard allows you to create a new investment."
+msgstr "Vælg venligst en over-konto"
+
+#: dialogs/rc.cpp:433
+msgid ""
+"The first step in this process requires to select the type of investment. "
+"The following steps collect more details about the investment from you."
+msgstr ""
+
+#: dialogs/rc.cpp:434
+msgid "Type of investment"
+msgstr "Investeringstype:"
+
+#: dialogs/rc.cpp:438
+msgid "Investment details"
+msgstr "Investeringsdetaljer"
+
+#: dialogs/rc.cpp:439
+msgid ""
+"Enter the details below and click <b>Next</b> to continue entering the "
+"online update details."
+msgstr ""
+
+#: dialogs/rc.cpp:442 dialogs/rc.cpp:728
+msgid "Fraction"
+msgstr ""
+
+#: dialogs/rc.cpp:443
+msgid "Trading Currency"
+msgstr ""
+
+#: dialogs/rc.cpp:444
+msgid "Full name"
+msgstr "Fulde navn"
+
+#: dialogs/rc.cpp:445
+msgid "AMEX"
+msgstr "AMEX"
+
+#: dialogs/rc.cpp:446
+msgid "EUREX"
+msgstr "EUREX"
+
+#: dialogs/rc.cpp:447
+msgid "FUND"
+msgstr "FUND"
+
+#: dialogs/rc.cpp:448
+msgid "NASDAQ"
+msgstr "NASDAQ"
+
+#: dialogs/rc.cpp:449
+msgid "NYSE"
+msgstr "NYSE"
+
+#: dialogs/rc.cpp:450
+msgid "XETRA"
+msgstr "XETRA"
+
+#: dialogs/rc.cpp:451
+msgid "Trading symbol"
+msgstr ""
+
+#: dialogs/rc.cpp:452
+msgid "Identification"
+msgstr "Identifikation"
+
+#: dialogs/rc.cpp:453
+msgid "Enter the ticker symbol (e.g. RHAT)."
+msgstr ""
+
+#: dialogs/rc.cpp:454
+msgid "Enter the CUSIP/ISIN/WKN identification number here"
+msgstr ""
+
+#: dialogs/rc.cpp:455
+msgid "Trading market"
+msgstr ""
+
+#: dialogs/rc.cpp:456
+msgid "Online Update"
+msgstr ""
+
+#: dialogs/rc.cpp:457
+msgid ""
+"Select an online source and click <b>Finish</b> to store the investment "
+"data. If you don't want to use online updates, just leave the data as is."
+msgstr ""
+
+#: dialogs/rc.cpp:458
+msgid "Use Finance::Quote"
+msgstr ""
+
+#: dialogs/rc.cpp:460
+msgid "Factor"
+msgstr ""
+
+#: dialogs/rc.cpp:461
+msgid "New Loan Wizard"
+msgstr "Guide til nyt lån"
+
+#: dialogs/rc.cpp:462
+msgid "New Loan Account Wizard"
+msgstr "Guide til nyt-låns konto"
+
+#: dialogs/rc.cpp:463
+msgid ""
+"\n"
+"Welcome to the New Loan Account Wizard which will guide you through the "
+"creation of a new loan e.g. for your home, your car or any other loan that "
+"you pay or gain interest for.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+
+#: dialogs/rc.cpp:464
+msgid "Edit Loan Account Wizard"
+msgstr "Guide til redigering af lån-konto"
+
+#: dialogs/rc.cpp:465
+msgid ""
+"\n"
+"Welcome to the Edit Loan Account Wizard. Please use this wizard to modify "
+"information about your loan account.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+
+#: dialogs/rc.cpp:467
+msgid ""
+"\n"
+"In the first step, KMyMoney will ask you some general information about the "
+"loan account to be created."
+msgstr ""
+"\n"
+"I første omgang vil KMyMoney spørge dig om generelle informationer i "
+"sammenhæng med at lån-kontoen skal oprettes."
+
+#: dialogs/rc.cpp:468 dialogs/rc.cpp:522 dialogs/rc.cpp:610
+msgid "1. General Information"
+msgstr "1. Generel information"
+
+#: dialogs/rc.cpp:469
+msgid ""
+"\n"
+"2. Calculate Loan\n"
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"2. Udregn lån\n"
+"\n"
+"3. Betalinger"
+
+#: dialogs/rc.cpp:470
+msgid "Edit selection"
+msgstr "Redigér valgte"
+
+#: dialogs/rc.cpp:471
+msgid ""
+"\n"
+"Please select, which data of the loan you want to modify."
+msgstr ""
+"\n"
+"Vælg venligst hvilke data fra lånet du vil redigere."
+
+#: dialogs/rc.cpp:472
+msgid "Modify the interest rate"
+msgstr "Ændr renten"
+
+#: dialogs/rc.cpp:473
+msgid "Modify additional fees"
+msgstr "Ændr gebyrergebyrer"
+
+#: dialogs/rc.cpp:474
+msgid "Modify other loan information"
+msgstr "Ændr anden lån information"
+
+#: dialogs/rc.cpp:475
+msgid "Effective date"
+msgstr ""
+
+#: dialogs/rc.cpp:478
+msgid "When should the changes become active?"
+msgstr "Hvornår skal ændringerne aktiveres?"
+
+#: dialogs/rc.cpp:479
+msgid "Lending or borrowing money"
+msgstr "Låner eller udlåner penge"
+
+#: dialogs/rc.cpp:480
+msgid ""
+"\n"
+"Do you borrow or lend money?"
+msgstr ""
+"\n"
+"Låner eller udlåner du penge?"
+
+#: dialogs/rc.cpp:483
+msgid "Name of the loan"
+msgstr "Navn på lånet"
+
+#: dialogs/rc.cpp:484
+msgid ""
+"\n"
+"How do you want to call this loan? Examples for names are 'car loan', "
+"'school loan', 'home owner loan'."
+msgstr ""
+"\n"
+"Hvad vil du kalde dette lån? Eksempler på navne, kunne være: 'billån', "
+"'skolelån', 'huslån'."
+
+#: dialogs/rc.cpp:486
+msgid "TextLabel6"
+msgstr "Tekstetiket6"
+
+#: dialogs/rc.cpp:487
+msgid "TextLabel7"
+msgstr "Tekstetiket7"
+
+#: dialogs/rc.cpp:488
+msgid "Type of interest"
+msgstr "Rentetype"
+
+#: dialogs/rc.cpp:489
+msgid ""
+"\n"
+"Is the interest of this loan fixed over a period of time or is it adapted "
+"from time to time? If the interest rate changes during the amortization "
+"phase of the loan you should choose the option 'variable interest rate'."
+msgstr ""
+
+#: dialogs/rc.cpp:490
+msgid "Fixed interest rate"
+msgstr "Fast rente"
+
+#: dialogs/rc.cpp:491
+msgid "Variable interest rate"
+msgstr "Variabel rente"
+
+#: dialogs/rc.cpp:492
+msgid "Payments?"
+msgstr "Betalinger?"
+
+#: dialogs/rc.cpp:493
+msgid ""
+"\n"
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?"
+msgstr ""
+"\n"
+"Har der været nogle betalinger for dette lån? (Ligemeget om de er indtastede "
+"i KMyMoney eller ej.)"
+
+#: dialogs/rc.cpp:494
+msgid "No, no payments were made yet."
+msgstr "Nej, der har ikke været nogle betalinger endnu."
+
+#: dialogs/rc.cpp:495
+msgid "Yes, payments were made."
+msgstr "Ja, der har været betalinger"
+
+#: dialogs/rc.cpp:496
+msgid ""
+"Note: Payments made to obtain the loan (e.g. Dissagio) are not considered as "
+"payments in this context."
+msgstr "Hint: Betalinger for at få lånet regnes ikke som en betaling her."
+
+#: dialogs/rc.cpp:497
+msgid "Recording payments?"
+msgstr ""
+
+#: dialogs/rc.cpp:498
+msgid ""
+"\n"
+"Do you want to record all payments of this loan with KMyMoney?"
+msgstr ""
+
+#: dialogs/rc.cpp:499
+msgid "Yes, record all payments."
+msgstr ""
+
+#: dialogs/rc.cpp:500
+msgid "No, only record payments since the beginning of this year."
+msgstr ""
+
+#: dialogs/rc.cpp:501
+msgid "Date of next interest change"
+msgstr "Dato for næste rentetilpasning"
+
+#: dialogs/rc.cpp:502
+msgid ""
+"\n"
+"Select the date when the interest rate for this loan will be modified and "
+"the frequency of the future changes."
+msgstr ""
+
+#: dialogs/rc.cpp:503
+msgid "Next interest change on"
+msgstr "Næste rentetilpasning den:"
+
+#: dialogs/rc.cpp:504
+msgid "Time until next change"
+msgstr "Tid til næste rentetilpasning:"
+
+#: dialogs/rc.cpp:506 dialogs/rc.cpp:571
+#, fuzzy
+msgid ""
+"\n"
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"\n"
+"Indtast renten, eller efterlad feltet blankt, hvis du ønsker at KMyMoney "
+"skal udregne det."
+
+#: dialogs/rc.cpp:507
+#, fuzzy
+msgid "Current amount"
+msgstr "Nuværende beløb"
+
+#: dialogs/rc.cpp:510
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the amount for principal and interest then enter "
+"it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+
+#: dialogs/rc.cpp:512 dialogs/rc.cpp:545
+msgid ""
+"\n"
+"Please enter the interest rate or leave the field empty to calculate it."
+msgstr ""
+"\n"
+"Indtast renten, eller efterlad feltet blankt, hvis du ønsker at KMyMoney "
+"skal udregne det."
+
+#: dialogs/rc.cpp:514
+msgid "Current rate"
+msgstr ""
+
+#: dialogs/rc.cpp:516
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the interest rate then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+
+#: dialogs/rc.cpp:517
+msgid "Date of first payment"
+msgstr "Dato for første betaling"
+
+#: dialogs/rc.cpp:520
+msgid "Calculate Loan"
+msgstr "Udregn lån"
+
+#: dialogs/rc.cpp:521
+msgid ""
+"\n"
+"You have successfully entered the general information about your loan. Next, "
+"KMyMoney needs some information about the calculation of the loan."
+msgstr ""
+"\n"
+"Du har indtastet alle informationerne korrekt. Nu skal KMyMoney bruge nogle "
+"oplysninger omkring udregningen af lånet."
+
+#: dialogs/rc.cpp:523 dialogs/rc.cpp:611
+msgid ""
+"\n"
+"2. Calculate Loan"
+msgstr ""
+"\n"
+"2. Beregn lån"
+
+#: dialogs/rc.cpp:524 dialogs/rc.cpp:612
+msgid ""
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"3. Betalinger"
+
+#: dialogs/rc.cpp:526
+msgid ""
+"\n"
+"How often will there be payments made to this loan?"
+msgstr ""
+"\n"
+"Hvor ofte skal der betales af på dette lån?"
+
+#: dialogs/rc.cpp:527
+msgid "Interest calculation"
+msgstr "Rente udregning"
+
+#: dialogs/rc.cpp:528
+msgid ""
+"\n"
+"When does the actual interest rate get calculated?"
+msgstr ""
+
+#: dialogs/rc.cpp:529
+msgid "When the payment is received."
+msgstr "Når betalinger modtages."
+
+#: dialogs/rc.cpp:530
+msgid "When the payment is due."
+msgstr "Når betalingen forfalder."
+
+#: dialogs/rc.cpp:534 dialogs/rc.cpp:547 dialogs/rc.cpp:560 dialogs/rc.cpp:573
+#: dialogs/rc.cpp:586 dialogs/rc.cpp:598 dialogs/rc.cpp:679
+msgid "Loan amount:"
+msgstr "Lånets størrelse:"
+
+#: dialogs/rc.cpp:535 dialogs/rc.cpp:548 dialogs/rc.cpp:561 dialogs/rc.cpp:574
+#: dialogs/rc.cpp:587 dialogs/rc.cpp:599 dialogs/rc.cpp:633 dialogs/rc.cpp:671
+msgid "Interest rate:"
+msgstr "Renten:"
+
+#: dialogs/rc.cpp:536 dialogs/rc.cpp:549 dialogs/rc.cpp:562 dialogs/rc.cpp:575
+#: dialogs/rc.cpp:588 dialogs/rc.cpp:600 dialogs/rc.cpp:669
+msgid "Term:"
+msgstr "Termin:"
+
+#: dialogs/rc.cpp:537 dialogs/rc.cpp:550 dialogs/rc.cpp:563 dialogs/rc.cpp:576
+#: dialogs/rc.cpp:589 dialogs/rc.cpp:601 dialogs/rc.cpp:622 dialogs/rc.cpp:630
+#: dialogs/rc.cpp:677
+#, fuzzy
+msgid "Principal + Interest:"
+msgstr "Amortisation + rente:"
+
+#: dialogs/rc.cpp:538 dialogs/rc.cpp:551 dialogs/rc.cpp:564 dialogs/rc.cpp:577
+#: dialogs/rc.cpp:583 dialogs/rc.cpp:585 dialogs/rc.cpp:590 dialogs/rc.cpp:602
+msgid "Final amortization payment"
+msgstr "Sidste amortisations-betaling"
+
+#: dialogs/rc.cpp:557
+msgid "Duration"
+msgstr "Varighed"
+
+#: dialogs/rc.cpp:558
+msgid ""
+"\n"
+"Please enter the term of this loan or leave the field empty to calculate it. "
+"The term is the time that is required to fully repay the loan. This time "
+"might be different from the time your loan contract is signed for."
+msgstr ""
+
+#: dialogs/rc.cpp:584
+msgid ""
+"\n"
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+
+#: dialogs/rc.cpp:596
+msgid "Calculation Overview"
+msgstr "Udregningsoversigt"
+
+#: dialogs/rc.cpp:597
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown in the overview below. You can "
+"accept these values by selecting \"Next\" or change them by choosing \"Back"
+"\" to return to the input field for the information you want to change."
+msgstr ""
+
+#: dialogs/rc.cpp:609
+msgid ""
+"\n"
+"In the following steps, KMyMoney supports you in setting up categories and "
+"schedules for your loan payments."
+msgstr ""
+
+#: dialogs/rc.cpp:614
+msgid ""
+"\n"
+"Please select the category you want to assign the interest payments to or "
+"create a new category."
+msgstr ""
+
+#: dialogs/rc.cpp:615
+msgid "Additional Fees"
+msgstr ""
+
+#: dialogs/rc.cpp:616
+msgid ""
+"\n"
+"If your regular payment contains any additional fees, click on the button "
+"\"Additional fees\" to enter them."
+msgstr ""
+
+#: dialogs/rc.cpp:617
+msgid "= periodical payment:"
+msgstr "= Periodisk betaling"
+
+#: dialogs/rc.cpp:623
+msgid ""
+"If no additional fees are included in your periodical payment or you have "
+"entered all such fees, then click on \"Next\"."
+msgstr ""
+
+#: dialogs/rc.cpp:625
+msgid ""
+"KMyMoney will create a schedule for this payment and reminds you whenever a "
+"payment must be made.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+
+#: dialogs/rc.cpp:626
+msgid "First payment due on:"
+msgstr ""
+
+#: dialogs/rc.cpp:627
+msgid "Make payment from/to:"
+msgstr "Lav betaling til/fra:"
+
+#: dialogs/rc.cpp:629
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown below. If you want to accept these "
+"values use the \"Finish\" button to update your account, otherwise use the "
+"\"Back\" button to modify your settings."
+msgstr ""
+
+#: dialogs/rc.cpp:631
+msgid "Additional fees:"
+msgstr ""
+
+#: dialogs/rc.cpp:632
+msgid "Total payment:"
+msgstr "Total betaling:"
+
+#: dialogs/rc.cpp:634
+msgid "Valid from:"
+msgstr "Gyldig fra:"
+
+#: dialogs/rc.cpp:635
+msgid "Affected payments:"
+msgstr ""
+
+#: dialogs/rc.cpp:645
+msgid "Press this to create a new asset account"
+msgstr "Tryk her for at oprette en ny konto til aktiver"
+
+#: dialogs/rc.cpp:648
+msgid ""
+"\n"
+"This page summarizes the data you entered. If you need to modify anything, "
+"please use the \"Back\" button to go to respective page. Otherwise use the "
+"\"Finish\" button to create the account."
+msgstr ""
+
+#: dialogs/rc.cpp:650
+msgid "Payee:"
+msgstr "Betalingsmodtager:"
+
+#: dialogs/rc.cpp:653
+msgid "First payment:"
+msgstr "Første betaling:"
+
+#: dialogs/rc.cpp:655
+msgid "Amount is:"
+msgstr ""
+
+#: dialogs/rc.cpp:656
+msgid "Loan calculation"
+msgstr "Lån udregning"
+
+#: dialogs/rc.cpp:660
+msgid "Periodic Payment:"
+msgstr "Periodisk betaling:"
+
+#: dialogs/rc.cpp:661
+msgid "Additional Fees:"
+msgstr ""
+
+#: dialogs/rc.cpp:662
+msgid "Interest category:"
+msgstr ""
+
+#: dialogs/rc.cpp:663
+msgid "Payment from:"
+msgstr "Betaling fra:"
+
+#: dialogs/rc.cpp:666
+msgid "Next due date:"
+msgstr ""
+
+#: dialogs/rc.cpp:673
+msgid "Final Payment:"
+msgstr ""
+
+#: dialogs/rc.cpp:675
+msgid "Interest is due:"
+msgstr ""
+
+#: dialogs/rc.cpp:680
+msgid "Payment frequency:"
+msgstr ""
+
+#: dialogs/rc.cpp:682
+msgid "Online Quote Configuration"
+msgstr ""
+
+#: dialogs/rc.cpp:687
+msgid "Perl Location:"
+msgstr ""
+
+#: dialogs/rc.cpp:688
+msgid "Script:"
+msgstr "Script:"
+
+#: dialogs/rc.cpp:690
+msgid "Reassign payees"
+msgstr ""
+
+#: dialogs/rc.cpp:691
+msgid ""
+"The transactions associated with the selected payees need to be re-assigned "
+"to a different payee before the selected payees can be deleted. Please "
+"select a payee from the list below."
+msgstr ""
+
+#: dialogs/rc.cpp:692
+msgid "Available payees:"
+msgstr ""
+
+#: dialogs/rc.cpp:693
+msgid "Assign deleted names to the above selected payee's matching list"
+msgstr ""
+
+#: dialogs/rc.cpp:696
+#, fuzzy
+msgid "PluginDlg"
+msgstr "&Plugins"
+
+#: dialogs/rc.cpp:697
+#, fuzzy
+msgid "PlugIn"
+msgstr "&Plugins"
+
+#: dialogs/rc.cpp:698 widgets/transaction.cpp:1071
+#: widgets/transaction.cpp:1658
+#, fuzzy
+msgid "Status"
+msgstr "Status:"
+
+#: dialogs/rc.cpp:699
+#, fuzzy
+msgid "Feature"
+msgstr "&Opret"
+
+#: dialogs/rc.cpp:703
+msgid "Reconciliation Dialog"
+msgstr ""
+
+#: dialogs/rc.cpp:704
+msgid ""
+"This dialog will assist in helping you to balance your account.\n"
+"\n"
+"Click on an appropriate transaction within one of the two list views to mark "
+"it as reconciled. To create a transaction or edit\n"
+"a transaction you can return to the register by clicking on the Edit "
+"Transactions button.\n"
+"\n"
+"Your account is balanced when the Difference is Zero. Click on the Finish "
+"button to save the reconciled transactions."
+msgstr ""
+
+#: dialogs/rc.cpp:705
+msgid "Withdrawals"
+msgstr "Udbetalinger"
+
+#: dialogs/rc.cpp:707 dialogs/rc.cpp:708 dialogs/rc.cpp:822
+msgid "$"
+msgstr "kr"
+
+#: dialogs/rc.cpp:710
+msgid "Previous Balance:"
+msgstr "Forrige balance:"
+
+#: dialogs/rc.cpp:711 dialogs/rc.cpp:713 dialogs/rc.cpp:715 dialogs/rc.cpp:717
+#: dialogs/rc.cpp:820
+msgid "0"
+msgstr "0"
+
+#: dialogs/rc.cpp:712
+msgid "Ending Balance:"
+msgstr "Slut-balance:"
+
+#: dialogs/rc.cpp:714
+msgid "Cleared Balance:"
+msgstr ""
+
+#: dialogs/rc.cpp:716
+msgid "Difference:"
+msgstr "Difference:"
+
+#: dialogs/rc.cpp:718
+#, fuzzy
+msgid "Edit Transactions..."
+msgstr "&Rediger overførsler..."
+
+#: dialogs/rc.cpp:721
+msgid "Security List Editor"
+msgstr ""
+
+#: dialogs/rc.cpp:726
+msgid "Market"
+msgstr ""
+
+#: dialogs/rc.cpp:729
+msgid "Cash Fraction"
+msgstr ""
+
+#: dialogs/rc.cpp:730
+#, fuzzy
+msgid "Add..."
+msgstr "..."
+
+#: dialogs/rc.cpp:732 widgets/kmymoneypriceview.cpp:157
+#, fuzzy
+msgid "Delete..."
+msgstr "Slet &område..."
+
+#: dialogs/rc.cpp:733
+msgid "Show national currencies"
+msgstr ""
+
+#: dialogs/rc.cpp:735
+msgid "KMyMoney - Select Database"
+msgstr ""
+
+#: dialogs/rc.cpp:736
+msgid "CAUTION!"
+msgstr ""
+
+#: dialogs/rc.cpp:737
+msgid ""
+"<font color=\"#ff2727\">This software is still in an experimental stage, and "
+"there are still some known response time problems. Please be patient; we are "
+"working on them.\n"
+"As always, please make sure you have adequate backups of your data.</font>"
+msgstr ""
+
+#: dialogs/rc.cpp:738
+msgid "Database Type"
+msgstr ""
+
+#: dialogs/rc.cpp:739
+msgid "Database Name"
+msgstr ""
+
+#: dialogs/rc.cpp:740
+#, fuzzy
+msgid "Host Name"
+msgstr "Rapport navn"
+
+#: dialogs/rc.cpp:741
+#, fuzzy
+msgid "User Name"
+msgstr "Brugernavn"
+
+#: dialogs/rc.cpp:743
+#, fuzzy
+msgid "Preload &all data"
+msgstr "Personlig information..."
+
+#: dialogs/rc.cpp:745
+#, fuzzy
+msgid "&Generate SQL"
+msgstr "Generelt"
+
+#: dialogs/rc.cpp:747
+msgid "Ca&ncel"
+msgstr ""
+
+#: dialogs/rc.cpp:762 widgets/rc.cpp:172
+#, fuzzy
+msgid "Sort options"
+msgstr "Luk operation"
+
+#: dialogs/rc.cpp:763
+msgid "Use default"
+msgstr ""
+
+#: dialogs/rc.cpp:767
+msgid "Correct splits"
+msgstr ""
+
+#: dialogs/rc.cpp:769
+msgid "How do you want to proceed?"
+msgstr ""
+
+#: dialogs/rc.cpp:770
+msgid "Continue to edit splits"
+msgstr ""
+
+#: dialogs/rc.cpp:771
+#, fuzzy, c-format
+msgid "Change total amount of transaction to %1."
+msgstr "Importér overførsler til %1"
+
+#: dialogs/rc.cpp:772
+msgid "Distribute difference of %1 among all splits."
+msgstr ""
+
+#: dialogs/rc.cpp:773
+msgid "Leave %1 unassigned."
+msgstr ""
+
+#: dialogs/rc.cpp:776
+msgid "Split transaction"
+msgstr ""
+
+#: dialogs/rc.cpp:777
+#, fuzzy
+msgid "<b>11,00<b>"
+msgstr "<b>11,00"
+
+#: dialogs/rc.cpp:778
+#, fuzzy
+msgid "<b>111,00<b>"
+msgstr "<b>111,00"
+
+#: dialogs/rc.cpp:779
+msgid "Unassigned"
+msgstr ""
+
+#: dialogs/rc.cpp:780
+msgid "Sum of splits"
+msgstr ""
+
+#: dialogs/rc.cpp:781
+msgid "100,00"
+msgstr "100,00"
+
+#: dialogs/rc.cpp:782
+msgid "Transaction amount"
+msgstr ""
+
+#: dialogs/rc.cpp:783
+#, fuzzy
+msgid "Merge"
+msgstr "Mere"
+
+#: dialogs/rc.cpp:784
+msgid "Merges splits with the same category to one split"
+msgstr ""
+
+#: dialogs/rc.cpp:785
+msgid ""
+"In case you have multiple split entries to the same category and you like to "
+"keep them as a single split, press this button. The amount for identical "
+"categories will be added and stored in a single split for that category."
+msgstr ""
+
+#: dialogs/rc.cpp:786
+#, fuzzy
+msgid "Clear &Zero"
+msgstr "Slet &alle"
+
+#: dialogs/rc.cpp:787
+msgid "Removes all splits that have a value of zero."
+msgstr ""
+
+#: dialogs/rc.cpp:791
+msgid "New price entry"
+msgstr ""
+
+#: dialogs/rc.cpp:799
+msgid "Void mark"
+msgstr ""
+
+#: dialogs/rc.cpp:800
+msgid "Opening Balance text"
+msgstr "Åbningsbalance-tekst"
+
+#: dialogs/rc.cpp:801
+msgid "Type field text"
+msgstr ""
+
+#: dialogs/rc.cpp:802
+msgid "Account delimiter"
+msgstr "Kontoadskiller"
+
+#: dialogs/rc.cpp:804
+#, fuzzy
+msgid "Attempt to match similar transactions"
+msgstr "Prøv at sammenligne med lignende overførsler"
+
+#: dialogs/rc.cpp:806 dialogs/rc.cpp:808
+msgid "The format of the dates in the QIF file."
+msgstr "Formatet af datoerne i QIF filen."
+
+#: dialogs/rc.cpp:809 dialogs/rc.cpp:811
+msgid ""
+"If a QIF file contains date entries with years represented with two digits "
+"then either an apostrophe or a slash may be used to delimit the year in the "
+"dates for certain centuries. This enables 1905 to be distinguished from "
+"2005. Specify here which range of years will have year delimited by an "
+"apostrophe (eg. for Quicken this is usually 1900-1949)."
+msgstr ""
+"Hvis en QIF fil indeholder datofelter med år repræsenteret af to decimaler, "
+"så kan man enten bruge en apostrof eller en bindestreg til, at dele "
+"årstallet fra resten af datoen. Dette gør det muligt at skelne mellem for "
+"eksempel 1906 og 2006. Angiv her det årsinterval hvortil en apostrof bruges "
+"som separator. (For Quicken er dette normalt intervallet 1900-1949.)"
+
+#: dialogs/rc.cpp:810
+msgid "Apostrophe Handling"
+msgstr "Apostrof håndtering"
+
+#: dialogs/rc.cpp:812
+msgid "Amounts"
+msgstr "Beløb"
+
+#: dialogs/rc.cpp:813
+msgid "Field"
+msgstr "Felt"
+
+#: dialogs/rc.cpp:814
+msgid "QIF-Record"
+msgstr ""
+
+#: dialogs/rc.cpp:815 dialogs/rc.cpp:833
+msgid "Decimal Symbol"
+msgstr "Decimalsymbol"
+
+#: dialogs/rc.cpp:816
+msgid "Thousand Delimiter"
+msgstr "Tusinde-adskilder"
+
+#: dialogs/rc.cpp:817
+msgid "SortColumnInvisible"
+msgstr ""
+
+#: dialogs/rc.cpp:819
+msgid "T"
+msgstr "T"
+
+#: dialogs/rc.cpp:821
+msgid "Split-Value"
+msgstr "Opdelings-værdi"
+
+#: dialogs/rc.cpp:824
+#, fuzzy
+msgid "Commission"
+msgstr "Kommission"
+
+#: dialogs/rc.cpp:825
+msgid "O"
+msgstr "O"
+
+#: dialogs/rc.cpp:826
+msgid "2"
+msgstr "2"
+
+#: dialogs/rc.cpp:828
+msgid "I"
+msgstr "I"
+
+#: dialogs/rc.cpp:829
+msgid "3"
+msgstr "3"
+
+#: dialogs/rc.cpp:831
+msgid "Q"
+msgstr "Q"
+
+#: dialogs/rc.cpp:832
+msgid "4"
+msgstr "4"
+
+#: dialogs/rc.cpp:834
+msgid "Thousands Separator"
+msgstr "Tusinde-adskilder"
+
+#: dialogs/rc.cpp:836
+msgid "Output filter location"
+msgstr "Sti til output-filteret"
+
+#: dialogs/rc.cpp:837
+#, fuzzy
+msgid "Input filter file type"
+msgstr "Sti til input-filteret"
+
+#: dialogs/rc.cpp:838
+msgid "*.qif"
+msgstr ""
+
+#: dialogs/rc.cpp:839
+msgid "Input filter location"
+msgstr "Sti til input-filteret"
+
+#: dialogs/rc.cpp:843
+#, fuzzy
+msgid "Rename"
+msgstr "Om&døb"
+
+#: dialogs/kselecttransactionsdlg.cpp:44
+#, fuzzy
+msgid "Select Transaction"
+msgstr "Opdel overførsel"
+
+#: dialogs/kselecttransactionsdlg.cpp:45
+msgid ""
+"Select a transaction and press the OK button or use Cancel to select none."
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:62
+msgid "Investment detail wizard"
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:82
+msgid "Security detail wizard"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:121 dialogs/knewinvestmentwizard.cpp:109
+msgid ""
+"_: default price mode\n"
+"<default>"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:122 dialogs/knewinvestmentwizard.cpp:110
+#, fuzzy
+msgid "Price per share"
+msgstr "Pris per aktie"
+
+#: dialogs/knewaccountdlg.cpp:123 dialogs/knewinvestmentwizard.cpp:111
+msgid "Total for all shares"
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:129
+#, fuzzy
+msgid "This wizard allows you to modify the selected investment."
+msgstr "Vælg venligst en over-konto"
+
+#: dialogs/knewinvestmentwizard.cpp:132
+#, fuzzy
+msgid "This wizard allows you to modify the selected security."
+msgstr "Vælg venligst en over-konto"
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid ""
+"The selected symbol is already on file. Do you want to reuse the existing "
+"security?"
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:186
+#, fuzzy
+msgid "Security found"
+msgstr "Sikkerhed ikke fundet"
+
+#: dialogs/knewinvestmentwizard.cpp:309
+msgid "Unable to create all objects for the investment"
+msgstr ""
+
+#: dialogs/keditequityentrydlg.cpp:78
+msgid "Change the price information of the selected entry."
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:64 widgets/kmymoneybriefschedule.cpp:59
+msgid "&Skip"
+msgstr "&Spring over"
+
+#: dialogs/kaccountselectdlg.cpp:66 widgets/kmymoneybriefschedule.cpp:61
+msgid "Skip this transaction"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:67
+msgid ""
+"Use this to skip importing this transaction and proceed with the next one."
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:72
+msgid "Create a new account/category"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:73
+msgid "Use this to add a new account/category to the file"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:77
+msgid "&Abort"
+msgstr "&Luk"
+
+#: dialogs/kaccountselectdlg.cpp:79
+msgid "Abort the import operation and dismiss all changes"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:80
+msgid ""
+"Use this to abort the import. Your financial data will be in the state "
+"before you started the QIF import."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:110
+msgid "Is a sub account"
+msgstr "Er en under-konto"
+
+#: dialogs/knewaccountdlg.cpp:184
+#, fuzzy
+msgid "VAT account"
+msgstr "Konto"
+
+#: dialogs/knewaccountdlg.cpp:474
+msgid ""
+"You have not specified a name.\n"
+"Please fill in this field."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:482
+msgid "Please select a parent account."
+msgstr "Vælg venligst en over-konto"
+
+#: dialogs/knewaccountdlg.cpp:489 dialogs/knewaccountdlg.cpp:1029
+msgid "<No Institution>"
+msgstr "<Ingen institution>"
+
+#: dialogs/knewaccountdlg.cpp:552
+msgid ""
+"An account named <b>%1</b> already exists. You cannot create a second "
+"account with the same name."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:567
+msgid ""
+"A category named <b>%1</b> already exists. You cannot create a second "
+"category with the same name."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid ""
+"You have selected to suppress the display of unused categories in the "
+"KMyMoney configuration dialog. The category you just created will therefore "
+"only be shown if it is used. Otherwise, it will be hidden in the accounts/"
+"categories view."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid "Hidden categories"
+msgstr "Skjulte kategorier"
+
+#: dialogs/knewaccountdlg.cpp:927 dialogs/knewaccountdlg.cpp:979
+#, c-format
+msgid "Is a sub account of %1"
+msgstr "Er en underkonto til %1"
+
+#: dialogs/knewaccountdlg.cpp:1082
+msgid "Cannot add institution"
+msgstr "Kan ikke tilføje institution"
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid ""
+"This dialog does not allow to create new payees. Please pick a payee from "
+"the list."
+msgstr ""
+
+#: dialogs/kpayeereassigndlg.cpp:75
+#, fuzzy
+msgid "Payee creation"
+msgstr "Betalings informationer"
+
+#: dialogs/kimportdlg.cpp:69
+msgid "Use this to start the import operation"
+msgstr ""
+
+#: dialogs/kimportdlg.cpp:110
+#, fuzzy
+msgid ""
+"%1|Import files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|XML filer\n"
+"%2|Alle filer (*.*)"
+
+#: dialogs/kimportdlg.cpp:111
+#, fuzzy
+msgid "Import File..."
+msgstr "Importerer fil..."
+
+#: dialogs/knewloanwizard.cpp:124
+msgid "Create a new category"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:125
+msgid "Use this to open the new account editor"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:129
+msgid "&Additional fees..."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:131
+msgid "Enter additional fees"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:132
+msgid ""
+"Use this to add any additional fees other than principal and interest "
+"contained in your periodical payments."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:139
+msgid ""
+"Use this to create a new account to which the initial payment should be made"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:208
+msgid "To whom do you make payments?"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:209
+msgid "Payments to"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:214
+msgid "From whom do you expect payments?"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:215
+msgid "Payments from"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:233
+msgid "Please enter the date, the first payment for this loan was/is due."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:235
+msgid ""
+"Note: Consult the loan contract for details of the first due date. Keep in "
+"mind, that the first due date usually differs from the date the contract was "
+"signed"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:240
+msgid ""
+"Please enter the original loan amount in the field below or leave it empty "
+"to be calculated."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:248
+msgid ""
+"Please enter the date, the first payment for this loan was/is due this year."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:250
+msgid ""
+"Note: You can easily figure out the date of the first payment if you consult "
+"the last statement of last year."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:254
+msgid ""
+"Please enter the remaining loan amount of last years final statement in the "
+"field below. You should not leave this field empty."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:311 dialogs/knewloanwizard.cpp:326
+#: dialogs/knewloanwizard.cpp:341 dialogs/knewloanwizard.cpp:357
+#: dialogs/knewloanwizard.cpp:373
+msgid "calculate"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:417
+msgid "borrowed"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:419
+msgid "lend"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:423
+msgid "not assigned"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:430
+msgid "on reception"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:432
+msgid "on due date"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:471
+msgid ""
+"The loan wizard is unable to calculate two different values for your loan at "
+"the same time. Please enter a value for the %1 on this page or backup to the "
+"page where the current value to be calculated is defined and fill in a "
+"value."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:500
+msgid ""
+"You selected, that payments have already been made towards this loan. This "
+"requires you to enter the loan amount exactly as found on your last "
+"statement."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:513
+msgid "interest rate"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:522
+msgid "term"
+msgstr "termin"
+
+#: dialogs/knewloanwizard.cpp:532
+#, fuzzy
+msgid "principal and interest"
+msgstr "Amortisation og rente"
+
+#: dialogs/knewloanwizard.cpp:743
+#, c-format
+msgid ""
+"The number of payments has been decremented and the final payment has been "
+"modified to %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:751 dialogs/knewloanwizard.cpp:771
+#, c-format
+msgid "The final payment has been modified to %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:802
+msgid "KMyMoney has calculated a final payment of %1 for this loan."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:817
+msgid ""
+"You have entered mis-matching information. Please backup to the appropriate "
+"page and update your figures or leave one value empty to let KMyMoney "
+"calculate it for you"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:230
+msgid ""
+"Warning: Filtering by Category will exclude all transfers from the results."
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:239
+msgid "(None)"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:241
+msgid "Current selections: "
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:716
+msgid "Found %1 matching transactions (D %2 / P %3 = %4)"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:719
+#, fuzzy
+msgid "Found %1 matching transactions"
+msgstr "Find transaktion..."
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "The institution name field is empty. Please enter the name."
+msgstr ""
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "Adding New Institution"
+msgstr ""
+
+#: dialogs/kcsvprogressdlg.cpp:69
+msgid "C&lose"
+msgstr ""
+
+#: dialogs/kcsvprogressdlg.cpp:247
+msgid " of "
+msgstr ""
+
+#: widgets/kmymoneypriceview.cpp:126
+msgid "Commodity"
+msgstr "Vare"
+
+#: widgets/kmymoneypriceview.cpp:130
+msgid "Source"
+msgstr "Kilde"
+
+#: widgets/kmymoneypriceview.cpp:143
+msgid "Price Options"
+msgstr "Pris valg"
+
+#: widgets/kmymoneypriceview.cpp:153
+#, fuzzy
+msgid "Online Price Update..."
+msgstr "Online pris opdatering"
+
+#: widgets/kmymoneycombo.cpp:472 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+msgid "From"
+msgstr ""
+
+#: widgets/transaction.cpp:668
+msgid "Transaction is missing a category assignment."
+msgstr ""
+
+#: widgets/transaction.cpp:671
+msgid "The transaction has a missing assignment of <b>%1</b>."
+msgstr ""
+
+#: widgets/transaction.cpp:874
+msgid "Sell"
+msgstr ""
+
+#: widgets/transaction.cpp:876
+msgid "Buy"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:520 widgets/transaction.cpp:879
+#: widgets/transaction.cpp:1447
+msgid "Dividend"
+msgstr "Dividende"
+
+#: widgets/kmymoneycombo.cpp:518 widgets/transaction.cpp:881
+#: widgets/transaction.cpp:1453
+msgid "Yield"
+msgstr "Udbytte"
+
+#: widgets/transaction.cpp:886 widgets/transaction.cpp:1473
+msgid "Activity"
+msgstr ""
+
+#: widgets/transaction.cpp:887
+#, fuzzy
+msgid "Investment transaction"
+msgstr "Justeringsoverførsel"
+
+#: widgets/transaction.cpp:1021 widgets/transaction.cpp:1114
+#: widgets/transaction.cpp:1165
+msgid "*** UNASSIGNED ***"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:517 widgets/transaction.cpp:1435
+#, fuzzy
+msgid "Add shares"
+msgstr "Adresse:"
+
+#: widgets/kmymoneycombo.cpp:516 widgets/transaction.cpp:1438
+#, fuzzy
+msgid "Remove shares"
+msgstr "Fjern modtager"
+
+#: widgets/kmymoneycombo.cpp:522 widgets/transaction.cpp:1441
+#, fuzzy
+msgid "Buy shares"
+msgstr "Køb aktier"
+
+#: widgets/kmymoneycombo.cpp:521 widgets/transaction.cpp:1444
+#, fuzzy
+msgid "Sell shares"
+msgstr "Sælg aktier"
+
+#: widgets/transaction.cpp:1450
+msgid "Reinvest Dividend"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:515 widgets/transaction.cpp:1456
+#, fuzzy
+msgid "Split shares"
+msgstr "Sælg aktier"
+
+#: widgets/transaction.cpp:1515
+#, fuzzy
+msgid "Ratio"
+msgstr "Varighed"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:241
+msgid "%1 Bills."
+msgstr "%1 Regninger"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:257
+msgid "%1 Deposits."
+msgstr ""
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:273
+msgid "%1 Transfers."
+msgstr "%1 Overførsler"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:355
+msgid ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+msgstr ".-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-."
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:57
+#: widgets/kmymoneyaccounttreeforecast.cpp:84
+#, fuzzy
+msgid "Current"
+msgstr "Valuta"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:72
+#: widgets/kmymoneyaccounttreeforecast.cpp:93
+#, fuzzy
+msgid "Total variation"
+msgstr "Total fortjeneste:"
+
+#: widgets/stdtransactionmatched.cpp:130
+msgid ""
+"KMyMoney has matched a downloaded transaction with a manually entered one "
+"(result above)"
+msgstr ""
+
+#: widgets/stdtransactionmatched.cpp:138
+msgid "Bank entry:"
+msgstr ""
+
+#: widgets/stdtransactionmatched.cpp:166
+#, fuzzy
+msgid "Your entry:"
+msgstr "Priseditor"
+
+#: widgets/kbudgetvalues.cpp:187
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a monthly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:187 widgets/kbudgetvalues.cpp:206
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"_: Auto assignment (caption)\n"
+"Auto assignment"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:206
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a yearly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"You have entered budget values using a different base which would result in "
+"an individual monthly budget of <b>%1</b>. Should this value be used to fill "
+"the monthly budgets?"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:62
+#, fuzzy
+msgid "Use this button to skip this transaction"
+msgstr "Brug denne knap til at lukke vinduet"
+
+#: widgets/kmymoneybriefschedule.cpp:67
+msgid "Record this transaction into the register"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:68
+msgid "Use this button to record this transaction"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:96
+msgid "%1 of %2"
+msgstr "%1 af %2"
+
+#: widgets/kmymoneybriefschedule.cpp:109
+msgid "Payment on %1 for %2 with %3 transactions remaining occuring %4."
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:115
+msgid "Payment on %1 for %2 occuring %4."
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:136
+msgid "%1 days overdue (%2 occurences)."
+msgstr "%1 dage over tid (%2 tilfælde)"
+
+#: widgets/register.cpp:55
+msgid "Post date"
+msgstr ""
+
+#: widgets/register.cpp:56
+#, fuzzy
+msgid "Date entered"
+msgstr "Indtastet beløb"
+
+#: widgets/register.cpp:60
+#, fuzzy
+msgid "Entry order"
+msgstr "Enter"
+
+#: widgets/register.cpp:63
+msgid "Reconcile state"
+msgstr ""
+
+#: widgets/register.cpp:440
+#, fuzzy
+msgid ""
+"_: Deposits onto account\n"
+"Deposits"
+msgstr "Modkonto"
+
+#: widgets/register.cpp:442
+#, fuzzy
+msgid ""
+"_: Payments towards credit card\n"
+"Payments"
+msgstr "Betalingsmetode"
+
+#: widgets/register.cpp:446
+#, fuzzy
+msgid ""
+"_: Payments made from account\n"
+"Payments"
+msgstr "Kan ikke flytte konto"
+
+#: widgets/register.cpp:448
+#, fuzzy
+msgid ""
+"_: Payments made with credit card\n"
+"Charges"
+msgstr "Betalingsmetode"
+
+#: widgets/register.cpp:736
+#, fuzzy
+msgid ""
+"_: Payment made from account\n"
+"Payment"
+msgstr "Kan ikke flytte konto"
+
+#: widgets/register.cpp:737
+#, fuzzy
+msgid ""
+"_: Deposit into account\n"
+"Deposit"
+msgstr "Modkonto"
+
+#: widgets/register.cpp:813
+#, fuzzy
+msgid ""
+"_: Payment made with credit card\n"
+"Charge"
+msgstr "Betalingsmetode"
+
+#: widgets/register.cpp:814
+#, fuzzy
+msgid ""
+"_: Payment towards credit card\n"
+"Payment"
+msgstr "Betalingsmetode"
+
+#: widgets/register.cpp:818 widgets/register.cpp:824
+msgid ""
+"_: Decrease of asset/liability value\n"
+"Decrease"
+msgstr ""
+
+#: widgets/register.cpp:819 widgets/register.cpp:823
+msgid ""
+"_: Increase of asset/liability value\n"
+"Increase"
+msgstr ""
+
+#: widgets/register.cpp:2280
+#, fuzzy
+msgid "Prior transactions possibly filtered"
+msgstr "Importér overførsler"
+
+#: widgets/register.cpp:2284
+#, fuzzy
+msgid "Last reconciliation"
+msgstr "Slet overførsel"
+
+#: widgets/register.cpp:2291
+#, fuzzy, c-format
+msgid "Online Statement Balance: %1"
+msgstr "Investeringer"
+
+#: widgets/register.cpp:2295
+#, fuzzy
+msgid "This year"
+msgstr "To gange om året"
+
+#: widgets/kmymoneycombo.cpp:674 widgets/register.cpp:2296
+msgid "Last month"
+msgstr ""
+
+#: widgets/register.cpp:2297
+#, fuzzy
+msgid "This month"
+msgstr "Forrige måned"
+
+#: widgets/register.cpp:2298
+msgid "Last week"
+msgstr ""
+
+#: widgets/register.cpp:2299
+msgid "This week"
+msgstr ""
+
+#: widgets/register.cpp:2300
+msgid "Yesterday"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:666 widgets/register.cpp:2301
+msgid "Today"
+msgstr ""
+
+#: widgets/register.cpp:2302 widgets/register.cpp:2307
+#, fuzzy
+msgid "Future transactions"
+msgstr "Importér overførsler"
+
+#: widgets/register.cpp:2303
+#, fuzzy
+msgid "Next week"
+msgstr "Næste år"
+
+#: widgets/kmymoneycalendar.cpp:131 widgets/register.cpp:2304
+msgid "Next month"
+msgstr "Næste måned"
+
+#: widgets/kmymoneycombo.cpp:670 widgets/register.cpp:2315
+msgid "Current fiscal year"
+msgstr ""
+
+#: widgets/register.cpp:2316
+#, fuzzy
+msgid "Previous fiscal year"
+msgstr "Forrige år"
+
+#: widgets/register.cpp:2317
+#, fuzzy
+msgid "Next fiscal year"
+msgstr "Forrige år"
+
+#: widgets/register.cpp:2349
+#, fuzzy
+msgid ""
+"_: Unknown payee\n"
+"Unknown"
+msgstr "ukendt"
+
+#: widgets/register.cpp:2368
+#, fuzzy
+msgid ""
+"_: Unknown category\n"
+"Unknown"
+msgstr "ukendt"
+
+#: widgets/register.cpp:2387
+#, fuzzy
+msgid ""
+"_: Unknown security\n"
+"Unknown"
+msgstr "Ukendt konto"
+
+#: widgets/klistviewsearchline.cpp:249
+#, fuzzy
+msgid "Search Columns"
+msgstr "Vis kolonner"
+
+#: widgets/klistviewsearchline.cpp:251
+msgid "All Visible Columns"
+msgstr ""
+
+#: widgets/klistviewsearchline.cpp:266
+msgid ""
+"_: Column number %1\n"
+"Column No. %1"
+msgstr ""
+
+#: widgets/klistviewsearchline.cpp:461 widgets/registersearchline.cpp:286
+#, fuzzy
+msgid "S&earch:"
+msgstr "&Søg"
+
+#: widgets/kmymoneyaccountselector.cpp:110
+#: widgets/kmymoneyaccountselector.cpp:371
+msgid "Income categories"
+msgstr "Indtægts kategorier"
+
+#: widgets/kmymoneyaccountselector.cpp:349
+#: widgets/kmymoneyaccountselector.cpp:350
+#, fuzzy
+msgid "Favorites"
+msgstr "Kategorier"
+
+#: widgets/kmymoneyaccountselector.cpp:357
+msgid "Asset accounts"
+msgstr "Aktiver"
+
+#: widgets/kmymoneyaccountselector.cpp:364
+msgid "Liability accounts"
+msgstr "Passiver"
+
+#: widgets/kmymoneyaccountselector.cpp:381
+msgid "Expense categories"
+msgstr "Udgift kategorier"
+
+#: widgets/kmymoneyaccountselector.cpp:391
+#, fuzzy
+msgid "Equity accounts"
+msgstr "Rediger en konto"
+
+#: widgets/kmymoneyaccounttreebase.cpp:120
+#, fuzzy
+msgid "Total Balance"
+msgstr "Balance"
+
+#: widgets/kmymoneyaccounttreebase.cpp:124
+#, fuzzy
+msgid "Total Value"
+msgstr "Aktiver & Passiver"
+
+#: widgets/registersearchline.cpp:75
+msgid ""
+"_: label for status combo\n"
+"Stat&us"
+msgstr ""
+
+#: widgets/registersearchline.cpp:79
+msgid "Any status"
+msgstr ""
+
+#: widgets/registersearchline.cpp:80
+#, fuzzy
+msgid "Imported"
+msgstr "&Importér"
+
+#: widgets/registersearchline.cpp:81
+#, fuzzy
+msgid "Matched"
+msgstr "&Søg"
+
+#: widgets/registersearchline.cpp:82
+msgid "Erroneous"
+msgstr ""
+
+#: widgets/registersearchline.cpp:83
+msgid "Not marked"
+msgstr ""
+
+#: widgets/kmymoneyaccounttree.cpp:54
+msgid ""
+"_: Column heading for category in tax report\n"
+"Tax"
+msgstr ""
+
+#: widgets/kmymoneyaccounttree.cpp:58
+msgid ""
+"_: Column heading for VAT category\n"
+"VAT"
+msgstr ""
+
+#: widgets/kmymoneywizard.cpp:101
+msgid "Continue with next page"
+msgstr ""
+
+#: widgets/kmymoneywizard.cpp:103
+#, fuzzy
+msgid "Finish wizard"
+msgstr "Færdig"
+
+#: widgets/kmymoneywizard.cpp:121
+#, fuzzy
+msgid "&Back"
+msgstr "Backup"
+
+#: widgets/kmymoneywizard.cpp:122
+#, fuzzy
+msgid "&Next"
+msgstr "&Ny"
+
+#: widgets/kmymoneywizard.cpp:123
+msgid "&Finish"
+msgstr "&Færdig"
+
+#: widgets/kmymoneywizard.cpp:274
+#, fuzzy
+msgid "Step %1 of %2"
+msgstr "%1 af %2"
+
+#: widgets/kmymoneydateinput.cpp:235
+msgid ""
+"_: Enter todays date into date input widget\n"
+"T"
+msgstr ""
+
+#: widgets/transactionform.cpp:302
+msgid "&Deposit"
+msgstr ""
+
+#: widgets/transactionform.cpp:304 widgets/transactionform.cpp:313
+#: widgets/transactionform.cpp:323 widgets/transactionform.cpp:333
+msgid "&Transfer"
+msgstr ""
+
+#: widgets/transactionform.cpp:306
+msgid "&Withdrawal"
+msgstr ""
+
+#: widgets/transactionform.cpp:311
+msgid "&Payment"
+msgstr "&Betaling"
+
+#: widgets/transactionform.cpp:315
+#, fuzzy
+msgid "&Charge"
+msgstr "Gebyrer"
+
+#: widgets/transactionform.cpp:321 widgets/transactionform.cpp:335
+#, fuzzy
+msgid "&Decrease"
+msgstr "&Opret"
+
+#: widgets/transactionform.cpp:325 widgets/transactionform.cpp:331
+#, fuzzy
+msgid "&Increase"
+msgstr "&Opret"
+
+#: widgets/kmymoneyscheduledcalendar.cpp:42
+msgid "Select Schedules"
+msgstr ""
+
+#: widgets/kmymoneycalendar.cpp:108
+msgid "Select Style"
+msgstr "Vælg stil"
+
+#: widgets/kmymoneycalendar.cpp:128
+msgid "Choose Style"
+msgstr "Vælg stil"
+
+#: widgets/kmymoneycalendar.cpp:129
+msgid "Next year"
+msgstr "Næste år"
+
+#: widgets/kmymoneycalendar.cpp:130
+msgid "Previous year"
+msgstr "Forrige år"
+
+#: widgets/kmymoneycalendar.cpp:132
+msgid "Previous month"
+msgstr "Forrige måned"
+
+#: widgets/kmymoneycalendar.cpp:133
+msgid "Select a week"
+msgstr "Vælg en uge"
+
+#: widgets/kmymoneycalendar.cpp:134
+msgid "Select a month"
+msgstr "Vælg en måned"
+
+#: widgets/kmymoneycalendar.cpp:135
+msgid "Select a year"
+msgstr "Vælg et år"
+
+#: widgets/kmymoneycalendar.cpp:249
+msgid "Week XX"
+msgstr "Uge XX"
+
+#: widgets/kmymoneycalendar.cpp:264 widgets/kmymoneycalendar.cpp:300
+#, c-format
+msgid "Week %1"
+msgstr "Uge %1"
+
+#: widgets/rc.cpp:1
+#, fuzzy
+msgid "Account Types"
+msgstr "Kontoer"
+
+#: widgets/rc.cpp:3
+#, fuzzy
+msgid "Detailed description"
+msgstr "Beskrivelse"
+
+#: widgets/rc.cpp:18
+msgid "Period"
+msgstr ""
+
+#: widgets/rc.cpp:21
+msgid "Individual"
+msgstr ""
+
+#: widgets/rc.cpp:23
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Acces to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>Recovery encryption</i> group is only accessible, if the necessary "
+"key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is "
+"found."
+msgstr ""
+
+#: widgets/rc.cpp:26
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading <i>0x</i>."
+msgstr ""
+
+#: widgets/rc.cpp:27
+msgid "User ID"
+msgstr "Bruger ID"
+
+#: widgets/rc.cpp:29
+msgid "Recovery encryption"
+msgstr "Genskabningskryptering"
+
+#: widgets/rc.cpp:30
+msgid "Also encrypt with kmymoney-recover key"
+msgstr "Kryptér også med KmyMoney-recovery nøgle"
+
+#: widgets/rc.cpp:32
+#, fuzzy
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out."
+msgstr ""
+"Du kan også vælge at kryptere dataene med KMyMoney's gendannelses nøgle. Det "
+"er kun kernen af KMyMoney udviklerne der har den private nøgle, som skal "
+"bruges til at dekryptere disse data.<p><br><br> Denne mekanisme er stillet "
+"til rådighed i tilfælde hvor du har mistet dine egen nøgle, og ikke kan "
+"tilgå dine data længere. Med denne mulighed aktiveret, kan KmyMoney "
+"udviklerne dekryptere dine data, og give dig dem i læselig form. Vær "
+"venligst indstillet på at du skal kunne besvare nogle detajlerede spørgsmål "
+"ang. indholdet a dataene, før du får noget tilsendt."
+
+#: widgets/rc.cpp:51
+msgid "PriceInfo"
+msgstr "Prisinfo"
+
+#: widgets/rc.cpp:52
+msgid "Report Tab"
+msgstr ""
+
+#: widgets/rc.cpp:53
+msgid "<p>On this tab, you set the basic properties of this report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:54
+msgid "Report Name"
+msgstr "Rapport navn"
+
+#: widgets/rc.cpp:55
+msgid "<p>Choose a name for this report.</p>"
+msgstr "<p>Vælg et navn til denne rapport</p>"
+
+#: widgets/rc.cpp:57
+msgid "<p>Enter a comment to help you remember the details of this report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:58
+msgid "Convert values to base currency"
+msgstr "Konvertér værdier til standard-valutaen"
+
+#: widgets/rc.cpp:59
+msgid ""
+"_: Convert 'em!!\n"
+"<p>Select this option to convert all values in the report to your base "
+"currency.</p><p>Leave it unchecked if you'd like to see values in their "
+"original currency.</p><p>If currencies are not converted, then subtotals "
+"will not be shown.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:60
+msgid "Mark as a favorite report"
+msgstr "Markér som en favorit-rapport"
+
+#: widgets/rc.cpp:61
+msgid ""
+"<p>Select this option to notate this report as one of your favorites.</"
+"p><p>All your favorite reports are grouped in one place on the report list "
+"for easy access.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:62 widgets/rc.cpp:88
+msgid "Rows/Columns Tab"
+msgstr "Rækker/Kolonner tab"
+
+#: widgets/rc.cpp:63 widgets/rc.cpp:89
+msgid ""
+"<p>On this tab, you configure how you'd like the rows and columns to be "
+"selected and organized.</p>"
+msgstr ""
+"<p>I denne tab kan du konfigurere hvordan du vil have at rækkerne og "
+"kolonnerne vælges og organiseres.</p>"
+
+#: widgets/rc.cpp:69 widgets/rc.cpp:81
+msgid ""
+"<p>Choose what kind of accounts to display as the rows of this report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:71
+msgid "Columns"
+msgstr "Kolonner"
+
+#: widgets/rc.cpp:75
+msgid "Bi-Monthly"
+msgstr ""
+
+#: widgets/rc.cpp:78
+msgid "<p>Choose how large of a time period each column should encompass</p>"
+msgstr ""
+
+#: widgets/rc.cpp:79
+msgid "Income & Expenses"
+msgstr "Indtægter og udgifter"
+
+#: widgets/rc.cpp:80
+msgid "Assets & Liabilities"
+msgstr "Aktiver & Passiver"
+
+#: widgets/rc.cpp:82
+msgid "Rows"
+msgstr "Rækker"
+
+#: widgets/rc.cpp:83
+#, fuzzy
+msgid "Show totals column"
+msgstr "Der er ingen konto til aktiver"
+
+#: widgets/rc.cpp:84
+msgid "Average days"
+msgstr ""
+
+#: widgets/rc.cpp:85
+#, fuzzy
+msgid "Include scheduled transactions"
+msgstr "Slet overførsel"
+
+#: widgets/rc.cpp:86
+#, fuzzy
+msgid "Include transfers"
+msgstr "%1 Overførsler"
+
+#: widgets/rc.cpp:87
+#, fuzzy
+msgid "Include unused accounts/categories"
+msgstr "Inkludér kun skatte-kategorier"
+
+#: widgets/rc.cpp:90
+msgid "Organize by:"
+msgstr "Organisér efter:"
+
+#: widgets/rc.cpp:92
+msgid "Top Categories"
+msgstr "Top kategorier"
+
+#: widgets/rc.cpp:95
+msgid "Top Accounts"
+msgstr "Top kontoer"
+
+#: widgets/rc.cpp:98
+msgid "<p>Choose how to group the transactions in this report</p>"
+msgstr ""
+
+#: widgets/rc.cpp:99
+msgid "Show Columns"
+msgstr "Vis kolonner"
+
+#: widgets/rc.cpp:100
+msgid ""
+"<p>Choose which columns should be shown in the report.</p><p>The date and "
+"transaction amount are always shown.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:102
+msgid "<p>Select this option to show the Memo column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:104
+msgid "<p>Select this option to show the Shares column for investments</p>"
+msgstr ""
+
+#: widgets/rc.cpp:106
+msgid "<p>Select this option to show the Price column for investments</p>"
+msgstr ""
+
+#: widgets/rc.cpp:108
+msgid "<p>Select this option to show the Reconciled column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:110
+msgid "<p>Select this option to show the Account column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:112
+msgid "<p>Select this option to show the Number column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:114
+msgid "<p>Select this option to show the Payee column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:116
+msgid "<p>Select this option to show the Category column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:118
+msgid "<p>Select this option to show the Action column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:120
+msgid "<p>Select this option to show the Running balance column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:121
+#, fuzzy
+msgid "Include only Loan accounts"
+msgstr "Inkludér kun investerings-kontoer"
+
+#: widgets/rc.cpp:122
+msgid "Include only Investment accounts"
+msgstr "Inkludér kun investerings-kontoer"
+
+#: widgets/rc.cpp:123 widgets/rc.cpp:127
+msgid ""
+"<p>Check this box to include only those categories which have been marked to "
+"\"Include on Tax Reports\"</p>"
+msgstr ""
+
+#: widgets/rc.cpp:124
+#, fuzzy
+msgid "Hide Split Transaction Details"
+msgstr "Overførsels detaljer"
+
+#: widgets/rc.cpp:125
+msgid ""
+"Do not display the individual transactions that make up a split transaction"
+msgstr ""
+
+#: widgets/rc.cpp:126
+msgid "Include only Tax categories"
+msgstr "Inkludér kun skatte-kategorier"
+
+#: widgets/rc.cpp:128
+msgid "Chart Tab"
+msgstr ""
+
+#: widgets/rc.cpp:129
+#, fuzzy
+msgid "<p>On this tab, you configure the chart drawn forthis report.</p>"
+msgstr ""
+"<p>I denne tab kan du konfigurere hvordan du vil have at rækkerne og "
+"kolonnerne vælges og organiseres.</p>"
+
+#: widgets/rc.cpp:130
+msgid "Chart Type"
+msgstr ""
+
+#: widgets/rc.cpp:131
+msgid "<p>Select what form you would like the chart to be drawn as.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:132
+msgid "Line"
+msgstr ""
+
+#: widgets/rc.cpp:133
+msgid "Bar"
+msgstr ""
+
+#: widgets/rc.cpp:134
+msgid "Stacked Bar"
+msgstr ""
+
+#: widgets/rc.cpp:135
+#, fuzzy
+msgid "Pie"
+msgstr "Pris"
+
+#: widgets/rc.cpp:136
+msgid "Ring"
+msgstr ""
+
+#: widgets/rc.cpp:137
+msgid "Show grid lines"
+msgstr ""
+
+#: widgets/rc.cpp:138
+msgid ""
+"<p>Select this option to show horizontal and vertical grid lines on the "
+"chart.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:139
+msgid "Draw values on chart"
+msgstr ""
+
+#: widgets/rc.cpp:140
+msgid ""
+"<p>Select this option to draw the numeric values for data points next to "
+"their plot location.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:141
+msgid "Show as chart by default"
+msgstr ""
+
+#: widgets/rc.cpp:142
+msgid ""
+"<p>Select this option to cause the report to be shown as a chart when you "
+"first open the report. Otherwise, it will come up as a text report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:143
+msgid "Line width"
+msgstr ""
+
+#: widgets/rc.cpp:144
+#, fuzzy
+msgid "<p>Select what width should be used to draw the line on the chart</p>"
+msgstr "<p>Vælg et navn til denne rapport</p>"
+
+#: widgets/rc.cpp:145
+msgid "ReportControl"
+msgstr ""
+
+#: widgets/rc.cpp:149
+msgid "Configure this report"
+msgstr "Konfigurér denne rapport"
+
+#: widgets/rc.cpp:151
+msgid "Create a new report based on this one"
+msgstr "Lav en ny rapport baseret på denne"
+
+#: widgets/rc.cpp:153
+msgid "Copy this report to the clipboard"
+msgstr "Kopiér denne rapport til udklipsholderen"
+
+#: widgets/rc.cpp:155
+msgid "Export this report as an HTML or CSV file"
+msgstr ""
+
+#: widgets/rc.cpp:157
+msgid "Permanently delete this report"
+msgstr "Slet denne rapport permanent"
+
+#: widgets/rc.cpp:159
+msgid "Close this window"
+msgstr "Luk dette vindue"
+
+#: widgets/rc.cpp:162
+msgid "n of n"
+msgstr "n af n"
+
+#: widgets/rc.cpp:166
+msgid "Account:"
+msgstr "Konto:"
+
+#: widgets/rc.cpp:168
+msgid "Enter..."
+msgstr ""
+
+#: widgets/rc.cpp:171
+#, fuzzy
+msgid "TransactionSortOptionDecl"
+msgstr "Overførsels detaljer"
+
+#: widgets/rc.cpp:173
+msgid "Sort order"
+msgstr ""
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Sunday\n"
+"Sun"
+msgstr ""
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Saturday\n"
+"Sat"
+msgstr ""
+
+#: widgets/kmymoneydatetbl.cpp:171 widgets/kmymoneydatetbl.cpp:178
+msgid "Week %1 for year %2."
+msgstr "Uge %1 af år %2"
+
+#: widgets/kmymoneycombo.cpp:417
+msgid "ATM"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:418
+msgid "Withdrawal"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:421
+msgid "Cheque"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:469
+#, fuzzy
+msgid ""
+"_: Activity for expense categories\n"
+"Paid"
+msgstr "Udgift kategorier"
+
+#: widgets/kmymoneycombo.cpp:470
+#, fuzzy
+msgid ""
+"_: Activity for income categories\n"
+"Received"
+msgstr "Indtægts kategorier"
+
+#: widgets/kmymoneycombo.cpp:519
+msgid "Reinvest dividend"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:664
+msgid "All dates"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:665
+msgid "As of today"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:667
+msgid "Current month"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:668
+#, fuzzy
+msgid "Current quarter"
+msgstr "Nuværende beløb"
+
+#: widgets/kmymoneycombo.cpp:669
+#, fuzzy
+msgid "Current year"
+msgstr "Nuværende beløb"
+
+#: widgets/kmymoneycombo.cpp:671
+msgid "Month to date"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:672
+msgid "Year to date"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:673
+#, fuzzy
+msgid "Year to month"
+msgstr "Hver anden måned"
+
+#: widgets/kmymoneycombo.cpp:675
+#, fuzzy
+msgid "Last year"
+msgstr "Næste år"
+
+#: widgets/kmymoneycombo.cpp:676
+msgid "Last fiscal year"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:677
+msgid "Last 7 days"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:678
+msgid "Last 30 days"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:679
+msgid "Last 3 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:680
+msgid "Last quarter"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:681
+msgid "Last 6 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:682
+msgid "Last 11 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:683
+msgid "Last 12 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:684
+msgid "Next 7 days"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:685
+msgid "Next 30 days"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:686
+msgid "Next 3 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:687
+#, fuzzy
+msgid "Next quarter"
+msgstr "Næste år"
+
+#: widgets/kmymoneycombo.cpp:688
+msgid "Next 6 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:689
+msgid "Next 12 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:690
+msgid "Last 3 months to next 3 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:691
+msgid "User defined"
+msgstr ""
+
+#, fuzzy
+#~ msgid "New schedule..."
+#~ msgstr "Åbner fil..."
+
+#, fuzzy
+#~ msgid "Edit schedule..."
+#~ msgstr "Åbner fil..."
+
+#, fuzzy
+#~ msgid "Delete schedule..."
+#~ msgstr "Slet modtgaer"
+
+#, fuzzy
+#~ msgid "Duplicate schedule"
+#~ msgstr "Duplikér"
+
+#, fuzzy
+#~ msgid "Enter schedule..."
+#~ msgstr "Åbner fil..."
+
+#, fuzzy
+#~ msgid "Skip schedule..."
+#~ msgstr "Åbner fil..."
+
+#, fuzzy
+#~ msgid "Adjusting schedules..."
+#~ msgstr "Åbner fil..."
+
+#, fuzzy
+#~ msgid "Add schedule"
+#~ msgstr "Vælg %1"
+
+#, fuzzy
+#~ msgid "Unable to enter transaction for schedule '%1'"
+#~ msgstr "Kunne ikke slette overførsel"
+
+#, fuzzy
+#~ msgid "Loaded"
+#~ msgstr "Lån"
+
+#, fuzzy
+#~ msgid "not loaded: %1"
+#~ msgstr "Dato fundet: %1"
+
+#, fuzzy
+#~ msgid "Schedule options"
+#~ msgstr "Skema detaljer"
+
+#, fuzzy
+#~ msgid "Edit Schedule"
+#~ msgstr "Vælg %1"
+
+#~ msgid "&Search"
+#~ msgstr "&Søg"
+
+#~ msgid "Start the search"
+#~ msgstr "Start søgningen"
+
+#~ msgid "Reset all settings"
+#~ msgstr "Nulstil alle indstillinger"
+
+#, fuzzy
+#~ msgid "Multi-user mode not yet implemented\n"
+#~ msgstr "Funktion ikke tilgængelig"
+
+#, fuzzy
+#~ msgid "Invalid account for investments"
+#~ msgstr "Ugyldig datoformat"
+
+#~ msgid "Problem adding imported transaction: "
+#~ msgstr "Problem ved at tilføje overførsel:"
+
+#~ msgid "Unable to import"
+#~ msgstr "Ude af stand til at importere"
+
+#, fuzzy
+#~ msgid "Budget "
+#~ msgstr "Næste år"
+
+#, fuzzy
+#~ msgid "Forecast "
+#~ msgstr "Næste år"
+
+#, fuzzy
+#~ msgid "Budget Total"
+#~ msgstr "Næste år"
+
+#, fuzzy
+#~ msgid "Forecast Total"
+#~ msgstr "Næste år"
+
+#, fuzzy
+#~ msgid "Incomes"
+#~ msgstr "Indtægter"
+
+#, fuzzy
+#~ msgid "Schedules This Month"
+#~ msgstr "Slet pris-information"
+
+#~ msgid "&Ok"
+#~ msgstr "&O.k."
+
+#~ msgid "Accepts the value and stores them"
+#~ msgstr "Accepterer værdien og gemmer dem"
+
+#~ msgid "Use this to accept all values and close the dialog."
+#~ msgstr "Brug denne til at acceptere værdierne, og luk dialogboksen."
+
+#~ msgid "Cancel the operation"
+#~ msgstr "Annuller operationen"
+
+#~ msgid "Use this to dismiss all the changes made in this dialog."
+#~ msgstr ""
+#~ "Brug denne til at annullere alle ændringer foretaget i denne dialogboks."
+
+#~ msgid "Abort operation"
+#~ msgstr "Luk operation"
+
+#, fuzzy
+#~ msgid "Scan"
+#~ msgstr "&Søg"
+
+#~ msgid "Reject any changes"
+#~ msgstr "Afvis enhver ændring"
+
+#~ msgid "Accept modifications"
+#~ msgstr "Acceptér ændringer"
+
+#~ msgid "New ..."
+#~ msgstr "Ny..."
+
+#, fuzzy
+#~ msgid "S&ummary"
+#~ msgstr "Opsamling"
+
+#, fuzzy
+#~ msgid "Det&ail"
+#~ msgstr "Detajler"
+
+#~ msgid "&Create"
+#~ msgstr "&Opret"
+
+#, fuzzy
+#~ msgid "Co&nfigure"
+#~ msgstr "Kon&figurér"
+
+#, fuzzy
+#~ msgid "&Yearly"
+#~ msgstr "Årligt"
+
+#~ msgid "Advanced Institution Settings"
+#~ msgstr "Avancerede institutions indstillinger"
+
+#, fuzzy
+#~ msgid "OFX Direct Connect Settings"
+#~ msgstr "Nulstil alle indstillinger"
+
+#, fuzzy
+#~ msgid "Commodity Editor"
+#~ msgstr "Vare"
+
+#, fuzzy
+#~ msgid "1/"
+#~ msgstr "1 /"
+
+#, fuzzy
+#~ msgid "Account Fraction"
+#~ msgstr "Konto-valg"
+
+#~ msgid "Alt+O"
+#~ msgstr "Alt+O"
+
+#~ msgid "Alt+C"
+#~ msgstr "Alt+C"
+
+#, fuzzy
+#~ msgid "Column 1"
+#~ msgstr "Kolonner"
+
+#~ msgid "Personal Information"
+#~ msgstr "Personlig information"
+
+#~ msgid "TextLabel2"
+#~ msgstr "TekstEtiket2"
+
+#~ msgid "TextLabel4"
+#~ msgstr "TekstEtiket4"
+
+#, fuzzy
+#~ msgid "Match Transaction..."
+#~ msgstr "&Rediger overførsler..."
+
+#, fuzzy
+#~ msgid "Match With This Transaction"
+#~ msgstr "Opdel overførsel"
+
+#~ msgid "Function not available"
+#~ msgstr "Funktion ikke tilgængelig"
+
+#~ msgid "Edit an account"
+#~ msgstr "Rediger en konto"
+
+#~ msgid ""
+#~ "The currently opened KMyMoney document does not contain a single asset "
+#~ "account. In order to maintain your finances you need at least one asset "
+#~ "account (e.g. your checkings account). KMyMoney will start the \"New "
+#~ "Account Wizard\" now which allows you to create your first asset account."
+#~ msgstr ""
+#~ "Det KMyMoney dokument der i øjeblikket er åbent indeholder ikke nogen "
+#~ "konti til aktiver. For at kunne holde styr på dine finanser så er det "
+#~ "nødvendigt at der findes mindst en konto for aktiver. Dette kunne for "
+#~ "eksempel være din lønkonto. KMyMoney vil nu starte guiden \"Ny konto\" så "
+#~ "du kan oprette din første konto til aktiver."
+
+#~ msgid "No asset account"
+#~ msgstr "Der er ingen konto til aktiver"
+
+#~ msgid "%1 (Plugin)..."
+#~ msgstr "%1 (Plugin)..."
+
+#~ msgid "GnuCash Importer"
+#~ msgstr "GnuCash Importerer"
+
+#, fuzzy
+#~ msgid "Importing templates..."
+#~ msgstr "Loader skabelon %1"
+
+#, fuzzy
+#~ msgid "Pa&yee"
+#~ msgstr "Betalingsmodtager"
+
+#, fuzzy
+#~ msgid "Summar&y"
+#~ msgstr "Opsamling"
+
+#, fuzzy
+#~ msgid "one month"
+#~ msgstr "Næste måned"
+
+#, fuzzy
+#~ msgid "one year"
+#~ msgstr "Næste år"
+
+#, fuzzy
+#~ msgid "one payment"
+#~ msgstr "Total betaling:"
+
+#~ msgid "Every four week"
+#~ msgstr "Hver fjerde uge"
+
+#, fuzzy
+#~ msgid "Ne&w"
+#~ msgstr "&Ny"
+
+#~ msgid "*.kmt|Account templates"
+#~ msgstr "*.kmt|Konto skabeloner"
+
+#~ msgid "Select account template(s)"
+#~ msgstr "Vælg kontoskabelon(er)"
+
+#, fuzzy
+#~ msgid "Convert 'em!!"
+#~ msgstr "Overfør fra"
+
+#~ msgid "Outbox"
+#~ msgstr "Udbakke"
+
+#~ msgid "Online update using HBCI..."
+#~ msgstr "Online opdatering ved brug af HBCI..."
+
+#~ msgid "&Bills/Deposits"
+#~ msgstr "&Regninger/Indsættelser"
+
+#~ msgid "&Reports"
+#~ msgstr "&Rapporter"
+
+#~ msgid "Add new account..."
+#~ msgstr "Tilføj konto"
+
+#~ msgid ""
+#~ "*.kmy|KMyMoney files\n"
+#~ "*.xml|XML Files\n"
+#~ "*.ANON.xml|Anonymous Files\n"
+#~ "*.*|All files"
+#~ msgstr ""
+#~ "*.kmy|KMyMoney filer\n"
+#~ "*.xml|XML Filer\n"
+#~ "*.ANON.xml|Anonyme Filer\n"
+#~ "*.*|Alle filer"
+
+#~ msgid "Toggle the statusbar..."
+#~ msgstr "Vis statusbar..."
+
+#~ msgid "Cannot remove account from institution"
+#~ msgstr "Kan ikke fjerne konto fra institution"
+
+#~ msgid "Cannot move account to institution"
+#~ msgstr "Kan ikke flytte konto til institution"
+
+#~ msgid "Show Top Categories Only"
+#~ msgstr "Vis kun topkategorier"
+
+#~ msgid "Transfer to/from %1"
+#~ msgstr "Overfør til/fra %1"
+
+#~ msgid "Unable to add category"
+#~ msgstr "Ude af stand til at tilføje kategori"
+
+#~ msgid "New Account..."
+#~ msgstr "Ny konto..."
+
+#~ msgid "KMyMoney Options"
+#~ msgstr "KMyMoney indstillinger"
+
+#~ msgid "Really delete this institution: "
+#~ msgstr "Vil du slette denne institution:"
+
+#~ msgid "Cannot delete institution: "
+#~ msgstr "Kan ikke slette institution:"
+
+#~ msgid "Cannot add bank"
+#~ msgstr "Kan ikke tilføje bank"
+
+#~ msgid "*.dat|Account templates"
+#~ msgstr "*.dat|Account skabeloner"
+
+#~ msgid "Select account template"
+#~ msgstr "Vælg konto skabelon"
+
+#~ msgid "Ready"
+#~ msgstr "Klar"
+
+#~ msgid "&Account Details"
+#~ msgstr "&Konto detaljer"
+
+#~ msgid "Open the account dialog"
+#~ msgstr "Åbn konto-dialogen"
+
+#~ msgid "<p><b>3.</b> Hit the Finish button when you're done."
+#~ msgstr "<p><b>3.</b> Tryk på Færdig, når du er færdig."
+
+#~ msgid "Cannot edit category: "
+#~ msgstr "Kan ikke redigere kategorien:"
+
+#~ msgid "Add price info"
+#~ msgstr "Tilføj prisinformation"
+
+#~ msgid "Update price info"
+#~ msgstr "Opdatér prisinformation"
+
+#~ msgid "1 Week %"
+#~ msgstr "1 uge %"
+
+#~ msgid "4 Weeks %"
+#~ msgstr "4 ugers %"
+
+#~ msgid "3 Months %"
+#~ msgstr "3 måneder %"
+
+#~ msgid "New payee..."
+#~ msgstr "Ny modtager..."
+
+#, fuzzy
+#~ msgid "Direct Debit"
+#~ msgstr "Direkte debet"
+
+#, fuzzy
+#~ msgid "Direct Deposit"
+#~ msgstr "Direkte indsættelse"
+
+#~ msgid "Write Check"
+#~ msgstr "Skriv check"
+
+#, fuzzy
+#~ msgid "Please fill in the From account field."
+#~ msgstr "Vælg kontoen"
+
+#, fuzzy
+#~ msgid "Please fill in the To account field."
+#~ msgstr "Vælg kontoen"
+
+#, fuzzy
+#~ msgid "Restrict by transaction state"
+#~ msgstr "Importér overførsler"
+
+#~ msgid "Pay to:"
+#~ msgstr "Betal til:"
+
+#~ msgid "From:"
+#~ msgstr "Fra:"
+
+#~ msgid "To:"
+#~ msgstr "Til:"
+
+#~ msgid "Amount:"
+#~ msgstr "Beløb:"
+
+#~ msgid "Category:"
+#~ msgstr "Kategori:"
+
+#~ msgid "Memo:"
+#~ msgstr "Note:"
+
+#~ msgid "<b>Name:</b>"
+#~ msgstr "<b>Navn:</b>"
+
+#~ msgid "<b>Type:</b>"
+#~ msgstr "<b>Type:</b>"
+
+#~ msgid "<b>Payee:</b>"
+#~ msgstr "<b>Betalingsmodtager</b>"
+
+#~ msgid "<b>Category:</b>"
+#~ msgstr "<b>Kategori:</b>"
+
+#, fuzzy
+#~ msgid "<b>From (account):</b>"
+#~ msgstr "<b>Beløb:</b>"
+
+#~ msgid "<b>Memo:</b>"
+#~ msgstr "<b>Note:</b>"
+
+#, fuzzy
+#~ msgid "<b>To (account):</b>"
+#~ msgstr "<b>Beløb:</b>"
+
+#~ msgid "<b>Date:</b>"
+#~ msgstr "<b>Dato</b>"
+
+#~ msgid "<b>Amount:</b>"
+#~ msgstr "<b>Beløb:</b>"
+
+#, fuzzy
+#~ msgid "Equity-Symbol:"
+#~ msgstr "Egenkapital symbol:"
+
+#~ msgid "New Account"
+#~ msgstr "Ny konto"
+
+#~ msgid "Institution Selection"
+#~ msgstr "Institutionsvalg"
+
+#~ msgid "<u>I</u>nstitution"
+#~ msgstr "<u>I</u>nstitution"
+
+#~ msgid "Account Type Selection"
+#~ msgstr "Valg af kontotype"
+
+#~ msgid "What is the account number?"
+#~ msgstr "Hvad er kontonummeret?"
+
+#~ msgid "What is the opening balance and date of this account?"
+#~ msgstr "Hvad er åbningsbalancen og datoen på denne konto?"
+
+#~ msgid "&Price"
+#~ msgstr "&Pris"
+
+#~ msgid "Payee changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Modtager ændret. Gammel: \"%1\", Ny: \"%2\""
+
+#~ msgid "Category changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Kategori ændret. Gammel: \"%1\", Ny: \"%2\""
+
+#~ msgid "Memo changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Note ændret. Gammel: \"%1\", Ny: \"%2\""
+
+#~ msgid "Amount changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Beløb ændret. Gammel: \"%1\", Ny: \"%2\""
+
+#~ msgid "The date must lie in the range %1 to %2"
+#~ msgstr "Datoen skal ligge i intervallet %1 til %2"
+
+#, fuzzy
+#~ msgid "What is the opening balance and date of this brokerage account?"
+#~ msgstr "Hvad er åbningsbalancen og datoen på denne BROKARAGE konto?"
+
+#~ msgid "Please enter the payment amount."
+#~ msgstr "Indtast betalingsbeløbet."
+
+#, fuzzy
+#~ msgid "Please enter the schedule name."
+#~ msgstr "Indtast skema navn"
+
+#~ msgid "Please enter the payee name."
+#~ msgstr "Indtast betalingsmodtagerens navn"
+
+#~ msgid "Please select the account."
+#~ msgstr "Vælg kontoen"
+
+#~ msgid "Use the cash account type to manage activities in your wallet."
+#~ msgstr "Brug kontakt-kontoen til at styre aktiviteterne i din pung."
+
+#~ msgid ""
+#~ "Use the asset account type to manage assets (e.g. your house, car or art "
+#~ "collection)."
+#~ msgstr ""
+#~ "Brug kontotypen Aktiver til at holde styr på de ting du ejer eller "
+#~ "værdier har til gode. Det kan være ting såsom din bil, dit hus, eller "
+#~ "penge du har i banken."
+
+#~ msgid "Explanation is not yet available! UnknownAccountType will be set"
+#~ msgstr ""
+#~ "Forklaring er endnu ikke tilgængelig! UkendtKontoType vil blive brugt"
+
+#~ msgid "Account with that name already exists."
+#~ msgstr "En konto med det navn findes allerede."
+
+#~ msgid "Category with that name already exists."
+#~ msgstr "En kategori med det navn findes allerede."
+
+#~ msgid "Alt+N"
+#~ msgstr "Alt+N"
+
+#~ msgid "Alt+M"
+#~ msgstr "Alt+M"
+
+#~ msgid "Alt+D"
+#~ msgstr "Alt+D"
+
+#~ msgid "Alt+R"
+#~ msgstr "Alt+R"
+
+#~ msgid "Alt+Q"
+#~ msgstr "Alt+Q"
+
+#~ msgid "Alt+A"
+#~ msgstr "Alt+A"
+
+#~ msgid "Alt+E"
+#~ msgstr "Alt+E"
+
+#~ msgid "<b>From:</b>"
+#~ msgstr "<b>Fra:</b>"
+
+#~ msgid "<b>To:</b>"
+#~ msgstr "<b>Til:</b>"
+
+#~ msgid "Yahoo Currency"
+#~ msgstr "Yahoo valuta"
+
+#~ msgid "Alt+B"
+#~ msgstr "Alt+B"
+
+#~ msgid "Alt+U"
+#~ msgstr "Alt+U"
+
+#~ msgid "Alt+F"
+#~ msgstr "Alt+F"
+
+#~ msgid "Alt+P"
+#~ msgstr "Alt+P"
+
+#~ msgid "Form1"
+#~ msgstr "Form1"
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 0000000..0ed3fac
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,13674 @@
+# translation of de.po to
+# This file is put in the public domain.
+#
+# Jochen Rundholz <jochen_r@gmx.de>, 2005.
+# Frank Schmischke <frank.schmischke@t-online.de>, 2006.
+# Holger Bunzel <holger.bunzel@gmx.net>, 2006.
+# Marko <marko.kaening@email.de>, 2008.
+# Marko Kaening <mk-lists@email.de>, 2008.
+# yllohy <yllohy@googlemail.com>, 2008, 2009.
+# Thomas Baumgart <ipwizard@users.sourceforge.net>, 2006, 2007, 2008, 2009.
+# Thomas Baumgart <thb@net-bembel.de>, 2009.
+# Markus Drexelius <markusd112@web.de>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: de\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-25 19:04+0200\n"
+"PO-Revision-Date: 2009-10-17 11:11+0200\n"
+"Last-Translator: Markus Drexelius <markusd112@web.de>\n"
+"Language-Team: Deutsch <kde-i18n-de@kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 0.3\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: wizards/wizardpages/rc.cpp:1
+msgid ""
+"Select groups of accounts that correspond to the ways that you will use "
+"KMyMoney. Each group you select will cause several accounts and categories "
+"to be created. Select the groups that are relevant to you. You can always "
+"create additional accounts manually later."
+msgstr ""
+"Wählen Sie die Kontenstrukturen, die Ihrer Benutzungsweise von KMyMoney am "
+"besten entspricht. Jede Kontengruppe, die Sie auswählen, wird mehrere "
+"Konten und Kategorien erzeugen. Wählen Sie die für Sie relevanten Gruppen. "
+"Sie können später jederzeit neue Konten erstellen."
+
+#: wizards/wizardpages/rc.cpp:2
+msgid ""
+"<p>KMyMoney supports multiple currencies, nevertheless one of them will be "
+"used as your base currency. The base currency is used as default for new "
+"accounts and reports. Please select the base currency from the following "
+"list."
+msgstr ""
+"<p>KMyMoney unterstützt mehrere Währungen, aber eine von ihnen wird als Ihre "
+"Basiswährung benutzt. Die Basiswährung wird als Voreinstellung für neue "
+"Konten und Berichte benutzt. Bitte wählen Sie die Basiswährung aus der "
+"folgenden Liste."
+
+#: dialogs/kequitypriceupdatedlg.cpp:71 dialogs/rc.cpp:399 dialogs/rc.cpp:485
+#: dialogs/rc.cpp:724 dialogs/settings/rc.cpp:108 reports/listtable.cpp:226
+#: views/kinvestmentview.cpp:71 views/kpayeesview.cpp:351 views/rc.cpp:13
+#: widgets/rc.cpp:5 widgets/rc.cpp:34
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1599
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1629
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1673
+#: wizards/wizardpages/rc.cpp:3
+msgid "Name"
+msgstr "Name"
+
+#: wizards/wizardpages/rc.cpp:4
+msgid "ISO Code"
+msgstr "ISO Code"
+
+#: dialogs/kequitypriceupdatedlg.cpp:69 dialogs/kequitypriceupdatedlg.cpp:70
+#: dialogs/rc.cpp:71 dialogs/rc.cpp:725 dialogs/settings/rc.cpp:112
+#: views/kinvestmentview.cpp:72 widgets/rc.cpp:37 wizards/wizardpages/rc.cpp:5
+msgid "Symbol"
+msgstr "Symbol"
+
+#: wizards/wizardpages/rc.cpp:6
+msgid ""
+"<p>Use the fields below to enter some information about yourself.</p>\n"
+"\n"
+"<p>All information is optional and only used to personalize your KMyMoney "
+"file.</p>"
+msgstr ""
+"<p>Verwenden Sie diesen Dialog, um Ihre persönlichen Informationen "
+"einzugeben.</p>\n"
+"\n"
+"<p>Alle Informationen sind optional und werden zur Personalisierung Ihrer "
+"KMyMoney-Datei hinterlegt.</p>"
+
+#: dialogs/rc.cpp:425 wizards/newuserwizard/rc.cpp:27
+#: wizards/wizardpages/rc.cpp:7
+msgid "Town:"
+msgstr "Ort:"
+
+#: dialogs/rc.cpp:420 wizards/newuserwizard/rc.cpp:22
+#: wizards/wizardpages/rc.cpp:8
+msgid "County/State:"
+msgstr "Land:"
+
+#: dialogs/rc.cpp:391 dialogs/rc.cpp:421 wizards/newuserwizard/rc.cpp:23
+#: wizards/wizardpages/rc.cpp:9
+msgid "Street:"
+msgstr "Straße:"
+
+#: dialogs/rc.cpp:422 wizards/newuserwizard/rc.cpp:24
+#: wizards/wizardpages/rc.cpp:10
+msgid "Email:"
+msgstr "E-Mail:"
+
+#: dialogs/rc.cpp:424 wizards/newuserwizard/rc.cpp:26
+#: wizards/wizardpages/rc.cpp:11
+msgid "Telephone:"
+msgstr "Telefon:"
+
+#: dialogs/rc.cpp:423 wizards/newuserwizard/rc.cpp:25
+#: wizards/wizardpages/rc.cpp:12
+msgid "Your name:"
+msgstr "Ihr Name:"
+
+#: dialogs/rc.cpp:427 wizards/newuserwizard/rc.cpp:29
+#: wizards/wizardpages/rc.cpp:13
+msgid "Load from Addressbook"
+msgstr "Aus dem Adressbuch laden"
+
+#: dialogs/rc.cpp:392 dialogs/rc.cpp:426 views/rc.cpp:68
+#: wizards/wizardpages/rc.cpp:14
+msgid "Postal Code:"
+msgstr "PLZ:"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:82
+msgid "KMyMoney New Account Setup"
+msgstr "KMyMoney Neues Konto erstellen"
+
+#: dialogs/rc.cpp:360 dialogs/rc.cpp:361 reports/listtable.cpp:230
+#: wizards/newaccountwizard/knewaccountwizard.cpp:83
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1616
+#: wizards/newaccountwizard/rc.cpp:61
+msgid "Institution"
+msgstr "Geldinstitut"
+
+#: dialogs/investactivities.cpp:198 dialogs/investactivities.cpp:286
+#: dialogs/investactivities.cpp:367 dialogs/kfindtransactiondlg.cpp:181
+#: dialogs/rc.cpp:139 dialogs/rc.cpp:192 dialogs/rc.cpp:207
+#: dialogs/transactioneditor.cpp:734 reports/listtable.cpp:201
+#: reports/pivottable.cpp:1336 reports/pivottable.cpp:1586
+#: views/kforecastview.cpp:393 views/kgloballedgerview.cpp:175
+#: views/khomeview.cpp:418 views/khomeview.cpp:491 views/khomeview.cpp:525
+#: views/khomeview.cpp:764 views/khomeview.cpp:967 views/khomeview.cpp:1437
+#: views/kscheduledview.cpp:71 views/rc.cpp:17 views/rc.cpp:44
+#: widgets/kmymoneyaccounttreebase.cpp:58
+#: widgets/kmymoneyaccounttreeforecast.cpp:41 widgets/rc.cpp:109
+#: widgets/register.cpp:566 widgets/transaction.cpp:978
+#: widgets/transaction.cpp:1535
+#: wizards/newaccountwizard/knewaccountwizard.cpp:84
+msgid "Account"
+msgstr "Konto"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:85
+msgid "Broker"
+msgstr "Broker"
+
+#: dialogs/kfindtransactiondlg.cpp:225 dialogs/rc.cpp:70 dialogs/rc.cpp:104
+#: dialogs/rc.cpp:159 dialogs/rc.cpp:223 dialogs/rc.cpp:246 dialogs/rc.cpp:751
+#: dialogs/settings/rc.cpp:109 widgets/rc.cpp:35 widgets/register.cpp:568
+#: wizards/newaccountwizard/knewaccountwizard.cpp:86
+msgid "Details"
+msgstr "Details"
+
+#: dialogs/knewloanwizard.cpp:636 dialogs/rc.cpp:231 dialogs/rc.cpp:608
+#: kmymoneyutils.cpp:191 views/khomeview.cpp:399
+#: wizards/newaccountwizard/knewaccountwizard.cpp:87
+#: wizards/newaccountwizard/knewaccountwizard.cpp:880
+msgid "Payments"
+msgstr "Zahlungen"
+
+#: dialogs/investactivities.cpp:195 dialogs/investactivities.cpp:283
+#: dialogs/investactivities.cpp:422 dialogs/investtransactioneditor.cpp:217
+#: reports/listtable.cpp:221 widgets/transaction.cpp:1565
+#: wizards/newaccountwizard/knewaccountwizard.cpp:88
+msgid "Fees"
+msgstr "Gebühren"
+
+#: dialogs/rc.cpp:624 views/khomeview.cpp:415 views/khomeview.cpp:488
+#: views/khomeview.cpp:522 wizards/newaccountwizard/knewaccountwizard.cpp:89
+msgid "Schedule"
+msgstr "Planung"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:90
+msgid "Payout"
+msgstr "Auszahlung"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:91
+msgid "Parent Account"
+msgstr "Elternkonto"
+
+#: dialogs/rc.cpp:719 wizards/newaccountwizard/knewaccountwizard.cpp:92
+#: wizards/newuserwizard/knewuserwizard.cpp:86
+msgid "Finish"
+msgstr "Fertigstellen"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:248
+msgid "Credit card payment"
+msgstr "Kreditkartenzahlung"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:264
+#, c-format
+msgid "Loan payment for %1"
+msgstr "Kreditzahlung für %1"
+
+#: mymoney/mymoneyscheduled.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:279
+msgid "Loan payment"
+msgstr "Kreditzahlung"
+
+#: dialogs/rc.cpp:134 wizards/newaccountwizard/knewaccountwizard.cpp:293
+msgid "Amortization"
+msgstr "Tilgung"
+
+#: dialogs/investactivities.cpp:196 dialogs/investactivities.cpp:284
+#: dialogs/investactivities.cpp:366 dialogs/investactivities.cpp:423
+#: dialogs/investtransactioneditor.cpp:227 dialogs/rc.cpp:135
+#: dialogs/rc.cpp:152 dialogs/rc.cpp:544 reports/listtable.cpp:222
+#: widgets/transaction.cpp:1597
+#: wizards/newaccountwizard/knewaccountwizard.cpp:302
+msgid "Interest"
+msgstr "Zinsen"
+
+#: dialogs/kcurrencycalculator.cpp:282
+#: wizards/newaccountwizard/knewaccountwizard.cpp:351
+#: wizards/newaccountwizard/knewaccountwizard.cpp:356
+msgid "User"
+msgstr "Benutzer"
+
+#: kmymoneyutils.cpp:64 mymoney/mymoneyaccount.cpp:711
+#: reports/querytabletest.cpp:422
+#: wizards/newaccountwizard/knewaccountwizard.cpp:451
+msgid "Checking"
+msgstr "Girokonto"
+
+#: kmymoneyutils.cpp:66 mymoney/mymoneyaccount.cpp:714
+#: wizards/newaccountwizard/knewaccountwizard.cpp:452
+msgid "Savings"
+msgstr "Sparkonto"
+
+#: kmymoneyutils.cpp:68 mymoney/mymoneyaccount.cpp:717
+#: reports/querytabletest.cpp:423
+#: wizards/newaccountwizard/knewaccountwizard.cpp:453
+msgid "Credit Card"
+msgstr "Kreditkarte"
+
+#: kmymoneyutils.cpp:70 mymoney/mymoneyaccount.cpp:720
+#: wizards/newaccountwizard/knewaccountwizard.cpp:454
+msgid "Cash"
+msgstr "Bargeld"
+
+#: kmymoneyutils.cpp:72 mymoney/mymoneyaccount.cpp:723
+#: wizards/newaccountwizard/knewaccountwizard.cpp:455
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+msgid "Loan"
+msgstr "Kredit"
+
+#: kmymoneyutils.cpp:76 mymoney/mymoneyaccount.cpp:729
+#: wizards/newaccountwizard/knewaccountwizard.cpp:456
+msgid "Investment"
+msgstr "Wertpapierdepot"
+
+#: converter/mymoneytemplate.cpp:178 converter/mymoneytemplate.cpp:179
+#: dialogs/knewaccountdlg.cpp:1014 kmymoneyutils.cpp:80
+#: mymoney/mymoneyaccount.cpp:735 views/kaccountsview.cpp:352
+#: views/kmymoneyview.cpp:765 widgets/kmymoneyaccountselector.cpp:177
+#: widgets/kmymoneyaccountselector.cpp:356
+#: wizards/newaccountwizard/knewaccountwizard.cpp:457
+msgid "Asset"
+msgstr "Anlagen"
+
+#: converter/mymoneytemplate.cpp:182 converter/mymoneytemplate.cpp:183
+#: dialogs/knewaccountdlg.cpp:1016 kmymoneyutils.cpp:82
+#: mymoney/mymoneyaccount.cpp:738 views/kaccountsview.cpp:356
+#: views/kmymoneyview.cpp:766 widgets/kmymoneyaccountselector.cpp:178
+#: widgets/kmymoneyaccountselector.cpp:363
+#: wizards/newaccountwizard/knewaccountwizard.cpp:458
+msgid "Liability"
+msgstr "Verbindlichkeiten"
+
+#: converter/mymoneytemplate.cpp:194 converter/mymoneytemplate.cpp:195
+#: kmymoneyutils.cpp:94 mymoney/mymoneyaccount.cpp:756
+#: views/kaccountsview.cpp:369 views/kmymoneyview.cpp:769
+#: widgets/kmymoneyaccountselector.cpp:181
+#: widgets/kmymoneyaccountselector.cpp:390
+#: wizards/newaccountwizard/knewaccountwizard.cpp:460
+msgid "Equity"
+msgstr "Eigenkapital"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid ""
+"Please make sure to enter the correct conversion for the selected opening "
+"date. If you requested an online quote it might be provided for a different "
+"date."
+msgstr ""
+"Stellen Sie sicher, den korrekten Umrechnungskurs für das Eröffnungsdatum "
+"des Kontos einzugeben. Falls Sie eine Online-Quelle für den Kurs verwenden "
+"mag dieser für ein anderes Datum gelten."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid "Check date"
+msgstr "Datum prüfen"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:562
+msgid "1 %1 equals %2"
+msgstr "1 %1 entspricht %2"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:577
+msgid "Conversion rate is not positive"
+msgstr "Umrechnungskurs ist nicht positiv"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:583
+msgid "No account name supplied"
+msgstr "Kein Kontoname angegeben"
+
+#: dialogs/keditscheduledlg.cpp:114 mymoney/mymoneyscheduled.cpp:1026
+#: wizards/newaccountwizard/knewaccountwizard.cpp:680
+msgid "Write check"
+msgstr "Scheck ausstellen"
+
+#: dialogs/keditscheduledlg.cpp:111 mymoney/mymoneyscheduled.cpp:1014
+#: wizards/newaccountwizard/knewaccountwizard.cpp:682
+msgid "Direct debit"
+msgstr "Lastschrifteinzug"
+
+#: dialogs/keditscheduledlg.cpp:113 mymoney/mymoneyscheduled.cpp:1032
+#: wizards/newaccountwizard/knewaccountwizard.cpp:683
+msgid "Bank transfer"
+msgstr "Überweisung"
+
+#: dialogs/keditscheduledlg.cpp:112 mymoney/mymoneyscheduled.cpp:1029
+#: wizards/newaccountwizard/knewaccountwizard.cpp:685
+msgid "Standing order"
+msgstr "Dauerauftrag"
+
+#: dialogs/keditscheduledlg.cpp:110 mymoney/mymoneyscheduled.cpp:1020
+#: wizards/newaccountwizard/knewaccountwizard.cpp:686
+msgid "Manual deposit"
+msgstr "Bareinzahlung"
+
+#: dialogs/keditscheduledlg.cpp:109 mymoney/mymoneyscheduled.cpp:1017
+#: wizards/newaccountwizard/knewaccountwizard.cpp:687
+msgid "Direct deposit"
+msgstr "Überweisung"
+
+#: dialogs/keditscheduledlg.cpp:115 mymoney/mymoneyscheduled.cpp:1023
+#: wizards/newaccountwizard/knewaccountwizard.cpp:688
+msgid "Other"
+msgstr "Andere"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:697
+msgid "CreditCard %1 monthly payment"
+msgstr "Geschätzter monatlicher Betrag für Kreditkarte %1"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:703
+msgid "Finish entry and create account"
+msgstr "Eingabe beenden und Konto anlegen"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:705
+msgid "Finish entry and create account and schedule"
+msgstr "Eingabe beenden und Konto sowie Planung anlegen"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:708
+msgid "Next due date is prior to opening date"
+msgstr "Nächster Zahlungstermin liegt vor Eröffnungsdatum"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:712
+msgid "No account selected"
+msgstr "Kein Konto ausgewählt"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:716
+msgid "No amount for payment selected"
+msgstr "Kein Betrag für Zahlung ausgewählt"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:720
+msgid "No payee for payment selected"
+msgstr "Kein Zahlungsempfänger für Zahlung ausgewählt"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:724
+msgid "No name assigned for schedule"
+msgstr "Kein Name für geplante Zahlung zugewiesen"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:805
+msgid "No payee supplied"
+msgstr "Kein Zahlungsempfänger angegeben"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:819
+msgid "No opening balance supplied"
+msgstr "Kein Eröffnungssaldo angegeben"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:826
+msgid "An interest change can only happen after the first payment"
+msgstr "Eine Zinsänderung kann nur nach der ersten Zahlung stattfinden"
+
+#: dialogs/knewloanwizard.cpp:615 dialogs/knewloanwizard.cpp:634
+#: wizards/newaccountwizard/knewaccountwizard.cpp:884
+#: wizards/newaccountwizard/rc.cpp:55
+msgid "Months"
+msgstr "Monate"
+
+#: dialogs/knewloanwizard.cpp:616 dialogs/knewloanwizard.cpp:635
+#: wizards/newaccountwizard/knewaccountwizard.cpp:885
+#: wizards/newaccountwizard/knewaccountwizard.cpp:889
+#: wizards/newaccountwizard/rc.cpp:56
+msgid "Years"
+msgstr "Jahre"
+
+#: dialogs/knewloanwizard.cpp:711
+#: wizards/newaccountwizard/knewaccountwizard.cpp:961
+#, c-format
+msgid "KMyMoney has calculated the amount of the loan as %1."
+msgstr "KMyMoney hat die Kreditsumme zu %1 berechnet."
+
+#: dialogs/knewloanwizard.cpp:718
+#: wizards/newaccountwizard/knewaccountwizard.cpp:968
+msgid "KMyMoney has calculated the interest rate to %1%."
+msgstr "KMyMoney hat den Zinssatz zu %1% berechnet."
+
+#: dialogs/knewloanwizard.cpp:731
+#: wizards/newaccountwizard/knewaccountwizard.cpp:981
+msgid ""
+"KMyMoney has calculated a periodic payment of %1 to cover principal and "
+"interest."
+msgstr ""
+"KMyMoney hat die Summe für die laufende Zahlung (Zins und Tilgung) zu %1 "
+"berechnet."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:993
+#, c-format
+msgid ""
+"The number of payments has been decremented and the balloon payment has been "
+"modified to %1."
+msgstr ""
+"Die Anzahl der Zahlungen wurde verringert und die abschließende Zahlung "
+"wurde auf %1 geändert."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1001
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1021
+#, c-format
+msgid "The balloon payment has been modified to %1."
+msgstr "Die abschließende Zahlung wurde auf %1 geändert."
+
+#: dialogs/knewloanwizard.cpp:763
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1013
+msgid "KMyMoney has calculated the term of your loan as %1. "
+msgstr "KMyMoney hat für Ihren Kredit eine Laufzeit von %1 berechnet. "
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1052
+msgid "KMyMoney has calculated a balloon payment of %1 for this loan."
+msgstr "KMyMoney hat für Ihren Kredit eine abschließende Zahlung von %1 berechnet."
+
+#: dialogs/knewloanwizard.cpp:809
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1059
+msgid "KMyMoney has successfully verified your loan information."
+msgstr "KMyMoney hat die Informationen zum Kredit erfolgreich überprüft."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1067
+msgid ""
+"You have entered mis-matching information. Please modify your figures or "
+"leave one value empty to let KMyMoney calculate it for you"
+msgstr ""
+"Sie haben widersprüchliche Informationen eingegeben. Bitte ändern Sie Ihre "
+"Daten oder lassen Sie ein Feld frei, um es von KMyMoney berechnen zu lassen"
+
+#: dialogs/knewloanwizard.cpp:504 dialogs/knewloanwizard.cpp:513
+#: dialogs/knewloanwizard.cpp:522 dialogs/knewloanwizard.cpp:532
+#: dialogs/knewloanwizard.cpp:820
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1070
+msgid "Calculation error"
+msgstr "Berechnungsfehler"
+
+#: dialogs/knewloanwizard.cpp:824
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1074
+msgid ""
+"\n"
+"\n"
+"Accept this or modify the loan information and recalculate."
+msgstr ""
+"\n"
+"\n"
+"Sie können die ermittelten Werte übernehmen oder die Informationen ändern "
+"und neu berechnen."
+
+#: dialogs/knewloanwizard.cpp:826
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1076
+msgid "Calculation successful"
+msgstr "Berechnung erfolgreich"
+
+#: dialogs/knewloanwizard.cpp:846
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1129
+#, c-format
+msgid ""
+"_n: one month\n"
+"%n months"
+msgstr ""
+"Ein Monat\n"
+"%n Monate"
+
+#: dialogs/knewloanwizard.cpp:850
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1133
+#, c-format
+msgid ""
+"_n: one year\n"
+"%n years"
+msgstr ""
+"Ein Jahr\n"
+"%n Jahre"
+
+#: dialogs/knewloanwizard.cpp:854
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1137
+#, c-format
+msgid ""
+"_n: one payment\n"
+"%n payments"
+msgstr ""
+"Eine Zahlung\n"
+"%n Zahlungen"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1190
+msgid "Press Calculate to verify the values"
+msgstr "\"Berechnung\" drücken um Werte zu verifizieren"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1194
+msgid "Not all details supplied"
+msgstr "Nicht alle Details angegeben"
+
+#: dialogs/kaccountselectdlg.cpp:70 dialogs/knewloanwizard.cpp:122
+#: dialogs/knewloanwizard.cpp:136
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1381
+msgid "&Create..."
+msgstr "&Erstellen..."
+
+#: dialogs/knewloanwizard.cpp:138
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1383
+msgid "Create a new asset account"
+msgstr "Neues Anlagekonto anlegen"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1384
+msgid "If the asset account does not yet exist, press this button to create it."
+msgstr ""
+"Wenn das Anlagenkonto noch nicht existiert, drücken sie diesen Knopf um es "
+"anzulegen."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1596
+msgid "Account information"
+msgstr "Konto-Informationen"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1601
+#: wizards/newaccountwizard/rc.cpp:59
+msgid "Subaccount of"
+msgstr "Unterkonto von"
+
+#: dialogs/rc.cpp:225 dialogs/rc.cpp:326 dialogs/rc.cpp:371 dialogs/rc.cpp:723
+#: plugins/ofximport/dialogs/rc.cpp:23 reports/listtable.cpp:225
+#: widgets/kmymoneyaccounttreebase.cpp:113 widgets/register.cpp:61
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1606
+msgid "Type"
+msgstr "Typ"
+
+#: dialogs/kcurrencyeditdlg.cpp:62 dialogs/rc.cpp:56 dialogs/rc.cpp:59
+#: dialogs/rc.cpp:75 dialogs/rc.cpp:727 dialogs/rc.cpp:792
+#: kmymoneyutils.cpp:84 kmymoneyutils.cpp:111 mymoney/mymoneyaccount.cpp:741
+#: mymoney/mymoneysecurity.cpp:169 reports/listtable.cpp:233
+#: widgets/kmymoneypriceview.cpp:127
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1607
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1630
+#: wizards/newaccountwizard/rc.cpp:6 wizards/newaccountwizard/rc.cpp:24
+msgid "Currency"
+msgstr "Währung"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1608
+#: wizards/newaccountwizard/rc.cpp:7 wizards/newuserwizard/rc.cpp:9
+msgid "Opening date"
+msgstr "Eröffnungsdatum"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1610
+#: wizards/newaccountwizard/rc.cpp:9
+msgid "Conversion rate"
+msgstr "Umrechnungskurs"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1613
+#: wizards/newaccountwizard/rc.cpp:15 wizards/newuserwizard/rc.cpp:13
+msgid "Opening balance"
+msgstr "Eröffnungssaldo"
+
+#: dialogs/keditscheduledlg.cpp:507 dialogs/transactioneditor.cpp:784
+#: dialogs/transactioneditor.cpp:848 plugins/ofximport/dialogs/rc.cpp:22
+#: widgets/rc.cpp:111 widgets/register.cpp:59 widgets/transaction.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1618
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1632
+msgid "Number"
+msgstr "Nummer"
+
+#: dialogs/rc.cpp:365 wizards/newaccountwizard/knewaccountwizard.cpp:1621
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1634
+#: wizards/newaccountwizard/rc.cpp:26 wizards/newaccountwizard/rc.cpp:66
+msgid "IBAN"
+msgstr "IBAN"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1627
+msgid "Brokerage Account"
+msgstr "Verrechnungskonto"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1640
+msgid "Loan information"
+msgstr "Darlehen-Informationen"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1643
+msgid "Amount borrowed"
+msgstr "Geliehener Betrag"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1645
+msgid "Amount lent"
+msgstr "Verliehener Betrag"
+
+#: dialogs/rc.cpp:515 dialogs/rc.cpp:546
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1647
+#: wizards/newaccountwizard/rc.cpp:75
+msgid "Interest rate"
+msgstr "Zinssatz"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1648
+msgid "Interest rate is"
+msgstr "Zinssatz"
+
+#: dialogs/rc.cpp:509 dialogs/rc.cpp:572
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1649
+msgid "Principal and interest"
+msgstr "Zins und Tilgung"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1650
+#: wizards/newaccountwizard/rc.cpp:90
+msgid "Additional fees"
+msgstr "Zusätzliche Kosten"
+
+#: dialogs/rc.cpp:525 wizards/newaccountwizard/knewaccountwizard.cpp:1651
+#: wizards/newaccountwizard/rc.cpp:44
+msgid "Payment frequency"
+msgstr "Zahlungshäufigkeit"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1652
+#: wizards/newaccountwizard/rc.cpp:105
+msgid "Payment account"
+msgstr "Zahlungskonto"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1655
+msgid "Payout information"
+msgstr "Zahlungsinformationen"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1658
+msgid "Refinance"
+msgstr "Refinanzieren"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1661
+msgid "Transfer amount to"
+msgstr "Betrag umbuchen auf"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1663
+msgid "Transfer amount from"
+msgstr "Betrag umbuchen von"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1665
+msgid "Payment date"
+msgstr "Zahlung am"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1671
+msgid "Schedule information"
+msgstr "Geplante Zahlungen"
+
+#: reports/listtable.cpp:228
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1684
+msgid "Occurence"
+msgstr "Erscheinen"
+
+#: mymoney/mymoneyscheduled.cpp:891 mymoney/mymoneyscheduled.cpp:947
+#: mymoney/mymoneyscheduled.cpp:1283 mymoney/mymoneyscheduletest.cpp:1343
+#: widgets/rc.cpp:19 widgets/rc.cpp:74
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+msgid "Monthly"
+msgstr "Monatlich"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1677
+msgid "Paid from"
+msgstr "Gültig ab"
+
+#: widgets/kmymoneycombo.cpp:473 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1678
+msgid "Pay to"
+msgstr "Zahlen an"
+
+#: dialogs/investactivities.cpp:197 dialogs/investactivities.cpp:285
+#: dialogs/investactivities.cpp:365 dialogs/kfindtransactiondlg.cpp:197
+#: dialogs/kmymoneysplittable.cpp:80 dialogs/rc.cpp:51 dialogs/rc.cpp:212
+#: reports/listtable.cpp:197 views/khomeview.cpp:421 views/khomeview.cpp:494
+#: views/khomeview.cpp:528 views/kscheduledview.cpp:73 views/rc.cpp:63
+#: widgets/register.cpp:58 widgets/transaction.cpp:1055
+#: widgets/transaction.cpp:1578 widgets/transaction.cpp:1610
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1679
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1685
+msgid "Amount"
+msgstr "Betrag"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1680
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1686
+msgid "First payment due"
+msgstr "Erste Zahlung fällig am"
+
+#: dialogs/rc.cpp:102 wizards/newaccountwizard/knewaccountwizard.cpp:1681
+#: wizards/newaccountwizard/rc.cpp:115
+msgid "Payment method"
+msgstr "Zahlungsmethode"
+
+#: wizards/newaccountwizard/rc.cpp:1
+msgid ""
+"This page summarizes the data you have entered. Press <b>Finish</b> to "
+"create the account, schedules, etc. or use <b>Back</b> to modify your "
+"entries."
+msgstr ""
+"Diese Seite zeigt eine Zusammenfassung der eingegebenen Daten. Wählen Sie "
+"<b>Finish</b>, um das Konto, die Zeitpläne, etc. zu erstellen, oder <b>Back</"
+"b>, um die Einträge zu verändern."
+
+#: wizards/newaccountwizard/rc.cpp:2
+msgid "Item"
+msgstr "Eintrag"
+
+#: dialogs/rc.cpp:110 dialogs/rc.cpp:165 dialogs/rc.cpp:252 dialogs/rc.cpp:757
+#: dialogs/rc.cpp:818 views/kinvestmentview.cpp:74 widgets/register.cpp:574
+#: wizards/newaccountwizard/rc.cpp:3
+msgid "Value"
+msgstr "Wert"
+
+#: wizards/newaccountwizard/rc.cpp:4
+msgid ""
+"Enter the name of the account under which it is known within KMyMoney.\n"
+"Select the type for the new account. Use the <b>What's this?</b> feature to "
+"see more details about the various account types.\n"
+"Enter the date the account was opened and its currency."
+msgstr ""
+"Geben Sie den Namen des Kontos ein, unter dem es in KMyMoney bekannt ist.\n"
+"Wählen Sie den Typ für das neue Konto. Benutzen Sie Rechtsklick+<b>Was ist "
+"das?</b>, um mehr über die verschiedenen Kontotypen zu erfahren.\n"
+"Geben Sie das Datum ein, an dem das Konto erstellt wurde, und seine Währung."
+
+#: wizards/newaccountwizard/rc.cpp:5
+msgid "Select the currency in which this account is denominated."
+msgstr "Wählen Sie die Währung in der dieses Konto geführt wird."
+
+#: wizards/newaccountwizard/rc.cpp:8
+msgid ""
+"The opening balance is the balance of the account when you start using it "
+"with KMyMoney. For new accounts this is usually 0 but for existing accounts "
+"this may well differ. Please consult the account statements to figure out "
+"this value. The opening balance is to be provided in the currency of the "
+"account as selected with the currency button."
+msgstr ""
+"Der Eröffnungssaldo ist der Kontostand des Kontos zu dem Datum an dem sie "
+"damit anfangen, das Konto mit KMyMoney zu verwalten. Für neue Konten ist "
+"dies in der Regel 0, für bestehende Konten wird hier aber durchaus ein "
+"bestimmter Betrag einzutragen sein. Bitte entnehmen Sie den korrekten Wert "
+"dem letzen Kontoauszug, den Sie nicht mehr mit KMyMoney verwalten wollen. "
+"Sollten Sie diesen nicht zur Hand haben, können Sie den Betrag später "
+"ändern. Der Eröffnungssaldo muss in der Währung des Kontos - wie mit dem "
+"Währungsschalter gewählt - anzugeben."
+
+#: wizards/newaccountwizard/rc.cpp:10
+msgid ""
+"The opening date would be the date of the last statement. In case you want "
+"to keep track of transactions prior to this date, enter the ending balance "
+"and statement date of a prior statement and add all following transactions "
+"into KMyMoney.\n"
+"<br>\n"
+"<i>Note</i>: If you do not know the exact amount of the opening balance, "
+"enter an estimate. You can change this value later before you reconcile this "
+"account for the first time."
+msgstr ""
+"Geben Sie den Abschlußsaldo des letzten Kontoauszuges ein. Wenn Sie "
+"Buchungen aufzeichnen wollen, die auf früheren Auszügen aufgeführt sind, "
+"geben Sie den Abschlußsaldo des darvorliegenden Auszugs ein.\n"
+"<br>\n"
+"Hinweis: Wollen Sie alle Buchungen auf diesem Konto aufzeichnen geben Sie 0 "
+"als Anfangssaldo ein. Sollten Sie den genauen Anfangssaldo nicht kennen, "
+"geben Sie einen Schätzwert ein. Sie können den Betrag später korrigieren, "
+"bevor Sie das Konto erstmals abgleichen."
+
+#: dialogs/rc.cpp:52 dialogs/rc.cpp:54 dialogs/rc.cpp:57 dialogs/rc.cpp:60
+#: dialogs/rc.cpp:748 dialogs/rc.cpp:749 dialogs/rc.cpp:768 widgets/rc.cpp:6
+#: widgets/rc.cpp:7 widgets/rc.cpp:8 widgets/rc.cpp:9 widgets/rc.cpp:10
+#: widgets/rc.cpp:11 widgets/rc.cpp:12 widgets/rc.cpp:13 widgets/rc.cpp:14
+#: widgets/rc.cpp:15 widgets/rc.cpp:16 widgets/rc.cpp:17
+#: wizards/newaccountwizard/rc.cpp:11 wizards/newaccountwizard/rc.cpp:88
+#: wizards/newaccountwizard/rc.cpp:91 wizards/newaccountwizard/rc.cpp:93
+#: wizards/newuserwizard/rc.cpp:14
+msgid "xxx"
+msgstr "xxx"
+
+#: wizards/newaccountwizard/rc.cpp:12
+msgid "Account type"
+msgstr "Konto-Typ"
+
+#: wizards/newaccountwizard/rc.cpp:13
+msgid ""
+"For foreign currencies an initial conversion rate needs to be provided. This "
+"should be the price of the foreign currency in the base currency on the "
+"opening date of the account."
+msgstr ""
+"Für Fremdwährungen muss ein initialer Umrechnungskurs angegeben werden. "
+"Dieser soll dem Kurs der Fremdwährung in der Basiswährung am angegbenen Tag "
+"der Kontoöffnung entsprechen."
+
+#: wizards/newaccountwizard/rc.cpp:14
+msgid "Account name"
+msgstr "Kontoname"
+
+#: wizards/newaccountwizard/rc.cpp:16
+msgid ""
+"<p><b>Checking</b>\n"
+"Use the checking account type to manage activities on your checking account "
+"e.g. payments, checks and cash card purchases.</p>\n"
+"\n"
+"<p><b>Savings</b>\n"
+"Use the savings account type to manage activities on your savings account.</"
+"p>\n"
+"\n"
+"<p><b>Credit Card</b>\n"
+"Use the credit card account type to manage activities on your credit card.</"
+"p>\n"
+"\n"
+"<p><b>Cash</b>\n"
+"\n"
+"Use the cash account type to manage activities in your wallet.</p>\n"
+"\n"
+"<p><b>Loan</b>\n"
+"Use the loan account type to manage amortization loans (e.g. mortgages, car "
+"loan, money you lend, private loans etc.).</p>\n"
+"\n"
+"<p><b>Investment</b>\n"
+"Use the investment account to manage your stock, mutual fund and other "
+"investments.</p>\n"
+"\n"
+"<p><b>Asset</b>\n"
+"Use the asset account type to manage assets (e.g. your house, car or art "
+"collection).</p>\n"
+"\n"
+"<p><b>Liability</b>\n"
+"Use the liability account type to manage any type of liability except "
+"amortization loans. Use it for taxes you owe or money you borrowed from "
+"friends. For amortization loans like mortgages you should create a loan "
+"account.</p>"
+msgstr ""
+"<p><b>Girokonto</b>\n"
+"Benutzen Sie den Typ Girokonto, um ein Girokonto zu verwalten,z.B. Zahlungen "
+"und Gehaltseingänge.</p>\n"
+"\n"
+"<p><b>Sparkonto</b>\n"
+"Benutzen Sie den Typ Sparkonto, um ein Sparkonto zu verwalten.</p>\n"
+"\n"
+"<p><b>Kreditkarte</b>\n"
+"Benutzen Sie den Typ Kreditkarte, um eine Kreditkarte zu verwalten.</p>\n"
+"\n"
+"<p><b>Bargeld</b>\n"
+"\n"
+"Benutzen Sie den Typ Bargeld, um Ihren Geldbeutel zu verwalten.</p>\n"
+"\n"
+"<p><b>Kredit</b>\n"
+"Benutzen Sie den Typ Kredit, um Kredite zu verwalten, z.B. Hypotheken, "
+"Autokredite, verliehenes Geld, Privatekredite, etc.</p>\n"
+"\n"
+"<p><b>Wertpapierdepot</b>\n"
+"Benutzen Sie den Typ Wertpapierdepot, um Ihre Aktien, Ihr Investmentfonds "
+"und andere Geldanlagen zu verwalten.</p>\n"
+"\n"
+"<p><b>Vermögen</b>\n"
+"Benutzen Sie den Typ Vermögen, um Ihr materielles Vermögen zu verwalten, z."
+"B. ein Haus, ein Auto oder eine Kunstsammlung.</p>\n"
+"\n"
+"<p><b>Verbindlichkeiten</b>\n"
+"Benutzen Sie den Typ Verbindlichkeiten, um jede Art von Schulden, außer "
+"Kredite, zu verwalten. Benutzen Sie es für Steuern oder von Freunden "
+"geliehenes Geld. Für amortisierende Schulden, wie Hypotheken, sollten Sie "
+"den Typ Kredit wählen.</p>"
+
+#: wizards/newaccountwizard/rc.cpp:17
+msgid "Preferred account"
+msgstr "Bevorzugtes Konto"
+
+#: wizards/newaccountwizard/rc.cpp:18
+msgid "Mark this checkbox if the account should be maintained as preferred account"
+msgstr ""
+"Aktivieren Sie das Kästchen, um dieses Konto als bevorzugtes Konto zu "
+"markieren"
+
+#: wizards/newaccountwizard/rc.cpp:19
+msgid ""
+"Selecting the <b>Preferred Account</b> checkbox will allow preferred access "
+"in some dialogs and views of KMyMoney."
+msgstr ""
+"Die Anwahl von \"Bevorzugtes Konto\" erlaubt eine vorrangige Anzeige dieses "
+"Kontos in einigen Dialogen von KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:20
+msgid "Enter a name under which this account is known within KMyMoney."
+msgstr "Bitte einen Namen angeben unter dem das Konto in KMyMoney bekannt ist."
+
+#: wizards/newaccountwizard/rc.cpp:21
+msgid "Online quote"
+msgstr "Online-Kursnotizen"
+
+#: wizards/newaccountwizard/rc.cpp:22
+msgid ""
+"Does this investment account have a brokerage account?<p>\n"
+"\n"
+"<b>Check</b> the mark if this investment account has an associated account "
+"for money that is not invested.<br>\n"
+"\n"
+"<b>Uncheck</b> it if you don't use this account for active stock brokerage. "
+"You should also uncheck it if this account is not maintained by a bank or "
+"broker."
+msgstr ""
+"Hat dieses Wertpapierdepot ein Verrechnungskonto?<p>\n"
+"\n"
+"Wählen Sie <b>Check</b> falls dem Wertpapierdepot ein Konto zugeordnet ist "
+"für Geld, das nicht investiert ist.<br>\n"
+"\n"
+"Wählen Sie <b>Uncheck</b> falls Sie dieses Konto nicht für aktive "
+"Börsengeschäfte nutzen. Das sollten Sie ebenfalls wählen, falls dieses Konto "
+"nicht bei einer Bank oder einem Händler geführt wird."
+
+#: wizards/newaccountwizard/rc.cpp:23
+msgid "Create brokerage account"
+msgstr "Verrechnungskonto erstellen"
+
+#: wizards/newaccountwizard/rc.cpp:25 wizards/newaccountwizard/rc.cpp:64
+msgid "Account number"
+msgstr "Kontonummer"
+
+#: wizards/newaccountwizard/rc.cpp:27
+msgid ""
+"Please select the required options. Please use the <b>What's this?</b> "
+"feature to see more information about the items."
+msgstr ""
+"Bitte wählen Sie die gewünschten Optionen aus. Benutzen Sie Rechtsklick"
+"+<b>Was ist das?</b> Werkzeug, um mehr Informationen über die Einträge zu "
+"erhalten."
+
+#: wizards/newaccountwizard/rc.cpp:28
+msgid "What is the type of the loan?"
+msgstr "Was ist der Typ des Darlehens?"
+
+#: dialogs/rc.cpp:481 wizards/newaccountwizard/rc.cpp:29
+msgid "I am borrowing money"
+msgstr "Ich nehme einen Kredit auf"
+
+#: dialogs/rc.cpp:482 wizards/newaccountwizard/rc.cpp:30
+msgid "I am lending money"
+msgstr "Ich gebe einen Kredit"
+
+#: wizards/newaccountwizard/rc.cpp:31
+msgid "Who is the payee/payer of the loan?"
+msgstr "Wer ist der Zahler/Empfänger des Darlehens?"
+
+#: wizards/newaccountwizard/rc.cpp:32
+msgid ""
+"Enter the name of the person or bank you owe money or who owes you money.\n"
+"\n"
+"If the name does not exist within KMyMoney's database, you are asked if you "
+"want to create it."
+msgstr ""
+"Geben Sie den Namen der Person oder der Bank ein, der sie Geld schulden oder "
+"die Ihnen Geld schuldet.\n"
+"\n"
+"Wenn der Name noch nicht in der Datenbank von KMyMoney existiert, werden Sie "
+"gefragt, ob er erstellt werden soll."
+
+#: wizards/newaccountwizard/rc.cpp:33
+msgid "Did you make/receive any payments yet?"
+msgstr "Wurden schon Zahlungen geleistet?"
+
+#: wizards/newaccountwizard/rc.cpp:36
+msgid ""
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?\n"
+"\n"
+"Note: Payments made to obtain the loan (e.g. Disagio) are not considered as "
+"payments in this context."
+msgstr ""
+"Gab es bereits Zahlungen für diesen Kredit, gleichgültig ob sie schon in "
+"KMyMoney eingetragen sind oder nicht?\n"
+"Hinweis: Beträge, die zum Erhalt des Kredits an den Kreditgeber gezahlt "
+"wurden (z.B. Disagio) werden in diesem Zusammenhang nicht als Zahlung "
+"angesehen."
+
+#: wizards/newaccountwizard/rc.cpp:37
+msgid "Which payments do you want to record?"
+msgstr "Welche Zahlungen wollen Sie verwalten?"
+
+#: wizards/newaccountwizard/rc.cpp:38
+msgid "All payments"
+msgstr "Alle Zahlungen"
+
+#: wizards/newaccountwizard/rc.cpp:39
+msgid "Start with this year's payments"
+msgstr "Zahlungen seit Beginn diesen Jahres"
+
+#: wizards/newaccountwizard/rc.cpp:40
+msgid ""
+"<qt>Select which transactions should be recorded.\n"
+"\n"
+"<b>All payments</b> allows you to enter all payments made for this loan.\n"
+"\n"
+"The option to <b>start from the beginning of the current year</b> is meant "
+"for loans that are active for a longer period of time already and you don't "
+"want to enter all transactions of the past.\n"
+"</qt>"
+msgstr ""
+"<qt>Wählen Sie aus, welche Zahlungen Sie mit diesem Programm verwalten "
+"möchten.\n"
+"\n"
+"<b>Alle Zahlungen</b> erlaubt es Ihnen, alle schon geleisteten Zahlungen für "
+"diesen Kredit einzugeben.\n"
+"\n"
+"<b>Zahlungen seit Beginn diesen Jahres</b> ist für Kredite gedacht, die "
+"schon längere Zeit laufen, und wenn Sie nicht alle geleisteten Zahlung "
+"eingeben möchten.\n"
+"</qt>"
+
+#: wizards/newaccountwizard/rc.cpp:41
+msgid "Balance before start of recording"
+msgstr "Saldo vor Beginn der Aufnahme"
+
+#: wizards/newaccountwizard/rc.cpp:42
+msgid ""
+"Enter the ending balance found on the statement that is the last one before "
+"you want to start recording this loan in KMyMoney."
+msgstr ""
+"Wenn Sie nur Zahlungen seit Beginn diesen Jahres aufnehmen möchten und "
+"vorherige Zahlungen von KMyMoney nicht aufgenommen werden, sollten Sie hier "
+"den am 1. Januar diesen Jahres ausstehenden Kreditbetrag eingeben."
+
+#: wizards/newaccountwizard/rc.cpp:43
+msgid ""
+"You have selected to record only payments from the beginning of this year. "
+"Since prior transactions will not be recorded, you need to supply the "
+"balance of the loan on January 1st of this year."
+msgstr ""
+"Sie haben angegeben, dass Sie nur Zahlungen seit Beginn diesen Jahres "
+"aufnehmen möchten. Da vorherige Zahlungen nicht aufgenommen werden, sollten "
+"Sie hier den am 1. Januar diesen Jahres ausstehenden Kreditbetrag eingeben."
+
+#: wizards/newaccountwizard/rc.cpp:45
+msgid "Interest Compounding frequency"
+msgstr "Häufigkeit der Zinssatzänderung"
+
+#: wizards/newaccountwizard/rc.cpp:46
+msgid ""
+"Select the frequency with which the interest is compounded. If uncertain, "
+"select the same as the payment frequency. Consult your loan contract for "
+"details."
+msgstr ""
+"Wählen Sie die Häufigkeit mit der sich der Zins ändert. Wenn Sie sich "
+"unsicher sind, wählen Sie sie so wie die Zahlungshäufigkeit. Konsultieren "
+"Sie gegebenenfalls Ihren Kreditvertrag für weitere Einzelheiten."
+
+#: wizards/newaccountwizard/rc.cpp:47
+msgid "Due date of first payment to be recorded"
+msgstr "Datum der ersten Zahlung"
+
+#: wizards/newaccountwizard/rc.cpp:48
+msgid ""
+"Depending on the answer to <b>What do you want to record?</b> this field "
+"means the following:<p>\n"
+"\n"
+"<b>All payments</b><br>\n"
+"Enter the due date of the very first payment<p>\n"
+"\n"
+"<b>Start with this year's payments</b><br>\n"
+"Enter the due date of the first payment in the current year"
+msgstr ""
+"Abhängig von der Antwort auf <b>Welche Zahlungen wollen Sie verwalten</b> "
+"bedeutet dieses Feld folgendes:<p>\n"
+"\n"
+"<b>Alle Zahlungen</b><br>\n"
+"Geben Sie das Fälligkeitsdatum der ersten Zahlung ein<p>\n"
+"\n"
+"<b>Zahlungen seit Beginn diesen Jahres</b><br>\n"
+"Geben Sie das Fälligkeitsdatum der ersten Zahlung diesen Jahres ein"
+
+#: wizards/newaccountwizard/rc.cpp:49
+msgid "Type of interest rate"
+msgstr "Art der Zinsen"
+
+#: wizards/newaccountwizard/rc.cpp:50
+msgid "Fixed"
+msgstr "Fest"
+
+#: wizards/newaccountwizard/rc.cpp:51
+msgid "Variable"
+msgstr "Variabel"
+
+#: wizards/newaccountwizard/rc.cpp:52
+msgid "Time between interest changes"
+msgstr "Zeit zwischen Zinsänderungen"
+
+#: dialogs/knewloanwizard.cpp:613 wizards/newaccountwizard/rc.cpp:53
+msgid "Days"
+msgstr "Tage"
+
+#: dialogs/knewloanwizard.cpp:614 wizards/newaccountwizard/rc.cpp:54
+msgid "Weeks"
+msgstr "Wochen"
+
+#: wizards/newaccountwizard/rc.cpp:57
+msgid "Next interest change is due"
+msgstr "Nächste Zinssatzänderung am"
+
+#: wizards/newaccountwizard/rc.cpp:58
+msgid "This page allows you to select the parent account."
+msgstr "Auf dieser Seite können Sie das Elternkonto auswählen."
+
+#: wizards/newaccountwizard/rc.cpp:60
+msgid ""
+"If this account is managed by an institution please select the institution "
+"from the list. If the institution does not exist yet, please choose the "
+"<b>New Institution</b> button to create it. Otherwise, leave this field "
+"empty.\n"
+"Enter the account number used by the institution to identify the account."
+msgstr ""
+"Wenn dieses Konto von einem Geldinstitut verwaltet wird, wählen Sie es bitte "
+"aus der Liste. Falls das Geldinstitut noch nicht existiert, wählen Sie "
+"<b>Neues Geldinstitut</b>, um es zu erstellen. Ansonsten lassen Sie dieses "
+"Feld leer.\n"
+"Geben Sie die Kontonummer ein, die von der Bank vergeben wurde."
+
+#: wizards/newaccountwizard/rc.cpp:62
+msgid "Select the institution which manages this account or leave empty"
+msgstr "Wählen Sie das Geldinstitut, welches dieses Konto verwaltet, oder leer lassen"
+
+#: wizards/newaccountwizard/rc.cpp:63
+msgid "New Institution"
+msgstr "Neues Geldinstitut"
+
+#: wizards/newaccountwizard/rc.cpp:65
+msgid ""
+"Accounts managed by an institution are usually referenced by a unique number "
+"the so called account number. Enter that number here.\n"
+"\n"
+"KMyMoney currently uses this number only for some online banking functions."
+msgstr ""
+"Bankkonten haben meist eine eindeutige Kontonummer. Diese können Sie hier "
+"eingeben.\n"
+"\n"
+"KMyMoney benutzt die Kontonummer nur für Online-Banking Funktionen."
+
+#: wizards/newaccountwizard/rc.cpp:67
+msgid "Enter the International Bank Account Number into this field"
+msgstr "Geben Sie die IBAN in dieses Feld ein"
+
+#: wizards/newaccountwizard/rc.cpp:68
+msgid ""
+"You can enter the IBAN (International Bank Account Number) into this field "
+"if you know it. Usually, people at your institution can tell you the number "
+"or it is printed on your statements.\n"
+"\n"
+"See also http://en.wikipedia.org/wiki/International_Bank_Account_Number for "
+"more information.\n"
+"\n"
+"KMyMoney keeps this field only for documentation purposes and does not use "
+"it otherwise."
+msgstr ""
+"In dieses Feld können Sie die IBAN (International Bank Account Number) "
+"eintragen, falls Sie sie kennen. Diese Zahl findet man meist auf dem "
+"Kontoauszug oder direkt bei der Bank.\n"
+"\n"
+"Für mehr Informationen, schauen Sie unter http://en.wikipedia.org/wiki/"
+"International_Bank_Account_Number.\n"
+"\n"
+"KMyMoney bietet dieses Feld nur für Dokumentierungszwecke und benutzt es für "
+"nichts anderes."
+
+#: wizards/newaccountwizard/rc.cpp:69
+msgid ""
+"Now enter the details for your loan. You can leave one of the fields empty "
+"and KMyMoney will calculate it when you press the <b>Calculate</b> button. "
+"Before you can continue with the next page you also need to press "
+"<b>Calculate</b> so that KMyMoney can check the logical correctness of the "
+"values you have supplied."
+msgstr ""
+"Geben Sie nun die Details für diesen Kredit ein. Wenn Sie eines der Felder "
+"leer lassen, wird KMyMoney es berechnen, wenn Sie <b>Berechnen</b> wählen. "
+"Bevor Sie fortfahren können, müssen Sie <b>Berechnen</b> drücken, so dass "
+"KMyMoney die logische Korrektheit der von Ihnen angegebenen Werte prüfen "
+"kann."
+
+#: wizards/newaccountwizard/rc.cpp:70
+msgid "The interest rate gets calculated"
+msgstr "Der Zinssatz wird berechnet"
+
+#: wizards/newaccountwizard/rc.cpp:71
+msgid "when the payment is received"
+msgstr "wenn die Zahlung erfolgt ist"
+
+#: wizards/newaccountwizard/rc.cpp:72
+msgid "when the payment is due"
+msgstr "wenn die Zahlung fällig ist"
+
+#: dialogs/rc.cpp:531 dialogs/rc.cpp:533 wizards/newaccountwizard/rc.cpp:73
+msgid "Loan amount"
+msgstr "Kreditbetrag"
+
+#: wizards/newaccountwizard/rc.cpp:74
+msgid ""
+"Enter the amount of the loan in this field. If you want to calculate this "
+"field out of the other parameters, please leave it empty. If the field is "
+"marked as required (colored background) you have informed KMyMoney about the "
+"fact that there were already some payments towards the loan. In this case, "
+"please enter the ending balance of your last statement."
+msgstr ""
+"Geben Sie den Kreditbetrag hier ein. Wenn Sie ihn berechnen möchten, füllen "
+"Sie die anderen Parameter aus und lassen Sie diesen bitte leer. Wenn das "
+"Feld als notwendig markiert ist (gefärbter Hintergrund), dann haben Sie "
+"KMyMoney darüber informiert, dass es bereits Zahlungen für diesen Kredit "
+"gab. In diesem Fall geben Sie bitte die Abschlussbilanz Ihrer letzten "
+"Abrechnung ein."
+
+#: wizards/newaccountwizard/rc.cpp:76
+msgid ""
+"Please enter the interest rate in percent or leave the field empty to "
+"calculate it."
+msgstr ""
+"Bitte geben Sie den Zinssatz in Prozent an oder lassen Sie das Feld leer, um "
+"ihn berechnen zu lassen."
+
+#: dialogs/rc.cpp:559 wizards/newaccountwizard/rc.cpp:77
+msgid "Term"
+msgstr "Laufzeit"
+
+#: wizards/newaccountwizard/rc.cpp:78
+msgid ""
+"Please enter the term of this loan or enter 0 to calculate it. The term is "
+"the time that is required to fully repay the loan. This time might be "
+"different from the time your loan contract is signed for."
+msgstr ""
+"Bitte geben Sie die Laufzeit des Kredits ein oder lassen Sie das Feld leer, "
+"um die Laufzeit von KMyMoney berechnen zu lassen. Die Laufzeit ist die Zeit, "
+"die benötigt wird, bis der Kredit vollständig abgezahlt ist. Diese Zeit kann "
+"von der Dauer des Kreditvertrages abweichen. Evtl. ist auch eine Restschuld "
+"vereinbart (Abschlusstilgung)."
+
+#: wizards/newaccountwizard/rc.cpp:79
+msgid "Payment (principal and interest)"
+msgstr "Zins und Tilgung"
+
+#: wizards/newaccountwizard/rc.cpp:80
+msgid ""
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"Bitte geben Sie den Betrag an, den Sie für Zinsen und Tilgung zahlen, oder "
+"lassen Sie das Feld leer, um diesen Wert berechnen zu lassen."
+
+#: wizards/newaccountwizard/rc.cpp:81
+msgid "Balloon payment"
+msgstr "Eine Zahlung"
+
+#: wizards/newaccountwizard/rc.cpp:82
+msgid ""
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"Bitte geben Sie den Betrag für die abschließende Tilgung ein oder lassen Sie "
+"das Feld leer, um diesen Betrag vom Assistenten berechnen zu lassen. Wollen "
+"Sie den Kredit vollständig tilgen tragen Sie 0,00 ein."
+
+#: wizards/newaccountwizard/rc.cpp:83
+msgid "Calculate"
+msgstr "Berechnen"
+
+#: wizards/newaccountwizard/rc.cpp:84
+msgid "Press this button to calculate/verify your loan details."
+msgstr "Drücken Sie diesen Knopf um ihre Darlehens-Details zu berechnen/verifizieren."
+
+#: wizards/newaccountwizard/rc.cpp:85
+msgid ""
+"Pressing this button calculates a possibly missing parameter for your loan "
+"or verifies that the values entered match. If something is not correct you "
+"will receive information about it."
+msgstr ""
+"Dieser Knopf bewirkt die Berechnung von möglicherweise fehlenden Parametern "
+"Ihres Kredits und die Überprüfung, dass die Werte zusammenpassen. Wenn etwas "
+"nicht korrekt ist, werden Sie darüber informiert."
+
+#: wizards/newaccountwizard/rc.cpp:86
+msgid ""
+"Now enter the information required for the periodic loan payments. If your "
+"regular payments contains any additional fees, click on the <b>Additional "
+"fees</b> button to enter them."
+msgstr ""
+"Geben Sie hier die erforderlichen Informationen für periodische "
+"Kreditzahlungen ein. Wenn Ihre Zahlungen Zusatzkosten beinhalten, wählen Sie "
+"<b>Zusätzliche Kosten</b>, um diese einzugeben."
+
+#: wizards/newaccountwizard/rc.cpp:87
+msgid "Principal + Interest"
+msgstr "Zins + Tilgung"
+
+#: dialogs/rc.cpp:620 wizards/newaccountwizard/rc.cpp:89
+msgid "+"
+msgstr "+"
+
+#: wizards/newaccountwizard/rc.cpp:92
+msgid "= periodical payments"
+msgstr "= laufende Zahlungen"
+
+#: dialogs/rc.cpp:643 wizards/newaccountwizard/rc.cpp:94
+msgid ""
+"If this loan is for an asset, such as a car or a house, you can create the "
+"asset account now. An asset account represents the total value of an asset. "
+"The money from this loan will be transfered into the asset account you "
+"create or select.\n"
+"If this loan is a 'consumer loan' (money to use however you want), you can "
+"use a checking account instead."
+msgstr ""
+"Wenn dieses Darlehen für die Finanzierung eines Aktivpostens, wie z.B. ein "
+"Auto oder Haus verwendet wird, können Sie jetzt ein entsprechendes "
+"Anlagekonto erzeugen. Das Anlagekonto repräsentiert damit den Wert der "
+"Anlage. Eine Transferbuchung zum Übertragen des Darlehensbetrages auf das "
+"Anlagekonto wird erzeugt.\n"
+"Wenn dieses Darlehen ein Konsumdarlehen ist (Geld für was auch immer), "
+"empfiehlt es sich, statt eines Anlagekontos ein Girokonto zu eröffnen."
+
+#: dialogs/rc.cpp:644 wizards/newaccountwizard/rc.cpp:95
+msgid "Don't create payout transaction"
+msgstr "Keine Auzahlungsbuchung erzeugen"
+
+#: wizards/newaccountwizard/rc.cpp:96
+msgid "Refinance existing loan"
+msgstr "Refinanzierung eines existierenden Darlehens"
+
+#: wizards/newaccountwizard/rc.cpp:97
+msgid "Check this if you are refinancing a loan that already exists in KMyMoney"
+msgstr ""
+"Hier markieren, falls Sie einen Kredit refinanzieren, der bereits in "
+"KMyMoney existiert"
+
+#: dialogs/rc.cpp:642 wizards/newaccountwizard/rc.cpp:98
+msgid "Asset Account"
+msgstr "Anlagekonto"
+
+#: dialogs/rc.cpp:2 wizards/newaccountwizard/rc.cpp:99
+msgid "Create"
+msgstr "Erstellen"
+
+#: wizards/newaccountwizard/rc.cpp:100
+msgid "Loan account"
+msgstr "Kreditkonto"
+
+#: dialogs/rc.cpp:646 wizards/newaccountwizard/rc.cpp:101
+msgid "Date of payment"
+msgstr "Zahlungsdatum"
+
+#: wizards/newaccountwizard/rc.cpp:102
+msgid ""
+"KMyMoney creates a schedule for this payment and reminds you whenever a "
+"payment must be made. Please select the account to/from which payments will "
+"be made and the category the interest will be assigned to.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"KMyMoney wird einen Zahlungplan erstellen und Sie jeweils bei Fälligkeit "
+"erinnern. Bitte wählen Sie das Konto, zu/von dem Zahlungen erfolgen werden, "
+"und die Kategorie, in die die Zinszahlungen eingeordnet werden.<p>\n"
+"Dieses Datum wurde bereits erfasst, falls Sie <b>Alle Zahlungen</b> "
+"ausgewählt haben. Sollten Sie <b>Zahlungen seit Beginn diesen Jahres</b> "
+"ausgewählt haben, so ist das <b>erste Fälligkeitsdatum</b> das Datum, an dem "
+"die erste Zahlung diesen Jahres geleistet wurde."
+
+#: dialogs/rc.cpp:613 wizards/newaccountwizard/rc.cpp:103
+msgid "Interest category"
+msgstr "Zinskategorie"
+
+#: wizards/newaccountwizard/rc.cpp:104
+msgid ""
+"The category the interest part of the payment will be assigned to. If you "
+"borrow money you usually have to pay interest, so this should be an expense "
+"category. If you lend the money, you receive the interest. In this case, "
+"select an income category here."
+msgstr ""
+"Die Kategorie, der der Zinsanteil der Zahlungen zugeordnet wird. Wenn man "
+"einen Kredit aufnimmt, zahlt man üblicherweise Zinsen, also sollte dies eine "
+"Ausgabekategorie sein. Wenn Sie Geld verleihen, dann erhalten Sie die "
+"Zinsen. In diesem Fall, wählen Sie eine Einnahmekategorie."
+
+#: wizards/newaccountwizard/rc.cpp:106
+msgid ""
+"Select the account from which you make your periodical payments or where you "
+"receive regular payments in case you lend the money. In most cases, this is "
+"a checking account."
+msgstr ""
+"Wählen Sie das Konto, von dem Sie periodische Zahlungen leisten oder "
+"empfangen, falls sie Geld verleihen. Meist ist dies ein Girokonto."
+
+#: dialogs/rc.cpp:519 wizards/newaccountwizard/rc.cpp:107
+msgid "First payment due on"
+msgstr "Erste Zahlung fällig am"
+
+#: wizards/newaccountwizard/rc.cpp:108
+msgid ""
+"For credit card accounts you can create a monthly schedule which will "
+"automatically remind you about the payment. Please fill in the details about "
+"this payment here."
+msgstr ""
+"Für Kreditkartenkonten können Sie einen monatlichen Zahlungsplan einrichten, "
+"der Sie automatisch an die Zahlung erinnern wird. Bitte geben Sie die "
+"Details für diese Zahlung hier ein."
+
+#: wizards/newaccountwizard/rc.cpp:109
+msgid "Yes, remind me when the payment is due"
+msgstr "Ja, erinnern, sobald die Zahlung fällig ist"
+
+#: wizards/newaccountwizard/rc.cpp:110
+msgid "Name of schedule"
+msgstr "Name der geplanten Zahlung"
+
+#: dialogs/rc.cpp:151 dialogs/rc.cpp:218 dialogs/rc.cpp:219
+#: reports/listtable.cpp:199 views/kscheduledview.cpp:72 widgets/rc.cpp:113
+#: widgets/register.cpp:57 wizards/newaccountwizard/rc.cpp:111
+msgid "Payee"
+msgstr "Zahlungsempfänger"
+
+#: wizards/newaccountwizard/rc.cpp:112
+msgid "Estimated monthly payment"
+msgstr "Geschätzter monatlicher Betrag"
+
+#: wizards/newaccountwizard/rc.cpp:113
+msgid "Due date of next payment"
+msgstr "Fälligkeit der nächsten Zahlung"
+
+#: wizards/newaccountwizard/rc.cpp:114
+msgid ""
+"Payment should be made\n"
+"from account"
+msgstr ""
+"Anstehende Zahlung\n"
+"ausführen von Konto"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:79
+msgid "KMyMoney New File Setup"
+msgstr "KMyMoney Neue Datei erstellen"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:81
+msgid "Introduction"
+msgstr "Einführung"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:82
+msgid "Personal Data"
+msgstr "Persönliche Daten"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:83
+msgid "Select Currency"
+msgstr "Währung auswählen"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:84
+msgid "Select Accounts"
+msgstr "Wähle Konten"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:85
+msgid "Set preferences"
+msgstr "Präferenzen setzen"
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid ""
+"Unable to load data, because no contact has been associated with the owner "
+"of the standard addressbook."
+msgstr ""
+"Kann keine Daten laden, da kein Kontakt mit dem Besitzer des "
+"Standardadressbuches verknüpft ist."
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid "Addressbook import"
+msgstr "Import aus Adressbuch"
+
+#: wizards/newuserwizard/rc.cpp:1
+msgid ""
+"A typical KMyMoney user maintains a checking a account with some institution "
+"and uses it to receive money or pay bills. If this is not the case, please "
+"deselect the checkbox below and continue on the next page."
+msgstr ""
+"Ein typischer Nutzer von KMyMoney unterhält ein Girokonto bei einer Bank und "
+"benutzt es, um Geld zu empfangen oder Rechnungen zu bezahlen. Wenn dies bei "
+"Ihnen nicht der Fall ist, schalten Sie bitte die Option unten aus und fahren "
+"Sie zur nächsten Seite fort."
+
+#: wizards/newuserwizard/rc.cpp:2
+msgid "I have a checking account that I want to manage with KMyMoney"
+msgstr "Ich habe ein Girokonto das ich mit KMyMoney verwalten möchte"
+
+#: wizards/newuserwizard/rc.cpp:3
+msgid "The name of the instititution that issued the account."
+msgstr "Der Name der Institution, die das Konto zur Verfügung stellt."
+
+#: wizards/newuserwizard/rc.cpp:4
+msgid ""
+"Each institution has a routing number. Enter it here. If uncertain, leave "
+"the field blank. You can modify it later."
+msgstr ""
+"Geben Sie bitte hier die Bankleitzahl Ihrer Bank ein. Sie können den Wert "
+"auch leer lassen und ihn später verändern."
+
+#: wizards/newuserwizard/rc.cpp:5
+msgid "Name of the institution"
+msgstr "Name des Geldinstituts"
+
+#: wizards/newuserwizard/rc.cpp:6
+msgid "Routing number"
+msgstr "Bankleitzahl"
+
+#: wizards/newuserwizard/rc.cpp:7
+msgid ""
+"In general the institution that issued the account also issued a number for "
+"it. Enter it here. If uncertain, you can modify this entry later."
+msgstr ""
+"Wenn das Konto eine Kontonummer hat, geben Sie diese bitte hier ein. Auch "
+"diesen Eintrag können Sie später noch bearbeiten."
+
+#: wizards/newuserwizard/rc.cpp:8
+msgid ""
+"Enter a descriptive name that will be used by KMyMoney to identify your "
+"checking account."
+msgstr ""
+"Wählen Sie bitte einen aussagekräftigen Namen, der von KMyMoney für Ihr "
+"Girokonto benutzt wird."
+
+#: wizards/newuserwizard/rc.cpp:10
+msgid ""
+"Enter the date from when on you plan to keep track of the transactions in "
+"that account. This is usually the date of the last statement. If uncertain, "
+"leave as is."
+msgstr ""
+"Bitte geben Sie das Datum ein, ab dem Sie die Buchungen dieses Kontos "
+"verwalten möchten. Dies ist üblicherweise das Datum des letzten "
+"Kontoauszugs. Wenn unklar, können Sie die Voreinstellung benutzen."
+
+#: wizards/newuserwizard/rc.cpp:11
+msgid "Number of the account"
+msgstr "Kontonummer"
+
+#: wizards/newuserwizard/rc.cpp:12
+msgid "Name of the account"
+msgstr "Name des Kontos"
+
+#: wizards/newuserwizard/rc.cpp:15
+msgid ""
+"Enter the opening balance of the account. This is usually the ending balance "
+"of the last statement. If uncertain, leave as is."
+msgstr ""
+"Bitte geben Sie das Eröffnungssaldo des Kontos ein. Das ist üblicherweise "
+"das Endguthaben auf dem letzten Kontoauszug. Wenn unsicher, wählen Sie die "
+"Voreinstellung."
+
+#: wizards/newuserwizard/rc.cpp:16
+msgid ""
+"The fields below allow you to enter some information about your checking "
+"account. Once this wizard finishes, the account will be created for you "
+"within KMyMoney."
+msgstr ""
+"Die Felder unten erlauben Ihnen, einige Informationen Ihres Girokontos "
+"einzugeben. Sobald dieser Assistent beendet ist, wird das Konto für Sie in "
+"KMyMoney erzeugt."
+
+#: wizards/newuserwizard/rc.cpp:17
+msgid ""
+"KMyMoney supports multiple currencies. Your reports will be based on a "
+"default curreny which you can select here. The default for new accounts is "
+"also the currency you select here."
+msgstr ""
+"KMyMoney unterstützt zahlreiche Währungen. Wählen Sie hier Ihre "
+"Standardwährung. Sie wird für Berichte benutzt und dient als Voreinstellung "
+"für neue Konten."
+
+#: wizards/newuserwizard/rc.cpp:18
+msgid ""
+"KMyMoney will store your financial data in a file on the disk. A standard "
+"filename within your KDE user environment will be the default. This is just "
+"provided for convenience and you can choose any other location here."
+msgstr ""
+"KMyMoney wird Ihre Finanzdaten in einer Datei auf der Festplatte speichern. "
+"Ein Dateiname und ein Verzeichnis innerhalb der Benutzerumgebung von KDE ist "
+"voreingestellt. Sie können aber auch jeden beliebigen anderen Speicherort "
+"auswählen."
+
+#: wizards/newuserwizard/rc.cpp:19
+msgid ""
+"Either the currently selected file exists or the selected directory does not "
+"exist. Please make sure, that\n"
+"\n"
+"<ul>\n"
+"<li>the selected directory exists and</li>\n"
+"<li>the filename is not currently used in this directory.</li>\n"
+"</ul>"
+msgstr ""
+"Entweder existiert die gewählte Datei bereits oder das Verzeichnis dorthin "
+"existiert nicht. Bitte stellen Sie sicher, dass\n"
+"\n"
+"<ul>\n"
+"<li>das gewählte Verzeichnis existiert und</li>\n"
+"<li>keine Datei mit dem angegeben Namen in diesem Verzeichnis existiert.</"
+"li>\n"
+"</ul>"
+
+#: wizards/newuserwizard/rc.cpp:20
+msgid ""
+"This finishes the setup of your KMyMoney environment. You can now press the "
+"Finish button and start using KMyMoney to record your financial transactions."
+msgstr ""
+"Hiermit ist die Einrichtung Ihrer KMyMoney-Umgebung abgeschlossen. Wenn Sie "
+"<b>Fertigstellen</b> wählen, können Sie KMyMoney benutzen und Ihre "
+"Finanzdaten verwalten."
+
+#: wizards/newuserwizard/rc.cpp:21
+msgid ""
+"Please enter some information about yourself.<br><br>\n"
+"\n"
+"This information will be seen and used only by you. The information is used "
+"to personalize KMyMoney, to encrypt your file, etc."
+msgstr ""
+"Wenn Sie mögen, können Sie hier persönlichen Informationen eingeben.\n"
+"\n"
+"Diese Informationen sind nur für Sie sichtbar. Sie werden zur "
+"Personalisierung Ihrer KMyMoney-Datei benutzt, um Ihre Datei zu "
+"verschlüsseln, etc."
+
+#: wizards/newuserwizard/rc.cpp:28
+msgid "Zip code"
+msgstr "PLZ"
+
+#: wizards/newuserwizard/rc.cpp:30
+msgid "Welcome to KMyMoney!"
+msgstr "Willkommen bei KMyMoney!"
+
+#: wizards/newuserwizard/rc.cpp:31
+msgid ""
+"You have started KMyMoney for the first time on this computer. Before this "
+"program can help you to manage your finances, it needs to collect some data "
+"from you.<p>\n"
+"\n"
+"On the next few pages you will be guided through the steps necessary to "
+"setup the program. This will happen only once."
+msgstr ""
+"Sie haben KMyMoney das erste Mal auf diesem Computer gestartet. Bevor das "
+"Programm Ihnen helfen kann, Ihre Finanzen zu verwalten, benötigt es noch ein "
+"paar Angaben von Ihnen.<p>\n"
+"\n"
+"Auf den nächsten Seiten werden Sie Schritt für Schritt durch die Einrichtung "
+"des Programms geführt. Dies ist nur beim ersten Start erforderlich."
+
+#: wizards/newuserwizard/rc.cpp:32
+msgid ""
+"<p>KMyMoney can encrypt your datafile using GPG Encryption. GPG encryption "
+"is one of the most secure methods in the world for protecting data. All of "
+"your account numbers and other important financial information will be very "
+"secure.</p>"
+msgstr ""
+"<p>KMyMoney kann Ihre Datei mit GPG verschlüsseln. GPG ist eine der "
+"sichersten Methoden, Daten vor unbefugtem Ansehen zu beschützen. Alle "
+"Kontonummern und sensible Informationen werden dadurch sehr sicher sein.</p>"
+
+#: wizards/newuserwizard/rc.cpp:33
+msgid ""
+"If you would like to review or change any preference settings for KMyMoney "
+"at this time, you can do so here. If not just click <b>Next</b>."
+msgstr ""
+"Wenn Sie die Einstellungen von KMyMoney ansehen oder ändern möchten, können "
+"Sie dies hier tun. Ansonsten wählen Sie <b>Weiter</b>."
+
+#: wizards/newuserwizard/rc.cpp:34
+msgid "Configure preferences now"
+msgstr "Einstellungen jetzt vornehmen"
+
+#: wizards/newuserwizard/rc.cpp:35
+msgid ""
+"You can change the configuration options at any time using the configuration "
+"dialog. Just select the <b>Configure KMyMoney...</b> option in the "
+"<b>Settings</b> menu."
+msgstr ""
+"Sie können die Einstellungen jederzeit im Einrichtungsdialog ändern. Wählen "
+"Sie dafür <b>KMyMoney einrichten...</b> im Menü <b>Einstellungen</b>."
+
+#: dialogs/rc.cpp:83 dialogs/rc.cpp:411 dialogs/rc.cpp:435
+#: kmymoneyutils.cpp:92 kmymoneyutils.cpp:105 mymoney/mymoneyaccount.cpp:753
+#: mymoney/mymoneysecurity.cpp:160
+msgid "Stock"
+msgstr "Wertpapier"
+
+#: dialogs/rc.cpp:84 dialogs/rc.cpp:412 dialogs/rc.cpp:436
+#: kmymoneyutils.cpp:107 mymoney/mymoneysecurity.cpp:163
+msgid "Mutual Fund"
+msgstr "Anlagefond"
+
+#: dialogs/rc.cpp:85 dialogs/rc.cpp:413 dialogs/rc.cpp:437
+#: kmymoneyutils.cpp:109 mymoney/mymoneysecurity.cpp:166
+msgid "Bond"
+msgstr "Anleihe"
+
+#: mymoney/mymoneysecurity.cpp:172 reports/querytable.cpp:1150
+#: widgets/kmymoneyaccountselector.cpp:76
+msgid "None"
+msgstr "Keine"
+
+#: dialogs/rc.cpp:46 kmymoneyutils.cpp:402 mymoney/mymoneyaccount.cpp:759
+#: mymoney/mymoneyscheduled.cpp:1002 mymoney/mymoneysecurity.cpp:175
+#: views/kforecastview.cpp:174 widgets/register.cpp:54
+#: widgets/register.cpp:485 widgets/transaction.cpp:708
+#: widgets/transaction.cpp:1459
+msgid "Unknown"
+msgstr "Unbekannt"
+
+#: mymoney/storage/mymoneystoragesql.cpp:191
+msgid ""
+"Database apparently in use\n"
+"Opened by %1 on %2 at %3.\n"
+"Open anyway?"
+msgstr ""
+"Datenbank ist in Benutzung\n"
+"Geöffnet von %1 am %2 um %3.\n"
+"Trotzdem öffnen?"
+
+#: mymoney/storage/mymoneystoragesql.cpp:229
+msgid "Cannot currently create database for driver %1; please create manually"
+msgstr "Kann Datenbank für Treiber %1 nicht anlegen; bitte manuell anlegen"
+
+#: mymoney/storage/mymoneystoragesql.cpp:244
+msgid "Error in create database %1; do you have create permissions?"
+msgstr "Fehler beim Erstellen der Datenbank %1. Haben Sie Rechte zum Erstellen?"
+
+#: converter/mymoneygncreader.cpp:1329
+#: mymoney/storage/mymoneystoragexml.cpp:166
+msgid "Loading transactions..."
+msgstr "Lade Buchungen..."
+
+#: converter/mymoneygncreader.cpp:1190
+#: mymoney/storage/mymoneystoragexml.cpp:173
+msgid "Loading accounts..."
+msgstr "Lade Konten..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:180
+msgid "Loading securities..."
+msgstr "Lade Wertpapiere/Währungen..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:187
+msgid "Loading reports..."
+msgstr "Lade Berichte..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:268
+msgid "Unknown XML tag %1 found in line %2"
+msgstr "Unbekanntes XML-Tag %1 in Zeile %2 gefunden"
+
+#: mymoney/storage/mymoneystoragexml.cpp:274
+msgid "Exception while creating a %1 element: %2"
+msgstr "Fehler beim Erstellen eines %1-Elementes: %2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:513
+msgid "Loading file information..."
+msgstr "Lade Datei-Informationen..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:591
+msgid "Loading user information..."
+msgstr "Lade Nutzer-Informationen..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:655
+msgid "Saving accounts..."
+msgstr "Speichere Konten..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:678
+msgid "Saving transactions..."
+msgstr "Speichere Buchungen..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:747
+msgid "Saving reports..."
+msgstr "Speichere Berichte..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:762
+msgid "Saving budgets..."
+msgstr "Speichere Budgets..."
+
+#: mymoney/storage/mymoneystoragedump.cpp:414
+msgid "not reconciled"
+msgstr "nicht abgestimmt"
+
+#: mymoney/storage/mymoneystoragedump.cpp:417
+msgid "cleared"
+msgstr "verrechnet"
+
+#: mymoney/storage/mymoneystoragedump.cpp:420
+msgid "reconciled"
+msgstr "abgestimmt"
+
+#: mymoney/storage/mymoneystoragedump.cpp:423
+msgid "frozen"
+msgstr "eingefroren"
+
+#: mymoney/storage/mymoneystoragedump.cpp:426
+msgid "unknown"
+msgstr "unbekannt"
+
+#: mymoney/mymoneyaccount.cpp:101
+msgid ""
+"Account %1 contains an opening balance. Please use a KMyMoney version >= 0.8 "
+"and < 0.9 to correct the problem."
+msgstr ""
+"Konto %1 enthält ein Anfangssaldo. Bitte nutzen Sie KMyMoney in der Version "
+">= 0.8 und < 0.9, um das Problem zu beheben."
+
+#: mymoney/mymoneyaccount.cpp:597
+msgid ""
+"_: Brokerage (suffix for account names)\n"
+"Brokerage"
+msgstr "Brokerage"
+
+#: kmymoneyutils.cpp:74 mymoney/mymoneyaccount.cpp:726
+msgid "Certificate of Deposit"
+msgstr "Festverzinsliches Wertpapier"
+
+#: kmymoneyutils.cpp:78 mymoney/mymoneyaccount.cpp:732
+msgid "Money Market"
+msgstr "Geldmarkt"
+
+#: converter/mymoneytemplate.cpp:186 converter/mymoneytemplate.cpp:187
+#: dialogs/knewaccountdlg.cpp:1018 kmymoneyutils.cpp:86
+#: mymoney/mymoneyaccount.cpp:744 views/kaccountsview.cpp:360
+#: views/kbudgetview.cpp:372 views/kcategoriesview.cpp:178
+#: views/khomeview.cpp:1813 views/kmymoneyview.cpp:767
+#: widgets/kmymoneyaccountselector.cpp:68
+#: widgets/kmymoneyaccountselector.cpp:179
+#: widgets/kmymoneyaccountselector.cpp:370 widgets/register.cpp:828
+msgid "Income"
+msgstr "Einnahme"
+
+#: converter/mymoneytemplate.cpp:190 converter/mymoneytemplate.cpp:191
+#: dialogs/knewaccountdlg.cpp:1020 kmymoneyutils.cpp:88
+#: mymoney/mymoneyaccount.cpp:747 views/kaccountsview.cpp:364
+#: views/kbudgetview.cpp:378 views/kcategoriesview.cpp:182
+#: views/kmymoneyview.cpp:768 widgets/kmymoneyaccountselector.cpp:72
+#: widgets/kmymoneyaccountselector.cpp:180
+#: widgets/kmymoneyaccountselector.cpp:380 widgets/register.cpp:829
+msgid "Expense"
+msgstr "Ausgabe"
+
+#: kmymoneyutils.cpp:90 mymoney/mymoneyaccount.cpp:750
+msgid "Investment Loan"
+msgstr "Investitionskredit"
+
+#: mymoney/mymoneyfile.cpp:47
+msgid "Opening Balances"
+msgstr "Eröffnungssaldo"
+
+#: mymoney/mymoneyfile.cpp:398
+msgid "Cannot remove transaction that references a closed account."
+msgstr "Kann keine Transaktionen löschen, die ein geschlossenes Konto referenziert."
+
+#: mymoney/mymoneyfile.cpp:1414 mymoney/mymoneyfile.cpp:1433
+#: mymoney/mymoneyfile.cpp:1447 mymoney/mymoneyfile.cpp:1469
+msgid "* Problem with account '%1'"
+msgstr "* Problem mit dem Konto '%1'"
+
+#: mymoney/mymoneyfile.cpp:1419
+msgid " * Parent account '%1' belongs to a different group."
+msgstr " * Übergeordnetes Konto '%1' gehört zu einer anderen Gruppe."
+
+#: mymoney/mymoneyfile.cpp:1420 mymoney/mymoneyfile.cpp:1450
+msgid " New parent account is the top level account '%1'."
+msgstr " Neues übergeordnetes Konto ist das Top-Level-Konto '%1'."
+
+#: mymoney/mymoneyfile.cpp:1436
+msgid " * Parent account '%1' does not contain '%2' as sub-account."
+msgstr " * Übergeordnetes Konto '%1' enthält '%2' nichts als Unterkonto."
+
+#: mymoney/mymoneyfile.cpp:1449
+msgid " * The parent with id %1 does not exist anymore."
+msgstr " * Das übergeordnete Konto mit der Id %1 existiert nicht mehr."
+
+#: mymoney/mymoneyfile.cpp:1471
+msgid " * Child account with id %1 does not exist anymore."
+msgstr " * Das Unterkonto mit der Id %1 existiert nicht mehr."
+
+#: mymoney/mymoneyfile.cpp:1472
+msgid " The child account list will be reconstructed."
+msgstr " Die Unterkontenliste wird rekonstruiert."
+
+#: mymoney/mymoneyfile.cpp:1492
+msgid " * Unable to update account data in engine."
+msgstr " * Aktualisierung der Kontendaten fehlgeschlagen."
+
+#: mymoney/mymoneyfile.cpp:1499
+msgid "* Reconstructing the child lists for"
+msgstr "* Rekonstruiere die Unterkontenliste für"
+
+#: mymoney/mymoneyfile.cpp:1536
+msgid " * Unable to update account data for account %1 in engine"
+msgstr " * Unmöglich die Kontendaten für das Konto %1 zu aktualisieren"
+
+#: mymoney/mymoneyfile.cpp:1554
+msgid " * Payee %1 recreated with fixed id"
+msgstr " * Zahlungsempfänger %1 wiederhergestellt mit fester Id"
+
+#: mymoney/mymoneyfile.cpp:1583
+msgid " * Payee id updated in split of transaction '%1'."
+msgstr " * Zahlungsempfänger-Id in Split-Buchung '%1' aktualisiert."
+
+#: mymoney/mymoneyfile.cpp:1596
+msgid " * shares set to value in split of transaction '%1'."
+msgstr " * Anzahl Anteile auf Wert der Split-Buchung '%1' gesetzt."
+
+#: mymoney/mymoneyfile.cpp:1599
+msgid " * value set to shares in split of transaction '%1'."
+msgstr " * Wert auf Anzahl Anteile der Split-Buchung '%1' gesetzt."
+
+#: mymoney/mymoneyfile.cpp:1605
+msgid ""
+" * Split %2 in transaction '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+" * Split-Buchung %2 in Buchung '%1' enthält Referenz auf ungültiges Konto %"
+"3. Bitte manuell korrigieren."
+
+#: mymoney/mymoneyfile.cpp:1616
+msgid " * action marked as interest in split of transaction '%1'."
+msgstr " * Vorgang wurde als Zins markiert in Split-Buchung '%1'."
+
+#: mymoney/mymoneyfile.cpp:1643
+msgid " * Payee id updated in split of schedule '%1'."
+msgstr ""
+" * Zahlungsempfänger-Id in Split-Buchung der geplanten Zahlung '%1' "
+"aktualisiert."
+
+#: mymoney/mymoneyfile.cpp:1649
+msgid " * Split in scheduled transaction '%1' contained value != 0 and shares == 0."
+msgstr ""
+" * Split-Buchung in geplanter Buchung '%1' enthielt Betrag != 0 und Aktien "
+"== 0."
+
+#: mymoney/mymoneyfile.cpp:1650
+msgid " Shares set to value."
+msgstr " Aktien auf Betrag gesetzt."
+
+#: mymoney/mymoneyfile.cpp:1658
+msgid " * Removed bankid from split in scheduled transaction '%1'."
+msgstr " * Feld bankId in Split-Buchung '%1' entfernt"
+
+#: mymoney/mymoneyfile.cpp:1671
+msgid " * shares set to value in split in schedule '%1'."
+msgstr ""
+" * Anzahl Anteile auf Betrag in Split-Buchung der geplanten Zahlung '%1' "
+"gesetzt."
+
+#: mymoney/mymoneyfile.cpp:1674
+msgid " * value set to shares in split in schedule '%1'."
+msgstr ""
+" * Betrag auf Anzahl Aktien in Split-Buchung der geplanten Zahlung '%1' "
+"gesetzt."
+
+#: mymoney/mymoneyfile.cpp:1680
+msgid ""
+" * Split %2 in schedule '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+" * Split-Buchung %2 in geplanter Zahlung '%1' enthält Referenz auf "
+"ungültiges Konto %2. Bitte manuell korrigieren."
+
+#: mymoney/mymoneyfile.cpp:1706
+msgid " * Payee id updated in report '%1'."
+msgstr " * Zahlungsempfänger-Id in Report '%1' aktualisiert."
+
+#: mymoney/mymoneyfile.cpp:1723
+msgid " * Payee '%1' removed."
+msgstr " * Zahlungsempfänger '%1' entfernt."
+
+#: mymoney/mymoneyfile.cpp:1730
+msgid "Finish! Data is consistent."
+msgstr "Beendet! Daten sind konsistent."
+
+#: mymoney/mymoneyfile.cpp:1732
+msgid "Finish! %1 problem(s) corrected. %2 problem(s) still present."
+msgstr "Beendet! %1 Problem(e) korrigiert. %2 Problem(e) noch vorhanden."
+
+#: mymoney/mymoneyscheduled.cpp:873 mymoney/mymoneyscheduled.cpp:918
+#: mymoney/mymoneyscheduled.cpp:969 mymoney/mymoneyscheduled.cpp:1265
+#: mymoney/mymoneyscheduletest.cpp:1336
+msgid "Once"
+msgstr "Einmalig"
+
+#: mymoney/mymoneyscheduled.cpp:875 mymoney/mymoneyscheduled.cpp:924
+#: mymoney/mymoneyscheduled.cpp:1267 mymoney/mymoneyscheduletest.cpp:1337
+#: widgets/rc.cpp:72
+msgid "Daily"
+msgstr "Täglich"
+
+#: mymoney/mymoneyscheduled.cpp:877 mymoney/mymoneyscheduled.cpp:931
+#: mymoney/mymoneyscheduled.cpp:1269 mymoney/mymoneyscheduletest.cpp:1338
+#: widgets/rc.cpp:73
+msgid "Weekly"
+msgstr "Wöchentlich"
+
+#: mymoney/mymoneyscheduled.cpp:881 mymoney/mymoneyscheduled.cpp:932
+#: mymoney/mymoneyscheduled.cpp:1273 mymoney/mymoneyscheduletest.cpp:1339
+msgid "Every other week"
+msgstr "Jede zweite Woche"
+
+#: mymoney/mymoneyscheduled.cpp:879 mymoney/mymoneyscheduled.cpp:1271
+#: mymoney/mymoneyscheduletest.cpp:1340
+msgid "Fortnightly"
+msgstr "Zweiwöchentlich"
+
+#: mymoney/mymoneyscheduled.cpp:883 mymoney/mymoneyscheduled.cpp:941
+#: mymoney/mymoneyscheduled.cpp:1275 mymoney/mymoneyscheduletest.cpp:1341
+msgid "Every half month"
+msgstr "Zweimal monatlich"
+
+#: mymoney/mymoneyscheduled.cpp:887 mymoney/mymoneyscheduled.cpp:934
+#: mymoney/mymoneyscheduled.cpp:1279 mymoney/mymoneyscheduletest.cpp:1342
+msgid "Every four weeks"
+msgstr "Alle vier Wochen"
+
+#: mymoney/mymoneyscheduled.cpp:893 mymoney/mymoneyscheduled.cpp:935
+#: mymoney/mymoneyscheduled.cpp:1285 mymoney/mymoneyscheduletest.cpp:1344
+msgid "Every eight weeks"
+msgstr "Jede achte Woche"
+
+#: mymoney/mymoneyscheduled.cpp:895 mymoney/mymoneyscheduled.cpp:948
+#: mymoney/mymoneyscheduled.cpp:1287 mymoney/mymoneyscheduletest.cpp:1345
+msgid "Every two months"
+msgstr "Alle zwei Monate"
+
+#: mymoney/mymoneyscheduled.cpp:897 mymoney/mymoneyscheduled.cpp:949
+#: mymoney/mymoneyscheduled.cpp:1289 mymoney/mymoneyscheduletest.cpp:1346
+msgid "Every three months"
+msgstr "Alle drei Monate"
+
+#: mymoney/mymoneyscheduled.cpp:899 mymoney/mymoneyscheduled.cpp:1291
+#: mymoney/mymoneyscheduletest.cpp:1347 widgets/rc.cpp:76
+msgid "Quarterly"
+msgstr "Vierteljährlich"
+
+#: mymoney/mymoneyscheduled.cpp:901 mymoney/mymoneyscheduled.cpp:950
+#: mymoney/mymoneyscheduled.cpp:1293 mymoney/mymoneyscheduletest.cpp:1348
+msgid "Every four months"
+msgstr "Alle vier Monate"
+
+#: mymoney/mymoneyscheduled.cpp:903 mymoney/mymoneyscheduled.cpp:951
+#: mymoney/mymoneyscheduled.cpp:1295 mymoney/mymoneyscheduletest.cpp:1349
+msgid "Twice yearly"
+msgstr "Zweimal jährlich"
+
+#: mymoney/mymoneyscheduled.cpp:905 mymoney/mymoneyscheduled.cpp:957
+#: mymoney/mymoneyscheduled.cpp:1297 mymoney/mymoneyscheduletest.cpp:1350
+#: widgets/rc.cpp:20 widgets/rc.cpp:77
+msgid "Yearly"
+msgstr "Jährlich"
+
+#: mymoney/mymoneyscheduled.cpp:907 mymoney/mymoneyscheduled.cpp:958
+#: mymoney/mymoneyscheduled.cpp:1299 mymoney/mymoneyscheduletest.cpp:1351
+msgid "Every other year"
+msgstr "Jedes zweite Jahr"
+
+#: mymoney/mymoneyscheduled.cpp:870 mymoney/mymoneyscheduled.cpp:913
+#: mymoney/mymoneyscheduled.cpp:966
+msgid "Any"
+msgstr "Alle"
+
+#: mymoney/mymoneyscheduled.cpp:885 mymoney/mymoneyscheduled.cpp:933
+#: mymoney/mymoneyscheduled.cpp:1277
+msgid "Every three weeks"
+msgstr "Jede dritte Woche"
+
+#: mymoney/mymoneyscheduled.cpp:889 mymoney/mymoneyscheduled.cpp:925
+#: mymoney/mymoneyscheduled.cpp:1281
+msgid "Every thirty days"
+msgstr "Alle dreißig Tage"
+
+#: mymoney/mymoneyscheduled.cpp:971
+msgid "Day"
+msgstr "Tag"
+
+#: mymoney/mymoneyscheduled.cpp:973 reports/listtable.cpp:206
+#: widgets/kmymoneycalendar.cpp:123 widgets/rc.cpp:97
+msgid "Week"
+msgstr "Woche"
+
+#: mymoney/mymoneyscheduled.cpp:975
+msgid "Half-month"
+msgstr "Halbmonatilich"
+
+#: mymoney/mymoneyscheduled.cpp:977 reports/listtable.cpp:205
+#: widgets/kmymoneycalendar.cpp:124 widgets/rc.cpp:96
+msgid "Month"
+msgstr "Monat"
+
+#: dialogs/rc.cpp:400 mymoney/mymoneyscheduled.cpp:979 views/rc.cpp:14
+msgid "Year"
+msgstr "Jahr"
+
+#: mymoney/mymoneyscheduled.cpp:989
+msgid "Bill"
+msgstr "Rechnung"
+
+#: dialogs/rc.cpp:107 dialogs/rc.cpp:162 dialogs/rc.cpp:249 dialogs/rc.cpp:754
+#: mymoney/mymoneyscheduled.cpp:992 widgets/kmymoneycombo.cpp:420
+#: widgets/register.cpp:571
+msgid "Deposit"
+msgstr "Einzahlungen"
+
+#: mymoney/mymoneyscheduled.cpp:995 reports/querytable.cpp:594
+#: reports/querytable.cpp:696 widgets/kmymoneycombo.cpp:419
+msgid "Transfer"
+msgstr "Umbuchung"
+
+#: mymoney/mymoneyscheduled.cpp:1035
+msgid "Any (Error)"
+msgstr "Beliebig (Fehler)"
+
+#: dialogs/rc.cpp:114 mymoney/mymoneyscheduled.cpp:1047
+msgid "Change the date to the previous Friday"
+msgstr "Datum auf den vorherigen Freitag ändern"
+
+#: dialogs/rc.cpp:115 mymoney/mymoneyscheduled.cpp:1050
+msgid "Change the date to the next Monday"
+msgstr "Datum auf den folgenden Montag ändern"
+
+#: mymoney/mymoneyscheduled.cpp:1053
+msgid "Do Nothing"
+msgstr "Datum unverändert übernehmen"
+
+#: kmymoney2.cpp:312
+msgid "Open database..."
+msgstr "Datenbank öffnen..."
+
+#: kmymoney2.cpp:313
+msgid "Save as database..."
+msgstr "Speichern in Datenbank..."
+
+#: kmymoney2.cpp:314
+msgid "Backup..."
+msgstr "Sicherung..."
+
+#: kmymoney2.cpp:315 kmymoney2.cpp:321
+msgid "QIF..."
+msgstr "QIF..."
+
+#: kmymoney2.cpp:316
+msgid "Gnucash..."
+msgstr "Gnucash..."
+
+#: kmymoney2.cpp:317
+msgid "Statement file..."
+msgstr "Kontoauszugsdatei..."
+
+#: kmymoney2.cpp:319 kmymoney2.cpp:320
+msgid "Account Template..."
+msgstr "Kontovorlage..."
+
+#: kmymoney2.cpp:322
+msgid "Personal Data..."
+msgstr "Persönliche Daten..."
+
+#: kmymoney2.cpp:325
+msgid "Dump Memory"
+msgstr "Speicher ausgeben"
+
+#: kmymoney2.cpp:327
+msgid "File-Information..."
+msgstr "Datei-Informationen..."
+
+#: kmymoney2.cpp:332
+msgid "Find transaction..."
+msgstr "Suche Buchung..."
+
+#: kmymoney2.cpp:337
+msgid "Show Transaction Detail"
+msgstr "Buchungsdetails anzeigen"
+
+#: kmymoney2.cpp:338 rc.cpp:60
+msgid "Hide reconciled transactions"
+msgstr "Abgeglichene Buchungen ausblenden"
+
+#: kmymoney2.cpp:339 rc.cpp:57
+msgid "Hide unused categories"
+msgstr "Ungenutzte Kategorien ausblenden"
+
+#: kmymoney2.cpp:340
+msgid "Show all accounts"
+msgstr "Alle Konten anzeigen"
+
+#: kmymoney2.cpp:345
+msgid "New institution..."
+msgstr "Neues Geldinstitut..."
+
+#: kmymoney2.cpp:346
+msgid "Edit institution..."
+msgstr "Geldinstitut bearbeiten..."
+
+#: kmymoney2.cpp:347
+msgid "Delete institution..."
+msgstr "Geldinstitut löschen..."
+
+#: kmymoney2.cpp:352
+msgid "New account..."
+msgstr "Neues Konto..."
+
+#: kmymoney2.cpp:354
+msgid "Open ledger"
+msgstr "Kontobuch öffnen"
+
+#: kmymoney2.cpp:355
+msgid "Reconcile..."
+msgstr "Abgleichen..."
+
+#: kmymoney2.cpp:356
+msgid ""
+"_: Finish reconciliation\n"
+"Finish"
+msgstr "Fertigstellen"
+
+#: kmymoney2.cpp:357
+msgid ""
+"_: Postpone reconciliation\n"
+"Postpone"
+msgstr "Pausieren"
+
+#: kmymoney2.cpp:358
+msgid "Edit account..."
+msgstr "Konto bearbeiten..."
+
+#: kmymoney2.cpp:359
+msgid "Delete account..."
+msgstr "Konto löschen..."
+
+#: kmymoney2.cpp:360
+msgid "Close account"
+msgstr "Konto schließen"
+
+#: kmymoney2.cpp:361
+msgid "Reopen account"
+msgstr "Konto neu eröffnen"
+
+#: kmymoney2.cpp:362
+msgid "Transaction report"
+msgstr "Buchungs-Bericht"
+
+#: kmymoney2.cpp:364
+msgid "Show balance chart..."
+msgstr "Saldo-Diagramm zeigen..."
+
+#: kmymoney2.cpp:366
+msgid "Map to online account"
+msgstr "Einem Onlinekonto zuordnen"
+
+#: kmymoney2.cpp:367
+msgid "Unmap account"
+msgstr "Kontenzuordnung löschen"
+
+#: dialogs/settings/rc.cpp:126 kmymoney2.cpp:368 views/kpayeesview.cpp:363
+#: widgets/rc.cpp:50
+msgid "Update"
+msgstr "Aktualisieren"
+
+#: kmymoney2.cpp:372
+msgid "Update account..."
+msgstr "Konto aktualisieren..."
+
+#: kmymoney2.cpp:373
+msgid "Update all accounts..."
+msgstr "Alle Konten aktualisieren..."
+
+#: kmymoney2.cpp:378
+msgid "New category..."
+msgstr "Neue Kategorie..."
+
+#: kmymoney2.cpp:379
+msgid "Edit category..."
+msgstr "Kategorie bearbeiten..."
+
+#: kmymoney2.cpp:380
+msgid "Delete category..."
+msgstr "Kategorie löschen..."
+
+#: kmymoney2.cpp:386
+msgid "QIF Profile Editor..."
+msgstr "QIF-Einstellungen..."
+
+#: kmymoney2.cpp:387
+msgid "Securities..."
+msgstr "Wertpapiere..."
+
+#: kmymoney2.cpp:388
+msgid "Currencies..."
+msgstr "Währungen..."
+
+#: kmymoney2.cpp:389
+msgid "Prices..."
+msgstr "Preise..."
+
+#: kmymoney2.cpp:390
+msgid "Update Stock and Currency Prices..."
+msgstr "Aktualisiere Aktien- und Währungspreise..."
+
+#: kmymoney2.cpp:391
+msgid "Consistency Check"
+msgstr "Konsistenzüberprüfung"
+
+#: kmymoney2.cpp:392
+msgid "Performance-Test"
+msgstr "Leistungstest"
+
+#: kmymoney2.cpp:393
+msgid "KCalc..."
+msgstr "KCalc..."
+
+#: kmymoney2.cpp:399
+msgid "Enable all messages"
+msgstr "Zeige alle Meldungen an"
+
+#: kmymoney2.cpp:400
+msgid "KDE language settings..."
+msgstr "KDE Sprach-Einstellungen..."
+
+#: kmymoney2.cpp:405
+msgid "&Show tip of the day"
+msgstr "&Tipp des Tages"
+
+#: kmymoney2.cpp:410
+msgid ""
+"_: New transaction button\n"
+"New"
+msgstr "Neu"
+
+#: kmymoney2.cpp:415
+msgid ""
+"_: Edit transaction button\n"
+"Edit"
+msgstr "Ändern"
+
+#: kmymoney2.cpp:417
+msgid ""
+"_: Enter transaction\n"
+"Enter"
+msgstr "Eingabe"
+
+#: kmymoney2.cpp:420
+msgid ""
+"_: Edit split button\n"
+"Edit splits"
+msgstr "Split-Buchungen bearbeiten"
+
+#: kmymoney2.cpp:421
+msgid ""
+"_: Cancel transaction edit\n"
+"Cancel"
+msgstr "Abbruch"
+
+#: kmymoney2.cpp:422
+msgid ""
+"_: Delete transaction\n"
+"Delete"
+msgstr "Löschen"
+
+#: kmymoney2.cpp:423
+msgid ""
+"_: Duplicate transaction\n"
+"Duplicate"
+msgstr "Duplizieren"
+
+#: kmymoney2.cpp:425 kmymoney2.cpp:4826 kmymoney2.cpp:5107
+msgid ""
+"_: Button text for match transaction\n"
+"Match"
+msgstr "Zuordnen"
+
+#: kmymoney2.cpp:426
+msgid ""
+"_: Accept 'imported' and 'matched' transaction\n"
+"Accept"
+msgstr "Akzeptieren"
+
+#: kmymoney2.cpp:428
+msgid ""
+"_: Toggle reconciliation flag\n"
+"Toggle"
+msgstr "Umschalten"
+
+#: kmymoney2.cpp:429
+msgid ""
+"_: Mark transaction cleared\n"
+"Cleared"
+msgstr "Verrechnet"
+
+#: kmymoney2.cpp:430
+msgid ""
+"_: Mark transaction reconciled\n"
+"Reconciled"
+msgstr "Abgeglichen"
+
+#: kmymoney2.cpp:431
+msgid ""
+"_: Mark transaction not reconciled\n"
+"Not reconciled"
+msgstr "Nicht abgeglichen"
+
+#: kmymoney2.cpp:432
+msgid ""
+"_: Select all transactions\n"
+"Select all"
+msgstr "Alle auswählen"
+
+#: kmymoney2.cpp:434 kmymoney2.cpp:5497
+msgid "Goto account"
+msgstr "Gehe zu Konto"
+
+#: kmymoney2.cpp:435 kmymoney2.cpp:5495
+msgid "Goto payee"
+msgstr "Gehe zu Zahler/Empfänger"
+
+#: kmymoney2.cpp:436
+msgid "Create scheduled transaction..."
+msgstr "Geplante Buchung erstellen..."
+
+#: kmymoney2.cpp:437
+msgid "Assign next number"
+msgstr "Nächste Nummer zuweisen"
+
+#: kmymoney2.cpp:438
+msgid ""
+"_: Combine transactions\n"
+"Combine"
+msgstr "Verbinden"
+
+#: kmymoney2.cpp:440
+msgid "New investment"
+msgstr "Neue Investition"
+
+#: kmymoney2.cpp:441
+msgid "Edit investment..."
+msgstr "Investition bearbeiten..."
+
+#: kmymoney2.cpp:442
+msgid "Delete investment..."
+msgstr "Lösche Investition..."
+
+#: kmymoney2.cpp:443
+msgid "Online price update..."
+msgstr "Online-Preis aktualisieren ..."
+
+#: kmymoney2.cpp:444
+msgid "Manual price update..."
+msgstr "Manuelle Preisaktualisierung..."
+
+#: kmymoney2.cpp:446
+msgid "New scheduled transaction..."
+msgstr "Geplante Buchung anlegen..."
+
+#: kmymoney2.cpp:447
+msgid "Edit scheduled transaction..."
+msgstr "Geplante Buchung ändern..."
+
+#: kmymoney2.cpp:448
+msgid "Delete scheduled transaction..."
+msgstr "Geplante Buchung löschen..."
+
+#: kmymoney2.cpp:449
+msgid "Duplicate scheduled transaction"
+msgstr "Geplante Buchung duplizieren"
+
+#: kmymoney2.cpp:450
+msgid "Enter next transaction..."
+msgstr "Nächste Zahlung eintragen..."
+
+#: kmymoney2.cpp:451
+msgid "Skip next transaction..."
+msgstr "Diese Zahlung überspringen..."
+
+#: kmymoney2.cpp:453
+msgid "New payee"
+msgstr "Neuer Zahlungsempfänger"
+
+#: kmymoney2.cpp:454
+msgid "Rename payee"
+msgstr "Zahlungsempfänger umbenennen"
+
+#: kmymoney2.cpp:455
+msgid "Delete payee"
+msgstr "Lösche Zahlungsempfänger"
+
+#: kmymoney2.cpp:457
+msgid "New budget"
+msgstr "Neues Budget"
+
+#: kmymoney2.cpp:458
+msgid "Rename budget"
+msgstr "Budget umbenennen"
+
+#: kmymoney2.cpp:459
+msgid "Delete budget"
+msgstr "Budget löschen"
+
+#: kmymoney2.cpp:460
+msgid "Copy budget"
+msgstr "Budget kopieren"
+
+#: kmymoney2.cpp:461
+msgid "Change budget year"
+msgstr "Jahr des Budgets ändern"
+
+#: kmymoney2.cpp:462
+msgid ""
+"_: Budget based on forecast\n"
+"Forecast"
+msgstr "Vorhersage"
+
+#: kmymoney2.cpp:467 kmymoney2.cpp:3990 kmymoney2.cpp:3993 kmymoney2.cpp:3999
+msgid "New currency"
+msgstr "Neue Währung"
+
+#: kmymoney2.cpp:468 kmymoney2.cpp:4021 kmymoney2.cpp:4026
+msgid "Rename currency"
+msgstr "Währung umbenennen"
+
+#: kmymoney2.cpp:469 kmymoney2.cpp:4039
+msgid "Delete currency"
+msgstr "Währung löschen"
+
+#: dialogs/rc.cpp:69 kmymoney2.cpp:470
+msgid "Select as base currency"
+msgstr "Als Basiswährung auswählen"
+
+#: kmymoney2.cpp:481
+msgid "View back"
+msgstr "Blick zurück"
+
+#: kmymoney2.cpp:482
+msgid "View forward"
+msgstr "Blick vorwärts"
+
+#: kmymoney2.cpp:611
+msgid "KMyMoney file needs saving. Save ?"
+msgstr "Die KMyMoney-Datei wurde verändert. Änderungen speichern?"
+
+#: kmymoney2.cpp:757
+msgid "Creating new document..."
+msgstr "Erstelle neues Dokument..."
+
+#: kmymoney2.cpp:869 kmymoney2.cpp:884
+msgid "Open a file."
+msgstr "Dokument öffnen."
+
+#: kmymoney2.cpp:872
+msgid ""
+"%1|KMyMoney files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|KMyMoney Dokumente\n"
+"%2|Alle Dateien (*.*)"
+
+#: kmymoney2.cpp:873
+msgid "Open File..."
+msgstr "Öffne Datei..."
+
+#: kmymoney2.cpp:925 kstartuplogo.cpp:100
+msgid "Loading file..."
+msgstr "Lade Datei..."
+
+#: kmymoney2.cpp:986
+msgid ""
+"<b>%1</b> is either an invalid filename or the file does not exist. You can "
+"open another file or create a new one."
+msgstr ""
+"<b>%1</b> ist kein gültiger Dateiname oder die Datei existiert nicht. Sie "
+"können eine andere Datei öffnen oder eine neue anlegen."
+
+#: kmymoney2.cpp:986
+msgid "File not found"
+msgstr "Datei nicht gefunden"
+
+#: kmymoney2.cpp:989
+msgid "File <b>%1</b> is already opened in another instance of KMyMoney"
+msgstr ""
+"Die Datei <b>%1</b> ist bereits in einer anderen Instanz von KMyMoney "
+"geöffnet"
+
+#: kmymoney2.cpp:989
+msgid "Duplicate open"
+msgstr "Duplikat öffnen"
+
+#: kmymoney2.cpp:1001
+msgid "Saving file..."
+msgstr "Speichere Datei..."
+
+#: kmymoney2.cpp:1035 kmymoney2.cpp:1047 kmymoney2.cpp:1071
+#, c-format
+msgid "Additional encryption key(s) to be used: %1"
+msgstr "Zusätzlich zu benutzende(r) Schlüssel für die Verschlüsselung: %1"
+
+#: kmymoney2.cpp:1056
+msgid "Saving file with a new filename..."
+msgstr "Speichere Datei mit neuem Namen..."
+
+#: kmymoney2.cpp:1067
+msgid "Encryption key to be used"
+msgstr "Zu nutzender Verschlüsselungs-Key"
+
+#: kmymoney2.cpp:1072
+msgid "Manage additional keys"
+msgstr "Zusätzliche Schlüssel einrichten"
+
+#: kmymoney2.cpp:1079
+msgid "No encryption"
+msgstr "Keine Verschlüsselung"
+
+#: kmymoney2.cpp:1102
+msgid ""
+"_: KMyMoney (Filefilter)\n"
+"KMyMoney files"
+msgstr "KMyMoney-Dateien"
+
+#: kmymoney2.cpp:1103
+msgid ""
+"_: XML (Filefilter)\n"
+"XML files"
+msgstr "XML-Dateien"
+
+#: kmymoney2.cpp:1104
+msgid ""
+"_: Anonymous (Filefilter)\n"
+"Anonymous files"
+msgstr "Anonyme Dateien"
+
+#: kmymoney2.cpp:1105
+msgid "All files"
+msgstr "Alle Dateien"
+
+#: kmymoney2.cpp:1193
+msgid "Saving file to database..."
+msgstr "Speichere Datei in Datenbank..."
+
+#: kmymoney2.cpp:1207
+msgid "Cannot save to current database."
+msgstr "Kann auf aktuelle Datenbank nicht schreiben."
+
+#: kmymoney2.cpp:1225
+msgid "Closing window..."
+msgstr "Schließe Fenster..."
+
+#: kmymoney2.cpp:1228 kmymoney2.cpp:1249
+msgid "The file has been changed, save it ?"
+msgstr "Die Datei wurde bearbeitet; Änderungen speichern?"
+
+#: kmymoney2.cpp:1339 kmymoney2.cpp:1352
+msgid "Ready."
+msgstr "Bereit."
+
+#: kmymoney2.cpp:1397 kmymoney2.cpp:1433
+msgid "No KMyMoneyFile open"
+msgstr "Keine KMyMoney-Datei geöffnet"
+
+#: kmymoney2.cpp:1401
+msgid "Viewing personal data..."
+msgstr "Zeige persönliche Daten..."
+
+#: kmymoney2.cpp:1408
+msgid "Edit Personal Data"
+msgstr "Persönliche Daten bearbeiten"
+
+#: kmymoney2.cpp:1424
+#, c-format
+msgid "Unable to store user information: %1"
+msgstr "Unmöglich Nutzerinformationen zu speichern: %1"
+
+#: kmymoney2.cpp:1447
+msgid "Importing account templates."
+msgstr "Importiere Kontenvorlage."
+
+#: kmymoney2.cpp:1462
+msgid "Unable to import template(s): %1, thrown in %2:%3"
+msgstr "Unmöglich Template(s) zu importieren: %1, abgelegt in %2:%3"
+
+#: kmymoney2.cpp:1471
+msgid "Exporting account templates."
+msgstr "Exportiere Kontenvorlagen."
+
+#: kmymoney2.cpp:1474
+msgid ""
+"*.kmt|KMyMoney template files\n"
+"*.*|All files"
+msgstr ""
+"*.kmt|KMyMoney-Vorlagendateien\n"
+"*.*|Alle Dateien"
+
+#: kmymoney2.cpp:1475
+msgid "Save as..."
+msgstr "Speichern unter ..."
+
+#: kmymoney2.cpp:1517
+msgid "Importing file..."
+msgstr "Importiere Datei..."
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "The statements have been processed with the following results:"
+msgstr "Der Kontoauszug wurde mit folgendem Ergebnis verarbeitet:"
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:1754 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "Statement stats"
+msgstr "Kontoauszug Details"
+
+#: kmymoney2.cpp:1602
+msgid ""
+"You cannot import GnuCash data into an existing file. Do you wish to save "
+"this file?"
+msgstr ""
+"Sie können keine GnuCash-Daten in eine bestehende Datei importieren. Möchten "
+"Sie diese Datei speichern?"
+
+#: kmymoney2.cpp:1615
+msgid "Importing a Gnucash file."
+msgstr "Importiere GnuCash-Datei."
+
+#: kmymoney2.cpp:1618
+msgid ""
+"%1|Gnucash files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|GnuCash-Dokumente\n"
+"%2|Alle Dateien (*.*)"
+
+#: kmymoney2.cpp:1619
+msgid "Import Gnucash file..."
+msgstr "Importiere GnuCash-Datei..."
+
+#: kmymoney2.cpp:1658
+msgid "Importing an XML Statement."
+msgstr "Importiere XML Kontoauszug."
+
+#: kmymoney2.cpp:1661
+msgid ""
+"%1|XML files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|XML Dateien\n"
+"%2|Alle Dateien (*.*)"
+
+#: kmymoney2.cpp:1662
+msgid "Import XML Statement..."
+msgstr "Importiere XML Kontoauszug..."
+
+#: kmymoney2.cpp:1718
+msgid "Error importing %1: This file is not a valid KMM statement file."
+msgstr "Fehler beim Import von %1: Die Datei ist keine gültige KMM Kontoauszugsdatei."
+
+#: kmymoney2.cpp:1718
+msgid "Invalid Statement"
+msgstr "Ungültiger Kontoauszug"
+
+#: kmymoney2.cpp:1754
+msgid "The statement has been processed with the following results:"
+msgstr "Der Kontoauszug wurde mit folgendem Ergebnis verarbeitet:"
+
+#: kmymoney2.cpp:1763
+msgid "Exporting file..."
+msgstr "Exportiere Datei..."
+
+#: kmymoney2.cpp:1786
+msgid "The file <b>%1</b> already exists. Do you really want to override it?"
+msgstr ""
+"Die Datei <b>%1</b> existiert bereits. Wollen Sie diese tatsächlich "
+"überschreiben?"
+
+#: kmymoney2.cpp:1786
+msgid "File already exists"
+msgstr "Datei existiert bereits"
+
+#: dialogs/rc.cpp:347 dialogs/rc.cpp:649 dialogs/rc.cpp:798 kmymoney2.cpp:1815
+msgid "General"
+msgstr "Allgemein"
+
+#: kmymoney2.cpp:1816
+msgid "Register"
+msgstr "Kontobuch"
+
+#: kmymoney2.cpp:1817 views/khomeview.cpp:88 views/kmymoneyview.cpp:136
+msgid "Home"
+msgstr "Übersicht"
+
+#: kmymoney2.cpp:1818 views/kmymoneyview.cpp:176
+msgid ""
+"Scheduled\n"
+"transactions"
+msgstr ""
+"Geplante\n"
+"Buchungen"
+
+#: kmymoney2.cpp:1819
+msgid "Encryption"
+msgstr "Verschlüsselung"
+
+#: kmymoney2.cpp:1820
+msgid "Colors"
+msgstr "Farben"
+
+#: dialogs/rc.cpp:344 dialogs/settings/rc.cpp:107 kmymoney2.cpp:1822
+#: widgets/rc.cpp:33
+msgid "Online Quotes"
+msgstr "Online-Kursnotizen"
+
+#: kmymoney2.cpp:1823 reports/pivottable.cpp:2426 views/kmymoneyview.cpp:251
+#: views/kmymoneyview.cpp:253 views/kreportsview.cpp:1415 views/rc.cpp:41
+msgid "Forecast"
+msgstr "Vorhersage"
+
+#: kmymoney2.cpp:1824
+msgid "Plugins"
+msgstr "Plugins"
+
+#: kmymoney2.cpp:1893
+msgid ""
+"The file must be saved first before it can be backed up. Do you want to "
+"continue?"
+msgstr ""
+"Die Datei muss er gespeichert werden, bevor sie extern gesichert werden "
+"kann. Möchten Sie fortfahren?"
+
+#: kmymoney2.cpp:1910
+msgid ""
+"The current implementation of the backup functionality only supports local "
+"files as source files! Your current source file is '%1'."
+msgstr ""
+"Die aktuelle Implementierung der Sicherungsfunktion unterstützt nur lokale "
+"Dateien als Quelldateien! Der Pfad auf die aktuelle Datei lautet allerdings: "
+"'%1'."
+
+#: kmymoney2.cpp:1913
+msgid "Local files only"
+msgstr "Nur lokale Dateien"
+
+#: kmymoney2.cpp:1928
+#, c-format
+msgid "Mounting %1"
+msgstr "Binde %1 ein"
+
+#: kmymoney2.cpp:1967
+msgid "Backup file for today exists on that device. Replace ?"
+msgstr ""
+"Es bestehen bereits Sicherungen vom heutigen Tag auf dem Gerät. Sollen diese "
+"überschrieben werden?"
+
+#: dialogs/rc.cpp:7 kmymoney2.cpp:1967 kmymoney2.cpp:1994 kmymoney2.cpp:2024
+#: kmymoney2.cpp:2032 kmymoney2.cpp:2057 kmymoney2.cpp:2059
+msgid "Backup"
+msgstr "Sicherung"
+
+#: kmymoney2.cpp:1967
+msgid "&Replace"
+msgstr "&Ersetzen"
+
+#: kmymoney2.cpp:1972 kmymoney2.cpp:1997 kmymoney2.cpp:2016 kmymoney2.cpp:2035
+#, c-format
+msgid "Unmounting %1"
+msgstr "Unmounting %1"
+
+#: kmymoney2.cpp:1987
+#, c-format
+msgid "Writing %1"
+msgstr "Schreibe %1"
+
+#: kmymoney2.cpp:1994
+msgid "Error mounting device"
+msgstr "Fehler beim Einbinden des Geräts"
+
+#: converter/mymoneygncreader.cpp:1995 kmymoney2.cpp:2023 kmymoney2.cpp:2055
+msgid "Done"
+msgstr "Fertig"
+
+#: kmymoney2.cpp:2024 kmymoney2.cpp:2057
+msgid "File successfully backed up"
+msgstr "Datei erfolgreich gesichert"
+
+#: kmymoney2.cpp:2032
+msgid "Error copying file to device"
+msgstr "Fehler beim Kopieren der Datei zum Gerät"
+
+#: kmymoney2.cpp:2059
+msgid "Error unmounting device"
+msgstr "Fehler beim Lösen der Geräteeinbindung"
+
+#: kmymoney2.cpp:2143
+#, c-format
+msgid "Cannot add institution: %1"
+msgstr "Kann Geldinstitut nicht hinzufügen: %1"
+
+#: kmymoney2.cpp:2185
+#, c-format
+msgid "Unable to store institution: %1"
+msgstr "Kann Geldinstitut nicht speichern: %1"
+
+#: kmymoney2.cpp:2192
+#, c-format
+msgid "Unable to edit institution: %1"
+msgstr "Kann Geldinstitut nicht bearbeiten: %1"
+
+#: kmymoney2.cpp:2203
+msgid "Do you really want to delete institution <b>%1</b> ?"
+msgstr "Wollen Sie das Geldinstitut <b>'%1'</b> wirklich löschen?"
+
+#: kmymoney2.cpp:2211 kmymoney2.cpp:2215
+#, c-format
+msgid "Unable to delete institution: %1"
+msgstr "Kann Geldinstitut nicht löschen: %1"
+
+#: kmymoney2.cpp:2268
+#, c-format
+msgid "Unable to find account: %1"
+msgstr "Kann Konto %1 nicht finden"
+
+#: kmymoney2.cpp:2309
+msgid ""
+"This account is a liability and if the opening balance represents money "
+"owed, then it should be negative. Negate the amount?\n"
+"\n"
+"Please click Yes to change the opening balance to %1,\n"
+"Please click No to leave the amount as %2,\n"
+"Please click Cancel to abort the account creation."
+msgstr ""
+"Das Konto ist ein Verbindlichkeitskonto und wenn der Eröffnungssaldo "
+"Schulden entspricht, dann soll es negativ sein. Soll der Eröffnungssaldo "
+"negiert werden? \n"
+"\n"
+"Bitte auf \"Ja\" klicken, um den Eröffnungssaldo auf %1 zu ändern.\n"
+"Bitte auf \"Nein\" klicken, um den Eröffnungssaldo auf %2 zu belassen.\n"
+"Bitte auf \"Abbrechen\" klicken, um das Erstellen des Kontos abzubrechen."
+
+#: kmymoney2.cpp:2345 kmymoney2.cpp:2346
+msgid "Loan payout"
+msgstr "Kreditauszahlungsbetrag"
+
+#: dialogs/knewloanwizard.cpp:892 kmymoney2.cpp:2374
+#, c-format
+msgid "Unable to add account: %1"
+msgstr "Kann Konto %1 nicht hinzufügen"
+
+#: kmymoney2.cpp:2392
+msgid ""
+"The category <b>%1</b> currently does not exist. Do you want to create it?"
+"<p><i>The parent account will default to <b>%2</b> but can be changed in the "
+"following dialog</i>."
+msgstr ""
+"Die Kategorie <b>%1</b> existiert derzeit nicht. Möchten Sie sie anlegen? "
+"<p><i>Das übergeordnete Konto ist standardmäßig <b>%2</b>, kann aber im "
+"folgenden Dialog verändert werden</i>."
+
+#: kmymoney2.cpp:2392
+msgid "Create category"
+msgstr "Kategorie erstellen"
+
+#: kmymoney2.cpp:2429
+msgid "Create a new Category"
+msgstr "Neue Kategorie erstellen"
+
+#: kmymoney2.cpp:2505
+#, c-format
+msgid "Unable to create account: %1"
+msgstr "Kann Konto nicht anlegen: %1"
+
+#: kmymoney2.cpp:2516
+msgid ""
+"The security <b>%1</b> currently does not exist as sub-account of <b>%2</b>. "
+"Do you want to create it?"
+msgstr "Die Kategorie <b>%1</b> existiert derzeit nicht. Möchten Sie sie anlegen?"
+
+#: kmymoney2.cpp:2517
+msgid "Create security"
+msgstr "Wertpapier anlegen"
+
+#: kmymoney2.cpp:2551
+msgid "Do you really want to delete the investment <b>%1</b>?"
+msgstr "Sind Sie sicher, dass Sie die Investition <b>%1</b> löschen wollen?"
+
+#: kmymoney2.cpp:2551
+msgid "Delete investment"
+msgstr "Lösche Investition"
+
+#: kmymoney2.cpp:2558
+#, c-format
+msgid "Unable to delete investment: %1"
+msgstr "Kann Investment nicht löschen: %1"
+
+#: kmymoney2.cpp:2640 kmymoney2.cpp:2646
+msgid "Unable to add scheduled transaction: "
+msgstr "Kann geplante Buchung nicht hinzufügen:"
+
+#: kmymoney2.cpp:2722
+msgid "Adjusting transactions..."
+msgstr "Anpassen der Buchungen..."
+
+#: kmymoney2.cpp:2747
+msgid "Adjusting scheduled transactions..."
+msgstr "Anpassen der geplanten Buchungen..."
+
+#: kmymoney2.cpp:2765
+msgid "Adjusting budgets..."
+msgstr "Budgets anpassen..."
+
+#: kmymoney2.cpp:2783
+msgid "Unable to exchange category <b>%1</b> with category <b>%2</b>. Reason: %3"
+msgstr ""
+"Kann Kategorie <b>%1</b> nicht mit der Kategorie <b>%2</b> austauschen. "
+"Ursache: %3"
+
+#: kmymoney2.cpp:2804
+msgid "Do you really want to delete category <b>%1</b>?"
+msgstr "Möchten Sie die Kategorie <b>'%1'</b> wirklich entfernen?"
+
+#: kmymoney2.cpp:2811
+msgid "Unable to delete category <b>%1</b>. Cause: %2"
+msgstr "Kann Kategorie <b>%1</b> nicht entfernen. Ursache: %2"
+
+#: kmymoney2.cpp:2823
+msgid ""
+"Do you want to delete category <b>%1</b> with all its sub-categories or only "
+"the category itself? If you only delete the category itself, all its sub-"
+"categories will be made sub-categories of <b>%2</b>."
+msgstr ""
+"Wollen Sie die Kategorie <b>%1</b> mit allen Unterkategorien löschen, oder "
+"nur die Kategorie selbst? Wenn Sie nur die Kategorie selbst löschen möchten, "
+"werden ihre Unterkategorien zu Unterkategorien von <b>%2</b>."
+
+#: kmymoney2.cpp:2827
+msgid "Delete all"
+msgstr "Alle löschen"
+
+#: kmymoney2.cpp:2828
+msgid "Just the category"
+msgstr "Nur die Kategorie"
+
+#: kmymoney2.cpp:2858
+msgid ""
+"Some sub-categories of category <b>%1</b> cannot be deleted, because they "
+"are still used. They will be made sub-categories of <b>%2</b>. Proceed?"
+msgstr ""
+"Einige Unterkategorien der Kategorie <b>%1</b> können nicht gelöscht werden, "
+"weil sie noch in Benutzung sind. Diese werden als Unterkategorien von <b>%2</"
+"b> beibehalten. Fortsetzen?"
+
+#: kmymoney2.cpp:2878
+msgid "Unable to delete a sub-category of category <b>%1</b>. Reason: %2"
+msgstr ""
+"Es ist unmöglich eine Unterkategorie der Kategorie <b>%1</b> zu löschen. "
+"Ursache: %2"
+
+#: kmymoney2.cpp:2889
+msgid "Do you really want to delete account <b>%1</b>?"
+msgstr "Möchten Sie das Konto <b>'%1'</b> wirklich entfernen?"
+
+#: kmymoney2.cpp:2901
+msgid "Unable to delete account '%1'. Cause: %2"
+msgstr "Kann Konto '%1' nicht löschen. Ursache: %2"
+
+#: kmymoney2.cpp:2917
+msgid "Edit account '%1'"
+msgstr "Konto '%1' bearbeiten"
+
+#: kmymoney2.cpp:2922
+msgid "Edit category '%1'"
+msgstr "Kategorie '%1' bearbeiten"
+
+#: kmymoney2.cpp:3008
+msgid "Unable to modify account '%1'. Cause: %2"
+msgstr "Kann Konto '%1' nicht verändern. Ursache: %2"
+
+#: kmymoney2.cpp:3065
+msgid ""
+"KMyMoney has detected some overdue scheduled transactions for this account. "
+"Do you want to enter those scheduled transactions now?"
+msgstr ""
+"KMyMoney hat einige überfällige geplante Buchungen in diesem Account "
+"gefunden. Möchten Sie diese jetzt in das Kontobuch eintragen?"
+
+#: kmymoney2.cpp:3065
+msgid "Scheduled transactions found"
+msgstr "Geplante Buchungen"
+
+#: kmymoney2.cpp:3163
+msgid ""
+"You are about to finish the reconciliation of this account with a difference "
+"between your bank statement and the transactions marked as cleared.\n"
+"Are you sure you want to finish the reconciliation ?"
+msgstr ""
+"Sie sind dabei, den Abgleich für dieses Konto zu beenden, obwohl noch eine "
+"Differenz zwischen Ihrem Kontoauszug und den als verrechnet markierten "
+"Buchungen besteht.\n"
+"Sind Sie sicher, dass sie den Abgleich beenden möchten?"
+
+#: kmymoney2.cpp:3165
+msgid "Confirm end of reconciliation"
+msgstr "Ende des Abgleichs bestätigen"
+
+#: kmymoney2.cpp:3339
+msgid ""
+"You have closed this account. It remains in the system because you have "
+"transactions which still refer to it, but is not shown in the views. You can "
+"make it visible again by going to the View menu and selecting <b>Show all "
+"accounts</b> or by unselecting the <b>Don't show closed accounts</b> setting."
+msgstr ""
+"Sie haben dieses Konto geschlossen. Es bleibt im System, weil Sie noch "
+"Buchungen haben, die darauf verweisen, aber es wird nicht mehr angezeigt. "
+"Sie können es wieder sichtbar machen, indem Sie im Menü View <b>Show all "
+"accounts</b> auswählen, oder indem Sie die Einstellung <b>Don't show closed "
+"accounts</b> ausschalten."
+
+#: kmymoney2.cpp:3379
+msgid "<b>%1</b> cannot be moved to institution <b>%2</b>. Reason: %3"
+msgstr ""
+"<b>%1</b> kann nicht zum Geldinstitut <b>%2</b> verschoben werden. Ursache: %"
+"3"
+
+#: kmymoney2.cpp:3393
+msgid "<b>%1</b> cannot be moved to <b>%2</b>. Reason: %3"
+msgstr "<b>%1</b> kann nicht zu <b>%2</b> verschoben werden. Ursache: %3"
+
+#: kmymoney2.cpp:3408
+msgid "%1 YTD Account Transactions"
+msgstr "%1 YTD Konto Buchungen"
+
+#: dialogs/kbalancechartdlg.cpp:71 kmymoney2.cpp:3409
+#: views/kforecastview.cpp:650 views/khomeview.cpp:276
+#: views/khomeview.cpp:1384 views/kreportsview.cpp:619
+msgid "Generated Report"
+msgstr "Erzeugter Bericht"
+
+#: dialogs/rc.cpp:324 dialogs/settings/rc.cpp:80 kmymoney2.cpp:3411
+#: views/kreportsview.cpp:1062 views/rc.cpp:58 views/rc.cpp:59
+msgid "Transactions"
+msgstr "Buchungen"
+
+#: kmymoney2.cpp:3449
+#, c-format
+msgid "Unable to add scheduled transaction: %1"
+msgstr "Kann geplante Buchung nicht hinzufügen: %1"
+
+#: kmymoney2.cpp:3449
+msgid "Add scheduled transaction"
+msgstr "Geplante Buchung eintragen"
+
+#: kmymoney2.cpp:3489
+msgid ""
+"You have entered a scheduled transaction date of <b>%1</b>. Because the "
+"scheduled transaction was last paid on <b>%2</b>, KMyMoney will "
+"automatically adjust the scheduled transaction date to the next date unless "
+"the last payment date is reset. Do you want to reset the last payment date?"
+msgstr ""
+"Sie haben als Datum <b>%1</b> angegeben. Da die geplante Buchung zuletzt am "
+"<b>%2</b> gezahlt wurde, wird KMyMoney das Datum automatisch auf das "
+"nächste Datum setzen, sofern das letzte Zahlungsdatum nicht gelöscht wird. "
+"Wollen sie das Datum der letzten Zahlung löschen?"
+
+#: kmymoney2.cpp:3489
+msgid "Reset Last Payment Date"
+msgstr "Letztes Zahlungsdatum zurücksetzen"
+
+#: kmymoney2.cpp:3499 kmymoney2.cpp:3519 kmymoney2.cpp:3531
+msgid "Unable to modify scheduled transaction '%1'"
+msgstr "Kann geplante Buchung '%1' nicht ändern"
+
+#: kmymoney2.cpp:3543
+msgid "Are you sure you want to delete the scheduled transaction <b>%1</b>?"
+msgstr "Sind Sie sicher, dass Sie die geplante Buchung <b>%1</b> löschen wollen?"
+
+#: kmymoney2.cpp:3546
+msgid ""
+"In case of loan payments it is currently not possible to recreate the "
+"scheduled transaction."
+msgstr ""
+"Im Falle von Kreditzahlungen ist es derzeit nicht möglich, eine geplante "
+"Buchung neu zu erstellen."
+
+#: kmymoney2.cpp:3555
+msgid "Unable to remove scheduled transaction '%1'"
+msgstr "Kann geplante Buchung '%1' nicht löschen"
+
+#: kmymoney2.cpp:3569
+#, c-format
+msgid ""
+"_: Copy of scheduled transaction name\n"
+"Copy of %1"
+msgstr "Kopie von %1"
+
+#: kmymoney2.cpp:3581 kmymoney2.cpp:4352
+msgid "Unable to duplicate transaction(s): %1, thrown in %2:%3"
+msgstr "Kann Buchung(en) nicht duplizieren: %1, abgelegt in %2:%3"
+
+#: kmymoney2.cpp:3595
+msgid "Do you really want to skip the <b>%1</b> transaction scheduled for <b>%2</b>?"
+msgstr ""
+"Möchten Sie die Zahlung der geplanten Buchung <b>%1</b> am <b>%2</b> "
+"wirklich überspringen?"
+
+#: kmymoney2.cpp:3605
+msgid "Unable to skip scheduled transaction <b>%1</b>."
+msgstr "Kann geplante Buchung <b>%1</b> nicht überspringen."
+
+#: kmymoney2.cpp:3618
+msgid "Unknown scheduled transaction '%1'"
+msgstr "Unbekannte geplante Buchung '%1'"
+
+#: kmymoney2.cpp:3673
+msgid ""
+"Are you sure you wish to stop this scheduled transaction from being entered "
+"into the register?\n"
+"\n"
+"KMyMoney will prompt you again next time it starts unless you manually enter "
+"it later."
+msgstr ""
+"Wollen Sie diese geplante Buchung wirklich nicht eintragen?\n"
+"\n"
+"KMyMoney wird Sie beim nächsten Programmstart wieder auf diese Buchung "
+"hinweisen, es sei denn, Sie tragen sie zuvor manuell ein."
+
+#: kmymoney2.cpp:3725 kmymoney2.cpp:3732
+msgid "Unable to enter scheduled transaction '%1'"
+msgstr "Kann geplante Buchung '%1' nicht eintragen"
+
+#: kmymoney2.cpp:3743 kmymoney2.cpp:3783
+msgid "New Payee"
+msgstr "Neuer Zahlungsempfänger"
+
+#: kmymoney2.cpp:3745
+msgid "Do you want to add <b>%1</b> as payer/receiver ?"
+msgstr "Wollen Sie '%1' als Zahler/Empfänger hinzufügen?"
+
+#: converter/mymoneystatementreader.cpp:892 kmymoney2.cpp:3747
+msgid "New payee/receiver"
+msgstr "Neuer Zahler/Empfänger"
+
+#: kmymoney2.cpp:3773
+msgid "Unable to add payee"
+msgstr "Kann Zahlungsempfänger nicht hinzufügen"
+
+#: kmymoney2.cpp:3826
+msgid "Do you really want to remove the payee <b>%1</b>?"
+msgstr "Möchten Sie den Zahlungsempfänger <b>%1</b> wirklich entfernen?"
+
+#: kmymoney2.cpp:3828
+msgid "Do you really want to remove all selected payees?"
+msgstr "Möchten alle ausgewählten Zahlungsempfänger wirklich entfernen?"
+
+#: kmymoney2.cpp:3830
+msgid "Remove Payee"
+msgstr "Zahlungsempfänger entfernen"
+
+#: kmymoney2.cpp:3870
+msgid ""
+"At least one transaction/scheduled transaction is still referenced by a "
+"payee. Currently you have all payees selected. However, at least one payee "
+"must remain so that the transaction/scheduled transaction can be reassigned."
+msgstr ""
+"Mindestens eine (geplante) Buchung verweist noch auf einen "
+"Zahlungsempfänger. Zur Zeit haben Sie alle Empfänger markiert. Mindestens "
+"einer muss erhalten bleiben, so dass die Buchungen ihm zugewiesen werden "
+"können."
+
+#: kmymoney2.cpp:3925
+msgid "Unable to reassign payee of transaction/split"
+msgstr "Kann Zahlungsempfänger der (Teil-)Buchung nicht neu zuweisen"
+
+#: converter/mymoneyqifreader.cpp:534 converter/mymoneystatementreader.cpp:959
+#: kmymoney2.cpp:3926 kmymoney2.cpp:3983 views/kbudgetview.cpp:636
+#: views/kbudgetview.cpp:737 views/kbudgetview.cpp:751
+#: views/kpayeesview.cpp:519 views/kpayeesview.cpp:870
+msgid "thrown in"
+msgstr "geworfen in"
+
+#: kmymoney2.cpp:3982
+msgid "Unable to remove payee(s)"
+msgstr "Kann Zahlungsempfänger nicht entfernen"
+
+#: kmymoney2.cpp:3990
+msgid "Enter ISO 4217 code for the new currency"
+msgstr "Geben Sie den ISO 4217 Code für die neue Währung ein"
+
+#: kmymoney2.cpp:3999
+#, c-format
+msgid "Cannot create new currency. %1"
+msgstr "Kann neue Währung nicht erstellen. %1"
+
+#: kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, c-format
+msgid "Cannot rename currency. %1"
+msgstr "Kann neue Währung nicht umbenennen. %1"
+
+#: kmymoney2.cpp:4039
+msgid "Cannot delete currency %1. %2"
+msgstr "Kann neue Währung %1 nicht löschen. %2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Cannot set %1 as base currency: %2"
+msgstr "Kann %1 nicht als Basiswährung setzen: %2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Set base currency"
+msgstr "Basiswährung auswählen"
+
+#: kmymoney2.cpp:4065
+#, c-format
+msgid "Budget %1"
+msgstr "Budget %1"
+
+#: kmymoney2.cpp:4075
+msgid "Budget %1 (%2)"
+msgstr "Budget %1 (%2)"
+
+#: kmymoney2.cpp:4090 kmymoney2.cpp:4139
+msgid "Unable to add budget: %1, thrown in %2:%3"
+msgstr "Kann Budget nicht hinzufügen: %1, abgelegt in %2:%3"
+
+#: kmymoney2.cpp:4105
+msgid "Do you really want to remove the budget <b>%1</b>?"
+msgstr "Wollen Sie wirklich das Budget <b>%1</b> entfernen?"
+
+#: kmymoney2.cpp:4107
+msgid "Do you really want to remove all selected budgets?"
+msgstr "Sind Sie sicher, dass Sie alle ausgewählten Budgets löschen wollen?"
+
+#: kmymoney2.cpp:4109
+msgid "Remove Budget"
+msgstr "Budget entfernen"
+
+#: kmymoney2.cpp:4122
+msgid "Unable to remove budget: %1, thrown in %2:%3"
+msgstr "Kann Budget nicht löschen: %1, abgelegt in %2:%3"
+
+#: kmymoney2.cpp:4134 views/kreportsview.cpp:659
+#, c-format
+msgid "Copy of %1"
+msgstr "Kopie von %1"
+
+#: kmymoney2.cpp:4164
+msgid "Select year"
+msgstr "Jahr auswählen"
+
+#: kmymoney2.cpp:4164
+msgid "Budget year"
+msgstr "Budget-Jahr"
+
+#: kmymoney2.cpp:4176 kmymoney2.cpp:4214 kmymoney2.cpp:4274
+msgid "Unable to modify budget: %1, thrown in %2:%3"
+msgstr "Kann Budget nicht bearbeiten: %1, abgelegt in %2:%3"
+
+#: kmymoney2.cpp:4192 kmymoney2.cpp:4250
+msgid ""
+"The current budget already contains data. Continuing will replace all "
+"current values of this budget."
+msgstr ""
+"Das aktuelle Budget enthält schon Daten. Wenn Sie fortfahren, werden alle "
+"aktuellen Daten des Budgets überschrieben."
+
+#: kmymoney2.cpp:4222
+msgid ""
+"Please be aware that changes made in the following dialog affect all KDE "
+"applications not only KMyMoney."
+msgstr ""
+"Bitte beachten Sie, dass Änderungen im folgenden Dialog alle KDE-"
+"Applikationen betreffen, nicht nur KMyMoney."
+
+#: kmymoney2.cpp:4292
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to delete the transactions anyway?"
+msgstr ""
+"Mindestens ein Teil der markierten Buchungen ist bereitsabgeglichen. Wollen "
+"Sie die Buchungen trotzdem löschen?"
+
+#: kmymoney2.cpp:4295 views/kgloballedgerview.cpp:1043
+msgid "Transaction already reconciled"
+msgstr "Buchung bereits abgeglichen"
+
+#: kmymoney2.cpp:4301
+msgid "Do you really want to delete the selected transaction?"
+msgstr "Sind Sie sicher, dass Sie die ausgewählte Buchung löschen wollen?"
+
+#: kmymoney2.cpp:4303
+msgid "Do you really want to delete all %1 selected transactions?"
+msgstr ""
+"Sind Sie sicher, dass Sie die alle %1 ausgewählten Investition löschen "
+"wollen?"
+
+#: kmymoney2.cpp:4305
+msgid "Delete transaction"
+msgstr "Buchung löschen"
+
+#: kmymoney2.cpp:4306
+msgid "Deleting transactions"
+msgstr "Buchungen löschen"
+
+#: kmymoney2.cpp:4321
+msgid "Duplicating transactions"
+msgstr "Buchungen duplizieren"
+
+#: kmymoney2.cpp:4378
+msgid "Unable to delete transaction(s): %1, thrown in %2:%3"
+msgstr "Kann Buchung(en) nicht löschen: %1, abgelegt in %2:%3"
+
+#: kmymoney2.cpp:4452 kmymoney2.cpp:4622
+msgid "Unable to modify transaction: %1, thrown in %2:%3"
+msgstr "Kann Buchung nicht bearbeiten: %1, abgelegt in %2:%3"
+
+#: kmymoney2.cpp:4514
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling and<br>- <b>Cancel</b> returns to the "
+"transaction editor.<p>You can also select an option to save the transaction "
+"automatically when e.g. selecting another transaction."
+msgstr ""
+"Wollen Sie das Bearbeiten dieser Buchung wirklich abbrechen, ohne sie zu "
+"speichern? <p>- <b>Yes</b> bricht die Bearbeitung der Buchung ab<br>- <b>No</"
+"b> speichert die Buchung vorher ab.- <b>Cancel</b> führt zum Buchungseditor "
+"zurück.<p>Es gibt auch eine Option, Buchungen automatisch zu speichern, "
+"wenn man beispielsweise eine andere anwählt."
+
+#: kmymoney2.cpp:4514 kmymoney2.cpp:4517
+msgid "Cancel transaction edit"
+msgstr "Buchungsbearbeitung abbrechen"
+
+#: kmymoney2.cpp:4517
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling.<p>You can also select an option to save the "
+"transaction automatically when e.g. selecting another transaction."
+msgstr ""
+"Wollen Sie das Bearbeiten dieser Buchung wirklich abbrechen, ohne sie zu "
+"speichern? <p>- <b>Yes</b> bricht die Bearbeitung der Buchung ab<br>- <b>No</"
+"b> speichert die Buchung vorher ab.<p>Es gibt auch eine Option, Buchungen "
+"automatisch zu speichern, wenn man beispielsweise eine andere anwählt."
+
+#: kmymoney2.cpp:4667
+msgid "Unable to accept transaction: %1, thrown in %2:%3"
+msgstr "Kann Buchung nicht akzeptieren: %1, abgelegt in %2:%3"
+
+#: kmymoney2.cpp:4846
+msgid "Unable to unmatch the selected transactions"
+msgstr "Kann die Zuordnung der markierten Buchungen nicht rückgängig machen"
+
+#: kmymoney2.cpp:4885
+msgid "No manually entered transaction selected for matching"
+msgstr "Keine manuell eingetragene Buchung für die Zuordnung ausgewählt"
+
+#: kmymoney2.cpp:4887
+msgid "No imported transaction selected for matching"
+msgstr "Keine importiere Buchung für die Zuordnung ausgewählt"
+
+#: kmymoney2.cpp:4895
+msgid "Unable to match the selected transactions"
+msgstr "Kann die gewählten Buchungen nicht zuordnen"
+
+#: kmymoney2.cpp:5097
+msgid "Create a new transaction"
+msgstr "Neue Buchung anlegen"
+
+#: kmymoney2.cpp:5163
+msgid "Duplicate the current selected transactions"
+msgstr "Aktuell ausgewählte Buchungen duplizieren"
+
+#: kmymoney2.cpp:5223
+msgid ""
+"_: Button text for unmatch transaction\n"
+"Unmatch"
+msgstr "Trennen"
+
+#: kmymoney2.cpp:5451 kmymoney2.cpp:5473
+msgid "Goto '%1'"
+msgstr "Gehe zu '%1'"
+
+#: kmymoney2.cpp:5582
+msgid "Running consistency check..."
+msgstr "Führe Konsistenzprüfung durch..."
+
+#: kmymoney2.cpp:5590
+#, c-format
+msgid "Consistency check failed: %1"
+msgstr "Konsistenzprüfung fehlgeschlagen: %1"
+
+#: kmymoney2.cpp:5594
+msgid "Consistency check result"
+msgstr "Ergebnis der Konsistenzprüfung"
+
+#: kmymoney2.cpp:5603
+msgid "Checking for overdue scheduled transactions..."
+msgstr "Suche nach fälligen geplanten Zahlungen..."
+
+#: kmymoney2.cpp:5740
+msgid "You must first select a KMyMoney file before you can import a statement."
+msgstr ""
+"Bevor Sie einen Kontoauszug importieren können, müssen sie zuerst eine "
+"KMyMoney-Datei auswählen."
+
+#: kmymoney2.cpp:5746
+msgid "Importing a statement via Web Connect"
+msgstr "Importiere Abrechnung via Web Connect"
+
+#: kmymoney2.cpp:5759
+msgid ""
+"Unable to import %1 using %2 plugin. The plugin returned the following "
+"error: %3"
+msgstr ""
+"Kann %1 nicht mit dem %2 Plugin importieren. Das Plugin liefert den "
+"folgenden Fehler: %3"
+
+#: kmymoney2.cpp:5759 plugins/ofximport/ofximporterplugin.cpp:646
+msgid "Importing error"
+msgstr "Importfehler"
+
+#: kmymoney2.cpp:5780
+msgid "All messages have been enabled."
+msgstr "Alle Nachrichten wurden aktiviert."
+
+#: kmymoney2.cpp:5780
+msgid "All messages"
+msgstr "Alle Meldungen"
+
+#: kmymoney2.cpp:5855
+msgid "Auto saving..."
+msgstr "Auto-Speicherung..."
+
+#: kmymoney2.cpp:5913
+msgid "Unable to setup online parameters for account ''%1'"
+msgstr "Kann Online-Parameter für Konto %1 nicht einstellen"
+
+#: kmymoney2.cpp:5928
+msgid ""
+"Do you really want to remove the mapping of account <b>%1</b> to an online "
+"account? Depending on the details of the online banking method used, this "
+"action cannot be reverted."
+msgstr ""
+"Wollen Sie die Zuordnung von Konto <b>%1</b> auf ein Onlinekonto wirklich "
+"entfernen? Abhängig von der jeweils verwendeten Onlinezugangsmethode kann "
+"dies evtl. nicht rückgängig gemacht werden."
+
+#: kmymoney2.cpp:5928
+msgid "Remove mapping to online account"
+msgstr "Entfernen der Zuordnung zu Onlinekonto"
+
+#: kmymoney2.cpp:5939
+#, c-format
+msgid "Unable to unmap account from online account: %1"
+msgstr "Kann Zuordnung vom Konto nicht vom Onlinekonto %1 entfernen"
+
+#: kmymoney2.cpp:5956
+msgid " (Brokerage)"
+msgstr "%1 (Verrechnungskonto)"
+
+#: kmymoney2.cpp:5957
+msgid ""
+"You try to map a brokerage account to an online account. This is usually not "
+"advisable. In general, the investment account should be mapped to the online "
+"account. Please cancel if you intended to map the investment account, "
+"continue otherwise"
+msgstr ""
+"Sie versuchen, ein Verrechnungskonto mit einem Online-Konto zu verbinden. "
+"Das ist in der Regel nicht gebräuchlich. Normalerweise verbinden Sie das "
+"Anlagekonto mit dem Online-Konto. Bitte brechen Sie hier ab, wenn Sie lieber "
+"das Anlagekonto verbinden wollen. Andernfalls fahren Sie fort."
+
+#: kmymoney2.cpp:5957
+msgid "Mapping brokerage account"
+msgstr "Verrechnungskonto verbinden"
+
+#: kmymoney2.cpp:5964
+msgid "Select online banking plugin"
+msgstr "Online-Banking Plugin auswählen"
+
+#: kmymoney2.cpp:6005
+#, c-format
+msgid "Unable to map account to online account: %1"
+msgstr "Kann Konto dem Onlinekonto %1 nicht zuordnen"
+
+#: converter/mymoneyqifreader.cpp:407 converter/mymoneytemplate.cpp:73
+#: views/kmymoneyview.cpp:590
+msgid "Error while loading file '%1'!"
+msgstr "Fehler beim Laden von '%1'!"
+
+#: converter/mymoneyqifreader.cpp:409 converter/mymoneyqifreader.cpp:965
+#: converter/mymoneytemplate.cpp:75 views/kmymoneyview.cpp:592
+msgid "File access error"
+msgstr "Dateizugriffsfehler"
+
+#: converter/mymoneytemplate.cpp:84
+msgid "<b>%1</b> is not a template file."
+msgstr "<b>%1</b> ist keine Vorlagendatei."
+
+#: converter/mymoneytemplate.cpp:85 views/kmymoneyview.cpp:603
+msgid "Filetype Error"
+msgstr "Dateizugriffsfehler"
+
+#: converter/mymoneytemplate.cpp:93
+msgid "Error while reading template file <b>%1</b> in line %2, column %3"
+msgstr "Fehler beim Lesen der Vorlagendatei <b>%1</b> in Zeile %2, Spalte %3"
+
+#: converter/mymoneytemplate.cpp:94
+msgid "Template Error"
+msgstr "Vorlagenfehler"
+
+#: converter/mymoneytemplate.cpp:101
+msgid "File '%1' not found!"
+msgstr "Datei '%1' nicht gefunden!"
+
+#: converter/mymoneytemplate.cpp:142
+msgid "Invalid tag <b>%1</b> in template file <b>%2</b>!"
+msgstr "Ungültige Kennzeichnung <b>%1</b> in Vorlagendatei <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:214
+#, c-format
+msgid "Loading template %1"
+msgstr "Lade Vorlage %1"
+
+#: converter/mymoneytemplate.cpp:241
+msgid "Invalid top-level account type <b>%1</b> in template file <b>%2</b>!"
+msgstr "Ungültiger Haupt-Kontotyp <b>%1</b>in Vorlagendatei <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:309
+msgid "Invalid flag type <b>%1</b> for account <b>%3</b> in template file <b>%2</b>!"
+msgstr ""
+"Ungültiger Kennzeichentyp <b>%1</b> für Konto <b>%3</b> in Vorlagendatei <b>%"
+"2</b>!"
+
+#: converter/mymoneytemplate.cpp:398 converter/mymoneytemplate.cpp:401
+#: views/kmymoneyview.cpp:1151 views/kmymoneyview.cpp:1154
+msgid "Unable to write changes to '%1'"
+msgstr "Änderungen können nicht in '%1' geschrieben werden"
+
+#: converter/mymoneytemplate.cpp:407 views/kmymoneyview.cpp:1162
+msgid "Unable to upload to '%1'"
+msgstr "Hochladen nach '%1' nicht möglich"
+
+#: converter/mymoneyqifwriter.cpp:70
+msgid ""
+"Unexpected exception '%1' thrown in %2, line %3 caught in MyMoneyQifWriter::"
+"write()"
+msgstr ""
+"Unerwartete Ausnahme '%1' in %2, Zeile %3 geworfen, abgefangen in "
+"MyMoneyQifWriter::write()"
+
+#: converter/mymoneyqifwriter.cpp:80
+msgid "Unable to open file '%1' for writing"
+msgstr "Datei '%1' kann nicht zum Schreiben geöffnet werden"
+
+#: converter/webpricequote.cpp:340
+#, c-format
+msgid "Symbol found: %1"
+msgstr "Symbol gefunden: %1"
+
+#: converter/webpricequote.cpp:368
+msgid "Price found: %1 (%2)"
+msgstr "Preis gefunden: %1 (%2)"
+
+#: converter/webpricequote.cpp:380
+#, c-format
+msgid "Date found: %1"
+msgstr "Datum gefunden: %1"
+
+#: converter/webpricequote.cpp:397 converter/webpricequote.cpp:403
+#, c-format
+msgid "Unable to update price for %1"
+msgstr "Kann Preis für %1 nicht aktualisieren"
+
+#: converter/mymoneyqifreader.cpp:170
+msgid ""
+"_: Category name\n"
+"Reinvested dividend"
+msgstr "Dividende wiederangelegt"
+
+#: converter/mymoneyqifreader.cpp:173
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (long term)"
+msgstr "Dividende wiederangelegt (langfristig)"
+
+#: converter/mymoneyqifreader.cpp:176
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (short term)"
+msgstr "Dividende wiederangelegt (kurzfristig)"
+
+#: converter/mymoneyqifreader.cpp:179
+msgid ""
+"_: Category name\n"
+"Dividend"
+msgstr "Dividende"
+
+#: converter/mymoneyqifreader.cpp:182
+msgid ""
+"_: Category name\n"
+"Interest"
+msgstr "Kapitalerträge"
+
+#: converter/mymoneyqifreader.cpp:185
+msgid ""
+"_: Category name\n"
+"Capital Gain (short term)"
+msgstr "Kapitalgewinn (kurzfristig)"
+
+#: converter/mymoneyqifreader.cpp:188
+msgid ""
+"_: Category name\n"
+"Capital Gain (mid term)"
+msgstr "Kapitalgewinn (mittelfristig)"
+
+#: converter/mymoneyqifreader.cpp:191
+msgid ""
+"_: Category name\n"
+"Capital Gain (long term)"
+msgstr "Kapitalgewinn (langfristig)"
+
+#: converter/mymoneyqifreader.cpp:194
+msgid ""
+"_: Category name\n"
+"Returned capital"
+msgstr "Kapitalverzinsung"
+
+#: converter/mymoneyqifreader.cpp:197
+msgid ""
+"_: Category name\n"
+"Miscellaneous income"
+msgstr "Sonstige Einnahmen"
+
+#: converter/mymoneyqifreader.cpp:200
+msgid ""
+"_: Category name\n"
+"Miscellaneous expense"
+msgstr "Sonstige Ausgaben"
+
+#: converter/mymoneyqifreader.cpp:203
+msgid ""
+"_: Category name\n"
+"Investment fees"
+msgstr "Gebühren"
+
+#: converter/mymoneyqifreader.cpp:205
+#, c-format
+msgid "Unknown QIF type %1"
+msgstr "Unbekannter QIF Typ %1"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Date format selection"
+msgstr "Datumsformatwahl"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Pick the date format that suits your input file"
+msgstr "Wählen Sie das Datumsformat aus, das dem in Ihrer QIF-Datei entspricht."
+
+#: converter/mymoneyqifreader.cpp:366
+msgid "Importing QIF ..."
+msgstr "Importiere QIF-Datei..."
+
+#: converter/mymoneyqifreader.cpp:442
+msgid "Reading QIF ..."
+msgstr "Lese QIF..."
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Adding transactions"
+msgstr "Buchungen werden hinzufügt"
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Now adding the transactions to your ledger..."
+msgstr "Buchungen in das Kontobuch übernehmen..."
+
+#: converter/mymoneyqifreader.cpp:533
+msgid "Unable to add transactions"
+msgstr "Kann Buchungen nicht hinzufügen"
+
+#: converter/mymoneyqifreader.cpp:567
+msgid ""
+"_: QIF tag for liability account\n"
+"Oth L"
+msgstr "Oth L"
+
+#: converter/mymoneyqifreader.cpp:572
+msgid ""
+"_: QIF tag for category\n"
+"Cat"
+msgstr "Cat"
+
+#: converter/mymoneyqifreader.cpp:575
+msgid ""
+"_: QIF tag for security\n"
+"Security"
+msgstr "Security"
+
+#: converter/mymoneyqifreader.cpp:578
+msgid ""
+"_: QIF tag for investment account\n"
+"Invst"
+msgstr "Invst"
+
+#: converter/mymoneyqifreader.cpp:581
+msgid ""
+"_: QIF tag for prices\n"
+"Prices"
+msgstr "Prices"
+
+#: converter/mymoneyqifreader.cpp:599
+msgid ""
+"_: QIF tag for a class\n"
+"Class"
+msgstr "Class"
+
+#: converter/mymoneyqifreader.cpp:753 converter/mymoneyqifreader.cpp:2203
+msgid ""
+"The %1 account currently has an opening balance of %2. This QIF file reports "
+"an opening balance of %3. Would you like to overwrite the current balance "
+"with the one from the QIF file?"
+msgstr ""
+"Das Konto %1 hat einen Anfangsbestand von %2. Die QIF-Datei berichtet einen "
+"Anfangsbestand von %3. Möchten Sie den momentanen Stand mit dem aus der QIF-"
+"Datei überschreiben?"
+
+#: converter/mymoneyqifreader.cpp:754 converter/mymoneyqifreader.cpp:2204
+msgid "Overwrite opening balance"
+msgstr "Überschreibe Eröffnungssaldo"
+
+#: converter/mymoneyqifreader.cpp:879 converter/mymoneyqifreader.cpp:890
+#: converter/mymoneyqifreader.cpp:914
+msgid "Autogenerated by QIF importer"
+msgstr "Automatisch vom QIF Importer generiert"
+
+#: converter/mymoneyqifreader.cpp:907
+msgid "QIF imported, no account name supplied"
+msgstr "Von QIF importiert, kein Kontenname angegeben"
+
+#: converter/mymoneyqifreader.cpp:940
+msgid ""
+"KMyMoney has imported a second opening balance transaction into account <b>%"
+"1</b> which differs from the one found already on file. Please correct this "
+"manually once the import is done."
+msgstr ""
+"KMyMoney hat eine zweite Eröffnungsbuchung in das Konto <b>%1</b> "
+"importiert, die von der bereits vorhanden abweicht. Bitte korrigieren Sie "
+"dies manuell nachdem der Import abgeschlossen ist."
+
+#: converter/mymoneyqifreader.cpp:940
+msgid "Opening balance problem"
+msgstr "Problem mit dem Eröffnungssaldo"
+
+#: converter/mymoneyqifreader.cpp:963
+msgid "Error while creating opening balance transaction"
+msgstr "Fehler beim Erstellen der Buchung für den Eröffnungssaldo"
+
+#: converter/mymoneyqifreader.cpp:1029 converter/mymoneyqifreader.cpp:1276
+msgid ""
+"The date entry \"%1\" read from the file cannot be interpreted through the "
+"current date profile setting of \"%2\".\n"
+"\n"
+"Pressing \"Continue\" will assign todays date to the transaction. Pressing "
+"\"Cancel\" will abort the import operation. You can then restart the import "
+"and select a different QIF profile or create a new one."
+msgstr ""
+"Der Datumseintrag \"%1\" der aus der Datei gelesen wurde, konnte mit dem "
+"aktuellen eingestellten Datumsfilter \"%2\" nicht interpretiert werden.\n"
+"\n"
+"\"Fortfahren\" wird das heutige Datum für die Buchung verwenden. \"Abbrechen"
+"\" bricht das Importieren ab. Sie können dann das Importieren neu starten "
+"und andere QIF-Einstellungen wählen oder Neue erstellen."
+
+#: converter/mymoneyqifreader.cpp:1035 converter/mymoneyqifreader.cpp:1282
+msgid "Invalid date format"
+msgstr "Ungültiges Datumsformat"
+
+#: converter/mymoneyqifreader.cpp:1398
+#: converter/mymoneystatementreader.cpp:589
+#: converter/mymoneystatementreader.cpp:592
+msgid "Statement Importer"
+msgstr "Import-Werkzeug für Kontoauszüge"
+
+#: converter/mymoneyqifreader.cpp:1413
+#: converter/mymoneystatementreader.cpp:644
+msgid ""
+"This investment account does not contain the \"%1\" security. Transactions "
+"involving this security will be ignored."
+msgstr ""
+"Das Investmentkonto enthält das \"%1\"-Wertpapier. nicht. Buchungen die "
+"dieses Wertpapier betreffen, werden ignoriert."
+
+#: converter/mymoneyqifreader.cpp:1415
+#: converter/mymoneystatementreader.cpp:612
+#: converter/mymoneystatementreader.cpp:644
+msgid "Security not found"
+msgstr "Kapitalanlage nicht gefunden"
+
+#: converter/mymoneyqifreader.cpp:2021
+msgid "%1 (Investment)"
+msgstr "%1 (Wertpapierdepot)"
+
+#: converter/mymoneyqifreader.cpp:2022
+msgid "Autogenerated by QIF importer from type Mutual account entry"
+msgstr "Vom QIF Importer automatisch aus dem Typ Mutual angelegt"
+
+#: converter/mymoneyqifreader.cpp:2085 converter/mymoneyqifreader.cpp:2228
+msgid "account"
+msgstr "Konto"
+
+#: converter/mymoneyqifreader.cpp:2086
+msgid "al"
+msgstr "al"
+
+#: converter/mymoneyqifreader.cpp:2093
+msgid "category"
+msgstr "Kategorie"
+
+#: converter/mymoneyqifreader.cpp:2094
+msgid "ei"
+msgstr "ei"
+
+#: converter/mymoneyqifreader.cpp:2095
+msgid "Category selection"
+msgstr "Kategorieauswahl"
+
+#: converter/mymoneyqifreader.cpp:2110
+msgid "Account \"%1\" disappeared: "
+msgstr "Das Konto \"%1\" ist nicht mehr vorhanden: "
+
+#: converter/mymoneyqifreader.cpp:2131
+msgid "The %1 '%2' does not exist. Do you want to create it?"
+msgstr "%1 '%2' existiert derzeit nicht. Wollen Sie den Eintrag neu erstellen?"
+
+#: converter/mymoneyqifreader.cpp:2140
+#, c-format
+msgid "Select %1"
+msgstr "%1 auswählen"
+
+#: converter/mymoneyqifreader.cpp:2142
+msgid ""
+"The %1 <b>%2</b> currently exists. Do you want to import transactions to "
+"this account?"
+msgstr ""
+"%1 <b>%2</b> existiert bereits. Möchten Sie Buchungen auf dieses Konto "
+"importieren?"
+
+#: converter/mymoneyqifreader.cpp:2147
+msgid ""
+"The %1 <b>%2</b> currently does not exist. You can create a new %3 by "
+"pressing the <b>Create</b> button or select another %4 manually from the "
+"selection box."
+msgstr ""
+"%1 <b>%2</b> existiert derzeit nicht. Sie können ein neues %3 erstellen, "
+"indem Sie den <b>Erstellen</b> Knopf drücken, oder ein anderes %4 auswählen."
+
+#: converter/mymoneyqifreader.cpp:2154
+#, c-format
+msgid "Import transactions to %1"
+msgstr "Buchungen nach %1 importieren"
+
+#: converter/mymoneyqifreader.cpp:2155
+msgid ""
+"No %1 information has been found in the selected QIF file. Please select an "
+"account using the selection box in the dialog or create a new %2 by pressing "
+"the <b>Create</b> button."
+msgstr ""
+"%1-Informationen wurden in der ausgewählten QIF-Datei nicht gefunden. Bitte "
+"wählen Sie ein Konto oder erstellen Sie ein neues %2 durch Drücken des "
+"Knopfes <b>Erstellen</b>."
+
+#: converter/mymoneyqifreader.cpp:2229
+msgid "You must select or create an account."
+msgstr "Sie müssen ein Konto auswählen oder erstellen."
+
+#: converter/mymoneyqifreader.cpp:2231
+msgid "You must select or create a category."
+msgstr "Sie müssen eine Kategorie auswählen oder erstellen."
+
+#: converter/mymoneystatementreader.cpp:100
+msgid "_Fees"
+msgstr "Gebühren"
+
+#: converter/mymoneystatementreader.cpp:106
+msgid "_Dividend"
+msgstr "Dividende"
+
+#: converter/mymoneystatementreader.cpp:289
+#, c-format
+msgid "Importing statement for account %1"
+msgstr "Importiere Kontoauszug für Konto %1"
+
+#: converter/mymoneystatementreader.cpp:291
+msgid "Importing statement without transactions"
+msgstr "Importiere Kontoauszug ohne Buchungen"
+
+#: converter/mymoneystatementreader.cpp:385
+msgid " Statement balance is not contained in statement."
+msgstr " Bankauszug enthält keine Angabe zum Saldo."
+
+#: converter/mymoneystatementreader.cpp:387
+msgid " Statement balance on %1 is reported to be %2"
+msgstr " Endsaldo am %1 ist %2."
+
+#: converter/mymoneystatementreader.cpp:389
+msgid " Transactions"
+msgstr " Buchungen"
+
+#: converter/mymoneystatementreader.cpp:390
+msgid " %1 processed"
+msgstr " %1 verarbeitet"
+
+#: converter/mymoneystatementreader.cpp:391
+msgid " %1 added"
+msgstr " %1 hinzugefügt"
+
+#: converter/mymoneystatementreader.cpp:392
+msgid " %1 matched"
+msgstr " %1 im Kontobuch gefunden"
+
+#: converter/mymoneystatementreader.cpp:393
+msgid " %1 duplicates"
+msgstr " %1 Duplikate erkannt"
+
+#: converter/mymoneystatementreader.cpp:394
+msgid " Payees"
+msgstr " Zahlungsempfänger"
+
+#: converter/mymoneystatementreader.cpp:395
+msgid " %1 created"
+msgstr " %1 angelegt"
+
+#: converter/mymoneystatementreader.cpp:483
+#, c-format
+msgid "Error creating security record: %1"
+msgstr "Fehler beim Erzeugen des Eintrags: %1"
+
+#: converter/mymoneystatementreader.cpp:612
+msgid ""
+"This imported statement contains investment transactions with no security. "
+"These transactions will be ignored."
+msgstr ""
+"Dieser importierte Kontoauszug enthält Investitionsbuchungen ohne "
+"Wertpapiere. Derartige Buchungen werden ignoriert."
+
+#: converter/mymoneystatementreader.cpp:803
+msgid "(Fees) "
+msgstr "(Gebühren)"
+
+#: converter/mymoneystatementreader.cpp:880
+msgid ""
+"Do you want to add \"%1\" as payee/receiver?\n"
+"\n"
+msgstr ""
+"Möchten Sie \"%1\" als Zahler/Empfänger hinzufügen?\n"
+"\n"
+
+#: converter/mymoneystatementreader.cpp:881
+msgid ""
+"Selecting \"Yes\" will create the payee, \"No\" will skip creation of a "
+"payee record and remove the payee information from this transaction. "
+"Selecting \"Cancel\" aborts the import operation.\n"
+"\n"
+"If you select \"No\" here and mark the \"Don't ask again\" checkbox, the "
+"payee information for all following transactions referencing \"%1\" will be "
+"removed."
+msgstr ""
+"\"Ja\" erzeugt einen Eintrag für den Empfänger, \"Nein\" überspringt die "
+"Erzeugung des Eintrags und lässt die Empfänger-Informationen dieser Buchung "
+"leer. \"Abbrechen\" bricht das Importieren ab.\n"
+"\n"
+"Durch Auswählen von \"Nicht mehr nachfragen\" werden die Empfänger-"
+"Informationen für alle folgenden Buchungen, die sich auf \"%1\" beziehen, "
+"von der Buchung vor dem Importieren entfernt."
+
+#: converter/mymoneystatementreader.cpp:917
+msgid "Save Category"
+msgstr "Kategorie speichern"
+
+#: converter/mymoneystatementreader.cpp:918
+msgid "No Category"
+msgstr "Keine Kategorie"
+
+#: converter/mymoneystatementreader.cpp:919 dialogs/rc.cpp:4
+msgid "Abort"
+msgstr "Abbrechen"
+
+#: converter/mymoneystatementreader.cpp:926
+msgid "Please select a default category for payee '%1':"
+msgstr "Bitte wählen Sie eine Defaultkategorie für den Empfänger '%1':"
+
+#: converter/mymoneystatementreader.cpp:958
+msgid "Unable to add payee/receiver"
+msgstr "Kann Zahler/Empfänger nicht hinzufügen"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid ""
+"KMyMoney has found a scheduled transaction named <b>%1</b> which matches an "
+"imported transaction. Do you want KMyMoney to enter this schedule now so "
+"that the transaction can be matched? "
+msgstr ""
+"KMyMoney hat eine geplante Buchung mit dem Namen <b>%1</b> gefunden, die zu "
+"einer importierten Buchung passt. Wollen Sie, dass KMyMoney diese geplante "
+"Buchung nun einträgt, so dass ihr die Buchung zugeordnet werden kann?"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid "Schedule found"
+msgstr "Geplante Buchung gefunden"
+
+#: converter/mymoneystatementreader.cpp:1219
+msgid "Problem adding or matching imported transaction with id '%1': %2"
+msgstr ""
+"Problem beim Hinzufügen oder Zuordnen der importierten Buchung mit der id '%"
+"1': %2"
+
+#: converter/mymoneystatementreader.cpp:1268
+msgid "<b>You have downloaded a statement for the following account:</b><br><br>"
+msgstr "<b>Sie haben einen Auszug für das folgende Konto heruntergeladen:</b><br><br>"
+
+#: converter/mymoneystatementreader.cpp:1269
+#, c-format
+msgid " - Account Name: %1"
+msgstr " - Kontoname: %1<br>"
+
+#: converter/mymoneystatementreader.cpp:1270
+#, c-format
+msgid " - Account Type: %1"
+msgstr "- Kontotyp: %1<br>"
+
+#: converter/mymoneystatementreader.cpp:1271
+#, c-format
+msgid " - Account Number: %1"
+msgstr " - Kontonummer: %1<br>"
+
+#: converter/mymoneystatementreader.cpp:1279
+msgid "Do you want to import transactions to this account?"
+msgstr "Möchten Sie Buchungen auf dieses Konto importieren?"
+
+#: converter/mymoneystatementreader.cpp:1281
+msgid ""
+"KMyMoney cannot determine which of your accounts to use. You can create a "
+"new account by pressing the <b>Create</b> button or select another one "
+"manually from the selection box below."
+msgstr ""
+"KMyMoney kann nicht erkennen, welches Konto genutzt werden soll. Sie können "
+"ein neues erstellen, indem Sie den Knopf <b>Erstellen</b> drücken oder ein "
+"bestehendes aus der Liste auswählen."
+
+#: converter/mymoneystatementreader.cpp:1287
+msgid ""
+"No account information has been found in the selected statement file. Please "
+"select an account using the selection box in the dialog or create a new "
+"account by pressing the <b>Create</b> button."
+msgstr ""
+"In der ausgewählten Abrechnungsdatei wurden keine Konteninformationen "
+"gefunden. Bitte wählen Sie ein Konto oder erstellen Sie ein neues durch "
+"Drücken des Knopfes <b>Erstellen</b>."
+
+#: converter/mymoneystatementreader.cpp:1294
+msgid "Import transactions"
+msgstr "Buchungen importieren"
+
+#: converter/mymoneystatementreader.cpp:1330
+msgid ""
+"You must select an account, create a new one, or press the <b>Abort</b> "
+"button."
+msgstr ""
+"Sie müssen entweder ein Konto auswählen, ein neues erstellen oder den "
+"Schalter <b>Abbrechen</b> drücken."
+
+#: converter/mymoneygncreader.cpp:119
+msgid "%1: Sorry. This importer cannot handle version %2 of element %3"
+msgstr ""
+"%1: Dieser Importer kann die Version %2 des Elementes %3 leider nicht "
+"verarbeiten"
+
+#: converter/mymoneygncreader.cpp:193
+#, c-format
+msgid "Account%1"
+msgstr "Konto%1"
+
+#: converter/mymoneygncreader.cpp:197
+#, c-format
+msgid "Stock%1"
+msgstr "Wertpapier%1"
+
+#: converter/mymoneygncreader.cpp:206
+#, c-format
+msgid "Payee%1"
+msgstr "Zahlungsempfänger%1"
+
+#: converter/mymoneygncreader.cpp:212
+#, c-format
+msgid "Schedule%1"
+msgstr "Planung%1"
+
+#: converter/mymoneygncreader.cpp:262
+msgid "This version of the importer cannot handle multi-book files."
+msgstr "Diese Version des Importers kann keine mehrfach Kontobuchdateien handhaben."
+
+#: converter/mymoneygncreader.cpp:912
+msgid "Invalid header for file. Should be 'gnc-v2'"
+msgstr "Ungültige Kopfdaten für Datei. Sollte 'gnc-v2' sein"
+
+#: converter/mymoneygncreader.cpp:937 converter/mymoneygncreader.cpp:972
+#: converter/mymoneygncreader.cpp:1062
+#, c-format
+msgid ""
+"Import failed:\n"
+"\n"
+"%1"
+msgstr ""
+"Import fehlgeschlagen\n"
+"\n"
+"%1"
+
+#: converter/mymoneygncreader.cpp:1065
+msgid "Import complete"
+msgstr "Import abgeschlossen"
+
+#: converter/mymoneygncreader.cpp:1120
+msgid "Disguise your wealth"
+msgstr "Verschleiere deinen Reichtum"
+
+#: converter/mymoneygncreader.cpp:1121
+msgid ""
+"Each monetary value on your file will be multiplied by a random number "
+"between 0.01 and 1.99\n"
+"with a different value used for each transaction. In addition, to further "
+"disguise the true\n"
+"values, you may enter a number between %1 and %2 which will be applied to "
+"all values.\n"
+"These numbers will not be stored in the file."
+msgstr ""
+"Jeder Geldbetrag in Ihrer Datei wird mit einer Zufallszahl zwischen 0,01 und "
+"1,99 multipliziert,\n"
+" dabei wird für jede Buchung eine neue Zufallszahl generiert. Um zusätzlich "
+"den Wert zu verschleiern,\n"
+" können Sie eine Zahl zwischen %1 und %2 angeben, welche mit jedem "
+"Buchungswert verarbeitet wird.\n"
+" Diese Werte werden nicht in der Datei gespeichert."
+
+#: converter/mymoneygncreader.cpp:1135
+msgid "Loading commodities..."
+msgstr "Lade Wertpapiere/Währungen..."
+
+#: converter/mymoneygncreader.cpp:1160
+msgid "Loading prices..."
+msgstr "Lade Preise..."
+
+#: converter/mymoneygncreader.cpp:1164 converter/mymoneygncreader.cpp:1171
+msgid "Imported History"
+msgstr "Importierte Historie"
+
+#: converter/mymoneygncreader.cpp:1251
+#, c-format
+msgid "Current importer does not recognize GnuCash account type %1"
+msgstr "Die benutzte Importfunktion erkennt den GnuCash-Kontotypen %1 nicht"
+
+#: converter/mymoneygncreader.cpp:1471
+msgid "Imported Transaction"
+msgstr "Importierte Buchungen"
+
+#: converter/mymoneygncreader.cpp:1519
+msgid "Loading templates..."
+msgstr "Lade Vorlagen..."
+
+#: converter/mymoneygncreader.cpp:1531
+msgid "Unknown payee"
+msgstr "Unbekannter Zahler/Empfänger"
+
+#: converter/mymoneygncreader.cpp:1723
+msgid "Loading schedules..."
+msgstr "Lade Planungen..."
+
+#: converter/mymoneygncreader.cpp:1735
+#, c-format
+msgid "Can't find template transaction for schedule %1"
+msgstr "Kann keine Vorlage-Buchung für Planung %1 finden"
+
+#: converter/mymoneygncreader.cpp:1910
+msgid "Reorganizing accounts..."
+msgstr "Reorganisiere Konten..."
+
+#: converter/mymoneygncreader.cpp:1972
+msgid ""
+"Your main currency seems to be %1 (%2); do you want to set this as your base "
+"currency?"
+msgstr ""
+"Ihre Hauptwährung scheint %1 (%2) zu sein; möchten Sie diese als "
+"Basiswährung verwenden?"
+
+#: converter/mymoneygncreader.cpp:1993
+msgid "More"
+msgstr "Mehr"
+
+#: converter/mymoneygncreader.cpp:1997
+msgid "Save Report"
+msgstr "Speichere Bericht"
+
+#: converter/mymoneygncreader.cpp:2017
+msgid ""
+"Problems were encountered in converting schedule '%1'.\n"
+"Do you want to review or edit it now?"
+msgstr ""
+"Beim Konvertieren der geplanten Zahlung '%1' sind Probleme aufgetreten.\n"
+"Wollen Sie diese jetzt überprüfen oder bearbeiten?"
+
+#: converter/mymoneygncreader.cpp:2039
+msgid ""
+"Found:\n"
+"\n"
+msgstr ""
+"Gefunden:\n"
+"\n"
+
+#: converter/mymoneygncreader.cpp:2040
+msgid " commodities (equities)\n"
+msgstr " Waren (Eigenkapital)\n"
+
+#: converter/mymoneygncreader.cpp:2041
+msgid " prices\n"
+msgstr "Preise\n"
+
+#: converter/mymoneygncreader.cpp:2042
+msgid " accounts\n"
+msgstr "Konten\n"
+
+#: converter/mymoneygncreader.cpp:2043
+msgid " transactions\n"
+msgstr "Buchungen\n"
+
+#: converter/mymoneygncreader.cpp:2044
+msgid " schedules\n"
+msgstr " Planungen\n"
+
+#: converter/mymoneygncreader.cpp:2047
+msgid "No inconsistencies were detected"
+msgstr "Keine Inkonsistenzen entdeckt"
+
+#: converter/mymoneygncreader.cpp:2049
+msgid " inconsistencies were detected and corrected\n"
+msgstr "Inkonsistenzen wurden gefunden und korrigiert.\n"
+
+#: converter/mymoneygncreader.cpp:2054
+msgid " orphan accounts were created\n"
+msgstr " Ausbuchungskonten wurde angelegt\n"
+
+#: converter/mymoneygncreader.cpp:2059
+msgid " possible schedule problems were noted\n"
+msgstr " Mögliche Probleme mit den Planungen wurden entdeckt\n"
+
+#: converter/mymoneygncreader.cpp:2064
+msgid "Small Business Features (Customers, Invoices, etc.)"
+msgstr "Kleinfirmenfunktionen (Kunden, Rechnungen, etc.)"
+
+#: converter/mymoneygncreader.cpp:2065 views/kmymoneyview.cpp:241
+#: views/kmymoneyview.cpp:243
+msgid "Budgets"
+msgstr "Budgets"
+
+#: converter/mymoneygncreader.cpp:2066
+msgid "Lots"
+msgstr "Posten"
+
+#: converter/mymoneygncreader.cpp:2068
+msgid "The following features found in your file are not currently supported:"
+msgstr ""
+"Die folgenden in Ihrer Datei verwendeten Funktionen werden derzeit nicht "
+"unterstützt:"
+
+#: converter/mymoneygncreader.cpp:2071
+msgid ""
+"\n"
+"\n"
+"Press More for further information"
+msgstr ""
+"\n"
+"\n"
+"Sonstige Kreditinformationen bearbeiten"
+
+#: converter/mymoneygncreader.cpp:2139
+msgid "Orphan created from unknown gnucash account"
+msgstr "Ausbuchungskonto wurde aus unbekanntem GnuCash-Konto erstellt"
+
+#: converter/mymoneygncreader.cpp:2170
+msgid "Internal error - invalid interval char in incrDate"
+msgstr "Interner Fehler - ungültiges Intervallzeichen in incrDate"
+
+#: converter/mymoneygncreader.cpp:2233
+msgid "Enter the investment account name "
+msgstr "Geben Sie den Namen des Investitionskontos ein "
+
+#: converter/mymoneygncreader.cpp:2234
+msgid "My Investments"
+msgstr "Meine Investitionen"
+
+#: converter/mymoneygncreader.cpp:2269
+#, c-format
+msgid "Select parent investment account or enter new name. Stock %1"
+msgstr ""
+"Wählen Sie ein übergeordnetes Investmentkonto oder geben Sie einen neuen "
+"Namen ein. Aktie %1"
+
+#: converter/mymoneygncreader.cpp:2292 converter/mymoneygncreader.cpp:2307
+msgid "%1 is not an Investment Account. Do you wish to make it one?"
+msgstr "%1 ist kein Investmentkonto. Möchten Sie es in eines umwandeln?"
+
+#: converter/mymoneygncreader.cpp:2408
+msgid ""
+"An Investment account must be a child of an Asset account\n"
+"Account %1 will be stored under the main Asset account"
+msgstr ""
+"Ein Investmentkonto muss einem Anlagekonto untergeordnet sein\n"
+"Konto %1 wird dem Hauptanlagekonto untergeordnet"
+
+#: converter/mymoneygncreader.cpp:2410
+msgid ""
+"An Income account must be a child of an Income account\n"
+"Account %1 will be stored under the main Income account"
+msgstr ""
+"Ein Einnahmekonto muss einem Einnahmekonto untergeordnet sein\n"
+"Konto %1 wird dem Haupteinnahmekonto untergeordnet"
+
+#: converter/mymoneygncreader.cpp:2412
+msgid ""
+"An Expense account must be a child of an Expense account\n"
+"Account %1 will be stored under the main Expense account"
+msgstr ""
+"Ein Ausgabekonto muss einem Ausgabekonto untergeordnet sein\n"
+"Konto %1 wird dem Hauptausgabekonto untergeordnet"
+
+#: converter/mymoneygncreader.cpp:2414
+msgid ""
+"One or more transactions contain a reference to an otherwise unknown "
+"account\n"
+"An asset account with the name %1 has been created to hold the data"
+msgstr ""
+"Eine oder mehrere Buchungen beinhalten eine Referenz zu einem ansonsten "
+"unbekannten Konto\n"
+"Ein Anlagekonto mit dem Namen %1 wurde angelegt, um diese Buchungen "
+"aufzufangen"
+
+#: converter/mymoneygncreader.cpp:2416
+msgid "Schedule %1 has interval of %2 which is not currently available"
+msgstr "Planung %1 hat ein Intervall von %2, das momentan nicht verfügbar ist"
+
+#: converter/mymoneygncreader.cpp:2417
+msgid "Schedule %1 dropped at user request"
+msgstr "Planung %1 wurde wunschgemäß gelöscht"
+
+#: converter/mymoneygncreader.cpp:2418
+msgid "Schedule %1 contains unknown action (key = %2, type = %3)"
+msgstr "Planung %1 enthält eine unbekannte Aktion (Schlüssel = %2, Typ = %3)"
+
+#: converter/mymoneygncreader.cpp:2419
+msgid "Schedule %1 contains multiple actions; only one has been imported"
+msgstr "Planung %1 enthält mehrere Vorgänge, lediglich eine wurde importiert"
+
+#: converter/mymoneygncreader.cpp:2420
+msgid "Schedule %1 contains no valid splits"
+msgstr "Planung %1 enthält keine gültigen Split-Buchungen"
+
+#: converter/mymoneygncreader.cpp:2421
+msgid ""
+"Schedule %1 appears to contain a formula. GnuCash formulae are not "
+"convertible"
+msgstr ""
+"Planung %1 scheint eine Formel zu enthalten. GnuCash-Formeln können nicht "
+"konvertiert werden"
+
+#: converter/mymoneygncreader.cpp:2422
+msgid ""
+"Schedule %1 contains unknown interval specification; please check for "
+"correct operation"
+msgstr ""
+"Planung %1 enthält eine unbekannte Intervallspezifikation, bitte überprüfen "
+"Sie auf korrekte Funktionsweise"
+
+#: converter/mymoneygncreader.cpp:2423
+msgid ""
+"Schedule %1 contains a deferred interval specification; please check for "
+"correct operation"
+msgstr ""
+"Planung %1 enthält eine zurückgestellte Intervallspezifikation, bitte "
+"überprüfen Sie diese auf korrekte Funktionsweise"
+
+#: converter/mymoneygncreader.cpp:2424
+msgid ""
+"Account or Category %1, transaction date %2; split contains invalid value; "
+"please check"
+msgstr ""
+"Konto oder Kategorie %1, Buchungsdatum %2; Split-Buchung enthält ungültigen "
+"Wert. Bitte überprüfen"
+
+#: kmymoneyutils.cpp:146
+msgid "&New Schedule..."
+msgstr "&Neue Buchung planen..."
+
+#: kmymoneyutils.cpp:148
+msgid "Create a new schedule."
+msgstr "Neure geplante Buchung erstellen."
+
+#: kmymoneyutils.cpp:149
+msgid "Use this to create a new schedule."
+msgstr "Hiermit einen neuen Zahlungsplan erstellen."
+
+#: kmymoneyutils.cpp:158
+msgid "&Filter"
+msgstr "&Filtern"
+
+#: kmymoneyutils.cpp:160
+msgid "Filter out accounts"
+msgstr "Konten ausfiltern"
+
+#: kmymoneyutils.cpp:161
+msgid "Use this to filter out accounts"
+msgstr "Drücken, um Konten herauszufiltern"
+
+#: kmymoneyutils.cpp:192
+msgid "Preferred accounts"
+msgstr "Bevorzugte Konten"
+
+#: kmymoneyutils.cpp:193
+msgid "Payment accounts"
+msgstr "Zahlungskonten"
+
+#: kmymoneyutils.cpp:194
+msgid "Favorite reports"
+msgstr "Beliebte Berichte"
+
+#: kmymoneyutils.cpp:195
+msgid "Forecast (schedule)"
+msgstr "Vorhersage (geplante Buchungen)"
+
+#: kmymoneyutils.cpp:196
+msgid "Networth forecast"
+msgstr "Eigenkapital per heute"
+
+#: kmymoneyutils.cpp:197
+msgid "Forecast (history)"
+msgstr "Vorhersage (historisch)"
+
+#: kmymoneyutils.cpp:198
+msgid "Assets and Liabilities"
+msgstr "Anlagen & Verbindlichkeiten"
+
+#: kmymoneyutils.cpp:199 reports/pivottable.cpp:2416 views/khomeview.cpp:1393
+#: widgets/rc.cpp:70
+msgid "Budget"
+msgstr "Budget"
+
+#: kmymoneyutils.cpp:200
+msgid "CashFlow"
+msgstr "Geldfluß"
+
+#: dialogs/kenterscheduledlg.cpp:153 kmymoneyutils.cpp:366
+msgid "Unable to load schedule details"
+msgstr "Kann Details zu geplanter Zahlung nicht laden"
+
+#: kmymoneyutils.cpp:390 widgets/register.cpp:473
+msgid ""
+"_: Reconcile state 'Not reconciled'\n"
+"Not reconciled"
+msgstr "Nicht abgeglichen"
+
+#: kmymoneyutils.cpp:393 widgets/register.cpp:476
+msgid ""
+"_: Reconcile state 'Cleared'\n"
+"Cleared"
+msgstr "Verrechnet"
+
+#: kmymoneyutils.cpp:396 widgets/register.cpp:479
+msgid ""
+"_: Reconcile state 'Reconciled'\n"
+"Reconciled"
+msgstr "Abgeglichen"
+
+#: kmymoneyutils.cpp:399 widgets/register.cpp:482
+msgid ""
+"_: Reconcile state 'Frozen'\n"
+"Frozen"
+msgstr "Eingefroren"
+
+#: kmymoneyutils.cpp:410
+msgid ""
+"_: Reconcile flag C\n"
+"C"
+msgstr "V"
+
+#: kmymoneyutils.cpp:413
+msgid ""
+"_: Reconcile flag R\n"
+"R"
+msgstr "A"
+
+#: kmymoneyutils.cpp:416
+msgid ""
+"_: Reconcile flag F\n"
+"F"
+msgstr "E"
+
+#: kmymoneyutils.cpp:419
+msgid ""
+"_: Flag for unknown reconciliation state\n"
+"?"
+msgstr "?"
+
+#: _tips.cpp:3
+msgid ""
+"<p>...that you can change the sort order of ledger entries by\n"
+"right-clicking the header of the ledger view?\n"
+msgstr ""
+"<p>...dass Sie die Sortierreihenfolge der Kontobucheinträge durch Klicken\n"
+"der rechten Maustaste auf die Kopfzeile der Buchungsliste ändern können?\n"
+
+#: _tips.cpp:9
+msgid ""
+"<p>...that you can easily move to the other side of a transfer transaction\n"
+"by opening the context menu with the right mouse button and selecting one of "
+"the\n"
+"'Goto' functions?\n"
+msgstr ""
+"<p>...dass Sie auf einfache Weise auf die Gegenseite einer Buchung gelangen\n"
+"können indem Sie das Kontextmenü mit der rechten Maustaste öffnen und eine "
+"der\n"
+"<i>Gehe zu ...</i> Funktionen anwählen?\n"
+
+#: _tips.cpp:16
+msgid ""
+"<p>...that you can start editing a transaction by double-clicking on the\n"
+"transaction in the register?\n"
+msgstr ""
+"<p>...dass Sie durch Doppelklicken die Bearbeitung einer Buchung im\n"
+"Kontobuch beginnen können?\n"
+
+#: _tips.cpp:22
+msgid ""
+"<p>...that you can show more details of the selected transaction in the\n"
+"register by selecting the 'ledger lens' feature in the settings dialog?\n"
+msgstr ""
+"<p>...dass Sie mehr Details der gerade selektierten Buchung anzeigen lassen "
+"können, in dem Sie die Funktion <i>Buchungslupe</i> im Konfigurationsdialog "
+"anwählen?\n"
+
+#: _tips.cpp:28
+msgid ""
+"<p>...that transactions with no category assigned or split\n"
+"transactions with unassigned values are marked with an exclamation mark \n"
+"on a yellow triangle in the register?\n"
+msgstr ""
+"<p>...dass Buchungen, die keine zugewiesene Kategorie aufweisen oder Split-"
+"Buchungen mit nicht zugewiesenen Beträgen mit einem Ausrufezeichen auf einem "
+"gelben Dreieck im Kontobuch markiert sind?\n"
+
+#: _tips.cpp:35
+msgid ""
+"<p>...that you can show all details of the transactions in the register\n"
+"by typing &lt;Ctrl-T&gt; or selecting the 'Settings/Show Transaction "
+"Detail'\n"
+"menu entry? You can turn this feature off the same way.\n"
+msgstr ""
+"<p>...dass Sie alle Informationen der Buchungen im Kontobuch anzeigen "
+"können, indem Sie &lt;Ctrl-T&gt; drücken oder im Menu <i>Einstellungen/"
+"Buchungsdetails zeigen</i> anwählen? Die gleiche Methode schaltet die Option "
+"auch wieder aus.\n"
+
+#: _tips.cpp:42
+msgid ""
+"<p>...that you can switch between a listing of all accounts or\n"
+"an icon view of all asset and liability accounts with the tabs\n"
+"in the accounts view?\n"
+msgstr ""
+"<p>...dass Sie zwischen der Liste aller Konten und einer Bildliste aller "
+"Guthaben und Verbindlichkeitskonten mit den Reitern auf der Kontenseite "
+"umschalten können?\n"
+
+#: _tips.cpp:49
+msgid "<p>...that the KMyMoney development team wishes you a nice day?\n"
+msgstr "<p>... dass Ihnen die KMyMoney Entwickler einen schönen Tag wünschen?\n"
+
+#: _tips.cpp:54
+msgid ""
+"<p>...you can use your own external filter program to convert any\n"
+"import format to QIF on the fly? See the QIF profile editor for\n"
+"more details.\n"
+msgstr ""
+"<p>...dass Sie Ihr eigenes Filterprogramm verwenden können um "
+"unterschiedliche Datenformate während dem Importieren in das QIF Format zu "
+"wandeln? Benutzen Sie den QIF Profil Editor um die entsprechenden "
+"Einstellungen vorzunehmen.\n"
+
+#: _tips.cpp:61
+msgid ""
+"<p>...that you can create a scheduled transaction from an existing\n"
+"one by selecting the context menu on a transaction in the ledger\n"
+"or the \"More...\"-menu in the transaction form?\n"
+msgstr ""
+"<p>...dass Sie eine wiederkehrende Buchung von einer bereits erstellten "
+"Buchung erzeugen können indem Sie das Kontextmenu einer Buchung mit der "
+"rechten Maustaste öffnen oder den <i>Aktion</i> Knopf im Buchungsformular "
+"drücken?\n"
+
+#: _tips.cpp:68
+msgid ""
+"<p>...that you can switch to the payee of a transaction\n"
+"by selecting the context menu on a transaction in the ledger\n"
+"or in the transaction menu?\n"
+msgstr ""
+"<p>...dass Sie auf einfache Weise zu den Stammdaten des Zahlungsempfängers "
+"einer Buchung gelangen können indem Sie das Kontextmenü mit der rechten "
+"Maustaste öffnen und die <i>Gehe zu ...</i> Funktion anwählen?\n"
+
+#: _tips.cpp:75
+msgid ""
+"<p>...that you can modify the colors and fonts used for the ledgers\n"
+"via <i>Configure/Register/...</i>?\n"
+msgstr ""
+"<p>...dass Sie die Farben und Zeichendarstellung für die Kontobuchanzeige "
+"über <i>KMyMoney einstellen/Kontobuch/...</i> verändern können?\n"
+
+#: _tips.cpp:81
+msgid ""
+"<p>...that you can hide transactions prior to a specific date?\n"
+"The date can be modified via <i>Configure/Register/Filter</i>.\n"
+msgstr ""
+"<p>...dass Sie Buchungen, die vor einem bestimmten Datum erfolgten, "
+"ausblenden können, indem Sie das Datum in das Feld im Dialog <i>KMyMoney "
+"einstellen/Kontobuch/Filter</i> eintragen?\n"
+
+#: _tips.cpp:87
+msgid ""
+"<p>...that you can customize the \"Home-Page\"\n"
+"via <i>Configure/Home</i>?\n"
+msgstr ""
+"<p>...dass Sie die \"Home\"-Seite mit dem Dialog <i>KMyMoney einstellen/"
+"Home</i> Ihren persönlichen Wünschen gemäß einstellen können?\n"
+
+#: _tips.cpp:93
+msgid ""
+"<p>...that you can enter new transactions even while reconciling\n"
+"an account? You can also make the transaction form visible.\n"
+msgstr ""
+"<p>...dass Sie neue Buchungen auch während des Kontenabgleichs eingeben "
+"können? Sie können dazu auch das Buchungsformular einblenden.\n"
+
+#: _tips.cpp:99
+msgid ""
+"<p>...that you can actively support the KMyMoney development team in\n"
+"cases that heavily depend on your data? You can save your data in an\n"
+"anonymized way for this support.<p>\n"
+"Just open your data file and immediately\n"
+"select <b>File/Save as...</b>. In the <b>Save As...</b> dialog\n"
+"select the filter <b>Anonymous Files</b> and make sure your file gets\n"
+"the extensions <b>.anon.xml</b>. <p>\n"
+"To verify, how the data looks like you are about to send away, you can open\n"
+"this file in KMyMoney and see how the developers see your data.\n"
+msgstr ""
+"<p>... dass Sie in den Fällen, die stark von Ihren Daten abhängen,\n"
+" das KMyMoney Entwickler Team aktiv unterstützen können?\n"
+" Sie können Ihre Daten anonymisiert speichern.<p>\n"
+"Öffnen Sie dazu lediglich Ihre Datei und wählen Sie direkt\n"
+"<b>Datei/Speichern unter ...</b>. In dem <b>Speichern unter...</b> Dialog\n"
+"wählen Sie den Filter <b>Anonyme Datei</b> und stellen sicher, dass die "
+"Datei\n"
+"die Erweiterung <b>.anon.xml</b> bekommt.<p>\n"
+"Um zu überprüfen wie die Daten die Sie versenden aussehen,\n"
+"öffnen Sie die neue Datei in KMyMoney. Nun sehen Sie die Daten, wie sie die "
+"Entwickler sehen.\n"
+
+#: _tips.cpp:112
+msgid ""
+"<p>... that you can import your bank statements even without a network \n"
+"connection? Just select the file (OFX or QIF) from the File->Import menu.</"
+"p>\n"
+"<p>Provided by Jose Jorge</p>\n"
+msgstr ""
+"<p>... dass Sie Ihre Kontoauszüge sogar ohne direkte Internetverbindung "
+"importieren können? Wählen Sie einfach die Datei (QFX, QIF, CSV) aus dem "
+"Menü Datei->Importieren.</p>\n"
+"<p>von Jose Jorge</p>\n"
+
+#: reports/listtable.cpp:159 reports/listtable.cpp:163
+#: reports/pivottable.cpp:1564
+msgid ""
+"_: Report date range\n"
+"%1 through %2"
+msgstr "%1 bis %2"
+
+#: reports/listtable.cpp:171 reports/pivottable.cpp:1571
+#, c-format
+msgid "All currencies converted to %1"
+msgstr "Alle Währungen nach %1 konvertiert"
+
+#: reports/listtable.cpp:172 reports/pivottable.cpp:1328
+msgid "All currencies converted to %1\n"
+msgstr "Alle Währungen nach %1 konvertiert.\n"
+
+#: reports/listtable.cpp:176 reports/pivottable.cpp:1573
+msgid "All values shown in %1 unless otherwise noted"
+msgstr "Sofern nicht anderweitig vermerkt sind alle Werte in %1 dargestellt"
+
+#: reports/listtable.cpp:177 reports/pivottable.cpp:1330
+msgid "All values shown in %1 unless otherwise noted\n"
+msgstr "Sofern nicht anderweitig vermerkt sind alle Werte in %1 dargestellt.\n"
+
+#: dialogs/kequitypriceupdatedlg.cpp:73 dialogs/kfindtransactiondlg.cpp:188
+#: dialogs/rc.cpp:53 dialogs/rc.cpp:63 dialogs/rc.cpp:208 dialogs/rc.cpp:805
+#: dialogs/settings/rc.cpp:111 dialogs/transactioneditor.cpp:844
+#: reports/listtable.cpp:196 views/khomeview.cpp:412 views/khomeview.cpp:485
+#: views/khomeview.cpp:519 views/rc.cpp:61 widgets/kmymoneypriceview.cpp:128
+#: widgets/rc.cpp:36 widgets/register.cpp:565 widgets/transaction.cpp:1027
+#: widgets/transaction.cpp:1484
+msgid "Date"
+msgstr "Datum"
+
+#: reports/listtable.cpp:198
+msgid "Num"
+msgstr "Nummer"
+
+#: dialogs/kfindtransactiondlg.cpp:204 dialogs/kmymoneysplittable.cpp:78
+#: dialogs/kmymoneysplittable.cpp:831 dialogs/rc.cpp:217
+#: dialogs/transactioneditor.cpp:831 dialogs/transactioneditor.cpp:1374
+#: dialogs/transactioneditor.cpp:1382 dialogs/transactioneditor.cpp:1396
+#: dialogs/transactioneditor.cpp:1449 dialogs/transactioneditor.cpp:1456
+#: dialogs/transactioneditor.cpp:1504 reports/listtable.cpp:200
+#: views/kcategoriesview.cpp:76 views/rc.cpp:62 widgets/rc.cpp:115
+#: widgets/register.cpp:62 widgets/transaction.cpp:848
+#: widgets/transaction.cpp:906
+msgid "Category"
+msgstr "Kategorie"
+
+#: dialogs/kmymoneysplittable.cpp:79 dialogs/kmymoneysplittable.cpp:837
+#: reports/listtable.cpp:202 widgets/rc.cpp:101 widgets/transaction.cpp:1042
+#: widgets/transaction.cpp:1628
+msgid "Memo"
+msgstr "Notiz"
+
+#: reports/listtable.cpp:203
+msgid "Top Category"
+msgstr "Hauptkategorie"
+
+#: reports/listtable.cpp:204
+msgid "Category Type"
+msgstr "Kategorietyp"
+
+#: dialogs/rc.cpp:229 dialogs/settings/rc.cpp:152 reports/listtable.cpp:207
+#: widgets/kmymoneycombo.cpp:346 widgets/rc.cpp:107
+msgid "Reconciled"
+msgstr "Abgeglichen"
+
+#: reports/listtable.cpp:208 widgets/rc.cpp:117
+msgid "Action"
+msgstr "Aktion"
+
+#: dialogs/investactivities.cpp:199 dialogs/investactivities.cpp:287
+#: dialogs/investactivities.cpp:424 dialogs/investactivities.cpp:504
+#: dialogs/investactivities.cpp:544 dialogs/investtransactioneditor.cpp:241
+#: reports/listtable.cpp:209 widgets/rc.cpp:103 widgets/transaction.cpp:1513
+msgid "Shares"
+msgstr "Wertpapiere"
+
+#: dialogs/investtransactioneditor.cpp:248
+#: dialogs/investtransactioneditor.cpp:1067
+#: dialogs/investtransactioneditor.cpp:1068
+#: dialogs/investtransactioneditor.cpp:1072
+#: dialogs/kequitypriceupdatedlg.cpp:72 dialogs/rc.cpp:109 dialogs/rc.cpp:164
+#: dialogs/rc.cpp:251 dialogs/rc.cpp:756 dialogs/rc.cpp:827
+#: dialogs/settings/rc.cpp:117 reports/listtable.cpp:210
+#: reports/listtable.cpp:211 reports/pivottable.cpp:2441
+#: views/kinvestmentview.cpp:80 widgets/kmymoneypriceview.cpp:129
+#: widgets/rc.cpp:43 widgets/rc.cpp:105 widgets/register.cpp:573
+msgid "Price"
+msgstr "Preis"
+
+#: reports/listtable.cpp:212
+msgid "Net Value"
+msgstr "Nettowert"
+
+#: reports/listtable.cpp:213
+msgid "Buys"
+msgstr "Käufe"
+
+#: reports/listtable.cpp:214
+msgid "Sells"
+msgstr "Verkäufe"
+
+#: reports/listtable.cpp:215
+msgid "Dividends Reinvested"
+msgstr "Dividenden wiederangelegt"
+
+#: reports/listtable.cpp:216
+msgid "Dividends Paid Out"
+msgstr "Dividenden ausgezahlt"
+
+#: reports/listtable.cpp:217
+msgid "Starting Balance"
+msgstr "Anfangssaldo"
+
+#: reports/listtable.cpp:218
+msgid "Ending Balance"
+msgstr "Abschlusssaldo"
+
+#: reports/listtable.cpp:219
+msgid "Annualized Return"
+msgstr "Jahresrendite"
+
+#: reports/listtable.cpp:220
+msgid "Return On Investment"
+msgstr "Kapitalverzinsung"
+
+#: dialogs/rc.cpp:106 dialogs/rc.cpp:161 dialogs/rc.cpp:248 dialogs/rc.cpp:505
+#: dialogs/rc.cpp:570 dialogs/rc.cpp:667 dialogs/rc.cpp:753
+#: reports/listtable.cpp:223 widgets/register.cpp:570
+msgid "Payment"
+msgstr "Zahlung"
+
+#: dialogs/rc.cpp:111 dialogs/rc.cpp:166 dialogs/rc.cpp:253 dialogs/rc.cpp:709
+#: dialogs/rc.cpp:758 reports/listtable.cpp:224 widgets/rc.cpp:119
+#: widgets/register.cpp:575
+msgid "Balance"
+msgstr "Saldo"
+
+#: reports/listtable.cpp:227 views/kscheduledview.cpp:74
+msgid "Next Due Date"
+msgstr "Nächste Fälligkeit"
+
+#: reports/listtable.cpp:229 views/kscheduledview.cpp:76
+msgid "Payment Method"
+msgstr "Zahlungsmethode"
+
+#: dialogs/rc.cpp:803 reports/listtable.cpp:231 widgets/rc.cpp:2
+msgid "Description"
+msgstr "Beschreibung"
+
+#: reports/listtable.cpp:232
+msgid "Opening Date"
+msgstr "Eröffnungsdatum"
+
+#: reports/listtable.cpp:234
+msgid "Balance Early Warning"
+msgstr "Saldo Frühwarnung"
+
+#: reports/listtable.cpp:235
+msgid "Balance Max Limit"
+msgstr "Maximales Saldo Limit"
+
+#: reports/listtable.cpp:236
+msgid "Credit Early Warning"
+msgstr "Kredit Frühwarnung"
+
+#: reports/listtable.cpp:237
+msgid "Credit Max Limit"
+msgstr "Maximales Kreditlimit"
+
+#: dialogs/rc.cpp:376 reports/listtable.cpp:238
+msgid "Tax"
+msgstr "Steuer"
+
+#: reports/listtable.cpp:239
+msgid "Preferred"
+msgstr "Bevorzugt"
+
+#: reports/listtable.cpp:240
+msgid "Loan Amount"
+msgstr "Darlehensbetrag"
+
+#: dialogs/rc.cpp:511 reports/listtable.cpp:241
+msgid "Interest Rate"
+msgstr "Zinssatz"
+
+#: reports/listtable.cpp:242
+msgid "Next Interest Change"
+msgstr "Nächste Zinssatzänderung"
+
+#: reports/listtable.cpp:243
+msgid "Periodic Payment"
+msgstr "Periodische Zahlung"
+
+#: reports/listtable.cpp:244
+msgid "Final Payment"
+msgstr "Letzte Zahlung"
+
+#: reports/listtable.cpp:245 views/khomeview.cpp:766 views/khomeview.cpp:1265
+#: views/khomeview.cpp:1273
+msgid "Current Balance"
+msgstr "Aktueller Saldo"
+
+#: dialogs/investactivities.cpp:201 dialogs/investactivities.cpp:289
+#: dialogs/investactivities.cpp:368 dialogs/investactivities.cpp:426
+#: dialogs/rc.cpp:327 reports/listtable.cpp:360 reports/listtable.cpp:364
+#: reports/listtable.cpp:556 reports/listtable.cpp:558
+#: reports/pivottable.cpp:1343 reports/pivottable.cpp:1445
+#: reports/pivottable.cpp:1505 reports/pivottable.cpp:1598
+#: reports/pivottable.cpp:1768 reports/pivottable.cpp:1845
+#: reports/pivottable.cpp:2165 reports/pivottable.cpp:2167
+#: reports/pivottable.cpp:2187 reports/pivottable.cpp:2189
+#: reports/querytabletest.cpp:134 reports/querytabletest.cpp:135
+#: reports/querytabletest.cpp:136 reports/querytabletest.cpp:137
+#: reports/querytabletest.cpp:162 reports/querytabletest.cpp:163
+#: reports/querytabletest.cpp:164 reports/querytabletest.cpp:197
+#: reports/querytabletest.cpp:198 reports/querytabletest.cpp:224
+#: reports/querytabletest.cpp:250 reports/querytabletest.cpp:251
+#: reports/querytabletest.cpp:252 reports/querytabletest.cpp:275
+#: reports/querytabletest.cpp:276 reports/querytabletest.cpp:277
+#: reports/querytabletest.cpp:366 reports/querytabletest.cpp:422
+#: reports/querytabletest.cpp:423 views/kforecastview.cpp:568 views/rc.cpp:18
+#: widgets/kmymoneyaccounttreeforecast.cpp:139 widgets/transaction.cpp:1643
+msgid "Total"
+msgstr "Summe"
+
+#: reports/listtable.cpp:444
+msgid "Initial Market Value"
+msgstr "Anfangskaufwert"
+
+#: reports/listtable.cpp:445
+msgid "Ending Market Value"
+msgstr "Endkaufwert"
+
+#: reports/listtable.cpp:448 reports/querytabletest.cpp:651
+msgid "Opening Balance"
+msgstr "Eröffnungssaldo"
+
+#: reports/listtable.cpp:449 reports/querytabletest.cpp:652
+#: reports/querytabletest.cpp:653
+msgid "Closing Balance"
+msgstr "Abschlußsaldo"
+
+#: reports/listtable.cpp:490 reports/listtable.cpp:491
+msgid "Calculated"
+msgstr "Berechnet"
+
+#: reports/listtable.cpp:572 reports/listtable.cpp:574
+#: reports/pivottable.cpp:1530 reports/pivottable.cpp:1886
+#: reports/querytabletest.cpp:138 reports/querytabletest.cpp:165
+#: reports/querytabletest.cpp:199 reports/querytabletest.cpp:225
+#: reports/querytabletest.cpp:253 reports/querytabletest.cpp:278
+#: reports/querytabletest.cpp:367 reports/querytabletest.cpp:402
+#: reports/querytabletest.cpp:424 reports/querytabletest.cpp:548
+#: reports/querytabletest.cpp:551 reports/querytabletest.cpp:586
+msgid "Grand Total"
+msgstr "Gesamtsumme"
+
+#: dialogs/rc.cpp:233 reports/pivottable.cpp:339 views/kscheduledview.cpp:174
+#: views/kscheduledview.cpp:433 views/kscheduledview.cpp:449
+#: widgets/kmymoneyscheduledcalendar.cpp:48
+msgid "Transfers"
+msgstr "Umbuchungen"
+
+#: reports/pivottable.cpp:1951
+msgid "Legend"
+msgstr "Legende"
+
+#: reports/pivottable.cpp:2411 views/khomeview.cpp:1406
+#: views/khomeview.cpp:1443
+msgid "Actual"
+msgstr "Ist"
+
+#: reports/pivottable.cpp:2421 views/khomeview.cpp:1409
+#: views/khomeview.cpp:1446
+msgid "Difference"
+msgstr "Differenz"
+
+#: reports/pivottable.cpp:2431
+msgid "Moving Average"
+msgstr "Gleitender Mittelwert"
+
+#: reports/pivottable.cpp:2436
+msgid "Moving Average Price"
+msgstr "Preis (gleitender Mittelwert)"
+
+#: reports/objectinfotable.cpp:214 reports/querytable.cpp:693
+#: reports/querytable.cpp:736 reports/querytable.cpp:1356
+#: reports/querytable.cpp:1375 views/kpayeesview.cpp:742
+#, c-format
+msgid "Transfer from %1"
+msgstr "Umbuchung von %1"
+
+#: reports/objectinfotable.cpp:215 reports/querytable.cpp:694
+#: reports/querytable.cpp:735 reports/querytable.cpp:1355
+#: reports/querytable.cpp:1374 views/kpayeesview.cpp:740
+#, c-format
+msgid "Transfer to %1"
+msgstr "Umbuchung auf %1"
+
+#: reports/querytabletest.cpp:471 views/kreportsview.cpp:1144
+msgid "Investment Transactions"
+msgstr "Depot-Buchungen"
+
+#: reports/querytabletest.cpp:472 reports/querytabletest.cpp:564
+msgid "Test Report"
+msgstr "Test-Bericht"
+
+#: reports/querytabletest.cpp:547 reports/querytabletest.cpp:550
+msgid "Total Stock 1"
+msgstr "Gesamter Bestand 1"
+
+#: reports/querytabletest.cpp:563 views/kreportsview.cpp:1174
+msgid "Investment Performance by Account"
+msgstr "Investitions Performance pro Konto"
+
+#: reports/querytable.cpp:431 reports/querytable.cpp:1200
+#, c-format
+msgid "Month of %1"
+msgstr "Monat von %1"
+
+#: reports/querytable.cpp:432 reports/querytable.cpp:1201
+#, c-format
+msgid "Week of %1"
+msgstr "Woche von %1"
+
+#: reports/querytable.cpp:576 reports/querytable.cpp:739
+#: reports/querytable.cpp:858 reports/querytable.cpp:1325
+#: reports/querytable.cpp:1481
+msgid "No Institution"
+msgstr "Kein Geldinstitut"
+
+#: reports/querytable.cpp:580 reports/querytable.cpp:1329
+msgid "[Empty Payee]"
+msgstr "[Leerer Zahler]"
+
+#: reports/querytable.cpp:615 reports/querytable.cpp:1361
+msgid "[Split Transaction]"
+msgstr "[Split-Buchung]"
+
+#: reports/querytable.cpp:616 reports/querytable.cpp:617
+msgid "Split"
+msgstr "Splitten"
+
+#: main.cpp:51
+msgid ""
+"\n"
+"KMyMoney, the Personal Finance Manager for KDE.\n"
+"\n"
+"Please consider contributing to this project with code and/or suggestions."
+msgstr ""
+"\n"
+"KMyMoney, der persönliche Finanzmanager für KDE.\n"
+"\n"
+"Unterstützung in Form von Quellcode und/oder Vorschlägen ist sehr willkommen."
+
+#: main.cpp:55
+msgid "language to be used"
+msgstr "Zu verwendende Sprache"
+
+#: main.cpp:56
+msgid "don't open last used file"
+msgstr "zuletzt benutzte Datei nicht öffnen"
+
+#: main.cpp:57
+msgid "enable performance timers"
+msgstr "Performance-Timer erlauben"
+
+#: main.cpp:61
+msgid "turn on program traces"
+msgstr "Schalte Programm-Traces ein"
+
+#: main.cpp:62
+msgid "dump the names of all defined KAction objects to stdout and quit"
+msgstr "die Namen aller definierten KAction-Objeke auf stdout ausgeben und beenden"
+
+#: main.cpp:66
+msgid "file to open"
+msgstr "Zu öffnende Datei"
+
+#: main.cpp:92
+msgid "Memory leakage detection"
+msgstr "Speicherverschwendung finden"
+
+#: main.cpp:96
+msgid "Compiled with the following settings:\n"
+msgstr "Kompiliert mit folgenden Einstellungen:\n"
+
+#: dialogs/kmymoneysplittable.cpp:650 dialogs/ksplittransactiondlg.cpp:277
+#: main.cpp:98
+msgid "KMyMoney"
+msgstr "KMyMoney"
+
+#: main.cpp:104
+msgid "Initial idea, much initial source code, Project admin"
+msgstr "Initiale Idee, viel initialer Quellcode, Projekt-Administrator"
+
+#: main.cpp:105
+msgid "Core engine, Release Manager, Project admin"
+msgstr "Core Engine, Release-Manager, Projekt-Administrator"
+
+#: main.cpp:106
+msgid "Reporting logic, OFX Import"
+msgstr "Bericht-Logik, OFX-Import"
+
+#: main.cpp:107
+msgid "Database backend, maintainer stable branch"
+msgstr "Datenbank Backend, stabiler Entwicklungszweig"
+
+#: main.cpp:108
+msgid "Forecast, Reports"
+msgstr "Vorhersage, Berichte"
+
+#: main.cpp:109
+msgid "Project Admin"
+msgstr "Projekt-Administrator"
+
+#: main.cpp:110
+msgid "Developer"
+msgstr "Entwickler"
+
+#: main.cpp:111
+msgid "Database backend"
+msgstr "Datenbank Backend"
+
+#: main.cpp:113
+msgid "Initial investment support"
+msgstr "Initiale Investment-Unterstützung"
+
+#: main.cpp:114
+msgid "Developer & Artist"
+msgstr "Entwickler & Künstler"
+
+#: main.cpp:115
+msgid "Icons & splash screen"
+msgstr "Ikonen & Splash Screen"
+
+#: main.cpp:116 main.cpp:117
+msgid "Patches"
+msgstr "Patches"
+
+#: main.cpp:136
+msgid ""
+"The monetary decimal symbol is not correctly set in the KDE Control Center's "
+"Country/Region & Language settings. Please set it to a reasonable value and "
+"start KMyMoney again."
+msgstr ""
+"Im KDE-Kontrollzentrum im Kapitel Land/Region wurde für die Währung entweder "
+"das Dezimalzeichen oder das Tausendertrennzeichen nicht richtig gesetzt. "
+"Bitte korrigieren Sie dies und starten Sie KMyMoney erneut."
+
+#: main.cpp:136
+msgid "Invalid settings"
+msgstr "Ungültige Einstellungen"
+
+#: main.cpp:228
+msgid "Another instance of KMyMoney is already running. Do you want to quit?"
+msgstr "Eine andere Instanz von KMyMoney läuft bereits. Möchten Sie hier abbrechen?"
+
+#: main.cpp:289
+msgid "Uncaught error. Please report the details to the developers"
+msgstr "Unbehandelter Fehler: Bitte melden Sie die Details an die Entwickler"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Jochen Rundholz, Thomas Baumgart"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "jochen_r@gmx.de, ipwizard@users.sourceforge.net"
+
+#: dialogs/kcsvprogressdlg.cpp:62 dialogs/kimportdlg.cpp:66 rc.cpp:1
+msgid "&Import"
+msgstr "&Importieren"
+
+#: rc.cpp:2
+msgid "E&xport"
+msgstr "E&xportieren"
+
+#: rc.cpp:3
+msgid "&Institution"
+msgstr "&Geldinstitut"
+
+#: rc.cpp:4
+msgid "&Account"
+msgstr "&Konto"
+
+#: rc.cpp:5
+msgid "&Category"
+msgstr "K&ategorie"
+
+#: rc.cpp:6
+msgid "&Transaction"
+msgstr "&Buchung"
+
+#: rc.cpp:7 rc.cpp:20
+msgid "Mark transaction as..."
+msgstr "Markiere Buchung als..."
+
+#: rc.cpp:8 rc.cpp:21
+msgid "Mark transaction"
+msgstr "Markiere Buchung"
+
+#: rc.cpp:9
+msgid "T&ools"
+msgstr "&Werkzeuge"
+
+#: rc.cpp:10
+msgid "Account options"
+msgstr "Konto-Einstellungen"
+
+#: rc.cpp:11
+msgid "Category options"
+msgstr "Kategorie-Optionen"
+
+#: rc.cpp:12
+msgid "Institution options"
+msgstr "Geldinstitut-Optionen"
+
+#: rc.cpp:13
+msgid "Payee options"
+msgstr "Zahlungsempfänger-Optionen"
+
+#: rc.cpp:14
+msgid "Budget options"
+msgstr "Budget-Optionen"
+
+#: rc.cpp:15
+msgid "Investment options"
+msgstr "Investment-Optionen"
+
+#: rc.cpp:16
+msgid "Scheduled transactions options"
+msgstr "Optionen für geplante Buchungen"
+
+#: rc.cpp:17
+msgid "Transaction options"
+msgstr "Buchungsoptionen"
+
+#: rc.cpp:18
+msgid "Move transaction to..."
+msgstr "Buchungen verschieben nach..."
+
+#: rc.cpp:19
+msgid "Select account"
+msgstr "Wähle Konto"
+
+#: rc.cpp:22
+msgid "Currency options"
+msgstr "Währungsoptionen"
+
+#: rc.cpp:24
+msgid "Always show a No. field in transaction form"
+msgstr "Im Buchungsformular immer ein Nr. Feld anzeigen"
+
+#: rc.cpp:25
+msgid "Auto fill with previous transaction data"
+msgstr "Automatisches Ausfüllen mit den Daten der letzten Buchung"
+
+#: rc.cpp:26
+msgid "Treat two transactions as identical, if amount differs less than"
+msgstr ""
+"Zwei Buchungen als identisch behandeln, wenn der Betrag differiert um "
+"weniger als"
+
+#: dialogs/settings/rc.cpp:144 rc.cpp:27
+msgid "Auto increment check number"
+msgstr "Automatischer Inkrement von Schecknummern"
+
+#: rc.cpp:28
+msgid "Autosave file periodically"
+msgstr "Automatisches periodisches Speichern"
+
+#: rc.cpp:29
+msgid "Autosave interval in minutes"
+msgstr "Autosave-Intervall in Minuten"
+
+#: rc.cpp:30
+msgid "Check schedules upon startup"
+msgstr "Geplante Buchungen beim Starten überprüfen"
+
+#: dialogs/settings/rc.cpp:171 rc.cpp:31
+msgid "Enter transactions this number of days in advance"
+msgstr "Anzahl Tage, die Zahlungen im voraus eingetragen werden"
+
+#: dialogs/settings/rc.cpp:172 rc.cpp:32
+msgid "Number of days to preview schedules in ledger"
+msgstr "Anzahl Tage für die Buchungsvorschau im Kontobuch"
+
+#: dialogs/settings/rc.cpp:143 rc.cpp:33
+msgid "Insert transaction type into No. field for new transactions"
+msgstr "Nr. Feld für neue Buchungen mit Buchungstyp vorbelegen"
+
+#: dialogs/settings/rc.cpp:145 rc.cpp:34
+msgid "Keep changes when selecting a different transaction/split"
+msgstr "Änderungen beibehalten, wenn eine andere Buchung ausgewählt wird"
+
+#: rc.cpp:35
+msgid "Using the Enter key moves between the fields"
+msgstr "Verwendung der ENTER-Taste bewegt Cursor zwischen den Feldern"
+
+#: dialogs/settings/rc.cpp:130 rc.cpp:36
+msgid "Use the ledger lens"
+msgstr "Buchungsdetails der ausgewählten Buchung anzeigen"
+
+#: rc.cpp:37
+msgid "Price Precision"
+msgstr "Preisgenauigkeit"
+
+#: dialogs/rc.cpp:65 rc.cpp:38
+msgid "Update price history"
+msgstr "Aktualisiere Kursverlauf"
+
+#: dialogs/settings/rc.cpp:132 rc.cpp:39
+msgid "Show transaction form"
+msgstr "Buchungsformular anzeigen"
+
+#: rc.cpp:40
+msgid "Start with last selected view or homepage"
+msgstr "Nach dem Starten zuletzt gewählte Seite anzeigen"
+
+#: rc.cpp:41
+msgid "Use GPG to encrypt data file"
+msgstr "Benutze GPG-Verschlüsselung für Daten"
+
+#: rc.cpp:42
+msgid "Also encrypt against recover key"
+msgstr "Auch mit KMyMoney-Wiederherstellungsschlüssel verschlüsseln"
+
+#: rc.cpp:43
+msgid "GPG User ID (deprecated)"
+msgstr "GPG-Benutzer-ID (veraltet)"
+
+#: rc.cpp:44
+msgid "GPG User ID"
+msgstr "GPG-Benutzer-ID"
+
+#: rc.cpp:45
+msgid "Run in expert (accountant) mode"
+msgstr "Im Experten-Modus starten"
+
+#: rc.cpp:46
+msgid "Show splash screen during startup"
+msgstr "Splash-Screen während des Starts anzeigen"
+
+#: rc.cpp:47
+msgid "Synchronize account in ledger and investment view"
+msgstr "Synchronisiere Konto in Kontobuch- und Investment-Ansicht"
+
+#: rc.cpp:48
+msgid "Icon size for view selection"
+msgstr "Ikon-Größe für Ansichts-Selektion"
+
+#: rc.cpp:49
+msgid "list of hidden views"
+msgstr "Liste der verborgenen Ansichten"
+
+#: rc.cpp:50
+msgid "Firsttime switch to start new user wizard"
+msgstr "Neuen Assistenten starten"
+
+#: rc.cpp:51
+msgid "Show title bar on each view"
+msgstr "Zeige den Kopfbalken in der Ansicht"
+
+#: rc.cpp:52
+msgid "Start string matches for e.g. payees at start of string"
+msgstr "Zeichenvergleich beginnt immer am Anfang."
+
+#: rc.cpp:53
+msgid "Order of items on homepage"
+msgstr "Reihenfolge der Einträge auf der Homepage"
+
+#: rc.cpp:54
+msgid "Percentage of default font size used for home view HTML page"
+msgstr ""
+"Prozentualer Wert der Standard-Zeichensatzgröße die für die Homepage-HTML-"
+"Seite genutzt wird"
+
+#: rc.cpp:55
+msgid "Remember (manually adjusted) font size in home view on program end."
+msgstr ""
+"Speichern der (manuell angepassten) Zeichensatzgröße der Homepage bei "
+"Programmende."
+
+#: rc.cpp:56
+msgid "Show account limit information on the Homepage"
+msgstr "Zeige Saldengrenzwerte auf der Finanzübersicht an"
+
+#: rc.cpp:58
+msgid "Hide closed accounts"
+msgstr "Geschlossene Konten ausblenden"
+
+#: rc.cpp:59
+msgid "Hide finished schedules"
+msgstr "Ausgeführte geplante Zahlungen ausblenden"
+
+#: rc.cpp:61
+msgid "Show all register entries in full detail"
+msgstr "Alle Kontobucheinträge mit vollen Details anzeigen"
+
+#: dialogs/settings/rc.cpp:129 rc.cpp:62
+msgid "Show a grid in the register"
+msgstr "Gitterlinien im Kontobuch anzeigen"
+
+#: rc.cpp:63
+msgid "Show fancy group markers"
+msgstr "Hübsche Gruppen-Marker anzeigen"
+
+#: rc.cpp:64
+msgid "Show fancy markers for previous and current fiscal year"
+msgstr "Hübsche Marker für das letzte und aktuelle Geschäftsjahr zeigen"
+
+#: rc.cpp:65
+msgid "Starting month of the fiscal year"
+msgstr "Startmonat des Geschäftsjahres"
+
+#: rc.cpp:66
+msgid "Starting day of the fiscal year"
+msgstr "Start-Tag des Geschäftsjahres"
+
+#: rc.cpp:67
+msgid "Start date"
+msgstr "Startdatum"
+
+#: dialogs/settings/rc.cpp:9 rc.cpp:68
+msgid "Use system colors"
+msgstr "Verwende Systemfarben"
+
+#: rc.cpp:69
+msgid "List color"
+msgstr "Listenfarbe"
+
+#: rc.cpp:70
+msgid "List background color"
+msgstr "Listen-Hintergrundfarbe"
+
+#: rc.cpp:71
+msgid "List grid color"
+msgstr "Gitterlinienfarbe"
+
+#: rc.cpp:72
+msgid "Background color for imported transactions"
+msgstr "Hintergrundfarbe für importierte Buchungen"
+
+#: rc.cpp:73
+msgid "Background color for matched transactions"
+msgstr "Hintergrundfarbe für zugeordnete Buchungen"
+
+#: rc.cpp:74
+msgid "List color for erronous transactions"
+msgstr "Listenfarbe für fehlerhafte Buchungen"
+
+#: rc.cpp:75
+msgid "List color for missing conversion rate"
+msgstr "Listenfarbe für Werte ohne Wechselkursangabe"
+
+#: rc.cpp:76
+msgid "List color for negative values"
+msgstr "LIstenfarbe für negative Werte"
+
+#: rc.cpp:77
+msgid "Background color for group marker"
+msgstr "Hintergrundfarbe für Gruppen-Marker"
+
+#: rc.cpp:78
+msgid "Background color for required fields"
+msgstr "Hintergrundfarbe für erforderliche Felder"
+
+#: rc.cpp:79
+msgid "Use system font"
+msgstr "Benutze Systemzeichensätze"
+
+#: dialogs/settings/rc.cpp:21 rc.cpp:80
+msgid "Cell font"
+msgstr "Listen-Zeichensatz"
+
+#: dialogs/settings/rc.cpp:22 rc.cpp:81
+msgid "Header font"
+msgstr "Kopfzeilen-Zeichensatz"
+
+#: rc.cpp:82 rc.cpp:83
+msgid "Sort order of register in normal view"
+msgstr "Sortierreihenfolge des Kontobuchs in normaler Darstellung"
+
+#: rc.cpp:84
+msgid "Sort order of register in search dialog"
+msgstr "Sortierreihenfolge des Kontobuchs im Such-Dialog"
+
+#: rc.cpp:85
+msgid "Default reconciliation state for transactions entered during reconciliation"
+msgstr "Standard des Abgleichstatus für während des Abgleichs eingetragene Buchungen"
+
+#: rc.cpp:86
+msgid "Number of days (plus/minus) to search for matching transactions"
+msgstr "Anzahl der Tage (plus/minus) um nach passenden Buchungen zu suchen"
+
+#: rc.cpp:87
+msgid "During import, ask for a new payee's default category"
+msgstr "Frage nach einer Defaultkategorie während des Imports neuer Empfänger"
+
+#: rc.cpp:88
+msgid "Method to calculate forecast"
+msgstr "Methode für die Berechnung der Vorhersage"
+
+#: rc.cpp:89
+msgid "Days to forecast"
+msgstr "Anzahl der Tage für Vorhersage"
+
+#: rc.cpp:90
+msgid "Days of normal account cycle"
+msgstr "Tage des normalen Konten-Zyklus'"
+
+#: rc.cpp:91
+msgid "Number of historic cycles to use in forecast"
+msgstr "Anzahl der in der Vorhersage zu nutzenden historischen Zyklen"
+
+#: rc.cpp:92
+msgid "Day of month to start forecast"
+msgstr "Start-Tag des Monats für Vorhersage"
+
+#: rc.cpp:93
+msgid "Method to calculate history-based forecast"
+msgstr "Berechnungsmethode für historienbasierte Vorhersage"
+
+#: rc.cpp:94
+msgid "Skip opening date when fetching transactions"
+msgstr "Offnungs-Datum beim Herunterladen der Buchungen überspringen"
+
+#: rc.cpp:95
+msgid "Include future transaction when using Schedule Forecast"
+msgstr "Berücksichtige zukünftige Transaktionen in der Vorausschau."
+
+#: rc.cpp:96
+msgid "Include scheduled transactions when using Schedule Forecast"
+msgstr "Berücksichtige geplante Transaktionen in der Vorausschau."
+
+#: rc.cpp:97
+msgid "additional names for cash account"
+msgstr "Zusätzliche Namen für Bargeldkonten"
+
+#: rc.cpp:98
+msgid "additional names for checking account"
+msgstr "Zusätzliche Namen für Girokonten"
+
+#: rc.cpp:99
+msgid "additional names for credit card account"
+msgstr "Zusätzliche Namen für Kreditkartenkonten"
+
+#: rc.cpp:100
+msgid "additional names for asset account"
+msgstr "Zusätzliche Namen für Anlagenkonten"
+
+#: rc.cpp:101
+msgid "additional names for opening balance payee"
+msgstr "Zusätzliche Namen für Eröffnungssaldo"
+
+#: rc.cpp:102
+msgid "additional names for invoice accounts"
+msgstr "Zusätzliche Namen für Rechnungskonten"
+
+#: rc.cpp:103 widgets/rc.cpp:161 widgets/rc.cpp:163
+msgid "..."
+msgstr "..."
+
+#: views/kcategoriesview.cpp:276
+msgid "Profit: "
+msgstr "Gewinn: "
+
+#: views/kcategoriesview.cpp:278
+msgid "Loss: "
+msgstr "Verlust: "
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:54
+#: dialogs/transactioneditor.cpp:605 views/kpayeesview.cpp:365
+#: widgets/kmymoneyonlinequoteconfig.cpp:54
+msgid "Accepts the entered data and stores it"
+msgstr "Akzeptiert die eingegebenen Daten und speichert sie"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:55 views/kpayeesview.cpp:366
+#: widgets/kmymoneyonlinequoteconfig.cpp:55
+msgid "Use this to accept the modified data."
+msgstr "Drücken, um die veränderten Daten zu akzeptieren."
+
+#: views/kpayeesview.cpp:491
+msgid ""
+"A payee with the name '%1' already exists. It is not advisable to have "
+"multiple payees with the same identification name. Are you sure you would "
+"like to rename the payee?"
+msgstr ""
+"Ein Zahlungsempfänger mit dem Namen '%1' existiert bereits. Es ist nicht "
+"empfehlenswert, mehrere Zahlungsempfänger mit dem gleichen Namen zu haben. "
+"Sind Sie sicher, dass sie den Zahlungsempfänger umbenennen wollen?"
+
+#: views/kpayeesview.cpp:518 views/kpayeesview.cpp:869
+msgid "Unable to modify payee"
+msgstr "Kann Zahlungsempfänger nicht ändern"
+
+#: views/kpayeesview.cpp:564
+msgid "Do you want to save the changes for <b>%1</b>?"
+msgstr "Möchten Sie die Änderungen für <b>%1</b> wirklich speichern?"
+
+#: views/kbudgetview.cpp:490 views/kpayeesview.cpp:565
+msgid "Save changes"
+msgstr "Änderungen speichern"
+
+#: views/kgloballedgerview.cpp:737 views/kpayeesview.cpp:662
+#: views/kpayeesview.cpp:753
+#, c-format
+msgid "Balance: %1"
+msgstr "Saldo: %1"
+
+#: views/kpayeesview.cpp:725 views/kpayeesview.cpp:731
+#, c-format
+msgid "Amortization of %1"
+msgstr "Tilgung von %1"
+
+#: views/kpayeesview.cpp:727 views/kpayeesview.cpp:733
+#, c-format
+msgid "Payment to %1"
+msgstr "Zahlung an %1"
+
+#: views/kpayeesview.cpp:736
+#, c-format
+msgid "Loan payment from %1"
+msgstr "Kreditzahlung von %1"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:123
+#: dialogs/kconfirmmanualenterdlg.cpp:133 views/kpayeesview.cpp:745
+#: widgets/kmymoneycategory.cpp:160 widgets/kmymoneycategory.cpp:166
+#: widgets/transaction.cpp:851 widgets/transaction.cpp:1397
+#: widgets/transaction.cpp:1411
+msgid ""
+"_: Split transaction (category replacement)\n"
+"Split transaction"
+msgstr "Split-Buchung"
+
+#: views/kreportsview.cpp:262
+msgid ""
+"There was an error creating your report: \"%1\".\n"
+"Please report this error to the developer's list: kmymoney2-developer@lists."
+"sourceforge.net"
+msgstr ""
+"Es ist ein Fehler beim Anlegen des Berichts \"%1\" aufgetreten.\n"
+"Bitte berichten Sie diesen Fehler an die Mailingliste der Entwickler: "
+"kmymoney2-developer@lists.sourceforge.net"
+
+#: views/kreportsview.cpp:264
+msgid "Critical Error"
+msgstr "Kritischer Fehler"
+
+#: views/kreportsview.cpp:268
+msgid "Unable to generate report"
+msgstr "Kann Bericht nicht erstellen"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:125 views/kreportsview.cpp:286
+#: views/rc.cpp:53 widgets/rc.cpp:146
+msgid "Chart"
+msgstr "Diagramm"
+
+#: views/kreportsview.cpp:287 widgets/rc.cpp:147
+msgid "Show the chart version of this report"
+msgstr "Zeige diesen Bericht als Diagramm"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:112 views/khomeview.cpp:900
+#: views/kreportsview.cpp:294 views/kreportsview.cpp:328
+msgid "Report"
+msgstr "Bericht"
+
+#: views/kreportsview.cpp:295
+msgid "Show the report version of this chart"
+msgstr "Zeige dieses Diagramm als Bericht"
+
+#: views/kmymoneyview.cpp:236 views/kreportsview.cpp:314
+#: views/kreportsview.cpp:326
+msgid "Reports"
+msgstr "Berichte"
+
+#: views/khomeview.cpp:902 views/kreportsview.cpp:329 widgets/rc.cpp:56
+msgid "Comment"
+msgstr "Kommentar"
+
+#: views/kreportsview.cpp:432
+msgid "Charts"
+msgstr "Diagramme"
+
+#: views/khomeview.cpp:897 views/kreportsview.cpp:470
+msgid "Favorite Reports"
+msgstr "Beliebte Berichte"
+
+#: views/kreportsview.cpp:486
+msgid "Old Customized Reports"
+msgstr "Alte kundenspezifische Berichte"
+
+#: views/kreportsview.cpp:579
+msgid "Include Stylesheet"
+msgstr "Stylesheets einfügen"
+
+#: views/kreportsview.cpp:585
+msgid ""
+"_: CSV (Filefilter)\n"
+"CSV files"
+msgstr "CSV-Dateien"
+
+#: views/kreportsview.cpp:586
+msgid ""
+"_: HTML (Filefilter)\n"
+"HTML files"
+msgstr "HTML-Dateien"
+
+#: views/kreportsview.cpp:591
+msgid "Export as"
+msgstr "Exportieren als"
+
+#: views/kreportsview.cpp:619 views/kreportsview.cpp:660
+#: views/kreportsview.cpp:942 views/kreportsview.cpp:950
+#: views/kreportsview.cpp:958 views/kreportsview.cpp:968
+#: views/kreportsview.cpp:980 views/kreportsview.cpp:998
+#: views/kreportsview.cpp:1006 views/kreportsview.cpp:1014
+#: views/kreportsview.cpp:1022 views/kreportsview.cpp:1034
+#: views/kreportsview.cpp:1046 views/kreportsview.cpp:1056
+#: views/kreportsview.cpp:1070 views/kreportsview.cpp:1079
+#: views/kreportsview.cpp:1087 views/kreportsview.cpp:1095
+#: views/kreportsview.cpp:1103 views/kreportsview.cpp:1111
+#: views/kreportsview.cpp:1120 views/kreportsview.cpp:1132
+#: views/kreportsview.cpp:1145 views/kreportsview.cpp:1155
+#: views/kreportsview.cpp:1165 views/kreportsview.cpp:1175
+#: views/kreportsview.cpp:1185 views/kreportsview.cpp:1195
+#: views/kreportsview.cpp:1208 views/kreportsview.cpp:1222
+#: views/kreportsview.cpp:1239 views/kreportsview.cpp:1257
+#: views/kreportsview.cpp:1273 views/kreportsview.cpp:1295
+#: views/kreportsview.cpp:1304 views/kreportsview.cpp:1313
+#: views/kreportsview.cpp:1322 views/kreportsview.cpp:1336
+#: views/kreportsview.cpp:1347 views/kreportsview.cpp:1362
+#: views/kreportsview.cpp:1372 views/kreportsview.cpp:1383
+#: views/kreportsview.cpp:1393 views/kreportsview.cpp:1404
+#: views/kreportsview.cpp:1423 views/kreportsview.cpp:1432
+#: views/kreportsview.cpp:1444 views/kreportsview.cpp:1463
+#: views/kreportsview.cpp:1472 views/kreportsview.cpp:1481
+#: views/kreportsview.cpp:1490
+msgid "Default Report"
+msgstr "Standardbericht"
+
+#: views/kreportsview.cpp:621 views/kreportsview.cpp:661
+msgid "Custom Report"
+msgstr "Benutzerdefinierter Bericht"
+
+#: views/kreportsview.cpp:622
+msgid " (Customized)"
+msgstr " (angepasst)"
+
+#: views/kreportsview.cpp:690
+msgid ""
+"Are you sure you want to delete report <b>%1</b>? There is no way to "
+"recover it!"
+msgstr ""
+"Sind Sie sicher, dass Sie den Bericht %1 löschen wollen? Dies kann nicht "
+"rückgängig gemacht werden!"
+
+#: views/kreportsview.cpp:690 views/kreportsview.cpp:702
+msgid "Delete Report?"
+msgstr "Lösche Bericht?"
+
+#: views/kreportsview.cpp:702
+msgid "Sorry, <b>%1</b> is a default report. You may not delete it."
+msgstr "%1 ist leider ein Standardbericht der nicht gelöscht werden kann."
+
+#: views/kreportsview.cpp:882
+msgid "&Open"
+msgstr "Ö&ffnen"
+
+#: views/kreportsview.cpp:884
+msgid "&New report"
+msgstr "&Neuer Report"
+
+#: views/kreportsview.cpp:934
+msgid "Income and Expenses"
+msgstr "Einnahmen und Ausgaben"
+
+#: views/kreportsview.cpp:941
+msgid "Income and Expenses This Month"
+msgstr "Einnahmen und Ausgaben im aktuellen Monat"
+
+#: views/kreportsview.cpp:949
+msgid "Income and Expenses This Year"
+msgstr "Einnahmen und Ausgaben im aktuellen Jahr"
+
+#: views/kreportsview.cpp:957
+msgid "Income and Expenses By Year"
+msgstr "Einnahmen und Ausgaben nach Jahren"
+
+#: views/kreportsview.cpp:967
+msgid "Income and Expenses Graph"
+msgstr "Diagramm für Einnahmen und Ausgaben"
+
+#: views/kreportsview.cpp:979
+msgid "Income and Expenses Pie Chart"
+msgstr "Tortendiagramm für Einnahmen und Ausgaben"
+
+#: views/khomeview.cpp:1361 views/kreportsview.cpp:990
+msgid "Net Worth"
+msgstr "Eigenkapital"
+
+#: views/kreportsview.cpp:997
+msgid "Net Worth By Month"
+msgstr "Eigenkapital nach Monaten"
+
+#: views/kreportsview.cpp:1005
+msgid "Net Worth Today"
+msgstr "Eigenkapital aktuell"
+
+#: views/kreportsview.cpp:1013
+msgid "Net Worth By Year"
+msgstr "Eigenkapital nach Jahren"
+
+#: views/kreportsview.cpp:1021
+msgid "7-day Cash Flow Forecast"
+msgstr "Vorhersage für 7-Tages-Geldfluss"
+
+#: views/kreportsview.cpp:1033
+msgid "Net Worth Graph"
+msgstr "Eigenkapital Verlauf"
+
+#: views/kreportsview.cpp:1045
+msgid "Account Balances by Institution"
+msgstr "Kontensalden pro Geldinstitut"
+
+#: views/kreportsview.cpp:1055
+msgid "Account Balances by Type"
+msgstr "Kontensalden pro Typ"
+
+#: views/kreportsview.cpp:1069
+msgid "Transactions by Account"
+msgstr "Buchungen nach Konto"
+
+#: views/kreportsview.cpp:1078
+msgid "Transactions by Category"
+msgstr "Buchungen nach Kategorie"
+
+#: views/kreportsview.cpp:1086
+msgid "Transactions by Payee"
+msgstr "Buchungen nach Zahlungsempfänger"
+
+#: views/kreportsview.cpp:1094
+msgid "Transactions by Month"
+msgstr "Buchungen nach Monaten"
+
+#: views/kreportsview.cpp:1102
+msgid "Transactions by Week"
+msgstr "Buchungen nach Wochen"
+
+#: views/kreportsview.cpp:1110
+msgid "Loan Transactions"
+msgstr "Buchungen auf Steuer-Kategorien"
+
+#: views/kreportsview.cpp:1119
+msgid "Transactions by Reconciliation Status"
+msgstr "Buchungen nach Abgleichstatus"
+
+#: views/kreportsview.cpp:1125
+msgid "Cash Flow"
+msgstr "Geldfluß"
+
+#: views/kreportsview.cpp:1131
+msgid "Cash Flow Transactions This Month"
+msgstr "Geldfluß-Buchungen nach Monaten"
+
+#: views/kmymoneyview.cpp:226 views/kmymoneyview.cpp:228
+#: views/kreportsview.cpp:1137
+msgid "Investments"
+msgstr "Investitionen"
+
+#: views/kreportsview.cpp:1154
+msgid "Investment Holdings by Account"
+msgstr "Investitionen nach Konten"
+
+#: views/kreportsview.cpp:1164
+msgid "Investment Holdings by Type"
+msgstr "Investitionen nach Typen"
+
+#: views/kreportsview.cpp:1184
+msgid "Investment Performance by Type"
+msgstr "Investitionsentwicklung nach Typen"
+
+#: views/kreportsview.cpp:1194
+msgid "Investment Holdings Pie"
+msgstr "Tortengrafik für Investitionen"
+
+#: views/kreportsview.cpp:1207
+msgid "Investment Worth Graph"
+msgstr "Grafik für Wert der Investitionen"
+
+#: views/kreportsview.cpp:1221
+msgid "Investment Price Graph"
+msgstr "Grafik für Preis der Investitionen"
+
+#: views/kreportsview.cpp:1238
+msgid "Investment Moving Average Price Graph"
+msgstr "Preis Investitionen Gleitendes Mittel"
+
+#: views/kreportsview.cpp:1256
+msgid "Investment Moving Average"
+msgstr "Investitionen Gleitendes Mittel"
+
+#: views/kreportsview.cpp:1272
+msgid "Investment Moving Average vs Actual"
+msgstr "Investitionien Gleitendes Mittel gegen Aktuelle Werte"
+
+#: views/kreportsview.cpp:1287
+msgid "Taxes"
+msgstr "Steuern"
+
+#: views/kreportsview.cpp:1294
+msgid "Tax Transactions by Category"
+msgstr "Steuer-Buchungen nach Kategorie"
+
+#: views/kreportsview.cpp:1303
+msgid "Tax Transactions by Payee"
+msgstr "Steuer-Buchungen nach Zahlungsempfänger"
+
+#: views/kreportsview.cpp:1312
+msgid "Tax Transactions by Category Last Fiscal Year"
+msgstr "Steuer-Buchungen nach Kategorie für letztes Geschäftsjahr"
+
+#: views/kreportsview.cpp:1321
+msgid "Tax Transactions by Payee Last Fiscal Year"
+msgstr "Steuer-Buchungen nach Zahlungsempfänger für letztes Geschäftsjahr"
+
+#: views/kreportsview.cpp:1328
+msgid "Budgeting"
+msgstr "Budgetierung"
+
+#: views/kreportsview.cpp:1335
+msgid "Budgeted vs. Actual This Year"
+msgstr "Budget und Ist bis heute"
+
+#: views/kreportsview.cpp:1346
+msgid "Budgeted vs. Actual This Year (YTM)"
+msgstr "Budget und Ist bis zum letzten Monatsende"
+
+#: views/khomeview.cpp:1383 views/kreportsview.cpp:1361
+msgid "Monthly Budgeted vs. Actual"
+msgstr "Budget und Ist lfd. Monat"
+
+#: views/kreportsview.cpp:1371
+msgid "Yearly Budgeted vs. Actual"
+msgstr "Budget und Ist lfd. Jahr"
+
+#: views/kreportsview.cpp:1382
+msgid "Monthly Budget"
+msgstr "Monatliches Budget"
+
+#: views/kreportsview.cpp:1392
+msgid "Yearly Budget"
+msgstr "Jährliches Budget"
+
+#: views/kreportsview.cpp:1403
+msgid "Yearly Budgeted vs Actual Graph"
+msgstr "Budget und Ist lfd. Jahr (Graph)"
+
+#: views/kreportsview.cpp:1422
+msgid "Forecast By Month"
+msgstr "Vorhersage nach Monaten"
+
+#: views/kreportsview.cpp:1431
+msgid "Forecast Next Quarter"
+msgstr "Vorhersage nächstes Quartal"
+
+#: views/kreportsview.cpp:1443
+msgid "Net Worth Forecast Graph"
+msgstr "Eigenkapital-Vorhersage Graph"
+
+#: dialogs/rc.cpp:126 dialogs/rc.cpp:128 dialogs/rc.cpp:466
+#: views/kreportsview.cpp:1455
+msgid "General Information"
+msgstr "Allgemeine Informationen"
+
+#: views/kreportsview.cpp:1462
+msgid "Schedule Information"
+msgstr "Informationen zu geplanten Buchungen"
+
+#: views/kreportsview.cpp:1471
+msgid "Schedule Summary Information"
+msgstr "Zusammenfassung geplanter Buchungen"
+
+#: views/kreportsview.cpp:1480
+msgid "Account Information"
+msgstr "Konto-Informationen"
+
+#: views/kreportsview.cpp:1489
+msgid "Loan Information"
+msgstr "Darlehen-Informationen"
+
+#: dialogs/rc.cpp:323 views/kmymoneyview.cpp:148 views/kmymoneyview.cpp:150
+msgid "Institutions"
+msgstr "Geldinstitute"
+
+#: dialogs/knewaccountdlg.cpp:98 views/kmymoneyview.cpp:162
+#: views/kmymoneyview.cpp:164 widgets/rc.cpp:4 widgets/rc.cpp:94
+msgid "Accounts"
+msgstr "Konten"
+
+#: views/kmymoneyview.cpp:176
+msgid "Bills & Reminders"
+msgstr "Rechnungen & Erinnerungen"
+
+#: views/kmymoneyview.cpp:178
+msgid "Scheduled transactions"
+msgstr "Geplante Buchungen"
+
+#: dialogs/knewaccountdlg.cpp:98 dialogs/rc.cpp:193 views/kmymoneyview.cpp:188
+#: views/kmymoneyview.cpp:190 widgets/rc.cpp:91
+msgid "Categories"
+msgstr "Kategorien"
+
+#: dialogs/kfindtransactiondlg.cpp:212 dialogs/rc.cpp:318
+#: views/kmymoneyview.cpp:199 views/kmymoneyview.cpp:201 widgets/rc.cpp:93
+msgid "Payees"
+msgstr "Empfänger"
+
+#: views/kgloballedgerview.cpp:149 views/kmymoneyview.cpp:211
+msgid "Ledgers"
+msgstr "Kontenbuch"
+
+#: views/kmymoneyview.cpp:353
+msgid "Creating transactions can only be performed in the ledger view"
+msgstr "Buchungen können nur im Kontobuch angelegt werden"
+
+#: views/kmymoneyview.cpp:367
+msgid "Modifying transactions can only be performed in the ledger view"
+msgstr "Buchungen können nur im Kontobuch geändert werden"
+
+#: views/kmymoneyview.cpp:382
+msgid "Duplicating transactions can only be performed in the ledger view"
+msgstr "Buchungen können nur im Kontobuch dupliziert werden"
+
+#: views/kmymoneyview.cpp:394
+msgid "Edit the current selected transactions"
+msgstr "Aktuell selektierte Buchungen bearbeiten"
+
+#: views/kmymoneyview.cpp:602
+msgid "<b>%1</b> is not a KMyMoney file."
+msgstr "<b>%1</b> ist keine KMyMoney-Datei."
+
+#: views/kmymoneyview.cpp:643
+msgid "GPG is not available for decryption of file <b>%1</b>"
+msgstr "GPG ist nicht verfügbar, um die Datei <b>%1</b> zu entschlüsseln"
+
+#: views/kmymoneyview.cpp:721
+msgid ""
+"File <b>%1</b> contains the old binary format used by KMyMoney. Please use "
+"an older version of KMyMoney (0.8.x) that still supports this format to "
+"convert it to the new XML based format."
+msgstr ""
+"Die Datei <b>%1</b> enthält Daten im alten Binär-Format von KMyMoney. Bitte "
+"nutzen sie eine ältere KMyMoney-Version (0.8.x), welche diese Format noch "
+"unterstützt um es in das neue XML-basierte Format zu konvertieren."
+
+#: views/kmymoneyview.cpp:723
+msgid "File <b>%1</b> contains an unknown file format!"
+msgstr "Datei <b>%1</b> enthält ein unbekanntes Dateiformat!"
+
+#: views/kmymoneyview.cpp:728
+msgid "Cannot read from file <b>%1</b>!"
+msgstr "Kann Datei <b>%1</b> nicht lesen!"
+
+#: views/kmymoneyview.cpp:732
+msgid "Cannot load file <b>%1</b>. Reason: %2"
+msgstr "Kann Datei <b>%1</b> nicht öffnen. Ursache: %2"
+
+#: views/kmymoneyview.cpp:742 views/kmymoneyview.cpp:748
+msgid "File <b>%1</b> not found!"
+msgstr "Datei <b>'%1'</b> nicht gefunden!"
+
+#: views/kmymoneyview.cpp:812
+msgid "Can't open database %1\n"
+msgstr "Kann Datenbank %1 nicht öffnen.\n"
+
+#: views/kmymoneyview.cpp:844
+msgid "An unrecoverable error occurred while reading the database"
+msgstr "Ein fataler Fehler trat beim Lesen der Datenbank auf"
+
+#: views/kmymoneyview.cpp:846 views/kmymoneyview.cpp:1208
+msgid "Database malfunction"
+msgstr "Fehlfunktion der Datenbank"
+
+#: views/kmymoneyview.cpp:938
+msgid "Unknown fix level in input file"
+msgstr "Unbekanntes \"Fix-Level\" in Eingabe-Datei"
+
+#: views/kmymoneyview.cpp:984
+msgid ""
+"GPG does not seem to be installed on your system. Please make sure, that GPG "
+"can be found using the standard search path. This time, encryption is "
+"disabled."
+msgstr ""
+"Es sieht so aus als ob GPG auf Ihrem System nicht installiert ist. Bitte "
+"stellen Sie sicher, dass GPG über den Standard Suchpfad gefunden werden "
+"kann. Dieses mal ist die Verschlüsselung abgeschaltet."
+
+#: views/kmymoneyview.cpp:984
+msgid "GPG not found"
+msgstr "GPG nicht gefunden"
+
+#: views/kmymoneyview.cpp:991
+msgid ""
+"You have selected to encrypt your data also with the KMyMoney recover key, "
+"but the key with id</p><p><center><b>%1</b></center></p>has not been found "
+"in your keyring at this time. Please make sure to import this key into your "
+"keyring. You can find it on the <a href=\"http://kmymoney2.sourceforge.net/"
+"\">KMyMoney web-site</a>. This time your data will not be encrypted with the "
+"KMyMoney recover key."
+msgstr ""
+"Sie haben angegeben, dass Ihre Daten ebenfalls mit dem KMyMoney "
+"Wiederherstellungs-Schlüssel verschlüsselt werden soll, der Schlüssel mit "
+"der ID </p><p><center><b>%1</b></center></p> konnte aber nicht in Ihrem "
+"Schlüsselbund gefunden werden. Bitte stellen Sie sicher, dass dieser "
+"Schlüssel in Ihren Schlüsselbund importiert wird. Sie können ihn auf der <a "
+"href=\"http://kmymoney2.sourceforge.net/\">KMyMoney web-site</a> finden. "
+"Diesesmal werden Ihre Daten nicht mit dem KMyMoney Wiederherstellungs-"
+"Schlüssel verschlüsselt."
+
+#: views/kmymoneyview.cpp:991 views/kmymoneyview.cpp:1000
+msgid "GPG-Key not found"
+msgstr "GPG Schlüssel nicht gefunden"
+
+#: views/kmymoneyview.cpp:1000
+msgid ""
+"You have specified to encrypt your data for the user-id</p><p><center><b>%1</"
+"b>.</center></p>Unfortunately, a valid key for this user-id was not found in "
+"your keyring. Please make sure to import a valid key for this user-id. This "
+"time, encryption is disabled."
+msgstr ""
+"Sie haben angegeben, dass Sie die Daten für den Benutzer mit der ID </"
+"p><p><center><b>%1</b></center></p> verschlüsseln möchten. Leider wurde für "
+"den Benutzer kein gültiger Schlüssel in Ihrem Schlüsselbund gefunden. Bitte "
+"importieren Sie einen gültigen Schlüssel für diese Benutzerkennung. Diesmal "
+"ist die Verschlüsselung abgeschaltet."
+
+#: views/kmymoneyview.cpp:1006
+msgid ""
+"You have configured to save your data in encrypted form using GPG. Please be "
+"aware, that this is a brand new feature which is yet untested. Make sure, "
+"you have the necessary understanding that you might loose all your data if "
+"you store it encrypted and cannot decrypt it later on! If unsure, answer "
+"<b>No</b>."
+msgstr ""
+"Sie haben eingestellt, dass Daten in verschlüsselter Form mittels GPG "
+"verschlüsselt werden sollen. Bitte beachten Sie, dass dies eine komplett "
+"neue, ungetestete, Funktion ist. Ferner machen Sie sich bitte klar, dass Sie "
+"alle Daten verlieren können wenn Sie diese verschlüsselt speichern aber "
+"später nicht mehr entschlüsseln können! Falls Sie unsicher sind drücken Sie "
+"bitte <b>Nein</b>."
+
+#: views/kmymoneyview.cpp:1008
+msgid "Store GPG encrypted"
+msgstr "Speichern mit GPG Verschlüsselung"
+
+#: views/kmymoneyview.cpp:1038 views/kmymoneyview.cpp:1052
+msgid "Unable to open file '%1' for writing."
+msgstr "Datei '%1' kann nicht zum Schreiben geöffnet werden."
+
+#: views/kmymoneyview.cpp:1065 views/kmymoneyview.cpp:1074
+msgid "Failure while writing to '%1'"
+msgstr "In Datei '%1' kann nicht geschrieben werden"
+
+#: views/kmymoneyview.cpp:1086 views/kmymoneyview.cpp:1181
+msgid "Tried to access a file when it's not open"
+msgstr "Es wurde versucht, auf eine nicht geöffnete Datei zuzugreifen"
+
+#: views/kmymoneyview.cpp:1092
+msgid ""
+"Since this version of KMyMoney only writes data files in its new format, "
+"files written with this version cannot be read by KMyMoney version 0.4. If "
+"you still want to use older versions of KMyMoney with your data files, "
+"please make sure you keep a backup-file of your finance data. If you want to "
+"abort this operation, please press Cancel now"
+msgstr ""
+"Diese Version von KMyMoney benutzt ein Dateiformat das inkompatibel ist zu "
+"KMyMoney Version 0.4 oder älter. Wenn Sie also eine ältere Version von "
+"KMyMoney weiterhin verwenden wollen, sollten Sie diesen Speichervorgang "
+"jetzt abbrechen und mit der alten Version eine Sicherung Ihrer Finanzdaten "
+"vornehmen"
+
+#: views/kmymoneyview.cpp:1122
+msgid "Malformed URL '%1'"
+msgstr "Ungültige URL '%1'"
+
+#: views/kmymoneyview.cpp:1192
+msgid ""
+"Database contains data which must be removed before using SaveAs.\n"
+"Do you wish to continue?"
+msgstr ""
+"Die Datenbank enthält Daten welche vor Ausführung von \"Speichern unter...\" "
+"entfernt werden müssen.\n"
+"Soll weiter fortgefahren werden?"
+
+#: views/kmymoneyview.cpp:1205
+msgid ""
+"An unrecoverable error occurred while writing to the database.\n"
+"It may well be corrupt."
+msgstr ""
+"Ein nicht korrigierbarer Fehler ist während des Schreibens in die Datenbank "
+"aufgetreten.\n"
+"Sie kann jetzt durchaus inkonsistent sein."
+
+#: views/kmymoneyview.cpp:1215
+msgid ""
+"Can't open or create database %1\n"
+"Retry SaveAsDatabase and click Help for further info"
+msgstr ""
+"Kann Datenbank %1 weder öffnen noch erstellen\n"
+"Versuchen Sie es erneut und klicken auf Hilfe für weitere Infos"
+
+#: views/kmymoneyview.cpp:1354
+msgid "Afghanistan Afghani"
+msgstr "Afghanischer Afghani"
+
+#: views/kmymoneyview.cpp:1355
+msgid "Albanian Lek"
+msgstr "Albanischer Lek"
+
+#: views/kmymoneyview.cpp:1356
+msgid "Netherland Antillian Guilder"
+msgstr "Niederländische Antillen Gulden"
+
+#: views/kmymoneyview.cpp:1357
+msgid "Algerian Dinar"
+msgstr "Algerischer Dinar"
+
+#: views/kmymoneyview.cpp:1358
+msgid "Andorran Franc"
+msgstr "Andorranischer Franc"
+
+#: views/kmymoneyview.cpp:1359
+msgid "Andorran Peseta"
+msgstr "Andorranische Pesete"
+
+#: views/kmymoneyview.cpp:1360
+msgid "Angolan New Kwanza"
+msgstr "Angolanischer Kwanza"
+
+#: views/kmymoneyview.cpp:1361
+msgid "Argentine Peso"
+msgstr "Argentinischer Peso"
+
+#: views/kmymoneyview.cpp:1362
+msgid "Aruban Florin"
+msgstr "Aruba Florin"
+
+#: views/kmymoneyview.cpp:1363
+msgid "Australian Dollar"
+msgstr "Australischer Dollar"
+
+#: views/kmymoneyview.cpp:1364
+msgid "Azerbaijani Manat"
+msgstr "Aserbaidschan-Manat"
+
+#: views/kmymoneyview.cpp:1365
+msgid "Bahamian Dollar"
+msgstr "Bahama-Dollar"
+
+#: views/kmymoneyview.cpp:1366
+msgid "Bahraini Dinar"
+msgstr "Bahrain-Dinar"
+
+#: views/kmymoneyview.cpp:1367
+msgid "Bangladeshi Taka"
+msgstr "Bangladeschischer Taka"
+
+#: views/kmymoneyview.cpp:1368
+msgid "Barbados Dollar"
+msgstr "Barbados-Dollar"
+
+#: views/kmymoneyview.cpp:1369
+msgid "Belarussian Ruble"
+msgstr "Weißrussischer Rubel"
+
+#: views/kmymoneyview.cpp:1370
+msgid "Belize Dollar"
+msgstr "Belize-Dollar"
+
+#: views/kmymoneyview.cpp:1371
+msgid "Bermudian Dollar"
+msgstr "Bermuda-Dollar"
+
+#: views/kmymoneyview.cpp:1372
+msgid "Bhutan Ngultrum"
+msgstr "Bhutanischer Ngultrum"
+
+#: views/kmymoneyview.cpp:1373
+msgid "Bolivian Boliviano"
+msgstr "Bolivianischer Boliviano"
+
+#: views/kmymoneyview.cpp:1374
+msgid "Bosnian Convertible Mark"
+msgstr "Bosnische konvertierbare Mark"
+
+#: views/kmymoneyview.cpp:1375
+msgid "Botswana Pula"
+msgstr "Botsuanischer Pula"
+
+#: views/kmymoneyview.cpp:1376
+msgid "Brazilian Real"
+msgstr "Brasilianischer Real"
+
+#: views/kmymoneyview.cpp:1377
+msgid "British Pound"
+msgstr "Britisches Pfund"
+
+#: views/kmymoneyview.cpp:1378
+msgid "Brunei Dollar"
+msgstr "Brunei-Dollar"
+
+#: views/kmymoneyview.cpp:1379
+msgid "Bulgarian Lev"
+msgstr "Bulgarischer Lew"
+
+#: views/kmymoneyview.cpp:1380
+msgid "Burundi Franc"
+msgstr "Burundi-Franc"
+
+#: views/kmymoneyview.cpp:1381
+msgid "CFA Franc BEAC"
+msgstr "CFA Franc BEAC"
+
+#: views/kmymoneyview.cpp:1382
+msgid "CFA Franc BCEAO"
+msgstr "CFA Franc BCEAO"
+
+#: views/kmymoneyview.cpp:1383
+msgid "CFP Franc Pacifique"
+msgstr "CFP Franc Pazific"
+
+#: views/kmymoneyview.cpp:1384
+msgid "Cambodia Riel"
+msgstr "Kambodschanischer Riel"
+
+#: views/kmymoneyview.cpp:1385
+msgid "Canadian Dollar"
+msgstr "Kanadischer Dollar"
+
+#: views/kmymoneyview.cpp:1386
+msgid "Cape Verde Escudo"
+msgstr "Kap-Verde-Escudo"
+
+#: views/kmymoneyview.cpp:1387
+msgid "Cayman Islands Dollar"
+msgstr "Kaiman-Dollar"
+
+#: views/kmymoneyview.cpp:1388
+msgid "Chilean Peso"
+msgstr "Chilenischer Peso"
+
+#: views/kmymoneyview.cpp:1389
+msgid "Chinese Yuan Renminbi"
+msgstr "Chinesischer Renminbi Yuan"
+
+#: views/kmymoneyview.cpp:1390
+msgid "Colombian Peso"
+msgstr "Kolumbianischer Peso"
+
+#: views/kmymoneyview.cpp:1391
+msgid "Comoros Franc"
+msgstr "Komoren-Franc"
+
+#: views/kmymoneyview.cpp:1392
+msgid "Costa Rican Colon"
+msgstr "Costa-Rica-Colon"
+
+#: views/kmymoneyview.cpp:1393
+msgid "Croatian Kuna"
+msgstr "Kroatische Kuna"
+
+#: views/kmymoneyview.cpp:1394
+msgid "Cuban Peso"
+msgstr "Kubanischer Peso"
+
+#: views/kmymoneyview.cpp:1395
+msgid "Czech Koruna"
+msgstr "Tschechische Krone"
+
+#: views/kmymoneyview.cpp:1396
+msgid "Danish Krone"
+msgstr "Dänische Krone"
+
+#: views/kmymoneyview.cpp:1397
+msgid "Djibouti Franc"
+msgstr "Dschibuti-Franc"
+
+#: views/kmymoneyview.cpp:1398
+msgid "Dominican Peso"
+msgstr "Dominikanischer Peso"
+
+#: views/kmymoneyview.cpp:1399
+msgid "East Caribbean Dollar"
+msgstr "Ost Karibischer Dollar"
+
+#: views/kmymoneyview.cpp:1400
+msgid "Egyptian Pound"
+msgstr "Ägyptisches Pfund"
+
+#: views/kmymoneyview.cpp:1401
+msgid "El Salvador Colon"
+msgstr "El-Salvador-Colon"
+
+#: views/kmymoneyview.cpp:1402
+msgid "Eritrean Nakfa"
+msgstr "Eritreischer Nakfa"
+
+#: views/kmymoneyview.cpp:1403
+msgid "Estonian Kroon"
+msgstr "Estnische Krone"
+
+#: views/kmymoneyview.cpp:1404
+msgid "Ethiopian Birr"
+msgstr "Äthiopischer Birr"
+
+#: views/kmymoneyview.cpp:1405
+msgid "Euro"
+msgstr "Euro"
+
+#: views/kmymoneyview.cpp:1406
+msgid "Falkland Islands Pound"
+msgstr "Falkland-Pfund"
+
+#: views/kmymoneyview.cpp:1407
+msgid "Fiji Dollar"
+msgstr "Fidschi-Dollar"
+
+#: views/kmymoneyview.cpp:1408
+msgid "Gambian Dalasi"
+msgstr "Gambischer Dalasi"
+
+#: views/kmymoneyview.cpp:1409
+msgid "Georgian Lari"
+msgstr "Georgischer Lari"
+
+#: views/kmymoneyview.cpp:1410
+msgid "Ghanaian Cedi"
+msgstr "Ghanaischer Cedi"
+
+#: views/kmymoneyview.cpp:1411
+msgid "Gibraltar Pound"
+msgstr "Gibraltar-Pfund"
+
+#: views/kmymoneyview.cpp:1412
+msgid "Guatemalan Quetzal"
+msgstr "Guatemaltekischer Quetzal"
+
+#: views/kmymoneyview.cpp:1413
+msgid "Guinea-Bissau Peso"
+msgstr "Guinea-Bissau-Peso"
+
+#: views/kmymoneyview.cpp:1414
+msgid "Guyanan Dollar"
+msgstr "Guyana-Dollar"
+
+#: views/kmymoneyview.cpp:1415
+msgid "Haitian Gourde"
+msgstr "Haitianische Gourde"
+
+#: views/kmymoneyview.cpp:1416
+msgid "Honduran Lempira"
+msgstr "Honduranische Lempira"
+
+#: views/kmymoneyview.cpp:1417
+msgid "Hong Kong Dollar"
+msgstr "Hongkong-Dollar"
+
+#: views/kmymoneyview.cpp:1418
+msgid "Hungarian Forint"
+msgstr "Ungarischer Forint"
+
+#: views/kmymoneyview.cpp:1419
+msgid "Iceland Krona"
+msgstr "Isländische Krone"
+
+#: views/kmymoneyview.cpp:1420
+msgid "Indian Rupee"
+msgstr "Indische Rupie"
+
+#: views/kmymoneyview.cpp:1421
+msgid "Indonesian Rupiah"
+msgstr "Indonesische Rupiah"
+
+#: views/kmymoneyview.cpp:1422
+msgid "Iranian Rial"
+msgstr "Iranischer Rial"
+
+#: views/kmymoneyview.cpp:1423
+msgid "Iraqi Dinar"
+msgstr "Irakischer Dinar"
+
+#: views/kmymoneyview.cpp:1424
+msgid "Israeli New Shekel"
+msgstr "Israelischer Neuer Schekel"
+
+#: views/kmymoneyview.cpp:1425
+msgid "Jamaican Dollar"
+msgstr "Jamaikanischer Dollar"
+
+#: views/kmymoneyview.cpp:1426
+msgid "Japanese Yen"
+msgstr "Japanischer Yen"
+
+#: views/kmymoneyview.cpp:1427
+msgid "Jordanian Dinar"
+msgstr "Jordanischer Dinar"
+
+#: views/kmymoneyview.cpp:1428
+msgid "Kazakhstan Tenge"
+msgstr "Kasachstan Tenge"
+
+#: views/kmymoneyview.cpp:1429
+msgid "Kenyan Shilling"
+msgstr "Kenianischer Schilling"
+
+#: views/kmymoneyview.cpp:1430
+msgid "Kuwaiti Dinar"
+msgstr "Kuwaitischer Dinar"
+
+#: views/kmymoneyview.cpp:1431
+msgid "Kyrgyzstan Som"
+msgstr "Kirgisischer Som"
+
+#: views/kmymoneyview.cpp:1432
+msgid "Laos Kip"
+msgstr "Laotischer Kip"
+
+#: views/kmymoneyview.cpp:1433
+msgid "Latvian Lats"
+msgstr "Lettische Lats"
+
+#: views/kmymoneyview.cpp:1434
+msgid "Lebanese Pound"
+msgstr "Libanesisches Pfund"
+
+#: views/kmymoneyview.cpp:1435
+msgid "Lesotho Loti"
+msgstr "Lesothischer Loti"
+
+#: views/kmymoneyview.cpp:1436
+msgid "Liberian Dollar"
+msgstr "Liberianischer Dollar"
+
+#: views/kmymoneyview.cpp:1437
+msgid "Libyan Dinar"
+msgstr "Libyscher Dinar"
+
+#: views/kmymoneyview.cpp:1438
+msgid "Lithuanian Litas"
+msgstr "Litauische Litas"
+
+#: views/kmymoneyview.cpp:1439
+msgid "Macau Pataca"
+msgstr "Macauische Pataca"
+
+#: views/kmymoneyview.cpp:1440
+msgid "Macedonian Denar"
+msgstr "Mazedonischer Denar"
+
+#: views/kmymoneyview.cpp:1441
+msgid "Malagasy Franc"
+msgstr "Madagaskar-Franc"
+
+#: views/kmymoneyview.cpp:1442
+msgid "Malawi Kwacha"
+msgstr "Malawi-Kwacha"
+
+#: views/kmymoneyview.cpp:1443
+msgid "Malaysian Ringgit"
+msgstr "Malaysischer Ringgit"
+
+#: views/kmymoneyview.cpp:1444
+msgid "Maldive Rufiyaa"
+msgstr "Maledivische Rufiyaa"
+
+#: views/kmymoneyview.cpp:1445
+msgid "Mali Republic Franc"
+msgstr "Mali-Franc"
+
+#: views/kmymoneyview.cpp:1446
+msgid "Mauritanian Ouguiya"
+msgstr "Mauretanische Ouguiya"
+
+#: views/kmymoneyview.cpp:1447
+msgid "Mauritius Rupee"
+msgstr "Mauritius-Rupie"
+
+#: views/kmymoneyview.cpp:1448
+msgid "Mexican Peso"
+msgstr "Mexikanischer Peso"
+
+#: views/kmymoneyview.cpp:1449
+msgid "Moldavian Leu"
+msgstr "Moldauischer Leu"
+
+#: views/kmymoneyview.cpp:1450
+msgid "Mongolian Tugrik"
+msgstr "Mongolischer Tugrik"
+
+#: views/kmymoneyview.cpp:1451
+msgid "Moroccan Dirham"
+msgstr "Marokkanischer Dirham"
+
+#: views/kmymoneyview.cpp:1452
+msgid "Mozambique Metical"
+msgstr "Mosambikanischer Metical"
+
+#: views/kmymoneyview.cpp:1453
+msgid "Myanmar Kyat"
+msgstr "Myanmarischer Kyat"
+
+#: views/kmymoneyview.cpp:1454
+msgid "Namibian Dollar"
+msgstr "Namibischer Dollar"
+
+#: views/kmymoneyview.cpp:1455
+msgid "Nepalese Rupee"
+msgstr "Nepalesische Rupie"
+
+#: views/kmymoneyview.cpp:1456
+msgid "New Zealand Dollar"
+msgstr "Neuseländischer Dollar"
+
+#: views/kmymoneyview.cpp:1457
+msgid "Nicaraguan Cordoba Oro"
+msgstr "Nicaraguanischer Cordoba"
+
+#: views/kmymoneyview.cpp:1458
+msgid "Nigerian Naira"
+msgstr "Nigerianische Naira"
+
+#: views/kmymoneyview.cpp:1459
+msgid "North Korean Won"
+msgstr "Nordkoreanischer Won"
+
+#: views/kmymoneyview.cpp:1460
+msgid "Norwegian Kroner"
+msgstr "Norwegische Krone"
+
+#: views/kmymoneyview.cpp:1461
+msgid "Omani Rial"
+msgstr "Omani Rial"
+
+#: views/kmymoneyview.cpp:1462
+msgid "Pakistan Rupee"
+msgstr "Pakistanische Rupie"
+
+#: views/kmymoneyview.cpp:1463
+msgid "Panamanian Balboa"
+msgstr "Panamaischer Balboa"
+
+#: views/kmymoneyview.cpp:1464
+msgid "Papua New Guinea Kina"
+msgstr "Papua-Neuguinea-Kina"
+
+#: views/kmymoneyview.cpp:1465
+msgid "Paraguay Guarani"
+msgstr "Paraguayischer Guarani"
+
+#: views/kmymoneyview.cpp:1466
+msgid "Peruvian Nuevo Sol"
+msgstr "Peruanischer Sol"
+
+#: views/kmymoneyview.cpp:1467
+msgid "Philippine Peso"
+msgstr "Philippinischer Peso"
+
+#: views/kmymoneyview.cpp:1468
+msgid "Polish Zloty"
+msgstr "Polnischer Zloty"
+
+#: views/kmymoneyview.cpp:1469
+msgid "Qatari Rial"
+msgstr "Katar-Rial"
+
+#: views/kmymoneyview.cpp:1470
+msgid "Romanian Leu (new)"
+msgstr "Rumänischer Lei (neu)"
+
+#: views/kmymoneyview.cpp:1471
+msgid "Russian Ruble"
+msgstr "Russischer Rubel"
+
+#: views/kmymoneyview.cpp:1472
+msgid "Rwanda Franc"
+msgstr "Ruanda-Franc"
+
+#: views/kmymoneyview.cpp:1473
+msgid "Samoan Tala"
+msgstr "Samoanischer Tala"
+
+#: views/kmymoneyview.cpp:1474
+msgid "Sao Tome and Principe Dobra"
+msgstr "Sao-Tome/Principe-Dobra"
+
+#: views/kmymoneyview.cpp:1475
+msgid "Saudi Riyal"
+msgstr "Saudi Riyal"
+
+#: views/kmymoneyview.cpp:1476
+msgid "Seychelles Rupee"
+msgstr "Seychellen-Rupie"
+
+#: views/kmymoneyview.cpp:1477
+msgid "Sierra Leone Leone"
+msgstr "Sierraleonische Leone"
+
+#: views/kmymoneyview.cpp:1478
+msgid "Singapore Dollar"
+msgstr "Singapur Dollar"
+
+#: views/kmymoneyview.cpp:1481
+msgid "Solomon Islands Dollar"
+msgstr "Salomonen-Dollar"
+
+#: views/kmymoneyview.cpp:1482
+msgid "Somali Shilling"
+msgstr "Somalischer Schilling"
+
+#: views/kmymoneyview.cpp:1483
+msgid "South African Rand"
+msgstr "Südafrikanischer Rand"
+
+#: views/kmymoneyview.cpp:1484
+msgid "South Korean Won"
+msgstr "Südkoreanischer Won"
+
+#: views/kmymoneyview.cpp:1485
+msgid "Sri Lanka Rupee"
+msgstr "Sri-Lanka-Rupie"
+
+#: views/kmymoneyview.cpp:1486
+msgid "St. Helena Pound"
+msgstr "St. Helena-Pfund"
+
+#: views/kmymoneyview.cpp:1487
+msgid "Sudanese Dinar"
+msgstr "Sudanesischer Dinar"
+
+#: views/kmymoneyview.cpp:1488
+msgid "Suriname Guilder"
+msgstr "Suriname-Gulden"
+
+#: views/kmymoneyview.cpp:1489
+msgid "Swaziland Lilangeni"
+msgstr "Swasiländischer Lilangeni"
+
+#: views/kmymoneyview.cpp:1490
+msgid "Swedish Krona"
+msgstr "Schwedische Krone"
+
+#: views/kmymoneyview.cpp:1491
+msgid "Swiss Franc"
+msgstr "Schweizer Franken"
+
+#: views/kmymoneyview.cpp:1492
+msgid "Syrian Pound"
+msgstr "Syrisches Pfund"
+
+#: views/kmymoneyview.cpp:1493
+msgid "Taiwan Dollar"
+msgstr "Taiwanesischer Dollar"
+
+#: views/kmymoneyview.cpp:1494
+msgid "Tajikistan Somani"
+msgstr "Tadschikistan-Somani"
+
+#: views/kmymoneyview.cpp:1495
+msgid "Tanzanian Shilling"
+msgstr "Tansania-Schilling "
+
+#: views/kmymoneyview.cpp:1496
+msgid "Thai Baht"
+msgstr "Thailändischer Baht"
+
+#: views/kmymoneyview.cpp:1497
+msgid "Tongan Pa'anga"
+msgstr "Tongaische Pa'anga"
+
+#: views/kmymoneyview.cpp:1498
+msgid "Trinidad and Tobago Dollar"
+msgstr "Trinidad/Tobago-Dollar"
+
+#: views/kmymoneyview.cpp:1499
+msgid "Tunisian Dinar"
+msgstr "Tunesischer Dinar"
+
+#: views/kmymoneyview.cpp:1500
+msgid "Turkish Lira (new)"
+msgstr "Türkische Neue Lire"
+
+#: views/kmymoneyview.cpp:1501
+msgid "Turkmenistan Manat"
+msgstr "Turkmenistan-Manat"
+
+#: views/kmymoneyview.cpp:1502
+msgid "US Dollar"
+msgstr "US Dollar"
+
+#: views/kmymoneyview.cpp:1503
+msgid "Uganda Shilling"
+msgstr "Uganda-Schilling"
+
+#: views/kmymoneyview.cpp:1504
+msgid "Ukraine Hryvnia"
+msgstr "Ukrainische Griwna "
+
+#: views/kmymoneyview.cpp:1505
+msgid "United Arab Emirates Dirham"
+msgstr "Ver. Arab. Emir.-Dirham"
+
+#: views/kmymoneyview.cpp:1506
+msgid "Uruguayan Peso"
+msgstr "Uruguayischer Peso"
+
+#: views/kmymoneyview.cpp:1507
+msgid "Uzbekistani Sum"
+msgstr "Usbekistan-Sum"
+
+#: views/kmymoneyview.cpp:1508
+msgid "Vanuatu Vatu"
+msgstr "Vanuatu-Vatu"
+
+#: views/kmymoneyview.cpp:1509
+msgid "Venezuelan Bolivar"
+msgstr "Venezuelanischer Bolivar"
+
+#: views/kmymoneyview.cpp:1510
+msgid "Vietnamese Dong"
+msgstr "Vietnamesischer Dong"
+
+#: views/kmymoneyview.cpp:1511
+msgid "Yugoslav Dinar"
+msgstr "Jugoslawischer Dinar"
+
+#: views/kmymoneyview.cpp:1512
+msgid "Zambian Kwacha"
+msgstr "Sambischer Kwacha"
+
+#: views/kmymoneyview.cpp:1513
+msgid "Zimbabwe Dollar"
+msgstr "Simbabwe-Dollar"
+
+#: views/kmymoneyview.cpp:1515
+msgid "Gold"
+msgstr "Gold"
+
+#: views/kmymoneyview.cpp:1516
+msgid "Palladium"
+msgstr "Palladium"
+
+#: views/kmymoneyview.cpp:1517
+msgid "Platinum"
+msgstr "Platin"
+
+#: views/kmymoneyview.cpp:1518
+msgid "Silver"
+msgstr "Silber"
+
+#: views/kmymoneyview.cpp:1551
+msgid "Austrian Schilling"
+msgstr "Östereichischer Schilling"
+
+#: views/kmymoneyview.cpp:1552
+msgid "German Mark"
+msgstr "Deutsche Mark"
+
+#: views/kmymoneyview.cpp:1553
+msgid "French Franc"
+msgstr "Französischer Franc"
+
+#: views/kmymoneyview.cpp:1554
+msgid "Italian Lira"
+msgstr "Italiänische Lire"
+
+#: views/kmymoneyview.cpp:1555
+msgid "Spanish Peseta"
+msgstr "Spanische Pesete"
+
+#: views/kmymoneyview.cpp:1556
+msgid "Dutch Guilder"
+msgstr "Holländischer Gulden"
+
+#: views/kmymoneyview.cpp:1557
+msgid "Belgian Franc"
+msgstr "Belgischer Franc"
+
+#: views/kmymoneyview.cpp:1558
+msgid "Luxembourg Franc"
+msgstr "Luxemburger Franc"
+
+#: views/kmymoneyview.cpp:1559
+msgid "Portuguese Escudo"
+msgstr "Portugischer Escudo"
+
+#: views/kmymoneyview.cpp:1560
+msgid "Irish Pound"
+msgstr "Irisches Pfund"
+
+#: views/kmymoneyview.cpp:1561
+msgid "Finnish Markka"
+msgstr "Finnische Mark"
+
+#: views/kmymoneyview.cpp:1562
+msgid "Greek Drachma"
+msgstr "Griechischer Drachme"
+
+#: views/kmymoneyview.cpp:1564
+msgid "Romanian Leu"
+msgstr "Rumänischer Lei"
+
+#: views/kmymoneyview.cpp:1566
+msgid "Russian Ruble (old)"
+msgstr "Russischer Rubel (alt)"
+
+#: views/kmymoneyview.cpp:1568
+msgid "Slovenian Tolar"
+msgstr "Slowenischer Tolar"
+
+#: views/kmymoneyview.cpp:1571
+msgid "Turkish Lira"
+msgstr "Türkische Lire"
+
+#: views/kmymoneyview.cpp:1574
+msgid "Maltese Lira"
+msgstr "Maltesische Lire"
+
+#: views/kmymoneyview.cpp:1575
+msgid "Cyprus Pound"
+msgstr "Zypern-Pfund"
+
+#: views/kmymoneyview.cpp:1578
+msgid "Slovak Koruna"
+msgstr "Slovakische Krone"
+
+#: views/kmymoneyview.cpp:1888
+msgid ""
+"The account \"%1\" was previously created as loan account but some "
+"information is missing. The new loan wizard will be started to collect all "
+"relevant information. Please use a KMyMoney version >= 0.8.7 and < 0.9 to "
+"correct the problem."
+msgstr ""
+"Das Konto \"%1\" wurde bereits als Kreditkonto erstellt, aber einige "
+"Informationen sind nicht vorhanden. Der Kreditassistent wird nun alle "
+"relevanten Informationen sammeln. Wenn Sie diesen Vorgang abbrechen, wird "
+"die Datei geschlossen. Bitte nutzen Sie eine KMyMoney-Version >=0.8.7 und "
+"<0.9 um das Problem zu korrigieren."
+
+#: views/kmymoneyview.cpp:1892
+msgid "Account problem"
+msgstr "Kontoproblem"
+
+#: views/kmymoneyview.cpp:1941
+msgid "Unable to add schedule: "
+msgstr "Kann Planung nicht erstellen: "
+
+#: views/kmymoneyview.cpp:1970
+msgid "Fix transactions"
+msgstr "Automatische Buchungskorrektur"
+
+#: views/kaccountsview.cpp:522 views/kinstitutionsview.cpp:300
+msgid "Net Worth: "
+msgstr "Eigenkapital: "
+
+#: dialogs/rc.cpp:108 dialogs/rc.cpp:163 dialogs/rc.cpp:250 dialogs/rc.cpp:755
+#: dialogs/rc.cpp:830 views/kinvestmentview.cpp:77 widgets/register.cpp:572
+msgid "Quantity"
+msgstr "Menge"
+
+#: views/kscheduledlistitem.cpp:137
+msgid "Finished"
+msgstr "Fertig"
+
+#: views/kbudgetview.cpp:109
+msgid "Creates a new budget"
+msgstr "Neues Budget anlegen"
+
+#: views/kbudgetview.cpp:110
+msgid "Use this to create a new empty budget."
+msgstr "Hiermit ein neues, leeres Budget anlegen."
+
+#: views/kbudgetview.cpp:116
+msgid "Rename the current selected budget"
+msgstr "Das aktuell gewählte Budget umbenennen"
+
+#: views/kbudgetview.cpp:117
+msgid "Use this to start renaming the selected budget."
+msgstr "Hiermit das gewählte Budget umbenennen."
+
+#: views/kbudgetview.cpp:123
+msgid "Delete the current selected budget"
+msgstr "Das aktuell gewählte Budget löschen"
+
+#: views/kbudgetview.cpp:124
+msgid "Use this to delete the selected budget."
+msgstr "Hiermit das gewählte Budget löschen."
+
+#: views/kbudgetview.cpp:130
+msgid "Accepts the entered values and stores the budget"
+msgstr "Akzeptiert die eingegebenen Werte und speichert das Budget"
+
+#: views/kbudgetview.cpp:131
+msgid "Use this to store the modified data."
+msgstr "Drücken, um die veränderten Daten zu akzeptieren."
+
+#: views/kbudgetview.cpp:137
+msgid "Revert budget to last saved state"
+msgstr "Budget auf letzten gespeicherten Stand zurücksetzen"
+
+#: views/kbudgetview.cpp:138
+msgid "Use this to discard the modified data."
+msgstr "Drücken, um die veränderten Daten zu verwerfen."
+
+#: views/kbudgetview.cpp:489
+msgid "Do you want to save the changes for <b>%1</b>"
+msgstr "Möchten Sie die Änderungen an <b>%1</b> speichern"
+
+#: views/kbudgetview.cpp:610
+msgid ""
+"A budget with the name '%1' already exists. It is not advisable to have "
+"multiple budgets with the same identification name. Are you sure you would "
+"like to rename the budget?"
+msgstr ""
+"Ein Budget mit dem Namen '%1' existiert schon. Mehrere Budgets mit dem "
+"gleichen Namen zu haben, ist nicht zu empfehlen. Sind Sie sicher, dass sie "
+"das Budget umbenennen wollen?"
+
+#: views/kbudgetview.cpp:635 views/kbudgetview.cpp:750
+msgid "Unable to modify budget"
+msgstr "Unmöglich das Budget zu ändern"
+
+#: views/kbudgetview.cpp:736
+msgid "Unable to reset budget"
+msgstr "Unmöglich das Budget zurückzusetzen"
+
+#: views/rc.cpp:1
+msgid "List"
+msgstr "Liste"
+
+#: views/rc.cpp:2 views/rc.cpp:20
+msgid "Collapse all accounts in the list"
+msgstr "Alle Konten in dieser Liste einklappen"
+
+#: views/rc.cpp:3 views/rc.cpp:21
+msgid "Expand all accounts in the list"
+msgstr "Alle Konten in dieser Liste ausklappen"
+
+#: views/rc.cpp:4
+msgid "Icons"
+msgstr "Icons"
+
+#: views/rc.cpp:5 views/rc.cpp:22
+msgid "Note: Unused categories are not shown as selected by settings."
+msgstr ""
+"Hinweis: Unbenutzte Kategorien werden, wie in den Einstellungen "
+"konfiguriert, nicht angezeigt."
+
+#: views/rc.cpp:6 views/rc.cpp:23 views/rc.cpp:54
+msgid "Total Profits:"
+msgstr "Gesamtgewinn:"
+
+#: views/rc.cpp:7
+msgid "Your budgets"
+msgstr "Ihre Budgets"
+
+#: dialogs/rc.cpp:340 dialogs/rc.cpp:841 dialogs/settings/rc.cpp:124
+#: views/rc.cpp:8 widgets/rc.cpp:48 widgets/rc.cpp:150
+msgid "New"
+msgstr "Neu"
+
+#: views/rc.cpp:9
+msgid "Ren"
+msgstr "Umbenennen"
+
+#: views/rc.cpp:10
+msgid "Del"
+msgstr "Löschen"
+
+#: views/rc.cpp:11
+msgid "Res"
+msgstr "Zurücksetzen"
+
+#: views/rc.cpp:12
+msgid "Upd"
+msgstr "Aktualisieren"
+
+#: views/rc.cpp:15
+msgid "Hide unused budget categories"
+msgstr "Ungenutze Budget-Kategorien ausblenden"
+
+#: views/rc.cpp:16
+msgid "Assignments"
+msgstr "Zuweisung"
+
+#: views/rc.cpp:19
+msgid "Include subaccounts"
+msgstr "Unterkonten einschließen"
+
+#: dialogs/settings/rc.cpp:23 views/rc.cpp:24
+msgid "Forecast Settings"
+msgstr "Vorhersage-Einstellungen"
+
+#: views/rc.cpp:25
+msgid "Days to Forecast:"
+msgstr "Vorherzusagende Tage:"
+
+#: views/rc.cpp:26
+msgid "Days of Accounts Cycle:"
+msgstr "Tage des Konto-Zyklus:"
+
+#: dialogs/settings/rc.cpp:25 views/rc.cpp:27
+msgid "Day of Month to start Forecast:"
+msgstr "Start-Tag (des Monats) der Vorhersage:"
+
+#: views/rc.cpp:28
+msgid "Historic Cycles:"
+msgstr "Anzahl der Perioden:"
+
+#: views/rc.cpp:29
+msgid "Chart Detail:"
+msgstr "Diagramm Details:"
+
+#: views/rc.cpp:30 widgets/kmymoneyaccountselector.cpp:64 widgets/rc.cpp:65
+msgid "All"
+msgstr "Alle"
+
+#: views/rc.cpp:31 widgets/rc.cpp:66
+msgid "Top-Level"
+msgstr "Oberstes Level"
+
+#: views/rc.cpp:32 widgets/rc.cpp:67
+msgid "Groups"
+msgstr "Gruppen"
+
+#: views/rc.cpp:33 widgets/rc.cpp:68
+msgid "Totals"
+msgstr "Summen"
+
+#: views/rc.cpp:34
+msgid "<p>Choose what level of detail to show on the chart.</p>"
+msgstr "<p>Wählen Sie aus, welche Details Sie im Graphen anzeigen wollen.</p>"
+
+#: views/rc.cpp:35
+msgid "Current Forecast Method:"
+msgstr "Aktuelle Vorhersage-Methode:"
+
+#: views/rc.cpp:36
+msgid "method"
+msgstr "Methode"
+
+#: dialogs/settings/rc.cpp:32 views/rc.cpp:37
+msgid "History Forecast Method"
+msgstr "Historien-basierte Vorhersage-Methode"
+
+#: dialogs/settings/rc.cpp:33 views/rc.cpp:38
+msgid "Simple Moving Average"
+msgstr "Einfaches gleitendes Mittel"
+
+#: dialogs/settings/rc.cpp:34 views/rc.cpp:39
+msgid "Weighted Moving Average"
+msgstr "Gewichtetes gleitendes Mittel"
+
+#: dialogs/settings/rc.cpp:35 views/rc.cpp:40
+msgid "Linear Regression"
+msgstr "Lineare Regression"
+
+#: dialogs/keditloanwizard.cpp:315 dialogs/rc.cpp:628 dialogs/rc.cpp:647
+#: views/rc.cpp:43
+msgid "Summary"
+msgstr "Zusammenfassung"
+
+#: views/rc.cpp:45
+msgid "0 days"
+msgstr "0 Tage"
+
+#: views/rc.cpp:46
+msgid "30 days"
+msgstr "30 Tage"
+
+#: views/rc.cpp:47
+msgid "60 days"
+msgstr "60 Tage"
+
+#: views/rc.cpp:48
+msgid "90 days"
+msgstr "90 Tage"
+
+#: views/rc.cpp:49
+msgid "New Item"
+msgstr "Neuer Eintrag"
+
+#: views/rc.cpp:50 widgets/rc.cpp:64
+msgid "Detail"
+msgstr "Details"
+
+#: views/rc.cpp:51
+msgid "Advanced"
+msgstr "Erweitert"
+
+#: views/rc.cpp:52
+msgid "Budget Forecast"
+msgstr "Budget-Vorhersage"
+
+#: views/rc.cpp:55
+msgid "Investment Summary"
+msgstr "Depot-Übersicht"
+
+#: views/rc.cpp:56
+msgid "Select Account:"
+msgstr "Wähle Konto:"
+
+#: views/rc.cpp:57
+msgid ""
+"Summary of the equities contained in this account, showing your holdings and "
+"their most recent price."
+msgstr ""
+"Aufstellung der Aktien dieses Kontos, zeigt den aktuellen Bestand und den "
+"letzten Kurs."
+
+#: views/rc.cpp:60 widgets/register.cpp:564
+msgid "No."
+msgstr "Nr."
+
+#: views/rc.cpp:64
+msgid "Balance: "
+msgstr "Saldo: "
+
+#: views/rc.cpp:65
+msgid "Address"
+msgstr "Adresse"
+
+#: views/rc.cpp:66
+msgid "Payee Information"
+msgstr "Zahlungsempfänger Informationen"
+
+#: views/rc.cpp:67
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#: dialogs/rc.cpp:393 views/rc.cpp:69
+msgid "Telephone/Fax:"
+msgstr "Telefon/Fax:"
+
+#: views/rc.cpp:70
+msgid "Notes"
+msgstr "Notizen"
+
+#: views/rc.cpp:71
+msgid "Address:"
+msgstr "Adresse:"
+
+#: views/rc.cpp:72
+msgid "Matching"
+msgstr "Zuordnung"
+
+#: views/rc.cpp:73
+msgid "Transaction Matching"
+msgstr "Buchung Zuordnung"
+
+#: views/rc.cpp:74
+msgid "No matching"
+msgstr "Keine Zuordnung"
+
+#: views/rc.cpp:75
+msgid "Match on Payee name"
+msgstr "Nach Zahlungsempfänger zuordnen"
+
+#: views/rc.cpp:76
+msgid "Match on a name listed below"
+msgstr "Nach einem unten aufgelisteten Namen zuordnen"
+
+#: views/rc.cpp:77
+msgid "List of matching names"
+msgstr "Liste der passenden Namen"
+
+#: views/rc.cpp:78
+msgid ""
+"This list contains the names that will match this payee if a transaction is "
+"imported from an external source. Keep in mind, that you can specify regular "
+"expressions here."
+msgstr ""
+"Diese Liste enthält die Namen, die diesem Zahlungsempfänger zugeordnet "
+"werden, wenn eine Buchung von einer externen Quelle importiert wird. Sie "
+"können hier reguläre Ausdrücke verwenden."
+
+#: views/rc.cpp:79
+msgid "Ignore Case"
+msgstr "Groß/Klein ignorieren"
+
+#: views/rc.cpp:80
+msgid "Default Account"
+msgstr "Standard Konto"
+
+#: views/rc.cpp:81
+msgid ""
+"Use the default account for\n"
+"new transactions with this payee"
+msgstr "Nutze das Standard Konto für neue Buchungen mit diesem Empfänger"
+
+#: views/rc.cpp:82
+msgid "Default category:"
+msgstr "Standard Kategorie:"
+
+#: views/rc.cpp:83
+msgid "Suggest a category"
+msgstr "Schlage Kategorie vor"
+
+#: views/rc.cpp:85
+msgid "New Scheduled transaction..."
+msgstr "Geplante Buchung anlegen..."
+
+#: views/rc.cpp:86
+msgid "Filter Accounts"
+msgstr "Konten filtern"
+
+#: views/rc.cpp:87
+msgid "List View"
+msgstr "Listenansicht"
+
+#: views/rc.cpp:88
+msgid "Calendar View"
+msgstr "Kalenderansicht"
+
+#: views/kinstitutionsview.cpp:43
+msgid "Institution/Account"
+msgstr "Geldinstitut/Konto"
+
+#: views/kinstitutionsview.cpp:157
+msgid "Accounts with no institution assigned"
+msgstr "Konten ohne zugewiesene Geldinstitute"
+
+#: views/kscheduledview.cpp:70
+msgid "Type/Name"
+msgstr "Typ/Name"
+
+#: views/kscheduledview.cpp:75
+msgid "Frequency"
+msgstr "Häufigkeit"
+
+#: views/kscheduledview.cpp:157
+msgid "Unable to load accounts: "
+msgstr "Kann Konten nicht laden: "
+
+#: views/kscheduledview.cpp:171 views/kscheduledview.cpp:429
+#: views/kscheduledview.cpp:445 widgets/kmymoneyscheduledcalendar.cpp:46
+msgid "Bills"
+msgstr "Rechnungen"
+
+#: dialogs/rc.cpp:232 dialogs/rc.cpp:706 views/kscheduledview.cpp:172
+#: views/kscheduledview.cpp:431 views/kscheduledview.cpp:447
+#: widgets/kmymoneyscheduledcalendar.cpp:47
+msgid "Deposits"
+msgstr "Einzahlungen"
+
+#: views/kscheduledview.cpp:173 views/kscheduledview.cpp:435
+#: views/kscheduledview.cpp:451
+msgid "Loans"
+msgstr "Kredite"
+
+#: views/kscheduledview.cpp:357
+msgid "Error activating context menu"
+msgstr "Kann Kontextmenu nicht erstellen"
+
+#: views/kscheduledview.cpp:385
+msgid "Error executing item"
+msgstr "Kann Eintrag nicht ausführen"
+
+#: views/kscheduledview.cpp:419
+msgid "Unable to filter account"
+msgstr "Kann Konto nicht filtern"
+
+#: views/kgloballedgerview.cpp:508
+msgid "Statement Details"
+msgstr "Kontoauszug Details"
+
+#: views/kgloballedgerview.cpp:512
+msgid "Statement Deposit Details"
+msgstr "Kontoauszug Einzahlungsdetails"
+
+#: views/kgloballedgerview.cpp:513
+msgid "Statement Payment Details"
+msgstr "Kontoauszug Zahlungsdetails"
+
+#: views/kgloballedgerview.cpp:642
+msgid "%1 deposits (%3), %2 payments (%4)"
+msgstr "%1 Einzahlungen (%3), %2 Zahlungen (%4)"
+
+#: views/kgloballedgerview.cpp:649
+msgid "%1 payments (%2)"
+msgstr "%1 Zahlungen (%2)"
+
+#: views/kgloballedgerview.cpp:653
+msgid "%1 deposits (%2)"
+msgstr "%1 Einzahlungen (%2)"
+
+#: views/kgloballedgerview.cpp:721
+#, c-format
+msgid "Statement: %1"
+msgstr "Kontoauszug: %1"
+
+#: views/kgloballedgerview.cpp:722 views/kgloballedgerview.cpp:736
+#, c-format
+msgid "Cleared: %1"
+msgstr "Verrechnet: %1"
+
+#: views/kgloballedgerview.cpp:723
+#, c-format
+msgid "Difference: %1"
+msgstr "Differenz: %1"
+
+#: views/kgloballedgerview.cpp:730
+#, c-format
+msgid "Last reconciled: %1"
+msgstr "Zuletzt abgeglichen: %1"
+
+#: views/kgloballedgerview.cpp:732
+msgid "Never reconciled"
+msgstr "Nie abgeglichen"
+
+#: views/kgloballedgerview.cpp:772
+msgid "Investment value: %1%2"
+msgstr "Investition: %1%2"
+
+#: views/kgloballedgerview.cpp:1040
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to continue to edit the transactions anyway?"
+msgstr ""
+"Mindestens eine Split-Buchung der markierten Buchungen wurde bereits "
+"abgeglichen. Wollen Sie die Buchungen dennoch weiter bearbieten?"
+
+#: views/kgloballedgerview.cpp:1051
+msgid ""
+"At least one split of the selected transactions has been frozen. Editing the "
+"transactions is therefore prohibited."
+msgstr ""
+"Mindestens eine Split-Buchung dieser Buchungen wurde bereits eingefroren. "
+"Daher ist das Bearbeiten der Buchungen unzulässig."
+
+#: views/kgloballedgerview.cpp:1053
+msgid "Transaction already frozen"
+msgstr "Buchung bereits eingefroren"
+
+#: views/kgloballedgerview.cpp:1058
+msgid ""
+"At least one split of the selected transaction references an account that "
+"has been closed. Editing the transactions is therefore prohibited."
+msgstr ""
+"Mindestens ein Teil der gewählten Buchung verweist auf ein Konto, dass "
+"geschlossen wurde.Das Bearbeiten der Buchungen daher unzulässig."
+
+#: views/kgloballedgerview.cpp:1060
+msgid "Account closed"
+msgstr "Konto geschlossen"
+
+#: views/kgloballedgerview.cpp:1349
+msgid "Cannot create transactions when no account is selected."
+msgstr "Kann keine Buchungen erstellen, so lange kein Konto ausgewählt ist."
+
+#: views/kgloballedgerview.cpp:1354
+msgid "Cannot create transactions in the context of a category."
+msgstr "Kann im Kontext einer Kategorie keine Buchungen erstellen."
+
+#: views/kgloballedgerview.cpp:1358
+msgid "Cannot create transactions in a closed account."
+msgstr "Kann in einem geschlossenen Konto keine Buchungen erstellen."
+
+#: views/kgloballedgerview.cpp:1370
+msgid "Cannot process transaction with focus if it is not selected."
+msgstr "Kann Buchung mit Fokus nicht verarbeiten, wenn sie nicht ausgewählt ist."
+
+#: views/kgloballedgerview.cpp:1400
+msgid "Cannot edit transactions with frozen splits."
+msgstr "Eingefrorene Split-Buchungen können nicht verändert werden."
+
+#: views/kgloballedgerview.cpp:1411
+msgid "Cannot edit transactions in the context of a category."
+msgstr "Kann im Kontext einer Kategorie keine Buchungen ändern."
+
+#: views/kgloballedgerview.cpp:1430
+msgid "Cannot edit investment transactions and non-investment transactions together."
+msgstr "Kann Investitions- und Nichtinvestions-Buchungen nicht gemeinsam bearbeiten."
+
+#: views/kgloballedgerview.cpp:1438
+msgid "Cannot edit multiple split transactions at once."
+msgstr "Mehrere Split-Buchungen können nicht auf einmal editiert werden."
+
+#: views/kgloballedgerview.cpp:1448
+msgid "Cannot edit investment transactions in the context of this account."
+msgstr "Kann im Kontext dieses Kontos keine Investitionen bearbeiten."
+
+#: views/kforecastview.cpp:164
+msgid "Scheduled"
+msgstr "Geplant"
+
+#: views/kforecastview.cpp:169
+msgid "History"
+msgstr "Historie"
+
+#: views/kforecastview.cpp:296
+msgid "The balance of %2 is below the minimum balance %3 today."
+msgstr "Der aktuelle Saldo von %2 liegt heute unterhalb des Minimal-Saldo %3."
+
+#: views/kforecastview.cpp:301 views/khomeview.cpp:1043
+msgid "The balance of %1 will drop below the minimum balance %2 in %3 days."
+msgstr "Das Saldo von %1 wird in %3 Tagen unterhalb des Minimal-Saldos %2 fallen."
+
+#: views/kforecastview.cpp:318 views/khomeview.cpp:1059
+msgid "The balance of %1 is below %2 today."
+msgstr "Das Saldo von %1 ist heute unterhalb %2."
+
+#: views/kforecastview.cpp:323 views/khomeview.cpp:1064
+msgid "The balance of %1 is above %2 today."
+msgstr "Das Saldo von %1 ist heute oberhalb %2."
+
+#: views/kforecastview.cpp:330 views/khomeview.cpp:1070
+msgid "The balance of %1 will drop below %2 in %3 days."
+msgstr "Das Saldo von %1 wird in %3 Tagen unterhalb %2 fallen."
+
+#: views/kforecastview.cpp:335 views/khomeview.cpp:1075
+msgid "The balance of %1 will raise above %2 in %3 days."
+msgstr "Das Saldo von %1 wird in %3 Tagen über %2 steigen."
+
+#: views/kforecastview.cpp:348
+msgid "The account %1 is decreasing %2 per cycle."
+msgstr "Das Konto %1 verliert %2 pro Zyklus."
+
+#: views/kforecastview.cpp:404 widgets/kmymoneyaccounttreeforecast.cpp:114
+#, c-format
+msgid "Min Bal %1"
+msgstr "Minimal-Saldo %1"
+
+#: views/kforecastview.cpp:406 widgets/kmymoneyaccounttreeforecast.cpp:116
+#, c-format
+msgid "Min Date %1"
+msgstr "Minimal-Datum %1"
+
+#: views/kforecastview.cpp:409 widgets/kmymoneyaccounttreeforecast.cpp:119
+#, c-format
+msgid "Max Bal %1"
+msgstr "Maximal-Saldo %1"
+
+#: views/kforecastview.cpp:411 widgets/kmymoneyaccounttreeforecast.cpp:121
+#, c-format
+msgid "Max Date %1"
+msgstr "Maximal-Datum %1"
+
+#: views/kforecastview.cpp:413 widgets/kmymoneyaccounttreeforecast.cpp:123
+msgid "Average"
+msgstr "Mittelwert"
+
+#: views/kforecastview.cpp:649 views/khomeview.cpp:268 views/khomeview.cpp:275
+msgid "Networth Forecast"
+msgstr "Eigenkapital-Vorhersage"
+
+#: views/khomeview.cpp:203
+msgid "Your Financial Summary"
+msgstr "Ihre Finanzen in der Übersicht"
+
+#: views/khomeview.cpp:218
+msgid "Preferred Accounts"
+msgstr "Bevorzugte Konten"
+
+#: views/khomeview.cpp:225 views/khomeview.cpp:227
+msgid "Payment Accounts"
+msgstr "Zahlungskonten"
+
+#: views/khomeview.cpp:256
+msgid "Show KMyMoney welcome page"
+msgstr "Zeige KMyMoney-Willkommensseite an"
+
+#: views/khomeview.cpp:409
+msgid "Overdue payments"
+msgstr "Überfällige Zahlungen"
+
+#: views/khomeview.cpp:424 views/khomeview.cpp:497 views/khomeview.cpp:531
+msgid "Balance after"
+msgstr "Saldo nach"
+
+#: views/khomeview.cpp:482
+msgid "Today's payments"
+msgstr "Heutige Zahlungen"
+
+#: views/khomeview.cpp:516
+msgid "Future payments"
+msgstr "Zukünftige Zahlungen"
+
+#: views/khomeview.cpp:585
+msgid "Less..."
+msgstr "Weniger..."
+
+#: views/khomeview.cpp:587
+msgid "More..."
+msgstr "Mehr..."
+
+#: views/khomeview.cpp:622
+msgid "Enter schedule"
+msgstr "Buchung erfassen"
+
+#: views/khomeview.cpp:624
+msgid "Skip schedule"
+msgstr "Zahlung überspringen"
+
+#: views/khomeview.cpp:627
+msgid "Edit schedule"
+msgstr "Geplante Buchung ändern"
+
+#: views/khomeview.cpp:631
+msgid " (%1 payments)"
+msgstr " (%1 Zahlungen)"
+
+#: views/khomeview.cpp:771
+msgid "To Minimum Balance / Maximum Credit"
+msgstr "Zu Minimum-Saldo / Maximum-Kredit"
+
+#: views/khomeview.cpp:964
+msgid "%1 Day Forecast"
+msgstr "%1-Tage-Vorhersage"
+
+#: views/khomeview.cpp:973 widgets/kmymoneyaccounttreeforecast.cpp:67
+msgid "%1 days"
+msgstr "%1 Tage"
+
+#: views/khomeview.cpp:1039
+msgid "The balance of %1 is below the minimum balance %2 today."
+msgstr "Das aktuelle Saldo von %1 liegt heute unterhalb des Minimal-Saldo %2."
+
+#: views/khomeview.cpp:1175
+msgid ""
+"Before KMyMoney can give you detailed information about your financial "
+"status, you need to create at least one account. Until then, KMyMoney shows "
+"the welcome page instead."
+msgstr ""
+"Bevor KMyMoney detaillierte Auskünfte über Ihren Finanzstatus erteilen kann, "
+"müssen Sie mindestens ein Konto erstellen. Bis dahin wird KMyMoney die "
+"Willkommensseite anzeigen."
+
+#: views/khomeview.cpp:1258
+msgid "Assets and Liabilities Summary"
+msgstr "Übersicht Anlagen & Verbindlichkeiten"
+
+#: views/khomeview.cpp:1262
+msgid "Asset Accounts"
+msgstr "Anlagekonten"
+
+#: views/khomeview.cpp:1270
+msgid "Liability Accounts"
+msgstr "Verbindlichkeitskonten"
+
+#: views/khomeview.cpp:1348
+msgid "Total Assets"
+msgstr "Summe aller Anlagen"
+
+#: views/khomeview.cpp:1354
+msgid "Total Liabilities"
+msgstr "Summe aller Verbindlichkeiten"
+
+#: views/khomeview.cpp:1399
+msgid "Current Month Summary"
+msgstr "Übersicht Aktueller Monat"
+
+#: views/khomeview.cpp:1403 views/khomeview.cpp:1440
+msgid "Budgeted"
+msgstr "Budgetiert"
+
+#: views/khomeview.cpp:1433
+msgid "Budget Overruns"
+msgstr "Überzogene Budgets"
+
+#: views/khomeview.cpp:1502
+msgid "No Budget Categories have been overrun"
+msgstr "Keine Budget-Kategorien wurden überzogen"
+
+#: views/khomeview.cpp:1801
+msgid "Cash Flow Summary"
+msgstr "Übersicht Geldfluß"
+
+#: views/khomeview.cpp:1808
+msgid "Income and Expenses of Current Month"
+msgstr "Einnahmen und Ausgaben im aktuellen Monat"
+
+#: views/khomeview.cpp:1816
+msgid "Scheduled Income"
+msgstr "Geplante Einnahme"
+
+#: views/khomeview.cpp:1819
+msgid "Expenses"
+msgstr "Ausgaben"
+
+#: views/khomeview.cpp:1822
+msgid "Scheduled Expenses"
+msgstr "Geplante Ausgaben"
+
+#: views/khomeview.cpp:1850
+msgid "Liquid Assets and Liabilities"
+msgstr "Umlaufvermögen und -verbindlichkeiten"
+
+#: views/khomeview.cpp:1855
+msgid "Liquid Assets"
+msgstr "Umlaufvermögen"
+
+#: views/khomeview.cpp:1858
+msgid "Transfers to Liquid Liabilities"
+msgstr "Umbuchungen auf Umlaufverbindlichkeiten"
+
+#: views/khomeview.cpp:1861
+msgid "Liquid Liabilities"
+msgstr "Umlaufverbindlichkeiten"
+
+#: views/khomeview.cpp:1864
+msgid "Other Transfers"
+msgstr "Andere Umbuchungen"
+
+#: views/khomeview.cpp:1908
+msgid "Cash Flow Status"
+msgstr "Geldflußstatus"
+
+#: views/khomeview.cpp:1914
+msgid "Expected Liquid Assets"
+msgstr "Erwartetes Umlaufvermögen"
+
+#: views/khomeview.cpp:1917
+msgid "Expected Liquid Liabilities"
+msgstr "Erwartete Umlaufverbindlichkeiten"
+
+#: views/khomeview.cpp:1920
+msgid "Expected Profit/Loss"
+msgstr "Erwarteter Gewinn/Verlust"
+
+#: plugins/ofximport/ofximporterplugin.cpp:64
+msgid "OFX..."
+msgstr "OFX..."
+
+#: plugins/ofximport/ofximporterplugin.cpp:69
+msgid "OFX import file selection"
+msgstr "OFX Import Dateiauswahl"
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid ""
+"Unable to import %1 using the OFX importer plugin. This file is not the "
+"correct format."
+msgstr ""
+"Kann %1 nicht mit dem OFX Importierplugin importieren. Diese Datei hat "
+"nicht das richtige Format."
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid "Incorrect format"
+msgstr "Falsches Format"
+
+#: plugins/ofximport/ofximporterplugin.cpp:122
+msgid "Unable to parse file"
+msgstr "Kann Datei nicht einlesen"
+
+#: plugins/ofximport/ofximporterplugin.cpp:576
+msgid "Online settings"
+msgstr "Online Einstellungen"
+
+#: plugins/ofximport/ofximporterplugin.cpp:635
+#, c-format
+msgid "Error connecting to bank: %1"
+msgstr "Fehler beim Verbindungsaufbau mit der Bank: %1"
+
+#: plugins/ofximport/ofximporterplugin.cpp:646
+msgid ""
+"Unable to import %1 using the OFX importer plugin. The plugin returned the "
+"following error:<p>%2"
+msgstr ""
+"Kann %1 nicht mit dem OFX Importierplugin einlesen. Das Plugin liefert den "
+"folgenden Fehler:<p> %2"
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Importing process terminated unexpectedly."
+msgstr "Importprozess unvorhergesehen abgebrochen."
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Failed to import all statements."
+msgstr "Fehler beim Import aller Kontoauszüge."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "The HTTP request failed."
+msgstr "Die HTTP-Anfrage ist fehlgeschlagen."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "Failed"
+msgstr "Fehlgeschlagen"
+
+#: plugins/ofximport/ofxpartner.cpp:410
+msgid "Cannot open file %1 for writing"
+msgstr "Datei '%1' kann nicht zum Schreiben geöffnet werden"
+
+#: plugins/ofximport/ofxpartner.cpp:414
+msgid "OFX setup error"
+msgstr "OFX Einrichtungsfehler"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid "Loading banklist"
+msgstr "Lade Liste der Banken"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid ""
+"Getting list of banks from http://moneycentral.msn.com/\n"
+"This may take some time depending on the available bandwidth."
+msgstr ""
+"Lade Liste der Banken von http://moneycentral.msn.com/\n"
+"Dies kann in Abhängigkeit von der verfügbaren Bandbreite eine Weile dauern."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:155
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:199
+msgid "Supports online statements<br>"
+msgstr "Unterstützt Online-Bankauszüge<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:157
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:201
+msgid "Supports investments<br>"
+msgstr "Unterstützt Investments<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:159
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:203
+msgid "Supports bill payment (but not supported by KMyMoney yet)<br>"
+msgstr "Unterstützt Überweisung (noch nicht unterstützt von KMyMoney)<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:163
+msgid "Does not support online banking</p>"
+msgstr "Unterstützt kein Online-Banking</p>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:173
+msgid "Please choose a bank."
+msgstr "Bitte ein Bank auswählen."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:179
+msgid "Please fill all fields with values."
+msgstr "Bitte füllen Sie alle Felder aus."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:271
+msgid "No suitable accounts were found at this bank."
+msgstr "Bei dieser Bank konnten keine geeigneten Konten gefunden werden."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:283
+msgid "Please choose an account"
+msgstr "Bitte wählen Sie ein Konto"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:386
+msgid "Server message: %1\n"
+msgstr "Server-Nachricht: %1\n"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+msgid "Your bank returned warnings when signing on"
+msgstr "Ihre Bank gab beim Verbindungsaufbau Warnungen zurück"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+#, c-format
+msgid "WARNING %1"
+msgstr "WARNUNG %1"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+msgid "Error signing onto your bank"
+msgstr "Fehler beim Verbindungsaufbau mit ihrer Bank"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, c-format
+msgid "ERROR %1"
+msgstr "Fehler %1"
+
+#: plugins/ofximport/dialogs/konlinebankingstatus.cpp:59
+msgid "Enabled & configured"
+msgstr "Eingeschaltet & konfiguriert"
+
+#: plugins/ofximport/dialogs/rc.cpp:1
+msgid "OFX Direct Connect"
+msgstr "OFX Direct Connect"
+
+#: plugins/ofximport/dialogs/rc.cpp:2
+msgid "Contacting bank..."
+msgstr "Kontaktiere Bank..."
+
+#: plugins/ofximport/dialogs/rc.cpp:4
+msgid "Online Banking Account Setup"
+msgstr "Einrichtung des Online-Bankings für ein Konto"
+
+#: plugins/ofximport/dialogs/rc.cpp:5
+msgid "Select Financial Institution"
+msgstr "Geldinstitut wählen"
+
+#: plugins/ofximport/dialogs/rc.cpp:6
+msgid "Please select your financial institution from the list below..."
+msgstr "Bitte ihr Geldinstitut aus der folgenden Liste wählen..."
+
+#: plugins/ofximport/dialogs/rc.cpp:7
+msgid "Automatic"
+msgstr "Automatisch"
+
+#: plugins/ofximport/dialogs/rc.cpp:8
+msgid "Financial Institution"
+msgstr "Geldinstitut"
+
+#: plugins/ofximport/dialogs/rc.cpp:9
+msgid "Manual"
+msgstr "Manuell"
+
+#: plugins/ofximport/dialogs/rc.cpp:10
+msgid "Org"
+msgstr "Org"
+
+#: plugins/ofximport/dialogs/rc.cpp:11
+msgid "FID"
+msgstr "FID"
+
+#: dialogs/settings/rc.cpp:120 plugins/ofximport/dialogs/rc.cpp:12
+#: widgets/rc.cpp:46
+msgid "URL"
+msgstr "URL"
+
+#: plugins/ofximport/dialogs/rc.cpp:13
+msgid "Enter Login Details"
+msgstr "Anmeldedetails"
+
+#: plugins/ofximport/dialogs/rc.cpp:14
+msgid ""
+"Please enter the username and password you use to log into this bank for "
+"online banking. Please note that many banks require a separate signup, and "
+"assign a separate PIN or password just for online banking from home."
+msgstr ""
+"Bitte Nutzernamen und Password eingeben, welches für das Online-Banking-"
+"Login bei dieser Bank notwendig ist. Bitte beachten, dass viele Banken eine "
+"separate Anmeldung erfordern und eine separate PIN und Passwort für den "
+"Online-Zugriff zuweisen."
+
+#: plugins/ofximport/dialogs/rc.cpp:15
+msgid "Connection Details"
+msgstr "Verbindungsdetails"
+
+#: plugins/ofximport/dialogs/rc.cpp:16
+msgid "Username"
+msgstr "Benutzername"
+
+#: plugins/ofximport/dialogs/rc.cpp:17 plugins/ofximport/dialogs/rc.cpp:36
+msgid "Header Version"
+msgstr "Header Version"
+
+#: plugins/ofximport/dialogs/rc.cpp:18 plugins/ofximport/dialogs/rc.cpp:37
+msgid "Identify as"
+msgstr "Identifizieren als"
+
+#: dialogs/rc.cpp:742 plugins/ofximport/dialogs/rc.cpp:19
+msgid "Password"
+msgstr "Passwort"
+
+#: plugins/ofximport/dialogs/rc.cpp:20
+msgid "Select Account"
+msgstr "Wähle Konto"
+
+#: plugins/ofximport/dialogs/rc.cpp:21
+msgid ""
+"Please select the account from your financial institution from the list "
+"below which matches this account."
+msgstr ""
+"Bitte das Konto ihres Geldinstitutes aus der folgenden Liste wählen, welches "
+"diesem Konto entspricht."
+
+#: plugins/ofximport/dialogs/rc.cpp:24
+msgid "Bank"
+msgstr "Bank"
+
+#: plugins/ofximport/dialogs/rc.cpp:25
+msgid "Branch"
+msgstr "Zweig"
+
+#: plugins/ofximport/dialogs/rc.cpp:26
+msgid "WizardPage"
+msgstr "Wizard-Seite"
+
+#: plugins/ofximport/dialogs/rc.cpp:27
+msgid ""
+"Congratulations! You have successfully set up your bank for online banking "
+"via OFX."
+msgstr ""
+"Glückwunsch! Sie haben ihre Bank für Online-Banking via OFX erfolgreich "
+"eingerichtet."
+
+#: plugins/ofximport/dialogs/rc.cpp:28
+msgid "Account Details"
+msgstr "Kontenangaben"
+
+#: plugins/ofximport/dialogs/rc.cpp:29 plugins/ofximport/dialogs/rc.cpp:31
+msgid "&lt;Not configured&gt;"
+msgstr "&lt;Nicht konfiguriert&gt;"
+
+#: plugins/ofximport/dialogs/rc.cpp:30
+msgid "BANK/BROKER:"
+msgstr "BANK/BROKER:"
+
+#: plugins/ofximport/dialogs/rc.cpp:32
+msgid "Unavailable"
+msgstr "Nicht verfügbar"
+
+#: plugins/ofximport/dialogs/rc.cpp:33
+msgid "ACCOUNT:"
+msgstr "KONTO:"
+
+#: plugins/ofximport/dialogs/rc.cpp:34
+msgid "STATUS:"
+msgstr "STATUS:"
+
+#: plugins/ofximport/dialogs/rc.cpp:35
+msgid "OFX Details"
+msgstr "OFX Details"
+
+#: plugins/ofximport/dialogs/rc.cpp:38
+msgid "Start date of import"
+msgstr "Anfangsdatum des Kontoauszuges"
+
+#: plugins/ofximport/dialogs/rc.cpp:39
+msgid "To&day minus"
+msgstr "Tage zurück"
+
+#: plugins/ofximport/dialogs/rc.cpp:40
+msgid "days"
+msgstr "Tage"
+
+#: plugins/ofximport/dialogs/rc.cpp:41
+msgid "Last &update"
+msgstr "Letzte Aktualisierung"
+
+#: plugins/ofximport/dialogs/rc.cpp:42
+msgid "Pi&ck date"
+msgstr "Beliebiges Datum"
+
+#: plugins/ofximport/dialogs/rc.cpp:43
+msgid "Name is derived from"
+msgstr "Name wird ermittelt aus"
+
+#: plugins/ofximport/dialogs/rc.cpp:44
+msgid "P&AYEEID"
+msgstr "PAYEEID"
+
+#: plugins/ofximport/dialogs/rc.cpp:45
+msgid "&NAME"
+msgstr "NAME"
+
+#: plugins/ofximport/dialogs/rc.cpp:46
+msgid "field if both are present in download"
+msgstr "wenn beide Felder vorhanden sind"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:81
+msgid "Quicken Windows 2003"
+msgstr "Quicken Windows 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:82
+msgid "Quicken Windows 2004"
+msgstr "Quicken Windows 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:83
+msgid "Quicken Windows 2005"
+msgstr "Quicken Windows 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:84
+msgid "Quicken Windows 2006"
+msgstr "Quicken Windows 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:85
+msgid "Quicken Windows 2007"
+msgstr "Quicken Windows 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:86
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:111
+msgid "Quicken Windows 2008"
+msgstr "Quicken Windows 2008"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:89
+msgid "MS-Money 2003"
+msgstr "MS-Money 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:90
+msgid "MS-Money 2004"
+msgstr "MS-Money 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:91
+msgid "MS-Money 2005"
+msgstr "MS-Money 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:92
+msgid "MS-Money 2006"
+msgstr "MS-Money 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:93
+msgid "MS-Money 2007"
+msgstr "MS-Money 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:94
+msgid "MS-Money Plus"
+msgstr "MS-Money Plus"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:91
+msgid "Report Configuration"
+msgstr "Bericht konfigurieren"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:117
+#: dialogs/kreportconfigurationfilterdlg.cpp:135
+msgid "Rows/Columns"
+msgstr "Zeilen/Spalten"
+
+#: dialogs/investtransactioneditor.cpp:203
+#: dialogs/investtransactioneditor.cpp:537
+#: dialogs/investtransactioneditor.cpp:579 dialogs/rc.cpp:103
+#: dialogs/rc.cpp:158 dialogs/rc.cpp:245 dialogs/rc.cpp:750 dialogs/rc.cpp:794
+#: widgets/kmymoneyaccountselector.cpp:182 widgets/register.cpp:64
+#: widgets/register.cpp:567 widgets/transaction.cpp:1500
+msgid "Security"
+msgstr "Wertpapier"
+
+#: dialogs/investtransactioneditor.cpp:211
+msgid "Asset account"
+msgstr "Anlagekonten"
+
+#: dialogs/investtransactioneditor.cpp:1073
+msgid "Price/Share"
+msgstr "Preis pro Aktie"
+
+#: dialogs/kmergetransactionsdlg.cpp:39
+msgid "Merge Transactions"
+msgstr "Buchungen zusammenführen"
+
+#: dialogs/kmergetransactionsdlg.cpp:40
+msgid "Are you sure you wish to merge these transactions?"
+msgstr "Sind Sie sicher, dass Sie diese Buchungen zusammenführen wollen?"
+
+#: dialogs/kstartdlg.cpp:59
+msgid "Start Dialog"
+msgstr "Anfangsdialog"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Templates"
+msgstr "Vorlagen"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Select templates"
+msgstr "Vorlage Auswählen"
+
+#: dialogs/kstartdlg.cpp:80 dialogs/kstartdlg.cpp:119
+msgid "New KMyMoney document"
+msgstr "Neues KMyMoney Dokument"
+
+#: dialogs/kstartdlg.cpp:90
+msgid "Open a KMyMoney document"
+msgstr "Ein KMyMoney Dokument öffnen"
+
+#: dialogs/kstartdlg.cpp:96
+msgid ""
+"%1|KMyMoney files (*.kmy)\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|KMyMoney Dokumente (*.kmy)\n"
+"%2|Alle Dateien (*.*)"
+
+#: dialogs/kstartdlg.cpp:102
+msgid "Recent Files"
+msgstr "Zuletzt geöffnete Dokumente"
+
+#: dialogs/kstartdlg.cpp:217
+msgid "Blank Document"
+msgstr "Leeres Dokument"
+
+#: dialogs/knewbudgetdlg.cpp:71
+msgid "Please specify a budget name"
+msgstr "Bitte einen Budget-Namen angeben"
+
+#: dialogs/kgncpricesourcedlg.cpp:48
+#, c-format
+msgid "Investment: %1"
+msgstr "Investition: %1"
+
+#: dialogs/kgncpricesourcedlg.cpp:49
+#, c-format
+msgid "Quote source: %1"
+msgstr "Quelle für Kursnotiz: %1"
+
+#: dialogs/kmymoneypricedlg.cpp:62 dialogs/ksecuritylisteditor.cpp:69
+msgid "Delete this entry"
+msgstr "Diesen Eintrag löschen"
+
+#: dialogs/ksecuritylisteditor.cpp:70
+msgid "Remove this security item from the file"
+msgstr "Entferne dieses Wertpapier aus der Datei"
+
+#: dialogs/ksecuritylisteditor.cpp:73
+msgid "&Add"
+msgstr "&Hinzufügen"
+
+#: dialogs/kmymoneypricedlg.cpp:68 dialogs/ksecuritylisteditor.cpp:75
+msgid "Add a new entry"
+msgstr "Neuen Eintrag hinzufügen"
+
+#: dialogs/ksecuritylisteditor.cpp:76
+msgid "Create a new security entry."
+msgstr "Einen neuen Wertpapiereintrag erstellen."
+
+#: dialogs/keditequityentrydlg.cpp:77 dialogs/kmymoneypricedlg.cpp:74
+#: dialogs/ksecuritylisteditor.cpp:81
+msgid "Modify the selected entry"
+msgstr "Gewählten Eintrag bearbeiten"
+
+#: dialogs/ksecuritylisteditor.cpp:82
+msgid "Change the security information of the selected entry."
+msgstr "Ändere die Wertpapierinformationen des ausgewählten Eintrags."
+
+#: dialogs/kmymoneypricedlg.cpp:80 dialogs/ksecuritylisteditor.cpp:87
+msgid "Close the dialog"
+msgstr "Dialog schließen "
+
+#: dialogs/kmymoneypricedlg.cpp:81 dialogs/ksecuritylisteditor.cpp:88
+msgid "Use this to close the dialog and return to the application."
+msgstr "Schließt den Dialog und kehrt zur Anwendung zurück."
+
+#: dialogs/ksecuritylisteditor.cpp:184
+msgid ""
+"Do you really want to remove the currency <b>%1</b> from the file?</"
+"p><i>Note: It is currently not supported to add currencies.</i>"
+msgstr ""
+"Wollen Sie wirklich die Währung <b>%1</b> aus der Datei entfernen?</"
+"p><i>Hinweis: Es ist momentan nicht unterstützt neue Währungen hinzuzufügen."
+"</i>"
+
+#: dialogs/ksecuritylisteditor.cpp:187
+msgid "Do you really want to remove the %1 <b>%2</b> from the file?"
+msgstr "Soll %1 <b>%2</b> wirklich aus der Datei gelöscht werden?"
+
+#: dialogs/ksecuritylisteditor.cpp:190
+msgid "Delete security"
+msgstr "Wertpapier entfernen"
+
+#: dialogs/kmymoneypricedlg.cpp:63
+msgid "Remove this price item from the file"
+msgstr "Diesen Kurseintrag aus der Datei löschen"
+
+#: dialogs/kmymoneypricedlg.cpp:66 dialogs/mymoneyqifprofileeditor.cpp:94
+msgid "&New"
+msgstr "&Neu"
+
+#: dialogs/kmymoneypricedlg.cpp:69
+msgid "Create a new price entry."
+msgstr "Neuen Kurseintrag erstellen."
+
+#: dialogs/kmymoneypricedlg.cpp:75
+msgid "Change the details of selected price information."
+msgstr "Änderung von Details der ausgewählten Preisinformationen."
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Do you really want to delete the selected price entry?"
+msgstr "Möchten Sie wirklich den gewählten Preiseintrag löschen?"
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Delete price information"
+msgstr "Preisinformation löschen"
+
+#: dialogs/kchooseimportexportdlg.cpp:46
+msgid ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Bitte wählen Sie die Art des gewünschten Imports aus. Eine kurze "
+"Beschreibung\n"
+"über die jeweilige Art ist im unteren Fensterbereich zu sehen und wird "
+"aktualisiert,\n"
+"wenn Sie die Auswahl ändern.\n"
+"\n"
+"Sobald Sie die gewünschte Art ausgewählt haben, drücken Sie OK."
+
+#: dialogs/kchooseimportexportdlg.cpp:50 dialogs/rc.cpp:22
+msgid "Choose import type:"
+msgstr "Art des Imports auswählen:"
+
+#: dialogs/kchooseimportexportdlg.cpp:51 dialogs/rc.cpp:20
+msgid "Choose Import Type Dialog"
+msgstr "Dialog zur Auswahl der Importart"
+
+#: dialogs/kchooseimportexportdlg.cpp:53
+msgid ""
+"Please choose the type of export you wish to perform. A simple explanation\n"
+"of the export type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an export type please press the OK button."
+msgstr ""
+"Bitte wählen Sie die Art des gewünschten Exports aus. Eine kurze "
+"Beschreibung über\n"
+"die jeweilige Art ist im unteren Fensterbereich zu sehen und wird "
+"aktualisiert,\n"
+"wenn Sie die Auswahl ändern.\n"
+"\n"
+"Sobald Sie die gewünschte Art ausgewählt haben, drücken Sie OK."
+
+#: dialogs/kchooseimportexportdlg.cpp:57
+msgid "Choose export type:"
+msgstr "Art des Exports wählen:"
+
+#: dialogs/kchooseimportexportdlg.cpp:58
+msgid "Choose Export Type Dialog"
+msgstr "Dialog zur Auswahl der Exportart"
+
+#: dialogs/kchooseimportexportdlg.cpp:78
+msgid ""
+"QIF files are created by the popular accounting program Quicken.\n"
+"Another dialog will appear, if you choose this type, asking for further\n"
+"information relevant to the Quicken format."
+msgstr ""
+"QIF-Dateien werden mit dem bekannten Kontoprogramm Quicken erstellt.\n"
+"Wenn Sie diesen Typ wählen, wird ein weiteres Dialogfenster erscheinen, in "
+"dem Sie weitere Informationen für das Quicken-Format einstellen können."
+
+#: dialogs/kchooseimportexportdlg.cpp:82
+msgid ""
+"The CSV type uses a comma delimeted text file that can be used by\n"
+"most popular spreadsheet programs available for Linux and other operating\n"
+"systems."
+msgstr ""
+"Der CSV-Typ verwendet ein durch Komma getrenntes Textformat, dass\n"
+"mit bekannten Tabellenkalkulationsprogrammen verwendet werden kann."
+
+#: dialogs/kequitypriceupdatedlg.cpp:222
+msgid "%1 units in %2"
+msgstr "%1 Einheiten in %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid ""
+"Failed to retrieve an exchange rate for %1 from %2. It will be skipped this "
+"time."
+msgstr ""
+"Fehler beim Aktualisieren der Preisinformation für %1 von %2. Die "
+"Aktualisierung wird diesmal ausgelassen."
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid "Price Update Failed"
+msgstr "Preisaktualisierung fehlgeschlagen"
+
+#: dialogs/kequitypriceupdatedlg.cpp:427
+msgid ""
+"Failed to retrieve a quote for %1 from %2. Press <b>No</b> to remove the "
+"online price source from this security permanently, <b>Yes</b> to continue "
+"updating this security during future price updates or <b>Cancel</b> to stop "
+"the current update operation."
+msgstr ""
+"Fehlschlag beim Abfragen des Kurses für %1 von %2. Wählen Sie <b>Nein</b>, "
+"um diese Quelle der Online-Kursabfrage von diesem Wertpapier dauerhaft zu "
+"entfernen, <b>Ja</b>, um mit dem Aktualisieren dieses Wertpapiers bei "
+"zukünftigen Preisabfragen fortzufahren, oder <b>Abbrechen</b>, um die "
+"aktuelle Abfrageoperation beenden."
+
+#: dialogs/kequitypriceupdatedlg.cpp:427 dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Price Update Failed"
+msgstr "Preisaktualisierung fehlgeschlagen"
+
+#: dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Cannot update security <b>%1</b>: %2"
+msgstr "Kann Bonität nicht aktualisieren <b>%1</b>: %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:528
+msgid "Price for %1 updated (id %2)"
+msgstr "Preis für %1 aktualisiert (id %2)"
+
+#: dialogs/kequitypriceupdatedlg.cpp:534
+msgid "Received an invalid price for %1, unable to update."
+msgstr "Aktualisierung nicht möglich, da der Preis für %1 nicht gültig ist."
+
+#: dialogs/kequitypriceupdatedlg.cpp:554
+msgid ""
+"Received a price for %1 (id %2), but this symbol is not on the list! "
+"Aborting entire update."
+msgstr ""
+"Ein Preis für %1 (id %2) wurde empfangen, dieses Symbol ist aber nicht in "
+"der Liste! Abbruch der kompletten Aktualisierung."
+
+#: dialogs/transactioneditor.cpp:222
+msgid ""
+"The number <b>%1</b> has already been used in account <b>%2</b>. Do you want "
+"to replace it with the next available number?"
+msgstr ""
+"Die Nummer <b>%1</b> wurde bereits in Konto <b>%2</b> genutzt. Möchten Sie "
+"sie mit der nächsten verfügbaren Nummer ersetzen?"
+
+#: dialogs/transactioneditor.cpp:222
+msgid "Duplicate number"
+msgstr "Dupliziere Nummer"
+
+#: dialogs/transactioneditor.cpp:303
+msgid ""
+"This transaction has more than two splits and is based on a different "
+"currency (%1). Using this account to modify the transaction is currently not "
+"very well supported by KMyMoney and may result in false results."
+msgstr ""
+"Diese Buchung hat mehr als zwei Split-Buchungen und basiert auf einer "
+"anderen Währung (%1). Die Benutzung dieses Kontos für die Änderung der "
+"Buchung wird durch KMyMoney noch nicht vernünftig unterstützt und kann zu "
+"falschen Ergebnissen führen."
+
+#: dialogs/transactioneditor.cpp:305
+msgid ""
+"KMyMoney was not able to find a more appropriate account to edit this "
+"transaction. Nevertheless, you are allowed to modify the transaction. If you "
+"don't want to edit this transaction, please cancel from editing next."
+msgstr ""
+"KMyMoney kann kein geeigneteres Konto für diese Buchung finden. Sie können "
+"diese Buchung trotzdem ändern. Wenn Sie diese Buchung lieber nicht ändern "
+"möchten, drücken Sie bitte Abbrechen."
+
+#: dialogs/transactioneditor.cpp:307
+msgid ""
+"Using e.g. <b>%1</b> to edit this transaction is a better choice. "
+"Nevertheless, you are allowed to modify the transaction. If you want to use "
+"the suggested account instead, please cancel from editing next and change "
+"the view to the suggested account."
+msgstr ""
+"Die Benutzung von z.B. <b>%1</b> ist eine bessere Wahl, um diese Buchung zu "
+"bearbeiten. Sie können diese Buchung trotzdem bearbeiten. Wenn Sie "
+"stattdessen lieber das empfohlene Konto benutzen möchten, drücken Sie "
+"Abbrechen und wechseln Sie zur Ansicht des empfohlenen Kontos."
+
+#: dialogs/transactioneditor.cpp:410
+msgid ""
+"This transaction has more than two splits and is originally based on a "
+"different currency (%1). Using this account to modify the transaction may "
+"result in rounding errors. Do you want to continue?"
+msgstr ""
+"Diese Buchung hat mehr als zwei Split-Buchungen und basiert auf einer "
+"anderen Währung (%1). Die Benutzung dieses Kontos für die Änderung der "
+"Buchung kann zu Rundungsfehlern führen. Wollen Sie fortfahren?"
+
+#: dialogs/transactioneditor.cpp:412
+msgid ""
+"At least one of the selected transactions has more than two splits and is "
+"originally based on a different currency (%1). Using this account to modify "
+"the transactions may result in rounding errors. Do you want to continue?"
+msgstr ""
+"Diese Buchung hat mehr als zwei Split-Buchungen und basiert auf einer "
+"anderen Währung (%1). Die Benutzung dieses Kontos für die Änderung der "
+"Buchung kann zu Rundungsfehlern führen. Wollen Sie fortfahren?"
+
+#: dialogs/transactioneditor.cpp:557
+msgid "Storing transactions"
+msgstr "Buchungen werden hinzufügt"
+
+#: dialogs/transactioneditor.cpp:603 widgets/kmymoneybriefschedule.cpp:65
+msgid "&Enter"
+msgstr "&Eintragen"
+
+#: dialogs/transactioneditor.cpp:606
+msgid "Use this to enter the transaction into the ledger."
+msgstr "Nehmen Sie hiermit die Buchung in das Kontobuch auf."
+
+#: dialogs/transactioneditor.cpp:607
+msgid "&Schedule"
+msgstr "&Planung"
+
+#: dialogs/transactioneditor.cpp:609
+msgid "Accepts the entered data and stores it as schedule"
+msgstr "Akzeptiert die eingegebenen Daten und speichert sie als geplante Buchung"
+
+#: dialogs/transactioneditor.cpp:610
+msgid "Use this to schedule the transaction for later entry into the ledger."
+msgstr ""
+"Drücken, um die Buchung für einen späteren Eintrag in das Kontobuch "
+"vorzusehen."
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"The transaction you are about to enter has a post date in the future.<br/"
+"><br/>Do you want to enter it in the ledger or add it to the schedules?"
+msgstr ""
+"Die eingetragene Buchung hat eine Datum in der Zukunft.<br/><br/>Soll sie im "
+"Kontobuch eingetragen werden, oder zu geplanten Buchungen hinzugefügt werden?"
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"_: Dialog caption for 'Enter or schedule' dialog\n"
+"Enter or schedule?"
+msgstr "Eingeben oder planen?"
+
+#: dialogs/transactioneditor.cpp:671
+msgid "The balance of account <b>%1</b> dropped below the warning balance of %2."
+msgstr "Das Saldo des Kontos <b>%1</b> fiel unter die Saldo-Warnung von %2."
+
+#: dialogs/transactioneditor.cpp:677
+msgid "The balance of account <b>%1</b> dropped below the minimum balance of %2."
+msgstr "Das Saldo des Kontos <b>%1</b> fiel unter die minimale Saldo-Warnung von %2."
+
+#: dialogs/transactioneditor.cpp:683
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit warning "
+"limit of %2."
+msgstr "Das Saldo des Kontos <b>%1</b> fiel unter das maximale Kredit-Limit von %2."
+
+#: dialogs/transactioneditor.cpp:689
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit limit of %"
+"2."
+msgstr "Das Saldo des Kontos <b>%1</b> fiel unter das maximale Kredit-Limit von %2."
+
+#: dialogs/transactioneditor.cpp:740
+msgid "Payer/Receiver"
+msgstr "Zahler/Empfänger"
+
+#: dialogs/transactioneditor.cpp:748
+msgid "Category/Account"
+msgstr "Kategorie/Konto"
+
+#: dialogs/transactioneditor.cpp:980 dialogs/transactioneditor.cpp:1016
+#: dialogs/transactioneditor.cpp:1378 dialogs/transactioneditor.cpp:1399
+#: dialogs/transactioneditor.cpp:1422 dialogs/transactioneditor.cpp:1443
+#: dialogs/transactioneditor.cpp:1505 dialogs/transactioneditor.cpp:1509
+#: widgets/transaction.cpp:902
+msgid "Transfer from"
+msgstr "Umbuchung von"
+
+#: dialogs/transactioneditor.cpp:982 dialogs/transactioneditor.cpp:1018
+#: dialogs/transactioneditor.cpp:1401 dialogs/transactioneditor.cpp:1445
+#: dialogs/transactioneditor.cpp:1506 widgets/transaction.cpp:902
+msgid "Transfer to"
+msgstr "Umbuchung auf"
+
+#: dialogs/transactioneditor.cpp:1259
+msgid "Select autofill transaction"
+msgstr "Autofill-Buchung auswählen"
+
+#: dialogs/transactionmatcher.cpp:77
+msgid "First transaction does not match requirement for matching"
+msgstr "Erste Buchung erfüllt die Anforderungen für eine Zuordnung nicht"
+
+#: dialogs/transactionmatcher.cpp:79
+msgid "Second transaction does not match requirement for matching"
+msgstr "Zweite Buchung erfüllt die Anforderungen für eine Zuordnung nicht"
+
+#: dialogs/transactionmatcher.cpp:83 dialogs/transactionmatcher.cpp:133
+msgid "Splits for %1 have conflicting values (%2,%3)"
+msgstr "Werte der Split-Buchungen für %1 sind im Konflikt (%2,%3)"
+
+#: dialogs/transactionmatcher.cpp:96 dialogs/transactionmatcher.cpp:149
+msgid ""
+"Both of these transactions have been imported into %1. Therefore they "
+"cannot be matched. Matching works with one imported transaction and one non-"
+"imported transaction."
+msgstr ""
+"Diese beiden Buchungen wurden in %1 importiert. Daher können sie nicht "
+"einander zugeordnet werden. Zuordnung funktioniert nur bei einer "
+"importierten und einer nicht-importierten Buchung."
+
+#: dialogs/transactionmatcher.cpp:101 dialogs/transactionmatcher.cpp:156
+msgid "Unable to match all splits (%1)"
+msgstr "Kann nicht alle Split-Buchungen zuordnen (%1)"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:65
+msgid "Account and transfer account are the same. Please change one."
+msgstr ""
+"Konto und Buchungskonto sind identisch. Bitte ändern Sie die Auswahl für "
+"eines der beiden Konten."
+
+#: dialogs/kconfirmmanualenterdlg.cpp:84
+msgid "Payee changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Zahlungsempfänger geändert.<br>&nbsp;&nbsp;&nbsp;Alt: <b>%1</b>, Neu: <b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:92
+#: dialogs/kconfirmmanualenterdlg.cpp:100
+msgid "Account changed. Old: \"%1\", New: \"%2\""
+msgstr "Konto geändert. Alt: \"%1\", Neu: \"%2\""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:107
+msgid "Account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "Konto geändert.<br>&nbsp;&nbsp;&nbsp;Alt: <b>%1</b>, Neu: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:115
+msgid ""
+"Transfer account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</"
+"b><p>"
+msgstr "Gegenkonto geändert.<br>&nbsp;&nbsp;&nbsp;Alt: <b>%1</b>, Neu: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:143
+msgid "Category changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "Kategorie geändert.<br>&nbsp;&nbsp;&nbsp;Alt: <b>%1</b>, Neu: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:151
+#: dialogs/kconfirmmanualenterdlg.cpp:153
+msgid "empty"
+msgstr "leer"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:157
+msgid "Memo changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "Notiz geändert.<br>&nbsp;&nbsp;&nbsp;Alt: <b>%1</b>, Neu: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:166
+msgid "Amount changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "Betrag geändert.<br>&nbsp;&nbsp;&nbsp;Alt: <b>%1</b>, Neu: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:175
+msgid ""
+"Reconciliation flag changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%"
+"2</b><p>"
+msgstr ""
+"Abgleichstatus geändert.<br>&nbsp;&nbsp;&nbsp;Alt: <b>%1</b>, Neu: <b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:182
+msgid "Fatal error in determining data: "
+msgstr "Schwerwiegender Fehler beim Bestimmen der Daten: "
+
+#: dialogs/kselectdatabasedlg.cpp:56
+msgid ""
+"There are no Qt SQL drivers installed in your system.\n"
+"Please consult documentation for your distro, or visit the Qt web site (www."
+"trolltech.com) and search for SQL drivers."
+msgstr ""
+"Es sind keine Qt-SQL-Treiber in ihrem System verfügbar.\n"
+"Bitte die Dokumentation der Distribution oder die Qt-Website (www.trolltech."
+"com) konsultieren und nach SQL-Treibern suchen."
+
+#: dialogs/kselectdatabasedlg.cpp:100
+msgid "Qt SQL driver %1 is no longer installed on your system"
+msgstr "Der Qt-SQL Treiber %1 ist nicht mehr auf Ihrem System installiert."
+
+#: dialogs/kselectdatabasedlg.cpp:107
+msgid "Qt SQL driver %1 is not suported"
+msgstr "Det Qt-SQL Treiber %1 wird nicht unterstützt"
+
+#: dialogs/kselectdatabasedlg.cpp:164
+msgid "SQLite files (*.sql);; All files (*.*)"
+msgstr "SQLite Dateien (*.sql);; Alle Dateien (*.*) "
+
+#: dialogs/kselectdatabasedlg.cpp:167
+msgid "Select SQLite file"
+msgstr "SQLite Datei auswählen"
+
+#: dialogs/kselectdatabasedlg.cpp:188
+msgid "All files (*.*)"
+msgstr "Alle Dateien (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:191
+msgid "Select output file"
+msgstr "Ausgabedateinamen wählen"
+
+#: dialogs/investactivities.cpp:168
+msgid "%1 (Brokerage)"
+msgstr "%1 (Verrechnungskonto)"
+
+#: dialogs/investactivities.cpp:200 dialogs/investactivities.cpp:288
+#: dialogs/investactivities.cpp:425 widgets/transaction.cpp:1548
+msgid "Price/share"
+msgstr "Preis pro Aktie"
+
+#: dialogs/investactivities.cpp:586
+msgid "Ratio 1/"
+msgstr "Quotient 1/"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid ""
+"<p>Please check that all the details in the following dialog are correct and "
+"press OK.</p><p>Editable data can be changed and can either be applied to "
+"just this occurence or for all subsequent occurences for this schedule. "
+"(You will be asked what you intend after pressing OK in the following dialog)"
+"</p>"
+msgstr ""
+"<b><p>Bitte überprüfen Sie, ob alle unten angegebenen Details richtig sind "
+"und drücken Sie OK.</p><p>Editierbare Daten können verändert werden und "
+"entweder nur für diesem Eintrag oder für alle folgenden Einträge dieser "
+"geplanten Zahlung gelten. (Sie werden diesbezüglich gefragt, sobald Sie OK "
+"klicken).</p></b>"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid "Enter scheduled transaction"
+msgstr "Geplante Buchung eintragen"
+
+#: dialogs/kcsvprogressdlg.cpp:65 dialogs/kexportdlg.cpp:65
+msgid "&Export"
+msgstr "&Exportieren"
+
+#: dialogs/kexportdlg.cpp:67 dialogs/kimportdlg.cpp:68
+msgid "Start operation"
+msgstr "Operation starten"
+
+#: dialogs/kexportdlg.cpp:68
+msgid "Use this to start the export operation"
+msgstr "Drücken, um den Exportvorgang zu starten"
+
+#: dialogs/kexportdlg.cpp:71 dialogs/kimportdlg.cpp:72
+msgid "&Browse..."
+msgstr "&Durchsuchen..."
+
+#: dialogs/kexportdlg.cpp:73 dialogs/kimportdlg.cpp:74
+msgid "Select filename"
+msgstr "Dateinamen wählen"
+
+#: dialogs/kexportdlg.cpp:74 dialogs/kimportdlg.cpp:75
+msgid "Use this to select a filename to export to"
+msgstr "Drücken, um den Dateinamen für den Export zu wählen"
+
+#: dialogs/kexportdlg.cpp:77 dialogs/kimportdlg.cpp:78
+#: dialogs/settings/ksettingsonlinequotes.cpp:64
+#: widgets/kmymoneyonlinequoteconfig.cpp:64
+msgid "&New..."
+msgstr "&Neu..."
+
+#: dialogs/kexportdlg.cpp:79 dialogs/kimportdlg.cpp:80
+#: dialogs/mymoneyqifprofileeditor.cpp:96
+msgid "Create a new profile"
+msgstr "Neues Profil erstellen"
+
+#: dialogs/kexportdlg.cpp:80 dialogs/kimportdlg.cpp:81
+msgid "Use this to open the profile editor"
+msgstr "Drücken, um den Profileditor zu öffnen"
+
+#: dialogs/keditloanwizard.cpp:56
+msgid "Edit loan wizard"
+msgstr "Assistent Kredit bearbeiten"
+
+#: dialogs/keditloanwizard.cpp:58
+msgid ""
+"Please enter the date from which on the following changes will be effective. "
+"The date entered must be later than the opening date of this account (%1), "
+"but must not be in the future. The default will be today."
+msgstr ""
+"Bitte geben Sie das Datum ein, ab welchem die Änderungen vorgenommen werden "
+"sollen. Das eingegebene Datum muss nach dem Eröffnungsdatum des Kontos (%1) "
+"aber nicht in der Zukunft liegen. Standardmäßig wird das heutige Datum "
+"verwendet."
+
+#: dialogs/keditloanwizard.cpp:76
+msgid ""
+"Note: you will not be able to modify this account today, because the opening "
+"date \"%1\" is in the future. Please revisit this dialog when the time has "
+"come."
+msgstr ""
+"Hinweis: Sie werden das Konto derzeit nicht bearbeiten können, da das "
+"Eröffnungsdatum \"%1\" in der Zukunft liegt. Bitte kehren Sie hierhin "
+"zurück, wenn dieser Tag erreicht ist."
+
+#: dialogs/keditloanwizard.cpp:244
+msgid ""
+"Your previous selection was \"%1\". If you select another option, KMyMoney "
+"will dismiss the changes you have just entered. Do you wish to proceed?"
+msgstr ""
+"Ihre vorige Auswahl war \"%1\". Wenn Sie etwas anderes auswählen, wird "
+"KMyMoney alle Änderungen die Sie vorgenommen haben verwerfen. Wollen Sie "
+"fortfahren?"
+
+#: dialogs/kcategoryreassigndlg.cpp:81
+msgid ""
+"At least one transaction/schedule still references the category <b>%1</b>. "
+"However, at least one category with the same currency must exist so that the "
+"transactions/schedules can be reassigned."
+msgstr ""
+"Mindestens eine (geplante) Buchung verwendet die Kategorie <b>%1</b>. Es "
+"muss jedoch mindestens eine Kategorie der selben Währung existieren, so dass "
+"die (geplanten) Buchungen neu zugewiesen werden können."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid ""
+"This dialog does not allow to create new categories. Please pick a category "
+"from the list."
+msgstr ""
+"Dieser Dialog erlaubt das Anlegen neuer Kategorien nicht. Bitte wählen Sie "
+"eine Kategorie aus der Liste aus."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid "Category creation"
+msgstr "Erstellen einer Kategorie"
+
+#: dialogs/kbackupdlg.cpp:61
+msgid "C&hoose..."
+msgstr "&Wählen..."
+
+#: dialogs/kbackupdlg.cpp:63
+msgid "Select mount point"
+msgstr "Einhängepunkt auswählen"
+
+#: dialogs/kbackupdlg.cpp:64
+msgid "Use this to browse to the mount point."
+msgstr "Drücken, um nach dem Einhängepunkt zu suchen."
+
+#: dialogs/keditscheduledlg.cpp:293
+msgid "Next due date"
+msgstr "Nächste Fälligkeit am"
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid ""
+"You have turned on the GPG encryption support. This means, that new files "
+"will be stored encrypted. Existing files will not be encrypted "
+"automatically. To achieve encryption of existing files, please use the "
+"<b>File/Save as...</b> feature and store the file under a different name. "
+"Once confident with the result, feel free to delete the old file and rename "
+"the encrypted one to the old name."
+msgstr ""
+"Sie haben die GPG Verschlüsselung aktiviert. Dies bedeutet, daß neue Dateien "
+"verschlüsselt gespeichert werden. Bestehende Dateien werden nicht "
+"automatisch verschlüsselt. Um die Verschlüsselung bestehender Dateien zu "
+"erreichen, benutzen Sie bitte die <b>Datei/Speichern unter...</b> Funktion "
+"und speichern Sie die Datei unter einem anderen Namen. Sobald Sie mit dem "
+"Ergebnis zufrieden sind, können Sie die alte Datei löschen und ihn der "
+"verschlüsselten Datei zuweisen."
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid "GPG encryption activated"
+msgstr "GPG-Verschlüsselung aktiviert"
+
+#: dialogs/settings/ksettingshome.cpp:51
+msgid "&Up"
+msgstr "&Auf"
+
+#: dialogs/settings/ksettingshome.cpp:53
+msgid "Move selected item up"
+msgstr "Auswahl nach oben verschieben"
+
+#: dialogs/settings/ksettingshome.cpp:54
+msgid "Use this to move the selected item up by one position in the list."
+msgstr "Drücken, um den gewählten Eintrag eine Zeile nach oben zu verschieben."
+
+#: dialogs/settings/ksettingshome.cpp:55
+msgid "&Down"
+msgstr "A&b"
+
+#: dialogs/settings/ksettingshome.cpp:57
+msgid "Move selected item down"
+msgstr "Auswahl nach unten verschieben"
+
+#: dialogs/settings/ksettingshome.cpp:58
+msgid "Use this to move the selected item down by one position in the list."
+msgstr "Drücken, um den gewählten Eintrag um eine Zeile nach unten zu verschieben."
+
+#: dialogs/settings/rc.cpp:1
+msgid "Color settings"
+msgstr "Farbeinstellungen"
+
+#: dialogs/settings/rc.cpp:2
+msgid "Foreground"
+msgstr "Vordergrund"
+
+#: dialogs/settings/rc.cpp:3
+msgid "Text colors"
+msgstr "Text-Farben"
+
+#: dialogs/settings/rc.cpp:4
+msgid "Grid color"
+msgstr "Gitterlinienfarbe"
+
+#: dialogs/settings/rc.cpp:5
+msgid "Erronous transaction"
+msgstr "Fehlerhafte Buchung"
+
+#: dialogs/settings/rc.cpp:6
+msgid "Value with missing conversion rate"
+msgstr "Werte ohne Wechselkursangabe"
+
+#: dialogs/settings/rc.cpp:7
+msgid "Negative value"
+msgstr "Negativer Wert"
+
+#: dialogs/settings/rc.cpp:8
+msgid "Background"
+msgstr "Hintergrund"
+
+#: dialogs/settings/rc.cpp:10
+msgid "List background colors"
+msgstr "Kontobuch Hintergrundfarben"
+
+#: dialogs/settings/rc.cpp:11
+msgid "Normal"
+msgstr "Normal"
+
+#: dialogs/settings/rc.cpp:12
+msgid "Alternate"
+msgstr "Alternativ"
+
+#: dialogs/settings/rc.cpp:13
+msgid "Special background colors"
+msgstr "Spezielle Hintergrundfarben"
+
+#: dialogs/settings/rc.cpp:14
+msgid "Ledger group separator"
+msgstr "Kontobuch-Gruppenseparator"
+
+#: dialogs/settings/rc.cpp:15
+msgid "Required field"
+msgstr "Erforderliches Feld"
+
+#: dialogs/settings/rc.cpp:16
+msgid "Imported transaction"
+msgstr "Importierte Buchung"
+
+#: dialogs/settings/rc.cpp:17
+msgid "Matched transaction"
+msgstr "Zugeordnete Buchungen"
+
+#: dialogs/settings/rc.cpp:18
+msgid "Font settings"
+msgstr "Zeichensatz Einstellungen"
+
+#: dialogs/settings/rc.cpp:19
+msgid "Use system fonts"
+msgstr "Benutze Systemzeichensätze"
+
+#: dialogs/settings/rc.cpp:20
+msgid "Individual font settings"
+msgstr "Individuelle Zeichensatz-Einstellungen"
+
+#: dialogs/settings/rc.cpp:24
+msgid "Number of Days of Account Cycle:"
+msgstr "Anzahl der Tage für Konto-Zyklus:"
+
+#: dialogs/settings/rc.cpp:26
+msgid "Number of Days to Forecast:"
+msgstr "Anzahl der vorherzusagenden Tage:"
+
+#: dialogs/settings/rc.cpp:27
+msgid "Forecast Method"
+msgstr "Vorhersage-Methode"
+
+#: dialogs/settings/rc.cpp:28
+msgid "Scheduled and Future Transactions"
+msgstr "Geplante und zukünftige Buchungen"
+
+#: dialogs/settings/rc.cpp:29
+msgid "History-based"
+msgstr "Vergangenheitsbasiert"
+
+#: dialogs/settings/rc.cpp:30
+msgid "History-based settings"
+msgstr "Einstellungen für historien-basierte Vorhersage-Methode"
+
+#: dialogs/settings/rc.cpp:31
+msgid "Number of Cycles to use in Forecast:"
+msgstr "Anzahl zu verwendender Zyklen für Vorhersage :"
+
+#: dialogs/settings/rc.cpp:36
+msgid "General Settings"
+msgstr "Allgemeine Einstellungen"
+
+#: dialogs/settings/rc.cpp:37
+msgid "Global"
+msgstr "Global"
+
+#: dialogs/settings/rc.cpp:38
+msgid "Startup page options"
+msgstr "Startdialog Optionen"
+
+#: dialogs/settings/rc.cpp:39
+msgid "Start with homepage"
+msgstr "Nach dem Starten 'Übersicht'-Seite anzeigen"
+
+#: dialogs/settings/rc.cpp:40
+msgid "Start with last selected view"
+msgstr "Nach dem Starten zuletzt gewählte Seite anzeigen"
+
+#: dialogs/settings/rc.cpp:41
+msgid "Precision settings"
+msgstr "Genauigkeits-Einstellungen"
+
+#: dialogs/settings/rc.cpp:42
+msgid "Price precision"
+msgstr "Preisgenauigkeit"
+
+#: dialogs/settings/rc.cpp:43
+msgid "digits"
+msgstr "Stellen"
+
+#: dialogs/settings/rc.cpp:44
+msgid "Autosave options"
+msgstr "Autosave-Einstellungen"
+
+#: dialogs/settings/rc.cpp:45
+msgid "Autosave periodically"
+msgstr "automatisch speichern alle"
+
+#: dialogs/settings/rc.cpp:46
+msgid "minutes"
+msgstr "Minuten"
+
+#: dialogs/settings/rc.cpp:47
+msgid "Fiscal Year"
+msgstr "Geschäftsjahr"
+
+#: dialogs/settings/rc.cpp:48
+msgid "Your fiscal year starts on"
+msgstr "Aktuelles Geschäftsjahr beginnt am"
+
+#: dialogs/settings/rc.cpp:49
+msgid "January"
+msgstr "Januar"
+
+#: dialogs/settings/rc.cpp:50
+msgid "February"
+msgstr "Februar"
+
+#: dialogs/settings/rc.cpp:51
+msgid "March"
+msgstr "März"
+
+#: dialogs/settings/rc.cpp:52
+msgid "April"
+msgstr "April"
+
+#: dialogs/settings/rc.cpp:53
+msgid "May"
+msgstr "Mai"
+
+#: dialogs/settings/rc.cpp:54
+msgid "June"
+msgstr "Juni"
+
+#: dialogs/settings/rc.cpp:55
+msgid "July"
+msgstr "Juli"
+
+#: dialogs/settings/rc.cpp:56
+msgid "August"
+msgstr "August"
+
+#: dialogs/settings/rc.cpp:57
+msgid "September"
+msgstr "September"
+
+#: dialogs/settings/rc.cpp:58
+msgid "October"
+msgstr "Oktober"
+
+#: dialogs/settings/rc.cpp:59
+msgid "November"
+msgstr "November"
+
+#: dialogs/settings/rc.cpp:60
+msgid "December"
+msgstr "Dezember"
+
+#: dialogs/settings/rc.cpp:61
+msgid "Views"
+msgstr "Ansichten"
+
+#: dialogs/settings/rc.cpp:62
+msgid "Synchronize account selection of ledger and investment view"
+msgstr "Synchronisiere Kontobuch-Auswahl und Investment-Ansicht"
+
+#: dialogs/settings/rc.cpp:63
+msgid ""
+"Check the views you want to enable, uncheck those you want to hide, because "
+"you don't need the functionality."
+msgstr ""
+"Markieren Sie die Ansichten die sie erlauben wollen, deselektieren sie "
+"diejenigen, die sie verbergen wollen."
+
+#: dialogs/settings/rc.cpp:64
+msgid "Icon size of navigation bar"
+msgstr "Ikon-Größe der Navigationsleiste"
+
+#: dialogs/settings/rc.cpp:65
+msgid "Micro (16px)"
+msgstr "Mikro (16px)"
+
+#: dialogs/settings/rc.cpp:66
+msgid "Small (32px)"
+msgstr "Klein (32px)"
+
+#: dialogs/settings/rc.cpp:67
+msgid "Normal (48px)"
+msgstr "Normal (48px)"
+
+#: dialogs/settings/rc.cpp:68
+msgid "Large (64px)"
+msgstr "Groß (64px)"
+
+#: dialogs/settings/rc.cpp:69
+msgid "Show title bar on each page"
+msgstr "Zeige Kopfzeile in jeder Ansicht"
+
+#: dialogs/rc.cpp:835 dialogs/settings/rc.cpp:70
+msgid "Filter"
+msgstr "Filter"
+
+#: dialogs/settings/rc.cpp:71
+msgid "Accounts / Categories"
+msgstr "Konten / Kategorien"
+
+#: dialogs/settings/rc.cpp:72
+msgid "Don't show unused categories"
+msgstr "Nicht verwendete Kategorien ausblenden"
+
+#: dialogs/settings/rc.cpp:73
+msgid ""
+"This option hides all categories in the categories view that are not used in "
+"at least a single transaction. They are still shown in the category "
+"selection lists."
+msgstr ""
+"Diese Option blendet alle nicht in mindestens einer Buchung verwendete "
+"Kategorien aus. Sie werden aber immer noch in der Kategorien-Selektions-"
+"Liste angezeigt."
+
+#: dialogs/settings/rc.cpp:74
+msgid "Don't show closed accounts"
+msgstr "Geschlossene Konten nicht anzeigen"
+
+#: dialogs/settings/rc.cpp:75
+msgid ""
+"This option hides all accounts that have been closed by the user in views "
+"and selection lists.\n"
+"\n"
+"You can use <b>View/Show all accounts</b> to temporarily show hidden "
+"accounts in the views."
+msgstr ""
+"Diese Option blendet alle vom Nutzer geschlossenen Konten in Ansichten und "
+"Selektionslisten aus.\n"
+"\n"
+"Mittels <b>Ansicht/Alle Konten anzeigen</b> können alle ausgeblendeten "
+"Konten in den Ansichten temporär angezeigt werden."
+
+#: dialogs/settings/rc.cpp:76
+msgid "Show equity accounts"
+msgstr "Zeige Eigenkapitalkonten"
+
+#: dialogs/rc.cpp:332 dialogs/settings/rc.cpp:77 widgets/rc.cpp:160
+msgid "Schedules"
+msgstr "geplante Buchungen"
+
+#: dialogs/settings/rc.cpp:78
+msgid "Don't show finished schedules"
+msgstr "Abgelaufene Zahlungspläne nicht anzeigen"
+
+#: dialogs/settings/rc.cpp:79
+msgid "This option hides all finished schedules in the schedules view."
+msgstr ""
+"Diese Option blendet alle abgelaufenen Pläne in der Ansicht der geplanten "
+"Buchungen aus."
+
+#: dialogs/settings/rc.cpp:81
+msgid "Don't show transactions prior to"
+msgstr "Ausblenden der Buchungen vor"
+
+#: dialogs/settings/rc.cpp:82
+msgid "Don't show reconciled transactions"
+msgstr "Abgeglichene Buchungen ausblenden"
+
+#: dialogs/settings/rc.cpp:83
+msgid "This option hides all reconciled transactions in the ledger view."
+msgstr "Diese Option blendet alle abgeglichenen Buchungen im Kontobuch aus."
+
+#: dialogs/settings/rc.cpp:84 widgets/rc.cpp:22
+msgid "GPG encryption settings"
+msgstr "GPG-Verschlüsselungs-Einstellungen"
+
+#: dialogs/settings/rc.cpp:85
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Access to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>additional recovery encryption</i> is only accessible, if the "
+"necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id "
+"0x8AFDDC8E is found in your keyring."
+msgstr ""
+"Diese Seite erlaubt es Ihnen, die Parameter einzustellen um die <b>KMyMoney</"
+"b>-Daten mittels <b>GPG</b> zu verschlüsseln.<p>\n"
+"Die Funktionen sind inaktiv, falls <b>GPG</b> auf Ihrem System nicht "
+"gefunden werden konnte. In diesem Fall stellen Sie bitte sicher, dass "
+"<b>GPG</b> für den aktuellen Benutzer korrekt funktioniert.<p>\n"
+"Die <i>Wiederherstellungsverschlüsselung</i> ist nur verfügbar, falls der "
+"benötigte Schlüssel für <b>kmymoney-recover@users.sourceforge.net</b> mit "
+"der ID 0x8AFDDC8E im Schlüsselbund gefunden wurde."
+
+#: dialogs/settings/rc.cpp:86 widgets/rc.cpp:24
+msgid "Use GPG encryption"
+msgstr "Benutze GPG-Verschlüsselung"
+
+#: dialogs/settings/rc.cpp:87
+msgid "GPG encryption"
+msgstr "GPG-Verschlüsselung"
+
+#: dialogs/settings/rc.cpp:88
+msgid "Your key"
+msgstr "Ihr Schlüssel"
+
+#: dialogs/settings/rc.cpp:89
+msgid ""
+"This combo box lists all the secret keys you have in your keyring. Select "
+"the one you want to use for encryption when saving to a file."
+msgstr ""
+"Diese Auswahlbox zeigt alle privaten Schlüssel an, die sich in Ihrem "
+"Schlüsselbund befinden. Wählen Sie den aus, den Sie für die verschlüsselte "
+"Speicherung verwenden möchten."
+
+#: dialogs/settings/rc.cpp:90
+msgid "Additonal keys"
+msgstr "Zusätzliche Schlüssel"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:50 dialogs/settings/rc.cpp:91
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading 0x."
+msgstr ""
+"Geben Sie die ID des Schlüssels an, den Sie für die Verschlüsselung "
+"verwenden wollen. Dies kann entweder eine E-Mail-Adresse oder die "
+"hexadezimale Id des Schlüssels sein. Für den Fall dass Sie den Schlüssel in "
+"hexadezimaler Form eingeben, vergessen Sie nicht das führende <i>0x</i>."
+
+#: dialogs/settings/rc.cpp:92 widgets/rc.cpp:28
+msgid ""
+"This symbol denotes, if the key for the given user id has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"Dieses Zeichen gibt an, ob der Schlüssel für die angegebene Benutzerkennung "
+"in Ihrem Schlüsselbund gefunden wurde. Es ist grün falls er gefunden wurde, "
+"andernfalls ist er dunkel."
+
+#: dialogs/kgpgkeyselectiondlg.cpp:61 dialogs/settings/rc.cpp:93
+msgid "Keys for all of the above user ids found"
+msgstr "Schlüssel für alle obigen Nutzer IDs gefunden"
+
+#: dialogs/settings/rc.cpp:94 widgets/rc.cpp:31
+msgid ""
+"This symbol denotes, if the KMyMoney recovery key has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"Dieses Zeichen gibt an, ob der KMyMoney-Wiederherstellungsschlüssel in Ihrem "
+"Schlüsselbund gefunden wurde. Es ist grün falls er gefunden wurde, "
+"andernfalls ist er dunkel."
+
+#: dialogs/settings/rc.cpp:95
+msgid "Recover Key available in keyring"
+msgstr "Wiederherstellungsschlüssel ist im Schlüsselbund verfügbar"
+
+#: dialogs/settings/rc.cpp:96
+msgid "Also encrypt with KMyMoney's recover key"
+msgstr "Auch mit KMyMoney's Wiederherstellungsschlüssel verschlüsseln"
+
+#: dialogs/settings/rc.cpp:97
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out.."
+msgstr ""
+"Sie können die Daten zusätzlich mit dem KMyMoney-Wiederherstellungsschlüssel "
+"verschlüsseln. Nur die wichtigsten KMyMoney Entwickler sind im Besitz des "
+"zugehörigen privaten Schlüssels zum Entschlüsseln der Daten.<p>\n"
+"\n"
+"Diese Funktion wurde eingebaut für den Fall, dass Sie Ihren Schlüssel "
+"verloren haben und nicht mehr an Ihre Daten kommen. Falls diese Option "
+"aktiviert ist, können die KMyMoney-Entwickler die Daten entschlüsseln und "
+"Ihnen in lesbarer Form zukommen lassen. Bitte beachten Sie, dass wir Ihnen "
+"einige detaillierte Fragen zum Inhalt stellen, bevor wir Ihnen die "
+"entschlüsselte Datei zukommen lassen.."
+
+#: dialogs/settings/rc.cpp:98
+msgid "Homepage Settings"
+msgstr "Einstellungen der 'Übersicht'-Seite"
+
+#: dialogs/settings/rc.cpp:99
+msgid "Up"
+msgstr "Auf"
+
+#: dialogs/settings/rc.cpp:100
+msgid "Down"
+msgstr "Ab"
+
+#: dialogs/settings/rc.cpp:101
+msgid ""
+"Selected entries are shown on the home page of the application.<p>\n"
+"Use the buttons and checkboxes to customize the layout of the home page."
+msgstr ""
+"Die ausgewählten Positionen werden auf der 'Übersicht'-Seite von KMyMoney "
+"angezeigt.<p>\n"
+"Verwenden Sie die Knöpfe und Ankreuzboxen um die Anzeige der 'Übersicht'-"
+"Seite an Ihre Bedürfnisse anzupassen."
+
+#: dialogs/settings/rc.cpp:102
+msgid "Homepage/Summary page font scaling"
+msgstr "'Übersicht'-Seite Schriftskalierung"
+
+#: dialogs/settings/rc.cpp:103
+msgid "Percentage of default font size:"
+msgstr "Prozentanteil der Standardschriftgröße:"
+
+#: dialogs/settings/rc.cpp:104
+msgid ""
+"Remember font size when leaving the program if manually changed with mouse-"
+"wheel"
+msgstr ""
+"Wiederherstellen der Schriftgröße bei Verlassen des Programms, falls "
+"manuelle Änderung mit Mausrad erfolgte"
+
+#: dialogs/settings/rc.cpp:105
+msgid "Information display"
+msgstr "Informationsanzeige"
+
+#: dialogs/settings/rc.cpp:106
+msgid "Show Account Limit Information"
+msgstr "Zeige Grenzwerten für Konten"
+
+#: dialogs/settings/rc.cpp:110 widgets/rc.cpp:47
+msgid ""
+"<i>Enter regular expressions which can be used to parse the data returned "
+"from the URL entered above. The symbol, price, and date must be found in "
+"the quote data to be usable. You may also try the KMyMoney user's "
+"mailinglist at <a href=\"mailto:kmymoney2-user@lists.sourceforge.net"
+"\">kmymoney2-user@lists.sourceforge.net</a> to find what settings work for "
+"other users in your country.</i>"
+msgstr ""
+"<i>Geben Sie einen regulären Ausdruck an, mit dem die empfangenen Daten der "
+"obigen URL durchsucht werden kann. Damit die Daten genutzt werden können, "
+"müssen diese das Symbol, den Preis und das Datum enthalten. Sie können "
+"versuchen über die Mailingliste <a href=\"mailto:kmymoney2-user@lists."
+"sourceforge.net\">kmymoney2-user@lists.sourceforge.net</a> herauszubekommen, "
+"welche Einstellungen für andere Benutzer in Ihrem Land funktionieren.</i>"
+
+#: dialogs/settings/rc.cpp:113 widgets/rc.cpp:38
+msgid "Regular Expression to extract the symbol from the downloaded data"
+msgstr ""
+"Regulärer Ausdruck um das Symbol aus den heruntergeladenen Daten zu "
+"extrahieren"
+
+#: dialogs/settings/rc.cpp:114 widgets/rc.cpp:39
+msgid "Regular Expression to extract the price from the downloaded data"
+msgstr ""
+"Regulärer Ausdruck um den Preis aus den heruntergeladenen Daten zu "
+"extrahieren"
+
+#: dialogs/settings/rc.cpp:115 widgets/rc.cpp:41
+msgid "URL to be used to download the quote"
+msgstr "URL für den Download der Kursnotiz"
+
+#: dialogs/settings/rc.cpp:116 widgets/rc.cpp:42
+msgid ""
+"Enter the URL from which stock quotes will be fetched. <b>%1</b> will be "
+"replaced with the symbol for the security being quoted. For currency "
+"conversions, <b>%2</b> will be replaced with the currency to be quoted and "
+"<b>%1</b> with the currency the quote is based on."
+msgstr ""
+"Geben Sie die URL ein, von denen die Börsenkurse heruntergeladen werden "
+"sollen. <b>%1</b> wird mit dem Symbol der genannten Anlage getauscht. Für "
+"die Währungskonvertierung wird <b>%2</b> ersetzt durch die Währung der "
+"Kursnotiz und <b>%1</b> mit der Währung auf die die Kursnotiz beruht."
+
+#: dialogs/settings/rc.cpp:118 dialogs/settings/rc.cpp:121 widgets/rc.cpp:40
+#: widgets/rc.cpp:44
+msgid "Regular Expression to extract the date from the downloaded data"
+msgstr ""
+"Regulärer Ausdruck um das Datum aus den heruntergeladenen Daten zu "
+"extrahieren"
+
+#: dialogs/rc.cpp:807 dialogs/settings/rc.cpp:119 widgets/rc.cpp:45
+msgid "Date Format"
+msgstr "Datumsformat"
+
+#: dialogs/settings/rc.cpp:122
+msgid "Skip HTML stripping"
+msgstr "HTML Tags erhalten"
+
+#: dialogs/settings/rc.cpp:123
+msgid ""
+"<p>For easier processing of the data returned by the online source, KMyMoney "
+"usually strips unused parts before it is parsed with the regular "
+"expressions. If matching of the fields relies on those items, then use this "
+"option to turn stripping off.</p>\n"
+"\n"
+"<p>The following items are usually removed by stripping:\n"
+"\n"
+"<ul>\n"
+"<li>HTML tags such as <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded characters such as <b>&amp;nbsp;</b></li>\n"
+"<li>duplicate whitespace</li>\n"
+"</ul>\n"
+"</p>"
+msgstr ""
+"<p>KMyMoney entfernt normalerweise alle HTML Tags aus dem Datenstrom von der "
+"Online Quelle bevor es die Daten mittels der regulären Ausdrücke analysiert. "
+"Sollten diese regulären Ausdrücke jedoch das Vorhandensein der HTML Tags "
+"benötigen, schalten Sie das Löschen mit dieser Option aus.</p>\n"
+"\n"
+"<p>Die folgenden Zeichen werden normalerweise entfernt:\n"
+"\n"
+"<ul>\n"
+"<li>HTML Tags wie z.B. <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded Zeichen wie z.B. <b>&amp;nbsp;</b></li>\n"
+"<li>doppelte Leerzeichen</li>\n"
+"</ul>\n"
+"</p>"
+
+#: dialogs/settings/rc.cpp:127
+msgid "Register settings"
+msgstr "Kontobuch-Einstellungen"
+
+#: dialogs/settings/rc.cpp:128
+msgid "Display"
+msgstr "Anzeige"
+
+#: dialogs/settings/rc.cpp:131
+msgid ""
+"Using the ledger lens shows the details for the transaction that has focus "
+"in the ledger. Usually, when using the transaction form, only a one line "
+"summary is displayed for each transaction as the details are shown in the "
+"form."
+msgstr ""
+"Bei Benutzung der Kontobuch-Linse werden die Details der fokussierten "
+"Buchung angezeigt. Normalerweise wird nur eine einzeilige Zusammenfassung "
+"für jede Buchung dargestellt, da die Details im Formular angezeigt werden."
+
+#: dialogs/settings/rc.cpp:133
+msgid "Always show a No. field"
+msgstr "Immer ein Nr. Feld anzeigen"
+
+#: dialogs/settings/rc.cpp:134
+msgid "Show group header between transactions"
+msgstr "Gruppen-Titel zwischen Buchungen anzeigen"
+
+#: dialogs/settings/rc.cpp:135
+msgid ""
+"Draws a larger header above each group of transaction. The grouping depends "
+"on the current sort order."
+msgstr ""
+"Zeichnet eine größere Titelzeile über jeder Gruppe von Buchungen. Die "
+"Gruppierung hängt von der aktuellen Sortierreihenfolge ab."
+
+#: dialogs/settings/rc.cpp:136
+msgid "Show header for the previous and current fiscal year"
+msgstr "Titelzeile für vergangenes und aktuelles Geschäftsjahr anzeigen"
+
+#: dialogs/settings/rc.cpp:137
+msgid "Sorting"
+msgstr "Sortierung"
+
+#: dialogs/settings/rc.cpp:138
+msgid "Normal view"
+msgstr "Normale Ansicht"
+
+#: dialogs/settings/rc.cpp:139
+msgid "Reconciliation view"
+msgstr "Abgleich-Ansicht"
+
+#: dialogs/settings/rc.cpp:140
+msgid "Search view"
+msgstr "Such-Ansicht"
+
+#: dialogs/settings/rc.cpp:141
+msgid ""
+"Use the <i>left</i> and <i>right</i> buttons to add and remove sort options. "
+"Use the <i>up</i> and <i>down</i> buttons to modify the sort order. Double-"
+"Click a selected entry to toggle the sort order between <i>ascending</i> and "
+"<i>descending</i>."
+msgstr ""
+"Die Knöpfe <i>links</i> und <i>rechts</i> nutzen, um Sortieroptionen "
+"hinzuzufügen bzw. zu entfernen. Die Knöpfe <i>auf</i> und <i>ab</i> "
+"verändern die Sortierreihenfolge.Doppelklick auf einen gewählten Eintrag "
+"schaltet die Sortier-Richtung zwischen <i>aufsteigend</i> und <i>absteigend</"
+"i> um."
+
+#: dialogs/settings/rc.cpp:142
+msgid "Data entry"
+msgstr "Datenerfassung"
+
+#: dialogs/settings/rc.cpp:146
+msgid "Use Enter to move between fields"
+msgstr "ENTER-Taste wechselt zwischen den Feldern"
+
+#: dialogs/settings/rc.cpp:147
+msgid "Match names from start"
+msgstr "Beginne Vergleich immer am Anfang"
+
+#: dialogs/settings/rc.cpp:148
+msgid ""
+"Mark this option, if you always want to match names e.g. for payees from the "
+"start. If unset, any substring is matched."
+msgstr ""
+"Schalten Sie diese Option ein, wenn sie Namensvergleiche immer am Anfang "
+"beginnen wollen. Bei ausgeschalteter Option ist auch ein Teil "
+"übereinstimmend."
+
+#: dialogs/settings/rc.cpp:149
+msgid "Default reconciliation state"
+msgstr "Standard für Abgleichstatus"
+
+#: dialogs/rc.cpp:227 dialogs/settings/rc.cpp:150
+#: widgets/kmymoneycombo.cpp:348 widgets/registersearchline.cpp:84
+msgid "Not reconciled"
+msgstr "Nicht abgeglichen"
+
+#: dialogs/rc.cpp:228 dialogs/settings/rc.cpp:151
+#: widgets/kmymoneycombo.cpp:347 widgets/registersearchline.cpp:85
+msgid "Cleared"
+msgstr "Verrechnet"
+
+#: dialogs/settings/rc.cpp:153
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation "
+"of an account"
+msgstr ""
+"Standard für Abgleichstatus bei Buchungen, die während des Abgleichs eines "
+"Kontos eingegeben werden"
+
+#: dialogs/settings/rc.cpp:154
+msgid "Autofill"
+msgstr "Automatisches Ausfüllen"
+
+#: dialogs/settings/rc.cpp:155
+msgid "No Autofill"
+msgstr "Kein automatisches Ausfüllen"
+
+#: dialogs/settings/rc.cpp:156
+msgid "Don't do autofill of transaction data at all."
+msgstr "Automatisches Ausfüllen auf keinen Fall ausführen."
+
+#: dialogs/settings/rc.cpp:157
+msgid "Same transaction if amount differs less than"
+msgstr "Gleiche Transaktion wenn der Betrag nicht mehr als"
+
+#: dialogs/settings/rc.cpp:158
+msgid ""
+"Collect all transactions for the given payee. Treat all transactions that "
+"refer to the same category and have an amount with +/- X % as identical. If "
+"more than one transaction is found, a list of them is presented to the "
+"user.\n"
+"\n"
+"Selecting 0% will list all transactions."
+msgstr ""
+"Sammele alle Buchungen des Zahlers. Betrachte alle Buchungen die die gleiche "
+"Kategorie referenzieren und einen Betrag im Bereich +/- X% haben als "
+"identisch. Falls mehr als eine Buchung gefunden existiert, wird eine Liste "
+"angezeigt.\n"
+"\n"
+"Bei der Wahl von 0% werden alle Buchungen angezeigt."
+
+#: dialogs/settings/rc.cpp:159
+msgid ""
+"Two transactions are usually treated identical for autofill, if they refer "
+"the same accounts. They are treated as different transactions though, when "
+"their amount varies by more than the percentage given here."
+msgstr ""
+"Zwei Buchungen werden von Autofill grundsätzlich als identisch betrachtet, "
+"falls sie zum selben Konto gehören. Sie gelten allerdings in jedem Fall als "
+"verschieden, falls ihr Betrag um mehr als den hier eingetragen Prozentsatz "
+"abweicht."
+
+#: dialogs/settings/rc.cpp:160
+msgid ""
+"_: Same transaction if amount differs less than percent.\n"
+"percent."
+msgstr "Prozent abweicht."
+
+#: dialogs/settings/rc.cpp:161
+msgid "with previously most often used transaction for the payee"
+msgstr "mit den Daten der zuvor am meisten verwendeten Kategorie dieses Zahlers."
+
+#: dialogs/settings/rc.cpp:162
+msgid ""
+"The data of the last transaction assigned to the category used most often "
+"for this payee is autofilled into the transaction editor."
+msgstr ""
+"Die Daten der letzten Buchung mit der am meisten verwendeten Kategorie für "
+"diesen Zahler werden automatisch in den Buchungseditor gefüllt."
+
+#: dialogs/settings/rc.cpp:164
+msgid "Match transactions within days"
+msgstr "Buchungen innerhalb von Tagen zuordnen"
+
+#: dialogs/settings/rc.cpp:165
+msgid ""
+"Search for matching transactions within the range of the posting date of the "
+"imported transaction +/- the number of given days."
+msgstr ""
+"Suche nach übereinstimmenden Buchungen innerhalb des Bereichs in +/- der "
+"hier angegebenen Tage auf Basis des Buchungsdatums der importierten Buchung."
+
+#: dialogs/settings/rc.cpp:166
+msgid "Ask for a new payee's default category"
+msgstr "Frage nach der Standard Kategorie für neue Empfänger"
+
+#: dialogs/settings/rc.cpp:167
+msgid ""
+"Whenever a new payee is detected during import of a statement, the user will "
+"be asked to assign a default category for this user when this option is "
+"selected."
+msgstr ""
+"Falls diese Option aktiviert ist, wird bei Erkennen eines neuen Empfängers "
+"während des Imports der Benutzer zur Angabe einer Standard Kategorie für "
+"diesen Empfänger aufgefordert."
+
+#: dialogs/settings/rc.cpp:168
+msgid "Schedule Settings"
+msgstr "Einstellungen für geplante Buchungen"
+
+#: dialogs/settings/rc.cpp:169
+msgid "Startup options"
+msgstr "Start-Optionen"
+
+#: dialogs/settings/rc.cpp:170
+msgid "Check schedules on startup"
+msgstr "Geplante Buchungen beim Start überprüfen"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:60
+#: widgets/kmymoneyonlinequoteconfig.cpp:60
+msgid "Delete the selected source entry"
+msgstr "Den gewählten Quelleintrag löschen"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:61
+#: widgets/kmymoneyonlinequoteconfig.cpp:61
+msgid "Use this to delete the selected online source entry"
+msgstr "Drücken, um den ausgewählten Online-Quelleneintrag zu löschen"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:66
+#: widgets/kmymoneyonlinequoteconfig.cpp:66
+msgid "Create a new source entry for online quotes"
+msgstr "Neue Quelle für Online-Kursnotizen anlegen"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:67
+#: widgets/kmymoneyonlinequoteconfig.cpp:67
+msgid "Use this to create a new entry for online quotes"
+msgstr "Hiermit einen neuen Eintrag für Online-Kurse erstellen"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:107
+#: dialogs/settings/ksettingsonlinequotes.cpp:190
+#: dialogs/settings/ksettingsonlinequotes.cpp:193
+#: dialogs/settings/ksettingsonlinequotes.cpp:216
+#: widgets/kmymoneyonlinequoteconfig.cpp:107
+#: widgets/kmymoneyonlinequoteconfig.cpp:185
+#: widgets/kmymoneyonlinequoteconfig.cpp:188
+#: widgets/kmymoneyonlinequoteconfig.cpp:211
+msgid "New Quote Source"
+msgstr "Neue Kursnotiz-Quelle"
+
+#: dialogs/ksplittransactiondlg.cpp:77 dialogs/rc.cpp:788
+msgid "Clear &All"
+msgstr "&Alle löschen"
+
+#: dialogs/ksplittransactiondlg.cpp:79
+msgid "Clear all splits"
+msgstr "Alle Split-Buchungen löschen"
+
+#: dialogs/ksplittransactiondlg.cpp:80
+msgid "Use this to clear all splits of this transaction"
+msgstr "Drücken, um alle Split-Buchungen dieser Buchung zu löschen"
+
+#: dialogs/ksplittransactiondlg.cpp:84
+msgid "&Merge"
+msgstr "&Vereinfachen"
+
+#: dialogs/ksplittransactiondlg.cpp:183
+msgid ""
+"The total amount of this transaction is %1 while the sum of the splits is %"
+"2. The remaining %3 are unassigned."
+msgstr ""
+"Die Gesamtsumme der Buchung ist %1, obwohl die Summe der Split-Buchungen %2 "
+"ist. Die restlichen %3 sind keiner Kategorie zugewiesen."
+
+#: dialogs/ksplittransactiondlg.cpp:191
+#, c-format
+msgid "Change &total amount of transaction to %1."
+msgstr "&Gesamtsumme der Buchung auf %1 ändern."
+
+#: dialogs/ksplittransactiondlg.cpp:194
+msgid "&Distribute difference of %1 among all splits."
+msgstr "Die Differenz von %1 auf alle Split-Buchungen &aufteilen."
+
+#: dialogs/ksplittransactiondlg.cpp:203
+#, c-format
+msgid "&Leave total amount of transaction at %1."
+msgstr "&Gesamtsumme der Buchung auf %1 ändern."
+
+#: dialogs/ksplittransactiondlg.cpp:205
+msgid "&Leave %1 unassigned."
+msgstr "%1 &nicht zuweisen."
+
+#: dialogs/ksplittransactiondlg.cpp:275
+msgid ""
+"You are about to delete all splits of this transaction. Do you really want "
+"to continue?"
+msgstr ""
+"Sie sind gerade dabei, alle Split-Buchungen dieser Buchung zu löschen. "
+"Wollen Sie wirklich fortfahren?"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:97
+msgid "Use this to create a new QIF import/export profile"
+msgstr "Drücken, um ein neues QIF-Import/Export Profil zu erstellen"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:148
+#: dialogs/mymoneyqifprofileeditor.cpp:403 dialogs/rc.cpp:797
+msgid "QIF Profile Editor"
+msgstr "QIF-Profileditor"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:150
+msgid "QIF Profile Selector"
+msgstr "QIF Profil Auswahl"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:236
+msgid "The default QIF profile"
+msgstr "Das Standard QIF Profil"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:404
+#: dialogs/mymoneyqifprofileeditor.cpp:417
+msgid "Enter new profile name"
+msgstr "Neuen Profilnamen eingeben"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:436
+msgid "Do you really want to delete profile '%1'?"
+msgstr "Wollen Sie das Profil '%1' wirklich löschen?"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:38
+msgid "Select additional keys"
+msgstr "Zusätzliche Schlüssel auswählen"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:48 widgets/rc.cpp:25
+msgid "User identification"
+msgstr "Benutzererkennung"
+
+#: dialogs/kendingbalancedlg.cpp:71
+msgid ""
+"Please enter the following fields with the information as you find them on "
+"your statement. Make sure to enter all values in <b>%1</b>."
+msgstr ""
+"Geben Sie bitte die Daten aus Ihrem Kontoauszug in die folgenden Felder ein. "
+"Stellen Sie sicher, dass alle Werte in <b>%1</b> eingegeben werden."
+
+#: dialogs/kendingbalancedlg.cpp:124
+#, c-format
+msgid "Last reconciled statement: %1"
+msgstr "Zuletzt abgeglichene Buchung: %1"
+
+#: dialogs/kendingbalancedlg.cpp:437 dialogs/kendingbalancedlg.cpp:577
+#: dialogs/rc.cpp:137
+msgid "Adjustment transaction"
+msgstr "Berichtigungsbuchung"
+
+#: dialogs/kendingbalancedlg.cpp:510
+msgid ""
+"KMyMoney has calculated the following amounts for interest and amortization "
+"according to recorded payments between %1 and %2."
+msgstr ""
+"KMyMoney hat die folgenden Werte für Zins und Tilgung in Übereinstimmung mit "
+"aufgenommenen Zahlungen zwischen %1 und %2 berechnet."
+
+#: dialogs/kbalancechartdlg.cpp:59
+#, c-format
+msgid "Balance of %1"
+msgstr "Saldo: %1"
+
+#: dialogs/kbalancechartdlg.cpp:70
+msgid "%1 Balance History"
+msgstr "%1 Kursverlauf"
+
+#: dialogs/kmymoneysplittable.cpp:98
+msgid "Split Options"
+msgstr "Optionen für Split-Buchungen"
+
+#: dialogs/kmymoneysplittable.cpp:99 dialogs/rc.cpp:731
+#: widgets/kmymoneypriceview.cpp:149
+msgid "Edit..."
+msgstr "Bearbeiten..."
+
+#: dialogs/kmymoneysplittable.cpp:100
+msgid "Duplicate"
+msgstr "Dupliziere"
+
+#: dialogs/kmymoneysplittable.cpp:102
+msgid "Delete ..."
+msgstr "Löschen ..."
+
+#: dialogs/kmymoneysplittable.cpp:275
+msgid ""
+"_: Duplicate split\n"
+"CTRL+c"
+msgstr ""
+"Dupliziere Split-Buchung\n"
+"CTRL+c"
+
+#: dialogs/kmymoneysplittable.cpp:562
+msgid "will be calculated"
+msgstr "wird berechnet"
+
+#: dialogs/kmymoneysplittable.cpp:648
+msgid "You are about to delete the selected split. Do you really want to continue?"
+msgstr ""
+"Sie sind gerade dabei, die aktuelle Split-Buchung zu löschen! Möchten Sie "
+"wirklich fortfahren?"
+
+#: dialogs/rc.cpp:1
+msgid "Account selection"
+msgstr "Kontoauswahl"
+
+#: dialogs/rc.cpp:3
+msgid "Account to import to"
+msgstr "Konto in welches importiert werden soll"
+
+#: dialogs/rc.cpp:6 dialogs/rc.cpp:170 widgets/rc.cpp:169
+msgid "Skip"
+msgstr "Auslassen"
+
+#: dialogs/rc.cpp:8
+msgid ""
+"Use this dialog to backup your data. \n"
+"\n"
+"Please make sure you have a disk inserted and that the drive is ready. Then "
+"choose the mount point from either the Choose button or by entering the path "
+"in the available box.\n"
+"\n"
+"Click OK to perform the backup. If your system does not use an automounter, "
+"make sure you mark the checkbox below to \"mount this directory before "
+"backing up.\""
+msgstr ""
+"Verwenden Sie diesen Dialog, um Ihre Daten zu sichern.\n"
+"\n"
+"Bitte versichern Sie sich, dass sich ein Medium im Laufwerk (z.B. "
+"Diskettenlaufwerk) befindet.Wählen Sie weiterhin den Einhängepunkt, den Sie "
+"entweder im Eingabefeld eingeben oder mittels \"Wählen\" suchen.\n"
+"\n"
+"Stellen Sie sicher, dass Sie \"Einhängen\" ausgewählt haben, falls Ihr "
+"System automatisches Einhängen nicht unterstützt. Drücken Sie OK, um die "
+"Sicherung durchzuführen."
+
+#: dialogs/rc.cpp:9
+msgid "Device options"
+msgstr "Geräteoptionen"
+
+#: dialogs/rc.cpp:10
+msgid ""
+"_: This is the mount point\n"
+"Mount Point:"
+msgstr "Mount-Punkt:"
+
+#: dialogs/rc.cpp:11
+msgid "Choose..."
+msgstr "Wählen..."
+
+#: dialogs/rc.cpp:12
+msgid "Mount this directory before backing up."
+msgstr "Dieses Gerät einhängen, bevor die Sicherung durchgeführt wird."
+
+#: dialogs/rc.cpp:15
+msgid "Reassign categories"
+msgstr "Kategorien erneut zuweisen"
+
+#: dialogs/rc.cpp:16
+msgid ""
+"The transactions, schedules and budgets associated with the selected "
+"category need to be re-assigned to a different category before the selected "
+"category can be deleted. Please select a category from the list below."
+msgstr ""
+"Die (geplanten) Buchungen und Budgets in der ausgewählten Kategorie müssen "
+"einer anderen Kategorie zugeordnet werden, bevor die ausgewählte Kategorie "
+"gelöscht werden kann. Bitte wählen Sie eine Kategorie aus der Liste."
+
+#: dialogs/rc.cpp:17
+msgid "Available categories:"
+msgstr "Verfügbare Kategorien:"
+
+#: dialogs/rc.cpp:21
+msgid ""
+"Please choose the type of import you wish to perform. A simple "
+"explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Bitte wählen Sie die Art des gewünschten Imports. Eine kurze Beschreibung\n"
+"über die Art des Imports ist im unteren Fensterbereich zu sehen und wird "
+"aktualisiert,\n"
+"wenn Sie etwas auswählen.\n"
+"\n"
+"Sobald Sie die gewünschte Art ausgewählt haben, drücken Sie OK."
+
+#: dialogs/rc.cpp:23
+msgid "QIF"
+msgstr "QIF"
+
+#: dialogs/rc.cpp:24
+msgid "CSV"
+msgstr "CSV"
+
+#: dialogs/rc.cpp:25
+msgid "Some descripton"
+msgstr "Beschreibung"
+
+#: dialogs/rc.cpp:28
+msgid "Confirm Manual Enter"
+msgstr "Manuelle Bestätigung"
+
+#: dialogs/rc.cpp:29
+msgid "The following changes have been made to the transaction data:"
+msgstr "Folgende Buchungsdaten wurden geändert:"
+
+#: dialogs/rc.cpp:30
+msgid "Please choose what you wish to do with the above changes"
+msgstr "Bitte wählen Sie, was Sie mit obigen Änderungen machen möchten"
+
+#: dialogs/rc.cpp:31
+msgid "Discard the changes and enter the original transaction into the register."
+msgstr "Änderungen verwerfen und die originale Buchung im Kontobuch eintragen."
+
+#: dialogs/rc.cpp:32
+msgid "Enter these new values this one time, for this occurence only."
+msgstr "Diese neuen Werte nur für den aktuellen Eintrag verwenden."
+
+#: dialogs/rc.cpp:33
+msgid "Set all further occurences in this schedule to be these values."
+msgstr "Alle weiteren Einträge in diesem Buchungsplan auf diese Werte setzen."
+
+#: dialogs/rc.cpp:36
+msgid "CSV Dialog"
+msgstr "CSV-Dialog"
+
+#: dialogs/rc.cpp:37
+msgid ""
+"CSV Dialog. Choose a file and then click on Run. You can view your "
+"progress at\n"
+"the bottom of the screen.\n"
+"\n"
+"You can cancel the process at any time by clicking on the Cancel button."
+msgstr ""
+"CSV-Dialog. Wählen Sie eine Datei und wählen Sie \"Starten\". Sie können "
+"den Fortschritt am unteren Rand mitverfolgen. Sie können den Prozess "
+"jederzeit mit \"Abbrechen\" abbrechen."
+
+#: dialogs/rc.cpp:38
+msgid "Choose the csv file:"
+msgstr "CSV-Datei auswählen:"
+
+#: dialogs/rc.cpp:39
+msgid "Browse"
+msgstr "Durchsuchen"
+
+#: dialogs/rc.cpp:40
+msgid "Between These Dates"
+msgstr "Zwischen diesen Daten"
+
+#: dialogs/rc.cpp:41 dialogs/rc.cpp:196
+msgid "Start on:"
+msgstr "von:"
+
+#: dialogs/rc.cpp:42 dialogs/rc.cpp:195
+msgid "End on:"
+msgstr "bis:"
+
+#: dialogs/rc.cpp:43
+msgid "Run"
+msgstr "Starten"
+
+#: dialogs/rc.cpp:44
+msgid "Progress Info"
+msgstr "Fortschritts-Info"
+
+#: dialogs/rc.cpp:45
+msgid "Processing Account:"
+msgstr "Verarbeite Konto:"
+
+#: dialogs/rc.cpp:47
+msgid "Processing Transaction:"
+msgstr "Verarbeite Buchung:"
+
+#: dialogs/rc.cpp:48
+msgid "0 of 0"
+msgstr "0 von 0"
+
+#: dialogs/rc.cpp:50
+msgid "Exchange Rate/Price Editor"
+msgstr "Umtauschkurs-Editor"
+
+#: dialogs/rc.cpp:55
+msgid "Convert from"
+msgstr "Umwandeln von"
+
+#: dialogs/rc.cpp:58
+msgid "Convert to"
+msgstr "Umwandeln nach"
+
+#: dialogs/rc.cpp:61
+msgid "To amount"
+msgstr "Betrag"
+
+#: dialogs/rc.cpp:62
+msgid "Exchange rate / Price"
+msgstr "Umtauschkurs / Preis"
+
+#: dialogs/rc.cpp:64
+msgid ""
+"xx\n"
+"xx"
+msgstr ""
+"xx\n"
+"xx"
+
+#: dialogs/rc.cpp:68
+msgid "Currencies"
+msgstr "Währungen"
+
+#: dialogs/rc.cpp:72
+msgid "real ID"
+msgstr "real ID"
+
+#: dialogs/rc.cpp:73 dialogs/rc.cpp:722
+msgid "ID"
+msgstr "Währungs-ID"
+
+#: dialogs/rc.cpp:74
+msgid "X"
+msgstr "X"
+
+#: dialogs/rc.cpp:76 dialogs/rc.cpp:459
+msgid "Online Source"
+msgstr "Online-Quelle"
+
+#: dialogs/rc.cpp:78 dialogs/rc.cpp:278 dialogs/rc.cpp:312 dialogs/rc.cpp:684
+msgid "F1"
+msgstr "F1"
+
+#: dialogs/rc.cpp:80
+msgid "If this button is not activated, select the base currency first."
+msgstr ""
+"Falls dieser Schalter nicht aktiviert ist, selektieren Sie zunächst die "
+"Basiswährung."
+
+#: dialogs/rc.cpp:81
+msgid ""
+"Press this button to close the dialog. If the button is not activated, "
+"select your base currency."
+msgstr ""
+"Drücken Sie diesen Knopf um den Dialog zu schließen. Ist er nicht aktiviert, "
+"wählen Sie ihre Basiswährung aus."
+
+#: dialogs/rc.cpp:82
+msgid "Edit Equity"
+msgstr "Anlage bearbeiten"
+
+#: dialogs/rc.cpp:86 dialogs/rc.cpp:410
+msgid "Smallest fraction:"
+msgstr "Kleinster Bruchteil:"
+
+#: dialogs/rc.cpp:87 dialogs/rc.cpp:408 dialogs/rc.cpp:440
+msgid "1 /"
+msgstr "1 /"
+
+#: dialogs/rc.cpp:88 dialogs/rc.cpp:405
+msgid "Investment Type:"
+msgstr "Anlageform:"
+
+#: dialogs/rc.cpp:89 dialogs/rc.cpp:404
+msgid "Equity Name:"
+msgstr "Anlagename:"
+
+#: dialogs/rc.cpp:90 dialogs/rc.cpp:409
+msgid "Market Symbol:"
+msgstr "Börsensymbol:"
+
+#: dialogs/rc.cpp:91
+msgid "Price History"
+msgstr "Kursverlauf"
+
+#: dialogs/rc.cpp:97
+msgid "Edit Scheduled transaction"
+msgstr "Geplante Buchung bearbeiten"
+
+#: dialogs/rc.cpp:98
+msgid "Schedule name:"
+msgstr "Name der geplanten Buchung:"
+
+#: dialogs/rc.cpp:99
+msgid "Frequency:"
+msgstr "Häufigkeit:"
+
+#: dialogs/rc.cpp:100
+msgid "Number of selected periods between entries"
+msgstr "Anzahl der gewählten Perioden zwischen zwei Zahlungen"
+
+#: dialogs/rc.cpp:101
+msgid "Payment information"
+msgstr "Zahlungsinformationen"
+
+#: dialogs/rc.cpp:105 dialogs/rc.cpp:160 dialogs/rc.cpp:247 dialogs/rc.cpp:752
+#: widgets/register.cpp:569
+msgid "C"
+msgstr "V"
+
+#: dialogs/rc.cpp:113
+msgid "Do nothing"
+msgstr "Datum unverändert übernehmen"
+
+#: dialogs/rc.cpp:116
+msgid "If this schedule occurs on the weekend:"
+msgstr "Fällt das Fälligkeitsdatum auf ein Wochenende, dann:"
+
+#: dialogs/rc.cpp:117
+msgid "The amount is an estimate because it varies for each payment"
+msgstr "Dies ist eine Schätzung, da der Betrag für jede Zahlung schwankt"
+
+#: dialogs/rc.cpp:118
+msgid "Enter this schedule into the register automatically when it is due"
+msgstr "Buchung bei Fälligkeit automatisch in das Kontobuch eintragen"
+
+#: dialogs/rc.cpp:119
+msgid "This schedule will end at some time"
+msgstr "Zahlungen enden zu einem bestimmten Termin"
+
+#: dialogs/rc.cpp:120
+msgid "Number of transactions remaining:"
+msgstr "Anzahl verbleibender Buchungen:"
+
+#: dialogs/rc.cpp:121
+msgid "Date of final transaction:"
+msgstr "Datum der letzten Zahlung:"
+
+#: dialogs/rc.cpp:125
+msgid "Reconciliation Wizard"
+msgstr "Abgleich-Assistent"
+
+#: dialogs/rc.cpp:127
+msgid ""
+"Reconciling your account assures, that your recordings match those of your "
+"institution and that there are no mistakes on either side. You should "
+"reconcile your account whenever you receive a statement from your "
+"institution.\n"
+"\n"
+"All relevant information necessary for this process is usually printed on "
+"your statement.\n"
+"\n"
+"On the next page you will verify, that the starting and ending balance are "
+"matching those on your statement. If not, please modify the figures."
+msgstr ""
+"Der Abgleich eines Kontos stellt sicher, dass Ihre Aufzeichnungen mit den "
+"Aufzeichnungen Ihrer Bank übereinstimmen und auf beiden Seiten keine Fehler "
+"vorliegen. Sie sollten Ihr Konto bei jedem Eingang eines Kontoauszuges "
+"abgleichen.\n"
+"\n"
+"Alle für diesen Vorgang relevanten Informationen gehen in der Regel aus "
+"Ihrem Kontoauszug hervor.\n"
+"\n"
+"Auf der nächsten Seite stellen Sie sicher, dass die in KMyMoney Anfangs- und "
+"Schlusssalden mit denen auf dem Kontoauszug übereinstimmen."
+
+#: dialogs/rc.cpp:129
+msgid ""
+"KMyMoney calculates your loan payments automatically. The amounts can "
+"deviate from those calculated by the creditor. Therefore, you possibly have "
+"to adjust amortization, interest and other costs according to your "
+"statement.\n"
+"\n"
+"Please enter the following information found on your statement:"
+msgstr ""
+"KMyMoney berechnet Ihre Kreditzahlungen automatisch. Die Beträge können "
+"jedoch etwas von den vom Kreditgeber berechneten Beträgen abweichen. Sie "
+"müssen daher möglicherweise Tilgung, Zinsen und sonstige Kosten dem "
+"Kreditauszug anpassen.\n"
+"\n"
+"Geben Sie zunächst die folgenden Informationen von Ihrem Kreditauszug ein:"
+
+#: dialogs/rc.cpp:130
+msgid "Ending date of statement"
+msgstr "Enddatum des Auszuges"
+
+#: dialogs/rc.cpp:131
+msgid "Starting date of statement"
+msgstr "Anfangsdatum des Auszuges"
+
+#: dialogs/rc.cpp:132
+msgid "Verify payments"
+msgstr "Zahlungen überprüfen"
+
+#: dialogs/rc.cpp:133 dialogs/rc.cpp:148 dialogs/rc.cpp:476 dialogs/rc.cpp:477
+#: dialogs/rc.cpp:508 dialogs/rc.cpp:513 dialogs/rc.cpp:518 dialogs/rc.cpp:532
+#: dialogs/rc.cpp:539 dialogs/rc.cpp:540 dialogs/rc.cpp:541 dialogs/rc.cpp:542
+#: dialogs/rc.cpp:543 dialogs/rc.cpp:552 dialogs/rc.cpp:553 dialogs/rc.cpp:554
+#: dialogs/rc.cpp:555 dialogs/rc.cpp:556 dialogs/rc.cpp:565 dialogs/rc.cpp:566
+#: dialogs/rc.cpp:567 dialogs/rc.cpp:568 dialogs/rc.cpp:569 dialogs/rc.cpp:578
+#: dialogs/rc.cpp:579 dialogs/rc.cpp:580 dialogs/rc.cpp:581 dialogs/rc.cpp:582
+#: dialogs/rc.cpp:591 dialogs/rc.cpp:592 dialogs/rc.cpp:593 dialogs/rc.cpp:594
+#: dialogs/rc.cpp:595 dialogs/rc.cpp:603 dialogs/rc.cpp:604 dialogs/rc.cpp:605
+#: dialogs/rc.cpp:606 dialogs/rc.cpp:607 dialogs/rc.cpp:618 dialogs/rc.cpp:619
+#: dialogs/rc.cpp:621 dialogs/rc.cpp:636 dialogs/rc.cpp:637 dialogs/rc.cpp:638
+#: dialogs/rc.cpp:639 dialogs/rc.cpp:640 dialogs/rc.cpp:641 dialogs/rc.cpp:651
+#: dialogs/rc.cpp:652 dialogs/rc.cpp:654 dialogs/rc.cpp:657 dialogs/rc.cpp:658
+#: dialogs/rc.cpp:659 dialogs/rc.cpp:664 dialogs/rc.cpp:665 dialogs/rc.cpp:668
+#: dialogs/rc.cpp:670 dialogs/rc.cpp:672 dialogs/rc.cpp:674 dialogs/rc.cpp:676
+#: dialogs/rc.cpp:678 dialogs/rc.cpp:681 dialogs/rc.cpp:823 widgets/rc.cpp:167
+msgid "1"
+msgstr "1"
+
+#: dialogs/rc.cpp:136
+msgid ""
+"If your statement shows different amounts, please cancel this dialog and "
+"correct the false transactions or correct the values in this dialog. In the "
+"later case, KMyMoney will create an adjustment transaction and add it to the "
+"ledger."
+msgstr ""
+"Wenn Ihr Kreditauszug andere Beträge aufweist, verlassen Sie diesen "
+"Assistenten und passen die entsprechenden Buchungen an oder korrigieren Sie "
+"die Werte auf dieser Seite. Im zweiten Fall wird KMyMoney eine "
+"Korrekturbuchung erstellen und in das Kontobuch eintragen."
+
+#: dialogs/rc.cpp:138
+msgid ""
+"In order to create the adjustment transaction, KMyMoney requires an account "
+"and possibly an interest category to assign the differences to. Please "
+"select an account and - if necessary - a category."
+msgstr ""
+"Um eine Korrekturbuchung zu erstellen, benötigt KMyMoney ein Konto und "
+"möglicherweise eine Zinskategorie um die Differenzen zuzuweisen. Wählen Sie "
+"ein Gegenkonto und - wenn notwendig - eine Kategorie aus."
+
+#: dialogs/rc.cpp:140
+msgid "Interest-Category"
+msgstr "Zinskategorie"
+
+#: dialogs/rc.cpp:141
+msgid "Restarting postponed reconciliation"
+msgstr "Fortführen des Abgleichs"
+
+#: dialogs/rc.cpp:142
+msgid ""
+"You have previously postponed the reconciliation of this account. If you "
+"have entered charges or interests the last time you started reconciling this "
+"account you can modify these in the ledger later on.\n"
+"\n"
+"It is important, that you continue with the same statement you used when you "
+"postponed the reconciliation.\n"
+"\n"
+"All information you have entered into this wizard will be shown and all "
+"transactions that you already cleared are marked with a 'C'."
+msgstr ""
+"Sie haben den Abgleich dieses Kontos zuvor aufgeschoben. Wenn Sie beim "
+"letzten Mal Gebühren oder Zinsen eingetragen haben, können Sie diese später "
+"im Kontobuch ändern.\n"
+"\n"
+"Es ist wichtig, dass Sie den Abgleich mit dem selben Kontoauszug fortführen, "
+"den Sie beim Aufschieben des Abgleichs verwendet haben.\n"
+"\n"
+"Alle Informationen, die Sie zuvor im Abgleich-Assistenten eingegeben haben, "
+"werden weiter verwendet, und Buchungen, die Sie bereits als verrechnet "
+"markiert hatten, sind mit einem 'V' gekennzeichnet."
+
+#: dialogs/rc.cpp:143
+msgid "Statement Information"
+msgstr "Auszugsinformationen"
+
+#: dialogs/rc.cpp:144 dialogs/rc.cpp:315 dialogs/rc.cpp:317 dialogs/rc.cpp:320
+#: dialogs/rc.cpp:321 dialogs/rc.cpp:329 dialogs/rc.cpp:330 dialogs/rc.cpp:333
+#: dialogs/rc.cpp:334 dialogs/rc.cpp:335 dialogs/rc.cpp:336 dialogs/rc.cpp:366
+msgid "x"
+msgstr "x"
+
+#: dialogs/rc.cpp:145
+msgid "Statement date:"
+msgstr "Auszugsdatum:"
+
+#: dialogs/rc.cpp:146
+msgid "Starting balance of this statement:"
+msgstr "Anfangssaldo:"
+
+#: dialogs/rc.cpp:147
+msgid "Ending balance of this statement:"
+msgstr "Schlusssaldo:"
+
+#: dialogs/rc.cpp:149
+msgid "Interest / Charges"
+msgstr "Zinsen / Gebühren"
+
+#: dialogs/rc.cpp:150
+msgid ""
+"If necessary, enter information about interest or charges here. KMyMoney "
+"will create transactions and clear them directly for you."
+msgstr ""
+"Falls noch nicht in KMyMoney eingetragen, geben Sie bitte die Informationen "
+"für Gebühren und/oder Zinsen an. KMyMoney wird entsprechende Buchungen "
+"erstellen und für Sie verrechnen."
+
+#: dialogs/rc.cpp:153
+msgid "Charges"
+msgstr "Gebühren"
+
+#: dialogs/rc.cpp:154
+msgid "Enter Schedule"
+msgstr "Buchung planen"
+
+#: dialogs/rc.cpp:155
+msgid "Schedule Details"
+msgstr "Details dieser geplanten Buchung"
+
+#: dialogs/rc.cpp:156 dialogs/rc.cpp:348 dialogs/rc.cpp:389 widgets/rc.cpp:164
+msgid "Name:"
+msgstr "Name:"
+
+#: dialogs/rc.cpp:157 dialogs/rc.cpp:351 widgets/rc.cpp:165
+msgid "Type:"
+msgstr "Typ:"
+
+#: dialogs/rc.cpp:168
+msgid "Enter"
+msgstr "Eintragen"
+
+#: dialogs/rc.cpp:169
+msgid ""
+"Enter the transaction and advance the next due date of this schedule to the "
+"next payment date."
+msgstr ""
+"Erfasse die Buchung und setzte das Datum der nächsten Fälligkeit auf das "
+"nächste Zahldatum."
+
+#: dialogs/rc.cpp:171
+msgid ""
+"Do not enter the transaction but advance the next due date of this schedule "
+"to the next payment date."
+msgstr ""
+"Erfasse die Buchung nicht aber setzte das Fälligkeitsdatum auf das Datum der "
+"nächsten Fälligkeit."
+
+#: dialogs/rc.cpp:172
+msgid "Ignore"
+msgstr "Ignorieren"
+
+#: dialogs/rc.cpp:173
+msgid ""
+"Do not enter or skip payments for this schedule but continue with the next "
+"schedule."
+msgstr ""
+"Zahlungen für diese geplante Buchung abbrechen und mit der nächsten "
+"geplanten Buchung fortfahren."
+
+#: dialogs/rc.cpp:175
+msgid "Cancel processing of schedule entry."
+msgstr "Erfassen von geplanten Buchungen abbrechen."
+
+#: dialogs/rc.cpp:176
+msgid "Update Stock and Currency Prices"
+msgstr "Aktualisiere Aktien- und Währungskurse"
+
+#: dialogs/rc.cpp:177
+msgid "List of known Equities, and the date they were last updated on."
+msgstr ""
+"Liste der bekannten Wertpapiere und den Zeitpunkten der letzten "
+"Aktualisierungen."
+
+#: dialogs/rc.cpp:179
+msgid "Update All"
+msgstr "Aktualisiere alles"
+
+#: dialogs/rc.cpp:180
+msgid "Update Selected"
+msgstr "Ausgewählte aktualisieren"
+
+#: dialogs/rc.cpp:181
+msgid "Status:"
+msgstr "Status:"
+
+#: dialogs/rc.cpp:184
+msgid "QIF Export"
+msgstr "QIF-Export"
+
+#: dialogs/rc.cpp:185
+msgid ""
+"From this dialog you are able to export transactions to a quicken compatible "
+"file, (known as a QIF file, because of the extension). Please enter the "
+"path to the QIF file or select it by clicking on the Browse button.\n"
+"\n"
+"You can choose the file's path, the account and the format of the QIF file "
+"(profile). Choose Account to export all the transactions between the "
+"specified dates or just categories. You can also limit the transactions "
+"that are exported by start and ending date. Once you have pressed the "
+"Export button a message box will appear when the export has completed "
+"detailing how many transactions, categories and payees were exported."
+msgstr ""
+"Mit diesem Dialog können Sie Buchungen in eine Quicken kompatible Datei "
+"(auch bekannt als QIF-Datei) exportieren. Bitte geben Sie den Pfad zur QIF-"
+"Datei oder wählen Sie eine mithilfe des Durchsuchen-Knopfes.\n"
+"\n"
+"Sie können den Dateipfad, das Konto und das Format für die QIF-Datei "
+"(Profil) wählen. Wählen Sie Konto, um alle Buchungen im angegebenen "
+"Datumsbereich zu exportieren, oder wählen Sie einfach nur Kategorie. Sobald "
+"Sie den Exportieren-Knopf gedrückt haben, erscheint nach dem Exportvorgang "
+"ein Nachrichtenfenster, das Sie über die Anzahl der exportierten Buchungen, "
+"Kategorien und Zahlungsempfänger informiert."
+
+#: dialogs/rc.cpp:186
+msgid "File to export to:"
+msgstr "Dateiname:"
+
+#: dialogs/rc.cpp:188
+msgid "Account to export"
+msgstr "Zu exportierendes Konto"
+
+#: dialogs/rc.cpp:189 dialogs/rc.cpp:297
+msgid "QIF Profile"
+msgstr "QIF-Profil"
+
+#: dialogs/rc.cpp:190 dialogs/rc.cpp:298 dialogs/rc.cpp:362
+#: widgets/kmymoneypriceview.cpp:145
+msgid "New..."
+msgstr "Neu..."
+
+#: dialogs/rc.cpp:191
+msgid "Contents to Export"
+msgstr "Zu exportierende Daten"
+
+#: dialogs/rc.cpp:194
+msgid "Date Range"
+msgstr "Datumsbereich"
+
+#: dialogs/rc.cpp:199
+msgid "Search transactions"
+msgstr "Buchungen suchen"
+
+#: dialogs/rc.cpp:200
+msgid "Criteria"
+msgstr "Kriterien"
+
+#: dialogs/rc.cpp:201
+msgid "Define your search criteria"
+msgstr "Suchkriterien bestimmen"
+
+#: dialogs/kfindtransactiondlg.cpp:169 dialogs/rc.cpp:202
+msgid "Text"
+msgstr "Text"
+
+#: dialogs/rc.cpp:203
+msgid "Contains"
+msgstr "Enthält"
+
+#: dialogs/rc.cpp:204
+msgid "Does not contain"
+msgstr "Enthält nicht"
+
+#: dialogs/rc.cpp:205
+msgid "Treat text as regular expression"
+msgstr "Text als regulären Ausdruck interpretieren"
+
+#: dialogs/rc.cpp:206
+msgid "Case sensitive"
+msgstr "Groß-/Kleinschreibung beachten"
+
+#: dialogs/rc.cpp:209
+msgid "Range"
+msgstr "Bereich"
+
+#: dialogs/rc.cpp:210
+msgid ""
+"_: To (Date)\n"
+"To"
+msgstr "Bis"
+
+#: dialogs/rc.cpp:211
+msgid ""
+"_: From (Date)\n"
+"From"
+msgstr "Von"
+
+#: dialogs/rc.cpp:213
+msgid "Search this amount"
+msgstr "Suche diesen Betrag"
+
+#: dialogs/rc.cpp:214
+msgid "Search amount in the range"
+msgstr "Suche nach Betrag im Bereich"
+
+#: dialogs/rc.cpp:215
+msgid ""
+"_: to (amount)\n"
+"to"
+msgstr "bis"
+
+#: dialogs/rc.cpp:216
+msgid ""
+"_: from (amount)\n"
+"from"
+msgstr "von"
+
+#: dialogs/rc.cpp:220
+msgid "Select transactions without payees"
+msgstr "Buchungen ohne Empfänger auswählen"
+
+#: dialogs/rc.cpp:221
+msgid "Select all"
+msgstr "Alle auswählen"
+
+#: dialogs/rc.cpp:222
+msgid "Select none"
+msgstr "Keine auswählen"
+
+#: dialogs/rc.cpp:224
+msgid "Validity"
+msgstr "Gültigkeit"
+
+#: dialogs/rc.cpp:226
+msgid "All states"
+msgstr "Alle Zustände"
+
+#: dialogs/rc.cpp:230
+msgid "All types"
+msgstr "Alle Typen"
+
+#: dialogs/rc.cpp:234
+msgid "Any transaction"
+msgstr "Jede Buchung"
+
+#: dialogs/rc.cpp:235
+msgid "Valid transaction"
+msgstr "Gültige Buchung"
+
+#: dialogs/rc.cpp:236
+msgid "Invalid transaction"
+msgstr "Ungültige Buchung"
+
+#: dialogs/rc.cpp:237
+msgid "State"
+msgstr "Zustand"
+
+#: dialogs/rc.cpp:238
+msgid "Search this number"
+msgstr "Nach dieser Nummer suchen"
+
+#: dialogs/rc.cpp:239
+msgid "Search number in range"
+msgstr "Suche nach Nummer im Bereich"
+
+#: dialogs/rc.cpp:240
+msgid ""
+"_: to (number)\n"
+"to"
+msgstr "bis"
+
+#: dialogs/rc.cpp:241
+msgid ""
+"_: from (number)\n"
+"from"
+msgstr "von"
+
+#: dialogs/rc.cpp:242
+msgid "text"
+msgstr "Text"
+
+#: dialogs/rc.cpp:243
+msgid "warning"
+msgstr "Warnung"
+
+#: dialogs/rc.cpp:244
+msgid "Result"
+msgstr "Resultat"
+
+#: dialogs/rc.cpp:254
+msgid "F"
+msgstr "F"
+
+#: dialogs/rc.cpp:257 dialogs/rc.cpp:844
+msgid "&Reset"
+msgstr "&Zurücksetzen"
+
+#: dialogs/rc.cpp:258
+msgid "&Find"
+msgstr "&Suche"
+
+#: dialogs/rc.cpp:259
+msgid "GnuCash Import Options"
+msgstr "GnuCash-Importoptionen"
+
+#: dialogs/rc.cpp:260
+msgid "Use 'Help' for more information on these options"
+msgstr "Benutzen Sie 'Hilfe' für weitere Informationen über diese Optionen"
+
+#: dialogs/rc.cpp:261
+msgid "Investment Handling"
+msgstr "Investitions-Handhabung"
+
+#: dialogs/rc.cpp:262
+msgid "One investment account for each stock"
+msgstr "Ein Investmentkonto für jedes Wertpapier"
+
+#: dialogs/rc.cpp:263
+msgid "One investment account for all stocks"
+msgstr "Ein Investmentkonto für alle Wertpapiere"
+
+#: dialogs/rc.cpp:264
+msgid "Prompt for an investment account for each stock"
+msgstr "Geben Sie ein Investmentkonto für jedes Wertpapier ein"
+
+#: dialogs/rc.cpp:265
+msgid "Online price quotes"
+msgstr "Online-Kursnotizen"
+
+#: dialogs/rc.cpp:266
+msgid "Use Finance::Quote for share price quotes"
+msgstr "Benutzen Sie Finance::Quote für Aktienkurse"
+
+#: dialogs/rc.cpp:267
+msgid "Scheduled Transactions"
+msgstr "Geplante Buchungen"
+
+#: dialogs/rc.cpp:268
+msgid "Drop suspect scheduled transactions"
+msgstr "Fragwürdige geplante Buchungen auslassen"
+
+#: dialogs/rc.cpp:269
+msgid "Decoding option"
+msgstr "Dekodierungsoption"
+
+#: dialogs/rc.cpp:270
+msgid "Decode using"
+msgstr "Dekodierung verwendet"
+
+#: dialogs/rc.cpp:271
+msgid "Transaction Notes option"
+msgstr "Notizoption"
+
+#: dialogs/rc.cpp:272
+msgid "Use transaction notes on non-split transactions"
+msgstr "Verwende Transaktionsnotiz wenn keine Teilbuchungen existieren"
+
+#: dialogs/rc.cpp:273
+msgid "Debug Options"
+msgstr "Debug-Optionen"
+
+#: dialogs/rc.cpp:274
+msgid "General debug data"
+msgstr "Allgemeine Debug-Daten"
+
+#: dialogs/rc.cpp:275
+msgid "Display XML data"
+msgstr "Zeige XML-Daten an"
+
+#: dialogs/rc.cpp:276
+msgid "Anonymize data"
+msgstr "Anonymisiere Daten"
+
+#: dialogs/rc.cpp:281
+msgid "Online Quotes - Select price source"
+msgstr "Online-Kursnotiz - Auswahl der Preisquellen"
+
+#: dialogs/rc.cpp:284
+msgid "This price source is not known to KMyMoney. Please select an option below."
+msgstr ""
+"Die Preisquelle ist KMyMoney nicht bekannt. Bitte wählen Sie eine der unten "
+"angegebenen Optionen."
+
+#: dialogs/rc.cpp:285
+msgid "Do not perform online quotes for this investment"
+msgstr "Für dieses Investment keine Online Aktualisierung durchführen"
+
+#: dialogs/rc.cpp:286
+msgid "Select a known KMyMoney source from the list below"
+msgstr "Wählen Sie eine bekannte KMyMoney Quelle aus der unten stehenden Liste"
+
+#: dialogs/rc.cpp:287
+msgid ""
+"Use the following name for the price source.\n"
+"(Click Help for further information.)"
+msgstr ""
+"Benutzen Sie den folgenden Namen für die Preisquelle.\n"
+"(Klicken Sie Hilfe für weitere Informationen.)"
+
+#: dialogs/rc.cpp:288
+msgid "Always use this selection for this price source."
+msgstr "Diese Auswahl immer für diese Preisquelle nutzen."
+
+#: dialogs/rc.cpp:289
+msgid "QIF Import"
+msgstr "QIF-Import"
+
+#: dialogs/rc.cpp:290
+msgid ""
+"From this dialog you are able to import transactions from a Quicken<b>&trade;"
+"</b> compatible file, (known as a QIF file, because of the extension).<p>\n"
+"\n"
+"Please enter the path to the QIF file or select it by clicking on the Browse "
+"button. Once you have the file's path press the Import button and KMyMoney "
+"will import all the transactions, categories and payees it finds."
+msgstr ""
+"Sie können mit diesem Dialog Buchungen aus einer Quicken<b>&trade;</b> "
+"kompatiblen Datei (QIF-Datei) importieren.\n"
+"\n"
+"Bitte geben Sie den Dateinamen der QIF-Datei an oder drücken Sie den "
+"Durchsuchen-Knopf um die Datei zu suchen. Sobald Sie den Import-Knopf "
+"drücken wird KMyMoney alle Buchungen Kategorien und Zahlungsempfänger aus "
+"der angegebenen Datei importieren."
+
+#: dialogs/rc.cpp:291
+msgid "QIF File to Import:"
+msgstr "Zu importierende QIF-Datei:"
+
+#: dialogs/rc.cpp:292
+msgid "Import options"
+msgstr "Importoptionen"
+
+#: dialogs/rc.cpp:293
+msgid "Bank statement"
+msgstr "Kontoauszug"
+
+#: dialogs/rc.cpp:294
+msgid "Other application"
+msgstr "Andere Anwendung"
+
+#: dialogs/rc.cpp:295
+msgid ""
+"Select <b>Bank statement</b> turns on automatic category matching which is "
+"turned off in case of <b>Historic data</b>. Use the latter if you import "
+"files from other Personal Finance Management software."
+msgstr ""
+"Die Anwahl von <b>Kontoauszug</b> schaltet die automatische Zuweisung von "
+"Kategorien ein. Die Anwahl von <b>Historische Daten</b> schaltet diese "
+"Zuweisung aus. Verwenden Sie die letztere Einstellung, wenn Sie Daten von "
+"anderen Finanzapplikationen einlesen."
+
+#: dialogs/rc.cpp:296
+msgid "Source of QIF"
+msgstr "Quelle der QIF-Datei"
+
+#: dialogs/rc.cpp:302
+msgid "Verify Import"
+msgstr "Import überprüfen"
+
+#: dialogs/rc.cpp:304
+msgid "Ok"
+msgstr "OK"
+
+#: dialogs/rc.cpp:306
+msgid "MyDialog"
+msgstr "Dialog"
+
+#: dialogs/rc.cpp:310
+msgid "File Information"
+msgstr "Datei-Informationen"
+
+#: dialogs/rc.cpp:316
+msgid "Last modified on"
+msgstr "Zuletzt verändert am"
+
+#: dialogs/rc.cpp:319
+msgid "Base currency"
+msgstr "Basis-Währung"
+
+#: dialogs/rc.cpp:322
+msgid "Created on"
+msgstr "Erstellt am"
+
+#: dialogs/rc.cpp:325
+msgid "Accounts/Categories"
+msgstr "Konten/Kategorien"
+
+#: dialogs/rc.cpp:328
+msgid "Closed"
+msgstr "Geschlossen"
+
+#: dialogs/rc.cpp:331
+msgid "Prices"
+msgstr "Preise"
+
+#: dialogs/rc.cpp:337
+msgid "Splits"
+msgstr "Teilbuchungen"
+
+#: dialogs/rc.cpp:338
+msgid "Price Editor"
+msgstr "Preiseditor"
+
+#: dialogs/rc.cpp:339
+msgid "Show all stored prices"
+msgstr "Zeige alle gespeicherten Preise an"
+
+#: dialogs/rc.cpp:343
+msgid "Delete Range..."
+msgstr "Bereich löschen..."
+
+#: dialogs/rc.cpp:346
+msgid "New Account Dialog"
+msgstr "Dialog für neue Konten"
+
+#: dialogs/rc.cpp:349
+msgid "Opening information"
+msgstr "Eröffnungs-Informationen"
+
+#: dialogs/rc.cpp:350
+msgid "Currency:"
+msgstr "Währung:"
+
+#: dialogs/rc.cpp:352 dialogs/rc.cpp:793
+msgid "Date:"
+msgstr "Datum:"
+
+#: dialogs/rc.cpp:353
+msgid "Balance:"
+msgstr "Saldo:"
+
+#: dialogs/rc.cpp:355
+msgid "Last check number:"
+msgstr "Letzte Schecknummern:"
+
+#: dialogs/rc.cpp:356
+msgid "Notes:"
+msgstr "Notizen:"
+
+#: dialogs/rc.cpp:357
+msgid "No auto-VAT-assignment"
+msgstr "Keine automatische Mwst.-Zuweisung"
+
+#: dialogs/rc.cpp:358 dialogs/rc.cpp:441
+msgid "Price entry"
+msgstr "Kurs eingeben"
+
+#: dialogs/rc.cpp:359
+msgid "Preferred Account"
+msgstr "Bevorzugtes Konto"
+
+#: dialogs/rc.cpp:363
+msgid "Number:"
+msgstr "Nummer:"
+
+#: dialogs/rc.cpp:364 dialogs/rc.cpp:395
+msgid "BIC"
+msgstr "SWIFT/BIC"
+
+#: dialogs/rc.cpp:367
+msgid "Hierarchy"
+msgstr "Hierarchie"
+
+#: dialogs/rc.cpp:368
+msgid "Subaccount"
+msgstr "Unterkonto"
+
+#: dialogs/rc.cpp:369
+msgid "Limits"
+msgstr "Limits"
+
+#: dialogs/rc.cpp:370
+msgid ""
+"This page allows to setup certain limits. KMyMoney will warn you when the "
+"account balance reaches a limit."
+msgstr ""
+"Diese Seite erlaubt die Definition bestimmter Limits. KMyMoney wird warnen, "
+"sobald das Saldo bestimmte Limits erreicht."
+
+#: dialogs/rc.cpp:372
+msgid "Absolute limit"
+msgstr "Absolutes Limit"
+
+#: dialogs/rc.cpp:373
+msgid "Maximum credit limit"
+msgstr "Maximales Kredit-Limit"
+
+#: dialogs/rc.cpp:374
+msgid "Minimum balance"
+msgstr "Saldomindestbetrag"
+
+#: dialogs/rc.cpp:375
+msgid "Early warning"
+msgstr "Frühwarnung"
+
+#: dialogs/rc.cpp:377
+msgid "VAT details"
+msgstr "Mwst-Details"
+
+#: dialogs/rc.cpp:378
+msgid "VAT category"
+msgstr "Mwst-Kategorie"
+
+#: dialogs/rc.cpp:379
+msgid "VAT percentage"
+msgstr "Mwst-Prozentsatz"
+
+#: dialogs/rc.cpp:380
+msgid "Enable auto VAT assignment"
+msgstr "Aktiviere automatische Mwst-Zuweisung"
+
+#: dialogs/rc.cpp:381
+msgid "Amount entered"
+msgstr "Eingegebener Betrag ist"
+
+#: dialogs/rc.cpp:382
+msgid "Gross amount"
+msgstr "Bruttobetrag"
+
+#: dialogs/rc.cpp:383
+msgid "Net amount"
+msgstr "Nettobetrag"
+
+#: dialogs/rc.cpp:384
+msgid "Include on Tax Reports"
+msgstr "In Steuerbericht aufnehmen"
+
+#: dialogs/rc.cpp:387
+msgid "New Institution Dialog"
+msgstr "Neues Geldinstitut"
+
+#: dialogs/rc.cpp:388
+msgid "Institution Details"
+msgstr "Details zum Geldinstitut"
+
+#: dialogs/rc.cpp:390
+msgid "City:"
+msgstr "Ort:"
+
+#: dialogs/rc.cpp:394
+msgid "Routing Number:"
+msgstr "Bankleitzahl:"
+
+#: dialogs/rc.cpp:398
+msgid "New Budget"
+msgstr "Neues Budget"
+
+#: dialogs/rc.cpp:403
+msgid "New Equity"
+msgstr "Neue Kapitalanlage"
+
+#: dialogs/rc.cpp:406 dialogs/rc.cpp:407
+msgid "Trading Symbol of the stock or mutual fund, not required."
+msgstr "Wertpapierkennzeichen wird nicht benötigt."
+
+#: dialogs/rc.cpp:414 dialogs/rc.cpp:415
+msgid "Name of the company, or mutual fund."
+msgstr "Name der Firma oder der Kapitalanlagengesellschaft."
+
+#: dialogs/rc.cpp:418
+msgid "New File Dialog"
+msgstr "Dialog für neue Dateien"
+
+#: dialogs/rc.cpp:419
+msgid ""
+"Use this dialog to enter personal information about yourself.\n"
+"\n"
+"All information is optional and is provided to personalize\n"
+"your KMyMoney file."
+msgstr ""
+"Verwenden Sie diesen Dialog, um Ihre persönlichen Informationen einzugeben.\n"
+"\n"
+"Alle Informationen sind optional und werden zur Personalisierung Ihrer "
+"KMyMoney-Datei hinterlegt."
+
+#: dialogs/rc.cpp:430
+msgid "New Investment wizard"
+msgstr "Neue Investitionen-Assistent"
+
+#: dialogs/rc.cpp:431
+msgid "Investment Type"
+msgstr "Investitions Typ"
+
+#: dialogs/rc.cpp:432
+msgid "This wizard allows you to create a new investment."
+msgstr "Dieser Assistent unterstützt das Erstellen eines neuen Anlage."
+
+#: dialogs/rc.cpp:433
+msgid ""
+"The first step in this process requires to select the type of investment. "
+"The following steps collect more details about the investment from you."
+msgstr ""
+"Im ersten Schritt dieses Prozesses wird die Art der Anlage ausgewählt. Die "
+"folgenden Schritte werden dann weitere Details abfragen."
+
+#: dialogs/rc.cpp:434
+msgid "Type of investment"
+msgstr "Art der Anlage"
+
+#: dialogs/rc.cpp:438
+msgid "Investment details"
+msgstr "Anlagedetails"
+
+#: dialogs/rc.cpp:439
+msgid ""
+"Enter the details below and click <b>Next</b> to continue entering the "
+"online update details."
+msgstr ""
+"Füllen Sie die unten stehenden Angaben aus und klicken Sie auf <b>Weiter</b> "
+"um weitere Angaben zur Online Aktualisierung einzugeben."
+
+#: dialogs/rc.cpp:442 dialogs/rc.cpp:728
+msgid "Fraction"
+msgstr "Stückelung"
+
+#: dialogs/rc.cpp:443
+msgid "Trading Currency"
+msgstr "Handelswährung"
+
+#: dialogs/rc.cpp:444
+msgid "Full name"
+msgstr "Name"
+
+#: dialogs/rc.cpp:445
+msgid "AMEX"
+msgstr "AMEX"
+
+#: dialogs/rc.cpp:446
+msgid "EUREX"
+msgstr "EUREX"
+
+#: dialogs/rc.cpp:447
+msgid "FUND"
+msgstr "FUND"
+
+#: dialogs/rc.cpp:448
+msgid "NASDAQ"
+msgstr "NASDAQ"
+
+#: dialogs/rc.cpp:449
+msgid "NYSE"
+msgstr "NYSE"
+
+#: dialogs/rc.cpp:450
+msgid "XETRA"
+msgstr "XETRA"
+
+#: dialogs/rc.cpp:451
+msgid "Trading symbol"
+msgstr "Börsensymbol"
+
+#: dialogs/rc.cpp:452
+msgid "Identification"
+msgstr "Identifikation"
+
+#: dialogs/rc.cpp:453
+msgid "Enter the ticker symbol (e.g. RHAT)."
+msgstr "Ticker-Symbol (z.B. RHAT) eingeben."
+
+#: dialogs/rc.cpp:454
+msgid "Enter the CUSIP/ISIN/WKN identification number here"
+msgstr "Geben Sie die CUSIP/ISIN/WK-Nummer hier ein"
+
+#: dialogs/rc.cpp:455
+msgid "Trading market"
+msgstr "Handelsplatz"
+
+#: dialogs/rc.cpp:456
+msgid "Online Update"
+msgstr "Online Update"
+
+#: dialogs/rc.cpp:457
+msgid ""
+"Select an online source and click <b>Finish</b> to store the investment "
+"data. If you don't want to use online updates, just leave the data as is."
+msgstr ""
+"Wählen Sie eine Online-Quelle und klicken Sie auf <b>Fertig</b> um die "
+"Investment-Daten zu speichern. Für den Fall, dass Sie keine Online "
+"Aktualisierung verwenden wollen, lassen Sie die Eingaben einfach wie sie "
+"sind."
+
+#: dialogs/rc.cpp:458
+msgid "Use Finance::Quote"
+msgstr "Benutzen Sie Finance::Quote"
+
+#: dialogs/rc.cpp:460
+msgid "Factor"
+msgstr "Faktor"
+
+#: dialogs/rc.cpp:461
+msgid "New Loan Wizard"
+msgstr "Assistent für neues Kreditkonto"
+
+#: dialogs/rc.cpp:462
+msgid "New Loan Account Wizard"
+msgstr "Assistent für neues Kreditkonto"
+
+#: dialogs/rc.cpp:463
+msgid ""
+"\n"
+"Welcome to the New Loan Account Wizard which will guide you through the "
+"creation of a new loan e.g. for your home, your car or any other loan that "
+"you pay or gain interest for.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Willkommen zum Kreditkonto-Erstellungs-Assistenten. Dieser wird Ihnen "
+"helfen, einen Konto zur Verwaltung eines Kredites, z.B. für Ihr Haus, Ihr "
+"Auto oder irgend einen anderen Kredit, für den Sie Zinsen zahlen oder "
+"erhalten, zu erstellen.\n"
+"\n"
+"Bitte versichern Sie sich, dass Sie die relevanten Informationen zur Hand "
+"haben. Üblicherweise finden Sie die Informationen in Ihrem Kreditvertrag und "
+"im letzten Kontoauszug."
+
+#: dialogs/rc.cpp:464
+msgid "Edit Loan Account Wizard"
+msgstr "Assistent zum Anpassen eines Kreditkontos"
+
+#: dialogs/rc.cpp:465
+msgid ""
+"\n"
+"Welcome to the Edit Loan Account Wizard. Please use this wizard to modify "
+"information about your loan account.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Willkommen zum Kreditkonto-Bearbeitungs-Assistenten. Verwenden Sie diesen "
+"Assistenten zum Bearbeiten von Informationen eines Kreditkontos.\n"
+"\n"
+"Bitte versichern Sie sich, dass Sie die relevanten Informationen zur Hand "
+"haben. Üblicherweise finden Sie die Informationen in Ihrem Kreditvertrag und "
+"im letzten Kontoauszug."
+
+#: dialogs/rc.cpp:467
+msgid ""
+"\n"
+"In the first step, KMyMoney will ask you some general information about the "
+"loan account to be created."
+msgstr ""
+"\n"
+"Im ersten Schritt wird KMyMoney allgemeine Informationen über Ihren neuen "
+"Kredit von Ihnen erfragen."
+
+#: dialogs/rc.cpp:468 dialogs/rc.cpp:522 dialogs/rc.cpp:610
+msgid "1. General Information"
+msgstr "1. Allgemeine Informationen"
+
+#: dialogs/rc.cpp:469
+msgid ""
+"\n"
+"2. Calculate Loan\n"
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"2. Kredit berechnen\n"
+"\n"
+"3. Zahlungen"
+
+#: dialogs/rc.cpp:470
+msgid "Edit selection"
+msgstr "Änderungsauswahl"
+
+#: dialogs/rc.cpp:471
+msgid ""
+"\n"
+"Please select, which data of the loan you want to modify."
+msgstr ""
+"\n"
+"Bitte wählen Sie, welche Kredit-Informationen Sie bearbeiten wollen."
+
+#: dialogs/rc.cpp:472
+msgid "Modify the interest rate"
+msgstr "Zinssatz bearbeiten"
+
+#: dialogs/rc.cpp:473
+msgid "Modify additional fees"
+msgstr "Zusatzkosten bearbeiten"
+
+#: dialogs/rc.cpp:474
+msgid "Modify other loan information"
+msgstr "Sonstige Kreditinformationen bearbeiten"
+
+#: dialogs/rc.cpp:475
+msgid "Effective date"
+msgstr "Änderung wirksam ab"
+
+#: dialogs/rc.cpp:478
+msgid "When should the changes become active?"
+msgstr "Wann sollen die Änderungen gültig werden?"
+
+#: dialogs/rc.cpp:479
+msgid "Lending or borrowing money"
+msgstr "Kredit geben oder aufnehmen"
+
+#: dialogs/rc.cpp:480
+msgid ""
+"\n"
+"Do you borrow or lend money?"
+msgstr ""
+"\n"
+"Geben Sie einen Kredit, oder nehmen Sie einen Kredit auf?"
+
+#: dialogs/rc.cpp:483
+msgid "Name of the loan"
+msgstr "Name des Kredits"
+
+#: dialogs/rc.cpp:484
+msgid ""
+"\n"
+"How do you want to call this loan? Examples for names are 'car loan', "
+"'school loan', 'home owner loan'."
+msgstr ""
+"\n"
+"Wie möchten Sie diesen Kredit nennen? Verwenden Sie einen beschreibenden "
+"Name wie z.B. 'Hausbaukredit' oder 'Kredit fürs Auto'."
+
+#: dialogs/rc.cpp:486
+msgid "TextLabel6"
+msgstr "TextLabel6"
+
+#: dialogs/rc.cpp:487
+msgid "TextLabel7"
+msgstr "TextLabel7"
+
+#: dialogs/rc.cpp:488
+msgid "Type of interest"
+msgstr "Art der Zinsen"
+
+#: dialogs/rc.cpp:489
+msgid ""
+"\n"
+"Is the interest of this loan fixed over a period of time or is it adapted "
+"from time to time? If the interest rate changes during the amortization "
+"phase of the loan you should choose the option 'variable interest rate'."
+msgstr ""
+"\n"
+"Ist der Zinssatz für diesen Kredit über die Laufzeit fest oder wird der "
+"Zinssatz während der Laufzeit angepasst? Wenn er sich während der "
+"Tilgungsphase ändert, sollten Sie \"Variabler Zinssatz\" wählen."
+
+#: dialogs/rc.cpp:490
+msgid "Fixed interest rate"
+msgstr "Fester Zinssatz"
+
+#: dialogs/rc.cpp:491
+msgid "Variable interest rate"
+msgstr "Variabler Zinssatz"
+
+#: dialogs/rc.cpp:492
+msgid "Payments?"
+msgstr "Zahlungen?"
+
+#: dialogs/rc.cpp:493
+msgid ""
+"\n"
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?"
+msgstr ""
+"\n"
+"Wurden bereits Zahlungen für diesen Kredit geleistet, unabhängig davon ob "
+"diese in KMyMoney eingetragen sind oder nicht?"
+
+#: dialogs/rc.cpp:494
+msgid "No, no payments were made yet."
+msgstr "Nein, bislang wurden keine Zahlungen geleistet."
+
+#: dialogs/rc.cpp:495
+msgid "Yes, payments were made."
+msgstr "Ja, es wurden bereits Zahlungen geleistet."
+
+#: dialogs/rc.cpp:496
+msgid ""
+"Note: Payments made to obtain the loan (e.g. Dissagio) are not considered as "
+"payments in this context."
+msgstr ""
+"Hinweis: Beträge, die zum Erhalt des Kredits an den Kreditgeber gezahlt "
+"wurden (z.B. Dissagio) werden in diesem Zusammenhang nicht als Zahlung "
+"angesehen."
+
+#: dialogs/rc.cpp:497
+msgid "Recording payments?"
+msgstr "Zahlungen aufnehmen?"
+
+#: dialogs/rc.cpp:498
+msgid ""
+"\n"
+"Do you want to record all payments of this loan with KMyMoney?"
+msgstr ""
+"\n"
+"Wollen Sie alle Zahlungen für diesen Kredits mit KMyMoney aufzeichnen?"
+
+#: dialogs/rc.cpp:499
+msgid "Yes, record all payments."
+msgstr "Ja, alle Zahlungen aufzeichnen."
+
+#: dialogs/rc.cpp:500
+msgid "No, only record payments since the beginning of this year."
+msgstr "Nein, nur Zahlungen seit Beginn dieses Jahres aufzeichnen."
+
+#: dialogs/rc.cpp:501
+msgid "Date of next interest change"
+msgstr "Datum der nächsten Zinsänderung"
+
+#: dialogs/rc.cpp:502
+msgid ""
+"\n"
+"Select the date when the interest rate for this loan will be modified and "
+"the frequency of the future changes."
+msgstr ""
+"\n"
+"Wählen Sie das Datum, an dem der Zinssatz geändert wird und die Häufigkeit "
+"zukünftiger Änderungen."
+
+#: dialogs/rc.cpp:503
+msgid "Next interest change on"
+msgstr "Nächste Zinssatzänderung am"
+
+#: dialogs/rc.cpp:504
+msgid "Time until next change"
+msgstr "Nächste Änderung in"
+
+#: dialogs/rc.cpp:506 dialogs/rc.cpp:571
+msgid ""
+"\n"
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"\n"
+"Bitte geben Sie den Betrag an, den Sie für Zinsen und Tilgung zahlen, oder "
+"lassen Sie das Feld leer, um diesen Wert vom Assistenten berechnen zu lassen."
+
+#: dialogs/rc.cpp:507
+msgid "Current amount"
+msgstr "Aktueller Betrag"
+
+#: dialogs/rc.cpp:510
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the amount for principal and interest then enter "
+"it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"KMyMoney berechnet entweder den Zinssatz oder den Betrag für Zins und "
+"Tilgung. Wenn Sie den Wert für Zins und Tilgung kennen, können Sie ihn hier "
+"eingeben.\n"
+"\n"
+"Wenn KMyMoney den Betrag für Sie berechnen soll, lassen Sie das Feld einfach "
+"leer."
+
+#: dialogs/rc.cpp:512 dialogs/rc.cpp:545
+msgid ""
+"\n"
+"Please enter the interest rate or leave the field empty to calculate it."
+msgstr ""
+"\n"
+"Bitte geben Sie den Zinssatz an oder lassen Sie das Feld leer, um den "
+"Zinssatz vom Assistenten berechnen zu lassen."
+
+#: dialogs/rc.cpp:514
+msgid "Current rate"
+msgstr "Aktueller Zinssatz"
+
+#: dialogs/rc.cpp:516
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the interest rate then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"KMyMoney berechnet entweder den Zinssatz oder den Geldbetrag für Zins und "
+"Tilgung. Wenn Sie den Zinssatz kennen, können Sie ihn hier eingeben.\n"
+"\n"
+"Wenn KMyMoney den Betrag für Sie berechnen soll, lassen Sie das Feld einfach "
+"leer."
+
+#: dialogs/rc.cpp:517
+msgid "Date of first payment"
+msgstr "Datum der ersten Zahlung"
+
+#: dialogs/rc.cpp:520
+msgid "Calculate Loan"
+msgstr "Kredit berechnen"
+
+#: dialogs/rc.cpp:521
+msgid ""
+"\n"
+"You have successfully entered the general information about your loan. Next, "
+"KMyMoney needs some information about the calculation of the loan."
+msgstr ""
+"\n"
+"Sie haben die allgemeinen Informationen über Ihren Kredit "
+"erfolgreicheingegeben. Als nächstes wird KMyMoney einige Informationen zur "
+"Berechnung des Kredits erfragen."
+
+#: dialogs/rc.cpp:523 dialogs/rc.cpp:611
+msgid ""
+"\n"
+"2. Calculate Loan"
+msgstr ""
+"\n"
+"2. Kredit berechnen"
+
+#: dialogs/rc.cpp:524 dialogs/rc.cpp:612
+msgid ""
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"3. Zahlungen"
+
+#: dialogs/rc.cpp:526
+msgid ""
+"\n"
+"How often will there be payments made to this loan?"
+msgstr ""
+"\n"
+"Wie oft werden Zahlungen für diesen Kredit geleistet?"
+
+#: dialogs/rc.cpp:527
+msgid "Interest calculation"
+msgstr "Zinsberechnung"
+
+#: dialogs/rc.cpp:528
+msgid ""
+"\n"
+"When does the actual interest rate get calculated?"
+msgstr ""
+"\n"
+"Wann wird der tatsächliche Zinsanteil berechnet?"
+
+#: dialogs/rc.cpp:529
+msgid "When the payment is received."
+msgstr "Wenn die Zahlung erfolgt ist."
+
+#: dialogs/rc.cpp:530
+msgid "When the payment is due."
+msgstr "Wenn die Zahlung fällig ist."
+
+#: dialogs/rc.cpp:534 dialogs/rc.cpp:547 dialogs/rc.cpp:560 dialogs/rc.cpp:573
+#: dialogs/rc.cpp:586 dialogs/rc.cpp:598 dialogs/rc.cpp:679
+msgid "Loan amount:"
+msgstr "Kreditbetrag:"
+
+#: dialogs/rc.cpp:535 dialogs/rc.cpp:548 dialogs/rc.cpp:561 dialogs/rc.cpp:574
+#: dialogs/rc.cpp:587 dialogs/rc.cpp:599 dialogs/rc.cpp:633 dialogs/rc.cpp:671
+msgid "Interest rate:"
+msgstr "Zinssatz:"
+
+#: dialogs/rc.cpp:536 dialogs/rc.cpp:549 dialogs/rc.cpp:562 dialogs/rc.cpp:575
+#: dialogs/rc.cpp:588 dialogs/rc.cpp:600 dialogs/rc.cpp:669
+msgid "Term:"
+msgstr "Laufzeit:"
+
+#: dialogs/rc.cpp:537 dialogs/rc.cpp:550 dialogs/rc.cpp:563 dialogs/rc.cpp:576
+#: dialogs/rc.cpp:589 dialogs/rc.cpp:601 dialogs/rc.cpp:622 dialogs/rc.cpp:630
+#: dialogs/rc.cpp:677
+msgid "Principal + Interest:"
+msgstr "Zins + Tilgung:"
+
+#: dialogs/rc.cpp:538 dialogs/rc.cpp:551 dialogs/rc.cpp:564 dialogs/rc.cpp:577
+#: dialogs/rc.cpp:583 dialogs/rc.cpp:585 dialogs/rc.cpp:590 dialogs/rc.cpp:602
+msgid "Final amortization payment"
+msgstr "Abschlusstilgung"
+
+#: dialogs/rc.cpp:557
+msgid "Duration"
+msgstr "Dauer"
+
+#: dialogs/rc.cpp:558
+msgid ""
+"\n"
+"Please enter the term of this loan or leave the field empty to calculate it. "
+"The term is the time that is required to fully repay the loan. This time "
+"might be different from the time your loan contract is signed for."
+msgstr ""
+"\n"
+"Bitte geben Sie die Laufzeit des Kredits ein oder lassen Sie das Feld leer, "
+"um die Laufzeit von KMyMoney berechnen zu lassen. Die Laufzeit ist die Zeit, "
+"die benötigt wird, bis der Kredit vollständig abgezahlt ist. Diese Zeit kann "
+"von der Dauer des Kreditvertrages abweichen. Evtl. ist auch eine Restschuld "
+"vereinbart (Abschlusstilgung)."
+
+#: dialogs/rc.cpp:584
+msgid ""
+"\n"
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"\n"
+"Bitte geben Sie den Betrag für die abschließende Tilgung ein oder lassen Sie "
+"das Feld leer, um diesen Betrag vom Assistenten berechnen zu lassen. Wollen "
+"Sie den Kredit vollständig tilgen tragen Sie 0,00 ein."
+
+#: dialogs/rc.cpp:596
+msgid "Calculation Overview"
+msgstr "Berechnungsübersicht"
+
+#: dialogs/rc.cpp:597
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown in the overview below. You can "
+"accept these values by selecting \"Next\" or change them by choosing \"Back"
+"\" to return to the input field for the information you want to change."
+msgstr ""
+"\n"
+"KMyMoney hat den Kredit wie unten gezeigt berechnet. Sie können die "
+"Berechnungen akzeptieren, indem Sie \"Weiter\" wählen, oder Sie können mit "
+"\"Zurück\" zur gewünschten Eingabeseite zurückkehren um die Werte zu "
+"korrigieren."
+
+#: dialogs/rc.cpp:609
+msgid ""
+"\n"
+"In the following steps, KMyMoney supports you in setting up categories and "
+"schedules for your loan payments."
+msgstr ""
+"\n"
+"Im Folgenden unterstützt KMyMoney Sie beim Einrichten von Kategorien und "
+"Fälligkeiten für Ihre Kreditzahlungen."
+
+#: dialogs/rc.cpp:614
+msgid ""
+"\n"
+"Please select the category you want to assign the interest payments to or "
+"create a new category."
+msgstr ""
+"\n"
+"Bitte wählen Sie die Kategorie, der Sie die Zinszahlungen zuweisen wollen, "
+"oder erstellen Sie eine neue Kategorie."
+
+#: dialogs/rc.cpp:615
+msgid "Additional Fees"
+msgstr "Zusätzliche Kosten"
+
+#: dialogs/rc.cpp:616
+msgid ""
+"\n"
+"If your regular payment contains any additional fees, click on the button "
+"\"Additional fees\" to enter them."
+msgstr ""
+"\n"
+"Wenn Ihre Zahlungen Zusatzkosten beinhalten, wählen Sie \"Zusätzliche Kosten"
+"\", um diese einzugeben."
+
+#: dialogs/rc.cpp:617
+msgid "= periodical payment:"
+msgstr "= laufende Zahlung:"
+
+#: dialogs/rc.cpp:623
+msgid ""
+"If no additional fees are included in your periodical payment or you have "
+"entered all such fees, then click on \"Next\"."
+msgstr ""
+"Drücken Sie \"Weiter\", wenn alle zusätzlichen Kosten in der laufenden "
+"Zahlung enthalten sind, bzw. alle zusätzlichen Kosten erfasst sind."
+
+#: dialogs/rc.cpp:625
+msgid ""
+"KMyMoney will create a schedule for this payment and reminds you whenever a "
+"payment must be made.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"KMyMoney wird einen Zahlungplan erstellen und Sie jeweils bei Fälligkeit "
+"erinnern.<p>\n"
+"Dieses Datum wurde bereits erfasst falls Sie <i>alle Zahlungen aufzeichnen</"
+"i> ausgewählt haben. Sollten Sie nur die Zahlungen für dieses Jahr "
+"ausgewählt haben, so ist das <b>erste Fälligkeitsdatum</b> das Datum an dem "
+"die erste Zahlung in diesem Jahr getätigt wurde."
+
+#: dialogs/rc.cpp:626
+msgid "First payment due on:"
+msgstr "Erste Zahlung fällig am:"
+
+#: dialogs/rc.cpp:627
+msgid "Make payment from/to:"
+msgstr "Zahlung erfolgt von/an:"
+
+#: dialogs/rc.cpp:629
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown below. If you want to accept these "
+"values use the \"Finish\" button to update your account, otherwise use the "
+"\"Back\" button to modify your settings."
+msgstr ""
+"\n"
+"KMyMoney hat den Kredit wie unten angegeben berechnet. Wenn Sie diese "
+"Vorgaben akzeptieren, drücken Sie \"Fertig\", um das Konto zu aktualisieren. "
+"Wenn Sie etwas verändern wollen, drücken Sie \"Zurück\"."
+
+#: dialogs/rc.cpp:631
+msgid "Additional fees:"
+msgstr "Zusätzliche Kosten:"
+
+#: dialogs/rc.cpp:632
+msgid "Total payment:"
+msgstr "Gesamtzahlung:"
+
+#: dialogs/rc.cpp:634
+msgid "Valid from:"
+msgstr "Gültig ab:"
+
+#: dialogs/rc.cpp:635
+msgid "Affected payments:"
+msgstr "Betroffene Zahlungen:"
+
+#: dialogs/rc.cpp:645
+msgid "Press this to create a new asset account"
+msgstr "Hier ein neues Anlagekonto anlegen"
+
+#: dialogs/rc.cpp:648
+msgid ""
+"\n"
+"This page summarizes the data you entered. If you need to modify anything, "
+"please use the \"Back\" button to go to respective page. Otherwise use the "
+"\"Finish\" button to create the account."
+msgstr ""
+"\n"
+"Diese Seite zeigt Ihnen eine Zusammenfassung der eingegebenen Daten. Wenn "
+"Sie etwas verändern wollen, drücken Sie \"Zurück\", um zur entsprechenden "
+"Seite zu gelangen. Wenn alles in Ordnung ist, drücken Sie \"Fertig\", um das "
+"Konto zu erstellen."
+
+#: dialogs/rc.cpp:650
+msgid "Payee:"
+msgstr "Empfänger:"
+
+#: dialogs/rc.cpp:653
+msgid "First payment:"
+msgstr "Erste Zahlung:"
+
+#: dialogs/rc.cpp:655
+msgid "Amount is:"
+msgstr "Betrag ist:"
+
+#: dialogs/rc.cpp:656
+msgid "Loan calculation"
+msgstr "Kreditberechnung"
+
+#: dialogs/rc.cpp:660
+msgid "Periodic Payment:"
+msgstr "Laufende Zahlung:"
+
+#: dialogs/rc.cpp:661
+msgid "Additional Fees:"
+msgstr "Zusätzliche Kosten:"
+
+#: dialogs/rc.cpp:662
+msgid "Interest category:"
+msgstr "Zinskategorie:"
+
+#: dialogs/rc.cpp:663
+msgid "Payment from:"
+msgstr "Zahlung von:"
+
+#: dialogs/rc.cpp:666
+msgid "Next due date:"
+msgstr "Nächste Fälligkeit am:"
+
+#: dialogs/rc.cpp:673
+msgid "Final Payment:"
+msgstr "Abschlusstilgung:"
+
+#: dialogs/rc.cpp:675
+msgid "Interest is due:"
+msgstr "Zinsen fällig am:"
+
+#: dialogs/rc.cpp:680
+msgid "Payment frequency:"
+msgstr "Zahlungshäufigkeit:"
+
+#: dialogs/rc.cpp:682
+msgid "Online Quote Configuration"
+msgstr "Online-Kursnotiz-Konfiguration"
+
+#: dialogs/rc.cpp:687
+msgid "Perl Location:"
+msgstr "Perl-Lokation:"
+
+#: dialogs/rc.cpp:688
+msgid "Script:"
+msgstr "Skript:"
+
+#: dialogs/rc.cpp:690
+msgid "Reassign payees"
+msgstr "Neuzuweisen der Zahlungsempfänger"
+
+#: dialogs/rc.cpp:691
+msgid ""
+"The transactions associated with the selected payees need to be re-assigned "
+"to a different payee before the selected payees can be deleted. Please "
+"select a payee from the list below."
+msgstr ""
+"Die Buchungen der gewählten Zahlungsempfänger müssen einem anderen "
+"Zahlungsempfänger zugewiesen werden, bevor die gewählten Zahlungsempfänger "
+"gelöscht werden können. Bitte einen Zahlungsempfänger aus der unteren Liste "
+"auswählen."
+
+#: dialogs/rc.cpp:692
+msgid "Available payees:"
+msgstr "Verfügbare Zahlungsempfänger:"
+
+#: dialogs/rc.cpp:693
+msgid "Assign deleted names to the above selected payee's matching list"
+msgstr ""
+"Namen der gelöschten Zahlungsempfänger in der Zuordnungsliste des oben "
+"ausgewählten Zahlungsempfängers eintragen"
+
+#: dialogs/rc.cpp:696
+msgid "PluginDlg"
+msgstr "Plugins"
+
+#: dialogs/rc.cpp:697
+msgid "PlugIn"
+msgstr "PlugIn"
+
+#: dialogs/rc.cpp:698 widgets/transaction.cpp:1071
+#: widgets/transaction.cpp:1658
+msgid "Status"
+msgstr "Status"
+
+#: dialogs/rc.cpp:699
+msgid "Feature"
+msgstr "Leistungsmerkmal"
+
+#: dialogs/rc.cpp:703
+msgid "Reconciliation Dialog"
+msgstr "Abgleich-Dialog"
+
+#: dialogs/rc.cpp:704
+msgid ""
+"This dialog will assist in helping you to balance your account.\n"
+"\n"
+"Click on an appropriate transaction within one of the two list views to mark "
+"it as reconciled. To create a transaction or edit\n"
+"a transaction you can return to the register by clicking on the Edit "
+"Transactions button.\n"
+"\n"
+"Your account is balanced when the Difference is Zero. Click on the Finish "
+"button to save the reconciled transactions."
+msgstr ""
+"Dieser Dialog hilft Ihnen ihr Konto abzugleichen.\n"
+"\n"
+"Wählen Sie eine passende Buchung in einer der beiden Listen um sie als "
+"abgeglichen zu markieren. Um eine Buchung anzulegen\n"
+" oder neu zu erstellen gehen Sie ins Register zurück und wählen den "
+"Bearbeiten-Schalter.\n"
+"\n"
+"Ihr Konto ist abgeglichen wenn das Saldo Null ist. Drücken Sie auf den "
+"Fertig-Schalter um die abgeglichenen Buchungen zu speichern."
+
+#: dialogs/rc.cpp:705
+msgid "Withdrawals"
+msgstr "Abhebungen"
+
+#: dialogs/rc.cpp:707 dialogs/rc.cpp:708 dialogs/rc.cpp:822
+msgid "$"
+msgstr "$"
+
+#: dialogs/rc.cpp:710
+msgid "Previous Balance:"
+msgstr "Anfangssaldo:"
+
+#: dialogs/rc.cpp:711 dialogs/rc.cpp:713 dialogs/rc.cpp:715 dialogs/rc.cpp:717
+#: dialogs/rc.cpp:820
+msgid "0"
+msgstr "0"
+
+#: dialogs/rc.cpp:712
+msgid "Ending Balance:"
+msgstr "Abschlußsaldo:"
+
+#: dialogs/rc.cpp:714
+msgid "Cleared Balance:"
+msgstr "Verrechneter Saldo:"
+
+#: dialogs/rc.cpp:716
+msgid "Difference:"
+msgstr "Differenz:"
+
+#: dialogs/rc.cpp:718
+msgid "Edit Transactions..."
+msgstr "Buchungen editieren..."
+
+#: dialogs/rc.cpp:721
+msgid "Security List Editor"
+msgstr "Wertpapier Editor"
+
+#: dialogs/rc.cpp:726
+msgid "Market"
+msgstr "Markt"
+
+#: dialogs/rc.cpp:729
+msgid "Cash Fraction"
+msgstr "Bargeldstückelung"
+
+#: dialogs/rc.cpp:730
+msgid "Add..."
+msgstr "Hinzufügen..."
+
+#: dialogs/rc.cpp:732 widgets/kmymoneypriceview.cpp:157
+msgid "Delete..."
+msgstr "Löschen..."
+
+#: dialogs/rc.cpp:733
+msgid "Show national currencies"
+msgstr "Zeige nationale Währungen"
+
+#: dialogs/rc.cpp:735
+msgid "KMyMoney - Select Database"
+msgstr "KMyMoney - Datenbank auswählen"
+
+#: dialogs/rc.cpp:736
+msgid "CAUTION!"
+msgstr "ACHTUNG!"
+
+#: dialogs/rc.cpp:737
+msgid ""
+"<font color=\"#ff2727\">This software is still in an experimental stage, and "
+"there are still some known response time problems. Please be patient; we are "
+"working on them.\n"
+"As always, please make sure you have adequate backups of your data.</font>"
+msgstr ""
+"<font color=\"#ff2727\">Dieses Programm befindet sich noch in einem "
+"experimentellen Stadium, weshalb Datenverlust möglich ist. Bitte sichern Sie "
+"Ihre Daten stets auch auf alternative Weise, um Datenverlust zu vermeiden.</"
+"font>"
+
+#: dialogs/rc.cpp:738
+msgid "Database Type"
+msgstr "Datenbank-Typ"
+
+#: dialogs/rc.cpp:739
+msgid "Database Name"
+msgstr "Datenbank-Name"
+
+#: dialogs/rc.cpp:740
+msgid "Host Name"
+msgstr "Host-Name"
+
+#: dialogs/rc.cpp:741
+msgid "User Name"
+msgstr "Benutzername"
+
+#: dialogs/rc.cpp:743
+msgid "Preload &all data"
+msgstr "Vorwegladen aller Daten"
+
+#: dialogs/rc.cpp:745
+msgid "&Generate SQL"
+msgstr "SQL &generieren"
+
+#: dialogs/rc.cpp:747
+msgid "Ca&ncel"
+msgstr "&Abbrechen"
+
+#: dialogs/rc.cpp:762 widgets/rc.cpp:172
+msgid "Sort options"
+msgstr "Sortier-Optionen"
+
+#: dialogs/rc.cpp:763
+msgid "Use default"
+msgstr "Standard verwenden"
+
+#: dialogs/rc.cpp:767
+msgid "Correct splits"
+msgstr "Teilbuchungen korrigieren"
+
+#: dialogs/rc.cpp:769
+msgid "How do you want to proceed?"
+msgstr "Wie wollen Sie fortfahren?"
+
+#: dialogs/rc.cpp:770
+msgid "Continue to edit splits"
+msgstr "Teilbuchungen weiter bearbeiten"
+
+#: dialogs/rc.cpp:771
+#, c-format
+msgid "Change total amount of transaction to %1."
+msgstr "Gesamtsumme der Buchung auf %1 ändern."
+
+#: dialogs/rc.cpp:772
+msgid "Distribute difference of %1 among all splits."
+msgstr "Die Differenz von %1 auf alle Teilbuchungen verteilen."
+
+#: dialogs/rc.cpp:773
+msgid "Leave %1 unassigned."
+msgstr "%1 nicht zuweisen."
+
+#: dialogs/rc.cpp:776
+msgid "Split transaction"
+msgstr "Splitbuchung"
+
+#: dialogs/rc.cpp:777
+msgid "<b>11,00<b>"
+msgstr "<b>11,00</b>"
+
+#: dialogs/rc.cpp:778
+msgid "<b>111,00<b>"
+msgstr "<b>111,00</b>"
+
+#: dialogs/rc.cpp:779
+msgid "Unassigned"
+msgstr "Nicht zugewiesen"
+
+#: dialogs/rc.cpp:780
+msgid "Sum of splits"
+msgstr "Summe der Teilbuchungen"
+
+#: dialogs/rc.cpp:781
+msgid "100,00"
+msgstr "100,00"
+
+#: dialogs/rc.cpp:782
+msgid "Transaction amount"
+msgstr "Buchungsbetrag"
+
+#: dialogs/rc.cpp:783
+msgid "Merge"
+msgstr "Vereinfachen"
+
+#: dialogs/rc.cpp:784
+msgid "Merges splits with the same category to one split"
+msgstr "Vereinfacht mehrere Teilbuchungen mit dem gleichen Konto zu einer Teilbuchung"
+
+#: dialogs/rc.cpp:785
+msgid ""
+"In case you have multiple split entries to the same category and you like to "
+"keep them as a single split, press this button. The amount for identical "
+"categories will be added and stored in a single split for that category."
+msgstr ""
+"Haben Sie mehrere Teilbuchungen und möchten diese zu einer Teilbuchung "
+"zusammenfassen, dann drücken Sie diesen Knopf. Der Betrag entsprechenden "
+"Teilbuchungen wird dabei aufaddiert und in einer Teilbuchung gespeichert."
+
+#: dialogs/rc.cpp:786
+msgid "Clear &Zero"
+msgstr "&Lösche 0,00"
+
+#: dialogs/rc.cpp:787
+msgid "Removes all splits that have a value of zero."
+msgstr "Löscht alle Teilbuchungen, die keinen Betrag aufweisen."
+
+#: dialogs/rc.cpp:791
+msgid "New price entry"
+msgstr "Neuer Kurs"
+
+#: dialogs/rc.cpp:799
+msgid "Void mark"
+msgstr "Annulliert-Kennung"
+
+#: dialogs/rc.cpp:800
+msgid "Opening Balance text"
+msgstr "Kennung für Eröffnungssaldo"
+
+#: dialogs/rc.cpp:801
+msgid "Type field text"
+msgstr "Typfeld-Text"
+
+#: dialogs/rc.cpp:802
+msgid "Account delimiter"
+msgstr "Konto-Trennzeichen"
+
+#: dialogs/rc.cpp:804
+msgid "Attempt to match similar transactions"
+msgstr "Versuche ähnliche Transaktionen zu finden"
+
+#: dialogs/rc.cpp:806 dialogs/rc.cpp:808
+msgid "The format of the dates in the QIF file."
+msgstr "Datumsformat in der QIF-Datei."
+
+#: dialogs/rc.cpp:809 dialogs/rc.cpp:811
+msgid ""
+"If a QIF file contains date entries with years represented with two digits "
+"then either an apostrophe or a slash may be used to delimit the year in the "
+"dates for certain centuries. This enables 1905 to be distinguished from "
+"2005. Specify here which range of years will have year delimited by an "
+"apostrophe (eg. for Quicken this is usually 1900-1949)."
+msgstr ""
+"Enthält eine QIF-Datei Datumsangaben mit zweistelliger Jahreszahl wird "
+"entweder ein Apostroph oder ein Schrägstrich als Trennzeichen verwendet. Je "
+"nachdem, welches dieser beiden Zeichen vor der Jahreszahl vorgefunden wird, "
+"ist eine Zuordnung zum jeweiligen Jahrhundert möglich. Geben Sie hier an, "
+"welches Jahrhundert bei Verwendung des Apostrophs gemeint ist."
+
+#: dialogs/rc.cpp:810
+msgid "Apostrophe Handling"
+msgstr "Apostroph-Interpretation"
+
+#: dialogs/rc.cpp:812
+msgid "Amounts"
+msgstr "Werte"
+
+#: dialogs/rc.cpp:813
+msgid "Field"
+msgstr "Feld"
+
+#: dialogs/rc.cpp:814
+msgid "QIF-Record"
+msgstr "QIF-Eintrag"
+
+#: dialogs/rc.cpp:815 dialogs/rc.cpp:833
+msgid "Decimal Symbol"
+msgstr "Dezimalzeichen"
+
+#: dialogs/rc.cpp:816
+msgid "Thousand Delimiter"
+msgstr "Tausender-Trennzeichen"
+
+#: dialogs/rc.cpp:817
+msgid "SortColumnInvisible"
+msgstr "SortierungsSpalteUnsichtbar"
+
+#: dialogs/rc.cpp:819
+msgid "T"
+msgstr "T"
+
+#: dialogs/rc.cpp:821
+msgid "Split-Value"
+msgstr "Teilbuchungsbetrag"
+
+#: dialogs/rc.cpp:824
+msgid "Commission"
+msgstr "Kommission"
+
+#: dialogs/rc.cpp:825
+msgid "O"
+msgstr "O"
+
+#: dialogs/rc.cpp:826
+msgid "2"
+msgstr "2"
+
+#: dialogs/rc.cpp:828
+msgid "I"
+msgstr "I"
+
+#: dialogs/rc.cpp:829
+msgid "3"
+msgstr "3"
+
+#: dialogs/rc.cpp:831
+msgid "Q"
+msgstr "Q"
+
+#: dialogs/rc.cpp:832
+msgid "4"
+msgstr "4"
+
+#: dialogs/rc.cpp:834
+msgid "Thousands Separator"
+msgstr "Tausender-Trennzeichen"
+
+#: dialogs/rc.cpp:836
+msgid "Output filter location"
+msgstr "Ausgabefilterprogramm"
+
+#: dialogs/rc.cpp:837
+msgid "Input filter file type"
+msgstr "Dateierweiterung für das Lesefilterprogramm"
+
+#: dialogs/rc.cpp:838
+msgid "*.qif"
+msgstr "*.qif"
+
+#: dialogs/rc.cpp:839
+msgid "Input filter location"
+msgstr "Lesefilterprogramm"
+
+#: dialogs/rc.cpp:843
+msgid "Rename"
+msgstr "Umbenennen"
+
+#: dialogs/kselecttransactionsdlg.cpp:44
+msgid "Select Transaction"
+msgstr "Buchung auswählen"
+
+#: dialogs/kselecttransactionsdlg.cpp:45
+msgid "Select a transaction and press the OK button or use Cancel to select none."
+msgstr ""
+"Eine Buchung selektieren, \"OK\" drücken oder \"Abbruch\" um nichts "
+"auszuwählen."
+
+#: dialogs/knewinvestmentwizard.cpp:62
+msgid "Investment detail wizard"
+msgstr "Investitionsdetail-Assistent"
+
+#: dialogs/knewinvestmentwizard.cpp:82
+msgid "Security detail wizard"
+msgstr "Wertpapier Detail Wizard"
+
+#: dialogs/knewaccountdlg.cpp:121 dialogs/knewinvestmentwizard.cpp:109
+msgid ""
+"_: default price mode\n"
+"<default>"
+msgstr "<Standard>"
+
+#: dialogs/knewaccountdlg.cpp:122 dialogs/knewinvestmentwizard.cpp:110
+msgid "Price per share"
+msgstr "Preis pro Aktie"
+
+#: dialogs/knewaccountdlg.cpp:123 dialogs/knewinvestmentwizard.cpp:111
+msgid "Total for all shares"
+msgstr "Gesamtpreis aller Aktien"
+
+#: dialogs/knewinvestmentwizard.cpp:129
+msgid "This wizard allows you to modify the selected investment."
+msgstr "Dieser Assistent unterstützt das Ändern der angewählten Investition."
+
+#: dialogs/knewinvestmentwizard.cpp:132
+msgid "This wizard allows you to modify the selected security."
+msgstr "Dieser Assistent unterstützt das Ändern der angewählten Wertanlage."
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid ""
+"The selected symbol is already on file. Do you want to reuse the existing "
+"security?"
+msgstr ""
+"Das ausgewählte Wertpapier existiert bereits. Wollen Sie das bestehende "
+"Wertpapier wiederverwenden?"
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid "Security found"
+msgstr "Wertpapier gefunden"
+
+#: dialogs/knewinvestmentwizard.cpp:309
+msgid "Unable to create all objects for the investment"
+msgstr "Nicht in der Lage, alle Objekte für Investitionen zu erstellen"
+
+#: dialogs/keditequityentrydlg.cpp:78
+msgid "Change the price information of the selected entry."
+msgstr "Ändere die Preis-Informationen des ausgewählten Eintrags."
+
+#: dialogs/kaccountselectdlg.cpp:64 widgets/kmymoneybriefschedule.cpp:59
+msgid "&Skip"
+msgstr "&Überspringen"
+
+#: dialogs/kaccountselectdlg.cpp:66 widgets/kmymoneybriefschedule.cpp:61
+msgid "Skip this transaction"
+msgstr "Diese Buchung überspringen"
+
+#: dialogs/kaccountselectdlg.cpp:67
+msgid "Use this to skip importing this transaction and proceed with the next one."
+msgstr ""
+"Drücken, um die aktuelle Buchung zu überspringen und den Importvorgang mit "
+"der nächsten fortzusetzen."
+
+#: dialogs/kaccountselectdlg.cpp:72
+msgid "Create a new account/category"
+msgstr "Neues Konto / neue Kategorie erstellen"
+
+#: dialogs/kaccountselectdlg.cpp:73
+msgid "Use this to add a new account/category to the file"
+msgstr "Drücken, um ein neues Konto bzw. eine neue Kategorie zur Datei hinzuzufügen"
+
+#: dialogs/kaccountselectdlg.cpp:77
+msgid "&Abort"
+msgstr "&Abbrechen"
+
+#: dialogs/kaccountselectdlg.cpp:79
+msgid "Abort the import operation and dismiss all changes"
+msgstr "Importvorgang abbrechen und alle Änderungen verwerfen"
+
+#: dialogs/kaccountselectdlg.cpp:80
+msgid ""
+"Use this to abort the import. Your financial data will be in the state "
+"before you started the QIF import."
+msgstr ""
+"Drücken, um den Importvorgang abzubrechen. Ihre Finanzdaten werden in den "
+"Zustand vor dem Importvorgang zurückversetzt."
+
+#: dialogs/knewaccountdlg.cpp:110
+msgid "Is a sub account"
+msgstr "Dies ist ein Unterkonto"
+
+#: dialogs/knewaccountdlg.cpp:184
+msgid "VAT account"
+msgstr "Mwst Konto"
+
+#: dialogs/knewaccountdlg.cpp:474
+msgid ""
+"You have not specified a name.\n"
+"Please fill in this field."
+msgstr ""
+"Sie haben keinen Namen angegeben.\n"
+"Bitte füllen Sie das Feld aus."
+
+#: dialogs/knewaccountdlg.cpp:482
+msgid "Please select a parent account."
+msgstr "Bitte wählen Sie das gewünschte übergeordnete Konto."
+
+#: dialogs/knewaccountdlg.cpp:489 dialogs/knewaccountdlg.cpp:1029
+msgid "<No Institution>"
+msgstr "<Kein Geldinstitut>"
+
+#: dialogs/knewaccountdlg.cpp:552
+msgid ""
+"An account named <b>%1</b> already exists. You cannot create a second "
+"account with the same name."
+msgstr ""
+"Ein Konto mit dem Namen <b>%1</b> existiert schon. Sie können kein zweites "
+"Konto mit dem selben Namen anlegen."
+
+#: dialogs/knewaccountdlg.cpp:567
+msgid ""
+"A category named <b>%1</b> already exists. You cannot create a second "
+"category with the same name."
+msgstr ""
+"Eine Kategorie mit dem Namen <b>%1</b> existiert schon. Sie können keine "
+"zweite Kategorie mit dem selben Namen anlegen."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid ""
+"You have selected to suppress the display of unused categories in the "
+"KMyMoney configuration dialog. The category you just created will therefore "
+"only be shown if it is used. Otherwise, it will be hidden in the accounts/"
+"categories view."
+msgstr ""
+"Sie hatten im KMyMoney-Konfigurationsdialog eingestellt, dass ungenutzte "
+"Kategorien nicht angezeigt werden. Daher wird die gerade angelegte Kategorie "
+"nur angezeigt wenn sie auch wirklich genutzt wird. Sollte sie nicht genutzt "
+"werden, wird sie in der Konten/Kategorie-Sicht nicht angezeigt."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid "Hidden categories"
+msgstr "Versteckte Kategorien"
+
+#: dialogs/knewaccountdlg.cpp:927 dialogs/knewaccountdlg.cpp:979
+#, c-format
+msgid "Is a sub account of %1"
+msgstr "Ist ein Unterkonto von %1"
+
+#: dialogs/knewaccountdlg.cpp:1082
+msgid "Cannot add institution"
+msgstr "Kann Geldinstitut nicht hinzufügen"
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid ""
+"This dialog does not allow to create new payees. Please pick a payee from "
+"the list."
+msgstr ""
+"Dieser Dialog erlaubt das Anlegen neuer Zahlungsempfänger nicht. Bitte einen "
+"Zahlungsempfänger aus der Liste auswählen."
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid "Payee creation"
+msgstr "Zahlungsempfänger-Erstellung"
+
+#: dialogs/kimportdlg.cpp:69
+msgid "Use this to start the import operation"
+msgstr "Drücken, um das Importieren zu starten"
+
+#: dialogs/kimportdlg.cpp:110
+msgid ""
+"%1|Import files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Import-Dateien\n"
+"%2|Alle Dateien (*.*)"
+
+#: dialogs/kimportdlg.cpp:111
+msgid "Import File..."
+msgstr "Importiere Datei..."
+
+#: dialogs/knewloanwizard.cpp:124
+msgid "Create a new category"
+msgstr "Neue Kategorie erstellen"
+
+#: dialogs/knewloanwizard.cpp:125
+msgid "Use this to open the new account editor"
+msgstr "Drücken, um den Dialog zur Erstellung eines neuen Kontos zu öffnen"
+
+#: dialogs/knewloanwizard.cpp:129
+msgid "&Additional fees..."
+msgstr "&Zusätzliche Kosten..."
+
+#: dialogs/knewloanwizard.cpp:131
+msgid "Enter additional fees"
+msgstr "Zusätzliche Kosten eingeben"
+
+#: dialogs/knewloanwizard.cpp:132
+msgid ""
+"Use this to add any additional fees other than principal and interest "
+"contained in your periodical payments."
+msgstr ""
+"Drücken Sie diesen Knopf, um zusätzliche Kosten außer Zins und Tilgung zu "
+"erfassen, die in den laufenden Zahlungen enthalten sind."
+
+#: dialogs/knewloanwizard.cpp:139
+msgid "Use this to create a new account to which the initial payment should be made"
+msgstr ""
+"Hiermit ein neues Konto anlegen, auf das die erste Einzahlung gebucht werden "
+"soll"
+
+#: dialogs/knewloanwizard.cpp:208
+msgid "To whom do you make payments?"
+msgstr "An wen erfolgen die Zahlungen?"
+
+#: dialogs/knewloanwizard.cpp:209
+msgid "Payments to"
+msgstr "Zahlungen an"
+
+#: dialogs/knewloanwizard.cpp:214
+msgid "From whom do you expect payments?"
+msgstr "Von wem erwarten Sie Zahlungen?"
+
+#: dialogs/knewloanwizard.cpp:215
+msgid "Payments from"
+msgstr "Zahlungen von"
+
+#: dialogs/knewloanwizard.cpp:233
+msgid "Please enter the date, the first payment for this loan was/is due."
+msgstr ""
+"Bitte das Datum angeben, an welchem die erste Zahlung für diesen Kredit "
+"fällig ist/war."
+
+#: dialogs/knewloanwizard.cpp:235
+msgid ""
+"Note: Consult the loan contract for details of the first due date. Keep in "
+"mind, that the first due date usually differs from the date the contract was "
+"signed"
+msgstr ""
+"Hinweis: Sehen Sie im Kreditvertrag nach, um das Datum für die erste Zahlung "
+"zu erfahren. Bitte beachten Sie, dass das Datum für die erste Zahlung "
+"normalerweise nicht dem Datum entspricht, an dem der Vertrag unterzeichnet "
+"wurde"
+
+#: dialogs/knewloanwizard.cpp:240
+msgid ""
+"Please enter the original loan amount in the field below or leave it empty "
+"to be calculated."
+msgstr ""
+"Bitte geben Sie die ursprüngliche Kreditsumme im folgenden Feld an oder "
+"lassen Sie es leer, um es später berechnen zu lassen."
+
+#: dialogs/knewloanwizard.cpp:248
+msgid "Please enter the date, the first payment for this loan was/is due this year."
+msgstr ""
+"Bitte das Datum angeben, an dem die erste Zahlung für diesen Kredit IN "
+"DIESEM JAHR fällig ist/war."
+
+#: dialogs/knewloanwizard.cpp:250
+msgid ""
+"Note: You can easily figure out the date of the first payment if you consult "
+"the last statement of last year."
+msgstr ""
+"Hinweis: Am letzten Kontoauszug des letzten Jahres finden Sie eventuell "
+"Hinweise zum ersten Zahlungstermin für das aktuelle Jahr."
+
+#: dialogs/knewloanwizard.cpp:254
+msgid ""
+"Please enter the remaining loan amount of last years final statement in the "
+"field below. You should not leave this field empty."
+msgstr ""
+"Bitte geben Sie die restliche Kreditmenge vom letzten Kontoauszug des "
+"letzten Jahres an. Sie sollten das Feld nicht leer lassen."
+
+#: dialogs/knewloanwizard.cpp:311 dialogs/knewloanwizard.cpp:326
+#: dialogs/knewloanwizard.cpp:341 dialogs/knewloanwizard.cpp:357
+#: dialogs/knewloanwizard.cpp:373
+msgid "calculate"
+msgstr "berechnen"
+
+#: dialogs/knewloanwizard.cpp:417
+msgid "borrowed"
+msgstr "geliehen"
+
+#: dialogs/knewloanwizard.cpp:419
+msgid "lend"
+msgstr "verliehen"
+
+#: dialogs/knewloanwizard.cpp:423
+msgid "not assigned"
+msgstr "nicht zugewiesen"
+
+#: dialogs/knewloanwizard.cpp:430
+msgid "on reception"
+msgstr "bei Erhalt"
+
+#: dialogs/knewloanwizard.cpp:432
+msgid "on due date"
+msgstr "bei Fälligkeit"
+
+#: dialogs/knewloanwizard.cpp:471
+msgid ""
+"The loan wizard is unable to calculate two different values for your loan at "
+"the same time. Please enter a value for the %1 on this page or backup to the "
+"page where the current value to be calculated is defined and fill in a "
+"value."
+msgstr ""
+"Der Kreditassistent kann nur einen Wert für Ihren Kredit berechnen.\n"
+"Bitte geben Sie einen Wert für %1 hier ein oder gehen Sie zu der Seite "
+"zurück, wo der aktuell zu berechnende Wert definiert wird und geben Sie dort "
+"einen Wert ein."
+
+#: dialogs/knewloanwizard.cpp:500
+msgid ""
+"You selected, that payments have already been made towards this loan. This "
+"requires you to enter the loan amount exactly as found on your last "
+"statement."
+msgstr ""
+"Sie haben angegeben, dass für diesen Kredit bereits Zahlungen durchgeführt "
+"wurden. Daher müssen Sie die verbleibende Kreditsumme genau so eingeben, wie "
+"sie im letzten Kontoauszug aufgeführt ist."
+
+#: dialogs/knewloanwizard.cpp:513
+msgid "interest rate"
+msgstr "Zinssatz"
+
+#: dialogs/knewloanwizard.cpp:522
+msgid "term"
+msgstr "Laufzeit"
+
+#: dialogs/knewloanwizard.cpp:532
+msgid "principal and interest"
+msgstr "Zins und Tilgung"
+
+#: dialogs/knewloanwizard.cpp:743
+#, c-format
+msgid ""
+"The number of payments has been decremented and the final payment has been "
+"modified to %1."
+msgstr ""
+"Die Anzahl der Zahlungen wurde verringert und die abschließende Zahlung "
+"wurde auf %1 geändert."
+
+#: dialogs/knewloanwizard.cpp:751 dialogs/knewloanwizard.cpp:771
+#, c-format
+msgid "The final payment has been modified to %1."
+msgstr "Die abschließende Zahlung wurde auf %1 geändert."
+
+#: dialogs/knewloanwizard.cpp:802
+msgid "KMyMoney has calculated a final payment of %1 for this loan."
+msgstr "KMyMoney hat für Ihren Kredit eine abschließende Zahlung von %1 berechnet."
+
+#: dialogs/knewloanwizard.cpp:817
+msgid ""
+"You have entered mis-matching information. Please backup to the appropriate "
+"page and update your figures or leave one value empty to let KMyMoney "
+"calculate it for you"
+msgstr ""
+"Sie haben widersprüchliche Informationen eingegeben. Bitte gehen Sie nochmal "
+"zur entsprechenden Seite zurück und korrigieren Sie die Eingaben oder lassen "
+"Sie ein Feld frei, um es von KMyMoney berechnen zu lassen"
+
+#: dialogs/kfindtransactiondlg.cpp:230
+msgid "Warning: Filtering by Category will exclude all transfers from the results."
+msgstr ""
+"Warnung: Filtern nach Kategorie schließt alle Umbuchungen von den Resultaten "
+"aus."
+
+#: dialogs/kfindtransactiondlg.cpp:239
+msgid "(None)"
+msgstr "(Keine)"
+
+#: dialogs/kfindtransactiondlg.cpp:241
+msgid "Current selections: "
+msgstr "Aktuelle Auswahl: "
+
+#: dialogs/kfindtransactiondlg.cpp:716
+msgid "Found %1 matching transactions (D %2 / P %3 = %4)"
+msgstr "%1 passende Buchungen gefunden (D %2 / P %3 = %4)"
+
+#: dialogs/kfindtransactiondlg.cpp:719
+msgid "Found %1 matching transactions"
+msgstr "%1 passende Buchungen gefunden"
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "The institution name field is empty. Please enter the name."
+msgstr "Sie müssen einen Namen für diese Institution eingeben."
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "Adding New Institution"
+msgstr "Neues Geldinstitut hinzufügen"
+
+#: dialogs/kcsvprogressdlg.cpp:69
+msgid "C&lose"
+msgstr "&Schließen"
+
+#: dialogs/kcsvprogressdlg.cpp:247
+msgid " of "
+msgstr " von "
+
+#: widgets/kmymoneypriceview.cpp:126
+msgid "Commodity"
+msgstr "Währung/Aktie"
+
+#: widgets/kmymoneypriceview.cpp:130
+msgid "Source"
+msgstr "Quelle"
+
+#: widgets/kmymoneypriceview.cpp:143
+msgid "Price Options"
+msgstr "Preisoptionen"
+
+#: widgets/kmymoneypriceview.cpp:153
+msgid "Online Price Update..."
+msgstr "Preis Online aktualisieren..."
+
+#: widgets/kmymoneycombo.cpp:472 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+msgid "From"
+msgstr "Von"
+
+#: widgets/transaction.cpp:668
+msgid "Transaction is missing a category assignment."
+msgstr "Dieser Buchung wurde keine Kategorie zugewiesen."
+
+#: widgets/transaction.cpp:671
+msgid "The transaction has a missing assignment of <b>%1</b>."
+msgstr "Die Buchung hat eine fehlende Zuordnung von <b>%1</b>."
+
+#: widgets/transaction.cpp:874
+msgid "Sell"
+msgstr "Verkauf"
+
+#: widgets/transaction.cpp:876
+msgid "Buy"
+msgstr "Kauf"
+
+#: widgets/kmymoneycombo.cpp:520 widgets/transaction.cpp:879
+#: widgets/transaction.cpp:1447
+msgid "Dividend"
+msgstr "Dividende"
+
+#: widgets/kmymoneycombo.cpp:518 widgets/transaction.cpp:881
+#: widgets/transaction.cpp:1453
+msgid "Yield"
+msgstr "Ertrag"
+
+#: widgets/transaction.cpp:886 widgets/transaction.cpp:1473
+msgid "Activity"
+msgstr "Aktivität"
+
+#: widgets/transaction.cpp:887
+msgid "Investment transaction"
+msgstr "Investitions-Buchung"
+
+#: widgets/transaction.cpp:1021 widgets/transaction.cpp:1114
+#: widgets/transaction.cpp:1165
+msgid "*** UNASSIGNED ***"
+msgstr "*** NICHT ZUGEWIESEN ***"
+
+#: widgets/kmymoneycombo.cpp:517 widgets/transaction.cpp:1435
+msgid "Add shares"
+msgstr "Wertpapiere hinzufügen"
+
+#: widgets/kmymoneycombo.cpp:516 widgets/transaction.cpp:1438
+msgid "Remove shares"
+msgstr "Wertpapiere entfernen"
+
+#: widgets/kmymoneycombo.cpp:522 widgets/transaction.cpp:1441
+msgid "Buy shares"
+msgstr "Kaufe Wertpapiere"
+
+#: widgets/kmymoneycombo.cpp:521 widgets/transaction.cpp:1444
+msgid "Sell shares"
+msgstr "Verkaufe Wertpapiere"
+
+#: widgets/transaction.cpp:1450
+msgid "Reinvest Dividend"
+msgstr "Wiederanlage der Dividende"
+
+#: widgets/kmymoneycombo.cpp:515 widgets/transaction.cpp:1456
+msgid "Split shares"
+msgstr "Aktien stückeln"
+
+#: widgets/transaction.cpp:1515
+msgid "Ratio"
+msgstr "Stückelung"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:241
+msgid "%1 Bills."
+msgstr "%1 Rechnungen."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:257
+msgid "%1 Deposits."
+msgstr "%1 Einzahlungen."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:273
+msgid "%1 Transfers."
+msgstr "%1 Buchungen."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:355
+msgid ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+msgstr "------------------------------"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:57
+#: widgets/kmymoneyaccounttreeforecast.cpp:84
+msgid "Current"
+msgstr "Aktuell"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:72
+#: widgets/kmymoneyaccounttreeforecast.cpp:93
+msgid "Total variation"
+msgstr "Gesamtvariation"
+
+#: widgets/stdtransactionmatched.cpp:130
+msgid ""
+"KMyMoney has matched a downloaded transaction with a manually entered one "
+"(result above)"
+msgstr ""
+"KMyMoney hat eine heruntergeladene Buchung mit einer manuell eingetragenen "
+"zusammengeführt (Ergebnis oben)"
+
+#: widgets/stdtransactionmatched.cpp:138
+msgid "Bank entry:"
+msgstr "Bank Eintrag:"
+
+#: widgets/stdtransactionmatched.cpp:166
+msgid "Your entry:"
+msgstr "Ihr Eintrag:"
+
+#: widgets/kbudgetvalues.cpp:187
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a monthly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+"Sie haben Budgetwerte in einer anderen Basis angegeben, was in einem "
+"monatlichen Budget von<b>%1</b> resultieren würde. Soll dieser Wert benutzt "
+"werden, um das Monatsbudget zu füllen?"
+
+#: widgets/kbudgetvalues.cpp:187 widgets/kbudgetvalues.cpp:206
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"_: Auto assignment (caption)\n"
+"Auto assignment"
+msgstr "Autom. Zuweisung"
+
+#: widgets/kbudgetvalues.cpp:206
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a yearly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+"Sie haben Budgetwerte in einer anderen Basis angegeben, was in einem "
+"Jahresbudget von<b>%1</b> resultieren würde. Soll dieser Wert benutzt "
+"werden, um das monatliche Budget zu füllen?"
+
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"You have entered budget values using a different base which would result in "
+"an individual monthly budget of <b>%1</b>. Should this value be used to fill "
+"the monthly budgets?"
+msgstr ""
+"Sie haben Budgetwerte in einer anderen Basis angegeben, was in einem "
+"individuellen monatlichen Budget von<b>%1</b> resultieren würde. Soll dieser "
+"Wert benutzt werden, um das Monatsbudget zu füllen?"
+
+#: widgets/kmymoneybriefschedule.cpp:62
+msgid "Use this button to skip this transaction"
+msgstr "Drücken, um die Buchung zu überspringen"
+
+#: widgets/kmymoneybriefschedule.cpp:67
+msgid "Record this transaction into the register"
+msgstr "Buchung in das Kontobuch aufnehmen"
+
+#: widgets/kmymoneybriefschedule.cpp:68
+msgid "Use this button to record this transaction"
+msgstr "Drücken, um die Buchung aufzunehmen"
+
+#: widgets/kmymoneybriefschedule.cpp:96
+msgid "%1 of %2"
+msgstr "%1 von %2"
+
+#: widgets/kmymoneybriefschedule.cpp:109
+msgid "Payment on %1 for %2 with %3 transactions remaining occuring %4."
+msgstr "Nächste Zahlung am %1 von %2 mit %3 weiteren Buchungen, durchzuführen an %4."
+
+#: widgets/kmymoneybriefschedule.cpp:115
+msgid "Payment on %1 for %2 occuring %4."
+msgstr "Zahlung an %1 für %2 jeweils durchzuführen an %4."
+
+#: widgets/kmymoneybriefschedule.cpp:136
+msgid "%1 days overdue (%2 occurences)."
+msgstr "%1 Tage überfällig (%2 Zahlungen)."
+
+#: widgets/register.cpp:55
+msgid "Post date"
+msgstr "Buchungsdatum"
+
+#: widgets/register.cpp:56
+msgid "Date entered"
+msgstr "Eingegebenes Datum"
+
+#: widgets/register.cpp:60
+msgid "Entry order"
+msgstr "Eingabe-Reihenfolge"
+
+#: widgets/register.cpp:63
+msgid "Reconcile state"
+msgstr "Abgleich-Status"
+
+#: widgets/register.cpp:440
+msgid ""
+"_: Deposits onto account\n"
+"Deposits"
+msgstr "Gutschriften"
+
+#: widgets/register.cpp:442
+msgid ""
+"_: Payments towards credit card\n"
+"Payments"
+msgstr "Gutschriften"
+
+#: widgets/register.cpp:446
+msgid ""
+"_: Payments made from account\n"
+"Payments"
+msgstr "Belastungen"
+
+#: widgets/register.cpp:448
+msgid ""
+"_: Payments made with credit card\n"
+"Charges"
+msgstr "Belastungen"
+
+#: widgets/register.cpp:736
+msgid ""
+"_: Payment made from account\n"
+"Payment"
+msgstr "Belastung"
+
+#: widgets/register.cpp:737
+msgid ""
+"_: Deposit into account\n"
+"Deposit"
+msgstr "Gutschrift"
+
+#: widgets/register.cpp:813
+msgid ""
+"_: Payment made with credit card\n"
+"Charge"
+msgstr "Belastung"
+
+#: widgets/register.cpp:814
+msgid ""
+"_: Payment towards credit card\n"
+"Payment"
+msgstr "Gutschrift"
+
+#: widgets/register.cpp:818 widgets/register.cpp:824
+msgid ""
+"_: Decrease of asset/liability value\n"
+"Decrease"
+msgstr "Verringern"
+
+#: widgets/register.cpp:819 widgets/register.cpp:823
+msgid ""
+"_: Increase of asset/liability value\n"
+"Increase"
+msgstr "Vergrößern"
+
+#: widgets/register.cpp:2280
+msgid "Prior transactions possibly filtered"
+msgstr "Vorherige Buchungen möglicherweise gefiltert"
+
+#: widgets/register.cpp:2284
+msgid "Last reconciliation"
+msgstr "Letzter Abgleich"
+
+#: widgets/register.cpp:2291
+#, c-format
+msgid "Online Statement Balance: %1"
+msgstr "Saldo des Onlinekontoauszugs: %1"
+
+#: widgets/register.cpp:2295
+msgid "This year"
+msgstr "Dieses Jahr"
+
+#: widgets/kmymoneycombo.cpp:674 widgets/register.cpp:2296
+msgid "Last month"
+msgstr "Letzter Monat"
+
+#: widgets/register.cpp:2297
+msgid "This month"
+msgstr "Dieser Monat"
+
+#: widgets/register.cpp:2298
+msgid "Last week"
+msgstr "Letzte Woche"
+
+#: widgets/register.cpp:2299
+msgid "This week"
+msgstr "Diese Woche"
+
+#: widgets/register.cpp:2300
+msgid "Yesterday"
+msgstr "Gestern"
+
+#: widgets/kmymoneycombo.cpp:666 widgets/register.cpp:2301
+msgid "Today"
+msgstr "Heute"
+
+#: widgets/register.cpp:2302 widgets/register.cpp:2307
+msgid "Future transactions"
+msgstr "Zukünftige Buchungen"
+
+#: widgets/register.cpp:2303
+msgid "Next week"
+msgstr "Nächste Woche"
+
+#: widgets/kmymoneycalendar.cpp:131 widgets/register.cpp:2304
+msgid "Next month"
+msgstr "Nächster Monat"
+
+#: widgets/kmymoneycombo.cpp:670 widgets/register.cpp:2315
+msgid "Current fiscal year"
+msgstr "Aktuelles Geschäftsjahr"
+
+#: widgets/register.cpp:2316
+msgid "Previous fiscal year"
+msgstr "Voriges Geschäftsjahr"
+
+#: widgets/register.cpp:2317
+msgid "Next fiscal year"
+msgstr "Nächstes Geschäftsjahr"
+
+#: widgets/register.cpp:2349
+msgid ""
+"_: Unknown payee\n"
+"Unknown"
+msgstr "Unbekannter Zahler/Empfänger"
+
+#: widgets/register.cpp:2368
+msgid ""
+"_: Unknown category\n"
+"Unknown"
+msgstr "Unbekannte Kategorie"
+
+#: widgets/register.cpp:2387
+msgid ""
+"_: Unknown security\n"
+"Unknown"
+msgstr "Unbekanntes Wertpapier"
+
+#: widgets/klistviewsearchline.cpp:249
+msgid "Search Columns"
+msgstr "Suche Spalten"
+
+#: widgets/klistviewsearchline.cpp:251
+msgid "All Visible Columns"
+msgstr "Alle sichtbaren Spalten"
+
+#: widgets/klistviewsearchline.cpp:266
+msgid ""
+"_: Column number %1\n"
+"Column No. %1"
+msgstr "Zeilen-Nr. %1"
+
+#: widgets/klistviewsearchline.cpp:461 widgets/registersearchline.cpp:286
+msgid "S&earch:"
+msgstr "&Suchen:"
+
+#: widgets/kmymoneyaccountselector.cpp:110
+#: widgets/kmymoneyaccountselector.cpp:371
+msgid "Income categories"
+msgstr "Einnahmekategorien"
+
+#: widgets/kmymoneyaccountselector.cpp:349
+#: widgets/kmymoneyaccountselector.cpp:350
+msgid "Favorites"
+msgstr "Favoriten"
+
+#: widgets/kmymoneyaccountselector.cpp:357
+msgid "Asset accounts"
+msgstr "Anlagekonten"
+
+#: widgets/kmymoneyaccountselector.cpp:364
+msgid "Liability accounts"
+msgstr "Verbindlichkeitskonten"
+
+#: widgets/kmymoneyaccountselector.cpp:381
+msgid "Expense categories"
+msgstr "Ausgabekategorien"
+
+#: widgets/kmymoneyaccountselector.cpp:391
+msgid "Equity accounts"
+msgstr "Kapitalkonten"
+
+#: widgets/kmymoneyaccounttreebase.cpp:120
+msgid "Total Balance"
+msgstr "Gesamt Saldo"
+
+#: widgets/kmymoneyaccounttreebase.cpp:124
+msgid "Total Value"
+msgstr "Gesamtwert"
+
+#: widgets/registersearchline.cpp:75
+msgid ""
+"_: label for status combo\n"
+"Stat&us"
+msgstr "Stat&us"
+
+#: widgets/registersearchline.cpp:79
+msgid "Any status"
+msgstr "Alle Zustände"
+
+#: widgets/registersearchline.cpp:80
+msgid "Imported"
+msgstr "Importiert"
+
+#: widgets/registersearchline.cpp:81
+msgid "Matched"
+msgstr "Zugeordnet"
+
+#: widgets/registersearchline.cpp:82
+msgid "Erroneous"
+msgstr "Fehlerhaft"
+
+#: widgets/registersearchline.cpp:83
+msgid "Not marked"
+msgstr "Nicht markiert"
+
+#: widgets/kmymoneyaccounttree.cpp:54
+msgid ""
+"_: Column heading for category in tax report\n"
+"Tax"
+msgstr "Steuer"
+
+#: widgets/kmymoneyaccounttree.cpp:58
+msgid ""
+"_: Column heading for VAT category\n"
+"VAT"
+msgstr "MWSt"
+
+#: widgets/kmymoneywizard.cpp:101
+msgid "Continue with next page"
+msgstr "Mit nächster Seite fortfahren"
+
+#: widgets/kmymoneywizard.cpp:103
+msgid "Finish wizard"
+msgstr "Wizard beenden"
+
+#: widgets/kmymoneywizard.cpp:121
+msgid "&Back"
+msgstr "&Zurück"
+
+#: widgets/kmymoneywizard.cpp:122
+msgid "&Next"
+msgstr "&Weiter"
+
+#: widgets/kmymoneywizard.cpp:123
+msgid "&Finish"
+msgstr "&Fertigstellen"
+
+#: widgets/kmymoneywizard.cpp:274
+msgid "Step %1 of %2"
+msgstr "Schritt %1 von %2"
+
+#: widgets/kmymoneydateinput.cpp:235
+msgid ""
+"_: Enter todays date into date input widget\n"
+"T"
+msgstr "H"
+
+#: widgets/transactionform.cpp:302
+msgid "&Deposit"
+msgstr "&Einzahlung"
+
+#: widgets/transactionform.cpp:304 widgets/transactionform.cpp:313
+#: widgets/transactionform.cpp:323 widgets/transactionform.cpp:333
+msgid "&Transfer"
+msgstr "&Umbuchung"
+
+#: widgets/transactionform.cpp:306
+msgid "&Withdrawal"
+msgstr "&Auszahlung"
+
+#: widgets/transactionform.cpp:311
+msgid "&Payment"
+msgstr "&Zahlung"
+
+#: widgets/transactionform.cpp:315
+msgid "&Charge"
+msgstr "&Belastung"
+
+#: widgets/transactionform.cpp:321 widgets/transactionform.cpp:335
+msgid "&Decrease"
+msgstr "Ab&nahme"
+
+#: widgets/transactionform.cpp:325 widgets/transactionform.cpp:331
+msgid "&Increase"
+msgstr "Zuna&hme"
+
+#: widgets/kmymoneyscheduledcalendar.cpp:42
+msgid "Select Schedules"
+msgstr "Wähle Planungen"
+
+#: widgets/kmymoneycalendar.cpp:108
+msgid "Select Style"
+msgstr "Darstellung auswählen"
+
+#: widgets/kmymoneycalendar.cpp:128
+msgid "Choose Style"
+msgstr "Darstellung auswählen"
+
+#: widgets/kmymoneycalendar.cpp:129
+msgid "Next year"
+msgstr "Nächstes Jahr"
+
+#: widgets/kmymoneycalendar.cpp:130
+msgid "Previous year"
+msgstr "Voriges Jahr"
+
+#: widgets/kmymoneycalendar.cpp:132
+msgid "Previous month"
+msgstr "Voriger Monat"
+
+#: widgets/kmymoneycalendar.cpp:133
+msgid "Select a week"
+msgstr "Woche auswählen"
+
+#: widgets/kmymoneycalendar.cpp:134
+msgid "Select a month"
+msgstr "Monat auswählen"
+
+#: widgets/kmymoneycalendar.cpp:135
+msgid "Select a year"
+msgstr "Jahr auswählen"
+
+#: widgets/kmymoneycalendar.cpp:249
+msgid "Week XX"
+msgstr "Woche XX"
+
+#: widgets/kmymoneycalendar.cpp:264 widgets/kmymoneycalendar.cpp:300
+#, c-format
+msgid "Week %1"
+msgstr "Woche %1"
+
+#: widgets/rc.cpp:1
+msgid "Account Types"
+msgstr "Kontentypen"
+
+#: widgets/rc.cpp:3
+msgid "Detailed description"
+msgstr "Genaue Beschreibung"
+
+#: widgets/rc.cpp:18
+msgid "Period"
+msgstr "Periode"
+
+#: widgets/rc.cpp:21
+msgid "Individual"
+msgstr "Individuell"
+
+#: widgets/rc.cpp:23
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Acces to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>Recovery encryption</i> group is only accessible, if the necessary "
+"key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is "
+"found."
+msgstr ""
+"Diese Seite erlaubt es Ihnen, die Parameter einzustellen um die <b>KMyMoney</"
+"b>-Daten mittels <b>GPG</b> zu verschlüsseln.<p>\n"
+"Die Funktionen sind inaktiv, falls <b>GPG</b> auf Ihrem System nicht "
+"gefunden werden konnte. In diesem Fall stellen Sie bitte sicher, dass "
+"<b>GPG</b> für den aktuellen Benutzer sauber funktioniert.<p>\n"
+"Die Gruppe <i>Wiederherstellungsverschlüsselung</i> ist nur aktiv, falls der "
+"benötigte Schlüssel für <b>kmymoney-recover@users.sourceforge.net</b> mit "
+"der ID 0x8AFDDC8E gefunden wurde."
+
+#: widgets/rc.cpp:26
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading <i>0x</i>."
+msgstr ""
+"Geben Sie die ID des Schlüssels an, den Sie für die Verschlüsselung "
+"verwenden wollen. Dies kann entweder eine E-Mail-Adresse oder ein "
+"hexadezimaler Wert sein. Für den Fall dass Sie den Schlüssel in "
+"hexadezimaler Form eingeben, vergessen Sie nicht das führende <i>0x</i>."
+
+#: widgets/rc.cpp:27
+msgid "User ID"
+msgstr "Benutzer-ID"
+
+#: widgets/rc.cpp:29
+msgid "Recovery encryption"
+msgstr "Wiederherstellungsverschlüsselung"
+
+#: widgets/rc.cpp:30
+msgid "Also encrypt with kmymoney-recover key"
+msgstr "Auch mit KMyMoney-Wiederherstellungsschlüssel verschlüsseln"
+
+#: widgets/rc.cpp:32
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out."
+msgstr ""
+"Sie können die Daten zusätzlich mit dem KMyMoney-Wiederherstellungsschlüssel "
+"verschlüsseln. Nur die Kernentwickler von KMyMoney sind im Besitz des "
+"zugehörigen privaten Schlüssels zum Entschlüsseln der so verschlüsselten "
+"Daten.<p>\n"
+"\n"
+"Diese Funktion wurde für den Fall eingebaut, dass Sie Ihren Schlüssel "
+"verloren haben und nicht mehr an Ihre Daten gelangen. Falls diese Option "
+"aktiviert ist, können die KMyMoney-Entwickler die Daten entschlüsseln und "
+"Ihnen in lesbarer Form zukommen lassen. Bitte beachten Sie, dass sie Ihnen "
+"einige detaillierte Fragen zum Inhalt stellen, bevor sie Ihnen die "
+"entschlüsselten Daten zukommen lassen."
+
+#: widgets/rc.cpp:51
+msgid "PriceInfo"
+msgstr "Preisinfo"
+
+#: widgets/rc.cpp:52
+msgid "Report Tab"
+msgstr "Bericht-Karteireiter"
+
+#: widgets/rc.cpp:53
+msgid "<p>On this tab, you set the basic properties of this report.</p>"
+msgstr ""
+"<p>Auf dieser Karteikarte legen Sie die grundsätzlichen Eigenschaften des "
+"Berichts fest.</p>"
+
+#: widgets/rc.cpp:54
+msgid "Report Name"
+msgstr "Berichtsname"
+
+#: widgets/rc.cpp:55
+msgid "<p>Choose a name for this report.</p>"
+msgstr "<p>Wählen Sie einen Namen für diesen Bericht.</p>"
+
+#: widgets/rc.cpp:57
+msgid "<p>Enter a comment to help you remember the details of this report.</p>"
+msgstr ""
+"<p>Geben Sie einen Kommentar ein, um sich später an die Details des Berichts "
+"erinnern zu können.</p>"
+
+#: widgets/rc.cpp:58
+msgid "Convert values to base currency"
+msgstr "Rechne Werte in die Basiswährung um"
+
+#: widgets/rc.cpp:59
+msgid ""
+"_: Convert 'em!!\n"
+"<p>Select this option to convert all values in the report to your base "
+"currency.</p><p>Leave it unchecked if you'd like to see values in their "
+"original currency.</p><p>If currencies are not converted, then subtotals "
+"will not be shown.</p>"
+msgstr ""
+"<p>Wählen Sie diese Option, um alle Werte in Ihre Basiswährung zu "
+"konvertieren.</p><p>Wählen Sie es nicht aus, wenn Sie Werte in der "
+"Ursprungswährung sehen möchten.</p><p>Wenn Währungen nicht umgerechnet "
+"werden, werden auch Summen nicht angezeigt.</p>"
+
+#: widgets/rc.cpp:60
+msgid "Mark as a favorite report"
+msgstr "Als beliebten Bericht markieren"
+
+#: widgets/rc.cpp:61
+msgid ""
+"<p>Select this option to notate this report as one of your favorites.</"
+"p><p>All your favorite reports are grouped in one place on the report list "
+"for easy access.</p>"
+msgstr ""
+"<p>Markieren Sie diese Option, um den Bericht als einen beliebten Bericht "
+"zu kennzeichnen.</p><p>Alle Ihre beliebten Berichte sind für einen schnellen "
+"Zugang in der Berichtsliste gruppiert.</p> "
+
+#: widgets/rc.cpp:62 widgets/rc.cpp:88
+msgid "Rows/Columns Tab"
+msgstr "Zeilen/Spalten-Karteireiter"
+
+#: widgets/rc.cpp:63 widgets/rc.cpp:89
+msgid ""
+"<p>On this tab, you configure how you'd like the rows and columns to be "
+"selected and organized.</p>"
+msgstr ""
+"<p>In diesem Karteireiter können Sie einstellen, wie Sie die Zeilen und "
+"Spalten selektieren und organisieren möchten.</p>"
+
+#: widgets/rc.cpp:69 widgets/rc.cpp:81
+msgid "<p>Choose what kind of accounts to display as the rows of this report.</p>"
+msgstr ""
+"<p>Wählen Sie aus, welche Arten von Konten in den Zeilen des Berichts "
+"angezeigt werden sollen.</p>"
+
+#: widgets/rc.cpp:71
+msgid "Columns"
+msgstr "Spalten"
+
+#: widgets/rc.cpp:75
+msgid "Bi-Monthly"
+msgstr "Zwei-monatlich"
+
+#: widgets/rc.cpp:78
+msgid "<p>Choose how large of a time period each column should encompass</p>"
+msgstr "<p>Wählen Sie wie groß die Zeitperiode sein soll die jede Spalte umfasst.</p>"
+
+#: widgets/rc.cpp:79
+msgid "Income & Expenses"
+msgstr "Einnahmen & Ausgaben"
+
+#: widgets/rc.cpp:80
+msgid "Assets & Liabilities"
+msgstr "Anlagen & Verbindlichkeiten"
+
+#: widgets/rc.cpp:82
+msgid "Rows"
+msgstr "Zeilen"
+
+#: widgets/rc.cpp:83
+msgid "Show totals column"
+msgstr "Zeige Summen-Spalte"
+
+#: widgets/rc.cpp:84
+msgid "Average days"
+msgstr "Mittelwert Tage"
+
+#: widgets/rc.cpp:85
+msgid "Include scheduled transactions"
+msgstr "Geplante Buchungen einschließen"
+
+#: widgets/rc.cpp:86
+msgid "Include transfers"
+msgstr "Umbuchungen einschließen"
+
+#: widgets/rc.cpp:87
+msgid "Include unused accounts/categories"
+msgstr "Ungenutzte Konten/Kategorien einschließen"
+
+#: widgets/rc.cpp:90
+msgid "Organize by:"
+msgstr "Organisiert nach:"
+
+#: widgets/rc.cpp:92
+msgid "Top Categories"
+msgstr "Hauptkategorien"
+
+#: widgets/rc.cpp:95
+msgid "Top Accounts"
+msgstr "Hauptkonten"
+
+#: widgets/rc.cpp:98
+msgid "<p>Choose how to group the transactions in this report</p>"
+msgstr ""
+"<p>Wählen Sie aus, wie Sie die Buchungen in diesem Bericht gruppieren "
+"möchten.</p>"
+
+#: widgets/rc.cpp:99
+msgid "Show Columns"
+msgstr "Zeige Spalten"
+
+#: widgets/rc.cpp:100
+msgid ""
+"<p>Choose which columns should be shown in the report.</p><p>The date and "
+"transaction amount are always shown.</p>"
+msgstr ""
+"<p>Wählen Sie aus, wie die Spalten in diesem Bericht angezeigt werden sollen."
+"</p><p>Das Datum und der Betrag werden immer angezeigt.</p>"
+
+#: widgets/rc.cpp:102
+msgid "<p>Select this option to show the Memo column</p>"
+msgstr "<p>Wählen Sie diese Option um die Notizspalte anzuzeigen.</p>"
+
+#: widgets/rc.cpp:104
+msgid "<p>Select this option to show the Shares column for investments</p>"
+msgstr ""
+"<p>Wählen Sie diese Option um die Aktienspalte für Investitionen anzuzeigen."
+"</p>"
+
+#: widgets/rc.cpp:106
+msgid "<p>Select this option to show the Price column for investments</p>"
+msgstr ""
+"<p>Wählen Sie diese Option um die Preisspalte für Investitionen anzuzeigen.</"
+"p>"
+
+#: widgets/rc.cpp:108
+msgid "<p>Select this option to show the Reconciled column</p>"
+msgstr "<p>Wählen Sie diese Option um die Abgleichspalte anzuzeigen.</p>"
+
+#: widgets/rc.cpp:110
+msgid "<p>Select this option to show the Account column</p>"
+msgstr "<p>Wählen Sie diese Option um die Kontospalte anzuzeigen.</p>"
+
+#: widgets/rc.cpp:112
+msgid "<p>Select this option to show the Number column</p>"
+msgstr "<p>Wählen Sie diese Option um die Nummernspalte anzuzeigen.</p>"
+
+#: widgets/rc.cpp:114
+msgid "<p>Select this option to show the Payee column</p>"
+msgstr "<p>Wählen Sie diese Option um die Zahler/Empfänger anzuzeigen.</p>"
+
+#: widgets/rc.cpp:116
+msgid "<p>Select this option to show the Category column</p>"
+msgstr "<p>Wählen Sie diese Option um die Kategoriespalte anzuzeigen.</p>"
+
+#: widgets/rc.cpp:118
+msgid "<p>Select this option to show the Action column</p>"
+msgstr "<p>Wählen Sie diese Option um die Aktionsspalte anzuzeigen.</p>"
+
+#: widgets/rc.cpp:120
+msgid "<p>Select this option to show the Running balance column</p>"
+msgstr "<p>Wählen Sie diese Option um die Abgleichspalte anzuzeigen.</p>"
+
+#: widgets/rc.cpp:121
+msgid "Include only Loan accounts"
+msgstr "Verwende nur Kreditkonten"
+
+#: widgets/rc.cpp:122
+msgid "Include only Investment accounts"
+msgstr "Verwende nur Investmentkonten"
+
+#: widgets/rc.cpp:123 widgets/rc.cpp:127
+msgid ""
+"<p>Check this box to include only those categories which have been marked to "
+"\"Include on Tax Reports\"</p>"
+msgstr ""
+"<p>Markieren Sie dieses Kästchen um nur die Kategorien zu verwenden welche "
+"als \"Benutze in Steuerberichten\" markiert wurden.</p>"
+
+#: widgets/rc.cpp:124
+msgid "Hide Split Transaction Details"
+msgstr "Ausblenden Teil Buchung Details"
+
+#: widgets/rc.cpp:125
+msgid "Do not display the individual transactions that make up a split transaction"
+msgstr ""
+"Nicht die individuellen Buchungen darstellen, aus denen eine Split-Buchung "
+"besteht"
+
+#: widgets/rc.cpp:126
+msgid "Include only Tax categories"
+msgstr "Schließe nur Steuerkategorien ein"
+
+#: widgets/rc.cpp:128
+msgid "Chart Tab"
+msgstr "Diagramm"
+
+#: widgets/rc.cpp:129
+msgid "<p>On this tab, you configure the chart drawn forthis report.</p>"
+msgstr ""
+"<p>Auf dieser Karteikarte können Sie das Diagramm für diesen Bericht "
+"einrichten.</p>"
+
+#: widgets/rc.cpp:130
+msgid "Chart Type"
+msgstr "Diagrammtyp"
+
+#: widgets/rc.cpp:131
+msgid "<p>Select what form you would like the chart to be drawn as.</p>"
+msgstr "<p>Wählen, welche Form das Diagramm haben soll.</p>"
+
+#: widgets/rc.cpp:132
+msgid "Line"
+msgstr "Linie"
+
+#: widgets/rc.cpp:133
+msgid "Bar"
+msgstr "Balken"
+
+#: widgets/rc.cpp:134
+msgid "Stacked Bar"
+msgstr "gestapelte Balken"
+
+#: widgets/rc.cpp:135
+msgid "Pie"
+msgstr "Torte"
+
+#: widgets/rc.cpp:136
+msgid "Ring"
+msgstr "Ring"
+
+#: widgets/rc.cpp:137
+msgid "Show grid lines"
+msgstr "Gitterlinien anzeigen"
+
+#: widgets/rc.cpp:138
+msgid ""
+"<p>Select this option to show horizontal and vertical grid lines on the "
+"chart.</p>"
+msgstr ""
+"<p>Wählen Sie diese Option, um horizontale und vertikale Gitterlinien im "
+"Diagramm anzuzeigen.</p>"
+
+#: widgets/rc.cpp:139
+msgid "Draw values on chart"
+msgstr "Werte im Diagramm anzeigen"
+
+#: widgets/rc.cpp:140
+msgid ""
+"<p>Select this option to draw the numeric values for data points next to "
+"their plot location.</p>"
+msgstr ""
+"<p>Wählen Sie diese Option um numerische Werte neben die entsprechenden "
+"Punkte der Zeichnung zu schreiben.</p>"
+
+#: widgets/rc.cpp:141
+msgid "Show as chart by default"
+msgstr "Standardmäßig als Diagramm zeigen"
+
+#: widgets/rc.cpp:142
+msgid ""
+"<p>Select this option to cause the report to be shown as a chart when you "
+"first open the report. Otherwise, it will come up as a text report.</p>"
+msgstr ""
+"<p>Wählen Sie diese Option, um den Bericht als Diagramm anzuzeigen, wenn Sie "
+"den Bericht wieder öffnen. Andernfalls wird der Textbericht als erstes "
+"angezeigt.</p>"
+
+#: widgets/rc.cpp:143
+msgid "Line width"
+msgstr "Linienbreite"
+
+#: widgets/rc.cpp:144
+msgid "<p>Select what width should be used to draw the line on the chart</p>"
+msgstr "<p>Wählen Sie Linienbreite, mit der die Grafen angezeigt werden sollen.</p>"
+
+#: widgets/rc.cpp:145
+msgid "ReportControl"
+msgstr "ReportControl"
+
+#: widgets/rc.cpp:149
+msgid "Configure this report"
+msgstr "Konfiguriere diesen Bericht"
+
+#: widgets/rc.cpp:151
+msgid "Create a new report based on this one"
+msgstr "Neuen Bericht basierend auf diesem anlegen"
+
+#: widgets/rc.cpp:153
+msgid "Copy this report to the clipboard"
+msgstr "Kopiere diesen Bericht in die Zwischenablage"
+
+#: widgets/rc.cpp:155
+msgid "Export this report as an HTML or CSV file"
+msgstr "Exportiere diesen Bericht als HTML- oder CSV-Datei"
+
+#: widgets/rc.cpp:157
+msgid "Permanently delete this report"
+msgstr "Bericht endgültig löschen"
+
+#: widgets/rc.cpp:159
+msgid "Close this window"
+msgstr "Fenster schließen"
+
+#: widgets/rc.cpp:162
+msgid "n of n"
+msgstr "n von n"
+
+#: widgets/rc.cpp:166
+msgid "Account:"
+msgstr "Konto:"
+
+#: widgets/rc.cpp:168
+msgid "Enter..."
+msgstr "Eintragen..."
+
+#: widgets/rc.cpp:171
+msgid "TransactionSortOptionDecl"
+msgstr "BuchungSortOptionDekl"
+
+#: widgets/rc.cpp:173
+msgid "Sort order"
+msgstr "Sortier-Reihenfolge"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Sunday\n"
+"Sun"
+msgstr "So"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Saturday\n"
+"Sat"
+msgstr "Sa"
+
+#: widgets/kmymoneydatetbl.cpp:171 widgets/kmymoneydatetbl.cpp:178
+msgid "Week %1 for year %2."
+msgstr "Woche %1 für das Jahr %2."
+
+#: widgets/kmymoneycombo.cpp:417
+msgid "ATM"
+msgstr "Geldautomat"
+
+#: widgets/kmymoneycombo.cpp:418
+msgid "Withdrawal"
+msgstr "Abhebung"
+
+#: widgets/kmymoneycombo.cpp:421
+msgid "Cheque"
+msgstr "Scheck"
+
+#: widgets/kmymoneycombo.cpp:469
+msgid ""
+"_: Activity for expense categories\n"
+"Paid"
+msgstr "Bezahlt"
+
+#: widgets/kmymoneycombo.cpp:470
+msgid ""
+"_: Activity for income categories\n"
+"Received"
+msgstr "Empfangen"
+
+#: widgets/kmymoneycombo.cpp:519
+msgid "Reinvest dividend"
+msgstr "Wiederanlage der Dividende"
+
+#: widgets/kmymoneycombo.cpp:664
+msgid "All dates"
+msgstr "Beliebiges Datum"
+
+#: widgets/kmymoneycombo.cpp:665
+msgid "As of today"
+msgstr "Zum heutigen Tage"
+
+#: widgets/kmymoneycombo.cpp:667
+msgid "Current month"
+msgstr "Aktueller Monat"
+
+#: widgets/kmymoneycombo.cpp:668
+msgid "Current quarter"
+msgstr "Aktuelles Quartal"
+
+#: widgets/kmymoneycombo.cpp:669
+msgid "Current year"
+msgstr "Aktuelles Jahr"
+
+#: widgets/kmymoneycombo.cpp:671
+msgid "Month to date"
+msgstr "Monat bis heute"
+
+#: widgets/kmymoneycombo.cpp:672
+msgid "Year to date"
+msgstr "1.1. bis heute"
+
+#: widgets/kmymoneycombo.cpp:673
+msgid "Year to month"
+msgstr "1.1. bis zum aktuellen Monat"
+
+#: widgets/kmymoneycombo.cpp:675
+msgid "Last year"
+msgstr "Letztes Jahr"
+
+#: widgets/kmymoneycombo.cpp:676
+msgid "Last fiscal year"
+msgstr "Letztes Geschäftsjahr"
+
+#: widgets/kmymoneycombo.cpp:677
+msgid "Last 7 days"
+msgstr "Letzte 7 Tage"
+
+#: widgets/kmymoneycombo.cpp:678
+msgid "Last 30 days"
+msgstr "Letzte 30 Tage"
+
+#: widgets/kmymoneycombo.cpp:679
+msgid "Last 3 months"
+msgstr "Letzte 3 Monate"
+
+#: widgets/kmymoneycombo.cpp:680
+msgid "Last quarter"
+msgstr "Letztes Quartal"
+
+#: widgets/kmymoneycombo.cpp:681
+msgid "Last 6 months"
+msgstr "Letzte 6 Monate"
+
+#: widgets/kmymoneycombo.cpp:682
+msgid "Last 11 months"
+msgstr "Letzte 11 Monate"
+
+#: widgets/kmymoneycombo.cpp:683
+msgid "Last 12 months"
+msgstr "Letzte 12 Monate"
+
+#: widgets/kmymoneycombo.cpp:684
+msgid "Next 7 days"
+msgstr "Nächste 7 Tage"
+
+#: widgets/kmymoneycombo.cpp:685
+msgid "Next 30 days"
+msgstr "Nächste 30 Tage"
+
+#: widgets/kmymoneycombo.cpp:686
+msgid "Next 3 months"
+msgstr "Nächste 3 Monate"
+
+#: widgets/kmymoneycombo.cpp:687
+msgid "Next quarter"
+msgstr "Nächstes Quartal"
+
+#: widgets/kmymoneycombo.cpp:688
+msgid "Next 6 months"
+msgstr "Nächste 6 Monate"
+
+#: widgets/kmymoneycombo.cpp:689
+msgid "Next 12 months"
+msgstr "Nächste 12 Monate"
+
+#: widgets/kmymoneycombo.cpp:690
+msgid "Last 3 months to next 3 months"
+msgstr "Letzte 3 Monate bis nächste 3 Monate"
+
+#: widgets/kmymoneycombo.cpp:691
+msgid "User defined"
+msgstr "Benutzerdefiniert"
+
+
diff --git a/po/en_GB.po b/po/en_GB.po
new file mode 100644
index 0000000..2e00ef3
--- /dev/null
+++ b/po/en_GB.po
@@ -0,0 +1,14434 @@
+# translation of en_GB.po to
+# translation of kmymoney2.po to
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+# Benjamin <benjamincarlyle@optusnet.com.au>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: en_GB\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-25 19:04+0200\n"
+"PO-Revision-Date: 2009-12-17 21:36+0100\n"
+"Last-Translator: Ian Neal <ianrsn70@users.sourceforge.net>\n"
+"Language-Team: <en@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.0.2\n"
+
+#: wizards/wizardpages/rc.cpp:1
+msgid "Select groups of accounts that correspond to the ways that you will use KMyMoney. Each group you select will cause several accounts and categories to be created. Select the groups that are relevant to you. You can always create additional accounts manually later."
+msgstr "Select groups of accounts that correspond to the ways that you will use KMyMoney. Each group you select will cause several accounts and categories to be created. Select the groups that are relevant to you. You can always create additional accounts manually later."
+
+#: wizards/wizardpages/rc.cpp:2
+msgid "<p>KMyMoney supports multiple currencies, nevertheless one of them will be used as your base currency. The base currency is used as default for new accounts and reports. Please select the base currency from the following list."
+msgstr "<p>KMyMoney supports multiple currencies, nevertheless one of them will be used as your base currency. The base currency is used as default for new accounts and reports. Please select the base currency from the following list."
+
+#: dialogs/kequitypriceupdatedlg.cpp:71
+#: dialogs/rc.cpp:399
+#: dialogs/rc.cpp:485
+#: dialogs/rc.cpp:724
+#: dialogs/settings/rc.cpp:108
+#: reports/listtable.cpp:226
+#: views/kinvestmentview.cpp:71
+#: views/kpayeesview.cpp:351
+#: views/rc.cpp:13
+#: widgets/rc.cpp:5
+#: widgets/rc.cpp:34
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1599
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1629
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1673
+#: wizards/wizardpages/rc.cpp:3
+msgid "Name"
+msgstr "Name"
+
+#: wizards/wizardpages/rc.cpp:4
+msgid "ISO Code"
+msgstr "ISO Code"
+
+#: dialogs/kequitypriceupdatedlg.cpp:69
+#: dialogs/kequitypriceupdatedlg.cpp:70
+#: dialogs/rc.cpp:71
+#: dialogs/rc.cpp:725
+#: dialogs/settings/rc.cpp:112
+#: views/kinvestmentview.cpp:72
+#: widgets/rc.cpp:37
+#: wizards/wizardpages/rc.cpp:5
+msgid "Symbol"
+msgstr "Symbol"
+
+#: wizards/wizardpages/rc.cpp:6
+msgid ""
+"<p>Use the fields below to enter some information about yourself.</p>\n"
+"\n"
+"<p>All information is optional and only used to personalize your KMyMoney file.</p>"
+msgstr ""
+"<p>Use the fields below to enter some information about yourself.</p>\n"
+"\n"
+"<p>All information is optional and only used to personalise your KMyMoney file.</p>"
+
+#: dialogs/rc.cpp:425
+#: wizards/newuserwizard/rc.cpp:27
+#: wizards/wizardpages/rc.cpp:7
+msgid "Town:"
+msgstr "Town:"
+
+#: dialogs/rc.cpp:420
+#: wizards/newuserwizard/rc.cpp:22
+#: wizards/wizardpages/rc.cpp:8
+msgid "County/State:"
+msgstr "County/State:"
+
+#: dialogs/rc.cpp:391
+#: dialogs/rc.cpp:421
+#: wizards/newuserwizard/rc.cpp:23
+#: wizards/wizardpages/rc.cpp:9
+msgid "Street:"
+msgstr "Street:"
+
+#: dialogs/rc.cpp:422
+#: wizards/newuserwizard/rc.cpp:24
+#: wizards/wizardpages/rc.cpp:10
+msgid "Email:"
+msgstr "Email:"
+
+#: dialogs/rc.cpp:424
+#: wizards/newuserwizard/rc.cpp:26
+#: wizards/wizardpages/rc.cpp:11
+msgid "Telephone:"
+msgstr "Telephone:"
+
+#: dialogs/rc.cpp:423
+#: wizards/newuserwizard/rc.cpp:25
+#: wizards/wizardpages/rc.cpp:12
+msgid "Your name:"
+msgstr "Your name:"
+
+#: dialogs/rc.cpp:427
+#: wizards/newuserwizard/rc.cpp:29
+#: wizards/wizardpages/rc.cpp:13
+msgid "Load from Addressbook"
+msgstr "Load from Addressbook"
+
+#: dialogs/rc.cpp:392
+#: dialogs/rc.cpp:426
+#: views/rc.cpp:68
+#: wizards/wizardpages/rc.cpp:14
+msgid "Postal Code:"
+msgstr "Postcode:"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:82
+msgid "KMyMoney New Account Setup"
+msgstr "KMyMoney New Account Setup"
+
+#: dialogs/rc.cpp:360
+#: dialogs/rc.cpp:361
+#: reports/listtable.cpp:230
+#: wizards/newaccountwizard/knewaccountwizard.cpp:83
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1616
+#: wizards/newaccountwizard/rc.cpp:61
+msgid "Institution"
+msgstr "Institution"
+
+#: dialogs/investactivities.cpp:198
+#: dialogs/investactivities.cpp:286
+#: dialogs/investactivities.cpp:367
+#: dialogs/kfindtransactiondlg.cpp:181
+#: dialogs/rc.cpp:139
+#: dialogs/rc.cpp:192
+#: dialogs/rc.cpp:207
+#: dialogs/transactioneditor.cpp:734
+#: reports/listtable.cpp:201
+#: reports/pivottable.cpp:1336
+#: reports/pivottable.cpp:1586
+#: views/kforecastview.cpp:393
+#: views/kgloballedgerview.cpp:175
+#: views/khomeview.cpp:418
+#: views/khomeview.cpp:491
+#: views/khomeview.cpp:525
+#: views/khomeview.cpp:764
+#: views/khomeview.cpp:967
+#: views/khomeview.cpp:1437
+#: views/kscheduledview.cpp:71
+#: views/rc.cpp:17
+#: views/rc.cpp:44
+#: widgets/kmymoneyaccounttreebase.cpp:58
+#: widgets/kmymoneyaccounttreeforecast.cpp:41
+#: widgets/rc.cpp:109
+#: widgets/register.cpp:566
+#: widgets/transaction.cpp:978
+#: widgets/transaction.cpp:1535
+#: wizards/newaccountwizard/knewaccountwizard.cpp:84
+msgid "Account"
+msgstr "Account"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:85
+msgid "Broker"
+msgstr "Broker"
+
+#: dialogs/kfindtransactiondlg.cpp:225
+#: dialogs/rc.cpp:70
+#: dialogs/rc.cpp:104
+#: dialogs/rc.cpp:159
+#: dialogs/rc.cpp:223
+#: dialogs/rc.cpp:246
+#: dialogs/rc.cpp:751
+#: dialogs/settings/rc.cpp:109
+#: widgets/rc.cpp:35
+#: widgets/register.cpp:568
+#: wizards/newaccountwizard/knewaccountwizard.cpp:86
+msgid "Details"
+msgstr "Details"
+
+#: dialogs/knewloanwizard.cpp:636
+#: dialogs/rc.cpp:231
+#: dialogs/rc.cpp:608
+#: kmymoneyutils.cpp:191
+#: views/khomeview.cpp:399
+#: wizards/newaccountwizard/knewaccountwizard.cpp:87
+#: wizards/newaccountwizard/knewaccountwizard.cpp:880
+msgid "Payments"
+msgstr "Payments"
+
+#: dialogs/investactivities.cpp:195
+#: dialogs/investactivities.cpp:283
+#: dialogs/investactivities.cpp:422
+#: dialogs/investtransactioneditor.cpp:217
+#: reports/listtable.cpp:221
+#: widgets/transaction.cpp:1565
+#: wizards/newaccountwizard/knewaccountwizard.cpp:88
+msgid "Fees"
+msgstr "Fees"
+
+#: dialogs/rc.cpp:624
+#: views/khomeview.cpp:415
+#: views/khomeview.cpp:488
+#: views/khomeview.cpp:522
+#: wizards/newaccountwizard/knewaccountwizard.cpp:89
+msgid "Schedule"
+msgstr "Schedule"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:90
+msgid "Payout"
+msgstr "Payout"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:91
+msgid "Parent Account"
+msgstr "Parent Account"
+
+#: dialogs/rc.cpp:719
+#: wizards/newaccountwizard/knewaccountwizard.cpp:92
+#: wizards/newuserwizard/knewuserwizard.cpp:86
+msgid "Finish"
+msgstr "&Finish"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:248
+msgid "Credit card payment"
+msgstr "Credit card payment"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:264
+#, c-format
+msgid "Loan payment for %1"
+msgstr "Loan payment for %1"
+
+#: mymoney/mymoneyscheduled.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:279
+msgid "Loan payment"
+msgstr "Loan payment"
+
+#: dialogs/rc.cpp:134
+#: wizards/newaccountwizard/knewaccountwizard.cpp:293
+msgid "Amortization"
+msgstr "Amortisation"
+
+#: dialogs/investactivities.cpp:196
+#: dialogs/investactivities.cpp:284
+#: dialogs/investactivities.cpp:366
+#: dialogs/investactivities.cpp:423
+#: dialogs/investtransactioneditor.cpp:227
+#: dialogs/rc.cpp:135
+#: dialogs/rc.cpp:152
+#: dialogs/rc.cpp:544
+#: reports/listtable.cpp:222
+#: widgets/transaction.cpp:1597
+#: wizards/newaccountwizard/knewaccountwizard.cpp:302
+msgid "Interest"
+msgstr "Interest"
+
+#: dialogs/kcurrencycalculator.cpp:282
+#: wizards/newaccountwizard/knewaccountwizard.cpp:351
+#: wizards/newaccountwizard/knewaccountwizard.cpp:356
+msgid "User"
+msgstr "User"
+
+#: kmymoneyutils.cpp:64
+#: mymoney/mymoneyaccount.cpp:711
+#: reports/querytabletest.cpp:422
+#: wizards/newaccountwizard/knewaccountwizard.cpp:451
+msgid "Checking"
+msgstr "Current"
+
+#: kmymoneyutils.cpp:66
+#: mymoney/mymoneyaccount.cpp:714
+#: wizards/newaccountwizard/knewaccountwizard.cpp:452
+msgid "Savings"
+msgstr "Savings"
+
+#: kmymoneyutils.cpp:68
+#: mymoney/mymoneyaccount.cpp:717
+#: reports/querytabletest.cpp:423
+#: wizards/newaccountwizard/knewaccountwizard.cpp:453
+msgid "Credit Card"
+msgstr "Credit Card"
+
+#: kmymoneyutils.cpp:70
+#: mymoney/mymoneyaccount.cpp:720
+#: wizards/newaccountwizard/knewaccountwizard.cpp:454
+msgid "Cash"
+msgstr "Cash"
+
+#: kmymoneyutils.cpp:72
+#: mymoney/mymoneyaccount.cpp:723
+#: wizards/newaccountwizard/knewaccountwizard.cpp:455
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+msgid "Loan"
+msgstr "Loan"
+
+#: kmymoneyutils.cpp:76
+#: mymoney/mymoneyaccount.cpp:729
+#: wizards/newaccountwizard/knewaccountwizard.cpp:456
+msgid "Investment"
+msgstr "Investment"
+
+#: converter/mymoneytemplate.cpp:178
+#: converter/mymoneytemplate.cpp:179
+#: dialogs/knewaccountdlg.cpp:1014
+#: kmymoneyutils.cpp:80
+#: mymoney/mymoneyaccount.cpp:735
+#: views/kaccountsview.cpp:352
+#: views/kmymoneyview.cpp:765
+#: widgets/kmymoneyaccountselector.cpp:177
+#: widgets/kmymoneyaccountselector.cpp:356
+#: wizards/newaccountwizard/knewaccountwizard.cpp:457
+msgid "Asset"
+msgstr "Asset"
+
+#: converter/mymoneytemplate.cpp:182
+#: converter/mymoneytemplate.cpp:183
+#: dialogs/knewaccountdlg.cpp:1016
+#: kmymoneyutils.cpp:82
+#: mymoney/mymoneyaccount.cpp:738
+#: views/kaccountsview.cpp:356
+#: views/kmymoneyview.cpp:766
+#: widgets/kmymoneyaccountselector.cpp:178
+#: widgets/kmymoneyaccountselector.cpp:363
+#: wizards/newaccountwizard/knewaccountwizard.cpp:458
+msgid "Liability"
+msgstr "Liability"
+
+#: converter/mymoneytemplate.cpp:194
+#: converter/mymoneytemplate.cpp:195
+#: kmymoneyutils.cpp:94
+#: mymoney/mymoneyaccount.cpp:756
+#: views/kaccountsview.cpp:369
+#: views/kmymoneyview.cpp:769
+#: widgets/kmymoneyaccountselector.cpp:181
+#: widgets/kmymoneyaccountselector.cpp:390
+#: wizards/newaccountwizard/knewaccountwizard.cpp:460
+msgid "Equity"
+msgstr "Equity"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid "Please make sure to enter the correct conversion for the selected opening date. If you requested an online quote it might be provided for a different date."
+msgstr "Please make sure to enter the correct conversion for the selected opening date. If you requested an online quote it might be provided for a different date."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid "Check date"
+msgstr "Cheque date"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:562
+msgid "1 %1 equals %2"
+msgstr "1 %1 equals %2"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:577
+msgid "Conversion rate is not positive"
+msgstr "Conversion rate is not positive"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:583
+msgid "No account name supplied"
+msgstr "No account name supplied"
+
+#: dialogs/keditscheduledlg.cpp:114
+#: mymoney/mymoneyscheduled.cpp:1026
+#: wizards/newaccountwizard/knewaccountwizard.cpp:680
+msgid "Write check"
+msgstr "Write cheque"
+
+#: dialogs/keditscheduledlg.cpp:111
+#: mymoney/mymoneyscheduled.cpp:1014
+#: wizards/newaccountwizard/knewaccountwizard.cpp:682
+msgid "Direct debit"
+msgstr "Direct debit"
+
+#: dialogs/keditscheduledlg.cpp:113
+#: mymoney/mymoneyscheduled.cpp:1032
+#: wizards/newaccountwizard/knewaccountwizard.cpp:683
+msgid "Bank transfer"
+msgstr "Bank transfer"
+
+#: dialogs/keditscheduledlg.cpp:112
+#: mymoney/mymoneyscheduled.cpp:1029
+#: wizards/newaccountwizard/knewaccountwizard.cpp:685
+msgid "Standing order"
+msgstr "Standing order"
+
+#: dialogs/keditscheduledlg.cpp:110
+#: mymoney/mymoneyscheduled.cpp:1020
+#: wizards/newaccountwizard/knewaccountwizard.cpp:686
+msgid "Manual deposit"
+msgstr "Manual deposit"
+
+#: dialogs/keditscheduledlg.cpp:109
+#: mymoney/mymoneyscheduled.cpp:1017
+#: wizards/newaccountwizard/knewaccountwizard.cpp:687
+msgid "Direct deposit"
+msgstr "Direct deposit"
+
+#: dialogs/keditscheduledlg.cpp:115
+#: mymoney/mymoneyscheduled.cpp:1023
+#: wizards/newaccountwizard/knewaccountwizard.cpp:688
+msgid "Other"
+msgstr "Other"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:697
+msgid "CreditCard %1 monthly payment"
+msgstr "CreditCard %1 monthly payment"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:703
+msgid "Finish entry and create account"
+msgstr "Finish entry and create account"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:705
+msgid "Finish entry and create account and schedule"
+msgstr "Finish entry and create account and schedule"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:708
+msgid "Next due date is prior to opening date"
+msgstr "Next due date is prior to opening date"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:712
+msgid "No account selected"
+msgstr "No account selected"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:716
+msgid "No amount for payment selected"
+msgstr "No amount for payment selected"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:720
+msgid "No payee for payment selected"
+msgstr "No payee for payment selected"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:724
+msgid "No name assigned for schedule"
+msgstr "No name assigned for schedule"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:805
+msgid "No payee supplied"
+msgstr "No payee supplied"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:819
+msgid "No opening balance supplied"
+msgstr "No opening balance supplied"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:826
+msgid "An interest change can only happen after the first payment"
+msgstr "An interest change can only happen after the first payment"
+
+#: dialogs/knewloanwizard.cpp:615
+#: dialogs/knewloanwizard.cpp:634
+#: wizards/newaccountwizard/knewaccountwizard.cpp:884
+#: wizards/newaccountwizard/rc.cpp:55
+msgid "Months"
+msgstr "Months"
+
+#: dialogs/knewloanwizard.cpp:616
+#: dialogs/knewloanwizard.cpp:635
+#: wizards/newaccountwizard/knewaccountwizard.cpp:885
+#: wizards/newaccountwizard/knewaccountwizard.cpp:889
+#: wizards/newaccountwizard/rc.cpp:56
+msgid "Years"
+msgstr "Years"
+
+#: dialogs/knewloanwizard.cpp:711
+#: wizards/newaccountwizard/knewaccountwizard.cpp:961
+#, c-format
+msgid "KMyMoney has calculated the amount of the loan as %1."
+msgstr "KMyMoney has calculated the amount of the loan as %1."
+
+#: dialogs/knewloanwizard.cpp:718
+#: wizards/newaccountwizard/knewaccountwizard.cpp:968
+msgid "KMyMoney has calculated the interest rate to %1%."
+msgstr "KMyMoney has calculated the interest rate to %1%."
+
+#: dialogs/knewloanwizard.cpp:731
+#: wizards/newaccountwizard/knewaccountwizard.cpp:981
+msgid "KMyMoney has calculated a periodic payment of %1 to cover principal and interest."
+msgstr "KMyMoney has calculated a periodic payment of %1 to cover principal and interest."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:993
+#, c-format
+msgid "The number of payments has been decremented and the balloon payment has been modified to %1."
+msgstr "The number of payments has been decremented and the balloon payment has been modified to %1."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1001
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1021
+#, c-format
+msgid "The balloon payment has been modified to %1."
+msgstr "The balloon payment has been modified to %1."
+
+#: dialogs/knewloanwizard.cpp:763
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1013
+msgid "KMyMoney has calculated the term of your loan as %1. "
+msgstr "KMyMoney has calculated the term of your loan as %1. "
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1052
+msgid "KMyMoney has calculated a balloon payment of %1 for this loan."
+msgstr "KMyMoney has calculated a balloon payment of %1 for this loan."
+
+#: dialogs/knewloanwizard.cpp:809
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1059
+msgid "KMyMoney has successfully verified your loan information."
+msgstr "KMyMoney has successfully verified your loan information."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1067
+msgid "You have entered mis-matching information. Please modify your figures or leave one value empty to let KMyMoney calculate it for you"
+msgstr "You have entered mis-matching information. Please modify your figures or leave one value empty to let KMyMoney calculate it for you"
+
+#: dialogs/knewloanwizard.cpp:504
+#: dialogs/knewloanwizard.cpp:513
+#: dialogs/knewloanwizard.cpp:522
+#: dialogs/knewloanwizard.cpp:532
+#: dialogs/knewloanwizard.cpp:820
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1070
+msgid "Calculation error"
+msgstr "Calculation error"
+
+#: dialogs/knewloanwizard.cpp:824
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1074
+msgid ""
+"\n"
+"\n"
+"Accept this or modify the loan information and recalculate."
+msgstr ""
+"\n"
+"\n"
+"Accept this or modify the loan information and recalculate."
+
+#: dialogs/knewloanwizard.cpp:826
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1076
+msgid "Calculation successful"
+msgstr "Calculation successful"
+
+#: dialogs/knewloanwizard.cpp:846
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1129
+#, c-format
+msgid ""
+"_n: one month\n"
+"%n months"
+msgstr ""
+"_n: one month\n"
+"%n months"
+
+#: dialogs/knewloanwizard.cpp:850
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1133
+#, c-format
+msgid ""
+"_n: one year\n"
+"%n years"
+msgstr ""
+"_n: one year\n"
+"%n years"
+
+#: dialogs/knewloanwizard.cpp:854
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1137
+#, c-format
+msgid ""
+"_n: one payment\n"
+"%n payments"
+msgstr ""
+"_n: one payment\n"
+"%n payments"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1190
+msgid "Press Calculate to verify the values"
+msgstr "Press Calculate to verify the values"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1194
+msgid "Not all details supplied"
+msgstr "Not all details supplied"
+
+#: dialogs/kaccountselectdlg.cpp:70
+#: dialogs/knewloanwizard.cpp:122
+#: dialogs/knewloanwizard.cpp:136
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1381
+msgid "&Create..."
+msgstr "&Create..."
+
+#: dialogs/knewloanwizard.cpp:138
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1383
+msgid "Create a new asset account"
+msgstr "Create a new asset account"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1384
+msgid "If the asset account does not yet exist, press this button to create it."
+msgstr "If the asset account does not yet exist, press this button to create it."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1596
+msgid "Account information"
+msgstr "Account information"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1601
+#: wizards/newaccountwizard/rc.cpp:59
+msgid "Subaccount of"
+msgstr "Subaccount of"
+
+#: dialogs/rc.cpp:225
+#: dialogs/rc.cpp:326
+#: dialogs/rc.cpp:371
+#: dialogs/rc.cpp:723
+#: plugins/ofximport/dialogs/rc.cpp:23
+#: reports/listtable.cpp:225
+#: widgets/kmymoneyaccounttreebase.cpp:113
+#: widgets/register.cpp:61
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1606
+msgid "Type"
+msgstr "Type"
+
+#: dialogs/kcurrencyeditdlg.cpp:62
+#: dialogs/rc.cpp:56
+#: dialogs/rc.cpp:59
+#: dialogs/rc.cpp:75
+#: dialogs/rc.cpp:727
+#: dialogs/rc.cpp:792
+#: kmymoneyutils.cpp:84
+#: kmymoneyutils.cpp:111
+#: mymoney/mymoneyaccount.cpp:741
+#: mymoney/mymoneysecurity.cpp:169
+#: reports/listtable.cpp:233
+#: widgets/kmymoneypriceview.cpp:127
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1607
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1630
+#: wizards/newaccountwizard/rc.cpp:6
+#: wizards/newaccountwizard/rc.cpp:24
+msgid "Currency"
+msgstr "Currency"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1608
+#: wizards/newaccountwizard/rc.cpp:7
+#: wizards/newuserwizard/rc.cpp:9
+msgid "Opening date"
+msgstr "Opening date"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1610
+#: wizards/newaccountwizard/rc.cpp:9
+msgid "Conversion rate"
+msgstr "Conversion rate"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1613
+#: wizards/newaccountwizard/rc.cpp:15
+#: wizards/newuserwizard/rc.cpp:13
+msgid "Opening balance"
+msgstr "Opening balance"
+
+#: dialogs/keditscheduledlg.cpp:507
+#: dialogs/transactioneditor.cpp:784
+#: dialogs/transactioneditor.cpp:848
+#: plugins/ofximport/dialogs/rc.cpp:22
+#: widgets/rc.cpp:111
+#: widgets/register.cpp:59
+#: widgets/transaction.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1618
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1632
+msgid "Number"
+msgstr "Number"
+
+#: dialogs/rc.cpp:365
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1621
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1634
+#: wizards/newaccountwizard/rc.cpp:26
+#: wizards/newaccountwizard/rc.cpp:66
+msgid "IBAN"
+msgstr "IBAN"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1627
+msgid "Brokerage Account"
+msgstr "Brokerage Account"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1640
+msgid "Loan information"
+msgstr "Loan information"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1643
+msgid "Amount borrowed"
+msgstr "Amount borrowed"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1645
+msgid "Amount lent"
+msgstr "Amount lent"
+
+#: dialogs/rc.cpp:515
+#: dialogs/rc.cpp:546
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1647
+#: wizards/newaccountwizard/rc.cpp:75
+msgid "Interest rate"
+msgstr "Interest rate"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1648
+msgid "Interest rate is"
+msgstr "Interest rate is"
+
+#: dialogs/rc.cpp:509
+#: dialogs/rc.cpp:572
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1649
+msgid "Principal and interest"
+msgstr "Principal and interest"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1650
+#: wizards/newaccountwizard/rc.cpp:90
+msgid "Additional fees"
+msgstr "Additional fees"
+
+#: dialogs/rc.cpp:525
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1651
+#: wizards/newaccountwizard/rc.cpp:44
+msgid "Payment frequency"
+msgstr "Payment frequency"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1652
+#: wizards/newaccountwizard/rc.cpp:105
+msgid "Payment account"
+msgstr "Payment account"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1655
+msgid "Payout information"
+msgstr "Payout information"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1658
+msgid "Refinance"
+msgstr "Refinance"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1661
+msgid "Transfer amount to"
+msgstr "Transfer amount to"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1663
+msgid "Transfer amount from"
+msgstr "Transfer amount from"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1665
+msgid "Payment date"
+msgstr "Payment date"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1671
+msgid "Schedule information"
+msgstr "Schedule information"
+
+#: reports/listtable.cpp:228
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1684
+msgid "Occurence"
+msgstr "Occurrence"
+
+#: mymoney/mymoneyscheduled.cpp:891
+#: mymoney/mymoneyscheduled.cpp:947
+#: mymoney/mymoneyscheduled.cpp:1283
+#: mymoney/mymoneyscheduletest.cpp:1343
+#: widgets/rc.cpp:19
+#: widgets/rc.cpp:74
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+msgid "Monthly"
+msgstr "Monthly"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1677
+msgid "Paid from"
+msgstr "Paid from"
+
+#: widgets/kmymoneycombo.cpp:473
+#: widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1678
+msgid "Pay to"
+msgstr "Pay to"
+
+#: dialogs/investactivities.cpp:197
+#: dialogs/investactivities.cpp:285
+#: dialogs/investactivities.cpp:365
+#: dialogs/kfindtransactiondlg.cpp:197
+#: dialogs/kmymoneysplittable.cpp:80
+#: dialogs/rc.cpp:51
+#: dialogs/rc.cpp:212
+#: reports/listtable.cpp:197
+#: views/khomeview.cpp:421
+#: views/khomeview.cpp:494
+#: views/khomeview.cpp:528
+#: views/kscheduledview.cpp:73
+#: views/rc.cpp:63
+#: widgets/register.cpp:58
+#: widgets/transaction.cpp:1055
+#: widgets/transaction.cpp:1578
+#: widgets/transaction.cpp:1610
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1679
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1685
+msgid "Amount"
+msgstr "Amount"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1680
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1686
+msgid "First payment due"
+msgstr "First payment due"
+
+#: dialogs/rc.cpp:102
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1681
+#: wizards/newaccountwizard/rc.cpp:115
+msgid "Payment method"
+msgstr "Payment method"
+
+#: wizards/newaccountwizard/rc.cpp:1
+msgid "This page summarizes the data you have entered. Press <b>Finish</b> to create the account, schedules, etc. or use <b>Back</b> to modify your entries."
+msgstr "This page summarises the data you have entered. Press <b>Finish</b> to create the account, schedules, etc. or use <b>Back</b> to modify your entries."
+
+#: wizards/newaccountwizard/rc.cpp:2
+msgid "Item"
+msgstr "Item"
+
+#: dialogs/rc.cpp:110
+#: dialogs/rc.cpp:165
+#: dialogs/rc.cpp:252
+#: dialogs/rc.cpp:757
+#: dialogs/rc.cpp:818
+#: views/kinvestmentview.cpp:74
+#: widgets/register.cpp:574
+#: wizards/newaccountwizard/rc.cpp:3
+msgid "Value"
+msgstr "Value"
+
+#: wizards/newaccountwizard/rc.cpp:4
+msgid ""
+"Enter the name of the account under which it is known within KMyMoney.\n"
+"Select the type for the new account. Use the <b>What's this?</b> feature to see more details about the various account types.\n"
+"Enter the date the account was opened and its currency."
+msgstr ""
+"Enter the name of the account under which it is known within KMyMoney.\n"
+"Select the type for the new account. Use the <b>What's this?</b> feature to see more details about the various account types.\n"
+"Enter the date the account was opened and its currency."
+
+#: wizards/newaccountwizard/rc.cpp:5
+msgid "Select the currency in which this account is denominated."
+msgstr "Select the currency in which this account is denominated."
+
+#: wizards/newaccountwizard/rc.cpp:8
+msgid "The opening balance is the balance of the account when you start using it with KMyMoney. For new accounts this is usually 0 but for existing accounts this may well differ. Please consult the account statements to figure out this value. The opening balance is to be provided in the currency of the account as selected with the currency button."
+msgstr "The opening balance is the balance of the account when you start using it with KMyMoney. For new accounts this is usually 0 but for existing accounts this may well differ. Please consult the account statements to figure out this value. The opening balance is to be provided in the currency of the account as selected with the currency button."
+
+#: wizards/newaccountwizard/rc.cpp:10
+msgid ""
+"The opening date would be the date of the last statement. In case you want to keep track of transactions prior to this date, enter the ending balance and statement date of a prior statement and add all following transactions into KMyMoney.\n"
+"<br>\n"
+"<i>Note</i>: If you do not know the exact amount of the opening balance, enter an estimate. You can change this value later before you reconcile this account for the first time."
+msgstr ""
+"The opening date would be the date of the last statement. In case you want to keep track of transactions prior to this date, enter the ending balance and statement date of a prior statement and add all following transactions into KMyMoney.\n"
+"<br>\n"
+"<i>Note</i>: If you do not know the exact amount of the opening balance, enter an estimate. You can change this value later before you reconcile this account for the first time."
+
+#: dialogs/rc.cpp:52
+#: dialogs/rc.cpp:54
+#: dialogs/rc.cpp:57
+#: dialogs/rc.cpp:60
+#: dialogs/rc.cpp:748
+#: dialogs/rc.cpp:749
+#: dialogs/rc.cpp:768
+#: widgets/rc.cpp:6
+#: widgets/rc.cpp:7
+#: widgets/rc.cpp:8
+#: widgets/rc.cpp:9
+#: widgets/rc.cpp:10
+#: widgets/rc.cpp:11
+#: widgets/rc.cpp:12
+#: widgets/rc.cpp:13
+#: widgets/rc.cpp:14
+#: widgets/rc.cpp:15
+#: widgets/rc.cpp:16
+#: widgets/rc.cpp:17
+#: wizards/newaccountwizard/rc.cpp:11
+#: wizards/newaccountwizard/rc.cpp:88
+#: wizards/newaccountwizard/rc.cpp:91
+#: wizards/newaccountwizard/rc.cpp:93
+#: wizards/newuserwizard/rc.cpp:14
+msgid "xxx"
+msgstr "xxx"
+
+#: wizards/newaccountwizard/rc.cpp:12
+msgid "Account type"
+msgstr "Account type"
+
+#: wizards/newaccountwizard/rc.cpp:13
+msgid "For foreign currencies an initial conversion rate needs to be provided. This should be the price of the foreign currency in the base currency on the opening date of the account."
+msgstr "For foreign currencies an initial conversion rate needs to be provided. This should be the price of the foreign currency in the base currency on the opening date of the account."
+
+#: wizards/newaccountwizard/rc.cpp:14
+msgid "Account name"
+msgstr "Account name"
+
+#: wizards/newaccountwizard/rc.cpp:16
+msgid ""
+"<p><b>Checking</b>\n"
+"Use the checking account type to manage activities on your checking account e.g. payments, checks and cash card purchases.</p>\n"
+"\n"
+"<p><b>Savings</b>\n"
+"Use the savings account type to manage activities on your savings account.</p>\n"
+"\n"
+"<p><b>Credit Card</b>\n"
+"Use the credit card account type to manage activities on your credit card.</p>\n"
+"\n"
+"<p><b>Cash</b>\n"
+"\n"
+"Use the cash account type to manage activities in your wallet.</p>\n"
+"\n"
+"<p><b>Loan</b>\n"
+"Use the loan account type to manage amortization loans (e.g. mortgages, car loan, money you lend, private loans etc.).</p>\n"
+"\n"
+"<p><b>Investment</b>\n"
+"Use the investment account to manage your stock, mutual fund and other investments.</p>\n"
+"\n"
+"<p><b>Asset</b>\n"
+"Use the asset account type to manage assets (e.g. your house, car or art collection).</p>\n"
+"\n"
+"<p><b>Liability</b>\n"
+"Use the liability account type to manage any type of liability except amortization loans. Use it for taxes you owe or money you borrowed from friends. For amortization loans like mortgages you should create a loan account.</p>"
+msgstr ""
+"<p><b>Current</b>\n"
+"Use the current account type to manage activities on your current account e.g. payments, cheques and cash card purchases.</p>\n"
+"\n"
+"<p><b>Savings</b>\n"
+"Use the savings account type to manage activities on your savings account.</p>\n"
+"\n"
+"<p><b>Credit Card</b>\n"
+"Use the credit card account type to manage activities on your credit card.</p>\n"
+"\n"
+"<p><b>Cash</b>\n"
+"\n"
+"Use the cash account type to manage activities in your wallet.</p>\n"
+"\n"
+"<p><b>Loan</b>\n"
+"Use the loan account type to manage amortisation loans (e.g. mortgages, car loan, money you lend, private loans, etc.).</p>\n"
+"\n"
+"<p><b>Investment</b>\n"
+"Use the investment account to manage your stock, mutual fund and other investments.</p>\n"
+"\n"
+"<p><b>Asset</b>\n"
+"Use the asset account type to manage assets (e.g. your house, car or art collection).</p>\n"
+"\n"
+"<p><b>Liability</b>\n"
+"Use the liability account type to manage any type of liability except amortisation loans. Use it for taxes you owe or money you borrowed from friends. For amortisation loans like mortgages you should create a loan account.</p>"
+
+#: wizards/newaccountwizard/rc.cpp:17
+msgid "Preferred account"
+msgstr "Preferred account"
+
+#: wizards/newaccountwizard/rc.cpp:18
+msgid "Mark this checkbox if the account should be maintained as preferred account"
+msgstr "Mark this checkbox if the account should be maintained as preferred account"
+
+#: wizards/newaccountwizard/rc.cpp:19
+msgid "Selecting the <b>Preferred Account</b> checkbox will allow preferred access in some dialogs and views of KMyMoney."
+msgstr "Selecting the <b>Preferred Account</b> checkbox will allow preferred access in some dialogs and views of KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:20
+msgid "Enter a name under which this account is known within KMyMoney."
+msgstr "Enter a name under which this account is known within KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:21
+msgid "Online quote"
+msgstr "Online quote"
+
+#: wizards/newaccountwizard/rc.cpp:22
+msgid ""
+"Does this investment account have a brokerage account?<p>\n"
+"\n"
+"<b>Check</b> the mark if this investment account has an associated account for money that is not invested.<br>\n"
+"\n"
+"<b>Uncheck</b> it if you don't use this account for active stock brokerage. You should also uncheck it if this account is not maintained by a bank or broker."
+msgstr ""
+"Does this investment account have a brokerage account?<p>\n"
+"\n"
+"<b>Check</b> the mark if this investment account has an associated account for money that is not invested.<br>\n"
+"\n"
+"<b>Uncheck</b> it if you don't use this account for active stock brokerage. You should also uncheck it if this account is not maintained by a bank or broker."
+
+#: wizards/newaccountwizard/rc.cpp:23
+msgid "Create brokerage account"
+msgstr "Create brokerage account"
+
+#: wizards/newaccountwizard/rc.cpp:25
+#: wizards/newaccountwizard/rc.cpp:64
+msgid "Account number"
+msgstr "Account number"
+
+#: wizards/newaccountwizard/rc.cpp:27
+msgid "Please select the required options. Please use the <b>What's this?</b> feature to see more information about the items."
+msgstr "Please select the required options. Please use the <b>What's this?</b> feature to see more information about the items."
+
+#: wizards/newaccountwizard/rc.cpp:28
+msgid "What is the type of the loan?"
+msgstr "What is the type of the loan?"
+
+#: dialogs/rc.cpp:481
+#: wizards/newaccountwizard/rc.cpp:29
+msgid "I am borrowing money"
+msgstr "I am borrowing money"
+
+#: dialogs/rc.cpp:482
+#: wizards/newaccountwizard/rc.cpp:30
+msgid "I am lending money"
+msgstr "I am lending money"
+
+#: wizards/newaccountwizard/rc.cpp:31
+msgid "Who is the payee/payer of the loan?"
+msgstr "Who is the payee/payer of the loan?"
+
+#: wizards/newaccountwizard/rc.cpp:32
+msgid ""
+"Enter the name of the person or bank you owe money or who owes you money.\n"
+"\n"
+"If the name does not exist within KMyMoney's database, you are asked if you want to create it."
+msgstr ""
+"Enter the name of the person or bank you owe money or who owes you money.\n"
+"\n"
+"If the name does not exist within KMyMoney's database, you are asked if you want to create it."
+
+#: wizards/newaccountwizard/rc.cpp:33
+msgid "Did you make/receive any payments yet?"
+msgstr "Did you make/receive any payments yet?"
+
+#: wizards/newaccountwizard/rc.cpp:36
+msgid ""
+"Were there any payments for this loan whether they are entered into KMyMoney or not?\n"
+"\n"
+"Note: Payments made to obtain the loan (e.g. Disagio) are not considered as payments in this context."
+msgstr ""
+"Were there any payments for this loan whether they are entered into KMyMoney or not?\n"
+"\n"
+"Note: Payments made to obtain the loan (e.g. Disagio) are not considered as payments in this context."
+
+#: wizards/newaccountwizard/rc.cpp:37
+msgid "Which payments do you want to record?"
+msgstr "Which payments do you want to record?"
+
+#: wizards/newaccountwizard/rc.cpp:38
+msgid "All payments"
+msgstr "All payments"
+
+#: wizards/newaccountwizard/rc.cpp:39
+msgid "Start with this year's payments"
+msgstr "Start with this year's payments"
+
+#: wizards/newaccountwizard/rc.cpp:40
+msgid ""
+"<qt>Select which transactions should be recorded.\n"
+"\n"
+"<b>All payments</b> allows you to enter all payments made for this loan.\n"
+"\n"
+"The option to <b>start from the beginning of the current year</b> is meant for loans that are active for a longer period of time already and you don't want to enter all transactions of the past.\n"
+"</qt>"
+msgstr ""
+"<qt>Select which transactions should be recorded.\n"
+"\n"
+"<b>All payments</b> allows you to enter all payments made for this loan.\n"
+"\n"
+"The option to <b>start from the beginning of the current year</b> is meant for loans that are active for a longer period of time already and you don't want to enter all transactions of the past.\n"
+"</qt>"
+
+#: wizards/newaccountwizard/rc.cpp:41
+msgid "Balance before start of recording"
+msgstr "Balance before start of recording"
+
+#: wizards/newaccountwizard/rc.cpp:42
+msgid "Enter the ending balance found on the statement that is the last one before you want to start recording this loan in KMyMoney."
+msgstr "Enter the ending balance found on the statement that is the last one before you want to start recording this loan in KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:43
+msgid "You have selected to record only payments from the beginning of this year. Since prior transactions will not be recorded, you need to supply the balance of the loan on January 1st of this year."
+msgstr "You have selected to record only payments from the beginning of this year. Since prior transactions will not be recorded, you need to supply the balance of the loan on January 1st of this year."
+
+#: wizards/newaccountwizard/rc.cpp:45
+msgid "Interest Compounding frequency"
+msgstr "Interest Compounding frequency"
+
+#: wizards/newaccountwizard/rc.cpp:46
+msgid "Select the frequency with which the interest is compounded. If uncertain, select the same as the payment frequency. Consult your loan contract for details."
+msgstr "Select the frequency with which the interest is compounded. If uncertain, select the same as the payment frequency. Consult your loan contract for details."
+
+#: wizards/newaccountwizard/rc.cpp:47
+msgid "Due date of first payment to be recorded"
+msgstr "Due date of first payment to be recorded"
+
+#: wizards/newaccountwizard/rc.cpp:48
+msgid ""
+"Depending on the answer to <b>What do you want to record?</b> this field means the following:<p>\n"
+"\n"
+"<b>All payments</b><br>\n"
+"Enter the due date of the very first payment<p>\n"
+"\n"
+"<b>Start with this year's payments</b><br>\n"
+"Enter the due date of the first payment in the current year"
+msgstr ""
+"Depending on the answer to <b>What do you want to record?</b> this field means the following:<p>\n"
+"\n"
+"<b>All payments</b><br>\n"
+"Enter the due date of the very first payment<p>\n"
+"\n"
+"<b>Start with this year's payments</b><br>\n"
+"Enter the due date of the first payment in the current year"
+
+#: wizards/newaccountwizard/rc.cpp:49
+msgid "Type of interest rate"
+msgstr "Type of interest rate"
+
+#: wizards/newaccountwizard/rc.cpp:50
+msgid "Fixed"
+msgstr "Fixed"
+
+#: wizards/newaccountwizard/rc.cpp:51
+msgid "Variable"
+msgstr "Variable"
+
+#: wizards/newaccountwizard/rc.cpp:52
+msgid "Time between interest changes"
+msgstr "Time between interest changes"
+
+#: dialogs/knewloanwizard.cpp:613
+#: wizards/newaccountwizard/rc.cpp:53
+msgid "Days"
+msgstr "Days"
+
+#: dialogs/knewloanwizard.cpp:614
+#: wizards/newaccountwizard/rc.cpp:54
+msgid "Weeks"
+msgstr "Weeks"
+
+#: wizards/newaccountwizard/rc.cpp:57
+msgid "Next interest change is due"
+msgstr "Next interest change is due"
+
+#: wizards/newaccountwizard/rc.cpp:58
+msgid "This page allows you to select the parent account."
+msgstr "This page allows you to select the parent account."
+
+#: wizards/newaccountwizard/rc.cpp:60
+msgid ""
+"If this account is managed by an institution please select the institution from the list. If the institution does not exist yet, please choose the <b>New Institution</b> button to create it. Otherwise, leave this field empty.\n"
+"Enter the account number used by the institution to identify the account."
+msgstr ""
+"If this account is managed by an institution please select the institution from the list. If the institution does not exist yet, please choose the <b>New Institution</b> button to create it. Otherwise, leave this field empty.\n"
+"Enter the account number used by the institution to identify the account."
+
+#: wizards/newaccountwizard/rc.cpp:62
+msgid "Select the institution which manages this account or leave empty"
+msgstr "Select the institution which manages this account or leave empty"
+
+#: wizards/newaccountwizard/rc.cpp:63
+msgid "New Institution"
+msgstr "New Institution"
+
+#: wizards/newaccountwizard/rc.cpp:65
+msgid ""
+"Accounts managed by an institution are usually referenced by a unique number the so called account number. Enter that number here.\n"
+"\n"
+"KMyMoney currently uses this number only for some online banking functions."
+msgstr ""
+"Accounts managed by an institution are usually referenced by a unique number the so called account number. Enter that number here.\n"
+"\n"
+"KMyMoney currently uses this number only for some online banking functions."
+
+#: wizards/newaccountwizard/rc.cpp:67
+msgid "Enter the International Bank Account Number into this field"
+msgstr "Enter the International Bank Account Number into this field"
+
+#: wizards/newaccountwizard/rc.cpp:68
+msgid ""
+"You can enter the IBAN (International Bank Account Number) into this field if you know it. Usually, people at your institution can tell you the number or it is printed on your statements.\n"
+"\n"
+"See also http://en.wikipedia.org/wiki/International_Bank_Account_Number for more information.\n"
+"\n"
+"KMyMoney keeps this field only for documentation purposes and does not use it otherwise."
+msgstr ""
+"You can enter the IBAN (International Bank Account Number) into this field if you know it. Usually, people at your institution can tell you the number or it is printed on your statements.\n"
+"\n"
+"See also http://en.wikipedia.org/wiki/International_Bank_Account_Number for more information.\n"
+"\n"
+"KMyMoney keeps this field only for documentation purposes and does not use it otherwise."
+
+#: wizards/newaccountwizard/rc.cpp:69
+msgid "Now enter the details for your loan. You can leave one of the fields empty and KMyMoney will calculate it when you press the <b>Calculate</b> button. Before you can continue with the next page you also need to press <b>Calculate</b> so that KMyMoney can check the logical correctness of the values you have supplied."
+msgstr "Now enter the details for your loan. You can leave one of the fields empty and KMyMoney will calculate it when you press the <b>Calculate</b> button. Before you can continue with the next page you also need to press <b>Calculate</b> so that KMyMoney can check the logical correctness of the values you have supplied."
+
+#: wizards/newaccountwizard/rc.cpp:70
+msgid "The interest rate gets calculated"
+msgstr "The interest rate gets calculated"
+
+#: wizards/newaccountwizard/rc.cpp:71
+msgid "when the payment is received"
+msgstr "when the payment is received"
+
+#: wizards/newaccountwizard/rc.cpp:72
+msgid "when the payment is due"
+msgstr "when the payment is due"
+
+#: dialogs/rc.cpp:531
+#: dialogs/rc.cpp:533
+#: wizards/newaccountwizard/rc.cpp:73
+msgid "Loan amount"
+msgstr "Loan amount"
+
+#: wizards/newaccountwizard/rc.cpp:74
+msgid "Enter the amount of the loan in this field. If you want to calculate this field out of the other parameters, please leave it empty. If the field is marked as required (colored background) you have informed KMyMoney about the fact that there were already some payments towards the loan. In this case, please enter the ending balance of your last statement."
+msgstr "Enter the amount of the loan in this field. If you want to calculate this field out of the other parameters, please leave it empty. If the field is marked as required (coloured background) you have informed KMyMoney about the fact that there were already some payments towards the loan. In this case, please enter the ending balance of your last statement."
+
+#: wizards/newaccountwizard/rc.cpp:76
+msgid "Please enter the interest rate in percent or leave the field empty to calculate it."
+msgstr "Please enter the interest rate in percent or leave the field empty to calculate it."
+
+#: dialogs/rc.cpp:559
+#: wizards/newaccountwizard/rc.cpp:77
+msgid "Term"
+msgstr "Term"
+
+#: wizards/newaccountwizard/rc.cpp:78
+msgid "Please enter the term of this loan or enter 0 to calculate it. The term is the time that is required to fully repay the loan. This time might be different from the time your loan contract is signed for."
+msgstr "Please enter the term of this loan or enter 0 to calculate it. The term is the time that is required to fully repay the loan. This time might be different from the time your loan contract is signed for."
+
+#: wizards/newaccountwizard/rc.cpp:79
+msgid "Payment (principal and interest)"
+msgstr "Payment (principal and interest)"
+
+#: wizards/newaccountwizard/rc.cpp:80
+msgid "Please enter the amount you pay for principal and interest or leave the field empty to calculate it."
+msgstr "Please enter the amount you pay for principal and interest or leave the field empty to calculate it."
+
+#: wizards/newaccountwizard/rc.cpp:81
+msgid "Balloon payment"
+msgstr "Balloon payment"
+
+#: wizards/newaccountwizard/rc.cpp:82
+msgid "Please enter the amount of a final amortization payment or leave the field empty to calculate it."
+msgstr "Please enter the amount of a final amortisation payment or leave the field empty to calculate it."
+
+#: wizards/newaccountwizard/rc.cpp:83
+msgid "Calculate"
+msgstr "Calculate"
+
+#: wizards/newaccountwizard/rc.cpp:84
+msgid "Press this button to calculate/verify your loan details."
+msgstr "Press this button to calculate/verify your loan details."
+
+#: wizards/newaccountwizard/rc.cpp:85
+msgid "Pressing this button calculates a possibly missing parameter for your loan or verifies that the values entered match. If something is not correct you will receive information about it."
+msgstr "Pressing this button calculates a possibly missing parameter for your loan or verifies that the values entered match. If something is not correct you will receive information about it."
+
+#: wizards/newaccountwizard/rc.cpp:86
+msgid "Now enter the information required for the periodic loan payments. If your regular payments contains any additional fees, click on the <b>Additional fees</b> button to enter them."
+msgstr "Now enter the information required for the periodic loan payments. If your regular payments contains any additional fees, click on the <b>Additional fees</b> button to enter them."
+
+#: wizards/newaccountwizard/rc.cpp:87
+msgid "Principal + Interest"
+msgstr "Principal + Interest"
+
+#: dialogs/rc.cpp:620
+#: wizards/newaccountwizard/rc.cpp:89
+msgid "+"
+msgstr "+"
+
+#: wizards/newaccountwizard/rc.cpp:92
+msgid "= periodical payments"
+msgstr "= periodical payments"
+
+#: dialogs/rc.cpp:643
+#: wizards/newaccountwizard/rc.cpp:94
+msgid ""
+"If this loan is for an asset, such as a car or a house, you can create the asset account now. An asset account represents the total value of an asset. The money from this loan will be transfered into the asset account you create or select.\n"
+"If this loan is a 'consumer loan' (money to use however you want), you can use a checking account instead."
+msgstr ""
+"If this loan is for an asset, such as a car or a house, you can create the asset account now. An asset account represents the total value of an asset. The money from this loan will be transferred into the asset account you create or select.\n"
+"If this loan is a 'consumer loan' (money to use however you want), you can use a current account instead."
+
+#: dialogs/rc.cpp:644
+#: wizards/newaccountwizard/rc.cpp:95
+msgid "Don't create payout transaction"
+msgstr "Do not create payout transaction"
+
+#: wizards/newaccountwizard/rc.cpp:96
+msgid "Refinance existing loan"
+msgstr "Refinance existing loan"
+
+#: wizards/newaccountwizard/rc.cpp:97
+msgid "Check this if you are refinancing a loan that already exists in KMyMoney"
+msgstr "Check this if you are refinancing a loan that already exists in KMyMoney"
+
+#: dialogs/rc.cpp:642
+#: wizards/newaccountwizard/rc.cpp:98
+msgid "Asset Account"
+msgstr "Asset account"
+
+#: dialogs/rc.cpp:2
+#: wizards/newaccountwizard/rc.cpp:99
+msgid "Create"
+msgstr "Create"
+
+#: wizards/newaccountwizard/rc.cpp:100
+msgid "Loan account"
+msgstr "Loan account"
+
+#: dialogs/rc.cpp:646
+#: wizards/newaccountwizard/rc.cpp:101
+msgid "Date of payment"
+msgstr "Date of payment"
+
+#: wizards/newaccountwizard/rc.cpp:102
+msgid ""
+"KMyMoney creates a schedule for this payment and reminds you whenever a payment must be made. Please select the account to/from which payments will be made and the category the interest will be assigned to.<p>\n"
+"If you selected to record all payments this date has already been supplied. If you selected to record only this years payments, then the <b>First payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"KMyMoney creates a schedule for this payment and reminds you whenever a payment must be made. Please select the account to/from which payments will be made and the category the interest will be assigned to.<p>\n"
+"If you selected to record all payments this date has already been supplied. If you selected to record only this years payments, then the <b>First payment due date</b> is the date of the first payment made in this year."
+
+#: dialogs/rc.cpp:613
+#: wizards/newaccountwizard/rc.cpp:103
+msgid "Interest category"
+msgstr "Interest category"
+
+#: wizards/newaccountwizard/rc.cpp:104
+msgid "The category the interest part of the payment will be assigned to. If you borrow money you usually have to pay interest, so this should be an expense category. If you lend the money, you receive the interest. In this case, select an income category here."
+msgstr "The category the interest part of the payment will be assigned to. If you borrow money you usually have to pay interest, so this should be an expense category. If you lend the money, you receive the interest. In this case, select an income category here."
+
+#: wizards/newaccountwizard/rc.cpp:106
+msgid "Select the account from which you make your periodical payments or where you receive regular payments in case you lend the money. In most cases, this is a checking account."
+msgstr "Select the account from which you make your periodical payments or where you receive regular payments in case you lend the money. In most cases, this is a current account."
+
+#: dialogs/rc.cpp:519
+#: wizards/newaccountwizard/rc.cpp:107
+msgid "First payment due on"
+msgstr "First payment due on"
+
+#: wizards/newaccountwizard/rc.cpp:108
+msgid "For credit card accounts you can create a monthly schedule which will automatically remind you about the payment. Please fill in the details about this payment here."
+msgstr "For credit card accounts you can create a monthly schedule which will automatically remind you about the payment. Please fill in the details about this payment here."
+
+#: wizards/newaccountwizard/rc.cpp:109
+msgid "Yes, remind me when the payment is due"
+msgstr "Yes, remind me when the payment is due"
+
+#: wizards/newaccountwizard/rc.cpp:110
+msgid "Name of schedule"
+msgstr "Name of schedule"
+
+#: dialogs/rc.cpp:151
+#: dialogs/rc.cpp:218
+#: dialogs/rc.cpp:219
+#: reports/listtable.cpp:199
+#: views/kscheduledview.cpp:72
+#: widgets/rc.cpp:113
+#: widgets/register.cpp:57
+#: wizards/newaccountwizard/rc.cpp:111
+msgid "Payee"
+msgstr "Payee"
+
+#: wizards/newaccountwizard/rc.cpp:112
+msgid "Estimated monthly payment"
+msgstr "Estimated monthly payment"
+
+#: wizards/newaccountwizard/rc.cpp:113
+msgid "Due date of next payment"
+msgstr "Due date of next payment"
+
+#: wizards/newaccountwizard/rc.cpp:114
+msgid ""
+"Payment should be made\n"
+"from account"
+msgstr ""
+"Payment should be made\n"
+"from account"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:79
+msgid "KMyMoney New File Setup"
+msgstr "KMyMoney New File Setup"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:81
+msgid "Introduction"
+msgstr "Introduction"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:82
+msgid "Personal Data"
+msgstr "Personal Data"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:83
+msgid "Select Currency"
+msgstr "Select Currency"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:84
+msgid "Select Accounts"
+msgstr "Select Accounts"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:85
+msgid "Set preferences"
+msgstr "Set preferences"
+
+#: dialogs/knewfiledlg.cpp:120
+#: wizards/newuserwizard/knewuserwizard.cpp:197
+msgid "Unable to load data, because no contact has been associated with the owner of the standard addressbook."
+msgstr "Unable to load data, because no contact has been associated with the owner of the standard addressbook."
+
+#: dialogs/knewfiledlg.cpp:120
+#: wizards/newuserwizard/knewuserwizard.cpp:197
+msgid "Addressbook import"
+msgstr "Addressbook import"
+
+#: wizards/newuserwizard/rc.cpp:1
+msgid "A typical KMyMoney user maintains a checking a account with some institution and uses it to receive money or pay bills. If this is not the case, please deselect the checkbox below and continue on the next page."
+msgstr "A typical KMyMoney user maintains a current account with some institution and uses it to receive money or pay bills. If this is not the case, please deselect the checkbox below and continue on the next page."
+
+#: wizards/newuserwizard/rc.cpp:2
+msgid "I have a checking account that I want to manage with KMyMoney"
+msgstr "I have a current account that I want to manage with KMyMoney"
+
+#: wizards/newuserwizard/rc.cpp:3
+msgid "The name of the instititution that issued the account."
+msgstr "The name of the institution that issued the account."
+
+#: wizards/newuserwizard/rc.cpp:4
+msgid "Each institution has a routing number. Enter it here. If uncertain, leave the field blank. You can modify it later."
+msgstr "Each institution has a routing number. Enter it here. If uncertain, leave the field blank. You can modify it later."
+
+#: wizards/newuserwizard/rc.cpp:5
+msgid "Name of the institution"
+msgstr "Name of the institution"
+
+#: wizards/newuserwizard/rc.cpp:6
+msgid "Routing number"
+msgstr "Routing number"
+
+#: wizards/newuserwizard/rc.cpp:7
+msgid "In general the institution that issued the account also issued a number for it. Enter it here. If uncertain, you can modify this entry later."
+msgstr "In general the institution that issued the account also issued a number for it. Enter it here. If uncertain, you can modify this entry later."
+
+#: wizards/newuserwizard/rc.cpp:8
+msgid "Enter a descriptive name that will be used by KMyMoney to identify your checking account."
+msgstr "Enter a descriptive name that will be used by KMyMoney to identify your current account."
+
+#: wizards/newuserwizard/rc.cpp:10
+msgid "Enter the date from when on you plan to keep track of the transactions in that account. This is usually the date of the last statement. If uncertain, leave as is."
+msgstr "Enter the date from when on you plan to keep track of the transactions in that account. This is usually the date of the last statement. If uncertain, leave as is."
+
+#: wizards/newuserwizard/rc.cpp:11
+msgid "Number of the account"
+msgstr "Number of the account"
+
+#: wizards/newuserwizard/rc.cpp:12
+msgid "Name of the account"
+msgstr "Name of the account"
+
+#: wizards/newuserwizard/rc.cpp:15
+msgid "Enter the opening balance of the account. This is usually the ending balance of the last statement. If uncertain, leave as is."
+msgstr "Enter the opening balance of the account. This is usually the ending balance of the last statement. If uncertain, leave as is."
+
+#: wizards/newuserwizard/rc.cpp:16
+msgid "The fields below allow you to enter some information about your checking account. Once this wizard finishes, the account will be created for you within KMyMoney."
+msgstr "The fields below allow you to enter some information about your current account. Once this wizard finishes, the account will be created for you within KMyMoney."
+
+#: wizards/newuserwizard/rc.cpp:17
+msgid "KMyMoney supports multiple currencies. Your reports will be based on a default curreny which you can select here. The default for new accounts is also the currency you select here."
+msgstr "KMyMoney supports multiple currencies. Your reports will be based on a default currency which you can select here. The default for new accounts is also the currency you select here."
+
+#: wizards/newuserwizard/rc.cpp:18
+msgid "KMyMoney will store your financial data in a file on the disk. A standard filename within your KDE user environment will be the default. This is just provided for convenience and you can choose any other location here."
+msgstr "KMyMoney will store your financial data in a file on the disk. A standard filename within your KDE user environment will be the default. This is just provided for convenience and you can choose any other location here."
+
+#: wizards/newuserwizard/rc.cpp:19
+msgid ""
+"Either the currently selected file exists or the selected directory does not exist. Please make sure, that\n"
+"\n"
+"<ul>\n"
+"<li>the selected directory exists and</li>\n"
+"<li>the filename is not currently used in this directory.</li>\n"
+"</ul>"
+msgstr ""
+"Either the currently selected file exists or the selected directory does not exist. Please make sure, that\n"
+"\n"
+"<ul>\n"
+"<li>the selected directory exists and</li>\n"
+"<li>the filename is not currently used in this directory.</li>\n"
+"</ul>"
+
+#: wizards/newuserwizard/rc.cpp:20
+msgid "This finishes the setup of your KMyMoney environment. You can now press the Finish button and start using KMyMoney to record your financial transactions."
+msgstr "This finishes the setup of your KMyMoney environment. You can now press the Finish button and start using KMyMoney to record your financial transactions."
+
+#: wizards/newuserwizard/rc.cpp:21
+msgid ""
+"Please enter some information about yourself.<br><br>\n"
+"\n"
+"This information will be seen and used only by you. The information is used to personalize KMyMoney, to encrypt your file, etc."
+msgstr ""
+"Please enter some information about yourself.<br><br>\n"
+"\n"
+"This information will be seen and used only by you. The information is used to personalise KMyMoney, to encrypt your file, etc."
+
+#: wizards/newuserwizard/rc.cpp:28
+msgid "Zip code"
+msgstr "Post code"
+
+#: wizards/newuserwizard/rc.cpp:30
+msgid "Welcome to KMyMoney!"
+msgstr "Welcome to KMyMoney!"
+
+#: wizards/newuserwizard/rc.cpp:31
+msgid ""
+"You have started KMyMoney for the first time on this computer. Before this program can help you to manage your finances, it needs to collect some data from you.<p>\n"
+"\n"
+"On the next few pages you will be guided through the steps necessary to setup the program. This will happen only once."
+msgstr ""
+"You have started KMyMoney for the first time on this computer. Before this program can help you to manage your finances, it needs to collect some data from you.<p>\n"
+"\n"
+"On the next few pages you will be guided through the steps necessary to setup the program. This will happen only once."
+
+#: wizards/newuserwizard/rc.cpp:32
+msgid "<p>KMyMoney can encrypt your datafile using GPG Encryption. GPG encryption is one of the most secure methods in the world for protecting data. All of your account numbers and other important financial information will be very secure.</p>"
+msgstr "<p>KMyMoney can encrypt your datafile using GPG Encryption. GPG encryption is one of the most secure methods in the world for protecting data. All of your account numbers and other important financial information will be very secure.</p>"
+
+#: wizards/newuserwizard/rc.cpp:33
+msgid "If you would like to review or change any preference settings for KMyMoney at this time, you can do so here. If not just click <b>Next</b>."
+msgstr "If you would like to review or change any preference settings for KMyMoney at this time, you can do so here. If not just click <b>Next</b>."
+
+#: wizards/newuserwizard/rc.cpp:34
+msgid "Configure preferences now"
+msgstr "Configure preferences now"
+
+#: wizards/newuserwizard/rc.cpp:35
+msgid "You can change the configuration options at any time using the configuration dialog. Just select the <b>Configure KMyMoney...</b> option in the <b>Settings</b> menu."
+msgstr "You can change the configuration options at any time using the configuration dialog. Just select the <b>Configure KMyMoney...</b> option in the <b>Settings</b> menu."
+
+#: dialogs/rc.cpp:83
+#: dialogs/rc.cpp:411
+#: dialogs/rc.cpp:435
+#: kmymoneyutils.cpp:92
+#: kmymoneyutils.cpp:105
+#: mymoney/mymoneyaccount.cpp:753
+#: mymoney/mymoneysecurity.cpp:160
+msgid "Stock"
+msgstr "Stock"
+
+#: dialogs/rc.cpp:84
+#: dialogs/rc.cpp:412
+#: dialogs/rc.cpp:436
+#: kmymoneyutils.cpp:107
+#: mymoney/mymoneysecurity.cpp:163
+msgid "Mutual Fund"
+msgstr "Mutual Fund"
+
+#: dialogs/rc.cpp:85
+#: dialogs/rc.cpp:413
+#: dialogs/rc.cpp:437
+#: kmymoneyutils.cpp:109
+#: mymoney/mymoneysecurity.cpp:166
+msgid "Bond"
+msgstr "Bond"
+
+#: mymoney/mymoneysecurity.cpp:172
+#: reports/querytable.cpp:1150
+#: widgets/kmymoneyaccountselector.cpp:76
+msgid "None"
+msgstr "None"
+
+#: dialogs/rc.cpp:46
+#: kmymoneyutils.cpp:402
+#: mymoney/mymoneyaccount.cpp:759
+#: mymoney/mymoneyscheduled.cpp:1002
+#: mymoney/mymoneysecurity.cpp:175
+#: views/kforecastview.cpp:174
+#: widgets/register.cpp:54
+#: widgets/register.cpp:485
+#: widgets/transaction.cpp:708
+#: widgets/transaction.cpp:1459
+msgid "Unknown"
+msgstr "Unknown"
+
+#: mymoney/storage/mymoneystoragesql.cpp:191
+msgid ""
+"Database apparently in use\n"
+"Opened by %1 on %2 at %3.\n"
+"Open anyway?"
+msgstr ""
+"Database apparently in use\n"
+"Opened by %1 on %2 at %3.\n"
+"Open anyway?"
+
+#: mymoney/storage/mymoneystoragesql.cpp:229
+msgid "Cannot currently create database for driver %1; please create manually"
+msgstr "Cannot currently create database for driver %1; please create manually"
+
+#: mymoney/storage/mymoneystoragesql.cpp:244
+msgid "Error in create database %1; do you have create permissions?"
+msgstr "Error in create database %1; do you have create permissions?"
+
+#: converter/mymoneygncreader.cpp:1329
+#: mymoney/storage/mymoneystoragexml.cpp:166
+msgid "Loading transactions..."
+msgstr "Loading transactions"
+
+#: converter/mymoneygncreader.cpp:1190
+#: mymoney/storage/mymoneystoragexml.cpp:173
+msgid "Loading accounts..."
+msgstr "Loading accounts..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:180
+msgid "Loading securities..."
+msgstr "Loading securities..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:187
+msgid "Loading reports..."
+msgstr "Loading reports..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:268
+msgid "Unknown XML tag %1 found in line %2"
+msgstr "Unknown XML tag %1 found in line %2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:274
+msgid "Exception while creating a %1 element: %2"
+msgstr "Exception while creating a %1 element: %2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:513
+msgid "Loading file information..."
+msgstr "Loading file information..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:591
+msgid "Loading user information..."
+msgstr "Loading user information..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:655
+msgid "Saving accounts..."
+msgstr "Saving accounts..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:678
+msgid "Saving transactions..."
+msgstr "Saving transactions..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:747
+msgid "Saving reports..."
+msgstr "Saving reports..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:762
+msgid "Saving budgets..."
+msgstr "Saving budgets..."
+
+#: mymoney/storage/mymoneystoragedump.cpp:414
+msgid "not reconciled"
+msgstr "not reconciled"
+
+#: mymoney/storage/mymoneystoragedump.cpp:417
+msgid "cleared"
+msgstr "cleared"
+
+#: mymoney/storage/mymoneystoragedump.cpp:420
+msgid "reconciled"
+msgstr "reconciled"
+
+#: mymoney/storage/mymoneystoragedump.cpp:423
+msgid "frozen"
+msgstr "frozen"
+
+#: mymoney/storage/mymoneystoragedump.cpp:426
+msgid "unknown"
+msgstr "unknown"
+
+#: mymoney/mymoneyaccount.cpp:101
+msgid "Account %1 contains an opening balance. Please use a KMyMoney version >= 0.8 and < 0.9 to correct the problem."
+msgstr "Account %1 contains an opening balance. Please use a KMyMoney version >= 0.8 and < 0.9 to correct the problem."
+
+#: mymoney/mymoneyaccount.cpp:597
+msgid ""
+"_: Brokerage (suffix for account names)\n"
+"Brokerage"
+msgstr "Brokerage"
+
+#: kmymoneyutils.cpp:74
+#: mymoney/mymoneyaccount.cpp:726
+msgid "Certificate of Deposit"
+msgstr "Certificate of Deposit"
+
+#: kmymoneyutils.cpp:78
+#: mymoney/mymoneyaccount.cpp:732
+msgid "Money Market"
+msgstr "Money Market"
+
+#: converter/mymoneytemplate.cpp:186
+#: converter/mymoneytemplate.cpp:187
+#: dialogs/knewaccountdlg.cpp:1018
+#: kmymoneyutils.cpp:86
+#: mymoney/mymoneyaccount.cpp:744
+#: views/kaccountsview.cpp:360
+#: views/kbudgetview.cpp:372
+#: views/kcategoriesview.cpp:178
+#: views/khomeview.cpp:1813
+#: views/kmymoneyview.cpp:767
+#: widgets/kmymoneyaccountselector.cpp:68
+#: widgets/kmymoneyaccountselector.cpp:179
+#: widgets/kmymoneyaccountselector.cpp:370
+#: widgets/register.cpp:828
+msgid "Income"
+msgstr "Income"
+
+#: converter/mymoneytemplate.cpp:190
+#: converter/mymoneytemplate.cpp:191
+#: dialogs/knewaccountdlg.cpp:1020
+#: kmymoneyutils.cpp:88
+#: mymoney/mymoneyaccount.cpp:747
+#: views/kaccountsview.cpp:364
+#: views/kbudgetview.cpp:378
+#: views/kcategoriesview.cpp:182
+#: views/kmymoneyview.cpp:768
+#: widgets/kmymoneyaccountselector.cpp:72
+#: widgets/kmymoneyaccountselector.cpp:180
+#: widgets/kmymoneyaccountselector.cpp:380
+#: widgets/register.cpp:829
+msgid "Expense"
+msgstr "Expense"
+
+#: kmymoneyutils.cpp:90
+#: mymoney/mymoneyaccount.cpp:750
+msgid "Investment Loan"
+msgstr "Investment Loan"
+
+#: mymoney/mymoneyfile.cpp:47
+msgid "Opening Balances"
+msgstr "Opening Balances"
+
+#: mymoney/mymoneyfile.cpp:398
+msgid "Cannot remove transaction that references a closed account."
+msgstr "Cannot remove transaction that references a closed account."
+
+#: mymoney/mymoneyfile.cpp:1414
+#: mymoney/mymoneyfile.cpp:1433
+#: mymoney/mymoneyfile.cpp:1447
+#: mymoney/mymoneyfile.cpp:1469
+msgid "* Problem with account '%1'"
+msgstr "* Problem with account '%1'"
+
+#: mymoney/mymoneyfile.cpp:1419
+msgid " * Parent account '%1' belongs to a different group."
+msgstr " * Parent account '%1' belongs to a different group."
+
+#: mymoney/mymoneyfile.cpp:1420
+#: mymoney/mymoneyfile.cpp:1450
+msgid " New parent account is the top level account '%1'."
+msgstr " New parent account is the top level account '%1'."
+
+#: mymoney/mymoneyfile.cpp:1436
+msgid " * Parent account '%1' does not contain '%2' as sub-account."
+msgstr " * Parent account '%1' does not contain '%2' as sub account."
+
+#: mymoney/mymoneyfile.cpp:1449
+msgid " * The parent with id %1 does not exist anymore."
+msgstr " * The parent with id %1 does not exist any more."
+
+#: mymoney/mymoneyfile.cpp:1471
+msgid " * Child account with id %1 does not exist anymore."
+msgstr " * Child account with id %1 does not exist any more."
+
+#: mymoney/mymoneyfile.cpp:1472
+msgid " The child account list will be reconstructed."
+msgstr " The child account list will be reconstructed."
+
+#: mymoney/mymoneyfile.cpp:1492
+msgid " * Unable to update account data in engine."
+msgstr " * Unable to update account data in engine."
+
+#: mymoney/mymoneyfile.cpp:1499
+msgid "* Reconstructing the child lists for"
+msgstr "* Reconstructing the child lists for"
+
+#: mymoney/mymoneyfile.cpp:1536
+msgid " * Unable to update account data for account %1 in engine"
+msgstr " * Unable to update account data for account %1 in engine"
+
+#: mymoney/mymoneyfile.cpp:1554
+msgid " * Payee %1 recreated with fixed id"
+msgstr " * Payee %1 recreated with fixed id"
+
+#: mymoney/mymoneyfile.cpp:1583
+msgid " * Payee id updated in split of transaction '%1'."
+msgstr " * Payee id updated in split of transaction '%1'."
+
+#: mymoney/mymoneyfile.cpp:1596
+msgid " * shares set to value in split of transaction '%1'."
+msgstr " * shares set to value in split of transaction '%1'."
+
+#: mymoney/mymoneyfile.cpp:1599
+msgid " * value set to shares in split of transaction '%1'."
+msgstr " * value set to shares in split of transaction '%1'."
+
+#: mymoney/mymoneyfile.cpp:1605
+msgid " * Split %2 in transaction '%1' contains a reference to invalid account %3. Please fix manually."
+msgstr " * Split %2 in transaction '%1' contains a reference to invalid account %3. Please fix manually."
+
+#: mymoney/mymoneyfile.cpp:1616
+msgid " * action marked as interest in split of transaction '%1'."
+msgstr " * action marked as interest in split of transaction '%1'."
+
+#: mymoney/mymoneyfile.cpp:1643
+msgid " * Payee id updated in split of schedule '%1'."
+msgstr " * Payee id updated in split of schedule '%1'."
+
+#: mymoney/mymoneyfile.cpp:1649
+msgid " * Split in scheduled transaction '%1' contained value != 0 and shares == 0."
+msgstr " * Split in scheduled transaction '%1' contained value != 0 and shares == 0."
+
+#: mymoney/mymoneyfile.cpp:1650
+msgid " Shares set to value."
+msgstr " Shares set to value."
+
+#: mymoney/mymoneyfile.cpp:1658
+msgid " * Removed bankid from split in scheduled transaction '%1'."
+msgstr " * Removed bankid from split in scheduled transaction '%1'."
+
+#: mymoney/mymoneyfile.cpp:1671
+msgid " * shares set to value in split in schedule '%1'."
+msgstr " * shares set to value in split in schedule '%1'."
+
+#: mymoney/mymoneyfile.cpp:1674
+msgid " * value set to shares in split in schedule '%1'."
+msgstr " * value set to shares in split in schedule '%1'."
+
+#: mymoney/mymoneyfile.cpp:1680
+msgid " * Split %2 in schedule '%1' contains a reference to invalid account %3. Please fix manually."
+msgstr " * Split %2 in schedule '%1' contains a reference to invalid account %3. Please fix manually."
+
+#: mymoney/mymoneyfile.cpp:1706
+msgid " * Payee id updated in report '%1'."
+msgstr " * Payee id updated in report '%1'."
+
+#: mymoney/mymoneyfile.cpp:1723
+msgid " * Payee '%1' removed."
+msgstr " * Payee '%1' removed."
+
+#: mymoney/mymoneyfile.cpp:1730
+msgid "Finish! Data is consistent."
+msgstr "Finish! Data is consistent."
+
+#: mymoney/mymoneyfile.cpp:1732
+msgid "Finish! %1 problem(s) corrected. %2 problem(s) still present."
+msgstr "Finish! %1 problem(s) corrected. %2 problem(s) still present."
+
+#: mymoney/mymoneyscheduled.cpp:873
+#: mymoney/mymoneyscheduled.cpp:918
+#: mymoney/mymoneyscheduled.cpp:969
+#: mymoney/mymoneyscheduled.cpp:1265
+#: mymoney/mymoneyscheduletest.cpp:1336
+msgid "Once"
+msgstr "Once"
+
+#: mymoney/mymoneyscheduled.cpp:875
+#: mymoney/mymoneyscheduled.cpp:924
+#: mymoney/mymoneyscheduled.cpp:1267
+#: mymoney/mymoneyscheduletest.cpp:1337
+#: widgets/rc.cpp:72
+msgid "Daily"
+msgstr "Daily"
+
+#: mymoney/mymoneyscheduled.cpp:877
+#: mymoney/mymoneyscheduled.cpp:931
+#: mymoney/mymoneyscheduled.cpp:1269
+#: mymoney/mymoneyscheduletest.cpp:1338
+#: widgets/rc.cpp:73
+msgid "Weekly"
+msgstr "Weekly"
+
+#: mymoney/mymoneyscheduled.cpp:881
+#: mymoney/mymoneyscheduled.cpp:932
+#: mymoney/mymoneyscheduled.cpp:1273
+#: mymoney/mymoneyscheduletest.cpp:1339
+msgid "Every other week"
+msgstr "Every other week"
+
+#: mymoney/mymoneyscheduled.cpp:879
+#: mymoney/mymoneyscheduled.cpp:1271
+#: mymoney/mymoneyscheduletest.cpp:1340
+msgid "Fortnightly"
+msgstr "Fortnightly"
+
+#: mymoney/mymoneyscheduled.cpp:883
+#: mymoney/mymoneyscheduled.cpp:941
+#: mymoney/mymoneyscheduled.cpp:1275
+#: mymoney/mymoneyscheduletest.cpp:1341
+msgid "Every half month"
+msgstr "Every half month"
+
+#: mymoney/mymoneyscheduled.cpp:887
+#: mymoney/mymoneyscheduled.cpp:934
+#: mymoney/mymoneyscheduled.cpp:1279
+#: mymoney/mymoneyscheduletest.cpp:1342
+msgid "Every four weeks"
+msgstr "Every four weeks"
+
+#: mymoney/mymoneyscheduled.cpp:893
+#: mymoney/mymoneyscheduled.cpp:935
+#: mymoney/mymoneyscheduled.cpp:1285
+#: mymoney/mymoneyscheduletest.cpp:1344
+msgid "Every eight weeks"
+msgstr "Every eight weeks"
+
+#: mymoney/mymoneyscheduled.cpp:895
+#: mymoney/mymoneyscheduled.cpp:948
+#: mymoney/mymoneyscheduled.cpp:1287
+#: mymoney/mymoneyscheduletest.cpp:1345
+msgid "Every two months"
+msgstr "Every two months"
+
+#: mymoney/mymoneyscheduled.cpp:897
+#: mymoney/mymoneyscheduled.cpp:949
+#: mymoney/mymoneyscheduled.cpp:1289
+#: mymoney/mymoneyscheduletest.cpp:1346
+msgid "Every three months"
+msgstr "Every three months"
+
+#: mymoney/mymoneyscheduled.cpp:899
+#: mymoney/mymoneyscheduled.cpp:1291
+#: mymoney/mymoneyscheduletest.cpp:1347
+#: widgets/rc.cpp:76
+msgid "Quarterly"
+msgstr "Quarterly"
+
+#: mymoney/mymoneyscheduled.cpp:901
+#: mymoney/mymoneyscheduled.cpp:950
+#: mymoney/mymoneyscheduled.cpp:1293
+#: mymoney/mymoneyscheduletest.cpp:1348
+msgid "Every four months"
+msgstr "Every four months"
+
+#: mymoney/mymoneyscheduled.cpp:903
+#: mymoney/mymoneyscheduled.cpp:951
+#: mymoney/mymoneyscheduled.cpp:1295
+#: mymoney/mymoneyscheduletest.cpp:1349
+msgid "Twice yearly"
+msgstr "Twice yearly"
+
+#: mymoney/mymoneyscheduled.cpp:905
+#: mymoney/mymoneyscheduled.cpp:957
+#: mymoney/mymoneyscheduled.cpp:1297
+#: mymoney/mymoneyscheduletest.cpp:1350
+#: widgets/rc.cpp:20
+#: widgets/rc.cpp:77
+msgid "Yearly"
+msgstr "Yearly"
+
+#: mymoney/mymoneyscheduled.cpp:907
+#: mymoney/mymoneyscheduled.cpp:958
+#: mymoney/mymoneyscheduled.cpp:1299
+#: mymoney/mymoneyscheduletest.cpp:1351
+msgid "Every other year"
+msgstr "Every other year"
+
+#: mymoney/mymoneyscheduled.cpp:870
+#: mymoney/mymoneyscheduled.cpp:913
+#: mymoney/mymoneyscheduled.cpp:966
+msgid "Any"
+msgstr "Any"
+
+#: mymoney/mymoneyscheduled.cpp:885
+#: mymoney/mymoneyscheduled.cpp:933
+#: mymoney/mymoneyscheduled.cpp:1277
+msgid "Every three weeks"
+msgstr "Every three weeks"
+
+#: mymoney/mymoneyscheduled.cpp:889
+#: mymoney/mymoneyscheduled.cpp:925
+#: mymoney/mymoneyscheduled.cpp:1281
+msgid "Every thirty days"
+msgstr "Every thirty days"
+
+#: mymoney/mymoneyscheduled.cpp:971
+msgid "Day"
+msgstr "Day"
+
+#: mymoney/mymoneyscheduled.cpp:973
+#: reports/listtable.cpp:206
+#: widgets/kmymoneycalendar.cpp:123
+#: widgets/rc.cpp:97
+msgid "Week"
+msgstr "Week"
+
+#: mymoney/mymoneyscheduled.cpp:975
+msgid "Half-month"
+msgstr "Half-month"
+
+#: mymoney/mymoneyscheduled.cpp:977
+#: reports/listtable.cpp:205
+#: widgets/kmymoneycalendar.cpp:124
+#: widgets/rc.cpp:96
+msgid "Month"
+msgstr "Month"
+
+#: dialogs/rc.cpp:400
+#: mymoney/mymoneyscheduled.cpp:979
+#: views/rc.cpp:14
+msgid "Year"
+msgstr "Year"
+
+#: mymoney/mymoneyscheduled.cpp:989
+msgid "Bill"
+msgstr "Bill"
+
+#: dialogs/rc.cpp:107
+#: dialogs/rc.cpp:162
+#: dialogs/rc.cpp:249
+#: dialogs/rc.cpp:754
+#: mymoney/mymoneyscheduled.cpp:992
+#: widgets/kmymoneycombo.cpp:420
+#: widgets/register.cpp:571
+msgid "Deposit"
+msgstr "Deposit"
+
+#: mymoney/mymoneyscheduled.cpp:995
+#: reports/querytable.cpp:594
+#: reports/querytable.cpp:696
+#: widgets/kmymoneycombo.cpp:419
+msgid "Transfer"
+msgstr "Transfer"
+
+#: mymoney/mymoneyscheduled.cpp:1035
+msgid "Any (Error)"
+msgstr "Any (Error)"
+
+#: dialogs/rc.cpp:114
+#: mymoney/mymoneyscheduled.cpp:1047
+msgid "Change the date to the previous Friday"
+msgstr "Change the date to the previous Friday"
+
+#: dialogs/rc.cpp:115
+#: mymoney/mymoneyscheduled.cpp:1050
+msgid "Change the date to the next Monday"
+msgstr "Change the date to the next Monday"
+
+#: mymoney/mymoneyscheduled.cpp:1053
+msgid "Do Nothing"
+msgstr "Do Nothing"
+
+#: kmymoney2.cpp:312
+msgid "Open database..."
+msgstr "Open database..."
+
+#: kmymoney2.cpp:313
+msgid "Save as database..."
+msgstr "Save as database..."
+
+#: kmymoney2.cpp:314
+msgid "Backup..."
+msgstr "Backup..."
+
+#: kmymoney2.cpp:315
+#: kmymoney2.cpp:321
+msgid "QIF..."
+msgstr "QIF..."
+
+#: kmymoney2.cpp:316
+msgid "Gnucash..."
+msgstr "Gnucash..."
+
+#: kmymoney2.cpp:317
+msgid "Statement file..."
+msgstr "Statement file..."
+
+#: kmymoney2.cpp:319
+#: kmymoney2.cpp:320
+msgid "Account Template..."
+msgstr "Account Template..."
+
+#: kmymoney2.cpp:322
+msgid "Personal Data..."
+msgstr "Personal Data..."
+
+#: kmymoney2.cpp:325
+msgid "Dump Memory"
+msgstr "Dump Memory"
+
+#: kmymoney2.cpp:327
+msgid "File-Information..."
+msgstr "File-Information..."
+
+#: kmymoney2.cpp:332
+msgid "Find transaction..."
+msgstr "Find transaction..."
+
+#: kmymoney2.cpp:337
+msgid "Show Transaction Detail"
+msgstr "Show Transaction Detail"
+
+#: kmymoney2.cpp:338
+#: rc.cpp:60
+msgid "Hide reconciled transactions"
+msgstr "Hide reconciled transactions"
+
+#: kmymoney2.cpp:339
+#: rc.cpp:57
+msgid "Hide unused categories"
+msgstr "Hide unused categories"
+
+#: kmymoney2.cpp:340
+msgid "Show all accounts"
+msgstr "Show all accounts"
+
+#: kmymoney2.cpp:345
+msgid "New institution..."
+msgstr "New institution..."
+
+#: kmymoney2.cpp:346
+msgid "Edit institution..."
+msgstr "Edit institution..."
+
+#: kmymoney2.cpp:347
+msgid "Delete institution..."
+msgstr "Delete institution..."
+
+#: kmymoney2.cpp:352
+msgid "New account..."
+msgstr "New account..."
+
+#: kmymoney2.cpp:354
+msgid "Open ledger"
+msgstr "Open ledger"
+
+#: kmymoney2.cpp:355
+msgid "Reconcile..."
+msgstr "Reconcile..."
+
+#: kmymoney2.cpp:356
+msgid ""
+"_: Finish reconciliation\n"
+"Finish"
+msgstr "Finalise reconciliation"
+
+#: kmymoney2.cpp:357
+msgid ""
+"_: Postpone reconciliation\n"
+"Postpone"
+msgstr "Postpone reconciliation"
+
+#: kmymoney2.cpp:358
+msgid "Edit account..."
+msgstr "Edit account..."
+
+#: kmymoney2.cpp:359
+msgid "Delete account..."
+msgstr "Delete account..."
+
+#: kmymoney2.cpp:360
+msgid "Close account"
+msgstr "Close account"
+
+#: kmymoney2.cpp:361
+msgid "Reopen account"
+msgstr "Reopen account"
+
+#: kmymoney2.cpp:362
+msgid "Transaction report"
+msgstr "Transaction report"
+
+#: kmymoney2.cpp:364
+msgid "Show balance chart..."
+msgstr "Show balance chart..."
+
+#: kmymoney2.cpp:366
+msgid "Map to online account"
+msgstr "Map to online account"
+
+#: kmymoney2.cpp:367
+msgid "Unmap account"
+msgstr "Unmap account"
+
+#: dialogs/settings/rc.cpp:126
+#: kmymoney2.cpp:368
+#: views/kpayeesview.cpp:363
+#: widgets/rc.cpp:50
+msgid "Update"
+msgstr "Update"
+
+#: kmymoney2.cpp:372
+msgid "Update account..."
+msgstr "Update account..."
+
+#: kmymoney2.cpp:373
+msgid "Update all accounts..."
+msgstr "Update all accounts..."
+
+#: kmymoney2.cpp:378
+msgid "New category..."
+msgstr "New category..."
+
+#: kmymoney2.cpp:379
+msgid "Edit category..."
+msgstr "Edit category..."
+
+#: kmymoney2.cpp:380
+msgid "Delete category..."
+msgstr "Delete category..."
+
+#: kmymoney2.cpp:386
+msgid "QIF Profile Editor..."
+msgstr "QIF Profile Editor..."
+
+#: kmymoney2.cpp:387
+msgid "Securities..."
+msgstr "Securities..."
+
+#: kmymoney2.cpp:388
+msgid "Currencies..."
+msgstr "Currencies..."
+
+#: kmymoney2.cpp:389
+msgid "Prices..."
+msgstr "Prices..."
+
+#: kmymoney2.cpp:390
+msgid "Update Stock and Currency Prices..."
+msgstr "Update Stock and Currency Prices..."
+
+#: kmymoney2.cpp:391
+msgid "Consistency Check"
+msgstr "Consistency Check"
+
+#: kmymoney2.cpp:392
+msgid "Performance-Test"
+msgstr "Performance-Test"
+
+#: kmymoney2.cpp:393
+msgid "KCalc..."
+msgstr "KCalc..."
+
+#: kmymoney2.cpp:399
+msgid "Enable all messages"
+msgstr "Enable all messages"
+
+#: kmymoney2.cpp:400
+msgid "KDE language settings..."
+msgstr "KDE language settings..."
+
+#: kmymoney2.cpp:405
+msgid "&Show tip of the day"
+msgstr "&Show tip of the day"
+
+#: kmymoney2.cpp:410
+msgid ""
+"_: New transaction button\n"
+"New"
+msgstr "New"
+
+#: kmymoney2.cpp:415
+msgid ""
+"_: Edit transaction button\n"
+"Edit"
+msgstr "Edit"
+
+#: kmymoney2.cpp:417
+msgid ""
+"_: Enter transaction\n"
+"Enter"
+msgstr "Enter"
+
+#: kmymoney2.cpp:420
+msgid ""
+"_: Edit split button\n"
+"Edit splits"
+msgstr "Edit splits"
+
+#: kmymoney2.cpp:421
+msgid ""
+"_: Cancel transaction edit\n"
+"Cancel"
+msgstr "Cancel"
+
+#: kmymoney2.cpp:422
+msgid ""
+"_: Delete transaction\n"
+"Delete"
+msgstr "Delete"
+
+#: kmymoney2.cpp:423
+msgid ""
+"_: Duplicate transaction\n"
+"Duplicate"
+msgstr "Duplicate"
+
+#: kmymoney2.cpp:425
+#: kmymoney2.cpp:4826
+#: kmymoney2.cpp:5107
+msgid ""
+"_: Button text for match transaction\n"
+"Match"
+msgstr "Match"
+
+#: kmymoney2.cpp:426
+msgid ""
+"_: Accept 'imported' and 'matched' transaction\n"
+"Accept"
+msgstr "Accept"
+
+#: kmymoney2.cpp:428
+msgid ""
+"_: Toggle reconciliation flag\n"
+"Toggle"
+msgstr "Toggle"
+
+#: kmymoney2.cpp:429
+msgid ""
+"_: Mark transaction cleared\n"
+"Cleared"
+msgstr "Cleared"
+
+#: kmymoney2.cpp:430
+msgid ""
+"_: Mark transaction reconciled\n"
+"Reconciled"
+msgstr "Reconciled"
+
+#: kmymoney2.cpp:431
+msgid ""
+"_: Mark transaction not reconciled\n"
+"Not reconciled"
+msgstr "Not reconciled"
+
+#: kmymoney2.cpp:432
+msgid ""
+"_: Select all transactions\n"
+"Select all"
+msgstr "Select all"
+
+#: kmymoney2.cpp:434
+#: kmymoney2.cpp:5497
+msgid "Goto account"
+msgstr "Goto account"
+
+#: kmymoney2.cpp:435
+#: kmymoney2.cpp:5495
+msgid "Goto payee"
+msgstr "Goto payee"
+
+#: kmymoney2.cpp:436
+msgid "Create scheduled transaction..."
+msgstr "Create scheduled transaction..."
+
+#: kmymoney2.cpp:437
+msgid "Assign next number"
+msgstr "Assign next number"
+
+#: kmymoney2.cpp:438
+msgid ""
+"_: Combine transactions\n"
+"Combine"
+msgstr "Combine"
+
+#: kmymoney2.cpp:440
+msgid "New investment"
+msgstr "New investment"
+
+#: kmymoney2.cpp:441
+msgid "Edit investment..."
+msgstr "Edit investment..."
+
+#: kmymoney2.cpp:442
+msgid "Delete investment..."
+msgstr "Delete investment..."
+
+#: kmymoney2.cpp:443
+msgid "Online price update..."
+msgstr "Online price update..."
+
+#: kmymoney2.cpp:444
+msgid "Manual price update..."
+msgstr "Manual price update..."
+
+#: kmymoney2.cpp:446
+msgid "New scheduled transaction..."
+msgstr "New scheduled transaction..."
+
+#: kmymoney2.cpp:447
+msgid "Edit scheduled transaction..."
+msgstr "Edit scheduled transaction..."
+
+#: kmymoney2.cpp:448
+msgid "Delete scheduled transaction..."
+msgstr "Delete scheduled transaction..."
+
+#: kmymoney2.cpp:449
+msgid "Duplicate scheduled transaction"
+msgstr "Duplicate scheduled transaction"
+
+#: kmymoney2.cpp:450
+msgid "Enter next transaction..."
+msgstr "Enter next transaction..."
+
+#: kmymoney2.cpp:451
+msgid "Skip next transaction..."
+msgstr "Skip next transaction..."
+
+#: kmymoney2.cpp:453
+msgid "New payee"
+msgstr "New payee"
+
+#: kmymoney2.cpp:454
+msgid "Rename payee"
+msgstr "Rename payee"
+
+#: kmymoney2.cpp:455
+msgid "Delete payee"
+msgstr "Delete payee"
+
+#: kmymoney2.cpp:457
+msgid "New budget"
+msgstr "New budget"
+
+#: kmymoney2.cpp:458
+msgid "Rename budget"
+msgstr "Rename budget"
+
+#: kmymoney2.cpp:459
+msgid "Delete budget"
+msgstr "Delete budget"
+
+#: kmymoney2.cpp:460
+msgid "Copy budget"
+msgstr "Copy budget"
+
+#: kmymoney2.cpp:461
+msgid "Change budget year"
+msgstr "Change budget year"
+
+#: kmymoney2.cpp:462
+msgid ""
+"_: Budget based on forecast\n"
+"Forecast"
+msgstr "Forecast"
+
+#: kmymoney2.cpp:467
+#: kmymoney2.cpp:3990
+#: kmymoney2.cpp:3993
+#: kmymoney2.cpp:3999
+msgid "New currency"
+msgstr "New currency"
+
+#: kmymoney2.cpp:468
+#: kmymoney2.cpp:4021
+#: kmymoney2.cpp:4026
+msgid "Rename currency"
+msgstr "Rename currency"
+
+#: kmymoney2.cpp:469
+#: kmymoney2.cpp:4039
+msgid "Delete currency"
+msgstr "Delete currency"
+
+#: dialogs/rc.cpp:69
+#: kmymoney2.cpp:470
+msgid "Select as base currency"
+msgstr "Select as base currency"
+
+#: kmymoney2.cpp:481
+msgid "View back"
+msgstr "View back"
+
+#: kmymoney2.cpp:482
+msgid "View forward"
+msgstr "View forward"
+
+#: kmymoney2.cpp:611
+msgid "KMyMoney file needs saving. Save ?"
+msgstr "KMyMoney file needs saving. Save ?"
+
+#: kmymoney2.cpp:757
+msgid "Creating new document..."
+msgstr "Creating new document..."
+
+#: kmymoney2.cpp:869
+#: kmymoney2.cpp:884
+msgid "Open a file."
+msgstr "Open a file."
+
+#: kmymoney2.cpp:872
+msgid ""
+"%1|KMyMoney files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|KMyMoney files \n"
+"%2|All files (*.*)"
+
+#: kmymoney2.cpp:873
+msgid "Open File..."
+msgstr "Open file ..."
+
+#: kmymoney2.cpp:925
+#: kstartuplogo.cpp:100
+msgid "Loading file..."
+msgstr "Loading file..."
+
+#: kmymoney2.cpp:986
+msgid "<b>%1</b> is either an invalid filename or the file does not exist. You can open another file or create a new one."
+msgstr "<b>%1</b> is either an invalid filename or the file does not exist. You can open another file or create a new one."
+
+#: kmymoney2.cpp:986
+msgid "File not found"
+msgstr "File not found"
+
+#: kmymoney2.cpp:989
+msgid "File <b>%1</b> is already opened in another instance of KMyMoney"
+msgstr "File <b>%1</b> is already opened in another instance of KMyMoney"
+
+#: kmymoney2.cpp:989
+msgid "Duplicate open"
+msgstr "Duplicate open"
+
+#: kmymoney2.cpp:1001
+msgid "Saving file..."
+msgstr "Saving file..."
+
+#: kmymoney2.cpp:1035
+#: kmymoney2.cpp:1047
+#: kmymoney2.cpp:1071
+#, c-format
+msgid "Additional encryption key(s) to be used: %1"
+msgstr "Additional encryption key(s) to be used: %1"
+
+#: kmymoney2.cpp:1056
+msgid "Saving file with a new filename..."
+msgstr "Saving file with a new filename..."
+
+#: kmymoney2.cpp:1067
+msgid "Encryption key to be used"
+msgstr "Encryption key to be used"
+
+#: kmymoney2.cpp:1072
+msgid "Manage additional keys"
+msgstr "Manage additional keys"
+
+#: kmymoney2.cpp:1079
+msgid "No encryption"
+msgstr "No encryption"
+
+#: kmymoney2.cpp:1102
+msgid ""
+"_: KMyMoney (Filefilter)\n"
+"KMyMoney files"
+msgstr "KMyMoney files"
+
+#: kmymoney2.cpp:1103
+msgid ""
+"_: XML (Filefilter)\n"
+"XML files"
+msgstr "XML files"
+
+#: kmymoney2.cpp:1104
+msgid ""
+"_: Anonymous (Filefilter)\n"
+"Anonymous files"
+msgstr "Anonymous files"
+
+#: kmymoney2.cpp:1105
+msgid "All files"
+msgstr "All files"
+
+#: kmymoney2.cpp:1193
+msgid "Saving file to database..."
+msgstr "Saving file to database..."
+
+#: kmymoney2.cpp:1207
+msgid "Cannot save to current database."
+msgstr "Cannot save to current database."
+
+#: kmymoney2.cpp:1225
+msgid "Closing window..."
+msgstr "Closing window..."
+
+#: kmymoney2.cpp:1228
+#: kmymoney2.cpp:1249
+msgid "The file has been changed, save it ?"
+msgstr "The file has been changed, save it ?"
+
+#: kmymoney2.cpp:1339
+#: kmymoney2.cpp:1352
+msgid "Ready."
+msgstr "Ready."
+
+#: kmymoney2.cpp:1397
+#: kmymoney2.cpp:1433
+msgid "No KMyMoneyFile open"
+msgstr "No KMyMoneyFile open"
+
+#: kmymoney2.cpp:1401
+msgid "Viewing personal data..."
+msgstr "Viewing personal data..."
+
+#: kmymoney2.cpp:1408
+msgid "Edit Personal Data"
+msgstr "Edit Personal Data"
+
+#: kmymoney2.cpp:1424
+#, c-format
+msgid "Unable to store user information: %1"
+msgstr "Unable to store user information: %1"
+
+#: kmymoney2.cpp:1447
+msgid "Importing account templates."
+msgstr "Importing account templates."
+
+#: kmymoney2.cpp:1462
+msgid "Unable to import template(s): %1, thrown in %2:%3"
+msgstr "Unable to import template(s): %1, thrown in %2:%3"
+
+#: kmymoney2.cpp:1471
+msgid "Exporting account templates."
+msgstr "Exporting account templates."
+
+#: kmymoney2.cpp:1474
+msgid ""
+"*.kmt|KMyMoney template files\n"
+"*.*|All files"
+msgstr ""
+"*.kmt|KMyMoney template files\n"
+"*.*|All files"
+
+#: kmymoney2.cpp:1475
+msgid "Save as..."
+msgstr "Save as..."
+
+#: kmymoney2.cpp:1517
+msgid "Importing file..."
+msgstr "Importing file..."
+
+#: kmymoney2.cpp:1552
+#: kmymoney2.cpp:6040
+#: kmymoney2.cpp:6062
+msgid "The statements have been processed with the following results:"
+msgstr "The statements have been processed with the following results:"
+
+#: kmymoney2.cpp:1552
+#: kmymoney2.cpp:1754
+#: kmymoney2.cpp:6040
+#: kmymoney2.cpp:6062
+msgid "Statement stats"
+msgstr "Statement stats"
+
+#: kmymoney2.cpp:1602
+msgid "You cannot import GnuCash data into an existing file. Do you wish to save this file?"
+msgstr "You cannot import GnuCash data into an existing file. Do you wish to save this file?"
+
+#: kmymoney2.cpp:1615
+msgid "Importing a Gnucash file."
+msgstr "Importing a GnuCash file"
+
+#: kmymoney2.cpp:1618
+msgid ""
+"%1|Gnucash files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|GnuCash files\n"
+"%2|All files (*.*)"
+
+#: kmymoney2.cpp:1619
+msgid "Import Gnucash file..."
+msgstr "Import GnuCash file..."
+
+#: kmymoney2.cpp:1658
+msgid "Importing an XML Statement."
+msgstr "Importing an XML statement"
+
+#: kmymoney2.cpp:1661
+msgid ""
+"%1|XML files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|XML files\n"
+"%2|All files (*.*)"
+
+#: kmymoney2.cpp:1662
+msgid "Import XML Statement..."
+msgstr "Import XML statement..."
+
+#: kmymoney2.cpp:1718
+msgid "Error importing %1: This file is not a valid KMM statement file."
+msgstr "Error importing %1: This file is not a valid KMM statement file."
+
+#: kmymoney2.cpp:1718
+msgid "Invalid Statement"
+msgstr "Invalid Statement"
+
+#: kmymoney2.cpp:1754
+msgid "The statement has been processed with the following results:"
+msgstr "The statement has been processed with the following results:"
+
+#: kmymoney2.cpp:1763
+msgid "Exporting file..."
+msgstr "Exporting file..."
+
+#: kmymoney2.cpp:1786
+msgid "The file <b>%1</b> already exists. Do you really want to override it?"
+msgstr "The file <b>%1</b> already exists. Do you really want to override it?"
+
+#: kmymoney2.cpp:1786
+msgid "File already exists"
+msgstr "File already exists"
+
+#: dialogs/rc.cpp:347
+#: dialogs/rc.cpp:649
+#: dialogs/rc.cpp:798
+#: kmymoney2.cpp:1815
+msgid "General"
+msgstr "General"
+
+#: kmymoney2.cpp:1816
+msgid "Register"
+msgstr "Register"
+
+#: kmymoney2.cpp:1817
+#: views/khomeview.cpp:88
+#: views/kmymoneyview.cpp:136
+msgid "Home"
+msgstr "Home"
+
+#: kmymoney2.cpp:1818
+#: views/kmymoneyview.cpp:176
+msgid ""
+"Scheduled\n"
+"transactions"
+msgstr ""
+"Scheduled\n"
+"transactions"
+
+#: kmymoney2.cpp:1819
+msgid "Encryption"
+msgstr "Encryption"
+
+#: kmymoney2.cpp:1820
+msgid "Colors"
+msgstr "Colours"
+
+#: dialogs/rc.cpp:344
+#: dialogs/settings/rc.cpp:107
+#: kmymoney2.cpp:1822
+#: widgets/rc.cpp:33
+msgid "Online Quotes"
+msgstr "Online Quotes"
+
+#: kmymoney2.cpp:1823
+#: reports/pivottable.cpp:2426
+#: views/kmymoneyview.cpp:251
+#: views/kmymoneyview.cpp:253
+#: views/kreportsview.cpp:1415
+#: views/rc.cpp:41
+msgid "Forecast"
+msgstr "Forecast"
+
+#: kmymoney2.cpp:1824
+msgid "Plugins"
+msgstr "Plugins"
+
+#: kmymoney2.cpp:1893
+msgid "The file must be saved first before it can be backed up. Do you want to continue?"
+msgstr "The file must be saved first before it can be backed up. Do you want to continue?"
+
+#: kmymoney2.cpp:1910
+msgid "The current implementation of the backup functionality only supports local files as source files! Your current source file is '%1'."
+msgstr "The current implementation of the backup functionality only supports local files as source files! Your current source file is '%1'."
+
+#: kmymoney2.cpp:1913
+msgid "Local files only"
+msgstr "Local files only"
+
+#: kmymoney2.cpp:1928
+#, c-format
+msgid "Mounting %1"
+msgstr "Mounting %1"
+
+#: kmymoney2.cpp:1967
+msgid "Backup file for today exists on that device. Replace ?"
+msgstr "Backup file for today exists on that device. Replace ?"
+
+#: dialogs/rc.cpp:7
+#: kmymoney2.cpp:1967
+#: kmymoney2.cpp:1994
+#: kmymoney2.cpp:2024
+#: kmymoney2.cpp:2032
+#: kmymoney2.cpp:2057
+#: kmymoney2.cpp:2059
+msgid "Backup"
+msgstr "Backup"
+
+#: kmymoney2.cpp:1967
+msgid "&Replace"
+msgstr "&Replace"
+
+#: kmymoney2.cpp:1972
+#: kmymoney2.cpp:1997
+#: kmymoney2.cpp:2016
+#: kmymoney2.cpp:2035
+#, c-format
+msgid "Unmounting %1"
+msgstr "Unmounting %1"
+
+#: kmymoney2.cpp:1987
+#, c-format
+msgid "Writing %1"
+msgstr "Writing %1"
+
+#: kmymoney2.cpp:1994
+msgid "Error mounting device"
+msgstr "Error mounting device"
+
+#: converter/mymoneygncreader.cpp:1995
+#: kmymoney2.cpp:2023
+#: kmymoney2.cpp:2055
+msgid "Done"
+msgstr "Done"
+
+#: kmymoney2.cpp:2024
+#: kmymoney2.cpp:2057
+msgid "File successfully backed up"
+msgstr "File successfully backed up"
+
+#: kmymoney2.cpp:2032
+msgid "Error copying file to device"
+msgstr "Error copying file to device"
+
+#: kmymoney2.cpp:2059
+msgid "Error unmounting device"
+msgstr "Error unmounting device"
+
+#: kmymoney2.cpp:2143
+#, c-format
+msgid "Cannot add institution: %1"
+msgstr "Cannot add institution: %1"
+
+#: kmymoney2.cpp:2185
+#, c-format
+msgid "Unable to store institution: %1"
+msgstr "Unable to store institution: %1"
+
+#: kmymoney2.cpp:2192
+#, c-format
+msgid "Unable to edit institution: %1"
+msgstr "Unable to edit institution: %1"
+
+#: kmymoney2.cpp:2203
+msgid "Do you really want to delete institution <b>%1</b> ?"
+msgstr "Do you really want to delete institution <b>%1</b> ?"
+
+#: kmymoney2.cpp:2211
+#: kmymoney2.cpp:2215
+#, c-format
+msgid "Unable to delete institution: %1"
+msgstr "Unable to delete institution: %1"
+
+#: kmymoney2.cpp:2268
+#, c-format
+msgid "Unable to find account: %1"
+msgstr "Unable to find account: %1"
+
+#: kmymoney2.cpp:2309
+msgid ""
+"This account is a liability and if the opening balance represents money owed, then it should be negative. Negate the amount?\n"
+"\n"
+"Please click Yes to change the opening balance to %1,\n"
+"Please click No to leave the amount as %2,\n"
+"Please click Cancel to abort the account creation."
+msgstr ""
+"This account is a liability and if the opening balance represents money owed, then it should be negative. Negate the amount?\n"
+"\n"
+"Please click Yes to change the opening balance to %1,\n"
+"Please click No to leave the amount as %2,\n"
+"Please click Cancel to abort the account creation."
+
+#: kmymoney2.cpp:2345
+#: kmymoney2.cpp:2346
+msgid "Loan payout"
+msgstr "Loan payout"
+
+#: dialogs/knewloanwizard.cpp:892
+#: kmymoney2.cpp:2374
+#, c-format
+msgid "Unable to add account: %1"
+msgstr "Unable to add account: %1"
+
+#: kmymoney2.cpp:2392
+msgid "The category <b>%1</b> currently does not exist. Do you want to create it?<p><i>The parent account will default to <b>%2</b> but can be changed in the following dialog</i>."
+msgstr "The category <b>%1</b> currently does not exist. Do you want to create it?<p><i>The parent account will default to <b>%2</b> but can be changed in the following dialog</i>."
+
+#: kmymoney2.cpp:2392
+msgid "Create category"
+msgstr "Create category"
+
+#: kmymoney2.cpp:2429
+msgid "Create a new Category"
+msgstr "Create a new Category"
+
+#: kmymoney2.cpp:2505
+#, c-format
+msgid "Unable to create account: %1"
+msgstr "Unable to create account: %1"
+
+#: kmymoney2.cpp:2516
+msgid "The security <b>%1</b> currently does not exist as sub-account of <b>%2</b>. Do you want to create it?"
+msgstr "The security <b>%1</b> currently does not exist as sub-account of <b>%2</b>. Do you want to create it?"
+
+#: kmymoney2.cpp:2517
+msgid "Create security"
+msgstr "Create security"
+
+#: kmymoney2.cpp:2551
+msgid "Do you really want to delete the investment <b>%1</b>?"
+msgstr "Do you really want to delete the investment <b>%1</b>?"
+
+#: kmymoney2.cpp:2551
+msgid "Delete investment"
+msgstr "Delete investment"
+
+#: kmymoney2.cpp:2558
+#, c-format
+msgid "Unable to delete investment: %1"
+msgstr "Unable to delete investment: %1"
+
+#: kmymoney2.cpp:2640
+#: kmymoney2.cpp:2646
+msgid "Unable to add scheduled transaction: "
+msgstr "Unable to add scheduled transaction: "
+
+#: kmymoney2.cpp:2722
+msgid "Adjusting transactions..."
+msgstr "Adjusting transactions..."
+
+#: kmymoney2.cpp:2747
+msgid "Adjusting scheduled transactions..."
+msgstr "Adjusting scheduled transactions..."
+
+#: kmymoney2.cpp:2765
+msgid "Adjusting budgets..."
+msgstr "Adjusting budgets..."
+
+#: kmymoney2.cpp:2783
+msgid "Unable to exchange category <b>%1</b> with category <b>%2</b>. Reason: %3"
+msgstr "Unable to exchange category <b>%1</b> with category <b>%2</b>. Reason: %3"
+
+#: kmymoney2.cpp:2804
+msgid "Do you really want to delete category <b>%1</b>?"
+msgstr "Do you really want to delete category <b>%1</b>?"
+
+#: kmymoney2.cpp:2811
+msgid "Unable to delete category <b>%1</b>. Cause: %2"
+msgstr "Unable to delete category <b>%1</b>. Cause: %2"
+
+#: kmymoney2.cpp:2823
+msgid "Do you want to delete category <b>%1</b> with all its sub-categories or only the category itself? If you only delete the category itself, all its sub-categories will be made sub-categories of <b>%2</b>."
+msgstr "Do you want to delete category <b>%1</b> with all its sub-categories or only the category itself? If you only delete the category itself, all its sub-categories will be made sub-categories of <b>%2</b>."
+
+#: kmymoney2.cpp:2827
+msgid "Delete all"
+msgstr "Delete all"
+
+#: kmymoney2.cpp:2828
+msgid "Just the category"
+msgstr "Just the category"
+
+#: kmymoney2.cpp:2858
+msgid "Some sub-categories of category <b>%1</b> cannot be deleted, because they are still used. They will be made sub-categories of <b>%2</b>. Proceed?"
+msgstr "Some sub-categories of category <b>%1</b> cannot be deleted, because they are still used. They will be made sub-categories of <b>%2</b>. Proceed?"
+
+#: kmymoney2.cpp:2878
+msgid "Unable to delete a sub-category of category <b>%1</b>. Reason: %2"
+msgstr "Unable to delete a sub-category of category <b>%1</b>. Reason: %2"
+
+#: kmymoney2.cpp:2889
+msgid "Do you really want to delete account <b>%1</b>?"
+msgstr "Do you really want to delete account <b>%1</b>?"
+
+#: kmymoney2.cpp:2901
+msgid "Unable to delete account '%1'. Cause: %2"
+msgstr "Unable to delete account '%1'. Cause: %2"
+
+#: kmymoney2.cpp:2917
+msgid "Edit account '%1'"
+msgstr "Edit account '%1'"
+
+#: kmymoney2.cpp:2922
+msgid "Edit category '%1'"
+msgstr "Edit category '%1'"
+
+#: kmymoney2.cpp:3008
+msgid "Unable to modify account '%1'. Cause: %2"
+msgstr "Unable to modify account '%1'. Cause: %2"
+
+#: kmymoney2.cpp:3065
+msgid "KMyMoney has detected some overdue scheduled transactions for this account. Do you want to enter those scheduled transactions now?"
+msgstr "KMyMoney has detected some overdue scheduled transactions for this account. Do you want to enter those scheduled transactions now?"
+
+#: kmymoney2.cpp:3065
+msgid "Scheduled transactions found"
+msgstr "Scheduled transactions found"
+
+#: kmymoney2.cpp:3163
+msgid ""
+"You are about to finish the reconciliation of this account with a difference between your bank statement and the transactions marked as cleared.\n"
+"Are you sure you want to finish the reconciliation ?"
+msgstr ""
+"You are about to finish the reconciliation of this account with a difference between your bank statement and the transactions marked as cleared.\n"
+"Are you sure you want to finish the reconciliation ?"
+
+#: kmymoney2.cpp:3165
+msgid "Confirm end of reconciliation"
+msgstr "Confirm end of reconciliation"
+
+#: kmymoney2.cpp:3339
+msgid "You have closed this account. It remains in the system because you have transactions which still refer to it, but is not shown in the views. You can make it visible again by going to the View menu and selecting <b>Show all accounts</b> or by unselecting the <b>Don't show closed accounts</b> setting."
+msgstr "You have closed this account. It remains in the system because you have transactions which still refer to it, but is not shown in the views. You can make it visible again by going to the View menu and selecting <b>Show all accounts</b> or by deselecting the <b>Don't show closed accounts</b> setting."
+
+#: kmymoney2.cpp:3379
+msgid "<b>%1</b> cannot be moved to institution <b>%2</b>. Reason: %3"
+msgstr "<b>%1</b> cannot be moved to institution <b>%2</b>. Reason: %3"
+
+#: kmymoney2.cpp:3393
+msgid "<b>%1</b> cannot be moved to <b>%2</b>. Reason: %3"
+msgstr "<b>%1</b> cannot be moved to <b>%2</b>. Reason: %3"
+
+#: kmymoney2.cpp:3408
+msgid "%1 YTD Account Transactions"
+msgstr "%1 YTD Account Transactions"
+
+#: dialogs/kbalancechartdlg.cpp:71
+#: kmymoney2.cpp:3409
+#: views/kforecastview.cpp:650
+#: views/khomeview.cpp:276
+#: views/khomeview.cpp:1384
+#: views/kreportsview.cpp:619
+msgid "Generated Report"
+msgstr "Generated Report"
+
+#: dialogs/rc.cpp:324
+#: dialogs/settings/rc.cpp:80
+#: kmymoney2.cpp:3411
+#: views/kreportsview.cpp:1062
+#: views/rc.cpp:58
+#: views/rc.cpp:59
+msgid "Transactions"
+msgstr "Transactions"
+
+#: kmymoney2.cpp:3449
+#, c-format
+msgid "Unable to add scheduled transaction: %1"
+msgstr "Unable to add scheduled transaction: %1"
+
+#: kmymoney2.cpp:3449
+msgid "Add scheduled transaction"
+msgstr "Add scheduled transaction"
+
+#: kmymoney2.cpp:3489
+msgid "You have entered a scheduled transaction date of <b>%1</b>. Because the scheduled transaction was last paid on <b>%2</b>, KMyMoney will automatically adjust the scheduled transaction date to the next date unless the last payment date is reset. Do you want to reset the last payment date?"
+msgstr "You have entered a scheduled transaction date of <b>%1</b>. Because the scheduled transaction was last paid on <b>%2</b>, KMyMoney will automatically adjust the scheduled transaction date to the next date unless the last payment date is reset. Do you want to reset the last payment date?"
+
+#: kmymoney2.cpp:3489
+msgid "Reset Last Payment Date"
+msgstr "Reset Last Payment Date"
+
+#: kmymoney2.cpp:3499
+#: kmymoney2.cpp:3519
+#: kmymoney2.cpp:3531
+msgid "Unable to modify scheduled transaction '%1'"
+msgstr "Unable to modify scheduled transaction '%1'"
+
+#: kmymoney2.cpp:3543
+msgid "Are you sure you want to delete the scheduled transaction <b>%1</b>?"
+msgstr "Are you sure you want to delete the scheduled transaction <b>%1</b>?"
+
+#: kmymoney2.cpp:3546
+msgid "In case of loan payments it is currently not possible to recreate the scheduled transaction."
+msgstr "In case of loan payments it is currently not possible to recreate the scheduled transaction."
+
+#: kmymoney2.cpp:3555
+msgid "Unable to remove scheduled transaction '%1'"
+msgstr "Unable to remove scheduled transaction '%1'"
+
+#: kmymoney2.cpp:3569
+#, c-format
+msgid ""
+"_: Copy of scheduled transaction name\n"
+"Copy of %1"
+msgstr "Copy of %1"
+
+#: kmymoney2.cpp:3581
+#: kmymoney2.cpp:4352
+msgid "Unable to duplicate transaction(s): %1, thrown in %2:%3"
+msgstr "Unable to duplicate transaction(s): %1, thrown in %2:%3"
+
+#: kmymoney2.cpp:3595
+msgid "Do you really want to skip the <b>%1</b> transaction scheduled for <b>%2</b>?"
+msgstr "Do you really want to skip the <b>%1</b> transaction scheduled for <b>%2</b>?"
+
+#: kmymoney2.cpp:3605
+msgid "Unable to skip scheduled transaction <b>%1</b>."
+msgstr "Unable to skip scheduled transaction <b>%1</b>."
+
+#: kmymoney2.cpp:3618
+msgid "Unknown scheduled transaction '%1'"
+msgstr "Unknown scheduled transaction '%1'"
+
+#: kmymoney2.cpp:3673
+msgid ""
+"Are you sure you wish to stop this scheduled transaction from being entered into the register?\n"
+"\n"
+"KMyMoney will prompt you again next time it starts unless you manually enter it later."
+msgstr ""
+"Are you sure you wish to stop this scheduled transaction from being entered into the register?\n"
+"\n"
+"KMyMoney will prompt you again next time it starts unless you manually enter it later."
+
+#: kmymoney2.cpp:3725
+#: kmymoney2.cpp:3732
+msgid "Unable to enter scheduled transaction '%1'"
+msgstr "Unable to enter scheduled transaction '%1'"
+
+#: kmymoney2.cpp:3743
+#: kmymoney2.cpp:3783
+msgid "New Payee"
+msgstr "New Payee"
+
+#: kmymoney2.cpp:3745
+msgid "Do you want to add <b>%1</b> as payer/receiver ?"
+msgstr "Do you want to add <b>%1</b> as payer/receiver ?"
+
+#: converter/mymoneystatementreader.cpp:892
+#: kmymoney2.cpp:3747
+msgid "New payee/receiver"
+msgstr "New payee/receiver"
+
+#: kmymoney2.cpp:3773
+msgid "Unable to add payee"
+msgstr "Unable to add payee"
+
+#: kmymoney2.cpp:3826
+msgid "Do you really want to remove the payee <b>%1</b>?"
+msgstr "Do you really want to remove the payee <b>%1</b>?"
+
+#: kmymoney2.cpp:3828
+msgid "Do you really want to remove all selected payees?"
+msgstr "Do you really want to remove all selected payees?"
+
+#: kmymoney2.cpp:3830
+msgid "Remove Payee"
+msgstr "Remove Payee"
+
+#: kmymoney2.cpp:3870
+msgid "At least one transaction/scheduled transaction is still referenced by a payee. Currently you have all payees selected. However, at least one payee must remain so that the transaction/scheduled transaction can be reassigned."
+msgstr "At least one transaction/scheduled transaction is still referenced by a payee. Currently you have all payees selected. However, at least one payee must remain so that the transaction/scheduled transaction can be reassigned."
+
+#: kmymoney2.cpp:3925
+msgid "Unable to reassign payee of transaction/split"
+msgstr "Unable to reassign payee of transaction/split"
+
+#: converter/mymoneyqifreader.cpp:534
+#: converter/mymoneystatementreader.cpp:959
+#: kmymoney2.cpp:3926
+#: kmymoney2.cpp:3983
+#: views/kbudgetview.cpp:636
+#: views/kbudgetview.cpp:737
+#: views/kbudgetview.cpp:751
+#: views/kpayeesview.cpp:519
+#: views/kpayeesview.cpp:870
+msgid "thrown in"
+msgstr "thrown in"
+
+#: kmymoney2.cpp:3982
+msgid "Unable to remove payee(s)"
+msgstr "Unable to remove payee(s)"
+
+#: kmymoney2.cpp:3990
+msgid "Enter ISO 4217 code for the new currency"
+msgstr "Enter ISO 4217 code for the new currency"
+
+#: kmymoney2.cpp:3999
+#, c-format
+msgid "Cannot create new currency. %1"
+msgstr "Cannot create new currency. %1"
+
+#: kmymoney2.cpp:4021
+#: kmymoney2.cpp:4026
+#, c-format
+msgid "Cannot rename currency. %1"
+msgstr "Cannot rename currency. %1"
+
+#: kmymoney2.cpp:4039
+msgid "Cannot delete currency %1. %2"
+msgstr "Cannot delete currency %1. %2"
+
+#: kmymoney2.cpp:4054
+#: views/kmymoneyview.cpp:1275
+msgid "Cannot set %1 as base currency: %2"
+msgstr "Cannot set %1 as base currency: %2"
+
+#: kmymoney2.cpp:4054
+#: views/kmymoneyview.cpp:1275
+msgid "Set base currency"
+msgstr "Set base currency"
+
+#: kmymoney2.cpp:4065
+#, c-format
+msgid "Budget %1"
+msgstr "Budget %1"
+
+#: kmymoney2.cpp:4075
+msgid "Budget %1 (%2)"
+msgstr "Budget %1 (%2)"
+
+#: kmymoney2.cpp:4090
+#: kmymoney2.cpp:4139
+msgid "Unable to add budget: %1, thrown in %2:%3"
+msgstr "Unable to add budget: %1, thrown in %2:%3"
+
+#: kmymoney2.cpp:4105
+msgid "Do you really want to remove the budget <b>%1</b>?"
+msgstr "Do you really want to remove the budget <b>%1</b>?"
+
+#: kmymoney2.cpp:4107
+msgid "Do you really want to remove all selected budgets?"
+msgstr "Do you really want to remove all selected budgets?"
+
+#: kmymoney2.cpp:4109
+msgid "Remove Budget"
+msgstr "Remove Budget"
+
+#: kmymoney2.cpp:4122
+msgid "Unable to remove budget: %1, thrown in %2:%3"
+msgstr "Unable to remove budget: %1, thrown in %2:%3"
+
+#: kmymoney2.cpp:4134
+#: views/kreportsview.cpp:659
+#, c-format
+msgid "Copy of %1"
+msgstr "Copy of %1"
+
+#: kmymoney2.cpp:4164
+msgid "Select year"
+msgstr "Select year"
+
+#: kmymoney2.cpp:4164
+msgid "Budget year"
+msgstr "Budget year"
+
+#: kmymoney2.cpp:4176
+#: kmymoney2.cpp:4214
+#: kmymoney2.cpp:4274
+msgid "Unable to modify budget: %1, thrown in %2:%3"
+msgstr "Unable to modify budget: %1, thrown in %2:%3"
+
+#: kmymoney2.cpp:4192
+#: kmymoney2.cpp:4250
+msgid "The current budget already contains data. Continuing will replace all current values of this budget."
+msgstr "The current budget already contains data. Continuing will replace all current values of this budget."
+
+#: kmymoney2.cpp:4222
+msgid "Please be aware that changes made in the following dialog affect all KDE applications not only KMyMoney."
+msgstr "Please be aware that changes made in the following dialog affect all KDE applications not only KMyMoney."
+
+#: kmymoney2.cpp:4292
+msgid "At least one split of the selected transactions has been reconciled. Do you wish to delete the transactions anyway?"
+msgstr "At least one split of the selected transactions has been reconciled. Do you wish to delete the transactions anyway?"
+
+#: kmymoney2.cpp:4295
+#: views/kgloballedgerview.cpp:1043
+msgid "Transaction already reconciled"
+msgstr "Transaction already reconciled"
+
+#: kmymoney2.cpp:4301
+msgid "Do you really want to delete the selected transaction?"
+msgstr "Do you really want to delete the selected transaction?"
+
+#: kmymoney2.cpp:4303
+msgid "Do you really want to delete all %1 selected transactions?"
+msgstr "Do you really want to delete all %1 selected transactions?"
+
+#: kmymoney2.cpp:4305
+msgid "Delete transaction"
+msgstr "Delete transaction"
+
+#: kmymoney2.cpp:4306
+msgid "Deleting transactions"
+msgstr "Deleting transactions"
+
+#: kmymoney2.cpp:4321
+msgid "Duplicating transactions"
+msgstr "Duplicating transactions"
+
+#: kmymoney2.cpp:4378
+msgid "Unable to delete transaction(s): %1, thrown in %2:%3"
+msgstr "Unable to delete transaction(s): %1, thrown in %2:%3"
+
+#: kmymoney2.cpp:4452
+#: kmymoney2.cpp:4622
+msgid "Unable to modify transaction: %1, thrown in %2:%3"
+msgstr "Unable to modify transaction: %1, thrown in %2:%3"
+
+#: kmymoney2.cpp:4514
+msgid "Do you really want to cancel editing this transaction without saving it?<p>- <b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the transaction prior to cancelling and<br>- <b>Cancel</b> returns to the transaction editor.<p>You can also select an option to save the transaction automatically when e.g. selecting another transaction."
+msgstr "Do you really want to cancel editing this transaction without saving it?<p>- <b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the transaction prior to cancelling and<br>- <b>Cancel</b> returns to the transaction editor.<p>You can also select an option to save the transaction automatically when e.g. selecting another transaction."
+
+#: kmymoney2.cpp:4514
+#: kmymoney2.cpp:4517
+msgid "Cancel transaction edit"
+msgstr "Cancel transaction edit"
+
+#: kmymoney2.cpp:4517
+msgid "Do you really want to cancel editing this transaction without saving it?<p>- <b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the transaction prior to cancelling.<p>You can also select an option to save the transaction automatically when e.g. selecting another transaction."
+msgstr "Do you really want to cancel editing this transaction without saving it?<p>- <b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the transaction prior to cancelling.<p>You can also select an option to save the transaction automatically when e.g. selecting another transaction."
+
+#: kmymoney2.cpp:4667
+msgid "Unable to accept transaction: %1, thrown in %2:%3"
+msgstr "Unable to accept transaction: %1, thrown in %2:%3"
+
+#: kmymoney2.cpp:4846
+msgid "Unable to unmatch the selected transactions"
+msgstr "Unable to unmatch the selected transactions"
+
+#: kmymoney2.cpp:4885
+msgid "No manually entered transaction selected for matching"
+msgstr "No manually entered transaction selected for matching"
+
+#: kmymoney2.cpp:4887
+msgid "No imported transaction selected for matching"
+msgstr "No imported transaction selected for matching"
+
+#: kmymoney2.cpp:4895
+msgid "Unable to match the selected transactions"
+msgstr "Unable to match the selected transactions"
+
+#: kmymoney2.cpp:5097
+msgid "Create a new transaction"
+msgstr "Create a new transaction"
+
+#: kmymoney2.cpp:5163
+msgid "Duplicate the current selected transactions"
+msgstr "Duplicate the current selected transactions"
+
+#: kmymoney2.cpp:5223
+msgid ""
+"_: Button text for unmatch transaction\n"
+"Unmatch"
+msgstr "Unmatch"
+
+#: kmymoney2.cpp:5451
+#: kmymoney2.cpp:5473
+msgid "Goto '%1'"
+msgstr "Goto '%1'"
+
+#: kmymoney2.cpp:5582
+msgid "Running consistency check..."
+msgstr "Running consistency check..."
+
+#: kmymoney2.cpp:5590
+#, c-format
+msgid "Consistency check failed: %1"
+msgstr "Consistency check failed: %1"
+
+#: kmymoney2.cpp:5594
+msgid "Consistency check result"
+msgstr "Consistency check result"
+
+#: kmymoney2.cpp:5603
+msgid "Checking for overdue scheduled transactions..."
+msgstr "Checking for overdue scheduled transactions..."
+
+#: kmymoney2.cpp:5740
+msgid "You must first select a KMyMoney file before you can import a statement."
+msgstr "You must first select a KMyMoney file before you can import a statement."
+
+#: kmymoney2.cpp:5746
+msgid "Importing a statement via Web Connect"
+msgstr "Importing a statement via Web Connect"
+
+#: kmymoney2.cpp:5759
+msgid "Unable to import %1 using %2 plugin. The plugin returned the following error: %3"
+msgstr "Unable to import %1 using %2 plugin. The plugin returned the following error: %3"
+
+#: kmymoney2.cpp:5759
+#: plugins/ofximport/ofximporterplugin.cpp:646
+msgid "Importing error"
+msgstr "Importing error"
+
+#: kmymoney2.cpp:5780
+msgid "All messages have been enabled."
+msgstr "All messages have been enabled."
+
+#: kmymoney2.cpp:5780
+msgid "All messages"
+msgstr "All messages"
+
+#: kmymoney2.cpp:5855
+msgid "Auto saving..."
+msgstr "Auto saving..."
+
+#: kmymoney2.cpp:5913
+msgid "Unable to setup online parameters for account ''%1'"
+msgstr "Unable to setup online parameters for account ''%1'"
+
+#: kmymoney2.cpp:5928
+msgid "Do you really want to remove the mapping of account <b>%1</b> to an online account? Depending on the details of the online banking method used, this action cannot be reverted."
+msgstr "Do you really want to remove the mapping of account <b>%1</b> to an online account? Depending on the details of the online banking method used, this action cannot be reverted."
+
+#: kmymoney2.cpp:5928
+msgid "Remove mapping to online account"
+msgstr "Remove mapping to online account"
+
+#: kmymoney2.cpp:5939
+#, c-format
+msgid "Unable to unmap account from online account: %1"
+msgstr "Unable to unmap account from online account: %1"
+
+#: kmymoney2.cpp:5956
+msgid " (Brokerage)"
+msgstr " (Brokerage)"
+
+#: kmymoney2.cpp:5957
+msgid "You try to map a brokerage account to an online account. This is usually not advisable. In general, the investment account should be mapped to the online account. Please cancel if you intended to map the investment account, continue otherwise"
+msgstr "You try to map a brokerage account to an online account. This is usually not advisable. In general, the investment account should be mapped to the online account. Please cancel if you intended to map the investment account, continue otherwise"
+
+#: kmymoney2.cpp:5957
+msgid "Mapping brokerage account"
+msgstr "Mapping brokerage account"
+
+#: kmymoney2.cpp:5964
+msgid "Select online banking plugin"
+msgstr "Select online banking plugin"
+
+#: kmymoney2.cpp:6005
+#, c-format
+msgid "Unable to map account to online account: %1"
+msgstr "Unable to map account to online account: %1"
+
+#: converter/mymoneyqifreader.cpp:407
+#: converter/mymoneytemplate.cpp:73
+#: views/kmymoneyview.cpp:590
+msgid "Error while loading file '%1'!"
+msgstr "Error while loading file '%1'!"
+
+#: converter/mymoneyqifreader.cpp:409
+#: converter/mymoneyqifreader.cpp:965
+#: converter/mymoneytemplate.cpp:75
+#: views/kmymoneyview.cpp:592
+msgid "File access error"
+msgstr "File access error"
+
+#: converter/mymoneytemplate.cpp:84
+msgid "<b>%1</b> is not a template file."
+msgstr "<b>%1</b> is not a template file."
+
+#: converter/mymoneytemplate.cpp:85
+#: views/kmymoneyview.cpp:603
+msgid "Filetype Error"
+msgstr "Filetype error"
+
+#: converter/mymoneytemplate.cpp:93
+msgid "Error while reading template file <b>%1</b> in line %2, column %3"
+msgstr "Error while reading template file <b>%1</b> in line %2, column %3"
+
+#: converter/mymoneytemplate.cpp:94
+msgid "Template Error"
+msgstr "Template Error"
+
+#: converter/mymoneytemplate.cpp:101
+msgid "File '%1' not found!"
+msgstr "File '%1' not found!"
+
+#: converter/mymoneytemplate.cpp:142
+msgid "Invalid tag <b>%1</b> in template file <b>%2</b>!"
+msgstr "Invalid tag <b>%1</b> in template file <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:214
+#, c-format
+msgid "Loading template %1"
+msgstr "Loading template %1"
+
+#: converter/mymoneytemplate.cpp:241
+msgid "Invalid top-level account type <b>%1</b> in template file <b>%2</b>!"
+msgstr "Invalid top-level account type <b>%1</b> in template file <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:309
+msgid "Invalid flag type <b>%1</b> for account <b>%3</b> in template file <b>%2</b>!"
+msgstr "Invalid flag type <b>%1</b> for account <b>%3</b> in template file <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:398
+#: converter/mymoneytemplate.cpp:401
+#: views/kmymoneyview.cpp:1151
+#: views/kmymoneyview.cpp:1154
+msgid "Unable to write changes to '%1'"
+msgstr "Unable to write changes to '%1'"
+
+#: converter/mymoneytemplate.cpp:407
+#: views/kmymoneyview.cpp:1162
+msgid "Unable to upload to '%1'"
+msgstr "Unable to upload to '%1'"
+
+#: converter/mymoneyqifwriter.cpp:70
+msgid "Unexpected exception '%1' thrown in %2, line %3 caught in MyMoneyQifWriter::write()"
+msgstr "Unexpected exception '%1' thrown in %2, line %3 caught in MyMoneyQifWriter::write()"
+
+#: converter/mymoneyqifwriter.cpp:80
+msgid "Unable to open file '%1' for writing"
+msgstr "Unable to open file '%1' for writing"
+
+#: converter/webpricequote.cpp:340
+#, c-format
+msgid "Symbol found: %1"
+msgstr "Symbol found: %1"
+
+#: converter/webpricequote.cpp:368
+msgid "Price found: %1 (%2)"
+msgstr "Price found: %1 (%2)"
+
+#: converter/webpricequote.cpp:380
+#, c-format
+msgid "Date found: %1"
+msgstr "Date found: %1"
+
+#: converter/webpricequote.cpp:397
+#: converter/webpricequote.cpp:403
+#, c-format
+msgid "Unable to update price for %1"
+msgstr "Unable to update price for %1"
+
+#: converter/mymoneyqifreader.cpp:170
+msgid ""
+"_: Category name\n"
+"Reinvested dividend"
+msgstr "Reinvested dividend"
+
+#: converter/mymoneyqifreader.cpp:173
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (long term)"
+msgstr "Reinvested dividend (long term)"
+
+#: converter/mymoneyqifreader.cpp:176
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (short term)"
+msgstr "Reinvested dividend (short term)"
+
+#: converter/mymoneyqifreader.cpp:179
+msgid ""
+"_: Category name\n"
+"Dividend"
+msgstr "Dividend"
+
+#: converter/mymoneyqifreader.cpp:182
+msgid ""
+"_: Category name\n"
+"Interest"
+msgstr "Interest"
+
+#: converter/mymoneyqifreader.cpp:185
+msgid ""
+"_: Category name\n"
+"Capital Gain (short term)"
+msgstr "Capital Gain (short term)"
+
+#: converter/mymoneyqifreader.cpp:188
+msgid ""
+"_: Category name\n"
+"Capital Gain (mid term)"
+msgstr "Capital Gain (mid term)"
+
+#: converter/mymoneyqifreader.cpp:191
+msgid ""
+"_: Category name\n"
+"Capital Gain (long term)"
+msgstr "Capital Gain (long term)"
+
+#: converter/mymoneyqifreader.cpp:194
+msgid ""
+"_: Category name\n"
+"Returned capital"
+msgstr "Returned capital"
+
+#: converter/mymoneyqifreader.cpp:197
+msgid ""
+"_: Category name\n"
+"Miscellaneous income"
+msgstr "Miscellaneous income"
+
+#: converter/mymoneyqifreader.cpp:200
+msgid ""
+"_: Category name\n"
+"Miscellaneous expense"
+msgstr "Miscellaneous expense"
+
+#: converter/mymoneyqifreader.cpp:203
+msgid ""
+"_: Category name\n"
+"Investment fees"
+msgstr "Investment fees"
+
+#: converter/mymoneyqifreader.cpp:205
+#, c-format
+msgid "Unknown QIF type %1"
+msgstr "Unknown QIF type %1"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Date format selection"
+msgstr "Date format selection"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Pick the date format that suits your input file"
+msgstr "Pick the date format that suits your input file"
+
+#: converter/mymoneyqifreader.cpp:366
+msgid "Importing QIF ..."
+msgstr "Importing QIF ..."
+
+#: converter/mymoneyqifreader.cpp:442
+msgid "Reading QIF ..."
+msgstr "Reading QIF ..."
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Adding transactions"
+msgstr "Adding transactions"
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Now adding the transactions to your ledger..."
+msgstr "Now adding the transactions to your ledger..."
+
+#: converter/mymoneyqifreader.cpp:533
+msgid "Unable to add transactions"
+msgstr "Unable to add transactions"
+
+#: converter/mymoneyqifreader.cpp:567
+msgid ""
+"_: QIF tag for liability account\n"
+"Oth L"
+msgstr "Oth L"
+
+#: converter/mymoneyqifreader.cpp:572
+msgid ""
+"_: QIF tag for category\n"
+"Cat"
+msgstr "Cat"
+
+#: converter/mymoneyqifreader.cpp:575
+msgid ""
+"_: QIF tag for security\n"
+"Security"
+msgstr "Security"
+
+#: converter/mymoneyqifreader.cpp:578
+msgid ""
+"_: QIF tag for investment account\n"
+"Invst"
+msgstr "Invst"
+
+#: converter/mymoneyqifreader.cpp:581
+msgid ""
+"_: QIF tag for prices\n"
+"Prices"
+msgstr "Prices"
+
+#: converter/mymoneyqifreader.cpp:599
+msgid ""
+"_: QIF tag for a class\n"
+"Class"
+msgstr "Class"
+
+#: converter/mymoneyqifreader.cpp:753
+#: converter/mymoneyqifreader.cpp:2203
+msgid "The %1 account currently has an opening balance of %2. This QIF file reports an opening balance of %3. Would you like to overwrite the current balance with the one from the QIF file?"
+msgstr "The %1 account currently has an opening balance of %2. This QIF file reports an opening balance of %3. Would you like to overwrite the current balance with the one from the QIF file?"
+
+#: converter/mymoneyqifreader.cpp:754
+#: converter/mymoneyqifreader.cpp:2204
+msgid "Overwrite opening balance"
+msgstr "Overwrite opening balance"
+
+#: converter/mymoneyqifreader.cpp:879
+#: converter/mymoneyqifreader.cpp:890
+#: converter/mymoneyqifreader.cpp:914
+msgid "Autogenerated by QIF importer"
+msgstr "Autogenerated by QIF importer"
+
+#: converter/mymoneyqifreader.cpp:907
+msgid "QIF imported, no account name supplied"
+msgstr "QIF imported, no account name supplied"
+
+#: converter/mymoneyqifreader.cpp:940
+msgid "KMyMoney has imported a second opening balance transaction into account <b>%1</b> which differs from the one found already on file. Please correct this manually once the import is done."
+msgstr "KMyMoney has imported a second opening balance transaction into account <b>%1</b> which differs from the one found already on file. Please correct this manually once the import is done."
+
+#: converter/mymoneyqifreader.cpp:940
+msgid "Opening balance problem"
+msgstr "Opening balance problem"
+
+#: converter/mymoneyqifreader.cpp:963
+msgid "Error while creating opening balance transaction"
+msgstr "Error while creating opening balance transaction"
+
+#: converter/mymoneyqifreader.cpp:1029
+#: converter/mymoneyqifreader.cpp:1276
+msgid ""
+"The date entry \"%1\" read from the file cannot be interpreted through the current date profile setting of \"%2\".\n"
+"\n"
+"Pressing \"Continue\" will assign todays date to the transaction. Pressing \"Cancel\" will abort the import operation. You can then restart the import and select a different QIF profile or create a new one."
+msgstr ""
+"The date entry \"%1\" read from the file cannot be interpreted through the current date profile setting of \"%2\".\n"
+"\n"
+"Pressing \"Continue\" will assign today's date to the transaction. Pressing \"Cancel\" will abort the import operation. You can then restart the import and select a different QIF profile or create a new one."
+
+#: converter/mymoneyqifreader.cpp:1035
+#: converter/mymoneyqifreader.cpp:1282
+msgid "Invalid date format"
+msgstr "Invalid date format"
+
+#: converter/mymoneyqifreader.cpp:1398
+#: converter/mymoneystatementreader.cpp:589
+#: converter/mymoneystatementreader.cpp:592
+msgid "Statement Importer"
+msgstr "Statement importer"
+
+#: converter/mymoneyqifreader.cpp:1413
+#: converter/mymoneystatementreader.cpp:644
+msgid "This investment account does not contain the \"%1\" security. Transactions involving this security will be ignored."
+msgstr "This investment account does not contain the \"%1\" security. Transactions involving this security will be ignored."
+
+#: converter/mymoneyqifreader.cpp:1415
+#: converter/mymoneystatementreader.cpp:612
+#: converter/mymoneystatementreader.cpp:644
+msgid "Security not found"
+msgstr "Security not found"
+
+#: converter/mymoneyqifreader.cpp:2021
+msgid "%1 (Investment)"
+msgstr "%1 (Investment)"
+
+#: converter/mymoneyqifreader.cpp:2022
+msgid "Autogenerated by QIF importer from type Mutual account entry"
+msgstr "Auto generated by QIF importer from type Mutual account entry"
+
+#: converter/mymoneyqifreader.cpp:2085
+#: converter/mymoneyqifreader.cpp:2228
+msgid "account"
+msgstr "account"
+
+#: converter/mymoneyqifreader.cpp:2086
+msgid "al"
+msgstr "al"
+
+#: converter/mymoneyqifreader.cpp:2093
+msgid "category"
+msgstr "category"
+
+#: converter/mymoneyqifreader.cpp:2094
+msgid "ei"
+msgstr "ei"
+
+#: converter/mymoneyqifreader.cpp:2095
+msgid "Category selection"
+msgstr "Category selection"
+
+#: converter/mymoneyqifreader.cpp:2110
+msgid "Account \"%1\" disappeared: "
+msgstr "Account \"%1\" disappeared: "
+
+#: converter/mymoneyqifreader.cpp:2131
+msgid "The %1 '%2' does not exist. Do you want to create it?"
+msgstr "The %1 '%2' does not exist. Do you want to create it?"
+
+#: converter/mymoneyqifreader.cpp:2140
+#, c-format
+msgid "Select %1"
+msgstr "Select %1"
+
+#: converter/mymoneyqifreader.cpp:2142
+msgid "The %1 <b>%2</b> currently exists. Do you want to import transactions to this account?"
+msgstr "The %1 <b>%2</b> currently exists. Do you want to import transactions to this account?"
+
+#: converter/mymoneyqifreader.cpp:2147
+msgid "The %1 <b>%2</b> currently does not exist. You can create a new %3 by pressing the <b>Create</b> button or select another %4 manually from the selection box."
+msgstr "The %1 <b>%2</b> currently does not exist. You can create a new %3 by pressing the <b>Create</b> button or select another %4 manually from the selection box."
+
+#: converter/mymoneyqifreader.cpp:2154
+#, c-format
+msgid "Import transactions to %1"
+msgstr "Import transactions to %1"
+
+#: converter/mymoneyqifreader.cpp:2155
+msgid "No %1 information has been found in the selected QIF file. Please select an account using the selection box in the dialog or create a new %2 by pressing the <b>Create</b> button."
+msgstr "No %1 information has been found in the selected QIF file. Please select an account using the selection box in the dialog or create a new %2 by pressing the <b>Create</b> button."
+
+#: converter/mymoneyqifreader.cpp:2229
+msgid "You must select or create an account."
+msgstr "You must select or create an account."
+
+#: converter/mymoneyqifreader.cpp:2231
+msgid "You must select or create a category."
+msgstr "You must select or create a category."
+
+#: converter/mymoneystatementreader.cpp:100
+msgid "_Fees"
+msgstr "_Fees"
+
+#: converter/mymoneystatementreader.cpp:106
+msgid "_Dividend"
+msgstr "_Dividend"
+
+#: converter/mymoneystatementreader.cpp:289
+#, c-format
+msgid "Importing statement for account %1"
+msgstr "Importing statement for account %1"
+
+#: converter/mymoneystatementreader.cpp:291
+msgid "Importing statement without transactions"
+msgstr "Importing statement without transactions"
+
+#: converter/mymoneystatementreader.cpp:385
+msgid " Statement balance is not contained in statement."
+msgstr " Statement balance is not contained in statement."
+
+#: converter/mymoneystatementreader.cpp:387
+msgid " Statement balance on %1 is reported to be %2"
+msgstr " Statement balance on %1 is reported to be %2"
+
+#: converter/mymoneystatementreader.cpp:389
+msgid " Transactions"
+msgstr " Transactions"
+
+#: converter/mymoneystatementreader.cpp:390
+msgid " %1 processed"
+msgstr " %1 processed"
+
+#: converter/mymoneystatementreader.cpp:391
+msgid " %1 added"
+msgstr " %1 added"
+
+#: converter/mymoneystatementreader.cpp:392
+msgid " %1 matched"
+msgstr " %1 matched"
+
+#: converter/mymoneystatementreader.cpp:393
+msgid " %1 duplicates"
+msgstr " %1 duplicates"
+
+#: converter/mymoneystatementreader.cpp:394
+msgid " Payees"
+msgstr " Payees"
+
+#: converter/mymoneystatementreader.cpp:395
+msgid " %1 created"
+msgstr " %1 created"
+
+#: converter/mymoneystatementreader.cpp:483
+#, c-format
+msgid "Error creating security record: %1"
+msgstr "Error creating security record: %1"
+
+#: converter/mymoneystatementreader.cpp:612
+msgid "This imported statement contains investment transactions with no security. These transactions will be ignored."
+msgstr "This imported statement contains investment transactions with no security. These transactions will be ignored."
+
+#: converter/mymoneystatementreader.cpp:803
+msgid "(Fees) "
+msgstr "(Fees)"
+
+#: converter/mymoneystatementreader.cpp:880
+msgid ""
+"Do you want to add \"%1\" as payee/receiver?\n"
+"\n"
+msgstr ""
+"Do you want to add \"%1\" as payee/receiver?\n"
+"\n"
+
+#: converter/mymoneystatementreader.cpp:881
+msgid ""
+"Selecting \"Yes\" will create the payee, \"No\" will skip creation of a payee record and remove the payee information from this transaction. Selecting \"Cancel\" aborts the import operation.\n"
+"\n"
+"If you select \"No\" here and mark the \"Don't ask again\" checkbox, the payee information for all following transactions referencing \"%1\" will be removed."
+msgstr ""
+"Selecting \"Yes\" will create the payee, \"No\" will skip creation of a payee record and remove the payee information from this transaction. Selecting \"Cancel\" aborts the import operation.\n"
+"\n"
+"If you select \"No\" here and mark the \"Don't ask again\" checkbox, the payee information for all following transactions referencing \"%1\" will be removed."
+
+#: converter/mymoneystatementreader.cpp:917
+msgid "Save Category"
+msgstr "Save Category"
+
+#: converter/mymoneystatementreader.cpp:918
+msgid "No Category"
+msgstr "No Category"
+
+#: converter/mymoneystatementreader.cpp:919
+#: dialogs/rc.cpp:4
+msgid "Abort"
+msgstr "Abort"
+
+#: converter/mymoneystatementreader.cpp:926
+msgid "Please select a default category for payee '%1':"
+msgstr "Please select a default category for payee '%1':"
+
+#: converter/mymoneystatementreader.cpp:958
+msgid "Unable to add payee/receiver"
+msgstr "Unable to add payee/receiver"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid "KMyMoney has found a scheduled transaction named <b>%1</b> which matches an imported transaction. Do you want KMyMoney to enter this schedule now so that the transaction can be matched? "
+msgstr "KMyMoney has found a scheduled transaction named <b>%1</b> which matches an imported transaction. Do you want KMyMoney to enter this schedule now so that the transaction can be matched? "
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid "Schedule found"
+msgstr "Schedule found"
+
+#: converter/mymoneystatementreader.cpp:1219
+msgid "Problem adding or matching imported transaction with id '%1': %2"
+msgstr "Problem adding or matching imported transaction with id '%1': %2"
+
+#: converter/mymoneystatementreader.cpp:1268
+msgid "<b>You have downloaded a statement for the following account:</b><br><br>"
+msgstr "<b>You have downloaded a statement for the following account:</b><br><br>"
+
+#: converter/mymoneystatementreader.cpp:1269
+#, c-format
+msgid " - Account Name: %1"
+msgstr " - Account Name: %1"
+
+#: converter/mymoneystatementreader.cpp:1270
+#, c-format
+msgid " - Account Type: %1"
+msgstr " - Account Type: %1"
+
+#: converter/mymoneystatementreader.cpp:1271
+#, c-format
+msgid " - Account Number: %1"
+msgstr " - Account Number: %1"
+
+#: converter/mymoneystatementreader.cpp:1279
+msgid "Do you want to import transactions to this account?"
+msgstr "Do you want to import transactions to this account?"
+
+#: converter/mymoneystatementreader.cpp:1281
+msgid "KMyMoney cannot determine which of your accounts to use. You can create a new account by pressing the <b>Create</b> button or select another one manually from the selection box below."
+msgstr "KMyMoney cannot determine which of your accounts to use. You can create a new account by pressing the <b>Create</b> button or select another one manually from the selection box below."
+
+#: converter/mymoneystatementreader.cpp:1287
+msgid "No account information has been found in the selected statement file. Please select an account using the selection box in the dialog or create a new account by pressing the <b>Create</b> button."
+msgstr "No account information has been found in the selected statement file. Please select an account using the selection box in the dialog or create a new account by pressing the <b>Create</b> button."
+
+#: converter/mymoneystatementreader.cpp:1294
+msgid "Import transactions"
+msgstr "Import transactions"
+
+#: converter/mymoneystatementreader.cpp:1330
+msgid "You must select an account, create a new one, or press the <b>Abort</b> button."
+msgstr "You must select an account, create a new one, or press the <b>Abort</b> button."
+
+#: converter/mymoneygncreader.cpp:119
+msgid "%1: Sorry. This importer cannot handle version %2 of element %3"
+msgstr "%1: Sorry. This importer cannot handle version %2 of element %3"
+
+#: converter/mymoneygncreader.cpp:193
+#, c-format
+msgid "Account%1"
+msgstr "Account%1"
+
+#: converter/mymoneygncreader.cpp:197
+#, c-format
+msgid "Stock%1"
+msgstr "Stock%1"
+
+#: converter/mymoneygncreader.cpp:206
+#, c-format
+msgid "Payee%1"
+msgstr "Payee%1"
+
+#: converter/mymoneygncreader.cpp:212
+#, c-format
+msgid "Schedule%1"
+msgstr "Schedule%1"
+
+#: converter/mymoneygncreader.cpp:262
+msgid "This version of the importer cannot handle multi-book files."
+msgstr "This version of the importer cannot handle multi-book files."
+
+#: converter/mymoneygncreader.cpp:912
+msgid "Invalid header for file. Should be 'gnc-v2'"
+msgstr "Invalid header for file. Should be 'gnc-v2'"
+
+#: converter/mymoneygncreader.cpp:937
+#: converter/mymoneygncreader.cpp:972
+#: converter/mymoneygncreader.cpp:1062
+#, c-format
+msgid ""
+"Import failed:\n"
+"\n"
+"%1"
+msgstr ""
+"Import failed:\n"
+"\n"
+"%1"
+
+#: converter/mymoneygncreader.cpp:1065
+msgid "Import complete"
+msgstr "Import complete"
+
+#: converter/mymoneygncreader.cpp:1120
+msgid "Disguise your wealth"
+msgstr "Disguise your wealth"
+
+#: converter/mymoneygncreader.cpp:1121
+msgid ""
+"Each monetary value on your file will be multiplied by a random number between 0.01 and 1.99\n"
+"with a different value used for each transaction. In addition, to further disguise the true\n"
+"values, you may enter a number between %1 and %2 which will be applied to all values.\n"
+"These numbers will not be stored in the file."
+msgstr ""
+"Each monetary value on your file will be multiplied by a random number between 0.01 and 1.99\n"
+"with a different value used for each transaction. In addition, to further disguise the true\n"
+"values, you may enter a number between %1 and %2 which will be applied to all values.\n"
+"These numbers will not be stored in the file."
+
+#: converter/mymoneygncreader.cpp:1135
+msgid "Loading commodities..."
+msgstr "Loading commodities..."
+
+#: converter/mymoneygncreader.cpp:1160
+msgid "Loading prices..."
+msgstr "Loading prices..."
+
+#: converter/mymoneygncreader.cpp:1164
+#: converter/mymoneygncreader.cpp:1171
+msgid "Imported History"
+msgstr "Imported History"
+
+#: converter/mymoneygncreader.cpp:1251
+#, c-format
+msgid "Current importer does not recognize GnuCash account type %1"
+msgstr "Current importer does not recognise GnuCash account type %1"
+
+#: converter/mymoneygncreader.cpp:1471
+msgid "Imported Transaction"
+msgstr "Imported Transaction"
+
+#: converter/mymoneygncreader.cpp:1519
+msgid "Loading templates..."
+msgstr "Loading templates..."
+
+#: converter/mymoneygncreader.cpp:1531
+msgid "Unknown payee"
+msgstr "Unknown payee"
+
+#: converter/mymoneygncreader.cpp:1723
+msgid "Loading schedules..."
+msgstr "Loading schedules..."
+
+#: converter/mymoneygncreader.cpp:1735
+#, c-format
+msgid "Can't find template transaction for schedule %1"
+msgstr "Can't find template transaction for schedule %1"
+
+#: converter/mymoneygncreader.cpp:1910
+msgid "Reorganizing accounts..."
+msgstr "Reorganising accounts..."
+
+#: converter/mymoneygncreader.cpp:1972
+msgid "Your main currency seems to be %1 (%2); do you want to set this as your base currency?"
+msgstr "Your main currency seems to be %1 (%2); do you want to set this as your base currency?"
+
+#: converter/mymoneygncreader.cpp:1993
+msgid "More"
+msgstr "More"
+
+#: converter/mymoneygncreader.cpp:1997
+msgid "Save Report"
+msgstr "Save Report"
+
+#: converter/mymoneygncreader.cpp:2017
+msgid ""
+"Problems were encountered in converting schedule '%1'.\n"
+"Do you want to review or edit it now?"
+msgstr ""
+"Problems were encountered in converting schedule '%1'.\n"
+"Do you want to review or edit it now?"
+
+#: converter/mymoneygncreader.cpp:2039
+msgid ""
+"Found:\n"
+"\n"
+msgstr ""
+"Found:\n"
+"\n"
+
+#: converter/mymoneygncreader.cpp:2040
+msgid " commodities (equities)\n"
+msgstr " commodities (equities)\n"
+
+#: converter/mymoneygncreader.cpp:2041
+msgid " prices\n"
+msgstr " prices\n"
+
+#: converter/mymoneygncreader.cpp:2042
+msgid " accounts\n"
+msgstr " accounts\n"
+
+#: converter/mymoneygncreader.cpp:2043
+msgid " transactions\n"
+msgstr " transactions\n"
+
+#: converter/mymoneygncreader.cpp:2044
+msgid " schedules\n"
+msgstr " schedules\n"
+
+#: converter/mymoneygncreader.cpp:2047
+msgid "No inconsistencies were detected"
+msgstr "No inconsistencies were detected"
+
+#: converter/mymoneygncreader.cpp:2049
+msgid " inconsistencies were detected and corrected\n"
+msgstr " inconsistencies were detected and corrected\n"
+
+#: converter/mymoneygncreader.cpp:2054
+msgid " orphan accounts were created\n"
+msgstr " orphan accounts were created\n"
+
+#: converter/mymoneygncreader.cpp:2059
+msgid " possible schedule problems were noted\n"
+msgstr " possible schedule problems were noted\n"
+
+#: converter/mymoneygncreader.cpp:2064
+msgid "Small Business Features (Customers, Invoices, etc.)"
+msgstr "Small Business Features (Customers, Invoices, etc.)"
+
+#: converter/mymoneygncreader.cpp:2065
+#: views/kmymoneyview.cpp:241
+#: views/kmymoneyview.cpp:243
+msgid "Budgets"
+msgstr "Budgets"
+
+#: converter/mymoneygncreader.cpp:2066
+msgid "Lots"
+msgstr "Lots"
+
+#: converter/mymoneygncreader.cpp:2068
+msgid "The following features found in your file are not currently supported:"
+msgstr "The following features found in your file are not currently supported:"
+
+#: converter/mymoneygncreader.cpp:2071
+msgid ""
+"\n"
+"\n"
+"Press More for further information"
+msgstr ""
+"\n"
+"\n"
+"Press More for further information"
+
+#: converter/mymoneygncreader.cpp:2139
+msgid "Orphan created from unknown gnucash account"
+msgstr "Orphan created from unknown GnuCash account"
+
+#: converter/mymoneygncreader.cpp:2170
+msgid "Internal error - invalid interval char in incrDate"
+msgstr "Internal error - invalid interval char in incrDate"
+
+#: converter/mymoneygncreader.cpp:2233
+msgid "Enter the investment account name "
+msgstr "Enter the investment account name "
+
+#: converter/mymoneygncreader.cpp:2234
+msgid "My Investments"
+msgstr "My Investments"
+
+#: converter/mymoneygncreader.cpp:2269
+#, c-format
+msgid "Select parent investment account or enter new name. Stock %1"
+msgstr "Select parent investment account or enter new name. Stock %1"
+
+#: converter/mymoneygncreader.cpp:2292
+#: converter/mymoneygncreader.cpp:2307
+msgid "%1 is not an Investment Account. Do you wish to make it one?"
+msgstr "%1 is not an Investment Account. Do you wish to make it one?"
+
+#: converter/mymoneygncreader.cpp:2408
+msgid ""
+"An Investment account must be a child of an Asset account\n"
+"Account %1 will be stored under the main Asset account"
+msgstr ""
+"An Investment account must be a child of an Asset account\n"
+"Account %1 will be stored under the main Asset account"
+
+#: converter/mymoneygncreader.cpp:2410
+msgid ""
+"An Income account must be a child of an Income account\n"
+"Account %1 will be stored under the main Income account"
+msgstr ""
+"An Income account must be a child of an Income account\n"
+"Account %1 will be stored under the main Income account"
+
+#: converter/mymoneygncreader.cpp:2412
+msgid ""
+"An Expense account must be a child of an Expense account\n"
+"Account %1 will be stored under the main Expense account"
+msgstr ""
+"An Expense account must be a child of an Expense account\n"
+"Account %1 will be stored under the main Expense account"
+
+#: converter/mymoneygncreader.cpp:2414
+msgid ""
+"One or more transactions contain a reference to an otherwise unknown account\n"
+"An asset account with the name %1 has been created to hold the data"
+msgstr ""
+"One or more transactions contain a reference to an otherwise unknown account\n"
+"An asset account with the name %1 has been created to hold the data"
+
+#: converter/mymoneygncreader.cpp:2416
+msgid "Schedule %1 has interval of %2 which is not currently available"
+msgstr "Schedule %1 has interval of %2 which is not currently available"
+
+#: converter/mymoneygncreader.cpp:2417
+msgid "Schedule %1 dropped at user request"
+msgstr "Schedule %1 dropped at user request"
+
+#: converter/mymoneygncreader.cpp:2418
+msgid "Schedule %1 contains unknown action (key = %2, type = %3)"
+msgstr "Schedule %1 contains unknown action (key = %2, type = %3)"
+
+#: converter/mymoneygncreader.cpp:2419
+msgid "Schedule %1 contains multiple actions; only one has been imported"
+msgstr "Schedule %1 contains multiple actions; only one has been imported"
+
+#: converter/mymoneygncreader.cpp:2420
+msgid "Schedule %1 contains no valid splits"
+msgstr "Schedule %1 contains no valid splits"
+
+#: converter/mymoneygncreader.cpp:2421
+msgid "Schedule %1 appears to contain a formula. GnuCash formulae are not convertible"
+msgstr "Schedule %1 appears to contain a formula. GnuCash formulae are not convertible"
+
+#: converter/mymoneygncreader.cpp:2422
+msgid "Schedule %1 contains unknown interval specification; please check for correct operation"
+msgstr "Schedule %1 contains unknown interval specification; please check for correct operation"
+
+#: converter/mymoneygncreader.cpp:2423
+msgid "Schedule %1 contains a deferred interval specification; please check for correct operation"
+msgstr "Schedule %1 contains a deferred interval specification; please check for correct operation"
+
+#: converter/mymoneygncreader.cpp:2424
+msgid "Account or Category %1, transaction date %2; split contains invalid value; please check"
+msgstr "Account or Category %1, transaction date %2; split contains invalid value; please check"
+
+#: kmymoneyutils.cpp:146
+msgid "&New Schedule..."
+msgstr "&New Schedule..."
+
+#: kmymoneyutils.cpp:148
+msgid "Create a new schedule."
+msgstr "Create a new schedule."
+
+#: kmymoneyutils.cpp:149
+msgid "Use this to create a new schedule."
+msgstr "Use this to create a new schedule."
+
+#: kmymoneyutils.cpp:158
+msgid "&Filter"
+msgstr "&Filter"
+
+#: kmymoneyutils.cpp:160
+msgid "Filter out accounts"
+msgstr "Filter out accounts"
+
+#: kmymoneyutils.cpp:161
+msgid "Use this to filter out accounts"
+msgstr "Use this to filter out accounts"
+
+#: kmymoneyutils.cpp:192
+msgid "Preferred accounts"
+msgstr "Preferred accounts"
+
+#: kmymoneyutils.cpp:193
+msgid "Payment accounts"
+msgstr "Payment accounts"
+
+#: kmymoneyutils.cpp:194
+msgid "Favorite reports"
+msgstr "Favourite reports"
+
+#: kmymoneyutils.cpp:195
+msgid "Forecast (schedule)"
+msgstr "Forecast (schedule)"
+
+#: kmymoneyutils.cpp:196
+msgid "Networth forecast"
+msgstr "Networth forecast"
+
+#: kmymoneyutils.cpp:197
+msgid "Forecast (history)"
+msgstr "Forecast (history)"
+
+#: kmymoneyutils.cpp:198
+msgid "Assets and Liabilities"
+msgstr "Assets and Liabilities"
+
+#: kmymoneyutils.cpp:199
+#: reports/pivottable.cpp:2416
+#: views/khomeview.cpp:1393
+#: widgets/rc.cpp:70
+msgid "Budget"
+msgstr "Budget"
+
+#: kmymoneyutils.cpp:200
+msgid "CashFlow"
+msgstr "CashFlow"
+
+#: dialogs/kenterscheduledlg.cpp:153
+#: kmymoneyutils.cpp:366
+msgid "Unable to load schedule details"
+msgstr "Unable to load schedule details"
+
+#: kmymoneyutils.cpp:390
+#: widgets/register.cpp:473
+msgid ""
+"_: Reconcile state 'Not reconciled'\n"
+"Not reconciled"
+msgstr "Not reconciled"
+
+#: kmymoneyutils.cpp:393
+#: widgets/register.cpp:476
+msgid ""
+"_: Reconcile state 'Cleared'\n"
+"Cleared"
+msgstr "Cleared"
+
+#: kmymoneyutils.cpp:396
+#: widgets/register.cpp:479
+msgid ""
+"_: Reconcile state 'Reconciled'\n"
+"Reconciled"
+msgstr "Reconciled"
+
+#: kmymoneyutils.cpp:399
+#: widgets/register.cpp:482
+msgid ""
+"_: Reconcile state 'Frozen'\n"
+"Frozen"
+msgstr "Frozen"
+
+#: kmymoneyutils.cpp:410
+msgid ""
+"_: Reconcile flag C\n"
+"C"
+msgstr "C"
+
+#: kmymoneyutils.cpp:413
+msgid ""
+"_: Reconcile flag R\n"
+"R"
+msgstr "R"
+
+#: kmymoneyutils.cpp:416
+msgid ""
+"_: Reconcile flag F\n"
+"F"
+msgstr "F"
+
+#: kmymoneyutils.cpp:419
+msgid ""
+"_: Flag for unknown reconciliation state\n"
+"?"
+msgstr "?"
+
+#: _tips.cpp:3
+msgid ""
+"<p>...that you can change the sort order of ledger entries by\n"
+"right-clicking the header of the ledger view?\n"
+msgstr ""
+"<p>...that you can change the sort order of ledger entries by\n"
+"right-clicking the header of the ledger view?\n"
+
+#: _tips.cpp:9
+msgid ""
+"<p>...that you can easily move to the other side of a transfer transaction\n"
+"by opening the context menu with the right mouse button and selecting one of the\n"
+"'Goto' functions?\n"
+msgstr ""
+"<p>...that you can easily move to the other side of a transfer transaction\n"
+"by opening the context menu with the right mouse button and selecting one of the\n"
+"'Goto' functions?\n"
+
+#: _tips.cpp:16
+msgid ""
+"<p>...that you can start editing a transaction by double-clicking on the\n"
+"transaction in the register?\n"
+msgstr ""
+"<p>...that you can start editing a transaction by double-clicking on the\n"
+"transaction in the register?\n"
+
+#: _tips.cpp:22
+msgid ""
+"<p>...that you can show more details of the selected transaction in the\n"
+"register by selecting the 'ledger lens' feature in the settings dialog?\n"
+msgstr ""
+"<p>...that you can show more details of the selected transaction in the\n"
+"register by selecting the 'ledger lens' feature in the settings dialog?\n"
+
+#: _tips.cpp:28
+msgid ""
+"<p>...that transactions with no category assigned or split\n"
+"transactions with unassigned values are marked with an exclamation mark \n"
+"on a yellow triangle in the register?\n"
+msgstr ""
+"<p>...that transactions with no category assigned or split\n"
+"transactions with unassigned values are marked with an exclamation mark \n"
+"on a yellow triangle in the register?\n"
+
+#: _tips.cpp:35
+msgid ""
+"<p>...that you can show all details of the transactions in the register\n"
+"by typing &lt;Ctrl-T&gt; or selecting the 'Settings/Show Transaction Detail'\n"
+"menu entry? You can turn this feature off the same way.\n"
+msgstr ""
+"<p>...that you can show all details of the transactions in the register\n"
+"by typing &lt;Ctrl-T&gt; or selecting the 'Settings/Show Transaction Detail'\n"
+"menu entry? You can turn this feature off the same way.\n"
+
+#: _tips.cpp:42
+msgid ""
+"<p>...that you can switch between a listing of all accounts or\n"
+"an icon view of all asset and liability accounts with the tabs\n"
+"in the accounts view?\n"
+msgstr ""
+"<p>...that you can switch between a listing of all accounts or\n"
+"an icon view of all asset and liability accounts with the tabs\n"
+"in the accounts view?\n"
+
+#: _tips.cpp:49
+msgid "<p>...that the KMyMoney development team wishes you a nice day?\n"
+msgstr "<p>...that the KMyMoney development team wishes you a nice day?\n"
+
+#: _tips.cpp:54
+msgid ""
+"<p>...you can use your own external filter program to convert any\n"
+"import format to QIF on the fly? See the QIF profile editor for\n"
+"more details.\n"
+msgstr ""
+"<p>...you can use your own external filter program to convert any\n"
+"import format to QIF on the fly? See the QIF profile editor for\n"
+"more details.\n"
+
+#: _tips.cpp:61
+msgid ""
+"<p>...that you can create a scheduled transaction from an existing\n"
+"one by selecting the context menu on a transaction in the ledger\n"
+"or the \"More...\"-menu in the transaction form?\n"
+msgstr ""
+"<p>...that you can create a scheduled transaction from an existing\n"
+"one by selecting the context menu on a transaction in the ledger\n"
+"or the \"More...\"-menu in the transaction form?\n"
+
+#: _tips.cpp:68
+msgid ""
+"<p>...that you can switch to the payee of a transaction\n"
+"by selecting the context menu on a transaction in the ledger\n"
+"or in the transaction menu?\n"
+msgstr ""
+"<p>...that you can switch to the payee of a transaction\n"
+"by selecting the context menu on a transaction in the ledger\n"
+"or in the transaction menu?\n"
+
+#: _tips.cpp:75
+msgid ""
+"<p>...that you can modify the colors and fonts used for the ledgers\n"
+"via <i>Configure/Register/...</i>?\n"
+msgstr ""
+"<p>...that you can modify the colours and fonts used for the ledgers\n"
+"via <i>Configure/Register/...</i>?\n"
+
+#: _tips.cpp:81
+msgid ""
+"<p>...that you can hide transactions prior to a specific date?\n"
+"The date can be modified via <i>Configure/Register/Filter</i>.\n"
+msgstr ""
+"<p>...that you can hide transactions prior to a specific date?\n"
+"The date can be modified via <i>Configure/Register/Filter</i>.\n"
+
+#: _tips.cpp:87
+msgid ""
+"<p>...that you can customize the \"Home-Page\"\n"
+"via <i>Configure/Home</i>?\n"
+msgstr ""
+"<p>...that you can customise the \"Home-Page\"\n"
+"via <i>Configure/Home</i>?\n"
+
+#: _tips.cpp:93
+msgid ""
+"<p>...that you can enter new transactions even while reconciling\n"
+"an account? You can also make the transaction form visible.\n"
+msgstr ""
+"<p>...that you can enter new transactions even while reconciling\n"
+"an account? You can also make the transaction form visible.\n"
+
+#: _tips.cpp:99
+msgid ""
+"<p>...that you can actively support the KMyMoney development team in\n"
+"cases that heavily depend on your data? You can save your data in an\n"
+"anonymized way for this support.<p>\n"
+"Just open your data file and immediately\n"
+"select <b>File/Save as...</b>. In the <b>Save As...</b> dialog\n"
+"select the filter <b>Anonymous Files</b> and make sure your file gets\n"
+"the extensions <b>.anon.xml</b>. <p>\n"
+"To verify, how the data looks like you are about to send away, you can open\n"
+"this file in KMyMoney and see how the developers see your data.\n"
+msgstr ""
+"<p>...that you can actively support the KMyMoney development team in\n"
+"cases that heavily depend on your data? You can save your data in an\n"
+"anonymised way for this support.<p>\n"
+"Just open your data file and immediately\n"
+"select <b>File/Save as...</b>. In the <b>Save As...</b> dialog\n"
+"select the filter <b>Anonymous Files</b> and make sure your file gets\n"
+"the extensions <b>.anon.xml</b>. <p>\n"
+"To verify, how the data looks like you are about to send away, you can open\n"
+"this file in KMyMoney and see how the developers see your data.\n"
+
+#: _tips.cpp:112
+msgid ""
+"<p>... that you can import your bank statements even without a network \n"
+"connection? Just select the file (OFX or QIF) from the File->Import menu.</p>\n"
+"<p>Provided by Jose Jorge</p>\n"
+msgstr ""
+"<p>... that you can import your bank statements even without a network \n"
+"connection? Just select the file (OFX or QIF) from the File->Import menu.</p>\n"
+"<p>Provided by Jose Jorge</p>\n"
+
+#: reports/listtable.cpp:159
+#: reports/listtable.cpp:163
+#: reports/pivottable.cpp:1564
+msgid ""
+"_: Report date range\n"
+"%1 through %2"
+msgstr "%1 through %2"
+
+#: reports/listtable.cpp:171
+#: reports/pivottable.cpp:1571
+#, c-format
+msgid "All currencies converted to %1"
+msgstr "All currencies converted to %1"
+
+#: reports/listtable.cpp:172
+#: reports/pivottable.cpp:1328
+msgid "All currencies converted to %1\n"
+msgstr "All currencies converted to %1\n"
+
+#: reports/listtable.cpp:176
+#: reports/pivottable.cpp:1573
+msgid "All values shown in %1 unless otherwise noted"
+msgstr "All values shown in %1 unless otherwise noted"
+
+#: reports/listtable.cpp:177
+#: reports/pivottable.cpp:1330
+msgid "All values shown in %1 unless otherwise noted\n"
+msgstr "All values shown in %1 unless otherwise noted\n"
+
+#: dialogs/kequitypriceupdatedlg.cpp:73
+#: dialogs/kfindtransactiondlg.cpp:188
+#: dialogs/rc.cpp:53
+#: dialogs/rc.cpp:63
+#: dialogs/rc.cpp:208
+#: dialogs/rc.cpp:805
+#: dialogs/settings/rc.cpp:111
+#: dialogs/transactioneditor.cpp:844
+#: reports/listtable.cpp:196
+#: views/khomeview.cpp:412
+#: views/khomeview.cpp:485
+#: views/khomeview.cpp:519
+#: views/rc.cpp:61
+#: widgets/kmymoneypriceview.cpp:128
+#: widgets/rc.cpp:36
+#: widgets/register.cpp:565
+#: widgets/transaction.cpp:1027
+#: widgets/transaction.cpp:1484
+msgid "Date"
+msgstr "Date"
+
+#: reports/listtable.cpp:198
+msgid "Num"
+msgstr "Num"
+
+#: dialogs/kfindtransactiondlg.cpp:204
+#: dialogs/kmymoneysplittable.cpp:78
+#: dialogs/kmymoneysplittable.cpp:831
+#: dialogs/rc.cpp:217
+#: dialogs/transactioneditor.cpp:831
+#: dialogs/transactioneditor.cpp:1374
+#: dialogs/transactioneditor.cpp:1382
+#: dialogs/transactioneditor.cpp:1396
+#: dialogs/transactioneditor.cpp:1449
+#: dialogs/transactioneditor.cpp:1456
+#: dialogs/transactioneditor.cpp:1504
+#: reports/listtable.cpp:200
+#: views/kcategoriesview.cpp:76
+#: views/rc.cpp:62
+#: widgets/rc.cpp:115
+#: widgets/register.cpp:62
+#: widgets/transaction.cpp:848
+#: widgets/transaction.cpp:906
+msgid "Category"
+msgstr "Category"
+
+#: dialogs/kmymoneysplittable.cpp:79
+#: dialogs/kmymoneysplittable.cpp:837
+#: reports/listtable.cpp:202
+#: widgets/rc.cpp:101
+#: widgets/transaction.cpp:1042
+#: widgets/transaction.cpp:1628
+msgid "Memo"
+msgstr "Memo"
+
+#: reports/listtable.cpp:203
+msgid "Top Category"
+msgstr "Top Category"
+
+#: reports/listtable.cpp:204
+msgid "Category Type"
+msgstr "Category Type"
+
+#: dialogs/rc.cpp:229
+#: dialogs/settings/rc.cpp:152
+#: reports/listtable.cpp:207
+#: widgets/kmymoneycombo.cpp:346
+#: widgets/rc.cpp:107
+msgid "Reconciled"
+msgstr "Reconciled"
+
+#: reports/listtable.cpp:208
+#: widgets/rc.cpp:117
+msgid "Action"
+msgstr "Action"
+
+#: dialogs/investactivities.cpp:199
+#: dialogs/investactivities.cpp:287
+#: dialogs/investactivities.cpp:424
+#: dialogs/investactivities.cpp:504
+#: dialogs/investactivities.cpp:544
+#: dialogs/investtransactioneditor.cpp:241
+#: reports/listtable.cpp:209
+#: widgets/rc.cpp:103
+#: widgets/transaction.cpp:1513
+msgid "Shares"
+msgstr "Shares"
+
+#: dialogs/investtransactioneditor.cpp:248
+#: dialogs/investtransactioneditor.cpp:1067
+#: dialogs/investtransactioneditor.cpp:1068
+#: dialogs/investtransactioneditor.cpp:1072
+#: dialogs/kequitypriceupdatedlg.cpp:72
+#: dialogs/rc.cpp:109
+#: dialogs/rc.cpp:164
+#: dialogs/rc.cpp:251
+#: dialogs/rc.cpp:756
+#: dialogs/rc.cpp:827
+#: dialogs/settings/rc.cpp:117
+#: reports/listtable.cpp:210
+#: reports/listtable.cpp:211
+#: reports/pivottable.cpp:2441
+#: views/kinvestmentview.cpp:80
+#: widgets/kmymoneypriceview.cpp:129
+#: widgets/rc.cpp:43
+#: widgets/rc.cpp:105
+#: widgets/register.cpp:573
+msgid "Price"
+msgstr "Price"
+
+#: reports/listtable.cpp:212
+msgid "Net Value"
+msgstr "Net Value"
+
+#: reports/listtable.cpp:213
+msgid "Buys"
+msgstr "Buys"
+
+#: reports/listtable.cpp:214
+msgid "Sells"
+msgstr "Sells"
+
+#: reports/listtable.cpp:215
+msgid "Dividends Reinvested"
+msgstr "Dividends reinvested"
+
+#: reports/listtable.cpp:216
+msgid "Dividends Paid Out"
+msgstr "Dividends Paid Out"
+
+#: reports/listtable.cpp:217
+msgid "Starting Balance"
+msgstr "Starting Balance"
+
+#: reports/listtable.cpp:218
+msgid "Ending Balance"
+msgstr "Ending Balance"
+
+#: reports/listtable.cpp:219
+msgid "Annualized Return"
+msgstr "Annualised return"
+
+#: reports/listtable.cpp:220
+msgid "Return On Investment"
+msgstr "Return On Investment"
+
+#: dialogs/rc.cpp:106
+#: dialogs/rc.cpp:161
+#: dialogs/rc.cpp:248
+#: dialogs/rc.cpp:505
+#: dialogs/rc.cpp:570
+#: dialogs/rc.cpp:667
+#: dialogs/rc.cpp:753
+#: reports/listtable.cpp:223
+#: widgets/register.cpp:570
+msgid "Payment"
+msgstr "Payment"
+
+#: dialogs/rc.cpp:111
+#: dialogs/rc.cpp:166
+#: dialogs/rc.cpp:253
+#: dialogs/rc.cpp:709
+#: dialogs/rc.cpp:758
+#: reports/listtable.cpp:224
+#: widgets/rc.cpp:119
+#: widgets/register.cpp:575
+msgid "Balance"
+msgstr "Balance"
+
+#: reports/listtable.cpp:227
+#: views/kscheduledview.cpp:74
+msgid "Next Due Date"
+msgstr "Next Due Date"
+
+#: reports/listtable.cpp:229
+#: views/kscheduledview.cpp:76
+msgid "Payment Method"
+msgstr "Payment Method"
+
+#: dialogs/rc.cpp:803
+#: reports/listtable.cpp:231
+#: widgets/rc.cpp:2
+msgid "Description"
+msgstr "Description"
+
+#: reports/listtable.cpp:232
+msgid "Opening Date"
+msgstr "Opening Date"
+
+#: reports/listtable.cpp:234
+msgid "Balance Early Warning"
+msgstr "Balance Early Warning"
+
+#: reports/listtable.cpp:235
+msgid "Balance Max Limit"
+msgstr "Balance Max Limit"
+
+#: reports/listtable.cpp:236
+msgid "Credit Early Warning"
+msgstr "Credit Early Warning"
+
+#: reports/listtable.cpp:237
+msgid "Credit Max Limit"
+msgstr "Credit Max Limit"
+
+#: dialogs/rc.cpp:376
+#: reports/listtable.cpp:238
+msgid "Tax"
+msgstr "Tax"
+
+#: reports/listtable.cpp:239
+msgid "Preferred"
+msgstr "Preferred"
+
+#: reports/listtable.cpp:240
+msgid "Loan Amount"
+msgstr "Loan Amount"
+
+#: dialogs/rc.cpp:511
+#: reports/listtable.cpp:241
+msgid "Interest Rate"
+msgstr "Interest Rate"
+
+#: reports/listtable.cpp:242
+msgid "Next Interest Change"
+msgstr "Next Interest Change"
+
+#: reports/listtable.cpp:243
+msgid "Periodic Payment"
+msgstr "Periodic Payment"
+
+#: reports/listtable.cpp:244
+msgid "Final Payment"
+msgstr "Final Payment"
+
+#: reports/listtable.cpp:245
+#: views/khomeview.cpp:766
+#: views/khomeview.cpp:1265
+#: views/khomeview.cpp:1273
+msgid "Current Balance"
+msgstr "Current Balance"
+
+#: dialogs/investactivities.cpp:201
+#: dialogs/investactivities.cpp:289
+#: dialogs/investactivities.cpp:368
+#: dialogs/investactivities.cpp:426
+#: dialogs/rc.cpp:327
+#: reports/listtable.cpp:360
+#: reports/listtable.cpp:364
+#: reports/listtable.cpp:556
+#: reports/listtable.cpp:558
+#: reports/pivottable.cpp:1343
+#: reports/pivottable.cpp:1445
+#: reports/pivottable.cpp:1505
+#: reports/pivottable.cpp:1598
+#: reports/pivottable.cpp:1768
+#: reports/pivottable.cpp:1845
+#: reports/pivottable.cpp:2165
+#: reports/pivottable.cpp:2167
+#: reports/pivottable.cpp:2187
+#: reports/pivottable.cpp:2189
+#: reports/querytabletest.cpp:134
+#: reports/querytabletest.cpp:135
+#: reports/querytabletest.cpp:136
+#: reports/querytabletest.cpp:137
+#: reports/querytabletest.cpp:162
+#: reports/querytabletest.cpp:163
+#: reports/querytabletest.cpp:164
+#: reports/querytabletest.cpp:197
+#: reports/querytabletest.cpp:198
+#: reports/querytabletest.cpp:224
+#: reports/querytabletest.cpp:250
+#: reports/querytabletest.cpp:251
+#: reports/querytabletest.cpp:252
+#: reports/querytabletest.cpp:275
+#: reports/querytabletest.cpp:276
+#: reports/querytabletest.cpp:277
+#: reports/querytabletest.cpp:366
+#: reports/querytabletest.cpp:422
+#: reports/querytabletest.cpp:423
+#: views/kforecastview.cpp:568
+#: views/rc.cpp:18
+#: widgets/kmymoneyaccounttreeforecast.cpp:139
+#: widgets/transaction.cpp:1643
+msgid "Total"
+msgstr "Total"
+
+#: reports/listtable.cpp:444
+msgid "Initial Market Value"
+msgstr "Initial Market Value"
+
+#: reports/listtable.cpp:445
+msgid "Ending Market Value"
+msgstr "Ending Market Value"
+
+#: reports/listtable.cpp:448
+#: reports/querytabletest.cpp:651
+msgid "Opening Balance"
+msgstr "Opening Balance"
+
+#: reports/listtable.cpp:449
+#: reports/querytabletest.cpp:652
+#: reports/querytabletest.cpp:653
+msgid "Closing Balance"
+msgstr "Closing Balance"
+
+#: reports/listtable.cpp:490
+#: reports/listtable.cpp:491
+msgid "Calculated"
+msgstr "Calculated"
+
+#: reports/listtable.cpp:572
+#: reports/listtable.cpp:574
+#: reports/pivottable.cpp:1530
+#: reports/pivottable.cpp:1886
+#: reports/querytabletest.cpp:138
+#: reports/querytabletest.cpp:165
+#: reports/querytabletest.cpp:199
+#: reports/querytabletest.cpp:225
+#: reports/querytabletest.cpp:253
+#: reports/querytabletest.cpp:278
+#: reports/querytabletest.cpp:367
+#: reports/querytabletest.cpp:402
+#: reports/querytabletest.cpp:424
+#: reports/querytabletest.cpp:548
+#: reports/querytabletest.cpp:551
+#: reports/querytabletest.cpp:586
+msgid "Grand Total"
+msgstr "Grand Total"
+
+#: dialogs/rc.cpp:233
+#: reports/pivottable.cpp:339
+#: views/kscheduledview.cpp:174
+#: views/kscheduledview.cpp:433
+#: views/kscheduledview.cpp:449
+#: widgets/kmymoneyscheduledcalendar.cpp:48
+msgid "Transfers"
+msgstr "Transfers"
+
+#: reports/pivottable.cpp:1951
+msgid "Legend"
+msgstr "Legend"
+
+#: reports/pivottable.cpp:2411
+#: views/khomeview.cpp:1406
+#: views/khomeview.cpp:1443
+msgid "Actual"
+msgstr "Actual"
+
+#: reports/pivottable.cpp:2421
+#: views/khomeview.cpp:1409
+#: views/khomeview.cpp:1446
+msgid "Difference"
+msgstr "Difference"
+
+#: reports/pivottable.cpp:2431
+msgid "Moving Average"
+msgstr "Moving Average"
+
+#: reports/pivottable.cpp:2436
+msgid "Moving Average Price"
+msgstr "Moving Average Price"
+
+#: reports/objectinfotable.cpp:214
+#: reports/querytable.cpp:693
+#: reports/querytable.cpp:736
+#: reports/querytable.cpp:1356
+#: reports/querytable.cpp:1375
+#: views/kpayeesview.cpp:742
+#, c-format
+msgid "Transfer from %1"
+msgstr "Transfer from %1"
+
+#: reports/objectinfotable.cpp:215
+#: reports/querytable.cpp:694
+#: reports/querytable.cpp:735
+#: reports/querytable.cpp:1355
+#: reports/querytable.cpp:1374
+#: views/kpayeesview.cpp:740
+#, c-format
+msgid "Transfer to %1"
+msgstr "Transfer to %1"
+
+#: reports/querytabletest.cpp:471
+#: views/kreportsview.cpp:1144
+msgid "Investment Transactions"
+msgstr "Investment Transactions"
+
+#: reports/querytabletest.cpp:472
+#: reports/querytabletest.cpp:564
+msgid "Test Report"
+msgstr "Test Report"
+
+#: reports/querytabletest.cpp:547
+#: reports/querytabletest.cpp:550
+msgid "Total Stock 1"
+msgstr "Total Stock 1"
+
+#: reports/querytabletest.cpp:563
+#: views/kreportsview.cpp:1174
+msgid "Investment Performance by Account"
+msgstr "Investment Performance by Account"
+
+#: reports/querytable.cpp:431
+#: reports/querytable.cpp:1200
+#, c-format
+msgid "Month of %1"
+msgstr "Month of %1"
+
+#: reports/querytable.cpp:432
+#: reports/querytable.cpp:1201
+#, c-format
+msgid "Week of %1"
+msgstr "Week of %1"
+
+#: reports/querytable.cpp:576
+#: reports/querytable.cpp:739
+#: reports/querytable.cpp:858
+#: reports/querytable.cpp:1325
+#: reports/querytable.cpp:1481
+msgid "No Institution"
+msgstr "No Institution"
+
+#: reports/querytable.cpp:580
+#: reports/querytable.cpp:1329
+msgid "[Empty Payee]"
+msgstr "[Empty Payee]"
+
+#: reports/querytable.cpp:615
+#: reports/querytable.cpp:1361
+msgid "[Split Transaction]"
+msgstr "[Split Transaction]"
+
+#: reports/querytable.cpp:616
+#: reports/querytable.cpp:617
+msgid "Split"
+msgstr "Split"
+
+#: main.cpp:51
+msgid ""
+"\n"
+"KMyMoney, the Personal Finance Manager for KDE.\n"
+"\n"
+"Please consider contributing to this project with code and/or suggestions."
+msgstr ""
+"\n"
+"KMyMoney, the personal finances application for KDE.\n"
+"\n"
+"Please consider contributing to this project with code and or suggestions."
+
+#: main.cpp:55
+msgid "language to be used"
+msgstr "English (GB)"
+
+#: main.cpp:56
+msgid "don't open last used file"
+msgstr "don't open last used file"
+
+#: main.cpp:57
+msgid "enable performance timers"
+msgstr "enable performance timers"
+
+#: main.cpp:61
+msgid "turn on program traces"
+msgstr "turn on program traces"
+
+#: main.cpp:62
+msgid "dump the names of all defined KAction objects to stdout and quit"
+msgstr "dump the names of all defined KAction objects to stdout and quit"
+
+#: main.cpp:66
+msgid "file to open"
+msgstr "file to open"
+
+#: main.cpp:92
+msgid "Memory leakage detection"
+msgstr "Memory leakage detection"
+
+#: main.cpp:96
+msgid "Compiled with the following settings:\n"
+msgstr "Compiled with the following settings:\n"
+
+#: dialogs/kmymoneysplittable.cpp:650
+#: dialogs/ksplittransactiondlg.cpp:277
+#: main.cpp:98
+msgid "KMyMoney"
+msgstr "KMyMoney"
+
+#: main.cpp:104
+msgid "Initial idea, much initial source code, Project admin"
+msgstr "Initial idea, much initial source code, Project admin"
+
+#: main.cpp:105
+msgid "Core engine, Release Manager, Project admin"
+msgstr "Core engine, Release Manager, Project admin"
+
+#: main.cpp:106
+msgid "Reporting logic, OFX Import"
+msgstr "Reporting logic, OFX Import"
+
+#: main.cpp:107
+msgid "Database backend, maintainer stable branch"
+msgstr "Database backend, maintainer stable branch"
+
+#: main.cpp:108
+msgid "Forecast, Reports"
+msgstr "Forecast, Reports"
+
+#: main.cpp:109
+msgid "Project Admin"
+msgstr "Project Admin"
+
+#: main.cpp:110
+msgid "Developer"
+msgstr "Developer"
+
+#: main.cpp:111
+msgid "Database backend"
+msgstr "Database backend"
+
+#: main.cpp:113
+msgid "Initial investment support"
+msgstr "Initial investment support"
+
+#: main.cpp:114
+msgid "Developer & Artist"
+msgstr "Developer & Artist"
+
+#: main.cpp:115
+msgid "Icons & splash screen"
+msgstr "Icons & splash screen"
+
+#: main.cpp:116
+#: main.cpp:117
+msgid "Patches"
+msgstr "Patches"
+
+#: main.cpp:136
+msgid "The monetary decimal symbol is not correctly set in the KDE Control Center's Country/Region & Language settings. Please set it to a reasonable value and start KMyMoney again."
+msgstr "The monetary decimal symbol is not correctly set in the KDE Control Center's Country/Region & Language settings. Please set it to a reasonable value and start KMyMoney again."
+
+#: main.cpp:136
+msgid "Invalid settings"
+msgstr "Invalid settings"
+
+#: main.cpp:228
+msgid "Another instance of KMyMoney is already running. Do you want to quit?"
+msgstr "Another instance of KMyMoney is already running. Do you want to quit?"
+
+#: main.cpp:289
+msgid "Uncaught error. Please report the details to the developers"
+msgstr "Uncaught error. Please report the details to the developers"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr ""
+"Benjamin Carlyle\n"
+"Ian Neal"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr ""
+"benjamincarlyle@optusnet.com.au\n"
+"ianrsn70@users.sourceforge.net"
+
+#: dialogs/kcsvprogressdlg.cpp:62
+#: dialogs/kimportdlg.cpp:66
+#: rc.cpp:1
+msgid "&Import"
+msgstr "&Import"
+
+#: rc.cpp:2
+msgid "E&xport"
+msgstr "E&xport"
+
+#: rc.cpp:3
+msgid "&Institution"
+msgstr "&Institution"
+
+#: rc.cpp:4
+msgid "&Account"
+msgstr "&Account"
+
+#: rc.cpp:5
+msgid "&Category"
+msgstr "&Category"
+
+#: rc.cpp:6
+msgid "&Transaction"
+msgstr "&Transaction"
+
+#: rc.cpp:7
+#: rc.cpp:20
+msgid "Mark transaction as..."
+msgstr "Mark transaction as..."
+
+#: rc.cpp:8
+#: rc.cpp:21
+msgid "Mark transaction"
+msgstr "Mark transaction"
+
+#: rc.cpp:9
+msgid "T&ools"
+msgstr "T&ools"
+
+#: rc.cpp:10
+msgid "Account options"
+msgstr "Account options"
+
+#: rc.cpp:11
+msgid "Category options"
+msgstr "Category options"
+
+#: rc.cpp:12
+msgid "Institution options"
+msgstr "Institution options"
+
+#: rc.cpp:13
+msgid "Payee options"
+msgstr "Payee options"
+
+#: rc.cpp:14
+msgid "Budget options"
+msgstr "Budget options"
+
+#: rc.cpp:15
+msgid "Investment options"
+msgstr "Investment options"
+
+#: rc.cpp:16
+msgid "Scheduled transactions options"
+msgstr "Scheduled transactions options"
+
+#: rc.cpp:17
+msgid "Transaction options"
+msgstr "Transaction options"
+
+#: rc.cpp:18
+msgid "Move transaction to..."
+msgstr "Move transaction to..."
+
+#: rc.cpp:19
+msgid "Select account"
+msgstr "Select account"
+
+#: rc.cpp:22
+msgid "Currency options"
+msgstr "Currency options"
+
+#: rc.cpp:24
+msgid "Always show a No. field in transaction form"
+msgstr "Always show a No. field in transaction form"
+
+#: rc.cpp:25
+msgid "Auto fill with previous transaction data"
+msgstr "Auto fill with previous transaction data"
+
+#: rc.cpp:26
+msgid "Treat two transactions as identical, if amount differs less than"
+msgstr "Treat two transactions as identical, if amount differs less than"
+
+#: dialogs/settings/rc.cpp:144
+#: rc.cpp:27
+msgid "Auto increment check number"
+msgstr "Auto increment cheque number"
+
+#: rc.cpp:28
+msgid "Autosave file periodically"
+msgstr "Autosave file periodically"
+
+#: rc.cpp:29
+msgid "Autosave interval in minutes"
+msgstr "Autosave interval in minutes"
+
+#: rc.cpp:30
+msgid "Check schedules upon startup"
+msgstr "Check schedules upon startup"
+
+#: dialogs/settings/rc.cpp:171
+#: rc.cpp:31
+msgid "Enter transactions this number of days in advance"
+msgstr "Enter transactions this number of days in advance"
+
+#: dialogs/settings/rc.cpp:172
+#: rc.cpp:32
+msgid "Number of days to preview schedules in ledger"
+msgstr "Number of days to preview schedules in ledger"
+
+#: dialogs/settings/rc.cpp:143
+#: rc.cpp:33
+msgid "Insert transaction type into No. field for new transactions"
+msgstr "Insert transaction type into No. field for new transactions"
+
+#: dialogs/settings/rc.cpp:145
+#: rc.cpp:34
+msgid "Keep changes when selecting a different transaction/split"
+msgstr "Keep changes when selecting a different transaction/split"
+
+#: rc.cpp:35
+msgid "Using the Enter key moves between the fields"
+msgstr "Using the Enter key moves between the fields"
+
+#: dialogs/settings/rc.cpp:130
+#: rc.cpp:36
+msgid "Use the ledger lens"
+msgstr "Use the ledger lens"
+
+#: rc.cpp:37
+msgid "Price Precision"
+msgstr "Price Precision"
+
+#: dialogs/rc.cpp:65
+#: rc.cpp:38
+msgid "Update price history"
+msgstr "Update price history"
+
+#: dialogs/settings/rc.cpp:132
+#: rc.cpp:39
+msgid "Show transaction form"
+msgstr "Show transaction form"
+
+#: rc.cpp:40
+msgid "Start with last selected view or homepage"
+msgstr "Start with last selected view or homepage"
+
+#: rc.cpp:41
+msgid "Use GPG to encrypt data file"
+msgstr "Use GPG to encrypt data file"
+
+#: rc.cpp:42
+msgid "Also encrypt against recover key"
+msgstr "Also encrypt against recover key"
+
+#: rc.cpp:43
+msgid "GPG User ID (deprecated)"
+msgstr "GPG User ID (deprecated)"
+
+#: rc.cpp:44
+msgid "GPG User ID"
+msgstr "GPG User ID"
+
+#: rc.cpp:45
+msgid "Run in expert (accountant) mode"
+msgstr "Run in expert (accountant) mode"
+
+#: rc.cpp:46
+msgid "Show splash screen during startup"
+msgstr "Show splash screen during startup"
+
+#: rc.cpp:47
+msgid "Synchronize account in ledger and investment view"
+msgstr "Synchronise account in ledger and investment view"
+
+#: rc.cpp:48
+msgid "Icon size for view selection"
+msgstr "Icon size for view selection"
+
+#: rc.cpp:49
+msgid "list of hidden views"
+msgstr "list of hidden views"
+
+#: rc.cpp:50
+msgid "Firsttime switch to start new user wizard"
+msgstr "First time switch to start new user wizard"
+
+#: rc.cpp:51
+msgid "Show title bar on each view"
+msgstr "Show title bar on each view"
+
+#: rc.cpp:52
+msgid "Start string matches for e.g. payees at start of string"
+msgstr "Start string matches for e.g. payees at start of string"
+
+#: rc.cpp:53
+msgid "Order of items on homepage"
+msgstr "Order of items on home page"
+
+#: rc.cpp:54
+msgid "Percentage of default font size used for home view HTML page"
+msgstr "Percentage of default font size used for home view HTML page"
+
+#: rc.cpp:55
+msgid "Remember (manually adjusted) font size in home view on program end."
+msgstr "Remember (manually adjusted) font size in home view on program end."
+
+#: rc.cpp:56
+msgid "Show account limit information on the Homepage"
+msgstr "Show account limit information on the Home page"
+
+#: rc.cpp:58
+msgid "Hide closed accounts"
+msgstr "Hide closed accounts"
+
+#: rc.cpp:59
+msgid "Hide finished schedules"
+msgstr "Hide finished schedules"
+
+#: rc.cpp:61
+msgid "Show all register entries in full detail"
+msgstr "Show all register entries in full detail"
+
+#: dialogs/settings/rc.cpp:129
+#: rc.cpp:62
+msgid "Show a grid in the register"
+msgstr "Show a grid in the register"
+
+#: rc.cpp:63
+msgid "Show fancy group markers"
+msgstr "Show fancy group markers"
+
+#: rc.cpp:64
+msgid "Show fancy markers for previous and current fiscal year"
+msgstr "Show fancy markers for previous and current fiscal year"
+
+#: rc.cpp:65
+msgid "Starting month of the fiscal year"
+msgstr "Starting month of the fiscal year"
+
+#: rc.cpp:66
+msgid "Starting day of the fiscal year"
+msgstr "Starting day of the fiscal year"
+
+#: rc.cpp:67
+msgid "Start date"
+msgstr "Start date"
+
+#: dialogs/settings/rc.cpp:9
+#: rc.cpp:68
+msgid "Use system colors"
+msgstr "Use system colours"
+
+#: rc.cpp:69
+msgid "List color"
+msgstr "List colour"
+
+#: rc.cpp:70
+msgid "List background color"
+msgstr "List background colour"
+
+#: rc.cpp:71
+msgid "List grid color"
+msgstr "List grid colour"
+
+#: rc.cpp:72
+msgid "Background color for imported transactions"
+msgstr "Background colour for imported transactions"
+
+#: rc.cpp:73
+msgid "Background color for matched transactions"
+msgstr "Background colour for matched transactions"
+
+#: rc.cpp:74
+msgid "List color for erronous transactions"
+msgstr "List colour for erroneous transactions"
+
+#: rc.cpp:75
+msgid "List color for missing conversion rate"
+msgstr "List colour for missing conversion rate"
+
+#: rc.cpp:76
+msgid "List color for negative values"
+msgstr "List colour for negative values"
+
+#: rc.cpp:77
+msgid "Background color for group marker"
+msgstr "Background colour for group marker"
+
+#: rc.cpp:78
+msgid "Background color for required fields"
+msgstr "Background colour for required fields"
+
+#: rc.cpp:79
+msgid "Use system font"
+msgstr "Use system font"
+
+#: dialogs/settings/rc.cpp:21
+#: rc.cpp:80
+msgid "Cell font"
+msgstr "Cell font"
+
+#: dialogs/settings/rc.cpp:22
+#: rc.cpp:81
+msgid "Header font"
+msgstr "Header font"
+
+#: rc.cpp:82
+#: rc.cpp:83
+msgid "Sort order of register in normal view"
+msgstr "Sort order of register in normal view"
+
+#: rc.cpp:84
+msgid "Sort order of register in search dialog"
+msgstr "Sort order of register in search dialog"
+
+#: rc.cpp:85
+msgid "Default reconciliation state for transactions entered during reconciliation"
+msgstr "Default reconciliation state for transactions entered during reconciliation"
+
+#: rc.cpp:86
+msgid "Number of days (plus/minus) to search for matching transactions"
+msgstr "Number of days (plus/minus) to search for matching transactions"
+
+#: rc.cpp:87
+msgid "During import, ask for a new payee's default category"
+msgstr "During import, ask for a new payee's default category"
+
+#: rc.cpp:88
+msgid "Method to calculate forecast"
+msgstr "Method to calculate forecast"
+
+#: rc.cpp:89
+msgid "Days to forecast"
+msgstr "Days to forecast"
+
+#: rc.cpp:90
+msgid "Days of normal account cycle"
+msgstr "Days of normal account cycle"
+
+#: rc.cpp:91
+msgid "Number of historic cycles to use in forecast"
+msgstr "Number of historic cycles to use in forecast"
+
+#: rc.cpp:92
+msgid "Day of month to start forecast"
+msgstr "Day of month to start forecast"
+
+#: rc.cpp:93
+msgid "Method to calculate history-based forecast"
+msgstr "Method to calculate history-based forecast"
+
+#: rc.cpp:94
+msgid "Skip opening date when fetching transactions"
+msgstr "Skip opening date when fetching transactions"
+
+#: rc.cpp:95
+msgid "Include future transaction when using Schedule Forecast"
+msgstr "Include future transaction when using Schedule Forecast"
+
+#: rc.cpp:96
+msgid "Include scheduled transactions when using Schedule Forecast"
+msgstr "Include scheduled transactions when using Schedule Forecast"
+
+#: rc.cpp:97
+msgid "additional names for cash account"
+msgstr "additional names for cash account"
+
+#: rc.cpp:98
+msgid "additional names for checking account"
+msgstr "additional names for current account"
+
+#: rc.cpp:99
+msgid "additional names for credit card account"
+msgstr "additional names for credit card account"
+
+#: rc.cpp:100
+msgid "additional names for asset account"
+msgstr "additional names for asset account"
+
+#: rc.cpp:101
+msgid "additional names for opening balance payee"
+msgstr "additional names for opening balance payee"
+
+#: rc.cpp:102
+msgid "additional names for invoice accounts"
+msgstr "additional names for invoice accounts"
+
+#: rc.cpp:103
+#: widgets/rc.cpp:161
+#: widgets/rc.cpp:163
+msgid "..."
+msgstr "..."
+
+#: views/kcategoriesview.cpp:276
+msgid "Profit: "
+msgstr "Profit: "
+
+#: views/kcategoriesview.cpp:278
+msgid "Loss: "
+msgstr "Loss: "
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:54
+#: dialogs/transactioneditor.cpp:605
+#: views/kpayeesview.cpp:365
+#: widgets/kmymoneyonlinequoteconfig.cpp:54
+msgid "Accepts the entered data and stores it"
+msgstr "Accepts the entered data and stores it"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:55
+#: views/kpayeesview.cpp:366
+#: widgets/kmymoneyonlinequoteconfig.cpp:55
+msgid "Use this to accept the modified data."
+msgstr "Use this to accept the modified data."
+
+#: views/kpayeesview.cpp:491
+msgid "A payee with the name '%1' already exists. It is not advisable to have multiple payees with the same identification name. Are you sure you would like to rename the payee?"
+msgstr "A payee with the name '%1' already exists. It is not advisable to have multiple payees with the same identification name. Are you sure you would like to rename the payee?"
+
+#: views/kpayeesview.cpp:518
+#: views/kpayeesview.cpp:869
+msgid "Unable to modify payee"
+msgstr "Unable to modify payee"
+
+#: views/kpayeesview.cpp:564
+msgid "Do you want to save the changes for <b>%1</b>?"
+msgstr "Do you want to save the changes for <b>%1</b>?"
+
+#: views/kbudgetview.cpp:490
+#: views/kpayeesview.cpp:565
+msgid "Save changes"
+msgstr "Save changes"
+
+#: views/kgloballedgerview.cpp:737
+#: views/kpayeesview.cpp:662
+#: views/kpayeesview.cpp:753
+#, c-format
+msgid "Balance: %1"
+msgstr "Balance: %1"
+
+#: views/kpayeesview.cpp:725
+#: views/kpayeesview.cpp:731
+#, c-format
+msgid "Amortization of %1"
+msgstr "Amortisation of %1"
+
+#: views/kpayeesview.cpp:727
+#: views/kpayeesview.cpp:733
+#, c-format
+msgid "Payment to %1"
+msgstr "Payment to %1"
+
+#: views/kpayeesview.cpp:736
+#, c-format
+msgid "Loan payment from %1"
+msgstr "Loan payment from %1"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:123
+#: dialogs/kconfirmmanualenterdlg.cpp:133
+#: views/kpayeesview.cpp:745
+#: widgets/kmymoneycategory.cpp:160
+#: widgets/kmymoneycategory.cpp:166
+#: widgets/transaction.cpp:851
+#: widgets/transaction.cpp:1397
+#: widgets/transaction.cpp:1411
+msgid ""
+"_: Split transaction (category replacement)\n"
+"Split transaction"
+msgstr "Split transaction"
+
+#: views/kreportsview.cpp:262
+msgid ""
+"There was an error creating your report: \"%1\".\n"
+"Please report this error to the developer's list: kmymoney2-developer@lists.sourceforge.net"
+msgstr ""
+"There was an error creating your report: \"%1\".\n"
+"Please report this error to the developer's list: kmymoney2-developer@lists.sourceforge.net"
+
+#: views/kreportsview.cpp:264
+msgid "Critical Error"
+msgstr "Critical Error"
+
+#: views/kreportsview.cpp:268
+msgid "Unable to generate report"
+msgstr "Unable to generate report"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:125
+#: views/kreportsview.cpp:286
+#: views/rc.cpp:53
+#: widgets/rc.cpp:146
+msgid "Chart"
+msgstr "Chart"
+
+#: views/kreportsview.cpp:287
+#: widgets/rc.cpp:147
+msgid "Show the chart version of this report"
+msgstr "Show the chart version of this report"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:112
+#: views/khomeview.cpp:900
+#: views/kreportsview.cpp:294
+#: views/kreportsview.cpp:328
+msgid "Report"
+msgstr "Report"
+
+#: views/kreportsview.cpp:295
+msgid "Show the report version of this chart"
+msgstr "Show the report version of this chart"
+
+#: views/kmymoneyview.cpp:236
+#: views/kreportsview.cpp:314
+#: views/kreportsview.cpp:326
+msgid "Reports"
+msgstr "Reports"
+
+#: views/khomeview.cpp:902
+#: views/kreportsview.cpp:329
+#: widgets/rc.cpp:56
+msgid "Comment"
+msgstr "Comment"
+
+#: views/kreportsview.cpp:432
+msgid "Charts"
+msgstr "Charts"
+
+#: views/khomeview.cpp:897
+#: views/kreportsview.cpp:470
+msgid "Favorite Reports"
+msgstr "Favourite Reports"
+
+#: views/kreportsview.cpp:486
+msgid "Old Customized Reports"
+msgstr "Old Customised Reports"
+
+#: views/kreportsview.cpp:579
+msgid "Include Stylesheet"
+msgstr "Include Stylesheet"
+
+#: views/kreportsview.cpp:585
+msgid ""
+"_: CSV (Filefilter)\n"
+"CSV files"
+msgstr "CSV files"
+
+#: views/kreportsview.cpp:586
+msgid ""
+"_: HTML (Filefilter)\n"
+"HTML files"
+msgstr "HTML files"
+
+#: views/kreportsview.cpp:591
+msgid "Export as"
+msgstr "Export as"
+
+#: views/kreportsview.cpp:619
+#: views/kreportsview.cpp:660
+#: views/kreportsview.cpp:942
+#: views/kreportsview.cpp:950
+#: views/kreportsview.cpp:958
+#: views/kreportsview.cpp:968
+#: views/kreportsview.cpp:980
+#: views/kreportsview.cpp:998
+#: views/kreportsview.cpp:1006
+#: views/kreportsview.cpp:1014
+#: views/kreportsview.cpp:1022
+#: views/kreportsview.cpp:1034
+#: views/kreportsview.cpp:1046
+#: views/kreportsview.cpp:1056
+#: views/kreportsview.cpp:1070
+#: views/kreportsview.cpp:1079
+#: views/kreportsview.cpp:1087
+#: views/kreportsview.cpp:1095
+#: views/kreportsview.cpp:1103
+#: views/kreportsview.cpp:1111
+#: views/kreportsview.cpp:1120
+#: views/kreportsview.cpp:1132
+#: views/kreportsview.cpp:1145
+#: views/kreportsview.cpp:1155
+#: views/kreportsview.cpp:1165
+#: views/kreportsview.cpp:1175
+#: views/kreportsview.cpp:1185
+#: views/kreportsview.cpp:1195
+#: views/kreportsview.cpp:1208
+#: views/kreportsview.cpp:1222
+#: views/kreportsview.cpp:1239
+#: views/kreportsview.cpp:1257
+#: views/kreportsview.cpp:1273
+#: views/kreportsview.cpp:1295
+#: views/kreportsview.cpp:1304
+#: views/kreportsview.cpp:1313
+#: views/kreportsview.cpp:1322
+#: views/kreportsview.cpp:1336
+#: views/kreportsview.cpp:1347
+#: views/kreportsview.cpp:1362
+#: views/kreportsview.cpp:1372
+#: views/kreportsview.cpp:1383
+#: views/kreportsview.cpp:1393
+#: views/kreportsview.cpp:1404
+#: views/kreportsview.cpp:1423
+#: views/kreportsview.cpp:1432
+#: views/kreportsview.cpp:1444
+#: views/kreportsview.cpp:1463
+#: views/kreportsview.cpp:1472
+#: views/kreportsview.cpp:1481
+#: views/kreportsview.cpp:1490
+msgid "Default Report"
+msgstr "Default Report"
+
+#: views/kreportsview.cpp:621
+#: views/kreportsview.cpp:661
+msgid "Custom Report"
+msgstr "Custom Report"
+
+#: views/kreportsview.cpp:622
+msgid " (Customized)"
+msgstr " (Customised)"
+
+#: views/kreportsview.cpp:690
+msgid "Are you sure you want to delete report <b>%1</b>? There is no way to recover it!"
+msgstr "Are you sure you want to delete report <b>%1</b>? There is no way to recover it!"
+
+#: views/kreportsview.cpp:690
+#: views/kreportsview.cpp:702
+msgid "Delete Report?"
+msgstr "Delete Report?"
+
+#: views/kreportsview.cpp:702
+msgid "Sorry, <b>%1</b> is a default report. You may not delete it."
+msgstr "Sorry, <b>%1</b> is a default report. You may not delete it."
+
+#: views/kreportsview.cpp:882
+msgid "&Open"
+msgstr "&Open"
+
+#: views/kreportsview.cpp:884
+msgid "&New report"
+msgstr "&New report"
+
+#: views/kreportsview.cpp:934
+msgid "Income and Expenses"
+msgstr "Income and Expenses"
+
+#: views/kreportsview.cpp:941
+msgid "Income and Expenses This Month"
+msgstr "Income and Expenses This Month"
+
+#: views/kreportsview.cpp:949
+msgid "Income and Expenses This Year"
+msgstr "Income and Expenses This Year"
+
+#: views/kreportsview.cpp:957
+msgid "Income and Expenses By Year"
+msgstr "Income and Expenses By Year"
+
+#: views/kreportsview.cpp:967
+msgid "Income and Expenses Graph"
+msgstr "Income and Expenses Graph"
+
+#: views/kreportsview.cpp:979
+msgid "Income and Expenses Pie Chart"
+msgstr "Income and Expenses Pie Chart"
+
+#: views/khomeview.cpp:1361
+#: views/kreportsview.cpp:990
+msgid "Net Worth"
+msgstr "Net Worth"
+
+#: views/kreportsview.cpp:997
+msgid "Net Worth By Month"
+msgstr "Net Worth By Month"
+
+#: views/kreportsview.cpp:1005
+msgid "Net Worth Today"
+msgstr "Net Worth Today"
+
+#: views/kreportsview.cpp:1013
+msgid "Net Worth By Year"
+msgstr "Net Worth By Year"
+
+#: views/kreportsview.cpp:1021
+msgid "7-day Cash Flow Forecast"
+msgstr "7-day Cash Flow Forecast"
+
+#: views/kreportsview.cpp:1033
+msgid "Net Worth Graph"
+msgstr "Net Worth Graph"
+
+#: views/kreportsview.cpp:1045
+msgid "Account Balances by Institution"
+msgstr "Account Balances by Institution"
+
+#: views/kreportsview.cpp:1055
+msgid "Account Balances by Type"
+msgstr "Account Balances by Type"
+
+#: views/kreportsview.cpp:1069
+msgid "Transactions by Account"
+msgstr "Transactions by Account"
+
+#: views/kreportsview.cpp:1078
+msgid "Transactions by Category"
+msgstr "Transactions by Category"
+
+#: views/kreportsview.cpp:1086
+msgid "Transactions by Payee"
+msgstr "Transactions by Payee"
+
+#: views/kreportsview.cpp:1094
+msgid "Transactions by Month"
+msgstr "Transactions by Month"
+
+#: views/kreportsview.cpp:1102
+msgid "Transactions by Week"
+msgstr "Transactions by Week"
+
+#: views/kreportsview.cpp:1110
+msgid "Loan Transactions"
+msgstr "Loan Transactions"
+
+#: views/kreportsview.cpp:1119
+msgid "Transactions by Reconciliation Status"
+msgstr "Transactions by Reconciliation Status"
+
+#: views/kreportsview.cpp:1125
+msgid "Cash Flow"
+msgstr "Cash Flow"
+
+#: views/kreportsview.cpp:1131
+msgid "Cash Flow Transactions This Month"
+msgstr "Cash Flow Transactions This Month"
+
+#: views/kmymoneyview.cpp:226
+#: views/kmymoneyview.cpp:228
+#: views/kreportsview.cpp:1137
+msgid "Investments"
+msgstr "Investments"
+
+#: views/kreportsview.cpp:1154
+msgid "Investment Holdings by Account"
+msgstr "Investment Holdings by Account"
+
+#: views/kreportsview.cpp:1164
+msgid "Investment Holdings by Type"
+msgstr "Investment Holdings by Type"
+
+#: views/kreportsview.cpp:1184
+msgid "Investment Performance by Type"
+msgstr "Investment Performance by Type"
+
+#: views/kreportsview.cpp:1194
+msgid "Investment Holdings Pie"
+msgstr "Investment Holdings Pie"
+
+#: views/kreportsview.cpp:1207
+msgid "Investment Worth Graph"
+msgstr "Investment Worth Graph"
+
+#: views/kreportsview.cpp:1221
+msgid "Investment Price Graph"
+msgstr "Investment Price Graph"
+
+#: views/kreportsview.cpp:1238
+msgid "Investment Moving Average Price Graph"
+msgstr "Investment Moving Average Price Graph"
+
+#: views/kreportsview.cpp:1256
+msgid "Investment Moving Average"
+msgstr "Investment Moving Average"
+
+#: views/kreportsview.cpp:1272
+msgid "Investment Moving Average vs Actual"
+msgstr "Investment Moving Average vs Actual"
+
+#: views/kreportsview.cpp:1287
+msgid "Taxes"
+msgstr "Taxes"
+
+#: views/kreportsview.cpp:1294
+msgid "Tax Transactions by Category"
+msgstr "Tax Transactions by Category"
+
+#: views/kreportsview.cpp:1303
+msgid "Tax Transactions by Payee"
+msgstr "Tax Transactions by Payee"
+
+#: views/kreportsview.cpp:1312
+msgid "Tax Transactions by Category Last Fiscal Year"
+msgstr "Tax Transactions by Category Last Fiscal Year"
+
+#: views/kreportsview.cpp:1321
+msgid "Tax Transactions by Payee Last Fiscal Year"
+msgstr "Tax Transactions by Payee Last Fiscal Year"
+
+#: views/kreportsview.cpp:1328
+msgid "Budgeting"
+msgstr "Budgeting"
+
+#: views/kreportsview.cpp:1335
+msgid "Budgeted vs. Actual This Year"
+msgstr "Budgeted vs. Actual This Year"
+
+#: views/kreportsview.cpp:1346
+msgid "Budgeted vs. Actual This Year (YTM)"
+msgstr "Budgeted vs. Actual This Year (YTM)"
+
+#: views/khomeview.cpp:1383
+#: views/kreportsview.cpp:1361
+msgid "Monthly Budgeted vs. Actual"
+msgstr "Monthly Budgeted vs. Actual"
+
+#: views/kreportsview.cpp:1371
+msgid "Yearly Budgeted vs. Actual"
+msgstr "Yearly Budgeted vs. Actual"
+
+#: views/kreportsview.cpp:1382
+msgid "Monthly Budget"
+msgstr "Monthly Budget"
+
+#: views/kreportsview.cpp:1392
+msgid "Yearly Budget"
+msgstr "Yearly Budget"
+
+#: views/kreportsview.cpp:1403
+msgid "Yearly Budgeted vs Actual Graph"
+msgstr "Yearly Budgeted vs. Actual Graph"
+
+#: views/kreportsview.cpp:1422
+msgid "Forecast By Month"
+msgstr "Forecast By Month"
+
+#: views/kreportsview.cpp:1431
+msgid "Forecast Next Quarter"
+msgstr "Forecast Next Quarter"
+
+#: views/kreportsview.cpp:1443
+msgid "Net Worth Forecast Graph"
+msgstr "Net Worth Forecast Graph"
+
+#: dialogs/rc.cpp:126
+#: dialogs/rc.cpp:128
+#: dialogs/rc.cpp:466
+#: views/kreportsview.cpp:1455
+msgid "General Information"
+msgstr "General Information"
+
+#: views/kreportsview.cpp:1462
+msgid "Schedule Information"
+msgstr "Schedule Information"
+
+#: views/kreportsview.cpp:1471
+msgid "Schedule Summary Information"
+msgstr "Schedule Summary Information"
+
+#: views/kreportsview.cpp:1480
+msgid "Account Information"
+msgstr "Account Information"
+
+#: views/kreportsview.cpp:1489
+msgid "Loan Information"
+msgstr "Loan Information"
+
+#: dialogs/rc.cpp:323
+#: views/kmymoneyview.cpp:148
+#: views/kmymoneyview.cpp:150
+msgid "Institutions"
+msgstr "Institutions"
+
+#: dialogs/knewaccountdlg.cpp:98
+#: views/kmymoneyview.cpp:162
+#: views/kmymoneyview.cpp:164
+#: widgets/rc.cpp:4
+#: widgets/rc.cpp:94
+msgid "Accounts"
+msgstr "Accounts"
+
+#: views/kmymoneyview.cpp:176
+msgid "Bills & Reminders"
+msgstr "Bills & Reminders"
+
+#: views/kmymoneyview.cpp:178
+msgid "Scheduled transactions"
+msgstr "Scheduled transactions"
+
+#: dialogs/knewaccountdlg.cpp:98
+#: dialogs/rc.cpp:193
+#: views/kmymoneyview.cpp:188
+#: views/kmymoneyview.cpp:190
+#: widgets/rc.cpp:91
+msgid "Categories"
+msgstr "Categories"
+
+#: dialogs/kfindtransactiondlg.cpp:212
+#: dialogs/rc.cpp:318
+#: views/kmymoneyview.cpp:199
+#: views/kmymoneyview.cpp:201
+#: widgets/rc.cpp:93
+msgid "Payees"
+msgstr "Payees"
+
+#: views/kgloballedgerview.cpp:149
+#: views/kmymoneyview.cpp:211
+msgid "Ledgers"
+msgstr "Ledgers"
+
+#: views/kmymoneyview.cpp:353
+msgid "Creating transactions can only be performed in the ledger view"
+msgstr "Creating transactions can only be performed in the ledger view"
+
+#: views/kmymoneyview.cpp:367
+msgid "Modifying transactions can only be performed in the ledger view"
+msgstr "Modifying transactions can only be performed in the ledger view"
+
+#: views/kmymoneyview.cpp:382
+msgid "Duplicating transactions can only be performed in the ledger view"
+msgstr "Duplicating transactions can only be performed in the ledger view"
+
+#: views/kmymoneyview.cpp:394
+msgid "Edit the current selected transactions"
+msgstr "Edit the current selected transactions"
+
+#: views/kmymoneyview.cpp:602
+msgid "<b>%1</b> is not a KMyMoney file."
+msgstr "<b>%1</b> is not a KMyMoney file."
+
+#: views/kmymoneyview.cpp:643
+msgid "GPG is not available for decryption of file <b>%1</b>"
+msgstr "GPG is not available for decryption of file <b>%1</b>"
+
+#: views/kmymoneyview.cpp:721
+msgid "File <b>%1</b> contains the old binary format used by KMyMoney. Please use an older version of KMyMoney (0.8.x) that still supports this format to convert it to the new XML based format."
+msgstr "File <b>%1</b> contains the old binary format used by KMyMoney. Please use an older version of KMyMoney (0.8.x) that still supports this format to convert it to the new XML based format."
+
+#: views/kmymoneyview.cpp:723
+msgid "File <b>%1</b> contains an unknown file format!"
+msgstr "File <b>%1</b> contains an unknown file format!"
+
+#: views/kmymoneyview.cpp:728
+msgid "Cannot read from file <b>%1</b>!"
+msgstr "Cannot read from file <b>%1</b>!"
+
+#: views/kmymoneyview.cpp:732
+msgid "Cannot load file <b>%1</b>. Reason: %2"
+msgstr "Cannot load file <b>%1</b>. Reason: %2"
+
+#: views/kmymoneyview.cpp:742
+#: views/kmymoneyview.cpp:748
+msgid "File <b>%1</b> not found!"
+msgstr "File <b>%1</b> not found!"
+
+#: views/kmymoneyview.cpp:812
+msgid "Can't open database %1\n"
+msgstr "Can't open database %1\n"
+
+#: views/kmymoneyview.cpp:844
+msgid "An unrecoverable error occurred while reading the database"
+msgstr "An unrecoverable error occurred while reading the database"
+
+#: views/kmymoneyview.cpp:846
+#: views/kmymoneyview.cpp:1208
+msgid "Database malfunction"
+msgstr "Database malfunction"
+
+#: views/kmymoneyview.cpp:938
+msgid "Unknown fix level in input file"
+msgstr "Unknown fix level in input file"
+
+#: views/kmymoneyview.cpp:984
+msgid "GPG does not seem to be installed on your system. Please make sure, that GPG can be found using the standard search path. This time, encryption is disabled."
+msgstr "GPG does not seem to be installed on your system. Please make sure, that GPG can be found using the standard search path. This time, encryption is disabled."
+
+#: views/kmymoneyview.cpp:984
+msgid "GPG not found"
+msgstr "GPG not found"
+
+#: views/kmymoneyview.cpp:991
+msgid "You have selected to encrypt your data also with the KMyMoney recover key, but the key with id</p><p><center><b>%1</b></center></p>has not been found in your keyring at this time. Please make sure to import this key into your keyring. You can find it on the <a href=\"http://kmymoney2.sourceforge.net/\">KMyMoney web-site</a>. This time your data will not be encrypted with the KMyMoney recover key."
+msgstr "You have selected to encrypt your data also with the KMyMoney recover key, but the key with id</p><p><center><b>%1</b></center></p>has not been found in your keyring at this time. Please make sure to import this key into your keyring. You can find it on the <a href=\"http://kmymoney2.sourceforge.net/\">KMyMoney web-site</a>. This time your data will not be encrypted with the KMyMoney recover key."
+
+#: views/kmymoneyview.cpp:991
+#: views/kmymoneyview.cpp:1000
+msgid "GPG-Key not found"
+msgstr "GPG-Key not found"
+
+#: views/kmymoneyview.cpp:1000
+msgid "You have specified to encrypt your data for the user-id</p><p><center><b>%1</b>.</center></p>Unfortunately, a valid key for this user-id was not found in your keyring. Please make sure to import a valid key for this user-id. This time, encryption is disabled."
+msgstr "You have specified to encrypt your data for the user-id</p><p><center><b>%1</b>.</center></p>Unfortunately, a valid key for this user-id was not found in your keyring. Please make sure to import a valid key for this user-id. This time, encryption is disabled."
+
+#: views/kmymoneyview.cpp:1006
+msgid "You have configured to save your data in encrypted form using GPG. Please be aware, that this is a brand new feature which is yet untested. Make sure, you have the necessary understanding that you might loose all your data if you store it encrypted and cannot decrypt it later on! If unsure, answer <b>No</b>."
+msgstr "You have configured to save your data in encrypted form using GPG. Please be aware, that this is a brand new feature which is yet untested. Make sure, you have the necessary understanding that you might loose all your data if you store it encrypted and cannot decrypt it later on! If unsure, answer <b>No</b>."
+
+#: views/kmymoneyview.cpp:1008
+msgid "Store GPG encrypted"
+msgstr "Store GPG encrypted"
+
+#: views/kmymoneyview.cpp:1038
+#: views/kmymoneyview.cpp:1052
+msgid "Unable to open file '%1' for writing."
+msgstr "Unable to open file '%1' for writing"
+
+#: views/kmymoneyview.cpp:1065
+#: views/kmymoneyview.cpp:1074
+msgid "Failure while writing to '%1'"
+msgstr "Failure while writing to '%1'"
+
+#: views/kmymoneyview.cpp:1086
+#: views/kmymoneyview.cpp:1181
+msgid "Tried to access a file when it's not open"
+msgstr "Tried to access a file when it's not open"
+
+#: views/kmymoneyview.cpp:1092
+msgid "Since this version of KMyMoney only writes data files in its new format, files written with this version cannot be read by KMyMoney version 0.4. If you still want to use older versions of KMyMoney with your data files, please make sure you keep a backup-file of your finance data. If you want to abort this operation, please press Cancel now"
+msgstr "Since this version of KMyMoney only writes data files in its new format, files written with this version cannot be read by KMyMoney version 0.4. If you still want to use older versions of KMyMoney with your data files, please make sure you keep a backup-file of your finance data. If you want to abort this operation, please press Cancel now"
+
+#: views/kmymoneyview.cpp:1122
+msgid "Malformed URL '%1'"
+msgstr "Malformed URL '%1'"
+
+#: views/kmymoneyview.cpp:1192
+msgid ""
+"Database contains data which must be removed before using SaveAs.\n"
+"Do you wish to continue?"
+msgstr ""
+"Database contains data which must be removed before using Save As.\n"
+"Do you wish to continue?"
+
+#: views/kmymoneyview.cpp:1205
+msgid ""
+"An unrecoverable error occurred while writing to the database.\n"
+"It may well be corrupt."
+msgstr ""
+"An unrecoverable error occurred while writing to the database.\n"
+"It may well be corrupt."
+
+#: views/kmymoneyview.cpp:1215
+msgid ""
+"Can't open or create database %1\n"
+"Retry SaveAsDatabase and click Help for further info"
+msgstr ""
+"Can't open or create database %1\n"
+"Retry SaveAsDatabase and click Help for further info"
+
+#: views/kmymoneyview.cpp:1354
+msgid "Afghanistan Afghani"
+msgstr "Afghanistan Afghani"
+
+#: views/kmymoneyview.cpp:1355
+msgid "Albanian Lek"
+msgstr "Albanian Lek"
+
+#: views/kmymoneyview.cpp:1356
+msgid "Netherland Antillian Guilder"
+msgstr "Netherland Antillian Guilder"
+
+#: views/kmymoneyview.cpp:1357
+msgid "Algerian Dinar"
+msgstr "Algerian Dinar"
+
+#: views/kmymoneyview.cpp:1358
+msgid "Andorran Franc"
+msgstr "Andorran Franc"
+
+#: views/kmymoneyview.cpp:1359
+msgid "Andorran Peseta"
+msgstr "Andorran Peseta"
+
+#: views/kmymoneyview.cpp:1360
+msgid "Angolan New Kwanza"
+msgstr "Angolan New Kwanza"
+
+#: views/kmymoneyview.cpp:1361
+msgid "Argentine Peso"
+msgstr "Argentine Peso"
+
+#: views/kmymoneyview.cpp:1362
+msgid "Aruban Florin"
+msgstr "Aruban Florin"
+
+#: views/kmymoneyview.cpp:1363
+msgid "Australian Dollar"
+msgstr "Australian Dollar"
+
+#: views/kmymoneyview.cpp:1364
+msgid "Azerbaijani Manat"
+msgstr "Azerbaijani Manat"
+
+#: views/kmymoneyview.cpp:1365
+msgid "Bahamian Dollar"
+msgstr "Bahamian Dollar"
+
+#: views/kmymoneyview.cpp:1366
+msgid "Bahraini Dinar"
+msgstr "Bahraini Dinar"
+
+#: views/kmymoneyview.cpp:1367
+msgid "Bangladeshi Taka"
+msgstr "Bangladeshi Taka"
+
+#: views/kmymoneyview.cpp:1368
+msgid "Barbados Dollar"
+msgstr "Barbados Dollar"
+
+#: views/kmymoneyview.cpp:1369
+msgid "Belarussian Ruble"
+msgstr "Belarussian Rouble"
+
+#: views/kmymoneyview.cpp:1370
+msgid "Belize Dollar"
+msgstr "Belize Dollar"
+
+#: views/kmymoneyview.cpp:1371
+msgid "Bermudian Dollar"
+msgstr "Bermudian Dollar"
+
+#: views/kmymoneyview.cpp:1372
+msgid "Bhutan Ngultrum"
+msgstr "Bhutan Ngultrum"
+
+#: views/kmymoneyview.cpp:1373
+msgid "Bolivian Boliviano"
+msgstr "Bolivian Boliviano"
+
+#: views/kmymoneyview.cpp:1374
+msgid "Bosnian Convertible Mark"
+msgstr "Bosnian Convertible Mark"
+
+#: views/kmymoneyview.cpp:1375
+msgid "Botswana Pula"
+msgstr "Botswana Pula"
+
+#: views/kmymoneyview.cpp:1376
+msgid "Brazilian Real"
+msgstr "Brazilian Real"
+
+#: views/kmymoneyview.cpp:1377
+msgid "British Pound"
+msgstr "British Pound"
+
+#: views/kmymoneyview.cpp:1378
+msgid "Brunei Dollar"
+msgstr "Brunei Dollar"
+
+#: views/kmymoneyview.cpp:1379
+msgid "Bulgarian Lev"
+msgstr "Bulgarian Lev"
+
+#: views/kmymoneyview.cpp:1380
+msgid "Burundi Franc"
+msgstr "Burundi Franc"
+
+#: views/kmymoneyview.cpp:1381
+msgid "CFA Franc BEAC"
+msgstr "CFA Franc BEAC"
+
+#: views/kmymoneyview.cpp:1382
+msgid "CFA Franc BCEAO"
+msgstr "CFA Franc BCEAO"
+
+#: views/kmymoneyview.cpp:1383
+msgid "CFP Franc Pacifique"
+msgstr "CFP Franc Pacifique"
+
+#: views/kmymoneyview.cpp:1384
+msgid "Cambodia Riel"
+msgstr "Cambodia Riel"
+
+#: views/kmymoneyview.cpp:1385
+msgid "Canadian Dollar"
+msgstr "Canadian Dollar"
+
+#: views/kmymoneyview.cpp:1386
+msgid "Cape Verde Escudo"
+msgstr "Cape Verde Escudo"
+
+#: views/kmymoneyview.cpp:1387
+msgid "Cayman Islands Dollar"
+msgstr "Cayman Islands Dollar"
+
+#: views/kmymoneyview.cpp:1388
+msgid "Chilean Peso"
+msgstr "Chilean Peso"
+
+#: views/kmymoneyview.cpp:1389
+msgid "Chinese Yuan Renminbi"
+msgstr "Chinese Yuan Renminbi"
+
+#: views/kmymoneyview.cpp:1390
+msgid "Colombian Peso"
+msgstr "Colombian Peso"
+
+#: views/kmymoneyview.cpp:1391
+msgid "Comoros Franc"
+msgstr "Comoros Franc"
+
+#: views/kmymoneyview.cpp:1392
+msgid "Costa Rican Colon"
+msgstr "Costa Rican Colon"
+
+#: views/kmymoneyview.cpp:1393
+msgid "Croatian Kuna"
+msgstr "Croatian Kuna"
+
+#: views/kmymoneyview.cpp:1394
+msgid "Cuban Peso"
+msgstr "Cuban Peso"
+
+#: views/kmymoneyview.cpp:1395
+msgid "Czech Koruna"
+msgstr "Czech Koruna"
+
+#: views/kmymoneyview.cpp:1396
+msgid "Danish Krone"
+msgstr "Danish Krone"
+
+#: views/kmymoneyview.cpp:1397
+msgid "Djibouti Franc"
+msgstr "Djibouti Franc"
+
+#: views/kmymoneyview.cpp:1398
+msgid "Dominican Peso"
+msgstr "Dominican Peso"
+
+#: views/kmymoneyview.cpp:1399
+msgid "East Caribbean Dollar"
+msgstr "East Caribbean Dollar"
+
+#: views/kmymoneyview.cpp:1400
+msgid "Egyptian Pound"
+msgstr "Egyptian Pound"
+
+#: views/kmymoneyview.cpp:1401
+msgid "El Salvador Colon"
+msgstr "El Salvador Colon"
+
+#: views/kmymoneyview.cpp:1402
+msgid "Eritrean Nakfa"
+msgstr "Eritrean Nakfa"
+
+#: views/kmymoneyview.cpp:1403
+msgid "Estonian Kroon"
+msgstr "Estonian Kroon"
+
+#: views/kmymoneyview.cpp:1404
+msgid "Ethiopian Birr"
+msgstr "Ethiopian Birr"
+
+#: views/kmymoneyview.cpp:1405
+msgid "Euro"
+msgstr "Euro"
+
+#: views/kmymoneyview.cpp:1406
+msgid "Falkland Islands Pound"
+msgstr "Falkland Islands Pound"
+
+#: views/kmymoneyview.cpp:1407
+msgid "Fiji Dollar"
+msgstr "Fijian Dollar"
+
+#: views/kmymoneyview.cpp:1408
+msgid "Gambian Dalasi"
+msgstr "Gambian Dalasi"
+
+#: views/kmymoneyview.cpp:1409
+msgid "Georgian Lari"
+msgstr "Georgian Lari"
+
+#: views/kmymoneyview.cpp:1410
+msgid "Ghanaian Cedi"
+msgstr "Ghanaian Cedi"
+
+#: views/kmymoneyview.cpp:1411
+msgid "Gibraltar Pound"
+msgstr "Gibraltan Pound"
+
+#: views/kmymoneyview.cpp:1412
+msgid "Guatemalan Quetzal"
+msgstr "Guatemalan Quetzal"
+
+#: views/kmymoneyview.cpp:1413
+msgid "Guinea-Bissau Peso"
+msgstr "Guinea-Bissau Peso"
+
+#: views/kmymoneyview.cpp:1414
+msgid "Guyanan Dollar"
+msgstr "Guyanan Dollar"
+
+#: views/kmymoneyview.cpp:1415
+msgid "Haitian Gourde"
+msgstr "Haitian Gourde"
+
+#: views/kmymoneyview.cpp:1416
+msgid "Honduran Lempira"
+msgstr "Honduran Lempira"
+
+#: views/kmymoneyview.cpp:1417
+msgid "Hong Kong Dollar"
+msgstr "Hong Kong Dollar"
+
+#: views/kmymoneyview.cpp:1418
+msgid "Hungarian Forint"
+msgstr "Hungarian Forint"
+
+#: views/kmymoneyview.cpp:1419
+msgid "Iceland Krona"
+msgstr "Icelandic Krona"
+
+#: views/kmymoneyview.cpp:1420
+msgid "Indian Rupee"
+msgstr "Indian Rupee"
+
+#: views/kmymoneyview.cpp:1421
+msgid "Indonesian Rupiah"
+msgstr "Indonesian Rupiah"
+
+#: views/kmymoneyview.cpp:1422
+msgid "Iranian Rial"
+msgstr "Iranian Rial"
+
+#: views/kmymoneyview.cpp:1423
+msgid "Iraqi Dinar"
+msgstr "Iraqi Dinar"
+
+#: views/kmymoneyview.cpp:1424
+msgid "Israeli New Shekel"
+msgstr "Israeli New Shekel"
+
+#: views/kmymoneyview.cpp:1425
+msgid "Jamaican Dollar"
+msgstr "Jamaican Dollar"
+
+#: views/kmymoneyview.cpp:1426
+msgid "Japanese Yen"
+msgstr "Japanese Yen"
+
+#: views/kmymoneyview.cpp:1427
+msgid "Jordanian Dinar"
+msgstr "Jordanian Dinar"
+
+#: views/kmymoneyview.cpp:1428
+msgid "Kazakhstan Tenge"
+msgstr "Kazakhstan Tenge"
+
+#: views/kmymoneyview.cpp:1429
+msgid "Kenyan Shilling"
+msgstr "Kenyan Shilling"
+
+#: views/kmymoneyview.cpp:1430
+msgid "Kuwaiti Dinar"
+msgstr "Kuwaiti Dinar"
+
+#: views/kmymoneyview.cpp:1431
+msgid "Kyrgyzstan Som"
+msgstr "Kyrgyzstan Som"
+
+#: views/kmymoneyview.cpp:1432
+msgid "Laos Kip"
+msgstr "Laos Kip"
+
+#: views/kmymoneyview.cpp:1433
+msgid "Latvian Lats"
+msgstr "Latvian Lats"
+
+#: views/kmymoneyview.cpp:1434
+msgid "Lebanese Pound"
+msgstr "Lebanese Pound"
+
+#: views/kmymoneyview.cpp:1435
+msgid "Lesotho Loti"
+msgstr "Lesotho Loti"
+
+#: views/kmymoneyview.cpp:1436
+msgid "Liberian Dollar"
+msgstr "Liberian Dollar"
+
+#: views/kmymoneyview.cpp:1437
+msgid "Libyan Dinar"
+msgstr "Libyan Dinar"
+
+#: views/kmymoneyview.cpp:1438
+msgid "Lithuanian Litas"
+msgstr "Lithuanian Litas"
+
+#: views/kmymoneyview.cpp:1439
+msgid "Macau Pataca"
+msgstr "Macau Pataca"
+
+#: views/kmymoneyview.cpp:1440
+msgid "Macedonian Denar"
+msgstr "Macedonian Denar"
+
+#: views/kmymoneyview.cpp:1441
+msgid "Malagasy Franc"
+msgstr "Malagasy Franc"
+
+#: views/kmymoneyview.cpp:1442
+msgid "Malawi Kwacha"
+msgstr "Malawi Kwacha"
+
+#: views/kmymoneyview.cpp:1443
+msgid "Malaysian Ringgit"
+msgstr "Malaysian Ringgit"
+
+#: views/kmymoneyview.cpp:1444
+msgid "Maldive Rufiyaa"
+msgstr "Maldive Rufiyaa"
+
+#: views/kmymoneyview.cpp:1445
+msgid "Mali Republic Franc"
+msgstr "Mali Republic Franc"
+
+#: views/kmymoneyview.cpp:1446
+msgid "Mauritanian Ouguiya"
+msgstr "Mauritanian Ouguiya"
+
+#: views/kmymoneyview.cpp:1447
+msgid "Mauritius Rupee"
+msgstr "Mauritius Rupee"
+
+#: views/kmymoneyview.cpp:1448
+msgid "Mexican Peso"
+msgstr "Mexican Peso"
+
+#: views/kmymoneyview.cpp:1449
+msgid "Moldavian Leu"
+msgstr "Moldavian Leu"
+
+#: views/kmymoneyview.cpp:1450
+msgid "Mongolian Tugrik"
+msgstr "Mongolian Tugrik"
+
+#: views/kmymoneyview.cpp:1451
+msgid "Moroccan Dirham"
+msgstr "Moroccan Dirham"
+
+#: views/kmymoneyview.cpp:1452
+msgid "Mozambique Metical"
+msgstr "Mozambique Metical"
+
+#: views/kmymoneyview.cpp:1453
+msgid "Myanmar Kyat"
+msgstr "Myanmar Kyat"
+
+#: views/kmymoneyview.cpp:1454
+msgid "Namibian Dollar"
+msgstr "Namibian Dollar"
+
+#: views/kmymoneyview.cpp:1455
+msgid "Nepalese Rupee"
+msgstr "Nepalese Rupee"
+
+#: views/kmymoneyview.cpp:1456
+msgid "New Zealand Dollar"
+msgstr "New Zealand Dollar"
+
+#: views/kmymoneyview.cpp:1457
+msgid "Nicaraguan Cordoba Oro"
+msgstr "Nicaraguan Cordoba Oro"
+
+#: views/kmymoneyview.cpp:1458
+msgid "Nigerian Naira"
+msgstr "Nigerian Naira"
+
+#: views/kmymoneyview.cpp:1459
+msgid "North Korean Won"
+msgstr "North Korean Won"
+
+#: views/kmymoneyview.cpp:1460
+msgid "Norwegian Kroner"
+msgstr "Norwegian Kroner"
+
+#: views/kmymoneyview.cpp:1461
+msgid "Omani Rial"
+msgstr "Omani Rial"
+
+#: views/kmymoneyview.cpp:1462
+msgid "Pakistan Rupee"
+msgstr "Pakistan Rupee"
+
+#: views/kmymoneyview.cpp:1463
+msgid "Panamanian Balboa"
+msgstr "Panamanian Balboa"
+
+#: views/kmymoneyview.cpp:1464
+msgid "Papua New Guinea Kina"
+msgstr "Papua New Guinea Kina"
+
+#: views/kmymoneyview.cpp:1465
+msgid "Paraguay Guarani"
+msgstr "Paraguay Guarani"
+
+#: views/kmymoneyview.cpp:1466
+msgid "Peruvian Nuevo Sol"
+msgstr "Peruvian Nuevo Sol"
+
+#: views/kmymoneyview.cpp:1467
+msgid "Philippine Peso"
+msgstr "Philippine Peso"
+
+#: views/kmymoneyview.cpp:1468
+msgid "Polish Zloty"
+msgstr "Polish Zloty"
+
+#: views/kmymoneyview.cpp:1469
+msgid "Qatari Rial"
+msgstr "Qatari Rial"
+
+#: views/kmymoneyview.cpp:1470
+msgid "Romanian Leu (new)"
+msgstr "Romanian Leu (new)"
+
+#: views/kmymoneyview.cpp:1471
+msgid "Russian Ruble"
+msgstr "Russian Rouble"
+
+#: views/kmymoneyview.cpp:1472
+msgid "Rwanda Franc"
+msgstr "Rwandan Franc"
+
+#: views/kmymoneyview.cpp:1473
+msgid "Samoan Tala"
+msgstr "Samoan Tala"
+
+#: views/kmymoneyview.cpp:1474
+msgid "Sao Tome and Principe Dobra"
+msgstr "Sao Tome and Principe Dobra"
+
+#: views/kmymoneyview.cpp:1475
+msgid "Saudi Riyal"
+msgstr "Saudi Riyal"
+
+#: views/kmymoneyview.cpp:1476
+msgid "Seychelles Rupee"
+msgstr "Seychelles Rupee"
+
+#: views/kmymoneyview.cpp:1477
+msgid "Sierra Leone Leone"
+msgstr "Sierra Leone Leone"
+
+#: views/kmymoneyview.cpp:1478
+msgid "Singapore Dollar"
+msgstr "Singapore Dollar"
+
+#: views/kmymoneyview.cpp:1481
+msgid "Solomon Islands Dollar"
+msgstr "Solomon Islands Dollar"
+
+#: views/kmymoneyview.cpp:1482
+msgid "Somali Shilling"
+msgstr "Somali Shilling"
+
+#: views/kmymoneyview.cpp:1483
+msgid "South African Rand"
+msgstr "South African Rand"
+
+#: views/kmymoneyview.cpp:1484
+msgid "South Korean Won"
+msgstr "South Korean Won"
+
+#: views/kmymoneyview.cpp:1485
+msgid "Sri Lanka Rupee"
+msgstr "Sri Lanka Rupee"
+
+#: views/kmymoneyview.cpp:1486
+msgid "St. Helena Pound"
+msgstr "St. Helena Pound"
+
+#: views/kmymoneyview.cpp:1487
+msgid "Sudanese Dinar"
+msgstr "Sudanese Dinar"
+
+#: views/kmymoneyview.cpp:1488
+msgid "Suriname Guilder"
+msgstr "Suriname Guilder"
+
+#: views/kmymoneyview.cpp:1489
+msgid "Swaziland Lilangeni"
+msgstr "Swaziland Lilangeni"
+
+#: views/kmymoneyview.cpp:1490
+msgid "Swedish Krona"
+msgstr "Swedish Krona"
+
+#: views/kmymoneyview.cpp:1491
+msgid "Swiss Franc"
+msgstr "Swiss Franc"
+
+#: views/kmymoneyview.cpp:1492
+msgid "Syrian Pound"
+msgstr "Syrian Pound"
+
+#: views/kmymoneyview.cpp:1493
+msgid "Taiwan Dollar"
+msgstr "Taiwanese Dollar"
+
+#: views/kmymoneyview.cpp:1494
+msgid "Tajikistan Somani"
+msgstr "Tajikistani Somani"
+
+#: views/kmymoneyview.cpp:1495
+msgid "Tanzanian Shilling"
+msgstr "Tanzanian Shilling"
+
+#: views/kmymoneyview.cpp:1496
+msgid "Thai Baht"
+msgstr "Thai Baht"
+
+#: views/kmymoneyview.cpp:1497
+msgid "Tongan Pa'anga"
+msgstr "Tongan Pa'anga"
+
+#: views/kmymoneyview.cpp:1498
+msgid "Trinidad and Tobago Dollar"
+msgstr "Trinidad and Tobago Dollar"
+
+#: views/kmymoneyview.cpp:1499
+msgid "Tunisian Dinar"
+msgstr "Tunisian Dinar"
+
+#: views/kmymoneyview.cpp:1500
+msgid "Turkish Lira (new)"
+msgstr "Turkish Lira (new)"
+
+#: views/kmymoneyview.cpp:1501
+msgid "Turkmenistan Manat"
+msgstr "Turkmenistani Manat"
+
+#: views/kmymoneyview.cpp:1502
+msgid "US Dollar"
+msgstr "US Dollar"
+
+#: views/kmymoneyview.cpp:1503
+msgid "Uganda Shilling"
+msgstr "Uganda Shilling"
+
+#: views/kmymoneyview.cpp:1504
+msgid "Ukraine Hryvnia"
+msgstr "Ukraine Hryvnia"
+
+#: views/kmymoneyview.cpp:1505
+msgid "United Arab Emirates Dirham"
+msgstr "United Arab Emirates Dirham"
+
+#: views/kmymoneyview.cpp:1506
+msgid "Uruguayan Peso"
+msgstr "Uruguayan Peso"
+
+#: views/kmymoneyview.cpp:1507
+msgid "Uzbekistani Sum"
+msgstr "Uzbekistani Sum"
+
+#: views/kmymoneyview.cpp:1508
+msgid "Vanuatu Vatu"
+msgstr "Vanuatu Vatu"
+
+#: views/kmymoneyview.cpp:1509
+msgid "Venezuelan Bolivar"
+msgstr "Venezuelan Bolivar"
+
+#: views/kmymoneyview.cpp:1510
+msgid "Vietnamese Dong"
+msgstr "Vietnamese Dong"
+
+#: views/kmymoneyview.cpp:1511
+msgid "Yugoslav Dinar"
+msgstr "Yugoslav Dinar"
+
+#: views/kmymoneyview.cpp:1512
+msgid "Zambian Kwacha"
+msgstr "Zambian Kwacha"
+
+#: views/kmymoneyview.cpp:1513
+msgid "Zimbabwe Dollar"
+msgstr "Zimbabwe Dollar"
+
+#: views/kmymoneyview.cpp:1515
+msgid "Gold"
+msgstr "Gold"
+
+#: views/kmymoneyview.cpp:1516
+msgid "Palladium"
+msgstr "Palladium"
+
+#: views/kmymoneyview.cpp:1517
+msgid "Platinum"
+msgstr "Platinum"
+
+#: views/kmymoneyview.cpp:1518
+msgid "Silver"
+msgstr "Silver"
+
+#: views/kmymoneyview.cpp:1551
+msgid "Austrian Schilling"
+msgstr "Austrian Schilling"
+
+#: views/kmymoneyview.cpp:1552
+msgid "German Mark"
+msgstr "German Mark"
+
+#: views/kmymoneyview.cpp:1553
+msgid "French Franc"
+msgstr "French Franc"
+
+#: views/kmymoneyview.cpp:1554
+msgid "Italian Lira"
+msgstr "Italian Lira"
+
+#: views/kmymoneyview.cpp:1555
+msgid "Spanish Peseta"
+msgstr "Spanish Peseta"
+
+#: views/kmymoneyview.cpp:1556
+msgid "Dutch Guilder"
+msgstr "Dutch Guilder"
+
+#: views/kmymoneyview.cpp:1557
+msgid "Belgian Franc"
+msgstr "Belgian Franc"
+
+#: views/kmymoneyview.cpp:1558
+msgid "Luxembourg Franc"
+msgstr "Luxembourg Franc"
+
+#: views/kmymoneyview.cpp:1559
+msgid "Portuguese Escudo"
+msgstr "Portuguese Escudo"
+
+#: views/kmymoneyview.cpp:1560
+msgid "Irish Pound"
+msgstr "Irish Pound"
+
+#: views/kmymoneyview.cpp:1561
+msgid "Finnish Markka"
+msgstr "Finnish Markka"
+
+#: views/kmymoneyview.cpp:1562
+msgid "Greek Drachma"
+msgstr "Greek Drachma"
+
+#: views/kmymoneyview.cpp:1564
+msgid "Romanian Leu"
+msgstr "Romanian Leu"
+
+#: views/kmymoneyview.cpp:1566
+msgid "Russian Ruble (old)"
+msgstr "Russian Rouble (old)"
+
+#: views/kmymoneyview.cpp:1568
+msgid "Slovenian Tolar"
+msgstr "Slovenian Tolar"
+
+#: views/kmymoneyview.cpp:1571
+msgid "Turkish Lira"
+msgstr "Turkish Lira"
+
+#: views/kmymoneyview.cpp:1574
+msgid "Maltese Lira"
+msgstr "Maltese Lira"
+
+#: views/kmymoneyview.cpp:1575
+msgid "Cyprus Pound"
+msgstr "Cypriot Pound"
+
+#: views/kmymoneyview.cpp:1578
+msgid "Slovak Koruna"
+msgstr "Slovak Koruna"
+
+#: views/kmymoneyview.cpp:1888
+msgid "The account \"%1\" was previously created as loan account but some information is missing. The new loan wizard will be started to collect all relevant information. Please use a KMyMoney version >= 0.8.7 and < 0.9 to correct the problem."
+msgstr "The account \"%1\" was previously created as loan account but some information is missing. The new loan wizard will be started to collect all relevant information. Please use a KMyMoney version >= 0.8.7 and < 0.9 to correct the problem."
+
+#: views/kmymoneyview.cpp:1892
+msgid "Account problem"
+msgstr "Account problem"
+
+#: views/kmymoneyview.cpp:1941
+msgid "Unable to add schedule: "
+msgstr "Unable to add schedule: "
+
+#: views/kmymoneyview.cpp:1970
+msgid "Fix transactions"
+msgstr "Fix transactions"
+
+#: views/kaccountsview.cpp:522
+#: views/kinstitutionsview.cpp:300
+msgid "Net Worth: "
+msgstr "Net Worth: "
+
+#: dialogs/rc.cpp:108
+#: dialogs/rc.cpp:163
+#: dialogs/rc.cpp:250
+#: dialogs/rc.cpp:755
+#: dialogs/rc.cpp:830
+#: views/kinvestmentview.cpp:77
+#: widgets/register.cpp:572
+msgid "Quantity"
+msgstr "Quantity"
+
+#: views/kscheduledlistitem.cpp:137
+msgid "Finished"
+msgstr "Finished"
+
+#: views/kbudgetview.cpp:109
+msgid "Creates a new budget"
+msgstr "Creates a new budget"
+
+#: views/kbudgetview.cpp:110
+msgid "Use this to create a new empty budget."
+msgstr "Use this to create a new empty budget."
+
+#: views/kbudgetview.cpp:116
+msgid "Rename the current selected budget"
+msgstr "Rename the current selected budget"
+
+#: views/kbudgetview.cpp:117
+msgid "Use this to start renaming the selected budget."
+msgstr "Use this to start renaming the selected budget."
+
+#: views/kbudgetview.cpp:123
+msgid "Delete the current selected budget"
+msgstr "Delete the current selected budget"
+
+#: views/kbudgetview.cpp:124
+msgid "Use this to delete the selected budget."
+msgstr "Use this to delete the selected budget."
+
+#: views/kbudgetview.cpp:130
+msgid "Accepts the entered values and stores the budget"
+msgstr "Accepts the entered values and stores the budget"
+
+#: views/kbudgetview.cpp:131
+msgid "Use this to store the modified data."
+msgstr "Use this to store the modified data."
+
+#: views/kbudgetview.cpp:137
+msgid "Revert budget to last saved state"
+msgstr "Revert budget to last saved state"
+
+#: views/kbudgetview.cpp:138
+msgid "Use this to discard the modified data."
+msgstr "Use this to discard the modified data."
+
+#: views/kbudgetview.cpp:489
+msgid "Do you want to save the changes for <b>%1</b>"
+msgstr "Do you want to save the changes for <b>%1</b>"
+
+#: views/kbudgetview.cpp:610
+msgid "A budget with the name '%1' already exists. It is not advisable to have multiple budgets with the same identification name. Are you sure you would like to rename the budget?"
+msgstr "A budget with the name '%1' already exists. It is not advisable to have multiple budgets with the same identification name. Are you sure you would like to rename the budget?"
+
+#: views/kbudgetview.cpp:635
+#: views/kbudgetview.cpp:750
+msgid "Unable to modify budget"
+msgstr "Unable to modify budget"
+
+#: views/kbudgetview.cpp:736
+msgid "Unable to reset budget"
+msgstr "Unable to reset budget"
+
+#: views/rc.cpp:1
+msgid "List"
+msgstr "List"
+
+#: views/rc.cpp:2
+#: views/rc.cpp:20
+msgid "Collapse all accounts in the list"
+msgstr "Collapse all accounts in the list"
+
+#: views/rc.cpp:3
+#: views/rc.cpp:21
+msgid "Expand all accounts in the list"
+msgstr "Expand all accounts in the list"
+
+#: views/rc.cpp:4
+msgid "Icons"
+msgstr "Icons"
+
+#: views/rc.cpp:5
+#: views/rc.cpp:22
+msgid "Note: Unused categories are not shown as selected by settings."
+msgstr "Note: Unused categories are not shown as selected by settings."
+
+#: views/rc.cpp:6
+#: views/rc.cpp:23
+#: views/rc.cpp:54
+msgid "Total Profits:"
+msgstr "Total Profits:"
+
+#: views/rc.cpp:7
+msgid "Your budgets"
+msgstr "Your budgets"
+
+#: dialogs/rc.cpp:340
+#: dialogs/rc.cpp:841
+#: dialogs/settings/rc.cpp:124
+#: views/rc.cpp:8
+#: widgets/rc.cpp:48
+#: widgets/rc.cpp:150
+msgid "New"
+msgstr "New"
+
+#: views/rc.cpp:9
+msgid "Ren"
+msgstr "Ren"
+
+#: views/rc.cpp:10
+msgid "Del"
+msgstr "Del"
+
+#: views/rc.cpp:11
+msgid "Res"
+msgstr "Res"
+
+#: views/rc.cpp:12
+msgid "Upd"
+msgstr "Upd"
+
+#: views/rc.cpp:15
+msgid "Hide unused budget categories"
+msgstr "Hide unused budget categories"
+
+#: views/rc.cpp:16
+msgid "Assignments"
+msgstr "Assignments"
+
+#: views/rc.cpp:19
+msgid "Include subaccounts"
+msgstr "Include subaccounts"
+
+#: dialogs/settings/rc.cpp:23
+#: views/rc.cpp:24
+msgid "Forecast Settings"
+msgstr "Forecast Settings"
+
+#: views/rc.cpp:25
+msgid "Days to Forecast:"
+msgstr "Days to Forecast:"
+
+#: views/rc.cpp:26
+msgid "Days of Accounts Cycle:"
+msgstr "Days of Accounts Cycle:"
+
+#: dialogs/settings/rc.cpp:25
+#: views/rc.cpp:27
+msgid "Day of Month to start Forecast:"
+msgstr "Day of Month to start Forecast:"
+
+#: views/rc.cpp:28
+msgid "Historic Cycles:"
+msgstr "Historic Cycles:"
+
+#: views/rc.cpp:29
+msgid "Chart Detail:"
+msgstr "Chart Detail:"
+
+#: views/rc.cpp:30
+#: widgets/kmymoneyaccountselector.cpp:64
+#: widgets/rc.cpp:65
+msgid "All"
+msgstr "All"
+
+#: views/rc.cpp:31
+#: widgets/rc.cpp:66
+msgid "Top-Level"
+msgstr "Top-Level"
+
+#: views/rc.cpp:32
+#: widgets/rc.cpp:67
+msgid "Groups"
+msgstr "Groups"
+
+#: views/rc.cpp:33
+#: widgets/rc.cpp:68
+msgid "Totals"
+msgstr "Totals"
+
+#: views/rc.cpp:34
+msgid "<p>Choose what level of detail to show on the chart.</p>"
+msgstr "<p>Choose what level of detail to show on the chart.</p>"
+
+#: views/rc.cpp:35
+msgid "Current Forecast Method:"
+msgstr "Current Forecast Method:"
+
+#: views/rc.cpp:36
+msgid "method"
+msgstr "method"
+
+#: dialogs/settings/rc.cpp:32
+#: views/rc.cpp:37
+msgid "History Forecast Method"
+msgstr "History Forecast Method"
+
+#: dialogs/settings/rc.cpp:33
+#: views/rc.cpp:38
+msgid "Simple Moving Average"
+msgstr "Simple Moving Average"
+
+#: dialogs/settings/rc.cpp:34
+#: views/rc.cpp:39
+msgid "Weighted Moving Average"
+msgstr "Weighted Moving Average"
+
+#: dialogs/settings/rc.cpp:35
+#: views/rc.cpp:40
+msgid "Linear Regression"
+msgstr "Linear Regression"
+
+#: dialogs/keditloanwizard.cpp:315
+#: dialogs/rc.cpp:628
+#: dialogs/rc.cpp:647
+#: views/rc.cpp:43
+msgid "Summary"
+msgstr "Summary"
+
+#: views/rc.cpp:45
+msgid "0 days"
+msgstr "0 days"
+
+#: views/rc.cpp:46
+msgid "30 days"
+msgstr "30 days"
+
+#: views/rc.cpp:47
+msgid "60 days"
+msgstr "60 days"
+
+#: views/rc.cpp:48
+msgid "90 days"
+msgstr "90 days"
+
+#: views/rc.cpp:49
+msgid "New Item"
+msgstr "New Item"
+
+#: views/rc.cpp:50
+#: widgets/rc.cpp:64
+msgid "Detail"
+msgstr "Detail"
+
+#: views/rc.cpp:51
+msgid "Advanced"
+msgstr "Advanced"
+
+#: views/rc.cpp:52
+msgid "Budget Forecast"
+msgstr "Budget Forecast"
+
+#: views/rc.cpp:55
+msgid "Investment Summary"
+msgstr "Investment Summary"
+
+#: views/rc.cpp:56
+msgid "Select Account:"
+msgstr "Select Account:"
+
+#: views/rc.cpp:57
+msgid "Summary of the equities contained in this account, showing your holdings and their most recent price."
+msgstr "Summary of the equities contained in this account, showing your holdings and their most recent price."
+
+#: views/rc.cpp:60
+#: widgets/register.cpp:564
+msgid "No."
+msgstr "No."
+
+#: views/rc.cpp:64
+msgid "Balance: "
+msgstr "Balance: "
+
+#: views/rc.cpp:65
+msgid "Address"
+msgstr "Address"
+
+#: views/rc.cpp:66
+msgid "Payee Information"
+msgstr "Payee Information"
+
+#: views/rc.cpp:67
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#: dialogs/rc.cpp:393
+#: views/rc.cpp:69
+msgid "Telephone/Fax:"
+msgstr "Telephone/Fax:"
+
+#: views/rc.cpp:70
+msgid "Notes"
+msgstr "Notes"
+
+#: views/rc.cpp:71
+msgid "Address:"
+msgstr "Address:"
+
+#: views/rc.cpp:72
+msgid "Matching"
+msgstr "Matching"
+
+#: views/rc.cpp:73
+msgid "Transaction Matching"
+msgstr "Transaction Matching"
+
+#: views/rc.cpp:74
+msgid "No matching"
+msgstr "No matching"
+
+#: views/rc.cpp:75
+msgid "Match on Payee name"
+msgstr "Match on Payee name"
+
+#: views/rc.cpp:76
+msgid "Match on a name listed below"
+msgstr "Match on a name listed below"
+
+#: views/rc.cpp:77
+msgid "List of matching names"
+msgstr "List of matching names"
+
+#: views/rc.cpp:78
+msgid "This list contains the names that will match this payee if a transaction is imported from an external source. Keep in mind, that you can specify regular expressions here."
+msgstr "This list contains the names that will match this payee if a transaction is imported from an external source. Keep in mind, that you can specify regular expressions here."
+
+#: views/rc.cpp:79
+msgid "Ignore Case"
+msgstr "Ignore Case"
+
+#: views/rc.cpp:80
+msgid "Default Account"
+msgstr "Default Account"
+
+#: views/rc.cpp:81
+msgid ""
+"Use the default account for\n"
+"new transactions with this payee"
+msgstr ""
+"Use the default account for\n"
+"new transactions with this payee"
+
+#: views/rc.cpp:82
+msgid "Default category:"
+msgstr "Default category:"
+
+#: views/rc.cpp:83
+msgid "Suggest a category"
+msgstr "Suggest a category"
+
+#: views/rc.cpp:85
+msgid "New Scheduled transaction..."
+msgstr "New Scheduled transaction..."
+
+#: views/rc.cpp:86
+msgid "Filter Accounts"
+msgstr "Filter Accounts"
+
+#: views/rc.cpp:87
+msgid "List View"
+msgstr "List View"
+
+#: views/rc.cpp:88
+msgid "Calendar View"
+msgstr "Calendar View"
+
+#: views/kinstitutionsview.cpp:43
+msgid "Institution/Account"
+msgstr "Institution/Account"
+
+#: views/kinstitutionsview.cpp:157
+msgid "Accounts with no institution assigned"
+msgstr "Accounts with no institution assigned"
+
+#: views/kscheduledview.cpp:70
+msgid "Type/Name"
+msgstr "Type/Name"
+
+#: views/kscheduledview.cpp:75
+msgid "Frequency"
+msgstr "Frequency"
+
+#: views/kscheduledview.cpp:157
+msgid "Unable to load accounts: "
+msgstr "Unable to load accounts: "
+
+#: views/kscheduledview.cpp:171
+#: views/kscheduledview.cpp:429
+#: views/kscheduledview.cpp:445
+#: widgets/kmymoneyscheduledcalendar.cpp:46
+msgid "Bills"
+msgstr "Bills"
+
+#: dialogs/rc.cpp:232
+#: dialogs/rc.cpp:706
+#: views/kscheduledview.cpp:172
+#: views/kscheduledview.cpp:431
+#: views/kscheduledview.cpp:447
+#: widgets/kmymoneyscheduledcalendar.cpp:47
+msgid "Deposits"
+msgstr "Deposits"
+
+#: views/kscheduledview.cpp:173
+#: views/kscheduledview.cpp:435
+#: views/kscheduledview.cpp:451
+msgid "Loans"
+msgstr "Loans"
+
+#: views/kscheduledview.cpp:357
+msgid "Error activating context menu"
+msgstr "Error activating context menu"
+
+#: views/kscheduledview.cpp:385
+msgid "Error executing item"
+msgstr "Error executing item"
+
+#: views/kscheduledview.cpp:419
+msgid "Unable to filter account"
+msgstr "Unable to filter account"
+
+#: views/kgloballedgerview.cpp:508
+msgid "Statement Details"
+msgstr "Statement Details"
+
+#: views/kgloballedgerview.cpp:512
+msgid "Statement Deposit Details"
+msgstr "Statement Deposit Details"
+
+#: views/kgloballedgerview.cpp:513
+msgid "Statement Payment Details"
+msgstr "Statement Payment Details"
+
+#: views/kgloballedgerview.cpp:642
+msgid "%1 deposits (%3), %2 payments (%4)"
+msgstr "%1 deposits (%3), %2 payments (%4)"
+
+#: views/kgloballedgerview.cpp:649
+msgid "%1 payments (%2)"
+msgstr "%1 payments (%2)"
+
+#: views/kgloballedgerview.cpp:653
+msgid "%1 deposits (%2)"
+msgstr "%1 deposits (%2)"
+
+#: views/kgloballedgerview.cpp:721
+#, c-format
+msgid "Statement: %1"
+msgstr "Statement: %1"
+
+#: views/kgloballedgerview.cpp:722
+#: views/kgloballedgerview.cpp:736
+#, c-format
+msgid "Cleared: %1"
+msgstr "Cleared: %1"
+
+#: views/kgloballedgerview.cpp:723
+#, c-format
+msgid "Difference: %1"
+msgstr "Difference: %1"
+
+#: views/kgloballedgerview.cpp:730
+#, c-format
+msgid "Last reconciled: %1"
+msgstr "Last reconciled: %1"
+
+#: views/kgloballedgerview.cpp:732
+msgid "Never reconciled"
+msgstr "Never reconciled"
+
+#: views/kgloballedgerview.cpp:772
+msgid "Investment value: %1%2"
+msgstr "Investment value: %1%2"
+
+#: views/kgloballedgerview.cpp:1040
+msgid "At least one split of the selected transactions has been reconciled. Do you wish to continue to edit the transactions anyway?"
+msgstr "At least one split of the selected transactions has been reconciled. Do you wish to continue to edit the transactions anyway?"
+
+#: views/kgloballedgerview.cpp:1051
+msgid "At least one split of the selected transactions has been frozen. Editing the transactions is therefore prohibited."
+msgstr "At least one split of the selected transactions has been frozen. Editing the transactions is therefore prohibited."
+
+#: views/kgloballedgerview.cpp:1053
+msgid "Transaction already frozen"
+msgstr "Transaction already frozen"
+
+#: views/kgloballedgerview.cpp:1058
+msgid "At least one split of the selected transaction references an account that has been closed. Editing the transactions is therefore prohibited."
+msgstr "At least one split of the selected transaction references an account that has been closed. Editing the transactions is therefore prohibited."
+
+#: views/kgloballedgerview.cpp:1060
+msgid "Account closed"
+msgstr "Account closed"
+
+#: views/kgloballedgerview.cpp:1349
+msgid "Cannot create transactions when no account is selected."
+msgstr "Cannot create transactions when no account is selected."
+
+#: views/kgloballedgerview.cpp:1354
+msgid "Cannot create transactions in the context of a category."
+msgstr "Cannot create transactions in the context of a category."
+
+#: views/kgloballedgerview.cpp:1358
+msgid "Cannot create transactions in a closed account."
+msgstr "Cannot create transactions in a closed account."
+
+#: views/kgloballedgerview.cpp:1370
+msgid "Cannot process transaction with focus if it is not selected."
+msgstr "Cannot process transaction with focus if it is not selected."
+
+#: views/kgloballedgerview.cpp:1400
+msgid "Cannot edit transactions with frozen splits."
+msgstr "Cannot edit transactions with frozen splits."
+
+#: views/kgloballedgerview.cpp:1411
+msgid "Cannot edit transactions in the context of a category."
+msgstr "Cannot edit transactions in the context of a category."
+
+#: views/kgloballedgerview.cpp:1430
+msgid "Cannot edit investment transactions and non-investment transactions together."
+msgstr "Cannot edit investment transactions and non-investment transactions together."
+
+#: views/kgloballedgerview.cpp:1438
+msgid "Cannot edit multiple split transactions at once."
+msgstr "Cannot edit multiple split transactions at once."
+
+#: views/kgloballedgerview.cpp:1448
+msgid "Cannot edit investment transactions in the context of this account."
+msgstr "Cannot edit investment transactions in the context of this account."
+
+#: views/kforecastview.cpp:164
+msgid "Scheduled"
+msgstr "Scheduled"
+
+#: views/kforecastview.cpp:169
+msgid "History"
+msgstr "History"
+
+#: views/kforecastview.cpp:296
+msgid "The balance of %2 is below the minimum balance %3 today."
+msgstr "The balance of %2 is below the minimum balance %3 today."
+
+#: views/kforecastview.cpp:301
+#: views/khomeview.cpp:1043
+msgid "The balance of %1 will drop below the minimum balance %2 in %3 days."
+msgstr "The balance of %1 will drop below the minimum balance %2 in %3 days."
+
+#: views/kforecastview.cpp:318
+#: views/khomeview.cpp:1059
+msgid "The balance of %1 is below %2 today."
+msgstr "The balance of %1 is below %2 today."
+
+#: views/kforecastview.cpp:323
+#: views/khomeview.cpp:1064
+msgid "The balance of %1 is above %2 today."
+msgstr "The balance of %1 is above %2 today."
+
+#: views/kforecastview.cpp:330
+#: views/khomeview.cpp:1070
+msgid "The balance of %1 will drop below %2 in %3 days."
+msgstr "The balance of %1 will drop below %2 in %3 days."
+
+#: views/kforecastview.cpp:335
+#: views/khomeview.cpp:1075
+msgid "The balance of %1 will raise above %2 in %3 days."
+msgstr "The balance of %1 will raise above %2 in %3 days."
+
+#: views/kforecastview.cpp:348
+msgid "The account %1 is decreasing %2 per cycle."
+msgstr "The account %1 is decreasing %2 per cycle."
+
+#: views/kforecastview.cpp:404
+#: widgets/kmymoneyaccounttreeforecast.cpp:114
+#, c-format
+msgid "Min Bal %1"
+msgstr "Min Bal %1"
+
+#: views/kforecastview.cpp:406
+#: widgets/kmymoneyaccounttreeforecast.cpp:116
+#, c-format
+msgid "Min Date %1"
+msgstr "Min Date %1"
+
+#: views/kforecastview.cpp:409
+#: widgets/kmymoneyaccounttreeforecast.cpp:119
+#, c-format
+msgid "Max Bal %1"
+msgstr "Max Bal %1"
+
+#: views/kforecastview.cpp:411
+#: widgets/kmymoneyaccounttreeforecast.cpp:121
+#, c-format
+msgid "Max Date %1"
+msgstr "Max Date %1"
+
+#: views/kforecastview.cpp:413
+#: widgets/kmymoneyaccounttreeforecast.cpp:123
+msgid "Average"
+msgstr "Average"
+
+#: views/kforecastview.cpp:649
+#: views/khomeview.cpp:268
+#: views/khomeview.cpp:275
+msgid "Networth Forecast"
+msgstr "Networth Forecast"
+
+#: views/khomeview.cpp:203
+msgid "Your Financial Summary"
+msgstr "Your Financial Summary"
+
+#: views/khomeview.cpp:218
+msgid "Preferred Accounts"
+msgstr "Preferred Accounts"
+
+#: views/khomeview.cpp:225
+#: views/khomeview.cpp:227
+msgid "Payment Accounts"
+msgstr "Payment Accounts"
+
+#: views/khomeview.cpp:256
+msgid "Show KMyMoney welcome page"
+msgstr "Show KMyMoney welcome page"
+
+#: views/khomeview.cpp:409
+msgid "Overdue payments"
+msgstr "Overdue payments"
+
+#: views/khomeview.cpp:424
+#: views/khomeview.cpp:497
+#: views/khomeview.cpp:531
+msgid "Balance after"
+msgstr "Balance after"
+
+#: views/khomeview.cpp:482
+msgid "Today's payments"
+msgstr "Today's payments"
+
+#: views/khomeview.cpp:516
+msgid "Future payments"
+msgstr "Future payments"
+
+#: views/khomeview.cpp:585
+msgid "Less..."
+msgstr "Less..."
+
+#: views/khomeview.cpp:587
+msgid "More..."
+msgstr "More ..."
+
+#: views/khomeview.cpp:622
+msgid "Enter schedule"
+msgstr "Enter schedule"
+
+#: views/khomeview.cpp:624
+msgid "Skip schedule"
+msgstr "Skip schedule"
+
+#: views/khomeview.cpp:627
+msgid "Edit schedule"
+msgstr "Edit schedule"
+
+#: views/khomeview.cpp:631
+msgid " (%1 payments)"
+msgstr " (%1 payments)"
+
+#: views/khomeview.cpp:771
+msgid "To Minimum Balance / Maximum Credit"
+msgstr "To Minimum Balance / Maximum Credit"
+
+#: views/khomeview.cpp:964
+msgid "%1 Day Forecast"
+msgstr "%1 Day Forecast"
+
+#: views/khomeview.cpp:973
+#: widgets/kmymoneyaccounttreeforecast.cpp:67
+msgid "%1 days"
+msgstr "%1 days"
+
+#: views/khomeview.cpp:1039
+msgid "The balance of %1 is below the minimum balance %2 today."
+msgstr "The balance of %1 is below the minimum balance %2 today."
+
+#: views/khomeview.cpp:1175
+msgid "Before KMyMoney can give you detailed information about your financial status, you need to create at least one account. Until then, KMyMoney shows the welcome page instead."
+msgstr "Before KMyMoney can give you detailed information about your financial status, you need to create at least one account. Until then, KMyMoney shows the welcome page instead."
+
+#: views/khomeview.cpp:1258
+msgid "Assets and Liabilities Summary"
+msgstr "Assets and Liabilities Summary"
+
+#: views/khomeview.cpp:1262
+msgid "Asset Accounts"
+msgstr "Asset Accounts"
+
+#: views/khomeview.cpp:1270
+msgid "Liability Accounts"
+msgstr "Liability Accounts"
+
+#: views/khomeview.cpp:1348
+msgid "Total Assets"
+msgstr "Total Assets"
+
+#: views/khomeview.cpp:1354
+msgid "Total Liabilities"
+msgstr "Total Liabilities"
+
+#: views/khomeview.cpp:1399
+msgid "Current Month Summary"
+msgstr "Current Month Summary"
+
+#: views/khomeview.cpp:1403
+#: views/khomeview.cpp:1440
+msgid "Budgeted"
+msgstr "Budgeted"
+
+#: views/khomeview.cpp:1433
+msgid "Budget Overruns"
+msgstr "Budget Overruns"
+
+#: views/khomeview.cpp:1502
+msgid "No Budget Categories have been overrun"
+msgstr "No Budget Categories have been overrun"
+
+#: views/khomeview.cpp:1801
+msgid "Cash Flow Summary"
+msgstr "Cash Flow Summary"
+
+#: views/khomeview.cpp:1808
+msgid "Income and Expenses of Current Month"
+msgstr "Income and Expenses of Current Month"
+
+#: views/khomeview.cpp:1816
+msgid "Scheduled Income"
+msgstr "Scheduled Income"
+
+#: views/khomeview.cpp:1819
+msgid "Expenses"
+msgstr "Expenses"
+
+#: views/khomeview.cpp:1822
+msgid "Scheduled Expenses"
+msgstr "Scheduled Expenses"
+
+#: views/khomeview.cpp:1850
+msgid "Liquid Assets and Liabilities"
+msgstr "Liquid Assets and Liabilities"
+
+#: views/khomeview.cpp:1855
+msgid "Liquid Assets"
+msgstr "Liquid Assets"
+
+#: views/khomeview.cpp:1858
+msgid "Transfers to Liquid Liabilities"
+msgstr "Transfers to Liquid Liabilities"
+
+#: views/khomeview.cpp:1861
+msgid "Liquid Liabilities"
+msgstr "Liquid Liabilities"
+
+#: views/khomeview.cpp:1864
+msgid "Other Transfers"
+msgstr "Other Transfers"
+
+#: views/khomeview.cpp:1908
+msgid "Cash Flow Status"
+msgstr "Cash Flow Status"
+
+#: views/khomeview.cpp:1914
+msgid "Expected Liquid Assets"
+msgstr "Expected Liquid Assets"
+
+#: views/khomeview.cpp:1917
+msgid "Expected Liquid Liabilities"
+msgstr "Expected Liquid Liabilities"
+
+#: views/khomeview.cpp:1920
+msgid "Expected Profit/Loss"
+msgstr "Expected Profit/Loss"
+
+#: plugins/ofximport/ofximporterplugin.cpp:64
+msgid "OFX..."
+msgstr "OFX..."
+
+#: plugins/ofximport/ofximporterplugin.cpp:69
+msgid "OFX import file selection"
+msgstr "OFX import file selection"
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid "Unable to import %1 using the OFX importer plugin. This file is not the correct format."
+msgstr "Unable to import %1 using the OFX importer plugin. This file is not the correct format."
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid "Incorrect format"
+msgstr "Incorrect format"
+
+#: plugins/ofximport/ofximporterplugin.cpp:122
+msgid "Unable to parse file"
+msgstr "Unable to parse file"
+
+#: plugins/ofximport/ofximporterplugin.cpp:576
+msgid "Online settings"
+msgstr "Online settings"
+
+#: plugins/ofximport/ofximporterplugin.cpp:635
+#, c-format
+msgid "Error connecting to bank: %1"
+msgstr "Error connecting to bank: %1"
+
+#: plugins/ofximport/ofximporterplugin.cpp:646
+msgid "Unable to import %1 using the OFX importer plugin. The plugin returned the following error:<p>%2"
+msgstr "Unable to import %1 using the OFX importer plugin. The plugin returned the following error:<p>%2"
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Importing process terminated unexpectedly."
+msgstr "Importing process terminated unexpectedly."
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Failed to import all statements."
+msgstr "Failed to import all statements."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "The HTTP request failed."
+msgstr "The HTTP request failed"
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "Failed"
+msgstr "Failed"
+
+#: plugins/ofximport/ofxpartner.cpp:410
+msgid "Cannot open file %1 for writing"
+msgstr "Cannot open file %1 for writing"
+
+#: plugins/ofximport/ofxpartner.cpp:414
+msgid "OFX setup error"
+msgstr "OFX setup error"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid "Loading banklist"
+msgstr "Loading banklist"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid ""
+"Getting list of banks from http://moneycentral.msn.com/\n"
+"This may take some time depending on the available bandwidth."
+msgstr ""
+"Getting list of banks from http://moneycentral.msn.com/\n"
+"This may take some time depending on the available bandwidth."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:155
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:199
+msgid "Supports online statements<br>"
+msgstr "Supports online statements<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:157
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:201
+msgid "Supports investments<br>"
+msgstr "Supports investments<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:159
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:203
+msgid "Supports bill payment (but not supported by KMyMoney yet)<br>"
+msgstr "Supports bill payment (but not supported by KMyMoney yet)<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:163
+msgid "Does not support online banking</p>"
+msgstr "Does not support online banking</p>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:173
+msgid "Please choose a bank."
+msgstr "Please choose a bank."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:179
+msgid "Please fill all fields with values."
+msgstr "Please fill all fields with values."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:271
+msgid "No suitable accounts were found at this bank."
+msgstr "No suitable accounts were found at this bank."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:283
+msgid "Please choose an account"
+msgstr "Please choose an account"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:386
+msgid "Server message: %1\n"
+msgstr "Server message: %1\n"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+msgid "Your bank returned warnings when signing on"
+msgstr "Your bank returned warnings when signing on"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+#, c-format
+msgid "WARNING %1"
+msgstr "WARNING %1"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+msgid "Error signing onto your bank"
+msgstr "Error signing onto your bank"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, c-format
+msgid "ERROR %1"
+msgstr "ERROR %1"
+
+#: plugins/ofximport/dialogs/konlinebankingstatus.cpp:59
+msgid "Enabled & configured"
+msgstr "Enabled & configured"
+
+#: plugins/ofximport/dialogs/rc.cpp:1
+msgid "OFX Direct Connect"
+msgstr "OFX Direct Connect"
+
+#: plugins/ofximport/dialogs/rc.cpp:2
+msgid "Contacting bank..."
+msgstr "Contacting bank..."
+
+#: plugins/ofximport/dialogs/rc.cpp:4
+msgid "Online Banking Account Setup"
+msgstr "Online Banking Account Setup"
+
+#: plugins/ofximport/dialogs/rc.cpp:5
+msgid "Select Financial Institution"
+msgstr "Select Financial Institution"
+
+#: plugins/ofximport/dialogs/rc.cpp:6
+msgid "Please select your financial institution from the list below..."
+msgstr "Please select your financial institution from the list below..."
+
+#: plugins/ofximport/dialogs/rc.cpp:7
+msgid "Automatic"
+msgstr "Automatic"
+
+#: plugins/ofximport/dialogs/rc.cpp:8
+msgid "Financial Institution"
+msgstr "Financial Institution"
+
+#: plugins/ofximport/dialogs/rc.cpp:9
+msgid "Manual"
+msgstr "Manual"
+
+#: plugins/ofximport/dialogs/rc.cpp:10
+msgid "Org"
+msgstr "Org"
+
+#: plugins/ofximport/dialogs/rc.cpp:11
+msgid "FID"
+msgstr "FID"
+
+#: dialogs/settings/rc.cpp:120
+#: plugins/ofximport/dialogs/rc.cpp:12
+#: widgets/rc.cpp:46
+msgid "URL"
+msgstr "URL"
+
+#: plugins/ofximport/dialogs/rc.cpp:13
+msgid "Enter Login Details"
+msgstr "Enter Login Details"
+
+#: plugins/ofximport/dialogs/rc.cpp:14
+msgid "Please enter the username and password you use to log into this bank for online banking. Please note that many banks require a separate signup, and assign a separate PIN or password just for online banking from home."
+msgstr "Please enter the username and password you use to log into this bank for online banking. Please note that many banks require a separate signup, and assign a separate PIN or password just for online banking from home."
+
+#: plugins/ofximport/dialogs/rc.cpp:15
+msgid "Connection Details"
+msgstr "Connection Details"
+
+#: plugins/ofximport/dialogs/rc.cpp:16
+msgid "Username"
+msgstr "Username"
+
+#: plugins/ofximport/dialogs/rc.cpp:17
+#: plugins/ofximport/dialogs/rc.cpp:36
+msgid "Header Version"
+msgstr "Header Version"
+
+#: plugins/ofximport/dialogs/rc.cpp:18
+#: plugins/ofximport/dialogs/rc.cpp:37
+msgid "Identify as"
+msgstr "Identify as"
+
+#: dialogs/rc.cpp:742
+#: plugins/ofximport/dialogs/rc.cpp:19
+msgid "Password"
+msgstr "Password"
+
+#: plugins/ofximport/dialogs/rc.cpp:20
+msgid "Select Account"
+msgstr "Select Account"
+
+#: plugins/ofximport/dialogs/rc.cpp:21
+msgid "Please select the account from your financial institution from the list below which matches this account."
+msgstr "Please select the account from your financial institution from the list below which matches this account."
+
+#: plugins/ofximport/dialogs/rc.cpp:24
+msgid "Bank"
+msgstr "Bank"
+
+#: plugins/ofximport/dialogs/rc.cpp:25
+msgid "Branch"
+msgstr "Branch"
+
+#: plugins/ofximport/dialogs/rc.cpp:26
+msgid "WizardPage"
+msgstr "WizardPage"
+
+#: plugins/ofximport/dialogs/rc.cpp:27
+msgid "Congratulations! You have successfully set up your bank for online banking via OFX."
+msgstr "Congratulations! You have successfully set up your bank for online banking via OFX."
+
+#: plugins/ofximport/dialogs/rc.cpp:28
+msgid "Account Details"
+msgstr "Account Details"
+
+#: plugins/ofximport/dialogs/rc.cpp:29
+#: plugins/ofximport/dialogs/rc.cpp:31
+msgid "&lt;Not configured&gt;"
+msgstr "&lt;Not configured&gt;"
+
+#: plugins/ofximport/dialogs/rc.cpp:30
+msgid "BANK/BROKER:"
+msgstr "BANK/BROKER:"
+
+#: plugins/ofximport/dialogs/rc.cpp:32
+msgid "Unavailable"
+msgstr "Unavailable"
+
+#: plugins/ofximport/dialogs/rc.cpp:33
+msgid "ACCOUNT:"
+msgstr "ACCOUNT:"
+
+#: plugins/ofximport/dialogs/rc.cpp:34
+msgid "STATUS:"
+msgstr "STATUS:"
+
+#: plugins/ofximport/dialogs/rc.cpp:35
+msgid "OFX Details"
+msgstr "OFX Details"
+
+#: plugins/ofximport/dialogs/rc.cpp:38
+msgid "Start date of import"
+msgstr "Start date of import"
+
+#: plugins/ofximport/dialogs/rc.cpp:39
+msgid "To&day minus"
+msgstr "To&day minus"
+
+#: plugins/ofximport/dialogs/rc.cpp:40
+msgid "days"
+msgstr "days"
+
+#: plugins/ofximport/dialogs/rc.cpp:41
+msgid "Last &update"
+msgstr "Last &update"
+
+#: plugins/ofximport/dialogs/rc.cpp:42
+msgid "Pi&ck date"
+msgstr "Pi&ck date"
+
+#: plugins/ofximport/dialogs/rc.cpp:43
+msgid "Name is derived from"
+msgstr "Name is derived from"
+
+#: plugins/ofximport/dialogs/rc.cpp:44
+msgid "P&AYEEID"
+msgstr "P&AYEEID"
+
+#: plugins/ofximport/dialogs/rc.cpp:45
+msgid "&NAME"
+msgstr "&NAME"
+
+#: plugins/ofximport/dialogs/rc.cpp:46
+msgid "field if both are present in download"
+msgstr "field if both are present in download"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:81
+msgid "Quicken Windows 2003"
+msgstr "Quicken Windows 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:82
+msgid "Quicken Windows 2004"
+msgstr "Quicken Windows 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:83
+msgid "Quicken Windows 2005"
+msgstr "Quicken Windows 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:84
+msgid "Quicken Windows 2006"
+msgstr "Quicken Windows 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:85
+msgid "Quicken Windows 2007"
+msgstr "Quicken Windows 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:86
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:111
+msgid "Quicken Windows 2008"
+msgstr "Quicken Windows 2008"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:89
+msgid "MS-Money 2003"
+msgstr "MS-Money 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:90
+msgid "MS-Money 2004"
+msgstr "MS-Money 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:91
+msgid "MS-Money 2005"
+msgstr "MS-Money 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:92
+msgid "MS-Money 2006"
+msgstr "MS-Money 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:93
+msgid "MS-Money 2007"
+msgstr "MS-Money 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:94
+msgid "MS-Money Plus"
+msgstr "MS-Money Plus"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:91
+msgid "Report Configuration"
+msgstr "Report configuration"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:117
+#: dialogs/kreportconfigurationfilterdlg.cpp:135
+msgid "Rows/Columns"
+msgstr "Rows/Columns"
+
+#: dialogs/investtransactioneditor.cpp:203
+#: dialogs/investtransactioneditor.cpp:537
+#: dialogs/investtransactioneditor.cpp:579
+#: dialogs/rc.cpp:103
+#: dialogs/rc.cpp:158
+#: dialogs/rc.cpp:245
+#: dialogs/rc.cpp:750
+#: dialogs/rc.cpp:794
+#: widgets/kmymoneyaccountselector.cpp:182
+#: widgets/register.cpp:64
+#: widgets/register.cpp:567
+#: widgets/transaction.cpp:1500
+msgid "Security"
+msgstr "Security"
+
+#: dialogs/investtransactioneditor.cpp:211
+msgid "Asset account"
+msgstr "Asset account"
+
+#: dialogs/investtransactioneditor.cpp:1073
+msgid "Price/Share"
+msgstr "Price per share"
+
+#: dialogs/kmergetransactionsdlg.cpp:39
+msgid "Merge Transactions"
+msgstr "Merge Transactions"
+
+#: dialogs/kmergetransactionsdlg.cpp:40
+msgid "Are you sure you wish to merge these transactions?"
+msgstr "Are you sure you wish to merge these transactions?"
+
+#: dialogs/kstartdlg.cpp:59
+msgid "Start Dialog"
+msgstr "Start Dialog"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Templates"
+msgstr "Templates"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Select templates"
+msgstr "Select templates"
+
+#: dialogs/kstartdlg.cpp:80
+#: dialogs/kstartdlg.cpp:119
+msgid "New KMyMoney document"
+msgstr "New KMyMoney document"
+
+#: dialogs/kstartdlg.cpp:90
+msgid "Open a KMyMoney document"
+msgstr "Open a KMyMoney document"
+
+#: dialogs/kstartdlg.cpp:96
+msgid ""
+"%1|KMyMoney files (*.kmy)\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|KMyMoney files (*.kmy)\n"
+"%2|All files (*.*)"
+
+#: dialogs/kstartdlg.cpp:102
+msgid "Recent Files"
+msgstr "Recent Files"
+
+#: dialogs/kstartdlg.cpp:217
+msgid "Blank Document"
+msgstr "Blank Document"
+
+#: dialogs/knewbudgetdlg.cpp:71
+msgid "Please specify a budget name"
+msgstr "Please specify a budget name"
+
+#: dialogs/kgncpricesourcedlg.cpp:48
+#, c-format
+msgid "Investment: %1"
+msgstr "Investment: %1"
+
+#: dialogs/kgncpricesourcedlg.cpp:49
+#, c-format
+msgid "Quote source: %1"
+msgstr "Quote source: %1"
+
+#: dialogs/kmymoneypricedlg.cpp:62
+#: dialogs/ksecuritylisteditor.cpp:69
+msgid "Delete this entry"
+msgstr "Delete this entry"
+
+#: dialogs/ksecuritylisteditor.cpp:70
+msgid "Remove this security item from the file"
+msgstr "Remove this security item from the file"
+
+#: dialogs/ksecuritylisteditor.cpp:73
+msgid "&Add"
+msgstr "&Add"
+
+#: dialogs/kmymoneypricedlg.cpp:68
+#: dialogs/ksecuritylisteditor.cpp:75
+msgid "Add a new entry"
+msgstr "Add a new entry"
+
+#: dialogs/ksecuritylisteditor.cpp:76
+msgid "Create a new security entry."
+msgstr "Create a new security entry"
+
+#: dialogs/keditequityentrydlg.cpp:77
+#: dialogs/kmymoneypricedlg.cpp:74
+#: dialogs/ksecuritylisteditor.cpp:81
+msgid "Modify the selected entry"
+msgstr "Modify the selected entry"
+
+#: dialogs/ksecuritylisteditor.cpp:82
+msgid "Change the security information of the selected entry."
+msgstr "Change the security information of the selected entry."
+
+#: dialogs/kmymoneypricedlg.cpp:80
+#: dialogs/ksecuritylisteditor.cpp:87
+msgid "Close the dialog"
+msgstr "Close the dialog"
+
+#: dialogs/kmymoneypricedlg.cpp:81
+#: dialogs/ksecuritylisteditor.cpp:88
+msgid "Use this to close the dialog and return to the application."
+msgstr "Use this to close the dialog and return to the application"
+
+#: dialogs/ksecuritylisteditor.cpp:184
+msgid "Do you really want to remove the currency <b>%1</b> from the file?</p><i>Note: It is currently not supported to add currencies.</i>"
+msgstr "Do you really want to remove the currency <b>%1</b> from the file?</p><i>Note: It is currently not supported to add currencies.</i>"
+
+#: dialogs/ksecuritylisteditor.cpp:187
+msgid "Do you really want to remove the %1 <b>%2</b> from the file?"
+msgstr "Do you really want to remove the %1 <b>%2</b> from the file?"
+
+#: dialogs/ksecuritylisteditor.cpp:190
+msgid "Delete security"
+msgstr "Delete security"
+
+#: dialogs/kmymoneypricedlg.cpp:63
+msgid "Remove this price item from the file"
+msgstr "Remove this price item from the file"
+
+#: dialogs/kmymoneypricedlg.cpp:66
+#: dialogs/mymoneyqifprofileeditor.cpp:94
+msgid "&New"
+msgstr "&New"
+
+#: dialogs/kmymoneypricedlg.cpp:69
+msgid "Create a new price entry."
+msgstr "Create a new price entry"
+
+#: dialogs/kmymoneypricedlg.cpp:75
+msgid "Change the details of selected price information."
+msgstr "Change the details of selected price information."
+
+#: dialogs/kmymoneypricedlg.cpp:201
+#: widgets/kmymoneypriceview.cpp:309
+msgid "Do you really want to delete the selected price entry?"
+msgstr "Do you really want to delete the selected price entry?"
+
+#: dialogs/kmymoneypricedlg.cpp:201
+#: widgets/kmymoneypriceview.cpp:309
+msgid "Delete price information"
+msgstr "Delete price information"
+
+#: dialogs/kchooseimportexportdlg.cpp:46
+msgid ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+
+#: dialogs/kchooseimportexportdlg.cpp:50
+#: dialogs/rc.cpp:22
+msgid "Choose import type:"
+msgstr "Choose import type:"
+
+#: dialogs/kchooseimportexportdlg.cpp:51
+#: dialogs/rc.cpp:20
+msgid "Choose Import Type Dialog"
+msgstr "Choose Import Type Dialog"
+
+#: dialogs/kchooseimportexportdlg.cpp:53
+msgid ""
+"Please choose the type of export you wish to perform. A simple explanation\n"
+"of the export type is available at the bottom of the screen and is updated when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an export type please press the OK button."
+msgstr ""
+"Please choose the type of export you wish to perform. A simple explanation\n"
+"of the export type is available at the bottom of the screen and is updated when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an export type please press the OK button."
+
+#: dialogs/kchooseimportexportdlg.cpp:57
+msgid "Choose export type:"
+msgstr "Choose export type:"
+
+#: dialogs/kchooseimportexportdlg.cpp:58
+msgid "Choose Export Type Dialog"
+msgstr "Choose Export Type Dialog"
+
+#: dialogs/kchooseimportexportdlg.cpp:78
+msgid ""
+"QIF files are created by the popular accounting program Quicken.\n"
+"Another dialog will appear, if you choose this type, asking for further\n"
+"information relevant to the Quicken format."
+msgstr ""
+"QIF files are created by the popular accounting program Quicken.\n"
+"Another dialog will appear, if you choose this type, asking for further\n"
+"information relevant to the Quicken format."
+
+#: dialogs/kchooseimportexportdlg.cpp:82
+msgid ""
+"The CSV type uses a comma delimeted text file that can be used by\n"
+"most popular spreadsheet programs available for Linux and other operating\n"
+"systems."
+msgstr ""
+"The CSV type uses a comma delimited text file that can be used by\n"
+"most popular spreadsheet programs available for Linux and other operating\n"
+"systems."
+
+#: dialogs/kequitypriceupdatedlg.cpp:222
+msgid "%1 units in %2"
+msgstr "%1 units in %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid "Failed to retrieve an exchange rate for %1 from %2. It will be skipped this time."
+msgstr "Failed to retrieve an exchange rate for %1 from %2. It will be skipped this time."
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid "Price Update Failed"
+msgstr "Price Update Failed"
+
+#: dialogs/kequitypriceupdatedlg.cpp:427
+msgid "Failed to retrieve a quote for %1 from %2. Press <b>No</b> to remove the online price source from this security permanently, <b>Yes</b> to continue updating this security during future price updates or <b>Cancel</b> to stop the current update operation."
+msgstr "Failed to retrieve a quote for %1 from %2. Press <b>No</b> to remove the online price source from this security permanently, <b>Yes</b> to continue updating this security during future price updates or <b>Cancel</b> to stop the current update operation."
+
+#: dialogs/kequitypriceupdatedlg.cpp:427
+#: dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Price Update Failed"
+msgstr "Price Update Failed"
+
+#: dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Cannot update security <b>%1</b>: %2"
+msgstr "Cannot update security <b>%1</b>: %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:528
+msgid "Price for %1 updated (id %2)"
+msgstr "Price for %1 updated (id %2)"
+
+#: dialogs/kequitypriceupdatedlg.cpp:534
+msgid "Received an invalid price for %1, unable to update."
+msgstr "Received an invalid price for %1, unable to update."
+
+#: dialogs/kequitypriceupdatedlg.cpp:554
+msgid "Received a price for %1 (id %2), but this symbol is not on the list! Aborting entire update."
+msgstr "Received a price for %1 (id %2), but this symbol is not on the list! Aborting entire update."
+
+#: dialogs/transactioneditor.cpp:222
+msgid "The number <b>%1</b> has already been used in account <b>%2</b>. Do you want to replace it with the next available number?"
+msgstr "The number <b>%1</b> has already been used in account <b>%2</b>. Do you want to replace it with the next available number?"
+
+#: dialogs/transactioneditor.cpp:222
+msgid "Duplicate number"
+msgstr "Duplicate number"
+
+#: dialogs/transactioneditor.cpp:303
+msgid "This transaction has more than two splits and is based on a different currency (%1). Using this account to modify the transaction is currently not very well supported by KMyMoney and may result in false results."
+msgstr "This transaction has more than two splits and is based on a different currency (%1). Using this account to modify the transaction is currently not very well supported by KMyMoney and may result in false results."
+
+#: dialogs/transactioneditor.cpp:305
+msgid "KMyMoney was not able to find a more appropriate account to edit this transaction. Nevertheless, you are allowed to modify the transaction. If you don't want to edit this transaction, please cancel from editing next."
+msgstr "KMyMoney was not able to find a more appropriate account to edit this transaction. Nevertheless, you are allowed to modify the transaction. If you don't want to edit this transaction, please cancel from editing next."
+
+#: dialogs/transactioneditor.cpp:307
+msgid "Using e.g. <b>%1</b> to edit this transaction is a better choice. Nevertheless, you are allowed to modify the transaction. If you want to use the suggested account instead, please cancel from editing next and change the view to the suggested account."
+msgstr "Using e.g. <b>%1</b> to edit this transaction is a better choice. Nevertheless, you are allowed to modify the transaction. If you want to use the suggested account instead, please cancel from editing next and change the view to the suggested account."
+
+#: dialogs/transactioneditor.cpp:410
+msgid "This transaction has more than two splits and is originally based on a different currency (%1). Using this account to modify the transaction may result in rounding errors. Do you want to continue?"
+msgstr "This transaction has more than two splits and is originally based on a different currency (%1). Using this account to modify the transaction may result in rounding errors. Do you want to continue?"
+
+#: dialogs/transactioneditor.cpp:412
+msgid "At least one of the selected transactions has more than two splits and is originally based on a different currency (%1). Using this account to modify the transactions may result in rounding errors. Do you want to continue?"
+msgstr "At least one of the selected transactions has more than two splits and is originally based on a different currency (%1). Using this account to modify the transactions may result in rounding errors. Do you want to continue?"
+
+#: dialogs/transactioneditor.cpp:557
+msgid "Storing transactions"
+msgstr "Storing transactions"
+
+#: dialogs/transactioneditor.cpp:603
+#: widgets/kmymoneybriefschedule.cpp:65
+msgid "&Enter"
+msgstr "&Enter"
+
+#: dialogs/transactioneditor.cpp:606
+msgid "Use this to enter the transaction into the ledger."
+msgstr "Use this to enter the transaction into the ledger."
+
+#: dialogs/transactioneditor.cpp:607
+msgid "&Schedule"
+msgstr "&Schedule"
+
+#: dialogs/transactioneditor.cpp:609
+msgid "Accepts the entered data and stores it as schedule"
+msgstr "Accepts the entered data and stores it as schedule"
+
+#: dialogs/transactioneditor.cpp:610
+msgid "Use this to schedule the transaction for later entry into the ledger."
+msgstr "Use this to schedule the transaction for later entry into the ledger."
+
+#: dialogs/transactioneditor.cpp:612
+msgid "The transaction you are about to enter has a post date in the future.<br/><br/>Do you want to enter it in the ledger or add it to the schedules?"
+msgstr "The transaction you are about to enter has a post date in the future.<br/><br/>Do you want to enter it in the ledger or add it to the schedules?"
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"_: Dialog caption for 'Enter or schedule' dialog\n"
+"Enter or schedule?"
+msgstr "Enter or schedule?"
+
+#: dialogs/transactioneditor.cpp:671
+msgid "The balance of account <b>%1</b> dropped below the warning balance of %2."
+msgstr "The balance of account <b>%1</b> dropped below the warning balance of %2."
+
+#: dialogs/transactioneditor.cpp:677
+msgid "The balance of account <b>%1</b> dropped below the minimum balance of %2."
+msgstr "The balance of account <b>%1</b> dropped below the minimum balance of %2."
+
+#: dialogs/transactioneditor.cpp:683
+msgid "The balance of account <b>%1</b> dropped below the maximum credit warning limit of %2."
+msgstr "The balance of account <b>%1</b> dropped below the maximum credit warning limit of %2."
+
+#: dialogs/transactioneditor.cpp:689
+msgid "The balance of account <b>%1</b> dropped below the maximum credit limit of %2."
+msgstr "The balance of account <b>%1</b> dropped below the maximum credit limit of %2."
+
+#: dialogs/transactioneditor.cpp:740
+msgid "Payer/Receiver"
+msgstr "Payer/Receiver"
+
+#: dialogs/transactioneditor.cpp:748
+msgid "Category/Account"
+msgstr "Category/Account"
+
+#: dialogs/transactioneditor.cpp:980
+#: dialogs/transactioneditor.cpp:1016
+#: dialogs/transactioneditor.cpp:1378
+#: dialogs/transactioneditor.cpp:1399
+#: dialogs/transactioneditor.cpp:1422
+#: dialogs/transactioneditor.cpp:1443
+#: dialogs/transactioneditor.cpp:1505
+#: dialogs/transactioneditor.cpp:1509
+#: widgets/transaction.cpp:902
+msgid "Transfer from"
+msgstr "Transfer from"
+
+#: dialogs/transactioneditor.cpp:982
+#: dialogs/transactioneditor.cpp:1018
+#: dialogs/transactioneditor.cpp:1401
+#: dialogs/transactioneditor.cpp:1445
+#: dialogs/transactioneditor.cpp:1506
+#: widgets/transaction.cpp:902
+msgid "Transfer to"
+msgstr "Transfer to"
+
+#: dialogs/transactioneditor.cpp:1259
+msgid "Select autofill transaction"
+msgstr "Select autofill transaction"
+
+#: dialogs/transactionmatcher.cpp:77
+msgid "First transaction does not match requirement for matching"
+msgstr "First transaction does not match requirement for matching"
+
+#: dialogs/transactionmatcher.cpp:79
+msgid "Second transaction does not match requirement for matching"
+msgstr "Second transaction does not match requirement for matching"
+
+#: dialogs/transactionmatcher.cpp:83
+#: dialogs/transactionmatcher.cpp:133
+msgid "Splits for %1 have conflicting values (%2,%3)"
+msgstr "Splits for %1 have conflicting values (%2,%3)"
+
+#: dialogs/transactionmatcher.cpp:96
+#: dialogs/transactionmatcher.cpp:149
+msgid "Both of these transactions have been imported into %1. Therefore they cannot be matched. Matching works with one imported transaction and one non-imported transaction."
+msgstr "Both of these transactions have been imported into %1. Therefore they cannot be matched. Matching works with one imported transaction and one non-imported transaction."
+
+#: dialogs/transactionmatcher.cpp:101
+#: dialogs/transactionmatcher.cpp:156
+msgid "Unable to match all splits (%1)"
+msgstr "Unable to match all splits (%1)"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:65
+msgid "Account and transfer account are the same. Please change one."
+msgstr "Account and transfer account are the same. Please change one."
+
+#: dialogs/kconfirmmanualenterdlg.cpp:84
+msgid "Payee changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "Payee changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:92
+#: dialogs/kconfirmmanualenterdlg.cpp:100
+msgid "Account changed. Old: \"%1\", New: \"%2\""
+msgstr "Account changed. Old: \"%1\", New: \"%2\""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:107
+msgid "Account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "Account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:115
+msgid "Transfer account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "Transfer account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:143
+msgid "Category changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "Category changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:151
+#: dialogs/kconfirmmanualenterdlg.cpp:153
+msgid "empty"
+msgstr "empty"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:157
+msgid "Memo changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "Memo changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:166
+msgid "Amount changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "Amount changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:175
+msgid "Reconciliation flag changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "Reconciliation flag changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:182
+msgid "Fatal error in determining data: "
+msgstr "Fatal error in determining data: "
+
+#: dialogs/kselectdatabasedlg.cpp:56
+msgid ""
+"There are no Qt SQL drivers installed in your system.\n"
+"Please consult documentation for your distro, or visit the Qt web site (www.trolltech.com) and search for SQL drivers."
+msgstr ""
+"There are no Qt SQL drivers installed in your system.\n"
+"Please consult documentation for your distro, or visit the Qt web site (www.trolltech.com) and search for SQL drivers."
+
+#: dialogs/kselectdatabasedlg.cpp:100
+msgid "Qt SQL driver %1 is no longer installed on your system"
+msgstr "Qt SQL driver %1 is no longer installed on your system"
+
+#: dialogs/kselectdatabasedlg.cpp:107
+msgid "Qt SQL driver %1 is not suported"
+msgstr "Qt SQL driver %1 is not supported"
+
+#: dialogs/kselectdatabasedlg.cpp:164
+msgid "SQLite files (*.sql);; All files (*.*)"
+msgstr "SQLite files (*.sql);; All files (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:167
+msgid "Select SQLite file"
+msgstr "Select SQLite file"
+
+#: dialogs/kselectdatabasedlg.cpp:188
+msgid "All files (*.*)"
+msgstr "All files (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:191
+msgid "Select output file"
+msgstr "Select output file"
+
+#: dialogs/investactivities.cpp:168
+msgid "%1 (Brokerage)"
+msgstr "%1 (Brokerage)"
+
+#: dialogs/investactivities.cpp:200
+#: dialogs/investactivities.cpp:288
+#: dialogs/investactivities.cpp:425
+#: widgets/transaction.cpp:1548
+msgid "Price/share"
+msgstr "Price per share"
+
+#: dialogs/investactivities.cpp:586
+msgid "Ratio 1/"
+msgstr "Ratio 1/"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid "<p>Please check that all the details in the following dialog are correct and press OK.</p><p>Editable data can be changed and can either be applied to just this occurence or for all subsequent occurences for this schedule. (You will be asked what you intend after pressing OK in the following dialog)</p>"
+msgstr "<p>Please check that all the details in the following dialog are correct and press OK.</p><p>Editable data can be changed and can either be applied to just this occurrence or for all subsequent occurrences for this schedule. (You will be asked what you intend after pressing OK in the following dialog)</p>"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid "Enter scheduled transaction"
+msgstr "Enter scheduled transaction"
+
+#: dialogs/kcsvprogressdlg.cpp:65
+#: dialogs/kexportdlg.cpp:65
+msgid "&Export"
+msgstr "&Export"
+
+#: dialogs/kexportdlg.cpp:67
+#: dialogs/kimportdlg.cpp:68
+msgid "Start operation"
+msgstr "Start operation"
+
+#: dialogs/kexportdlg.cpp:68
+msgid "Use this to start the export operation"
+msgstr "Use this to start the export operation"
+
+#: dialogs/kexportdlg.cpp:71
+#: dialogs/kimportdlg.cpp:72
+msgid "&Browse..."
+msgstr "&Browse..."
+
+#: dialogs/kexportdlg.cpp:73
+#: dialogs/kimportdlg.cpp:74
+msgid "Select filename"
+msgstr "Select filename"
+
+#: dialogs/kexportdlg.cpp:74
+#: dialogs/kimportdlg.cpp:75
+msgid "Use this to select a filename to export to"
+msgstr "Use this to select a filename to export to"
+
+#: dialogs/kexportdlg.cpp:77
+#: dialogs/kimportdlg.cpp:78
+#: dialogs/settings/ksettingsonlinequotes.cpp:64
+#: widgets/kmymoneyonlinequoteconfig.cpp:64
+msgid "&New..."
+msgstr "&New..."
+
+#: dialogs/kexportdlg.cpp:79
+#: dialogs/kimportdlg.cpp:80
+#: dialogs/mymoneyqifprofileeditor.cpp:96
+msgid "Create a new profile"
+msgstr "Create a new profile"
+
+#: dialogs/kexportdlg.cpp:80
+#: dialogs/kimportdlg.cpp:81
+msgid "Use this to open the profile editor"
+msgstr "Use this to open the profile editor"
+
+#: dialogs/keditloanwizard.cpp:56
+msgid "Edit loan wizard"
+msgstr "Edit loan wizard"
+
+#: dialogs/keditloanwizard.cpp:58
+msgid "Please enter the date from which on the following changes will be effective. The date entered must be later than the opening date of this account (%1), but must not be in the future. The default will be today."
+msgstr "Please enter the date from which on the following changes will be effective. The date entered must be later than the opening date of this account (%1), but must not be in the future. The default will be today."
+
+#: dialogs/keditloanwizard.cpp:76
+msgid "Note: you will not be able to modify this account today, because the opening date \"%1\" is in the future. Please revisit this dialog when the time has come."
+msgstr "Note: you will not be able to modify this account today, because the opening date \"%1\" is in the future. Please revisit this dialog when the time has come."
+
+#: dialogs/keditloanwizard.cpp:244
+msgid "Your previous selection was \"%1\". If you select another option, KMyMoney will dismiss the changes you have just entered. Do you wish to proceed?"
+msgstr "Your previous selection was \"%1\". If you select another option, KMyMoney will dismiss the changes you have just entered. Do you wish to proceed?"
+
+#: dialogs/kcategoryreassigndlg.cpp:81
+msgid "At least one transaction/schedule still references the category <b>%1</b>. However, at least one category with the same currency must exist so that the transactions/schedules can be reassigned."
+msgstr "At least one transaction/schedule still references the category <b>%1</b>. However, at least one category with the same currency must exist so that the transactions/schedules can be reassigned."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid "This dialog does not allow to create new categories. Please pick a category from the list."
+msgstr "This dialog does not allow to create new categories. Please pick a category from the list."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid "Category creation"
+msgstr "Category creation"
+
+#: dialogs/kbackupdlg.cpp:61
+msgid "C&hoose..."
+msgstr "C&hoose..."
+
+#: dialogs/kbackupdlg.cpp:63
+msgid "Select mount point"
+msgstr "Select mount point"
+
+#: dialogs/kbackupdlg.cpp:64
+msgid "Use this to browse to the mount point."
+msgstr "Use this to browse to the mount point."
+
+#: dialogs/keditscheduledlg.cpp:293
+msgid "Next due date"
+msgstr "Next due date"
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid "You have turned on the GPG encryption support. This means, that new files will be stored encrypted. Existing files will not be encrypted automatically. To achieve encryption of existing files, please use the <b>File/Save as...</b> feature and store the file under a different name. Once confident with the result, feel free to delete the old file and rename the encrypted one to the old name."
+msgstr "You have turned on the GPG encryption support. This means, that new files will be stored encrypted. Existing files will not be encrypted automatically. To achieve encryption of existing files, please use the <b>File/Save as...</b> feature and store the file under a different name. Once confident with the result, feel free to delete the old file and rename the encrypted one to the old name."
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid "GPG encryption activated"
+msgstr "GPG encryption activated"
+
+#: dialogs/settings/ksettingshome.cpp:51
+msgid "&Up"
+msgstr "&Up"
+
+#: dialogs/settings/ksettingshome.cpp:53
+msgid "Move selected item up"
+msgstr "Move selected item up"
+
+#: dialogs/settings/ksettingshome.cpp:54
+msgid "Use this to move the selected item up by one position in the list."
+msgstr "Use this to move the selected item up by one position in the list."
+
+#: dialogs/settings/ksettingshome.cpp:55
+msgid "&Down"
+msgstr "&Down"
+
+#: dialogs/settings/ksettingshome.cpp:57
+msgid "Move selected item down"
+msgstr "Move selected item down"
+
+#: dialogs/settings/ksettingshome.cpp:58
+msgid "Use this to move the selected item down by one position in the list."
+msgstr "Use this to move the selected item down by one position in the list."
+
+#: dialogs/settings/rc.cpp:1
+msgid "Color settings"
+msgstr "Colour settings"
+
+#: dialogs/settings/rc.cpp:2
+msgid "Foreground"
+msgstr "Foreground"
+
+#: dialogs/settings/rc.cpp:3
+msgid "Text colors"
+msgstr "Text colours"
+
+#: dialogs/settings/rc.cpp:4
+msgid "Grid color"
+msgstr "Grid colour"
+
+#: dialogs/settings/rc.cpp:5
+msgid "Erronous transaction"
+msgstr "Erronous transaction"
+
+#: dialogs/settings/rc.cpp:6
+msgid "Value with missing conversion rate"
+msgstr "Value with missing conversion rate"
+
+#: dialogs/settings/rc.cpp:7
+msgid "Negative value"
+msgstr "Negative value"
+
+#: dialogs/settings/rc.cpp:8
+msgid "Background"
+msgstr "Background"
+
+#: dialogs/settings/rc.cpp:10
+msgid "List background colors"
+msgstr "List background colours"
+
+#: dialogs/settings/rc.cpp:11
+msgid "Normal"
+msgstr "Normal"
+
+#: dialogs/settings/rc.cpp:12
+msgid "Alternate"
+msgstr "Alternate"
+
+#: dialogs/settings/rc.cpp:13
+msgid "Special background colors"
+msgstr "Special background colours"
+
+#: dialogs/settings/rc.cpp:14
+msgid "Ledger group separator"
+msgstr "Ledger group separator"
+
+#: dialogs/settings/rc.cpp:15
+msgid "Required field"
+msgstr "Required field"
+
+#: dialogs/settings/rc.cpp:16
+msgid "Imported transaction"
+msgstr "Imported transaction"
+
+#: dialogs/settings/rc.cpp:17
+msgid "Matched transaction"
+msgstr "Matched transaction"
+
+#: dialogs/settings/rc.cpp:18
+msgid "Font settings"
+msgstr "Font settings"
+
+#: dialogs/settings/rc.cpp:19
+msgid "Use system fonts"
+msgstr "Use system fonts"
+
+#: dialogs/settings/rc.cpp:20
+msgid "Individual font settings"
+msgstr "Individual font settings"
+
+#: dialogs/settings/rc.cpp:24
+msgid "Number of Days of Account Cycle:"
+msgstr "Number of Days of Account Cycle:"
+
+#: dialogs/settings/rc.cpp:26
+msgid "Number of Days to Forecast:"
+msgstr "Number of Days to Forecast:"
+
+#: dialogs/settings/rc.cpp:27
+msgid "Forecast Method"
+msgstr "Forecast Method"
+
+#: dialogs/settings/rc.cpp:28
+msgid "Scheduled and Future Transactions"
+msgstr "Scheduled and Future Transactions"
+
+#: dialogs/settings/rc.cpp:29
+msgid "History-based"
+msgstr "History-based"
+
+#: dialogs/settings/rc.cpp:30
+msgid "History-based settings"
+msgstr "History-based settings"
+
+#: dialogs/settings/rc.cpp:31
+msgid "Number of Cycles to use in Forecast:"
+msgstr "Number of Cycles to use in Forecast:"
+
+#: dialogs/settings/rc.cpp:36
+msgid "General Settings"
+msgstr "General Settings"
+
+#: dialogs/settings/rc.cpp:37
+msgid "Global"
+msgstr "Global"
+
+#: dialogs/settings/rc.cpp:38
+msgid "Startup page options"
+msgstr "Startup page options"
+
+#: dialogs/settings/rc.cpp:39
+msgid "Start with homepage"
+msgstr "Start with home page"
+
+#: dialogs/settings/rc.cpp:40
+msgid "Start with last selected view"
+msgstr "Start with last selected view"
+
+#: dialogs/settings/rc.cpp:41
+msgid "Precision settings"
+msgstr "Precision settings"
+
+#: dialogs/settings/rc.cpp:42
+msgid "Price precision"
+msgstr "Price precision"
+
+#: dialogs/settings/rc.cpp:43
+msgid "digits"
+msgstr "digits"
+
+#: dialogs/settings/rc.cpp:44
+msgid "Autosave options"
+msgstr "Autosave options"
+
+#: dialogs/settings/rc.cpp:45
+msgid "Autosave periodically"
+msgstr "Autosave periodically"
+
+#: dialogs/settings/rc.cpp:46
+msgid "minutes"
+msgstr "minutes"
+
+#: dialogs/settings/rc.cpp:47
+msgid "Fiscal Year"
+msgstr "Fiscal Year"
+
+#: dialogs/settings/rc.cpp:48
+msgid "Your fiscal year starts on"
+msgstr "Your fiscal year starts on"
+
+#: dialogs/settings/rc.cpp:49
+msgid "January"
+msgstr "January"
+
+#: dialogs/settings/rc.cpp:50
+msgid "February"
+msgstr "February"
+
+#: dialogs/settings/rc.cpp:51
+msgid "March"
+msgstr "March"
+
+#: dialogs/settings/rc.cpp:52
+msgid "April"
+msgstr "April"
+
+#: dialogs/settings/rc.cpp:53
+msgid "May"
+msgstr "May"
+
+#: dialogs/settings/rc.cpp:54
+msgid "June"
+msgstr "June"
+
+#: dialogs/settings/rc.cpp:55
+msgid "July"
+msgstr "July"
+
+#: dialogs/settings/rc.cpp:56
+msgid "August"
+msgstr "August"
+
+#: dialogs/settings/rc.cpp:57
+msgid "September"
+msgstr "September"
+
+#: dialogs/settings/rc.cpp:58
+msgid "October"
+msgstr "October"
+
+#: dialogs/settings/rc.cpp:59
+msgid "November"
+msgstr "November"
+
+#: dialogs/settings/rc.cpp:60
+msgid "December"
+msgstr "December"
+
+#: dialogs/settings/rc.cpp:61
+msgid "Views"
+msgstr "Views"
+
+#: dialogs/settings/rc.cpp:62
+msgid "Synchronize account selection of ledger and investment view"
+msgstr "Synchronise account selection of ledger and investment view"
+
+#: dialogs/settings/rc.cpp:63
+msgid "Check the views you want to enable, uncheck those you want to hide, because you don't need the functionality."
+msgstr "Check the views you want to enable, uncheck those you want to hide, because you don't need the functionality."
+
+#: dialogs/settings/rc.cpp:64
+msgid "Icon size of navigation bar"
+msgstr "Icon size of navigation bar"
+
+#: dialogs/settings/rc.cpp:65
+msgid "Micro (16px)"
+msgstr "Micro (16px)"
+
+#: dialogs/settings/rc.cpp:66
+msgid "Small (32px)"
+msgstr "Small (32px)"
+
+#: dialogs/settings/rc.cpp:67
+msgid "Normal (48px)"
+msgstr "Normal (48px)"
+
+#: dialogs/settings/rc.cpp:68
+msgid "Large (64px)"
+msgstr "Large (64px)"
+
+#: dialogs/settings/rc.cpp:69
+msgid "Show title bar on each page"
+msgstr "Show title bar on each page"
+
+#: dialogs/rc.cpp:835
+#: dialogs/settings/rc.cpp:70
+msgid "Filter"
+msgstr "Filter"
+
+#: dialogs/settings/rc.cpp:71
+msgid "Accounts / Categories"
+msgstr "Accounts / Categories"
+
+#: dialogs/settings/rc.cpp:72
+msgid "Don't show unused categories"
+msgstr "Don't show unused categories"
+
+#: dialogs/settings/rc.cpp:73
+msgid "This option hides all categories in the categories view that are not used in at least a single transaction. They are still shown in the category selection lists."
+msgstr "This option hides all categories in the categories view that are not used in at least a single transaction. They are still shown in the category selection lists."
+
+#: dialogs/settings/rc.cpp:74
+msgid "Don't show closed accounts"
+msgstr "Don't show closed accounts"
+
+#: dialogs/settings/rc.cpp:75
+msgid ""
+"This option hides all accounts that have been closed by the user in views and selection lists.\n"
+"\n"
+"You can use <b>View/Show all accounts</b> to temporarily show hidden accounts in the views."
+msgstr ""
+"This option hides all accounts that have been closed by the user in views and selection lists.\n"
+"\n"
+"You can use <b>View/Show all accounts</b> to temporarily show hidden accounts in the views."
+
+#: dialogs/settings/rc.cpp:76
+msgid "Show equity accounts"
+msgstr "Show equity accounts"
+
+#: dialogs/rc.cpp:332
+#: dialogs/settings/rc.cpp:77
+#: widgets/rc.cpp:160
+msgid "Schedules"
+msgstr "Schedules"
+
+#: dialogs/settings/rc.cpp:78
+msgid "Don't show finished schedules"
+msgstr "Don't show finished schedules"
+
+#: dialogs/settings/rc.cpp:79
+msgid "This option hides all finished schedules in the schedules view."
+msgstr "This option hides all finished schedules in the schedules view."
+
+#: dialogs/settings/rc.cpp:81
+msgid "Don't show transactions prior to"
+msgstr "Don't show transactions prior to"
+
+#: dialogs/settings/rc.cpp:82
+msgid "Don't show reconciled transactions"
+msgstr "Don't show reconciled transactions"
+
+#: dialogs/settings/rc.cpp:83
+msgid "This option hides all reconciled transactions in the ledger view."
+msgstr "This option hides all reconciled transactions in the ledger view."
+
+#: dialogs/settings/rc.cpp:84
+#: widgets/rc.cpp:22
+msgid "GPG encryption settings"
+msgstr "GPG encryption settings"
+
+#: dialogs/settings/rc.cpp:85
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Access to the settings is disabled if <b>GPG</b> could not be detected on your system. In this case, please make sure that <b>GPG</b> is working properly for the current user.<p>\n"
+"The <i>additional recovery encryption</i> is only accessible, if the necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is found in your keyring."
+msgstr ""
+"This page allows you to set the parameters for encrypted file storage of your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Access to the settings is disabled if <b>GPG</b> could not be detected on your system. In this case, please make sure that <b>GPG</b> is working properly for the current user.<p>\n"
+"The <i>additional recovery encryption</i> is only accessible, if the necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is found in your keyring."
+
+#: dialogs/settings/rc.cpp:86
+#: widgets/rc.cpp:24
+msgid "Use GPG encryption"
+msgstr "Use GPG encryption"
+
+#: dialogs/settings/rc.cpp:87
+msgid "GPG encryption"
+msgstr "GPG encryption"
+
+#: dialogs/settings/rc.cpp:88
+msgid "Your key"
+msgstr "Your key"
+
+#: dialogs/settings/rc.cpp:89
+msgid "This combo box lists all the secret keys you have in your keyring. Select the one you want to use for encryption when saving to a file."
+msgstr "This combo box lists all the secret keys you have in your keyring. Select the one you want to use for encryption when saving to a file."
+
+#: dialogs/settings/rc.cpp:90
+msgid "Additonal keys"
+msgstr "Additonal keys"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:50
+#: dialogs/settings/rc.cpp:91
+msgid "Enter the id of the key you want to use for data encryption. This can either be an e-mail address or the hexadecimal key id. In case of the key id don't forget the leading 0x."
+msgstr "Enter the id of the key you want to use for data encryption. This can either be an e-mail address or the hexadecimal key id. In case of the key id don't forget the leading 0x."
+
+#: dialogs/settings/rc.cpp:92
+#: widgets/rc.cpp:28
+msgid "This symbol denotes, if the key for the given user id has been found in your keyring. It is green when found, dark otherwise."
+msgstr "This symbol denotes, if the key for the given user id has been found in your keyring. It is green when found, dark otherwise."
+
+#: dialogs/kgpgkeyselectiondlg.cpp:61
+#: dialogs/settings/rc.cpp:93
+msgid "Keys for all of the above user ids found"
+msgstr "Keys for all of the above user ids found"
+
+#: dialogs/settings/rc.cpp:94
+#: widgets/rc.cpp:31
+msgid "This symbol denotes, if the KMyMoney recovery key has been found in your keyring. It is green when found, dark otherwise."
+msgstr "This symbol denotes, if the KMyMoney recovery key has been found in your keyring. It is green when found, dark otherwise."
+
+#: dialogs/settings/rc.cpp:95
+msgid "Recover Key available in keyring"
+msgstr "Recover Key available in keyring"
+
+#: dialogs/settings/rc.cpp:96
+msgid "Also encrypt with KMyMoney's recover key"
+msgstr "Also encrypt with KMyMoney's recover key"
+
+#: dialogs/settings/rc.cpp:97
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only the core KMyMoney developers are in posession of the respective private key required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and cannot access your data anymore. With this option activated, the KMyMoney developers can decrypt the data and supply you with it in a readable form. Please be prepared, that you have to answer a few detailed questions about the contents of your data before we will send it out.."
+msgstr ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only the core KMyMoney developers are in possession of the respective private key required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and cannot access your data any more. With this option activated, the KMyMoney developers can decrypt the data and supply you with it in a readable form. Please be prepared, that you have to answer a few detailed questions about the contents of your data before we will send it out.."
+
+#: dialogs/settings/rc.cpp:98
+msgid "Homepage Settings"
+msgstr "Home page Settings"
+
+#: dialogs/settings/rc.cpp:99
+msgid "Up"
+msgstr "Up"
+
+#: dialogs/settings/rc.cpp:100
+msgid "Down"
+msgstr "Down"
+
+#: dialogs/settings/rc.cpp:101
+msgid ""
+"Selected entries are shown on the home page of the application.<p>\n"
+"Use the buttons and checkboxes to customize the layout of the home page."
+msgstr ""
+"Selected entries are shown on the home page of the application.<p>\n"
+"Use the buttons and checkboxes to customise the layout of the home page."
+
+#: dialogs/settings/rc.cpp:102
+msgid "Homepage/Summary page font scaling"
+msgstr "Home page/Summary page font scaling"
+
+#: dialogs/settings/rc.cpp:103
+msgid "Percentage of default font size:"
+msgstr "Percentage of default font size:"
+
+#: dialogs/settings/rc.cpp:104
+msgid "Remember font size when leaving the program if manually changed with mouse-wheel"
+msgstr "Remember font size when leaving the program if manually changed with mouse-wheel"
+
+#: dialogs/settings/rc.cpp:105
+msgid "Information display"
+msgstr "Information display"
+
+#: dialogs/settings/rc.cpp:106
+msgid "Show Account Limit Information"
+msgstr "Show Account Limit Information"
+
+#: dialogs/settings/rc.cpp:110
+#: widgets/rc.cpp:47
+msgid "<i>Enter regular expressions which can be used to parse the data returned from the URL entered above. The symbol, price, and date must be found in the quote data to be usable. You may also try the KMyMoney user's mailinglist at <a href=\"mailto:kmymoney2-user@lists.sourceforge.net\">kmymoney2-user@lists.sourceforge.net</a> to find what settings work for other users in your country.</i>"
+msgstr "<i>Enter regular expressions which can be used to parse the data returned from the URL entered above. The symbol, price, and date must be found in the quote data to be usable. You may also try the KMyMoney user's mailinglist at <a href=\"mailto:kmymoney2-user@lists.sourceforge.net\">kmymoney2-user@lists.sourceforge.net</a> to find what settings work for other users in your country.</i>"
+
+#: dialogs/settings/rc.cpp:113
+#: widgets/rc.cpp:38
+msgid "Regular Expression to extract the symbol from the downloaded data"
+msgstr "Regular Expression to extract the symbol from the downloaded data"
+
+#: dialogs/settings/rc.cpp:114
+#: widgets/rc.cpp:39
+msgid "Regular Expression to extract the price from the downloaded data"
+msgstr "Regular Expression to extract the price from the downloaded data"
+
+#: dialogs/settings/rc.cpp:115
+#: widgets/rc.cpp:41
+msgid "URL to be used to download the quote"
+msgstr "URL to be used to download the quote"
+
+#: dialogs/settings/rc.cpp:116
+#: widgets/rc.cpp:42
+msgid "Enter the URL from which stock quotes will be fetched. <b>%1</b> will be replaced with the symbol for the security being quoted. For currency conversions, <b>%2</b> will be replaced with the currency to be quoted and <b>%1</b> with the currency the quote is based on."
+msgstr "Enter the URL from which stock quotes will be fetched. <b>%1</b> will be replaced with the symbol for the security being quoted. For currency conversions, <b>%2</b> will be replaced with the currency to be quoted and <b>%1</b> with the currency the quote is based on."
+
+#: dialogs/settings/rc.cpp:118
+#: dialogs/settings/rc.cpp:121
+#: widgets/rc.cpp:40
+#: widgets/rc.cpp:44
+msgid "Regular Expression to extract the date from the downloaded data"
+msgstr "Regular Expression to extract the date from the downloaded data"
+
+#: dialogs/rc.cpp:807
+#: dialogs/settings/rc.cpp:119
+#: widgets/rc.cpp:45
+msgid "Date Format"
+msgstr "Date Format"
+
+#: dialogs/settings/rc.cpp:122
+msgid "Skip HTML stripping"
+msgstr "Skip HTML stripping"
+
+#: dialogs/settings/rc.cpp:123
+msgid ""
+"<p>For easier processing of the data returned by the online source, KMyMoney usually strips unused parts before it is parsed with the regular expressions. If matching of the fields relies on those items, then use this option to turn stripping off.</p>\n"
+"\n"
+"<p>The following items are usually removed by stripping:\n"
+"\n"
+"<ul>\n"
+"<li>HTML tags such as <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded characters such as <b>&amp;nbsp;</b></li>\n"
+"<li>duplicate whitespace</li>\n"
+"</ul>\n"
+"</p>"
+msgstr ""
+"<p>For easier processing of the data returned by the online source, KMyMoney usually strips unused parts before it is parsed with the regular expressions. If matching of the fields relies on those items, then use this option to turn stripping off.</p>\n"
+"\n"
+"<p>The following items are usually removed by stripping:\n"
+"\n"
+"<ul>\n"
+"<li>HTML tags such as <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded characters such as <b>&amp;nbsp;</b></li>\n"
+"<li>duplicate whitespace</li>\n"
+"</ul>\n"
+"</p>"
+
+#: dialogs/settings/rc.cpp:127
+msgid "Register settings"
+msgstr "Register settings"
+
+#: dialogs/settings/rc.cpp:128
+msgid "Display"
+msgstr "Display"
+
+#: dialogs/settings/rc.cpp:131
+msgid "Using the ledger lens shows the details for the transaction that has focus in the ledger. Usually, when using the transaction form, only a one line summary is displayed for each transaction as the details are shown in the form."
+msgstr "Using the ledger lens shows the details for the transaction that has focus in the ledger. Usually, when using the transaction form, only a one line summary is displayed for each transaction as the details are shown in the form."
+
+#: dialogs/settings/rc.cpp:133
+msgid "Always show a No. field"
+msgstr "Always show a No. field"
+
+#: dialogs/settings/rc.cpp:134
+msgid "Show group header between transactions"
+msgstr "Show group header between transactions"
+
+#: dialogs/settings/rc.cpp:135
+msgid "Draws a larger header above each group of transaction. The grouping depends on the current sort order."
+msgstr "Draws a larger header above each group of transaction. The grouping depends on the current sort order."
+
+#: dialogs/settings/rc.cpp:136
+msgid "Show header for the previous and current fiscal year"
+msgstr "Show header for the previous and current fiscal year"
+
+#: dialogs/settings/rc.cpp:137
+msgid "Sorting"
+msgstr "Sorting"
+
+#: dialogs/settings/rc.cpp:138
+msgid "Normal view"
+msgstr "Normal view"
+
+#: dialogs/settings/rc.cpp:139
+msgid "Reconciliation view"
+msgstr "Reconciliation view"
+
+#: dialogs/settings/rc.cpp:140
+msgid "Search view"
+msgstr "Search view"
+
+#: dialogs/settings/rc.cpp:141
+msgid "Use the <i>left</i> and <i>right</i> buttons to add and remove sort options. Use the <i>up</i> and <i>down</i> buttons to modify the sort order. Double-Click a selected entry to toggle the sort order between <i>ascending</i> and <i>descending</i>."
+msgstr "Use the <i>left</i> and <i>right</i> buttons to add and remove sort options. Use the <i>up</i> and <i>down</i> buttons to modify the sort order. Double-Click a selected entry to toggle the sort order between <i>ascending</i> and <i>descending</i>."
+
+#: dialogs/settings/rc.cpp:142
+msgid "Data entry"
+msgstr "Data entry"
+
+#: dialogs/settings/rc.cpp:146
+msgid "Use Enter to move between fields"
+msgstr "Use Enter to move between fields"
+
+#: dialogs/settings/rc.cpp:147
+msgid "Match names from start"
+msgstr "Match names from start"
+
+#: dialogs/settings/rc.cpp:148
+msgid "Mark this option, if you always want to match names e.g. for payees from the start. If unset, any substring is matched."
+msgstr "Mark this option, if you always want to match names e.g. for payees from the start. If unset, any sub-string is matched."
+
+#: dialogs/settings/rc.cpp:149
+msgid "Default reconciliation state"
+msgstr "Default reconciliation state"
+
+#: dialogs/rc.cpp:227
+#: dialogs/settings/rc.cpp:150
+#: widgets/kmymoneycombo.cpp:348
+#: widgets/registersearchline.cpp:84
+msgid "Not reconciled"
+msgstr "Not reconciled"
+
+#: dialogs/rc.cpp:228
+#: dialogs/settings/rc.cpp:151
+#: widgets/kmymoneycombo.cpp:347
+#: widgets/registersearchline.cpp:85
+msgid "Cleared"
+msgstr "Cleared"
+
+#: dialogs/settings/rc.cpp:153
+msgid "Default reconciliation state for transactions entered during reconciliation of an account"
+msgstr "Default reconciliation state for transactions entered during reconciliation of an account"
+
+#: dialogs/settings/rc.cpp:154
+msgid "Autofill"
+msgstr "Autofill"
+
+#: dialogs/settings/rc.cpp:155
+msgid "No Autofill"
+msgstr "No Autofill"
+
+#: dialogs/settings/rc.cpp:156
+msgid "Don't do autofill of transaction data at all."
+msgstr "Don't do autofill of transaction data at all."
+
+#: dialogs/settings/rc.cpp:157
+msgid "Same transaction if amount differs less than"
+msgstr "Same transaction if amount differs less than"
+
+#: dialogs/settings/rc.cpp:158
+msgid ""
+"Collect all transactions for the given payee. Treat all transactions that refer to the same category and have an amount with +/- X % as identical. If more than one transaction is found, a list of them is presented to the user.\n"
+"\n"
+"Selecting 0% will list all transactions."
+msgstr ""
+"Collect all transactions for the given payee. Treat all transactions that refer to the same category and have an amount with +/- X % as identical. If more than one transaction is found, a list of them is presented to the user.\n"
+"\n"
+"Selecting 0% will list all transactions."
+
+#: dialogs/settings/rc.cpp:159
+msgid "Two transactions are usually treated identical for autofill, if they refer the same accounts. They are treated as different transactions though, when their amount varies by more than the percentage given here."
+msgstr "Two transactions are usually treated identical for autofill, if they refer the same accounts. They are treated as different transactions though, when their amount varies by more than the percentage given here."
+
+#: dialogs/settings/rc.cpp:160
+msgid ""
+"_: Same transaction if amount differs less than percent.\n"
+"percent."
+msgstr "percent."
+
+#: dialogs/settings/rc.cpp:161
+msgid "with previously most often used transaction for the payee"
+msgstr "with previously most often used transaction for the payee"
+
+#: dialogs/settings/rc.cpp:162
+msgid "The data of the last transaction assigned to the category used most often for this payee is autofilled into the transaction editor."
+msgstr "The data of the last transaction assigned to the category used most often for this payee is autofilled into the transaction editor."
+
+#: dialogs/settings/rc.cpp:164
+msgid "Match transactions within days"
+msgstr "Match transactions within days"
+
+#: dialogs/settings/rc.cpp:165
+msgid "Search for matching transactions within the range of the posting date of the imported transaction +/- the number of given days."
+msgstr "Search for matching transactions within the range of the posting date of the imported transaction +/- the number of given days."
+
+#: dialogs/settings/rc.cpp:166
+msgid "Ask for a new payee's default category"
+msgstr "Ask for a new payee's default category"
+
+#: dialogs/settings/rc.cpp:167
+msgid "Whenever a new payee is detected during import of a statement, the user will be asked to assign a default category for this user when this option is selected."
+msgstr "Whenever a new payee is detected during import of a statement, the user will be asked to assign a default category for this user when this option is selected."
+
+#: dialogs/settings/rc.cpp:168
+msgid "Schedule Settings"
+msgstr "Schedule Settings"
+
+#: dialogs/settings/rc.cpp:169
+msgid "Startup options"
+msgstr "Startup options"
+
+#: dialogs/settings/rc.cpp:170
+msgid "Check schedules on startup"
+msgstr "Check schedules on startup"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:60
+#: widgets/kmymoneyonlinequoteconfig.cpp:60
+msgid "Delete the selected source entry"
+msgstr "Delete the selected source entry"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:61
+#: widgets/kmymoneyonlinequoteconfig.cpp:61
+msgid "Use this to delete the selected online source entry"
+msgstr "Use this to delete the selected online source entry"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:66
+#: widgets/kmymoneyonlinequoteconfig.cpp:66
+msgid "Create a new source entry for online quotes"
+msgstr "Create a new source entry for online quotes"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:67
+#: widgets/kmymoneyonlinequoteconfig.cpp:67
+msgid "Use this to create a new entry for online quotes"
+msgstr "Use this to create a new entry for online quotes"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:107
+#: dialogs/settings/ksettingsonlinequotes.cpp:190
+#: dialogs/settings/ksettingsonlinequotes.cpp:193
+#: dialogs/settings/ksettingsonlinequotes.cpp:216
+#: widgets/kmymoneyonlinequoteconfig.cpp:107
+#: widgets/kmymoneyonlinequoteconfig.cpp:185
+#: widgets/kmymoneyonlinequoteconfig.cpp:188
+#: widgets/kmymoneyonlinequoteconfig.cpp:211
+msgid "New Quote Source"
+msgstr "New Quote Source"
+
+#: dialogs/ksplittransactiondlg.cpp:77
+#: dialogs/rc.cpp:788
+msgid "Clear &All"
+msgstr "Clear &All"
+
+#: dialogs/ksplittransactiondlg.cpp:79
+msgid "Clear all splits"
+msgstr "Clear all splits"
+
+#: dialogs/ksplittransactiondlg.cpp:80
+msgid "Use this to clear all splits of this transaction"
+msgstr "Use this to clear all splits of this transaction"
+
+#: dialogs/ksplittransactiondlg.cpp:84
+msgid "&Merge"
+msgstr "&Merge"
+
+#: dialogs/ksplittransactiondlg.cpp:183
+msgid "The total amount of this transaction is %1 while the sum of the splits is %2. The remaining %3 are unassigned."
+msgstr "The total amount of this transaction is %1 while the sum of the splits is %2. The remaining %3 are unassigned."
+
+#: dialogs/ksplittransactiondlg.cpp:191
+#, c-format
+msgid "Change &total amount of transaction to %1."
+msgstr "Change &total amount of transaction to %1."
+
+#: dialogs/ksplittransactiondlg.cpp:194
+msgid "&Distribute difference of %1 among all splits."
+msgstr "&Distribute difference of %1 among all splits."
+
+#: dialogs/ksplittransactiondlg.cpp:203
+#, c-format
+msgid "&Leave total amount of transaction at %1."
+msgstr "&Leave total amount of transaction at %1."
+
+#: dialogs/ksplittransactiondlg.cpp:205
+msgid "&Leave %1 unassigned."
+msgstr "&Leave %1 unassigned."
+
+#: dialogs/ksplittransactiondlg.cpp:275
+msgid "You are about to delete all splits of this transaction. Do you really want to continue?"
+msgstr "You are about to delete all splits of this transaction. Do you really want to continue?"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:97
+msgid "Use this to create a new QIF import/export profile"
+msgstr "Use this to create a new QIF import/export profile"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:148
+#: dialogs/mymoneyqifprofileeditor.cpp:403
+#: dialogs/rc.cpp:797
+msgid "QIF Profile Editor"
+msgstr "QIF Profile Editor"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:150
+msgid "QIF Profile Selector"
+msgstr "QIF Profile Selector"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:236
+msgid "The default QIF profile"
+msgstr "The default QIF profile"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:404
+#: dialogs/mymoneyqifprofileeditor.cpp:417
+msgid "Enter new profile name"
+msgstr "Enter new profile name"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:436
+msgid "Do you really want to delete profile '%1'?"
+msgstr "Do you really want to delete profile '%1'?"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:38
+msgid "Select additional keys"
+msgstr "Select additional keys"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:48
+#: widgets/rc.cpp:25
+msgid "User identification"
+msgstr "User identification"
+
+#: dialogs/kendingbalancedlg.cpp:71
+msgid "Please enter the following fields with the information as you find them on your statement. Make sure to enter all values in <b>%1</b>."
+msgstr "Please enter the following fields with the information as you find them on your statement. Make sure to enter all values in <b>%1</b>."
+
+#: dialogs/kendingbalancedlg.cpp:124
+#, c-format
+msgid "Last reconciled statement: %1"
+msgstr "Last reconciled statement: %1"
+
+#: dialogs/kendingbalancedlg.cpp:437
+#: dialogs/kendingbalancedlg.cpp:577
+#: dialogs/rc.cpp:137
+msgid "Adjustment transaction"
+msgstr "Adjustment transaction"
+
+#: dialogs/kendingbalancedlg.cpp:510
+msgid "KMyMoney has calculated the following amounts for interest and amortization according to recorded payments between %1 and %2."
+msgstr "KMyMoney has calculated the following amounts for interest and amortisation according to recorded payments between %1 and %2."
+
+#: dialogs/kbalancechartdlg.cpp:59
+#, c-format
+msgid "Balance of %1"
+msgstr "Balance of %1"
+
+#: dialogs/kbalancechartdlg.cpp:70
+msgid "%1 Balance History"
+msgstr "%1 Balance History"
+
+#: dialogs/kmymoneysplittable.cpp:98
+msgid "Split Options"
+msgstr "Split Options"
+
+#: dialogs/kmymoneysplittable.cpp:99
+#: dialogs/rc.cpp:731
+#: widgets/kmymoneypriceview.cpp:149
+msgid "Edit..."
+msgstr "Edit..."
+
+#: dialogs/kmymoneysplittable.cpp:100
+msgid "Duplicate"
+msgstr "Duplicate"
+
+#: dialogs/kmymoneysplittable.cpp:102
+msgid "Delete ..."
+msgstr "Delete ..."
+
+#: dialogs/kmymoneysplittable.cpp:275
+msgid ""
+"_: Duplicate split\n"
+"CTRL+c"
+msgstr "CTRL+c"
+
+#: dialogs/kmymoneysplittable.cpp:562
+msgid "will be calculated"
+msgstr "will be calculated"
+
+#: dialogs/kmymoneysplittable.cpp:648
+msgid "You are about to delete the selected split. Do you really want to continue?"
+msgstr "You are about to delete the selected split. Do you really want to continue?"
+
+#: dialogs/rc.cpp:1
+msgid "Account selection"
+msgstr "Account selection"
+
+#: dialogs/rc.cpp:3
+msgid "Account to import to"
+msgstr "Account to import to"
+
+#: dialogs/rc.cpp:6
+#: dialogs/rc.cpp:170
+#: widgets/rc.cpp:169
+msgid "Skip"
+msgstr "Skip"
+
+#: dialogs/rc.cpp:8
+msgid ""
+"Use this dialog to backup your data. \n"
+"\n"
+"Please make sure you have a disk inserted and that the drive is ready. Then choose the mount point from either the Choose button or by entering the path in the available box.\n"
+"\n"
+"Click OK to perform the backup. If your system does not use an automounter, make sure you mark the checkbox below to \"mount this directory before backing up.\""
+msgstr ""
+"Use this dialog to backup your data. \n"
+"\n"
+"Please make sure you have a disk inserted and that the drive is ready. Then choose the mount point from either the Choose button or by entering the path in the available box.\n"
+"\n"
+"Click OK to perform the backup. If your system does not use an automounter, make sure you mark the checkbox below to \"mount this directory before backing up.\""
+
+#: dialogs/rc.cpp:9
+msgid "Device options"
+msgstr "Device options"
+
+#: dialogs/rc.cpp:10
+msgid ""
+"_: This is the mount point\n"
+"Mount Point:"
+msgstr "Mount Point:"
+
+#: dialogs/rc.cpp:11
+msgid "Choose..."
+msgstr "Choose..."
+
+#: dialogs/rc.cpp:12
+msgid "Mount this directory before backing up."
+msgstr "Mount this directory before backing up."
+
+#: dialogs/rc.cpp:15
+msgid "Reassign categories"
+msgstr "Reassign categories"
+
+#: dialogs/rc.cpp:16
+msgid "The transactions, schedules and budgets associated with the selected category need to be re-assigned to a different category before the selected category can be deleted. Please select a category from the list below."
+msgstr "The transactions, schedules and budgets associated with the selected category need to be re-assigned to a different category before the selected category can be deleted. Please select a category from the list below."
+
+#: dialogs/rc.cpp:17
+msgid "Available categories:"
+msgstr "Available categories:"
+
+#: dialogs/rc.cpp:21
+msgid ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+
+#: dialogs/rc.cpp:23
+msgid "QIF"
+msgstr "QIF"
+
+#: dialogs/rc.cpp:24
+msgid "CSV"
+msgstr "CSV"
+
+#: dialogs/rc.cpp:25
+msgid "Some descripton"
+msgstr "Some description"
+
+#: dialogs/rc.cpp:28
+msgid "Confirm Manual Enter"
+msgstr "Confirm Manual Enter"
+
+#: dialogs/rc.cpp:29
+msgid "The following changes have been made to the transaction data:"
+msgstr "The following changes have been made to the transaction data:"
+
+#: dialogs/rc.cpp:30
+msgid "Please choose what you wish to do with the above changes"
+msgstr "Please choose what you wish to do with the above changes"
+
+#: dialogs/rc.cpp:31
+msgid "Discard the changes and enter the original transaction into the register."
+msgstr "Discard the changes and enter the original transaction into the register."
+
+#: dialogs/rc.cpp:32
+msgid "Enter these new values this one time, for this occurence only."
+msgstr "Enter these new values this one time, for this occurrence only."
+
+#: dialogs/rc.cpp:33
+msgid "Set all further occurences in this schedule to be these values."
+msgstr "Set all further occurrences in this schedule to be these values."
+
+#: dialogs/rc.cpp:36
+msgid "CSV Dialog"
+msgstr "CSV Dialog"
+
+#: dialogs/rc.cpp:37
+msgid ""
+"CSV Dialog. Choose a file and then click on Run. You can view your progress at\n"
+"the bottom of the screen.\n"
+"\n"
+"You can cancel the process at any time by clicking on the Cancel button."
+msgstr ""
+"CSV Dialog. Choose a file and then click on Run. You can view your progress at\n"
+"the bottom of the screen.\n"
+"\n"
+"You can cancel the process at any time by clicking on the Cancel button."
+
+#: dialogs/rc.cpp:38
+msgid "Choose the csv file:"
+msgstr "Choose the csv file:"
+
+#: dialogs/rc.cpp:39
+msgid "Browse"
+msgstr "Browse"
+
+#: dialogs/rc.cpp:40
+msgid "Between These Dates"
+msgstr "Between These Dates"
+
+#: dialogs/rc.cpp:41
+#: dialogs/rc.cpp:196
+msgid "Start on:"
+msgstr "Start on:"
+
+#: dialogs/rc.cpp:42
+#: dialogs/rc.cpp:195
+msgid "End on:"
+msgstr "End on:"
+
+#: dialogs/rc.cpp:43
+msgid "Run"
+msgstr "Run"
+
+#: dialogs/rc.cpp:44
+msgid "Progress Info"
+msgstr "Progress Info"
+
+#: dialogs/rc.cpp:45
+msgid "Processing Account:"
+msgstr "Processing Account:"
+
+#: dialogs/rc.cpp:47
+msgid "Processing Transaction:"
+msgstr "Processing Transaction:"
+
+#: dialogs/rc.cpp:48
+msgid "0 of 0"
+msgstr "0 of 0"
+
+#: dialogs/rc.cpp:50
+msgid "Exchange Rate/Price Editor"
+msgstr "Exchange Rate/Price Editor"
+
+#: dialogs/rc.cpp:55
+msgid "Convert from"
+msgstr "Convert from"
+
+#: dialogs/rc.cpp:58
+msgid "Convert to"
+msgstr "Convert to"
+
+#: dialogs/rc.cpp:61
+msgid "To amount"
+msgstr "To amount"
+
+#: dialogs/rc.cpp:62
+msgid "Exchange rate / Price"
+msgstr "Exchange rate / price"
+
+#: dialogs/rc.cpp:64
+msgid ""
+"xx\n"
+"xx"
+msgstr ""
+"xx\n"
+"xx"
+
+#: dialogs/rc.cpp:68
+msgid "Currencies"
+msgstr "Currencies"
+
+#: dialogs/rc.cpp:72
+msgid "real ID"
+msgstr "real ID"
+
+#: dialogs/rc.cpp:73
+#: dialogs/rc.cpp:722
+msgid "ID"
+msgstr "ID"
+
+#: dialogs/rc.cpp:74
+msgid "X"
+msgstr "X"
+
+#: dialogs/rc.cpp:76
+#: dialogs/rc.cpp:459
+msgid "Online Source"
+msgstr "Online source"
+
+#: dialogs/rc.cpp:78
+#: dialogs/rc.cpp:278
+#: dialogs/rc.cpp:312
+#: dialogs/rc.cpp:684
+msgid "F1"
+msgstr "F1"
+
+#: dialogs/rc.cpp:80
+msgid "If this button is not activated, select the base currency first."
+msgstr "If this button is not activated, select the base currency first."
+
+#: dialogs/rc.cpp:81
+msgid "Press this button to close the dialog. If the button is not activated, select your base currency."
+msgstr "Press this button to close the dialog. If the button is not activated, select your base currency."
+
+#: dialogs/rc.cpp:82
+msgid "Edit Equity"
+msgstr "Edit Equity"
+
+#: dialogs/rc.cpp:86
+#: dialogs/rc.cpp:410
+msgid "Smallest fraction:"
+msgstr "Smallest fraction:"
+
+#: dialogs/rc.cpp:87
+#: dialogs/rc.cpp:408
+#: dialogs/rc.cpp:440
+msgid "1 /"
+msgstr "1 /"
+
+#: dialogs/rc.cpp:88
+#: dialogs/rc.cpp:405
+msgid "Investment Type:"
+msgstr "Investment Type:"
+
+#: dialogs/rc.cpp:89
+#: dialogs/rc.cpp:404
+msgid "Equity Name:"
+msgstr "Equity Name:"
+
+#: dialogs/rc.cpp:90
+#: dialogs/rc.cpp:409
+msgid "Market Symbol:"
+msgstr "Market Symbol:"
+
+#: dialogs/rc.cpp:91
+msgid "Price History"
+msgstr "Price History"
+
+#: dialogs/rc.cpp:97
+msgid "Edit Scheduled transaction"
+msgstr "Edit Scheduled transaction"
+
+#: dialogs/rc.cpp:98
+msgid "Schedule name:"
+msgstr "Schedule name:"
+
+#: dialogs/rc.cpp:99
+msgid "Frequency:"
+msgstr "Frequency:"
+
+#: dialogs/rc.cpp:100
+msgid "Number of selected periods between entries"
+msgstr "Number of selected periods between entries"
+
+#: dialogs/rc.cpp:101
+msgid "Payment information"
+msgstr "Payment information"
+
+#: dialogs/rc.cpp:105
+#: dialogs/rc.cpp:160
+#: dialogs/rc.cpp:247
+#: dialogs/rc.cpp:752
+#: widgets/register.cpp:569
+msgid "C"
+msgstr "C"
+
+#: dialogs/rc.cpp:113
+msgid "Do nothing"
+msgstr "Do nothing"
+
+#: dialogs/rc.cpp:116
+msgid "If this schedule occurs on the weekend:"
+msgstr "If this schedule occurs on the weekend:"
+
+#: dialogs/rc.cpp:117
+msgid "The amount is an estimate because it varies for each payment"
+msgstr "The amount is an estimate because it varies for each payment"
+
+#: dialogs/rc.cpp:118
+msgid "Enter this schedule into the register automatically when it is due"
+msgstr "Enter this schedule into the register automatically when it is due"
+
+#: dialogs/rc.cpp:119
+msgid "This schedule will end at some time"
+msgstr "This schedule will end at some time"
+
+#: dialogs/rc.cpp:120
+msgid "Number of transactions remaining:"
+msgstr "Number of transactions remaining:"
+
+#: dialogs/rc.cpp:121
+msgid "Date of final transaction:"
+msgstr "Date of final transaction:"
+
+#: dialogs/rc.cpp:125
+msgid "Reconciliation Wizard"
+msgstr "Reconciliation Wizard"
+
+#: dialogs/rc.cpp:127
+msgid ""
+"Reconciling your account assures, that your recordings match those of your institution and that there are no mistakes on either side. You should reconcile your account whenever you receive a statement from your institution.\n"
+"\n"
+"All relevant information necessary for this process is usually printed on your statement.\n"
+"\n"
+"On the next page you will verify, that the starting and ending balance are matching those on your statement. If not, please modify the figures."
+msgstr ""
+"Reconciling your account assures, that your recordings match those of your institution and that there are no mistakes on either side. You should reconcile your account whenever you receive a statement from your institution.\n"
+"\n"
+"All relevant information necessary for this process is usually printed on your statement.\n"
+"\n"
+"On the next page you will verify, that the starting and ending balance are matching those on your statement. If not, please modify the figures."
+
+#: dialogs/rc.cpp:129
+msgid ""
+"KMyMoney calculates your loan payments automatically. The amounts can deviate from those calculated by the creditor. Therefore, you possibly have to adjust amortization, interest and other costs according to your statement.\n"
+"\n"
+"Please enter the following information found on your statement:"
+msgstr ""
+"KMyMoney calculates your loan payments automatically. The amounts can deviate from those calculated by the creditor. Therefore, you possibly have to adjust amortisation, interest and other costs according to your statement.\n"
+"\n"
+"Please enter the following information found on your statement:"
+
+#: dialogs/rc.cpp:130
+msgid "Ending date of statement"
+msgstr "Ending date of statement"
+
+#: dialogs/rc.cpp:131
+msgid "Starting date of statement"
+msgstr "Starting date of statement"
+
+#: dialogs/rc.cpp:132
+msgid "Verify payments"
+msgstr "Verify payments"
+
+#: dialogs/rc.cpp:133
+#: dialogs/rc.cpp:148
+#: dialogs/rc.cpp:476
+#: dialogs/rc.cpp:477
+#: dialogs/rc.cpp:508
+#: dialogs/rc.cpp:513
+#: dialogs/rc.cpp:518
+#: dialogs/rc.cpp:532
+#: dialogs/rc.cpp:539
+#: dialogs/rc.cpp:540
+#: dialogs/rc.cpp:541
+#: dialogs/rc.cpp:542
+#: dialogs/rc.cpp:543
+#: dialogs/rc.cpp:552
+#: dialogs/rc.cpp:553
+#: dialogs/rc.cpp:554
+#: dialogs/rc.cpp:555
+#: dialogs/rc.cpp:556
+#: dialogs/rc.cpp:565
+#: dialogs/rc.cpp:566
+#: dialogs/rc.cpp:567
+#: dialogs/rc.cpp:568
+#: dialogs/rc.cpp:569
+#: dialogs/rc.cpp:578
+#: dialogs/rc.cpp:579
+#: dialogs/rc.cpp:580
+#: dialogs/rc.cpp:581
+#: dialogs/rc.cpp:582
+#: dialogs/rc.cpp:591
+#: dialogs/rc.cpp:592
+#: dialogs/rc.cpp:593
+#: dialogs/rc.cpp:594
+#: dialogs/rc.cpp:595
+#: dialogs/rc.cpp:603
+#: dialogs/rc.cpp:604
+#: dialogs/rc.cpp:605
+#: dialogs/rc.cpp:606
+#: dialogs/rc.cpp:607
+#: dialogs/rc.cpp:618
+#: dialogs/rc.cpp:619
+#: dialogs/rc.cpp:621
+#: dialogs/rc.cpp:636
+#: dialogs/rc.cpp:637
+#: dialogs/rc.cpp:638
+#: dialogs/rc.cpp:639
+#: dialogs/rc.cpp:640
+#: dialogs/rc.cpp:641
+#: dialogs/rc.cpp:651
+#: dialogs/rc.cpp:652
+#: dialogs/rc.cpp:654
+#: dialogs/rc.cpp:657
+#: dialogs/rc.cpp:658
+#: dialogs/rc.cpp:659
+#: dialogs/rc.cpp:664
+#: dialogs/rc.cpp:665
+#: dialogs/rc.cpp:668
+#: dialogs/rc.cpp:670
+#: dialogs/rc.cpp:672
+#: dialogs/rc.cpp:674
+#: dialogs/rc.cpp:676
+#: dialogs/rc.cpp:678
+#: dialogs/rc.cpp:681
+#: dialogs/rc.cpp:823
+#: widgets/rc.cpp:167
+msgid "1"
+msgstr "1"
+
+#: dialogs/rc.cpp:136
+msgid "If your statement shows different amounts, please cancel this dialog and correct the false transactions or correct the values in this dialog. In the later case, KMyMoney will create an adjustment transaction and add it to the ledger."
+msgstr "If your statement shows different amounts, please cancel this dialog and correct the false transactions or correct the values in this dialog. In the later case, KMyMoney will create an adjustment transaction and add it to the ledger."
+
+#: dialogs/rc.cpp:138
+msgid "In order to create the adjustment transaction, KMyMoney requires an account and possibly an interest category to assign the differences to. Please select an account and - if necessary - a category."
+msgstr "In order to create the adjustment transaction, KMyMoney requires an account and possibly an interest category to assign the differences to. Please select an account and - if necessary - a category."
+
+#: dialogs/rc.cpp:140
+msgid "Interest-Category"
+msgstr "Interest-Category"
+
+#: dialogs/rc.cpp:141
+msgid "Restarting postponed reconciliation"
+msgstr "Restarting postponed reconciliation"
+
+#: dialogs/rc.cpp:142
+msgid ""
+"You have previously postponed the reconciliation of this account. If you have entered charges or interests the last time you started reconciling this account you can modify these in the ledger later on.\n"
+"\n"
+"It is important, that you continue with the same statement you used when you postponed the reconciliation.\n"
+"\n"
+"All information you have entered into this wizard will be shown and all transactions that you already cleared are marked with a 'C'."
+msgstr ""
+"You have previously postponed the reconciliation of this account. If you have entered charges or interests the last time you started reconciling this account you can modify these in the ledger later on.\n"
+"\n"
+"It is important, that you continue with the same statement you used when you postponed the reconciliation.\n"
+"\n"
+"All information you have entered into this wizard will be shown and all transactions that you already cleared are marked with a 'C'."
+
+#: dialogs/rc.cpp:143
+msgid "Statement Information"
+msgstr "Statement Information"
+
+#: dialogs/rc.cpp:144
+#: dialogs/rc.cpp:315
+#: dialogs/rc.cpp:317
+#: dialogs/rc.cpp:320
+#: dialogs/rc.cpp:321
+#: dialogs/rc.cpp:329
+#: dialogs/rc.cpp:330
+#: dialogs/rc.cpp:333
+#: dialogs/rc.cpp:334
+#: dialogs/rc.cpp:335
+#: dialogs/rc.cpp:336
+#: dialogs/rc.cpp:366
+msgid "x"
+msgstr "x"
+
+#: dialogs/rc.cpp:145
+msgid "Statement date:"
+msgstr "Statement date:"
+
+#: dialogs/rc.cpp:146
+msgid "Starting balance of this statement:"
+msgstr "Starting balance of this statement:"
+
+#: dialogs/rc.cpp:147
+msgid "Ending balance of this statement:"
+msgstr "Ending balance of this statement:"
+
+#: dialogs/rc.cpp:149
+msgid "Interest / Charges"
+msgstr "Interest / Charges"
+
+#: dialogs/rc.cpp:150
+msgid "If necessary, enter information about interest or charges here. KMyMoney will create transactions and clear them directly for you."
+msgstr "If necessary, enter information about interest or charges here. KMyMoney will create transactions and clear them directly for you."
+
+#: dialogs/rc.cpp:153
+msgid "Charges"
+msgstr "Charges"
+
+#: dialogs/rc.cpp:154
+msgid "Enter Schedule"
+msgstr "Enter Schedule"
+
+#: dialogs/rc.cpp:155
+msgid "Schedule Details"
+msgstr "Schedule Details"
+
+#: dialogs/rc.cpp:156
+#: dialogs/rc.cpp:348
+#: dialogs/rc.cpp:389
+#: widgets/rc.cpp:164
+msgid "Name:"
+msgstr "Name:"
+
+#: dialogs/rc.cpp:157
+#: dialogs/rc.cpp:351
+#: widgets/rc.cpp:165
+msgid "Type:"
+msgstr "Type:"
+
+#: dialogs/rc.cpp:168
+msgid "Enter"
+msgstr "Enter"
+
+#: dialogs/rc.cpp:169
+msgid "Enter the transaction and advance the next due date of this schedule to the next payment date."
+msgstr "Enter the transaction and advance the next due date of this schedule to the next payment date."
+
+#: dialogs/rc.cpp:171
+msgid "Do not enter the transaction but advance the next due date of this schedule to the next payment date."
+msgstr "Do not enter the transaction but advance the next due date of this schedule to the next payment date."
+
+#: dialogs/rc.cpp:172
+msgid "Ignore"
+msgstr "Ignore"
+
+#: dialogs/rc.cpp:173
+msgid "Do not enter or skip payments for this schedule but continue with the next schedule."
+msgstr "Do not enter or skip payments for this schedule but continue with the next schedule."
+
+#: dialogs/rc.cpp:175
+msgid "Cancel processing of schedule entry."
+msgstr "Cancel processing of schedule entry."
+
+#: dialogs/rc.cpp:176
+msgid "Update Stock and Currency Prices"
+msgstr "Update Stock and Currency Prices"
+
+#: dialogs/rc.cpp:177
+msgid "List of known Equities, and the date they were last updated on."
+msgstr "List of known Equities, and the date they were last updated on."
+
+#: dialogs/rc.cpp:179
+msgid "Update All"
+msgstr "Update All"
+
+#: dialogs/rc.cpp:180
+msgid "Update Selected"
+msgstr "Update Selected"
+
+#: dialogs/rc.cpp:181
+msgid "Status:"
+msgstr "Status"
+
+#: dialogs/rc.cpp:184
+msgid "QIF Export"
+msgstr "QIF Export"
+
+#: dialogs/rc.cpp:185
+msgid ""
+"From this dialog you are able to export transactions to a quicken compatible file, (known as a QIF file, because of the extension). Please enter the path to the QIF file or select it by clicking on the Browse button.\n"
+"\n"
+"You can choose the file's path, the account and the format of the QIF file (profile). Choose Account to export all the transactions between the specified dates or just categories. You can also limit the transactions that are exported by start and ending date. Once you have pressed the Export button a message box will appear when the export has completed detailing how many transactions, categories and payees were exported."
+msgstr ""
+"From this dialog you are able to export transactions to a quicken compatible file, (known as a QIF file, because of the extension). Please enter the path to the QIF file or select it by clicking on the Browse button.\n"
+"\n"
+"You can choose the file's path, the account and the format of the QIF file (profile). Choose Account to export all the transactions between the specified dates or just categories. You can also limit the transactions that are exported by start and ending date. Once you have pressed the Export button a message box will appear when the export has completed detailing how many transactions, categories and payees were exported."
+
+#: dialogs/rc.cpp:186
+msgid "File to export to:"
+msgstr "File to export to:"
+
+#: dialogs/rc.cpp:188
+msgid "Account to export"
+msgstr "Account to export"
+
+#: dialogs/rc.cpp:189
+#: dialogs/rc.cpp:297
+msgid "QIF Profile"
+msgstr "QIF Profile"
+
+#: dialogs/rc.cpp:190
+#: dialogs/rc.cpp:298
+#: dialogs/rc.cpp:362
+#: widgets/kmymoneypriceview.cpp:145
+msgid "New..."
+msgstr "New..."
+
+#: dialogs/rc.cpp:191
+msgid "Contents to Export"
+msgstr "Contents to Export"
+
+#: dialogs/rc.cpp:194
+msgid "Date Range"
+msgstr "Date Range"
+
+#: dialogs/rc.cpp:199
+msgid "Search transactions"
+msgstr "Search transactions"
+
+#: dialogs/rc.cpp:200
+msgid "Criteria"
+msgstr "Criteria"
+
+#: dialogs/rc.cpp:201
+msgid "Define your search criteria"
+msgstr "Define your search criteria"
+
+#: dialogs/kfindtransactiondlg.cpp:169
+#: dialogs/rc.cpp:202
+msgid "Text"
+msgstr "Text"
+
+#: dialogs/rc.cpp:203
+msgid "Contains"
+msgstr "Contains"
+
+#: dialogs/rc.cpp:204
+msgid "Does not contain"
+msgstr "Does not contain"
+
+#: dialogs/rc.cpp:205
+msgid "Treat text as regular expression"
+msgstr "Treat text as regular expression"
+
+#: dialogs/rc.cpp:206
+msgid "Case sensitive"
+msgstr "Case sensitive"
+
+#: dialogs/rc.cpp:209
+msgid "Range"
+msgstr "Range"
+
+#: dialogs/rc.cpp:210
+msgid ""
+"_: To (Date)\n"
+"To"
+msgstr "To"
+
+#: dialogs/rc.cpp:211
+msgid ""
+"_: From (Date)\n"
+"From"
+msgstr "From"
+
+#: dialogs/rc.cpp:213
+msgid "Search this amount"
+msgstr "Search this amount"
+
+#: dialogs/rc.cpp:214
+msgid "Search amount in the range"
+msgstr "Search amount in the range"
+
+#: dialogs/rc.cpp:215
+msgid ""
+"_: to (amount)\n"
+"to"
+msgstr "to"
+
+#: dialogs/rc.cpp:216
+msgid ""
+"_: from (amount)\n"
+"from"
+msgstr "from"
+
+#: dialogs/rc.cpp:220
+msgid "Select transactions without payees"
+msgstr "Select transactions without payees"
+
+#: dialogs/rc.cpp:221
+msgid "Select all"
+msgstr "Select all"
+
+#: dialogs/rc.cpp:222
+msgid "Select none"
+msgstr "Select none"
+
+#: dialogs/rc.cpp:224
+msgid "Validity"
+msgstr "Validity"
+
+#: dialogs/rc.cpp:226
+msgid "All states"
+msgstr "All states"
+
+#: dialogs/rc.cpp:230
+msgid "All types"
+msgstr "All types"
+
+#: dialogs/rc.cpp:234
+msgid "Any transaction"
+msgstr "Any transaction"
+
+#: dialogs/rc.cpp:235
+msgid "Valid transaction"
+msgstr "Valid transaction"
+
+#: dialogs/rc.cpp:236
+msgid "Invalid transaction"
+msgstr "Invalid transaction"
+
+#: dialogs/rc.cpp:237
+msgid "State"
+msgstr "State"
+
+#: dialogs/rc.cpp:238
+msgid "Search this number"
+msgstr "Search this number"
+
+#: dialogs/rc.cpp:239
+msgid "Search number in range"
+msgstr "Search number in range"
+
+#: dialogs/rc.cpp:240
+msgid ""
+"_: to (number)\n"
+"to"
+msgstr "to"
+
+#: dialogs/rc.cpp:241
+msgid ""
+"_: from (number)\n"
+"from"
+msgstr "from"
+
+#: dialogs/rc.cpp:242
+msgid "text"
+msgstr "text"
+
+#: dialogs/rc.cpp:243
+msgid "warning"
+msgstr "warning"
+
+#: dialogs/rc.cpp:244
+msgid "Result"
+msgstr "Result"
+
+#: dialogs/rc.cpp:254
+msgid "F"
+msgstr "F"
+
+#: dialogs/rc.cpp:257
+#: dialogs/rc.cpp:844
+msgid "&Reset"
+msgstr "&Reset"
+
+#: dialogs/rc.cpp:258
+msgid "&Find"
+msgstr "&Find"
+
+#: dialogs/rc.cpp:259
+msgid "GnuCash Import Options"
+msgstr "GnuCash import options"
+
+#: dialogs/rc.cpp:260
+msgid "Use 'Help' for more information on these options"
+msgstr "Use 'Help' for more information on these options"
+
+#: dialogs/rc.cpp:261
+msgid "Investment Handling"
+msgstr "Investment Handling"
+
+#: dialogs/rc.cpp:262
+msgid "One investment account for each stock"
+msgstr "One investment account for each stock"
+
+#: dialogs/rc.cpp:263
+msgid "One investment account for all stocks"
+msgstr "One investment account for all stocks"
+
+#: dialogs/rc.cpp:264
+msgid "Prompt for an investment account for each stock"
+msgstr "Prompt for an investment account for each stock"
+
+#: dialogs/rc.cpp:265
+msgid "Online price quotes"
+msgstr "Online price quotes"
+
+#: dialogs/rc.cpp:266
+msgid "Use Finance::Quote for share price quotes"
+msgstr "Use Finance::Quote for share price quotes"
+
+#: dialogs/rc.cpp:267
+msgid "Scheduled Transactions"
+msgstr "Scheduled Transactions"
+
+#: dialogs/rc.cpp:268
+msgid "Drop suspect scheduled transactions"
+msgstr "Drop suspect scheduled transactions"
+
+#: dialogs/rc.cpp:269
+msgid "Decoding option"
+msgstr "Decoding option"
+
+#: dialogs/rc.cpp:270
+msgid "Decode using"
+msgstr "Decode using"
+
+#: dialogs/rc.cpp:271
+msgid "Transaction Notes option"
+msgstr "Transaction Notes option"
+
+#: dialogs/rc.cpp:272
+msgid "Use transaction notes on non-split transactions"
+msgstr "Use transaction notes on non-split transactions"
+
+#: dialogs/rc.cpp:273
+msgid "Debug Options"
+msgstr "Debug Options"
+
+#: dialogs/rc.cpp:274
+msgid "General debug data"
+msgstr "General debug data"
+
+#: dialogs/rc.cpp:275
+msgid "Display XML data"
+msgstr "Display XML data"
+
+#: dialogs/rc.cpp:276
+msgid "Anonymize data"
+msgstr "Anonymise data"
+
+#: dialogs/rc.cpp:281
+msgid "Online Quotes - Select price source"
+msgstr "Online Quotes - Select price source"
+
+#: dialogs/rc.cpp:284
+msgid "This price source is not known to KMyMoney. Please select an option below."
+msgstr "This price source is not known to KMyMoney. Please select an option below."
+
+#: dialogs/rc.cpp:285
+msgid "Do not perform online quotes for this investment"
+msgstr "Do not perform online quotes for this investment"
+
+#: dialogs/rc.cpp:286
+msgid "Select a known KMyMoney source from the list below"
+msgstr "Select a known KMyMoney source from the list below"
+
+#: dialogs/rc.cpp:287
+msgid ""
+"Use the following name for the price source.\n"
+"(Click Help for further information.)"
+msgstr ""
+"Use the following name for the price source.\n"
+"(Click Help for further information.)"
+
+#: dialogs/rc.cpp:288
+msgid "Always use this selection for this price source."
+msgstr "Always use this selection for this price source."
+
+#: dialogs/rc.cpp:289
+msgid "QIF Import"
+msgstr "QIF Import"
+
+#: dialogs/rc.cpp:290
+msgid ""
+"From this dialog you are able to import transactions from a Quicken<b>&trade;</b> compatible file, (known as a QIF file, because of the extension).<p>\n"
+"\n"
+"Please enter the path to the QIF file or select it by clicking on the Browse button. Once you have the file's path press the Import button and KMyMoney will import all the transactions, categories and payees it finds."
+msgstr ""
+"From this dialog you are able to import transactions from a Quicken<b>&trade;</b> compatible file, (known as a QIF file, because of the extension).<p>\n"
+"\n"
+"Please enter the path to the QIF file or select it by clicking on the Browse button. Once you have the file's path press the Import button and KMyMoney will import all the transactions, categories and payees it finds."
+
+#: dialogs/rc.cpp:291
+msgid "QIF File to Import:"
+msgstr "QIF File to Import:"
+
+#: dialogs/rc.cpp:292
+msgid "Import options"
+msgstr "Import options"
+
+#: dialogs/rc.cpp:293
+msgid "Bank statement"
+msgstr "Bank statement"
+
+#: dialogs/rc.cpp:294
+msgid "Other application"
+msgstr "Other application"
+
+#: dialogs/rc.cpp:295
+msgid "Select <b>Bank statement</b> turns on automatic category matching which is turned off in case of <b>Historic data</b>. Use the latter if you import files from other Personal Finance Management software."
+msgstr "Select <b>Bank statement</b> turns on automatic category matching which is turned off in case of <b>Historic data</b>. Use the latter if you import files from other Personal Finance Management software."
+
+#: dialogs/rc.cpp:296
+msgid "Source of QIF"
+msgstr "Source of QIF"
+
+#: dialogs/rc.cpp:302
+msgid "Verify Import"
+msgstr "Verify Import"
+
+#: dialogs/rc.cpp:304
+msgid "Ok"
+msgstr "Ok"
+
+#: dialogs/rc.cpp:306
+msgid "MyDialog"
+msgstr "MyDialog"
+
+#: dialogs/rc.cpp:310
+msgid "File Information"
+msgstr "File Information"
+
+#: dialogs/rc.cpp:316
+msgid "Last modified on"
+msgstr "Last modified on"
+
+#: dialogs/rc.cpp:319
+msgid "Base currency"
+msgstr "Base currency"
+
+#: dialogs/rc.cpp:322
+msgid "Created on"
+msgstr "Created on"
+
+#: dialogs/rc.cpp:325
+msgid "Accounts/Categories"
+msgstr "Accounts/Categories"
+
+#: dialogs/rc.cpp:328
+msgid "Closed"
+msgstr "Closed"
+
+#: dialogs/rc.cpp:331
+msgid "Prices"
+msgstr "Prices"
+
+#: dialogs/rc.cpp:337
+msgid "Splits"
+msgstr "Splits"
+
+#: dialogs/rc.cpp:338
+msgid "Price Editor"
+msgstr "Price Editor"
+
+#: dialogs/rc.cpp:339
+msgid "Show all stored prices"
+msgstr "Show all stored prices"
+
+#: dialogs/rc.cpp:343
+msgid "Delete Range..."
+msgstr "Delete Range..."
+
+#: dialogs/rc.cpp:346
+msgid "New Account Dialog"
+msgstr "New Account Dialog"
+
+#: dialogs/rc.cpp:349
+msgid "Opening information"
+msgstr "Opening information"
+
+#: dialogs/rc.cpp:350
+msgid "Currency:"
+msgstr "Currency:"
+
+#: dialogs/rc.cpp:352
+#: dialogs/rc.cpp:793
+msgid "Date:"
+msgstr "Date:"
+
+#: dialogs/rc.cpp:353
+msgid "Balance:"
+msgstr "Balance:"
+
+#: dialogs/rc.cpp:355
+msgid "Last check number:"
+msgstr "Last cheque number:"
+
+#: dialogs/rc.cpp:356
+msgid "Notes:"
+msgstr "Notes:"
+
+#: dialogs/rc.cpp:357
+msgid "No auto-VAT-assignment"
+msgstr "No auto-VAT-assignment"
+
+#: dialogs/rc.cpp:358
+#: dialogs/rc.cpp:441
+msgid "Price entry"
+msgstr "Price entry"
+
+#: dialogs/rc.cpp:359
+msgid "Preferred Account"
+msgstr "Preferred Account"
+
+#: dialogs/rc.cpp:363
+msgid "Number:"
+msgstr "Number:"
+
+#: dialogs/rc.cpp:364
+#: dialogs/rc.cpp:395
+msgid "BIC"
+msgstr "BIC"
+
+#: dialogs/rc.cpp:367
+msgid "Hierarchy"
+msgstr "Hierarchy"
+
+#: dialogs/rc.cpp:368
+msgid "Subaccount"
+msgstr "Subaccount"
+
+#: dialogs/rc.cpp:369
+msgid "Limits"
+msgstr "Limits"
+
+#: dialogs/rc.cpp:370
+msgid "This page allows to setup certain limits. KMyMoney will warn you when the account balance reaches a limit."
+msgstr "This page allows to setup certain limits. KMyMoney will warn you when the account balance reaches a limit."
+
+#: dialogs/rc.cpp:372
+msgid "Absolute limit"
+msgstr "Absolute limit"
+
+#: dialogs/rc.cpp:373
+msgid "Maximum credit limit"
+msgstr "Maximum credit limit"
+
+#: dialogs/rc.cpp:374
+msgid "Minimum balance"
+msgstr "Minimum balance"
+
+#: dialogs/rc.cpp:375
+msgid "Early warning"
+msgstr "Early warning"
+
+#: dialogs/rc.cpp:377
+msgid "VAT details"
+msgstr "VAT Details"
+
+#: dialogs/rc.cpp:378
+msgid "VAT category"
+msgstr "VAT category"
+
+#: dialogs/rc.cpp:379
+msgid "VAT percentage"
+msgstr "VAT percentage"
+
+#: dialogs/rc.cpp:380
+msgid "Enable auto VAT assignment"
+msgstr "Enable auto VAT assignment"
+
+#: dialogs/rc.cpp:381
+msgid "Amount entered"
+msgstr "Amount entered"
+
+#: dialogs/rc.cpp:382
+msgid "Gross amount"
+msgstr "Gross amount"
+
+#: dialogs/rc.cpp:383
+msgid "Net amount"
+msgstr "Net amount"
+
+#: dialogs/rc.cpp:384
+msgid "Include on Tax Reports"
+msgstr "Include on tax reports"
+
+#: dialogs/rc.cpp:387
+msgid "New Institution Dialog"
+msgstr "New Institution Dialog"
+
+#: dialogs/rc.cpp:388
+msgid "Institution Details"
+msgstr "Institution Details"
+
+#: dialogs/rc.cpp:390
+msgid "City:"
+msgstr "City:"
+
+#: dialogs/rc.cpp:394
+msgid "Routing Number:"
+msgstr "Account Number"
+
+#: dialogs/rc.cpp:398
+msgid "New Budget"
+msgstr "New Budget"
+
+#: dialogs/rc.cpp:403
+msgid "New Equity"
+msgstr "New Equity"
+
+#: dialogs/rc.cpp:406
+#: dialogs/rc.cpp:407
+msgid "Trading Symbol of the stock or mutual fund, not required."
+msgstr "Trading Symbol of the stock or mutual fund, not required."
+
+#: dialogs/rc.cpp:414
+#: dialogs/rc.cpp:415
+msgid "Name of the company, or mutual fund."
+msgstr "Name of the company, or mutual fund."
+
+#: dialogs/rc.cpp:418
+msgid "New File Dialog"
+msgstr "New File Dialog"
+
+#: dialogs/rc.cpp:419
+msgid ""
+"Use this dialog to enter personal information about yourself.\n"
+"\n"
+"All information is optional and is provided to personalize\n"
+"your KMyMoney file."
+msgstr ""
+"Use this dialog to enter personal information about yourself.\n"
+"\n"
+"All information is optional and is provided to personalise\n"
+"your KMyMoney file."
+
+#: dialogs/rc.cpp:430
+msgid "New Investment wizard"
+msgstr "New Investment wizard"
+
+#: dialogs/rc.cpp:431
+msgid "Investment Type"
+msgstr "Investment Type"
+
+#: dialogs/rc.cpp:432
+msgid "This wizard allows you to create a new investment."
+msgstr "This wizard allows you to create a new investment."
+
+#: dialogs/rc.cpp:433
+msgid "The first step in this process requires to select the type of investment. The following steps collect more details about the investment from you."
+msgstr "The first step in this process requires to select the type of investment. The following steps collect more details about the investment from you."
+
+#: dialogs/rc.cpp:434
+msgid "Type of investment"
+msgstr "Type of investment"
+
+#: dialogs/rc.cpp:438
+msgid "Investment details"
+msgstr "Investment details"
+
+#: dialogs/rc.cpp:439
+msgid "Enter the details below and click <b>Next</b> to continue entering the online update details."
+msgstr "Enter the details below and click <b>Next</b> to continue entering the online update details."
+
+#: dialogs/rc.cpp:442
+#: dialogs/rc.cpp:728
+msgid "Fraction"
+msgstr "Fraction"
+
+#: dialogs/rc.cpp:443
+msgid "Trading Currency"
+msgstr "Trading Currency"
+
+#: dialogs/rc.cpp:444
+msgid "Full name"
+msgstr "Full name"
+
+#: dialogs/rc.cpp:445
+msgid "AMEX"
+msgstr "AMEX"
+
+#: dialogs/rc.cpp:446
+msgid "EUREX"
+msgstr "EUREX"
+
+#: dialogs/rc.cpp:447
+msgid "FUND"
+msgstr "FUND"
+
+#: dialogs/rc.cpp:448
+msgid "NASDAQ"
+msgstr "NASDAQ"
+
+#: dialogs/rc.cpp:449
+msgid "NYSE"
+msgstr "NYSE"
+
+#: dialogs/rc.cpp:450
+msgid "XETRA"
+msgstr "XETRA"
+
+#: dialogs/rc.cpp:451
+msgid "Trading symbol"
+msgstr "Trading symbol"
+
+#: dialogs/rc.cpp:452
+msgid "Identification"
+msgstr "Identification"
+
+#: dialogs/rc.cpp:453
+msgid "Enter the ticker symbol (e.g. RHAT)."
+msgstr "Enter the ticker symbol (e.g. RHAT)."
+
+#: dialogs/rc.cpp:454
+msgid "Enter the CUSIP/ISIN/WKN identification number here"
+msgstr "Enter the CUSIP/ISIN/WKN identification number here"
+
+#: dialogs/rc.cpp:455
+msgid "Trading market"
+msgstr "Trading market"
+
+#: dialogs/rc.cpp:456
+msgid "Online Update"
+msgstr "Online Update"
+
+#: dialogs/rc.cpp:457
+msgid "Select an online source and click <b>Finish</b> to store the investment data. If you don't want to use online updates, just leave the data as is."
+msgstr "Select an online source and click <b>Finish</b> to store the investment data. If you don't want to use online updates, just leave the data as is."
+
+#: dialogs/rc.cpp:458
+msgid "Use Finance::Quote"
+msgstr "Use Finance::Quote"
+
+#: dialogs/rc.cpp:460
+msgid "Factor"
+msgstr "Factor"
+
+#: dialogs/rc.cpp:461
+msgid "New Loan Wizard"
+msgstr "New Loan Wizard"
+
+#: dialogs/rc.cpp:462
+msgid "New Loan Account Wizard"
+msgstr "New Loan Account Wizard"
+
+#: dialogs/rc.cpp:463
+msgid ""
+"\n"
+"Welcome to the New Loan Account Wizard which will guide you through the creation of a new loan e.g. for your home, your car or any other loan that you pay or gain interest for.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Welcome to the New Loan Account Wizard which will guide you through the creation of a new loan e.g. for your home, your car or any other loan that you pay or gain interest for.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually get the information out of your contract and the last statement."
+
+#: dialogs/rc.cpp:464
+msgid "Edit Loan Account Wizard"
+msgstr "Edit Loan Account Wizard"
+
+#: dialogs/rc.cpp:465
+msgid ""
+"\n"
+"Welcome to the Edit Loan Account Wizard. Please use this wizard to modify information about your loan account.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Welcome to the Edit Loan Account Wizard. Please use this wizard to modify information about your loan account.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually get the information out of your contract and the last statement."
+
+#: dialogs/rc.cpp:467
+msgid ""
+"\n"
+"In the first step, KMyMoney will ask you some general information about the loan account to be created."
+msgstr ""
+"\n"
+"In the first step, KMyMoney will ask you some general information about the loan account to be created."
+
+#: dialogs/rc.cpp:468
+#: dialogs/rc.cpp:522
+#: dialogs/rc.cpp:610
+msgid "1. General Information"
+msgstr "1. General Information"
+
+#: dialogs/rc.cpp:469
+msgid ""
+"\n"
+"2. Calculate Loan\n"
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"2. Calculate Loan\n"
+"\n"
+"3. Payments"
+
+#: dialogs/rc.cpp:470
+msgid "Edit selection"
+msgstr "Edit selection"
+
+#: dialogs/rc.cpp:471
+msgid ""
+"\n"
+"Please select, which data of the loan you want to modify."
+msgstr ""
+"\n"
+"Please select, which data of the loan you want to modify."
+
+#: dialogs/rc.cpp:472
+msgid "Modify the interest rate"
+msgstr "Modify the interest rate"
+
+#: dialogs/rc.cpp:473
+msgid "Modify additional fees"
+msgstr "Modify additional fees"
+
+#: dialogs/rc.cpp:474
+msgid "Modify other loan information"
+msgstr "Modify other loan information"
+
+#: dialogs/rc.cpp:475
+msgid "Effective date"
+msgstr "Effective date"
+
+#: dialogs/rc.cpp:478
+msgid "When should the changes become active?"
+msgstr "When should the changes become active?"
+
+#: dialogs/rc.cpp:479
+msgid "Lending or borrowing money"
+msgstr "Lending or borrowing money"
+
+#: dialogs/rc.cpp:480
+msgid ""
+"\n"
+"Do you borrow or lend money?"
+msgstr ""
+"\n"
+"Do you borrow or lend money?"
+
+#: dialogs/rc.cpp:483
+msgid "Name of the loan"
+msgstr "Name of the loan"
+
+#: dialogs/rc.cpp:484
+msgid ""
+"\n"
+"How do you want to call this loan? Examples for names are 'car loan', 'school loan', 'home owner loan'."
+msgstr ""
+"\n"
+"How do you want to call this loan? Examples for names are 'car loan', 'school loan', 'home owner loan'."
+
+#: dialogs/rc.cpp:486
+msgid "TextLabel6"
+msgstr "TextLabel6"
+
+#: dialogs/rc.cpp:487
+msgid "TextLabel7"
+msgstr "TextLabel7"
+
+#: dialogs/rc.cpp:488
+msgid "Type of interest"
+msgstr "Type of interest"
+
+#: dialogs/rc.cpp:489
+msgid ""
+"\n"
+"Is the interest of this loan fixed over a period of time or is it adapted from time to time? If the interest rate changes during the amortization phase of the loan you should choose the option 'variable interest rate'."
+msgstr ""
+"\n"
+"Is the interest of this loan fixed over a period of time or is it adapted from time to time? If the interest rate changes during the amortisation phase of the loan you should choose the option 'variable interest rate'."
+
+#: dialogs/rc.cpp:490
+msgid "Fixed interest rate"
+msgstr "Fixed interest rate"
+
+#: dialogs/rc.cpp:491
+msgid "Variable interest rate"
+msgstr "Variable interest rate"
+
+#: dialogs/rc.cpp:492
+msgid "Payments?"
+msgstr "Payments?"
+
+#: dialogs/rc.cpp:493
+msgid ""
+"\n"
+"Were there any payments for this loan whether they are entered into KMyMoney or not?"
+msgstr ""
+"\n"
+"Were there any payments for this loan whether they are entered into KMyMoney or not?"
+
+#: dialogs/rc.cpp:494
+msgid "No, no payments were made yet."
+msgstr "No, no payments were made yet."
+
+#: dialogs/rc.cpp:495
+msgid "Yes, payments were made."
+msgstr "Yes, payments were made."
+
+#: dialogs/rc.cpp:496
+msgid "Note: Payments made to obtain the loan (e.g. Dissagio) are not considered as payments in this context."
+msgstr "Note: Payments made to obtain the loan (e.g. Dissagio) are not considered as payments in this context."
+
+#: dialogs/rc.cpp:497
+msgid "Recording payments?"
+msgstr "Recording payments?"
+
+#: dialogs/rc.cpp:498
+msgid ""
+"\n"
+"Do you want to record all payments of this loan with KMyMoney?"
+msgstr ""
+"\n"
+"Do you want to record all payments of this loan with KMyMoney?"
+
+#: dialogs/rc.cpp:499
+msgid "Yes, record all payments."
+msgstr "Yes, record all payments."
+
+#: dialogs/rc.cpp:500
+msgid "No, only record payments since the beginning of this year."
+msgstr "No, only record payments since the beginning of this year."
+
+#: dialogs/rc.cpp:501
+msgid "Date of next interest change"
+msgstr "Date of next interest change"
+
+#: dialogs/rc.cpp:502
+msgid ""
+"\n"
+"Select the date when the interest rate for this loan will be modified and the frequency of the future changes."
+msgstr ""
+"\n"
+"Select the date when the interest rate for this loan will be modified and the frequency of the future changes."
+
+#: dialogs/rc.cpp:503
+msgid "Next interest change on"
+msgstr "Next interest change on"
+
+#: dialogs/rc.cpp:504
+msgid "Time until next change"
+msgstr "Time until next change"
+
+#: dialogs/rc.cpp:506
+#: dialogs/rc.cpp:571
+msgid ""
+"\n"
+"Please enter the amount you pay for principal and interest or leave the field empty to calculate it."
+msgstr ""
+"\n"
+"Please enter the amount you pay for principal and interest or leave the field empty to calculate it."
+
+#: dialogs/rc.cpp:507
+msgid "Current amount"
+msgstr "Current amount"
+
+#: dialogs/rc.cpp:510
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal and interest. If you know the amount for principal and interest then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"KMyMoney either calculates the new interest rate or the amount for principal and interest. If you know the amount for principal and interest then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+
+#: dialogs/rc.cpp:512
+#: dialogs/rc.cpp:545
+msgid ""
+"\n"
+"Please enter the interest rate or leave the field empty to calculate it."
+msgstr ""
+"\n"
+"Please enter the interest rate or leave the field empty to calculate it."
+
+#: dialogs/rc.cpp:514
+msgid "Current rate"
+msgstr "Current rate"
+
+#: dialogs/rc.cpp:516
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal and interest. If you know the interest rate then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"KMyMoney either calculates the new interest rate or the amount for principal and interest. If you know the interest rate then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+
+#: dialogs/rc.cpp:517
+msgid "Date of first payment"
+msgstr "Date of first payment"
+
+#: dialogs/rc.cpp:520
+msgid "Calculate Loan"
+msgstr "Calculate Loan"
+
+#: dialogs/rc.cpp:521
+msgid ""
+"\n"
+"You have successfully entered the general information about your loan. Next, KMyMoney needs some information about the calculation of the loan."
+msgstr ""
+"\n"
+"You have successfully entered the general information about your loan. Next, KMyMoney needs some information about the calculation of the loan."
+
+#: dialogs/rc.cpp:523
+#: dialogs/rc.cpp:611
+msgid ""
+"\n"
+"2. Calculate Loan"
+msgstr ""
+"\n"
+"2. Calculate Loan"
+
+#: dialogs/rc.cpp:524
+#: dialogs/rc.cpp:612
+msgid ""
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"3. Payments"
+
+#: dialogs/rc.cpp:526
+msgid ""
+"\n"
+"How often will there be payments made to this loan?"
+msgstr ""
+"\n"
+"How often will there be payments made to this loan?"
+
+#: dialogs/rc.cpp:527
+msgid "Interest calculation"
+msgstr "Interest calculation"
+
+#: dialogs/rc.cpp:528
+msgid ""
+"\n"
+"When does the actual interest rate get calculated?"
+msgstr ""
+"\n"
+"When does the actual interest rate get calculated?"
+
+#: dialogs/rc.cpp:529
+msgid "When the payment is received."
+msgstr "When the payment is received."
+
+#: dialogs/rc.cpp:530
+msgid "When the payment is due."
+msgstr "When the payment is due."
+
+#: dialogs/rc.cpp:534
+#: dialogs/rc.cpp:547
+#: dialogs/rc.cpp:560
+#: dialogs/rc.cpp:573
+#: dialogs/rc.cpp:586
+#: dialogs/rc.cpp:598
+#: dialogs/rc.cpp:679
+msgid "Loan amount:"
+msgstr "Loan amount:"
+
+#: dialogs/rc.cpp:535
+#: dialogs/rc.cpp:548
+#: dialogs/rc.cpp:561
+#: dialogs/rc.cpp:574
+#: dialogs/rc.cpp:587
+#: dialogs/rc.cpp:599
+#: dialogs/rc.cpp:633
+#: dialogs/rc.cpp:671
+msgid "Interest rate:"
+msgstr "Interest rate:"
+
+#: dialogs/rc.cpp:536
+#: dialogs/rc.cpp:549
+#: dialogs/rc.cpp:562
+#: dialogs/rc.cpp:575
+#: dialogs/rc.cpp:588
+#: dialogs/rc.cpp:600
+#: dialogs/rc.cpp:669
+msgid "Term:"
+msgstr "Term:"
+
+#: dialogs/rc.cpp:537
+#: dialogs/rc.cpp:550
+#: dialogs/rc.cpp:563
+#: dialogs/rc.cpp:576
+#: dialogs/rc.cpp:589
+#: dialogs/rc.cpp:601
+#: dialogs/rc.cpp:622
+#: dialogs/rc.cpp:630
+#: dialogs/rc.cpp:677
+msgid "Principal + Interest:"
+msgstr "Principal + Interest:"
+
+#: dialogs/rc.cpp:538
+#: dialogs/rc.cpp:551
+#: dialogs/rc.cpp:564
+#: dialogs/rc.cpp:577
+#: dialogs/rc.cpp:583
+#: dialogs/rc.cpp:585
+#: dialogs/rc.cpp:590
+#: dialogs/rc.cpp:602
+msgid "Final amortization payment"
+msgstr "Final amortisation payment"
+
+#: dialogs/rc.cpp:557
+msgid "Duration"
+msgstr "Duration"
+
+#: dialogs/rc.cpp:558
+msgid ""
+"\n"
+"Please enter the term of this loan or leave the field empty to calculate it. The term is the time that is required to fully repay the loan. This time might be different from the time your loan contract is signed for."
+msgstr ""
+"\n"
+"Please enter the term of this loan or leave the field empty to calculate it. The term is the time that is required to fully repay the loan. This time might be different from the time your loan contract is signed for."
+
+#: dialogs/rc.cpp:584
+msgid ""
+"\n"
+"Please enter the amount of a final amortization payment or leave the field empty to calculate it."
+msgstr ""
+"\n"
+"Please enter the amount of a final amortisation payment or leave the field empty to calculate it."
+
+#: dialogs/rc.cpp:596
+msgid "Calculation Overview"
+msgstr "Calculation Overview"
+
+#: dialogs/rc.cpp:597
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown in the overview below. You can accept these values by selecting \"Next\" or change them by choosing \"Back\" to return to the input field for the information you want to change."
+msgstr ""
+"\n"
+"KMyMoney has calculated the loan as shown in the overview below. You can accept these values by selecting \"Next\" or change them by choosing \"Back\" to return to the input field for the information you want to change."
+
+#: dialogs/rc.cpp:609
+msgid ""
+"\n"
+"In the following steps, KMyMoney supports you in setting up categories and schedules for your loan payments."
+msgstr ""
+"\n"
+"In the following steps, KMyMoney supports you in setting up categories and schedules for your loan payments."
+
+#: dialogs/rc.cpp:614
+msgid ""
+"\n"
+"Please select the category you want to assign the interest payments to or create a new category."
+msgstr ""
+"\n"
+"Please select the category you want to assign the interest payments to or create a new category."
+
+#: dialogs/rc.cpp:615
+msgid "Additional Fees"
+msgstr "Additional Fees"
+
+#: dialogs/rc.cpp:616
+msgid ""
+"\n"
+"If your regular payment contains any additional fees, click on the button \"Additional fees\" to enter them."
+msgstr ""
+"\n"
+"If your regular payment contains any additional fees, click on the button \"Additional fees\" to enter them."
+
+#: dialogs/rc.cpp:617
+msgid "= periodical payment:"
+msgstr "= periodical payment:"
+
+#: dialogs/rc.cpp:623
+msgid "If no additional fees are included in your periodical payment or you have entered all such fees, then click on \"Next\"."
+msgstr "If no additional fees are included in your periodical payment or you have entered all such fees, then click on \"Next\"."
+
+#: dialogs/rc.cpp:625
+msgid ""
+"KMyMoney will create a schedule for this payment and reminds you whenever a payment must be made.<p>\n"
+"If you selected to record all payments this date has already been supplied. If you selected to record only this years payments, then the <b>First payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"KMyMoney will create a schedule for this payment and reminds you whenever a payment must be made.<p>\n"
+"If you selected to record all payments this date has already been supplied. If you selected to record only this years payments, then the <b>First payment due date</b> is the date of the first payment made in this year."
+
+#: dialogs/rc.cpp:626
+msgid "First payment due on:"
+msgstr "First payment due on:"
+
+#: dialogs/rc.cpp:627
+msgid "Make payment from/to:"
+msgstr "Make payment from/to:"
+
+#: dialogs/rc.cpp:629
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown below. If you want to accept these values use the \"Finish\" button to update your account, otherwise use the \"Back\" button to modify your settings."
+msgstr ""
+"\n"
+"KMyMoney has calculated the loan as shown below. If you want to accept these values use the \"Finish\" button to update your account, otherwise use the \"Back\" button to modify your settings."
+
+#: dialogs/rc.cpp:631
+msgid "Additional fees:"
+msgstr "Additional fees:"
+
+#: dialogs/rc.cpp:632
+msgid "Total payment:"
+msgstr "Total payment:"
+
+#: dialogs/rc.cpp:634
+msgid "Valid from:"
+msgstr "Valid from:"
+
+#: dialogs/rc.cpp:635
+msgid "Affected payments:"
+msgstr "Affected payments:"
+
+#: dialogs/rc.cpp:645
+msgid "Press this to create a new asset account"
+msgstr "Lets you create a new asset account"
+
+#: dialogs/rc.cpp:648
+msgid ""
+"\n"
+"This page summarizes the data you entered. If you need to modify anything, please use the \"Back\" button to go to respective page. Otherwise use the \"Finish\" button to create the account."
+msgstr ""
+"\n"
+"This page summarises the data you entered. If you need to modify anything, please use the \"Back\" button to go to respective page. Otherwise use the \"Finish\" button to create the account."
+
+#: dialogs/rc.cpp:650
+msgid "Payee:"
+msgstr "Payee:"
+
+#: dialogs/rc.cpp:653
+msgid "First payment:"
+msgstr "First payment:"
+
+#: dialogs/rc.cpp:655
+msgid "Amount is:"
+msgstr "Amount is:"
+
+#: dialogs/rc.cpp:656
+msgid "Loan calculation"
+msgstr "Loan calculation"
+
+#: dialogs/rc.cpp:660
+msgid "Periodic Payment:"
+msgstr "Periodic Payment:"
+
+#: dialogs/rc.cpp:661
+msgid "Additional Fees:"
+msgstr "Additional Fees:"
+
+#: dialogs/rc.cpp:662
+msgid "Interest category:"
+msgstr "Interest category:"
+
+#: dialogs/rc.cpp:663
+msgid "Payment from:"
+msgstr "Payment from:"
+
+#: dialogs/rc.cpp:666
+msgid "Next due date:"
+msgstr "Next due date:"
+
+#: dialogs/rc.cpp:673
+msgid "Final Payment:"
+msgstr "Final Payment:"
+
+#: dialogs/rc.cpp:675
+msgid "Interest is due:"
+msgstr "Interest is due:"
+
+#: dialogs/rc.cpp:680
+msgid "Payment frequency:"
+msgstr "Payment frequency:"
+
+#: dialogs/rc.cpp:682
+msgid "Online Quote Configuration"
+msgstr "Online Quote Configuration"
+
+#: dialogs/rc.cpp:687
+msgid "Perl Location:"
+msgstr "Perl Location:"
+
+#: dialogs/rc.cpp:688
+msgid "Script:"
+msgstr "Script:"
+
+#: dialogs/rc.cpp:690
+msgid "Reassign payees"
+msgstr "Reassign payees"
+
+#: dialogs/rc.cpp:691
+msgid "The transactions associated with the selected payees need to be re-assigned to a different payee before the selected payees can be deleted. Please select a payee from the list below."
+msgstr "The transactions associated with the selected payees need to be re-assigned to a different payee before the selected payees can be deleted. Please select a payee from the list below."
+
+#: dialogs/rc.cpp:692
+msgid "Available payees:"
+msgstr "Available payees:"
+
+#: dialogs/rc.cpp:693
+msgid "Assign deleted names to the above selected payee's matching list"
+msgstr "Assign deleted names to the above selected payee's matching list"
+
+#: dialogs/rc.cpp:696
+msgid "PluginDlg"
+msgstr "PluginDlg"
+
+#: dialogs/rc.cpp:697
+msgid "PlugIn"
+msgstr "PlugIn"
+
+#: dialogs/rc.cpp:698
+#: widgets/transaction.cpp:1071
+#: widgets/transaction.cpp:1658
+msgid "Status"
+msgstr "Status"
+
+#: dialogs/rc.cpp:699
+msgid "Feature"
+msgstr "Feature"
+
+#: dialogs/rc.cpp:703
+msgid "Reconciliation Dialog"
+msgstr "Reconciliation Dialog"
+
+#: dialogs/rc.cpp:704
+msgid ""
+"This dialog will assist in helping you to balance your account.\n"
+"\n"
+"Click on an appropriate transaction within one of the two list views to mark it as reconciled. To create a transaction or edit\n"
+"a transaction you can return to the register by clicking on the Edit Transactions button.\n"
+"\n"
+"Your account is balanced when the Difference is Zero. Click on the Finish button to save the reconciled transactions."
+msgstr ""
+"This dialog will assist in helping you to balance your account.\n"
+"\n"
+"Click on an appropriate transaction within one of the two list views to mark it as reconciled. To create a transaction or edit\n"
+"a transaction you can return to the register by clicking on the Edit Transactions button.\n"
+"\n"
+"Your account is balanced when the Difference is Zero. Click on the Finish button to save the reconciled transactions."
+
+#: dialogs/rc.cpp:705
+msgid "Withdrawals"
+msgstr "Withdrawals"
+
+#: dialogs/rc.cpp:707
+#: dialogs/rc.cpp:708
+#: dialogs/rc.cpp:822
+msgid "$"
+msgstr "£"
+
+#: dialogs/rc.cpp:710
+msgid "Previous Balance:"
+msgstr "Previous Balance:"
+
+#: dialogs/rc.cpp:711
+#: dialogs/rc.cpp:713
+#: dialogs/rc.cpp:715
+#: dialogs/rc.cpp:717
+#: dialogs/rc.cpp:820
+msgid "0"
+msgstr "0"
+
+#: dialogs/rc.cpp:712
+msgid "Ending Balance:"
+msgstr "Ending Balance:"
+
+#: dialogs/rc.cpp:714
+msgid "Cleared Balance:"
+msgstr "Cleared Balance:"
+
+#: dialogs/rc.cpp:716
+msgid "Difference:"
+msgstr "Difference:"
+
+#: dialogs/rc.cpp:718
+msgid "Edit Transactions..."
+msgstr "Edit Transactions..."
+
+#: dialogs/rc.cpp:721
+msgid "Security List Editor"
+msgstr "Security List Editor"
+
+#: dialogs/rc.cpp:726
+msgid "Market"
+msgstr "Market"
+
+#: dialogs/rc.cpp:729
+msgid "Cash Fraction"
+msgstr "Cash Fraction"
+
+#: dialogs/rc.cpp:730
+msgid "Add..."
+msgstr "Add..."
+
+#: dialogs/rc.cpp:732
+#: widgets/kmymoneypriceview.cpp:157
+msgid "Delete..."
+msgstr "Delete..."
+
+#: dialogs/rc.cpp:733
+msgid "Show national currencies"
+msgstr "Show national currencies"
+
+#: dialogs/rc.cpp:735
+msgid "KMyMoney - Select Database"
+msgstr "KMyMoney - Select Database"
+
+#: dialogs/rc.cpp:736
+msgid "CAUTION!"
+msgstr "CAUTION!"
+
+#: dialogs/rc.cpp:737
+msgid ""
+"<font color=\"#ff2727\">This software is still in an experimental stage, and there are still some known response time problems. Please be patient; we are working on them.\n"
+"As always, please make sure you have adequate backups of your data.</font>"
+msgstr ""
+"<font color=\"#ff2727\">This software is still in an experimental stage, and there are still some known response time problems. Please be patient; we are working on them.\n"
+"As always, please make sure you have adequate backups of your data.</font>"
+
+#: dialogs/rc.cpp:738
+msgid "Database Type"
+msgstr "Database Type"
+
+#: dialogs/rc.cpp:739
+msgid "Database Name"
+msgstr "Database Name"
+
+#: dialogs/rc.cpp:740
+msgid "Host Name"
+msgstr "Host Name"
+
+#: dialogs/rc.cpp:741
+msgid "User Name"
+msgstr "User Name"
+
+#: dialogs/rc.cpp:743
+msgid "Preload &all data"
+msgstr "Preload &all data"
+
+#: dialogs/rc.cpp:745
+msgid "&Generate SQL"
+msgstr "&Generate SQL"
+
+#: dialogs/rc.cpp:747
+msgid "Ca&ncel"
+msgstr "Ca&ncel"
+
+#: dialogs/rc.cpp:762
+#: widgets/rc.cpp:172
+msgid "Sort options"
+msgstr "Sort options"
+
+#: dialogs/rc.cpp:763
+msgid "Use default"
+msgstr "Use default"
+
+#: dialogs/rc.cpp:767
+msgid "Correct splits"
+msgstr "Correct splits"
+
+#: dialogs/rc.cpp:769
+msgid "How do you want to proceed?"
+msgstr "How do you want to proceed?"
+
+#: dialogs/rc.cpp:770
+msgid "Continue to edit splits"
+msgstr "Continue to edit splits"
+
+#: dialogs/rc.cpp:771
+#, c-format
+msgid "Change total amount of transaction to %1."
+msgstr "Change total amount of transaction to %1."
+
+#: dialogs/rc.cpp:772
+msgid "Distribute difference of %1 among all splits."
+msgstr "Distribute difference of %1 among all splits."
+
+#: dialogs/rc.cpp:773
+msgid "Leave %1 unassigned."
+msgstr "Leave %1 unassigned."
+
+#: dialogs/rc.cpp:776
+msgid "Split transaction"
+msgstr "Split transaction"
+
+#: dialogs/rc.cpp:777
+msgid "<b>11,00<b>"
+msgstr "<b>11,00<b>"
+
+#: dialogs/rc.cpp:778
+msgid "<b>111,00<b>"
+msgstr "<b>111,00<b>"
+
+#: dialogs/rc.cpp:779
+msgid "Unassigned"
+msgstr "Unassigned"
+
+#: dialogs/rc.cpp:780
+msgid "Sum of splits"
+msgstr "Sum of splits"
+
+#: dialogs/rc.cpp:781
+msgid "100,00"
+msgstr "100,00"
+
+#: dialogs/rc.cpp:782
+msgid "Transaction amount"
+msgstr "Transaction amount"
+
+#: dialogs/rc.cpp:783
+msgid "Merge"
+msgstr "Merge"
+
+#: dialogs/rc.cpp:784
+msgid "Merges splits with the same category to one split"
+msgstr "Merges splits with the same category to one split"
+
+#: dialogs/rc.cpp:785
+msgid "In case you have multiple split entries to the same category and you like to keep them as a single split, press this button. The amount for identical categories will be added and stored in a single split for that category."
+msgstr "In case you have multiple split entries to the same category and you like to keep them as a single split, press this button. The amount for identical categories will be added and stored in a single split for that category."
+
+#: dialogs/rc.cpp:786
+msgid "Clear &Zero"
+msgstr "Clear &Zero"
+
+#: dialogs/rc.cpp:787
+msgid "Removes all splits that have a value of zero."
+msgstr "Removes all splits that have a value of zero."
+
+#: dialogs/rc.cpp:791
+msgid "New price entry"
+msgstr "New price entry"
+
+#: dialogs/rc.cpp:799
+msgid "Void mark"
+msgstr "Void mark"
+
+#: dialogs/rc.cpp:800
+msgid "Opening Balance text"
+msgstr "Opening Balance text"
+
+#: dialogs/rc.cpp:801
+msgid "Type field text"
+msgstr "Type field text"
+
+#: dialogs/rc.cpp:802
+msgid "Account delimiter"
+msgstr "Account delimiter"
+
+#: dialogs/rc.cpp:804
+msgid "Attempt to match similar transactions"
+msgstr "Attempt to match similar transactions"
+
+#: dialogs/rc.cpp:806
+#: dialogs/rc.cpp:808
+msgid "The format of the dates in the QIF file."
+msgstr "The format of the dates in the QIF file."
+
+#: dialogs/rc.cpp:809
+#: dialogs/rc.cpp:811
+msgid "If a QIF file contains date entries with years represented with two digits then either an apostrophe or a slash may be used to delimit the year in the dates for certain centuries. This enables 1905 to be distinguished from 2005. Specify here which range of years will have year delimited by an apostrophe (eg. for Quicken this is usually 1900-1949)."
+msgstr "If a QIF file contains date entries with years represented with two digits then either an apostrophe or a slash may be used to delimit the year in the dates for certain centuries. This enables 1905 to be distinguished from 2005. Specify here which range of years will have year delimited by an apostrophe (e.g. for Quicken this is usually 1900-1949)."
+
+#: dialogs/rc.cpp:810
+msgid "Apostrophe Handling"
+msgstr "Apostrophe Handling"
+
+#: dialogs/rc.cpp:812
+msgid "Amounts"
+msgstr "Amounts"
+
+#: dialogs/rc.cpp:813
+msgid "Field"
+msgstr "Field"
+
+#: dialogs/rc.cpp:814
+msgid "QIF-Record"
+msgstr "QIF-Record"
+
+#: dialogs/rc.cpp:815
+#: dialogs/rc.cpp:833
+msgid "Decimal Symbol"
+msgstr "Decimal Symbol"
+
+#: dialogs/rc.cpp:816
+msgid "Thousand Delimiter"
+msgstr "Thousand Delimiter"
+
+#: dialogs/rc.cpp:817
+msgid "SortColumnInvisible"
+msgstr "SortColumnInvisible"
+
+#: dialogs/rc.cpp:819
+msgid "T"
+msgstr "T"
+
+#: dialogs/rc.cpp:821
+msgid "Split-Value"
+msgstr "Split-Value"
+
+#: dialogs/rc.cpp:824
+msgid "Commission"
+msgstr "Commission"
+
+#: dialogs/rc.cpp:825
+msgid "O"
+msgstr "O"
+
+#: dialogs/rc.cpp:826
+msgid "2"
+msgstr "2"
+
+#: dialogs/rc.cpp:828
+msgid "I"
+msgstr "I"
+
+#: dialogs/rc.cpp:829
+msgid "3"
+msgstr "3"
+
+#: dialogs/rc.cpp:831
+msgid "Q"
+msgstr "Q"
+
+#: dialogs/rc.cpp:832
+msgid "4"
+msgstr "4"
+
+#: dialogs/rc.cpp:834
+msgid "Thousands Separator"
+msgstr "Thousands Separator"
+
+#: dialogs/rc.cpp:836
+msgid "Output filter location"
+msgstr "Output filter location"
+
+#: dialogs/rc.cpp:837
+msgid "Input filter file type"
+msgstr "Input filter file type"
+
+#: dialogs/rc.cpp:838
+msgid "*.qif"
+msgstr "*.qif"
+
+#: dialogs/rc.cpp:839
+msgid "Input filter location"
+msgstr "Input filter location"
+
+#: dialogs/rc.cpp:843
+msgid "Rename"
+msgstr "Rename"
+
+#: dialogs/kselecttransactionsdlg.cpp:44
+msgid "Select Transaction"
+msgstr "Select Transaction"
+
+#: dialogs/kselecttransactionsdlg.cpp:45
+msgid "Select a transaction and press the OK button or use Cancel to select none."
+msgstr "Select a transaction and press the OK button or use Cancel to select none."
+
+#: dialogs/knewinvestmentwizard.cpp:62
+msgid "Investment detail wizard"
+msgstr "Investment detail wizard"
+
+#: dialogs/knewinvestmentwizard.cpp:82
+msgid "Security detail wizard"
+msgstr "Security detail wizard"
+
+#: dialogs/knewaccountdlg.cpp:121
+#: dialogs/knewinvestmentwizard.cpp:109
+msgid ""
+"_: default price mode\n"
+"<default>"
+msgstr "<default>"
+
+#: dialogs/knewaccountdlg.cpp:122
+#: dialogs/knewinvestmentwizard.cpp:110
+msgid "Price per share"
+msgstr "Price per share"
+
+#: dialogs/knewaccountdlg.cpp:123
+#: dialogs/knewinvestmentwizard.cpp:111
+msgid "Total for all shares"
+msgstr "Total for all shares"
+
+#: dialogs/knewinvestmentwizard.cpp:129
+msgid "This wizard allows you to modify the selected investment."
+msgstr "This wizard allows you to modify the selected investment."
+
+#: dialogs/knewinvestmentwizard.cpp:132
+msgid "This wizard allows you to modify the selected security."
+msgstr "This wizard allows you to modify the selected security."
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid "The selected symbol is already on file. Do you want to reuse the existing security?"
+msgstr "The selected symbol is already on file. Do you want to reuse the existing security?"
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid "Security found"
+msgstr "Security found"
+
+#: dialogs/knewinvestmentwizard.cpp:309
+msgid "Unable to create all objects for the investment"
+msgstr "Unable to create all objects for the investment"
+
+#: dialogs/keditequityentrydlg.cpp:78
+msgid "Change the price information of the selected entry."
+msgstr "Change the price information of the selected entry"
+
+#: dialogs/kaccountselectdlg.cpp:64
+#: widgets/kmymoneybriefschedule.cpp:59
+msgid "&Skip"
+msgstr "&Skip"
+
+#: dialogs/kaccountselectdlg.cpp:66
+#: widgets/kmymoneybriefschedule.cpp:61
+msgid "Skip this transaction"
+msgstr "Skip this transaction"
+
+#: dialogs/kaccountselectdlg.cpp:67
+msgid "Use this to skip importing this transaction and proceed with the next one."
+msgstr "Use this to skip importing this transaction and proceed with the next one."
+
+#: dialogs/kaccountselectdlg.cpp:72
+msgid "Create a new account/category"
+msgstr "Create a new account/category"
+
+#: dialogs/kaccountselectdlg.cpp:73
+msgid "Use this to add a new account/category to the file"
+msgstr "Use this to add a new account/category to the file"
+
+#: dialogs/kaccountselectdlg.cpp:77
+msgid "&Abort"
+msgstr "&Abort"
+
+#: dialogs/kaccountselectdlg.cpp:79
+msgid "Abort the import operation and dismiss all changes"
+msgstr "Abort the import operation and dismiss all changes"
+
+#: dialogs/kaccountselectdlg.cpp:80
+msgid "Use this to abort the import. Your financial data will be in the state before you started the QIF import."
+msgstr "Use this to abort the import. Your financial data will be in the state before you started the QIF import."
+
+#: dialogs/knewaccountdlg.cpp:110
+msgid "Is a sub account"
+msgstr "Is a sub account"
+
+#: dialogs/knewaccountdlg.cpp:184
+msgid "VAT account"
+msgstr "VAT account"
+
+#: dialogs/knewaccountdlg.cpp:474
+msgid ""
+"You have not specified a name.\n"
+"Please fill in this field."
+msgstr ""
+"You have not specified a name.\n"
+"Please fill in this field."
+
+#: dialogs/knewaccountdlg.cpp:482
+msgid "Please select a parent account."
+msgstr "Please select a parent account."
+
+#: dialogs/knewaccountdlg.cpp:489
+#: dialogs/knewaccountdlg.cpp:1029
+msgid "<No Institution>"
+msgstr "<No Institution>"
+
+#: dialogs/knewaccountdlg.cpp:552
+msgid "An account named <b>%1</b> already exists. You cannot create a second account with the same name."
+msgstr "An account named <b>%1</b> already exists. You cannot create a second account with the same name."
+
+#: dialogs/knewaccountdlg.cpp:567
+msgid "A category named <b>%1</b> already exists. You cannot create a second category with the same name."
+msgstr "A category named <b>%1</b> already exists. You cannot create a second category with the same name."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid "You have selected to suppress the display of unused categories in the KMyMoney configuration dialog. The category you just created will therefore only be shown if it is used. Otherwise, it will be hidden in the accounts/categories view."
+msgstr "You have selected to suppress the display of unused categories in the KMyMoney configuration dialog. The category you just created will therefore only be shown if it is used. Otherwise, it will be hidden in the accounts/categories view."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid "Hidden categories"
+msgstr "Hidden categories"
+
+#: dialogs/knewaccountdlg.cpp:927
+#: dialogs/knewaccountdlg.cpp:979
+#, c-format
+msgid "Is a sub account of %1"
+msgstr "Is a sub account of %1"
+
+#: dialogs/knewaccountdlg.cpp:1082
+msgid "Cannot add institution"
+msgstr "Cannot add institution"
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid "This dialog does not allow to create new payees. Please pick a payee from the list."
+msgstr "This dialog does not allow to create new payees. Please pick a payee from the list."
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid "Payee creation"
+msgstr "Payee creation"
+
+#: dialogs/kimportdlg.cpp:69
+msgid "Use this to start the import operation"
+msgstr "Use this to start the import operation"
+
+#: dialogs/kimportdlg.cpp:110
+msgid ""
+"%1|Import files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Import files\n"
+"%2|All files (*.*)"
+
+#: dialogs/kimportdlg.cpp:111
+msgid "Import File..."
+msgstr "Import File..."
+
+#: dialogs/knewloanwizard.cpp:124
+msgid "Create a new category"
+msgstr "Create a new category"
+
+#: dialogs/knewloanwizard.cpp:125
+msgid "Use this to open the new account editor"
+msgstr "Use this to open the new account editor"
+
+#: dialogs/knewloanwizard.cpp:129
+msgid "&Additional fees..."
+msgstr "&Additional fees..."
+
+#: dialogs/knewloanwizard.cpp:131
+msgid "Enter additional fees"
+msgstr "Enter additional fees"
+
+#: dialogs/knewloanwizard.cpp:132
+msgid "Use this to add any additional fees other than principal and interest contained in your periodical payments."
+msgstr "Use this to add any additional fees other than principal and interest contained in your periodical payments."
+
+#: dialogs/knewloanwizard.cpp:139
+msgid "Use this to create a new account to which the initial payment should be made"
+msgstr "Use this to create a new account to which the initial payment should be made"
+
+#: dialogs/knewloanwizard.cpp:208
+msgid "To whom do you make payments?"
+msgstr "To whom do you make payments?"
+
+#: dialogs/knewloanwizard.cpp:209
+msgid "Payments to"
+msgstr "Payments to"
+
+#: dialogs/knewloanwizard.cpp:214
+msgid "From whom do you expect payments?"
+msgstr "From whom do you expect payments?"
+
+#: dialogs/knewloanwizard.cpp:215
+msgid "Payments from"
+msgstr "Payments from"
+
+#: dialogs/knewloanwizard.cpp:233
+msgid "Please enter the date, the first payment for this loan was/is due."
+msgstr "Please enter the date, the first payment for this loan was/is due."
+
+#: dialogs/knewloanwizard.cpp:235
+msgid "Note: Consult the loan contract for details of the first due date. Keep in mind, that the first due date usually differs from the date the contract was signed"
+msgstr "Note: Consult the loan contract for details of the first due date. Keep in mind, that the first due date usually differs from the date the contract was signed"
+
+#: dialogs/knewloanwizard.cpp:240
+msgid "Please enter the original loan amount in the field below or leave it empty to be calculated."
+msgstr "Please enter the original loan amount in the field below or leave it empty to be calculated."
+
+#: dialogs/knewloanwizard.cpp:248
+msgid "Please enter the date, the first payment for this loan was/is due this year."
+msgstr "Please enter the date, the first payment for this loan was/is due this year."
+
+#: dialogs/knewloanwizard.cpp:250
+msgid "Note: You can easily figure out the date of the first payment if you consult the last statement of last year."
+msgstr "Note: You can easily figure out the date of the first payment if you consult the last statement of last year."
+
+#: dialogs/knewloanwizard.cpp:254
+msgid "Please enter the remaining loan amount of last years final statement in the field below. You should not leave this field empty."
+msgstr "Please enter the remaining loan amount of last years final statement in the field below. You should not leave this field empty."
+
+#: dialogs/knewloanwizard.cpp:311
+#: dialogs/knewloanwizard.cpp:326
+#: dialogs/knewloanwizard.cpp:341
+#: dialogs/knewloanwizard.cpp:357
+#: dialogs/knewloanwizard.cpp:373
+msgid "calculate"
+msgstr "calculate"
+
+#: dialogs/knewloanwizard.cpp:417
+msgid "borrowed"
+msgstr "borrowed"
+
+#: dialogs/knewloanwizard.cpp:419
+msgid "lend"
+msgstr "lend"
+
+#: dialogs/knewloanwizard.cpp:423
+msgid "not assigned"
+msgstr "not assigned"
+
+#: dialogs/knewloanwizard.cpp:430
+msgid "on reception"
+msgstr "on reception"
+
+#: dialogs/knewloanwizard.cpp:432
+msgid "on due date"
+msgstr "on due date"
+
+#: dialogs/knewloanwizard.cpp:471
+msgid "The loan wizard is unable to calculate two different values for your loan at the same time. Please enter a value for the %1 on this page or backup to the page where the current value to be calculated is defined and fill in a value."
+msgstr "The loan wizard is unable to calculate two different values for your loan at the same time. Please enter a value for the %1 on this page or backup to the page where the current value to be calculated is defined and fill in a value."
+
+#: dialogs/knewloanwizard.cpp:500
+msgid "You selected, that payments have already been made towards this loan. This requires you to enter the loan amount exactly as found on your last statement."
+msgstr "You selected, that payments have already been made towards this loan. This requires you to enter the loan amount exactly as found on your last statement."
+
+#: dialogs/knewloanwizard.cpp:513
+msgid "interest rate"
+msgstr "interest rate"
+
+#: dialogs/knewloanwizard.cpp:522
+msgid "term"
+msgstr "term"
+
+#: dialogs/knewloanwizard.cpp:532
+msgid "principal and interest"
+msgstr "principal and interest"
+
+#: dialogs/knewloanwizard.cpp:743
+#, c-format
+msgid "The number of payments has been decremented and the final payment has been modified to %1."
+msgstr "The number of payments has been decremented and the final payment has been modified to %1."
+
+#: dialogs/knewloanwizard.cpp:751
+#: dialogs/knewloanwizard.cpp:771
+#, c-format
+msgid "The final payment has been modified to %1."
+msgstr "The final payment has been modified to %1."
+
+#: dialogs/knewloanwizard.cpp:802
+msgid "KMyMoney has calculated a final payment of %1 for this loan."
+msgstr "KMyMoney has calculated a final payment of %1 for this loan."
+
+#: dialogs/knewloanwizard.cpp:817
+msgid "You have entered mis-matching information. Please backup to the appropriate page and update your figures or leave one value empty to let KMyMoney calculate it for you"
+msgstr "You have entered mismatching information. Please backup to the appropriate page and update your figures or leave one value empty to let KMyMoney calculate it for you"
+
+#: dialogs/kfindtransactiondlg.cpp:230
+msgid "Warning: Filtering by Category will exclude all transfers from the results."
+msgstr "Warning: Filtering by Category will exclude all transfers from the results."
+
+#: dialogs/kfindtransactiondlg.cpp:239
+msgid "(None)"
+msgstr "(None)"
+
+#: dialogs/kfindtransactiondlg.cpp:241
+msgid "Current selections: "
+msgstr "Current selections: "
+
+#: dialogs/kfindtransactiondlg.cpp:716
+msgid "Found %1 matching transactions (D %2 / P %3 = %4)"
+msgstr "Found %1 matching transactions (D %2 / P %3 = %4)"
+
+#: dialogs/kfindtransactiondlg.cpp:719
+msgid "Found %1 matching transactions"
+msgstr "Found %1 matching transactions"
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "The institution name field is empty. Please enter the name."
+msgstr "The institution name field is empty. Please enter the name."
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "Adding New Institution"
+msgstr "Adding New Institution"
+
+#: dialogs/kcsvprogressdlg.cpp:69
+msgid "C&lose"
+msgstr "C&lose"
+
+#: dialogs/kcsvprogressdlg.cpp:247
+msgid " of "
+msgstr " of "
+
+#: widgets/kmymoneypriceview.cpp:126
+msgid "Commodity"
+msgstr "Commodity"
+
+#: widgets/kmymoneypriceview.cpp:130
+msgid "Source"
+msgstr "Source"
+
+#: widgets/kmymoneypriceview.cpp:143
+msgid "Price Options"
+msgstr "Price Options"
+
+#: widgets/kmymoneypriceview.cpp:153
+msgid "Online Price Update..."
+msgstr "Online Price Update..."
+
+#: widgets/kmymoneycombo.cpp:472
+#: widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+msgid "From"
+msgstr "From"
+
+#: widgets/transaction.cpp:668
+msgid "Transaction is missing a category assignment."
+msgstr "Transaction is missing a category assignment."
+
+#: widgets/transaction.cpp:671
+msgid "The transaction has a missing assignment of <b>%1</b>."
+msgstr "The transaction has a missing assignment of <b>%1</b>."
+
+#: widgets/transaction.cpp:874
+msgid "Sell"
+msgstr "Sell"
+
+#: widgets/transaction.cpp:876
+msgid "Buy"
+msgstr "Buy"
+
+#: widgets/kmymoneycombo.cpp:520
+#: widgets/transaction.cpp:879
+#: widgets/transaction.cpp:1447
+msgid "Dividend"
+msgstr "Dividend"
+
+#: widgets/kmymoneycombo.cpp:518
+#: widgets/transaction.cpp:881
+#: widgets/transaction.cpp:1453
+msgid "Yield"
+msgstr "Yield"
+
+#: widgets/transaction.cpp:886
+#: widgets/transaction.cpp:1473
+msgid "Activity"
+msgstr "Activity"
+
+#: widgets/transaction.cpp:887
+msgid "Investment transaction"
+msgstr "Investment transaction"
+
+#: widgets/transaction.cpp:1021
+#: widgets/transaction.cpp:1114
+#: widgets/transaction.cpp:1165
+msgid "*** UNASSIGNED ***"
+msgstr "*** UNASSIGNED ***"
+
+#: widgets/kmymoneycombo.cpp:517
+#: widgets/transaction.cpp:1435
+msgid "Add shares"
+msgstr "Add shares"
+
+#: widgets/kmymoneycombo.cpp:516
+#: widgets/transaction.cpp:1438
+msgid "Remove shares"
+msgstr "Remove shares"
+
+#: widgets/kmymoneycombo.cpp:522
+#: widgets/transaction.cpp:1441
+msgid "Buy shares"
+msgstr "Buy shares"
+
+#: widgets/kmymoneycombo.cpp:521
+#: widgets/transaction.cpp:1444
+msgid "Sell shares"
+msgstr "Sell shares"
+
+#: widgets/transaction.cpp:1450
+msgid "Reinvest Dividend"
+msgstr "Reinvest Dividend"
+
+#: widgets/kmymoneycombo.cpp:515
+#: widgets/transaction.cpp:1456
+msgid "Split shares"
+msgstr "Split shares"
+
+#: widgets/transaction.cpp:1515
+msgid "Ratio"
+msgstr "Ratio"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:241
+msgid "%1 Bills."
+msgstr "%1 Bills."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:257
+msgid "%1 Deposits."
+msgstr "%1 Deposits."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:273
+msgid "%1 Transfers."
+msgstr "%1 Transfers."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:355
+msgid "st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-th-th-th-th-th-st"
+msgstr "st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-th-th-th-th-th-st"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:57
+#: widgets/kmymoneyaccounttreeforecast.cpp:84
+msgid "Current"
+msgstr "Current"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:72
+#: widgets/kmymoneyaccounttreeforecast.cpp:93
+msgid "Total variation"
+msgstr "Total variation"
+
+#: widgets/stdtransactionmatched.cpp:130
+msgid "KMyMoney has matched a downloaded transaction with a manually entered one (result above)"
+msgstr "KMyMoney has matched a downloaded transaction with a manually entered one (result above)"
+
+#: widgets/stdtransactionmatched.cpp:138
+msgid "Bank entry:"
+msgstr "Bank entry:"
+
+#: widgets/stdtransactionmatched.cpp:166
+msgid "Your entry:"
+msgstr "Your entry:"
+
+#: widgets/kbudgetvalues.cpp:187
+msgid "You have entered budget values using a different base which would result in a monthly budget of <b>%1</b>. Should this value be used to fill the monthly budget?"
+msgstr "You have entered budget values using a different base which would result in a monthly budget of <b>%1</b>. Should this value be used to fill the monthly budget?"
+
+#: widgets/kbudgetvalues.cpp:187
+#: widgets/kbudgetvalues.cpp:206
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"_: Auto assignment (caption)\n"
+"Auto assignment"
+msgstr "Auto assignment"
+
+#: widgets/kbudgetvalues.cpp:206
+msgid "You have entered budget values using a different base which would result in a yearly budget of <b>%1</b>. Should this value be used to fill the monthly budget?"
+msgstr "You have entered budget values using a different base which would result in a yearly budget of <b>%1</b>. Should this value be used to fill the monthly budget?"
+
+#: widgets/kbudgetvalues.cpp:225
+msgid "You have entered budget values using a different base which would result in an individual monthly budget of <b>%1</b>. Should this value be used to fill the monthly budgets?"
+msgstr "You have entered budget values using a different base which would result in an individual monthly budget of <b>%1</b>. Should this value be used to fill the monthly budgets?"
+
+#: widgets/kmymoneybriefschedule.cpp:62
+msgid "Use this button to skip this transaction"
+msgstr "Use this button to skip this transaction"
+
+#: widgets/kmymoneybriefschedule.cpp:67
+msgid "Record this transaction into the register"
+msgstr "Record this transaction into the register"
+
+#: widgets/kmymoneybriefschedule.cpp:68
+msgid "Use this button to record this transaction"
+msgstr "Use this button to record this transaction"
+
+#: widgets/kmymoneybriefschedule.cpp:96
+msgid "%1 of %2"
+msgstr "%1 of %2"
+
+#: widgets/kmymoneybriefschedule.cpp:109
+msgid "Payment on %1 for %2 with %3 transactions remaining occuring %4."
+msgstr "Payment on %1 for %2 with %3 transactions remaining occurring %4."
+
+#: widgets/kmymoneybriefschedule.cpp:115
+msgid "Payment on %1 for %2 occuring %4."
+msgstr "Payment on %1 for %2 occurring %4."
+
+#: widgets/kmymoneybriefschedule.cpp:136
+msgid "%1 days overdue (%2 occurences)."
+msgstr "%1 days overdue (%2 occurrences)."
+
+#: widgets/register.cpp:55
+msgid "Post date"
+msgstr "Post date"
+
+#: widgets/register.cpp:56
+msgid "Date entered"
+msgstr "Date entered"
+
+#: widgets/register.cpp:60
+msgid "Entry order"
+msgstr "Entry order"
+
+#: widgets/register.cpp:63
+msgid "Reconcile state"
+msgstr "Reconcile state"
+
+#: widgets/register.cpp:440
+msgid ""
+"_: Deposits onto account\n"
+"Deposits"
+msgstr "Deposits"
+
+#: widgets/register.cpp:442
+msgid ""
+"_: Payments towards credit card\n"
+"Payments"
+msgstr "Payments"
+
+#: widgets/register.cpp:446
+msgid ""
+"_: Payments made from account\n"
+"Payments"
+msgstr "Payments"
+
+#: widgets/register.cpp:448
+msgid ""
+"_: Payments made with credit card\n"
+"Charges"
+msgstr "Charges"
+
+#: widgets/register.cpp:736
+msgid ""
+"_: Payment made from account\n"
+"Payment"
+msgstr "Payment"
+
+#: widgets/register.cpp:737
+msgid ""
+"_: Deposit into account\n"
+"Deposit"
+msgstr "Deposit"
+
+#: widgets/register.cpp:813
+msgid ""
+"_: Payment made with credit card\n"
+"Charge"
+msgstr "Charge"
+
+#: widgets/register.cpp:814
+msgid ""
+"_: Payment towards credit card\n"
+"Payment"
+msgstr "Payment"
+
+#: widgets/register.cpp:818
+#: widgets/register.cpp:824
+msgid ""
+"_: Decrease of asset/liability value\n"
+"Decrease"
+msgstr "Decrease"
+
+#: widgets/register.cpp:819
+#: widgets/register.cpp:823
+msgid ""
+"_: Increase of asset/liability value\n"
+"Increase"
+msgstr "Increase"
+
+#: widgets/register.cpp:2280
+msgid "Prior transactions possibly filtered"
+msgstr "Prior transactions possibly filtered"
+
+#: widgets/register.cpp:2284
+msgid "Last reconciliation"
+msgstr "Last reconciliation"
+
+#: widgets/register.cpp:2291
+#, c-format
+msgid "Online Statement Balance: %1"
+msgstr "Online Statement Balance: %1"
+
+#: widgets/register.cpp:2295
+msgid "This year"
+msgstr "This year"
+
+#: widgets/kmymoneycombo.cpp:674
+#: widgets/register.cpp:2296
+msgid "Last month"
+msgstr "Last month"
+
+#: widgets/register.cpp:2297
+msgid "This month"
+msgstr "This month"
+
+#: widgets/register.cpp:2298
+msgid "Last week"
+msgstr "Last week"
+
+#: widgets/register.cpp:2299
+msgid "This week"
+msgstr "This week"
+
+#: widgets/register.cpp:2300
+msgid "Yesterday"
+msgstr "Yesterday"
+
+#: widgets/kmymoneycombo.cpp:666
+#: widgets/register.cpp:2301
+msgid "Today"
+msgstr "Today"
+
+#: widgets/register.cpp:2302
+#: widgets/register.cpp:2307
+msgid "Future transactions"
+msgstr "Future transactions"
+
+#: widgets/register.cpp:2303
+msgid "Next week"
+msgstr "Next week"
+
+#: widgets/kmymoneycalendar.cpp:131
+#: widgets/register.cpp:2304
+msgid "Next month"
+msgstr "Next month"
+
+#: widgets/kmymoneycombo.cpp:670
+#: widgets/register.cpp:2315
+msgid "Current fiscal year"
+msgstr "Current fiscal year"
+
+#: widgets/register.cpp:2316
+msgid "Previous fiscal year"
+msgstr "Previous fiscal year"
+
+#: widgets/register.cpp:2317
+msgid "Next fiscal year"
+msgstr "Next fiscal year"
+
+#: widgets/register.cpp:2349
+msgid ""
+"_: Unknown payee\n"
+"Unknown"
+msgstr "Unknown"
+
+#: widgets/register.cpp:2368
+msgid ""
+"_: Unknown category\n"
+"Unknown"
+msgstr "Unknown"
+
+#: widgets/register.cpp:2387
+msgid ""
+"_: Unknown security\n"
+"Unknown"
+msgstr "Unknown"
+
+#: widgets/klistviewsearchline.cpp:249
+msgid "Search Columns"
+msgstr "Search Columns"
+
+#: widgets/klistviewsearchline.cpp:251
+msgid "All Visible Columns"
+msgstr "All Visible Columns"
+
+#: widgets/klistviewsearchline.cpp:266
+msgid ""
+"_: Column number %1\n"
+"Column No. %1"
+msgstr "Column No. %1"
+
+#: widgets/klistviewsearchline.cpp:461
+#: widgets/registersearchline.cpp:286
+msgid "S&earch:"
+msgstr "S&earch:"
+
+#: widgets/kmymoneyaccountselector.cpp:110
+#: widgets/kmymoneyaccountselector.cpp:371
+msgid "Income categories"
+msgstr "Income categories"
+
+#: widgets/kmymoneyaccountselector.cpp:349
+#: widgets/kmymoneyaccountselector.cpp:350
+msgid "Favorites"
+msgstr "Favourites"
+
+#: widgets/kmymoneyaccountselector.cpp:357
+msgid "Asset accounts"
+msgstr "Asset accounts"
+
+#: widgets/kmymoneyaccountselector.cpp:364
+msgid "Liability accounts"
+msgstr "Liability accounts"
+
+#: widgets/kmymoneyaccountselector.cpp:381
+msgid "Expense categories"
+msgstr "Expense categories"
+
+#: widgets/kmymoneyaccountselector.cpp:391
+msgid "Equity accounts"
+msgstr "Equity accounts"
+
+#: widgets/kmymoneyaccounttreebase.cpp:120
+msgid "Total Balance"
+msgstr "Total Balance"
+
+#: widgets/kmymoneyaccounttreebase.cpp:124
+msgid "Total Value"
+msgstr "Total Value"
+
+#: widgets/registersearchline.cpp:75
+msgid ""
+"_: label for status combo\n"
+"Stat&us"
+msgstr "Stat&us"
+
+#: widgets/registersearchline.cpp:79
+msgid "Any status"
+msgstr "Any status"
+
+#: widgets/registersearchline.cpp:80
+msgid "Imported"
+msgstr "Imported"
+
+#: widgets/registersearchline.cpp:81
+msgid "Matched"
+msgstr "Matched"
+
+#: widgets/registersearchline.cpp:82
+msgid "Erroneous"
+msgstr "Erroneous"
+
+#: widgets/registersearchline.cpp:83
+msgid "Not marked"
+msgstr "Not marked"
+
+#: widgets/kmymoneyaccounttree.cpp:54
+msgid ""
+"_: Column heading for category in tax report\n"
+"Tax"
+msgstr "Tax"
+
+#: widgets/kmymoneyaccounttree.cpp:58
+msgid ""
+"_: Column heading for VAT category\n"
+"VAT"
+msgstr "VAT"
+
+#: widgets/kmymoneywizard.cpp:101
+msgid "Continue with next page"
+msgstr "Continue with next page"
+
+#: widgets/kmymoneywizard.cpp:103
+msgid "Finish wizard"
+msgstr "Finish wizard"
+
+#: widgets/kmymoneywizard.cpp:121
+msgid "&Back"
+msgstr "&Back"
+
+#: widgets/kmymoneywizard.cpp:122
+msgid "&Next"
+msgstr "&Next"
+
+#: widgets/kmymoneywizard.cpp:123
+msgid "&Finish"
+msgstr "&Finish"
+
+#: widgets/kmymoneywizard.cpp:274
+msgid "Step %1 of %2"
+msgstr "Step %1 of %2"
+
+#: widgets/kmymoneydateinput.cpp:235
+msgid ""
+"_: Enter todays date into date input widget\n"
+"T"
+msgstr "T"
+
+#: widgets/transactionform.cpp:302
+msgid "&Deposit"
+msgstr "&Deposit"
+
+#: widgets/transactionform.cpp:304
+#: widgets/transactionform.cpp:313
+#: widgets/transactionform.cpp:323
+#: widgets/transactionform.cpp:333
+msgid "&Transfer"
+msgstr "&Transfer"
+
+#: widgets/transactionform.cpp:306
+msgid "&Withdrawal"
+msgstr "&Withdrawal"
+
+#: widgets/transactionform.cpp:311
+msgid "&Payment"
+msgstr "&Payment"
+
+#: widgets/transactionform.cpp:315
+msgid "&Charge"
+msgstr "&Charge"
+
+#: widgets/transactionform.cpp:321
+#: widgets/transactionform.cpp:335
+msgid "&Decrease"
+msgstr "&Decrease"
+
+#: widgets/transactionform.cpp:325
+#: widgets/transactionform.cpp:331
+msgid "&Increase"
+msgstr "&Increase"
+
+#: widgets/kmymoneyscheduledcalendar.cpp:42
+msgid "Select Schedules"
+msgstr "Select Schedules"
+
+#: widgets/kmymoneycalendar.cpp:108
+msgid "Select Style"
+msgstr "Select Style"
+
+#: widgets/kmymoneycalendar.cpp:128
+msgid "Choose Style"
+msgstr "Choose Style"
+
+#: widgets/kmymoneycalendar.cpp:129
+msgid "Next year"
+msgstr "Next year"
+
+#: widgets/kmymoneycalendar.cpp:130
+msgid "Previous year"
+msgstr "Previous year"
+
+#: widgets/kmymoneycalendar.cpp:132
+msgid "Previous month"
+msgstr "Previous month"
+
+#: widgets/kmymoneycalendar.cpp:133
+msgid "Select a week"
+msgstr "Select a week"
+
+#: widgets/kmymoneycalendar.cpp:134
+msgid "Select a month"
+msgstr "Select a month"
+
+#: widgets/kmymoneycalendar.cpp:135
+msgid "Select a year"
+msgstr "Select a year"
+
+#: widgets/kmymoneycalendar.cpp:249
+msgid "Week XX"
+msgstr "Week XX"
+
+#: widgets/kmymoneycalendar.cpp:264
+#: widgets/kmymoneycalendar.cpp:300
+#, c-format
+msgid "Week %1"
+msgstr "Week %1"
+
+#: widgets/rc.cpp:1
+msgid "Account Types"
+msgstr "Account Types"
+
+#: widgets/rc.cpp:3
+msgid "Detailed description"
+msgstr "Detailed description"
+
+#: widgets/rc.cpp:18
+msgid "Period"
+msgstr "Period"
+
+#: widgets/rc.cpp:21
+msgid "Individual"
+msgstr "Individual"
+
+#: widgets/rc.cpp:23
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Acces to the settings is disabled if <b>GPG</b> could not be detected on your system. In this case, please make sure that <b>GPG</b> is working properly for the current user.<p>\n"
+"The <i>Recovery encryption</i> group is only accessible, if the necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is found."
+msgstr ""
+"This page allows you to set the parameters for encrypted file storage of your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Access to the settings is disabled if <b>GPG</b> could not be detected on your system. In this case, please make sure that <b>GPG</b> is working properly for the current user.<p>\n"
+"The <i>Recovery encryption</i> group is only accessible, if the necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is found."
+
+#: widgets/rc.cpp:26
+msgid "Enter the id of the key you want to use for data encryption. This can either be an e-mail address or the hexadecimal key id. In case of the key id don't forget the leading <i>0x</i>."
+msgstr "Enter the id of the key you want to use for data encryption. This can either be an e-mail address or the hexadecimal key id. In case of the key id don't forget the leading <i>0x</i>."
+
+#: widgets/rc.cpp:27
+msgid "User ID"
+msgstr "User ID"
+
+#: widgets/rc.cpp:29
+msgid "Recovery encryption"
+msgstr "Recovery encryption"
+
+#: widgets/rc.cpp:30
+msgid "Also encrypt with kmymoney-recover key"
+msgstr "Also encrypt with kmymoney-recover key"
+
+#: widgets/rc.cpp:32
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only the core KMyMoney developers are in posession of the respective private key required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and cannot access your data anymore. With this option activated, the KMyMoney developers can decrypt the data and supply you with it in a readable form. Please be prepared, that you have to answer a few detailed questions about the contents of your data before we will send it out."
+msgstr ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only the core KMyMoney developers are in possession of the respective private key required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and cannot access your data any more. With this option activated, the KMyMoney developers can decrypt the data and supply you with it in a readable form. Please be prepared, that you have to answer a few detailed questions about the contents of your data before we will send it out."
+
+#: widgets/rc.cpp:51
+msgid "PriceInfo"
+msgstr "PriceInfo"
+
+#: widgets/rc.cpp:52
+msgid "Report Tab"
+msgstr "Report Tab"
+
+#: widgets/rc.cpp:53
+msgid "<p>On this tab, you set the basic properties of this report.</p>"
+msgstr "<p>On this tab, you set the basic properties of this report.</p>"
+
+#: widgets/rc.cpp:54
+msgid "Report Name"
+msgstr "Report Name"
+
+#: widgets/rc.cpp:55
+msgid "<p>Choose a name for this report.</p>"
+msgstr "<p>Choose a name for this report.</p>"
+
+#: widgets/rc.cpp:57
+msgid "<p>Enter a comment to help you remember the details of this report.</p>"
+msgstr "<p>Enter a comment to help you remember the details of this report.</p>"
+
+#: widgets/rc.cpp:58
+msgid "Convert values to base currency"
+msgstr "Convert values to base currency"
+
+#: widgets/rc.cpp:59
+msgid ""
+"_: Convert 'em!!\n"
+"<p>Select this option to convert all values in the report to your base currency.</p><p>Leave it unchecked if you'd like to see values in their original currency.</p><p>If currencies are not converted, then subtotals will not be shown.</p>"
+msgstr "<p>Select this option to convert all values in the report to your base currency.</p><p>Leave it unchecked if you'd like to see values in their original currency.</p><p>If currencies are not converted, then subtotals will not be shown.</p>"
+
+#: widgets/rc.cpp:60
+msgid "Mark as a favorite report"
+msgstr "Mark as a favourite report"
+
+#: widgets/rc.cpp:61
+msgid "<p>Select this option to notate this report as one of your favorites.</p><p>All your favorite reports are grouped in one place on the report list for easy access.</p>"
+msgstr "<p>Select this option to notate this report as one of your favourites.</p><p>All your favourite reports are grouped in one place on the report list for easy access.</p>"
+
+#: widgets/rc.cpp:62
+#: widgets/rc.cpp:88
+msgid "Rows/Columns Tab"
+msgstr "Rows/Columns Tab"
+
+#: widgets/rc.cpp:63
+#: widgets/rc.cpp:89
+msgid "<p>On this tab, you configure how you'd like the rows and columns to be selected and organized.</p>"
+msgstr "<p>On this tab, you configure how you'd like the rows and columns to be selected and organised.</p>"
+
+#: widgets/rc.cpp:69
+#: widgets/rc.cpp:81
+msgid "<p>Choose what kind of accounts to display as the rows of this report.</p>"
+msgstr "<p>Choose what kind of accounts to display as the rows of this report.</p>"
+
+#: widgets/rc.cpp:71
+msgid "Columns"
+msgstr "Columns"
+
+#: widgets/rc.cpp:75
+msgid "Bi-Monthly"
+msgstr "Bi-Monthly"
+
+#: widgets/rc.cpp:78
+msgid "<p>Choose how large of a time period each column should encompass</p>"
+msgstr "<p>Choose how large of a time period each column should encompass</p>"
+
+#: widgets/rc.cpp:79
+msgid "Income & Expenses"
+msgstr "Income & Expenses"
+
+#: widgets/rc.cpp:80
+msgid "Assets & Liabilities"
+msgstr "Assets & Liabilities"
+
+#: widgets/rc.cpp:82
+msgid "Rows"
+msgstr "Rows"
+
+#: widgets/rc.cpp:83
+msgid "Show totals column"
+msgstr "Show totals column"
+
+#: widgets/rc.cpp:84
+msgid "Average days"
+msgstr "Average days"
+
+#: widgets/rc.cpp:85
+msgid "Include scheduled transactions"
+msgstr "Include scheduled transactions"
+
+#: widgets/rc.cpp:86
+msgid "Include transfers"
+msgstr "Include transfers"
+
+#: widgets/rc.cpp:87
+msgid "Include unused accounts/categories"
+msgstr "Include unused accounts/categories"
+
+#: widgets/rc.cpp:90
+msgid "Organize by:"
+msgstr "Organise by:"
+
+#: widgets/rc.cpp:92
+msgid "Top Categories"
+msgstr "Top Categories"
+
+#: widgets/rc.cpp:95
+msgid "Top Accounts"
+msgstr "Top Accounts"
+
+#: widgets/rc.cpp:98
+msgid "<p>Choose how to group the transactions in this report</p>"
+msgstr "<p>Choose how to group the transactions in this report</p>"
+
+#: widgets/rc.cpp:99
+msgid "Show Columns"
+msgstr "Show Columns"
+
+#: widgets/rc.cpp:100
+msgid "<p>Choose which columns should be shown in the report.</p><p>The date and transaction amount are always shown.</p>"
+msgstr "<p>Choose which columns should be shown in the report.</p><p>The date and transaction amount are always shown.</p>"
+
+#: widgets/rc.cpp:102
+msgid "<p>Select this option to show the Memo column</p>"
+msgstr "<p>Select this option to show the Memo column</p>"
+
+#: widgets/rc.cpp:104
+msgid "<p>Select this option to show the Shares column for investments</p>"
+msgstr "<p>Select this option to show the Shares column for investments</p>"
+
+#: widgets/rc.cpp:106
+msgid "<p>Select this option to show the Price column for investments</p>"
+msgstr "<p>Select this option to show the Price column for investments</p>"
+
+#: widgets/rc.cpp:108
+msgid "<p>Select this option to show the Reconciled column</p>"
+msgstr "<p>Select this option to show the Reconciled column</p>"
+
+#: widgets/rc.cpp:110
+msgid "<p>Select this option to show the Account column</p>"
+msgstr "<p>Select this option to show the Account column</p>"
+
+#: widgets/rc.cpp:112
+msgid "<p>Select this option to show the Number column</p>"
+msgstr "<p>Select this option to show the Number column</p>"
+
+#: widgets/rc.cpp:114
+msgid "<p>Select this option to show the Payee column</p>"
+msgstr "<p>Select this option to show the Payee column</p>"
+
+#: widgets/rc.cpp:116
+msgid "<p>Select this option to show the Category column</p>"
+msgstr "<p>Select this option to show the Category column</p>"
+
+#: widgets/rc.cpp:118
+msgid "<p>Select this option to show the Action column</p>"
+msgstr "<p>Select this option to show the Action column</p>"
+
+#: widgets/rc.cpp:120
+msgid "<p>Select this option to show the Running balance column</p>"
+msgstr "<p>Select this option to show the Running balance column</p>"
+
+#: widgets/rc.cpp:121
+msgid "Include only Loan accounts"
+msgstr "Include only Loan accounts"
+
+#: widgets/rc.cpp:122
+msgid "Include only Investment accounts"
+msgstr "Include only Investment accounts"
+
+#: widgets/rc.cpp:123
+#: widgets/rc.cpp:127
+msgid "<p>Check this box to include only those categories which have been marked to \"Include on Tax Reports\"</p>"
+msgstr "<p>Check this box to include only those categories which have been marked to \"Include on Tax Reports\"</p>"
+
+#: widgets/rc.cpp:124
+msgid "Hide Split Transaction Details"
+msgstr "Hide Split Transaction Details"
+
+#: widgets/rc.cpp:125
+msgid "Do not display the individual transactions that make up a split transaction"
+msgstr "Do not display the individual transactions that make up a split transaction"
+
+#: widgets/rc.cpp:126
+msgid "Include only Tax categories"
+msgstr "Include only Tax categories"
+
+#: widgets/rc.cpp:128
+msgid "Chart Tab"
+msgstr "Chart Tab"
+
+#: widgets/rc.cpp:129
+msgid "<p>On this tab, you configure the chart drawn forthis report.</p>"
+msgstr "<p>On this tab, you configure the chart drawn for this report.</p>"
+
+#: widgets/rc.cpp:130
+msgid "Chart Type"
+msgstr "Chart Type"
+
+#: widgets/rc.cpp:131
+msgid "<p>Select what form you would like the chart to be drawn as.</p>"
+msgstr "<p>Select what form you would like the chart to be drawn as.</p>"
+
+#: widgets/rc.cpp:132
+msgid "Line"
+msgstr "Line"
+
+#: widgets/rc.cpp:133
+msgid "Bar"
+msgstr "Bar"
+
+#: widgets/rc.cpp:134
+msgid "Stacked Bar"
+msgstr "Stacked Bar"
+
+#: widgets/rc.cpp:135
+msgid "Pie"
+msgstr "Pie"
+
+#: widgets/rc.cpp:136
+msgid "Ring"
+msgstr "Ring"
+
+#: widgets/rc.cpp:137
+msgid "Show grid lines"
+msgstr "Show grid lines"
+
+#: widgets/rc.cpp:138
+msgid "<p>Select this option to show horizontal and vertical grid lines on the chart.</p>"
+msgstr "<p>Select this option to show horizontal and vertical grid lines on the chart.</p>"
+
+#: widgets/rc.cpp:139
+msgid "Draw values on chart"
+msgstr "Draw values on chart"
+
+#: widgets/rc.cpp:140
+msgid "<p>Select this option to draw the numeric values for data points next to their plot location.</p>"
+msgstr "<p>Select this option to draw the numeric values for data points next to their plot location.</p>"
+
+#: widgets/rc.cpp:141
+msgid "Show as chart by default"
+msgstr "Show as chart by default"
+
+#: widgets/rc.cpp:142
+msgid "<p>Select this option to cause the report to be shown as a chart when you first open the report. Otherwise, it will come up as a text report.</p>"
+msgstr "<p>Select this option to cause the report to be shown as a chart when you first open the report. Otherwise, it will come up as a text report.</p>"
+
+#: widgets/rc.cpp:143
+msgid "Line width"
+msgstr "Line width"
+
+#: widgets/rc.cpp:144
+msgid "<p>Select what width should be used to draw the line on the chart</p>"
+msgstr "<p>Select what width should be used to draw the line on the chart</p>"
+
+#: widgets/rc.cpp:145
+msgid "ReportControl"
+msgstr "ReportControl"
+
+#: widgets/rc.cpp:149
+msgid "Configure this report"
+msgstr "Configure this report"
+
+#: widgets/rc.cpp:151
+msgid "Create a new report based on this one"
+msgstr "Create a new report based on this one"
+
+#: widgets/rc.cpp:153
+msgid "Copy this report to the clipboard"
+msgstr "Copy this report to the clipboard"
+
+#: widgets/rc.cpp:155
+msgid "Export this report as an HTML or CSV file"
+msgstr "Export this report as an HTML or CSV file"
+
+#: widgets/rc.cpp:157
+msgid "Permanently delete this report"
+msgstr "Permanently delete this report"
+
+#: widgets/rc.cpp:159
+msgid "Close this window"
+msgstr "Close this window"
+
+#: widgets/rc.cpp:162
+msgid "n of n"
+msgstr "n of n"
+
+#: widgets/rc.cpp:166
+msgid "Account:"
+msgstr "Account:"
+
+#: widgets/rc.cpp:168
+msgid "Enter..."
+msgstr "Enter..."
+
+#: widgets/rc.cpp:171
+msgid "TransactionSortOptionDecl"
+msgstr "TransactionSortOptionDecl"
+
+#: widgets/rc.cpp:173
+msgid "Sort order"
+msgstr "Sort order"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Sunday\n"
+"Sun"
+msgstr "Sun"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Saturday\n"
+"Sat"
+msgstr "Sat"
+
+#: widgets/kmymoneydatetbl.cpp:171
+#: widgets/kmymoneydatetbl.cpp:178
+msgid "Week %1 for year %2."
+msgstr "Week %1 for year %2."
+
+#: widgets/kmymoneycombo.cpp:417
+msgid "ATM"
+msgstr "Cash machine"
+
+#: widgets/kmymoneycombo.cpp:418
+msgid "Withdrawal"
+msgstr "Withdrawal"
+
+#: widgets/kmymoneycombo.cpp:421
+msgid "Cheque"
+msgstr "Cheque"
+
+#: widgets/kmymoneycombo.cpp:469
+msgid ""
+"_: Activity for expense categories\n"
+"Paid"
+msgstr "Paid"
+
+#: widgets/kmymoneycombo.cpp:470
+msgid ""
+"_: Activity for income categories\n"
+"Received"
+msgstr "Received"
+
+#: widgets/kmymoneycombo.cpp:519
+msgid "Reinvest dividend"
+msgstr "Reinvest dividend"
+
+#: widgets/kmymoneycombo.cpp:664
+msgid "All dates"
+msgstr "All dates"
+
+#: widgets/kmymoneycombo.cpp:665
+msgid "As of today"
+msgstr "As of today"
+
+#: widgets/kmymoneycombo.cpp:667
+msgid "Current month"
+msgstr "Current month"
+
+#: widgets/kmymoneycombo.cpp:668
+msgid "Current quarter"
+msgstr "Current quarter"
+
+#: widgets/kmymoneycombo.cpp:669
+msgid "Current year"
+msgstr "Current year"
+
+#: widgets/kmymoneycombo.cpp:671
+msgid "Month to date"
+msgstr "Month to date"
+
+#: widgets/kmymoneycombo.cpp:672
+msgid "Year to date"
+msgstr "Year to date"
+
+#: widgets/kmymoneycombo.cpp:673
+msgid "Year to month"
+msgstr "Year to month"
+
+#: widgets/kmymoneycombo.cpp:675
+msgid "Last year"
+msgstr "Last year"
+
+#: widgets/kmymoneycombo.cpp:676
+msgid "Last fiscal year"
+msgstr "Last fiscal year"
+
+#: widgets/kmymoneycombo.cpp:677
+msgid "Last 7 days"
+msgstr "Last 7 days"
+
+#: widgets/kmymoneycombo.cpp:678
+msgid "Last 30 days"
+msgstr "Last 30 days"
+
+#: widgets/kmymoneycombo.cpp:679
+msgid "Last 3 months"
+msgstr "Last 3 months"
+
+#: widgets/kmymoneycombo.cpp:680
+msgid "Last quarter"
+msgstr "Last quarter"
+
+#: widgets/kmymoneycombo.cpp:681
+msgid "Last 6 months"
+msgstr "Last 6 months"
+
+#: widgets/kmymoneycombo.cpp:682
+msgid "Last 11 months"
+msgstr "Last 11 months"
+
+#: widgets/kmymoneycombo.cpp:683
+msgid "Last 12 months"
+msgstr "Last 12 months"
+
+#: widgets/kmymoneycombo.cpp:684
+msgid "Next 7 days"
+msgstr "Next 7 days"
+
+#: widgets/kmymoneycombo.cpp:685
+msgid "Next 30 days"
+msgstr "Next 30 days"
+
+#: widgets/kmymoneycombo.cpp:686
+msgid "Next 3 months"
+msgstr "Next 3 months"
+
+#: widgets/kmymoneycombo.cpp:687
+msgid "Next quarter"
+msgstr "Next quarter"
+
+#: widgets/kmymoneycombo.cpp:688
+msgid "Next 6 months"
+msgstr "Next 6 months"
+
+#: widgets/kmymoneycombo.cpp:689
+msgid "Next 12 months"
+msgstr "Next 12 months"
+
+#: widgets/kmymoneycombo.cpp:690
+msgid "Last 3 months to next 3 months"
+msgstr "Last 3 months to next 3 months"
+
+#: widgets/kmymoneycombo.cpp:691
+msgid "User defined"
+msgstr "User defined"
+
+#~ msgid "Reset"
+#~ msgstr "Reset"
+#~ msgid "Create schedule..."
+#~ msgstr "Create schedule..."
+
+#, fuzzy
+#~ msgid "New schedule..."
+#~ msgstr "&New Schedule..."
+
+#, fuzzy
+#~ msgid "Edit schedule..."
+#~ msgstr "Loading schedules..."
+
+#, fuzzy
+#~ msgid "Delete schedule..."
+#~ msgstr "Create schedule..."
+
+#, fuzzy
+#~ msgid "Duplicate schedule"
+#~ msgstr "Duplicate open"
+
+#, fuzzy
+#~ msgid "Enter schedule..."
+#~ msgstr "Create schedule..."
+
+#, fuzzy
+#~ msgid "Skip schedule..."
+#~ msgstr "Loading schedules..."
+
+#, fuzzy
+#~ msgid "Adjusting schedules..."
+#~ msgstr "Loading schedules..."
+
+#, fuzzy
+#~ msgid "Add schedule"
+#~ msgstr "schedules\n"
+
+#, fuzzy
+#~ msgid "Unable to enter transaction for schedule '%1'"
+#~ msgstr "Unable to add transaction/modify schedule"
+
+#, fuzzy
+#~ msgid "Loaded"
+#~ msgstr "Loan"
+
+#, fuzzy
+#~ msgid "not loaded: %1"
+#~ msgstr "Cleared: %1"
+
+#, fuzzy
+#~ msgid "Schedule options"
+#~ msgstr "Schedule startup options"
+#~ msgid "New Schedule"
+#~ msgstr "New Schedule"
+
+#, fuzzy
+#~ msgid "Edit Schedule"
+#~ msgstr "Edit Bill Schedule"
+#~ msgid "Search transactions containing the following text"
+#~ msgstr "Search transactions containing the following text"
+#~ msgid "Search"
+#~ msgstr "Search"
+#~ msgid "&Search"
+#~ msgstr "&Search"
+#~ msgid "Start the search"
+#~ msgstr "Start the search"
+#~ msgid "Takes the current criteria and searches for matching transactions."
+#~ msgstr "Takes the current criteria and searches for matching transactions."
+#~ msgid "Reset all settings"
+#~ msgstr "Reset all settings"
+#~ msgid ""
+#~ "Use this to reset all settings to the state they were when the dialog was "
+#~ "opened."
+#~ msgstr ""
+#~ "Use this to reset all settings to the state they were when the dialog was "
+#~ "opened."
+#~ msgid "Use this button to close the window"
+#~ msgstr "Use this button to close the window"
+
+#, fuzzy
+#~ msgid "Multi-user mode not yet implemented\n"
+#~ msgstr "Function not available"
+#~ msgid "Accept splits and return to transaction form"
+#~ msgstr "Accept splits and return to transaction form"
+#~ msgid ""
+#~ "Use this to accept all changes to the splits and return to the transaction"
+#~ msgstr ""
+#~ "Use this to accept all changes to the splits and return to the transaction"
+#~ msgid ""
+#~ "This QIF file contains investment transactions. You are trying to import "
+#~ "this file into an account which is not an investment account. These "
+#~ "transactions will be ignored."
+#~ msgstr ""
+#~ "This QIF file contains investment transactions. You are trying to import "
+#~ "this file into an account which is not an investment account. These "
+#~ "transactions will be ignored."
+#~ msgid "Invalid account for investments"
+#~ msgstr "Invalid account for investments"
+#~ msgid "Problem adding imported transaction: "
+#~ msgstr "Problem adding imported transaction: "
+#~ msgid ""
+#~ "This file contains security entries. These are not currently supported "
+#~ "by the QIF importer."
+#~ msgstr ""
+#~ "This file contains security entries. These are not currently supported "
+#~ "by the QIF importer."
+#~ msgid "Unable to import"
+#~ msgstr "Unable to import"
+
+#, fuzzy
+#~ msgid "Budget "
+#~ msgstr "digits"
+
+#, fuzzy
+#~ msgid "Forecast "
+#~ msgstr "Total amount"
+
+#, fuzzy
+#~ msgid "Budget Total"
+#~ msgstr "Next year"
+
+#, fuzzy
+#~ msgid "Forecast Total"
+#~ msgstr "Total amount"
+
+#, fuzzy
+#~ msgid "Incomes and Expenses This Month"
+#~ msgstr "Income and Expenses this month"
+
+#, fuzzy
+#~ msgid "Incomes"
+#~ msgstr "Income"
+
+#, fuzzy
+#~ msgid "Schedules This Month"
+#~ msgstr "Scheduled Transactions"
+#~ msgid "&Ok"
+#~ msgstr "&Ok"
+#~ msgid "Accepts the value and stores them"
+#~ msgstr "Accepts the value and stores it"
+#~ msgid "Use this to accept all values and close the dialog."
+#~ msgstr "Use this to accept all values and close the dialog."
+#~ msgid "Cancel the operation"
+#~ msgstr "Cancel the operation"
+#~ msgid "Use this to dismiss all the changes made in this dialog."
+#~ msgstr "Use this to dismiss all the changes made in this dialog."
+#~ msgid "Abort operation"
+#~ msgstr "Abort operation"
+#~ msgid "Use this to abort the export operation"
+#~ msgstr "Use this to abort the export operation"
+#~ msgid "Start the backup operation"
+#~ msgstr "Start the backup operation"
+#~ msgid "Pressing this button starts the backup operation."
+#~ msgstr "Pressing this button starts the backup operation."
+#~ msgid "Cancel the backup operation"
+#~ msgstr "Cancel the backup operation"
+#~ msgid "Use this to abort the backup and to return to KMyMoney."
+#~ msgstr "Use this to abort the backup and to return to KMyMoney."
+#~ msgid "Reject all changes to the splits and return to transaction form"
+#~ msgstr "Reject all changes to the splits and return to transaction form"
+#~ msgid ""
+#~ "Use this to reject all changes to the splits and return to the transaction"
+#~ msgstr ""
+#~ "Use this to reject all changes to the splits and return to the transaction"
+#~ msgid "Close dialog"
+#~ msgstr "Close dialog"
+#~ msgid "Use this to close the dialog and abort the operation"
+#~ msgstr "Use this to close the dialog and abort the operation"
+#~ msgid "Use this to accept and store data"
+#~ msgstr "Use this to accept and store data"
+#~ msgid "Delete the selected profile"
+#~ msgstr "Delete the selected profile"
+#~ msgid "Use this to delete the selected profile"
+#~ msgstr "Use this to delete the selected profile"
+#~ msgid "Use this to accept the data."
+#~ msgstr "Use this to accept the data."
+#~ msgid "Reject all changes to the data and closes the dialog"
+#~ msgstr "Reject all changes to the data and closes the dialog"
+#~ msgid "Use this to reject all changes."
+#~ msgstr "Use this to reject all changes."
+
+#, fuzzy
+#~ msgid "Scan"
+#~ msgstr "&Scan"
+#~ msgid "Automatically create missing payees"
+#~ msgstr "Automatically create missing payees"
+#~ msgid "Remove this price information from the price history"
+#~ msgstr "Remove this price information from the price history"
+#~ msgid "Create a new price information entry."
+#~ msgstr "Create a new price information entry"
+#~ msgid "Accepts the selected action and continues"
+#~ msgstr "Accepts the selected action and continues"
+#~ msgid ""
+#~ "Use this to accept the selection and continue processing the transaction"
+#~ msgstr ""
+#~ "Use this to accept the selection and continue processing the transaction"
+#~ msgid "Reject any changes"
+#~ msgstr "Reject any changes"
+#~ msgid "Use this to abort the account/category dialog"
+#~ msgstr "Use this to abort the account/category dialog"
+#~ msgid "Accept modifications"
+#~ msgstr "Accept modifications"
+#~ msgid "Use this to accept the data and possibly create the account/category"
+#~ msgstr ""
+#~ "Use this to accept the data and possibly create the account/category"
+#~ msgid "New ..."
+#~ msgstr "New..."
+
+#, fuzzy
+#~ msgid "S&ummary"
+#~ msgstr "Summary"
+
+#, fuzzy
+#~ msgid "Det&ail"
+#~ msgstr "Details"
+
+#, fuzzy
+#~ msgid "Total Incomes This Month"
+#~ msgstr "Income and Expenses this month"
+
+#, fuzzy
+#~ msgid "Total Expenses This Month"
+#~ msgstr "Income and Expenses this month"
+
+#, fuzzy
+#~ msgid "Scheduled Transfers This Month"
+#~ msgstr "Income and Expenses this month"
+
+#, fuzzy
+#~ msgid "&Use the ledger lens"
+#~ msgstr "Use the ledger lens"
+#~ msgid "&Create"
+#~ msgstr "&Create"
+
+#, fuzzy
+#~ msgid "Co&nfigure"
+#~ msgstr "Con&figure"
+
+#, fuzzy
+#~ msgid "Te&xt"
+#~ msgstr "Text"
+#~ msgid "Online &Quotes"
+#~ msgstr "Online &Quotes"
+#~ msgid "&Edit ..."
+#~ msgstr "&Edit ..."
+#~ msgid "&Delete ..."
+#~ msgstr "&Delete ..."
+
+#, fuzzy
+#~ msgid "&Yearly"
+#~ msgstr "Yearly"
+#~ msgid "Advanced Institution Settings"
+#~ msgstr "Advanced Institution Selection"
+#~ msgid "OFX Direct Connect Settings"
+#~ msgstr "OFX Direct Connect settings"
+#~ msgid "Enable OFX Direct Connect"
+#~ msgstr "Enable OFX Direct Connect"
+#~ msgid "FIORG"
+#~ msgstr "FIORG"
+#~ msgid "Commodity Editor"
+#~ msgstr "Commodity editor"
+#~ msgid "1/"
+#~ msgstr "1/"
+#~ msgid "Code"
+#~ msgstr "Code"
+#~ msgid "Account Fraction"
+#~ msgstr "Account fraction"
+#~ msgid "Alt+O"
+#~ msgstr "Alt+O"
+#~ msgid "Alt+C"
+#~ msgstr "Alt+C"
+
+#, fuzzy
+#~ msgid "Online Banking"
+#~ msgstr "Configure online &banking..."
+#~ msgid "Checkings"
+#~ msgstr "Cheques"
+#~ msgid "R"
+#~ msgstr "R"
+
+#, fuzzy
+#~ msgid "Column 1"
+#~ msgstr "Columns"
+#~ msgid "Transaction History"
+#~ msgstr "Transaction History"
+#~ msgid "Personal Information"
+#~ msgstr "Personal information"
+#~ msgid "TextLabel2"
+#~ msgstr "TextLabel2"
+#~ msgid "YTD:"
+#~ msgstr "YTD:"
+#~ msgid "TextLabel4"
+#~ msgstr "TextLabel4"
+#~ msgid "Online update using OFX..."
+#~ msgstr "Online update using OFX..."
+
+#, fuzzy
+#~ msgid "Match Transaction..."
+#~ msgstr "&Edit Transactions..."
+
+#, fuzzy
+#~ msgid "Match With This Transaction"
+#~ msgstr "Skip this transaction"
+#~ msgid "Import %1 Statement..."
+#~ msgstr "Import %1 Statement..."
+#~ msgid "Unable to import <b>%1</b> file. There is no such plugin loaded."
+#~ msgstr "Unable to import <b>%1</b> file. There is no such plugin loaded."
+#~ msgid "Function not available"
+#~ msgstr "Function not available"
+#~ msgid "Edit an account"
+#~ msgstr "Edit an account"
+#~ msgid ""
+#~ "The currently opened KMyMoney document does not contain a single asset "
+#~ "account. In order to maintain your finances you need at least one asset "
+#~ "account (e.g. your checkings account). KMyMoney will start the \"New "
+#~ "Account Wizard\" now which allows you to create your first asset account."
+#~ msgstr ""
+#~ "The currently opened KMyMoney document does not contain a single asset "
+#~ "account. In order to maintain your finances you need at least one asset "
+#~ "account (e.g. your current account). KMyMoney will start the \"New "
+#~ "Account Wizard\" now which allows you to create your first asset account."
+#~ msgid "No asset account"
+#~ msgstr "No asset account"
+#~ msgid "%1 (Plugin)..."
+#~ msgstr "%1 (Plugin)..."
+#~ msgid "GnuCash Importer"
+#~ msgstr "GnuCash Importer"
+#~ msgid "Automatic Application Test driver suite"
+#~ msgstr "Automatic Application Test driver suite"
+#~ msgid "AppTest"
+#~ msgstr "AppTest"
+
+#, fuzzy
+#~ msgid "Open Configuration Dialog"
+#~ msgstr "OFX Configuration Help"
+
+#, fuzzy
+#~ msgid "Importing templates..."
+#~ msgstr "Loading templates..."
+#~ msgid "Until today"
+#~ msgstr "Until today"
+#~ msgid "Tax Transactions"
+#~ msgstr "Tax Transactions"
+#~ msgid "Unable to parse date %1 using format %2: %3"
+#~ msgstr "Unable to parse date %1 using format %2: %3"
+
+#, fuzzy
+#~ msgid "Pa&yee"
+#~ msgstr "Payee"
+
+#, fuzzy
+#~ msgid "Return"
+#~ msgstr "&Run"
+
+#, fuzzy
+#~ msgid "Summar&y"
+#~ msgstr "Summary"
+#~ msgid "one month"
+#~ msgstr "one month"
+#~ msgid "one year"
+#~ msgstr "one year"
+#~ msgid "one payment"
+#~ msgstr "one payment"
+#~ msgid "Every four week"
+#~ msgstr "Every four week"
+
+#, fuzzy
+#~ msgid "E&dit"
+#~ msgstr "Edit..."
+
+#, fuzzy
+#~ msgid "De&lete"
+#~ msgstr "Delete..."
+
+#, fuzzy
+#~ msgid "Ne&w"
+#~ msgstr "New"
+#~ msgid "Change into one of the directories and select the desired file."
+#~ msgstr "Change into one of the directories and select the desired file."
+#~ msgid "*.kmt|Account templates"
+#~ msgstr "*.kmt|Account templates"
+#~ msgid "Select account template(s)"
+#~ msgstr "Select account template(s)"
+#~ msgid ""
+#~ "Input file cannot be parsed; may be corrupt\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Input file cannot be parsed; may be corrupt\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Duplicate split"
+#~ msgstr "Duplicate open"
+
+#, fuzzy
+#~ msgid "Convert 'em!!"
+#~ msgstr "Transfer from"
+#~ msgid "Outbox"
+#~ msgstr "Outbox"
+#~ msgid "AqBanking importer ..."
+#~ msgstr "AqBanking importer ..."
+#~ msgid "Online update using HBCI..."
+#~ msgstr "Online update using HBCI..."
+#~ msgid ""
+#~ "In order to map this account to an HBCI account, the account's "
+#~ "institution must have a bank code assigned. Please assign one before "
+#~ "continuing."
+#~ msgstr ""
+#~ "In order to map this account to an HBCI account, the account's "
+#~ "institution must have a bank code assigned. Please assign one before "
+#~ "continuing."
+#~ msgid ""
+#~ "In order to map this account to an HBCI account, this account must have "
+#~ "an account number assigned."
+#~ msgstr ""
+#~ "In order to map this account to an HBCI account, this account must have "
+#~ "an account number assigned."
+#~ msgid "Error importing statement."
+#~ msgstr "Error importing statement"
+#~ msgid "&Split"
+#~ msgstr "&Split"
+#~ msgid "Split the amount into different categories."
+#~ msgstr "Split the amount into different categories."
+#~ msgid "&Bills/Deposits"
+#~ msgstr "&Bills/Deposits"
+#~ msgid "&Reports"
+#~ msgstr "&Reports"
+#~ msgid "Add new account..."
+#~ msgstr "Add new account..."
+#~ msgid "Reconcile ..."
+#~ msgstr "Reconcile ..."
+#~ msgid "Add new transaction"
+#~ msgstr "Add new transaction"
+#~ msgid ""
+#~ "The next dialog allows you to add predefined account/category templates "
+#~ "to the new file. Different languages are available to select from. You "
+#~ "can skip loading any template now by selecting <b>Cancel</b> from the "
+#~ "next dialog. If you wish to add more templates later, you can restart "
+#~ "this operation by selecting <b>File/Import/Account Templates</b>."
+#~ msgstr ""
+#~ "The next dialog allows you to add predefined account/category templates "
+#~ "to the new file. Different languages are available to select from. You "
+#~ "can skip loading any template now by selecting <b>Cancel</b> from the "
+#~ "next dialog. If you wish to add more templates later, you can restart "
+#~ "this operation by selecting <b>File/Import/Account Templates</b>."
+#~ msgid ""
+#~ "*.kmy|KMyMoney files\n"
+#~ "*.xml|XML Files\n"
+#~ "*.ANON.xml|Anonymous Files\n"
+#~ "*.*|All files"
+#~ msgstr ""
+#~ "*.kmy|KMyMoney files\n"
+#~ "*.xml|XML Files\n"
+#~ "*.ANON.xml|Anonymous Files\n"
+#~ "*.*|All files"
+#~ msgid "Toggling toolbar..."
+#~ msgstr "Toggling toolbar..."
+#~ msgid "Toggle the statusbar..."
+#~ msgstr "Toggle the statusbar..."
+#~ msgid ""
+#~ "This function is used by the developers to\n"
+#~ "\n"
+#~ "perform a dump of the engine's data in memory."
+#~ msgstr ""
+#~ "This function is used by the developers to\n"
+#~ "\n"
+#~ "perform a dump of the engine's data in memory."
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to autoEnter schedule %1. Please check manually!\n"
+#~ "Debug data has been copied to clipboard; please paste into an\n"
+#~ "email and send to kmymoney2-developer@lists.sourceforge.net"
+#~ msgstr ""
+#~ "Unable to autoEnter schedule %1. Please check manually\n"
+#~ "Debug data has been copied to clipboard; please paste into an\n"
+#~ "email and send to kmymoney2-developer@lists.sourceforge.net"
+#~ msgid "%1 caught in %2 at line %3"
+#~ msgstr "%1 caught in %2 at line %3"
+#~ msgid "Cannot remove account from institution"
+#~ msgstr "Cannot remove account from institution"
+#~ msgid "Moving account"
+#~ msgstr "Moving account"
+#~ msgid "Cannot move account"
+#~ msgstr "Cannot move account: "
+#~ msgid "Cannot move account to institution"
+#~ msgstr "Cannot move account to institution"
+#~ msgid "Show Top Categories Only"
+#~ msgstr "Show top categories only"
+#~ msgid ""
+#~ "<p>Select this option to summarize all sub-categories into a single line "
+#~ "for each Top Category.</p><p>(e.g. Values for Computers:Hardware and "
+#~ "Computers:Software will all be shown on the Computers line)</p>"
+#~ msgstr ""
+#~ "<p>Select this option to summarize all sub-categories into a single line "
+#~ "for each Top Category.</p><p>(e.g. Values for Computers:Hardware and "
+#~ "Computers:Software will all be shown on the Computers line)</p>"
+#~ msgid "Transfer to/from %1"
+#~ msgstr "Transfer to/from %1"
+#~ msgid "Unable to add category"
+#~ msgstr "Unable to add category"
+#~ msgid "Securities"
+#~ msgstr "Securities"
+#~ msgid "Reconciled: %1"
+#~ msgstr "Reconciled: %1"
+#~ msgid "You currently owe: "
+#~ msgstr "You currently owe: "
+#~ msgid "There is no user manual yet"
+#~ msgstr "There is no user manual yet"
+#~ msgid "Unable to setup payee/receiver"
+#~ msgstr "Unable to setup payee/receiver"
+#~ msgid "Unable to modify split"
+#~ msgstr "Unable to modify split"
+#~ msgid "Unable to modify category"
+#~ msgstr "Unable to modify category"
+#~ msgid "Unable to modify number"
+#~ msgstr "Unable to modify number"
+#~ msgid "Unable to modify type"
+#~ msgstr "Unable to modify type"
+#~ msgid "&Check"
+#~ msgstr "&Cheque"
+#~ msgid "AT&M"
+#~ msgstr "Cash &Machine"
+#~ msgid ""
+#~ "An investment transaction can only be modified in the investment view. Do "
+#~ "you want to change to the investment view?"
+#~ msgstr ""
+#~ "An investment transaction can only be modified in the investment view. Do "
+#~ "you want to change to the investment view?"
+#~ msgid "Unable to add/modify transaction"
+#~ msgstr "Unable to add/modify transaction"
+#~ msgid "Account Options"
+#~ msgstr "Account Options"
+#~ msgid "Account Details ..."
+#~ msgstr "Account details ..."
+#~ msgid "Mark as ..."
+#~ msgstr "Mark as ..."
+#~ msgid "Move to account ..."
+#~ msgstr "Move to account ..."
+#~ msgid "Moving a split to a different account is not yet implemented"
+#~ msgstr "Moving a split to a different account is not yet implemented"
+#~ msgid ""
+#~ "You are about to delete the selected transaction. Do you really want to "
+#~ "continue?"
+#~ msgstr ""
+#~ "You are about to delete the selected transaction. Do you really want to "
+#~ "continue?"
+#~ msgid "New Account..."
+#~ msgstr "New Account..."
+#~ msgid "KMyMoney Options"
+#~ msgstr "KMyMoney Options"
+#~ msgid "Really delete this institution: "
+#~ msgstr "Really delete this institution: "
+#~ msgid "Cannot delete institution: "
+#~ msgstr "Cannot delete institution: "
+#~ msgid "Cannot delete account: "
+#~ msgstr "Cannot delete account: "
+#~ msgid ""
+#~ "You have specified to encrypt your data but you have not provided a user-"
+#~ "id. Please make sure to setup a valid user id. This time, encryption is "
+#~ "disabled."
+#~ msgstr ""
+#~ "You have specified to encrypt your data but you have not provided a user-"
+#~ "id. Please make sure to setup a valid user id. This time, encryption is "
+#~ "disabled."
+#~ msgid "Cannot add bank"
+#~ msgstr "Cannot add bank"
+#~ msgid "Create new KMyMoney file"
+#~ msgstr "Create new KMyMoney file"
+#~ msgid "Cannot edit personal data"
+#~ msgstr "Cannot edit personal data"
+#~ msgid "*.dat|Account templates"
+#~ msgstr "*.dat|Account templates"
+#~ msgid "Select account template"
+#~ msgstr "Select account template"
+#~ msgid "Cannot find the data file containing the default categories"
+#~ msgstr "Cannot find the data file containing the default categories"
+#~ msgid "Loading default accounts"
+#~ msgstr "Loading default accounts"
+#~ msgid "Ready"
+#~ msgstr "Ready"
+#~ msgid "Show transactionform"
+#~ msgstr "Show transaction form"
+#~ msgid ""
+#~ "Use this to finish reconciling your account against the bank statement."
+#~ msgstr ""
+#~ "Use this to finish reconciling your account against the bank statement."
+#~ msgid "&Postpone"
+#~ msgstr "&Postpone"
+#~ msgid ""
+#~ "Use this to postpone reconciling your account against the bank statement "
+#~ "to a later point in time."
+#~ msgstr ""
+#~ "Use this to postpone reconciling your account against the bank statement "
+#~ "to a later point in time."
+#~ msgid "&Account Details"
+#~ msgstr "&Account Details"
+#~ msgid "Open the account dialog"
+#~ msgstr "Open the account dialogue"
+#~ msgid "Use this view and modify the account details."
+#~ msgstr "Use this view and modify the account details."
+#~ msgid "&Reconcile ..."
+#~ msgstr "&Reconcile ..."
+#~ msgid "Start the account reconciliation"
+#~ msgstr "Start the account reconciliation"
+#~ msgid "Use this to reconcile your account against the bank statement."
+#~ msgstr "Use this to reconcile your account against the bank statement."
+#~ msgid ""
+#~ "<center><b>Reconcile account</b></center><hr>\n"
+#~ "<b>1.</b> Click on column 'C' to clear the transactions appearing on your "
+#~ "bank statement."
+#~ msgstr ""
+#~ "<center><b>Reconcile account</b></center><hr>\n"
+#~ "<b>1.</b> Click on column 'C' to clear the transactions appearing on your "
+#~ "bank statement."
+#~ msgid ""
+#~ "<b>2.</b> Match the cleared transactions with the amount noted on your "
+#~ "bank statement.<br>"
+#~ msgstr ""
+#~ "<b>2.</b> Match the cleared transactions with the amount noted on your "
+#~ "bank statement.<br>"
+#~ msgid "Cleared:"
+#~ msgstr "Cleared:"
+#~ msgid "<p><b>3.</b> Hit the Finish button when you're done."
+#~ msgstr "<p><b>3.</b> Hit the Finish button when you're done."
+#~ msgid "Loan Payment"
+#~ msgstr "Loan Payment"
+#~ msgid "Goto payer/receiver"
+#~ msgstr "Goto payee/receiver"
+#~ msgid ""
+#~ "*.csv|CSV files\n"
+#~ "*.html|HTML files\n"
+#~ "*.*|All files"
+#~ msgstr ""
+#~ "*.csv|CSV files\n"
+#~ "*.html|HTML files\n"
+#~ "*.*|All files"
+#~ msgid "Account register"
+#~ msgstr "Account register"
+#~ msgid "Cannot edit category: "
+#~ msgstr "Cannot edit category: "
+#~ msgid "Symbol Name"
+#~ msgstr "Symbol name"
+#~ msgid "Modify the loan details for this loan"
+#~ msgstr "Modify the loan details for this loan"
+#~ msgid ""
+#~ "Use this to start a wizard that allows changing the details for this loan."
+#~ msgstr ""
+#~ "Use this to start a wizard that allows changing the details for this loan."
+#~ msgid "To"
+#~ msgstr "To"
+#~ msgid ""
+#~ "The price history for <b>%1</b> does not contain an entry for <b>%2</b>. "
+#~ "Do you want to add a new entry in the history based on the price of this "
+#~ "transaction?"
+#~ msgstr ""
+#~ "The price history for <b>%1</b> does not contain an entry for <b>%2</b>. "
+#~ "Do you want to add a new entry in the history based on the price of this "
+#~ "transaction?"
+#~ msgid "Add price info"
+#~ msgstr "Add price info"
+#~ msgid ""
+#~ "The price history for <b>%1</b> contains a different price for <b>%2</"
+#~ "b>. Do you want to update the price in the history to the one of this "
+#~ "transaction?"
+#~ msgstr ""
+#~ "The price history for <b>%1</b> contains a different price for <b>%2</"
+#~ "b>. Do you want to update the price in the history to the one of this "
+#~ "transaction?"
+#~ msgid "Update price info"
+#~ msgstr "Update price info"
+#~ msgid "Unable to add/modify security"
+#~ msgstr "Unable to add/modify security"
+#~ msgid ""
+#~ "The %1 <b>%2</b> uses a different currency than the selected investment. "
+#~ "Please make sure to enter all values for this transaction in <b>%2</b>. "
+#~ "When you save this transaction you will have the chance to enter the "
+#~ "necessary conversion rates."
+#~ msgstr ""
+#~ "The %1 <b>%2</b> uses a different currency than the selected investment. "
+#~ "Please make sure to enter all values for this transaction in <b>%2</b>. "
+#~ "When you save this transaction you will have the chance to enter the "
+#~ "necessary conversion rates."
+#~ msgid "Stock security"
+#~ msgstr "Stock security"
+#~ msgid "C&harge"
+#~ msgstr "C&harge"
+#~ msgid "$ Gain"
+#~ msgstr "£ Gain"
+#~ msgid "1 Week %"
+#~ msgstr "1 Week %"
+#~ msgid "4 Weeks %"
+#~ msgstr "4 Weeks %"
+#~ msgid "3 Months %"
+#~ msgstr "3 Months %"
+#~ msgid "YTD %"
+#~ msgstr "YTD %"
+#~ msgid "On-line Price Update ..."
+#~ msgstr "Online price update ..."
+#~ msgid "New payee..."
+#~ msgstr "New payee..."
+#~ msgid "Delete payee ..."
+#~ msgstr "Delete payee ..."
+#~ msgid "Bill Options"
+#~ msgstr "Bill Options"
+#~ msgid "New Bill..."
+#~ msgstr "New Bill..."
+#~ msgid "Deposit Options"
+#~ msgstr "Deposit Options"
+#~ msgid "New Deposit..."
+#~ msgstr "New Deposit..."
+#~ msgid "Transfer Options"
+#~ msgstr "Transfer Options"
+#~ msgid "New Transfer..."
+#~ msgstr "New Transfer..."
+#~ msgid "Personal Equity"
+#~ msgstr "Personal equity"
+#~ msgid "Transfer %1 %2"
+#~ msgstr "Transfer %1 %2"
+#~ msgid "Edit Transfer Schedule"
+#~ msgstr "Edit Transfer Schedule"
+#~ msgid "Edit Loan Payment Schedule"
+#~ msgstr "Edit Loan Payment Schedule"
+#~ msgid "Edit Deposit Schedule"
+#~ msgstr "Edit Deposit Schedule"
+#~ msgid "Direct Debit"
+#~ msgstr "Direct Debit"
+#~ msgid "Direct Deposit"
+#~ msgstr "Direct Deposit"
+#~ msgid "Manual Deposit"
+#~ msgstr "Manual Deposit"
+#~ msgid "Write Check"
+#~ msgstr "Write Cheque"
+#~ msgid "Exception in slot split clicked"
+#~ msgstr "Exception in slot split clicked"
+#~ msgid ""
+#~ "The frequency of this schedule must be set to something other than Once"
+#~ msgstr ""
+#~ "The frequency of this schedule must be set to something other than Once"
+#~ msgid "Please fill in the name field."
+#~ msgstr "Please fill in the name field."
+
+#, fuzzy
+#~ msgid "Please fill in the From account field."
+#~ msgstr "Please fill in the amount field."
+
+#, fuzzy
+#~ msgid "Please fill in the To account field."
+#~ msgstr "Please fill in the amount field."
+#~ msgid "Please fill in the payee field."
+#~ msgstr "Please fill in the payee field."
+#~ msgid "Please fill in the category field."
+#~ msgstr "Please fill in the category field."
+#~ msgid "Please fill in ending date"
+#~ msgstr "Please fill in ending date"
+#~ msgid "Account from and account to are the same"
+#~ msgstr "Account from and account to are the same"
+#~ msgid "Exception in loadWidgetsFromSchedule(1)"
+#~ msgstr "Exception in loadWidgetsFromSchedule(1)"
+#~ msgid "Exception in loadWidgetsFromSchedule(2)"
+#~ msgstr "Exception in loadWidgetsFromSchedule(2)"
+#~ msgid "All split data lost. Please re-enter splits"
+#~ msgstr "All split data lost. Please re-enter splits"
+#~ msgid "Error in slotAmountChanged?"
+#~ msgstr "Error in slotAmountChanged?"
+#~ msgid ""
+#~ "The schedule can not be automatically entered when the start date is on "
+#~ "or before todays date."
+#~ msgstr ""
+#~ "The schedule can not be automatically entered when the start date is on "
+#~ "or before todays date."
+#~ msgid "The end date can not be set for occurences set to Once"
+#~ msgstr "The end date can not be set for occurences set to Once"
+#~ msgid ""
+#~ "The start date must be greater than today, to automatically enter this "
+#~ "schedule."
+#~ msgstr ""
+#~ "The start date must be greater than today, to automatically enter this "
+#~ "schedule."
+#~ msgid "Withdrawal or Transfer"
+#~ msgstr "Withdrawal or Transfer"
+
+#, fuzzy
+#~ msgid ""
+#~ "You have specified an %1 category for a %2 schedule. Do you want to keep "
+#~ "it that way?"
+#~ msgstr ""
+#~ "You have specified an %1 category for a %1 schedule. Do you want to keep "
+#~ "it that way?"
+#~ msgid "Verify category type"
+#~ msgstr "Verify category type"
+#~ msgid "Bill or Transfer"
+#~ msgstr "Bill or Transfer"
+#~ msgid "Accepts the imported transactions and continues"
+#~ msgstr "Accepts the imported transactions and continues"
+#~ msgid "Use this to accept all transactions and import them into the file."
+#~ msgstr "Use this to accept all transactions and import them into the file."
+#~ msgid "Cancel the import operation"
+#~ msgstr "Cancel the import operation"
+#~ msgid ""
+#~ "Use this to abort the import and undo all changes made during import."
+#~ msgstr ""
+#~ "Use this to abort the import and undo all changes made during import."
+#~ msgid ""
+#~ "You are about to cancel the entire import. Any changes you have made in "
+#~ "this dialog will be lost. Are you sure you want to cancel?"
+#~ msgstr ""
+#~ "You are about to cancel the entire import. Any changes you have made in "
+#~ "this dialog will be lost. Are you sure you want to cancel?"
+#~ msgid "Verify cancel"
+#~ msgstr "Verify cancel"
+#~ msgid ""
+#~ "The imported data is displayed together with the data already stored in "
+#~ "the file. Imported transactions are shown with a yellow background. "
+#~ "Pressing \"OK\" will accept all transactions, \"Cancel\" will remove all "
+#~ "imported transactions.\n"
+#~ "You may modify the transactions - if need to - before you press \"OK\" or "
+#~ "even delete transactions that have been imported incorrectly (e.g. "
+#~ "duplicate transactions)."
+#~ msgstr ""
+#~ "The imported data is displayed together with the data already stored in "
+#~ "the file. Imported transactions are shown with a yellow background. "
+#~ "Pressing \"OK\" will accept all transactions, \"Cancel\" will remove all "
+#~ "imported transactions.\n"
+#~ "You may modify the transactions - if need to - before you press \"OK\" or "
+#~ "even delete transactions that have been imported incorrectly (e.g. "
+#~ "duplicate transactions)."
+#~ msgid "General settings"
+#~ msgstr "General settings"
+#~ msgid "Equity/Currency/Value options"
+#~ msgstr "Equity/Currency/Value options"
+#~ msgid "Accounts View"
+#~ msgstr "Accounts View"
+#~ msgid "Accounts view settings"
+#~ msgstr "Accounts view settings"
+#~ msgid "Use the normal institution view"
+#~ msgstr "Use the normal institution view"
+#~ msgid "Use the new accounts view"
+#~ msgstr "Use the new accounts view"
+#~ msgid "Restrict by date"
+#~ msgstr "Restrict by date"
+
+#, fuzzy
+#~ msgid "Restrict by transaction state"
+#~ msgstr "Search transactions"
+#~ msgid "Data Encryption Settings"
+#~ msgstr "Data encryption settings"
+#~ msgid "List view colour :"
+#~ msgstr "List view colour :"
+#~ msgid "Mount Point:"
+#~ msgstr "Mount Point:"
+#~ msgid "textLabel2"
+#~ msgstr "textLabel2"
+#~ msgid "Edit Scheduled Transfer"
+#~ msgstr "Edit Scheduled Transfer"
+#~ msgid "Pay to:"
+#~ msgstr "Pay to:"
+#~ msgid "From:"
+#~ msgstr "From:"
+#~ msgid "To:"
+#~ msgstr "To:"
+#~ msgid "Amount:"
+#~ msgstr "Amount:"
+#~ msgid "Category:"
+#~ msgstr "Category:"
+#~ msgid "Memo:"
+#~ msgstr "Memo:"
+#~ msgid "<b>Name:</b>"
+#~ msgstr "<b>Name:</b>"
+#~ msgid "<b>Type:</b>"
+#~ msgstr "<b>Type:</b>"
+#~ msgid "<b>Payee:</b>"
+#~ msgstr "<b>Payee:</b>"
+#~ msgid "<b>Category:</b>"
+#~ msgstr "<b>Category:</b>"
+
+#, fuzzy
+#~ msgid "<b>From (account):</b>"
+#~ msgstr "account"
+#~ msgid "<b>Memo:</b>"
+#~ msgstr "<b>Memo:</b>"
+
+#, fuzzy
+#~ msgid "<b>To (account):</b>"
+#~ msgstr "account"
+#~ msgid "<b>Date:</b>"
+#~ msgstr "<b>Date:</b>"
+#~ msgid "<b>Amount:</b>"
+#~ msgstr "<b>Amount:</b>"
+#~ msgid "to"
+#~ msgstr "to"
+#~ msgid "from"
+#~ msgstr "from"
+#~ msgid "Equity-Symbol:"
+#~ msgstr "Equity-Symbol:"
+#~ msgid "New Account"
+#~ msgstr "New Account"
+#~ msgid "Institution Selection"
+#~ msgstr "Institution Selection"
+#~ msgid "<u>I</u>nstitution"
+#~ msgstr "<u>I</u>nstitution"
+#~ msgid "Account Type Selection"
+#~ msgstr "Account Type Selection"
+#~ msgid "What is the account number?"
+#~ msgstr "What is the account number?"
+#~ msgid ""
+#~ "If you do not know the account number, please leave this field empty. You "
+#~ "can add the account number at any later time in the account details "
+#~ "dialog. The account number is only used by KMyMoney for online banking."
+#~ msgstr ""
+#~ "If you do not know the account number, please leave this field empty. You "
+#~ "can add the account number at any later time in the account details "
+#~ "dialog. The account number is only used by KMyMoney for online banking."
+#~ msgid "Does this investment account has a brokerage account?"
+#~ msgstr "Does this investment account has a brokerage account?"
+#~ msgid "What is the opening balance and date of this account?"
+#~ msgstr "What is the opening balance and date of this account?"
+#~ msgid "What is the currency of this account?"
+#~ msgstr "What is the currency of this account?"
+#~ msgid "&Price"
+#~ msgstr "&Price"
+#~ msgid "Account Payment"
+#~ msgstr "Account Payment"
+#~ msgid ""
+#~ "Do you wish to add a payment for this credit card account to the list of "
+#~ "monthly payments?"
+#~ msgstr ""
+#~ "Do you wish to add a payment for this credit card account to the list of "
+#~ "monthly payments?"
+
+#, fuzzy
+#~ msgid ""
+#~ "The information to create the account has now been collected. Press the "
+#~ "<b>Finish</b> button to actually create the account or the <b>Back</b> "
+#~ "button to modify the settings. The <b>Cancel</b> button will dismiss all "
+#~ "data and leave this wizard.<br>\n"
+#~ "Once the account is successfully created you can enter your transactions "
+#~ "on this account."
+#~ msgstr ""
+#~ "The information to create the account has now been collected. Press the "
+#~ "<b>Finish</b> button to acutally create the account or the <b>Back</b> "
+#~ "button to modify the settings. The <b>Cancel</b> button will dismiss all "
+#~ "data and leave this wizard.<p>\n"
+#~ "Once the account is successfully created you can enter your transactions "
+#~ "on this account."
+#~ msgid ""
+#~ "Adding a new institution.\n"
+#~ "\n"
+#~ "The only required field is the name, which can be the name of a bank like "
+#~ "Woolwhich, or a descriptive name like Family Cash Accounts."
+#~ msgstr ""
+#~ "Adding a new institution.\n"
+#~ "\n"
+#~ "The only required field is the name, which can be the name of a bank\n"
+#~ "like Woolwhich, or a descriptive name like Family Cash Accounts."
+#~ msgid "What should happen with the difference?"
+#~ msgstr "What should happen with the difference?"
+#~ msgid "&Distribute difference among all splits"
+#~ msgstr "&Distribute difference among all splits"
+#~ msgid "&Leave unassigned"
+#~ msgstr "&Leave unassigned"
+#~ msgid "Payee changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Payee changed. Old: \"%1\", New: \"%2\""
+#~ msgid "Category changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Category changed. Old: \"%1\", New: \"%2\""
+#~ msgid "Memo changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Memo changed. Old: \"%1\", New: \"%2\""
+#~ msgid "Amount changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Amount changed. Old: \"%1\", New: \"%2\""
+#~ msgid "%1 items of the details for the transaction have changed."
+#~ msgstr "%1 items of the details for the transaction have changed."
+#~ msgid ""
+#~ "Some occurences that are older than '%1' have not been entered yet.\n"
+#~ "\n"
+#~ "Delete all occurences that have not been entered before this date?"
+#~ msgstr ""
+#~ "Some occurences that are older than '%1' have not been entered yet.\n"
+#~ "\n"
+#~ "Delete all occurences that have not been entered before this date?"
+#~ msgid ""
+#~ "Are you sure you want to enter this occurence which is %1 days after "
+#~ "today?"
+#~ msgstr ""
+#~ "Are you sure you want to enter this occurence which is %1 days after "
+#~ "today?"
+#~ msgid "The date must lie in the range %1 to %2"
+#~ msgstr "The date must lie in the range %1 to %2"
+#~ msgid "1 %2 costs <i>price</i<> %1"
+#~ msgstr "1 %2 costs <i>price</i<> %1"
+#~ msgid ""
+#~ "Do you really want to select %1 as your base currency? This selection can "
+#~ "currently not be modified! If unsure, press 'No' now."
+#~ msgstr ""
+#~ "Do you really want to select %1 as your base currency? This selection can "
+#~ "currently not be modified! If unsure, press 'No' now."
+#~ msgid "This feature needs to be implemented."
+#~ msgstr "This feature needs to be implemented"
+#~ msgid "Implementation missing"
+#~ msgstr "Implementation missing"
+#~ msgid "Use this to abort the dialog"
+#~ msgstr "Use this to abort the dialog"
+#~ msgid "Use this to accept the data and possibly update the exchange rate"
+#~ msgstr "Use this to accept the data and possibly update the exchange rate"
+#~ msgid "Use this to accept the action and perform it"
+#~ msgstr "Use this to accept the action and perform it"
+#~ msgid "Use this to continue editing the splits"
+#~ msgstr "Use this to continue editing the splits"
+#~ msgid "Leave the dialog and return to where you came from."
+#~ msgstr "Leave the dialog and return to where you came from."
+#~ msgid "Open online help"
+#~ msgstr "Open online help"
+#~ msgid ""
+#~ "Opens the online help and shows detailed information about transaction "
+#~ "searching."
+#~ msgstr ""
+#~ "Opens the online help and shows detailed information about transaction "
+#~ "searching."
+#~ msgid "What is the opening balance and date of this brokerage account?"
+#~ msgstr "What is the opening balance and date of this brokerage account?"
+#~ msgid "Please enter the payment amount."
+#~ msgstr "Please enter the payment amount."
+#~ msgid "Please enter the schedule name."
+#~ msgstr "Please enter the schedule name."
+#~ msgid "Please enter the payee name."
+#~ msgstr "Please enter the payee name."
+#~ msgid "Please select the account."
+#~ msgstr "Please select the account."
+#~ msgid ""
+#~ "Use the checking account type to manage activities on your checking "
+#~ "account e.g. payments, checks and cash card purchases."
+#~ msgstr ""
+#~ "Use the current account type to manage activities on your current account "
+#~ "e.g. payments, cheques and debit card purchases."
+#~ msgid ""
+#~ "Use the savings account type to manage activities on your savings account."
+#~ msgstr ""
+#~ "Use the savings account type to manage activities on your savings account."
+#~ msgid ""
+#~ "Use the credit card account type to manage activities on your credit card."
+#~ msgstr ""
+#~ "Use the credit card account type to manage activities on your credit card."
+#~ msgid "Use the cash account type to manage activities in your wallet."
+#~ msgstr "Use the cash account type to manage activities in your wallet."
+#~ msgid ""
+#~ "Use the asset account type to manage assets (e.g. your house, car or art "
+#~ "collection)."
+#~ msgstr ""
+#~ "Use the asset account type to manage assets (e.g. your house, car or art "
+#~ "collection)."
+#~ msgid ""
+#~ "Use the liability account type to manage any type of liability except "
+#~ "amortization loans. Use it for taxes you owe or money you borrowed from "
+#~ "friends. For amortization loans like mortgages you should create a loan "
+#~ "account."
+#~ msgstr ""
+#~ "Use the liability account type to manage any type of liability except "
+#~ "amortisation loans. Use it for taxes you owe or money you borrowed from "
+#~ "friends. For amortisation loans like mortgages you should create a loan "
+#~ "account."
+#~ msgid ""
+#~ "Use the loan account type to manage amortization loans (e.g. mortgages, "
+#~ "car loan, money you lend, private loans etc.)."
+#~ msgstr ""
+#~ "Use the loan account type to manage amortisation loans (e.g. mortgages, "
+#~ "car loan, money you lend, private loans etc.)."
+#~ msgid ""
+#~ "Use the investment account to manage your stock, mutual fund and other "
+#~ "investments."
+#~ msgstr ""
+#~ "Use the investment account to manage your stock, mutual fund and other "
+#~ "investments."
+#~ msgid "Explanation is not yet available! UnknownAccountType will be set"
+#~ msgstr "Explanation is not yet available! UnknownAccountType will be set"
+#~ msgid "Account with that name already exists."
+#~ msgstr "Account with that name already exists."
+#~ msgid "Category with that name already exists."
+#~ msgstr "Category with that name already exists."
+#~ msgid "chkVersion: Element %1 must have version %2"
+#~ msgstr "chkVersion: Element %1 must have version %2"
+#~ msgid ""
+#~ "<h1>GnuCash Import Options</h1><h2>Investment Options</h2><p>In KMyMoney, "
+#~ "all accounts representing investments (stocks, shares, bonds, etc.) must "
+#~ "have an associated investment (portfolio) account.</p><p>GnuCash does not "
+#~ "enforce this, so we cannot automate this association. If you have "
+#~ "investments, please select one of the following options.</p><p>o create a "
+#~ "separate investment account for each stock with the same name as the "
+#~ "stock</p><p>o create a single investment account to hold all stocks - you "
+#~ "will be asked for a name</p><p>o create multiple investment accounts - "
+#~ "you will be asked for a name for each stock</p><h2>Scheduled "
+#~ "Transactions</h2><p>Due to differences in implementation, it is not "
+#~ "always possible to import scheduled transactions correctly. Though best "
+#~ "efforts are made, it may be that some imported transactions cause "
+#~ "problems within KMyMoney.</p><p>An attempt will be made to identify "
+#~ "potential problem transactions, and setting this option will cause them "
+#~ "to be dropped from the file. A report of which transactions were dropped, "
+#~ "and why, will be produced on screen.</p><h2>Debug Options</h2><p>These "
+#~ "should only be used under developer direction (or at your own risk!).</p>"
+#~ msgstr ""
+#~ "<h1>GnuCash Import Options</h1><h2>Investment Options</h2><p>In KMyMoney, "
+#~ "all accounts representing investments (stocks, shares, bonds, etc.) must "
+#~ "have an associated investment (portfolio) account.</p><p>GnuCash does not "
+#~ "enforce this, so we cannot automate this association. If you have "
+#~ "investments, please select one of the following options.</p><p>o create a "
+#~ "separate investment account for each stock with the same name as the "
+#~ "stock</p><p>o create a single investment account to hold all stocks - you "
+#~ "will be asked for a name</p><p>o create multiple investment accounts - "
+#~ "you will be asked for a name for each stock</p><h2>Scheduled "
+#~ "Transactions</h2><p>Due to differences in implementation, it is not "
+#~ "always possible to import scheduled transactions correctly. Though best "
+#~ "efforts are made, it may be that some imported transactions cause "
+#~ "problems within KMyMoney.</p><p>An attempt will be made to identify "
+#~ "potential problem transactions, and setting this option will cause them "
+#~ "to be dropped from the file. A report of which transactions were dropped, "
+#~ "and why, will be produced on screen.</p><h2>Debug Options</h2><p>These "
+#~ "should only be used under developer direction (or at your own risk!).</p>"
+#~ msgid "GnuCash Import Options Help"
+#~ msgstr "GnuCash Import options Help"
+#~ msgid "<b>From:</b>"
+#~ msgstr "<b>From:</b>"
+#~ msgid "<b>To:</b>"
+#~ msgstr "<b>To:</b>"
+#~ msgid "Interest and amortization"
+#~ msgstr "Interest and amortisation"
+#~ msgid ""
+#~ "\n"
+#~ "You have selected to record all payments. This also includes the payout "
+#~ "transaction. Please select the asset account, to/from which the money "
+#~ "should be transferred.\n"
+#~ "In case the account does not exist, create a new account. Only asset "
+#~ "accounts should be created for this purpose."
+#~ msgstr ""
+#~ "\n"
+#~ "You have selected to record all payments. This also includes the payout "
+#~ "transaction. Please select the asset account, to/from which the money "
+#~ "should be transferred.\n"
+#~ "In case the account does not exist, create a new account. Only asset "
+#~ "accounts should be created for this purpose."
+#~ msgid ""
+#~ "<h1>Online Quote Price Sources</h1><p>For obtaining the latest prices of "
+#~ "investments, GnuCash uses a collection of Perl scripts under the name of "
+#~ "Finance::Quote. A number of such scripts have been developed over the "
+#~ "years, and contributed to the project. </p><p>KMyMoney takes a different "
+#~ "approach, namely the use of a URL in conjuction with the stock's ticker "
+#~ "symbol to retrieve prices directly,where such facilities are available, "
+#~ "and does not at this time support such a wide variety of sources. We do "
+#~ "however offer the facility for defining your own sources without "
+#~ "requiring a knowledge of Perl, (though an understanding of Regular "
+#~ "Expressions may be helpful!!). The use of a URL means that the 'source' "
+#~ "could be a shell script or other Linux executable, if you have the skills "
+#~ "to produce these. Use the Settings menu, Configure KMyMoney and select "
+#~ "Online Quotes, to supply new sources. (N.B. Due to a quirk of Qt, you may "
+#~ "need to maximize the window to see the full instructions.)</p><p>Do not "
+#~ "worry too much about any mistakes you may make here. They can always be "
+#~ "corrected later, via the Tools/Securities menu item.</p><p>Please be "
+#~ "aware that some of the sources used may have restrictions on the use "
+#~ "which you make of their prices. You should consult the Terms and "
+#~ "Conditions of these sites to ensure that you are abiding by any such "
+#~ "rules.</p>"
+#~ msgstr ""
+#~ "<h1>Online Quote Price Sources</h1><p>For obtaining the latest prices of "
+#~ "investments, GnuCash uses a collection of Perl scripts under the name of "
+#~ "Finance::Quote. A number of such scripts have been developed over the "
+#~ "years, and contributed to the project. </p><p>KMyMoney takes a different "
+#~ "approach, namely the use of a URL in conjuction with the stock's ticker "
+#~ "symbol to retrieve prices directly, where such facilities are available, "
+#~ "and does not at this time support such a wide variety of sources. We do "
+#~ "however offer the facility for defining your own sources without "
+#~ "requiring a knowledge of Perl, (though an understanding of Regular "
+#~ "Expressions may be helpful!!). The use of a URL means that the 'source' "
+#~ "could be a shell script or other Linux executable, if you have the skills "
+#~ "to produce these. Use the Settings menu, Configure KMyMoney and select "
+#~ "Online Quotes, to supply new sources. (N.B. Due to a quirk of Qt, you may "
+#~ "need to maximize the window to see the full instructions.)</p><p>Do not "
+#~ "worry too much about any mistakes you may make here. They can always be "
+#~ "corrected later, via the Tools/Securities menu item.</p><p>Please be "
+#~ "aware that some of the sources used may have restrictions on the use "
+#~ "which you make of their prices. You should consult the Terms and "
+#~ "Conditions of these sites to ensure that you are abiding by any such "
+#~ "rules.</p>"
+#~ msgid "Online Quote Sources Help"
+#~ msgstr "Online Quote Sources Help"
+#~ msgid "Yahoo Currency"
+#~ msgstr "Yahoo Currency"
+#~ msgid "Report Configuration Help"
+#~ msgstr "Report Configuration Help"
+#~ msgid "interest and amortization"
+#~ msgstr "interest and amortisation"
+#~ msgid "Security settings"
+#~ msgstr "Security settings"
+#~ msgid "&Add Shares"
+#~ msgstr "&Add shares"
+#~ msgid "&Remove Shares"
+#~ msgstr "&Remove shares"
+#~ msgid "catgory"
+#~ msgstr "category"
+#~ msgid "Exiting..."
+#~ msgstr "Exiting..."
+#~ msgid "Unable to add second split: "
+#~ msgstr "Unable to add second split: "
+#~ msgid "Unable to add split: "
+#~ msgstr "Unable to add split: "
+#~ msgid "Form1"
+#~ msgstr "Form1"
+
+#, fuzzy
+#~ msgid "Previous Year"
+#~ msgstr "Previous year"
+
+#, fuzzy
+#~ msgid "Previous Quarter"
+#~ msgstr "Previous year"
+
+#, fuzzy
+#~ msgid "Previous Month"
+#~ msgstr "Previous month"
+
+#, fuzzy
+#~ msgid "Start"
+#~ msgstr "State"
+
+#, fuzzy
+#~ msgid "&Months"
+#~ msgstr "Months"
+
+#, fuzzy
+#~ msgid "&Quarters"
+#~ msgstr "Quarterly"
+
+#, fuzzy
+#~ msgid "&Years"
+#~ msgstr "Years"
+
+#, fuzzy
+#~ msgid "&Dates"
+#~ msgstr "Date"
+
+#, fuzzy
+#~ msgid "Asset/Liability Accounts"
+#~ msgstr "Liability accounts"
+
+#, fuzzy
+#~ msgid "&Select All"
+#~ msgstr "Select all"
+
+#, fuzzy
+#~ msgid "Select &None"
+#~ msgstr "Select none"
+
+#, fuzzy
+#~ msgid "&Accounts"
+#~ msgstr "&Account"
+
+#, fuzzy
+#~ msgid "Income/Expense Categories"
+#~ msgstr "Expense categories"
+
+#, fuzzy
+#~ msgid "&Categories"
+#~ msgstr "Categories"
+
+#, fuzzy
+#~ msgid "&Income/Expenses"
+#~ msgstr "Expense"
+
+#, fuzzy
+#~ msgid "Payer"
+#~ msgstr "Payee"
+#~ msgid "Current Price:"
+#~ msgstr "Current Price:"
+#~ msgid "TextLabel1"
+#~ msgstr "TextLabel1"
+#~ msgid ""
+#~ "The only required field is the name which can be descriptive like\n"
+#~ "My Current Account"
+#~ msgstr ""
+#~ "The only required field is the name which can be descriptive like\n"
+#~ "My Current Account"
+#~ msgid "Price ($):"
+#~ msgstr "Price ($):"
+#~ msgid ""
+#~ "\n"
+#~ "KMyMoney will create a schedule for this payment and reminds you whenever "
+#~ "a payment must be made."
+#~ msgstr ""
+#~ "\n"
+#~ "KMyMoney will create a schedule for this payment and reminds you whenever "
+#~ "a payment must be made."
+#~ msgid "Next payment due on:"
+#~ msgstr "Next payment due on:"
+#~ msgid "Edit Scheduled Bills"
+#~ msgstr "Edit Scheduled Bills"
+#~ msgid ""
+#~ "You are about to delete this part of the transaction. Do you really want "
+#~ "to continue?"
+#~ msgstr ""
+#~ "You are about to delete this part of the transaction. Do you really want "
+#~ "to continue?"
+#~ msgid "Direct creation of new account not yet implemented"
+#~ msgstr "Direct creation of new account not yet implemented"
+#~ msgid "You cannot use this category here"
+#~ msgstr "You cannot use this category here"
+#~ msgid "Edit Scheduled Deposit"
+#~ msgstr "Edit Scheduled Deposit"
+#~ msgid "Deposit to:"
+#~ msgstr "Deposit to:"
+#~ msgid "final amortization payment"
+#~ msgstr "final amortisation payment"
+#~ msgid "The amount must not be an estimate to be automatically entered"
+#~ msgstr "The amount must not be an estimate to be automatically entered"
+#~ msgid "Startup file options"
+#~ msgstr "Startup file options"
+#~ msgid "Start with dialog prompt (default)"
+#~ msgstr "Start with dialog prompt (default)"
+#~ msgid "Start with last file used"
+#~ msgstr "Start with last file used"
+#~ msgid "Change colour every other row"
+#~ msgstr "Change colour every other row"
+#~ msgid ""
+#~ "The account \"%1\" does not exist and direct creation of new account not "
+#~ "yet implemented"
+#~ msgstr ""
+#~ "The account \"%1\" does not exist and direct creation of new account not "
+#~ "yet implemented"
+#~ msgid ""
+#~ "If you press continue, information about all other splits will be lost"
+#~ msgstr ""
+#~ "If you press continue, information about all other splits will be lost"
+#~ msgid ""
+#~ "Changing the transaction type in the selected direction will delete all "
+#~ "information about categories and accounts. If you press continue, this "
+#~ "information will be lost!"
+#~ msgstr ""
+#~ "Changing the transaction type in the selected direction will delete all "
+#~ "information about categories and accounts. If you press continue, this "
+#~ "information will be lost!"
+#~ msgid "&Cheque"
+#~ msgstr "&Cheque"
+#~ msgid "Or enter a new name:"
+#~ msgstr "Or enter a new name:"
+#~ msgid "All Transactions (default)"
+#~ msgstr "All Transactions (default)"
+#~ msgid "Search Results"
+#~ msgstr "Search Results"
+#~ msgid "Nr"
+#~ msgstr "Nr"
+#~ msgid "Select View Type"
+#~ msgstr "Select View Type"
+#~ msgid ""
+#~ "Show\n"
+#~ "transactionform"
+#~ msgstr ""
+#~ "Show\n"
+#~ "transactionform"
+#~ msgid "Unable to add payee with same name"
+#~ msgstr "Unable to add payee with same name"
+#~ msgid "Remove this payee: "
+#~ msgstr "Remove this payee: "
+#~ msgid "Entries"
+#~ msgstr "Entries"
+#~ msgid "Creates a new window"
+#~ msgstr "Creates a new window"
+#~ msgid "Saves the actual document"
+#~ msgstr "Saves the actual document"
+#~ msgid "Saves the actual document as..."
+#~ msgstr "Saves the actual document as..."
+#~ msgid "Closes the actual document"
+#~ msgstr "Closes the actual document"
+#~ msgid "Closes the actual window"
+#~ msgstr "Closes the actual window"
+#~ msgid "Enables/disables the toolbar"
+#~ msgstr "Enables/disables the toolbar"
+#~ msgid "Enables/disables the statusbar"
+#~ msgstr "Enables/disables the statusbar"
+#~ msgid "View information about the file"
+#~ msgstr "View information about the file"
+#~ msgid "Lets you view/edit your personal data"
+#~ msgstr "Lets you view/edit your personal data"
+#~ msgid "Lets you backup your file to a removeable drive"
+#~ msgstr "Lets you backup your file to a removeable drive"
+#~ msgid "Lets you create a new institution"
+#~ msgstr "Lets you create a new institution"
+#~ msgid "View the account register"
+#~ msgstr "View the account register"
+#~ msgid "Export transactions using QIF format"
+#~ msgstr "Export transactions using QIF format"
+#~ msgid "KMyMoney file already open. Close it ?"
+#~ msgstr "KMyMoney file already open. Close it ?"
+#~ msgid "The file must be saved first "
+#~ msgstr "The file must be saved first "
+#~ msgid "Project Manager"
+#~ msgstr "Project Manager"
+#~ msgid "Developer & Release Manager"
+#~ msgstr "Developer & Release Manager"
+#~ msgid "st"
+#~ msgstr "st"
+#~ msgid "nd"
+#~ msgstr "nd"
+#~ msgid "rd"
+#~ msgstr "rd"
+#~ msgid "th"
+#~ msgstr "th"
+#~ msgid "Modify a transaction"
+#~ msgstr "Modify a transaction"
+#~ msgid "Forget changes made to this transaction"
+#~ msgstr "Forget changes made to this transaction"
+#~ msgid "Use this to abort the changes to the current transaction"
+#~ msgstr "Use this to abort the changes to the current transaction"
+#~ msgid "Access more functions"
+#~ msgstr "Access more functions"
+#~ msgid "Use this to access special functions"
+#~ msgstr "Use this to access special functions"
+
+#, fuzzy
+#~ msgid "The current implementation of the backup functionality "
+#~ msgstr "The current immplementation of the backup functionality "
+#~ msgid "only supports local files as source files! "
+#~ msgstr "only supports local files as source files! "
+#~ msgid "Your current source file is '%1'.)"
+#~ msgstr "Your current source file is '%1'.)"
+
diff --git a/po/es.po b/po/es.po
new file mode 100644
index 0000000..a9ac095
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,13722 @@
+# translation of es.po to Español (Argentina)
+# This file is put in the public domain.
+#
+# Mvillarino <mvillarino@gmail.com>, 2005.
+# Mvillarino <mvillarino@users.sourceforge.net>, 2007.
+# Alvaro Soliverez <asoliverez@gmail.com>, 2008, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: es\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-25 19:04+0200\n"
+"PO-Revision-Date: 2009-06-26 07:44-0300\n"
+"Last-Translator: Alvaro Soliverez <asoliverez@gmail.com>\n"
+"Language-Team: Spanish <kde-i18n-doc@kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: wizards/wizardpages/rc.cpp:1
+msgid ""
+"Select groups of accounts that correspond to the ways that you will use "
+"KMyMoney. Each group you select will cause several accounts and categories "
+"to be created. Select the groups that are relevant to you. You can always "
+"create additional accounts manually later."
+msgstr ""
+"Seleccione grupos de cuentas que correspondan a la forma en que va a "
+"utilizar KMyMoney. Cada grupo que seleccione creará varias cuentas y "
+"categorías. Seleccione grupos que le sean relevantes. Siempre puede crear "
+"cuentas adicionales luego manualmente."
+
+#: wizards/wizardpages/rc.cpp:2
+msgid ""
+"<p>KMyMoney supports multiple currencies, nevertheless one of them will be "
+"used as your base currency. The base currency is used as default for new "
+"accounts and reports. Please select the base currency from the following "
+"list."
+msgstr ""
+"<p>KMyMoney soporta múltiples divisas, sin embargo una de ellas será "
+"utilizada como divisa base. La divisa base es la predeterminada para nuevas "
+"cuentas y reportes. Por favor seleccione la divisa base de la siguiente "
+"lista."
+
+#: dialogs/kequitypriceupdatedlg.cpp:71 dialogs/rc.cpp:399 dialogs/rc.cpp:485
+#: dialogs/rc.cpp:724 dialogs/settings/rc.cpp:108 reports/listtable.cpp:226
+#: views/kinvestmentview.cpp:71 views/kpayeesview.cpp:351 views/rc.cpp:13
+#: widgets/rc.cpp:5 widgets/rc.cpp:34
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1599
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1629
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1673
+#: wizards/wizardpages/rc.cpp:3
+msgid "Name"
+msgstr "Nombre"
+
+#: wizards/wizardpages/rc.cpp:4
+msgid "ISO Code"
+msgstr "Código ISO"
+
+#: dialogs/kequitypriceupdatedlg.cpp:69 dialogs/kequitypriceupdatedlg.cpp:70
+#: dialogs/rc.cpp:71 dialogs/rc.cpp:725 dialogs/settings/rc.cpp:112
+#: views/kinvestmentview.cpp:72 widgets/rc.cpp:37 wizards/wizardpages/rc.cpp:5
+msgid "Symbol"
+msgstr "Símbolo"
+
+#: wizards/wizardpages/rc.cpp:6
+msgid ""
+"<p>Use the fields below to enter some information about yourself.</p>\n"
+"\n"
+"<p>All information is optional and only used to personalize your KMyMoney "
+"file.</p>"
+msgstr ""
+"<p>Utilice los campos abajo para ingresar información sobre usted.</p>\n"
+"\n"
+"<p>Toda la información es opcional y sirve para personalizar su archivo de "
+"KMyMoney.</p>"
+
+#: dialogs/rc.cpp:425 wizards/newuserwizard/rc.cpp:27
+#: wizards/wizardpages/rc.cpp:7
+msgid "Town:"
+msgstr "Ciudad:"
+
+#: dialogs/rc.cpp:420 wizards/newuserwizard/rc.cpp:22
+#: wizards/wizardpages/rc.cpp:8
+msgid "County/State:"
+msgstr "Provincia:"
+
+#: dialogs/rc.cpp:391 dialogs/rc.cpp:421 wizards/newuserwizard/rc.cpp:23
+#: wizards/wizardpages/rc.cpp:9
+msgid "Street:"
+msgstr "Calle:"
+
+#: dialogs/rc.cpp:422 wizards/newuserwizard/rc.cpp:24
+#: wizards/wizardpages/rc.cpp:10
+msgid "Email:"
+msgstr "Email:"
+
+#: dialogs/rc.cpp:424 wizards/newuserwizard/rc.cpp:26
+#: wizards/wizardpages/rc.cpp:11
+msgid "Telephone:"
+msgstr "Teléfono:"
+
+#: dialogs/rc.cpp:423 wizards/newuserwizard/rc.cpp:25
+#: wizards/wizardpages/rc.cpp:12
+msgid "Your name:"
+msgstr "Su Nombre:"
+
+#: dialogs/rc.cpp:427 wizards/newuserwizard/rc.cpp:29
+#: wizards/wizardpages/rc.cpp:13
+msgid "Load from Addressbook"
+msgstr "Cargar desde la Libreta de Direcciones"
+
+#: dialogs/rc.cpp:392 dialogs/rc.cpp:426 views/rc.cpp:68
+#: wizards/wizardpages/rc.cpp:14
+msgid "Postal Code:"
+msgstr "Código Postal:"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:82
+msgid "KMyMoney New Account Setup"
+msgstr "Configuración de Nueva Cuenta de KMyMoney"
+
+#: dialogs/rc.cpp:360 dialogs/rc.cpp:361 reports/listtable.cpp:230
+#: wizards/newaccountwizard/knewaccountwizard.cpp:83
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1616
+#: wizards/newaccountwizard/rc.cpp:61
+msgid "Institution"
+msgstr "Organización"
+
+#: dialogs/investactivities.cpp:198 dialogs/investactivities.cpp:286
+#: dialogs/investactivities.cpp:367 dialogs/kfindtransactiondlg.cpp:181
+#: dialogs/rc.cpp:139 dialogs/rc.cpp:192 dialogs/rc.cpp:207
+#: dialogs/transactioneditor.cpp:734 reports/listtable.cpp:201
+#: reports/pivottable.cpp:1336 reports/pivottable.cpp:1586
+#: views/kforecastview.cpp:393 views/kgloballedgerview.cpp:175
+#: views/khomeview.cpp:418 views/khomeview.cpp:491 views/khomeview.cpp:525
+#: views/khomeview.cpp:764 views/khomeview.cpp:967 views/khomeview.cpp:1437
+#: views/kscheduledview.cpp:71 views/rc.cpp:17 views/rc.cpp:44
+#: widgets/kmymoneyaccounttreebase.cpp:58
+#: widgets/kmymoneyaccounttreeforecast.cpp:41 widgets/rc.cpp:109
+#: widgets/register.cpp:566 widgets/transaction.cpp:978
+#: widgets/transaction.cpp:1535
+#: wizards/newaccountwizard/knewaccountwizard.cpp:84
+msgid "Account"
+msgstr "Cuenta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:85
+msgid "Broker"
+msgstr "Corredor de bolsa"
+
+#: dialogs/kfindtransactiondlg.cpp:225 dialogs/rc.cpp:70 dialogs/rc.cpp:104
+#: dialogs/rc.cpp:159 dialogs/rc.cpp:223 dialogs/rc.cpp:246 dialogs/rc.cpp:751
+#: dialogs/settings/rc.cpp:109 widgets/rc.cpp:35 widgets/register.cpp:568
+#: wizards/newaccountwizard/knewaccountwizard.cpp:86
+msgid "Details"
+msgstr "Detalles"
+
+#: dialogs/knewloanwizard.cpp:636 dialogs/rc.cpp:231 dialogs/rc.cpp:608
+#: kmymoneyutils.cpp:191 views/khomeview.cpp:399
+#: wizards/newaccountwizard/knewaccountwizard.cpp:87
+#: wizards/newaccountwizard/knewaccountwizard.cpp:880
+msgid "Payments"
+msgstr "Pagos"
+
+#: dialogs/investactivities.cpp:195 dialogs/investactivities.cpp:283
+#: dialogs/investactivities.cpp:422 dialogs/investtransactioneditor.cpp:217
+#: reports/listtable.cpp:221 widgets/transaction.cpp:1565
+#: wizards/newaccountwizard/knewaccountwizard.cpp:88
+msgid "Fees"
+msgstr "Cargos"
+
+#: dialogs/rc.cpp:624 views/khomeview.cpp:415 views/khomeview.cpp:488
+#: views/khomeview.cpp:522 wizards/newaccountwizard/knewaccountwizard.cpp:89
+msgid "Schedule"
+msgstr "Programador"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:90
+msgid "Payout"
+msgstr "Pagar a"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:91
+msgid "Parent Account"
+msgstr "Cuenta padre"
+
+#: dialogs/rc.cpp:719 wizards/newaccountwizard/knewaccountwizard.cpp:92
+#: wizards/newuserwizard/knewuserwizard.cpp:86
+msgid "Finish"
+msgstr "Finalizar"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:248
+msgid "Credit card payment"
+msgstr "Pago de tarjeta de crédito"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:264
+#, c-format
+msgid "Loan payment for %1"
+msgstr "Pagar préstamo a %1"
+
+#: mymoney/mymoneyscheduled.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:279
+msgid "Loan payment"
+msgstr "Pago de préstamo"
+
+#: dialogs/rc.cpp:134 wizards/newaccountwizard/knewaccountwizard.cpp:293
+msgid "Amortization"
+msgstr "Amortización"
+
+#: dialogs/investactivities.cpp:196 dialogs/investactivities.cpp:284
+#: dialogs/investactivities.cpp:366 dialogs/investactivities.cpp:423
+#: dialogs/investtransactioneditor.cpp:227 dialogs/rc.cpp:135
+#: dialogs/rc.cpp:152 dialogs/rc.cpp:544 reports/listtable.cpp:222
+#: widgets/transaction.cpp:1597
+#: wizards/newaccountwizard/knewaccountwizard.cpp:302
+msgid "Interest"
+msgstr "Interés"
+
+#: dialogs/kcurrencycalculator.cpp:282
+#: wizards/newaccountwizard/knewaccountwizard.cpp:351
+#: wizards/newaccountwizard/knewaccountwizard.cpp:356
+msgid "User"
+msgstr "Usuario"
+
+#: kmymoneyutils.cpp:64 mymoney/mymoneyaccount.cpp:711
+#: reports/querytabletest.cpp:422
+#: wizards/newaccountwizard/knewaccountwizard.cpp:451
+msgid "Checking"
+msgstr "Corriente"
+
+#: kmymoneyutils.cpp:66 mymoney/mymoneyaccount.cpp:714
+#: wizards/newaccountwizard/knewaccountwizard.cpp:452
+msgid "Savings"
+msgstr "Ahorro"
+
+#: kmymoneyutils.cpp:68 mymoney/mymoneyaccount.cpp:717
+#: reports/querytabletest.cpp:423
+#: wizards/newaccountwizard/knewaccountwizard.cpp:453
+msgid "Credit Card"
+msgstr "Tarjeta de crédito"
+
+#: kmymoneyutils.cpp:70 mymoney/mymoneyaccount.cpp:720
+#: wizards/newaccountwizard/knewaccountwizard.cpp:454
+msgid "Cash"
+msgstr "Tesorería"
+
+#: kmymoneyutils.cpp:72 mymoney/mymoneyaccount.cpp:723
+#: wizards/newaccountwizard/knewaccountwizard.cpp:455
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+msgid "Loan"
+msgstr "Préstamo"
+
+#: kmymoneyutils.cpp:76 mymoney/mymoneyaccount.cpp:729
+#: wizards/newaccountwizard/knewaccountwizard.cpp:456
+msgid "Investment"
+msgstr "Inversión"
+
+#: converter/mymoneytemplate.cpp:178 converter/mymoneytemplate.cpp:179
+#: dialogs/knewaccountdlg.cpp:1014 kmymoneyutils.cpp:80
+#: mymoney/mymoneyaccount.cpp:735 views/kaccountsview.cpp:352
+#: views/kmymoneyview.cpp:765 widgets/kmymoneyaccountselector.cpp:177
+#: widgets/kmymoneyaccountselector.cpp:356
+#: wizards/newaccountwizard/knewaccountwizard.cpp:457
+msgid "Asset"
+msgstr "Activos"
+
+#: converter/mymoneytemplate.cpp:182 converter/mymoneytemplate.cpp:183
+#: dialogs/knewaccountdlg.cpp:1016 kmymoneyutils.cpp:82
+#: mymoney/mymoneyaccount.cpp:738 views/kaccountsview.cpp:356
+#: views/kmymoneyview.cpp:766 widgets/kmymoneyaccountselector.cpp:178
+#: widgets/kmymoneyaccountselector.cpp:363
+#: wizards/newaccountwizard/knewaccountwizard.cpp:458
+msgid "Liability"
+msgstr "Pasivos"
+
+#: converter/mymoneytemplate.cpp:194 converter/mymoneytemplate.cpp:195
+#: kmymoneyutils.cpp:94 mymoney/mymoneyaccount.cpp:756
+#: views/kaccountsview.cpp:369 views/kmymoneyview.cpp:769
+#: widgets/kmymoneyaccountselector.cpp:181
+#: widgets/kmymoneyaccountselector.cpp:390
+#: wizards/newaccountwizard/knewaccountwizard.cpp:460
+msgid "Equity"
+msgstr "Patrimonio"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid ""
+"Please make sure to enter the correct conversion for the selected opening "
+"date. If you requested an online quote it might be provided for a different "
+"date."
+msgstr ""
+"Por favor asegurese de ingresar la conversión correcta para la fecha de "
+"apertura seleccionada. Si solicitó una cotización online, ésta puede ser "
+"para una fecha diferente."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid "Check date"
+msgstr "Fecha del cheque"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:562
+msgid "1 %1 equals %2"
+msgstr "1 %1 es igual a %2"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:577
+msgid "Conversion rate is not positive"
+msgstr "El coeficiente de conversión no es positivo"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:583
+msgid "No account name supplied"
+msgstr "No se suministró un nombre de cuenta"
+
+#: dialogs/keditscheduledlg.cpp:114 mymoney/mymoneyscheduled.cpp:1026
+#: wizards/newaccountwizard/knewaccountwizard.cpp:680
+msgid "Write check"
+msgstr "Cheque escrito"
+
+#: dialogs/keditscheduledlg.cpp:111 mymoney/mymoneyscheduled.cpp:1014
+#: wizards/newaccountwizard/knewaccountwizard.cpp:682
+msgid "Direct debit"
+msgstr "Cargo en cuenta"
+
+#: dialogs/keditscheduledlg.cpp:113 mymoney/mymoneyscheduled.cpp:1032
+#: wizards/newaccountwizard/knewaccountwizard.cpp:683
+msgid "Bank transfer"
+msgstr "Transferencia bancaria"
+
+#: dialogs/keditscheduledlg.cpp:112 mymoney/mymoneyscheduled.cpp:1029
+#: wizards/newaccountwizard/knewaccountwizard.cpp:685
+msgid "Standing order"
+msgstr "Orden de pago"
+
+#: dialogs/keditscheduledlg.cpp:110 mymoney/mymoneyscheduled.cpp:1020
+#: wizards/newaccountwizard/knewaccountwizard.cpp:686
+msgid "Manual deposit"
+msgstr "Depósito en mano"
+
+#: dialogs/keditscheduledlg.cpp:109 mymoney/mymoneyscheduled.cpp:1017
+#: wizards/newaccountwizard/knewaccountwizard.cpp:687
+msgid "Direct deposit"
+msgstr "Depósito en cuenta"
+
+#: dialogs/keditscheduledlg.cpp:115 mymoney/mymoneyscheduled.cpp:1023
+#: wizards/newaccountwizard/knewaccountwizard.cpp:688
+msgid "Other"
+msgstr "Otro"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:697
+msgid "CreditCard %1 monthly payment"
+msgstr "Pago mensual %1 de tarjeta de crédito"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:703
+msgid "Finish entry and create account"
+msgstr "Finalizar ingreso y crear cuenta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:705
+msgid "Finish entry and create account and schedule"
+msgstr "Finalizar ingreso y crear cuenta y asiento programado."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:708
+msgid "Next due date is prior to opening date"
+msgstr "El próximo vencimiento es anterior a la fecha de apertura"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:712
+msgid "No account selected"
+msgstr "No se seleccionó una cuenta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:716
+msgid "No amount for payment selected"
+msgstr "No se ingresó un monto de pago"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:720
+msgid "No payee for payment selected"
+msgstr "No se ingresó un beneficiario"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:724
+msgid "No name assigned for schedule"
+msgstr "No se ingresó un nombre para el asiento programado"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:805
+msgid "No payee supplied"
+msgstr "No se suministró un beneficiario"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:819
+msgid "No opening balance supplied"
+msgstr "No se ingresó un saldo de apertura"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:826
+msgid "An interest change can only happen after the first payment"
+msgstr "Un cambio de interés sólo puede ocurrir después del primer pago"
+
+#: dialogs/knewloanwizard.cpp:615 dialogs/knewloanwizard.cpp:634
+#: wizards/newaccountwizard/knewaccountwizard.cpp:884
+#: wizards/newaccountwizard/rc.cpp:55
+msgid "Months"
+msgstr "Meses"
+
+#: dialogs/knewloanwizard.cpp:616 dialogs/knewloanwizard.cpp:635
+#: wizards/newaccountwizard/knewaccountwizard.cpp:885
+#: wizards/newaccountwizard/knewaccountwizard.cpp:889
+#: wizards/newaccountwizard/rc.cpp:56
+msgid "Years"
+msgstr "Años"
+
+#: dialogs/knewloanwizard.cpp:711
+#: wizards/newaccountwizard/knewaccountwizard.cpp:961
+#, c-format
+msgid "KMyMoney has calculated the amount of the loan as %1."
+msgstr "KMyMoney calculó el importe del préstamo como %1."
+
+#: dialogs/knewloanwizard.cpp:718
+#: wizards/newaccountwizard/knewaccountwizard.cpp:968
+msgid "KMyMoney has calculated the interest rate to %1%."
+msgstr "KMyMoney calculó el interés como %1%."
+
+#: dialogs/knewloanwizard.cpp:731
+#: wizards/newaccountwizard/knewaccountwizard.cpp:981
+msgid ""
+"KMyMoney has calculated a periodic payment of %1 to cover principal and "
+"interest."
+msgstr ""
+"KMyMoney ha calculado un pago periódico de %1 para cubrir la amortización y "
+"el interés."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:993
+#, c-format
+msgid ""
+"The number of payments has been decremented and the balloon payment has been "
+"modified to %1."
+msgstr "El número de pagos ha sido disminuido y el pago final modificado a %1."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1001
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1021
+#, c-format
+msgid "The balloon payment has been modified to %1."
+msgstr "El pago final fue modificado a %1."
+
+#: dialogs/knewloanwizard.cpp:763
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1013
+msgid "KMyMoney has calculated the term of your loan as %1. "
+msgstr "KMyMoney ha calculado el remate de su préstamo como %1."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1052
+msgid "KMyMoney has calculated a balloon payment of %1 for this loan."
+msgstr "KMyMoney calculó un pago final de %1 para este préstamo."
+
+#: dialogs/knewloanwizard.cpp:809
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1059
+msgid "KMyMoney has successfully verified your loan information."
+msgstr "KMyMoney verificó satisfactoriamente la información de su préstamo ."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1067
+msgid ""
+"You have entered mis-matching information. Please modify your figures or "
+"leave one value empty to let KMyMoney calculate it for you"
+msgstr ""
+"Introdujo información que no encaja. Por favor actualice sus datos o deje un "
+"valor vacío para permitir a KMyMoney calcularlo por usted"
+
+#: dialogs/knewloanwizard.cpp:504 dialogs/knewloanwizard.cpp:513
+#: dialogs/knewloanwizard.cpp:522 dialogs/knewloanwizard.cpp:532
+#: dialogs/knewloanwizard.cpp:820
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1070
+msgid "Calculation error"
+msgstr "Error de cálculo"
+
+#: dialogs/knewloanwizard.cpp:824
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1074
+msgid ""
+"\n"
+"\n"
+"Accept this or modify the loan information and recalculate."
+msgstr ""
+"\n"
+"\n"
+"Acepte esto o modifique la información del préstamo y recalcule."
+
+#: dialogs/knewloanwizard.cpp:826
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1076
+msgid "Calculation successful"
+msgstr "Cálculo correcto"
+
+#: dialogs/knewloanwizard.cpp:846
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1129
+#, c-format
+msgid ""
+"_n: one month\n"
+"%n months"
+msgstr ""
+"un mes\n"
+"%n meses"
+
+#: dialogs/knewloanwizard.cpp:850
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1133
+#, c-format
+msgid ""
+"_n: one year\n"
+"%n years"
+msgstr ""
+"un año\n"
+"%n años"
+
+#: dialogs/knewloanwizard.cpp:854
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1137
+#, c-format
+msgid ""
+"_n: one payment\n"
+"%n payments"
+msgstr ""
+"un pago\n"
+"%n pagos"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1190
+msgid "Press Calculate to verify the values"
+msgstr "Presione Calcular para verificar los valores"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1194
+msgid "Not all details supplied"
+msgstr "No se suministrarón todos los detalles"
+
+#: dialogs/kaccountselectdlg.cpp:70 dialogs/knewloanwizard.cpp:122
+#: dialogs/knewloanwizard.cpp:136
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1381
+msgid "&Create..."
+msgstr "&Crear..."
+
+#: dialogs/knewloanwizard.cpp:138
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1383
+msgid "Create a new asset account"
+msgstr "Crear una nueva cuenta de activos"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1384
+msgid ""
+"If the asset account does not yet exist, press this button to create it."
+msgstr ""
+"Si la cuenta de activo aún no existe, presione este botón para crearla."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1596
+msgid "Account information"
+msgstr "Información de cuenta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1601
+#: wizards/newaccountwizard/rc.cpp:59
+msgid "Subaccount of"
+msgstr "Subcuenta de"
+
+#: dialogs/rc.cpp:225 dialogs/rc.cpp:326 dialogs/rc.cpp:371 dialogs/rc.cpp:723
+#: plugins/ofximport/dialogs/rc.cpp:23 reports/listtable.cpp:225
+#: widgets/kmymoneyaccounttreebase.cpp:113 widgets/register.cpp:61
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1606
+msgid "Type"
+msgstr "Tipo"
+
+#: dialogs/kcurrencyeditdlg.cpp:62 dialogs/rc.cpp:56 dialogs/rc.cpp:59
+#: dialogs/rc.cpp:75 dialogs/rc.cpp:727 dialogs/rc.cpp:792
+#: kmymoneyutils.cpp:84 kmymoneyutils.cpp:111 mymoney/mymoneyaccount.cpp:741
+#: mymoney/mymoneysecurity.cpp:169 reports/listtable.cpp:233
+#: widgets/kmymoneypriceview.cpp:127
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1607
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1630
+#: wizards/newaccountwizard/rc.cpp:6 wizards/newaccountwizard/rc.cpp:24
+msgid "Currency"
+msgstr "Moneda"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1608
+#: wizards/newaccountwizard/rc.cpp:7 wizards/newuserwizard/rc.cpp:9
+msgid "Opening date"
+msgstr "Fecha de apertura"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1610
+#: wizards/newaccountwizard/rc.cpp:9
+msgid "Conversion rate"
+msgstr "Coeficiente de conversión"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1613
+#: wizards/newaccountwizard/rc.cpp:15 wizards/newuserwizard/rc.cpp:13
+msgid "Opening balance"
+msgstr "Saldo de apertura"
+
+#: dialogs/keditscheduledlg.cpp:507 dialogs/transactioneditor.cpp:784
+#: dialogs/transactioneditor.cpp:848 plugins/ofximport/dialogs/rc.cpp:22
+#: widgets/rc.cpp:111 widgets/register.cpp:59 widgets/transaction.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1618
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1632
+msgid "Number"
+msgstr "Número"
+
+#: dialogs/rc.cpp:365 wizards/newaccountwizard/knewaccountwizard.cpp:1621
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1634
+#: wizards/newaccountwizard/rc.cpp:26 wizards/newaccountwizard/rc.cpp:66
+msgid "IBAN"
+msgstr "IBAN"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1627
+msgid "Brokerage Account"
+msgstr "Cuenta de Corretaje"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1640
+msgid "Loan information"
+msgstr "Información del préstamo"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1643
+msgid "Amount borrowed"
+msgstr "Monto pedido"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1645
+msgid "Amount lent"
+msgstr "Monto prestado"
+
+#: dialogs/rc.cpp:515 dialogs/rc.cpp:546
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1647
+#: wizards/newaccountwizard/rc.cpp:75
+msgid "Interest rate"
+msgstr "Tasa de interés"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1648
+msgid "Interest rate is"
+msgstr "La tasa de interés es"
+
+#: dialogs/rc.cpp:509 dialogs/rc.cpp:572
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1649
+msgid "Principal and interest"
+msgstr "Amortización e Intereses"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1650
+#: wizards/newaccountwizard/rc.cpp:90
+msgid "Additional fees"
+msgstr "Cargos adicionales"
+
+#: dialogs/rc.cpp:525 wizards/newaccountwizard/knewaccountwizard.cpp:1651
+#: wizards/newaccountwizard/rc.cpp:44
+msgid "Payment frequency"
+msgstr "Frecuencia de los pagos"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1652
+#: wizards/newaccountwizard/rc.cpp:105
+msgid "Payment account"
+msgstr "Cuenta de pago"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1655
+msgid "Payout information"
+msgstr "Información del pago"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1658
+msgid "Refinance"
+msgstr "Refinanciar"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1661
+msgid "Transfer amount to"
+msgstr "Transferir importe a"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1663
+msgid "Transfer amount from"
+msgstr "Transferir importe de"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1665
+msgid "Payment date"
+msgstr "Fecha de pago"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1671
+msgid "Schedule information"
+msgstr "Información de asiento programado"
+
+#: reports/listtable.cpp:228
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1684
+msgid "Occurence"
+msgstr "Ocurrencia"
+
+#: mymoney/mymoneyscheduled.cpp:891 mymoney/mymoneyscheduled.cpp:947
+#: mymoney/mymoneyscheduled.cpp:1283 mymoney/mymoneyscheduletest.cpp:1343
+#: widgets/rc.cpp:19 widgets/rc.cpp:74
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+msgid "Monthly"
+msgstr "Mensual"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1677
+msgid "Paid from"
+msgstr "Pagado de"
+
+#: widgets/kmymoneycombo.cpp:473 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1678
+msgid "Pay to"
+msgstr "Pagar a"
+
+#: dialogs/investactivities.cpp:197 dialogs/investactivities.cpp:285
+#: dialogs/investactivities.cpp:365 dialogs/kfindtransactiondlg.cpp:197
+#: dialogs/kmymoneysplittable.cpp:80 dialogs/rc.cpp:51 dialogs/rc.cpp:212
+#: reports/listtable.cpp:197 views/khomeview.cpp:421 views/khomeview.cpp:494
+#: views/khomeview.cpp:528 views/kscheduledview.cpp:73 views/rc.cpp:63
+#: widgets/register.cpp:58 widgets/transaction.cpp:1055
+#: widgets/transaction.cpp:1578 widgets/transaction.cpp:1610
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1679
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1685
+msgid "Amount"
+msgstr "Importe"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1680
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1686
+msgid "First payment due"
+msgstr "El primer pago vence"
+
+#: dialogs/rc.cpp:102 wizards/newaccountwizard/knewaccountwizard.cpp:1681
+#: wizards/newaccountwizard/rc.cpp:115
+msgid "Payment method"
+msgstr "Método de Pago"
+
+#: wizards/newaccountwizard/rc.cpp:1
+msgid ""
+"This page summarizes the data you have entered. Press <b>Finish</b> to "
+"create the account, schedules, etc. or use <b>Back</b> to modify your "
+"entries."
+msgstr ""
+"Esta página resume los datos que ingresó. Presione <b>Finalizar</b> para "
+"crear la cuenta, asientos programados, etc. o utilize <b>Atrás</b> para "
+"modificar lo ingresado."
+
+#: wizards/newaccountwizard/rc.cpp:2
+msgid "Item"
+msgstr "Elemento"
+
+#: dialogs/rc.cpp:110 dialogs/rc.cpp:165 dialogs/rc.cpp:252 dialogs/rc.cpp:757
+#: dialogs/rc.cpp:818 views/kinvestmentview.cpp:74 widgets/register.cpp:574
+#: wizards/newaccountwizard/rc.cpp:3
+msgid "Value"
+msgstr "Valor"
+
+#: wizards/newaccountwizard/rc.cpp:4
+msgid ""
+"Enter the name of the account under which it is known within KMyMoney.\n"
+"Select the type for the new account. Use the <b>What's this?</b> feature to "
+"see more details about the various account types.\n"
+"Enter the date the account was opened and its currency."
+msgstr ""
+"Ingrese el nombre de la cuenta por la cual se conoce en KMyMoney.\n"
+"Seleccione el tipo de la nueva cuenta. Utilice <b>¿Qué es eso?</b> para ver "
+"más detalles sobre los distintos tipos de cuenta.\n"
+"Ingrese la fecha en que la cuenta fue abierta y su divisa."
+
+#: wizards/newaccountwizard/rc.cpp:5
+msgid "Select the currency in which this account is denominated."
+msgstr "Seleccione la divisa de denominación de esta cuenta."
+
+#: wizards/newaccountwizard/rc.cpp:8
+msgid ""
+"The opening balance is the balance of the account when you start using it "
+"with KMyMoney. For new accounts this is usually 0 but for existing accounts "
+"this may well differ. Please consult the account statements to figure out "
+"this value. The opening balance is to be provided in the currency of the "
+"account as selected with the currency button."
+msgstr ""
+"El saldo de apertura es el saldo de la cuenta cuando usted empiece a "
+"utilizarla con KMyMoney. Para cuentas nuevas éste es usualmente 0, pero para "
+"cuentas existentes puede ser diferente. Por favor consulte los resúmenes de "
+"cuenta para deducir este valor. El saldo de apertura debe estar en la divisa "
+"que fue seleccionada al crear la cuenta."
+
+#: wizards/newaccountwizard/rc.cpp:10
+msgid ""
+"The opening date would be the date of the last statement. In case you want "
+"to keep track of transactions prior to this date, enter the ending balance "
+"and statement date of a prior statement and add all following transactions "
+"into KMyMoney.\n"
+"<br>\n"
+"<i>Note</i>: If you do not know the exact amount of the opening balance, "
+"enter an estimate. You can change this value later before you reconcile this "
+"account for the first time."
+msgstr ""
+"Introduzca el saldo final de su último extracto de cuenta. Si desea seguirle "
+"la pista a asientos anteriores a esta fecha, introduzca el saldo final de un "
+"extracto anterior y añada todos los asientos a partir de esa fecha.\n"
+"<br>\n"
+"<i>Nota</i>: Si quiere mantener esta cuenta desde la fecha de apertura "
+"introduzca un cero. Si no conoce la cantidad exacta, introduzca una "
+"estimación. Puede cambiar este valor más tarde antes de reconciliar esta "
+"cuenta por primera vez."
+
+#: dialogs/rc.cpp:52 dialogs/rc.cpp:54 dialogs/rc.cpp:57 dialogs/rc.cpp:60
+#: dialogs/rc.cpp:748 dialogs/rc.cpp:749 dialogs/rc.cpp:768 widgets/rc.cpp:6
+#: widgets/rc.cpp:7 widgets/rc.cpp:8 widgets/rc.cpp:9 widgets/rc.cpp:10
+#: widgets/rc.cpp:11 widgets/rc.cpp:12 widgets/rc.cpp:13 widgets/rc.cpp:14
+#: widgets/rc.cpp:15 widgets/rc.cpp:16 widgets/rc.cpp:17
+#: wizards/newaccountwizard/rc.cpp:11 wizards/newaccountwizard/rc.cpp:88
+#: wizards/newaccountwizard/rc.cpp:91 wizards/newaccountwizard/rc.cpp:93
+#: wizards/newuserwizard/rc.cpp:14
+msgid "xxx"
+msgstr "xxx"
+
+#: wizards/newaccountwizard/rc.cpp:12
+msgid "Account type"
+msgstr "Tipo de cuenta"
+
+#: wizards/newaccountwizard/rc.cpp:13
+msgid ""
+"For foreign currencies an initial conversion rate needs to be provided. This "
+"should be the price of the foreign currency in the base currency on the "
+"opening date of the account."
+msgstr ""
+"Para divisa extranjera debe proporcionarse un coeficiente de conversión "
+"inicial. Este debería ser el precio de la divisa en la divisa base a la "
+"fecha de apertura de la cuenta."
+
+#: wizards/newaccountwizard/rc.cpp:14
+msgid "Account name"
+msgstr "Nombre de la cuenta"
+
+#: wizards/newaccountwizard/rc.cpp:16
+msgid ""
+"<p><b>Checking</b>\n"
+"Use the checking account type to manage activities on your checking account "
+"e.g. payments, checks and cash card purchases.</p>\n"
+"\n"
+"<p><b>Savings</b>\n"
+"Use the savings account type to manage activities on your savings account.</"
+"p>\n"
+"\n"
+"<p><b>Credit Card</b>\n"
+"Use the credit card account type to manage activities on your credit card.</"
+"p>\n"
+"\n"
+"<p><b>Cash</b>\n"
+"\n"
+"Use the cash account type to manage activities in your wallet.</p>\n"
+"\n"
+"<p><b>Loan</b>\n"
+"Use the loan account type to manage amortization loans (e.g. mortgages, car "
+"loan, money you lend, private loans etc.).</p>\n"
+"\n"
+"<p><b>Investment</b>\n"
+"Use the investment account to manage your stock, mutual fund and other "
+"investments.</p>\n"
+"\n"
+"<p><b>Asset</b>\n"
+"Use the asset account type to manage assets (e.g. your house, car or art "
+"collection).</p>\n"
+"\n"
+"<p><b>Liability</b>\n"
+"Use the liability account type to manage any type of liability except "
+"amortization loans. Use it for taxes you owe or money you borrowed from "
+"friends. For amortization loans like mortgages you should create a loan "
+"account.</p>"
+msgstr ""
+"<p><b>Corriente</b>\n"
+"Utilice la cuenta corriente para manejar actividades en su cuenta corriente, "
+"como pagos, cheques y compras con tarjeta de crédito.</p>\n"
+"\n"
+"<p><b>Ahorro</b>\n"
+"Utilice la cuenta de ahorro para manejar actividades en su caja de ahorro.</"
+"p>\n"
+"\n"
+"<p><b>Tarjeta de crédito</b>\n"
+"Utilice el tipo tarjeta de crédito para manejar actividades en su tarjeta de "
+"crédito.</p>\n"
+"\n"
+"<p><b>Cash</b>\n"
+"\n"
+"Use the cash account type to manage activities in your wallet.</p>\n"
+"\n"
+"<p><b>Préstamo</b>\n"
+"Utilice el tipo préstamo para manejar prestamos con amortización (hipotecas, "
+"prendas, préstamos, dinero que usted preste, préstamos privados, etc.).</p>\n"
+"\n"
+"<p><b>Inversión</b>\n"
+"Utilice la cuenta de inversión para manejar sus acciones, fondos mutuales y "
+"otras inversiones.</p>\n"
+"\n"
+"<p><b>Activo</b>\n"
+"Utilice la cuenta activo para manejar activos (como una casa, auto o "
+"colección de arte).</p>\n"
+"\n"
+"<p><b>Pasivo</b>\n"
+"Utilice la cuenta de pasivo para manejar cualquier tipo de deuda, excepto "
+"préstamos con amortización. Utilicelo para impuestados adeudados o dinero "
+"que haya pedido prestado. Para préstamos con amortización, como hipotecas, "
+"debería crear una cuenta préstamo.</p>"
+
+#: wizards/newaccountwizard/rc.cpp:17
+msgid "Preferred account"
+msgstr "Cuenta preferida"
+
+#: wizards/newaccountwizard/rc.cpp:18
+msgid ""
+"Mark this checkbox if the account should be maintained as preferred account"
+msgstr ""
+"Marque esta casilla si la cuenta debe ser mantenida como cuenta preferida"
+
+#: wizards/newaccountwizard/rc.cpp:19
+msgid ""
+"Selecting the <b>Preferred Account</b> checkbox will allow preferred access "
+"in some dialogs and views of KMyMoney."
+msgstr ""
+"Escogiendo la casilla <b>Cuenta Preferida</b> se le permitirá tener acceso "
+"preferente en algunos diálogos y vistas de KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:20
+msgid "Enter a name under which this account is known within KMyMoney."
+msgstr "Ingrese un nombre por el que se conoce la cuenta en KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:21
+msgid "Online quote"
+msgstr "Cotización Online"
+
+#: wizards/newaccountwizard/rc.cpp:22
+msgid ""
+"Does this investment account have a brokerage account?<p>\n"
+"\n"
+"<b>Check</b> the mark if this investment account has an associated account "
+"for money that is not invested.<br>\n"
+"\n"
+"<b>Uncheck</b> it if you don't use this account for active stock brokerage. "
+"You should also uncheck it if this account is not maintained by a bank or "
+"broker."
+msgstr ""
+"¿Esta cuenta tiene una cuenta de corretaje?<p>\n"
+"\n"
+"<b>Marcar</b> la casilla si esta cuenta de inversión tiene una cuenta "
+"asociada para dinero que no está invertido.<br>\n"
+"\n"
+"<b>Desmarcar</b> si no utiliza esta cuenta para corretaje. También debería "
+"desmarcar esta casilla si esta cuenta no es mantenida por un banco o "
+"corredor."
+
+#: wizards/newaccountwizard/rc.cpp:23
+msgid "Create brokerage account"
+msgstr "Crear cuenta de corretaje"
+
+#: wizards/newaccountwizard/rc.cpp:25 wizards/newaccountwizard/rc.cpp:64
+msgid "Account number"
+msgstr "Número de cuenta"
+
+#: wizards/newaccountwizard/rc.cpp:27
+msgid ""
+"Please select the required options. Please use the <b>What's this?</b> "
+"feature to see more information about the items."
+msgstr ""
+"Por favor seleccione las opciones requeridas. Por favor utilice <b>¿Qué es "
+"esto?</b> para ver más información sobre cada elemento."
+
+#: wizards/newaccountwizard/rc.cpp:28
+msgid "What is the type of the loan?"
+msgstr "¿Cual es el tipo de préstamo?"
+
+#: dialogs/rc.cpp:481 wizards/newaccountwizard/rc.cpp:29
+msgid "I am borrowing money"
+msgstr "Pido prestado dinero"
+
+#: dialogs/rc.cpp:482 wizards/newaccountwizard/rc.cpp:30
+msgid "I am lending money"
+msgstr "Presto Dinero"
+
+#: wizards/newaccountwizard/rc.cpp:31
+msgid "Who is the payee/payer of the loan?"
+msgstr "¿Cual es el beneficiario/acreedor del préstamo?"
+
+#: wizards/newaccountwizard/rc.cpp:32
+msgid ""
+"Enter the name of the person or bank you owe money or who owes you money.\n"
+"\n"
+"If the name does not exist within KMyMoney's database, you are asked if you "
+"want to create it."
+msgstr ""
+"Ingrese el nombre de la persona o banco al que le debe dinero o que le debe "
+"dinero a usted.\n"
+"\n"
+"Si el nombre no existe en KMyMoney, se le preguntará si desea crearlo."
+
+#: wizards/newaccountwizard/rc.cpp:33
+msgid "Did you make/receive any payments yet?"
+msgstr "¿Ha realizado ya algún pago?"
+
+#: wizards/newaccountwizard/rc.cpp:36
+msgid ""
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?\n"
+"\n"
+"Note: Payments made to obtain the loan (e.g. Disagio) are not considered as "
+"payments in this context."
+msgstr ""
+"¿Han habido pagos para este préstamo, aunque no los haya ingresado en "
+"KMyMoney?\n"
+"\n"
+"Nota: Los pagos hechos para obtener el préstamo (p. ej. \"Comisiones de "
+"apertura\") no son considerados como pagos en este contexto."
+
+#: wizards/newaccountwizard/rc.cpp:37
+msgid "Which payments do you want to record?"
+msgstr "¿Qué pagos desea registrar?"
+
+#: wizards/newaccountwizard/rc.cpp:38
+msgid "All payments"
+msgstr "Todos los pagos"
+
+#: wizards/newaccountwizard/rc.cpp:39
+msgid "Start with this year's payments"
+msgstr "Iniciar con los pagos de este año"
+
+#: wizards/newaccountwizard/rc.cpp:40
+msgid ""
+"<qt>Select which transactions should be recorded.\n"
+"\n"
+"<b>All payments</b> allows you to enter all payments made for this loan.\n"
+"\n"
+"The option to <b>start from the beginning of the current year</b> is meant "
+"for loans that are active for a longer period of time already and you don't "
+"want to enter all transactions of the past.\n"
+"</qt>"
+msgstr ""
+"<qt> Seleccionar las transacciones que desea registrar.\n"
+"\n"
+"<b>Todos los pagos</b> le permite ingresar todos los pagos realizados para "
+"este préstamo.\n"
+"\n"
+"La opción <b>iniciar con los pagos de este año</b> es para préstamos que han "
+"estado activos por un periodo más largo de tiempo y no desea registrar todas "
+"las transacciones pasadas.\n"
+"</qt>"
+
+#: wizards/newaccountwizard/rc.cpp:41
+msgid "Balance before start of recording"
+msgstr "Saldo anterior al inicio de la registración"
+
+#: wizards/newaccountwizard/rc.cpp:42
+msgid ""
+"Enter the ending balance found on the statement that is the last one before "
+"you want to start recording this loan in KMyMoney."
+msgstr ""
+"Ingrese el saldo final del último resumen previo a que comenzara a registrar "
+"este préstamo en KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:43
+msgid ""
+"You have selected to record only payments from the beginning of this year. "
+"Since prior transactions will not be recorded, you need to supply the "
+"balance of the loan on January 1st of this year."
+msgstr ""
+"Usted ha elegido registrar sólo los pagos desde el inicio de este año. Dado "
+"que las transacciones anteriores no serán registradas, deberá suministrar el "
+"saldo del prestamo al primero de enero de este año."
+
+#: wizards/newaccountwizard/rc.cpp:45
+msgid "Interest Compounding frequency"
+msgstr "Frecuencia del interés compuesto"
+
+#: wizards/newaccountwizard/rc.cpp:46
+msgid ""
+"Select the frequency with which the interest is compounded. If uncertain, "
+"select the same as the payment frequency. Consult your loan contract for "
+"details."
+msgstr ""
+"Seleccione la frecuencia con la que se compone el interés. Si no está "
+"seguro, seleccione la misma que la frecuencia de pago. Consulte su contrato "
+"de préstamo para más detalles."
+
+#: wizards/newaccountwizard/rc.cpp:47
+msgid "Due date of first payment to be recorded"
+msgstr "Fecha del primer pago a registrar"
+
+#: wizards/newaccountwizard/rc.cpp:48
+msgid ""
+"Depending on the answer to <b>What do you want to record?</b> this field "
+"means the following:<p>\n"
+"\n"
+"<b>All payments</b><br>\n"
+"Enter the due date of the very first payment<p>\n"
+"\n"
+"<b>Start with this year's payments</b><br>\n"
+"Enter the due date of the first payment in the current year"
+msgstr ""
+"Dependiendo de la respuesta a <b>¿Qué desea registrar?</b> este campo "
+"significa lo siguiente:<p>\n"
+"\n"
+"<b>Todos los pagos</b><br>\n"
+"Ingrese la fecha de vencimiento del primer pago<p>\n"
+"\n"
+"<b>Iniciar con los pagos de este año</b><br>\n"
+"Ingrese la fecha de vencimiento del primer pago de este año"
+
+#: wizards/newaccountwizard/rc.cpp:49
+msgid "Type of interest rate"
+msgstr "Tipo de tasa de interés"
+
+#: wizards/newaccountwizard/rc.cpp:50
+msgid "Fixed"
+msgstr "Fija"
+
+#: wizards/newaccountwizard/rc.cpp:51
+msgid "Variable"
+msgstr "Variable"
+
+#: wizards/newaccountwizard/rc.cpp:52
+msgid "Time between interest changes"
+msgstr "Tiempo entre cambios de interés"
+
+#: dialogs/knewloanwizard.cpp:613 wizards/newaccountwizard/rc.cpp:53
+msgid "Days"
+msgstr "Días"
+
+#: dialogs/knewloanwizard.cpp:614 wizards/newaccountwizard/rc.cpp:54
+msgid "Weeks"
+msgstr "Semanas"
+
+#: wizards/newaccountwizard/rc.cpp:57
+msgid "Next interest change is due"
+msgstr "El próximo cambio de interés es"
+
+#: wizards/newaccountwizard/rc.cpp:58
+msgid "This page allows you to select the parent account."
+msgstr "Esta página le permite seleccionar una cuenta madre."
+
+#: wizards/newaccountwizard/rc.cpp:60
+msgid ""
+"If this account is managed by an institution please select the institution "
+"from the list. If the institution does not exist yet, please choose the "
+"<b>New Institution</b> button to create it. Otherwise, leave this field "
+"empty.\n"
+"Enter the account number used by the institution to identify the account."
+msgstr ""
+"Si esta cuenta está gestionada por una organización, escójala de la lista. "
+"Si aún no existe, escoja el botón <b>Nueva Organización</b> para crearla.En "
+"otro caso, deje este campo vacío.\n"
+"Ingrese el número de cuenta utilizado por la organización para identificar "
+"la cuenta."
+
+#: wizards/newaccountwizard/rc.cpp:62
+msgid "Select the institution which manages this account or leave empty"
+msgstr "Seleccione la organización que maneja esta cuenta o déjelo en blanco."
+
+#: wizards/newaccountwizard/rc.cpp:63
+msgid "New Institution"
+msgstr "Nueva Organización"
+
+#: wizards/newaccountwizard/rc.cpp:65
+msgid ""
+"Accounts managed by an institution are usually referenced by a unique number "
+"the so called account number. Enter that number here.\n"
+"\n"
+"KMyMoney currently uses this number only for some online banking functions."
+msgstr ""
+"Las cuentas manejadas por una organización generalmente son referenciadas "
+"por un número único, llamado número de cuenta. Ingrese ese número aquí.\n"
+"\n"
+"Actualmente KMyMoney sólo utiliza ese número para algunas funciones de banca "
+"online."
+
+#: wizards/newaccountwizard/rc.cpp:67
+msgid "Enter the International Bank Account Number into this field"
+msgstr "Ingrese el Número de Cuenta Bancaria Internacional en este campo"
+
+#: wizards/newaccountwizard/rc.cpp:68
+msgid ""
+"You can enter the IBAN (International Bank Account Number) into this field "
+"if you know it. Usually, people at your institution can tell you the number "
+"or it is printed on your statements.\n"
+"\n"
+"See also http://en.wikipedia.org/wiki/International_Bank_Account_Number for "
+"more information.\n"
+"\n"
+"KMyMoney keeps this field only for documentation purposes and does not use "
+"it otherwise."
+msgstr ""
+"Puede ingresar el IBAN ( Número de Cuenta Bancaria Internacional, o IBAN por "
+"sus siglas en inglés) en este campo, si lo conoce. Usualmente, la gente de "
+"su institución bancaria puede decirle el número o estará impreso en sus "
+"extractos.\n"
+"\n"
+"Puede ver también http://es.wikipedia.org/wiki/IBAN para más información.\n"
+"\n"
+"KMyMoney guarda este campo sólo para documentación y no lo utiliza de otra "
+"manera."
+
+#: wizards/newaccountwizard/rc.cpp:69
+msgid ""
+"Now enter the details for your loan. You can leave one of the fields empty "
+"and KMyMoney will calculate it when you press the <b>Calculate</b> button. "
+"Before you can continue with the next page you also need to press "
+"<b>Calculate</b> so that KMyMoney can check the logical correctness of the "
+"values you have supplied."
+msgstr ""
+"Ingrese ahora los detalles de su préstamo. Puede dejar uno de los campos en "
+"blanco y KMyMoney lo calculará cuando presione el botón <b>Calcular</b>. "
+"Antes que pueda continuar a la siguiente página también necesita presionar "
+"<b>Calcular</b> para que KMyMoney pueda verificar la corrección de los datos "
+"suministrados."
+
+#: wizards/newaccountwizard/rc.cpp:70
+msgid "The interest rate gets calculated"
+msgstr "La tasa de interés se calcula"
+
+#: wizards/newaccountwizard/rc.cpp:71
+msgid "when the payment is received"
+msgstr "cuando se recibe el pago"
+
+#: wizards/newaccountwizard/rc.cpp:72
+msgid "when the payment is due"
+msgstr "cuando vence el pago"
+
+#: dialogs/rc.cpp:531 dialogs/rc.cpp:533 wizards/newaccountwizard/rc.cpp:73
+msgid "Loan amount"
+msgstr "Cantidad del préstamo"
+
+#: wizards/newaccountwizard/rc.cpp:74
+msgid ""
+"Enter the amount of the loan in this field. If you want to calculate this "
+"field out of the other parameters, please leave it empty. If the field is "
+"marked as required (colored background) you have informed KMyMoney about the "
+"fact that there were already some payments towards the loan. In this case, "
+"please enter the ending balance of your last statement."
+msgstr ""
+"Ingrese el monto del préstamo en este campo. Si desea calcular este campo a "
+"partir de los otros parámetros, por favor, déjelo vacío. Si el campo está "
+"marcado como requerido (fondo en color), usted ha informado que ya se han "
+"realizados algunos pagos del préstamo. En ese caso, por favor, ingrese el "
+"saldo final de su último extracto."
+
+#: wizards/newaccountwizard/rc.cpp:76
+msgid ""
+"Please enter the interest rate in percent or leave the field empty to "
+"calculate it."
+msgstr ""
+"Introduzca la tasa de interés o deje el campo en blanco para calcularlo."
+
+#: dialogs/rc.cpp:559 wizards/newaccountwizard/rc.cpp:77
+msgid "Term"
+msgstr "Plazo"
+
+#: wizards/newaccountwizard/rc.cpp:78
+msgid ""
+"Please enter the term of this loan or enter 0 to calculate it. The term is "
+"the time that is required to fully repay the loan. This time might be "
+"different from the time your loan contract is signed for."
+msgstr ""
+"Por favor, introduzca el plazo de este préstamo o deje el campo vacío para "
+"calcularlo. El plazo es el tiempo requerido para devolver por completo el "
+"préstamo. Este tiempo puede ser diferente del tiempo por el que firme el "
+"contrato de préstamo."
+
+#: wizards/newaccountwizard/rc.cpp:79
+msgid "Payment (principal and interest)"
+msgstr "Pago (amortización e intereses)"
+
+#: wizards/newaccountwizard/rc.cpp:80
+msgid ""
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"Por favor introduzca la cantidad que paga de amortización e intereses o "
+"déjela en blanco para calcularla."
+
+#: wizards/newaccountwizard/rc.cpp:81
+msgid "Balloon payment"
+msgstr "Pago final"
+
+#: wizards/newaccountwizard/rc.cpp:82
+msgid ""
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"Introduzca la cantidad del pago final de la amortización o deje el campo "
+"vacío para calcularlo."
+
+#: wizards/newaccountwizard/rc.cpp:83
+msgid "Calculate"
+msgstr "Calcular"
+
+#: wizards/newaccountwizard/rc.cpp:84
+msgid "Press this button to calculate/verify your loan details."
+msgstr "Presione este botón para calcular/verificar los detalles del préstamo."
+
+#: wizards/newaccountwizard/rc.cpp:85
+msgid ""
+"Pressing this button calculates a possibly missing parameter for your loan "
+"or verifies that the values entered match. If something is not correct you "
+"will receive information about it."
+msgstr ""
+"Presionando este botón se calcula un posible parámetro faltante de su "
+"préstamo o verifica que los valores ingresados coincidan. Si algo no está "
+"correcto, se le informará sobre ello."
+
+#: wizards/newaccountwizard/rc.cpp:86
+msgid ""
+"Now enter the information required for the periodic loan payments. If your "
+"regular payments contains any additional fees, click on the <b>Additional "
+"fees</b> button to enter them."
+msgstr ""
+"Ahora ingrese la información requerida sobre los pagos periódicos del "
+"préstamo. Si sus pagos periódicos contienen cargos adicionales, pulse el "
+"botón <b>Cargos Adicionales<\b> para introducirlos."
+
+#: wizards/newaccountwizard/rc.cpp:87
+msgid "Principal + Interest"
+msgstr "Amortización + Intereses:"
+
+#: dialogs/rc.cpp:620 wizards/newaccountwizard/rc.cpp:89
+msgid "+"
+msgstr "+"
+
+#: wizards/newaccountwizard/rc.cpp:92
+msgid "= periodical payments"
+msgstr "= pagos periódicos"
+
+#: dialogs/rc.cpp:643 wizards/newaccountwizard/rc.cpp:94
+msgid ""
+"If this loan is for an asset, such as a car or a house, you can create the "
+"asset account now. An asset account represents the total value of an asset. "
+"The money from this loan will be transfered into the asset account you "
+"create or select.\n"
+"If this loan is a 'consumer loan' (money to use however you want), you can "
+"use a checking account instead."
+msgstr ""
+"Si este es un préstamo para adquirir un activo, p. ej. un coche o una casa, "
+"puede crear la cuenta de activos ahora. Una cuenta de activos representa el "
+"valor total de un activo. El dinero de este préstamo será transferido a la "
+"cuenta de activos que ha creado o escogido.\n"
+"Si este es un \"préstamo personal\" (dinero para gastar en lo que desee) "
+"puede usar una cuenta corriente en su lugar."
+
+#: dialogs/rc.cpp:644 wizards/newaccountwizard/rc.cpp:95
+msgid "Don't create payout transaction"
+msgstr "No crear asiento de finalización"
+
+#: wizards/newaccountwizard/rc.cpp:96
+msgid "Refinance existing loan"
+msgstr "Refinanciar préstamo existente"
+
+#: wizards/newaccountwizard/rc.cpp:97
+msgid ""
+"Check this if you are refinancing a loan that already exists in KMyMoney"
+msgstr ""
+"Marque esto si está refinanciando un préstamo que ya existe en KMyMoney"
+
+#: dialogs/rc.cpp:642 wizards/newaccountwizard/rc.cpp:98
+msgid "Asset Account"
+msgstr "Cuenta de Activos"
+
+#: dialogs/rc.cpp:2 wizards/newaccountwizard/rc.cpp:99
+msgid "Create"
+msgstr "Crear"
+
+#: wizards/newaccountwizard/rc.cpp:100
+msgid "Loan account"
+msgstr "Cuenta de préstamo"
+
+#: dialogs/rc.cpp:646 wizards/newaccountwizard/rc.cpp:101
+msgid "Date of payment"
+msgstr "Fecha del pago"
+
+#: wizards/newaccountwizard/rc.cpp:102
+msgid ""
+"KMyMoney creates a schedule for this payment and reminds you whenever a "
+"payment must be made. Please select the account to/from which payments will "
+"be made and the category the interest will be assigned to.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"KMyMoney creará un plan de pagos, y le avisará cuando deba hacer uno. Por "
+"favor, seleccione la cuenta desde/hacia la cual realizará los pagos y la "
+"categoría a la cual asignar los intereses.<p>\n"
+"Si escogió registrar todos los pagos, ya ha proporcionado esta fecha. Si "
+"escogió registrar solamente los pagos de este año, entonces la <b>Fecha de "
+"vencimiento del primer pago<b> es la fecha del primer pago realizado este "
+"año."
+
+#: dialogs/rc.cpp:613 wizards/newaccountwizard/rc.cpp:103
+msgid "Interest category"
+msgstr "Categoría de los intereses"
+
+#: wizards/newaccountwizard/rc.cpp:104
+msgid ""
+"The category the interest part of the payment will be assigned to. If you "
+"borrow money you usually have to pay interest, so this should be an expense "
+"category. If you lend the money, you receive the interest. In this case, "
+"select an income category here."
+msgstr ""
+"La categoría a la que se asignará el interés del pago. Si pide plata "
+"prestada usualmente debe pagar un interés, así que ésta debería ser una "
+"categoría de gastos. Si usted presta plata, usted recibe el interés. En ese "
+"caso, seleccione aquí una categoría de ingresos."
+
+#: wizards/newaccountwizard/rc.cpp:106
+msgid ""
+"Select the account from which you make your periodical payments or where you "
+"receive regular payments in case you lend the money. In most cases, this is "
+"a checking account."
+msgstr ""
+"Seleccione la cuenta desde la cual realiza sus pagos periódicos o donde "
+"recibe los pagos en caso que usted preste el dinero. En la mayoría de los "
+"caso, ésta es una cuenta corriente."
+
+#: dialogs/rc.cpp:519 wizards/newaccountwizard/rc.cpp:107
+msgid "First payment due on"
+msgstr "El primer pago vence en"
+
+#: wizards/newaccountwizard/rc.cpp:108
+msgid ""
+"For credit card accounts you can create a monthly schedule which will "
+"automatically remind you about the payment. Please fill in the details about "
+"this payment here."
+msgstr ""
+"Para las cuentas de tarjeta de crédito puede crear una planificación mensual "
+"que le recordará automáticamente del pago. Por favor, complete los detalles "
+"sobre el pago aquí."
+
+#: wizards/newaccountwizard/rc.cpp:109
+msgid "Yes, remind me when the payment is due"
+msgstr "Si, recuérdeme cuando venza el pago"
+
+#: wizards/newaccountwizard/rc.cpp:110
+msgid "Name of schedule"
+msgstr "Nombre de la Programación"
+
+#: dialogs/rc.cpp:151 dialogs/rc.cpp:218 dialogs/rc.cpp:219
+#: reports/listtable.cpp:199 views/kscheduledview.cpp:72 widgets/rc.cpp:113
+#: widgets/register.cpp:57 wizards/newaccountwizard/rc.cpp:111
+msgid "Payee"
+msgstr "Beneficiario"
+
+#: wizards/newaccountwizard/rc.cpp:112
+msgid "Estimated monthly payment"
+msgstr "Pago mensual estimado"
+
+#: wizards/newaccountwizard/rc.cpp:113
+msgid "Due date of next payment"
+msgstr "Fecha de vencimiento del próximo pago"
+
+#: wizards/newaccountwizard/rc.cpp:114
+msgid ""
+"Payment should be made\n"
+"from account"
+msgstr ""
+"El pago debe realizarse\n"
+"desde una cuenta"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:79
+msgid "KMyMoney New File Setup"
+msgstr "Configuración de Nuevo Archivo de KMyMoney"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:81
+msgid "Introduction"
+msgstr "Introducción"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:82
+msgid "Personal Data"
+msgstr "Datos Personales"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:83
+msgid "Select Currency"
+msgstr "Escoger Divisa"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:84
+msgid "Select Accounts"
+msgstr "Escoger Cuentas"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:85
+msgid "Set preferences"
+msgstr "Fijar preferencias"
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid ""
+"Unable to load data, because no contact has been associated with the owner "
+"of the standard addressbook."
+msgstr ""
+"No ha sido posible cargar los datos, debido a que no se ha asociado ningún "
+"contacto con el propietario de la libreta de direcciones estándar."
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid "Addressbook import"
+msgstr "Importar Libreta de Direcciones"
+
+#: wizards/newuserwizard/rc.cpp:1
+msgid ""
+"A typical KMyMoney user maintains a checking a account with some institution "
+"and uses it to receive money or pay bills. If this is not the case, please "
+"deselect the checkbox below and continue on the next page."
+msgstr ""
+"Un usuario típico de KMyMoney mantiene una cuenta corriente con alguna "
+"organización y la utiliza para recibir o pagar recibos. Si éste no es el "
+"caso, por favor, desmarque la casilla debajo y continúe a la siguiente "
+"página."
+
+#: wizards/newuserwizard/rc.cpp:2
+msgid "I have a checking account that I want to manage with KMyMoney"
+msgstr "Tengo una cuenta corriente que deseo gestionar con KMyMoney"
+
+#: wizards/newuserwizard/rc.cpp:3
+msgid "The name of the instititution that issued the account."
+msgstr "El nombre de la organización que emitió la cuenta."
+
+#: wizards/newuserwizard/rc.cpp:4
+msgid ""
+"Each institution has a routing number. Enter it here. If uncertain, leave "
+"the field blank. You can modify it later."
+msgstr ""
+"Cada organización tiene un número de enrutamiento. Ingréselo aquí. Si no "
+"está seguro, deje el campo en blanco. Puede modificarlo luego."
+
+#: wizards/newuserwizard/rc.cpp:5
+msgid "Name of the institution"
+msgstr "Nombre de la organización"
+
+#: wizards/newuserwizard/rc.cpp:6
+msgid "Routing number"
+msgstr "Número de Ruta"
+
+#: wizards/newuserwizard/rc.cpp:7
+msgid ""
+"In general the institution that issued the account also issued a number for "
+"it. Enter it here. If uncertain, you can modify this entry later."
+msgstr ""
+"Generalmente la organización que emitió la cuenta también emitió un número "
+"para ella. Ingréselo aquí. Si no está seguro, puede modificarlo luego."
+
+#: wizards/newuserwizard/rc.cpp:8
+msgid ""
+"Enter a descriptive name that will be used by KMyMoney to identify your "
+"checking account."
+msgstr ""
+"Ingrese un nombre descriptivo que será utilizado por KMyMoney para "
+"identificar su cuenta corriente."
+
+#: wizards/newuserwizard/rc.cpp:10
+msgid ""
+"Enter the date from when on you plan to keep track of the transactions in "
+"that account. This is usually the date of the last statement. If uncertain, "
+"leave as is."
+msgstr ""
+"Ingrese la fecha desde la que desea seguir las transacciones en esta cuenta. "
+"Usualmente es la fecha de su último resumen. Si no está seguro, déjela como "
+"está."
+
+#: wizards/newuserwizard/rc.cpp:11
+msgid "Number of the account"
+msgstr "Número de cuenta"
+
+#: wizards/newuserwizard/rc.cpp:12
+msgid "Name of the account"
+msgstr "Nombre de la cuenta"
+
+#: wizards/newuserwizard/rc.cpp:15
+msgid ""
+"Enter the opening balance of the account. This is usually the ending balance "
+"of the last statement. If uncertain, leave as is."
+msgstr ""
+"Ingrese el saldo inicila de la cuenta. Usualmente es el saldo final del "
+"último resumen. Si no está seguro, déjelo como está."
+
+#: wizards/newuserwizard/rc.cpp:16
+msgid ""
+"The fields below allow you to enter some information about your checking "
+"account. Once this wizard finishes, the account will be created for you "
+"within KMyMoney."
+msgstr ""
+"Los campos debajo le permiten ingresar información sobre su cuenta "
+"corriente. Una vez finalizado el asistente, la cuenta será creada en "
+"KMyMoney."
+
+#: wizards/newuserwizard/rc.cpp:17
+msgid ""
+"KMyMoney supports multiple currencies. Your reports will be based on a "
+"default curreny which you can select here. The default for new accounts is "
+"also the currency you select here."
+msgstr ""
+"KMyMoney soporte múltiples divisas. Sus informes estarán basados en una "
+"divisa base que puede seleccionar aquí. También es la opción predeterminada "
+"para las cuentas nuevas."
+
+#: wizards/newuserwizard/rc.cpp:18
+msgid ""
+"KMyMoney will store your financial data in a file on the disk. A standard "
+"filename within your KDE user environment will be the default. This is just "
+"provided for convenience and you can choose any other location here."
+msgstr ""
+"KMyMoney guardará su información en un archivo en disco. Un nombre de "
+"archivo estándar en su ambiente de KDE se sugiere. Esto es sólo por "
+"comodidad y usted puede elegir otra ubicación aquí."
+
+#: wizards/newuserwizard/rc.cpp:19
+msgid ""
+"Either the currently selected file exists or the selected directory does not "
+"exist. Please make sure, that\n"
+"\n"
+"<ul>\n"
+"<li>the selected directory exists and</li>\n"
+"<li>the filename is not currently used in this directory.</li>\n"
+"</ul>"
+msgstr ""
+"El archivo seleccionado ya existe o la carpeta seleccionada no existe. Por "
+"favor, asegurese que\n"
+"\n"
+"<ul>\n"
+"<li>la carpeta seleccionada existe y</li>\n"
+"<li>el nombre de archivo no está en esta carpeta.</li>\n"
+"</ul>"
+
+#: wizards/newuserwizard/rc.cpp:20
+msgid ""
+"This finishes the setup of your KMyMoney environment. You can now press the "
+"Finish button and start using KMyMoney to record your financial transactions."
+msgstr ""
+"Esto finaliza la configuración de su ambiente de KMyMoney. Puede presionar "
+"el botón Finalizar y comenzar a utilizar KMyMoney para registrar sus "
+"transacciones financieras."
+
+#: wizards/newuserwizard/rc.cpp:21
+msgid ""
+"Please enter some information about yourself.<br><br>\n"
+"\n"
+"This information will be seen and used only by you. The information is used "
+"to personalize KMyMoney, to encrypt your file, etc."
+msgstr ""
+"Use este diálogo para introducir su información personal.<br><br>\n"
+"\n"
+"Esta información será vista y utilizada sólo por usted. La información sirve "
+"para personalizar KMyMoney, codificar su archivo, etc."
+
+#: wizards/newuserwizard/rc.cpp:28
+msgid "Zip code"
+msgstr "Código postal"
+
+#: wizards/newuserwizard/rc.cpp:30
+msgid "Welcome to KMyMoney!"
+msgstr "Bienvenido a KMyMoney!"
+
+#: wizards/newuserwizard/rc.cpp:31
+msgid ""
+"You have started KMyMoney for the first time on this computer. Before this "
+"program can help you to manage your finances, it needs to collect some data "
+"from you.<p>\n"
+"\n"
+"On the next few pages you will be guided through the steps necessary to "
+"setup the program. This will happen only once."
+msgstr ""
+"Ha iniciado KMyMoney por primera en este ordenador. Antes que este programa "
+"pueda ayudarle a manejar sus finanzas, necesita recoger ciertos datos de "
+"usted.<p>\n"
+"\n"
+"En las siguientes páginas será guiado a través de los pasos necesarios para "
+"configurar el programa. Esto ocurrirá por única vez."
+
+#: wizards/newuserwizard/rc.cpp:32
+msgid ""
+"<p>KMyMoney can encrypt your datafile using GPG Encryption. GPG encryption "
+"is one of the most secure methods in the world for protecting data. All of "
+"your account numbers and other important financial information will be very "
+"secure.</p>"
+msgstr ""
+"<p>KMyMoney puede codificar su archivo de datos utilizando Codificación GPG. "
+"La codificación GPG es uno de los métodos más seguros en el mundo para "
+"proteger datos. Todos sus números de cuenta y otra información financiera "
+"importante estarán muy seguros.</p>"
+
+#: wizards/newuserwizard/rc.cpp:33
+msgid ""
+"If you would like to review or change any preference settings for KMyMoney "
+"at this time, you can do so here. If not just click <b>Next</b>."
+msgstr ""
+"Si desea revisar o cambiar alguna preferencia de KMyMoney en este momento, "
+"puede hacerlo aquí. Si no, presione <b>Siguiente</b>."
+
+#: wizards/newuserwizard/rc.cpp:34
+msgid "Configure preferences now"
+msgstr "Configurar preferencias ahora"
+
+#: wizards/newuserwizard/rc.cpp:35
+msgid ""
+"You can change the configuration options at any time using the configuration "
+"dialog. Just select the <b>Configure KMyMoney...</b> option in the "
+"<b>Settings</b> menu."
+msgstr ""
+"Puede cambiar las opciones de configuración en cualquier momento utillizando "
+"el diálogo de configuración. Simplemente escoja la opción <b>Configurar "
+"KMyMoney...</b> en el menú <b>Opciones</b>"
+
+#: dialogs/rc.cpp:83 dialogs/rc.cpp:411 dialogs/rc.cpp:435
+#: kmymoneyutils.cpp:92 kmymoneyutils.cpp:105 mymoney/mymoneyaccount.cpp:753
+#: mymoney/mymoneysecurity.cpp:160
+msgid "Stock"
+msgstr "Acción"
+
+#: dialogs/rc.cpp:84 dialogs/rc.cpp:412 dialogs/rc.cpp:436
+#: kmymoneyutils.cpp:107 mymoney/mymoneysecurity.cpp:163
+msgid "Mutual Fund"
+msgstr "Fondo de Inversión"
+
+#: dialogs/rc.cpp:85 dialogs/rc.cpp:413 dialogs/rc.cpp:437
+#: kmymoneyutils.cpp:109 mymoney/mymoneysecurity.cpp:166
+msgid "Bond"
+msgstr "Acción"
+
+#: mymoney/mymoneysecurity.cpp:172 reports/querytable.cpp:1150
+#: widgets/kmymoneyaccountselector.cpp:76
+msgid "None"
+msgstr "Nada"
+
+#: dialogs/rc.cpp:46 kmymoneyutils.cpp:402 mymoney/mymoneyaccount.cpp:759
+#: mymoney/mymoneyscheduled.cpp:1002 mymoney/mymoneysecurity.cpp:175
+#: views/kforecastview.cpp:174 widgets/register.cpp:54
+#: widgets/register.cpp:485 widgets/transaction.cpp:708
+#: widgets/transaction.cpp:1459
+msgid "Unknown"
+msgstr "Desconocida"
+
+#: mymoney/storage/mymoneystoragesql.cpp:191
+msgid ""
+"Database apparently in use\n"
+"Opened by %1 on %2 at %3.\n"
+"Open anyway?"
+msgstr ""
+"La base de datos está aparentemente en uso\n"
+"Abierto por %1 en %2 el %3.\n"
+"¿Abrir de todas maneras?"
+
+#: mymoney/storage/mymoneystoragesql.cpp:229
+msgid "Cannot currently create database for driver %1; please create manually"
+msgstr ""
+"No se puede crear la base de datos para el manejador %1 en este momento. Por "
+"favor, creela manualmente."
+
+#: mymoney/storage/mymoneystoragesql.cpp:244
+msgid "Error in create database %1; do you have create permissions?"
+msgstr "Error al crear base de datos %1. ¿Tiene permisos para crear?"
+
+#: converter/mymoneygncreader.cpp:1329
+#: mymoney/storage/mymoneystoragexml.cpp:166
+msgid "Loading transactions..."
+msgstr "Cargando asientos..."
+
+#: converter/mymoneygncreader.cpp:1190
+#: mymoney/storage/mymoneystoragexml.cpp:173
+msgid "Loading accounts..."
+msgstr "Cargando cuentas..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:180
+msgid "Loading securities..."
+msgstr "Cargando mercancias..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:187
+msgid "Loading reports..."
+msgstr "Cargando reportes..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:268
+msgid "Unknown XML tag %1 found in line %2"
+msgstr "Etiqueta XML %1 desconocida encontrada en el archivo %2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:274
+msgid "Exception while creating a %1 element: %2"
+msgstr "Excepción mientras creaba un elemento %1: %2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:513
+msgid "Loading file information..."
+msgstr "Cargando información del archivo..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:591
+msgid "Loading user information..."
+msgstr "Cargando información del usuario..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:655
+msgid "Saving accounts..."
+msgstr "Guardando cuentas..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:678
+msgid "Saving transactions..."
+msgstr "Guardando asientos..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:747
+msgid "Saving reports..."
+msgstr "Guardando reportes..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:762
+msgid "Saving budgets..."
+msgstr "Guardando presupuestos..."
+
+#: mymoney/storage/mymoneystoragedump.cpp:414
+msgid "not reconciled"
+msgstr "no reconciliada"
+
+#: mymoney/storage/mymoneystoragedump.cpp:417
+msgid "cleared"
+msgstr "librado"
+
+#: mymoney/storage/mymoneystoragedump.cpp:420
+msgid "reconciled"
+msgstr "reconciliada"
+
+#: mymoney/storage/mymoneystoragedump.cpp:423
+msgid "frozen"
+msgstr "congelada"
+
+#: mymoney/storage/mymoneystoragedump.cpp:426
+msgid "unknown"
+msgstr "desconocido"
+
+#: mymoney/mymoneyaccount.cpp:101
+msgid ""
+"Account %1 contains an opening balance. Please use a KMyMoney version >= 0.8 "
+"and < 0.9 to correct the problem."
+msgstr ""
+"La cuenta %1 contiene un saldo de apertura. Por favor, utilice una versión "
+"de KMyMoney >= 0.8 y < 0.9 para corregir el problema."
+
+#: mymoney/mymoneyaccount.cpp:597
+msgid ""
+"_: Brokerage (suffix for account names)\n"
+"Brokerage"
+msgstr "Corretaje"
+
+#: kmymoneyutils.cpp:74 mymoney/mymoneyaccount.cpp:726
+msgid "Certificate of Deposit"
+msgstr "Certificado de Depósito"
+
+#: kmymoneyutils.cpp:78 mymoney/mymoneyaccount.cpp:732
+msgid "Money Market"
+msgstr "Mercado Monetario"
+
+#: converter/mymoneytemplate.cpp:186 converter/mymoneytemplate.cpp:187
+#: dialogs/knewaccountdlg.cpp:1018 kmymoneyutils.cpp:86
+#: mymoney/mymoneyaccount.cpp:744 views/kaccountsview.cpp:360
+#: views/kbudgetview.cpp:372 views/kcategoriesview.cpp:178
+#: views/khomeview.cpp:1813 views/kmymoneyview.cpp:767
+#: widgets/kmymoneyaccountselector.cpp:68
+#: widgets/kmymoneyaccountselector.cpp:179
+#: widgets/kmymoneyaccountselector.cpp:370 widgets/register.cpp:828
+msgid "Income"
+msgstr "Ingreso"
+
+#: converter/mymoneytemplate.cpp:190 converter/mymoneytemplate.cpp:191
+#: dialogs/knewaccountdlg.cpp:1020 kmymoneyutils.cpp:88
+#: mymoney/mymoneyaccount.cpp:747 views/kaccountsview.cpp:364
+#: views/kbudgetview.cpp:378 views/kcategoriesview.cpp:182
+#: views/kmymoneyview.cpp:768 widgets/kmymoneyaccountselector.cpp:72
+#: widgets/kmymoneyaccountselector.cpp:180
+#: widgets/kmymoneyaccountselector.cpp:380 widgets/register.cpp:829
+msgid "Expense"
+msgstr "Gasto"
+
+#: kmymoneyutils.cpp:90 mymoney/mymoneyaccount.cpp:750
+msgid "Investment Loan"
+msgstr "Financiamiento de Inversión"
+
+#: mymoney/mymoneyfile.cpp:47
+msgid "Opening Balances"
+msgstr "Saldos de Apertura"
+
+#: mymoney/mymoneyfile.cpp:398
+msgid "Cannot remove transaction that references a closed account."
+msgstr ""
+"No se puede eliminar un asiento que hace referencia a una cuenta cerrada."
+
+#: mymoney/mymoneyfile.cpp:1414 mymoney/mymoneyfile.cpp:1433
+#: mymoney/mymoneyfile.cpp:1447 mymoney/mymoneyfile.cpp:1469
+msgid "* Problem with account '%1'"
+msgstr "* Problema con cuenta '%1'"
+
+#: mymoney/mymoneyfile.cpp:1419
+msgid " * Parent account '%1' belongs to a different group."
+msgstr " * Cuenta madre '%1' pertenece a un grupo diferente."
+
+#: mymoney/mymoneyfile.cpp:1420 mymoney/mymoneyfile.cpp:1450
+msgid " New parent account is the top level account '%1'."
+msgstr " Nueva cuenta madre es la cuenta de nivel superior '%1'."
+
+#: mymoney/mymoneyfile.cpp:1436
+msgid " * Parent account '%1' does not contain '%2' as sub-account."
+msgstr " * La cuenta madre '%1' no contiene '%2' como subcuenta."
+
+#: mymoney/mymoneyfile.cpp:1449
+msgid " * The parent with id %1 does not exist anymore."
+msgstr " * La madre con id %1 ya no existe."
+
+#: mymoney/mymoneyfile.cpp:1471
+msgid " * Child account with id %1 does not exist anymore."
+msgstr " * La cuenta hija con id %1 ya no existe."
+
+#: mymoney/mymoneyfile.cpp:1472
+msgid " The child account list will be reconstructed."
+msgstr " Se reconstruirá la lista de cuentas hijas."
+
+#: mymoney/mymoneyfile.cpp:1492
+msgid " * Unable to update account data in engine."
+msgstr " * No se pudo actualizar la cuenta en el motor."
+
+#: mymoney/mymoneyfile.cpp:1499
+msgid "* Reconstructing the child lists for"
+msgstr "* Reconstruyendo la lista de hijas para"
+
+#: mymoney/mymoneyfile.cpp:1536
+msgid " * Unable to update account data for account %1 in engine"
+msgstr " * No se puede actualizar los datos de la cuenta %1 en el motor"
+
+#: mymoney/mymoneyfile.cpp:1554
+msgid " * Payee %1 recreated with fixed id"
+msgstr " * Beneficiario %1 recreado con id fijo"
+
+#: mymoney/mymoneyfile.cpp:1583
+msgid " * Payee id updated in split of transaction '%1'."
+msgstr " * Beneficiario actualizado en la partida del asiento '%1'."
+
+#: mymoney/mymoneyfile.cpp:1596
+msgid " * shares set to value in split of transaction '%1'."
+msgstr " * Participaciones fijadas al valor en la partida del asiento '%1'."
+
+#: mymoney/mymoneyfile.cpp:1599
+msgid " * value set to shares in split of transaction '%1'."
+msgstr " * Valor fijado a las participaciones en la partida del asiento '%1'."
+
+#: mymoney/mymoneyfile.cpp:1605
+msgid ""
+" * Split %2 in transaction '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+" * La partida %2 en el asiento '%1' contiene una referencia a la cuenta "
+"inválida %3. Por favor, arreglar manualmente."
+
+#: mymoney/mymoneyfile.cpp:1616
+msgid " * action marked as interest in split of transaction '%1'."
+msgstr " * acción marcada como en la partida del asiento '%1'."
+
+#: mymoney/mymoneyfile.cpp:1643
+msgid " * Payee id updated in split of schedule '%1'."
+msgstr ""
+" *Id de Beneficiario actualizado en la partida de la programación '%1'."
+
+#: mymoney/mymoneyfile.cpp:1649
+msgid ""
+" * Split in scheduled transaction '%1' contained value != 0 and shares == 0."
+msgstr ""
+" * La partida en el asiento planificado '%1' contenía valor != 0 y "
+"participaciones == 0."
+
+#: mymoney/mymoneyfile.cpp:1650
+msgid " Shares set to value."
+msgstr " Participaciones fijadas al valor."
+
+#: mymoney/mymoneyfile.cpp:1658
+msgid " * Removed bankid from split in scheduled transaction '%1'."
+msgstr ""
+" * Se removió el id de banco de la partida en el asiento planificado '%1'."
+
+#: mymoney/mymoneyfile.cpp:1671
+msgid " * shares set to value in split in schedule '%1'."
+msgstr ""
+" * Participaciones fijadas al valor en la partida del asiento planificado '%"
+"1'."
+
+#: mymoney/mymoneyfile.cpp:1674
+msgid " * value set to shares in split in schedule '%1'."
+msgstr ""
+" * Valor fijado a las participaciones en la partida del asiento planificado "
+"'%1'."
+
+#: mymoney/mymoneyfile.cpp:1680
+msgid ""
+" * Split %2 in schedule '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+" * La partida %2 en el asiento planificado '%1' contiene una referencia a "
+"una cuenta inválida %3. Por favor, arreglar manualmente."
+
+#: mymoney/mymoneyfile.cpp:1706
+msgid " * Payee id updated in report '%1'."
+msgstr " * Id de beneficiario actualizado en el reporte '%1'."
+
+#: mymoney/mymoneyfile.cpp:1723
+msgid " * Payee '%1' removed."
+msgstr " * Beneficiario '%1' eliminado."
+
+#: mymoney/mymoneyfile.cpp:1730
+msgid "Finish! Data is consistent."
+msgstr "Fin! Los datos son consistentes."
+
+#: mymoney/mymoneyfile.cpp:1732
+msgid "Finish! %1 problem(s) corrected. %2 problem(s) still present."
+msgstr "Fin! %1 problema(s) corregido(s). Aún persiste(n) %2 problema(s)."
+
+#: mymoney/mymoneyscheduled.cpp:873 mymoney/mymoneyscheduled.cpp:918
+#: mymoney/mymoneyscheduled.cpp:969 mymoney/mymoneyscheduled.cpp:1265
+#: mymoney/mymoneyscheduletest.cpp:1336
+msgid "Once"
+msgstr "Una vez"
+
+#: mymoney/mymoneyscheduled.cpp:875 mymoney/mymoneyscheduled.cpp:924
+#: mymoney/mymoneyscheduled.cpp:1267 mymoney/mymoneyscheduletest.cpp:1337
+#: widgets/rc.cpp:72
+msgid "Daily"
+msgstr "Diariamente"
+
+#: mymoney/mymoneyscheduled.cpp:877 mymoney/mymoneyscheduled.cpp:931
+#: mymoney/mymoneyscheduled.cpp:1269 mymoney/mymoneyscheduletest.cpp:1338
+#: widgets/rc.cpp:73
+msgid "Weekly"
+msgstr "Semanalmente"
+
+#: mymoney/mymoneyscheduled.cpp:881 mymoney/mymoneyscheduled.cpp:932
+#: mymoney/mymoneyscheduled.cpp:1273 mymoney/mymoneyscheduletest.cpp:1339
+msgid "Every other week"
+msgstr "De cada dos semanas"
+
+#: mymoney/mymoneyscheduled.cpp:879 mymoney/mymoneyscheduled.cpp:1271
+#: mymoney/mymoneyscheduletest.cpp:1340
+msgid "Fortnightly"
+msgstr "Quincenal"
+
+#: mymoney/mymoneyscheduled.cpp:883 mymoney/mymoneyscheduled.cpp:941
+#: mymoney/mymoneyscheduled.cpp:1275 mymoney/mymoneyscheduletest.cpp:1341
+msgid "Every half month"
+msgstr "Cada medio mes"
+
+#: mymoney/mymoneyscheduled.cpp:887 mymoney/mymoneyscheduled.cpp:934
+#: mymoney/mymoneyscheduled.cpp:1279 mymoney/mymoneyscheduletest.cpp:1342
+msgid "Every four weeks"
+msgstr "Cada cuatro semanas"
+
+#: mymoney/mymoneyscheduled.cpp:893 mymoney/mymoneyscheduled.cpp:935
+#: mymoney/mymoneyscheduled.cpp:1285 mymoney/mymoneyscheduletest.cpp:1344
+msgid "Every eight weeks"
+msgstr "Cada ocho semanas"
+
+#: mymoney/mymoneyscheduled.cpp:895 mymoney/mymoneyscheduled.cpp:948
+#: mymoney/mymoneyscheduled.cpp:1287 mymoney/mymoneyscheduletest.cpp:1345
+msgid "Every two months"
+msgstr "Bimestral"
+
+#: mymoney/mymoneyscheduled.cpp:897 mymoney/mymoneyscheduled.cpp:949
+#: mymoney/mymoneyscheduled.cpp:1289 mymoney/mymoneyscheduletest.cpp:1346
+msgid "Every three months"
+msgstr "Trimestral"
+
+#: mymoney/mymoneyscheduled.cpp:899 mymoney/mymoneyscheduled.cpp:1291
+#: mymoney/mymoneyscheduletest.cpp:1347 widgets/rc.cpp:76
+msgid "Quarterly"
+msgstr "Trimestral"
+
+#: mymoney/mymoneyscheduled.cpp:901 mymoney/mymoneyscheduled.cpp:950
+#: mymoney/mymoneyscheduled.cpp:1293 mymoney/mymoneyscheduletest.cpp:1348
+msgid "Every four months"
+msgstr "Cuatrimestral"
+
+#: mymoney/mymoneyscheduled.cpp:903 mymoney/mymoneyscheduled.cpp:951
+#: mymoney/mymoneyscheduled.cpp:1295 mymoney/mymoneyscheduletest.cpp:1349
+msgid "Twice yearly"
+msgstr "Semestral"
+
+#: mymoney/mymoneyscheduled.cpp:905 mymoney/mymoneyscheduled.cpp:957
+#: mymoney/mymoneyscheduled.cpp:1297 mymoney/mymoneyscheduletest.cpp:1350
+#: widgets/rc.cpp:20 widgets/rc.cpp:77
+msgid "Yearly"
+msgstr "Anual"
+
+#: mymoney/mymoneyscheduled.cpp:907 mymoney/mymoneyscheduled.cpp:958
+#: mymoney/mymoneyscheduled.cpp:1299 mymoney/mymoneyscheduletest.cpp:1351
+msgid "Every other year"
+msgstr "Bienal"
+
+#: mymoney/mymoneyscheduled.cpp:870 mymoney/mymoneyscheduled.cpp:913
+#: mymoney/mymoneyscheduled.cpp:966
+msgid "Any"
+msgstr "Cualquier"
+
+#: mymoney/mymoneyscheduled.cpp:885 mymoney/mymoneyscheduled.cpp:933
+#: mymoney/mymoneyscheduled.cpp:1277
+msgid "Every three weeks"
+msgstr "Cada tres semanas"
+
+#: mymoney/mymoneyscheduled.cpp:889 mymoney/mymoneyscheduled.cpp:925
+#: mymoney/mymoneyscheduled.cpp:1281
+msgid "Every thirty days"
+msgstr "Cada treinta días"
+
+#: mymoney/mymoneyscheduled.cpp:971
+msgid "Day"
+msgstr "Día"
+
+#: mymoney/mymoneyscheduled.cpp:973 reports/listtable.cpp:206
+#: widgets/kmymoneycalendar.cpp:123 widgets/rc.cpp:97
+msgid "Week"
+msgstr "Semana"
+
+#: mymoney/mymoneyscheduled.cpp:975
+msgid "Half-month"
+msgstr "Medio mes"
+
+#: mymoney/mymoneyscheduled.cpp:977 reports/listtable.cpp:205
+#: widgets/kmymoneycalendar.cpp:124 widgets/rc.cpp:96
+msgid "Month"
+msgstr "Mes"
+
+#: dialogs/rc.cpp:400 mymoney/mymoneyscheduled.cpp:979 views/rc.cpp:14
+msgid "Year"
+msgstr "Año"
+
+#: mymoney/mymoneyscheduled.cpp:989
+msgid "Bill"
+msgstr "Recibo"
+
+#: dialogs/rc.cpp:107 dialogs/rc.cpp:162 dialogs/rc.cpp:249 dialogs/rc.cpp:754
+#: mymoney/mymoneyscheduled.cpp:992 widgets/kmymoneycombo.cpp:420
+#: widgets/register.cpp:571
+msgid "Deposit"
+msgstr "Depósito"
+
+#: mymoney/mymoneyscheduled.cpp:995 reports/querytable.cpp:594
+#: reports/querytable.cpp:696 widgets/kmymoneycombo.cpp:419
+msgid "Transfer"
+msgstr "Transferencia"
+
+#: mymoney/mymoneyscheduled.cpp:1035
+msgid "Any (Error)"
+msgstr "Cualquier (Error)"
+
+#: dialogs/rc.cpp:114 mymoney/mymoneyscheduled.cpp:1047
+msgid "Change the date to the previous Friday"
+msgstr "Cambiar la fecha al Viernes anterior"
+
+#: dialogs/rc.cpp:115 mymoney/mymoneyscheduled.cpp:1050
+msgid "Change the date to the next Monday"
+msgstr "Cambiar la fecha al Lunes siguiente"
+
+#: mymoney/mymoneyscheduled.cpp:1053
+msgid "Do Nothing"
+msgstr "No hacer nada"
+
+#: kmymoney2.cpp:312
+msgid "Open database..."
+msgstr "Abrir Base de Datos..."
+
+#: kmymoney2.cpp:313
+msgid "Save as database..."
+msgstr "Guardar como base de datos..."
+
+#: kmymoney2.cpp:314
+msgid "Backup..."
+msgstr "Copia de Respaldo..."
+
+#: kmymoney2.cpp:315 kmymoney2.cpp:321
+msgid "QIF..."
+msgstr "QIF..."
+
+#: kmymoney2.cpp:316
+msgid "Gnucash..."
+msgstr "Gnucash..."
+
+#: kmymoney2.cpp:317
+msgid "Statement file..."
+msgstr "Archivo de Extracto..."
+
+#: kmymoney2.cpp:319 kmymoney2.cpp:320
+msgid "Account Template..."
+msgstr "Plantilla de Cuenta..."
+
+#: kmymoney2.cpp:322
+msgid "Personal Data..."
+msgstr "Datos Personales..."
+
+#: kmymoney2.cpp:325
+msgid "Dump Memory"
+msgstr "Volcado de Memoria..."
+
+#: kmymoney2.cpp:327
+msgid "File-Information..."
+msgstr "Información del Archivo..."
+
+#: kmymoney2.cpp:332
+msgid "Find transaction..."
+msgstr "Buscar asiento..."
+
+#: kmymoney2.cpp:337
+msgid "Show Transaction Detail"
+msgstr "Mostrar Detalles del Asiento"
+
+#: kmymoney2.cpp:338 rc.cpp:60
+msgid "Hide reconciled transactions"
+msgstr "Ocultar las transacciones reconciliadas"
+
+#: kmymoney2.cpp:339 rc.cpp:57
+msgid "Hide unused categories"
+msgstr "Ocultar categorías no utilizadas"
+
+#: kmymoney2.cpp:340
+msgid "Show all accounts"
+msgstr "Mostrar todas las cuentas"
+
+#: kmymoney2.cpp:345
+msgid "New institution..."
+msgstr "Nueva organización..."
+
+#: kmymoney2.cpp:346
+msgid "Edit institution..."
+msgstr "Editar organización..."
+
+#: kmymoney2.cpp:347
+msgid "Delete institution..."
+msgstr "Borrar organización..."
+
+#: kmymoney2.cpp:352
+msgid "New account..."
+msgstr "Nueva Cuenta..."
+
+#: kmymoney2.cpp:354
+msgid "Open ledger"
+msgstr "Abrir libro mayor"
+
+#: kmymoney2.cpp:355
+msgid "Reconcile..."
+msgstr "Reconciliar..."
+
+#: kmymoney2.cpp:356
+msgid ""
+"_: Finish reconciliation\n"
+"Finish"
+msgstr "Finalizar"
+
+#: kmymoney2.cpp:357
+msgid ""
+"_: Postpone reconciliation\n"
+"Postpone"
+msgstr "Aplazar"
+
+#: kmymoney2.cpp:358
+msgid "Edit account..."
+msgstr "Editar cuenta..."
+
+#: kmymoney2.cpp:359
+msgid "Delete account..."
+msgstr "Borrar cuenta..."
+
+#: kmymoney2.cpp:360
+msgid "Close account"
+msgstr "Cerrar cuenta"
+
+#: kmymoney2.cpp:361
+msgid "Reopen account"
+msgstr "Reabrir cuenta"
+
+#: kmymoney2.cpp:362
+msgid "Transaction report"
+msgstr "Reporte de asientos"
+
+#: kmymoney2.cpp:364
+msgid "Show balance chart..."
+msgstr "Mostrar gráfico de saldo..."
+
+#: kmymoney2.cpp:366
+msgid "Map to online account"
+msgstr "Mapear a cuenta online"
+
+#: kmymoney2.cpp:367
+msgid "Unmap account"
+msgstr "Quitar mapeo de cuenta"
+
+#: dialogs/settings/rc.cpp:126 kmymoney2.cpp:368 views/kpayeesview.cpp:363
+#: widgets/rc.cpp:50
+msgid "Update"
+msgstr "Actualizar"
+
+#: kmymoney2.cpp:372
+msgid "Update account..."
+msgstr "Actualizar cuenta..."
+
+#: kmymoney2.cpp:373
+msgid "Update all accounts..."
+msgstr "Actualizar todas las cuentas..."
+
+#: kmymoney2.cpp:378
+msgid "New category..."
+msgstr "Nueva Categoría..."
+
+#: kmymoney2.cpp:379
+msgid "Edit category..."
+msgstr "Editar categoría..."
+
+#: kmymoney2.cpp:380
+msgid "Delete category..."
+msgstr "Borrar categoría..."
+
+#: kmymoney2.cpp:386
+msgid "QIF Profile Editor..."
+msgstr "Editor de perfiles QIF..."
+
+#: kmymoney2.cpp:387
+msgid "Securities..."
+msgstr "Valores Bursátiles..."
+
+#: kmymoney2.cpp:388
+msgid "Currencies..."
+msgstr "Divisas..."
+
+#: kmymoney2.cpp:389
+msgid "Prices..."
+msgstr "Precios..."
+
+#: kmymoney2.cpp:390
+msgid "Update Stock and Currency Prices..."
+msgstr "Actualizar precios de Acciones y Divisas..."
+
+#: kmymoney2.cpp:391
+msgid "Consistency Check"
+msgstr "Comprobación de Consistencia"
+
+#: kmymoney2.cpp:392
+msgid "Performance-Test"
+msgstr "Prueba de Desempeño"
+
+#: kmymoney2.cpp:393
+msgid "KCalc..."
+msgstr "KCalc..."
+
+#: kmymoney2.cpp:399
+msgid "Enable all messages"
+msgstr "Permitir todos los mensajes"
+
+#: kmymoney2.cpp:400
+msgid "KDE language settings..."
+msgstr "Configuración de lenguaje de KDE..."
+
+#: kmymoney2.cpp:405
+msgid "&Show tip of the day"
+msgstr "Consejo del &Día"
+
+#: kmymoney2.cpp:410
+msgid ""
+"_: New transaction button\n"
+"New"
+msgstr "Nuevo"
+
+#: kmymoney2.cpp:415
+msgid ""
+"_: Edit transaction button\n"
+"Edit"
+msgstr "Editar"
+
+#: kmymoney2.cpp:417
+msgid ""
+"_: Enter transaction\n"
+"Enter"
+msgstr "Ingresar"
+
+#: kmymoney2.cpp:420
+msgid ""
+"_: Edit split button\n"
+"Edit splits"
+msgstr "Editar partidas"
+
+#: kmymoney2.cpp:421
+msgid ""
+"_: Cancel transaction edit\n"
+"Cancel"
+msgstr "Cancelar"
+
+#: kmymoney2.cpp:422
+msgid ""
+"_: Delete transaction\n"
+"Delete"
+msgstr "Borrar"
+
+#: kmymoney2.cpp:423
+msgid ""
+"_: Duplicate transaction\n"
+"Duplicate"
+msgstr "Duplicar"
+
+#: kmymoney2.cpp:425 kmymoney2.cpp:4826 kmymoney2.cpp:5107
+msgid ""
+"_: Button text for match transaction\n"
+"Match"
+msgstr "Concordar"
+
+#: kmymoney2.cpp:426
+msgid ""
+"_: Accept 'imported' and 'matched' transaction\n"
+"Accept"
+msgstr "Acceptar"
+
+#: kmymoney2.cpp:428
+msgid ""
+"_: Toggle reconciliation flag\n"
+"Toggle"
+msgstr "Cambiar"
+
+#: kmymoney2.cpp:429
+msgid ""
+"_: Mark transaction cleared\n"
+"Cleared"
+msgstr "Librado"
+
+#: kmymoney2.cpp:430
+msgid ""
+"_: Mark transaction reconciled\n"
+"Reconciled"
+msgstr "Reconciliado"
+
+#: kmymoney2.cpp:431
+msgid ""
+"_: Mark transaction not reconciled\n"
+"Not reconciled"
+msgstr "No reconciliado"
+
+#: kmymoney2.cpp:432
+msgid ""
+"_: Select all transactions\n"
+"Select all"
+msgstr "Seleccionar todos"
+
+#: kmymoney2.cpp:434 kmymoney2.cpp:5497
+msgid "Goto account"
+msgstr "Ir a cuenta"
+
+#: kmymoney2.cpp:435 kmymoney2.cpp:5495
+msgid "Goto payee"
+msgstr "Ir a beneficiario/receptor"
+
+#: kmymoney2.cpp:436
+msgid "Create scheduled transaction..."
+msgstr "Crear asiento planificado..."
+
+#: kmymoney2.cpp:437
+msgid "Assign next number"
+msgstr "Asignar próximo número"
+
+#: kmymoney2.cpp:438
+msgid ""
+"_: Combine transactions\n"
+"Combine"
+msgstr "Combinar"
+
+#: kmymoney2.cpp:440
+msgid "New investment"
+msgstr "Nueva inversión"
+
+#: kmymoney2.cpp:441
+msgid "Edit investment..."
+msgstr "Editar inversión..."
+
+#: kmymoney2.cpp:442
+msgid "Delete investment..."
+msgstr "Borrar inversión..."
+
+#: kmymoney2.cpp:443
+msgid "Online price update..."
+msgstr "Actualizar precio online..."
+
+#: kmymoney2.cpp:444
+msgid "Manual price update..."
+msgstr "Actualizar precio manualmente..."
+
+#: kmymoney2.cpp:446
+msgid "New scheduled transaction..."
+msgstr "Nuevo asiento planificado..."
+
+#: kmymoney2.cpp:447
+msgid "Edit scheduled transaction..."
+msgstr "Editar asiento planificado..."
+
+#: kmymoney2.cpp:448
+msgid "Delete scheduled transaction..."
+msgstr "Borrar asiento planificado..."
+
+#: kmymoney2.cpp:449
+msgid "Duplicate scheduled transaction"
+msgstr "Duplicar asiento planificado"
+
+#: kmymoney2.cpp:450
+msgid "Enter next transaction..."
+msgstr "Ingresar siguiente asiento..."
+
+#: kmymoney2.cpp:451
+msgid "Skip next transaction..."
+msgstr "Saltear el siguiente asiento..."
+
+#: kmymoney2.cpp:453
+msgid "New payee"
+msgstr "Nuevo Beneficiario/Acreedor"
+
+#: kmymoney2.cpp:454
+msgid "Rename payee"
+msgstr "Renombrar Beneficiario"
+
+#: kmymoney2.cpp:455
+msgid "Delete payee"
+msgstr "Borrar beneficiario"
+
+#: kmymoney2.cpp:457
+msgid "New budget"
+msgstr "Nuevo presupuesto"
+
+#: kmymoney2.cpp:458
+msgid "Rename budget"
+msgstr "Renombrar presupuesto"
+
+#: kmymoney2.cpp:459
+msgid "Delete budget"
+msgstr "Borrar presupuesto"
+
+#: kmymoney2.cpp:460
+msgid "Copy budget"
+msgstr "Copiar presupuesto"
+
+#: kmymoney2.cpp:461
+msgid "Change budget year"
+msgstr "Cambiar año del presupuesto"
+
+#: kmymoney2.cpp:462
+msgid ""
+"_: Budget based on forecast\n"
+"Forecast"
+msgstr "Pronosticar"
+
+#: kmymoney2.cpp:467 kmymoney2.cpp:3990 kmymoney2.cpp:3993 kmymoney2.cpp:3999
+msgid "New currency"
+msgstr "Nueva divisa"
+
+#: kmymoney2.cpp:468 kmymoney2.cpp:4021 kmymoney2.cpp:4026
+msgid "Rename currency"
+msgstr "Renombrar divisa"
+
+#: kmymoney2.cpp:469 kmymoney2.cpp:4039
+msgid "Delete currency"
+msgstr "Borrar divisa"
+
+#: dialogs/rc.cpp:69 kmymoney2.cpp:470
+msgid "Select as base currency"
+msgstr "Escoger como divisa base"
+
+#: kmymoney2.cpp:481
+msgid "View back"
+msgstr "Vista atrás"
+
+#: kmymoney2.cpp:482
+msgid "View forward"
+msgstr "Vista adelante"
+
+#: kmymoney2.cpp:611
+msgid "KMyMoney file needs saving. Save ?"
+msgstr "El archivo de KMyMoney necesita ser guardado. ¿Guardar?"
+
+#: kmymoney2.cpp:757
+msgid "Creating new document..."
+msgstr "Creando nuevo documento..."
+
+#: kmymoney2.cpp:869 kmymoney2.cpp:884
+msgid "Open a file."
+msgstr "Abrir un archivo."
+
+#: kmymoney2.cpp:872
+msgid ""
+"%1|KMyMoney files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Archivos KMyMoney\n"
+"%2|Todos los archivos (*.*)"
+
+#: kmymoney2.cpp:873
+msgid "Open File..."
+msgstr "Abrir Archivo..."
+
+#: kmymoney2.cpp:925 kstartuplogo.cpp:100
+msgid "Loading file..."
+msgstr "Cargando archivo..."
+
+#: kmymoney2.cpp:986
+msgid ""
+"<b>%1</b> is either an invalid filename or the file does not exist. You can "
+"open another file or create a new one."
+msgstr ""
+"<b>%1</b> o no existe o tiene otro nombre. Puede abrir otro archivo o crear "
+"uno nuevo."
+
+#: kmymoney2.cpp:986
+msgid "File not found"
+msgstr "Archivo no encontrado"
+
+#: kmymoney2.cpp:989
+msgid "File <b>%1</b> is already opened in another instance of KMyMoney"
+msgstr "El archivo <b>%1</b> ya está abierto por otra instancia de KMyMoney"
+
+#: kmymoney2.cpp:989
+msgid "Duplicate open"
+msgstr "Abrir un Duplicado"
+
+#: kmymoney2.cpp:1001
+msgid "Saving file..."
+msgstr "Guardando archivo..."
+
+#: kmymoney2.cpp:1035 kmymoney2.cpp:1047 kmymoney2.cpp:1071
+#, c-format
+msgid "Additional encryption key(s) to be used: %1"
+msgstr "Clave(s) adicional(es) a utilizar: %1"
+
+#: kmymoney2.cpp:1056
+msgid "Saving file with a new filename..."
+msgstr "Guardando archivo con un nuevo nombre..."
+
+#: kmymoney2.cpp:1067
+msgid "Encryption key to be used"
+msgstr "Clave de codificación a utilizar"
+
+#: kmymoney2.cpp:1072
+msgid "Manage additional keys"
+msgstr "Gestionar claves adicionales"
+
+#: kmymoney2.cpp:1079
+msgid "No encryption"
+msgstr "Sin codificación"
+
+#: kmymoney2.cpp:1102
+msgid ""
+"_: KMyMoney (Filefilter)\n"
+"KMyMoney files"
+msgstr "Archivos de KMyMoney"
+
+#: kmymoney2.cpp:1103
+msgid ""
+"_: XML (Filefilter)\n"
+"XML files"
+msgstr "Archivos XML"
+
+#: kmymoney2.cpp:1104
+msgid ""
+"_: Anonymous (Filefilter)\n"
+"Anonymous files"
+msgstr "Archivos anónimos"
+
+#: kmymoney2.cpp:1105
+msgid "All files"
+msgstr "Todos los archivos"
+
+#: kmymoney2.cpp:1193
+msgid "Saving file to database..."
+msgstr "Guardando archivo a base de datos..."
+
+#: kmymoney2.cpp:1207
+msgid "Cannot save to current database."
+msgstr "No se puede guardar a la base de datos."
+
+#: kmymoney2.cpp:1225
+msgid "Closing window..."
+msgstr "Cerrando ventana..."
+
+#: kmymoney2.cpp:1228 kmymoney2.cpp:1249
+msgid "The file has been changed, save it ?"
+msgstr "El archivo fue modificado, ¿desea guardarlo?"
+
+#: kmymoney2.cpp:1339 kmymoney2.cpp:1352
+msgid "Ready."
+msgstr "Listo."
+
+#: kmymoney2.cpp:1397 kmymoney2.cpp:1433
+msgid "No KMyMoneyFile open"
+msgstr "No hay abierto ningún archivo de KMyMoney"
+
+#: kmymoney2.cpp:1401
+msgid "Viewing personal data..."
+msgstr "Visualizando datos personales..."
+
+#: kmymoney2.cpp:1408
+msgid "Edit Personal Data"
+msgstr "Editar Datos Personales"
+
+#: kmymoney2.cpp:1424
+#, c-format
+msgid "Unable to store user information: %1"
+msgstr "No fue posible guardar la información del usuario: %1"
+
+#: kmymoney2.cpp:1447
+msgid "Importing account templates."
+msgstr "Importando plantillas de cuentas."
+
+#: kmymoney2.cpp:1462
+msgid "Unable to import template(s): %1, thrown in %2:%3"
+msgstr "No se pudo importar la(s) plantilla(s): %1, arrojado en %2:%3"
+
+#: kmymoney2.cpp:1471
+msgid "Exporting account templates."
+msgstr "Exportando plantillas de cuentas."
+
+#: kmymoney2.cpp:1474
+msgid ""
+"*.kmt|KMyMoney template files\n"
+"*.*|All files"
+msgstr ""
+"*.kmt|Plantillas de KMyMoney\n"
+"*.*|Todos los archivos"
+
+#: kmymoney2.cpp:1475
+msgid "Save as..."
+msgstr "Guardar como..."
+
+#: kmymoney2.cpp:1517
+msgid "Importing file..."
+msgstr "Importando archivo..."
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "The statements have been processed with the following results:"
+msgstr "Se procesaron los extractos con los siguientes resultados:"
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:1754 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "Statement stats"
+msgstr "Estadísticas del extracto"
+
+#: kmymoney2.cpp:1602
+msgid ""
+"You cannot import GnuCash data into an existing file. Do you wish to save "
+"this file?"
+msgstr ""
+"No puede importar datos de GnuCash en un fichero ya existente. Desea guardar "
+"este fichero?"
+
+#: kmymoney2.cpp:1615
+msgid "Importing a Gnucash file."
+msgstr "Importando archivo de Gnucash."
+
+#: kmymoney2.cpp:1618
+msgid ""
+"%1|Gnucash files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Archivos de Gnucash\n"
+"%2|Todos los archivos (*.*)"
+
+#: kmymoney2.cpp:1619
+msgid "Import Gnucash file..."
+msgstr "Importar archivo de Gnucash..."
+
+#: kmymoney2.cpp:1658
+msgid "Importing an XML Statement."
+msgstr ",.Importando un Extracto XML"
+
+#: kmymoney2.cpp:1661
+msgid ""
+"%1|XML files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Archivos XML\n"
+"%2|Todos los archivos (*.*)"
+
+#: kmymoney2.cpp:1662
+msgid "Import XML Statement..."
+msgstr "Importar Extracto XML..."
+
+#: kmymoney2.cpp:1718
+msgid "Error importing %1: This file is not a valid KMM statement file."
+msgstr "Error importando %1: Este archivo no es un extracto de KMM válido."
+
+#: kmymoney2.cpp:1718
+msgid "Invalid Statement"
+msgstr "Extracto no válido"
+
+#: kmymoney2.cpp:1754
+msgid "The statement has been processed with the following results:"
+msgstr "El extracto se procesó con los siguientes resultados:"
+
+#: kmymoney2.cpp:1763
+msgid "Exporting file..."
+msgstr "Exportando archivo..."
+
+#: kmymoney2.cpp:1786
+msgid "The file <b>%1</b> already exists. Do you really want to override it?"
+msgstr "El archivo <b>%1</b> ya existe. ¿Desea sobreescribirlo?"
+
+#: kmymoney2.cpp:1786
+msgid "File already exists"
+msgstr "El archivo ya existe"
+
+#: dialogs/rc.cpp:347 dialogs/rc.cpp:649 dialogs/rc.cpp:798 kmymoney2.cpp:1815
+msgid "General"
+msgstr "General"
+
+#: kmymoney2.cpp:1816
+msgid "Register"
+msgstr "Registro"
+
+#: kmymoney2.cpp:1817 views/khomeview.cpp:88 views/kmymoneyview.cpp:136
+msgid "Home"
+msgstr "Inicio"
+
+#: kmymoney2.cpp:1818 views/kmymoneyview.cpp:176
+msgid ""
+"Scheduled\n"
+"transactions"
+msgstr ""
+"Asientos \n"
+"Planificados"
+
+#: kmymoney2.cpp:1819
+msgid "Encryption"
+msgstr "Cifrado"
+
+#: kmymoney2.cpp:1820
+msgid "Colors"
+msgstr "Colores"
+
+#: dialogs/rc.cpp:344 dialogs/settings/rc.cpp:107 kmymoney2.cpp:1822
+#: widgets/rc.cpp:33
+msgid "Online Quotes"
+msgstr "Cotizaciones Online"
+
+#: kmymoney2.cpp:1823 reports/pivottable.cpp:2426 views/kmymoneyview.cpp:251
+#: views/kmymoneyview.cpp:253 views/kreportsview.cpp:1415 views/rc.cpp:41
+msgid "Forecast"
+msgstr "Pronóstico"
+
+#: kmymoney2.cpp:1824
+msgid "Plugins"
+msgstr "Plugins"
+
+#: kmymoney2.cpp:1893
+msgid ""
+"The file must be saved first before it can be backed up. Do you want to "
+"continue?"
+msgstr ""
+"El archivo debe ser guardado antes de poder hacerle una copia de seguridad. "
+"¿Desea continuar?"
+
+#: kmymoney2.cpp:1910
+msgid ""
+"The current implementation of the backup functionality only supports local "
+"files as source files! Your current source file is '%1'."
+msgstr ""
+"¡La implementación actual de la función de seguridad solo permite usar "
+"archivos locales como origenes! Su archivo origen actual es \"%1\"."
+
+#: kmymoney2.cpp:1913
+msgid "Local files only"
+msgstr "Solo archivos locales"
+
+#: kmymoney2.cpp:1928
+#, c-format
+msgid "Mounting %1"
+msgstr "Montando %1"
+
+#: kmymoney2.cpp:1967
+msgid "Backup file for today exists on that device. Replace ?"
+msgstr ""
+"Ya existe una copia de seguridad de hoy en ese dispositivo. ¿Reemplazar?"
+
+#: dialogs/rc.cpp:7 kmymoney2.cpp:1967 kmymoney2.cpp:1994 kmymoney2.cpp:2024
+#: kmymoney2.cpp:2032 kmymoney2.cpp:2057 kmymoney2.cpp:2059
+msgid "Backup"
+msgstr "Copia de seguridad"
+
+#: kmymoney2.cpp:1967
+msgid "&Replace"
+msgstr "&Reemplazar"
+
+#: kmymoney2.cpp:1972 kmymoney2.cpp:1997 kmymoney2.cpp:2016 kmymoney2.cpp:2035
+#, c-format
+msgid "Unmounting %1"
+msgstr "Desmontando %1"
+
+#: kmymoney2.cpp:1987
+#, c-format
+msgid "Writing %1"
+msgstr "Escribiendo %1"
+
+#: kmymoney2.cpp:1994
+msgid "Error mounting device"
+msgstr "Error montando dispositivo"
+
+#: converter/mymoneygncreader.cpp:1995 kmymoney2.cpp:2023 kmymoney2.cpp:2055
+msgid "Done"
+msgstr "Hecho"
+
+#: kmymoney2.cpp:2024 kmymoney2.cpp:2057
+msgid "File successfully backed up"
+msgstr "El archivo fue respaldado con éxito"
+
+#: kmymoney2.cpp:2032
+msgid "Error copying file to device"
+msgstr "Error al copiar el archivo en el dispositivo"
+
+#: kmymoney2.cpp:2059
+msgid "Error unmounting device"
+msgstr "Error desmontando dispositivo"
+
+#: kmymoney2.cpp:2143
+#, c-format
+msgid "Cannot add institution: %1"
+msgstr "No se pudo añadir la organización: %1"
+
+#: kmymoney2.cpp:2185
+#, c-format
+msgid "Unable to store institution: %1"
+msgstr "No fue posible guardar la organización: %1"
+
+#: kmymoney2.cpp:2192
+#, c-format
+msgid "Unable to edit institution: %1"
+msgstr "No fue posible editar la organización: %1"
+
+#: kmymoney2.cpp:2203
+msgid "Do you really want to delete institution <b>%1</b> ?"
+msgstr "¿Quiere realmente borrar la organización: <b>%1</b>?"
+
+#: kmymoney2.cpp:2211 kmymoney2.cpp:2215
+#, c-format
+msgid "Unable to delete institution: %1"
+msgstr "No fue posible borrar la organización: %1"
+
+#: kmymoney2.cpp:2268
+#, c-format
+msgid "Unable to find account: %1"
+msgstr "No fue posible encontrar la cuenta: %1"
+
+#: kmymoney2.cpp:2309
+msgid ""
+"This account is a liability and if the opening balance represents money "
+"owed, then it should be negative. Negate the amount?\n"
+"\n"
+"Please click Yes to change the opening balance to %1,\n"
+"Please click No to leave the amount as %2,\n"
+"Please click Cancel to abort the account creation."
+msgstr ""
+"Esta cuenta es un pasivo y si el saldo de apertura representa dinero debido, "
+"deberá ser negativo. ¿Cambiar el signo del saldo?\n"
+"\n"
+"Pulse Si para cambiar el saldo de apertura a %1,\n"
+"Pulse No para dejar la cantidad como está, %2,\n"
+"Pulse Cancelar para abortar la creación de la cuenta."
+
+#: kmymoney2.cpp:2345 kmymoney2.cpp:2346
+msgid "Loan payout"
+msgstr "Pagos de Préstamos"
+
+#: dialogs/knewloanwizard.cpp:892 kmymoney2.cpp:2374
+#, c-format
+msgid "Unable to add account: %1"
+msgstr "No fue posible agregar la cuenta: %1"
+
+#: kmymoney2.cpp:2392
+msgid ""
+"The category <b>%1</b> currently does not exist. Do you want to create it?"
+"<p><i>The parent account will default to <b>%2</b> but can be changed in the "
+"following dialog</i>."
+msgstr ""
+"La categoría <b>%1</b> no existe actualmente. ¿Desea crearla? <p><i>La "
+"cuenta madre será <b>%2</b>, pero puede cambiarla en el siguiente diálogo</"
+"i>."
+
+#: kmymoney2.cpp:2392
+msgid "Create category"
+msgstr "Crear categoría"
+
+#: kmymoney2.cpp:2429
+msgid "Create a new Category"
+msgstr "Crear una nueva Categoría"
+
+#: kmymoney2.cpp:2505
+#, c-format
+msgid "Unable to create account: %1"
+msgstr "No fue posible crear la cuenta: %1"
+
+#: kmymoney2.cpp:2516
+msgid ""
+"The security <b>%1</b> currently does not exist as sub-account of <b>%2</b>. "
+"Do you want to create it?"
+msgstr ""
+"El valor bursátil <b>%1</b> no existe como subcuenta de <b>%2</b>. ¿Desea "
+"crearlo?"
+
+#: kmymoney2.cpp:2517
+msgid "Create security"
+msgstr "Crear valor bursátil"
+
+#: kmymoney2.cpp:2551
+msgid "Do you really want to delete the investment <b>%1</b>?"
+msgstr "¿Desea realmente borrar la inversión <b>%1</b>?"
+
+#: kmymoney2.cpp:2551
+msgid "Delete investment"
+msgstr "Borrar inversión"
+
+#: kmymoney2.cpp:2558
+#, c-format
+msgid "Unable to delete investment: %1"
+msgstr "No fue posible borrar la inversión: %1"
+
+#: kmymoney2.cpp:2640 kmymoney2.cpp:2646
+msgid "Unable to add scheduled transaction: "
+msgstr "Imposible agregar asiento planificado:"
+
+#: kmymoney2.cpp:2722
+msgid "Adjusting transactions..."
+msgstr "Ajustando asientos..."
+
+#: kmymoney2.cpp:2747
+msgid "Adjusting scheduled transactions..."
+msgstr "Ajustando asientos planificados..."
+
+#: kmymoney2.cpp:2765
+msgid "Adjusting budgets..."
+msgstr "Ajustando presupuestos..."
+
+#: kmymoney2.cpp:2783
+msgid ""
+"Unable to exchange category <b>%1</b> with category <b>%2</b>. Reason: %3"
+msgstr ""
+"No se puede intercambiar categoría <b>%1</b> con categoría <b>%2</b>. Causa: "
+"%3"
+
+#: kmymoney2.cpp:2804
+msgid "Do you really want to delete category <b>%1</b>?"
+msgstr "¿Está seguro de querer borrar la categoría <b>%1</b>?"
+
+#: kmymoney2.cpp:2811
+msgid "Unable to delete category <b>%1</b>. Cause: %2"
+msgstr "No fue posible eliminar la categoría: <b>%1</b>. Causa: %2"
+
+#: kmymoney2.cpp:2823
+msgid ""
+"Do you want to delete category <b>%1</b> with all its sub-categories or only "
+"the category itself? If you only delete the category itself, all its sub-"
+"categories will be made sub-categories of <b>%2</b>."
+msgstr ""
+"¿Desea borrar la categoría <b>%1</b> con todas sus subcategorías o sólo la "
+"categoría misma? Si sólo borra la categoría misma, todas sus subcategorías "
+"serán convertidas en subcategorías de <b>%2</b>."
+
+#: kmymoney2.cpp:2827
+msgid "Delete all"
+msgstr "Borrar todo"
+
+#: kmymoney2.cpp:2828
+msgid "Just the category"
+msgstr "Sólo la categoría"
+
+#: kmymoney2.cpp:2858
+msgid ""
+"Some sub-categories of category <b>%1</b> cannot be deleted, because they "
+"are still used. They will be made sub-categories of <b>%2</b>. Proceed?"
+msgstr ""
+"Algunas subcategorías de la categoría <b>%1</b> no pueden ser borradas, "
+"porque aún están siendo utilizados. Serán convertidas en subcategorías de <b>"
+"%2</b>. ¿Proceder?"
+
+#: kmymoney2.cpp:2878
+msgid "Unable to delete a sub-category of category <b>%1</b>. Reason: %2"
+msgstr ""
+"No se puede borrar una subcategoría de la categoría <b>%1</b>. Causa: %2"
+
+#: kmymoney2.cpp:2889
+msgid "Do you really want to delete account <b>%1</b>?"
+msgstr "¿Está seguro de querer borrar la cuenta <b>%1</b>?"
+
+#: kmymoney2.cpp:2901
+msgid "Unable to delete account '%1'. Cause: %2"
+msgstr "No fue posible borrar la cuenta '%1'. Razón: %2"
+
+#: kmymoney2.cpp:2917
+msgid "Edit account '%1'"
+msgstr "Editar cuenta '%1'"
+
+#: kmymoney2.cpp:2922
+msgid "Edit category '%1'"
+msgstr "Editar categoría '%1'"
+
+#: kmymoney2.cpp:3008
+msgid "Unable to modify account '%1'. Cause: %2"
+msgstr "No fue posible modificar la cuenta '%1'. Razón: %2"
+
+#: kmymoney2.cpp:3065
+msgid ""
+"KMyMoney has detected some overdue scheduled transactions for this account. "
+"Do you want to enter those scheduled transactions now?"
+msgstr ""
+"KMyMoney ha detectado asientos planificados vencidos para esta cuenta. "
+"¿Desea ingresar esos asientos ahora?"
+
+#: kmymoney2.cpp:3065
+msgid "Scheduled transactions found"
+msgstr "Asientos planificados encontrados"
+
+#: kmymoney2.cpp:3163
+msgid ""
+"You are about to finish the reconciliation of this account with a difference "
+"between your bank statement and the transactions marked as cleared.\n"
+"Are you sure you want to finish the reconciliation ?"
+msgstr ""
+"Está por finalizar la reconciliación de esta cuenta con una diferencia entre "
+"su extracto bancario y los asientos marcados como librados.\n"
+"¿Está seguro que desea finalizar la reconciliación?"
+
+#: kmymoney2.cpp:3165
+msgid "Confirm end of reconciliation"
+msgstr "Confirmar el fin de la reconciliación"
+
+#: kmymoney2.cpp:3339
+msgid ""
+"You have closed this account. It remains in the system because you have "
+"transactions which still refer to it, but is not shown in the views. You can "
+"make it visible again by going to the View menu and selecting <b>Show all "
+"accounts</b> or by unselecting the <b>Don't show closed accounts</b> setting."
+msgstr ""
+"Ha cerrado esta cuenta. Permanece en el sistema, porque hay asientos que "
+"todavía hacen referencia a esta cuenta, pero no se muestra en las vistas. "
+"Puede hacerla visible nuevamente yendo al menú Vista y seleccionando "
+"<b>Mostrar todas las cuentas</b> o deseleccionando la opción <b>Ocultar "
+"cuentas cerradas</b>."
+
+#: kmymoney2.cpp:3379
+msgid "<b>%1</b> cannot be moved to institution <b>%2</b>. Reason: %3"
+msgstr "<b>%1</b> no puede moverse a la organización <b>%2</b>. Razón: %3"
+
+#: kmymoney2.cpp:3393
+msgid "<b>%1</b> cannot be moved to <b>%2</b>. Reason: %3"
+msgstr "<b>%1</b> no puede moverse a <b>%2</b>. Razón: %3"
+
+#: kmymoney2.cpp:3408
+msgid "%1 YTD Account Transactions"
+msgstr "%1 Asientos de cuenta de este año"
+
+#: dialogs/kbalancechartdlg.cpp:71 kmymoney2.cpp:3409
+#: views/kforecastview.cpp:650 views/khomeview.cpp:276
+#: views/khomeview.cpp:1384 views/kreportsview.cpp:619
+msgid "Generated Report"
+msgstr "Informe Generado"
+
+#: dialogs/rc.cpp:324 dialogs/settings/rc.cpp:80 kmymoney2.cpp:3411
+#: views/kreportsview.cpp:1062 views/rc.cpp:58 views/rc.cpp:59
+msgid "Transactions"
+msgstr "Transacciones"
+
+#: kmymoney2.cpp:3449
+#, c-format
+msgid "Unable to add scheduled transaction: %1"
+msgstr "No fue posible añadir el asiento planificado: %1"
+
+#: kmymoney2.cpp:3449
+msgid "Add scheduled transaction"
+msgstr "Agregar asiento planificado"
+
+#: kmymoney2.cpp:3489
+msgid ""
+"You have entered a scheduled transaction date of <b>%1</b>. Because the "
+"scheduled transaction was last paid on <b>%2</b>, KMyMoney will "
+"automatically adjust the scheduled transaction date to the next date unless "
+"the last payment date is reset. Do you want to reset the last payment date?"
+msgstr ""
+"Usted ha ingresado una fecha de programación <b>%1</b>. Debido a que el "
+"asiento fue ingresado por última vez el <b>%2</b>, KMyMoney ajustará "
+"automáticamente la fecha de programación a la próxima fecha, a menos que se "
+"fije una nueva fecha de último pago. ¿Desea fijar una nueva fecha de último "
+"pago?"
+
+#: kmymoney2.cpp:3489
+msgid "Reset Last Payment Date"
+msgstr "Reiniciar última fecha de pago"
+
+#: kmymoney2.cpp:3499 kmymoney2.cpp:3519 kmymoney2.cpp:3531
+msgid "Unable to modify scheduled transaction '%1'"
+msgstr "No fue posible modificar el asiento planificado '%1'"
+
+#: kmymoney2.cpp:3543
+msgid "Are you sure you want to delete the scheduled transaction <b>%1</b>?"
+msgstr "¿Está seguro que desea borrar el asiento planificado <b>%1</b>?"
+
+#: kmymoney2.cpp:3546
+msgid ""
+"In case of loan payments it is currently not possible to recreate the "
+"scheduled transaction."
+msgstr ""
+"En el caso de pago de préstamos, actualmente no es posible recrear los "
+"asientos planificados."
+
+#: kmymoney2.cpp:3555
+msgid "Unable to remove scheduled transaction '%1'"
+msgstr "No fue posible eliminar el asiento planificado '%1'"
+
+#: kmymoney2.cpp:3569
+#, c-format
+msgid ""
+"_: Copy of scheduled transaction name\n"
+"Copy of %1"
+msgstr "Copia de %1"
+
+#: kmymoney2.cpp:3581 kmymoney2.cpp:4352
+msgid "Unable to duplicate transaction(s): %1, thrown in %2:%3"
+msgstr "No se pudo duplicar el/los asiento(s): %1, arrojado en %2:%3"
+
+#: kmymoney2.cpp:3595
+msgid ""
+"Do you really want to skip the <b>%1</b> transaction scheduled for <b>%2</b>?"
+msgstr ""
+"¿Desea realmente saltear la ocurrencia de la planificación <b>%2</b> en <b>%"
+"1 </b>?"
+
+#: kmymoney2.cpp:3605
+msgid "Unable to skip scheduled transaction <b>%1</b>."
+msgstr ""
+"No fue posible saltear la ocurrencia del asiento planificado <b>%1</b>."
+
+#: kmymoney2.cpp:3618
+msgid "Unknown scheduled transaction '%1'"
+msgstr "Planificación desconocida '%1'"
+
+#: kmymoney2.cpp:3673
+msgid ""
+"Are you sure you wish to stop this scheduled transaction from being entered "
+"into the register?\n"
+"\n"
+"KMyMoney will prompt you again next time it starts unless you manually enter "
+"it later."
+msgstr ""
+"¿Está seguro que no quiere asentar este asiento programado en el registro?\n"
+"\n"
+"KMyMoney le preguntará de nuevo la próxima vez que inicie a menos que lo "
+"asiente manualmente más tarde."
+
+#: kmymoney2.cpp:3725 kmymoney2.cpp:3732
+msgid "Unable to enter scheduled transaction '%1'"
+msgstr "No fue posible ingresar asiento planificado '%1'"
+
+#: kmymoney2.cpp:3743 kmymoney2.cpp:3783
+msgid "New Payee"
+msgstr "Nuevo Beneficiario"
+
+#: kmymoney2.cpp:3745
+msgid "Do you want to add <b>%1</b> as payer/receiver ?"
+msgstr "¿Desea añadir <b>%1</b> como un beneficiario/receptor? "
+
+#: converter/mymoneystatementreader.cpp:892 kmymoney2.cpp:3747
+msgid "New payee/receiver"
+msgstr "Nuevo beneficiario/receptor"
+
+#: kmymoney2.cpp:3773
+msgid "Unable to add payee"
+msgstr "No fue posible añadir un beneficiario"
+
+#: kmymoney2.cpp:3826
+msgid "Do you really want to remove the payee <b>%1</b>?"
+msgstr "¿Desea realmente eliminar el beneficiario <b>%1</b>?"
+
+#: kmymoney2.cpp:3828
+msgid "Do you really want to remove all selected payees?"
+msgstr "¿Desea realmente eliminar todos los beneficiarios seleccionados?"
+
+#: kmymoney2.cpp:3830
+msgid "Remove Payee"
+msgstr "Eliminar Beneficiario"
+
+#: kmymoney2.cpp:3870
+msgid ""
+"At least one transaction/scheduled transaction is still referenced by a "
+"payee. Currently you have all payees selected. However, at least one payee "
+"must remain so that the transaction/scheduled transaction can be reassigned."
+msgstr ""
+"Al menos un asiento o planificación todavía hace referencia a este pagador. "
+"Actualmente tiene seleccionados todos los pagadores. Sin embargo, al menos "
+"un pagador debe permanecer para que los asientos/programaciones puedan ser "
+"reasignados."
+
+#: kmymoney2.cpp:3925
+msgid "Unable to reassign payee of transaction/split"
+msgstr "No fue posible reasignar el beneficiario del asiento/partida"
+
+#: converter/mymoneyqifreader.cpp:534 converter/mymoneystatementreader.cpp:959
+#: kmymoney2.cpp:3926 kmymoney2.cpp:3983 views/kbudgetview.cpp:636
+#: views/kbudgetview.cpp:737 views/kbudgetview.cpp:751
+#: views/kpayeesview.cpp:519 views/kpayeesview.cpp:870
+msgid "thrown in"
+msgstr "introducido"
+
+#: kmymoney2.cpp:3982
+msgid "Unable to remove payee(s)"
+msgstr "no fue posible eliminar el/los beneficiario(s)"
+
+#: kmymoney2.cpp:3990
+msgid "Enter ISO 4217 code for the new currency"
+msgstr "Indique el código ISO 4217 de la nueva divisa"
+
+#: kmymoney2.cpp:3999
+#, c-format
+msgid "Cannot create new currency. %1"
+msgstr "No ha sido posible crear la nueva divisa. %1"
+
+#: kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, c-format
+msgid "Cannot rename currency. %1"
+msgstr "No ha sido posible renombrar la divisa. %1"
+
+#: kmymoney2.cpp:4039
+msgid "Cannot delete currency %1. %2"
+msgstr "No fue posible borrar la divisa %1. %2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Cannot set %1 as base currency: %2"
+msgstr "No se puede elegir %1 como divisa base: %2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Set base currency"
+msgstr "Escoger divisa base"
+
+#: kmymoney2.cpp:4065
+#, c-format
+msgid "Budget %1"
+msgstr "Presupuesto %1"
+
+#: kmymoney2.cpp:4075
+msgid "Budget %1 (%2)"
+msgstr "Presupuesto %1 (%2)"
+
+#: kmymoney2.cpp:4090 kmymoney2.cpp:4139
+msgid "Unable to add budget: %1, thrown in %2:%3"
+msgstr "No se pudo agregar presupuesto: %1, arrojado en %2:%3"
+
+#: kmymoney2.cpp:4105
+msgid "Do you really want to remove the budget <b>%1</b>?"
+msgstr "¿Desea realmente eliminar el presupuesto <b>%1</b>?"
+
+#: kmymoney2.cpp:4107
+msgid "Do you really want to remove all selected budgets?"
+msgstr "¿Desea realmente borrar todos los presupuestos seleccionados?"
+
+#: kmymoney2.cpp:4109
+msgid "Remove Budget"
+msgstr "Eliminar Presupuesto"
+
+#: kmymoney2.cpp:4122
+msgid "Unable to remove budget: %1, thrown in %2:%3"
+msgstr "No ha sido posible eliminar el presupuesto: %1, arrojado en %2:%3"
+
+#: kmymoney2.cpp:4134 views/kreportsview.cpp:659
+#, c-format
+msgid "Copy of %1"
+msgstr "Copia de %1"
+
+#: kmymoney2.cpp:4164
+msgid "Select year"
+msgstr "Escoger año"
+
+#: kmymoney2.cpp:4164
+msgid "Budget year"
+msgstr "Año de presupuesto"
+
+#: kmymoney2.cpp:4176 kmymoney2.cpp:4214 kmymoney2.cpp:4274
+msgid "Unable to modify budget: %1, thrown in %2:%3"
+msgstr "No ha sido posible modificar el presupuesto: %1, arrojado en %2:%3"
+
+#: kmymoney2.cpp:4192 kmymoney2.cpp:4250
+msgid ""
+"The current budget already contains data. Continuing will replace all "
+"current values of this budget."
+msgstr ""
+"El presupuesto actual contiene datos. Continuar reemplazar todos los valores "
+"actuales de este presupuesto."
+
+#: kmymoney2.cpp:4222
+msgid ""
+"Please be aware that changes made in the following dialog affect all KDE "
+"applications not only KMyMoney."
+msgstr ""
+"Por favor, tenga en cuenta que los cambios hechos en el siguiente cuadro de "
+"diálogo afectan a todas las aplicaciones KDE, no sólo a KMyMoney."
+
+#: kmymoney2.cpp:4292
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to delete the transactions anyway?"
+msgstr ""
+"Al menos una partida de este asiento fue reconciliada. ¿Desea borrar el "
+"asiento aún así?"
+
+#: kmymoney2.cpp:4295 views/kgloballedgerview.cpp:1043
+msgid "Transaction already reconciled"
+msgstr "El asiento ya fue reconciliado"
+
+#: kmymoney2.cpp:4301
+msgid "Do you really want to delete the selected transaction?"
+msgstr "¿Desea realmente borrar el asiento elegido?"
+
+#: kmymoney2.cpp:4303
+msgid "Do you really want to delete all %1 selected transactions?"
+msgstr "¿Desea realmente borrar los %1 asientos elegidos?"
+
+#: kmymoney2.cpp:4305
+msgid "Delete transaction"
+msgstr "Borrar asiento"
+
+#: kmymoney2.cpp:4306
+msgid "Deleting transactions"
+msgstr "Borrando asientos"
+
+#: kmymoney2.cpp:4321
+msgid "Duplicating transactions"
+msgstr "Duplicando asientos"
+
+#: kmymoney2.cpp:4378
+msgid "Unable to delete transaction(s): %1, thrown in %2:%3"
+msgstr "No ha sido posible eliminar el/los asiento(s): %1, arrojado en %2:%3"
+
+#: kmymoney2.cpp:4452 kmymoney2.cpp:4622
+msgid "Unable to modify transaction: %1, thrown in %2:%3"
+msgstr "No ha sido posible modificar el asiento: %1, arrojado en %2:%3"
+
+#: kmymoney2.cpp:4514
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling and<br>- <b>Cancel</b> returns to the "
+"transaction editor.<p>You can also select an option to save the transaction "
+"automatically when e.g. selecting another transaction."
+msgstr ""
+"¿Realmente desea cancelar la edición de este asiento sin guardarlo?<p>- "
+"<b>Sí</b> cancela la edición del asiento<br>- <b>No</b> guarda el asiento "
+"antes de cancelar y<br>- <b>Cancelar</b> regresa al editor de asientos."
+"<p>También puede seleccionar una opción para guardar el asiento "
+"automáticamente cuando, por ejemplo, selecciona otro asiento."
+
+#: kmymoney2.cpp:4514 kmymoney2.cpp:4517
+msgid "Cancel transaction edit"
+msgstr "Cancelar la modficación del asiento"
+
+#: kmymoney2.cpp:4517
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling.<p>You can also select an option to save the "
+"transaction automatically when e.g. selecting another transaction."
+msgstr ""
+"¿Realmente desea cancelar la edición de este asiento sin guardarlo?<p>- "
+"<b>Sí</b> cancela la edición del asiento<br>- <b>No</b> guarda el asiento "
+"antes de cancelar.<p>También puede seleccionar una opción para guardar el "
+"asiento automáticamente cuando, por ejemplo, selecciona otro asiento."
+
+#: kmymoney2.cpp:4667
+msgid "Unable to accept transaction: %1, thrown in %2:%3"
+msgstr "No ha sido posible aceptar el asiento: %1, arrojado en %2:%3"
+
+#: kmymoney2.cpp:4846
+msgid "Unable to unmatch the selected transactions"
+msgstr "No fue posible conciliar los asientos seleccionados"
+
+#: kmymoney2.cpp:4885
+msgid "No manually entered transaction selected for matching"
+msgstr "No se han seleccionado asientos manuales para conciliar"
+
+#: kmymoney2.cpp:4887
+msgid "No imported transaction selected for matching"
+msgstr "No se han seleccionado asientos importados para conciliar"
+
+#: kmymoney2.cpp:4895
+msgid "Unable to match the selected transactions"
+msgstr "No fue posible conciliar los asientos seleccionados"
+
+#: kmymoney2.cpp:5097
+msgid "Create a new transaction"
+msgstr "Crear un nuevo asiento"
+
+#: kmymoney2.cpp:5163
+msgid "Duplicate the current selected transactions"
+msgstr "Duplicar los asientos seleccionados"
+
+#: kmymoney2.cpp:5223
+msgid ""
+"_: Button text for unmatch transaction\n"
+"Unmatch"
+msgstr "Desconciliar"
+
+#: kmymoney2.cpp:5451 kmymoney2.cpp:5473
+msgid "Goto '%1'"
+msgstr "Ir a '%1'"
+
+#: kmymoney2.cpp:5582
+msgid "Running consistency check..."
+msgstr "Ejecutando comprobación de consistencia..."
+
+#: kmymoney2.cpp:5590
+#, c-format
+msgid "Consistency check failed: %1"
+msgstr "La comprobación de consistencia falló: %1"
+
+#: kmymoney2.cpp:5594
+msgid "Consistency check result"
+msgstr "Resultados de la comprobación de consistencia"
+
+#: kmymoney2.cpp:5603
+msgid "Checking for overdue scheduled transactions..."
+msgstr "Comprobando asientos planificados vencidos..."
+
+#: kmymoney2.cpp:5740
+msgid ""
+"You must first select a KMyMoney file before you can import a statement."
+msgstr "Antes de importar un extracto debe escoger un archivo KMyMoney."
+
+#: kmymoney2.cpp:5746
+msgid "Importing a statement via Web Connect"
+msgstr "Ompòrtando un extracto mediante Web Connect"
+
+#: kmymoney2.cpp:5759
+msgid ""
+"Unable to import %1 using %2 plugin. The plugin returned the following "
+"error: %3"
+msgstr ""
+"No ha sido posible importar %1 usando el plugin %2. El plugin debolvió el "
+"siguiente error: %3"
+
+#: kmymoney2.cpp:5759 plugins/ofximport/ofximporterplugin.cpp:646
+msgid "Importing error"
+msgstr "Error importando"
+
+#: kmymoney2.cpp:5780
+msgid "All messages have been enabled."
+msgstr "Se permiten todos los mensajes."
+
+#: kmymoney2.cpp:5780
+msgid "All messages"
+msgstr "Todos los mensajes"
+
+#: kmymoney2.cpp:5855
+msgid "Auto saving..."
+msgstr "Autoguardando..."
+
+#: kmymoney2.cpp:5913
+msgid "Unable to setup online parameters for account ''%1'"
+msgstr "No fue posible configurar los parámetros online de la cuenta '%1'"
+
+#: kmymoney2.cpp:5928
+msgid ""
+"Do you really want to remove the mapping of account <b>%1</b> to an online "
+"account? Depending on the details of the online banking method used, this "
+"action cannot be reverted."
+msgstr ""
+"¿Realmente desea eliminar el vínculo de la cuenta <b>%1</b> a una cuenta "
+"online? Dependiendo de los detalles del método de banca online, esta acción "
+"no puede ser revertida."
+
+#: kmymoney2.cpp:5928
+msgid "Remove mapping to online account"
+msgstr "Eliminar vinculación a cuenta online"
+
+#: kmymoney2.cpp:5939
+#, c-format
+msgid "Unable to unmap account from online account: %1"
+msgstr "No se pudo desvincular la cuenta de la cuenta online: %1"
+
+#: kmymoney2.cpp:5956
+msgid " (Brokerage)"
+msgstr " (Corretaje)"
+
+#: kmymoney2.cpp:5957
+msgid ""
+"You try to map a brokerage account to an online account. This is usually not "
+"advisable. In general, the investment account should be mapped to the online "
+"account. Please cancel if you intended to map the investment account, "
+"continue otherwise"
+msgstr ""
+"Usted intenta vincular una cuenta de corretaje a una cuenta online. Esto no "
+"es recomendable generalmente. Usualmente, es la cuenta de inversión la que "
+"debería vincularse a la cuenta online. Por favor, cancele si intentaba "
+"vincular la cuenta de inversión. Continúe si no era así."
+
+#: kmymoney2.cpp:5957
+msgid "Mapping brokerage account"
+msgstr "Vinculando cuenta de corretaje"
+
+#: kmymoney2.cpp:5964
+msgid "Select online banking plugin"
+msgstr "Seleccionar plugin de banca online"
+
+#: kmymoney2.cpp:6005
+#, c-format
+msgid "Unable to map account to online account: %1"
+msgstr "No fue posible vincular la cuenta a la cuenta online: %1"
+
+#: converter/mymoneyqifreader.cpp:407 converter/mymoneytemplate.cpp:73
+#: views/kmymoneyview.cpp:590
+msgid "Error while loading file '%1'!"
+msgstr "¡Error al cargar el archivo '%1'!"
+
+#: converter/mymoneyqifreader.cpp:409 converter/mymoneyqifreader.cpp:965
+#: converter/mymoneytemplate.cpp:75 views/kmymoneyview.cpp:592
+msgid "File access error"
+msgstr "Error de acceso al archivo"
+
+#: converter/mymoneytemplate.cpp:84
+msgid "<b>%1</b> is not a template file."
+msgstr "<b>%1</b> no es un archivo de plantillas."
+
+#: converter/mymoneytemplate.cpp:85 views/kmymoneyview.cpp:603
+msgid "Filetype Error"
+msgstr "Error Filetype"
+
+#: converter/mymoneytemplate.cpp:93
+msgid "Error while reading template file <b>%1</b> in line %2, column %3"
+msgstr ""
+"Error al leer el archivo de plantillas <b>%1</b> en la línea %2, columna %3"
+
+#: converter/mymoneytemplate.cpp:94
+msgid "Template Error"
+msgstr "Error de Plantilla"
+
+#: converter/mymoneytemplate.cpp:101
+msgid "File '%1' not found!"
+msgstr "¡Archivo '%1' no encontrado!"
+
+#: converter/mymoneytemplate.cpp:142
+msgid "Invalid tag <b>%1</b> in template file <b>%2</b>!"
+msgstr "¡Etiqueta no válida <b>%1</b> en el archivo de plantillas <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:214
+#, c-format
+msgid "Loading template %1"
+msgstr "Cargando plantilla %1"
+
+#: converter/mymoneytemplate.cpp:241
+msgid "Invalid top-level account type <b>%1</b> in template file <b>%2</b>!"
+msgstr ""
+"¡Tipo de cuenta madre <b>%1</b> no válido en archivo de plantillas <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:309
+msgid ""
+"Invalid flag type <b>%1</b> for account <b>%3</b> in template file <b>%2</b>!"
+msgstr ""
+"¡Bandera de tipo <b>%1</b> no válida en el cuenta <b>%3</b> del archivo de "
+"plantillas <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:398 converter/mymoneytemplate.cpp:401
+#: views/kmymoneyview.cpp:1151 views/kmymoneyview.cpp:1154
+msgid "Unable to write changes to '%1'"
+msgstr "No fue posible escribir cambios a '%1'"
+
+#: converter/mymoneytemplate.cpp:407 views/kmymoneyview.cpp:1162
+msgid "Unable to upload to '%1'"
+msgstr "No fue posible enviar archivo a '%1'"
+
+#: converter/mymoneyqifwriter.cpp:70
+msgid ""
+"Unexpected exception '%1' thrown in %2, line %3 caught in MyMoneyQifWriter::"
+"write()"
+msgstr ""
+"La excepción inesperada '%1', lanzada desde %2, línea %3, ha sido capturada "
+"por MyMoneyQifWriter::write()"
+
+#: converter/mymoneyqifwriter.cpp:80
+msgid "Unable to open file '%1' for writing"
+msgstr "No fue posible abrir el archivo '%1' para escritura"
+
+#: converter/webpricequote.cpp:340
+#, c-format
+msgid "Symbol found: %1"
+msgstr "Símbolo encontrado: %1"
+
+#: converter/webpricequote.cpp:368
+msgid "Price found: %1 (%2)"
+msgstr "Precio encontrado: %1 (%2)"
+
+#: converter/webpricequote.cpp:380
+#, c-format
+msgid "Date found: %1"
+msgstr "Fecha encontrada: %1"
+
+#: converter/webpricequote.cpp:397 converter/webpricequote.cpp:403
+#, c-format
+msgid "Unable to update price for %1"
+msgstr "No ha sido posible actualizar el precio de %1"
+
+#: converter/mymoneyqifreader.cpp:170
+msgid ""
+"_: Category name\n"
+"Reinvested dividend"
+msgstr "Dividendo reinvertido"
+
+#: converter/mymoneyqifreader.cpp:173
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (long term)"
+msgstr "Dividendo reinvertido (a largo plazo)"
+
+#: converter/mymoneyqifreader.cpp:176
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (short term)"
+msgstr "Dividendo reinvertido (a corto plazo)"
+
+#: converter/mymoneyqifreader.cpp:179
+msgid ""
+"_: Category name\n"
+"Dividend"
+msgstr "Dividendo"
+
+#: converter/mymoneyqifreader.cpp:182
+msgid ""
+"_: Category name\n"
+"Interest"
+msgstr "Interés"
+
+#: converter/mymoneyqifreader.cpp:185
+msgid ""
+"_: Category name\n"
+"Capital Gain (short term)"
+msgstr "Ganancia de capital (a corto plazo)"
+
+#: converter/mymoneyqifreader.cpp:188
+msgid ""
+"_: Category name\n"
+"Capital Gain (mid term)"
+msgstr "Ganancia de capital (a mediano plazo)"
+
+#: converter/mymoneyqifreader.cpp:191
+msgid ""
+"_: Category name\n"
+"Capital Gain (long term)"
+msgstr "Ganancia de capital (a largo plazo)"
+
+#: converter/mymoneyqifreader.cpp:194
+msgid ""
+"_: Category name\n"
+"Returned capital"
+msgstr "Capital devuelto"
+
+#: converter/mymoneyqifreader.cpp:197
+msgid ""
+"_: Category name\n"
+"Miscellaneous income"
+msgstr "Ingresos varios"
+
+#: converter/mymoneyqifreader.cpp:200
+msgid ""
+"_: Category name\n"
+"Miscellaneous expense"
+msgstr "Gastos varios"
+
+#: converter/mymoneyqifreader.cpp:203
+msgid ""
+"_: Category name\n"
+"Investment fees"
+msgstr "Cargos de inversión"
+
+#: converter/mymoneyqifreader.cpp:205
+#, c-format
+msgid "Unknown QIF type %1"
+msgstr "Tipo de QIF desconocido %1"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Date format selection"
+msgstr "Selección de formato de fecha"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Pick the date format that suits your input file"
+msgstr "Elija el formato de fecha de su archivo de entrada"
+
+#: converter/mymoneyqifreader.cpp:366
+msgid "Importing QIF ..."
+msgstr "Importando QIF..."
+
+#: converter/mymoneyqifreader.cpp:442
+msgid "Reading QIF ..."
+msgstr "Leyendo QIF..."
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Adding transactions"
+msgstr "Añadiendo asientos"
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Now adding the transactions to your ledger..."
+msgstr "Se están añadiendo los asientos a su libro mayor..."
+
+#: converter/mymoneyqifreader.cpp:533
+msgid "Unable to add transactions"
+msgstr "No se pudo agregar asientos"
+
+#: converter/mymoneyqifreader.cpp:567
+msgid ""
+"_: QIF tag for liability account\n"
+"Oth L"
+msgstr "Oth L"
+
+#: converter/mymoneyqifreader.cpp:572
+msgid ""
+"_: QIF tag for category\n"
+"Cat"
+msgstr "Cat"
+
+#: converter/mymoneyqifreader.cpp:575
+msgid ""
+"_: QIF tag for security\n"
+"Security"
+msgstr "Security"
+
+#: converter/mymoneyqifreader.cpp:578
+msgid ""
+"_: QIF tag for investment account\n"
+"Invst"
+msgstr "Invst"
+
+#: converter/mymoneyqifreader.cpp:581
+msgid ""
+"_: QIF tag for prices\n"
+"Prices"
+msgstr "Prices"
+
+#: converter/mymoneyqifreader.cpp:599
+msgid ""
+"_: QIF tag for a class\n"
+"Class"
+msgstr "Class"
+
+#: converter/mymoneyqifreader.cpp:753 converter/mymoneyqifreader.cpp:2203
+msgid ""
+"The %1 account currently has an opening balance of %2. This QIF file reports "
+"an opening balance of %3. Would you like to overwrite the current balance "
+"with the one from the QIF file?"
+msgstr ""
+"La cuenta %1 figura con un saldo de apertura de %2. Sin embargo, en este "
+"archivo QIF figura con un saldo de apertura de %3. Desea cambiar este valor "
+"por el del archivo QIF?"
+
+#: converter/mymoneyqifreader.cpp:754 converter/mymoneyqifreader.cpp:2204
+msgid "Overwrite opening balance"
+msgstr "Sobreescribir saldo de apertura"
+
+#: converter/mymoneyqifreader.cpp:879 converter/mymoneyqifreader.cpp:890
+#: converter/mymoneyqifreader.cpp:914
+msgid "Autogenerated by QIF importer"
+msgstr "Autogenerado por el importador de QIF"
+
+#: converter/mymoneyqifreader.cpp:907
+msgid "QIF imported, no account name supplied"
+msgstr "Importado de QIF, no se suministró un nombre de cuenta"
+
+#: converter/mymoneyqifreader.cpp:940
+msgid ""
+"KMyMoney has imported a second opening balance transaction into account <b>%"
+"1</b> which differs from the one found already on file. Please correct this "
+"manually once the import is done."
+msgstr ""
+"KMyMoney ha importado un segundo asiento de apertura a la cuenta <b>%1</b>, "
+"que difiere del que ya se encontraba en archivo. Por favor, corrija esto "
+"manualmente una vez terminada la importación."
+
+#: converter/mymoneyqifreader.cpp:940
+msgid "Opening balance problem"
+msgstr "Problemas en el saldo de apertura"
+
+#: converter/mymoneyqifreader.cpp:963
+msgid "Error while creating opening balance transaction"
+msgstr "Se ha producido un error mientras se creaba el asiento de apertura"
+
+#: converter/mymoneyqifreader.cpp:1029 converter/mymoneyqifreader.cpp:1276
+msgid ""
+"The date entry \"%1\" read from the file cannot be interpreted through the "
+"current date profile setting of \"%2\".\n"
+"\n"
+"Pressing \"Continue\" will assign todays date to the transaction. Pressing "
+"\"Cancel\" will abort the import operation. You can then restart the import "
+"and select a different QIF profile or create a new one."
+msgstr ""
+"La fecha \"%1\", leída del archivo, no pudo ser interpretada con la "
+"configuración actual para fechas de \"%2\".\n"
+"\n"
+"Pulsando \"Continuar\" asignará la fecha de hoy al asiento. Pulsando "
+"\"Cancelar\" abortará la operación de importación. Entonces podrá reiniciar "
+"la importación y escoger otro perfil QIF o crear uno nuevo."
+
+#: converter/mymoneyqifreader.cpp:1035 converter/mymoneyqifreader.cpp:1282
+msgid "Invalid date format"
+msgstr "Formato de fecha no válido"
+
+#: converter/mymoneyqifreader.cpp:1398
+#: converter/mymoneystatementreader.cpp:589
+#: converter/mymoneystatementreader.cpp:592
+msgid "Statement Importer"
+msgstr "Importador de Extractos Bancarios"
+
+#: converter/mymoneyqifreader.cpp:1413
+#: converter/mymoneystatementreader.cpp:644
+msgid ""
+"This investment account does not contain the \"%1\" security. Transactions "
+"involving this security will be ignored."
+msgstr ""
+"Esta cuenta de inversiones no contiene el valor bursatil \"%1\". Los "
+"asientos que involucren este valor serán ignorados."
+
+#: converter/mymoneyqifreader.cpp:1415
+#: converter/mymoneystatementreader.cpp:612
+#: converter/mymoneystatementreader.cpp:644
+msgid "Security not found"
+msgstr "Valro bursatil no encontrado"
+
+#: converter/mymoneyqifreader.cpp:2021
+msgid "%1 (Investment)"
+msgstr "%1 (Inversión)"
+
+#: converter/mymoneyqifreader.cpp:2022
+msgid "Autogenerated by QIF importer from type Mutual account entry"
+msgstr "Autogenerado por el importador de QIF del tipo de cuenta Mutual"
+
+#: converter/mymoneyqifreader.cpp:2085 converter/mymoneyqifreader.cpp:2228
+msgid "account"
+msgstr "cuenta"
+
+#: converter/mymoneyqifreader.cpp:2086
+msgid "al"
+msgstr "al"
+
+#: converter/mymoneyqifreader.cpp:2093
+msgid "category"
+msgstr "categoría"
+
+#: converter/mymoneyqifreader.cpp:2094
+msgid "ei"
+msgstr "ei"
+
+#: converter/mymoneyqifreader.cpp:2095
+msgid "Category selection"
+msgstr "Selección de categoría"
+
+#: converter/mymoneyqifreader.cpp:2110
+msgid "Account \"%1\" disappeared: "
+msgstr "La cuenta \"%1\" ha desaparecido:"
+
+#: converter/mymoneyqifreader.cpp:2131
+msgid "The %1 '%2' does not exist. Do you want to create it?"
+msgstr "El %1 '%2' no existe. ¿Desea crearlo?"
+
+#: converter/mymoneyqifreader.cpp:2140
+#, c-format
+msgid "Select %1"
+msgstr "Seleccionar %1"
+
+#: converter/mymoneyqifreader.cpp:2142
+msgid ""
+"The %1 <b>%2</b> currently exists. Do you want to import transactions to "
+"this account?"
+msgstr "El %1 <b>%2</b> ya existe. ¿Desea importar asientos a esta cuenta?"
+
+#: converter/mymoneyqifreader.cpp:2147
+msgid ""
+"The %1 <b>%2</b> currently does not exist. You can create a new %3 by "
+"pressing the <b>Create</b> button or select another %4 manually from the "
+"selection box."
+msgstr ""
+"El %1 <b>%2</b> no existe. Puede crear un nuevo %3 pulsando el botón "
+"<b>Crear</b> o escoger otro %4 manualmente en la caja se selección."
+
+#: converter/mymoneyqifreader.cpp:2154
+#, c-format
+msgid "Import transactions to %1"
+msgstr "Importar asientos a %1"
+
+#: converter/mymoneyqifreader.cpp:2155
+msgid ""
+"No %1 information has been found in the selected QIF file. Please select an "
+"account using the selection box in the dialog or create a new %2 by pressing "
+"the <b>Create</b> button."
+msgstr ""
+"No se encontró información de %1 en el archivo QIF escogido. Por favor, "
+"escoja una cuenta empleando la caja de selección del diálogo o cree una "
+"nueva %2 pulsando en el botón <b>Crear</b>."
+
+#: converter/mymoneyqifreader.cpp:2229
+msgid "You must select or create an account."
+msgstr "Debe escoger o crear una cuenta."
+
+#: converter/mymoneyqifreader.cpp:2231
+msgid "You must select or create a category."
+msgstr "Debe escoger o crear una categoría."
+
+#: converter/mymoneystatementreader.cpp:100
+msgid "_Fees"
+msgstr "_Cargos"
+
+#: converter/mymoneystatementreader.cpp:106
+msgid "_Dividend"
+msgstr "_Dividendo"
+
+#: converter/mymoneystatementreader.cpp:289
+#, c-format
+msgid "Importing statement for account %1"
+msgstr "Importando el extracto de la cuenta %1"
+
+#: converter/mymoneystatementreader.cpp:291
+msgid "Importing statement without transactions"
+msgstr "Importando extracto sin asientos"
+
+#: converter/mymoneystatementreader.cpp:385
+msgid " Statement balance is not contained in statement."
+msgstr " El saldo del extracto no está contenido en el extracto."
+
+#: converter/mymoneystatementreader.cpp:387
+msgid " Statement balance on %1 is reported to be %2"
+msgstr " El saldo del extracto de %1 es %2"
+
+#: converter/mymoneystatementreader.cpp:389
+msgid " Transactions"
+msgstr " Asientos"
+
+#: converter/mymoneystatementreader.cpp:390
+msgid " %1 processed"
+msgstr " %1 procesados"
+
+#: converter/mymoneystatementreader.cpp:391
+msgid " %1 added"
+msgstr " %1 agregados"
+
+#: converter/mymoneystatementreader.cpp:392
+msgid " %1 matched"
+msgstr " %1 conciliados"
+
+#: converter/mymoneystatementreader.cpp:393
+msgid " %1 duplicates"
+msgstr " %1 duplicados"
+
+#: converter/mymoneystatementreader.cpp:394
+msgid " Payees"
+msgstr " Beneficiarios"
+
+#: converter/mymoneystatementreader.cpp:395
+msgid " %1 created"
+msgstr " %1 creados"
+
+#: converter/mymoneystatementreader.cpp:483
+#, c-format
+msgid "Error creating security record: %1"
+msgstr "Error al crear registro de valor bursátil: %1"
+
+#: converter/mymoneystatementreader.cpp:612
+msgid ""
+"This imported statement contains investment transactions with no security. "
+"These transactions will be ignored."
+msgstr ""
+"El extracto importado contiene asientos de inversión sin valor bursátil. "
+"Estos asientos serán ignorados."
+
+#: converter/mymoneystatementreader.cpp:803
+msgid "(Fees) "
+msgstr "(Comisiones)"
+
+#: converter/mymoneystatementreader.cpp:880
+msgid ""
+"Do you want to add \"%1\" as payee/receiver?\n"
+"\n"
+msgstr ""
+"Desea añadir a \"%1\" a la lista de beneficiarios/receptores?\n"
+"\n"
+
+#: converter/mymoneystatementreader.cpp:881
+msgid ""
+"Selecting \"Yes\" will create the payee, \"No\" will skip creation of a "
+"payee record and remove the payee information from this transaction. "
+"Selecting \"Cancel\" aborts the import operation.\n"
+"\n"
+"If you select \"No\" here and mark the \"Don't ask again\" checkbox, the "
+"payee information for all following transactions referencing \"%1\" will be "
+"removed."
+msgstr ""
+"Escogiendo \"Si\" creará un nuevo beneficiario, \"No\" lo evitará y "
+"eliminará de este asiento los datos de beneficiario introducidos. Escogiendo "
+"\"Cancelar\" abortará la operación de importación.\n"
+"\n"
+"Si escoge \"No\" aquí y marca la casilla \"No preguntar de nuevo\", se "
+"eliminará la información del beneficiario de todos los asientos con "
+"referencia \"%1\"."
+
+#: converter/mymoneystatementreader.cpp:917
+msgid "Save Category"
+msgstr "Guardar Categoría"
+
+#: converter/mymoneystatementreader.cpp:918
+msgid "No Category"
+msgstr "Sin Categoría"
+
+#: converter/mymoneystatementreader.cpp:919 dialogs/rc.cpp:4
+msgid "Abort"
+msgstr "Abortar"
+
+#: converter/mymoneystatementreader.cpp:926
+msgid "Please select a default category for payee '%1':"
+msgstr ""
+"Por favor seleccione una categoría predeterminada para el pagador '%1':"
+
+#: converter/mymoneystatementreader.cpp:958
+msgid "Unable to add payee/receiver"
+msgstr "No fue posible añadir el beneficiario/receptor"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid ""
+"KMyMoney has found a scheduled transaction named <b>%1</b> which matches an "
+"imported transaction. Do you want KMyMoney to enter this schedule now so "
+"that the transaction can be matched? "
+msgstr ""
+"KMyMoney ha encontrado un asiento planificado llamado <b>%1</b> que coincide "
+"con un asiento importado. ¿Desea que KMyMoney ingrese esta planificación "
+"ahora para que el asiento pueda ser conciliado?"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid "Schedule found"
+msgstr "Planificación encontrada"
+
+#: converter/mymoneystatementreader.cpp:1219
+msgid "Problem adding or matching imported transaction with id '%1': %2"
+msgstr "Problemas al añadir o conciliar el asiento importado con id '%1': %2"
+
+#: converter/mymoneystatementreader.cpp:1268
+msgid ""
+"<b>You have downloaded a statement for the following account:</b><br><br>"
+msgstr "<b>Ha descargado un extracto de la siguiente cuenta:</b><br><br>"
+
+#: converter/mymoneystatementreader.cpp:1269
+#, c-format
+msgid " - Account Name: %1"
+msgstr "- Nombre de cuenta: %1"
+
+#: converter/mymoneystatementreader.cpp:1270
+#, c-format
+msgid " - Account Type: %1"
+msgstr "- Tipo de cuenta: %1"
+
+#: converter/mymoneystatementreader.cpp:1271
+#, c-format
+msgid " - Account Number: %1"
+msgstr "- Número de Cuenta: %1"
+
+#: converter/mymoneystatementreader.cpp:1279
+msgid "Do you want to import transactions to this account?"
+msgstr "¿Desea importar asientos a esta cuenta?"
+
+#: converter/mymoneystatementreader.cpp:1281
+msgid ""
+"KMyMoney cannot determine which of your accounts to use. You can create a "
+"new account by pressing the <b>Create</b> button or select another one "
+"manually from the selection box below."
+msgstr ""
+"KMyMoney no puede determinar cual de sus cuentas usar. Puede crear una nueva "
+"pulsando del botón <b>Crear</b> o escoger otra en la caja se selección de "
+"abajo."
+
+#: converter/mymoneystatementreader.cpp:1287
+msgid ""
+"No account information has been found in the selected statement file. Please "
+"select an account using the selection box in the dialog or create a new "
+"account by pressing the <b>Create</b> button."
+msgstr ""
+"No se ha encontrado información de la cuenta en el archivo de extracto "
+"escogido. Escoja una cuenta usando la caja de selección del diálogo o cree "
+"una nueva mediante el botón <b>Crear</b>"
+
+#: converter/mymoneystatementreader.cpp:1294
+msgid "Import transactions"
+msgstr "Importar asientos"
+
+#: converter/mymoneystatementreader.cpp:1330
+msgid ""
+"You must select an account, create a new one, or press the <b>Abort</b> "
+"button."
+msgstr ""
+"Debe escoger una cuenta, crear una nueva o pulsar el botón <b>Abortar</b>."
+
+#: converter/mymoneygncreader.cpp:119
+msgid "%1: Sorry. This importer cannot handle version %2 of element %3"
+msgstr ""
+"%1: Lamentablemente, el importador no puede manejar la versión %2 del "
+"elemento %3"
+
+#: converter/mymoneygncreader.cpp:193
+#, c-format
+msgid "Account%1"
+msgstr "Cuenta %1"
+
+#: converter/mymoneygncreader.cpp:197
+#, c-format
+msgid "Stock%1"
+msgstr "Acción %1"
+
+#: converter/mymoneygncreader.cpp:206
+#, c-format
+msgid "Payee%1"
+msgstr "Beneficiario %1"
+
+#: converter/mymoneygncreader.cpp:212
+#, c-format
+msgid "Schedule%1"
+msgstr "Planificación %1"
+
+#: converter/mymoneygncreader.cpp:262
+msgid "This version of the importer cannot handle multi-book files."
+msgstr "Esta versión del importador no puede manejar archivos multilibro."
+
+#: converter/mymoneygncreader.cpp:912
+msgid "Invalid header for file. Should be 'gnc-v2'"
+msgstr "Cabecera de archivo no válida. Debería ser 'gnc-v2'"
+
+#: converter/mymoneygncreader.cpp:937 converter/mymoneygncreader.cpp:972
+#: converter/mymoneygncreader.cpp:1062
+#, c-format
+msgid ""
+"Import failed:\n"
+"\n"
+"%1"
+msgstr ""
+"Fallo al Importar:\n"
+"\n"
+"%1"
+
+#: converter/mymoneygncreader.cpp:1065
+msgid "Import complete"
+msgstr "Importación completa"
+
+#: converter/mymoneygncreader.cpp:1120
+msgid "Disguise your wealth"
+msgstr "Disimule su riqueza"
+
+#: converter/mymoneygncreader.cpp:1121
+msgid ""
+"Each monetary value on your file will be multiplied by a random number "
+"between 0.01 and 1.99\n"
+"with a different value used for each transaction. In addition, to further "
+"disguise the true\n"
+"values, you may enter a number between %1 and %2 which will be applied to "
+"all values.\n"
+"These numbers will not be stored in the file."
+msgstr ""
+"Cada valor monetario en su archivo será multiplicado por un número aleatorio "
+"entre 0,01 y 1,99\n"
+"usando un valor diferente para cada asiento. Además, para disfrazar aún más "
+"los valores\n"
+"reales, puede introducir un número entre %1 y %2 que será aplicado a todos "
+"los valores.\n"
+"Estes números no serán guardados en el archivo."
+
+#: converter/mymoneygncreader.cpp:1135
+msgid "Loading commodities..."
+msgstr "Cargando mercancias..."
+
+#: converter/mymoneygncreader.cpp:1160
+msgid "Loading prices..."
+msgstr "Cargando precios..."
+
+#: converter/mymoneygncreader.cpp:1164 converter/mymoneygncreader.cpp:1171
+msgid "Imported History"
+msgstr "Historia Importada"
+
+#: converter/mymoneygncreader.cpp:1251
+#, c-format
+msgid "Current importer does not recognize GnuCash account type %1"
+msgstr "El importador actual no recococe el tipo de cuenta de GnuCash %1"
+
+#: converter/mymoneygncreader.cpp:1471
+msgid "Imported Transaction"
+msgstr "Asiento Importado"
+
+#: converter/mymoneygncreader.cpp:1519
+msgid "Loading templates..."
+msgstr "Cargando Modelos..."
+
+#: converter/mymoneygncreader.cpp:1531
+msgid "Unknown payee"
+msgstr "Beneficiario Desconocido"
+
+#: converter/mymoneygncreader.cpp:1723
+msgid "Loading schedules..."
+msgstr "Cargando planificaciones..."
+
+#: converter/mymoneygncreader.cpp:1735
+#, c-format
+msgid "Can't find template transaction for schedule %1"
+msgstr "No se encontró el asiento que sirve de modelo a la planificación %1"
+
+#: converter/mymoneygncreader.cpp:1910
+msgid "Reorganizing accounts..."
+msgstr "Reorganizando cuentas..."
+
+#: converter/mymoneygncreader.cpp:1972
+msgid ""
+"Your main currency seems to be %1 (%2); do you want to set this as your base "
+"currency?"
+msgstr ""
+"SU divisa principal parece ser %1 (%2); ¿desea ponerla como su divisa de "
+"base?"
+
+#: converter/mymoneygncreader.cpp:1993
+msgid "More"
+msgstr "Más"
+
+#: converter/mymoneygncreader.cpp:1997
+msgid "Save Report"
+msgstr "Guardar Informe"
+
+#: converter/mymoneygncreader.cpp:2017
+msgid ""
+"Problems were encountered in converting schedule '%1'.\n"
+"Do you want to review or edit it now?"
+msgstr ""
+"Se han encontrado problemas al convertir la planificación '%1'.\n"
+"¿Desea revisarla o editarla ahora?"
+
+#: converter/mymoneygncreader.cpp:2039
+msgid ""
+"Found:\n"
+"\n"
+msgstr ""
+"Encontrado:\n"
+"\n"
+
+#: converter/mymoneygncreader.cpp:2040
+msgid " commodities (equities)\n"
+msgstr "mercancías (valores de renta variable)\n"
+
+#: converter/mymoneygncreader.cpp:2041
+msgid " prices\n"
+msgstr "precios\n"
+
+#: converter/mymoneygncreader.cpp:2042
+msgid " accounts\n"
+msgstr "cuentas\n"
+
+#: converter/mymoneygncreader.cpp:2043
+msgid " transactions\n"
+msgstr "asientos\n"
+
+#: converter/mymoneygncreader.cpp:2044
+msgid " schedules\n"
+msgstr "planificaciones\n"
+
+#: converter/mymoneygncreader.cpp:2047
+msgid "No inconsistencies were detected"
+msgstr "No se encontraron inconsistencias"
+
+#: converter/mymoneygncreader.cpp:2049
+msgid " inconsistencies were detected and corrected\n"
+msgstr " inconsistencias fueron detectadas y corregidas\n"
+
+#: converter/mymoneygncreader.cpp:2054
+msgid " orphan accounts were created\n"
+msgstr " fueron creadas cuentas huerfanas\n"
+
+#: converter/mymoneygncreader.cpp:2059
+msgid " possible schedule problems were noted\n"
+msgstr " se notificaron posibles problemas en planificaciones\n"
+
+#: converter/mymoneygncreader.cpp:2064
+msgid "Small Business Features (Customers, Invoices, etc.)"
+msgstr "Funcionalidades para pequeñas empresas (Clientes, Facturas, etc.)"
+
+#: converter/mymoneygncreader.cpp:2065 views/kmymoneyview.cpp:241
+#: views/kmymoneyview.cpp:243
+msgid "Budgets"
+msgstr "Presupuestos"
+
+#: converter/mymoneygncreader.cpp:2066
+msgid "Lots"
+msgstr "Lotes"
+
+#: converter/mymoneygncreader.cpp:2068
+msgid "The following features found in your file are not currently supported:"
+msgstr ""
+"Las siguientes funcionalidades que se encuentran en su fichero no están "
+"soportadas:"
+
+#: converter/mymoneygncreader.cpp:2071
+msgid ""
+"\n"
+"\n"
+"Press More for further information"
+msgstr ""
+"\n"
+"\n"
+"Pulse en Más para obtener información adicional"
+
+#: converter/mymoneygncreader.cpp:2139
+msgid "Orphan created from unknown gnucash account"
+msgstr "Se creó una Huerfana a partir de una cuenta desconocida de gnucash"
+
+#: converter/mymoneygncreader.cpp:2170
+msgid "Internal error - invalid interval char in incrDate"
+msgstr "Error Interno - intervalo de char no válido en incrDate"
+
+#: converter/mymoneygncreader.cpp:2233
+msgid "Enter the investment account name "
+msgstr "Introduzca el nombre de la cuenta de inversiones"
+
+#: converter/mymoneygncreader.cpp:2234
+msgid "My Investments"
+msgstr "Mis Inversiones"
+
+#: converter/mymoneygncreader.cpp:2269
+#, c-format
+msgid "Select parent investment account or enter new name. Stock %1"
+msgstr ""
+"Escoja la cuenta de inversiones madre o introduzca un nuevo nombre. Acción %1"
+
+#: converter/mymoneygncreader.cpp:2292 converter/mymoneygncreader.cpp:2307
+msgid "%1 is not an Investment Account. Do you wish to make it one?"
+msgstr "%1 no es una cuenta de Inversión. ¿Desea convertirla en una de estas?"
+
+#: converter/mymoneygncreader.cpp:2408
+msgid ""
+"An Investment account must be a child of an Asset account\n"
+"Account %1 will be stored under the main Asset account"
+msgstr ""
+"Las cuentas de Inversión deben ser hijas de una cuenta de Activos\n"
+"La cuenta %1 será colocada bajo la cuenta principal de Activos"
+
+#: converter/mymoneygncreader.cpp:2410
+msgid ""
+"An Income account must be a child of an Income account\n"
+"Account %1 will be stored under the main Income account"
+msgstr ""
+"Las cuentas de Ingresos deben ser hijas de una cuenta de Ingresos\n"
+"La cuenta %1 será colocada bajo la cuenta principal de Ingresos"
+
+#: converter/mymoneygncreader.cpp:2412
+msgid ""
+"An Expense account must be a child of an Expense account\n"
+"Account %1 will be stored under the main Expense account"
+msgstr ""
+"Las cuentas de Gastos deben ser hijas de una cuenta de Gastos\n"
+"La cuenta %1 será colocada bajo la cuenta principal de Gastos"
+
+#: converter/mymoneygncreader.cpp:2414
+msgid ""
+"One or more transactions contain a reference to an otherwise unknown "
+"account\n"
+"An asset account with the name %1 has been created to hold the data"
+msgstr ""
+"Uno o más asientos contienen una referencia a una cuenta desconocida\n"
+"Se ha creado una cuenta de activos con el nombre %1 para contener los datos"
+
+#: converter/mymoneygncreader.cpp:2416
+msgid "Schedule %1 has interval of %2 which is not currently available"
+msgstr ""
+"La planificación %1 tiene un intervalo de %2, que en la actualidad no está "
+"disponible"
+
+#: converter/mymoneygncreader.cpp:2417
+msgid "Schedule %1 dropped at user request"
+msgstr "La planificación %1 ha sido eliminada a requerimiento del usuario"
+
+#: converter/mymoneygncreader.cpp:2418
+msgid "Schedule %1 contains unknown action (key = %2, type = %3)"
+msgstr ""
+"La planificación %1 contiene una acción desconicida (clave = %1, tipo = %3)"
+
+#: converter/mymoneygncreader.cpp:2419
+msgid "Schedule %1 contains multiple actions; only one has been imported"
+msgstr ""
+"La planificación %1 contiene múltiples acciones; solo ha siod importada una"
+
+#: converter/mymoneygncreader.cpp:2420
+msgid "Schedule %1 contains no valid splits"
+msgstr "La planificación %1 no contiene partidas válidas"
+
+#: converter/mymoneygncreader.cpp:2421
+msgid ""
+"Schedule %1 appears to contain a formula. GnuCash formulae are not "
+"convertible"
+msgstr ""
+"La planificación %1 parece contener una fórmula. Las fórmulas de GnuCash no "
+"pueden ser convertidas"
+
+#: converter/mymoneygncreader.cpp:2422
+msgid ""
+"Schedule %1 contains unknown interval specification; please check for "
+"correct operation"
+msgstr ""
+"La planificación %1 contiene una especificación de intervalo desconocida; "
+"por favor, compruebe que el funcionamento sea el correcto"
+
+#: converter/mymoneygncreader.cpp:2423
+msgid ""
+"Schedule %1 contains a deferred interval specification; please check for "
+"correct operation"
+msgstr ""
+"La planificación %1 contiene una especificación de intervalo diferida; por "
+"favor, compruebe que el funcionamento sea el correcto"
+
+#: converter/mymoneygncreader.cpp:2424
+msgid ""
+"Account or Category %1, transaction date %2; split contains invalid value; "
+"please check"
+msgstr ""
+"Cuenta o Categoría %1, fecha del asiento %2; la partida contiene valores no "
+"válidos; por favor verifíquela"
+
+#: kmymoneyutils.cpp:146
+msgid "&New Schedule..."
+msgstr "&Nuevo programa de transacciones..."
+
+#: kmymoneyutils.cpp:148
+msgid "Create a new schedule."
+msgstr "Crea un nuevo asiento programado."
+
+#: kmymoneyutils.cpp:149
+msgid "Use this to create a new schedule."
+msgstr "Use esto para crear un nuevo asiento programado."
+
+#: kmymoneyutils.cpp:158
+msgid "&Filter"
+msgstr "&Filtrar"
+
+#: kmymoneyutils.cpp:160
+msgid "Filter out accounts"
+msgstr "Filtrar las cuentas"
+
+#: kmymoneyutils.cpp:161
+msgid "Use this to filter out accounts"
+msgstr "Use esto para filtrar las cuentas"
+
+#: kmymoneyutils.cpp:192
+msgid "Preferred accounts"
+msgstr "Cuentas preferidas"
+
+#: kmymoneyutils.cpp:193
+msgid "Payment accounts"
+msgstr "Cuentas de gastos"
+
+#: kmymoneyutils.cpp:194
+msgid "Favorite reports"
+msgstr "Informes favoritos"
+
+#: kmymoneyutils.cpp:195
+msgid "Forecast (schedule)"
+msgstr "Pronóstico (planificado)"
+
+#: kmymoneyutils.cpp:196
+msgid "Networth forecast"
+msgstr "Pronóstico del Valor Neto"
+
+#: kmymoneyutils.cpp:197
+msgid "Forecast (history)"
+msgstr "Pronóstico (histórico)"
+
+#: kmymoneyutils.cpp:198
+msgid "Assets and Liabilities"
+msgstr "Activos y Pasivos"
+
+#: kmymoneyutils.cpp:199 reports/pivottable.cpp:2416 views/khomeview.cpp:1393
+#: widgets/rc.cpp:70
+msgid "Budget"
+msgstr "Presupuesto"
+
+#: kmymoneyutils.cpp:200
+msgid "CashFlow"
+msgstr "Tesorería"
+
+#: dialogs/kenterscheduledlg.cpp:153 kmymoneyutils.cpp:366
+msgid "Unable to load schedule details"
+msgstr "Incapaz de cargar los detalles del asiento planificado"
+
+#: kmymoneyutils.cpp:390 widgets/register.cpp:473
+msgid ""
+"_: Reconcile state 'Not reconciled'\n"
+"Not reconciled"
+msgstr "No reconciliado"
+
+#: kmymoneyutils.cpp:393 widgets/register.cpp:476
+msgid ""
+"_: Reconcile state 'Cleared'\n"
+"Cleared"
+msgstr "Librado"
+
+#: kmymoneyutils.cpp:396 widgets/register.cpp:479
+msgid ""
+"_: Reconcile state 'Reconciled'\n"
+"Reconciled"
+msgstr "Reconciliado"
+
+#: kmymoneyutils.cpp:399 widgets/register.cpp:482
+msgid ""
+"_: Reconcile state 'Frozen'\n"
+"Frozen"
+msgstr "Congelado"
+
+#: kmymoneyutils.cpp:410
+msgid ""
+"_: Reconcile flag C\n"
+"C"
+msgstr "L"
+
+#: kmymoneyutils.cpp:413
+msgid ""
+"_: Reconcile flag R\n"
+"R"
+msgstr "R"
+
+#: kmymoneyutils.cpp:416
+msgid ""
+"_: Reconcile flag F\n"
+"F"
+msgstr "C"
+
+#: kmymoneyutils.cpp:419
+msgid ""
+"_: Flag for unknown reconciliation state\n"
+"?"
+msgstr "?"
+
+#: _tips.cpp:3
+msgid ""
+"<p>...that you can change the sort order of ledger entries by\n"
+"right-clicking the header of the ledger view?\n"
+msgstr ""
+"<p> ... que puede cambiar el orden de selección de los asientos en los "
+"libros diarios\n"
+"pulsando con el botón derecho en la cabecera de la vista del libro?\n"
+
+#: _tips.cpp:9
+msgid ""
+"<p>...that you can easily move to the other side of a transfer transaction\n"
+"by opening the context menu with the right mouse button and selecting one of "
+"the\n"
+"'Goto' functions?\n"
+msgstr ""
+"<p> ...que puede moverse fácilmente al otro lado de un asiento de "
+"transferencia\n"
+"abriendo el menú contextual con el botón derecho del ratón y escogiendo\n"
+"la función 'Ir a...'?\n"
+
+#: _tips.cpp:16
+msgid ""
+"<p>...that you can start editing a transaction by double-clicking on the\n"
+"transaction in the register?\n"
+msgstr ""
+"<p>...que puede comenzar a editar un asiento mediante un doble-click\n"
+"en el asiento, en el registro?\n"
+
+#: _tips.cpp:22
+msgid ""
+"<p>...that you can show more details of the selected transaction in the\n"
+"register by selecting the 'ledger lens' feature in the settings dialog?\n"
+msgstr ""
+"<p>...que puede ver más detalles del asiento que escoja en el registro\n"
+"mediante la función 'lente del libro mayor', del diálogo configuración?\n"
+
+#: _tips.cpp:28
+msgid ""
+"<p>...that transactions with no category assigned or split\n"
+"transactions with unassigned values are marked with an exclamation mark \n"
+"on a yellow triangle in the register?\n"
+msgstr ""
+"<p>...que los asientos sin categoría asignada o con partidas sin valores \n"
+"asignados se marcan con un signo de exclamación en un triángulo amarillo \n"
+" registro?\n"
+
+#: _tips.cpp:35
+msgid ""
+"<p>...that you can show all details of the transactions in the register\n"
+"by typing &lt;Ctrl-T&gt; or selecting the 'Settings/Show Transaction "
+"Detail'\n"
+"menu entry? You can turn this feature off the same way.\n"
+msgstr ""
+"<p>...que puede mostrar todos los detalles de los asientos en el registro\n"
+"escribiendo &lt;Ctrl-T&gt; o mediante \"Configuración/Mostrar Detalles del "
+"asiento\"\n"
+"Puede deshabilitar esta función de la misma manera.\n"
+
+#: _tips.cpp:42
+msgid ""
+"<p>...that you can switch between a listing of all accounts or\n"
+"an icon view of all asset and liability accounts with the tabs\n"
+"in the accounts view?\n"
+msgstr ""
+"<p>...que puede alternar entre un listado de todas las cuentas\n"
+"o una vista en iconos de los activos y pasivos mediante\n"
+"las pestañas en la vista de las cuentas?\n"
+
+#: _tips.cpp:49
+msgid "<p>...that the KMyMoney development team wishes you a nice day?\n"
+msgstr "<p>...que el equipo de desarrollo de KMyMoney le desea un buen día?\n"
+
+#: _tips.cpp:54
+msgid ""
+"<p>...you can use your own external filter program to convert any\n"
+"import format to QIF on the fly? See the QIF profile editor for\n"
+"more details.\n"
+msgstr ""
+"<p>...que puede emplear su propio programa externo para convertir\n"
+"cualquier formato de importación a QIF? Vea el editor de perfis QIF para\n"
+"obtener más detalles.\n"
+
+#: _tips.cpp:61
+msgid ""
+"<p>...that you can create a scheduled transaction from an existing\n"
+"one by selecting the context menu on a transaction in the ledger\n"
+"or the \"More...\"-menu in the transaction form?\n"
+msgstr ""
+"<p>...que puede crear transacciones programadas a partir de un asiento ya "
+"existente\n"
+"mediante el menu contextual en un asiento en el libro mayor\n"
+"y con el menú \"Más...\" en el formulario de asentar transacciones?\n"
+
+#: _tips.cpp:68
+msgid ""
+"<p>...that you can switch to the payee of a transaction\n"
+"by selecting the context menu on a transaction in the ledger\n"
+"or in the transaction menu?\n"
+msgstr ""
+"<p>...que puede cambiar al beneficiario de un asiento\n"
+"mediante el menu contextual en un asiento en el libro mayor\n"
+"o en el menú de asientos?\n"
+
+#: _tips.cpp:75
+msgid ""
+"<p>...that you can modify the colors and fonts used for the ledgers\n"
+"via <i>Configure/Register/...</i>?\n"
+msgstr ""
+"<p>...que puede modificar los colores y tipos de letra usados en los libros\n"
+"mediante <i>Configurar/Registro/...</i>?\n"
+
+#: _tips.cpp:81
+msgid ""
+"<p>...that you can hide transactions prior to a specific date?\n"
+"The date can be modified via <i>Configure/Register/Filter</i>.\n"
+msgstr ""
+"<p>...que puede ocultar los asientos anteriores a una cierta fecha?\n"
+"La fecha puede escogerla mediante <i>Configurar/Registro/Filtro</i>.\n"
+
+#: _tips.cpp:87
+msgid ""
+"<p>...that you can customize the \"Home-Page\"\n"
+"via <i>Configure/Home</i>?\n"
+msgstr ""
+"<p>...que puede personalizar la \"Página de Inicio\"\n"
+"mediante <i>Configurar/Página inicial</i>?\n"
+
+#: _tips.cpp:93
+msgid ""
+"<p>...that you can enter new transactions even while reconciling\n"
+"an account? You can also make the transaction form visible.\n"
+msgstr ""
+"<p>...que puede asentar nuevas transacciones al mismo tiempo que reconcilia "
+"una cuenta? También puede hacer visible el formulario de asentar "
+"transacciones.\n"
+
+#: _tips.cpp:99
+msgid ""
+"<p>...that you can actively support the KMyMoney development team in\n"
+"cases that heavily depend on your data? You can save your data in an\n"
+"anonymized way for this support.<p>\n"
+"Just open your data file and immediately\n"
+"select <b>File/Save as...</b>. In the <b>Save As...</b> dialog\n"
+"select the filter <b>Anonymous Files</b> and make sure your file gets\n"
+"the extensions <b>.anon.xml</b>. <p>\n"
+"To verify, how the data looks like you are about to send away, you can open\n"
+"this file in KMyMoney and see how the developers see your data.\n"
+msgstr ""
+"<p> ...que puede ayudar activamente al equipo de desarrollo de KMyMoney\n"
+"en los casos que dependan fuertemente de sus datos? Puede guardar sus\n"
+"datos en un formato anónimizado para este fin.<p>\n"
+"Simplemente abrar su archivo de datos e inmediatamente\n"
+"escoja <b> Archivo/Guardar como...</b>. En el diálogo <b>Guardar como...</"
+"b>\n"
+"escoja el filtro <b>Archivos anónimos</b> y asegúrese de que su archivo "
+"toma\n"
+"la extensión <b>.anon.xml</b>.<p>\n"
+"Para verificar los datos que está a punto de enviar, puede abrir\n"
+"el archivo con KMyMoney y verá cómo verán lo desarrolladores sus datos.\n"
+
+#: _tips.cpp:112
+msgid ""
+"<p>... that you can import your bank statements even without a network \n"
+"connection? Just select the file (OFX or QIF) from the File->Import menu.</"
+"p>\n"
+"<p>Provided by Jose Jorge</p>\n"
+msgstr ""
+"<p>... que puede importar sus resúmenes bancarios incluso sin una conexión\n"
+"de red? Simplemente seleccione el archivo (OFX o QIF) en el menú Archivo-"
+">Importar</p>\n"
+"<p>Contribuido por Jose Jorge</p>\n"
+
+#: reports/listtable.cpp:159 reports/listtable.cpp:163
+#: reports/pivottable.cpp:1564
+msgid ""
+"_: Report date range\n"
+"%1 through %2"
+msgstr "De %1 a %2"
+
+#: reports/listtable.cpp:171 reports/pivottable.cpp:1571
+#, c-format
+msgid "All currencies converted to %1"
+msgstr "Todas las divisas convertidas a %1"
+
+#: reports/listtable.cpp:172 reports/pivottable.cpp:1328
+msgid "All currencies converted to %1\n"
+msgstr "Todas las divisas convertidas a %1\n"
+
+#: reports/listtable.cpp:176 reports/pivottable.cpp:1573
+msgid "All values shown in %1 unless otherwise noted"
+msgstr "Todos los valores mostrados en %1, a menos que se indique otra cosa"
+
+#: reports/listtable.cpp:177 reports/pivottable.cpp:1330
+msgid "All values shown in %1 unless otherwise noted\n"
+msgstr ""
+"Todos los valores son mostrados en %1 a menos que se indique otra cosa\n"
+
+#: dialogs/kequitypriceupdatedlg.cpp:73 dialogs/kfindtransactiondlg.cpp:188
+#: dialogs/rc.cpp:53 dialogs/rc.cpp:63 dialogs/rc.cpp:208 dialogs/rc.cpp:805
+#: dialogs/settings/rc.cpp:111 dialogs/transactioneditor.cpp:844
+#: reports/listtable.cpp:196 views/khomeview.cpp:412 views/khomeview.cpp:485
+#: views/khomeview.cpp:519 views/rc.cpp:61 widgets/kmymoneypriceview.cpp:128
+#: widgets/rc.cpp:36 widgets/register.cpp:565 widgets/transaction.cpp:1027
+#: widgets/transaction.cpp:1484
+msgid "Date"
+msgstr "Fecha"
+
+#: reports/listtable.cpp:198
+msgid "Num"
+msgstr "Nº"
+
+#: dialogs/kfindtransactiondlg.cpp:204 dialogs/kmymoneysplittable.cpp:78
+#: dialogs/kmymoneysplittable.cpp:831 dialogs/rc.cpp:217
+#: dialogs/transactioneditor.cpp:831 dialogs/transactioneditor.cpp:1374
+#: dialogs/transactioneditor.cpp:1382 dialogs/transactioneditor.cpp:1396
+#: dialogs/transactioneditor.cpp:1449 dialogs/transactioneditor.cpp:1456
+#: dialogs/transactioneditor.cpp:1504 reports/listtable.cpp:200
+#: views/kcategoriesview.cpp:76 views/rc.cpp:62 widgets/rc.cpp:115
+#: widgets/register.cpp:62 widgets/transaction.cpp:848
+#: widgets/transaction.cpp:906
+msgid "Category"
+msgstr "Categoría"
+
+#: dialogs/kmymoneysplittable.cpp:79 dialogs/kmymoneysplittable.cpp:837
+#: reports/listtable.cpp:202 widgets/rc.cpp:101 widgets/transaction.cpp:1042
+#: widgets/transaction.cpp:1628
+msgid "Memo"
+msgstr "Concepto"
+
+#: reports/listtable.cpp:203
+msgid "Top Category"
+msgstr "Categoría superior"
+
+#: reports/listtable.cpp:204
+msgid "Category Type"
+msgstr "Tipo de Categoría"
+
+#: dialogs/rc.cpp:229 dialogs/settings/rc.cpp:152 reports/listtable.cpp:207
+#: widgets/kmymoneycombo.cpp:346 widgets/rc.cpp:107
+msgid "Reconciled"
+msgstr "Reconciliados"
+
+#: reports/listtable.cpp:208 widgets/rc.cpp:117
+msgid "Action"
+msgstr "Acción"
+
+#: dialogs/investactivities.cpp:199 dialogs/investactivities.cpp:287
+#: dialogs/investactivities.cpp:424 dialogs/investactivities.cpp:504
+#: dialogs/investactivities.cpp:544 dialogs/investtransactioneditor.cpp:241
+#: reports/listtable.cpp:209 widgets/rc.cpp:103 widgets/transaction.cpp:1513
+msgid "Shares"
+msgstr "Participaciones"
+
+#: dialogs/investtransactioneditor.cpp:248
+#: dialogs/investtransactioneditor.cpp:1067
+#: dialogs/investtransactioneditor.cpp:1068
+#: dialogs/investtransactioneditor.cpp:1072
+#: dialogs/kequitypriceupdatedlg.cpp:72 dialogs/rc.cpp:109 dialogs/rc.cpp:164
+#: dialogs/rc.cpp:251 dialogs/rc.cpp:756 dialogs/rc.cpp:827
+#: dialogs/settings/rc.cpp:117 reports/listtable.cpp:210
+#: reports/listtable.cpp:211 reports/pivottable.cpp:2441
+#: views/kinvestmentview.cpp:80 widgets/kmymoneypriceview.cpp:129
+#: widgets/rc.cpp:43 widgets/rc.cpp:105 widgets/register.cpp:573
+msgid "Price"
+msgstr "Precio"
+
+#: reports/listtable.cpp:212
+msgid "Net Value"
+msgstr "Valor Neto"
+
+#: reports/listtable.cpp:213
+msgid "Buys"
+msgstr "Compras"
+
+#: reports/listtable.cpp:214
+msgid "Sells"
+msgstr "Ventas"
+
+#: reports/listtable.cpp:215
+msgid "Dividends Reinvested"
+msgstr "Dividendos Reinvestidos"
+
+#: reports/listtable.cpp:216
+msgid "Dividends Paid Out"
+msgstr "Dividendos Pagados"
+
+#: reports/listtable.cpp:217
+msgid "Starting Balance"
+msgstr "Saldo Inicial"
+
+#: reports/listtable.cpp:218
+msgid "Ending Balance"
+msgstr "Saldo Final"
+
+#: reports/listtable.cpp:219
+msgid "Annualized Return"
+msgstr "Retorno Anual"
+
+#: reports/listtable.cpp:220
+msgid "Return On Investment"
+msgstr "Retorno de Inversión"
+
+#: dialogs/rc.cpp:106 dialogs/rc.cpp:161 dialogs/rc.cpp:248 dialogs/rc.cpp:505
+#: dialogs/rc.cpp:570 dialogs/rc.cpp:667 dialogs/rc.cpp:753
+#: reports/listtable.cpp:223 widgets/register.cpp:570
+msgid "Payment"
+msgstr "Pago"
+
+#: dialogs/rc.cpp:111 dialogs/rc.cpp:166 dialogs/rc.cpp:253 dialogs/rc.cpp:709
+#: dialogs/rc.cpp:758 reports/listtable.cpp:224 widgets/rc.cpp:119
+#: widgets/register.cpp:575
+msgid "Balance"
+msgstr "Saldo"
+
+#: reports/listtable.cpp:227 views/kscheduledview.cpp:74
+msgid "Next Due Date"
+msgstr "Próxima fecha de vencimiento"
+
+#: reports/listtable.cpp:229 views/kscheduledview.cpp:76
+msgid "Payment Method"
+msgstr "Método de Pago"
+
+#: dialogs/rc.cpp:803 reports/listtable.cpp:231 widgets/rc.cpp:2
+msgid "Description"
+msgstr "Descripción"
+
+#: reports/listtable.cpp:232
+msgid "Opening Date"
+msgstr "Fecha de Apertura"
+
+#: reports/listtable.cpp:234
+msgid "Balance Early Warning"
+msgstr "Primera Advertencia de Saldo"
+
+#: reports/listtable.cpp:235
+msgid "Balance Max Limit"
+msgstr "Límite Máximo de Saldo"
+
+#: reports/listtable.cpp:236
+msgid "Credit Early Warning"
+msgstr "Primera Advertencia de Crédito"
+
+#: reports/listtable.cpp:237
+msgid "Credit Max Limit"
+msgstr "Límite Máximo de Crédito"
+
+#: dialogs/rc.cpp:376 reports/listtable.cpp:238
+msgid "Tax"
+msgstr "Impuesto"
+
+#: reports/listtable.cpp:239
+msgid "Preferred"
+msgstr "Preferida"
+
+#: reports/listtable.cpp:240
+msgid "Loan Amount"
+msgstr "Monto del préstamo"
+
+#: dialogs/rc.cpp:511 reports/listtable.cpp:241
+msgid "Interest Rate"
+msgstr "Tasa de Interés"
+
+#: reports/listtable.cpp:242
+msgid "Next Interest Change"
+msgstr "Próximo Cambio de Interés"
+
+#: reports/listtable.cpp:243
+msgid "Periodic Payment"
+msgstr "Pago Periódico"
+
+#: reports/listtable.cpp:244
+msgid "Final Payment"
+msgstr "Pago Final"
+
+#: reports/listtable.cpp:245 views/khomeview.cpp:766 views/khomeview.cpp:1265
+#: views/khomeview.cpp:1273
+msgid "Current Balance"
+msgstr "Saldo Actual"
+
+#: dialogs/investactivities.cpp:201 dialogs/investactivities.cpp:289
+#: dialogs/investactivities.cpp:368 dialogs/investactivities.cpp:426
+#: dialogs/rc.cpp:327 reports/listtable.cpp:360 reports/listtable.cpp:364
+#: reports/listtable.cpp:556 reports/listtable.cpp:558
+#: reports/pivottable.cpp:1343 reports/pivottable.cpp:1445
+#: reports/pivottable.cpp:1505 reports/pivottable.cpp:1598
+#: reports/pivottable.cpp:1768 reports/pivottable.cpp:1845
+#: reports/pivottable.cpp:2165 reports/pivottable.cpp:2167
+#: reports/pivottable.cpp:2187 reports/pivottable.cpp:2189
+#: reports/querytabletest.cpp:134 reports/querytabletest.cpp:135
+#: reports/querytabletest.cpp:136 reports/querytabletest.cpp:137
+#: reports/querytabletest.cpp:162 reports/querytabletest.cpp:163
+#: reports/querytabletest.cpp:164 reports/querytabletest.cpp:197
+#: reports/querytabletest.cpp:198 reports/querytabletest.cpp:224
+#: reports/querytabletest.cpp:250 reports/querytabletest.cpp:251
+#: reports/querytabletest.cpp:252 reports/querytabletest.cpp:275
+#: reports/querytabletest.cpp:276 reports/querytabletest.cpp:277
+#: reports/querytabletest.cpp:366 reports/querytabletest.cpp:422
+#: reports/querytabletest.cpp:423 views/kforecastview.cpp:568 views/rc.cpp:18
+#: widgets/kmymoneyaccounttreeforecast.cpp:139 widgets/transaction.cpp:1643
+msgid "Total"
+msgstr "Total"
+
+#: reports/listtable.cpp:444
+msgid "Initial Market Value"
+msgstr "Valor Inicial de Mercado"
+
+#: reports/listtable.cpp:445
+msgid "Ending Market Value"
+msgstr "Valor Final de Mercado"
+
+#: reports/listtable.cpp:448 reports/querytabletest.cpp:651
+msgid "Opening Balance"
+msgstr "Saldo Inicial"
+
+#: reports/listtable.cpp:449 reports/querytabletest.cpp:652
+#: reports/querytabletest.cpp:653
+msgid "Closing Balance"
+msgstr "Saldo Final"
+
+#: reports/listtable.cpp:490 reports/listtable.cpp:491
+msgid "Calculated"
+msgstr "Calculado"
+
+#: reports/listtable.cpp:572 reports/listtable.cpp:574
+#: reports/pivottable.cpp:1530 reports/pivottable.cpp:1886
+#: reports/querytabletest.cpp:138 reports/querytabletest.cpp:165
+#: reports/querytabletest.cpp:199 reports/querytabletest.cpp:225
+#: reports/querytabletest.cpp:253 reports/querytabletest.cpp:278
+#: reports/querytabletest.cpp:367 reports/querytabletest.cpp:402
+#: reports/querytabletest.cpp:424 reports/querytabletest.cpp:548
+#: reports/querytabletest.cpp:551 reports/querytabletest.cpp:586
+msgid "Grand Total"
+msgstr "Total Final"
+
+#: dialogs/rc.cpp:233 reports/pivottable.cpp:339 views/kscheduledview.cpp:174
+#: views/kscheduledview.cpp:433 views/kscheduledview.cpp:449
+#: widgets/kmymoneyscheduledcalendar.cpp:48
+msgid "Transfers"
+msgstr "Transferencias"
+
+#: reports/pivottable.cpp:1951
+msgid "Legend"
+msgstr "Leyenda"
+
+#: reports/pivottable.cpp:2411 views/khomeview.cpp:1406
+#: views/khomeview.cpp:1443
+msgid "Actual"
+msgstr "Real"
+
+#: reports/pivottable.cpp:2421 views/khomeview.cpp:1409
+#: views/khomeview.cpp:1446
+msgid "Difference"
+msgstr "Diferencia"
+
+#: reports/pivottable.cpp:2431
+msgid "Moving Average"
+msgstr "Promedio Móvil"
+
+#: reports/pivottable.cpp:2436
+msgid "Moving Average Price"
+msgstr "Precio Promedio Móvil"
+
+#: reports/objectinfotable.cpp:214 reports/querytable.cpp:693
+#: reports/querytable.cpp:736 reports/querytable.cpp:1356
+#: reports/querytable.cpp:1375 views/kpayeesview.cpp:742
+#, c-format
+msgid "Transfer from %1"
+msgstr "Transferir desde %1"
+
+#: reports/objectinfotable.cpp:215 reports/querytable.cpp:694
+#: reports/querytable.cpp:735 reports/querytable.cpp:1355
+#: reports/querytable.cpp:1374 views/kpayeesview.cpp:740
+#, c-format
+msgid "Transfer to %1"
+msgstr "Transferir a %1"
+
+#: reports/querytabletest.cpp:471 views/kreportsview.cpp:1144
+msgid "Investment Transactions"
+msgstr "Asientos de las Inversiones"
+
+#: reports/querytabletest.cpp:472 reports/querytabletest.cpp:564
+msgid "Test Report"
+msgstr "Comprobar Informe"
+
+#: reports/querytabletest.cpp:547 reports/querytabletest.cpp:550
+msgid "Total Stock 1"
+msgstr "Total de Acciones 1"
+
+#: reports/querytabletest.cpp:563 views/kreportsview.cpp:1174
+msgid "Investment Performance by Account"
+msgstr "Comportamiento de la Inversión por Cuenta"
+
+#: reports/querytable.cpp:431 reports/querytable.cpp:1200
+#, c-format
+msgid "Month of %1"
+msgstr "Mes de %1"
+
+#: reports/querytable.cpp:432 reports/querytable.cpp:1201
+#, c-format
+msgid "Week of %1"
+msgstr "Semana de %1"
+
+#: reports/querytable.cpp:576 reports/querytable.cpp:739
+#: reports/querytable.cpp:858 reports/querytable.cpp:1325
+#: reports/querytable.cpp:1481
+msgid "No Institution"
+msgstr "Sin Organización"
+
+#: reports/querytable.cpp:580 reports/querytable.cpp:1329
+msgid "[Empty Payee]"
+msgstr "[Sin beneficiario] "
+
+#: reports/querytable.cpp:615 reports/querytable.cpp:1361
+msgid "[Split Transaction]"
+msgstr "[Asiento con Múltiples Partidas]"
+
+#: reports/querytable.cpp:616 reports/querytable.cpp:617
+msgid "Split"
+msgstr "Desglosar"
+
+#: main.cpp:51
+msgid ""
+"\n"
+"KMyMoney, the Personal Finance Manager for KDE.\n"
+"\n"
+"Please consider contributing to this project with code and/or suggestions."
+msgstr ""
+"\n"
+"KMyMoney, el gestor de finanzas personales de KDE.\n"
+"\n"
+"Usted puede contribuir a este proyecto mediante código y/o sugerencias."
+
+#: main.cpp:55
+msgid "language to be used"
+msgstr "lenguaje a usar"
+
+#: main.cpp:56
+msgid "don't open last used file"
+msgstr "no abrir el último fichero usado"
+
+#: main.cpp:57
+msgid "enable performance timers"
+msgstr "habilitar medidores de performance"
+
+#: main.cpp:61
+msgid "turn on program traces"
+msgstr "habilitar trazas del programa"
+
+#: main.cpp:62
+msgid "dump the names of all defined KAction objects to stdout and quit"
+msgstr ""
+"volcar los nombres de todos los objetos KAction definidos a la salida "
+"estándar y salir"
+
+#: main.cpp:66
+msgid "file to open"
+msgstr "archivo a abrir"
+
+#: main.cpp:92
+msgid "Memory leakage detection"
+msgstr "Detección de rotura de memória"
+
+#: main.cpp:96
+msgid "Compiled with the following settings:\n"
+msgstr "Compilado con las siguientes opciones:\n"
+
+#: dialogs/kmymoneysplittable.cpp:650 dialogs/ksplittransactiondlg.cpp:277
+#: main.cpp:98
+msgid "KMyMoney"
+msgstr "KMyMoney"
+
+#: main.cpp:104
+msgid "Initial idea, much initial source code, Project admin"
+msgstr "Idea inicial, mucho código fuente inicial, administrador del proyecto"
+
+#: main.cpp:105
+msgid "Core engine, Release Manager, Project admin"
+msgstr "Núcleo del programa, Gerente de Versiones, Administrador del Proyecto"
+
+#: main.cpp:106
+msgid "Reporting logic, OFX Import"
+msgstr "Lógica de los Informes, Importación OFX"
+
+#: main.cpp:107
+msgid "Database backend, maintainer stable branch"
+msgstr "Base de datos, responsable de la rama estable"
+
+#: main.cpp:108
+msgid "Forecast, Reports"
+msgstr "Pronóstico, Reportes"
+
+#: main.cpp:109
+msgid "Project Admin"
+msgstr "Administrador del Proyecto"
+
+#: main.cpp:110
+msgid "Developer"
+msgstr "Desarrollador"
+
+#: main.cpp:111
+msgid "Database backend"
+msgstr "Base de datos"
+
+#: main.cpp:113
+msgid "Initial investment support"
+msgstr "Soporte inicial de inversiones"
+
+#: main.cpp:114
+msgid "Developer & Artist"
+msgstr "Desarrollador y Artista"
+
+#: main.cpp:115
+msgid "Icons & splash screen"
+msgstr "Iconos y Splash screen"
+
+#: main.cpp:116 main.cpp:117
+msgid "Patches"
+msgstr "Parches"
+
+#: main.cpp:136
+msgid ""
+"The monetary decimal symbol is not correctly set in the KDE Control Center's "
+"Country/Region & Language settings. Please set it to a reasonable value and "
+"start KMyMoney again."
+msgstr ""
+"El símbolo decimal monetario no está correctamente configurado en la página "
+"de País/Región e Idioma del Centro de Control de KDE. Por favor, configúrelo "
+"con un valores razonable e inicie KMymoney de nuevo."
+
+#: main.cpp:136
+msgid "Invalid settings"
+msgstr "Configuración no válida"
+
+#: main.cpp:228
+msgid "Another instance of KMyMoney is already running. Do you want to quit?"
+msgstr "Se está ejecutando otra instancia de KMyMoney. Desea salir?"
+
+#: main.cpp:289
+msgid "Uncaught error. Please report the details to the developers"
+msgstr ""
+"Error no atrapado. Por favor reporte los detalles a los desarrolladores."
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Marcelino Villarino"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "mvillarino@gmail.com"
+
+#: dialogs/kcsvprogressdlg.cpp:62 dialogs/kimportdlg.cpp:66 rc.cpp:1
+msgid "&Import"
+msgstr "&Importar"
+
+#: rc.cpp:2
+msgid "E&xport"
+msgstr "E&xportar"
+
+#: rc.cpp:3
+msgid "&Institution"
+msgstr "Or&ganización"
+
+#: rc.cpp:4
+msgid "&Account"
+msgstr "&Cuenta"
+
+#: rc.cpp:5
+msgid "&Category"
+msgstr "&Categoría"
+
+#: rc.cpp:6
+msgid "&Transaction"
+msgstr "Asien&to"
+
+#: rc.cpp:7 rc.cpp:20
+msgid "Mark transaction as..."
+msgstr "Marcar el asiento como..."
+
+#: rc.cpp:8 rc.cpp:21
+msgid "Mark transaction"
+msgstr "Marcar asiento"
+
+#: rc.cpp:9
+msgid "T&ools"
+msgstr "Herramientas"
+
+#: rc.cpp:10
+msgid "Account options"
+msgstr "Opciones de Cuenta"
+
+#: rc.cpp:11
+msgid "Category options"
+msgstr "Opciones de categoría"
+
+#: rc.cpp:12
+msgid "Institution options"
+msgstr "Opciones de organización"
+
+#: rc.cpp:13
+msgid "Payee options"
+msgstr "Opciones de beneficiario"
+
+#: rc.cpp:14
+msgid "Budget options"
+msgstr "Opciones de presupuesto"
+
+#: rc.cpp:15
+msgid "Investment options"
+msgstr "Opciones de inversión"
+
+#: rc.cpp:16
+msgid "Scheduled transactions options"
+msgstr "Opciones de asientos planificados"
+
+#: rc.cpp:17
+msgid "Transaction options"
+msgstr "Opciones de asientos"
+
+#: rc.cpp:18
+msgid "Move transaction to..."
+msgstr "Mover asiento a..."
+
+#: rc.cpp:19
+msgid "Select account"
+msgstr "Escoger cuenta"
+
+#: rc.cpp:22
+msgid "Currency options"
+msgstr "Opciones de divisa"
+
+#: rc.cpp:24
+msgid "Always show a No. field in transaction form"
+msgstr ""
+"Mostrar siempre un campo Nº en el formulario de asiento de transacciones"
+
+#: rc.cpp:25
+msgid "Auto fill with previous transaction data"
+msgstr "Autocompletar con datos de transacciones previas"
+
+#: rc.cpp:26
+msgid "Treat two transactions as identical, if amount differs less than"
+msgstr "Tratar dos asientos como idénticos, si el monto difiere menos de"
+
+#: dialogs/settings/rc.cpp:144 rc.cpp:27
+msgid "Auto increment check number"
+msgstr "Autoincrementar el número de cheque"
+
+#: rc.cpp:28
+msgid "Autosave file periodically"
+msgstr "Autoguardar el archivo periodicamente"
+
+#: rc.cpp:29
+msgid "Autosave interval in minutes"
+msgstr "Intervalo de autoguardado en minutos"
+
+#: rc.cpp:30
+msgid "Check schedules upon startup"
+msgstr "Comprobar las transacciones programadas al arrancar"
+
+#: dialogs/settings/rc.cpp:171 rc.cpp:31
+msgid "Enter transactions this number of days in advance"
+msgstr "Introducir las transacciones con estos dias de antelación"
+
+#: dialogs/settings/rc.cpp:172 rc.cpp:32
+msgid "Number of days to preview schedules in ledger"
+msgstr "Número de días de vista previa de planificaciones en el libro mayor"
+
+#: dialogs/settings/rc.cpp:143 rc.cpp:33
+msgid "Insert transaction type into No. field for new transactions"
+msgstr "Insertar tipo de asiento en el campo Nº en los nuevos asientos"
+
+#: dialogs/settings/rc.cpp:145 rc.cpp:34
+msgid "Keep changes when selecting a different transaction/split"
+msgstr "Mantener los cambios al escoger otro asiento/partida"
+
+#: rc.cpp:35
+msgid "Using the Enter key moves between the fields"
+msgstr "La tecla Enter mueve entre los campos"
+
+#: dialogs/settings/rc.cpp:130 rc.cpp:36
+msgid "Use the ledger lens"
+msgstr "Usar la lupa del libro mayor"
+
+#: rc.cpp:37
+msgid "Price Precision"
+msgstr "Precisión del Precio"
+
+#: dialogs/rc.cpp:65 rc.cpp:38
+msgid "Update price history"
+msgstr "Actualizar historial de precios"
+
+#: dialogs/settings/rc.cpp:132 rc.cpp:39
+msgid "Show transaction form"
+msgstr "Mostrar el formulario de transacciones"
+
+#: rc.cpp:40
+msgid "Start with last selected view or homepage"
+msgstr "Iniciar con la última página escogida o la página de inicio"
+
+#: rc.cpp:41
+msgid "Use GPG to encrypt data file"
+msgstr "Utilizar GPG para codificar el archivo de datos"
+
+#: rc.cpp:42
+msgid "Also encrypt against recover key"
+msgstr "Codificar también con la clave de recuperación"
+
+#: rc.cpp:43
+msgid "GPG User ID (deprecated)"
+msgstr "ID de usuario GPG (caducado)"
+
+#: rc.cpp:44
+msgid "GPG User ID"
+msgstr "ID de usuario GPG"
+
+#: rc.cpp:45
+msgid "Run in expert (accountant) mode"
+msgstr "Correr en modo experto (contador)"
+
+#: rc.cpp:46
+msgid "Show splash screen during startup"
+msgstr "Mostrar pantalla de inicio al comenzar"
+
+#: rc.cpp:47
+msgid "Synchronize account in ledger and investment view"
+msgstr "Sincronizar las cuentas en el libro mayor y las inversiones"
+
+#: rc.cpp:48
+msgid "Icon size for view selection"
+msgstr "Tamaño de iconos para la selección de vistas"
+
+#: rc.cpp:49
+msgid "list of hidden views"
+msgstr "lista de vistas ocultas"
+
+#: rc.cpp:50
+msgid "Firsttime switch to start new user wizard"
+msgstr "La primera vez iniciar con el asistente de nuevo usuario"
+
+#: rc.cpp:51
+msgid "Show title bar on each view"
+msgstr "Mostrar la barra de título en cada vista"
+
+#: rc.cpp:52
+msgid "Start string matches for e.g. payees at start of string"
+msgstr "Coincidencias de texto inicial, por ej. pagadores al inicio del texto"
+
+#: rc.cpp:53
+msgid "Order of items on homepage"
+msgstr "Orden de los elementos en la página de inicio"
+
+#: rc.cpp:54
+msgid "Percentage of default font size used for home view HTML page"
+msgstr "Porcentaje del tamaño de letra utilizado para la página HTML de inicio"
+
+#: rc.cpp:55
+msgid "Remember (manually adjusted) font size in home view on program end."
+msgstr ""
+"Recordar el tamaño (ajustado manualmente) de la tipografía en la vista de "
+"inicio al salir."
+
+#: rc.cpp:56
+msgid "Show account limit information on the Homepage"
+msgstr "Mostrar información sobre el límite de cuentas en la página de inicio."
+
+#: rc.cpp:58
+msgid "Hide closed accounts"
+msgstr "Ocultar cuentas cerradas"
+
+#: rc.cpp:59
+msgid "Hide finished schedules"
+msgstr "Ocultar planificaciones finalizadas"
+
+#: rc.cpp:61
+msgid "Show all register entries in full detail"
+msgstr "Mostrar todas las entradas del registro con todo detalle"
+
+#: dialogs/settings/rc.cpp:129 rc.cpp:62
+msgid "Show a grid in the register"
+msgstr "Mostrar una rejilla en el registro"
+
+#: rc.cpp:63
+msgid "Show fancy group markers"
+msgstr "Mostrar marcadores de grupo estilizados"
+
+#: rc.cpp:64
+msgid "Show fancy markers for previous and current fiscal year"
+msgstr "Mostrar marcadores estilizados para el año fiscal previo y el actual"
+
+#: rc.cpp:65
+msgid "Starting month of the fiscal year"
+msgstr "Mes de inicio del año fiscal"
+
+#: rc.cpp:66
+msgid "Starting day of the fiscal year"
+msgstr "Fecha inicial del año fiscal"
+
+#: rc.cpp:67
+msgid "Start date"
+msgstr "Fecha de comienzo"
+
+#: dialogs/settings/rc.cpp:9 rc.cpp:68
+msgid "Use system colors"
+msgstr "Usar los colores del sistema"
+
+#: rc.cpp:69
+msgid "List color"
+msgstr "Color de la lista"
+
+#: rc.cpp:70
+msgid "List background color"
+msgstr "Color del fondo de la lista"
+
+#: rc.cpp:71
+msgid "List grid color"
+msgstr "Color de la rejilla de la lista"
+
+#: rc.cpp:72
+msgid "Background color for imported transactions"
+msgstr "Color del fondo de asientos importados"
+
+#: rc.cpp:73
+msgid "Background color for matched transactions"
+msgstr "Color del fondo de asientos coincidentes"
+
+#: rc.cpp:74
+msgid "List color for erronous transactions"
+msgstr "Color de la lista para asientos con error"
+
+#: rc.cpp:75
+msgid "List color for missing conversion rate"
+msgstr "Color de la lista para datos faltantes de conversión"
+
+#: rc.cpp:76
+msgid "List color for negative values"
+msgstr "Color de la lista para valores negativos"
+
+#: rc.cpp:77
+msgid "Background color for group marker"
+msgstr "Color del fondo para marcador de grupo"
+
+#: rc.cpp:78
+msgid "Background color for required fields"
+msgstr "Color del fondo para campos requeridos"
+
+#: rc.cpp:79
+msgid "Use system font"
+msgstr "Usar tipos de letra del sistema"
+
+#: dialogs/settings/rc.cpp:21 rc.cpp:80
+msgid "Cell font"
+msgstr "Tipo de letra de las celdillas"
+
+#: dialogs/settings/rc.cpp:22 rc.cpp:81
+msgid "Header font"
+msgstr "Tipo de letra del encabezado"
+
+#: rc.cpp:82 rc.cpp:83
+msgid "Sort order of register in normal view"
+msgstr "Orden del registro en la vista normal"
+
+#: rc.cpp:84
+msgid "Sort order of register in search dialog"
+msgstr "Orden del registro en el diálogo de búsqueda"
+
+#: rc.cpp:85
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation"
+msgstr ""
+"Estado predeterminado de los asientos ingresados durante la reconciliación"
+
+#: rc.cpp:86
+msgid "Number of days (plus/minus) to search for matching transactions"
+msgstr "Número de días (más/menos) para buscar asientos coincidentes"
+
+#: rc.cpp:87
+msgid "During import, ask for a new payee's default category"
+msgstr ""
+"Al importar, preguntar por la categoría predeterminada de un nuevo pagador"
+
+#: rc.cpp:88
+msgid "Method to calculate forecast"
+msgstr "Método para calcular el pronóstico"
+
+#: rc.cpp:89
+msgid "Days to forecast"
+msgstr "Días a pronosticar"
+
+#: rc.cpp:90
+msgid "Days of normal account cycle"
+msgstr "Días de un ciclo de cuenta normal"
+
+#: rc.cpp:91
+msgid "Number of historic cycles to use in forecast"
+msgstr "Número de ciclos históricos a utilizar en el pronóstico"
+
+#: rc.cpp:92
+msgid "Day of month to start forecast"
+msgstr "Día del mes a comenzar el pronóstico"
+
+#: rc.cpp:93
+msgid "Method to calculate history-based forecast"
+msgstr "Método para calcular el pronóstico histórico"
+
+#: rc.cpp:94
+msgid "Skip opening date when fetching transactions"
+msgstr "Saltear la fecha de apertura al buscar asientos"
+
+#: rc.cpp:95
+msgid "Include future transaction when using Schedule Forecast"
+msgstr "Incluir asientos futuros al utilzar el pronóstico por planificaciones"
+
+#: rc.cpp:96
+msgid "Include scheduled transactions when using Schedule Forecast"
+msgstr ""
+"Incluir asientos planificador al utilizar el pronóstico por planificaciones"
+
+#: rc.cpp:97
+msgid "additional names for cash account"
+msgstr "nombres adicionales para cuenta de tesorería"
+
+#: rc.cpp:98
+msgid "additional names for checking account"
+msgstr "nombres adicionales para cuenta corriente"
+
+#: rc.cpp:99
+msgid "additional names for credit card account"
+msgstr "nombres adicionales para cuenta de tarjeta de crédito"
+
+#: rc.cpp:100
+msgid "additional names for asset account"
+msgstr "nombres adicionales para cuenta de activo"
+
+#: rc.cpp:101
+msgid "additional names for opening balance payee"
+msgstr "nombres adicionales para el beneficiario del saldo de apertura"
+
+#: rc.cpp:102
+msgid "additional names for invoice accounts"
+msgstr "nombres adicionales para cuentas de facturación"
+
+#: rc.cpp:103 widgets/rc.cpp:161 widgets/rc.cpp:163
+msgid "..."
+msgstr "..."
+
+#: views/kcategoriesview.cpp:276
+msgid "Profit: "
+msgstr "Beneficio: "
+
+#: views/kcategoriesview.cpp:278
+msgid "Loss: "
+msgstr "Pérdidas: "
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:54
+#: dialogs/transactioneditor.cpp:605 views/kpayeesview.cpp:365
+#: widgets/kmymoneyonlinequoteconfig.cpp:54
+msgid "Accepts the entered data and stores it"
+msgstr "Acepta los datos introducidos y los guarda"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:55 views/kpayeesview.cpp:366
+#: widgets/kmymoneyonlinequoteconfig.cpp:55
+msgid "Use this to accept the modified data."
+msgstr "Use esto para aceptar los datos modificados."
+
+#: views/kpayeesview.cpp:491
+msgid ""
+"A payee with the name '%1' already exists. It is not advisable to have "
+"multiple payees with the same identification name. Are you sure you would "
+"like to rename the payee?"
+msgstr ""
+"Ya existe un pagador con el nombre '%1'. No es recomendable tener múltiples "
+"pagadores con el mismo nombre de identificación. ¿Está seguro que desea "
+"renombrar el pagador?"
+
+#: views/kpayeesview.cpp:518 views/kpayeesview.cpp:869
+msgid "Unable to modify payee"
+msgstr "No fue posible modificar el beneficiario"
+
+#: views/kpayeesview.cpp:564
+msgid "Do you want to save the changes for <b>%1</b>?"
+msgstr "¿Desea guardar los cambios para <b>%1</b>?"
+
+#: views/kbudgetview.cpp:490 views/kpayeesview.cpp:565
+msgid "Save changes"
+msgstr "Guardar cambios"
+
+#: views/kgloballedgerview.cpp:737 views/kpayeesview.cpp:662
+#: views/kpayeesview.cpp:753
+#, c-format
+msgid "Balance: %1"
+msgstr "Saldo: %1"
+
+#: views/kpayeesview.cpp:725 views/kpayeesview.cpp:731
+#, c-format
+msgid "Amortization of %1"
+msgstr "Amortización de %1"
+
+#: views/kpayeesview.cpp:727 views/kpayeesview.cpp:733
+#, c-format
+msgid "Payment to %1"
+msgstr "Pago de %1"
+
+#: views/kpayeesview.cpp:736
+#, c-format
+msgid "Loan payment from %1"
+msgstr "Pagar préstamo con %1"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:123
+#: dialogs/kconfirmmanualenterdlg.cpp:133 views/kpayeesview.cpp:745
+#: widgets/kmymoneycategory.cpp:160 widgets/kmymoneycategory.cpp:166
+#: widgets/transaction.cpp:851 widgets/transaction.cpp:1397
+#: widgets/transaction.cpp:1411
+msgid ""
+"_: Split transaction (category replacement)\n"
+"Split transaction"
+msgstr "Asiento con múltiples partidas"
+
+#: views/kreportsview.cpp:262
+msgid ""
+"There was an error creating your report: \"%1\".\n"
+"Please report this error to the developer's list: kmymoney2-developer@lists."
+"sourceforge.net"
+msgstr ""
+"Ha ocurrido un erro al crear su informe:\"%1\".\n"
+"Por favor informe de este error a la lista de correo de desarrolladores: "
+"kmymoney2-developer@lists.sourceforge.net"
+
+#: views/kreportsview.cpp:264
+msgid "Critical Error"
+msgstr "Error Crítico"
+
+#: views/kreportsview.cpp:268
+msgid "Unable to generate report"
+msgstr "No ha sido posible generar el informe"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:125 views/kreportsview.cpp:286
+#: views/rc.cpp:53 widgets/rc.cpp:146
+msgid "Chart"
+msgstr "Gráfico"
+
+#: views/kreportsview.cpp:287 widgets/rc.cpp:147
+msgid "Show the chart version of this report"
+msgstr "Mostrar la versión gráfica de este informe"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:112 views/khomeview.cpp:900
+#: views/kreportsview.cpp:294 views/kreportsview.cpp:328
+msgid "Report"
+msgstr "Informe"
+
+#: views/kreportsview.cpp:295
+msgid "Show the report version of this chart"
+msgstr "Mostrar la versión informe de este gráfico"
+
+#: views/kmymoneyview.cpp:236 views/kreportsview.cpp:314
+#: views/kreportsview.cpp:326
+msgid "Reports"
+msgstr "Informes"
+
+#: views/khomeview.cpp:902 views/kreportsview.cpp:329 widgets/rc.cpp:56
+msgid "Comment"
+msgstr "Comentario"
+
+#: views/kreportsview.cpp:432
+msgid "Charts"
+msgstr "Gráficos"
+
+#: views/khomeview.cpp:897 views/kreportsview.cpp:470
+msgid "Favorite Reports"
+msgstr "Informes Favoritos"
+
+#: views/kreportsview.cpp:486
+msgid "Old Customized Reports"
+msgstr "Informes Personalizados Viejos"
+
+#: views/kreportsview.cpp:579
+msgid "Include Stylesheet"
+msgstr "Incluir Hoja de Estilos"
+
+#: views/kreportsview.cpp:585
+msgid ""
+"_: CSV (Filefilter)\n"
+"CSV files"
+msgstr "Archivos CSV"
+
+#: views/kreportsview.cpp:586
+msgid ""
+"_: HTML (Filefilter)\n"
+"HTML files"
+msgstr "Archivos HTML"
+
+#: views/kreportsview.cpp:591
+msgid "Export as"
+msgstr "Exportar como"
+
+#: views/kreportsview.cpp:619 views/kreportsview.cpp:660
+#: views/kreportsview.cpp:942 views/kreportsview.cpp:950
+#: views/kreportsview.cpp:958 views/kreportsview.cpp:968
+#: views/kreportsview.cpp:980 views/kreportsview.cpp:998
+#: views/kreportsview.cpp:1006 views/kreportsview.cpp:1014
+#: views/kreportsview.cpp:1022 views/kreportsview.cpp:1034
+#: views/kreportsview.cpp:1046 views/kreportsview.cpp:1056
+#: views/kreportsview.cpp:1070 views/kreportsview.cpp:1079
+#: views/kreportsview.cpp:1087 views/kreportsview.cpp:1095
+#: views/kreportsview.cpp:1103 views/kreportsview.cpp:1111
+#: views/kreportsview.cpp:1120 views/kreportsview.cpp:1132
+#: views/kreportsview.cpp:1145 views/kreportsview.cpp:1155
+#: views/kreportsview.cpp:1165 views/kreportsview.cpp:1175
+#: views/kreportsview.cpp:1185 views/kreportsview.cpp:1195
+#: views/kreportsview.cpp:1208 views/kreportsview.cpp:1222
+#: views/kreportsview.cpp:1239 views/kreportsview.cpp:1257
+#: views/kreportsview.cpp:1273 views/kreportsview.cpp:1295
+#: views/kreportsview.cpp:1304 views/kreportsview.cpp:1313
+#: views/kreportsview.cpp:1322 views/kreportsview.cpp:1336
+#: views/kreportsview.cpp:1347 views/kreportsview.cpp:1362
+#: views/kreportsview.cpp:1372 views/kreportsview.cpp:1383
+#: views/kreportsview.cpp:1393 views/kreportsview.cpp:1404
+#: views/kreportsview.cpp:1423 views/kreportsview.cpp:1432
+#: views/kreportsview.cpp:1444 views/kreportsview.cpp:1463
+#: views/kreportsview.cpp:1472 views/kreportsview.cpp:1481
+#: views/kreportsview.cpp:1490
+msgid "Default Report"
+msgstr "Informe de Serie"
+
+#: views/kreportsview.cpp:621 views/kreportsview.cpp:661
+msgid "Custom Report"
+msgstr "Informe Personalizado"
+
+#: views/kreportsview.cpp:622
+msgid " (Customized)"
+msgstr "(Personalizado)"
+
+#: views/kreportsview.cpp:690
+msgid ""
+"Are you sure you want to delete report <b>%1</b>? There is no way to "
+"recover it!"
+msgstr ""
+"¿Está seguro que desea borrar el reporte <b>%1</b>? ¡No hay forma de "
+"recuperarlo!"
+
+#: views/kreportsview.cpp:690 views/kreportsview.cpp:702
+msgid "Delete Report?"
+msgstr "¿Borrar Informe?"
+
+#: views/kreportsview.cpp:702
+msgid "Sorry, <b>%1</b> is a default report. You may not delete it."
+msgstr "Perdón, <b>%1</b> es un informe de serie. No es posible borrarlo."
+
+#: views/kreportsview.cpp:882
+msgid "&Open"
+msgstr "&Abrir"
+
+#: views/kreportsview.cpp:884
+msgid "&New report"
+msgstr "&Nuevo Informe"
+
+#: views/kreportsview.cpp:934
+msgid "Income and Expenses"
+msgstr "Ingresos y Gastos"
+
+#: views/kreportsview.cpp:941
+msgid "Income and Expenses This Month"
+msgstr "Ingresos y Gastos este Mes"
+
+#: views/kreportsview.cpp:949
+msgid "Income and Expenses This Year"
+msgstr "Ingresos y Gastos este Año"
+
+#: views/kreportsview.cpp:957
+msgid "Income and Expenses By Year"
+msgstr "Ingresos y Gastos Por Año"
+
+#: views/kreportsview.cpp:967
+msgid "Income and Expenses Graph"
+msgstr "Gráfico de Ingresos y Gastos"
+
+#: views/kreportsview.cpp:979
+msgid "Income and Expenses Pie Chart"
+msgstr "Gráfico de Torta de Ingresos y Gastos"
+
+#: views/khomeview.cpp:1361 views/kreportsview.cpp:990
+msgid "Net Worth"
+msgstr "Valor Neto"
+
+#: views/kreportsview.cpp:997
+msgid "Net Worth By Month"
+msgstr "Valor Neto por Mes"
+
+#: views/kreportsview.cpp:1005
+msgid "Net Worth Today"
+msgstr "Valor Neto Hoy"
+
+#: views/kreportsview.cpp:1013
+msgid "Net Worth By Year"
+msgstr "Valor Neto por Año"
+
+#: views/kreportsview.cpp:1021
+msgid "7-day Cash Flow Forecast"
+msgstr "Flujo de Caja de los próximos 7 días"
+
+#: views/kreportsview.cpp:1033
+msgid "Net Worth Graph"
+msgstr "Gráfico de Valor Neto"
+
+#: views/kreportsview.cpp:1045
+msgid "Account Balances by Institution"
+msgstr "Balances de Cuenta por Organización"
+
+#: views/kreportsview.cpp:1055
+msgid "Account Balances by Type"
+msgstr "Balances de Cuenta por Tipo"
+
+#: views/kreportsview.cpp:1069
+msgid "Transactions by Account"
+msgstr "Asientos por Cuenta"
+
+#: views/kreportsview.cpp:1078
+msgid "Transactions by Category"
+msgstr "Asientos por Categoria"
+
+#: views/kreportsview.cpp:1086
+msgid "Transactions by Payee"
+msgstr "Asientos por Beneficiario"
+
+#: views/kreportsview.cpp:1094
+msgid "Transactions by Month"
+msgstr "Asientos por Mes"
+
+#: views/kreportsview.cpp:1102
+msgid "Transactions by Week"
+msgstr "Asientos por Semana"
+
+#: views/kreportsview.cpp:1110
+msgid "Loan Transactions"
+msgstr "Asientos de Préstamos"
+
+#: views/kreportsview.cpp:1119
+msgid "Transactions by Reconciliation Status"
+msgstr "Asientos por Estado de Reconciliación"
+
+#: views/kreportsview.cpp:1125
+msgid "Cash Flow"
+msgstr "Flujo de Caja"
+
+#: views/kreportsview.cpp:1131
+msgid "Cash Flow Transactions This Month"
+msgstr "Asientos de Flujo de Caja Este Mes"
+
+#: views/kmymoneyview.cpp:226 views/kmymoneyview.cpp:228
+#: views/kreportsview.cpp:1137
+msgid "Investments"
+msgstr "Inversiones"
+
+#: views/kreportsview.cpp:1154
+msgid "Investment Holdings by Account"
+msgstr "Participaciones de la Inversión por Cuenta"
+
+#: views/kreportsview.cpp:1164
+msgid "Investment Holdings by Type"
+msgstr "Participaciones de la Inversión por Tipo"
+
+#: views/kreportsview.cpp:1184
+msgid "Investment Performance by Type"
+msgstr "Rendimiento de la Inversión por Tipo"
+
+#: views/kreportsview.cpp:1194
+msgid "Investment Holdings Pie"
+msgstr "Gráfico de Torta de Inversiones en Cartera"
+
+#: views/kreportsview.cpp:1207
+msgid "Investment Worth Graph"
+msgstr "Gráfico de Inversiones"
+
+#: views/kreportsview.cpp:1221
+msgid "Investment Price Graph"
+msgstr "Gráfico de Precio de Inversiones"
+
+#: views/kreportsview.cpp:1238
+msgid "Investment Moving Average Price Graph"
+msgstr "Gráfico de Precio Promedio Móvil de Inversiones"
+
+#: views/kreportsview.cpp:1256
+msgid "Investment Moving Average"
+msgstr "Promedio Móvil del Valor de Inversiones"
+
+#: views/kreportsview.cpp:1272
+msgid "Investment Moving Average vs Actual"
+msgstr "Promedio Móvil vs Valor Real de Inversiones"
+
+#: views/kreportsview.cpp:1287
+msgid "Taxes"
+msgstr "Impuestos"
+
+#: views/kreportsview.cpp:1294
+msgid "Tax Transactions by Category"
+msgstr "Asientos de Impuestos por Categoria"
+
+#: views/kreportsview.cpp:1303
+msgid "Tax Transactions by Payee"
+msgstr "Asientos de Impuestos por Beneficiario"
+
+#: views/kreportsview.cpp:1312
+msgid "Tax Transactions by Category Last Fiscal Year"
+msgstr "Asientos de Impuestos por Categoria del Último Año Fiscal"
+
+#: views/kreportsview.cpp:1321
+msgid "Tax Transactions by Payee Last Fiscal Year"
+msgstr "Asientos de Impuestos por Beneficiario del Último Año Fiscal"
+
+#: views/kreportsview.cpp:1328
+msgid "Budgeting"
+msgstr "Presupuestos"
+
+#: views/kreportsview.cpp:1335
+msgid "Budgeted vs. Actual This Year"
+msgstr "Presupuesto vs Real Este Año"
+
+#: views/kreportsview.cpp:1346
+msgid "Budgeted vs. Actual This Year (YTM)"
+msgstr "Presupuesto vs Real Este Año"
+
+#: views/khomeview.cpp:1383 views/kreportsview.cpp:1361
+msgid "Monthly Budgeted vs. Actual"
+msgstr "Presupuestado vs Real Mensualmente"
+
+#: views/kreportsview.cpp:1371
+msgid "Yearly Budgeted vs. Actual"
+msgstr "Presupuesto vs Real Anualmente"
+
+#: views/kreportsview.cpp:1382
+msgid "Monthly Budget"
+msgstr "Presupuesto Mensual"
+
+#: views/kreportsview.cpp:1392
+msgid "Yearly Budget"
+msgstr "Presupuesto Anual"
+
+#: views/kreportsview.cpp:1403
+msgid "Yearly Budgeted vs Actual Graph"
+msgstr "Gráfico Anual de Presupuesto vs Real"
+
+#: views/kreportsview.cpp:1422
+msgid "Forecast By Month"
+msgstr "Pronóstico Mensual"
+
+#: views/kreportsview.cpp:1431
+msgid "Forecast Next Quarter"
+msgstr "Pronóstico del Próximo Trimestre"
+
+#: views/kreportsview.cpp:1443
+msgid "Net Worth Forecast Graph"
+msgstr "Gráfico de Pronóstico del Valor Neto"
+
+#: dialogs/rc.cpp:126 dialogs/rc.cpp:128 dialogs/rc.cpp:466
+#: views/kreportsview.cpp:1455
+msgid "General Information"
+msgstr "Información general"
+
+#: views/kreportsview.cpp:1462
+msgid "Schedule Information"
+msgstr "Información de Planificaciones"
+
+#: views/kreportsview.cpp:1471
+msgid "Schedule Summary Information"
+msgstr "Resumen de Planificaciones"
+
+#: views/kreportsview.cpp:1480
+msgid "Account Information"
+msgstr "Información de Cuentas"
+
+#: views/kreportsview.cpp:1489
+msgid "Loan Information"
+msgstr "Información de Préstamos"
+
+#: dialogs/rc.cpp:323 views/kmymoneyview.cpp:148 views/kmymoneyview.cpp:150
+msgid "Institutions"
+msgstr "Organizaciones"
+
+#: dialogs/knewaccountdlg.cpp:98 views/kmymoneyview.cpp:162
+#: views/kmymoneyview.cpp:164 widgets/rc.cpp:4 widgets/rc.cpp:94
+msgid "Accounts"
+msgstr "Cuentas"
+
+#: views/kmymoneyview.cpp:176
+msgid "Bills & Reminders"
+msgstr "Recibos y Recordatorios"
+
+#: views/kmymoneyview.cpp:178
+msgid "Scheduled transactions"
+msgstr "Asientos Planificados"
+
+#: dialogs/knewaccountdlg.cpp:98 dialogs/rc.cpp:193 views/kmymoneyview.cpp:188
+#: views/kmymoneyview.cpp:190 widgets/rc.cpp:91
+msgid "Categories"
+msgstr "Categorías"
+
+#: dialogs/kfindtransactiondlg.cpp:212 dialogs/rc.cpp:318
+#: views/kmymoneyview.cpp:199 views/kmymoneyview.cpp:201 widgets/rc.cpp:93
+msgid "Payees"
+msgstr "Beneficiarios"
+
+#: views/kgloballedgerview.cpp:149 views/kmymoneyview.cpp:211
+msgid "Ledgers"
+msgstr "Libros mayores"
+
+#: views/kmymoneyview.cpp:353
+msgid "Creating transactions can only be performed in the ledger view"
+msgstr "La creación de asientos sólo puede realizarse en el libro mayor"
+
+#: views/kmymoneyview.cpp:367
+msgid "Modifying transactions can only be performed in the ledger view"
+msgstr "La modificación de asientos sólo puede realizarse en el libro mayor"
+
+#: views/kmymoneyview.cpp:382
+msgid "Duplicating transactions can only be performed in the ledger view"
+msgstr "La duplicación de asientos sólo puede realizarse en el libro mayor"
+
+#: views/kmymoneyview.cpp:394
+msgid "Edit the current selected transactions"
+msgstr "Editar los asientos seleccionados"
+
+#: views/kmymoneyview.cpp:602
+msgid "<b>%1</b> is not a KMyMoney file."
+msgstr "<b>%1</b> no es un archivo de KMyMoney."
+
+#: views/kmymoneyview.cpp:643
+msgid "GPG is not available for decryption of file <b>%1</b>"
+msgstr "GPG no está disponible para descifrar el archivo <b>%1</b>"
+
+#: views/kmymoneyview.cpp:721
+msgid ""
+"File <b>%1</b> contains the old binary format used by KMyMoney. Please use "
+"an older version of KMyMoney (0.8.x) that still supports this format to "
+"convert it to the new XML based format."
+msgstr ""
+"El archivo <b>%1</b> contiene el viejo formato binario utilizado por "
+"KMyMoney. Por favor, utilice una versión vieja de KMyMoney (0.8.x) que "
+"todavía soporte este formato para convertirlo al nuevo formato basado en XML."
+
+#: views/kmymoneyview.cpp:723
+msgid "File <b>%1</b> contains an unknown file format!"
+msgstr "¡El archivo <b>%1</b> está en un formato desconocido!"
+
+#: views/kmymoneyview.cpp:728
+msgid "Cannot read from file <b>%1</b>!"
+msgstr "¡No se pudo leer el archivo <b>%1</b>!"
+
+#: views/kmymoneyview.cpp:732
+msgid "Cannot load file <b>%1</b>. Reason: %2"
+msgstr "No se pudo cargar el archivo <b>%1</b>. Razón: %2"
+
+#: views/kmymoneyview.cpp:742 views/kmymoneyview.cpp:748
+msgid "File <b>%1</b> not found!"
+msgstr "¡Archivo <b>%1</b> no encontrado!"
+
+#: views/kmymoneyview.cpp:812
+msgid "Can't open database %1\n"
+msgstr "No se pudo abrir base de datos %1\n"
+
+#: views/kmymoneyview.cpp:844
+msgid "An unrecoverable error occurred while reading the database"
+msgstr "Ha ocurrido un error irrecuperable mientras leía la base de datos"
+
+#: views/kmymoneyview.cpp:846 views/kmymoneyview.cpp:1208
+msgid "Database malfunction"
+msgstr "Desperfecto en la base de datos"
+
+#: views/kmymoneyview.cpp:938
+msgid "Unknown fix level in input file"
+msgstr "Fix level desconocido en el archivo de ingreso"
+
+#: views/kmymoneyview.cpp:984
+msgid ""
+"GPG does not seem to be installed on your system. Please make sure, that GPG "
+"can be found using the standard search path. This time, encryption is "
+"disabled."
+msgstr ""
+"Parece que GPG no está instalado en su sistema. Asegúrese de que GPG está "
+"localizado en una ruta estándar. Por ahora, no es posible cifrar."
+
+#: views/kmymoneyview.cpp:984
+msgid "GPG not found"
+msgstr "GPG no encontrado"
+
+#: views/kmymoneyview.cpp:991
+msgid ""
+"You have selected to encrypt your data also with the KMyMoney recover key, "
+"but the key with id</p><p><center><b>%1</b></center></p>has not been found "
+"in your keyring at this time. Please make sure to import this key into your "
+"keyring. You can find it on the <a href=\"http://kmymoney2.sourceforge.net/"
+"\">KMyMoney web-site</a>. This time your data will not be encrypted with the "
+"KMyMoney recover key."
+msgstr ""
+"Ha escogido cifrar sus datos también con la llave de recuperación de "
+"KMyMoney, pero la llave con id </p><p><center><b>%1</b></center></p> no ha "
+"sido encontrada en su anillo de confianza. Asegúrese de importar esta llave "
+"a su anillo de confianza. Puede encontrarla en <a href=\"http://kmymoney2."
+"sourceforge.net/\">la página web de KMyMoney</a>. Por ahora sus datos no "
+"serán cifrados con la llave de recuperación de KMyMoney."
+
+#: views/kmymoneyview.cpp:991 views/kmymoneyview.cpp:1000
+msgid "GPG-Key not found"
+msgstr "Llave GPG no encontrada"
+
+#: views/kmymoneyview.cpp:1000
+msgid ""
+"You have specified to encrypt your data for the user-id</p><p><center><b>%1</"
+"b>.</center></p>Unfortunately, a valid key for this user-id was not found in "
+"your keyring. Please make sure to import a valid key for this user-id. This "
+"time, encryption is disabled."
+msgstr ""
+"Ha escogido cifrar sus datos para el user-id </p><p><center><b>%1</b>.</"
+"center></p>. Desafortunadamente, no se ha encontrado una llave para este "
+"user-id en su anillo de confianza. Asegúrese de importar una llave válida "
+"para este user-id. Por ahora, no se permite cifrar."
+
+#: views/kmymoneyview.cpp:1006
+msgid ""
+"You have configured to save your data in encrypted form using GPG. Please be "
+"aware, that this is a brand new feature which is yet untested. Make sure, "
+"you have the necessary understanding that you might loose all your data if "
+"you store it encrypted and cannot decrypt it later on! If unsure, answer "
+"<b>No</b>."
+msgstr ""
+"Ha configurado el sistema para guardar sus datos cifrados mediante GPG. Se "
+"le advierte de que esta es una característica nueva aún poco probada. ¡Sea "
+"consciente de que puede perder todos sus datos en el caso de guardarlos "
+"cifrados y posteriormente no poder descifrarlos! Si no está seguro, conteste "
+"<b>No</b>."
+
+#: views/kmymoneyview.cpp:1008
+msgid "Store GPG encrypted"
+msgstr "Guardar cifrado con GPG"
+
+#: views/kmymoneyview.cpp:1038 views/kmymoneyview.cpp:1052
+msgid "Unable to open file '%1' for writing."
+msgstr "No fue posible abrir el archivo '%1' para escritura."
+
+#: views/kmymoneyview.cpp:1065 views/kmymoneyview.cpp:1074
+msgid "Failure while writing to '%1'"
+msgstr "Fallo durante la escritura a '%1'"
+
+#: views/kmymoneyview.cpp:1086 views/kmymoneyview.cpp:1181
+msgid "Tried to access a file when it's not open"
+msgstr "Intentó acceder a un archivo cuando este no estaba abierto"
+
+#: views/kmymoneyview.cpp:1092
+msgid ""
+"Since this version of KMyMoney only writes data files in its new format, "
+"files written with this version cannot be read by KMyMoney version 0.4. If "
+"you still want to use older versions of KMyMoney with your data files, "
+"please make sure you keep a backup-file of your finance data. If you want to "
+"abort this operation, please press Cancel now"
+msgstr ""
+"Ya que esta versión de KMyMoney solo escribe archivos de datos en su nuevo "
+"formato, los escritos con esta versión no pueden ser leídos por KMyMoney "
+"versión 0.4. Si aún desea usar versiones anteriores de KMyMoney con sus "
+"archivos de datos, por favor, asegúrese de mantener un archivo de seguridad "
+"de sus datos financieros. Si desea abortar esta operación, pulse Cancelar "
+"ahora"
+
+#: views/kmymoneyview.cpp:1122
+msgid "Malformed URL '%1'"
+msgstr "URL mal formada '%1'"
+
+#: views/kmymoneyview.cpp:1192
+msgid ""
+"Database contains data which must be removed before using SaveAs.\n"
+"Do you wish to continue?"
+msgstr ""
+"La base de datos contiene datos que deben ser eliminados antes de utilizar "
+"Guardar Como\n"
+"¿Desea continuar?"
+
+#: views/kmymoneyview.cpp:1205
+msgid ""
+"An unrecoverable error occurred while writing to the database.\n"
+"It may well be corrupt."
+msgstr ""
+"Se ha producido un error irrecuperable al escribir en la base de datos.\n"
+"Puede estar corrupta."
+
+#: views/kmymoneyview.cpp:1215
+msgid ""
+"Can't open or create database %1\n"
+"Retry SaveAsDatabase and click Help for further info"
+msgstr ""
+"No se puede abrir o crear la base de datos %1\n"
+"Reintente Guardar Como Base de Datos y apriete Ayuda para más información"
+
+#: views/kmymoneyview.cpp:1354
+msgid "Afghanistan Afghani"
+msgstr "Afganí afgano (AFN)"
+
+#: views/kmymoneyview.cpp:1355
+msgid "Albanian Lek"
+msgstr "Lek albano (ALL)"
+
+#: views/kmymoneyview.cpp:1356
+msgid "Netherland Antillian Guilder"
+msgstr "Guilder de la Antilla holandesa"
+
+#: views/kmymoneyview.cpp:1357
+msgid "Algerian Dinar"
+msgstr "Dinar argelino (DZD)"
+
+#: views/kmymoneyview.cpp:1358
+msgid "Andorran Franc"
+msgstr "Franco andorrano"
+
+#: views/kmymoneyview.cpp:1359
+msgid "Andorran Peseta"
+msgstr "Peseta andorrana"
+
+#: views/kmymoneyview.cpp:1360
+msgid "Angolan New Kwanza"
+msgstr "Nuevo Kwanza angoleño (AOA)"
+
+#: views/kmymoneyview.cpp:1361
+msgid "Argentine Peso"
+msgstr "Peso argentino (ARS)"
+
+#: views/kmymoneyview.cpp:1362
+msgid "Aruban Florin"
+msgstr "Florín arubeño (AWG)"
+
+#: views/kmymoneyview.cpp:1363
+msgid "Australian Dollar"
+msgstr "Dólar australiano (AUD)"
+
+#: views/kmymoneyview.cpp:1364
+msgid "Azerbaijani Manat"
+msgstr "Manat azerbajo(AZM)"
+
+#: views/kmymoneyview.cpp:1365
+msgid "Bahamian Dollar"
+msgstr "Dólar bahamés (BSD)"
+
+#: views/kmymoneyview.cpp:1366
+msgid "Bahraini Dinar"
+msgstr "Dinar de Bahréin (BHD)"
+
+#: views/kmymoneyview.cpp:1367
+msgid "Bangladeshi Taka"
+msgstr "Taka bangladeshí (BDT)"
+
+#: views/kmymoneyview.cpp:1368
+msgid "Barbados Dollar"
+msgstr "Dólar de Barbados (BBD)"
+
+#: views/kmymoneyview.cpp:1369
+msgid "Belarussian Ruble"
+msgstr "Rublo bieloruso (BYR)"
+
+#: views/kmymoneyview.cpp:1370
+msgid "Belize Dollar"
+msgstr "Dólar de Belize (BZD)"
+
+#: views/kmymoneyview.cpp:1371
+msgid "Bermudian Dollar"
+msgstr "Dólar de Bermuda (BMD)"
+
+#: views/kmymoneyview.cpp:1372
+msgid "Bhutan Ngultrum"
+msgstr "Ngultrum de Bhután (BTN)"
+
+#: views/kmymoneyview.cpp:1373
+msgid "Bolivian Boliviano"
+msgstr "Boliviano de Bolivia (BOB)"
+
+#: views/kmymoneyview.cpp:1374
+msgid "Bosnian Convertible Mark"
+msgstr "Marco Bosnio-Herzegovino Convertible (BAM)"
+
+#: views/kmymoneyview.cpp:1375
+msgid "Botswana Pula"
+msgstr "Pula botswanés (BWP)"
+
+#: views/kmymoneyview.cpp:1376
+msgid "Brazilian Real"
+msgstr "Real brasileño (BRL)"
+
+#: views/kmymoneyview.cpp:1377
+msgid "British Pound"
+msgstr "Libra estelina (GBP)"
+
+#: views/kmymoneyview.cpp:1378
+msgid "Brunei Dollar"
+msgstr "Dólar de Brunei (BND)"
+
+#: views/kmymoneyview.cpp:1379
+msgid "Bulgarian Lev"
+msgstr "Lev búlgaro (BGN)"
+
+#: views/kmymoneyview.cpp:1380
+msgid "Burundi Franc"
+msgstr "Franco de Burundi (BIF)"
+
+#: views/kmymoneyview.cpp:1381
+msgid "CFA Franc BEAC"
+msgstr "Franco CFA BEAC (XAF)"
+
+#: views/kmymoneyview.cpp:1382
+msgid "CFA Franc BCEAO"
+msgstr "Franco CFA BCEAO (XOF)"
+
+#: views/kmymoneyview.cpp:1383
+msgid "CFP Franc Pacifique"
+msgstr "Franco CFP polinesio (XPF)"
+
+#: views/kmymoneyview.cpp:1384
+msgid "Cambodia Riel"
+msgstr "Riel camboyano (KHR)"
+
+#: views/kmymoneyview.cpp:1385
+msgid "Canadian Dollar"
+msgstr "Dólar canadiense (CAD)"
+
+#: views/kmymoneyview.cpp:1386
+msgid "Cape Verde Escudo"
+msgstr "Escudo caboverdiano (CVE)"
+
+#: views/kmymoneyview.cpp:1387
+msgid "Cayman Islands Dollar"
+msgstr "Dólar de las Islas Caimán (KYD)"
+
+#: views/kmymoneyview.cpp:1388
+msgid "Chilean Peso"
+msgstr "Peso chileno (CLP)"
+
+#: views/kmymoneyview.cpp:1389
+msgid "Chinese Yuan Renminbi"
+msgstr "Yuan Renminbi chino (CNY)"
+
+#: views/kmymoneyview.cpp:1390
+msgid "Colombian Peso"
+msgstr "Peso colombiano (COP)"
+
+#: views/kmymoneyview.cpp:1391
+msgid "Comoros Franc"
+msgstr "Franco de las Comoras (KMF)"
+
+#: views/kmymoneyview.cpp:1392
+msgid "Costa Rican Colon"
+msgstr "Colón costarricense (CRC)"
+
+#: views/kmymoneyview.cpp:1393
+msgid "Croatian Kuna"
+msgstr "Kuna croata (HRK)"
+
+#: views/kmymoneyview.cpp:1394
+msgid "Cuban Peso"
+msgstr "Peso cubano (CUP)"
+
+#: views/kmymoneyview.cpp:1395
+msgid "Czech Koruna"
+msgstr "Corona checa (CZK)"
+
+#: views/kmymoneyview.cpp:1396
+msgid "Danish Krone"
+msgstr "Corona danesa (DKK)"
+
+#: views/kmymoneyview.cpp:1397
+msgid "Djibouti Franc"
+msgstr "Franco yibutiano (DJF)"
+
+#: views/kmymoneyview.cpp:1398
+msgid "Dominican Peso"
+msgstr "Peso dominicano (DOP)"
+
+#: views/kmymoneyview.cpp:1399
+msgid "East Caribbean Dollar"
+msgstr "Dólar del Caribe Oriental (XCD)"
+
+#: views/kmymoneyview.cpp:1400
+msgid "Egyptian Pound"
+msgstr "Libra egipcia (EGP)"
+
+#: views/kmymoneyview.cpp:1401
+msgid "El Salvador Colon"
+msgstr "Colón salvadoreño (SVC)"
+
+#: views/kmymoneyview.cpp:1402
+msgid "Eritrean Nakfa"
+msgstr "Nafka eritreo (ERN)"
+
+#: views/kmymoneyview.cpp:1403
+msgid "Estonian Kroon"
+msgstr "Corona estonia (EEK)"
+
+#: views/kmymoneyview.cpp:1404
+msgid "Ethiopian Birr"
+msgstr "Birr etíope (ETB)"
+
+#: views/kmymoneyview.cpp:1405
+msgid "Euro"
+msgstr "Euro"
+
+#: views/kmymoneyview.cpp:1406
+msgid "Falkland Islands Pound"
+msgstr "Libra malvinense (FKP)"
+
+#: views/kmymoneyview.cpp:1407
+msgid "Fiji Dollar"
+msgstr "Dólar fijiano (FJD)"
+
+#: views/kmymoneyview.cpp:1408
+msgid "Gambian Dalasi"
+msgstr "Dalasi gambiano (GMD)"
+
+#: views/kmymoneyview.cpp:1409
+msgid "Georgian Lari"
+msgstr "Lari georgiano (GEL)"
+
+#: views/kmymoneyview.cpp:1410
+msgid "Ghanaian Cedi"
+msgstr "Cedi ghanés(GHC)"
+
+#: views/kmymoneyview.cpp:1411
+msgid "Gibraltar Pound"
+msgstr "Libra gibraltareña (GIP)"
+
+#: views/kmymoneyview.cpp:1412
+msgid "Guatemalan Quetzal"
+msgstr "Quetzal guatemalteco (GTQ)"
+
+#: views/kmymoneyview.cpp:1413
+msgid "Guinea-Bissau Peso"
+msgstr "Peso guineense"
+
+#: views/kmymoneyview.cpp:1414
+msgid "Guyanan Dollar"
+msgstr "Dólar guyanés (GYD)"
+
+#: views/kmymoneyview.cpp:1415
+msgid "Haitian Gourde"
+msgstr "Gurde haitiano (HTG)"
+
+#: views/kmymoneyview.cpp:1416
+msgid "Honduran Lempira"
+msgstr "Lempira hondureña (HNL) "
+
+#: views/kmymoneyview.cpp:1417
+msgid "Hong Kong Dollar"
+msgstr "Dólar de Hong Kong (HKD)"
+
+#: views/kmymoneyview.cpp:1418
+msgid "Hungarian Forint"
+msgstr "Forint húngaro (HUF)"
+
+#: views/kmymoneyview.cpp:1419
+msgid "Iceland Krona"
+msgstr "Króna islandesa (ISK)"
+
+#: views/kmymoneyview.cpp:1420
+msgid "Indian Rupee"
+msgstr "Rupia india (INR)"
+
+#: views/kmymoneyview.cpp:1421
+msgid "Indonesian Rupiah"
+msgstr "Rupia indonesia (IDR)"
+
+#: views/kmymoneyview.cpp:1422
+msgid "Iranian Rial"
+msgstr "Rial iraní (IRR)"
+
+#: views/kmymoneyview.cpp:1423
+msgid "Iraqi Dinar"
+msgstr "Dinar iraqí (IQD)"
+
+#: views/kmymoneyview.cpp:1424
+msgid "Israeli New Shekel"
+msgstr "Nuevo sheqel israelí (ILS)"
+
+#: views/kmymoneyview.cpp:1425
+msgid "Jamaican Dollar"
+msgstr "Dólar jamaicano (JMD)"
+
+#: views/kmymoneyview.cpp:1426
+msgid "Japanese Yen"
+msgstr "Yen japonés (JPY)"
+
+#: views/kmymoneyview.cpp:1427
+msgid "Jordanian Dinar"
+msgstr "Dinar jordano (JOD)"
+
+#: views/kmymoneyview.cpp:1428
+msgid "Kazakhstan Tenge"
+msgstr "Tenge kazajo (KZT)"
+
+#: views/kmymoneyview.cpp:1429
+msgid "Kenyan Shilling"
+msgstr "Chelín keniata (KES)"
+
+#: views/kmymoneyview.cpp:1430
+msgid "Kuwaiti Dinar"
+msgstr "Dinar kuwaití (KWD)"
+
+#: views/kmymoneyview.cpp:1431
+msgid "Kyrgyzstan Som"
+msgstr "Som kirguizo (KGS)"
+
+#: views/kmymoneyview.cpp:1432
+msgid "Laos Kip"
+msgstr "Kip laosiano (LAK)"
+
+#: views/kmymoneyview.cpp:1433
+msgid "Latvian Lats"
+msgstr "Lat letón (LVL)"
+
+#: views/kmymoneyview.cpp:1434
+msgid "Lebanese Pound"
+msgstr "Libra libanesa (LBP)"
+
+#: views/kmymoneyview.cpp:1435
+msgid "Lesotho Loti"
+msgstr "Loti lesotense (LSL)"
+
+#: views/kmymoneyview.cpp:1436
+msgid "Liberian Dollar"
+msgstr "Dólar liberiano (LRD)"
+
+#: views/kmymoneyview.cpp:1437
+msgid "Libyan Dinar"
+msgstr "Dinar libio (LYD)"
+
+#: views/kmymoneyview.cpp:1438
+msgid "Lithuanian Litas"
+msgstr "Litas lituano (LTL)"
+
+#: views/kmymoneyview.cpp:1439
+msgid "Macau Pataca"
+msgstr "Pataca macaense (MOP)"
+
+#: views/kmymoneyview.cpp:1440
+msgid "Macedonian Denar"
+msgstr "Denar macedonio (MKD)"
+
+#: views/kmymoneyview.cpp:1441
+msgid "Malagasy Franc"
+msgstr "Franco malgache"
+
+#: views/kmymoneyview.cpp:1442
+msgid "Malawi Kwacha"
+msgstr "Kwacha malawiano (MWK)"
+
+#: views/kmymoneyview.cpp:1443
+msgid "Malaysian Ringgit"
+msgstr "Ringgit malayo (MYR)"
+
+#: views/kmymoneyview.cpp:1444
+msgid "Maldive Rufiyaa"
+msgstr "Rufiyaa maldiva (MVR)"
+
+#: views/kmymoneyview.cpp:1445
+msgid "Mali Republic Franc"
+msgstr "Franco CFA occidental malí (XOF)"
+
+#: views/kmymoneyview.cpp:1446
+msgid "Mauritanian Ouguiya"
+msgstr "Ouguiya Mauritano (MRO)"
+
+#: views/kmymoneyview.cpp:1447
+msgid "Mauritius Rupee"
+msgstr "Rupia de Mauricio (MUR)"
+
+#: views/kmymoneyview.cpp:1448
+msgid "Mexican Peso"
+msgstr "Peso mexicano (MXN)"
+
+#: views/kmymoneyview.cpp:1449
+msgid "Moldavian Leu"
+msgstr "Leu Moldavo"
+
+#: views/kmymoneyview.cpp:1450
+msgid "Mongolian Tugrik"
+msgstr "Togrog mongol (MNT)"
+
+#: views/kmymoneyview.cpp:1451
+msgid "Moroccan Dirham"
+msgstr "Dirham marroquí (MAD)"
+
+#: views/kmymoneyview.cpp:1452
+msgid "Mozambique Metical"
+msgstr "Metical mozambiqueño (MZM)"
+
+#: views/kmymoneyview.cpp:1453
+msgid "Myanmar Kyat"
+msgstr "Kyar de Myanmar (MMK)"
+
+#: views/kmymoneyview.cpp:1454
+msgid "Namibian Dollar"
+msgstr "Dólar namibiano (NAD)"
+
+#: views/kmymoneyview.cpp:1455
+msgid "Nepalese Rupee"
+msgstr "Rupia nepalesa (NPR)"
+
+#: views/kmymoneyview.cpp:1456
+msgid "New Zealand Dollar"
+msgstr "Dólar neozelandés (NZD)"
+
+#: views/kmymoneyview.cpp:1457
+msgid "Nicaraguan Cordoba Oro"
+msgstr "Córdoba nicaragüense (NIO)"
+
+#: views/kmymoneyview.cpp:1458
+msgid "Nigerian Naira"
+msgstr "Naira nigeriano (NGN)"
+
+#: views/kmymoneyview.cpp:1459
+msgid "North Korean Won"
+msgstr "Won norcoreano (KPW)"
+
+#: views/kmymoneyview.cpp:1460
+msgid "Norwegian Kroner"
+msgstr "Corona noruega (NOK)"
+
+#: views/kmymoneyview.cpp:1461
+msgid "Omani Rial"
+msgstr "Rial omaní (OMR)"
+
+#: views/kmymoneyview.cpp:1462
+msgid "Pakistan Rupee"
+msgstr "Rupia pakistaní (PKR)"
+
+#: views/kmymoneyview.cpp:1463
+msgid "Panamanian Balboa"
+msgstr "Balboa panameña (PAB)"
+
+#: views/kmymoneyview.cpp:1464
+msgid "Papua New Guinea Kina"
+msgstr "Kina papúa (PGK)"
+
+#: views/kmymoneyview.cpp:1465
+msgid "Paraguay Guarani"
+msgstr "Guaraní paraguayo (PYG)"
+
+#: views/kmymoneyview.cpp:1466
+msgid "Peruvian Nuevo Sol"
+msgstr "Nuevo sol peruano (PEN)"
+
+#: views/kmymoneyview.cpp:1467
+msgid "Philippine Peso"
+msgstr "Peso filipino (PHP)"
+
+#: views/kmymoneyview.cpp:1468
+msgid "Polish Zloty"
+msgstr "Zloty polaco (PLN)"
+
+#: views/kmymoneyview.cpp:1469
+msgid "Qatari Rial"
+msgstr "Rial qatarí (QAR)"
+
+#: views/kmymoneyview.cpp:1470
+msgid "Romanian Leu (new)"
+msgstr "Leu rumano (nuevo)"
+
+#: views/kmymoneyview.cpp:1471
+msgid "Russian Ruble"
+msgstr "Rublo ruso"
+
+#: views/kmymoneyview.cpp:1472
+msgid "Rwanda Franc"
+msgstr "Franco ruandés (RWF)"
+
+#: views/kmymoneyview.cpp:1473
+msgid "Samoan Tala"
+msgstr "Tala samoana (WST)"
+
+#: views/kmymoneyview.cpp:1474
+msgid "Sao Tome and Principe Dobra"
+msgstr "Dobra santotomense (STD)"
+
+#: views/kmymoneyview.cpp:1475
+msgid "Saudi Riyal"
+msgstr "Rial saudí (SAR)"
+
+#: views/kmymoneyview.cpp:1476
+msgid "Seychelles Rupee"
+msgstr "Rupia de Seychelles (SCR)"
+
+#: views/kmymoneyview.cpp:1477
+msgid "Sierra Leone Leone"
+msgstr "León sierraleonés (SLL)"
+
+#: views/kmymoneyview.cpp:1478
+msgid "Singapore Dollar"
+msgstr "Dólar de Singapur (SGD)"
+
+#: views/kmymoneyview.cpp:1481
+msgid "Solomon Islands Dollar"
+msgstr "Dólar de las Islas Salomón (SBD)"
+
+#: views/kmymoneyview.cpp:1482
+msgid "Somali Shilling"
+msgstr "Chelín somalí (SOS)"
+
+#: views/kmymoneyview.cpp:1483
+msgid "South African Rand"
+msgstr "Rand sudafricano (ZAR)"
+
+#: views/kmymoneyview.cpp:1484
+msgid "South Korean Won"
+msgstr "Won surcoreano (KRW)"
+
+#: views/kmymoneyview.cpp:1485
+msgid "Sri Lanka Rupee"
+msgstr "Rupia de Sri Lanka (LKR)"
+
+#: views/kmymoneyview.cpp:1486
+msgid "St. Helena Pound"
+msgstr "Libra de Santa Helena (SHP)"
+
+#: views/kmymoneyview.cpp:1487
+msgid "Sudanese Dinar"
+msgstr "Dinar sudanés (SDD)"
+
+#: views/kmymoneyview.cpp:1488
+msgid "Suriname Guilder"
+msgstr "Guilder de Suriname (SRD)"
+
+#: views/kmymoneyview.cpp:1489
+msgid "Swaziland Lilangeni"
+msgstr "Lilangeni suazi (SZL)"
+
+#: views/kmymoneyview.cpp:1490
+msgid "Swedish Krona"
+msgstr "Corona sueca (SEK)"
+
+#: views/kmymoneyview.cpp:1491
+msgid "Swiss Franc"
+msgstr "Franco suízo (CHF)"
+
+#: views/kmymoneyview.cpp:1492
+msgid "Syrian Pound"
+msgstr "Libra siria (SYP)"
+
+#: views/kmymoneyview.cpp:1493
+msgid "Taiwan Dollar"
+msgstr "Nuevo Dolar Taiwanes (TWD)"
+
+#: views/kmymoneyview.cpp:1494
+msgid "Tajikistan Somani"
+msgstr "Somoni tayik (TJS)"
+
+#: views/kmymoneyview.cpp:1495
+msgid "Tanzanian Shilling"
+msgstr "Chelín tanzano (TZS)"
+
+#: views/kmymoneyview.cpp:1496
+msgid "Thai Baht"
+msgstr "Baht tailandés (THB)"
+
+#: views/kmymoneyview.cpp:1497
+msgid "Tongan Pa'anga"
+msgstr "Pa'anga tonganesa (TOP)"
+
+#: views/kmymoneyview.cpp:1498
+msgid "Trinidad and Tobago Dollar"
+msgstr "Dólar de Trinidad y Tobago (TTD)"
+
+#: views/kmymoneyview.cpp:1499
+msgid "Tunisian Dinar"
+msgstr "Dinar tunecino (TND)"
+
+#: views/kmymoneyview.cpp:1500
+msgid "Turkish Lira (new)"
+msgstr "Nueva lira turca (YTL)"
+
+#: views/kmymoneyview.cpp:1501
+msgid "Turkmenistan Manat"
+msgstr "Manat turkmeno (TMM)"
+
+#: views/kmymoneyview.cpp:1502
+msgid "US Dollar"
+msgstr "Dólar estadounidense (USD)"
+
+#: views/kmymoneyview.cpp:1503
+msgid "Uganda Shilling"
+msgstr "Chelín ugandés (UGX)"
+
+#: views/kmymoneyview.cpp:1504
+msgid "Ukraine Hryvnia"
+msgstr "Hryvnia ucraniana (UAH)"
+
+#: views/kmymoneyview.cpp:1505
+msgid "United Arab Emirates Dirham"
+msgstr "Dirham de los E.A.U. (AED)"
+
+#: views/kmymoneyview.cpp:1506
+msgid "Uruguayan Peso"
+msgstr "Peso uruguayo (UYU)"
+
+#: views/kmymoneyview.cpp:1507
+msgid "Uzbekistani Sum"
+msgstr "Som uzbeko (UZS)"
+
+#: views/kmymoneyview.cpp:1508
+msgid "Vanuatu Vatu"
+msgstr "Vatu vanuatano (VUV)"
+
+#: views/kmymoneyview.cpp:1509
+msgid "Venezuelan Bolivar"
+msgstr "Bolivar venezolano (VEB)"
+
+#: views/kmymoneyview.cpp:1510
+msgid "Vietnamese Dong"
+msgstr "Dong vietnamita (VND)"
+
+#: views/kmymoneyview.cpp:1511
+msgid "Yugoslav Dinar"
+msgstr "Dinar serbio (CSD)"
+
+#: views/kmymoneyview.cpp:1512
+msgid "Zambian Kwacha"
+msgstr "Kwacha zambiano (ZMK)"
+
+#: views/kmymoneyview.cpp:1513
+msgid "Zimbabwe Dollar"
+msgstr "Dólar de Zimbabwe (ZWD)"
+
+#: views/kmymoneyview.cpp:1515
+msgid "Gold"
+msgstr "Oro"
+
+#: views/kmymoneyview.cpp:1516
+msgid "Palladium"
+msgstr "Paladio"
+
+#: views/kmymoneyview.cpp:1517
+msgid "Platinum"
+msgstr "Platino"
+
+#: views/kmymoneyview.cpp:1518
+msgid "Silver"
+msgstr "Plata"
+
+#: views/kmymoneyview.cpp:1551
+msgid "Austrian Schilling"
+msgstr "Chelín austríaco"
+
+#: views/kmymoneyview.cpp:1552
+msgid "German Mark"
+msgstr "Marco alemán"
+
+#: views/kmymoneyview.cpp:1553
+msgid "French Franc"
+msgstr "Franco francés"
+
+#: views/kmymoneyview.cpp:1554
+msgid "Italian Lira"
+msgstr "Lira italiana"
+
+#: views/kmymoneyview.cpp:1555
+msgid "Spanish Peseta"
+msgstr "Peseta española"
+
+#: views/kmymoneyview.cpp:1556
+msgid "Dutch Guilder"
+msgstr "Guilder holandés"
+
+#: views/kmymoneyview.cpp:1557
+msgid "Belgian Franc"
+msgstr "Franco belga"
+
+#: views/kmymoneyview.cpp:1558
+msgid "Luxembourg Franc"
+msgstr "Franco luxemburgués"
+
+#: views/kmymoneyview.cpp:1559
+msgid "Portuguese Escudo"
+msgstr "Escudo portugués"
+
+#: views/kmymoneyview.cpp:1560
+msgid "Irish Pound"
+msgstr "Libra irlandesa"
+
+#: views/kmymoneyview.cpp:1561
+msgid "Finnish Markka"
+msgstr "Markka finlandesa"
+
+#: views/kmymoneyview.cpp:1562
+msgid "Greek Drachma"
+msgstr "Dracma griego"
+
+#: views/kmymoneyview.cpp:1564
+msgid "Romanian Leu"
+msgstr "Leu rumano (ROL)"
+
+#: views/kmymoneyview.cpp:1566
+msgid "Russian Ruble (old)"
+msgstr "Rublo ruso (antiguo)"
+
+#: views/kmymoneyview.cpp:1568
+msgid "Slovenian Tolar"
+msgstr "Tolar esloveno (SIT)"
+
+#: views/kmymoneyview.cpp:1571
+msgid "Turkish Lira"
+msgstr "Lira turca (TRL)"
+
+#: views/kmymoneyview.cpp:1574
+msgid "Maltese Lira"
+msgstr "Lira maltesa (MTL)"
+
+#: views/kmymoneyview.cpp:1575
+msgid "Cyprus Pound"
+msgstr "Libra chipriota (CYP)"
+
+#: views/kmymoneyview.cpp:1578
+msgid "Slovak Koruna"
+msgstr "Corona eslovaca (SKK)"
+
+#: views/kmymoneyview.cpp:1888
+msgid ""
+"The account \"%1\" was previously created as loan account but some "
+"information is missing. The new loan wizard will be started to collect all "
+"relevant information. Please use a KMyMoney version >= 0.8.7 and < 0.9 to "
+"correct the problem."
+msgstr ""
+"La cuenta \"%1\" fue creada con anterioridad como de tipo préstamo pero "
+"falta alguna información. El asistente para nuevos préstamos comenzará a "
+"recoger toda la información relevante. Por favor, utilice una versión de "
+"KMyMoney >= 0.8.7 y < 0.9 para corregir el problema."
+
+#: views/kmymoneyview.cpp:1892
+msgid "Account problem"
+msgstr "Problema en la cuenta"
+
+#: views/kmymoneyview.cpp:1941
+msgid "Unable to add schedule: "
+msgstr "No fue posible añadir el asiento programado:"
+
+#: views/kmymoneyview.cpp:1970
+msgid "Fix transactions"
+msgstr "Fijar asientos"
+
+#: views/kaccountsview.cpp:522 views/kinstitutionsview.cpp:300
+msgid "Net Worth: "
+msgstr "Valor neto:"
+
+#: dialogs/rc.cpp:108 dialogs/rc.cpp:163 dialogs/rc.cpp:250 dialogs/rc.cpp:755
+#: dialogs/rc.cpp:830 views/kinvestmentview.cpp:77 widgets/register.cpp:572
+msgid "Quantity"
+msgstr "Importe "
+
+#: views/kscheduledlistitem.cpp:137
+msgid "Finished"
+msgstr "Terminado"
+
+#: views/kbudgetview.cpp:109
+msgid "Creates a new budget"
+msgstr "Crea un nuevo presupuesto"
+
+#: views/kbudgetview.cpp:110
+msgid "Use this to create a new empty budget."
+msgstr "Utilice esto para crear un nuevo presupuesto vacío."
+
+#: views/kbudgetview.cpp:116
+msgid "Rename the current selected budget"
+msgstr "Renombrar el presupuesto seleccionado"
+
+#: views/kbudgetview.cpp:117
+msgid "Use this to start renaming the selected budget."
+msgstr "Utilice esto para renombrar el presupuesto seleccionado"
+
+#: views/kbudgetview.cpp:123
+msgid "Delete the current selected budget"
+msgstr "Borrar el presupuesto seleccionado"
+
+#: views/kbudgetview.cpp:124
+msgid "Use this to delete the selected budget."
+msgstr "Utilice esto para borrar el presupuesto seleccionado"
+
+#: views/kbudgetview.cpp:130
+msgid "Accepts the entered values and stores the budget"
+msgstr "Acepta los datos introducidos y guarda el presupuesto"
+
+#: views/kbudgetview.cpp:131
+msgid "Use this to store the modified data."
+msgstr "Use esto para guardar los datos modificados."
+
+#: views/kbudgetview.cpp:137
+msgid "Revert budget to last saved state"
+msgstr "Revertir el presupuesto al último estado guardadon"
+
+#: views/kbudgetview.cpp:138
+msgid "Use this to discard the modified data."
+msgstr "Use esto para descartar los datos modificados."
+
+#: views/kbudgetview.cpp:489
+msgid "Do you want to save the changes for <b>%1</b>"
+msgstr "Desea guardar los cambios para <b>%1</b>"
+
+#: views/kbudgetview.cpp:610
+msgid ""
+"A budget with the name '%1' already exists. It is not advisable to have "
+"multiple budgets with the same identification name. Are you sure you would "
+"like to rename the budget?"
+msgstr ""
+"Ya existe un presupuesto con el nombre %1. No es recomendable tener "
+"múltiples presupuestos con el mismo nombre de identificación. ¿Está seguro "
+"que desea renombrar el presupuesto?"
+
+#: views/kbudgetview.cpp:635 views/kbudgetview.cpp:750
+msgid "Unable to modify budget"
+msgstr "No fue posible modificar el presupuesto"
+
+#: views/kbudgetview.cpp:736
+msgid "Unable to reset budget"
+msgstr "No fue posible reiniciar el presupuesto"
+
+#: views/rc.cpp:1
+msgid "List"
+msgstr "Lista"
+
+#: views/rc.cpp:2 views/rc.cpp:20
+msgid "Collapse all accounts in the list"
+msgstr "Colapsar todas las cuentas en la lista"
+
+#: views/rc.cpp:3 views/rc.cpp:21
+msgid "Expand all accounts in the list"
+msgstr "Expandir todas las cuentas en la lista"
+
+#: views/rc.cpp:4
+msgid "Icons"
+msgstr "Iconos"
+
+#: views/rc.cpp:5 views/rc.cpp:22
+msgid "Note: Unused categories are not shown as selected by settings."
+msgstr ""
+"Nota: No se muestran las categorías no usadas, siguiendo la configuración."
+
+#: views/rc.cpp:6 views/rc.cpp:23 views/rc.cpp:54
+msgid "Total Profits:"
+msgstr "Beneficios Totales:"
+
+#: views/rc.cpp:7
+msgid "Your budgets"
+msgstr "Sus presupuestos"
+
+#: dialogs/rc.cpp:340 dialogs/rc.cpp:841 dialogs/settings/rc.cpp:124
+#: views/rc.cpp:8 widgets/rc.cpp:48 widgets/rc.cpp:150
+msgid "New"
+msgstr "Nueva"
+
+#: views/rc.cpp:9
+msgid "Ren"
+msgstr "Ren"
+
+#: views/rc.cpp:10
+msgid "Del"
+msgstr "Bor"
+
+#: views/rc.cpp:11
+msgid "Res"
+msgstr "Res"
+
+#: views/rc.cpp:12
+msgid "Upd"
+msgstr "Act"
+
+#: views/rc.cpp:15
+msgid "Hide unused budget categories"
+msgstr "Ocultar categorías presupuestarias no utilizadas"
+
+#: views/rc.cpp:16
+msgid "Assignments"
+msgstr "Asignaciones"
+
+#: views/rc.cpp:19
+msgid "Include subaccounts"
+msgstr "Incluir subcuentas"
+
+#: dialogs/settings/rc.cpp:23 views/rc.cpp:24
+msgid "Forecast Settings"
+msgstr "Configuración de Pronóstico"
+
+#: views/rc.cpp:25
+msgid "Days to Forecast:"
+msgstr "Días a pronosticar:"
+
+#: views/rc.cpp:26
+msgid "Days of Accounts Cycle:"
+msgstr "Días del Ciclo de Cuenta:"
+
+#: dialogs/settings/rc.cpp:25 views/rc.cpp:27
+msgid "Day of Month to start Forecast:"
+msgstr "Día del Mes para iniciar el Pronóstico:"
+
+#: views/rc.cpp:28
+msgid "Historic Cycles:"
+msgstr "Ciclos históricos:"
+
+#: views/rc.cpp:29
+msgid "Chart Detail:"
+msgstr "Detalle del Gráfico:"
+
+#: views/rc.cpp:30 widgets/kmymoneyaccountselector.cpp:64 widgets/rc.cpp:65
+msgid "All"
+msgstr "Todo"
+
+#: views/rc.cpp:31 widgets/rc.cpp:66
+msgid "Top-Level"
+msgstr "Nivel superior"
+
+#: views/rc.cpp:32 widgets/rc.cpp:67
+msgid "Groups"
+msgstr "Grupos"
+
+#: views/rc.cpp:33 widgets/rc.cpp:68
+msgid "Totals"
+msgstr "Totales"
+
+#: views/rc.cpp:34
+msgid "<p>Choose what level of detail to show on the chart.</p>"
+msgstr "<p>Elija qué nivel de detalle mostrar en el gráfico.</p>"
+
+#: views/rc.cpp:35
+msgid "Current Forecast Method:"
+msgstr "Método de Pronóstico:"
+
+#: views/rc.cpp:36
+msgid "method"
+msgstr "método:"
+
+#: dialogs/settings/rc.cpp:32 views/rc.cpp:37
+msgid "History Forecast Method"
+msgstr "Método de Pronóstico histórico"
+
+#: dialogs/settings/rc.cpp:33 views/rc.cpp:38
+msgid "Simple Moving Average"
+msgstr "Promedio Móvil Simple"
+
+#: dialogs/settings/rc.cpp:34 views/rc.cpp:39
+msgid "Weighted Moving Average"
+msgstr "Promedio Móvil Ponderado"
+
+#: dialogs/settings/rc.cpp:35 views/rc.cpp:40
+msgid "Linear Regression"
+msgstr "Regresión Lineal"
+
+#: dialogs/keditloanwizard.cpp:315 dialogs/rc.cpp:628 dialogs/rc.cpp:647
+#: views/rc.cpp:43
+msgid "Summary"
+msgstr "Resumen"
+
+#: views/rc.cpp:45
+msgid "0 days"
+msgstr "0 días"
+
+#: views/rc.cpp:46
+msgid "30 days"
+msgstr "30 días"
+
+#: views/rc.cpp:47
+msgid "60 days"
+msgstr "60 días"
+
+#: views/rc.cpp:48
+msgid "90 days"
+msgstr "90 días"
+
+#: views/rc.cpp:49
+msgid "New Item"
+msgstr "Nuevo elemento"
+
+#: views/rc.cpp:50 widgets/rc.cpp:64
+msgid "Detail"
+msgstr "Detalle"
+
+#: views/rc.cpp:51
+msgid "Advanced"
+msgstr "Avanzado"
+
+#: views/rc.cpp:52
+msgid "Budget Forecast"
+msgstr "Presupuesto"
+
+#: views/rc.cpp:55
+msgid "Investment Summary"
+msgstr "Resumen de la Inversión"
+
+#: views/rc.cpp:56
+msgid "Select Account:"
+msgstr "Escoger Cuenta:"
+
+#: views/rc.cpp:57
+msgid ""
+"Summary of the equities contained in this account, showing your holdings and "
+"their most recent price."
+msgstr ""
+"Resumen de los capitales contenidos en esta cuenta, mostrando sus "
+"participaciones y el precio más reciente."
+
+#: views/rc.cpp:60 widgets/register.cpp:564
+msgid "No."
+msgstr "Nº"
+
+#: views/rc.cpp:64
+msgid "Balance: "
+msgstr "Saldo:"
+
+#: views/rc.cpp:65
+msgid "Address"
+msgstr "Dirección"
+
+#: views/rc.cpp:66
+msgid "Payee Information"
+msgstr "Información del Beneficiario"
+
+#: views/rc.cpp:67
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#: dialogs/rc.cpp:393 views/rc.cpp:69
+msgid "Telephone/Fax:"
+msgstr "Teléfono/Fax:"
+
+#: views/rc.cpp:70
+msgid "Notes"
+msgstr "Notas"
+
+#: views/rc.cpp:71
+msgid "Address:"
+msgstr "Dirección:"
+
+#: views/rc.cpp:72
+msgid "Matching"
+msgstr "Coincidencia"
+
+#: views/rc.cpp:73
+msgid "Transaction Matching"
+msgstr "Coincidencia de Asientos"
+
+#: views/rc.cpp:74
+msgid "No matching"
+msgstr "No hacer nada"
+
+#: views/rc.cpp:75
+msgid "Match on Payee name"
+msgstr "Coincidir por el nombre de Beneficiario"
+
+#: views/rc.cpp:76
+msgid "Match on a name listed below"
+msgstr "Coincidir por un nombre listado abajo"
+
+#: views/rc.cpp:77
+msgid "List of matching names"
+msgstr "Lista de nombres coincidentes"
+
+#: views/rc.cpp:78
+msgid ""
+"This list contains the names that will match this payee if a transaction is "
+"imported from an external source. Keep in mind, that you can specify regular "
+"expressions here."
+msgstr ""
+"Esta lista contiene los nombres que coincidirán con este beneficiario si se "
+"importa un asiento de una fuente externa. Tenga en cuenta que puede utilizar "
+"expresiones regulares aquí."
+
+#: views/rc.cpp:79
+msgid "Ignore Case"
+msgstr "Ignorar Mayúsculas/Minúsculas"
+
+#: views/rc.cpp:80
+msgid "Default Account"
+msgstr "Cuenta Predeterminada"
+
+#: views/rc.cpp:81
+msgid ""
+"Use the default account for\n"
+"new transactions with this payee"
+msgstr ""
+"Utilizar la cuenta predeterminada\n"
+"para nuevos asientos con este pagador"
+
+#: views/rc.cpp:82
+msgid "Default category:"
+msgstr "Categoría predeterminada:"
+
+#: views/rc.cpp:83
+msgid "Suggest a category"
+msgstr "Sugerir una categoría"
+
+#: views/rc.cpp:85
+msgid "New Scheduled transaction..."
+msgstr "Nuevo asiento planificado..."
+
+#: views/rc.cpp:86
+msgid "Filter Accounts"
+msgstr "Filtrar cuentas"
+
+#: views/rc.cpp:87
+msgid "List View"
+msgstr "Vista en Lista"
+
+#: views/rc.cpp:88
+msgid "Calendar View"
+msgstr "Vista en Calendario"
+
+#: views/kinstitutionsview.cpp:43
+msgid "Institution/Account"
+msgstr "Organización/Cuenta"
+
+#: views/kinstitutionsview.cpp:157
+msgid "Accounts with no institution assigned"
+msgstr "Cuentas sin organización asignada"
+
+#: views/kscheduledview.cpp:70
+msgid "Type/Name"
+msgstr "Tipo/Nombre"
+
+#: views/kscheduledview.cpp:75
+msgid "Frequency"
+msgstr "Frecuencia"
+
+#: views/kscheduledview.cpp:157
+msgid "Unable to load accounts: "
+msgstr "No fue posible cargar las cuentas:"
+
+#: views/kscheduledview.cpp:171 views/kscheduledview.cpp:429
+#: views/kscheduledview.cpp:445 widgets/kmymoneyscheduledcalendar.cpp:46
+msgid "Bills"
+msgstr "Recibos"
+
+#: dialogs/rc.cpp:232 dialogs/rc.cpp:706 views/kscheduledview.cpp:172
+#: views/kscheduledview.cpp:431 views/kscheduledview.cpp:447
+#: widgets/kmymoneyscheduledcalendar.cpp:47
+msgid "Deposits"
+msgstr "Depósitos"
+
+#: views/kscheduledview.cpp:173 views/kscheduledview.cpp:435
+#: views/kscheduledview.cpp:451
+msgid "Loans"
+msgstr "Préstamos"
+
+#: views/kscheduledview.cpp:357
+msgid "Error activating context menu"
+msgstr "Error durante la activación del menú contextual"
+
+#: views/kscheduledview.cpp:385
+msgid "Error executing item"
+msgstr "Error ejecutando objeto"
+
+#: views/kscheduledview.cpp:419
+msgid "Unable to filter account"
+msgstr "No fue posible filtrar la cuenta"
+
+#: views/kgloballedgerview.cpp:508
+msgid "Statement Details"
+msgstr "Detalles del Extracto"
+
+#: views/kgloballedgerview.cpp:512
+msgid "Statement Deposit Details"
+msgstr "Detalles de Depósito del Extracto"
+
+#: views/kgloballedgerview.cpp:513
+msgid "Statement Payment Details"
+msgstr "Detalles de Pago del Extracto"
+
+#: views/kgloballedgerview.cpp:642
+msgid "%1 deposits (%3), %2 payments (%4)"
+msgstr "%1 depositos (%3), %2 pagos (%4)"
+
+#: views/kgloballedgerview.cpp:649
+msgid "%1 payments (%2)"
+msgstr "%1 pagos (%2)"
+
+#: views/kgloballedgerview.cpp:653
+msgid "%1 deposits (%2)"
+msgstr "%1 depositos (%2)"
+
+#: views/kgloballedgerview.cpp:721
+#, c-format
+msgid "Statement: %1"
+msgstr "Extracto: %1"
+
+#: views/kgloballedgerview.cpp:722 views/kgloballedgerview.cpp:736
+#, c-format
+msgid "Cleared: %1"
+msgstr "LIbrado: %1"
+
+#: views/kgloballedgerview.cpp:723
+#, c-format
+msgid "Difference: %1"
+msgstr "Diferencia: %1"
+
+#: views/kgloballedgerview.cpp:730
+#, c-format
+msgid "Last reconciled: %1"
+msgstr "Último asiento reconciliado: %1"
+
+#: views/kgloballedgerview.cpp:732
+msgid "Never reconciled"
+msgstr "Nunca reconciliado"
+
+#: views/kgloballedgerview.cpp:772
+msgid "Investment value: %1%2"
+msgstr "Valor de la Inversión: %1%2"
+
+#: views/kgloballedgerview.cpp:1040
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to continue to edit the transactions anyway?"
+msgstr ""
+"Al menos una partida de este asiento fue reconciliada. ¿Aún desea continuar "
+"editando el asiento?"
+
+#: views/kgloballedgerview.cpp:1051
+msgid ""
+"At least one split of the selected transactions has been frozen. Editing the "
+"transactions is therefore prohibited."
+msgstr ""
+"Al menos una partida de este asiento fue congelada. Por tanto, está "
+"prohibido editar este asiento."
+
+#: views/kgloballedgerview.cpp:1053
+msgid "Transaction already frozen"
+msgstr "El asiento ya fue congelado"
+
+#: views/kgloballedgerview.cpp:1058
+msgid ""
+"At least one split of the selected transaction references an account that "
+"has been closed. Editing the transactions is therefore prohibited."
+msgstr ""
+"Al menos una partida de este asiento pertenece a una cuenta cerrada. Por "
+"tanto, está prohibido editar este asiento."
+
+#: views/kgloballedgerview.cpp:1060
+msgid "Account closed"
+msgstr "Cuenta cerrada"
+
+#: views/kgloballedgerview.cpp:1349
+msgid "Cannot create transactions when no account is selected."
+msgstr "No se pueden crear asientos si no ha seleccionado una cuenta."
+
+#: views/kgloballedgerview.cpp:1354
+msgid "Cannot create transactions in the context of a category."
+msgstr "No se pueden crear asientos en el contexto de una categoría."
+
+#: views/kgloballedgerview.cpp:1358
+msgid "Cannot create transactions in a closed account."
+msgstr "No se pueden crear asientos en una cuenta cerrada."
+
+#: views/kgloballedgerview.cpp:1370
+msgid "Cannot process transaction with focus if it is not selected."
+msgstr "No se puede procesar un asiento si no está seleccionado."
+
+#: views/kgloballedgerview.cpp:1400
+msgid "Cannot edit transactions with frozen splits."
+msgstr "No se pueden editar asientos con partidas congeladas."
+
+#: views/kgloballedgerview.cpp:1411
+msgid "Cannot edit transactions in the context of a category."
+msgstr "No se pueden editar asientos en el contexto de una categoría."
+
+#: views/kgloballedgerview.cpp:1430
+msgid ""
+"Cannot edit investment transactions and non-investment transactions together."
+msgstr ""
+"No se pueden editar asientos de inversiones y no inversiones en conjunto."
+
+#: views/kgloballedgerview.cpp:1438
+msgid "Cannot edit multiple split transactions at once."
+msgstr "No se pueden editar asientos de múltiples partidas al mismo tiempo."
+
+#: views/kgloballedgerview.cpp:1448
+msgid "Cannot edit investment transactions in the context of this account."
+msgstr ""
+"No se pueden editar asientos de inversiones en el contexto de esta cuenta."
+
+#: views/kforecastview.cpp:164
+msgid "Scheduled"
+msgstr "Planificado"
+
+#: views/kforecastview.cpp:169
+msgid "History"
+msgstr "Historía"
+
+#: views/kforecastview.cpp:296
+msgid "The balance of %2 is below the minimum balance %3 today."
+msgstr "El saldo de %2 está por debajo del saldo mínimo %3 hoy."
+
+#: views/kforecastview.cpp:301 views/khomeview.cpp:1043
+msgid "The balance of %1 will drop below the minimum balance %2 in %3 days."
+msgstr "El saldo de %1 caerá por debajo del saldo mínimo %2 en %3 días."
+
+#: views/kforecastview.cpp:318 views/khomeview.cpp:1059
+msgid "The balance of %1 is below %2 today."
+msgstr "El saldo de %1 esta por debajo de %2 hoy."
+
+#: views/kforecastview.cpp:323 views/khomeview.cpp:1064
+msgid "The balance of %1 is above %2 today."
+msgstr "El saldo de %1 está por debajo de %2 hoy."
+
+#: views/kforecastview.cpp:330 views/khomeview.cpp:1070
+msgid "The balance of %1 will drop below %2 in %3 days."
+msgstr "El saldo de %1 caerá por debajo de %2 en %3 días."
+
+#: views/kforecastview.cpp:335 views/khomeview.cpp:1075
+msgid "The balance of %1 will raise above %2 in %3 days."
+msgstr "El saldo de %1 estará por encima de %2 en %3 días."
+
+#: views/kforecastview.cpp:348
+msgid "The account %1 is decreasing %2 per cycle."
+msgstr "La cuenta %1 disminuye %2 por ciclo."
+
+#: views/kforecastview.cpp:404 widgets/kmymoneyaccounttreeforecast.cpp:114
+#, c-format
+msgid "Min Bal %1"
+msgstr "Sal Mín %1"
+
+#: views/kforecastview.cpp:406 widgets/kmymoneyaccounttreeforecast.cpp:116
+#, c-format
+msgid "Min Date %1"
+msgstr "Fecha Mín %1"
+
+#: views/kforecastview.cpp:409 widgets/kmymoneyaccounttreeforecast.cpp:119
+#, c-format
+msgid "Max Bal %1"
+msgstr "Sal Máx %1"
+
+#: views/kforecastview.cpp:411 widgets/kmymoneyaccounttreeforecast.cpp:121
+#, c-format
+msgid "Max Date %1"
+msgstr "Fecha Máx %1"
+
+#: views/kforecastview.cpp:413 widgets/kmymoneyaccounttreeforecast.cpp:123
+msgid "Average"
+msgstr "Promedio"
+
+#: views/kforecastview.cpp:649 views/khomeview.cpp:268 views/khomeview.cpp:275
+msgid "Networth Forecast"
+msgstr "Pronóstico de Valor Neto"
+
+#: views/khomeview.cpp:203
+msgid "Your Financial Summary"
+msgstr "Su resumen financiero"
+
+#: views/khomeview.cpp:218
+msgid "Preferred Accounts"
+msgstr "Cuentas preferidas"
+
+#: views/khomeview.cpp:225 views/khomeview.cpp:227
+msgid "Payment Accounts"
+msgstr "Cuentas de pago"
+
+#: views/khomeview.cpp:256
+msgid "Show KMyMoney welcome page"
+msgstr "Mostrar la página de bienvenida de KMyMoney"
+
+#: views/khomeview.cpp:409
+msgid "Overdue payments"
+msgstr "Pagos atrasados"
+
+#: views/khomeview.cpp:424 views/khomeview.cpp:497 views/khomeview.cpp:531
+msgid "Balance after"
+msgstr "Saldo posterior"
+
+#: views/khomeview.cpp:482
+msgid "Today's payments"
+msgstr "Pagos de hoy"
+
+#: views/khomeview.cpp:516
+msgid "Future payments"
+msgstr "Pagos futuros"
+
+#: views/khomeview.cpp:585
+msgid "Less..."
+msgstr "Menos..."
+
+#: views/khomeview.cpp:587
+msgid "More..."
+msgstr "Más..."
+
+#: views/khomeview.cpp:622
+msgid "Enter schedule"
+msgstr "Ingresar asiento planificado"
+
+#: views/khomeview.cpp:624
+msgid "Skip schedule"
+msgstr "Saltear ocurrencia"
+
+#: views/khomeview.cpp:627
+msgid "Edit schedule"
+msgstr "Editar planificación"
+
+#: views/khomeview.cpp:631
+msgid " (%1 payments)"
+msgstr "(%1 pagos)"
+
+#: views/khomeview.cpp:771
+msgid "To Minimum Balance / Maximum Credit"
+msgstr "Al Saldo Mínimo / Crédito Máximo"
+
+#: views/khomeview.cpp:964
+msgid "%1 Day Forecast"
+msgstr "Pronóstico de %1 Días"
+
+#: views/khomeview.cpp:973 widgets/kmymoneyaccounttreeforecast.cpp:67
+msgid "%1 days"
+msgstr "%1 días"
+
+#: views/khomeview.cpp:1039
+msgid "The balance of %1 is below the minimum balance %2 today."
+msgstr "El saldo de %1 está por debajo del saldo mínimo %2 hoy."
+
+#: views/khomeview.cpp:1175
+msgid ""
+"Before KMyMoney can give you detailed information about your financial "
+"status, you need to create at least one account. Until then, KMyMoney shows "
+"the welcome page instead."
+msgstr ""
+"Antes que KMyMoney pueda darle información detallada sobre su estado "
+"financiero, necesita crear al menos una cuenta. Hasta entonces, KMyMoney "
+"muestra en su lugar la página de bienvenida."
+
+#: views/khomeview.cpp:1258
+msgid "Assets and Liabilities Summary"
+msgstr "Resumen de Activo y Pasivo"
+
+#: views/khomeview.cpp:1262
+msgid "Asset Accounts"
+msgstr "Cuentas de Activo"
+
+#: views/khomeview.cpp:1270
+msgid "Liability Accounts"
+msgstr "Cuentas de Pasivo"
+
+#: views/khomeview.cpp:1348
+msgid "Total Assets"
+msgstr "Total de Activos"
+
+#: views/khomeview.cpp:1354
+msgid "Total Liabilities"
+msgstr "Total de Pasivos"
+
+#: views/khomeview.cpp:1399
+msgid "Current Month Summary"
+msgstr "Resumen del Mes Actual"
+
+#: views/khomeview.cpp:1403 views/khomeview.cpp:1440
+msgid "Budgeted"
+msgstr "Presupuestado"
+
+#: views/khomeview.cpp:1433
+msgid "Budget Overruns"
+msgstr "Sobrepasos de Presupuesto"
+
+#: views/khomeview.cpp:1502
+msgid "No Budget Categories have been overrun"
+msgstr "Ninguna categoría de presupuesto ha sido sobrepasada"
+
+#: views/khomeview.cpp:1801
+msgid "Cash Flow Summary"
+msgstr "Resumen de Flujo de Caja"
+
+#: views/khomeview.cpp:1808
+msgid "Income and Expenses of Current Month"
+msgstr "Ingresos y Gastos este Mes"
+
+#: views/khomeview.cpp:1816
+msgid "Scheduled Income"
+msgstr "Ingresos Planificados"
+
+#: views/khomeview.cpp:1819
+msgid "Expenses"
+msgstr "Gastos"
+
+#: views/khomeview.cpp:1822
+msgid "Scheduled Expenses"
+msgstr "Gastos Planificados"
+
+#: views/khomeview.cpp:1850
+msgid "Liquid Assets and Liabilities"
+msgstr "Activos y Pasivos Líquidos"
+
+#: views/khomeview.cpp:1855
+msgid "Liquid Assets"
+msgstr "Activos Líquidos"
+
+#: views/khomeview.cpp:1858
+msgid "Transfers to Liquid Liabilities"
+msgstr "Transferencias a Pasivos Líquidos"
+
+#: views/khomeview.cpp:1861
+msgid "Liquid Liabilities"
+msgstr "Pasivos Líquidos"
+
+#: views/khomeview.cpp:1864
+msgid "Other Transfers"
+msgstr "Otras Transferencias"
+
+#: views/khomeview.cpp:1908
+msgid "Cash Flow Status"
+msgstr "Estado del Flujo de Caja"
+
+#: views/khomeview.cpp:1914
+msgid "Expected Liquid Assets"
+msgstr "Activos Líquidos Esperados"
+
+#: views/khomeview.cpp:1917
+msgid "Expected Liquid Liabilities"
+msgstr "Pasivos Líquidos Esperados"
+
+#: views/khomeview.cpp:1920
+msgid "Expected Profit/Loss"
+msgstr "Beneficios/Pérdidas Esperados"
+
+#: plugins/ofximport/ofximporterplugin.cpp:64
+msgid "OFX..."
+msgstr "OFX..."
+
+#: plugins/ofximport/ofximporterplugin.cpp:69
+msgid "OFX import file selection"
+msgstr "Selección del archivo OFX a importar"
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid ""
+"Unable to import %1 using the OFX importer plugin. This file is not the "
+"correct format."
+msgstr ""
+"No ha sido posible importar %1 usando el plugin de importación de OFX. Este "
+"archivo no tiene el formato correcto."
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid "Incorrect format"
+msgstr "Formato incorrecto"
+
+#: plugins/ofximport/ofximporterplugin.cpp:122
+msgid "Unable to parse file"
+msgstr "No fue posible parsear el archivo"
+
+#: plugins/ofximport/ofximporterplugin.cpp:576
+msgid "Online settings"
+msgstr "Configuraciones de online"
+
+#: plugins/ofximport/ofximporterplugin.cpp:635
+#, c-format
+msgid "Error connecting to bank: %1"
+msgstr "Error al conectarse al banco: %1"
+
+#: plugins/ofximport/ofximporterplugin.cpp:646
+msgid ""
+"Unable to import %1 using the OFX importer plugin. The plugin returned the "
+"following error:<p>%2"
+msgstr ""
+"No ha sido posible importar %1 usando el plugin de importación de OFX. El "
+"plugin devolvió el siguiente error:<p>%2"
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Importing process terminated unexpectedly."
+msgstr "Proceso de importación terminado inesperadamente."
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Failed to import all statements."
+msgstr "No ha sido posible importar todos los extractos."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "The HTTP request failed."
+msgstr "La peticción HTTP falló."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "Failed"
+msgstr "Falló"
+
+#: plugins/ofximport/ofxpartner.cpp:410
+msgid "Cannot open file %1 for writing"
+msgstr "No fue posible abrir el archivo %1 para escritura"
+
+#: plugins/ofximport/ofxpartner.cpp:414
+msgid "OFX setup error"
+msgstr "Error de configuración de OFX"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid "Loading banklist"
+msgstr "Cargando lista de bancos..."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid ""
+"Getting list of banks from http://moneycentral.msn.com/\n"
+"This may take some time depending on the available bandwidth."
+msgstr ""
+"Buscando la lista de bancos de http://moneycentral.msn.com/\n"
+"Esto puede tomar un tiempo dependiendo del ancho de banda disponible."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:155
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:199
+msgid "Supports online statements<br>"
+msgstr "Soporta extractos online<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:157
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:201
+msgid "Supports investments<br>"
+msgstr "Soporta inversiones<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:159
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:203
+msgid "Supports bill payment (but not supported by KMyMoney yet)<br>"
+msgstr "Soporta pago de facturas (pero aún no soportado por KMyMoney)<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:163
+msgid "Does not support online banking</p>"
+msgstr "No soporta banca online</p>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:173
+msgid "Please choose a bank."
+msgstr "Por favor, escoja un banco."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:179
+msgid "Please fill all fields with values."
+msgstr "Por favor, complete todos los campos con valores."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:271
+msgid "No suitable accounts were found at this bank."
+msgstr "No se han encontrado cuentas compatibles en este banco."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:283
+msgid "Please choose an account"
+msgstr "Por favor, escoja una cuenta."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:386
+msgid "Server message: %1\n"
+msgstr "Mensaje del servidor: %1\n"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+msgid "Your bank returned warnings when signing on"
+msgstr "Su banco ha devuelto advertencias al conectarse"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+#, c-format
+msgid "WARNING %1"
+msgstr "ADVERTENCIA %1"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+msgid "Error signing onto your bank"
+msgstr "Error al conectarse al banco"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, c-format
+msgid "ERROR %1"
+msgstr "ERROR %1"
+
+#: plugins/ofximport/dialogs/konlinebankingstatus.cpp:59
+msgid "Enabled & configured"
+msgstr "Habilitado y configurado"
+
+#: plugins/ofximport/dialogs/rc.cpp:1
+msgid "OFX Direct Connect"
+msgstr "Conexión Directa OFX"
+
+#: plugins/ofximport/dialogs/rc.cpp:2
+msgid "Contacting bank..."
+msgstr "Conectando con el Banco ..."
+
+#: plugins/ofximport/dialogs/rc.cpp:4
+msgid "Online Banking Account Setup"
+msgstr "Configuración de Cuenta de Banca Online"
+
+#: plugins/ofximport/dialogs/rc.cpp:5
+msgid "Select Financial Institution"
+msgstr "Escoger Institución Financiera"
+
+#: plugins/ofximport/dialogs/rc.cpp:6
+msgid "Please select your financial institution from the list below..."
+msgstr "Por favor, escoja su institución financiera de la lista debajo..."
+
+#: plugins/ofximport/dialogs/rc.cpp:7
+msgid "Automatic"
+msgstr "Automática"
+
+#: plugins/ofximport/dialogs/rc.cpp:8
+msgid "Financial Institution"
+msgstr "Institución Financiera"
+
+#: plugins/ofximport/dialogs/rc.cpp:9
+msgid "Manual"
+msgstr "Manual"
+
+#: plugins/ofximport/dialogs/rc.cpp:10
+msgid "Org"
+msgstr "Org"
+
+#: plugins/ofximport/dialogs/rc.cpp:11
+msgid "FID"
+msgstr "FID"
+
+#: dialogs/settings/rc.cpp:120 plugins/ofximport/dialogs/rc.cpp:12
+#: widgets/rc.cpp:46
+msgid "URL"
+msgstr "URL"
+
+#: plugins/ofximport/dialogs/rc.cpp:13
+msgid "Enter Login Details"
+msgstr "Ingrese Detalles de Entrada"
+
+#: plugins/ofximport/dialogs/rc.cpp:14
+msgid ""
+"Please enter the username and password you use to log into this bank for "
+"online banking. Please note that many banks require a separate signup, and "
+"assign a separate PIN or password just for online banking from home."
+msgstr ""
+"Por favor, ingrese el usuario y contraseña que utiliza para ingresar a este "
+"banco para banca online. Por favor, tenga en cuenta que muchos bancos "
+"requieren un ingreso por separado, y asignan una contraseña o PIN diferente "
+"para utilizar banca online desde el hogar."
+
+#: plugins/ofximport/dialogs/rc.cpp:15
+msgid "Connection Details"
+msgstr "Detalles de la Conexión"
+
+#: plugins/ofximport/dialogs/rc.cpp:16
+msgid "Username"
+msgstr "Nombre de Usuario"
+
+#: plugins/ofximport/dialogs/rc.cpp:17 plugins/ofximport/dialogs/rc.cpp:36
+msgid "Header Version"
+msgstr "Versión del Encabezado"
+
+#: plugins/ofximport/dialogs/rc.cpp:18 plugins/ofximport/dialogs/rc.cpp:37
+msgid "Identify as"
+msgstr "Identificarse como"
+
+#: dialogs/rc.cpp:742 plugins/ofximport/dialogs/rc.cpp:19
+msgid "Password"
+msgstr "Contraseña"
+
+#: plugins/ofximport/dialogs/rc.cpp:20
+msgid "Select Account"
+msgstr "Escoger Cuenta"
+
+#: plugins/ofximport/dialogs/rc.cpp:21
+msgid ""
+"Please select the account from your financial institution from the list "
+"below which matches this account."
+msgstr ""
+"Por favor, seleccione la cuenta de su institución financiera de la lista "
+"debajo que coincida con esta cuenta."
+
+#: plugins/ofximport/dialogs/rc.cpp:24
+msgid "Bank"
+msgstr "Banco"
+
+#: plugins/ofximport/dialogs/rc.cpp:25
+msgid "Branch"
+msgstr "Sucursal"
+
+#: plugins/ofximport/dialogs/rc.cpp:26
+msgid "WizardPage"
+msgstr "WizardPage"
+
+#: plugins/ofximport/dialogs/rc.cpp:27
+msgid ""
+"Congratulations! You have successfully set up your bank for online banking "
+"via OFX."
+msgstr ""
+"Felicitaciones! Ha configurado exitosamente su banco para utilizar banca "
+"online via OFX."
+
+#: plugins/ofximport/dialogs/rc.cpp:28
+msgid "Account Details"
+msgstr "Detalles de la Cuenta"
+
+#: plugins/ofximport/dialogs/rc.cpp:29 plugins/ofximport/dialogs/rc.cpp:31
+msgid "&lt;Not configured&gt;"
+msgstr "&lt;No configurado&gt;"
+
+#: plugins/ofximport/dialogs/rc.cpp:30
+msgid "BANK/BROKER:"
+msgstr "BANCO/CORREDOR:"
+
+#: plugins/ofximport/dialogs/rc.cpp:32
+msgid "Unavailable"
+msgstr "No disponible"
+
+#: plugins/ofximport/dialogs/rc.cpp:33
+msgid "ACCOUNT:"
+msgstr "CUENTA:"
+
+#: plugins/ofximport/dialogs/rc.cpp:34
+msgid "STATUS:"
+msgstr "ESTADO:"
+
+#: plugins/ofximport/dialogs/rc.cpp:35
+msgid "OFX Details"
+msgstr "Detalles de OFX"
+
+#: plugins/ofximport/dialogs/rc.cpp:38
+msgid "Start date of import"
+msgstr "Fecha inicial de la importación"
+
+#: plugins/ofximport/dialogs/rc.cpp:39
+msgid "To&day minus"
+msgstr "Hoy menos"
+
+#: plugins/ofximport/dialogs/rc.cpp:40
+msgid "days"
+msgstr "días"
+
+#: plugins/ofximport/dialogs/rc.cpp:41
+msgid "Last &update"
+msgstr "&Ultima actualización"
+
+#: plugins/ofximport/dialogs/rc.cpp:42
+msgid "Pi&ck date"
+msgstr "Es&coger fecha"
+
+#: plugins/ofximport/dialogs/rc.cpp:43
+msgid "Name is derived from"
+msgstr "Nombre derivado de"
+
+#: plugins/ofximport/dialogs/rc.cpp:44
+msgid "P&AYEEID"
+msgstr "BENEFICI&ARIO"
+
+#: plugins/ofximport/dialogs/rc.cpp:45
+msgid "&NAME"
+msgstr "&NOMBRE"
+
+#: plugins/ofximport/dialogs/rc.cpp:46
+msgid "field if both are present in download"
+msgstr "campo si ambos están presentes en la descarga"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:81
+msgid "Quicken Windows 2003"
+msgstr "Quicken Windows 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:82
+msgid "Quicken Windows 2004"
+msgstr "Quicken Windows 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:83
+msgid "Quicken Windows 2005"
+msgstr "Quicken Windows 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:84
+msgid "Quicken Windows 2006"
+msgstr "Quicken Windows 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:85
+msgid "Quicken Windows 2007"
+msgstr "Quicken Windows 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:86
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:111
+msgid "Quicken Windows 2008"
+msgstr "Quicken Windows 2008"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:89
+msgid "MS-Money 2003"
+msgstr "MS-Money 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:90
+msgid "MS-Money 2004"
+msgstr "MS-Money 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:91
+msgid "MS-Money 2005"
+msgstr "MS-Money 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:92
+msgid "MS-Money 2006"
+msgstr "MS-Money 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:93
+msgid "MS-Money 2007"
+msgstr "MS-Money 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:94
+msgid "MS-Money Plus"
+msgstr "MS-Money Plus"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:91
+msgid "Report Configuration"
+msgstr "Configuración del Informe"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:117
+#: dialogs/kreportconfigurationfilterdlg.cpp:135
+msgid "Rows/Columns"
+msgstr "Filas/Columnas"
+
+#: dialogs/investtransactioneditor.cpp:203
+#: dialogs/investtransactioneditor.cpp:537
+#: dialogs/investtransactioneditor.cpp:579 dialogs/rc.cpp:103
+#: dialogs/rc.cpp:158 dialogs/rc.cpp:245 dialogs/rc.cpp:750 dialogs/rc.cpp:794
+#: widgets/kmymoneyaccountselector.cpp:182 widgets/register.cpp:64
+#: widgets/register.cpp:567 widgets/transaction.cpp:1500
+msgid "Security"
+msgstr "Valor bursátil"
+
+#: dialogs/investtransactioneditor.cpp:211
+msgid "Asset account"
+msgstr "Cuentas de activos"
+
+#: dialogs/investtransactioneditor.cpp:1073
+msgid "Price/Share"
+msgstr "Precio por acción"
+
+#: dialogs/kmergetransactionsdlg.cpp:39
+msgid "Merge Transactions"
+msgstr "Combinar Asientos"
+
+#: dialogs/kmergetransactionsdlg.cpp:40
+msgid "Are you sure you wish to merge these transactions?"
+msgstr "¿Está seguro que desea combinar estos asientos?"
+
+#: dialogs/kstartdlg.cpp:59
+msgid "Start Dialog"
+msgstr "Diálogo Inicial"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Templates"
+msgstr "Plantillas"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Select templates"
+msgstr "Escoger plantillas"
+
+#: dialogs/kstartdlg.cpp:80 dialogs/kstartdlg.cpp:119
+msgid "New KMyMoney document"
+msgstr "Nuevo documento KMyMoney"
+
+#: dialogs/kstartdlg.cpp:90
+msgid "Open a KMyMoney document"
+msgstr "Abrir un documento KMyMoney"
+
+#: dialogs/kstartdlg.cpp:96
+msgid ""
+"%1|KMyMoney files (*.kmy)\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Archivos de KMyMoney (*.kmy)\n"
+"%2|Todos los archivos (*.*)"
+
+#: dialogs/kstartdlg.cpp:102
+msgid "Recent Files"
+msgstr "Archivos Recientes"
+
+#: dialogs/kstartdlg.cpp:217
+msgid "Blank Document"
+msgstr "Documento vacío"
+
+#: dialogs/knewbudgetdlg.cpp:71
+msgid "Please specify a budget name"
+msgstr "Por favor especifique un nombre de presupuesto"
+
+#: dialogs/kgncpricesourcedlg.cpp:48
+#, c-format
+msgid "Investment: %1"
+msgstr "Inversión: %1"
+
+#: dialogs/kgncpricesourcedlg.cpp:49
+#, c-format
+msgid "Quote source: %1"
+msgstr "Fuente de la Cotización: %1"
+
+#: dialogs/kmymoneypricedlg.cpp:62 dialogs/ksecuritylisteditor.cpp:69
+msgid "Delete this entry"
+msgstr "Borrar esta entrada"
+
+#: dialogs/ksecuritylisteditor.cpp:70
+msgid "Remove this security item from the file"
+msgstr "Eliminar este valor bursátil del archivo"
+
+#: dialogs/ksecuritylisteditor.cpp:73
+msgid "&Add"
+msgstr "&Añadir"
+
+#: dialogs/kmymoneypricedlg.cpp:68 dialogs/ksecuritylisteditor.cpp:75
+msgid "Add a new entry"
+msgstr "Añade una nueva entrada"
+
+#: dialogs/ksecuritylisteditor.cpp:76
+msgid "Create a new security entry."
+msgstr "Crea un nuevo valor bursátil."
+
+#: dialogs/keditequityentrydlg.cpp:77 dialogs/kmymoneypricedlg.cpp:74
+#: dialogs/ksecuritylisteditor.cpp:81
+msgid "Modify the selected entry"
+msgstr "Modifica la entrada escogida"
+
+#: dialogs/ksecuritylisteditor.cpp:82
+msgid "Change the security information of the selected entry."
+msgstr "Cámbia la información del valor bursátil escogido."
+
+#: dialogs/kmymoneypricedlg.cpp:80 dialogs/ksecuritylisteditor.cpp:87
+msgid "Close the dialog"
+msgstr "Cerrar el diálogo"
+
+#: dialogs/kmymoneypricedlg.cpp:81 dialogs/ksecuritylisteditor.cpp:88
+msgid "Use this to close the dialog and return to the application."
+msgstr "Use esto para cerrar el diálogo y volver a la aplicación."
+
+#: dialogs/ksecuritylisteditor.cpp:184
+msgid ""
+"Do you really want to remove the currency <b>%1</b> from the file?</"
+"p><i>Note: It is currently not supported to add currencies.</i>"
+msgstr ""
+"¿Desea realmente eliminar la divisa <b>%1</b> del archivo?</p> <i>Nota: "
+"Actualmente no es posible añadir divisas.</i>"
+
+#: dialogs/ksecuritylisteditor.cpp:187
+msgid "Do you really want to remove the %1 <b>%2</b> from the file?"
+msgstr "¿Desea realmente eliminar el %1 <b>%2</b> del archivo?"
+
+#: dialogs/ksecuritylisteditor.cpp:190
+msgid "Delete security"
+msgstr "Borrar valor bursátil"
+
+#: dialogs/kmymoneypricedlg.cpp:63
+msgid "Remove this price item from the file"
+msgstr "Elimine este precio del archivo"
+
+#: dialogs/kmymoneypricedlg.cpp:66 dialogs/mymoneyqifprofileeditor.cpp:94
+msgid "&New"
+msgstr "&Nuevo"
+
+#: dialogs/kmymoneypricedlg.cpp:69
+msgid "Create a new price entry."
+msgstr "Crea una nueva entrada de precio."
+
+#: dialogs/kmymoneypricedlg.cpp:75
+msgid "Change the details of selected price information."
+msgstr "Cambia los detalles de la información de precio escogida."
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Do you really want to delete the selected price entry?"
+msgstr "¿Desea realmente borrar el precio seleccionado?"
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Delete price information"
+msgstr "Borrar información de precio"
+
+#: dialogs/kchooseimportexportdlg.cpp:46
+msgid ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Por favor escoja el tipo de importación que desea realizar. Dispone de\n"
+"una breve descripción de cada tipo en el fondo de la pantalla, que se\n"
+"actualiza cuando escoge una opción.\n"
+"\n"
+"Cuando escoja un tipo por favor pulse el botón Aceptar."
+
+#: dialogs/kchooseimportexportdlg.cpp:50 dialogs/rc.cpp:22
+msgid "Choose import type:"
+msgstr "Escoja tipo de importación:"
+
+#: dialogs/kchooseimportexportdlg.cpp:51 dialogs/rc.cpp:20
+msgid "Choose Import Type Dialog"
+msgstr "Diálogo de selección de tipo de importación"
+
+#: dialogs/kchooseimportexportdlg.cpp:53
+msgid ""
+"Please choose the type of export you wish to perform. A simple explanation\n"
+"of the export type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an export type please press the OK button."
+msgstr ""
+"Por favor escoja el tipo de exportación a realizar. Dispone de una breve\n"
+"descripción del tipo de exportación en el fondo de la pantalla, que es\n"
+"actualizado cuando escoge una opción.\n"
+"\n"
+"Cuando escoja el tipo adecuado de exportación, por favor pulse el botón "
+"Aceptar."
+
+#: dialogs/kchooseimportexportdlg.cpp:57
+msgid "Choose export type:"
+msgstr "Escoja tipo de Exportación:"
+
+#: dialogs/kchooseimportexportdlg.cpp:58
+msgid "Choose Export Type Dialog"
+msgstr "Diálogo de selección de tipo de Exportación:"
+
+#: dialogs/kchooseimportexportdlg.cpp:78
+msgid ""
+"QIF files are created by the popular accounting program Quicken.\n"
+"Another dialog will appear, if you choose this type, asking for further\n"
+"information relevant to the Quicken format."
+msgstr ""
+"Los archivos QIF son creados por el popular programa de contabilidad "
+"Quicken.\n"
+"A continuación, si escoge este tipo, aparecerá otro diálogo, donde se le\n"
+"preguntará unos datos relevantes para el formato Quicken."
+
+#: dialogs/kchooseimportexportdlg.cpp:82
+msgid ""
+"The CSV type uses a comma delimeted text file that can be used by\n"
+"most popular spreadsheet programs available for Linux and other operating\n"
+"systems."
+msgstr ""
+"El tipo CSV usa un archivo de texto delimitado por comas que puede ser usado "
+"por las\n"
+"hojas de cálculo más populares disponibles en Linux\n"
+" y otros Sistemas Operativos."
+
+#: dialogs/kequitypriceupdatedlg.cpp:222
+msgid "%1 units in %2"
+msgstr "%1 unidades en %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid ""
+"Failed to retrieve an exchange rate for %1 from %2. It will be skipped this "
+"time."
+msgstr ""
+"No ha sido posible obtener una cotización de %1 de %2. Será salteada esta "
+"vez."
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid "Price Update Failed"
+msgstr "La actualización de la cotización ha fallado"
+
+#: dialogs/kequitypriceupdatedlg.cpp:427
+msgid ""
+"Failed to retrieve a quote for %1 from %2. Press <b>No</b> to remove the "
+"online price source from this security permanently, <b>Yes</b> to continue "
+"updating this security during future price updates or <b>Cancel</b> to stop "
+"the current update operation."
+msgstr ""
+"Falló al obtener una cotización para %1 de %2. Presione <b>No</b> para "
+"eliminar el origen de precios online de este valor bursátil permanentemente, "
+"<b>Sí</b> para continuar actualizando este valor bursátil en futuras "
+"actualizaciones de cotización o <b>Cancelar</b> para frenar esta operación "
+"de actualización."
+
+#: dialogs/kequitypriceupdatedlg.cpp:427 dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Price Update Failed"
+msgstr "La actualización de la cotización ha fallado"
+
+#: dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Cannot update security <b>%1</b>: %2"
+msgstr "No se pudo actualizar valor bursátil <b>%1</b>: %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:528
+msgid "Price for %1 updated (id %2)"
+msgstr "Precio de %1 actualizado (id %2)"
+
+#: dialogs/kequitypriceupdatedlg.cpp:534
+msgid "Received an invalid price for %1, unable to update."
+msgstr ""
+"Se ha recibido un precio no válido para %1, no ha sido posible actualizar."
+
+#: dialogs/kequitypriceupdatedlg.cpp:554
+msgid ""
+"Received a price for %1 (id %2), but this symbol is not on the list! "
+"Aborting entire update."
+msgstr ""
+"Se ha recibido un precio para %1 (id %2), pero este símbolo no está en la "
+"lista! Se abortará toda la actualización."
+
+#: dialogs/transactioneditor.cpp:222
+msgid ""
+"The number <b>%1</b> has already been used in account <b>%2</b>. Do you want "
+"to replace it with the next available number?"
+msgstr ""
+"El número <b>%1</b> ya fue usado en la cuenta <b>%2</b>. Desea reemplazarlo "
+"con el seguinte número disponible?"
+
+#: dialogs/transactioneditor.cpp:222
+msgid "Duplicate number"
+msgstr "Número duplicado"
+
+#: dialogs/transactioneditor.cpp:303
+msgid ""
+"This transaction has more than two splits and is based on a different "
+"currency (%1). Using this account to modify the transaction is currently not "
+"very well supported by KMyMoney and may result in false results."
+msgstr ""
+"Este asiento tiene más de dos partidas y está basado en una divisa diferente "
+"(%1). En la actualidad, el uso de esta cuenta para modificar el asiento no "
+"está bien soportado por KMyMoney y puede ocasionar resultados falsos."
+
+#: dialogs/transactioneditor.cpp:305
+msgid ""
+"KMyMoney was not able to find a more appropriate account to edit this "
+"transaction. Nevertheless, you are allowed to modify the transaction. If you "
+"don't want to edit this transaction, please cancel from editing next."
+msgstr ""
+"KMyMoney no ha podido encontrar una cuenta más adecuada para editar este "
+"asiento. Sin embargo, se le permite modificar el asiento. Si no desea "
+"hacerlo, cancele antes de proseguir con la edición."
+
+#: dialogs/transactioneditor.cpp:307
+msgid ""
+"Using e.g. <b>%1</b> to edit this transaction is a better choice. "
+"Nevertheless, you are allowed to modify the transaction. If you want to use "
+"the suggested account instead, please cancel from editing next and change "
+"the view to the suggested account."
+msgstr ""
+"Usar p. ej. <b>%1</b> para editar este asiento es mejor opción. Sin embargo, "
+"se le permite modificar el asiento. Si desea usar la cuenta sugerida en su "
+"lugar, cancele la edición y cambie la vista para la cuenta sugerida"
+
+#: dialogs/transactioneditor.cpp:410
+msgid ""
+"This transaction has more than two splits and is originally based on a "
+"different currency (%1). Using this account to modify the transaction may "
+"result in rounding errors. Do you want to continue?"
+msgstr ""
+"Este asientos tiene más de dos partidas y está basado en una divisa "
+"diferente (%1). En la actualidad, el uso de esta cuenta para modificar el "
+"asiento no está bien soportado por KMyMoney y puede ocasionar resultados "
+"falsos."
+
+#: dialogs/transactioneditor.cpp:412
+msgid ""
+"At least one of the selected transactions has more than two splits and is "
+"originally based on a different currency (%1). Using this account to modify "
+"the transactions may result in rounding errors. Do you want to continue?"
+msgstr ""
+"Este asiento tiene más de dos partidas y está basado en una divisa diferente "
+"(%1). En la actualidad, el uso de esta cuenta para modificar el asiento no "
+"está bien soportado por KMyMoney y puede ocasionar resultados falsos."
+
+#: dialogs/transactioneditor.cpp:557
+msgid "Storing transactions"
+msgstr "Guardando asientos"
+
+#: dialogs/transactioneditor.cpp:603 widgets/kmymoneybriefschedule.cpp:65
+msgid "&Enter"
+msgstr "I&ntroducir"
+
+#: dialogs/transactioneditor.cpp:606
+msgid "Use this to enter the transaction into the ledger."
+msgstr "Utilice esto para ingresar el asiento al libro mayor"
+
+#: dialogs/transactioneditor.cpp:607
+msgid "&Schedule"
+msgstr "Planificación"
+
+#: dialogs/transactioneditor.cpp:609
+msgid "Accepts the entered data and stores it as schedule"
+msgstr "Acepta los datos introducidos y los guarda como planificación"
+
+#: dialogs/transactioneditor.cpp:610
+msgid "Use this to schedule the transaction for later entry into the ledger."
+msgstr ""
+"Utilice esto para planificar el asiento para ingresarlo posteriormente al "
+"libro mayor"
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"The transaction you are about to enter has a post date in the future.<br/"
+"><br/>Do you want to enter it in the ledger or add it to the schedules?"
+msgstr ""
+"El asiento que está a punto de ingresar tiene una fecha en el futuro. <br/> "
+"<br/>¿Desea ingresarlo en el libro mayor o agregarlo a las planificaciones?"
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"_: Dialog caption for 'Enter or schedule' dialog\n"
+"Enter or schedule?"
+msgstr "Ingresar o planificar?"
+
+#: dialogs/transactioneditor.cpp:671
+msgid ""
+"The balance of account <b>%1</b> dropped below the warning balance of %2."
+msgstr ""
+"El saldo de la cuenta <b>%1</b> cayó por debajo del límite de advertencia de "
+"saldo de %2."
+
+#: dialogs/transactioneditor.cpp:677
+msgid ""
+"The balance of account <b>%1</b> dropped below the minimum balance of %2."
+msgstr ""
+"El saldo de la cuenta <b>%1</b> cayó por debajo del saldo mínimo de %2."
+
+#: dialogs/transactioneditor.cpp:683
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit warning "
+"limit of %2."
+msgstr ""
+"El saldo de la cuenta <b>%1</b> cayó por debajo de la advertencia de crédito "
+"máximo de %2."
+
+#: dialogs/transactioneditor.cpp:689
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit limit of %"
+"2."
+msgstr ""
+"El saldo de la cuenta <b>%1</b> cayó por debajo del límite máximo de crédito "
+"de %2."
+
+#: dialogs/transactioneditor.cpp:740
+msgid "Payer/Receiver"
+msgstr "Acreedor"
+
+#: dialogs/transactioneditor.cpp:748
+msgid "Category/Account"
+msgstr "Categoría/Cuenta"
+
+#: dialogs/transactioneditor.cpp:980 dialogs/transactioneditor.cpp:1016
+#: dialogs/transactioneditor.cpp:1378 dialogs/transactioneditor.cpp:1399
+#: dialogs/transactioneditor.cpp:1422 dialogs/transactioneditor.cpp:1443
+#: dialogs/transactioneditor.cpp:1505 dialogs/transactioneditor.cpp:1509
+#: widgets/transaction.cpp:902
+msgid "Transfer from"
+msgstr "Cuenta origen"
+
+#: dialogs/transactioneditor.cpp:982 dialogs/transactioneditor.cpp:1018
+#: dialogs/transactioneditor.cpp:1401 dialogs/transactioneditor.cpp:1445
+#: dialogs/transactioneditor.cpp:1506 widgets/transaction.cpp:902
+msgid "Transfer to"
+msgstr "Transferir a"
+
+#: dialogs/transactioneditor.cpp:1259
+msgid "Select autofill transaction"
+msgstr "Escoger asiento para autocompletar"
+
+#: dialogs/transactionmatcher.cpp:77
+msgid "First transaction does not match requirement for matching"
+msgstr "El primer asiento no cumple con los requerimientos de coincidencia"
+
+#: dialogs/transactionmatcher.cpp:79
+msgid "Second transaction does not match requirement for matching"
+msgstr "El segundo asiento no cumple con los requerimientos de coincidencia"
+
+#: dialogs/transactionmatcher.cpp:83 dialogs/transactionmatcher.cpp:133
+msgid "Splits for %1 have conflicting values (%2,%3)"
+msgstr "Las partidas de %1 tienen valores en conflicto (%2, %3)"
+
+#: dialogs/transactionmatcher.cpp:96 dialogs/transactionmatcher.cpp:149
+msgid ""
+"Both of these transactions have been imported into %1. Therefore they "
+"cannot be matched. Matching works with one imported transaction and one non-"
+"imported transaction."
+msgstr ""
+"Ambos asientos han sido importados en %1. Por lo tanto, no pueden ser "
+"concilidados. La conciliación sólo funciona con un asiento importado y un "
+"asiento no importado."
+
+#: dialogs/transactionmatcher.cpp:101 dialogs/transactionmatcher.cpp:156
+msgid "Unable to match all splits (%1)"
+msgstr "No fue posible hacer coinicidir todas las partidas (%1)"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:65
+msgid "Account and transfer account are the same. Please change one."
+msgstr "Las cuentas deudora y transferida son la misma. Por favor, cambie una."
+
+#: dialogs/kconfirmmanualenterdlg.cpp:84
+msgid "Payee changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Beneficiario cambiado.<br>&nbsp;&nbsp;&nbsp;Anterior: <b>%1</b>, Nuevo: <b>%"
+"2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:92
+#: dialogs/kconfirmmanualenterdlg.cpp:100
+msgid "Account changed. Old: \"%1\", New: \"%2\""
+msgstr "Cuenta cambiada. Anterior: \"%1\", Nueva: \"%2\""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:107
+msgid "Account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Cuenta cambiada.<br>&nbsp;&nbsp;&nbsp;Anterior: <b>%1</b>, Nueva: <b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:115
+msgid ""
+"Transfer account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</"
+"b><p>"
+msgstr ""
+"Cuenta de transferencia cambiada.<br>&nbsp;&nbsp;&nbsp;Anterior: \"%1\", "
+"Nueva: \"%2\""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:143
+msgid ""
+"Category changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Categoría cambiada.<br>&nbsp;&nbsp;&nbsp;Anterior: <b>%1</b>, Nueva: <b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:151
+#: dialogs/kconfirmmanualenterdlg.cpp:153
+msgid "empty"
+msgstr "vacío"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:157
+msgid "Memo changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Nota cambiada.<br>&nbsp;&nbsp;&nbsp;Anterior: <b>%1</b>, Nueva: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:166
+msgid "Amount changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Importe cambiado.<br>&nbsp;&nbsp;&nbsp;Anterior: <b>%1</b>, Nuevo: <b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:175
+msgid ""
+"Reconciliation flag changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%"
+"2</b><p>"
+msgstr ""
+"Bandera de reconciliación cambiada.<br>&nbsp;&nbsp;&nbsp;Anterior: <b>%1</"
+"b>, Nueva: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:182
+msgid "Fatal error in determining data: "
+msgstr "Error fatal durante la determinación de los datos:"
+
+#: dialogs/kselectdatabasedlg.cpp:56
+msgid ""
+"There are no Qt SQL drivers installed in your system.\n"
+"Please consult documentation for your distro, or visit the Qt web site (www."
+"trolltech.com) and search for SQL drivers."
+msgstr ""
+"No hay manejadores de Qt SQL instalados en su sistema.\n"
+"Por favor, consulte la información de su distribución, o visite el sitio de "
+"Qt (www.trolltech.com) y busque por manejadores de SQL."
+
+#: dialogs/kselectdatabasedlg.cpp:100
+msgid "Qt SQL driver %1 is no longer installed on your system"
+msgstr "El manejador de Qt SQL %1 no esta más instalado en su sistema"
+
+#: dialogs/kselectdatabasedlg.cpp:107
+msgid "Qt SQL driver %1 is not suported"
+msgstr "El manejador de Qt SQL %1 no está soportado"
+
+#: dialogs/kselectdatabasedlg.cpp:164
+msgid "SQLite files (*.sql);; All files (*.*)"
+msgstr "Archivos de SQLite (*.sql);; Todos los archivos (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:167
+msgid "Select SQLite file"
+msgstr "Escoger archivo SQLite"
+
+#: dialogs/kselectdatabasedlg.cpp:188
+msgid "All files (*.*)"
+msgstr "Todos los archivos (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:191
+msgid "Select output file"
+msgstr "Escoja archivo de salida"
+
+#: dialogs/investactivities.cpp:168
+msgid "%1 (Brokerage)"
+msgstr "%1 (Corretaje)"
+
+#: dialogs/investactivities.cpp:200 dialogs/investactivities.cpp:288
+#: dialogs/investactivities.cpp:425 widgets/transaction.cpp:1548
+msgid "Price/share"
+msgstr "Precio por acción"
+
+#: dialogs/investactivities.cpp:586
+msgid "Ratio 1/"
+msgstr "Ratio 1/"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid ""
+"<p>Please check that all the details in the following dialog are correct and "
+"press OK.</p><p>Editable data can be changed and can either be applied to "
+"just this occurence or for all subsequent occurences for this schedule. "
+"(You will be asked what you intend after pressing OK in the following dialog)"
+"</p>"
+msgstr ""
+"<b><p>Por favor, compruebe que todos los detalles son correctos y pulse "
+"Aceptar </p><p>Los datos editables pueden ser cambiados y también pueden ser "
+"aplicados a solo esta o a todas las siguientes apariciones de este evento "
+"planificado (Se le preguntará qué pretende después de pulsar Aceptar).</p></"
+"b>"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid "Enter scheduled transaction"
+msgstr "Ingresar asiento planificado"
+
+#: dialogs/kcsvprogressdlg.cpp:65 dialogs/kexportdlg.cpp:65
+msgid "&Export"
+msgstr "&Exportar"
+
+#: dialogs/kexportdlg.cpp:67 dialogs/kimportdlg.cpp:68
+msgid "Start operation"
+msgstr "Iniciar operación"
+
+#: dialogs/kexportdlg.cpp:68
+msgid "Use this to start the export operation"
+msgstr "Use esto para iniciar la operación de exportación"
+
+#: dialogs/kexportdlg.cpp:71 dialogs/kimportdlg.cpp:72
+msgid "&Browse..."
+msgstr "&Escoger..."
+
+#: dialogs/kexportdlg.cpp:73 dialogs/kimportdlg.cpp:74
+msgid "Select filename"
+msgstr "Escoja nombre de archivo"
+
+#: dialogs/kexportdlg.cpp:74 dialogs/kimportdlg.cpp:75
+msgid "Use this to select a filename to export to"
+msgstr "Use esto para escoger un nombre de archivo al que exportar"
+
+#: dialogs/kexportdlg.cpp:77 dialogs/kimportdlg.cpp:78
+#: dialogs/settings/ksettingsonlinequotes.cpp:64
+#: widgets/kmymoneyonlinequoteconfig.cpp:64
+msgid "&New..."
+msgstr "&Nuevo..."
+
+#: dialogs/kexportdlg.cpp:79 dialogs/kimportdlg.cpp:80
+#: dialogs/mymoneyqifprofileeditor.cpp:96
+msgid "Create a new profile"
+msgstr "Crea un nuevo perfil"
+
+#: dialogs/kexportdlg.cpp:80 dialogs/kimportdlg.cpp:81
+msgid "Use this to open the profile editor"
+msgstr "Use esto para abrir el editor de perfiles"
+
+#: dialogs/keditloanwizard.cpp:56
+msgid "Edit loan wizard"
+msgstr "Asistente para la Edición de préstamos"
+
+#: dialogs/keditloanwizard.cpp:58
+msgid ""
+"Please enter the date from which on the following changes will be effective. "
+"The date entered must be later than the opening date of this account (%1), "
+"but must not be in the future. The default will be today."
+msgstr ""
+"Introduzca la fecha a partir de la cual los siguientes cambios serán "
+"efectivos. La fecha que escriba debe ser posterior a la de apertura de la "
+"cuenta (%1), pero no debe ser futura. Por defecto, será hoy."
+
+#: dialogs/keditloanwizard.cpp:76
+msgid ""
+"Note: you will not be able to modify this account today, because the opening "
+"date \"%1\" is in the future. Please revisit this dialog when the time has "
+"come."
+msgstr ""
+"Nota: no podrá modificar esta cuenta hoy, debido a que la fecha de apertura "
+"\"%1\" está en el futuro. Por favor vuelva a este diálogo cuando llegue el "
+"momento."
+
+#: dialogs/keditloanwizard.cpp:244
+msgid ""
+"Your previous selection was \"%1\". If you select another option, KMyMoney "
+"will dismiss the changes you have just entered. Do you wish to proceed?"
+msgstr ""
+"Su elección anterior fue \"%1\". Si escoje otra, KMyMoney anulará los "
+"cambios que acaba de hacer. ¿Quiere continuar?"
+
+#: dialogs/kcategoryreassigndlg.cpp:81
+msgid ""
+"At least one transaction/schedule still references the category <b>%1</b>. "
+"However, at least one category with the same currency must exist so that the "
+"transactions/schedules can be reassigned."
+msgstr ""
+"Al menos un asiento/planificación aún hace referencia a la categoría <b>%1</"
+"b>. Sin embargo, al menos una categoría con la misma divisa debe existir "
+"para que los asientos/planificaciones puedan ser reasignados."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid ""
+"This dialog does not allow to create new categories. Please pick a category "
+"from the list."
+msgstr ""
+"Este diálogo no permite crear nuevas categorías. Por favor, escoja una "
+"categoría de la lista."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid "Category creation"
+msgstr "Creación de categoría"
+
+#: dialogs/kbackupdlg.cpp:61
+msgid "C&hoose..."
+msgstr "Es&coger..."
+
+#: dialogs/kbackupdlg.cpp:63
+msgid "Select mount point"
+msgstr "Escoja punto de montaje"
+
+#: dialogs/kbackupdlg.cpp:64
+msgid "Use this to browse to the mount point."
+msgstr "Use esto para buscar el punto de montaje"
+
+#: dialogs/keditscheduledlg.cpp:293
+msgid "Next due date"
+msgstr "Próxima fecha de vencimiento"
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid ""
+"You have turned on the GPG encryption support. This means, that new files "
+"will be stored encrypted. Existing files will not be encrypted "
+"automatically. To achieve encryption of existing files, please use the "
+"<b>File/Save as...</b> feature and store the file under a different name. "
+"Once confident with the result, feel free to delete the old file and rename "
+"the encrypted one to the old name."
+msgstr ""
+"Ha activado el soporte para codificación GPG. Esto significa que los "
+"archivos nuevos se guardarán codificados. Los archivos existentes no se "
+"codificarán automáticamente. Para codificar los archivos existentes, por "
+"favor utilice <b>Archivo->Guardar Como...</b> y guarde el archivo bajo un "
+"nombre diferente. Una vez que confíe en el resultado, borre el viejo archivo "
+"y renombre el archivo codificado al antiguo nombre."
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid "GPG encryption activated"
+msgstr "Codificación con GPG activada"
+
+#: dialogs/settings/ksettingshome.cpp:51
+msgid "&Up"
+msgstr "&Subir"
+
+#: dialogs/settings/ksettingshome.cpp:53
+msgid "Move selected item up"
+msgstr "Mueve el objeto escogido cara arriba"
+
+#: dialogs/settings/ksettingshome.cpp:54
+msgid "Use this to move the selected item up by one position in the list."
+msgstr ""
+"Emplee esto para mover el objeto seleccionado una posición cara arriba en la "
+"lista."
+
+#: dialogs/settings/ksettingshome.cpp:55
+msgid "&Down"
+msgstr "&Bajar"
+
+#: dialogs/settings/ksettingshome.cpp:57
+msgid "Move selected item down"
+msgstr "Mueve el objeto seleccionado cara abajo"
+
+#: dialogs/settings/ksettingshome.cpp:58
+msgid "Use this to move the selected item down by one position in the list."
+msgstr ""
+"Use esto para mover el objeto seleccionado una posición cara abajo en la "
+"lista."
+
+#: dialogs/settings/rc.cpp:1
+msgid "Color settings"
+msgstr "Configuración de los colores"
+
+#: dialogs/settings/rc.cpp:2
+msgid "Foreground"
+msgstr "Frente"
+
+#: dialogs/settings/rc.cpp:3
+msgid "Text colors"
+msgstr "Colores del texto"
+
+#: dialogs/settings/rc.cpp:4
+msgid "Grid color"
+msgstr "Color de la rejilla"
+
+#: dialogs/settings/rc.cpp:5
+msgid "Erronous transaction"
+msgstr "Asiento erróneo"
+
+#: dialogs/settings/rc.cpp:6
+msgid "Value with missing conversion rate"
+msgstr "Valor sin tasas de conversión"
+
+#: dialogs/settings/rc.cpp:7
+msgid "Negative value"
+msgstr "Valor negativo"
+
+#: dialogs/settings/rc.cpp:8
+msgid "Background"
+msgstr "Fondo"
+
+#: dialogs/settings/rc.cpp:10
+msgid "List background colors"
+msgstr "Color del fondo de la lista"
+
+#: dialogs/settings/rc.cpp:11
+msgid "Normal"
+msgstr "Normal"
+
+#: dialogs/settings/rc.cpp:12
+msgid "Alternate"
+msgstr "Alternativo"
+
+#: dialogs/settings/rc.cpp:13
+msgid "Special background colors"
+msgstr "Colores especiales de fondo"
+
+#: dialogs/settings/rc.cpp:14
+msgid "Ledger group separator"
+msgstr "Separador de grupos del libro mayor"
+
+#: dialogs/settings/rc.cpp:15
+msgid "Required field"
+msgstr "Campo requerido"
+
+#: dialogs/settings/rc.cpp:16
+msgid "Imported transaction"
+msgstr "Asiento importado"
+
+#: dialogs/settings/rc.cpp:17
+msgid "Matched transaction"
+msgstr "Asiento coincidente"
+
+#: dialogs/settings/rc.cpp:18
+msgid "Font settings"
+msgstr "Configuración de tipografías:"
+
+#: dialogs/settings/rc.cpp:19
+msgid "Use system fonts"
+msgstr "Usar tipos de letra del sistema"
+
+#: dialogs/settings/rc.cpp:20
+msgid "Individual font settings"
+msgstr "Configuración de tipos de letra individuales"
+
+#: dialogs/settings/rc.cpp:24
+msgid "Number of Days of Account Cycle:"
+msgstr "Número de Días del Ciclo de Cuenta:"
+
+#: dialogs/settings/rc.cpp:26
+msgid "Number of Days to Forecast:"
+msgstr "Número de Días a Pronosticar:"
+
+#: dialogs/settings/rc.cpp:27
+msgid "Forecast Method"
+msgstr "Método de Pronóstico"
+
+#: dialogs/settings/rc.cpp:28
+msgid "Scheduled and Future Transactions"
+msgstr "Asientos Futuros y Planificados"
+
+#: dialogs/settings/rc.cpp:29
+msgid "History-based"
+msgstr "Histórico"
+
+#: dialogs/settings/rc.cpp:30
+msgid "History-based settings"
+msgstr "Configuración del histórico"
+
+#: dialogs/settings/rc.cpp:31
+msgid "Number of Cycles to use in Forecast:"
+msgstr "Número de ciclos a utilizar:"
+
+#: dialogs/settings/rc.cpp:36
+msgid "General Settings"
+msgstr "Configuraciones Generales"
+
+#: dialogs/settings/rc.cpp:37
+msgid "Global"
+msgstr "Global"
+
+#: dialogs/settings/rc.cpp:38
+msgid "Startup page options"
+msgstr "Opciones de la página inicial"
+
+#: dialogs/settings/rc.cpp:39
+msgid "Start with homepage"
+msgstr "Comenzar en la página de inicio"
+
+#: dialogs/settings/rc.cpp:40
+msgid "Start with last selected view"
+msgstr "Comenzar en la última página escogida"
+
+#: dialogs/settings/rc.cpp:41
+msgid "Precision settings"
+msgstr "Configuración de la precisión"
+
+#: dialogs/settings/rc.cpp:42
+msgid "Price precision"
+msgstr "Precisión del precio"
+
+#: dialogs/settings/rc.cpp:43
+msgid "digits"
+msgstr "dígitos"
+
+#: dialogs/settings/rc.cpp:44
+msgid "Autosave options"
+msgstr "Opciones de autoguardado"
+
+#: dialogs/settings/rc.cpp:45
+msgid "Autosave periodically"
+msgstr "Autoguardar periódicamente"
+
+#: dialogs/settings/rc.cpp:46
+msgid "minutes"
+msgstr "minutos"
+
+#: dialogs/settings/rc.cpp:47
+msgid "Fiscal Year"
+msgstr "Año Fiscal"
+
+#: dialogs/settings/rc.cpp:48
+msgid "Your fiscal year starts on"
+msgstr "Su año fiscal comienza el"
+
+#: dialogs/settings/rc.cpp:49
+msgid "January"
+msgstr "Enero"
+
+#: dialogs/settings/rc.cpp:50
+msgid "February"
+msgstr "Febrero"
+
+#: dialogs/settings/rc.cpp:51
+msgid "March"
+msgstr "Marzo"
+
+#: dialogs/settings/rc.cpp:52
+msgid "April"
+msgstr "Abril"
+
+#: dialogs/settings/rc.cpp:53
+msgid "May"
+msgstr "Mayo"
+
+#: dialogs/settings/rc.cpp:54
+msgid "June"
+msgstr "Junio"
+
+#: dialogs/settings/rc.cpp:55
+msgid "July"
+msgstr "Julio"
+
+#: dialogs/settings/rc.cpp:56
+msgid "August"
+msgstr "Agosto"
+
+#: dialogs/settings/rc.cpp:57
+msgid "September"
+msgstr "Septiembre"
+
+#: dialogs/settings/rc.cpp:58
+msgid "October"
+msgstr "Octubre"
+
+#: dialogs/settings/rc.cpp:59
+msgid "November"
+msgstr "Noviembre"
+
+#: dialogs/settings/rc.cpp:60
+msgid "December"
+msgstr "Diciembre"
+
+#: dialogs/settings/rc.cpp:61
+msgid "Views"
+msgstr "Vistas"
+
+#: dialogs/settings/rc.cpp:62
+msgid "Synchronize account selection of ledger and investment view"
+msgstr "Sincronizar la selección de cuenta del libro mayor y las inversiones"
+
+#: dialogs/settings/rc.cpp:63
+msgid ""
+"Check the views you want to enable, uncheck those you want to hide, because "
+"you don't need the functionality."
+msgstr ""
+"Marque las vistas que desea habilitar, desmarque aquellas que desee ocultar, "
+"porque no necesita esa funcionalidad."
+
+#: dialogs/settings/rc.cpp:64
+msgid "Icon size of navigation bar"
+msgstr "Tamaño de iconos de la barra de navegación"
+
+#: dialogs/settings/rc.cpp:65
+msgid "Micro (16px)"
+msgstr "Micro (16px)"
+
+#: dialogs/settings/rc.cpp:66
+msgid "Small (32px)"
+msgstr "Pequeño (32px)"
+
+#: dialogs/settings/rc.cpp:67
+msgid "Normal (48px)"
+msgstr "Normal (48px)"
+
+#: dialogs/settings/rc.cpp:68
+msgid "Large (64px)"
+msgstr "Grande (64px)"
+
+#: dialogs/settings/rc.cpp:69
+msgid "Show title bar on each page"
+msgstr "Mostrar la barra de título en cada página"
+
+#: dialogs/rc.cpp:835 dialogs/settings/rc.cpp:70
+msgid "Filter"
+msgstr "Filtro"
+
+#: dialogs/settings/rc.cpp:71
+msgid "Accounts / Categories"
+msgstr "Cuentas / Categorías"
+
+#: dialogs/settings/rc.cpp:72
+msgid "Don't show unused categories"
+msgstr "No mostrar categorias no empleadas"
+
+#: dialogs/settings/rc.cpp:73
+msgid ""
+"This option hides all categories in the categories view that are not used in "
+"at least a single transaction. They are still shown in the category "
+"selection lists."
+msgstr ""
+"Esta opción oculta todas las categorías en la vista de categorías que no "
+"sean utilizadas en al menos un asiento. Todavía se muestran en la lista de "
+"selección de categorías."
+
+#: dialogs/settings/rc.cpp:74
+msgid "Don't show closed accounts"
+msgstr "No mostrar cuentas cerradas"
+
+#: dialogs/settings/rc.cpp:75
+msgid ""
+"This option hides all accounts that have been closed by the user in views "
+"and selection lists.\n"
+"\n"
+"You can use <b>View/Show all accounts</b> to temporarily show hidden "
+"accounts in the views."
+msgstr ""
+"Esta opción oculta todas las cuentas que hayan sido cerradas por el usuario "
+"en vistas y listas de selección.\n"
+"\n"
+"Puede utilizar <b>Vista->Mostrar todas las cuentas</b> para mostrar "
+"temporariamente las cuentas ocultas en las vistas."
+
+#: dialogs/settings/rc.cpp:76
+msgid "Show equity accounts"
+msgstr "Mostrar cuentas de patrimonio"
+
+#: dialogs/rc.cpp:332 dialogs/settings/rc.cpp:77 widgets/rc.cpp:160
+msgid "Schedules"
+msgstr "Programaciones"
+
+#: dialogs/settings/rc.cpp:78
+msgid "Don't show finished schedules"
+msgstr "No mostrar planificaciones finalizadas"
+
+#: dialogs/settings/rc.cpp:79
+msgid "This option hides all finished schedules in the schedules view."
+msgstr ""
+"Esta opción oculta todas las planificaciones finalizadas en la vista de "
+"Programaciones."
+
+#: dialogs/settings/rc.cpp:81
+msgid "Don't show transactions prior to"
+msgstr "Ocultar los asientos anteriores a"
+
+#: dialogs/settings/rc.cpp:82
+msgid "Don't show reconciled transactions"
+msgstr "Ocultar los asientos reconciliados"
+
+#: dialogs/settings/rc.cpp:83
+msgid "This option hides all reconciled transactions in the ledger view."
+msgstr "Esta opción oculta todos los asientos reconciliados en el libro mayor"
+
+#: dialogs/settings/rc.cpp:84 widgets/rc.cpp:22
+msgid "GPG encryption settings"
+msgstr "Configuración del cifrado GPG"
+
+#: dialogs/settings/rc.cpp:85
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Access to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>additional recovery encryption</i> is only accessible, if the "
+"necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id "
+"0x8AFDDC8E is found in your keyring."
+msgstr ""
+"Esta página le permite ajustar los parámetros para guardar sus datos de "
+"<b>KMyMoney</b> cifrados mediante <b>GPG</b>.<p>\n"
+"No se permite acceder a la configuración si no se encuentra <b>GPG</b> en su "
+"sistema. En este caso, asegúrese de que <b>GPG</b> trabaja correctamente "
+"para el usuario actual.<p>\n"
+"El grupo <i>Recuperación de cifrado</i> solamente estará accesible de "
+"encontrarse la llave para <b>kmymoney-recover@users.sourceforge.net</b> con "
+"id 0x8AFDDC8E."
+
+#: dialogs/settings/rc.cpp:86 widgets/rc.cpp:24
+msgid "Use GPG encryption"
+msgstr "Guardar cifrado con GPG"
+
+#: dialogs/settings/rc.cpp:87
+msgid "GPG encryption"
+msgstr "Codificación con GPG"
+
+#: dialogs/settings/rc.cpp:88
+msgid "Your key"
+msgstr "Su clave"
+
+#: dialogs/settings/rc.cpp:89
+msgid ""
+"This combo box lists all the secret keys you have in your keyring. Select "
+"the one you want to use for encryption when saving to a file."
+msgstr ""
+"Esta lista muestra todas las claves secretas en su llavero. Escoja la que "
+"desee utilizar para codificar cuando guarde un archivo."
+
+#: dialogs/settings/rc.cpp:90
+msgid "Additonal keys"
+msgstr "Claves adicionales"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:50 dialogs/settings/rc.cpp:91
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading 0x."
+msgstr ""
+"Introduzca el id de la llave que desea usar para cifrar los datos. Este "
+"puede ser o un e-mail o el identificador hexadecimal del id. En este caso no "
+"olvide el 0x inicial."
+
+#: dialogs/settings/rc.cpp:92 widgets/rc.cpp:28
+msgid ""
+"This symbol denotes, if the key for the given user id has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"Este símbolo indica si fue encontrada la llave para el identificador de "
+"usuario. Está en verde si fue encontrada, oscura si no lo ha sido."
+
+#: dialogs/kgpgkeyselectiondlg.cpp:61 dialogs/settings/rc.cpp:93
+msgid "Keys for all of the above user ids found"
+msgstr "Se han encontrado claves para todos los usuarios listados arriba"
+
+#: dialogs/settings/rc.cpp:94 widgets/rc.cpp:31
+msgid ""
+"This symbol denotes, if the KMyMoney recovery key has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"Este símbolo indica si la llave de recuperación de KMyMoney ha sido "
+"encontrada en su anillo de confianza. En este caso estará verde, si no se "
+"encuentra, será oscura."
+
+#: dialogs/settings/rc.cpp:95
+msgid "Recover Key available in keyring"
+msgstr "Clave de Recuperación disponible"
+
+#: dialogs/settings/rc.cpp:96
+msgid "Also encrypt with KMyMoney's recover key"
+msgstr "Codificar también con la clave de recuperación de KMyMoney"
+
+#: dialogs/settings/rc.cpp:97
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out.."
+msgstr ""
+"Puede cifrar sus datos también con la llave de recuperación de KMyMoney. "
+"Solo los desenvolventes del núcleo de KMyMoney poseen la llave privada "
+"imprescindible para descifrar tales datos.<p>\n"
+"\n"
+"Este mecanismo sirve por si usted pierde su llave y no puede acceder a los "
+"datos. Activando esta opción, los desarrolladores de KMyMoney podrán "
+"descifrar los datos y devolveselos en un formato lejible. Se le advierrte de "
+"que tendrá que responder unas preguntas detalladas acerca del contido de sus "
+"datos antes de poder enviarlos."
+
+#: dialogs/settings/rc.cpp:98
+msgid "Homepage Settings"
+msgstr "Configuración de la página de inicio"
+
+#: dialogs/settings/rc.cpp:99
+msgid "Up"
+msgstr "Subir"
+
+#: dialogs/settings/rc.cpp:100
+msgid "Down"
+msgstr "Bajar"
+
+#: dialogs/settings/rc.cpp:101
+msgid ""
+"Selected entries are shown on the home page of the application.<p>\n"
+"Use the buttons and checkboxes to customize the layout of the home page."
+msgstr ""
+"Las entradas seleccionadas se muestran en la página de início de la "
+"aplicación.<p>\n"
+"Emplee los botones y casillas para personalizar el aspecto de la página de "
+"inicio."
+
+#: dialogs/settings/rc.cpp:102
+msgid "Homepage/Summary page font scaling"
+msgstr "Escalado del tipo de letra en la página de inicio/resumen"
+
+#: dialogs/settings/rc.cpp:103
+msgid "Percentage of default font size:"
+msgstr "Porcentaje del tamaño de tipo de letra predeterminado:<"
+
+#: dialogs/settings/rc.cpp:104
+msgid ""
+"Remember font size when leaving the program if manually changed with mouse-"
+"wheel"
+msgstr ""
+"Recordar el tamaño de letra al salir del programa si se cambió manualmente "
+"con la rueda del ratón"
+
+#: dialogs/settings/rc.cpp:105
+msgid "Information display"
+msgstr "Información a mostrar"
+
+#: dialogs/settings/rc.cpp:106
+msgid "Show Account Limit Information"
+msgstr "Mostrar Información de Límites de Cuenta"
+
+#: dialogs/settings/rc.cpp:110 widgets/rc.cpp:47
+msgid ""
+"<i>Enter regular expressions which can be used to parse the data returned "
+"from the URL entered above. The symbol, price, and date must be found in "
+"the quote data to be usable. You may also try the KMyMoney user's "
+"mailinglist at <a href=\"mailto:kmymoney2-user@lists.sourceforge.net"
+"\">kmymoney2-user@lists.sourceforge.net</a> to find what settings work for "
+"other users in your country.</i>"
+msgstr ""
+"<i>Introduzca expresiones regulares con las que procesar los datos "
+"retornados de la URL antes introducida. El símbolo, precio y fecha deben "
+"encontrarse en los datos de cotización para ser usables. También puede mirar "
+"en la lista de usuários de KMyMoney en <a href=\"mailto:kmymoney2-user@lists."
+"sourceforge.net\"> kmymoney2-user@lists.sourceforge.net</a> para ver que "
+"configuraciones funcionan con otros usuários de su país.</i>"
+
+#: dialogs/settings/rc.cpp:113 widgets/rc.cpp:38
+msgid "Regular Expression to extract the symbol from the downloaded data"
+msgstr "Expresión Regular para extraer el símbolo de los datos descaregados"
+
+#: dialogs/settings/rc.cpp:114 widgets/rc.cpp:39
+msgid "Regular Expression to extract the price from the downloaded data"
+msgstr "Expresión Regular para extraer el precio de los datos descaregados"
+
+#: dialogs/settings/rc.cpp:115 widgets/rc.cpp:41
+msgid "URL to be used to download the quote"
+msgstr "URL desde la que descargar la cotización"
+
+#: dialogs/settings/rc.cpp:116 widgets/rc.cpp:42
+msgid ""
+"Enter the URL from which stock quotes will be fetched. <b>%1</b> will be "
+"replaced with the symbol for the security being quoted. For currency "
+"conversions, <b>%2</b> will be replaced with the currency to be quoted and "
+"<b>%1</b> with the currency the quote is based on."
+msgstr ""
+"Introduzca la URL de la cual tomar las cotizaciones de las acciones. <b>%1</"
+"b> será reemplazado con el símbolo del valor bursátil para el que se buscan "
+"cotizaciones. Para conversiones de divisas, <b>%2</b> será reemplazado con "
+"la divisa a la que convertir y <b>%1</b> con la divisa en la que se basa la "
+"cotización."
+
+#: dialogs/settings/rc.cpp:118 dialogs/settings/rc.cpp:121 widgets/rc.cpp:40
+#: widgets/rc.cpp:44
+msgid "Regular Expression to extract the date from the downloaded data"
+msgstr "Expresión Regular para extraer la fecha de los datos descaregados"
+
+#: dialogs/rc.cpp:807 dialogs/settings/rc.cpp:119 widgets/rc.cpp:45
+msgid "Date Format"
+msgstr "Formato de la fecha"
+
+#: dialogs/settings/rc.cpp:122
+msgid "Skip HTML stripping"
+msgstr "Saltear descarte de HTML"
+
+#: dialogs/settings/rc.cpp:123
+msgid ""
+"<p>For easier processing of the data returned by the online source, KMyMoney "
+"usually strips unused parts before it is parsed with the regular "
+"expressions. If matching of the fields relies on those items, then use this "
+"option to turn stripping off.</p>\n"
+"\n"
+"<p>The following items are usually removed by stripping:\n"
+"\n"
+"<ul>\n"
+"<li>HTML tags such as <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded characters such as <b>&amp;nbsp;</b></li>\n"
+"<li>duplicate whitespace</li>\n"
+"</ul>\n"
+"</p>"
+msgstr ""
+"<p>Para un procesamiento más fácil de los datos devueltos por la fuente "
+"online, KMyMoney generalmente descarte las partes no utilizadas antes de "
+"procesarlos con las expresionesregulares. Si la coincidencia de los campos "
+"depende de esos elementos, entonces utilice estaopción para desactivar el "
+"descarte.</p>\n"
+"\n"
+"<p>Los siguientes elementos generalmente son eliminados por el descarte:\n"
+"\n"
+"<ul>\n"
+"<li>Categorías de HTML tales como <b>&lt;tag&gt;</b></li>\n"
+"<li>& caracteres codificados tales como <b>&amp;nbsp;</b></li>\n"
+"<li>espacios en blanco duplicados</li>\n"
+"</ul>\n"
+"</p>"
+
+#: dialogs/settings/rc.cpp:127
+msgid "Register settings"
+msgstr "Configuración del registro"
+
+#: dialogs/settings/rc.cpp:128
+msgid "Display"
+msgstr "Mostrar"
+
+#: dialogs/settings/rc.cpp:131
+msgid ""
+"Using the ledger lens shows the details for the transaction that has focus "
+"in the ledger. Usually, when using the transaction form, only a one line "
+"summary is displayed for each transaction as the details are shown in the "
+"form."
+msgstr ""
+"Al utilizar el lente del libro mayor se muestran los detalles del asiento "
+"que tiene foco. Usualmente, al utilizar el formulario de asientos, se "
+"muestra sólo una linea de resumen para cada asiento ya que los detalles se "
+"muestran en el formulario."
+
+#: dialogs/settings/rc.cpp:133
+msgid "Always show a No. field"
+msgstr "Mostrar siempre un campo Nº"
+
+#: dialogs/settings/rc.cpp:134
+msgid "Show group header between transactions"
+msgstr "Mostrar un encabezado de grupo entre asientos"
+
+#: dialogs/settings/rc.cpp:135
+msgid ""
+"Draws a larger header above each group of transaction. The grouping depends "
+"on the current sort order."
+msgstr ""
+"Dibuja un encabezado más grande sobre cada grupo de asientos. El "
+"agrupamiento depende del orden actual."
+
+#: dialogs/settings/rc.cpp:136
+msgid "Show header for the previous and current fiscal year"
+msgstr "Mostrar encabezado para el año fiscal previo y el actual"
+
+#: dialogs/settings/rc.cpp:137
+msgid "Sorting"
+msgstr "Ordenamiento"
+
+#: dialogs/settings/rc.cpp:138
+msgid "Normal view"
+msgstr "Vista normal"
+
+#: dialogs/settings/rc.cpp:139
+msgid "Reconciliation view"
+msgstr "Vista de reconciliación"
+
+#: dialogs/settings/rc.cpp:140
+msgid "Search view"
+msgstr "Vista de búsqueda"
+
+#: dialogs/settings/rc.cpp:141
+msgid ""
+"Use the <i>left</i> and <i>right</i> buttons to add and remove sort options. "
+"Use the <i>up</i> and <i>down</i> buttons to modify the sort order. Double-"
+"Click a selected entry to toggle the sort order between <i>ascending</i> and "
+"<i>descending</i>."
+msgstr ""
+"Utilice los botones <i>izquierdo</i> y <i>derecho</i> para agregar y "
+"eliminar opciones de ordenamiento. Utilice los botones <i>arriba</i> y "
+"<i>abajo</i> para modificar el orden. Hacer doble clic sobre una entrada "
+"seleccionada cambia entre orden <i>ascendente</i> y <i>descendente</i>."
+
+#: dialogs/settings/rc.cpp:142
+msgid "Data entry"
+msgstr "Ingreso de datos"
+
+#: dialogs/settings/rc.cpp:146
+msgid "Use Enter to move between fields"
+msgstr "Utilizar Enter para moverse entre campos"
+
+#: dialogs/settings/rc.cpp:147
+msgid "Match names from start"
+msgstr "Los nombres deben coincidir desde el inicio"
+
+#: dialogs/settings/rc.cpp:148
+msgid ""
+"Mark this option, if you always want to match names e.g. for payees from the "
+"start. If unset, any substring is matched."
+msgstr ""
+"Marque esta opción si quiere que los nombres siempre coincidan desde el "
+"inicio. Si no está marcada, busca la coincidencia de cualquier subcadena de "
+"texto."
+
+#: dialogs/settings/rc.cpp:149
+msgid "Default reconciliation state"
+msgstr "Estado de reconciliación predeterminado"
+
+#: dialogs/rc.cpp:227 dialogs/settings/rc.cpp:150
+#: widgets/kmymoneycombo.cpp:348 widgets/registersearchline.cpp:84
+msgid "Not reconciled"
+msgstr "No reconciliados"
+
+#: dialogs/rc.cpp:228 dialogs/settings/rc.cpp:151
+#: widgets/kmymoneycombo.cpp:347 widgets/registersearchline.cpp:85
+msgid "Cleared"
+msgstr "Librado"
+
+#: dialogs/settings/rc.cpp:153
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation "
+"of an account"
+msgstr ""
+"Estado predeterminado de reconciliación para los asientos ingresados durante "
+"la reconciliación de una cuenta"
+
+#: dialogs/settings/rc.cpp:154
+msgid "Autofill"
+msgstr "Autocompletar"
+
+#: dialogs/settings/rc.cpp:155
+msgid "No Autofill"
+msgstr "No autocompletar"
+
+#: dialogs/settings/rc.cpp:156
+msgid "Don't do autofill of transaction data at all."
+msgstr "No autocompletar los datos de asientos"
+
+#: dialogs/settings/rc.cpp:157
+msgid "Same transaction if amount differs less than"
+msgstr "Mismo asiento si el monto difiere menos de"
+
+#: dialogs/settings/rc.cpp:158
+msgid ""
+"Collect all transactions for the given payee. Treat all transactions that "
+"refer to the same category and have an amount with +/- X % as identical. If "
+"more than one transaction is found, a list of them is presented to the "
+"user.\n"
+"\n"
+"Selecting 0% will list all transactions."
+msgstr ""
+"Coger todos los asientos del pagador. Tratar todos los asientos de la misma "
+"categoría con un monto +/- X % como idénticos. Si se encuentra más de un "
+"asiento, se presenta una lista de ellos al usuario.\n"
+"\n"
+"Seleccionando 0% se mostrarán todos los asientos."
+
+#: dialogs/settings/rc.cpp:159
+msgid ""
+"Two transactions are usually treated identical for autofill, if they refer "
+"the same accounts. They are treated as different transactions though, when "
+"their amount varies by more than the percentage given here."
+msgstr ""
+"Si hacen referencia a la misma cuenta, dos asientos se tratan como idénticos "
+"para autocompletar. Sin embargo, se tratan como asientos diferentes si el "
+"monto varía más del porcentaje especificado aquí."
+
+#: dialogs/settings/rc.cpp:160
+msgid ""
+"_: Same transaction if amount differs less than percent.\n"
+"percent."
+msgstr "porcentaje."
+
+#: dialogs/settings/rc.cpp:161
+msgid "with previously most often used transaction for the payee"
+msgstr "con el asiento previamente más utilizado para el beneficiario"
+
+#: dialogs/settings/rc.cpp:162
+msgid ""
+"The data of the last transaction assigned to the category used most often "
+"for this payee is autofilled into the transaction editor."
+msgstr ""
+"Los datos del último asiento asignado a la categoría más utilizada con este "
+"beneficiario se autocompletan en el editor de asientos."
+
+#: dialogs/settings/rc.cpp:164
+msgid "Match transactions within days"
+msgstr "Conciliar asientos dentro de días"
+
+#: dialogs/settings/rc.cpp:165
+msgid ""
+"Search for matching transactions within the range of the posting date of the "
+"imported transaction +/- the number of given days."
+msgstr ""
+"Buscar asientos coincidentes dentro del rango de la fecha de ingreso del "
+"asiento importado +/- el número de días dados."
+
+#: dialogs/settings/rc.cpp:166
+msgid "Ask for a new payee's default category"
+msgstr "Preguntar por la categoría predeterminada de un nuevo pagador"
+
+#: dialogs/settings/rc.cpp:167
+msgid ""
+"Whenever a new payee is detected during import of a statement, the user will "
+"be asked to assign a default category for this user when this option is "
+"selected."
+msgstr ""
+"Cuando se selecciona esta opción, si se detecta un nuevo pagador durante la "
+"importación de un resumen, se le preguntará al usuario la categoría "
+"predeterminada a asignar"
+
+#: dialogs/settings/rc.cpp:168
+msgid "Schedule Settings"
+msgstr "Configuración de las planificaciones"
+
+#: dialogs/settings/rc.cpp:169
+msgid "Startup options"
+msgstr "Opciones de inicio"
+
+#: dialogs/settings/rc.cpp:170
+msgid "Check schedules on startup"
+msgstr "Comprobar las planificaciones al arrancar"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:60
+#: widgets/kmymoneyonlinequoteconfig.cpp:60
+msgid "Delete the selected source entry"
+msgstr "Borrar el origen escogido"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:61
+#: widgets/kmymoneyonlinequoteconfig.cpp:61
+msgid "Use this to delete the selected online source entry"
+msgstr "Use esto para borrar el origen online escogido"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:66
+#: widgets/kmymoneyonlinequoteconfig.cpp:66
+msgid "Create a new source entry for online quotes"
+msgstr "Crear nuevo origen de cotizaciones online"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:67
+#: widgets/kmymoneyonlinequoteconfig.cpp:67
+msgid "Use this to create a new entry for online quotes"
+msgstr "Use esto para crear un nuevo origen de cotizaciones online"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:107
+#: dialogs/settings/ksettingsonlinequotes.cpp:190
+#: dialogs/settings/ksettingsonlinequotes.cpp:193
+#: dialogs/settings/ksettingsonlinequotes.cpp:216
+#: widgets/kmymoneyonlinequoteconfig.cpp:107
+#: widgets/kmymoneyonlinequoteconfig.cpp:185
+#: widgets/kmymoneyonlinequoteconfig.cpp:188
+#: widgets/kmymoneyonlinequoteconfig.cpp:211
+msgid "New Quote Source"
+msgstr "Nuevo Origen de Cotizaciones"
+
+#: dialogs/ksplittransactiondlg.cpp:77 dialogs/rc.cpp:788
+msgid "Clear &All"
+msgstr "Borrar &Todo"
+
+#: dialogs/ksplittransactiondlg.cpp:79
+msgid "Clear all splits"
+msgstr "Elimina todas las partidas"
+
+#: dialogs/ksplittransactiondlg.cpp:80
+msgid "Use this to clear all splits of this transaction"
+msgstr "Use esto para eliminar todas las partidas de este asiento"
+
+#: dialogs/ksplittransactiondlg.cpp:84
+msgid "&Merge"
+msgstr "Co&mbinar"
+
+#: dialogs/ksplittransactiondlg.cpp:183
+msgid ""
+"The total amount of this transaction is %1 while the sum of the splits is %"
+"2. The remaining %3 are unassigned."
+msgstr ""
+"El importe total de este asiento es %1 mientras que la suma de las partidas "
+"es %2. El importe restante, %3 está sin asignar."
+
+#: dialogs/ksplittransactiondlg.cpp:191
+#, c-format
+msgid "Change &total amount of transaction to %1."
+msgstr "Cambia el importe &total del asiento a %1."
+
+#: dialogs/ksplittransactiondlg.cpp:194
+msgid "&Distribute difference of %1 among all splits."
+msgstr "&Reparte la diferencia de %1 entre todas las partidas."
+
+#: dialogs/ksplittransactiondlg.cpp:203
+#, c-format
+msgid "&Leave total amount of transaction at %1."
+msgstr "Dejar e&l importe total del asiento a %1."
+
+#: dialogs/ksplittransactiondlg.cpp:205
+msgid "&Leave %1 unassigned."
+msgstr "&Deja %1 sin asignar"
+
+#: dialogs/ksplittransactiondlg.cpp:275
+msgid ""
+"You are about to delete all splits of this transaction. Do you really want "
+"to continue?"
+msgstr ""
+"Está a punto de borrar todas las partidas de este asiento. ¿Desea continuar?"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:97
+msgid "Use this to create a new QIF import/export profile"
+msgstr "Use esto para crear un nuevo perfil QIF de importación/exportación"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:148
+#: dialogs/mymoneyqifprofileeditor.cpp:403 dialogs/rc.cpp:797
+msgid "QIF Profile Editor"
+msgstr "Editor de perfil QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:150
+msgid "QIF Profile Selector"
+msgstr "Selector de Perfiles QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:236
+msgid "The default QIF profile"
+msgstr "Perfil QIF predefinido"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:404
+#: dialogs/mymoneyqifprofileeditor.cpp:417
+msgid "Enter new profile name"
+msgstr "Introduzca un nuevo nombre de perfil"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:436
+msgid "Do you really want to delete profile '%1'?"
+msgstr "¿Quiere realmente borrar el perfil '%1'?"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:38
+msgid "Select additional keys"
+msgstr "Escoger claves adicionales"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:48 widgets/rc.cpp:25
+msgid "User identification"
+msgstr "Identificación de usuário"
+
+#: dialogs/kendingbalancedlg.cpp:71
+msgid ""
+"Please enter the following fields with the information as you find them on "
+"your statement. Make sure to enter all values in <b>%1</b>."
+msgstr ""
+"Introduzca los siguientes campos con la información que viene en su extracto "
+"de cuenta. Asegurese de ingresar todos los valores en <b>%1</b>."
+
+#: dialogs/kendingbalancedlg.cpp:124
+#, c-format
+msgid "Last reconciled statement: %1"
+msgstr "Ultimo asiento reconciliado: %1"
+
+#: dialogs/kendingbalancedlg.cpp:437 dialogs/kendingbalancedlg.cpp:577
+#: dialogs/rc.cpp:137
+msgid "Adjustment transaction"
+msgstr "Asiento de ajuste"
+
+#: dialogs/kendingbalancedlg.cpp:510
+msgid ""
+"KMyMoney has calculated the following amounts for interest and amortization "
+"according to recorded payments between %1 and %2."
+msgstr ""
+"KMyMoney calculó las siguientes cantidades para interés y amortización de "
+"acuerdo con los pagos registrados entre %1 y %2."
+
+#: dialogs/kbalancechartdlg.cpp:59
+#, c-format
+msgid "Balance of %1"
+msgstr "Saldo de %1"
+
+#: dialogs/kbalancechartdlg.cpp:70
+msgid "%1 Balance History"
+msgstr "Historía de Saldo de %1"
+
+#: dialogs/kmymoneysplittable.cpp:98
+msgid "Split Options"
+msgstr "Opciones de las Partidas"
+
+#: dialogs/kmymoneysplittable.cpp:99 dialogs/rc.cpp:731
+#: widgets/kmymoneypriceview.cpp:149
+msgid "Edit..."
+msgstr "Editar..."
+
+#: dialogs/kmymoneysplittable.cpp:100
+msgid "Duplicate"
+msgstr "Duplicar"
+
+#: dialogs/kmymoneysplittable.cpp:102
+msgid "Delete ..."
+msgstr "Borrar ..."
+
+#: dialogs/kmymoneysplittable.cpp:275
+msgid ""
+"_: Duplicate split\n"
+"CTRL+c"
+msgstr "CTRL+c"
+
+#: dialogs/kmymoneysplittable.cpp:562
+msgid "will be calculated"
+msgstr "será calculado"
+
+#: dialogs/kmymoneysplittable.cpp:648
+msgid ""
+"You are about to delete the selected split. Do you really want to continue?"
+msgstr "Está a punto de borrar la partida escogida. ¿Desea continuar?"
+
+#: dialogs/rc.cpp:1
+msgid "Account selection"
+msgstr "Selección de cuenta"
+
+#: dialogs/rc.cpp:3
+msgid "Account to import to"
+msgstr "Cuenta a la que importar"
+
+#: dialogs/rc.cpp:6 dialogs/rc.cpp:170 widgets/rc.cpp:169
+msgid "Skip"
+msgstr "Saltear"
+
+#: dialogs/rc.cpp:8
+msgid ""
+"Use this dialog to backup your data. \n"
+"\n"
+"Please make sure you have a disk inserted and that the drive is ready. Then "
+"choose the mount point from either the Choose button or by entering the path "
+"in the available box.\n"
+"\n"
+"Click OK to perform the backup. If your system does not use an automounter, "
+"make sure you mark the checkbox below to \"mount this directory before "
+"backing up.\""
+msgstr ""
+"Use este diálogo para hacer una copia de seguridad de sus datos.\n"
+"\n"
+"Inserte un disco y asegúrese de que el dispositivo está listo. Entonces "
+"escoja el punto de montaje mediante el botón Elegir o introduciendo la ruta "
+"en la caja disponible a tal efecto.\n"
+"\n"
+"Pulse Aceptar para realizar la cópia. Si su sistema no usa un automontador, "
+"asegúrese de marcar la casilla \"montar este directorio antes de copiar.\" "
+
+#: dialogs/rc.cpp:9
+msgid "Device options"
+msgstr "Opciones del dispositivo"
+
+#: dialogs/rc.cpp:10
+msgid ""
+"_: This is the mount point\n"
+"Mount Point:"
+msgstr "Punto de Montaje:"
+
+#: dialogs/rc.cpp:11
+msgid "Choose..."
+msgstr "Escoger..."
+
+#: dialogs/rc.cpp:12
+msgid "Mount this directory before backing up."
+msgstr "Montar este directorio antes de realizar la copia."
+
+#: dialogs/rc.cpp:15
+msgid "Reassign categories"
+msgstr "Reasignar categorías"
+
+#: dialogs/rc.cpp:16
+msgid ""
+"The transactions, schedules and budgets associated with the selected "
+"category need to be re-assigned to a different category before the selected "
+"category can be deleted. Please select a category from the list below."
+msgstr ""
+"Los asientos, planificaciones y presupuestos asociados con la categoría "
+"seleccionada necesitan ser reasignados a una categoría diferente antes que "
+"la categoría seleccionada pueda borrarse. Por favor, seleccione una "
+"categoría de la lista debajo."
+
+#: dialogs/rc.cpp:17
+msgid "Available categories:"
+msgstr "Categorías disponibles:"
+
+#: dialogs/rc.cpp:21
+msgid ""
+"Please choose the type of import you wish to perform. A simple "
+"explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Por favor escoja el tipo de importación que desea realizar. Dispone de una "
+"breve\n"
+"explicación de cada tipo en el fondo de la pantalla, que se actualiza "
+"cuando\n"
+"escoge una opción.\n"
+"\n"
+"Cuando escoja el tipo adecuado por favor pulse el botón Aceptar."
+
+#: dialogs/rc.cpp:23
+msgid "QIF"
+msgstr "QIF"
+
+#: dialogs/rc.cpp:24
+msgid "CSV"
+msgstr "CSV"
+
+#: dialogs/rc.cpp:25
+msgid "Some descripton"
+msgstr "Alguna descripción"
+
+#: dialogs/rc.cpp:28
+msgid "Confirm Manual Enter"
+msgstr "Confirmar Entrada Manual"
+
+#: dialogs/rc.cpp:29
+msgid "The following changes have been made to the transaction data:"
+msgstr "Se realizaron los siguientes cambios a los datos del asiento:"
+
+#: dialogs/rc.cpp:30
+msgid "Please choose what you wish to do with the above changes"
+msgstr "Por favor, escoja qué desea hacer con los cambios"
+
+#: dialogs/rc.cpp:31
+msgid ""
+"Discard the changes and enter the original transaction into the register."
+msgstr "Rechazar los cambios e introducir el asiento original en el registro."
+
+#: dialogs/rc.cpp:32
+msgid "Enter these new values this one time, for this occurence only."
+msgstr "Introducir estos nuevos valores esta vez, solo en esta ocasión."
+
+#: dialogs/rc.cpp:33
+msgid "Set all further occurences in this schedule to be these values."
+msgstr ""
+"Hacer que todas las próximas apariciones de este asiento programado tengan "
+"estos valores."
+
+#: dialogs/rc.cpp:36
+msgid "CSV Dialog"
+msgstr "Diálogo de CSV"
+
+#: dialogs/rc.cpp:37
+msgid ""
+"CSV Dialog. Choose a file and then click on Run. You can view your "
+"progress at\n"
+"the bottom of the screen.\n"
+"\n"
+"You can cancel the process at any time by clicking on the Cancel button."
+msgstr ""
+"Diálogo de CSV. Escoja un archivo y pulse en Ejecutar. Puede ver el "
+"progreso\n"
+"en el fondo de la pantalla.\n"
+"\n"
+"Puede cancelar el proceso en cualquier instante pulsando en el botón "
+"Cancelar."
+
+#: dialogs/rc.cpp:38
+msgid "Choose the csv file:"
+msgstr "Escoja el archivo CSV:"
+
+#: dialogs/rc.cpp:39
+msgid "Browse"
+msgstr "Recorrer"
+
+#: dialogs/rc.cpp:40
+msgid "Between These Dates"
+msgstr "Entre estas fechas"
+
+#: dialogs/rc.cpp:41 dialogs/rc.cpp:196
+msgid "Start on:"
+msgstr "Empieza el:"
+
+#: dialogs/rc.cpp:42 dialogs/rc.cpp:195
+msgid "End on:"
+msgstr "Acaba el:"
+
+#: dialogs/rc.cpp:43
+msgid "Run"
+msgstr "Ejecutar"
+
+#: dialogs/rc.cpp:44
+msgid "Progress Info"
+msgstr "Información del progreso"
+
+#: dialogs/rc.cpp:45
+msgid "Processing Account:"
+msgstr "Procesando Cuenta:"
+
+#: dialogs/rc.cpp:47
+msgid "Processing Transaction:"
+msgstr "Procesando Asiento:"
+
+#: dialogs/rc.cpp:48
+msgid "0 of 0"
+msgstr "0 de 0"
+
+#: dialogs/rc.cpp:50
+msgid "Exchange Rate/Price Editor"
+msgstr "Editor de Tasa de Cambio/Precio"
+
+#: dialogs/rc.cpp:55
+msgid "Convert from"
+msgstr "Convertir de"
+
+#: dialogs/rc.cpp:58
+msgid "Convert to"
+msgstr "Convertir para"
+
+#: dialogs/rc.cpp:61
+msgid "To amount"
+msgstr "Importe convertido"
+
+#: dialogs/rc.cpp:62
+msgid "Exchange rate / Price"
+msgstr "Tasa de cambio/ Precio"
+
+#: dialogs/rc.cpp:64
+msgid ""
+"xx\n"
+"xx"
+msgstr ""
+"xx\n"
+"xx"
+
+#: dialogs/rc.cpp:68
+msgid "Currencies"
+msgstr "Divisas"
+
+#: dialogs/rc.cpp:72
+msgid "real ID"
+msgstr "ID real"
+
+#: dialogs/rc.cpp:73 dialogs/rc.cpp:722
+msgid "ID"
+msgstr "ID"
+
+#: dialogs/rc.cpp:74
+msgid "X"
+msgstr "X"
+
+#: dialogs/rc.cpp:76 dialogs/rc.cpp:459
+msgid "Online Source"
+msgstr "Fuente de cotizaciones online"
+
+#: dialogs/rc.cpp:78 dialogs/rc.cpp:278 dialogs/rc.cpp:312 dialogs/rc.cpp:684
+msgid "F1"
+msgstr "F1"
+
+#: dialogs/rc.cpp:80
+msgid "If this button is not activated, select the base currency first."
+msgstr "Si no está activado este botón, escoja antes la divisa de base."
+
+#: dialogs/rc.cpp:81
+msgid ""
+"Press this button to close the dialog. If the button is not activated, "
+"select your base currency."
+msgstr ""
+"Pulse este botón para cerrar el diálogo. Si el botón no está activado, "
+"escoja su divisa base."
+
+#: dialogs/rc.cpp:82
+msgid "Edit Equity"
+msgstr "Editar Patrimonio"
+
+#: dialogs/rc.cpp:86 dialogs/rc.cpp:410
+msgid "Smallest fraction:"
+msgstr "Fracción más pequeña:"
+
+#: dialogs/rc.cpp:87 dialogs/rc.cpp:408 dialogs/rc.cpp:440
+msgid "1 /"
+msgstr "1 /"
+
+#: dialogs/rc.cpp:88 dialogs/rc.cpp:405
+msgid "Investment Type:"
+msgstr "Tipo de inversión"
+
+#: dialogs/rc.cpp:89 dialogs/rc.cpp:404
+msgid "Equity Name:"
+msgstr "Nombre del Patrimonio"
+
+#: dialogs/rc.cpp:90 dialogs/rc.cpp:409
+msgid "Market Symbol:"
+msgstr "Símbolo del Mercado"
+
+#: dialogs/rc.cpp:91
+msgid "Price History"
+msgstr "Historial de Precio"
+
+#: dialogs/rc.cpp:97
+msgid "Edit Scheduled transaction"
+msgstr "Editar asiento planificación"
+
+#: dialogs/rc.cpp:98
+msgid "Schedule name:"
+msgstr "Nombre del plan:"
+
+#: dialogs/rc.cpp:99
+msgid "Frequency:"
+msgstr "Frecuencia:"
+
+#: dialogs/rc.cpp:100
+msgid "Number of selected periods between entries"
+msgstr "Número de periodos seleccionados entre entradas"
+
+#: dialogs/rc.cpp:101
+msgid "Payment information"
+msgstr "Información del pago"
+
+#: dialogs/rc.cpp:105 dialogs/rc.cpp:160 dialogs/rc.cpp:247 dialogs/rc.cpp:752
+#: widgets/register.cpp:569
+msgid "C"
+msgstr "C"
+
+#: dialogs/rc.cpp:113
+msgid "Do nothing"
+msgstr "No hacer nada"
+
+#: dialogs/rc.cpp:116
+msgid "If this schedule occurs on the weekend:"
+msgstr "Si este asiento programado tiene lugar durante el fin de semana:"
+
+#: dialogs/rc.cpp:117
+msgid "The amount is an estimate because it varies for each payment"
+msgstr "Esta es una estimación porque los importes varían para cada pago"
+
+#: dialogs/rc.cpp:118
+msgid "Enter this schedule into the register automatically when it is due"
+msgstr "Asentar automáticamente cuando llegue el vencimiento"
+
+#: dialogs/rc.cpp:119
+msgid "This schedule will end at some time"
+msgstr "Este plan acabará en algún momento"
+
+#: dialogs/rc.cpp:120
+msgid "Number of transactions remaining:"
+msgstr "Número de transacciones restantes:"
+
+#: dialogs/rc.cpp:121
+msgid "Date of final transaction:"
+msgstr "Fecha del último asiento:"
+
+#: dialogs/rc.cpp:125
+msgid "Reconciliation Wizard"
+msgstr "Asistente de reconciliación"
+
+#: dialogs/rc.cpp:127
+msgid ""
+"Reconciling your account assures, that your recordings match those of your "
+"institution and that there are no mistakes on either side. You should "
+"reconcile your account whenever you receive a statement from your "
+"institution.\n"
+"\n"
+"All relevant information necessary for this process is usually printed on "
+"your statement.\n"
+"\n"
+"On the next page you will verify, that the starting and ending balance are "
+"matching those on your statement. If not, please modify the figures."
+msgstr ""
+"Reconciliar sus cuentas asegura que sus asientos concuerdan con los datos "
+"disponibles en su entidad bancaria y que no hay error en ninguna de las "
+"partes. Debería reconciliar sus cuentas siempre que reciba un extracto de "
+"cuenta de su entidad bancaria.\n"
+"\n"
+"Toda la información importante necesaria para este proceso suele venir "
+"impresa en su extracto.\n"
+"\n"
+"En la siguiente página verificará que los saldos inicial y final coinciden "
+"con los comunicados por su entidad bancaria. Si no es el caso, por favor, "
+"modifique las cantidades."
+
+#: dialogs/rc.cpp:129
+msgid ""
+"KMyMoney calculates your loan payments automatically. The amounts can "
+"deviate from those calculated by the creditor. Therefore, you possibly have "
+"to adjust amortization, interest and other costs according to your "
+"statement.\n"
+"\n"
+"Please enter the following information found on your statement:"
+msgstr ""
+"KMyMoney calcula los pagos de su préstamo automáticamente. Las cantidades "
+"pueden desviarse de las calculadas por el acreedor. De darse este caso, "
+"posiblemente tendrá que ajustar la amortización, intereses y otros costos de "
+"acuerdo con su resumen de cuenta.\n"
+"\n"
+"Introduzca la siguiente información, según su extracto de cuenta"
+
+#: dialogs/rc.cpp:130
+msgid "Ending date of statement"
+msgstr "Fecha final del extracto de cuenta"
+
+#: dialogs/rc.cpp:131
+msgid "Starting date of statement"
+msgstr "Fecha inicial del extracto de cuenta"
+
+#: dialogs/rc.cpp:132
+msgid "Verify payments"
+msgstr "Verifique los pagos"
+
+#: dialogs/rc.cpp:133 dialogs/rc.cpp:148 dialogs/rc.cpp:476 dialogs/rc.cpp:477
+#: dialogs/rc.cpp:508 dialogs/rc.cpp:513 dialogs/rc.cpp:518 dialogs/rc.cpp:532
+#: dialogs/rc.cpp:539 dialogs/rc.cpp:540 dialogs/rc.cpp:541 dialogs/rc.cpp:542
+#: dialogs/rc.cpp:543 dialogs/rc.cpp:552 dialogs/rc.cpp:553 dialogs/rc.cpp:554
+#: dialogs/rc.cpp:555 dialogs/rc.cpp:556 dialogs/rc.cpp:565 dialogs/rc.cpp:566
+#: dialogs/rc.cpp:567 dialogs/rc.cpp:568 dialogs/rc.cpp:569 dialogs/rc.cpp:578
+#: dialogs/rc.cpp:579 dialogs/rc.cpp:580 dialogs/rc.cpp:581 dialogs/rc.cpp:582
+#: dialogs/rc.cpp:591 dialogs/rc.cpp:592 dialogs/rc.cpp:593 dialogs/rc.cpp:594
+#: dialogs/rc.cpp:595 dialogs/rc.cpp:603 dialogs/rc.cpp:604 dialogs/rc.cpp:605
+#: dialogs/rc.cpp:606 dialogs/rc.cpp:607 dialogs/rc.cpp:618 dialogs/rc.cpp:619
+#: dialogs/rc.cpp:621 dialogs/rc.cpp:636 dialogs/rc.cpp:637 dialogs/rc.cpp:638
+#: dialogs/rc.cpp:639 dialogs/rc.cpp:640 dialogs/rc.cpp:641 dialogs/rc.cpp:651
+#: dialogs/rc.cpp:652 dialogs/rc.cpp:654 dialogs/rc.cpp:657 dialogs/rc.cpp:658
+#: dialogs/rc.cpp:659 dialogs/rc.cpp:664 dialogs/rc.cpp:665 dialogs/rc.cpp:668
+#: dialogs/rc.cpp:670 dialogs/rc.cpp:672 dialogs/rc.cpp:674 dialogs/rc.cpp:676
+#: dialogs/rc.cpp:678 dialogs/rc.cpp:681 dialogs/rc.cpp:823 widgets/rc.cpp:167
+msgid "1"
+msgstr "1"
+
+#: dialogs/rc.cpp:136
+msgid ""
+"If your statement shows different amounts, please cancel this dialog and "
+"correct the false transactions or correct the values in this dialog. In the "
+"later case, KMyMoney will create an adjustment transaction and add it to the "
+"ledger."
+msgstr ""
+"Si su extracto de cuenta muestra diferentes cantidades, por favor cancele "
+"este diálogo y corrija los asientos falsos o arregle los valores en este "
+"diálogo. En este caso, KMyMoney creará un asiento de ajuste y lo añadirá al "
+"libro mayor."
+
+#: dialogs/rc.cpp:138
+msgid ""
+"In order to create the adjustment transaction, KMyMoney requires an account "
+"and possibly an interest category to assign the differences to. Please "
+"select an account and - if necessary - a category."
+msgstr ""
+"Con el fin de crear el asiento de ajuste, KMyMoney requiere una cuenta y "
+"posiblemente una categoría a la que asignar las diferencias. Escoja una "
+"cuenta y -si lo necesita- una categoría"
+
+#: dialogs/rc.cpp:140
+msgid "Interest-Category"
+msgstr "Categoría-Interés"
+
+#: dialogs/rc.cpp:141
+msgid "Restarting postponed reconciliation"
+msgstr "Reiniciando reconciliación aplazada"
+
+#: dialogs/rc.cpp:142
+msgid ""
+"You have previously postponed the reconciliation of this account. If you "
+"have entered charges or interests the last time you started reconciling this "
+"account you can modify these in the ledger later on.\n"
+"\n"
+"It is important, that you continue with the same statement you used when you "
+"postponed the reconciliation.\n"
+"\n"
+"All information you have entered into this wizard will be shown and all "
+"transactions that you already cleared are marked with a 'C'."
+msgstr ""
+"Anteriormente pospuso la reconciliación de esta cuenta. Si introdujo cargos "
+"o intereses la última vez que comenzó a reconciliar esta cuenta podrá "
+"modificarlos en el libro mayor más tarde.\n"
+"\n"
+"Es importante que continúe con el mismo extracto de cuenta que usó cuando "
+"pospuso la reconciliación.\n"
+"\n"
+"Toda la información que ha introducido en este asistente será mostrada y los "
+"asientos ya reconciliados marcados con una 'C'."
+
+#: dialogs/rc.cpp:143
+msgid "Statement Information"
+msgstr "Información del extracto:"
+
+#: dialogs/rc.cpp:144 dialogs/rc.cpp:315 dialogs/rc.cpp:317 dialogs/rc.cpp:320
+#: dialogs/rc.cpp:321 dialogs/rc.cpp:329 dialogs/rc.cpp:330 dialogs/rc.cpp:333
+#: dialogs/rc.cpp:334 dialogs/rc.cpp:335 dialogs/rc.cpp:336 dialogs/rc.cpp:366
+msgid "x"
+msgstr "x"
+
+#: dialogs/rc.cpp:145
+msgid "Statement date:"
+msgstr "Fecha del extracto:"
+
+#: dialogs/rc.cpp:146
+msgid "Starting balance of this statement:"
+msgstr "Saldo previo a este extracto:"
+
+#: dialogs/rc.cpp:147
+msgid "Ending balance of this statement:"
+msgstr "Saldo a la fecha del extracto:"
+
+#: dialogs/rc.cpp:149
+msgid "Interest / Charges"
+msgstr "Intereses / Cargos"
+
+#: dialogs/rc.cpp:150
+msgid ""
+"If necessary, enter information about interest or charges here. KMyMoney "
+"will create transactions and clear them directly for you."
+msgstr ""
+"Si es necesario, introduzca información acerca de intereses o cargos aquí. "
+"KMyMoney creará asientos y los librará directamente para usted"
+
+#: dialogs/rc.cpp:153
+msgid "Charges"
+msgstr "Cargos"
+
+#: dialogs/rc.cpp:154
+msgid "Enter Schedule"
+msgstr "Ingresar planificación"
+
+#: dialogs/rc.cpp:155
+msgid "Schedule Details"
+msgstr "Detalles del asiento planificado"
+
+#: dialogs/rc.cpp:156 dialogs/rc.cpp:348 dialogs/rc.cpp:389 widgets/rc.cpp:164
+msgid "Name:"
+msgstr "Nombre:"
+
+#: dialogs/rc.cpp:157 dialogs/rc.cpp:351 widgets/rc.cpp:165
+msgid "Type:"
+msgstr "Tipo:"
+
+#: dialogs/rc.cpp:168
+msgid "Enter"
+msgstr "Introducir"
+
+#: dialogs/rc.cpp:169
+msgid ""
+"Enter the transaction and advance the next due date of this schedule to the "
+"next payment date."
+msgstr ""
+"Ingresar el asiento y avanzar la próxima fecha de vencimiento de esta "
+"planificación a la siguiente fecha de pago."
+
+#: dialogs/rc.cpp:171
+msgid ""
+"Do not enter the transaction but advance the next due date of this schedule "
+"to the next payment date."
+msgstr ""
+"No ingresar el asiento pero avanzar la fecha de vencimiento de la "
+"planificación a la siguiente fecha de pago."
+
+#: dialogs/rc.cpp:172
+msgid "Ignore"
+msgstr "Ignorar"
+
+#: dialogs/rc.cpp:173
+msgid ""
+"Do not enter or skip payments for this schedule but continue with the next "
+"schedule."
+msgstr ""
+"No ingresar ni saltar pagos pero continuar con la próxima planificación."
+
+#: dialogs/rc.cpp:175
+msgid "Cancel processing of schedule entry."
+msgstr "Cancelar el procesamiento de esta planificación."
+
+#: dialogs/rc.cpp:176
+msgid "Update Stock and Currency Prices"
+msgstr "Actualizar precios de Acciones y Divisas"
+
+#: dialogs/rc.cpp:177
+msgid "List of known Equities, and the date they were last updated on."
+msgstr ""
+"Listado de Patrimonios conocidos, y fecha en que fueron actualizados por "
+"última vez."
+
+#: dialogs/rc.cpp:179
+msgid "Update All"
+msgstr "Actualizar Todo"
+
+#: dialogs/rc.cpp:180
+msgid "Update Selected"
+msgstr "Actualizar los Escogidos"
+
+#: dialogs/rc.cpp:181
+msgid "Status:"
+msgstr "Estatus:"
+
+#: dialogs/rc.cpp:184
+msgid "QIF Export"
+msgstr "Exportar a QIF"
+
+#: dialogs/rc.cpp:185
+msgid ""
+"From this dialog you are able to export transactions to a quicken compatible "
+"file, (known as a QIF file, because of the extension). Please enter the "
+"path to the QIF file or select it by clicking on the Browse button.\n"
+"\n"
+"You can choose the file's path, the account and the format of the QIF file "
+"(profile). Choose Account to export all the transactions between the "
+"specified dates or just categories. You can also limit the transactions "
+"that are exported by start and ending date. Once you have pressed the "
+"Export button a message box will appear when the export has completed "
+"detailing how many transactions, categories and payees were exported."
+msgstr ""
+"Mediante este diálogo es posible exportar asientos a un archivo compatible "
+"con quicken, (conocidos como archivos QIF, debido a la extensión). Por "
+"favor, introduzca la ruta al archivo QIF o escójalo pulsando en el botón "
+"Escoger.\n"
+"\n"
+"Puede escoger la ruta al archivo, la cuenta y el formato del archivo QIF "
+"(perfil). Escoja Cuenta para exportar todos los asientos entre las fechas "
+"especificadas o simplemente categorías. También puede limitar los asientos "
+"que son exportados mediante las fechas inicial y final. Despues de pulsar el "
+"botón Exportar, aparecerá un mensaje al finalizar el proceso de exportación, "
+"detallando cuantos asientos, categorías y beneficiarios fueron exportados."
+
+#: dialogs/rc.cpp:186
+msgid "File to export to:"
+msgstr "Archivo al que exportar:"
+
+#: dialogs/rc.cpp:188
+msgid "Account to export"
+msgstr "Cuenta a exportar"
+
+#: dialogs/rc.cpp:189 dialogs/rc.cpp:297
+msgid "QIF Profile"
+msgstr "Perfil QIF"
+
+#: dialogs/rc.cpp:190 dialogs/rc.cpp:298 dialogs/rc.cpp:362
+#: widgets/kmymoneypriceview.cpp:145
+msgid "New..."
+msgstr "Nuevo..."
+
+#: dialogs/rc.cpp:191
+msgid "Contents to Export"
+msgstr "Contenidos a Exportar"
+
+#: dialogs/rc.cpp:194
+msgid "Date Range"
+msgstr "Rango de Fechas"
+
+#: dialogs/rc.cpp:199
+msgid "Search transactions"
+msgstr "Buscar Asientos"
+
+#: dialogs/rc.cpp:200
+msgid "Criteria"
+msgstr "Criterios"
+
+#: dialogs/rc.cpp:201
+msgid "Define your search criteria"
+msgstr "Defina su criterio de búsqueda"
+
+#: dialogs/kfindtransactiondlg.cpp:169 dialogs/rc.cpp:202
+msgid "Text"
+msgstr "Texto"
+
+#: dialogs/rc.cpp:203
+msgid "Contains"
+msgstr "Contiene"
+
+#: dialogs/rc.cpp:204
+msgid "Does not contain"
+msgstr "No contiene"
+
+#: dialogs/rc.cpp:205
+msgid "Treat text as regular expression"
+msgstr "Tratar texto como si fuese una expresión regular"
+
+#: dialogs/rc.cpp:206
+msgid "Case sensitive"
+msgstr "Distinguir mayúsculas/minúsculas"
+
+#: dialogs/rc.cpp:209
+msgid "Range"
+msgstr "Rango"
+
+#: dialogs/rc.cpp:210
+msgid ""
+"_: To (Date)\n"
+"To"
+msgstr "Hasta"
+
+#: dialogs/rc.cpp:211
+msgid ""
+"_: From (Date)\n"
+"From"
+msgstr "Desde"
+
+#: dialogs/rc.cpp:213
+msgid "Search this amount"
+msgstr "Buscar este importe"
+
+#: dialogs/rc.cpp:214
+msgid "Search amount in the range"
+msgstr "Buscar cantidad en el rango"
+
+#: dialogs/rc.cpp:215
+msgid ""
+"_: to (amount)\n"
+"to"
+msgstr "Importe convertido"
+
+#: dialogs/rc.cpp:216
+msgid ""
+"_: from (amount)\n"
+"from"
+msgstr "Importe inicial"
+
+#: dialogs/rc.cpp:220
+msgid "Select transactions without payees"
+msgstr "Escoger asientos sin beneficiario"
+
+#: dialogs/rc.cpp:221
+msgid "Select all"
+msgstr "Escoger todo"
+
+#: dialogs/rc.cpp:222
+msgid "Select none"
+msgstr "No escoger nada"
+
+#: dialogs/rc.cpp:224
+msgid "Validity"
+msgstr "Validez"
+
+#: dialogs/rc.cpp:226
+msgid "All states"
+msgstr "Todos los estados"
+
+#: dialogs/rc.cpp:230
+msgid "All types"
+msgstr "Todos los tipos"
+
+#: dialogs/rc.cpp:234
+msgid "Any transaction"
+msgstr "Cualquer asiento"
+
+#: dialogs/rc.cpp:235
+msgid "Valid transaction"
+msgstr "Asientos válidos"
+
+#: dialogs/rc.cpp:236
+msgid "Invalid transaction"
+msgstr "Asientos no válidos"
+
+#: dialogs/rc.cpp:237
+msgid "State"
+msgstr "Estado"
+
+#: dialogs/rc.cpp:238
+msgid "Search this number"
+msgstr "Buscar este número"
+
+#: dialogs/rc.cpp:239
+msgid "Search number in range"
+msgstr "Buscar número en el rango"
+
+#: dialogs/rc.cpp:240
+msgid ""
+"_: to (number)\n"
+"to"
+msgstr "a"
+
+#: dialogs/rc.cpp:241
+msgid ""
+"_: from (number)\n"
+"from"
+msgstr "de"
+
+#: dialogs/rc.cpp:242
+msgid "text"
+msgstr "texto"
+
+#: dialogs/rc.cpp:243
+msgid "warning"
+msgstr "advertencia"
+
+#: dialogs/rc.cpp:244
+msgid "Result"
+msgstr "Resultado"
+
+#: dialogs/rc.cpp:254
+msgid "F"
+msgstr "F"
+
+#: dialogs/rc.cpp:257 dialogs/rc.cpp:844
+msgid "&Reset"
+msgstr "&Reiniciar"
+
+#: dialogs/rc.cpp:258
+msgid "&Find"
+msgstr "&Buscar"
+
+#: dialogs/rc.cpp:259
+msgid "GnuCash Import Options"
+msgstr "Opciones de la Importación de GnuCash"
+
+#: dialogs/rc.cpp:260
+msgid "Use 'Help' for more information on these options"
+msgstr "Use 'Ayuda' para más información acerca de estas opciones"
+
+#: dialogs/rc.cpp:261
+msgid "Investment Handling"
+msgstr "Gestión de Inversiones"
+
+#: dialogs/rc.cpp:262
+msgid "One investment account for each stock"
+msgstr "Una cuenta de inversión para cada acción"
+
+#: dialogs/rc.cpp:263
+msgid "One investment account for all stocks"
+msgstr "Una cuenta de inversión para todas las acciones"
+
+#: dialogs/rc.cpp:264
+msgid "Prompt for an investment account for each stock"
+msgstr "Preguntar la cuenta de inversión para cada acción"
+
+#: dialogs/rc.cpp:265
+msgid "Online price quotes"
+msgstr "Cotizaciones online"
+
+#: dialogs/rc.cpp:266
+msgid "Use Finance::Quote for share price quotes"
+msgstr "Utilizar Finance::Quota para la cotización de acciones"
+
+#: dialogs/rc.cpp:267
+msgid "Scheduled Transactions"
+msgstr "Asientos Planificados"
+
+#: dialogs/rc.cpp:268
+msgid "Drop suspect scheduled transactions"
+msgstr "Anular los asientos planificados sospechosos"
+
+#: dialogs/rc.cpp:269
+msgid "Decoding option"
+msgstr "Opción de descodificación"
+
+#: dialogs/rc.cpp:270
+msgid "Decode using"
+msgstr "Descodificar usando"
+
+#: dialogs/rc.cpp:271
+msgid "Transaction Notes option"
+msgstr "Opciones de las notas de asientos"
+
+#: dialogs/rc.cpp:272
+msgid "Use transaction notes on non-split transactions"
+msgstr "Usar notas de asiento en asientos de partida simple"
+
+#: dialogs/rc.cpp:273
+msgid "Debug Options"
+msgstr "Opciones de Depuración"
+
+#: dialogs/rc.cpp:274
+msgid "General debug data"
+msgstr "Datos generales de depuración"
+
+#: dialogs/rc.cpp:275
+msgid "Display XML data"
+msgstr "Mostrar datos XML"
+
+#: dialogs/rc.cpp:276
+msgid "Anonymize data"
+msgstr "Anonimizar datos"
+
+#: dialogs/rc.cpp:281
+msgid "Online Quotes - Select price source"
+msgstr "Cotizaciones Online - Escoja fuente de los precios"
+
+#: dialogs/rc.cpp:284
+msgid ""
+"This price source is not known to KMyMoney. Please select an option below."
+msgstr ""
+"La fuente de los precios no es conocida por KMyMoney. Escoja una de las "
+"opciones de abajo."
+
+#: dialogs/rc.cpp:285
+msgid "Do not perform online quotes for this investment"
+msgstr "No obtener cotizaciones online para esta inversión"
+
+#: dialogs/rc.cpp:286
+msgid "Select a known KMyMoney source from the list below"
+msgstr "Escoger un origen conocido por KMyMoney de la lista de debajo"
+
+#: dialogs/rc.cpp:287
+msgid ""
+"Use the following name for the price source.\n"
+"(Click Help for further information.)"
+msgstr ""
+"Usar este nombre para el origen del precio.\n"
+"(Pulse en Ayuda para más información.)"
+
+#: dialogs/rc.cpp:288
+msgid "Always use this selection for this price source."
+msgstr "Usar siempre esta elección como fuente de los precios."
+
+#: dialogs/rc.cpp:289
+msgid "QIF Import"
+msgstr "Importar QIF"
+
+#: dialogs/rc.cpp:290
+msgid ""
+"From this dialog you are able to import transactions from a Quicken<b>&trade;"
+"</b> compatible file, (known as a QIF file, because of the extension).<p>\n"
+"\n"
+"Please enter the path to the QIF file or select it by clicking on the Browse "
+"button. Once you have the file's path press the Import button and KMyMoney "
+"will import all the transactions, categories and payees it finds."
+msgstr ""
+"Desde este diálogo puede importar asientos desde un archivo compatible con "
+"Quicken<b>&trade;</b> (conocido como archivo QIF, por la extensión "
+"utilizada).<p>\n"
+"\n"
+"Por favor introduzca la ruta al archivo QIF o escójalo pulsando en el botón "
+"Escoger. Cuando tenga la ruta al archivo, pulse el botón Importar y KMyMoney "
+"importará todos los asientos, categorias y beneficiarios que encuentre."
+
+#: dialogs/rc.cpp:291
+msgid "QIF File to Import:"
+msgstr "Archivo QIF a importar:"
+
+#: dialogs/rc.cpp:292
+msgid "Import options"
+msgstr "Opciones de Importación"
+
+#: dialogs/rc.cpp:293
+msgid "Bank statement"
+msgstr "Extracto de banco"
+
+#: dialogs/rc.cpp:294
+msgid "Other application"
+msgstr "Otra aplicación"
+
+#: dialogs/rc.cpp:295
+msgid ""
+"Select <b>Bank statement</b> turns on automatic category matching which is "
+"turned off in case of <b>Historic data</b>. Use the latter if you import "
+"files from other Personal Finance Management software."
+msgstr ""
+"Seleccionar <b>Resumen bancario</b> activa la conciliación automática de "
+"categoría, que se desactiva en caso de <b>Datos históricos</b>. Utilice el "
+"último si importa archivos de otras aplicaciones de gestión de finanzas "
+"personales."
+
+#: dialogs/rc.cpp:296
+msgid "Source of QIF"
+msgstr "Origen de QIF"
+
+#: dialogs/rc.cpp:302
+msgid "Verify Import"
+msgstr "Verificar Importe"
+
+#: dialogs/rc.cpp:304
+msgid "Ok"
+msgstr "Aceptar"
+
+#: dialogs/rc.cpp:306
+msgid "MyDialog"
+msgstr "MyDialog"
+
+#: dialogs/rc.cpp:310
+msgid "File Information"
+msgstr "Información del Archivo"
+
+#: dialogs/rc.cpp:316
+msgid "Last modified on"
+msgstr "Modificado el"
+
+#: dialogs/rc.cpp:319
+msgid "Base currency"
+msgstr "Divisa base"
+
+#: dialogs/rc.cpp:322
+msgid "Created on"
+msgstr "Creado el"
+
+#: dialogs/rc.cpp:325
+msgid "Accounts/Categories"
+msgstr "Cuentas/Categorías"
+
+#: dialogs/rc.cpp:328
+msgid "Closed"
+msgstr "Cerrada"
+
+#: dialogs/rc.cpp:331
+msgid "Prices"
+msgstr "Precios"
+
+#: dialogs/rc.cpp:337
+msgid "Splits"
+msgstr "Partidas"
+
+#: dialogs/rc.cpp:338
+msgid "Price Editor"
+msgstr "Editor de Precios"
+
+#: dialogs/rc.cpp:339
+msgid "Show all stored prices"
+msgstr "Muestra todos los precios guardados"
+
+#: dialogs/rc.cpp:343
+msgid "Delete Range..."
+msgstr "Borrar Rango..."
+
+#: dialogs/rc.cpp:346
+msgid "New Account Dialog"
+msgstr "Diálogo para Cuentas Nuevas"
+
+#: dialogs/rc.cpp:349
+msgid "Opening information"
+msgstr "Información de apertura"
+
+#: dialogs/rc.cpp:350
+msgid "Currency:"
+msgstr "Divisa:"
+
+#: dialogs/rc.cpp:352 dialogs/rc.cpp:793
+msgid "Date:"
+msgstr "Fecha:"
+
+#: dialogs/rc.cpp:353
+msgid "Balance:"
+msgstr "Saldo:"
+
+#: dialogs/rc.cpp:355
+msgid "Last check number:"
+msgstr "Último número de cheque:"
+
+#: dialogs/rc.cpp:356
+msgid "Notes:"
+msgstr "Notas:"
+
+#: dialogs/rc.cpp:357
+msgid "No auto-VAT-assignment"
+msgstr "No autoasignar IVA"
+
+#: dialogs/rc.cpp:358 dialogs/rc.cpp:441
+msgid "Price entry"
+msgstr "Entrada de precio"
+
+#: dialogs/rc.cpp:359
+msgid "Preferred Account"
+msgstr "Cuenta Preferida"
+
+#: dialogs/rc.cpp:363
+msgid "Number:"
+msgstr "Número:"
+
+#: dialogs/rc.cpp:364 dialogs/rc.cpp:395
+msgid "BIC"
+msgstr "BIC"
+
+#: dialogs/rc.cpp:367
+msgid "Hierarchy"
+msgstr "Jerarquía"
+
+#: dialogs/rc.cpp:368
+msgid "Subaccount"
+msgstr "Subcuenta:"
+
+#: dialogs/rc.cpp:369
+msgid "Limits"
+msgstr "Límites"
+
+#: dialogs/rc.cpp:370
+msgid ""
+"This page allows to setup certain limits. KMyMoney will warn you when the "
+"account balance reaches a limit."
+msgstr ""
+"Esta página le permita fijar ciertos límites. KMyMoney le avisará cuando el "
+"saldo de cuenta alcance un límite."
+
+#: dialogs/rc.cpp:372
+msgid "Absolute limit"
+msgstr "Límite absoluto"
+
+#: dialogs/rc.cpp:373
+msgid "Maximum credit limit"
+msgstr "Límite máximo de crédito"
+
+#: dialogs/rc.cpp:374
+msgid "Minimum balance"
+msgstr "Saldo mínimo"
+
+#: dialogs/rc.cpp:375
+msgid "Early warning"
+msgstr "Advertencia temprana"
+
+#: dialogs/rc.cpp:377
+msgid "VAT details"
+msgstr "Detalles del IVA"
+
+#: dialogs/rc.cpp:378
+msgid "VAT category"
+msgstr "Categoria del IVA"
+
+#: dialogs/rc.cpp:379
+msgid "VAT percentage"
+msgstr "Porcentaje del IVA"
+
+#: dialogs/rc.cpp:380
+msgid "Enable auto VAT assignment"
+msgstr "Permitir autoasignar IVA"
+
+#: dialogs/rc.cpp:381
+msgid "Amount entered"
+msgstr "Importe introducido"
+
+#: dialogs/rc.cpp:382
+msgid "Gross amount"
+msgstr "Importe Bruto"
+
+#: dialogs/rc.cpp:383
+msgid "Net amount"
+msgstr "Importe Neto"
+
+#: dialogs/rc.cpp:384
+msgid "Include on Tax Reports"
+msgstr "Incluir en Informes de Impuestos"
+
+#: dialogs/rc.cpp:387
+msgid "New Institution Dialog"
+msgstr "Diálogo Nueva Organización"
+
+#: dialogs/rc.cpp:388
+msgid "Institution Details"
+msgstr "Detalles de la Organización"
+
+#: dialogs/rc.cpp:390
+msgid "City:"
+msgstr "Ciudad:"
+
+#: dialogs/rc.cpp:394
+msgid "Routing Number:"
+msgstr "Número de Ruta:"
+
+#: dialogs/rc.cpp:398
+msgid "New Budget"
+msgstr "Nuevo Presupuesto"
+
+#: dialogs/rc.cpp:403
+msgid "New Equity"
+msgstr "Nuevo Patrimonio"
+
+#: dialogs/rc.cpp:406 dialogs/rc.cpp:407
+msgid "Trading Symbol of the stock or mutual fund, not required."
+msgstr "Símbolo comercial de la acción o fondo de inversión. (no requerido)"
+
+#: dialogs/rc.cpp:414 dialogs/rc.cpp:415
+msgid "Name of the company, or mutual fund."
+msgstr "Nombre de la compañia o fondo de inversión"
+
+#: dialogs/rc.cpp:418
+msgid "New File Dialog"
+msgstr "Diálogo Nuevo Archivo"
+
+#: dialogs/rc.cpp:419
+msgid ""
+"Use this dialog to enter personal information about yourself.\n"
+"\n"
+"All information is optional and is provided to personalize\n"
+"your KMyMoney file."
+msgstr ""
+"Use este diálogo para introducir su información persoal.\n"
+"\n"
+"Toda la información es opcional y sirve para personalizar\n"
+" su archivo de KMyMoney."
+
+#: dialogs/rc.cpp:430
+msgid "New Investment wizard"
+msgstr "Asistente para Nuevas Inversiones"
+
+#: dialogs/rc.cpp:431
+msgid "Investment Type"
+msgstr "Tipo de Inversión"
+
+#: dialogs/rc.cpp:432
+msgid "This wizard allows you to create a new investment."
+msgstr "Esta página le permite crear una nueva inversión."
+
+#: dialogs/rc.cpp:433
+msgid ""
+"The first step in this process requires to select the type of investment. "
+"The following steps collect more details about the investment from you."
+msgstr ""
+"El primer paso en este proceso requiere que escoja el tipo de inversión. Los "
+"siguientes pasos le pedirán más datos sobre la inversión."
+
+#: dialogs/rc.cpp:434
+msgid "Type of investment"
+msgstr "Tipo de inversión"
+
+#: dialogs/rc.cpp:438
+msgid "Investment details"
+msgstr "Detalles de la Inversión"
+
+#: dialogs/rc.cpp:439
+msgid ""
+"Enter the details below and click <b>Next</b> to continue entering the "
+"online update details."
+msgstr ""
+"Introduzca los detalles y pulse <b>Siguiente</b> para continuar con los "
+"detalles de la actualización online."
+
+#: dialogs/rc.cpp:442 dialogs/rc.cpp:728
+msgid "Fraction"
+msgstr "Fracción"
+
+#: dialogs/rc.cpp:443
+msgid "Trading Currency"
+msgstr "Divisa de mercado"
+
+#: dialogs/rc.cpp:444
+msgid "Full name"
+msgstr "Nombre completo"
+
+#: dialogs/rc.cpp:445
+msgid "AMEX"
+msgstr "AMEX"
+
+#: dialogs/rc.cpp:446
+msgid "EUREX"
+msgstr "EUREX"
+
+#: dialogs/rc.cpp:447
+msgid "FUND"
+msgstr "FUND"
+
+#: dialogs/rc.cpp:448
+msgid "NASDAQ"
+msgstr "NASDAQ"
+
+#: dialogs/rc.cpp:449
+msgid "NYSE"
+msgstr "NYSE"
+
+#: dialogs/rc.cpp:450
+msgid "XETRA"
+msgstr "XETRA"
+
+#: dialogs/rc.cpp:451
+msgid "Trading symbol"
+msgstr "Símbolo Comercial"
+
+#: dialogs/rc.cpp:452
+msgid "Identification"
+msgstr "Identificación"
+
+#: dialogs/rc.cpp:453
+msgid "Enter the ticker symbol (e.g. RHAT)."
+msgstr "Introduzca el símbolo de la bolsa de valores (por ej. RHAT)"
+
+#: dialogs/rc.cpp:454
+msgid "Enter the CUSIP/ISIN/WKN identification number here"
+msgstr "Introduzca aquí el número de identificación CUSIP/ISIN/WKN"
+
+#: dialogs/rc.cpp:455
+msgid "Trading market"
+msgstr "Mercado de valores"
+
+#: dialogs/rc.cpp:456
+msgid "Online Update"
+msgstr "Actualización online"
+
+#: dialogs/rc.cpp:457
+msgid ""
+"Select an online source and click <b>Finish</b> to store the investment "
+"data. If you don't want to use online updates, just leave the data as is."
+msgstr ""
+"Elija un origen online de datos y pulse <b>Finalizar</b> para guardar la "
+"inversión. Si no desea usar actualizaciones online, déjelo como está."
+
+#: dialogs/rc.cpp:458
+msgid "Use Finance::Quote"
+msgstr "Utilizar Finance::Quote"
+
+#: dialogs/rc.cpp:460
+msgid "Factor"
+msgstr "Factor"
+
+#: dialogs/rc.cpp:461
+msgid "New Loan Wizard"
+msgstr "Asistente para creación de Préstamos"
+
+#: dialogs/rc.cpp:462
+msgid "New Loan Account Wizard"
+msgstr "Asistente para nueva cuenta tipo Préstamo"
+
+#: dialogs/rc.cpp:463
+msgid ""
+"\n"
+"Welcome to the New Loan Account Wizard which will guide you through the "
+"creation of a new loan e.g. for your home, your car or any other loan that "
+"you pay or gain interest for.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Bienvenido al Asistente para Nuevas Cuentas tipo Préstamo, que le guiará a "
+"través de la creación de un nuevo préstamo p. ej. para su casa, coche o "
+"cualquier otro préstamo del que gane o pague intereses.\n"
+"\n"
+"Asegúrese de tener la información relevante a mano. En general, está en el "
+"contrato o en el último extracto de cuenta."
+
+#: dialogs/rc.cpp:464
+msgid "Edit Loan Account Wizard"
+msgstr "Asistente para la Edición de Cuentas tipo Préstamo"
+
+#: dialogs/rc.cpp:465
+msgid ""
+"\n"
+"Welcome to the Edit Loan Account Wizard. Please use this wizard to modify "
+"information about your loan account.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Bienvenido al Asistente para Edición de cuentas tipo Préstamo.Use este "
+"asistente para modificar información acerca de su préstamo.\n"
+"\n"
+"Asegúrese de tener la información relevante a mano. En general, está en el "
+"contrato o en el último extracto de cuenta."
+
+#: dialogs/rc.cpp:467
+msgid ""
+"\n"
+"In the first step, KMyMoney will ask you some general information about the "
+"loan account to be created."
+msgstr ""
+"\n"
+"En primer lugar, KMyMoney le preguntará algunos datos generales acerca del "
+"préstamo a crear."
+
+#: dialogs/rc.cpp:468 dialogs/rc.cpp:522 dialogs/rc.cpp:610
+msgid "1. General Information"
+msgstr "1. Información General"
+
+#: dialogs/rc.cpp:469
+msgid ""
+"\n"
+"2. Calculate Loan\n"
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"2. Calcular Préstamo\n"
+"\n"
+"3. Pagos"
+
+#: dialogs/rc.cpp:470
+msgid "Edit selection"
+msgstr "Editar Selección"
+
+#: dialogs/rc.cpp:471
+msgid ""
+"\n"
+"Please select, which data of the loan you want to modify."
+msgstr ""
+"\n"
+"Por favor, elija los datos del préstamo a modificar"
+
+#: dialogs/rc.cpp:472
+msgid "Modify the interest rate"
+msgstr "Modificar el tipo de interés"
+
+#: dialogs/rc.cpp:473
+msgid "Modify additional fees"
+msgstr "Modificar tasas adicionales"
+
+#: dialogs/rc.cpp:474
+msgid "Modify other loan information"
+msgstr "Modificar otra información del préstamo"
+
+#: dialogs/rc.cpp:475
+msgid "Effective date"
+msgstr "Fecha de efecto"
+
+#: dialogs/rc.cpp:478
+msgid "When should the changes become active?"
+msgstr "¿Cuando deberían hacerse efectivos los cambios?"
+
+#: dialogs/rc.cpp:479
+msgid "Lending or borrowing money"
+msgstr "Prestando o pidiendo dinero"
+
+#: dialogs/rc.cpp:480
+msgid ""
+"\n"
+"Do you borrow or lend money?"
+msgstr ""
+"\n"
+"¿Pides o prestas dinero?"
+
+#: dialogs/rc.cpp:483
+msgid "Name of the loan"
+msgstr "Nombre del préstamo"
+
+#: dialogs/rc.cpp:484
+msgid ""
+"\n"
+"How do you want to call this loan? Examples for names are 'car loan', "
+"'school loan', 'home owner loan'."
+msgstr ""
+"\n"
+"¿Como le desea llamar a este préstamo? Ejemplos de nombres son 'préstamo del "
+"coche', 'préstamo para estudios', 'hipoteca'."
+
+#: dialogs/rc.cpp:486
+msgid "TextLabel6"
+msgstr "TextLabel6"
+
+#: dialogs/rc.cpp:487
+msgid "TextLabel7"
+msgstr "TextLabel7"
+
+#: dialogs/rc.cpp:488
+msgid "Type of interest"
+msgstr "Tipo de interés"
+
+#: dialogs/rc.cpp:489
+msgid ""
+"\n"
+"Is the interest of this loan fixed over a period of time or is it adapted "
+"from time to time? If the interest rate changes during the amortization "
+"phase of the loan you should choose the option 'variable interest rate'."
+msgstr ""
+"\n"
+"Este préstamo ¿es de interés fijo o variable? Si la tasa de interés cambia "
+"durante la fase de amortización debe escojer la opción 'interés de tipo "
+"variable'."
+
+#: dialogs/rc.cpp:490
+msgid "Fixed interest rate"
+msgstr "Interés de tipo fijo"
+
+#: dialogs/rc.cpp:491
+msgid "Variable interest rate"
+msgstr "Interés de tipo variable"
+
+#: dialogs/rc.cpp:492
+msgid "Payments?"
+msgstr "¿Pagos?"
+
+#: dialogs/rc.cpp:493
+msgid ""
+"\n"
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?"
+msgstr ""
+"\n"
+"¿Se han hecho pagos de este préstamo antes de su introducción en KMyMoney o "
+"no?"
+
+#: dialogs/rc.cpp:494
+msgid "No, no payments were made yet."
+msgstr "No, aún no se han hecho pagos"
+
+#: dialogs/rc.cpp:495
+msgid "Yes, payments were made."
+msgstr "Si, se han hecho pagos"
+
+#: dialogs/rc.cpp:496
+msgid ""
+"Note: Payments made to obtain the loan (e.g. Dissagio) are not considered as "
+"payments in this context."
+msgstr ""
+"Nota: Los pagos hechos para obtener el préstamo (p. ej. \"Comisiones de "
+"apertura\") no son considerados como pagos en este contexto."
+
+#: dialogs/rc.cpp:497
+msgid "Recording payments?"
+msgstr "¿Registrando pagos?"
+
+#: dialogs/rc.cpp:498
+msgid ""
+"\n"
+"Do you want to record all payments of this loan with KMyMoney?"
+msgstr ""
+"\n"
+"¿Quiere usted registrar todos los pagos de este préstamo con KMyMoney?"
+
+#: dialogs/rc.cpp:499
+msgid "Yes, record all payments."
+msgstr "Si, registre todos los pagos."
+
+#: dialogs/rc.cpp:500
+msgid "No, only record payments since the beginning of this year."
+msgstr "No, registre solamente los pagos desde el inicio de este año."
+
+#: dialogs/rc.cpp:501
+msgid "Date of next interest change"
+msgstr "Fecha del próximo cambio de interés"
+
+#: dialogs/rc.cpp:502
+msgid ""
+"\n"
+"Select the date when the interest rate for this loan will be modified and "
+"the frequency of the future changes."
+msgstr ""
+"\n"
+"Escoja la fecha en que se modificará la tasa de este préstamo y la "
+"frecuencia de cambios futuros."
+
+#: dialogs/rc.cpp:503
+msgid "Next interest change on"
+msgstr "Los próximos intereses cambian el"
+
+#: dialogs/rc.cpp:504
+msgid "Time until next change"
+msgstr "Tiempo hasta el próximo cambio"
+
+#: dialogs/rc.cpp:506 dialogs/rc.cpp:571
+msgid ""
+"\n"
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"\n"
+"Por favor introduzca la cantidad que paga de principal e intereses o déjela "
+"en blanco para calcularla."
+
+#: dialogs/rc.cpp:507
+msgid "Current amount"
+msgstr "Cantidad Actual"
+
+#: dialogs/rc.cpp:510
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the amount for principal and interest then enter "
+"it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"KMyMoney calcula tanto la nueva tasa de interés como la cantidad de "
+"amortización e interés. Si conoce la cantidad de amortización e interés "
+"entonces introdúzcala aquí.\n"
+"\n"
+"Si KMyMoney debe calcularle este valor, deje el campo en blanco."
+
+#: dialogs/rc.cpp:512 dialogs/rc.cpp:545
+msgid ""
+"\n"
+"Please enter the interest rate or leave the field empty to calculate it."
+msgstr ""
+"\n"
+"Introduzca la tasa de interés o deje el campo en blanco para calcularlo."
+
+#: dialogs/rc.cpp:514
+msgid "Current rate"
+msgstr "Tasa actual"
+
+#: dialogs/rc.cpp:516
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the interest rate then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"KMyMoney puede calcular tanto la nueva tasa de interés como la cantidad de "
+"amortización e intereses. Si conoce la tasa de interés entonces introdúzcala "
+"aquí.\n"
+"\n"
+"Si KMyMoney debe calcularla, deje el campo en blanco"
+
+#: dialogs/rc.cpp:517
+msgid "Date of first payment"
+msgstr "Fecha del primer pago"
+
+#: dialogs/rc.cpp:520
+msgid "Calculate Loan"
+msgstr "Calcular Préstamo"
+
+#: dialogs/rc.cpp:521
+msgid ""
+"\n"
+"You have successfully entered the general information about your loan. Next, "
+"KMyMoney needs some information about the calculation of the loan."
+msgstr ""
+"\n"
+"Ha Introducido satisfactoriamente la información general de su préstamo. A "
+"continuación, KMyMoney necesita alguna información acerca del cálculo del "
+"préstamo."
+
+#: dialogs/rc.cpp:523 dialogs/rc.cpp:611
+msgid ""
+"\n"
+"2. Calculate Loan"
+msgstr ""
+"\n"
+"2. Calcular Préstamo"
+
+#: dialogs/rc.cpp:524 dialogs/rc.cpp:612
+msgid ""
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"3. Pagos"
+
+#: dialogs/rc.cpp:526
+msgid ""
+"\n"
+"How often will there be payments made to this loan?"
+msgstr ""
+"\n"
+"¿Con qué frecuencia se harán pagos a este préstamo?"
+
+#: dialogs/rc.cpp:527
+msgid "Interest calculation"
+msgstr "Cálculo de intereses"
+
+#: dialogs/rc.cpp:528
+msgid ""
+"\n"
+"When does the actual interest rate get calculated?"
+msgstr ""
+"\n"
+"¿Cuando se calcula la tasa real de interés?"
+
+#: dialogs/rc.cpp:529
+msgid "When the payment is received."
+msgstr "Cuando se recibe el pago"
+
+#: dialogs/rc.cpp:530
+msgid "When the payment is due."
+msgstr "Cuando vence el pago"
+
+#: dialogs/rc.cpp:534 dialogs/rc.cpp:547 dialogs/rc.cpp:560 dialogs/rc.cpp:573
+#: dialogs/rc.cpp:586 dialogs/rc.cpp:598 dialogs/rc.cpp:679
+msgid "Loan amount:"
+msgstr "Cantidad del préstamo:"
+
+#: dialogs/rc.cpp:535 dialogs/rc.cpp:548 dialogs/rc.cpp:561 dialogs/rc.cpp:574
+#: dialogs/rc.cpp:587 dialogs/rc.cpp:599 dialogs/rc.cpp:633 dialogs/rc.cpp:671
+msgid "Interest rate:"
+msgstr "Tasa de interés:"
+
+#: dialogs/rc.cpp:536 dialogs/rc.cpp:549 dialogs/rc.cpp:562 dialogs/rc.cpp:575
+#: dialogs/rc.cpp:588 dialogs/rc.cpp:600 dialogs/rc.cpp:669
+msgid "Term:"
+msgstr "Plazo:"
+
+#: dialogs/rc.cpp:537 dialogs/rc.cpp:550 dialogs/rc.cpp:563 dialogs/rc.cpp:576
+#: dialogs/rc.cpp:589 dialogs/rc.cpp:601 dialogs/rc.cpp:622 dialogs/rc.cpp:630
+#: dialogs/rc.cpp:677
+msgid "Principal + Interest:"
+msgstr "Amortización + Intereses:"
+
+#: dialogs/rc.cpp:538 dialogs/rc.cpp:551 dialogs/rc.cpp:564 dialogs/rc.cpp:577
+#: dialogs/rc.cpp:583 dialogs/rc.cpp:585 dialogs/rc.cpp:590 dialogs/rc.cpp:602
+msgid "Final amortization payment"
+msgstr "Pago final:"
+
+#: dialogs/rc.cpp:557
+msgid "Duration"
+msgstr "Duración"
+
+#: dialogs/rc.cpp:558
+msgid ""
+"\n"
+"Please enter the term of this loan or leave the field empty to calculate it. "
+"The term is the time that is required to fully repay the loan. This time "
+"might be different from the time your loan contract is signed for."
+msgstr ""
+"\n"
+"Por favor, introduzca el plazo de este préstamo o deje el campo vacío para "
+"calcularlo. El plazo es el tiempo requerido para devolver por completo el "
+"préstamo. Este tiempo puede ser diferente del tiempo por el que firme el "
+"contrato de préstamo."
+
+#: dialogs/rc.cpp:584
+msgid ""
+"\n"
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"\n"
+"Introduzca la cantidad del pago final de la amortización o deje el campo "
+"vacío para calcularlo."
+
+#: dialogs/rc.cpp:596
+msgid "Calculation Overview"
+msgstr "Resumen del cálculo"
+
+#: dialogs/rc.cpp:597
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown in the overview below. You can "
+"accept these values by selecting \"Next\" or change them by choosing \"Back"
+"\" to return to the input field for the information you want to change."
+msgstr ""
+"\n"
+"KMyMoney calculó el préstamo como se muestra en el resumen de abajo. Puede "
+"aceptar estos valores escogiendo \"Siguiente\" o cambiarlos escogiendo "
+"\"Atrás\" para volver al campo de entrada de la información que desee "
+"cambiar."
+
+#: dialogs/rc.cpp:609
+msgid ""
+"\n"
+"In the following steps, KMyMoney supports you in setting up categories and "
+"schedules for your loan payments."
+msgstr ""
+"\n"
+"En los siguientes pasos, KMyMoney lo ayudará a configurar las categorias y "
+"transacciones programadas para los pagos de su préstamo."
+
+#: dialogs/rc.cpp:614
+msgid ""
+"\n"
+"Please select the category you want to assign the interest payments to or "
+"create a new category."
+msgstr ""
+"\n"
+"Escoja la categoría que desee asignar a los pagos de los intereses o cree "
+"una nueva categoría."
+
+#: dialogs/rc.cpp:615
+msgid "Additional Fees"
+msgstr "Cargos Adicionales"
+
+#: dialogs/rc.cpp:616
+msgid ""
+"\n"
+"If your regular payment contains any additional fees, click on the button "
+"\"Additional fees\" to enter them."
+msgstr ""
+"\n"
+"Si su pago periódico contiene cargos adicionales, pulse el botón \"Cargos "
+"Adicionales\" para introducirlos."
+
+#: dialogs/rc.cpp:617
+msgid "= periodical payment:"
+msgstr "= Pago periódico:"
+
+#: dialogs/rc.cpp:623
+msgid ""
+"If no additional fees are included in your periodical payment or you have "
+"entered all such fees, then click on \"Next\"."
+msgstr ""
+"Si no se incluyen cargos adicionales en sus pagos periódicos o ya los "
+"introdujo, pulse en \"Seguir\"."
+
+#: dialogs/rc.cpp:625
+msgid ""
+"KMyMoney will create a schedule for this payment and reminds you whenever a "
+"payment must be made.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"KMyMoney creará un plan de pagos, y le avisará cando deba hacer uno.<p>\n"
+"Si escogió registrar todos los pagos, ya ha proporcionado esta fecha. Si "
+"escogió registrar solamente los pagos de este año, entonces la <b>Fecha de "
+"vencimiento del primer pagto<b> es la fecha del primer pago realizado este "
+"año."
+
+#: dialogs/rc.cpp:626
+msgid "First payment due on:"
+msgstr "El primer pago vence el:"
+
+#: dialogs/rc.cpp:627
+msgid "Make payment from/to:"
+msgstr "Realizar pago de/a:"
+
+#: dialogs/rc.cpp:629
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown below. If you want to accept these "
+"values use the \"Finish\" button to update your account, otherwise use the "
+"\"Back\" button to modify your settings."
+msgstr ""
+"\n"
+"KMyMoney calculó el préstamo como se muestra abajo. Si quiere aceptar estos "
+"valores use el botón \"Finalizar\" para actualizar su cuenta, si no es el "
+"caso use el botón \"Atrás\" para modificar los datos."
+
+#: dialogs/rc.cpp:631
+msgid "Additional fees:"
+msgstr "Cargos adicionales:"
+
+#: dialogs/rc.cpp:632
+msgid "Total payment:"
+msgstr "Pago Total:"
+
+#: dialogs/rc.cpp:634
+msgid "Valid from:"
+msgstr "Válido de:"
+
+#: dialogs/rc.cpp:635
+msgid "Affected payments:"
+msgstr "Pagos afectados:"
+
+#: dialogs/rc.cpp:645
+msgid "Press this to create a new asset account"
+msgstr "Pulse aquí para crear una nueva cuenta de activos"
+
+#: dialogs/rc.cpp:648
+msgid ""
+"\n"
+"This page summarizes the data you entered. If you need to modify anything, "
+"please use the \"Back\" button to go to respective page. Otherwise use the "
+"\"Finish\" button to create the account."
+msgstr ""
+"\n"
+"Esta página resume los datos que indrodujo. Si necesita modificar algo use "
+"el botón \"Atrás\" para ir a la página apropiada. En otro caso use el botón "
+"\"Finalizar\" para crear la cuenta."
+
+#: dialogs/rc.cpp:650
+msgid "Payee:"
+msgstr "Beneficiario:"
+
+#: dialogs/rc.cpp:653
+msgid "First payment:"
+msgstr "Primer pago:"
+
+#: dialogs/rc.cpp:655
+msgid "Amount is:"
+msgstr "Cantidad:"
+
+#: dialogs/rc.cpp:656
+msgid "Loan calculation"
+msgstr "Calculo de préstamos"
+
+#: dialogs/rc.cpp:660
+msgid "Periodic Payment:"
+msgstr "Pago periódico:"
+
+#: dialogs/rc.cpp:661
+msgid "Additional Fees:"
+msgstr "Cargos adicionales:"
+
+#: dialogs/rc.cpp:662
+msgid "Interest category:"
+msgstr "Categoría de los intereses:"
+
+#: dialogs/rc.cpp:663
+msgid "Payment from:"
+msgstr "Pago desde:"
+
+#: dialogs/rc.cpp:666
+msgid "Next due date:"
+msgstr "Próxima fecha de vencimiento:"
+
+#: dialogs/rc.cpp:673
+msgid "Final Payment:"
+msgstr "Pago Final:"
+
+#: dialogs/rc.cpp:675
+msgid "Interest is due:"
+msgstr "Vencimiento de los intereses:"
+
+#: dialogs/rc.cpp:680
+msgid "Payment frequency:"
+msgstr "Frecuencia de pago:"
+
+#: dialogs/rc.cpp:682
+msgid "Online Quote Configuration"
+msgstr "Configuración de Cotizaciones Online"
+
+#: dialogs/rc.cpp:687
+msgid "Perl Location:"
+msgstr "Localización de Perl:"
+
+#: dialogs/rc.cpp:688
+msgid "Script:"
+msgstr "Guión:"
+
+#: dialogs/rc.cpp:690
+msgid "Reassign payees"
+msgstr "Reasignar beneficiarios"
+
+#: dialogs/rc.cpp:691
+msgid ""
+"The transactions associated with the selected payees need to be re-assigned "
+"to a different payee before the selected payees can be deleted. Please "
+"select a payee from the list below."
+msgstr ""
+"Los asientos asociados con los beneficiarios seleccionado necesitan ser "
+"reasignados a un beneficiario diferente antes que los beneficiarios puedan "
+"borrarse. Por favor, seleccione un beneficiario de la lista debajo."
+
+#: dialogs/rc.cpp:692
+msgid "Available payees:"
+msgstr "Beneficiarios disponibles:"
+
+#: dialogs/rc.cpp:693
+msgid "Assign deleted names to the above selected payee's matching list"
+msgstr ""
+"Asignar los nombres borrados a la lista de beneficiarios coincidentes "
+"seleccionados arriba"
+
+#: dialogs/rc.cpp:696
+msgid "PluginDlg"
+msgstr "PluginDlg"
+
+#: dialogs/rc.cpp:697
+msgid "PlugIn"
+msgstr "PlugIn"
+
+#: dialogs/rc.cpp:698 widgets/transaction.cpp:1071
+#: widgets/transaction.cpp:1658
+msgid "Status"
+msgstr "Estado"
+
+#: dialogs/rc.cpp:699
+msgid "Feature"
+msgstr "Funcionalidad"
+
+#: dialogs/rc.cpp:703
+msgid "Reconciliation Dialog"
+msgstr "Asistente para Reconciliación"
+
+#: dialogs/rc.cpp:704
+msgid ""
+"This dialog will assist in helping you to balance your account.\n"
+"\n"
+"Click on an appropriate transaction within one of the two list views to mark "
+"it as reconciled. To create a transaction or edit\n"
+"a transaction you can return to the register by clicking on the Edit "
+"Transactions button.\n"
+"\n"
+"Your account is balanced when the Difference is Zero. Click on the Finish "
+"button to save the reconciled transactions."
+msgstr ""
+"Este diálogo le ayudará a cuadrar su cuenta.\n"
+"\n"
+"Pulse sobre un asiento adecuado de una de las dos listas para marcarlo como "
+"reconciliado. Para crear o editar un asiento \n"
+"puede volver al registro pulsando el botón \"Editar Asiento.\"\n"
+"\n"
+"Su cuenta está ajustada cuando la Diferencia es cero. Pulse el botón Acabar "
+"para guardar los asientos reconciliados."
+
+#: dialogs/rc.cpp:705
+msgid "Withdrawals"
+msgstr "Reintegros"
+
+#: dialogs/rc.cpp:707 dialogs/rc.cpp:708 dialogs/rc.cpp:822
+msgid "$"
+msgstr "$"
+
+#: dialogs/rc.cpp:710
+msgid "Previous Balance:"
+msgstr "Saldo Anterior:"
+
+#: dialogs/rc.cpp:711 dialogs/rc.cpp:713 dialogs/rc.cpp:715 dialogs/rc.cpp:717
+#: dialogs/rc.cpp:820
+msgid "0"
+msgstr "0"
+
+#: dialogs/rc.cpp:712
+msgid "Ending Balance:"
+msgstr "Saldo Final:"
+
+#: dialogs/rc.cpp:714
+msgid "Cleared Balance:"
+msgstr "Saldo Reconciliado:"
+
+#: dialogs/rc.cpp:716
+msgid "Difference:"
+msgstr "Diferencia:"
+
+#: dialogs/rc.cpp:718
+msgid "Edit Transactions..."
+msgstr "Editar Asientos..."
+
+#: dialogs/rc.cpp:721
+msgid "Security List Editor"
+msgstr "Editor del Listado de Valores Bursátiles"
+
+#: dialogs/rc.cpp:726
+msgid "Market"
+msgstr "Mercado"
+
+#: dialogs/rc.cpp:729
+msgid "Cash Fraction"
+msgstr "Fracción monetária"
+
+#: dialogs/rc.cpp:730
+msgid "Add..."
+msgstr "Añadir..."
+
+#: dialogs/rc.cpp:732 widgets/kmymoneypriceview.cpp:157
+msgid "Delete..."
+msgstr "Borrar..."
+
+#: dialogs/rc.cpp:733
+msgid "Show national currencies"
+msgstr "Mostrar divisas nacionales"
+
+#: dialogs/rc.cpp:735
+msgid "KMyMoney - Select Database"
+msgstr "KMyMoney - Escoger Base de Datos"
+
+#: dialogs/rc.cpp:736
+msgid "CAUTION!"
+msgstr "¡PRECAUCIÓN!"
+
+#: dialogs/rc.cpp:737
+msgid ""
+"<font color=\"#ff2727\">This software is still in an experimental stage, and "
+"there are still some known response time problems. Please be patient; we are "
+"working on them.\n"
+"As always, please make sure you have adequate backups of your data.</font>"
+msgstr ""
+"<font color=\"#ff2727\">Esta aplicación está todavía en una etapa "
+"experimental y tiene todavía problemas en el tiempo de respuesta. Por favor "
+"sea paciente. Estamos trabajando en resolverlos. Como siempre, asegúrese de "
+"tener un resguardo adecuado de sus datos.</font>"
+
+#: dialogs/rc.cpp:738
+msgid "Database Type"
+msgstr "Tipo de Base de Datos"
+
+#: dialogs/rc.cpp:739
+msgid "Database Name"
+msgstr "Nombre de Base de Datos"
+
+#: dialogs/rc.cpp:740
+msgid "Host Name"
+msgstr "Nombre de Equipo"
+
+#: dialogs/rc.cpp:741
+msgid "User Name"
+msgstr "Nombre de Usuario"
+
+#: dialogs/rc.cpp:743
+msgid "Preload &all data"
+msgstr "Prec&argar todos los datos"
+
+#: dialogs/rc.cpp:745
+msgid "&Generate SQL"
+msgstr "&Generar SQL"
+
+#: dialogs/rc.cpp:747
+msgid "Ca&ncel"
+msgstr "Ca&ncelar"
+
+#: dialogs/rc.cpp:762 widgets/rc.cpp:172
+msgid "Sort options"
+msgstr "Opciones de ordenamiento"
+
+#: dialogs/rc.cpp:763
+msgid "Use default"
+msgstr "Utilizar el predeterminado"
+
+#: dialogs/rc.cpp:767
+msgid "Correct splits"
+msgstr "Corregir partidas"
+
+#: dialogs/rc.cpp:769
+msgid "How do you want to proceed?"
+msgstr "¿Cómo desea proceder?"
+
+#: dialogs/rc.cpp:770
+msgid "Continue to edit splits"
+msgstr "Continuar editando partidas"
+
+#: dialogs/rc.cpp:771
+#, c-format
+msgid "Change total amount of transaction to %1."
+msgstr "Cambiar el importe total del asiento a %1."
+
+#: dialogs/rc.cpp:772
+msgid "Distribute difference of %1 among all splits."
+msgstr "Repartir la diferencia de %1 entre todas las partidas."
+
+#: dialogs/rc.cpp:773
+msgid "Leave %1 unassigned."
+msgstr "Dejar %1 sin asignar"
+
+#: dialogs/rc.cpp:776
+msgid "Split transaction"
+msgstr "Detallar asiento"
+
+#: dialogs/rc.cpp:777
+msgid "<b>11,00<b>"
+msgstr "<b>11,00<b>"
+
+#: dialogs/rc.cpp:778
+msgid "<b>111,00<b>"
+msgstr "<b>111,00<b>"
+
+#: dialogs/rc.cpp:779
+msgid "Unassigned"
+msgstr "Sin asignar"
+
+#: dialogs/rc.cpp:780
+msgid "Sum of splits"
+msgstr "Suma de las partidas"
+
+#: dialogs/rc.cpp:781
+msgid "100,00"
+msgstr "100,00"
+
+#: dialogs/rc.cpp:782
+msgid "Transaction amount"
+msgstr "Importe del asiento"
+
+#: dialogs/rc.cpp:783
+msgid "Merge"
+msgstr "Combinar"
+
+#: dialogs/rc.cpp:784
+msgid "Merges splits with the same category to one split"
+msgstr "Combina todas las partidas con la misma categoría en una sola partida"
+
+#: dialogs/rc.cpp:785
+msgid ""
+"In case you have multiple split entries to the same category and you like to "
+"keep them as a single split, press this button. The amount for identical "
+"categories will be added and stored in a single split for that category."
+msgstr ""
+"En caso que tenga múltiples partidas de la misma categoría y desee "
+"conservarlas como una única partida, presione este botón. El monto será "
+"sumado y guardado en una única partida para la categoría."
+
+#: dialogs/rc.cpp:786
+msgid "Clear &Zero"
+msgstr "Borrar las partidas en cero"
+
+#: dialogs/rc.cpp:787
+msgid "Removes all splits that have a value of zero."
+msgstr "Borra todas las partidas que tengan un valor de cero"
+
+#: dialogs/rc.cpp:791
+msgid "New price entry"
+msgstr "Nueva entrada de precio"
+
+#: dialogs/rc.cpp:799
+msgid "Void mark"
+msgstr "Marca de vacío"
+
+#: dialogs/rc.cpp:800
+msgid "Opening Balance text"
+msgstr "Texto del Saldo de Apertura"
+
+#: dialogs/rc.cpp:801
+msgid "Type field text"
+msgstr "Escriba el campo de texto"
+
+#: dialogs/rc.cpp:802
+msgid "Account delimiter"
+msgstr "Separador de cuentas"
+
+#: dialogs/rc.cpp:804
+msgid "Attempt to match similar transactions"
+msgstr "Intentar conciliar asientos similares"
+
+#: dialogs/rc.cpp:806 dialogs/rc.cpp:808
+msgid "The format of the dates in the QIF file."
+msgstr "Formatos de las fechas en el archivo QIF."
+
+#: dialogs/rc.cpp:809 dialogs/rc.cpp:811
+msgid ""
+"If a QIF file contains date entries with years represented with two digits "
+"then either an apostrophe or a slash may be used to delimit the year in the "
+"dates for certain centuries. This enables 1905 to be distinguished from "
+"2005. Specify here which range of years will have year delimited by an "
+"apostrophe (eg. for Quicken this is usually 1900-1949)."
+msgstr ""
+"Si un archivo QIF contiene asientos con el año representado por dos dígitos "
+"entonces puede usarse un apóstrofe o una barra para delimitarlo en ciertos "
+"siglos. Esto permite distinguir 1095 de 2005. Especifique aquí qué rango de "
+"años estarán delimitados con un apóstrofe (en Quicken esto por lo general "
+"es 1900-1949)."
+
+#: dialogs/rc.cpp:810
+msgid "Apostrophe Handling"
+msgstr "Gestión de Apostrofe"
+
+#: dialogs/rc.cpp:812
+msgid "Amounts"
+msgstr "Importes"
+
+#: dialogs/rc.cpp:813
+msgid "Field"
+msgstr "Campo"
+
+#: dialogs/rc.cpp:814
+msgid "QIF-Record"
+msgstr "Registro QIF"
+
+#: dialogs/rc.cpp:815 dialogs/rc.cpp:833
+msgid "Decimal Symbol"
+msgstr "Símbolo Decimal"
+
+#: dialogs/rc.cpp:816
+msgid "Thousand Delimiter"
+msgstr "Delimitador de millar"
+
+#: dialogs/rc.cpp:817
+msgid "SortColumnInvisible"
+msgstr "SortColumnInvisible"
+
+#: dialogs/rc.cpp:819
+msgid "T"
+msgstr "T"
+
+#: dialogs/rc.cpp:821
+msgid "Split-Value"
+msgstr "Valor de la Partida"
+
+#: dialogs/rc.cpp:824
+msgid "Commission"
+msgstr "Comisión"
+
+#: dialogs/rc.cpp:825
+msgid "O"
+msgstr "O"
+
+#: dialogs/rc.cpp:826
+msgid "2"
+msgstr "2"
+
+#: dialogs/rc.cpp:828
+msgid "I"
+msgstr "I"
+
+#: dialogs/rc.cpp:829
+msgid "3"
+msgstr "3"
+
+#: dialogs/rc.cpp:831
+msgid "Q"
+msgstr "Q"
+
+#: dialogs/rc.cpp:832
+msgid "4"
+msgstr "4"
+
+#: dialogs/rc.cpp:834
+msgid "Thousands Separator"
+msgstr "Separador de Millar"
+
+#: dialogs/rc.cpp:836
+msgid "Output filter location"
+msgstr "Localización del filtro para exportación"
+
+#: dialogs/rc.cpp:837
+msgid "Input filter file type"
+msgstr "Tipo del fichero del filtro de importación"
+
+#: dialogs/rc.cpp:838
+msgid "*.qif"
+msgstr "*.qif"
+
+#: dialogs/rc.cpp:839
+msgid "Input filter location"
+msgstr "Localización del filtro para importar"
+
+#: dialogs/rc.cpp:843
+msgid "Rename"
+msgstr "Renombrar"
+
+#: dialogs/kselecttransactionsdlg.cpp:44
+msgid "Select Transaction"
+msgstr "Escoger Asiento"
+
+#: dialogs/kselecttransactionsdlg.cpp:45
+msgid ""
+"Select a transaction and press the OK button or use Cancel to select none."
+msgstr ""
+"Escoja un asiento y presione el botón Aceptar o presione Cancelar para no "
+"seleccionar ninguno."
+
+#: dialogs/knewinvestmentwizard.cpp:62
+msgid "Investment detail wizard"
+msgstr "Asistente para detalles de Inversiones"
+
+#: dialogs/knewinvestmentwizard.cpp:82
+msgid "Security detail wizard"
+msgstr "Asistente para detalles de valores Bursátiles"
+
+#: dialogs/knewaccountdlg.cpp:121 dialogs/knewinvestmentwizard.cpp:109
+msgid ""
+"_: default price mode\n"
+"<default>"
+msgstr "<predeterminado>"
+
+#: dialogs/knewaccountdlg.cpp:122 dialogs/knewinvestmentwizard.cpp:110
+msgid "Price per share"
+msgstr "Precio por acción"
+
+#: dialogs/knewaccountdlg.cpp:123 dialogs/knewinvestmentwizard.cpp:111
+msgid "Total for all shares"
+msgstr "Total para todas las acciones"
+
+#: dialogs/knewinvestmentwizard.cpp:129
+msgid "This wizard allows you to modify the selected investment."
+msgstr "Este asistente le permite modificar la inversión seleccionada."
+
+#: dialogs/knewinvestmentwizard.cpp:132
+msgid "This wizard allows you to modify the selected security."
+msgstr "Esta página le permite modificar el valor bursátil seleccionado."
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid ""
+"The selected symbol is already on file. Do you want to reuse the existing "
+"security?"
+msgstr ""
+"El símbolo seleccionado ya está en el archivo. ¿Desea reutilizar el valor "
+"bursátil existente?"
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid "Security found"
+msgstr "Valro bursatil encontrado"
+
+#: dialogs/knewinvestmentwizard.cpp:309
+msgid "Unable to create all objects for the investment"
+msgstr "No se pudieron crear todos los objetos para la inversión"
+
+#: dialogs/keditequityentrydlg.cpp:78
+msgid "Change the price information of the selected entry."
+msgstr "Cambia la información de precios de la entrada escogida."
+
+#: dialogs/kaccountselectdlg.cpp:64 widgets/kmymoneybriefschedule.cpp:59
+msgid "&Skip"
+msgstr "&Saltar"
+
+#: dialogs/kaccountselectdlg.cpp:66 widgets/kmymoneybriefschedule.cpp:61
+msgid "Skip this transaction"
+msgstr "Circunvalar este asiento"
+
+#: dialogs/kaccountselectdlg.cpp:67
+msgid ""
+"Use this to skip importing this transaction and proceed with the next one."
+msgstr ""
+"Use esto para evitar importar este asiento y continuar con el siguiente."
+
+#: dialogs/kaccountselectdlg.cpp:72
+msgid "Create a new account/category"
+msgstr "Crear una nueva cuenta/categoría"
+
+#: dialogs/kaccountselectdlg.cpp:73
+msgid "Use this to add a new account/category to the file"
+msgstr "Use esto para añadir una nueva cuenta/categoría al archivo"
+
+#: dialogs/kaccountselectdlg.cpp:77
+msgid "&Abort"
+msgstr "&Abortar"
+
+#: dialogs/kaccountselectdlg.cpp:79
+msgid "Abort the import operation and dismiss all changes"
+msgstr "Abortar la operación de importación y anular los cambios"
+
+#: dialogs/kaccountselectdlg.cpp:80
+msgid ""
+"Use this to abort the import. Your financial data will be in the state "
+"before you started the QIF import."
+msgstr ""
+"Use esto para abortar la importación. Sus datos financieros estarán en el "
+"estado anterior a la importación del QIF."
+
+#: dialogs/knewaccountdlg.cpp:110
+msgid "Is a sub account"
+msgstr "Es una subcuenta"
+
+#: dialogs/knewaccountdlg.cpp:184
+msgid "VAT account"
+msgstr "Cuenta de IVA"
+
+#: dialogs/knewaccountdlg.cpp:474
+msgid ""
+"You have not specified a name.\n"
+"Please fill in this field."
+msgstr ""
+"No especificó un nombre.\n"
+"Por favor, rellene el campo."
+
+#: dialogs/knewaccountdlg.cpp:482
+msgid "Please select a parent account."
+msgstr "Por favor, escoja una cuenta madre."
+
+#: dialogs/knewaccountdlg.cpp:489 dialogs/knewaccountdlg.cpp:1029
+msgid "<No Institution>"
+msgstr "<Sin Organización>"
+
+#: dialogs/knewaccountdlg.cpp:552
+msgid ""
+"An account named <b>%1</b> already exists. You cannot create a second "
+"account with the same name."
+msgstr ""
+"Ya existe una cuenta llamada <b>%1</b>. No puede crear una segunda cuenta "
+"con el mismo nombre."
+
+#: dialogs/knewaccountdlg.cpp:567
+msgid ""
+"A category named <b>%1</b> already exists. You cannot create a second "
+"category with the same name."
+msgstr ""
+"Ya existe una categoría llamada <b>%1</b>- No puede crear una segunda "
+"categoría con el mismo nombre."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid ""
+"You have selected to suppress the display of unused categories in the "
+"KMyMoney configuration dialog. The category you just created will therefore "
+"only be shown if it is used. Otherwise, it will be hidden in the accounts/"
+"categories view."
+msgstr ""
+"Ha escogido no mostrar las categorías no utilizadas en el diálogo de "
+"configuración de KMyMoney. Por lo tanto, la categoría que acaba de crear "
+"solo se mostrará si es usada. En otro caso, estará oculta en la vista de "
+"cuentas/categorías."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid "Hidden categories"
+msgstr "Categorías ocultas"
+
+#: dialogs/knewaccountdlg.cpp:927 dialogs/knewaccountdlg.cpp:979
+#, c-format
+msgid "Is a sub account of %1"
+msgstr "Es una subcuenta de %1"
+
+#: dialogs/knewaccountdlg.cpp:1082
+msgid "Cannot add institution"
+msgstr "No fue posible añadir la organización"
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid ""
+"This dialog does not allow to create new payees. Please pick a payee from "
+"the list."
+msgstr ""
+"Este cuadro de diálogo no permite crear nuevos beneficiarios. Por favor, "
+"escoja un beneficiario de la lista."
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid "Payee creation"
+msgstr "Creación del beneficiario"
+
+#: dialogs/kimportdlg.cpp:69
+msgid "Use this to start the import operation"
+msgstr "Use esto para comenzar la operación de importación"
+
+#: dialogs/kimportdlg.cpp:110
+msgid ""
+"%1|Import files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Archivos a importar\n"
+"%2|Todos los archivos (*.*)"
+
+#: dialogs/kimportdlg.cpp:111
+msgid "Import File..."
+msgstr "Importar archivo..."
+
+#: dialogs/knewloanwizard.cpp:124
+msgid "Create a new category"
+msgstr "Crea una nueva categoría"
+
+#: dialogs/knewloanwizard.cpp:125
+msgid "Use this to open the new account editor"
+msgstr "Use esto para abrir el editor de nuevas cuentas"
+
+#: dialogs/knewloanwizard.cpp:129
+msgid "&Additional fees..."
+msgstr "Cargos &adicionales..."
+
+#: dialogs/knewloanwizard.cpp:131
+msgid "Enter additional fees"
+msgstr "Introduce cargos adicionales"
+
+#: dialogs/knewloanwizard.cpp:132
+msgid ""
+"Use this to add any additional fees other than principal and interest "
+"contained in your periodical payments."
+msgstr ""
+"Use esto para añadir cualesquiera cargos adicionales diferente de intereses "
+"y amortización que vengan incluídos en sus pagos periódicos."
+
+#: dialogs/knewloanwizard.cpp:139
+msgid ""
+"Use this to create a new account to which the initial payment should be made"
+msgstr "Use esto para crear una nueva cuenta a la cual hacer el pago inicial"
+
+#: dialogs/knewloanwizard.cpp:208
+msgid "To whom do you make payments?"
+msgstr "¿A quien hace los pagos?"
+
+#: dialogs/knewloanwizard.cpp:209
+msgid "Payments to"
+msgstr "Beneficiario"
+
+#: dialogs/knewloanwizard.cpp:214
+msgid "From whom do you expect payments?"
+msgstr "¿De quien espera los pagos?"
+
+#: dialogs/knewloanwizard.cpp:215
+msgid "Payments from"
+msgstr "Cobrar a"
+
+#: dialogs/knewloanwizard.cpp:233
+msgid "Please enter the date, the first payment for this loan was/is due."
+msgstr ""
+"Por favor introduzca la fecha en la que vence/venció el primer pago de este "
+"préstamo."
+
+#: dialogs/knewloanwizard.cpp:235
+msgid ""
+"Note: Consult the loan contract for details of the first due date. Keep in "
+"mind, that the first due date usually differs from the date the contract was "
+"signed"
+msgstr ""
+"Nota: Consulte el contrato del préstamo para los detalles de la primera "
+"fecha de vencimiento. Recuerde que la primera fecha de vencimiento por lo "
+"general no es la misma que la fecha en la que fue firmado el contrato"
+
+#: dialogs/knewloanwizard.cpp:240
+msgid ""
+"Please enter the original loan amount in the field below or leave it empty "
+"to be calculated."
+msgstr ""
+"Por favor introduzca la cantidad original del préstamo en el campo de abajo "
+"o déjelo vacío para ser calculado."
+
+#: dialogs/knewloanwizard.cpp:248
+msgid ""
+"Please enter the date, the first payment for this loan was/is due this year."
+msgstr ""
+"Por favor introduzca la fecha en que vence/venció el primer pago de este año."
+
+#: dialogs/knewloanwizard.cpp:250
+msgid ""
+"Note: You can easily figure out the date of the first payment if you consult "
+"the last statement of last year."
+msgstr ""
+"Nota: Puede averiguar con facilidad la fecha del primer pago si consulta el "
+"último extracto bancario del año anterior."
+
+#: dialogs/knewloanwizard.cpp:254
+msgid ""
+"Please enter the remaining loan amount of last years final statement in the "
+"field below. You should not leave this field empty."
+msgstr ""
+"Por favor introduzca la cantidad que tras el último pago del año pasado "
+"faltaba por devolver. No deberia dejar ese campo en blanco."
+
+#: dialogs/knewloanwizard.cpp:311 dialogs/knewloanwizard.cpp:326
+#: dialogs/knewloanwizard.cpp:341 dialogs/knewloanwizard.cpp:357
+#: dialogs/knewloanwizard.cpp:373
+msgid "calculate"
+msgstr "calcular"
+
+#: dialogs/knewloanwizard.cpp:417
+msgid "borrowed"
+msgstr "prestado"
+
+#: dialogs/knewloanwizard.cpp:419
+msgid "lend"
+msgstr "prestar"
+
+#: dialogs/knewloanwizard.cpp:423
+msgid "not assigned"
+msgstr "no asignado"
+
+#: dialogs/knewloanwizard.cpp:430
+msgid "on reception"
+msgstr "al recibir"
+
+#: dialogs/knewloanwizard.cpp:432
+msgid "on due date"
+msgstr "en la fecha de vencimiento"
+
+#: dialogs/knewloanwizard.cpp:471
+msgid ""
+"The loan wizard is unable to calculate two different values for your loan at "
+"the same time. Please enter a value for the %1 on this page or backup to the "
+"page where the current value to be calculated is defined and fill in a "
+"value."
+msgstr ""
+"El asistente de préstamos no es capaz de calcular dos valores diferentes "
+"para su préstamo al mismo tiempo. Por favor introduzca un valor para el %1 "
+"en esta página o vuelva a la página donde se define el valor actual a ser "
+"calculado e introduzca un valor."
+
+#: dialogs/knewloanwizard.cpp:500
+msgid ""
+"You selected, that payments have already been made towards this loan. This "
+"requires you to enter the loan amount exactly as found on your last "
+"statement."
+msgstr ""
+"Ha indicado que ya fueron hechos pagos de este préstamo. Esto requiere que "
+"introduzca la cantidad prestada tal como viene en su último extracto "
+"bancario."
+
+#: dialogs/knewloanwizard.cpp:513
+msgid "interest rate"
+msgstr "tasa de interés"
+
+#: dialogs/knewloanwizard.cpp:522
+msgid "term"
+msgstr "final"
+
+#: dialogs/knewloanwizard.cpp:532
+msgid "principal and interest"
+msgstr "amortización e intereses"
+
+#: dialogs/knewloanwizard.cpp:743
+#, c-format
+msgid ""
+"The number of payments has been decremented and the final payment has been "
+"modified to %1."
+msgstr "El número de pagos ha sido disminuido y el pago final modificado a %1."
+
+#: dialogs/knewloanwizard.cpp:751 dialogs/knewloanwizard.cpp:771
+#, c-format
+msgid "The final payment has been modified to %1."
+msgstr "El pago final fue modificado a %1."
+
+#: dialogs/knewloanwizard.cpp:802
+msgid "KMyMoney has calculated a final payment of %1 for this loan."
+msgstr "KMyMoney calculó un pago final de %1 para este préstamo."
+
+#: dialogs/knewloanwizard.cpp:817
+msgid ""
+"You have entered mis-matching information. Please backup to the appropriate "
+"page and update your figures or leave one value empty to let KMyMoney "
+"calculate it for you"
+msgstr ""
+"Introdujo información que no encaja. Por favor vuelva a la página adecuada y "
+"actualice sus datos o deje un valor vacío para permitir a KMyMoney "
+"calcularlo para usted"
+
+#: dialogs/kfindtransactiondlg.cpp:230
+msgid ""
+"Warning: Filtering by Category will exclude all transfers from the results."
+msgstr ""
+"Advertencia: Filtrar por Categoría excluirá de los resultados todas las "
+"transferencias."
+
+#: dialogs/kfindtransactiondlg.cpp:239
+msgid "(None)"
+msgstr "(Nada)"
+
+#: dialogs/kfindtransactiondlg.cpp:241
+msgid "Current selections: "
+msgstr "Selecciones actuales:"
+
+#: dialogs/kfindtransactiondlg.cpp:716
+msgid "Found %1 matching transactions (D %2 / P %3 = %4)"
+msgstr "Se han encontrado %1 asientos coincidentes (D %2 / P %3 = %4)"
+
+#: dialogs/kfindtransactiondlg.cpp:719
+msgid "Found %1 matching transactions"
+msgstr "Se han encontrado %1 asientos coincidentes"
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "The institution name field is empty. Please enter the name."
+msgstr "No hay nombre de organización. Por favor, indique uno."
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "Adding New Institution"
+msgstr "Añadiendo nueva Organización"
+
+#: dialogs/kcsvprogressdlg.cpp:69
+msgid "C&lose"
+msgstr "Cer&rar"
+
+#: dialogs/kcsvprogressdlg.cpp:247
+msgid " of "
+msgstr " de "
+
+#: widgets/kmymoneypriceview.cpp:126
+msgid "Commodity"
+msgstr "Mercancía"
+
+#: widgets/kmymoneypriceview.cpp:130
+msgid "Source"
+msgstr "Origen"
+
+#: widgets/kmymoneypriceview.cpp:143
+msgid "Price Options"
+msgstr "Opciones de Precio"
+
+#: widgets/kmymoneypriceview.cpp:153
+msgid "Online Price Update..."
+msgstr "Actualizar Precio Online..."
+
+#: widgets/kmymoneycombo.cpp:472 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+msgid "From"
+msgstr "Cuenta deudora"
+
+#: widgets/transaction.cpp:668
+msgid "Transaction is missing a category assignment."
+msgstr "Le falta asignar una categoría al asiento."
+
+#: widgets/transaction.cpp:671
+msgid "The transaction has a missing assignment of <b>%1</b>."
+msgstr "Al asiento le falta asignar <b>%1</b>."
+
+#: widgets/transaction.cpp:874
+msgid "Sell"
+msgstr "Vender"
+
+#: widgets/transaction.cpp:876
+msgid "Buy"
+msgstr "Comprar"
+
+#: widgets/kmymoneycombo.cpp:520 widgets/transaction.cpp:879
+#: widgets/transaction.cpp:1447
+msgid "Dividend"
+msgstr "Dividendo"
+
+#: widgets/kmymoneycombo.cpp:518 widgets/transaction.cpp:881
+#: widgets/transaction.cpp:1453
+msgid "Yield"
+msgstr "Rendimiento"
+
+#: widgets/transaction.cpp:886 widgets/transaction.cpp:1473
+msgid "Activity"
+msgstr "Actividad"
+
+#: widgets/transaction.cpp:887
+msgid "Investment transaction"
+msgstr "Asiento de inversión"
+
+#: widgets/transaction.cpp:1021 widgets/transaction.cpp:1114
+#: widgets/transaction.cpp:1165
+msgid "*** UNASSIGNED ***"
+msgstr "*** NO ASIGNADO ***"
+
+#: widgets/kmymoneycombo.cpp:517 widgets/transaction.cpp:1435
+msgid "Add shares"
+msgstr "Añadir participaciones"
+
+#: widgets/kmymoneycombo.cpp:516 widgets/transaction.cpp:1438
+msgid "Remove shares"
+msgstr "Borrar participaciones"
+
+#: widgets/kmymoneycombo.cpp:522 widgets/transaction.cpp:1441
+msgid "Buy shares"
+msgstr "Comprar participaciones"
+
+#: widgets/kmymoneycombo.cpp:521 widgets/transaction.cpp:1444
+msgid "Sell shares"
+msgstr "Vender participaciones"
+
+#: widgets/transaction.cpp:1450
+msgid "Reinvest Dividend"
+msgstr "Reinvestir Dividendo"
+
+#: widgets/kmymoneycombo.cpp:515 widgets/transaction.cpp:1456
+msgid "Split shares"
+msgstr "Dividir participaciones"
+
+#: widgets/transaction.cpp:1515
+msgid "Ratio"
+msgstr "Fracción"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:241
+msgid "%1 Bills."
+msgstr "%1 Recibos."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:257
+msgid "%1 Deposits."
+msgstr "%1 Depósitos."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:273
+msgid "%1 Transfers."
+msgstr "%1 Transferencias."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:355
+msgid ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+msgstr "º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:57
+#: widgets/kmymoneyaccounttreeforecast.cpp:84
+msgid "Current"
+msgstr "Actual"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:72
+#: widgets/kmymoneyaccounttreeforecast.cpp:93
+msgid "Total variation"
+msgstr "Variación total"
+
+#: widgets/stdtransactionmatched.cpp:130
+msgid ""
+"KMyMoney has matched a downloaded transaction with a manually entered one "
+"(result above)"
+msgstr ""
+"KMyMoney ha conciliado un asiento descargado con uno ingresado manualmente "
+"(el resultado más arriba)"
+
+#: widgets/stdtransactionmatched.cpp:138
+msgid "Bank entry:"
+msgstr "Entrada del banco:"
+
+#: widgets/stdtransactionmatched.cpp:166
+msgid "Your entry:"
+msgstr "Su entrada:"
+
+#: widgets/kbudgetvalues.cpp:187
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a monthly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+"Ha ingresado valores presupuestarios utilizando una base diferente, lo que "
+"resultaría en un presupuesto mensual de <b>%1</b>. ¿Debería utilizarse este "
+"valor para llenar el presupuesto mensual?"
+
+#: widgets/kbudgetvalues.cpp:187 widgets/kbudgetvalues.cpp:206
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"_: Auto assignment (caption)\n"
+"Auto assignment"
+msgstr "Autoasignación"
+
+#: widgets/kbudgetvalues.cpp:206
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a yearly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+"Ha ingresado valores presupuestarios utilizando una base diferente, lo que "
+"resultaría en un presupuesto anual de <b>%1</b>. ¿Debería utilizarse este "
+"valor para llenar el presupuesto anual?"
+
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"You have entered budget values using a different base which would result in "
+"an individual monthly budget of <b>%1</b>. Should this value be used to fill "
+"the monthly budgets?"
+msgstr ""
+"Ha ingresado valores presupuestarios utilizando una base diferente, lo que "
+"resultaría en presupuestos mensuales individuales de <b>%1</b>. ¿Debería "
+"utilizarse este valor para llenar los presupuestos mensuales?"
+
+#: widgets/kmymoneybriefschedule.cpp:62
+msgid "Use this button to skip this transaction"
+msgstr "Use este botón para saltear este asiento"
+
+#: widgets/kmymoneybriefschedule.cpp:67
+msgid "Record this transaction into the register"
+msgstr "Ingresar este asiento en el registro"
+
+#: widgets/kmymoneybriefschedule.cpp:68
+msgid "Use this button to record this transaction"
+msgstr "Use este botón para ingresar este asiento"
+
+#: widgets/kmymoneybriefschedule.cpp:96
+msgid "%1 of %2"
+msgstr "%1 de %2"
+
+#: widgets/kmymoneybriefschedule.cpp:109
+msgid "Payment on %1 for %2 with %3 transactions remaining occuring %4."
+msgstr "Pago en %1 para %2 con %3 transacciones restantes ocurriendo %4."
+
+#: widgets/kmymoneybriefschedule.cpp:115
+msgid "Payment on %1 for %2 occuring %4."
+msgstr "Pago en %1 para %2 ocurriendo %4."
+
+#: widgets/kmymoneybriefschedule.cpp:136
+msgid "%1 days overdue (%2 occurences)."
+msgstr "%1 dias de retraso (%2 ocurrencias)."
+
+#: widgets/register.cpp:55
+msgid "Post date"
+msgstr "Fecha del asiento"
+
+#: widgets/register.cpp:56
+msgid "Date entered"
+msgstr "Fecha ingresada"
+
+#: widgets/register.cpp:60
+msgid "Entry order"
+msgstr "Orden de ingreso"
+
+#: widgets/register.cpp:63
+msgid "Reconcile state"
+msgstr "Estado de reconciliación"
+
+#: widgets/register.cpp:440
+msgid ""
+"_: Deposits onto account\n"
+"Deposits"
+msgstr "Depositos"
+
+#: widgets/register.cpp:442
+msgid ""
+"_: Payments towards credit card\n"
+"Payments"
+msgstr "Pagos"
+
+#: widgets/register.cpp:446
+msgid ""
+"_: Payments made from account\n"
+"Payments"
+msgstr "Débitos"
+
+#: widgets/register.cpp:448
+msgid ""
+"_: Payments made with credit card\n"
+"Charges"
+msgstr "Cargos"
+
+#: widgets/register.cpp:736
+msgid ""
+"_: Payment made from account\n"
+"Payment"
+msgstr "Débito"
+
+#: widgets/register.cpp:737
+msgid ""
+"_: Deposit into account\n"
+"Deposit"
+msgstr "Deposito"
+
+#: widgets/register.cpp:813
+msgid ""
+"_: Payment made with credit card\n"
+"Charge"
+msgstr "Cargo"
+
+#: widgets/register.cpp:814
+msgid ""
+"_: Payment towards credit card\n"
+"Payment"
+msgstr "Pago"
+
+#: widgets/register.cpp:818 widgets/register.cpp:824
+msgid ""
+"_: Decrease of asset/liability value\n"
+"Decrease"
+msgstr "Depreciación"
+
+#: widgets/register.cpp:819 widgets/register.cpp:823
+msgid ""
+"_: Increase of asset/liability value\n"
+"Increase"
+msgstr "Apreciación"
+
+#: widgets/register.cpp:2280
+msgid "Prior transactions possibly filtered"
+msgstr "Asientos anteriores posiblemente filtrados"
+
+#: widgets/register.cpp:2284
+msgid "Last reconciliation"
+msgstr "Última reconciliación"
+
+#: widgets/register.cpp:2291
+#, c-format
+msgid "Online Statement Balance: %1"
+msgstr "Extracto de banca online: %1"
+
+#: widgets/register.cpp:2295
+msgid "This year"
+msgstr "Este año"
+
+#: widgets/kmymoneycombo.cpp:674 widgets/register.cpp:2296
+msgid "Last month"
+msgstr "El mes pasado"
+
+#: widgets/register.cpp:2297
+msgid "This month"
+msgstr "Este mes"
+
+#: widgets/register.cpp:2298
+msgid "Last week"
+msgstr "La semana pasada"
+
+#: widgets/register.cpp:2299
+msgid "This week"
+msgstr "Esta semana"
+
+#: widgets/register.cpp:2300
+msgid "Yesterday"
+msgstr "Ayer"
+
+#: widgets/kmymoneycombo.cpp:666 widgets/register.cpp:2301
+msgid "Today"
+msgstr "Hoy"
+
+#: widgets/register.cpp:2302 widgets/register.cpp:2307
+msgid "Future transactions"
+msgstr "Asientos futuros"
+
+#: widgets/register.cpp:2303
+msgid "Next week"
+msgstr "La semana próxima"
+
+#: widgets/kmymoneycalendar.cpp:131 widgets/register.cpp:2304
+msgid "Next month"
+msgstr "El Mes que viene"
+
+#: widgets/kmymoneycombo.cpp:670 widgets/register.cpp:2315
+msgid "Current fiscal year"
+msgstr "Año fiscal actual"
+
+#: widgets/register.cpp:2316
+msgid "Previous fiscal year"
+msgstr "El año fiscal pasado"
+
+#: widgets/register.cpp:2317
+msgid "Next fiscal year"
+msgstr "El próximo año fiscal"
+
+#: widgets/register.cpp:2349
+msgid ""
+"_: Unknown payee\n"
+"Unknown"
+msgstr "Desconocido"
+
+#: widgets/register.cpp:2368
+msgid ""
+"_: Unknown category\n"
+"Unknown"
+msgstr "Desconocida"
+
+#: widgets/register.cpp:2387
+msgid ""
+"_: Unknown security\n"
+"Unknown"
+msgstr "Desconocido"
+
+#: widgets/klistviewsearchline.cpp:249
+msgid "Search Columns"
+msgstr "Buscar Columnas"
+
+#: widgets/klistviewsearchline.cpp:251
+msgid "All Visible Columns"
+msgstr "Todas las Columnas visibles"
+
+#: widgets/klistviewsearchline.cpp:266
+msgid ""
+"_: Column number %1\n"
+"Column No. %1"
+msgstr "Columna N° %1"
+
+#: widgets/klistviewsearchline.cpp:461 widgets/registersearchline.cpp:286
+msgid "S&earch:"
+msgstr "Buscar:"
+
+#: widgets/kmymoneyaccountselector.cpp:110
+#: widgets/kmymoneyaccountselector.cpp:371
+msgid "Income categories"
+msgstr "Categorías de Ingresos"
+
+#: widgets/kmymoneyaccountselector.cpp:349
+#: widgets/kmymoneyaccountselector.cpp:350
+msgid "Favorites"
+msgstr "Favoritos"
+
+#: widgets/kmymoneyaccountselector.cpp:357
+msgid "Asset accounts"
+msgstr "Cuentas de activos"
+
+#: widgets/kmymoneyaccountselector.cpp:364
+msgid "Liability accounts"
+msgstr "Cuentas de pasivos"
+
+#: widgets/kmymoneyaccountselector.cpp:381
+msgid "Expense categories"
+msgstr "Categorías de Gastos"
+
+#: widgets/kmymoneyaccountselector.cpp:391
+msgid "Equity accounts"
+msgstr "Cuentas de patrimonio"
+
+#: widgets/kmymoneyaccounttreebase.cpp:120
+msgid "Total Balance"
+msgstr "Saldo Total"
+
+#: widgets/kmymoneyaccounttreebase.cpp:124
+msgid "Total Value"
+msgstr "Valor Neto"
+
+#: widgets/registersearchline.cpp:75
+msgid ""
+"_: label for status combo\n"
+"Stat&us"
+msgstr "Estado"
+
+#: widgets/registersearchline.cpp:79
+msgid "Any status"
+msgstr "Todos los estados"
+
+#: widgets/registersearchline.cpp:80
+msgid "Imported"
+msgstr "Importado"
+
+#: widgets/registersearchline.cpp:81
+msgid "Matched"
+msgstr "Conciliado"
+
+#: widgets/registersearchline.cpp:82
+msgid "Erroneous"
+msgstr "Erróneo"
+
+#: widgets/registersearchline.cpp:83
+msgid "Not marked"
+msgstr "No marcado"
+
+#: widgets/kmymoneyaccounttree.cpp:54
+msgid ""
+"_: Column heading for category in tax report\n"
+"Tax"
+msgstr "Impuestos"
+
+#: widgets/kmymoneyaccounttree.cpp:58
+msgid ""
+"_: Column heading for VAT category\n"
+"VAT"
+msgstr "IVA"
+
+#: widgets/kmymoneywizard.cpp:101
+msgid "Continue with next page"
+msgstr "Continuar con la siguiente página"
+
+#: widgets/kmymoneywizard.cpp:103
+msgid "Finish wizard"
+msgstr "Finalizar el asistente"
+
+#: widgets/kmymoneywizard.cpp:121
+msgid "&Back"
+msgstr "Atrás"
+
+#: widgets/kmymoneywizard.cpp:122
+msgid "&Next"
+msgstr "Siguie&nte"
+
+#: widgets/kmymoneywizard.cpp:123
+msgid "&Finish"
+msgstr "&Finalizar"
+
+#: widgets/kmymoneywizard.cpp:274
+msgid "Step %1 of %2"
+msgstr "Paso %1 de %2"
+
+#: widgets/kmymoneydateinput.cpp:235
+msgid ""
+"_: Enter todays date into date input widget\n"
+"T"
+msgstr "H"
+
+#: widgets/transactionform.cpp:302
+msgid "&Deposit"
+msgstr "&Depósito"
+
+#: widgets/transactionform.cpp:304 widgets/transactionform.cpp:313
+#: widgets/transactionform.cpp:323 widgets/transactionform.cpp:333
+msgid "&Transfer"
+msgstr "&Transferencia"
+
+#: widgets/transactionform.cpp:306
+msgid "&Withdrawal"
+msgstr "&Retirada"
+
+#: widgets/transactionform.cpp:311
+msgid "&Payment"
+msgstr "&Pago"
+
+#: widgets/transactionform.cpp:315
+msgid "&Charge"
+msgstr "&Cargo"
+
+#: widgets/transactionform.cpp:321 widgets/transactionform.cpp:335
+msgid "&Decrease"
+msgstr "&Disminuir"
+
+#: widgets/transactionform.cpp:325 widgets/transactionform.cpp:331
+msgid "&Increase"
+msgstr "&Aumentar"
+
+#: widgets/kmymoneyscheduledcalendar.cpp:42
+msgid "Select Schedules"
+msgstr "Escoger Programaciones"
+
+#: widgets/kmymoneycalendar.cpp:108
+msgid "Select Style"
+msgstr "Escoger Estilo"
+
+#: widgets/kmymoneycalendar.cpp:128
+msgid "Choose Style"
+msgstr "Escoja un Estilo"
+
+#: widgets/kmymoneycalendar.cpp:129
+msgid "Next year"
+msgstr "El Año que viene"
+
+#: widgets/kmymoneycalendar.cpp:130
+msgid "Previous year"
+msgstr "El Año pasado"
+
+#: widgets/kmymoneycalendar.cpp:132
+msgid "Previous month"
+msgstr "El Mes pasado"
+
+#: widgets/kmymoneycalendar.cpp:133
+msgid "Select a week"
+msgstr "Escoger una semana"
+
+#: widgets/kmymoneycalendar.cpp:134
+msgid "Select a month"
+msgstr "Escoger un mes"
+
+#: widgets/kmymoneycalendar.cpp:135
+msgid "Select a year"
+msgstr "Escoger un año"
+
+#: widgets/kmymoneycalendar.cpp:249
+msgid "Week XX"
+msgstr "Semana XX"
+
+#: widgets/kmymoneycalendar.cpp:264 widgets/kmymoneycalendar.cpp:300
+#, c-format
+msgid "Week %1"
+msgstr "Semana %1"
+
+#: widgets/rc.cpp:1
+msgid "Account Types"
+msgstr "Tipos de Cuenta"
+
+#: widgets/rc.cpp:3
+msgid "Detailed description"
+msgstr "Descripción detallada"
+
+#: widgets/rc.cpp:18
+msgid "Period"
+msgstr "Periodo"
+
+#: widgets/rc.cpp:21
+msgid "Individual"
+msgstr "Individual"
+
+#: widgets/rc.cpp:23
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Acces to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>Recovery encryption</i> group is only accessible, if the necessary "
+"key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is "
+"found."
+msgstr ""
+"Esta página le permite ajustar los parámetros para guardar sus datos de "
+"<b>KMyMoney</b> cifrados mediante <b>GPG</b>.<p>\n"
+"No se permite acceder a la configuración si no se encuentra <b>GPG</b> en su "
+"sistema. En este caso, asegúrese de que <b>GPG</b> trabaja correctamente "
+"para el usuario actual.<p>\n"
+"El grupo <i>Recuperación de cifrado</i> solamente estará accesible de "
+"encontrarse la llave para <b>kmymoney-recover@users.sourceforge.net</b> con "
+"id 0x8AFDDC8E"
+
+#: widgets/rc.cpp:26
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading <i>0x</i>."
+msgstr ""
+"Introduza el id de la llave que desea usar para cifrar los datos. Esto puede "
+"ser o un e-mail o el identificador hexadecimal del id. En este caso no "
+"olvide el <i>0x</i> inicial."
+
+#: widgets/rc.cpp:27
+msgid "User ID"
+msgstr "ID de usuário"
+
+#: widgets/rc.cpp:29
+msgid "Recovery encryption"
+msgstr "Recuperación de cifrado"
+
+#: widgets/rc.cpp:30
+msgid "Also encrypt with kmymoney-recover key"
+msgstr "Cifrar también con la llave kmymoney-recover"
+
+#: widgets/rc.cpp:32
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out."
+msgstr ""
+"Puede cifrar sus datos también con la llave de recuperación de KMyMoney. "
+"Solo los desarrolladores principales de KMyMoney poseen la llave privada "
+"imprescindible para descifrar tales datos.<p>\n"
+"\n"
+"Este mecanismo sirve por si usted pierde su llave y no puede acceder a los "
+"datos. Activando esta opción, los desarrolladores de KMyMoney podrán "
+"descifrar los datos y devolverselos en un formato legible. Se le advierte "
+"que tendrá que responder unas preguntas detalladas acerca del conteniido de "
+"sus datos antes de poder enviarlos."
+
+#: widgets/rc.cpp:51
+msgid "PriceInfo"
+msgstr "PriceInfo"
+
+#: widgets/rc.cpp:52
+msgid "Report Tab"
+msgstr "Pestaña de Informe"
+
+#: widgets/rc.cpp:53
+msgid "<p>On this tab, you set the basic properties of this report.</p>"
+msgstr ""
+"<p>En esta pestaña, configura las propriedades básicas de este informe.</p>"
+
+#: widgets/rc.cpp:54
+msgid "Report Name"
+msgstr "Nombre del Informe"
+
+#: widgets/rc.cpp:55
+msgid "<p>Choose a name for this report.</p>"
+msgstr "<p>Elija un nombre para este informe.</p>"
+
+#: widgets/rc.cpp:57
+msgid "<p>Enter a comment to help you remember the details of this report.</p>"
+msgstr ""
+"<p>Introduzca un comentario que le ayude a recordar los detalles de este "
+"informe.</p>"
+
+#: widgets/rc.cpp:58
+msgid "Convert values to base currency"
+msgstr "Convertir valores a divisa báse"
+
+#: widgets/rc.cpp:59
+msgid ""
+"_: Convert 'em!!\n"
+"<p>Select this option to convert all values in the report to your base "
+"currency.</p><p>Leave it unchecked if you'd like to see values in their "
+"original currency.</p><p>If currencies are not converted, then subtotals "
+"will not be shown.</p>"
+msgstr ""
+"<p>Elija esta opción para convertir todos los valores del informe a su "
+"divisa base.</p><p>Dejela sin marcar si desea ver los valores en la divisa "
+"original.</p><p>Si no se convierten las divisas, no se mostrarán los "
+"subtotales.</p>"
+
+#: widgets/rc.cpp:60
+msgid "Mark as a favorite report"
+msgstr "Marcar como informe preferido"
+
+#: widgets/rc.cpp:61
+msgid ""
+"<p>Select this option to notate this report as one of your favorites.</"
+"p><p>All your favorite reports are grouped in one place on the report list "
+"for easy access.</p>"
+msgstr ""
+"<p>Elija esta opción para indicar que este informe es uno de sus predilectos."
+"</p><p>Sus informes favoritos son agrupados en el listado de informes para "
+"acceder fácilmente a ellos.</p>"
+
+#: widgets/rc.cpp:62 widgets/rc.cpp:88
+msgid "Rows/Columns Tab"
+msgstr "Pestaña Filas/Columnas"
+
+#: widgets/rc.cpp:63 widgets/rc.cpp:89
+msgid ""
+"<p>On this tab, you configure how you'd like the rows and columns to be "
+"selected and organized.</p>"
+msgstr ""
+"<p>En esta pestaña, puede configurar como desea escojer y organizar las "
+"filas y columnas.</p>"
+
+#: widgets/rc.cpp:69 widgets/rc.cpp:81
+msgid ""
+"<p>Choose what kind of accounts to display as the rows of this report.</p>"
+msgstr "<p>Elija que clase de cuentas mostrar como filas de este informe.</p>"
+
+#: widgets/rc.cpp:71
+msgid "Columns"
+msgstr "Columnas"
+
+#: widgets/rc.cpp:75
+msgid "Bi-Monthly"
+msgstr "Bimestral"
+
+#: widgets/rc.cpp:78
+msgid "<p>Choose how large of a time period each column should encompass</p>"
+msgstr "<p>Elija que periodo de tiempo debe abarcar cada columna</p>"
+
+#: widgets/rc.cpp:79
+msgid "Income & Expenses"
+msgstr "Ingresos y Gastos"
+
+#: widgets/rc.cpp:80
+msgid "Assets & Liabilities"
+msgstr "Activos y Pasivos"
+
+#: widgets/rc.cpp:82
+msgid "Rows"
+msgstr "Filas"
+
+#: widgets/rc.cpp:83
+msgid "Show totals column"
+msgstr "Mostrar columnas de total"
+
+#: widgets/rc.cpp:84
+msgid "Average days"
+msgstr "Días de promedio"
+
+#: widgets/rc.cpp:85
+msgid "Include scheduled transactions"
+msgstr "Incluir asientos planificados"
+
+#: widgets/rc.cpp:86
+msgid "Include transfers"
+msgstr "Incluir transferencias"
+
+#: widgets/rc.cpp:87
+msgid "Include unused accounts/categories"
+msgstr "Incluir cuentas/categorías no utilizadas"
+
+#: widgets/rc.cpp:90
+msgid "Organize by:"
+msgstr "Organizar por:"
+
+#: widgets/rc.cpp:92
+msgid "Top Categories"
+msgstr "Categoría Madre"
+
+#: widgets/rc.cpp:95
+msgid "Top Accounts"
+msgstr "Cuentas madre"
+
+#: widgets/rc.cpp:98
+msgid "<p>Choose how to group the transactions in this report</p>"
+msgstr "<p>Escoje como agrupar los asientos en este informe</p>"
+
+#: widgets/rc.cpp:99
+msgid "Show Columns"
+msgstr "Mostrar Columnas"
+
+#: widgets/rc.cpp:100
+msgid ""
+"<p>Choose which columns should be shown in the report.</p><p>The date and "
+"transaction amount are always shown.</p>"
+msgstr ""
+"<p>Escojer qué columnas deben ser mostradas en el informe.</p><p>La fecha e "
+"importe del asiento siempre son mostradas.</p>"
+
+#: widgets/rc.cpp:102
+msgid "<p>Select this option to show the Memo column</p>"
+msgstr "<p>Elija esta opción para mostrar la columna Concepto</p>"
+
+#: widgets/rc.cpp:104
+msgid "<p>Select this option to show the Shares column for investments</p>"
+msgstr ""
+"<p><p>Elija esta opción para mostrar la columna Participaciones en las "
+"inversiones</p>"
+
+#: widgets/rc.cpp:106
+msgid "<p>Select this option to show the Price column for investments</p>"
+msgstr ""
+"<p>Elija esta opción para mostrar la columna Precio en las inversiones</p> "
+
+#: widgets/rc.cpp:108
+msgid "<p>Select this option to show the Reconciled column</p>"
+msgstr "<p>Elija esta opción para mostrar la columna Reconciliado</p>"
+
+#: widgets/rc.cpp:110
+msgid "<p>Select this option to show the Account column</p>"
+msgstr "<p>Elija esta opción para mostrar la columna Cuenta</p>"
+
+#: widgets/rc.cpp:112
+msgid "<p>Select this option to show the Number column</p>"
+msgstr "<p>Elija esta opción para mostrar la columna Número</p>"
+
+#: widgets/rc.cpp:114
+msgid "<p>Select this option to show the Payee column</p>"
+msgstr "<p>Elija esta opción para mostrar la columna Beneficiario</p>"
+
+#: widgets/rc.cpp:116
+msgid "<p>Select this option to show the Category column</p>"
+msgstr "<p>Elija esta opción para mostrar la columna Categoría</p>"
+
+#: widgets/rc.cpp:118
+msgid "<p>Select this option to show the Action column</p>"
+msgstr "<p>Elija esta opción para mostrar la columna Acción</p>"
+
+#: widgets/rc.cpp:120
+msgid "<p>Select this option to show the Running balance column</p>"
+msgstr "<p>Elija esta opción para mostrar la columna de saldo corriente</p>"
+
+#: widgets/rc.cpp:121
+msgid "Include only Loan accounts"
+msgstr "Incluir solamente cuentas de Préstamo"
+
+#: widgets/rc.cpp:122
+msgid "Include only Investment accounts"
+msgstr "Incluir solamente cuentas de Inversión"
+
+#: widgets/rc.cpp:123 widgets/rc.cpp:127
+msgid ""
+"<p>Check this box to include only those categories which have been marked to "
+"\"Include on Tax Reports\"</p>"
+msgstr ""
+"<p>Marque esta casilla para incluir solo las categorias que fuesen marcadas "
+"como \"Incluir en informes de Impuestos\"</p>"
+
+#: widgets/rc.cpp:124
+msgid "Hide Split Transaction Details"
+msgstr "Ocultar detalles de los asientos con múltiples partidas"
+
+#: widgets/rc.cpp:125
+msgid ""
+"Do not display the individual transactions that make up a split transaction"
+msgstr ""
+"No mostrar las partidas individuales de un asiento con múltiples partidas"
+
+#: widgets/rc.cpp:126
+msgid "Include only Tax categories"
+msgstr "Incluir solamente categorias de Impuestos"
+
+#: widgets/rc.cpp:128
+msgid "Chart Tab"
+msgstr "Solapa de Gráfico"
+
+#: widgets/rc.cpp:129
+msgid "<p>On this tab, you configure the chart drawn forthis report.</p>"
+msgstr "<p>En esta pestaña, puede configurar el gráfico de este informe.</p>"
+
+#: widgets/rc.cpp:130
+msgid "Chart Type"
+msgstr "Tipo de Gráfico"
+
+#: widgets/rc.cpp:131
+msgid "<p>Select what form you would like the chart to be drawn as.</p>"
+msgstr "<p>Escoja qué forma le gustaría que tenga el gráfico.</p>"
+
+#: widgets/rc.cpp:132
+msgid "Line"
+msgstr "Líneas"
+
+#: widgets/rc.cpp:133
+msgid "Bar"
+msgstr "Barras"
+
+#: widgets/rc.cpp:134
+msgid "Stacked Bar"
+msgstr "Barras Acumuladas"
+
+#: widgets/rc.cpp:135
+msgid "Pie"
+msgstr "Torta"
+
+#: widgets/rc.cpp:136
+msgid "Ring"
+msgstr "Anillo"
+
+#: widgets/rc.cpp:137
+msgid "Show grid lines"
+msgstr "Mostrar lineas de referencia"
+
+#: widgets/rc.cpp:138
+msgid ""
+"<p>Select this option to show horizontal and vertical grid lines on the "
+"chart.</p>"
+msgstr ""
+"<p>Elija esta opción para mostrar las líneas horizontales y verticales en el "
+"gráfico.</p> "
+
+#: widgets/rc.cpp:139
+msgid "Draw values on chart"
+msgstr "Dibujar valores en el gráfico"
+
+#: widgets/rc.cpp:140
+msgid ""
+"<p>Select this option to draw the numeric values for data points next to "
+"their plot location.</p>"
+msgstr ""
+"<p>Elija esta opción para mostrar los valores numéricos de los puntos de "
+"datos junto a su ubicación en el gráfico.</p> "
+
+#: widgets/rc.cpp:141
+msgid "Show as chart by default"
+msgstr "Mostrar como gráfico al abrir"
+
+#: widgets/rc.cpp:142
+msgid ""
+"<p>Select this option to cause the report to be shown as a chart when you "
+"first open the report. Otherwise, it will come up as a text report.</p>"
+msgstr ""
+"<p>Elija esta opción para mostrar el informe como gráfico cuando abre el "
+"informe por primera vez. Si no, se mostrará como un informe de texto.</p>"
+
+#: widgets/rc.cpp:143
+msgid "Line width"
+msgstr "Ancho de línea"
+
+#: widgets/rc.cpp:144
+msgid "<p>Select what width should be used to draw the line on the chart</p>"
+msgstr ""
+"<p>Seleccione el ancho a utilizar para dibujar las líneas en el gráfico</p> "
+
+#: widgets/rc.cpp:145
+msgid "ReportControl"
+msgstr "ReportControl"
+
+#: widgets/rc.cpp:149
+msgid "Configure this report"
+msgstr "Configurar este informe"
+
+#: widgets/rc.cpp:151
+msgid "Create a new report based on this one"
+msgstr "Crea un nuevo informe basado en este"
+
+#: widgets/rc.cpp:153
+msgid "Copy this report to the clipboard"
+msgstr "Copia este informe al portapapeles"
+
+#: widgets/rc.cpp:155
+msgid "Export this report as an HTML or CSV file"
+msgstr "Exporta este informe en formato HTML o CSV"
+
+#: widgets/rc.cpp:157
+msgid "Permanently delete this report"
+msgstr "Elimina permanentemente este informe"
+
+#: widgets/rc.cpp:159
+msgid "Close this window"
+msgstr "Cerrar esta ventana"
+
+#: widgets/rc.cpp:162
+msgid "n of n"
+msgstr "n de n"
+
+#: widgets/rc.cpp:166
+msgid "Account:"
+msgstr "Cuenta:"
+
+#: widgets/rc.cpp:168
+msgid "Enter..."
+msgstr "Introducir..."
+
+#: widgets/rc.cpp:171
+msgid "TransactionSortOptionDecl"
+msgstr "Opciones de asiento"
+
+#: widgets/rc.cpp:173
+msgid "Sort order"
+msgstr "Ordenamiento"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Sunday\n"
+"Sun"
+msgstr "Dom"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Saturday\n"
+"Sat"
+msgstr "Sab"
+
+#: widgets/kmymoneydatetbl.cpp:171 widgets/kmymoneydatetbl.cpp:178
+msgid "Week %1 for year %2."
+msgstr "Semana %1 del año %2."
+
+#: widgets/kmymoneycombo.cpp:417
+msgid "ATM"
+msgstr "ATM"
+
+#: widgets/kmymoneycombo.cpp:418
+msgid "Withdrawal"
+msgstr "Retirada"
+
+#: widgets/kmymoneycombo.cpp:421
+msgid "Cheque"
+msgstr "Cheque"
+
+#: widgets/kmymoneycombo.cpp:469
+msgid ""
+"_: Activity for expense categories\n"
+"Paid"
+msgstr "Pagado"
+
+#: widgets/kmymoneycombo.cpp:470
+msgid ""
+"_: Activity for income categories\n"
+"Received"
+msgstr "Recibido"
+
+#: widgets/kmymoneycombo.cpp:519
+msgid "Reinvest dividend"
+msgstr "Reinvertir dividendo"
+
+#: widgets/kmymoneycombo.cpp:664
+msgid "All dates"
+msgstr "Todas las fechas"
+
+#: widgets/kmymoneycombo.cpp:665
+msgid "As of today"
+msgstr "Al día de hoy"
+
+#: widgets/kmymoneycombo.cpp:667
+msgid "Current month"
+msgstr "Este mes"
+
+#: widgets/kmymoneycombo.cpp:668
+msgid "Current quarter"
+msgstr "Este trimestre"
+
+#: widgets/kmymoneycombo.cpp:669
+msgid "Current year"
+msgstr "Este año"
+
+#: widgets/kmymoneycombo.cpp:671
+msgid "Month to date"
+msgstr "Lo que va de mes"
+
+#: widgets/kmymoneycombo.cpp:672
+msgid "Year to date"
+msgstr "Lo que va del año"
+
+#: widgets/kmymoneycombo.cpp:673
+msgid "Year to month"
+msgstr "Los meses que van del año"
+
+#: widgets/kmymoneycombo.cpp:675
+msgid "Last year"
+msgstr "El año pasado"
+
+#: widgets/kmymoneycombo.cpp:676
+msgid "Last fiscal year"
+msgstr "El año fiscal pasado"
+
+#: widgets/kmymoneycombo.cpp:677
+msgid "Last 7 days"
+msgstr "Los últimos 7 días"
+
+#: widgets/kmymoneycombo.cpp:678
+msgid "Last 30 days"
+msgstr "Los últimos 30 dias"
+
+#: widgets/kmymoneycombo.cpp:679
+msgid "Last 3 months"
+msgstr "Los últimos 3 meses"
+
+#: widgets/kmymoneycombo.cpp:680
+msgid "Last quarter"
+msgstr "El trimestre pasado"
+
+#: widgets/kmymoneycombo.cpp:681
+msgid "Last 6 months"
+msgstr "Los últimos 6 meses"
+
+#: widgets/kmymoneycombo.cpp:682
+msgid "Last 11 months"
+msgstr "Los últimos 11 meses"
+
+#: widgets/kmymoneycombo.cpp:683
+msgid "Last 12 months"
+msgstr "Los últimos 12 meses"
+
+#: widgets/kmymoneycombo.cpp:684
+msgid "Next 7 days"
+msgstr "Los próximos 7 días"
+
+#: widgets/kmymoneycombo.cpp:685
+msgid "Next 30 days"
+msgstr "Los próximos 30 dias"
+
+#: widgets/kmymoneycombo.cpp:686
+msgid "Next 3 months"
+msgstr "Los próximos 3 meses"
+
+#: widgets/kmymoneycombo.cpp:687
+msgid "Next quarter"
+msgstr "El próximo trimestre"
+
+#: widgets/kmymoneycombo.cpp:688
+msgid "Next 6 months"
+msgstr "Los próximos 6 meses"
+
+#: widgets/kmymoneycombo.cpp:689
+msgid "Next 12 months"
+msgstr "Los próximos 12 meses"
+
+#: widgets/kmymoneycombo.cpp:690
+msgid "Last 3 months to next 3 months"
+msgstr "Los últimos 3 meses a los próximos 3 meses"
+
+#: widgets/kmymoneycombo.cpp:691
+msgid "User defined"
+msgstr "Definido por el usuario"
+
+#~ msgid "Reset"
+#~ msgstr "Reiniciar"
+
+#~ msgid "No plugins loaded"
+#~ msgstr "No se cargaron plugins"
+
+#~ msgid "Create schedule..."
+#~ msgstr "Crear asiento programado..."
+
+#~ msgid "New schedule..."
+#~ msgstr "Nuevo programa..."
+
+#~ msgid "Edit schedule..."
+#~ msgstr "Editar programa..."
+
+#~ msgid "Delete schedule..."
+#~ msgstr "Borrar programa..."
+
+#~ msgid "Duplicate schedule"
+#~ msgstr "Duplicar programa"
+
+#~ msgid "Enter schedule..."
+#~ msgstr "Ingresar asiento programado..."
+
+#~ msgid "Skip schedule..."
+#~ msgstr "Saltear ocurrencia..."
+
+#~ msgid "Adjusting schedules..."
+#~ msgstr "Ajustando planificaciones..."
+
+#~ msgid "Add schedule"
+#~ msgstr "Agregar planificación"
+
+#~ msgid "Unable to enter transaction for schedule '%1'"
+#~ msgstr "No ha sido posible ingresar el asiento para la planificación '%1'"
+
+#~ msgid "Loaded"
+#~ msgstr "Cargado"
+
+#~ msgid ""
+#~ "_: Plugin interface description\n"
+#~ "Online access"
+#~ msgstr "Acceso online"
+
+#~ msgid ""
+#~ "_: Plugin interface description\n"
+#~ "File import"
+#~ msgstr "Importar archivo"
+
+#~ msgid "not loaded: %1"
+#~ msgstr "No cargado: %1"
+
+#~ msgid "Schedule options"
+#~ msgstr "Opciones de planificaciones"
+
+#~ msgid "New Schedule"
+#~ msgstr "Nuevo Programa de Transacciones"
+
+#~ msgid "Edit Schedule"
+#~ msgstr "Editar Planificación"
+
+#~ msgid "Search transactions containing the following text"
+#~ msgstr "Buscar asientos que contengan el siguiente texto"
+
+#~ msgid "Search"
+#~ msgstr "Buscar"
+
+#~ msgid "&Search"
+#~ msgstr "&Buscar"
+
+#~ msgid "Start the search"
+#~ msgstr "Comenzar la búsqueda"
+
+#~ msgid "Takes the current criteria and searches for matching transactions."
+#~ msgstr "Toma el critério actual y busca asientos que se ajusten a el."
+
+#~ msgid "Reset all settings"
+#~ msgstr "Limpiar todo"
+
+#~ msgid ""
+#~ "Use this to reset all settings to the state they were when the dialog was "
+#~ "opened."
+#~ msgstr ""
+#~ "Use esto para que todas las opciones vuelvan al estado que tenían al "
+#~ "iniciar el diálogo."
+
+#~ msgid "Use this button to close the window"
+#~ msgstr "Use este botón para cerrar la ventana"
diff --git a/po/es_AR.po b/po/es_AR.po
new file mode 100644
index 0000000..1e86d64
--- /dev/null
+++ b/po/es_AR.po
@@ -0,0 +1,13745 @@
+# translation of es_AR.po to Español (Argentina)
+# This file is put in the public domain.
+#
+# Mvillarino <mvillarino@gmail.com>, 2005.
+# Alvaro Soliverez <asoliverez@ciudad.com.ar>, 2007.
+# Alvaro Soliverez <asoliverez@gmail.com>, 2007, 2008, 2009.
+# Sergio Minini <sergiom99@hotmail.com>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: es_AR\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-25 19:04+0200\n"
+"PO-Revision-Date: 2009-06-26 07:45-0300\n"
+"Last-Translator: Alvaro Soliverez <asoliverez@gmail.com>\n"
+"Language-Team: Spanish <kde-i18n-doc@kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: wizards/wizardpages/rc.cpp:1
+msgid ""
+"Select groups of accounts that correspond to the ways that you will use "
+"KMyMoney. Each group you select will cause several accounts and categories "
+"to be created. Select the groups that are relevant to you. You can always "
+"create additional accounts manually later."
+msgstr ""
+"Seleccione grupos de cuentas que corresponden a la manera en que va a "
+"utilizar KMyMoney. Cada grupo que seleccione creará varias cuentas y "
+"categorías. Seleccione los grupos que le sean relevantes. Siempre puede "
+"crear cuentas adicionales luego."
+
+#: wizards/wizardpages/rc.cpp:2
+msgid ""
+"<p>KMyMoney supports multiple currencies, nevertheless one of them will be "
+"used as your base currency. The base currency is used as default for new "
+"accounts and reports. Please select the base currency from the following "
+"list."
+msgstr ""
+"<p>KMyMoney soporta múltiples divisas. Sin embargo, una de ellas será "
+"utilizadacomo su divisa base. La divisa base se utiliza como predeterminada "
+"para las cuentas nuevas y los reportes. Por favor seleccione la divisa base "
+"de la siguiente lista."
+
+#: dialogs/kequitypriceupdatedlg.cpp:71 dialogs/rc.cpp:399 dialogs/rc.cpp:485
+#: dialogs/rc.cpp:724 dialogs/settings/rc.cpp:108 reports/listtable.cpp:226
+#: views/kinvestmentview.cpp:71 views/kpayeesview.cpp:351 views/rc.cpp:13
+#: widgets/rc.cpp:5 widgets/rc.cpp:34
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1599
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1629
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1673
+#: wizards/wizardpages/rc.cpp:3
+msgid "Name"
+msgstr "Nombre"
+
+#: wizards/wizardpages/rc.cpp:4
+msgid "ISO Code"
+msgstr "Código ISO"
+
+#: dialogs/kequitypriceupdatedlg.cpp:69 dialogs/kequitypriceupdatedlg.cpp:70
+#: dialogs/rc.cpp:71 dialogs/rc.cpp:725 dialogs/settings/rc.cpp:112
+#: views/kinvestmentview.cpp:72 widgets/rc.cpp:37 wizards/wizardpages/rc.cpp:5
+msgid "Symbol"
+msgstr "Símbolo"
+
+#: wizards/wizardpages/rc.cpp:6
+msgid ""
+"<p>Use the fields below to enter some information about yourself.</p>\n"
+"\n"
+"<p>All information is optional and only used to personalize your KMyMoney "
+"file.</p>"
+msgstr ""
+"<p>Utilice los campos más abajo para introducir su información personal.</"
+"p>\n"
+"\n"
+"<p>Toda la información es opcional y sirve para personalizar su archivo de "
+"KMyMoney.</p>"
+
+#: dialogs/rc.cpp:425 wizards/newuserwizard/rc.cpp:27
+#: wizards/wizardpages/rc.cpp:7
+msgid "Town:"
+msgstr "Ciudad:"
+
+#: dialogs/rc.cpp:420 wizards/newuserwizard/rc.cpp:22
+#: wizards/wizardpages/rc.cpp:8
+msgid "County/State:"
+msgstr "Provincia:"
+
+#: dialogs/rc.cpp:391 dialogs/rc.cpp:421 wizards/newuserwizard/rc.cpp:23
+#: wizards/wizardpages/rc.cpp:9
+msgid "Street:"
+msgstr "Calle:"
+
+#: dialogs/rc.cpp:422 wizards/newuserwizard/rc.cpp:24
+#: wizards/wizardpages/rc.cpp:10
+msgid "Email:"
+msgstr "Email:"
+
+#: dialogs/rc.cpp:424 wizards/newuserwizard/rc.cpp:26
+#: wizards/wizardpages/rc.cpp:11
+msgid "Telephone:"
+msgstr "Teléfono:"
+
+#: dialogs/rc.cpp:423 wizards/newuserwizard/rc.cpp:25
+#: wizards/wizardpages/rc.cpp:12
+msgid "Your name:"
+msgstr "Su Nombre:"
+
+#: dialogs/rc.cpp:427 wizards/newuserwizard/rc.cpp:29
+#: wizards/wizardpages/rc.cpp:13
+msgid "Load from Addressbook"
+msgstr "Cargar desde la Libreta de Direcciones"
+
+#: dialogs/rc.cpp:392 dialogs/rc.cpp:426 views/rc.cpp:68
+#: wizards/wizardpages/rc.cpp:14
+msgid "Postal Code:"
+msgstr "Código Postal:"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:82
+msgid "KMyMoney New Account Setup"
+msgstr "Configuración de Nueva Cuenta de KMyMoney"
+
+#: dialogs/rc.cpp:360 dialogs/rc.cpp:361 reports/listtable.cpp:230
+#: wizards/newaccountwizard/knewaccountwizard.cpp:83
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1616
+#: wizards/newaccountwizard/rc.cpp:61
+msgid "Institution"
+msgstr "Organización"
+
+#: dialogs/investactivities.cpp:198 dialogs/investactivities.cpp:286
+#: dialogs/investactivities.cpp:367 dialogs/kfindtransactiondlg.cpp:181
+#: dialogs/rc.cpp:139 dialogs/rc.cpp:192 dialogs/rc.cpp:207
+#: dialogs/transactioneditor.cpp:734 reports/listtable.cpp:201
+#: reports/pivottable.cpp:1336 reports/pivottable.cpp:1586
+#: views/kforecastview.cpp:393 views/kgloballedgerview.cpp:175
+#: views/khomeview.cpp:418 views/khomeview.cpp:491 views/khomeview.cpp:525
+#: views/khomeview.cpp:764 views/khomeview.cpp:967 views/khomeview.cpp:1437
+#: views/kscheduledview.cpp:71 views/rc.cpp:17 views/rc.cpp:44
+#: widgets/kmymoneyaccounttreebase.cpp:58
+#: widgets/kmymoneyaccounttreeforecast.cpp:41 widgets/rc.cpp:109
+#: widgets/register.cpp:566 widgets/transaction.cpp:978
+#: widgets/transaction.cpp:1535
+#: wizards/newaccountwizard/knewaccountwizard.cpp:84
+msgid "Account"
+msgstr "Cuenta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:85
+msgid "Broker"
+msgstr "Corredor de Bolsa"
+
+#: dialogs/kfindtransactiondlg.cpp:225 dialogs/rc.cpp:70 dialogs/rc.cpp:104
+#: dialogs/rc.cpp:159 dialogs/rc.cpp:223 dialogs/rc.cpp:246 dialogs/rc.cpp:751
+#: dialogs/settings/rc.cpp:109 widgets/rc.cpp:35 widgets/register.cpp:568
+#: wizards/newaccountwizard/knewaccountwizard.cpp:86
+msgid "Details"
+msgstr "Detalles"
+
+#: dialogs/knewloanwizard.cpp:636 dialogs/rc.cpp:231 dialogs/rc.cpp:608
+#: kmymoneyutils.cpp:191 views/khomeview.cpp:399
+#: wizards/newaccountwizard/knewaccountwizard.cpp:87
+#: wizards/newaccountwizard/knewaccountwizard.cpp:880
+msgid "Payments"
+msgstr "Pagos"
+
+#: dialogs/investactivities.cpp:195 dialogs/investactivities.cpp:283
+#: dialogs/investactivities.cpp:422 dialogs/investtransactioneditor.cpp:217
+#: reports/listtable.cpp:221 widgets/transaction.cpp:1565
+#: wizards/newaccountwizard/knewaccountwizard.cpp:88
+msgid "Fees"
+msgstr "Cargos"
+
+#: dialogs/rc.cpp:624 views/khomeview.cpp:415 views/khomeview.cpp:488
+#: views/khomeview.cpp:522 wizards/newaccountwizard/knewaccountwizard.cpp:89
+msgid "Schedule"
+msgstr "Programador"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:90
+msgid "Payout"
+msgstr "Pago"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:91
+msgid "Parent Account"
+msgstr "Cuenta Madre"
+
+#: dialogs/rc.cpp:719 wizards/newaccountwizard/knewaccountwizard.cpp:92
+#: wizards/newuserwizard/knewuserwizard.cpp:86
+msgid "Finish"
+msgstr "Finalizar"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:248
+msgid "Credit card payment"
+msgstr "Pago de tarjeta de crédito"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:264
+#, c-format
+msgid "Loan payment for %1"
+msgstr "Pagar préstamo por %1"
+
+#: mymoney/mymoneyscheduled.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:279
+msgid "Loan payment"
+msgstr "Pago de préstamo"
+
+#: dialogs/rc.cpp:134 wizards/newaccountwizard/knewaccountwizard.cpp:293
+msgid "Amortization"
+msgstr "Amortización"
+
+#: dialogs/investactivities.cpp:196 dialogs/investactivities.cpp:284
+#: dialogs/investactivities.cpp:366 dialogs/investactivities.cpp:423
+#: dialogs/investtransactioneditor.cpp:227 dialogs/rc.cpp:135
+#: dialogs/rc.cpp:152 dialogs/rc.cpp:544 reports/listtable.cpp:222
+#: widgets/transaction.cpp:1597
+#: wizards/newaccountwizard/knewaccountwizard.cpp:302
+msgid "Interest"
+msgstr "Interés"
+
+#: dialogs/kcurrencycalculator.cpp:282
+#: wizards/newaccountwizard/knewaccountwizard.cpp:351
+#: wizards/newaccountwizard/knewaccountwizard.cpp:356
+msgid "User"
+msgstr "Usuario"
+
+#: kmymoneyutils.cpp:64 mymoney/mymoneyaccount.cpp:711
+#: reports/querytabletest.cpp:422
+#: wizards/newaccountwizard/knewaccountwizard.cpp:451
+msgid "Checking"
+msgstr "Corriente"
+
+#: kmymoneyutils.cpp:66 mymoney/mymoneyaccount.cpp:714
+#: wizards/newaccountwizard/knewaccountwizard.cpp:452
+msgid "Savings"
+msgstr "Ahorro"
+
+#: kmymoneyutils.cpp:68 mymoney/mymoneyaccount.cpp:717
+#: reports/querytabletest.cpp:423
+#: wizards/newaccountwizard/knewaccountwizard.cpp:453
+msgid "Credit Card"
+msgstr "Tarjeta de crédito"
+
+#: kmymoneyutils.cpp:70 mymoney/mymoneyaccount.cpp:720
+#: wizards/newaccountwizard/knewaccountwizard.cpp:454
+msgid "Cash"
+msgstr "Efectivo"
+
+#: kmymoneyutils.cpp:72 mymoney/mymoneyaccount.cpp:723
+#: wizards/newaccountwizard/knewaccountwizard.cpp:455
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+msgid "Loan"
+msgstr "Préstamo"
+
+#: kmymoneyutils.cpp:76 mymoney/mymoneyaccount.cpp:729
+#: wizards/newaccountwizard/knewaccountwizard.cpp:456
+msgid "Investment"
+msgstr "Inversión"
+
+#: converter/mymoneytemplate.cpp:178 converter/mymoneytemplate.cpp:179
+#: dialogs/knewaccountdlg.cpp:1014 kmymoneyutils.cpp:80
+#: mymoney/mymoneyaccount.cpp:735 views/kaccountsview.cpp:352
+#: views/kmymoneyview.cpp:765 widgets/kmymoneyaccountselector.cpp:177
+#: widgets/kmymoneyaccountselector.cpp:356
+#: wizards/newaccountwizard/knewaccountwizard.cpp:457
+msgid "Asset"
+msgstr "Activos"
+
+#: converter/mymoneytemplate.cpp:182 converter/mymoneytemplate.cpp:183
+#: dialogs/knewaccountdlg.cpp:1016 kmymoneyutils.cpp:82
+#: mymoney/mymoneyaccount.cpp:738 views/kaccountsview.cpp:356
+#: views/kmymoneyview.cpp:766 widgets/kmymoneyaccountselector.cpp:178
+#: widgets/kmymoneyaccountselector.cpp:363
+#: wizards/newaccountwizard/knewaccountwizard.cpp:458
+msgid "Liability"
+msgstr "Pasivos"
+
+#: converter/mymoneytemplate.cpp:194 converter/mymoneytemplate.cpp:195
+#: kmymoneyutils.cpp:94 mymoney/mymoneyaccount.cpp:756
+#: views/kaccountsview.cpp:369 views/kmymoneyview.cpp:769
+#: widgets/kmymoneyaccountselector.cpp:181
+#: widgets/kmymoneyaccountselector.cpp:390
+#: wizards/newaccountwizard/knewaccountwizard.cpp:460
+msgid "Equity"
+msgstr "Patrimonio"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid ""
+"Please make sure to enter the correct conversion for the selected opening "
+"date. If you requested an online quote it might be provided for a different "
+"date."
+msgstr ""
+"Por favor, asegurese de ingresar la cotización correcta para la fecha de "
+"apertura escogida. Si solicitó una cotización online, ésta puede ser para "
+"una fecha diferente."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid "Check date"
+msgstr "Verificar fecha"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:562
+msgid "1 %1 equals %2"
+msgstr "1 %1 es igual a %2"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:577
+msgid "Conversion rate is not positive"
+msgstr "El precio de conversión no es positivo"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:583
+msgid "No account name supplied"
+msgstr "No se suministró un nombre de cuenta"
+
+#: dialogs/keditscheduledlg.cpp:114 mymoney/mymoneyscheduled.cpp:1026
+#: wizards/newaccountwizard/knewaccountwizard.cpp:680
+msgid "Write check"
+msgstr "Cheque escrito"
+
+#: dialogs/keditscheduledlg.cpp:111 mymoney/mymoneyscheduled.cpp:1014
+#: wizards/newaccountwizard/knewaccountwizard.cpp:682
+msgid "Direct debit"
+msgstr "Débito directo"
+
+#: dialogs/keditscheduledlg.cpp:113 mymoney/mymoneyscheduled.cpp:1032
+#: wizards/newaccountwizard/knewaccountwizard.cpp:683
+msgid "Bank transfer"
+msgstr "Transferencia bancaria"
+
+#: dialogs/keditscheduledlg.cpp:112 mymoney/mymoneyscheduled.cpp:1029
+#: wizards/newaccountwizard/knewaccountwizard.cpp:685
+msgid "Standing order"
+msgstr "Orden de pago"
+
+#: dialogs/keditscheduledlg.cpp:110 mymoney/mymoneyscheduled.cpp:1020
+#: wizards/newaccountwizard/knewaccountwizard.cpp:686
+msgid "Manual deposit"
+msgstr "Depósito en ventanilla"
+
+#: dialogs/keditscheduledlg.cpp:109 mymoney/mymoneyscheduled.cpp:1017
+#: wizards/newaccountwizard/knewaccountwizard.cpp:687
+msgid "Direct deposit"
+msgstr "Depósito en cuenta"
+
+#: dialogs/keditscheduledlg.cpp:115 mymoney/mymoneyscheduled.cpp:1023
+#: wizards/newaccountwizard/knewaccountwizard.cpp:688
+msgid "Other"
+msgstr "Otro"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:697
+msgid "CreditCard %1 monthly payment"
+msgstr "Tarjeta de Crédito Pago mensual %1 "
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:703
+msgid "Finish entry and create account"
+msgstr "Finalizar el ingreso y crear cuenta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:705
+msgid "Finish entry and create account and schedule"
+msgstr "Finalizar el ingreso y crear cuenta y asiento programado"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:708
+msgid "Next due date is prior to opening date"
+msgstr "La siguiente fecha de vencimiento es anterior a la fecha de apertura"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:712
+msgid "No account selected"
+msgstr "No hay una cuenta seleccionada"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:716
+msgid "No amount for payment selected"
+msgstr "No hay un importe de pago seleccionado"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:720
+msgid "No payee for payment selected"
+msgstr "No hay un beneficiario de pago seleccionado"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:724
+msgid "No name assigned for schedule"
+msgstr "No se asignó un nombre al asiento programado"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:805
+msgid "No payee supplied"
+msgstr "No se suministró un beneficiario"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:819
+msgid "No opening balance supplied"
+msgstr "No se suministró un saldo de apertura"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:826
+msgid "An interest change can only happen after the first payment"
+msgstr "Un cambio de interés sólo puede ocurrir luego del primer pago"
+
+#: dialogs/knewloanwizard.cpp:615 dialogs/knewloanwizard.cpp:634
+#: wizards/newaccountwizard/knewaccountwizard.cpp:884
+#: wizards/newaccountwizard/rc.cpp:55
+msgid "Months"
+msgstr "Meses"
+
+#: dialogs/knewloanwizard.cpp:616 dialogs/knewloanwizard.cpp:635
+#: wizards/newaccountwizard/knewaccountwizard.cpp:885
+#: wizards/newaccountwizard/knewaccountwizard.cpp:889
+#: wizards/newaccountwizard/rc.cpp:56
+msgid "Years"
+msgstr "Años"
+
+#: dialogs/knewloanwizard.cpp:711
+#: wizards/newaccountwizard/knewaccountwizard.cpp:961
+#, c-format
+msgid "KMyMoney has calculated the amount of the loan as %1."
+msgstr "KMyMoney calculó el importe del préstamo como %1."
+
+#: dialogs/knewloanwizard.cpp:718
+#: wizards/newaccountwizard/knewaccountwizard.cpp:968
+msgid "KMyMoney has calculated the interest rate to %1%."
+msgstr "KMyMoney calculó el interés como %1%."
+
+#: dialogs/knewloanwizard.cpp:731
+#: wizards/newaccountwizard/knewaccountwizard.cpp:981
+msgid ""
+"KMyMoney has calculated a periodic payment of %1 to cover principal and "
+"interest."
+msgstr ""
+"KMyMoney ha calculado un pago periódico de %1 para cubrir la amortización y "
+"el interés."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:993
+#, c-format
+msgid ""
+"The number of payments has been decremented and the balloon payment has been "
+"modified to %1."
+msgstr "El número de pagos ha sido disminuido y el pago final modificado a %1."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1001
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1021
+#, c-format
+msgid "The balloon payment has been modified to %1."
+msgstr "El pago final ha sido modificado a %1."
+
+#: dialogs/knewloanwizard.cpp:763
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1013
+msgid "KMyMoney has calculated the term of your loan as %1. "
+msgstr "KMyMoney ha calculado el remate de su préstamo como %1."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1052
+msgid "KMyMoney has calculated a balloon payment of %1 for this loan."
+msgstr "KMyMoney calculó un pago final de %1 para este préstamo."
+
+#: dialogs/knewloanwizard.cpp:809
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1059
+msgid "KMyMoney has successfully verified your loan information."
+msgstr "KMyMoney verificó satisfactoriamente la información de su préstamo ."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1067
+msgid ""
+"You have entered mis-matching information. Please modify your figures or "
+"leave one value empty to let KMyMoney calculate it for you"
+msgstr ""
+"Introdujo información que no concuerda. Por favor vuelva a la página "
+"adecuada y actualice sus datos o deje un valor vacío para permitir a "
+"KMyMoney calcularlo para usted"
+
+#: dialogs/knewloanwizard.cpp:504 dialogs/knewloanwizard.cpp:513
+#: dialogs/knewloanwizard.cpp:522 dialogs/knewloanwizard.cpp:532
+#: dialogs/knewloanwizard.cpp:820
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1070
+msgid "Calculation error"
+msgstr "Error de cálculo"
+
+#: dialogs/knewloanwizard.cpp:824
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1074
+msgid ""
+"\n"
+"\n"
+"Accept this or modify the loan information and recalculate."
+msgstr ""
+"\n"
+"\n"
+"Acepte esto o modifique la información del préstamo y recalcule."
+
+#: dialogs/knewloanwizard.cpp:826
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1076
+msgid "Calculation successful"
+msgstr "Cálculo correcto"
+
+#: dialogs/knewloanwizard.cpp:846
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1129
+#, c-format
+msgid ""
+"_n: one month\n"
+"%n months"
+msgstr ""
+"_n: un mes\n"
+"%n meses"
+
+#: dialogs/knewloanwizard.cpp:850
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1133
+#, c-format
+msgid ""
+"_n: one year\n"
+"%n years"
+msgstr ""
+"_n: un año\n"
+"%n años"
+
+#: dialogs/knewloanwizard.cpp:854
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1137
+#, c-format
+msgid ""
+"_n: one payment\n"
+"%n payments"
+msgstr ""
+"_n: un pago\n"
+"%n pagos"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1190
+msgid "Press Calculate to verify the values"
+msgstr "Presione Calcular para verificar los valores"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1194
+msgid "Not all details supplied"
+msgstr "No se suministraron todos los detalles"
+
+#: dialogs/kaccountselectdlg.cpp:70 dialogs/knewloanwizard.cpp:122
+#: dialogs/knewloanwizard.cpp:136
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1381
+msgid "&Create..."
+msgstr "&Crear..."
+
+#: dialogs/knewloanwizard.cpp:138
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1383
+msgid "Create a new asset account"
+msgstr "Crear una nueva cuenta de activos"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1384
+msgid ""
+"If the asset account does not yet exist, press this button to create it."
+msgstr ""
+"Si la cuenta de activos no existe aún, presione este botón para crearla."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1596
+msgid "Account information"
+msgstr "Información de cuenta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1601
+#: wizards/newaccountwizard/rc.cpp:59
+msgid "Subaccount of"
+msgstr "Subcuenta de"
+
+#: dialogs/rc.cpp:225 dialogs/rc.cpp:326 dialogs/rc.cpp:371 dialogs/rc.cpp:723
+#: plugins/ofximport/dialogs/rc.cpp:23 reports/listtable.cpp:225
+#: widgets/kmymoneyaccounttreebase.cpp:113 widgets/register.cpp:61
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1606
+msgid "Type"
+msgstr "Tipo"
+
+#: dialogs/kcurrencyeditdlg.cpp:62 dialogs/rc.cpp:56 dialogs/rc.cpp:59
+#: dialogs/rc.cpp:75 dialogs/rc.cpp:727 dialogs/rc.cpp:792
+#: kmymoneyutils.cpp:84 kmymoneyutils.cpp:111 mymoney/mymoneyaccount.cpp:741
+#: mymoney/mymoneysecurity.cpp:169 reports/listtable.cpp:233
+#: widgets/kmymoneypriceview.cpp:127
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1607
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1630
+#: wizards/newaccountwizard/rc.cpp:6 wizards/newaccountwizard/rc.cpp:24
+msgid "Currency"
+msgstr "Moneda"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1608
+#: wizards/newaccountwizard/rc.cpp:7 wizards/newuserwizard/rc.cpp:9
+msgid "Opening date"
+msgstr "Fecha de apertura"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1610
+#: wizards/newaccountwizard/rc.cpp:9
+msgid "Conversion rate"
+msgstr "Tasa de conversión"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1613
+#: wizards/newaccountwizard/rc.cpp:15 wizards/newuserwizard/rc.cpp:13
+msgid "Opening balance"
+msgstr "Saldo de Apertura"
+
+#: dialogs/keditscheduledlg.cpp:507 dialogs/transactioneditor.cpp:784
+#: dialogs/transactioneditor.cpp:848 plugins/ofximport/dialogs/rc.cpp:22
+#: widgets/rc.cpp:111 widgets/register.cpp:59 widgets/transaction.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1618
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1632
+msgid "Number"
+msgstr "Número"
+
+#: dialogs/rc.cpp:365 wizards/newaccountwizard/knewaccountwizard.cpp:1621
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1634
+#: wizards/newaccountwizard/rc.cpp:26 wizards/newaccountwizard/rc.cpp:66
+msgid "IBAN"
+msgstr "IBAN"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1627
+msgid "Brokerage Account"
+msgstr "Cuenta de Corretaje"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1640
+msgid "Loan information"
+msgstr "Información del Prestamo"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1643
+msgid "Amount borrowed"
+msgstr "Importe pedido"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1645
+msgid "Amount lent"
+msgstr "Importe prestado"
+
+#: dialogs/rc.cpp:515 dialogs/rc.cpp:546
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1647
+#: wizards/newaccountwizard/rc.cpp:75
+msgid "Interest rate"
+msgstr "Tasa de interés"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1648
+msgid "Interest rate is"
+msgstr "La tasa de interés es"
+
+#: dialogs/rc.cpp:509 dialogs/rc.cpp:572
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1649
+msgid "Principal and interest"
+msgstr "Amortización e Intereses"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1650
+#: wizards/newaccountwizard/rc.cpp:90
+msgid "Additional fees"
+msgstr "Cargos adicionales"
+
+#: dialogs/rc.cpp:525 wizards/newaccountwizard/knewaccountwizard.cpp:1651
+#: wizards/newaccountwizard/rc.cpp:44
+msgid "Payment frequency"
+msgstr "Frecuencia de los pagos"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1652
+#: wizards/newaccountwizard/rc.cpp:105
+msgid "Payment account"
+msgstr "Cuentas de pago"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1655
+msgid "Payout information"
+msgstr "Información del pago"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1658
+msgid "Refinance"
+msgstr "Refinanciar"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1661
+msgid "Transfer amount to"
+msgstr "Transferir importe a"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1663
+msgid "Transfer amount from"
+msgstr "Transferir importe de"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1665
+msgid "Payment date"
+msgstr "Fecha de pago"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1671
+msgid "Schedule information"
+msgstr "Información del Asiento Planificado"
+
+#: reports/listtable.cpp:228
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1684
+msgid "Occurence"
+msgstr "Ocurrencia"
+
+#: mymoney/mymoneyscheduled.cpp:891 mymoney/mymoneyscheduled.cpp:947
+#: mymoney/mymoneyscheduled.cpp:1283 mymoney/mymoneyscheduletest.cpp:1343
+#: widgets/rc.cpp:19 widgets/rc.cpp:74
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+msgid "Monthly"
+msgstr "Mensualmente"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1677
+msgid "Paid from"
+msgstr "Pagado de"
+
+#: widgets/kmymoneycombo.cpp:473 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1678
+msgid "Pay to"
+msgstr "Pagar a"
+
+#: dialogs/investactivities.cpp:197 dialogs/investactivities.cpp:285
+#: dialogs/investactivities.cpp:365 dialogs/kfindtransactiondlg.cpp:197
+#: dialogs/kmymoneysplittable.cpp:80 dialogs/rc.cpp:51 dialogs/rc.cpp:212
+#: reports/listtable.cpp:197 views/khomeview.cpp:421 views/khomeview.cpp:494
+#: views/khomeview.cpp:528 views/kscheduledview.cpp:73 views/rc.cpp:63
+#: widgets/register.cpp:58 widgets/transaction.cpp:1055
+#: widgets/transaction.cpp:1578 widgets/transaction.cpp:1610
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1679
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1685
+msgid "Amount"
+msgstr "Importe"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1680
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1686
+msgid "First payment due"
+msgstr "El primer pago vence"
+
+#: dialogs/rc.cpp:102 wizards/newaccountwizard/knewaccountwizard.cpp:1681
+#: wizards/newaccountwizard/rc.cpp:115
+msgid "Payment method"
+msgstr "Método de Pago"
+
+#: wizards/newaccountwizard/rc.cpp:1
+msgid ""
+"This page summarizes the data you have entered. Press <b>Finish</b> to "
+"create the account, schedules, etc. or use <b>Back</b> to modify your "
+"entries."
+msgstr ""
+"Esta página resume los datos ingresados. Presione <b>Finalizar</b> para "
+"crear la cuenta, programación, etc. o presione <b>Atrás</b> para modificar "
+"los datos ingresados."
+
+#: wizards/newaccountwizard/rc.cpp:2
+msgid "Item"
+msgstr "Elemento"
+
+#: dialogs/rc.cpp:110 dialogs/rc.cpp:165 dialogs/rc.cpp:252 dialogs/rc.cpp:757
+#: dialogs/rc.cpp:818 views/kinvestmentview.cpp:74 widgets/register.cpp:574
+#: wizards/newaccountwizard/rc.cpp:3
+msgid "Value"
+msgstr "Valor"
+
+#: wizards/newaccountwizard/rc.cpp:4
+msgid ""
+"Enter the name of the account under which it is known within KMyMoney.\n"
+"Select the type for the new account. Use the <b>What's this?</b> feature to "
+"see more details about the various account types.\n"
+"Enter the date the account was opened and its currency."
+msgstr ""
+"Ingrese el nombre bajo el cual se conocerá la cuenta dentro de KMyMoney.\n"
+"Seleccione el tipo de cuenta. Utilice la funcionalidad <b>¿Qué es esto?</b> "
+"para ver más detalles sobre los diversos tipos de cuenta.\n"
+"Ingrese la fecha en que la cuenta fue abierta y su divisa."
+
+#: wizards/newaccountwizard/rc.cpp:5
+msgid "Select the currency in which this account is denominated."
+msgstr "Seleccione la divisa de denominación de la cuenta."
+
+#: wizards/newaccountwizard/rc.cpp:8
+msgid ""
+"The opening balance is the balance of the account when you start using it "
+"with KMyMoney. For new accounts this is usually 0 but for existing accounts "
+"this may well differ. Please consult the account statements to figure out "
+"this value. The opening balance is to be provided in the currency of the "
+"account as selected with the currency button."
+msgstr ""
+"El saldo de apertura es el saldo de la cuenta cuando comienza a utilizarla "
+"con KMyMoney. Para las cuentas nuevas, éste es usualmente 0, pero para "
+"cuentas existentes éste puede ser diferente. Por favor, consulte los "
+"extractos de su cuenta para calcular este valor. Debe ingresar el saldo de "
+"apertura en la divisa de la cuenta tal como fue seleccionado en el botón de "
+"divisa."
+
+#: wizards/newaccountwizard/rc.cpp:10
+msgid ""
+"The opening date would be the date of the last statement. In case you want "
+"to keep track of transactions prior to this date, enter the ending balance "
+"and statement date of a prior statement and add all following transactions "
+"into KMyMoney.\n"
+"<br>\n"
+"<i>Note</i>: If you do not know the exact amount of the opening balance, "
+"enter an estimate. You can change this value later before you reconcile this "
+"account for the first time."
+msgstr ""
+"La fecha de apertura sería la fecha del último resumen. En caso que quiera "
+"llevar registro de sus transacciones anteriores a esta feche, ingrese el "
+"saldo final y la fecha de un resumen anterior y agregue las transacciones "
+"siguientes a KMyMoney.\n"
+"<br>\n"
+"<i>Nota</i>: Si no sabe el monto exacto del saldo de apertura, ingrese un "
+"estimado. Puede cambiar este valor luego, antes de reconciliar esta cuenta "
+"por primera vez."
+
+#: dialogs/rc.cpp:52 dialogs/rc.cpp:54 dialogs/rc.cpp:57 dialogs/rc.cpp:60
+#: dialogs/rc.cpp:748 dialogs/rc.cpp:749 dialogs/rc.cpp:768 widgets/rc.cpp:6
+#: widgets/rc.cpp:7 widgets/rc.cpp:8 widgets/rc.cpp:9 widgets/rc.cpp:10
+#: widgets/rc.cpp:11 widgets/rc.cpp:12 widgets/rc.cpp:13 widgets/rc.cpp:14
+#: widgets/rc.cpp:15 widgets/rc.cpp:16 widgets/rc.cpp:17
+#: wizards/newaccountwizard/rc.cpp:11 wizards/newaccountwizard/rc.cpp:88
+#: wizards/newaccountwizard/rc.cpp:91 wizards/newaccountwizard/rc.cpp:93
+#: wizards/newuserwizard/rc.cpp:14
+msgid "xxx"
+msgstr "xxx"
+
+#: wizards/newaccountwizard/rc.cpp:12
+msgid "Account type"
+msgstr "Tipo de cuenta"
+
+#: wizards/newaccountwizard/rc.cpp:13
+msgid ""
+"For foreign currencies an initial conversion rate needs to be provided. This "
+"should be the price of the foreign currency in the base currency on the "
+"opening date of the account."
+msgstr ""
+"Para las divisas extranjeras debe suministrarse una cotización inicial. Esta "
+"debería ser el precio de la divisa extranjera en la divisa base a la fecha "
+"de apertura de la cuenta."
+
+#: wizards/newaccountwizard/rc.cpp:14
+msgid "Account name"
+msgstr "Nombre de la cuenta"
+
+#: wizards/newaccountwizard/rc.cpp:16
+msgid ""
+"<p><b>Checking</b>\n"
+"Use the checking account type to manage activities on your checking account "
+"e.g. payments, checks and cash card purchases.</p>\n"
+"\n"
+"<p><b>Savings</b>\n"
+"Use the savings account type to manage activities on your savings account.</"
+"p>\n"
+"\n"
+"<p><b>Credit Card</b>\n"
+"Use the credit card account type to manage activities on your credit card.</"
+"p>\n"
+"\n"
+"<p><b>Cash</b>\n"
+"\n"
+"Use the cash account type to manage activities in your wallet.</p>\n"
+"\n"
+"<p><b>Loan</b>\n"
+"Use the loan account type to manage amortization loans (e.g. mortgages, car "
+"loan, money you lend, private loans etc.).</p>\n"
+"\n"
+"<p><b>Investment</b>\n"
+"Use the investment account to manage your stock, mutual fund and other "
+"investments.</p>\n"
+"\n"
+"<p><b>Asset</b>\n"
+"Use the asset account type to manage assets (e.g. your house, car or art "
+"collection).</p>\n"
+"\n"
+"<p><b>Liability</b>\n"
+"Use the liability account type to manage any type of liability except "
+"amortization loans. Use it for taxes you owe or money you borrowed from "
+"friends. For amortization loans like mortgages you should create a loan "
+"account.</p>"
+msgstr ""
+"<p><b>Cuenta Corriente</b>\n"
+"Utilice el tipo cuenta corriente para manejar actividades en su cuenta "
+"corriente. Por ejemplo, pagos, cheques, y compras con tarjeta de crédito.</"
+"p>\n"
+"\n"
+"<p><b>Ahorro</b>\n"
+"Utilice el tipo Ahorro para manejar actividades en su cuenta de caja de "
+"ahorros.</p>\n"
+"\n"
+"<p><b>Tarjeta de Crédito</b>\n"
+"Utilice el tipo tarjeta de crédito para manejar actividades en su tartjeta "
+"de crédito.</p>\n"
+"\n"
+"<p><b>Efectivo</b>\n"
+"\n"
+"Utilice el tipo efectivo para manejar actividades en su billetera.</p>\n"
+"\n"
+"<p><b>Préstamo</b>\n"
+"Utilice el tipo préstamo para manejar amortización de préstamos (por ej. "
+"hipotecas, prendas, dinero prestado, prestamos privados, etc.)</p>\n"
+"\n"
+"<p><b>Inversión</b>\n"
+"Utilice el tipo inversión manejar acciones, fondos mutuales y otras "
+"inversiones.</p>\n"
+"\n"
+"<p><b>Activo</b>\n"
+"Utilice el tipo Activo para manejar activos (por ej. su casa, auto o "
+"colección de arte).</p>\n"
+"\n"
+"<p><b>Pasivo</b>\n"
+"Utilice el tipo pasivo para manejar cualquier tipo de pasivo, excepto "
+"prestamos con amortización. Utilicelo para deudas de impuestos o dinero que "
+"haya pedido prestado de amigos. Para prestamos con amortización debería "
+"crear una cuenta de préstamo.</p>"
+
+#: wizards/newaccountwizard/rc.cpp:17
+msgid "Preferred account"
+msgstr "Cuenta preferida"
+
+#: wizards/newaccountwizard/rc.cpp:18
+msgid ""
+"Mark this checkbox if the account should be maintained as preferred account"
+msgstr ""
+"Marque esta casilla si la cuenta debe ser mantenida como cuenta preferida"
+
+#: wizards/newaccountwizard/rc.cpp:19
+msgid ""
+"Selecting the <b>Preferred Account</b> checkbox will allow preferred access "
+"in some dialogs and views of KMyMoney."
+msgstr ""
+"Escogiendo la casilla <b>Cuenta Preferida</b> se le permitirá tener acceso "
+"preferencial en algunos diálogos y vistas de KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:20
+msgid "Enter a name under which this account is known within KMyMoney."
+msgstr ""
+"Ingrese el nombre bajo el que se conocerá la cuenta dentro de KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:21
+msgid "Online quote"
+msgstr "Cotizaciones online"
+
+#: wizards/newaccountwizard/rc.cpp:22
+msgid ""
+"Does this investment account have a brokerage account?<p>\n"
+"\n"
+"<b>Check</b> the mark if this investment account has an associated account "
+"for money that is not invested.<br>\n"
+"\n"
+"<b>Uncheck</b> it if you don't use this account for active stock brokerage. "
+"You should also uncheck it if this account is not maintained by a bank or "
+"broker."
+msgstr ""
+"¿Esta cuenta de inversión tiene una cuenta de corretaje?<p>\n"
+"\n"
+"<b>Marcar</b> si la cuenta de inversión tiene una cuenta asociada para el "
+"dinero que no está invertido.<br>\n"
+"\n"
+"<b>Desmarcar</b> si no utiliza esta cuenta para corretaje. También debería "
+"desmarcarla si la cuenta no es mantenida por un banco o corredor de bolsa."
+
+#: wizards/newaccountwizard/rc.cpp:23
+msgid "Create brokerage account"
+msgstr "Crear cuenta de corretaje"
+
+#: wizards/newaccountwizard/rc.cpp:25 wizards/newaccountwizard/rc.cpp:64
+msgid "Account number"
+msgstr "Número de cuenta"
+
+#: wizards/newaccountwizard/rc.cpp:27
+msgid ""
+"Please select the required options. Please use the <b>What's this?</b> "
+"feature to see more information about the items."
+msgstr ""
+"Por favor seleccione las opciones requeridas. Por favor utilice la "
+"funcionalidad <b>¿Qué es esto?</b> para ver más información sobre los "
+"elementos."
+
+#: wizards/newaccountwizard/rc.cpp:28
+msgid "What is the type of the loan?"
+msgstr "¿Cual es el tipo de prestamo?"
+
+#: dialogs/rc.cpp:481 wizards/newaccountwizard/rc.cpp:29
+msgid "I am borrowing money"
+msgstr "Pido prestado dinero"
+
+#: dialogs/rc.cpp:482 wizards/newaccountwizard/rc.cpp:30
+msgid "I am lending money"
+msgstr "Presto Dinero"
+
+#: wizards/newaccountwizard/rc.cpp:31
+msgid "Who is the payee/payer of the loan?"
+msgstr "¿Quién es el beneficiario/pagador del prestamo?"
+
+#: wizards/newaccountwizard/rc.cpp:32
+msgid ""
+"Enter the name of the person or bank you owe money or who owes you money.\n"
+"\n"
+"If the name does not exist within KMyMoney's database, you are asked if you "
+"want to create it."
+msgstr ""
+"Ingrese el nombre de la persona o banco al que le debe plata o que le debe "
+"plata a usted.\n"
+"\n"
+"Si el nombre no existe en la base de datos de KMyMoney, se le preguntará si "
+"desea crearlo."
+
+#: wizards/newaccountwizard/rc.cpp:33
+msgid "Did you make/receive any payments yet?"
+msgstr "¿Ya ha recibido/efectuado algún pago?"
+
+#: wizards/newaccountwizard/rc.cpp:36
+msgid ""
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?\n"
+"\n"
+"Note: Payments made to obtain the loan (e.g. Disagio) are not considered as "
+"payments in this context."
+msgstr ""
+"¿Hubo pagos por este prestamo, hayan sido ingresados en KMyMoney o no?\n"
+"\n"
+"Nota: Los pagos hechos para obtener el préstamo (p. ej. \"Comisiones de "
+"otorgamiento\") no son considerados como pagos en este contexto."
+
+#: wizards/newaccountwizard/rc.cpp:37
+msgid "Which payments do you want to record?"
+msgstr "¿Qué pagos desea ingresar?"
+
+#: wizards/newaccountwizard/rc.cpp:38
+msgid "All payments"
+msgstr "Todos los pagos"
+
+#: wizards/newaccountwizard/rc.cpp:39
+msgid "Start with this year's payments"
+msgstr "Iniciar con los pagos de este año"
+
+#: wizards/newaccountwizard/rc.cpp:40
+msgid ""
+"<qt>Select which transactions should be recorded.\n"
+"\n"
+"<b>All payments</b> allows you to enter all payments made for this loan.\n"
+"\n"
+"The option to <b>start from the beginning of the current year</b> is meant "
+"for loans that are active for a longer period of time already and you don't "
+"want to enter all transactions of the past.\n"
+"</qt>"
+msgstr ""
+"<qt>Seleccione qué asientos deberían registrarse.\n"
+"\n"
+"<b>Todos los pagos</b> le permite ingresar todos los pagos realizados para "
+"esta préstamo.\n"
+"\n"
+"La opción de <b>comenzar desde principios de este año</b> es para préstamos "
+"activos por un periodo de tiempo más largo y que no desea ingresar todos los "
+"asientos realizados en el pasado.\n"
+"</qt>"
+
+#: wizards/newaccountwizard/rc.cpp:41
+msgid "Balance before start of recording"
+msgstr "Saldo previo a comenzar a registrar"
+
+#: wizards/newaccountwizard/rc.cpp:42
+msgid ""
+"Enter the ending balance found on the statement that is the last one before "
+"you want to start recording this loan in KMyMoney."
+msgstr ""
+"Ingrese el saldo final de su resumen anterior al punto en que desea comenzar "
+"a registrar este préstamo en KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:43
+msgid ""
+"You have selected to record only payments from the beginning of this year. "
+"Since prior transactions will not be recorded, you need to supply the "
+"balance of the loan on January 1st of this year."
+msgstr ""
+"Usted ha seleccionado registrar pagos sólo desde el comienzo de este año. "
+"Como los asientos anteriores no serán registrados, debe proporcionar el "
+"saldo del préstamo al 1 de enero de este año."
+
+#: wizards/newaccountwizard/rc.cpp:45
+msgid "Interest Compounding frequency"
+msgstr "Frecuencia del Interés Compuesto"
+
+#: wizards/newaccountwizard/rc.cpp:46
+msgid ""
+"Select the frequency with which the interest is compounded. If uncertain, "
+"select the same as the payment frequency. Consult your loan contract for "
+"details."
+msgstr ""
+"Seleccione la frecuencia con la que se compone el interés. Si no está "
+"seguro, seleccione la misma que la frecuencia de pago. Consulte el contrato "
+"de préstamo para más detalles."
+
+#: wizards/newaccountwizard/rc.cpp:47
+msgid "Due date of first payment to be recorded"
+msgstr "Fecha de vencimiento del primer pago a registrar"
+
+#: wizards/newaccountwizard/rc.cpp:48
+msgid ""
+"Depending on the answer to <b>What do you want to record?</b> this field "
+"means the following:<p>\n"
+"\n"
+"<b>All payments</b><br>\n"
+"Enter the due date of the very first payment<p>\n"
+"\n"
+"<b>Start with this year's payments</b><br>\n"
+"Enter the due date of the first payment in the current year"
+msgstr ""
+"Dependiendo de la respuesta a <b>¿Qué desea registrar?</b> este campo "
+"significa lo siguiente:<p>\n"
+"\n"
+"<b>Todos los pagos</b><br>\n"
+"Ingrese la fecha de vencimiento del primer pago<p>\n"
+"\n"
+"<b>Comenzar con los pagos de este año</b><br>\n"
+"Ingrese la fecha de vencimiento del primer pago del corriente año"
+
+#: wizards/newaccountwizard/rc.cpp:49
+msgid "Type of interest rate"
+msgstr "Tipo de tasa de interés"
+
+#: wizards/newaccountwizard/rc.cpp:50
+msgid "Fixed"
+msgstr "Fijo"
+
+#: wizards/newaccountwizard/rc.cpp:51
+msgid "Variable"
+msgstr "Variable"
+
+#: wizards/newaccountwizard/rc.cpp:52
+msgid "Time between interest changes"
+msgstr "Tiempo entre cambios de interés"
+
+#: dialogs/knewloanwizard.cpp:613 wizards/newaccountwizard/rc.cpp:53
+msgid "Days"
+msgstr "Días"
+
+#: dialogs/knewloanwizard.cpp:614 wizards/newaccountwizard/rc.cpp:54
+msgid "Weeks"
+msgstr "Semanas"
+
+#: wizards/newaccountwizard/rc.cpp:57
+msgid "Next interest change is due"
+msgstr "Los próximos intereses cambian el"
+
+#: wizards/newaccountwizard/rc.cpp:58
+msgid "This page allows you to select the parent account."
+msgstr "Esta página le permite seleccionar una cuenta madre."
+
+#: wizards/newaccountwizard/rc.cpp:60
+msgid ""
+"If this account is managed by an institution please select the institution "
+"from the list. If the institution does not exist yet, please choose the "
+"<b>New Institution</b> button to create it. Otherwise, leave this field "
+"empty.\n"
+"Enter the account number used by the institution to identify the account."
+msgstr ""
+"Si esta cuenta está gestionada por una organización, escójala de la lista. "
+"Si aún no existe, presione el botón <b>Nueva Organización</b> para crearla. "
+"En otro caso, deje este campo vacio.\n"
+"Ingrese el número de cuenta utilizado por la organización para identificar "
+"la cuenta."
+
+#: wizards/newaccountwizard/rc.cpp:62
+msgid "Select the institution which manages this account or leave empty"
+msgstr ""
+"Seleccione la organización que maneja esta cuenta o deje el espacio en blanco"
+
+#: wizards/newaccountwizard/rc.cpp:63
+msgid "New Institution"
+msgstr "Nueva Organización"
+
+#: wizards/newaccountwizard/rc.cpp:65
+msgid ""
+"Accounts managed by an institution are usually referenced by a unique number "
+"the so called account number. Enter that number here.\n"
+"\n"
+"KMyMoney currently uses this number only for some online banking functions."
+msgstr ""
+"Las cuentas manejadas por una organización generalmente tienen una número "
+"único de referencia denominado número de cuenta. Ingrese este número aquí.\n"
+"\n"
+"Actualmente KMyMoney sólo utiliza este número para algunas funciones de "
+"banca online."
+
+#: wizards/newaccountwizard/rc.cpp:67
+msgid "Enter the International Bank Account Number into this field"
+msgstr "Ingrese el Número de Cuenta Bancaria Internacional en este campo"
+
+#: wizards/newaccountwizard/rc.cpp:68
+msgid ""
+"You can enter the IBAN (International Bank Account Number) into this field "
+"if you know it. Usually, people at your institution can tell you the number "
+"or it is printed on your statements.\n"
+"\n"
+"See also http://en.wikipedia.org/wiki/International_Bank_Account_Number for "
+"more information.\n"
+"\n"
+"KMyMoney keeps this field only for documentation purposes and does not use "
+"it otherwise."
+msgstr ""
+"Usted puede ingresar el IBAN (Número de Cuenta Bancaria Internacional) en "
+"este campo si lo conoce. Usualmente, su organización puede decirle el número "
+"o está impreso en sus resumenes.\n"
+"\n"
+"Vea también http://es.wikipedia.org/wiki/IBAN para más información.\n"
+"\n"
+"KMyMoney guarda este campo sólo con propósitos de documentación y no lo "
+"utiliza de otra manera."
+
+#: wizards/newaccountwizard/rc.cpp:69
+msgid ""
+"Now enter the details for your loan. You can leave one of the fields empty "
+"and KMyMoney will calculate it when you press the <b>Calculate</b> button. "
+"Before you can continue with the next page you also need to press "
+"<b>Calculate</b> so that KMyMoney can check the logical correctness of the "
+"values you have supplied."
+msgstr ""
+"Ahora ingrese los detalles de su préstamo. Puede dejar uno de los campos en "
+"blanco y KMyMoney lo calculará cuando presione el botón <b>Calcular</b>. "
+"Antes de poder continuar con la siguiente página, también debe presionar "
+"<b>Calcular</b> para que KMyMoney pueda verificar que los valores provistos "
+"son correctos desde un punto de vista lógico."
+
+#: wizards/newaccountwizard/rc.cpp:70
+msgid "The interest rate gets calculated"
+msgstr "La tasa de interés se calcula"
+
+#: wizards/newaccountwizard/rc.cpp:71
+msgid "when the payment is received"
+msgstr "Cuándo se recibe el pago"
+
+#: wizards/newaccountwizard/rc.cpp:72
+msgid "when the payment is due"
+msgstr "Cuándo vence el pago"
+
+#: dialogs/rc.cpp:531 dialogs/rc.cpp:533 wizards/newaccountwizard/rc.cpp:73
+msgid "Loan amount"
+msgstr "Importe del préstamo"
+
+#: wizards/newaccountwizard/rc.cpp:74
+msgid ""
+"Enter the amount of the loan in this field. If you want to calculate this "
+"field out of the other parameters, please leave it empty. If the field is "
+"marked as required (colored background) you have informed KMyMoney about the "
+"fact that there were already some payments towards the loan. In this case, "
+"please enter the ending balance of your last statement."
+msgstr ""
+"Ingrese el importe del préstamo en este campo. Si desea calcular este campo "
+"basado en los otros parámetros, por favor déjelo en blanco. Si el campo está "
+"marcado como requerido (fondo en colores), usted ha informado a KMyMoney del "
+"hecho que ya hay pagos realizados para este préstamo. En ese caso, por favor "
+"ingrese el saldo final de su último resumen."
+
+#: wizards/newaccountwizard/rc.cpp:76
+msgid ""
+"Please enter the interest rate in percent or leave the field empty to "
+"calculate it."
+msgstr ""
+"Introduzca el porcentaje de tasa de interés o deje el campo en blanco para "
+"calcularlo."
+
+#: dialogs/rc.cpp:559 wizards/newaccountwizard/rc.cpp:77
+msgid "Term"
+msgstr "Plazo"
+
+#: wizards/newaccountwizard/rc.cpp:78
+msgid ""
+"Please enter the term of this loan or enter 0 to calculate it. The term is "
+"the time that is required to fully repay the loan. This time might be "
+"different from the time your loan contract is signed for."
+msgstr ""
+"Por favor, introduzca el plazo de este préstamo o deje el campo vacío para "
+"calcularlo. El plazo es el tiempo requerido para devolver por completo el "
+"préstamo. Este tiempo puede variar del tiempo por el que firmó el contrato "
+"de préstamo."
+
+#: wizards/newaccountwizard/rc.cpp:79
+msgid "Payment (principal and interest)"
+msgstr "Pago (amortización e intereses)"
+
+#: wizards/newaccountwizard/rc.cpp:80
+msgid ""
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"Por favor introduzca el importe que paga de interés y amortización o déjelo "
+"en blanco para calcularlo."
+
+#: wizards/newaccountwizard/rc.cpp:81
+msgid "Balloon payment"
+msgstr "Pago final"
+
+#: wizards/newaccountwizard/rc.cpp:82
+msgid ""
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"Introduzca la cantidad del pago final de la amortización o deje el campo "
+"vacío para calcularlo."
+
+#: wizards/newaccountwizard/rc.cpp:83
+msgid "Calculate"
+msgstr "Calcular"
+
+#: wizards/newaccountwizard/rc.cpp:84
+msgid "Press this button to calculate/verify your loan details."
+msgstr ""
+"Presione este botón para calcular/verificar los detalles de su préstamo."
+
+#: wizards/newaccountwizard/rc.cpp:85
+msgid ""
+"Pressing this button calculates a possibly missing parameter for your loan "
+"or verifies that the values entered match. If something is not correct you "
+"will receive information about it."
+msgstr ""
+"Presionando este botón se calcula un posible parámetro faltante de su "
+"préstamo o se verifica que los valores ingresados coincidan. Si algo no está "
+"correcto, se le informará."
+
+#: wizards/newaccountwizard/rc.cpp:86
+msgid ""
+"Now enter the information required for the periodic loan payments. If your "
+"regular payments contains any additional fees, click on the <b>Additional "
+"fees</b> button to enter them."
+msgstr ""
+"Ahora ingrese la información requerida para los pagos periodicos del "
+"prestamo.Si su pago periódico contiene cargos adicionales, pulse el botón "
+"<b>Cargos Adicionales</b> para introducirlos."
+
+#: wizards/newaccountwizard/rc.cpp:87
+msgid "Principal + Interest"
+msgstr "Amortización + Intereses"
+
+#: dialogs/rc.cpp:620 wizards/newaccountwizard/rc.cpp:89
+msgid "+"
+msgstr "+"
+
+#: wizards/newaccountwizard/rc.cpp:92
+msgid "= periodical payments"
+msgstr "= pagos periódicos"
+
+#: dialogs/rc.cpp:643 wizards/newaccountwizard/rc.cpp:94
+msgid ""
+"If this loan is for an asset, such as a car or a house, you can create the "
+"asset account now. An asset account represents the total value of an asset. "
+"The money from this loan will be transfered into the asset account you "
+"create or select.\n"
+"If this loan is a 'consumer loan' (money to use however you want), you can "
+"use a checking account instead."
+msgstr ""
+"Si este prestamo es para un activo, como un auto o una casa, puede crear la "
+"cuenta del activo ahora. Una cuenta de activo representa el valor total de "
+"un activo. El dinero del préstamo será transferido a la cuenta del activo "
+"que cree o elija.\n"
+"Si este es un prestamo personal (dinero para utilizar como usted desee), "
+"puede utilizar una cuenta corriente."
+
+#: dialogs/rc.cpp:644 wizards/newaccountwizard/rc.cpp:95
+msgid "Don't create payout transaction"
+msgstr "No crear asiento de finalización"
+
+#: wizards/newaccountwizard/rc.cpp:96
+msgid "Refinance existing loan"
+msgstr "Refinanciar un préstamo existente"
+
+#: wizards/newaccountwizard/rc.cpp:97
+msgid ""
+"Check this if you are refinancing a loan that already exists in KMyMoney"
+msgstr ""
+"Marque esto si está refinanciando un préstamo que ya existe en KMyMoney"
+
+#: dialogs/rc.cpp:642 wizards/newaccountwizard/rc.cpp:98
+msgid "Asset Account"
+msgstr "Cuenta de Activos"
+
+#: dialogs/rc.cpp:2 wizards/newaccountwizard/rc.cpp:99
+msgid "Create"
+msgstr "Crear"
+
+#: wizards/newaccountwizard/rc.cpp:100
+msgid "Loan account"
+msgstr "Cuenta del préstamo"
+
+#: dialogs/rc.cpp:646 wizards/newaccountwizard/rc.cpp:101
+msgid "Date of payment"
+msgstr "Fecha del pago"
+
+#: wizards/newaccountwizard/rc.cpp:102
+msgid ""
+"KMyMoney creates a schedule for this payment and reminds you whenever a "
+"payment must be made. Please select the account to/from which payments will "
+"be made and the category the interest will be assigned to.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"KMyMoney creará una planificación para estos pagos y le avisará cando deba "
+"hacer uno. Por favor seleccione la cuenta de origen/destino para realizar "
+"los pagos y la categoría a la cual se asignarán los intereses.<p>\n"
+"Si escogió registrar todos los pagos, ya ha proporcionado esta fecha. Si "
+"escogió registrar solamente los pagos de este año, entonces la <b>Fecha de "
+"vencimiento del primer pago<b> es la fecha del primer pago realizado este "
+"año."
+
+#: dialogs/rc.cpp:613 wizards/newaccountwizard/rc.cpp:103
+msgid "Interest category"
+msgstr "Categoría de los intereses"
+
+#: wizards/newaccountwizard/rc.cpp:104
+msgid ""
+"The category the interest part of the payment will be assigned to. If you "
+"borrow money you usually have to pay interest, so this should be an expense "
+"category. If you lend the money, you receive the interest. In this case, "
+"select an income category here."
+msgstr ""
+"La categoría a la cual se va a asignar el interés del pago. Si pide dinero "
+"prestado, usualmente debe pagar interés, así que ésta debería ser una "
+"categoría de gastos. Si presta dinero, recibe el interés. En ese caso, "
+"seleccione aquí una categoría de ingresos."
+
+#: wizards/newaccountwizard/rc.cpp:106
+msgid ""
+"Select the account from which you make your periodical payments or where you "
+"receive regular payments in case you lend the money. In most cases, this is "
+"a checking account."
+msgstr ""
+"Seleccione la cuenta de la cual hará los pagos periódicos o en la cual "
+"recibirá pagos periódicos en caso que preste el dinero. En la mayoría de los "
+"casos, ésta será una cuenta corriente."
+
+#: dialogs/rc.cpp:519 wizards/newaccountwizard/rc.cpp:107
+msgid "First payment due on"
+msgstr "El primer pago vence en"
+
+#: wizards/newaccountwizard/rc.cpp:108
+msgid ""
+"For credit card accounts you can create a monthly schedule which will "
+"automatically remind you about the payment. Please fill in the details about "
+"this payment here."
+msgstr ""
+"Para cuentas de tarjeta de crédito puede crear una programación mensual que "
+"le recuerde automáticamente acerca del pago. Por favor ingrese los detalles "
+"de este pago aquí."
+
+#: wizards/newaccountwizard/rc.cpp:109
+msgid "Yes, remind me when the payment is due"
+msgstr "Si, recordarme cuando el pago vence"
+
+#: wizards/newaccountwizard/rc.cpp:110
+msgid "Name of schedule"
+msgstr "Nombre de la planificación"
+
+#: dialogs/rc.cpp:151 dialogs/rc.cpp:218 dialogs/rc.cpp:219
+#: reports/listtable.cpp:199 views/kscheduledview.cpp:72 widgets/rc.cpp:113
+#: widgets/register.cpp:57 wizards/newaccountwizard/rc.cpp:111
+msgid "Payee"
+msgstr "Beneficiario"
+
+#: wizards/newaccountwizard/rc.cpp:112
+msgid "Estimated monthly payment"
+msgstr "Pago mensual estimado"
+
+#: wizards/newaccountwizard/rc.cpp:113
+msgid "Due date of next payment"
+msgstr "Fecha de vencimiento del próximo pago"
+
+#: wizards/newaccountwizard/rc.cpp:114
+msgid ""
+"Payment should be made\n"
+"from account"
+msgstr ""
+"El pago debe realizarse\n"
+"desde una cuenta"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:79
+msgid "KMyMoney New File Setup"
+msgstr "Configuración de Nuevo Archivo de KMyMoney"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:81
+msgid "Introduction"
+msgstr "Introducción"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:82
+msgid "Personal Data"
+msgstr "Datos Personales"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:83
+msgid "Select Currency"
+msgstr "Escoger divisa"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:84
+msgid "Select Accounts"
+msgstr "Seleccionar Cuentas"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:85
+msgid "Set preferences"
+msgstr "Escoger sus preferencias"
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid ""
+"Unable to load data, because no contact has been associated with the owner "
+"of the standard addressbook."
+msgstr ""
+"No ha sido posible cargar los datos, porque no se ha asociado ningún "
+"contacto con el propietario de la libreta de direcciones estándar."
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid "Addressbook import"
+msgstr "Importar Libreta de Direcciones"
+
+#: wizards/newuserwizard/rc.cpp:1
+msgid ""
+"A typical KMyMoney user maintains a checking a account with some institution "
+"and uses it to receive money or pay bills. If this is not the case, please "
+"deselect the checkbox below and continue on the next page."
+msgstr ""
+"Un usuario típico de KMyMoney mantiene una cuenta corriente con alguna "
+"organización y la utiliza para recibir dinero o pagar facturas. Si éste no "
+"es el caso, por favor desmarque la casilla debajo y continúe a la siguiente "
+"página."
+
+#: wizards/newuserwizard/rc.cpp:2
+msgid "I have a checking account that I want to manage with KMyMoney"
+msgstr "Tengo una cuenta corriente que deseo administrar con KMyMoney"
+
+#: wizards/newuserwizard/rc.cpp:3
+msgid "The name of the instititution that issued the account."
+msgstr "El nombre de la organización emisora de la cuenta."
+
+#: wizards/newuserwizard/rc.cpp:4
+msgid ""
+"Each institution has a routing number. Enter it here. If uncertain, leave "
+"the field blank. You can modify it later."
+msgstr ""
+"Cada organización tiene un número de identificación. Ingreselo aquí. Si no "
+"está seguro, deje el campo en blanco. Puede modificarlo luego."
+
+#: wizards/newuserwizard/rc.cpp:5
+msgid "Name of the institution"
+msgstr "Nombre de la Organización"
+
+#: wizards/newuserwizard/rc.cpp:6
+msgid "Routing number"
+msgstr "Número de Ruta"
+
+#: wizards/newuserwizard/rc.cpp:7
+msgid ""
+"In general the institution that issued the account also issued a number for "
+"it. Enter it here. If uncertain, you can modify this entry later."
+msgstr ""
+"Generalmente la organización que emitió la cuenta, también emitió un número "
+"para la cuenta. Ingréselo aquí. Si no está seguro, puede modificarlo luego."
+
+#: wizards/newuserwizard/rc.cpp:8
+msgid ""
+"Enter a descriptive name that will be used by KMyMoney to identify your "
+"checking account."
+msgstr ""
+"Ingrese un nombre descriptivo que será utilizado por KMyMoney para "
+"identificar su cuenta corriente."
+
+#: wizards/newuserwizard/rc.cpp:10
+msgid ""
+"Enter the date from when on you plan to keep track of the transactions in "
+"that account. This is usually the date of the last statement. If uncertain, "
+"leave as is."
+msgstr ""
+"Ingrese la fecha desde cuando planea llevar registro de sus asientos en esta "
+"cuenta. Esta es usualmente la fecha de su último resumen. Si no está seguro, "
+"déjela como está."
+
+#: wizards/newuserwizard/rc.cpp:11
+msgid "Number of the account"
+msgstr "Nombre de la cuenta"
+
+#: wizards/newuserwizard/rc.cpp:12
+msgid "Name of the account"
+msgstr "Nombre de la cuenta"
+
+#: wizards/newuserwizard/rc.cpp:15
+msgid ""
+"Enter the opening balance of the account. This is usually the ending balance "
+"of the last statement. If uncertain, leave as is."
+msgstr ""
+"Ingrese el saldo de apertura de esta cuenta. Es usualmente el saldo final de "
+"su último resumen. Si no está seguro, déjelo como está."
+
+#: wizards/newuserwizard/rc.cpp:16
+msgid ""
+"The fields below allow you to enter some information about your checking "
+"account. Once this wizard finishes, the account will be created for you "
+"within KMyMoney."
+msgstr ""
+"Los campos debajo le permiten ingresar información sobre su cuenta "
+"corriente. Una vez que finalice este asistente, esta cuenta será creada para "
+"usted en KMyMoney."
+
+#: wizards/newuserwizard/rc.cpp:17
+msgid ""
+"KMyMoney supports multiple currencies. Your reports will be based on a "
+"default curreny which you can select here. The default for new accounts is "
+"also the currency you select here."
+msgstr ""
+"KMyMoney permite trabajar con múltiples divisas. Sus informes estarán "
+"basados en una divisa por defecto, que usted puede seleccionar aquí. La "
+"divisa por defecto para nuevas cuentas será también la divisa que seleccione "
+"aquí."
+
+#: wizards/newuserwizard/rc.cpp:18
+msgid ""
+"KMyMoney will store your financial data in a file on the disk. A standard "
+"filename within your KDE user environment will be the default. This is just "
+"provided for convenience and you can choose any other location here."
+msgstr ""
+"KMyMoney guardará sus datos financieros en un archivo en disco. Un nombre de "
+"archivo estándar dentro de su ambiente de usuario de KDE será sugerido. Esto "
+"es sólo provisto por conveniencia y usted puede cambiarlo aquí."
+
+#: wizards/newuserwizard/rc.cpp:19
+msgid ""
+"Either the currently selected file exists or the selected directory does not "
+"exist. Please make sure, that\n"
+"\n"
+"<ul>\n"
+"<li>the selected directory exists and</li>\n"
+"<li>the filename is not currently used in this directory.</li>\n"
+"</ul>"
+msgstr ""
+"El archivo seleccionado existe o la carpeta seleccionada no existe. Por "
+"favor, asegurese que\n"
+"\n"
+"<ul>\n"
+"<li>la carpeta seleccionada existe y</li>\n"
+"<li>el nombre no está siendo utilizado en la carpeta.</li>\n"
+"</ul>"
+
+#: wizards/newuserwizard/rc.cpp:20
+msgid ""
+"This finishes the setup of your KMyMoney environment. You can now press the "
+"Finish button and start using KMyMoney to record your financial transactions."
+msgstr ""
+"Esto finaliza la configuración de su ambiente de KMyMoney. Puede presionar "
+"el botón Finalizar y empezar a utilizar KMyMoney para registrar sus asientos "
+"financieros."
+
+#: wizards/newuserwizard/rc.cpp:21
+msgid ""
+"Please enter some information about yourself.<br><br>\n"
+"\n"
+"This information will be seen and used only by you. The information is used "
+"to personalize KMyMoney, to encrypt your file, etc."
+msgstr ""
+"Por favor ingrese su información persoal.\n"
+"\n"
+"Esta información será vista y utilizada sólo por usted. La información se "
+"utiliza para personalizar KMyMoney, codificar su archivo, etc."
+
+#: wizards/newuserwizard/rc.cpp:28
+msgid "Zip code"
+msgstr "Código postal"
+
+#: wizards/newuserwizard/rc.cpp:30
+msgid "Welcome to KMyMoney!"
+msgstr "Bienvenido a KMyMoney!"
+
+#: wizards/newuserwizard/rc.cpp:31
+msgid ""
+"You have started KMyMoney for the first time on this computer. Before this "
+"program can help you to manage your finances, it needs to collect some data "
+"from you.<p>\n"
+"\n"
+"On the next few pages you will be guided through the steps necessary to "
+"setup the program. This will happen only once."
+msgstr ""
+"Ha iniciado KMyMoney por primera vez en esta computador. Antes que este "
+"programa pueda ayudarlo a administrar sus finanzas, necesita obtener algunos "
+"datos de usted.<p>\n"
+"\n"
+"En las páginas siguientes, usted será guiado a través de los pasos "
+"necesarios para configurar el programa. Esto sólo ocurrirá una vez."
+
+#: wizards/newuserwizard/rc.cpp:32
+msgid ""
+"<p>KMyMoney can encrypt your datafile using GPG Encryption. GPG encryption "
+"is one of the most secure methods in the world for protecting data. All of "
+"your account numbers and other important financial information will be very "
+"secure.</p>"
+msgstr ""
+"<p>KMyMoney puede codificar su archivo de datos utilizando codificación GPG. "
+"La codificación GPG es uno de los métodos más seguros para proteger datos. "
+"Todos sus números de cuenta y otra información financiera importante estarán "
+"muy seguros.</p>"
+
+#: wizards/newuserwizard/rc.cpp:33
+msgid ""
+"If you would like to review or change any preference settings for KMyMoney "
+"at this time, you can do so here. If not just click <b>Next</b>."
+msgstr ""
+"Si desea revisar o cambiar alguna configuración de sus preferencias de "
+"KMyMoney en este momento, puede hacerlo aquí. Si no, sólo presione "
+"<b>Siguiente</b>."
+
+#: wizards/newuserwizard/rc.cpp:34
+msgid "Configure preferences now"
+msgstr "Escoja sus preferencias ahora"
+
+#: wizards/newuserwizard/rc.cpp:35
+msgid ""
+"You can change the configuration options at any time using the configuration "
+"dialog. Just select the <b>Configure KMyMoney...</b> option in the "
+"<b>Settings</b> menu."
+msgstr ""
+"Usted puede cambiar las opciones de configuración en cualquier momento "
+"utilizando el cuadro de diálogo de configuración. Sólo seleccione la opción "
+"<b>Configurar KMyMoney...</b> en el menú <b>Configuración</b>."
+
+#: dialogs/rc.cpp:83 dialogs/rc.cpp:411 dialogs/rc.cpp:435
+#: kmymoneyutils.cpp:92 kmymoneyutils.cpp:105 mymoney/mymoneyaccount.cpp:753
+#: mymoney/mymoneysecurity.cpp:160
+msgid "Stock"
+msgstr "Acción"
+
+#: dialogs/rc.cpp:84 dialogs/rc.cpp:412 dialogs/rc.cpp:436
+#: kmymoneyutils.cpp:107 mymoney/mymoneysecurity.cpp:163
+msgid "Mutual Fund"
+msgstr "Fondo de Inversión"
+
+#: dialogs/rc.cpp:85 dialogs/rc.cpp:413 dialogs/rc.cpp:437
+#: kmymoneyutils.cpp:109 mymoney/mymoneysecurity.cpp:166
+msgid "Bond"
+msgstr "Acción"
+
+#: mymoney/mymoneysecurity.cpp:172 reports/querytable.cpp:1150
+#: widgets/kmymoneyaccountselector.cpp:76
+msgid "None"
+msgstr "Nada"
+
+#: dialogs/rc.cpp:46 kmymoneyutils.cpp:402 mymoney/mymoneyaccount.cpp:759
+#: mymoney/mymoneyscheduled.cpp:1002 mymoney/mymoneysecurity.cpp:175
+#: views/kforecastview.cpp:174 widgets/register.cpp:54
+#: widgets/register.cpp:485 widgets/transaction.cpp:708
+#: widgets/transaction.cpp:1459
+msgid "Unknown"
+msgstr "Desconocida"
+
+#: mymoney/storage/mymoneystoragesql.cpp:191
+msgid ""
+"Database apparently in use\n"
+"Opened by %1 on %2 at %3.\n"
+"Open anyway?"
+msgstr ""
+"La base de datos está aparentemente en uso\n"
+"Abierta por %1 en %2 a las %3.\n"
+"¿Abrir de todas maneras?"
+
+#: mymoney/storage/mymoneystoragesql.cpp:229
+msgid "Cannot currently create database for driver %1; please create manually"
+msgstr ""
+"No se puede crear en este momento la base de datos para el manejador %1. Por "
+"favor, creela manualmente."
+
+#: mymoney/storage/mymoneystoragesql.cpp:244
+msgid "Error in create database %1; do you have create permissions?"
+msgstr "Error al crear base de datos %1. ¿Tiene permisos de creación?"
+
+#: converter/mymoneygncreader.cpp:1329
+#: mymoney/storage/mymoneystoragexml.cpp:166
+msgid "Loading transactions..."
+msgstr "Cargando asientos..."
+
+#: converter/mymoneygncreader.cpp:1190
+#: mymoney/storage/mymoneystoragexml.cpp:173
+msgid "Loading accounts..."
+msgstr "Cargando cuentas..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:180
+msgid "Loading securities..."
+msgstr "Cargando valores bursátiles..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:187
+msgid "Loading reports..."
+msgstr "Cargando reportes..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:268
+msgid "Unknown XML tag %1 found in line %2"
+msgstr "Etiqueta XML desconocida %1 encontrada en línea %2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:274
+msgid "Exception while creating a %1 element: %2"
+msgstr "Excepción al crear un elemento %1: %2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:513
+msgid "Loading file information..."
+msgstr "Cargando información del archivo..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:591
+msgid "Loading user information..."
+msgstr "Cargando información del usuario..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:655
+msgid "Saving accounts..."
+msgstr "Guardando cuentas..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:678
+msgid "Saving transactions..."
+msgstr "Guardando asientos..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:747
+msgid "Saving reports..."
+msgstr "Guardando reportes..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:762
+msgid "Saving budgets..."
+msgstr "Guardando presupuestos..."
+
+#: mymoney/storage/mymoneystoragedump.cpp:414
+msgid "not reconciled"
+msgstr "no reconciliada"
+
+#: mymoney/storage/mymoneystoragedump.cpp:417
+msgid "cleared"
+msgstr "librado"
+
+#: mymoney/storage/mymoneystoragedump.cpp:420
+msgid "reconciled"
+msgstr "reconciliada"
+
+#: mymoney/storage/mymoneystoragedump.cpp:423
+msgid "frozen"
+msgstr "congelada"
+
+#: mymoney/storage/mymoneystoragedump.cpp:426
+msgid "unknown"
+msgstr "desconocido"
+
+#: mymoney/mymoneyaccount.cpp:101
+msgid ""
+"Account %1 contains an opening balance. Please use a KMyMoney version >= 0.8 "
+"and < 0.9 to correct the problem."
+msgstr ""
+"La cuenta %1 contiene un asiento de apertura. Por favor utilice una versión "
+"de KMyMoney >= 0.8 y < 0.9 para corregir el problema."
+
+#: mymoney/mymoneyaccount.cpp:597
+msgid ""
+"_: Brokerage (suffix for account names)\n"
+"Brokerage"
+msgstr "Corretaje"
+
+#: kmymoneyutils.cpp:74 mymoney/mymoneyaccount.cpp:726
+msgid "Certificate of Deposit"
+msgstr "Certificado de Depósito"
+
+#: kmymoneyutils.cpp:78 mymoney/mymoneyaccount.cpp:732
+msgid "Money Market"
+msgstr "Mercado Monetario"
+
+#: converter/mymoneytemplate.cpp:186 converter/mymoneytemplate.cpp:187
+#: dialogs/knewaccountdlg.cpp:1018 kmymoneyutils.cpp:86
+#: mymoney/mymoneyaccount.cpp:744 views/kaccountsview.cpp:360
+#: views/kbudgetview.cpp:372 views/kcategoriesview.cpp:178
+#: views/khomeview.cpp:1813 views/kmymoneyview.cpp:767
+#: widgets/kmymoneyaccountselector.cpp:68
+#: widgets/kmymoneyaccountselector.cpp:179
+#: widgets/kmymoneyaccountselector.cpp:370 widgets/register.cpp:828
+msgid "Income"
+msgstr "Ingreso"
+
+#: converter/mymoneytemplate.cpp:190 converter/mymoneytemplate.cpp:191
+#: dialogs/knewaccountdlg.cpp:1020 kmymoneyutils.cpp:88
+#: mymoney/mymoneyaccount.cpp:747 views/kaccountsview.cpp:364
+#: views/kbudgetview.cpp:378 views/kcategoriesview.cpp:182
+#: views/kmymoneyview.cpp:768 widgets/kmymoneyaccountselector.cpp:72
+#: widgets/kmymoneyaccountselector.cpp:180
+#: widgets/kmymoneyaccountselector.cpp:380 widgets/register.cpp:829
+msgid "Expense"
+msgstr "Gasto"
+
+#: kmymoneyutils.cpp:90 mymoney/mymoneyaccount.cpp:750
+msgid "Investment Loan"
+msgstr "Financiamiento de Inversión"
+
+#: mymoney/mymoneyfile.cpp:47
+msgid "Opening Balances"
+msgstr "Saldos de Apertura"
+
+#: mymoney/mymoneyfile.cpp:398
+msgid "Cannot remove transaction that references a closed account."
+msgstr "No puede borrar asientos que hacen referencia a una cuenta cerrada."
+
+#: mymoney/mymoneyfile.cpp:1414 mymoney/mymoneyfile.cpp:1433
+#: mymoney/mymoneyfile.cpp:1447 mymoney/mymoneyfile.cpp:1469
+msgid "* Problem with account '%1'"
+msgstr "* Problema con la cuenta: '%1'"
+
+#: mymoney/mymoneyfile.cpp:1419
+msgid " * Parent account '%1' belongs to a different group."
+msgstr " * Cuenta madre '%1' pertenece a un grupo diferente."
+
+#: mymoney/mymoneyfile.cpp:1420 mymoney/mymoneyfile.cpp:1450
+msgid " New parent account is the top level account '%1'."
+msgstr " Nueva cuenta madre es la cuenta del nivel superior '%1'."
+
+#: mymoney/mymoneyfile.cpp:1436
+msgid " * Parent account '%1' does not contain '%2' as sub-account."
+msgstr " * La cuenta madre '%1' no contiene a '%2' como subcuenta."
+
+#: mymoney/mymoneyfile.cpp:1449
+msgid " * The parent with id %1 does not exist anymore."
+msgstr " * La madre con el id '%1' ya no existe más."
+
+#: mymoney/mymoneyfile.cpp:1471
+msgid " * Child account with id %1 does not exist anymore."
+msgstr " * Cuenta hija con el id '%1' ya no existe más."
+
+#: mymoney/mymoneyfile.cpp:1472
+msgid " The child account list will be reconstructed."
+msgstr " La lista de cuentas hijas será reconstruida."
+
+#: mymoney/mymoneyfile.cpp:1492
+msgid " * Unable to update account data in engine."
+msgstr " * Incapaz de actualizar los datos de la cuenta en el motor."
+
+#: mymoney/mymoneyfile.cpp:1499
+msgid "* Reconstructing the child lists for"
+msgstr "* Reconstruyendo la lista de cuentas hijas para"
+
+#: mymoney/mymoneyfile.cpp:1536
+msgid " * Unable to update account data for account %1 in engine"
+msgstr ""
+" * Incapaz de actualizar los datos de la cuenta para la cuenta '%1' en el "
+"motor"
+
+#: mymoney/mymoneyfile.cpp:1554
+msgid " * Payee %1 recreated with fixed id"
+msgstr " * Pagador '%1' recreado con id fijo"
+
+#: mymoney/mymoneyfile.cpp:1583
+msgid " * Payee id updated in split of transaction '%1'."
+msgstr " * Id del pagador actualizado en la partida del asiento '%1'."
+
+#: mymoney/mymoneyfile.cpp:1596
+msgid " * shares set to value in split of transaction '%1'."
+msgstr ""
+" * valor asignado a las participaciones en la partida del asiento '%1'."
+
+#: mymoney/mymoneyfile.cpp:1599
+msgid " * value set to shares in split of transaction '%1'."
+msgstr ""
+" * valor asignado a las participaciones en la partida del asiento '%1'."
+
+#: mymoney/mymoneyfile.cpp:1605
+msgid ""
+" * Split %2 in transaction '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+" * La partida '%2' en el asiento '%1' contiene una referencia a la cuenta "
+"inválida '%3'. Por favor arréglela manualmente."
+
+#: mymoney/mymoneyfile.cpp:1616
+msgid " * action marked as interest in split of transaction '%1'."
+msgstr " * acción marcada como interés en partida del asiento '%1'."
+
+#: mymoney/mymoneyfile.cpp:1643
+msgid " * Payee id updated in split of schedule '%1'."
+msgstr " * Id del pagador actualizado en la partida de la programación '%1'."
+
+#: mymoney/mymoneyfile.cpp:1649
+msgid ""
+" * Split in scheduled transaction '%1' contained value != 0 and shares == 0."
+msgstr ""
+" * Partida en la programación '%1' contenía un valor != 0 y acciones == 0."
+
+#: mymoney/mymoneyfile.cpp:1650
+msgid " Shares set to value."
+msgstr " Acciones fijadas al valor."
+
+#: mymoney/mymoneyfile.cpp:1658
+msgid " * Removed bankid from split in scheduled transaction '%1'."
+msgstr ""
+" * Id del pagador eliminado de la partida en el asiento planificado '%1'."
+
+#: mymoney/mymoneyfile.cpp:1671
+msgid " * shares set to value in split in schedule '%1'."
+msgstr ""
+" * valor de participaciones actualizado en la partida de la planificación '%"
+"1'."
+
+#: mymoney/mymoneyfile.cpp:1674
+msgid " * value set to shares in split in schedule '%1'."
+msgstr ""
+" * valor actualizado al valor de las participaciones en la partida de la "
+"programación '%1'."
+
+#: mymoney/mymoneyfile.cpp:1680
+msgid ""
+" * Split %2 in schedule '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+" * Partida '%2' en la programación '%1' contiene una referencia a la cuenta "
+"inválida '%3'. Por favor arréglela manualmente."
+
+#: mymoney/mymoneyfile.cpp:1706
+msgid " * Payee id updated in report '%1'."
+msgstr " * Id del pagador actualizado en el reporte '%1'."
+
+#: mymoney/mymoneyfile.cpp:1723
+msgid " * Payee '%1' removed."
+msgstr " * Pagador '%1' eliminado."
+
+#: mymoney/mymoneyfile.cpp:1730
+msgid "Finish! Data is consistent."
+msgstr "Finalizado! Los datos son consistentes."
+
+#: mymoney/mymoneyfile.cpp:1732
+msgid "Finish! %1 problem(s) corrected. %2 problem(s) still present."
+msgstr ""
+"Finalizado! %1 problema(s) corregido(s). %2 problema(s) aún persiste(n)."
+
+#: mymoney/mymoneyscheduled.cpp:873 mymoney/mymoneyscheduled.cpp:918
+#: mymoney/mymoneyscheduled.cpp:969 mymoney/mymoneyscheduled.cpp:1265
+#: mymoney/mymoneyscheduletest.cpp:1336
+msgid "Once"
+msgstr "Una vez"
+
+#: mymoney/mymoneyscheduled.cpp:875 mymoney/mymoneyscheduled.cpp:924
+#: mymoney/mymoneyscheduled.cpp:1267 mymoney/mymoneyscheduletest.cpp:1337
+#: widgets/rc.cpp:72
+msgid "Daily"
+msgstr "Diariamente"
+
+#: mymoney/mymoneyscheduled.cpp:877 mymoney/mymoneyscheduled.cpp:931
+#: mymoney/mymoneyscheduled.cpp:1269 mymoney/mymoneyscheduletest.cpp:1338
+#: widgets/rc.cpp:73
+msgid "Weekly"
+msgstr "Semanalmente"
+
+#: mymoney/mymoneyscheduled.cpp:881 mymoney/mymoneyscheduled.cpp:932
+#: mymoney/mymoneyscheduled.cpp:1273 mymoney/mymoneyscheduletest.cpp:1339
+msgid "Every other week"
+msgstr "Cada dos semanas"
+
+#: mymoney/mymoneyscheduled.cpp:879 mymoney/mymoneyscheduled.cpp:1271
+#: mymoney/mymoneyscheduletest.cpp:1340
+msgid "Fortnightly"
+msgstr "Quincenal"
+
+#: mymoney/mymoneyscheduled.cpp:883 mymoney/mymoneyscheduled.cpp:941
+#: mymoney/mymoneyscheduled.cpp:1275 mymoney/mymoneyscheduletest.cpp:1341
+msgid "Every half month"
+msgstr "Cada medio mes"
+
+#: mymoney/mymoneyscheduled.cpp:887 mymoney/mymoneyscheduled.cpp:934
+#: mymoney/mymoneyscheduled.cpp:1279 mymoney/mymoneyscheduletest.cpp:1342
+msgid "Every four weeks"
+msgstr "Cada cuatro semanas"
+
+#: mymoney/mymoneyscheduled.cpp:893 mymoney/mymoneyscheduled.cpp:935
+#: mymoney/mymoneyscheduled.cpp:1285 mymoney/mymoneyscheduletest.cpp:1344
+msgid "Every eight weeks"
+msgstr "Cada ocho semanas"
+
+#: mymoney/mymoneyscheduled.cpp:895 mymoney/mymoneyscheduled.cpp:948
+#: mymoney/mymoneyscheduled.cpp:1287 mymoney/mymoneyscheduletest.cpp:1345
+msgid "Every two months"
+msgstr "Bimestral"
+
+#: mymoney/mymoneyscheduled.cpp:897 mymoney/mymoneyscheduled.cpp:949
+#: mymoney/mymoneyscheduled.cpp:1289 mymoney/mymoneyscheduletest.cpp:1346
+msgid "Every three months"
+msgstr "Trimestral"
+
+#: mymoney/mymoneyscheduled.cpp:899 mymoney/mymoneyscheduled.cpp:1291
+#: mymoney/mymoneyscheduletest.cpp:1347 widgets/rc.cpp:76
+msgid "Quarterly"
+msgstr "Trimestralmente"
+
+#: mymoney/mymoneyscheduled.cpp:901 mymoney/mymoneyscheduled.cpp:950
+#: mymoney/mymoneyscheduled.cpp:1293 mymoney/mymoneyscheduletest.cpp:1348
+msgid "Every four months"
+msgstr "Cuatrimestral"
+
+#: mymoney/mymoneyscheduled.cpp:903 mymoney/mymoneyscheduled.cpp:951
+#: mymoney/mymoneyscheduled.cpp:1295 mymoney/mymoneyscheduletest.cpp:1349
+msgid "Twice yearly"
+msgstr "Bianualmente"
+
+#: mymoney/mymoneyscheduled.cpp:905 mymoney/mymoneyscheduled.cpp:957
+#: mymoney/mymoneyscheduled.cpp:1297 mymoney/mymoneyscheduletest.cpp:1350
+#: widgets/rc.cpp:20 widgets/rc.cpp:77
+msgid "Yearly"
+msgstr "Anual"
+
+#: mymoney/mymoneyscheduled.cpp:907 mymoney/mymoneyscheduled.cpp:958
+#: mymoney/mymoneyscheduled.cpp:1299 mymoney/mymoneyscheduletest.cpp:1351
+msgid "Every other year"
+msgstr "Bienal"
+
+#: mymoney/mymoneyscheduled.cpp:870 mymoney/mymoneyscheduled.cpp:913
+#: mymoney/mymoneyscheduled.cpp:966
+msgid "Any"
+msgstr "Cualquier"
+
+#: mymoney/mymoneyscheduled.cpp:885 mymoney/mymoneyscheduled.cpp:933
+#: mymoney/mymoneyscheduled.cpp:1277
+msgid "Every three weeks"
+msgstr "Cada tres semanas"
+
+#: mymoney/mymoneyscheduled.cpp:889 mymoney/mymoneyscheduled.cpp:925
+#: mymoney/mymoneyscheduled.cpp:1281
+msgid "Every thirty days"
+msgstr "Cada treinta días"
+
+#: mymoney/mymoneyscheduled.cpp:971
+msgid "Day"
+msgstr "Día"
+
+#: mymoney/mymoneyscheduled.cpp:973 reports/listtable.cpp:206
+#: widgets/kmymoneycalendar.cpp:123 widgets/rc.cpp:97
+msgid "Week"
+msgstr "Semana"
+
+#: mymoney/mymoneyscheduled.cpp:975
+msgid "Half-month"
+msgstr "Medio mes"
+
+#: mymoney/mymoneyscheduled.cpp:977 reports/listtable.cpp:205
+#: widgets/kmymoneycalendar.cpp:124 widgets/rc.cpp:96
+msgid "Month"
+msgstr "Mes"
+
+#: dialogs/rc.cpp:400 mymoney/mymoneyscheduled.cpp:979 views/rc.cpp:14
+msgid "Year"
+msgstr "Año"
+
+#: mymoney/mymoneyscheduled.cpp:989
+msgid "Bill"
+msgstr "Recibo"
+
+#: dialogs/rc.cpp:107 dialogs/rc.cpp:162 dialogs/rc.cpp:249 dialogs/rc.cpp:754
+#: mymoney/mymoneyscheduled.cpp:992 widgets/kmymoneycombo.cpp:420
+#: widgets/register.cpp:571
+msgid "Deposit"
+msgstr "Depósito"
+
+#: mymoney/mymoneyscheduled.cpp:995 reports/querytable.cpp:594
+#: reports/querytable.cpp:696 widgets/kmymoneycombo.cpp:419
+msgid "Transfer"
+msgstr "Transferencia"
+
+#: mymoney/mymoneyscheduled.cpp:1035
+msgid "Any (Error)"
+msgstr "Cualquier (Error)"
+
+#: dialogs/rc.cpp:114 mymoney/mymoneyscheduled.cpp:1047
+msgid "Change the date to the previous Friday"
+msgstr "Cambiar la fecha al Viernes anterior"
+
+#: dialogs/rc.cpp:115 mymoney/mymoneyscheduled.cpp:1050
+msgid "Change the date to the next Monday"
+msgstr "Cambiar la fecha al Lunes siguiente"
+
+#: mymoney/mymoneyscheduled.cpp:1053
+msgid "Do Nothing"
+msgstr "No hacer nada"
+
+#: kmymoney2.cpp:312
+msgid "Open database..."
+msgstr "Abrir base de datos..."
+
+#: kmymoney2.cpp:313
+msgid "Save as database..."
+msgstr "Guardar como base de datos..."
+
+#: kmymoney2.cpp:314
+msgid "Backup..."
+msgstr "Copia de Respaldo..."
+
+#: kmymoney2.cpp:315 kmymoney2.cpp:321
+msgid "QIF..."
+msgstr "QIF..."
+
+#: kmymoney2.cpp:316
+msgid "Gnucash..."
+msgstr "Gnucash..."
+
+#: kmymoney2.cpp:317
+msgid "Statement file..."
+msgstr "Archivo de extracto..."
+
+#: kmymoney2.cpp:319 kmymoney2.cpp:320
+msgid "Account Template..."
+msgstr "Plantilla de Cuenta..."
+
+#: kmymoney2.cpp:322
+msgid "Personal Data..."
+msgstr "Datos Personales..."
+
+#: kmymoney2.cpp:325
+msgid "Dump Memory"
+msgstr "Volcado de Memoria"
+
+#: kmymoney2.cpp:327
+msgid "File-Information..."
+msgstr "Información del Archivo"
+
+#: kmymoney2.cpp:332
+msgid "Find transaction..."
+msgstr "Buscar asiento..."
+
+#: kmymoney2.cpp:337
+msgid "Show Transaction Detail"
+msgstr "Mostrar Detalles del Asiento"
+
+#: kmymoney2.cpp:338 rc.cpp:60
+msgid "Hide reconciled transactions"
+msgstr "Ocultar asientos reconciliados"
+
+#: kmymoney2.cpp:339 rc.cpp:57
+msgid "Hide unused categories"
+msgstr "Ocultar Categorías no utilizadas"
+
+#: kmymoney2.cpp:340
+msgid "Show all accounts"
+msgstr "Mostrar todas las cuentas"
+
+#: kmymoney2.cpp:345
+msgid "New institution..."
+msgstr "Nueva Organización..."
+
+#: kmymoney2.cpp:346
+msgid "Edit institution..."
+msgstr "Editar organización..."
+
+#: kmymoney2.cpp:347
+msgid "Delete institution..."
+msgstr "Borrar organización..."
+
+#: kmymoney2.cpp:352
+msgid "New account..."
+msgstr "Nueva Cuenta..."
+
+#: kmymoney2.cpp:354
+msgid "Open ledger"
+msgstr "Abrir libro mayor"
+
+#: kmymoney2.cpp:355
+msgid "Reconcile..."
+msgstr "Reconciliar..."
+
+#: kmymoney2.cpp:356
+msgid ""
+"_: Finish reconciliation\n"
+"Finish"
+msgstr "Finalizar"
+
+#: kmymoney2.cpp:357
+msgid ""
+"_: Postpone reconciliation\n"
+"Postpone"
+msgstr "Aplazar"
+
+#: kmymoney2.cpp:358
+msgid "Edit account..."
+msgstr "Editar cuenta..."
+
+#: kmymoney2.cpp:359
+msgid "Delete account..."
+msgstr "Borrar cuenta..."
+
+#: kmymoney2.cpp:360
+msgid "Close account"
+msgstr "Cerrar cuenta"
+
+#: kmymoney2.cpp:361
+msgid "Reopen account"
+msgstr "Reabrir cuenta"
+
+#: kmymoney2.cpp:362
+msgid "Transaction report"
+msgstr "Informe de transacciones"
+
+#: kmymoney2.cpp:364
+msgid "Show balance chart..."
+msgstr "Mostrar gráfico de saldos..."
+
+#: kmymoney2.cpp:366
+msgid "Map to online account"
+msgstr "Vincular a cuenta online"
+
+#: kmymoney2.cpp:367
+msgid "Unmap account"
+msgstr "Desvincular cuenta"
+
+#: dialogs/settings/rc.cpp:126 kmymoney2.cpp:368 views/kpayeesview.cpp:363
+#: widgets/rc.cpp:50
+msgid "Update"
+msgstr "Actualizar"
+
+#: kmymoney2.cpp:372
+msgid "Update account..."
+msgstr "Actualizar cuenta..."
+
+#: kmymoney2.cpp:373
+msgid "Update all accounts..."
+msgstr "Actualizar todas las cuentas..."
+
+#: kmymoney2.cpp:378
+msgid "New category..."
+msgstr "Nueva Categoría..."
+
+#: kmymoney2.cpp:379
+msgid "Edit category..."
+msgstr "Editar categoría..."
+
+#: kmymoney2.cpp:380
+msgid "Delete category..."
+msgstr "Borrar categoría..."
+
+#: kmymoney2.cpp:386
+msgid "QIF Profile Editor..."
+msgstr "Editor de perfiles QIF..."
+
+#: kmymoney2.cpp:387
+msgid "Securities..."
+msgstr "Valores bursátiles..."
+
+#: kmymoney2.cpp:388
+msgid "Currencies..."
+msgstr "Divisas..."
+
+#: kmymoney2.cpp:389
+msgid "Prices..."
+msgstr "Precios..."
+
+#: kmymoney2.cpp:390
+msgid "Update Stock and Currency Prices..."
+msgstr "Actualizar precios de Acciones y Divisas..."
+
+#: kmymoney2.cpp:391
+msgid "Consistency Check"
+msgstr "Comprobación de Consistencia"
+
+#: kmymoney2.cpp:392
+msgid "Performance-Test"
+msgstr "Test de desempeño"
+
+#: kmymoney2.cpp:393
+msgid "KCalc..."
+msgstr "KCalc..."
+
+#: kmymoney2.cpp:399
+msgid "Enable all messages"
+msgstr "Permitir todos los mensajes"
+
+#: kmymoney2.cpp:400
+msgid "KDE language settings..."
+msgstr "Configuración de lenguaje de KDE..."
+
+#: kmymoney2.cpp:405
+msgid "&Show tip of the day"
+msgstr "Consejo del &Día"
+
+#: kmymoney2.cpp:410
+msgid ""
+"_: New transaction button\n"
+"New"
+msgstr "Nuevo"
+
+#: kmymoney2.cpp:415
+msgid ""
+"_: Edit transaction button\n"
+"Edit"
+msgstr "Editar"
+
+#: kmymoney2.cpp:417
+msgid ""
+"_: Enter transaction\n"
+"Enter"
+msgstr "Ingresar"
+
+#: kmymoney2.cpp:420
+msgid ""
+"_: Edit split button\n"
+"Edit splits"
+msgstr "Editar partidas"
+
+#: kmymoney2.cpp:421
+msgid ""
+"_: Cancel transaction edit\n"
+"Cancel"
+msgstr "Cancelar"
+
+#: kmymoney2.cpp:422
+msgid ""
+"_: Delete transaction\n"
+"Delete"
+msgstr "Borrar"
+
+#: kmymoney2.cpp:423
+msgid ""
+"_: Duplicate transaction\n"
+"Duplicate"
+msgstr "Duplicar"
+
+#: kmymoney2.cpp:425 kmymoney2.cpp:4826 kmymoney2.cpp:5107
+msgid ""
+"_: Button text for match transaction\n"
+"Match"
+msgstr "Conciliar"
+
+#: kmymoney2.cpp:426
+msgid ""
+"_: Accept 'imported' and 'matched' transaction\n"
+"Accept"
+msgstr "Aceptar"
+
+#: kmymoney2.cpp:428
+msgid ""
+"_: Toggle reconciliation flag\n"
+"Toggle"
+msgstr "Cambiar"
+
+#: kmymoney2.cpp:429
+msgid ""
+"_: Mark transaction cleared\n"
+"Cleared"
+msgstr "Librado"
+
+#: kmymoney2.cpp:430
+msgid ""
+"_: Mark transaction reconciled\n"
+"Reconciled"
+msgstr "Reconciliado"
+
+#: kmymoney2.cpp:431
+msgid ""
+"_: Mark transaction not reconciled\n"
+"Not reconciled"
+msgstr "No reconciliado"
+
+#: kmymoney2.cpp:432
+msgid ""
+"_: Select all transactions\n"
+"Select all"
+msgstr "Seleccionar todos"
+
+#: kmymoney2.cpp:434 kmymoney2.cpp:5497
+msgid "Goto account"
+msgstr "Ir a cuenta"
+
+#: kmymoney2.cpp:435 kmymoney2.cpp:5495
+msgid "Goto payee"
+msgstr "Ir a pagador/beneficiario"
+
+#: kmymoney2.cpp:436
+msgid "Create scheduled transaction..."
+msgstr "Introducir asiento planificado..."
+
+#: kmymoney2.cpp:437
+msgid "Assign next number"
+msgstr "Asignar siguiente número"
+
+#: kmymoney2.cpp:438
+msgid ""
+"_: Combine transactions\n"
+"Combine"
+msgstr "Combinar"
+
+#: kmymoney2.cpp:440
+msgid "New investment"
+msgstr "Nueva inversión"
+
+#: kmymoney2.cpp:441
+msgid "Edit investment..."
+msgstr "Editar inversión..."
+
+#: kmymoney2.cpp:442
+msgid "Delete investment..."
+msgstr "Borrar inversión..."
+
+#: kmymoney2.cpp:443
+msgid "Online price update..."
+msgstr "Actualizar precio online..."
+
+#: kmymoney2.cpp:444
+msgid "Manual price update..."
+msgstr "Actualizar precio manualmente..."
+
+#: kmymoney2.cpp:446
+msgid "New scheduled transaction..."
+msgstr "Nuevo asiento planificado..."
+
+#: kmymoney2.cpp:447
+msgid "Edit scheduled transaction..."
+msgstr "Editar asiento planificado..."
+
+#: kmymoney2.cpp:448
+msgid "Delete scheduled transaction..."
+msgstr "Borrar asiento planificado..."
+
+#: kmymoney2.cpp:449
+msgid "Duplicate scheduled transaction"
+msgstr "Duplicar asiento planificado"
+
+#: kmymoney2.cpp:450
+msgid "Enter next transaction..."
+msgstr "Introducir próximo asiento..."
+
+#: kmymoney2.cpp:451
+msgid "Skip next transaction..."
+msgstr "Saltear próximo asiento..."
+
+#: kmymoney2.cpp:453
+msgid "New payee"
+msgstr "Nuevo pagador/beneficiario"
+
+#: kmymoney2.cpp:454
+msgid "Rename payee"
+msgstr "Renombrar pagador/beneficiario"
+
+#: kmymoney2.cpp:455
+msgid "Delete payee"
+msgstr "Borrar pagador/beneficiario"
+
+#: kmymoney2.cpp:457
+msgid "New budget"
+msgstr "Nuevo presupuesto"
+
+#: kmymoney2.cpp:458
+msgid "Rename budget"
+msgstr "Renombrar presupuesto"
+
+#: kmymoney2.cpp:459
+msgid "Delete budget"
+msgstr "Borrar presupuesto"
+
+#: kmymoney2.cpp:460
+msgid "Copy budget"
+msgstr "Copiar presupuesto"
+
+#: kmymoney2.cpp:461
+msgid "Change budget year"
+msgstr "Cambiar año del presupuesto"
+
+#: kmymoney2.cpp:462
+msgid ""
+"_: Budget based on forecast\n"
+"Forecast"
+msgstr "Pronosticar"
+
+#: kmymoney2.cpp:467 kmymoney2.cpp:3990 kmymoney2.cpp:3993 kmymoney2.cpp:3999
+msgid "New currency"
+msgstr "Nueva divisa"
+
+#: kmymoney2.cpp:468 kmymoney2.cpp:4021 kmymoney2.cpp:4026
+msgid "Rename currency"
+msgstr "Renombrar divisa"
+
+#: kmymoney2.cpp:469 kmymoney2.cpp:4039
+msgid "Delete currency"
+msgstr "Borrar divisa"
+
+#: dialogs/rc.cpp:69 kmymoney2.cpp:470
+msgid "Select as base currency"
+msgstr "Escoger como divisa base"
+
+#: kmymoney2.cpp:481
+msgid "View back"
+msgstr "Vista atrás"
+
+#: kmymoney2.cpp:482
+msgid "View forward"
+msgstr "Vista adelante"
+
+#: kmymoney2.cpp:611
+msgid "KMyMoney file needs saving. Save ?"
+msgstr "El archivo de KMyMoney necesita ser guardado. ¿Guardar?"
+
+#: kmymoney2.cpp:757
+msgid "Creating new document..."
+msgstr "Creando nuevo documento..."
+
+#: kmymoney2.cpp:869 kmymoney2.cpp:884
+msgid "Open a file."
+msgstr "Abrir un archivo."
+
+#: kmymoney2.cpp:872
+msgid ""
+"%1|KMyMoney files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Archivos KMyMoney\n"
+"%2|Todos los archivos (*.*)"
+
+#: kmymoney2.cpp:873
+msgid "Open File..."
+msgstr "Abrir Archivo..."
+
+#: kmymoney2.cpp:925 kstartuplogo.cpp:100
+msgid "Loading file..."
+msgstr "Cargando archivo..."
+
+#: kmymoney2.cpp:986
+msgid ""
+"<b>%1</b> is either an invalid filename or the file does not exist. You can "
+"open another file or create a new one."
+msgstr ""
+"<b>%1</b> no existe o tiene otro nombre. Puede abrir otro archivo o crear "
+"uno nuevo."
+
+#: kmymoney2.cpp:986
+msgid "File not found"
+msgstr "Archivo no encontrado"
+
+#: kmymoney2.cpp:989
+msgid "File <b>%1</b> is already opened in another instance of KMyMoney"
+msgstr "El archivo <b>%1</b> ya está abierto por otra instancia de KMyMoney"
+
+#: kmymoney2.cpp:989
+msgid "Duplicate open"
+msgstr "Abrir un Duplicado"
+
+#: kmymoney2.cpp:1001
+msgid "Saving file..."
+msgstr "Guardando archivo..."
+
+#: kmymoney2.cpp:1035 kmymoney2.cpp:1047 kmymoney2.cpp:1071
+#, c-format
+msgid "Additional encryption key(s) to be used: %1"
+msgstr "Claves de codificación adicionales a utilizar: %1"
+
+#: kmymoney2.cpp:1056
+msgid "Saving file with a new filename..."
+msgstr "Guardando archivo con un nuevo nombre..."
+
+#: kmymoney2.cpp:1067
+msgid "Encryption key to be used"
+msgstr "Clave de codificación a utilizar"
+
+#: kmymoney2.cpp:1072
+msgid "Manage additional keys"
+msgstr "Gestionar claves adicionales"
+
+#: kmymoney2.cpp:1079
+msgid "No encryption"
+msgstr "Sin codificación"
+
+#: kmymoney2.cpp:1102
+msgid ""
+"_: KMyMoney (Filefilter)\n"
+"KMyMoney files"
+msgstr "Archivos de KMyMoney"
+
+#: kmymoney2.cpp:1103
+msgid ""
+"_: XML (Filefilter)\n"
+"XML files"
+msgstr "Archivos XML"
+
+#: kmymoney2.cpp:1104
+msgid ""
+"_: Anonymous (Filefilter)\n"
+"Anonymous files"
+msgstr "Archivos Anónimos"
+
+#: kmymoney2.cpp:1105
+msgid "All files"
+msgstr "Todos los archivos"
+
+#: kmymoney2.cpp:1193
+msgid "Saving file to database..."
+msgstr "Guardando archivo a la base de datos..."
+
+#: kmymoney2.cpp:1207
+msgid "Cannot save to current database."
+msgstr "No se puede guardar la base de datos."
+
+#: kmymoney2.cpp:1225
+msgid "Closing window..."
+msgstr "Cerrando ventana..."
+
+#: kmymoney2.cpp:1228 kmymoney2.cpp:1249
+msgid "The file has been changed, save it ?"
+msgstr "El archivo fue modificado, ¿desea guardarlo?"
+
+#: kmymoney2.cpp:1339 kmymoney2.cpp:1352
+msgid "Ready."
+msgstr "Listo."
+
+#: kmymoney2.cpp:1397 kmymoney2.cpp:1433
+msgid "No KMyMoneyFile open"
+msgstr "No hay abierto ningún archivo de KMyMoney"
+
+#: kmymoney2.cpp:1401
+msgid "Viewing personal data..."
+msgstr "Visualizando datos personales..."
+
+#: kmymoney2.cpp:1408
+msgid "Edit Personal Data"
+msgstr "Editar Datos Personales"
+
+#: kmymoney2.cpp:1424
+#, c-format
+msgid "Unable to store user information: %1"
+msgstr "No fue posible guardar la información del usuario: %1"
+
+#: kmymoney2.cpp:1447
+msgid "Importing account templates."
+msgstr "Importando plantillas de cuentas."
+
+#: kmymoney2.cpp:1462
+msgid "Unable to import template(s): %1, thrown in %2:%3"
+msgstr "No ha sido posible importar plantilla(s) %1, arrojado en %2:%3"
+
+#: kmymoney2.cpp:1471
+msgid "Exporting account templates."
+msgstr "Importando plantillas de cuentas."
+
+#: kmymoney2.cpp:1474
+msgid ""
+"*.kmt|KMyMoney template files\n"
+"*.*|All files"
+msgstr ""
+"*.kmt|Plantillas de KMyMoney\n"
+"*.*|Todos los archivos"
+
+#: kmymoney2.cpp:1475
+msgid "Save as..."
+msgstr "Guardar como..."
+
+#: kmymoney2.cpp:1517
+msgid "Importing file..."
+msgstr "Importando archivo..."
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "The statements have been processed with the following results:"
+msgstr "Los extractos han sido procesados, con los siguientes resultados:"
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:1754 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "Statement stats"
+msgstr "Estadísticas del extracto"
+
+#: kmymoney2.cpp:1602
+msgid ""
+"You cannot import GnuCash data into an existing file. Do you wish to save "
+"this file?"
+msgstr ""
+"No puede importar datos de GnuCash a un archivo existente. ¿Desea guardar "
+"este archivo?"
+
+#: kmymoney2.cpp:1615
+msgid "Importing a Gnucash file."
+msgstr "Importando archivo de Gnucash."
+
+#: kmymoney2.cpp:1618
+msgid ""
+"%1|Gnucash files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Archivos de Gnucash\n"
+"%2|Todos los archivos (*.*)"
+
+#: kmymoney2.cpp:1619
+msgid "Import Gnucash file..."
+msgstr "Importar archivo de Gnucash..."
+
+#: kmymoney2.cpp:1658
+msgid "Importing an XML Statement."
+msgstr "Importando un Extracto XML"
+
+#: kmymoney2.cpp:1661
+msgid ""
+"%1|XML files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Archivos XML\n"
+"%2|Todos los archivos (*.*)"
+
+#: kmymoney2.cpp:1662
+msgid "Import XML Statement..."
+msgstr "Importar Extracto XML..."
+
+#: kmymoney2.cpp:1718
+msgid "Error importing %1: This file is not a valid KMM statement file."
+msgstr "Error importando %1: Este archivo no es un extracto de KMM válido."
+
+#: kmymoney2.cpp:1718
+msgid "Invalid Statement"
+msgstr "Extracto no válido"
+
+#: kmymoney2.cpp:1754
+msgid "The statement has been processed with the following results:"
+msgstr "El extracto ha sido procesado, con los siguientes resultados:"
+
+#: kmymoney2.cpp:1763
+msgid "Exporting file..."
+msgstr "Exportando archivo..."
+
+#: kmymoney2.cpp:1786
+msgid "The file <b>%1</b> already exists. Do you really want to override it?"
+msgstr ""
+"El archivo <b>%1</b> ya existe. ¿Está seguro que desea sobreescribirlo?"
+
+#: kmymoney2.cpp:1786
+msgid "File already exists"
+msgstr "El archivo ya existe"
+
+#: dialogs/rc.cpp:347 dialogs/rc.cpp:649 dialogs/rc.cpp:798 kmymoney2.cpp:1815
+msgid "General"
+msgstr "General"
+
+#: kmymoney2.cpp:1816
+msgid "Register"
+msgstr "Registro"
+
+#: kmymoney2.cpp:1817 views/khomeview.cpp:88 views/kmymoneyview.cpp:136
+msgid "Home"
+msgstr "Inicio"
+
+#: kmymoney2.cpp:1818 views/kmymoneyview.cpp:176
+msgid ""
+"Scheduled\n"
+"transactions"
+msgstr "Asientos Planificados"
+
+#: kmymoney2.cpp:1819
+msgid "Encryption"
+msgstr "Cifrado"
+
+#: kmymoney2.cpp:1820
+msgid "Colors"
+msgstr "Colores"
+
+#: dialogs/rc.cpp:344 dialogs/settings/rc.cpp:107 kmymoney2.cpp:1822
+#: widgets/rc.cpp:33
+msgid "Online Quotes"
+msgstr "Cotizaciones Online"
+
+#: kmymoney2.cpp:1823 reports/pivottable.cpp:2426 views/kmymoneyview.cpp:251
+#: views/kmymoneyview.cpp:253 views/kreportsview.cpp:1415 views/rc.cpp:41
+msgid "Forecast"
+msgstr "Pronóstico"
+
+#: kmymoney2.cpp:1824
+msgid "Plugins"
+msgstr "Extensiones"
+
+#: kmymoney2.cpp:1893
+msgid ""
+"The file must be saved first before it can be backed up. Do you want to "
+"continue?"
+msgstr ""
+"El archivo debe ser guardado antes de poder hacerle una copia de seguridad. "
+"¿Desea continuar?"
+
+#: kmymoney2.cpp:1910
+msgid ""
+"The current implementation of the backup functionality only supports local "
+"files as source files! Your current source file is '%1'."
+msgstr ""
+"¡La implementación actual de la función de seguridad solo permite usar "
+"archivos locales como origenes! Su archivo origen actual es \"%1\"."
+
+#: kmymoney2.cpp:1913
+msgid "Local files only"
+msgstr "Sólo archivos locales"
+
+#: kmymoney2.cpp:1928
+#, c-format
+msgid "Mounting %1"
+msgstr "Montando %1"
+
+#: kmymoney2.cpp:1967
+msgid "Backup file for today exists on that device. Replace ?"
+msgstr ""
+"Ya existe una copia de seguridad de hoy en ese dispositivo. ¿Reemplazar?"
+
+#: dialogs/rc.cpp:7 kmymoney2.cpp:1967 kmymoney2.cpp:1994 kmymoney2.cpp:2024
+#: kmymoney2.cpp:2032 kmymoney2.cpp:2057 kmymoney2.cpp:2059
+msgid "Backup"
+msgstr "Copia de seguridad"
+
+#: kmymoney2.cpp:1967
+msgid "&Replace"
+msgstr "&Reemplazar"
+
+#: kmymoney2.cpp:1972 kmymoney2.cpp:1997 kmymoney2.cpp:2016 kmymoney2.cpp:2035
+#, c-format
+msgid "Unmounting %1"
+msgstr "Desmontando %1"
+
+#: kmymoney2.cpp:1987
+#, c-format
+msgid "Writing %1"
+msgstr "Escribiendo %1"
+
+#: kmymoney2.cpp:1994
+msgid "Error mounting device"
+msgstr "Error montando dispositivo"
+
+#: converter/mymoneygncreader.cpp:1995 kmymoney2.cpp:2023 kmymoney2.cpp:2055
+msgid "Done"
+msgstr "Listo"
+
+#: kmymoney2.cpp:2024 kmymoney2.cpp:2057
+msgid "File successfully backed up"
+msgstr "El archivo fue respaldado con éxito"
+
+#: kmymoney2.cpp:2032
+msgid "Error copying file to device"
+msgstr "Error al copiar el archivo en el dispositivo"
+
+#: kmymoney2.cpp:2059
+msgid "Error unmounting device"
+msgstr "Error desmontando dispositivo"
+
+#: kmymoney2.cpp:2143
+#, c-format
+msgid "Cannot add institution: %1"
+msgstr "No se pudo añadir la organización: %1"
+
+#: kmymoney2.cpp:2185
+#, c-format
+msgid "Unable to store institution: %1"
+msgstr "No fue posible guardar la organización: %1"
+
+#: kmymoney2.cpp:2192
+#, c-format
+msgid "Unable to edit institution: %1"
+msgstr "No fue posible editar la organización: %1"
+
+#: kmymoney2.cpp:2203
+msgid "Do you really want to delete institution <b>%1</b> ?"
+msgstr "¿Quiere realmente borrar la organización <b>%1</b>?"
+
+#: kmymoney2.cpp:2211 kmymoney2.cpp:2215
+#, c-format
+msgid "Unable to delete institution: %1"
+msgstr "No fue posible borrar la organización: %1"
+
+#: kmymoney2.cpp:2268
+#, c-format
+msgid "Unable to find account: %1"
+msgstr "No fue posible encontrar la cuenta: %1"
+
+#: kmymoney2.cpp:2309
+msgid ""
+"This account is a liability and if the opening balance represents money "
+"owed, then it should be negative. Negate the amount?\n"
+"\n"
+"Please click Yes to change the opening balance to %1,\n"
+"Please click No to leave the amount as %2,\n"
+"Please click Cancel to abort the account creation."
+msgstr ""
+"Esta cuenta es un pasivo y si el saldo de apertura representa dinero debido, "
+"deberá ser negativo. ¿Cambiar el signo del saldo?\n"
+"\n"
+"Pulse Sí para cambiar el saldo de apertura a %1,\n"
+"Pulse No para dejar la cantidad como está, %2,\n"
+"Pulse Cancelar para abortar la creación de la cuenta."
+
+#: kmymoney2.cpp:2345 kmymoney2.cpp:2346
+msgid "Loan payout"
+msgstr "Pagos de Préstamos"
+
+#: dialogs/knewloanwizard.cpp:892 kmymoney2.cpp:2374
+#, c-format
+msgid "Unable to add account: %1"
+msgstr "No fue posible agregar la cuenta: %1"
+
+#: kmymoney2.cpp:2392
+msgid ""
+"The category <b>%1</b> currently does not exist. Do you want to create it?"
+"<p><i>The parent account will default to <b>%2</b> but can be changed in the "
+"following dialog</i>."
+msgstr ""
+"La categoría <b>%1</b> no existe. ¿Desea crearla? <p><i>La cuenta madre "
+"será, por defecto, <b>%2</b>, pero puede ser modificada en el siguiente "
+"cuadro de diálogo</i>."
+
+#: kmymoney2.cpp:2392
+msgid "Create category"
+msgstr "Crear categoría"
+
+#: kmymoney2.cpp:2429
+msgid "Create a new Category"
+msgstr "Crear una nueva Categoría"
+
+#: kmymoney2.cpp:2505
+#, c-format
+msgid "Unable to create account: %1"
+msgstr "No fue posible crear la cuenta: %1"
+
+#: kmymoney2.cpp:2516
+msgid ""
+"The security <b>%1</b> currently does not exist as sub-account of <b>%2</b>. "
+"Do you want to create it?"
+msgstr ""
+"El valor bursatil <b>%1</b> no existe como subcuenta de <b>%2</b>. ¿Desea "
+"crearlo?"
+
+#: kmymoney2.cpp:2517
+msgid "Create security"
+msgstr "Crear valor bursátil"
+
+#: kmymoney2.cpp:2551
+msgid "Do you really want to delete the investment <b>%1</b>?"
+msgstr "¿Desea realmente borrar la inversión <b>%1</b>?"
+
+#: kmymoney2.cpp:2551
+msgid "Delete investment"
+msgstr "Borrar inversión"
+
+#: kmymoney2.cpp:2558
+#, c-format
+msgid "Unable to delete investment: %1"
+msgstr "No fue posible borrar la inversión: %1"
+
+#: kmymoney2.cpp:2640 kmymoney2.cpp:2646
+msgid "Unable to add scheduled transaction: "
+msgstr "Incapaz de agregar asiento planificado:"
+
+#: kmymoney2.cpp:2722
+msgid "Adjusting transactions..."
+msgstr "Ajustando asientos..."
+
+#: kmymoney2.cpp:2747
+msgid "Adjusting scheduled transactions..."
+msgstr "Ajustando asientos planificados..."
+
+#: kmymoney2.cpp:2765
+msgid "Adjusting budgets..."
+msgstr "Ajustando presupuestos..."
+
+#: kmymoney2.cpp:2783
+msgid ""
+"Unable to exchange category <b>%1</b> with category <b>%2</b>. Reason: %3"
+msgstr ""
+"Imposible intercambiar categoría <b>%1</b> con categoría <b>%2</b>. Razón: %3"
+
+#: kmymoney2.cpp:2804
+msgid "Do you really want to delete category <b>%1</b>?"
+msgstr "¿Está seguro de querer borrar la categoría <b>%1</b>?"
+
+#: kmymoney2.cpp:2811
+msgid "Unable to delete category <b>%1</b>. Cause: %2"
+msgstr "No fue posible eliminar la categoría: <b>%1</b>. Causa: %2"
+
+#: kmymoney2.cpp:2823
+msgid ""
+"Do you want to delete category <b>%1</b> with all its sub-categories or only "
+"the category itself? If you only delete the category itself, all its sub-"
+"categories will be made sub-categories of <b>%2</b>."
+msgstr ""
+"¿Desea borrar la categoría <b>%1</b> junto con todas sus subcategorías o "
+"solamente la categoría misma? Si sólo desea borrar esta categoría, todas sus "
+"subcategorías serán hechas subcuentas de <b>%2</b>."
+
+#: kmymoney2.cpp:2827
+msgid "Delete all"
+msgstr "Borrar todo"
+
+#: kmymoney2.cpp:2828
+msgid "Just the category"
+msgstr "Sólo la categoría"
+
+#: kmymoney2.cpp:2858
+msgid ""
+"Some sub-categories of category <b>%1</b> cannot be deleted, because they "
+"are still used. They will be made sub-categories of <b>%2</b>. Proceed?"
+msgstr ""
+"Algunas subcategorías de la categoría <b>%1</b> no pueden ser eliminadas, "
+"porque todavía están en uso. Serán hechas subcategorías de <b>%2</b>. "
+"¿Proceder?"
+
+#: kmymoney2.cpp:2878
+msgid "Unable to delete a sub-category of category <b>%1</b>. Reason: %2"
+msgstr ""
+"Imposible eliminar una subcategoría de la categoría <b>%1</b>. Razón: %2"
+
+#: kmymoney2.cpp:2889
+msgid "Do you really want to delete account <b>%1</b>?"
+msgstr "¿Está seguro de querer borrar la cuenta <b>%1</b>?"
+
+#: kmymoney2.cpp:2901
+msgid "Unable to delete account '%1'. Cause: %2"
+msgstr "Imposible eliminar la cuenta <b>%1</b>. Razón: %2"
+
+#: kmymoney2.cpp:2917
+msgid "Edit account '%1'"
+msgstr "Editar cuenta '%1'"
+
+#: kmymoney2.cpp:2922
+msgid "Edit category '%1'"
+msgstr "Editar categoría '%1'"
+
+#: kmymoney2.cpp:3008
+msgid "Unable to modify account '%1'. Cause: %2"
+msgstr "Imposible modificar la cuenta <b>%1</b>. Causa: %2"
+
+#: kmymoney2.cpp:3065
+msgid ""
+"KMyMoney has detected some overdue scheduled transactions for this account. "
+"Do you want to enter those scheduled transactions now?"
+msgstr ""
+"KMyMoney ha detectado asientos planificados vencidos para esta cuenta. "
+"¿Desea ingresar esos asientos planificados ahora?"
+
+#: kmymoney2.cpp:3065
+msgid "Scheduled transactions found"
+msgstr "Se han encontrado asientos planificados"
+
+#: kmymoney2.cpp:3163
+msgid ""
+"You are about to finish the reconciliation of this account with a difference "
+"between your bank statement and the transactions marked as cleared.\n"
+"Are you sure you want to finish the reconciliation ?"
+msgstr ""
+"Está a punto de finalizar la reconciliación de esta cuenta con una "
+"diferencia entre su resumen bancario y los asientos marcados como librados.\n"
+"¿Está seguro de querer finalizar la reconciliación?"
+
+#: kmymoney2.cpp:3165
+msgid "Confirm end of reconciliation"
+msgstr "Confirmar el fin de la reconciliación"
+
+#: kmymoney2.cpp:3339
+msgid ""
+"You have closed this account. It remains in the system because you have "
+"transactions which still refer to it, but is not shown in the views. You can "
+"make it visible again by going to the View menu and selecting <b>Show all "
+"accounts</b> or by unselecting the <b>Don't show closed accounts</b> setting."
+msgstr ""
+"Usted ha cerrado esta cuenta. Se mantiene en el sistema porque tiene "
+"asientos que están todavía relacionados, pero no se muestra en las vistas. "
+"Puede hacerla visible otra vez yendo al menú Vista y seleccionando "
+"<b>Mostrar todas las cuentas</b> o deseleccionando la opción <b>No mostrar "
+"cuentas cerradas</b>."
+
+#: kmymoney2.cpp:3379
+msgid "<b>%1</b> cannot be moved to institution <b>%2</b>. Reason: %3"
+msgstr "<b>%1</b> no puede ser movida a la organización <b>%2</b>. Razón: %3"
+
+#: kmymoney2.cpp:3393
+msgid "<b>%1</b> cannot be moved to <b>%2</b>. Reason: %3"
+msgstr "<b>%1</b> no puede ser movido a <b>%2</b>. Razón: %3"
+
+#: kmymoney2.cpp:3408
+msgid "%1 YTD Account Transactions"
+msgstr "%1 Asientos de cuenta del año corriente hasta hoy"
+
+#: dialogs/kbalancechartdlg.cpp:71 kmymoney2.cpp:3409
+#: views/kforecastview.cpp:650 views/khomeview.cpp:276
+#: views/khomeview.cpp:1384 views/kreportsview.cpp:619
+msgid "Generated Report"
+msgstr "Reporte Generado"
+
+#: dialogs/rc.cpp:324 dialogs/settings/rc.cpp:80 kmymoney2.cpp:3411
+#: views/kreportsview.cpp:1062 views/rc.cpp:58 views/rc.cpp:59
+msgid "Transactions"
+msgstr "Asientos"
+
+#: kmymoney2.cpp:3449
+#, c-format
+msgid "Unable to add scheduled transaction: %1"
+msgstr "Imposible añadir el asiento planificado: %1"
+
+#: kmymoney2.cpp:3449
+msgid "Add scheduled transaction"
+msgstr "Agregar asiento planificado"
+
+#: kmymoney2.cpp:3489
+msgid ""
+"You have entered a scheduled transaction date of <b>%1</b>. Because the "
+"scheduled transaction was last paid on <b>%2</b>, KMyMoney will "
+"automatically adjust the scheduled transaction date to the next date unless "
+"the last payment date is reset. Do you want to reset the last payment date?"
+msgstr ""
+"Usted ha ingresado una fecha de programación <b>%1</b>. Debido a que el "
+"asiento fue ingresado por última vez el <b>%2</b>, KMyMoney ajustará "
+"automáticamente la fecha de programación a la próxima fecha, a menos que se "
+"fije una nueva fecha de último pago. ¿Desea fijar una nueva fecha de último "
+"pago?"
+
+#: kmymoney2.cpp:3489
+msgid "Reset Last Payment Date"
+msgstr "Fijar Nueva Fecha de Último Pago"
+
+#: kmymoney2.cpp:3499 kmymoney2.cpp:3519 kmymoney2.cpp:3531
+msgid "Unable to modify scheduled transaction '%1'"
+msgstr "Imposible modificar el asiento planificado '%1'"
+
+#: kmymoney2.cpp:3543
+msgid "Are you sure you want to delete the scheduled transaction <b>%1</b>?"
+msgstr "¿Está seguro que desea borrar el asiento planificado <b>%1</b>?"
+
+#: kmymoney2.cpp:3546
+msgid ""
+"In case of loan payments it is currently not possible to recreate the "
+"scheduled transaction."
+msgstr ""
+"En el caso de pago de préstamos, actualmente no es posible recrear los "
+"asientos planificados."
+
+#: kmymoney2.cpp:3555
+msgid "Unable to remove scheduled transaction '%1'"
+msgstr "Imposible eliminar el asiento planificado '%1'"
+
+#: kmymoney2.cpp:3569
+#, c-format
+msgid ""
+"_: Copy of scheduled transaction name\n"
+"Copy of %1"
+msgstr "Copia de %1"
+
+#: kmymoney2.cpp:3581 kmymoney2.cpp:4352
+msgid "Unable to duplicate transaction(s): %1, thrown in %2:%3"
+msgstr ""
+"Imposible de duplicar el/los asiento(s): <b>%1</b>, arrojado(s) en %2:%3"
+
+#: kmymoney2.cpp:3595
+msgid ""
+"Do you really want to skip the <b>%1</b> transaction scheduled for <b>%2</b>?"
+msgstr ""
+"¿Desea realmente saltear la ocurrencia de la planificación <b>%2</b> en <b>%"
+"1 </b>?"
+
+#: kmymoney2.cpp:3605
+msgid "Unable to skip scheduled transaction <b>%1</b>."
+msgstr "Imposible saltear la ocurrencia del asiento planificado <b>%1</b>."
+
+#: kmymoney2.cpp:3618
+msgid "Unknown scheduled transaction '%1'"
+msgstr "Planificación desconocida '%1'"
+
+#: kmymoney2.cpp:3673
+msgid ""
+"Are you sure you wish to stop this scheduled transaction from being entered "
+"into the register?\n"
+"\n"
+"KMyMoney will prompt you again next time it starts unless you manually enter "
+"it later."
+msgstr ""
+"¿Está seguro de que no quiere asentar este asiento programado en el "
+"registro?\n"
+"\n"
+"KMyMoney le preguntará de nuevo la próxima vez que inicie a menos que lo "
+"asiente manualmente más tarde."
+
+#: kmymoney2.cpp:3725 kmymoney2.cpp:3732
+msgid "Unable to enter scheduled transaction '%1'"
+msgstr "Imposible ingresar asiento planificado '%1'"
+
+#: kmymoney2.cpp:3743 kmymoney2.cpp:3783
+msgid "New Payee"
+msgstr "Nuevo Beneficiario"
+
+#: kmymoney2.cpp:3745
+msgid "Do you want to add <b>%1</b> as payer/receiver ?"
+msgstr "¿Desea añadir <b>%1</b> como un pagador/beneficiarior?"
+
+#: converter/mymoneystatementreader.cpp:892 kmymoney2.cpp:3747
+msgid "New payee/receiver"
+msgstr "Nuevo beneficiario/receptor"
+
+#: kmymoney2.cpp:3773
+msgid "Unable to add payee"
+msgstr "No fue posible añadir un beneficiario"
+
+#: kmymoney2.cpp:3826
+msgid "Do you really want to remove the payee <b>%1</b>?"
+msgstr "¿Desea realmente eliminar el pagador/beneficiario <b>%1</b>?"
+
+#: kmymoney2.cpp:3828
+msgid "Do you really want to remove all selected payees?"
+msgstr ""
+"¿Desea realmente eliminar todos los pagadores/beneficiarios seleccionados?"
+
+#: kmymoney2.cpp:3830
+msgid "Remove Payee"
+msgstr "Eliminar Beneficiario"
+
+#: kmymoney2.cpp:3870
+msgid ""
+"At least one transaction/scheduled transaction is still referenced by a "
+"payee. Currently you have all payees selected. However, at least one payee "
+"must remain so that the transaction/scheduled transaction can be reassigned."
+msgstr ""
+"Al menos un asiento o planificación todavía hace referencia a este pagador. "
+"Actualmente tiene seleccionados todos los pagadores. Sin embargo, al menos "
+"un pagador debe permanecer para que los asientos/programaciones puedan ser "
+"reasignados."
+
+#: kmymoney2.cpp:3925
+msgid "Unable to reassign payee of transaction/split"
+msgstr "Imposible reasignar el pagador del asiento/partida"
+
+#: converter/mymoneyqifreader.cpp:534 converter/mymoneystatementreader.cpp:959
+#: kmymoney2.cpp:3926 kmymoney2.cpp:3983 views/kbudgetview.cpp:636
+#: views/kbudgetview.cpp:737 views/kbudgetview.cpp:751
+#: views/kpayeesview.cpp:519 views/kpayeesview.cpp:870
+msgid "thrown in"
+msgstr "introducido"
+
+#: kmymoney2.cpp:3982
+msgid "Unable to remove payee(s)"
+msgstr "Imposible eliminar el/los pagador(es)"
+
+#: kmymoney2.cpp:3990
+msgid "Enter ISO 4217 code for the new currency"
+msgstr "Ingrese código ISO 4217 para la nueva divisa"
+
+#: kmymoney2.cpp:3999
+#, c-format
+msgid "Cannot create new currency. %1"
+msgstr "Imposible crear nueva divisa: %1"
+
+#: kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, c-format
+msgid "Cannot rename currency. %1"
+msgstr "Imposible renombrar la divisa: %1"
+
+#: kmymoney2.cpp:4039
+msgid "Cannot delete currency %1. %2"
+msgstr "Imposible borrar la divisa: %1. %2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Cannot set %1 as base currency: %2"
+msgstr "No se puede configurar %1 como divisa base: %2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Set base currency"
+msgstr "Seleccionar divisa base"
+
+#: kmymoney2.cpp:4065
+#, c-format
+msgid "Budget %1"
+msgstr "Presupuesto %1"
+
+#: kmymoney2.cpp:4075
+msgid "Budget %1 (%2)"
+msgstr "Presupuesto %1 (%2)"
+
+#: kmymoney2.cpp:4090 kmymoney2.cpp:4139
+msgid "Unable to add budget: %1, thrown in %2:%3"
+msgstr "Imposible ingresar el presupuesto %1, arrojando en %2:%3"
+
+#: kmymoney2.cpp:4105
+msgid "Do you really want to remove the budget <b>%1</b>?"
+msgstr "¿Desea realmente eliminar el presupuesto <b>%1</b>?"
+
+#: kmymoney2.cpp:4107
+msgid "Do you really want to remove all selected budgets?"
+msgstr "¿Desea realmente eliminar todos los presupuestos seleccionados?"
+
+#: kmymoney2.cpp:4109
+msgid "Remove Budget"
+msgstr "Eliminar Presupuestos"
+
+#: kmymoney2.cpp:4122
+msgid "Unable to remove budget: %1, thrown in %2:%3"
+msgstr "Imposible eliminar el presupuesto %1, arrojando en %2:%3"
+
+#: kmymoney2.cpp:4134 views/kreportsview.cpp:659
+#, c-format
+msgid "Copy of %1"
+msgstr "Copia de %1"
+
+#: kmymoney2.cpp:4164
+msgid "Select year"
+msgstr "Seleccionar año"
+
+#: kmymoney2.cpp:4164
+msgid "Budget year"
+msgstr "Año del presupuesto"
+
+#: kmymoney2.cpp:4176 kmymoney2.cpp:4214 kmymoney2.cpp:4274
+msgid "Unable to modify budget: %1, thrown in %2:%3"
+msgstr "Imposible modificar el presupuesto %1, arrojando en %2:%3"
+
+#: kmymoney2.cpp:4192 kmymoney2.cpp:4250
+msgid ""
+"The current budget already contains data. Continuing will replace all "
+"current values of this budget."
+msgstr ""
+"El presupuesto actual contiene datos. Continuar reemplazará todos los "
+"valores actuales de este presupuesto."
+
+#: kmymoney2.cpp:4222
+msgid ""
+"Please be aware that changes made in the following dialog affect all KDE "
+"applications not only KMyMoney."
+msgstr ""
+"Por favor tenga en cuenta que todos los cambios realizados en el siguiente "
+"cuadro de diálogo afectan a todas las aplicaciones KDE, no sólo a KMyMoney."
+
+#: kmymoney2.cpp:4292
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to delete the transactions anyway?"
+msgstr ""
+"Al menos una partida de este asiento fue reconciliada. ¿Desea borrar el "
+"asiento de todas maneras?"
+
+#: kmymoney2.cpp:4295 views/kgloballedgerview.cpp:1043
+msgid "Transaction already reconciled"
+msgstr "El asiento ya fue reconciliado"
+
+#: kmymoney2.cpp:4301
+msgid "Do you really want to delete the selected transaction?"
+msgstr "¿Desea realmente borrar el asiento seleccionado?"
+
+#: kmymoney2.cpp:4303
+msgid "Do you really want to delete all %1 selected transactions?"
+msgstr "¿Desea realmente borrar todos los %1 asientos seleccionados?"
+
+#: kmymoney2.cpp:4305
+msgid "Delete transaction"
+msgstr "Borrar asiento"
+
+#: kmymoney2.cpp:4306
+msgid "Deleting transactions"
+msgstr "Borrando asientos"
+
+#: kmymoney2.cpp:4321
+msgid "Duplicating transactions"
+msgstr "Duplicando asientos"
+
+#: kmymoney2.cpp:4378
+msgid "Unable to delete transaction(s): %1, thrown in %2:%3"
+msgstr "Imposible eliminar el/los asientos %1, arrojando en %2:%3"
+
+#: kmymoney2.cpp:4452 kmymoney2.cpp:4622
+msgid "Unable to modify transaction: %1, thrown in %2:%3"
+msgstr "Imposible modificar el asiento %1, arrojando en %2:%3"
+
+#: kmymoney2.cpp:4514
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling and<br>- <b>Cancel</b> returns to the "
+"transaction editor.<p>You can also select an option to save the transaction "
+"automatically when e.g. selecting another transaction."
+msgstr ""
+"¿Desea realmente cancelar la edición de este asiento sin guardarlo?<p>- "
+"<b>Sí</b> cancela la edición del asiento<br>- <b>No</b> guarda el asiento "
+"antes de cancelar la edición y <br>- <b>Cancelar</b> regresa e editor de "
+"asientos.<p> Usted puede también seleccionar la opción de guardar el asiento "
+"automáticamente cuando, por ej., seleccione otro asiento."
+
+#: kmymoney2.cpp:4514 kmymoney2.cpp:4517
+msgid "Cancel transaction edit"
+msgstr "Cancelar edición del asiento"
+
+#: kmymoney2.cpp:4517
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling.<p>You can also select an option to save the "
+"transaction automatically when e.g. selecting another transaction."
+msgstr ""
+"¿Desea realmente cancelar la edición de este asiento sin guardarlo?<p>- "
+"<b>Sí</b> cancela la edición del asiento<br>- <b>No</b> guarda el asiento "
+"antes de cancelar la edición.<p> Usted puede también seleccionar la opción "
+"de guardar el asiento automáticamente cuando, por ej., seleccione otro "
+"asiento."
+
+#: kmymoney2.cpp:4667
+msgid "Unable to accept transaction: %1, thrown in %2:%3"
+msgstr "Imposible aceptar la transacción: %1, arrojado en %2:%3"
+
+#: kmymoney2.cpp:4846
+msgid "Unable to unmatch the selected transactions"
+msgstr "Imposible conciliar estos asientos"
+
+#: kmymoney2.cpp:4885
+msgid "No manually entered transaction selected for matching"
+msgstr "No se han seleccionado asientos manuales para conciliar"
+
+#: kmymoney2.cpp:4887
+msgid "No imported transaction selected for matching"
+msgstr "No se han seleccionado asientos importados para conciliar"
+
+#: kmymoney2.cpp:4895
+msgid "Unable to match the selected transactions"
+msgstr "Imposible conciliar estos asientos"
+
+#: kmymoney2.cpp:5097
+msgid "Create a new transaction"
+msgstr "Crear un nuevo asiento"
+
+#: kmymoney2.cpp:5163
+msgid "Duplicate the current selected transactions"
+msgstr "Duplicar los asientos seleccionados"
+
+#: kmymoney2.cpp:5223
+msgid ""
+"_: Button text for unmatch transaction\n"
+"Unmatch"
+msgstr "Desconciliar"
+
+#: kmymoney2.cpp:5451 kmymoney2.cpp:5473
+msgid "Goto '%1'"
+msgstr "Ir a '%1'"
+
+#: kmymoney2.cpp:5582
+msgid "Running consistency check..."
+msgstr "Ejecutando comprobación de consistencia..."
+
+#: kmymoney2.cpp:5590
+#, c-format
+msgid "Consistency check failed: %1"
+msgstr "La comprobación de consistencia falló: %1"
+
+#: kmymoney2.cpp:5594
+msgid "Consistency check result"
+msgstr "Resultados de la comprobación de consistencia"
+
+#: kmymoney2.cpp:5603
+msgid "Checking for overdue scheduled transactions..."
+msgstr "Comprobando asientos planificados vencidos..."
+
+#: kmymoney2.cpp:5740
+msgid ""
+"You must first select a KMyMoney file before you can import a statement."
+msgstr "Antes de importar un extracto debe escoger un archivo KMyMoney."
+
+#: kmymoney2.cpp:5746
+msgid "Importing a statement via Web Connect"
+msgstr "Importando un extracto mediante Web Connect"
+
+#: kmymoney2.cpp:5759
+msgid ""
+"Unable to import %1 using %2 plugin. The plugin returned the following "
+"error: %3"
+msgstr ""
+"No ha sido posible importar %1 usando el plugin %2. El plugin devolvió el "
+"siguiente error: %3"
+
+#: kmymoney2.cpp:5759 plugins/ofximport/ofximporterplugin.cpp:646
+msgid "Importing error"
+msgstr "Error al importar"
+
+#: kmymoney2.cpp:5780
+msgid "All messages have been enabled."
+msgstr "Se permiten todos los mensajes."
+
+#: kmymoney2.cpp:5780
+msgid "All messages"
+msgstr "Todos los mensajes"
+
+#: kmymoney2.cpp:5855
+msgid "Auto saving..."
+msgstr "Autoguardando..."
+
+#: kmymoney2.cpp:5913
+msgid "Unable to setup online parameters for account ''%1'"
+msgstr "No fue posible configurar los parametros online de la cuenta '%1'"
+
+#: kmymoney2.cpp:5928
+msgid ""
+"Do you really want to remove the mapping of account <b>%1</b> to an online "
+"account? Depending on the details of the online banking method used, this "
+"action cannot be reverted."
+msgstr ""
+"¿Realmente desea la vinculación de la cuenta <b>%1</b> a una cuenta online? "
+"Dependiendo de los detalles del método de banca online utilizado, esta "
+"acción no puede revertirse."
+
+#: kmymoney2.cpp:5928
+msgid "Remove mapping to online account"
+msgstr "Borrar el vínculo a la cuenta online"
+
+#: kmymoney2.cpp:5939
+#, c-format
+msgid "Unable to unmap account from online account: %1"
+msgstr "No fue posible eliminar el vínculo a la cuenta online: %1"
+
+#: kmymoney2.cpp:5956
+msgid " (Brokerage)"
+msgstr " (Corretaje)"
+
+#: kmymoney2.cpp:5957
+msgid ""
+"You try to map a brokerage account to an online account. This is usually not "
+"advisable. In general, the investment account should be mapped to the online "
+"account. Please cancel if you intended to map the investment account, "
+"continue otherwise"
+msgstr ""
+"Está intentando vincular una cuenta de corretaje a una cuenta online. En "
+"general, esto no es recomendable. Usualmente es la cuenta de inversión la "
+"que debería estar vinculada a la cuenta online. Por favor, cancele si "
+"intentaba vincular la cuenta de inversión. De lo contrario, continúe."
+
+#: kmymoney2.cpp:5957
+msgid "Mapping brokerage account"
+msgstr "Vinculando cuenta de corretaje"
+
+#: kmymoney2.cpp:5964
+msgid "Select online banking plugin"
+msgstr "Seleccionar plugin de banca online"
+
+#: kmymoney2.cpp:6005
+#, c-format
+msgid "Unable to map account to online account: %1"
+msgstr "No fue posible vincular la cuenta a la cuenta online: %1"
+
+#: converter/mymoneyqifreader.cpp:407 converter/mymoneytemplate.cpp:73
+#: views/kmymoneyview.cpp:590
+msgid "Error while loading file '%1'!"
+msgstr "¡Error al cargar el archivo '%1'!"
+
+#: converter/mymoneyqifreader.cpp:409 converter/mymoneyqifreader.cpp:965
+#: converter/mymoneytemplate.cpp:75 views/kmymoneyview.cpp:592
+msgid "File access error"
+msgstr "Error de acceso al archivo"
+
+#: converter/mymoneytemplate.cpp:84
+msgid "<b>%1</b> is not a template file."
+msgstr "<b>%1</b> no es un archivo de plantillas."
+
+#: converter/mymoneytemplate.cpp:85 views/kmymoneyview.cpp:603
+msgid "Filetype Error"
+msgstr "Error de tipo de archivo"
+
+#: converter/mymoneytemplate.cpp:93
+msgid "Error while reading template file <b>%1</b> in line %2, column %3"
+msgstr ""
+"Error al leer el archivo de plantillas <b>%1</b> en la línea %2, columna %3"
+
+#: converter/mymoneytemplate.cpp:94
+msgid "Template Error"
+msgstr "Error de Plantilla"
+
+#: converter/mymoneytemplate.cpp:101
+msgid "File '%1' not found!"
+msgstr "¡Archivo '%1' no encontrado!"
+
+#: converter/mymoneytemplate.cpp:142
+msgid "Invalid tag <b>%1</b> in template file <b>%2</b>!"
+msgstr "¡Etiqueta no válida <b>%1</b> en el archivo de plantillas <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:214
+#, c-format
+msgid "Loading template %1"
+msgstr "Cargando plantilla %1"
+
+#: converter/mymoneytemplate.cpp:241
+msgid "Invalid top-level account type <b>%1</b> in template file <b>%2</b>!"
+msgstr ""
+"¡Tipo de cuenta madre <b>%1</b> no válido en archivo de plantillas <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:309
+msgid ""
+"Invalid flag type <b>%1</b> for account <b>%3</b> in template file <b>%2</b>!"
+msgstr ""
+"¡Bandera de tipo <b>%1</b> no válida en el cuenta <b>%3</b> del archivo de "
+"plantillas <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:398 converter/mymoneytemplate.cpp:401
+#: views/kmymoneyview.cpp:1151 views/kmymoneyview.cpp:1154
+msgid "Unable to write changes to '%1'"
+msgstr "No fue posible escribir cambios a '%1'"
+
+#: converter/mymoneytemplate.cpp:407 views/kmymoneyview.cpp:1162
+msgid "Unable to upload to '%1'"
+msgstr "No fue posible enviar archivo a '%1'"
+
+#: converter/mymoneyqifwriter.cpp:70
+msgid ""
+"Unexpected exception '%1' thrown in %2, line %3 caught in MyMoneyQifWriter::"
+"write()"
+msgstr ""
+"La excepción inesperada '%1', lanzada desde %2, línea %3, ha sido capturada "
+"por MyMoneyQifWriter::write()"
+
+#: converter/mymoneyqifwriter.cpp:80
+msgid "Unable to open file '%1' for writing"
+msgstr "No fue posible abrir el archivo '%1' para escritura"
+
+#: converter/webpricequote.cpp:340
+#, c-format
+msgid "Symbol found: %1"
+msgstr "Símbolo encontrado: %1"
+
+#: converter/webpricequote.cpp:368
+msgid "Price found: %1 (%2)"
+msgstr "Precio encontrado: %1 (%2)"
+
+#: converter/webpricequote.cpp:380
+#, c-format
+msgid "Date found: %1"
+msgstr "Fecha encontrada: %1"
+
+#: converter/webpricequote.cpp:397 converter/webpricequote.cpp:403
+#, c-format
+msgid "Unable to update price for %1"
+msgstr "No ha sido posible actualizar el precio de %1"
+
+#: converter/mymoneyqifreader.cpp:170
+msgid ""
+"_: Category name\n"
+"Reinvested dividend"
+msgstr "Dividendos reinvertidos"
+
+#: converter/mymoneyqifreader.cpp:173
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (long term)"
+msgstr "Dividendos reinvertidos (a largo plazo)"
+
+#: converter/mymoneyqifreader.cpp:176
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (short term)"
+msgstr "Dividendos reinvertidos (a corto plazo)"
+
+#: converter/mymoneyqifreader.cpp:179
+msgid ""
+"_: Category name\n"
+"Dividend"
+msgstr "Dividendos"
+
+#: converter/mymoneyqifreader.cpp:182
+msgid ""
+"_: Category name\n"
+"Interest"
+msgstr "Interés"
+
+#: converter/mymoneyqifreader.cpp:185
+msgid ""
+"_: Category name\n"
+"Capital Gain (short term)"
+msgstr "Ganancia de Capital (a corto plazo)"
+
+#: converter/mymoneyqifreader.cpp:188
+msgid ""
+"_: Category name\n"
+"Capital Gain (mid term)"
+msgstr "Ganancia de Capital (a mediano plazo)"
+
+#: converter/mymoneyqifreader.cpp:191
+msgid ""
+"_: Category name\n"
+"Capital Gain (long term)"
+msgstr "Ganancia de Capital (a largo plazo)"
+
+#: converter/mymoneyqifreader.cpp:194
+msgid ""
+"_: Category name\n"
+"Returned capital"
+msgstr "Capital devuelto"
+
+#: converter/mymoneyqifreader.cpp:197
+msgid ""
+"_: Category name\n"
+"Miscellaneous income"
+msgstr "Ingresos varios"
+
+#: converter/mymoneyqifreader.cpp:200
+msgid ""
+"_: Category name\n"
+"Miscellaneous expense"
+msgstr "Gastos varios"
+
+#: converter/mymoneyqifreader.cpp:203
+msgid ""
+"_: Category name\n"
+"Investment fees"
+msgstr "Cargos de inversión"
+
+#: converter/mymoneyqifreader.cpp:205
+#, c-format
+msgid "Unknown QIF type %1"
+msgstr "Tipo de QIF desconocido %1"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Date format selection"
+msgstr "Selección de formato de fecha"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Pick the date format that suits your input file"
+msgstr "Escoja el formato de fecha de su archivo de entrada"
+
+#: converter/mymoneyqifreader.cpp:366
+msgid "Importing QIF ..."
+msgstr "Importando QIF..."
+
+#: converter/mymoneyqifreader.cpp:442
+msgid "Reading QIF ..."
+msgstr "Leyendo QIF..."
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Adding transactions"
+msgstr "Añadiendo asientos"
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Now adding the transactions to your ledger..."
+msgstr "Se están añadiendo los asientos a su libro mayor..."
+
+#: converter/mymoneyqifreader.cpp:533
+msgid "Unable to add transactions"
+msgstr "Incapaz de agregar asientos"
+
+#: converter/mymoneyqifreader.cpp:567
+msgid ""
+"_: QIF tag for liability account\n"
+"Oth L"
+msgstr "Oth L"
+
+#: converter/mymoneyqifreader.cpp:572
+msgid ""
+"_: QIF tag for category\n"
+"Cat"
+msgstr "Cat"
+
+#: converter/mymoneyqifreader.cpp:575
+msgid ""
+"_: QIF tag for security\n"
+"Security"
+msgstr "Security"
+
+#: converter/mymoneyqifreader.cpp:578
+msgid ""
+"_: QIF tag for investment account\n"
+"Invst"
+msgstr "Invst"
+
+#: converter/mymoneyqifreader.cpp:581
+msgid ""
+"_: QIF tag for prices\n"
+"Prices"
+msgstr "Prices"
+
+#: converter/mymoneyqifreader.cpp:599
+msgid ""
+"_: QIF tag for a class\n"
+"Class"
+msgstr "Class"
+
+#: converter/mymoneyqifreader.cpp:753 converter/mymoneyqifreader.cpp:2203
+msgid ""
+"The %1 account currently has an opening balance of %2. This QIF file reports "
+"an opening balance of %3. Would you like to overwrite the current balance "
+"with the one from the QIF file?"
+msgstr ""
+"La cuenta %1 figura con un saldo de apertura de %2. Sin embargo, en este "
+"archivo QIF figura con un saldo de apertura de %3. Desea cambiar este valor "
+"por el del archivo QIF?"
+
+#: converter/mymoneyqifreader.cpp:754 converter/mymoneyqifreader.cpp:2204
+msgid "Overwrite opening balance"
+msgstr "Sobreescribir saldo de apertura"
+
+#: converter/mymoneyqifreader.cpp:879 converter/mymoneyqifreader.cpp:890
+#: converter/mymoneyqifreader.cpp:914
+msgid "Autogenerated by QIF importer"
+msgstr "Autogenerado por el importador de QIF"
+
+#: converter/mymoneyqifreader.cpp:907
+msgid "QIF imported, no account name supplied"
+msgstr "Importado de QIF, no se suministró un nombre de cuenta"
+
+#: converter/mymoneyqifreader.cpp:940
+msgid ""
+"KMyMoney has imported a second opening balance transaction into account <b>%"
+"1</b> which differs from the one found already on file. Please correct this "
+"manually once the import is done."
+msgstr ""
+"KMyMoney ha importado un segundo asiento de apertura ala cuenta <b>%1</b> "
+"que difiere del ya existente en el archivo. Por favor, corrijalo manualmente "
+"una vez finalizada la importación."
+
+#: converter/mymoneyqifreader.cpp:940
+msgid "Opening balance problem"
+msgstr "Problema con el saldo de apertura"
+
+#: converter/mymoneyqifreader.cpp:963
+msgid "Error while creating opening balance transaction"
+msgstr "Error al crear el asiento de saldo de apertura"
+
+#: converter/mymoneyqifreader.cpp:1029 converter/mymoneyqifreader.cpp:1276
+msgid ""
+"The date entry \"%1\" read from the file cannot be interpreted through the "
+"current date profile setting of \"%2\".\n"
+"\n"
+"Pressing \"Continue\" will assign todays date to the transaction. Pressing "
+"\"Cancel\" will abort the import operation. You can then restart the import "
+"and select a different QIF profile or create a new one."
+msgstr ""
+"La fecha \"%1\", leída del archivo, no pudo ser interpretada con la "
+"configuración actual para fechas de \"%2\".\n"
+"\n"
+"Pulsando \"Continuar\" asignará la fecha de hoy al asiento. Pulsando "
+"\"Cancelar\" abortará la operación de importación. Entonces podrá reiniciar "
+"la importación y escoger otro perfil QIF o crear uno nuevo."
+
+#: converter/mymoneyqifreader.cpp:1035 converter/mymoneyqifreader.cpp:1282
+msgid "Invalid date format"
+msgstr "Formato de fecha no válido"
+
+#: converter/mymoneyqifreader.cpp:1398
+#: converter/mymoneystatementreader.cpp:589
+#: converter/mymoneystatementreader.cpp:592
+msgid "Statement Importer"
+msgstr "Importador de Extractos Bancarios"
+
+#: converter/mymoneyqifreader.cpp:1413
+#: converter/mymoneystatementreader.cpp:644
+msgid ""
+"This investment account does not contain the \"%1\" security. Transactions "
+"involving this security will be ignored."
+msgstr ""
+"Esta cuenta de inversiones no contiene el valor bursatil \"%1\". Los "
+"asientos que involucren este valor serán ignorados."
+
+#: converter/mymoneyqifreader.cpp:1415
+#: converter/mymoneystatementreader.cpp:612
+#: converter/mymoneystatementreader.cpp:644
+msgid "Security not found"
+msgstr "Valro bursatil no encontrado"
+
+#: converter/mymoneyqifreader.cpp:2021
+msgid "%1 (Investment)"
+msgstr "%1 (Inversión)"
+
+#: converter/mymoneyqifreader.cpp:2022
+msgid "Autogenerated by QIF importer from type Mutual account entry"
+msgstr ""
+"Autogenerado por el importador de QIF de la entrada de cuenta tipo Mutual"
+
+#: converter/mymoneyqifreader.cpp:2085 converter/mymoneyqifreader.cpp:2228
+msgid "account"
+msgstr "cuenta"
+
+#: converter/mymoneyqifreader.cpp:2086
+msgid "al"
+msgstr "al"
+
+#: converter/mymoneyqifreader.cpp:2093
+msgid "category"
+msgstr "categoría"
+
+#: converter/mymoneyqifreader.cpp:2094
+msgid "ei"
+msgstr "ei"
+
+#: converter/mymoneyqifreader.cpp:2095
+msgid "Category selection"
+msgstr "Selección de categoría"
+
+#: converter/mymoneyqifreader.cpp:2110
+msgid "Account \"%1\" disappeared: "
+msgstr "La cuenta \"%1\" ha desaparecido:"
+
+#: converter/mymoneyqifreader.cpp:2131
+msgid "The %1 '%2' does not exist. Do you want to create it?"
+msgstr "El %1 '%2' no existe. ¿Desea crearlo?"
+
+#: converter/mymoneyqifreader.cpp:2140
+#, c-format
+msgid "Select %1"
+msgstr "Seleccionar %1"
+
+#: converter/mymoneyqifreader.cpp:2142
+msgid ""
+"The %1 <b>%2</b> currently exists. Do you want to import transactions to "
+"this account?"
+msgstr "El %1 <b>%2</b> ya existe. ¿Desea importar asientos a esta cuenta?"
+
+#: converter/mymoneyqifreader.cpp:2147
+msgid ""
+"The %1 <b>%2</b> currently does not exist. You can create a new %3 by "
+"pressing the <b>Create</b> button or select another %4 manually from the "
+"selection box."
+msgstr ""
+"El %1 <b>%2</b> no existe. Puede crear un nuevo %3 pulsando el botón "
+"<b>Crear</b> o escoger otro %4 manualmente en la caja de selección."
+
+#: converter/mymoneyqifreader.cpp:2154
+#, c-format
+msgid "Import transactions to %1"
+msgstr "Importar asientos a %1"
+
+#: converter/mymoneyqifreader.cpp:2155
+msgid ""
+"No %1 information has been found in the selected QIF file. Please select an "
+"account using the selection box in the dialog or create a new %2 by pressing "
+"the <b>Create</b> button."
+msgstr ""
+"No se encontró información de %1 en el archivo QIF escogido. Por favor, "
+"escoja una cuenta empleando la caja de selección del diálogo o cree una "
+"nueva %2 pulsando en el botón <b>Crear</b>."
+
+#: converter/mymoneyqifreader.cpp:2229
+msgid "You must select or create an account."
+msgstr "Debe escoger o crear una cuenta."
+
+#: converter/mymoneyqifreader.cpp:2231
+msgid "You must select or create a category."
+msgstr "Debe escoger o crear una categoría."
+
+#: converter/mymoneystatementreader.cpp:100
+msgid "_Fees"
+msgstr "_Cargos"
+
+#: converter/mymoneystatementreader.cpp:106
+msgid "_Dividend"
+msgstr "_Dividendos"
+
+#: converter/mymoneystatementreader.cpp:289
+#, c-format
+msgid "Importing statement for account %1"
+msgstr "Importando extracto para la cuenta %1"
+
+#: converter/mymoneystatementreader.cpp:291
+msgid "Importing statement without transactions"
+msgstr "Importando extracto sin asientos"
+
+#: converter/mymoneystatementreader.cpp:385
+msgid " Statement balance is not contained in statement."
+msgstr " El saldo del extracto no está contenido en el extracto."
+
+#: converter/mymoneystatementreader.cpp:387
+msgid " Statement balance on %1 is reported to be %2"
+msgstr " El saldo del extracto de %1 es %2"
+
+#: converter/mymoneystatementreader.cpp:389
+msgid " Transactions"
+msgstr " Asientos"
+
+#: converter/mymoneystatementreader.cpp:390
+msgid " %1 processed"
+msgstr " %1 procesados"
+
+#: converter/mymoneystatementreader.cpp:391
+msgid " %1 added"
+msgstr " %1 agregados"
+
+#: converter/mymoneystatementreader.cpp:392
+msgid " %1 matched"
+msgstr " %1 conciliados"
+
+#: converter/mymoneystatementreader.cpp:393
+msgid " %1 duplicates"
+msgstr " %1 duplicados"
+
+#: converter/mymoneystatementreader.cpp:394
+msgid " Payees"
+msgstr " Beneficiarios"
+
+#: converter/mymoneystatementreader.cpp:395
+msgid " %1 created"
+msgstr " %1 creados"
+
+#: converter/mymoneystatementreader.cpp:483
+#, c-format
+msgid "Error creating security record: %1"
+msgstr "Error al crear registro de seguridad: %1"
+
+#: converter/mymoneystatementreader.cpp:612
+msgid ""
+"This imported statement contains investment transactions with no security. "
+"These transactions will be ignored."
+msgstr ""
+"El resumen importado contiene asientos de inversión sin valor bursátil. Los "
+"asientos serán ignorados."
+
+#: converter/mymoneystatementreader.cpp:803
+msgid "(Fees) "
+msgstr "(Comisiones)"
+
+#: converter/mymoneystatementreader.cpp:880
+msgid ""
+"Do you want to add \"%1\" as payee/receiver?\n"
+"\n"
+msgstr ""
+"Desea añadir a \"%1\" a la lista de beneficiarios/receptores?\n"
+"\n"
+
+#: converter/mymoneystatementreader.cpp:881
+msgid ""
+"Selecting \"Yes\" will create the payee, \"No\" will skip creation of a "
+"payee record and remove the payee information from this transaction. "
+"Selecting \"Cancel\" aborts the import operation.\n"
+"\n"
+"If you select \"No\" here and mark the \"Don't ask again\" checkbox, the "
+"payee information for all following transactions referencing \"%1\" will be "
+"removed."
+msgstr ""
+"Escogiendo \"Si\" creará un nuevo beneficiario, \"No\" lo evitará y "
+"eliminará de este asiento los datos de beneficiario introducidos. Escogiendo "
+"\"Cancelar\" abortará la operación de importación.\n"
+"\n"
+"Si escoge \"No\" aquí y marca la casilla \"No preguntar de nuevo\", se "
+"eliminará la información del beneficiario de todos los asientos referidos a "
+"\"%1\"."
+
+#: converter/mymoneystatementreader.cpp:917
+msgid "Save Category"
+msgstr "Guardar Categoría"
+
+#: converter/mymoneystatementreader.cpp:918
+msgid "No Category"
+msgstr "Sin Categoría"
+
+#: converter/mymoneystatementreader.cpp:919 dialogs/rc.cpp:4
+msgid "Abort"
+msgstr "Abortar"
+
+#: converter/mymoneystatementreader.cpp:926
+msgid "Please select a default category for payee '%1':"
+msgstr ""
+"Por favor seleccione una categoría predeterminada para el pagador '%1':"
+
+#: converter/mymoneystatementreader.cpp:958
+msgid "Unable to add payee/receiver"
+msgstr "No fue posible añadir el beneficiario/receptor"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid ""
+"KMyMoney has found a scheduled transaction named <b>%1</b> which matches an "
+"imported transaction. Do you want KMyMoney to enter this schedule now so "
+"that the transaction can be matched? "
+msgstr ""
+"KMyMoney ha encontrado un asiento planificado llamado <b>%1</b> que coincide "
+"con un asiento importado. ¿Desea que KMyMoney ingrese esta planificación "
+"ahora para que los asientos puedan ser conciliados?"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid "Schedule found"
+msgstr "Planificación encontrada"
+
+#: converter/mymoneystatementreader.cpp:1219
+msgid "Problem adding or matching imported transaction with id '%1': %2"
+msgstr "Problemas al añadir o conciliar el asiento importado con id '%1': %2"
+
+#: converter/mymoneystatementreader.cpp:1268
+msgid ""
+"<b>You have downloaded a statement for the following account:</b><br><br>"
+msgstr "<b>Ha descargado un extracto de la siguiente cuenta:</b><br><br>"
+
+#: converter/mymoneystatementreader.cpp:1269
+#, c-format
+msgid " - Account Name: %1"
+msgstr "- Nombre de la cuenta: %1"
+
+#: converter/mymoneystatementreader.cpp:1270
+#, c-format
+msgid " - Account Type: %1"
+msgstr "- Tipo de cuenta: %1"
+
+#: converter/mymoneystatementreader.cpp:1271
+#, c-format
+msgid " - Account Number: %1"
+msgstr "- Número de Cuenta: %1"
+
+#: converter/mymoneystatementreader.cpp:1279
+msgid "Do you want to import transactions to this account?"
+msgstr "¿Desea importar asientos a esta cuenta?"
+
+#: converter/mymoneystatementreader.cpp:1281
+msgid ""
+"KMyMoney cannot determine which of your accounts to use. You can create a "
+"new account by pressing the <b>Create</b> button or select another one "
+"manually from the selection box below."
+msgstr ""
+"KMyMoney no puede determinar cual de sus cuentas usar. Puede crear una nueva "
+"pulsando del botón <b>Crear</b> o escoger otra en la caja se selección de "
+"abajo."
+
+#: converter/mymoneystatementreader.cpp:1287
+msgid ""
+"No account information has been found in the selected statement file. Please "
+"select an account using the selection box in the dialog or create a new "
+"account by pressing the <b>Create</b> button."
+msgstr ""
+"No se ha encontrado información de la cuenta en el archivo de extracto "
+"escogido. Escoja una cuenta usando la caja de selección del diálogo o cree "
+"una nueva mediante el botón <b>Crear</b>"
+
+#: converter/mymoneystatementreader.cpp:1294
+msgid "Import transactions"
+msgstr "Importar asientos"
+
+#: converter/mymoneystatementreader.cpp:1330
+msgid ""
+"You must select an account, create a new one, or press the <b>Abort</b> "
+"button."
+msgstr ""
+"Debe escoger una cuenta, crear una nueva o pulsar el botón de <b>Abortar</b>."
+
+#: converter/mymoneygncreader.cpp:119
+msgid "%1: Sorry. This importer cannot handle version %2 of element %3"
+msgstr ""
+"%1: Lamentablemente, este importador no puede manejar la version %2 del "
+"elemento %3"
+
+#: converter/mymoneygncreader.cpp:193
+#, c-format
+msgid "Account%1"
+msgstr "Cuenta %1"
+
+#: converter/mymoneygncreader.cpp:197
+#, c-format
+msgid "Stock%1"
+msgstr "Acción %1"
+
+#: converter/mymoneygncreader.cpp:206
+#, c-format
+msgid "Payee%1"
+msgstr "Beneficiario %1"
+
+#: converter/mymoneygncreader.cpp:212
+#, c-format
+msgid "Schedule%1"
+msgstr "Planificación %1"
+
+#: converter/mymoneygncreader.cpp:262
+msgid "This version of the importer cannot handle multi-book files."
+msgstr "Esta versión del importador no puede manejar archivos multilibro."
+
+#: converter/mymoneygncreader.cpp:912
+msgid "Invalid header for file. Should be 'gnc-v2'"
+msgstr "Cabecera de archivo no válida. Debería ser 'gnc-v2'"
+
+#: converter/mymoneygncreader.cpp:937 converter/mymoneygncreader.cpp:972
+#: converter/mymoneygncreader.cpp:1062
+#, c-format
+msgid ""
+"Import failed:\n"
+"\n"
+"%1"
+msgstr ""
+"Falla al Importar\n"
+"\n"
+"%1"
+
+#: converter/mymoneygncreader.cpp:1065
+msgid "Import complete"
+msgstr "Importación completada"
+
+#: converter/mymoneygncreader.cpp:1120
+msgid "Disguise your wealth"
+msgstr "Disimule su riqueza"
+
+#: converter/mymoneygncreader.cpp:1121
+msgid ""
+"Each monetary value on your file will be multiplied by a random number "
+"between 0.01 and 1.99\n"
+"with a different value used for each transaction. In addition, to further "
+"disguise the true\n"
+"values, you may enter a number between %1 and %2 which will be applied to "
+"all values.\n"
+"These numbers will not be stored in the file."
+msgstr ""
+"Cada valor monetario en su archivo será multiplicado por un número aleatorio "
+"entre 0,01 y 1,99\n"
+"usando un valor diferente para cada asiento. Además, para disfrazar aún más "
+"los valores\n"
+"reales, puede introducir un número entre %1 y %2 que será aplicado a todos "
+"los valores.\n"
+"Estes números no serán guardados en el archivo."
+
+#: converter/mymoneygncreader.cpp:1135
+msgid "Loading commodities..."
+msgstr "Cargando mercancias..."
+
+#: converter/mymoneygncreader.cpp:1160
+msgid "Loading prices..."
+msgstr "Cargando precios..."
+
+#: converter/mymoneygncreader.cpp:1164 converter/mymoneygncreader.cpp:1171
+msgid "Imported History"
+msgstr "Historia Importada"
+
+#: converter/mymoneygncreader.cpp:1251
+#, c-format
+msgid "Current importer does not recognize GnuCash account type %1"
+msgstr "El importador actual no recococe el tipo de cuenta de GnuCash %1"
+
+#: converter/mymoneygncreader.cpp:1471
+msgid "Imported Transaction"
+msgstr "Asiento Importado"
+
+#: converter/mymoneygncreader.cpp:1519
+msgid "Loading templates..."
+msgstr "Cargando Modelos..."
+
+#: converter/mymoneygncreader.cpp:1531
+msgid "Unknown payee"
+msgstr "Beneficiario Desconocido"
+
+#: converter/mymoneygncreader.cpp:1723
+msgid "Loading schedules..."
+msgstr "Cargando planificaciones..."
+
+#: converter/mymoneygncreader.cpp:1735
+#, c-format
+msgid "Can't find template transaction for schedule %1"
+msgstr "No se encontró el asiento que sirve de modelo a la planificación %1"
+
+#: converter/mymoneygncreader.cpp:1910
+msgid "Reorganizing accounts..."
+msgstr "Reorganizando cuentas..."
+
+#: converter/mymoneygncreader.cpp:1972
+msgid ""
+"Your main currency seems to be %1 (%2); do you want to set this as your base "
+"currency?"
+msgstr ""
+"Su divisa principal parece ser %1 (%2); ¿desea ponerla como su divisa de "
+"base?"
+
+#: converter/mymoneygncreader.cpp:1993
+msgid "More"
+msgstr "Más"
+
+#: converter/mymoneygncreader.cpp:1997
+msgid "Save Report"
+msgstr "Guardar Informe"
+
+#: converter/mymoneygncreader.cpp:2017
+msgid ""
+"Problems were encountered in converting schedule '%1'.\n"
+"Do you want to review or edit it now?"
+msgstr ""
+"Se encontraron problemas al convertir la programación '%1'.\n"
+"Desea revisar o editarlo ahora?"
+
+#: converter/mymoneygncreader.cpp:2039
+msgid ""
+"Found:\n"
+"\n"
+msgstr ""
+"Encontrado:\n"
+"\n"
+
+#: converter/mymoneygncreader.cpp:2040
+msgid " commodities (equities)\n"
+msgstr "mercancías (valores de renta variable)\n"
+
+#: converter/mymoneygncreader.cpp:2041
+msgid " prices\n"
+msgstr "precios\n"
+
+#: converter/mymoneygncreader.cpp:2042
+msgid " accounts\n"
+msgstr "cuentas\n"
+
+#: converter/mymoneygncreader.cpp:2043
+msgid " transactions\n"
+msgstr "asientos\n"
+
+#: converter/mymoneygncreader.cpp:2044
+msgid " schedules\n"
+msgstr "planificaciones\n"
+
+#: converter/mymoneygncreader.cpp:2047
+msgid "No inconsistencies were detected"
+msgstr "No se encontraron inconsistencias"
+
+#: converter/mymoneygncreader.cpp:2049
+msgid " inconsistencies were detected and corrected\n"
+msgstr " inconsistencias fueron detectadas y corregidas\n"
+
+#: converter/mymoneygncreader.cpp:2054
+msgid " orphan accounts were created\n"
+msgstr " fueron creadas cuentas huerfanas\n"
+
+#: converter/mymoneygncreader.cpp:2059
+msgid " possible schedule problems were noted\n"
+msgstr " se notificaron posibles problemas en planificaciones\n"
+
+#: converter/mymoneygncreader.cpp:2064
+msgid "Small Business Features (Customers, Invoices, etc.)"
+msgstr "Funcionalidad para pequeñas empresas (Clientes, Facturas, etc.)"
+
+#: converter/mymoneygncreader.cpp:2065 views/kmymoneyview.cpp:241
+#: views/kmymoneyview.cpp:243
+msgid "Budgets"
+msgstr "Presupuestos"
+
+#: converter/mymoneygncreader.cpp:2066
+msgid "Lots"
+msgstr "Lotes"
+
+#: converter/mymoneygncreader.cpp:2068
+msgid "The following features found in your file are not currently supported:"
+msgstr ""
+"Las siguientes funcionalidades encontradas en su archivo no están soportadas "
+"actualmente:"
+
+#: converter/mymoneygncreader.cpp:2071
+msgid ""
+"\n"
+"\n"
+"Press More for further information"
+msgstr ""
+"\n"
+"\n"
+"Pulse en Más para obtener información adicional"
+
+#: converter/mymoneygncreader.cpp:2139
+msgid "Orphan created from unknown gnucash account"
+msgstr "Se creó una Huerfana a partir de una cuenta desconocida de gnucash"
+
+#: converter/mymoneygncreader.cpp:2170
+msgid "Internal error - invalid interval char in incrDate"
+msgstr "Error Interno - intervalo de char no válido en incrDate"
+
+#: converter/mymoneygncreader.cpp:2233
+msgid "Enter the investment account name "
+msgstr "Introduzca el nombre de la cuenta de inversiones"
+
+#: converter/mymoneygncreader.cpp:2234
+msgid "My Investments"
+msgstr "Mis Inversiones"
+
+#: converter/mymoneygncreader.cpp:2269
+#, c-format
+msgid "Select parent investment account or enter new name. Stock %1"
+msgstr ""
+"Escoja la cuenta de inversiones madre o introduzca un nuevo nombre. Acción %1"
+
+#: converter/mymoneygncreader.cpp:2292 converter/mymoneygncreader.cpp:2307
+msgid "%1 is not an Investment Account. Do you wish to make it one?"
+msgstr "%1 no es una cuenta de Inversión. ¿Desea convertirla en una de estas?"
+
+#: converter/mymoneygncreader.cpp:2408
+msgid ""
+"An Investment account must be a child of an Asset account\n"
+"Account %1 will be stored under the main Asset account"
+msgstr ""
+"Las cuentas de Inversión deben ser hijas de una cuenta de Activos\n"
+"La cuenta %1 será colocada bajo la cuenta principal de Activos"
+
+#: converter/mymoneygncreader.cpp:2410
+msgid ""
+"An Income account must be a child of an Income account\n"
+"Account %1 will be stored under the main Income account"
+msgstr ""
+"Las cuentas de Ingresos deben ser hijas de una cuenta de Ingresos\n"
+"La cuenta %1 será colocada bajo la cuenta principal de Ingresos"
+
+#: converter/mymoneygncreader.cpp:2412
+msgid ""
+"An Expense account must be a child of an Expense account\n"
+"Account %1 will be stored under the main Expense account"
+msgstr ""
+"Las cuentas de Gastos deben ser hijas de una cuenta de Gastos\n"
+"La cuenta %1 será colocada bajo la cuenta principal de Gastos"
+
+#: converter/mymoneygncreader.cpp:2414
+msgid ""
+"One or more transactions contain a reference to an otherwise unknown "
+"account\n"
+"An asset account with the name %1 has been created to hold the data"
+msgstr ""
+"Uno o más asientos contienen una referencia a una cuenta desconocida\n"
+"Se ha creado una cuenta de activos con el nombre %1 para contener los datos"
+
+#: converter/mymoneygncreader.cpp:2416
+msgid "Schedule %1 has interval of %2 which is not currently available"
+msgstr ""
+"La planificación %1 tiene un intervalo de %2, que en la actualidad no está "
+"disponible"
+
+#: converter/mymoneygncreader.cpp:2417
+msgid "Schedule %1 dropped at user request"
+msgstr "La planificación %1 ha sido eliminada a requerimiento del usuario"
+
+#: converter/mymoneygncreader.cpp:2418
+msgid "Schedule %1 contains unknown action (key = %2, type = %3)"
+msgstr ""
+"La planificación %1 contiene una acción desconicida (clave = %1, tipo = %3)"
+
+#: converter/mymoneygncreader.cpp:2419
+msgid "Schedule %1 contains multiple actions; only one has been imported"
+msgstr ""
+"La planificación %1 contiene múltiples acciones; solo ha siod importada una"
+
+#: converter/mymoneygncreader.cpp:2420
+msgid "Schedule %1 contains no valid splits"
+msgstr "La planificación %1 no contiene partidas válidas"
+
+#: converter/mymoneygncreader.cpp:2421
+msgid ""
+"Schedule %1 appears to contain a formula. GnuCash formulae are not "
+"convertible"
+msgstr ""
+"La planificación %1 parece contener una fórmula. Las fórmulas de GnuCash no "
+"pueden ser convertidas"
+
+#: converter/mymoneygncreader.cpp:2422
+msgid ""
+"Schedule %1 contains unknown interval specification; please check for "
+"correct operation"
+msgstr ""
+"La planificación %1 contiene una especificación de intervalo desconocida; "
+"por favor compruebe que la operación esté correcta"
+
+#: converter/mymoneygncreader.cpp:2423
+msgid ""
+"Schedule %1 contains a deferred interval specification; please check for "
+"correct operation"
+msgstr ""
+"La planificación %1 contiene una especificación de intervalo diferido; por "
+"favor compruebe que la operación esté correcta"
+
+#: converter/mymoneygncreader.cpp:2424
+msgid ""
+"Account or Category %1, transaction date %2; split contains invalid value; "
+"please check"
+msgstr ""
+"Cuenta o Categoría %1, fecha del asiento %2; la partida contiene valores no "
+"válidos; por favor verifíquela"
+
+#: kmymoneyutils.cpp:146
+msgid "&New Schedule..."
+msgstr "&Nuevo programa de asientos..."
+
+#: kmymoneyutils.cpp:148
+msgid "Create a new schedule."
+msgstr "Crear un nuevo asiento programado."
+
+#: kmymoneyutils.cpp:149
+msgid "Use this to create a new schedule."
+msgstr "Use esto para crear un nuevo asiento programado."
+
+#: kmymoneyutils.cpp:158
+msgid "&Filter"
+msgstr "&Filtrar"
+
+#: kmymoneyutils.cpp:160
+msgid "Filter out accounts"
+msgstr "Filtrar las cuentas"
+
+#: kmymoneyutils.cpp:161
+msgid "Use this to filter out accounts"
+msgstr "Use esto para filtrar las cuentas"
+
+#: kmymoneyutils.cpp:192
+msgid "Preferred accounts"
+msgstr "Cuentas preferidas"
+
+#: kmymoneyutils.cpp:193
+msgid "Payment accounts"
+msgstr "Cuentas de gastos"
+
+#: kmymoneyutils.cpp:194
+msgid "Favorite reports"
+msgstr "Informes favoritos"
+
+#: kmymoneyutils.cpp:195
+msgid "Forecast (schedule)"
+msgstr "Pronóstico (planificado)"
+
+#: kmymoneyutils.cpp:196
+msgid "Networth forecast"
+msgstr "Pronóstico de Valor Neto"
+
+#: kmymoneyutils.cpp:197
+msgid "Forecast (history)"
+msgstr "Pronóstico (histórico)"
+
+#: kmymoneyutils.cpp:198
+msgid "Assets and Liabilities"
+msgstr "Activos y Pasivos"
+
+#: kmymoneyutils.cpp:199 reports/pivottable.cpp:2416 views/khomeview.cpp:1393
+#: widgets/rc.cpp:70
+msgid "Budget"
+msgstr "Presupuesto"
+
+#: kmymoneyutils.cpp:200
+msgid "CashFlow"
+msgstr "Tesorería"
+
+#: dialogs/kenterscheduledlg.cpp:153 kmymoneyutils.cpp:366
+msgid "Unable to load schedule details"
+msgstr "Incapaz de cargar los detalles de la transacción planificada"
+
+#: kmymoneyutils.cpp:390 widgets/register.cpp:473
+msgid ""
+"_: Reconcile state 'Not reconciled'\n"
+"Not reconciled"
+msgstr "No reconciliado"
+
+#: kmymoneyutils.cpp:393 widgets/register.cpp:476
+msgid ""
+"_: Reconcile state 'Cleared'\n"
+"Cleared"
+msgstr "Librado"
+
+#: kmymoneyutils.cpp:396 widgets/register.cpp:479
+msgid ""
+"_: Reconcile state 'Reconciled'\n"
+"Reconciled"
+msgstr "Reconciliado"
+
+#: kmymoneyutils.cpp:399 widgets/register.cpp:482
+msgid ""
+"_: Reconcile state 'Frozen'\n"
+"Frozen"
+msgstr "Congelado"
+
+#: kmymoneyutils.cpp:410
+msgid ""
+"_: Reconcile flag C\n"
+"C"
+msgstr "C"
+
+#: kmymoneyutils.cpp:413
+msgid ""
+"_: Reconcile flag R\n"
+"R"
+msgstr "R"
+
+#: kmymoneyutils.cpp:416
+msgid ""
+"_: Reconcile flag F\n"
+"F"
+msgstr "F"
+
+#: kmymoneyutils.cpp:419
+msgid ""
+"_: Flag for unknown reconciliation state\n"
+"?"
+msgstr "?"
+
+#: _tips.cpp:3
+msgid ""
+"<p>...that you can change the sort order of ledger entries by\n"
+"right-clicking the header of the ledger view?\n"
+msgstr ""
+"<p> ... que puede cambiar el orden de selección de los asientos en los "
+"libros diarios\n"
+"pulsando con el botón derecho en la cabecera de la vista del libro?\n"
+
+#: _tips.cpp:9
+msgid ""
+"<p>...that you can easily move to the other side of a transfer transaction\n"
+"by opening the context menu with the right mouse button and selecting one of "
+"the\n"
+"'Goto' functions?\n"
+msgstr ""
+"<p> ...que puede moverse fácilmente al otro lado de un asiento de "
+"transferencia\n"
+"abriendo el menú contextual con el botón derecho del ratón y escogiendo\n"
+"las funciones 'Ir a..'?\n"
+
+#: _tips.cpp:16
+msgid ""
+"<p>...that you can start editing a transaction by double-clicking on the\n"
+"transaction in the register?\n"
+msgstr ""
+"<p>...que puede comenzar a editar un asiento mediante un doble-click\n"
+"en el asiento, en el registro?\n"
+
+#: _tips.cpp:22
+msgid ""
+"<p>...that you can show more details of the selected transaction in the\n"
+"register by selecting the 'ledger lens' feature in the settings dialog?\n"
+msgstr ""
+"<p>...que puede ver más detalles del asiento que escoja en el registro\n"
+"mediante la función 'lente del libro mayor', del diálogo configuración?\n"
+
+#: _tips.cpp:28
+msgid ""
+"<p>...that transactions with no category assigned or split\n"
+"transactions with unassigned values are marked with an exclamation mark \n"
+"on a yellow triangle in the register?\n"
+msgstr ""
+"<p>...que los asientos sin categoría asignada o con partidas\n"
+"sin valores asignados aparecen marcados con un signo de exclamación\n"
+" sobre un triangulo amarillo en el registro?\n"
+
+#: _tips.cpp:35
+msgid ""
+"<p>...that you can show all details of the transactions in the register\n"
+"by typing &lt;Ctrl-T&gt; or selecting the 'Settings/Show Transaction "
+"Detail'\n"
+"menu entry? You can turn this feature off the same way.\n"
+msgstr ""
+"<p>...que puede mostrar todos los detalles de los asientos en el registro\n"
+"escribiendo &lt;Ctrl-T&gt; o escogiendo \"Configuración/Mostrar Detalles del "
+"asiento\"\n"
+"Puede apagar esta función de la misma manera.\n"
+
+#: _tips.cpp:42
+msgid ""
+"<p>...that you can switch between a listing of all accounts or\n"
+"an icon view of all asset and liability accounts with the tabs\n"
+"in the accounts view?\n"
+msgstr ""
+"<p>...que puede alternar entre un listado de todas las cuentas\n"
+"o una vista en iconos de los activos y pasivos mediante\n"
+"las pestañas en la vista de las cuentas?\n"
+
+#: _tips.cpp:49
+msgid "<p>...that the KMyMoney development team wishes you a nice day?\n"
+msgstr "<p>...que el equipo de desarrollo de KMyMoney le desea un buen día?\n"
+
+#: _tips.cpp:54
+msgid ""
+"<p>...you can use your own external filter program to convert any\n"
+"import format to QIF on the fly? See the QIF profile editor for\n"
+"more details.\n"
+msgstr ""
+"<p>...que puede emplear su propio programa externo para convertir\n"
+"cualquier formato de importación a QIF? Vea el editor de perfis QIF para\n"
+"obtener más detalles.\n"
+
+#: _tips.cpp:61
+msgid ""
+"<p>...that you can create a scheduled transaction from an existing\n"
+"one by selecting the context menu on a transaction in the ledger\n"
+"or the \"More...\"-menu in the transaction form?\n"
+msgstr ""
+"<p>...que puede crear asientos programados a partir de un asiento ya "
+"existente\n"
+"mediante el menu contextual en un asiento en el libro mayor\n"
+"y con el menú \"Más...\" en el formulario de asentar transacciones?\n"
+
+#: _tips.cpp:68
+msgid ""
+"<p>...that you can switch to the payee of a transaction\n"
+"by selecting the context menu on a transaction in the ledger\n"
+"or in the transaction menu?\n"
+msgstr ""
+"<p>...que puede cambiar al beneficiario de un asiento\n"
+"mediante el menu contextual en un asiento en el libro mayor\n"
+"o en el menú de asientos?\n"
+
+#: _tips.cpp:75
+msgid ""
+"<p>...that you can modify the colors and fonts used for the ledgers\n"
+"via <i>Configure/Register/...</i>?\n"
+msgstr ""
+"<p>...que puede modificar los colores y tipos de letra usados en los libros\n"
+"mediante <i>Configurar/Registro/...</i>?\n"
+
+#: _tips.cpp:81
+msgid ""
+"<p>...that you can hide transactions prior to a specific date?\n"
+"The date can be modified via <i>Configure/Register/Filter</i>.\n"
+msgstr ""
+"<p>...que puede ocultar los asientos anteriores a una cierta fecha?\n"
+"La fecha puede escogerla mediante <i>Configurar/Registro/Filtro</i>.\n"
+
+#: _tips.cpp:87
+msgid ""
+"<p>...that you can customize the \"Home-Page\"\n"
+"via <i>Configure/Home</i>?\n"
+msgstr ""
+"<p>...que puede personalizar la \"Página de Inicio\"\n"
+"mediante <i>Configurar/Página inicial</i>?\n"
+
+#: _tips.cpp:93
+msgid ""
+"<p>...that you can enter new transactions even while reconciling\n"
+"an account? You can also make the transaction form visible.\n"
+msgstr ""
+"<p>...que puede asentar nuevos asientos al mismo tiempo que reconcilia una "
+"cuenta? También puede hacer visible el formulario de ingresar asientos.\n"
+
+#: _tips.cpp:99
+msgid ""
+"<p>...that you can actively support the KMyMoney development team in\n"
+"cases that heavily depend on your data? You can save your data in an\n"
+"anonymized way for this support.<p>\n"
+"Just open your data file and immediately\n"
+"select <b>File/Save as...</b>. In the <b>Save As...</b> dialog\n"
+"select the filter <b>Anonymous Files</b> and make sure your file gets\n"
+"the extensions <b>.anon.xml</b>. <p>\n"
+"To verify, how the data looks like you are about to send away, you can open\n"
+"this file in KMyMoney and see how the developers see your data.\n"
+msgstr ""
+"<p> ...que puede ayudar activamente al equipo de desarrollo de KMyMoney\n"
+"en los casos que dependan fuertemente de sus datos? Puede guardar sus\n"
+"datos en un formato anónimo para este fin.<p>\n"
+"Simplemente abra su archivo de datos e inmediatamente\n"
+"escoja <b> Archivo/Guardar como...</b>. En el diálogo <b>Guardar como...</"
+"b>\n"
+"escoja el filtro <b>Archivos anónimos</b> y asegúrese de que su archivo "
+"tome\n"
+"la extensión <b>.anon.xml</b>.<p>\n"
+"Para verificar los datos que está a punto de enviar, puede abrir\n"
+"el archivo con KMyMoney y verá como verán lo desarrolladores sus datos.\n"
+
+#: _tips.cpp:112
+msgid ""
+"<p>... that you can import your bank statements even without a network \n"
+"connection? Just select the file (OFX or QIF) from the File->Import menu.</"
+"p>\n"
+"<p>Provided by Jose Jorge</p>\n"
+msgstr ""
+"<p>... que puede importar sus extractos bancarios incluso sin conexión de "
+"red?\n"
+"Simplemente escoja el archivo (OFX o QIF) del menú Archivo->Importar.</p>\n"
+"<p>Provista por Jose Jorge</p>\n"
+
+#: reports/listtable.cpp:159 reports/listtable.cpp:163
+#: reports/pivottable.cpp:1564
+msgid ""
+"_: Report date range\n"
+"%1 through %2"
+msgstr "%1 hasta %2"
+
+#: reports/listtable.cpp:171 reports/pivottable.cpp:1571
+#, c-format
+msgid "All currencies converted to %1"
+msgstr "Todas las divisas convertidas a %1"
+
+#: reports/listtable.cpp:172 reports/pivottable.cpp:1328
+msgid "All currencies converted to %1\n"
+msgstr "Todas las divisas convertidas a %1\n"
+
+#: reports/listtable.cpp:176 reports/pivottable.cpp:1573
+msgid "All values shown in %1 unless otherwise noted"
+msgstr "Todos los valores mostrados en %1, a menos que se indique otra cosa"
+
+#: reports/listtable.cpp:177 reports/pivottable.cpp:1330
+msgid "All values shown in %1 unless otherwise noted\n"
+msgstr ""
+"Todos los valores son mostrados en %1 a menos que se indique otra cosa\n"
+
+#: dialogs/kequitypriceupdatedlg.cpp:73 dialogs/kfindtransactiondlg.cpp:188
+#: dialogs/rc.cpp:53 dialogs/rc.cpp:63 dialogs/rc.cpp:208 dialogs/rc.cpp:805
+#: dialogs/settings/rc.cpp:111 dialogs/transactioneditor.cpp:844
+#: reports/listtable.cpp:196 views/khomeview.cpp:412 views/khomeview.cpp:485
+#: views/khomeview.cpp:519 views/rc.cpp:61 widgets/kmymoneypriceview.cpp:128
+#: widgets/rc.cpp:36 widgets/register.cpp:565 widgets/transaction.cpp:1027
+#: widgets/transaction.cpp:1484
+msgid "Date"
+msgstr "Fecha"
+
+#: reports/listtable.cpp:198
+msgid "Num"
+msgstr "Nº"
+
+#: dialogs/kfindtransactiondlg.cpp:204 dialogs/kmymoneysplittable.cpp:78
+#: dialogs/kmymoneysplittable.cpp:831 dialogs/rc.cpp:217
+#: dialogs/transactioneditor.cpp:831 dialogs/transactioneditor.cpp:1374
+#: dialogs/transactioneditor.cpp:1382 dialogs/transactioneditor.cpp:1396
+#: dialogs/transactioneditor.cpp:1449 dialogs/transactioneditor.cpp:1456
+#: dialogs/transactioneditor.cpp:1504 reports/listtable.cpp:200
+#: views/kcategoriesview.cpp:76 views/rc.cpp:62 widgets/rc.cpp:115
+#: widgets/register.cpp:62 widgets/transaction.cpp:848
+#: widgets/transaction.cpp:906
+msgid "Category"
+msgstr "Categoría"
+
+#: dialogs/kmymoneysplittable.cpp:79 dialogs/kmymoneysplittable.cpp:837
+#: reports/listtable.cpp:202 widgets/rc.cpp:101 widgets/transaction.cpp:1042
+#: widgets/transaction.cpp:1628
+msgid "Memo"
+msgstr "Concepto"
+
+#: reports/listtable.cpp:203
+msgid "Top Category"
+msgstr "Categoría superior"
+
+#: reports/listtable.cpp:204
+msgid "Category Type"
+msgstr "Tipo de Categoría"
+
+#: dialogs/rc.cpp:229 dialogs/settings/rc.cpp:152 reports/listtable.cpp:207
+#: widgets/kmymoneycombo.cpp:346 widgets/rc.cpp:107
+msgid "Reconciled"
+msgstr "Reconciliados"
+
+#: reports/listtable.cpp:208 widgets/rc.cpp:117
+msgid "Action"
+msgstr "Acción"
+
+#: dialogs/investactivities.cpp:199 dialogs/investactivities.cpp:287
+#: dialogs/investactivities.cpp:424 dialogs/investactivities.cpp:504
+#: dialogs/investactivities.cpp:544 dialogs/investtransactioneditor.cpp:241
+#: reports/listtable.cpp:209 widgets/rc.cpp:103 widgets/transaction.cpp:1513
+msgid "Shares"
+msgstr "Acciones"
+
+#: dialogs/investtransactioneditor.cpp:248
+#: dialogs/investtransactioneditor.cpp:1067
+#: dialogs/investtransactioneditor.cpp:1068
+#: dialogs/investtransactioneditor.cpp:1072
+#: dialogs/kequitypriceupdatedlg.cpp:72 dialogs/rc.cpp:109 dialogs/rc.cpp:164
+#: dialogs/rc.cpp:251 dialogs/rc.cpp:756 dialogs/rc.cpp:827
+#: dialogs/settings/rc.cpp:117 reports/listtable.cpp:210
+#: reports/listtable.cpp:211 reports/pivottable.cpp:2441
+#: views/kinvestmentview.cpp:80 widgets/kmymoneypriceview.cpp:129
+#: widgets/rc.cpp:43 widgets/rc.cpp:105 widgets/register.cpp:573
+msgid "Price"
+msgstr "Precio"
+
+#: reports/listtable.cpp:212
+msgid "Net Value"
+msgstr "Valor Neto"
+
+#: reports/listtable.cpp:213
+msgid "Buys"
+msgstr "Compras"
+
+#: reports/listtable.cpp:214
+msgid "Sells"
+msgstr "Ventas"
+
+#: reports/listtable.cpp:215
+msgid "Dividends Reinvested"
+msgstr "Dividendos Reinvertidos"
+
+#: reports/listtable.cpp:216
+msgid "Dividends Paid Out"
+msgstr "Dividendos Pagados"
+
+#: reports/listtable.cpp:217
+msgid "Starting Balance"
+msgstr "Saldo Inicial"
+
+#: reports/listtable.cpp:218
+msgid "Ending Balance"
+msgstr "Saldo Final"
+
+#: reports/listtable.cpp:219
+msgid "Annualized Return"
+msgstr "Retorno Anual"
+
+#: reports/listtable.cpp:220
+msgid "Return On Investment"
+msgstr "Retorno de Inversión"
+
+#: dialogs/rc.cpp:106 dialogs/rc.cpp:161 dialogs/rc.cpp:248 dialogs/rc.cpp:505
+#: dialogs/rc.cpp:570 dialogs/rc.cpp:667 dialogs/rc.cpp:753
+#: reports/listtable.cpp:223 widgets/register.cpp:570
+msgid "Payment"
+msgstr "Pago"
+
+#: dialogs/rc.cpp:111 dialogs/rc.cpp:166 dialogs/rc.cpp:253 dialogs/rc.cpp:709
+#: dialogs/rc.cpp:758 reports/listtable.cpp:224 widgets/rc.cpp:119
+#: widgets/register.cpp:575
+msgid "Balance"
+msgstr "Saldo"
+
+#: reports/listtable.cpp:227 views/kscheduledview.cpp:74
+msgid "Next Due Date"
+msgstr "Próxima fecha de vencimiento"
+
+#: reports/listtable.cpp:229 views/kscheduledview.cpp:76
+msgid "Payment Method"
+msgstr "Método de Pago"
+
+#: dialogs/rc.cpp:803 reports/listtable.cpp:231 widgets/rc.cpp:2
+msgid "Description"
+msgstr "Descripción"
+
+#: reports/listtable.cpp:232
+msgid "Opening Date"
+msgstr "Fecha de Apertura"
+
+#: reports/listtable.cpp:234
+msgid "Balance Early Warning"
+msgstr "Advertencia Temprana de Saldo"
+
+#: reports/listtable.cpp:235
+msgid "Balance Max Limit"
+msgstr "Límite Máximo de Saldo"
+
+#: reports/listtable.cpp:236
+msgid "Credit Early Warning"
+msgstr "Advertencia Temprana de Crédito"
+
+#: reports/listtable.cpp:237
+msgid "Credit Max Limit"
+msgstr "Límite Máximo de Crédito"
+
+#: dialogs/rc.cpp:376 reports/listtable.cpp:238
+msgid "Tax"
+msgstr "Impuesto"
+
+#: reports/listtable.cpp:239
+msgid "Preferred"
+msgstr "Preferida"
+
+#: reports/listtable.cpp:240
+msgid "Loan Amount"
+msgstr "Monto del Préstamo"
+
+#: dialogs/rc.cpp:511 reports/listtable.cpp:241
+msgid "Interest Rate"
+msgstr "Tasa de Interés"
+
+#: reports/listtable.cpp:242
+msgid "Next Interest Change"
+msgstr "Próximo Cambio de Interés"
+
+#: reports/listtable.cpp:243
+msgid "Periodic Payment"
+msgstr "Pago Periódico"
+
+#: reports/listtable.cpp:244
+msgid "Final Payment"
+msgstr "Pago Final"
+
+#: reports/listtable.cpp:245 views/khomeview.cpp:766 views/khomeview.cpp:1265
+#: views/khomeview.cpp:1273
+msgid "Current Balance"
+msgstr "Saldo Actual"
+
+#: dialogs/investactivities.cpp:201 dialogs/investactivities.cpp:289
+#: dialogs/investactivities.cpp:368 dialogs/investactivities.cpp:426
+#: dialogs/rc.cpp:327 reports/listtable.cpp:360 reports/listtable.cpp:364
+#: reports/listtable.cpp:556 reports/listtable.cpp:558
+#: reports/pivottable.cpp:1343 reports/pivottable.cpp:1445
+#: reports/pivottable.cpp:1505 reports/pivottable.cpp:1598
+#: reports/pivottable.cpp:1768 reports/pivottable.cpp:1845
+#: reports/pivottable.cpp:2165 reports/pivottable.cpp:2167
+#: reports/pivottable.cpp:2187 reports/pivottable.cpp:2189
+#: reports/querytabletest.cpp:134 reports/querytabletest.cpp:135
+#: reports/querytabletest.cpp:136 reports/querytabletest.cpp:137
+#: reports/querytabletest.cpp:162 reports/querytabletest.cpp:163
+#: reports/querytabletest.cpp:164 reports/querytabletest.cpp:197
+#: reports/querytabletest.cpp:198 reports/querytabletest.cpp:224
+#: reports/querytabletest.cpp:250 reports/querytabletest.cpp:251
+#: reports/querytabletest.cpp:252 reports/querytabletest.cpp:275
+#: reports/querytabletest.cpp:276 reports/querytabletest.cpp:277
+#: reports/querytabletest.cpp:366 reports/querytabletest.cpp:422
+#: reports/querytabletest.cpp:423 views/kforecastview.cpp:568 views/rc.cpp:18
+#: widgets/kmymoneyaccounttreeforecast.cpp:139 widgets/transaction.cpp:1643
+msgid "Total"
+msgstr "Total"
+
+#: reports/listtable.cpp:444
+msgid "Initial Market Value"
+msgstr "Valor de Mercado Inicial"
+
+#: reports/listtable.cpp:445
+msgid "Ending Market Value"
+msgstr "Valor de Mercado Final"
+
+#: reports/listtable.cpp:448 reports/querytabletest.cpp:651
+msgid "Opening Balance"
+msgstr "Saldo de Apertura"
+
+#: reports/listtable.cpp:449 reports/querytabletest.cpp:652
+#: reports/querytabletest.cpp:653
+msgid "Closing Balance"
+msgstr "Saldo Final"
+
+#: reports/listtable.cpp:490 reports/listtable.cpp:491
+msgid "Calculated"
+msgstr "Calculado"
+
+#: reports/listtable.cpp:572 reports/listtable.cpp:574
+#: reports/pivottable.cpp:1530 reports/pivottable.cpp:1886
+#: reports/querytabletest.cpp:138 reports/querytabletest.cpp:165
+#: reports/querytabletest.cpp:199 reports/querytabletest.cpp:225
+#: reports/querytabletest.cpp:253 reports/querytabletest.cpp:278
+#: reports/querytabletest.cpp:367 reports/querytabletest.cpp:402
+#: reports/querytabletest.cpp:424 reports/querytabletest.cpp:548
+#: reports/querytabletest.cpp:551 reports/querytabletest.cpp:586
+msgid "Grand Total"
+msgstr "Total Final"
+
+#: dialogs/rc.cpp:233 reports/pivottable.cpp:339 views/kscheduledview.cpp:174
+#: views/kscheduledview.cpp:433 views/kscheduledview.cpp:449
+#: widgets/kmymoneyscheduledcalendar.cpp:48
+msgid "Transfers"
+msgstr "Transferencias"
+
+#: reports/pivottable.cpp:1951
+msgid "Legend"
+msgstr "Leyenda"
+
+#: reports/pivottable.cpp:2411 views/khomeview.cpp:1406
+#: views/khomeview.cpp:1443
+msgid "Actual"
+msgstr "Real"
+
+#: reports/pivottable.cpp:2421 views/khomeview.cpp:1409
+#: views/khomeview.cpp:1446
+msgid "Difference"
+msgstr "Diferencia"
+
+#: reports/pivottable.cpp:2431
+msgid "Moving Average"
+msgstr "Promedio Móvil"
+
+#: reports/pivottable.cpp:2436
+msgid "Moving Average Price"
+msgstr "Precio Promedio Móvil"
+
+#: reports/objectinfotable.cpp:214 reports/querytable.cpp:693
+#: reports/querytable.cpp:736 reports/querytable.cpp:1356
+#: reports/querytable.cpp:1375 views/kpayeesview.cpp:742
+#, c-format
+msgid "Transfer from %1"
+msgstr "Transferir desde %1"
+
+#: reports/objectinfotable.cpp:215 reports/querytable.cpp:694
+#: reports/querytable.cpp:735 reports/querytable.cpp:1355
+#: reports/querytable.cpp:1374 views/kpayeesview.cpp:740
+#, c-format
+msgid "Transfer to %1"
+msgstr "Transferir a %1"
+
+#: reports/querytabletest.cpp:471 views/kreportsview.cpp:1144
+msgid "Investment Transactions"
+msgstr "Asientos de las Inversiones"
+
+#: reports/querytabletest.cpp:472 reports/querytabletest.cpp:564
+msgid "Test Report"
+msgstr "Comprobar Informe"
+
+#: reports/querytabletest.cpp:547 reports/querytabletest.cpp:550
+msgid "Total Stock 1"
+msgstr "Total de Acciones 1"
+
+#: reports/querytabletest.cpp:563 views/kreportsview.cpp:1174
+msgid "Investment Performance by Account"
+msgstr "Comportamiento de la Inversión por Cuenta"
+
+#: reports/querytable.cpp:431 reports/querytable.cpp:1200
+#, c-format
+msgid "Month of %1"
+msgstr "Mes de %1"
+
+#: reports/querytable.cpp:432 reports/querytable.cpp:1201
+#, c-format
+msgid "Week of %1"
+msgstr "Semana de %1"
+
+#: reports/querytable.cpp:576 reports/querytable.cpp:739
+#: reports/querytable.cpp:858 reports/querytable.cpp:1325
+#: reports/querytable.cpp:1481
+msgid "No Institution"
+msgstr "Sin Organización"
+
+#: reports/querytable.cpp:580 reports/querytable.cpp:1329
+msgid "[Empty Payee]"
+msgstr "[Beneficiario en blanco]"
+
+#: reports/querytable.cpp:615 reports/querytable.cpp:1361
+msgid "[Split Transaction]"
+msgstr "Desglosar Asiento"
+
+#: reports/querytable.cpp:616 reports/querytable.cpp:617
+msgid "Split"
+msgstr "Desglosar"
+
+#: main.cpp:51
+msgid ""
+"\n"
+"KMyMoney, the Personal Finance Manager for KDE.\n"
+"\n"
+"Please consider contributing to this project with code and/or suggestions."
+msgstr ""
+"\n"
+"KMyMoney, el gestor de finanzas personales de KDE.\n"
+"\n"
+"Usted puede contribuir a este proyecto mediante código y/o sugerencias."
+
+#: main.cpp:55
+msgid "language to be used"
+msgstr "lenguaje a usar"
+
+#: main.cpp:56
+msgid "don't open last used file"
+msgstr "no abrir el último archivo utilizado"
+
+#: main.cpp:57
+msgid "enable performance timers"
+msgstr "habilitar cronómetros de desempeño"
+
+#: main.cpp:61
+msgid "turn on program traces"
+msgstr "habilitar trazas del programa"
+
+#: main.cpp:62
+msgid "dump the names of all defined KAction objects to stdout and quit"
+msgstr ""
+"volcar los nombres de todos los objetos KAction definidos a stdout y salir"
+
+#: main.cpp:66
+msgid "file to open"
+msgstr "archivo a abrir"
+
+#: main.cpp:92
+msgid "Memory leakage detection"
+msgstr "Detección de rotura de memória"
+
+#: main.cpp:96
+msgid "Compiled with the following settings:\n"
+msgstr "Compilado con las siguientes opciones:\n"
+
+#: dialogs/kmymoneysplittable.cpp:650 dialogs/ksplittransactiondlg.cpp:277
+#: main.cpp:98
+msgid "KMyMoney"
+msgstr "KMyMoney"
+
+#: main.cpp:104
+msgid "Initial idea, much initial source code, Project admin"
+msgstr "Idea inicial, mucho código fuente inicial, Administrador del Proyecto"
+
+#: main.cpp:105
+msgid "Core engine, Release Manager, Project admin"
+msgstr "Núcleo del programa, Gerente de Versiones, Administrador del Proyecto"
+
+#: main.cpp:106
+msgid "Reporting logic, OFX Import"
+msgstr "Lógica de los Informes, Importación OFX"
+
+#: main.cpp:107
+msgid "Database backend, maintainer stable branch"
+msgstr "Base de datos, responsable por la rama estable"
+
+#: main.cpp:108
+msgid "Forecast, Reports"
+msgstr "Pronóstico, Informes"
+
+#: main.cpp:109
+msgid "Project Admin"
+msgstr "Administrador del Proyecto"
+
+#: main.cpp:110
+msgid "Developer"
+msgstr "Desarrollador"
+
+#: main.cpp:111
+msgid "Database backend"
+msgstr "Base de datos"
+
+#: main.cpp:113
+msgid "Initial investment support"
+msgstr "Soporte inicial de inversiones"
+
+#: main.cpp:114
+msgid "Developer & Artist"
+msgstr "Desarrollador y Artista"
+
+#: main.cpp:115
+msgid "Icons & splash screen"
+msgstr "Iconos y Splash screen"
+
+#: main.cpp:116 main.cpp:117
+msgid "Patches"
+msgstr "Parches"
+
+#: main.cpp:136
+msgid ""
+"The monetary decimal symbol is not correctly set in the KDE Control Center's "
+"Country/Region & Language settings. Please set it to a reasonable value and "
+"start KMyMoney again."
+msgstr ""
+"El símbolo monetario decimal no está configurado correctamente en la "
+"configuración de País/Región y Lenguaje del Centro de Control de KDE. Por "
+"favor configure los valores correctamente y reinicie KMyMoney."
+
+#: main.cpp:136
+msgid "Invalid settings"
+msgstr "Configuración inválida"
+
+#: main.cpp:228
+msgid "Another instance of KMyMoney is already running. Do you want to quit?"
+msgstr "Se está ejecutando otra instancia de KMyMoney. Desea salir?"
+
+#: main.cpp:289
+msgid "Uncaught error. Please report the details to the developers"
+msgstr ""
+"Error inesperado. Por favor, reporte los detalles a los desarrolladores"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Alvaro Soliverez"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "asoliverez@gmail.com"
+
+#: dialogs/kcsvprogressdlg.cpp:62 dialogs/kimportdlg.cpp:66 rc.cpp:1
+msgid "&Import"
+msgstr "&Importar"
+
+#: rc.cpp:2
+msgid "E&xport"
+msgstr "E&xportar"
+
+#: rc.cpp:3
+msgid "&Institution"
+msgstr "Or&ganización"
+
+#: rc.cpp:4
+msgid "&Account"
+msgstr "&Cuenta"
+
+#: rc.cpp:5
+msgid "&Category"
+msgstr "&Categoría"
+
+#: rc.cpp:6
+msgid "&Transaction"
+msgstr "Asien&to"
+
+#: rc.cpp:7 rc.cpp:20
+msgid "Mark transaction as..."
+msgstr "Marcar asiento como..."
+
+#: rc.cpp:8 rc.cpp:21
+msgid "Mark transaction"
+msgstr "Marcar asiento"
+
+#: rc.cpp:9
+msgid "T&ools"
+msgstr "Herramientas"
+
+#: rc.cpp:10
+msgid "Account options"
+msgstr "Opciones de Cuenta"
+
+#: rc.cpp:11
+msgid "Category options"
+msgstr "Opciones de Categoría"
+
+#: rc.cpp:12
+msgid "Institution options"
+msgstr "Opciones de Organización"
+
+#: rc.cpp:13
+msgid "Payee options"
+msgstr "Opciones de Pagador/Beneficiario"
+
+#: rc.cpp:14
+msgid "Budget options"
+msgstr "Opciones de Presupuesto"
+
+#: rc.cpp:15
+msgid "Investment options"
+msgstr "Opciones de Inversión"
+
+#: rc.cpp:16
+msgid "Scheduled transactions options"
+msgstr "Opciones de asientos planificados"
+
+#: rc.cpp:17
+msgid "Transaction options"
+msgstr "Opciones de Asiento"
+
+#: rc.cpp:18
+msgid "Move transaction to..."
+msgstr "Mover asiento a..."
+
+#: rc.cpp:19
+msgid "Select account"
+msgstr "Seleccionar cuenta"
+
+#: rc.cpp:22
+msgid "Currency options"
+msgstr "Opciones de Divisa"
+
+#: rc.cpp:24
+msgid "Always show a No. field in transaction form"
+msgstr "Mostrar siempre un campo Nº en el formulario de asiento de asientos"
+
+#: rc.cpp:25
+msgid "Auto fill with previous transaction data"
+msgstr "Autocompletar con datos de asientos previos"
+
+#: rc.cpp:26
+msgid "Treat two transactions as identical, if amount differs less than"
+msgstr "Tratar dos asientos como idénticos si el importe difiere menos de"
+
+#: dialogs/settings/rc.cpp:144 rc.cpp:27
+msgid "Auto increment check number"
+msgstr "Autoincrementar el número de cheque"
+
+#: rc.cpp:28
+msgid "Autosave file periodically"
+msgstr "Autoguardar archivo periódicamente"
+
+#: rc.cpp:29
+msgid "Autosave interval in minutes"
+msgstr "Intervalo de autoguardado en minutos"
+
+#: rc.cpp:30
+msgid "Check schedules upon startup"
+msgstr "Comprobar los asientos programados al arrancar"
+
+#: dialogs/settings/rc.cpp:171 rc.cpp:31
+msgid "Enter transactions this number of days in advance"
+msgstr "Introducir los asientos con estos dias de antelación"
+
+#: dialogs/settings/rc.cpp:172 rc.cpp:32
+msgid "Number of days to preview schedules in ledger"
+msgstr "Número de días de anticipo de planificaciones en el libro mayor"
+
+#: dialogs/settings/rc.cpp:143 rc.cpp:33
+msgid "Insert transaction type into No. field for new transactions"
+msgstr "Insertar tipo de asiento en el campo Nº en los nuevos asientos"
+
+#: dialogs/settings/rc.cpp:145 rc.cpp:34
+msgid "Keep changes when selecting a different transaction/split"
+msgstr "Mantener los cambios al escoger otro asiento/partida"
+
+#: rc.cpp:35
+msgid "Using the Enter key moves between the fields"
+msgstr "Utilizar la tecla Enter mueve entre los campos"
+
+#: dialogs/settings/rc.cpp:130 rc.cpp:36
+msgid "Use the ledger lens"
+msgstr "Usar la lupa del libro mayor"
+
+#: rc.cpp:37
+msgid "Price Precision"
+msgstr "Precisión del Precio"
+
+#: dialogs/rc.cpp:65 rc.cpp:38
+msgid "Update price history"
+msgstr "Actualizar historial de precios"
+
+#: dialogs/settings/rc.cpp:132 rc.cpp:39
+msgid "Show transaction form"
+msgstr "Mostrar el formulario de asientos"
+
+#: rc.cpp:40
+msgid "Start with last selected view or homepage"
+msgstr "Iniciar con la última página escogida o página de inicio"
+
+#: rc.cpp:41
+msgid "Use GPG to encrypt data file"
+msgstr "Utilizar GPG para codificar el archivo"
+
+#: rc.cpp:42
+msgid "Also encrypt against recover key"
+msgstr "Codificar también con la llave de recuperación"
+
+#: rc.cpp:43
+msgid "GPG User ID (deprecated)"
+msgstr "ID de usuario GPG (caducado)"
+
+#: rc.cpp:44
+msgid "GPG User ID"
+msgstr "ID de usuario GPG"
+
+#: rc.cpp:45
+msgid "Run in expert (accountant) mode"
+msgstr "Ejecutar en modo experto (contable)"
+
+#: rc.cpp:46
+msgid "Show splash screen during startup"
+msgstr "Mostrar la pantalla de presentación durante el inicio"
+
+#: rc.cpp:47
+msgid "Synchronize account in ledger and investment view"
+msgstr ""
+"Sincronizar la cuenta seleccionada en las vistas de libro mayor e inversiones"
+
+#: rc.cpp:48
+msgid "Icon size for view selection"
+msgstr "Tamaño de ícono para la selección de vistas"
+
+#: rc.cpp:49
+msgid "list of hidden views"
+msgstr "lista de vistas ocultas"
+
+#: rc.cpp:50
+msgid "Firsttime switch to start new user wizard"
+msgstr "La primera vez cambiar al asistente de usuario nuevo"
+
+#: rc.cpp:51
+msgid "Show title bar on each view"
+msgstr "Mostrar la barra de título en cada vista"
+
+#: rc.cpp:52
+msgid "Start string matches for e.g. payees at start of string"
+msgstr "Coincidencias de texto inicial, por ej. pagadores al inicio del texto"
+
+#: rc.cpp:53
+msgid "Order of items on homepage"
+msgstr "Orden de los elementos en la página de inicio"
+
+#: rc.cpp:54
+msgid "Percentage of default font size used for home view HTML page"
+msgstr ""
+"Porcentaje de tamaño de la letra por defecto utilizado en la página HTML de "
+"la vista de inicio"
+
+#: rc.cpp:55
+msgid "Remember (manually adjusted) font size in home view on program end."
+msgstr ""
+"Recordar el tamaño de letra (ajustado manualmente) en la vista de inicio al "
+"terminar el programa."
+
+#: rc.cpp:56
+msgid "Show account limit information on the Homepage"
+msgstr "Mostrar la información de límite de cuenta en la página de inicio"
+
+#: rc.cpp:58
+msgid "Hide closed accounts"
+msgstr "Ocultar cuentas cerradas"
+
+#: rc.cpp:59
+msgid "Hide finished schedules"
+msgstr "Ocultar programaciones cerradas"
+
+#: rc.cpp:61
+msgid "Show all register entries in full detail"
+msgstr "Mostrar todas las entradas del registro con detalle completo"
+
+#: dialogs/settings/rc.cpp:129 rc.cpp:62
+msgid "Show a grid in the register"
+msgstr "Mostrar una grilla en el registro"
+
+#: rc.cpp:63
+msgid "Show fancy group markers"
+msgstr "Mostrar marcadores de grupo con estilo"
+
+#: rc.cpp:64
+msgid "Show fancy markers for previous and current fiscal year"
+msgstr "Mostrar marcadores de grupo para el año fiscal actual y el previo"
+
+#: rc.cpp:65
+msgid "Starting month of the fiscal year"
+msgstr "Mes de inicio del año fiscal"
+
+#: rc.cpp:66
+msgid "Starting day of the fiscal year"
+msgstr "Día de inicio del año fiscal"
+
+#: rc.cpp:67
+msgid "Start date"
+msgstr "Fecha de inicio"
+
+#: dialogs/settings/rc.cpp:9 rc.cpp:68
+msgid "Use system colors"
+msgstr "Usar colores del sistema"
+
+#: rc.cpp:69
+msgid "List color"
+msgstr "Color de lista"
+
+#: rc.cpp:70
+msgid "List background color"
+msgstr "Color de fondo de lista"
+
+#: rc.cpp:71
+msgid "List grid color"
+msgstr "Color de la grilla de lista"
+
+#: rc.cpp:72
+msgid "Background color for imported transactions"
+msgstr "Color de fondo para asientos importados"
+
+#: rc.cpp:73
+msgid "Background color for matched transactions"
+msgstr "Color de fondo para asientos conciliados"
+
+#: rc.cpp:74
+msgid "List color for erronous transactions"
+msgstr "Color de lista para asientos erroneos"
+
+#: rc.cpp:75
+msgid "List color for missing conversion rate"
+msgstr "Color de lista para tasas de conversión faltantes"
+
+#: rc.cpp:76
+msgid "List color for negative values"
+msgstr "Color de lista para valores negativos"
+
+#: rc.cpp:77
+msgid "Background color for group marker"
+msgstr "Color de fondo para marcadores de grupo"
+
+#: rc.cpp:78
+msgid "Background color for required fields"
+msgstr "Color de fondo para campos requeridos"
+
+#: rc.cpp:79
+msgid "Use system font"
+msgstr "Usar tipos de letra del sistema"
+
+#: dialogs/settings/rc.cpp:21 rc.cpp:80
+msgid "Cell font"
+msgstr "Tipo de letra de las celdas"
+
+#: dialogs/settings/rc.cpp:22 rc.cpp:81
+msgid "Header font"
+msgstr "Tipo de letra de la cabecera"
+
+#: rc.cpp:82 rc.cpp:83
+msgid "Sort order of register in normal view"
+msgstr "Orden del registro en la vista normal"
+
+#: rc.cpp:84
+msgid "Sort order of register in search dialog"
+msgstr "Orden del registro en la búsqueda"
+
+#: rc.cpp:85
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation"
+msgstr ""
+"Estado de reconciliación predeterminado para los asientos ingresados al "
+"reconciliar"
+
+#: rc.cpp:86
+msgid "Number of days (plus/minus) to search for matching transactions"
+msgstr "Número de días (más/menos) para buscar asientos coincidentes"
+
+#: rc.cpp:87
+msgid "During import, ask for a new payee's default category"
+msgstr ""
+"Al importar, preguntar por la categoría predeterminada de un nuevo pagador"
+
+#: rc.cpp:88
+msgid "Method to calculate forecast"
+msgstr "Método para calcular el pronóstico"
+
+#: rc.cpp:89
+msgid "Days to forecast"
+msgstr "Días a pronosticar"
+
+#: rc.cpp:90
+msgid "Days of normal account cycle"
+msgstr "Días del ciclo de cuenta normal"
+
+#: rc.cpp:91
+msgid "Number of historic cycles to use in forecast"
+msgstr "Número de ciclos históricos a usar en el pronóstico"
+
+#: rc.cpp:92
+msgid "Day of month to start forecast"
+msgstr "Día del mes a empezar el pronóstico"
+
+#: rc.cpp:93
+msgid "Method to calculate history-based forecast"
+msgstr "Método para calcular el pronóstico histórico"
+
+#: rc.cpp:94
+msgid "Skip opening date when fetching transactions"
+msgstr "Saltear fecha de apertura al obtener los asientos"
+
+#: rc.cpp:95
+msgid "Include future transaction when using Schedule Forecast"
+msgstr "Incluir asientos futuros al utilizar Pronóstico por Planificación"
+
+#: rc.cpp:96
+msgid "Include scheduled transactions when using Schedule Forecast"
+msgstr "Incluir asientos planificados al utilizar Pronóstico por Planificación"
+
+#: rc.cpp:97
+msgid "additional names for cash account"
+msgstr "nombres adicionales para cuenta de tesorería"
+
+#: rc.cpp:98
+msgid "additional names for checking account"
+msgstr "nombres adicionales para cuenta corriente"
+
+#: rc.cpp:99
+msgid "additional names for credit card account"
+msgstr "nombres adicionales para cuenta de tarjeta de crédito"
+
+#: rc.cpp:100
+msgid "additional names for asset account"
+msgstr "nombres adicionales para cuenta de activo"
+
+#: rc.cpp:101
+msgid "additional names for opening balance payee"
+msgstr "nombres adicionales para beneficiario de saldo de apertura"
+
+#: rc.cpp:102
+msgid "additional names for invoice accounts"
+msgstr "nombres adicionales para cuentas de facturación"
+
+#: rc.cpp:103 widgets/rc.cpp:161 widgets/rc.cpp:163
+msgid "..."
+msgstr "..."
+
+#: views/kcategoriesview.cpp:276
+msgid "Profit: "
+msgstr "Ganancia: "
+
+#: views/kcategoriesview.cpp:278
+msgid "Loss: "
+msgstr "Pérdidas: "
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:54
+#: dialogs/transactioneditor.cpp:605 views/kpayeesview.cpp:365
+#: widgets/kmymoneyonlinequoteconfig.cpp:54
+msgid "Accepts the entered data and stores it"
+msgstr "Acepta los datos introducidos y los guarda"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:55 views/kpayeesview.cpp:366
+#: widgets/kmymoneyonlinequoteconfig.cpp:55
+msgid "Use this to accept the modified data."
+msgstr "Use esto para aceptar los datos modificados."
+
+#: views/kpayeesview.cpp:491
+msgid ""
+"A payee with the name '%1' already exists. It is not advisable to have "
+"multiple payees with the same identification name. Are you sure you would "
+"like to rename the payee?"
+msgstr ""
+"Ya existe un pagador llamado %1. No es aconsejable tener múltiples pagadores "
+"con el mismo nombre de identificación. ¿Está seguro que desea renombrar el "
+"pagador?"
+
+#: views/kpayeesview.cpp:518 views/kpayeesview.cpp:869
+msgid "Unable to modify payee"
+msgstr "No fue posible modificar el beneficiario"
+
+#: views/kpayeesview.cpp:564
+msgid "Do you want to save the changes for <b>%1</b>?"
+msgstr "¿Desea guardar los cambios para <b>%1</b>?"
+
+#: views/kbudgetview.cpp:490 views/kpayeesview.cpp:565
+msgid "Save changes"
+msgstr "Guardar cambios"
+
+#: views/kgloballedgerview.cpp:737 views/kpayeesview.cpp:662
+#: views/kpayeesview.cpp:753
+#, c-format
+msgid "Balance: %1"
+msgstr "Saldo: %1"
+
+#: views/kpayeesview.cpp:725 views/kpayeesview.cpp:731
+#, c-format
+msgid "Amortization of %1"
+msgstr "Amortización de %1"
+
+#: views/kpayeesview.cpp:727 views/kpayeesview.cpp:733
+#, c-format
+msgid "Payment to %1"
+msgstr "Pago de %1"
+
+#: views/kpayeesview.cpp:736
+#, c-format
+msgid "Loan payment from %1"
+msgstr "Pagar préstamo con %1"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:123
+#: dialogs/kconfirmmanualenterdlg.cpp:133 views/kpayeesview.cpp:745
+#: widgets/kmymoneycategory.cpp:160 widgets/kmymoneycategory.cpp:166
+#: widgets/transaction.cpp:851 widgets/transaction.cpp:1397
+#: widgets/transaction.cpp:1411
+msgid ""
+"_: Split transaction (category replacement)\n"
+"Split transaction"
+msgstr "Asiento con múltiples partidas"
+
+#: views/kreportsview.cpp:262
+msgid ""
+"There was an error creating your report: \"%1\".\n"
+"Please report this error to the developer's list: kmymoney2-developer@lists."
+"sourceforge.net"
+msgstr ""
+"Ha ocurrido un erro al crear su informe:\"%1\".\n"
+"Por favor informe de este error a la lista de correo de desarrolladores: "
+"kmymoney2-developer@lists.sourceforge.net"
+
+#: views/kreportsview.cpp:264
+msgid "Critical Error"
+msgstr "Error Crítico"
+
+#: views/kreportsview.cpp:268
+msgid "Unable to generate report"
+msgstr "No ha sido posible generar el informe"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:125 views/kreportsview.cpp:286
+#: views/rc.cpp:53 widgets/rc.cpp:146
+msgid "Chart"
+msgstr "Gráfico"
+
+#: views/kreportsview.cpp:287 widgets/rc.cpp:147
+msgid "Show the chart version of this report"
+msgstr "Mostrar la versión gráfica de este informe"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:112 views/khomeview.cpp:900
+#: views/kreportsview.cpp:294 views/kreportsview.cpp:328
+msgid "Report"
+msgstr "Informe"
+
+#: views/kreportsview.cpp:295
+msgid "Show the report version of this chart"
+msgstr "Mostrar la versión informe de este gráfico"
+
+#: views/kmymoneyview.cpp:236 views/kreportsview.cpp:314
+#: views/kreportsview.cpp:326
+msgid "Reports"
+msgstr "Informes"
+
+#: views/khomeview.cpp:902 views/kreportsview.cpp:329 widgets/rc.cpp:56
+msgid "Comment"
+msgstr "Comentario"
+
+#: views/kreportsview.cpp:432
+msgid "Charts"
+msgstr "Gráficos"
+
+#: views/khomeview.cpp:897 views/kreportsview.cpp:470
+msgid "Favorite Reports"
+msgstr "Informes Favoritos"
+
+#: views/kreportsview.cpp:486
+msgid "Old Customized Reports"
+msgstr "Informes Personalizados Viejos"
+
+#: views/kreportsview.cpp:579
+msgid "Include Stylesheet"
+msgstr "Incluir Hoja de Estilos"
+
+#: views/kreportsview.cpp:585
+msgid ""
+"_: CSV (Filefilter)\n"
+"CSV files"
+msgstr "Archivos CSV"
+
+#: views/kreportsview.cpp:586
+msgid ""
+"_: HTML (Filefilter)\n"
+"HTML files"
+msgstr "Archivos HTML"
+
+#: views/kreportsview.cpp:591
+msgid "Export as"
+msgstr "Exportar como"
+
+#: views/kreportsview.cpp:619 views/kreportsview.cpp:660
+#: views/kreportsview.cpp:942 views/kreportsview.cpp:950
+#: views/kreportsview.cpp:958 views/kreportsview.cpp:968
+#: views/kreportsview.cpp:980 views/kreportsview.cpp:998
+#: views/kreportsview.cpp:1006 views/kreportsview.cpp:1014
+#: views/kreportsview.cpp:1022 views/kreportsview.cpp:1034
+#: views/kreportsview.cpp:1046 views/kreportsview.cpp:1056
+#: views/kreportsview.cpp:1070 views/kreportsview.cpp:1079
+#: views/kreportsview.cpp:1087 views/kreportsview.cpp:1095
+#: views/kreportsview.cpp:1103 views/kreportsview.cpp:1111
+#: views/kreportsview.cpp:1120 views/kreportsview.cpp:1132
+#: views/kreportsview.cpp:1145 views/kreportsview.cpp:1155
+#: views/kreportsview.cpp:1165 views/kreportsview.cpp:1175
+#: views/kreportsview.cpp:1185 views/kreportsview.cpp:1195
+#: views/kreportsview.cpp:1208 views/kreportsview.cpp:1222
+#: views/kreportsview.cpp:1239 views/kreportsview.cpp:1257
+#: views/kreportsview.cpp:1273 views/kreportsview.cpp:1295
+#: views/kreportsview.cpp:1304 views/kreportsview.cpp:1313
+#: views/kreportsview.cpp:1322 views/kreportsview.cpp:1336
+#: views/kreportsview.cpp:1347 views/kreportsview.cpp:1362
+#: views/kreportsview.cpp:1372 views/kreportsview.cpp:1383
+#: views/kreportsview.cpp:1393 views/kreportsview.cpp:1404
+#: views/kreportsview.cpp:1423 views/kreportsview.cpp:1432
+#: views/kreportsview.cpp:1444 views/kreportsview.cpp:1463
+#: views/kreportsview.cpp:1472 views/kreportsview.cpp:1481
+#: views/kreportsview.cpp:1490
+msgid "Default Report"
+msgstr "Informe por defecto"
+
+#: views/kreportsview.cpp:621 views/kreportsview.cpp:661
+msgid "Custom Report"
+msgstr "Informe Personalizado"
+
+#: views/kreportsview.cpp:622
+msgid " (Customized)"
+msgstr "(Personalizado)"
+
+#: views/kreportsview.cpp:690
+msgid ""
+"Are you sure you want to delete report <b>%1</b>? There is no way to "
+"recover it!"
+msgstr ""
+"¿Está seguro de que desea borrar el report <b>%1</b>? ¡No hay forma de "
+"recuperarlo!"
+
+#: views/kreportsview.cpp:690 views/kreportsview.cpp:702
+msgid "Delete Report?"
+msgstr "¿Borrar Informe?"
+
+#: views/kreportsview.cpp:702
+msgid "Sorry, <b>%1</b> is a default report. You may not delete it."
+msgstr ""
+"Lamentablemente, <b>%1</b> es un informe por defecto. No es posible borrarlo."
+
+#: views/kreportsview.cpp:882
+msgid "&Open"
+msgstr "&Abrir"
+
+#: views/kreportsview.cpp:884
+msgid "&New report"
+msgstr "&Nuevo Informe"
+
+#: views/kreportsview.cpp:934
+msgid "Income and Expenses"
+msgstr "Ingresos y Gastos"
+
+#: views/kreportsview.cpp:941
+msgid "Income and Expenses This Month"
+msgstr "Ingresos y Gastos este Mes"
+
+#: views/kreportsview.cpp:949
+msgid "Income and Expenses This Year"
+msgstr "Ingresos y Gastos este Año"
+
+#: views/kreportsview.cpp:957
+msgid "Income and Expenses By Year"
+msgstr "Ingresos y Gastos Por Año"
+
+#: views/kreportsview.cpp:967
+msgid "Income and Expenses Graph"
+msgstr "Gráfico de Ingresos y Gastos"
+
+#: views/kreportsview.cpp:979
+msgid "Income and Expenses Pie Chart"
+msgstr "Gráfico de torta de Ingresos y Gastos"
+
+#: views/khomeview.cpp:1361 views/kreportsview.cpp:990
+msgid "Net Worth"
+msgstr "Valor Neto"
+
+#: views/kreportsview.cpp:997
+msgid "Net Worth By Month"
+msgstr "Valor Neto por Mes"
+
+#: views/kreportsview.cpp:1005
+msgid "Net Worth Today"
+msgstr "Valor Neto Hoy"
+
+#: views/kreportsview.cpp:1013
+msgid "Net Worth By Year"
+msgstr "Valor Neto por Año"
+
+#: views/kreportsview.cpp:1021
+msgid "7-day Cash Flow Forecast"
+msgstr "Pronóstico de Flujo de Caja de 7 Días"
+
+#: views/kreportsview.cpp:1033
+msgid "Net Worth Graph"
+msgstr "Gráfico de Valor Neto"
+
+#: views/kreportsview.cpp:1045
+msgid "Account Balances by Institution"
+msgstr "Balances de Cuenta por Organización"
+
+#: views/kreportsview.cpp:1055
+msgid "Account Balances by Type"
+msgstr "Balances de Cuenta por Tipo"
+
+#: views/kreportsview.cpp:1069
+msgid "Transactions by Account"
+msgstr "Asientos por Cuenta"
+
+#: views/kreportsview.cpp:1078
+msgid "Transactions by Category"
+msgstr "Asientos por Categoria"
+
+#: views/kreportsview.cpp:1086
+msgid "Transactions by Payee"
+msgstr "Asientos por Beneficiario"
+
+#: views/kreportsview.cpp:1094
+msgid "Transactions by Month"
+msgstr "Asientos por Mes"
+
+#: views/kreportsview.cpp:1102
+msgid "Transactions by Week"
+msgstr "Asientos por Semana"
+
+#: views/kreportsview.cpp:1110
+msgid "Loan Transactions"
+msgstr "Asientos de Prestamos"
+
+#: views/kreportsview.cpp:1119
+msgid "Transactions by Reconciliation Status"
+msgstr "Asientos por Estado de Reconciliación"
+
+#: views/kreportsview.cpp:1125
+msgid "Cash Flow"
+msgstr "Flujo de Caja"
+
+#: views/kreportsview.cpp:1131
+msgid "Cash Flow Transactions This Month"
+msgstr "Asientos de Flujo de Caja Este Mes"
+
+#: views/kmymoneyview.cpp:226 views/kmymoneyview.cpp:228
+#: views/kreportsview.cpp:1137
+msgid "Investments"
+msgstr "Inversiones"
+
+#: views/kreportsview.cpp:1154
+msgid "Investment Holdings by Account"
+msgstr "Participaciones de la Inversión por Cuenta"
+
+#: views/kreportsview.cpp:1164
+msgid "Investment Holdings by Type"
+msgstr "Participaciones de la Inversión por Tipo"
+
+#: views/kreportsview.cpp:1184
+msgid "Investment Performance by Type"
+msgstr "Rendimiento de la Inversión por Tipo"
+
+#: views/kreportsview.cpp:1194
+msgid "Investment Holdings Pie"
+msgstr "Gráfico de Torta de Participaciones de la Inversión"
+
+#: views/kreportsview.cpp:1207
+msgid "Investment Worth Graph"
+msgstr "Gráfico de Valor de Inversiones"
+
+#: views/kreportsview.cpp:1221
+msgid "Investment Price Graph"
+msgstr "Gráfico de Precio de Inversiones"
+
+#: views/kreportsview.cpp:1238
+msgid "Investment Moving Average Price Graph"
+msgstr "Gráfico de Precio Promedio Móvil de Inversiones"
+
+#: views/kreportsview.cpp:1256
+msgid "Investment Moving Average"
+msgstr "Promedio Móvil de Inversiones"
+
+#: views/kreportsview.cpp:1272
+msgid "Investment Moving Average vs Actual"
+msgstr "Promedio Móvil vs Real de Inversiones"
+
+#: views/kreportsview.cpp:1287
+msgid "Taxes"
+msgstr "Impuestos"
+
+#: views/kreportsview.cpp:1294
+msgid "Tax Transactions by Category"
+msgstr "Asientos de Impuestos por Categoría"
+
+#: views/kreportsview.cpp:1303
+msgid "Tax Transactions by Payee"
+msgstr "Asientos de Impuestos por Beneficiario"
+
+#: views/kreportsview.cpp:1312
+msgid "Tax Transactions by Category Last Fiscal Year"
+msgstr "Asientos de Impuestos del Último Año Fiscal por Categoría"
+
+#: views/kreportsview.cpp:1321
+msgid "Tax Transactions by Payee Last Fiscal Year"
+msgstr "Asientos de Impuestos del Último Año Fiscal por Beneficiario"
+
+#: views/kreportsview.cpp:1328
+msgid "Budgeting"
+msgstr "Presupuestos"
+
+#: views/kreportsview.cpp:1335
+msgid "Budgeted vs. Actual This Year"
+msgstr "Presupuestado vs. Real este Año"
+
+#: views/kreportsview.cpp:1346
+msgid "Budgeted vs. Actual This Year (YTM)"
+msgstr "Presupuestado vs. Real este Año"
+
+#: views/khomeview.cpp:1383 views/kreportsview.cpp:1361
+msgid "Monthly Budgeted vs. Actual"
+msgstr "Presupuestado vs. Real Mensual"
+
+#: views/kreportsview.cpp:1371
+msgid "Yearly Budgeted vs. Actual"
+msgstr "Presupuestado vs. Real Anual"
+
+#: views/kreportsview.cpp:1382
+msgid "Monthly Budget"
+msgstr "Presupuesto Mensual"
+
+#: views/kreportsview.cpp:1392
+msgid "Yearly Budget"
+msgstr "Presupuesto Anual"
+
+#: views/kreportsview.cpp:1403
+msgid "Yearly Budgeted vs Actual Graph"
+msgstr "Gráfico de Presupuestado vs. Real Anual"
+
+#: views/kreportsview.cpp:1422
+msgid "Forecast By Month"
+msgstr "Pronóstico Por Mes"
+
+#: views/kreportsview.cpp:1431
+msgid "Forecast Next Quarter"
+msgstr "Pronóstico del Próximo Trimestre"
+
+#: views/kreportsview.cpp:1443
+msgid "Net Worth Forecast Graph"
+msgstr "Gráfico de Pronóstico de Valor Neto"
+
+#: dialogs/rc.cpp:126 dialogs/rc.cpp:128 dialogs/rc.cpp:466
+#: views/kreportsview.cpp:1455
+msgid "General Information"
+msgstr "Información general"
+
+#: views/kreportsview.cpp:1462
+msgid "Schedule Information"
+msgstr "Información de Planificaciones"
+
+#: views/kreportsview.cpp:1471
+msgid "Schedule Summary Information"
+msgstr "Información Resumida de Planificaciones"
+
+#: views/kreportsview.cpp:1480
+msgid "Account Information"
+msgstr "Información de Cuentas"
+
+#: views/kreportsview.cpp:1489
+msgid "Loan Information"
+msgstr "Información de Préstamos"
+
+#: dialogs/rc.cpp:323 views/kmymoneyview.cpp:148 views/kmymoneyview.cpp:150
+msgid "Institutions"
+msgstr "Organizaciones"
+
+#: dialogs/knewaccountdlg.cpp:98 views/kmymoneyview.cpp:162
+#: views/kmymoneyview.cpp:164 widgets/rc.cpp:4 widgets/rc.cpp:94
+msgid "Accounts"
+msgstr "Cuentas"
+
+#: views/kmymoneyview.cpp:176
+msgid "Bills & Reminders"
+msgstr "Recibos y Recordatorios"
+
+#: views/kmymoneyview.cpp:178
+msgid "Scheduled transactions"
+msgstr "Asientos planificados"
+
+#: dialogs/knewaccountdlg.cpp:98 dialogs/rc.cpp:193 views/kmymoneyview.cpp:188
+#: views/kmymoneyview.cpp:190 widgets/rc.cpp:91
+msgid "Categories"
+msgstr "Categorías"
+
+#: dialogs/kfindtransactiondlg.cpp:212 dialogs/rc.cpp:318
+#: views/kmymoneyview.cpp:199 views/kmymoneyview.cpp:201 widgets/rc.cpp:93
+msgid "Payees"
+msgstr "Beneficiarios"
+
+#: views/kgloballedgerview.cpp:149 views/kmymoneyview.cpp:211
+msgid "Ledgers"
+msgstr "Libros mayores"
+
+#: views/kmymoneyview.cpp:353
+msgid "Creating transactions can only be performed in the ledger view"
+msgstr "La creación de asientos sólo se puede realizar en el libro mayor"
+
+#: views/kmymoneyview.cpp:367
+msgid "Modifying transactions can only be performed in the ledger view"
+msgstr "La modificación de asientos sólo se puede realizar en el libro mayor"
+
+#: views/kmymoneyview.cpp:382
+msgid "Duplicating transactions can only be performed in the ledger view"
+msgstr "La duplicación de asientos sólo se puede realizar en el libro mayor"
+
+#: views/kmymoneyview.cpp:394
+msgid "Edit the current selected transactions"
+msgstr "Editar los asientos seleccionados"
+
+#: views/kmymoneyview.cpp:602
+msgid "<b>%1</b> is not a KMyMoney file."
+msgstr "<b>%1</b> no es un archivo de KMyMoney."
+
+#: views/kmymoneyview.cpp:643
+msgid "GPG is not available for decryption of file <b>%1</b>"
+msgstr "GPG no está disponible para descifrar el archivo <b>%1</b>"
+
+#: views/kmymoneyview.cpp:721
+msgid ""
+"File <b>%1</b> contains the old binary format used by KMyMoney. Please use "
+"an older version of KMyMoney (0.8.x) that still supports this format to "
+"convert it to the new XML based format."
+msgstr ""
+"El archivo <b>%1</b> contiene al antiguo formato binario utilizado por "
+"KMyMoney. Por favor utilice una versión anterior de KMyMoney (0.8.x) que aún "
+"soporte este formato para convertirlo al nuevo formato basado en XML."
+
+#: views/kmymoneyview.cpp:723
+msgid "File <b>%1</b> contains an unknown file format!"
+msgstr "¡El archivo <b>%1</b> está en un formato desconocido!"
+
+#: views/kmymoneyview.cpp:728
+msgid "Cannot read from file <b>%1</b>!"
+msgstr "¡No se pudo leer el archivo <b>%1</b>!"
+
+#: views/kmymoneyview.cpp:732
+msgid "Cannot load file <b>%1</b>. Reason: %2"
+msgstr "No se puede cargar el archivo <b>%1</b>. Razón: %2"
+
+#: views/kmymoneyview.cpp:742 views/kmymoneyview.cpp:748
+msgid "File <b>%1</b> not found!"
+msgstr "¡Archivo <b>%1</b> no encontrado!"
+
+#: views/kmymoneyview.cpp:812
+msgid "Can't open database %1\n"
+msgstr "No se puede abrir la base de datos %1\n"
+
+#: views/kmymoneyview.cpp:844
+msgid "An unrecoverable error occurred while reading the database"
+msgstr ""
+"Se ha producido un error irrecuperable mientras leia de la base de datos"
+
+#: views/kmymoneyview.cpp:846 views/kmymoneyview.cpp:1208
+msgid "Database malfunction"
+msgstr "Malfuncionamiento de la base de datos"
+
+#: views/kmymoneyview.cpp:938
+msgid "Unknown fix level in input file"
+msgstr "Nivel de corrección desconocido en el archivo de entrada"
+
+#: views/kmymoneyview.cpp:984
+msgid ""
+"GPG does not seem to be installed on your system. Please make sure, that GPG "
+"can be found using the standard search path. This time, encryption is "
+"disabled."
+msgstr ""
+"Parece que GPG no está instalado en su sistema. Asegúrese de que GPG está "
+"localizable en una ruta estándar. Por ahora, no en posible cifrar."
+
+#: views/kmymoneyview.cpp:984
+msgid "GPG not found"
+msgstr "GPG no encontrado"
+
+#: views/kmymoneyview.cpp:991
+msgid ""
+"You have selected to encrypt your data also with the KMyMoney recover key, "
+"but the key with id</p><p><center><b>%1</b></center></p>has not been found "
+"in your keyring at this time. Please make sure to import this key into your "
+"keyring. You can find it on the <a href=\"http://kmymoney2.sourceforge.net/"
+"\">KMyMoney web-site</a>. This time your data will not be encrypted with the "
+"KMyMoney recover key."
+msgstr ""
+"Ha escogido cifrar sus datos también con la llave de recuperación de "
+"KMyMoney, pero la llave con id </p><p><center><b>%1</b></center></p> no ha "
+"sido encontrada en su anillo de confianza. Asegúrese de importar esta llave "
+"a su anillo de confianza. Puede encontrarla en <a href=\"http://kmymoney2."
+"sourceforge.net/\">la página web de KMyMoney</a>. Por ahora sus datos no "
+"serán cifrados con la llave de recuperación de KMyMoney."
+
+#: views/kmymoneyview.cpp:991 views/kmymoneyview.cpp:1000
+msgid "GPG-Key not found"
+msgstr "Llave GPG no encontrada"
+
+#: views/kmymoneyview.cpp:1000
+msgid ""
+"You have specified to encrypt your data for the user-id</p><p><center><b>%1</"
+"b>.</center></p>Unfortunately, a valid key for this user-id was not found in "
+"your keyring. Please make sure to import a valid key for this user-id. This "
+"time, encryption is disabled."
+msgstr ""
+"Ha escogido cifrar sus datos para el id de usuario </p><p><center><b>%1</b>."
+"</center></p>. Desafortunadamente, no se ha encontrado una llave para este "
+"usuario en su anillo de confianza. Asegúrese de importar una llave válida "
+"para este usuario. Por ahora, no se permite cifrar."
+
+#: views/kmymoneyview.cpp:1006
+msgid ""
+"You have configured to save your data in encrypted form using GPG. Please be "
+"aware, that this is a brand new feature which is yet untested. Make sure, "
+"you have the necessary understanding that you might loose all your data if "
+"you store it encrypted and cannot decrypt it later on! If unsure, answer "
+"<b>No</b>."
+msgstr ""
+"Ha configurado el sistema para guardar sus datos cifrados mediante GPG. Se "
+"le advierte de que esta es una característica nueva aún poco probada. ¡Sea "
+"consciente de que puede perder todos sus datos en el caso de guardarlos "
+"cifrados y posteriormente no poder descifrarlos! Si no está seguro, conteste "
+"<b>No</b>."
+
+#: views/kmymoneyview.cpp:1008
+msgid "Store GPG encrypted"
+msgstr "Guardar cifrado con GPG"
+
+#: views/kmymoneyview.cpp:1038 views/kmymoneyview.cpp:1052
+msgid "Unable to open file '%1' for writing."
+msgstr "No fue posible abrir el archivo '%1' para escritura."
+
+#: views/kmymoneyview.cpp:1065 views/kmymoneyview.cpp:1074
+msgid "Failure while writing to '%1'"
+msgstr "Fallo durante la escritura a '%1'"
+
+#: views/kmymoneyview.cpp:1086 views/kmymoneyview.cpp:1181
+msgid "Tried to access a file when it's not open"
+msgstr "Intentó acceder a un archivo cuando este no estaba abierto"
+
+#: views/kmymoneyview.cpp:1092
+msgid ""
+"Since this version of KMyMoney only writes data files in its new format, "
+"files written with this version cannot be read by KMyMoney version 0.4. If "
+"you still want to use older versions of KMyMoney with your data files, "
+"please make sure you keep a backup-file of your finance data. If you want to "
+"abort this operation, please press Cancel now"
+msgstr ""
+"Debido a que esta versión de KMyMoney solo escribe archivos de datos en su "
+"nuevo formato, los archivos escritos con esta versión no pueden ser leídos "
+"por KMyMoney versión 0.4. Si aún desea usar versiones anteriores de KMyMoney "
+"con sus archivos de datos, por favor, asegúrese de mantener un archivo de "
+"resguardo de sus datos financieros. Si desea abortar esta operación, pulse "
+"Cancelar ahora"
+
+#: views/kmymoneyview.cpp:1122
+msgid "Malformed URL '%1'"
+msgstr "URL mal formada '%1'"
+
+#: views/kmymoneyview.cpp:1192
+msgid ""
+"Database contains data which must be removed before using SaveAs.\n"
+"Do you wish to continue?"
+msgstr ""
+"La base de datos contiene datos que deben ser eliminados antes de utilizar "
+"Guardar como.\n"
+"¿Desea continuar?"
+
+#: views/kmymoneyview.cpp:1205
+msgid ""
+"An unrecoverable error occurred while writing to the database.\n"
+"It may well be corrupt."
+msgstr ""
+"Se ha producido un error irrecuperable mientras escribía en la base de "
+"datos.\n"
+"Puede estar corrompida."
+
+#: views/kmymoneyview.cpp:1215
+msgid ""
+"Can't open or create database %1\n"
+"Retry SaveAsDatabase and click Help for further info"
+msgstr ""
+"No se puede abrir o crear la base de datos %1\n"
+"Reintente Guarda como Base de Datos y presione Ayuda para mayor información"
+
+#: views/kmymoneyview.cpp:1354
+msgid "Afghanistan Afghani"
+msgstr "Afganí afgano (AFN)"
+
+#: views/kmymoneyview.cpp:1355
+msgid "Albanian Lek"
+msgstr "Lek albano (ALL)"
+
+#: views/kmymoneyview.cpp:1356
+msgid "Netherland Antillian Guilder"
+msgstr "Guilder de Antillas Holandesas"
+
+#: views/kmymoneyview.cpp:1357
+msgid "Algerian Dinar"
+msgstr "Dinar argelino (DZD)"
+
+#: views/kmymoneyview.cpp:1358
+msgid "Andorran Franc"
+msgstr "Franco andorrano"
+
+#: views/kmymoneyview.cpp:1359
+msgid "Andorran Peseta"
+msgstr "Peseta andorrana"
+
+#: views/kmymoneyview.cpp:1360
+msgid "Angolan New Kwanza"
+msgstr "Nuevo Kwanza angoleño (AOA)"
+
+#: views/kmymoneyview.cpp:1361
+msgid "Argentine Peso"
+msgstr "Peso argentino (ARS)"
+
+#: views/kmymoneyview.cpp:1362
+msgid "Aruban Florin"
+msgstr "Florín arubeño (AWG)"
+
+#: views/kmymoneyview.cpp:1363
+msgid "Australian Dollar"
+msgstr "Dólar australiano (AUD)"
+
+#: views/kmymoneyview.cpp:1364
+msgid "Azerbaijani Manat"
+msgstr "Manat azerbajo(AZM)"
+
+#: views/kmymoneyview.cpp:1365
+msgid "Bahamian Dollar"
+msgstr "Dólar bahamés (BSD)"
+
+#: views/kmymoneyview.cpp:1366
+msgid "Bahraini Dinar"
+msgstr "Dinar de Bahréin (BHD)"
+
+#: views/kmymoneyview.cpp:1367
+msgid "Bangladeshi Taka"
+msgstr "Taka bangladeshí (BDT)"
+
+#: views/kmymoneyview.cpp:1368
+msgid "Barbados Dollar"
+msgstr "Dólar de Barbados (BBD)"
+
+#: views/kmymoneyview.cpp:1369
+msgid "Belarussian Ruble"
+msgstr "Rublo bieloruso (BYR)"
+
+#: views/kmymoneyview.cpp:1370
+msgid "Belize Dollar"
+msgstr "Dólar de Belize (BZD)"
+
+#: views/kmymoneyview.cpp:1371
+msgid "Bermudian Dollar"
+msgstr "Dólar de Bermuda (BMD)"
+
+#: views/kmymoneyview.cpp:1372
+msgid "Bhutan Ngultrum"
+msgstr "Ngultrum de Bhután (BTN)"
+
+#: views/kmymoneyview.cpp:1373
+msgid "Bolivian Boliviano"
+msgstr "Boliviano de Bolivia (BOB)"
+
+#: views/kmymoneyview.cpp:1374
+msgid "Bosnian Convertible Mark"
+msgstr "Marco Bosnio-Herzegovino Convertible (BAM)"
+
+#: views/kmymoneyview.cpp:1375
+msgid "Botswana Pula"
+msgstr "Pula botswanés (BWP)"
+
+#: views/kmymoneyview.cpp:1376
+msgid "Brazilian Real"
+msgstr "Real brasileño (BRL)"
+
+#: views/kmymoneyview.cpp:1377
+msgid "British Pound"
+msgstr "Libra estelina (GBP)"
+
+#: views/kmymoneyview.cpp:1378
+msgid "Brunei Dollar"
+msgstr "Dólar de Brunei (BND)"
+
+#: views/kmymoneyview.cpp:1379
+msgid "Bulgarian Lev"
+msgstr "Lev búlgaro (BGN)"
+
+#: views/kmymoneyview.cpp:1380
+msgid "Burundi Franc"
+msgstr "Franco de Burundi (BIF)"
+
+#: views/kmymoneyview.cpp:1381
+msgid "CFA Franc BEAC"
+msgstr "Franco CFA BEAC (XAF)"
+
+#: views/kmymoneyview.cpp:1382
+msgid "CFA Franc BCEAO"
+msgstr "Franco CFA BCEAO (XOF)"
+
+#: views/kmymoneyview.cpp:1383
+msgid "CFP Franc Pacifique"
+msgstr "Franco CFP polinesio (XPF)"
+
+#: views/kmymoneyview.cpp:1384
+msgid "Cambodia Riel"
+msgstr "Riel camboyano (KHR)"
+
+#: views/kmymoneyview.cpp:1385
+msgid "Canadian Dollar"
+msgstr "Dólar canadiense (CAD)"
+
+#: views/kmymoneyview.cpp:1386
+msgid "Cape Verde Escudo"
+msgstr "Escudo caboverdiano (CVE)"
+
+#: views/kmymoneyview.cpp:1387
+msgid "Cayman Islands Dollar"
+msgstr "Dólar de las Islas Caimán (KYD)"
+
+#: views/kmymoneyview.cpp:1388
+msgid "Chilean Peso"
+msgstr "Peso chileno (CLP)"
+
+#: views/kmymoneyview.cpp:1389
+msgid "Chinese Yuan Renminbi"
+msgstr "Yuan Renminbi chino (CNY)"
+
+#: views/kmymoneyview.cpp:1390
+msgid "Colombian Peso"
+msgstr "Peso colombiano (COP)"
+
+#: views/kmymoneyview.cpp:1391
+msgid "Comoros Franc"
+msgstr "Franco de las Comoras (KMF)"
+
+#: views/kmymoneyview.cpp:1392
+msgid "Costa Rican Colon"
+msgstr "Colón costarricense (CRC)"
+
+#: views/kmymoneyview.cpp:1393
+msgid "Croatian Kuna"
+msgstr "Kuna croata (HRK)"
+
+#: views/kmymoneyview.cpp:1394
+msgid "Cuban Peso"
+msgstr "Peso cubano (CUP)"
+
+#: views/kmymoneyview.cpp:1395
+msgid "Czech Koruna"
+msgstr "Corona checa (CZK)"
+
+#: views/kmymoneyview.cpp:1396
+msgid "Danish Krone"
+msgstr "Corona danesa (DKK)"
+
+#: views/kmymoneyview.cpp:1397
+msgid "Djibouti Franc"
+msgstr "Franco yibutiano (DJF)"
+
+#: views/kmymoneyview.cpp:1398
+msgid "Dominican Peso"
+msgstr "Peso dominicano (DOP)"
+
+#: views/kmymoneyview.cpp:1399
+msgid "East Caribbean Dollar"
+msgstr "Dólar del Caribe Oriental (XCD)"
+
+#: views/kmymoneyview.cpp:1400
+msgid "Egyptian Pound"
+msgstr "Libra egipcia (EGP)"
+
+#: views/kmymoneyview.cpp:1401
+msgid "El Salvador Colon"
+msgstr "Colón salvadoreño (SVC)"
+
+#: views/kmymoneyview.cpp:1402
+msgid "Eritrean Nakfa"
+msgstr "Nafka eritreo (ERN)"
+
+#: views/kmymoneyview.cpp:1403
+msgid "Estonian Kroon"
+msgstr "Corona estonia (EEK)"
+
+#: views/kmymoneyview.cpp:1404
+msgid "Ethiopian Birr"
+msgstr "Birr etíope (ETB)"
+
+#: views/kmymoneyview.cpp:1405
+msgid "Euro"
+msgstr "Euro"
+
+#: views/kmymoneyview.cpp:1406
+msgid "Falkland Islands Pound"
+msgstr "Libra malvinense (FKP)"
+
+#: views/kmymoneyview.cpp:1407
+msgid "Fiji Dollar"
+msgstr "Dólar fijiano (FJD)"
+
+#: views/kmymoneyview.cpp:1408
+msgid "Gambian Dalasi"
+msgstr "Dalasi gambiano (GMD)"
+
+#: views/kmymoneyview.cpp:1409
+msgid "Georgian Lari"
+msgstr "Lari georgiano (GEL)"
+
+#: views/kmymoneyview.cpp:1410
+msgid "Ghanaian Cedi"
+msgstr "Cedi ghanés(GHC)"
+
+#: views/kmymoneyview.cpp:1411
+msgid "Gibraltar Pound"
+msgstr "Libra gibraltareña (GIP)"
+
+#: views/kmymoneyview.cpp:1412
+msgid "Guatemalan Quetzal"
+msgstr "Quetzal guatemalteco (GTQ)"
+
+#: views/kmymoneyview.cpp:1413
+msgid "Guinea-Bissau Peso"
+msgstr "Peso guineense"
+
+#: views/kmymoneyview.cpp:1414
+msgid "Guyanan Dollar"
+msgstr "Dólar guyanés (GYD)"
+
+#: views/kmymoneyview.cpp:1415
+msgid "Haitian Gourde"
+msgstr "Gurde haitiano (HTG)"
+
+#: views/kmymoneyview.cpp:1416
+msgid "Honduran Lempira"
+msgstr "Lempira hondureña (HNL) "
+
+#: views/kmymoneyview.cpp:1417
+msgid "Hong Kong Dollar"
+msgstr "Dólar de Hong Kong (HKD)"
+
+#: views/kmymoneyview.cpp:1418
+msgid "Hungarian Forint"
+msgstr "Forint húngaro (HUF)"
+
+#: views/kmymoneyview.cpp:1419
+msgid "Iceland Krona"
+msgstr "Króna islandesa (ISK)"
+
+#: views/kmymoneyview.cpp:1420
+msgid "Indian Rupee"
+msgstr "Rupia india (INR)"
+
+#: views/kmymoneyview.cpp:1421
+msgid "Indonesian Rupiah"
+msgstr "Rupia indonesia (IDR)"
+
+#: views/kmymoneyview.cpp:1422
+msgid "Iranian Rial"
+msgstr "Rial iraní (IRR)"
+
+#: views/kmymoneyview.cpp:1423
+msgid "Iraqi Dinar"
+msgstr "Dinar iraqí (IQD)"
+
+#: views/kmymoneyview.cpp:1424
+msgid "Israeli New Shekel"
+msgstr "Nuevo sheqel israelí (ILS)"
+
+#: views/kmymoneyview.cpp:1425
+msgid "Jamaican Dollar"
+msgstr "Dólar jamaicano (JMD)"
+
+#: views/kmymoneyview.cpp:1426
+msgid "Japanese Yen"
+msgstr "Yen japonés (JPY)"
+
+#: views/kmymoneyview.cpp:1427
+msgid "Jordanian Dinar"
+msgstr "Dinar jordano (JOD)"
+
+#: views/kmymoneyview.cpp:1428
+msgid "Kazakhstan Tenge"
+msgstr "Tenge kazajo (KZT)"
+
+#: views/kmymoneyview.cpp:1429
+msgid "Kenyan Shilling"
+msgstr "Chelín keniata (KES)"
+
+#: views/kmymoneyview.cpp:1430
+msgid "Kuwaiti Dinar"
+msgstr "Dinar kuwaití (KWD)"
+
+#: views/kmymoneyview.cpp:1431
+msgid "Kyrgyzstan Som"
+msgstr "Som kirguizo (KGS)"
+
+#: views/kmymoneyview.cpp:1432
+msgid "Laos Kip"
+msgstr "Kip laosiano (LAK)"
+
+#: views/kmymoneyview.cpp:1433
+msgid "Latvian Lats"
+msgstr "Lat letón (LVL)"
+
+#: views/kmymoneyview.cpp:1434
+msgid "Lebanese Pound"
+msgstr "Libra libanesa (LBP)"
+
+#: views/kmymoneyview.cpp:1435
+msgid "Lesotho Loti"
+msgstr "Loti lesotense (LSL)"
+
+#: views/kmymoneyview.cpp:1436
+msgid "Liberian Dollar"
+msgstr "Dólar liberiano (LRD)"
+
+#: views/kmymoneyview.cpp:1437
+msgid "Libyan Dinar"
+msgstr "Dinar libio (LYD)"
+
+#: views/kmymoneyview.cpp:1438
+msgid "Lithuanian Litas"
+msgstr "Litas lituano (LTL)"
+
+#: views/kmymoneyview.cpp:1439
+msgid "Macau Pataca"
+msgstr "Pataca macaense (MOP)"
+
+#: views/kmymoneyview.cpp:1440
+msgid "Macedonian Denar"
+msgstr "Denar macedonio (MKD)"
+
+#: views/kmymoneyview.cpp:1441
+msgid "Malagasy Franc"
+msgstr "Franco malgache"
+
+#: views/kmymoneyview.cpp:1442
+msgid "Malawi Kwacha"
+msgstr "Kwacha malawiano (MWK)"
+
+#: views/kmymoneyview.cpp:1443
+msgid "Malaysian Ringgit"
+msgstr "Ringgit malayo (MYR)"
+
+#: views/kmymoneyview.cpp:1444
+msgid "Maldive Rufiyaa"
+msgstr "Rufiyaa maldiva (MVR)"
+
+#: views/kmymoneyview.cpp:1445
+msgid "Mali Republic Franc"
+msgstr "Franco CFA occidental malí (XOF)"
+
+#: views/kmymoneyview.cpp:1446
+msgid "Mauritanian Ouguiya"
+msgstr "Ouguiya Mauritano (MRO)"
+
+#: views/kmymoneyview.cpp:1447
+msgid "Mauritius Rupee"
+msgstr "Rupia de Mauricio (MUR)"
+
+#: views/kmymoneyview.cpp:1448
+msgid "Mexican Peso"
+msgstr "Peso mexicano (MXN)"
+
+#: views/kmymoneyview.cpp:1449
+msgid "Moldavian Leu"
+msgstr "Leu moldavo"
+
+#: views/kmymoneyview.cpp:1450
+msgid "Mongolian Tugrik"
+msgstr "Togrog mongol (MNT)"
+
+#: views/kmymoneyview.cpp:1451
+msgid "Moroccan Dirham"
+msgstr "Dirham marroquí (MAD)"
+
+#: views/kmymoneyview.cpp:1452
+msgid "Mozambique Metical"
+msgstr "Metical mozambiqueño (MZM)"
+
+#: views/kmymoneyview.cpp:1453
+msgid "Myanmar Kyat"
+msgstr "Kyar de Myanmar (MMK)"
+
+#: views/kmymoneyview.cpp:1454
+msgid "Namibian Dollar"
+msgstr "Dólar namibiano (NAD)"
+
+#: views/kmymoneyview.cpp:1455
+msgid "Nepalese Rupee"
+msgstr "Rupia nepalesa (NPR)"
+
+#: views/kmymoneyview.cpp:1456
+msgid "New Zealand Dollar"
+msgstr "Dólar neozelandés (NZD)"
+
+#: views/kmymoneyview.cpp:1457
+msgid "Nicaraguan Cordoba Oro"
+msgstr "Córdoba nicaragüense (NIO)"
+
+#: views/kmymoneyview.cpp:1458
+msgid "Nigerian Naira"
+msgstr "Naira nigeriano (NGN)"
+
+#: views/kmymoneyview.cpp:1459
+msgid "North Korean Won"
+msgstr "Won norcoreano (KPW)"
+
+#: views/kmymoneyview.cpp:1460
+msgid "Norwegian Kroner"
+msgstr "Corona noruega (NOK)"
+
+#: views/kmymoneyview.cpp:1461
+msgid "Omani Rial"
+msgstr "Rial omaní (OMR)"
+
+#: views/kmymoneyview.cpp:1462
+msgid "Pakistan Rupee"
+msgstr "Rupia pakistaní (PKR)"
+
+#: views/kmymoneyview.cpp:1463
+msgid "Panamanian Balboa"
+msgstr "Balboa panameña (PAB)"
+
+#: views/kmymoneyview.cpp:1464
+msgid "Papua New Guinea Kina"
+msgstr "Kina papúa (PGK)"
+
+#: views/kmymoneyview.cpp:1465
+msgid "Paraguay Guarani"
+msgstr "Guaraní paraguayo (PYG)"
+
+#: views/kmymoneyview.cpp:1466
+msgid "Peruvian Nuevo Sol"
+msgstr "Nuevo sol peruano (PEN)"
+
+#: views/kmymoneyview.cpp:1467
+msgid "Philippine Peso"
+msgstr "Peso filipino (PHP)"
+
+#: views/kmymoneyview.cpp:1468
+msgid "Polish Zloty"
+msgstr "Zloty polaco (PLN)"
+
+#: views/kmymoneyview.cpp:1469
+msgid "Qatari Rial"
+msgstr "Rial qatarí (QAR)"
+
+#: views/kmymoneyview.cpp:1470
+msgid "Romanian Leu (new)"
+msgstr "Leu rumano (ROL)"
+
+#: views/kmymoneyview.cpp:1471
+msgid "Russian Ruble"
+msgstr "Rublo ruso (RUB)"
+
+#: views/kmymoneyview.cpp:1472
+msgid "Rwanda Franc"
+msgstr "Franco ruandés (RWF)"
+
+#: views/kmymoneyview.cpp:1473
+msgid "Samoan Tala"
+msgstr "Tala samoana (WST)"
+
+#: views/kmymoneyview.cpp:1474
+msgid "Sao Tome and Principe Dobra"
+msgstr "Dobra santotomense (STD)"
+
+#: views/kmymoneyview.cpp:1475
+msgid "Saudi Riyal"
+msgstr "Rial saudí (SAR)"
+
+#: views/kmymoneyview.cpp:1476
+msgid "Seychelles Rupee"
+msgstr "Rupia de Seychelles (SCR)"
+
+#: views/kmymoneyview.cpp:1477
+msgid "Sierra Leone Leone"
+msgstr "León sierraleonés (SLL)"
+
+#: views/kmymoneyview.cpp:1478
+msgid "Singapore Dollar"
+msgstr "Dólar de Singapur (SGD)"
+
+#: views/kmymoneyview.cpp:1481
+msgid "Solomon Islands Dollar"
+msgstr "Dólar de las Islas Salomón (SBD)"
+
+#: views/kmymoneyview.cpp:1482
+msgid "Somali Shilling"
+msgstr "Chelín somalí (SOS)"
+
+#: views/kmymoneyview.cpp:1483
+msgid "South African Rand"
+msgstr "Rand sudafricano (ZAR)"
+
+#: views/kmymoneyview.cpp:1484
+msgid "South Korean Won"
+msgstr "Won surcoreano (KRW)"
+
+#: views/kmymoneyview.cpp:1485
+msgid "Sri Lanka Rupee"
+msgstr "Rupia de Sri Lanka (LKR)"
+
+#: views/kmymoneyview.cpp:1486
+msgid "St. Helena Pound"
+msgstr "Libra de Santa Helena (SHP)"
+
+#: views/kmymoneyview.cpp:1487
+msgid "Sudanese Dinar"
+msgstr "Dinar sudanés (SDD)"
+
+#: views/kmymoneyview.cpp:1488
+msgid "Suriname Guilder"
+msgstr "Guilder de Suriname (SRD)"
+
+#: views/kmymoneyview.cpp:1489
+msgid "Swaziland Lilangeni"
+msgstr "Lilangeni suazi (SZL)"
+
+#: views/kmymoneyview.cpp:1490
+msgid "Swedish Krona"
+msgstr "Corona sueca (SEK)"
+
+#: views/kmymoneyview.cpp:1491
+msgid "Swiss Franc"
+msgstr "Franco suízo (CHF)"
+
+#: views/kmymoneyview.cpp:1492
+msgid "Syrian Pound"
+msgstr "Libra siria (SYP)"
+
+#: views/kmymoneyview.cpp:1493
+msgid "Taiwan Dollar"
+msgstr "Nuevo Dolar Taiwanes (TWD)"
+
+#: views/kmymoneyview.cpp:1494
+msgid "Tajikistan Somani"
+msgstr "Somoni tayik (TJS)"
+
+#: views/kmymoneyview.cpp:1495
+msgid "Tanzanian Shilling"
+msgstr "Chelín tanzano (TZS)"
+
+#: views/kmymoneyview.cpp:1496
+msgid "Thai Baht"
+msgstr "Baht tailandés (THB)"
+
+#: views/kmymoneyview.cpp:1497
+msgid "Tongan Pa'anga"
+msgstr "Pa'anga tonganesa (TOP)"
+
+#: views/kmymoneyview.cpp:1498
+msgid "Trinidad and Tobago Dollar"
+msgstr "Dólar de Trinidad y Tobago (TTD)"
+
+#: views/kmymoneyview.cpp:1499
+msgid "Tunisian Dinar"
+msgstr "Dinar tunecino (TND)"
+
+#: views/kmymoneyview.cpp:1500
+msgid "Turkish Lira (new)"
+msgstr "Nueva lira turca (YTL)"
+
+#: views/kmymoneyview.cpp:1501
+msgid "Turkmenistan Manat"
+msgstr "Manat turkmeno (TMM)"
+
+#: views/kmymoneyview.cpp:1502
+msgid "US Dollar"
+msgstr "Dólar estadounidense (USD)"
+
+#: views/kmymoneyview.cpp:1503
+msgid "Uganda Shilling"
+msgstr "Chelín ugandés (UGX)"
+
+#: views/kmymoneyview.cpp:1504
+msgid "Ukraine Hryvnia"
+msgstr "Hryvnia ucraniana (UAH)"
+
+#: views/kmymoneyview.cpp:1505
+msgid "United Arab Emirates Dirham"
+msgstr "Dirham de los E.A.U. (AED)"
+
+#: views/kmymoneyview.cpp:1506
+msgid "Uruguayan Peso"
+msgstr "Peso uruguayo (UYU)"
+
+#: views/kmymoneyview.cpp:1507
+msgid "Uzbekistani Sum"
+msgstr "Som uzbeko (UZS)"
+
+#: views/kmymoneyview.cpp:1508
+msgid "Vanuatu Vatu"
+msgstr "Vatu vanuatano (VUV)"
+
+#: views/kmymoneyview.cpp:1509
+msgid "Venezuelan Bolivar"
+msgstr "Bolivar venezolano (VEB)"
+
+#: views/kmymoneyview.cpp:1510
+msgid "Vietnamese Dong"
+msgstr "Dong vietnamita (VND)"
+
+#: views/kmymoneyview.cpp:1511
+msgid "Yugoslav Dinar"
+msgstr "Dinar serbio (CSD)"
+
+#: views/kmymoneyview.cpp:1512
+msgid "Zambian Kwacha"
+msgstr "Kwacha zambiano (ZMK)"
+
+#: views/kmymoneyview.cpp:1513
+msgid "Zimbabwe Dollar"
+msgstr "Dólar de Zimbabwe (ZWD)"
+
+#: views/kmymoneyview.cpp:1515
+msgid "Gold"
+msgstr "Oro"
+
+#: views/kmymoneyview.cpp:1516
+msgid "Palladium"
+msgstr "Paladio"
+
+#: views/kmymoneyview.cpp:1517
+msgid "Platinum"
+msgstr "Platino"
+
+#: views/kmymoneyview.cpp:1518
+msgid "Silver"
+msgstr "Plata"
+
+#: views/kmymoneyview.cpp:1551
+msgid "Austrian Schilling"
+msgstr "Chelín austríaco"
+
+#: views/kmymoneyview.cpp:1552
+msgid "German Mark"
+msgstr "Marco alemán"
+
+#: views/kmymoneyview.cpp:1553
+msgid "French Franc"
+msgstr "Franco francés"
+
+#: views/kmymoneyview.cpp:1554
+msgid "Italian Lira"
+msgstr "Lira italiana"
+
+#: views/kmymoneyview.cpp:1555
+msgid "Spanish Peseta"
+msgstr "Peseta española"
+
+#: views/kmymoneyview.cpp:1556
+msgid "Dutch Guilder"
+msgstr "Guilder holandés"
+
+#: views/kmymoneyview.cpp:1557
+msgid "Belgian Franc"
+msgstr "Franco belga"
+
+#: views/kmymoneyview.cpp:1558
+msgid "Luxembourg Franc"
+msgstr "Franco luxemburguense"
+
+#: views/kmymoneyview.cpp:1559
+msgid "Portuguese Escudo"
+msgstr "Escudo portugués"
+
+#: views/kmymoneyview.cpp:1560
+msgid "Irish Pound"
+msgstr "Libra irlandesa"
+
+#: views/kmymoneyview.cpp:1561
+msgid "Finnish Markka"
+msgstr "Marco finés"
+
+#: views/kmymoneyview.cpp:1562
+msgid "Greek Drachma"
+msgstr "Dracma griego"
+
+#: views/kmymoneyview.cpp:1564
+msgid "Romanian Leu"
+msgstr "Leu rumano (ROL)"
+
+#: views/kmymoneyview.cpp:1566
+msgid "Russian Ruble (old)"
+msgstr "Rublo ruso (viejo)"
+
+#: views/kmymoneyview.cpp:1568
+msgid "Slovenian Tolar"
+msgstr "Tolar esloveno (SIT)"
+
+#: views/kmymoneyview.cpp:1571
+msgid "Turkish Lira"
+msgstr "Lira turca (TRL)"
+
+#: views/kmymoneyview.cpp:1574
+msgid "Maltese Lira"
+msgstr "Lira maltesa (MTL)"
+
+#: views/kmymoneyview.cpp:1575
+msgid "Cyprus Pound"
+msgstr "Libra chipriota (CYP)"
+
+#: views/kmymoneyview.cpp:1578
+msgid "Slovak Koruna"
+msgstr "Corona eslovaca (SKK)"
+
+#: views/kmymoneyview.cpp:1888
+msgid ""
+"The account \"%1\" was previously created as loan account but some "
+"information is missing. The new loan wizard will be started to collect all "
+"relevant information. Please use a KMyMoney version >= 0.8.7 and < 0.9 to "
+"correct the problem."
+msgstr ""
+"La cuenta \"%1\" fue creada con anterioridad como de tipo préstamo pero "
+"falta alguna información. El asistente para nuevos préstamos comenzará a "
+"recoger toda la información relevante. Por favor utilice una versión de "
+"KMyMoney mayor a 0.8.7 y menor a 0.9 para corregir el problema."
+
+#: views/kmymoneyview.cpp:1892
+msgid "Account problem"
+msgstr "Problema en la cuenta"
+
+#: views/kmymoneyview.cpp:1941
+msgid "Unable to add schedule: "
+msgstr "No fue posible añadir el asiento programado:"
+
+#: views/kmymoneyview.cpp:1970
+msgid "Fix transactions"
+msgstr "Fijar asientos"
+
+#: views/kaccountsview.cpp:522 views/kinstitutionsview.cpp:300
+msgid "Net Worth: "
+msgstr "Valor neto:"
+
+#: dialogs/rc.cpp:108 dialogs/rc.cpp:163 dialogs/rc.cpp:250 dialogs/rc.cpp:755
+#: dialogs/rc.cpp:830 views/kinvestmentview.cpp:77 widgets/register.cpp:572
+msgid "Quantity"
+msgstr "Importe "
+
+#: views/kscheduledlistitem.cpp:137
+msgid "Finished"
+msgstr "Terminado"
+
+#: views/kbudgetview.cpp:109
+msgid "Creates a new budget"
+msgstr "Crear un nuevo presupuesto"
+
+#: views/kbudgetview.cpp:110
+msgid "Use this to create a new empty budget."
+msgstr "Utilice esto para crear un nuevo presupuesto vacío."
+
+#: views/kbudgetview.cpp:116
+msgid "Rename the current selected budget"
+msgstr "Renombrar el presupuesto seleccionado actualmente"
+
+#: views/kbudgetview.cpp:117
+msgid "Use this to start renaming the selected budget."
+msgstr "Utilice esto para empezar a renombrar el presupuesto seleccionado."
+
+#: views/kbudgetview.cpp:123
+msgid "Delete the current selected budget"
+msgstr "Borrar el presupuesto seleccionado actualmente."
+
+#: views/kbudgetview.cpp:124
+msgid "Use this to delete the selected budget."
+msgstr "Use esto para borrar el presupuesto seleccionado."
+
+#: views/kbudgetview.cpp:130
+msgid "Accepts the entered values and stores the budget"
+msgstr "Acepta los datos introducidos y guarda el presupuesto"
+
+#: views/kbudgetview.cpp:131
+msgid "Use this to store the modified data."
+msgstr "Use esto para guardar los datos modificados."
+
+#: views/kbudgetview.cpp:137
+msgid "Revert budget to last saved state"
+msgstr "Revertir el presupuesto al último estado guardado"
+
+#: views/kbudgetview.cpp:138
+msgid "Use this to discard the modified data."
+msgstr "Use esto para descartar los datos modificados."
+
+#: views/kbudgetview.cpp:489
+msgid "Do you want to save the changes for <b>%1</b>"
+msgstr "Desea guardar los cambios para <b>%1</b>"
+
+#: views/kbudgetview.cpp:610
+msgid ""
+"A budget with the name '%1' already exists. It is not advisable to have "
+"multiple budgets with the same identification name. Are you sure you would "
+"like to rename the budget?"
+msgstr ""
+"Ya existe un presupuesto llamado %1. No es recomendable tener múltiples "
+"presupuestos con el mismo nombre. ¿Esta seguro que desea renombrar el "
+"presupuesto?"
+
+#: views/kbudgetview.cpp:635 views/kbudgetview.cpp:750
+msgid "Unable to modify budget"
+msgstr "Imposible modificar el presupuesto"
+
+#: views/kbudgetview.cpp:736
+msgid "Unable to reset budget"
+msgstr "Imposible reiniciar el presupuesto"
+
+#: views/rc.cpp:1
+msgid "List"
+msgstr "Lista"
+
+#: views/rc.cpp:2 views/rc.cpp:20
+msgid "Collapse all accounts in the list"
+msgstr "Colapsar todas las cuentas en la lista."
+
+#: views/rc.cpp:3 views/rc.cpp:21
+msgid "Expand all accounts in the list"
+msgstr "Expandir todas las cuentas en la lista"
+
+#: views/rc.cpp:4
+msgid "Icons"
+msgstr "Iconos"
+
+#: views/rc.cpp:5 views/rc.cpp:22
+msgid "Note: Unused categories are not shown as selected by settings."
+msgstr ""
+"Nota: No se muestran las categorías no usadas, siguiendo la configuración."
+
+#: views/rc.cpp:6 views/rc.cpp:23 views/rc.cpp:54
+msgid "Total Profits:"
+msgstr "Beneficios Totales:"
+
+#: views/rc.cpp:7
+msgid "Your budgets"
+msgstr "Sus presupuestos"
+
+#: dialogs/rc.cpp:340 dialogs/rc.cpp:841 dialogs/settings/rc.cpp:124
+#: views/rc.cpp:8 widgets/rc.cpp:48 widgets/rc.cpp:150
+msgid "New"
+msgstr "Nueva"
+
+#: views/rc.cpp:9
+msgid "Ren"
+msgstr "Ren"
+
+#: views/rc.cpp:10
+msgid "Del"
+msgstr "Borrar"
+
+#: views/rc.cpp:11
+msgid "Res"
+msgstr "Reiniciar"
+
+#: views/rc.cpp:12
+msgid "Upd"
+msgstr "Actualizar"
+
+#: views/rc.cpp:15
+msgid "Hide unused budget categories"
+msgstr "Ocultar categorías de presupuesto no utilizadas"
+
+#: views/rc.cpp:16
+msgid "Assignments"
+msgstr "Asignaciones"
+
+#: views/rc.cpp:19
+msgid "Include subaccounts"
+msgstr "Incluir subcuentas"
+
+#: dialogs/settings/rc.cpp:23 views/rc.cpp:24
+msgid "Forecast Settings"
+msgstr "Configuración de Pronóstico"
+
+#: views/rc.cpp:25
+msgid "Days to Forecast:"
+msgstr "Número de Días a Pronosticar:"
+
+#: views/rc.cpp:26
+msgid "Days of Accounts Cycle:"
+msgstr "Días del Ciclo de Cuentas:"
+
+#: dialogs/settings/rc.cpp:25 views/rc.cpp:27
+msgid "Day of Month to start Forecast:"
+msgstr "Día del Mes para iniciar el Pronóstico:"
+
+#: views/rc.cpp:28
+msgid "Historic Cycles:"
+msgstr "Ciclos de Historia:"
+
+#: views/rc.cpp:29
+msgid "Chart Detail:"
+msgstr "Detalle del Gráfico:"
+
+#: views/rc.cpp:30 widgets/kmymoneyaccountselector.cpp:64 widgets/rc.cpp:65
+msgid "All"
+msgstr "Todo"
+
+#: views/rc.cpp:31 widgets/rc.cpp:66
+msgid "Top-Level"
+msgstr "Nivel superior"
+
+#: views/rc.cpp:32 widgets/rc.cpp:67
+msgid "Groups"
+msgstr "Grupos"
+
+#: views/rc.cpp:33 widgets/rc.cpp:68
+msgid "Totals"
+msgstr "Totales"
+
+#: views/rc.cpp:34
+msgid "<p>Choose what level of detail to show on the chart.</p>"
+msgstr "<p>Elija qué nivel de detalle mostrar en el gráfico.</p>"
+
+#: views/rc.cpp:35
+msgid "Current Forecast Method:"
+msgstr "Método de Pronóstico:"
+
+#: views/rc.cpp:36
+msgid "method"
+msgstr "método"
+
+#: dialogs/settings/rc.cpp:32 views/rc.cpp:37
+msgid "History Forecast Method"
+msgstr "Método de Pronóstico Histórico"
+
+#: dialogs/settings/rc.cpp:33 views/rc.cpp:38
+msgid "Simple Moving Average"
+msgstr "Promedio Móvil Simple"
+
+#: dialogs/settings/rc.cpp:34 views/rc.cpp:39
+msgid "Weighted Moving Average"
+msgstr "Promedio Móvil Ponderado"
+
+#: dialogs/settings/rc.cpp:35 views/rc.cpp:40
+msgid "Linear Regression"
+msgstr "Regresión Lineal"
+
+#: dialogs/keditloanwizard.cpp:315 dialogs/rc.cpp:628 dialogs/rc.cpp:647
+#: views/rc.cpp:43
+msgid "Summary"
+msgstr "Resumen"
+
+#: views/rc.cpp:45
+msgid "0 days"
+msgstr "0 días"
+
+#: views/rc.cpp:46
+msgid "30 days"
+msgstr "30 dias"
+
+#: views/rc.cpp:47
+msgid "60 days"
+msgstr "60 dias"
+
+#: views/rc.cpp:48
+msgid "90 days"
+msgstr "90 dias"
+
+#: views/rc.cpp:49
+msgid "New Item"
+msgstr "Nuevo elemento"
+
+#: views/rc.cpp:50 widgets/rc.cpp:64
+msgid "Detail"
+msgstr "Detalle"
+
+#: views/rc.cpp:51
+msgid "Advanced"
+msgstr "Avanzado"
+
+#: views/rc.cpp:52
+msgid "Budget Forecast"
+msgstr "Pronóstico de Presupuesto"
+
+#: views/rc.cpp:55
+msgid "Investment Summary"
+msgstr "Resumen de la Inversión"
+
+#: views/rc.cpp:56
+msgid "Select Account:"
+msgstr "Escoger Cuenta:"
+
+#: views/rc.cpp:57
+msgid ""
+"Summary of the equities contained in this account, showing your holdings and "
+"their most recent price."
+msgstr ""
+"Resumen de los capitales contenidos en esta cuenta, mostrando las cantidades "
+"y precios más recientes."
+
+#: views/rc.cpp:60 widgets/register.cpp:564
+msgid "No."
+msgstr "Nº"
+
+#: views/rc.cpp:64
+msgid "Balance: "
+msgstr "Saldo:"
+
+#: views/rc.cpp:65
+msgid "Address"
+msgstr "Dirección"
+
+#: views/rc.cpp:66
+msgid "Payee Information"
+msgstr "Información del Beneficiario"
+
+#: views/rc.cpp:67
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#: dialogs/rc.cpp:393 views/rc.cpp:69
+msgid "Telephone/Fax:"
+msgstr "Teléfono/Fax:"
+
+#: views/rc.cpp:70
+msgid "Notes"
+msgstr "Notas"
+
+#: views/rc.cpp:71
+msgid "Address:"
+msgstr "Dirección:"
+
+#: views/rc.cpp:72
+msgid "Matching"
+msgstr "Conciliar"
+
+#: views/rc.cpp:73
+msgid "Transaction Matching"
+msgstr "Conciliación de Asientos"
+
+#: views/rc.cpp:74
+msgid "No matching"
+msgstr "No conciliar"
+
+#: views/rc.cpp:75
+msgid "Match on Payee name"
+msgstr "Conciliar por el nombre del Pagador"
+
+#: views/rc.cpp:76
+msgid "Match on a name listed below"
+msgstr "Conciliar por los nombres listados debajo"
+
+#: views/rc.cpp:77
+msgid "List of matching names"
+msgstr "Lista de nombres coincidentes"
+
+#: views/rc.cpp:78
+msgid ""
+"This list contains the names that will match this payee if a transaction is "
+"imported from an external source. Keep in mind, that you can specify regular "
+"expressions here."
+msgstr ""
+"Esta lista contiene los nombres que coincidirán con el beneficiario si se "
+"importa un asiento de un origen externo. Tenga en cuenta que puede utilizar "
+"expresiones regulares aquí."
+
+#: views/rc.cpp:79
+msgid "Ignore Case"
+msgstr "Ignorar mayúsculas/minúsculas"
+
+#: views/rc.cpp:80
+msgid "Default Account"
+msgstr "Cuenta Predeterminada"
+
+#: views/rc.cpp:81
+msgid ""
+"Use the default account for\n"
+"new transactions with this payee"
+msgstr ""
+"Utilizar la cuenta predeterminada\n"
+"para nuevos asientos con este pagador"
+
+#: views/rc.cpp:82
+msgid "Default category:"
+msgstr "Categoría predeterminada:"
+
+#: views/rc.cpp:83
+msgid "Suggest a category"
+msgstr "Sugerir una categoría"
+
+#: views/rc.cpp:85
+msgid "New Scheduled transaction..."
+msgstr "Nuevo asiento planificado..."
+
+#: views/rc.cpp:86
+msgid "Filter Accounts"
+msgstr "Filtrar cuentas"
+
+#: views/rc.cpp:87
+msgid "List View"
+msgstr "Vista en Lista"
+
+#: views/rc.cpp:88
+msgid "Calendar View"
+msgstr "Vista en Calendario"
+
+#: views/kinstitutionsview.cpp:43
+msgid "Institution/Account"
+msgstr "Organización/Cuenta"
+
+#: views/kinstitutionsview.cpp:157
+msgid "Accounts with no institution assigned"
+msgstr "Cuentas sin organización asignada"
+
+#: views/kscheduledview.cpp:70
+msgid "Type/Name"
+msgstr "Tipo/Nombre"
+
+#: views/kscheduledview.cpp:75
+msgid "Frequency"
+msgstr "Frecuencia"
+
+#: views/kscheduledview.cpp:157
+msgid "Unable to load accounts: "
+msgstr "No fue posible cargar las cuentas:"
+
+#: views/kscheduledview.cpp:171 views/kscheduledview.cpp:429
+#: views/kscheduledview.cpp:445 widgets/kmymoneyscheduledcalendar.cpp:46
+msgid "Bills"
+msgstr "Recibos"
+
+#: dialogs/rc.cpp:232 dialogs/rc.cpp:706 views/kscheduledview.cpp:172
+#: views/kscheduledview.cpp:431 views/kscheduledview.cpp:447
+#: widgets/kmymoneyscheduledcalendar.cpp:47
+msgid "Deposits"
+msgstr "Depósitos"
+
+#: views/kscheduledview.cpp:173 views/kscheduledview.cpp:435
+#: views/kscheduledview.cpp:451
+msgid "Loans"
+msgstr "Préstamos"
+
+#: views/kscheduledview.cpp:357
+msgid "Error activating context menu"
+msgstr "Error al activar el menú contextual"
+
+#: views/kscheduledview.cpp:385
+msgid "Error executing item"
+msgstr "Error ejecutando objeto"
+
+#: views/kscheduledview.cpp:419
+msgid "Unable to filter account"
+msgstr "No fue posible filtrar la cuenta"
+
+#: views/kgloballedgerview.cpp:508
+msgid "Statement Details"
+msgstr "Detalles del Extracto"
+
+#: views/kgloballedgerview.cpp:512
+msgid "Statement Deposit Details"
+msgstr "Detalles de Depósito del Extracto"
+
+#: views/kgloballedgerview.cpp:513
+msgid "Statement Payment Details"
+msgstr "Detalles de Pago del Extracto"
+
+#: views/kgloballedgerview.cpp:642
+msgid "%1 deposits (%3), %2 payments (%4)"
+msgstr "%1 depósitos (%3), %2 pagos (%4)"
+
+#: views/kgloballedgerview.cpp:649
+msgid "%1 payments (%2)"
+msgstr "%1 pagos (%2)"
+
+#: views/kgloballedgerview.cpp:653
+msgid "%1 deposits (%2)"
+msgstr "%1 depósitos (%2)"
+
+#: views/kgloballedgerview.cpp:721
+#, c-format
+msgid "Statement: %1"
+msgstr "Extracto: %1"
+
+#: views/kgloballedgerview.cpp:722 views/kgloballedgerview.cpp:736
+#, c-format
+msgid "Cleared: %1"
+msgstr "LIbrado: %1"
+
+#: views/kgloballedgerview.cpp:723
+#, c-format
+msgid "Difference: %1"
+msgstr "Diferencia: %1"
+
+#: views/kgloballedgerview.cpp:730
+#, c-format
+msgid "Last reconciled: %1"
+msgstr "Última reconcialiación: %1"
+
+#: views/kgloballedgerview.cpp:732
+msgid "Never reconciled"
+msgstr "Nunca reconciliada"
+
+#: views/kgloballedgerview.cpp:772
+msgid "Investment value: %1%2"
+msgstr "Valor de la inversión: %1%2"
+
+#: views/kgloballedgerview.cpp:1040
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to continue to edit the transactions anyway?"
+msgstr ""
+"Al menos una partida de este asiento fue reconciliada. ¿Desea continuar "
+"editando el asiento de todas maneras?"
+
+#: views/kgloballedgerview.cpp:1051
+msgid ""
+"At least one split of the selected transactions has been frozen. Editing the "
+"transactions is therefore prohibited."
+msgstr ""
+"Al menos una partida de este asiento fue congelada. Por lo tanto, está "
+"prohibido editar este asiento."
+
+#: views/kgloballedgerview.cpp:1053
+msgid "Transaction already frozen"
+msgstr "El asiento ya fue congelado"
+
+#: views/kgloballedgerview.cpp:1058
+msgid ""
+"At least one split of the selected transaction references an account that "
+"has been closed. Editing the transactions is therefore prohibited."
+msgstr ""
+"Al menos una partida de este asiento hace referencia a una cuenta cerrada. "
+"Por lo tanto, está prohibido editar este asiento."
+
+#: views/kgloballedgerview.cpp:1060
+msgid "Account closed"
+msgstr "Cuenta cerrada"
+
+#: views/kgloballedgerview.cpp:1349
+msgid "Cannot create transactions when no account is selected."
+msgstr "No se pueden crear asientos si no hay una cuenta seleccionada."
+
+#: views/kgloballedgerview.cpp:1354
+msgid "Cannot create transactions in the context of a category."
+msgstr "No se pueden crear asientos en el contexto de una categoría."
+
+#: views/kgloballedgerview.cpp:1358
+msgid "Cannot create transactions in a closed account."
+msgstr "No se pueden crear asientos en una cuenta cerrada."
+
+#: views/kgloballedgerview.cpp:1370
+msgid "Cannot process transaction with focus if it is not selected."
+msgstr "No se puede procesar el asiento con foco si no está seleccionado."
+
+#: views/kgloballedgerview.cpp:1400
+msgid "Cannot edit transactions with frozen splits."
+msgstr "No se pueden editar asientos con partidas congeladas."
+
+#: views/kgloballedgerview.cpp:1411
+msgid "Cannot edit transactions in the context of a category."
+msgstr "No se pueden editar asientos en el contexto de una categoría."
+
+#: views/kgloballedgerview.cpp:1430
+msgid ""
+"Cannot edit investment transactions and non-investment transactions together."
+msgstr ""
+"No se pueden editar asientos de inversiones junto con otros que no sean "
+"inversiones."
+
+#: views/kgloballedgerview.cpp:1438
+msgid "Cannot edit multiple split transactions at once."
+msgstr "No se pueden editar múltiples asientos de partidas múltiples a la vez."
+
+#: views/kgloballedgerview.cpp:1448
+msgid "Cannot edit investment transactions in the context of this account."
+msgstr ""
+"No se pueden editar asientos de inversión en el contexto de esta cuenta."
+
+#: views/kforecastview.cpp:164
+msgid "Scheduled"
+msgstr "Programado"
+
+#: views/kforecastview.cpp:169
+msgid "History"
+msgstr "Historia"
+
+#: views/kforecastview.cpp:296
+msgid "The balance of %2 is below the minimum balance %3 today."
+msgstr "El saldo de %1 está hoy por debajo del saldo mínimo de %2."
+
+#: views/kforecastview.cpp:301 views/khomeview.cpp:1043
+msgid "The balance of %1 will drop below the minimum balance %2 in %3 days."
+msgstr "El saldo de %1 caerá por debajo del saldo mínimo de %2 en %3 días."
+
+#: views/kforecastview.cpp:318 views/khomeview.cpp:1059
+msgid "The balance of %1 is below %2 today."
+msgstr "El saldo de %2 está hoy por debajo de %2."
+
+#: views/kforecastview.cpp:323 views/khomeview.cpp:1064
+msgid "The balance of %1 is above %2 today."
+msgstr "El saldo de %1 está hoy por encima de %2."
+
+#: views/kforecastview.cpp:330 views/khomeview.cpp:1070
+msgid "The balance of %1 will drop below %2 in %3 days."
+msgstr "El saldo de %1 caerá por debajo de %2 en %3 días."
+
+#: views/kforecastview.cpp:335 views/khomeview.cpp:1075
+msgid "The balance of %1 will raise above %2 in %3 days."
+msgstr "El saldo de %1 estará por encima de %2 en %3 días."
+
+#: views/kforecastview.cpp:348
+msgid "The account %1 is decreasing %2 per cycle."
+msgstr "La cuenta %1 se reduce %2 por ciclo."
+
+#: views/kforecastview.cpp:404 widgets/kmymoneyaccounttreeforecast.cpp:114
+#, c-format
+msgid "Min Bal %1"
+msgstr "Saldo Mín %1"
+
+#: views/kforecastview.cpp:406 widgets/kmymoneyaccounttreeforecast.cpp:116
+#, c-format
+msgid "Min Date %1"
+msgstr "Fecha Mín %1"
+
+#: views/kforecastview.cpp:409 widgets/kmymoneyaccounttreeforecast.cpp:119
+#, c-format
+msgid "Max Bal %1"
+msgstr "Saldo Máx %1"
+
+#: views/kforecastview.cpp:411 widgets/kmymoneyaccounttreeforecast.cpp:121
+#, c-format
+msgid "Max Date %1"
+msgstr "Fecha Máx %1"
+
+#: views/kforecastview.cpp:413 widgets/kmymoneyaccounttreeforecast.cpp:123
+msgid "Average"
+msgstr "Promedio"
+
+#: views/kforecastview.cpp:649 views/khomeview.cpp:268 views/khomeview.cpp:275
+msgid "Networth Forecast"
+msgstr "Pronóstico de Valor Neto"
+
+#: views/khomeview.cpp:203
+msgid "Your Financial Summary"
+msgstr "Su resumen financiero"
+
+#: views/khomeview.cpp:218
+msgid "Preferred Accounts"
+msgstr "Cuentas preferidas"
+
+#: views/khomeview.cpp:225 views/khomeview.cpp:227
+msgid "Payment Accounts"
+msgstr "Cuentas de pago"
+
+#: views/khomeview.cpp:256
+msgid "Show KMyMoney welcome page"
+msgstr "Mostrar la página de bienvenida de KMyMoney"
+
+#: views/khomeview.cpp:409
+msgid "Overdue payments"
+msgstr "Pagos atrasados"
+
+#: views/khomeview.cpp:424 views/khomeview.cpp:497 views/khomeview.cpp:531
+msgid "Balance after"
+msgstr "Saldo posterior"
+
+#: views/khomeview.cpp:482
+msgid "Today's payments"
+msgstr "Pagos de hoy"
+
+#: views/khomeview.cpp:516
+msgid "Future payments"
+msgstr "Pagos futuros"
+
+#: views/khomeview.cpp:585
+msgid "Less..."
+msgstr "Menos..."
+
+#: views/khomeview.cpp:587
+msgid "More..."
+msgstr "Más..."
+
+#: views/khomeview.cpp:622
+msgid "Enter schedule"
+msgstr "Ingresar planificación"
+
+#: views/khomeview.cpp:624
+msgid "Skip schedule"
+msgstr "Saltear ocurrencia..."
+
+#: views/khomeview.cpp:627
+msgid "Edit schedule"
+msgstr "Editar planificación"
+
+#: views/khomeview.cpp:631
+msgid " (%1 payments)"
+msgstr " (%1 pagos)"
+
+#: views/khomeview.cpp:771
+msgid "To Minimum Balance / Maximum Credit"
+msgstr "A Saldo Mínimo / Máximo Crédito"
+
+#: views/khomeview.cpp:964
+msgid "%1 Day Forecast"
+msgstr "Pronóstico de %1 Días"
+
+#: views/khomeview.cpp:973 widgets/kmymoneyaccounttreeforecast.cpp:67
+msgid "%1 days"
+msgstr "%1 días"
+
+#: views/khomeview.cpp:1039
+msgid "The balance of %1 is below the minimum balance %2 today."
+msgstr "El saldo de %1 está hoy por debajo del saldo mínimo de %2."
+
+#: views/khomeview.cpp:1175
+msgid ""
+"Before KMyMoney can give you detailed information about your financial "
+"status, you need to create at least one account. Until then, KMyMoney shows "
+"the welcome page instead."
+msgstr ""
+"Antes que KMyMoney pueda brindarle información detallada sobre su estado "
+"financiero, debe crear al menos una cuenta. Hasta entonces, KMyMoney muestra "
+"en su lugar la página de bienvenida."
+
+#: views/khomeview.cpp:1258
+msgid "Assets and Liabilities Summary"
+msgstr "Resumen de Activos y Pasivos"
+
+#: views/khomeview.cpp:1262
+msgid "Asset Accounts"
+msgstr "Cuenta de Activo"
+
+#: views/khomeview.cpp:1270
+msgid "Liability Accounts"
+msgstr "Cuentas de Pasivo"
+
+#: views/khomeview.cpp:1348
+msgid "Total Assets"
+msgstr "Total de Activos"
+
+#: views/khomeview.cpp:1354
+msgid "Total Liabilities"
+msgstr "Total de Pasivos"
+
+#: views/khomeview.cpp:1399
+msgid "Current Month Summary"
+msgstr "Resumen de Este mes"
+
+#: views/khomeview.cpp:1403 views/khomeview.cpp:1440
+msgid "Budgeted"
+msgstr "Presupuestado"
+
+#: views/khomeview.cpp:1433
+msgid "Budget Overruns"
+msgstr "Desvíos del Presupuesto"
+
+#: views/khomeview.cpp:1502
+msgid "No Budget Categories have been overrun"
+msgstr "Ninguna categoría del presupuesto ha registrado desvíos"
+
+#: views/khomeview.cpp:1801
+msgid "Cash Flow Summary"
+msgstr "Resumen de Flujo de Caja"
+
+#: views/khomeview.cpp:1808
+msgid "Income and Expenses of Current Month"
+msgstr "Ingresos y Gastos de Este Mes"
+
+#: views/khomeview.cpp:1816
+msgid "Scheduled Income"
+msgstr "Ingresos Planificados"
+
+#: views/khomeview.cpp:1819
+msgid "Expenses"
+msgstr "Gastos"
+
+#: views/khomeview.cpp:1822
+msgid "Scheduled Expenses"
+msgstr "Gastos Planificados"
+
+#: views/khomeview.cpp:1850
+msgid "Liquid Assets and Liabilities"
+msgstr "Activos y Pasivos Líquidos"
+
+#: views/khomeview.cpp:1855
+msgid "Liquid Assets"
+msgstr "Activos Líquidos"
+
+#: views/khomeview.cpp:1858
+msgid "Transfers to Liquid Liabilities"
+msgstr "Transferencias a Pasivos Líquidos"
+
+#: views/khomeview.cpp:1861
+msgid "Liquid Liabilities"
+msgstr "Pasivos Líquidos"
+
+#: views/khomeview.cpp:1864
+msgid "Other Transfers"
+msgstr "Otras Transferencias"
+
+#: views/khomeview.cpp:1908
+msgid "Cash Flow Status"
+msgstr "Estado de Flujo de Caja"
+
+#: views/khomeview.cpp:1914
+msgid "Expected Liquid Assets"
+msgstr "Activos Líquidos Esperados"
+
+#: views/khomeview.cpp:1917
+msgid "Expected Liquid Liabilities"
+msgstr "Pasivos Líquidos Esperados"
+
+#: views/khomeview.cpp:1920
+msgid "Expected Profit/Loss"
+msgstr "Ganancias/Pérdidas Esperadas"
+
+#: plugins/ofximport/ofximporterplugin.cpp:64
+msgid "OFX..."
+msgstr "OFX..."
+
+#: plugins/ofximport/ofximporterplugin.cpp:69
+msgid "OFX import file selection"
+msgstr "Selección de archivo OFX a importar"
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid ""
+"Unable to import %1 using the OFX importer plugin. This file is not the "
+"correct format."
+msgstr ""
+"No ha sido posible importar %1 usando el plugin de importación de OFX. Este "
+"archivo no tiene el formato correcto."
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid "Incorrect format"
+msgstr "Formato incorrecto"
+
+#: plugins/ofximport/ofximporterplugin.cpp:122
+msgid "Unable to parse file"
+msgstr "No fue posible procesar el archivo"
+
+#: plugins/ofximport/ofximporterplugin.cpp:576
+msgid "Online settings"
+msgstr "Configuración online"
+
+#: plugins/ofximport/ofximporterplugin.cpp:635
+#, c-format
+msgid "Error connecting to bank: %1"
+msgstr "Error al conectarse al banco: %1"
+
+#: plugins/ofximport/ofximporterplugin.cpp:646
+msgid ""
+"Unable to import %1 using the OFX importer plugin. The plugin returned the "
+"following error:<p>%2"
+msgstr ""
+"No ha sido posible importar %1 usando el plugin de importación de OFX. El "
+"plugin devolvió el siguiente error: <p>%2"
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Importing process terminated unexpectedly."
+msgstr "Proceso de importación terminado inesperadamente."
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Failed to import all statements."
+msgstr "No ha sido posible importar todos los extractos."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "The HTTP request failed."
+msgstr "La petición HTTP falló."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "Failed"
+msgstr "Falló"
+
+#: plugins/ofximport/ofxpartner.cpp:410
+msgid "Cannot open file %1 for writing"
+msgstr "No se puede abrir el archivo %1 para escritura"
+
+#: plugins/ofximport/ofxpartner.cpp:414
+msgid "OFX setup error"
+msgstr "Error de configuración de OFX"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid "Loading banklist"
+msgstr "Cargando lista de bancos"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid ""
+"Getting list of banks from http://moneycentral.msn.com/\n"
+"This may take some time depending on the available bandwidth."
+msgstr ""
+"Cargando lista de bancos de http://moneycentral.msn.com/\n"
+"Esto puede llevar un tiempo dependiendo del ancho de banda disponible."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:155
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:199
+msgid "Supports online statements<br>"
+msgstr "Soporta resúmenes online<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:157
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:201
+msgid "Supports investments<br>"
+msgstr "Soporta inversiones<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:159
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:203
+msgid "Supports bill payment (but not supported by KMyMoney yet)<br>"
+msgstr "Soporta pago de facturas (no soportado todavía en KMyMoney)<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:163
+msgid "Does not support online banking</p>"
+msgstr "No soporta operaciones bancarias online</p>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:173
+msgid "Please choose a bank."
+msgstr "Por favor elija un banco."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:179
+msgid "Please fill all fields with values."
+msgstr "Por favor complete con valores todos los campos."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:271
+msgid "No suitable accounts were found at this bank."
+msgstr "No se han encontrado cuentas válidas en este banco."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:283
+msgid "Please choose an account"
+msgstr "Por favor, escoja una cuenta"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:386
+msgid "Server message: %1\n"
+msgstr "Mensaje del servidor: %1\n"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+msgid "Your bank returned warnings when signing on"
+msgstr "Su banco respondió con advertencias al conectarse"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+#, c-format
+msgid "WARNING %1"
+msgstr "ADVERTENCIA %1"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+msgid "Error signing onto your bank"
+msgstr "Error al conectarse al banco"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, c-format
+msgid "ERROR %1"
+msgstr "ERROR %1"
+
+#: plugins/ofximport/dialogs/konlinebankingstatus.cpp:59
+msgid "Enabled & configured"
+msgstr "Habilitado y configurado"
+
+#: plugins/ofximport/dialogs/rc.cpp:1
+msgid "OFX Direct Connect"
+msgstr "Conexión Directa OFX"
+
+#: plugins/ofximport/dialogs/rc.cpp:2
+msgid "Contacting bank..."
+msgstr "Conectando con el Banco ..."
+
+#: plugins/ofximport/dialogs/rc.cpp:4
+msgid "Online Banking Account Setup"
+msgstr "Configuración de la cuenta de Banca Online"
+
+#: plugins/ofximport/dialogs/rc.cpp:5
+msgid "Select Financial Institution"
+msgstr "Seleccione la Organización Financiera"
+
+#: plugins/ofximport/dialogs/rc.cpp:6
+msgid "Please select your financial institution from the list below..."
+msgstr "Por favor seleccione su institución financiera de la lista debajo..."
+
+#: plugins/ofximport/dialogs/rc.cpp:7
+msgid "Automatic"
+msgstr "Automático"
+
+#: plugins/ofximport/dialogs/rc.cpp:8
+msgid "Financial Institution"
+msgstr "Organización Financiera"
+
+#: plugins/ofximport/dialogs/rc.cpp:9
+msgid "Manual"
+msgstr "Manual"
+
+#: plugins/ofximport/dialogs/rc.cpp:10
+msgid "Org"
+msgstr "Org"
+
+#: plugins/ofximport/dialogs/rc.cpp:11
+msgid "FID"
+msgstr "FID"
+
+#: dialogs/settings/rc.cpp:120 plugins/ofximport/dialogs/rc.cpp:12
+#: widgets/rc.cpp:46
+msgid "URL"
+msgstr "URL"
+
+#: plugins/ofximport/dialogs/rc.cpp:13
+msgid "Enter Login Details"
+msgstr "Ingrese los Detalles de Ingreso"
+
+#: plugins/ofximport/dialogs/rc.cpp:14
+msgid ""
+"Please enter the username and password you use to log into this bank for "
+"online banking. Please note that many banks require a separate signup, and "
+"assign a separate PIN or password just for online banking from home."
+msgstr ""
+"Por favor ingrese su nombre de usuario y contraseña para ingresar a la banca "
+"online de este banco. Por favor, tenga en cuenta que muchos bancos requieren "
+"y asignan un PIN o contraseña diferentes para la banca online desde el hogar."
+
+#: plugins/ofximport/dialogs/rc.cpp:15
+msgid "Connection Details"
+msgstr "Detalles de la Conexión"
+
+#: plugins/ofximport/dialogs/rc.cpp:16
+msgid "Username"
+msgstr "Nombre de Usuario"
+
+#: plugins/ofximport/dialogs/rc.cpp:17 plugins/ofximport/dialogs/rc.cpp:36
+msgid "Header Version"
+msgstr "Versión de Encabezado"
+
+#: plugins/ofximport/dialogs/rc.cpp:18 plugins/ofximport/dialogs/rc.cpp:37
+msgid "Identify as"
+msgstr "Identificar como"
+
+#: dialogs/rc.cpp:742 plugins/ofximport/dialogs/rc.cpp:19
+msgid "Password"
+msgstr "Contraseña"
+
+#: plugins/ofximport/dialogs/rc.cpp:20
+msgid "Select Account"
+msgstr "Seleccionar Cuenta"
+
+#: plugins/ofximport/dialogs/rc.cpp:21
+msgid ""
+"Please select the account from your financial institution from the list "
+"below which matches this account."
+msgstr ""
+"Por favor seleccione la cuenta de su institución financiera de la lista "
+"debajo que concuerda con esta cuenta."
+
+#: plugins/ofximport/dialogs/rc.cpp:24
+msgid "Bank"
+msgstr "Banco"
+
+#: plugins/ofximport/dialogs/rc.cpp:25
+msgid "Branch"
+msgstr "Sucursal"
+
+#: plugins/ofximport/dialogs/rc.cpp:26
+msgid "WizardPage"
+msgstr "WizardPage"
+
+#: plugins/ofximport/dialogs/rc.cpp:27
+msgid ""
+"Congratulations! You have successfully set up your bank for online banking "
+"via OFX."
+msgstr ""
+"¡Felicitaciones! Usted ha configurado exitosamente su banco para utilizar la "
+"banca online via OFX."
+
+#: plugins/ofximport/dialogs/rc.cpp:28
+msgid "Account Details"
+msgstr "Detalles de Cuenta"
+
+#: plugins/ofximport/dialogs/rc.cpp:29 plugins/ofximport/dialogs/rc.cpp:31
+msgid "&lt;Not configured&gt;"
+msgstr "&lt;No configurada&gt;"
+
+#: plugins/ofximport/dialogs/rc.cpp:30
+msgid "BANK/BROKER:"
+msgstr "BANCO/CORREDOR:"
+
+#: plugins/ofximport/dialogs/rc.cpp:32
+msgid "Unavailable"
+msgstr "No Disponible"
+
+#: plugins/ofximport/dialogs/rc.cpp:33
+msgid "ACCOUNT:"
+msgstr "CUENTA:"
+
+#: plugins/ofximport/dialogs/rc.cpp:34
+msgid "STATUS:"
+msgstr "ESTADO:"
+
+#: plugins/ofximport/dialogs/rc.cpp:35
+msgid "OFX Details"
+msgstr "Detalles de OFX"
+
+#: plugins/ofximport/dialogs/rc.cpp:38
+msgid "Start date of import"
+msgstr "Fecha inicial de importación"
+
+#: plugins/ofximport/dialogs/rc.cpp:39
+msgid "To&day minus"
+msgstr "Hoy menos"
+
+#: plugins/ofximport/dialogs/rc.cpp:40
+msgid "days"
+msgstr "días"
+
+#: plugins/ofximport/dialogs/rc.cpp:41
+msgid "Last &update"
+msgstr "Última act&ualización"
+
+#: plugins/ofximport/dialogs/rc.cpp:42
+msgid "Pi&ck date"
+msgstr "Es&coja una fecha"
+
+#: plugins/ofximport/dialogs/rc.cpp:43
+msgid "Name is derived from"
+msgstr "El nombre se deriva de"
+
+#: plugins/ofximport/dialogs/rc.cpp:44
+msgid "P&AYEEID"
+msgstr "P&AYEEID"
+
+#: plugins/ofximport/dialogs/rc.cpp:45
+msgid "&NAME"
+msgstr "&NAME"
+
+#: plugins/ofximport/dialogs/rc.cpp:46
+msgid "field if both are present in download"
+msgstr "campo si ambos están presentes en la descarga"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:81
+msgid "Quicken Windows 2003"
+msgstr "Quicken Windows 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:82
+msgid "Quicken Windows 2004"
+msgstr "Quicken Windows 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:83
+msgid "Quicken Windows 2005"
+msgstr "Quicken Windows 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:84
+msgid "Quicken Windows 2006"
+msgstr "Quicken Windows 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:85
+msgid "Quicken Windows 2007"
+msgstr "Quicken Windows 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:86
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:111
+msgid "Quicken Windows 2008"
+msgstr "Quicken Windows 2008"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:89
+msgid "MS-Money 2003"
+msgstr "MS-Money 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:90
+msgid "MS-Money 2004"
+msgstr "MS-Money 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:91
+msgid "MS-Money 2005"
+msgstr "MS-Money 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:92
+msgid "MS-Money 2006"
+msgstr "MS-Money 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:93
+msgid "MS-Money 2007"
+msgstr "MS-Money 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:94
+msgid "MS-Money Plus"
+msgstr "MS-Money Plus"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:91
+msgid "Report Configuration"
+msgstr "Configuración del Informe"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:117
+#: dialogs/kreportconfigurationfilterdlg.cpp:135
+msgid "Rows/Columns"
+msgstr "Filas/Columnas"
+
+#: dialogs/investtransactioneditor.cpp:203
+#: dialogs/investtransactioneditor.cpp:537
+#: dialogs/investtransactioneditor.cpp:579 dialogs/rc.cpp:103
+#: dialogs/rc.cpp:158 dialogs/rc.cpp:245 dialogs/rc.cpp:750 dialogs/rc.cpp:794
+#: widgets/kmymoneyaccountselector.cpp:182 widgets/register.cpp:64
+#: widgets/register.cpp:567 widgets/transaction.cpp:1500
+msgid "Security"
+msgstr "Valor bursátil"
+
+#: dialogs/investtransactioneditor.cpp:211
+msgid "Asset account"
+msgstr "Cuenta de activo"
+
+#: dialogs/investtransactioneditor.cpp:1073
+msgid "Price/Share"
+msgstr "Precio por Acción"
+
+#: dialogs/kmergetransactionsdlg.cpp:39
+msgid "Merge Transactions"
+msgstr "Juntar Asientos"
+
+#: dialogs/kmergetransactionsdlg.cpp:40
+msgid "Are you sure you wish to merge these transactions?"
+msgstr "¿Está seguro de que desea juntar estos asientos?"
+
+#: dialogs/kstartdlg.cpp:59
+msgid "Start Dialog"
+msgstr "Diálogo Inicial"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Templates"
+msgstr "Plantillas"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Select templates"
+msgstr "Escoger plantillas"
+
+#: dialogs/kstartdlg.cpp:80 dialogs/kstartdlg.cpp:119
+msgid "New KMyMoney document"
+msgstr "Nuevo documento KMyMoney"
+
+#: dialogs/kstartdlg.cpp:90
+msgid "Open a KMyMoney document"
+msgstr "Abrir un documento KMyMoney"
+
+#: dialogs/kstartdlg.cpp:96
+msgid ""
+"%1|KMyMoney files (*.kmy)\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Archivos de KMyMoney (*.kmy)\n"
+"%2|Todos los archivos (*.*)"
+
+#: dialogs/kstartdlg.cpp:102
+msgid "Recent Files"
+msgstr "Archivos Recientes"
+
+#: dialogs/kstartdlg.cpp:217
+msgid "Blank Document"
+msgstr "Documento vacío"
+
+#: dialogs/knewbudgetdlg.cpp:71
+msgid "Please specify a budget name"
+msgstr "Por favor ingrese un nombre de presupuesto"
+
+#: dialogs/kgncpricesourcedlg.cpp:48
+#, c-format
+msgid "Investment: %1"
+msgstr "Inversión: %1"
+
+#: dialogs/kgncpricesourcedlg.cpp:49
+#, c-format
+msgid "Quote source: %1"
+msgstr "Fuente de la Cotización: %1"
+
+#: dialogs/kmymoneypricedlg.cpp:62 dialogs/ksecuritylisteditor.cpp:69
+msgid "Delete this entry"
+msgstr "Borrar esta entrada"
+
+#: dialogs/ksecuritylisteditor.cpp:70
+msgid "Remove this security item from the file"
+msgstr "Eliminar este valor bursátil del archivo"
+
+#: dialogs/ksecuritylisteditor.cpp:73
+msgid "&Add"
+msgstr "&Añadir"
+
+#: dialogs/kmymoneypricedlg.cpp:68 dialogs/ksecuritylisteditor.cpp:75
+msgid "Add a new entry"
+msgstr "Añadir una nueva entrada"
+
+#: dialogs/ksecuritylisteditor.cpp:76
+msgid "Create a new security entry."
+msgstr "Crear un nuevo valor bursátil."
+
+#: dialogs/keditequityentrydlg.cpp:77 dialogs/kmymoneypricedlg.cpp:74
+#: dialogs/ksecuritylisteditor.cpp:81
+msgid "Modify the selected entry"
+msgstr "Modificar la entrada escogida"
+
+#: dialogs/ksecuritylisteditor.cpp:82
+msgid "Change the security information of the selected entry."
+msgstr "Cambiar la información del valor bursátil escogido."
+
+#: dialogs/kmymoneypricedlg.cpp:80 dialogs/ksecuritylisteditor.cpp:87
+msgid "Close the dialog"
+msgstr "Cerrar el diálogo"
+
+#: dialogs/kmymoneypricedlg.cpp:81 dialogs/ksecuritylisteditor.cpp:88
+msgid "Use this to close the dialog and return to the application."
+msgstr "Use esto para cerrar el diálogo y volver a la aplicación."
+
+#: dialogs/ksecuritylisteditor.cpp:184
+msgid ""
+"Do you really want to remove the currency <b>%1</b> from the file?</"
+"p><i>Note: It is currently not supported to add currencies.</i>"
+msgstr ""
+"¿Desea realmente eliminar la divisa <b>%1</b> del archivo?</p> <i>Nota: "
+"Actualmente no es posible añadir divisas.</i>"
+
+#: dialogs/ksecuritylisteditor.cpp:187
+msgid "Do you really want to remove the %1 <b>%2</b> from the file?"
+msgstr "¿Desea realmente eliminar el %1 <b>%2</b> del archivo?"
+
+#: dialogs/ksecuritylisteditor.cpp:190
+msgid "Delete security"
+msgstr "Borrar valor bursátil"
+
+#: dialogs/kmymoneypricedlg.cpp:63
+msgid "Remove this price item from the file"
+msgstr "Eliminar este precio del archivo"
+
+#: dialogs/kmymoneypricedlg.cpp:66 dialogs/mymoneyqifprofileeditor.cpp:94
+msgid "&New"
+msgstr "&Nuevo"
+
+#: dialogs/kmymoneypricedlg.cpp:69
+msgid "Create a new price entry."
+msgstr "Crear una nueva entrada de precio."
+
+#: dialogs/kmymoneypricedlg.cpp:75
+msgid "Change the details of selected price information."
+msgstr "Cambiar los detalles de la información de precio escogida."
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Do you really want to delete the selected price entry?"
+msgstr "¿Desea realmente borrar el precio seleccionado?"
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Delete price information"
+msgstr "Borrar información de precio"
+
+#: dialogs/kchooseimportexportdlg.cpp:46
+msgid ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Por favor escoja el tipo de importación que desea realizar. Dispone de una "
+"breve\n"
+"explicación de cada tipo en el fondo de la pantalla, que se actualiza "
+"cuando\n"
+"escoge una opción.\n"
+"\n"
+"Cuando escoja el tipo adecuado, por favor pulse el botón Aceptar."
+
+#: dialogs/kchooseimportexportdlg.cpp:50 dialogs/rc.cpp:22
+msgid "Choose import type:"
+msgstr "Escoja tipo de importación:"
+
+#: dialogs/kchooseimportexportdlg.cpp:51 dialogs/rc.cpp:20
+msgid "Choose Import Type Dialog"
+msgstr "Diálogo de selección de tipo de importación"
+
+#: dialogs/kchooseimportexportdlg.cpp:53
+msgid ""
+"Please choose the type of export you wish to perform. A simple explanation\n"
+"of the export type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an export type please press the OK button."
+msgstr ""
+"Por favor escoja el tipo de exportación a realizar. Dispone de una breve "
+"explicación\n"
+"del tipo de exportación en el fondo de la pantalla, que es actualizado "
+"cuando\n"
+"escoge una opción.\n"
+"\n"
+"Cuando escoja el tipo adecuado de exportación, por favor pulse el botón "
+"Aceptar."
+
+#: dialogs/kchooseimportexportdlg.cpp:57
+msgid "Choose export type:"
+msgstr "Escoja tipo de Exportación:"
+
+#: dialogs/kchooseimportexportdlg.cpp:58
+msgid "Choose Export Type Dialog"
+msgstr "Diálogo de selección de tipo de Exportación:"
+
+#: dialogs/kchooseimportexportdlg.cpp:78
+msgid ""
+"QIF files are created by the popular accounting program Quicken.\n"
+"Another dialog will appear, if you choose this type, asking for further\n"
+"information relevant to the Quicken format."
+msgstr ""
+"Los archivos QIF son creados por el popular programa de contabilidad "
+"Quicken.\n"
+"A continuación, si escoge este tipo, aparecerá otro diálogo, donde se le\n"
+"preguntará unos datos relevantes para el formato Quicken."
+
+#: dialogs/kchooseimportexportdlg.cpp:82
+msgid ""
+"The CSV type uses a comma delimeted text file that can be used by\n"
+"most popular spreadsheet programs available for Linux and other operating\n"
+"systems."
+msgstr ""
+"El tipo CSV usa un archivo de texto delimitado por comas que puede ser usado "
+"por las\n"
+"hojas de cálculo más populares disponibles en Linux\n"
+" y otros Sistemas Operativos."
+
+#: dialogs/kequitypriceupdatedlg.cpp:222
+msgid "%1 units in %2"
+msgstr "%1 unidades en %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid ""
+"Failed to retrieve an exchange rate for %1 from %2. It will be skipped this "
+"time."
+msgstr "Falló al buscar la cotización para %1 de %2. Esta vez se salteará."
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid "Price Update Failed"
+msgstr "Falló la actualización de precios"
+
+#: dialogs/kequitypriceupdatedlg.cpp:427
+msgid ""
+"Failed to retrieve a quote for %1 from %2. Press <b>No</b> to remove the "
+"online price source from this security permanently, <b>Yes</b> to continue "
+"updating this security during future price updates or <b>Cancel</b> to stop "
+"the current update operation."
+msgstr ""
+"Se ha fallado al recuperar la cotización para %1 de %2. Presione <b>No</b> "
+"para eliminar el origen de precios online de este valor bursátil "
+"permanentemente. <b>Sí</b> para continuar actualizando este valor bursátil "
+"en futuras actualizaciones de precio, o <b>Cancelar</b> para parar la "
+"operación de actualización actual."
+
+#: dialogs/kequitypriceupdatedlg.cpp:427 dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Price Update Failed"
+msgstr "Falló la actualización de precios"
+
+#: dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Cannot update security <b>%1</b>: %2"
+msgstr "No se puede actualizar acción <b>%1</b>: %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:528
+msgid "Price for %1 updated (id %2)"
+msgstr "Precio de %1 actualizado (id %2)"
+
+#: dialogs/kequitypriceupdatedlg.cpp:534
+msgid "Received an invalid price for %1, unable to update."
+msgstr ""
+"Se ha recibido un precio no válido para %1, no ha sido posible actualizar."
+
+#: dialogs/kequitypriceupdatedlg.cpp:554
+msgid ""
+"Received a price for %1 (id %2), but this symbol is not on the list! "
+"Aborting entire update."
+msgstr ""
+"Se ha recibido un precio para %1 (id %2), pero este símbolo no está en la "
+"lista! Se abortará toda la actualización."
+
+#: dialogs/transactioneditor.cpp:222
+msgid ""
+"The number <b>%1</b> has already been used in account <b>%2</b>. Do you want "
+"to replace it with the next available number?"
+msgstr ""
+"El número <b>%1</b> ya fue usado en la cuenta <b>%2</b>. Desea reemplazarlo "
+"con el siguiente número disponible?"
+
+#: dialogs/transactioneditor.cpp:222
+msgid "Duplicate number"
+msgstr "Número duplicado"
+
+#: dialogs/transactioneditor.cpp:303
+msgid ""
+"This transaction has more than two splits and is based on a different "
+"currency (%1). Using this account to modify the transaction is currently not "
+"very well supported by KMyMoney and may result in false results."
+msgstr ""
+"Este asiento está desglosado en más de dos partes y está basado en una "
+"divisa diferente (%1). Utilizar esta cuenta para modificar el asiento no "
+"está bien soportado por KMyMoney y puede generar resultados erroneos."
+
+#: dialogs/transactioneditor.cpp:305
+msgid ""
+"KMyMoney was not able to find a more appropriate account to edit this "
+"transaction. Nevertheless, you are allowed to modify the transaction. If you "
+"don't want to edit this transaction, please cancel from editing next."
+msgstr ""
+"KMyMoney no pudo encontrar una cuenta apropiada para editar este asiento. "
+"Sin embargo, puede modificar el asiento. Si no desea editar este asiento, "
+"por favor cancele la siguiente edición."
+
+#: dialogs/transactioneditor.cpp:307
+msgid ""
+"Using e.g. <b>%1</b> to edit this transaction is a better choice. "
+"Nevertheless, you are allowed to modify the transaction. If you want to use "
+"the suggested account instead, please cancel from editing next and change "
+"the view to the suggested account."
+msgstr ""
+"Utilizar por ej. <b>%1</b> para editar este asiento es una mejor opción. Sin "
+"embargo, puede modificar el asiento. Si desea utilizar la cuenta sugerida, "
+"por favor cancele la edición y cambie a la vista de la cuenta sugerida."
+
+#: dialogs/transactioneditor.cpp:410
+msgid ""
+"This transaction has more than two splits and is originally based on a "
+"different currency (%1). Using this account to modify the transaction may "
+"result in rounding errors. Do you want to continue?"
+msgstr ""
+"Este asiento está desglosado en más de dos partidas y está basado en una "
+"divisa diferente (%1). Utilizar esta cuenta para modificar el asiento puede "
+"resultar.en errores de redondeo. ¿Desea continuar?"
+
+#: dialogs/transactioneditor.cpp:412
+msgid ""
+"At least one of the selected transactions has more than two splits and is "
+"originally based on a different currency (%1). Using this account to modify "
+"the transactions may result in rounding errors. Do you want to continue?"
+msgstr ""
+"Al menos uno de los asientos seleccionados está desglosado en más de dos "
+"partidas y está basado en una divisa diferente (%1). Utilizar esta cuenta "
+"para modificar los asientos puede resultar en errores de redondeo. ¿Desea "
+"continuar?"
+
+#: dialogs/transactioneditor.cpp:557
+msgid "Storing transactions"
+msgstr "Almacenando asientos"
+
+#: dialogs/transactioneditor.cpp:603 widgets/kmymoneybriefschedule.cpp:65
+msgid "&Enter"
+msgstr "I&ntroducir"
+
+#: dialogs/transactioneditor.cpp:606
+msgid "Use this to enter the transaction into the ledger."
+msgstr "Utilice esto para ingresar el asiento en el registro"
+
+#: dialogs/transactioneditor.cpp:607
+msgid "&Schedule"
+msgstr "&Programador"
+
+#: dialogs/transactioneditor.cpp:609
+msgid "Accepts the entered data and stores it as schedule"
+msgstr "Acepta los datos introducidos y los guarda como asiento programado"
+
+#: dialogs/transactioneditor.cpp:610
+msgid "Use this to schedule the transaction for later entry into the ledger."
+msgstr ""
+"Utilice esto para programar el asiento para un ingreso posterior al registro."
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"The transaction you are about to enter has a post date in the future.<br/"
+"><br/>Do you want to enter it in the ledger or add it to the schedules?"
+msgstr ""
+"El asiento que está a punto de ingresar tiene una fecha futura.<br/ ><br/"
+">¿Desea ingresarla en el registro o agregarla al programador?"
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"_: Dialog caption for 'Enter or schedule' dialog\n"
+"Enter or schedule?"
+msgstr "¿Ingresar o planificar?"
+
+#: dialogs/transactioneditor.cpp:671
+msgid ""
+"The balance of account <b>%1</b> dropped below the warning balance of %2."
+msgstr ""
+"El saldo de la cuenta <b>%1</b> cayó por debajo del saldo de advertencia de %"
+"2."
+
+#: dialogs/transactioneditor.cpp:677
+msgid ""
+"The balance of account <b>%1</b> dropped below the minimum balance of %2."
+msgstr ""
+"El saldo de la cuenta <b>%1</b> cayó por debajo del saldo mínimo de %2."
+
+#: dialogs/transactioneditor.cpp:683
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit warning "
+"limit of %2."
+msgstr ""
+"El saldo de la cuenta <b>%1</b> cayó por debajo del límite máximo de "
+"advertencia de crédito de %2."
+
+#: dialogs/transactioneditor.cpp:689
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit limit of %"
+"2."
+msgstr ""
+"El saldo de la cuenta <b>%1</b> cayó por debajo del límite máximo de crédito "
+"de %2."
+
+#: dialogs/transactioneditor.cpp:740
+msgid "Payer/Receiver"
+msgstr "Pagador/Receptor"
+
+#: dialogs/transactioneditor.cpp:748
+msgid "Category/Account"
+msgstr "Categoría/Cuenta"
+
+#: dialogs/transactioneditor.cpp:980 dialogs/transactioneditor.cpp:1016
+#: dialogs/transactioneditor.cpp:1378 dialogs/transactioneditor.cpp:1399
+#: dialogs/transactioneditor.cpp:1422 dialogs/transactioneditor.cpp:1443
+#: dialogs/transactioneditor.cpp:1505 dialogs/transactioneditor.cpp:1509
+#: widgets/transaction.cpp:902
+msgid "Transfer from"
+msgstr "Cuenta origen"
+
+#: dialogs/transactioneditor.cpp:982 dialogs/transactioneditor.cpp:1018
+#: dialogs/transactioneditor.cpp:1401 dialogs/transactioneditor.cpp:1445
+#: dialogs/transactioneditor.cpp:1506 widgets/transaction.cpp:902
+msgid "Transfer to"
+msgstr "Transferir a"
+
+#: dialogs/transactioneditor.cpp:1259
+msgid "Select autofill transaction"
+msgstr "Seleccionar asiento para autocompletar"
+
+#: dialogs/transactionmatcher.cpp:77
+msgid "First transaction does not match requirement for matching"
+msgstr "El primer asiento no cumple los requerimientos de coincidencia"
+
+#: dialogs/transactionmatcher.cpp:79
+msgid "Second transaction does not match requirement for matching"
+msgstr "El segundo asiento no cumple los requerimientos de coincidencia"
+
+#: dialogs/transactionmatcher.cpp:83 dialogs/transactionmatcher.cpp:133
+msgid "Splits for %1 have conflicting values (%2,%3)"
+msgstr "Las partidas para %1 tienen valores en conflicto (%2, %3)"
+
+#: dialogs/transactionmatcher.cpp:96 dialogs/transactionmatcher.cpp:149
+msgid ""
+"Both of these transactions have been imported into %1. Therefore they "
+"cannot be matched. Matching works with one imported transaction and one non-"
+"imported transaction."
+msgstr ""
+"Ambos asientos han sido importados a %1. Por lo tanto, no pueden ser "
+"conciliados. La conciliación funciona con un asiento importado y otro no "
+"importado."
+
+#: dialogs/transactionmatcher.cpp:101 dialogs/transactionmatcher.cpp:156
+msgid "Unable to match all splits (%1)"
+msgstr "Imposible conciliar todas las partidas (%1)"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:65
+msgid "Account and transfer account are the same. Please change one."
+msgstr "Las cuentas deudora y transferida son la misma. Por favor, cambie una."
+
+#: dialogs/kconfirmmanualenterdlg.cpp:84
+msgid "Payee changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Beneficiario modificado.<br>&nbsp;&nbsp;&nbsp;Anterior:<b>%1</b>, Nuevo:<b>%"
+"2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:92
+#: dialogs/kconfirmmanualenterdlg.cpp:100
+msgid "Account changed. Old: \"%1\", New: \"%2\""
+msgstr "Cuenta modificada. Anterior: \"%1\", Nueva: \"%2\""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:107
+msgid "Account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Cuenta modificada.<br>&nbsp;&nbsp;&nbsp;Anterior:<b>%1</b>, Nueva:<b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:115
+msgid ""
+"Transfer account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</"
+"b><p>"
+msgstr ""
+"Cuenta de transferencia modificada.<br>&nbsp;&nbsp;&nbsp;Anterior:<b>%1</b>, "
+"Nueva:<b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:143
+msgid ""
+"Category changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Categoría modificado.<br>&nbsp;&nbsp;&nbsp;Anterior:<b>%1</b>, Nueva:<b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:151
+#: dialogs/kconfirmmanualenterdlg.cpp:153
+msgid "empty"
+msgstr "vacío"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:157
+msgid "Memo changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Nota modificada.<br>&nbsp;&nbsp;&nbsp;Anterior:<b>%1</b>, Nueva:<b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:166
+msgid "Amount changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Importe modificado.<br>&nbsp;&nbsp;&nbsp;Anterior:<b>%1</b>, Nuevo:<b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:175
+msgid ""
+"Reconciliation flag changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%"
+"2</b><p>"
+msgstr ""
+"Bandera de reconciliación modificada.<br>&nbsp;&nbsp;&nbsp;Anterior:<b>%1</"
+"b>, Nueva:<b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:182
+msgid "Fatal error in determining data: "
+msgstr "Error fatal durante la determinación de los datos:"
+
+#: dialogs/kselectdatabasedlg.cpp:56
+msgid ""
+"There are no Qt SQL drivers installed in your system.\n"
+"Please consult documentation for your distro, or visit the Qt web site (www."
+"trolltech.com) and search for SQL drivers."
+msgstr ""
+"No están instalados los controladores de Qt SQL en su sistema.\n"
+"Por favor consulte la documentación para su distribución, o visite el sitio "
+"web de Qt (www.trolltech.com) y busque los controladores de SQL."
+
+#: dialogs/kselectdatabasedlg.cpp:100
+msgid "Qt SQL driver %1 is no longer installed on your system"
+msgstr "El manejador de Qt SQL %1 ya no está instalado en su sistema"
+
+#: dialogs/kselectdatabasedlg.cpp:107
+msgid "Qt SQL driver %1 is not suported"
+msgstr "El manejador de Qt SQL %1 no está soportado"
+
+#: dialogs/kselectdatabasedlg.cpp:164
+msgid "SQLite files (*.sql);; All files (*.*)"
+msgstr "Archivos de SQLite (*.sql);; Todos los archivos (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:167
+msgid "Select SQLite file"
+msgstr "Seleccionar archivo SQLite"
+
+#: dialogs/kselectdatabasedlg.cpp:188
+msgid "All files (*.*)"
+msgstr "Todos los archivos (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:191
+msgid "Select output file"
+msgstr "Escoja archivo de salida"
+
+#: dialogs/investactivities.cpp:168
+msgid "%1 (Brokerage)"
+msgstr "%1 (Corretaje)"
+
+#: dialogs/investactivities.cpp:200 dialogs/investactivities.cpp:288
+#: dialogs/investactivities.cpp:425 widgets/transaction.cpp:1548
+msgid "Price/share"
+msgstr "Precio por acción"
+
+#: dialogs/investactivities.cpp:586
+msgid "Ratio 1/"
+msgstr "Coeficiente 1/"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid ""
+"<p>Please check that all the details in the following dialog are correct and "
+"press OK.</p><p>Editable data can be changed and can either be applied to "
+"just this occurence or for all subsequent occurences for this schedule. "
+"(You will be asked what you intend after pressing OK in the following dialog)"
+"</p>"
+msgstr ""
+"<b><p>Por favor, compruebe que todos los detalles son correctos y pulse "
+"Aceptar </p><p>Los datos editables pueden ser cambiados y también pueden ser "
+"aplicados a sólo esta o a todas las siguientes apariciones de este evento "
+"planificado (Se le preguntará qué pretende despues de pulsar Aceptar).</p></"
+"b>"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid "Enter scheduled transaction"
+msgstr "Introduzca transacción planificada"
+
+#: dialogs/kcsvprogressdlg.cpp:65 dialogs/kexportdlg.cpp:65
+msgid "&Export"
+msgstr "&Exportar"
+
+#: dialogs/kexportdlg.cpp:67 dialogs/kimportdlg.cpp:68
+msgid "Start operation"
+msgstr "Iniciar operación"
+
+#: dialogs/kexportdlg.cpp:68
+msgid "Use this to start the export operation"
+msgstr "Use esto para iniciar la operación de exportación"
+
+#: dialogs/kexportdlg.cpp:71 dialogs/kimportdlg.cpp:72
+msgid "&Browse..."
+msgstr "&Escoger..."
+
+#: dialogs/kexportdlg.cpp:73 dialogs/kimportdlg.cpp:74
+msgid "Select filename"
+msgstr "Escoja nombre de archivo"
+
+#: dialogs/kexportdlg.cpp:74 dialogs/kimportdlg.cpp:75
+msgid "Use this to select a filename to export to"
+msgstr "Use esto para escoger un nombre de archivo al que exportar"
+
+#: dialogs/kexportdlg.cpp:77 dialogs/kimportdlg.cpp:78
+#: dialogs/settings/ksettingsonlinequotes.cpp:64
+#: widgets/kmymoneyonlinequoteconfig.cpp:64
+msgid "&New..."
+msgstr "&Nuevo..."
+
+#: dialogs/kexportdlg.cpp:79 dialogs/kimportdlg.cpp:80
+#: dialogs/mymoneyqifprofileeditor.cpp:96
+msgid "Create a new profile"
+msgstr "Crear un nuevo perfil"
+
+#: dialogs/kexportdlg.cpp:80 dialogs/kimportdlg.cpp:81
+msgid "Use this to open the profile editor"
+msgstr "Use esto para abrir el editor de perfiles"
+
+#: dialogs/keditloanwizard.cpp:56
+msgid "Edit loan wizard"
+msgstr "Asistente para la Edición de préstamos"
+
+#: dialogs/keditloanwizard.cpp:58
+msgid ""
+"Please enter the date from which on the following changes will be effective. "
+"The date entered must be later than the opening date of this account (%1), "
+"but must not be in the future. The default will be today."
+msgstr ""
+"Introduzca la fecha a partir de la cual los siguientes cambios serán "
+"efectivos. La fecha que escriba debe ser posterior a la de apertura de la "
+"cuenta (%1), pero no debe ser futura. Por defecto, será hoy."
+
+#: dialogs/keditloanwizard.cpp:76
+msgid ""
+"Note: you will not be able to modify this account today, because the opening "
+"date \"%1\" is in the future. Please revisit this dialog when the time has "
+"come."
+msgstr ""
+"Nota: no podrá modificar esta cuenta hoy, debido a que la fecha de apertura "
+"\"%1\" está en el futuro. Por favor vuelva a este diálogo cuando llegue el "
+"momento."
+
+#: dialogs/keditloanwizard.cpp:244
+msgid ""
+"Your previous selection was \"%1\". If you select another option, KMyMoney "
+"will dismiss the changes you have just entered. Do you wish to proceed?"
+msgstr ""
+"Su elección anterior fue \"%1\". Si escoge otra, KMyMoney anulará los "
+"cambios que acaba de hacer. ¿Desea continuar?"
+
+#: dialogs/kcategoryreassigndlg.cpp:81
+msgid ""
+"At least one transaction/schedule still references the category <b>%1</b>. "
+"However, at least one category with the same currency must exist so that the "
+"transactions/schedules can be reassigned."
+msgstr ""
+"Al menos un asiento/plan aún utiliza la categoría <b>%1</b>. Sin embargo, "
+"debe existir al menos una categoría con la misma moneda para que los "
+"asientos/planes puedan ser reasignados."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid ""
+"This dialog does not allow to create new categories. Please pick a category "
+"from the list."
+msgstr ""
+"Este cuadro de diálogo no permite crear nuevas categorías. Por favor "
+"seleccione una categoría de la lista."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid "Category creation"
+msgstr "Creación de categoría"
+
+#: dialogs/kbackupdlg.cpp:61
+msgid "C&hoose..."
+msgstr "Es&coger..."
+
+#: dialogs/kbackupdlg.cpp:63
+msgid "Select mount point"
+msgstr "Escoja punto de montaje"
+
+#: dialogs/kbackupdlg.cpp:64
+msgid "Use this to browse to the mount point."
+msgstr "Use esto para buscar el punto de montaje"
+
+#: dialogs/keditscheduledlg.cpp:293
+msgid "Next due date"
+msgstr "Próxima fecha de vencimiento"
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid ""
+"You have turned on the GPG encryption support. This means, that new files "
+"will be stored encrypted. Existing files will not be encrypted "
+"automatically. To achieve encryption of existing files, please use the "
+"<b>File/Save as...</b> feature and store the file under a different name. "
+"Once confident with the result, feel free to delete the old file and rename "
+"the encrypted one to the old name."
+msgstr ""
+"Ha activado el soporte de codificación con GPG. Esto significa que los "
+"archivos nuevos se guardaran codificados. Los archivos existentes no serán "
+"codificados automáticamente. Para codificar los archivos existentes, por "
+"favor utilice la opción <b>Archivo->Guardar como...</b> y guarde los "
+"archivos bajo un nombre diferente. Una vez que haya verificado el resultado, "
+"puede borrar el archivo viejo y renombrar el archivo codificado al viejo "
+"nombre."
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid "GPG encryption activated"
+msgstr "Codificación con GPG activada"
+
+#: dialogs/settings/ksettingshome.cpp:51
+msgid "&Up"
+msgstr "&Subir"
+
+#: dialogs/settings/ksettingshome.cpp:53
+msgid "Move selected item up"
+msgstr "Mover el objeto escogido para arriba"
+
+#: dialogs/settings/ksettingshome.cpp:54
+msgid "Use this to move the selected item up by one position in the list."
+msgstr ""
+"Emplee esto para mover el objeto seleccionado una posición para arriba en la "
+"lista."
+
+#: dialogs/settings/ksettingshome.cpp:55
+msgid "&Down"
+msgstr "&Bajar"
+
+#: dialogs/settings/ksettingshome.cpp:57
+msgid "Move selected item down"
+msgstr "Mover el objeto seleccionado para abajo"
+
+#: dialogs/settings/ksettingshome.cpp:58
+msgid "Use this to move the selected item down by one position in the list."
+msgstr ""
+"Use esto para mover el objeto seleccionado una posición para abajo en la "
+"lista."
+
+#: dialogs/settings/rc.cpp:1
+msgid "Color settings"
+msgstr "Configuración de colores"
+
+#: dialogs/settings/rc.cpp:2
+msgid "Foreground"
+msgstr "Frente"
+
+#: dialogs/settings/rc.cpp:3
+msgid "Text colors"
+msgstr "Colores de texto"
+
+#: dialogs/settings/rc.cpp:4
+msgid "Grid color"
+msgstr "Color de la grilla"
+
+#: dialogs/settings/rc.cpp:5
+msgid "Erronous transaction"
+msgstr "Asiento erróneo"
+
+#: dialogs/settings/rc.cpp:6
+msgid "Value with missing conversion rate"
+msgstr "Valor sin tasa de conversión"
+
+#: dialogs/settings/rc.cpp:7
+msgid "Negative value"
+msgstr "Valor negativo"
+
+#: dialogs/settings/rc.cpp:8
+msgid "Background"
+msgstr "Fondo"
+
+#: dialogs/settings/rc.cpp:10
+msgid "List background colors"
+msgstr "Colores de fondo de lista"
+
+#: dialogs/settings/rc.cpp:11
+msgid "Normal"
+msgstr "Normal"
+
+#: dialogs/settings/rc.cpp:12
+msgid "Alternate"
+msgstr "Alternativo"
+
+#: dialogs/settings/rc.cpp:13
+msgid "Special background colors"
+msgstr "Colores especiales de fondo"
+
+#: dialogs/settings/rc.cpp:14
+msgid "Ledger group separator"
+msgstr "Separador de grupos en el Libro Mayor"
+
+#: dialogs/settings/rc.cpp:15
+msgid "Required field"
+msgstr "Campo requerido"
+
+#: dialogs/settings/rc.cpp:16
+msgid "Imported transaction"
+msgstr "Asiento importado"
+
+#: dialogs/settings/rc.cpp:17
+msgid "Matched transaction"
+msgstr "Asiento comparado"
+
+#: dialogs/settings/rc.cpp:18
+msgid "Font settings"
+msgstr "Configuración de tipografías:"
+
+#: dialogs/settings/rc.cpp:19
+msgid "Use system fonts"
+msgstr "Usar tipos de letra del sistema"
+
+#: dialogs/settings/rc.cpp:20
+msgid "Individual font settings"
+msgstr "Configuración individual de tipos de letra"
+
+#: dialogs/settings/rc.cpp:24
+msgid "Number of Days of Account Cycle:"
+msgstr "Número de Días del Ciclo de las Cuentas:"
+
+#: dialogs/settings/rc.cpp:26
+msgid "Number of Days to Forecast:"
+msgstr "Número de Días a Pronosticar:"
+
+#: dialogs/settings/rc.cpp:27
+msgid "Forecast Method"
+msgstr "Método de Pronóstico"
+
+#: dialogs/settings/rc.cpp:28
+msgid "Scheduled and Future Transactions"
+msgstr "Asientos Futuros y Planificados"
+
+#: dialogs/settings/rc.cpp:29
+msgid "History-based"
+msgstr "Histórico"
+
+#: dialogs/settings/rc.cpp:30
+msgid "History-based settings"
+msgstr "Configuración de Pronóstico Histórico"
+
+#: dialogs/settings/rc.cpp:31
+msgid "Number of Cycles to use in Forecast:"
+msgstr "Número de Ciclos a utilizar en el Pronóstico:"
+
+#: dialogs/settings/rc.cpp:36
+msgid "General Settings"
+msgstr "Configuraciones Generales"
+
+#: dialogs/settings/rc.cpp:37
+msgid "Global"
+msgstr "Global"
+
+#: dialogs/settings/rc.cpp:38
+msgid "Startup page options"
+msgstr "Opciones de la página inicial"
+
+#: dialogs/settings/rc.cpp:39
+msgid "Start with homepage"
+msgstr "Iniciar con la página de inicio"
+
+#: dialogs/settings/rc.cpp:40
+msgid "Start with last selected view"
+msgstr "Iniciar con la última página escogida"
+
+#: dialogs/settings/rc.cpp:41
+msgid "Precision settings"
+msgstr "Configuración de la precisión"
+
+#: dialogs/settings/rc.cpp:42
+msgid "Price precision"
+msgstr "Precisión del Precio"
+
+#: dialogs/settings/rc.cpp:43
+msgid "digits"
+msgstr "dígitos"
+
+#: dialogs/settings/rc.cpp:44
+msgid "Autosave options"
+msgstr "Opciones de Autoguardado"
+
+#: dialogs/settings/rc.cpp:45
+msgid "Autosave periodically"
+msgstr "Autoguardar periodicamente"
+
+#: dialogs/settings/rc.cpp:46
+msgid "minutes"
+msgstr "minutos"
+
+#: dialogs/settings/rc.cpp:47
+msgid "Fiscal Year"
+msgstr "Año Fiscal"
+
+#: dialogs/settings/rc.cpp:48
+msgid "Your fiscal year starts on"
+msgstr "Su año fiscal comienza el"
+
+#: dialogs/settings/rc.cpp:49
+msgid "January"
+msgstr "Enero"
+
+#: dialogs/settings/rc.cpp:50
+msgid "February"
+msgstr "Febrero"
+
+#: dialogs/settings/rc.cpp:51
+msgid "March"
+msgstr "Marzo"
+
+#: dialogs/settings/rc.cpp:52
+msgid "April"
+msgstr "Abril"
+
+#: dialogs/settings/rc.cpp:53
+msgid "May"
+msgstr "Mayo"
+
+#: dialogs/settings/rc.cpp:54
+msgid "June"
+msgstr "Junio"
+
+#: dialogs/settings/rc.cpp:55
+msgid "July"
+msgstr "Julio"
+
+#: dialogs/settings/rc.cpp:56
+msgid "August"
+msgstr "Agosto"
+
+#: dialogs/settings/rc.cpp:57
+msgid "September"
+msgstr "Septiembre"
+
+#: dialogs/settings/rc.cpp:58
+msgid "October"
+msgstr "Octubre"
+
+#: dialogs/settings/rc.cpp:59
+msgid "November"
+msgstr "Noviembre"
+
+#: dialogs/settings/rc.cpp:60
+msgid "December"
+msgstr "Diciembre"
+
+#: dialogs/settings/rc.cpp:61
+msgid "Views"
+msgstr "Vistas"
+
+#: dialogs/settings/rc.cpp:62
+msgid "Synchronize account selection of ledger and investment view"
+msgstr ""
+"Sincronizar la selección de cuentas del libro mayor y la vista de inversiones"
+
+#: dialogs/settings/rc.cpp:63
+msgid ""
+"Check the views you want to enable, uncheck those you want to hide, because "
+"you don't need the functionality."
+msgstr ""
+"Marque las vistas que desea habilitar, desmarque las que desea ocultar, "
+"porque no necesita esa funcionalidad."
+
+#: dialogs/settings/rc.cpp:64
+msgid "Icon size of navigation bar"
+msgstr "Tamaño del ícono de la barra de navegación"
+
+#: dialogs/settings/rc.cpp:65
+msgid "Micro (16px)"
+msgstr "Micro (16px)"
+
+#: dialogs/settings/rc.cpp:66
+msgid "Small (32px)"
+msgstr "Pequeño (32px)"
+
+#: dialogs/settings/rc.cpp:67
+msgid "Normal (48px)"
+msgstr "Normal (48px)"
+
+#: dialogs/settings/rc.cpp:68
+msgid "Large (64px)"
+msgstr "Grande (64px)"
+
+#: dialogs/settings/rc.cpp:69
+msgid "Show title bar on each page"
+msgstr "Mostrar la barra de título en cada página"
+
+#: dialogs/rc.cpp:835 dialogs/settings/rc.cpp:70
+msgid "Filter"
+msgstr "Filtro"
+
+#: dialogs/settings/rc.cpp:71
+msgid "Accounts / Categories"
+msgstr "Cuentas / Categorías"
+
+#: dialogs/settings/rc.cpp:72
+msgid "Don't show unused categories"
+msgstr "No mostrar categorias no empleadas"
+
+#: dialogs/settings/rc.cpp:73
+msgid ""
+"This option hides all categories in the categories view that are not used in "
+"at least a single transaction. They are still shown in the category "
+"selection lists."
+msgstr ""
+"Esta opción oculta todas las categorías en la vista de categorías que no "
+"sean utilizadas en al menos un asiento. Todavía se muestran en la lista de "
+"selección de categorías."
+
+#: dialogs/settings/rc.cpp:74
+msgid "Don't show closed accounts"
+msgstr "Ocultar cuentas cerradas"
+
+#: dialogs/settings/rc.cpp:75
+msgid ""
+"This option hides all accounts that have been closed by the user in views "
+"and selection lists.\n"
+"\n"
+"You can use <b>View/Show all accounts</b> to temporarily show hidden "
+"accounts in the views."
+msgstr ""
+"Esta opción oculta todas las cuentas que hayan sido cerradas por el usuario "
+"en las vistas y en las listas de selección.\n"
+"Puede utilizar <b>Ver/Mostrar todas las cuentas</b> para mostrar "
+"temporariamente todas las cuentas en las vistas."
+
+#: dialogs/settings/rc.cpp:76
+msgid "Show equity accounts"
+msgstr "Mostrar cuentas de patrimonio"
+
+#: dialogs/rc.cpp:332 dialogs/settings/rc.cpp:77 widgets/rc.cpp:160
+msgid "Schedules"
+msgstr "Programaciones"
+
+#: dialogs/settings/rc.cpp:78
+msgid "Don't show finished schedules"
+msgstr "Ocultar planificaciones finalizadas"
+
+#: dialogs/settings/rc.cpp:79
+msgid "This option hides all finished schedules in the schedules view."
+msgstr ""
+"Esta opción oculta todos los planes finalizados en la vista de programas."
+
+#: dialogs/settings/rc.cpp:81
+msgid "Don't show transactions prior to"
+msgstr "No mostrar asientos anteriores a"
+
+#: dialogs/settings/rc.cpp:82
+msgid "Don't show reconciled transactions"
+msgstr "No mostrar asientos reconciliados"
+
+#: dialogs/settings/rc.cpp:83
+msgid "This option hides all reconciled transactions in the ledger view."
+msgstr ""
+"Esta opción oculta los asientos reconciliados en la vista de libro mayor."
+
+#: dialogs/settings/rc.cpp:84 widgets/rc.cpp:22
+msgid "GPG encryption settings"
+msgstr "Configuración del cifrado GPG"
+
+#: dialogs/settings/rc.cpp:85
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Access to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>additional recovery encryption</i> is only accessible, if the "
+"necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id "
+"0x8AFDDC8E is found in your keyring."
+msgstr ""
+"Esta página le permite ajustar los parámetros para guardar sus datos de "
+"<b>KMyMoney</b> codificados con <b>GPG</b>.<p>\n"
+"No se permite acceder a la configuración si no se encuentra <b>GPG</b> en su "
+"sistema. En este caso, asegúrese de que <b>GPG</b> trabaja correctamente "
+"para el usuario actual.<p>\n"
+"La <i>recuperación de codificación adicional</i> solamente estará accesible "
+"de encontrarse la llave para <b>kmymoney-recover@users.sourceforge.net</b> "
+"con id 0x8AFDDC8E en su llavero."
+
+#: dialogs/settings/rc.cpp:86 widgets/rc.cpp:24
+msgid "Use GPG encryption"
+msgstr "Guardar cifrado con GPG"
+
+#: dialogs/settings/rc.cpp:87
+msgid "GPG encryption"
+msgstr "Codificación con GPG"
+
+#: dialogs/settings/rc.cpp:88
+msgid "Your key"
+msgstr "Su clave"
+
+#: dialogs/settings/rc.cpp:89
+msgid ""
+"This combo box lists all the secret keys you have in your keyring. Select "
+"the one you want to use for encryption when saving to a file."
+msgstr ""
+"Esta lista muestra todas las claves secretas en su llavero. Escoja la que "
+"desea utilizar para codificar cuando guarde un archivo."
+
+#: dialogs/settings/rc.cpp:90
+msgid "Additonal keys"
+msgstr "Claves adicionales"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:50 dialogs/settings/rc.cpp:91
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading 0x."
+msgstr ""
+"Introduza el id de la llave que desea usar para codificar los datos. Esto "
+"puede ser un e-mail o el identificador hexadecimal del id de clave. En este "
+"caso no olvide el 0x inicial."
+
+#: dialogs/settings/rc.cpp:92 widgets/rc.cpp:28
+msgid ""
+"This symbol denotes, if the key for the given user id has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"Este símbolo indica si fue encontrada la llave para el identificador de "
+"usuario. Está en verde si fue encontrada, oscura si no lo ha sido."
+
+#: dialogs/kgpgkeyselectiondlg.cpp:61 dialogs/settings/rc.cpp:93
+msgid "Keys for all of the above user ids found"
+msgstr "Se han encontrado claves para todos los usuarios de arriba"
+
+#: dialogs/settings/rc.cpp:94 widgets/rc.cpp:31
+msgid ""
+"This symbol denotes, if the KMyMoney recovery key has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"Este símbolo indica si la llave de recuperación de KMyMoney ha sido "
+"encontrada en su anillo de confianza. En este caso estará verde, si no se "
+"encuentra, será oscura."
+
+#: dialogs/settings/rc.cpp:95
+msgid "Recover Key available in keyring"
+msgstr "Clave de Recuperación disponible en el llavero"
+
+#: dialogs/settings/rc.cpp:96
+msgid "Also encrypt with KMyMoney's recover key"
+msgstr "Codificar también con la llave de recuperación de KMyMoney"
+
+#: dialogs/settings/rc.cpp:97
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out.."
+msgstr ""
+"Puede cifrar sus datos también con la llave de recuperación de KMyMoney. "
+"Solo los desenvolventes del núcleo de KMyMoney poseen la llave privada "
+"imprescindible para descifrar tales datos.<p>\n"
+"\n"
+"Este mecanismo sirve por si usted pierde su llave y no puede acceder a los "
+"datos. Activando esta opción, los desarrolladores de KMyMoney podrán "
+"descifrar los datos y devolvérselos en un formato legible. Se le advierte de "
+"que tendrá que responder unas preguntas detalladas acerca del contenido de "
+"sus datos antes de poder enviarlos."
+
+#: dialogs/settings/rc.cpp:98
+msgid "Homepage Settings"
+msgstr "Configuración de la página de inicio"
+
+#: dialogs/settings/rc.cpp:99
+msgid "Up"
+msgstr "Subir"
+
+#: dialogs/settings/rc.cpp:100
+msgid "Down"
+msgstr "Bajar"
+
+#: dialogs/settings/rc.cpp:101
+msgid ""
+"Selected entries are shown on the home page of the application.<p>\n"
+"Use the buttons and checkboxes to customize the layout of the home page."
+msgstr ""
+"Las entradas seleccionadas se muestran en la página de inicio de la "
+"aplicación.<p>\n"
+"Emplee los botones y casillas para personalizar el aspecto de la página de "
+"inicio."
+
+#: dialogs/settings/rc.cpp:102
+msgid "Homepage/Summary page font scaling"
+msgstr "Escalado del tipo de letra de la Página de Inicio/Resumen"
+
+#: dialogs/settings/rc.cpp:103
+msgid "Percentage of default font size:"
+msgstr "Porcentaje del tamaño de tipo de letra predeterminado:"
+
+#: dialogs/settings/rc.cpp:104
+msgid ""
+"Remember font size when leaving the program if manually changed with mouse-"
+"wheel"
+msgstr ""
+"Recordar el tamaño de letra al salir del programa si se cambió manualmente "
+"con la rueda del ratón."
+
+#: dialogs/settings/rc.cpp:105
+msgid "Information display"
+msgstr "Información a mostrar"
+
+#: dialogs/settings/rc.cpp:106
+msgid "Show Account Limit Information"
+msgstr "Mostrar Información de Límite de Cuenta"
+
+#: dialogs/settings/rc.cpp:110 widgets/rc.cpp:47
+msgid ""
+"<i>Enter regular expressions which can be used to parse the data returned "
+"from the URL entered above. The symbol, price, and date must be found in "
+"the quote data to be usable. You may also try the KMyMoney user's "
+"mailinglist at <a href=\"mailto:kmymoney2-user@lists.sourceforge.net"
+"\">kmymoney2-user@lists.sourceforge.net</a> to find what settings work for "
+"other users in your country.</i>"
+msgstr ""
+"<i>Introduzca expresiones regulares con las que procesar los datos "
+"retornados de la URL antes introducida. El símbolo, precio y fecha deben "
+"encontrarse en los datos de cotización para ser utilizables. También puede "
+"mirar en la lista de usuarios de KMyMoney en <a href=\"mailto:kmymoney2-"
+"user@lists.sourceforge.net\"> kmymoney2-user@lists.sourceforge.net</a> para "
+"ver qué configuraciones funcionan con otros usuarios de su país.</i>"
+
+#: dialogs/settings/rc.cpp:113 widgets/rc.cpp:38
+msgid "Regular Expression to extract the symbol from the downloaded data"
+msgstr "Expresión Regular para extraer el símbolo de los datos descargados"
+
+#: dialogs/settings/rc.cpp:114 widgets/rc.cpp:39
+msgid "Regular Expression to extract the price from the downloaded data"
+msgstr "Expresión Regular para extraer el precio de los datos descargados"
+
+#: dialogs/settings/rc.cpp:115 widgets/rc.cpp:41
+msgid "URL to be used to download the quote"
+msgstr "URL desde la que descargar la cotización"
+
+#: dialogs/settings/rc.cpp:116 widgets/rc.cpp:42
+msgid ""
+"Enter the URL from which stock quotes will be fetched. <b>%1</b> will be "
+"replaced with the symbol for the security being quoted. For currency "
+"conversions, <b>%2</b> will be replaced with the currency to be quoted and "
+"<b>%1</b> with the currency the quote is based on."
+msgstr ""
+"Introduzca la URL de la cual tomar las cotizaciones de las acciones. <b>%1</"
+"b> será reemplazado con el símbolo del valor bursátil para el que se buscan "
+"cotizaciones. Para conversiones de divisas, <b>%2</b> será reemplazado con "
+"la divisa a la que convertir y <b>%1</b> con la divisa en la que se basa la "
+"cotización."
+
+#: dialogs/settings/rc.cpp:118 dialogs/settings/rc.cpp:121 widgets/rc.cpp:40
+#: widgets/rc.cpp:44
+msgid "Regular Expression to extract the date from the downloaded data"
+msgstr "Expresión Regular para extraer la fecha de los datos descargados"
+
+#: dialogs/rc.cpp:807 dialogs/settings/rc.cpp:119 widgets/rc.cpp:45
+msgid "Date Format"
+msgstr "Formato de la fecha"
+
+#: dialogs/settings/rc.cpp:122
+msgid "Skip HTML stripping"
+msgstr "Saltear descarte de HTML"
+
+#: dialogs/settings/rc.cpp:123
+msgid ""
+"<p>For easier processing of the data returned by the online source, KMyMoney "
+"usually strips unused parts before it is parsed with the regular "
+"expressions. If matching of the fields relies on those items, then use this "
+"option to turn stripping off.</p>\n"
+"\n"
+"<p>The following items are usually removed by stripping:\n"
+"\n"
+"<ul>\n"
+"<li>HTML tags such as <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded characters such as <b>&amp;nbsp;</b></li>\n"
+"<li>duplicate whitespace</li>\n"
+"</ul>\n"
+"</p>"
+msgstr ""
+"<p>Para un procesamiento más fácil de los datos devueltos por la fuente "
+"online, KMyMoney generalmente descarte las partes no utilizadas antes de "
+"procesarlos con las expresionesregulares. Si la coincidencia de los campos "
+"depende de esos elementos, entonces utilice estaopción para desactivar el "
+"descarte.</p>\n"
+"\n"
+"<p>Los siguientes elementos generalmente son eliminados por el descarte:\n"
+"\n"
+"<ul>\n"
+"<li>Categorías de HTML tales como <b>&lt;tag&gt;</b></li>\n"
+"<li>& caracteres codificados tales como <b>&amp;nbsp;</b></li>\n"
+"<li>espacios en blanco duplicados</li>\n"
+"</ul>\n"
+"</p>"
+
+#: dialogs/settings/rc.cpp:127
+msgid "Register settings"
+msgstr "Configuración del registro"
+
+#: dialogs/settings/rc.cpp:128
+msgid "Display"
+msgstr "Mostrar"
+
+#: dialogs/settings/rc.cpp:131
+msgid ""
+"Using the ledger lens shows the details for the transaction that has focus "
+"in the ledger. Usually, when using the transaction form, only a one line "
+"summary is displayed for each transaction as the details are shown in the "
+"form."
+msgstr ""
+"Utilizar la lupa del libro mayor muestra los detalles del asiento que tiene "
+"foco en el libro mayor. Usualmente, al utilizar el formulario de asiento, "
+"solamente se muestra una linea de resumen para cada asiento, ya que los "
+"detalles se muestran en el formulario."
+
+#: dialogs/settings/rc.cpp:133
+msgid "Always show a No. field"
+msgstr "Mostrar siempre un campo Nº"
+
+#: dialogs/settings/rc.cpp:134
+msgid "Show group header between transactions"
+msgstr "Mostrar encabezado de grupo entre asientos"
+
+#: dialogs/settings/rc.cpp:135
+msgid ""
+"Draws a larger header above each group of transaction. The grouping depends "
+"on the current sort order."
+msgstr ""
+"Dibuja un encabezado más grande arriba de cada grupo de asientos. El "
+"agrupamiento depende del ordenamiento actual."
+
+#: dialogs/settings/rc.cpp:136
+msgid "Show header for the previous and current fiscal year"
+msgstr "Mostrar encabezado para el anterior y actual año fiscal"
+
+#: dialogs/settings/rc.cpp:137
+msgid "Sorting"
+msgstr "Ordenamiento"
+
+#: dialogs/settings/rc.cpp:138
+msgid "Normal view"
+msgstr "Vista normal"
+
+#: dialogs/settings/rc.cpp:139
+msgid "Reconciliation view"
+msgstr "Vista de reconciliación"
+
+#: dialogs/settings/rc.cpp:140
+msgid "Search view"
+msgstr "Buscar"
+
+#: dialogs/settings/rc.cpp:141
+msgid ""
+"Use the <i>left</i> and <i>right</i> buttons to add and remove sort options. "
+"Use the <i>up</i> and <i>down</i> buttons to modify the sort order. Double-"
+"Click a selected entry to toggle the sort order between <i>ascending</i> and "
+"<i>descending</i>."
+msgstr ""
+"Utilice los botones <i>izquierdo</i> y <i>derecho</i> para agregar y "
+"eliminar opciones de ordenamiento. Utilice los botones <i>arriba</i> y "
+"<i>abajo</i> para modificar el orden. Haga doble-click sobre una entrada "
+"para cambiar el orden entre <i>ascendente</i> y <i>descendente</i>."
+
+#: dialogs/settings/rc.cpp:142
+msgid "Data entry"
+msgstr "Ingreso de datos"
+
+#: dialogs/settings/rc.cpp:146
+msgid "Use Enter to move between fields"
+msgstr "Utilizar Enter para moverse entre los campos"
+
+#: dialogs/settings/rc.cpp:147
+msgid "Match names from start"
+msgstr "Los nombres deben coincidir desde el inicio"
+
+#: dialogs/settings/rc.cpp:148
+msgid ""
+"Mark this option, if you always want to match names e.g. for payees from the "
+"start. If unset, any substring is matched."
+msgstr ""
+"Marque esta opción si quiere que los nombres siempre coincidan desde el "
+"inicio. Si no está marcada, busca la coincidencia de cualquier subcadena de "
+"texto."
+
+#: dialogs/settings/rc.cpp:149
+msgid "Default reconciliation state"
+msgstr "Estado predeterminado de reconciliación"
+
+#: dialogs/rc.cpp:227 dialogs/settings/rc.cpp:150
+#: widgets/kmymoneycombo.cpp:348 widgets/registersearchline.cpp:84
+msgid "Not reconciled"
+msgstr "No reconciliados"
+
+#: dialogs/rc.cpp:228 dialogs/settings/rc.cpp:151
+#: widgets/kmymoneycombo.cpp:347 widgets/registersearchline.cpp:85
+msgid "Cleared"
+msgstr "Librado"
+
+#: dialogs/settings/rc.cpp:153
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation "
+"of an account"
+msgstr ""
+"Estado predeterminado de reconciliación para asientos ingresados al "
+"reconciliar una cuenta"
+
+#: dialogs/settings/rc.cpp:154
+msgid "Autofill"
+msgstr "Autocompletar"
+
+#: dialogs/settings/rc.cpp:155
+msgid "No Autofill"
+msgstr "No autocompletar"
+
+#: dialogs/settings/rc.cpp:156
+msgid "Don't do autofill of transaction data at all."
+msgstr "No autocompletar los datos de los asientos"
+
+#: dialogs/settings/rc.cpp:157
+msgid "Same transaction if amount differs less than"
+msgstr "Es el mismo asiento si el importe difiere menos de"
+
+#: dialogs/settings/rc.cpp:158
+msgid ""
+"Collect all transactions for the given payee. Treat all transactions that "
+"refer to the same category and have an amount with +/- X % as identical. If "
+"more than one transaction is found, a list of them is presented to the "
+"user.\n"
+"\n"
+"Selecting 0% will list all transactions."
+msgstr ""
+"Recoger todos los asientos para un beneficiario. Tratar todos los asientos "
+"que se refieran a la misma categoría y tienen un importe +/- X% como "
+"idénticos. Si se encuentra más de un asiento, se le presenta al usuario una "
+"lista de ellos.\n"
+"\n"
+"Seleccionar 0% listará todos los asientos."
+
+#: dialogs/settings/rc.cpp:159
+msgid ""
+"Two transactions are usually treated identical for autofill, if they refer "
+"the same accounts. They are treated as different transactions though, when "
+"their amount varies by more than the percentage given here."
+msgstr ""
+"Dos asientos se tratan generalmente como idénticos para autocompletar, si se "
+"refieren a las mismas cuentas. Se tratan como asientos diferentes, cuando su "
+"importe varía por un porcentaje mayor que el especificado acá."
+
+#: dialogs/settings/rc.cpp:160
+msgid ""
+"_: Same transaction if amount differs less than percent.\n"
+"percent."
+msgstr "por ciento."
+
+#: dialogs/settings/rc.cpp:161
+msgid "with previously most often used transaction for the payee"
+msgstr "con el asiento más utilizado previamente para el beneficiario"
+
+#: dialogs/settings/rc.cpp:162
+msgid ""
+"The data of the last transaction assigned to the category used most often "
+"for this payee is autofilled into the transaction editor."
+msgstr ""
+"Los datos del último asiento asignado a la categoría más utilizada para este "
+"beneficiario se autocompleta en el editor de asientos."
+
+#: dialogs/settings/rc.cpp:164
+msgid "Match transactions within days"
+msgstr "Conciliar asientos en días"
+
+#: dialogs/settings/rc.cpp:165
+msgid ""
+"Search for matching transactions within the range of the posting date of the "
+"imported transaction +/- the number of given days."
+msgstr ""
+"Buscar asientos coincidentes dentro del rango de la fecha de ingreso del "
+"asiento importado +/- el número de días dados."
+
+#: dialogs/settings/rc.cpp:166
+msgid "Ask for a new payee's default category"
+msgstr "Preguntar por la categoría predeterminada de un nuevo pagador"
+
+#: dialogs/settings/rc.cpp:167
+msgid ""
+"Whenever a new payee is detected during import of a statement, the user will "
+"be asked to assign a default category for this user when this option is "
+"selected."
+msgstr ""
+"Cuando se selecciona esta opción, si se detecta un nuevo pagador durante la "
+"importación de un resumen, se le preguntará al usuario la categoría "
+"predeterminada a asignar"
+
+#: dialogs/settings/rc.cpp:168
+msgid "Schedule Settings"
+msgstr "Configuraciones de las Planificaciones"
+
+#: dialogs/settings/rc.cpp:169
+msgid "Startup options"
+msgstr "Opciones de inicio"
+
+#: dialogs/settings/rc.cpp:170
+msgid "Check schedules on startup"
+msgstr "Comprobar los asientos planificados al iniciar"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:60
+#: widgets/kmymoneyonlinequoteconfig.cpp:60
+msgid "Delete the selected source entry"
+msgstr "Borrar el origen escogido"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:61
+#: widgets/kmymoneyonlinequoteconfig.cpp:61
+msgid "Use this to delete the selected online source entry"
+msgstr "Use esto para borrar el origen online escogido"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:66
+#: widgets/kmymoneyonlinequoteconfig.cpp:66
+msgid "Create a new source entry for online quotes"
+msgstr "Crear nuevo origen de cotizaciones online"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:67
+#: widgets/kmymoneyonlinequoteconfig.cpp:67
+msgid "Use this to create a new entry for online quotes"
+msgstr "Use esto para crear un nuevo origen de cotizaciones online"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:107
+#: dialogs/settings/ksettingsonlinequotes.cpp:190
+#: dialogs/settings/ksettingsonlinequotes.cpp:193
+#: dialogs/settings/ksettingsonlinequotes.cpp:216
+#: widgets/kmymoneyonlinequoteconfig.cpp:107
+#: widgets/kmymoneyonlinequoteconfig.cpp:185
+#: widgets/kmymoneyonlinequoteconfig.cpp:188
+#: widgets/kmymoneyonlinequoteconfig.cpp:211
+msgid "New Quote Source"
+msgstr "Nuevo Origen de Cotizaciones"
+
+#: dialogs/ksplittransactiondlg.cpp:77 dialogs/rc.cpp:788
+msgid "Clear &All"
+msgstr "Borrar &Todo"
+
+#: dialogs/ksplittransactiondlg.cpp:79
+msgid "Clear all splits"
+msgstr "Eliminar todas las partidas"
+
+#: dialogs/ksplittransactiondlg.cpp:80
+msgid "Use this to clear all splits of this transaction"
+msgstr "Use esto para eliminar todas las partidas de este asiento"
+
+#: dialogs/ksplittransactiondlg.cpp:84
+msgid "&Merge"
+msgstr "Co&mbinar"
+
+#: dialogs/ksplittransactiondlg.cpp:183
+msgid ""
+"The total amount of this transaction is %1 while the sum of the splits is %"
+"2. The remaining %3 are unassigned."
+msgstr ""
+"El importe total de este asiento es %1 mientras que la suma de las partidas "
+"es %2. El importe restante, %3 está sin asignar."
+
+#: dialogs/ksplittransactiondlg.cpp:191
+#, c-format
+msgid "Change &total amount of transaction to %1."
+msgstr "&Cambiar el importe total del asiento a %1."
+
+#: dialogs/ksplittransactiondlg.cpp:194
+msgid "&Distribute difference of %1 among all splits."
+msgstr "&Reparte la diferencia de %1 entre todas las partidas."
+
+#: dialogs/ksplittransactiondlg.cpp:203
+#, c-format
+msgid "&Leave total amount of transaction at %1."
+msgstr "&Dejar el importe total del asiento en %1."
+
+#: dialogs/ksplittransactiondlg.cpp:205
+msgid "&Leave %1 unassigned."
+msgstr "&Deja %1 sin asignar"
+
+#: dialogs/ksplittransactiondlg.cpp:275
+msgid ""
+"You are about to delete all splits of this transaction. Do you really want "
+"to continue?"
+msgstr ""
+"Está a punto de borrar todas las partidas de este asiento. ¿Desea continuar?"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:97
+msgid "Use this to create a new QIF import/export profile"
+msgstr "Use esto para crear un nuevo perfil QIF de importación/exportación"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:148
+#: dialogs/mymoneyqifprofileeditor.cpp:403 dialogs/rc.cpp:797
+msgid "QIF Profile Editor"
+msgstr "Editor de perfil QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:150
+msgid "QIF Profile Selector"
+msgstr "Selector de Perfiles QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:236
+msgid "The default QIF profile"
+msgstr "Perfil QIF predefinido"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:404
+#: dialogs/mymoneyqifprofileeditor.cpp:417
+msgid "Enter new profile name"
+msgstr "Introducir un nuevo nombre de perfil"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:436
+msgid "Do you really want to delete profile '%1'?"
+msgstr "¿Quiere realmente borrar el perfil '%1'?"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:38
+msgid "Select additional keys"
+msgstr "Escoger claves adicionales"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:48 widgets/rc.cpp:25
+msgid "User identification"
+msgstr "Identificación de usuário"
+
+#: dialogs/kendingbalancedlg.cpp:71
+msgid ""
+"Please enter the following fields with the information as you find them on "
+"your statement. Make sure to enter all values in <b>%1</b>."
+msgstr ""
+"Introduzca los siguientes campos con la información que viene en su extracto "
+"de cuenta. Asegurese de ingresar todos los valores en <b>%1</b>."
+
+#: dialogs/kendingbalancedlg.cpp:124
+#, c-format
+msgid "Last reconciled statement: %1"
+msgstr "Ultimo asiento reconciliado: %1"
+
+#: dialogs/kendingbalancedlg.cpp:437 dialogs/kendingbalancedlg.cpp:577
+#: dialogs/rc.cpp:137
+msgid "Adjustment transaction"
+msgstr "Asiento de ajuste"
+
+#: dialogs/kendingbalancedlg.cpp:510
+msgid ""
+"KMyMoney has calculated the following amounts for interest and amortization "
+"according to recorded payments between %1 and %2."
+msgstr ""
+"KMyMoney calculó las siguientes cantidades para interés y amortización de "
+"acuerdo con los pagos registrados entre %1 y %2."
+
+#: dialogs/kbalancechartdlg.cpp:59
+#, c-format
+msgid "Balance of %1"
+msgstr "Saldo de %1"
+
+#: dialogs/kbalancechartdlg.cpp:70
+msgid "%1 Balance History"
+msgstr "Historial de Saldos de %1"
+
+#: dialogs/kmymoneysplittable.cpp:98
+msgid "Split Options"
+msgstr "Opciones de la Partida"
+
+#: dialogs/kmymoneysplittable.cpp:99 dialogs/rc.cpp:731
+#: widgets/kmymoneypriceview.cpp:149
+msgid "Edit..."
+msgstr "Editar..."
+
+#: dialogs/kmymoneysplittable.cpp:100
+msgid "Duplicate"
+msgstr "Duplicar"
+
+#: dialogs/kmymoneysplittable.cpp:102
+msgid "Delete ..."
+msgstr "Borrar ..."
+
+#: dialogs/kmymoneysplittable.cpp:275
+msgid ""
+"_: Duplicate split\n"
+"CTRL+c"
+msgstr "CTRL+c"
+
+#: dialogs/kmymoneysplittable.cpp:562
+msgid "will be calculated"
+msgstr "será calculado"
+
+#: dialogs/kmymoneysplittable.cpp:648
+msgid ""
+"You are about to delete the selected split. Do you really want to continue?"
+msgstr "Está a punto de borrar la partida escogida. ¿Desea continuar?"
+
+#: dialogs/rc.cpp:1
+msgid "Account selection"
+msgstr "Selección de cuenta"
+
+#: dialogs/rc.cpp:3
+msgid "Account to import to"
+msgstr "Cuenta a la que importar"
+
+#: dialogs/rc.cpp:6 dialogs/rc.cpp:170 widgets/rc.cpp:169
+msgid "Skip"
+msgstr "Saltear"
+
+#: dialogs/rc.cpp:8
+msgid ""
+"Use this dialog to backup your data. \n"
+"\n"
+"Please make sure you have a disk inserted and that the drive is ready. Then "
+"choose the mount point from either the Choose button or by entering the path "
+"in the available box.\n"
+"\n"
+"Click OK to perform the backup. If your system does not use an automounter, "
+"make sure you mark the checkbox below to \"mount this directory before "
+"backing up.\""
+msgstr ""
+"Use este diálogo para hacer una copia de seguridad de sus datos.\n"
+"\n"
+"Inserte un disco y asegúrese de que el dispositivo está listo. Entonces "
+"escoja el punto de montaje mediante el botón Elegir o introduciendo la ruta "
+"en la caja disponible a tal efecto.\n"
+"\n"
+"Pulse Aceptar para realizar la copia. Si su sistema no usa un automontador, "
+"asegúrese de marcar la casilla \"montar este directorio antes de copiar.\" "
+
+#: dialogs/rc.cpp:9
+msgid "Device options"
+msgstr "Opciones del dispositivo"
+
+#: dialogs/rc.cpp:10
+msgid ""
+"_: This is the mount point\n"
+"Mount Point:"
+msgstr "Punto de montaje"
+
+#: dialogs/rc.cpp:11
+msgid "Choose..."
+msgstr "Escoger..."
+
+#: dialogs/rc.cpp:12
+msgid "Mount this directory before backing up."
+msgstr "Montar este directorio antes de realizar la copia."
+
+#: dialogs/rc.cpp:15
+msgid "Reassign categories"
+msgstr "Reasignar categorías"
+
+#: dialogs/rc.cpp:16
+msgid ""
+"The transactions, schedules and budgets associated with the selected "
+"category need to be re-assigned to a different category before the selected "
+"category can be deleted. Please select a category from the list below."
+msgstr ""
+"Los asientos, planes y presupuestos asociados con la categoría seleccionada "
+"deben ser reasignados a una categoría diferente antes que la categoría "
+"seleccionada pueda ser eliminada. Por favor, seleccione una categoría de la "
+"lista debajo."
+
+#: dialogs/rc.cpp:17
+msgid "Available categories:"
+msgstr "Categorías disponibles:"
+
+#: dialogs/rc.cpp:21
+msgid ""
+"Please choose the type of import you wish to perform. A simple "
+"explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Por favor escoja el tipo de importación que desea realizar. Dispone de una "
+"breve\n"
+"explicación de cada tipo en el fondo de la pantalla, que se actualiza "
+"cuando\n"
+"escoge una opción.\n"
+"\n"
+"Cuando escoja el tipo adecuado por favor pulse el botón Aceptar."
+
+#: dialogs/rc.cpp:23
+msgid "QIF"
+msgstr "QIF"
+
+#: dialogs/rc.cpp:24
+msgid "CSV"
+msgstr "CSV"
+
+#: dialogs/rc.cpp:25
+msgid "Some descripton"
+msgstr "Alguna descripción"
+
+#: dialogs/rc.cpp:28
+msgid "Confirm Manual Enter"
+msgstr "Confirmar Entrada Manual"
+
+#: dialogs/rc.cpp:29
+msgid "The following changes have been made to the transaction data:"
+msgstr "Se realizaron los siguientes cambios a los datos del asiento:"
+
+#: dialogs/rc.cpp:30
+msgid "Please choose what you wish to do with the above changes"
+msgstr "Por favor, escoja qué desea hacer con los cambios"
+
+#: dialogs/rc.cpp:31
+msgid ""
+"Discard the changes and enter the original transaction into the register."
+msgstr "Rechazar los cambios e introducir el asiento original en el registro."
+
+#: dialogs/rc.cpp:32
+msgid "Enter these new values this one time, for this occurence only."
+msgstr "Introducir estos nuevos valores esta vez, sólo en esta ocasión."
+
+#: dialogs/rc.cpp:33
+msgid "Set all further occurences in this schedule to be these values."
+msgstr ""
+"Hacer que todas las próximas apariciones de este asiento programado tengan "
+"estos valores."
+
+#: dialogs/rc.cpp:36
+msgid "CSV Dialog"
+msgstr "Diálogo de CSV"
+
+#: dialogs/rc.cpp:37
+msgid ""
+"CSV Dialog. Choose a file and then click on Run. You can view your "
+"progress at\n"
+"the bottom of the screen.\n"
+"\n"
+"You can cancel the process at any time by clicking on the Cancel button."
+msgstr ""
+"Diálogo de CSV. Escoja un archivo y pulse en Ejecutar. Puede ver el "
+"progreso\n"
+"en el fondo de la pantalla.\n"
+"\n"
+"Puede cancelar el proceso en cualquier instante pulsando en el botón "
+"Cancelar."
+
+#: dialogs/rc.cpp:38
+msgid "Choose the csv file:"
+msgstr "Escoja el archivo CSV:"
+
+#: dialogs/rc.cpp:39
+msgid "Browse"
+msgstr "Listar"
+
+#: dialogs/rc.cpp:40
+msgid "Between These Dates"
+msgstr "Entre estas fechas"
+
+#: dialogs/rc.cpp:41 dialogs/rc.cpp:196
+msgid "Start on:"
+msgstr "Empieza el:"
+
+#: dialogs/rc.cpp:42 dialogs/rc.cpp:195
+msgid "End on:"
+msgstr "Acaba el:"
+
+#: dialogs/rc.cpp:43
+msgid "Run"
+msgstr "Ejecutar"
+
+#: dialogs/rc.cpp:44
+msgid "Progress Info"
+msgstr "Información del progreso"
+
+#: dialogs/rc.cpp:45
+msgid "Processing Account:"
+msgstr "Procesando Cuenta:"
+
+#: dialogs/rc.cpp:47
+msgid "Processing Transaction:"
+msgstr "Procesando Asiento:"
+
+#: dialogs/rc.cpp:48
+msgid "0 of 0"
+msgstr "0 de 0"
+
+#: dialogs/rc.cpp:50
+msgid "Exchange Rate/Price Editor"
+msgstr "Editor de Tasa de Cambio/Precio"
+
+#: dialogs/rc.cpp:55
+msgid "Convert from"
+msgstr "Cuenta origen"
+
+#: dialogs/rc.cpp:58
+msgid "Convert to"
+msgstr "Cuenta destino"
+
+#: dialogs/rc.cpp:61
+msgid "To amount"
+msgstr "Importe convertido"
+
+#: dialogs/rc.cpp:62
+msgid "Exchange rate / Price"
+msgstr "Tasa de cambio/ Precio"
+
+#: dialogs/rc.cpp:64
+msgid ""
+"xx\n"
+"xx"
+msgstr ""
+"xx\n"
+"xx"
+
+#: dialogs/rc.cpp:68
+msgid "Currencies"
+msgstr "Divisas"
+
+#: dialogs/rc.cpp:72
+msgid "real ID"
+msgstr "ID real"
+
+#: dialogs/rc.cpp:73 dialogs/rc.cpp:722
+msgid "ID"
+msgstr "ID"
+
+#: dialogs/rc.cpp:74
+msgid "X"
+msgstr "X"
+
+#: dialogs/rc.cpp:76 dialogs/rc.cpp:459
+msgid "Online Source"
+msgstr "Fuente de cotizaciones online"
+
+#: dialogs/rc.cpp:78 dialogs/rc.cpp:278 dialogs/rc.cpp:312 dialogs/rc.cpp:684
+msgid "F1"
+msgstr "F1"
+
+#: dialogs/rc.cpp:80
+msgid "If this button is not activated, select the base currency first."
+msgstr "Si no está activado este botón, escoja antes la divisa de base."
+
+#: dialogs/rc.cpp:81
+msgid ""
+"Press this button to close the dialog. If the button is not activated, "
+"select your base currency."
+msgstr ""
+"Pulse este botón para cerrar el diálogo. Si el botón no está activado, "
+"escoja su divisa base."
+
+#: dialogs/rc.cpp:82
+msgid "Edit Equity"
+msgstr "Editar Patrimonio"
+
+#: dialogs/rc.cpp:86 dialogs/rc.cpp:410
+msgid "Smallest fraction:"
+msgstr "Fracción más pequeña:"
+
+#: dialogs/rc.cpp:87 dialogs/rc.cpp:408 dialogs/rc.cpp:440
+msgid "1 /"
+msgstr "1 /"
+
+#: dialogs/rc.cpp:88 dialogs/rc.cpp:405
+msgid "Investment Type:"
+msgstr "Tipo de inversión"
+
+#: dialogs/rc.cpp:89 dialogs/rc.cpp:404
+msgid "Equity Name:"
+msgstr "Nombre del Patrimonio"
+
+#: dialogs/rc.cpp:90 dialogs/rc.cpp:409
+msgid "Market Symbol:"
+msgstr "Símbolo del Mercado"
+
+#: dialogs/rc.cpp:91
+msgid "Price History"
+msgstr "Historial de Precios"
+
+#: dialogs/rc.cpp:97
+msgid "Edit Scheduled transaction"
+msgstr "Editar asiento planificación"
+
+#: dialogs/rc.cpp:98
+msgid "Schedule name:"
+msgstr "Nombre de la planificación:"
+
+#: dialogs/rc.cpp:99
+msgid "Frequency:"
+msgstr "Frecuencia:"
+
+#: dialogs/rc.cpp:100
+msgid "Number of selected periods between entries"
+msgstr "Número de periodos seleccionados entre entradas"
+
+#: dialogs/rc.cpp:101
+msgid "Payment information"
+msgstr "Información del pago"
+
+#: dialogs/rc.cpp:105 dialogs/rc.cpp:160 dialogs/rc.cpp:247 dialogs/rc.cpp:752
+#: widgets/register.cpp:569
+msgid "C"
+msgstr "C"
+
+#: dialogs/rc.cpp:113
+msgid "Do nothing"
+msgstr "No hacer nada"
+
+#: dialogs/rc.cpp:116
+msgid "If this schedule occurs on the weekend:"
+msgstr "Si este asiento programado tiene lugar durante el fin de semana:"
+
+#: dialogs/rc.cpp:117
+msgid "The amount is an estimate because it varies for each payment"
+msgstr "Esta es una estimación porque los importes varían para cada pago"
+
+#: dialogs/rc.cpp:118
+msgid "Enter this schedule into the register automatically when it is due"
+msgstr "Asentar automáticamente cuando vence"
+
+#: dialogs/rc.cpp:119
+msgid "This schedule will end at some time"
+msgstr "Esta planificación finalizará en algún momento"
+
+#: dialogs/rc.cpp:120
+msgid "Number of transactions remaining:"
+msgstr "Número de asientos restantes:"
+
+#: dialogs/rc.cpp:121
+msgid "Date of final transaction:"
+msgstr "Fecha de la último asiento:"
+
+#: dialogs/rc.cpp:125
+msgid "Reconciliation Wizard"
+msgstr "Asistente de reconciliación"
+
+#: dialogs/rc.cpp:127
+msgid ""
+"Reconciling your account assures, that your recordings match those of your "
+"institution and that there are no mistakes on either side. You should "
+"reconcile your account whenever you receive a statement from your "
+"institution.\n"
+"\n"
+"All relevant information necessary for this process is usually printed on "
+"your statement.\n"
+"\n"
+"On the next page you will verify, that the starting and ending balance are "
+"matching those on your statement. If not, please modify the figures."
+msgstr ""
+"Reconciliar sus cuentas asegura que sus registros se ajustan a los datos "
+"disponibles por su entidad bancaria y que no hay error en ninguna de las "
+"partes. Debería reconciliar sus cuentas siempre que reciba un extracto de "
+"cuenta de su entidad bancaria.\n"
+"\n"
+"Toda la información importante necesaria para este proceso suele venir "
+"impresa en su extracto.\n"
+"\n"
+"En la siguiente página verificará que el saldo inicial y final coinciden con "
+"los comunicados por su entidad bancaria. Si no es el caso, por favor, "
+"modifique las cantidades."
+
+#: dialogs/rc.cpp:129
+msgid ""
+"KMyMoney calculates your loan payments automatically. The amounts can "
+"deviate from those calculated by the creditor. Therefore, you possibly have "
+"to adjust amortization, interest and other costs according to your "
+"statement.\n"
+"\n"
+"Please enter the following information found on your statement:"
+msgstr ""
+"KMyMoney calcula los pagos de su préstamo automáticamente. Las cantidades "
+"pueden desviarse de las calculadas por el acreedor. De darse este caso, "
+"posiblemente tendrá que ajustar la amortización, intereses y otros costos de "
+"acuerdo con su resumen de cuenta.\n"
+"\n"
+"Introduzca la siguiente información, según su extracto de cuenta:"
+
+#: dialogs/rc.cpp:130
+msgid "Ending date of statement"
+msgstr "Fecha final del extracto de cuenta"
+
+#: dialogs/rc.cpp:131
+msgid "Starting date of statement"
+msgstr "Fecha inicial del extracto de cuenta"
+
+#: dialogs/rc.cpp:132
+msgid "Verify payments"
+msgstr "Verifique los pagos"
+
+#: dialogs/rc.cpp:133 dialogs/rc.cpp:148 dialogs/rc.cpp:476 dialogs/rc.cpp:477
+#: dialogs/rc.cpp:508 dialogs/rc.cpp:513 dialogs/rc.cpp:518 dialogs/rc.cpp:532
+#: dialogs/rc.cpp:539 dialogs/rc.cpp:540 dialogs/rc.cpp:541 dialogs/rc.cpp:542
+#: dialogs/rc.cpp:543 dialogs/rc.cpp:552 dialogs/rc.cpp:553 dialogs/rc.cpp:554
+#: dialogs/rc.cpp:555 dialogs/rc.cpp:556 dialogs/rc.cpp:565 dialogs/rc.cpp:566
+#: dialogs/rc.cpp:567 dialogs/rc.cpp:568 dialogs/rc.cpp:569 dialogs/rc.cpp:578
+#: dialogs/rc.cpp:579 dialogs/rc.cpp:580 dialogs/rc.cpp:581 dialogs/rc.cpp:582
+#: dialogs/rc.cpp:591 dialogs/rc.cpp:592 dialogs/rc.cpp:593 dialogs/rc.cpp:594
+#: dialogs/rc.cpp:595 dialogs/rc.cpp:603 dialogs/rc.cpp:604 dialogs/rc.cpp:605
+#: dialogs/rc.cpp:606 dialogs/rc.cpp:607 dialogs/rc.cpp:618 dialogs/rc.cpp:619
+#: dialogs/rc.cpp:621 dialogs/rc.cpp:636 dialogs/rc.cpp:637 dialogs/rc.cpp:638
+#: dialogs/rc.cpp:639 dialogs/rc.cpp:640 dialogs/rc.cpp:641 dialogs/rc.cpp:651
+#: dialogs/rc.cpp:652 dialogs/rc.cpp:654 dialogs/rc.cpp:657 dialogs/rc.cpp:658
+#: dialogs/rc.cpp:659 dialogs/rc.cpp:664 dialogs/rc.cpp:665 dialogs/rc.cpp:668
+#: dialogs/rc.cpp:670 dialogs/rc.cpp:672 dialogs/rc.cpp:674 dialogs/rc.cpp:676
+#: dialogs/rc.cpp:678 dialogs/rc.cpp:681 dialogs/rc.cpp:823 widgets/rc.cpp:167
+msgid "1"
+msgstr "1"
+
+#: dialogs/rc.cpp:136
+msgid ""
+"If your statement shows different amounts, please cancel this dialog and "
+"correct the false transactions or correct the values in this dialog. In the "
+"later case, KMyMoney will create an adjustment transaction and add it to the "
+"ledger."
+msgstr ""
+"Si su extracto de cuenta muestra diferentes cantidades, por favor cancele "
+"este diálogo y corrija los asientos falsos o arregle los valores en este "
+"diálogo. En este caso, KMyMoney creará un asiento de ajuste y lo añadirá al "
+"libro mayor."
+
+#: dialogs/rc.cpp:138
+msgid ""
+"In order to create the adjustment transaction, KMyMoney requires an account "
+"and possibly an interest category to assign the differences to. Please "
+"select an account and - if necessary - a category."
+msgstr ""
+"Con el fin de crear la transacción de ajuste, KMyMoney requiere una cuenta y "
+"posiblemente una categoría a la que asignar las diferencias. Escoja una "
+"cuenta y -si lo necesita- una categoría"
+
+#: dialogs/rc.cpp:140
+msgid "Interest-Category"
+msgstr "Categoría-Interés"
+
+#: dialogs/rc.cpp:141
+msgid "Restarting postponed reconciliation"
+msgstr "Reiniciando reconciliación aplazada"
+
+#: dialogs/rc.cpp:142
+msgid ""
+"You have previously postponed the reconciliation of this account. If you "
+"have entered charges or interests the last time you started reconciling this "
+"account you can modify these in the ledger later on.\n"
+"\n"
+"It is important, that you continue with the same statement you used when you "
+"postponed the reconciliation.\n"
+"\n"
+"All information you have entered into this wizard will be shown and all "
+"transactions that you already cleared are marked with a 'C'."
+msgstr ""
+"Anteriormente pospuso la reconciliación de esta cuenta. Si introdujo cargos "
+"o intereses la última vez que comenzó a reconciliar esta cuenta podrá "
+"modificarlos en el libro mayor más tarde.\n"
+"\n"
+"Es importante que continúe con el mismo extracto de cuenta que usó cuando "
+"pospuso la reconciliación.\n"
+"\n"
+"Toda la información que ha introducido en este asistente será mostrada y los "
+"asientos ya reconciliados marcados con una 'C'."
+
+#: dialogs/rc.cpp:143
+msgid "Statement Information"
+msgstr "Información del extracto:"
+
+#: dialogs/rc.cpp:144 dialogs/rc.cpp:315 dialogs/rc.cpp:317 dialogs/rc.cpp:320
+#: dialogs/rc.cpp:321 dialogs/rc.cpp:329 dialogs/rc.cpp:330 dialogs/rc.cpp:333
+#: dialogs/rc.cpp:334 dialogs/rc.cpp:335 dialogs/rc.cpp:336 dialogs/rc.cpp:366
+msgid "x"
+msgstr "x"
+
+#: dialogs/rc.cpp:145
+msgid "Statement date:"
+msgstr "Fecha del extracto:"
+
+#: dialogs/rc.cpp:146
+msgid "Starting balance of this statement:"
+msgstr "Saldo previo a este extracto:"
+
+#: dialogs/rc.cpp:147
+msgid "Ending balance of this statement:"
+msgstr "Saldo a la fecha del extracto:"
+
+#: dialogs/rc.cpp:149
+msgid "Interest / Charges"
+msgstr "Intereses / Cargos"
+
+#: dialogs/rc.cpp:150
+msgid ""
+"If necessary, enter information about interest or charges here. KMyMoney "
+"will create transactions and clear them directly for you."
+msgstr ""
+"Si es necesario, introduzca aquí información acerca de intereses o cargos. "
+"KMyMoney creará asientos y los librará directamente para usted"
+
+#: dialogs/rc.cpp:153
+msgid "Charges"
+msgstr "Cargos"
+
+#: dialogs/rc.cpp:154
+msgid "Enter Schedule"
+msgstr "Ingresar Planificación"
+
+#: dialogs/rc.cpp:155
+msgid "Schedule Details"
+msgstr "Detalles de la transacción planificada"
+
+#: dialogs/rc.cpp:156 dialogs/rc.cpp:348 dialogs/rc.cpp:389 widgets/rc.cpp:164
+msgid "Name:"
+msgstr "Nombre:"
+
+#: dialogs/rc.cpp:157 dialogs/rc.cpp:351 widgets/rc.cpp:165
+msgid "Type:"
+msgstr "Tipo:"
+
+#: dialogs/rc.cpp:168
+msgid "Enter"
+msgstr "Introducir"
+
+#: dialogs/rc.cpp:169
+msgid ""
+"Enter the transaction and advance the next due date of this schedule to the "
+"next payment date."
+msgstr ""
+"Ingresar el asiento y avanzar la fecha de próximo vencimiento a la de la "
+"próxima ocurrencia."
+
+#: dialogs/rc.cpp:171
+msgid ""
+"Do not enter the transaction but advance the next due date of this schedule "
+"to the next payment date."
+msgstr ""
+"No ingresar el asiento pero avanzar la fecha de vencimiento de la "
+"planificación a la de la próxima ocurrencia."
+
+#: dialogs/rc.cpp:172
+msgid "Ignore"
+msgstr "Ignorar"
+
+#: dialogs/rc.cpp:173
+msgid ""
+"Do not enter or skip payments for this schedule but continue with the next "
+"schedule."
+msgstr ""
+"No ingresar o saltear pagos para esta planificación pero continuar con la "
+"próxima planificación."
+
+#: dialogs/rc.cpp:175
+msgid "Cancel processing of schedule entry."
+msgstr "Cancelar el procesamiento del ingreso de planificaciones."
+
+#: dialogs/rc.cpp:176
+msgid "Update Stock and Currency Prices"
+msgstr "Actualizar precios de Acciones y Divisas"
+
+#: dialogs/rc.cpp:177
+msgid "List of known Equities, and the date they were last updated on."
+msgstr ""
+"Listado de Patrimonios conocidos y fecha en que fueron actualizados por "
+"última vez."
+
+#: dialogs/rc.cpp:179
+msgid "Update All"
+msgstr "Actualizar Todo"
+
+#: dialogs/rc.cpp:180
+msgid "Update Selected"
+msgstr "Actualizar los Escogidos"
+
+#: dialogs/rc.cpp:181
+msgid "Status:"
+msgstr "Estado:"
+
+#: dialogs/rc.cpp:184
+msgid "QIF Export"
+msgstr "Exportar a QIF"
+
+#: dialogs/rc.cpp:185
+msgid ""
+"From this dialog you are able to export transactions to a quicken compatible "
+"file, (known as a QIF file, because of the extension). Please enter the "
+"path to the QIF file or select it by clicking on the Browse button.\n"
+"\n"
+"You can choose the file's path, the account and the format of the QIF file "
+"(profile). Choose Account to export all the transactions between the "
+"specified dates or just categories. You can also limit the transactions "
+"that are exported by start and ending date. Once you have pressed the "
+"Export button a message box will appear when the export has completed "
+"detailing how many transactions, categories and payees were exported."
+msgstr ""
+"Mediante este diálogo es posible exportar asientos a un archivo compatible "
+"con quicken, (conocidos como archivos QIF, debido a la extensión). Por "
+"favor, introduzca la ruta al archivo QIF o escójalo pulsando en el botón "
+"Escoger.\n"
+"\n"
+"Puede escoger la ruta al archivo, la cuenta y el formato del archivo QIF "
+"(perfil). Escoja Cuenta para exportar todos los asientos entre las fechas "
+"especificadas o simplemente categorías. También puede limitar los asientos "
+"que son exportados mediante las fechas inicial y final. Despues de pulsar el "
+"botón Exportar, aparecerá un mensaje al finalizar el proceso de exportación, "
+"detallando cuántos asientos, categorías y beneficiarios fueron exportados."
+
+#: dialogs/rc.cpp:186
+msgid "File to export to:"
+msgstr "Archivo al que exportar:"
+
+#: dialogs/rc.cpp:188
+msgid "Account to export"
+msgstr "Cuenta a exportar"
+
+#: dialogs/rc.cpp:189 dialogs/rc.cpp:297
+msgid "QIF Profile"
+msgstr "Perfil QIF"
+
+#: dialogs/rc.cpp:190 dialogs/rc.cpp:298 dialogs/rc.cpp:362
+#: widgets/kmymoneypriceview.cpp:145
+msgid "New..."
+msgstr "Nuevo..."
+
+#: dialogs/rc.cpp:191
+msgid "Contents to Export"
+msgstr "Contenidos a Exportar"
+
+#: dialogs/rc.cpp:194
+msgid "Date Range"
+msgstr "Rango de Fechas"
+
+#: dialogs/rc.cpp:199
+msgid "Search transactions"
+msgstr "Buscar Asientos"
+
+#: dialogs/rc.cpp:200
+msgid "Criteria"
+msgstr "Criterios"
+
+#: dialogs/rc.cpp:201
+msgid "Define your search criteria"
+msgstr "Defina su criterio de búsqueda"
+
+#: dialogs/kfindtransactiondlg.cpp:169 dialogs/rc.cpp:202
+msgid "Text"
+msgstr "Texto"
+
+#: dialogs/rc.cpp:203
+msgid "Contains"
+msgstr "Contiene"
+
+#: dialogs/rc.cpp:204
+msgid "Does not contain"
+msgstr "No contiene"
+
+#: dialogs/rc.cpp:205
+msgid "Treat text as regular expression"
+msgstr "Tratar texto como si fuese una expresión regular"
+
+#: dialogs/rc.cpp:206
+msgid "Case sensitive"
+msgstr "Sensible a mayúsculas/minúsculas"
+
+#: dialogs/rc.cpp:209
+msgid "Range"
+msgstr "Rango"
+
+#: dialogs/rc.cpp:210
+msgid ""
+"_: To (Date)\n"
+"To"
+msgstr "Hasta"
+
+#: dialogs/rc.cpp:211
+msgid ""
+"_: From (Date)\n"
+"From"
+msgstr "Desde"
+
+#: dialogs/rc.cpp:213
+msgid "Search this amount"
+msgstr "Buscar este importe"
+
+#: dialogs/rc.cpp:214
+msgid "Search amount in the range"
+msgstr "Buscar cantidad en el rango"
+
+#: dialogs/rc.cpp:215
+msgid ""
+"_: to (amount)\n"
+"to"
+msgstr "a"
+
+#: dialogs/rc.cpp:216
+msgid ""
+"_: from (amount)\n"
+"from"
+msgstr "de"
+
+#: dialogs/rc.cpp:220
+msgid "Select transactions without payees"
+msgstr "Escoger asientos sin beneficiario"
+
+#: dialogs/rc.cpp:221
+msgid "Select all"
+msgstr "Escoger todo"
+
+#: dialogs/rc.cpp:222
+msgid "Select none"
+msgstr "No escoger nada"
+
+#: dialogs/rc.cpp:224
+msgid "Validity"
+msgstr "Validez"
+
+#: dialogs/rc.cpp:226
+msgid "All states"
+msgstr "Todos los estados"
+
+#: dialogs/rc.cpp:230
+msgid "All types"
+msgstr "Todos los tipos"
+
+#: dialogs/rc.cpp:234
+msgid "Any transaction"
+msgstr "Cualquer asiento"
+
+#: dialogs/rc.cpp:235
+msgid "Valid transaction"
+msgstr "Asientos válidos"
+
+#: dialogs/rc.cpp:236
+msgid "Invalid transaction"
+msgstr "Asientos no válidos"
+
+#: dialogs/rc.cpp:237
+msgid "State"
+msgstr "Estado"
+
+#: dialogs/rc.cpp:238
+msgid "Search this number"
+msgstr "Buscar este número"
+
+#: dialogs/rc.cpp:239
+msgid "Search number in range"
+msgstr "Buscar número en el rango"
+
+#: dialogs/rc.cpp:240
+msgid ""
+"_: to (number)\n"
+"to"
+msgstr "a"
+
+#: dialogs/rc.cpp:241
+msgid ""
+"_: from (number)\n"
+"from"
+msgstr "de"
+
+#: dialogs/rc.cpp:242
+msgid "text"
+msgstr "texto"
+
+#: dialogs/rc.cpp:243
+msgid "warning"
+msgstr "advertencia"
+
+#: dialogs/rc.cpp:244
+msgid "Result"
+msgstr "Resultado"
+
+#: dialogs/rc.cpp:254
+msgid "F"
+msgstr "F"
+
+#: dialogs/rc.cpp:257 dialogs/rc.cpp:844
+msgid "&Reset"
+msgstr "&Reiniciar"
+
+#: dialogs/rc.cpp:258
+msgid "&Find"
+msgstr "&Buscar"
+
+#: dialogs/rc.cpp:259
+msgid "GnuCash Import Options"
+msgstr "Opciones de la Importación de GnuCash"
+
+#: dialogs/rc.cpp:260
+msgid "Use 'Help' for more information on these options"
+msgstr "Use 'Ayuda' para más información acerca de estas opciones"
+
+#: dialogs/rc.cpp:261
+msgid "Investment Handling"
+msgstr "Gestión de Inversiones"
+
+#: dialogs/rc.cpp:262
+msgid "One investment account for each stock"
+msgstr "Una cuenta de inversión para cada acción"
+
+#: dialogs/rc.cpp:263
+msgid "One investment account for all stocks"
+msgstr "Una cuenta de inversión para todas las acciones"
+
+#: dialogs/rc.cpp:264
+msgid "Prompt for an investment account for each stock"
+msgstr "Preguntar la cuenta de inversión para cada acción"
+
+#: dialogs/rc.cpp:265
+msgid "Online price quotes"
+msgstr "Cotizaciones Online"
+
+#: dialogs/rc.cpp:266
+msgid "Use Finance::Quote for share price quotes"
+msgstr "Utilice Finanzas::Cotización para la cotización de acciones"
+
+#: dialogs/rc.cpp:267
+msgid "Scheduled Transactions"
+msgstr "Asientos Planificados"
+
+#: dialogs/rc.cpp:268
+msgid "Drop suspect scheduled transactions"
+msgstr "Anular los asientos planificados sospechosos"
+
+#: dialogs/rc.cpp:269
+msgid "Decoding option"
+msgstr "Opción de decodificación"
+
+#: dialogs/rc.cpp:270
+msgid "Decode using"
+msgstr "Decodificar usando"
+
+#: dialogs/rc.cpp:271
+msgid "Transaction Notes option"
+msgstr "Opciones de Notas de los Asientos"
+
+#: dialogs/rc.cpp:272
+msgid "Use transaction notes on non-split transactions"
+msgstr "Utilizar notas de asiento en asientos de partida simple"
+
+#: dialogs/rc.cpp:273
+msgid "Debug Options"
+msgstr "Opciones de Depuración"
+
+#: dialogs/rc.cpp:274
+msgid "General debug data"
+msgstr "Datos generales de depuración"
+
+#: dialogs/rc.cpp:275
+msgid "Display XML data"
+msgstr "Mostrar datos XML"
+
+#: dialogs/rc.cpp:276
+msgid "Anonymize data"
+msgstr "Anonimizar datos"
+
+#: dialogs/rc.cpp:281
+msgid "Online Quotes - Select price source"
+msgstr "Cotizaciones Online - Escoja fuente de los precios"
+
+#: dialogs/rc.cpp:284
+msgid ""
+"This price source is not known to KMyMoney. Please select an option below."
+msgstr ""
+"La fuente de los precios no es conocida por KMyMoney. Escoja una de las "
+"opciones de abajo."
+
+#: dialogs/rc.cpp:285
+msgid "Do not perform online quotes for this investment"
+msgstr "No obtener cotizaciones online para esta inversión"
+
+#: dialogs/rc.cpp:286
+msgid "Select a known KMyMoney source from the list below"
+msgstr "Escoger un origen conocido por KMyMoney de la lista debajo"
+
+#: dialogs/rc.cpp:287
+msgid ""
+"Use the following name for the price source.\n"
+"(Click Help for further information.)"
+msgstr ""
+"Usar este nombre para la fuente del precio.\n"
+"(Pulse en Ayuda para más información.)"
+
+#: dialogs/rc.cpp:288
+msgid "Always use this selection for this price source."
+msgstr "Usar siempre esta elección como fuente de los precios."
+
+#: dialogs/rc.cpp:289
+msgid "QIF Import"
+msgstr "Importar QIF"
+
+#: dialogs/rc.cpp:290
+msgid ""
+"From this dialog you are able to import transactions from a Quicken<b>&trade;"
+"</b> compatible file, (known as a QIF file, because of the extension).<p>\n"
+"\n"
+"Please enter the path to the QIF file or select it by clicking on the Browse "
+"button. Once you have the file's path press the Import button and KMyMoney "
+"will import all the transactions, categories and payees it finds."
+msgstr ""
+"Desde este diálogo puede importar asientos desde un archivo compatible con "
+"Quicken<b>&trade;</b> (conocido como archivo QIF, por la extensión "
+"utilizada).<p>\n"
+"\n"
+"Por favor introduzca la ruta al archivo QIF o escójalo pulsando en el botón "
+"Escoger. Cuando tenga la ruta al archivo, pulse el botón Importar y KMyMoney "
+"importará todos los asientos, categorías y beneficiarios que encuentre."
+
+#: dialogs/rc.cpp:291
+msgid "QIF File to Import:"
+msgstr "Archivo QIF a importar:"
+
+#: dialogs/rc.cpp:292
+msgid "Import options"
+msgstr "Opciones de Importación"
+
+#: dialogs/rc.cpp:293
+msgid "Bank statement"
+msgstr "Extracto bancario"
+
+#: dialogs/rc.cpp:294
+msgid "Other application"
+msgstr "Otra aplicación"
+
+#: dialogs/rc.cpp:295
+msgid ""
+"Select <b>Bank statement</b> turns on automatic category matching which is "
+"turned off in case of <b>Historic data</b>. Use the latter if you import "
+"files from other Personal Finance Management software."
+msgstr ""
+"Seleccionar <b>Extracto bancario</b> activa la conciliación automática de "
+"categorías que se desactiva en caso de <b>Datos históricos</b>. Útilice este "
+"último si importa archivos de otra aplicación de gestión personal de "
+"finanzas."
+
+#: dialogs/rc.cpp:296
+msgid "Source of QIF"
+msgstr "Origen de QIF"
+
+#: dialogs/rc.cpp:302
+msgid "Verify Import"
+msgstr "Verificar Importe"
+
+#: dialogs/rc.cpp:304
+msgid "Ok"
+msgstr "Aceptar"
+
+#: dialogs/rc.cpp:306
+msgid "MyDialog"
+msgstr "MyDialog"
+
+#: dialogs/rc.cpp:310
+msgid "File Information"
+msgstr "Información del Archivo"
+
+#: dialogs/rc.cpp:316
+msgid "Last modified on"
+msgstr "Modificado por última vez el"
+
+#: dialogs/rc.cpp:319
+msgid "Base currency"
+msgstr "Divisa base"
+
+#: dialogs/rc.cpp:322
+msgid "Created on"
+msgstr "Creado el"
+
+#: dialogs/rc.cpp:325
+msgid "Accounts/Categories"
+msgstr "Cuentas/Categorías"
+
+#: dialogs/rc.cpp:328
+msgid "Closed"
+msgstr "Cerrada"
+
+#: dialogs/rc.cpp:331
+msgid "Prices"
+msgstr "Precios"
+
+#: dialogs/rc.cpp:337
+msgid "Splits"
+msgstr "Partidas"
+
+#: dialogs/rc.cpp:338
+msgid "Price Editor"
+msgstr "Editor de Precios"
+
+#: dialogs/rc.cpp:339
+msgid "Show all stored prices"
+msgstr "Muestra todos los precios guardados"
+
+#: dialogs/rc.cpp:343
+msgid "Delete Range..."
+msgstr "Borrar Rango..."
+
+#: dialogs/rc.cpp:346
+msgid "New Account Dialog"
+msgstr "Diálogo para Cuentas Nuevas"
+
+#: dialogs/rc.cpp:349
+msgid "Opening information"
+msgstr "Información de Apertura"
+
+#: dialogs/rc.cpp:350
+msgid "Currency:"
+msgstr "Divisa:"
+
+#: dialogs/rc.cpp:352 dialogs/rc.cpp:793
+msgid "Date:"
+msgstr "Fecha:"
+
+#: dialogs/rc.cpp:353
+msgid "Balance:"
+msgstr "Saldo:"
+
+#: dialogs/rc.cpp:355
+msgid "Last check number:"
+msgstr "Último número de cheque:"
+
+#: dialogs/rc.cpp:356
+msgid "Notes:"
+msgstr "Notas:"
+
+#: dialogs/rc.cpp:357
+msgid "No auto-VAT-assignment"
+msgstr "No autoasignar IVA"
+
+#: dialogs/rc.cpp:358 dialogs/rc.cpp:441
+msgid "Price entry"
+msgstr "Entrada de precio"
+
+#: dialogs/rc.cpp:359
+msgid "Preferred Account"
+msgstr "Cuenta Preferida"
+
+#: dialogs/rc.cpp:363
+msgid "Number:"
+msgstr "Número:"
+
+#: dialogs/rc.cpp:364 dialogs/rc.cpp:395
+msgid "BIC"
+msgstr "Código de Identificación del Banco (BIC)"
+
+#: dialogs/rc.cpp:367
+msgid "Hierarchy"
+msgstr "Jerarquía"
+
+#: dialogs/rc.cpp:368
+msgid "Subaccount"
+msgstr "Subcuenta:"
+
+#: dialogs/rc.cpp:369
+msgid "Limits"
+msgstr "Límites"
+
+#: dialogs/rc.cpp:370
+msgid ""
+"This page allows to setup certain limits. KMyMoney will warn you when the "
+"account balance reaches a limit."
+msgstr ""
+"Esta página permite configurar ciertos límites. KMyMoney le informará cuando "
+"el saldo de la cuenta alcance un límite."
+
+#: dialogs/rc.cpp:372
+msgid "Absolute limit"
+msgstr "Límite absoluto"
+
+#: dialogs/rc.cpp:373
+msgid "Maximum credit limit"
+msgstr "Máximo límite de crédito"
+
+#: dialogs/rc.cpp:374
+msgid "Minimum balance"
+msgstr "Saldo mínimo"
+
+#: dialogs/rc.cpp:375
+msgid "Early warning"
+msgstr "Advertencia temprana"
+
+#: dialogs/rc.cpp:377
+msgid "VAT details"
+msgstr "Detalles del IVA"
+
+#: dialogs/rc.cpp:378
+msgid "VAT category"
+msgstr "Categoria del IVA"
+
+#: dialogs/rc.cpp:379
+msgid "VAT percentage"
+msgstr "Porcentaje del IVA"
+
+#: dialogs/rc.cpp:380
+msgid "Enable auto VAT assignment"
+msgstr "Permitir autoasignar IVA"
+
+#: dialogs/rc.cpp:381
+msgid "Amount entered"
+msgstr "Importe introducido"
+
+#: dialogs/rc.cpp:382
+msgid "Gross amount"
+msgstr "Importe Bruto"
+
+#: dialogs/rc.cpp:383
+msgid "Net amount"
+msgstr "Importe Neto"
+
+#: dialogs/rc.cpp:384
+msgid "Include on Tax Reports"
+msgstr "Incluir en Informes de Impuestos"
+
+#: dialogs/rc.cpp:387
+msgid "New Institution Dialog"
+msgstr "Diálogo de Nueva Organización"
+
+#: dialogs/rc.cpp:388
+msgid "Institution Details"
+msgstr "Detalles de la Organización"
+
+#: dialogs/rc.cpp:390
+msgid "City:"
+msgstr "Ciudad:"
+
+#: dialogs/rc.cpp:394
+msgid "Routing Number:"
+msgstr "Número de Ruta:"
+
+#: dialogs/rc.cpp:398
+msgid "New Budget"
+msgstr "Nuevo Presupuesto"
+
+#: dialogs/rc.cpp:403
+msgid "New Equity"
+msgstr "Nuevo Patrimonio"
+
+#: dialogs/rc.cpp:406 dialogs/rc.cpp:407
+msgid "Trading Symbol of the stock or mutual fund, not required."
+msgstr "Símbolo comercial de la acción o fondo de inversión. (no requerido)"
+
+#: dialogs/rc.cpp:414 dialogs/rc.cpp:415
+msgid "Name of the company, or mutual fund."
+msgstr "Nombre de la compañia o fondo de inversión"
+
+#: dialogs/rc.cpp:418
+msgid "New File Dialog"
+msgstr "Diálogo Nuevo Archivo"
+
+#: dialogs/rc.cpp:419
+msgid ""
+"Use this dialog to enter personal information about yourself.\n"
+"\n"
+"All information is optional and is provided to personalize\n"
+"your KMyMoney file."
+msgstr ""
+"Use este diálogo para introducir su información persoal.\n"
+"\n"
+"Toda la información es opcional y sirve para personalizar\n"
+" su archivo de KMyMoney."
+
+#: dialogs/rc.cpp:430
+msgid "New Investment wizard"
+msgstr "Asistente para Nuevas Inversiones"
+
+#: dialogs/rc.cpp:431
+msgid "Investment Type"
+msgstr "Tipo de Inversión"
+
+#: dialogs/rc.cpp:432
+msgid "This wizard allows you to create a new investment."
+msgstr "Este asistente le permite crear una nueva inversión."
+
+#: dialogs/rc.cpp:433
+msgid ""
+"The first step in this process requires to select the type of investment. "
+"The following steps collect more details about the investment from you."
+msgstr ""
+"El primer paso del proceso es seleccionar el tipo de inversión. Los "
+"siguientes pasos recogen más detalles sobre la inversión."
+
+#: dialogs/rc.cpp:434
+msgid "Type of investment"
+msgstr "Tipo de inversión"
+
+#: dialogs/rc.cpp:438
+msgid "Investment details"
+msgstr "Detalles de la Inversión"
+
+#: dialogs/rc.cpp:439
+msgid ""
+"Enter the details below and click <b>Next</b> to continue entering the "
+"online update details."
+msgstr ""
+"Introduzca los detalles y pulse <b>Siguiente</b> para continuar con los "
+"detalles de la actualización online."
+
+#: dialogs/rc.cpp:442 dialogs/rc.cpp:728
+msgid "Fraction"
+msgstr "Fracción"
+
+#: dialogs/rc.cpp:443
+msgid "Trading Currency"
+msgstr "Divisa de mercado"
+
+#: dialogs/rc.cpp:444
+msgid "Full name"
+msgstr "Nombre completo"
+
+#: dialogs/rc.cpp:445
+msgid "AMEX"
+msgstr "AMEX"
+
+#: dialogs/rc.cpp:446
+msgid "EUREX"
+msgstr "EUREX"
+
+#: dialogs/rc.cpp:447
+msgid "FUND"
+msgstr "FUND"
+
+#: dialogs/rc.cpp:448
+msgid "NASDAQ"
+msgstr "NASDAQ"
+
+#: dialogs/rc.cpp:449
+msgid "NYSE"
+msgstr "NYSE"
+
+#: dialogs/rc.cpp:450
+msgid "XETRA"
+msgstr "XETRA"
+
+#: dialogs/rc.cpp:451
+msgid "Trading symbol"
+msgstr "Símbolo Comercial"
+
+#: dialogs/rc.cpp:452
+msgid "Identification"
+msgstr "Identificación"
+
+#: dialogs/rc.cpp:453
+msgid "Enter the ticker symbol (e.g. RHAT)."
+msgstr "Introduzca el símbolo de la bolsa de valores (por ej. RHAT)"
+
+#: dialogs/rc.cpp:454
+msgid "Enter the CUSIP/ISIN/WKN identification number here"
+msgstr "Introduzca aquí el número de identificación CUSIP/ISIN/WKN"
+
+#: dialogs/rc.cpp:455
+msgid "Trading market"
+msgstr "Mercado de valores"
+
+#: dialogs/rc.cpp:456
+msgid "Online Update"
+msgstr "Actualización online"
+
+#: dialogs/rc.cpp:457
+msgid ""
+"Select an online source and click <b>Finish</b> to store the investment "
+"data. If you don't want to use online updates, just leave the data as is."
+msgstr ""
+"Elija un origen online de datos y pulse <b>Finalizar</b> para guardar la "
+"inversión. Si no desea usar actualizaciones online, déjelo como está."
+
+#: dialogs/rc.cpp:458
+msgid "Use Finance::Quote"
+msgstr "Utilice Finanzas::Cotizaciones"
+
+#: dialogs/rc.cpp:460
+msgid "Factor"
+msgstr "Fracción"
+
+#: dialogs/rc.cpp:461
+msgid "New Loan Wizard"
+msgstr "Asistente para creación de Préstamos"
+
+#: dialogs/rc.cpp:462
+msgid "New Loan Account Wizard"
+msgstr "Asistente para nueva cuenta tipo Préstamo"
+
+#: dialogs/rc.cpp:463
+msgid ""
+"\n"
+"Welcome to the New Loan Account Wizard which will guide you through the "
+"creation of a new loan e.g. for your home, your car or any other loan that "
+"you pay or gain interest for.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Bienvenido al Asistente para Nuevas Cuentas tipo Préstamo, que le guiará a "
+"través de la creación de un nuevo préstamo p. ej. para su casa, coche o "
+"cualquier otro préstamo del que gane o pague intereses.\n"
+"\n"
+"Asegúrese de tener la información relevante a mano. En general, está en el "
+"contrato o en el último extracto de cuenta."
+
+#: dialogs/rc.cpp:464
+msgid "Edit Loan Account Wizard"
+msgstr "Asistente para la Edición de Cuentas tipo Préstamo"
+
+#: dialogs/rc.cpp:465
+msgid ""
+"\n"
+"Welcome to the Edit Loan Account Wizard. Please use this wizard to modify "
+"information about your loan account.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Bienvenido al Asistente para Edición de cuentas tipo Préstamo.Use este "
+"asistente para modificar información acerca de su préstamo.\n"
+"\n"
+"Asegúrese de tener la información relevante a mano. En general, está en el "
+"contrato o en el último extracto de cuenta."
+
+#: dialogs/rc.cpp:467
+msgid ""
+"\n"
+"In the first step, KMyMoney will ask you some general information about the "
+"loan account to be created."
+msgstr ""
+"\n"
+"En primer lugar, KMyMoney le preguntará algunos datos generales acerca del "
+"préstamo a crear."
+
+#: dialogs/rc.cpp:468 dialogs/rc.cpp:522 dialogs/rc.cpp:610
+msgid "1. General Information"
+msgstr "1. Información General"
+
+#: dialogs/rc.cpp:469
+msgid ""
+"\n"
+"2. Calculate Loan\n"
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"2. Calcular Préstamo\n"
+"\n"
+"3. Pagos"
+
+#: dialogs/rc.cpp:470
+msgid "Edit selection"
+msgstr "Editar Selección"
+
+#: dialogs/rc.cpp:471
+msgid ""
+"\n"
+"Please select, which data of the loan you want to modify."
+msgstr ""
+"\n"
+"Por favor, elija qué datos del préstamo desea modificar."
+
+#: dialogs/rc.cpp:472
+msgid "Modify the interest rate"
+msgstr "Modificar el tipo de interés"
+
+#: dialogs/rc.cpp:473
+msgid "Modify additional fees"
+msgstr "Modificar tasas adicionales"
+
+#: dialogs/rc.cpp:474
+msgid "Modify other loan information"
+msgstr "Modificar otra información del préstamo"
+
+#: dialogs/rc.cpp:475
+msgid "Effective date"
+msgstr "Fecha de efecto"
+
+#: dialogs/rc.cpp:478
+msgid "When should the changes become active?"
+msgstr "¿Cuando deberían hacerse efectivos los cambios?"
+
+#: dialogs/rc.cpp:479
+msgid "Lending or borrowing money"
+msgstr "Prestando o pidiendo dinero"
+
+#: dialogs/rc.cpp:480
+msgid ""
+"\n"
+"Do you borrow or lend money?"
+msgstr ""
+"\n"
+"¿Pide o presta dinero?"
+
+#: dialogs/rc.cpp:483
+msgid "Name of the loan"
+msgstr "Nombre del préstamo"
+
+#: dialogs/rc.cpp:484
+msgid ""
+"\n"
+"How do you want to call this loan? Examples for names are 'car loan', "
+"'school loan', 'home owner loan'."
+msgstr ""
+"\n"
+"¿Como desea llamar este préstamo? Ejemplos de nombres son 'préstamo del "
+"coche', 'préstamo para estudios', 'hipoteca'."
+
+#: dialogs/rc.cpp:486
+msgid "TextLabel6"
+msgstr "TextLabel6"
+
+#: dialogs/rc.cpp:487
+msgid "TextLabel7"
+msgstr "TextLabel7"
+
+#: dialogs/rc.cpp:488
+msgid "Type of interest"
+msgstr "Tipo de interés"
+
+#: dialogs/rc.cpp:489
+msgid ""
+"\n"
+"Is the interest of this loan fixed over a period of time or is it adapted "
+"from time to time? If the interest rate changes during the amortization "
+"phase of the loan you should choose the option 'variable interest rate'."
+msgstr ""
+"\n"
+"Este préstamo ¿es de interés fijo o variable? Si la tasa de interés cambia "
+"durante la fase de amortización debe escoger la opción 'interés de tipo "
+"variable'."
+
+#: dialogs/rc.cpp:490
+msgid "Fixed interest rate"
+msgstr "Interés de tipo fijo"
+
+#: dialogs/rc.cpp:491
+msgid "Variable interest rate"
+msgstr "Interés de tipo variable"
+
+#: dialogs/rc.cpp:492
+msgid "Payments?"
+msgstr "¿Pagos?"
+
+#: dialogs/rc.cpp:493
+msgid ""
+"\n"
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?"
+msgstr ""
+"\n"
+"¿Se han hecho pagos de este préstamo antes de su introducción en KMyMoney o "
+"no?"
+
+#: dialogs/rc.cpp:494
+msgid "No, no payments were made yet."
+msgstr "No, aún no se han hecho pagos"
+
+#: dialogs/rc.cpp:495
+msgid "Yes, payments were made."
+msgstr "Si, se han hecho pagos"
+
+#: dialogs/rc.cpp:496
+msgid ""
+"Note: Payments made to obtain the loan (e.g. Dissagio) are not considered as "
+"payments in this context."
+msgstr ""
+"Nota: Los pagos hechos para obtener el préstamo (p. ej. \"Comisiones de "
+"apertura\") no son considerados como pagos en este contexto."
+
+#: dialogs/rc.cpp:497
+msgid "Recording payments?"
+msgstr "¿Registrando pagos?"
+
+#: dialogs/rc.cpp:498
+msgid ""
+"\n"
+"Do you want to record all payments of this loan with KMyMoney?"
+msgstr ""
+"\n"
+"¿Quiere usted registrar todos los pagos de este préstamo con KMyMoney?"
+
+#: dialogs/rc.cpp:499
+msgid "Yes, record all payments."
+msgstr "Si, registre todos los pagos."
+
+#: dialogs/rc.cpp:500
+msgid "No, only record payments since the beginning of this year."
+msgstr "No, registre solamente los pagos desde el inicio de este año."
+
+#: dialogs/rc.cpp:501
+msgid "Date of next interest change"
+msgstr "Fecha del próximo cambio de interés"
+
+#: dialogs/rc.cpp:502
+msgid ""
+"\n"
+"Select the date when the interest rate for this loan will be modified and "
+"the frequency of the future changes."
+msgstr ""
+"\n"
+"Escoja la fecha en que se modificará la tasa de este préstamo y la "
+"frecuencia de cambios futuros."
+
+#: dialogs/rc.cpp:503
+msgid "Next interest change on"
+msgstr "Los próximos intereses cambian el"
+
+#: dialogs/rc.cpp:504
+msgid "Time until next change"
+msgstr "Tiempo hasta el próximo cambio"
+
+#: dialogs/rc.cpp:506 dialogs/rc.cpp:571
+msgid ""
+"\n"
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"\n"
+"Por favor introduzca la cantidad que paga de interés y amortización o déjela "
+"en blanco para calcularla."
+
+#: dialogs/rc.cpp:507
+msgid "Current amount"
+msgstr "Cantidad Actual"
+
+#: dialogs/rc.cpp:510
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the amount for principal and interest then enter "
+"it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"KMyMoney calcula la nueva tasa de interés o el importe de amortización e "
+"interés. Si conoce el importe de amortización e intereses entonces "
+"introdúzcalo aquí.\n"
+"\n"
+"Si KMyMoney debería calcular este valor, deje el campo en blanco."
+
+#: dialogs/rc.cpp:512 dialogs/rc.cpp:545
+msgid ""
+"\n"
+"Please enter the interest rate or leave the field empty to calculate it."
+msgstr ""
+"\n"
+"Introduzca la tasa de interés o deje el campo en blanco para calcularlo."
+
+#: dialogs/rc.cpp:514
+msgid "Current rate"
+msgstr "Tasa actual"
+
+#: dialogs/rc.cpp:516
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the interest rate then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"KMyMoney puede calcular tanto la nueva tasa de interés como el importe de "
+"amortización e intereses. Si conoce la tasa de interés, entonces "
+"introdúzcala aquí.\n"
+"\n"
+"Si KMyMoney debe calcularla, deje el campo en blanco"
+
+#: dialogs/rc.cpp:517
+msgid "Date of first payment"
+msgstr "Fecha del primer pago"
+
+#: dialogs/rc.cpp:520
+msgid "Calculate Loan"
+msgstr "Calcular Préstamo"
+
+#: dialogs/rc.cpp:521
+msgid ""
+"\n"
+"You have successfully entered the general information about your loan. Next, "
+"KMyMoney needs some information about the calculation of the loan."
+msgstr ""
+"\n"
+"Ha Introducido satisfactoriamente la información general de su préstamo. A "
+"continuación, KMyMoney necesita alguna información acerca del cálculo del "
+"préstamo."
+
+#: dialogs/rc.cpp:523 dialogs/rc.cpp:611
+msgid ""
+"\n"
+"2. Calculate Loan"
+msgstr ""
+"\n"
+"2. Calcular Préstamo"
+
+#: dialogs/rc.cpp:524 dialogs/rc.cpp:612
+msgid ""
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"3. Pagos"
+
+#: dialogs/rc.cpp:526
+msgid ""
+"\n"
+"How often will there be payments made to this loan?"
+msgstr ""
+"\n"
+"¿Con qué frecuencia se harán pagos a este préstamo?"
+
+#: dialogs/rc.cpp:527
+msgid "Interest calculation"
+msgstr "Cálculo de intereses"
+
+#: dialogs/rc.cpp:528
+msgid ""
+"\n"
+"When does the actual interest rate get calculated?"
+msgstr ""
+"\n"
+"¿Cuándo se calcula la tasa real de interés?"
+
+#: dialogs/rc.cpp:529
+msgid "When the payment is received."
+msgstr "Cuándo se recibe el pago"
+
+#: dialogs/rc.cpp:530
+msgid "When the payment is due."
+msgstr "Cuándo vence el pago"
+
+#: dialogs/rc.cpp:534 dialogs/rc.cpp:547 dialogs/rc.cpp:560 dialogs/rc.cpp:573
+#: dialogs/rc.cpp:586 dialogs/rc.cpp:598 dialogs/rc.cpp:679
+msgid "Loan amount:"
+msgstr "Importe del préstamo:"
+
+#: dialogs/rc.cpp:535 dialogs/rc.cpp:548 dialogs/rc.cpp:561 dialogs/rc.cpp:574
+#: dialogs/rc.cpp:587 dialogs/rc.cpp:599 dialogs/rc.cpp:633 dialogs/rc.cpp:671
+msgid "Interest rate:"
+msgstr "Tasa de interés:"
+
+#: dialogs/rc.cpp:536 dialogs/rc.cpp:549 dialogs/rc.cpp:562 dialogs/rc.cpp:575
+#: dialogs/rc.cpp:588 dialogs/rc.cpp:600 dialogs/rc.cpp:669
+msgid "Term:"
+msgstr "Plazo:"
+
+#: dialogs/rc.cpp:537 dialogs/rc.cpp:550 dialogs/rc.cpp:563 dialogs/rc.cpp:576
+#: dialogs/rc.cpp:589 dialogs/rc.cpp:601 dialogs/rc.cpp:622 dialogs/rc.cpp:630
+#: dialogs/rc.cpp:677
+msgid "Principal + Interest:"
+msgstr "Amortización + Intereses:"
+
+#: dialogs/rc.cpp:538 dialogs/rc.cpp:551 dialogs/rc.cpp:564 dialogs/rc.cpp:577
+#: dialogs/rc.cpp:583 dialogs/rc.cpp:585 dialogs/rc.cpp:590 dialogs/rc.cpp:602
+msgid "Final amortization payment"
+msgstr "Pago final:"
+
+#: dialogs/rc.cpp:557
+msgid "Duration"
+msgstr "Duración"
+
+#: dialogs/rc.cpp:558
+msgid ""
+"\n"
+"Please enter the term of this loan or leave the field empty to calculate it. "
+"The term is the time that is required to fully repay the loan. This time "
+"might be different from the time your loan contract is signed for."
+msgstr ""
+"\n"
+"Por favor, introduzca el plazo de este préstamo o deje el campo vacío para "
+"calcularlo. El plazo es el tiempo requerido para devolver por completo el "
+"préstamo. Este tiempo puede variar del tiempo por el que firme el contrato "
+"de préstamo."
+
+#: dialogs/rc.cpp:584
+msgid ""
+"\n"
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"\n"
+"Introduzca la cantidad del pago final de la amortización o deje el campo "
+"vacío para calcularlo."
+
+#: dialogs/rc.cpp:596
+msgid "Calculation Overview"
+msgstr "Resumen del cálculo"
+
+#: dialogs/rc.cpp:597
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown in the overview below. You can "
+"accept these values by selecting \"Next\" or change them by choosing \"Back"
+"\" to return to the input field for the information you want to change."
+msgstr ""
+"\n"
+"KMyMoney calculó el préstamo como se muestra en el resumen de abajo. Puede "
+"aceptar estos valores escogiendo \"Siguiente\" o cambiarlos escogiendo "
+"\"Atrás\" para volver al campo de entrada de la información que desee "
+"cambiar."
+
+#: dialogs/rc.cpp:609
+msgid ""
+"\n"
+"In the following steps, KMyMoney supports you in setting up categories and "
+"schedules for your loan payments."
+msgstr ""
+"\n"
+"En los siguientes pasos, KMyMoney lo ayudará a configurar las categorías y "
+"asientos programados para los pagos de su préstamo."
+
+#: dialogs/rc.cpp:614
+msgid ""
+"\n"
+"Please select the category you want to assign the interest payments to or "
+"create a new category."
+msgstr ""
+"\n"
+"Escoja la categoría que desee asignar a los pagos de los intereses o cree "
+"una nueva categoría."
+
+#: dialogs/rc.cpp:615
+msgid "Additional Fees"
+msgstr "Cargos Adicionales"
+
+#: dialogs/rc.cpp:616
+msgid ""
+"\n"
+"If your regular payment contains any additional fees, click on the button "
+"\"Additional fees\" to enter them."
+msgstr ""
+"\n"
+"Si su pago periódico contiene cargos adicionales, pulse el botón \"Cargos "
+"Adicionales\" para introducirlos."
+
+#: dialogs/rc.cpp:617
+msgid "= periodical payment:"
+msgstr "= Pago periódico:"
+
+#: dialogs/rc.cpp:623
+msgid ""
+"If no additional fees are included in your periodical payment or you have "
+"entered all such fees, then click on \"Next\"."
+msgstr ""
+"Si no se incluyen cargos adicionales en sus pagos periódicos o ya los "
+"introdujo, pulse en \"Seguir\"."
+
+#: dialogs/rc.cpp:625
+msgid ""
+"KMyMoney will create a schedule for this payment and reminds you whenever a "
+"payment must be made.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"KMyMoney creará un plan de pagos, y le avisará cando deba hacer uno.<p>\n"
+"Si escogió registrar todos los pagos, ya ha proporcionado esta fecha. Si "
+"escogió registrar solamente los pagos de este año, entonces la <b>Fecha de "
+"vencimiento del primer pago<b> es la fecha del primer pago realizado este "
+"año."
+
+#: dialogs/rc.cpp:626
+msgid "First payment due on:"
+msgstr "El primer pago vence el:"
+
+#: dialogs/rc.cpp:627
+msgid "Make payment from/to:"
+msgstr "Realizar pago de/a:"
+
+#: dialogs/rc.cpp:629
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown below. If you want to accept these "
+"values use the \"Finish\" button to update your account, otherwise use the "
+"\"Back\" button to modify your settings."
+msgstr ""
+"\n"
+"KMyMoney calculó el préstamo como se muestra abajo. Si quiere aceptar estos "
+"valores use el botón \"Finalizar\" para actualizar su cuenta, si no es el "
+"caso use el botón \"Atrás\" para modificar los datos."
+
+#: dialogs/rc.cpp:631
+msgid "Additional fees:"
+msgstr "Cargos adicionales:"
+
+#: dialogs/rc.cpp:632
+msgid "Total payment:"
+msgstr "Pago Total:"
+
+#: dialogs/rc.cpp:634
+msgid "Valid from:"
+msgstr "Válido desde:"
+
+#: dialogs/rc.cpp:635
+msgid "Affected payments:"
+msgstr "Pagos afectados:"
+
+#: dialogs/rc.cpp:645
+msgid "Press this to create a new asset account"
+msgstr "Pulse aquí para crear una nueva cuenta de activos"
+
+#: dialogs/rc.cpp:648
+msgid ""
+"\n"
+"This page summarizes the data you entered. If you need to modify anything, "
+"please use the \"Back\" button to go to respective page. Otherwise use the "
+"\"Finish\" button to create the account."
+msgstr ""
+"\n"
+"Esta página resume los datos que introdujo. Si necesita modificar algo use "
+"el botón \"Atrás\" para ir a la página apropiada. En otro caso use el botón "
+"\"Finalizar\" para crear la cuenta."
+
+#: dialogs/rc.cpp:650
+msgid "Payee:"
+msgstr "Beneficiario:"
+
+#: dialogs/rc.cpp:653
+msgid "First payment:"
+msgstr "Primer pago:"
+
+#: dialogs/rc.cpp:655
+msgid "Amount is:"
+msgstr "Cantidad:"
+
+#: dialogs/rc.cpp:656
+msgid "Loan calculation"
+msgstr "Cálculo de préstamos"
+
+#: dialogs/rc.cpp:660
+msgid "Periodic Payment:"
+msgstr "Pago periódico:"
+
+#: dialogs/rc.cpp:661
+msgid "Additional Fees:"
+msgstr "Cargos adicionales:"
+
+#: dialogs/rc.cpp:662
+msgid "Interest category:"
+msgstr "Categoría de los intereses:"
+
+#: dialogs/rc.cpp:663
+msgid "Payment from:"
+msgstr "Pago desde:"
+
+#: dialogs/rc.cpp:666
+msgid "Next due date:"
+msgstr "Próxima fecha de vencimiento:"
+
+#: dialogs/rc.cpp:673
+msgid "Final Payment:"
+msgstr "Pago Final:"
+
+#: dialogs/rc.cpp:675
+msgid "Interest is due:"
+msgstr "Vencimiento de los intereses:"
+
+#: dialogs/rc.cpp:680
+msgid "Payment frequency:"
+msgstr "Frecuencia de pago:"
+
+#: dialogs/rc.cpp:682
+msgid "Online Quote Configuration"
+msgstr "Configuración de Cotizaciones Online"
+
+#: dialogs/rc.cpp:687
+msgid "Perl Location:"
+msgstr "Localización de Perl:"
+
+#: dialogs/rc.cpp:688
+msgid "Script:"
+msgstr "Guión:"
+
+#: dialogs/rc.cpp:690
+msgid "Reassign payees"
+msgstr "Reasignar pagadores"
+
+#: dialogs/rc.cpp:691
+msgid ""
+"The transactions associated with the selected payees need to be re-assigned "
+"to a different payee before the selected payees can be deleted. Please "
+"select a payee from the list below."
+msgstr ""
+"Los asientos asociados con los pagadores seleccionados deben ser reasignados "
+"a un pagador diferente antes que los pagadores seleccionados puedan ser "
+"eliminados. Por favor seleccione un pagador de la lista debajo."
+
+#: dialogs/rc.cpp:692
+msgid "Available payees:"
+msgstr "Pagadores disponibles:"
+
+#: dialogs/rc.cpp:693
+msgid "Assign deleted names to the above selected payee's matching list"
+msgstr ""
+"Asignar nombres borrados a la lista de beneficiarios coincidentes más arriba"
+
+#: dialogs/rc.cpp:696
+msgid "PluginDlg"
+msgstr "PluginDlg"
+
+#: dialogs/rc.cpp:697
+msgid "PlugIn"
+msgstr "PlugIn"
+
+#: dialogs/rc.cpp:698 widgets/transaction.cpp:1071
+#: widgets/transaction.cpp:1658
+msgid "Status"
+msgstr "Estado"
+
+#: dialogs/rc.cpp:699
+msgid "Feature"
+msgstr "Característica"
+
+#: dialogs/rc.cpp:703
+msgid "Reconciliation Dialog"
+msgstr "Asistente para Reconciliación"
+
+#: dialogs/rc.cpp:704
+msgid ""
+"This dialog will assist in helping you to balance your account.\n"
+"\n"
+"Click on an appropriate transaction within one of the two list views to mark "
+"it as reconciled. To create a transaction or edit\n"
+"a transaction you can return to the register by clicking on the Edit "
+"Transactions button.\n"
+"\n"
+"Your account is balanced when the Difference is Zero. Click on the Finish "
+"button to save the reconciled transactions."
+msgstr ""
+"Este diálogo le ayudará a conciliar su cuenta.\n"
+"\n"
+"Pulse sobre un asiento adecuado de una de las dos listas para marcarlo como "
+"reconciliado. Para crear o editar un asiento \n"
+"puede volver al registro pulsando el botón \"Editar Asiento.\"\n"
+"\n"
+"Su cuenta está ajustada cuando la Diferencia es cero. Pulse el botón "
+"Finalizar para guardar los asientos reconciliados."
+
+#: dialogs/rc.cpp:705
+msgid "Withdrawals"
+msgstr "Retiros"
+
+#: dialogs/rc.cpp:707 dialogs/rc.cpp:708 dialogs/rc.cpp:822
+msgid "$"
+msgstr "$"
+
+#: dialogs/rc.cpp:710
+msgid "Previous Balance:"
+msgstr "Saldo Anterior:"
+
+#: dialogs/rc.cpp:711 dialogs/rc.cpp:713 dialogs/rc.cpp:715 dialogs/rc.cpp:717
+#: dialogs/rc.cpp:820
+msgid "0"
+msgstr "0"
+
+#: dialogs/rc.cpp:712
+msgid "Ending Balance:"
+msgstr "Saldo Final:"
+
+#: dialogs/rc.cpp:714
+msgid "Cleared Balance:"
+msgstr "Saldo Reconciliado:"
+
+#: dialogs/rc.cpp:716
+msgid "Difference:"
+msgstr "Diferencia:"
+
+#: dialogs/rc.cpp:718
+msgid "Edit Transactions..."
+msgstr "Editar Asientos..."
+
+#: dialogs/rc.cpp:721
+msgid "Security List Editor"
+msgstr "Editor del Listado de Valores Bursátiles"
+
+#: dialogs/rc.cpp:726
+msgid "Market"
+msgstr "Mercado"
+
+#: dialogs/rc.cpp:729
+msgid "Cash Fraction"
+msgstr "Fracción monetária"
+
+#: dialogs/rc.cpp:730
+msgid "Add..."
+msgstr "Añadir..."
+
+#: dialogs/rc.cpp:732 widgets/kmymoneypriceview.cpp:157
+msgid "Delete..."
+msgstr "Borrar..."
+
+#: dialogs/rc.cpp:733
+msgid "Show national currencies"
+msgstr "Mostrar divisas nacionales"
+
+#: dialogs/rc.cpp:735
+msgid "KMyMoney - Select Database"
+msgstr "KMyMoney - Seleccione Base de Datos"
+
+#: dialogs/rc.cpp:736
+msgid "CAUTION!"
+msgstr "PRECAUCIÓN!"
+
+#: dialogs/rc.cpp:737
+msgid ""
+"<font color=\"#ff2727\">This software is still in an experimental stage, and "
+"there are still some known response time problems. Please be patient; we are "
+"working on them.\n"
+"As always, please make sure you have adequate backups of your data.</font>"
+msgstr ""
+"<font color=\"#ff2727\">Esta aplicación está todavía en una etapa "
+"experimental y tiene todavía problemas en el tiempo de respuesta. Por favor "
+"sea paciente. Estamos trabajando en resolverlos. Como siempre, asegúrese de "
+"tener un resguardo adecuado de sus datos.</font>"
+
+#: dialogs/rc.cpp:738
+msgid "Database Type"
+msgstr "Tipo de Base de Datos"
+
+#: dialogs/rc.cpp:739
+msgid "Database Name"
+msgstr "Nombre de Base de Datos"
+
+#: dialogs/rc.cpp:740
+msgid "Host Name"
+msgstr "Nombre del Servidor"
+
+#: dialogs/rc.cpp:741
+msgid "User Name"
+msgstr "Nombre de Usuario"
+
+#: dialogs/rc.cpp:743
+msgid "Preload &all data"
+msgstr "Prec&argar todos los datos"
+
+#: dialogs/rc.cpp:745
+msgid "&Generate SQL"
+msgstr "&Generar SQL"
+
+#: dialogs/rc.cpp:747
+msgid "Ca&ncel"
+msgstr "Ca&ncelar"
+
+#: dialogs/rc.cpp:762 widgets/rc.cpp:172
+msgid "Sort options"
+msgstr "Opciones de ordenamiento"
+
+#: dialogs/rc.cpp:763
+msgid "Use default"
+msgstr "Usar valor predeterminado"
+
+#: dialogs/rc.cpp:767
+msgid "Correct splits"
+msgstr "Corregir partidas"
+
+#: dialogs/rc.cpp:769
+msgid "How do you want to proceed?"
+msgstr "¿Cómo desea proceder?"
+
+#: dialogs/rc.cpp:770
+msgid "Continue to edit splits"
+msgstr "Continuar editando partidas"
+
+#: dialogs/rc.cpp:771
+#, c-format
+msgid "Change total amount of transaction to %1."
+msgstr "Cambiar el importe total del asiento a %1."
+
+#: dialogs/rc.cpp:772
+msgid "Distribute difference of %1 among all splits."
+msgstr "Reparte la diferencia de %1 entre todas las partidas."
+
+#: dialogs/rc.cpp:773
+msgid "Leave %1 unassigned."
+msgstr "Deja %1 sin asignar."
+
+#: dialogs/rc.cpp:776
+msgid "Split transaction"
+msgstr "Detallar asiento"
+
+#: dialogs/rc.cpp:777
+msgid "<b>11,00<b>"
+msgstr "<b>11,00<b>"
+
+#: dialogs/rc.cpp:778
+msgid "<b>111,00<b>"
+msgstr "<b>111,00<b>"
+
+#: dialogs/rc.cpp:779
+msgid "Unassigned"
+msgstr "Sin asignar"
+
+#: dialogs/rc.cpp:780
+msgid "Sum of splits"
+msgstr "Suma de las partidas"
+
+#: dialogs/rc.cpp:781
+msgid "100,00"
+msgstr "100,00"
+
+#: dialogs/rc.cpp:782
+msgid "Transaction amount"
+msgstr "Importe del asiento"
+
+#: dialogs/rc.cpp:783
+msgid "Merge"
+msgstr "Combinar"
+
+#: dialogs/rc.cpp:784
+msgid "Merges splits with the same category to one split"
+msgstr "Combina todas las partidas de la misma categoría en una única partida"
+
+#: dialogs/rc.cpp:785
+msgid ""
+"In case you have multiple split entries to the same category and you like to "
+"keep them as a single split, press this button. The amount for identical "
+"categories will be added and stored in a single split for that category."
+msgstr ""
+"En caso que tenga múltiples partidas de la misma categoría y desee "
+"guardarlas como una única partida, presione este botón. El importe será "
+"sumado y guardado en una única partida para esa categoría."
+
+#: dialogs/rc.cpp:786
+msgid "Clear &Zero"
+msgstr "Borrar las partidas en cero"
+
+#: dialogs/rc.cpp:787
+msgid "Removes all splits that have a value of zero."
+msgstr "Elimina todas las partidas con valor en cero."
+
+#: dialogs/rc.cpp:791
+msgid "New price entry"
+msgstr "Nueva entrada de precio"
+
+#: dialogs/rc.cpp:799
+msgid "Void mark"
+msgstr "Marca de vacío"
+
+#: dialogs/rc.cpp:800
+msgid "Opening Balance text"
+msgstr "Texto del Saldo de Apertura"
+
+#: dialogs/rc.cpp:801
+msgid "Type field text"
+msgstr "Escriba el campo de texto"
+
+#: dialogs/rc.cpp:802
+msgid "Account delimiter"
+msgstr "Separador de cuentas"
+
+#: dialogs/rc.cpp:804
+msgid "Attempt to match similar transactions"
+msgstr "Intentar conciliar asientos similares"
+
+#: dialogs/rc.cpp:806 dialogs/rc.cpp:808
+msgid "The format of the dates in the QIF file."
+msgstr "Formatos de las fechas en el archivo QIF."
+
+#: dialogs/rc.cpp:809 dialogs/rc.cpp:811
+msgid ""
+"If a QIF file contains date entries with years represented with two digits "
+"then either an apostrophe or a slash may be used to delimit the year in the "
+"dates for certain centuries. This enables 1905 to be distinguished from "
+"2005. Specify here which range of years will have year delimited by an "
+"apostrophe (eg. for Quicken this is usually 1900-1949)."
+msgstr ""
+"Si un archivo QIF contiene asientos con el año representado por dos dígitos "
+"entonces puede usarse un apóstrofe o una barra para delimitarlo en ciertos "
+"siglos. Esto permite distinguir 1095 de 2005. Especifique aquí qué rango de "
+"años estarán delimitados con un apóstrofe (en Quicken esto por lo general "
+"es 1900-1949)."
+
+#: dialogs/rc.cpp:810
+msgid "Apostrophe Handling"
+msgstr "Gestión de Apostrofe"
+
+#: dialogs/rc.cpp:812
+msgid "Amounts"
+msgstr "Importes"
+
+#: dialogs/rc.cpp:813
+msgid "Field"
+msgstr "Campo"
+
+#: dialogs/rc.cpp:814
+msgid "QIF-Record"
+msgstr "Registro QIF"
+
+#: dialogs/rc.cpp:815 dialogs/rc.cpp:833
+msgid "Decimal Symbol"
+msgstr "Símbolo Decimal"
+
+#: dialogs/rc.cpp:816
+msgid "Thousand Delimiter"
+msgstr "Delimitador de miles"
+
+#: dialogs/rc.cpp:817
+msgid "SortColumnInvisible"
+msgstr "SortColumnInvisible"
+
+#: dialogs/rc.cpp:819
+msgid "T"
+msgstr "T"
+
+#: dialogs/rc.cpp:821
+msgid "Split-Value"
+msgstr "Valor de la Partida"
+
+#: dialogs/rc.cpp:824
+msgid "Commission"
+msgstr "Comisión"
+
+#: dialogs/rc.cpp:825
+msgid "O"
+msgstr "O"
+
+#: dialogs/rc.cpp:826
+msgid "2"
+msgstr "2"
+
+#: dialogs/rc.cpp:828
+msgid "I"
+msgstr "I"
+
+#: dialogs/rc.cpp:829
+msgid "3"
+msgstr "3"
+
+#: dialogs/rc.cpp:831
+msgid "Q"
+msgstr "Q"
+
+#: dialogs/rc.cpp:832
+msgid "4"
+msgstr "4"
+
+#: dialogs/rc.cpp:834
+msgid "Thousands Separator"
+msgstr "Separador de Miles"
+
+#: dialogs/rc.cpp:836
+msgid "Output filter location"
+msgstr "Ubicación del filtro para exportar"
+
+#: dialogs/rc.cpp:837
+msgid "Input filter file type"
+msgstr "Tipo de archivo del filtro para importar"
+
+#: dialogs/rc.cpp:838
+msgid "*.qif"
+msgstr "*.qif"
+
+#: dialogs/rc.cpp:839
+msgid "Input filter location"
+msgstr "Filtro para importar"
+
+#: dialogs/rc.cpp:843
+msgid "Rename"
+msgstr "Renombrar"
+
+#: dialogs/kselecttransactionsdlg.cpp:44
+msgid "Select Transaction"
+msgstr "Seleccionar Asiento"
+
+#: dialogs/kselecttransactionsdlg.cpp:45
+msgid ""
+"Select a transaction and press the OK button or use Cancel to select none."
+msgstr ""
+"Seleccione un asiento y presione el botón Aceptar o Cancelar para no "
+"seleccionar ninguno."
+
+#: dialogs/knewinvestmentwizard.cpp:62
+msgid "Investment detail wizard"
+msgstr "Asistente para detalles de Inversiones"
+
+#: dialogs/knewinvestmentwizard.cpp:82
+msgid "Security detail wizard"
+msgstr "Asistente para detalles de valores Bursátiles"
+
+#: dialogs/knewaccountdlg.cpp:121 dialogs/knewinvestmentwizard.cpp:109
+msgid ""
+"_: default price mode\n"
+"<default>"
+msgstr "<predeterminado>"
+
+#: dialogs/knewaccountdlg.cpp:122 dialogs/knewinvestmentwizard.cpp:110
+msgid "Price per share"
+msgstr "Precio por acción"
+
+#: dialogs/knewaccountdlg.cpp:123 dialogs/knewinvestmentwizard.cpp:111
+msgid "Total for all shares"
+msgstr "Total para todas las acciones"
+
+#: dialogs/knewinvestmentwizard.cpp:129
+msgid "This wizard allows you to modify the selected investment."
+msgstr "Este asistente le permite modificar la inversión seleccionada."
+
+#: dialogs/knewinvestmentwizard.cpp:132
+msgid "This wizard allows you to modify the selected security."
+msgstr "Este asistente le permite modificar el valor bursátil seleccionado."
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid ""
+"The selected symbol is already on file. Do you want to reuse the existing "
+"security?"
+msgstr ""
+"El símbolo seleccionado ya está en el archivo. ¿Desea reutilizar el valor "
+"bursátil existente?"
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid "Security found"
+msgstr "Valro bursátil encontrado"
+
+#: dialogs/knewinvestmentwizard.cpp:309
+msgid "Unable to create all objects for the investment"
+msgstr "Imposible crear todos los objetos para la inversión"
+
+#: dialogs/keditequityentrydlg.cpp:78
+msgid "Change the price information of the selected entry."
+msgstr "Cambiar la información de precios de la entrada escogida."
+
+#: dialogs/kaccountselectdlg.cpp:64 widgets/kmymoneybriefschedule.cpp:59
+msgid "&Skip"
+msgstr "&Saltar"
+
+#: dialogs/kaccountselectdlg.cpp:66 widgets/kmymoneybriefschedule.cpp:61
+msgid "Skip this transaction"
+msgstr "Saltear este asiento"
+
+#: dialogs/kaccountselectdlg.cpp:67
+msgid ""
+"Use this to skip importing this transaction and proceed with the next one."
+msgstr ""
+"Use esto para evitar importar este asiento y continuar con el siguiente."
+
+#: dialogs/kaccountselectdlg.cpp:72
+msgid "Create a new account/category"
+msgstr "Crear una nueva cuenta/categoría"
+
+#: dialogs/kaccountselectdlg.cpp:73
+msgid "Use this to add a new account/category to the file"
+msgstr "Use esto para añadir una nueva cuenta/categoría al archivo"
+
+#: dialogs/kaccountselectdlg.cpp:77
+msgid "&Abort"
+msgstr "&Abortar"
+
+#: dialogs/kaccountselectdlg.cpp:79
+msgid "Abort the import operation and dismiss all changes"
+msgstr "Abortar la operación de importación y anular los cambios"
+
+#: dialogs/kaccountselectdlg.cpp:80
+msgid ""
+"Use this to abort the import. Your financial data will be in the state "
+"before you started the QIF import."
+msgstr ""
+"Use esto para abortar la importación. Sus datos financieros estarán en el "
+"estado anterior a la importación del QIF."
+
+#: dialogs/knewaccountdlg.cpp:110
+msgid "Is a sub account"
+msgstr "Es una subcuenta"
+
+#: dialogs/knewaccountdlg.cpp:184
+msgid "VAT account"
+msgstr "Cuenta de IVA"
+
+#: dialogs/knewaccountdlg.cpp:474
+msgid ""
+"You have not specified a name.\n"
+"Please fill in this field."
+msgstr ""
+"No especificó un nombre.\n"
+"Por favor, rellene el campo."
+
+#: dialogs/knewaccountdlg.cpp:482
+msgid "Please select a parent account."
+msgstr "Por favor, escoja una cuenta madre."
+
+#: dialogs/knewaccountdlg.cpp:489 dialogs/knewaccountdlg.cpp:1029
+msgid "<No Institution>"
+msgstr "<Sin Organización>"
+
+#: dialogs/knewaccountdlg.cpp:552
+msgid ""
+"An account named <b>%1</b> already exists. You cannot create a second "
+"account with the same name."
+msgstr ""
+"Ya existe una cuenta llamada <b>%1</b>. No puede crear una segunda cuenta "
+"con el mismo nombre."
+
+#: dialogs/knewaccountdlg.cpp:567
+msgid ""
+"A category named <b>%1</b> already exists. You cannot create a second "
+"category with the same name."
+msgstr ""
+"Ya existe una categoría llamada <b>%1</b>. No puede crear una segunda "
+"categoría con el mismo nombre."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid ""
+"You have selected to suppress the display of unused categories in the "
+"KMyMoney configuration dialog. The category you just created will therefore "
+"only be shown if it is used. Otherwise, it will be hidden in the accounts/"
+"categories view."
+msgstr ""
+"Ha escogido no mostrar las categorías no utilizadas en el diálogo de "
+"configuración de KMyMoney. Por lo tanto, la categoría que acaba de crear "
+"sólo se mostrará si es usada. En otro caso, estará oculta en la vista de "
+"cuentas/categorías."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid "Hidden categories"
+msgstr "Categorías ocultas"
+
+#: dialogs/knewaccountdlg.cpp:927 dialogs/knewaccountdlg.cpp:979
+#, c-format
+msgid "Is a sub account of %1"
+msgstr "Es una subcuenta de %1"
+
+#: dialogs/knewaccountdlg.cpp:1082
+msgid "Cannot add institution"
+msgstr "No fue posible añadir la organización"
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid ""
+"This dialog does not allow to create new payees. Please pick a payee from "
+"the list."
+msgstr ""
+"Este cuadro de diálogo no permite crear nuevos beneficiarios. Por favor "
+"seleccione un beneficiario de la lista."
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid "Payee creation"
+msgstr "Creación de Beneficiario"
+
+#: dialogs/kimportdlg.cpp:69
+msgid "Use this to start the import operation"
+msgstr "Use esto para comenzar la operación de importación"
+
+#: dialogs/kimportdlg.cpp:110
+msgid ""
+"%1|Import files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Importar archivos\n"
+"%2|Todos los archivos (*.*)"
+
+#: dialogs/kimportdlg.cpp:111
+msgid "Import File..."
+msgstr "Importando archivo..."
+
+#: dialogs/knewloanwizard.cpp:124
+msgid "Create a new category"
+msgstr "Crear una nueva categoría"
+
+#: dialogs/knewloanwizard.cpp:125
+msgid "Use this to open the new account editor"
+msgstr "Use esto para abrir el editor de nuevas cuentas"
+
+#: dialogs/knewloanwizard.cpp:129
+msgid "&Additional fees..."
+msgstr "Cargos &adicionales..."
+
+#: dialogs/knewloanwizard.cpp:131
+msgid "Enter additional fees"
+msgstr "Introducir cargos adicionales"
+
+#: dialogs/knewloanwizard.cpp:132
+msgid ""
+"Use this to add any additional fees other than principal and interest "
+"contained in your periodical payments."
+msgstr ""
+"Use esto para añadir cualquier cargo adicional diferente de intereses y "
+"amortización que venga incluído en sus pagos periódicos."
+
+#: dialogs/knewloanwizard.cpp:139
+msgid ""
+"Use this to create a new account to which the initial payment should be made"
+msgstr "Use esto para crear una nueva cuenta a la cual hacer el pago inicial"
+
+#: dialogs/knewloanwizard.cpp:208
+msgid "To whom do you make payments?"
+msgstr "¿A quien hace los pagos?"
+
+#: dialogs/knewloanwizard.cpp:209
+msgid "Payments to"
+msgstr "Beneficiario"
+
+#: dialogs/knewloanwizard.cpp:214
+msgid "From whom do you expect payments?"
+msgstr "¿De quien espera los pagos?"
+
+#: dialogs/knewloanwizard.cpp:215
+msgid "Payments from"
+msgstr "Cobrar a"
+
+#: dialogs/knewloanwizard.cpp:233
+msgid "Please enter the date, the first payment for this loan was/is due."
+msgstr ""
+"Por favor introduzca la fecha en la que vence/venció el primer pago de este "
+"préstamo."
+
+#: dialogs/knewloanwizard.cpp:235
+msgid ""
+"Note: Consult the loan contract for details of the first due date. Keep in "
+"mind, that the first due date usually differs from the date the contract was "
+"signed"
+msgstr ""
+"Nota: Consulte el contrato del préstamo para los detalles de la primera "
+"fecha de vencimiento. Recuerde que la primera fecha de vencimiento por lo "
+"general no es la misma que la fecha en la que fue firmado el contrato"
+
+#: dialogs/knewloanwizard.cpp:240
+msgid ""
+"Please enter the original loan amount in the field below or leave it empty "
+"to be calculated."
+msgstr ""
+"Por favor introduzca la cantidad original del préstamo en el campo de abajo "
+"o déjelo vacío para ser calculado."
+
+#: dialogs/knewloanwizard.cpp:248
+msgid ""
+"Please enter the date, the first payment for this loan was/is due this year."
+msgstr ""
+"Por favor introduzca la fecha en que vence/venció el primer pago de este año."
+
+#: dialogs/knewloanwizard.cpp:250
+msgid ""
+"Note: You can easily figure out the date of the first payment if you consult "
+"the last statement of last year."
+msgstr ""
+"Nota: Puede averiguar con facilidad la fecha del primer pago si consulta el "
+"último extracto bancario del año anterior."
+
+#: dialogs/knewloanwizard.cpp:254
+msgid ""
+"Please enter the remaining loan amount of last years final statement in the "
+"field below. You should not leave this field empty."
+msgstr ""
+"Por favor introduzca la cantidad que faltaba por devolver tras el último "
+"pago del año pasado. No debería dejar ese campo en blanco."
+
+#: dialogs/knewloanwizard.cpp:311 dialogs/knewloanwizard.cpp:326
+#: dialogs/knewloanwizard.cpp:341 dialogs/knewloanwizard.cpp:357
+#: dialogs/knewloanwizard.cpp:373
+msgid "calculate"
+msgstr "calcular"
+
+#: dialogs/knewloanwizard.cpp:417
+msgid "borrowed"
+msgstr "prestado"
+
+#: dialogs/knewloanwizard.cpp:419
+msgid "lend"
+msgstr "prestar"
+
+#: dialogs/knewloanwizard.cpp:423
+msgid "not assigned"
+msgstr "no asignado"
+
+#: dialogs/knewloanwizard.cpp:430
+msgid "on reception"
+msgstr "al recibir"
+
+#: dialogs/knewloanwizard.cpp:432
+msgid "on due date"
+msgstr "en la fecha de vencimiento"
+
+#: dialogs/knewloanwizard.cpp:471
+msgid ""
+"The loan wizard is unable to calculate two different values for your loan at "
+"the same time. Please enter a value for the %1 on this page or backup to the "
+"page where the current value to be calculated is defined and fill in a "
+"value."
+msgstr ""
+"El asistente de préstamos no es capaz de calcular dos valores diferentes "
+"para su préstamo al mismo tiempo. Por favor introduzca un valor para el %1 "
+"en esta página o vuelva a la página donde se define el valor actual a ser "
+"calculado e introduzca un valor."
+
+#: dialogs/knewloanwizard.cpp:500
+msgid ""
+"You selected, that payments have already been made towards this loan. This "
+"requires you to enter the loan amount exactly as found on your last "
+"statement."
+msgstr ""
+"Ha indicado que ya fueron hechos pagos de este préstamo. Esto requiere que "
+"introduzca la cantidad prestada tal como viene en su último extracto "
+"bancario."
+
+#: dialogs/knewloanwizard.cpp:513
+msgid "interest rate"
+msgstr "tasa de interés"
+
+#: dialogs/knewloanwizard.cpp:522
+msgid "term"
+msgstr "final"
+
+#: dialogs/knewloanwizard.cpp:532
+msgid "principal and interest"
+msgstr "Amortización e Intereses"
+
+#: dialogs/knewloanwizard.cpp:743
+#, c-format
+msgid ""
+"The number of payments has been decremented and the final payment has been "
+"modified to %1."
+msgstr "El número de pagos ha sido disminuido y el pago final modificado a %1."
+
+#: dialogs/knewloanwizard.cpp:751 dialogs/knewloanwizard.cpp:771
+#, c-format
+msgid "The final payment has been modified to %1."
+msgstr "El pago final ha sido modificado a %1."
+
+#: dialogs/knewloanwizard.cpp:802
+msgid "KMyMoney has calculated a final payment of %1 for this loan."
+msgstr "KMyMoney calculó un pago final de %1 para este préstamo."
+
+#: dialogs/knewloanwizard.cpp:817
+msgid ""
+"You have entered mis-matching information. Please backup to the appropriate "
+"page and update your figures or leave one value empty to let KMyMoney "
+"calculate it for you"
+msgstr ""
+"Introdujo información que no encaja. Por favor vuelva a la página adecuada y "
+"actualice sus datos o deje un valor vacío para permitir a KMyMoney "
+"calcularlo para usted"
+
+#: dialogs/kfindtransactiondlg.cpp:230
+msgid ""
+"Warning: Filtering by Category will exclude all transfers from the results."
+msgstr ""
+"Advertencia: Filtrar por Categoría excluirá las transferencias de los "
+"resultados"
+
+#: dialogs/kfindtransactiondlg.cpp:239
+msgid "(None)"
+msgstr "(Nada)"
+
+#: dialogs/kfindtransactiondlg.cpp:241
+msgid "Current selections: "
+msgstr "Selecciones actuales:"
+
+#: dialogs/kfindtransactiondlg.cpp:716
+msgid "Found %1 matching transactions (D %2 / P %3 = %4)"
+msgstr "Se encontraron %1 asientos coincidentes (D %2 / P %3 = %4)"
+
+#: dialogs/kfindtransactiondlg.cpp:719
+msgid "Found %1 matching transactions"
+msgstr "Se encontraron %1 asientos coincidentes"
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "The institution name field is empty. Please enter the name."
+msgstr "No hay nombre de organización. Por favor, indique uno."
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "Adding New Institution"
+msgstr "Añadiendo nueva Organización"
+
+#: dialogs/kcsvprogressdlg.cpp:69
+msgid "C&lose"
+msgstr "Cer&rar"
+
+#: dialogs/kcsvprogressdlg.cpp:247
+msgid " of "
+msgstr " de "
+
+#: widgets/kmymoneypriceview.cpp:126
+msgid "Commodity"
+msgstr "Mercancía"
+
+#: widgets/kmymoneypriceview.cpp:130
+msgid "Source"
+msgstr "Origen"
+
+#: widgets/kmymoneypriceview.cpp:143
+msgid "Price Options"
+msgstr "Opciones de Precio"
+
+#: widgets/kmymoneypriceview.cpp:153
+msgid "Online Price Update..."
+msgstr "Actualizar Precio Online..."
+
+#: widgets/kmymoneycombo.cpp:472 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+msgid "From"
+msgstr "Cuenta deudora"
+
+#: widgets/transaction.cpp:668
+msgid "Transaction is missing a category assignment."
+msgstr "Falta asignar una categoría al asiento"
+
+#: widgets/transaction.cpp:671
+msgid "The transaction has a missing assignment of <b>%1</b>."
+msgstr "Al asiento le falta asignar <b>%1</b>."
+
+#: widgets/transaction.cpp:874
+msgid "Sell"
+msgstr "Vender"
+
+#: widgets/transaction.cpp:876
+msgid "Buy"
+msgstr "Comprar"
+
+#: widgets/kmymoneycombo.cpp:520 widgets/transaction.cpp:879
+#: widgets/transaction.cpp:1447
+msgid "Dividend"
+msgstr "Dividendos"
+
+#: widgets/kmymoneycombo.cpp:518 widgets/transaction.cpp:881
+#: widgets/transaction.cpp:1453
+msgid "Yield"
+msgstr "Rendimiento"
+
+#: widgets/transaction.cpp:886 widgets/transaction.cpp:1473
+msgid "Activity"
+msgstr "Actividad"
+
+#: widgets/transaction.cpp:887
+msgid "Investment transaction"
+msgstr "Asiento de Inversión"
+
+#: widgets/transaction.cpp:1021 widgets/transaction.cpp:1114
+#: widgets/transaction.cpp:1165
+msgid "*** UNASSIGNED ***"
+msgstr "*** SIN ASIGNAR ***"
+
+#: widgets/kmymoneycombo.cpp:517 widgets/transaction.cpp:1435
+msgid "Add shares"
+msgstr "Añadir Acciones"
+
+#: widgets/kmymoneycombo.cpp:516 widgets/transaction.cpp:1438
+msgid "Remove shares"
+msgstr "Eliminar Acciones"
+
+#: widgets/kmymoneycombo.cpp:522 widgets/transaction.cpp:1441
+msgid "Buy shares"
+msgstr "Comprar acciones"
+
+#: widgets/kmymoneycombo.cpp:521 widgets/transaction.cpp:1444
+msgid "Sell shares"
+msgstr "Vender acciones"
+
+#: widgets/transaction.cpp:1450
+msgid "Reinvest Dividend"
+msgstr "Reinvertir Dividendos"
+
+#: widgets/kmymoneycombo.cpp:515 widgets/transaction.cpp:1456
+msgid "Split shares"
+msgstr "Dividir acciones"
+
+#: widgets/transaction.cpp:1515
+msgid "Ratio"
+msgstr "Coeficiente"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:241
+msgid "%1 Bills."
+msgstr "%1 Recibos."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:257
+msgid "%1 Deposits."
+msgstr "%1 Depósitos."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:273
+msgid "%1 Transfers."
+msgstr "%1 Transferencias."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:355
+msgid ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+msgstr "º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º-º"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:57
+#: widgets/kmymoneyaccounttreeforecast.cpp:84
+msgid "Current"
+msgstr "Actual"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:72
+#: widgets/kmymoneyaccounttreeforecast.cpp:93
+msgid "Total variation"
+msgstr "Variación total"
+
+#: widgets/stdtransactionmatched.cpp:130
+msgid ""
+"KMyMoney has matched a downloaded transaction with a manually entered one "
+"(result above)"
+msgstr ""
+"KMyMoney ha conciliado un asiento descargado con uno ingresado manualmente. "
+"(resultados más arriba)"
+
+#: widgets/stdtransactionmatched.cpp:138
+msgid "Bank entry:"
+msgstr "Entrada del banco:"
+
+#: widgets/stdtransactionmatched.cpp:166
+msgid "Your entry:"
+msgstr "Su entrada:"
+
+#: widgets/kbudgetvalues.cpp:187
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a monthly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+"Usted ha ingresado valores de presupuesto con una base diferente, lo que "
+"resultaría en un presupuesto mensual de <b>%1</b>. ¿Debería utilizarse este "
+"valor para el presupuesto mensual?"
+
+#: widgets/kbudgetvalues.cpp:187 widgets/kbudgetvalues.cpp:206
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"_: Auto assignment (caption)\n"
+"Auto assignment"
+msgstr "Autoasignación"
+
+#: widgets/kbudgetvalues.cpp:206
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a yearly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+"Usted ha ingresado valores de presupuesto con una base diferente, lo que "
+"resultaría en un presupuesto anual de <b>%1</b>. ¿Debería utilizarse este "
+"valor para el presupuesto mensual?"
+
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"You have entered budget values using a different base which would result in "
+"an individual monthly budget of <b>%1</b>. Should this value be used to fill "
+"the monthly budgets?"
+msgstr ""
+"Usted ha ingresado valores de presupuesto con una base diferente, lo que "
+"resultaría en un presupuesto mensual individual de <b>%1</b>. ¿Debería "
+"utilizarse este valor para los presupuestos mensuales?"
+
+#: widgets/kmymoneybriefschedule.cpp:62
+msgid "Use this button to skip this transaction"
+msgstr "Use este botón para saltear este asiento"
+
+#: widgets/kmymoneybriefschedule.cpp:67
+msgid "Record this transaction into the register"
+msgstr "Ingresar este asiento en el registro"
+
+#: widgets/kmymoneybriefschedule.cpp:68
+msgid "Use this button to record this transaction"
+msgstr "Use este botón para ingresar este asiento"
+
+#: widgets/kmymoneybriefschedule.cpp:96
+msgid "%1 of %2"
+msgstr "%1 de %2"
+
+#: widgets/kmymoneybriefschedule.cpp:109
+msgid "Payment on %1 for %2 with %3 transactions remaining occuring %4."
+msgstr "Pago en %1 para %2 con %3 asientos restantes ocurriendo %4."
+
+#: widgets/kmymoneybriefschedule.cpp:115
+msgid "Payment on %1 for %2 occuring %4."
+msgstr "Pago en %1 para %2 ocurriendo %4."
+
+#: widgets/kmymoneybriefschedule.cpp:136
+msgid "%1 days overdue (%2 occurences)."
+msgstr "%1 dias de retraso (%2 ocurrencias)."
+
+#: widgets/register.cpp:55
+msgid "Post date"
+msgstr "Fecha del asiento"
+
+#: widgets/register.cpp:56
+msgid "Date entered"
+msgstr "Fecha introducida"
+
+#: widgets/register.cpp:60
+msgid "Entry order"
+msgstr "Orden de entrada"
+
+#: widgets/register.cpp:63
+msgid "Reconcile state"
+msgstr "Estado de Reconciliación"
+
+#: widgets/register.cpp:440
+msgid ""
+"_: Deposits onto account\n"
+"Deposits"
+msgstr "Depósitos"
+
+#: widgets/register.cpp:442
+msgid ""
+"_: Payments towards credit card\n"
+"Payments"
+msgstr "Pagos"
+
+#: widgets/register.cpp:446
+msgid ""
+"_: Payments made from account\n"
+"Payments"
+msgstr "Pagos"
+
+#: widgets/register.cpp:448
+msgid ""
+"_: Payments made with credit card\n"
+"Charges"
+msgstr "Cargos"
+
+#: widgets/register.cpp:736
+msgid ""
+"_: Payment made from account\n"
+"Payment"
+msgstr "Pago"
+
+#: widgets/register.cpp:737
+msgid ""
+"_: Deposit into account\n"
+"Deposit"
+msgstr "Depósito"
+
+#: widgets/register.cpp:813
+msgid ""
+"_: Payment made with credit card\n"
+"Charge"
+msgstr "Cargo"
+
+#: widgets/register.cpp:814
+msgid ""
+"_: Payment towards credit card\n"
+"Payment"
+msgstr "Pago"
+
+#: widgets/register.cpp:818 widgets/register.cpp:824
+msgid ""
+"_: Decrease of asset/liability value\n"
+"Decrease"
+msgstr "Disminución"
+
+#: widgets/register.cpp:819 widgets/register.cpp:823
+msgid ""
+"_: Increase of asset/liability value\n"
+"Increase"
+msgstr "Incremento"
+
+#: widgets/register.cpp:2280
+msgid "Prior transactions possibly filtered"
+msgstr "Asientos anteriores posiblemente filtrados"
+
+#: widgets/register.cpp:2284
+msgid "Last reconciliation"
+msgstr "Última reconciliación"
+
+#: widgets/register.cpp:2291
+#, c-format
+msgid "Online Statement Balance: %1"
+msgstr "Saldo del Extracto Online: %1"
+
+#: widgets/register.cpp:2295
+msgid "This year"
+msgstr "Este año"
+
+#: widgets/kmymoneycombo.cpp:674 widgets/register.cpp:2296
+msgid "Last month"
+msgstr "El mes pasado"
+
+#: widgets/register.cpp:2297
+msgid "This month"
+msgstr "Este mes"
+
+#: widgets/register.cpp:2298
+msgid "Last week"
+msgstr "La semana pasada"
+
+#: widgets/register.cpp:2299
+msgid "This week"
+msgstr "Esta semana"
+
+#: widgets/register.cpp:2300
+msgid "Yesterday"
+msgstr "Ayer"
+
+#: widgets/kmymoneycombo.cpp:666 widgets/register.cpp:2301
+msgid "Today"
+msgstr "Hoy"
+
+#: widgets/register.cpp:2302 widgets/register.cpp:2307
+msgid "Future transactions"
+msgstr "Asientos futuros"
+
+#: widgets/register.cpp:2303
+msgid "Next week"
+msgstr "La semana próxima"
+
+#: widgets/kmymoneycalendar.cpp:131 widgets/register.cpp:2304
+msgid "Next month"
+msgstr "El Mes que viene"
+
+#: widgets/kmymoneycombo.cpp:670 widgets/register.cpp:2315
+msgid "Current fiscal year"
+msgstr "Año fiscal actual"
+
+#: widgets/register.cpp:2316
+msgid "Previous fiscal year"
+msgstr "El año fiscal pasado"
+
+#: widgets/register.cpp:2317
+msgid "Next fiscal year"
+msgstr "El próximo año fiscal"
+
+#: widgets/register.cpp:2349
+msgid ""
+"_: Unknown payee\n"
+"Unknown"
+msgstr "Desconocido"
+
+#: widgets/register.cpp:2368
+msgid ""
+"_: Unknown category\n"
+"Unknown"
+msgstr "Desconocida"
+
+#: widgets/register.cpp:2387
+msgid ""
+"_: Unknown security\n"
+"Unknown"
+msgstr "Desconocido"
+
+#: widgets/klistviewsearchline.cpp:249
+msgid "Search Columns"
+msgstr "Columnas de Búsqueda"
+
+#: widgets/klistviewsearchline.cpp:251
+msgid "All Visible Columns"
+msgstr "Todas las Columnas Visibles"
+
+#: widgets/klistviewsearchline.cpp:266
+msgid ""
+"_: Column number %1\n"
+"Column No. %1"
+msgstr "Nro. de Columna %1"
+
+#: widgets/klistviewsearchline.cpp:461 widgets/registersearchline.cpp:286
+msgid "S&earch:"
+msgstr "Buscar:"
+
+#: widgets/kmymoneyaccountselector.cpp:110
+#: widgets/kmymoneyaccountselector.cpp:371
+msgid "Income categories"
+msgstr "Categorías de Ingresos"
+
+#: widgets/kmymoneyaccountselector.cpp:349
+#: widgets/kmymoneyaccountselector.cpp:350
+msgid "Favorites"
+msgstr "Favoritas"
+
+#: widgets/kmymoneyaccountselector.cpp:357
+msgid "Asset accounts"
+msgstr "Cuentas de activos"
+
+#: widgets/kmymoneyaccountselector.cpp:364
+msgid "Liability accounts"
+msgstr "Cuentas de pasivos"
+
+#: widgets/kmymoneyaccountselector.cpp:381
+msgid "Expense categories"
+msgstr "Categorías de Gastos"
+
+#: widgets/kmymoneyaccountselector.cpp:391
+msgid "Equity accounts"
+msgstr "Cuentas de acciones"
+
+#: widgets/kmymoneyaccounttreebase.cpp:120
+msgid "Total Balance"
+msgstr "Saldo Total"
+
+#: widgets/kmymoneyaccounttreebase.cpp:124
+msgid "Total Value"
+msgstr "Valor Neto"
+
+#: widgets/registersearchline.cpp:75
+msgid ""
+"_: label for status combo\n"
+"Stat&us"
+msgstr "Estad&o"
+
+#: widgets/registersearchline.cpp:79
+msgid "Any status"
+msgstr "Todos los estados"
+
+#: widgets/registersearchline.cpp:80
+msgid "Imported"
+msgstr "Importado"
+
+#: widgets/registersearchline.cpp:81
+msgid "Matched"
+msgstr "Conciliado"
+
+#: widgets/registersearchline.cpp:82
+msgid "Erroneous"
+msgstr "Erróneo"
+
+#: widgets/registersearchline.cpp:83
+msgid "Not marked"
+msgstr "No marcado"
+
+#: widgets/kmymoneyaccounttree.cpp:54
+msgid ""
+"_: Column heading for category in tax report\n"
+"Tax"
+msgstr "Impuestos"
+
+#: widgets/kmymoneyaccounttree.cpp:58
+msgid ""
+"_: Column heading for VAT category\n"
+"VAT"
+msgstr "IVA"
+
+#: widgets/kmymoneywizard.cpp:101
+msgid "Continue with next page"
+msgstr "Continuar con la próxima página"
+
+#: widgets/kmymoneywizard.cpp:103
+msgid "Finish wizard"
+msgstr "Finalizar el asistente"
+
+#: widgets/kmymoneywizard.cpp:121
+msgid "&Back"
+msgstr "&Atrás"
+
+#: widgets/kmymoneywizard.cpp:122
+msgid "&Next"
+msgstr "&Próximo"
+
+#: widgets/kmymoneywizard.cpp:123
+msgid "&Finish"
+msgstr "&Finalizar"
+
+#: widgets/kmymoneywizard.cpp:274
+msgid "Step %1 of %2"
+msgstr "Paso %1 de %2"
+
+#: widgets/kmymoneydateinput.cpp:235
+msgid ""
+"_: Enter todays date into date input widget\n"
+"T"
+msgstr "T"
+
+#: widgets/transactionform.cpp:302
+msgid "&Deposit"
+msgstr "&Depósito"
+
+#: widgets/transactionform.cpp:304 widgets/transactionform.cpp:313
+#: widgets/transactionform.cpp:323 widgets/transactionform.cpp:333
+msgid "&Transfer"
+msgstr "&Transferencia"
+
+#: widgets/transactionform.cpp:306
+msgid "&Withdrawal"
+msgstr "&Retiro"
+
+#: widgets/transactionform.cpp:311
+msgid "&Payment"
+msgstr "&Pago"
+
+#: widgets/transactionform.cpp:315
+msgid "&Charge"
+msgstr "&Imputar"
+
+#: widgets/transactionform.cpp:321 widgets/transactionform.cpp:335
+msgid "&Decrease"
+msgstr "&Disminuir"
+
+#: widgets/transactionform.cpp:325 widgets/transactionform.cpp:331
+msgid "&Increase"
+msgstr "&Aumentar"
+
+#: widgets/kmymoneyscheduledcalendar.cpp:42
+msgid "Select Schedules"
+msgstr "Escoger Programaciones"
+
+#: widgets/kmymoneycalendar.cpp:108
+msgid "Select Style"
+msgstr "Escoger Estilo"
+
+#: widgets/kmymoneycalendar.cpp:128
+msgid "Choose Style"
+msgstr "Escoja un Estilo"
+
+#: widgets/kmymoneycalendar.cpp:129
+msgid "Next year"
+msgstr "El Año que viene"
+
+#: widgets/kmymoneycalendar.cpp:130
+msgid "Previous year"
+msgstr "El Año pasado"
+
+#: widgets/kmymoneycalendar.cpp:132
+msgid "Previous month"
+msgstr "El Mes pasado"
+
+#: widgets/kmymoneycalendar.cpp:133
+msgid "Select a week"
+msgstr "Escoger una semana"
+
+#: widgets/kmymoneycalendar.cpp:134
+msgid "Select a month"
+msgstr "Escoger un mes"
+
+#: widgets/kmymoneycalendar.cpp:135
+msgid "Select a year"
+msgstr "Escoger un año"
+
+#: widgets/kmymoneycalendar.cpp:249
+msgid "Week XX"
+msgstr "Semana XX"
+
+#: widgets/kmymoneycalendar.cpp:264 widgets/kmymoneycalendar.cpp:300
+#, c-format
+msgid "Week %1"
+msgstr "Semana %1"
+
+#: widgets/rc.cpp:1
+msgid "Account Types"
+msgstr "Tipos de Cuenta"
+
+#: widgets/rc.cpp:3
+msgid "Detailed description"
+msgstr "Descripción detallada"
+
+#: widgets/rc.cpp:18
+msgid "Period"
+msgstr "Periodo"
+
+#: widgets/rc.cpp:21
+msgid "Individual"
+msgstr "Individual"
+
+#: widgets/rc.cpp:23
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Acces to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>Recovery encryption</i> group is only accessible, if the necessary "
+"key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is "
+"found."
+msgstr ""
+"Esta página le permite ajustar los parámetros para guardar sus datos de "
+"<b>KMyMoney</b> cifrados mediante <b>GPG</b>.<p>\n"
+"No se permite acceder a la configuración si no se encuentra <b>GPG</b> en su "
+"sistema. En este caso, asegúrese de que <b>GPG</b> trabaja correctamente "
+"para el usuario actual.<p>\n"
+"El grupo <i>Recuperación de cifrado</i> solamente estará accesible de "
+"encontrarse la llave para <b>kmymoney-recover@users.sourceforge.net</b> con "
+"id 0x8AFDDC8E"
+
+#: widgets/rc.cpp:26
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading <i>0x</i>."
+msgstr ""
+"Introduza el id de la llave que desea usar para cifrar los datos. Esto puede "
+"ser un e-mail o el identificador hexadecimal del id. En este caso no olvide "
+"el <i>0x</i> inicial."
+
+#: widgets/rc.cpp:27
+msgid "User ID"
+msgstr "ID de usuário"
+
+#: widgets/rc.cpp:29
+msgid "Recovery encryption"
+msgstr "Recuperación de cifrado"
+
+#: widgets/rc.cpp:30
+msgid "Also encrypt with kmymoney-recover key"
+msgstr "Cifrar también con la llave kmymoney-recover"
+
+#: widgets/rc.cpp:32
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out."
+msgstr ""
+"Puede cifrar sus datos también con la llave de recuperación de KMyMoney. "
+"Sólo los desarrolladores del núcleo de KMyMoney poseen la llave privada "
+"imprescindible para descifrar tales datos.<p>\n"
+"\n"
+"Este mecanismo sirve por si usted pierde su llave y no puede acceder a los "
+"datos. Activando esta opción, los desarrolladores de KMyMoney podrán "
+"descifrar los datos y devolverselos en un formato legible. Se le advierte "
+"que tendrá que responder unas preguntas detalladas acerca del contenido de "
+"sus datos antes de poder enviarselos."
+
+#: widgets/rc.cpp:51
+msgid "PriceInfo"
+msgstr "PriceInfo"
+
+#: widgets/rc.cpp:52
+msgid "Report Tab"
+msgstr "Solapa de Informe"
+
+#: widgets/rc.cpp:53
+msgid "<p>On this tab, you set the basic properties of this report.</p>"
+msgstr ""
+"<p>En esta solapa, configure las propriedades básicas de este informe.</p>"
+
+#: widgets/rc.cpp:54
+msgid "Report Name"
+msgstr "Nombre del Informe"
+
+#: widgets/rc.cpp:55
+msgid "<p>Choose a name for this report.</p>"
+msgstr "<p>Elija un nombre para este informe.</p>"
+
+#: widgets/rc.cpp:57
+msgid "<p>Enter a comment to help you remember the details of this report.</p>"
+msgstr ""
+"<p>Introduzca un comentario que le ayude a recordar los detalles de este "
+"informe.</p>"
+
+#: widgets/rc.cpp:58
+msgid "Convert values to base currency"
+msgstr "Convertir valores a divisa báse"
+
+#: widgets/rc.cpp:59
+msgid ""
+"_: Convert 'em!!\n"
+"<p>Select this option to convert all values in the report to your base "
+"currency.</p><p>Leave it unchecked if you'd like to see values in their "
+"original currency.</p><p>If currencies are not converted, then subtotals "
+"will not be shown.</p>"
+msgstr ""
+"<p>Seleccione esta opción para convertir todos los valores en el reporte a "
+"su divisa base.</p><p>Déjelo desmarcado si desea ver los valores en su "
+"divisa original.</p><p>Si las divisas no se convierten, no se mostrarán los "
+"subtotales.</p>"
+
+#: widgets/rc.cpp:60
+msgid "Mark as a favorite report"
+msgstr "Marcar como informe preferido"
+
+#: widgets/rc.cpp:61
+msgid ""
+"<p>Select this option to notate this report as one of your favorites.</"
+"p><p>All your favorite reports are grouped in one place on the report list "
+"for easy access.</p>"
+msgstr ""
+"<p>Elija esta opción para indicar que este informe es uno de sus favoritos.</"
+"p><p>Sus informes favoritos son agrupados en el listado de informes para "
+"acceder fácilmente a ellos.</p>"
+
+#: widgets/rc.cpp:62 widgets/rc.cpp:88
+msgid "Rows/Columns Tab"
+msgstr "Solapa Filas/Columnas"
+
+#: widgets/rc.cpp:63 widgets/rc.cpp:89
+msgid ""
+"<p>On this tab, you configure how you'd like the rows and columns to be "
+"selected and organized.</p>"
+msgstr ""
+"<p>En esta solapa, puede configurar como desea escoger y organizar las filas "
+"y columnas.</p>"
+
+#: widgets/rc.cpp:69 widgets/rc.cpp:81
+msgid ""
+"<p>Choose what kind of accounts to display as the rows of this report.</p>"
+msgstr "<p>Elija que clase de cuentas mostrar como filas de este informe.</p>"
+
+#: widgets/rc.cpp:71
+msgid "Columns"
+msgstr "Columnas"
+
+#: widgets/rc.cpp:75
+msgid "Bi-Monthly"
+msgstr "Bimensualmente"
+
+#: widgets/rc.cpp:78
+msgid "<p>Choose how large of a time period each column should encompass</p>"
+msgstr "<p>Elija que periodo de tiempo debe abarcar cada columna</p>"
+
+#: widgets/rc.cpp:79
+msgid "Income & Expenses"
+msgstr "Ingresos y Gastos"
+
+#: widgets/rc.cpp:80
+msgid "Assets & Liabilities"
+msgstr "Activos y Pasivos"
+
+#: widgets/rc.cpp:82
+msgid "Rows"
+msgstr "Filas"
+
+#: widgets/rc.cpp:83
+msgid "Show totals column"
+msgstr "Mostrar columna de totales"
+
+#: widgets/rc.cpp:84
+msgid "Average days"
+msgstr "Días de promedio"
+
+#: widgets/rc.cpp:85
+msgid "Include scheduled transactions"
+msgstr "Incluir asientos planificados"
+
+#: widgets/rc.cpp:86
+msgid "Include transfers"
+msgstr "Incluir transferencias"
+
+#: widgets/rc.cpp:87
+msgid "Include unused accounts/categories"
+msgstr "Incluir cuentas/categorías no utilizadas"
+
+#: widgets/rc.cpp:90
+msgid "Organize by:"
+msgstr "Organizar por:"
+
+#: widgets/rc.cpp:92
+msgid "Top Categories"
+msgstr "Categoría Madre"
+
+#: widgets/rc.cpp:95
+msgid "Top Accounts"
+msgstr "Cuentas madre"
+
+#: widgets/rc.cpp:98
+msgid "<p>Choose how to group the transactions in this report</p>"
+msgstr "<p>Escoger cómo agrupar los asientos en este informe</p>"
+
+#: widgets/rc.cpp:99
+msgid "Show Columns"
+msgstr "Mostrar Columnas"
+
+#: widgets/rc.cpp:100
+msgid ""
+"<p>Choose which columns should be shown in the report.</p><p>The date and "
+"transaction amount are always shown.</p>"
+msgstr ""
+"<p>Escoger qué columnas deben ser mostradas en el informe.</p><p>La fecha e "
+"importe del asiento siempre son mostradas.</p>"
+
+#: widgets/rc.cpp:102
+msgid "<p>Select this option to show the Memo column</p>"
+msgstr "<p>Elija esta opción para mostrar la columna Concepto</p>"
+
+#: widgets/rc.cpp:104
+msgid "<p>Select this option to show the Shares column for investments</p>"
+msgstr ""
+"<p><p>Elija esta opción para mostrar la columna Participaciones en las "
+"inversiones</p>"
+
+#: widgets/rc.cpp:106
+msgid "<p>Select this option to show the Price column for investments</p>"
+msgstr ""
+"<p>Elija esta opción para mostrar la columna Precio en las inversiones</p> "
+
+#: widgets/rc.cpp:108
+msgid "<p>Select this option to show the Reconciled column</p>"
+msgstr "<p>Elija esta opción para mostrar la columna Reconciliado</p>"
+
+#: widgets/rc.cpp:110
+msgid "<p>Select this option to show the Account column</p>"
+msgstr "<p>Elija esta opción para mostrar la columna Cuenta</p>"
+
+#: widgets/rc.cpp:112
+msgid "<p>Select this option to show the Number column</p>"
+msgstr "<p>Elija esta opción para mostrar la columna Número</p>"
+
+#: widgets/rc.cpp:114
+msgid "<p>Select this option to show the Payee column</p>"
+msgstr "<p>Elija esta opción para mostrar la columna Beneficiario</p>"
+
+#: widgets/rc.cpp:116
+msgid "<p>Select this option to show the Category column</p>"
+msgstr "<p>Elija esta opción para mostrar la columna Categoría</p>"
+
+#: widgets/rc.cpp:118
+msgid "<p>Select this option to show the Action column</p>"
+msgstr "<p>Elija esta opción para mostrar la columna Acción</p>"
+
+#: widgets/rc.cpp:120
+msgid "<p>Select this option to show the Running balance column</p>"
+msgstr "<p>Elija esta opción para mostrar la columna de Saldo Corriente</p>"
+
+#: widgets/rc.cpp:121
+msgid "Include only Loan accounts"
+msgstr "Incluir solamente cuentas de Préstamo"
+
+#: widgets/rc.cpp:122
+msgid "Include only Investment accounts"
+msgstr "Incluir solamente cuentas de Inversión"
+
+#: widgets/rc.cpp:123 widgets/rc.cpp:127
+msgid ""
+"<p>Check this box to include only those categories which have been marked to "
+"\"Include on Tax Reports\"</p>"
+msgstr ""
+"<p>Marque esta casilla para incluir solo las categorias que fuesen marcadas "
+"como \"Incluir en informes de Impuestos\"</p>"
+
+#: widgets/rc.cpp:124
+msgid "Hide Split Transaction Details"
+msgstr "Ocultar detalles de partidas de la transacción"
+
+#: widgets/rc.cpp:125
+msgid ""
+"Do not display the individual transactions that make up a split transaction"
+msgstr ""
+"No mostrar los asientos individuales que componen un asiento con múltiples "
+"partidas"
+
+#: widgets/rc.cpp:126
+msgid "Include only Tax categories"
+msgstr "Incluir solamente categorias de Impuestos"
+
+#: widgets/rc.cpp:128
+msgid "Chart Tab"
+msgstr "Solapa de Gráfico"
+
+#: widgets/rc.cpp:129
+msgid "<p>On this tab, you configure the chart drawn forthis report.</p>"
+msgstr ""
+"<p>En esta solapa puede configurar las propiedades básicas de este informe.</"
+"p>"
+
+#: widgets/rc.cpp:130
+msgid "Chart Type"
+msgstr "Tipo de Gráfico"
+
+#: widgets/rc.cpp:131
+msgid "<p>Select what form you would like the chart to be drawn as.</p>"
+msgstr ""
+"<p>Seleccione la forma en que le gustaría que se dibuje el gráfico.</p>"
+
+#: widgets/rc.cpp:132
+msgid "Line"
+msgstr "Línea"
+
+#: widgets/rc.cpp:133
+msgid "Bar"
+msgstr "Barra"
+
+#: widgets/rc.cpp:134
+msgid "Stacked Bar"
+msgstr "Barras acumulativas"
+
+#: widgets/rc.cpp:135
+msgid "Pie"
+msgstr "Torta"
+
+#: widgets/rc.cpp:136
+msgid "Ring"
+msgstr "Anillo"
+
+#: widgets/rc.cpp:137
+msgid "Show grid lines"
+msgstr "Mostrar líneas de grilla"
+
+#: widgets/rc.cpp:138
+msgid ""
+"<p>Select this option to show horizontal and vertical grid lines on the "
+"chart.</p>"
+msgstr ""
+"<p>Elija esta opción para mostrar las líneas de grilla horizontales y "
+"verticales en el gráfico.</p>"
+
+#: widgets/rc.cpp:139
+msgid "Draw values on chart"
+msgstr "Dibujar valores en el gráfico"
+
+#: widgets/rc.cpp:140
+msgid ""
+"<p>Select this option to draw the numeric values for data points next to "
+"their plot location.</p>"
+msgstr ""
+"<p>Elija esta opción para dibujar los valores números para los puntos de "
+"datos junto a su ubicación en el gráfico</p>"
+
+#: widgets/rc.cpp:141
+msgid "Show as chart by default"
+msgstr "Mostrar por defecto como gráfico"
+
+#: widgets/rc.cpp:142
+msgid ""
+"<p>Select this option to cause the report to be shown as a chart when you "
+"first open the report. Otherwise, it will come up as a text report.</p>"
+msgstr ""
+"<p>Seleccione esta opción para mostrar el reporte como gráfico cuando lo "
+"abra por primera vez. Si no, se mostrará como texto.</p>"
+
+#: widgets/rc.cpp:143
+msgid "Line width"
+msgstr "Ancho de línea"
+
+#: widgets/rc.cpp:144
+msgid "<p>Select what width should be used to draw the line on the chart</p>"
+msgstr "<p>Elija el ancho utilizado para dibujar las líneas en el gráfico</p>"
+
+#: widgets/rc.cpp:145
+msgid "ReportControl"
+msgstr "ReportControl"
+
+#: widgets/rc.cpp:149
+msgid "Configure this report"
+msgstr "Configurar este informe"
+
+#: widgets/rc.cpp:151
+msgid "Create a new report based on this one"
+msgstr "Crea un nuevo informe basado en este"
+
+#: widgets/rc.cpp:153
+msgid "Copy this report to the clipboard"
+msgstr "Copia este informe al portapapeles"
+
+#: widgets/rc.cpp:155
+msgid "Export this report as an HTML or CSV file"
+msgstr "Exporta este informe en formato HTML o CSV"
+
+#: widgets/rc.cpp:157
+msgid "Permanently delete this report"
+msgstr "Elimina permanentemente este informe"
+
+#: widgets/rc.cpp:159
+msgid "Close this window"
+msgstr "Cerrar esta ventana"
+
+#: widgets/rc.cpp:162
+msgid "n of n"
+msgstr "n de n"
+
+#: widgets/rc.cpp:166
+msgid "Account:"
+msgstr "Cuenta:"
+
+#: widgets/rc.cpp:168
+msgid "Enter..."
+msgstr "Introducir..."
+
+#: widgets/rc.cpp:171
+msgid "TransactionSortOptionDecl"
+msgstr "TransactionSortOptionDecl"
+
+#: widgets/rc.cpp:173
+msgid "Sort order"
+msgstr "Escoger orden"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Sunday\n"
+"Sun"
+msgstr "Dom"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Saturday\n"
+"Sat"
+msgstr "Sáb"
+
+#: widgets/kmymoneydatetbl.cpp:171 widgets/kmymoneydatetbl.cpp:178
+msgid "Week %1 for year %2."
+msgstr "Semana %1 del año %2."
+
+#: widgets/kmymoneycombo.cpp:417
+msgid "ATM"
+msgstr "Cajero automático"
+
+#: widgets/kmymoneycombo.cpp:418
+msgid "Withdrawal"
+msgstr "Retiro"
+
+#: widgets/kmymoneycombo.cpp:421
+msgid "Cheque"
+msgstr "Cheque"
+
+#: widgets/kmymoneycombo.cpp:469
+msgid ""
+"_: Activity for expense categories\n"
+"Paid"
+msgstr "Pagado"
+
+#: widgets/kmymoneycombo.cpp:470
+msgid ""
+"_: Activity for income categories\n"
+"Received"
+msgstr "Recibido"
+
+#: widgets/kmymoneycombo.cpp:519
+msgid "Reinvest dividend"
+msgstr "Reinvertir dividendos"
+
+#: widgets/kmymoneycombo.cpp:664
+msgid "All dates"
+msgstr "Todas las fechas"
+
+#: widgets/kmymoneycombo.cpp:665
+msgid "As of today"
+msgstr "Hoy"
+
+#: widgets/kmymoneycombo.cpp:667
+msgid "Current month"
+msgstr "Este mes"
+
+#: widgets/kmymoneycombo.cpp:668
+msgid "Current quarter"
+msgstr "Trimestre actual"
+
+#: widgets/kmymoneycombo.cpp:669
+msgid "Current year"
+msgstr "Año actual"
+
+#: widgets/kmymoneycombo.cpp:671
+msgid "Month to date"
+msgstr "Lo que va del mes"
+
+#: widgets/kmymoneycombo.cpp:672
+msgid "Year to date"
+msgstr "Lo que va del año"
+
+#: widgets/kmymoneycombo.cpp:673
+msgid "Year to month"
+msgstr "Principio del año hasta este mes"
+
+#: widgets/kmymoneycombo.cpp:675
+msgid "Last year"
+msgstr "El año pasado"
+
+#: widgets/kmymoneycombo.cpp:676
+msgid "Last fiscal year"
+msgstr "El año fiscal pasado"
+
+#: widgets/kmymoneycombo.cpp:677
+msgid "Last 7 days"
+msgstr "Los últimos 7 días"
+
+#: widgets/kmymoneycombo.cpp:678
+msgid "Last 30 days"
+msgstr "Los últimos 30 dias"
+
+#: widgets/kmymoneycombo.cpp:679
+msgid "Last 3 months"
+msgstr "Los últimos 3 meses"
+
+#: widgets/kmymoneycombo.cpp:680
+msgid "Last quarter"
+msgstr "El trimestre pasado"
+
+#: widgets/kmymoneycombo.cpp:681
+msgid "Last 6 months"
+msgstr "Los últimos 6 meses"
+
+#: widgets/kmymoneycombo.cpp:682
+msgid "Last 11 months"
+msgstr "Los últimos 11 meses"
+
+#: widgets/kmymoneycombo.cpp:683
+msgid "Last 12 months"
+msgstr "Los últimos 12 meses"
+
+#: widgets/kmymoneycombo.cpp:684
+msgid "Next 7 days"
+msgstr "Los próximos 7 días"
+
+#: widgets/kmymoneycombo.cpp:685
+msgid "Next 30 days"
+msgstr "Los próximos 30 dias"
+
+#: widgets/kmymoneycombo.cpp:686
+msgid "Next 3 months"
+msgstr "Los próximos 3 meses"
+
+#: widgets/kmymoneycombo.cpp:687
+msgid "Next quarter"
+msgstr "El trimestre próximo"
+
+#: widgets/kmymoneycombo.cpp:688
+msgid "Next 6 months"
+msgstr "Los próximos 6 meses"
+
+#: widgets/kmymoneycombo.cpp:689
+msgid "Next 12 months"
+msgstr "Los próximos 12 meses"
+
+#: widgets/kmymoneycombo.cpp:690
+msgid "Last 3 months to next 3 months"
+msgstr "Los últimos 3 meses hasta los próximos 3 meses"
+
+#: widgets/kmymoneycombo.cpp:691
+msgid "User defined"
+msgstr "Definido por el usuario"
+
+#~ msgid "Reset"
+#~ msgstr "Reiniciar"
+
+#~ msgid "No plugins loaded"
+#~ msgstr "No se cargaron extensiones"
+
+#~ msgid "Create schedule..."
+#~ msgstr "Crear asiento programado..."
+
+#~ msgid "New schedule..."
+#~ msgstr "&Nuevo programa de asientos..."
+
+#~ msgid "Edit schedule..."
+#~ msgstr "Editar programa..."
+
+#~ msgid "Delete schedule..."
+#~ msgstr "Borrar programa..."
+
+#~ msgid "Duplicate schedule"
+#~ msgstr "Duplicar programa"
+
+#~ msgid "Enter schedule..."
+#~ msgstr "Ingresar asiento programado..."
+
+#~ msgid "Skip schedule..."
+#~ msgstr "Saltear asiento programado..."
+
+#~ msgid "Adjusting schedules..."
+#~ msgstr "Ajustando planificaciones..."
+
+#~ msgid "Add schedule"
+#~ msgstr "Añadir programación"
+
+#~ msgid "Unable to enter transaction for schedule '%1'"
+#~ msgstr "Imposible ingresar asiento de la programación '%1'"
+
+#~ msgid "Loaded"
+#~ msgstr "Cargado"
+
+#~ msgid ""
+#~ "_: Plugin interface description\n"
+#~ "Online access"
+#~ msgstr "Acceso online"
+
+#~ msgid ""
+#~ "_: Plugin interface description\n"
+#~ "File import"
+#~ msgstr "Importar archivo"
+
+#~ msgid "not loaded: %1"
+#~ msgstr "no cargado: %1"
+
+#~ msgid "Schedule options"
+#~ msgstr "Opciones de Programación"
+
+#~ msgid "New Schedule"
+#~ msgstr "Nuevo Programa de Asientos"
+
+#~ msgid "Edit Schedule"
+#~ msgstr "Editar Planificación"
+
+#~ msgid "Search transactions containing the following text"
+#~ msgstr "Buscar asientos que contengan el siguiente texto"
+
+#~ msgid "Search"
+#~ msgstr "Buscar"
+
+#~ msgid "&Search"
+#~ msgstr "&Buscar"
+
+#~ msgid "Start the search"
+#~ msgstr "Comenzar la búsqueda"
+
+#~ msgid "Takes the current criteria and searches for matching transactions."
+#~ msgstr "Toma el critério actual y busca asientos que se ajusten a el."
+
+#~ msgid "Reset all settings"
+#~ msgstr "Limpiar todo"
+
+#~ msgid ""
+#~ "Use this to reset all settings to the state they were when the dialog was "
+#~ "opened."
+#~ msgstr ""
+#~ "Use esto para que todas las opciones vuelvan al estado que tenían al "
+#~ "iniciar el diálogo."
+
+#~ msgid "Use this button to close the window"
+#~ msgstr "Use este botón para cerrar la ventana"
diff --git a/po/fi.po b/po/fi.po
new file mode 100644
index 0000000..eeec9b8
--- /dev/null
+++ b/po/fi.po
@@ -0,0 +1,13456 @@
+# translation of fi_1.0.4.po to
+# translation of fi.po to
+# translation of kmymoney.pot to fi.po
+#
+# Mikael Kujanpää <mikael.kujanpaa@iki.fi>, 2009, 2010.
+# Raimo Ikonen <raimo.ikonen@mxoy.com>, 2008, 2009.
+# Kone <kohtionnea08@meininki.net>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: fi_1.0.4\n"
+"POT-Creation-Date: 2009-06-25 19:04+0200\n"
+"PO-Revision-Date: 2010-03-28 22:43+0300\n"
+"Last-Translator: Mikael Kujanpää <mikael.kujanpaa@iki.fi>\n"
+"Language-Team: Suomi <kde-i18n-doc@kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: wizards/wizardpages/rc.cpp:1
+msgid ""
+"Select groups of accounts that correspond to the ways that you will use "
+"KMyMoney. Each group you select will cause several accounts and categories "
+"to be created. Select the groups that are relevant to you. You can always "
+"create additional accounts manually later."
+msgstr ""
+"Valitse tilipohjat jotka vastaavat tapaa jolla ohjelmaa tullaan käyttämään "
+"ja jotka ovat olennaisia tulevan käytön kannalta. Jokaisesta valitusta "
+"ryhmästä luodaan useita tilejä ja kategorioita.Lisätilejä voidaan luoda myös "
+"myöhemmin."
+
+#: wizards/wizardpages/rc.cpp:2
+msgid ""
+"<p>KMyMoney supports multiple currencies, nevertheless one of them will be "
+"used as your base currency. The base currency is used as default for new "
+"accounts and reports. Please select the base currency from the following "
+"list."
+msgstr ""
+"<p>KMyMoney tukee useita valuuttoja joista yhtä käytetään oletusvaluuttana. "
+"Sitä käytetään oletuksena uusille tileille ja raporteille.Valitse "
+"oletusvaluutta oheisesta listasta."
+
+#: dialogs/kequitypriceupdatedlg.cpp:71 dialogs/rc.cpp:399 dialogs/rc.cpp:485
+#: dialogs/rc.cpp:724 dialogs/settings/rc.cpp:108 reports/listtable.cpp:226
+#: views/kinvestmentview.cpp:71 views/kpayeesview.cpp:351 views/rc.cpp:13
+#: widgets/rc.cpp:5 widgets/rc.cpp:34
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1599
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1629
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1673
+#: wizards/wizardpages/rc.cpp:3
+msgid "Name"
+msgstr "Nimi"
+
+#: wizards/wizardpages/rc.cpp:4
+msgid "ISO Code"
+msgstr "ISO-koodi"
+
+#: dialogs/kequitypriceupdatedlg.cpp:69 dialogs/kequitypriceupdatedlg.cpp:70
+#: dialogs/rc.cpp:71 dialogs/rc.cpp:725 dialogs/settings/rc.cpp:112
+#: views/kinvestmentview.cpp:72 widgets/rc.cpp:37 wizards/wizardpages/rc.cpp:5
+msgid "Symbol"
+msgstr "Merkki"
+
+#: wizards/wizardpages/rc.cpp:6
+msgid ""
+"<p>Use the fields below to enter some information about yourself.</p>\n"
+"\n"
+"<p>All information is optional and only used to personalize your KMyMoney "
+"file.</p>"
+msgstr ""
+"<p>Alla olevissa kentissä voidaan antaa joitakin käyttäjätietoja.</p>\n"
+"\n"
+"<p>Mitkään tiedot eivät ole pakollisia, niitä käytetään ainoastaan "
+"kirjanpitosi henkilökohtaistamiseen.</p>"
+
+#: dialogs/rc.cpp:425 wizards/newuserwizard/rc.cpp:27
+#: wizards/wizardpages/rc.cpp:7
+msgid "Town:"
+msgstr "Kaupunki:"
+
+#: dialogs/rc.cpp:420 wizards/newuserwizard/rc.cpp:22
+#: wizards/wizardpages/rc.cpp:8
+msgid "County/State:"
+msgstr "Lääni / valtio:"
+
+#: dialogs/rc.cpp:391 dialogs/rc.cpp:421 wizards/newuserwizard/rc.cpp:23
+#: wizards/wizardpages/rc.cpp:9
+msgid "Street:"
+msgstr "Katuosoite:"
+
+#: dialogs/rc.cpp:422 wizards/newuserwizard/rc.cpp:24
+#: wizards/wizardpages/rc.cpp:10
+msgid "Email:"
+msgstr "Sähköpostiosoite:"
+
+#: dialogs/rc.cpp:424 wizards/newuserwizard/rc.cpp:26
+#: wizards/wizardpages/rc.cpp:11
+msgid "Telephone:"
+msgstr "Puhelinnumero:"
+
+#: dialogs/rc.cpp:423 wizards/newuserwizard/rc.cpp:25
+#: wizards/wizardpages/rc.cpp:12
+msgid "Your name:"
+msgstr "Nimi:"
+
+#: dialogs/rc.cpp:427 wizards/newuserwizard/rc.cpp:29
+#: wizards/wizardpages/rc.cpp:13
+msgid "Load from Addressbook"
+msgstr "Lataa osoitekirjasta"
+
+#: dialogs/rc.cpp:392 dialogs/rc.cpp:426 views/rc.cpp:68
+#: wizards/wizardpages/rc.cpp:14
+msgid "Postal Code:"
+msgstr "Postinumero:"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:82
+msgid "KMyMoney New Account Setup"
+msgstr "Uuden tilin avaus"
+
+#: dialogs/rc.cpp:360 dialogs/rc.cpp:361 reports/listtable.cpp:230
+#: wizards/newaccountwizard/knewaccountwizard.cpp:83
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1616
+#: wizards/newaccountwizard/rc.cpp:61
+msgid "Institution"
+msgstr "Rahalaitos"
+
+#: dialogs/investactivities.cpp:198 dialogs/investactivities.cpp:286
+#: dialogs/investactivities.cpp:367 dialogs/kfindtransactiondlg.cpp:181
+#: dialogs/rc.cpp:139 dialogs/rc.cpp:192 dialogs/rc.cpp:207
+#: dialogs/transactioneditor.cpp:734 reports/listtable.cpp:201
+#: reports/pivottable.cpp:1336 reports/pivottable.cpp:1586
+#: views/kforecastview.cpp:393 views/kgloballedgerview.cpp:175
+#: views/khomeview.cpp:418 views/khomeview.cpp:491 views/khomeview.cpp:525
+#: views/khomeview.cpp:764 views/khomeview.cpp:967 views/khomeview.cpp:1437
+#: views/kscheduledview.cpp:71 views/rc.cpp:17 views/rc.cpp:44
+#: widgets/kmymoneyaccounttreebase.cpp:58
+#: widgets/kmymoneyaccounttreeforecast.cpp:41 widgets/rc.cpp:109
+#: widgets/register.cpp:566 widgets/transaction.cpp:978
+#: widgets/transaction.cpp:1535
+#: wizards/newaccountwizard/knewaccountwizard.cpp:84
+msgid "Account"
+msgstr "Tili"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:85
+msgid "Broker"
+msgstr "Kaupanvälittäjä"
+
+#: dialogs/kfindtransactiondlg.cpp:225 dialogs/rc.cpp:70 dialogs/rc.cpp:104
+#: dialogs/rc.cpp:159 dialogs/rc.cpp:223 dialogs/rc.cpp:246 dialogs/rc.cpp:751
+#: dialogs/settings/rc.cpp:109 widgets/rc.cpp:35 widgets/register.cpp:568
+#: wizards/newaccountwizard/knewaccountwizard.cpp:86
+msgid "Details"
+msgstr "Selite"
+
+#: dialogs/knewloanwizard.cpp:636 dialogs/rc.cpp:231 dialogs/rc.cpp:608
+#: kmymoneyutils.cpp:191 views/khomeview.cpp:399
+#: wizards/newaccountwizard/knewaccountwizard.cpp:87
+#: wizards/newaccountwizard/knewaccountwizard.cpp:880
+msgid "Payments"
+msgstr "Maksut"
+
+#: dialogs/investactivities.cpp:195 dialogs/investactivities.cpp:283
+#: dialogs/investactivities.cpp:422 dialogs/investtransactioneditor.cpp:217
+#: reports/listtable.cpp:221 widgets/transaction.cpp:1565
+#: wizards/newaccountwizard/knewaccountwizard.cpp:88
+msgid "Fees"
+msgstr "Palkkiot"
+
+#: dialogs/rc.cpp:624 views/khomeview.cpp:415 views/khomeview.cpp:488
+#: views/khomeview.cpp:522 wizards/newaccountwizard/knewaccountwizard.cpp:89
+msgid "Schedule"
+msgstr ""
+"Ajoitetut\n"
+"tapahtumat"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:90
+msgid "Payout"
+msgstr "Maksu"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:91
+msgid "Parent Account"
+msgstr "Ylätason tili"
+
+#: dialogs/rc.cpp:719 wizards/newaccountwizard/knewaccountwizard.cpp:92
+#: wizards/newuserwizard/knewuserwizard.cpp:86
+msgid "Finish"
+msgstr "Valmis"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:248
+msgid "Credit card payment"
+msgstr "Luottokorttimaksu"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:264
+#, c-format
+msgid "Loan payment for %1"
+msgstr "Lainan %1 maksu"
+
+#: mymoney/mymoneyscheduled.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:279
+msgid "Loan payment"
+msgstr "Lainan %1 maksu"
+
+#: dialogs/rc.cpp:134 wizards/newaccountwizard/knewaccountwizard.cpp:293
+msgid "Amortization"
+msgstr "Lyhennyserä"
+
+#: dialogs/investactivities.cpp:196 dialogs/investactivities.cpp:284
+#: dialogs/investactivities.cpp:366 dialogs/investactivities.cpp:423
+#: dialogs/investtransactioneditor.cpp:227 dialogs/rc.cpp:135
+#: dialogs/rc.cpp:152 dialogs/rc.cpp:544 reports/listtable.cpp:222
+#: widgets/transaction.cpp:1597
+#: wizards/newaccountwizard/knewaccountwizard.cpp:302
+msgid "Interest"
+msgstr "Korko"
+
+#: dialogs/kcurrencycalculator.cpp:282
+#: wizards/newaccountwizard/knewaccountwizard.cpp:351
+#: wizards/newaccountwizard/knewaccountwizard.cpp:356
+msgid "User"
+msgstr "Käyttäjä"
+
+#: kmymoneyutils.cpp:64 mymoney/mymoneyaccount.cpp:711
+#: reports/querytabletest.cpp:422
+#: wizards/newaccountwizard/knewaccountwizard.cpp:451
+msgid "Checking"
+msgstr "Sekit"
+
+#: kmymoneyutils.cpp:66 mymoney/mymoneyaccount.cpp:714
+#: wizards/newaccountwizard/knewaccountwizard.cpp:452
+msgid "Savings"
+msgstr "Säästöt"
+
+#: kmymoneyutils.cpp:68 mymoney/mymoneyaccount.cpp:717
+#: reports/querytabletest.cpp:423
+#: wizards/newaccountwizard/knewaccountwizard.cpp:453
+msgid "Credit Card"
+msgstr "Luottokortti"
+
+#: kmymoneyutils.cpp:70 mymoney/mymoneyaccount.cpp:720
+#: wizards/newaccountwizard/knewaccountwizard.cpp:454
+msgid "Cash"
+msgstr "Käteinen"
+
+#: kmymoneyutils.cpp:72 mymoney/mymoneyaccount.cpp:723
+#: wizards/newaccountwizard/knewaccountwizard.cpp:455
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+msgid "Loan"
+msgstr "Lainat"
+
+#: kmymoneyutils.cpp:76 mymoney/mymoneyaccount.cpp:729
+#: wizards/newaccountwizard/knewaccountwizard.cpp:456
+msgid "Investment"
+msgstr "Sijoitukset"
+
+#: converter/mymoneytemplate.cpp:178 converter/mymoneytemplate.cpp:179
+#: dialogs/knewaccountdlg.cpp:1014 kmymoneyutils.cpp:80
+#: mymoney/mymoneyaccount.cpp:735 views/kaccountsview.cpp:352
+#: views/kmymoneyview.cpp:765 widgets/kmymoneyaccountselector.cpp:177
+#: widgets/kmymoneyaccountselector.cpp:356
+#: wizards/newaccountwizard/knewaccountwizard.cpp:457
+msgid "Asset"
+msgstr "Varat"
+
+#: converter/mymoneytemplate.cpp:182 converter/mymoneytemplate.cpp:183
+#: dialogs/knewaccountdlg.cpp:1016 kmymoneyutils.cpp:82
+#: mymoney/mymoneyaccount.cpp:738 views/kaccountsview.cpp:356
+#: views/kmymoneyview.cpp:766 widgets/kmymoneyaccountselector.cpp:178
+#: widgets/kmymoneyaccountselector.cpp:363
+#: wizards/newaccountwizard/knewaccountwizard.cpp:458
+msgid "Liability"
+msgstr "Velat"
+
+#: converter/mymoneytemplate.cpp:194 converter/mymoneytemplate.cpp:195
+#: kmymoneyutils.cpp:94 mymoney/mymoneyaccount.cpp:756
+#: views/kaccountsview.cpp:369 views/kmymoneyview.cpp:769
+#: widgets/kmymoneyaccountselector.cpp:181
+#: widgets/kmymoneyaccountselector.cpp:390
+#: wizards/newaccountwizard/knewaccountwizard.cpp:460
+msgid "Equity"
+msgstr "Pääoma"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid ""
+"Please make sure to enter the correct conversion for the selected opening "
+"date. If you requested an online quote it might be provided for a different "
+"date."
+msgstr ""
+"Varmista, että käytössä on oikea kurssi valitulle avauspäivälle. Online-"
+"noteeraukset voivat olla eri päivälle."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid "Check date"
+msgstr "Sekin päiväys"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:562
+msgid "1 %1 equals %2"
+msgstr "1 %1 vastaa %2"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:577
+msgid "Conversion rate is not positive"
+msgstr "Muuntosuhde ei ole positiivinen."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:583
+msgid "No account name supplied"
+msgstr "Tilin nimeä ei ole annettu."
+
+#: dialogs/keditscheduledlg.cpp:114 mymoney/mymoneyscheduled.cpp:1026
+#: wizards/newaccountwizard/knewaccountwizard.cpp:680
+msgid "Write check"
+msgstr "Kirjoita sekki"
+
+#: dialogs/keditscheduledlg.cpp:111 mymoney/mymoneyscheduled.cpp:1014
+#: wizards/newaccountwizard/knewaccountwizard.cpp:682
+msgid "Direct debit"
+msgstr "Suoraveloitus"
+
+#: dialogs/keditscheduledlg.cpp:113 mymoney/mymoneyscheduled.cpp:1032
+#: wizards/newaccountwizard/knewaccountwizard.cpp:683
+msgid "Bank transfer"
+msgstr "Tilisiirto"
+
+#: dialogs/keditscheduledlg.cpp:112 mymoney/mymoneyscheduled.cpp:1029
+#: wizards/newaccountwizard/knewaccountwizard.cpp:685
+msgid "Standing order"
+msgstr "Voimassaoleva tilaus"
+
+#: dialogs/keditscheduledlg.cpp:110 mymoney/mymoneyscheduled.cpp:1020
+#: wizards/newaccountwizard/knewaccountwizard.cpp:686
+msgid "Manual deposit"
+msgstr "Käteistalletus"
+
+#: dialogs/keditscheduledlg.cpp:109 mymoney/mymoneyscheduled.cpp:1017
+#: wizards/newaccountwizard/knewaccountwizard.cpp:687
+msgid "Direct deposit"
+msgstr "Suoratalletus"
+
+#: dialogs/keditscheduledlg.cpp:115 mymoney/mymoneyscheduled.cpp:1023
+#: wizards/newaccountwizard/knewaccountwizard.cpp:688
+msgid "Other"
+msgstr "Muu"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:697
+msgid "CreditCard %1 monthly payment"
+msgstr "Luottokortin %1 kuukausimaksu"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:703
+msgid "Finish entry and create account"
+msgstr "Lopeta syöttö ja luo tili."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:705
+msgid "Finish entry and create account and schedule"
+msgstr "Lopeta syöttö, luo tili ja ajoitetut tapahtumat."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:708
+msgid "Next due date is prior to opening date"
+msgstr "Seuraava eräpäivä on ennen avauspäivää"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:712
+msgid "No account selected"
+msgstr "Tiliä ei ole valittu"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:716
+msgid "No amount for payment selected"
+msgstr "Maksumäärää ei ole valittu"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:720
+msgid "No payee for payment selected"
+msgstr "Maksunsaajaa ei ole valittu"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:724
+msgid "No name assigned for schedule"
+msgstr "Ajoitetulle tapahtumalle ei ole syötetty nimeä "
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:805
+msgid "No payee supplied"
+msgstr "Maksunsaajaa ei ole annettu"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:819
+msgid "No opening balance supplied"
+msgstr "Avaussaldoa ei ole syötetty"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:826
+msgid "An interest change can only happen after the first payment"
+msgstr "Koronmuutos on mahdollinen vasta ensimmäisen maksun jälkeen."
+
+#: dialogs/knewloanwizard.cpp:615 dialogs/knewloanwizard.cpp:634
+#: wizards/newaccountwizard/knewaccountwizard.cpp:884
+#: wizards/newaccountwizard/rc.cpp:55
+msgid "Months"
+msgstr "Kuukautta"
+
+#: dialogs/knewloanwizard.cpp:616 dialogs/knewloanwizard.cpp:635
+#: wizards/newaccountwizard/knewaccountwizard.cpp:885
+#: wizards/newaccountwizard/knewaccountwizard.cpp:889
+#: wizards/newaccountwizard/rc.cpp:56
+msgid "Years"
+msgstr "Vuotta"
+
+#: dialogs/knewloanwizard.cpp:711
+#: wizards/newaccountwizard/knewaccountwizard.cpp:961
+#, c-format
+msgid "KMyMoney has calculated the amount of the loan as %1."
+msgstr "Lainan summaksi on laskettu %1."
+
+#: dialogs/knewloanwizard.cpp:718
+#: wizards/newaccountwizard/knewaccountwizard.cpp:968
+msgid "KMyMoney has calculated the interest rate to %1%."
+msgstr "Lainan korkoprosentiksi on laskettu %1%."
+
+#: dialogs/knewloanwizard.cpp:731
+#: wizards/newaccountwizard/knewaccountwizard.cpp:981
+msgid ""
+"KMyMoney has calculated a periodic payment of %1 to cover principal and "
+"interest."
+msgstr ""
+"Lainan säännölliseksi maksueräksi on laskettu %1 (sisältäen lyhennykset ja "
+"korot)."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:993
+#, c-format
+msgid ""
+"The number of payments has been decremented and the balloon payment has been "
+"modified to %1."
+msgstr "Maksuerien määrää on vähennetty ja viimeiseksi maksueräksi on muutettu %1."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1001
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1021
+#, c-format
+msgid "The balloon payment has been modified to %1."
+msgstr "Viimeiseksi maksueräksi on muutettu %1."
+
+#: dialogs/knewloanwizard.cpp:763
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1013
+msgid "KMyMoney has calculated the term of your loan as %1. "
+msgstr "Laina-ajaksi on laskettu %1."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1052
+msgid "KMyMoney has calculated a balloon payment of %1 for this loan."
+msgstr "Lainan viimeiseksi maksueräksi on laskettu %1."
+
+#: dialogs/knewloanwizard.cpp:809
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1059
+msgid "KMyMoney has successfully verified your loan information."
+msgstr "Syöttämissäsi tiedoissa ei havaittu ristiriitaisuuksia."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1067
+msgid ""
+"You have entered mis-matching information. Please modify your figures or "
+"leave one value empty to let KMyMoney calculate it for you"
+msgstr ""
+"On syötetty ristiriitaista tietoa. Korjaa tietoja tai jätä joku arvo "
+"antamatta, jolloin se lasketaan automaattisesti. "
+
+#: dialogs/knewloanwizard.cpp:504 dialogs/knewloanwizard.cpp:513
+#: dialogs/knewloanwizard.cpp:522 dialogs/knewloanwizard.cpp:532
+#: dialogs/knewloanwizard.cpp:820
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1070
+msgid "Calculation error"
+msgstr "Laskentavirhe"
+
+#: dialogs/knewloanwizard.cpp:824
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1074
+msgid ""
+"\n"
+"\n"
+"Accept this or modify the loan information and recalculate."
+msgstr ""
+"\n"
+"\n"
+"Hyväksy tiedot, tai muokkaa niitä ja laske uudelleen."
+
+#: dialogs/knewloanwizard.cpp:826
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1076
+msgid "Calculation successful"
+msgstr "Laskenta onnistui"
+
+#: dialogs/knewloanwizard.cpp:846
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1129
+#, c-format
+msgid ""
+"_n: one month\n"
+"%n months"
+msgstr "%n kuukausia"
+
+#: dialogs/knewloanwizard.cpp:850
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1133
+#, c-format
+msgid ""
+"_n: one year\n"
+"%n years"
+msgstr "%n vuosia"
+
+#: dialogs/knewloanwizard.cpp:854
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1137
+#, c-format
+msgid ""
+"_n: one payment\n"
+"%n payments"
+msgstr "%n maksuja"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1190
+msgid "Press Calculate to verify the values"
+msgstr "Arvojen tarkistamiseksi paina Laske-painiketta ruudulla"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1194
+msgid "Not all details supplied"
+msgstr "Kaikkia tietoja ei ole syötetty"
+
+#: dialogs/kaccountselectdlg.cpp:70 dialogs/knewloanwizard.cpp:122
+#: dialogs/knewloanwizard.cpp:136
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1381
+msgid "&Create..."
+msgstr "&Luo..."
+
+#: dialogs/knewloanwizard.cpp:138
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1383
+msgid "Create a new asset account"
+msgstr "Luo uusi varallisuustili"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1384
+msgid "If the asset account does not yet exist, press this button to create it."
+msgstr "Jos varallisuus-tiliä ei vielä ole olemassa, paina tätä nappia luodaksesi se."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1596
+msgid "Account information"
+msgstr "Tilitiedot"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1601
+#: wizards/newaccountwizard/rc.cpp:59
+msgid "Subaccount of"
+msgstr "Alatason tili"
+
+#: dialogs/rc.cpp:225 dialogs/rc.cpp:326 dialogs/rc.cpp:371 dialogs/rc.cpp:723
+#: plugins/ofximport/dialogs/rc.cpp:23 reports/listtable.cpp:225
+#: widgets/kmymoneyaccounttreebase.cpp:113 widgets/register.cpp:61
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1606
+msgid "Type"
+msgstr "Tyyppi"
+
+#: dialogs/kcurrencyeditdlg.cpp:62 dialogs/rc.cpp:56 dialogs/rc.cpp:59
+#: dialogs/rc.cpp:75 dialogs/rc.cpp:727 dialogs/rc.cpp:792
+#: kmymoneyutils.cpp:84 kmymoneyutils.cpp:111 mymoney/mymoneyaccount.cpp:741
+#: mymoney/mymoneysecurity.cpp:169 reports/listtable.cpp:233
+#: widgets/kmymoneypriceview.cpp:127
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1607
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1630
+#: wizards/newaccountwizard/rc.cpp:6 wizards/newaccountwizard/rc.cpp:24
+msgid "Currency"
+msgstr "Valuutta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1608
+#: wizards/newaccountwizard/rc.cpp:7 wizards/newuserwizard/rc.cpp:9
+msgid "Opening date"
+msgstr "Avauspäivä"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1610
+#: wizards/newaccountwizard/rc.cpp:9
+msgid "Conversion rate"
+msgstr "Muuntokurssi"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1613
+#: wizards/newaccountwizard/rc.cpp:15 wizards/newuserwizard/rc.cpp:13
+msgid "Opening balance"
+msgstr "Alkusaldo"
+
+#: dialogs/keditscheduledlg.cpp:507 dialogs/transactioneditor.cpp:784
+#: dialogs/transactioneditor.cpp:848 plugins/ofximport/dialogs/rc.cpp:22
+#: widgets/rc.cpp:111 widgets/register.cpp:59 widgets/transaction.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1618
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1632
+msgid "Number"
+msgstr "Numero"
+
+#: dialogs/rc.cpp:365 wizards/newaccountwizard/knewaccountwizard.cpp:1621
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1634
+#: wizards/newaccountwizard/rc.cpp:26 wizards/newaccountwizard/rc.cpp:66
+msgid "IBAN"
+msgstr "IBAN"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1627
+msgid "Brokerage Account"
+msgstr "Välityspalkkiotili"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1640
+msgid "Loan information"
+msgstr "Lainatiedot"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1643
+msgid "Amount borrowed"
+msgstr "Ottolainan määrä"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1645
+msgid "Amount lent"
+msgstr "Antolainan määrä"
+
+#: dialogs/rc.cpp:515 dialogs/rc.cpp:546
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1647
+#: wizards/newaccountwizard/rc.cpp:75
+msgid "Interest rate"
+msgstr "Korkoprosentti"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1648
+msgid "Interest rate is"
+msgstr "Korkoprosentti on"
+
+#: dialogs/rc.cpp:509 dialogs/rc.cpp:572
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1649
+msgid "Principal and interest"
+msgstr "Pääoma ja korko"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1650
+#: wizards/newaccountwizard/rc.cpp:90
+msgid "Additional fees"
+msgstr "Lisämaksut"
+
+#: dialogs/rc.cpp:525 wizards/newaccountwizard/knewaccountwizard.cpp:1651
+#: wizards/newaccountwizard/rc.cpp:44
+msgid "Payment frequency"
+msgstr "Maksujen toistuvuus"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1652
+#: wizards/newaccountwizard/rc.cpp:105
+msgid "Payment account"
+msgstr "Maksutili"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1655
+msgid "Payout information"
+msgstr "Maksun tiedot"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1658
+msgid "Refinance"
+msgstr "Uudelleenrahoitus"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1661
+msgid "Transfer amount to"
+msgstr "Siirrä summa tilille"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1663
+msgid "Transfer amount from"
+msgstr "Siirrä summa tililtä"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1665
+msgid "Payment date"
+msgstr "Maksupäivä"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1671
+msgid "Schedule information"
+msgstr "Tietoa ajoitetusta tapahtumasta"
+
+#: reports/listtable.cpp:228
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1684
+msgid "Occurence"
+msgstr "Toistuvuus"
+
+#: mymoney/mymoneyscheduled.cpp:891 mymoney/mymoneyscheduled.cpp:947
+#: mymoney/mymoneyscheduled.cpp:1283 mymoney/mymoneyscheduletest.cpp:1343
+#: widgets/rc.cpp:19 widgets/rc.cpp:74
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+msgid "Monthly"
+msgstr "Kuukausittain"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1677
+msgid "Paid from"
+msgstr "Maksetaan tililtä"
+
+#: widgets/kmymoneycombo.cpp:473 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1678
+msgid "Pay to"
+msgstr "Saaja"
+
+#: dialogs/investactivities.cpp:197 dialogs/investactivities.cpp:285
+#: dialogs/investactivities.cpp:365 dialogs/kfindtransactiondlg.cpp:197
+#: dialogs/kmymoneysplittable.cpp:80 dialogs/rc.cpp:51 dialogs/rc.cpp:212
+#: reports/listtable.cpp:197 views/khomeview.cpp:421 views/khomeview.cpp:494
+#: views/khomeview.cpp:528 views/kscheduledview.cpp:73 views/rc.cpp:63
+#: widgets/register.cpp:58 widgets/transaction.cpp:1055
+#: widgets/transaction.cpp:1578 widgets/transaction.cpp:1610
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1679
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1685
+msgid "Amount"
+msgstr "Määrä"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1680
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1686
+msgid "First payment due"
+msgstr "Ensimmäinen maksu erääntyy"
+
+#: dialogs/rc.cpp:102 wizards/newaccountwizard/knewaccountwizard.cpp:1681
+#: wizards/newaccountwizard/rc.cpp:115
+msgid "Payment method"
+msgstr "Maksutapa"
+
+#: wizards/newaccountwizard/rc.cpp:1
+msgid ""
+"This page summarizes the data you have entered. Press <b>Finish</b> to "
+"create the account, schedules, etc. or use <b>Back</b> to modify your "
+"entries."
+msgstr ""
+"Tämä sivu on yhteenveto tiedoista jotka olet syöttänyt. Jatka <b>Valmis</b>-"
+"painikkeella jolloin tili, ajoitetut tapahtumat ym. luodaan, tai paina "
+"<b>Takaisin</b>-painiketta muuttaaksesi tietoja."
+
+#: wizards/newaccountwizard/rc.cpp:2
+msgid "Item"
+msgstr "Erä"
+
+#: dialogs/rc.cpp:110 dialogs/rc.cpp:165 dialogs/rc.cpp:252 dialogs/rc.cpp:757
+#: dialogs/rc.cpp:818 views/kinvestmentview.cpp:74 widgets/register.cpp:574
+#: wizards/newaccountwizard/rc.cpp:3
+msgid "Value"
+msgstr "Arvo"
+
+#: wizards/newaccountwizard/rc.cpp:4
+msgid ""
+"Enter the name of the account under which it is known within KMyMoney.\n"
+"Select the type for the new account. Use the <b>What's this?</b> feature to "
+"see more details about the various account types.\n"
+"Enter the date the account was opened and its currency."
+msgstr ""
+"Syötä tilin nimi kuten se ohjelmassa tunnetaan. Valitse myös tilityyppi "
+"uudelle tilille. <b>Mikä tämä on?</b> -toiminnon avulla saadaan lisätietoja "
+"eri tilityypeistä.\n"
+"Anna tilin avauspäivä ja käytettävä valuutta."
+
+#: wizards/newaccountwizard/rc.cpp:5
+msgid "Select the currency in which this account is denominated."
+msgstr "Valitse tilillä käytettävä valuutta."
+
+#: wizards/newaccountwizard/rc.cpp:8
+msgid ""
+"The opening balance is the balance of the account when you start using it "
+"with KMyMoney. For new accounts this is usually 0 but for existing accounts "
+"this may well differ. Please consult the account statements to figure out "
+"this value. The opening balance is to be provided in the currency of the "
+"account as selected with the currency button."
+msgstr ""
+"Alkusaldo on tilin saldo sillä hetkellä kun sen käyttäminen aloitetaan. "
+"Uusille tileille se on tavallisesti 0, mutta olemassa oleville tileille se "
+"voi olla jotain muuta. Tarkista tiliotteesta oikea arvo. Alkusaldona tulee "
+"käyttää samaa valuuttaa kuin käytettiin tilin asetuksissa."
+
+#: wizards/newaccountwizard/rc.cpp:10
+msgid ""
+"The opening date would be the date of the last statement. In case you want "
+"to keep track of transactions prior to this date, enter the ending balance "
+"and statement date of a prior statement and add all following transactions "
+"into KMyMoney.\n"
+"<br>\n"
+"<i>Note</i>: If you do not know the exact amount of the opening balance, "
+"enter an estimate. You can change this value later before you reconcile this "
+"account for the first time."
+msgstr ""
+"Avauspäivä pitäisi olla sama kuin viimeisen tiliotteen päiväys. Jos haluat "
+"pitää kirjaa aiemmista tapahtumista alkaen, syötä aiemman päätöspäivän saldo "
+"ja päivä, sekä kaikki sen jälkeiset tapahtumat.\n"
+"<br>\n"
+"<i>Huomautus</i>: Jos et tiedä tarkkaa saldoa, syötä arvio siitä. Voit "
+"myöhemmin muuttaa sitä samalla kun yhteensovitat tiliä."
+
+#: dialogs/rc.cpp:52 dialogs/rc.cpp:54 dialogs/rc.cpp:57 dialogs/rc.cpp:60
+#: dialogs/rc.cpp:748 dialogs/rc.cpp:749 dialogs/rc.cpp:768 widgets/rc.cpp:6
+#: widgets/rc.cpp:7 widgets/rc.cpp:8 widgets/rc.cpp:9 widgets/rc.cpp:10
+#: widgets/rc.cpp:11 widgets/rc.cpp:12 widgets/rc.cpp:13 widgets/rc.cpp:14
+#: widgets/rc.cpp:15 widgets/rc.cpp:16 widgets/rc.cpp:17
+#: wizards/newaccountwizard/rc.cpp:11 wizards/newaccountwizard/rc.cpp:88
+#: wizards/newaccountwizard/rc.cpp:91 wizards/newaccountwizard/rc.cpp:93
+#: wizards/newuserwizard/rc.cpp:14
+msgid "xxx"
+msgstr "xxx"
+
+#: wizards/newaccountwizard/rc.cpp:12
+msgid "Account type"
+msgstr "Tilin tyyppi"
+
+#: wizards/newaccountwizard/rc.cpp:13
+msgid ""
+"For foreign currencies an initial conversion rate needs to be provided. This "
+"should be the price of the foreign currency in the base currency on the "
+"opening date of the account."
+msgstr ""
+"Ulkomaanvaluutoille tulee antaa alustava muuntokurssi. Tämän tulee olla "
+"ulkomaanvaluutan hinta paikallisessa valuutassa tilinavauspäivänä."
+
+#: wizards/newaccountwizard/rc.cpp:14
+msgid "Account name"
+msgstr "Tilin nimi"
+
+#: wizards/newaccountwizard/rc.cpp:16
+msgid ""
+"<p><b>Checking</b>\n"
+"Use the checking account type to manage activities on your checking account "
+"e.g. payments, checks and cash card purchases.</p>\n"
+"\n"
+"<p><b>Savings</b>\n"
+"Use the savings account type to manage activities on your savings account.</"
+"p>\n"
+"\n"
+"<p><b>Credit Card</b>\n"
+"Use the credit card account type to manage activities on your credit card.</"
+"p>\n"
+"\n"
+"<p><b>Cash</b>\n"
+"\n"
+"Use the cash account type to manage activities in your wallet.</p>\n"
+"\n"
+"<p><b>Loan</b>\n"
+"Use the loan account type to manage amortization loans (e.g. mortgages, car "
+"loan, money you lend, private loans etc.).</p>\n"
+"\n"
+"<p><b>Investment</b>\n"
+"Use the investment account to manage your stock, mutual fund and other "
+"investments.</p>\n"
+"\n"
+"<p><b>Asset</b>\n"
+"Use the asset account type to manage assets (e.g. your house, car or art "
+"collection).</p>\n"
+"\n"
+"<p><b>Liability</b>\n"
+"Use the liability account type to manage any type of liability except "
+"amortization loans. Use it for taxes you owe or money you borrowed from "
+"friends. For amortization loans like mortgages you should create a loan "
+"account.</p>"
+msgstr ""
+"<p><b>Sekki</b>\n"
+"Sekkitilityyppiä käytetään sekkitilin tapahtumien kirjaamiseen. Tällaisia "
+"tapahtumia ovat esimerkiksi maksut, sekä sekki- ja lahjakorttiostokset.</p>\n"
+"\n"
+"<p><b>Säästöt</b>\n"
+"Säästötilityyppiä käytetään säästötilin tapahtumien kirjaamiseen.</p>\n"
+"\n"
+"<p><b>Luottokortti</b>\n"
+"Luottokorttitilityyppiä käytetään luottokorttitapahtumien kirjaamiseen.</p>\n"
+"\n"
+"<p><b>Käteinen</b>\n"
+"\n"
+"Käteistilityyppiä käytetään käteistapahtumien kirjaamiseen.</p>\n"
+"\n"
+"<p><b>Laina</b>\n"
+"Lainatilityyppiä käytetään luottolaitosten myöntämien lainojen kirjaamiseen. "
+"Tällaisia lainoja voivat olla esimerkiksi asuntolaina, autolaina, "
+"käyttölaina tai muut korkoa vastaan lainatut rahat.</p>\n"
+"\n"
+"<p><b>Sijoitus</b>\n"
+"Sijoitustilityyppiä käytetään osakkeiden, rahastojen ja muiden sijoitusten "
+"kirjaamiseen.</p>\n"
+"\n"
+"<p><b>Varat</b>\n"
+"Varallisuustilityyppiä käytetään omaisuuden hallintaan (esimerkiksi asunto, "
+"auto tai muu varallisuus).</p>\n"
+"\n"
+"<p><b>Velka</b>\n"
+"Velkatilityyppiä käytetään kaikkien muiden paitsi luottolaitosten myöntämien "
+"velkojen kirjaamiseen. Tällaisia tapahtumia ovat esimerkiksi verovelat tai "
+"ystäviltä lainatut rahat. Luottolaitosten myöntämien lainojen kirjaamiseen "
+"tulee käyttää lainatilityyppiä.</p>"
+
+#: wizards/newaccountwizard/rc.cpp:17
+msgid "Preferred account"
+msgstr "Suosikkitili"
+
+#: wizards/newaccountwizard/rc.cpp:18
+msgid "Mark this checkbox if the account should be maintained as preferred account"
+msgstr "Rastita tämä valintaruutu jos tiliä tulisi kohdella suosikkitilinä."
+
+#: wizards/newaccountwizard/rc.cpp:19
+msgid ""
+"Selecting the <b>Preferred Account</b> checkbox will allow preferred access "
+"in some dialogs and views of KMyMoney."
+msgstr ""
+"Rastittamalla <b>suosikkitili</b>-valintaruudun tiliin pääsee helpommin "
+"käsiksi joissakin ikkunoissa ja valintanäkymissä."
+
+#: wizards/newaccountwizard/rc.cpp:20
+msgid "Enter a name under which this account is known within KMyMoney."
+msgstr "Syötä tilin nimi alle, jolla se tunnetaan ohjelmassa."
+
+#: wizards/newaccountwizard/rc.cpp:21
+msgid "Online quote"
+msgstr "Online-noteeraukset"
+
+#: wizards/newaccountwizard/rc.cpp:22
+msgid ""
+"Does this investment account have a brokerage account?<p>\n"
+"\n"
+"<b>Check</b> the mark if this investment account has an associated account "
+"for money that is not invested.<br>\n"
+"\n"
+"<b>Uncheck</b> it if you don't use this account for active stock brokerage. "
+"You should also uncheck it if this account is not maintained by a bank or "
+"broker."
+msgstr ""
+"Onko tällä sijoitustilillä välityspalkkiotiliä?<p>\n"
+"\n"
+"<b>Rastita</b> valintaruutu jos tähän sijoitustiliin on liitetty tili joka "
+"ei ole sijoitustili.<br>\n"
+"\n"
+"<b>Älä rastita</b> ruutua jos et käytä tätä tiliä aktiivisesti "
+"pörssivälityspalkkioille. Jätä ruutu rastittamata myös jos pankki tai "
+"välittäjä ei hoida tätä tiliä."
+
+#: wizards/newaccountwizard/rc.cpp:23
+msgid "Create brokerage account"
+msgstr "Luo välityspalkkiotili"
+
+#: wizards/newaccountwizard/rc.cpp:25 wizards/newaccountwizard/rc.cpp:64
+msgid "Account number"
+msgstr "Tilinumero"
+
+#: wizards/newaccountwizard/rc.cpp:27
+msgid ""
+"Please select the required options. Please use the <b>What's this?</b> "
+"feature to see more information about the items."
+msgstr ""
+"Valitse tarvittavat vaihtoehdot. Käytä <b>Mikä tämä on?</b> -ominaisuutta "
+"nähdäksesi lisätietoja eri kohdista."
+
+#: wizards/newaccountwizard/rc.cpp:28
+msgid "What is the type of the loan?"
+msgstr "Mikä lainatyyppi?"
+
+#: dialogs/rc.cpp:481 wizards/newaccountwizard/rc.cpp:29
+msgid "I am borrowing money"
+msgstr "Lainaan rahaa"
+
+#: dialogs/rc.cpp:482 wizards/newaccountwizard/rc.cpp:30
+msgid "I am lending money"
+msgstr "Annan lainaksi rahaa"
+
+#: wizards/newaccountwizard/rc.cpp:31
+msgid "Who is the payee/payer of the loan?"
+msgstr "Kuka on maksunsaaja/ maksaja lainalle ?"
+
+#: wizards/newaccountwizard/rc.cpp:32
+msgid ""
+"Enter the name of the person or bank you owe money or who owes you money.\n"
+"\n"
+"If the name does not exist within KMyMoney's database, you are asked if you "
+"want to create it."
+msgstr ""
+"Syötä henkilön tai pankin nimi jolle olet velkaa tai joka on velkaa "
+"sinulle.\n"
+"\n"
+"Jos nimeä ei ole valmiina tietokannassa, sen lisääminen varmistetaan "
+"erikseen."
+
+#: wizards/newaccountwizard/rc.cpp:33
+msgid "Did you make/receive any payments yet?"
+msgstr "Onko maksueriä vielä maksettu tai vastaanotettu?"
+
+#: wizards/newaccountwizard/rc.cpp:36
+msgid ""
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?\n"
+"\n"
+"Note: Payments made to obtain the loan (e.g. Disagio) are not considered as "
+"payments in this context."
+msgstr ""
+"Onko maksueriä maksettu vielä? (Riippumatta siitä, onko niitä kirjattu "
+"KMyMoney-ohjelmaan vai ei.)\n"
+"\n"
+"Huom. Lainan avausmaksuja ei katsota maksueriksi tässä yhteydessä."
+
+#: wizards/newaccountwizard/rc.cpp:37
+msgid "Which payments do you want to record?"
+msgstr "Mitkä maksut kirjataan ylös?"
+
+#: wizards/newaccountwizard/rc.cpp:38
+msgid "All payments"
+msgstr "Kaikki maksut"
+
+#: wizards/newaccountwizard/rc.cpp:39
+msgid "Start with this year's payments"
+msgstr "Aloita tämän vuoden maksuilla"
+
+#: wizards/newaccountwizard/rc.cpp:40
+msgid ""
+"<qt>Select which transactions should be recorded.\n"
+"\n"
+"<b>All payments</b> allows you to enter all payments made for this loan.\n"
+"\n"
+"The option to <b>start from the beginning of the current year</b> is meant "
+"for loans that are active for a longer period of time already and you don't "
+"want to enter all transactions of the past.\n"
+"</qt>"
+msgstr ""
+"<qt>Valitse mitkä maksut kirjataan ylös.\n"
+"\n"
+"<b>Kaikki maksut</b> -valinta sallii syöttämään kaikki maksut tätä lainaa "
+"varten.\n"
+"\n"
+"<b>Aloita kuluvan vuoden alusta</b> -valinta on tarkoitettu pitkäaikaisille "
+"lainoille joista ei haluta kirjata kaikkia tapahtumia.\n"
+"</qt>"
+
+#: wizards/newaccountwizard/rc.cpp:41
+msgid "Balance before start of recording"
+msgstr "Saldo ennen kirjausten aloittamista"
+
+#: wizards/newaccountwizard/rc.cpp:42
+msgid ""
+"Enter the ending balance found on the statement that is the last one before "
+"you want to start recording this loan in KMyMoney."
+msgstr ""
+"Syötä loppusaldo sitä edeltävästä tiliotteesta, mistä lähtien lainan "
+"kirjaaminen aloitetaan."
+
+#: wizards/newaccountwizard/rc.cpp:43
+msgid ""
+"You have selected to record only payments from the beginning of this year. "
+"Since prior transactions will not be recorded, you need to supply the "
+"balance of the loan on January 1st of this year."
+msgstr ""
+"On valittu maksujen kirjaaminen tämän vuoden alusta alkaen. Koska aiempia "
+"tapahtumia ei ole tallennettu, täytyy kirjata, paljonko lainapääoma oli "
+"tämän vuoden alussa."
+
+#: wizards/newaccountwizard/rc.cpp:45
+msgid "Interest Compounding frequency"
+msgstr "Koron erääntymistiheys"
+
+#: wizards/newaccountwizard/rc.cpp:46
+msgid ""
+"Select the frequency with which the interest is compounded. If uncertain, "
+"select the same as the payment frequency. Consult your loan contract for "
+"details."
+msgstr ""
+"Valitse kuinka useasti korko erääntyy. Jos se ei ole tarkkaan tiedossa, "
+"valitse sama toistuvuus kuin maksujen toistuvuus. Tarkista tarvittaessa "
+"yksityiskohdat lainasopimuksesta."
+
+#: wizards/newaccountwizard/rc.cpp:47
+msgid "Due date of first payment to be recorded"
+msgstr "Ensimmäisen ylöskirjattavan maksuerän eräpäivä."
+
+#: wizards/newaccountwizard/rc.cpp:48
+msgid ""
+"Depending on the answer to <b>What do you want to record?</b> this field "
+"means the following:<p>\n"
+"\n"
+"<b>All payments</b><br>\n"
+"Enter the due date of the very first payment<p>\n"
+"\n"
+"<b>Start with this year's payments</b><br>\n"
+"Enter the due date of the first payment in the current year"
+msgstr ""
+"<b>Mitä haluat kirjata ylös?</b> -kysymyksen vastauksesta riippuen tämä "
+"kenttä merkitsee seuraavaa:<p>\n"
+"\n"
+"<b>Kaikki maksut</b><br>\n"
+"Syötä ensimmäisen maksun eräpäivä <p>\n"
+"\n"
+"<b>Aloita tämän vuoden maksuista</b><br>\n"
+"Syötä ensimmäisen maksun eräpäivä tänä vuonna"
+
+#: wizards/newaccountwizard/rc.cpp:49
+msgid "Type of interest rate"
+msgstr "Korkotyyppi"
+
+#: wizards/newaccountwizard/rc.cpp:50
+msgid "Fixed"
+msgstr "Kiinteä"
+
+#: wizards/newaccountwizard/rc.cpp:51
+msgid "Variable"
+msgstr "Muuttuva"
+
+#: wizards/newaccountwizard/rc.cpp:52
+msgid "Time between interest changes"
+msgstr "Koronmaksuväli vaihtelee"
+
+#: dialogs/knewloanwizard.cpp:613 wizards/newaccountwizard/rc.cpp:53
+msgid "Days"
+msgstr "Päivät"
+
+#: dialogs/knewloanwizard.cpp:614 wizards/newaccountwizard/rc.cpp:54
+msgid "Weeks"
+msgstr "Viikot"
+
+#: wizards/newaccountwizard/rc.cpp:57
+msgid "Next interest change is due"
+msgstr "Seuraava korontarkistuksen ajankohta"
+
+#: wizards/newaccountwizard/rc.cpp:58
+msgid "This page allows you to select the parent account."
+msgstr "Tältä sivulta voidaan valita ylätason tili."
+
+#: wizards/newaccountwizard/rc.cpp:60
+msgid ""
+"If this account is managed by an institution please select the institution "
+"from the list. If the institution does not exist yet, please choose the "
+"<b>New Institution</b> button to create it. Otherwise, leave this field "
+"empty.\n"
+"Enter the account number used by the institution to identify the account."
+msgstr ""
+"Jos jokin rahalaitos hallinnoi tätä tiliä, valitse se listasta. Jos "
+"rahalaitosta ei vielä ole, paina <b>Uusi rahalaitos</b>-painiketta "
+"ruudullaluodaksesi sen. Muutoin jätä kenttä tyhjäksi.\n"
+"Syötä tilinumero rahalaitoksessa oikean tilin tunnistamiseksi."
+
+#: wizards/newaccountwizard/rc.cpp:62
+msgid "Select the institution which manages this account or leave empty"
+msgstr "Valitse rahalaitos joka hoitaa tiliä, tai jätä kenttä tyhjäksi."
+
+#: wizards/newaccountwizard/rc.cpp:63
+msgid "New Institution"
+msgstr "Uusi rahalaitos"
+
+#: wizards/newaccountwizard/rc.cpp:65
+msgid ""
+"Accounts managed by an institution are usually referenced by a unique number "
+"the so called account number. Enter that number here.\n"
+"\n"
+"KMyMoney currently uses this number only for some online banking functions."
+msgstr ""
+"Rahalaitosten hallinnoimat tilit ovat yleensä yksilöity tilinumerolla. Syötä "
+"tilinumero tähän.\n"
+"\n"
+"Tilinumeroa käytetään ainoastaan online-pankkitoimintoihin."
+
+#: wizards/newaccountwizard/rc.cpp:67
+msgid "Enter the International Bank Account Number into this field"
+msgstr "Syötä IBAN -pankkitilinumero tähän kenttään"
+
+#: wizards/newaccountwizard/rc.cpp:68
+msgid ""
+"You can enter the IBAN (International Bank Account Number) into this field "
+"if you know it. Usually, people at your institution can tell you the number "
+"or it is printed on your statements.\n"
+"\n"
+"See also http://en.wikipedia.org/wiki/International_Bank_Account_Number for "
+"more information.\n"
+"\n"
+"KMyMoney keeps this field only for documentation purposes and does not use "
+"it otherwise."
+msgstr ""
+"Syötä tähän kenttään IBAN-tilinumero. Se löytyy todennäköisesti tiliotteesta "
+"tai voit kysyä sitä rahalaitoksestasi.\n"
+"\n"
+"Lisätietoja IBAN (International Bank Account Number) eli kansainvälisestä "
+"pankkitilinumerosta löydät http://fi.wikipedia.org/wiki/IBAN\n"
+"\n"
+"Tieto tallennetaan ainoastaan dokumentointia varten, eikä sitä käytetä "
+"muilla tavoin."
+
+#: wizards/newaccountwizard/rc.cpp:69
+msgid ""
+"Now enter the details for your loan. You can leave one of the fields empty "
+"and KMyMoney will calculate it when you press the <b>Calculate</b> button. "
+"Before you can continue with the next page you also need to press "
+"<b>Calculate</b> so that KMyMoney can check the logical correctness of the "
+"values you have supplied."
+msgstr ""
+"Syötä lainan yksityiskohdat. Yksi kentistä voidaan jättää tyhjäksi jolloin "
+"sen sisältö lasketaan kun painat <b>Laske</b>-painiketta. Jatkaaksesi "
+"seuraavalle sivulle, täytyy painaa myös <b>Laske</b>-painiketta, jotta "
+"syötettyjen tietojen oikeellisuus tarkistetaan. "
+
+#: wizards/newaccountwizard/rc.cpp:70
+msgid "The interest rate gets calculated"
+msgstr "Lasketaan korkoprosenttia..."
+
+#: wizards/newaccountwizard/rc.cpp:71
+msgid "when the payment is received"
+msgstr "kun maksu on vastaanotettu"
+
+#: wizards/newaccountwizard/rc.cpp:72
+msgid "when the payment is due"
+msgstr "kun maksu erääntyy"
+
+#: dialogs/rc.cpp:531 dialogs/rc.cpp:533 wizards/newaccountwizard/rc.cpp:73
+msgid "Loan amount"
+msgstr "Lainasumma"
+
+#: wizards/newaccountwizard/rc.cpp:74
+msgid ""
+"Enter the amount of the loan in this field. If you want to calculate this "
+"field out of the other parameters, please leave it empty. If the field is "
+"marked as required (colored background) you have informed KMyMoney about the "
+"fact that there were already some payments towards the loan. In this case, "
+"please enter the ending balance of your last statement."
+msgstr ""
+"Syötä lainasumma tähän kenttään. Jätä kenttä tyhjäksi jos halutaan että se "
+"lasketaan muista syötetyistä tiedoista automaattisesti.\n"
+"Jos kenttä on pakollinen (väritetty tausta), on ilmoitettu että lainaa "
+"lyhennettiin aiemmin. Syötä jäljellä oleva lainasumma sen suuruisena kuin se "
+"viimeisessä tiliotteessa on."
+
+#: wizards/newaccountwizard/rc.cpp:76
+msgid ""
+"Please enter the interest rate in percent or leave the field empty to "
+"calculate it."
+msgstr ""
+"Syötä korkoprosentti tai jätä kenttä tyhjäksi, jolloin se "
+"lasketaanautomaattisesti."
+
+#: dialogs/rc.cpp:559 wizards/newaccountwizard/rc.cpp:77
+msgid "Term"
+msgstr "Laina-aika"
+
+#: wizards/newaccountwizard/rc.cpp:78
+msgid ""
+"Please enter the term of this loan or enter 0 to calculate it. The term is "
+"the time that is required to fully repay the loan. This time might be "
+"different from the time your loan contract is signed for."
+msgstr ""
+"Syötä laina-aika tai nolla, jolloin se lasketaan automaattisesti. Laina-aika "
+"on ajanjakso joka vaaditaan lainan täysimääräiseen takaisinmaksuun. Tämä "
+"aika voi poiketa velkakirjaan merkitystä ajasta."
+
+#: wizards/newaccountwizard/rc.cpp:79
+msgid "Payment (principal and interest)"
+msgstr "Lyhennys (pääoma ja korko)"
+
+#: wizards/newaccountwizard/rc.cpp:80
+msgid ""
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"Syötä korkoihin ja lyhennyksiin yhteensä maksamasi summa tai jätä kenttä "
+"tyhjäksi, jolloin se lasketaan automaattisesti."
+
+#: wizards/newaccountwizard/rc.cpp:81
+msgid "Balloon payment"
+msgstr "Viimeinen maksuerä"
+
+#: wizards/newaccountwizard/rc.cpp:82
+msgid ""
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"Syötä viimeisen maksuerän summa tai jätä kenttä tyhjäksi, jolloin se "
+"lasketaan automaattisesti."
+
+#: wizards/newaccountwizard/rc.cpp:83
+msgid "Calculate"
+msgstr "Laske"
+
+#: wizards/newaccountwizard/rc.cpp:84
+msgid "Press this button to calculate/verify your loan details."
+msgstr "Paina tätä painiketta laskeaksesi / varmistaaksesi lainan tiedot."
+
+#: wizards/newaccountwizard/rc.cpp:85
+msgid ""
+"Pressing this button calculates a possibly missing parameter for your loan "
+"or verifies that the values entered match. If something is not correct you "
+"will receive information about it."
+msgstr ""
+"Painamalla tätä painiketta lasketaan mahdollisesti puuttuvat lainatiedot, "
+"tai varmistetaan syötetyt arvot. Jos jokin tieto ei täsmää, siitä annetaan "
+"lisätietoja."
+
+#: wizards/newaccountwizard/rc.cpp:86
+msgid ""
+"Now enter the information required for the periodic loan payments. If your "
+"regular payments contains any additional fees, click on the <b>Additional "
+"fees</b> button to enter them."
+msgstr ""
+"Syötä nyt lainan lyhennyserien tiedot. Jos maksuerä sisältää säännöllisesti "
+"lisämaksuja, paina <b>lisämaksut</b>-painiketta syöttääksesi ne."
+
+#: wizards/newaccountwizard/rc.cpp:87
+msgid "Principal + Interest"
+msgstr "Pääoma + korko"
+
+#: dialogs/rc.cpp:620 wizards/newaccountwizard/rc.cpp:89
+msgid "+"
+msgstr "+"
+
+#: wizards/newaccountwizard/rc.cpp:92
+msgid "= periodical payments"
+msgstr "= säännölliset maksuerät:"
+
+#: dialogs/rc.cpp:643 wizards/newaccountwizard/rc.cpp:94
+msgid ""
+"If this loan is for an asset, such as a car or a house, you can create the "
+"asset account now. An asset account represents the total value of an asset. "
+"The money from this loan will be transfered into the asset account you "
+"create or select.\n"
+"If this loan is a 'consumer loan' (money to use however you want), you can "
+"use a checking account instead."
+msgstr ""
+"Jos tämä laina on varallisuutta varten, kuten taloa tai autoa, voit luoda "
+"varallisuustilin nyt. (Varallisuustili kuvaa omaisuutta.)\n"
+"Lainattava raha siirrettään varallisuustilille, joka luodaan tarvittaessa.\n"
+"Jos laina on kulutusluotto (raha joka menee normaaliin päivittäiseen "
+"kulutukseen), voit luoda sekkitilin."
+
+#: dialogs/rc.cpp:644 wizards/newaccountwizard/rc.cpp:95
+msgid "Don't create payout transaction"
+msgstr "Älä luo maksutapahtumaa"
+
+#: wizards/newaccountwizard/rc.cpp:96
+msgid "Refinance existing loan"
+msgstr "Aikaisemman lainan uudelleenrahoitus"
+
+#: wizards/newaccountwizard/rc.cpp:97
+msgid "Check this if you are refinancing a loan that already exists in KMyMoney"
+msgstr "Rastita tämä, jos ollaan korvaamassa olemassa olevaa lainaa."
+
+#: dialogs/rc.cpp:642 wizards/newaccountwizard/rc.cpp:98
+msgid "Asset Account"
+msgstr "Varallisuustili"
+
+#: dialogs/rc.cpp:2 wizards/newaccountwizard/rc.cpp:99
+msgid "Create"
+msgstr "Luo"
+
+#: wizards/newaccountwizard/rc.cpp:100
+msgid "Loan account"
+msgstr "Lainatili"
+
+#: dialogs/rc.cpp:646 wizards/newaccountwizard/rc.cpp:101
+msgid "Date of payment"
+msgstr "Maksupäivä"
+
+#: wizards/newaccountwizard/rc.cpp:102
+msgid ""
+"KMyMoney creates a schedule for this payment and reminds you whenever a "
+"payment must be made. Please select the account to/from which payments will "
+"be made and the category the interest will be assigned to.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"Ohjelma luo ajoitetun tapahtuman maksuerälle ja muistuttaa koska maksu "
+"erääntyy. Valitse tili jolta / jolle maksu suoritetaan, sekä kategoria, "
+"jolle korko asetetaan.<p>\n"
+"Jos valittiin kaikkien maksujen kirjaaminen, tämä päivä on jo aiemmin "
+"syötetty. Jos valittiin vain tämän vuoden maksujen kirjaaminen, tällöin "
+"<b>Ensimmäinen eräpäivä</b> on tämän vuoden ensimmäisen maksun päiväys."
+
+#: dialogs/rc.cpp:613 wizards/newaccountwizard/rc.cpp:103
+msgid "Interest category"
+msgstr "Korkokategoria"
+
+#: wizards/newaccountwizard/rc.cpp:104
+msgid ""
+"The category the interest part of the payment will be assigned to. If you "
+"borrow money you usually have to pay interest, so this should be an expense "
+"category. If you lend the money, you receive the interest. In this case, "
+"select an income category here."
+msgstr ""
+"Korkokategorian asetus. Ottamastasi lainasta pitää yleensä maksaa korkoa, "
+"joten tällöin korkokulut kuuluvat <b>menot</b>-kategoriaan.\n"
+"Jos lainaat rahaa toiselle ja saat korkoa siitä, valitse siinä "
+"tapauksessa<b> tulot</b>-kategoria."
+
+#: wizards/newaccountwizard/rc.cpp:106
+msgid ""
+"Select the account from which you make your periodical payments or where you "
+"receive regular payments in case you lend the money. In most cases, this is "
+"a checking account."
+msgstr ""
+"Valitse tili miltä säännölliset maksutatapahtumat tullaan tekemään tai mihin "
+"saat säännöllisiä maksuja, mikäli lainaat rahaa muille."
+
+#: dialogs/rc.cpp:519 wizards/newaccountwizard/rc.cpp:107
+msgid "First payment due on"
+msgstr "Ensimmäinen maksu erääntyy"
+
+#: wizards/newaccountwizard/rc.cpp:108
+msgid ""
+"For credit card accounts you can create a monthly schedule which will "
+"automatically remind you about the payment. Please fill in the details about "
+"this payment here."
+msgstr ""
+"Luottokorttitileille voidaan luoda ajoitettuja tapahtumia jotka "
+"automaattisesti muistuttavat maksuista. Syötä maksutiedot tähän."
+
+#: wizards/newaccountwizard/rc.cpp:109
+msgid "Yes, remind me when the payment is due"
+msgstr "Kyllä, muistuta kun maksu erääntyy"
+
+#: wizards/newaccountwizard/rc.cpp:110
+msgid "Name of schedule"
+msgstr "Ajoitetun tapahtuman nimi"
+
+#: dialogs/rc.cpp:151 dialogs/rc.cpp:218 dialogs/rc.cpp:219
+#: reports/listtable.cpp:199 views/kscheduledview.cpp:72 widgets/rc.cpp:113
+#: widgets/register.cpp:57 wizards/newaccountwizard/rc.cpp:111
+msgid "Payee"
+msgstr "Maksunsaaja"
+
+#: wizards/newaccountwizard/rc.cpp:112
+msgid "Estimated monthly payment"
+msgstr "Arvioitu kuukausittainen maksuerä"
+
+#: wizards/newaccountwizard/rc.cpp:113
+msgid "Due date of next payment"
+msgstr "Seuraava eräpäivä"
+
+#: wizards/newaccountwizard/rc.cpp:114
+msgid ""
+"Payment should be made\n"
+"from account"
+msgstr ""
+"Maksu tulee suorittaa\n"
+"tililtä"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:79
+msgid "KMyMoney New File Setup"
+msgstr "Uuden tiedoston asetukset"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:81
+msgid "Introduction"
+msgstr "Esittely"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:82
+msgid "Personal Data"
+msgstr "Henkilökohtaiset tiedot"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:83
+msgid "Select Currency"
+msgstr "Valitse oletusvaluutta"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:84
+msgid "Select Accounts"
+msgstr "Valitse tilit"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:85
+msgid "Set preferences"
+msgstr "Käyttöasetusten asettaminen"
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid ""
+"Unable to load data, because no contact has been associated with the owner "
+"of the standard addressbook."
+msgstr ""
+"Tietoja ei voida ladata, koska ainoatakaan henkilöä ei ole yhdistetty "
+"oletusosoitekirjan omistajaan."
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid "Addressbook import"
+msgstr "Osoitekirjan tuonti"
+
+#: wizards/newuserwizard/rc.cpp:1
+msgid ""
+"A typical KMyMoney user maintains a checking a account with some institution "
+"and uses it to receive money or pay bills. If this is not the case, please "
+"deselect the checkbox below and continue on the next page."
+msgstr ""
+"Yleensä sekkitiliä ylläpidetään yhdessä rahalaitoksen kanssa joko rahaa "
+"vastaanottaen, tai laskuja maksaen. Jos näin ei ole tässä tapauksessa, "
+"poista valinta alla olevasta valintalaatikosta ja jatka seuraavalle sivulle."
+
+#: wizards/newuserwizard/rc.cpp:2
+msgid "I have a checking account that I want to manage with KMyMoney"
+msgstr "Haluan hallita shekkitiliä KMyMoneyn avulla"
+
+#: wizards/newuserwizard/rc.cpp:3
+msgid "The name of the instititution that issued the account."
+msgstr "Rahalaitoksen nimi jolle tili on avattu"
+
+#: wizards/newuserwizard/rc.cpp:4
+msgid ""
+"Each institution has a routing number. Enter it here. If uncertain, leave "
+"the field blank. You can modify it later."
+msgstr ""
+"Monilla rahalaitoksella on yksilöllinen tunnistenumero, reititysnumero. "
+"Syötä se tähän. Jos olet epävarma, jätä kenttä tyhjäksi. Sitä voidaan "
+"muuttaa myöhemmin."
+
+#: wizards/newuserwizard/rc.cpp:5
+msgid "Name of the institution"
+msgstr "Rahalaitoksen nimi"
+
+#: wizards/newuserwizard/rc.cpp:6
+msgid "Routing number"
+msgstr "Reititysnumero"
+
+#: wizards/newuserwizard/rc.cpp:7
+msgid ""
+"In general the institution that issued the account also issued a number for "
+"it. Enter it here. If uncertain, you can modify this entry later."
+msgstr ""
+"Rahalaitos, jossa sinulla on tili, on antanut sille tilinumeron. Syötä "
+"tilinumero tähän. Tietoa voidaan muuttaa myöhemmin."
+
+#: wizards/newuserwizard/rc.cpp:8
+msgid ""
+"Enter a descriptive name that will be used by KMyMoney to identify your "
+"checking account."
+msgstr "Syötä sekkitilä kuvaava nimi, sitä käytetään tilin tunnistamisessa."
+
+#: wizards/newuserwizard/rc.cpp:10
+msgid ""
+"Enter the date from when on you plan to keep track of the transactions in "
+"that account. This is usually the date of the last statement. If uncertain, "
+"leave as is."
+msgstr ""
+"Syötä päivä mistä lähtien tilitapahtumista tullaan pitämään kirjaa. Tämä on "
+"useimmiten sama päivä kuin viimeisen tiliotteen päiväys. Jos olet epävarma, "
+"voit jätä sen täyttämättä."
+
+#: wizards/newuserwizard/rc.cpp:11
+msgid "Number of the account"
+msgstr "Tilinumero"
+
+#: wizards/newuserwizard/rc.cpp:12
+msgid "Name of the account"
+msgstr "Tilin nimi"
+
+#: wizards/newuserwizard/rc.cpp:15
+msgid ""
+"Enter the opening balance of the account. This is usually the ending balance "
+"of the last statement. If uncertain, leave as is."
+msgstr ""
+"Syötä tilin alkusaldo. Tämä on usein viimeisen tiliotteen loppusaldo. Jos "
+"olet epävarma, jätä kenttä tyhjäksi."
+
+#: wizards/newuserwizard/rc.cpp:16
+msgid ""
+"The fields below allow you to enter some information about your checking "
+"account. Once this wizard finishes, the account will be created for you "
+"within KMyMoney."
+msgstr ""
+"Sekkitilin tietoja voidaan syöttää alla olevaan kenttään. Tili luodaan "
+"ohjatun toiminnon päättyessä."
+
+#: wizards/newuserwizard/rc.cpp:17
+msgid ""
+"KMyMoney supports multiple currencies. Your reports will be based on a "
+"default curreny which you can select here. The default for new accounts is "
+"also the currency you select here."
+msgstr ""
+"KMyMoney tukee useita valuuttoja. Raportit pohjautuvat tässä "
+"valittavaanoletusvaluuttaan. Sitä käytetään oletusvaluuttana myös uusille "
+"tileille."
+
+#: wizards/newuserwizard/rc.cpp:18
+msgid ""
+"KMyMoney will store your financial data in a file on the disk. A standard "
+"filename within your KDE user environment will be the default. This is just "
+"provided for convenience and you can choose any other location here."
+msgstr ""
+"KMyMoney tallentaa tiedot tiedostoon kiintolevylle. "
+"Tallennussijaintinakäytetään KDE-ympäristön oletusarvoja, mutta myös mitä "
+"tahansa muuta sijaintia voidaan käyttää."
+
+#: wizards/newuserwizard/rc.cpp:19
+msgid ""
+"Either the currently selected file exists or the selected directory does not "
+"exist. Please make sure, that\n"
+"\n"
+"<ul>\n"
+"<li>the selected directory exists and</li>\n"
+"<li>the filename is not currently used in this directory.</li>\n"
+"</ul>"
+msgstr ""
+"Joko tällä hetkellä valittu tiedosto on jo olemassa tai valittua hakemistoa "
+"ei ole olemassa. Varmista että\n"
+"\n"
+"<ul>\n"
+"<li>valittu hakemisto on olemassa ja</li>\n"
+"<li>tiedostonimi ei ole tällä hetkellä käytössä tässä hakemistossa.</li>\n"
+"</ul>"
+
+#: wizards/newuserwizard/rc.cpp:20
+msgid ""
+"This finishes the setup of your KMyMoney environment. You can now press the "
+"Finish button and start using KMyMoney to record your financial transactions."
+msgstr ""
+"Asetukset on nyt syötetty. Jatka painamalla <b>Valmis</b>-painiketta "
+"ruudulla ja aloita talouskirjanpidon pitäminen."
+
+#: wizards/newuserwizard/rc.cpp:21
+msgid ""
+"Please enter some information about yourself.<br><br>\n"
+"\n"
+"This information will be seen and used only by you. The information is used "
+"to personalize KMyMoney, to encrypt your file, etc."
+msgstr ""
+"Syötä tähän ikkunaan haluamiasi tietoja itsestäsi.<br><br>\n"
+"\n"
+"Syöttämiäsi tietoja näytetään ainoastaan sinulle, ja niitä käytetään "
+"henkilökohtaisiin asetuksiin, tiedoston salaukseen, jne. "
+
+#: wizards/newuserwizard/rc.cpp:28
+msgid "Zip code"
+msgstr "Postinumero"
+
+#: wizards/newuserwizard/rc.cpp:30
+msgid "Welcome to KMyMoney!"
+msgstr "Tervetuloa KMyMoneyn käyttäjäksi!"
+
+#: wizards/newuserwizard/rc.cpp:31
+msgid ""
+"You have started KMyMoney for the first time on this computer. Before this "
+"program can help you to manage your finances, it needs to collect some data "
+"from you.<p>\n"
+"\n"
+"On the next few pages you will be guided through the steps necessary to "
+"setup the program. This will happen only once."
+msgstr ""
+"KMyMoney on käynnistetty ensimmäistä kertaa. Ennen kuin ohjelman käyttö "
+"voidaan aloittaa, tarvitaan joitakin tietoja.<p>\n"
+" \n"
+"Seuraavilla muutamilla sivuilla sinua opastetaan syöttämään tarvittavat "
+"tiedot ohjelman käyttöönottamiseksi. Tämä tehdään vain kertaalleen."
+
+#: wizards/newuserwizard/rc.cpp:32
+msgid ""
+"<p>KMyMoney can encrypt your datafile using GPG Encryption. GPG encryption "
+"is one of the most secure methods in the world for protecting data. All of "
+"your account numbers and other important financial information will be very "
+"secure.</p>"
+msgstr ""
+"<p>KMyMoney voi salata tiedostot käyttäen GPG-salausta. GPG -salaus on yksi "
+"varmimmista tiedon salausmenetelmistä. Kaikki tilinumerot ja muut tärkeät "
+"tiedot pysyvät turvassa.</p>"
+
+#: wizards/newuserwizard/rc.cpp:33
+msgid ""
+"If you would like to review or change any preference settings for KMyMoney "
+"at this time, you can do so here. If not just click <b>Next</b>."
+msgstr ""
+"Ohjelman asetuksia voidaan tarkastella ja muokata tässä ikkunassa. Muutoin "
+"jatka painamalla <b>Seuraava</b>."
+
+#: wizards/newuserwizard/rc.cpp:34
+msgid "Configure preferences now"
+msgstr "Määritä asetukset nyt"
+
+#: wizards/newuserwizard/rc.cpp:35
+msgid ""
+"You can change the configuration options at any time using the configuration "
+"dialog. Just select the <b>Configure KMyMoney...</b> option in the "
+"<b>Settings</b> menu."
+msgstr ""
+"Asetuksia voidaan muuttaa koska tahansa asetukset-ikkunan avulla. "
+"Valitse<b>KMyMoneyn asetukset</b> -valinta <b>Asetukset</b> -valikosta."
+
+#: dialogs/rc.cpp:83 dialogs/rc.cpp:411 dialogs/rc.cpp:435
+#: kmymoneyutils.cpp:92 kmymoneyutils.cpp:105 mymoney/mymoneyaccount.cpp:753
+#: mymoney/mymoneysecurity.cpp:160
+msgid "Stock"
+msgstr "Arvopaperit"
+
+#: dialogs/rc.cpp:84 dialogs/rc.cpp:412 dialogs/rc.cpp:436
+#: kmymoneyutils.cpp:107 mymoney/mymoneysecurity.cpp:163
+msgid "Mutual Fund"
+msgstr "Sijoitusrahasto"
+
+#: dialogs/rc.cpp:85 dialogs/rc.cpp:413 dialogs/rc.cpp:437
+#: kmymoneyutils.cpp:109 mymoney/mymoneysecurity.cpp:166
+msgid "Bond"
+msgstr "Velkakirja"
+
+#: mymoney/mymoneysecurity.cpp:172 reports/querytable.cpp:1150
+#: widgets/kmymoneyaccountselector.cpp:76
+msgid "None"
+msgstr "Ei mitään"
+
+#: dialogs/rc.cpp:46 kmymoneyutils.cpp:402 mymoney/mymoneyaccount.cpp:759
+#: mymoney/mymoneyscheduled.cpp:1002 mymoney/mymoneysecurity.cpp:175
+#: views/kforecastview.cpp:174 widgets/register.cpp:54
+#: widgets/register.cpp:485 widgets/transaction.cpp:708
+#: widgets/transaction.cpp:1459
+msgid "Unknown"
+msgstr "Tuntematon"
+
+#: mymoney/storage/mymoneystoragesql.cpp:191
+msgid ""
+"Database apparently in use\n"
+"Opened by %1 on %2 at %3.\n"
+"Open anyway?"
+msgstr ""
+"Tietokanta on jo käytössä\n"
+"Avaaja %1, %2 kello %3.\n"
+"Avataanko silti?"
+
+#: mymoney/storage/mymoneystoragesql.cpp:229
+msgid "Cannot currently create database for driver %1; please create manually"
+msgstr ""
+"Tietokantaa ei voida luoda ajurille %1.Halutessasi voit luoda tietokannan "
+"itse."
+
+#: mymoney/storage/mymoneystoragesql.cpp:244
+msgid "Error in create database %1; do you have create permissions?"
+msgstr "Virhe luotaessa tietokantaa %1; onko tietokantaan luontioikeuksia?"
+
+#: converter/mymoneygncreader.cpp:1329
+#: mymoney/storage/mymoneystoragexml.cpp:166
+msgid "Loading transactions..."
+msgstr "Ladataan tapahtumia..."
+
+#: converter/mymoneygncreader.cpp:1190
+#: mymoney/storage/mymoneystoragexml.cpp:173
+msgid "Loading accounts..."
+msgstr "Ladataan tilejä..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:180
+msgid "Loading securities..."
+msgstr "Ladataan arvopapereita..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:187
+msgid "Loading reports..."
+msgstr "Ladataan raportteja..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:268
+msgid "Unknown XML tag %1 found in line %2"
+msgstr "Riviltä %2 löytyi tuntematon XML-tagi (%1)"
+
+#: mymoney/storage/mymoneystoragexml.cpp:274
+msgid "Exception while creating a %1 element: %2"
+msgstr "Luotaessa elementtiä %1 tapahtui poikkeus: %2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:513
+msgid "Loading file information..."
+msgstr "Tiedostoa ladataan..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:591
+msgid "Loading user information..."
+msgstr "Ladataan käyttäjätietoja..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:655
+msgid "Saving accounts..."
+msgstr "Tallennetaan tilejä..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:678
+msgid "Saving transactions..."
+msgstr "Tallennetaan tapahtumia..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:747
+msgid "Saving reports..."
+msgstr "Tallennetaan raportteja..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:762
+msgid "Saving budgets..."
+msgstr "Tallennetaan budjettia..."
+
+#: mymoney/storage/mymoneystoragedump.cpp:414
+msgid "not reconciled"
+msgstr "yhteensovittamaton"
+
+#: mymoney/storage/mymoneystoragedump.cpp:417
+msgid "cleared"
+msgstr "varmistetut"
+
+#: mymoney/storage/mymoneystoragedump.cpp:420
+msgid "reconciled"
+msgstr "yhteensovitettu"
+
+#: mymoney/storage/mymoneystoragedump.cpp:423
+msgid "frozen"
+msgstr "jäädytetty"
+
+#: mymoney/storage/mymoneystoragedump.cpp:426
+msgid "unknown"
+msgstr "tuntematon"
+
+#: mymoney/mymoneyaccount.cpp:101
+msgid ""
+"Account %1 contains an opening balance. Please use a KMyMoney version >= 0.8 "
+"and < 0.9 to correct the problem."
+msgstr ""
+"Tilillä %1 on alkusaldo. Käytä KMyMoneyn versiota 0.8 - 0.9 ongelman "
+"korjaamiseksi."
+
+#: mymoney/mymoneyaccount.cpp:597
+msgid ""
+"_: Brokerage (suffix for account names)\n"
+"Brokerage"
+msgstr "Kaupanvälitys"
+
+#: kmymoneyutils.cpp:74 mymoney/mymoneyaccount.cpp:726
+msgid "Certificate of Deposit"
+msgstr "Talletustodistus"
+
+#: kmymoneyutils.cpp:78 mymoney/mymoneyaccount.cpp:732
+msgid "Money Market"
+msgstr "Rahamarkkinat"
+
+#: converter/mymoneytemplate.cpp:186 converter/mymoneytemplate.cpp:187
+#: dialogs/knewaccountdlg.cpp:1018 kmymoneyutils.cpp:86
+#: mymoney/mymoneyaccount.cpp:744 views/kaccountsview.cpp:360
+#: views/kbudgetview.cpp:372 views/kcategoriesview.cpp:178
+#: views/khomeview.cpp:1813 views/kmymoneyview.cpp:767
+#: widgets/kmymoneyaccountselector.cpp:68
+#: widgets/kmymoneyaccountselector.cpp:179
+#: widgets/kmymoneyaccountselector.cpp:370 widgets/register.cpp:828
+msgid "Income"
+msgstr "Tulot"
+
+#: converter/mymoneytemplate.cpp:190 converter/mymoneytemplate.cpp:191
+#: dialogs/knewaccountdlg.cpp:1020 kmymoneyutils.cpp:88
+#: mymoney/mymoneyaccount.cpp:747 views/kaccountsview.cpp:364
+#: views/kbudgetview.cpp:378 views/kcategoriesview.cpp:182
+#: views/kmymoneyview.cpp:768 widgets/kmymoneyaccountselector.cpp:72
+#: widgets/kmymoneyaccountselector.cpp:180
+#: widgets/kmymoneyaccountselector.cpp:380 widgets/register.cpp:829
+msgid "Expense"
+msgstr "Menot"
+
+#: kmymoneyutils.cpp:90 mymoney/mymoneyaccount.cpp:750
+msgid "Investment Loan"
+msgstr "Sijoituslaina"
+
+#: mymoney/mymoneyfile.cpp:47
+msgid "Opening Balances"
+msgstr "Alkusaldo"
+
+#: mymoney/mymoneyfile.cpp:398
+msgid "Cannot remove transaction that references a closed account."
+msgstr "Suljettuun tiliin viittaavaa tapahtumaa ei voida poistaa."
+
+#: mymoney/mymoneyfile.cpp:1414 mymoney/mymoneyfile.cpp:1433
+#: mymoney/mymoneyfile.cpp:1447 mymoney/mymoneyfile.cpp:1469
+msgid "* Problem with account '%1'"
+msgstr "* Ongelma tilillä '%1'"
+
+#: mymoney/mymoneyfile.cpp:1419
+msgid " * Parent account '%1' belongs to a different group."
+msgstr " * Ylätason tili '%1' kuuluu eri ryhmään."
+
+#: mymoney/mymoneyfile.cpp:1420 mymoney/mymoneyfile.cpp:1450
+msgid " New parent account is the top level account '%1'."
+msgstr " Uusi ylätason tili on päätason tili '%1'."
+
+#: mymoney/mymoneyfile.cpp:1436
+msgid " * Parent account '%1' does not contain '%2' as sub-account."
+msgstr " * Ylätason tilillä '%1' ei ole '%2' alatilinä."
+
+#: mymoney/mymoneyfile.cpp:1449
+msgid " * The parent with id %1 does not exist anymore."
+msgstr " * Ylätasoa tunnuksella %1 ei enää ole olemassa."
+
+#: mymoney/mymoneyfile.cpp:1471
+msgid " * Child account with id %1 does not exist anymore."
+msgstr " * Alatasoa tunnuksella %1 ei enää ole olemassa."
+
+#: mymoney/mymoneyfile.cpp:1472
+msgid " The child account list will be reconstructed."
+msgstr " Lista alatason tileistä luodaan uudestaan."
+
+#: mymoney/mymoneyfile.cpp:1492
+msgid " * Unable to update account data in engine."
+msgstr " * Tilitietoja ei kyetä päivittämään."
+
+#: mymoney/mymoneyfile.cpp:1499
+msgid "* Reconstructing the child lists for"
+msgstr "* Listaa alatason tileistä luodaan uudelleen..."
+
+#: mymoney/mymoneyfile.cpp:1536
+msgid " * Unable to update account data for account %1 in engine"
+msgstr " * Tilin %1 tietoja ei voida päivittää."
+
+#: mymoney/mymoneyfile.cpp:1554
+msgid " * Payee %1 recreated with fixed id"
+msgstr " * Maksunsaaja %1 uudelleenluotu kiinteällä tunnisteella"
+
+#: mymoney/mymoneyfile.cpp:1583
+msgid " * Payee id updated in split of transaction '%1'."
+msgstr " * Maksunsaajan tunniste päivitetty tapahtuman '%1' jaottelussa."
+
+#: mymoney/mymoneyfile.cpp:1596
+msgid " * shares set to value in split of transaction '%1'."
+msgstr " * Osakkeille asetettu arvo tapahtuman '%1' jaottelussa."
+
+#: mymoney/mymoneyfile.cpp:1599
+msgid " * value set to shares in split of transaction '%1'."
+msgstr " * osakkeille asetettu arvo tapahtuman '%1' jaottelussa."
+
+#: mymoney/mymoneyfile.cpp:1605
+msgid ""
+" * Split %2 in transaction '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+" * Jaottelu %2 tapahtumassa '%1' sisältää viittauksen epäkelpoon tiliin %3. "
+"Korjaa ongelma käsin."
+
+#: mymoney/mymoneyfile.cpp:1616
+msgid " * action marked as interest in split of transaction '%1'."
+msgstr " * tapahtuma merkitty koroksi tapahtuman '%1' jaottelussa."
+
+#: mymoney/mymoneyfile.cpp:1643
+msgid " * Payee id updated in split of schedule '%1'."
+msgstr " * Maksunsaajan tunniste päivitetty aikataulun '%1' jaottelussa."
+
+#: mymoney/mymoneyfile.cpp:1649
+msgid " * Split in scheduled transaction '%1' contained value != 0 and shares == 0."
+msgstr ""
+" * Jaottelu ajoitetuissa tapahtumissa '%1' sisälsi arvon != 0 ja osakkeet "
+"== 0."
+
+#: mymoney/mymoneyfile.cpp:1650
+msgid " Shares set to value."
+msgstr " Osakkeet asetettu arvoon."
+
+#: mymoney/mymoneyfile.cpp:1658
+msgid " * Removed bankid from split in scheduled transaction '%1'."
+msgstr " * Poistettu pankin tunniste ajoitetun tapahtuman '%1' jaottelusta."
+
+#: mymoney/mymoneyfile.cpp:1671
+msgid " * shares set to value in split in schedule '%1'."
+msgstr " * osakkeet asetettu arvoon jaotellussa ajoitetussa tapahtumassa '%1'."
+
+#: mymoney/mymoneyfile.cpp:1674
+msgid " * value set to shares in split in schedule '%1'."
+msgstr " * osakkeille asetettu arvo jaotellussa ajoitetussa tapahtumassa '%1'."
+
+#: mymoney/mymoneyfile.cpp:1680
+msgid ""
+" * Split %2 in schedule '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+" * Jaottelu %2 ajoitetussa tapahtumassa '%1' sisältää viittauksen "
+"epäkelpoon tiliin %3. Korjaa virhe käsin."
+
+#: mymoney/mymoneyfile.cpp:1706
+msgid " * Payee id updated in report '%1'."
+msgstr " * Maksunsaajan tunniste päivitetty raportissa '%1'."
+
+#: mymoney/mymoneyfile.cpp:1723
+msgid " * Payee '%1' removed."
+msgstr " * Maksunsaaja '%1' poistettu."
+
+#: mymoney/mymoneyfile.cpp:1730
+msgid "Finish! Data is consistent."
+msgstr "Valmis! Tiedot ovat yhdenmukaisia."
+
+#: mymoney/mymoneyfile.cpp:1732
+msgid "Finish! %1 problem(s) corrected. %2 problem(s) still present."
+msgstr "Valmis. %1 ongelma(a) korjattu. %2 ongelma(a) jäi silti."
+
+#: mymoney/mymoneyscheduled.cpp:873 mymoney/mymoneyscheduled.cpp:918
+#: mymoney/mymoneyscheduled.cpp:969 mymoney/mymoneyscheduled.cpp:1265
+#: mymoney/mymoneyscheduletest.cpp:1336
+msgid "Once"
+msgstr "Kerran"
+
+#: mymoney/mymoneyscheduled.cpp:875 mymoney/mymoneyscheduled.cpp:924
+#: mymoney/mymoneyscheduled.cpp:1267 mymoney/mymoneyscheduletest.cpp:1337
+#: widgets/rc.cpp:72
+msgid "Daily"
+msgstr "Päivittäin"
+
+#: mymoney/mymoneyscheduled.cpp:877 mymoney/mymoneyscheduled.cpp:931
+#: mymoney/mymoneyscheduled.cpp:1269 mymoney/mymoneyscheduletest.cpp:1338
+#: widgets/rc.cpp:73
+msgid "Weekly"
+msgstr "Viikottain"
+
+#: mymoney/mymoneyscheduled.cpp:881 mymoney/mymoneyscheduled.cpp:932
+#: mymoney/mymoneyscheduled.cpp:1273 mymoney/mymoneyscheduletest.cpp:1339
+msgid "Every other week"
+msgstr "Joka toinen viikko"
+
+#: mymoney/mymoneyscheduled.cpp:879 mymoney/mymoneyscheduled.cpp:1271
+#: mymoney/mymoneyscheduletest.cpp:1340
+msgid "Fortnightly"
+msgstr "14 päivän välein"
+
+#: mymoney/mymoneyscheduled.cpp:883 mymoney/mymoneyscheduled.cpp:941
+#: mymoney/mymoneyscheduled.cpp:1275 mymoney/mymoneyscheduletest.cpp:1341
+msgid "Every half month"
+msgstr "Kahdesti kuussa"
+
+#: mymoney/mymoneyscheduled.cpp:887 mymoney/mymoneyscheduled.cpp:934
+#: mymoney/mymoneyscheduled.cpp:1279 mymoney/mymoneyscheduletest.cpp:1342
+msgid "Every four weeks"
+msgstr "Joka neljäs viikko"
+
+#: mymoney/mymoneyscheduled.cpp:893 mymoney/mymoneyscheduled.cpp:935
+#: mymoney/mymoneyscheduled.cpp:1285 mymoney/mymoneyscheduletest.cpp:1344
+msgid "Every eight weeks"
+msgstr "Joka kahdeksas viikko"
+
+#: mymoney/mymoneyscheduled.cpp:895 mymoney/mymoneyscheduled.cpp:948
+#: mymoney/mymoneyscheduled.cpp:1287 mymoney/mymoneyscheduletest.cpp:1345
+msgid "Every two months"
+msgstr "Joka toinen kuukausi"
+
+#: mymoney/mymoneyscheduled.cpp:897 mymoney/mymoneyscheduled.cpp:949
+#: mymoney/mymoneyscheduled.cpp:1289 mymoney/mymoneyscheduletest.cpp:1346
+msgid "Every three months"
+msgstr "Joka kolmas kuukausi"
+
+#: mymoney/mymoneyscheduled.cpp:899 mymoney/mymoneyscheduled.cpp:1291
+#: mymoney/mymoneyscheduletest.cpp:1347 widgets/rc.cpp:76
+msgid "Quarterly"
+msgstr "Neljännesvuosittain"
+
+#: mymoney/mymoneyscheduled.cpp:901 mymoney/mymoneyscheduled.cpp:950
+#: mymoney/mymoneyscheduled.cpp:1293 mymoney/mymoneyscheduletest.cpp:1348
+msgid "Every four months"
+msgstr "Joka neljäs kuukausi"
+
+#: mymoney/mymoneyscheduled.cpp:903 mymoney/mymoneyscheduled.cpp:951
+#: mymoney/mymoneyscheduled.cpp:1295 mymoney/mymoneyscheduletest.cpp:1349
+msgid "Twice yearly"
+msgstr "Kahdesti vuodessa"
+
+#: mymoney/mymoneyscheduled.cpp:905 mymoney/mymoneyscheduled.cpp:957
+#: mymoney/mymoneyscheduled.cpp:1297 mymoney/mymoneyscheduletest.cpp:1350
+#: widgets/rc.cpp:20 widgets/rc.cpp:77
+msgid "Yearly"
+msgstr "Vuosittain"
+
+#: mymoney/mymoneyscheduled.cpp:907 mymoney/mymoneyscheduled.cpp:958
+#: mymoney/mymoneyscheduled.cpp:1299 mymoney/mymoneyscheduletest.cpp:1351
+msgid "Every other year"
+msgstr "Joka toinen vuosi"
+
+#: mymoney/mymoneyscheduled.cpp:870 mymoney/mymoneyscheduled.cpp:913
+#: mymoney/mymoneyscheduled.cpp:966
+msgid "Any"
+msgstr "Mikä tahansa"
+
+#: mymoney/mymoneyscheduled.cpp:885 mymoney/mymoneyscheduled.cpp:933
+#: mymoney/mymoneyscheduled.cpp:1277
+msgid "Every three weeks"
+msgstr "Joka kolmas viikko"
+
+#: mymoney/mymoneyscheduled.cpp:889 mymoney/mymoneyscheduled.cpp:925
+#: mymoney/mymoneyscheduled.cpp:1281
+msgid "Every thirty days"
+msgstr "Joka kolmaskymmenes päivä"
+
+#: mymoney/mymoneyscheduled.cpp:971
+msgid "Day"
+msgstr "Päivä"
+
+#: mymoney/mymoneyscheduled.cpp:973 reports/listtable.cpp:206
+#: widgets/kmymoneycalendar.cpp:123 widgets/rc.cpp:97
+msgid "Week"
+msgstr "Viikko"
+
+#: mymoney/mymoneyscheduled.cpp:975
+msgid "Half-month"
+msgstr "Puolikuukausittain"
+
+#: mymoney/mymoneyscheduled.cpp:977 reports/listtable.cpp:205
+#: widgets/kmymoneycalendar.cpp:124 widgets/rc.cpp:96
+msgid "Month"
+msgstr "Kuukausi"
+
+#: dialogs/rc.cpp:400 mymoney/mymoneyscheduled.cpp:979 views/rc.cpp:14
+msgid "Year"
+msgstr "Vuosi"
+
+#: mymoney/mymoneyscheduled.cpp:989
+msgid "Bill"
+msgstr "Lasku"
+
+#: dialogs/rc.cpp:107 dialogs/rc.cpp:162 dialogs/rc.cpp:249 dialogs/rc.cpp:754
+#: mymoney/mymoneyscheduled.cpp:992 widgets/kmymoneycombo.cpp:420
+#: widgets/register.cpp:571
+msgid "Deposit"
+msgstr "Pano"
+
+#: mymoney/mymoneyscheduled.cpp:995 reports/querytable.cpp:594
+#: reports/querytable.cpp:696 widgets/kmymoneycombo.cpp:419
+msgid "Transfer"
+msgstr "Tilisiirto"
+
+#: mymoney/mymoneyscheduled.cpp:1035
+msgid "Any (Error)"
+msgstr "Mikä tahansa (virhe)"
+
+#: dialogs/rc.cpp:114 mymoney/mymoneyscheduled.cpp:1047
+msgid "Change the date to the previous Friday"
+msgstr "Vaihda päivämäärä edelliseen perjantaihin"
+
+#: dialogs/rc.cpp:115 mymoney/mymoneyscheduled.cpp:1050
+msgid "Change the date to the next Monday"
+msgstr "Vaihda päivämäärä seuraavaan maanantaihin"
+
+#: mymoney/mymoneyscheduled.cpp:1053
+msgid "Do Nothing"
+msgstr "Älä tee mitään"
+
+#: kmymoney2.cpp:312
+msgid "Open database..."
+msgstr "Avaa tietokanta..."
+
+#: kmymoney2.cpp:313
+msgid "Save as database..."
+msgstr "Tallenna tietokantana..."
+
+#: kmymoney2.cpp:314
+msgid "Backup..."
+msgstr "Ota varmuuskopio..."
+
+#: kmymoney2.cpp:315 kmymoney2.cpp:321
+msgid "QIF..."
+msgstr "QIF..."
+
+#: kmymoney2.cpp:316
+msgid "Gnucash..."
+msgstr "Gnucash..."
+
+#: kmymoney2.cpp:317
+msgid "Statement file..."
+msgstr "Tiliotetiedosto..."
+
+#: kmymoney2.cpp:319 kmymoney2.cpp:320
+msgid "Account Template..."
+msgstr "Tilipohja..."
+
+#: kmymoney2.cpp:322
+msgid "Personal Data..."
+msgstr "Henkilökohtaiset tiedot..."
+
+#: kmymoney2.cpp:325
+msgid "Dump Memory"
+msgstr "Muistivedos..."
+
+#: kmymoney2.cpp:327
+msgid "File-Information..."
+msgstr "Tiedoston tiedot ..."
+
+#: kmymoney2.cpp:332
+msgid "Find transaction..."
+msgstr "Etsi tapahtuma..."
+
+#: kmymoney2.cpp:337
+msgid "Show Transaction Detail"
+msgstr "Näytä tapahtuman tiedot"
+
+#: kmymoney2.cpp:338 rc.cpp:60
+msgid "Hide reconciled transactions"
+msgstr "Piilota yhteensovitetut tapahtumat"
+
+#: kmymoney2.cpp:339 rc.cpp:57
+msgid "Hide unused categories"
+msgstr "Piilota käyttämättömät kategoriat"
+
+#: kmymoney2.cpp:340
+msgid "Show all accounts"
+msgstr "Näytä kaikki tilit"
+
+#: kmymoney2.cpp:345
+msgid "New institution..."
+msgstr "Uusi rahalaitos..."
+
+#: kmymoney2.cpp:346
+msgid "Edit institution..."
+msgstr "Muokkaa rahalaitosta..."
+
+#: kmymoney2.cpp:347
+msgid "Delete institution..."
+msgstr "Poista rahalaitos..."
+
+#: kmymoney2.cpp:352
+msgid "New account..."
+msgstr "Uusi tili..."
+
+#: kmymoney2.cpp:354
+msgid "Open ledger"
+msgstr "Avaa kirjanpito"
+
+#: kmymoney2.cpp:355
+msgid "Reconcile..."
+msgstr "Yhteensovitus..."
+
+#: kmymoney2.cpp:356
+msgid ""
+"_: Finish reconciliation\n"
+"Finish"
+msgstr "Valmis"
+
+#: kmymoney2.cpp:357
+msgid ""
+"_: Postpone reconciliation\n"
+"Postpone"
+msgstr "Siirrä"
+
+#: kmymoney2.cpp:358
+msgid "Edit account..."
+msgstr "Muokkaa tiliä..."
+
+#: kmymoney2.cpp:359
+msgid "Delete account..."
+msgstr "Poista tili..."
+
+#: kmymoney2.cpp:360
+msgid "Close account"
+msgstr "Sulje tili"
+
+#: kmymoney2.cpp:361
+msgid "Reopen account"
+msgstr "Avaa tili uudelleen"
+
+#: kmymoney2.cpp:362
+msgid "Transaction report"
+msgstr "Tapahtumaraportti"
+
+#: kmymoney2.cpp:364
+msgid "Show balance chart..."
+msgstr "Näytä saldokäyrä..."
+
+#: kmymoney2.cpp:366
+msgid "Map to online account"
+msgstr "Liitä online-tiliin"
+
+#: kmymoney2.cpp:367
+msgid "Unmap account"
+msgstr "Poista tililiitäntä"
+
+#: dialogs/settings/rc.cpp:126 kmymoney2.cpp:368 views/kpayeesview.cpp:363
+#: widgets/rc.cpp:50
+msgid "Update"
+msgstr "Päivitä"
+
+#: kmymoney2.cpp:372
+msgid "Update account..."
+msgstr "Päivitä tili..."
+
+#: kmymoney2.cpp:373
+msgid "Update all accounts..."
+msgstr "Päivitä kaikki tilit..."
+
+#: kmymoney2.cpp:378
+msgid "New category..."
+msgstr "Uusi kategoria..."
+
+#: kmymoney2.cpp:379
+msgid "Edit category..."
+msgstr "Muokkaa kategoriaa..."
+
+#: kmymoney2.cpp:380
+msgid "Delete category..."
+msgstr "Poista kategoria..."
+
+#: kmymoney2.cpp:386
+msgid "QIF Profile Editor..."
+msgstr "QIF-profiilimuokkain..."
+
+#: kmymoney2.cpp:387
+msgid "Securities..."
+msgstr "Arvopaperit..."
+
+#: kmymoney2.cpp:388
+msgid "Currencies..."
+msgstr "Valuutat..."
+
+#: kmymoney2.cpp:389
+msgid "Prices..."
+msgstr "Hinnat..."
+
+#: kmymoney2.cpp:390
+msgid "Update Stock and Currency Prices..."
+msgstr "Päivitä osake- ja valuuttakurssit..."
+
+#: kmymoney2.cpp:391
+msgid "Consistency Check"
+msgstr "Yhtenäisyystarkistus"
+
+#: kmymoney2.cpp:392
+msgid "Performance-Test"
+msgstr "Suorituskykytesti"
+
+#: kmymoney2.cpp:393
+msgid "KCalc..."
+msgstr "KCalc..."
+
+#: kmymoney2.cpp:399
+msgid "Enable all messages"
+msgstr "Ota käyttöön kaikki viestit"
+
+#: kmymoney2.cpp:400
+msgid "KDE language settings..."
+msgstr "KDE-kieliasetukset..."
+
+#: kmymoney2.cpp:405
+msgid "&Show tip of the day"
+msgstr "&Näytä päivän vihje"
+
+#: kmymoney2.cpp:410
+msgid ""
+"_: New transaction button\n"
+"New"
+msgstr "Uusi"
+
+#: kmymoney2.cpp:415
+msgid ""
+"_: Edit transaction button\n"
+"Edit"
+msgstr "Muokkaa"
+
+#: kmymoney2.cpp:417
+msgid ""
+"_: Enter transaction\n"
+"Enter"
+msgstr "Syötä"
+
+#: kmymoney2.cpp:420
+msgid ""
+"_: Edit split button\n"
+"Edit splits"
+msgstr "Muokkaa jaotteluja"
+
+#: kmymoney2.cpp:421
+msgid ""
+"_: Cancel transaction edit\n"
+"Cancel"
+msgstr "Peruuta"
+
+#: kmymoney2.cpp:422
+msgid ""
+"_: Delete transaction\n"
+"Delete"
+msgstr "Poista"
+
+#: kmymoney2.cpp:423
+msgid ""
+"_: Duplicate transaction\n"
+"Duplicate"
+msgstr "Kahdenna"
+
+#: kmymoney2.cpp:425 kmymoney2.cpp:4826 kmymoney2.cpp:5107
+msgid ""
+"_: Button text for match transaction\n"
+"Match"
+msgstr "Sovita"
+
+#: kmymoney2.cpp:426
+msgid ""
+"_: Accept 'imported' and 'matched' transaction\n"
+"Accept"
+msgstr "Hyväksy"
+
+#: kmymoney2.cpp:428
+msgid ""
+"_: Toggle reconciliation flag\n"
+"Toggle"
+msgstr "Käännä"
+
+#: kmymoney2.cpp:429
+msgid ""
+"_: Mark transaction cleared\n"
+"Cleared"
+msgstr "Varmistettu"
+
+#: kmymoney2.cpp:430
+msgid ""
+"_: Mark transaction reconciled\n"
+"Reconciled"
+msgstr "Yhteensovitettu"
+
+#: kmymoney2.cpp:431
+msgid ""
+"_: Mark transaction not reconciled\n"
+"Not reconciled"
+msgstr "Yhteensovittamaton"
+
+#: kmymoney2.cpp:432
+msgid ""
+"_: Select all transactions\n"
+"Select all"
+msgstr "Valitse kaikki"
+
+#: kmymoney2.cpp:434 kmymoney2.cpp:5497
+msgid "Goto account"
+msgstr "Siirry tiliin"
+
+#: kmymoney2.cpp:435 kmymoney2.cpp:5495
+msgid "Goto payee"
+msgstr "Siirry maksunsaajaan"
+
+#: kmymoney2.cpp:436
+msgid "Create scheduled transaction..."
+msgstr "Luo ajoitettu tapahtuma..."
+
+#: kmymoney2.cpp:437
+msgid "Assign next number"
+msgstr "Liitä seuraava numero"
+
+#: kmymoney2.cpp:438
+msgid ""
+"_: Combine transactions\n"
+"Combine"
+msgstr "Yhdistä"
+
+#: kmymoney2.cpp:440
+msgid "New investment"
+msgstr "Uusi sijoitus"
+
+#: kmymoney2.cpp:441
+msgid "Edit investment..."
+msgstr "Muokkaa sijoitusta..."
+
+#: kmymoney2.cpp:442
+msgid "Delete investment..."
+msgstr "Poista sijoitus..."
+
+#: kmymoney2.cpp:443
+msgid "Online price update..."
+msgstr "Online-hintapäivitys..."
+
+#: kmymoney2.cpp:444
+msgid "Manual price update..."
+msgstr "Hintojen päivitys käsin..."
+
+#: kmymoney2.cpp:446
+msgid "New scheduled transaction..."
+msgstr "Uusi ajoitettu tapahtuma..."
+
+#: kmymoney2.cpp:447
+msgid "Edit scheduled transaction..."
+msgstr "Muokkaa ajoitettua tapahtumaa..."
+
+#: kmymoney2.cpp:448
+msgid "Delete scheduled transaction..."
+msgstr "Poista ajoitettu tapahtuma..."
+
+#: kmymoney2.cpp:449
+msgid "Duplicate scheduled transaction"
+msgstr "Kahdenna ajoitettu tapahtuma"
+
+#: kmymoney2.cpp:450
+msgid "Enter next transaction..."
+msgstr "Kirjaa seuraava tapahtuma..."
+
+#: kmymoney2.cpp:451
+msgid "Skip next transaction..."
+msgstr "Ohita seuraava tapahtuma..."
+
+#: kmymoney2.cpp:453
+msgid "New payee"
+msgstr "Uusi maksunsaaja"
+
+#: kmymoney2.cpp:454
+msgid "Rename payee"
+msgstr "Nimeä maksunsaaja uudelleen"
+
+#: kmymoney2.cpp:455
+msgid "Delete payee"
+msgstr "Poista maksunsaaja"
+
+#: kmymoney2.cpp:457
+msgid "New budget"
+msgstr "Uusi budjetti"
+
+#: kmymoney2.cpp:458
+msgid "Rename budget"
+msgstr "Nimeä budjetti uudelleen"
+
+#: kmymoney2.cpp:459
+msgid "Delete budget"
+msgstr "Poista budjetti"
+
+#: kmymoney2.cpp:460
+msgid "Copy budget"
+msgstr "Kopioi budjetti"
+
+#: kmymoney2.cpp:461
+msgid "Change budget year"
+msgstr "Muuta budjettivuotta"
+
+#: kmymoney2.cpp:462
+msgid ""
+"_: Budget based on forecast\n"
+"Forecast"
+msgstr "Ennuste"
+
+#: kmymoney2.cpp:467 kmymoney2.cpp:3990 kmymoney2.cpp:3993 kmymoney2.cpp:3999
+msgid "New currency"
+msgstr "Uusi valuutta"
+
+#: kmymoney2.cpp:468 kmymoney2.cpp:4021 kmymoney2.cpp:4026
+msgid "Rename currency"
+msgstr "Nimeä valuutta uudelleen"
+
+#: kmymoney2.cpp:469 kmymoney2.cpp:4039
+msgid "Delete currency"
+msgstr "Poista valuutta"
+
+#: dialogs/rc.cpp:69 kmymoney2.cpp:470
+msgid "Select as base currency"
+msgstr "Valitse oletusvaluutaksi"
+
+#: kmymoney2.cpp:481
+msgid "View back"
+msgstr "Näytä taaksepäin"
+
+#: kmymoney2.cpp:482
+msgid "View forward"
+msgstr "Näytä eteenpäin"
+
+#: kmymoney2.cpp:611
+msgid "KMyMoney file needs saving. Save ?"
+msgstr "KMyMoney-tiedosto täytyy tallentaa. Tallennetaanko?"
+
+#: kmymoney2.cpp:757
+msgid "Creating new document..."
+msgstr "Luodaan uusi dokumentti..."
+
+#: kmymoney2.cpp:869 kmymoney2.cpp:884
+msgid "Open a file."
+msgstr "Avaa tiedosto."
+
+#: kmymoney2.cpp:872
+msgid ""
+"%1|KMyMoney files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|KMyMoney-tiedostot\n"
+"%2|Kaikki tiedostot (*.*)"
+
+#: kmymoney2.cpp:873
+msgid "Open File..."
+msgstr "Avaa tiedosto..."
+
+#: kmymoney2.cpp:925 kstartuplogo.cpp:100
+msgid "Loading file..."
+msgstr "Tiedostoa ladataan..."
+
+#: kmymoney2.cpp:986
+msgid ""
+"<b>%1</b> is either an invalid filename or the file does not exist. You can "
+"open another file or create a new one."
+msgstr ""
+"<b>%1</b> on epäkelpo tiedostonimi tai tiedostoa ei ole olemassa. Avaa "
+"toinen tiedosto tai luo uusi."
+
+#: kmymoney2.cpp:986
+msgid "File not found"
+msgstr "Tiedostoa ei löydy"
+
+#: kmymoney2.cpp:989
+msgid "File <b>%1</b> is already opened in another instance of KMyMoney"
+msgstr "Tiedosto <b>%1</b> on jo avattu toisessa KMyMoney-esiintymässä."
+
+#: kmymoney2.cpp:989
+msgid "Duplicate open"
+msgstr "Kahdesti avattu."
+
+#: kmymoney2.cpp:1001
+msgid "Saving file..."
+msgstr "Tiedostoa tallennetaan..."
+
+#: kmymoney2.cpp:1035 kmymoney2.cpp:1047 kmymoney2.cpp:1071
+#, c-format
+msgid "Additional encryption key(s) to be used: %1"
+msgstr "Lisäsalausavaimina käytetään: %1"
+
+#: kmymoney2.cpp:1056
+msgid "Saving file with a new filename..."
+msgstr "Tiedosto tallennetaan uudella nimellä..."
+
+#: kmymoney2.cpp:1067
+msgid "Encryption key to be used"
+msgstr "Salausavaimena käytetään"
+
+#: kmymoney2.cpp:1072
+msgid "Manage additional keys"
+msgstr "Hallinnoi lisäavaimia"
+
+#: kmymoney2.cpp:1079
+msgid "No encryption"
+msgstr "Ei salausta"
+
+#: kmymoney2.cpp:1102
+msgid ""
+"_: KMyMoney (Filefilter)\n"
+"KMyMoney files"
+msgstr "KMyMoney-tiedostot"
+
+#: kmymoney2.cpp:1103
+msgid ""
+"_: XML (Filefilter)\n"
+"XML files"
+msgstr "XML-tiedostot"
+
+#: kmymoney2.cpp:1104
+msgid ""
+"_: Anonymous (Filefilter)\n"
+"Anonymous files"
+msgstr "Anonyymitiedostot"
+
+#: kmymoney2.cpp:1105
+msgid "All files"
+msgstr "Kaikki tiedostot"
+
+#: kmymoney2.cpp:1193
+msgid "Saving file to database..."
+msgstr "Tiedosto tallennetaan tietokantaan..."
+
+#: kmymoney2.cpp:1207
+msgid "Cannot save to current database."
+msgstr "Ei voida tallentaa nykyiseen tietokantaan."
+
+#: kmymoney2.cpp:1225
+msgid "Closing window..."
+msgstr "Ikkunaa suljetaan..."
+
+#: kmymoney2.cpp:1228 kmymoney2.cpp:1249
+msgid "The file has been changed, save it ?"
+msgstr "Tiedosto on muuttunut, tallennetaanko?"
+
+#: kmymoney2.cpp:1339 kmymoney2.cpp:1352
+msgid "Ready."
+msgstr "Valmis."
+
+#: kmymoney2.cpp:1397 kmymoney2.cpp:1433
+msgid "No KMyMoneyFile open"
+msgstr "KMyMoney-tiedostoa ei ole avoinna."
+
+#: kmymoney2.cpp:1401
+msgid "Viewing personal data..."
+msgstr "Henkilökohtaisten tietojen katselu."
+
+#: kmymoney2.cpp:1408
+msgid "Edit Personal Data"
+msgstr "Muokkaa henkilökohtaisia tietoja"
+
+#: kmymoney2.cpp:1424
+#, c-format
+msgid "Unable to store user information: %1"
+msgstr "Käyttäjätietoja ei voida tallentaa: %1"
+
+#: kmymoney2.cpp:1447
+msgid "Importing account templates."
+msgstr "Tilipohjien tuonti."
+
+#: kmymoney2.cpp:1462
+msgid "Unable to import template(s): %1, thrown in %2:%3"
+msgstr "Tilipohjia ei kyetä tuomaan: %1, kohdasta %2:%3"
+
+#: kmymoney2.cpp:1471
+msgid "Exporting account templates."
+msgstr "Tilipohjamalleja viedään."
+
+#: kmymoney2.cpp:1474
+msgid ""
+"*.kmt|KMyMoney template files\n"
+"*.*|All files"
+msgstr ""
+"*.kmt|KMyMoney tilipohjamallit\n"
+"*.*|Kaikki tiedostot"
+
+#: kmymoney2.cpp:1475
+msgid "Save as..."
+msgstr "Tallenna nimellä..."
+
+#: kmymoney2.cpp:1517
+msgid "Importing file..."
+msgstr "Tuodaan tiedostoa..."
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "The statements have been processed with the following results:"
+msgstr "Tiliotteet on käsitelty seuraavin tuloksin:"
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:1754 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "Statement stats"
+msgstr "Tiliotetilasto"
+
+#: kmymoney2.cpp:1602
+msgid ""
+"You cannot import GnuCash data into an existing file. Do you wish to save "
+"this file?"
+msgstr ""
+"GnuCash-dokumenttia ei voida tuoda olemassa olevaan tiedostoon. Haluatko "
+"tallentaa nykyisen tiedoston ensin?"
+
+#: kmymoney2.cpp:1615
+msgid "Importing a Gnucash file."
+msgstr "Gnucash-tiedostoa tuodaan..."
+
+#: kmymoney2.cpp:1618
+msgid ""
+"%1|Gnucash files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Gnucash-tiedostot\n"
+"%2|Kaikki tiedostot (*.*)"
+
+#: kmymoney2.cpp:1619
+msgid "Import Gnucash file..."
+msgstr "Tuo Gnucash-tiedosto..."
+
+#: kmymoney2.cpp:1658
+msgid "Importing an XML Statement."
+msgstr "XML-muotoisen tiliotteen tuonti..."
+
+#: kmymoney2.cpp:1661
+msgid ""
+"%1|XML files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|XML-tiedostot\n"
+"%2|Kaikki tiedostot (*.*)"
+
+#: kmymoney2.cpp:1662
+msgid "Import XML Statement..."
+msgstr "Tuo XML-muotoinen tiliote..."
+
+#: kmymoney2.cpp:1718
+msgid "Error importing %1: This file is not a valid KMM statement file."
+msgstr ""
+"Virhe tuotaessa tiedostoa. Tiedosto %1 ei ole kelvollinen KMM-"
+"tiliotetiedosto."
+
+#: kmymoney2.cpp:1718
+msgid "Invalid Statement"
+msgstr "Epäkelpo tiliote"
+
+#: kmymoney2.cpp:1754
+msgid "The statement has been processed with the following results:"
+msgstr "Tiliote on käsitelty seuraavin tuloksin:"
+
+#: kmymoney2.cpp:1763
+msgid "Exporting file..."
+msgstr "Tiedoston vienti..."
+
+#: kmymoney2.cpp:1786
+msgid "The file <b>%1</b> already exists. Do you really want to override it?"
+msgstr "Tiedosto <b>%1</b> on jo olemassa. Ylikirjoitetaanko se?"
+
+#: kmymoney2.cpp:1786
+msgid "File already exists"
+msgstr "Tiedostonimi käytössä jo"
+
+#: dialogs/rc.cpp:347 dialogs/rc.cpp:649 dialogs/rc.cpp:798 kmymoney2.cpp:1815
+msgid "General"
+msgstr "Yleinen"
+
+#: kmymoney2.cpp:1816
+msgid "Register"
+msgstr "Tapahtumat"
+
+#: kmymoney2.cpp:1817 views/khomeview.cpp:88 views/kmymoneyview.cpp:136
+msgid "Home"
+msgstr "Etusivu"
+
+#: kmymoney2.cpp:1818 views/kmymoneyview.cpp:176
+msgid ""
+"Scheduled\n"
+"transactions"
+msgstr ""
+"Ajoitetut\n"
+"tapahtumat"
+
+#: kmymoney2.cpp:1819
+msgid "Encryption"
+msgstr "Salaus"
+
+#: kmymoney2.cpp:1820
+msgid "Colors"
+msgstr "Värit"
+
+#: dialogs/rc.cpp:344 dialogs/settings/rc.cpp:107 kmymoney2.cpp:1822
+#: widgets/rc.cpp:33
+msgid "Online Quotes"
+msgstr "Online-noteeraukset"
+
+#: kmymoney2.cpp:1823 reports/pivottable.cpp:2426 views/kmymoneyview.cpp:251
+#: views/kmymoneyview.cpp:253 views/kreportsview.cpp:1415 views/rc.cpp:41
+msgid "Forecast"
+msgstr "Ennusteet"
+
+#: kmymoney2.cpp:1824
+msgid "Plugins"
+msgstr "Liitännäiset"
+
+#: kmymoney2.cpp:1893
+msgid ""
+"The file must be saved first before it can be backed up. Do you want to "
+"continue?"
+msgstr "Tiedosto täytyy tallentaa ennenkuin se voidaan varmuuskopioida. Jatketaanko?"
+
+#: kmymoney2.cpp:1910
+msgid ""
+"The current implementation of the backup functionality only supports local "
+"files as source files! Your current source file is '%1'."
+msgstr ""
+"Toistaiseksi vain paikallisten lähdetiedostojen varmuuskopiointia tuetaan. "
+"Nykyinen lähdetiedosto on '%1'."
+
+#: kmymoney2.cpp:1913
+msgid "Local files only"
+msgstr "Paikalliset tiedostot ainoastaan"
+
+#: kmymoney2.cpp:1928
+#, c-format
+msgid "Mounting %1"
+msgstr "Liitetään %1"
+
+#: kmymoney2.cpp:1967
+msgid "Backup file for today exists on that device. Replace ?"
+msgstr "Laitteessa on jo varmuuskopio tälle päivälle. Korvataanko?"
+
+#: dialogs/rc.cpp:7 kmymoney2.cpp:1967 kmymoney2.cpp:1994 kmymoney2.cpp:2024
+#: kmymoney2.cpp:2032 kmymoney2.cpp:2057 kmymoney2.cpp:2059
+msgid "Backup"
+msgstr "Varmuuskopioi"
+
+#: kmymoney2.cpp:1967
+msgid "&Replace"
+msgstr "&Korvaa"
+
+#: kmymoney2.cpp:1972 kmymoney2.cpp:1997 kmymoney2.cpp:2016 kmymoney2.cpp:2035
+#, c-format
+msgid "Unmounting %1"
+msgstr "Irroitetaan %1"
+
+#: kmymoney2.cpp:1987
+#, c-format
+msgid "Writing %1"
+msgstr "Kirjoitetaan %1"
+
+#: kmymoney2.cpp:1994
+msgid "Error mounting device"
+msgstr "Virhe liitettäessä laitetta"
+
+#: converter/mymoneygncreader.cpp:1995 kmymoney2.cpp:2023 kmymoney2.cpp:2055
+msgid "Done"
+msgstr "Valmis"
+
+#: kmymoney2.cpp:2024 kmymoney2.cpp:2057
+msgid "File successfully backed up"
+msgstr "Tiedoston varmuuskopiointi onnistui"
+
+#: kmymoney2.cpp:2032
+msgid "Error copying file to device"
+msgstr "Virhe tiedoston kopioinnissa laitteelle"
+
+#: kmymoney2.cpp:2059
+msgid "Error unmounting device"
+msgstr "Virhe irroitettaessa laitetta"
+
+#: kmymoney2.cpp:2143
+#, c-format
+msgid "Cannot add institution: %1"
+msgstr "Rahalaitosta ei voida lisätä: %1"
+
+#: kmymoney2.cpp:2185
+#, c-format
+msgid "Unable to store institution: %1"
+msgstr "Rahalaitosta ei voitu tallentaa: %1"
+
+#: kmymoney2.cpp:2192
+#, c-format
+msgid "Unable to edit institution: %1"
+msgstr "Rahalaitosta %1 ei voitu muokata."
+
+#: kmymoney2.cpp:2203
+msgid "Do you really want to delete institution <b>%1</b> ?"
+msgstr "Haluatko varmasti poistaa rahalaitoksen <b>%1</b> ?"
+
+#: kmymoney2.cpp:2211 kmymoney2.cpp:2215
+#, c-format
+msgid "Unable to delete institution: %1"
+msgstr "Rahalaitosta ei voida poistaa: %1"
+
+#: kmymoney2.cpp:2268
+#, c-format
+msgid "Unable to find account: %1"
+msgstr "Tiliä ei löytynyt: %1"
+
+#: kmymoney2.cpp:2309
+msgid ""
+"This account is a liability and if the opening balance represents money "
+"owed, then it should be negative. Negate the amount?\n"
+"\n"
+"Please click Yes to change the opening balance to %1,\n"
+"Please click No to leave the amount as %2,\n"
+"Please click Cancel to abort the account creation."
+msgstr ""
+"Tämä tili on velkatilityyppinen, ja jos alkusaldon tulisi kuvata summaa joka "
+"ollaan velkaa, se täytyy olla negatiivinen. Vaihdetaanko summa "
+"negatiiviseksi?\n"
+"Paina Kyllä-painiketta jolloin summaksi vaihdetaan %1,\n"
+"Paina Ei-painiketta jolloin summaksi jätetään %2,\n"
+"Paina Peruuta-painiketta keskeyttääksesi tilin luonnin."
+
+#: kmymoney2.cpp:2345 kmymoney2.cpp:2346
+msgid "Loan payout"
+msgstr "Lainan maksuerä"
+
+#: dialogs/knewloanwizard.cpp:892 kmymoney2.cpp:2374
+#, c-format
+msgid "Unable to add account: %1"
+msgstr "Tiliä ei voida lisätä: %1"
+
+#: kmymoney2.cpp:2392
+msgid ""
+"The category <b>%1</b> currently does not exist. Do you want to create it?"
+"<p><i>The parent account will default to <b>%2</b> but can be changed in the "
+"following dialog</i>."
+msgstr ""
+"Kategoriaa <b>%1</b> ei ole. Luodaanko se?<p><i>Ylätason tili on "
+"oletusarvoisesti <b>%2</b>, mutta se voidaan vaihtaa seuraavassa ikkunassa</"
+"i>."
+
+#: kmymoney2.cpp:2392
+msgid "Create category"
+msgstr "Luo kategoria"
+
+#: kmymoney2.cpp:2429
+msgid "Create a new Category"
+msgstr "Luo uusi kategoria"
+
+#: kmymoney2.cpp:2505
+#, c-format
+msgid "Unable to create account: %1"
+msgstr "Tiliä ei voida luoda: %1"
+
+#: kmymoney2.cpp:2516
+msgid ""
+"The security <b>%1</b> currently does not exist as sub-account of <b>%2</b>. "
+"Do you want to create it?"
+msgstr "Arvopaperi <b>%1</b> ei ole alitilinä <b>%2</b>. Haluatko luoda sen?"
+
+#: kmymoney2.cpp:2517
+msgid "Create security"
+msgstr "Luo arvopaperi"
+
+#: kmymoney2.cpp:2551
+msgid "Do you really want to delete the investment <b>%1</b>?"
+msgstr "Haluatko varmasti poistaa sijoituksen <b>%1</b>?"
+
+#: kmymoney2.cpp:2551
+msgid "Delete investment"
+msgstr "Poista sijoitus"
+
+#: kmymoney2.cpp:2558
+#, c-format
+msgid "Unable to delete investment: %1"
+msgstr "Sijoitusta ei voida poistaa: %1"
+
+#: kmymoney2.cpp:2640 kmymoney2.cpp:2646
+msgid "Unable to add scheduled transaction: "
+msgstr "Ajoitettua tapahtumaa ei voitu lisätä:"
+
+#: kmymoney2.cpp:2722
+msgid "Adjusting transactions..."
+msgstr "Tapahtumia säädetään..."
+
+#: kmymoney2.cpp:2747
+msgid "Adjusting scheduled transactions..."
+msgstr "Ajoitettuja tapahtumia säädetään..."
+
+#: kmymoney2.cpp:2765
+msgid "Adjusting budgets..."
+msgstr "Budjettia säädetään..."
+
+#: kmymoney2.cpp:2783
+msgid "Unable to exchange category <b>%1</b> with category <b>%2</b>. Reason: %3"
+msgstr "Kategoriaa <b>%1</b> ei voida vaihtaa kategoriaan <b>%2</b>. Syy: %3"
+
+#: kmymoney2.cpp:2804
+msgid "Do you really want to delete category <b>%1</b>?"
+msgstr "Haluatko varmasti poistaa kategorian <b>%1</b>?"
+
+#: kmymoney2.cpp:2811
+msgid "Unable to delete category <b>%1</b>. Cause: %2"
+msgstr "Kategoriaa <b>%1</b> ei voida poistaa. Syy: %2"
+
+#: kmymoney2.cpp:2823
+msgid ""
+"Do you want to delete category <b>%1</b> with all its sub-categories or only "
+"the category itself? If you only delete the category itself, all its sub-"
+"categories will be made sub-categories of <b>%2</b>."
+msgstr ""
+"Haluatko poistaa kategorian <b>%1</b> itsensä? Jos poistat pelkän kategorian "
+"itsensä, kaikki sen alikategoriat tullaan liittämään <b>%2</b> "
+"alikategorioiksi."
+
+#: kmymoney2.cpp:2827
+msgid "Delete all"
+msgstr "Poista kaikki"
+
+#: kmymoney2.cpp:2828
+msgid "Just the category"
+msgstr "Vain kategoria"
+
+#: kmymoney2.cpp:2858
+msgid ""
+"Some sub-categories of category <b>%1</b> cannot be deleted, because they "
+"are still used. They will be made sub-categories of <b>%2</b>. Proceed?"
+msgstr ""
+"Joitakin kategorian <b>%1</b> alikategorioita ei voida poistaa koska ne ovat "
+"käytössä. Ne tullaan liittämään <b>%2</b>alikategorioiksi. Jatketaanko?"
+
+#: kmymoney2.cpp:2878
+msgid "Unable to delete a sub-category of category <b>%1</b>. Reason: %2"
+msgstr "Kategorian <b>%1</b> alikategoriaa ei voida poistaa. Syy: %2"
+
+#: kmymoney2.cpp:2889
+msgid "Do you really want to delete account <b>%1</b>?"
+msgstr "Haluatko varmasti poistaa tilin <b>%1</b>?"
+
+#: kmymoney2.cpp:2901
+msgid "Unable to delete account '%1'. Cause: %2"
+msgstr "Tiliä '%1' ei voitu poistaa. Syy: %2"
+
+#: kmymoney2.cpp:2917
+msgid "Edit account '%1'"
+msgstr "Muokkaa tiliä '%1'"
+
+#: kmymoney2.cpp:2922
+msgid "Edit category '%1'"
+msgstr "Muokkaa kategoriaa '%1'"
+
+#: kmymoney2.cpp:3008
+msgid "Unable to modify account '%1'. Cause: %2"
+msgstr "Tiliä '%1' ei voitu muokata. Syy: %2"
+
+#: kmymoney2.cpp:3065
+msgid ""
+"KMyMoney has detected some overdue scheduled transactions for this account. "
+"Do you want to enter those scheduled transactions now?"
+msgstr ""
+"On löytynyt myöhästyneitä ajoitettuja tapahtumia tälle tilille. Syötetäänkö "
+"nuo ajoitetut tapahtumat nyt?"
+
+#: kmymoney2.cpp:3065
+msgid "Scheduled transactions found"
+msgstr "Ajoitettuja tapahtumia löytyi"
+
+#: kmymoney2.cpp:3163
+msgid ""
+"You are about to finish the reconciliation of this account with a difference "
+"between your bank statement and the transactions marked as cleared.\n"
+"Are you sure you want to finish the reconciliation ?"
+msgstr ""
+"Tilin yhteensovittamista ollaan päättämässä vaikka tiliotteen ja "
+"varmistettujen tapahtumien välillä on eroavaisuuksia.\n"
+"Päätetäänkö yhteensovittaminen varmasti?"
+
+#: kmymoney2.cpp:3165
+msgid "Confirm end of reconciliation"
+msgstr "Vahvista yhteensovituksen päättäminen"
+
+#: kmymoney2.cpp:3339
+msgid ""
+"You have closed this account. It remains in the system because you have "
+"transactions which still refer to it, but is not shown in the views. You can "
+"make it visible again by going to the View menu and selecting <b>Show all "
+"accounts</b> or by unselecting the <b>Don't show closed accounts</b> setting."
+msgstr ""
+"Tili on suljettu. Se pysyy järjestelmässä koska siihen viittaavia tapahtumia "
+"on olemassa, vaikka niitä ei näytetä eri näkymissä. Tilin saa uudelleen "
+"näkyviin menemällä näkymät-valikkoon ja valitsemalla <b>Näytä kaikki tilit</"
+"b> tai poistamalla valinnan <b>Älä näytä suljettuja tilejä</b> -asetuksen."
+
+#: kmymoney2.cpp:3379
+msgid "<b>%1</b> cannot be moved to institution <b>%2</b>. Reason: %3"
+msgstr "<b>%1</b> ei voida siirtää rahalaitokseen <b>%2</b>. Syy: %3"
+
+#: kmymoney2.cpp:3393
+msgid "<b>%1</b> cannot be moved to <b>%2</b>. Reason: %3"
+msgstr "<b>%1</b>ei voida siirtää <b>%2</b>. Syy: %3"
+
+#: kmymoney2.cpp:3408
+msgid "%1 YTD Account Transactions"
+msgstr "Tilin %1 tapahtumat vuoden alusta tähän päivään"
+
+#: dialogs/kbalancechartdlg.cpp:71 kmymoney2.cpp:3409
+#: views/kforecastview.cpp:650 views/khomeview.cpp:276
+#: views/khomeview.cpp:1384 views/kreportsview.cpp:619
+msgid "Generated Report"
+msgstr "Automaattisesti luotu raportti"
+
+#: dialogs/rc.cpp:324 dialogs/settings/rc.cpp:80 kmymoney2.cpp:3411
+#: views/kreportsview.cpp:1062 views/rc.cpp:58 views/rc.cpp:59
+msgid "Transactions"
+msgstr "Tapahtumat"
+
+#: kmymoney2.cpp:3449
+#, c-format
+msgid "Unable to add scheduled transaction: %1"
+msgstr "Ajoitettua tapahtumaa ei voitu lisätä: %1"
+
+#: kmymoney2.cpp:3449
+msgid "Add scheduled transaction"
+msgstr "Lisää ajoitettu tapahtuma"
+
+#: kmymoney2.cpp:3489
+msgid ""
+"You have entered a scheduled transaction date of <b>%1</b>. Because the "
+"scheduled transaction was last paid on <b>%2</b>, KMyMoney will "
+"automatically adjust the scheduled transaction date to the next date unless "
+"the last payment date is reset. Do you want to reset the last payment date?"
+msgstr ""
+"Ajoitetun tapahtuman maksupäiväksi on syötetty <b>%1</b>. Koska tämä "
+"ajoitettu tapahtuma on viimeksi maksettu <b>%2</b>, säädetään maksupäiväksi "
+"automaattisesti seuraava eräpäivä, ellei viimeistä maksupäivää nollata. "
+"Nollataanko viimeinen maksupäivä?"
+
+#: kmymoney2.cpp:3489
+msgid "Reset Last Payment Date"
+msgstr "Nollaa viimeinen maksupäivä."
+
+#: kmymoney2.cpp:3499 kmymoney2.cpp:3519 kmymoney2.cpp:3531
+msgid "Unable to modify scheduled transaction '%1'"
+msgstr "Ajoitettua tapahtumaa '%1' ei voida muuttaa"
+
+#: kmymoney2.cpp:3543
+msgid "Are you sure you want to delete the scheduled transaction <b>%1</b>?"
+msgstr "Haluatko varmasti poistaa ajoitetun tapahtuman <b>%1</b>?"
+
+#: kmymoney2.cpp:3546
+msgid ""
+"In case of loan payments it is currently not possible to recreate the "
+"scheduled transaction."
+msgstr ""
+"Ajoitettujen tapahtumien uudelleenluonti lainan maksutapahtumille ei ole "
+"tällä hetkellä mahdollista."
+
+#: kmymoney2.cpp:3555
+msgid "Unable to remove scheduled transaction '%1'"
+msgstr "Ajoitettua tapahtumaa '%1' ei voida poistaa"
+
+#: kmymoney2.cpp:3569
+#, c-format
+msgid ""
+"_: Copy of scheduled transaction name\n"
+"Copy of %1"
+msgstr "%1 (kopio)"
+
+#: kmymoney2.cpp:3581 kmymoney2.cpp:4352
+msgid "Unable to duplicate transaction(s): %1, thrown in %2:%3"
+msgstr "Tapahtumaa ei voitu kahdentaa: %1, kohdasta %2:%3"
+
+#: kmymoney2.cpp:3595
+msgid "Do you really want to skip the <b>%1</b> transaction scheduled for <b>%2</b>?"
+msgstr "Haluatko varmasti jättää väliin <b>%2</b> ajoitetun tapahtuman <b>%1</b>?"
+
+#: kmymoney2.cpp:3605
+msgid "Unable to skip scheduled transaction <b>%1</b>."
+msgstr "Ajoitettua tapahtumaa <b>%1</b> ei voida ohittaa."
+
+#: kmymoney2.cpp:3618
+msgid "Unknown scheduled transaction '%1'"
+msgstr "Tuntematon ajoitettu tapahtuma '%1'"
+
+#: kmymoney2.cpp:3673
+msgid ""
+"Are you sure you wish to stop this scheduled transaction from being entered "
+"into the register?\n"
+"\n"
+"KMyMoney will prompt you again next time it starts unless you manually enter "
+"it later."
+msgstr ""
+"Lopetetaanko varmasti tämän ajoitetun tapahtuman kirjaaminen tapahtumiin?\n"
+"\n"
+"Tätä tullaan kysymään uudestaan seuraavalla käynnistyskerralla, jos et "
+"kirjaa tapahtumaa käsin myöhemmin."
+
+#: kmymoney2.cpp:3725 kmymoney2.cpp:3732
+msgid "Unable to enter scheduled transaction '%1'"
+msgstr "Ei voida kirjata ajoitettua tapahtumaa '%1'"
+
+#: kmymoney2.cpp:3743 kmymoney2.cpp:3783
+msgid "New Payee"
+msgstr "Uusi maksunsaaja"
+
+#: kmymoney2.cpp:3745
+msgid "Do you want to add <b>%1</b> as payer/receiver ?"
+msgstr "Haluatko lisätä <b>%1</b> maksajaksi tai vastaanottajaksi?"
+
+#: converter/mymoneystatementreader.cpp:892 kmymoney2.cpp:3747
+msgid "New payee/receiver"
+msgstr "Uusi maksunsaaja / vastaanottaja"
+
+#: kmymoney2.cpp:3773
+msgid "Unable to add payee"
+msgstr "Maksunsaajaa ei voitu lisätä"
+
+#: kmymoney2.cpp:3826
+msgid "Do you really want to remove the payee <b>%1</b>?"
+msgstr "Poistetaanko maksunsaaja <b>%1</b>?"
+
+#: kmymoney2.cpp:3828
+msgid "Do you really want to remove all selected payees?"
+msgstr "Poistetaanko kaikki valitut maksunsaajat?"
+
+#: kmymoney2.cpp:3830
+msgid "Remove Payee"
+msgstr "Poista maksunsaaja"
+
+#: kmymoney2.cpp:3870
+msgid ""
+"At least one transaction/scheduled transaction is still referenced by a "
+"payee. Currently you have all payees selected. However, at least one payee "
+"must remain so that the transaction/scheduled transaction can be reassigned."
+msgstr ""
+"Maksunsaaja liittyy vähintään yhteen tapahtumaan tai ajoitettuun tapahtumaan."
+" "
+"Kaikki maksunsaajat ovat valittuna nyt. Vähintään yksi maksunsaaja täytyy jäädä kuitenkin, jotta tapahtuma tai ajoitettu tapahtuma voidaan uudelleen liittää."
+
+#: kmymoney2.cpp:3925
+msgid "Unable to reassign payee of transaction/split"
+msgstr "Tapahtuman / jaottelun maksunsaajaa ei voitu uudelleenasettaa."
+
+#: converter/mymoneyqifreader.cpp:534 converter/mymoneystatementreader.cpp:959
+#: kmymoney2.cpp:3926 kmymoney2.cpp:3983 views/kbudgetview.cpp:636
+#: views/kbudgetview.cpp:737 views/kbudgetview.cpp:751
+#: views/kpayeesview.cpp:519 views/kpayeesview.cpp:870
+msgid "thrown in"
+msgstr "tapahtunut"
+
+#: kmymoney2.cpp:3982
+msgid "Unable to remove payee(s)"
+msgstr "Maksunsaajaa ei voitu poistaa"
+
+#: kmymoney2.cpp:3990
+msgid "Enter ISO 4217 code for the new currency"
+msgstr "Syötä ISO 4217 -koodi uutta valuuttaa varten."
+
+#: kmymoney2.cpp:3999
+#, c-format
+msgid "Cannot create new currency. %1"
+msgstr "Ei voitu luoda uutta valuuttaa. %1"
+
+#: kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, c-format
+msgid "Cannot rename currency. %1"
+msgstr "Valuuttaa ei voitu uudelleennimetä. %1"
+
+#: kmymoney2.cpp:4039
+msgid "Cannot delete currency %1. %2"
+msgstr "Valuuttaa %1 ei voitu poistaa. %2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Cannot set %1 as base currency: %2"
+msgstr "Ei voitu asettaa oletusvaluutaksi %1: %2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Set base currency"
+msgstr "Aseta oletusvaluutaksi."
+
+#: kmymoney2.cpp:4065
+#, c-format
+msgid "Budget %1"
+msgstr "Budjetti %1"
+
+#: kmymoney2.cpp:4075
+msgid "Budget %1 (%2)"
+msgstr "Budjetti %1 (%2)"
+
+#: kmymoney2.cpp:4090 kmymoney2.cpp:4139
+msgid "Unable to add budget: %1, thrown in %2:%3"
+msgstr "Ei voida lisätä budjettia: %1, tapahtunut %2:%3"
+
+#: kmymoney2.cpp:4105
+msgid "Do you really want to remove the budget <b>%1</b>?"
+msgstr "Haluatko varmasti poistaa budjetin <b>%1</b>?"
+
+#: kmymoney2.cpp:4107
+msgid "Do you really want to remove all selected budgets?"
+msgstr "Haluatko varmasti poistaa kaikki valitut budjetit?"
+
+#: kmymoney2.cpp:4109
+msgid "Remove Budget"
+msgstr "Poista budjetti"
+
+#: kmymoney2.cpp:4122
+msgid "Unable to remove budget: %1, thrown in %2:%3"
+msgstr "Budjettia %1 ei voitu poistaa, kohdassa %2:%3"
+
+#: kmymoney2.cpp:4134 views/kreportsview.cpp:659
+#, c-format
+msgid "Copy of %1"
+msgstr "Kopio %1:sta"
+
+#: kmymoney2.cpp:4164
+msgid "Select year"
+msgstr "Valitse vuosi"
+
+#: kmymoney2.cpp:4164
+msgid "Budget year"
+msgstr "Budjettivuosi"
+
+#: kmymoney2.cpp:4176 kmymoney2.cpp:4214 kmymoney2.cpp:4274
+msgid "Unable to modify budget: %1, thrown in %2:%3"
+msgstr "Budjettia %1 ei voitu muuttaa, kohdassa %2:%3."
+
+#: kmymoney2.cpp:4192 kmymoney2.cpp:4250
+msgid ""
+"The current budget already contains data. Continuing will replace all "
+"current values of this budget."
+msgstr ""
+"Nykyinen budjetti sisältää jo tietoa. Tämän budjetin kaikki arvot "
+"korvataanuusilla jos jatketaan."
+
+#: kmymoney2.cpp:4222
+msgid ""
+"Please be aware that changes made in the following dialog affect all KDE "
+"applications not only KMyMoney."
+msgstr ""
+"Huom. tässä ikkunassa tehdyt muutokset vaikuttavat kaikkiinKDE-ohjelmiin, ei "
+"pelkästään KMyMoneyhin."
+
+#: kmymoney2.cpp:4292
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to delete the transactions anyway?"
+msgstr ""
+"Ainakin yksi jaottelu valituista tapahtumista on jo yhteensovitettu. "
+"Jatketaanko siitä huolimatta ja poistetaan tapahtumat?"
+
+#: kmymoney2.cpp:4295 views/kgloballedgerview.cpp:1043
+msgid "Transaction already reconciled"
+msgstr "Tapahtuma on jo yhteensovitettu"
+
+#: kmymoney2.cpp:4301
+msgid "Do you really want to delete the selected transaction?"
+msgstr "Haluatko varmasti poistaa valitut tapahtumat?"
+
+#: kmymoney2.cpp:4303
+msgid "Do you really want to delete all %1 selected transactions?"
+msgstr "Haluatko varmasti poistaa kaikki %1 valittua tapahtumaa?"
+
+#: kmymoney2.cpp:4305
+msgid "Delete transaction"
+msgstr "Poista tapahtuma"
+
+#: kmymoney2.cpp:4306
+msgid "Deleting transactions"
+msgstr "Poistaa tapahtumia..."
+
+#: kmymoney2.cpp:4321
+msgid "Duplicating transactions"
+msgstr "Kahdentaa tapahtumia..."
+
+#: kmymoney2.cpp:4378
+msgid "Unable to delete transaction(s): %1, thrown in %2:%3"
+msgstr "Tapahtumaa ei voitu poistaa: %1, kohdassa %2:%3"
+
+#: kmymoney2.cpp:4452 kmymoney2.cpp:4622
+msgid "Unable to modify transaction: %1, thrown in %2:%3"
+msgstr "Tapahtumaa %1 ei voitu muokata, kohdassa %2:%3"
+
+#: kmymoney2.cpp:4514
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling and<br>- <b>Cancel</b> returns to the "
+"transaction editor.<p>You can also select an option to save the transaction "
+"automatically when e.g. selecting another transaction."
+msgstr ""
+"Perutaanko tämän tapahtuman muutokset, ilman että ne tallennetaan?<p>- "
+"<b>Kyllä</b> peruuttaa tämän tapahtuman muutokset<br>- <b>Ei</b>tallentaa "
+"tämän tapahtuman muutokset ennen peruuttamista, sekä<br>- <b>Peruuta</b> "
+"palaa tapahtuman muutoksiin.<p>Tapahtumat voidaan myös valita tallentumaan "
+"automaattisesti, esimerkiksi silloin kun valitaan toinen tapahtuma."
+
+#: kmymoney2.cpp:4514 kmymoney2.cpp:4517
+msgid "Cancel transaction edit"
+msgstr "Peruuta tapahtuman muokkaaminen."
+
+#: kmymoney2.cpp:4517
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling.<p>You can also select an option to save the "
+"transaction automatically when e.g. selecting another transaction."
+msgstr ""
+"Perutaanko tämän tapahtuman muutokset, ilman että ne tallennetaan?<p>- "
+"<b>Kyllä</b> peruuttaa tämän tapahtuman muutokset<br>- <b>Ei</b>tallentaa "
+"tämän tapahtuman muutokset ennen peruuttamista.<p>Tapahtumat voidaan myös "
+"valita tallentumaan automaattisesti, esimerkiksi silloin kun valitaan toinen "
+"tapahtuma."
+
+#: kmymoney2.cpp:4667
+msgid "Unable to accept transaction: %1, thrown in %2:%3"
+msgstr "Tapahtumaa %1 ei voitu hyväksyä, kohdassa %2:%3"
+
+#: kmymoney2.cpp:4846
+msgid "Unable to unmatch the selected transactions"
+msgstr "Täsmäystä ei voitu poistaa valituista tapahtumista."
+
+#: kmymoney2.cpp:4885
+msgid "No manually entered transaction selected for matching"
+msgstr "Käsin syötettyä tapahtumaa ei ole valittuna täsmäämistä varten"
+
+#: kmymoney2.cpp:4887
+msgid "No imported transaction selected for matching"
+msgstr "Täsmäykseen ei ole valittu tuotuja tapahtumia."
+
+#: kmymoney2.cpp:4895
+msgid "Unable to match the selected transactions"
+msgstr "Valittuja tapahtumia ei voitu täsmätä."
+
+#: kmymoney2.cpp:5097
+msgid "Create a new transaction"
+msgstr "Luo uusi tapahtuma"
+
+#: kmymoney2.cpp:5163
+msgid "Duplicate the current selected transactions"
+msgstr "Kahdenna valitut tapahtumat"
+
+#: kmymoney2.cpp:5223
+msgid ""
+"_: Button text for unmatch transaction\n"
+"Unmatch"
+msgstr "Poista täsmäys"
+
+#: kmymoney2.cpp:5451 kmymoney2.cpp:5473
+msgid "Goto '%1'"
+msgstr "Siirry '%1'"
+
+#: kmymoney2.cpp:5582
+msgid "Running consistency check..."
+msgstr "Yhtenäisyystarkistus..."
+
+#: kmymoney2.cpp:5590
+#, c-format
+msgid "Consistency check failed: %1"
+msgstr "Yhtenäisyystarkistus epäonnistui: %1"
+
+#: kmymoney2.cpp:5594
+msgid "Consistency check result"
+msgstr "Yhtenäisyystarkistuksen tulokset"
+
+#: kmymoney2.cpp:5603
+msgid "Checking for overdue scheduled transactions..."
+msgstr "Tarkistetaan erääntyneitä ajoitettuja tapahtumia..."
+
+#: kmymoney2.cpp:5740
+msgid "You must first select a KMyMoney file before you can import a statement."
+msgstr "Jotta tiliote voidaan tuoda, täytyy KMyMoney-tiedosto olla valittuna ensin."
+
+#: kmymoney2.cpp:5746
+msgid "Importing a statement via Web Connect"
+msgstr "Tuodaan tiliotetietoja Web-liittymän kautta..."
+
+#: kmymoney2.cpp:5759
+msgid ""
+"Unable to import %1 using %2 plugin. The plugin returned the following "
+"error: %3"
+msgstr ""
+"Liitännäistä %2 ei voitu tuoda käyttäen %1:a. Liitännäinen palautti virheen: "
+"%3"
+
+#: kmymoney2.cpp:5759 plugins/ofximport/ofximporterplugin.cpp:646
+msgid "Importing error"
+msgstr "Tuontivirhe"
+
+#: kmymoney2.cpp:5780
+msgid "All messages have been enabled."
+msgstr "Kaikki viestit on otettu käyttöön."
+
+#: kmymoney2.cpp:5780
+msgid "All messages"
+msgstr "Kaikki viestit"
+
+#: kmymoney2.cpp:5855
+msgid "Auto saving..."
+msgstr "Automaattitallennus..."
+
+#: kmymoney2.cpp:5913
+msgid "Unable to setup online parameters for account ''%1'"
+msgstr "Online-parametrejä ei voitu asettaa tilille ''%1'"
+
+#: kmymoney2.cpp:5928
+msgid ""
+"Do you really want to remove the mapping of account <b>%1</b> to an online "
+"account? Depending on the details of the online banking method used, this "
+"action cannot be reverted."
+msgstr ""
+"Poistetaanko liitos tililtä <b>%1</b> online-tilille? Online-pankista "
+"riippuen, tätä toimintoa ei voida palauttaa."
+
+#: kmymoney2.cpp:5928
+msgid "Remove mapping to online account"
+msgstr "Poista liitos online-tiliin"
+
+#: kmymoney2.cpp:5939
+#, c-format
+msgid "Unable to unmap account from online account: %1"
+msgstr "Online-tilin %1 liitosta tilille ei voitu poistaa."
+
+#: kmymoney2.cpp:5956
+msgid " (Brokerage)"
+msgstr " (Maksunvälittäjä)"
+
+#: kmymoney2.cpp:5957
+msgid ""
+"You try to map a brokerage account to an online account. This is usually not "
+"advisable. In general, the investment account should be mapped to the online "
+"account. Please cancel if you intended to map the investment account, "
+"continue otherwise"
+msgstr ""
+"Välityspalkkiotiliä yritettiin liittää online-tiliin. Tämä ei ole yleisesti "
+"ottaen suositeltavaa, vaan olisi parempi liittää sijoitustili online-"
+"tiliksi. Jos aiottiin liittää sijoitustili, peruuta, muutoin jatka."
+
+#: kmymoney2.cpp:5957
+msgid "Mapping brokerage account"
+msgstr "Liitetään välityspalkkiotili"
+
+#: kmymoney2.cpp:5964
+msgid "Select online banking plugin"
+msgstr "Valitse liitännäinen online-pankille."
+
+#: kmymoney2.cpp:6005
+#, c-format
+msgid "Unable to map account to online account: %1"
+msgstr "Tiliä ei voida liittää online-tiliin: %1"
+
+#: converter/mymoneyqifreader.cpp:407 converter/mymoneytemplate.cpp:73
+#: views/kmymoneyview.cpp:590
+msgid "Error while loading file '%1'!"
+msgstr "Tiedoston %1 latauksessa tapahtui virhe!"
+
+#: converter/mymoneyqifreader.cpp:409 converter/mymoneyqifreader.cpp:965
+#: converter/mymoneytemplate.cpp:75 views/kmymoneyview.cpp:592
+msgid "File access error"
+msgstr "Tiedoston avausvirhe"
+
+#: converter/mymoneytemplate.cpp:84
+msgid "<b>%1</b> is not a template file."
+msgstr "<b>%1</b> ei ole tiedostopohja."
+
+#: converter/mymoneytemplate.cpp:85 views/kmymoneyview.cpp:603
+msgid "Filetype Error"
+msgstr "Tiedostotyyppi virheellinen"
+
+#: converter/mymoneytemplate.cpp:93
+msgid "Error while reading template file <b>%1</b> in line %2, column %3"
+msgstr "Virhe luettaessa tilipohjaa <b>%1</b> rivi %2, sarake %3."
+
+#: converter/mymoneytemplate.cpp:94
+msgid "Template Error"
+msgstr "Tilipohjavirhe"
+
+#: converter/mymoneytemplate.cpp:101
+msgid "File '%1' not found!"
+msgstr "%1 -tiedostoa ei löytynyt!"
+
+#: converter/mymoneytemplate.cpp:142
+msgid "Invalid tag <b>%1</b> in template file <b>%2</b>!"
+msgstr "Epäkelpo tunniste <b>%1</b> tilipohjassa <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:214
+#, c-format
+msgid "Loading template %1"
+msgstr "Ladataan tilipohjaa %1"
+
+#: converter/mymoneytemplate.cpp:241
+msgid "Invalid top-level account type <b>%1</b> in template file <b>%2</b>!"
+msgstr "Väärä ylätason tilityyppi <b>%1</b> tilipohjassa <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:309
+msgid "Invalid flag type <b>%1</b> for account <b>%3</b> in template file <b>%2</b>!"
+msgstr "Väärä lipputyyppi <b>%1</b> tilille <b>%3</b> tilipohjassa <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:398 converter/mymoneytemplate.cpp:401
+#: views/kmymoneyview.cpp:1151 views/kmymoneyview.cpp:1154
+msgid "Unable to write changes to '%1'"
+msgstr "Muutoksia ei voitu kirjoittaa %1-tiedostoon."
+
+#: converter/mymoneytemplate.cpp:407 views/kmymoneyview.cpp:1162
+msgid "Unable to upload to '%1'"
+msgstr "Lataus '%1':een ei ole mahdollista."
+
+#: converter/mymoneyqifwriter.cpp:70
+msgid ""
+"Unexpected exception '%1' thrown in %2, line %3 caught in MyMoneyQifWriter::"
+"write()"
+msgstr ""
+"Ennakoimaton poikkeus '%1' kohdassa %2, rivi %3. Tapahtui MyMoneyQifWriter::"
+"write() -funktiossa."
+
+#: converter/mymoneyqifwriter.cpp:80
+msgid "Unable to open file '%1' for writing"
+msgstr "Tiedostoa '%1' ei voida avata kirjoittamista varten"
+
+#: converter/webpricequote.cpp:340
+#, c-format
+msgid "Symbol found: %1"
+msgstr "Symboli löytyi: %1"
+
+#: converter/webpricequote.cpp:368
+msgid "Price found: %1 (%2)"
+msgstr "Hinta löytyi: %1 (%2)"
+
+#: converter/webpricequote.cpp:380
+#, c-format
+msgid "Date found: %1"
+msgstr "Päivämäärä löytyi: %1"
+
+#: converter/webpricequote.cpp:397 converter/webpricequote.cpp:403
+#, c-format
+msgid "Unable to update price for %1"
+msgstr "Hintoja ei voitu päivittää %1 :lle."
+
+#: converter/mymoneyqifreader.cpp:170
+msgid ""
+"_: Category name\n"
+"Reinvested dividend"
+msgstr "Uudelleensijoitettu osinko"
+
+#: converter/mymoneyqifreader.cpp:173
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (long term)"
+msgstr "Uudelleensijoitettu osinko (pitkäaikainen)"
+
+#: converter/mymoneyqifreader.cpp:176
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (short term)"
+msgstr "Uudelleensijoitettu osinko (lyhytaikainen)"
+
+#: converter/mymoneyqifreader.cpp:179
+msgid ""
+"_: Category name\n"
+"Dividend"
+msgstr "Osinko"
+
+#: converter/mymoneyqifreader.cpp:182
+msgid ""
+"_: Category name\n"
+"Interest"
+msgstr "Korko"
+
+#: converter/mymoneyqifreader.cpp:185
+msgid ""
+"_: Category name\n"
+"Capital Gain (short term)"
+msgstr "Pääomavoitto (lyhytaikainen)"
+
+#: converter/mymoneyqifreader.cpp:188
+msgid ""
+"_: Category name\n"
+"Capital Gain (mid term)"
+msgstr "Pääomavoitto (keskipitkä)"
+
+#: converter/mymoneyqifreader.cpp:191
+msgid ""
+"_: Category name\n"
+"Capital Gain (long term)"
+msgstr "Pääomavoitto (pitkäaikainen)"
+
+#: converter/mymoneyqifreader.cpp:194
+msgid ""
+"_: Category name\n"
+"Returned capital"
+msgstr "Palautunut pääoma"
+
+#: converter/mymoneyqifreader.cpp:197
+msgid ""
+"_: Category name\n"
+"Miscellaneous income"
+msgstr "Sekalaiset tulot"
+
+#: converter/mymoneyqifreader.cpp:200
+msgid ""
+"_: Category name\n"
+"Miscellaneous expense"
+msgstr "Sekalaiset menot"
+
+#: converter/mymoneyqifreader.cpp:203
+msgid ""
+"_: Category name\n"
+"Investment fees"
+msgstr "Sijoitusmaksut"
+
+#: converter/mymoneyqifreader.cpp:205
+#, c-format
+msgid "Unknown QIF type %1"
+msgstr "Tuntematon QIF-tyyppi %1"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Date format selection"
+msgstr "Päivämäärämuodon valinta"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Pick the date format that suits your input file"
+msgstr "Valitse päivämäärämuoto joka on käytössä sisäänluettavassa tiedostossa."
+
+#: converter/mymoneyqifreader.cpp:366
+msgid "Importing QIF ..."
+msgstr "Tuodaan QIF-tiedosto..."
+
+#: converter/mymoneyqifreader.cpp:442
+msgid "Reading QIF ..."
+msgstr "Luetaan QIF..."
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Adding transactions"
+msgstr "Lisätään tapahtumat"
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Now adding the transactions to your ledger..."
+msgstr "Lisätään tapahtumia kirjanpitoon..."
+
+#: converter/mymoneyqifreader.cpp:533
+msgid "Unable to add transactions"
+msgstr "Tapahtumia ei voitu lisätä."
+
+#: converter/mymoneyqifreader.cpp:567
+msgid ""
+"_: QIF tag for liability account\n"
+"Oth L"
+msgstr "Oth L"
+
+#: converter/mymoneyqifreader.cpp:572
+msgid ""
+"_: QIF tag for category\n"
+"Cat"
+msgstr "Cat"
+
+#: converter/mymoneyqifreader.cpp:575
+msgid ""
+"_: QIF tag for security\n"
+"Security"
+msgstr "Security"
+
+#: converter/mymoneyqifreader.cpp:578
+msgid ""
+"_: QIF tag for investment account\n"
+"Invst"
+msgstr "Invst"
+
+#: converter/mymoneyqifreader.cpp:581
+msgid ""
+"_: QIF tag for prices\n"
+"Prices"
+msgstr "Prices"
+
+#: converter/mymoneyqifreader.cpp:599
+msgid ""
+"_: QIF tag for a class\n"
+"Class"
+msgstr "Class"
+
+#: converter/mymoneyqifreader.cpp:753 converter/mymoneyqifreader.cpp:2203
+msgid ""
+"The %1 account currently has an opening balance of %2. This QIF file reports "
+"an opening balance of %3. Would you like to overwrite the current balance "
+"with the one from the QIF file?"
+msgstr ""
+"Tilillä %1 on alkusaldo %2. QIF-tiedosto kertoo alkusaldoksi %3. "
+"Ylikirjoitetaanko nykyinen alkusaldo QIF-tiedostosta?"
+
+#: converter/mymoneyqifreader.cpp:754 converter/mymoneyqifreader.cpp:2204
+msgid "Overwrite opening balance"
+msgstr "Ylikirjoita alkusaldo"
+
+#: converter/mymoneyqifreader.cpp:879 converter/mymoneyqifreader.cpp:890
+#: converter/mymoneyqifreader.cpp:914
+msgid "Autogenerated by QIF importer"
+msgstr "Automaattisesti generoitu QIF-tuojalla"
+
+#: converter/mymoneyqifreader.cpp:907
+msgid "QIF imported, no account name supplied"
+msgstr "QIF-tuotu, tilinimeä ei annettu."
+
+#: converter/mymoneyqifreader.cpp:940
+msgid ""
+"KMyMoney has imported a second opening balance transaction into account <b>%"
+"1</b> which differs from the one found already on file. Please correct this "
+"manually once the import is done."
+msgstr ""
+"Tilille <b>%1</b> on tuotu toinen alkusaldotapahtuma, joka poikkeaa "
+"aikaisemmasta alkusaldosta. Tämä tulee korjata käsin kun tuonti on saatu "
+"päätökseen."
+
+#: converter/mymoneyqifreader.cpp:940
+msgid "Opening balance problem"
+msgstr "Alkusaldo-ongelma"
+
+#: converter/mymoneyqifreader.cpp:963
+msgid "Error while creating opening balance transaction"
+msgstr "Virhe luotaessa alkusaldotapahtumaa."
+
+#: converter/mymoneyqifreader.cpp:1029 converter/mymoneyqifreader.cpp:1276
+msgid ""
+"The date entry \"%1\" read from the file cannot be interpreted through the "
+"current date profile setting of \"%2\".\n"
+"\n"
+"Pressing \"Continue\" will assign todays date to the transaction. Pressing "
+"\"Cancel\" will abort the import operation. You can then restart the import "
+"and select a different QIF profile or create a new one."
+msgstr ""
+"Tiedostosta luettua päivämäärää \"%1\" ei voida tulkita nykyisillä "
+"päivämääräasetuksilla \"%2\".\n"
+"\n"
+"Valitsemalla \"Jatka\" asetetaan nykyinen päivämäärä tapahtumalle. "
+"Valitsemalla \"Peruuta\" tuontioperaatio keskeytetään. Tuonti voidaan "
+"uudelleenkäynnistää ja valita toinen QIF-profiili tai luoda uusi."
+
+#: converter/mymoneyqifreader.cpp:1035 converter/mymoneyqifreader.cpp:1282
+msgid "Invalid date format"
+msgstr "Väärä päivämäärämuoto"
+
+#: converter/mymoneyqifreader.cpp:1398
+#: converter/mymoneystatementreader.cpp:589
+#: converter/mymoneystatementreader.cpp:592
+msgid "Statement Importer"
+msgstr "Tiliotteen tuoja"
+
+#: converter/mymoneyqifreader.cpp:1413
+#: converter/mymoneystatementreader.cpp:644
+msgid ""
+"This investment account does not contain the \"%1\" security. Transactions "
+"involving this security will be ignored."
+msgstr ""
+"Tämä sijoitustili ei sisällä '%1'-arvopaperia. Tähän arvopaperiin liittyvät "
+"tapahtumat ohitetaan."
+
+#: converter/mymoneyqifreader.cpp:1415
+#: converter/mymoneystatementreader.cpp:612
+#: converter/mymoneystatementreader.cpp:644
+msgid "Security not found"
+msgstr "Arvopaperia ei löydy"
+
+#: converter/mymoneyqifreader.cpp:2021
+msgid "%1 (Investment)"
+msgstr "%1 (Sijoitus)"
+
+#: converter/mymoneyqifreader.cpp:2022
+msgid "Autogenerated by QIF importer from type Mutual account entry"
+msgstr "Automaattisesti luotu QIF-tuojalla sijoitusrahastotilistä."
+
+#: converter/mymoneyqifreader.cpp:2085 converter/mymoneyqifreader.cpp:2228
+msgid "account"
+msgstr "tili"
+
+#: converter/mymoneyqifreader.cpp:2086
+msgid "al"
+msgstr "al"
+
+#: converter/mymoneyqifreader.cpp:2093
+msgid "category"
+msgstr "kategoria"
+
+#: converter/mymoneyqifreader.cpp:2094
+msgid "ei"
+msgstr "ei"
+
+#: converter/mymoneyqifreader.cpp:2095
+msgid "Category selection"
+msgstr "Kategorian valinta"
+
+#: converter/mymoneyqifreader.cpp:2110
+msgid "Account \"%1\" disappeared: "
+msgstr "Tili \"%1\" on hävinnyt: "
+
+#: converter/mymoneyqifreader.cpp:2131
+msgid "The %1 '%2' does not exist. Do you want to create it?"
+msgstr "%1 '%2' ei ole olemassa. Haluatko luoda sen?"
+
+#: converter/mymoneyqifreader.cpp:2140
+#, c-format
+msgid "Select %1"
+msgstr "Valitse %1"
+
+#: converter/mymoneyqifreader.cpp:2142
+msgid ""
+"The %1 <b>%2</b> currently exists. Do you want to import transactions to "
+"this account?"
+msgstr "%1 <b>%2</b> on olemassa. Tuodaanko tapahtumat tälle tilille?"
+
+#: converter/mymoneyqifreader.cpp:2147
+msgid ""
+"The %1 <b>%2</b> currently does not exist. You can create a new %3 by "
+"pressing the <b>Create</b> button or select another %4 manually from the "
+"selection box."
+msgstr ""
+"%1 <b>%2</b> ei ole olemassa. Uusi %3 voidaan luoda valitsemalla <b>Luo "
+"uusi</b> tai valitsemalla vaihtoehtoisesti %4 käsin valintalaatikosta."
+
+#: converter/mymoneyqifreader.cpp:2154
+#, c-format
+msgid "Import transactions to %1"
+msgstr "Tuo tapahtumat %1"
+
+#: converter/mymoneyqifreader.cpp:2155
+msgid ""
+"No %1 information has been found in the selected QIF file. Please select an "
+"account using the selection box in the dialog or create a new %2 by pressing "
+"the <b>Create</b> button."
+msgstr ""
+"%1 tietoa ei löytynyt QIF-tiedostosta. Valitse tili käyttäen "
+"valintalaatikkoa ikkunassa, tai luo uusi %2 valitsemalla <b>Luo uusi</b>"
+
+#: converter/mymoneyqifreader.cpp:2229
+msgid "You must select or create an account."
+msgstr "Tili täytyy valita tai luoda."
+
+#: converter/mymoneyqifreader.cpp:2231
+msgid "You must select or create a category."
+msgstr "Kategoria täytyy valita tai luoda."
+
+#: converter/mymoneystatementreader.cpp:100
+msgid "_Fees"
+msgstr "_Maksut"
+
+#: converter/mymoneystatementreader.cpp:106
+msgid "_Dividend"
+msgstr "_Osinko"
+
+#: converter/mymoneystatementreader.cpp:289
+#, c-format
+msgid "Importing statement for account %1"
+msgstr "Tuodaan tiliotetta tilille %1."
+
+#: converter/mymoneystatementreader.cpp:291
+msgid "Importing statement without transactions"
+msgstr "Tiliote tuodaan ilman tapahtumia"
+
+#: converter/mymoneystatementreader.cpp:385
+msgid " Statement balance is not contained in statement."
+msgstr " Saldoa ei ole tiliotteella."
+
+#: converter/mymoneystatementreader.cpp:387
+msgid " Statement balance on %1 is reported to be %2"
+msgstr " %1:n tiliotteen saldo on raportoitu olevan %2"
+
+#: converter/mymoneystatementreader.cpp:389
+msgid " Transactions"
+msgstr " Tapahtumat"
+
+#: converter/mymoneystatementreader.cpp:390
+msgid " %1 processed"
+msgstr " %1 käsitelty"
+
+#: converter/mymoneystatementreader.cpp:391
+msgid " %1 added"
+msgstr " %1 lisätty"
+
+#: converter/mymoneystatementreader.cpp:392
+msgid " %1 matched"
+msgstr " %1 täsmätty"
+
+#: converter/mymoneystatementreader.cpp:393
+msgid " %1 duplicates"
+msgstr " %1 kahdennettu"
+
+#: converter/mymoneystatementreader.cpp:394
+msgid " Payees"
+msgstr " Maksujen saajat"
+
+#: converter/mymoneystatementreader.cpp:395
+msgid " %1 created"
+msgstr " %1 luotu"
+
+#: converter/mymoneystatementreader.cpp:483
+#, c-format
+msgid "Error creating security record: %1"
+msgstr "Virhe luotaessa arvopaperitietuetta: %1"
+
+#: converter/mymoneystatementreader.cpp:612
+msgid ""
+"This imported statement contains investment transactions with no security. "
+"These transactions will be ignored."
+msgstr ""
+"Tuotu tiliote sisältää sijoitustapahtumia ilman arvopaperia.Nämä tapahtumat "
+"ohitetaan."
+
+#: converter/mymoneystatementreader.cpp:803
+msgid "(Fees) "
+msgstr "(Maksut)"
+
+#: converter/mymoneystatementreader.cpp:880
+msgid ""
+"Do you want to add \"%1\" as payee/receiver?\n"
+"\n"
+msgstr ""
+"Lisätäänkö \"%1\":n maksunsaajaksi/vastaanottajaksi?\n"
+"\n"
+
+#: converter/mymoneystatementreader.cpp:881
+msgid ""
+"Selecting \"Yes\" will create the payee, \"No\" will skip creation of a "
+"payee record and remove the payee information from this transaction. "
+"Selecting \"Cancel\" aborts the import operation.\n"
+"\n"
+"If you select \"No\" here and mark the \"Don't ask again\" checkbox, the "
+"payee information for all following transactions referencing \"%1\" will be "
+"removed."
+msgstr ""
+"Valitsemalla \"Kyllä\" luodaan maksunsaaja, \"Ei\" jätetään maksunsaaja "
+"luomatta ja poistetaan maksunsaaja-tieto tästä tapahtumasta. Valitsemalla "
+"\"Peruuta\" toiminta keskeytetään.\n"
+"\n"
+"Valitsemalla \"Ei\" tässä ja merkitsemällä \"Älä kysy uudestaan\" -rasti, "
+"kaikkien tulevien tapahtumien maksunsaajatieto \"%1\" poistetaan."
+
+#: converter/mymoneystatementreader.cpp:917
+msgid "Save Category"
+msgstr "Säästökategoria"
+
+#: converter/mymoneystatementreader.cpp:918
+msgid "No Category"
+msgstr "Ei kategoriaa"
+
+#: converter/mymoneystatementreader.cpp:919 dialogs/rc.cpp:4
+msgid "Abort"
+msgstr "Keskeytä"
+
+#: converter/mymoneystatementreader.cpp:926
+msgid "Please select a default category for payee '%1':"
+msgstr "Valitse oletuskategoria maksunsaajalle '%1':"
+
+#: converter/mymoneystatementreader.cpp:958
+msgid "Unable to add payee/receiver"
+msgstr "Maksunsaajaa/vastaanottajaa ei voitu lisätä"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid ""
+"KMyMoney has found a scheduled transaction named <b>%1</b> which matches an "
+"imported transaction. Do you want KMyMoney to enter this schedule now so "
+"that the transaction can be matched? "
+msgstr ""
+"Ajoitettu tapahtuma nimeltään <b>%1</b> löydetty, joka täsmää tuotuun "
+"tapahtumaan. Kirjataanko ajoitettu tapahtuma jotta tapahtuma on "
+"täsmättävissä?"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid "Schedule found"
+msgstr "Ajoitettu tapahtuma löytyi"
+
+#: converter/mymoneystatementreader.cpp:1219
+msgid "Problem adding or matching imported transaction with id '%1': %2"
+msgstr ""
+"Tunnisteella '%1' tuodun tapahtuman lisäämisessä tai täsmäämisessä oli "
+"ongelmia: %2"
+
+#: converter/mymoneystatementreader.cpp:1268
+msgid "<b>You have downloaded a statement for the following account:</b><br><br>"
+msgstr "<b>Tiliote ladattu tilille:</b><br><br>"
+
+#: converter/mymoneystatementreader.cpp:1269
+#, c-format
+msgid " - Account Name: %1"
+msgstr " - Tilin nimi: %1"
+
+#: converter/mymoneystatementreader.cpp:1270
+#, c-format
+msgid " - Account Type: %1"
+msgstr " - Tilin tyyppi: %1"
+
+#: converter/mymoneystatementreader.cpp:1271
+#, c-format
+msgid " - Account Number: %1"
+msgstr " - Tilinumero: %1"
+
+#: converter/mymoneystatementreader.cpp:1279
+msgid "Do you want to import transactions to this account?"
+msgstr "Tuodaanko tapahtumat tälle tilille?"
+
+#: converter/mymoneystatementreader.cpp:1281
+msgid ""
+"KMyMoney cannot determine which of your accounts to use. You can create a "
+"new account by pressing the <b>Create</b> button or select another one "
+"manually from the selection box below."
+msgstr ""
+"Käytettävää tiliä ei voida päätellä. Uusi tili voidaan luodavalitsemalla "
+"<b>Luo uusi</b>, tai sitten voidaan valita olemassaoleva tili "
+"valintalaatikosta käsin."
+
+#: converter/mymoneystatementreader.cpp:1287
+msgid ""
+"No account information has been found in the selected statement file. Please "
+"select an account using the selection box in the dialog or create a new "
+"account by pressing the <b>Create</b> button."
+msgstr ""
+"Tilitietoa ei löydetty valitusta tiliotetiedostosta. Valitse tili "
+"käyttämällä valintalaatikkoa ikkunassa, tai luo uusi tili valitsemalla "
+"<b>Luo uusi</b>"
+
+#: converter/mymoneystatementreader.cpp:1294
+msgid "Import transactions"
+msgstr "Tuo tapahtumat"
+
+#: converter/mymoneystatementreader.cpp:1330
+msgid ""
+"You must select an account, create a new one, or press the <b>Abort</b> "
+"button."
+msgstr "Tili täytyy valita, luoda uusi, tai painaa <b>Keskeytä</b>-painiketta"
+
+#: converter/mymoneygncreader.cpp:119
+msgid "%1: Sorry. This importer cannot handle version %2 of element %3"
+msgstr ""
+"%1: virhe. Tämä tuontityökalu ei pysty käsittelemään versiota %2 elementissä "
+"%3"
+
+#: converter/mymoneygncreader.cpp:193
+#, c-format
+msgid "Account%1"
+msgstr "Tili%1"
+
+#: converter/mymoneygncreader.cpp:197
+#, c-format
+msgid "Stock%1"
+msgstr "Osake%1"
+
+#: converter/mymoneygncreader.cpp:206
+#, c-format
+msgid "Payee%1"
+msgstr "Maksunsaaja %1"
+
+#: converter/mymoneygncreader.cpp:212
+#, c-format
+msgid "Schedule%1"
+msgstr "Ajoitettu tapahtuma%1"
+
+#: converter/mymoneygncreader.cpp:262
+msgid "This version of the importer cannot handle multi-book files."
+msgstr "Tämä versio tuontityökalusta ei kykene käsittelemään monikirja-tiedostoja."
+
+#: converter/mymoneygncreader.cpp:912
+msgid "Invalid header for file. Should be 'gnc-v2'"
+msgstr "Väärä tiedosto-otsikko. Pitäisi olla 'gnc-v2'"
+
+#: converter/mymoneygncreader.cpp:937 converter/mymoneygncreader.cpp:972
+#: converter/mymoneygncreader.cpp:1062
+#, c-format
+msgid ""
+"Import failed:\n"
+"\n"
+"%1"
+msgstr ""
+"Tuonti epäonnistui:\n"
+"\n"
+"%1"
+
+#: converter/mymoneygncreader.cpp:1065
+msgid "Import complete"
+msgstr "Tuonti valmis"
+
+#: converter/mymoneygncreader.cpp:1120
+msgid "Disguise your wealth"
+msgstr "Salaa varallisuus"
+
+#: converter/mymoneygncreader.cpp:1121
+msgid ""
+"Each monetary value on your file will be multiplied by a random number "
+"between 0.01 and 1.99\n"
+"with a different value used for each transaction. In addition, to further "
+"disguise the true\n"
+"values, you may enter a number between %1 and %2 which will be applied to "
+"all values.\n"
+"These numbers will not be stored in the file."
+msgstr ""
+"Jokainen tiedoston rahasumma tullaan kertomaan satunnaisnumerolla väliltä "
+"0.01 - 1.99, käyttäen jokaiselle tapahtumalle eri arvoa.\n"
+"Alkuperäisiä summia voidaan haluttaessa salata vielä lisää antamalla luku "
+"väliltä %1 - %2. Tämä luku tullaan lisäämään kaikkiin summiin.\n"
+"Näitä lukuja ei tallenneta tiedostoon."
+
+#: converter/mymoneygncreader.cpp:1135
+msgid "Loading commodities..."
+msgstr "Ladataan osakkeet..."
+
+#: converter/mymoneygncreader.cpp:1160
+msgid "Loading prices..."
+msgstr "Ladataan hintoja..."
+
+#: converter/mymoneygncreader.cpp:1164 converter/mymoneygncreader.cpp:1171
+msgid "Imported History"
+msgstr "Tuontihistoria"
+
+#: converter/mymoneygncreader.cpp:1251
+#, c-format
+msgid "Current importer does not recognize GnuCash account type %1"
+msgstr "Nykyinen tuontityökalu ei tunnista GnuCash-tilityyppiä %1"
+
+#: converter/mymoneygncreader.cpp:1471
+msgid "Imported Transaction"
+msgstr "Tapahtuma tuotu"
+
+#: converter/mymoneygncreader.cpp:1519
+msgid "Loading templates..."
+msgstr "Ladataan tilipohjia..."
+
+#: converter/mymoneygncreader.cpp:1531
+msgid "Unknown payee"
+msgstr "Tuntematon maksunsaaja"
+
+#: converter/mymoneygncreader.cpp:1723
+msgid "Loading schedules..."
+msgstr "Ladataan ajoitetut tapahtumat..."
+
+#: converter/mymoneygncreader.cpp:1735
+#, c-format
+msgid "Can't find template transaction for schedule %1"
+msgstr "Tilipohjasta ei löydy tarvittavaa tapahtumaa ajoitetulle tapahtumalle %1"
+
+#: converter/mymoneygncreader.cpp:1910
+msgid "Reorganizing accounts..."
+msgstr "Tilien uudelleenjärjestely..."
+
+#: converter/mymoneygncreader.cpp:1972
+msgid ""
+"Your main currency seems to be %1 (%2); do you want to set this as your base "
+"currency?"
+msgstr ""
+"Pääasiallinen valuutta näyttää olevan %1 (%2); haluatko asettaa sen "
+"oletusvaluutaksi?"
+
+#: converter/mymoneygncreader.cpp:1993
+msgid "More"
+msgstr "Lisää"
+
+#: converter/mymoneygncreader.cpp:1997
+msgid "Save Report"
+msgstr "Tallenna raportti"
+
+#: converter/mymoneygncreader.cpp:2017
+msgid ""
+"Problems were encountered in converting schedule '%1'.\n"
+"Do you want to review or edit it now?"
+msgstr ""
+"Ajoitetun tapahtuman '%1' muuntamisessa ilmeni ongelmia.\n"
+"Tarkistetaanko vai korjataanko ne nyt heti?"
+
+#: converter/mymoneygncreader.cpp:2039
+msgid ""
+"Found:\n"
+"\n"
+msgstr ""
+"Löydetty:\n"
+"\n"
+
+#: converter/mymoneygncreader.cpp:2040
+msgid " commodities (equities)\n"
+msgstr " hyödykkeet (pääomat)\n"
+
+#: converter/mymoneygncreader.cpp:2041
+msgid " prices\n"
+msgstr " hinnat\n"
+
+#: converter/mymoneygncreader.cpp:2042
+msgid " accounts\n"
+msgstr " tilit\n"
+
+#: converter/mymoneygncreader.cpp:2043
+msgid " transactions\n"
+msgstr " tapahtumat\n"
+
+#: converter/mymoneygncreader.cpp:2044
+msgid " schedules\n"
+msgstr " ajoitetut tapahtumat\n"
+
+#: converter/mymoneygncreader.cpp:2047
+msgid "No inconsistencies were detected"
+msgstr "Yhteensopimattomuuksia ei havaittu"
+
+#: converter/mymoneygncreader.cpp:2049
+msgid " inconsistencies were detected and corrected\n"
+msgstr " yhteensopimattomuuksia havaittu ja korjattu\n"
+
+#: converter/mymoneygncreader.cpp:2054
+msgid " orphan accounts were created\n"
+msgstr " orpoja tilejä luotu\n"
+
+#: converter/mymoneygncreader.cpp:2059
+msgid " possible schedule problems were noted\n"
+msgstr " havaittiin mahdollisia ongelmia ajoitettuissa tapahtumissa\n"
+
+#: converter/mymoneygncreader.cpp:2064
+msgid "Small Business Features (Customers, Invoices, etc.)"
+msgstr "Pientoimisto-ominaisuuksia (asiakkaat, laskut, jne.)"
+
+#: converter/mymoneygncreader.cpp:2065 views/kmymoneyview.cpp:241
+#: views/kmymoneyview.cpp:243
+msgid "Budgets"
+msgstr "Budjetit"
+
+#: converter/mymoneygncreader.cpp:2066
+msgid "Lots"
+msgstr "Eriä"
+
+#: converter/mymoneygncreader.cpp:2068
+msgid "The following features found in your file are not currently supported:"
+msgstr "Seuraavat tiedostosta löydetyt ominaisuudet eivät ole tuettu:"
+
+#: converter/mymoneygncreader.cpp:2071
+msgid ""
+"\n"
+"\n"
+"Press More for further information"
+msgstr ""
+"\n"
+"\n"
+"Paina <b>Lisää</b>-painiketta saadaksesi lisätietoja."
+
+#: converter/mymoneygncreader.cpp:2139
+msgid "Orphan created from unknown gnucash account"
+msgstr "Luotu orpo tuntemattomasta gnucash-tilistä."
+
+#: converter/mymoneygncreader.cpp:2170
+msgid "Internal error - invalid interval char in incrDate"
+msgstr "Sisäinen virhe - väärä välimerkki incrDate:ssa"
+
+#: converter/mymoneygncreader.cpp:2233
+msgid "Enter the investment account name "
+msgstr "Syötä sijoitustilin nimi "
+
+#: converter/mymoneygncreader.cpp:2234
+msgid "My Investments"
+msgstr "Sijoitukseni"
+
+#: converter/mymoneygncreader.cpp:2269
+#, c-format
+msgid "Select parent investment account or enter new name. Stock %1"
+msgstr "Valitse ylempi sijoitustili tai syötä uusi nimi. Osakkeet %1"
+
+#: converter/mymoneygncreader.cpp:2292 converter/mymoneygncreader.cpp:2307
+msgid "%1 is not an Investment Account. Do you wish to make it one?"
+msgstr "%1 ei ole sijoitustili. Tehdäänkö siitä sellainen?"
+
+#: converter/mymoneygncreader.cpp:2408
+msgid ""
+"An Investment account must be a child of an Asset account\n"
+"Account %1 will be stored under the main Asset account"
+msgstr ""
+"Sijoitustilin täytyy olla varallisuustilin alatili.\n"
+"Tili %1 tullaan asettamaan päävarallisuustilin alle."
+
+#: converter/mymoneygncreader.cpp:2410
+msgid ""
+"An Income account must be a child of an Income account\n"
+"Account %1 will be stored under the main Income account"
+msgstr ""
+"Tulotilin täytyy olla tulotilin alatili\n"
+"Tili %1 tullaan asettamaan päätulotilin alle."
+
+#: converter/mymoneygncreader.cpp:2412
+msgid ""
+"An Expense account must be a child of an Expense account\n"
+"Account %1 will be stored under the main Expense account"
+msgstr ""
+"Kulutilin täytyy olla kulutilin alatili\n"
+"Tili %1 tullaan asettamaan pääkulutilin alle."
+
+#: converter/mymoneygncreader.cpp:2414
+msgid ""
+"One or more transactions contain a reference to an otherwise unknown "
+"account\n"
+"An asset account with the name %1 has been created to hold the data"
+msgstr ""
+"Yksi tai useampi tapahtuma sisältää viittauksen toiseen tuntemattomaan "
+"tiliin\n"
+"Varallisuustili %1 on luotu tietoja varten."
+
+#: converter/mymoneygncreader.cpp:2416
+msgid "Schedule %1 has interval of %2 which is not currently available"
+msgstr ""
+"Ajoitetulla tapahtumalla %1 on jaksotus %2, joka ei ole tällä hetkellä "
+"mahdollinen."
+
+#: converter/mymoneygncreader.cpp:2417
+msgid "Schedule %1 dropped at user request"
+msgstr "Ajoitettu tapahtuma %1 poistettu käyttäjän toimesta."
+
+#: converter/mymoneygncreader.cpp:2418
+msgid "Schedule %1 contains unknown action (key = %2, type = %3)"
+msgstr ""
+"Ajoitettu tapahtuma %1 sisältää tuntemattoman toiminnon (avain = %2, tyyppi "
+"= %3)"
+
+#: converter/mymoneygncreader.cpp:2419
+msgid "Schedule %1 contains multiple actions; only one has been imported"
+msgstr "Ajoitettu tapahtuma %1 sisältää useita toimintoja; ainoastaan yksi tuotiin."
+
+#: converter/mymoneygncreader.cpp:2420
+msgid "Schedule %1 contains no valid splits"
+msgstr "Ajoitettu tapahtuma %1 ei sisällä yhtään sallittua jaottelua"
+
+#: converter/mymoneygncreader.cpp:2421
+msgid ""
+"Schedule %1 appears to contain a formula. GnuCash formulae are not "
+"convertible"
+msgstr ""
+"Ajoitettu tapahtuma %1 näyttää sisältävän laskentakaavan. GnuCash-"
+"laskentakaavat eivät ole muunnettavissa"
+
+#: converter/mymoneygncreader.cpp:2422
+msgid ""
+"Schedule %1 contains unknown interval specification; please check for "
+"correct operation"
+msgstr "Ajoitettu tapahtuma %1 sisältää tuntemattoman jaksotuksen; korjaa se oikeaksi"
+
+#: converter/mymoneygncreader.cpp:2423
+msgid ""
+"Schedule %1 contains a deferred interval specification; please check for "
+"correct operation"
+msgstr ""
+"Ajoitetussa tapahtumassa %1 on sisäinen säännöllinen lykkäys; varmista että "
+"se toimii oikein"
+
+#: converter/mymoneygncreader.cpp:2424
+msgid ""
+"Account or Category %1, transaction date %2; split contains invalid value; "
+"please check"
+msgstr ""
+"Tili tai kategoria %1, tapahtumapäivä %2; jaottelu sisältää väärän arvon; "
+"tarkista"
+
+#: kmymoneyutils.cpp:146
+msgid "&New Schedule..."
+msgstr "&Uusi ajoitettu tapahtuma..."
+
+#: kmymoneyutils.cpp:148
+msgid "Create a new schedule."
+msgstr "Luo uusi ajoitettu tapahtuma."
+
+#: kmymoneyutils.cpp:149
+msgid "Use this to create a new schedule."
+msgstr "Käytä tätä luodaksesi uusi ajoitettu tapahtuma."
+
+#: kmymoneyutils.cpp:158
+msgid "&Filter"
+msgstr "&Suodatin"
+
+#: kmymoneyutils.cpp:160
+msgid "Filter out accounts"
+msgstr "Suodata tilejä"
+
+#: kmymoneyutils.cpp:161
+msgid "Use this to filter out accounts"
+msgstr "Käytä tätä suodattaaksesi tilejä pois"
+
+#: kmymoneyutils.cpp:192
+msgid "Preferred accounts"
+msgstr "Suosikkitilit"
+
+#: kmymoneyutils.cpp:193
+msgid "Payment accounts"
+msgstr "Maksutilit"
+
+#: kmymoneyutils.cpp:194
+msgid "Favorite reports"
+msgstr "Suosikkiraportit"
+
+#: kmymoneyutils.cpp:195
+msgid "Forecast (schedule)"
+msgstr "Ennuste (ajoitetut tapahtumat)"
+
+#: kmymoneyutils.cpp:196
+msgid "Networth forecast"
+msgstr "Nettovarallisuusennuste"
+
+#: kmymoneyutils.cpp:197
+msgid "Forecast (history)"
+msgstr "Ennuste (historiaperustainen)"
+
+#: kmymoneyutils.cpp:198
+msgid "Assets and Liabilities"
+msgstr "Varat ja velat"
+
+#: kmymoneyutils.cpp:199 reports/pivottable.cpp:2416 views/khomeview.cpp:1393
+#: widgets/rc.cpp:70
+msgid "Budget"
+msgstr "Budjetti"
+
+#: kmymoneyutils.cpp:200
+msgid "CashFlow"
+msgstr "Käteisvirta"
+
+#: dialogs/kenterscheduledlg.cpp:153 kmymoneyutils.cpp:366
+msgid "Unable to load schedule details"
+msgstr "Ajoitetun tapahtuman tietoja ei voitu ladata"
+
+#: kmymoneyutils.cpp:390 widgets/register.cpp:473
+msgid ""
+"_: Reconcile state 'Not reconciled'\n"
+"Not reconciled"
+msgstr "Ei yhteensovitettu"
+
+#: kmymoneyutils.cpp:393 widgets/register.cpp:476
+msgid ""
+"_: Reconcile state 'Cleared'\n"
+"Cleared"
+msgstr "Varmistettu"
+
+#: kmymoneyutils.cpp:396 widgets/register.cpp:479
+msgid ""
+"_: Reconcile state 'Reconciled'\n"
+"Reconciled"
+msgstr "Yhteensovitettu"
+
+#: kmymoneyutils.cpp:399 widgets/register.cpp:482
+msgid ""
+"_: Reconcile state 'Frozen'\n"
+"Frozen"
+msgstr "Jäädytetty"
+
+#: kmymoneyutils.cpp:410
+msgid ""
+"_: Reconcile flag C\n"
+"C"
+msgstr "V"
+
+#: kmymoneyutils.cpp:413
+msgid ""
+"_: Reconcile flag R\n"
+"R"
+msgstr "Y"
+
+#: kmymoneyutils.cpp:416
+msgid ""
+"_: Reconcile flag F\n"
+"F"
+msgstr "J"
+
+#: kmymoneyutils.cpp:419
+msgid ""
+"_: Flag for unknown reconciliation state\n"
+"?"
+msgstr "?"
+
+#: _tips.cpp:3
+msgid ""
+"<p>...that you can change the sort order of ledger entries by\n"
+"right-clicking the header of the ledger view?\n"
+msgstr ""
+"<p>... että voit vaihtaa tapahtumanäkymän lajittelujärjestystä, painamalla\n"
+"hiiren oikeaa painiketta tapahtumanäkymän otsikkorivillä?\n"
+
+#: _tips.cpp:9
+msgid ""
+"<p>...that you can easily move to the other side of a transfer transaction\n"
+"by opening the context menu with the right mouse button and selecting one of "
+"the\n"
+"'Goto' functions?\n"
+msgstr ""
+"<p>... että voit helposti siirtyä tapahtumaan liittyvään toiseen tiliin,\n"
+"avaamalla kontekstivalikon hiiren oikealla painikkeella\n"
+"ja valitsemalla jonkin \"Siirry... \"-toiminnon?\n"
+
+#: _tips.cpp:16
+msgid ""
+"<p>...that you can start editing a transaction by double-clicking on the\n"
+"transaction in the register?\n"
+msgstr ""
+"<p>... että voit muokata tapahtumaa tuplaklikkaamalla sitä tapahtumat-"
+"näkymässä?\n"
+
+#: _tips.cpp:22
+msgid ""
+"<p>...that you can show more details of the selected transaction in the\n"
+"register by selecting the 'ledger lens' feature in the settings dialog?\n"
+msgstr ""
+"<p>... että voit nähdä enemmän tietoja valitsemastasi tapahtumasta\n"
+"ottamalla käyttöön tapahtumat -näkymän 'tarkemmat tiedot'-asetuksen?\n"
+
+#: _tips.cpp:28
+msgid ""
+"<p>...that transactions with no category assigned or split\n"
+"transactions with unassigned values are marked with an exclamation mark \n"
+"on a yellow triangle in the register?\n"
+msgstr ""
+"<p>... tapahtumat joita ei ole kategorioitu, tai jaotellut tapahtumat\n"
+"joiden summat eivät täsmää, on merkitty keltaisella kolmiolla ja\n"
+"huutomerkillä tapahtumissa.\n"
+
+#: _tips.cpp:35
+msgid ""
+"<p>...that you can show all details of the transactions in the register\n"
+"by typing &lt;Ctrl-T&gt; or selecting the 'Settings/Show Transaction "
+"Detail'\n"
+"menu entry? You can turn this feature off the same way.\n"
+msgstr ""
+"<p>... että voit nähdä tapahtumatiedot tapahtumat-näkymässä\n"
+"painamalla &lt;CTRL+T&gt; tai valitsemalla 'Asetukset / näytä tapahtumien "
+"tiedot' -valikon kohdan?\n"
+"Toiminto voidaan ottaa pois käytöstä samalla tavoin.\n"
+
+#: _tips.cpp:42
+msgid ""
+"<p>...that you can switch between a listing of all accounts or\n"
+"an icon view of all asset and liability accounts with the tabs\n"
+"in the accounts view?\n"
+msgstr ""
+"<p>... että voit valita lista- tai kuvakemuodotoisen tilien\n"
+"näyttämisen tilinäkymässä yläreunan välilehtien avulla?\n"
+
+#: _tips.cpp:49
+msgid "<p>...that the KMyMoney development team wishes you a nice day?\n"
+msgstr "<p>... että KMyMoney-kehittäjät haluavat lähettää sinulle terveisiä?\n"
+
+#: _tips.cpp:54
+msgid ""
+"<p>...you can use your own external filter program to convert any\n"
+"import format to QIF on the fly? See the QIF profile editor for\n"
+"more details.\n"
+msgstr ""
+"<p>... että voit käyttää omaa, ulkoista suodatinohjelmaa muuttaaksesi\n"
+"minkä tahansa tuotavan tiedostomuodon QIF-muotoon välittömästi?\n"
+"Katso lisätietoja QIF-profiilimuokkaimesta.\n"
+
+#: _tips.cpp:61
+msgid ""
+"<p>...that you can create a scheduled transaction from an existing\n"
+"one by selecting the context menu on a transaction in the ledger\n"
+"or the \"More...\"-menu in the transaction form?\n"
+msgstr ""
+"<p>... että voit luoda ajoitetun tapahtuman mistä tahansa\n"
+"olemassa olevasta tapahtumasta tapahtuman kontekstivalikon avulla,\n"
+"tai valitsemalla \"Lisää...\" -valikkokohdan tapahtumat-näkymässä?\n"
+
+#: _tips.cpp:68
+msgid ""
+"<p>...that you can switch to the payee of a transaction\n"
+"by selecting the context menu on a transaction in the ledger\n"
+"or in the transaction menu?\n"
+msgstr ""
+"<p>... että voit siirtyä tapahtuman maksunsaajaan avaamalla\n"
+"tapahtuman kontekstivalikon tai tapahtuma-valikon avulla?\n"
+
+#: _tips.cpp:75
+msgid ""
+"<p>...that you can modify the colors and fonts used for the ledgers\n"
+"via <i>Configure/Register/...</i>?\n"
+msgstr ""
+"<p>... että voit muokata tapahtumat-näkymässä käytettäviä värejä\n"
+"ja kirjasimia <i>Asetukset / tapahtumat / ...<i> -ikkunan avulla?\n"
+
+#: _tips.cpp:81
+msgid ""
+"<p>...that you can hide transactions prior to a specific date?\n"
+"The date can be modified via <i>Configure/Register/Filter</i>.\n"
+msgstr ""
+"<p>... että voit piilottaa tapahtumia tiettyyn päivämäärään asti?\n"
+"Päivämäärä voidaan määritellä <i>Asetukset / tapahtumat / suodatin</i>-"
+"ikkunassa.\n"
+
+#: _tips.cpp:87
+msgid ""
+"<p>...that you can customize the \"Home-Page\"\n"
+"via <i>Configure/Home</i>?\n"
+msgstr ""
+"<p>... että voit muokata mieleiseksi \"Etusivu\"-näkymää <i>Asetukset / "
+"Etusivu</i> -ikkunassa?\n"
+
+#: _tips.cpp:93
+msgid ""
+"<p>...that you can enter new transactions even while reconciling\n"
+"an account? You can also make the transaction form visible.\n"
+msgstr ""
+"<p>... että voit kirjata uusia tapahtumia vaikka suorittaisit samaan aikaan\n"
+"tilin yhteensovittamista? Voit myös asettaa tapahtumat-lomakkeen näkyväksi.\n"
+
+#: _tips.cpp:99
+msgid ""
+"<p>...that you can actively support the KMyMoney development team in\n"
+"cases that heavily depend on your data? You can save your data in an\n"
+"anonymized way for this support.<p>\n"
+"Just open your data file and immediately\n"
+"select <b>File/Save as...</b>. In the <b>Save As...</b> dialog\n"
+"select the filter <b>Anonymous Files</b> and make sure your file gets\n"
+"the extensions <b>.anon.xml</b>. <p>\n"
+"To verify, how the data looks like you are about to send away, you can open\n"
+"this file in KMyMoney and see how the developers see your data.\n"
+msgstr ""
+"<p>... että voit auttaa KMyMoneyn kehitystiimiä jopa niissä tapauksissa,\n"
+"jotka riippuvat omasta henkilökohtaisesta kirjanpitotiedoistasi?\n"
+"Voit tallentaa tietosi ilman henkilötietoja tämän kaltaisen auttamisen\n"
+"mahdollistamiseksi. Avaa tiedosto ja välittömästi\n"
+"valitse <b>Tiedosto / Tallenna nimellä...</b>. <b>Tallenna nimellä</b>\n"
+"-ikkunassa valitse suodattimeksi <b>Anonyymit tiedostot</b> ja varmista\n"
+"että tiedosto saa päätteen <b>.anon.xml</b>. <p>\n"
+"Varmistaaksesi, miltä tiedosto näyttää, voit avata saman tiedoston\n"
+"uudestaan KMyMoney-ohjelmaan ja katsoa miten kehittäjät\n"
+"tiedoston näkevät.\n"
+
+#: _tips.cpp:112
+msgid ""
+"<p>... that you can import your bank statements even without a network \n"
+"connection? Just select the file (OFX or QIF) from the File->Import menu.</"
+"p>\n"
+"<p>Provided by Jose Jorge</p>\n"
+msgstr ""
+"<p>... että voit tuoda tiliotteita jopa ilman verkkoyhteyttä?\n"
+"Valitset vain (OFX tai QIF) Tiedosto->Tuo -valikosta.</p>\n"
+"<p>Toiminnon tarjoaa: Jose Jorge</p>\n"
+
+#: reports/listtable.cpp:159 reports/listtable.cpp:163
+#: reports/pivottable.cpp:1564
+msgid ""
+"_: Report date range\n"
+"%1 through %2"
+msgstr "%1 - %2"
+
+#: reports/listtable.cpp:171 reports/pivottable.cpp:1571
+#, c-format
+msgid "All currencies converted to %1"
+msgstr "Valuutat muunnettu %1:ksi"
+
+#: reports/listtable.cpp:172 reports/pivottable.cpp:1328
+msgid "All currencies converted to %1\n"
+msgstr "Kaikki valuutat on muutettu %1:ksi\n"
+
+#: reports/listtable.cpp:176 reports/pivottable.cpp:1573
+msgid "All values shown in %1 unless otherwise noted"
+msgstr "Valuuttayksikkönä on %1, ellei toisin mainita"
+
+#: reports/listtable.cpp:177 reports/pivottable.cpp:1330
+msgid "All values shown in %1 unless otherwise noted\n"
+msgstr "Valuuttayksikkönä on %1, ellei toisin mainita\n"
+
+#: dialogs/kequitypriceupdatedlg.cpp:73 dialogs/kfindtransactiondlg.cpp:188
+#: dialogs/rc.cpp:53 dialogs/rc.cpp:63 dialogs/rc.cpp:208 dialogs/rc.cpp:805
+#: dialogs/settings/rc.cpp:111 dialogs/transactioneditor.cpp:844
+#: reports/listtable.cpp:196 views/khomeview.cpp:412 views/khomeview.cpp:485
+#: views/khomeview.cpp:519 views/rc.cpp:61 widgets/kmymoneypriceview.cpp:128
+#: widgets/rc.cpp:36 widgets/register.cpp:565 widgets/transaction.cpp:1027
+#: widgets/transaction.cpp:1484
+msgid "Date"
+msgstr "Päivämäärä"
+
+#: reports/listtable.cpp:198
+msgid "Num"
+msgstr "Nro"
+
+#: dialogs/kfindtransactiondlg.cpp:204 dialogs/kmymoneysplittable.cpp:78
+#: dialogs/kmymoneysplittable.cpp:831 dialogs/rc.cpp:217
+#: dialogs/transactioneditor.cpp:831 dialogs/transactioneditor.cpp:1374
+#: dialogs/transactioneditor.cpp:1382 dialogs/transactioneditor.cpp:1396
+#: dialogs/transactioneditor.cpp:1449 dialogs/transactioneditor.cpp:1456
+#: dialogs/transactioneditor.cpp:1504 reports/listtable.cpp:200
+#: views/kcategoriesview.cpp:76 views/rc.cpp:62 widgets/rc.cpp:115
+#: widgets/register.cpp:62 widgets/transaction.cpp:848
+#: widgets/transaction.cpp:906
+msgid "Category"
+msgstr "Kategoria"
+
+#: dialogs/kmymoneysplittable.cpp:79 dialogs/kmymoneysplittable.cpp:837
+#: reports/listtable.cpp:202 widgets/rc.cpp:101 widgets/transaction.cpp:1042
+#: widgets/transaction.cpp:1628
+msgid "Memo"
+msgstr "Selite"
+
+#: reports/listtable.cpp:203
+msgid "Top Category"
+msgstr "Yläkategoria"
+
+#: reports/listtable.cpp:204
+msgid "Category Type"
+msgstr "Kategoriatyyppi"
+
+#: dialogs/rc.cpp:229 dialogs/settings/rc.cpp:152 reports/listtable.cpp:207
+#: widgets/kmymoneycombo.cpp:346 widgets/rc.cpp:107
+msgid "Reconciled"
+msgstr "Yhteensovitettu"
+
+#: reports/listtable.cpp:208 widgets/rc.cpp:117
+msgid "Action"
+msgstr "Toiminto"
+
+#: dialogs/investactivities.cpp:199 dialogs/investactivities.cpp:287
+#: dialogs/investactivities.cpp:424 dialogs/investactivities.cpp:504
+#: dialogs/investactivities.cpp:544 dialogs/investtransactioneditor.cpp:241
+#: reports/listtable.cpp:209 widgets/rc.cpp:103 widgets/transaction.cpp:1513
+msgid "Shares"
+msgstr "Osakkeet"
+
+#: dialogs/investtransactioneditor.cpp:248
+#: dialogs/investtransactioneditor.cpp:1067
+#: dialogs/investtransactioneditor.cpp:1068
+#: dialogs/investtransactioneditor.cpp:1072
+#: dialogs/kequitypriceupdatedlg.cpp:72 dialogs/rc.cpp:109 dialogs/rc.cpp:164
+#: dialogs/rc.cpp:251 dialogs/rc.cpp:756 dialogs/rc.cpp:827
+#: dialogs/settings/rc.cpp:117 reports/listtable.cpp:210
+#: reports/listtable.cpp:211 reports/pivottable.cpp:2441
+#: views/kinvestmentview.cpp:80 widgets/kmymoneypriceview.cpp:129
+#: widgets/rc.cpp:43 widgets/rc.cpp:105 widgets/register.cpp:573
+msgid "Price"
+msgstr "Hinta"
+
+#: reports/listtable.cpp:212
+msgid "Net Value"
+msgstr "Nettoarvo"
+
+#: reports/listtable.cpp:213
+msgid "Buys"
+msgstr "Ostot"
+
+#: reports/listtable.cpp:214
+msgid "Sells"
+msgstr "Myynnit"
+
+#: reports/listtable.cpp:215
+msgid "Dividends Reinvested"
+msgstr "Uudelleensijoitetut osingot"
+
+#: reports/listtable.cpp:216
+msgid "Dividends Paid Out"
+msgstr "Maksetut osingot"
+
+#: reports/listtable.cpp:217
+msgid "Starting Balance"
+msgstr "Alkusaldo"
+
+#: reports/listtable.cpp:218
+msgid "Ending Balance"
+msgstr "Loppusaldo"
+
+#: reports/listtable.cpp:219
+msgid "Annualized Return"
+msgstr "Vuosituotto"
+
+#: reports/listtable.cpp:220
+msgid "Return On Investment"
+msgstr "Sijoituksen tuotto (ROI)"
+
+#: dialogs/rc.cpp:106 dialogs/rc.cpp:161 dialogs/rc.cpp:248 dialogs/rc.cpp:505
+#: dialogs/rc.cpp:570 dialogs/rc.cpp:667 dialogs/rc.cpp:753
+#: reports/listtable.cpp:223 widgets/register.cpp:570
+msgid "Payment"
+msgstr "Maksu"
+
+#: dialogs/rc.cpp:111 dialogs/rc.cpp:166 dialogs/rc.cpp:253 dialogs/rc.cpp:709
+#: dialogs/rc.cpp:758 reports/listtable.cpp:224 widgets/rc.cpp:119
+#: widgets/register.cpp:575
+msgid "Balance"
+msgstr "Saldo"
+
+#: reports/listtable.cpp:227 views/kscheduledview.cpp:74
+msgid "Next Due Date"
+msgstr "Seuraava eräpäivä"
+
+#: reports/listtable.cpp:229 views/kscheduledview.cpp:76
+msgid "Payment Method"
+msgstr "Maksutapa"
+
+#: dialogs/rc.cpp:803 reports/listtable.cpp:231 widgets/rc.cpp:2
+msgid "Description"
+msgstr "Kuvaus"
+
+#: reports/listtable.cpp:232
+msgid "Opening Date"
+msgstr "Avauspäivä"
+
+#: reports/listtable.cpp:234
+msgid "Balance Early Warning"
+msgstr "Saldon varhainen varoitusraja"
+
+#: reports/listtable.cpp:235
+msgid "Balance Max Limit"
+msgstr "Saldon maksimiraja"
+
+#: reports/listtable.cpp:236
+msgid "Credit Early Warning"
+msgstr "Luoton varhainen varoitusraja"
+
+#: reports/listtable.cpp:237
+msgid "Credit Max Limit"
+msgstr "Luoton maksimiraja"
+
+#: dialogs/rc.cpp:376 reports/listtable.cpp:238
+msgid "Tax"
+msgstr "Vero"
+
+#: reports/listtable.cpp:239
+msgid "Preferred"
+msgstr "Suosikki"
+
+#: reports/listtable.cpp:240
+msgid "Loan Amount"
+msgstr "Lainasumma"
+
+#: dialogs/rc.cpp:511 reports/listtable.cpp:241
+msgid "Interest Rate"
+msgstr "Korkoprosentti"
+
+#: reports/listtable.cpp:242
+msgid "Next Interest Change"
+msgstr "Seuraava koron tarkistus"
+
+#: reports/listtable.cpp:243
+msgid "Periodic Payment"
+msgstr "Säännöllinen maksuerä"
+
+#: reports/listtable.cpp:244
+msgid "Final Payment"
+msgstr "Viimeinen maksuerä"
+
+#: reports/listtable.cpp:245 views/khomeview.cpp:766 views/khomeview.cpp:1265
+#: views/khomeview.cpp:1273
+msgid "Current Balance"
+msgstr "Saldo nyt"
+
+#: dialogs/investactivities.cpp:201 dialogs/investactivities.cpp:289
+#: dialogs/investactivities.cpp:368 dialogs/investactivities.cpp:426
+#: dialogs/rc.cpp:327 reports/listtable.cpp:360 reports/listtable.cpp:364
+#: reports/listtable.cpp:556 reports/listtable.cpp:558
+#: reports/pivottable.cpp:1343 reports/pivottable.cpp:1445
+#: reports/pivottable.cpp:1505 reports/pivottable.cpp:1598
+#: reports/pivottable.cpp:1768 reports/pivottable.cpp:1845
+#: reports/pivottable.cpp:2165 reports/pivottable.cpp:2167
+#: reports/pivottable.cpp:2187 reports/pivottable.cpp:2189
+#: reports/querytabletest.cpp:134 reports/querytabletest.cpp:135
+#: reports/querytabletest.cpp:136 reports/querytabletest.cpp:137
+#: reports/querytabletest.cpp:162 reports/querytabletest.cpp:163
+#: reports/querytabletest.cpp:164 reports/querytabletest.cpp:197
+#: reports/querytabletest.cpp:198 reports/querytabletest.cpp:224
+#: reports/querytabletest.cpp:250 reports/querytabletest.cpp:251
+#: reports/querytabletest.cpp:252 reports/querytabletest.cpp:275
+#: reports/querytabletest.cpp:276 reports/querytabletest.cpp:277
+#: reports/querytabletest.cpp:366 reports/querytabletest.cpp:422
+#: reports/querytabletest.cpp:423 views/kforecastview.cpp:568 views/rc.cpp:18
+#: widgets/kmymoneyaccounttreeforecast.cpp:139 widgets/transaction.cpp:1643
+msgid "Total"
+msgstr "Yhteensä"
+
+#: reports/listtable.cpp:444
+msgid "Initial Market Value"
+msgstr "Alustava markkina-arvo"
+
+#: reports/listtable.cpp:445
+msgid "Ending Market Value"
+msgstr "Loppumarkkina-arvo"
+
+#: reports/listtable.cpp:448 reports/querytabletest.cpp:651
+msgid "Opening Balance"
+msgstr "Alkusaldo"
+
+#: reports/listtable.cpp:449 reports/querytabletest.cpp:652
+#: reports/querytabletest.cpp:653
+msgid "Closing Balance"
+msgstr "Loppusaldo"
+
+#: reports/listtable.cpp:490 reports/listtable.cpp:491
+msgid "Calculated"
+msgstr "Laskettu"
+
+#: reports/listtable.cpp:572 reports/listtable.cpp:574
+#: reports/pivottable.cpp:1530 reports/pivottable.cpp:1886
+#: reports/querytabletest.cpp:138 reports/querytabletest.cpp:165
+#: reports/querytabletest.cpp:199 reports/querytabletest.cpp:225
+#: reports/querytabletest.cpp:253 reports/querytabletest.cpp:278
+#: reports/querytabletest.cpp:367 reports/querytabletest.cpp:402
+#: reports/querytabletest.cpp:424 reports/querytabletest.cpp:548
+#: reports/querytabletest.cpp:551 reports/querytabletest.cpp:586
+msgid "Grand Total"
+msgstr "Kokonaissumma"
+
+#: dialogs/rc.cpp:233 reports/pivottable.cpp:339 views/kscheduledview.cpp:174
+#: views/kscheduledview.cpp:433 views/kscheduledview.cpp:449
+#: widgets/kmymoneyscheduledcalendar.cpp:48
+msgid "Transfers"
+msgstr "Tilisiirrot"
+
+#: reports/pivottable.cpp:1951
+msgid "Legend"
+msgstr "Selitys"
+
+#: reports/pivottable.cpp:2411 views/khomeview.cpp:1406
+#: views/khomeview.cpp:1443
+msgid "Actual"
+msgstr "Toteutunut"
+
+#: reports/pivottable.cpp:2421 views/khomeview.cpp:1409
+#: views/khomeview.cpp:1446
+msgid "Difference"
+msgstr "Erotus"
+
+#: reports/pivottable.cpp:2431
+msgid "Moving Average"
+msgstr "Liikkuva keskiarvo"
+
+#: reports/pivottable.cpp:2436
+msgid "Moving Average Price"
+msgstr "Liikkuva keskiarvohinta"
+
+#: reports/objectinfotable.cpp:214 reports/querytable.cpp:693
+#: reports/querytable.cpp:736 reports/querytable.cpp:1356
+#: reports/querytable.cpp:1375 views/kpayeesview.cpp:742
+#, c-format
+msgid "Transfer from %1"
+msgstr "Tilisiirto %1:stä"
+
+#: reports/objectinfotable.cpp:215 reports/querytable.cpp:694
+#: reports/querytable.cpp:735 reports/querytable.cpp:1355
+#: reports/querytable.cpp:1374 views/kpayeesview.cpp:740
+#, c-format
+msgid "Transfer to %1"
+msgstr "Tilisiirto %1:een"
+
+#: reports/querytabletest.cpp:471 views/kreportsview.cpp:1144
+msgid "Investment Transactions"
+msgstr "Sijoitustapahtumat"
+
+#: reports/querytabletest.cpp:472 reports/querytabletest.cpp:564
+msgid "Test Report"
+msgstr "Testiraportti"
+
+#: reports/querytabletest.cpp:547 reports/querytabletest.cpp:550
+msgid "Total Stock 1"
+msgstr "Kaikki osakkeet 1"
+
+#: reports/querytabletest.cpp:563 views/kreportsview.cpp:1174
+msgid "Investment Performance by Account"
+msgstr "Sijoitustehokkuus tileittäin"
+
+#: reports/querytable.cpp:431 reports/querytable.cpp:1200
+#, c-format
+msgid "Month of %1"
+msgstr "Kuukausi: %1"
+
+#: reports/querytable.cpp:432 reports/querytable.cpp:1201
+#, c-format
+msgid "Week of %1"
+msgstr "Viikko: %1"
+
+#: reports/querytable.cpp:576 reports/querytable.cpp:739
+#: reports/querytable.cpp:858 reports/querytable.cpp:1325
+#: reports/querytable.cpp:1481
+msgid "No Institution"
+msgstr "Ei rahalaitosta"
+
+#: reports/querytable.cpp:580 reports/querytable.cpp:1329
+msgid "[Empty Payee]"
+msgstr "[Ei maksunsaajaa]"
+
+#: reports/querytable.cpp:615 reports/querytable.cpp:1361
+msgid "[Split Transaction]"
+msgstr "[Jaoteltu tapahtuma]"
+
+#: reports/querytable.cpp:616 reports/querytable.cpp:617
+msgid "Split"
+msgstr "Jaottelu"
+
+#: main.cpp:51
+msgid ""
+"\n"
+"KMyMoney, the Personal Finance Manager for KDE.\n"
+"\n"
+"Please consider contributing to this project with code and/or suggestions."
+msgstr ""
+"\n"
+"KMyMoney, henkilökohtainen talouskirjanpito-ohjelma KDE:lle.\n"
+"\n"
+"Voit auttaa ohjelman kehittämistä ohjelmoimalla tai antamalla "
+"parannusehdotuksia."
+
+#: main.cpp:55
+msgid "language to be used"
+msgstr "käytettävä kieli"
+
+#: main.cpp:56
+msgid "don't open last used file"
+msgstr "älä avaa viimeksi käytettyä tiedostoa"
+
+#: main.cpp:57
+msgid "enable performance timers"
+msgstr "ota suorituskykymittarit käyttöön"
+
+#: main.cpp:61
+msgid "turn on program traces"
+msgstr "Ota käyttöön virheenjäljitystoiminnot"
+
+#: main.cpp:62
+msgid "dump the names of all defined KAction objects to stdout and quit"
+msgstr ""
+"talleta kaikki määritellyt KAction-objektit standardiulostuloon ja lopeta "
+"ohjelma"
+
+#: main.cpp:66
+msgid "file to open"
+msgstr "avattava tiedosto"
+
+#: main.cpp:92
+msgid "Memory leakage detection"
+msgstr "Muistivuotojen havainnointi"
+
+#: main.cpp:96
+msgid "Compiled with the following settings:\n"
+msgstr "Ohjelma käännetty seuraavilla asetuksilla:\n"
+
+#: dialogs/kmymoneysplittable.cpp:650 dialogs/ksplittransactiondlg.cpp:277
+#: main.cpp:98
+msgid "KMyMoney"
+msgstr "KMyMoney"
+
+#: main.cpp:104
+msgid "Initial idea, much initial source code, Project admin"
+msgstr "Alustava idea, paljon alustavaa ohjelmakoodia, projektin vetäjä"
+
+#: main.cpp:105
+msgid "Core engine, Release Manager, Project admin"
+msgstr "Ytimen ohjelmointi, jakeluvastaava, projektin vetäjä"
+
+#: main.cpp:106
+msgid "Reporting logic, OFX Import"
+msgstr "Raportointilogiikka, OFX-tuonti"
+
+#: main.cpp:107
+msgid "Database backend, maintainer stable branch"
+msgstr "Tietokannan taustajärjestelmä, vakaan haaran ylläpitäjä"
+
+#: main.cpp:108
+msgid "Forecast, Reports"
+msgstr "Ennusteet, raportit"
+
+#: main.cpp:109
+msgid "Project Admin"
+msgstr "Projektin vetäjä"
+
+#: main.cpp:110
+msgid "Developer"
+msgstr "Kehittäjä"
+
+#: main.cpp:111
+msgid "Database backend"
+msgstr "Tietokannan taustajärjestelmä"
+
+#: main.cpp:113
+msgid "Initial investment support"
+msgstr "Alustava tuki sijoituksille"
+
+#: main.cpp:114
+msgid "Developer & Artist"
+msgstr "Kehittäjä & taiteilija"
+
+#: main.cpp:115
+msgid "Icons & splash screen"
+msgstr "Ikonit & aloitusruutu"
+
+#: main.cpp:116 main.cpp:117
+msgid "Patches"
+msgstr "Korjaukset"
+
+#: main.cpp:136
+msgid ""
+"The monetary decimal symbol is not correctly set in the KDE Control Center's "
+"Country/Region & Language settings. Please set it to a reasonable value and "
+"start KMyMoney again."
+msgstr ""
+"Käytetyn valuuttayksikön desimaalimerkkiä ei ole asetettu oikein KDE:n Maa/"
+"alue & kieliasetuksissa. Aseta se oikein ja käynnistä KMyMoney uudestaan."
+
+#: main.cpp:136
+msgid "Invalid settings"
+msgstr "Epäkelvot asetukset"
+
+#: main.cpp:228
+msgid "Another instance of KMyMoney is already running. Do you want to quit?"
+msgstr "Toinen KMyMoney on käynnissä jo. Haluatko lopettaa tämän?"
+
+#: main.cpp:289
+msgid "Uncaught error. Please report the details to the developers"
+msgstr ""
+"Tunnistamaton virhe. Ole hyvä ja raportoi yksityiskohdat ohjelman "
+"kehittäjille"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Mikael Kujanpää, Raimo Ikonen, Marko Suvila"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "mikael.kujanpaa@iki.fi, raimo.ikonen@gmail.com, marko.suvila@gmail.com"
+
+#: dialogs/kcsvprogressdlg.cpp:62 dialogs/kimportdlg.cpp:66 rc.cpp:1
+msgid "&Import"
+msgstr "&Tuonti"
+
+#: rc.cpp:2
+msgid "E&xport"
+msgstr "&Vie"
+
+#: rc.cpp:3
+msgid "&Institution"
+msgstr "&Rahalaitos"
+
+#: rc.cpp:4
+msgid "&Account"
+msgstr "&Tili"
+
+#: rc.cpp:5
+msgid "&Category"
+msgstr "&Kategoria"
+
+#: rc.cpp:6
+msgid "&Transaction"
+msgstr "&Tapahtuma"
+
+#: rc.cpp:7 rc.cpp:20
+msgid "Mark transaction as..."
+msgstr "Merkitse tapahtuma..."
+
+#: rc.cpp:8 rc.cpp:21
+msgid "Mark transaction"
+msgstr "Merkitse tapahtuma"
+
+#: rc.cpp:9
+msgid "T&ools"
+msgstr "T&yökalut"
+
+#: rc.cpp:10
+msgid "Account options"
+msgstr "Tiliasetukset"
+
+#: rc.cpp:11
+msgid "Category options"
+msgstr "Kategoria-asetukset"
+
+#: rc.cpp:12
+msgid "Institution options"
+msgstr "Rahalaitosasetukset"
+
+#: rc.cpp:13
+msgid "Payee options"
+msgstr "Maksunsaaja-asetukset"
+
+#: rc.cpp:14
+msgid "Budget options"
+msgstr "Budjettiasetukset"
+
+#: rc.cpp:15
+msgid "Investment options"
+msgstr "Sijoitusasetukset"
+
+#: rc.cpp:16
+msgid "Scheduled transactions options"
+msgstr "Ajoitettujen tapahtumien asetukset"
+
+#: rc.cpp:17
+msgid "Transaction options"
+msgstr "Tapahtuma-asetukset"
+
+#: rc.cpp:18
+msgid "Move transaction to..."
+msgstr "Siirrä tapahtuma..."
+
+#: rc.cpp:19
+msgid "Select account"
+msgstr "Valitse tili"
+
+#: rc.cpp:22
+msgid "Currency options"
+msgstr "Valuutta-asetukset"
+
+#: rc.cpp:24
+msgid "Always show a No. field in transaction form"
+msgstr "Näytä aina nro. -kenttä tapahtumalomakkeella"
+
+#: rc.cpp:25
+msgid "Auto fill with previous transaction data"
+msgstr "Täytä automaattisesti edellisellä tapahtumatiedoilla"
+
+#: rc.cpp:26
+msgid "Treat two transactions as identical, if amount differs less than"
+msgstr "Käsittele kahta tapahtumaa identtisenä, jos summa poikkeaa vähemmän kuin"
+
+#: dialogs/settings/rc.cpp:144 rc.cpp:27
+msgid "Auto increment check number"
+msgstr "Lisää sekkinumeroita automaattisesti"
+
+#: rc.cpp:28
+msgid "Autosave file periodically"
+msgstr "Tallenna automaattisesti"
+
+#: rc.cpp:29
+msgid "Autosave interval in minutes"
+msgstr "Automaattitallennuksen aikaväli minuuteissa"
+
+#: rc.cpp:30
+msgid "Check schedules upon startup"
+msgstr "Tarkista ajoitetut tapahtumat käynnistyksen yhteydessä"
+
+#: dialogs/settings/rc.cpp:171 rc.cpp:31
+msgid "Enter transactions this number of days in advance"
+msgstr "Tapahtumat kirjataan näin monta päivää aiemmin"
+
+#: dialogs/settings/rc.cpp:172 rc.cpp:32
+msgid "Number of days to preview schedules in ledger"
+msgstr ""
+"Monenko päivän ajalta ajoitettuja tapahtumia näytetään etukäteen tapahtumat-"
+"näkymässä"
+
+#: dialogs/settings/rc.cpp:143 rc.cpp:33
+msgid "Insert transaction type into No. field for new transactions"
+msgstr "Lisää tapahtumatyyppi uusille tapahtumille numerokenttään"
+
+#: dialogs/settings/rc.cpp:145 rc.cpp:34
+msgid "Keep changes when selecting a different transaction/split"
+msgstr "Säilytä muutokset kun valitaan toinen tapahtuma tai jaottelu"
+
+#: rc.cpp:35
+msgid "Using the Enter key moves between the fields"
+msgstr "Enter-näppäimellä voit siirtyä kenttien välillä"
+
+#: dialogs/settings/rc.cpp:130 rc.cpp:36
+msgid "Use the ledger lens"
+msgstr "Käytä tarkemmat tiedot -asetusta"
+
+#: rc.cpp:37
+msgid "Price Precision"
+msgstr "Hintojen tarkkuus"
+
+#: dialogs/rc.cpp:65 rc.cpp:38
+msgid "Update price history"
+msgstr "Päivitä hintahistoria"
+
+#: dialogs/settings/rc.cpp:132 rc.cpp:39
+msgid "Show transaction form"
+msgstr "Näytä tapahtumalomake"
+
+#: rc.cpp:40
+msgid "Start with last selected view or homepage"
+msgstr "Käynnisty viimeksi valittuun näkymään tai kotisivuun"
+
+#: rc.cpp:41
+msgid "Use GPG to encrypt data file"
+msgstr "Käytä GPG:tä tiedoston salaamiseen"
+
+#: rc.cpp:42
+msgid "Also encrypt against recover key"
+msgstr "Salaa myös kehittäjien palautusavaimelle"
+
+#: rc.cpp:43
+msgid "GPG User ID (deprecated)"
+msgstr "GPG-käyttäjätunnus (käytöstä poistunut)"
+
+#: rc.cpp:44
+msgid "GPG User ID"
+msgstr "GPG-käyttäjätunnus"
+
+#: rc.cpp:45
+msgid "Run in expert (accountant) mode"
+msgstr "Suorita edistyneen käyttäjän tilassa"
+
+#: rc.cpp:46
+msgid "Show splash screen during startup"
+msgstr "Näytä latauskuva ohjelman käynnistyessä"
+
+#: rc.cpp:47
+msgid "Synchronize account in ledger and investment view"
+msgstr "Synkronisoi tili tapahtumat- ja sijoitusnäkymissä"
+
+#: rc.cpp:48
+msgid "Icon size for view selection"
+msgstr "Ikonien koko näkymien valinnassa"
+
+#: rc.cpp:49
+msgid "list of hidden views"
+msgstr "piilotettujen näkymien lista"
+
+#: rc.cpp:50
+msgid "Firsttime switch to start new user wizard"
+msgstr "Näytä Uusi käyttäjä -ohjattu toiminto ensimmäisellä käyttökerralla"
+
+#: rc.cpp:51
+msgid "Show title bar on each view"
+msgstr "Näytä otsikkopalkki jokaisessa näkymässä"
+
+#: rc.cpp:52
+msgid "Start string matches for e.g. payees at start of string"
+msgstr ""
+"Aloitusmerkkijono täsmäämistä varten, esimerkiksi maksunsaaja merkkijonon "
+"alussa"
+
+#: rc.cpp:53
+msgid "Order of items on homepage"
+msgstr "Järjestys etusivulla"
+
+#: rc.cpp:54
+msgid "Percentage of default font size used for home view HTML page"
+msgstr "Prosenttiosuus oletusfontin koosta etusivulla"
+
+#: rc.cpp:55
+msgid "Remember (manually adjusted) font size in home view on program end."
+msgstr "Tallenna etusivulle käsin asetettu kirjasinkoko suljettaessa ohjelma."
+
+#: rc.cpp:56
+msgid "Show account limit information on the Homepage"
+msgstr "Näytä tilin rajoituksista tietoa etusivulla"
+
+#: rc.cpp:58
+msgid "Hide closed accounts"
+msgstr "Piilota suljetut tilit"
+
+#: rc.cpp:59
+msgid "Hide finished schedules"
+msgstr "Piilota päättyneet ajoitetut tapahtumat"
+
+#: rc.cpp:61
+msgid "Show all register entries in full detail"
+msgstr "Näytä kaikki tapahtumat yksityiskohtaisesti"
+
+#: dialogs/settings/rc.cpp:129 rc.cpp:62
+msgid "Show a grid in the register"
+msgstr "Näytä ruudukko tapahtumat-näkymässä"
+
+#: rc.cpp:63
+msgid "Show fancy group markers"
+msgstr "Käytä koristeellisia ryhmityksiä"
+
+#: rc.cpp:64
+msgid "Show fancy markers for previous and current fiscal year"
+msgstr "Käytä koristeellisia ryhmityksiä edellisestä ja nykyisestä tilivuodesta"
+
+#: rc.cpp:65
+msgid "Starting month of the fiscal year"
+msgstr "Tilivuoden aloituskuukausi"
+
+#: rc.cpp:66
+msgid "Starting day of the fiscal year"
+msgstr "Tilivuoden aloituspäivä"
+
+#: rc.cpp:67
+msgid "Start date"
+msgstr "Aloituspäivä"
+
+#: dialogs/settings/rc.cpp:9 rc.cpp:68
+msgid "Use system colors"
+msgstr "Käytä järjestelmän värejä"
+
+#: rc.cpp:69
+msgid "List color"
+msgstr "Listan väri"
+
+#: rc.cpp:70
+msgid "List background color"
+msgstr "Listan taustaväri"
+
+#: rc.cpp:71
+msgid "List grid color"
+msgstr "Listan ruudukon väri"
+
+#: rc.cpp:72
+msgid "Background color for imported transactions"
+msgstr "Tuotujen maksujen taustaväri"
+
+#: rc.cpp:73
+msgid "Background color for matched transactions"
+msgstr "Täsmättyjen maksujen taustaväri"
+
+#: rc.cpp:74
+msgid "List color for erronous transactions"
+msgstr "Virheellisten tapahtumien väri"
+
+#: rc.cpp:75
+msgid "List color for missing conversion rate"
+msgstr "Puuttuvan muuntokurssin väri"
+
+#: rc.cpp:76
+msgid "List color for negative values"
+msgstr "Negatiivisten arvojen väri"
+
+#: rc.cpp:77
+msgid "Background color for group marker"
+msgstr "Ryhmämerkkien taustaväri"
+
+#: rc.cpp:78
+msgid "Background color for required fields"
+msgstr "Pakollisten kenttien taustaväri"
+
+#: rc.cpp:79
+msgid "Use system font"
+msgstr "Käytä järjestelmän kirjasimia"
+
+#: dialogs/settings/rc.cpp:21 rc.cpp:80
+msgid "Cell font"
+msgstr "Solun kirjasin"
+
+#: dialogs/settings/rc.cpp:22 rc.cpp:81
+msgid "Header font"
+msgstr "Otsikon kirjasin"
+
+#: rc.cpp:82 rc.cpp:83
+msgid "Sort order of register in normal view"
+msgstr "Tapahtumien lajittelujärjestys normaalinäkymässä"
+
+#: rc.cpp:84
+msgid "Sort order of register in search dialog"
+msgstr "Tapahtumien lajittelu hakuikkunassa"
+
+#: rc.cpp:85
+msgid "Default reconciliation state for transactions entered during reconciliation"
+msgstr ""
+"Yhteensovituksen oletustila uusille tapahtumille jotka syötetään "
+"yhteensovituksen aikana"
+
+#: rc.cpp:86
+msgid "Number of days (plus/minus) to search for matching transactions"
+msgstr "Päivien määrä (hakumarginaali) täsmättyjen tapahtumien etsimiseen"
+
+#: rc.cpp:87
+msgid "During import, ask for a new payee's default category"
+msgstr "Kysy tuonnin yhteydessä uusien maksunsaajien oletuskategoria"
+
+#: rc.cpp:88
+msgid "Method to calculate forecast"
+msgstr "Käytettävä ennustemenetelmä"
+
+#: rc.cpp:89
+msgid "Days to forecast"
+msgstr "Ennustepäivien määrä"
+
+#: rc.cpp:90
+msgid "Days of normal account cycle"
+msgstr "Tilikierron pituus päivissä"
+
+#: rc.cpp:91
+msgid "Number of historic cycles to use in forecast"
+msgstr "Ennusteissa käytettävien historiakierrosten määrä"
+
+#: rc.cpp:92
+msgid "Day of month to start forecast"
+msgstr "Kuukauden aloituspäivä ennusteiden aloituksille"
+
+#: rc.cpp:93
+msgid "Method to calculate history-based forecast"
+msgstr "Laskentamenetelmä historiaperustaisille ennusteille"
+
+#: rc.cpp:94
+msgid "Skip opening date when fetching transactions"
+msgstr "Ohita avauspäivä kun tapahtumia haetaan"
+
+#: rc.cpp:95
+msgid "Include future transaction when using Schedule Forecast"
+msgstr ""
+"Sisällytä tulevat tapahtumat mukaan kun käytetään ajoitettujen tapahtumien "
+"ennustetta"
+
+#: rc.cpp:96
+msgid "Include scheduled transactions when using Schedule Forecast"
+msgstr ""
+"Sisällytä ajoitetut tapahtumat mukaan kun käytetään ajoitettujen tapahtumien "
+"ennustetta."
+
+#: rc.cpp:97
+msgid "additional names for cash account"
+msgstr "lisänimet käteistilille"
+
+#: rc.cpp:98
+msgid "additional names for checking account"
+msgstr "lisänimet sekkitilille"
+
+#: rc.cpp:99
+msgid "additional names for credit card account"
+msgstr "lisänimet luottokorttitilille"
+
+#: rc.cpp:100
+msgid "additional names for asset account"
+msgstr "lisänimet varallisuustilille"
+
+#: rc.cpp:101
+msgid "additional names for opening balance payee"
+msgstr "lisänimet alkusaldon maksunsaajalle"
+
+#: rc.cpp:102
+msgid "additional names for invoice accounts"
+msgstr "lisänimet laskutileille"
+
+#: rc.cpp:103 widgets/rc.cpp:161 widgets/rc.cpp:163
+msgid "..."
+msgstr "..."
+
+#: views/kcategoriesview.cpp:276
+msgid "Profit: "
+msgstr "Tuotto: "
+
+#: views/kcategoriesview.cpp:278
+msgid "Loss: "
+msgstr "Tappio: "
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:54
+#: dialogs/transactioneditor.cpp:605 views/kpayeesview.cpp:365
+#: widgets/kmymoneyonlinequoteconfig.cpp:54
+msgid "Accepts the entered data and stores it"
+msgstr "Hyväksyy syötetyt tiedot ja tallentaa ne"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:55 views/kpayeesview.cpp:366
+#: widgets/kmymoneyonlinequoteconfig.cpp:55
+msgid "Use this to accept the modified data."
+msgstr "Käytä tätä muokattujen tietojen hyväksyntään."
+
+#: views/kpayeesview.cpp:491
+msgid ""
+"A payee with the name '%1' already exists. It is not advisable to have "
+"multiple payees with the same identification name. Are you sure you would "
+"like to rename the payee?"
+msgstr ""
+"Maksunsaaja '%1' on jo olemassa. Samalla nimellä esiintyvien maksunsaajien "
+"käyttöä ei suositella. Nimetäänkö maksunsaaja uudelleen?"
+
+#: views/kpayeesview.cpp:518 views/kpayeesview.cpp:869
+msgid "Unable to modify payee"
+msgstr "Maksunsaajaa ei voitu muokata"
+
+#: views/kpayeesview.cpp:564
+msgid "Do you want to save the changes for <b>%1</b>?"
+msgstr "<b>%1</b> on muuttunut. Tallennetaanko muutokset?"
+
+#: views/kbudgetview.cpp:490 views/kpayeesview.cpp:565
+msgid "Save changes"
+msgstr "Tallenna muutokset"
+
+#: views/kgloballedgerview.cpp:737 views/kpayeesview.cpp:662
+#: views/kpayeesview.cpp:753
+#, c-format
+msgid "Balance: %1"
+msgstr "Saldo: %1"
+
+#: views/kpayeesview.cpp:725 views/kpayeesview.cpp:731
+#, c-format
+msgid "Amortization of %1"
+msgstr "%1:n lyhennyserä"
+
+#: views/kpayeesview.cpp:727 views/kpayeesview.cpp:733
+#, c-format
+msgid "Payment to %1"
+msgstr "Maksu %1:lle"
+
+#: views/kpayeesview.cpp:736
+#, c-format
+msgid "Loan payment from %1"
+msgstr "Lainan maksu %1:ltä"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:123
+#: dialogs/kconfirmmanualenterdlg.cpp:133 views/kpayeesview.cpp:745
+#: widgets/kmymoneycategory.cpp:160 widgets/kmymoneycategory.cpp:166
+#: widgets/transaction.cpp:851 widgets/transaction.cpp:1397
+#: widgets/transaction.cpp:1411
+msgid ""
+"_: Split transaction (category replacement)\n"
+"Split transaction"
+msgstr "Jaoteltu tapahtuma"
+
+#: views/kreportsview.cpp:262
+msgid ""
+"There was an error creating your report: \"%1\".\n"
+"Please report this error to the developer's list: kmymoney2-developer@lists."
+"sourceforge.net"
+msgstr ""
+"Raporttia luotaessa tapahtui virhe: \"%1\".\n"
+"Ole hyvä ja raportoi tämä virhe ohjelmistokehittäjien postituslistalla: "
+"kmymoney2-developer@lists.sourceforge.net"
+
+#: views/kreportsview.cpp:264
+msgid "Critical Error"
+msgstr "Kriittinen virhe"
+
+#: views/kreportsview.cpp:268
+msgid "Unable to generate report"
+msgstr "Raporttia ei voitu generoida"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:125 views/kreportsview.cpp:286
+#: views/rc.cpp:53 widgets/rc.cpp:146
+msgid "Chart"
+msgstr "Kaavionäkymä"
+
+#: views/kreportsview.cpp:287 widgets/rc.cpp:147
+msgid "Show the chart version of this report"
+msgstr "Näytä raportti kaaviona"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:112 views/khomeview.cpp:900
+#: views/kreportsview.cpp:294 views/kreportsview.cpp:328
+msgid "Report"
+msgstr "Raporttinäkymä"
+
+#: views/kreportsview.cpp:295
+msgid "Show the report version of this chart"
+msgstr "Näytä raportti tekstimuotoisena"
+
+#: views/kmymoneyview.cpp:236 views/kreportsview.cpp:314
+#: views/kreportsview.cpp:326
+msgid "Reports"
+msgstr "Raportit"
+
+#: views/khomeview.cpp:902 views/kreportsview.cpp:329 widgets/rc.cpp:56
+msgid "Comment"
+msgstr "Kommentti"
+
+#: views/kreportsview.cpp:432
+msgid "Charts"
+msgstr "Kaaviot"
+
+#: views/khomeview.cpp:897 views/kreportsview.cpp:470
+msgid "Favorite Reports"
+msgstr "Suosikkiraportit"
+
+#: views/kreportsview.cpp:486
+msgid "Old Customized Reports"
+msgstr "Vanhat, mukautetut raportit"
+
+#: views/kreportsview.cpp:579
+msgid "Include Stylesheet"
+msgstr "Sisällytä tyyliasetukset"
+
+#: views/kreportsview.cpp:585
+msgid ""
+"_: CSV (Filefilter)\n"
+"CSV files"
+msgstr "CSV-tiedostot"
+
+#: views/kreportsview.cpp:586
+msgid ""
+"_: HTML (Filefilter)\n"
+"HTML files"
+msgstr "HTML-tiedostot"
+
+#: views/kreportsview.cpp:591
+msgid "Export as"
+msgstr "Vie nimellä"
+
+#: views/kreportsview.cpp:619 views/kreportsview.cpp:660
+#: views/kreportsview.cpp:942 views/kreportsview.cpp:950
+#: views/kreportsview.cpp:958 views/kreportsview.cpp:968
+#: views/kreportsview.cpp:980 views/kreportsview.cpp:998
+#: views/kreportsview.cpp:1006 views/kreportsview.cpp:1014
+#: views/kreportsview.cpp:1022 views/kreportsview.cpp:1034
+#: views/kreportsview.cpp:1046 views/kreportsview.cpp:1056
+#: views/kreportsview.cpp:1070 views/kreportsview.cpp:1079
+#: views/kreportsview.cpp:1087 views/kreportsview.cpp:1095
+#: views/kreportsview.cpp:1103 views/kreportsview.cpp:1111
+#: views/kreportsview.cpp:1120 views/kreportsview.cpp:1132
+#: views/kreportsview.cpp:1145 views/kreportsview.cpp:1155
+#: views/kreportsview.cpp:1165 views/kreportsview.cpp:1175
+#: views/kreportsview.cpp:1185 views/kreportsview.cpp:1195
+#: views/kreportsview.cpp:1208 views/kreportsview.cpp:1222
+#: views/kreportsview.cpp:1239 views/kreportsview.cpp:1257
+#: views/kreportsview.cpp:1273 views/kreportsview.cpp:1295
+#: views/kreportsview.cpp:1304 views/kreportsview.cpp:1313
+#: views/kreportsview.cpp:1322 views/kreportsview.cpp:1336
+#: views/kreportsview.cpp:1347 views/kreportsview.cpp:1362
+#: views/kreportsview.cpp:1372 views/kreportsview.cpp:1383
+#: views/kreportsview.cpp:1393 views/kreportsview.cpp:1404
+#: views/kreportsview.cpp:1423 views/kreportsview.cpp:1432
+#: views/kreportsview.cpp:1444 views/kreportsview.cpp:1463
+#: views/kreportsview.cpp:1472 views/kreportsview.cpp:1481
+#: views/kreportsview.cpp:1490
+msgid "Default Report"
+msgstr "Oletusraportti"
+
+#: views/kreportsview.cpp:621 views/kreportsview.cpp:661
+msgid "Custom Report"
+msgstr "Muokattu raportti"
+
+#: views/kreportsview.cpp:622
+msgid " (Customized)"
+msgstr " (muokattu)"
+
+#: views/kreportsview.cpp:690
+msgid ""
+"Are you sure you want to delete report <b>%1</b>? There is no way to "
+"recover it!"
+msgstr "Poistetaanko varmasti raportti <b>%1</b>? Sitä ei voida palauttaa mitenkään."
+
+#: views/kreportsview.cpp:690 views/kreportsview.cpp:702
+msgid "Delete Report?"
+msgstr "Poistetaanko raportti?"
+
+#: views/kreportsview.cpp:702
+msgid "Sorry, <b>%1</b> is a default report. You may not delete it."
+msgstr "<b>%1</b> on oletusraportti, joten sitä ei voida poistaa."
+
+#: views/kreportsview.cpp:882
+msgid "&Open"
+msgstr "&Avaa"
+
+#: views/kreportsview.cpp:884
+msgid "&New report"
+msgstr "&Uusi raportti"
+
+#: views/kreportsview.cpp:934
+msgid "Income and Expenses"
+msgstr "Tulot ja menot"
+
+#: views/kreportsview.cpp:941
+msgid "Income and Expenses This Month"
+msgstr "Tulot ja menot tässä kuussa"
+
+#: views/kreportsview.cpp:949
+msgid "Income and Expenses This Year"
+msgstr "Tulot ja menot tänä vuonna"
+
+#: views/kreportsview.cpp:957
+msgid "Income and Expenses By Year"
+msgstr "Tulot ja menot vuosittain"
+
+#: views/kreportsview.cpp:967
+msgid "Income and Expenses Graph"
+msgstr "Tulot ja menot -kaavio"
+
+#: views/kreportsview.cpp:979
+msgid "Income and Expenses Pie Chart"
+msgstr "Tulot ja menot -piirakkakaavio"
+
+#: views/khomeview.cpp:1361 views/kreportsview.cpp:990
+msgid "Net Worth"
+msgstr "Nettovarallisuus"
+
+#: views/kreportsview.cpp:997
+msgid "Net Worth By Month"
+msgstr "Nettovarallisuus kuukausittain"
+
+#: views/kreportsview.cpp:1005
+msgid "Net Worth Today"
+msgstr "Nettovarallisuus tänään"
+
+#: views/kreportsview.cpp:1013
+msgid "Net Worth By Year"
+msgstr "Nettovarallisuus vuosittain"
+
+#: views/kreportsview.cpp:1021
+msgid "7-day Cash Flow Forecast"
+msgstr "Seitsemän päivän ennuste käteisvirralle"
+
+#: views/kreportsview.cpp:1033
+msgid "Net Worth Graph"
+msgstr "Nettovarallisuuskaavio"
+
+#: views/kreportsview.cpp:1045
+msgid "Account Balances by Institution"
+msgstr "Tilien saldot rahalaitoksittain"
+
+#: views/kreportsview.cpp:1055
+msgid "Account Balances by Type"
+msgstr "Tilien saldot tyypeittäin"
+
+#: views/kreportsview.cpp:1069
+msgid "Transactions by Account"
+msgstr "Tapahtumat tileittäin"
+
+#: views/kreportsview.cpp:1078
+msgid "Transactions by Category"
+msgstr "Tapahtumat kategorioittain"
+
+#: views/kreportsview.cpp:1086
+msgid "Transactions by Payee"
+msgstr "Tapahtumat maksunsaajan mukaan"
+
+#: views/kreportsview.cpp:1094
+msgid "Transactions by Month"
+msgstr "Tapahtumat kuukausittain"
+
+#: views/kreportsview.cpp:1102
+msgid "Transactions by Week"
+msgstr "Tapahtumat viikottain"
+
+#: views/kreportsview.cpp:1110
+msgid "Loan Transactions"
+msgstr "Lainatapahtumat"
+
+#: views/kreportsview.cpp:1119
+msgid "Transactions by Reconciliation Status"
+msgstr "Tapahtumat yhteensovittamistiloittain"
+
+#: views/kreportsview.cpp:1125
+msgid "Cash Flow"
+msgstr "Käteisvirta"
+
+#: views/kreportsview.cpp:1131
+msgid "Cash Flow Transactions This Month"
+msgstr "Käteisvirta tapahtumittain tässä kuussa"
+
+#: views/kmymoneyview.cpp:226 views/kmymoneyview.cpp:228
+#: views/kreportsview.cpp:1137
+msgid "Investments"
+msgstr "Sijoitukset"
+
+#: views/kreportsview.cpp:1154
+msgid "Investment Holdings by Account"
+msgstr "Sijoitukset tileittäin"
+
+#: views/kreportsview.cpp:1164
+msgid "Investment Holdings by Type"
+msgstr "Sijoitukset tyypeittäin"
+
+#: views/kreportsview.cpp:1184
+msgid "Investment Performance by Type"
+msgstr "Sijoitustehokkuus tyypeittäin"
+
+#: views/kreportsview.cpp:1194
+msgid "Investment Holdings Pie"
+msgstr "Sijoitukset-piirakkakaavio"
+
+#: views/kreportsview.cpp:1207
+msgid "Investment Worth Graph"
+msgstr "Sijoitusten arvo -kaavio"
+
+#: views/kreportsview.cpp:1221
+msgid "Investment Price Graph"
+msgstr "Sijoitusten arvo -kaavio"
+
+#: views/kreportsview.cpp:1238
+msgid "Investment Moving Average Price Graph"
+msgstr "Sijoitusten liikkuva hintakeskiarvo -kaavio"
+
+#: views/kreportsview.cpp:1256
+msgid "Investment Moving Average"
+msgstr "Sijoitusten liikkuva keskiarvo"
+
+#: views/kreportsview.cpp:1272
+msgid "Investment Moving Average vs Actual"
+msgstr "Sijoitusten liikkuva keskiarvo vs. todellinen"
+
+#: views/kreportsview.cpp:1287
+msgid "Taxes"
+msgstr "Verot"
+
+#: views/kreportsview.cpp:1294
+msgid "Tax Transactions by Category"
+msgstr "Verotapahtumat kategorioittain"
+
+#: views/kreportsview.cpp:1303
+msgid "Tax Transactions by Payee"
+msgstr "Verotapahtumat maksunsaajan mukaan"
+
+#: views/kreportsview.cpp:1312
+msgid "Tax Transactions by Category Last Fiscal Year"
+msgstr "Verotapahtumat kategorioittain viime tilikaudelta"
+
+#: views/kreportsview.cpp:1321
+msgid "Tax Transactions by Payee Last Fiscal Year"
+msgstr "Verotapahtumat viime tilikaudelta maksunsaajan mukaan"
+
+#: views/kreportsview.cpp:1328
+msgid "Budgeting"
+msgstr "Budjetointi"
+
+#: views/kreportsview.cpp:1335
+msgid "Budgeted vs. Actual This Year"
+msgstr "Budjetoitu vs. toteutunut tänä vuonna"
+
+#: views/kreportsview.cpp:1346
+msgid "Budgeted vs. Actual This Year (YTM)"
+msgstr "Budjetoitu vs. toteutunut tänä vuonna (vuoden alusta kuun alkuun)"
+
+#: views/khomeview.cpp:1383 views/kreportsview.cpp:1361
+msgid "Monthly Budgeted vs. Actual"
+msgstr "Kuukausittain budjetoitu vs. toteutunut"
+
+#: views/kreportsview.cpp:1371
+msgid "Yearly Budgeted vs. Actual"
+msgstr "Vuosittain budjetoitu vs. toteutunut"
+
+#: views/kreportsview.cpp:1382
+msgid "Monthly Budget"
+msgstr "Kuukausibudjetti"
+
+#: views/kreportsview.cpp:1392
+msgid "Yearly Budget"
+msgstr "Vuosibudjetti"
+
+#: views/kreportsview.cpp:1403
+msgid "Yearly Budgeted vs Actual Graph"
+msgstr "Vuosittain budjetoitu vs. todellinen -kaavio"
+
+#: views/kreportsview.cpp:1422
+msgid "Forecast By Month"
+msgstr "Ennuste kuukausittain"
+
+#: views/kreportsview.cpp:1431
+msgid "Forecast Next Quarter"
+msgstr "Ennuste seuraavalle vuosineljännekselle"
+
+#: views/kreportsview.cpp:1443
+msgid "Net Worth Forecast Graph"
+msgstr "Nettovarallisuuden ennustekaavio"
+
+#: dialogs/rc.cpp:126 dialogs/rc.cpp:128 dialogs/rc.cpp:466
+#: views/kreportsview.cpp:1455
+msgid "General Information"
+msgstr "Yleiset tiedot"
+
+#: views/kreportsview.cpp:1462
+msgid "Schedule Information"
+msgstr "Ajoitetun tapahtuman tiedot"
+
+#: views/kreportsview.cpp:1471
+msgid "Schedule Summary Information"
+msgstr "Ajoitetun tapahtuman yhteenvetotiedot"
+
+#: views/kreportsview.cpp:1480
+msgid "Account Information"
+msgstr "Tilitiedot"
+
+#: views/kreportsview.cpp:1489
+msgid "Loan Information"
+msgstr "Lainatiedot"
+
+#: dialogs/rc.cpp:323 views/kmymoneyview.cpp:148 views/kmymoneyview.cpp:150
+msgid "Institutions"
+msgstr "Rahalaitokset"
+
+#: dialogs/knewaccountdlg.cpp:98 views/kmymoneyview.cpp:162
+#: views/kmymoneyview.cpp:164 widgets/rc.cpp:4 widgets/rc.cpp:94
+msgid "Accounts"
+msgstr "Tilit"
+
+#: views/kmymoneyview.cpp:176
+msgid "Bills & Reminders"
+msgstr "Laskut ja muistutukset"
+
+#: views/kmymoneyview.cpp:178
+msgid "Scheduled transactions"
+msgstr "Ajoitetut tapahtumat"
+
+#: dialogs/knewaccountdlg.cpp:98 dialogs/rc.cpp:193 views/kmymoneyview.cpp:188
+#: views/kmymoneyview.cpp:190 widgets/rc.cpp:91
+msgid "Categories"
+msgstr "Kategoriat"
+
+#: dialogs/kfindtransactiondlg.cpp:212 dialogs/rc.cpp:318
+#: views/kmymoneyview.cpp:199 views/kmymoneyview.cpp:201 widgets/rc.cpp:93
+msgid "Payees"
+msgstr "Maksunsaajat"
+
+#: views/kgloballedgerview.cpp:149 views/kmymoneyview.cpp:211
+msgid "Ledgers"
+msgstr "Tapahtumat"
+
+#: views/kmymoneyview.cpp:353
+msgid "Creating transactions can only be performed in the ledger view"
+msgstr "Maksutapahtumien luominen on mahdollista vain tapahtumat-näkymässä"
+
+#: views/kmymoneyview.cpp:367
+msgid "Modifying transactions can only be performed in the ledger view"
+msgstr "Maksutapahtumia voi muokata vain tapahtumat-näkymässä"
+
+#: views/kmymoneyview.cpp:382
+msgid "Duplicating transactions can only be performed in the ledger view"
+msgstr "Maksutapahtumia voi kahdentaa vain tapahtumat-näkymässä"
+
+#: views/kmymoneyview.cpp:394
+msgid "Edit the current selected transactions"
+msgstr "Muokkaa valittuja tapahtumia"
+
+#: views/kmymoneyview.cpp:602
+msgid "<b>%1</b> is not a KMyMoney file."
+msgstr "<b>%1</b> ei ole KMyMoney-tiedosto."
+
+#: views/kmymoneyview.cpp:643
+msgid "GPG is not available for decryption of file <b>%1</b>"
+msgstr "GPG:tä ei ole käytettävissä <b>%1</b>-tiedoston salauksen purkuun"
+
+#: views/kmymoneyview.cpp:721
+msgid ""
+"File <b>%1</b> contains the old binary format used by KMyMoney. Please use "
+"an older version of KMyMoney (0.8.x) that still supports this format to "
+"convert it to the new XML based format."
+msgstr ""
+"Tiedosto <b>%1</b> sisältää KMyMoneyn vanhoja muotoilutietoja. Käytä "
+"vanhempaa KMyMoneyn versiota (0.8.x) , joka tukee muotoilujen konvertointia "
+"uuteen XML-pohjaiseen muotoiluun."
+
+#: views/kmymoneyview.cpp:723
+msgid "File <b>%1</b> contains an unknown file format!"
+msgstr "<b>%1</b>-tiedoston sisältö on tuntemattomassa muodossa!"
+
+#: views/kmymoneyview.cpp:728
+msgid "Cannot read from file <b>%1</b>!"
+msgstr "<b>%1</b>-tiedostoa ei voitu lukea!"
+
+#: views/kmymoneyview.cpp:732
+msgid "Cannot load file <b>%1</b>. Reason: %2"
+msgstr "Tiedostoa <b>%1</b> ei voida ladata. Syy: %2"
+
+#: views/kmymoneyview.cpp:742 views/kmymoneyview.cpp:748
+msgid "File <b>%1</b> not found!"
+msgstr "<b>%1</b>-tiedostoa ei löytynyt!"
+
+#: views/kmymoneyview.cpp:812
+msgid "Can't open database %1\n"
+msgstr "Tietokantaa %1 ei voida avata\n"
+
+#: views/kmymoneyview.cpp:844
+msgid "An unrecoverable error occurred while reading the database"
+msgstr "Palautumaton virhe tietokantaa luettaessa"
+
+#: views/kmymoneyview.cpp:846 views/kmymoneyview.cpp:1208
+msgid "Database malfunction"
+msgstr "Tietokannan toimintahäiriö"
+
+#: views/kmymoneyview.cpp:938
+msgid "Unknown fix level in input file"
+msgstr "Tuntematon korjauksen taso sisäänluettavassa tiedostossa"
+
+#: views/kmymoneyview.cpp:984
+msgid ""
+"GPG does not seem to be installed on your system. Please make sure, that GPG "
+"can be found using the standard search path. This time, encryption is "
+"disabled."
+msgstr ""
+"Järjestelmään ei ilmeisesti ole asennettu GPG:tä. Jos GPG on asennettu, "
+"varmista että se löytyy tavanomaisesta hakupolusta. Salaus on poistettu "
+"käytöstä toistaiseksi."
+
+#: views/kmymoneyview.cpp:984
+msgid "GPG not found"
+msgstr "GPG:tä ei löytynyt"
+
+#: views/kmymoneyview.cpp:991
+msgid ""
+"You have selected to encrypt your data also with the KMyMoney recover key, "
+"but the key with id</p><p><center><b>%1</b></center></p>has not been found "
+"in your keyring at this time. Please make sure to import this key into your "
+"keyring. You can find it on the <a href=\"http://kmymoney2.sourceforge.net/"
+"\">KMyMoney web-site</a>. This time your data will not be encrypted with the "
+"KMyMoney recover key."
+msgstr ""
+"On valittu tietojen salaus KMyMoney-palautusavainta käyttäen, mutta avainta "
+"tunnisteella </p><p><center><b>%1</b></center></p> ei löydy avainrenkaasta. "
+"Avain täytyy tuoda avainrenkaaseen jotta voidaan salata. Avain löytyy <a "
+"href=\"http://kmymoney2.sourceforge.net/\">KMyMoneyn verkkosivuilta</a>. "
+"Tietoja ei nyt salata KMyMoneyn palautusavaimella."
+
+#: views/kmymoneyview.cpp:991 views/kmymoneyview.cpp:1000
+msgid "GPG-Key not found"
+msgstr "GPG-avainta ei löytynyt"
+
+#: views/kmymoneyview.cpp:1000
+msgid ""
+"You have specified to encrypt your data for the user-id</p><p><center><b>%1</"
+"b>.</center></p>Unfortunately, a valid key for this user-id was not found in "
+"your keyring. Please make sure to import a valid key for this user-id. This "
+"time, encryption is disabled."
+msgstr ""
+"Tiedot on määritelty salattavaksi käyttäjätunnisteella</p><p><center><b>%1</"
+"b></center></p>Valitettavasti käyttökelpoista avainta tälle "
+"käyttäjätunnisteelle ei kuitenkaan löydetty avainrenkaasta. Käyttökelpoinen "
+"avain on tuotava ensin jotta salausta voidaan käyttää. Salaus on poistettu "
+"käytöstä toistaiseksi."
+
+#: views/kmymoneyview.cpp:1006
+msgid ""
+"You have configured to save your data in encrypted form using GPG. Please be "
+"aware, that this is a brand new feature which is yet untested. Make sure, "
+"you have the necessary understanding that you might loose all your data if "
+"you store it encrypted and cannot decrypt it later on! If unsure, answer "
+"<b>No</b>."
+msgstr ""
+"Tiedot on päätetty tallentaa salatussa muodossa GPG:tä käyttäen. Tämä on "
+"uusi ominaisuus, joka on toistaiseksi testaamaton. Varmista, että ymmärrät "
+"tämän voivan johtaa kaikkien tietojen menettämiseen, mikäli et voi purkaa "
+"salausta myöhemmin. Jos olet epävarma, vastaa <b>Ei</b>."
+
+#: views/kmymoneyview.cpp:1008
+msgid "Store GPG encrypted"
+msgstr "Tallenna GPG-salattuna"
+
+#: views/kmymoneyview.cpp:1038 views/kmymoneyview.cpp:1052
+msgid "Unable to open file '%1' for writing."
+msgstr "%1-tiedostoa ei voitu avata kirjoittamista varten."
+
+#: views/kmymoneyview.cpp:1065 views/kmymoneyview.cpp:1074
+msgid "Failure while writing to '%1'"
+msgstr "Virhe kirjoitettaessa %1-tiedostoon"
+
+#: views/kmymoneyview.cpp:1086 views/kmymoneyview.cpp:1181
+msgid "Tried to access a file when it's not open"
+msgstr "Tiedostoa yritettiin käyttää vaikka se ei ollut auki"
+
+#: views/kmymoneyview.cpp:1092
+msgid ""
+"Since this version of KMyMoney only writes data files in its new format, "
+"files written with this version cannot be read by KMyMoney version 0.4. If "
+"you still want to use older versions of KMyMoney with your data files, "
+"please make sure you keep a backup-file of your finance data. If you want to "
+"abort this operation, please press Cancel now"
+msgstr ""
+"Tästä versiosta lähtien KMyMoney kirjoittaa tiedot käyttäen "
+"uuttatiedostomuotoa, joten niitä ei voida lukea enää KMyMoneyn versiolla "
+"0.4. Jos haluat käyttää KMyMoneyn vanhempia versioita, varmista että pidät "
+"varmuuskopiota taloustiedoistasi. Jos haluat keskeyttää toiminnon, paina "
+"\"peruuta\"-painiketta nyt."
+
+#: views/kmymoneyview.cpp:1122
+msgid "Malformed URL '%1'"
+msgstr "Epäkelpo URL '%1'"
+
+#: views/kmymoneyview.cpp:1192
+msgid ""
+"Database contains data which must be removed before using SaveAs.\n"
+"Do you wish to continue?"
+msgstr ""
+"Tietokannassa on tietoa, joka täytyy poistaa ennen Tallenna nimellä -"
+"toiminnon käyttämistä.\n"
+"Jatketaanko?"
+
+#: views/kmymoneyview.cpp:1205
+msgid ""
+"An unrecoverable error occurred while writing to the database.\n"
+"It may well be corrupt."
+msgstr ""
+"Tapahtui palautumaton virhe, kun tietokantaan kirjoitettiin.\n"
+"Tietokanta voi olla korruptoitunut."
+
+#: views/kmymoneyview.cpp:1215
+msgid ""
+"Can't open or create database %1\n"
+"Retry SaveAsDatabase and click Help for further info"
+msgstr ""
+"Tietokantaa %1 ei voida avata tai luoda\n"
+"Yritä uudelleen Tallenna tietokantana -painikkeen avulla. Ohje-painikkeen "
+"avulla saat lisätietoja."
+
+#: views/kmymoneyview.cpp:1354
+msgid "Afghanistan Afghani"
+msgstr "Afganistan afkaani"
+
+#: views/kmymoneyview.cpp:1355
+msgid "Albanian Lek"
+msgstr "Albanian lek"
+
+#: views/kmymoneyview.cpp:1356
+msgid "Netherland Antillian Guilder"
+msgstr "Alankomaiden Antillien guldenit"
+
+#: views/kmymoneyview.cpp:1357
+msgid "Algerian Dinar"
+msgstr "Algerian dinaari"
+
+#: views/kmymoneyview.cpp:1358
+msgid "Andorran Franc"
+msgstr "Andorran frangi"
+
+#: views/kmymoneyview.cpp:1359
+msgid "Andorran Peseta"
+msgstr "Andorran peseta"
+
+#: views/kmymoneyview.cpp:1360
+msgid "Angolan New Kwanza"
+msgstr "Angolan kwanza"
+
+#: views/kmymoneyview.cpp:1361
+msgid "Argentine Peso"
+msgstr "Argentiinan peso"
+
+#: views/kmymoneyview.cpp:1362
+msgid "Aruban Florin"
+msgstr "Aruban guldeni"
+
+#: views/kmymoneyview.cpp:1363
+msgid "Australian Dollar"
+msgstr "Austraalian dollari"
+
+#: views/kmymoneyview.cpp:1364
+msgid "Azerbaijani Manat"
+msgstr "Azerbaidžanin manat"
+
+#: views/kmymoneyview.cpp:1365
+msgid "Bahamian Dollar"
+msgstr "Bahaman dollari"
+
+#: views/kmymoneyview.cpp:1366
+msgid "Bahraini Dinar"
+msgstr "Bahrainin dinaari"
+
+#: views/kmymoneyview.cpp:1367
+msgid "Bangladeshi Taka"
+msgstr "Bangladeshin taka"
+
+#: views/kmymoneyview.cpp:1368
+msgid "Barbados Dollar"
+msgstr "Barbadoksen dollari"
+
+#: views/kmymoneyview.cpp:1369
+msgid "Belarussian Ruble"
+msgstr "Valko-Venäjän rupla"
+
+#: views/kmymoneyview.cpp:1370
+msgid "Belize Dollar"
+msgstr "Belizen dollari"
+
+#: views/kmymoneyview.cpp:1371
+msgid "Bermudian Dollar"
+msgstr "Bermudan dollari"
+
+#: views/kmymoneyview.cpp:1372
+msgid "Bhutan Ngultrum"
+msgstr "Bhutanin ngultrum"
+
+#: views/kmymoneyview.cpp:1373
+msgid "Bolivian Boliviano"
+msgstr "Bolivian boliviano"
+
+#: views/kmymoneyview.cpp:1374
+msgid "Bosnian Convertible Mark"
+msgstr "Bosnian vaihdettava markka"
+
+#: views/kmymoneyview.cpp:1375
+msgid "Botswana Pula"
+msgstr "Botswanan pula"
+
+#: views/kmymoneyview.cpp:1376
+msgid "Brazilian Real"
+msgstr "Brasilian real"
+
+#: views/kmymoneyview.cpp:1377
+msgid "British Pound"
+msgstr "Englannin punta"
+
+#: views/kmymoneyview.cpp:1378
+msgid "Brunei Dollar"
+msgstr "Brunein dollari"
+
+#: views/kmymoneyview.cpp:1379
+msgid "Bulgarian Lev"
+msgstr "Bulgarian leva"
+
+#: views/kmymoneyview.cpp:1380
+msgid "Burundi Franc"
+msgstr "Burundin frangi"
+
+#: views/kmymoneyview.cpp:1381
+msgid "CFA Franc BEAC"
+msgstr "CFA-frangi BEAC"
+
+#: views/kmymoneyview.cpp:1382
+msgid "CFA Franc BCEAO"
+msgstr "CFA-frangi BCEAO"
+
+#: views/kmymoneyview.cpp:1383
+msgid "CFP Franc Pacifique"
+msgstr "CFP-frangi"
+
+#: views/kmymoneyview.cpp:1384
+msgid "Cambodia Riel"
+msgstr "Kambodžan riel"
+
+#: views/kmymoneyview.cpp:1385
+msgid "Canadian Dollar"
+msgstr "Kanadan dollari"
+
+#: views/kmymoneyview.cpp:1386
+msgid "Cape Verde Escudo"
+msgstr "Kap Verden escudo"
+
+#: views/kmymoneyview.cpp:1387
+msgid "Cayman Islands Dollar"
+msgstr "Caymansaarten dollari"
+
+#: views/kmymoneyview.cpp:1388
+msgid "Chilean Peso"
+msgstr "Chilen peso"
+
+#: views/kmymoneyview.cpp:1389
+msgid "Chinese Yuan Renminbi"
+msgstr "Kiinan kansantasavallan Yuan Renminbi"
+
+#: views/kmymoneyview.cpp:1390
+msgid "Colombian Peso"
+msgstr "Kolumbian peso"
+
+#: views/kmymoneyview.cpp:1391
+msgid "Comoros Franc"
+msgstr "Komorien frangi"
+
+#: views/kmymoneyview.cpp:1392
+msgid "Costa Rican Colon"
+msgstr "Costa Rican colón"
+
+#: views/kmymoneyview.cpp:1393
+msgid "Croatian Kuna"
+msgstr "Kroatian kuna"
+
+#: views/kmymoneyview.cpp:1394
+msgid "Cuban Peso"
+msgstr "Kuuban peso"
+
+#: views/kmymoneyview.cpp:1395
+msgid "Czech Koruna"
+msgstr "Tšekin koruna"
+
+#: views/kmymoneyview.cpp:1396
+msgid "Danish Krone"
+msgstr "Tanskan kruunu"
+
+#: views/kmymoneyview.cpp:1397
+msgid "Djibouti Franc"
+msgstr "Djiboutin frangi"
+
+#: views/kmymoneyview.cpp:1398
+msgid "Dominican Peso"
+msgstr "Dominikaanisen tasavallan peso"
+
+#: views/kmymoneyview.cpp:1399
+msgid "East Caribbean Dollar"
+msgstr "Itä-Karibian dollari"
+
+#: views/kmymoneyview.cpp:1400
+msgid "Egyptian Pound"
+msgstr "Egyptin punta"
+
+#: views/kmymoneyview.cpp:1401
+msgid "El Salvador Colon"
+msgstr "El Salvadorin colón"
+
+#: views/kmymoneyview.cpp:1402
+msgid "Eritrean Nakfa"
+msgstr "Eritrean nakfa"
+
+#: views/kmymoneyview.cpp:1403
+msgid "Estonian Kroon"
+msgstr "Viron kruunu"
+
+#: views/kmymoneyview.cpp:1404
+msgid "Ethiopian Birr"
+msgstr "Etiopian birr"
+
+#: views/kmymoneyview.cpp:1405
+msgid "Euro"
+msgstr "Euro"
+
+#: views/kmymoneyview.cpp:1406
+msgid "Falkland Islands Pound"
+msgstr "Falklandinsaarten punta"
+
+#: views/kmymoneyview.cpp:1407
+msgid "Fiji Dollar"
+msgstr "Fidžin dollari"
+
+#: views/kmymoneyview.cpp:1408
+msgid "Gambian Dalasi"
+msgstr "Gambian dalasi"
+
+#: views/kmymoneyview.cpp:1409
+msgid "Georgian Lari"
+msgstr "Georgian lari"
+
+#: views/kmymoneyview.cpp:1410
+msgid "Ghanaian Cedi"
+msgstr "Ghanan cedi"
+
+#: views/kmymoneyview.cpp:1411
+msgid "Gibraltar Pound"
+msgstr "Gibraltarin punta"
+
+#: views/kmymoneyview.cpp:1412
+msgid "Guatemalan Quetzal"
+msgstr "Guatemalan quetzal"
+
+#: views/kmymoneyview.cpp:1413
+msgid "Guinea-Bissau Peso"
+msgstr "Guinea-Bissaun peso"
+
+#: views/kmymoneyview.cpp:1414
+msgid "Guyanan Dollar"
+msgstr "Guyanan dollari"
+
+#: views/kmymoneyview.cpp:1415
+msgid "Haitian Gourde"
+msgstr "Haitin gourde"
+
+#: views/kmymoneyview.cpp:1416
+msgid "Honduran Lempira"
+msgstr "Hondurasin lempira"
+
+#: views/kmymoneyview.cpp:1417
+msgid "Hong Kong Dollar"
+msgstr "Hongkongin dollari"
+
+#: views/kmymoneyview.cpp:1418
+msgid "Hungarian Forint"
+msgstr "Unkarin forintti"
+
+#: views/kmymoneyview.cpp:1419
+msgid "Iceland Krona"
+msgstr "Islannin kruunu"
+
+#: views/kmymoneyview.cpp:1420
+msgid "Indian Rupee"
+msgstr "Intian rupia"
+
+#: views/kmymoneyview.cpp:1421
+msgid "Indonesian Rupiah"
+msgstr "Indonesian rupia"
+
+#: views/kmymoneyview.cpp:1422
+msgid "Iranian Rial"
+msgstr "Iranin rial"
+
+#: views/kmymoneyview.cpp:1423
+msgid "Iraqi Dinar"
+msgstr "Irakin dinaari"
+
+#: views/kmymoneyview.cpp:1424
+msgid "Israeli New Shekel"
+msgstr "Uusi Israelin sekeli"
+
+#: views/kmymoneyview.cpp:1425
+msgid "Jamaican Dollar"
+msgstr "Jamaikan dollari"
+
+#: views/kmymoneyview.cpp:1426
+msgid "Japanese Yen"
+msgstr "Japanin jeni"
+
+#: views/kmymoneyview.cpp:1427
+msgid "Jordanian Dinar"
+msgstr "Jordanian dinaari"
+
+#: views/kmymoneyview.cpp:1428
+msgid "Kazakhstan Tenge"
+msgstr "Kazakstanin tenge"
+
+#: views/kmymoneyview.cpp:1429
+msgid "Kenyan Shilling"
+msgstr "Kenian šillinki"
+
+#: views/kmymoneyview.cpp:1430
+msgid "Kuwaiti Dinar"
+msgstr "Kuwaitin dinaari"
+
+#: views/kmymoneyview.cpp:1431
+msgid "Kyrgyzstan Som"
+msgstr "Kirgisian som"
+
+#: views/kmymoneyview.cpp:1432
+msgid "Laos Kip"
+msgstr "Laosin kip"
+
+#: views/kmymoneyview.cpp:1433
+msgid "Latvian Lats"
+msgstr "Latvian lati"
+
+#: views/kmymoneyview.cpp:1434
+msgid "Lebanese Pound"
+msgstr "Libyan dinaari"
+
+#: views/kmymoneyview.cpp:1435
+msgid "Lesotho Loti"
+msgstr "Lesothon loti"
+
+#: views/kmymoneyview.cpp:1436
+msgid "Liberian Dollar"
+msgstr "Liberian dollari"
+
+#: views/kmymoneyview.cpp:1437
+msgid "Libyan Dinar"
+msgstr "Libyan dinaari"
+
+#: views/kmymoneyview.cpp:1438
+msgid "Lithuanian Litas"
+msgstr "Liettuan liti"
+
+#: views/kmymoneyview.cpp:1439
+msgid "Macau Pataca"
+msgstr "Macaon pataca"
+
+#: views/kmymoneyview.cpp:1440
+msgid "Macedonian Denar"
+msgstr "Makedonian dinaari"
+
+#: views/kmymoneyview.cpp:1441
+msgid "Malagasy Franc"
+msgstr "Madagaskarin frangi"
+
+#: views/kmymoneyview.cpp:1442
+msgid "Malawi Kwacha"
+msgstr "Malawin kwacha"
+
+#: views/kmymoneyview.cpp:1443
+msgid "Malaysian Ringgit"
+msgstr "Malesian ringgit"
+
+#: views/kmymoneyview.cpp:1444
+msgid "Maldive Rufiyaa"
+msgstr "Malediivien rufiyaa"
+
+#: views/kmymoneyview.cpp:1445
+msgid "Mali Republic Franc"
+msgstr "Malien tasavallan frangi"
+
+#: views/kmymoneyview.cpp:1446
+msgid "Mauritanian Ouguiya"
+msgstr "Mauritanian ouguiya"
+
+#: views/kmymoneyview.cpp:1447
+msgid "Mauritius Rupee"
+msgstr "Mauritiuksen rupia"
+
+#: views/kmymoneyview.cpp:1448
+msgid "Mexican Peso"
+msgstr "Meksikon peso"
+
+#: views/kmymoneyview.cpp:1449
+msgid "Moldavian Leu"
+msgstr "Moldovan leu"
+
+#: views/kmymoneyview.cpp:1450
+msgid "Mongolian Tugrik"
+msgstr "Mongolian tugrik"
+
+#: views/kmymoneyview.cpp:1451
+msgid "Moroccan Dirham"
+msgstr "Marokon dirhami"
+
+#: views/kmymoneyview.cpp:1452
+msgid "Mozambique Metical"
+msgstr "Mosambikin metical"
+
+#: views/kmymoneyview.cpp:1453
+msgid "Myanmar Kyat"
+msgstr "Myanmarin kyat"
+
+#: views/kmymoneyview.cpp:1454
+msgid "Namibian Dollar"
+msgstr "Namibian dollari"
+
+#: views/kmymoneyview.cpp:1455
+msgid "Nepalese Rupee"
+msgstr "Nepalin rupia"
+
+#: views/kmymoneyview.cpp:1456
+msgid "New Zealand Dollar"
+msgstr "Uuden Seelannin dollari"
+
+#: views/kmymoneyview.cpp:1457
+msgid "Nicaraguan Cordoba Oro"
+msgstr "Nicaraguan córdoba oro"
+
+#: views/kmymoneyview.cpp:1458
+msgid "Nigerian Naira"
+msgstr "Nigerian naira"
+
+#: views/kmymoneyview.cpp:1459
+msgid "North Korean Won"
+msgstr "Pohjois-Korean won"
+
+#: views/kmymoneyview.cpp:1460
+msgid "Norwegian Kroner"
+msgstr "Norjan kruunu"
+
+#: views/kmymoneyview.cpp:1461
+msgid "Omani Rial"
+msgstr "Omanin rial"
+
+#: views/kmymoneyview.cpp:1462
+msgid "Pakistan Rupee"
+msgstr "Pakistanin rupia"
+
+#: views/kmymoneyview.cpp:1463
+msgid "Panamanian Balboa"
+msgstr "Panaman balboa"
+
+#: views/kmymoneyview.cpp:1464
+msgid "Papua New Guinea Kina"
+msgstr "Papua-Uuden-Guinean kina"
+
+#: views/kmymoneyview.cpp:1465
+msgid "Paraguay Guarani"
+msgstr "Paraguayn guarani"
+
+#: views/kmymoneyview.cpp:1466
+msgid "Peruvian Nuevo Sol"
+msgstr "Perun nuevo sol"
+
+#: views/kmymoneyview.cpp:1467
+msgid "Philippine Peso"
+msgstr "Filippiinien peso"
+
+#: views/kmymoneyview.cpp:1468
+msgid "Polish Zloty"
+msgstr "Puolan zloty"
+
+#: views/kmymoneyview.cpp:1469
+msgid "Qatari Rial"
+msgstr "Qatarin rial"
+
+#: views/kmymoneyview.cpp:1470
+msgid "Romanian Leu (new)"
+msgstr "Romanian leu (uusi)"
+
+#: views/kmymoneyview.cpp:1471
+msgid "Russian Ruble"
+msgstr "Venäjän rupla"
+
+#: views/kmymoneyview.cpp:1472
+msgid "Rwanda Franc"
+msgstr "Ruandan frangi"
+
+#: views/kmymoneyview.cpp:1473
+msgid "Samoan Tala"
+msgstr "Samoan tala"
+
+#: views/kmymoneyview.cpp:1474
+msgid "Sao Tome and Principe Dobra"
+msgstr "Sao Tomén ja Príncipen dobra"
+
+#: views/kmymoneyview.cpp:1475
+msgid "Saudi Riyal"
+msgstr "Saudi-Arabian rial"
+
+#: views/kmymoneyview.cpp:1476
+msgid "Seychelles Rupee"
+msgstr "Seychellien rupia"
+
+#: views/kmymoneyview.cpp:1477
+msgid "Sierra Leone Leone"
+msgstr "Sierra Leonen leone"
+
+#: views/kmymoneyview.cpp:1478
+msgid "Singapore Dollar"
+msgstr "Singaporen dollari"
+
+#: views/kmymoneyview.cpp:1481
+msgid "Solomon Islands Dollar"
+msgstr "Salomonsaarten dollari"
+
+#: views/kmymoneyview.cpp:1482
+msgid "Somali Shilling"
+msgstr "Somalian šillinki"
+
+#: views/kmymoneyview.cpp:1483
+msgid "South African Rand"
+msgstr "Etelä-Afrikan randi"
+
+#: views/kmymoneyview.cpp:1484
+msgid "South Korean Won"
+msgstr "Etelä-Korean won"
+
+#: views/kmymoneyview.cpp:1485
+msgid "Sri Lanka Rupee"
+msgstr "Sri Lankan rupia"
+
+#: views/kmymoneyview.cpp:1486
+msgid "St. Helena Pound"
+msgstr "Saint Helenan punta"
+
+#: views/kmymoneyview.cpp:1487
+msgid "Sudanese Dinar"
+msgstr "Sudanin dinaari"
+
+#: views/kmymoneyview.cpp:1488
+msgid "Suriname Guilder"
+msgstr "Surinamin guldeni"
+
+#: views/kmymoneyview.cpp:1489
+msgid "Swaziland Lilangeni"
+msgstr "Swazimaan lilangeni"
+
+#: views/kmymoneyview.cpp:1490
+msgid "Swedish Krona"
+msgstr "Ruotsin kruunu"
+
+#: views/kmymoneyview.cpp:1491
+msgid "Swiss Franc"
+msgstr "Sveitsin frangi"
+
+#: views/kmymoneyview.cpp:1492
+msgid "Syrian Pound"
+msgstr "Syyrian punta"
+
+#: views/kmymoneyview.cpp:1493
+msgid "Taiwan Dollar"
+msgstr "Taiwanin dollari"
+
+#: views/kmymoneyview.cpp:1494
+msgid "Tajikistan Somani"
+msgstr "Tadžikistanin somoni"
+
+#: views/kmymoneyview.cpp:1495
+msgid "Tanzanian Shilling"
+msgstr "Tansanian šillinki"
+
+#: views/kmymoneyview.cpp:1496
+msgid "Thai Baht"
+msgstr "Thaimaan baht"
+
+#: views/kmymoneyview.cpp:1497
+msgid "Tongan Pa'anga"
+msgstr "Tongan pa'angat"
+
+#: views/kmymoneyview.cpp:1498
+msgid "Trinidad and Tobago Dollar"
+msgstr "Trinidadin ja Tobagon dollari"
+
+#: views/kmymoneyview.cpp:1499
+msgid "Tunisian Dinar"
+msgstr "Tunisian dinaari"
+
+#: views/kmymoneyview.cpp:1500
+msgid "Turkish Lira (new)"
+msgstr "Turkin uusi liira"
+
+#: views/kmymoneyview.cpp:1501
+msgid "Turkmenistan Manat"
+msgstr "Turkmenistanin manat"
+
+#: views/kmymoneyview.cpp:1502
+msgid "US Dollar"
+msgstr "Yhdysvaltain dollari"
+
+#: views/kmymoneyview.cpp:1503
+msgid "Uganda Shilling"
+msgstr "Ugandan šillinki"
+
+#: views/kmymoneyview.cpp:1504
+msgid "Ukraine Hryvnia"
+msgstr "Ukrainan hryvnja"
+
+#: views/kmymoneyview.cpp:1505
+msgid "United Arab Emirates Dirham"
+msgstr "Yhdistyneiden Arabiemiirikuntien dirhami"
+
+#: views/kmymoneyview.cpp:1506
+msgid "Uruguayan Peso"
+msgstr "Uruguayn peso"
+
+#: views/kmymoneyview.cpp:1507
+msgid "Uzbekistani Sum"
+msgstr "Uzbekistanin sum"
+
+#: views/kmymoneyview.cpp:1508
+msgid "Vanuatu Vatu"
+msgstr "Vanuatun vatu"
+
+#: views/kmymoneyview.cpp:1509
+msgid "Venezuelan Bolivar"
+msgstr "Venezuelan bolivar"
+
+#: views/kmymoneyview.cpp:1510
+msgid "Vietnamese Dong"
+msgstr "Vietnamin đồng"
+
+#: views/kmymoneyview.cpp:1511
+msgid "Yugoslav Dinar"
+msgstr "Jugoslavian dinaari"
+
+#: views/kmymoneyview.cpp:1512
+msgid "Zambian Kwacha"
+msgstr "Sambian kwacha"
+
+#: views/kmymoneyview.cpp:1513
+msgid "Zimbabwe Dollar"
+msgstr "Zimbabwen dollari"
+
+#: views/kmymoneyview.cpp:1515
+msgid "Gold"
+msgstr "kulta"
+
+#: views/kmymoneyview.cpp:1516
+msgid "Palladium"
+msgstr "palladium"
+
+#: views/kmymoneyview.cpp:1517
+msgid "Platinum"
+msgstr "platina"
+
+#: views/kmymoneyview.cpp:1518
+msgid "Silver"
+msgstr "hopea"
+
+#: views/kmymoneyview.cpp:1551
+msgid "Austrian Schilling"
+msgstr "Itävallan šillinki"
+
+#: views/kmymoneyview.cpp:1552
+msgid "German Mark"
+msgstr "Saksan markka"
+
+#: views/kmymoneyview.cpp:1553
+msgid "French Franc"
+msgstr "Ranskan frangi"
+
+#: views/kmymoneyview.cpp:1554
+msgid "Italian Lira"
+msgstr "Italian liira"
+
+#: views/kmymoneyview.cpp:1555
+msgid "Spanish Peseta"
+msgstr "Espanjan peseta"
+
+#: views/kmymoneyview.cpp:1556
+msgid "Dutch Guilder"
+msgstr "Hollannin guldeni"
+
+#: views/kmymoneyview.cpp:1557
+msgid "Belgian Franc"
+msgstr "Belgian frangi"
+
+#: views/kmymoneyview.cpp:1558
+msgid "Luxembourg Franc"
+msgstr "Luxenburgin frangi"
+
+#: views/kmymoneyview.cpp:1559
+msgid "Portuguese Escudo"
+msgstr "Portugalin escudo"
+
+#: views/kmymoneyview.cpp:1560
+msgid "Irish Pound"
+msgstr "Irlannin punta"
+
+#: views/kmymoneyview.cpp:1561
+msgid "Finnish Markka"
+msgstr "Suomen markka"
+
+#: views/kmymoneyview.cpp:1562
+msgid "Greek Drachma"
+msgstr "Kreikan drakma"
+
+#: views/kmymoneyview.cpp:1564
+msgid "Romanian Leu"
+msgstr "Romanian leu"
+
+#: views/kmymoneyview.cpp:1566
+msgid "Russian Ruble (old)"
+msgstr "Venäjän rupla (vanha)"
+
+#: views/kmymoneyview.cpp:1568
+msgid "Slovenian Tolar"
+msgstr "Slovenian tolar"
+
+#: views/kmymoneyview.cpp:1571
+msgid "Turkish Lira"
+msgstr "Turkin liira"
+
+#: views/kmymoneyview.cpp:1574
+msgid "Maltese Lira"
+msgstr "Maltan liira"
+
+#: views/kmymoneyview.cpp:1575
+msgid "Cyprus Pound"
+msgstr "Kyproksen punta"
+
+#: views/kmymoneyview.cpp:1578
+msgid "Slovak Koruna"
+msgstr "Slovakian koruna"
+
+#: views/kmymoneyview.cpp:1888
+msgid ""
+"The account \"%1\" was previously created as loan account but some "
+"information is missing. The new loan wizard will be started to collect all "
+"relevant information. Please use a KMyMoney version >= 0.8.7 and < 0.9 to "
+"correct the problem."
+msgstr ""
+"%1-tili oli aiemmin luotu lainatilinä, mutta joitakin tietoja puuttuu vielä. "
+"Käynnistetään uusi ohjattu lainatoiminto keräämään kaikki tarvittavat "
+"tiedot. Käytä KMyMoneyn versiota joka on vähintään 0.8.7 mutta vanhempi kuin "
+"0.9 korjataksesi ongelma."
+
+#: views/kmymoneyview.cpp:1892
+msgid "Account problem"
+msgstr "Tiliongelma"
+
+#: views/kmymoneyview.cpp:1941
+msgid "Unable to add schedule: "
+msgstr "Ajoitettua tapahtumaa ei voitu lisätä: "
+
+#: views/kmymoneyview.cpp:1970
+msgid "Fix transactions"
+msgstr "Korjaa tapahtumat"
+
+#: views/kaccountsview.cpp:522 views/kinstitutionsview.cpp:300
+msgid "Net Worth: "
+msgstr "Nettovarallisuus: "
+
+#: dialogs/rc.cpp:108 dialogs/rc.cpp:163 dialogs/rc.cpp:250 dialogs/rc.cpp:755
+#: dialogs/rc.cpp:830 views/kinvestmentview.cpp:77 widgets/register.cpp:572
+msgid "Quantity"
+msgstr "Määrä"
+
+#: views/kscheduledlistitem.cpp:137
+msgid "Finished"
+msgstr "Valmis"
+
+#: views/kbudgetview.cpp:109
+msgid "Creates a new budget"
+msgstr "Luo uusi budjetti"
+
+#: views/kbudgetview.cpp:110
+msgid "Use this to create a new empty budget."
+msgstr "Käytä tätä uuden tyhjän budjetin luomiseen."
+
+#: views/kbudgetview.cpp:116
+msgid "Rename the current selected budget"
+msgstr "Uudelleennimeä valittu budjetti"
+
+#: views/kbudgetview.cpp:117
+msgid "Use this to start renaming the selected budget."
+msgstr "Käytä tätä valitun budjetin uudelleennimeämisen."
+
+#: views/kbudgetview.cpp:123
+msgid "Delete the current selected budget"
+msgstr "Poista valittu budjetti"
+
+#: views/kbudgetview.cpp:124
+msgid "Use this to delete the selected budget."
+msgstr "Käytä tätä poistaaksesi valittu budjetti."
+
+#: views/kbudgetview.cpp:130
+msgid "Accepts the entered values and stores the budget"
+msgstr "Hyväksyy syötetyt tiedot ja tallentaa budjetin"
+
+#: views/kbudgetview.cpp:131
+msgid "Use this to store the modified data."
+msgstr "Käytä tätä muokattujen tietojen tallentamiseen."
+
+#: views/kbudgetview.cpp:137
+msgid "Revert budget to last saved state"
+msgstr "Palauttaa budjetti edelliseen tallennettuun tilaan"
+
+#: views/kbudgetview.cpp:138
+msgid "Use this to discard the modified data."
+msgstr "Käytä tätä hylätäksesi muokatut tiedot."
+
+#: views/kbudgetview.cpp:489
+msgid "Do you want to save the changes for <b>%1</b>"
+msgstr "Haluatko tallentaa <b>%1</b>:n muutokset?"
+
+#: views/kbudgetview.cpp:610
+msgid ""
+"A budget with the name '%1' already exists. It is not advisable to have "
+"multiple budgets with the same identification name. Are you sure you would "
+"like to rename the budget?"
+msgstr ""
+"Budjetti '%1' on jo syötetty. Samalla nimellä esiintyvien budjettien käyttöä "
+"ei suositella. Uudelleennimetäänkö budjetti?"
+
+#: views/kbudgetview.cpp:635 views/kbudgetview.cpp:750
+msgid "Unable to modify budget"
+msgstr "Budjettia ei voitu muuttaa"
+
+#: views/kbudgetview.cpp:736
+msgid "Unable to reset budget"
+msgstr "Budjettia ei voitu nollata"
+
+#: views/rc.cpp:1
+msgid "List"
+msgstr "Lista"
+
+#: views/rc.cpp:2 views/rc.cpp:20
+msgid "Collapse all accounts in the list"
+msgstr "Supista tilit tilinäkymässä"
+
+#: views/rc.cpp:3 views/rc.cpp:21
+msgid "Expand all accounts in the list"
+msgstr "Laajenna kaikki tilit tilinäkymässä"
+
+#: views/rc.cpp:4
+msgid "Icons"
+msgstr "Kuvakkeet"
+
+#: views/rc.cpp:5 views/rc.cpp:22
+msgid "Note: Unused categories are not shown as selected by settings."
+msgstr ""
+"Huomautus. Käyttämättömiä kategorioita ei näytetä kuten asetuksissa on "
+"määritetty."
+
+#: views/rc.cpp:6 views/rc.cpp:23 views/rc.cpp:54
+msgid "Total Profits:"
+msgstr "Tuotot yhteensä:"
+
+#: views/rc.cpp:7
+msgid "Your budgets"
+msgstr "Budjetit"
+
+#: dialogs/rc.cpp:340 dialogs/rc.cpp:841 dialogs/settings/rc.cpp:124
+#: views/rc.cpp:8 widgets/rc.cpp:48 widgets/rc.cpp:150
+msgid "New"
+msgstr "Uusi"
+
+#: views/rc.cpp:9
+msgid "Ren"
+msgstr "Uudelleennimeä"
+
+#: views/rc.cpp:10
+msgid "Del"
+msgstr "Poista"
+
+#: views/rc.cpp:11
+msgid "Res"
+msgstr "Tyhjennä"
+
+#: views/rc.cpp:12
+msgid "Upd"
+msgstr "Päivitä"
+
+#: views/rc.cpp:15
+msgid "Hide unused budget categories"
+msgstr "Piilota käyttämättömät budjettikategoriat"
+
+#: views/rc.cpp:16
+msgid "Assignments"
+msgstr "Maksumääräykset"
+
+#: views/rc.cpp:19
+msgid "Include subaccounts"
+msgstr "Ota mukaan alitilit"
+
+#: dialogs/settings/rc.cpp:23 views/rc.cpp:24
+msgid "Forecast Settings"
+msgstr "Ennusteiden asetukset"
+
+#: views/rc.cpp:25
+msgid "Days to Forecast:"
+msgstr "Ennustepäivien lukumäärä:"
+
+#: views/rc.cpp:26
+msgid "Days of Accounts Cycle:"
+msgstr "Päiviä tilikierrossa:"
+
+#: dialogs/settings/rc.cpp:25 views/rc.cpp:27
+msgid "Day of Month to start Forecast:"
+msgstr "Ennusteen aloituspäivä kuukaudessa:"
+
+#: views/rc.cpp:28
+msgid "Historic Cycles:"
+msgstr "Historiakierto:"
+
+#: views/rc.cpp:29
+msgid "Chart Detail:"
+msgstr "Kaavion tiedot:"
+
+#: views/rc.cpp:30 widgets/kmymoneyaccountselector.cpp:64 widgets/rc.cpp:65
+msgid "All"
+msgstr "Kaikki"
+
+#: views/rc.cpp:31 widgets/rc.cpp:66
+msgid "Top-Level"
+msgstr "Ylätaso"
+
+#: views/rc.cpp:32 widgets/rc.cpp:67
+msgid "Groups"
+msgstr "Ryhmät"
+
+#: views/rc.cpp:33 widgets/rc.cpp:68
+msgid "Totals"
+msgstr "Kokonaissummat"
+
+#: views/rc.cpp:34
+msgid "<p>Choose what level of detail to show on the chart.</p>"
+msgstr "<p>Valitse kaavion yksityiskohtaisuuden taso.</p>"
+
+#: views/rc.cpp:35
+msgid "Current Forecast Method:"
+msgstr "Nykyinen ennustetapa:"
+
+#: views/rc.cpp:36
+msgid "method"
+msgstr "tapa"
+
+#: dialogs/settings/rc.cpp:32 views/rc.cpp:37
+msgid "History Forecast Method"
+msgstr "Historiaperustainen ennustetapa"
+
+#: dialogs/settings/rc.cpp:33 views/rc.cpp:38
+msgid "Simple Moving Average"
+msgstr "Yksinkertainen liukuva keskiarvo"
+
+#: dialogs/settings/rc.cpp:34 views/rc.cpp:39
+msgid "Weighted Moving Average"
+msgstr "Painotettu liukuva keskiarvo"
+
+#: dialogs/settings/rc.cpp:35 views/rc.cpp:40
+msgid "Linear Regression"
+msgstr "Lineaarinen regressio"
+
+#: dialogs/keditloanwizard.cpp:315 dialogs/rc.cpp:628 dialogs/rc.cpp:647
+#: views/rc.cpp:43
+msgid "Summary"
+msgstr "Yhteenveto"
+
+#: views/rc.cpp:45
+msgid "0 days"
+msgstr "0 päivää"
+
+#: views/rc.cpp:46
+msgid "30 days"
+msgstr "30 päivää"
+
+#: views/rc.cpp:47
+msgid "60 days"
+msgstr "60 päivää"
+
+#: views/rc.cpp:48
+msgid "90 days"
+msgstr "90 päivää"
+
+#: views/rc.cpp:49
+msgid "New Item"
+msgstr "Uusi kohta"
+
+#: views/rc.cpp:50 widgets/rc.cpp:64
+msgid "Detail"
+msgstr "Selite"
+
+#: views/rc.cpp:51
+msgid "Advanced"
+msgstr "Lisätiedot"
+
+#: views/rc.cpp:52
+msgid "Budget Forecast"
+msgstr "Budjettiennuste"
+
+#: views/rc.cpp:55
+msgid "Investment Summary"
+msgstr "Sijoitusten yhteenveto"
+
+#: views/rc.cpp:56
+msgid "Select Account:"
+msgstr "Valitse tili:"
+
+#: views/rc.cpp:57
+msgid ""
+"Summary of the equities contained in this account, showing your holdings and "
+"their most recent price."
+msgstr "Yhteenveto tilin pääomista, näytetään omistukset ja niiden uusin hinta."
+
+#: views/rc.cpp:60 widgets/register.cpp:564
+msgid "No."
+msgstr "Nro."
+
+#: views/rc.cpp:64
+msgid "Balance: "
+msgstr "Saldo: "
+
+#: views/rc.cpp:65
+msgid "Address"
+msgstr "Osoite"
+
+#: views/rc.cpp:66
+msgid "Payee Information"
+msgstr "Maksunsaajan tiedot"
+
+#: views/rc.cpp:67
+msgid "E-Mail:"
+msgstr "Sähköpostiosoite:"
+
+#: dialogs/rc.cpp:393 views/rc.cpp:69
+msgid "Telephone/Fax:"
+msgstr "Puhelinnumero / faksi:"
+
+#: views/rc.cpp:70
+msgid "Notes"
+msgstr "Huomautuksia"
+
+#: views/rc.cpp:71
+msgid "Address:"
+msgstr "Osoite:"
+
+#: views/rc.cpp:72
+msgid "Matching"
+msgstr "Täsmäys"
+
+#: views/rc.cpp:73
+msgid "Transaction Matching"
+msgstr "Tapahtuman täsmääminen"
+
+#: views/rc.cpp:74
+msgid "No matching"
+msgstr "Ei täsmäämistä"
+
+#: views/rc.cpp:75
+msgid "Match on Payee name"
+msgstr "Täsmää maksunsaajan nimeen"
+
+#: views/rc.cpp:76
+msgid "Match on a name listed below"
+msgstr "Täsmää alla listattuun nimeen"
+
+#: views/rc.cpp:77
+msgid "List of matching names"
+msgstr "Täsmäävien nimien lista"
+
+#: views/rc.cpp:78
+msgid ""
+"This list contains the names that will match this payee if a transaction is "
+"imported from an external source. Keep in mind, that you can specify regular "
+"expressions here."
+msgstr ""
+"Lista sisältää nimet jotka täsmäävät tähän maksunsaajaan jos tapahtuma on "
+"tuotu ulkoisesta lähteestä.Huomaa myös, että säännöllisiä lausekkeita "
+"voidaan käyttää."
+
+#: views/rc.cpp:79
+msgid "Ignore Case"
+msgstr "Ohita kirjainkoko"
+
+#: views/rc.cpp:80
+msgid "Default Account"
+msgstr "Oletustili"
+
+#: views/rc.cpp:81
+msgid ""
+"Use the default account for\n"
+"new transactions with this payee"
+msgstr ""
+"Käytä oletustiliä uusille tapahtumille tämän\n"
+"maksunsaajan kanssa"
+
+#: views/rc.cpp:82
+msgid "Default category:"
+msgstr "Oletuskategoria:"
+
+#: views/rc.cpp:83
+msgid "Suggest a category"
+msgstr "Ehdota kategoriaa"
+
+#: views/rc.cpp:85
+msgid "New Scheduled transaction..."
+msgstr "Uusi ajoitettu tapahtuma..."
+
+#: views/rc.cpp:86
+msgid "Filter Accounts"
+msgstr "Suodata tilit"
+
+#: views/rc.cpp:87
+msgid "List View"
+msgstr "Listanäkymä"
+
+#: views/rc.cpp:88
+msgid "Calendar View"
+msgstr "Kalenterinäkymä"
+
+#: views/kinstitutionsview.cpp:43
+msgid "Institution/Account"
+msgstr "Rahalaitos / tili"
+
+#: views/kinstitutionsview.cpp:157
+msgid "Accounts with no institution assigned"
+msgstr "Tilit ilman rahalaitosta"
+
+#: views/kscheduledview.cpp:70
+msgid "Type/Name"
+msgstr "Tyyppi / nimi"
+
+#: views/kscheduledview.cpp:75
+msgid "Frequency"
+msgstr "Toistuvuus"
+
+#: views/kscheduledview.cpp:157
+msgid "Unable to load accounts: "
+msgstr "Tilejä ei voitu ladata: "
+
+#: views/kscheduledview.cpp:171 views/kscheduledview.cpp:429
+#: views/kscheduledview.cpp:445 widgets/kmymoneyscheduledcalendar.cpp:46
+msgid "Bills"
+msgstr "Laskut"
+
+#: dialogs/rc.cpp:232 dialogs/rc.cpp:706 views/kscheduledview.cpp:172
+#: views/kscheduledview.cpp:431 views/kscheduledview.cpp:447
+#: widgets/kmymoneyscheduledcalendar.cpp:47
+msgid "Deposits"
+msgstr "Talletukset"
+
+#: views/kscheduledview.cpp:173 views/kscheduledview.cpp:435
+#: views/kscheduledview.cpp:451
+msgid "Loans"
+msgstr "Lainat"
+
+#: views/kscheduledview.cpp:357
+msgid "Error activating context menu"
+msgstr "Virhe aktivoitaessa kontekstivalikkoa"
+
+#: views/kscheduledview.cpp:385
+msgid "Error executing item"
+msgstr "Virhe suoritettaessa kohdetta"
+
+#: views/kscheduledview.cpp:419
+msgid "Unable to filter account"
+msgstr "Tiliä ei voitu suodattaa"
+
+#: views/kgloballedgerview.cpp:508
+msgid "Statement Details"
+msgstr "Tiliotteen tiedot"
+
+#: views/kgloballedgerview.cpp:512
+msgid "Statement Deposit Details"
+msgstr "Tiliotteen talletustiedot"
+
+#: views/kgloballedgerview.cpp:513
+msgid "Statement Payment Details"
+msgstr "Tiliotteen maksutiedot"
+
+#: views/kgloballedgerview.cpp:642
+msgid "%1 deposits (%3), %2 payments (%4)"
+msgstr "%1 talletusta (%3), %2 maksua (%4)"
+
+#: views/kgloballedgerview.cpp:649
+msgid "%1 payments (%2)"
+msgstr "%1 maksua (%2)"
+
+#: views/kgloballedgerview.cpp:653
+msgid "%1 deposits (%2)"
+msgstr "%1 talletusta (%2)"
+
+#: views/kgloballedgerview.cpp:721
+#, c-format
+msgid "Statement: %1"
+msgstr "Tiliote: %1"
+
+#: views/kgloballedgerview.cpp:722 views/kgloballedgerview.cpp:736
+#, c-format
+msgid "Cleared: %1"
+msgstr "Varmistettu: %1"
+
+#: views/kgloballedgerview.cpp:723
+#, c-format
+msgid "Difference: %1"
+msgstr "Erotus: %1"
+
+#: views/kgloballedgerview.cpp:730
+#, c-format
+msgid "Last reconciled: %1"
+msgstr "Viimeksi yhteensovitettu: %1"
+
+#: views/kgloballedgerview.cpp:732
+msgid "Never reconciled"
+msgstr "Ei aiemmin yhteensovitettu"
+
+#: views/kgloballedgerview.cpp:772
+msgid "Investment value: %1%2"
+msgstr "Sijoitusten arvo: %1%2"
+
+#: views/kgloballedgerview.cpp:1040
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to continue to edit the transactions anyway?"
+msgstr ""
+"Vähintään yksi jaottelu valituista tapahtumista on yhteensovitettu. Haluatko "
+"varmasti jatkaa tapahtumien muokkaamista?"
+
+#: views/kgloballedgerview.cpp:1051
+msgid ""
+"At least one split of the selected transactions has been frozen. Editing the "
+"transactions is therefore prohibited."
+msgstr ""
+"Vähintään yksi jaottelu valituista tapahtumista on jäädytetty. Tapahtumien "
+"muokkaaminen on siksi estetty."
+
+#: views/kgloballedgerview.cpp:1053
+msgid "Transaction already frozen"
+msgstr "Tapahtuma on jo jäädytetty"
+
+#: views/kgloballedgerview.cpp:1058
+msgid ""
+"At least one split of the selected transaction references an account that "
+"has been closed. Editing the transactions is therefore prohibited."
+msgstr ""
+"Vähintään yksi jaottelu valituista tapahtumista viittaa tiliin joka on jo "
+"suljettu. Tapahtumien muokkaaminen on siksi estetty."
+
+#: views/kgloballedgerview.cpp:1060
+msgid "Account closed"
+msgstr "Tili suljettu"
+
+#: views/kgloballedgerview.cpp:1349
+msgid "Cannot create transactions when no account is selected."
+msgstr "Tapahtumia ei voi luoda jos yhtään tiliä ei ole valittu."
+
+#: views/kgloballedgerview.cpp:1354
+msgid "Cannot create transactions in the context of a category."
+msgstr "Tapahtumia ei voi luoda tässä näkymässä."
+
+#: views/kgloballedgerview.cpp:1358
+msgid "Cannot create transactions in a closed account."
+msgstr "Suljettuun tiliin ei voi luoda tapahtumia."
+
+#: views/kgloballedgerview.cpp:1370
+msgid "Cannot process transaction with focus if it is not selected."
+msgstr "Kohdistettua tapahtumaa ei voida käsitellä jos se ei ole valittu."
+
+#: views/kgloballedgerview.cpp:1400
+msgid "Cannot edit transactions with frozen splits."
+msgstr "Tapahtumaa jossa on jäädytettyjä jaotteluja ei voida muokata."
+
+#: views/kgloballedgerview.cpp:1411
+msgid "Cannot edit transactions in the context of a category."
+msgstr "Tapahtumia ei voi luoda tässä näkymässä."
+
+#: views/kgloballedgerview.cpp:1430
+msgid "Cannot edit investment transactions and non-investment transactions together."
+msgstr "Sijoitustapahtumia ja ei-sijoitustapahtumia ei voida muokata yhdessä."
+
+#: views/kgloballedgerview.cpp:1438
+msgid "Cannot edit multiple split transactions at once."
+msgstr "Useita jaoteltuja tapahtumia ei voida muokata yhdellä kertaa."
+
+#: views/kgloballedgerview.cpp:1448
+msgid "Cannot edit investment transactions in the context of this account."
+msgstr "Sijoitustapahtumia ei voida muokata tämän tilin yhteydessä."
+
+#: views/kforecastview.cpp:164
+msgid "Scheduled"
+msgstr "Ajoitettu"
+
+#: views/kforecastview.cpp:169
+msgid "History"
+msgstr "Historia"
+
+#: views/kforecastview.cpp:296
+msgid "The balance of %2 is below the minimum balance %3 today."
+msgstr "Tilin %2 saldo on alle asetetun minisaldon %3."
+
+#: views/kforecastview.cpp:301 views/khomeview.cpp:1043
+msgid "The balance of %1 will drop below the minimum balance %2 in %3 days."
+msgstr "Tilin %1 saldo tulee tippumaan alle minimisaldon %2 %3 päivän kuluessa."
+
+#: views/kforecastview.cpp:318 views/khomeview.cpp:1059
+msgid "The balance of %1 is below %2 today."
+msgstr "Tilin %1 saldo on alle %2."
+
+#: views/kforecastview.cpp:323 views/khomeview.cpp:1064
+msgid "The balance of %1 is above %2 today."
+msgstr "Tilin %1 saldo yli %2."
+
+#: views/kforecastview.cpp:330 views/khomeview.cpp:1070
+msgid "The balance of %1 will drop below %2 in %3 days."
+msgstr "Tilin %1 saldo tulee tippumaan alle %2 %3 päivän kuluessa."
+
+#: views/kforecastview.cpp:335 views/khomeview.cpp:1075
+msgid "The balance of %1 will raise above %2 in %3 days."
+msgstr "Tilin %1 saldo tulee nousemaan yli %2 %3 päivässä."
+
+#: views/kforecastview.cpp:348
+msgid "The account %1 is decreasing %2 per cycle."
+msgstr "Tili %1 laskee %2 joka kierros."
+
+#: views/kforecastview.cpp:404 widgets/kmymoneyaccounttreeforecast.cpp:114
+#, c-format
+msgid "Min Bal %1"
+msgstr "Min saldo %1"
+
+#: views/kforecastview.cpp:406 widgets/kmymoneyaccounttreeforecast.cpp:116
+#, c-format
+msgid "Min Date %1"
+msgstr "Min pvm %1"
+
+#: views/kforecastview.cpp:409 widgets/kmymoneyaccounttreeforecast.cpp:119
+#, c-format
+msgid "Max Bal %1"
+msgstr "Max saldo %1"
+
+#: views/kforecastview.cpp:411 widgets/kmymoneyaccounttreeforecast.cpp:121
+#, c-format
+msgid "Max Date %1"
+msgstr "Max pvm %1"
+
+#: views/kforecastview.cpp:413 widgets/kmymoneyaccounttreeforecast.cpp:123
+msgid "Average"
+msgstr "Keskimäärin"
+
+#: views/kforecastview.cpp:649 views/khomeview.cpp:268 views/khomeview.cpp:275
+msgid "Networth Forecast"
+msgstr "Nettovarallisuusennuste"
+
+#: views/khomeview.cpp:203
+msgid "Your Financial Summary"
+msgstr "Taloustilanteen yhteenveto"
+
+#: views/khomeview.cpp:218
+msgid "Preferred Accounts"
+msgstr "Suosikkitilit"
+
+#: views/khomeview.cpp:225 views/khomeview.cpp:227
+msgid "Payment Accounts"
+msgstr "Maksutilit"
+
+#: views/khomeview.cpp:256
+msgid "Show KMyMoney welcome page"
+msgstr "Näytä KMyMoney-tervetuloasivu"
+
+#: views/khomeview.cpp:409
+msgid "Overdue payments"
+msgstr "Myöhässä olevat maksut"
+
+#: views/khomeview.cpp:424 views/khomeview.cpp:497 views/khomeview.cpp:531
+msgid "Balance after"
+msgstr "Jäljelle jäävä saldo"
+
+#: views/khomeview.cpp:482
+msgid "Today's payments"
+msgstr "Tämän päivän maksut"
+
+#: views/khomeview.cpp:516
+msgid "Future payments"
+msgstr "Lähitulevaisuuden maksut"
+
+#: views/khomeview.cpp:585
+msgid "Less..."
+msgstr "Vähemmän..."
+
+#: views/khomeview.cpp:587
+msgid "More..."
+msgstr "Enemmän..."
+
+#: views/khomeview.cpp:622
+msgid "Enter schedule"
+msgstr "Kirjaa ajoitettu tapahtuma"
+
+#: views/khomeview.cpp:624
+msgid "Skip schedule"
+msgstr "Ohita ajoitettu tapahtuma"
+
+#: views/khomeview.cpp:627
+msgid "Edit schedule"
+msgstr "Muokkaa ajoitettua tapahtumaa"
+
+#: views/khomeview.cpp:631
+msgid " (%1 payments)"
+msgstr " (%1 maksut)"
+
+#: views/khomeview.cpp:771
+msgid "To Minimum Balance / Maximum Credit"
+msgstr "Minimisaldoon / maksimiluottoon"
+
+#: views/khomeview.cpp:964
+msgid "%1 Day Forecast"
+msgstr "%1 päivän ennuste"
+
+#: views/khomeview.cpp:973 widgets/kmymoneyaccounttreeforecast.cpp:67
+msgid "%1 days"
+msgstr "%1 päivää"
+
+#: views/khomeview.cpp:1039
+msgid "The balance of %1 is below the minimum balance %2 today."
+msgstr "Tilin %1 saldo on alle minimisaldon %2."
+
+#: views/khomeview.cpp:1175
+msgid ""
+"Before KMyMoney can give you detailed information about your financial "
+"status, you need to create at least one account. Until then, KMyMoney shows "
+"the welcome page instead."
+msgstr ""
+"Ennen kuin KMyMoney voi esittää tietoja taloustilanteesta, tulee vähintään "
+"yksi tili luoda. Sitä ennen näytetään ainoastaan tervetuloasivu."
+
+#: views/khomeview.cpp:1258
+msgid "Assets and Liabilities Summary"
+msgstr "Omaisuus- ja velkatilien yhteenveto"
+
+#: views/khomeview.cpp:1262
+msgid "Asset Accounts"
+msgstr "Omaisuustilit"
+
+#: views/khomeview.cpp:1270
+msgid "Liability Accounts"
+msgstr "Velkatilit"
+
+#: views/khomeview.cpp:1348
+msgid "Total Assets"
+msgstr "Omaisuus yhteensä"
+
+#: views/khomeview.cpp:1354
+msgid "Total Liabilities"
+msgstr "Velat yhteensä"
+
+#: views/khomeview.cpp:1399
+msgid "Current Month Summary"
+msgstr "Kuluvan kuun yhteenveto"
+
+#: views/khomeview.cpp:1403 views/khomeview.cpp:1440
+msgid "Budgeted"
+msgstr "Budjetoitu"
+
+#: views/khomeview.cpp:1433
+msgid "Budget Overruns"
+msgstr "Budjettiylitykset"
+
+#: views/khomeview.cpp:1502
+msgid "No Budget Categories have been overrun"
+msgstr "Mikään kategoria ei ole ylittänyt budjettiaan"
+
+#: views/khomeview.cpp:1801
+msgid "Cash Flow Summary"
+msgstr "Käteisvirtojen yhteenveto"
+
+#: views/khomeview.cpp:1808
+msgid "Income and Expenses of Current Month"
+msgstr "Tulot ja menot tässä kuussa"
+
+#: views/khomeview.cpp:1816
+msgid "Scheduled Income"
+msgstr "Aikataulutetut tulot"
+
+#: views/khomeview.cpp:1819
+msgid "Expenses"
+msgstr "Menot"
+
+#: views/khomeview.cpp:1822
+msgid "Scheduled Expenses"
+msgstr "Aikataulutetut menot"
+
+#: views/khomeview.cpp:1850
+msgid "Liquid Assets and Liabilities"
+msgstr "Likvidit rahavarat ja velat"
+
+#: views/khomeview.cpp:1855
+msgid "Liquid Assets"
+msgstr "Likvidit rahavarat"
+
+#: views/khomeview.cpp:1858
+msgid "Transfers to Liquid Liabilities"
+msgstr "Siirrä likvideihin velkoihin"
+
+#: views/khomeview.cpp:1861
+msgid "Liquid Liabilities"
+msgstr "Likvidit velat"
+
+#: views/khomeview.cpp:1864
+msgid "Other Transfers"
+msgstr "Muut siirrot"
+
+#: views/khomeview.cpp:1908
+msgid "Cash Flow Status"
+msgstr "Käteisvirtatilanne"
+
+#: views/khomeview.cpp:1914
+msgid "Expected Liquid Assets"
+msgstr "Ennakoidut likvidit rahavarat"
+
+#: views/khomeview.cpp:1917
+msgid "Expected Liquid Liabilities"
+msgstr "Ennakoidut likvidit velat"
+
+#: views/khomeview.cpp:1920
+msgid "Expected Profit/Loss"
+msgstr "Ennakoidut tuotot / tappiot"
+
+#: plugins/ofximport/ofximporterplugin.cpp:64
+msgid "OFX..."
+msgstr "OFX..."
+
+#: plugins/ofximport/ofximporterplugin.cpp:69
+msgid "OFX import file selection"
+msgstr "Tiedoston valinta OFX-tuontiin"
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid ""
+"Unable to import %1 using the OFX importer plugin. This file is not the "
+"correct format."
+msgstr ""
+"%1 ei voitu tuoda OFX-tuontiliitännäistä käyttäen. Tiedosto ei ole sopivassa "
+"muodossa."
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid "Incorrect format"
+msgstr "Epäkelpo muoto"
+
+#: plugins/ofximport/ofximporterplugin.cpp:122
+msgid "Unable to parse file"
+msgstr "Tiedostoa ei voitu jäsennellä"
+
+#: plugins/ofximport/ofximporterplugin.cpp:576
+msgid "Online settings"
+msgstr "Online-asetukset"
+
+#: plugins/ofximport/ofximporterplugin.cpp:635
+#, c-format
+msgid "Error connecting to bank: %1"
+msgstr "Tapahtui virhe yhdistettäessä pankkiin: %1"
+
+#: plugins/ofximport/ofximporterplugin.cpp:646
+msgid ""
+"Unable to import %1 using the OFX importer plugin. The plugin returned the "
+"following error:<p>%2"
+msgstr ""
+"Ei voitu tuoda %1 OFX-tuontiliitännäistä käyttäen. Liitännäinen palautti "
+"seuraavan virheen:<p>%2"
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Importing process terminated unexpectedly."
+msgstr "Tuontiprosessi keskeytyi yllättäen."
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Failed to import all statements."
+msgstr "Tiliotteiden tuonti epäonnistui."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "The HTTP request failed."
+msgstr "HTTP-pyyntö epäonnistui."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "Failed"
+msgstr "Epäonnistui"
+
+#: plugins/ofximport/ofxpartner.cpp:410
+msgid "Cannot open file %1 for writing"
+msgstr "Tiedostoa %1 ei voida avata kirjoittamista varten"
+
+#: plugins/ofximport/ofxpartner.cpp:414
+msgid "OFX setup error"
+msgstr "OFX-asetusvirhe"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid "Loading banklist"
+msgstr "Pankkilistaa ladataan..."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid ""
+"Getting list of banks from http://moneycentral.msn.com/\n"
+"This may take some time depending on the available bandwidth."
+msgstr ""
+"Haetaan pankkilistaa osoitteesta http://moneycentral.msn.com/\n"
+"Tämä voi kestää jonkin aikaa yhteyden nopeudesta riippuen."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:155
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:199
+msgid "Supports online statements<br>"
+msgstr "Tukee online-tiliotteita<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:157
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:201
+msgid "Supports investments<br>"
+msgstr "Tukee sijoituksia<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:159
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:203
+msgid "Supports bill payment (but not supported by KMyMoney yet)<br>"
+msgstr "Tukee laskunmaksamista (jota KmyMoney ei vielä tue)<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:163
+msgid "Does not support online banking</p>"
+msgstr "Ei tue online-pankkitoimintoja</p>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:173
+msgid "Please choose a bank."
+msgstr "Valitse pankki."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:179
+msgid "Please fill all fields with values."
+msgstr "Täytä kaikki kentät."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:271
+msgid "No suitable accounts were found at this bank."
+msgstr "Sopivia tilejä ei löytynyt tästä pankista."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:283
+msgid "Please choose an account"
+msgstr "Valitse tili"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:386
+msgid "Server message: %1\n"
+msgstr "Palvelimen viesti: %1\n"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+msgid "Your bank returned warnings when signing on"
+msgstr "Pankki palautti varoituksen sisäänkirjautumisen yhteydessä"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+#, c-format
+msgid "WARNING %1"
+msgstr "VAROITUS %1"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+msgid "Error signing onto your bank"
+msgstr "Virhe sisäänkirjautumisessa pankkiin"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, c-format
+msgid "ERROR %1"
+msgstr "VIRHE %1"
+
+#: plugins/ofximport/dialogs/konlinebankingstatus.cpp:59
+msgid "Enabled & configured"
+msgstr "Otettu käyttöön & asetukset tehty"
+
+#: plugins/ofximport/dialogs/rc.cpp:1
+msgid "OFX Direct Connect"
+msgstr "OFX-suorayhteys"
+
+#: plugins/ofximport/dialogs/rc.cpp:2
+msgid "Contacting bank..."
+msgstr "Yhdistetään pankkiin..."
+
+#: plugins/ofximport/dialogs/rc.cpp:4
+msgid "Online Banking Account Setup"
+msgstr "Online-pankin tilin asetukset"
+
+#: plugins/ofximport/dialogs/rc.cpp:5
+msgid "Select Financial Institution"
+msgstr "Valitse rahalaitos"
+
+#: plugins/ofximport/dialogs/rc.cpp:6
+msgid "Please select your financial institution from the list below..."
+msgstr "Valitse rahalaitos alla olevalta listalta..."
+
+#: plugins/ofximport/dialogs/rc.cpp:7
+msgid "Automatic"
+msgstr "Automaattinen"
+
+#: plugins/ofximport/dialogs/rc.cpp:8
+msgid "Financial Institution"
+msgstr "Rahalaitos"
+
+#: plugins/ofximport/dialogs/rc.cpp:9
+msgid "Manual"
+msgstr "Käsintehtävä"
+
+#: plugins/ofximport/dialogs/rc.cpp:10
+msgid "Org"
+msgstr "Org"
+
+#: plugins/ofximport/dialogs/rc.cpp:11
+msgid "FID"
+msgstr "FID"
+
+#: dialogs/settings/rc.cpp:120 plugins/ofximport/dialogs/rc.cpp:12
+#: widgets/rc.cpp:46
+msgid "URL"
+msgstr "URL"
+
+#: plugins/ofximport/dialogs/rc.cpp:13
+msgid "Enter Login Details"
+msgstr "Syötä kirjautumistiedot"
+
+#: plugins/ofximport/dialogs/rc.cpp:14
+msgid ""
+"Please enter the username and password you use to log into this bank for "
+"online banking. Please note that many banks require a separate signup, and "
+"assign a separate PIN or password just for online banking from home."
+msgstr ""
+"Syötä käyttäjätunnus ja salasana joita käytetään tämän pankin online-"
+"toimintoihin kirjautumiseen. Huom. monet pankit käyttävät erillistä "
+"tunnistetta tai salasanaa online-pankkitoiminnoille."
+
+#: plugins/ofximport/dialogs/rc.cpp:15
+msgid "Connection Details"
+msgstr "Yhteystiedot"
+
+#: plugins/ofximport/dialogs/rc.cpp:16
+msgid "Username"
+msgstr "Käyttäjätunnus"
+
+#: plugins/ofximport/dialogs/rc.cpp:17 plugins/ofximport/dialogs/rc.cpp:36
+msgid "Header Version"
+msgstr "Otsikkotietojen versio"
+
+#: plugins/ofximport/dialogs/rc.cpp:18 plugins/ofximport/dialogs/rc.cpp:37
+msgid "Identify as"
+msgstr "Tunnistu"
+
+#: dialogs/rc.cpp:742 plugins/ofximport/dialogs/rc.cpp:19
+msgid "Password"
+msgstr "Salasana"
+
+#: plugins/ofximport/dialogs/rc.cpp:20
+msgid "Select Account"
+msgstr "Valitse tili"
+
+#: plugins/ofximport/dialogs/rc.cpp:21
+msgid ""
+"Please select the account from your financial institution from the list "
+"below which matches this account."
+msgstr "Valitse rahalaitoksesi tileistä tätä tiliä vastaava tili."
+
+#: plugins/ofximport/dialogs/rc.cpp:24
+msgid "Bank"
+msgstr "Pankki"
+
+#: plugins/ofximport/dialogs/rc.cpp:25
+msgid "Branch"
+msgstr "Haarakonttori"
+
+#: plugins/ofximport/dialogs/rc.cpp:26
+msgid "WizardPage"
+msgstr "Ohjatun toiminnon sivu"
+
+#: plugins/ofximport/dialogs/rc.cpp:27
+msgid ""
+"Congratulations! You have successfully set up your bank for online banking "
+"via OFX."
+msgstr "Onnittelut! Online-pankkitoiminnot on asetettu onnistuneesti OFX:n kautta."
+
+#: plugins/ofximport/dialogs/rc.cpp:28
+msgid "Account Details"
+msgstr "Tilin tiedot"
+
+#: plugins/ofximport/dialogs/rc.cpp:29 plugins/ofximport/dialogs/rc.cpp:31
+msgid "&lt;Not configured&gt;"
+msgstr "&lt;Asettamaton&gt;"
+
+#: plugins/ofximport/dialogs/rc.cpp:30
+msgid "BANK/BROKER:"
+msgstr "PANKKI / MAKSUNVÄLITTÄJÄ:"
+
+#: plugins/ofximport/dialogs/rc.cpp:32
+msgid "Unavailable"
+msgstr "Ei ole käytettävissä"
+
+#: plugins/ofximport/dialogs/rc.cpp:33
+msgid "ACCOUNT:"
+msgstr "TILI:"
+
+#: plugins/ofximport/dialogs/rc.cpp:34
+msgid "STATUS:"
+msgstr "TILA:"
+
+#: plugins/ofximport/dialogs/rc.cpp:35
+msgid "OFX Details"
+msgstr "OFX-tiedot"
+
+#: plugins/ofximport/dialogs/rc.cpp:38
+msgid "Start date of import"
+msgstr "Tuonnin alkupäivä"
+
+#: plugins/ofximport/dialogs/rc.cpp:39
+msgid "To&day minus"
+msgstr "Tämä &päivä -"
+
+#: plugins/ofximport/dialogs/rc.cpp:40
+msgid "days"
+msgstr "päivät"
+
+#: plugins/ofximport/dialogs/rc.cpp:41
+msgid "Last &update"
+msgstr "&Viimeksi päivitetty"
+
+#: plugins/ofximport/dialogs/rc.cpp:42
+msgid "Pi&ck date"
+msgstr "N&ostopäivä"
+
+#: plugins/ofximport/dialogs/rc.cpp:43
+msgid "Name is derived from"
+msgstr "Nimi on peritty"
+
+#: plugins/ofximport/dialogs/rc.cpp:44
+msgid "P&AYEEID"
+msgstr "&MAKSUNSAAJAN TUNNISTE"
+
+#: plugins/ofximport/dialogs/rc.cpp:45
+msgid "&NAME"
+msgstr "&NIMI"
+
+#: plugins/ofximport/dialogs/rc.cpp:46
+msgid "field if both are present in download"
+msgstr "kenttä jos molemmat ovat ladattavissa"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:81
+msgid "Quicken Windows 2003"
+msgstr "Quicken Windows 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:82
+msgid "Quicken Windows 2004"
+msgstr "Quicken Windows 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:83
+msgid "Quicken Windows 2005"
+msgstr "Quicken Windows 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:84
+msgid "Quicken Windows 2006"
+msgstr "Quicken Windows 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:85
+msgid "Quicken Windows 2007"
+msgstr "Quicken Windows 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:86
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:111
+msgid "Quicken Windows 2008"
+msgstr "Quicken Windows 2008"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:89
+msgid "MS-Money 2003"
+msgstr "MS-Money 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:90
+msgid "MS-Money 2004"
+msgstr "MS-Money 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:91
+msgid "MS-Money 2005"
+msgstr "MS-Money 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:92
+msgid "MS-Money 2006"
+msgstr "MS-Money 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:93
+msgid "MS-Money 2007"
+msgstr "MS-Money 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:94
+msgid "MS-Money Plus"
+msgstr "MS-Money Plus"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:91
+msgid "Report Configuration"
+msgstr "Raporttiasetukset"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:117
+#: dialogs/kreportconfigurationfilterdlg.cpp:135
+msgid "Rows/Columns"
+msgstr "Rivit / sarakkeet"
+
+#: dialogs/investtransactioneditor.cpp:203
+#: dialogs/investtransactioneditor.cpp:537
+#: dialogs/investtransactioneditor.cpp:579 dialogs/rc.cpp:103
+#: dialogs/rc.cpp:158 dialogs/rc.cpp:245 dialogs/rc.cpp:750 dialogs/rc.cpp:794
+#: widgets/kmymoneyaccountselector.cpp:182 widgets/register.cpp:64
+#: widgets/register.cpp:567 widgets/transaction.cpp:1500
+msgid "Security"
+msgstr "Arvopaperi"
+
+#: dialogs/investtransactioneditor.cpp:211
+msgid "Asset account"
+msgstr "Omaisuustili"
+
+#: dialogs/investtransactioneditor.cpp:1073
+msgid "Price/Share"
+msgstr "Hinta / osake"
+
+#: dialogs/kmergetransactionsdlg.cpp:39
+msgid "Merge Transactions"
+msgstr "Yhdistä tapahtumat"
+
+#: dialogs/kmergetransactionsdlg.cpp:40
+msgid "Are you sure you wish to merge these transactions?"
+msgstr "Yhdistetäänkö varmasti nämä tapahtumat?"
+
+#: dialogs/kstartdlg.cpp:59
+msgid "Start Dialog"
+msgstr "Aloitusikkuna"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Templates"
+msgstr "Tilipohjat"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Select templates"
+msgstr "Valitse tilipohjat"
+
+#: dialogs/kstartdlg.cpp:80 dialogs/kstartdlg.cpp:119
+msgid "New KMyMoney document"
+msgstr "Uusi KMyMoney-dokumentti"
+
+#: dialogs/kstartdlg.cpp:90
+msgid "Open a KMyMoney document"
+msgstr "Avaa KMyMoney-dokumentti"
+
+#: dialogs/kstartdlg.cpp:96
+msgid ""
+"%1|KMyMoney files (*.kmy)\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|KMyMoney-tiedostot (*.kmy)\n"
+"%2|Kaikki tiedostot (*.*)"
+
+#: dialogs/kstartdlg.cpp:102
+msgid "Recent Files"
+msgstr "Viimeaikaiset tiedostot"
+
+#: dialogs/kstartdlg.cpp:217
+msgid "Blank Document"
+msgstr "Tyhjä dokumentti"
+
+#: dialogs/knewbudgetdlg.cpp:71
+msgid "Please specify a budget name"
+msgstr "Anna budjetin nimi"
+
+#: dialogs/kgncpricesourcedlg.cpp:48
+#, c-format
+msgid "Investment: %1"
+msgstr "Sijoitus: %1"
+
+#: dialogs/kgncpricesourcedlg.cpp:49
+#, c-format
+msgid "Quote source: %1"
+msgstr "Noteerauksen lähde: %1"
+
+#: dialogs/kmymoneypricedlg.cpp:62 dialogs/ksecuritylisteditor.cpp:69
+msgid "Delete this entry"
+msgstr "Poista tämä kohta"
+
+#: dialogs/ksecuritylisteditor.cpp:70
+msgid "Remove this security item from the file"
+msgstr "Poista tämä arvopaperi tiedostosta"
+
+#: dialogs/ksecuritylisteditor.cpp:73
+msgid "&Add"
+msgstr "&Lisää"
+
+#: dialogs/kmymoneypricedlg.cpp:68 dialogs/ksecuritylisteditor.cpp:75
+msgid "Add a new entry"
+msgstr "Lisää uusi kohta"
+
+#: dialogs/ksecuritylisteditor.cpp:76
+msgid "Create a new security entry."
+msgstr "Lisää uusi arvopaperikohta."
+
+#: dialogs/keditequityentrydlg.cpp:77 dialogs/kmymoneypricedlg.cpp:74
+#: dialogs/ksecuritylisteditor.cpp:81
+msgid "Modify the selected entry"
+msgstr "Muokkaa valittua kohtaa"
+
+#: dialogs/ksecuritylisteditor.cpp:82
+msgid "Change the security information of the selected entry."
+msgstr "Vaihda arvopaperin tietoja valitusta kohdasta"
+
+#: dialogs/kmymoneypricedlg.cpp:80 dialogs/ksecuritylisteditor.cpp:87
+msgid "Close the dialog"
+msgstr "Sulje tämä ikkuna"
+
+#: dialogs/kmymoneypricedlg.cpp:81 dialogs/ksecuritylisteditor.cpp:88
+msgid "Use this to close the dialog and return to the application."
+msgstr "Sulje ikkuna ja palaa sovellukseen."
+
+#: dialogs/ksecuritylisteditor.cpp:184
+msgid ""
+"Do you really want to remove the currency <b>%1</b> from the file?</"
+"p><i>Note: It is currently not supported to add currencies.</i>"
+msgstr ""
+"Haluatko varmasti poistaa valuutan <b>%1</b> tiedostosta?</p><i> Huomautus: "
+"valuuttojen lisääminen myöhemmin ei ole toistaiseksi mahdollista.</i>"
+
+#: dialogs/ksecuritylisteditor.cpp:187
+msgid "Do you really want to remove the %1 <b>%2</b> from the file?"
+msgstr "Haluatko varmasti poistaa %1 <b>%2</b> tiedostosta?"
+
+#: dialogs/ksecuritylisteditor.cpp:190
+msgid "Delete security"
+msgstr "Poista arvopaperi"
+
+#: dialogs/kmymoneypricedlg.cpp:63
+msgid "Remove this price item from the file"
+msgstr "Poista tämä hintatieto tiedostosta"
+
+#: dialogs/kmymoneypricedlg.cpp:66 dialogs/mymoneyqifprofileeditor.cpp:94
+msgid "&New"
+msgstr "&Uusi"
+
+#: dialogs/kmymoneypricedlg.cpp:69
+msgid "Create a new price entry."
+msgstr "Luo uusi hintatieto."
+
+#: dialogs/kmymoneypricedlg.cpp:75
+msgid "Change the details of selected price information."
+msgstr "Muuta tietoja valitulle hintatiedolle."
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Do you really want to delete the selected price entry?"
+msgstr "Poistetaanko varmasti valittu hintatieto?"
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Delete price information"
+msgstr "Poista hintatieto"
+
+#: dialogs/kchooseimportexportdlg.cpp:46
+msgid ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Valitse suoritettavan tuonnin tyyppi. Eri tuontityypeistä on ikkunan alla\n"
+"lyhyt selitys joka päivittyy sen mukaan mikä kohde valintalaatikosta on\n"
+"valittuna.\n"
+"\n"
+"Valinnan jälkeen jatka painamalla OK-painiketta."
+
+#: dialogs/kchooseimportexportdlg.cpp:50 dialogs/rc.cpp:22
+msgid "Choose import type:"
+msgstr "Valitse tuontityyppi:"
+
+#: dialogs/kchooseimportexportdlg.cpp:51 dialogs/rc.cpp:20
+msgid "Choose Import Type Dialog"
+msgstr "Valitse tuontityyppi -ikkuna"
+
+#: dialogs/kchooseimportexportdlg.cpp:53
+msgid ""
+"Please choose the type of export you wish to perform. A simple explanation\n"
+"of the export type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an export type please press the OK button."
+msgstr ""
+"Valitse suoritettavan viennin tyyppi. Eri vientityypeistä on ikkunan alla\n"
+"lyhyt selitys joka päivittyy sen mukaan mikä kohde valintalaatikosta on\n"
+"valittuna\n"
+"\n"
+"Valinnan jälkeen jatka painamalla OK-painiketta."
+
+#: dialogs/kchooseimportexportdlg.cpp:57
+msgid "Choose export type:"
+msgstr "Valitse vientityyppi:"
+
+#: dialogs/kchooseimportexportdlg.cpp:58
+msgid "Choose Export Type Dialog"
+msgstr "Valitse vientityyppi -ikkuna"
+
+#: dialogs/kchooseimportexportdlg.cpp:78
+msgid ""
+"QIF files are created by the popular accounting program Quicken.\n"
+"Another dialog will appear, if you choose this type, asking for further\n"
+"information relevant to the Quicken format."
+msgstr ""
+"QIF-tiedostot ovat suositun tiliöintiohjelma Quickenin käyttämiä.\n"
+"Jos tämä tyyppi valitaan, toisessa ikkunassa tullaan kysymään\n"
+"tarpeellisia lisätietoja Quicken-muodosta."
+
+#: dialogs/kchooseimportexportdlg.cpp:82
+msgid ""
+"The CSV type uses a comma delimeted text file that can be used by\n"
+"most popular spreadsheet programs available for Linux and other operating\n"
+"systems."
+msgstr ""
+"CSV-tiedostot ovat pilkulla eroteltuja tekstitiedostoja joita voidaan "
+"käyttää\n"
+"lähes kaikilla taulukkolaskentaohjelmilla sekä Linuxissa että muissa\n"
+"käyttöjärjestelmissä."
+
+#: dialogs/kequitypriceupdatedlg.cpp:222
+msgid "%1 units in %2"
+msgstr "%1 yksikköä %2:ssa"
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid ""
+"Failed to retrieve an exchange rate for %1 from %2. It will be skipped this "
+"time."
+msgstr ""
+"Muuntokurssia ei voitu hakea %1:lle %2:sta. Kurssipäivitys ohitetaan tällä "
+"kertaa."
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid "Price Update Failed"
+msgstr "Hintatietojen päivitys epäonnistui"
+
+#: dialogs/kequitypriceupdatedlg.cpp:427
+msgid ""
+"Failed to retrieve a quote for %1 from %2. Press <b>No</b> to remove the "
+"online price source from this security permanently, <b>Yes</b> to continue "
+"updating this security during future price updates or <b>Cancel</b> to stop "
+"the current update operation."
+msgstr ""
+"Noteerausta %1:lle ei voitua hakea %2:sta. Paina <b>Ei</b> poistaaksesi "
+"online-hintalähteen pysyvästi tälle arvopaperille. Paina <b>Kyllä</b> "
+"jatkaaksesi tämän arvopaperin päivittämistä tätä online-noteerausta "
+"käyttäen, tai paina <b>Peruuta</b> keskeyttääksesi päivittämisen."
+
+#: dialogs/kequitypriceupdatedlg.cpp:427 dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Price Update Failed"
+msgstr "Hintatietojen päivitys epäonnistui"
+
+#: dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Cannot update security <b>%1</b>: %2"
+msgstr "Arvopaperia <b>%1</b> ei voitu päivittää: %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:528
+msgid "Price for %1 updated (id %2)"
+msgstr "Hinta %1:lle päivitetty (tunniste %2)"
+
+#: dialogs/kequitypriceupdatedlg.cpp:534
+msgid "Received an invalid price for %1, unable to update."
+msgstr "Vastaanotettiin epäkelpo hinta %1:lle, hintaa ei voitu päivittää."
+
+#: dialogs/kequitypriceupdatedlg.cpp:554
+msgid ""
+"Received a price for %1 (id %2), but this symbol is not on the list! "
+"Aborting entire update."
+msgstr ""
+"Hinta vastaanotettiin %1:lle (tunniste %2), mutta valuuttaa ei ole "
+"määritelty listalle. Päivitys keskeytetään."
+
+#: dialogs/transactioneditor.cpp:222
+msgid ""
+"The number <b>%1</b> has already been used in account <b>%2</b>. Do you want "
+"to replace it with the next available number?"
+msgstr ""
+"Numero <b>%1</b> on jo käytössä tilillä <b>%2</b>. Korvataanko se "
+"seuraavalla vapaalla numerolla?"
+
+#: dialogs/transactioneditor.cpp:222
+msgid "Duplicate number"
+msgstr "Numero on jo käytössä"
+
+#: dialogs/transactioneditor.cpp:303
+msgid ""
+"This transaction has more than two splits and is based on a different "
+"currency (%1). Using this account to modify the transaction is currently not "
+"very well supported by KMyMoney and may result in false results."
+msgstr ""
+"Tapahtumassa on enemmän kuin kaksi jaottelua ja tapahtuma perustuu toiseen "
+"valuuttaan (%1). Tämän tilin käyttäminen tapahtuman muokkaamiseen ei ole "
+"tällä hetkellä täysin tuettua, joten sen käyttäminen voi johtaa "
+"virheellisiin tuloksiin."
+
+#: dialogs/transactioneditor.cpp:305
+msgid ""
+"KMyMoney was not able to find a more appropriate account to edit this "
+"transaction. Nevertheless, you are allowed to modify the transaction. If you "
+"don't want to edit this transaction, please cancel from editing next."
+msgstr ""
+"Tapahtuman muokkaamiselle ei löytynyt sopivampaa tiliä. Tapahtuman "
+"muokkaaminen on sallittua siitä huolimatta. Jos et halua muokata tapahtumaa, "
+"keskeytä muokkaaminen seuraavasta."
+
+#: dialogs/transactioneditor.cpp:307
+msgid ""
+"Using e.g. <b>%1</b> to edit this transaction is a better choice. "
+"Nevertheless, you are allowed to modify the transaction. If you want to use "
+"the suggested account instead, please cancel from editing next and change "
+"the view to the suggested account."
+msgstr ""
+"Tapahtumaa olisi parempi muokata <b>%1</b>:tä käyttäen. Tapahtuman "
+"muokkaaminen on silti sallittua. Jos halutaan käyttää ehdotettua tiliä sen "
+"sijaan, peruuta tämän muokkaaminen ja vaihda näkymä ehdotettuun tiliin."
+
+#: dialogs/transactioneditor.cpp:410
+msgid ""
+"This transaction has more than two splits and is originally based on a "
+"different currency (%1). Using this account to modify the transaction may "
+"result in rounding errors. Do you want to continue?"
+msgstr ""
+"Tapahtumassa on enemmän kuin kaksi jaottelua ja se alunperin perustuu eri "
+"valuuttaan (%1). Tilin käyttäminen tapahtuman muokkaamiseen voi johtaa "
+"pyöristysvirheisiin. Jatketaanko?"
+
+#: dialogs/transactioneditor.cpp:412
+msgid ""
+"At least one of the selected transactions has more than two splits and is "
+"originally based on a different currency (%1). Using this account to modify "
+"the transactions may result in rounding errors. Do you want to continue?"
+msgstr ""
+"Tapahtumassa on enemmän kuin kaksi jaottelua ja se alunperin perustuu eri "
+"valuuttaan (%1). Tilin käyttäminen tapahtuman muokkaamiseen voi johtaa "
+"pyöristysvirheisiin. Jatketaanko?"
+
+#: dialogs/transactioneditor.cpp:557
+msgid "Storing transactions"
+msgstr "Tapahtuminen tallennus"
+
+#: dialogs/transactioneditor.cpp:603 widgets/kmymoneybriefschedule.cpp:65
+msgid "&Enter"
+msgstr "&Kirjaa"
+
+#: dialogs/transactioneditor.cpp:606
+msgid "Use this to enter the transaction into the ledger."
+msgstr "Käytä tätä syöttääksesi tapahtuma tapahtumiin."
+
+#: dialogs/transactioneditor.cpp:607
+msgid "&Schedule"
+msgstr "&Ajoitettu tapahtuma"
+
+#: dialogs/transactioneditor.cpp:609
+msgid "Accepts the entered data and stores it as schedule"
+msgstr "Hyväksyy syötetyt tiedot ja tallentaa ne ajoitetuksi tapahtumaksi"
+
+#: dialogs/transactioneditor.cpp:610
+msgid "Use this to schedule the transaction for later entry into the ledger."
+msgstr "Käytä tätä ajoittaaksesi tapahtuma myöhemmäksi kohdaksi tapahtumiin."
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"The transaction you are about to enter has a post date in the future.<br/"
+"><br/>Do you want to enter it in the ledger or add it to the schedules?"
+msgstr ""
+"Syötetyn tapahtuman päivämäärä on tulevaisuudessa.<br/><br/>Kirjataanko se "
+"tapahtumiin vai tehdäänkö siitä ajoitettu tapahtuma?"
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"_: Dialog caption for 'Enter or schedule' dialog\n"
+"Enter or schedule?"
+msgstr "Kirjataanko, vai tehdäänkö ajoitettu tapahtuma?"
+
+#: dialogs/transactioneditor.cpp:671
+msgid "The balance of account <b>%1</b> dropped below the warning balance of %2."
+msgstr "Tilin <b>%1</b> saldo on tipahtanut alle varoitusrajan %2."
+
+#: dialogs/transactioneditor.cpp:677
+msgid "The balance of account <b>%1</b> dropped below the minimum balance of %2."
+msgstr "Tilin <b>%1</b> saldo on tipahtanut alle minimirajan %2."
+
+#: dialogs/transactioneditor.cpp:683
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit warning "
+"limit of %2."
+msgstr ""
+"Tilin <b>%1</b> saldo on on tipahtanut alle varoitettavan maksimiluottorajan "
+"%2."
+
+#: dialogs/transactioneditor.cpp:689
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit limit of %"
+"2."
+msgstr "Tilin <b>%1</b> saldo on tipahtanut alle maksimiluottorajan %2."
+
+#: dialogs/transactioneditor.cpp:740
+msgid "Payer/Receiver"
+msgstr "Maksunsaaja / vastaanottaja"
+
+#: dialogs/transactioneditor.cpp:748
+msgid "Category/Account"
+msgstr "Kategoria / tili"
+
+#: dialogs/transactioneditor.cpp:980 dialogs/transactioneditor.cpp:1016
+#: dialogs/transactioneditor.cpp:1378 dialogs/transactioneditor.cpp:1399
+#: dialogs/transactioneditor.cpp:1422 dialogs/transactioneditor.cpp:1443
+#: dialogs/transactioneditor.cpp:1505 dialogs/transactioneditor.cpp:1509
+#: widgets/transaction.cpp:902
+msgid "Transfer from"
+msgstr "Siirrä tililtä"
+
+#: dialogs/transactioneditor.cpp:982 dialogs/transactioneditor.cpp:1018
+#: dialogs/transactioneditor.cpp:1401 dialogs/transactioneditor.cpp:1445
+#: dialogs/transactioneditor.cpp:1506 widgets/transaction.cpp:902
+msgid "Transfer to"
+msgstr "Siirrä tilille"
+
+#: dialogs/transactioneditor.cpp:1259
+msgid "Select autofill transaction"
+msgstr "Valitse täytä automaattisesti -tapahtuma"
+
+#: dialogs/transactionmatcher.cpp:77
+msgid "First transaction does not match requirement for matching"
+msgstr "Ensimmäinen tapahtuma ei sovi täsmäämisen vaatimuksiin."
+
+#: dialogs/transactionmatcher.cpp:79
+msgid "Second transaction does not match requirement for matching"
+msgstr "Toinen tapahtuma ei sovi täsmäämisen vaatimuksiin."
+
+#: dialogs/transactionmatcher.cpp:83 dialogs/transactionmatcher.cpp:133
+msgid "Splits for %1 have conflicting values (%2,%3)"
+msgstr "%1:n jaotteluissa on ristiriitaisia arvoja (%2, %3)"
+
+#: dialogs/transactionmatcher.cpp:96 dialogs/transactionmatcher.cpp:149
+msgid ""
+"Both of these transactions have been imported into %1. Therefore they "
+"cannot be matched. Matching works with one imported transaction and one non-"
+"imported transaction."
+msgstr ""
+"Molemmat näistä tapahtumista on tuotu %1:een. Tämän vuoksi niitä ei voi "
+"täsmätä. Täsmäys toimii vain yhdelle tuodulle tapahtumalle ja yhdelle ei-"
+"tuodulle tapahtumalle."
+
+#: dialogs/transactionmatcher.cpp:101 dialogs/transactionmatcher.cpp:156
+msgid "Unable to match all splits (%1)"
+msgstr "Ei voitu täsmätä kaikkia jaotteluja (%1)"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:65
+msgid "Account and transfer account are the same. Please change one."
+msgstr "Kohdetili ja siirtotili ovat samoja. Vaihda toinen."
+
+#: dialogs/kconfirmmanualenterdlg.cpp:84
+msgid "Payee changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Maksunsaaja muutettu.<br>&nbsp;&nbsp;&nbsp;Vanha: <b>%1</b>, uusi: <b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:92
+#: dialogs/kconfirmmanualenterdlg.cpp:100
+msgid "Account changed. Old: \"%1\", New: \"%2\""
+msgstr "Tili muutettu. Vanha \"%1\", uusi: \"%2\""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:107
+msgid "Account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "Tili muutettu.<br>&nbsp;&nbsp;&nbsp;Vanha: <b>%1</b>, Uusi: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:115
+msgid ""
+"Transfer account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</"
+"b><p>"
+msgstr ""
+"Siirtotili vaihdettu.<br>&nbsp;&nbsp;&nbsp;Vanha: <b>%1</b>, uusi: <b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:143
+msgid "Category changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Kategoria vaihdettu.<br>&nbsp;&nbsp;&nbsp;Vanha: <b>%1</b>, uusi: <b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:151
+#: dialogs/kconfirmmanualenterdlg.cpp:153
+msgid "empty"
+msgstr "tyhjä"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:157
+msgid "Memo changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Muistiinpano vaihdettu.<br>&nbsp;&nbsp;&nbsp;Vanha: <b>%1</b>, uusi: <b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:166
+msgid "Amount changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "Summa vaihdettu.<br>&nbsp;&nbsp;&nbsp;Vanha: <b>%1</b>, uusi: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:175
+msgid ""
+"Reconciliation flag changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%"
+"2</b><p>"
+msgstr ""
+"Yhteensovitustila vaihdettu.<br>&nbsp;&nbsp;&nbsp;Vanha: <b>%1</b>, uusi: <b>"
+"%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:182
+msgid "Fatal error in determining data: "
+msgstr "Vakava virhe tietojen määrityksessä: "
+
+#: dialogs/kselectdatabasedlg.cpp:56
+msgid ""
+"There are no Qt SQL drivers installed in your system.\n"
+"Please consult documentation for your distro, or visit the Qt web site (www."
+"trolltech.com) and search for SQL drivers."
+msgstr ""
+"Järjestelmään ei ole asennettu lainkaan QT SQL -ajureita.\n"
+"Selvitä asentaminen käytetyn jakelun dokumentaatiosta tai käy QT-"
+"webbisivuilla (http://www.trolltech.com) ja etsi hakusanoilla 'SQL drivers'."
+
+#: dialogs/kselectdatabasedlg.cpp:100
+msgid "Qt SQL driver %1 is no longer installed on your system"
+msgstr "QT SQL-ajuri %1 ei ole enää asennettuna järjestelmään"
+
+#: dialogs/kselectdatabasedlg.cpp:107
+msgid "Qt SQL driver %1 is not suported"
+msgstr "Qt SQL-ajuri %1 ei ole tuettu"
+
+#: dialogs/kselectdatabasedlg.cpp:164
+msgid "SQLite files (*.sql);; All files (*.*)"
+msgstr "SQLite-tiedostot (*.sql);; Kaikki tiedostot (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:167
+msgid "Select SQLite file"
+msgstr "Valitse SQLite-tiedosto"
+
+#: dialogs/kselectdatabasedlg.cpp:188
+msgid "All files (*.*)"
+msgstr "Kaikki tiedostot (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:191
+msgid "Select output file"
+msgstr "Valitse nimi kirjoitettavalle tiedostolle"
+
+#: dialogs/investactivities.cpp:168
+msgid "%1 (Brokerage)"
+msgstr "%1 (Maksunvälittäjä)"
+
+#: dialogs/investactivities.cpp:200 dialogs/investactivities.cpp:288
+#: dialogs/investactivities.cpp:425 widgets/transaction.cpp:1548
+msgid "Price/share"
+msgstr "Hinta / osake"
+
+#: dialogs/investactivities.cpp:586
+msgid "Ratio 1/"
+msgstr "Suhde 1/"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid ""
+"<p>Please check that all the details in the following dialog are correct and "
+"press OK.</p><p>Editable data can be changed and can either be applied to "
+"just this occurence or for all subsequent occurences for this schedule. "
+"(You will be asked what you intend after pressing OK in the following dialog)"
+"</p>"
+msgstr ""
+"<p>Tarkista että kaikki tiedot seuraavassa ikkunassa ovat oikein ja jatka "
+"painamalla Ok.</p><p>Muokattavissa olevat tiedot voidaan vaihtaa ja asettaa "
+"joko tälle esiintymälle tai myös kaikille myöhemmille tämän ajoitetun "
+"tapahtuman esiintymille. (Tämä kysytään OK-napin painamisen jälkeen "
+"seuraavassa ikkunassa.) </p>"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid "Enter scheduled transaction"
+msgstr "Kirjaa ajoitettu tapahtuma"
+
+#: dialogs/kcsvprogressdlg.cpp:65 dialogs/kexportdlg.cpp:65
+msgid "&Export"
+msgstr "&Vie"
+
+#: dialogs/kexportdlg.cpp:67 dialogs/kimportdlg.cpp:68
+msgid "Start operation"
+msgstr "Aloita toiminto"
+
+#: dialogs/kexportdlg.cpp:68
+msgid "Use this to start the export operation"
+msgstr "Aloita vieminen tämän avulla"
+
+#: dialogs/kexportdlg.cpp:71 dialogs/kimportdlg.cpp:72
+msgid "&Browse..."
+msgstr "&Selaa..."
+
+#: dialogs/kexportdlg.cpp:73 dialogs/kimportdlg.cpp:74
+msgid "Select filename"
+msgstr "Valitse tiedostonimi"
+
+#: dialogs/kexportdlg.cpp:74 dialogs/kimportdlg.cpp:75
+msgid "Use this to select a filename to export to"
+msgstr "Käytä tätä vietävän tiedostonimen valintaan"
+
+#: dialogs/kexportdlg.cpp:77 dialogs/kimportdlg.cpp:78
+#: dialogs/settings/ksettingsonlinequotes.cpp:64
+#: widgets/kmymoneyonlinequoteconfig.cpp:64
+msgid "&New..."
+msgstr "&Uusi..."
+
+#: dialogs/kexportdlg.cpp:79 dialogs/kimportdlg.cpp:80
+#: dialogs/mymoneyqifprofileeditor.cpp:96
+msgid "Create a new profile"
+msgstr "Luo uusi profiili"
+
+#: dialogs/kexportdlg.cpp:80 dialogs/kimportdlg.cpp:81
+msgid "Use this to open the profile editor"
+msgstr "Käytä tätä avataksesi profiilimuokkaimen"
+
+#: dialogs/keditloanwizard.cpp:56
+msgid "Edit loan wizard"
+msgstr "Lainan muokkaamisen ohjattu toiminto"
+
+#: dialogs/keditloanwizard.cpp:58
+msgid ""
+"Please enter the date from which on the following changes will be effective. "
+"The date entered must be later than the opening date of this account (%1), "
+"but must not be in the future. The default will be today."
+msgstr ""
+"Syötä päiväys mistä lähtien seuraava muutos astuu voimaan. Syötetyn päivän "
+"täytyy olla myöhäisempi kuin tilin avauspäivämäärä (%1), mutta se ei saa "
+"olla tulevaisuudessa. Oletuksena on nykyinen päivä."
+
+#: dialogs/keditloanwizard.cpp:76
+msgid ""
+"Note: you will not be able to modify this account today, because the opening "
+"date \"%1\" is in the future. Please revisit this dialog when the time has "
+"come."
+msgstr ""
+"Huomautus: tätä tiliä ei voida muokata tänään, koska avauspäivä \"%1\" on "
+"tulevaisuudessa. Palaa tähän ikkunaan kun avauspäivä on koittanut."
+
+#: dialogs/keditloanwizard.cpp:244
+msgid ""
+"Your previous selection was \"%1\". If you select another option, KMyMoney "
+"will dismiss the changes you have just entered. Do you wish to proceed?"
+msgstr ""
+"Edellinen valinta oli \"%1\". Jos toinen asetus valitaan, nyt tehdyt "
+"muutokset hylätään. Jatketaanko?"
+
+#: dialogs/kcategoryreassigndlg.cpp:81
+msgid ""
+"At least one transaction/schedule still references the category <b>%1</b>. "
+"However, at least one category with the same currency must exist so that the "
+"transactions/schedules can be reassigned."
+msgstr ""
+"Vähintään yksi tapahtuma / ajoitettu tapahtuma viittaa kategoriaan <b>%1</"
+"b>. Kuitenkin, vähintään yksi kategoria samalla valuutalla täytyy olla "
+"olemassa jotta tapahtumat / ajoitetut tapahtumat voidaan uudelleenmäärätä."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid ""
+"This dialog does not allow to create new categories. Please pick a category "
+"from the list."
+msgstr "Tämä ikkuna ei tue uusien kategorioiden luomista. Valitse kategorialistasta."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid "Category creation"
+msgstr "Kategorian luominen"
+
+#: dialogs/kbackupdlg.cpp:61
+msgid "C&hoose..."
+msgstr "&Valitse..."
+
+#: dialogs/kbackupdlg.cpp:63
+msgid "Select mount point"
+msgstr "Valitse liitospiste"
+
+#: dialogs/kbackupdlg.cpp:64
+msgid "Use this to browse to the mount point."
+msgstr "Käytä tätä hakeaksesi liitospisteen."
+
+#: dialogs/keditscheduledlg.cpp:293
+msgid "Next due date"
+msgstr "Seuraava eräpäivä"
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid ""
+"You have turned on the GPG encryption support. This means, that new files "
+"will be stored encrypted. Existing files will not be encrypted "
+"automatically. To achieve encryption of existing files, please use the "
+"<b>File/Save as...</b> feature and store the file under a different name. "
+"Once confident with the result, feel free to delete the old file and rename "
+"the encrypted one to the old name."
+msgstr ""
+"GPG-salaustuki on otettu käyttöön. Tämä tarkoittaa että uudet tiedostot "
+"salataan, mutta olemassa olevia tiedostoja ei salata automaattisesti. Jotta "
+"ne salattaisiin, käytä <b>Tiedosto / Tallenna nimellä...</b> -toimintoa "
+"tiedoston tallentamiseksi eri nimellä. Kun lopputulos on haluttu, voidaan "
+"vanha salaamaton tiedosto poistaa ja uusi salattu uudelleenimetä vanhan "
+"nimiseksi."
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid "GPG encryption activated"
+msgstr "GPG-salaus otettu käyttöön"
+
+#: dialogs/settings/ksettingshome.cpp:51
+msgid "&Up"
+msgstr "&Ylös"
+
+#: dialogs/settings/ksettingshome.cpp:53
+msgid "Move selected item up"
+msgstr "Siirrä valittua kohtaa ylöspäin"
+
+#: dialogs/settings/ksettingshome.cpp:54
+msgid "Use this to move the selected item up by one position in the list."
+msgstr "Siirrä tämän avulla valittua kohtaa pykälä ylöspäin listalla."
+
+#: dialogs/settings/ksettingshome.cpp:55
+msgid "&Down"
+msgstr "&Alas"
+
+#: dialogs/settings/ksettingshome.cpp:57
+msgid "Move selected item down"
+msgstr "Siirrä valittua kohtaa alaspäin"
+
+#: dialogs/settings/ksettingshome.cpp:58
+msgid "Use this to move the selected item down by one position in the list."
+msgstr "Siirrä tämän avulla valittua kohtaa pykälä alaspäin listalla."
+
+#: dialogs/settings/rc.cpp:1
+msgid "Color settings"
+msgstr "Väriasetukset"
+
+#: dialogs/settings/rc.cpp:2
+msgid "Foreground"
+msgstr "Edustan väri"
+
+#: dialogs/settings/rc.cpp:3
+msgid "Text colors"
+msgstr "Tekstin väri"
+
+#: dialogs/settings/rc.cpp:4
+msgid "Grid color"
+msgstr "Ruudukon väri"
+
+#: dialogs/settings/rc.cpp:5
+msgid "Erronous transaction"
+msgstr "Virheellinen tapahtuma"
+
+#: dialogs/settings/rc.cpp:6
+msgid "Value with missing conversion rate"
+msgstr "Arvo, jolta puuttuu muuntokurssi"
+
+#: dialogs/settings/rc.cpp:7
+msgid "Negative value"
+msgstr "Negatiivinen arvo"
+
+#: dialogs/settings/rc.cpp:8
+msgid "Background"
+msgstr "Tausta"
+
+#: dialogs/settings/rc.cpp:10
+msgid "List background colors"
+msgstr "Listan taustavärit"
+
+#: dialogs/settings/rc.cpp:11
+msgid "Normal"
+msgstr "Normaali"
+
+#: dialogs/settings/rc.cpp:12
+msgid "Alternate"
+msgstr "Vaihtoehtoinen"
+
+#: dialogs/settings/rc.cpp:13
+msgid "Special background colors"
+msgstr "Poikkeukselliset taustavärit"
+
+#: dialogs/settings/rc.cpp:14
+msgid "Ledger group separator"
+msgstr "Tapahtumien ryhmäerotin"
+
+#: dialogs/settings/rc.cpp:15
+msgid "Required field"
+msgstr "Vaadittu kenttä"
+
+#: dialogs/settings/rc.cpp:16
+msgid "Imported transaction"
+msgstr "Tuotu tapahtuma"
+
+#: dialogs/settings/rc.cpp:17
+msgid "Matched transaction"
+msgstr "Täsmätty tapahtuma"
+
+#: dialogs/settings/rc.cpp:18
+msgid "Font settings"
+msgstr "Kirjasinasetukset"
+
+#: dialogs/settings/rc.cpp:19
+msgid "Use system fonts"
+msgstr "Käytä järjestelmäkirjasimia"
+
+#: dialogs/settings/rc.cpp:20
+msgid "Individual font settings"
+msgstr "Omat kirjasinasetukset"
+
+#: dialogs/settings/rc.cpp:24
+msgid "Number of Days of Account Cycle:"
+msgstr "Päiviä tilikierrossa:"
+
+#: dialogs/settings/rc.cpp:26
+msgid "Number of Days to Forecast:"
+msgstr "Ennustettavien päivien määrä:"
+
+#: dialogs/settings/rc.cpp:27
+msgid "Forecast Method"
+msgstr "Ennustetapa"
+
+#: dialogs/settings/rc.cpp:28
+msgid "Scheduled and Future Transactions"
+msgstr "Ajoitetut ja tulevat tapahtumat"
+
+#: dialogs/settings/rc.cpp:29
+msgid "History-based"
+msgstr "Historiatietoihin perustuva"
+
+#: dialogs/settings/rc.cpp:30
+msgid "History-based settings"
+msgstr "Historiatietoihin perustuva -asetukset"
+
+#: dialogs/settings/rc.cpp:31
+msgid "Number of Cycles to use in Forecast:"
+msgstr "Ennusteisiin käytettävien kiertojen määrä:"
+
+#: dialogs/settings/rc.cpp:36
+msgid "General Settings"
+msgstr "Yleiset asetukset"
+
+#: dialogs/settings/rc.cpp:37
+msgid "Global"
+msgstr "Yleisasetukset"
+
+#: dialogs/settings/rc.cpp:38
+msgid "Startup page options"
+msgstr "Etusivun asetukset"
+
+#: dialogs/settings/rc.cpp:39
+msgid "Start with homepage"
+msgstr "Aloita käyttäen etusivua"
+
+#: dialogs/settings/rc.cpp:40
+msgid "Start with last selected view"
+msgstr "Aloita käyttäen viimeksi valittua näkymää"
+
+#: dialogs/settings/rc.cpp:41
+msgid "Precision settings"
+msgstr "Tarkkuus-asetukset"
+
+#: dialogs/settings/rc.cpp:42
+msgid "Price precision"
+msgstr "Hintojen tarkkuus"
+
+#: dialogs/settings/rc.cpp:43
+msgid "digits"
+msgstr "numeroa"
+
+#: dialogs/settings/rc.cpp:44
+msgid "Autosave options"
+msgstr "Automaattitallennuksen asetukset"
+
+#: dialogs/settings/rc.cpp:45
+msgid "Autosave periodically"
+msgstr "Tallenna automaattisesti"
+
+#: dialogs/settings/rc.cpp:46
+msgid "minutes"
+msgstr "minuutin välein"
+
+#: dialogs/settings/rc.cpp:47
+msgid "Fiscal Year"
+msgstr "Tilivuosi"
+
+#: dialogs/settings/rc.cpp:48
+msgid "Your fiscal year starts on"
+msgstr "Tilivuosi alkaa"
+
+#: dialogs/settings/rc.cpp:49
+msgid "January"
+msgstr "Tammikuu"
+
+#: dialogs/settings/rc.cpp:50
+msgid "February"
+msgstr "Helmikuu"
+
+#: dialogs/settings/rc.cpp:51
+msgid "March"
+msgstr "Maaliskuu"
+
+#: dialogs/settings/rc.cpp:52
+msgid "April"
+msgstr "Huhtikuu"
+
+#: dialogs/settings/rc.cpp:53
+msgid "May"
+msgstr "Toukokuu"
+
+#: dialogs/settings/rc.cpp:54
+msgid "June"
+msgstr "Kesäkuu"
+
+#: dialogs/settings/rc.cpp:55
+msgid "July"
+msgstr "Heinäkuu"
+
+#: dialogs/settings/rc.cpp:56
+msgid "August"
+msgstr "Elokuu"
+
+#: dialogs/settings/rc.cpp:57
+msgid "September"
+msgstr "Syyskuu"
+
+#: dialogs/settings/rc.cpp:58
+msgid "October"
+msgstr "Lokakuu"
+
+#: dialogs/settings/rc.cpp:59
+msgid "November"
+msgstr "Marraskuu"
+
+#: dialogs/settings/rc.cpp:60
+msgid "December"
+msgstr "Joulukuu"
+
+#: dialogs/settings/rc.cpp:61
+msgid "Views"
+msgstr "Näkymät"
+
+#: dialogs/settings/rc.cpp:62
+msgid "Synchronize account selection of ledger and investment view"
+msgstr "Synkronoi tilitapahtumien valinta ja sijoitusnäkymä"
+
+#: dialogs/settings/rc.cpp:63
+msgid ""
+"Check the views you want to enable, uncheck those you want to hide, because "
+"you don't need the functionality."
+msgstr ""
+"Valitse näkymät jotka otetaan käyttöön, ja poista valinta niistä jotka "
+"halutaan piilottaa."
+
+#: dialogs/settings/rc.cpp:64
+msgid "Icon size of navigation bar"
+msgstr "Navigaatiopalkin ikonikoko"
+
+#: dialogs/settings/rc.cpp:65
+msgid "Micro (16px)"
+msgstr "Pienen pieni (16 pikseliä)"
+
+#: dialogs/settings/rc.cpp:66
+msgid "Small (32px)"
+msgstr "Pieni (32 pikseliä)"
+
+#: dialogs/settings/rc.cpp:67
+msgid "Normal (48px)"
+msgstr "Normaali (48 pikseliä)"
+
+#: dialogs/settings/rc.cpp:68
+msgid "Large (64px)"
+msgstr "Suuri (64 pikseliä)"
+
+#: dialogs/settings/rc.cpp:69
+msgid "Show title bar on each page"
+msgstr "Näytä otsikkopalkki jokaisella sivulla"
+
+#: dialogs/rc.cpp:835 dialogs/settings/rc.cpp:70
+msgid "Filter"
+msgstr "Suodatin"
+
+#: dialogs/settings/rc.cpp:71
+msgid "Accounts / Categories"
+msgstr "Tilit / kategoriat"
+
+#: dialogs/settings/rc.cpp:72
+msgid "Don't show unused categories"
+msgstr "Älä näytä käyttämättömiä kategorioita"
+
+#: dialogs/settings/rc.cpp:73
+msgid ""
+"This option hides all categories in the categories view that are not used in "
+"at least a single transaction. They are still shown in the category "
+"selection lists."
+msgstr ""
+"Tämä asetus kätkee kaikki käyttämättömät kategoriat kategoria-näkymässä. Ne "
+"ovat kuitenkin näkyvissä edelleen kategoria-valintalistassa."
+
+#: dialogs/settings/rc.cpp:74
+msgid "Don't show closed accounts"
+msgstr "Älä näytä suljettuja tilejä"
+
+#: dialogs/settings/rc.cpp:75
+msgid ""
+"This option hides all accounts that have been closed by the user in views "
+"and selection lists.\n"
+"\n"
+"You can use <b>View/Show all accounts</b> to temporarily show hidden "
+"accounts in the views."
+msgstr ""
+"Tämä asetus kätkee kaikki tilit näkymissä ja valintalistoissa jotka käyttäjä "
+"on sulkenut.\n"
+"\n"
+"<b>Näytä / Esitä kaikki tilit</b> -asetusta käyttämällä saadaan piilotetut "
+"tilit tilapäisesti näkyviin."
+
+#: dialogs/settings/rc.cpp:76
+msgid "Show equity accounts"
+msgstr "Näytä pääomatilit"
+
+#: dialogs/rc.cpp:332 dialogs/settings/rc.cpp:77 widgets/rc.cpp:160
+msgid "Schedules"
+msgstr "Ajoitetut tapahtumat"
+
+#: dialogs/settings/rc.cpp:78
+msgid "Don't show finished schedules"
+msgstr "Älä näytä päättyneitä ajoittuneita tapahtumia"
+
+#: dialogs/settings/rc.cpp:79
+msgid "This option hides all finished schedules in the schedules view."
+msgstr ""
+"Tämä asetus kätkee kaikki päättyneet ajoitetut tapahtumat <b>ajoitetut "
+"tapahtumat </b>-näkymässä."
+
+#: dialogs/settings/rc.cpp:81
+msgid "Don't show transactions prior to"
+msgstr "Älä näytä tapahtumia ennen"
+
+#: dialogs/settings/rc.cpp:82
+msgid "Don't show reconciled transactions"
+msgstr "Älä näytä yhteensovitettuja tapahtumia"
+
+#: dialogs/settings/rc.cpp:83
+msgid "This option hides all reconciled transactions in the ledger view."
+msgstr "Tämä asetus kätkee kaikki yhteensovitetut tapahtumat tapahtumat -näkymästä."
+
+#: dialogs/settings/rc.cpp:84 widgets/rc.cpp:22
+msgid "GPG encryption settings"
+msgstr "GPG-salausasetukset"
+
+#: dialogs/settings/rc.cpp:85
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Access to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>additional recovery encryption</i> is only accessible, if the "
+"necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id "
+"0x8AFDDC8E is found in your keyring."
+msgstr ""
+"Tällä sivulla voidaan valita <b>GPG</b>-asetukset tiedonsalausta varten.<p>\n"
+"Pääsy asetuksiin on estetty jos <b>GPG</b>:tä ei löydetä järjestelmästä. "
+"Siinä tapauksessa varmista että <b>GPG</b> toimii oikein nykyisellä "
+"käyttäjällä.<p>\n"
+"<i>Toipumissalaus</i>-ryhmä näkyy ainoastaan, mikäli tarvittava avain "
+"<b>kmymoney-recover@users.sourceforge.net</b>:lle löytyy tunnisteella "
+"0x8AFDDC8E avainrenkaasta. "
+
+#: dialogs/settings/rc.cpp:86 widgets/rc.cpp:24
+msgid "Use GPG encryption"
+msgstr "Käytä GPG-salausta"
+
+#: dialogs/settings/rc.cpp:87
+msgid "GPG encryption"
+msgstr "GPG-salaus"
+
+#: dialogs/settings/rc.cpp:88
+msgid "Your key"
+msgstr "Avaimesi"
+
+#: dialogs/settings/rc.cpp:89
+msgid ""
+"This combo box lists all the secret keys you have in your keyring. Select "
+"the one you want to use for encryption when saving to a file."
+msgstr ""
+"Tässä pudotusvalikossa on listattu kaikki avainrenkaasi salaiset avaimet. "
+"Valitse avain, jota haluat käyttää salaamiseen, kun tiedosto tallennetaan."
+
+#: dialogs/settings/rc.cpp:90
+msgid "Additonal keys"
+msgstr "Lisäavaimet"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:50 dialogs/settings/rc.cpp:91
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading 0x."
+msgstr ""
+"Syötä avaimen tunniste jota käytetään tiedon salaamiseen. Tämä voi olla joko "
+"sähköpostiosoite tai heksadesimaalilukutunniste. Älä unohda 0x-etuliitettä "
+"heksadesimaaliluvulle."
+
+#: dialogs/settings/rc.cpp:92 widgets/rc.cpp:28
+msgid ""
+"This symbol denotes, if the key for the given user id has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"Tämä symboli ilmoittaa mikäli annetulle käyttäjälle on löytynyt avain "
+"avainrenkaastasi. Symboli on vihreä jos avain löytyi, muutoin se on tumma."
+
+#: dialogs/kgpgkeyselectiondlg.cpp:61 dialogs/settings/rc.cpp:93
+msgid "Keys for all of the above user ids found"
+msgstr "Avaimet annetuille käyttäjätunnuksille löytyivät"
+
+#: dialogs/settings/rc.cpp:94 widgets/rc.cpp:31
+msgid ""
+"This symbol denotes, if the KMyMoney recovery key has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"Tämä symboli ilmoittaa mikäli KMyMoney-palautusavain on löytynyt "
+"avainrenkaasta. Symboli on vihreä jos palautusavain löytyi, muutoin se on "
+"tumma."
+
+#: dialogs/settings/rc.cpp:95
+msgid "Recover Key available in keyring"
+msgstr "Palautusavain käytettävissä avainrenkaassa"
+
+#: dialogs/settings/rc.cpp:96
+msgid "Also encrypt with KMyMoney's recover key"
+msgstr "Salaa myös KMyMoneyn palautusavaimella"
+
+#: dialogs/settings/rc.cpp:97
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out.."
+msgstr ""
+"Tiedot voidaan salata myös KMyMoneyn omalla palautusavaimella, jolloin "
+"KMyMoneyn pääkehittäjillä on tietojen lukemiseen tarvittava avain. <p>\n"
+"\n"
+"Tämän mekanismin avulla on mahdollista palauttaa tiedot mikäli oma "
+"palautusavaimesi hukkuu eikä tietoja kyetä enää lukemaan. Ottamalla käyttöön "
+"tämän asetuksen, KMyMoneyn kehittäjät voivat purkaa tiedoston salauksen ja "
+"lähettää tiedot luettavassa muodossa takaisin. Lähettäessäsi valmistaudu "
+"vastaamaan muutamaan kysymykseen salatun tiedon sisällöstä, millä "
+"varmistetaan tiedon oikea vastaanottaja."
+
+#: dialogs/settings/rc.cpp:98
+msgid "Homepage Settings"
+msgstr "Etusivun asetukset"
+
+#: dialogs/settings/rc.cpp:99
+msgid "Up"
+msgstr "Ylös"
+
+#: dialogs/settings/rc.cpp:100
+msgid "Down"
+msgstr "Alas"
+
+#: dialogs/settings/rc.cpp:101
+msgid ""
+"Selected entries are shown on the home page of the application.<p>\n"
+"Use the buttons and checkboxes to customize the layout of the home page."
+msgstr ""
+"Valitut kohdat näytetään sovelluksen etusivulla.<p>\n"
+"Käytä painikkeita ja valintalaatikoita muokataksesi etusivusta mieleisesi."
+
+#: dialogs/settings/rc.cpp:102
+msgid "Homepage/Summary page font scaling"
+msgstr "Etu- / yhteenvetosivun kirjasimen skaalaus"
+
+#: dialogs/settings/rc.cpp:103
+msgid "Percentage of default font size:"
+msgstr "Prosenttia oletuskirjasinkoosta:"
+
+#: dialogs/settings/rc.cpp:104
+msgid ""
+"Remember font size when leaving the program if manually changed with mouse-"
+"wheel"
+msgstr ""
+"Muista kirjasinkoko ohjelman sulkemisen jälkeen mikäli sitä on muutettu "
+"käsin hiiren rullalla"
+
+#: dialogs/settings/rc.cpp:105
+msgid "Information display"
+msgstr "Tietonäyttö"
+
+#: dialogs/settings/rc.cpp:106
+msgid "Show Account Limit Information"
+msgstr "Näytä tilin rajoitustiedot"
+
+#: dialogs/settings/rc.cpp:110 widgets/rc.cpp:47
+msgid ""
+"<i>Enter regular expressions which can be used to parse the data returned "
+"from the URL entered above. The symbol, price, and date must be found in "
+"the quote data to be usable. You may also try the KMyMoney user's "
+"mailinglist at <a href=\"mailto:kmymoney2-user@lists.sourceforge.net"
+"\">kmymoney2-user@lists.sourceforge.net</a> to find what settings work for "
+"other users in your country.</i>"
+msgstr ""
+"<i>Syötä säännöllinen lauseke, jota voidaan käyttää ylle syötetyn osoitteen "
+"palauttaman tiedon parsimiseen. Tunnus, hinta sekä päiväys pitää löytyä "
+"noteeraustiedoista, jotta se olisi käyttökelpoinen. Voit myös kysyä sopivia "
+"asetuksia muilta käyttäjiltä KMyMoneyn käyttäjien postituslistalta <a href="
+"\"mailto:kmymoney2-user@lists.sourceforge.net\">kmymoney2-user@lists."
+"sourceforge.net</a></i>."
+
+#: dialogs/settings/rc.cpp:113 widgets/rc.cpp:38
+msgid "Regular Expression to extract the symbol from the downloaded data"
+msgstr "Säännöllinen lauseke tunnuksen poimimiseksi ladatusta tiedostosta"
+
+#: dialogs/settings/rc.cpp:114 widgets/rc.cpp:39
+msgid "Regular Expression to extract the price from the downloaded data"
+msgstr "Säännöllinen lauseke hinnan poimimiseksi ladatusta tiedostosta"
+
+#: dialogs/settings/rc.cpp:115 widgets/rc.cpp:41
+msgid "URL to be used to download the quote"
+msgstr "URL-osoite noteeraustietojen lataamiseksi"
+
+#: dialogs/settings/rc.cpp:116 widgets/rc.cpp:42
+msgid ""
+"Enter the URL from which stock quotes will be fetched. <b>%1</b> will be "
+"replaced with the symbol for the security being quoted. For currency "
+"conversions, <b>%2</b> will be replaced with the currency to be quoted and "
+"<b>%1</b> with the currency the quote is based on."
+msgstr ""
+"Syötä URL-osoite, josta noteeraustiedot noudetaan. <b>%1</b> tullaan "
+"korvaamaan tunnuksella noteerattavalle arvopaperille. Valuuttamuunnoksia "
+"varten <b>%2</b> tullaan korvaamaan noteerattavalla valuutalla, sekä <b>%1</"
+"b> valuutalla johon noteeraus pohjautuu."
+
+#: dialogs/settings/rc.cpp:118 dialogs/settings/rc.cpp:121 widgets/rc.cpp:40
+#: widgets/rc.cpp:44
+msgid "Regular Expression to extract the date from the downloaded data"
+msgstr "Säännöllinen lauseke päiväyksen poimimiseksi ladatusta tiedostosta"
+
+#: dialogs/rc.cpp:807 dialogs/settings/rc.cpp:119 widgets/rc.cpp:45
+msgid "Date Format"
+msgstr "Päivämäärämuoto"
+
+#: dialogs/settings/rc.cpp:122
+msgid "Skip HTML stripping"
+msgstr "Ohita HTML:n siivoaminen"
+
+#: dialogs/settings/rc.cpp:123
+msgid ""
+"<p>For easier processing of the data returned by the online source, KMyMoney "
+"usually strips unused parts before it is parsed with the regular "
+"expressions. If matching of the fields relies on those items, then use this "
+"option to turn stripping off.</p>\n"
+"\n"
+"<p>The following items are usually removed by stripping:\n"
+"\n"
+"<ul>\n"
+"<li>HTML tags such as <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded characters such as <b>&amp;nbsp;</b></li>\n"
+"<li>duplicate whitespace</li>\n"
+"</ul>\n"
+"</p>"
+msgstr ""
+"<p>Online-lähteen palauttamien tietojen helpomman käsittelyn vuoksi "
+"tavallisesti siivotaan käyttämättömät osat pois ennen kuin se käsitellään "
+"säännöllisten lausekkeiden avulla. Jos näiden kenttien avulla täsmääminen "
+"nojaa näihin osiin, käytä tätä asetusta siivoamisen poistamiseksi käytöstä.<"
+"/p>\n"
+"\n"
+"<p>Seuraavat osat yleensä poistetaan kun siivotaan:\n"
+"\n"
+"<ul>\n"
+"<li>HTML-tagit kuten <b>&lt;tag&gt;</b></li>\n"
+"<li>& koodatut merkit kuten <b>&amp;nbsp;</b></li>\n"
+"<li>tyhjät merkit joita on peräkkäin enemmän kuin yksi</li>\n"
+"</ul>\n"
+"</p>"
+
+#: dialogs/settings/rc.cpp:127
+msgid "Register settings"
+msgstr "Tapahtuma-asetukset"
+
+#: dialogs/settings/rc.cpp:128
+msgid "Display"
+msgstr "Näyttö"
+
+#: dialogs/settings/rc.cpp:131
+msgid ""
+"Using the ledger lens shows the details for the transaction that has focus "
+"in the ledger. Usually, when using the transaction form, only a one line "
+"summary is displayed for each transaction as the details are shown in the "
+"form."
+msgstr ""
+"Tapahtumien suurennuslasia käyttämällä näet yksityiskohdat, jotka "
+"kohdistuvat tapahtumiin. Normaalisti, kun tapahtumat-näkymää käytetään, "
+"jokainen tapahtuma näkyy ainoastaan yhdellä summarivllä."
+
+#: dialogs/settings/rc.cpp:133
+msgid "Always show a No. field"
+msgstr "Näytä aina järjestysnumerokenttä"
+
+#: dialogs/settings/rc.cpp:134
+msgid "Show group header between transactions"
+msgstr "Näytä ryhmäotsikko tapahtumien välissä"
+
+#: dialogs/settings/rc.cpp:135
+msgid ""
+"Draws a larger header above each group of transaction. The grouping depends "
+"on the current sort order."
+msgstr ""
+"Piirtää laajemman otsikon jokaisen tapahtumaryhmän päälle. Ryhmittely "
+"riippuu lajitteluperusteesta."
+
+#: dialogs/settings/rc.cpp:136
+msgid "Show header for the previous and current fiscal year"
+msgstr "Näytä otsikko aiemmalle ja nykyiselle tilivuodelle"
+
+#: dialogs/settings/rc.cpp:137
+msgid "Sorting"
+msgstr "Lajittelu"
+
+#: dialogs/settings/rc.cpp:138
+msgid "Normal view"
+msgstr "Normaalinäkymä"
+
+#: dialogs/settings/rc.cpp:139
+msgid "Reconciliation view"
+msgstr "Yhteensovitusnäkymä"
+
+#: dialogs/settings/rc.cpp:140
+msgid "Search view"
+msgstr "Hakunäkymä"
+
+#: dialogs/settings/rc.cpp:141
+msgid ""
+"Use the <i>left</i> and <i>right</i> buttons to add and remove sort options. "
+"Use the <i>up</i> and <i>down</i> buttons to modify the sort order. Double-"
+"Click a selected entry to toggle the sort order between <i>ascending</i> and "
+"<i>descending</i>."
+msgstr ""
+"Käytä <i>vasen</i> ja <i>oikea</i> -painikkeita lisätäksesi tai poistaaksesi "
+"lajitteluvalintoja. Käytä <i>ylös</i> ja <i>alas</i> -painikkeita "
+"muuttaaksesi lajitteluvalintoja. Kaksoisklikkaa valittua kohdetta "
+"vaihtaaksesi lajittelun <i>nousevaan</i> tai <i>laskevaan</i> järjestykseen."
+
+#: dialogs/settings/rc.cpp:142
+msgid "Data entry"
+msgstr "Kirjaaminen"
+
+#: dialogs/settings/rc.cpp:146
+msgid "Use Enter to move between fields"
+msgstr "Käytä Enteriä kenttien välillä siirtymiseen"
+
+#: dialogs/settings/rc.cpp:147
+msgid "Match names from start"
+msgstr "Täsmää nimet alusta alkaen"
+
+#: dialogs/settings/rc.cpp:148
+msgid ""
+"Mark this option, if you always want to match names e.g. for payees from the "
+"start. If unset, any substring is matched."
+msgstr ""
+"Valitse tämä asetus, jos halutaan täsmätä nimet, esimerkiksi maksunsaajat, "
+"alusta alkaen. Jos tämä jätetään valitsematta, mikä tahansa alimerkkijono täsmätään."
+
+#: dialogs/settings/rc.cpp:149
+msgid "Default reconciliation state"
+msgstr "Yhteensovituksen oletustila"
+
+#: dialogs/rc.cpp:227 dialogs/settings/rc.cpp:150
+#: widgets/kmymoneycombo.cpp:348 widgets/registersearchline.cpp:84
+msgid "Not reconciled"
+msgstr "Ei yhteensovitettu"
+
+#: dialogs/rc.cpp:228 dialogs/settings/rc.cpp:151
+#: widgets/kmymoneycombo.cpp:347 widgets/registersearchline.cpp:85
+msgid "Cleared"
+msgstr "Varmistettu"
+
+#: dialogs/settings/rc.cpp:153
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation "
+"of an account"
+msgstr ""
+"Yhteensovituksen oletustila tilin yhteensovituksen aikana syötetyille "
+"uusille tapahtumille"
+
+#: dialogs/settings/rc.cpp:154
+msgid "Autofill"
+msgstr "Automaattitäyttö"
+
+#: dialogs/settings/rc.cpp:155
+msgid "No Autofill"
+msgstr "Ei automaattista täyttöä"
+
+#: dialogs/settings/rc.cpp:156
+msgid "Don't do autofill of transaction data at all."
+msgstr "Tapahtumien automaattitäyttöä ei käytetä lainkaan."
+
+#: dialogs/settings/rc.cpp:157
+msgid "Same transaction if amount differs less than"
+msgstr "Sama tapahtuma jos summa poikkeaa vähemmän kuin"
+
+#: dialogs/settings/rc.cpp:158
+msgid ""
+"Collect all transactions for the given payee. Treat all transactions that "
+"refer to the same category and have an amount with +/- X % as identical. If "
+"more than one transaction is found, a list of them is presented to the "
+"user.\n"
+"\n"
+"Selecting 0% will list all transactions."
+msgstr ""
+"Kerää kaikki tapahtumat annetulle maksunsaajalle. Käsittelee kaikki ne "
+"tapahtumat identtisinä, jotka kohdistuvat samaan kategoriaan ja jotka ovat "
+"summaltaan +/- X % samoja. Käyttäjälle näytetään lista tapahtumista, mikäli "
+"kaksi tai useampi tapahtumaa löytyy.\n"
+"\n"
+"Valitsemalla 0% saat kaikki tapahtumat näkyviin."
+
+#: dialogs/settings/rc.cpp:159
+msgid ""
+"Two transactions are usually treated identical for autofill, if they refer "
+"the same accounts. They are treated as different transactions though, when "
+"their amount varies by more than the percentage given here."
+msgstr ""
+"Automaattisessa täytössä kaksi tapahtumaa käsitellään yleensä identtisinä, "
+"mikäli ne kohdistuvat samaan tiliin. Ne kuitenkin käsitellään erillisinä "
+"tapahtumina, mikäli niiden summat poikkeavat enemmän kuin annettu "
+"prosenttiluku."
+
+#: dialogs/settings/rc.cpp:160
+msgid ""
+"_: Same transaction if amount differs less than percent.\n"
+"percent."
+msgstr "prosenttia."
+
+#: dialogs/settings/rc.cpp:161
+msgid "with previously most often used transaction for the payee"
+msgstr "Maksunsaajalle useimmiten käytetty tapahtuma"
+
+#: dialogs/settings/rc.cpp:162
+msgid ""
+"The data of the last transaction assigned to the category used most often "
+"for this payee is autofilled into the transaction editor."
+msgstr ""
+"Tapahtumamuokkaimessa automaattisesti täytetään kategoriaan viimeksi lisätyn "
+"tapahtuman tiedot, jota on käytetty tälle maksunsaajalle useimmiten."
+
+#: dialogs/settings/rc.cpp:164
+msgid "Match transactions within days"
+msgstr "Täsmää tapahtumat annettujen päivien sisään"
+
+#: dialogs/settings/rc.cpp:165
+msgid ""
+"Search for matching transactions within the range of the posting date of the "
+"imported transaction +/- the number of given days."
+msgstr "Etsi tapahtumia +/- päivää annetulla aikavälillä tuoduista tapahtumista."
+
+#: dialogs/settings/rc.cpp:166
+msgid "Ask for a new payee's default category"
+msgstr "Kysy uuden maksunsaajan oletuskategoriaa"
+
+#: dialogs/settings/rc.cpp:167
+msgid ""
+"Whenever a new payee is detected during import of a statement, the user will "
+"be asked to assign a default category for this user when this option is "
+"selected."
+msgstr ""
+"Jos tiliotteen tuonnin yhteydessä tunnistetaan uusi maksunsaaja, käyttäjää "
+"pyydetään asettamaan oletuskategoria tälle maksunsaajalle kunnes tämä asetus on valittu."
+
+#: dialogs/settings/rc.cpp:168
+msgid "Schedule Settings"
+msgstr "Ajoitettujen tapahtumien asetukset"
+
+#: dialogs/settings/rc.cpp:169
+msgid "Startup options"
+msgstr "Käynnistysasetukset"
+
+#: dialogs/settings/rc.cpp:170
+msgid "Check schedules on startup"
+msgstr "Tarkista ajoitetut tapahtumat käynnistyksen yhteydessä"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:60
+#: widgets/kmymoneyonlinequoteconfig.cpp:60
+msgid "Delete the selected source entry"
+msgstr "Poista valittu tietolähde"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:61
+#: widgets/kmymoneyonlinequoteconfig.cpp:61
+msgid "Use this to delete the selected online source entry"
+msgstr "Käytä tätä poistamaan valittu online-tietolähde"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:66
+#: widgets/kmymoneyonlinequoteconfig.cpp:66
+msgid "Create a new source entry for online quotes"
+msgstr "Luo uusi tietolähde online-noteerauksia varten"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:67
+#: widgets/kmymoneyonlinequoteconfig.cpp:67
+msgid "Use this to create a new entry for online quotes"
+msgstr "Käytä tätä uuden tietolähteen luonnissa online-noteerauksia varten"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:107
+#: dialogs/settings/ksettingsonlinequotes.cpp:190
+#: dialogs/settings/ksettingsonlinequotes.cpp:193
+#: dialogs/settings/ksettingsonlinequotes.cpp:216
+#: widgets/kmymoneyonlinequoteconfig.cpp:107
+#: widgets/kmymoneyonlinequoteconfig.cpp:185
+#: widgets/kmymoneyonlinequoteconfig.cpp:188
+#: widgets/kmymoneyonlinequoteconfig.cpp:211
+msgid "New Quote Source"
+msgstr "Uusi noteeraus -tietolähde"
+
+#: dialogs/ksplittransactiondlg.cpp:77 dialogs/rc.cpp:788
+msgid "Clear &All"
+msgstr "Poista k&aikki"
+
+#: dialogs/ksplittransactiondlg.cpp:79
+msgid "Clear all splits"
+msgstr "Poista kaikki jaottelut"
+
+#: dialogs/ksplittransactiondlg.cpp:80
+msgid "Use this to clear all splits of this transaction"
+msgstr "Käytä tätä poistaaksesi tämän tapahtuman kaikki jaottelut"
+
+#: dialogs/ksplittransactiondlg.cpp:84
+msgid "&Merge"
+msgstr "&Yhdistä"
+
+#: dialogs/ksplittransactiondlg.cpp:183
+msgid ""
+"The total amount of this transaction is %1 while the sum of the splits is %"
+"2. The remaining %3 are unassigned."
+msgstr ""
+"Tämän tapahtuman kokonaissumma on %1, vaikka jaoteltujen tapahtumien summa "
+"on %2. Jäljelle jäävä %3 on määrittelemättä."
+
+#: dialogs/ksplittransactiondlg.cpp:191
+#, c-format
+msgid "Change &total amount of transaction to %1."
+msgstr "&Muuta tapahtuman kokonaissummaksi %1."
+
+#: dialogs/ksplittransactiondlg.cpp:194
+msgid "&Distribute difference of %1 among all splits."
+msgstr "Jaa erotus %1 &tasaisesti kaikille jaotteluille."
+
+#: dialogs/ksplittransactiondlg.cpp:203
+#, c-format
+msgid "&Leave total amount of transaction at %1."
+msgstr "Jätä tapahtuman &kokonaissummaksi %1."
+
+#: dialogs/ksplittransactiondlg.cpp:205
+msgid "&Leave %1 unassigned."
+msgstr "&Jätä %1 määrittelemättä."
+
+#: dialogs/ksplittransactiondlg.cpp:275
+msgid ""
+"You are about to delete all splits of this transaction. Do you really want "
+"to continue?"
+msgstr "Tapahtuman kaikkia jaotteluja ollaan poistamassa. Jatketaanko?"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:97
+msgid "Use this to create a new QIF import/export profile"
+msgstr "Käytä tätä uuden QIF tuonti- tai vientiprofiilin luontiin"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:148
+#: dialogs/mymoneyqifprofileeditor.cpp:403 dialogs/rc.cpp:797
+msgid "QIF Profile Editor"
+msgstr "QIF-profiilimuokkain"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:150
+msgid "QIF Profile Selector"
+msgstr "QIF-profiilivalitsin"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:236
+msgid "The default QIF profile"
+msgstr "QIF-oletusprofiili"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:404
+#: dialogs/mymoneyqifprofileeditor.cpp:417
+msgid "Enter new profile name"
+msgstr "Syötä profiilin nimi"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:436
+msgid "Do you really want to delete profile '%1'?"
+msgstr "Poistetaanko profiili '%1' varmasti?"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:38
+msgid "Select additional keys"
+msgstr "Valitse lisäavaimet"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:48 widgets/rc.cpp:25
+msgid "User identification"
+msgstr "Käyttäjän tunnistus"
+
+#: dialogs/kendingbalancedlg.cpp:71
+msgid ""
+"Please enter the following fields with the information as you find them on "
+"your statement. Make sure to enter all values in <b>%1</b>."
+msgstr ""
+"Syötä seuraaviin kenttiin tiedot jotka löytyvät tiliotteestasi. Varmista, "
+"että kaikki syötettävät arvot ovat <b>%1</b>."
+
+#: dialogs/kendingbalancedlg.cpp:124
+#, c-format
+msgid "Last reconciled statement: %1"
+msgstr "Viimeksi yhteensovitettu tiliote: %1"
+
+#: dialogs/kendingbalancedlg.cpp:437 dialogs/kendingbalancedlg.cpp:577
+#: dialogs/rc.cpp:137
+msgid "Adjustment transaction"
+msgstr "Säädä tapahtumaa"
+
+#: dialogs/kendingbalancedlg.cpp:510
+msgid ""
+"KMyMoney has calculated the following amounts for interest and amortization "
+"according to recorded payments between %1 and %2."
+msgstr ""
+"On laskettu seuraavat summat korolle ja lyhennyserille, pohjautuen "
+"kirjattuihin maksuihin välillä %1 ja %2."
+
+#: dialogs/kbalancechartdlg.cpp:59
+#, c-format
+msgid "Balance of %1"
+msgstr "%1:n saldo"
+
+#: dialogs/kbalancechartdlg.cpp:70
+msgid "%1 Balance History"
+msgstr "%1 saldohistoria"
+
+#: dialogs/kmymoneysplittable.cpp:98
+msgid "Split Options"
+msgstr "Jaotteluvalinnat"
+
+#: dialogs/kmymoneysplittable.cpp:99 dialogs/rc.cpp:731
+#: widgets/kmymoneypriceview.cpp:149
+msgid "Edit..."
+msgstr "Muuta..."
+
+#: dialogs/kmymoneysplittable.cpp:100
+msgid "Duplicate"
+msgstr "Kahdenna"
+
+#: dialogs/kmymoneysplittable.cpp:102
+msgid "Delete ..."
+msgstr "Poista..."
+
+#: dialogs/kmymoneysplittable.cpp:275
+msgid ""
+"_: Duplicate split\n"
+"CTRL+c"
+msgstr "CTRL+c"
+
+#: dialogs/kmymoneysplittable.cpp:562
+msgid "will be calculated"
+msgstr "lasketaan"
+
+#: dialogs/kmymoneysplittable.cpp:648
+msgid "You are about to delete the selected split. Do you really want to continue?"
+msgstr "Valittu jaottelu ollaan poistamassa. Jatketaanko?"
+
+#: dialogs/rc.cpp:1
+msgid "Account selection"
+msgstr "Tilin valinta"
+
+#: dialogs/rc.cpp:3
+msgid "Account to import to"
+msgstr "Tuotava tili"
+
+#: dialogs/rc.cpp:6 dialogs/rc.cpp:170 widgets/rc.cpp:169
+msgid "Skip"
+msgstr "Ohita"
+
+#: dialogs/rc.cpp:8
+msgid ""
+"Use this dialog to backup your data. \n"
+"\n"
+"Please make sure you have a disk inserted and that the drive is ready. Then "
+"choose the mount point from either the Choose button or by entering the path "
+"in the available box.\n"
+"\n"
+"Click OK to perform the backup. If your system does not use an automounter, "
+"make sure you mark the checkbox below to \"mount this directory before "
+"backing up.\""
+msgstr ""
+"Käytä tätä ikkunaa tietojen varmentamiseen. \n"
+"\n"
+"Varmista että levyke on paikoillaan ja levykeasema valmis. Valitse sitten "
+"liitospiste joko valitsemalla valintapainikkeista tai syöttämällä polku.\n"
+"\n"
+"Valitse OK varmistaaksesi tiedot. Jos järjestelmä ei käytä automaattista "
+"tiedostojärjestelmään liittämistä, varmista että \"liitä tämä hakemisto "
+"ennen varmentamista\" on valittuna."
+
+#: dialogs/rc.cpp:9
+msgid "Device options"
+msgstr "Laiteasetukset"
+
+#: dialogs/rc.cpp:10
+msgid ""
+"_: This is the mount point\n"
+"Mount Point:"
+msgstr "Liitospiste:"
+
+#: dialogs/rc.cpp:11
+msgid "Choose..."
+msgstr "Valitse..."
+
+#: dialogs/rc.cpp:12
+msgid "Mount this directory before backing up."
+msgstr "Liitä tämä hakemisto ennen varmentamista."
+
+#: dialogs/rc.cpp:15
+msgid "Reassign categories"
+msgstr "Uudelleenaseta kategoriat"
+
+#: dialogs/rc.cpp:16
+msgid ""
+"The transactions, schedules and budgets associated with the selected "
+"category need to be re-assigned to a different category before the selected "
+"category can be deleted. Please select a category from the list below."
+msgstr ""
+"Valittuun kategoriaan liittyvät tapahtumat, ajoitetut tapahtumat ja budjetit "
+"täytyy uudelleenasettaa toiseen kategoriaan ennen kuin valittu kategoria "
+"voidaan poistaa. Valitse kategoria alla olevasta listasta."
+
+#: dialogs/rc.cpp:17
+msgid "Available categories:"
+msgstr "Saatavilla olevat kategoriat:"
+
+#: dialogs/rc.cpp:21
+msgid ""
+"Please choose the type of import you wish to perform. A simple "
+"explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Valitse tuonnin tyyppi jonka haluat suorittaa. Yksinkertainen selitys "
+"tuontityypistä näkyy ruudun alla, se päivittyy kun valintalaatikosta valittu "
+"kohde vaihtuu.\n"
+"\n"
+"Kun tuonnin tyyppi on valittu, paina OK-painiketta jatkaaksesi."
+
+#: dialogs/rc.cpp:23
+msgid "QIF"
+msgstr "QIF"
+
+#: dialogs/rc.cpp:24
+msgid "CSV"
+msgstr "CSV"
+
+#: dialogs/rc.cpp:25
+msgid "Some descripton"
+msgstr "Kuvaus"
+
+#: dialogs/rc.cpp:28
+msgid "Confirm Manual Enter"
+msgstr "Vahvista käsinsyöttö"
+
+#: dialogs/rc.cpp:29
+msgid "The following changes have been made to the transaction data:"
+msgstr "Seuraavat muutokset on tehty tapahtumatietoihin:"
+
+#: dialogs/rc.cpp:30
+msgid "Please choose what you wish to do with the above changes"
+msgstr "Valitse, mitä tehdään yllä oleville muutoksille"
+
+#: dialogs/rc.cpp:31
+msgid "Discard the changes and enter the original transaction into the register."
+msgstr "Hylkää muutokset ja kirjaa alkuperäinen tapahtuma."
+
+#: dialogs/rc.cpp:32
+msgid "Enter these new values this one time, for this occurence only."
+msgstr "Käytä uusia arvoja tällä kertaa, mutta vain tätä tapahtumaa varten."
+
+#: dialogs/rc.cpp:33
+msgid "Set all further occurences in this schedule to be these values."
+msgstr "Aseta kaikkiin myöhempiin ajoitettuihin tapahtumiin nämä arvot."
+
+#: dialogs/rc.cpp:36
+msgid "CSV Dialog"
+msgstr "CSV-ikkuna"
+
+#: dialogs/rc.cpp:37
+msgid ""
+"CSV Dialog. Choose a file and then click on Run. You can view your "
+"progress at\n"
+"the bottom of the screen.\n"
+"\n"
+"You can cancel the process at any time by clicking on the Cancel button."
+msgstr ""
+"CSV-ikkuna. Valitse tiedosto ja paina Suorita-painiketta. Tapahtumien "
+"eteneminen näkyy ruudun alla.\n"
+"\n"
+"Työ voidaan peruuttaa koska vain painamalla Peruuta-painiketta."
+
+#: dialogs/rc.cpp:38
+msgid "Choose the csv file:"
+msgstr "Valitse CSV-tiedosto:"
+
+#: dialogs/rc.cpp:39
+msgid "Browse"
+msgstr "Selaa"
+
+#: dialogs/rc.cpp:40
+msgid "Between These Dates"
+msgstr "Näiden päivien välillä"
+
+#: dialogs/rc.cpp:41 dialogs/rc.cpp:196
+msgid "Start on:"
+msgstr "Alkaen:"
+
+#: dialogs/rc.cpp:42 dialogs/rc.cpp:195
+msgid "End on:"
+msgstr "Päättyen:"
+
+#: dialogs/rc.cpp:43
+msgid "Run"
+msgstr "Suorita"
+
+#: dialogs/rc.cpp:44
+msgid "Progress Info"
+msgstr "Edistyminen"
+
+#: dialogs/rc.cpp:45
+msgid "Processing Account:"
+msgstr "Käsitellään tiliä:"
+
+#: dialogs/rc.cpp:47
+msgid "Processing Transaction:"
+msgstr "Käsitellään tapahtumaa:"
+
+#: dialogs/rc.cpp:48
+msgid "0 of 0"
+msgstr "0 / 0"
+
+#: dialogs/rc.cpp:50
+msgid "Exchange Rate/Price Editor"
+msgstr "Vaihtokurssi / hinta -muokkain"
+
+#: dialogs/rc.cpp:55
+msgid "Convert from"
+msgstr "Muunna tästä"
+
+#: dialogs/rc.cpp:58
+msgid "Convert to"
+msgstr "Muunna tähän"
+
+#: dialogs/rc.cpp:61
+msgid "To amount"
+msgstr "Summaan"
+
+#: dialogs/rc.cpp:62
+msgid "Exchange rate / Price"
+msgstr "Vaihtokurssi / hinta"
+
+#: dialogs/rc.cpp:64
+msgid ""
+"xx\n"
+"xx"
+msgstr ""
+"xx\n"
+"xx"
+
+#: dialogs/rc.cpp:68
+msgid "Currencies"
+msgstr "Valuutat"
+
+#: dialogs/rc.cpp:72
+msgid "real ID"
+msgstr "todellinen tunniste"
+
+#: dialogs/rc.cpp:73 dialogs/rc.cpp:722
+msgid "ID"
+msgstr "tunniste"
+
+#: dialogs/rc.cpp:74
+msgid "X"
+msgstr "X"
+
+#: dialogs/rc.cpp:76 dialogs/rc.cpp:459
+msgid "Online Source"
+msgstr "Online-tietolähde"
+
+#: dialogs/rc.cpp:78 dialogs/rc.cpp:278 dialogs/rc.cpp:312 dialogs/rc.cpp:684
+msgid "F1"
+msgstr "F1"
+
+#: dialogs/rc.cpp:80
+msgid "If this button is not activated, select the base currency first."
+msgstr "Jos tämä painike ei ole aktivoitu, valitse oletusvaluutta ensin."
+
+#: dialogs/rc.cpp:81
+msgid ""
+"Press this button to close the dialog. If the button is not activated, "
+"select your base currency."
+msgstr ""
+"Paina tätä painiketta sulkeaksesi ikkuna. Jos painike ei ole aktivoitu, "
+"valitse oletusvaluutta ensin."
+
+#: dialogs/rc.cpp:82
+msgid "Edit Equity"
+msgstr "Muuta pääomaa"
+
+#: dialogs/rc.cpp:86 dialogs/rc.cpp:410
+msgid "Smallest fraction:"
+msgstr "Pienin murto-osa:"
+
+#: dialogs/rc.cpp:87 dialogs/rc.cpp:408 dialogs/rc.cpp:440
+msgid "1 /"
+msgstr "1 /"
+
+#: dialogs/rc.cpp:88 dialogs/rc.cpp:405
+msgid "Investment Type:"
+msgstr "Sijoituksen tyyppi:"
+
+#: dialogs/rc.cpp:89 dialogs/rc.cpp:404
+msgid "Equity Name:"
+msgstr "Pääoman nimi:"
+
+#: dialogs/rc.cpp:90 dialogs/rc.cpp:409
+msgid "Market Symbol:"
+msgstr "Markkinatunnus:"
+
+#: dialogs/rc.cpp:91
+msgid "Price History"
+msgstr "Hintahistoria"
+
+#: dialogs/rc.cpp:97
+msgid "Edit Scheduled transaction"
+msgstr "Muokkaa ajoitettua tapahtumaa"
+
+#: dialogs/rc.cpp:98
+msgid "Schedule name:"
+msgstr "Ajoitetun tapahtuman nimi:"
+
+#: dialogs/rc.cpp:99
+msgid "Frequency:"
+msgstr "Toistuvuus:"
+
+#: dialogs/rc.cpp:100
+msgid "Number of selected periods between entries"
+msgstr "Kohtien välissä olevien valittujen aikavälien määrä"
+
+#: dialogs/rc.cpp:101
+msgid "Payment information"
+msgstr "Maksutiedot"
+
+#: dialogs/rc.cpp:105 dialogs/rc.cpp:160 dialogs/rc.cpp:247 dialogs/rc.cpp:752
+#: widgets/register.cpp:569
+msgid "C"
+msgstr "V"
+
+#: dialogs/rc.cpp:113
+msgid "Do nothing"
+msgstr "Älä tee mitään"
+
+#: dialogs/rc.cpp:116
+msgid "If this schedule occurs on the weekend:"
+msgstr "Jos tämä ajoitettu tapahtuma sattuu viikonlopulle:"
+
+#: dialogs/rc.cpp:117
+msgid "The amount is an estimate because it varies for each payment"
+msgstr "Summa ei ole tarkka, koska se vaihtelee jokaisella kerralla"
+
+#: dialogs/rc.cpp:118
+msgid "Enter this schedule into the register automatically when it is due"
+msgstr "Kirjaa ajoitettu tapahtuma automaattisesti tapahtumiin sen eräpäivänä"
+
+#: dialogs/rc.cpp:119
+msgid "This schedule will end at some time"
+msgstr "Ajoitettu tapahtuma päättyy aikanaan"
+
+#: dialogs/rc.cpp:120
+msgid "Number of transactions remaining:"
+msgstr "Jäljellä olevien tapahtumien määrä:"
+
+#: dialogs/rc.cpp:121
+msgid "Date of final transaction:"
+msgstr "Viimeisen tapahtuman päiväys:"
+
+#: dialogs/rc.cpp:125
+msgid "Reconciliation Wizard"
+msgstr "Yhteensovituksen ohjattu toiminto"
+
+#: dialogs/rc.cpp:127
+msgid ""
+"Reconciling your account assures, that your recordings match those of your "
+"institution and that there are no mistakes on either side. You should "
+"reconcile your account whenever you receive a statement from your "
+"institution.\n"
+"\n"
+"All relevant information necessary for this process is usually printed on "
+"your statement.\n"
+"\n"
+"On the next page you will verify, that the starting and ending balance are "
+"matching those on your statement. If not, please modify the figures."
+msgstr ""
+"Tilin yhteensovittamisen avulla voidaan varmistaa, että tapahtumat vastaavat "
+"tiliotteen tapahtumia, ja ettei ole tehty virheitä. On suositeltavaa, että "
+"yhteensovittaminen suoritetaan aina kun rahalaitos toimittaa uuden "
+"tiliotteen.\n"
+"\n"
+"Yleensä kaikki tarvittava tieto löytyy tiliotteesta.\n"
+"\n"
+"Seuraavalla sivulla voidaan varmistaa, että alku- ja loppusaldo täsmäävät "
+"tiliotteen kanssa. Jos ei, muuta lukuja."
+
+#: dialogs/rc.cpp:129
+msgid ""
+"KMyMoney calculates your loan payments automatically. The amounts can "
+"deviate from those calculated by the creditor. Therefore, you possibly have "
+"to adjust amortization, interest and other costs according to your "
+"statement.\n"
+"\n"
+"Please enter the following information found on your statement:"
+msgstr ""
+"Lainan maksuerät lasketaan automaattisesti. Erät voivat poiketa niistä jotka "
+"on laskettu luotonantajan taholta. Tämän takia lyhennyksen määrää, korkoa ja "
+"muita kuluja voidaan joutua muokkaamaan tiliotteen mukaiseksi.\n"
+"\n"
+"Syötä seuraava tieto tiliotteesta:"
+
+#: dialogs/rc.cpp:130
+msgid "Ending date of statement"
+msgstr "Tiliotteen päättymispäivä"
+
+#: dialogs/rc.cpp:131
+msgid "Starting date of statement"
+msgstr "Tiliotteen aloituspäivä"
+
+#: dialogs/rc.cpp:132
+msgid "Verify payments"
+msgstr "Varmista maksut"
+
+#: dialogs/rc.cpp:133 dialogs/rc.cpp:148 dialogs/rc.cpp:476 dialogs/rc.cpp:477
+#: dialogs/rc.cpp:508 dialogs/rc.cpp:513 dialogs/rc.cpp:518 dialogs/rc.cpp:532
+#: dialogs/rc.cpp:539 dialogs/rc.cpp:540 dialogs/rc.cpp:541 dialogs/rc.cpp:542
+#: dialogs/rc.cpp:543 dialogs/rc.cpp:552 dialogs/rc.cpp:553 dialogs/rc.cpp:554
+#: dialogs/rc.cpp:555 dialogs/rc.cpp:556 dialogs/rc.cpp:565 dialogs/rc.cpp:566
+#: dialogs/rc.cpp:567 dialogs/rc.cpp:568 dialogs/rc.cpp:569 dialogs/rc.cpp:578
+#: dialogs/rc.cpp:579 dialogs/rc.cpp:580 dialogs/rc.cpp:581 dialogs/rc.cpp:582
+#: dialogs/rc.cpp:591 dialogs/rc.cpp:592 dialogs/rc.cpp:593 dialogs/rc.cpp:594
+#: dialogs/rc.cpp:595 dialogs/rc.cpp:603 dialogs/rc.cpp:604 dialogs/rc.cpp:605
+#: dialogs/rc.cpp:606 dialogs/rc.cpp:607 dialogs/rc.cpp:618 dialogs/rc.cpp:619
+#: dialogs/rc.cpp:621 dialogs/rc.cpp:636 dialogs/rc.cpp:637 dialogs/rc.cpp:638
+#: dialogs/rc.cpp:639 dialogs/rc.cpp:640 dialogs/rc.cpp:641 dialogs/rc.cpp:651
+#: dialogs/rc.cpp:652 dialogs/rc.cpp:654 dialogs/rc.cpp:657 dialogs/rc.cpp:658
+#: dialogs/rc.cpp:659 dialogs/rc.cpp:664 dialogs/rc.cpp:665 dialogs/rc.cpp:668
+#: dialogs/rc.cpp:670 dialogs/rc.cpp:672 dialogs/rc.cpp:674 dialogs/rc.cpp:676
+#: dialogs/rc.cpp:678 dialogs/rc.cpp:681 dialogs/rc.cpp:823 widgets/rc.cpp:167
+msgid "1"
+msgstr "1"
+
+#: dialogs/rc.cpp:136
+msgid ""
+"If your statement shows different amounts, please cancel this dialog and "
+"correct the false transactions or correct the values in this dialog. In the "
+"later case, KMyMoney will create an adjustment transaction and add it to the "
+"ledger."
+msgstr ""
+"Jos tiliotteessa näyttää olevan poikkeavia summia, peruuta tästä ikkunasta "
+"ja korjaa virheelliset tapahtumat, tai korjaa summat oikeiksi. Mikäli "
+"viimeinen vaihtoehto valitaan, ohjelma luo korjaustapahtuman ja lisää sen "
+"tapahtumiin."
+
+#: dialogs/rc.cpp:138
+msgid ""
+"In order to create the adjustment transaction, KMyMoney requires an account "
+"and possibly an interest category to assign the differences to. Please "
+"select an account and - if necessary - a category."
+msgstr ""
+"Korjaustapahtumaa varten tarvitaan tili, sekä mahdollisesti korkokategoria. "
+"Valitse tili ja tarvittaessa kategoria."
+
+#: dialogs/rc.cpp:140
+msgid "Interest-Category"
+msgstr "Korkokategoria"
+
+#: dialogs/rc.cpp:141
+msgid "Restarting postponed reconciliation"
+msgstr "Uudelleenkäynnistetään lykätty yhteensovittaminen"
+
+#: dialogs/rc.cpp:142
+msgid ""
+"You have previously postponed the reconciliation of this account. If you "
+"have entered charges or interests the last time you started reconciling this "
+"account you can modify these in the ledger later on.\n"
+"\n"
+"It is important, that you continue with the same statement you used when you "
+"postponed the reconciliation.\n"
+"\n"
+"All information you have entered into this wizard will be shown and all "
+"transactions that you already cleared are marked with a 'C'."
+msgstr ""
+"Tilin yhteensovittamista on lykätty aiemmin. Jos on syötetty veloituksia tai "
+"korkoja tilin viimeisen yhteensovittamisen jälkeen, voidaan niitä muokata "
+"myöhemmin tapahtumaikkunassa.\n"
+"\n"
+"On tärkeätä käyttää samaa tiliotetta, joka oli käytössä silloin kun "
+"yhteensovittamista aiemmin lykättiin.\n"
+"\n"
+"Kaikki tähän velhoon syötetyt tiedot tullaan näyttämään jatapahtumat jotka "
+"on jo varmistettu, on merkitty kirjaimella 'V'."
+
+#: dialogs/rc.cpp:143
+msgid "Statement Information"
+msgstr "Tiliotetieto"
+
+#: dialogs/rc.cpp:144 dialogs/rc.cpp:315 dialogs/rc.cpp:317 dialogs/rc.cpp:320
+#: dialogs/rc.cpp:321 dialogs/rc.cpp:329 dialogs/rc.cpp:330 dialogs/rc.cpp:333
+#: dialogs/rc.cpp:334 dialogs/rc.cpp:335 dialogs/rc.cpp:336 dialogs/rc.cpp:366
+msgid "x"
+msgstr "x"
+
+#: dialogs/rc.cpp:145
+msgid "Statement date:"
+msgstr "Tiliotteen päiväys:"
+
+#: dialogs/rc.cpp:146
+msgid "Starting balance of this statement:"
+msgstr "Tiliotteen alkusaldo:"
+
+#: dialogs/rc.cpp:147
+msgid "Ending balance of this statement:"
+msgstr "Tiliotteen loppusaldo:"
+
+#: dialogs/rc.cpp:149
+msgid "Interest / Charges"
+msgstr "Korot / veloitukset"
+
+#: dialogs/rc.cpp:150
+msgid ""
+"If necessary, enter information about interest or charges here. KMyMoney "
+"will create transactions and clear them directly for you."
+msgstr ""
+"Syötä tarvittaessa tiedot koroista ja veloituksista tähän. Tapahtumat "
+"luodaan ja varmistetaan automaattisesti."
+
+#: dialogs/rc.cpp:153
+msgid "Charges"
+msgstr "Veloitukset"
+
+#: dialogs/rc.cpp:154
+msgid "Enter Schedule"
+msgstr "Kirjaa ajoitettu tapahtuma"
+
+#: dialogs/rc.cpp:155
+msgid "Schedule Details"
+msgstr "Ajoitetun tapahtuman tarkat tiedot"
+
+#: dialogs/rc.cpp:156 dialogs/rc.cpp:348 dialogs/rc.cpp:389 widgets/rc.cpp:164
+msgid "Name:"
+msgstr "Nimi:"
+
+#: dialogs/rc.cpp:157 dialogs/rc.cpp:351 widgets/rc.cpp:165
+msgid "Type:"
+msgstr "Tyyppi:"
+
+#: dialogs/rc.cpp:168
+msgid "Enter"
+msgstr "Kirjaa"
+
+#: dialogs/rc.cpp:169
+msgid ""
+"Enter the transaction and advance the next due date of this schedule to the "
+"next payment date."
+msgstr "Kirjaa tapahtuma ja vaihda seuraavaksi eräpäiväksi tätä seuraava eräpäivä."
+
+#: dialogs/rc.cpp:171
+msgid ""
+"Do not enter the transaction but advance the next due date of this schedule "
+"to the next payment date."
+msgstr ""
+"Älä kirjaa tapahtumaa, vaan vaihda ainoastaan seuraavaksi eräpäiväksi tätä "
+"seuraava eräpäivä."
+
+#: dialogs/rc.cpp:172
+msgid "Ignore"
+msgstr "Ohita"
+
+#: dialogs/rc.cpp:173
+msgid ""
+"Do not enter or skip payments for this schedule but continue with the next "
+"schedule."
+msgstr "Älä syötä tai ohita tätä ajoitettua tapahtumaa, vaan jatka seuraavasta."
+
+#: dialogs/rc.cpp:175
+msgid "Cancel processing of schedule entry."
+msgstr "Peruuta ajoitetun tapahtuman käsittely."
+
+#: dialogs/rc.cpp:176
+msgid "Update Stock and Currency Prices"
+msgstr "Päivitä pörssi- ja valuuttakurssit"
+
+#: dialogs/rc.cpp:177
+msgid "List of known Equities, and the date they were last updated on."
+msgstr "Lista tunnetuista pääomista, sekä päiväys jolloin ne on viimeksi päivitetty."
+
+#: dialogs/rc.cpp:179
+msgid "Update All"
+msgstr "Päivitä kaikki"
+
+#: dialogs/rc.cpp:180
+msgid "Update Selected"
+msgstr "Päivitä valitut"
+
+#: dialogs/rc.cpp:181
+msgid "Status:"
+msgstr "Tila:"
+
+#: dialogs/rc.cpp:184
+msgid "QIF Export"
+msgstr "QIF-vienti"
+
+#: dialogs/rc.cpp:185
+msgid ""
+"From this dialog you are able to export transactions to a quicken compatible "
+"file, (known as a QIF file, because of the extension). Please enter the "
+"path to the QIF file or select it by clicking on the Browse button.\n"
+"\n"
+"You can choose the file's path, the account and the format of the QIF file "
+"(profile). Choose Account to export all the transactions between the "
+"specified dates or just categories. You can also limit the transactions "
+"that are exported by start and ending date. Once you have pressed the "
+"Export button a message box will appear when the export has completed "
+"detailing how many transactions, categories and payees were exported."
+msgstr ""
+"Ikkunassa voidaan luoda quicken-yhteensopivan tiedosto tapahtumista "
+"(tunnetaan myös QIF-tiedostona tiedostopäätteen vuoksi). Syötä polku QIF-"
+"tiedostolle, tai valitse tiedosto Selaa-painikkeen avulla.\n"
+"\n"
+"Tiedoston polku, tili sekä QIF-tiedoston muoto voidaan valita.Valitse "
+"aikaväli tai kategoria sekä tili jonka tapahtumista luodaan tiedosto. "
+"Tapahtumien määrää voidaan rajoittaa muuttamalla aloitus- ja "
+"lopetuspäivämääriä. Kun Luo-painiketta on painettu ja QIF-tiedoston luonti "
+"on valmis, kerrotaan yksityiskohtaisesti kuinka monta tapahtumaa, kategoriaa "
+"ja maksunsaajaa tiedostoon on viety."
+
+#: dialogs/rc.cpp:186
+msgid "File to export to:"
+msgstr "Vietävä tiedosto:"
+
+#: dialogs/rc.cpp:188
+msgid "Account to export"
+msgstr "Vietävä tili"
+
+#: dialogs/rc.cpp:189 dialogs/rc.cpp:297
+msgid "QIF Profile"
+msgstr "QIF-profiili"
+
+#: dialogs/rc.cpp:190 dialogs/rc.cpp:298 dialogs/rc.cpp:362
+#: widgets/kmymoneypriceview.cpp:145
+msgid "New..."
+msgstr "Uusi..."
+
+#: dialogs/rc.cpp:191
+msgid "Contents to Export"
+msgstr "Vietävä sisältö"
+
+#: dialogs/rc.cpp:194
+msgid "Date Range"
+msgstr "Päivämääräväli"
+
+#: dialogs/rc.cpp:199
+msgid "Search transactions"
+msgstr "Hae tapahtumia"
+
+#: dialogs/rc.cpp:200
+msgid "Criteria"
+msgstr "Kriteerit"
+
+#: dialogs/rc.cpp:201
+msgid "Define your search criteria"
+msgstr "Määrittele hakukriteerit"
+
+#: dialogs/kfindtransactiondlg.cpp:169 dialogs/rc.cpp:202
+msgid "Text"
+msgstr "Teksti"
+
+#: dialogs/rc.cpp:203
+msgid "Contains"
+msgstr "Sisältää"
+
+#: dialogs/rc.cpp:204
+msgid "Does not contain"
+msgstr "Ei sisällä"
+
+#: dialogs/rc.cpp:205
+msgid "Treat text as regular expression"
+msgstr "Käsittele teksti säännöllisenä lausekkeena"
+
+#: dialogs/rc.cpp:206
+msgid "Case sensitive"
+msgstr "Sama kirjainkoko"
+
+#: dialogs/rc.cpp:209
+msgid "Range"
+msgstr "Väli"
+
+#: dialogs/rc.cpp:210
+msgid ""
+"_: To (Date)\n"
+"To"
+msgstr "Päättyen"
+
+#: dialogs/rc.cpp:211
+msgid ""
+"_: From (Date)\n"
+"From"
+msgstr "Alkaen"
+
+#: dialogs/rc.cpp:213
+msgid "Search this amount"
+msgstr "Etsi summaa"
+
+#: dialogs/rc.cpp:214
+msgid "Search amount in the range"
+msgstr "Etsi summaa väliltä"
+
+#: dialogs/rc.cpp:215
+msgid ""
+"_: to (amount)\n"
+"to"
+msgstr "päättyen"
+
+#: dialogs/rc.cpp:216
+msgid ""
+"_: from (amount)\n"
+"from"
+msgstr "alkaen"
+
+#: dialogs/rc.cpp:220
+msgid "Select transactions without payees"
+msgstr "Valitse tapahtumat ilman maksunsaajia"
+
+#: dialogs/rc.cpp:221
+msgid "Select all"
+msgstr "Valitse kaikki"
+
+#: dialogs/rc.cpp:222
+msgid "Select none"
+msgstr "Älä valitse mitään"
+
+#: dialogs/rc.cpp:224
+msgid "Validity"
+msgstr "Kelvollisuus"
+
+#: dialogs/rc.cpp:226
+msgid "All states"
+msgstr "Kaikki tilat"
+
+#: dialogs/rc.cpp:230
+msgid "All types"
+msgstr "Kaikki tyypit"
+
+#: dialogs/rc.cpp:234
+msgid "Any transaction"
+msgstr "Kaikki tapahtumat"
+
+#: dialogs/rc.cpp:235
+msgid "Valid transaction"
+msgstr "Kelvollinen tapahtuma"
+
+#: dialogs/rc.cpp:236
+msgid "Invalid transaction"
+msgstr "Epäkelpo tapahtuma"
+
+#: dialogs/rc.cpp:237
+msgid "State"
+msgstr "Tila"
+
+#: dialogs/rc.cpp:238
+msgid "Search this number"
+msgstr "Etsi tätä numeroa"
+
+#: dialogs/rc.cpp:239
+msgid "Search number in range"
+msgstr "Etsi numeroa väliltä"
+
+#: dialogs/rc.cpp:240
+msgid ""
+"_: to (number)\n"
+"to"
+msgstr "päättyen"
+
+#: dialogs/rc.cpp:241
+msgid ""
+"_: from (number)\n"
+"from"
+msgstr "alkaen"
+
+#: dialogs/rc.cpp:242
+msgid "text"
+msgstr "teksti"
+
+#: dialogs/rc.cpp:243
+msgid "warning"
+msgstr "varoitus"
+
+#: dialogs/rc.cpp:244
+msgid "Result"
+msgstr "Tulos"
+
+#: dialogs/rc.cpp:254
+msgid "F"
+msgstr "J"
+
+#: dialogs/rc.cpp:257 dialogs/rc.cpp:844
+msgid "&Reset"
+msgstr "&Palauta"
+
+#: dialogs/rc.cpp:258
+msgid "&Find"
+msgstr "&Etsi"
+
+#: dialogs/rc.cpp:259
+msgid "GnuCash Import Options"
+msgstr "GnuCash-tuontivalinnat"
+
+#: dialogs/rc.cpp:260
+msgid "Use 'Help' for more information on these options"
+msgstr "Valitse 'Apua' saadaksesi lisätietoja valinnoista"
+
+#: dialogs/rc.cpp:261
+msgid "Investment Handling"
+msgstr "Sijoitustenhallinta"
+
+#: dialogs/rc.cpp:262
+msgid "One investment account for each stock"
+msgstr "Oma sijoitustili jokaiselle osakepääomalle"
+
+#: dialogs/rc.cpp:263
+msgid "One investment account for all stocks"
+msgstr "Yksi sijoitustili kaikille osakepääomille"
+
+#: dialogs/rc.cpp:264
+msgid "Prompt for an investment account for each stock"
+msgstr "Ehdota omaa sijoitustiliä jokaiselle osakepääomalle"
+
+#: dialogs/rc.cpp:265
+msgid "Online price quotes"
+msgstr "Online-noteeraus"
+
+#: dialogs/rc.cpp:266
+msgid "Use Finance::Quote for share price quotes"
+msgstr "Käytä Finance::Quote-luokkaa osakekursseille"
+
+#: dialogs/rc.cpp:267
+msgid "Scheduled Transactions"
+msgstr "Ajoitetut tapahtumat"
+
+#: dialogs/rc.cpp:268
+msgid "Drop suspect scheduled transactions"
+msgstr "Poista epäilyttävät ajoitetut tapahtumat"
+
+#: dialogs/rc.cpp:269
+msgid "Decoding option"
+msgstr "Purkuasetukset"
+
+#: dialogs/rc.cpp:270
+msgid "Decode using"
+msgstr "Pura käyttäen"
+
+#: dialogs/rc.cpp:271
+msgid "Transaction Notes option"
+msgstr "Tapahtuman muistiinpanoasetukset"
+
+#: dialogs/rc.cpp:272
+msgid "Use transaction notes on non-split transactions"
+msgstr "Käytä tapahtuman muistiinpanoja ei-jaotellussa tapahtumassa"
+
+#: dialogs/rc.cpp:273
+msgid "Debug Options"
+msgstr "Virheenjäljitysasetukset"
+
+#: dialogs/rc.cpp:274
+msgid "General debug data"
+msgstr "Yleiset virheenjäljitystiedot"
+
+#: dialogs/rc.cpp:275
+msgid "Display XML data"
+msgstr "Näytä XML-sisältö"
+
+#: dialogs/rc.cpp:276
+msgid "Anonymize data"
+msgstr "Poista henkilötiedot"
+
+#: dialogs/rc.cpp:281
+msgid "Online Quotes - Select price source"
+msgstr "Online-noteeraukset - valitse hintalähde"
+
+#: dialogs/rc.cpp:284
+msgid "This price source is not known to KMyMoney. Please select an option below."
+msgstr "Hintalähdettä ei tunnisteta. Valitse mitä tehdään."
+
+#: dialogs/rc.cpp:285
+msgid "Do not perform online quotes for this investment"
+msgstr "Älä hae online-noteerauksia tälle sijoitukselle"
+
+#: dialogs/rc.cpp:286
+msgid "Select a known KMyMoney source from the list below"
+msgstr "Valitse tunnettu lähde listalta alta"
+
+#: dialogs/rc.cpp:287
+msgid ""
+"Use the following name for the price source.\n"
+"(Click Help for further information.)"
+msgstr ""
+"Käytä seuraavaa nimeä hintalähteelle.\n"
+"(Paina Apua-painiketta lisätietoja varten.)"
+
+#: dialogs/rc.cpp:288
+msgid "Always use this selection for this price source."
+msgstr "Käytä aina tätä valintaa tälle hintalähteelle."
+
+#: dialogs/rc.cpp:289
+msgid "QIF Import"
+msgstr "QIF-tuonti"
+
+#: dialogs/rc.cpp:290
+msgid ""
+"From this dialog you are able to import transactions from a Quicken<b>&trade;"
+"</b> compatible file, (known as a QIF file, because of the extension).<p>\n"
+"\n"
+"Please enter the path to the QIF file or select it by clicking on the Browse "
+"button. Once you have the file's path press the Import button and KMyMoney "
+"will import all the transactions, categories and payees it finds."
+msgstr ""
+"Ikkunassa voidaan tuoda quicken-yhteensopivan tiedostotapahtumista "
+"(tunnetaan myös QIF-tiedostona tiedostopäätteen vuoksi).\n"
+"Syötä polku QIF-tiedostolle, tai valitse tiedosto <b>Selaa</b>-painikkeen "
+"avulla. Kun polku on annettu, tuodaan <b>Tuo</b>-painikkeella kaikki "
+"tapahtumat, kategoriat ja maksunsaajat jotka löydetään."
+
+#: dialogs/rc.cpp:291
+msgid "QIF File to Import:"
+msgstr "Tuotava QIF-tiedosto:"
+
+#: dialogs/rc.cpp:292
+msgid "Import options"
+msgstr "Tuontiasetukset"
+
+#: dialogs/rc.cpp:293
+msgid "Bank statement"
+msgstr "Tiliote"
+
+#: dialogs/rc.cpp:294
+msgid "Other application"
+msgstr "Muu sovellus"
+
+#: dialogs/rc.cpp:295
+msgid ""
+"Select <b>Bank statement</b> turns on automatic category matching which is "
+"turned off in case of <b>Historic data</b>. Use the latter if you import "
+"files from other Personal Finance Management software."
+msgstr ""
+"Valitsemalla <b>tiliote</b> asetetaan päälle automaattinen kategorian "
+"sovittaminen, joka on käännetty pois <b>Historiatieto</b>-tapauksessa. "
+"Jälkimmäistä kannattaa käyttää mikäli tuodaan tiedostoja muista "
+"taloudenhallinta-ohjelmista."
+
+#: dialogs/rc.cpp:296
+msgid "Source of QIF"
+msgstr "QIF-lähde"
+
+#: dialogs/rc.cpp:302
+msgid "Verify Import"
+msgstr "Varmista tuonti"
+
+#: dialogs/rc.cpp:304
+msgid "Ok"
+msgstr "Ok"
+
+#: dialogs/rc.cpp:306
+msgid "MyDialog"
+msgstr "OmaDialogi"
+
+#: dialogs/rc.cpp:310
+msgid "File Information"
+msgstr "Tiedoston tiedot"
+
+#: dialogs/rc.cpp:316
+msgid "Last modified on"
+msgstr "Viimeksi muokattu"
+
+#: dialogs/rc.cpp:319
+msgid "Base currency"
+msgstr "Oletusvaluutta"
+
+#: dialogs/rc.cpp:322
+msgid "Created on"
+msgstr "Luotu"
+
+#: dialogs/rc.cpp:325
+msgid "Accounts/Categories"
+msgstr "Tilit / kategoriat"
+
+#: dialogs/rc.cpp:328
+msgid "Closed"
+msgstr "Suljettu"
+
+#: dialogs/rc.cpp:331
+msgid "Prices"
+msgstr "Hinnat"
+
+#: dialogs/rc.cpp:337
+msgid "Splits"
+msgstr "Jaottelut"
+
+#: dialogs/rc.cpp:338
+msgid "Price Editor"
+msgstr "Hintamuokkain"
+
+#: dialogs/rc.cpp:339
+msgid "Show all stored prices"
+msgstr "Näytä kaikki tallennetut hinnat"
+
+#: dialogs/rc.cpp:343
+msgid "Delete Range..."
+msgstr "Poista väliltä..."
+
+#: dialogs/rc.cpp:346
+msgid "New Account Dialog"
+msgstr "Uusi tili -dialogi"
+
+#: dialogs/rc.cpp:349
+msgid "Opening information"
+msgstr "Avaustiedot"
+
+#: dialogs/rc.cpp:350
+msgid "Currency:"
+msgstr "Valuutta:"
+
+#: dialogs/rc.cpp:352 dialogs/rc.cpp:793
+msgid "Date:"
+msgstr "Päiväys:"
+
+#: dialogs/rc.cpp:353
+msgid "Balance:"
+msgstr "Saldo:"
+
+#: dialogs/rc.cpp:355
+msgid "Last check number:"
+msgstr "Viimeinen sekkinumero:"
+
+#: dialogs/rc.cpp:356
+msgid "Notes:"
+msgstr "Merkinnät:"
+
+#: dialogs/rc.cpp:357
+msgid "No auto-VAT-assignment"
+msgstr "Ei automaattista ALV-kirjausta"
+
+#: dialogs/rc.cpp:358 dialogs/rc.cpp:441
+msgid "Price entry"
+msgstr "Hintalähde"
+
+#: dialogs/rc.cpp:359
+msgid "Preferred Account"
+msgstr "Suosikkitili"
+
+#: dialogs/rc.cpp:363
+msgid "Number:"
+msgstr "Numero:"
+
+#: dialogs/rc.cpp:364 dialogs/rc.cpp:395
+msgid "BIC"
+msgstr "BIC"
+
+#: dialogs/rc.cpp:367
+msgid "Hierarchy"
+msgstr "Hierarkia"
+
+#: dialogs/rc.cpp:368
+msgid "Subaccount"
+msgstr "Alitili"
+
+#: dialogs/rc.cpp:369
+msgid "Limits"
+msgstr "Rajat"
+
+#: dialogs/rc.cpp:370
+msgid ""
+"This page allows to setup certain limits. KMyMoney will warn you when the "
+"account balance reaches a limit."
+msgstr ""
+"Rajoitusarvojen asettaminen. Mikäli tilin saldo menee asetetun rajan yli, "
+"siitä annetaan varoitus. Rajoituksia ei ole pakko antaa."
+
+#: dialogs/rc.cpp:372
+msgid "Absolute limit"
+msgstr "Absoluuttinen raja"
+
+#: dialogs/rc.cpp:373
+msgid "Maximum credit limit"
+msgstr "Maksimiluottoraja"
+
+#: dialogs/rc.cpp:374
+msgid "Minimum balance"
+msgstr "Minimisaldo"
+
+#: dialogs/rc.cpp:375
+msgid "Early warning"
+msgstr "Ennakkovaroitus"
+
+#: dialogs/rc.cpp:377
+msgid "VAT details"
+msgstr "ALV-tiedot"
+
+#: dialogs/rc.cpp:378
+msgid "VAT category"
+msgstr "ALV-kategoria"
+
+#: dialogs/rc.cpp:379
+msgid "VAT percentage"
+msgstr "ALV-prosentti"
+
+#: dialogs/rc.cpp:380
+msgid "Enable auto VAT assignment"
+msgstr "Ota käyttöön automaattinen ALV-kirjaus"
+
+#: dialogs/rc.cpp:381
+msgid "Amount entered"
+msgstr "Syötetty määrä"
+
+#: dialogs/rc.cpp:382
+msgid "Gross amount"
+msgstr "Bruttosumma"
+
+#: dialogs/rc.cpp:383
+msgid "Net amount"
+msgstr "Nettosumma"
+
+#: dialogs/rc.cpp:384
+msgid "Include on Tax Reports"
+msgstr "Sisällytä veroraporttiin"
+
+#: dialogs/rc.cpp:387
+msgid "New Institution Dialog"
+msgstr "Uusi rahalaitos -dialogi"
+
+#: dialogs/rc.cpp:388
+msgid "Institution Details"
+msgstr "Rahalaitoksen tiedot"
+
+#: dialogs/rc.cpp:390
+msgid "City:"
+msgstr "Kaupunki:"
+
+#: dialogs/rc.cpp:394
+msgid "Routing Number:"
+msgstr "Reititysnumero:"
+
+#: dialogs/rc.cpp:398
+msgid "New Budget"
+msgstr "Uusi budjetti"
+
+#: dialogs/rc.cpp:403
+msgid "New Equity"
+msgstr "Uusi pääoma"
+
+#: dialogs/rc.cpp:406 dialogs/rc.cpp:407
+msgid "Trading Symbol of the stock or mutual fund, not required."
+msgstr "Osakkeen tai sijoitusrahaston tunnus, ei pakollinen."
+
+#: dialogs/rc.cpp:414 dialogs/rc.cpp:415
+msgid "Name of the company, or mutual fund."
+msgstr "Yhtiön tai sijoitusrahaston nimi."
+
+#: dialogs/rc.cpp:418
+msgid "New File Dialog"
+msgstr "Uusi tiedosto -dialogi"
+
+#: dialogs/rc.cpp:419
+msgid ""
+"Use this dialog to enter personal information about yourself.\n"
+"\n"
+"All information is optional and is provided to personalize\n"
+"your KMyMoney file."
+msgstr ""
+"Tässä ikkunassa voidaan syöttää henkilökohtaisia tietoja.\n"
+"\n"
+"Mitään tietoja ei ole pakko antaa, niitä käytetään ainoastaan \n"
+"henkilökohtaistamaan KMyMoney-tiedostosi."
+
+#: dialogs/rc.cpp:430
+msgid "New Investment wizard"
+msgstr "Uuden sijoituksen ohjattu toiminto"
+
+#: dialogs/rc.cpp:431
+msgid "Investment Type"
+msgstr "Sijoitustyyppi"
+
+#: dialogs/rc.cpp:432
+msgid "This wizard allows you to create a new investment."
+msgstr "Tämä ohjattu toiminto auttaa luomaan uuden sijoituksen."
+
+#: dialogs/rc.cpp:433
+msgid ""
+"The first step in this process requires to select the type of investment. "
+"The following steps collect more details about the investment from you."
+msgstr ""
+"Ensimmäiseksi tulee valita sijoitustyyppi. Tämän jälkeen kerätään "
+"lisätietoja sijoituksesta."
+
+#: dialogs/rc.cpp:434
+msgid "Type of investment"
+msgstr "Sijoitustyyppi"
+
+#: dialogs/rc.cpp:438
+msgid "Investment details"
+msgstr "Sijoituksen lisätiedot"
+
+#: dialogs/rc.cpp:439
+msgid ""
+"Enter the details below and click <b>Next</b> to continue entering the "
+"online update details."
+msgstr ""
+"Syötä lisätiedot alle ja jatka online-tietojen syöttöön painamalla "
+"<b>Seuraava</b> -painiketta. "
+
+#: dialogs/rc.cpp:442 dialogs/rc.cpp:728
+msgid "Fraction"
+msgstr "Murto-osa"
+
+#: dialogs/rc.cpp:443
+msgid "Trading Currency"
+msgstr "Kaupankäyntivaluutta"
+
+#: dialogs/rc.cpp:444
+msgid "Full name"
+msgstr "Koko nimi"
+
+#: dialogs/rc.cpp:445
+msgid "AMEX"
+msgstr "AMEX"
+
+#: dialogs/rc.cpp:446
+msgid "EUREX"
+msgstr "EUREX"
+
+#: dialogs/rc.cpp:447
+msgid "FUND"
+msgstr "FUND"
+
+#: dialogs/rc.cpp:448
+msgid "NASDAQ"
+msgstr "NASDAQ"
+
+#: dialogs/rc.cpp:449
+msgid "NYSE"
+msgstr "NYSE"
+
+#: dialogs/rc.cpp:450
+msgid "XETRA"
+msgstr "XETRA"
+
+#: dialogs/rc.cpp:451
+msgid "Trading symbol"
+msgstr "Kauppatunnus"
+
+#: dialogs/rc.cpp:452
+msgid "Identification"
+msgstr "Tunniste"
+
+#: dialogs/rc.cpp:453
+msgid "Enter the ticker symbol (e.g. RHAT)."
+msgstr "Syötä osaketunnus (esim. NOK)."
+
+#: dialogs/rc.cpp:454
+msgid "Enter the CUSIP/ISIN/WKN identification number here"
+msgstr "Syötä CUSIP / ISIN / WKN -tunnistenumero tähän"
+
+#: dialogs/rc.cpp:455
+msgid "Trading market"
+msgstr "Pörssi"
+
+#: dialogs/rc.cpp:456
+msgid "Online Update"
+msgstr "Online-päivitys"
+
+#: dialogs/rc.cpp:457
+msgid ""
+"Select an online source and click <b>Finish</b> to store the investment "
+"data. If you don't want to use online updates, just leave the data as is."
+msgstr ""
+"Valitse online-tietolähde ja paina <b>Valmis</b>-painiketta tallentaaksesi "
+"sijoitustiedot. Jos ei haluta käyttää online-päivitystä, jätä tieto "
+"muuttamatta."
+
+#: dialogs/rc.cpp:458
+msgid "Use Finance::Quote"
+msgstr "Käytä Finance::Quote-luokkaa"
+
+#: dialogs/rc.cpp:460
+msgid "Factor"
+msgstr "Kerroin"
+
+#: dialogs/rc.cpp:461
+msgid "New Loan Wizard"
+msgstr "Uuden lainan ohjattu toiminto"
+
+#: dialogs/rc.cpp:462
+msgid "New Loan Account Wizard"
+msgstr "Uusi lainatili -ohjattu toiminto"
+
+#: dialogs/rc.cpp:463
+msgid ""
+"\n"
+"Welcome to the New Loan Account Wizard which will guide you through the "
+"creation of a new loan e.g. for your home, your car or any other loan that "
+"you pay or gain interest for.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Uusi lainatili -ohjattu toiminto opastaa uuden lainatilin luonnissa. "
+"Tällaisia lainoja ovat esimerkiksi talo- tai autolaina, tai jotkin muut "
+"lainat joista maksetaan tai saadaan korkoa.\n"
+"\n"
+"Varmista että lainaa koskevat tiedot on käsillä. Yleensä ne "
+"löytyvätlainasopimuksesta tai viimeisestä tiliotteesta."
+
+#: dialogs/rc.cpp:464
+msgid "Edit Loan Account Wizard"
+msgstr "Lainatilin muokkauksen ohjattu toiminto"
+
+#: dialogs/rc.cpp:465
+msgid ""
+"\n"
+"Welcome to the Edit Loan Account Wizard. Please use this wizard to modify "
+"information about your loan account.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Lainatilin muokkauksen ohjattu toiminto opastaa lainatilin tietojen "
+"muokkaamisessa.\n"
+"\n"
+"Varmista että lainaa koskevat tiedot on käsillä. Yleensä ne "
+"löytyvätlainasopimuksesta tai viimeisestä tiliotteesta."
+
+#: dialogs/rc.cpp:467
+msgid ""
+"\n"
+"In the first step, KMyMoney will ask you some general information about the "
+"loan account to be created."
+msgstr ""
+"\n"
+"Ensinmäiseksi kysytään joitakin yleistietoja luotavaa lainatiliä varten."
+
+#: dialogs/rc.cpp:468 dialogs/rc.cpp:522 dialogs/rc.cpp:610
+msgid "1. General Information"
+msgstr "1. Yleistiedot"
+
+#: dialogs/rc.cpp:469
+msgid ""
+"\n"
+"2. Calculate Loan\n"
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"2. Laske laina\n"
+"\n"
+"3. Maksut"
+
+#: dialogs/rc.cpp:470
+msgid "Edit selection"
+msgstr "Muuta valintaa"
+
+#: dialogs/rc.cpp:471
+msgid ""
+"\n"
+"Please select, which data of the loan you want to modify."
+msgstr ""
+"\n"
+"Valitse, mitä tietoa lainasta halutaan muuttaa."
+
+#: dialogs/rc.cpp:472
+msgid "Modify the interest rate"
+msgstr "Korkoprosentin muuttaminen"
+
+#: dialogs/rc.cpp:473
+msgid "Modify additional fees"
+msgstr "Muiden kulujen muuttaminen"
+
+#: dialogs/rc.cpp:474
+msgid "Modify other loan information"
+msgstr "Muiden lainatietojen muuttaminen"
+
+#: dialogs/rc.cpp:475
+msgid "Effective date"
+msgstr "Voimaanastumispäivä"
+
+#: dialogs/rc.cpp:478
+msgid "When should the changes become active?"
+msgstr "Milloin muutokset tulevat voimaan?"
+
+#: dialogs/rc.cpp:479
+msgid "Lending or borrowing money"
+msgstr "Lainan antaminen tai ottaminen"
+
+#: dialogs/rc.cpp:480
+msgid ""
+"\n"
+"Do you borrow or lend money?"
+msgstr ""
+"\n"
+"Otetaanko tai annetaanko lainaa?"
+
+#: dialogs/rc.cpp:483
+msgid "Name of the loan"
+msgstr "Lainan nimi"
+
+#: dialogs/rc.cpp:484
+msgid ""
+"\n"
+"How do you want to call this loan? Examples for names are 'car loan', "
+"'school loan', 'home owner loan'."
+msgstr ""
+"\n"
+"Miten laina nimetään (esim. autolaina, opintolaina tai asuntolaina)?"
+
+#: dialogs/rc.cpp:486
+msgid "TextLabel6"
+msgstr "TekstiKyltti6"
+
+#: dialogs/rc.cpp:487
+msgid "TextLabel7"
+msgstr "TekstiKyltti7"
+
+#: dialogs/rc.cpp:488
+msgid "Type of interest"
+msgstr "Korkotyyppi"
+
+#: dialogs/rc.cpp:489
+msgid ""
+"\n"
+"Is the interest of this loan fixed over a period of time or is it adapted "
+"from time to time? If the interest rate changes during the amortization "
+"phase of the loan you should choose the option 'variable interest rate'."
+msgstr ""
+"\n"
+"Onko korko kiinteä koko laina-ajan, vai tarkistetaanko sitä aika ajoin? Jos "
+"korko muuttuu lainan kuoletusaikana, valitse 'muuttuva korko'."
+
+#: dialogs/rc.cpp:490
+msgid "Fixed interest rate"
+msgstr "Kiinteä korko"
+
+#: dialogs/rc.cpp:491
+msgid "Variable interest rate"
+msgstr "Muuttuva korko"
+
+#: dialogs/rc.cpp:492
+msgid "Payments?"
+msgstr "Maksut?"
+
+#: dialogs/rc.cpp:493
+msgid ""
+"\n"
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?"
+msgstr ""
+"\n"
+"Onko lainaa lyhennetty aikaisemmin jo (riippumatta siitä, onko niitä "
+"kirjattu KMyMoneyhin)?"
+
+#: dialogs/rc.cpp:494
+msgid "No, no payments were made yet."
+msgstr "Ei, maksuja ei ole maksettu vielä."
+
+#: dialogs/rc.cpp:495
+msgid "Yes, payments were made."
+msgstr "Kyllä, maksuja on maksettu."
+
+#: dialogs/rc.cpp:496
+msgid ""
+"Note: Payments made to obtain the loan (e.g. Dissagio) are not considered as "
+"payments in this context."
+msgstr ""
+"Huomautus: lainanhankintakuluja (esim. toimitusmaksut) ei pidetä maksuerinä "
+"tässä yhteydessä."
+
+#: dialogs/rc.cpp:497
+msgid "Recording payments?"
+msgstr "Kirjaa maksut?"
+
+#: dialogs/rc.cpp:498
+msgid ""
+"\n"
+"Do you want to record all payments of this loan with KMyMoney?"
+msgstr ""
+"\n"
+"Kirjataanko kaikki tämän lainan maksut KMyMoneyn avulla?"
+
+#: dialogs/rc.cpp:499
+msgid "Yes, record all payments."
+msgstr "Kyllä, kirjaa kaikki maksut."
+
+#: dialogs/rc.cpp:500
+msgid "No, only record payments since the beginning of this year."
+msgstr "Ei, kirjaa maksut ainoastaan alkaen tämän vuoden alusta."
+
+#: dialogs/rc.cpp:501
+msgid "Date of next interest change"
+msgstr "Seuraava korontarkistuspäivä"
+
+#: dialogs/rc.cpp:502
+msgid ""
+"\n"
+"Select the date when the interest rate for this loan will be modified and "
+"the frequency of the future changes."
+msgstr ""
+"\n"
+"Valitse seuraava korontarkistuspäivä, sekä toistuvuus tuleville "
+"tarkistuksille."
+
+#: dialogs/rc.cpp:503
+msgid "Next interest change on"
+msgstr "Seuraava korontarkistuspäivä"
+
+#: dialogs/rc.cpp:504
+msgid "Time until next change"
+msgstr "Seuraavaan tarkistukseen on aikaa"
+
+#: dialogs/rc.cpp:506 dialogs/rc.cpp:571
+msgid ""
+"\n"
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"\n"
+"Syötä lainanlyhennyksen ja korkojen yhteissumma, tai jätä kenttä tyhjäksi "
+"jolloin sen arvo lasketaan."
+
+#: dialogs/rc.cpp:507
+msgid "Current amount"
+msgstr "Nykyinen summa"
+
+#: dialogs/rc.cpp:510
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the amount for principal and interest then enter "
+"it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"Lasketaan joko uusi korkoprosentti tai lyhennysten ja koron summa. Jos "
+"lyhennyserä ja korko tiedetään, ne tulee syöttää tänne.\n"
+"\n"
+"Summa lasketaan automaattisesti, mikäli kenttä on jätetty tyhjäksi."
+
+#: dialogs/rc.cpp:512 dialogs/rc.cpp:545
+msgid ""
+"\n"
+"Please enter the interest rate or leave the field empty to calculate it."
+msgstr ""
+"\n"
+"Syötä korko, tai jätä se tyhjäksi jolloin se lasketaan automaattisesti."
+
+#: dialogs/rc.cpp:514
+msgid "Current rate"
+msgstr "Nykyinen korko"
+
+#: dialogs/rc.cpp:516
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the interest rate then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"Lasketaan joko uusi korko, tai summa lyhennykselle ja korolle. Jos korko "
+"tiedetään, syötä se tänne.\n"
+"\n"
+"Kenttä voidaan jättää tyhjäksi, jolloin korko lasketaan automaattisesti."
+
+#: dialogs/rc.cpp:517
+msgid "Date of first payment"
+msgstr "Ensimmäinen maksupäivä"
+
+#: dialogs/rc.cpp:520
+msgid "Calculate Loan"
+msgstr "Laske laina"
+
+#: dialogs/rc.cpp:521
+msgid ""
+"\n"
+"You have successfully entered the general information about your loan. Next, "
+"KMyMoney needs some information about the calculation of the loan."
+msgstr ""
+"\n"
+"Lainan yleistiedot on kirjattu onnistuneesti. Seuraavaksi tarvitaan joitakin "
+"tietoja lainan laskemista varten."
+
+#: dialogs/rc.cpp:523 dialogs/rc.cpp:611
+msgid ""
+"\n"
+"2. Calculate Loan"
+msgstr ""
+"\n"
+"2. Laske laina"
+
+#: dialogs/rc.cpp:524 dialogs/rc.cpp:612
+msgid ""
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"3. Maksut"
+
+#: dialogs/rc.cpp:526
+msgid ""
+"\n"
+"How often will there be payments made to this loan?"
+msgstr ""
+"\n"
+"Kuinka usein lainaa tullaan maksamaan?"
+
+#: dialogs/rc.cpp:527
+msgid "Interest calculation"
+msgstr "Koron laskeminen"
+
+#: dialogs/rc.cpp:528
+msgid ""
+"\n"
+"When does the actual interest rate get calculated?"
+msgstr ""
+"\n"
+"Koska todellinen korko lasketaan?"
+
+#: dialogs/rc.cpp:529
+msgid "When the payment is received."
+msgstr "Kun maksu on vastaanotettu."
+
+#: dialogs/rc.cpp:530
+msgid "When the payment is due."
+msgstr "Maksun eräpäivänä."
+
+#: dialogs/rc.cpp:534 dialogs/rc.cpp:547 dialogs/rc.cpp:560 dialogs/rc.cpp:573
+#: dialogs/rc.cpp:586 dialogs/rc.cpp:598 dialogs/rc.cpp:679
+msgid "Loan amount:"
+msgstr "Lainasumma:"
+
+#: dialogs/rc.cpp:535 dialogs/rc.cpp:548 dialogs/rc.cpp:561 dialogs/rc.cpp:574
+#: dialogs/rc.cpp:587 dialogs/rc.cpp:599 dialogs/rc.cpp:633 dialogs/rc.cpp:671
+msgid "Interest rate:"
+msgstr "Korkoprosentti:"
+
+#: dialogs/rc.cpp:536 dialogs/rc.cpp:549 dialogs/rc.cpp:562 dialogs/rc.cpp:575
+#: dialogs/rc.cpp:588 dialogs/rc.cpp:600 dialogs/rc.cpp:669
+msgid "Term:"
+msgstr "Laina-aika:"
+
+#: dialogs/rc.cpp:537 dialogs/rc.cpp:550 dialogs/rc.cpp:563 dialogs/rc.cpp:576
+#: dialogs/rc.cpp:589 dialogs/rc.cpp:601 dialogs/rc.cpp:622 dialogs/rc.cpp:630
+#: dialogs/rc.cpp:677
+msgid "Principal + Interest:"
+msgstr "Lyhennys + korko:"
+
+#: dialogs/rc.cpp:538 dialogs/rc.cpp:551 dialogs/rc.cpp:564 dialogs/rc.cpp:577
+#: dialogs/rc.cpp:583 dialogs/rc.cpp:585 dialogs/rc.cpp:590 dialogs/rc.cpp:602
+msgid "Final amortization payment"
+msgstr "Lainan viimeinen erä"
+
+#: dialogs/rc.cpp:557
+msgid "Duration"
+msgstr "Kesto"
+
+#: dialogs/rc.cpp:558
+msgid ""
+"\n"
+"Please enter the term of this loan or leave the field empty to calculate it. "
+"The term is the time that is required to fully repay the loan. This time "
+"might be different from the time your loan contract is signed for."
+msgstr ""
+"\n"
+"Syötä laina-aika, tai jätä kenttä tyhjäksi, jolloin se lasketaan "
+"automaattisesti. Laina-aika on aika joka tarvitaan lainan takaisinmaksuun. "
+"Tämä aika saattaa poiketa siitä, mitä on kirjattu velkakirjaan (esim. "
+"lyhennysvapaat jaksot)."
+
+#: dialogs/rc.cpp:584
+msgid ""
+"\n"
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"\n"
+"Syötä viimeisen lyhennyserän määrä, tai jätä kenttä tyhjäksi jolloin se "
+"lasketaan automaattisesti."
+
+#: dialogs/rc.cpp:596
+msgid "Calculation Overview"
+msgstr "Laskennan yleiskatsaus"
+
+#: dialogs/rc.cpp:597
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown in the overview below. You can "
+"accept these values by selecting \"Next\" or change them by choosing \"Back"
+"\" to return to the input field for the information you want to change."
+msgstr ""
+"\n"
+"Lainan yleistiedot on laskettu, alla on nähtävissä yleiskuva siitä. Arvot "
+"voidaan hyväksyä \"Seuraava\"-painikkeen avulla, tai niitä voidaan palata "
+"muokkaamaan \"Takaisin\"-painiketta painamalla."
+
+#: dialogs/rc.cpp:609
+msgid ""
+"\n"
+"In the following steps, KMyMoney supports you in setting up categories and "
+"schedules for your loan payments."
+msgstr ""
+"\n"
+"Seuraavaksi luodaan kategoriat ja ajoitetut tapahtumat lainan maksuerille."
+
+#: dialogs/rc.cpp:614
+msgid ""
+"\n"
+"Please select the category you want to assign the interest payments to or "
+"create a new category."
+msgstr ""
+"\n"
+"Valitse kategoria johon korkomaksut liitetään, tai luo uusi kategoria."
+
+#: dialogs/rc.cpp:615
+msgid "Additional Fees"
+msgstr "Muut maksut"
+
+#: dialogs/rc.cpp:616
+msgid ""
+"\n"
+"If your regular payment contains any additional fees, click on the button "
+"\"Additional fees\" to enter them."
+msgstr ""
+"\n"
+"Jos säännöllinen maksuerä sisältää jotain muita maksuja, valitse \"Muut "
+"maksut\" niiden syöttämiseksi."
+
+#: dialogs/rc.cpp:617
+msgid "= periodical payment:"
+msgstr "= säännöllinen maksu:"
+
+#: dialogs/rc.cpp:623
+msgid ""
+"If no additional fees are included in your periodical payment or you have "
+"entered all such fees, then click on \"Next\"."
+msgstr ""
+"Jos muita maksuja ei ole sisällytetty säännöllisiin maksuihin, tai olet "
+"syöttänyt ne jo, jatka painamalla \"Seuraava\"-painiketta."
+
+#: dialogs/rc.cpp:625
+msgid ""
+"KMyMoney will create a schedule for this payment and reminds you whenever a "
+"payment must be made.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"KMyMoney luo ajoitetut tapahtumat maksuille ja tulee muistuttamaan milloin "
+"ne täytyy suorittaa.<p>\n"
+"Jos valittiin kaikkien maksujen kirjaaminen, niin päiväys on annettu jo. Jos "
+"valittiin tämän vuoden maksujen kirjaaminen, niin <b>Ensimmäinen eräpäivä</"
+"b> on myös päivä jolloin ensimmäinen maksu on tänä vuonna tehty."
+
+#: dialogs/rc.cpp:626
+msgid "First payment due on:"
+msgstr "Ensimmäinen eräpäivä:"
+
+#: dialogs/rc.cpp:627
+msgid "Make payment from/to:"
+msgstr "Luo maksu keneltä / kenelle:"
+
+#: dialogs/rc.cpp:629
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown below. If you want to accept these "
+"values use the \"Finish\" button to update your account, otherwise use the "
+"\"Back\" button to modify your settings."
+msgstr ""
+"\n"
+"Lainan tiedot on laskettu ja ne esitetään alla. Jos luvut voidaan hyväksyä, "
+"jatka painamalla \"Valmis\"-painiketta, jolloin tilitiedot päivitetään. "
+"Muussa tapauksessa palaa muuttamaan asetuksia \"Takaisin\"-painiketta "
+"painamalla."
+
+#: dialogs/rc.cpp:631
+msgid "Additional fees:"
+msgstr "Muut maksut:"
+
+#: dialogs/rc.cpp:632
+msgid "Total payment:"
+msgstr "Kokonaissumma:"
+
+#: dialogs/rc.cpp:634
+msgid "Valid from:"
+msgstr "Voimassa alkaen:"
+
+#: dialogs/rc.cpp:635
+msgid "Affected payments:"
+msgstr "Muuttuneet maksuerät:"
+
+#: dialogs/rc.cpp:645
+msgid "Press this to create a new asset account"
+msgstr "Paina tätä luodaksesi uusi omaisuustili"
+
+#: dialogs/rc.cpp:648
+msgid ""
+"\n"
+"This page summarizes the data you entered. If you need to modify anything, "
+"please use the \"Back\" button to go to respective page. Otherwise use the "
+"\"Finish\" button to create the account."
+msgstr ""
+"\n"
+"Tämä sivu vetää yhteen syötetyt tiedot. Jos niitä halutaan muuttaa, "
+"\"Takaisin\"-painikkeen avulla voidaan palata halutulle sivulle. Muussa "
+"tapauksessa jatka painamalla \"Valmis\"-painiketta luodaksesi tilit."
+
+#: dialogs/rc.cpp:650
+msgid "Payee:"
+msgstr "Maksunsaaja:"
+
+#: dialogs/rc.cpp:653
+msgid "First payment:"
+msgstr "Ensimmäinen maksu:"
+
+#: dialogs/rc.cpp:655
+msgid "Amount is:"
+msgstr "Yhteensä:"
+
+#: dialogs/rc.cpp:656
+msgid "Loan calculation"
+msgstr "Lainan laskenta"
+
+#: dialogs/rc.cpp:660
+msgid "Periodic Payment:"
+msgstr "Toistuva maksu:"
+
+#: dialogs/rc.cpp:661
+msgid "Additional Fees:"
+msgstr "Lisämaksut:"
+
+#: dialogs/rc.cpp:662
+msgid "Interest category:"
+msgstr "Korkokategoria:"
+
+#: dialogs/rc.cpp:663
+msgid "Payment from:"
+msgstr "Maksu tililtä:"
+
+#: dialogs/rc.cpp:666
+msgid "Next due date:"
+msgstr "Seuraava eräpäivä:"
+
+#: dialogs/rc.cpp:673
+msgid "Final Payment:"
+msgstr "Viimeinen maksu:"
+
+#: dialogs/rc.cpp:675
+msgid "Interest is due:"
+msgstr "Korko erääntyy:"
+
+#: dialogs/rc.cpp:680
+msgid "Payment frequency:"
+msgstr "Maksujen toistuvuus:"
+
+#: dialogs/rc.cpp:682
+msgid "Online Quote Configuration"
+msgstr "Asetukset online-noteerauksille"
+
+#: dialogs/rc.cpp:687
+msgid "Perl Location:"
+msgstr "Perl-ohjelman sijainti:"
+
+#: dialogs/rc.cpp:688
+msgid "Script:"
+msgstr "Komentosarja:"
+
+#: dialogs/rc.cpp:690
+msgid "Reassign payees"
+msgstr "Uudelleenaseta maksunsaajat"
+
+#: dialogs/rc.cpp:691
+msgid ""
+"The transactions associated with the selected payees need to be re-assigned "
+"to a different payee before the selected payees can be deleted. Please "
+"select a payee from the list below."
+msgstr ""
+"Valitut maksunsaajat liittyvät joihinkin tapahtumiin. Tapahtumien "
+"maksunsaajat täytyy vaihtaa toisiin ennen valittujen maksunsaajien "
+"poistamista. Valitse maksunsaaja alla olevalta listalta."
+
+#: dialogs/rc.cpp:692
+msgid "Available payees:"
+msgstr "Käytettävissä olevat maksunsaajat:"
+
+#: dialogs/rc.cpp:693
+msgid "Assign deleted names to the above selected payee's matching list"
+msgstr "Liitä poistetut nimet yllä valitun maksunsaajan osumalistaan?"
+
+#: dialogs/rc.cpp:696
+msgid "PluginDlg"
+msgstr "PluginDlg"
+
+#: dialogs/rc.cpp:697
+msgid "PlugIn"
+msgstr "Liitännäinen"
+
+#: dialogs/rc.cpp:698 widgets/transaction.cpp:1071
+#: widgets/transaction.cpp:1658
+msgid "Status"
+msgstr "Tila"
+
+#: dialogs/rc.cpp:699
+msgid "Feature"
+msgstr "Ominaisuus"
+
+#: dialogs/rc.cpp:703
+msgid "Reconciliation Dialog"
+msgstr "Yhteensovitus-ikkuna"
+
+#: dialogs/rc.cpp:704
+msgid ""
+"This dialog will assist in helping you to balance your account.\n"
+"\n"
+"Click on an appropriate transaction within one of the two list views to mark "
+"it as reconciled. To create a transaction or edit\n"
+"a transaction you can return to the register by clicking on the Edit "
+"Transactions button.\n"
+"\n"
+"Your account is balanced when the Difference is Zero. Click on the Finish "
+"button to save the reconciled transactions."
+msgstr ""
+"Tilien yhteensovittaminen.\n"
+"\n"
+"Valitse haluttu tapahtuma kahden listan näkymältä merkitäksesi se "
+"yhteensovitetuksi. Uuden tapahtuman luomiseksi tai aiemman tapahtuman "
+"muokkaamiseksi voidaan palata tapahtumamuokkaimeen valitsemalla \"Muuta "
+"tapahtumia\" -painike.\n"
+"\n"
+"Tili on yhteensovitettu kun tiliotteen ja tapahtumien erotus on nolla. "
+"Valitsemalla \"Valmis\" tallennetaan yhteensovitetut tapahtumat. "
+
+#: dialogs/rc.cpp:705
+msgid "Withdrawals"
+msgstr "Nostot"
+
+#: dialogs/rc.cpp:707 dialogs/rc.cpp:708 dialogs/rc.cpp:822
+msgid "$"
+msgstr "$"
+
+#: dialogs/rc.cpp:710
+msgid "Previous Balance:"
+msgstr "Aiempi saldo:"
+
+#: dialogs/rc.cpp:711 dialogs/rc.cpp:713 dialogs/rc.cpp:715 dialogs/rc.cpp:717
+#: dialogs/rc.cpp:820
+msgid "0"
+msgstr "0"
+
+#: dialogs/rc.cpp:712
+msgid "Ending Balance:"
+msgstr "Loppusaldo:"
+
+#: dialogs/rc.cpp:714
+msgid "Cleared Balance:"
+msgstr "Varmistettu saldo:"
+
+#: dialogs/rc.cpp:716
+msgid "Difference:"
+msgstr "Erotus:"
+
+#: dialogs/rc.cpp:718
+msgid "Edit Transactions..."
+msgstr "Muokkaa tapahtumia..."
+
+#: dialogs/rc.cpp:721
+msgid "Security List Editor"
+msgstr "Arvopaperilistan muokkaus"
+
+#: dialogs/rc.cpp:726
+msgid "Market"
+msgstr "Markkinat"
+
+#: dialogs/rc.cpp:729
+msgid "Cash Fraction"
+msgstr "Käsiraha"
+
+#: dialogs/rc.cpp:730
+msgid "Add..."
+msgstr "Lisää..."
+
+#: dialogs/rc.cpp:732 widgets/kmymoneypriceview.cpp:157
+msgid "Delete..."
+msgstr "Poista..."
+
+#: dialogs/rc.cpp:733
+msgid "Show national currencies"
+msgstr "Näytä kansalliset valuutat"
+
+#: dialogs/rc.cpp:735
+msgid "KMyMoney - Select Database"
+msgstr "KMyMoney - Valitse tietokanta"
+
+#: dialogs/rc.cpp:736
+msgid "CAUTION!"
+msgstr "HUOMIO!"
+
+#: dialogs/rc.cpp:737
+msgid ""
+"<font color=\"#ff2727\">This software is still in an experimental stage, and "
+"there are still some known response time problems. Please be patient; we are "
+"working on them.\n"
+"As always, please make sure you have adequate backups of your data.</font>"
+msgstr ""
+"<font color=\"#ff2727\">Ohjelmisto on edelleen keskeneräinen, ja on "
+"olemassa joitakin tunnettuja suorituskykyongelmia. Ole kärsivällinen; "
+"ongelmien kanssa työskennellään.\n"
+"Kuten aina, varmista että sinulla on ajantasaiset varmuuskopiot.</font>"
+
+#: dialogs/rc.cpp:738
+msgid "Database Type"
+msgstr "Tietokannan tyyppi"
+
+#: dialogs/rc.cpp:739
+msgid "Database Name"
+msgstr "Tietokannan nimi"
+
+#: dialogs/rc.cpp:740
+msgid "Host Name"
+msgstr "Palvelin"
+
+#: dialogs/rc.cpp:741
+msgid "User Name"
+msgstr "Käyttäjätunnus"
+
+#: dialogs/rc.cpp:743
+msgid "Preload &all data"
+msgstr "Esilataa kaikki tiedot"
+
+#: dialogs/rc.cpp:745
+msgid "&Generate SQL"
+msgstr "Luo S&QL-lauseet"
+
+#: dialogs/rc.cpp:747
+msgid "Ca&ncel"
+msgstr "&Peruuta"
+
+#: dialogs/rc.cpp:762 widgets/rc.cpp:172
+msgid "Sort options"
+msgstr "Lajitteluasetukset"
+
+#: dialogs/rc.cpp:763
+msgid "Use default"
+msgstr "Käytä oletusta"
+
+#: dialogs/rc.cpp:767
+msgid "Correct splits"
+msgstr "Korjaa jaottelut"
+
+#: dialogs/rc.cpp:769
+msgid "How do you want to proceed?"
+msgstr "Miten jatketaan?"
+
+#: dialogs/rc.cpp:770
+msgid "Continue to edit splits"
+msgstr "Jatka jaotteluiden muokkausta"
+
+#: dialogs/rc.cpp:771
+#, c-format
+msgid "Change total amount of transaction to %1."
+msgstr "Vaihda tapahtuman kokonaissummaksi %1."
+
+#: dialogs/rc.cpp:772
+msgid "Distribute difference of %1 among all splits."
+msgstr "Jaa erotus %1 tasan kaikkien jaotteluiden kesken."
+
+#: dialogs/rc.cpp:773
+msgid "Leave %1 unassigned."
+msgstr "Jätä %1 määrittelemättä."
+
+#: dialogs/rc.cpp:776
+msgid "Split transaction"
+msgstr "Jaa tapahtuma"
+
+#: dialogs/rc.cpp:777
+msgid "<b>11,00<b>"
+msgstr "<b>11,00<b>"
+
+#: dialogs/rc.cpp:778
+msgid "<b>111,00<b>"
+msgstr "<b>111,00<b>"
+
+#: dialogs/rc.cpp:779
+msgid "Unassigned"
+msgstr "Määrittelemätön"
+
+#: dialogs/rc.cpp:780
+msgid "Sum of splits"
+msgstr "Jaottelujen summa"
+
+#: dialogs/rc.cpp:781
+msgid "100,00"
+msgstr "100,00"
+
+#: dialogs/rc.cpp:782
+msgid "Transaction amount"
+msgstr "Tapahtuman määrä"
+
+#: dialogs/rc.cpp:783
+msgid "Merge"
+msgstr "Yhdistä"
+
+#: dialogs/rc.cpp:784
+msgid "Merges splits with the same category to one split"
+msgstr "Yhdistää samaan kategoriaan kuuluvat jaottelut yhdeksi"
+
+#: dialogs/rc.cpp:785
+msgid ""
+"In case you have multiple split entries to the same category and you like to "
+"keep them as a single split, press this button. The amount for identical "
+"categories will be added and stored in a single split for that category."
+msgstr ""
+"Mikäli on useita samaan kategoriaan kuuluvia jaotteluja, ne voidaan yhdistää "
+"tämän painikkeen avulla yhdeksi. Samojen kategorioiden summat lasketaan "
+"yhteen ja tallennetaan yksittäisinä tapahtumina."
+
+#: dialogs/rc.cpp:786
+msgid "Clear &Zero"
+msgstr "Poista &nollat"
+
+#: dialogs/rc.cpp:787
+msgid "Removes all splits that have a value of zero."
+msgstr "Poistaa kaikki jaottelut joiden arvo on nolla."
+
+#: dialogs/rc.cpp:791
+msgid "New price entry"
+msgstr "Uuden hinnan määritys"
+
+#: dialogs/rc.cpp:799
+msgid "Void mark"
+msgstr "Tyhjä merkki"
+
+#: dialogs/rc.cpp:800
+msgid "Opening Balance text"
+msgstr "Alkusaldon teksti"
+
+#: dialogs/rc.cpp:801
+msgid "Type field text"
+msgstr "Tyyppikentän teksti"
+
+#: dialogs/rc.cpp:802
+msgid "Account delimiter"
+msgstr "Tilierotin"
+
+#: dialogs/rc.cpp:804
+msgid "Attempt to match similar transactions"
+msgstr "Yritä täsmätä samankaltaiset tapahtumat"
+
+#: dialogs/rc.cpp:806 dialogs/rc.cpp:808
+msgid "The format of the dates in the QIF file."
+msgstr "Päivämäärämuoto QIF-tiedostossa"
+
+#: dialogs/rc.cpp:809 dialogs/rc.cpp:811
+msgid ""
+"If a QIF file contains date entries with years represented with two digits "
+"then either an apostrophe or a slash may be used to delimit the year in the "
+"dates for certain centuries. This enables 1905 to be distinguished from "
+"2005. Specify here which range of years will have year delimited by an "
+"apostrophe (eg. for Quicken this is usually 1900-1949)."
+msgstr ""
+"Mikäli QIF-tiedosto sisältää päiväyksiä joissa vuodet on esitettynä kahdella "
+"numerolla, on mahdollista, että heittomerkkiä tai väliviivaa on käytetty "
+"erottamaan ne eri vuosisadoista. Tämä mahdollistaa vuoden 1905 erottamisen "
+"vuodesta 2005.Määrittele, mikä vuosialue käyttää erottimena heittomerkkiä "
+"(esim. Quickenille se on yleensä 1900-1949)."
+
+#: dialogs/rc.cpp:810
+msgid "Apostrophe Handling"
+msgstr "Heittomerkin käsittely"
+
+#: dialogs/rc.cpp:812
+msgid "Amounts"
+msgstr "Summat"
+
+#: dialogs/rc.cpp:813
+msgid "Field"
+msgstr "Kenttä"
+
+#: dialogs/rc.cpp:814
+msgid "QIF-Record"
+msgstr "QIF-tietue"
+
+#: dialogs/rc.cpp:815 dialogs/rc.cpp:833
+msgid "Decimal Symbol"
+msgstr "Desimaalisymboli"
+
+#: dialogs/rc.cpp:816
+msgid "Thousand Delimiter"
+msgstr "Tuhatlukujen erotin"
+
+#: dialogs/rc.cpp:817
+msgid "SortColumnInvisible"
+msgstr "SortColumnInvisible"
+
+#: dialogs/rc.cpp:819
+msgid "T"
+msgstr "T"
+
+#: dialogs/rc.cpp:821
+msgid "Split-Value"
+msgstr "Jaottelun arvo"
+
+#: dialogs/rc.cpp:824
+msgid "Commission"
+msgstr "Toimeksianto"
+
+#: dialogs/rc.cpp:825
+msgid "O"
+msgstr "O"
+
+#: dialogs/rc.cpp:826
+msgid "2"
+msgstr "2"
+
+#: dialogs/rc.cpp:828
+msgid "I"
+msgstr "I"
+
+#: dialogs/rc.cpp:829
+msgid "3"
+msgstr "3"
+
+#: dialogs/rc.cpp:831
+msgid "Q"
+msgstr "Q"
+
+#: dialogs/rc.cpp:832
+msgid "4"
+msgstr "4"
+
+#: dialogs/rc.cpp:834
+msgid "Thousands Separator"
+msgstr "Tuhatlukujen erotin"
+
+#: dialogs/rc.cpp:836
+msgid "Output filter location"
+msgstr "Ulostulosuodattimen sijainti"
+
+#: dialogs/rc.cpp:837
+msgid "Input filter file type"
+msgstr "Sisääntulosuodattimen tiedostotyyppi"
+
+#: dialogs/rc.cpp:838
+msgid "*.qif"
+msgstr "*.qif"
+
+#: dialogs/rc.cpp:839
+msgid "Input filter location"
+msgstr "Sisääntulosuodattimen sijainti"
+
+#: dialogs/rc.cpp:843
+msgid "Rename"
+msgstr "Uudelleennimeä"
+
+#: dialogs/kselecttransactionsdlg.cpp:44
+msgid "Select Transaction"
+msgstr "Valitse tapahtuma"
+
+#: dialogs/kselecttransactionsdlg.cpp:45
+msgid "Select a transaction and press the OK button or use Cancel to select none."
+msgstr ""
+"Valitse tapahtuma ja paina OK-painiketta, tai ohita valinta painamalla "
+"Peruuta-painiketta."
+
+#: dialogs/knewinvestmentwizard.cpp:62
+msgid "Investment detail wizard"
+msgstr "Sijoituksen yksityiskohdat -ohjattu toiminto"
+
+#: dialogs/knewinvestmentwizard.cpp:82
+msgid "Security detail wizard"
+msgstr "Arvopaperien yksityiskohdat -ohjattu toiminto"
+
+#: dialogs/knewaccountdlg.cpp:121 dialogs/knewinvestmentwizard.cpp:109
+msgid ""
+"_: default price mode\n"
+"<default>"
+msgstr "<oletus>"
+
+#: dialogs/knewaccountdlg.cpp:122 dialogs/knewinvestmentwizard.cpp:110
+msgid "Price per share"
+msgstr "Osakkeen yksikköhinta"
+
+#: dialogs/knewaccountdlg.cpp:123 dialogs/knewinvestmentwizard.cpp:111
+msgid "Total for all shares"
+msgstr "Osakkeiden kokonaishinta"
+
+#: dialogs/knewinvestmentwizard.cpp:129
+msgid "This wizard allows you to modify the selected investment."
+msgstr "Tämä ohjattu toiminto auttaa valitun sijoituksen muokkaamisessa."
+
+#: dialogs/knewinvestmentwizard.cpp:132
+msgid "This wizard allows you to modify the selected security."
+msgstr "Tämä ohjattu toiminto auttaa valitun arvopaperin muokkaamisessa."
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid ""
+"The selected symbol is already on file. Do you want to reuse the existing "
+"security?"
+msgstr ""
+"Valittu tunnus on jo tiedostossa. Uudelleenkäytetäänköolemassa olevaa "
+"arvopaperia?"
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid "Security found"
+msgstr "Arvopaperi löydetty"
+
+#: dialogs/knewinvestmentwizard.cpp:309
+msgid "Unable to create all objects for the investment"
+msgstr "Ei kyetä luomaan kaikkia kohteita sijoitukselle"
+
+#: dialogs/keditequityentrydlg.cpp:78
+msgid "Change the price information of the selected entry."
+msgstr "Muuta valitun tietolähteen hintatietoa."
+
+#: dialogs/kaccountselectdlg.cpp:64 widgets/kmymoneybriefschedule.cpp:59
+msgid "&Skip"
+msgstr "&Ohita"
+
+#: dialogs/kaccountselectdlg.cpp:66 widgets/kmymoneybriefschedule.cpp:61
+msgid "Skip this transaction"
+msgstr "Ohita tämä tapahtuma"
+
+#: dialogs/kaccountselectdlg.cpp:67
+msgid "Use this to skip importing this transaction and proceed with the next one."
+msgstr "Älä tuo tätä tapahtumaa vaan jatka seuraavasta."
+
+#: dialogs/kaccountselectdlg.cpp:72
+msgid "Create a new account/category"
+msgstr "Luo uusi tili / kategoria"
+
+#: dialogs/kaccountselectdlg.cpp:73
+msgid "Use this to add a new account/category to the file"
+msgstr "Tämän avulla voidaan lisätä uusi tili tai kategoria tiedostoon"
+
+#: dialogs/kaccountselectdlg.cpp:77
+msgid "&Abort"
+msgstr "&Keskeytä"
+
+#: dialogs/kaccountselectdlg.cpp:79
+msgid "Abort the import operation and dismiss all changes"
+msgstr "Keskeytä tuontitoiminto ja hylkää kaikki muutokset"
+
+#: dialogs/kaccountselectdlg.cpp:80
+msgid ""
+"Use this to abort the import. Your financial data will be in the state "
+"before you started the QIF import."
+msgstr ""
+"Keskeytä tuontitoiminto. Taloustiedot tullaan palauttamaan QIF-tuontia "
+"edeltäneeseen tilaan."
+
+#: dialogs/knewaccountdlg.cpp:110
+msgid "Is a sub account"
+msgstr "Tili on alitili"
+
+#: dialogs/knewaccountdlg.cpp:184
+msgid "VAT account"
+msgstr "ALV-tili"
+
+#: dialogs/knewaccountdlg.cpp:474
+msgid ""
+"You have not specified a name.\n"
+"Please fill in this field."
+msgstr ""
+"Nimeä ei ole määritelty.\n"
+"Täytä nimi tähän kenttään."
+
+#: dialogs/knewaccountdlg.cpp:482
+msgid "Please select a parent account."
+msgstr "Valitse ylätason tili"
+
+#: dialogs/knewaccountdlg.cpp:489 dialogs/knewaccountdlg.cpp:1029
+msgid "<No Institution>"
+msgstr "<Ei rahalaitosta>"
+
+#: dialogs/knewaccountdlg.cpp:552
+msgid ""
+"An account named <b>%1</b> already exists. You cannot create a second "
+"account with the same name."
+msgstr ""
+"Tilinimi <b>%1</b> on jo käytössä. Ei ole sallittua luoda kahta samannimistä "
+"tiliä."
+
+#: dialogs/knewaccountdlg.cpp:567
+msgid ""
+"A category named <b>%1</b> already exists. You cannot create a second "
+"category with the same name."
+msgstr ""
+"Kategorian nimi <b>%1</b> on jo käytössä. Ei ole sallittua luoda kahta "
+"samannimistä kategoriaa."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid ""
+"You have selected to suppress the display of unused categories in the "
+"KMyMoney configuration dialog. The category you just created will therefore "
+"only be shown if it is used. Otherwise, it will be hidden in the accounts/"
+"categories view."
+msgstr ""
+"Asetukset-ikkunassa on poistettu näkyvistä käyttämättömät kategoriat. Äsken "
+"luotu kategoria tullaan näyttämään vasta kun sitä käytetään. Muussa "
+"tapauksessa se on piilotettu tilit / kategoriat -näkymässä."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid "Hidden categories"
+msgstr "Piilotetut kategoriat"
+
+#: dialogs/knewaccountdlg.cpp:927 dialogs/knewaccountdlg.cpp:979
+#, c-format
+msgid "Is a sub account of %1"
+msgstr "On %1 :n alitili"
+
+#: dialogs/knewaccountdlg.cpp:1082
+msgid "Cannot add institution"
+msgstr "Rahalaitosta ei voida lisätä"
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid ""
+"This dialog does not allow to create new payees. Please pick a payee from "
+"the list."
+msgstr ""
+"Tässä ikkunassa ei voida luoda uusia maksunsaajia. Valitse maksunsaaja "
+"listalta."
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid "Payee creation"
+msgstr "Maksunsaajan luonti"
+
+#: dialogs/kimportdlg.cpp:69
+msgid "Use this to start the import operation"
+msgstr "Käytä tätä aloittaaksesi tuontitoiminto"
+
+#: dialogs/kimportdlg.cpp:110
+msgid ""
+"%1|Import files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Tuotavissa olevat tiedostot\n"
+"%2|Kaikki tiedostot (*.*)"
+
+#: dialogs/kimportdlg.cpp:111
+msgid "Import File..."
+msgstr "Tiedostoa tuodaan..."
+
+#: dialogs/knewloanwizard.cpp:124
+msgid "Create a new category"
+msgstr "Luo uusi kategoria"
+
+#: dialogs/knewloanwizard.cpp:125
+msgid "Use this to open the new account editor"
+msgstr "Tämän avulla avataan uuden tilin muokkaustyökalu"
+
+#: dialogs/knewloanwizard.cpp:129
+msgid "&Additional fees..."
+msgstr "&Muut maksut..."
+
+#: dialogs/knewloanwizard.cpp:131
+msgid "Enter additional fees"
+msgstr "Syötä muut maksut"
+
+#: dialogs/knewloanwizard.cpp:132
+msgid ""
+"Use this to add any additional fees other than principal and interest "
+"contained in your periodical payments."
+msgstr ""
+"Tässä lisätään maksutapahtumaan säännöllisesti kuuluvat muut maksut kuin "
+"lyhennyserät ja korot."
+
+#: dialogs/knewloanwizard.cpp:139
+msgid "Use this to create a new account to which the initial payment should be made"
+msgstr "Käytä tätä luodaksesi uusi tili, jolle alustava maksu tulisi suorittaa."
+
+#: dialogs/knewloanwizard.cpp:208
+msgid "To whom do you make payments?"
+msgstr "Kenelle maksu suoritetaan?"
+
+#: dialogs/knewloanwizard.cpp:209
+msgid "Payments to"
+msgstr "Maksut kenelle"
+
+#: dialogs/knewloanwizard.cpp:214
+msgid "From whom do you expect payments?"
+msgstr "Keneltä maksuja tulee?"
+
+#: dialogs/knewloanwizard.cpp:215
+msgid "Payments from"
+msgstr "Maksut keneltä"
+
+#: dialogs/knewloanwizard.cpp:233
+msgid "Please enter the date, the first payment for this loan was/is due."
+msgstr ""
+"Syötä ensimmäisen päivämäärä jolloin maksu erääntyi / tulee erääntymään."
+"Huom. tarkista velkakirjasta ensimmäisen eräpäivän tiedot. Huomaa että "
+"ensimmäinen eräpäivä ei yleensä ole sama kuin sopimuksen allekirjoituspäivä."
+
+#: dialogs/knewloanwizard.cpp:235
+msgid ""
+"Note: Consult the loan contract for details of the first due date. Keep in "
+"mind, that the first due date usually differs from the date the contract was "
+"signed"
+msgstr ""
+"Huom.: Tarkista velkakirjasta ensimmäisen eräpäivän tiedot. Huomaa että "
+"ensimmäinen eräpäivä ei yleensä ole sama kuin sopimuksen allekirjoituspäivä."
+
+#: dialogs/knewloanwizard.cpp:240
+msgid ""
+"Please enter the original loan amount in the field below or leave it empty "
+"to be calculated."
+msgstr ""
+"Syötä lainan alkuperäinen summa alla olevaan kenttään, tai jätä se tyhjäksi "
+"jolloin se lasketaan automaattisesti."
+
+#: dialogs/knewloanwizard.cpp:248
+msgid "Please enter the date, the first payment for this loan was/is due this year."
+msgstr ""
+"Syötä päivä jolloin ensimmäinen erä tälle lainalle erääntyi / tulee "
+"erääntymään tänä vuonna."
+
+#: dialogs/knewloanwizard.cpp:250
+msgid ""
+"Note: You can easily figure out the date of the first payment if you consult "
+"the last statement of last year."
+msgstr ""
+"Huom. ensimmäisen maksun päivämäärä löytyy tarkistamalla viime vuoden "
+"viimeinen tiliote."
+
+#: dialogs/knewloanwizard.cpp:254
+msgid ""
+"Please enter the remaining loan amount of last years final statement in the "
+"field below. You should not leave this field empty."
+msgstr ""
+"Syötä viime vuoden lopussa ollut maksamaton lainan määrä. Kenttää ei pidä "
+"jättää tyhjäksi."
+
+#: dialogs/knewloanwizard.cpp:311 dialogs/knewloanwizard.cpp:326
+#: dialogs/knewloanwizard.cpp:341 dialogs/knewloanwizard.cpp:357
+#: dialogs/knewloanwizard.cpp:373
+msgid "calculate"
+msgstr "laske"
+
+#: dialogs/knewloanwizard.cpp:417
+msgid "borrowed"
+msgstr "otettu lainaksi"
+
+#: dialogs/knewloanwizard.cpp:419
+msgid "lend"
+msgstr "annettu lainaksi"
+
+#: dialogs/knewloanwizard.cpp:423
+msgid "not assigned"
+msgstr "ei määritelty"
+
+#: dialogs/knewloanwizard.cpp:430
+msgid "on reception"
+msgstr "vastaanotossa"
+
+#: dialogs/knewloanwizard.cpp:432
+msgid "on due date"
+msgstr "eräpäivänä"
+
+#: dialogs/knewloanwizard.cpp:471
+msgid ""
+"The loan wizard is unable to calculate two different values for your loan at "
+"the same time. Please enter a value for the %1 on this page or backup to the "
+"page where the current value to be calculated is defined and fill in a "
+"value."
+msgstr ""
+"Lainalle ei voida laskea yhdellä kertaa kahta puuttuvaa arvoa. Syötä arvo %1 "
+"tällä sivulla, tai ota ylös sivu jolla laskettava arvo on määritelty ja "
+"syötä arvo siinä."
+
+#: dialogs/knewloanwizard.cpp:500
+msgid ""
+"You selected, that payments have already been made towards this loan. This "
+"requires you to enter the loan amount exactly as found on your last "
+"statement."
+msgstr ""
+"On valittu vaihtoehto, että lainan maksaminen on jo aloitettu. Sen takia "
+"lainamääräksi tulee syöttää tarkalleen sama summa kuin viimeisessä "
+"tiliotteessa oli."
+
+#: dialogs/knewloanwizard.cpp:513
+msgid "interest rate"
+msgstr "korkoprosentti"
+
+#: dialogs/knewloanwizard.cpp:522
+msgid "term"
+msgstr "laina-aika"
+
+#: dialogs/knewloanwizard.cpp:532
+msgid "principal and interest"
+msgstr "pääoma ja korko"
+
+#: dialogs/knewloanwizard.cpp:743
+#, c-format
+msgid ""
+"The number of payments has been decremented and the final payment has been "
+"modified to %1."
+msgstr "Maksuerien määrää on vähennetty, ja viimeiseksi maksueräksi on muutettu %1."
+
+#: dialogs/knewloanwizard.cpp:751 dialogs/knewloanwizard.cpp:771
+#, c-format
+msgid "The final payment has been modified to %1."
+msgstr "Viimeiseksi maksueräksi on muutettu %1."
+
+#: dialogs/knewloanwizard.cpp:802
+msgid "KMyMoney has calculated a final payment of %1 for this loan."
+msgstr "Lainan viimeiseksi maksueräksi on laskettu %1."
+
+#: dialogs/knewloanwizard.cpp:817
+msgid ""
+"You have entered mis-matching information. Please backup to the appropriate "
+"page and update your figures or leave one value empty to let KMyMoney "
+"calculate it for you"
+msgstr ""
+"Syötetyt tiedot eivät täsmää. Ota ylös asiaankuuluva sivu, ja päivitä "
+"tiedot. Vaihtoehtoisesti jätä jokin kenttä tyhjäksi jolloin se lasketaan "
+"automaattisesti."
+
+#: dialogs/kfindtransactiondlg.cpp:230
+msgid "Warning: Filtering by Category will exclude all transfers from the results."
+msgstr ""
+"Varoitus: suodattaminen kategorioittain tulee jättämään kaikki tilisiirrot "
+"pois hakutuloksista."
+
+#: dialogs/kfindtransactiondlg.cpp:239
+msgid "(None)"
+msgstr "(ei mikään)"
+
+#: dialogs/kfindtransactiondlg.cpp:241
+msgid "Current selections: "
+msgstr "Nykyiset valinnat: "
+
+#: dialogs/kfindtransactiondlg.cpp:716
+msgid "Found %1 matching transactions (D %2 / P %3 = %4)"
+msgstr "Löytyi %1 täsmäävä(ä) tapahtuma(a) (T %2 / N %3 = %4)."
+
+#: dialogs/kfindtransactiondlg.cpp:719
+msgid "Found %1 matching transactions"
+msgstr "Löytyi %1 täsmäävä(ä) tapahtuma(a)"
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "The institution name field is empty. Please enter the name."
+msgstr "Rahalaitoksen nimikenttä on tyhjä. Syötä nimi."
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "Adding New Institution"
+msgstr "Uuden rahalaitoksen lisääminen"
+
+#: dialogs/kcsvprogressdlg.cpp:69
+msgid "C&lose"
+msgstr "&Sulje"
+
+#: dialogs/kcsvprogressdlg.cpp:247
+msgid " of "
+msgstr " / "
+
+#: widgets/kmymoneypriceview.cpp:126
+msgid "Commodity"
+msgstr "Hyödyke"
+
+#: widgets/kmymoneypriceview.cpp:130
+msgid "Source"
+msgstr "Lähde"
+
+#: widgets/kmymoneypriceview.cpp:143
+msgid "Price Options"
+msgstr "Hintojen asetukset"
+
+#: widgets/kmymoneypriceview.cpp:153
+msgid "Online Price Update..."
+msgstr "Online-hintojen päivitys..."
+
+#: widgets/kmymoneycombo.cpp:472 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+msgid "From"
+msgstr "Mistä"
+
+#: widgets/transaction.cpp:668
+msgid "Transaction is missing a category assignment."
+msgstr "Tapahtumalle ei ole määritelty kategoriaa."
+
+#: widgets/transaction.cpp:671
+msgid "The transaction has a missing assignment of <b>%1</b>."
+msgstr "Tapahtumalta puuttuu määrittely <b>%1</b>."
+
+#: widgets/transaction.cpp:874
+msgid "Sell"
+msgstr "Myy"
+
+#: widgets/transaction.cpp:876
+msgid "Buy"
+msgstr "Osta"
+
+#: widgets/kmymoneycombo.cpp:520 widgets/transaction.cpp:879
+#: widgets/transaction.cpp:1447
+msgid "Dividend"
+msgstr "Osinko"
+
+#: widgets/kmymoneycombo.cpp:518 widgets/transaction.cpp:881
+#: widgets/transaction.cpp:1453
+msgid "Yield"
+msgstr "Tuotto"
+
+#: widgets/transaction.cpp:886 widgets/transaction.cpp:1473
+msgid "Activity"
+msgstr "Aktivisuus"
+
+#: widgets/transaction.cpp:887
+msgid "Investment transaction"
+msgstr "Sijoitustapahtuma"
+
+#: widgets/transaction.cpp:1021 widgets/transaction.cpp:1114
+#: widgets/transaction.cpp:1165
+msgid "*** UNASSIGNED ***"
+msgstr "*** MÄÄRITTELEMÄTÖN ***"
+
+#: widgets/kmymoneycombo.cpp:517 widgets/transaction.cpp:1435
+msgid "Add shares"
+msgstr "Lisää osakkeita"
+
+#: widgets/kmymoneycombo.cpp:516 widgets/transaction.cpp:1438
+msgid "Remove shares"
+msgstr "Poista osakkeita"
+
+#: widgets/kmymoneycombo.cpp:522 widgets/transaction.cpp:1441
+msgid "Buy shares"
+msgstr "Osta osakkeita"
+
+#: widgets/kmymoneycombo.cpp:521 widgets/transaction.cpp:1444
+msgid "Sell shares"
+msgstr "Myy osakkeita"
+
+#: widgets/transaction.cpp:1450
+msgid "Reinvest Dividend"
+msgstr "Uudelleensijoita osinko"
+
+#: widgets/kmymoneycombo.cpp:515 widgets/transaction.cpp:1456
+msgid "Split shares"
+msgstr "Jaa osakkeet"
+
+#: widgets/transaction.cpp:1515
+msgid "Ratio"
+msgstr "Suhde"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:241
+msgid "%1 Bills."
+msgstr "%1 Laskut."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:257
+msgid "%1 Deposits."
+msgstr "%1 Talletukset."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:273
+msgid "%1 Transfers."
+msgstr "%1 Siirrot."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:355
+msgid ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+msgstr ".-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-."
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:57
+#: widgets/kmymoneyaccounttreeforecast.cpp:84
+msgid "Current"
+msgstr "Nykyinen"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:72
+#: widgets/kmymoneyaccounttreeforecast.cpp:93
+msgid "Total variation"
+msgstr "Kokonaismuutos"
+
+#: widgets/stdtransactionmatched.cpp:130
+msgid ""
+"KMyMoney has matched a downloaded transaction with a manually entered one "
+"(result above)"
+msgstr "Ladattu tapahtuma on täsmätty käsinsyötetyn tapahtuman kanssa. Tulokset yllä."
+
+#: widgets/stdtransactionmatched.cpp:138
+msgid "Bank entry:"
+msgstr "Pankin kirjaus:"
+
+#: widgets/stdtransactionmatched.cpp:166
+msgid "Your entry:"
+msgstr "Oma kirjaus:"
+
+#: widgets/kbudgetvalues.cpp:187
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a monthly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+"On syötetty budjettiarvoja käyttäen eri lähtöarvoja. Kuukausibudjetiksitulee "
+"<b>%1</b>. Käytetäänkö tätä arvoa kuukausibudjetin täyttämisessä?"
+
+#: widgets/kbudgetvalues.cpp:187 widgets/kbudgetvalues.cpp:206
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"_: Auto assignment (caption)\n"
+"Auto assignment"
+msgstr "Automaattimäärittely"
+
+#: widgets/kbudgetvalues.cpp:206
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a yearly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+"On syötetty budjettiarvoja käyttäen eri lähtöarvoja. Vuosibudjetiksitulee <b>"
+"%1</b>. Käytetäänkö tätä arvoa vuosibudjetin täyttämisessä?"
+
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"You have entered budget values using a different base which would result in "
+"an individual monthly budget of <b>%1</b>. Should this value be used to fill "
+"the monthly budgets?"
+msgstr ""
+"On syötetty budjettiarvoja käyttäen eri lähtöarvoja. "
+"Yksilölliseksikuukausibudjetiksi tulee <b>%1</b>. Käytetäänkö tätä arvoa "
+"kuukausibudjetin täyttämisessä?"
+
+#: widgets/kmymoneybriefschedule.cpp:62
+msgid "Use this button to skip this transaction"
+msgstr "Käytä tätä painiketta ohittaaksesi tämä tapahtuma"
+
+#: widgets/kmymoneybriefschedule.cpp:67
+msgid "Record this transaction into the register"
+msgstr "Tallenna tapahtuma tapahtumiin"
+
+#: widgets/kmymoneybriefschedule.cpp:68
+msgid "Use this button to record this transaction"
+msgstr "Tämän avulla voidaan tallentaa tapahtuma"
+
+#: widgets/kmymoneybriefschedule.cpp:96
+msgid "%1 of %2"
+msgstr "%1 / %2"
+
+#: widgets/kmymoneybriefschedule.cpp:109
+msgid "Payment on %1 for %2 with %3 transactions remaining occuring %4."
+msgstr "Maksu %1 %2 varten, %3 tapahtumaa jäljellä tapahtuen %4."
+
+#: widgets/kmymoneybriefschedule.cpp:115
+msgid "Payment on %1 for %2 occuring %4."
+msgstr "Maksu %1 %2 varten, tapahtuen %4."
+
+#: widgets/kmymoneybriefschedule.cpp:136
+msgid "%1 days overdue (%2 occurences)."
+msgstr "%1 päivää myöhässä (%2 esiintymää)."
+
+#: widgets/register.cpp:55
+msgid "Post date"
+msgstr "Kirjauspäivä"
+
+#: widgets/register.cpp:56
+msgid "Date entered"
+msgstr "Kirjauspäivä"
+
+#: widgets/register.cpp:60
+msgid "Entry order"
+msgstr "Kirjausten järjestys"
+
+#: widgets/register.cpp:63
+msgid "Reconcile state"
+msgstr "Yhteensovittamisen tila"
+
+#: widgets/register.cpp:440
+msgid ""
+"_: Deposits onto account\n"
+"Deposits"
+msgstr "Talletukset"
+
+#: widgets/register.cpp:442
+msgid ""
+"_: Payments towards credit card\n"
+"Payments"
+msgstr "Maksut"
+
+#: widgets/register.cpp:446
+msgid ""
+"_: Payments made from account\n"
+"Payments"
+msgstr "Maksut"
+
+#: widgets/register.cpp:448
+msgid ""
+"_: Payments made with credit card\n"
+"Charges"
+msgstr "Veloitukset"
+
+#: widgets/register.cpp:736
+msgid ""
+"_: Payment made from account\n"
+"Payment"
+msgstr "Maksu"
+
+#: widgets/register.cpp:737
+msgid ""
+"_: Deposit into account\n"
+"Deposit"
+msgstr "Talletus"
+
+#: widgets/register.cpp:813
+msgid ""
+"_: Payment made with credit card\n"
+"Charge"
+msgstr "Veloitus"
+
+#: widgets/register.cpp:814
+msgid ""
+"_: Payment towards credit card\n"
+"Payment"
+msgstr "Maksu"
+
+#: widgets/register.cpp:818 widgets/register.cpp:824
+msgid ""
+"_: Decrease of asset/liability value\n"
+"Decrease"
+msgstr "Laske arvoa"
+
+#: widgets/register.cpp:819 widgets/register.cpp:823
+msgid ""
+"_: Increase of asset/liability value\n"
+"Increase"
+msgstr "Nosta arvoa"
+
+#: widgets/register.cpp:2280
+msgid "Prior transactions possibly filtered"
+msgstr "Aikaisempia tapahtumia on voitu suodattaa"
+
+#: widgets/register.cpp:2284
+msgid "Last reconciliation"
+msgstr "Viimeksi yhteensovitettu"
+
+#: widgets/register.cpp:2291
+#, c-format
+msgid "Online Statement Balance: %1"
+msgstr "Online-tiliotteen saldo: %1"
+
+#: widgets/register.cpp:2295
+msgid "This year"
+msgstr "Tämä vuosi"
+
+#: widgets/kmymoneycombo.cpp:674 widgets/register.cpp:2296
+msgid "Last month"
+msgstr "Viime kuukausi"
+
+#: widgets/register.cpp:2297
+msgid "This month"
+msgstr "Tämä kuukausi"
+
+#: widgets/register.cpp:2298
+msgid "Last week"
+msgstr "Viime viikko"
+
+#: widgets/register.cpp:2299
+msgid "This week"
+msgstr "Tämä viikko"
+
+#: widgets/register.cpp:2300
+msgid "Yesterday"
+msgstr "Eilen"
+
+#: widgets/kmymoneycombo.cpp:666 widgets/register.cpp:2301
+msgid "Today"
+msgstr "Tänään"
+
+#: widgets/register.cpp:2302 widgets/register.cpp:2307
+msgid "Future transactions"
+msgstr "Tulevat tapahtumat"
+
+#: widgets/register.cpp:2303
+msgid "Next week"
+msgstr "Ensi viikko"
+
+#: widgets/kmymoneycalendar.cpp:131 widgets/register.cpp:2304
+msgid "Next month"
+msgstr "Ensi kuukausi"
+
+#: widgets/kmymoneycombo.cpp:670 widgets/register.cpp:2315
+msgid "Current fiscal year"
+msgstr "Kuluva tilivuosi"
+
+#: widgets/register.cpp:2316
+msgid "Previous fiscal year"
+msgstr "Edellinen tilivuosi"
+
+#: widgets/register.cpp:2317
+msgid "Next fiscal year"
+msgstr "Seuraava tilivuosi"
+
+#: widgets/register.cpp:2349
+msgid ""
+"_: Unknown payee\n"
+"Unknown"
+msgstr "Tuntematon"
+
+#: widgets/register.cpp:2368
+msgid ""
+"_: Unknown category\n"
+"Unknown"
+msgstr "Tuntematon"
+
+#: widgets/register.cpp:2387
+msgid ""
+"_: Unknown security\n"
+"Unknown"
+msgstr "Tuntematon"
+
+#: widgets/klistviewsearchline.cpp:249
+msgid "Search Columns"
+msgstr "Hakusarakkeet"
+
+#: widgets/klistviewsearchline.cpp:251
+msgid "All Visible Columns"
+msgstr "Kaikki näkyvät sarakkeet"
+
+#: widgets/klistviewsearchline.cpp:266
+msgid ""
+"_: Column number %1\n"
+"Column No. %1"
+msgstr "Sarakenro. %1"
+
+#: widgets/klistviewsearchline.cpp:461 widgets/registersearchline.cpp:286
+msgid "S&earch:"
+msgstr "&Hae:"
+
+#: widgets/kmymoneyaccountselector.cpp:110
+#: widgets/kmymoneyaccountselector.cpp:371
+msgid "Income categories"
+msgstr "Tulokategoriat"
+
+#: widgets/kmymoneyaccountselector.cpp:349
+#: widgets/kmymoneyaccountselector.cpp:350
+msgid "Favorites"
+msgstr "Suosikit"
+
+#: widgets/kmymoneyaccountselector.cpp:357
+msgid "Asset accounts"
+msgstr "Omaisuustilit"
+
+#: widgets/kmymoneyaccountselector.cpp:364
+msgid "Liability accounts"
+msgstr "Velkatilit"
+
+#: widgets/kmymoneyaccountselector.cpp:381
+msgid "Expense categories"
+msgstr "Menokategoriat"
+
+#: widgets/kmymoneyaccountselector.cpp:391
+msgid "Equity accounts"
+msgstr "Pääomatilit"
+
+#: widgets/kmymoneyaccounttreebase.cpp:120
+msgid "Total Balance"
+msgstr "Kokonaissaldo"
+
+#: widgets/kmymoneyaccounttreebase.cpp:124
+msgid "Total Value"
+msgstr "Kokonaisarvo"
+
+#: widgets/registersearchline.cpp:75
+msgid ""
+"_: label for status combo\n"
+"Stat&us"
+msgstr "&Tila"
+
+#: widgets/registersearchline.cpp:79
+msgid "Any status"
+msgstr "Mikä tahansa tila"
+
+#: widgets/registersearchline.cpp:80
+msgid "Imported"
+msgstr "Tuotu"
+
+#: widgets/registersearchline.cpp:81
+msgid "Matched"
+msgstr "Täsmätty"
+
+#: widgets/registersearchline.cpp:82
+msgid "Erroneous"
+msgstr "Virheellinen"
+
+#: widgets/registersearchline.cpp:83
+msgid "Not marked"
+msgstr "Ei merkitty"
+
+#: widgets/kmymoneyaccounttree.cpp:54
+msgid ""
+"_: Column heading for category in tax report\n"
+"Tax"
+msgstr "Vero"
+
+#: widgets/kmymoneyaccounttree.cpp:58
+msgid ""
+"_: Column heading for VAT category\n"
+"VAT"
+msgstr "ALV"
+
+#: widgets/kmymoneywizard.cpp:101
+msgid "Continue with next page"
+msgstr "Jatkuu seuraavalla sivulla"
+
+#: widgets/kmymoneywizard.cpp:103
+msgid "Finish wizard"
+msgstr "Päätä ohjattu toiminto"
+
+#: widgets/kmymoneywizard.cpp:121
+msgid "&Back"
+msgstr "&Takaisin"
+
+#: widgets/kmymoneywizard.cpp:122
+msgid "&Next"
+msgstr "&Seuraava"
+
+#: widgets/kmymoneywizard.cpp:123
+msgid "&Finish"
+msgstr "&Valmis"
+
+#: widgets/kmymoneywizard.cpp:274
+msgid "Step %1 of %2"
+msgstr "Kohta %1 / %2"
+
+#: widgets/kmymoneydateinput.cpp:235
+msgid ""
+"_: Enter todays date into date input widget\n"
+"T"
+msgstr "T"
+
+#: widgets/transactionform.cpp:302
+msgid "&Deposit"
+msgstr "&Talletus"
+
+#: widgets/transactionform.cpp:304 widgets/transactionform.cpp:313
+#: widgets/transactionform.cpp:323 widgets/transactionform.cpp:333
+msgid "&Transfer"
+msgstr "Tili&siirto"
+
+#: widgets/transactionform.cpp:306
+msgid "&Withdrawal"
+msgstr "&Nosto"
+
+#: widgets/transactionform.cpp:311
+msgid "&Payment"
+msgstr "&Maksu"
+
+#: widgets/transactionform.cpp:315
+msgid "&Charge"
+msgstr "&Veloitus"
+
+#: widgets/transactionform.cpp:321 widgets/transactionform.cpp:335
+msgid "&Decrease"
+msgstr "V&ähennä"
+
+#: widgets/transactionform.cpp:325 widgets/transactionform.cpp:331
+msgid "&Increase"
+msgstr "&Lisää"
+
+#: widgets/kmymoneyscheduledcalendar.cpp:42
+msgid "Select Schedules"
+msgstr "Valitse ajoitetut tapahtumat"
+
+#: widgets/kmymoneycalendar.cpp:108
+msgid "Select Style"
+msgstr "Valitse tyyli"
+
+#: widgets/kmymoneycalendar.cpp:128
+msgid "Choose Style"
+msgstr "Valitse tyyli"
+
+#: widgets/kmymoneycalendar.cpp:129
+msgid "Next year"
+msgstr "Ensi vuosi"
+
+#: widgets/kmymoneycalendar.cpp:130
+msgid "Previous year"
+msgstr "Edellinen vuosi"
+
+#: widgets/kmymoneycalendar.cpp:132
+msgid "Previous month"
+msgstr "Edellinen kuukausi"
+
+#: widgets/kmymoneycalendar.cpp:133
+msgid "Select a week"
+msgstr "Valitse viikko"
+
+#: widgets/kmymoneycalendar.cpp:134
+msgid "Select a month"
+msgstr "Valitse kuukausi"
+
+#: widgets/kmymoneycalendar.cpp:135
+msgid "Select a year"
+msgstr "Valitse vuosi"
+
+#: widgets/kmymoneycalendar.cpp:249
+msgid "Week XX"
+msgstr "Viikko XX"
+
+#: widgets/kmymoneycalendar.cpp:264 widgets/kmymoneycalendar.cpp:300
+#, c-format
+msgid "Week %1"
+msgstr "Viikko %1"
+
+#: widgets/rc.cpp:1
+msgid "Account Types"
+msgstr "Tilityypit"
+
+#: widgets/rc.cpp:3
+msgid "Detailed description"
+msgstr "Tarkempi kuvaus"
+
+#: widgets/rc.cpp:18
+msgid "Period"
+msgstr "Jakso"
+
+#: widgets/rc.cpp:21
+msgid "Individual"
+msgstr "Yksilöllinen"
+
+#: widgets/rc.cpp:23
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Acces to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>Recovery encryption</i> group is only accessible, if the necessary "
+"key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is "
+"found."
+msgstr ""
+"Sivulla voidaan tehdä asetukset tiedon salaamiseksi <b>GPG</b>:llä.<p>\n"
+"Jos <b>GPG</b>:tä ei löydy järjestelmästä, pääsy asetuksiin on estetty. "
+"Tässä tapauksessa varmista että <b>GPG</b> toimii oikein nykyisellä "
+"käyttäjällä.<p>\n"
+"<i>Toipumissalaus</i>-ryhmä näkyy ainoastaan, mikäli tarvittava avain "
+"<b>kmymoney-recover@users.sourceforge.net</b>:lle löytyy tunnisteella "
+"0x8AFDDC8E."
+
+#: widgets/rc.cpp:26
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading <i>0x</i>."
+msgstr ""
+"Syötä avain jolla tiedot salataan. Avain voi olla joko sähköpostiosoite tai "
+"heksadesimaaliluku. Heksadesimaalilukua käyttäessä muista <i>0x</i> -"
+"etuliite."
+
+#: widgets/rc.cpp:27
+msgid "User ID"
+msgstr "Käyttäjätunniste"
+
+#: widgets/rc.cpp:29
+msgid "Recovery encryption"
+msgstr "Toipumissalaus"
+
+#: widgets/rc.cpp:30
+msgid "Also encrypt with kmymoney-recover key"
+msgstr "Salaa myös kmymoney-toipumisavaimella"
+
+#: widgets/rc.cpp:32
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out."
+msgstr ""
+"Tiedot voidaan salata myös KMyMoneyn omalla palautusavaimella, jolloin "
+"KMyMoneyn pääkehittäjillä on tietojen lukemiseen tarvittava avain. <p>\n"
+"\n"
+"Tämän mekanismin avulla on mahdollista palauttaa tiedot mikäli oma "
+"palautusavaimesi hukkuu eikä tietoja kyetä enää lukemaan. Ottamalla käyttöön "
+"tämän asetuksen, KMyMoneyn kehittäjät voivat purkaa tiedoston salauksen ja "
+"lähettää tiedot luettavassa muodossa takaisin. Lähettäessäsi valmistaudu "
+"vastaamaan salatun tiedon sisällöstä, millä varmistetaan tiedon oikea "
+"vastaanottaja."
+
+#: widgets/rc.cpp:51
+msgid "PriceInfo"
+msgstr "Hintatieto"
+
+#: widgets/rc.cpp:52
+msgid "Report Tab"
+msgstr "Raportti-välilehti"
+
+#: widgets/rc.cpp:53
+msgid "<p>On this tab, you set the basic properties of this report.</p>"
+msgstr "<p>Tällä välilehdellä voidaan asettaa raportin perusasetukset.</p>"
+
+#: widgets/rc.cpp:54
+msgid "Report Name"
+msgstr "Raportin nimi"
+
+#: widgets/rc.cpp:55
+msgid "<p>Choose a name for this report.</p>"
+msgstr "<p>Syötä raportin nimi.</p>"
+
+#: widgets/rc.cpp:57
+msgid "<p>Enter a comment to help you remember the details of this report.</p>"
+msgstr "<p>Lisää kommentti raportin yksityiskohtien muistamiseksi.</p>"
+
+#: widgets/rc.cpp:58
+msgid "Convert values to base currency"
+msgstr "Muuta arvot oletusvaluuttaan"
+
+#: widgets/rc.cpp:59
+msgid ""
+"_: Convert 'em!!\n"
+"<p>Select this option to convert all values in the report to your base "
+"currency.</p><p>Leave it unchecked if you'd like to see values in their "
+"original currency.</p><p>If currencies are not converted, then subtotals "
+"will not be shown.</p>"
+msgstr ""
+"<p>Valittaessa tämä asetus, summat raportilla vaihdetaan oletusvaluuttaan.</"
+"p><p>Jos summat halutaan nähdä niiden alkuperäisissä valuutoissaan, ei tätä "
+"asetusta pidä valita.</p><p>Mikäli valuuttoja ei ole muutettu "
+"oletusvaluuttaan, välisummaa ei näytetä.</p>"
+
+#: widgets/rc.cpp:60
+msgid "Mark as a favorite report"
+msgstr "Merkitse suosikkiraportiksi"
+
+#: widgets/rc.cpp:61
+msgid ""
+"<p>Select this option to notate this report as one of your favorites.</"
+"p><p>All your favorite reports are grouped in one place on the report list "
+"for easy access.</p>"
+msgstr ""
+"<p>Tällä asetuksella raportti voidaan merkitä suosikkiraportiksi.</"
+"p><p>Suosikkiraportit näytetään omassa ryhmässään jotta ne löytyisivät "
+"tavallisia raportteja nopeammin.</p>"
+
+#: widgets/rc.cpp:62 widgets/rc.cpp:88
+msgid "Rows/Columns Tab"
+msgstr "Rivi / Sarake -välilehti"
+
+#: widgets/rc.cpp:63 widgets/rc.cpp:89
+msgid ""
+"<p>On this tab, you configure how you'd like the rows and columns to be "
+"selected and organized.</p>"
+msgstr ""
+"<p>Välilehdellä voidaan määritellä, mitkä rivit ja sarakkeet valitaan, ja "
+"kuinka ne järjestellään.</p>"
+
+#: widgets/rc.cpp:69 widgets/rc.cpp:81
+msgid "<p>Choose what kind of accounts to display as the rows of this report.</p>"
+msgstr "<p>Valitse, minkälaiset tilit näytetään riveinä raportissa.</p>"
+
+#: widgets/rc.cpp:71
+msgid "Columns"
+msgstr "Sarakkeet"
+
+#: widgets/rc.cpp:75
+msgid "Bi-Monthly"
+msgstr "Joka toinen kuukausi"
+
+#: widgets/rc.cpp:78
+msgid "<p>Choose how large of a time period each column should encompass</p>"
+msgstr "<p>Valitse, kuinka pitkän ajan jokaisen sarakkeen pitäisi käsittää.</p>"
+
+#: widgets/rc.cpp:79
+msgid "Income & Expenses"
+msgstr "Tulot & menot"
+
+#: widgets/rc.cpp:80
+msgid "Assets & Liabilities"
+msgstr "Omaisuus & velat"
+
+#: widgets/rc.cpp:82
+msgid "Rows"
+msgstr "Rivit"
+
+#: widgets/rc.cpp:83
+msgid "Show totals column"
+msgstr "Näytä loppusumma -sarake"
+
+#: widgets/rc.cpp:84
+msgid "Average days"
+msgstr "Keskiarvopäivät"
+
+#: widgets/rc.cpp:85
+msgid "Include scheduled transactions"
+msgstr "Sisällytä ajoitetut tapahtumat"
+
+#: widgets/rc.cpp:86
+msgid "Include transfers"
+msgstr "Sisällytä tilisiirrot"
+
+#: widgets/rc.cpp:87
+msgid "Include unused accounts/categories"
+msgstr "Sisällytä käyttämättömät tilit / kategoriat"
+
+#: widgets/rc.cpp:90
+msgid "Organize by:"
+msgstr "Järjestelyperuste:"
+
+#: widgets/rc.cpp:92
+msgid "Top Categories"
+msgstr "Ylätason kategoriat"
+
+#: widgets/rc.cpp:95
+msgid "Top Accounts"
+msgstr "Ylätason tilit"
+
+#: widgets/rc.cpp:98
+msgid "<p>Choose how to group the transactions in this report</p>"
+msgstr "<p>Valitse, kuinka tapahtumat ryhmitellään tässä raportissa.</p>"
+
+#: widgets/rc.cpp:99
+msgid "Show Columns"
+msgstr "Näytä sarakkeet"
+
+#: widgets/rc.cpp:100
+msgid ""
+"<p>Choose which columns should be shown in the report.</p><p>The date and "
+"transaction amount are always shown.</p>"
+msgstr ""
+"<p>Valitse, mitkä sarakkeet tulisi näyttää raportissa.</p><p>Päiväys ja "
+"tapahtuman summa näytetään aina.</p>"
+
+#: widgets/rc.cpp:102
+msgid "<p>Select this option to show the Memo column</p>"
+msgstr "<p>Valitsemalla tämän asetuksen Muistiinpanot-sarake näytetään.</p>"
+
+#: widgets/rc.cpp:104
+msgid "<p>Select this option to show the Shares column for investments</p>"
+msgstr "<p>Valitsemalla tämän asetuksen Osakkeet-sarake näytetään sijoituksille.</p>"
+
+#: widgets/rc.cpp:106
+msgid "<p>Select this option to show the Price column for investments</p>"
+msgstr "<p>Valitsemalla tämän asetuksen Hinta-sarake näytetään sijoituksille.</p>"
+
+#: widgets/rc.cpp:108
+msgid "<p>Select this option to show the Reconciled column</p>"
+msgstr "<p>Valitsemalla tämän asetuksen Yhteensovitettu-sarake näytetään.</p>"
+
+#: widgets/rc.cpp:110
+msgid "<p>Select this option to show the Account column</p>"
+msgstr "<p>Valitsemalla tämän asetuksen Tilit-sarake näytetään.</p>"
+
+#: widgets/rc.cpp:112
+msgid "<p>Select this option to show the Number column</p>"
+msgstr "<p>Valitsemalla tämän asetuksen Numero-sarake näytetään.</p>"
+
+#: widgets/rc.cpp:114
+msgid "<p>Select this option to show the Payee column</p>"
+msgstr "<p>Valitsemalla tämän asetuksen Maksunsaaja-sarake näytetään.</p>"
+
+#: widgets/rc.cpp:116
+msgid "<p>Select this option to show the Category column</p>"
+msgstr "<p>Valitsemalla tämän asetuksen Kategoria-sarake näytetään.</p>"
+
+#: widgets/rc.cpp:118
+msgid "<p>Select this option to show the Action column</p>"
+msgstr "<p>Valitsemalla tämän asetuksen Toiminta-sarake näytetään.</p>"
+
+#: widgets/rc.cpp:120
+msgid "<p>Select this option to show the Running balance column</p>"
+msgstr "<p>Valitsemalla tämän asetuksen Juokseva saldo -sarake näytetään.</p>"
+
+#: widgets/rc.cpp:121
+msgid "Include only Loan accounts"
+msgstr "Sisällytä ainoastaan lainatilit"
+
+#: widgets/rc.cpp:122
+msgid "Include only Investment accounts"
+msgstr "Sisällytä ainoastaan sijoitustilit"
+
+#: widgets/rc.cpp:123 widgets/rc.cpp:127
+msgid ""
+"<p>Check this box to include only those categories which have been marked to "
+"\"Include on Tax Reports\"</p>"
+msgstr ""
+"<p>Rastita tämä asetus lisätäksesi ainoastaan ne kategoriat jotka on "
+"merkitty \"Sisällytä veroraportteihin\"</p>"
+
+#: widgets/rc.cpp:124
+msgid "Hide Split Transaction Details"
+msgstr "Piilota jaoteltujen tapahtumien yksityiskohdat."
+
+#: widgets/rc.cpp:125
+msgid "Do not display the individual transactions that make up a split transaction"
+msgstr "Älä näytä jaoteltujen tapahtumien yksittäisiä jaotteluja."
+
+#: widgets/rc.cpp:126
+msgid "Include only Tax categories"
+msgstr "Sisällytä vain verokategoriat"
+
+#: widgets/rc.cpp:128
+msgid "Chart Tab"
+msgstr "Kaavio-välilehti"
+
+#: widgets/rc.cpp:129
+msgid "<p>On this tab, you configure the chart drawn forthis report.</p>"
+msgstr "<p>Tällä välilehdellä määritellään kaavio raportille.</p>"
+
+#: widgets/rc.cpp:130
+msgid "Chart Type"
+msgstr "Kaaviotyyppi"
+
+#: widgets/rc.cpp:131
+msgid "<p>Select what form you would like the chart to be drawn as.</p>"
+msgstr "<p>Valitse diagrammin tyyppi jota käytetään kaavion piirtämiseen.</p>"
+
+#: widgets/rc.cpp:132
+msgid "Line"
+msgstr "Viiva"
+
+#: widgets/rc.cpp:133
+msgid "Bar"
+msgstr "Pylväs"
+
+#: widgets/rc.cpp:134
+msgid "Stacked Bar"
+msgstr "Pylväspino"
+
+#: widgets/rc.cpp:135
+msgid "Pie"
+msgstr "Piirakka"
+
+#: widgets/rc.cpp:136
+msgid "Ring"
+msgstr "Rengas"
+
+#: widgets/rc.cpp:137
+msgid "Show grid lines"
+msgstr "Näytä ruudukko"
+
+#: widgets/rc.cpp:138
+msgid ""
+"<p>Select this option to show horizontal and vertical grid lines on the "
+"chart.</p>"
+msgstr ""
+"<p>Valitsemalla tämän asetuksen, kaaviossa näytetään pysty- ja "
+"vaakasuuntaiset apuviivat.</p>"
+
+#: widgets/rc.cpp:139
+msgid "Draw values on chart"
+msgstr "Piirrä arvot kaavioon"
+
+#: widgets/rc.cpp:140
+msgid ""
+"<p>Select this option to draw the numeric values for data points next to "
+"their plot location.</p>"
+msgstr ""
+"<p>Valitsemalla tämän vaihtoehdon, numeeriset arvot näytetään kaaviossa "
+"pisteiden vieressä.</p>"
+
+#: widgets/rc.cpp:141
+msgid "Show as chart by default"
+msgstr "Näytä oletuksena kaaviona"
+
+#: widgets/rc.cpp:142
+msgid ""
+"<p>Select this option to cause the report to be shown as a chart when you "
+"first open the report. Otherwise, it will come up as a text report.</p>"
+msgstr ""
+"<p>Valitsemalla tämän asetuksen, raportti näytetään oletusarvoisesti "
+"kaaviona. Muussa tapauksessa raportti on tekstimuotoinen.</p>"
+
+#: widgets/rc.cpp:143
+msgid "Line width"
+msgstr "Viivan paksuus"
+
+#: widgets/rc.cpp:144
+msgid "<p>Select what width should be used to draw the line on the chart</p>"
+msgstr "<p>Valitse kaavioissa käytettävä viivanleveys</p>"
+
+#: widgets/rc.cpp:145
+msgid "ReportControl"
+msgstr "Raporttien hallinta"
+
+#: widgets/rc.cpp:149
+msgid "Configure this report"
+msgstr "Mukauta raporttia"
+
+#: widgets/rc.cpp:151
+msgid "Create a new report based on this one"
+msgstr "Laadi uusi raportti tämän pohjalta"
+
+#: widgets/rc.cpp:153
+msgid "Copy this report to the clipboard"
+msgstr "Kopioi raportti leikepöydälle"
+
+#: widgets/rc.cpp:155
+msgid "Export this report as an HTML or CSV file"
+msgstr "Vie raportti HTML- tai CSV-tiedostona"
+
+#: widgets/rc.cpp:157
+msgid "Permanently delete this report"
+msgstr "Tuhoa raportti pysyvästi"
+
+#: widgets/rc.cpp:159
+msgid "Close this window"
+msgstr "Sulje tämä ikkuna"
+
+#: widgets/rc.cpp:162
+msgid "n of n"
+msgstr "n / n"
+
+#: widgets/rc.cpp:166
+msgid "Account:"
+msgstr "Tili:"
+
+#: widgets/rc.cpp:168
+msgid "Enter..."
+msgstr "Kirjaa..."
+
+#: widgets/rc.cpp:171
+msgid "TransactionSortOptionDecl"
+msgstr "TransactionSortOptionDecl"
+
+#: widgets/rc.cpp:173
+msgid "Sort order"
+msgstr "Lajittelujärjestys"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Sunday\n"
+"Sun"
+msgstr "Su"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Saturday\n"
+"Sat"
+msgstr "La"
+
+#: widgets/kmymoneydatetbl.cpp:171 widgets/kmymoneydatetbl.cpp:178
+msgid "Week %1 for year %2."
+msgstr "Viikko %1 vuodesta %2."
+
+#: widgets/kmymoneycombo.cpp:417
+msgid "ATM"
+msgstr "Pankkiautomaatti"
+
+#: widgets/kmymoneycombo.cpp:418
+msgid "Withdrawal"
+msgstr "Nosto"
+
+#: widgets/kmymoneycombo.cpp:421
+msgid "Cheque"
+msgstr "Sekki"
+
+#: widgets/kmymoneycombo.cpp:469
+msgid ""
+"_: Activity for expense categories\n"
+"Paid"
+msgstr "Maksettu"
+
+#: widgets/kmymoneycombo.cpp:470
+msgid ""
+"_: Activity for income categories\n"
+"Received"
+msgstr "Vastaanotettu"
+
+#: widgets/kmymoneycombo.cpp:519
+msgid "Reinvest dividend"
+msgstr "Uudelleensijoitettu osinko"
+
+#: widgets/kmymoneycombo.cpp:664
+msgid "All dates"
+msgstr "Kaikkina päivinä"
+
+#: widgets/kmymoneycombo.cpp:665
+msgid "As of today"
+msgstr "Kuten tänään"
+
+#: widgets/kmymoneycombo.cpp:667
+msgid "Current month"
+msgstr "Kuluva kuukausi"
+
+#: widgets/kmymoneycombo.cpp:668
+msgid "Current quarter"
+msgstr "Kuluva vuosineljännes"
+
+#: widgets/kmymoneycombo.cpp:669
+msgid "Current year"
+msgstr "Kuluva vuosi"
+
+#: widgets/kmymoneycombo.cpp:671
+msgid "Month to date"
+msgstr "Kuukauden alusta tähän päivään"
+
+#: widgets/kmymoneycombo.cpp:672
+msgid "Year to date"
+msgstr "Vuoden alusta tähän päivään"
+
+#: widgets/kmymoneycombo.cpp:673
+msgid "Year to month"
+msgstr "Vuoden alusta tämän kuun alkuun"
+
+#: widgets/kmymoneycombo.cpp:675
+msgid "Last year"
+msgstr "Viime vuosi"
+
+#: widgets/kmymoneycombo.cpp:676
+msgid "Last fiscal year"
+msgstr "Viime tilivuosi"
+
+#: widgets/kmymoneycombo.cpp:677
+msgid "Last 7 days"
+msgstr "Viimeiset 7 päivää"
+
+#: widgets/kmymoneycombo.cpp:678
+msgid "Last 30 days"
+msgstr "Viimeiset 30 päivää"
+
+#: widgets/kmymoneycombo.cpp:679
+msgid "Last 3 months"
+msgstr "Viimeiset 3 kuukautta"
+
+#: widgets/kmymoneycombo.cpp:680
+msgid "Last quarter"
+msgstr "Viime vuosineljännes"
+
+#: widgets/kmymoneycombo.cpp:681
+msgid "Last 6 months"
+msgstr "Viimeiset 6 kuukautta"
+
+#: widgets/kmymoneycombo.cpp:682
+msgid "Last 11 months"
+msgstr "Viimeiset 11 kuukautta"
+
+#: widgets/kmymoneycombo.cpp:683
+msgid "Last 12 months"
+msgstr "Viimeiset 12 kuukautta"
+
+#: widgets/kmymoneycombo.cpp:684
+msgid "Next 7 days"
+msgstr "Seuraavat 7 päivää"
+
+#: widgets/kmymoneycombo.cpp:685
+msgid "Next 30 days"
+msgstr "Seuraavat 30 päivää"
+
+#: widgets/kmymoneycombo.cpp:686
+msgid "Next 3 months"
+msgstr "Seuraavat 3 kuukautta"
+
+#: widgets/kmymoneycombo.cpp:687
+msgid "Next quarter"
+msgstr "Seuraava vuosineljännes"
+
+#: widgets/kmymoneycombo.cpp:688
+msgid "Next 6 months"
+msgstr "Seuraavat 6 kuukautta"
+
+#: widgets/kmymoneycombo.cpp:689
+msgid "Next 12 months"
+msgstr "Seuraavat 12 kuukautta"
+
+#: widgets/kmymoneycombo.cpp:690
+msgid "Last 3 months to next 3 months"
+msgstr "Viimeisestä 3 kuukaudesta seuraaviin 3 kuukauteen."
+
+#: widgets/kmymoneycombo.cpp:691
+msgid "User defined"
+msgstr "Käyttäjän määrittelemä"
+
+
diff --git a/po/fr.po b/po/fr.po
new file mode 100644
index 0000000..8d4333f
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,14174 @@
+# translation of fr.po to
+# This file is put in the public domain.
+#
+# Stéphane Deraco <stephane@deraco.fr>, 2006.
+# Patrick PETIT <patrick.petit17@orange.fr>, 2006,2007, 2008, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: fr\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-25 19:04+0200\n"
+"PO-Revision-Date: 2009-07-04 08:35+0200\n"
+"Last-Translator: Patrick PETIT <patrick.petit17@orange.fr>\n"
+"Language-Team: Français <kde-i18n-doc@kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 0.3\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: wizards/wizardpages/rc.cpp:1
+msgid ""
+"Select groups of accounts that correspond to the ways that you will use "
+"KMyMoney. Each group you select will cause several accounts and categories "
+"to be created. Select the groups that are relevant to you. You can always "
+"create additional accounts manually later."
+msgstr ""
+"Sélectionner les groupes de comptes qui correspondent à ceux que vous "
+"utiliserez KMyMoney. Chaque groupe que vous sélectionnez fera que plusieurs "
+"catégories et comptes seront créés. Sélectionnez les groupes qui sont "
+"pertinents pour vous. Vous pouvez toujours créer des comptes supplémentaires "
+"manuellement plus tard."
+
+#: wizards/wizardpages/rc.cpp:2
+msgid ""
+"<p>KMyMoney supports multiple currencies, nevertheless one of them will be "
+"used as your base currency. The base currency is used as default for new "
+"accounts and reports. Please select the base currency from the following "
+"list."
+msgstr ""
+"<p>KMyMoney supporte de nombreuses devises, , mais l'une d'elles sera "
+"utilisée comme monnaie de base. La monnaie de base est utilisée par défaut "
+"pour les nouveaux comptes et les rapports. Veuillez choisir la monnaie de "
+"base dans la liste ci-dessous."
+
+#: dialogs/kequitypriceupdatedlg.cpp:71 dialogs/rc.cpp:399 dialogs/rc.cpp:485
+#: dialogs/rc.cpp:724 dialogs/settings/rc.cpp:108 reports/listtable.cpp:226
+#: views/kinvestmentview.cpp:71 views/kpayeesview.cpp:351 views/rc.cpp:13
+#: widgets/rc.cpp:5 widgets/rc.cpp:34
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1599
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1629
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1673
+#: wizards/wizardpages/rc.cpp:3
+msgid "Name"
+msgstr "Nom"
+
+#: wizards/wizardpages/rc.cpp:4
+msgid "ISO Code"
+msgstr "Code ISO"
+
+#: dialogs/kequitypriceupdatedlg.cpp:69 dialogs/kequitypriceupdatedlg.cpp:70
+#: dialogs/rc.cpp:71 dialogs/rc.cpp:725 dialogs/settings/rc.cpp:112
+#: views/kinvestmentview.cpp:72 widgets/rc.cpp:37 wizards/wizardpages/rc.cpp:5
+msgid "Symbol"
+msgstr "Symbole"
+
+#: wizards/wizardpages/rc.cpp:6
+msgid ""
+"<p>Use the fields below to enter some information about yourself.</p>\n"
+"\n"
+"<p>All information is optional and only used to personalize your KMyMoney "
+"file.</p>"
+msgstr ""
+"<p>Utilisez ces champs pour saisir quelques informations vous concernant.</"
+"p>\n"
+"\n"
+"<p>Toutes ces informations sont optionnelles et sont seulement utiliser pour "
+"personnaliser votre fichier KMyMoney.</p>"
+
+#: dialogs/rc.cpp:425 wizards/newuserwizard/rc.cpp:27
+#: wizards/wizardpages/rc.cpp:7
+msgid "Town:"
+msgstr "Ville :"
+
+#: dialogs/rc.cpp:420 wizards/newuserwizard/rc.cpp:22
+#: wizards/wizardpages/rc.cpp:8
+msgid "County/State:"
+msgstr "Pays / État :"
+
+#: dialogs/rc.cpp:391 dialogs/rc.cpp:421 wizards/newuserwizard/rc.cpp:23
+#: wizards/wizardpages/rc.cpp:9
+msgid "Street:"
+msgstr "Rue :"
+
+#: dialogs/rc.cpp:422 wizards/newuserwizard/rc.cpp:24
+#: wizards/wizardpages/rc.cpp:10
+msgid "Email:"
+msgstr "Courriel :"
+
+#: dialogs/rc.cpp:424 wizards/newuserwizard/rc.cpp:26
+#: wizards/wizardpages/rc.cpp:11
+msgid "Telephone:"
+msgstr "Téléphone :"
+
+#: dialogs/rc.cpp:423 wizards/newuserwizard/rc.cpp:25
+#: wizards/wizardpages/rc.cpp:12
+msgid "Your name:"
+msgstr "Votre Nom :"
+
+#: dialogs/rc.cpp:427 wizards/newuserwizard/rc.cpp:29
+#: wizards/wizardpages/rc.cpp:13
+msgid "Load from Addressbook"
+msgstr "Charger à partir du Carnet d'adresse"
+
+#: dialogs/rc.cpp:392 dialogs/rc.cpp:426 views/rc.cpp:68
+#: wizards/wizardpages/rc.cpp:14
+msgid "Postal Code:"
+msgstr "Code postal :"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:82
+msgid "KMyMoney New Account Setup"
+msgstr "Paramétrage nouveau compte KMyMoney"
+
+#: dialogs/rc.cpp:360 dialogs/rc.cpp:361 reports/listtable.cpp:230
+#: wizards/newaccountwizard/knewaccountwizard.cpp:83
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1616
+#: wizards/newaccountwizard/rc.cpp:61
+msgid "Institution"
+msgstr "Établissement"
+
+#: dialogs/investactivities.cpp:198 dialogs/investactivities.cpp:286
+#: dialogs/investactivities.cpp:367 dialogs/kfindtransactiondlg.cpp:181
+#: dialogs/rc.cpp:139 dialogs/rc.cpp:192 dialogs/rc.cpp:207
+#: dialogs/transactioneditor.cpp:734 reports/listtable.cpp:201
+#: reports/pivottable.cpp:1336 reports/pivottable.cpp:1586
+#: views/kforecastview.cpp:393 views/kgloballedgerview.cpp:175
+#: views/khomeview.cpp:418 views/khomeview.cpp:491 views/khomeview.cpp:525
+#: views/khomeview.cpp:764 views/khomeview.cpp:967 views/khomeview.cpp:1437
+#: views/kscheduledview.cpp:71 views/rc.cpp:17 views/rc.cpp:44
+#: widgets/kmymoneyaccounttreebase.cpp:58
+#: widgets/kmymoneyaccounttreeforecast.cpp:41 widgets/rc.cpp:109
+#: widgets/register.cpp:566 widgets/transaction.cpp:978
+#: widgets/transaction.cpp:1535
+#: wizards/newaccountwizard/knewaccountwizard.cpp:84
+msgid "Account"
+msgstr "Compte"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:85
+msgid "Broker"
+msgstr "Courtier"
+
+#: dialogs/kfindtransactiondlg.cpp:225 dialogs/rc.cpp:70 dialogs/rc.cpp:104
+#: dialogs/rc.cpp:159 dialogs/rc.cpp:223 dialogs/rc.cpp:246 dialogs/rc.cpp:751
+#: dialogs/settings/rc.cpp:109 widgets/rc.cpp:35 widgets/register.cpp:568
+#: wizards/newaccountwizard/knewaccountwizard.cpp:86
+msgid "Details"
+msgstr "Détails"
+
+#: dialogs/knewloanwizard.cpp:636 dialogs/rc.cpp:231 dialogs/rc.cpp:608
+#: kmymoneyutils.cpp:191 views/khomeview.cpp:399
+#: wizards/newaccountwizard/knewaccountwizard.cpp:87
+#: wizards/newaccountwizard/knewaccountwizard.cpp:880
+msgid "Payments"
+msgstr "Paiements"
+
+#: dialogs/investactivities.cpp:195 dialogs/investactivities.cpp:283
+#: dialogs/investactivities.cpp:422 dialogs/investtransactioneditor.cpp:217
+#: reports/listtable.cpp:221 widgets/transaction.cpp:1565
+#: wizards/newaccountwizard/knewaccountwizard.cpp:88
+msgid "Fees"
+msgstr "Frais"
+
+#: dialogs/rc.cpp:624 views/khomeview.cpp:415 views/khomeview.cpp:488
+#: views/khomeview.cpp:522 wizards/newaccountwizard/knewaccountwizard.cpp:89
+msgid "Schedule"
+msgstr "Échéances"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:90
+msgid "Payout"
+msgstr "Paiement"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:91
+msgid "Parent Account"
+msgstr "Compte père"
+
+#: dialogs/rc.cpp:719 wizards/newaccountwizard/knewaccountwizard.cpp:92
+#: wizards/newuserwizard/knewuserwizard.cpp:86
+msgid "Finish"
+msgstr "Terminer"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:248
+msgid "Credit card payment"
+msgstr "Paiement par carte de crédit"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:264
+#, c-format
+msgid "Loan payment for %1"
+msgstr "Paiement de prêt pour %1"
+
+#: mymoney/mymoneyscheduled.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:279
+msgid "Loan payment"
+msgstr "Paiement de prêt"
+
+#: dialogs/rc.cpp:134 wizards/newaccountwizard/knewaccountwizard.cpp:293
+msgid "Amortization"
+msgstr "Amortissement"
+
+#: dialogs/investactivities.cpp:196 dialogs/investactivities.cpp:284
+#: dialogs/investactivities.cpp:366 dialogs/investactivities.cpp:423
+#: dialogs/investtransactioneditor.cpp:227 dialogs/rc.cpp:135
+#: dialogs/rc.cpp:152 dialogs/rc.cpp:544 reports/listtable.cpp:222
+#: widgets/transaction.cpp:1597
+#: wizards/newaccountwizard/knewaccountwizard.cpp:302
+msgid "Interest"
+msgstr "Intérêts"
+
+#: dialogs/kcurrencycalculator.cpp:282
+#: wizards/newaccountwizard/knewaccountwizard.cpp:351
+#: wizards/newaccountwizard/knewaccountwizard.cpp:356
+msgid "User"
+msgstr "Utilisateur"
+
+#: kmymoneyutils.cpp:64 mymoney/mymoneyaccount.cpp:711
+#: reports/querytabletest.cpp:422
+#: wizards/newaccountwizard/knewaccountwizard.cpp:451
+msgid "Checking"
+msgstr "Chèques"
+
+#: kmymoneyutils.cpp:66 mymoney/mymoneyaccount.cpp:714
+#: wizards/newaccountwizard/knewaccountwizard.cpp:452
+msgid "Savings"
+msgstr "Épargne"
+
+#: kmymoneyutils.cpp:68 mymoney/mymoneyaccount.cpp:717
+#: reports/querytabletest.cpp:423
+#: wizards/newaccountwizard/knewaccountwizard.cpp:453
+msgid "Credit Card"
+msgstr "Carte de crédit"
+
+#: kmymoneyutils.cpp:70 mymoney/mymoneyaccount.cpp:720
+#: wizards/newaccountwizard/knewaccountwizard.cpp:454
+msgid "Cash"
+msgstr "Espèces"
+
+#: kmymoneyutils.cpp:72 mymoney/mymoneyaccount.cpp:723
+#: wizards/newaccountwizard/knewaccountwizard.cpp:455
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+msgid "Loan"
+msgstr "Prêt"
+
+#: kmymoneyutils.cpp:76 mymoney/mymoneyaccount.cpp:729
+#: wizards/newaccountwizard/knewaccountwizard.cpp:456
+msgid "Investment"
+msgstr "Investissement"
+
+#: converter/mymoneytemplate.cpp:178 converter/mymoneytemplate.cpp:179
+#: dialogs/knewaccountdlg.cpp:1014 kmymoneyutils.cpp:80
+#: mymoney/mymoneyaccount.cpp:735 views/kaccountsview.cpp:352
+#: views/kmymoneyview.cpp:765 widgets/kmymoneyaccountselector.cpp:177
+#: widgets/kmymoneyaccountselector.cpp:356
+#: wizards/newaccountwizard/knewaccountwizard.cpp:457
+msgid "Asset"
+msgstr "Actif"
+
+#: converter/mymoneytemplate.cpp:182 converter/mymoneytemplate.cpp:183
+#: dialogs/knewaccountdlg.cpp:1016 kmymoneyutils.cpp:82
+#: mymoney/mymoneyaccount.cpp:738 views/kaccountsview.cpp:356
+#: views/kmymoneyview.cpp:766 widgets/kmymoneyaccountselector.cpp:178
+#: widgets/kmymoneyaccountselector.cpp:363
+#: wizards/newaccountwizard/knewaccountwizard.cpp:458
+msgid "Liability"
+msgstr "Passif"
+
+#: converter/mymoneytemplate.cpp:194 converter/mymoneytemplate.cpp:195
+#: kmymoneyutils.cpp:94 mymoney/mymoneyaccount.cpp:756
+#: views/kaccountsview.cpp:369 views/kmymoneyview.cpp:769
+#: widgets/kmymoneyaccountselector.cpp:181
+#: widgets/kmymoneyaccountselector.cpp:390
+#: wizards/newaccountwizard/knewaccountwizard.cpp:460
+msgid "Equity"
+msgstr "Action"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid ""
+"Please make sure to enter the correct conversion for the selected opening "
+"date. If you requested an online quote it might be provided for a different "
+"date."
+msgstr ""
+"S'il vous plaît, assurez-vous de saisir la bonne conversion pour la date "
+"d'ouverture. Si vous avez demandé la cotation en ligne, il pourrait vous "
+"être demandé un autre date."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid "Check date"
+msgstr "Vérifier la date"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:562
+msgid "1 %1 equals %2"
+msgstr "1 %1 égal %2"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:577
+msgid "Conversion rate is not positive"
+msgstr "Le taux de conversion n'est pas positif"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:583
+msgid "No account name supplied"
+msgstr "Pas de nom de compte fourni"
+
+#: dialogs/keditscheduledlg.cpp:114 mymoney/mymoneyscheduled.cpp:1026
+#: wizards/newaccountwizard/knewaccountwizard.cpp:680
+msgid "Write check"
+msgstr "Écrire un chèque"
+
+#: dialogs/keditscheduledlg.cpp:111 mymoney/mymoneyscheduled.cpp:1014
+#: wizards/newaccountwizard/knewaccountwizard.cpp:682
+msgid "Direct debit"
+msgstr "Débit direct"
+
+#: dialogs/keditscheduledlg.cpp:113 mymoney/mymoneyscheduled.cpp:1032
+#: wizards/newaccountwizard/knewaccountwizard.cpp:683
+msgid "Bank transfer"
+msgstr "Virement bancaire"
+
+#: dialogs/keditscheduledlg.cpp:112 mymoney/mymoneyscheduled.cpp:1029
+#: wizards/newaccountwizard/knewaccountwizard.cpp:685
+msgid "Standing order"
+msgstr "Ordre permanent"
+
+#: dialogs/keditscheduledlg.cpp:110 mymoney/mymoneyscheduled.cpp:1020
+#: wizards/newaccountwizard/knewaccountwizard.cpp:686
+msgid "Manual deposit"
+msgstr "Dépôt manuel"
+
+#: dialogs/keditscheduledlg.cpp:109 mymoney/mymoneyscheduled.cpp:1017
+#: wizards/newaccountwizard/knewaccountwizard.cpp:687
+msgid "Direct deposit"
+msgstr "Dépôt direct"
+
+#: dialogs/keditscheduledlg.cpp:115 mymoney/mymoneyscheduled.cpp:1023
+#: wizards/newaccountwizard/knewaccountwizard.cpp:688
+msgid "Other"
+msgstr "Autre"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:697
+msgid "CreditCard %1 monthly payment"
+msgstr "Paiement mensuel de la carte de crédit %1"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:703
+msgid "Finish entry and create account"
+msgstr "Terminer la saisie et créer le compte"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:705
+msgid "Finish entry and create account and schedule"
+msgstr "Terminer la saisie et créer le compte et l'échéance"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:708
+msgid "Next due date is prior to opening date"
+msgstr "La date de l'échéance suivante est antérieure à la date d'ouverture"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:712
+msgid "No account selected"
+msgstr "Pas de compte sélectionné"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:716
+msgid "No amount for payment selected"
+msgstr "Pas de montant pour le paiement sélectionné"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:720
+msgid "No payee for payment selected"
+msgstr "Pas de tiers pour le paiement sélectionné"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:724
+msgid "No name assigned for schedule"
+msgstr "Aucun nom défini pour l'échéance"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:805
+msgid "No payee supplied"
+msgstr "Pas de tiers fourni"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:819
+msgid "No opening balance supplied"
+msgstr "Pas de solde d'ouverture fourni"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:826
+msgid "An interest change can only happen after the first payment"
+msgstr "Le taux d'intérêt peut changer uniquement après le premier paiement"
+
+#: dialogs/knewloanwizard.cpp:615 dialogs/knewloanwizard.cpp:634
+#: wizards/newaccountwizard/knewaccountwizard.cpp:884
+#: wizards/newaccountwizard/rc.cpp:55
+msgid "Months"
+msgstr "Mois"
+
+#: dialogs/knewloanwizard.cpp:616 dialogs/knewloanwizard.cpp:635
+#: wizards/newaccountwizard/knewaccountwizard.cpp:885
+#: wizards/newaccountwizard/knewaccountwizard.cpp:889
+#: wizards/newaccountwizard/rc.cpp:56
+msgid "Years"
+msgstr "Années"
+
+#: dialogs/knewloanwizard.cpp:711
+#: wizards/newaccountwizard/knewaccountwizard.cpp:961
+#, c-format
+msgid "KMyMoney has calculated the amount of the loan as %1."
+msgstr "KMyMoney a calculé %1 comme montant du prêt."
+
+#: dialogs/knewloanwizard.cpp:718
+#: wizards/newaccountwizard/knewaccountwizard.cpp:968
+msgid "KMyMoney has calculated the interest rate to %1%."
+msgstr "KMyMoney a calculé un taux d'intérêt de %1%."
+
+#: dialogs/knewloanwizard.cpp:731
+#: wizards/newaccountwizard/knewaccountwizard.cpp:981
+msgid ""
+"KMyMoney has calculated a periodic payment of %1 to cover principal and "
+"interest."
+msgstr ""
+"KMyMoney a calculé un paiement périodique de %1 pour couvrir l'amortissement "
+"et l'intérêt."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:993
+#, c-format
+msgid ""
+"The number of payments has been decremented and the balloon payment has been "
+"modified to %1."
+msgstr ""
+"Le nombre de paiements a été diminué et le dernier paiement a été changé en %"
+"1."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1001
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1021
+#, c-format
+msgid "The balloon payment has been modified to %1."
+msgstr "Le dernier paiement a été changé en %1."
+
+#: dialogs/knewloanwizard.cpp:763
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1013
+msgid "KMyMoney has calculated the term of your loan as %1. "
+msgstr "KMyMoney a calculé %1 comme terme pour votre prêt. "
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1052
+msgid "KMyMoney has calculated a balloon payment of %1 for this loan."
+msgstr "KMyMoney a calculé un paiement final de %1 pour ce prêt."
+
+#: dialogs/knewloanwizard.cpp:809
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1059
+msgid "KMyMoney has successfully verified your loan information."
+msgstr "KMyMoney a vérifié avec succès vos informations de prêt."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1067
+msgid ""
+"You have entered mis-matching information. Please modify your figures or "
+"leave one value empty to let KMyMoney calculate it for you"
+msgstr ""
+"Vous avez saisi une information non correspondante. Merci de modifier vos "
+"chiffres ou de laissez une valeur vide pour laisser KMyMoney la calculer "
+"pour vous"
+
+#: dialogs/knewloanwizard.cpp:504 dialogs/knewloanwizard.cpp:513
+#: dialogs/knewloanwizard.cpp:522 dialogs/knewloanwizard.cpp:532
+#: dialogs/knewloanwizard.cpp:820
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1070
+msgid "Calculation error"
+msgstr "Erreur de calcul"
+
+#: dialogs/knewloanwizard.cpp:824
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1074
+msgid ""
+"\n"
+"\n"
+"Accept this or modify the loan information and recalculate."
+msgstr ""
+"\n"
+"\n"
+"Accepter ceci ou modifier l'information de prêt et recalculer."
+
+#: dialogs/knewloanwizard.cpp:826
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1076
+msgid "Calculation successful"
+msgstr "Calcul réussi"
+
+#: dialogs/knewloanwizard.cpp:846
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1129
+#, c-format
+msgid ""
+"_n: one month\n"
+"%n months"
+msgstr ""
+"un mois\n"
+"%n mois"
+
+#: dialogs/knewloanwizard.cpp:850
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1133
+#, c-format
+msgid ""
+"_n: one year\n"
+"%n years"
+msgstr ""
+"un an\n"
+"%n ans"
+
+#: dialogs/knewloanwizard.cpp:854
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1137
+#, c-format
+msgid ""
+"_n: one payment\n"
+"%n payments"
+msgstr ""
+"un paiement\n"
+"%n paiements"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1190
+msgid "Press Calculate to verify the values"
+msgstr "Appuyer sur Calculer pour vérifier les valeurs"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1194
+msgid "Not all details supplied"
+msgstr "Tous les détails ne sont pas fournis"
+
+#: dialogs/kaccountselectdlg.cpp:70 dialogs/knewloanwizard.cpp:122
+#: dialogs/knewloanwizard.cpp:136
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1381
+msgid "&Create..."
+msgstr "&Créer ..."
+
+#: dialogs/knewloanwizard.cpp:138
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1383
+msgid "Create a new asset account"
+msgstr "Créer un nouveau compte d'actif"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1384
+msgid ""
+"If the asset account does not yet exist, press this button to create it."
+msgstr ""
+"Si le compte d'actif n'existe pas encore, appuyez sur cette touche pour le "
+"créer."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1596
+msgid "Account information"
+msgstr "Informations sur les comptes"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1601
+#: wizards/newaccountwizard/rc.cpp:59
+msgid "Subaccount of"
+msgstr "Sous-compte de"
+
+#: dialogs/rc.cpp:225 dialogs/rc.cpp:326 dialogs/rc.cpp:371 dialogs/rc.cpp:723
+#: plugins/ofximport/dialogs/rc.cpp:23 reports/listtable.cpp:225
+#: widgets/kmymoneyaccounttreebase.cpp:113 widgets/register.cpp:61
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1606
+msgid "Type"
+msgstr " Type"
+
+#: dialogs/kcurrencyeditdlg.cpp:62 dialogs/rc.cpp:56 dialogs/rc.cpp:59
+#: dialogs/rc.cpp:75 dialogs/rc.cpp:727 dialogs/rc.cpp:792
+#: kmymoneyutils.cpp:84 kmymoneyutils.cpp:111 mymoney/mymoneyaccount.cpp:741
+#: mymoney/mymoneysecurity.cpp:169 reports/listtable.cpp:233
+#: widgets/kmymoneypriceview.cpp:127
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1607
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1630
+#: wizards/newaccountwizard/rc.cpp:6 wizards/newaccountwizard/rc.cpp:24
+msgid "Currency"
+msgstr "Devise"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1608
+#: wizards/newaccountwizard/rc.cpp:7 wizards/newuserwizard/rc.cpp:9
+msgid "Opening date"
+msgstr "Date d'ouverture"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1610
+#: wizards/newaccountwizard/rc.cpp:9
+msgid "Conversion rate"
+msgstr "Taux de conversion"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1613
+#: wizards/newaccountwizard/rc.cpp:15 wizards/newuserwizard/rc.cpp:13
+msgid "Opening balance"
+msgstr "Solde de d'ouverture"
+
+#: dialogs/keditscheduledlg.cpp:507 dialogs/transactioneditor.cpp:784
+#: dialogs/transactioneditor.cpp:848 plugins/ofximport/dialogs/rc.cpp:22
+#: widgets/rc.cpp:111 widgets/register.cpp:59 widgets/transaction.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1618
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1632
+msgid "Number"
+msgstr "Numéro"
+
+#: dialogs/rc.cpp:365 wizards/newaccountwizard/knewaccountwizard.cpp:1621
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1634
+#: wizards/newaccountwizard/rc.cpp:26 wizards/newaccountwizard/rc.cpp:66
+msgid "IBAN"
+msgstr "IBAN"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1627
+msgid "Brokerage Account"
+msgstr "Compte de Placement"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1640
+msgid "Loan information"
+msgstr "Informations sur les prêts"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1643
+msgid "Amount borrowed"
+msgstr "Montant emprunté"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1645
+msgid "Amount lent"
+msgstr "Montant prêté"
+
+#: dialogs/rc.cpp:515 dialogs/rc.cpp:546
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1647
+#: wizards/newaccountwizard/rc.cpp:75
+msgid "Interest rate"
+msgstr "Taux d'intérêt"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1648
+msgid "Interest rate is"
+msgstr "Taux d'intérêt est"
+
+#: dialogs/rc.cpp:509 dialogs/rc.cpp:572
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1649
+msgid "Principal and interest"
+msgstr "Amortissement et intérêt"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1650
+#: wizards/newaccountwizard/rc.cpp:90
+msgid "Additional fees"
+msgstr "Frais additionnels"
+
+#: dialogs/rc.cpp:525 wizards/newaccountwizard/knewaccountwizard.cpp:1651
+#: wizards/newaccountwizard/rc.cpp:44
+msgid "Payment frequency"
+msgstr "Fréquence du paiement"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1652
+#: wizards/newaccountwizard/rc.cpp:105
+msgid "Payment account"
+msgstr "Comptes de paiement"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1655
+msgid "Payout information"
+msgstr "Informations sur les paiements"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1658
+msgid "Refinance"
+msgstr "Re-financer"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1661
+msgid "Transfer amount to"
+msgstr "Montant viré vers"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1663
+msgid "Transfer amount from"
+msgstr "Montant viré de"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1665
+msgid "Payment date"
+msgstr "Date du paiement"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1671
+msgid "Schedule information"
+msgstr "Informations sur les échéances"
+
+#: reports/listtable.cpp:228
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1684
+msgid "Occurence"
+msgstr "Occurrence"
+
+#: mymoney/mymoneyscheduled.cpp:891 mymoney/mymoneyscheduled.cpp:947
+#: mymoney/mymoneyscheduled.cpp:1283 mymoney/mymoneyscheduletest.cpp:1343
+#: widgets/rc.cpp:19 widgets/rc.cpp:74
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+msgid "Monthly"
+msgstr "Tous les mois"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1677
+msgid "Paid from"
+msgstr "Payé à partir"
+
+#: widgets/kmymoneycombo.cpp:473 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1678
+msgid "Pay to"
+msgstr "Payé à"
+
+#: dialogs/investactivities.cpp:197 dialogs/investactivities.cpp:285
+#: dialogs/investactivities.cpp:365 dialogs/kfindtransactiondlg.cpp:197
+#: dialogs/kmymoneysplittable.cpp:80 dialogs/rc.cpp:51 dialogs/rc.cpp:212
+#: reports/listtable.cpp:197 views/khomeview.cpp:421 views/khomeview.cpp:494
+#: views/khomeview.cpp:528 views/kscheduledview.cpp:73 views/rc.cpp:63
+#: widgets/register.cpp:58 widgets/transaction.cpp:1055
+#: widgets/transaction.cpp:1578 widgets/transaction.cpp:1610
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1679
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1685
+msgid "Amount"
+msgstr "Montant"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1680
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1686
+msgid "First payment due"
+msgstr "Première échéance de paiement"
+
+#: dialogs/rc.cpp:102 wizards/newaccountwizard/knewaccountwizard.cpp:1681
+#: wizards/newaccountwizard/rc.cpp:115
+msgid "Payment method"
+msgstr "Moyen de paiement"
+
+#: wizards/newaccountwizard/rc.cpp:1
+msgid ""
+"This page summarizes the data you have entered. Press <b>Finish</b> to "
+"create the account, schedules, etc. or use <b>Back</b> to modify your "
+"entries."
+msgstr ""
+"Cette page résume les données que vous avez saisies. Appuyez sur "
+"<b>Terminer</b> pour créer le compte, l'échéance, etc. ou sur <b>Précédent</"
+"b> pour modifier vos données."
+
+#: wizards/newaccountwizard/rc.cpp:2
+msgid "Item"
+msgstr "Point"
+
+#: dialogs/rc.cpp:110 dialogs/rc.cpp:165 dialogs/rc.cpp:252 dialogs/rc.cpp:757
+#: dialogs/rc.cpp:818 views/kinvestmentview.cpp:74 widgets/register.cpp:574
+#: wizards/newaccountwizard/rc.cpp:3
+msgid "Value"
+msgstr "Valeur"
+
+#: wizards/newaccountwizard/rc.cpp:4
+msgid ""
+"Enter the name of the account under which it is known within KMyMoney.\n"
+"Select the type for the new account. Use the <b>What's this?</b> feature to "
+"see more details about the various account types.\n"
+"Enter the date the account was opened and its currency."
+msgstr ""
+"Saisissez le nom du compte sous lequel il sera connu dans KMyMoney.\n"
+"Sélectionnez le type pour ce nouveau compte. Utilisez la fonction <b>Qu'est-"
+"ce que c'est ?</b> pour obtenir plus de détails sur les différents types de "
+"compte.\n"
+"Saisissez la date à laquelle le compte a été ouvert et sa monnaie."
+
+#: wizards/newaccountwizard/rc.cpp:5
+msgid "Select the currency in which this account is denominated."
+msgstr "Sélectionnez la monnaie avec laquelle ce compte est géré."
+
+#: wizards/newaccountwizard/rc.cpp:8
+msgid ""
+"The opening balance is the balance of the account when you start using it "
+"with KMyMoney. For new accounts this is usually 0 but for existing accounts "
+"this may well differ. Please consult the account statements to figure out "
+"this value. The opening balance is to be provided in the currency of the "
+"account as selected with the currency button."
+msgstr ""
+"Le solde d'ouverture est le solde du compte lorsque vous commencez à "
+"l'utiliser avec KMyMoney. Pour les nouveaux comptes, c'est généralement 0, "
+"mais pour les comptes existants, il peut être différent. Veuillez consulter "
+"les relevés de compte pour déterminer cette valeur. Le solde d'ouverture est "
+"fourni dans la monnaie du compte comme choisi avec le bouton de la monnaie."
+
+#: wizards/newaccountwizard/rc.cpp:10
+msgid ""
+"The opening date would be the date of the last statement. In case you want "
+"to keep track of transactions prior to this date, enter the ending balance "
+"and statement date of a prior statement and add all following transactions "
+"into KMyMoney.\n"
+"<br>\n"
+"<i>Note</i>: If you do not know the exact amount of the opening balance, "
+"enter an estimate. You can change this value later before you reconcile this "
+"account for the first time."
+msgstr ""
+"La date d'ouverture est celle de votre dernier relevé. Au cas où vous voulez "
+"conserver des opérations précédant cette date, entrez le solde de fin et la "
+"date d'un relevé précédent et saisissez toutes les opérations postérieures "
+"dans KMyMoney.\n"
+"<br>\n"
+"Note : Si vous ne connaissez pas le montant exact du solde d'ouverture, "
+"entrez une estimation. Vous pourrez changer cette valeur ultérieurement "
+"après avoir rapprocher ce compte pour la première fois."
+
+#: dialogs/rc.cpp:52 dialogs/rc.cpp:54 dialogs/rc.cpp:57 dialogs/rc.cpp:60
+#: dialogs/rc.cpp:748 dialogs/rc.cpp:749 dialogs/rc.cpp:768 widgets/rc.cpp:6
+#: widgets/rc.cpp:7 widgets/rc.cpp:8 widgets/rc.cpp:9 widgets/rc.cpp:10
+#: widgets/rc.cpp:11 widgets/rc.cpp:12 widgets/rc.cpp:13 widgets/rc.cpp:14
+#: widgets/rc.cpp:15 widgets/rc.cpp:16 widgets/rc.cpp:17
+#: wizards/newaccountwizard/rc.cpp:11 wizards/newaccountwizard/rc.cpp:88
+#: wizards/newaccountwizard/rc.cpp:91 wizards/newaccountwizard/rc.cpp:93
+#: wizards/newuserwizard/rc.cpp:14
+msgid "xxx"
+msgstr "xxx"
+
+#: wizards/newaccountwizard/rc.cpp:12
+msgid "Account type"
+msgstr "Type de compte"
+
+#: wizards/newaccountwizard/rc.cpp:13
+msgid ""
+"For foreign currencies an initial conversion rate needs to be provided. This "
+"should be the price of the foreign currency in the base currency on the "
+"opening date of the account."
+msgstr ""
+"Pour les devises étrangères, le taux de conversion initial doit être fourni. "
+"Ce devrait être le prix de la devise étrangère dans la monnaie de base à la "
+"date d'ouverture du compte."
+
+#: wizards/newaccountwizard/rc.cpp:14
+msgid "Account name"
+msgstr "Nom du compte"
+
+#: wizards/newaccountwizard/rc.cpp:16
+msgid ""
+"<p><b>Checking</b>\n"
+"Use the checking account type to manage activities on your checking account "
+"e.g. payments, checks and cash card purchases.</p>\n"
+"\n"
+"<p><b>Savings</b>\n"
+"Use the savings account type to manage activities on your savings account.</"
+"p>\n"
+"\n"
+"<p><b>Credit Card</b>\n"
+"Use the credit card account type to manage activities on your credit card.</"
+"p>\n"
+"\n"
+"<p><b>Cash</b>\n"
+"\n"
+"Use the cash account type to manage activities in your wallet.</p>\n"
+"\n"
+"<p><b>Loan</b>\n"
+"Use the loan account type to manage amortization loans (e.g. mortgages, car "
+"loan, money you lend, private loans etc.).</p>\n"
+"\n"
+"<p><b>Investment</b>\n"
+"Use the investment account to manage your stock, mutual fund and other "
+"investments.</p>\n"
+"\n"
+"<p><b>Asset</b>\n"
+"Use the asset account type to manage assets (e.g. your house, car or art "
+"collection).</p>\n"
+"\n"
+"<p><b>Liability</b>\n"
+"Use the liability account type to manage any type of liability except "
+"amortization loans. Use it for taxes you owe or money you borrowed from "
+"friends. For amortization loans like mortgages you should create a loan "
+"account.</p>"
+msgstr ""
+"<p><b>Chèque/b>\n"
+"Utilisez le type compte chèque type pour gérer les activités sur votre "
+"compte chèque, par exemple, les paiements, les chèques et les achats par "
+"carte.</p>\n"
+"\n"
+"<p><b>Épargne</b>\n"
+"Utilisez le type de compte d'épargne pour gérer les activités sur votre "
+"compte d'épargne.</p>\n"
+"\n"
+"<p><b>Carte de Crédit</b>\n"
+"Utilisez le type de compte de carte de crédit pour gérer les activités sur "
+"votre carte de crédit.</p>\n"
+"\n"
+"<p><b>Espèce</b>\n"
+"\n"
+"Utilisez le type de compte d'espèce pour gérer les activités dans votre "
+"portefeuille.</p>\n"
+"\n"
+"<p><b>Prêt</b>\n"
+"Utilisez le type de compte de prêt pour gérer l'amortissement des prêts (par "
+"exemple, les hypothèques, les prêts automobiles, l'argent que vous prêtez, "
+"les prêts privés, etc...).</p>\n"
+"\n"
+"<p><b>Investissement</b>\n"
+"Utilisez le compte d'investissement pour gérer vos stocks, les fonds communs "
+"de placement et autres placements.</p>\n"
+"\n"
+"<p><b>Actif</b>\n"
+"Utilisez le type de compte d'actif pour gérer des actifs (par exemple, votre "
+"maison, la voiture ou la collection d'art).</p>\n"
+"\n"
+"<p><b>Passif</b>\n"
+"Utilisez le type de compte de passif pour gérer tout type de passif, sauf "
+"l'amortissement des prêts. Utilisez-le pour les impôts que vous devez ou de "
+"l'argent emprunté à des amis. Pour l'amortissement des prêts hypothécaires, "
+"vous devez créer un compte de prêt.</p>"
+
+#: wizards/newaccountwizard/rc.cpp:17
+msgid "Preferred account"
+msgstr "Compte Favori"
+
+#: wizards/newaccountwizard/rc.cpp:18
+msgid ""
+"Mark this checkbox if the account should be maintained as preferred account"
+msgstr ""
+"Cochez cette case si le compte doit être marqué comme compte par défaut"
+
+#: wizards/newaccountwizard/rc.cpp:19
+msgid ""
+"Selecting the <b>Preferred Account</b> checkbox will allow preferred access "
+"in some dialogs and views of KMyMoney."
+msgstr ""
+"Sélectionner la case à cocher <b>Compte Favori</b> vous permettra d'accéder "
+"à certaines fenêtres et vues dans KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:20
+msgid "Enter a name under which this account is known within KMyMoney."
+msgstr "Saisissez le nom du compte sous lequel il sera connu dans KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:21
+msgid "Online quote"
+msgstr "Cotations en ligne"
+
+#: wizards/newaccountwizard/rc.cpp:22
+msgid ""
+"Does this investment account have a brokerage account?<p>\n"
+"\n"
+"<b>Check</b> the mark if this investment account has an associated account "
+"for money that is not invested.<br>\n"
+"\n"
+"<b>Uncheck</b> it if you don't use this account for active stock brokerage. "
+"You should also uncheck it if this account is not maintained by a bank or "
+"broker."
+msgstr ""
+"Est-ce que ce compte d'investissement possède un compte de courtage ?<p>\n"
+"\n"
+"<b>Cocher</b> la case si le compte d'investissement possède un compte "
+"associé pour l'argent qui n'est pas investi.<br>\n"
+"\n"
+"<b>Décochez</b> la case si vous n'utilisez pas ce compte pour une gestion "
+"active des actions. Vous devez aussi la décocher si ce compte n'est pas tenu "
+"par une banque ni par un courtier."
+
+#: wizards/newaccountwizard/rc.cpp:23
+msgid "Create brokerage account"
+msgstr "Créer un compte de courtage"
+
+#: wizards/newaccountwizard/rc.cpp:25 wizards/newaccountwizard/rc.cpp:64
+msgid "Account number"
+msgstr "Numéro du Compte"
+
+#: wizards/newaccountwizard/rc.cpp:27
+msgid ""
+"Please select the required options. Please use the <b>What's this?</b> "
+"feature to see more information about the items."
+msgstr ""
+"Veuillez sélectionner les options requises. Veuillez utiliser la fonction "
+"<b>Qu'est-ce que c'est ?</b> pour obtenir plus d'informations sur ces points."
+
+#: wizards/newaccountwizard/rc.cpp:28
+msgid "What is the type of the loan?"
+msgstr "Quel est le type du prêt ?"
+
+#: dialogs/rc.cpp:481 wizards/newaccountwizard/rc.cpp:29
+msgid "I am borrowing money"
+msgstr "J'emprunte de l'argent"
+
+#: dialogs/rc.cpp:482 wizards/newaccountwizard/rc.cpp:30
+msgid "I am lending money"
+msgstr "Je prête de l'argent"
+
+#: wizards/newaccountwizard/rc.cpp:31
+msgid "Who is the payee/payer of the loan?"
+msgstr "Qui est le bénéficiaire/payeur du prêt ?"
+
+#: wizards/newaccountwizard/rc.cpp:32
+msgid ""
+"Enter the name of the person or bank you owe money or who owes you money.\n"
+"\n"
+"If the name does not exist within KMyMoney's database, you are asked if you "
+"want to create it."
+msgstr ""
+"Entrez le nom de la personne ou d'une banque à qui vous devez de l'argent ou "
+"qui vous doit de l'argent.\n"
+"\n"
+"Si le nom n'existe pas dans la base de données de KMyMoney, on vous "
+"demandera si vous voulez le créer."
+
+#: wizards/newaccountwizard/rc.cpp:33
+msgid "Did you make/receive any payments yet?"
+msgstr "Avez-vous fait ou reçu déjà des paiements ?"
+
+#: wizards/newaccountwizard/rc.cpp:36
+msgid ""
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?\n"
+"\n"
+"Note: Payments made to obtain the loan (e.g. Disagio) are not considered as "
+"payments in this context."
+msgstr ""
+"Y a t-il des paiements pour ce prêt qui ont été déjà saisis dans KMyMoney ou "
+"pas ?\n"
+"Note: Les paiements effectués pour obtenir le prêt (par exemple Dissagio) ne "
+"sont pas considérés comme des paiements dans ce contexte."
+
+#: wizards/newaccountwizard/rc.cpp:37
+msgid "Which payments do you want to record?"
+msgstr "Quel paiement souhaitez-vous enregistrer ?"
+
+#: wizards/newaccountwizard/rc.cpp:38
+msgid "All payments"
+msgstr "Tous les paiements"
+
+#: wizards/newaccountwizard/rc.cpp:39
+msgid "Start with this year's payments"
+msgstr "Démarrer avec les paiements de l'année"
+
+#: wizards/newaccountwizard/rc.cpp:40
+msgid ""
+"<qt>Select which transactions should be recorded.\n"
+"\n"
+"<b>All payments</b> allows you to enter all payments made for this loan.\n"
+"\n"
+"The option to <b>start from the beginning of the current year</b> is meant "
+"for loans that are active for a longer period of time already and you don't "
+"want to enter all transactions of the past.\n"
+"</qt>"
+msgstr ""
+"<qt>Sélectionnez quelles opérations devront être enregistrées.\n"
+"\n"
+"<b>Tous les paiements</b> vous permet d'entrer tous les paiements faits pour "
+"ce prêt.\n"
+"\n"
+"L'option de <b>commencer à partir du début de l'année courante</b> veut dire "
+"que pour les prêts qui sont actifs pendant une plus longue période de temps "
+"vous ne voulez pas saisir toutes les opérations antérieures.\n"
+"</qt>"
+
+#: wizards/newaccountwizard/rc.cpp:41
+msgid "Balance before start of recording"
+msgstr "Solde avant le début de l'enregistrement"
+
+#: wizards/newaccountwizard/rc.cpp:42
+msgid ""
+"Enter the ending balance found on the statement that is the last one before "
+"you want to start recording this loan in KMyMoney."
+msgstr ""
+"Entrez le solde trouvé sur le dernier relevé avant que vous souhaitez "
+"commencer l'enregistrement de ce prêt en KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:43
+msgid ""
+"You have selected to record only payments from the beginning of this year. "
+"Since prior transactions will not be recorded, you need to supply the "
+"balance of the loan on January 1st of this year."
+msgstr ""
+"Vous avez choisi d'enregistrer seulement les paiements à partir du début de "
+"cette année. Comme avant les opérations antérieures ne seront pas "
+"enregistrées, vous devez fournir le solde du prêt au 1er janvier de cette "
+"année."
+
+#: wizards/newaccountwizard/rc.cpp:45
+msgid "Interest Compounding frequency"
+msgstr "Fréquence de l'intérêt composé"
+
+#: wizards/newaccountwizard/rc.cpp:46
+msgid ""
+"Select the frequency with which the interest is compounded. If uncertain, "
+"select the same as the payment frequency. Consult your loan contract for "
+"details."
+msgstr ""
+"Choisissez la fréquence avec laquelle l'intérêt composé. Si vous n'êtes pas "
+"sûr, sélectionnez le nom comme fréquence de paiement. Consultez votre "
+"contrat de prêt pour les détails."
+
+#: wizards/newaccountwizard/rc.cpp:47
+msgid "Due date of first payment to be recorded"
+msgstr "Date d'échéance du premier versement à enregistrer"
+
+#: wizards/newaccountwizard/rc.cpp:48
+msgid ""
+"Depending on the answer to <b>What do you want to record?</b> this field "
+"means the following:<p>\n"
+"\n"
+"<b>All payments</b><br>\n"
+"Enter the due date of the very first payment<p>\n"
+"\n"
+"<b>Start with this year's payments</b><br>\n"
+"Enter the due date of the first payment in the current year"
+msgstr ""
+"Dépendant de la réponse <b>Que voulez-vous enregistrer ?</b>, ce champ "
+"représente les éléments suivants :<p>\n"
+"\n"
+"<b>Tous les paiements</b><br>\n"
+"Entrez la date d'échéance du premier versement<p>\n"
+"\n"
+"<b>Commencez les paiements de cette année</b><br>\n"
+"Entrez la date d'échéance du premier paiement pour l'année courante"
+
+#: wizards/newaccountwizard/rc.cpp:49
+msgid "Type of interest rate"
+msgstr "Type du taux d'intérêt"
+
+#: wizards/newaccountwizard/rc.cpp:50
+msgid "Fixed"
+msgstr "Fixe"
+
+#: wizards/newaccountwizard/rc.cpp:51
+msgid "Variable"
+msgstr "Variable"
+
+#: wizards/newaccountwizard/rc.cpp:52
+msgid "Time between interest changes"
+msgstr "Temps entre les changements d'intérêt"
+
+#: dialogs/knewloanwizard.cpp:613 wizards/newaccountwizard/rc.cpp:53
+msgid "Days"
+msgstr "Jours"
+
+#: dialogs/knewloanwizard.cpp:614 wizards/newaccountwizard/rc.cpp:54
+msgid "Weeks"
+msgstr "Semaines"
+
+#: wizards/newaccountwizard/rc.cpp:57
+msgid "Next interest change is due"
+msgstr "Le prochain changement de taux d'intérêt est dû"
+
+#: wizards/newaccountwizard/rc.cpp:58
+msgid "This page allows you to select the parent account."
+msgstr "Cette page vous permet de sélectionner un compte père."
+
+#: wizards/newaccountwizard/rc.cpp:60
+msgid ""
+"If this account is managed by an institution please select the institution "
+"from the list. If the institution does not exist yet, please choose the "
+"<b>New Institution</b> button to create it. Otherwise, leave this field "
+"empty.\n"
+"Enter the account number used by the institution to identify the account."
+msgstr ""
+"Si ce compte est géré par un établissement, merci de le choisir dans la "
+"liste. Si cet établissement n'existe pas encore, appuyez sur le bouton "
+"<b>Nouvel Établissement</b> pour le créer. Sinon, laissez ce champ vide.\n"
+"Entrez le numéro de compte utilisé par l'établissement pour identifier le "
+"compte."
+
+#: wizards/newaccountwizard/rc.cpp:62
+msgid "Select the institution which manages this account or leave empty"
+msgstr "Sélectionnez l'établissement qui gère ce compte ou laisser vide"
+
+#: wizards/newaccountwizard/rc.cpp:63
+msgid "New Institution"
+msgstr "Nouvel Établissement"
+
+#: wizards/newaccountwizard/rc.cpp:65
+msgid ""
+"Accounts managed by an institution are usually referenced by a unique number "
+"the so called account number. Enter that number here.\n"
+"\n"
+"KMyMoney currently uses this number only for some online banking functions."
+msgstr ""
+"Les comptes gérés par un établissement sont généralement référencés par un "
+"numéro unique que l'on appelle le numéro de compte. Entrez ce numéro ici.\n"
+"\n"
+"KMyMoney utilise actuellement ce numéro uniquement pour certaines fonctions "
+"des services bancaires en ligne."
+
+#: wizards/newaccountwizard/rc.cpp:67
+msgid "Enter the International Bank Account Number into this field"
+msgstr ""
+"Saisissez le Numéro de compte bancaire international (IBAN) dans ce champ"
+
+#: wizards/newaccountwizard/rc.cpp:68
+msgid ""
+"You can enter the IBAN (International Bank Account Number) into this field "
+"if you know it. Usually, people at your institution can tell you the number "
+"or it is printed on your statements.\n"
+"\n"
+"See also http://en.wikipedia.org/wiki/International_Bank_Account_Number for "
+"more information.\n"
+"\n"
+"KMyMoney keeps this field only for documentation purposes and does not use "
+"it otherwise."
+msgstr ""
+"Vous pouvez saisir l'IBAN (Numéro de compte bancaire international) dans ce "
+"champ, si vous le connaissez. Habituellement, les gens de votre "
+"établissement peut vous dire le numéro ou il est imprimé sur vos relevés.\n"
+"\n"
+"Voir aussi pour http://en.wikipedia.org/wiki/"
+"International_Bank_Account_Number pour plus d'informations. \n"
+"\n"
+"KMyMoney conserve ce champ uniquement des fins de documentation et ne "
+"l'utilise pas autrement."
+
+#: wizards/newaccountwizard/rc.cpp:69
+msgid ""
+"Now enter the details for your loan. You can leave one of the fields empty "
+"and KMyMoney will calculate it when you press the <b>Calculate</b> button. "
+"Before you can continue with the next page you also need to press "
+"<b>Calculate</b> so that KMyMoney can check the logical correctness of the "
+"values you have supplied."
+msgstr ""
+"Maintenant, entrez les détails de votre prêt. Vous pouvez laisser l'un des "
+"champs vide et KMyMoney le calculera lorsque vous appuyez sur le bouton <b> "
+"Calculer </b>.Avant de pouvoir passer à la page suivante, vous devez "
+"également appuyer sur <b>Calculer</b> pour que KMyMoney puisse vérifier la "
+"justesse des valeurs que vous avez fournies."
+
+#: wizards/newaccountwizard/rc.cpp:70
+msgid "The interest rate gets calculated"
+msgstr "Le taux d'intérêt sera calculé"
+
+#: wizards/newaccountwizard/rc.cpp:71
+msgid "when the payment is received"
+msgstr "quand le paiement est reçu"
+
+#: wizards/newaccountwizard/rc.cpp:72
+msgid "when the payment is due"
+msgstr "quand le paiement est dû"
+
+#: dialogs/rc.cpp:531 dialogs/rc.cpp:533 wizards/newaccountwizard/rc.cpp:73
+msgid "Loan amount"
+msgstr "Montant du prêt"
+
+#: wizards/newaccountwizard/rc.cpp:74
+msgid ""
+"Enter the amount of the loan in this field. If you want to calculate this "
+"field out of the other parameters, please leave it empty. If the field is "
+"marked as required (colored background) you have informed KMyMoney about the "
+"fact that there were already some payments towards the loan. In this case, "
+"please enter the ending balance of your last statement."
+msgstr ""
+"Entrez le montant du prêt dans ce champ. Si vous voulez calculer ce champ "
+"avec les autres paramètres, merci de le laisser vide. Si le champ est marqué "
+"comme requis (couleur de fond colorée), vous aurez informé KMyMoney sur le "
+"fait qu'il y avait déjà quelques paiements sur le prêt. Dans ce cas, "
+"veuillez entrer le solde de votre dernière relevé."
+
+#: wizards/newaccountwizard/rc.cpp:76
+msgid ""
+"Please enter the interest rate in percent or leave the field empty to "
+"calculate it."
+msgstr ""
+"Veuillez saisir le taux d'intérêt en pourcentage ou laisser le champ vide "
+"pour le calculer."
+
+#: dialogs/rc.cpp:559 wizards/newaccountwizard/rc.cpp:77
+msgid "Term"
+msgstr "Terme"
+
+#: wizards/newaccountwizard/rc.cpp:78
+msgid ""
+"Please enter the term of this loan or enter 0 to calculate it. The term is "
+"the time that is required to fully repay the loan. This time might be "
+"different from the time your loan contract is signed for."
+msgstr ""
+"Veuillez saisir le terme de ce prêt ou laisser ce champ vide pour le "
+"calculer. Le terme est la date où vous aurez rembourser totalement le prêt. "
+"Cette date doit être différente de la date de signature de votre contrat de "
+"prêt."
+
+#: wizards/newaccountwizard/rc.cpp:79
+msgid "Payment (principal and interest)"
+msgstr "Paiement (amortissement et intérêt)"
+
+#: wizards/newaccountwizard/rc.cpp:80
+msgid ""
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"Veuillez saisir le montant que vous payez pour les intérêts et "
+"l'amortissement ou laisser le champ vide afin de le calculer."
+
+#: wizards/newaccountwizard/rc.cpp:81
+msgid "Balloon payment"
+msgstr "Paiement final"
+
+#: wizards/newaccountwizard/rc.cpp:82
+msgid ""
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"Veuillez saisir le montant du paiement final d'amortissement, ou laisser le "
+"champ vide pour le calculer."
+
+#: wizards/newaccountwizard/rc.cpp:83
+msgid "Calculate"
+msgstr "Calculer"
+
+#: wizards/newaccountwizard/rc.cpp:84
+msgid "Press this button to calculate/verify your loan details."
+msgstr "Appuyer sur le bouton pour calculer ou vérifier les détails du prêt."
+
+#: wizards/newaccountwizard/rc.cpp:85
+msgid ""
+"Pressing this button calculates a possibly missing parameter for your loan "
+"or verifies that the values entered match. If something is not correct you "
+"will receive information about it."
+msgstr ""
+"Appuyer sur ce bouton calcule un paramètre manquant pour votre prêt ou "
+"vérifie que les valeurs saisies correspondent. Si quelque chose n'est pas "
+"correct, vous recevrez une information à son sujet."
+
+#: wizards/newaccountwizard/rc.cpp:86
+msgid ""
+"Now enter the information required for the periodic loan payments. If your "
+"regular payments contains any additional fees, click on the <b>Additional "
+"fees</b> button to enter them."
+msgstr ""
+"Maintenant, entrez les informations requises pour le remboursement "
+"périodique de l'emprunt.Si vos paiements réguliers contiennent des frais "
+"additionnels, appuyez sur le bouton <b>Frais additionnels</b> pour les "
+"saisir."
+
+#: wizards/newaccountwizard/rc.cpp:87
+msgid "Principal + Interest"
+msgstr "Amortissement + intérêt"
+
+#: dialogs/rc.cpp:620 wizards/newaccountwizard/rc.cpp:89
+msgid "+"
+msgstr "+"
+
+#: wizards/newaccountwizard/rc.cpp:92
+msgid "= periodical payments"
+msgstr "= paiements périodiques"
+
+#: dialogs/rc.cpp:643 wizards/newaccountwizard/rc.cpp:94
+msgid ""
+"If this loan is for an asset, such as a car or a house, you can create the "
+"asset account now. An asset account represents the total value of an asset. "
+"The money from this loan will be transfered into the asset account you "
+"create or select.\n"
+"If this loan is a 'consumer loan' (money to use however you want), you can "
+"use a checking account instead."
+msgstr ""
+"Si ce prêt est pour un achat, comme une voiture ou une maison, vous pouvez "
+"créer le compte d'actif maintenant. Un compte actif représente toute la "
+"valeur de l'achat. L'argent de ce prêt sera transféré dans le compte d'actif "
+"que vous créerez ou choisirez.\n"
+"Si ce prêt est un 'crédit à la consommation' (argent à employer quand vous "
+"voulez,) vous pouvez utiliser un compte chèques à la place."
+
+#: dialogs/rc.cpp:644 wizards/newaccountwizard/rc.cpp:95
+msgid "Don't create payout transaction"
+msgstr "Ne pas créer d'opération de versement"
+
+#: wizards/newaccountwizard/rc.cpp:96
+msgid "Refinance existing loan"
+msgstr "Re financer des prêts existants"
+
+#: wizards/newaccountwizard/rc.cpp:97
+msgid ""
+"Check this if you are refinancing a loan that already exists in KMyMoney"
+msgstr ""
+"Cochez cette option si vous avez re-financé le prêt qui existe déjà dans "
+"KMyMoney"
+
+#: dialogs/rc.cpp:642 wizards/newaccountwizard/rc.cpp:98
+msgid "Asset Account"
+msgstr "Compte d'actif"
+
+#: dialogs/rc.cpp:2 wizards/newaccountwizard/rc.cpp:99
+msgid "Create"
+msgstr "Créer"
+
+#: wizards/newaccountwizard/rc.cpp:100
+msgid "Loan account"
+msgstr "Compte du prêt"
+
+#: dialogs/rc.cpp:646 wizards/newaccountwizard/rc.cpp:101
+msgid "Date of payment"
+msgstr "Date du paiement"
+
+#: wizards/newaccountwizard/rc.cpp:102
+msgid ""
+"KMyMoney creates a schedule for this payment and reminds you whenever a "
+"payment must be made. Please select the account to/from which payments will "
+"be made and the category the interest will be assigned to.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"KMyMoney créera une échéance pour ce paiement et vous rappellera lorsqu'un "
+"paiement devra être fait. Sélectionnez le compte à partir duquel les "
+"paiements seront effectués et la catégorie à laquelle l'intérêt sera affecté."
+"<p>\n"
+"Si vous choisissez d'enregistrer tous les paiements, cette date a déjà été "
+"fournie. Si vous choisissez d'enregistrer seulement les paiements des "
+"prochaines années, alors la <b>Première date de paiement dû</b> sera la date "
+"du premier paiement fait cette année."
+
+#: dialogs/rc.cpp:613 wizards/newaccountwizard/rc.cpp:103
+msgid "Interest category"
+msgstr "Catégorie des intérêts"
+
+#: wizards/newaccountwizard/rc.cpp:104
+msgid ""
+"The category the interest part of the payment will be assigned to. If you "
+"borrow money you usually have to pay interest, so this should be an expense "
+"category. If you lend the money, you receive the interest. In this case, "
+"select an income category here."
+msgstr ""
+"La catégorie de la part intérêt du paiement sera affecté. Si vous empruntez "
+"de l'argent, vous devez généralement payer des intérêts, donc cela doit être "
+"une dépense catégorie. Si vous prêtez de l'argent, vous recevez des "
+"intérêts. Dans ce cas, sélectionnez une catégorie de revenu ici."
+
+#: wizards/newaccountwizard/rc.cpp:106
+msgid ""
+"Select the account from which you make your periodical payments or where you "
+"receive regular payments in case you lend the money. In most cases, this is "
+"a checking account."
+msgstr ""
+"Sélectionnez le compte à partir duquel vous effectuerez vos paiements "
+"périodiques ou lorsque vous recevez des versements réguliers dans le cas où "
+"vous prêter de l'argent. Dans la plupart des cas, il s'agit d'un compte-"
+"chèques."
+
+#: dialogs/rc.cpp:519 wizards/newaccountwizard/rc.cpp:107
+msgid "First payment due on"
+msgstr "Premier paiement dû le "
+
+#: wizards/newaccountwizard/rc.cpp:108
+msgid ""
+"For credit card accounts you can create a monthly schedule which will "
+"automatically remind you about the payment. Please fill in the details about "
+"this payment here."
+msgstr ""
+"Pour les comptes de carte de crédit, vous pouvez créer une échéance "
+"mensuelle qui vous rappellera automatiquement le paiement. S’il vous plaît, "
+"remplissez les détails de ce paiement."
+
+#: wizards/newaccountwizard/rc.cpp:109
+msgid "Yes, remind me when the payment is due"
+msgstr "Oui, me le rappeler si le paiement est dû"
+
+#: wizards/newaccountwizard/rc.cpp:110
+msgid "Name of schedule"
+msgstr "Nom de l'échéance"
+
+#: dialogs/rc.cpp:151 dialogs/rc.cpp:218 dialogs/rc.cpp:219
+#: reports/listtable.cpp:199 views/kscheduledview.cpp:72 widgets/rc.cpp:113
+#: widgets/register.cpp:57 wizards/newaccountwizard/rc.cpp:111
+msgid "Payee"
+msgstr "Tiers"
+
+#: wizards/newaccountwizard/rc.cpp:112
+msgid "Estimated monthly payment"
+msgstr "Estimation du paiement mensuel"
+
+#: wizards/newaccountwizard/rc.cpp:113
+msgid "Due date of next payment"
+msgstr "Date du prochain paiement"
+
+#: wizards/newaccountwizard/rc.cpp:114
+msgid ""
+"Payment should be made\n"
+"from account"
+msgstr ""
+"Le paiement doit être fait\n"
+" à partir du compte"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:79
+msgid "KMyMoney New File Setup"
+msgstr "Paramétrage nouveau fichier KMyMoney"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:81
+msgid "Introduction"
+msgstr "Introduction"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:82
+msgid "Personal Data"
+msgstr "Données personnelles"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:83
+msgid "Select Currency"
+msgstr "Choisir une devise de base"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:84
+msgid "Select Accounts"
+msgstr "Sélectionner les comptes"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:85
+msgid "Set preferences"
+msgstr "Définir les préférences"
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid ""
+"Unable to load data, because no contact has been associated with the owner "
+"of the standard addressbook."
+msgstr ""
+"Impossible de charger les données, parce qu'aucun contact n'a été associé "
+"avec le propriétaire du carnet d'adresse."
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid "Addressbook import"
+msgstr "Importer le carnet d'adresse"
+
+#: wizards/newuserwizard/rc.cpp:1
+msgid ""
+"A typical KMyMoney user maintains a checking a account with some institution "
+"and uses it to receive money or pay bills. If this is not the case, please "
+"deselect the checkbox below and continue on the next page."
+msgstr ""
+"Un utilisateur typique KMyMoney maintient une vérification du compte avec "
+"quelque établissement et l'utilise pour recevoir de l'argent ou de payer des "
+"factures. Si ce n'est pas le cas, s’il vous plaît dé-sélectionnez la case ci-"
+"dessous et continuez à la page suivante."
+
+#: wizards/newuserwizard/rc.cpp:2
+msgid "I have a checking account that I want to manage with KMyMoney"
+msgstr "Je possède un compte chèque que je désire gérer avec KMyMoney"
+
+#: wizards/newuserwizard/rc.cpp:3
+msgid "The name of the instititution that issued the account."
+msgstr "Le nom de l'établissement où est tenu le compte."
+
+#: wizards/newuserwizard/rc.cpp:4
+msgid ""
+"Each institution has a routing number. Enter it here. If uncertain, leave "
+"the field blank. You can modify it later."
+msgstr ""
+"Chaque établissement dispose d'un numéro de routage. Saisissez-le ici. Si "
+"vous n'êtes pas sûr, laissez le champ vide. Vous pourrez le modifier plus "
+"tard."
+
+#: wizards/newuserwizard/rc.cpp:5
+msgid "Name of the institution"
+msgstr "Nom de l'établissement"
+
+#: wizards/newuserwizard/rc.cpp:6
+msgid "Routing number"
+msgstr "Numéro de Routage"
+
+#: wizards/newuserwizard/rc.cpp:7
+msgid ""
+"In general the institution that issued the account also issued a number for "
+"it. Enter it here. If uncertain, you can modify this entry later."
+msgstr ""
+"En général, l'établissement qui tient le compte a également émis un numéro "
+"pour lui. Saisissez-le ici. Si vous n'êtes pas sûr, laissez le champ vide. "
+"Vous pourrez modifier cette saisie plus tard."
+
+#: wizards/newuserwizard/rc.cpp:8
+msgid ""
+"Enter a descriptive name that will be used by KMyMoney to identify your "
+"checking account."
+msgstr ""
+"Saisissez un nom qui sera utilisé par KMyMoney pour identifier votre compte-"
+"chèques."
+
+#: wizards/newuserwizard/rc.cpp:10
+msgid ""
+"Enter the date from when on you plan to keep track of the transactions in "
+"that account. This is usually the date of the last statement. If uncertain, "
+"leave as is."
+msgstr ""
+"Entrez la date à laquelle vous prévoyez de faire le suivi des opérations "
+"dans ce compte. C'est généralement la date du dernier relevé. Si vous n'êtes "
+"pas sûr, laissez-le tel quel."
+
+#: wizards/newuserwizard/rc.cpp:11
+msgid "Number of the account"
+msgstr "Numéro du compte"
+
+#: wizards/newuserwizard/rc.cpp:12
+msgid "Name of the account"
+msgstr "Nom du compte"
+
+#: wizards/newuserwizard/rc.cpp:15
+msgid ""
+"Enter the opening balance of the account. This is usually the ending balance "
+"of the last statement. If uncertain, leave as is."
+msgstr ""
+"Entrez le solde d'ouverture du compte. C'est généralement le solde du "
+"dernier relevé. Si vous n'êtes pas sûr, laissez-le tel quel."
+
+#: wizards/newuserwizard/rc.cpp:16
+msgid ""
+"The fields below allow you to enter some information about your checking "
+"account. Once this wizard finishes, the account will be created for you "
+"within KMyMoney."
+msgstr ""
+"Les champs ci-dessous vous permettent de saisir des informations sur votre "
+"compte-chèques. Une fois cet assistant terminé, le compte sera créé dans "
+"KMyMoney."
+
+#: wizards/newuserwizard/rc.cpp:17
+msgid ""
+"KMyMoney supports multiple currencies. Your reports will be based on a "
+"default curreny which you can select here. The default for new accounts is "
+"also the currency you select here."
+msgstr ""
+"KMyMoney supporte de nombreuses devises. Vos rapports seront basés sur la "
+"devise par défaut que vous pouvez choisir ici. La devise par défaut pour les "
+"nouveaux comptes sera aussi choisi ici."
+
+#: wizards/newuserwizard/rc.cpp:18
+msgid ""
+"KMyMoney will store your financial data in a file on the disk. A standard "
+"filename within your KDE user environment will be the default. This is just "
+"provided for convenience and you can choose any other location here."
+msgstr ""
+"KMyMoney va stocker vos données financières dans un fichier sur le disque. "
+"Un nom de fichier standard au sein de votre environnement utilisateur KDE "
+"sera l'option par défaut. Celle-ci est fournie à titre indicatif seulement "
+"et vous pouvez choisir tout autre lieu ici."
+
+#: wizards/newuserwizard/rc.cpp:19
+msgid ""
+"Either the currently selected file exists or the selected directory does not "
+"exist. Please make sure, that\n"
+"\n"
+"<ul>\n"
+"<li>the selected directory exists and</li>\n"
+"<li>the filename is not currently used in this directory.</li>\n"
+"</ul>"
+msgstr ""
+"Soit le fichier actuellement sélectionné existe ou le répertoire sélectionné "
+"n'existe pas. Veuillez-vous assurez que\n"
+"\n"
+"<ul>\n"
+"<li>le répertoire sélectionné existe et</li>\n"
+"<li>le nom du fichier n'est pas déjà utilisé dans ce répertoire.</li>\n"
+"</ul>"
+
+#: wizards/newuserwizard/rc.cpp:20
+msgid ""
+"This finishes the setup of your KMyMoney environment. You can now press the "
+"Finish button and start using KMyMoney to record your financial transactions."
+msgstr ""
+"Ceci termine la configuration de votre environnement KMyMoney. Vous pouvez "
+"maintenant appuyer sur le bouton Terminer et commencer à utiliser KMyMoney "
+"pour enregistrer vos opérations financières."
+
+#: wizards/newuserwizard/rc.cpp:21
+msgid ""
+"Please enter some information about yourself.<br><br>\n"
+"\n"
+"This information will be seen and used only by you. The information is used "
+"to personalize KMyMoney, to encrypt your file, etc."
+msgstr ""
+"Merci de saisir quelques informations sur vous.<br><br>\n"
+"\n"
+"Ces informations seront vues et utilisé seulement par vous. Ces informations "
+"sont utilisées pour personnaliser KMyMoney, pour crypter votre fichier, "
+"etc..."
+
+#: wizards/newuserwizard/rc.cpp:28
+msgid "Zip code"
+msgstr "Code postal"
+
+#: wizards/newuserwizard/rc.cpp:30
+msgid "Welcome to KMyMoney!"
+msgstr "Bienvenue dans KMyMoney !"
+
+#: wizards/newuserwizard/rc.cpp:31
+msgid ""
+"You have started KMyMoney for the first time on this computer. Before this "
+"program can help you to manage your finances, it needs to collect some data "
+"from you.<p>\n"
+"\n"
+"On the next few pages you will be guided through the steps necessary to "
+"setup the program. This will happen only once."
+msgstr ""
+"Vous avez démarré KMyMoney pour la première fois sur cet ordinateur. Avant "
+"que ce programme puisse vous aider à gérer vos finances, il doit recueillir "
+"des données sur vous.<p>\n"
+"\n"
+"Sur les pages suivantes, vous serez guidé à travers les étapes nécessaires à "
+"l'initialisation du programme. Cela ne se produit qu'une seule fois."
+
+#: wizards/newuserwizard/rc.cpp:32
+msgid ""
+"<p>KMyMoney can encrypt your datafile using GPG Encryption. GPG encryption "
+"is one of the most secure methods in the world for protecting data. All of "
+"your account numbers and other important financial information will be very "
+"secure.</p>"
+msgstr ""
+"<p>KMyMoney peut crypter votre fichier de données en utilisant le cryptage "
+"GPG. Le cryptage GPG est l'une des méthodes les plus sécurisées au monde "
+"pour la protection des données. Tous vos numéros de compte et toutes les "
+"autres informations financières importantes seront très sécurisés.</p>"
+
+#: wizards/newuserwizard/rc.cpp:33
+msgid ""
+"If you would like to review or change any preference settings for KMyMoney "
+"at this time, you can do so here. If not just click <b>Next</b>."
+msgstr ""
+"Si vous souhaitez vérifier ou modifier certains paramètres de préférence "
+"pour KMyMoney à ce moment, vous pouvez le faire ici. Sinon il vous suffira "
+"de cliquer sur<b> Suivant </b>."
+
+#: wizards/newuserwizard/rc.cpp:34
+msgid "Configure preferences now"
+msgstr "Configurer les préférences maintenant"
+
+#: wizards/newuserwizard/rc.cpp:35
+msgid ""
+"You can change the configuration options at any time using the configuration "
+"dialog. Just select the <b>Configure KMyMoney...</b> option in the "
+"<b>Settings</b> menu."
+msgstr ""
+"Vous pouvez modifier les options de configuration à tout moment en utilisant "
+"la boite de dialogue de configuration. Il vous suffira de sélectionner "
+"l'option <b>Configurer KMyMoney ...</b> dans le menu <b>Paramètres</b>."
+
+#: dialogs/rc.cpp:83 dialogs/rc.cpp:411 dialogs/rc.cpp:435
+#: kmymoneyutils.cpp:92 kmymoneyutils.cpp:105 mymoney/mymoneyaccount.cpp:753
+#: mymoney/mymoneysecurity.cpp:160
+msgid "Stock"
+msgstr "Action"
+
+#: dialogs/rc.cpp:84 dialogs/rc.cpp:412 dialogs/rc.cpp:436
+#: kmymoneyutils.cpp:107 mymoney/mymoneysecurity.cpp:163
+msgid "Mutual Fund"
+msgstr "Fond Commun de Placement"
+
+#: dialogs/rc.cpp:85 dialogs/rc.cpp:413 dialogs/rc.cpp:437
+#: kmymoneyutils.cpp:109 mymoney/mymoneysecurity.cpp:166
+msgid "Bond"
+msgstr "Obligation"
+
+#: mymoney/mymoneysecurity.cpp:172 reports/querytable.cpp:1150
+#: widgets/kmymoneyaccountselector.cpp:76
+msgid "None"
+msgstr "Aucun"
+
+#: dialogs/rc.cpp:46 kmymoneyutils.cpp:402 mymoney/mymoneyaccount.cpp:759
+#: mymoney/mymoneyscheduled.cpp:1002 mymoney/mymoneysecurity.cpp:175
+#: views/kforecastview.cpp:174 widgets/register.cpp:54
+#: widgets/register.cpp:485 widgets/transaction.cpp:708
+#: widgets/transaction.cpp:1459
+msgid "Unknown"
+msgstr "Inconnu"
+
+#: mymoney/storage/mymoneystoragesql.cpp:191
+msgid ""
+"Database apparently in use\n"
+"Opened by %1 on %2 at %3.\n"
+"Open anyway?"
+msgstr ""
+"Base de données apparemment en cours d'utilisation\n"
+"Ouvert par %1 sur %2 à %3.\n"
+"Ouvrir quand même ?"
+
+#: mymoney/storage/mymoneystoragesql.cpp:229
+msgid "Cannot currently create database for driver %1; please create manually"
+msgstr ""
+"Impossible actuellement de créer la base de données pour le driver %1, "
+"veuillez la créer manuellement"
+
+#: mymoney/storage/mymoneystoragesql.cpp:244
+msgid "Error in create database %1; do you have create permissions?"
+msgstr ""
+"Erreur pendant la création de la base de données %1, avez-vous créé des "
+"permissions ?"
+
+#: converter/mymoneygncreader.cpp:1329
+#: mymoney/storage/mymoneystoragexml.cpp:166
+msgid "Loading transactions..."
+msgstr "Chargement des opérations ..."
+
+#: converter/mymoneygncreader.cpp:1190
+#: mymoney/storage/mymoneystoragexml.cpp:173
+msgid "Loading accounts..."
+msgstr "Chargement des comptes ..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:180
+msgid "Loading securities..."
+msgstr "Chargement des valeurs ..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:187
+msgid "Loading reports..."
+msgstr "Chargement des rapports ..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:268
+msgid "Unknown XML tag %1 found in line %2"
+msgstr "Marqueur XML inconnu %1 trouvé à la ligne %2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:274
+msgid "Exception while creating a %1 element: %2"
+msgstr "Exception lors de la création de %1 élément: %2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:513
+msgid "Loading file information..."
+msgstr "Chargement des informations du fichier ..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:591
+msgid "Loading user information..."
+msgstr "Chargement des informations de l'utilisateur ..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:655
+msgid "Saving accounts..."
+msgstr "Sauvegarde des comptes ..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:678
+msgid "Saving transactions..."
+msgstr "Sauvegarde des opérations ..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:747
+msgid "Saving reports..."
+msgstr "Sauvegarde des rapports ..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:762
+msgid "Saving budgets..."
+msgstr "Sauvegarde des budgets ..."
+
+#: mymoney/storage/mymoneystoragedump.cpp:414
+msgid "not reconciled"
+msgstr "non rapproché"
+
+#: mymoney/storage/mymoneystoragedump.cpp:417
+msgid "cleared"
+msgstr "pointé"
+
+#: mymoney/storage/mymoneystoragedump.cpp:420
+msgid "reconciled"
+msgstr "rapproché"
+
+#: mymoney/storage/mymoneystoragedump.cpp:423
+msgid "frozen"
+msgstr "gelé"
+
+#: mymoney/storage/mymoneystoragedump.cpp:426
+msgid "unknown"
+msgstr "inconnu"
+
+#: mymoney/mymoneyaccount.cpp:101
+msgid ""
+"Account %1 contains an opening balance. Please use a KMyMoney version >= 0.8 "
+"and < 0.9 to correct the problem."
+msgstr ""
+"Le compte %1 contient un solde d'ouverture. Merci d'utiliser une version de "
+"KMyMoney >= 0.8 and < 0.9 pour corriger le problème."
+
+#: mymoney/mymoneyaccount.cpp:597
+msgid ""
+"_: Brokerage (suffix for account names)\n"
+"Brokerage"
+msgstr "Courtage"
+
+#: kmymoneyutils.cpp:74 mymoney/mymoneyaccount.cpp:726
+msgid "Certificate of Deposit"
+msgstr "Certificat de dépôt"
+
+#: kmymoneyutils.cpp:78 mymoney/mymoneyaccount.cpp:732
+msgid "Money Market"
+msgstr "Marché monétaire"
+
+#: converter/mymoneytemplate.cpp:186 converter/mymoneytemplate.cpp:187
+#: dialogs/knewaccountdlg.cpp:1018 kmymoneyutils.cpp:86
+#: mymoney/mymoneyaccount.cpp:744 views/kaccountsview.cpp:360
+#: views/kbudgetview.cpp:372 views/kcategoriesview.cpp:178
+#: views/khomeview.cpp:1813 views/kmymoneyview.cpp:767
+#: widgets/kmymoneyaccountselector.cpp:68
+#: widgets/kmymoneyaccountselector.cpp:179
+#: widgets/kmymoneyaccountselector.cpp:370 widgets/register.cpp:828
+msgid "Income"
+msgstr "Revenu"
+
+#: converter/mymoneytemplate.cpp:190 converter/mymoneytemplate.cpp:191
+#: dialogs/knewaccountdlg.cpp:1020 kmymoneyutils.cpp:88
+#: mymoney/mymoneyaccount.cpp:747 views/kaccountsview.cpp:364
+#: views/kbudgetview.cpp:378 views/kcategoriesview.cpp:182
+#: views/kmymoneyview.cpp:768 widgets/kmymoneyaccountselector.cpp:72
+#: widgets/kmymoneyaccountselector.cpp:180
+#: widgets/kmymoneyaccountselector.cpp:380 widgets/register.cpp:829
+msgid "Expense"
+msgstr "Dépense"
+
+#: kmymoneyutils.cpp:90 mymoney/mymoneyaccount.cpp:750
+msgid "Investment Loan"
+msgstr "Prêt d'investissement"
+
+#: mymoney/mymoneyfile.cpp:47
+msgid "Opening Balances"
+msgstr "Solde d'ouverture"
+
+#: mymoney/mymoneyfile.cpp:398
+msgid "Cannot remove transaction that references a closed account."
+msgstr ""
+"Impossible de supprimer une opération qui fait référence à un compte clos."
+
+#: mymoney/mymoneyfile.cpp:1414 mymoney/mymoneyfile.cpp:1433
+#: mymoney/mymoneyfile.cpp:1447 mymoney/mymoneyfile.cpp:1469
+msgid "* Problem with account '%1'"
+msgstr "* Problème avec le compte : %1"
+
+#: mymoney/mymoneyfile.cpp:1419
+msgid " * Parent account '%1' belongs to a different group."
+msgstr " * Le compte père '%1' appartient à un groupe différent."
+
+#: mymoney/mymoneyfile.cpp:1420 mymoney/mymoneyfile.cpp:1450
+msgid " New parent account is the top level account '%1'."
+msgstr " Le nouveau compte père est le compte de niveau le plus haut '%1'."
+
+#: mymoney/mymoneyfile.cpp:1436
+msgid " * Parent account '%1' does not contain '%2' as sub-account."
+msgstr " * Le compte père '%1' ne contient pas '%2' comme sous-compte."
+
+#: mymoney/mymoneyfile.cpp:1449
+msgid " * The parent with id %1 does not exist anymore."
+msgstr " * Le père avec l'identifiant %1 n'existe plus."
+
+#: mymoney/mymoneyfile.cpp:1471
+msgid " * Child account with id %1 does not exist anymore."
+msgstr " * Le compte fils avec l'identifiant %1 n'existe plus."
+
+#: mymoney/mymoneyfile.cpp:1472
+msgid " The child account list will be reconstructed."
+msgstr " La liste des comptes fils doit être reconstruite."
+
+#: mymoney/mymoneyfile.cpp:1492
+msgid " * Unable to update account data in engine."
+msgstr " * Impossible de mettre à jour les données du compte dans le moteur."
+
+#: mymoney/mymoneyfile.cpp:1499
+msgid "* Reconstructing the child lists for"
+msgstr "* Reconstruction de la liste des fils pour"
+
+#: mymoney/mymoneyfile.cpp:1536
+msgid " * Unable to update account data for account %1 in engine"
+msgstr ""
+" * Impossible de mettre à jour les données du compte %1 dans le moteur"
+
+#: mymoney/mymoneyfile.cpp:1554
+msgid " * Payee %1 recreated with fixed id"
+msgstr " * Le tiers %1 a été recréé avec un identifiant fixe"
+
+#: mymoney/mymoneyfile.cpp:1583
+msgid " * Payee id updated in split of transaction '%1'."
+msgstr ""
+" * L'identifiant du tiers a été mis à jour dans l'opération répartie '%1'."
+
+#: mymoney/mymoneyfile.cpp:1596
+msgid " * shares set to value in split of transaction '%1'."
+msgstr " * mise à jour des actions dans l'opération répartie '%1'."
+
+#: mymoney/mymoneyfile.cpp:1599
+msgid " * value set to shares in split of transaction '%1'."
+msgstr " * mise à jour des actions dans l'opération répartie '%1'."
+
+#: mymoney/mymoneyfile.cpp:1605
+msgid ""
+" * Split %2 in transaction '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+" * La répartition %2 de l'opération %1 fait référence à un compte %3 non "
+"valide. Veuillez corriger manuellement."
+
+#: mymoney/mymoneyfile.cpp:1616
+msgid " * action marked as interest in split of transaction '%1'."
+msgstr " * intérêt des actions cochée dans l'opération répartie '%1'."
+
+#: mymoney/mymoneyfile.cpp:1643
+msgid " * Payee id updated in split of schedule '%1'."
+msgstr ""
+" * L'identifiant du tiers a été mis à jour dans l'échéance répartie '%1'."
+
+#: mymoney/mymoneyfile.cpp:1649
+msgid ""
+" * Split in scheduled transaction '%1' contained value != 0 and shares == 0."
+msgstr ""
+" * La répartition de l'opération répartie '%1' contient une valeur "
+"différente de 0 et des parties égales à 0."
+
+#: mymoney/mymoneyfile.cpp:1650
+msgid " Shares set to value."
+msgstr " Les parties sont mises à la valeur."
+
+#: mymoney/mymoneyfile.cpp:1658
+msgid " * Removed bankid from split in scheduled transaction '%1'."
+msgstr ""
+" * L'identifiant de la banque a été supprimé dans l'opération répartie de "
+"l'échéancier '%1'."
+
+#: mymoney/mymoneyfile.cpp:1671
+msgid " * shares set to value in split in schedule '%1'."
+msgstr " * mise à jour des actions dans l'échéance '%1'."
+
+#: mymoney/mymoneyfile.cpp:1674
+msgid " * value set to shares in split in schedule '%1'."
+msgstr " * mise à jour des actions dans l'échéance répartie '%1'."
+
+#: mymoney/mymoneyfile.cpp:1680
+msgid ""
+" * Split %2 in schedule '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+" * La répartition %2 de l'échéance %1 fait référence à un compte %3 non "
+"valide. Veuillez corriger manuellement."
+
+#: mymoney/mymoneyfile.cpp:1706
+msgid " * Payee id updated in report '%1'."
+msgstr " * L'identifiant du tiers est mis à jour dans le rapport '%1'."
+
+#: mymoney/mymoneyfile.cpp:1723
+msgid " * Payee '%1' removed."
+msgstr " * Le tiers '%1' est supprimé."
+
+#: mymoney/mymoneyfile.cpp:1730
+msgid "Finish! Data is consistent."
+msgstr "Terminé ! Les données sont cohérentes."
+
+#: mymoney/mymoneyfile.cpp:1732
+msgid "Finish! %1 problem(s) corrected. %2 problem(s) still present."
+msgstr "Terminé ! %1 problème(s) corrigé(s). %2 problème(s) encore présent(s)."
+
+#: mymoney/mymoneyscheduled.cpp:873 mymoney/mymoneyscheduled.cpp:918
+#: mymoney/mymoneyscheduled.cpp:969 mymoney/mymoneyscheduled.cpp:1265
+#: mymoney/mymoneyscheduletest.cpp:1336
+msgid "Once"
+msgstr "Une fois"
+
+#: mymoney/mymoneyscheduled.cpp:875 mymoney/mymoneyscheduled.cpp:924
+#: mymoney/mymoneyscheduled.cpp:1267 mymoney/mymoneyscheduletest.cpp:1337
+#: widgets/rc.cpp:72
+msgid "Daily"
+msgstr "Tous les jours"
+
+#: mymoney/mymoneyscheduled.cpp:877 mymoney/mymoneyscheduled.cpp:931
+#: mymoney/mymoneyscheduled.cpp:1269 mymoney/mymoneyscheduletest.cpp:1338
+#: widgets/rc.cpp:73
+msgid "Weekly"
+msgstr "Toutes les semaines"
+
+#: mymoney/mymoneyscheduled.cpp:881 mymoney/mymoneyscheduled.cpp:932
+#: mymoney/mymoneyscheduled.cpp:1273 mymoney/mymoneyscheduletest.cpp:1339
+msgid "Every other week"
+msgstr "Toutes les autres semaines"
+
+#: mymoney/mymoneyscheduled.cpp:879 mymoney/mymoneyscheduled.cpp:1271
+#: mymoney/mymoneyscheduletest.cpp:1340
+msgid "Fortnightly"
+msgstr "Tous les quinze jours"
+
+#: mymoney/mymoneyscheduled.cpp:883 mymoney/mymoneyscheduled.cpp:941
+#: mymoney/mymoneyscheduled.cpp:1275 mymoney/mymoneyscheduletest.cpp:1341
+msgid "Every half month"
+msgstr "Tous les quinze jours"
+
+#: mymoney/mymoneyscheduled.cpp:887 mymoney/mymoneyscheduled.cpp:934
+#: mymoney/mymoneyscheduled.cpp:1279 mymoney/mymoneyscheduletest.cpp:1342
+msgid "Every four weeks"
+msgstr "Toutes les quatre semaines"
+
+#: mymoney/mymoneyscheduled.cpp:893 mymoney/mymoneyscheduled.cpp:935
+#: mymoney/mymoneyscheduled.cpp:1285 mymoney/mymoneyscheduletest.cpp:1344
+msgid "Every eight weeks"
+msgstr "Toutes les huit semaines"
+
+#: mymoney/mymoneyscheduled.cpp:895 mymoney/mymoneyscheduled.cpp:948
+#: mymoney/mymoneyscheduled.cpp:1287 mymoney/mymoneyscheduletest.cpp:1345
+msgid "Every two months"
+msgstr "Tous les deux mois"
+
+#: mymoney/mymoneyscheduled.cpp:897 mymoney/mymoneyscheduled.cpp:949
+#: mymoney/mymoneyscheduled.cpp:1289 mymoney/mymoneyscheduletest.cpp:1346
+msgid "Every three months"
+msgstr "Tous les trois mois"
+
+#: mymoney/mymoneyscheduled.cpp:899 mymoney/mymoneyscheduled.cpp:1291
+#: mymoney/mymoneyscheduletest.cpp:1347 widgets/rc.cpp:76
+msgid "Quarterly"
+msgstr "Tous les trimestres"
+
+#: mymoney/mymoneyscheduled.cpp:901 mymoney/mymoneyscheduled.cpp:950
+#: mymoney/mymoneyscheduled.cpp:1293 mymoney/mymoneyscheduletest.cpp:1348
+msgid "Every four months"
+msgstr "Tous les quatre mois"
+
+#: mymoney/mymoneyscheduled.cpp:903 mymoney/mymoneyscheduled.cpp:951
+#: mymoney/mymoneyscheduled.cpp:1295 mymoney/mymoneyscheduletest.cpp:1349
+msgid "Twice yearly"
+msgstr "Tous les six mois"
+
+#: mymoney/mymoneyscheduled.cpp:905 mymoney/mymoneyscheduled.cpp:957
+#: mymoney/mymoneyscheduled.cpp:1297 mymoney/mymoneyscheduletest.cpp:1350
+#: widgets/rc.cpp:20 widgets/rc.cpp:77
+msgid "Yearly"
+msgstr "Tous les ans"
+
+#: mymoney/mymoneyscheduled.cpp:907 mymoney/mymoneyscheduled.cpp:958
+#: mymoney/mymoneyscheduled.cpp:1299 mymoney/mymoneyscheduletest.cpp:1351
+msgid "Every other year"
+msgstr "Toutes les autres années"
+
+#: mymoney/mymoneyscheduled.cpp:870 mymoney/mymoneyscheduled.cpp:913
+#: mymoney/mymoneyscheduled.cpp:966
+msgid "Any"
+msgstr "Jamais"
+
+#: mymoney/mymoneyscheduled.cpp:885 mymoney/mymoneyscheduled.cpp:933
+#: mymoney/mymoneyscheduled.cpp:1277
+msgid "Every three weeks"
+msgstr "Toutes les trois semaines"
+
+#: mymoney/mymoneyscheduled.cpp:889 mymoney/mymoneyscheduled.cpp:925
+#: mymoney/mymoneyscheduled.cpp:1281
+msgid "Every thirty days"
+msgstr "Tous les 30 jours"
+
+#: mymoney/mymoneyscheduled.cpp:971
+msgid "Day"
+msgstr "Jour"
+
+#: mymoney/mymoneyscheduled.cpp:973 reports/listtable.cpp:206
+#: widgets/kmymoneycalendar.cpp:123 widgets/rc.cpp:97
+msgid "Week"
+msgstr "Semaine"
+
+#: mymoney/mymoneyscheduled.cpp:975
+msgid "Half-month"
+msgstr "Demi-mois"
+
+#: mymoney/mymoneyscheduled.cpp:977 reports/listtable.cpp:205
+#: widgets/kmymoneycalendar.cpp:124 widgets/rc.cpp:96
+msgid "Month"
+msgstr "Mois"
+
+#: dialogs/rc.cpp:400 mymoney/mymoneyscheduled.cpp:979 views/rc.cpp:14
+msgid "Year"
+msgstr "Année"
+
+#: mymoney/mymoneyscheduled.cpp:989
+msgid "Bill"
+msgstr "Facture"
+
+#: dialogs/rc.cpp:107 dialogs/rc.cpp:162 dialogs/rc.cpp:249 dialogs/rc.cpp:754
+#: mymoney/mymoneyscheduled.cpp:992 widgets/kmymoneycombo.cpp:420
+#: widgets/register.cpp:571
+msgid "Deposit"
+msgstr "Dépôt"
+
+#: mymoney/mymoneyscheduled.cpp:995 reports/querytable.cpp:594
+#: reports/querytable.cpp:696 widgets/kmymoneycombo.cpp:419
+msgid "Transfer"
+msgstr "Virement"
+
+#: mymoney/mymoneyscheduled.cpp:1035
+msgid "Any (Error)"
+msgstr "Toute (erreur)"
+
+#: dialogs/rc.cpp:114 mymoney/mymoneyscheduled.cpp:1047
+msgid "Change the date to the previous Friday"
+msgstr "Changer la date par celle du Vendredi précédent"
+
+#: dialogs/rc.cpp:115 mymoney/mymoneyscheduled.cpp:1050
+msgid "Change the date to the next Monday"
+msgstr "Changer la date par celle du Lundi suivant"
+
+#: mymoney/mymoneyscheduled.cpp:1053
+msgid "Do Nothing"
+msgstr "Ne rien faire"
+
+#: kmymoney2.cpp:312
+msgid "Open database..."
+msgstr "Ouvrir Base de données ..."
+
+#: kmymoney2.cpp:313
+msgid "Save as database..."
+msgstr "Enregistrer comme Base de données ..."
+
+#: kmymoney2.cpp:314
+msgid "Backup..."
+msgstr "Sauvegarde ..."
+
+#: kmymoney2.cpp:315 kmymoney2.cpp:321
+msgid "QIF..."
+msgstr "QIF ..."
+
+#: kmymoney2.cpp:316
+msgid "Gnucash..."
+msgstr "GnuCash ..."
+
+#: kmymoney2.cpp:317
+msgid "Statement file..."
+msgstr "Fichier de relevé ..."
+
+#: kmymoney2.cpp:319 kmymoney2.cpp:320
+msgid "Account Template..."
+msgstr "Modèle de compte ..."
+
+#: kmymoney2.cpp:322
+msgid "Personal Data..."
+msgstr "Données personnelles ..."
+
+#: kmymoney2.cpp:325
+msgid "Dump Memory"
+msgstr "Copie de la mémoire"
+
+#: kmymoney2.cpp:327
+msgid "File-Information..."
+msgstr "Informations sur le fichier ..."
+
+#: kmymoney2.cpp:332
+msgid "Find transaction..."
+msgstr "Trouver l'opération ..."
+
+#: kmymoney2.cpp:337
+msgid "Show Transaction Detail"
+msgstr "Afficher le détail de l'opération"
+
+#: kmymoney2.cpp:338 rc.cpp:60
+msgid "Hide reconciled transactions"
+msgstr "Cacher les opérations rapprochées"
+
+#: kmymoney2.cpp:339 rc.cpp:57
+msgid "Hide unused categories"
+msgstr "Cacher les catégories inutilisées"
+
+#: kmymoney2.cpp:340
+msgid "Show all accounts"
+msgstr "Afficher tous les comptes"
+
+#: kmymoney2.cpp:345
+msgid "New institution..."
+msgstr "Nouvel établissement ..."
+
+#: kmymoney2.cpp:346
+msgid "Edit institution..."
+msgstr "Éditer un établissement ..."
+
+#: kmymoney2.cpp:347
+msgid "Delete institution..."
+msgstr "Supprimer un établissement ..."
+
+#: kmymoney2.cpp:352
+msgid "New account..."
+msgstr "Nouveau compte ..."
+
+#: kmymoney2.cpp:354
+msgid "Open ledger"
+msgstr "Ouvrir le registre"
+
+#: kmymoney2.cpp:355
+msgid "Reconcile..."
+msgstr "Rapprocher ..."
+
+#: kmymoney2.cpp:356
+msgid ""
+"_: Finish reconciliation\n"
+"Finish"
+msgstr "Terminer le rapprochement"
+
+#: kmymoney2.cpp:357
+msgid ""
+"_: Postpone reconciliation\n"
+"Postpone"
+msgstr "Différer le rapprochement"
+
+#: kmymoney2.cpp:358
+msgid "Edit account..."
+msgstr "Éditer un compte ..."
+
+#: kmymoney2.cpp:359
+msgid "Delete account..."
+msgstr "Supprimer un compte ..."
+
+#: kmymoney2.cpp:360
+msgid "Close account"
+msgstr "Fermer un compte"
+
+#: kmymoney2.cpp:361
+msgid "Reopen account"
+msgstr "Rouvrir un compte"
+
+#: kmymoney2.cpp:362
+msgid "Transaction report"
+msgstr "Rapport d'opération"
+
+#: kmymoney2.cpp:364
+msgid "Show balance chart..."
+msgstr "Affiche le graphique du solde ..."
+
+#: kmymoney2.cpp:366
+msgid "Map to online account"
+msgstr "Carte pour le compte en ligne"
+
+#: kmymoney2.cpp:367
+msgid "Unmap account"
+msgstr "Compte non défini"
+
+#: dialogs/settings/rc.cpp:126 kmymoney2.cpp:368 views/kpayeesview.cpp:363
+#: widgets/rc.cpp:50
+msgid "Update"
+msgstr "Mettre à Jour"
+
+#: kmymoney2.cpp:372
+msgid "Update account..."
+msgstr "Mettre à jour le compte ..."
+
+#: kmymoney2.cpp:373
+msgid "Update all accounts..."
+msgstr "Mettre à jour tous les comptes ..."
+
+#: kmymoney2.cpp:378
+msgid "New category..."
+msgstr "Nouvelle catégorie ..."
+
+#: kmymoney2.cpp:379
+msgid "Edit category..."
+msgstr "Éditer la catégorie ..."
+
+#: kmymoney2.cpp:380
+msgid "Delete category..."
+msgstr "Supprimer la catégorie ..."
+
+#: kmymoney2.cpp:386
+msgid "QIF Profile Editor..."
+msgstr "Éditeur de profil QIF ..."
+
+#: kmymoney2.cpp:387
+msgid "Securities..."
+msgstr "Valeurs ..."
+
+#: kmymoney2.cpp:388
+msgid "Currencies..."
+msgstr "Devises ..."
+
+#: kmymoney2.cpp:389
+msgid "Prices..."
+msgstr "Cours ..."
+
+#: kmymoney2.cpp:390
+msgid "Update Stock and Currency Prices..."
+msgstr "Mettre à jour le cours des actions et des devises ..."
+
+#: kmymoney2.cpp:391
+msgid "Consistency Check"
+msgstr "Contrôle de l'intégrité"
+
+#: kmymoney2.cpp:392
+msgid "Performance-Test"
+msgstr "Test de Performance"
+
+#: kmymoney2.cpp:393
+msgid "KCalc..."
+msgstr "KCalc ..."
+
+#: kmymoney2.cpp:399
+msgid "Enable all messages"
+msgstr "Autoriser tous les messages"
+
+#: kmymoney2.cpp:400
+msgid "KDE language settings..."
+msgstr "Paramètres de langue KDE ..."
+
+#: kmymoney2.cpp:405
+msgid "&Show tip of the day"
+msgstr "&Afficher l'astuce du jour"
+
+#: kmymoney2.cpp:410
+msgid ""
+"_: New transaction button\n"
+"New"
+msgstr "Nouveau"
+
+#: kmymoney2.cpp:415
+msgid ""
+"_: Edit transaction button\n"
+"Edit"
+msgstr "Éditer"
+
+#: kmymoney2.cpp:417
+msgid ""
+"_: Enter transaction\n"
+"Enter"
+msgstr "Saisir"
+
+#: kmymoney2.cpp:420
+msgid ""
+"_: Edit split button\n"
+"Edit splits"
+msgstr "Éditer la répartition"
+
+#: kmymoney2.cpp:421
+msgid ""
+"_: Cancel transaction edit\n"
+"Cancel"
+msgstr "Annuler"
+
+#: kmymoney2.cpp:422
+msgid ""
+"_: Delete transaction\n"
+"Delete"
+msgstr "Supprimer"
+
+#: kmymoney2.cpp:423
+msgid ""
+"_: Duplicate transaction\n"
+"Duplicate"
+msgstr "Dupliquer"
+
+#: kmymoney2.cpp:425 kmymoney2.cpp:4826 kmymoney2.cpp:5107
+msgid ""
+"_: Button text for match transaction\n"
+"Match"
+msgstr "Correspondre"
+
+#: kmymoney2.cpp:426
+msgid ""
+"_: Accept 'imported' and 'matched' transaction\n"
+"Accept"
+msgstr "Accepter"
+
+#: kmymoney2.cpp:428
+msgid ""
+"_: Toggle reconciliation flag\n"
+"Toggle"
+msgstr "Basculer"
+
+#: kmymoney2.cpp:429
+msgid ""
+"_: Mark transaction cleared\n"
+"Cleared"
+msgstr "Pointée"
+
+#: kmymoney2.cpp:430
+msgid ""
+"_: Mark transaction reconciled\n"
+"Reconciled"
+msgstr "Rapprochée"
+
+#: kmymoney2.cpp:431
+msgid ""
+"_: Mark transaction not reconciled\n"
+"Not reconciled"
+msgstr "Non rapprochée"
+
+#: kmymoney2.cpp:432
+msgid ""
+"_: Select all transactions\n"
+"Select all"
+msgstr "Sélectionner tout"
+
+#: kmymoney2.cpp:434 kmymoney2.cpp:5497
+msgid "Goto account"
+msgstr "Aller au compte"
+
+#: kmymoney2.cpp:435 kmymoney2.cpp:5495
+msgid "Goto payee"
+msgstr "Aller au tiers"
+
+#: kmymoney2.cpp:436
+msgid "Create scheduled transaction..."
+msgstr "Créer une opération avec des échéances"
+
+#: kmymoney2.cpp:437
+msgid "Assign next number"
+msgstr "Assigner le numéro suivant"
+
+#: kmymoney2.cpp:438
+msgid ""
+"_: Combine transactions\n"
+"Combine"
+msgstr "Combiner"
+
+#: kmymoney2.cpp:440
+msgid "New investment"
+msgstr " Nouvel investissement"
+
+#: kmymoney2.cpp:441
+msgid "Edit investment..."
+msgstr "Éditer l'investissement ..."
+
+#: kmymoney2.cpp:442
+msgid "Delete investment..."
+msgstr "Supprimer l'investissement ..."
+
+#: kmymoney2.cpp:443
+msgid "Online price update..."
+msgstr "Mise à jour du cours en ligne ..."
+
+#: kmymoney2.cpp:444
+msgid "Manual price update..."
+msgstr "Mise à jour du cours manuellement ..."
+
+#: kmymoney2.cpp:446
+msgid "New scheduled transaction..."
+msgstr "Nouvelle échéance ..."
+
+#: kmymoney2.cpp:447
+msgid "Edit scheduled transaction..."
+msgstr "Editer une opération avec des échéances ..."
+
+#: kmymoney2.cpp:448
+msgid "Delete scheduled transaction..."
+msgstr "Supprimer une opération avec des échéances ..."
+
+#: kmymoney2.cpp:449
+msgid "Duplicate scheduled transaction"
+msgstr "Dupliquer une opération avec des échéances"
+
+#: kmymoney2.cpp:450
+msgid "Enter next transaction..."
+msgstr "Saisir l'échéance ..."
+
+#: kmymoney2.cpp:451
+msgid "Skip next transaction..."
+msgstr "Sauter l'échéance ..."
+
+#: kmymoney2.cpp:453
+msgid "New payee"
+msgstr "Nouveau Tiers"
+
+#: kmymoney2.cpp:454
+msgid "Rename payee"
+msgstr "Renommer le Tiers"
+
+#: kmymoney2.cpp:455
+msgid "Delete payee"
+msgstr "Supprimer le tiers"
+
+#: kmymoney2.cpp:457
+msgid "New budget"
+msgstr "Nouveau budget"
+
+#: kmymoney2.cpp:458
+msgid "Rename budget"
+msgstr "Renommer le budget"
+
+#: kmymoney2.cpp:459
+msgid "Delete budget"
+msgstr "Supprimer le budget"
+
+#: kmymoney2.cpp:460
+msgid "Copy budget"
+msgstr "Copier le budget"
+
+#: kmymoney2.cpp:461
+msgid "Change budget year"
+msgstr "Changer l'année du budget"
+
+#: kmymoney2.cpp:462
+msgid ""
+"_: Budget based on forecast\n"
+"Forecast"
+msgstr "Prévisions"
+
+#: kmymoney2.cpp:467 kmymoney2.cpp:3990 kmymoney2.cpp:3993 kmymoney2.cpp:3999
+msgid "New currency"
+msgstr "Nouvelle devise"
+
+#: kmymoney2.cpp:468 kmymoney2.cpp:4021 kmymoney2.cpp:4026
+msgid "Rename currency"
+msgstr "Renommer une devise de base"
+
+#: kmymoney2.cpp:469 kmymoney2.cpp:4039
+msgid "Delete currency"
+msgstr "Supprimer une devise de base"
+
+#: dialogs/rc.cpp:69 kmymoney2.cpp:470
+msgid "Select as base currency"
+msgstr "Choisir comme devise de base"
+
+#: kmymoney2.cpp:481
+msgid "View back"
+msgstr "Vue précédente"
+
+#: kmymoney2.cpp:482
+msgid "View forward"
+msgstr "Vue suivante"
+
+#: kmymoney2.cpp:611
+msgid "KMyMoney file needs saving. Save ?"
+msgstr ""
+"Le fichier KMyMoney a besoin d'être sauvegardé.\n"
+"Voulez-vous sauvegarder le fichier KMyMoney ?"
+
+#: kmymoney2.cpp:757
+msgid "Creating new document..."
+msgstr "Création d'un nouveau document ..."
+
+#: kmymoney2.cpp:869 kmymoney2.cpp:884
+msgid "Open a file."
+msgstr "Ouvrir un fichier."
+
+#: kmymoney2.cpp:872
+msgid ""
+"%1|KMyMoney files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Fichiers KMyMoney\n"
+"%2|Tous les fichiers (*.*)"
+
+#: kmymoney2.cpp:873
+msgid "Open File..."
+msgstr "Ouvrir le Fichier ..."
+
+#: kmymoney2.cpp:925 kstartuplogo.cpp:100
+msgid "Loading file..."
+msgstr "Chargement du fichier ..."
+
+#: kmymoney2.cpp:986
+msgid ""
+"<b>%1</b> is either an invalid filename or the file does not exist. You can "
+"open another file or create a new one."
+msgstr ""
+"Le fichier <b>%1</b> a soit un nom invalide, soit il n'existe pas. Vous "
+"pouvez ouvrir un autre fichier ou en créer un nouveau."
+
+#: kmymoney2.cpp:986
+msgid "File not found"
+msgstr "Impossible de trouver le fichier"
+
+#: kmymoney2.cpp:989
+msgid "File <b>%1</b> is already opened in another instance of KMyMoney"
+msgstr ""
+"Le fichier <b>%1</b> est déjà ouvert par une autre instance de KMyMoney"
+
+#: kmymoney2.cpp:989
+msgid "Duplicate open"
+msgstr "Ouverture dupliquée"
+
+#: kmymoney2.cpp:1001
+msgid "Saving file..."
+msgstr "Sauvegarde du fichier ..."
+
+#: kmymoney2.cpp:1035 kmymoney2.cpp:1047 kmymoney2.cpp:1071
+#, c-format
+msgid "Additional encryption key(s) to be used: %1"
+msgstr "Clé(s) additionnelles de cryptage à utiliser : %1"
+
+#: kmymoney2.cpp:1056
+msgid "Saving file with a new filename..."
+msgstr "Sauvegarde du fichier avec un nouveau nom ..."
+
+#: kmymoney2.cpp:1067
+msgid "Encryption key to be used"
+msgstr "Clé de cryptage à utiliser"
+
+#: kmymoney2.cpp:1072
+msgid "Manage additional keys"
+msgstr "Gérer les clés additionnelles"
+
+#: kmymoney2.cpp:1079
+msgid "No encryption"
+msgstr "Pas de Cryptage"
+
+#: kmymoney2.cpp:1102
+msgid ""
+"_: KMyMoney (Filefilter)\n"
+"KMyMoney files"
+msgstr "Fichiers de KMyMoney"
+
+#: kmymoney2.cpp:1103
+msgid ""
+"_: XML (Filefilter)\n"
+"XML files"
+msgstr "Fichiers XML"
+
+#: kmymoney2.cpp:1104
+msgid ""
+"_: Anonymous (Filefilter)\n"
+"Anonymous files"
+msgstr "Fichiers Anonymes"
+
+#: kmymoney2.cpp:1105
+msgid "All files"
+msgstr "Tous les fichiers"
+
+#: kmymoney2.cpp:1193
+msgid "Saving file to database..."
+msgstr "Sauver le fichier dans une base de données ..."
+
+#: kmymoney2.cpp:1207
+msgid "Cannot save to current database."
+msgstr "Impossible de sauvegarder la base de données courante."
+
+#: kmymoney2.cpp:1225
+msgid "Closing window..."
+msgstr "Fermeture de la fenêtre ..."
+
+#: kmymoney2.cpp:1228 kmymoney2.cpp:1249
+msgid "The file has been changed, save it ?"
+msgstr "Le fichier a été modifié. Voulez-vous lancer la sauvegarde ?"
+
+#: kmymoney2.cpp:1339 kmymoney2.cpp:1352
+msgid "Ready."
+msgstr "Prêt."
+
+#: kmymoney2.cpp:1397 kmymoney2.cpp:1433
+msgid "No KMyMoneyFile open"
+msgstr "Pas de fichier KMyMoney ouvert"
+
+#: kmymoney2.cpp:1401
+msgid "Viewing personal data..."
+msgstr "Affichage des données personnelles ..."
+
+#: kmymoney2.cpp:1408
+msgid "Edit Personal Data"
+msgstr "Éditer les données personnelles"
+
+#: kmymoney2.cpp:1424
+#, c-format
+msgid "Unable to store user information: %1"
+msgstr "Impossible de sauvegarder les informations de l'utilisateur : %1"
+
+#: kmymoney2.cpp:1447
+msgid "Importing account templates."
+msgstr "Importation de modèles de compte."
+
+#: kmymoney2.cpp:1462
+msgid "Unable to import template(s): %1, thrown in %2:%3"
+msgstr "Impossible d'importer le (ou les) modèle (s): %1, vers %2:%3"
+
+#: kmymoney2.cpp:1471
+msgid "Exporting account templates."
+msgstr "Exportation de modèles de compte."
+
+#: kmymoney2.cpp:1474
+msgid ""
+"*.kmt|KMyMoney template files\n"
+"*.*|All files"
+msgstr ""
+"*.kmt|Fichiers modèle KMyMoney\n"
+"*.*|Tous les fichiers"
+
+#: kmymoney2.cpp:1475
+msgid "Save as..."
+msgstr "Enregistrer sous ..."
+
+#: kmymoney2.cpp:1517
+msgid "Importing file..."
+msgstr "Importation du fichier ..."
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "The statements have been processed with the following results:"
+msgstr "Les relevés ont été réalisés avec les résultats suivants :"
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:1754 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "Statement stats"
+msgstr "Statistiques du relevé"
+
+#: kmymoney2.cpp:1602
+msgid ""
+"You cannot import GnuCash data into an existing file. Do you wish to save "
+"this file?"
+msgstr ""
+"Vous ne pouvez pas importer des données GnuCash dans un fichier existant. "
+"Voulez-vous sauvegarder ce fichier ?"
+
+#: kmymoney2.cpp:1615
+msgid "Importing a Gnucash file."
+msgstr "Importation d'un fichier de GnuCash."
+
+#: kmymoney2.cpp:1618
+msgid ""
+"%1|Gnucash files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Fichiers GnuCash\n"
+"%2|Tous les fichiers (*.*)"
+
+#: kmymoney2.cpp:1619
+msgid "Import Gnucash file..."
+msgstr "Importer un fichier de GnuCash ..."
+
+#: kmymoney2.cpp:1658
+msgid "Importing an XML Statement."
+msgstr "Importation d'un Relevé XML."
+
+#: kmymoney2.cpp:1661
+msgid ""
+"%1|XML files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Fichiers XML\n"
+"%2|Tous les fichiers (*.*)"
+
+#: kmymoney2.cpp:1662
+msgid "Import XML Statement..."
+msgstr "Importation de Relevé XML ..."
+
+#: kmymoney2.cpp:1718
+msgid "Error importing %1: This file is not a valid KMM statement file."
+msgstr ""
+"Erreur pendant l'importation %1 : Ce fichier n'est pas un relevé KMM valide."
+
+#: kmymoney2.cpp:1718
+msgid "Invalid Statement"
+msgstr "Relevé Invalide"
+
+#: kmymoney2.cpp:1754
+msgid "The statement has been processed with the following results:"
+msgstr "Le relevé a été réalisé avec les résultats suivants :"
+
+#: kmymoney2.cpp:1763
+msgid "Exporting file..."
+msgstr "Exportation du fichier ..."
+
+#: kmymoney2.cpp:1786
+msgid "The file <b>%1</b> already exists. Do you really want to override it?"
+msgstr ""
+"Le fichier <b>%1</b> existe déjà. Êtes-vous sûr de vouloir écrire par "
+"dessus ?"
+
+#: kmymoney2.cpp:1786
+msgid "File already exists"
+msgstr "Le fichier existe déjà"
+
+#: dialogs/rc.cpp:347 dialogs/rc.cpp:649 dialogs/rc.cpp:798 kmymoney2.cpp:1815
+msgid "General"
+msgstr "Général"
+
+#: kmymoney2.cpp:1816
+msgid "Register"
+msgstr "Registre"
+
+#: kmymoney2.cpp:1817 views/khomeview.cpp:88 views/kmymoneyview.cpp:136
+msgid "Home"
+msgstr "Accueil"
+
+#: kmymoney2.cpp:1818 views/kmymoneyview.cpp:176
+msgid ""
+"Scheduled\n"
+"transactions"
+msgstr "Echéances"
+
+#: kmymoney2.cpp:1819
+msgid "Encryption"
+msgstr "Cryptage"
+
+#: kmymoney2.cpp:1820
+msgid "Colors"
+msgstr "Couleurs"
+
+#: dialogs/rc.cpp:344 dialogs/settings/rc.cpp:107 kmymoney2.cpp:1822
+#: widgets/rc.cpp:33
+msgid "Online Quotes"
+msgstr "Cotations en ligne"
+
+#: kmymoney2.cpp:1823 reports/pivottable.cpp:2426 views/kmymoneyview.cpp:251
+#: views/kmymoneyview.cpp:253 views/kreportsview.cpp:1415 views/rc.cpp:41
+msgid "Forecast"
+msgstr "Prévisions"
+
+#: kmymoney2.cpp:1824
+msgid "Plugins"
+msgstr "Modules d'extension"
+
+#: kmymoney2.cpp:1893
+msgid ""
+"The file must be saved first before it can be backed up. Do you want to "
+"continue?"
+msgstr ""
+"Le fichier doit être enregistré avant de pouvoir être sauvegardé. Voulez-"
+"vous continuer ?"
+
+#: kmymoney2.cpp:1910
+msgid ""
+"The current implementation of the backup functionality only supports local "
+"files as source files! Your current source file is '%1'."
+msgstr ""
+"Actuellement, la fonction de sauvegarde supporte uniquement les fichiers "
+"locaux comme fichiers source ! Votre fichier source actuel est '%1'."
+
+#: kmymoney2.cpp:1913
+msgid "Local files only"
+msgstr "Fichiers locaux uniquement"
+
+#: kmymoney2.cpp:1928
+#, c-format
+msgid "Mounting %1"
+msgstr "Montage de %1 en cours"
+
+#: kmymoney2.cpp:1967
+msgid "Backup file for today exists on that device. Replace ?"
+msgstr ""
+"Un fichier de sauvegarde daté d'aujourd'hui existe déjà sur ce périphérique. "
+"Remplacer ?"
+
+#: dialogs/rc.cpp:7 kmymoney2.cpp:1967 kmymoney2.cpp:1994 kmymoney2.cpp:2024
+#: kmymoney2.cpp:2032 kmymoney2.cpp:2057 kmymoney2.cpp:2059
+msgid "Backup"
+msgstr "Sauvegarde"
+
+#: kmymoney2.cpp:1967
+msgid "&Replace"
+msgstr "&Remplacer"
+
+#: kmymoney2.cpp:1972 kmymoney2.cpp:1997 kmymoney2.cpp:2016 kmymoney2.cpp:2035
+#, c-format
+msgid "Unmounting %1"
+msgstr "Démontage de %1 en cours"
+
+#: kmymoney2.cpp:1987
+#, c-format
+msgid "Writing %1"
+msgstr "Écriture de %1"
+
+#: kmymoney2.cpp:1994
+msgid "Error mounting device"
+msgstr "Erreur de de montage du périphérique"
+
+#: converter/mymoneygncreader.cpp:1995 kmymoney2.cpp:2023 kmymoney2.cpp:2055
+msgid "Done"
+msgstr "Terminé"
+
+#: kmymoney2.cpp:2024 kmymoney2.cpp:2057
+msgid "File successfully backed up"
+msgstr "Fichier sauvegardé avec succès"
+
+#: kmymoney2.cpp:2032
+msgid "Error copying file to device"
+msgstr "Erreur de copie du fichier vers le périphérique"
+
+#: kmymoney2.cpp:2059
+msgid "Error unmounting device"
+msgstr "Erreur de démontage du périphérique"
+
+#: kmymoney2.cpp:2143
+#, c-format
+msgid "Cannot add institution: %1"
+msgstr "Impossible d'ajouter l'établissement: %1"
+
+#: kmymoney2.cpp:2185
+#, c-format
+msgid "Unable to store institution: %1"
+msgstr "Impossible de sauvegarder l'établissement : %1"
+
+#: kmymoney2.cpp:2192
+#, c-format
+msgid "Unable to edit institution: %1"
+msgstr "Impossible d'éditer l'établissement : %1"
+
+#: kmymoney2.cpp:2203
+msgid "Do you really want to delete institution <b>%1</b> ?"
+msgstr "Voulez-vous vraiment supprimer l'établissement <b>%1</b> ?"
+
+#: kmymoney2.cpp:2211 kmymoney2.cpp:2215
+#, c-format
+msgid "Unable to delete institution: %1"
+msgstr "Impossible d'éditer l'établissement : %1"
+
+#: kmymoney2.cpp:2268
+#, c-format
+msgid "Unable to find account: %1"
+msgstr "Impossible de trouver le compte : %1"
+
+#: kmymoney2.cpp:2309
+msgid ""
+"This account is a liability and if the opening balance represents money "
+"owed, then it should be negative. Negate the amount?\n"
+"\n"
+"Please click Yes to change the opening balance to %1,\n"
+"Please click No to leave the amount as %2,\n"
+"Please click Cancel to abort the account creation."
+msgstr ""
+"Ce compte est un passif et si le solde de départ représente de l'argent dû, "
+"alors il doit être négatif. Rendre le montant négatif ?\n"
+"\n"
+"Veuillez appuyer sur Oui pour changer le solde de départ pour %1,\n"
+"Veuillez appuyer sur Non pour laisser %2 comme montant,\n"
+"Veuillez appuyer sur Annuler pour interrompre la création du compte."
+
+#: kmymoney2.cpp:2345 kmymoney2.cpp:2346
+msgid "Loan payout"
+msgstr "Versement du prêt"
+
+#: dialogs/knewloanwizard.cpp:892 kmymoney2.cpp:2374
+#, c-format
+msgid "Unable to add account: %1"
+msgstr "Impossible d'ajouter le compte : %1"
+
+#: kmymoney2.cpp:2392
+msgid ""
+"The category <b>%1</b> currently does not exist. Do you want to create it?"
+"<p><i>The parent account will default to <b>%2</b> but can be changed in the "
+"following dialog</i>."
+msgstr ""
+"La catégorie <b>%1</b> n'existe pas actuellement. Voulez-vous la créer ?"
+"<p><i>Le compte père sera par défaut <b>%2</b> mais peut être changée dans "
+"la fenêtre suivante</i>."
+
+#: kmymoney2.cpp:2392
+msgid "Create category"
+msgstr "Créer une catégorie"
+
+#: kmymoney2.cpp:2429
+msgid "Create a new Category"
+msgstr "Créer une nouvelle catégorie"
+
+#: kmymoney2.cpp:2505
+#, c-format
+msgid "Unable to create account: %1"
+msgstr "Impossible de charger le compte : %1"
+
+#: kmymoney2.cpp:2516
+msgid ""
+"The security <b>%1</b> currently does not exist as sub-account of <b>%2</b>. "
+"Do you want to create it?"
+msgstr ""
+"La valeur <b>%1</b> courante n'existe pas comme un sous compte de <b>%2</b>. "
+"Voulez-vous la créer ?"
+
+#: kmymoney2.cpp:2517
+msgid "Create security"
+msgstr "Créer la valeur"
+
+#: kmymoney2.cpp:2551
+msgid "Do you really want to delete the investment <b>%1</b>?"
+msgstr "Voulez-vous vraiment supprimer l'investissement<b>%1</b> ?"
+
+#: kmymoney2.cpp:2551
+msgid "Delete investment"
+msgstr "Supprimer l'investissement"
+
+#: kmymoney2.cpp:2558
+#, c-format
+msgid "Unable to delete investment: %1"
+msgstr "Impossible de supprimer l'investissement : %1"
+
+#: kmymoney2.cpp:2640 kmymoney2.cpp:2646
+msgid "Unable to add scheduled transaction: "
+msgstr "Impossible d'ajouter une échéance :"
+
+#: kmymoney2.cpp:2722
+msgid "Adjusting transactions..."
+msgstr "Ajustement des opérations ..."
+
+#: kmymoney2.cpp:2747
+msgid "Adjusting scheduled transactions..."
+msgstr "Ajustement des opérations avec échéances ..."
+
+#: kmymoney2.cpp:2765
+msgid "Adjusting budgets..."
+msgstr "Ajustement des budgets ..."
+
+#: kmymoney2.cpp:2783
+msgid ""
+"Unable to exchange category <b>%1</b> with category <b>%2</b>. Reason: %3"
+msgstr ""
+"Impossibilité de changer la catégorie <b>%1</b> avec la catégorie <b>%2</b>. "
+"Raison: %3"
+
+#: kmymoney2.cpp:2804
+msgid "Do you really want to delete category <b>%1</b>?"
+msgstr "Voulez-vous vraiment supprimer la catégorie <b>%1</b> ?"
+
+#: kmymoney2.cpp:2811
+msgid "Unable to delete category <b>%1</b>. Cause: %2"
+msgstr "Impossible de supprimer la catégorie <b>%1</b>. Cause : %2"
+
+#: kmymoney2.cpp:2823
+msgid ""
+"Do you want to delete category <b>%1</b> with all its sub-categories or only "
+"the category itself? If you only delete the category itself, all its sub-"
+"categories will be made sub-categories of <b>%2</b>."
+msgstr ""
+"Voulez-vous supprimer la catégorie <b>%1</b> avec toutes ses sous-catégories "
+"ou seulement cette catégorie ? Si vous supprimer seulement cette catégorie, "
+"tous ses catégories deviendront des sous-catégories de <b>%2</b>."
+
+#: kmymoney2.cpp:2827
+msgid "Delete all"
+msgstr "Supprimer tout"
+
+#: kmymoney2.cpp:2828
+msgid "Just the category"
+msgstr "Juste la catégorie"
+
+#: kmymoney2.cpp:2858
+msgid ""
+"Some sub-categories of category <b>%1</b> cannot be deleted, because they "
+"are still used. They will be made sub-categories of <b>%2</b>. Proceed?"
+msgstr ""
+"Des sous-catégories de la catégorie <b>%1</b> ne peuvent pas être "
+"supprimées, parce qu'elles sont encore utilisées. Elles deviendront des sous-"
+"catégories of <b>%2</b>. Continuer ?"
+
+#: kmymoney2.cpp:2878
+msgid "Unable to delete a sub-category of category <b>%1</b>. Reason: %2"
+msgstr ""
+"Impossibilité de supprimer une sous-catégorie de la catégorie <b>%1</b>. "
+"Raison: %2"
+
+#: kmymoney2.cpp:2889
+msgid "Do you really want to delete account <b>%1</b>?"
+msgstr "Souhaitez-vous vraiment supprimer le compte <b>%1</b> ?"
+
+#: kmymoney2.cpp:2901
+msgid "Unable to delete account '%1'. Cause: %2"
+msgstr "Impossible de supprimer le compte '%1'. Cause: %2"
+
+#: kmymoney2.cpp:2917
+msgid "Edit account '%1'"
+msgstr "Éditer le compte '%1'"
+
+#: kmymoney2.cpp:2922
+msgid "Edit category '%1'"
+msgstr "Éditer la catégorie '%1'"
+
+#: kmymoney2.cpp:3008
+msgid "Unable to modify account '%1'. Cause: %2"
+msgstr "Impossible de modifier le compte '%1'. Cause: %2"
+
+#: kmymoney2.cpp:3065
+msgid ""
+"KMyMoney has detected some overdue scheduled transactions for this account. "
+"Do you want to enter those scheduled transactions now?"
+msgstr ""
+"KMyMoney a détecté certaines échéances en retard pour ce compte. Voulez-vous "
+"saisir les opérations des échéances maintenant ?"
+
+#: kmymoney2.cpp:3065
+msgid "Scheduled transactions found"
+msgstr "Opérations avec échéance trouvées"
+
+#: kmymoney2.cpp:3163
+msgid ""
+"You are about to finish the reconciliation of this account with a difference "
+"between your bank statement and the transactions marked as cleared.\n"
+"Are you sure you want to finish the reconciliation ?"
+msgstr ""
+"Vous êtes en train de terminer le rapprochement de ce compte avec une "
+"différence entre le relevé de votre banque et les opérations que vous avez "
+"pointée.\n"
+"Êtes-vous certain de vouloir terminer le rapprochement ?"
+
+#: kmymoney2.cpp:3165
+msgid "Confirm end of reconciliation"
+msgstr "Confirmer la fin du rapprochement"
+
+#: kmymoney2.cpp:3339
+msgid ""
+"You have closed this account. It remains in the system because you have "
+"transactions which still refer to it, but is not shown in the views. You can "
+"make it visible again by going to the View menu and selecting <b>Show all "
+"accounts</b> or by unselecting the <b>Don't show closed accounts</b> setting."
+msgstr ""
+"Vous avez fermé ce compte. Il reste dans le système parce que vous avez des "
+"opérations qui se réfèrent toujours à lui, mais il n'est pas indiqué dans la "
+"vue. Vous pouvez le rendre de nouveau visible en allant dans le menu "
+"Affichage et en sélectionnant <b>Afficher tous les comptes</b> ou en dé-"
+"sélectionnant le paramètre <b>Ne pas afficher les comptes fermés</b>."
+
+#: kmymoney2.cpp:3379
+msgid "<b>%1</b> cannot be moved to institution <b>%2</b>. Reason: %3"
+msgstr ""
+"<b>%1</b> ne peut pas être déplacé vers l'établissement <b>%2</b>. Raison: %3"
+
+#: kmymoney2.cpp:3393
+msgid "<b>%1</b> cannot be moved to <b>%2</b>. Reason: %3"
+msgstr "<b>%1</b> ne peut pas être déplacé vers <b>%2</b>. Raison: %3"
+
+#: kmymoney2.cpp:3408
+msgid "%1 YTD Account Transactions"
+msgstr "%1 Année en cours pour les opérations du compte"
+
+#: dialogs/kbalancechartdlg.cpp:71 kmymoney2.cpp:3409
+#: views/kforecastview.cpp:650 views/khomeview.cpp:276
+#: views/khomeview.cpp:1384 views/kreportsview.cpp:619
+msgid "Generated Report"
+msgstr "Générer le rapport"
+
+#: dialogs/rc.cpp:324 dialogs/settings/rc.cpp:80 kmymoney2.cpp:3411
+#: views/kreportsview.cpp:1062 views/rc.cpp:58 views/rc.cpp:59
+msgid "Transactions"
+msgstr "Opérations"
+
+#: kmymoney2.cpp:3449
+#, c-format
+msgid "Unable to add scheduled transaction: %1"
+msgstr "Impossible d'ajouter l'échéance : %1"
+
+#: kmymoney2.cpp:3449
+msgid "Add scheduled transaction"
+msgstr "Ajouter une opération avec des échéances"
+
+#: kmymoney2.cpp:3489
+msgid ""
+"You have entered a scheduled transaction date of <b>%1</b>. Because the "
+"scheduled transaction was last paid on <b>%2</b>, KMyMoney will "
+"automatically adjust the scheduled transaction date to the next date unless "
+"the last payment date is reset. Do you want to reset the last payment date?"
+msgstr ""
+"Vous avez saisi une date d'échéance de <b>%1</b>. Comme l'échéancier aura un "
+"dernier paiement le <b>%2</b>, KMyMoney ajustera automatiquement la date "
+"d'échéance à la prochaine date à moins que la date du dernier paiement soit "
+"remise à 0. Voulez-vous mettre à 0 la date du dernier paiement ?"
+
+#: kmymoney2.cpp:3489
+msgid "Reset Last Payment Date"
+msgstr "Remise à zéro de la date du dernier paiement"
+
+#: kmymoney2.cpp:3499 kmymoney2.cpp:3519 kmymoney2.cpp:3531
+msgid "Unable to modify scheduled transaction '%1'"
+msgstr "Impossible de modifier l'échéance '%1'"
+
+#: kmymoney2.cpp:3543
+msgid "Are you sure you want to delete the scheduled transaction <b>%1</b>?"
+msgstr "Êtes-vous sûr de vouloir supprimer l'échéance <b>%1</b> ?"
+
+#: kmymoney2.cpp:3546
+msgid ""
+"In case of loan payments it is currently not possible to recreate the "
+"scheduled transaction."
+msgstr ""
+"Dans le cas des règlements de prêt, il n'est actuellement pas possible de "
+"recréer les échéances."
+
+#: kmymoney2.cpp:3555
+msgid "Unable to remove scheduled transaction '%1'"
+msgstr "Impossible de supprimer l'échéance '%1'"
+
+#: kmymoney2.cpp:3569
+#, c-format
+msgid ""
+"_: Copy of scheduled transaction name\n"
+"Copy of %1"
+msgstr "Copie de %1"
+
+#: kmymoney2.cpp:3581 kmymoney2.cpp:4352
+msgid "Unable to duplicate transaction(s): %1, thrown in %2:%3"
+msgstr "Impossible de dupliquer l(es) opération(s) : %1, vers %2:%3"
+
+#: kmymoney2.cpp:3595
+msgid ""
+"Do you really want to skip the <b>%1</b> transaction scheduled for <b>%2</b>?"
+msgstr ""
+"Voulez-vous vraiment sauter l'échéance de l'opération <b>%1</b> du <b>%2</"
+"b> ?"
+
+#: kmymoney2.cpp:3605
+msgid "Unable to skip scheduled transaction <b>%1</b>."
+msgstr "Impossible de sauter l'échéance <b>%1</b>."
+
+#: kmymoney2.cpp:3618
+msgid "Unknown scheduled transaction '%1'"
+msgstr "Échéance inconnue'%1'"
+
+#: kmymoney2.cpp:3673
+msgid ""
+"Are you sure you wish to stop this scheduled transaction from being entered "
+"into the register?\n"
+"\n"
+"KMyMoney will prompt you again next time it starts unless you manually enter "
+"it later."
+msgstr ""
+"Êtes-vous sur de ne pas vouloir enregistrer cette échéance dans le "
+"registre ?\n"
+"\n"
+"KMyMoney vous invitera à le faire lors de son prochain démarrage à moins que "
+"vous ne l'ayez manuellement saisie après."
+
+#: kmymoney2.cpp:3725 kmymoney2.cpp:3732
+msgid "Unable to enter scheduled transaction '%1'"
+msgstr "Impossible de saisir l'échéance '%1'"
+
+#: kmymoney2.cpp:3743 kmymoney2.cpp:3783
+msgid "New Payee"
+msgstr "Nouveau Tiers"
+
+#: kmymoney2.cpp:3745
+msgid "Do you want to add <b>%1</b> as payer/receiver ?"
+msgstr "Voulez-vous ajouter <b>%1</b> comme tiers ?"
+
+#: converter/mymoneystatementreader.cpp:892 kmymoney2.cpp:3747
+msgid "New payee/receiver"
+msgstr "Nouveau tiers"
+
+#: kmymoney2.cpp:3773
+msgid "Unable to add payee"
+msgstr "Impossible d'ajouter le tiers"
+
+#: kmymoney2.cpp:3826
+msgid "Do you really want to remove the payee <b>%1</b>?"
+msgstr "Voulez-vous vraiment supprimer le tiers <b>%1</b> ?"
+
+#: kmymoney2.cpp:3828
+msgid "Do you really want to remove all selected payees?"
+msgstr "Voulez-vous vraiment supprimer tous les tiers sélectionnés ?"
+
+#: kmymoney2.cpp:3830
+msgid "Remove Payee"
+msgstr "Supprimer le Tiers"
+
+#: kmymoney2.cpp:3870
+msgid ""
+"At least one transaction/scheduled transaction is still referenced by a "
+"payee. Currently you have all payees selected. However, at least one payee "
+"must remain so that the transaction/scheduled transaction can be reassigned."
+msgstr ""
+"Au moins une opération ou échéance utilise encore ce tiers. Actuellement, "
+"vous avez sélectionné tous les tiers. Cependant, au moins un tiers doit "
+"rester pour que les opérations ou échéances puissent être réassignées."
+
+#: kmymoney2.cpp:3925
+msgid "Unable to reassign payee of transaction/split"
+msgstr "Impossible de modifier le tiers pour l'opération répartie"
+
+#: converter/mymoneyqifreader.cpp:534 converter/mymoneystatementreader.cpp:959
+#: kmymoney2.cpp:3926 kmymoney2.cpp:3983 views/kbudgetview.cpp:636
+#: views/kbudgetview.cpp:737 views/kbudgetview.cpp:751
+#: views/kpayeesview.cpp:519 views/kpayeesview.cpp:870
+msgid "thrown in"
+msgstr "réparti dans"
+
+#: kmymoney2.cpp:3982
+msgid "Unable to remove payee(s)"
+msgstr "Impossible de supprimer le(s) tiers"
+
+#: kmymoney2.cpp:3990
+msgid "Enter ISO 4217 code for the new currency"
+msgstr "Saisissez le code ISO 4217 pour la nouvelle devise"
+
+#: kmymoney2.cpp:3999
+#, c-format
+msgid "Cannot create new currency. %1"
+msgstr "Impossible de créer la nouvelle devise. %1"
+
+#: kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, c-format
+msgid "Cannot rename currency. %1"
+msgstr "Impossible de renommer la devise. %1"
+
+#: kmymoney2.cpp:4039
+msgid "Cannot delete currency %1. %2"
+msgstr "Impossible de supprimer la devise %1. %2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Cannot set %1 as base currency: %2"
+msgstr "Impossible de mettre %1 comme devise de base: %2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Set base currency"
+msgstr "Définir une devise de base"
+
+#: kmymoney2.cpp:4065
+#, c-format
+msgid "Budget %1"
+msgstr "Budget %1"
+
+#: kmymoney2.cpp:4075
+msgid "Budget %1 (%2)"
+msgstr "Budget %1 (%2)"
+
+#: kmymoney2.cpp:4090 kmymoney2.cpp:4139
+msgid "Unable to add budget: %1, thrown in %2:%3"
+msgstr "Impossible d'ajouter le budget : %1, vers %2:%3"
+
+#: kmymoney2.cpp:4105
+msgid "Do you really want to remove the budget <b>%1</b>?"
+msgstr "Voulez-vous vraiment supprimer le budget <b>%1</b> ?"
+
+#: kmymoney2.cpp:4107
+msgid "Do you really want to remove all selected budgets?"
+msgstr "Voulez-vous vraiment supprimer tous les budgets sélectionnés ?"
+
+#: kmymoney2.cpp:4109
+msgid "Remove Budget"
+msgstr "Supprimer le budget"
+
+#: kmymoney2.cpp:4122
+msgid "Unable to remove budget: %1, thrown in %2:%3"
+msgstr "Impossible de déplacer le budget: %1, vers %2:%3"
+
+#: kmymoney2.cpp:4134 views/kreportsview.cpp:659
+#, c-format
+msgid "Copy of %1"
+msgstr "Copie de %1"
+
+#: kmymoney2.cpp:4164
+msgid "Select year"
+msgstr "Définir une année"
+
+#: kmymoney2.cpp:4164
+msgid "Budget year"
+msgstr "Budget de l'année"
+
+#: kmymoney2.cpp:4176 kmymoney2.cpp:4214 kmymoney2.cpp:4274
+msgid "Unable to modify budget: %1, thrown in %2:%3"
+msgstr "Impossible de modifier le budget: %1, vers %2:%3"
+
+#: kmymoney2.cpp:4192 kmymoney2.cpp:4250
+msgid ""
+"The current budget already contains data. Continuing will replace all "
+"current values of this budget."
+msgstr ""
+"Le budget courant contient déjà des données. Si vous continuez, toutes les "
+"valeurs courantes de ce budget seront remplacées."
+
+#: kmymoney2.cpp:4222
+msgid ""
+"Please be aware that changes made in the following dialog affect all KDE "
+"applications not only KMyMoney."
+msgstr ""
+"Veuillez faire attention que les changements réalisés dans la fenêtre de "
+"dialogue suivante affectera toutes les applications KDE et pas seulement "
+"KMyMoney."
+
+#: kmymoney2.cpp:4292
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to delete the transactions anyway?"
+msgstr ""
+"Au moins une partie de l'opération sélectionnée a été rapprochée. Voulez-"
+"vous continuer à éditer les opérations quand même ?"
+
+#: kmymoney2.cpp:4295 views/kgloballedgerview.cpp:1043
+msgid "Transaction already reconciled"
+msgstr "L'opération est déjà rapprochée"
+
+#: kmymoney2.cpp:4301
+msgid "Do you really want to delete the selected transaction?"
+msgstr "Voulez-vous vraiment supprimer l'opération sélectionnée ?"
+
+#: kmymoney2.cpp:4303
+msgid "Do you really want to delete all %1 selected transactions?"
+msgstr ""
+"Voulez-vous vraiment supprimer toutes les %1 opérations sélectionnées ?"
+
+#: kmymoney2.cpp:4305
+msgid "Delete transaction"
+msgstr "Supprimer l'opération"
+
+#: kmymoney2.cpp:4306
+msgid "Deleting transactions"
+msgstr "Supprimer les opérations"
+
+#: kmymoney2.cpp:4321
+msgid "Duplicating transactions"
+msgstr "Dupliquer les opérations"
+
+#: kmymoney2.cpp:4378
+msgid "Unable to delete transaction(s): %1, thrown in %2:%3"
+msgstr "Impossible de supprimer l(es) opération(s): %1, vers %2:%3"
+
+#: kmymoney2.cpp:4452 kmymoney2.cpp:4622
+msgid "Unable to modify transaction: %1, thrown in %2:%3"
+msgstr "Impossible de modifier l'opération: %1, vers %2:%3"
+
+#: kmymoney2.cpp:4514
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling and<br>- <b>Cancel</b> returns to the "
+"transaction editor.<p>You can also select an option to save the transaction "
+"automatically when e.g. selecting another transaction."
+msgstr ""
+"Voulez-vous vraiment annuler l'édition de cette opération sans "
+"l'enregistrer ?<p>- <b>Oui</b> annule l'édition de l'opération,<br>-<b>Non</"
+"b> enregistre l'opération avant d'annuler et <br>- <b>Annuler</b> retourne à "
+"l'édition de l'opération.<p> Vous pouvez aussi choisir l'option "
+"d'enregistrer automatiquement l'opération, par exemple, en sélectionnant une "
+"autre opération."
+
+#: kmymoney2.cpp:4514 kmymoney2.cpp:4517
+msgid "Cancel transaction edit"
+msgstr "Annuler l'édition de l'opération"
+
+#: kmymoney2.cpp:4517
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling.<p>You can also select an option to save the "
+"transaction automatically when e.g. selecting another transaction."
+msgstr ""
+"Voulez-vous vraiment annuler l'édition de cette opération sans "
+"l'enregistrer ?<p>- <b>Oui</b> annule l'édition de l'opération,<br>-<b>Non</"
+"b> enregistre l'opération avant d'annuler.<p> Vous pouvez aussi choisir "
+"l'option d'enregistrer automatiquement l'opération, par exemple, en "
+"sélectionnant une autre opération."
+
+#: kmymoney2.cpp:4667
+msgid "Unable to accept transaction: %1, thrown in %2:%3"
+msgstr "Impossible d'accepter l'opération: %1, vers %2:%3"
+
+#: kmymoney2.cpp:4846
+msgid "Unable to unmatch the selected transactions"
+msgstr "Impossible de supprimer la correspondance des opérations sélectionnées"
+
+#: kmymoney2.cpp:4885
+msgid "No manually entered transaction selected for matching"
+msgstr ""
+"Pas d'opération saisie manuellement sélectionnée pour la correspondance"
+
+#: kmymoney2.cpp:4887
+msgid "No imported transaction selected for matching"
+msgstr "Pas d'opération importée sélectionnée pour la correspondance"
+
+#: kmymoney2.cpp:4895
+msgid "Unable to match the selected transactions"
+msgstr "Impossible de faire correspondre les opérations sélectionnées"
+
+#: kmymoney2.cpp:5097
+msgid "Create a new transaction"
+msgstr "Créer un nouvelle opération"
+
+#: kmymoney2.cpp:5163
+msgid "Duplicate the current selected transactions"
+msgstr "Dupliquer les opérations courantes sélectionnées"
+
+#: kmymoney2.cpp:5223
+msgid ""
+"_: Button text for unmatch transaction\n"
+"Unmatch"
+msgstr "Supprimer la correspondance"
+
+#: kmymoney2.cpp:5451 kmymoney2.cpp:5473
+msgid "Goto '%1'"
+msgstr "Aller à '%1'"
+
+#: kmymoney2.cpp:5582
+msgid "Running consistency check..."
+msgstr "Effectuer une vérification d'intégrité ..."
+
+#: kmymoney2.cpp:5590
+#, c-format
+msgid "Consistency check failed: %1"
+msgstr "Vérification d'intégrité en défaut: %1"
+
+#: kmymoney2.cpp:5594
+msgid "Consistency check result"
+msgstr "Résultat de la vérification d'intégrité"
+
+#: kmymoney2.cpp:5603
+msgid "Checking for overdue scheduled transactions..."
+msgstr "Vérification des échéances en retard ..."
+
+#: kmymoney2.cpp:5740
+msgid ""
+"You must first select a KMyMoney file before you can import a statement."
+msgstr ""
+"Tout d'abord, vous devez choisir un fichier KMyMoney avant d'importer un "
+"relevé."
+
+#: kmymoney2.cpp:5746
+msgid "Importing a statement via Web Connect"
+msgstr "Importation d'un relevé via une connexion internet"
+
+#: kmymoney2.cpp:5759
+msgid ""
+"Unable to import %1 using %2 plugin. The plugin returned the following "
+"error: %3"
+msgstr ""
+"Impossible d'importer %1 en utilisant le module d'extension %2. Le module "
+"d'extension a retourné l'erreur suivante: %3"
+
+#: kmymoney2.cpp:5759 plugins/ofximport/ofximporterplugin.cpp:646
+msgid "Importing error"
+msgstr "Erreur pendant l'importation"
+
+#: kmymoney2.cpp:5780
+msgid "All messages have been enabled."
+msgstr "Tous les messages ont été autorisés."
+
+#: kmymoney2.cpp:5780
+msgid "All messages"
+msgstr "Tous les messages"
+
+#: kmymoney2.cpp:5855
+msgid "Auto saving..."
+msgstr "Sauvegarde automatique ..."
+
+#: kmymoney2.cpp:5913
+msgid "Unable to setup online parameters for account ''%1'"
+msgstr "Impossible d'initialiser les paramètres en ligne pour le compte : %1"
+
+#: kmymoney2.cpp:5928
+msgid ""
+"Do you really want to remove the mapping of account <b>%1</b> to an online "
+"account? Depending on the details of the online banking method used, this "
+"action cannot be reverted."
+msgstr ""
+"Voulez-vous vraiment supprimer les paramètres du compte <b>%1</b> pour un "
+"compte en ligne ? Selon les détails de la méthode des services bancaires en "
+"ligne, cette action ne pourra pas être rétablie."
+
+#: kmymoney2.cpp:5928
+msgid "Remove mapping to online account"
+msgstr "Supprimer les paramètres du compte en ligne"
+
+#: kmymoney2.cpp:5939
+#, c-format
+msgid "Unable to unmap account from online account: %1"
+msgstr "Impossible de supprimer les paramètres en ligne pour le compte : %1"
+
+#: kmymoney2.cpp:5956
+msgid " (Brokerage)"
+msgstr " (Courtage)"
+
+#: kmymoney2.cpp:5957
+msgid ""
+"You try to map a brokerage account to an online account. This is usually not "
+"advisable. In general, the investment account should be mapped to the online "
+"account. Please cancel if you intended to map the investment account, "
+"continue otherwise"
+msgstr ""
+"Vous essayez de lier un compte de courtage à un compte en ligne. Ce n'est "
+"généralement pas souhaitable. En général, le compte de placement doit être "
+"lié avec un compte en ligne. Veuillez annuler si vous aviez l'intention de "
+"lier le compte d'investissement, sinon continuer"
+
+#: kmymoney2.cpp:5957
+msgid "Mapping brokerage account"
+msgstr "Lier un compte de courtage"
+
+#: kmymoney2.cpp:5964
+msgid "Select online banking plugin"
+msgstr "Sélectionner une extension pour la banque en ligne"
+
+#: kmymoney2.cpp:6005
+#, c-format
+msgid "Unable to map account to online account: %1"
+msgstr "Impossible de définir le compte pour un compte en ligne : %1"
+
+#: converter/mymoneyqifreader.cpp:407 converter/mymoneytemplate.cpp:73
+#: views/kmymoneyview.cpp:590
+msgid "Error while loading file '%1'!"
+msgstr "Erreur lors du chargement du fichier '%1' !"
+
+#: converter/mymoneyqifreader.cpp:409 converter/mymoneyqifreader.cpp:965
+#: converter/mymoneytemplate.cpp:75 views/kmymoneyview.cpp:592
+msgid "File access error"
+msgstr "Erreur d'accès au fichier"
+
+#: converter/mymoneytemplate.cpp:84
+msgid "<b>%1</b> is not a template file."
+msgstr "<b>%1</b> n'est pas un fichier de modèle."
+
+#: converter/mymoneytemplate.cpp:85 views/kmymoneyview.cpp:603
+msgid "Filetype Error"
+msgstr "Erreur de type de fichier"
+
+#: converter/mymoneytemplate.cpp:93
+msgid "Error while reading template file <b>%1</b> in line %2, column %3"
+msgstr ""
+"Erreur pendant la lecture du fichier de modèle <b>%1</b> ligne %2, colonne %3"
+
+#: converter/mymoneytemplate.cpp:94
+msgid "Template Error"
+msgstr "Erreur Modèle"
+
+#: converter/mymoneytemplate.cpp:101
+msgid "File '%1' not found!"
+msgstr "Impossible de trouver le Fichier '%1' !"
+
+#: converter/mymoneytemplate.cpp:142
+msgid "Invalid tag <b>%1</b> in template file <b>%2</b>!"
+msgstr "Étiquette invalide <b>%1</b> dans le fichier de modèle <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:214
+#, c-format
+msgid "Loading template %1"
+msgstr "Chargement du modèle %1"
+
+#: converter/mymoneytemplate.cpp:241
+msgid "Invalid top-level account type <b>%1</b> in template file <b>%2</b>!"
+msgstr ""
+"Type de compte de niveau supérieur invalide <b>%1</b> dans le fichier de "
+"modèle <b>%2</b> !"
+
+#: converter/mymoneytemplate.cpp:309
+msgid ""
+"Invalid flag type <b>%1</b> for account <b>%3</b> in template file <b>%2</b>!"
+msgstr ""
+"Type de marqueur <b>%1</b> invalide pour le compte <b>%3</b> dans le fichier "
+"de modèle <b>%2</b> !"
+
+#: converter/mymoneytemplate.cpp:398 converter/mymoneytemplate.cpp:401
+#: views/kmymoneyview.cpp:1151 views/kmymoneyview.cpp:1154
+msgid "Unable to write changes to '%1'"
+msgstr "Impossible d'écrire les changements dans '%1'"
+
+#: converter/mymoneytemplate.cpp:407 views/kmymoneyview.cpp:1162
+msgid "Unable to upload to '%1'"
+msgstr "Impossible de charger '%1'"
+
+#: converter/mymoneyqifwriter.cpp:70
+msgid ""
+"Unexpected exception '%1' thrown in %2, line %3 caught in MyMoneyQifWriter::"
+"write()"
+msgstr ""
+"Exception non attendue '%1' lancée dans %2, ligne %3 récupérée dans "
+"MyMoneyQifWriter::write()"
+
+#: converter/mymoneyqifwriter.cpp:80
+msgid "Unable to open file '%1' for writing"
+msgstr "Impossible d'ouvrir le fichier '%1' pour écriture"
+
+#: converter/webpricequote.cpp:340
+#, c-format
+msgid "Symbol found: %1"
+msgstr "Symbole trouvé: %1"
+
+#: converter/webpricequote.cpp:368
+msgid "Price found: %1 (%2)"
+msgstr "Cours trouvé : %1 (%2)"
+
+#: converter/webpricequote.cpp:380
+#, c-format
+msgid "Date found: %1"
+msgstr "Date trouvée: %1"
+
+#: converter/webpricequote.cpp:397 converter/webpricequote.cpp:403
+#, c-format
+msgid "Unable to update price for %1"
+msgstr "Impossible de mettre à jour le cours pour %1"
+
+#: converter/mymoneyqifreader.cpp:170
+msgid ""
+"_: Category name\n"
+"Reinvested dividend"
+msgstr ""
+"_: Nom de la catégorie\n"
+"Réinvestir le dividende"
+
+#: converter/mymoneyqifreader.cpp:173
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (long term)"
+msgstr ""
+"_: Nom de la catégorie\n"
+"Réinvestir le dividende (long terme)"
+
+#: converter/mymoneyqifreader.cpp:176
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (short term)"
+msgstr ""
+"_: Nom de la catégorie\n"
+"Réinvestir le dividende (court terme)"
+
+#: converter/mymoneyqifreader.cpp:179
+msgid ""
+"_: Category name\n"
+"Dividend"
+msgstr ""
+"_: Nom de la catégorie\n"
+"Dividende"
+
+#: converter/mymoneyqifreader.cpp:182
+msgid ""
+"_: Category name\n"
+"Interest"
+msgstr ""
+"_: Nom de la catégorie\n"
+"Intérêt"
+
+#: converter/mymoneyqifreader.cpp:185
+msgid ""
+"_: Category name\n"
+"Capital Gain (short term)"
+msgstr ""
+"_: Nom de la catégorie\n"
+"Gain sur le capital (court terme)"
+
+#: converter/mymoneyqifreader.cpp:188
+msgid ""
+"_: Category name\n"
+"Capital Gain (mid term)"
+msgstr ""
+"_: Nom de la catégorie\n"
+"Gain sur le capital (moyen terme)"
+
+#: converter/mymoneyqifreader.cpp:191
+msgid ""
+"_: Category name\n"
+"Capital Gain (long term)"
+msgstr ""
+"_: Nom de la catégorie\n"
+"Gain sur le capital (long terme)"
+
+#: converter/mymoneyqifreader.cpp:194
+msgid ""
+"_: Category name\n"
+"Returned capital"
+msgstr ""
+"_: Nom de la catégorie\n"
+"Capital restitué"
+
+#: converter/mymoneyqifreader.cpp:197
+msgid ""
+"_: Category name\n"
+"Miscellaneous income"
+msgstr ""
+"_: Category name\n"
+"Revenus divers"
+
+#: converter/mymoneyqifreader.cpp:200
+msgid ""
+"_: Category name\n"
+"Miscellaneous expense"
+msgstr ""
+"_: Category name\n"
+"Dépenses diverses"
+
+#: converter/mymoneyqifreader.cpp:203
+msgid ""
+"_: Category name\n"
+"Investment fees"
+msgstr ""
+"_: Category name\n"
+"Frais pour les investissements"
+
+#: converter/mymoneyqifreader.cpp:205
+#, c-format
+msgid "Unknown QIF type %1"
+msgstr "Type QIF %1 inconnu"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Date format selection"
+msgstr "Sélection du format de la date"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Pick the date format that suits your input file"
+msgstr "Choisissez le format de la date qui convient à votre fichier d'entrée"
+
+#: converter/mymoneyqifreader.cpp:366
+msgid "Importing QIF ..."
+msgstr "Importation QIF ..."
+
+#: converter/mymoneyqifreader.cpp:442
+msgid "Reading QIF ..."
+msgstr "Lecture QIF ..."
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Adding transactions"
+msgstr "Ajouter les opérations"
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Now adding the transactions to your ledger..."
+msgstr "Maintenant, ajout des opérations dans le registre ..."
+
+#: converter/mymoneyqifreader.cpp:533
+msgid "Unable to add transactions"
+msgstr "Impossible d'ajouter les opérations"
+
+#: converter/mymoneyqifreader.cpp:567
+msgid ""
+"_: QIF tag for liability account\n"
+"Oth L"
+msgstr ""
+"_: Tag QIF pour les comptes de passif\n"
+"Autres L"
+
+#: converter/mymoneyqifreader.cpp:572
+msgid ""
+"_: QIF tag for category\n"
+"Cat"
+msgstr ""
+"_: Tag QIF pour les catégories\n"
+"Cat"
+
+#: converter/mymoneyqifreader.cpp:575
+msgid ""
+"_: QIF tag for security\n"
+"Security"
+msgstr ""
+"_: Tag QIF pour les valeurs\n"
+"Valeur"
+
+#: converter/mymoneyqifreader.cpp:578
+msgid ""
+"_: QIF tag for investment account\n"
+"Invst"
+msgstr ""
+"_: Tag QIF pour les comptes d'investissement\n"
+"Invst"
+
+#: converter/mymoneyqifreader.cpp:581
+msgid ""
+"_: QIF tag for prices\n"
+"Prices"
+msgstr ""
+"_: Tag QIF pour les cours\n"
+"Cours"
+
+#: converter/mymoneyqifreader.cpp:599
+msgid ""
+"_: QIF tag for a class\n"
+"Class"
+msgstr ""
+"_: Tag QIF pour les classes\n"
+"Classe"
+
+#: converter/mymoneyqifreader.cpp:753 converter/mymoneyqifreader.cpp:2203
+msgid ""
+"The %1 account currently has an opening balance of %2. This QIF file reports "
+"an opening balance of %3. Would you like to overwrite the current balance "
+"with the one from the QIF file?"
+msgstr ""
+"Le compte courant %1 a un équilibre d'ouverture de %2. Ce fichier QIF "
+"rapporte un équilibre d'ouverture de %3. Voulez-vous écraser l'équilibre "
+"courant avec celui du fichier QIF ?"
+
+#: converter/mymoneyqifreader.cpp:754 converter/mymoneyqifreader.cpp:2204
+msgid "Overwrite opening balance"
+msgstr "Écrasez le solde d'ouverture"
+
+#: converter/mymoneyqifreader.cpp:879 converter/mymoneyqifreader.cpp:890
+#: converter/mymoneyqifreader.cpp:914
+msgid "Autogenerated by QIF importer"
+msgstr "Généré automatiquement par l'importateur QIF"
+
+#: converter/mymoneyqifreader.cpp:907
+msgid "QIF imported, no account name supplied"
+msgstr "Importé par QIF, pas de nom de compte fourni"
+
+#: converter/mymoneyqifreader.cpp:940
+msgid ""
+"KMyMoney has imported a second opening balance transaction into account <b>%"
+"1</b> which differs from the one found already on file. Please correct this "
+"manually once the import is done."
+msgstr ""
+"KMyMoney a importé une deuxième opération de solde d'ouverture dans le "
+"compte <b>%1</b>, qui diffère de celle qui se trouve déjà dans le fichier. "
+"Veuillez corriger manuellement une fois l'importation sera terminée."
+
+#: converter/mymoneyqifreader.cpp:940
+msgid "Opening balance problem"
+msgstr "Problème avec le solde d'ouverture"
+
+#: converter/mymoneyqifreader.cpp:963
+msgid "Error while creating opening balance transaction"
+msgstr "Erreur lors de la création de l'opération de solde d'ouverture"
+
+#: converter/mymoneyqifreader.cpp:1029 converter/mymoneyqifreader.cpp:1276
+msgid ""
+"The date entry \"%1\" read from the file cannot be interpreted through the "
+"current date profile setting of \"%2\".\n"
+"\n"
+"Pressing \"Continue\" will assign todays date to the transaction. Pressing "
+"\"Cancel\" will abort the import operation. You can then restart the import "
+"and select a different QIF profile or create a new one."
+msgstr ""
+"L'information de date \"%1\" lue dans le fichier ne peut être interprétée "
+"selon le profil de date actuel de \"%2\".\n"
+"\n"
+"Appuyer sur \"Continuer\"assignera aujourd'hui comme date d'opération. "
+"Appuyer sur \"Annuler\" interrompra l'opération d'importation. Vous pourrez "
+"alors redémarrer l'importation et choisir un profil QIF différent ou en "
+"créer un nouveau."
+
+#: converter/mymoneyqifreader.cpp:1035 converter/mymoneyqifreader.cpp:1282
+msgid "Invalid date format"
+msgstr "Format de date invalide"
+
+#: converter/mymoneyqifreader.cpp:1398
+#: converter/mymoneystatementreader.cpp:589
+#: converter/mymoneystatementreader.cpp:592
+msgid "Statement Importer"
+msgstr "Importateur de Relevé"
+
+#: converter/mymoneyqifreader.cpp:1413
+#: converter/mymoneystatementreader.cpp:644
+msgid ""
+"This investment account does not contain the \"%1\" security. Transactions "
+"involving this security will be ignored."
+msgstr ""
+"Ce compte investissement ne contient pas la valeur \"%1\". Les opérations "
+"impliquant cette valeur seront ignorées."
+
+#: converter/mymoneyqifreader.cpp:1415
+#: converter/mymoneystatementreader.cpp:612
+#: converter/mymoneystatementreader.cpp:644
+msgid "Security not found"
+msgstr "Valeur non trouvée"
+
+#: converter/mymoneyqifreader.cpp:2021
+msgid "%1 (Investment)"
+msgstr "%1 (Investissement)"
+
+#: converter/mymoneyqifreader.cpp:2022
+msgid "Autogenerated by QIF importer from type Mutual account entry"
+msgstr ""
+"Généré automatiquement par l'importateur QIF avec le type Compte Mutuel"
+
+#: converter/mymoneyqifreader.cpp:2085 converter/mymoneyqifreader.cpp:2228
+msgid "account"
+msgstr "compte"
+
+#: converter/mymoneyqifreader.cpp:2086
+msgid "al"
+msgstr "al"
+
+#: converter/mymoneyqifreader.cpp:2093
+msgid "category"
+msgstr "Catégorie"
+
+#: converter/mymoneyqifreader.cpp:2094
+msgid "ei"
+msgstr "ei"
+
+#: converter/mymoneyqifreader.cpp:2095
+msgid "Category selection"
+msgstr "Sélection de la catégorie"
+
+#: converter/mymoneyqifreader.cpp:2110
+msgid "Account \"%1\" disappeared: "
+msgstr "Le compte \"%1\" a disparu : "
+
+#: converter/mymoneyqifreader.cpp:2131
+msgid "The %1 '%2' does not exist. Do you want to create it?"
+msgstr "Le %1 '%2' n'existe pas. Voulez-vous le créer ?"
+
+#: converter/mymoneyqifreader.cpp:2140
+#, c-format
+msgid "Select %1"
+msgstr "Sélectionner %1"
+
+#: converter/mymoneyqifreader.cpp:2142
+msgid ""
+"The %1 <b>%2</b> currently exists. Do you want to import transactions to "
+"this account?"
+msgstr ""
+"Le %1 <b>%2</b> existe. Voulez-vous importer les opérations vers ce compte ?"
+
+#: converter/mymoneyqifreader.cpp:2147
+msgid ""
+"The %1 <b>%2</b> currently does not exist. You can create a new %3 by "
+"pressing the <b>Create</b> button or select another %4 manually from the "
+"selection box."
+msgstr ""
+"Le %1 <b>%2</b> n'existe pas actuellement. Vous pouvez créer un nouveau %3 "
+"en appuyant sur <b>Créer</b> ou en sélectionnant manuellement un autre %4 à "
+"partir de la boîte."
+
+#: converter/mymoneyqifreader.cpp:2154
+#, c-format
+msgid "Import transactions to %1"
+msgstr "Importer des opérations vers %1"
+
+#: converter/mymoneyqifreader.cpp:2155
+msgid ""
+"No %1 information has been found in the selected QIF file. Please select an "
+"account using the selection box in the dialog or create a new %2 by pressing "
+"the <b>Create</b> button."
+msgstr ""
+"Aucune information %1 n'a été trouvée dans le fichier QIF sélectionné. Merci "
+"de choisir un compte utilisant la boîte de sélection dans la fenêtre, ou "
+"créez un nouveau %2 en appuyant sur <b>Créer</b>."
+
+#: converter/mymoneyqifreader.cpp:2229
+msgid "You must select or create an account."
+msgstr "Vous devez choisir ou créer un compte."
+
+#: converter/mymoneyqifreader.cpp:2231
+msgid "You must select or create a category."
+msgstr "Vous devez choisir ou créer une catégorie."
+
+#: converter/mymoneystatementreader.cpp:100
+msgid "_Fees"
+msgstr "_Frais"
+
+#: converter/mymoneystatementreader.cpp:106
+msgid "_Dividend"
+msgstr "_Dividendes"
+
+#: converter/mymoneystatementreader.cpp:289
+#, c-format
+msgid "Importing statement for account %1"
+msgstr "Importation d'un relevé pour le compte %1"
+
+#: converter/mymoneystatementreader.cpp:291
+msgid "Importing statement without transactions"
+msgstr "Importation d'un relevé sans opération"
+
+#: converter/mymoneystatementreader.cpp:385
+msgid " Statement balance is not contained in statement."
+msgstr " Le solde n'est pas indiqué dans le relevé."
+
+#: converter/mymoneystatementreader.cpp:387
+msgid " Statement balance on %1 is reported to be %2"
+msgstr " Solde du relevé de %1 est reporté pour être %2"
+
+#: converter/mymoneystatementreader.cpp:389
+msgid " Transactions"
+msgstr " Opérations"
+
+#: converter/mymoneystatementreader.cpp:390
+msgid " %1 processed"
+msgstr " %1 réalisé"
+
+#: converter/mymoneystatementreader.cpp:391
+msgid " %1 added"
+msgstr " %1 ajouté"
+
+#: converter/mymoneystatementreader.cpp:392
+msgid " %1 matched"
+msgstr " %1 correspondant"
+
+#: converter/mymoneystatementreader.cpp:393
+msgid " %1 duplicates"
+msgstr " %1 dupliqué(s)"
+
+#: converter/mymoneystatementreader.cpp:394
+msgid " Payees"
+msgstr " Tiers"
+
+#: converter/mymoneystatementreader.cpp:395
+msgid " %1 created"
+msgstr " %1 créé"
+
+#: converter/mymoneystatementreader.cpp:483
+#, c-format
+msgid "Error creating security record: %1"
+msgstr "Erreur lors de la création de l'enregistrement de la valeur : %1"
+
+#: converter/mymoneystatementreader.cpp:612
+msgid ""
+"This imported statement contains investment transactions with no security. "
+"These transactions will be ignored."
+msgstr ""
+"Ce relevé importé contient des opérations d'investissement sans valeur. Ces "
+"opérations seront ignorées."
+
+#: converter/mymoneystatementreader.cpp:803
+msgid "(Fees) "
+msgstr "(Frais) "
+
+#: converter/mymoneystatementreader.cpp:880
+msgid ""
+"Do you want to add \"%1\" as payee/receiver?\n"
+"\n"
+msgstr ""
+"Souhaitez-vous ajouter \"%1\" comme tiers ?\n"
+"\n"
+
+#: converter/mymoneystatementreader.cpp:881
+msgid ""
+"Selecting \"Yes\" will create the payee, \"No\" will skip creation of a "
+"payee record and remove the payee information from this transaction. "
+"Selecting \"Cancel\" aborts the import operation.\n"
+"\n"
+"If you select \"No\" here and mark the \"Don't ask again\" checkbox, the "
+"payee information for all following transactions referencing \"%1\" will be "
+"removed."
+msgstr ""
+"Sélectionner \"Oui\" créera le tiers, \"Non\" sautera la création du tiers "
+"et supprimera l'information du tiers de cette opération. Sélectionner "
+"\"Annuler\" annulera l'opération d'importation.\n"
+"\n"
+"Si vous choisissez \"Non\" ici et que vous cochez la casse \"Ne plus demander"
+"\", l'information du tiers pour toutes les opérations suivantes faisant "
+"référence à \"%1\" seront supprimées."
+
+#: converter/mymoneystatementreader.cpp:917
+msgid "Save Category"
+msgstr "Suver la catégorie"
+
+#: converter/mymoneystatementreader.cpp:918
+msgid "No Category"
+msgstr "Pas de catégorie"
+
+#: converter/mymoneystatementreader.cpp:919 dialogs/rc.cpp:4
+msgid "Abort"
+msgstr "Abandonner"
+
+#: converter/mymoneystatementreader.cpp:926
+msgid "Please select a default category for payee '%1':"
+msgstr "Veuillez sélectionner une catégorie par défaut pour le tiers '%1' :"
+
+#: converter/mymoneystatementreader.cpp:958
+msgid "Unable to add payee/receiver"
+msgstr "Impossible d'ajouter un tiers"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid ""
+"KMyMoney has found a scheduled transaction named <b>%1</b> which matches an "
+"imported transaction. Do you want KMyMoney to enter this schedule now so "
+"that the transaction can be matched? "
+msgstr ""
+"KMyMoney a trouvé une opération avec échéance nommée <b>%1</b> qui "
+"correspond à une opération importée. Voulez-vous que KMyMoney saisisse cette "
+"échéance maintenant afin que l'opération puisse correspondre ?"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid "Schedule found"
+msgstr "Échéance trouvée"
+
+#: converter/mymoneystatementreader.cpp:1219
+msgid "Problem adding or matching imported transaction with id '%1': %2"
+msgstr ""
+"Problème lors de l'ajout ou de la correspondance de l'opération importée "
+"avec l'identifiant '%1': %2"
+
+#: converter/mymoneystatementreader.cpp:1268
+msgid ""
+"<b>You have downloaded a statement for the following account:</b><br><br>"
+msgstr "<b>Vous avez télé-chargé un état pour le compte suivant :</b><br><br>"
+
+#: converter/mymoneystatementreader.cpp:1269
+#, c-format
+msgid " - Account Name: %1"
+msgstr " - Nom du Compte : %1"
+
+#: converter/mymoneystatementreader.cpp:1270
+#, c-format
+msgid " - Account Type: %1"
+msgstr " - Type de Compte : %1"
+
+#: converter/mymoneystatementreader.cpp:1271
+#, c-format
+msgid " - Account Number: %1"
+msgstr " - Numéro du Compte : %1"
+
+#: converter/mymoneystatementreader.cpp:1279
+msgid "Do you want to import transactions to this account?"
+msgstr "Voulez-vous importer les opérations vers ce compte ?"
+
+#: converter/mymoneystatementreader.cpp:1281
+msgid ""
+"KMyMoney cannot determine which of your accounts to use. You can create a "
+"new account by pressing the <b>Create</b> button or select another one "
+"manually from the selection box below."
+msgstr ""
+"KMyMoney ne peut pas déterminer quel compte utiliser. Vous pouvez en créer "
+"un nouveau compte en appuyant sur <b>Créer</b> ou en sélectionnant "
+"manuellement un autre compte à partir de la boîte ci-dessous."
+
+#: converter/mymoneystatementreader.cpp:1287
+msgid ""
+"No account information has been found in the selected statement file. Please "
+"select an account using the selection box in the dialog or create a new "
+"account by pressing the <b>Create</b> button."
+msgstr ""
+"Aucune information n'a été trouvée dans le fichier de relevé de compte "
+"sélectionné. Merci de choisir un compte en utilisant la boîte de sélection "
+"dans la fenêtre, ou créez un nouveau compte en appuyant sur le bouton "
+"<b>Créer</b>."
+
+#: converter/mymoneystatementreader.cpp:1294
+msgid "Import transactions"
+msgstr "Importer des opérations"
+
+#: converter/mymoneystatementreader.cpp:1330
+msgid ""
+"You must select an account, create a new one, or press the <b>Abort</b> "
+"button."
+msgstr ""
+"Vous devez sélectionner un compte, en créer un nouveau, ou presser le bouton "
+"\"Abandonner\"."
+
+#: converter/mymoneygncreader.cpp:119
+msgid "%1: Sorry. This importer cannot handle version %2 of element %3"
+msgstr ""
+"%1 : Désolé. Cet importateur ne peut pas gérer la version %2 des éléments %3"
+
+#: converter/mymoneygncreader.cpp:193
+#, c-format
+msgid "Account%1"
+msgstr "Compte%1"
+
+#: converter/mymoneygncreader.cpp:197
+#, c-format
+msgid "Stock%1"
+msgstr "Action%1"
+
+#: converter/mymoneygncreader.cpp:206
+#, c-format
+msgid "Payee%1"
+msgstr "Tiers%1"
+
+#: converter/mymoneygncreader.cpp:212
+#, c-format
+msgid "Schedule%1"
+msgstr "Échéancier%1"
+
+#: converter/mymoneygncreader.cpp:262
+msgid "This version of the importer cannot handle multi-book files."
+msgstr ""
+"Cette version d'importateur ne peut pas manipuler des fichiers 'multi-book'."
+
+#: converter/mymoneygncreader.cpp:912
+msgid "Invalid header for file. Should be 'gnc-v2'"
+msgstr "Entête invalide pour le fichier. Devrait être 'gnc-v2'"
+
+#: converter/mymoneygncreader.cpp:937 converter/mymoneygncreader.cpp:972
+#: converter/mymoneygncreader.cpp:1062
+#, c-format
+msgid ""
+"Import failed:\n"
+"\n"
+"%1"
+msgstr ""
+"L'importation a échoué :\n"
+"\n"
+"%1"
+
+#: converter/mymoneygncreader.cpp:1065
+msgid "Import complete"
+msgstr "Importation terminée"
+
+#: converter/mymoneygncreader.cpp:1120
+msgid "Disguise your wealth"
+msgstr "Déguiser votre richesse"
+
+#: converter/mymoneygncreader.cpp:1121
+msgid ""
+"Each monetary value on your file will be multiplied by a random number "
+"between 0.01 and 1.99\n"
+"with a different value used for each transaction. In addition, to further "
+"disguise the true\n"
+"values, you may enter a number between %1 and %2 which will be applied to "
+"all values.\n"
+"These numbers will not be stored in the file."
+msgstr ""
+"Chaque valeur monétaire sur votre fichier sera multipliée par un nombre "
+"aléatoire entre 0.01 et 1.99\n"
+" avec une valeur différente utilisée pour chaque opération. En outre, pour "
+"masquer ensuite les vraies valeurs\n"
+", vous pouvez saisir un nombre entre %1 et %2 qui sera appliqué à toutes les "
+"valeurs.\n"
+" Ces nombres ne seront pas stockés dans le fichier."
+
+#: converter/mymoneygncreader.cpp:1135
+msgid "Loading commodities..."
+msgstr "Chargement des produits ..."
+
+#: converter/mymoneygncreader.cpp:1160
+msgid "Loading prices..."
+msgstr "Chargement des prix ..."
+
+#: converter/mymoneygncreader.cpp:1164 converter/mymoneygncreader.cpp:1171
+msgid "Imported History"
+msgstr "Historique Importé"
+
+#: converter/mymoneygncreader.cpp:1251
+#, c-format
+msgid "Current importer does not recognize GnuCash account type %1"
+msgstr "L'importateur actuel ne reconnaît pas le type de compte GnuCash %1"
+
+#: converter/mymoneygncreader.cpp:1471
+msgid "Imported Transaction"
+msgstr "Opération Importée"
+
+#: converter/mymoneygncreader.cpp:1519
+msgid "Loading templates..."
+msgstr "Chargement des modèles ..."
+
+#: converter/mymoneygncreader.cpp:1531
+msgid "Unknown payee"
+msgstr "Tiers inconnu"
+
+#: converter/mymoneygncreader.cpp:1723
+msgid "Loading schedules..."
+msgstr "Chargement des échéances ..."
+
+#: converter/mymoneygncreader.cpp:1735
+#, c-format
+msgid "Can't find template transaction for schedule %1"
+msgstr "Ne trouve pas le modèle d'opération pour l'échéance %1"
+
+#: converter/mymoneygncreader.cpp:1910
+msgid "Reorganizing accounts..."
+msgstr "Réorganisation des comptes ..."
+
+#: converter/mymoneygncreader.cpp:1972
+msgid ""
+"Your main currency seems to be %1 (%2); do you want to set this as your base "
+"currency?"
+msgstr ""
+"Votre devise principale semble être %1 (%2). Voulez-vous définir cette "
+"devise comme monnaie de base ?"
+
+#: converter/mymoneygncreader.cpp:1993
+msgid "More"
+msgstr "Plus"
+
+#: converter/mymoneygncreader.cpp:1997
+msgid "Save Report"
+msgstr "Sauver le rapport"
+
+#: converter/mymoneygncreader.cpp:2017
+msgid ""
+"Problems were encountered in converting schedule '%1'.\n"
+"Do you want to review or edit it now?"
+msgstr ""
+"Des problèmes ont été rencontrés dans la conversion de l'échéance '%1'.\n"
+" Voulez-vous la revoir ou la modifier maintenant ?"
+
+#: converter/mymoneygncreader.cpp:2039
+msgid ""
+"Found:\n"
+"\n"
+msgstr ""
+"Trouvé :\n"
+"\n"
+
+#: converter/mymoneygncreader.cpp:2040
+msgid " commodities (equities)\n"
+msgstr " produits (actions)\n"
+
+#: converter/mymoneygncreader.cpp:2041
+msgid " prices\n"
+msgstr " cours\n"
+
+#: converter/mymoneygncreader.cpp:2042
+msgid " accounts\n"
+msgstr " comptes\n"
+
+#: converter/mymoneygncreader.cpp:2043
+msgid " transactions\n"
+msgstr " opérations\n"
+
+#: converter/mymoneygncreader.cpp:2044
+msgid " schedules\n"
+msgstr " Échéances\n"
+
+#: converter/mymoneygncreader.cpp:2047
+msgid "No inconsistencies were detected"
+msgstr "Aucune erreur d'intégrité n'a été détectée"
+
+#: converter/mymoneygncreader.cpp:2049
+msgid " inconsistencies were detected and corrected\n"
+msgstr " des erreurs d'intégrité ont été détectées et corrigées\n"
+
+#: converter/mymoneygncreader.cpp:2054
+msgid " orphan accounts were created\n"
+msgstr " des comptes orphelins ont été créés\n"
+
+#: converter/mymoneygncreader.cpp:2059
+msgid " possible schedule problems were noted\n"
+msgstr " des problèmes possibles d'échéance ont été notés\n"
+
+#: converter/mymoneygncreader.cpp:2064
+msgid "Small Business Features (Customers, Invoices, etc.)"
+msgstr "Dispositifs de petite entreprise (clients, factures, etc.)"
+
+#: converter/mymoneygncreader.cpp:2065 views/kmymoneyview.cpp:241
+#: views/kmymoneyview.cpp:243
+msgid "Budgets"
+msgstr "Budgets"
+
+#: converter/mymoneygncreader.cpp:2066
+msgid "Lots"
+msgstr "Lots"
+
+#: converter/mymoneygncreader.cpp:2068
+msgid "The following features found in your file are not currently supported:"
+msgstr ""
+"Les dispositifs suivants trouvés dans votre fichier ne sont pas actuellement "
+"supportés :"
+
+#: converter/mymoneygncreader.cpp:2071
+msgid ""
+"\n"
+"\n"
+"Press More for further information"
+msgstr ""
+"\n"
+"\n"
+"Pressez <b>Plus</b> pour plus d'information"
+
+#: converter/mymoneygncreader.cpp:2139
+msgid "Orphan created from unknown gnucash account"
+msgstr "Orphelin créé d'un compte GnuCash inconnu"
+
+#: converter/mymoneygncreader.cpp:2170
+msgid "Internal error - invalid interval char in incrDate"
+msgstr "Erreur interne - caractère d'intervalle invalide dans incrDate"
+
+#: converter/mymoneygncreader.cpp:2233
+msgid "Enter the investment account name "
+msgstr "Saisissez le nom du compte investissement "
+
+#: converter/mymoneygncreader.cpp:2234
+msgid "My Investments"
+msgstr "Mes Investissements"
+
+#: converter/mymoneygncreader.cpp:2269
+#, c-format
+msgid "Select parent investment account or enter new name. Stock %1"
+msgstr ""
+"Choisissez le compte père d'investissement ou saisissez le nouveau nom. "
+"Actions %1"
+
+#: converter/mymoneygncreader.cpp:2292 converter/mymoneygncreader.cpp:2307
+msgid "%1 is not an Investment Account. Do you wish to make it one?"
+msgstr "%1 n'est pas un compte d'investissement. Voulez-vous en créer un ?"
+
+#: converter/mymoneygncreader.cpp:2408
+msgid ""
+"An Investment account must be a child of an Asset account\n"
+"Account %1 will be stored under the main Asset account"
+msgstr ""
+"Un compte investissement doit être l'enfant d'un compte d'actif\n"
+"Le compte %1 sera enregistré sous le compte d'actif principal"
+
+#: converter/mymoneygncreader.cpp:2410
+msgid ""
+"An Income account must be a child of an Income account\n"
+"Account %1 will be stored under the main Income account"
+msgstr ""
+"Un compte de Revenus doit être l'enfant d'un compte d'actif\n"
+"Le compte %1 sera enregistré sous le compte principal d'actif"
+
+#: converter/mymoneygncreader.cpp:2412
+msgid ""
+"An Expense account must be a child of an Expense account\n"
+"Account %1 will be stored under the main Expense account"
+msgstr ""
+"Un compte de Dépenses doit être l'enfant d'un compte de Passif\n"
+"Le compte %1 sera enregistré sous le compte principal de Passif"
+
+#: converter/mymoneygncreader.cpp:2414
+msgid ""
+"One or more transactions contain a reference to an otherwise unknown "
+"account\n"
+"An asset account with the name %1 has been created to hold the data"
+msgstr ""
+"Une ou plusieurs opérations contiennent une référence à un compte inconnu.\n"
+"Un compte d'actif avec le nom %1 a été créé pour contenir les données"
+
+#: converter/mymoneygncreader.cpp:2416
+msgid "Schedule %1 has interval of %2 which is not currently available"
+msgstr ""
+"L'échéance %1 a un intervalle de %2, ce qui n'est pas actuellement possible"
+
+#: converter/mymoneygncreader.cpp:2417
+msgid "Schedule %1 dropped at user request"
+msgstr "Échéance %1 retirée à la demande de l'utilisateur"
+
+#: converter/mymoneygncreader.cpp:2418
+msgid "Schedule %1 contains unknown action (key = %2, type = %3)"
+msgstr "L'échéance %1 contient une action inconnue (clé = %2, type = %3)"
+
+#: converter/mymoneygncreader.cpp:2419
+msgid "Schedule %1 contains multiple actions; only one has been imported"
+msgstr ""
+"L'échéance %1 contient des actions multiples; seulement une a été importée"
+
+#: converter/mymoneygncreader.cpp:2420
+msgid "Schedule %1 contains no valid splits"
+msgstr "L'échéance %1 ne contient aucune répartition valide"
+
+#: converter/mymoneygncreader.cpp:2421
+msgid ""
+"Schedule %1 appears to contain a formula. GnuCash formulae are not "
+"convertible"
+msgstr ""
+"L'échéance %1 semble contenir une formule. Les formules de GnuCash ne sont "
+"pas convertibles"
+
+#: converter/mymoneygncreader.cpp:2422
+msgid ""
+"Schedule %1 contains unknown interval specification; please check for "
+"correct operation"
+msgstr ""
+"L'échéance %1 contient une spécification d'intervalle inconnue; merci de "
+"vérifier que l'opération est correcte"
+
+#: converter/mymoneygncreader.cpp:2423
+msgid ""
+"Schedule %1 contains a deferred interval specification; please check for "
+"correct operation"
+msgstr ""
+"L'échéance %1 contient une spécification d'intervalle différée ; merci de "
+"vérifier que l'opération est correcte"
+
+#: converter/mymoneygncreader.cpp:2424
+msgid ""
+"Account or Category %1, transaction date %2; split contains invalid value; "
+"please check"
+msgstr ""
+"Dans le compte ou la catégorie %1, à la date d'opération %2; la répartition "
+"contient une valeur invalide ; merci de vérifier"
+
+#: kmymoneyutils.cpp:146
+msgid "&New Schedule..."
+msgstr "&Nouvelle échéance ..."
+
+#: kmymoneyutils.cpp:148
+msgid "Create a new schedule."
+msgstr "Créer un nouvelle échéance."
+
+#: kmymoneyutils.cpp:149
+msgid "Use this to create a new schedule."
+msgstr "Utilisez ceci pour créer une nouvelle échéance."
+
+#: kmymoneyutils.cpp:158
+msgid "&Filter"
+msgstr "&Filtrer"
+
+#: kmymoneyutils.cpp:160
+msgid "Filter out accounts"
+msgstr "Filtrer les comptes"
+
+#: kmymoneyutils.cpp:161
+msgid "Use this to filter out accounts"
+msgstr "Utilisez ceci pour filtrer les comptes"
+
+#: kmymoneyutils.cpp:192
+msgid "Preferred accounts"
+msgstr "Comptes Favoris"
+
+#: kmymoneyutils.cpp:193
+msgid "Payment accounts"
+msgstr "Comptes de paiement"
+
+#: kmymoneyutils.cpp:194
+msgid "Favorite reports"
+msgstr "Rapports favoris"
+
+#: kmymoneyutils.cpp:195
+msgid "Forecast (schedule)"
+msgstr "Prévisions (échéance)"
+
+#: kmymoneyutils.cpp:196
+msgid "Networth forecast"
+msgstr "Valeur nette prévisionnelle"
+
+#: kmymoneyutils.cpp:197
+msgid "Forecast (history)"
+msgstr "Prévisions (historique)"
+
+#: kmymoneyutils.cpp:198
+msgid "Assets and Liabilities"
+msgstr "Actif et Passif"
+
+#: kmymoneyutils.cpp:199 reports/pivottable.cpp:2416 views/khomeview.cpp:1393
+#: widgets/rc.cpp:70
+msgid "Budget"
+msgstr "Budget"
+
+#: kmymoneyutils.cpp:200
+msgid "CashFlow"
+msgstr "Flux de trésorerie"
+
+#: dialogs/kenterscheduledlg.cpp:153 kmymoneyutils.cpp:366
+msgid "Unable to load schedule details"
+msgstr "Impossible de charger les détails de l'échéance"
+
+#: kmymoneyutils.cpp:390 widgets/register.cpp:473
+msgid ""
+"_: Reconcile state 'Not reconciled'\n"
+"Not reconciled"
+msgstr "Non rapproché"
+
+#: kmymoneyutils.cpp:393 widgets/register.cpp:476
+msgid ""
+"_: Reconcile state 'Cleared'\n"
+"Cleared"
+msgstr "Pointé"
+
+#: kmymoneyutils.cpp:396 widgets/register.cpp:479
+msgid ""
+"_: Reconcile state 'Reconciled'\n"
+"Reconciled"
+msgstr "Rapproché"
+
+#: kmymoneyutils.cpp:399 widgets/register.cpp:482
+msgid ""
+"_: Reconcile state 'Frozen'\n"
+"Frozen"
+msgstr "Figé"
+
+#: kmymoneyutils.cpp:410
+msgid ""
+"_: Reconcile flag C\n"
+"C"
+msgstr "P"
+
+#: kmymoneyutils.cpp:413
+msgid ""
+"_: Reconcile flag R\n"
+"R"
+msgstr "R"
+
+#: kmymoneyutils.cpp:416
+msgid ""
+"_: Reconcile flag F\n"
+"F"
+msgstr "F"
+
+#: kmymoneyutils.cpp:419
+msgid ""
+"_: Flag for unknown reconciliation state\n"
+"?"
+msgstr "?"
+
+#: _tips.cpp:3
+msgid ""
+"<p>...that you can change the sort order of ledger entries by\n"
+"right-clicking the header of the ledger view?\n"
+msgstr ""
+"<p>... que vous pouvez changer l'ordre d'affichage du registre en effectuant "
+"un clic droit sur l'en-tête du registre ?\n"
+
+#: _tips.cpp:9
+msgid ""
+"<p>...that you can easily move to the other side of a transfer transaction\n"
+"by opening the context menu with the right mouse button and selecting one of "
+"the\n"
+"'Goto' functions?\n"
+msgstr ""
+"<p>... que vous pouvez facilement vous déplacer vers l'autre côté d'une "
+"opération de virement en ouvrant le menu contextuel avec le bouton droit de "
+"la souris et en sélectionnant la fonction 'Aller à ...' ?\n"
+
+#: _tips.cpp:16
+msgid ""
+"<p>...that you can start editing a transaction by double-clicking on the\n"
+"transaction in the register?\n"
+msgstr ""
+"<p>... que vous pouvez éditer une opération en faisant un double-clic sur "
+"l'opération dans le registre ?\n"
+
+#: _tips.cpp:22
+msgid ""
+"<p>...that you can show more details of the selected transaction in the\n"
+"register by selecting the 'ledger lens' feature in the settings dialog?\n"
+msgstr ""
+"<p>... que vous pouvez afficher plus de détails sur l'opération sélectionnée "
+"dans le registre en choisissant l'option 'loupe de registre' dans le fenêtre "
+"de configuration ?\n"
+
+#: _tips.cpp:28
+msgid ""
+"<p>...that transactions with no category assigned or split\n"
+"transactions with unassigned values are marked with an exclamation mark \n"
+"on a yellow triangle in the register?\n"
+msgstr ""
+"<p>... que les opérations que vous n'avez pas rangées dans une catégorie, ou "
+"les opérations réparties avec des valeurs non allouées sont marquées avec un "
+"point d'exclamation dans un triangle jaune dans le registre ?\n"
+
+#: _tips.cpp:35
+msgid ""
+"<p>...that you can show all details of the transactions in the register\n"
+"by typing &lt;Ctrl-T&gt; or selecting the 'Settings/Show Transaction "
+"Detail'\n"
+"menu entry? You can turn this feature off the same way.\n"
+msgstr ""
+"<p>... que vous pouvez voir tous les détails des opérations dans le registre "
+"en tapant &lt;Ctrl-T&gt; ou en sélectionnant le menu 'Configuration / "
+"Afficher le détail de l'opération' ?\n"
+"Vous pouvez désactiver cette fonction de la même façon.\n"
+
+#: _tips.cpp:42
+msgid ""
+"<p>...that you can switch between a listing of all accounts or\n"
+"an icon view of all asset and liability accounts with the tabs\n"
+"in the accounts view?\n"
+msgstr ""
+"<p>... que vous pouvez choisir entre une liste de tous les comptes ou une "
+"vue des icônes des comptes d'actif et de passif avec les onglets dans "
+"l'affichage des comptes ?\n"
+
+#: _tips.cpp:49
+msgid "<p>...that the KMyMoney development team wishes you a nice day?\n"
+msgstr ""
+"<p>... que l'équipe de développement de KMyMoney vous souhaite une bonne "
+"journée ?\n"
+
+#: _tips.cpp:54
+msgid ""
+"<p>...you can use your own external filter program to convert any\n"
+"import format to QIF on the fly? See the QIF profile editor for\n"
+"more details.\n"
+msgstr ""
+"<p>... que vous pouvez utiliser votre propre programme de filtre pour "
+"convertir n'importe quel format d'importation en QIF à la volée ? Voyez "
+"l'éditeur de profil QIF pour davantage de détails.\n"
+
+#: _tips.cpp:61
+msgid ""
+"<p>...that you can create a scheduled transaction from an existing\n"
+"one by selecting the context menu on a transaction in the ledger\n"
+"or the \"More...\"-menu in the transaction form?\n"
+msgstr ""
+"<p>... que vous pouvez créer une échéance à partir d'une opération existante "
+"en utilisant le menu contextuel sur une opération du registre, ou avec le "
+"menu \"Plus ...\" du formulaire de l'opération ?\n"
+
+#: _tips.cpp:68
+msgid ""
+"<p>...that you can switch to the payee of a transaction\n"
+"by selecting the context menu on a transaction in the ledger\n"
+"or in the transaction menu?\n"
+msgstr ""
+"<p>... que vous pouvez changer le tiers d'une opération\n"
+"en utilisant le menu contextuel sur cette opération dans le registre\n"
+"ou dans le menu Opération ?\n"
+
+#: _tips.cpp:75
+msgid ""
+"<p>...that you can modify the colors and fonts used for the ledgers\n"
+"via <i>Configure/Register/...</i>?\n"
+msgstr ""
+"<p>... que vous pouvez modifier les couleurs et les polices utilisées dans "
+"le registre via <i>Configuration/Configurer KMyMoney/Registre</i> ?\n"
+
+#: _tips.cpp:81
+msgid ""
+"<p>...that you can hide transactions prior to a specific date?\n"
+"The date can be modified via <i>Configure/Register/Filter</i>.\n"
+msgstr ""
+"<p>... que vous pouvez masquer les opérations antérieures à une date "
+"précise ? La date peut être changée via <i>Configuration/Configurer KMyMoney/"
+"Registre/Filtre</i>.\n"
+
+#: _tips.cpp:87
+msgid ""
+"<p>...that you can customize the \"Home-Page\"\n"
+"via <i>Configure/Home</i>?\n"
+msgstr ""
+"<p>... que vous pouvez personnaliser la \"page d'accueil\" via "
+"<i>Configuration/Configurer KMyMoney/Accueil</i> ?\n"
+
+#: _tips.cpp:93
+msgid ""
+"<p>...that you can enter new transactions even while reconciling\n"
+"an account? You can also make the transaction form visible.\n"
+msgstr ""
+"<p>... que vous pouvez saisir de nouvelles opérations pendant que vous "
+"rapprochez un compte ? Vous pouvez aussi afficher le formulaire "
+"d'opération.\n"
+
+#: _tips.cpp:99
+msgid ""
+"<p>...that you can actively support the KMyMoney development team in\n"
+"cases that heavily depend on your data? You can save your data in an\n"
+"anonymized way for this support.<p>\n"
+"Just open your data file and immediately\n"
+"select <b>File/Save as...</b>. In the <b>Save As...</b> dialog\n"
+"select the filter <b>Anonymous Files</b> and make sure your file gets\n"
+"the extensions <b>.anon.xml</b>. <p>\n"
+"To verify, how the data looks like you are about to send away, you can open\n"
+"this file in KMyMoney and see how the developers see your data.\n"
+msgstr ""
+"<p>... vous pouvez activement soutenir l'équipe de développement de "
+"KMyMoney\n"
+" pour les cas qui dépendent fortement de vos données ? Vous pouvez sauver "
+"vos données\n"
+" d'une manière anonyme pour ce soutien.<p> Ouvrez juste vos fichiers de "
+"données puis immédiatement après\n"
+"sélectionnez <b>Fichier/Sauvegarder sous ...</b>. Dans la boîte de dialogue "
+"<b>Sauvegarder sous ...</b>,\n"
+"choisissez le filtre <b>Fichiers anonymes</b> et vérifier que votre fichier "
+"possède\n"
+"l'extension <b>.anon.xml</b>. <p>\n"
+"Pour vérifier comment les données apparaissent avant de les envoyer, vous "
+"pouvez ouvrir \n"
+"ce fichier dans KMyMoney et voir comment les développeurs verront vos "
+"données.\n"
+
+#: _tips.cpp:112
+msgid ""
+"<p>... that you can import your bank statements even without a network \n"
+"connection? Just select the file (OFX or QIF) from the File->Import menu.</"
+"p>\n"
+"<p>Provided by Jose Jorge</p>\n"
+msgstr ""
+"<p>... que vous pouvez importer vos relevés de banque même sans une une "
+"connexion \n"
+"réseau ? Sélectionnez seulement le fichier (OFX ou QIF) dans le menu "
+"Fichier->Importer.</p>\n"
+"<p>Fourni par Jose Jorge</p>\n"
+
+#: reports/listtable.cpp:159 reports/listtable.cpp:163
+#: reports/pivottable.cpp:1564
+msgid ""
+"_: Report date range\n"
+"%1 through %2"
+msgstr "%1 jusqu'à %2"
+
+#: reports/listtable.cpp:171 reports/pivottable.cpp:1571
+#, c-format
+msgid "All currencies converted to %1"
+msgstr "Toutes les devises converties en %1"
+
+#: reports/listtable.cpp:172 reports/pivottable.cpp:1328
+msgid "All currencies converted to %1\n"
+msgstr "Toutes les devises converties en %1\n"
+
+#: reports/listtable.cpp:176 reports/pivottable.cpp:1573
+msgid "All values shown in %1 unless otherwise noted"
+msgstr "Toutes les valeurs affichées dans %1 sauf cas contraire"
+
+#: reports/listtable.cpp:177 reports/pivottable.cpp:1330
+msgid "All values shown in %1 unless otherwise noted\n"
+msgstr "Toutes les valeurs affichées dans %1 sauf cas contraire\n"
+
+#: dialogs/kequitypriceupdatedlg.cpp:73 dialogs/kfindtransactiondlg.cpp:188
+#: dialogs/rc.cpp:53 dialogs/rc.cpp:63 dialogs/rc.cpp:208 dialogs/rc.cpp:805
+#: dialogs/settings/rc.cpp:111 dialogs/transactioneditor.cpp:844
+#: reports/listtable.cpp:196 views/khomeview.cpp:412 views/khomeview.cpp:485
+#: views/khomeview.cpp:519 views/rc.cpp:61 widgets/kmymoneypriceview.cpp:128
+#: widgets/rc.cpp:36 widgets/register.cpp:565 widgets/transaction.cpp:1027
+#: widgets/transaction.cpp:1484
+msgid "Date"
+msgstr "Date"
+
+#: reports/listtable.cpp:198
+msgid "Num"
+msgstr "Numéro"
+
+#: dialogs/kfindtransactiondlg.cpp:204 dialogs/kmymoneysplittable.cpp:78
+#: dialogs/kmymoneysplittable.cpp:831 dialogs/rc.cpp:217
+#: dialogs/transactioneditor.cpp:831 dialogs/transactioneditor.cpp:1374
+#: dialogs/transactioneditor.cpp:1382 dialogs/transactioneditor.cpp:1396
+#: dialogs/transactioneditor.cpp:1449 dialogs/transactioneditor.cpp:1456
+#: dialogs/transactioneditor.cpp:1504 reports/listtable.cpp:200
+#: views/kcategoriesview.cpp:76 views/rc.cpp:62 widgets/rc.cpp:115
+#: widgets/register.cpp:62 widgets/transaction.cpp:848
+#: widgets/transaction.cpp:906
+msgid "Category"
+msgstr "Catégorie"
+
+#: dialogs/kmymoneysplittable.cpp:79 dialogs/kmymoneysplittable.cpp:837
+#: reports/listtable.cpp:202 widgets/rc.cpp:101 widgets/transaction.cpp:1042
+#: widgets/transaction.cpp:1628
+msgid "Memo"
+msgstr "Note"
+
+#: reports/listtable.cpp:203
+msgid "Top Category"
+msgstr "Catégorie Principale"
+
+#: reports/listtable.cpp:204
+msgid "Category Type"
+msgstr "Type de Catégorie"
+
+#: dialogs/rc.cpp:229 dialogs/settings/rc.cpp:152 reports/listtable.cpp:207
+#: widgets/kmymoneycombo.cpp:346 widgets/rc.cpp:107
+msgid "Reconciled"
+msgstr "Rapproché"
+
+#: reports/listtable.cpp:208 widgets/rc.cpp:117
+msgid "Action"
+msgstr "Action"
+
+#: dialogs/investactivities.cpp:199 dialogs/investactivities.cpp:287
+#: dialogs/investactivities.cpp:424 dialogs/investactivities.cpp:504
+#: dialogs/investactivities.cpp:544 dialogs/investtransactioneditor.cpp:241
+#: reports/listtable.cpp:209 widgets/rc.cpp:103 widgets/transaction.cpp:1513
+msgid "Shares"
+msgstr "Nombre de titres"
+
+#: dialogs/investtransactioneditor.cpp:248
+#: dialogs/investtransactioneditor.cpp:1067
+#: dialogs/investtransactioneditor.cpp:1068
+#: dialogs/investtransactioneditor.cpp:1072
+#: dialogs/kequitypriceupdatedlg.cpp:72 dialogs/rc.cpp:109 dialogs/rc.cpp:164
+#: dialogs/rc.cpp:251 dialogs/rc.cpp:756 dialogs/rc.cpp:827
+#: dialogs/settings/rc.cpp:117 reports/listtable.cpp:210
+#: reports/listtable.cpp:211 reports/pivottable.cpp:2441
+#: views/kinvestmentview.cpp:80 widgets/kmymoneypriceview.cpp:129
+#: widgets/rc.cpp:43 widgets/rc.cpp:105 widgets/register.cpp:573
+msgid "Price"
+msgstr "Cours"
+
+#: reports/listtable.cpp:212
+msgid "Net Value"
+msgstr "Valeur nette"
+
+#: reports/listtable.cpp:213
+msgid "Buys"
+msgstr "Achats"
+
+#: reports/listtable.cpp:214
+msgid "Sells"
+msgstr "Ventes"
+
+#: reports/listtable.cpp:215
+msgid "Dividends Reinvested"
+msgstr "Dividendes Réinvestis"
+
+#: reports/listtable.cpp:216
+msgid "Dividends Paid Out"
+msgstr "Dividendes Payés"
+
+#: reports/listtable.cpp:217
+msgid "Starting Balance"
+msgstr "Solde d'ouverture"
+
+#: reports/listtable.cpp:218
+msgid "Ending Balance"
+msgstr "Solde de Clôture"
+
+#: reports/listtable.cpp:219
+msgid "Annualized Return"
+msgstr "Rémunération annualisée"
+
+#: reports/listtable.cpp:220
+msgid "Return On Investment"
+msgstr "Retour sur investissement"
+
+#: dialogs/rc.cpp:106 dialogs/rc.cpp:161 dialogs/rc.cpp:248 dialogs/rc.cpp:505
+#: dialogs/rc.cpp:570 dialogs/rc.cpp:667 dialogs/rc.cpp:753
+#: reports/listtable.cpp:223 widgets/register.cpp:570
+msgid "Payment"
+msgstr "Paiement"
+
+#: dialogs/rc.cpp:111 dialogs/rc.cpp:166 dialogs/rc.cpp:253 dialogs/rc.cpp:709
+#: dialogs/rc.cpp:758 reports/listtable.cpp:224 widgets/rc.cpp:119
+#: widgets/register.cpp:575
+msgid "Balance"
+msgstr "Solde"
+
+#: reports/listtable.cpp:227 views/kscheduledview.cpp:74
+msgid "Next Due Date"
+msgstr "Prochaine échéance"
+
+#: reports/listtable.cpp:229 views/kscheduledview.cpp:76
+msgid "Payment Method"
+msgstr "Moyen de paiement"
+
+#: dialogs/rc.cpp:803 reports/listtable.cpp:231 widgets/rc.cpp:2
+msgid "Description"
+msgstr "Description"
+
+#: reports/listtable.cpp:232
+msgid "Opening Date"
+msgstr "Date d'ouverture"
+
+#: reports/listtable.cpp:234
+msgid "Balance Early Warning"
+msgstr "Première alerte du solde"
+
+#: reports/listtable.cpp:235
+msgid "Balance Max Limit"
+msgstr "Limite maximum du solde"
+
+#: reports/listtable.cpp:236
+msgid "Credit Early Warning"
+msgstr "Première alerte du crédit"
+
+#: reports/listtable.cpp:237
+msgid "Credit Max Limit"
+msgstr "Limite maximum du crédit"
+
+#: dialogs/rc.cpp:376 reports/listtable.cpp:238
+msgid "Tax"
+msgstr "Taxe"
+
+#: reports/listtable.cpp:239
+msgid "Preferred"
+msgstr "Favori"
+
+#: reports/listtable.cpp:240
+msgid "Loan Amount"
+msgstr "Montant du prêt"
+
+#: dialogs/rc.cpp:511 reports/listtable.cpp:241
+msgid "Interest Rate"
+msgstr "Taux d'intérêt"
+
+#: reports/listtable.cpp:242
+msgid "Next Interest Change"
+msgstr "Prochain changement du taux d'intérêt"
+
+#: reports/listtable.cpp:243
+msgid "Periodic Payment"
+msgstr "Paiement périodique"
+
+#: reports/listtable.cpp:244
+msgid "Final Payment"
+msgstr "Dernier paiement"
+
+#: reports/listtable.cpp:245 views/khomeview.cpp:766 views/khomeview.cpp:1265
+#: views/khomeview.cpp:1273
+msgid "Current Balance"
+msgstr "Solde courant"
+
+#: dialogs/investactivities.cpp:201 dialogs/investactivities.cpp:289
+#: dialogs/investactivities.cpp:368 dialogs/investactivities.cpp:426
+#: dialogs/rc.cpp:327 reports/listtable.cpp:360 reports/listtable.cpp:364
+#: reports/listtable.cpp:556 reports/listtable.cpp:558
+#: reports/pivottable.cpp:1343 reports/pivottable.cpp:1445
+#: reports/pivottable.cpp:1505 reports/pivottable.cpp:1598
+#: reports/pivottable.cpp:1768 reports/pivottable.cpp:1845
+#: reports/pivottable.cpp:2165 reports/pivottable.cpp:2167
+#: reports/pivottable.cpp:2187 reports/pivottable.cpp:2189
+#: reports/querytabletest.cpp:134 reports/querytabletest.cpp:135
+#: reports/querytabletest.cpp:136 reports/querytabletest.cpp:137
+#: reports/querytabletest.cpp:162 reports/querytabletest.cpp:163
+#: reports/querytabletest.cpp:164 reports/querytabletest.cpp:197
+#: reports/querytabletest.cpp:198 reports/querytabletest.cpp:224
+#: reports/querytabletest.cpp:250 reports/querytabletest.cpp:251
+#: reports/querytabletest.cpp:252 reports/querytabletest.cpp:275
+#: reports/querytabletest.cpp:276 reports/querytabletest.cpp:277
+#: reports/querytabletest.cpp:366 reports/querytabletest.cpp:422
+#: reports/querytabletest.cpp:423 views/kforecastview.cpp:568 views/rc.cpp:18
+#: widgets/kmymoneyaccounttreeforecast.cpp:139 widgets/transaction.cpp:1643
+msgid "Total"
+msgstr "Total"
+
+#: reports/listtable.cpp:444
+msgid "Initial Market Value"
+msgstr "Valeur initiale du marché"
+
+#: reports/listtable.cpp:445
+msgid "Ending Market Value"
+msgstr "Valeur finale du marché"
+
+#: reports/listtable.cpp:448 reports/querytabletest.cpp:651
+msgid "Opening Balance"
+msgstr "Solde d'ouverture"
+
+#: reports/listtable.cpp:449 reports/querytabletest.cpp:652
+#: reports/querytabletest.cpp:653
+msgid "Closing Balance"
+msgstr "Solde de clôture"
+
+#: reports/listtable.cpp:490 reports/listtable.cpp:491
+msgid "Calculated"
+msgstr "Calculé"
+
+#: reports/listtable.cpp:572 reports/listtable.cpp:574
+#: reports/pivottable.cpp:1530 reports/pivottable.cpp:1886
+#: reports/querytabletest.cpp:138 reports/querytabletest.cpp:165
+#: reports/querytabletest.cpp:199 reports/querytabletest.cpp:225
+#: reports/querytabletest.cpp:253 reports/querytabletest.cpp:278
+#: reports/querytabletest.cpp:367 reports/querytabletest.cpp:402
+#: reports/querytabletest.cpp:424 reports/querytabletest.cpp:548
+#: reports/querytabletest.cpp:551 reports/querytabletest.cpp:586
+msgid "Grand Total"
+msgstr "Grand Total"
+
+#: dialogs/rc.cpp:233 reports/pivottable.cpp:339 views/kscheduledview.cpp:174
+#: views/kscheduledview.cpp:433 views/kscheduledview.cpp:449
+#: widgets/kmymoneyscheduledcalendar.cpp:48
+msgid "Transfers"
+msgstr "Virements"
+
+#: reports/pivottable.cpp:1951
+msgid "Legend"
+msgstr "Légende"
+
+#: reports/pivottable.cpp:2411 views/khomeview.cpp:1406
+#: views/khomeview.cpp:1443
+msgid "Actual"
+msgstr "Actuel"
+
+#: reports/pivottable.cpp:2421 views/khomeview.cpp:1409
+#: views/khomeview.cpp:1446
+msgid "Difference"
+msgstr "Différence"
+
+#: reports/pivottable.cpp:2431
+msgid "Moving Average"
+msgstr "Moyenne glissante"
+
+#: reports/pivottable.cpp:2436
+msgid "Moving Average Price"
+msgstr "Moyenne glissante du prix"
+
+#: reports/objectinfotable.cpp:214 reports/querytable.cpp:693
+#: reports/querytable.cpp:736 reports/querytable.cpp:1356
+#: reports/querytable.cpp:1375 views/kpayeesview.cpp:742
+#, c-format
+msgid "Transfer from %1"
+msgstr "Effectuer un virement depuis %1"
+
+#: reports/objectinfotable.cpp:215 reports/querytable.cpp:694
+#: reports/querytable.cpp:735 reports/querytable.cpp:1355
+#: reports/querytable.cpp:1374 views/kpayeesview.cpp:740
+#, c-format
+msgid "Transfer to %1"
+msgstr "Effectuer un virement vers %1"
+
+#: reports/querytabletest.cpp:471 views/kreportsview.cpp:1144
+msgid "Investment Transactions"
+msgstr "Opérations d'investissement"
+
+#: reports/querytabletest.cpp:472 reports/querytabletest.cpp:564
+msgid "Test Report"
+msgstr "Tester le Rapport"
+
+#: reports/querytabletest.cpp:547 reports/querytabletest.cpp:550
+msgid "Total Stock 1"
+msgstr "Total Action 1"
+
+#: reports/querytabletest.cpp:563 views/kreportsview.cpp:1174
+msgid "Investment Performance by Account"
+msgstr "Performance de l'investissement par Compte"
+
+#: reports/querytable.cpp:431 reports/querytable.cpp:1200
+#, c-format
+msgid "Month of %1"
+msgstr "Mois de %1"
+
+#: reports/querytable.cpp:432 reports/querytable.cpp:1201
+#, c-format
+msgid "Week of %1"
+msgstr "Semaine %1"
+
+#: reports/querytable.cpp:576 reports/querytable.cpp:739
+#: reports/querytable.cpp:858 reports/querytable.cpp:1325
+#: reports/querytable.cpp:1481
+msgid "No Institution"
+msgstr "Pas d'établissement"
+
+#: reports/querytable.cpp:580 reports/querytable.cpp:1329
+msgid "[Empty Payee]"
+msgstr "[Tiers vide]"
+
+#: reports/querytable.cpp:615 reports/querytable.cpp:1361
+msgid "[Split Transaction]"
+msgstr "[Opération répartie]"
+
+#: reports/querytable.cpp:616 reports/querytable.cpp:617
+msgid "Split"
+msgstr "Répartir"
+
+#: main.cpp:51
+msgid ""
+"\n"
+"KMyMoney, the Personal Finance Manager for KDE.\n"
+"\n"
+"Please consider contributing to this project with code and/or suggestions."
+msgstr ""
+"\n"
+"KMyMoney, le Gestionnaire de Finances Personnelles pour KDE.\n"
+"\n"
+"Vous pouvez contribuer au projet en programmant et / ou en faisant des "
+"suggestions."
+
+#: main.cpp:55
+msgid "language to be used"
+msgstr "langue à utiliser"
+
+#: main.cpp:56
+msgid "don't open last used file"
+msgstr "ne pas ouvrir le dernier fichier utilisé"
+
+#: main.cpp:57
+msgid "enable performance timers"
+msgstr "autorise les temporisateurs d'exécution"
+
+#: main.cpp:61
+msgid "turn on program traces"
+msgstr "activation des traces du programme"
+
+#: main.cpp:62
+msgid "dump the names of all defined KAction objects to stdout and quit"
+msgstr ""
+"copier les noms de tous les objets définis KAction sur stdout et quitter"
+
+#: main.cpp:66
+msgid "file to open"
+msgstr "fichier à ouvrir"
+
+#: main.cpp:92
+msgid "Memory leakage detection"
+msgstr "Détection d'une fuite mémoire"
+
+#: main.cpp:96
+msgid "Compiled with the following settings:\n"
+msgstr "Compilé avec les paramètres suivants :\n"
+
+#: dialogs/kmymoneysplittable.cpp:650 dialogs/ksplittransactiondlg.cpp:277
+#: main.cpp:98
+msgid "KMyMoney"
+msgstr "KMyMoney"
+
+#: main.cpp:104
+msgid "Initial idea, much initial source code, Project admin"
+msgstr ""
+"Idée initiale, beaucoup de code source initial, administrateur du projet"
+
+#: main.cpp:105
+msgid "Core engine, Release Manager, Project admin"
+msgstr "Moteur du noyau, Gestionnaire des versions, administrateur du projet"
+
+#: main.cpp:106
+msgid "Reporting logic, OFX Import"
+msgstr "Logique des rapports, Importation OFX"
+
+#: main.cpp:107
+msgid "Database backend, maintainer stable branch"
+msgstr "Base de données, branche stable maintenue"
+
+#: main.cpp:108
+msgid "Forecast, Reports"
+msgstr "Prévisions, Rapports"
+
+#: main.cpp:109
+msgid "Project Admin"
+msgstr "Administrateur du Projet"
+
+#: main.cpp:110
+msgid "Developer"
+msgstr "Développeur"
+
+#: main.cpp:111
+msgid "Database backend"
+msgstr "Base de données"
+
+#: main.cpp:113
+msgid "Initial investment support"
+msgstr "Support d'investissement initial"
+
+#: main.cpp:114
+msgid "Developer & Artist"
+msgstr "Développeur et artiste"
+
+#: main.cpp:115
+msgid "Icons & splash screen"
+msgstr "Icônes et écran d'accueil"
+
+#: main.cpp:116 main.cpp:117
+msgid "Patches"
+msgstr "Patches"
+
+#: main.cpp:136
+msgid ""
+"The monetary decimal symbol is not correctly set in the KDE Control Center's "
+"Country/Region & Language settings. Please set it to a reasonable value and "
+"start KMyMoney again."
+msgstr ""
+"Le symbole décimal monétaire n'est pas correctement défini dans le centre de "
+"commande de KDE pour pour les paramètres du pays/région et langue. Mettez à "
+"jour ces valeurs et redémarrez KMyMoney."
+
+#: main.cpp:136
+msgid "Invalid settings"
+msgstr "Paramètres invalides"
+
+#: main.cpp:228
+msgid "Another instance of KMyMoney is already running. Do you want to quit?"
+msgstr "KMyMoney est déjà en cours d'utilisation. Voulez-vous quitter ?"
+
+#: main.cpp:289
+msgid "Uncaught error. Please report the details to the developers"
+msgstr "Erreur non captée.Merci de rapporter les détails aux développeurs"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Patrick Petit, Stéphane Deraco"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "patrick.petit17@orange.fr, steph.dev@gmail.com"
+
+#: dialogs/kcsvprogressdlg.cpp:62 dialogs/kimportdlg.cpp:66 rc.cpp:1
+msgid "&Import"
+msgstr "&Importer"
+
+#: rc.cpp:2
+msgid "E&xport"
+msgstr "E&xporter"
+
+#: rc.cpp:3
+msgid "&Institution"
+msgstr "É&tablissement"
+
+#: rc.cpp:4
+msgid "&Account"
+msgstr "&Compte"
+
+#: rc.cpp:5
+msgid "&Category"
+msgstr "&Catégorie"
+
+#: rc.cpp:6
+msgid "&Transaction"
+msgstr "Opéra&tion"
+
+#: rc.cpp:7 rc.cpp:20
+msgid "Mark transaction as..."
+msgstr "Marquer l'opération comme ..."
+
+#: rc.cpp:8 rc.cpp:21
+msgid "Mark transaction"
+msgstr "Marquer l'opération"
+
+#: rc.cpp:9
+msgid "T&ools"
+msgstr "&Outils"
+
+#: rc.cpp:10
+msgid "Account options"
+msgstr "Options du compte"
+
+#: rc.cpp:11
+msgid "Category options"
+msgstr "Options de la catégorie"
+
+#: rc.cpp:12
+msgid "Institution options"
+msgstr "Options de l'établissement"
+
+#: rc.cpp:13
+msgid "Payee options"
+msgstr "Options du tiers"
+
+#: rc.cpp:14
+msgid "Budget options"
+msgstr "Options du budget"
+
+#: rc.cpp:15
+msgid "Investment options"
+msgstr "Options d'investissement"
+
+#: rc.cpp:16
+msgid "Scheduled transactions options"
+msgstr "Options des échéances"
+
+#: rc.cpp:17
+msgid "Transaction options"
+msgstr "Options de l'opération"
+
+#: rc.cpp:18
+msgid "Move transaction to..."
+msgstr "Déplacement de l'opération vers ..."
+
+#: rc.cpp:19
+msgid "Select account"
+msgstr "Sélectionner le Compte"
+
+#: rc.cpp:22
+msgid "Currency options"
+msgstr "Options de la devise de base"
+
+#: rc.cpp:24
+msgid "Always show a No. field in transaction form"
+msgstr "Toujours afficher un champ N° dans le formulaire d'opération"
+
+#: rc.cpp:25
+msgid "Auto fill with previous transaction data"
+msgstr "Remplir automatiquement avec les données de l'opération précédente"
+
+#: rc.cpp:26
+msgid "Treat two transactions as identical, if amount differs less than"
+msgstr ""
+"Considérer les deux opérations comme identiques, si le montant diffère de "
+"moins de"
+
+#: dialogs/settings/rc.cpp:144 rc.cpp:27
+msgid "Auto increment check number"
+msgstr "Numéro de chèque incrémenté automatiquement"
+
+#: rc.cpp:28
+msgid "Autosave file periodically"
+msgstr "Sauvegarde du fichier automatique périodiquement"
+
+#: rc.cpp:29
+msgid "Autosave interval in minutes"
+msgstr "Intervalle de la sauvegarde automatique en minutes"
+
+#: rc.cpp:30
+msgid "Check schedules upon startup"
+msgstr "Vérifier les échéances au démarrage"
+
+#: dialogs/settings/rc.cpp:171 rc.cpp:31
+msgid "Enter transactions this number of days in advance"
+msgstr "Entrez les opérations ce nombre de jours à l'avance"
+
+#: dialogs/settings/rc.cpp:172 rc.cpp:32
+msgid "Number of days to preview schedules in ledger"
+msgstr "Nombre de jours pour l'aperçu des échéances dans le registre"
+
+#: dialogs/settings/rc.cpp:143 rc.cpp:33
+msgid "Insert transaction type into No. field for new transactions"
+msgstr ""
+"Insérer un type d'opération dans le champ N° pour les nouvelles opérations"
+
+#: dialogs/settings/rc.cpp:145 rc.cpp:34
+msgid "Keep changes when selecting a different transaction/split"
+msgstr ""
+"Garder les modifications lors de la sélection d'une opération ou répartition "
+"différente"
+
+#: rc.cpp:35
+msgid "Using the Enter key moves between the fields"
+msgstr "Utiliser la touche Entrée pour vous déplacer dans les champs"
+
+#: dialogs/settings/rc.cpp:130 rc.cpp:36
+msgid "Use the ledger lens"
+msgstr "Utiliser la loupe du registre"
+
+#: rc.cpp:37
+msgid "Price Precision"
+msgstr "Précision des valeurs : "
+
+#: dialogs/rc.cpp:65 rc.cpp:38
+msgid "Update price history"
+msgstr "Mise à jour de l'historique"
+
+#: dialogs/settings/rc.cpp:132 rc.cpp:39
+msgid "Show transaction form"
+msgstr "Afficher le formulaire de l'opération"
+
+#: rc.cpp:40
+msgid "Start with last selected view or homepage"
+msgstr "Démarrer avec la dernière page sélectionnée ou la page d'accueil"
+
+#: rc.cpp:41
+msgid "Use GPG to encrypt data file"
+msgstr "Utiliser GPG pour crypter le fichier de données"
+
+#: rc.cpp:42
+msgid "Also encrypt against recover key"
+msgstr "Chiffrer également avec la clé de récupération"
+
+#: rc.cpp:43
+msgid "GPG User ID (deprecated)"
+msgstr "ID Utilisateur GPG (obsolète)"
+
+#: rc.cpp:44
+msgid "GPG User ID"
+msgstr "ID Utilisateur GPG"
+
+#: rc.cpp:45
+msgid "Run in expert (accountant) mode"
+msgstr "Lancer en mode expert (comptable)"
+
+#: rc.cpp:46
+msgid "Show splash screen during startup"
+msgstr "Afficher la copie d'écran au démarrage"
+
+#: rc.cpp:47
+msgid "Synchronize account in ledger and investment view"
+msgstr "Synchronisation du compte dans les vues registre et investissement"
+
+#: rc.cpp:48
+msgid "Icon size for view selection"
+msgstr "Taille de l'icône dans le sélecteur des vues"
+
+#: rc.cpp:49
+msgid "list of hidden views"
+msgstr "liste des vues cachées"
+
+#: rc.cpp:50
+msgid "Firsttime switch to start new user wizard"
+msgstr "Premier lancement, basculement vers l'assistant nouvel utilisateur"
+
+#: rc.cpp:51
+msgid "Show title bar on each view"
+msgstr "Afficher la barre de titre dans chaque vue"
+
+#: rc.cpp:52
+msgid "Start string matches for e.g. payees at start of string"
+msgstr ""
+"Démarre la correspondance des chaines de caractères par exemple pour les "
+"tiers au début de la chaîne"
+
+#: rc.cpp:53
+msgid "Order of items on homepage"
+msgstr "Ordre des éléments sur la page d'accueil"
+
+#: rc.cpp:54
+msgid "Percentage of default font size used for home view HTML page"
+msgstr ""
+"Pourcentage de la taille de la police par défaut utilisé pour la page "
+"d'accueil en HTML"
+
+#: rc.cpp:55
+msgid "Remember (manually adjusted) font size in home view on program end."
+msgstr ""
+"Se rappeler la taille de la police (ajustée manuellement) dans la vue "
+"accueil à la fin du programme."
+
+#: rc.cpp:56
+msgid "Show account limit information on the Homepage"
+msgstr ""
+"Montrer les informations sur les limites des comptes dans la page d'accueil"
+
+#: rc.cpp:58
+msgid "Hide closed accounts"
+msgstr "Cacher les comptes fermés"
+
+#: rc.cpp:59
+msgid "Hide finished schedules"
+msgstr "Cacher les échéances terminées"
+
+#: rc.cpp:61
+msgid "Show all register entries in full detail"
+msgstr "Afficher toutes les lignes du registre avec tous les détails"
+
+#: dialogs/settings/rc.cpp:129 rc.cpp:62
+msgid "Show a grid in the register"
+msgstr "Afficher une grille dans le registre"
+
+#: rc.cpp:63
+msgid "Show fancy group markers"
+msgstr "Affiche les marqueurs fantaisies de groupe"
+
+#: rc.cpp:64
+msgid "Show fancy markers for previous and current fiscal year"
+msgstr ""
+"Afficher les marqueurs sympathiques pour les exercices précédents et en cours"
+
+#: rc.cpp:65
+msgid "Starting month of the fiscal year"
+msgstr "À partir du mois pour l'année fiscale"
+
+#: rc.cpp:66
+msgid "Starting day of the fiscal year"
+msgstr "Jour de début de l'année fiscale"
+
+#: rc.cpp:67
+msgid "Start date"
+msgstr "Date de début"
+
+#: dialogs/settings/rc.cpp:9 rc.cpp:68
+msgid "Use system colors"
+msgstr "Utiliser les couleurs du système"
+
+#: rc.cpp:69
+msgid "List color"
+msgstr "Liste des couleurs"
+
+#: rc.cpp:70
+msgid "List background color"
+msgstr "Liste des couleurs de fond"
+
+#: rc.cpp:71
+msgid "List grid color"
+msgstr "Liste des couleurs de la grille"
+
+#: rc.cpp:72
+msgid "Background color for imported transactions"
+msgstr "Couleur de fond pour les opérations importées"
+
+#: rc.cpp:73
+msgid "Background color for matched transactions"
+msgstr "Couleur de fond pour les opérations correspondantes"
+
+#: rc.cpp:74
+msgid "List color for erronous transactions"
+msgstr "Liste des couleurs pour les opérations erronées"
+
+#: rc.cpp:75
+msgid "List color for missing conversion rate"
+msgstr "Liste des couleurs pour le taux de conversion manquant"
+
+#: rc.cpp:76
+msgid "List color for negative values"
+msgstr "Liste des couleurs pour les valeurs négatives"
+
+#: rc.cpp:77
+msgid "Background color for group marker"
+msgstr "Couleur de fond pour le marqueur de groupe"
+
+#: rc.cpp:78
+msgid "Background color for required fields"
+msgstr "Couleur de fond pour les champs obligatoires"
+
+#: rc.cpp:79
+msgid "Use system font"
+msgstr "Utiliser les polices du système"
+
+#: dialogs/settings/rc.cpp:21 rc.cpp:80
+msgid "Cell font"
+msgstr "Police de la cellule"
+
+#: dialogs/settings/rc.cpp:22 rc.cpp:81
+msgid "Header font"
+msgstr "Police de l'entête"
+
+#: rc.cpp:82 rc.cpp:83
+msgid "Sort order of register in normal view"
+msgstr "Tri du registre dans la vue normale"
+
+#: rc.cpp:84
+msgid "Sort order of register in search dialog"
+msgstr "Tri du registre dans la fenêtre de recherche"
+
+#: rc.cpp:85
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation"
+msgstr ""
+"État de rapprochement par défaut pour les opérations saisies pendant le "
+"rapprochement"
+
+#: rc.cpp:86
+msgid "Number of days (plus/minus) to search for matching transactions"
+msgstr ""
+"Nombre de jours (plus ou moins) pour rechercher les opérations "
+"correspondantes"
+
+#: rc.cpp:87
+msgid "During import, ask for a new payee's default category"
+msgstr ""
+"Pendant l'importation, demande pour un nouveau tiers la catégorie par défaut"
+
+#: rc.cpp:88
+msgid "Method to calculate forecast"
+msgstr "Méthode de calcul des prévisions"
+
+#: rc.cpp:89
+msgid "Days to forecast"
+msgstr "Jours pour les prévisions"
+
+#: rc.cpp:90
+msgid "Days of normal account cycle"
+msgstr "Journées du cycle normal des comptes"
+
+#: rc.cpp:91
+msgid "Number of historic cycles to use in forecast"
+msgstr "Nombre de cycles d'historique à utiliser dans les prévisions"
+
+#: rc.cpp:92
+msgid "Day of month to start forecast"
+msgstr "Jour du mois pour commencer les prévisions"
+
+#: rc.cpp:93
+msgid "Method to calculate history-based forecast"
+msgstr "Méthode de calcul basée sur l'historique des prévisions"
+
+#: rc.cpp:94
+msgid "Skip opening date when fetching transactions"
+msgstr "Ignorer la date d'ouverture lors de la récupération des opérations"
+
+#: rc.cpp:95
+msgid "Include future transaction when using Schedule Forecast"
+msgstr ""
+"Inclure les opérations futures lors de l'utilisation des Prévisions avec "
+"échéances"
+
+#: rc.cpp:96
+msgid "Include scheduled transactions when using Schedule Forecast"
+msgstr ""
+"Inclure les Opérations avec échéance lors de l'utilisation des Prévisions "
+"avec échéances"
+
+#: rc.cpp:97
+msgid "additional names for cash account"
+msgstr "noms supplémentaires pour le compte de caisse"
+
+#: rc.cpp:98
+msgid "additional names for checking account"
+msgstr "noms supplémentaires pour le compte chèque"
+
+#: rc.cpp:99
+msgid "additional names for credit card account"
+msgstr "noms supplémentaires pour le compte de carte de crédit"
+
+#: rc.cpp:100
+msgid "additional names for asset account"
+msgstr "noms supplémentaires pour le compte d'actif"
+
+#: rc.cpp:101
+msgid "additional names for opening balance payee"
+msgstr "noms supplémentaires pour le solde d'ouverture du tiers"
+
+#: rc.cpp:102
+msgid "additional names for invoice accounts"
+msgstr "noms supplémentaires pour les comptes de facture"
+
+#: rc.cpp:103 widgets/rc.cpp:161 widgets/rc.cpp:163
+msgid "..."
+msgstr "..."
+
+#: views/kcategoriesview.cpp:276
+msgid "Profit: "
+msgstr "Profit :"
+
+#: views/kcategoriesview.cpp:278
+msgid "Loss: "
+msgstr "Déficit :"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:54
+#: dialogs/transactioneditor.cpp:605 views/kpayeesview.cpp:365
+#: widgets/kmymoneyonlinequoteconfig.cpp:54
+msgid "Accepts the entered data and stores it"
+msgstr "Acceptez l'information saisie et l'enregistrez"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:55 views/kpayeesview.cpp:366
+#: widgets/kmymoneyonlinequoteconfig.cpp:55
+msgid "Use this to accept the modified data."
+msgstr "Utilisez ce bouton pour accepter les modifications."
+
+#: views/kpayeesview.cpp:491
+msgid ""
+"A payee with the name '%1' already exists. It is not advisable to have "
+"multiple payees with the same identification name. Are you sure you would "
+"like to rename the payee?"
+msgstr ""
+"Un tiers avec le nom '%1' existe déjà. Il n'est pas admissible d'avoir "
+"plusieurs tiers avec le même nom d'identification. Êtes-vous sûr de vouloir "
+"renommer les tiers?"
+
+#: views/kpayeesview.cpp:518 views/kpayeesview.cpp:869
+msgid "Unable to modify payee"
+msgstr "Impossible de modifier le tiers"
+
+#: views/kpayeesview.cpp:564
+msgid "Do you want to save the changes for <b>%1</b>?"
+msgstr "Voulez-vous sauver les modifications pour '<b>%1'</b>?"
+
+#: views/kbudgetview.cpp:490 views/kpayeesview.cpp:565
+msgid "Save changes"
+msgstr "Sauver les modifications"
+
+#: views/kgloballedgerview.cpp:737 views/kpayeesview.cpp:662
+#: views/kpayeesview.cpp:753
+#, c-format
+msgid "Balance: %1"
+msgstr "Solde : %1"
+
+#: views/kpayeesview.cpp:725 views/kpayeesview.cpp:731
+#, c-format
+msgid "Amortization of %1"
+msgstr "Amortissement de %1"
+
+#: views/kpayeesview.cpp:727 views/kpayeesview.cpp:733
+#, c-format
+msgid "Payment to %1"
+msgstr "Paiement à %1"
+
+#: views/kpayeesview.cpp:736
+#, c-format
+msgid "Loan payment from %1"
+msgstr "Versement de prêt à partir de %1"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:123
+#: dialogs/kconfirmmanualenterdlg.cpp:133 views/kpayeesview.cpp:745
+#: widgets/kmymoneycategory.cpp:160 widgets/kmymoneycategory.cpp:166
+#: widgets/transaction.cpp:851 widgets/transaction.cpp:1397
+#: widgets/transaction.cpp:1411
+msgid ""
+"_: Split transaction (category replacement)\n"
+"Split transaction"
+msgstr "Opération répartie"
+
+#: views/kreportsview.cpp:262
+msgid ""
+"There was an error creating your report: \"%1\".\n"
+"Please report this error to the developer's list: kmymoney2-developer@lists."
+"sourceforge.net"
+msgstr ""
+"Il a eu une erreur critique pendant la création de votre rapport: \"%1\".\n"
+"S'il vous plaît, veuillez rapporter cette erreur aux développeurs à "
+"l'adresse suivante: kmymoney2-developer@lists.sourceforge.net"
+
+#: views/kreportsview.cpp:264
+msgid "Critical Error"
+msgstr "Erreur critique"
+
+#: views/kreportsview.cpp:268
+msgid "Unable to generate report"
+msgstr "Impossible de générer le rapport"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:125 views/kreportsview.cpp:286
+#: views/rc.cpp:53 widgets/rc.cpp:146
+msgid "Chart"
+msgstr "Diagramme"
+
+#: views/kreportsview.cpp:287 widgets/rc.cpp:147
+msgid "Show the chart version of this report"
+msgstr "Afficher la version diagramme de ce rapport"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:112 views/khomeview.cpp:900
+#: views/kreportsview.cpp:294 views/kreportsview.cpp:328
+msgid "Report"
+msgstr "Rapport"
+
+#: views/kreportsview.cpp:295
+msgid "Show the report version of this chart"
+msgstr "Montre la version rapport de ce diagramme"
+
+#: views/kmymoneyview.cpp:236 views/kreportsview.cpp:314
+#: views/kreportsview.cpp:326
+msgid "Reports"
+msgstr "Rapports"
+
+#: views/khomeview.cpp:902 views/kreportsview.cpp:329 widgets/rc.cpp:56
+msgid "Comment"
+msgstr "Commentaire"
+
+#: views/kreportsview.cpp:432
+msgid "Charts"
+msgstr "Diagrammes"
+
+#: views/khomeview.cpp:897 views/kreportsview.cpp:470
+msgid "Favorite Reports"
+msgstr "Rapports Favoris"
+
+#: views/kreportsview.cpp:486
+msgid "Old Customized Reports"
+msgstr "Anciens Rapports Personnalisés"
+
+#: views/kreportsview.cpp:579
+msgid "Include Stylesheet"
+msgstr "Inclure feuille de style"
+
+#: views/kreportsview.cpp:585
+msgid ""
+"_: CSV (Filefilter)\n"
+"CSV files"
+msgstr "Fichiers CSV"
+
+#: views/kreportsview.cpp:586
+msgid ""
+"_: HTML (Filefilter)\n"
+"HTML files"
+msgstr "Fichiers HTML"
+
+#: views/kreportsview.cpp:591
+msgid "Export as"
+msgstr "Exporter sous"
+
+#: views/kreportsview.cpp:619 views/kreportsview.cpp:660
+#: views/kreportsview.cpp:942 views/kreportsview.cpp:950
+#: views/kreportsview.cpp:958 views/kreportsview.cpp:968
+#: views/kreportsview.cpp:980 views/kreportsview.cpp:998
+#: views/kreportsview.cpp:1006 views/kreportsview.cpp:1014
+#: views/kreportsview.cpp:1022 views/kreportsview.cpp:1034
+#: views/kreportsview.cpp:1046 views/kreportsview.cpp:1056
+#: views/kreportsview.cpp:1070 views/kreportsview.cpp:1079
+#: views/kreportsview.cpp:1087 views/kreportsview.cpp:1095
+#: views/kreportsview.cpp:1103 views/kreportsview.cpp:1111
+#: views/kreportsview.cpp:1120 views/kreportsview.cpp:1132
+#: views/kreportsview.cpp:1145 views/kreportsview.cpp:1155
+#: views/kreportsview.cpp:1165 views/kreportsview.cpp:1175
+#: views/kreportsview.cpp:1185 views/kreportsview.cpp:1195
+#: views/kreportsview.cpp:1208 views/kreportsview.cpp:1222
+#: views/kreportsview.cpp:1239 views/kreportsview.cpp:1257
+#: views/kreportsview.cpp:1273 views/kreportsview.cpp:1295
+#: views/kreportsview.cpp:1304 views/kreportsview.cpp:1313
+#: views/kreportsview.cpp:1322 views/kreportsview.cpp:1336
+#: views/kreportsview.cpp:1347 views/kreportsview.cpp:1362
+#: views/kreportsview.cpp:1372 views/kreportsview.cpp:1383
+#: views/kreportsview.cpp:1393 views/kreportsview.cpp:1404
+#: views/kreportsview.cpp:1423 views/kreportsview.cpp:1432
+#: views/kreportsview.cpp:1444 views/kreportsview.cpp:1463
+#: views/kreportsview.cpp:1472 views/kreportsview.cpp:1481
+#: views/kreportsview.cpp:1490
+msgid "Default Report"
+msgstr "Rapport par Défaut"
+
+#: views/kreportsview.cpp:621 views/kreportsview.cpp:661
+msgid "Custom Report"
+msgstr "Rapport Personnalisé"
+
+#: views/kreportsview.cpp:622
+msgid " (Customized)"
+msgstr " (Personnalisé)"
+
+#: views/kreportsview.cpp:690
+msgid ""
+"Are you sure you want to delete report <b>%1</b>? There is no way to "
+"recover it!"
+msgstr ""
+"Êtes-vous sûre de vouloir supprimer le rapport <b>%1</b> ? Il n'y aura aucun "
+"moyen de le récupérer !"
+
+#: views/kreportsview.cpp:690 views/kreportsview.cpp:702
+msgid "Delete Report?"
+msgstr "Supprimer le rapport ?"
+
+#: views/kreportsview.cpp:702
+msgid "Sorry, <b>%1</b> is a default report. You may not delete it."
+msgstr ""
+"Désolé, <b>%1</b> est un rapport par défaut. Vous ne devez pas le supprimer."
+
+#: views/kreportsview.cpp:882
+msgid "&Open"
+msgstr "&Ouvrir"
+
+#: views/kreportsview.cpp:884
+msgid "&New report"
+msgstr "&Nouveau rapport"
+
+#: views/kreportsview.cpp:934
+msgid "Income and Expenses"
+msgstr "Recettes et dépenses"
+
+#: views/kreportsview.cpp:941
+msgid "Income and Expenses This Month"
+msgstr "Recettes et dépenses ce mois"
+
+#: views/kreportsview.cpp:949
+msgid "Income and Expenses This Year"
+msgstr "Recettes et dépenses cette année"
+
+#: views/kreportsview.cpp:957
+msgid "Income and Expenses By Year"
+msgstr "Recettes et dépenses par année"
+
+#: views/kreportsview.cpp:967
+msgid "Income and Expenses Graph"
+msgstr "Graphique des recettes et dépenses"
+
+#: views/kreportsview.cpp:979
+msgid "Income and Expenses Pie Chart"
+msgstr "Diagramme circulaire des recettes et dépenses"
+
+#: views/khomeview.cpp:1361 views/kreportsview.cpp:990
+msgid "Net Worth"
+msgstr "Valeur nette"
+
+#: views/kreportsview.cpp:997
+msgid "Net Worth By Month"
+msgstr "Valeur nette par mois"
+
+#: views/kreportsview.cpp:1005
+msgid "Net Worth Today"
+msgstr "Valeur nette aujourd'hui"
+
+#: views/kreportsview.cpp:1013
+msgid "Net Worth By Year"
+msgstr "Valeur nette par année"
+
+#: views/kreportsview.cpp:1021
+msgid "7-day Cash Flow Forecast"
+msgstr "Prévisions de trésorerie à 7 jours"
+
+#: views/kreportsview.cpp:1033
+msgid "Net Worth Graph"
+msgstr "Graphique de la valeur nette"
+
+#: views/kreportsview.cpp:1045
+msgid "Account Balances by Institution"
+msgstr "Soldes de compte par établissement"
+
+#: views/kreportsview.cpp:1055
+msgid "Account Balances by Type"
+msgstr "Soldes de compte par type"
+
+#: views/kreportsview.cpp:1069
+msgid "Transactions by Account"
+msgstr "Opérations par compte"
+
+#: views/kreportsview.cpp:1078
+msgid "Transactions by Category"
+msgstr "Opérations par catégorie"
+
+#: views/kreportsview.cpp:1086
+msgid "Transactions by Payee"
+msgstr "Opérations par tiers"
+
+#: views/kreportsview.cpp:1094
+msgid "Transactions by Month"
+msgstr "Opérations par mois"
+
+#: views/kreportsview.cpp:1102
+msgid "Transactions by Week"
+msgstr "Opérations par semaines"
+
+#: views/kreportsview.cpp:1110
+msgid "Loan Transactions"
+msgstr "Opérations de prêts"
+
+#: views/kreportsview.cpp:1119
+msgid "Transactions by Reconciliation Status"
+msgstr "Opérations par état de rapprochement"
+
+#: views/kreportsview.cpp:1125
+msgid "Cash Flow"
+msgstr "Flux de trésorerie"
+
+#: views/kreportsview.cpp:1131
+msgid "Cash Flow Transactions This Month"
+msgstr "Opérations du flux de trésorerie pour le mois"
+
+#: views/kmymoneyview.cpp:226 views/kmymoneyview.cpp:228
+#: views/kreportsview.cpp:1137
+msgid "Investments"
+msgstr "Investissements"
+
+#: views/kreportsview.cpp:1154
+msgid "Investment Holdings by Account"
+msgstr "Avoirs de l'investissement par compte"
+
+#: views/kreportsview.cpp:1164
+msgid "Investment Holdings by Type"
+msgstr "Avoirs de l'investissement par type"
+
+#: views/kreportsview.cpp:1184
+msgid "Investment Performance by Type"
+msgstr "Performance de l'investissement par type"
+
+#: views/kreportsview.cpp:1194
+msgid "Investment Holdings Pie"
+msgstr "Diagramme circulaire des avoirs d'investissement"
+
+#: views/kreportsview.cpp:1207
+msgid "Investment Worth Graph"
+msgstr "Graphique des valeurs d'investissement"
+
+#: views/kreportsview.cpp:1221
+msgid "Investment Price Graph"
+msgstr "Graphique de la valeur d'investissement"
+
+#: views/kreportsview.cpp:1238
+msgid "Investment Moving Average Price Graph"
+msgstr "Graphique de la moyenne glissante du prix de l'investissement"
+
+#: views/kreportsview.cpp:1256
+msgid "Investment Moving Average"
+msgstr "Moyenne glissante pour l'investissement"
+
+#: views/kreportsview.cpp:1272
+msgid "Investment Moving Average vs Actual"
+msgstr "Moyenne glissante pour l'investissement par rapport à l'état actuel"
+
+#: views/kreportsview.cpp:1287
+msgid "Taxes"
+msgstr "Impôts"
+
+#: views/kreportsview.cpp:1294
+msgid "Tax Transactions by Category"
+msgstr "Opérations de taxes par Catégorie"
+
+#: views/kreportsview.cpp:1303
+msgid "Tax Transactions by Payee"
+msgstr "Opérations de taxes par Tiers"
+
+#: views/kreportsview.cpp:1312
+msgid "Tax Transactions by Category Last Fiscal Year"
+msgstr "Opérations de taxes par Catégorie pour l'année fiscale précédente"
+
+#: views/kreportsview.cpp:1321
+msgid "Tax Transactions by Payee Last Fiscal Year"
+msgstr "Opérations de taxes par Tiers pour l'année fiscale précédente"
+
+#: views/kreportsview.cpp:1328
+msgid "Budgeting"
+msgstr "Budget"
+
+#: views/kreportsview.cpp:1335
+msgid "Budgeted vs. Actual This Year"
+msgstr "Budget par rapport à l'état actuel cette année"
+
+#: views/kreportsview.cpp:1346
+msgid "Budgeted vs. Actual This Year (YTM)"
+msgstr "Budget par rapport à l'état actuel cette année"
+
+#: views/khomeview.cpp:1383 views/kreportsview.cpp:1361
+msgid "Monthly Budgeted vs. Actual"
+msgstr "Budget mensuel par rapport à l'état actuel"
+
+#: views/kreportsview.cpp:1371
+msgid "Yearly Budgeted vs. Actual"
+msgstr "Budget annuel par rapport à l'état actuel"
+
+#: views/kreportsview.cpp:1382
+msgid "Monthly Budget"
+msgstr "Budget mensuel"
+
+#: views/kreportsview.cpp:1392
+msgid "Yearly Budget"
+msgstr "Budget annuel"
+
+#: views/kreportsview.cpp:1403
+msgid "Yearly Budgeted vs Actual Graph"
+msgstr "Graphique du budget annuel par rapport à l'état actuel"
+
+#: views/kreportsview.cpp:1422
+msgid "Forecast By Month"
+msgstr "Prévisions par mois"
+
+#: views/kreportsview.cpp:1431
+msgid "Forecast Next Quarter"
+msgstr "Prévision du prochain trimestre"
+
+#: views/kreportsview.cpp:1443
+msgid "Net Worth Forecast Graph"
+msgstr "Graphique des prévisions de la valeur nette"
+
+#: dialogs/rc.cpp:126 dialogs/rc.cpp:128 dialogs/rc.cpp:466
+#: views/kreportsview.cpp:1455
+msgid "General Information"
+msgstr "Informations générales"
+
+#: views/kreportsview.cpp:1462
+msgid "Schedule Information"
+msgstr "Informations sur les échéances"
+
+#: views/kreportsview.cpp:1471
+msgid "Schedule Summary Information"
+msgstr "Informations résumées sur les échéances"
+
+#: views/kreportsview.cpp:1480
+msgid "Account Information"
+msgstr "Informations sur les comptes"
+
+#: views/kreportsview.cpp:1489
+msgid "Loan Information"
+msgstr "Informations sur les prêts"
+
+#: dialogs/rc.cpp:323 views/kmymoneyview.cpp:148 views/kmymoneyview.cpp:150
+msgid "Institutions"
+msgstr "Établissements"
+
+#: dialogs/knewaccountdlg.cpp:98 views/kmymoneyview.cpp:162
+#: views/kmymoneyview.cpp:164 widgets/rc.cpp:4 widgets/rc.cpp:94
+msgid "Accounts"
+msgstr "Comptes"
+
+#: views/kmymoneyview.cpp:176
+msgid "Bills & Reminders"
+msgstr "Factures et rappels"
+
+#: views/kmymoneyview.cpp:178
+msgid "Scheduled transactions"
+msgstr "Echéances"
+
+#: dialogs/knewaccountdlg.cpp:98 dialogs/rc.cpp:193 views/kmymoneyview.cpp:188
+#: views/kmymoneyview.cpp:190 widgets/rc.cpp:91
+msgid "Categories"
+msgstr "Catégories"
+
+#: dialogs/kfindtransactiondlg.cpp:212 dialogs/rc.cpp:318
+#: views/kmymoneyview.cpp:199 views/kmymoneyview.cpp:201 widgets/rc.cpp:93
+msgid "Payees"
+msgstr "Tiers"
+
+#: views/kgloballedgerview.cpp:149 views/kmymoneyview.cpp:211
+msgid "Ledgers"
+msgstr "Registres"
+
+#: views/kmymoneyview.cpp:353
+msgid "Creating transactions can only be performed in the ledger view"
+msgstr "Créer des opérations peut être fait uniquement dans la vue registre"
+
+#: views/kmymoneyview.cpp:367
+msgid "Modifying transactions can only be performed in the ledger view"
+msgstr "Modifier des opérations peut être fait uniquement dans la vue registre"
+
+#: views/kmymoneyview.cpp:382
+msgid "Duplicating transactions can only be performed in the ledger view"
+msgstr ""
+"La duplication des opérations peut être fait uniquement dans la vue registre"
+
+#: views/kmymoneyview.cpp:394
+msgid "Edit the current selected transactions"
+msgstr "Éditer les opérations courantes sélectionnées"
+
+#: views/kmymoneyview.cpp:602
+msgid "<b>%1</b> is not a KMyMoney file."
+msgstr "<b>%1</b> n'est pas un fichier KMyMoney."
+
+#: views/kmymoneyview.cpp:643
+msgid "GPG is not available for decryption of file <b>%1</b>"
+msgstr "GPG n'est pas disponible pour le décryptage du fichier <b>'%1'</b>"
+
+#: views/kmymoneyview.cpp:721
+msgid ""
+"File <b>%1</b> contains the old binary format used by KMyMoney. Please use "
+"an older version of KMyMoney (0.8.x) that still supports this format to "
+"convert it to the new XML based format."
+msgstr ""
+"Le fichier <b>%1</b> contient l'ancien format binaire utilisé par KMyMoney. "
+"Merci d'utiliser une ancienne version de KMyMoney (0.8.x) qui supporte "
+"encore ce format pour le convertir dans le nouveau format basé XML."
+
+#: views/kmymoneyview.cpp:723
+msgid "File <b>%1</b> contains an unknown file format!"
+msgstr "Le fichier <b>%1</b> contient un format de fichier inconnu !"
+
+#: views/kmymoneyview.cpp:728
+msgid "Cannot read from file <b>%1</b>!"
+msgstr "Impossible de lire le fichier <b>%1</b> !"
+
+#: views/kmymoneyview.cpp:732
+msgid "Cannot load file <b>%1</b>. Reason: %2"
+msgstr "Impossible de charger le fichier <b>%1</b>. Raison: %2"
+
+#: views/kmymoneyview.cpp:742 views/kmymoneyview.cpp:748
+msgid "File <b>%1</b> not found!"
+msgstr "Impossible de trouver le Fichier <b>%1</b> !"
+
+#: views/kmymoneyview.cpp:812
+msgid "Can't open database %1\n"
+msgstr "Impossible d'ouvrir la base de données %1\n"
+
+#: views/kmymoneyview.cpp:844
+msgid "An unrecoverable error occurred while reading the database"
+msgstr ""
+"Une erreur non récupérable est arrivée pendant la lecture de la base de "
+"données"
+
+#: views/kmymoneyview.cpp:846 views/kmymoneyview.cpp:1208
+msgid "Database malfunction"
+msgstr "Défaut de fonctionnement de la base de données"
+
+#: views/kmymoneyview.cpp:938
+msgid "Unknown fix level in input file"
+msgstr "Niveau de difficulté inconnu dans le fichier de saisie"
+
+#: views/kmymoneyview.cpp:984
+msgid ""
+"GPG does not seem to be installed on your system. Please make sure, that GPG "
+"can be found using the standard search path. This time, encryption is "
+"disabled."
+msgstr ""
+"GPG ne semble pas être installé sur votre système. Veuillez vous assurer que "
+"GPG peut être trouvé en utilisant le chemin de recherche standard. Cette "
+"fois, le cryptage est inhibé."
+
+#: views/kmymoneyview.cpp:984
+msgid "GPG not found"
+msgstr "GPG non trouvé"
+
+#: views/kmymoneyview.cpp:991
+msgid ""
+"You have selected to encrypt your data also with the KMyMoney recover key, "
+"but the key with id</p><p><center><b>%1</b></center></p>has not been found "
+"in your keyring at this time. Please make sure to import this key into your "
+"keyring. You can find it on the <a href=\"http://kmymoney2.sourceforge.net/"
+"\">KMyMoney web-site</a>. This time your data will not be encrypted with the "
+"KMyMoney recover key."
+msgstr ""
+"Vous avez choisi de crypter vos données avec le système de récupération de "
+"clé KMyMoney, mais la clé avec l'identifiant </p><p><center><b>%1</b></"
+"center></p> n'a pas été trouvée dans votre porte-clés actuellement. Veuillez "
+"veiller à importer cette clé dans votre porte-clés. Vous pouvez la trouver "
+"sur le <a href=\"http://kmymoney2.sourceforge.net\">Site Web KMyMoney </a>. "
+"Cette fois, vos données ne seront pas cryptées avec le système de "
+"récupération de clé KMyMoney."
+
+#: views/kmymoneyview.cpp:991 views/kmymoneyview.cpp:1000
+msgid "GPG-Key not found"
+msgstr "Clé GPG non trouvée"
+
+#: views/kmymoneyview.cpp:1000
+msgid ""
+"You have specified to encrypt your data for the user-id</p><p><center><b>%1</"
+"b>.</center></p>Unfortunately, a valid key for this user-id was not found in "
+"your keyring. Please make sure to import a valid key for this user-id. This "
+"time, encryption is disabled."
+msgstr ""
+"Vous avez demandé de crypter vos données pour l'utilisateur</p><p><center><b>"
+"%1</b>.</center></p>Malheureusement, aucune clé valide pour cet utilisateur "
+"n'a été trouvée dans votre porte-clés. Veuillez veiller à importer une clef "
+"valide pour cet utilisateur. Cette fois, le chiffrage est désactivé."
+
+#: views/kmymoneyview.cpp:1006
+msgid ""
+"You have configured to save your data in encrypted form using GPG. Please be "
+"aware, that this is a brand new feature which is yet untested. Make sure, "
+"you have the necessary understanding that you might loose all your data if "
+"you store it encrypted and cannot decrypt it later on! If unsure, answer "
+"<b>No</b>."
+msgstr ""
+"Vous avez configuré pour sauvegarder vos données sous la forme cryptée en "
+"utilisant GPG. Soyez conscient que c'est un dispositif nouveau qui n'a pas "
+"encore été testé. Merci de prendre en compte le fait que vous pourriez "
+"perdre toutes vos données si vous les stockez en les chiffrant et que vous "
+"ne pourriez pas les décrypter plus tard ! Si vous êtes pas sûr, merci de "
+"répondre <b>Non</b>."
+
+#: views/kmymoneyview.cpp:1008
+msgid "Store GPG encrypted"
+msgstr "Stockage avec chiffrement GPG"
+
+#: views/kmymoneyview.cpp:1038 views/kmymoneyview.cpp:1052
+msgid "Unable to open file '%1' for writing."
+msgstr "Impossible d'ouvrir le fichier '%1' en écriture."
+
+#: views/kmymoneyview.cpp:1065 views/kmymoneyview.cpp:1074
+msgid "Failure while writing to '%1'"
+msgstr "Échec lors de l'écriture dans '%1'"
+
+#: views/kmymoneyview.cpp:1086 views/kmymoneyview.cpp:1181
+msgid "Tried to access a file when it's not open"
+msgstr "Tenté d'accéder à un fichier qui n'est pas ouvert"
+
+#: views/kmymoneyview.cpp:1092
+msgid ""
+"Since this version of KMyMoney only writes data files in its new format, "
+"files written with this version cannot be read by KMyMoney version 0.4. If "
+"you still want to use older versions of KMyMoney with your data files, "
+"please make sure you keep a backup-file of your finance data. If you want to "
+"abort this operation, please press Cancel now"
+msgstr ""
+"Comme cette version de KMyMoney enregistre les données uniquement dans son "
+"nouveau format, les fichiers écris par cette version ne peuvent pas être lus "
+"par KMyMoney version 0.4. Si vous voulez toutefois utiliser une version "
+"précédente de KMyMoney pour vos données, vérifiez que vous ayez sauvegardé "
+"vos données financières. Si vous voulez annuler cette opération, appuyez sur "
+"Annuler maintenant"
+
+#: views/kmymoneyview.cpp:1122
+msgid "Malformed URL '%1'"
+msgstr "URL mal formée '%1'"
+
+#: views/kmymoneyview.cpp:1192
+msgid ""
+"Database contains data which must be removed before using SaveAs.\n"
+"Do you wish to continue?"
+msgstr ""
+"La base de données contient des données qui doivent être supprimées avant "
+"d'utiliser Enregistrer Sous.\n"
+"Voulez-vous continuer ?"
+
+#: views/kmymoneyview.cpp:1205
+msgid ""
+"An unrecoverable error occurred while writing to the database.\n"
+"It may well be corrupt."
+msgstr ""
+"Une erreur non récupérable est arrivée pendant l'écriture de la base de "
+"données.\n"
+"Elle peut être corrompue."
+
+#: views/kmymoneyview.cpp:1215
+msgid ""
+"Can't open or create database %1\n"
+"Retry SaveAsDatabase and click Help for further info"
+msgstr ""
+"Impossible d'ouvrir ou de créer la base de données %1\n"
+"Ressayez Enregistrer Comme Base de données et appuyez sur Aide pour plus "
+"d'informations"
+
+#: views/kmymoneyview.cpp:1354
+msgid "Afghanistan Afghani"
+msgstr "Afghanistan, Afghani"
+
+#: views/kmymoneyview.cpp:1355
+msgid "Albanian Lek"
+msgstr "Albanie, Lek"
+
+#: views/kmymoneyview.cpp:1356
+msgid "Netherland Antillian Guilder"
+msgstr "Antilles Néerlandaises, Florin"
+
+#: views/kmymoneyview.cpp:1357
+msgid "Algerian Dinar"
+msgstr "Algérie, Dinar"
+
+#: views/kmymoneyview.cpp:1358
+msgid "Andorran Franc"
+msgstr "Andorre, Franc"
+
+#: views/kmymoneyview.cpp:1359
+msgid "Andorran Peseta"
+msgstr "Andorre, Peseta"
+
+#: views/kmymoneyview.cpp:1360
+msgid "Angolan New Kwanza"
+msgstr "Angola, Nouveau Kwanza"
+
+#: views/kmymoneyview.cpp:1361
+msgid "Argentine Peso"
+msgstr "Argentine, Peso"
+
+#: views/kmymoneyview.cpp:1362
+msgid "Aruban Florin"
+msgstr "Aruba, Florin"
+
+#: views/kmymoneyview.cpp:1363
+msgid "Australian Dollar"
+msgstr "Australie, Dollar"
+
+#: views/kmymoneyview.cpp:1364
+msgid "Azerbaijani Manat"
+msgstr "Azerbaijan, Manat"
+
+#: views/kmymoneyview.cpp:1365
+msgid "Bahamian Dollar"
+msgstr "Bahamas, Dollar"
+
+#: views/kmymoneyview.cpp:1366
+msgid "Bahraini Dinar"
+msgstr "Bahrein, Dinar"
+
+#: views/kmymoneyview.cpp:1367
+msgid "Bangladeshi Taka"
+msgstr "Bangladesh, Taka"
+
+#: views/kmymoneyview.cpp:1368
+msgid "Barbados Dollar"
+msgstr "Barbade, Dollar"
+
+#: views/kmymoneyview.cpp:1369
+msgid "Belarussian Ruble"
+msgstr "Belarus, Rouble"
+
+#: views/kmymoneyview.cpp:1370
+msgid "Belize Dollar"
+msgstr "Bélize, Dollar"
+
+#: views/kmymoneyview.cpp:1371
+msgid "Bermudian Dollar"
+msgstr "Bermudes, Dollar"
+
+#: views/kmymoneyview.cpp:1372
+msgid "Bhutan Ngultrum"
+msgstr "Boutan, Ngultrum"
+
+#: views/kmymoneyview.cpp:1373
+msgid "Bolivian Boliviano"
+msgstr "Bolivie, Boliviano"
+
+#: views/kmymoneyview.cpp:1374
+msgid "Bosnian Convertible Mark"
+msgstr "Bosnie, Mark Convertible"
+
+#: views/kmymoneyview.cpp:1375
+msgid "Botswana Pula"
+msgstr "Botswana, Pula"
+
+#: views/kmymoneyview.cpp:1376
+msgid "Brazilian Real"
+msgstr "Brésil, Réal"
+
+#: views/kmymoneyview.cpp:1377
+msgid "British Pound"
+msgstr "Royaume Uni, Livre Sterling"
+
+#: views/kmymoneyview.cpp:1378
+msgid "Brunei Dollar"
+msgstr "Bruneï, Dollar"
+
+#: views/kmymoneyview.cpp:1379
+msgid "Bulgarian Lev"
+msgstr "Bulgarie, Leva"
+
+#: views/kmymoneyview.cpp:1380
+msgid "Burundi Franc"
+msgstr "Burundi, Franc"
+
+#: views/kmymoneyview.cpp:1381
+msgid "CFA Franc BEAC"
+msgstr "Franc CFA BEAC (Col. Françaises d'Afrique Centrale)"
+
+#: views/kmymoneyview.cpp:1382
+msgid "CFA Franc BCEAO"
+msgstr "Franc CFA BCEAO (Col. Françaises d'Afrique de l'Ouest)"
+
+#: views/kmymoneyview.cpp:1383
+msgid "CFP Franc Pacifique"
+msgstr "Franc Pacifique CFP (Col. Françaises du Pacifique)"
+
+#: views/kmymoneyview.cpp:1384
+msgid "Cambodia Riel"
+msgstr "Cambodge, Riel"
+
+#: views/kmymoneyview.cpp:1385
+msgid "Canadian Dollar"
+msgstr "Canada, Dollar"
+
+#: views/kmymoneyview.cpp:1386
+msgid "Cape Verde Escudo"
+msgstr "Cap Vert, Escudo"
+
+#: views/kmymoneyview.cpp:1387
+msgid "Cayman Islands Dollar"
+msgstr "Îles Caïman, Dollar"
+
+#: views/kmymoneyview.cpp:1388
+msgid "Chilean Peso"
+msgstr "Chili, Peso"
+
+#: views/kmymoneyview.cpp:1389
+msgid "Chinese Yuan Renminbi"
+msgstr "Chine, Yuan Renminbi"
+
+#: views/kmymoneyview.cpp:1390
+msgid "Colombian Peso"
+msgstr "Colombie, Peso"
+
+#: views/kmymoneyview.cpp:1391
+msgid "Comoros Franc"
+msgstr "Comores, Franc"
+
+#: views/kmymoneyview.cpp:1392
+msgid "Costa Rican Colon"
+msgstr "Costa Rica, Colon"
+
+#: views/kmymoneyview.cpp:1393
+msgid "Croatian Kuna"
+msgstr "Croatie, Kuna"
+
+#: views/kmymoneyview.cpp:1394
+msgid "Cuban Peso"
+msgstr "Cuba, Peso"
+
+#: views/kmymoneyview.cpp:1395
+msgid "Czech Koruna"
+msgstr "Rép. Tchèque, Koruna"
+
+#: views/kmymoneyview.cpp:1396
+msgid "Danish Krone"
+msgstr "Danemark, Couronne"
+
+#: views/kmymoneyview.cpp:1397
+msgid "Djibouti Franc"
+msgstr "Djibouti, Franc"
+
+#: views/kmymoneyview.cpp:1398
+msgid "Dominican Peso"
+msgstr "Rép. Dominicaine, Peso"
+
+#: views/kmymoneyview.cpp:1399
+msgid "East Caribbean Dollar"
+msgstr "Caraïbes Est, Dollar"
+
+#: views/kmymoneyview.cpp:1400
+msgid "Egyptian Pound"
+msgstr "Egypte, Livre"
+
+#: views/kmymoneyview.cpp:1401
+msgid "El Salvador Colon"
+msgstr "Le Salvador, Colon"
+
+#: views/kmymoneyview.cpp:1402
+msgid "Eritrean Nakfa"
+msgstr "Érythrée, Nakfa"
+
+#: views/kmymoneyview.cpp:1403
+msgid "Estonian Kroon"
+msgstr "Estonie, Kroon"
+
+#: views/kmymoneyview.cpp:1404
+msgid "Ethiopian Birr"
+msgstr "Ethiopie, Birr"
+
+#: views/kmymoneyview.cpp:1405
+msgid "Euro"
+msgstr "Euro"
+
+#: views/kmymoneyview.cpp:1406
+msgid "Falkland Islands Pound"
+msgstr "Îles Falkland, Livre"
+
+#: views/kmymoneyview.cpp:1407
+msgid "Fiji Dollar"
+msgstr "Fidji, Dollar"
+
+#: views/kmymoneyview.cpp:1408
+msgid "Gambian Dalasi"
+msgstr "Gambie, Dalasi"
+
+#: views/kmymoneyview.cpp:1409
+msgid "Georgian Lari"
+msgstr "Géorgie, Lari"
+
+#: views/kmymoneyview.cpp:1410
+msgid "Ghanaian Cedi"
+msgstr "Ghana, Cedi"
+
+#: views/kmymoneyview.cpp:1411
+msgid "Gibraltar Pound"
+msgstr "Gibraltar, Livre"
+
+#: views/kmymoneyview.cpp:1412
+msgid "Guatemalan Quetzal"
+msgstr "Guatémala, Quetzal"
+
+#: views/kmymoneyview.cpp:1413
+msgid "Guinea-Bissau Peso"
+msgstr "Guinée-Bissau, Peso"
+
+#: views/kmymoneyview.cpp:1414
+msgid "Guyanan Dollar"
+msgstr "Guyana, Dollar"
+
+#: views/kmymoneyview.cpp:1415
+msgid "Haitian Gourde"
+msgstr "Haiti, Gourde"
+
+#: views/kmymoneyview.cpp:1416
+msgid "Honduran Lempira"
+msgstr "Honduras, Lempira"
+
+#: views/kmymoneyview.cpp:1417
+msgid "Hong Kong Dollar"
+msgstr "Hong Kong, Dollar"
+
+#: views/kmymoneyview.cpp:1418
+msgid "Hungarian Forint"
+msgstr "Hongrie, Forint"
+
+#: views/kmymoneyview.cpp:1419
+msgid "Iceland Krona"
+msgstr "Islande,Króna"
+
+#: views/kmymoneyview.cpp:1420
+msgid "Indian Rupee"
+msgstr "Inde, Rupee"
+
+#: views/kmymoneyview.cpp:1421
+msgid "Indonesian Rupiah"
+msgstr "Indonésie, Rupiah"
+
+#: views/kmymoneyview.cpp:1422
+msgid "Iranian Rial"
+msgstr "Iran, Rial"
+
+#: views/kmymoneyview.cpp:1423
+msgid "Iraqi Dinar"
+msgstr "Irak, Dinar"
+
+#: views/kmymoneyview.cpp:1424
+msgid "Israeli New Shekel"
+msgstr "Israël, New Shekel"
+
+#: views/kmymoneyview.cpp:1425
+msgid "Jamaican Dollar"
+msgstr "Jamaïque, Dollar"
+
+#: views/kmymoneyview.cpp:1426
+msgid "Japanese Yen"
+msgstr "Japon, Yen"
+
+#: views/kmymoneyview.cpp:1427
+msgid "Jordanian Dinar"
+msgstr "Jordanie, Dinar"
+
+#: views/kmymoneyview.cpp:1428
+msgid "Kazakhstan Tenge"
+msgstr "Kazakhstan, Tenge"
+
+#: views/kmymoneyview.cpp:1429
+msgid "Kenyan Shilling"
+msgstr "Kenya, Shilling"
+
+#: views/kmymoneyview.cpp:1430
+msgid "Kuwaiti Dinar"
+msgstr "Koweït, Dinar"
+
+#: views/kmymoneyview.cpp:1431
+msgid "Kyrgyzstan Som"
+msgstr "Kyrgyzstan, Som"
+
+#: views/kmymoneyview.cpp:1432
+msgid "Laos Kip"
+msgstr "Laos, Kip"
+
+#: views/kmymoneyview.cpp:1433
+msgid "Latvian Lats"
+msgstr "Lettonie, Lats"
+
+#: views/kmymoneyview.cpp:1434
+msgid "Lebanese Pound"
+msgstr "Liban, Livre"
+
+#: views/kmymoneyview.cpp:1435
+msgid "Lesotho Loti"
+msgstr "Lesotho, Loti"
+
+#: views/kmymoneyview.cpp:1436
+msgid "Liberian Dollar"
+msgstr "Libéria, Dollar"
+
+#: views/kmymoneyview.cpp:1437
+msgid "Libyan Dinar"
+msgstr "Libye, Dinar"
+
+#: views/kmymoneyview.cpp:1438
+msgid "Lithuanian Litas"
+msgstr "Lithuanie, Litas"
+
+#: views/kmymoneyview.cpp:1439
+msgid "Macau Pataca"
+msgstr "Macao, Pataca"
+
+#: views/kmymoneyview.cpp:1440
+msgid "Macedonian Denar"
+msgstr "Macédoine, Denar"
+
+#: views/kmymoneyview.cpp:1441
+msgid "Malagasy Franc"
+msgstr "Madagascar, Franc"
+
+#: views/kmymoneyview.cpp:1442
+msgid "Malawi Kwacha"
+msgstr "Malawi, Kwacha"
+
+#: views/kmymoneyview.cpp:1443
+msgid "Malaysian Ringgit"
+msgstr "Malaisie, Ringgit"
+
+#: views/kmymoneyview.cpp:1444
+msgid "Maldive Rufiyaa"
+msgstr "Maldives, Rufiyaa"
+
+#: views/kmymoneyview.cpp:1445
+msgid "Mali Republic Franc"
+msgstr "Mali, Franc"
+
+#: views/kmymoneyview.cpp:1446
+msgid "Mauritanian Ouguiya"
+msgstr "Mauritanie, Ouguiya"
+
+#: views/kmymoneyview.cpp:1447
+msgid "Mauritius Rupee"
+msgstr "Île Maurice, Rupee"
+
+#: views/kmymoneyview.cpp:1448
+msgid "Mexican Peso"
+msgstr "Mexique, Peso"
+
+#: views/kmymoneyview.cpp:1449
+msgid "Moldavian Leu"
+msgstr "Moldavie, Leu"
+
+#: views/kmymoneyview.cpp:1450
+msgid "Mongolian Tugrik"
+msgstr "Mongolie, Tugrik"
+
+#: views/kmymoneyview.cpp:1451
+msgid "Moroccan Dirham"
+msgstr "Maroc, Dirham"
+
+#: views/kmymoneyview.cpp:1452
+msgid "Mozambique Metical"
+msgstr "Mozambique, Metical"
+
+#: views/kmymoneyview.cpp:1453
+msgid "Myanmar Kyat"
+msgstr "Myanmar, Kyat"
+
+#: views/kmymoneyview.cpp:1454
+msgid "Namibian Dollar"
+msgstr "Namibie, Dollar"
+
+#: views/kmymoneyview.cpp:1455
+msgid "Nepalese Rupee"
+msgstr "Népal, Rupee"
+
+#: views/kmymoneyview.cpp:1456
+msgid "New Zealand Dollar"
+msgstr "Nouvelle Zélande, Dollar"
+
+#: views/kmymoneyview.cpp:1457
+msgid "Nicaraguan Cordoba Oro"
+msgstr "Nicaragua, Cordoba Oro"
+
+#: views/kmymoneyview.cpp:1458
+msgid "Nigerian Naira"
+msgstr "Nigéria, Naira"
+
+#: views/kmymoneyview.cpp:1459
+msgid "North Korean Won"
+msgstr "Corée du Nord, Won"
+
+#: views/kmymoneyview.cpp:1460
+msgid "Norwegian Kroner"
+msgstr "Norvège, Krone"
+
+#: views/kmymoneyview.cpp:1461
+msgid "Omani Rial"
+msgstr "Oman, Rial"
+
+#: views/kmymoneyview.cpp:1462
+msgid "Pakistan Rupee"
+msgstr "Pakistan, Rupee"
+
+#: views/kmymoneyview.cpp:1463
+msgid "Panamanian Balboa"
+msgstr "Panama, Balboa"
+
+#: views/kmymoneyview.cpp:1464
+msgid "Papua New Guinea Kina"
+msgstr "Papouasie Nouvelle Guinée, Kina"
+
+#: views/kmymoneyview.cpp:1465
+msgid "Paraguay Guarani"
+msgstr "Paraguay, Guarani"
+
+#: views/kmymoneyview.cpp:1466
+msgid "Peruvian Nuevo Sol"
+msgstr "Pérou, Nuevo Sol"
+
+#: views/kmymoneyview.cpp:1467
+msgid "Philippine Peso"
+msgstr "Philippines, Peso"
+
+#: views/kmymoneyview.cpp:1468
+msgid "Polish Zloty"
+msgstr "Pologne, Zloty"
+
+#: views/kmymoneyview.cpp:1469
+msgid "Qatari Rial"
+msgstr "Qatar, Riyal"
+
+#: views/kmymoneyview.cpp:1470
+msgid "Romanian Leu (new)"
+msgstr "Roumanie, Leu"
+
+#: views/kmymoneyview.cpp:1471
+msgid "Russian Ruble"
+msgstr "Russie, Rouble"
+
+#: views/kmymoneyview.cpp:1472
+msgid "Rwanda Franc"
+msgstr "Rwanda, Franc"
+
+#: views/kmymoneyview.cpp:1473
+msgid "Samoan Tala"
+msgstr "Samoa, Tala"
+
+#: views/kmymoneyview.cpp:1474
+msgid "Sao Tome and Principe Dobra"
+msgstr "São Tomé & Principe, Dobra"
+
+#: views/kmymoneyview.cpp:1475
+msgid "Saudi Riyal"
+msgstr "Arabie Saoudite, Riyal"
+
+#: views/kmymoneyview.cpp:1476
+msgid "Seychelles Rupee"
+msgstr "Seychelles, Rupee"
+
+#: views/kmymoneyview.cpp:1477
+msgid "Sierra Leone Leone"
+msgstr "Sierra Leone, Leone"
+
+#: views/kmymoneyview.cpp:1478
+msgid "Singapore Dollar"
+msgstr "Singapour, Dollar"
+
+#: views/kmymoneyview.cpp:1481
+msgid "Solomon Islands Dollar"
+msgstr "Île Solomon, Dollar"
+
+#: views/kmymoneyview.cpp:1482
+msgid "Somali Shilling"
+msgstr "Somalie, Shilling"
+
+#: views/kmymoneyview.cpp:1483
+msgid "South African Rand"
+msgstr "Afrique du Sud, Rand"
+
+#: views/kmymoneyview.cpp:1484
+msgid "South Korean Won"
+msgstr "Corée du Sud, Won"
+
+#: views/kmymoneyview.cpp:1485
+msgid "Sri Lanka Rupee"
+msgstr "Sri Lanka, Rupee"
+
+#: views/kmymoneyview.cpp:1486
+msgid "St. Helena Pound"
+msgstr "Saint. Hélène, Livre"
+
+#: views/kmymoneyview.cpp:1487
+msgid "Sudanese Dinar"
+msgstr "Soudan, Dinar"
+
+#: views/kmymoneyview.cpp:1488
+msgid "Suriname Guilder"
+msgstr "Surinam, Guilder"
+
+#: views/kmymoneyview.cpp:1489
+msgid "Swaziland Lilangeni"
+msgstr "Swazilie, Lilangeni"
+
+#: views/kmymoneyview.cpp:1490
+msgid "Swedish Krona"
+msgstr "Suède, Krona"
+
+#: views/kmymoneyview.cpp:1491
+msgid "Swiss Franc"
+msgstr "Suisse, Franc"
+
+#: views/kmymoneyview.cpp:1492
+msgid "Syrian Pound"
+msgstr "Syrie, Livre"
+
+#: views/kmymoneyview.cpp:1493
+msgid "Taiwan Dollar"
+msgstr "Taïwan, Dollar"
+
+#: views/kmymoneyview.cpp:1494
+msgid "Tajikistan Somani"
+msgstr "Tadjikistan, Somani"
+
+#: views/kmymoneyview.cpp:1495
+msgid "Tanzanian Shilling"
+msgstr "Tanzanie, Shilling"
+
+#: views/kmymoneyview.cpp:1496
+msgid "Thai Baht"
+msgstr "Thailande, Baht"
+
+#: views/kmymoneyview.cpp:1497
+msgid "Tongan Pa'anga"
+msgstr "Tonga, Pa'anga"
+
+#: views/kmymoneyview.cpp:1498
+msgid "Trinidad and Tobago Dollar"
+msgstr "Trinidad and Tobago, Dollar"
+
+#: views/kmymoneyview.cpp:1499
+msgid "Tunisian Dinar"
+msgstr "Tunisie, Dinar"
+
+#: views/kmymoneyview.cpp:1500
+msgid "Turkish Lira (new)"
+msgstr "Turquie, Nouvelle Lira"
+
+#: views/kmymoneyview.cpp:1501
+msgid "Turkmenistan Manat"
+msgstr "Turkmenistan, Manat"
+
+#: views/kmymoneyview.cpp:1502
+msgid "US Dollar"
+msgstr "US Dollar"
+
+#: views/kmymoneyview.cpp:1503
+msgid "Uganda Shilling"
+msgstr "Ouganda, Shilling"
+
+#: views/kmymoneyview.cpp:1504
+msgid "Ukraine Hryvnia"
+msgstr "Ukraine, Hryvnia"
+
+#: views/kmymoneyview.cpp:1505
+msgid "United Arab Emirates Dirham"
+msgstr "Émirats Arabes Unis, Dirham"
+
+#: views/kmymoneyview.cpp:1506
+msgid "Uruguayan Peso"
+msgstr "Uruguay, Peso"
+
+#: views/kmymoneyview.cpp:1507
+msgid "Uzbekistani Sum"
+msgstr "Uzbekistan, Sum"
+
+#: views/kmymoneyview.cpp:1508
+msgid "Vanuatu Vatu"
+msgstr "Vanuatu, Vatu"
+
+#: views/kmymoneyview.cpp:1509
+msgid "Venezuelan Bolivar"
+msgstr "Vénézuela, Bolivar"
+
+#: views/kmymoneyview.cpp:1510
+msgid "Vietnamese Dong"
+msgstr "Vietnam, Dong"
+
+#: views/kmymoneyview.cpp:1511
+msgid "Yugoslav Dinar"
+msgstr "Yougoslavie, Dinar"
+
+#: views/kmymoneyview.cpp:1512
+msgid "Zambian Kwacha"
+msgstr "Zambie, Kwacha"
+
+#: views/kmymoneyview.cpp:1513
+msgid "Zimbabwe Dollar"
+msgstr "Zimbabwe, Dollar"
+
+#: views/kmymoneyview.cpp:1515
+msgid "Gold"
+msgstr "Or"
+
+#: views/kmymoneyview.cpp:1516
+msgid "Palladium"
+msgstr "Palladium"
+
+#: views/kmymoneyview.cpp:1517
+msgid "Platinum"
+msgstr "Platine"
+
+#: views/kmymoneyview.cpp:1518
+msgid "Silver"
+msgstr "Argent"
+
+#: views/kmymoneyview.cpp:1551
+msgid "Austrian Schilling"
+msgstr "Autriche, Shilling"
+
+#: views/kmymoneyview.cpp:1552
+msgid "German Mark"
+msgstr "Allemagne, Mark"
+
+#: views/kmymoneyview.cpp:1553
+msgid "French Franc"
+msgstr "France, Franc"
+
+#: views/kmymoneyview.cpp:1554
+msgid "Italian Lira"
+msgstr "Italie, Lire"
+
+#: views/kmymoneyview.cpp:1555
+msgid "Spanish Peseta"
+msgstr "Espagne, Peseta"
+
+#: views/kmymoneyview.cpp:1556
+msgid "Dutch Guilder"
+msgstr "Pays-Bas, Florin"
+
+#: views/kmymoneyview.cpp:1557
+msgid "Belgian Franc"
+msgstr "Belgique, Franc Belge"
+
+#: views/kmymoneyview.cpp:1558
+msgid "Luxembourg Franc"
+msgstr "Luxembourg, Franc Luxembourgeois"
+
+#: views/kmymoneyview.cpp:1559
+msgid "Portuguese Escudo"
+msgstr "Portugal, Escudo"
+
+#: views/kmymoneyview.cpp:1560
+msgid "Irish Pound"
+msgstr "Irlande, Livre Irlandaise"
+
+#: views/kmymoneyview.cpp:1561
+msgid "Finnish Markka"
+msgstr "Finlande, Mark"
+
+#: views/kmymoneyview.cpp:1562
+msgid "Greek Drachma"
+msgstr "Grèce, Drachme"
+
+#: views/kmymoneyview.cpp:1564
+msgid "Romanian Leu"
+msgstr "Roumanie, Leu"
+
+#: views/kmymoneyview.cpp:1566
+msgid "Russian Ruble (old)"
+msgstr "Russie, Rouble (ancien)"
+
+#: views/kmymoneyview.cpp:1568
+msgid "Slovenian Tolar"
+msgstr "Slovénie, Tolar"
+
+#: views/kmymoneyview.cpp:1571
+msgid "Turkish Lira"
+msgstr "Turquie, Lira"
+
+#: views/kmymoneyview.cpp:1574
+msgid "Maltese Lira"
+msgstr "Malte, Lira"
+
+#: views/kmymoneyview.cpp:1575
+msgid "Cyprus Pound"
+msgstr "Chypre, Livre"
+
+#: views/kmymoneyview.cpp:1578
+msgid "Slovak Koruna"
+msgstr "Slovaquie, Koruna"
+
+#: views/kmymoneyview.cpp:1888
+msgid ""
+"The account \"%1\" was previously created as loan account but some "
+"information is missing. The new loan wizard will be started to collect all "
+"relevant information. Please use a KMyMoney version >= 0.8.7 and < 0.9 to "
+"correct the problem."
+msgstr ""
+"Le compte \"%1\" a été créé précédemment comme compte prêt mais certaines "
+"informations manquent. Le nouvel assistant de prêt sera lancé pour récupérer "
+"les informations nécessaires. Merci d'utiliser une version de KMyMoney = "
+"0.8.7 et < 0.9 pour corriger le problème."
+
+#: views/kmymoneyview.cpp:1892
+msgid "Account problem"
+msgstr "Problème de compte"
+
+#: views/kmymoneyview.cpp:1941
+msgid "Unable to add schedule: "
+msgstr "Impossible d'ajouter l'échéance : "
+
+#: views/kmymoneyview.cpp:1970
+msgid "Fix transactions"
+msgstr "Corriger les opérations"
+
+#: views/kaccountsview.cpp:522 views/kinstitutionsview.cpp:300
+msgid "Net Worth: "
+msgstr "Valeur nette : "
+
+#: dialogs/rc.cpp:108 dialogs/rc.cpp:163 dialogs/rc.cpp:250 dialogs/rc.cpp:755
+#: dialogs/rc.cpp:830 views/kinvestmentview.cpp:77 widgets/register.cpp:572
+msgid "Quantity"
+msgstr "Quantité"
+
+#: views/kscheduledlistitem.cpp:137
+msgid "Finished"
+msgstr "Terminé"
+
+#: views/kbudgetview.cpp:109
+msgid "Creates a new budget"
+msgstr "Créer un nouveau budget"
+
+#: views/kbudgetview.cpp:110
+msgid "Use this to create a new empty budget."
+msgstr "Utilisez ceci pour créer un nouveau budget vide."
+
+#: views/kbudgetview.cpp:116
+msgid "Rename the current selected budget"
+msgstr "Renommer le budget courant sélectionné"
+
+#: views/kbudgetview.cpp:117
+msgid "Use this to start renaming the selected budget."
+msgstr "Utilisez ceci pour commencer à renommer le budget sélectionné."
+
+#: views/kbudgetview.cpp:123
+msgid "Delete the current selected budget"
+msgstr "Supprimer le budget courant sélectionné"
+
+#: views/kbudgetview.cpp:124
+msgid "Use this to delete the selected budget."
+msgstr "Utilisez ceci pour supprimer le budget sélectionné."
+
+#: views/kbudgetview.cpp:130
+msgid "Accepts the entered values and stores the budget"
+msgstr "Acceptez les valeurs saisies et enregistrez le budget"
+
+#: views/kbudgetview.cpp:131
+msgid "Use this to store the modified data."
+msgstr "Utilisez ceci pour enregistrer les données modifiées."
+
+#: views/kbudgetview.cpp:137
+msgid "Revert budget to last saved state"
+msgstr "Revenir au dernier état de budget sauvegardé"
+
+#: views/kbudgetview.cpp:138
+msgid "Use this to discard the modified data."
+msgstr "Utilisez ceci pour supprimer les données modifiées."
+
+#: views/kbudgetview.cpp:489
+msgid "Do you want to save the changes for <b>%1</b>"
+msgstr "Voulez-vous sauver les modifications pour <b>%1'</b>"
+
+#: views/kbudgetview.cpp:610
+msgid ""
+"A budget with the name '%1' already exists. It is not advisable to have "
+"multiple budgets with the same identification name. Are you sure you would "
+"like to rename the budget?"
+msgstr ""
+"Un budget avec le nom '%1' existe déjà. Il n'est pas envisageable d'avoir "
+"plusieurs budgets avec le même nom d'identification. Êtes-vous sûr que vous "
+"voulez renommer le budget ?"
+
+#: views/kbudgetview.cpp:635 views/kbudgetview.cpp:750
+msgid "Unable to modify budget"
+msgstr "Impossible de modifier le budget"
+
+#: views/kbudgetview.cpp:736
+msgid "Unable to reset budget"
+msgstr "Impossible de remettre à zéro le budget"
+
+#: views/rc.cpp:1
+msgid "List"
+msgstr "Liste"
+
+#: views/rc.cpp:2 views/rc.cpp:20
+msgid "Collapse all accounts in the list"
+msgstr "Regroupe tous les comptes dans la liste"
+
+#: views/rc.cpp:3 views/rc.cpp:21
+msgid "Expand all accounts in the list"
+msgstr "Affiche tous les comptes dans la liste"
+
+#: views/rc.cpp:4
+msgid "Icons"
+msgstr "Icônes"
+
+#: views/rc.cpp:5 views/rc.cpp:22
+msgid "Note: Unused categories are not shown as selected by settings."
+msgstr ""
+"Note: Les catégories inutilisées ne sont pas affichées comme spécifié par "
+"vos paramètres."
+
+#: views/rc.cpp:6 views/rc.cpp:23 views/rc.cpp:54
+msgid "Total Profits:"
+msgstr "Total des Bénéfices :"
+
+#: views/rc.cpp:7
+msgid "Your budgets"
+msgstr "Vos budgets"
+
+#: dialogs/rc.cpp:340 dialogs/rc.cpp:841 dialogs/settings/rc.cpp:124
+#: views/rc.cpp:8 widgets/rc.cpp:48 widgets/rc.cpp:150
+msgid "New"
+msgstr "Nouveau"
+
+#: views/rc.cpp:9
+msgid "Ren"
+msgstr "Ren"
+
+#: views/rc.cpp:10
+msgid "Del"
+msgstr "Sup"
+
+#: views/rc.cpp:11
+msgid "Res"
+msgstr "Remettre à zéro"
+
+#: views/rc.cpp:12
+msgid "Upd"
+msgstr "Mettre à jour"
+
+#: views/rc.cpp:15
+msgid "Hide unused budget categories"
+msgstr "Cacher les catégories du budget inutilisées"
+
+#: views/rc.cpp:16
+msgid "Assignments"
+msgstr "Affectation"
+
+#: views/rc.cpp:19
+msgid "Include subaccounts"
+msgstr "Inclure les sous-comptes"
+
+#: dialogs/settings/rc.cpp:23 views/rc.cpp:24
+msgid "Forecast Settings"
+msgstr "Paramètres des prévisions"
+
+#: views/rc.cpp:25
+msgid "Days to Forecast:"
+msgstr "Jours pour les prévisions :"
+
+#: views/rc.cpp:26
+msgid "Days of Accounts Cycle:"
+msgstr "Jours pour le cycle des comptes :"
+
+#: dialogs/settings/rc.cpp:25 views/rc.cpp:27
+msgid "Day of Month to start Forecast:"
+msgstr "Jour du mois pour commencer les prévisions :"
+
+#: views/rc.cpp:28
+msgid "Historic Cycles:"
+msgstr "Cycles d'historique :"
+
+#: views/rc.cpp:29
+msgid "Chart Detail:"
+msgstr "Détail du graphique :"
+
+#: views/rc.cpp:30 widgets/kmymoneyaccountselector.cpp:64 widgets/rc.cpp:65
+msgid "All"
+msgstr "Tous"
+
+#: views/rc.cpp:31 widgets/rc.cpp:66
+msgid "Top-Level"
+msgstr "Niveau haut"
+
+#: views/rc.cpp:32 widgets/rc.cpp:67
+msgid "Groups"
+msgstr "Groupes"
+
+#: views/rc.cpp:33 widgets/rc.cpp:68
+msgid "Totals"
+msgstr "Totaux"
+
+#: views/rc.cpp:34
+msgid "<p>Choose what level of detail to show on the chart.</p>"
+msgstr "<p>Choisir quel niveau de détail à affichersur le graphique.</p>"
+
+#: views/rc.cpp:35
+msgid "Current Forecast Method:"
+msgstr "Méthode courante des prévisions :"
+
+#: views/rc.cpp:36
+msgid "method"
+msgstr "Méthode"
+
+#: dialogs/settings/rc.cpp:32 views/rc.cpp:37
+msgid "History Forecast Method"
+msgstr "Historique de la méthode des prévisions"
+
+#: dialogs/settings/rc.cpp:33 views/rc.cpp:38
+msgid "Simple Moving Average"
+msgstr "Moyenne simple"
+
+#: dialogs/settings/rc.cpp:34 views/rc.cpp:39
+msgid "Weighted Moving Average"
+msgstr "Moyenne glissante pondérée"
+
+#: dialogs/settings/rc.cpp:35 views/rc.cpp:40
+msgid "Linear Regression"
+msgstr "Régression linéaire"
+
+#: dialogs/keditloanwizard.cpp:315 dialogs/rc.cpp:628 dialogs/rc.cpp:647
+#: views/rc.cpp:43
+msgid "Summary"
+msgstr "Résumé"
+
+#: views/rc.cpp:45
+msgid "0 days"
+msgstr "0 jour"
+
+#: views/rc.cpp:46
+msgid "30 days"
+msgstr "30 jours"
+
+#: views/rc.cpp:47
+msgid "60 days"
+msgstr "60 jours"
+
+#: views/rc.cpp:48
+msgid "90 days"
+msgstr "90 jours"
+
+#: views/rc.cpp:49
+msgid "New Item"
+msgstr "Nouveau point"
+
+#: views/rc.cpp:50 widgets/rc.cpp:64
+msgid "Detail"
+msgstr "Détails"
+
+#: views/rc.cpp:51
+msgid "Advanced"
+msgstr "Avancé"
+
+#: views/rc.cpp:52
+msgid "Budget Forecast"
+msgstr "Prévisions de budget"
+
+#: views/rc.cpp:55
+msgid "Investment Summary"
+msgstr "Résumé de l'investissement"
+
+#: views/rc.cpp:56
+msgid "Select Account:"
+msgstr "Sélectionner le Compte :"
+
+#: views/rc.cpp:57
+msgid ""
+"Summary of the equities contained in this account, showing your holdings and "
+"their most recent price."
+msgstr ""
+"Résumé des actions contenues dans ce compte, affichant vos possessions et "
+"leur cours le plus récent."
+
+#: views/rc.cpp:60 widgets/register.cpp:564
+msgid "No."
+msgstr "N°"
+
+#: views/rc.cpp:64
+msgid "Balance: "
+msgstr "Solde : "
+
+#: views/rc.cpp:65
+msgid "Address"
+msgstr "Adresse"
+
+#: views/rc.cpp:66
+msgid "Payee Information"
+msgstr "Informations sur les tiers"
+
+#: views/rc.cpp:67
+msgid "E-Mail:"
+msgstr "Courriel :"
+
+#: dialogs/rc.cpp:393 views/rc.cpp:69
+msgid "Telephone/Fax:"
+msgstr "N° Téléphone / Fax :"
+
+#: views/rc.cpp:70
+msgid "Notes"
+msgstr "Notes"
+
+#: views/rc.cpp:71
+msgid "Address:"
+msgstr "Adresse :"
+
+#: views/rc.cpp:72
+msgid "Matching"
+msgstr "Correspondance"
+
+#: views/rc.cpp:73
+msgid "Transaction Matching"
+msgstr "Correspondance d'opérations"
+
+#: views/rc.cpp:74
+msgid "No matching"
+msgstr "Pas de correspondance"
+
+#: views/rc.cpp:75
+msgid "Match on Payee name"
+msgstr "Correspondance sur le nom du tiers"
+
+#: views/rc.cpp:76
+msgid "Match on a name listed below"
+msgstr "Correspondance sur le nom du tiers suivant"
+
+#: views/rc.cpp:77
+msgid "List of matching names"
+msgstr "Liste des noms correspondants"
+
+#: views/rc.cpp:78
+msgid ""
+"This list contains the names that will match this payee if a transaction is "
+"imported from an external source. Keep in mind, that you can specify regular "
+"expressions here."
+msgstr ""
+"Cette liste contient les noms qui correspondront à ce tiers si une opération "
+"est importée à partir d'une source externe. Gardez en mémoire que vous "
+"pouvez spécifier des expressions régulières ici."
+
+#: views/rc.cpp:79
+msgid "Ignore Case"
+msgstr "Ignorer la casse"
+
+#: views/rc.cpp:80
+msgid "Default Account"
+msgstr "Compte par défaut"
+
+#: views/rc.cpp:81
+msgid ""
+"Use the default account for\n"
+"new transactions with this payee"
+msgstr ""
+"Utiliser le compte par défaut pour\n"
+"les nouvelles opérations avec ce tiers"
+
+#: views/rc.cpp:82
+msgid "Default category:"
+msgstr "Catégorie par défaut :"
+
+#: views/rc.cpp:83
+msgid "Suggest a category"
+msgstr "Suggérer une catégorie"
+
+#: views/rc.cpp:85
+msgid "New Scheduled transaction..."
+msgstr "Nouvelle opération avec des échéances"
+
+#: views/rc.cpp:86
+msgid "Filter Accounts"
+msgstr "Filtrer les comptes"
+
+#: views/rc.cpp:87
+msgid "List View"
+msgstr "Liste"
+
+#: views/rc.cpp:88
+msgid "Calendar View"
+msgstr "Calendrier"
+
+#: views/kinstitutionsview.cpp:43
+msgid "Institution/Account"
+msgstr "Établissement/Compte"
+
+#: views/kinstitutionsview.cpp:157
+msgid "Accounts with no institution assigned"
+msgstr "Comptes sans établissement assigné"
+
+#: views/kscheduledview.cpp:70
+msgid "Type/Name"
+msgstr "Type / Nom"
+
+#: views/kscheduledview.cpp:75
+msgid "Frequency"
+msgstr "Fréquence"
+
+#: views/kscheduledview.cpp:157
+msgid "Unable to load accounts: "
+msgstr "Impossible de charger les comptes : "
+
+#: views/kscheduledview.cpp:171 views/kscheduledview.cpp:429
+#: views/kscheduledview.cpp:445 widgets/kmymoneyscheduledcalendar.cpp:46
+msgid "Bills"
+msgstr "Factures"
+
+#: dialogs/rc.cpp:232 dialogs/rc.cpp:706 views/kscheduledview.cpp:172
+#: views/kscheduledview.cpp:431 views/kscheduledview.cpp:447
+#: widgets/kmymoneyscheduledcalendar.cpp:47
+msgid "Deposits"
+msgstr "Dépôts"
+
+#: views/kscheduledview.cpp:173 views/kscheduledview.cpp:435
+#: views/kscheduledview.cpp:451
+msgid "Loans"
+msgstr "Prêts"
+
+#: views/kscheduledview.cpp:357
+msgid "Error activating context menu"
+msgstr "Erreur à l'activation du menu contextuel"
+
+#: views/kscheduledview.cpp:385
+msgid "Error executing item"
+msgstr "Erreur à l'exécution de l'objet"
+
+#: views/kscheduledview.cpp:419
+msgid "Unable to filter account"
+msgstr "Impossible de filtrer le compte"
+
+#: views/kgloballedgerview.cpp:508
+msgid "Statement Details"
+msgstr "Détails du relevé"
+
+#: views/kgloballedgerview.cpp:512
+msgid "Statement Deposit Details"
+msgstr "Détails du relevé des dépôts"
+
+#: views/kgloballedgerview.cpp:513
+msgid "Statement Payment Details"
+msgstr "Détails du relevé des paiements"
+
+#: views/kgloballedgerview.cpp:642
+msgid "%1 deposits (%3), %2 payments (%4)"
+msgstr "%1 dépôts (%3), %2 paiements (%4)"
+
+#: views/kgloballedgerview.cpp:649
+msgid "%1 payments (%2)"
+msgstr "%1 paiements (%2)"
+
+#: views/kgloballedgerview.cpp:653
+msgid "%1 deposits (%2)"
+msgstr "%1 dépôts (%2)"
+
+#: views/kgloballedgerview.cpp:721
+#, c-format
+msgid "Statement: %1"
+msgstr "Relevé : %1"
+
+#: views/kgloballedgerview.cpp:722 views/kgloballedgerview.cpp:736
+#, c-format
+msgid "Cleared: %1"
+msgstr "Pointé : %1"
+
+#: views/kgloballedgerview.cpp:723
+#, c-format
+msgid "Difference: %1"
+msgstr "Différence : %1"
+
+#: views/kgloballedgerview.cpp:730
+#, c-format
+msgid "Last reconciled: %1"
+msgstr "Dernier rapprochement : %1"
+
+#: views/kgloballedgerview.cpp:732
+msgid "Never reconciled"
+msgstr "Jamais rapproché"
+
+#: views/kgloballedgerview.cpp:772
+msgid "Investment value: %1%2"
+msgstr "Valeur de l'investissement : %1%2"
+
+#: views/kgloballedgerview.cpp:1040
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to continue to edit the transactions anyway?"
+msgstr ""
+"Au moins une partie de l'opération sélectionnée a été rapprochée. Voulez-"
+"vous continuer à éditer les opérations quand même ?"
+
+#: views/kgloballedgerview.cpp:1051
+msgid ""
+"At least one split of the selected transactions has been frozen. Editing the "
+"transactions is therefore prohibited."
+msgstr ""
+"Au moins une partie de cette opération sélectionnée a été validée. Éditer "
+"cette opération est donc interdit."
+
+#: views/kgloballedgerview.cpp:1053
+msgid "Transaction already frozen"
+msgstr "L'opération est déjà validée"
+
+#: views/kgloballedgerview.cpp:1058
+msgid ""
+"At least one split of the selected transaction references an account that "
+"has been closed. Editing the transactions is therefore prohibited."
+msgstr ""
+"Au moins une répartition de l'opération sélectionnée fait référence à un "
+"compte qui a été clos. Éditer cette opération est donc interdit."
+
+#: views/kgloballedgerview.cpp:1060
+msgid "Account closed"
+msgstr "Compte clos"
+
+#: views/kgloballedgerview.cpp:1349
+msgid "Cannot create transactions when no account is selected."
+msgstr ""
+"Impossible de créer une opération quand un compte n'est pas sélectionné."
+
+#: views/kgloballedgerview.cpp:1354
+msgid "Cannot create transactions in the context of a category."
+msgstr "Impossible de créer des opérations dans le contexte d'une catégorie."
+
+#: views/kgloballedgerview.cpp:1358
+msgid "Cannot create transactions in a closed account."
+msgstr "Impossible de créer des opérations dans un compte clos."
+
+#: views/kgloballedgerview.cpp:1370
+msgid "Cannot process transaction with focus if it is not selected."
+msgstr ""
+"Impossible de traiter des opérations avec attention si elle n'est pas "
+"sélectionnée."
+
+#: views/kgloballedgerview.cpp:1400
+msgid "Cannot edit transactions with frozen splits."
+msgstr "Impossible d'éditer des opérations avec des répartitions figées."
+
+#: views/kgloballedgerview.cpp:1411
+msgid "Cannot edit transactions in the context of a category."
+msgstr "Impossible d'éditer des opérations dans le contexte d'une catégorie."
+
+#: views/kgloballedgerview.cpp:1430
+msgid ""
+"Cannot edit investment transactions and non-investment transactions together."
+msgstr ""
+"Impossible d'éditer des opérations d'investissement et des opérations autres "
+"que d'un investissement ensemble."
+
+#: views/kgloballedgerview.cpp:1438
+msgid "Cannot edit multiple split transactions at once."
+msgstr ""
+"Impossible d'éditer des opérations avec répartitions multiples pour le "
+"moment."
+
+#: views/kgloballedgerview.cpp:1448
+msgid "Cannot edit investment transactions in the context of this account."
+msgstr ""
+"Impossible d'éditer des opérations d'investissements dans le contexte de ce "
+"compte."
+
+#: views/kforecastview.cpp:164
+msgid "Scheduled"
+msgstr "Avec échéance"
+
+#: views/kforecastview.cpp:169
+msgid "History"
+msgstr "Historique"
+
+#: views/kforecastview.cpp:296
+msgid "The balance of %2 is below the minimum balance %3 today."
+msgstr "Le solde de %é est en dessous du solde minimum %3 aujourd'hui."
+
+#: views/kforecastview.cpp:301 views/khomeview.cpp:1043
+msgid "The balance of %1 will drop below the minimum balance %2 in %3 days."
+msgstr "Le solde de %1 sera en dessous du solde minimum %2 dans %3 jours."
+
+#: views/kforecastview.cpp:318 views/khomeview.cpp:1059
+msgid "The balance of %1 is below %2 today."
+msgstr "Le solde de %1 est en dessous de %2 aujourd'hui."
+
+#: views/kforecastview.cpp:323 views/khomeview.cpp:1064
+msgid "The balance of %1 is above %2 today."
+msgstr "Le solde de %1 est en dessous de %2 aujourd'hui."
+
+#: views/kforecastview.cpp:330 views/khomeview.cpp:1070
+msgid "The balance of %1 will drop below %2 in %3 days."
+msgstr "Le solde de %1 sera en dessous de %2 dans %3 jours."
+
+#: views/kforecastview.cpp:335 views/khomeview.cpp:1075
+msgid "The balance of %1 will raise above %2 in %3 days."
+msgstr "Le solde de %1 sera en dessous de %2 dans %3 jours."
+
+#: views/kforecastview.cpp:348
+msgid "The account %1 is decreasing %2 per cycle."
+msgstr "Le compte %1 diminue de %2 par cycle."
+
+#: views/kforecastview.cpp:404 widgets/kmymoneyaccounttreeforecast.cpp:114
+#, c-format
+msgid "Min Bal %1"
+msgstr "Solde min %1"
+
+#: views/kforecastview.cpp:406 widgets/kmymoneyaccounttreeforecast.cpp:116
+#, c-format
+msgid "Min Date %1"
+msgstr "Date min %1"
+
+#: views/kforecastview.cpp:409 widgets/kmymoneyaccounttreeforecast.cpp:119
+#, c-format
+msgid "Max Bal %1"
+msgstr "Solde max %1"
+
+#: views/kforecastview.cpp:411 widgets/kmymoneyaccounttreeforecast.cpp:121
+#, c-format
+msgid "Max Date %1"
+msgstr "Date max %1"
+
+#: views/kforecastview.cpp:413 widgets/kmymoneyaccounttreeforecast.cpp:123
+msgid "Average"
+msgstr "Moyenne"
+
+#: views/kforecastview.cpp:649 views/khomeview.cpp:268 views/khomeview.cpp:275
+msgid "Networth Forecast"
+msgstr "Valeur nette prévisionnelle"
+
+#: views/khomeview.cpp:203
+msgid "Your Financial Summary"
+msgstr "Votre Résumé Financier"
+
+#: views/khomeview.cpp:218
+msgid "Preferred Accounts"
+msgstr "Comptes Favoris"
+
+#: views/khomeview.cpp:225 views/khomeview.cpp:227
+msgid "Payment Accounts"
+msgstr "Comptes de paiement"
+
+#: views/khomeview.cpp:256
+msgid "Show KMyMoney welcome page"
+msgstr "Afficher la page de bienvenue de KMyMoney"
+
+#: views/khomeview.cpp:409
+msgid "Overdue payments"
+msgstr "Paiements en retard"
+
+#: views/khomeview.cpp:424 views/khomeview.cpp:497 views/khomeview.cpp:531
+msgid "Balance after"
+msgstr "Solde après"
+
+#: views/khomeview.cpp:482
+msgid "Today's payments"
+msgstr "Paiements du jour"
+
+#: views/khomeview.cpp:516
+msgid "Future payments"
+msgstr "Paiements futurs"
+
+#: views/khomeview.cpp:585
+msgid "Less..."
+msgstr "Moins ..."
+
+#: views/khomeview.cpp:587
+msgid "More..."
+msgstr "Plus ..."
+
+#: views/khomeview.cpp:622
+msgid "Enter schedule"
+msgstr "Saisir l'échéance"
+
+#: views/khomeview.cpp:624
+msgid "Skip schedule"
+msgstr "Sauter l'échéance"
+
+#: views/khomeview.cpp:627
+msgid "Edit schedule"
+msgstr "Éditer l'échéance"
+
+#: views/khomeview.cpp:631
+msgid " (%1 payments)"
+msgstr " (%1 paiements)"
+
+#: views/khomeview.cpp:771
+msgid "To Minimum Balance / Maximum Credit"
+msgstr "Vers le solde minimum / Crédit maximum"
+
+#: views/khomeview.cpp:964
+msgid "%1 Day Forecast"
+msgstr "Prévisions à %1 jours"
+
+#: views/khomeview.cpp:973 widgets/kmymoneyaccounttreeforecast.cpp:67
+msgid "%1 days"
+msgstr "%1 jours"
+
+#: views/khomeview.cpp:1039
+msgid "The balance of %1 is below the minimum balance %2 today."
+msgstr "Le solde de %1 est en dessous du solde minimum %2 aujourd'hui."
+
+#: views/khomeview.cpp:1175
+msgid ""
+"Before KMyMoney can give you detailed information about your financial "
+"status, you need to create at least one account. Until then, KMyMoney shows "
+"the welcome page instead."
+msgstr ""
+"Avant que KMyMoney puisse vous donner des informations détaillées sur l'état "
+"de votre situation financière, vous devez créer au moins un compte. Jusque-"
+"là, KMyMoney affiche la page de bienvenue à la place."
+
+#: views/khomeview.cpp:1258
+msgid "Assets and Liabilities Summary"
+msgstr "Résumé de l'actif et du passif"
+
+#: views/khomeview.cpp:1262
+msgid "Asset Accounts"
+msgstr "Comptes d'actif"
+
+#: views/khomeview.cpp:1270
+msgid "Liability Accounts"
+msgstr "Comptes de Passif"
+
+#: views/khomeview.cpp:1348
+msgid "Total Assets"
+msgstr "Total de l'actif"
+
+#: views/khomeview.cpp:1354
+msgid "Total Liabilities"
+msgstr "Total du passif"
+
+#: views/khomeview.cpp:1399
+msgid "Current Month Summary"
+msgstr "Résume pour le mois en cours"
+
+#: views/khomeview.cpp:1403 views/khomeview.cpp:1440
+msgid "Budgeted"
+msgstr "Prévu au budget"
+
+#: views/khomeview.cpp:1433
+msgid "Budget Overruns"
+msgstr "Dépassement du budget"
+
+#: views/khomeview.cpp:1502
+msgid "No Budget Categories have been overrun"
+msgstr "Aucune catégorie du budget n'a été dépassée"
+
+#: views/khomeview.cpp:1801
+msgid "Cash Flow Summary"
+msgstr "Résumé sur le flux de trésorerie"
+
+#: views/khomeview.cpp:1808
+msgid "Income and Expenses of Current Month"
+msgstr "Recettes et dépenses du mois en cours"
+
+#: views/khomeview.cpp:1816
+msgid "Scheduled Income"
+msgstr "Revenus planifiés"
+
+#: views/khomeview.cpp:1819
+msgid "Expenses"
+msgstr "Dépenses"
+
+#: views/khomeview.cpp:1822
+msgid "Scheduled Expenses"
+msgstr "Dépenses planifiées"
+
+#: views/khomeview.cpp:1850
+msgid "Liquid Assets and Liabilities"
+msgstr "Actif et passif disponible"
+
+#: views/khomeview.cpp:1855
+msgid "Liquid Assets"
+msgstr "Actifs disponibles"
+
+#: views/khomeview.cpp:1858
+msgid "Transfers to Liquid Liabilities"
+msgstr "Virement vers le passif disponible"
+
+#: views/khomeview.cpp:1861
+msgid "Liquid Liabilities"
+msgstr "Passif disponible"
+
+#: views/khomeview.cpp:1864
+msgid "Other Transfers"
+msgstr "Autres virements"
+
+#: views/khomeview.cpp:1908
+msgid "Cash Flow Status"
+msgstr "État du flux de trésorerie"
+
+#: views/khomeview.cpp:1914
+msgid "Expected Liquid Assets"
+msgstr "Actifs liquides attendus"
+
+#: views/khomeview.cpp:1917
+msgid "Expected Liquid Liabilities"
+msgstr "Passifs liquides attendus"
+
+#: views/khomeview.cpp:1920
+msgid "Expected Profit/Loss"
+msgstr "Gain/Perte attendu"
+
+#: plugins/ofximport/ofximporterplugin.cpp:64
+msgid "OFX..."
+msgstr "OFX ..."
+
+#: plugins/ofximport/ofximporterplugin.cpp:69
+msgid "OFX import file selection"
+msgstr "Sélection du fichier OFX à importer"
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid ""
+"Unable to import %1 using the OFX importer plugin. This file is not the "
+"correct format."
+msgstr ""
+"Impossible d'importer %1 en utilisant le module d'extension d'importation "
+"OFX. Ce fichier n'a pas un format correct."
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid "Incorrect format"
+msgstr "Format incorrect"
+
+#: plugins/ofximport/ofximporterplugin.cpp:122
+msgid "Unable to parse file"
+msgstr "Impossible de lire le fichier"
+
+#: plugins/ofximport/ofximporterplugin.cpp:576
+msgid "Online settings"
+msgstr "Paramètres En ligne"
+
+#: plugins/ofximport/ofximporterplugin.cpp:635
+#, c-format
+msgid "Error connecting to bank: %1"
+msgstr "Erreur lors de la connexion à votre banque : %1"
+
+#: plugins/ofximport/ofximporterplugin.cpp:646
+msgid ""
+"Unable to import %1 using the OFX importer plugin. The plugin returned the "
+"following error:<p>%2"
+msgstr ""
+"Impossible d'importer %1 en utilisant le module d'extension d'importation "
+"OFX. Le module d'extension a retourné l'erreur suivante: %2"
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Importing process terminated unexpectedly."
+msgstr "Importation s'est terminée d'une façon inattendue."
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Failed to import all statements."
+msgstr "L'importation de tous les relevés a échoué."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "The HTTP request failed."
+msgstr "La requête HTTP a échouée."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "Failed"
+msgstr "A échoué"
+
+#: plugins/ofximport/ofxpartner.cpp:410
+msgid "Cannot open file %1 for writing"
+msgstr "Impossible d'ouvrir le fichier %1 pour écriture"
+
+#: plugins/ofximport/ofxpartner.cpp:414
+msgid "OFX setup error"
+msgstr "Erreur d'initialisation OFX"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid "Loading banklist"
+msgstr "Chargement de la liste des banques"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid ""
+"Getting list of banks from http://moneycentral.msn.com/\n"
+"This may take some time depending on the available bandwidth."
+msgstr ""
+"Obtention de la liste des banques de http://moneycentral.msn.com/\n"
+" Cela peut mettre un certain temps en fonction de la bande passante "
+"disponible."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:155
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:199
+msgid "Supports online statements<br>"
+msgstr "Supporte les relevés en ligne"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:157
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:201
+msgid "Supports investments<br>"
+msgstr "Supporte les investissements<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:159
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:203
+msgid "Supports bill payment (but not supported by KMyMoney yet)<br>"
+msgstr ""
+"Supporte le paiement des factures (mais n'est pas supporté encore par "
+"KMyMoney)<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:163
+msgid "Does not support online banking</p>"
+msgstr "Ne supporte pas la banque en ligne</p>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:173
+msgid "Please choose a bank."
+msgstr "Merci de choisir une banque."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:179
+msgid "Please fill all fields with values."
+msgstr "Veuillez remplir tous les champs avec des valeurs."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:271
+msgid "No suitable accounts were found at this bank."
+msgstr "Pas de comptes appropriés trouvés à cette banque."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:283
+msgid "Please choose an account"
+msgstr "Veuillez sélectionner un compte"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:386
+msgid "Server message: %1\n"
+msgstr "Message su serveur: %1\n"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+msgid "Your bank returned warnings when signing on"
+msgstr "Votre banque renvoie des alarmes lors de la connexion"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+#, c-format
+msgid "WARNING %1"
+msgstr "ALARME %1"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+msgid "Error signing onto your bank"
+msgstr "Erreur lors de la connexion à votre banque"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, c-format
+msgid "ERROR %1"
+msgstr "ERREUR %1"
+
+#: plugins/ofximport/dialogs/konlinebankingstatus.cpp:59
+msgid "Enabled & configured"
+msgstr "Initialisé et configuré"
+
+#: plugins/ofximport/dialogs/rc.cpp:1
+msgid "OFX Direct Connect"
+msgstr "Connexion directe OFX"
+
+#: plugins/ofximport/dialogs/rc.cpp:2
+msgid "Contacting bank..."
+msgstr "Contact de la banque en cours ..."
+
+#: plugins/ofximport/dialogs/rc.cpp:4
+msgid "Online Banking Account Setup"
+msgstr "Installation du compte de banque en ligne"
+
+#: plugins/ofximport/dialogs/rc.cpp:5
+msgid "Select Financial Institution"
+msgstr "Choisir un établissement financier"
+
+#: plugins/ofximport/dialogs/rc.cpp:6
+msgid "Please select your financial institution from the list below..."
+msgstr ""
+"Merci de choisir votre établissement financier dans la liste en dessous ..."
+
+#: plugins/ofximport/dialogs/rc.cpp:7
+msgid "Automatic"
+msgstr "Automatique"
+
+#: plugins/ofximport/dialogs/rc.cpp:8
+msgid "Financial Institution"
+msgstr "Établissement financier"
+
+#: plugins/ofximport/dialogs/rc.cpp:9
+msgid "Manual"
+msgstr "Manuel"
+
+#: plugins/ofximport/dialogs/rc.cpp:10
+msgid "Org"
+msgstr "Org"
+
+#: plugins/ofximport/dialogs/rc.cpp:11
+msgid "FID"
+msgstr "FID"
+
+#: dialogs/settings/rc.cpp:120 plugins/ofximport/dialogs/rc.cpp:12
+#: widgets/rc.cpp:46
+msgid "URL"
+msgstr "URL"
+
+#: plugins/ofximport/dialogs/rc.cpp:13
+msgid "Enter Login Details"
+msgstr "Saisir les détails de connexion"
+
+#: plugins/ofximport/dialogs/rc.cpp:14
+msgid ""
+"Please enter the username and password you use to log into this bank for "
+"online banking. Please note that many banks require a separate signup, and "
+"assign a separate PIN or password just for online banking from home."
+msgstr ""
+"Merci de saisir le nom d'utilisateur et le mot de passe que vous utilisez "
+"pour vous connecter à votre banque pour la banque en ligne. Veuillez noter "
+"que la plupart des banques nécessitent une autorisation spéciale et vous "
+"fournit un mot de passe séparé uniquement pour la banque en ligne depuis "
+"chez vous."
+
+#: plugins/ofximport/dialogs/rc.cpp:15
+msgid "Connection Details"
+msgstr "Détails de connexion"
+
+#: plugins/ofximport/dialogs/rc.cpp:16
+msgid "Username"
+msgstr "Nom Utilisateur"
+
+#: plugins/ofximport/dialogs/rc.cpp:17 plugins/ofximport/dialogs/rc.cpp:36
+msgid "Header Version"
+msgstr "Version de l'entête"
+
+#: plugins/ofximport/dialogs/rc.cpp:18 plugins/ofximport/dialogs/rc.cpp:37
+msgid "Identify as"
+msgstr "Identifier comme"
+
+#: dialogs/rc.cpp:742 plugins/ofximport/dialogs/rc.cpp:19
+msgid "Password"
+msgstr "Mot de passe"
+
+#: plugins/ofximport/dialogs/rc.cpp:20
+msgid "Select Account"
+msgstr "Sélectionner le Compte"
+
+#: plugins/ofximport/dialogs/rc.cpp:21
+msgid ""
+"Please select the account from your financial institution from the list "
+"below which matches this account."
+msgstr ""
+"Merci de choisir le compte pour votre établissement financier dans la liste "
+"en dessous qui correspond à ce compte."
+
+#: plugins/ofximport/dialogs/rc.cpp:24
+msgid "Bank"
+msgstr "Banque"
+
+#: plugins/ofximport/dialogs/rc.cpp:25
+msgid "Branch"
+msgstr "Branche"
+
+#: plugins/ofximport/dialogs/rc.cpp:26
+msgid "WizardPage"
+msgstr "Page d'assistant"
+
+#: plugins/ofximport/dialogs/rc.cpp:27
+msgid ""
+"Congratulations! You have successfully set up your bank for online banking "
+"via OFX."
+msgstr ""
+"Félicitations! Vous avez initialisé avec succès votre banque pour la banque "
+"en ligne en utilisant OFX."
+
+#: plugins/ofximport/dialogs/rc.cpp:28
+msgid "Account Details"
+msgstr "Détails du compte"
+
+#: plugins/ofximport/dialogs/rc.cpp:29 plugins/ofximport/dialogs/rc.cpp:31
+msgid "&lt;Not configured&gt;"
+msgstr "&lt;Non configuré&gt;"
+
+#: plugins/ofximport/dialogs/rc.cpp:30
+msgid "BANK/BROKER:"
+msgstr "BANQUE/COURTIER :"
+
+#: plugins/ofximport/dialogs/rc.cpp:32
+msgid "Unavailable"
+msgstr "Indisponible"
+
+#: plugins/ofximport/dialogs/rc.cpp:33
+msgid "ACCOUNT:"
+msgstr "COMPTE :"
+
+#: plugins/ofximport/dialogs/rc.cpp:34
+msgid "STATUS:"
+msgstr "ÉTAT :"
+
+#: plugins/ofximport/dialogs/rc.cpp:35
+msgid "OFX Details"
+msgstr "Détails OFX"
+
+#: plugins/ofximport/dialogs/rc.cpp:38
+msgid "Start date of import"
+msgstr "Date de début d'importation"
+
+#: plugins/ofximport/dialogs/rc.cpp:39
+msgid "To&day minus"
+msgstr "Diminution du jour"
+
+#: plugins/ofximport/dialogs/rc.cpp:40
+msgid "days"
+msgstr "jour(s)"
+
+#: plugins/ofximport/dialogs/rc.cpp:41
+msgid "Last &update"
+msgstr "Dernière mise à jo&ur"
+
+#: plugins/ofximport/dialogs/rc.cpp:42
+msgid "Pi&ck date"
+msgstr "&Choisir la date"
+
+#: plugins/ofximport/dialogs/rc.cpp:43
+msgid "Name is derived from"
+msgstr "Le nom est dérivé de"
+
+#: plugins/ofximport/dialogs/rc.cpp:44
+msgid "P&AYEEID"
+msgstr "P&AYEEID"
+
+#: plugins/ofximport/dialogs/rc.cpp:45
+msgid "&NAME"
+msgstr "&NAME"
+
+#: plugins/ofximport/dialogs/rc.cpp:46
+msgid "field if both are present in download"
+msgstr "champ si les deux sont présents dans le télé-chargement"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:81
+msgid "Quicken Windows 2003"
+msgstr "Quicken Windows 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:82
+msgid "Quicken Windows 2004"
+msgstr "Quicken Windows 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:83
+msgid "Quicken Windows 2005"
+msgstr "Quicken Windows 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:84
+msgid "Quicken Windows 2006"
+msgstr "Quicken Windows 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:85
+msgid "Quicken Windows 2007"
+msgstr "Quicken Windows 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:86
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:111
+msgid "Quicken Windows 2008"
+msgstr "Quicken Windows 2008"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:89
+msgid "MS-Money 2003"
+msgstr "MS-Money 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:90
+msgid "MS-Money 2004"
+msgstr "MS-Money 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:91
+msgid "MS-Money 2005"
+msgstr "MS-Money 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:92
+msgid "MS-Money 2006"
+msgstr "MS-Money 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:93
+msgid "MS-Money 2007"
+msgstr "MS-Money 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:94
+msgid "MS-Money Plus"
+msgstr "MS-Money Plus"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:91
+msgid "Report Configuration"
+msgstr "Configuration du Rapport"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:117
+#: dialogs/kreportconfigurationfilterdlg.cpp:135
+msgid "Rows/Columns"
+msgstr "Lignes/Colonnes"
+
+#: dialogs/investtransactioneditor.cpp:203
+#: dialogs/investtransactioneditor.cpp:537
+#: dialogs/investtransactioneditor.cpp:579 dialogs/rc.cpp:103
+#: dialogs/rc.cpp:158 dialogs/rc.cpp:245 dialogs/rc.cpp:750 dialogs/rc.cpp:794
+#: widgets/kmymoneyaccountselector.cpp:182 widgets/register.cpp:64
+#: widgets/register.cpp:567 widgets/transaction.cpp:1500
+msgid "Security"
+msgstr "Valeur"
+
+#: dialogs/investtransactioneditor.cpp:211
+msgid "Asset account"
+msgstr "Compte d'actif"
+
+#: dialogs/investtransactioneditor.cpp:1073
+msgid "Price/Share"
+msgstr "Prix/Titre"
+
+#: dialogs/kmergetransactionsdlg.cpp:39
+msgid "Merge Transactions"
+msgstr "Opérations ajoutées"
+
+#: dialogs/kmergetransactionsdlg.cpp:40
+msgid "Are you sure you wish to merge these transactions?"
+msgstr "Êtes-vous sûr de vouloir fusionner ces opérations ?"
+
+#: dialogs/kstartdlg.cpp:59
+msgid "Start Dialog"
+msgstr "Démarrer l'interface"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Templates"
+msgstr "Modèles"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Select templates"
+msgstr "Choisir les modèles"
+
+#: dialogs/kstartdlg.cpp:80 dialogs/kstartdlg.cpp:119
+msgid "New KMyMoney document"
+msgstr "Créer un document KMyMoney"
+
+#: dialogs/kstartdlg.cpp:90
+msgid "Open a KMyMoney document"
+msgstr "Ouvrir un document KMyMoney"
+
+#: dialogs/kstartdlg.cpp:96
+msgid ""
+"%1|KMyMoney files (*.kmy)\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Fichiers KMyMoney (*.kmy)\n"
+"%2|Tous les fichiers (*.*)"
+
+#: dialogs/kstartdlg.cpp:102
+msgid "Recent Files"
+msgstr "Fichiers récents"
+
+#: dialogs/kstartdlg.cpp:217
+msgid "Blank Document"
+msgstr "Document vierge"
+
+#: dialogs/knewbudgetdlg.cpp:71
+msgid "Please specify a budget name"
+msgstr "Merci de donner un nom de budget"
+
+#: dialogs/kgncpricesourcedlg.cpp:48
+#, c-format
+msgid "Investment: %1"
+msgstr "Investissement : %1"
+
+#: dialogs/kgncpricesourcedlg.cpp:49
+#, c-format
+msgid "Quote source: %1"
+msgstr "Source de cotation : %1"
+
+#: dialogs/kmymoneypricedlg.cpp:62 dialogs/ksecuritylisteditor.cpp:69
+msgid "Delete this entry"
+msgstr "Supprimer cette saisie"
+
+#: dialogs/ksecuritylisteditor.cpp:70
+msgid "Remove this security item from the file"
+msgstr "Supprimer cette valeur du fichier"
+
+#: dialogs/ksecuritylisteditor.cpp:73
+msgid "&Add"
+msgstr "&Ajouter"
+
+#: dialogs/kmymoneypricedlg.cpp:68 dialogs/ksecuritylisteditor.cpp:75
+msgid "Add a new entry"
+msgstr "Ajouter une nouvelle saisie"
+
+#: dialogs/ksecuritylisteditor.cpp:76
+msgid "Create a new security entry."
+msgstr "Créer une nouvelle valeur."
+
+#: dialogs/keditequityentrydlg.cpp:77 dialogs/kmymoneypricedlg.cpp:74
+#: dialogs/ksecuritylisteditor.cpp:81
+msgid "Modify the selected entry"
+msgstr "Modifier la sélection"
+
+#: dialogs/ksecuritylisteditor.cpp:82
+msgid "Change the security information of the selected entry."
+msgstr "Changer la valeur de la saisie sélectionnée."
+
+#: dialogs/kmymoneypricedlg.cpp:80 dialogs/ksecuritylisteditor.cpp:87
+msgid "Close the dialog"
+msgstr "Fermer la boîte de dialogue"
+
+#: dialogs/kmymoneypricedlg.cpp:81 dialogs/ksecuritylisteditor.cpp:88
+msgid "Use this to close the dialog and return to the application."
+msgstr ""
+"Utilisez ce bouton pour fermer la fenêtre et annuler l'opération en cours."
+
+#: dialogs/ksecuritylisteditor.cpp:184
+msgid ""
+"Do you really want to remove the currency <b>%1</b> from the file?</"
+"p><i>Note: It is currently not supported to add currencies.</i>"
+msgstr ""
+"Voulez-vous vraiment supprimer la devise <b>%1</b> du fichier ? </p><i>Note: "
+"Actuellement, il n'est pas possible d'ajouter une devise.</i>"
+
+#: dialogs/ksecuritylisteditor.cpp:187
+msgid "Do you really want to remove the %1 <b>%2</b> from the file?"
+msgstr "Voulez-vous vraiment supprimer le %1 <b>%2</b> du fichier ?"
+
+#: dialogs/ksecuritylisteditor.cpp:190
+msgid "Delete security"
+msgstr "Supprimer la valeur"
+
+#: dialogs/kmymoneypricedlg.cpp:63
+msgid "Remove this price item from the file"
+msgstr "Supprimer ce cours du fichier"
+
+#: dialogs/kmymoneypricedlg.cpp:66 dialogs/mymoneyqifprofileeditor.cpp:94
+msgid "&New"
+msgstr "&Nouveau"
+
+#: dialogs/kmymoneypricedlg.cpp:69
+msgid "Create a new price entry."
+msgstr "Créer un nouveau cours."
+
+#: dialogs/kmymoneypricedlg.cpp:75
+msgid "Change the details of selected price information."
+msgstr "Changer les détails de l'information du cours sélectionné."
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Do you really want to delete the selected price entry?"
+msgstr "Voulez-vous vraiment supprimer le cours sélectionné ?"
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Delete price information"
+msgstr "Supprimer l'information du cours"
+
+#: dialogs/kchooseimportexportdlg.cpp:46
+msgid ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Veuillez sélectionner le type d'importation que vous souhaitez effectuer. "
+"Une explication simple\n"
+" du type d'importation est disponible en bas de l'écran et est mise à jour\n"
+"lorsque vous sélectionnez un objet dans la liste de choix.\n"
+"\n"
+"Une fois que vous avez choisi un type d'importation, appuyez sur le bouton "
+"OK."
+
+#: dialogs/kchooseimportexportdlg.cpp:50 dialogs/rc.cpp:22
+msgid "Choose import type:"
+msgstr "Choisissez le type d'importation :"
+
+#: dialogs/kchooseimportexportdlg.cpp:51 dialogs/rc.cpp:20
+msgid "Choose Import Type Dialog"
+msgstr "Choisir le Type d'importation"
+
+#: dialogs/kchooseimportexportdlg.cpp:53
+msgid ""
+"Please choose the type of export you wish to perform. A simple explanation\n"
+"of the export type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an export type please press the OK button."
+msgstr ""
+"Veuillez sélectionner le type d'exportation que vous souhaitez effectuer. "
+"Une explication simple\n"
+"du type d'exportation est disponible en bas de l'écran et est mise à jour "
+"quand\n"
+"vous sélectionnez un objet dans la boîte des choix.\n"
+"\n"
+"Une fois que vous avez choisi un type d'exportation, appuyez sur le bouton "
+"OK."
+
+#: dialogs/kchooseimportexportdlg.cpp:57
+msgid "Choose export type:"
+msgstr "Choisissez le type d'exportation :"
+
+#: dialogs/kchooseimportexportdlg.cpp:58
+msgid "Choose Export Type Dialog"
+msgstr "Choisir le Type d'exportation"
+
+#: dialogs/kchooseimportexportdlg.cpp:78
+msgid ""
+"QIF files are created by the popular accounting program Quicken.\n"
+"Another dialog will appear, if you choose this type, asking for further\n"
+"information relevant to the Quicken format."
+msgstr ""
+"Les fichiers QIF sont produits par le célèbre programme de comptabilité "
+"Quicken.\n"
+"Si vous choisissez ce type, une boîte de dialogue s'ouvrira pour vous "
+"réclamer des\n"
+"informations complémentaires sur le format Quicken."
+
+#: dialogs/kchooseimportexportdlg.cpp:82
+msgid ""
+"The CSV type uses a comma delimeted text file that can be used by\n"
+"most popular spreadsheet programs available for Linux and other operating\n"
+"systems."
+msgstr ""
+"Le type CSV est un fichier texte utilisant des virgules comme séparateur,\n"
+"qui peut être utilisé par la plupart des tableurs disponibles pour Linux et\n"
+"autres systèmes d'exploitation."
+
+#: dialogs/kequitypriceupdatedlg.cpp:222
+msgid "%1 units in %2"
+msgstr "%1 unités dans %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid ""
+"Failed to retrieve an exchange rate for %1 from %2. It will be skipped this "
+"time."
+msgstr ""
+"Erreur dans la récupération d'un taux de change pour %1 de %2. Il ne sera "
+"sauté cette fois."
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid "Price Update Failed"
+msgstr "Échec pour la mise à jour du cours"
+
+#: dialogs/kequitypriceupdatedlg.cpp:427
+msgid ""
+"Failed to retrieve a quote for %1 from %2. Press <b>No</b> to remove the "
+"online price source from this security permanently, <b>Yes</b> to continue "
+"updating this security during future price updates or <b>Cancel</b> to stop "
+"the current update operation."
+msgstr ""
+"Impossible de récupérer une cotation pour %1 à partir de %2. Appuyez sur "
+"<b>Non</b> pour supprimer la source de cotation en ligne pour cette action "
+"de façon permanente, <b>Oui</b> pour continuer la mise à jour de cette "
+"action pendant les prochaines mises à jour ou <b>Annuler</b> pour arrêter "
+"l'opération de mise à jour en cours."
+
+#: dialogs/kequitypriceupdatedlg.cpp:427 dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Price Update Failed"
+msgstr "Échec de la mise à jour des cours"
+
+#: dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Cannot update security <b>%1</b>: %2"
+msgstr "Impossible de mettre à jour cette valeur <b>%1</b>: %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:528
+msgid "Price for %1 updated (id %2)"
+msgstr "Cours pour %1 mis à jour (id %2)"
+
+#: dialogs/kequitypriceupdatedlg.cpp:534
+msgid "Received an invalid price for %1, unable to update."
+msgstr "A reçu un cours invalide pour %1, impossible de mettre à jour."
+
+#: dialogs/kequitypriceupdatedlg.cpp:554
+msgid ""
+"Received a price for %1 (id %2), but this symbol is not on the list! "
+"Aborting entire update."
+msgstr ""
+"A reçu un cours pour %1 (id %2), mais ce symbole n'est pas sur la liste ! "
+"Abandon de toute la mise à jour."
+
+#: dialogs/transactioneditor.cpp:222
+msgid ""
+"The number <b>%1</b> has already been used in account <b>%2</b>. Do you want "
+"to replace it with the next available number?"
+msgstr ""
+"Le numéro <b>%1</b> a déjà été utilisé dans le compte <b>%2</b>. Voulez-vous "
+"le remplacer avec le prochain numéro disponible ?"
+
+#: dialogs/transactioneditor.cpp:222
+msgid "Duplicate number"
+msgstr "Numéro en double"
+
+#: dialogs/transactioneditor.cpp:303
+msgid ""
+"This transaction has more than two splits and is based on a different "
+"currency (%1). Using this account to modify the transaction is currently not "
+"very well supported by KMyMoney and may result in false results."
+msgstr ""
+"Cette opération a plus de deux répartitions et est basée sur une devise "
+"différente (%1). L'utilisation de ce compte pour modifier l'opération n'est "
+"pas actuellement très bien supporté par KMyMoney et peut avoir comme "
+"conséquence des résultats faux."
+
+#: dialogs/transactioneditor.cpp:305
+msgid ""
+"KMyMoney was not able to find a more appropriate account to edit this "
+"transaction. Nevertheless, you are allowed to modify the transaction. If you "
+"don't want to edit this transaction, please cancel from editing next."
+msgstr ""
+"KMyMoney n'a pas pu trouver un compte plus approprié pour éditer cette "
+"opération. Néanmoins, vous avez la possibilité de modifier l'opération. Si "
+"vous ne voulez pas éditer cette opération, merci d'annuler l'édition après."
+
+#: dialogs/transactioneditor.cpp:307
+msgid ""
+"Using e.g. <b>%1</b> to edit this transaction is a better choice. "
+"Nevertheless, you are allowed to modify the transaction. If you want to use "
+"the suggested account instead, please cancel from editing next and change "
+"the view to the suggested account."
+msgstr ""
+"L'utilisation, par exemple, de <b>%1</b> pour éditer cette opération serait "
+"un meilleur choix. Néanmoins, vous avez la possibilité de modifier "
+"l'opération. Si vous voulez utiliser le compte suggéré à la place, merci "
+"d'annuler l'édition après et de changer le choix du compte suggéré."
+
+#: dialogs/transactioneditor.cpp:410
+msgid ""
+"This transaction has more than two splits and is originally based on a "
+"different currency (%1). Using this account to modify the transaction may "
+"result in rounding errors. Do you want to continue?"
+msgstr ""
+"Cette opération a plus de deux répartitions et est basée sur une devise "
+"différente (%1). L'utilisation de ce compte pour modifier l'opération peut "
+"donner un résultat avec une erreur d'arrondi. Voulez-vous continuer ?"
+
+#: dialogs/transactioneditor.cpp:412
+msgid ""
+"At least one of the selected transactions has more than two splits and is "
+"originally based on a different currency (%1). Using this account to modify "
+"the transactions may result in rounding errors. Do you want to continue?"
+msgstr ""
+"Au moins une des opérations sélectionnées a plus de deux répartitions et est "
+"basée sur une devise différente (%1). L'utilisation de ce compte pour "
+"modifier les opérations peut donner un résultat avec une erreur d'arrondi. "
+"Voulez-vous continuer ?"
+
+#: dialogs/transactioneditor.cpp:557
+msgid "Storing transactions"
+msgstr "Sauvegarde des opérations"
+
+#: dialogs/transactioneditor.cpp:603 widgets/kmymoneybriefschedule.cpp:65
+msgid "&Enter"
+msgstr "&Saisir"
+
+#: dialogs/transactioneditor.cpp:606
+msgid "Use this to enter the transaction into the ledger."
+msgstr "Utiliser ceci pour saisir une opération dans le registre."
+
+#: dialogs/transactioneditor.cpp:607
+msgid "&Schedule"
+msgstr "Échéance&s"
+
+#: dialogs/transactioneditor.cpp:609
+msgid "Accepts the entered data and stores it as schedule"
+msgstr "Acceptez l'information saisie et l'enregistre comme une échéance"
+
+#: dialogs/transactioneditor.cpp:610
+msgid "Use this to schedule the transaction for later entry into the ledger."
+msgstr ""
+"Utilisez ceci pour ajouter des échéances pour l'opération afin de la saisir "
+"plus tard dans le registre."
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"The transaction you are about to enter has a post date in the future.<br/"
+"><br/>Do you want to enter it in the ledger or add it to the schedules?"
+msgstr ""
+"L'opération que vous êtes en train de saisir à une date située dans le "
+"futur.<br/><br/>Voulez-vous la saisir dans le registre ou l'ajouter dans "
+"l'échéancier ?"
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"_: Dialog caption for 'Enter or schedule' dialog\n"
+"Enter or schedule?"
+msgstr "Saisir sans ou avec échéance ?"
+
+#: dialogs/transactioneditor.cpp:671
+msgid ""
+"The balance of account <b>%1</b> dropped below the warning balance of %2."
+msgstr "Le solde du compte <b>%1</b> est en dessous du solde d'alerte de %2."
+
+#: dialogs/transactioneditor.cpp:677
+msgid ""
+"The balance of account <b>%1</b> dropped below the minimum balance of %2."
+msgstr "Le solde du compte <b>%1</b> est en dessous du solde de %2."
+
+#: dialogs/transactioneditor.cpp:683
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit warning "
+"limit of %2."
+msgstr ""
+"Le solde du compte <b>%1</b> est en dessous de l'alarme de crédit maximum de "
+"%2."
+
+#: dialogs/transactioneditor.cpp:689
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit limit of %"
+"2."
+msgstr ""
+"Le solde du compte <b>%1</b> est en dessous de la limite de crédit maximum "
+"de %2."
+
+#: dialogs/transactioneditor.cpp:740
+msgid "Payer/Receiver"
+msgstr "Tiers"
+
+#: dialogs/transactioneditor.cpp:748
+msgid "Category/Account"
+msgstr "Catégorie/Compte"
+
+#: dialogs/transactioneditor.cpp:980 dialogs/transactioneditor.cpp:1016
+#: dialogs/transactioneditor.cpp:1378 dialogs/transactioneditor.cpp:1399
+#: dialogs/transactioneditor.cpp:1422 dialogs/transactioneditor.cpp:1443
+#: dialogs/transactioneditor.cpp:1505 dialogs/transactioneditor.cpp:1509
+#: widgets/transaction.cpp:902
+msgid "Transfer from"
+msgstr "Virement de"
+
+#: dialogs/transactioneditor.cpp:982 dialogs/transactioneditor.cpp:1018
+#: dialogs/transactioneditor.cpp:1401 dialogs/transactioneditor.cpp:1445
+#: dialogs/transactioneditor.cpp:1506 widgets/transaction.cpp:902
+msgid "Transfer to"
+msgstr "Virement vers"
+
+#: dialogs/transactioneditor.cpp:1259
+msgid "Select autofill transaction"
+msgstr "Sélectionnez l'option Saisie automatique des opérations"
+
+#: dialogs/transactionmatcher.cpp:77
+msgid "First transaction does not match requirement for matching"
+msgstr ""
+"La première opération ne correspond pas au exigence pour la correspondance"
+
+#: dialogs/transactionmatcher.cpp:79
+msgid "Second transaction does not match requirement for matching"
+msgstr ""
+"La deuxième opération ne correspond pas au exigence pour la correspondance"
+
+#: dialogs/transactionmatcher.cpp:83 dialogs/transactionmatcher.cpp:133
+msgid "Splits for %1 have conflicting values (%2,%3)"
+msgstr "Les répartitions de %1 est en conflit les valeurs (%2,%3)"
+
+#: dialogs/transactionmatcher.cpp:96 dialogs/transactionmatcher.cpp:149
+msgid ""
+"Both of these transactions have been imported into %1. Therefore they "
+"cannot be matched. Matching works with one imported transaction and one non-"
+"imported transaction."
+msgstr ""
+"Ces deux opérations ont été importées dans %1. Cependant, elles ne peuvent "
+"être ne correspondance. La correspondance ne fonctionne qu'avec une "
+"opération importée et une opération non importée."
+
+#: dialogs/transactionmatcher.cpp:101 dialogs/transactionmatcher.cpp:156
+msgid "Unable to match all splits (%1)"
+msgstr "Impossible de faire correspondre toutes les répartitions (%1)"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:65
+msgid "Account and transfer account are the same. Please change one."
+msgstr ""
+"Le compte et le compte de transfert sont identiques. Veuillez en changer un."
+
+#: dialogs/kconfirmmanualenterdlg.cpp:84
+msgid "Payee changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Le tiers a changé.<br>&nbsp;&nbsp;&nbsp;Ancien: <b>%1</b>, Nouveau: <b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:92
+#: dialogs/kconfirmmanualenterdlg.cpp:100
+msgid "Account changed. Old: \"%1\", New: \"%2\""
+msgstr "Le compte a changé. Ancien : \"%1\", Nouveau : \"%2\""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:107
+msgid "Account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Le compte a changé.<br>&nbsp;&nbsp;&nbsp;Ancien: <b>%1</b>, Nouveau: <b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:115
+msgid ""
+"Transfer account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</"
+"b><p>"
+msgstr ""
+"Le compte de transfert a changé. <br>&nbsp;&nbsp;&nbsp;Ancien: <b>%1</b>, "
+"Nouveau: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:143
+msgid ""
+"Category changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"La catégorie a changée.<br>&nbsp;&nbsp;&nbsp;Ancien: <b>%1</b>, Nouveau: <b>%"
+"2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:151
+#: dialogs/kconfirmmanualenterdlg.cpp:153
+msgid "empty"
+msgstr "vide"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:157
+msgid "Memo changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Le numéro a changé.<br>&nbsp;&nbsp;&nbsp;Ancien: <b>%1</b>, Nouveau: <b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:166
+msgid "Amount changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Le montant a changé.<br>&nbsp;&nbsp;&nbsp;Ancien: <b>%1</b>, Nouveau: <b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:175
+msgid ""
+"Reconciliation flag changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%"
+"2</b><p>"
+msgstr ""
+"L'état du rapprochement a changé.<br>&nbsp;&nbsp;&nbsp;Ancien: <b>%1</b>, "
+"Nouveau: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:182
+msgid "Fatal error in determining data: "
+msgstr "Erreur fatale dans la détermination des données : "
+
+#: dialogs/kselectdatabasedlg.cpp:56
+msgid ""
+"There are no Qt SQL drivers installed in your system.\n"
+"Please consult documentation for your distro, or visit the Qt web site (www."
+"trolltech.com) and search for SQL drivers."
+msgstr ""
+"Aucun driver SQL pour Qt n'est installé sur votre système.\n"
+"Merci de consulter la documentation de votre distribution ou visitez le site "
+"Web Qt (www.trolltech.com) et cherchez les drivers SQL."
+
+#: dialogs/kselectdatabasedlg.cpp:100
+msgid "Qt SQL driver %1 is no longer installed on your system"
+msgstr "Le pilote SQL pour Qt n'est pas installé sur votre système"
+
+#: dialogs/kselectdatabasedlg.cpp:107
+msgid "Qt SQL driver %1 is not suported"
+msgstr "Le pilote SQL pour Qt %1 n'est pas supporté"
+
+#: dialogs/kselectdatabasedlg.cpp:164
+msgid "SQLite files (*.sql);; All files (*.*)"
+msgstr "Fichiers SQLite (*.sql);; Tous les fichiers (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:167
+msgid "Select SQLite file"
+msgstr "Sélectionner le fichier SQLite"
+
+#: dialogs/kselectdatabasedlg.cpp:188
+msgid "All files (*.*)"
+msgstr "Tous les fichiers (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:191
+msgid "Select output file"
+msgstr "Sélectionnez le fichier de sortie"
+
+#: dialogs/investactivities.cpp:168
+msgid "%1 (Brokerage)"
+msgstr "%1 (Courtage)"
+
+#: dialogs/investactivities.cpp:200 dialogs/investactivities.cpp:288
+#: dialogs/investactivities.cpp:425 widgets/transaction.cpp:1548
+msgid "Price/share"
+msgstr "Prix par titre"
+
+#: dialogs/investactivities.cpp:586
+msgid "Ratio 1/"
+msgstr "Rapport 1/"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid ""
+"<p>Please check that all the details in the following dialog are correct and "
+"press OK.</p><p>Editable data can be changed and can either be applied to "
+"just this occurence or for all subsequent occurences for this schedule. "
+"(You will be asked what you intend after pressing OK in the following dialog)"
+"</p>"
+msgstr ""
+"<p>Merci de vérifier que les détails dans la fenêtre suivante sont corrects "
+"et d'appuyer sur OK.</p><p>Les données éditables peuvent être changées et "
+"appliquées juste à cette échéance, soit à toutes les échéances suivantes "
+"(Une question vous sera posée après avoir appuyé sur OK dans la fenêtre "
+"suivante).</p>"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid "Enter scheduled transaction"
+msgstr "Saisir une opération avec des échéances"
+
+#: dialogs/kcsvprogressdlg.cpp:65 dialogs/kexportdlg.cpp:65
+msgid "&Export"
+msgstr "&Exporter"
+
+#: dialogs/kexportdlg.cpp:67 dialogs/kimportdlg.cpp:68
+msgid "Start operation"
+msgstr "Démarrer l'opération"
+
+#: dialogs/kexportdlg.cpp:68
+msgid "Use this to start the export operation"
+msgstr "Utilisez ceci pour lancer l'exportation"
+
+#: dialogs/kexportdlg.cpp:71 dialogs/kimportdlg.cpp:72
+msgid "&Browse..."
+msgstr "&Parcourir ..."
+
+#: dialogs/kexportdlg.cpp:73 dialogs/kimportdlg.cpp:74
+msgid "Select filename"
+msgstr "Sélectionnez le nom du fichier"
+
+#: dialogs/kexportdlg.cpp:74 dialogs/kimportdlg.cpp:75
+msgid "Use this to select a filename to export to"
+msgstr "Utilisez ceci pour choisir un fichier vers lequel exporter"
+
+#: dialogs/kexportdlg.cpp:77 dialogs/kimportdlg.cpp:78
+#: dialogs/settings/ksettingsonlinequotes.cpp:64
+#: widgets/kmymoneyonlinequoteconfig.cpp:64
+msgid "&New..."
+msgstr "&Nouveau ..."
+
+#: dialogs/kexportdlg.cpp:79 dialogs/kimportdlg.cpp:80
+#: dialogs/mymoneyqifprofileeditor.cpp:96
+msgid "Create a new profile"
+msgstr "Créer un nouveau profil"
+
+#: dialogs/kexportdlg.cpp:80 dialogs/kimportdlg.cpp:81
+msgid "Use this to open the profile editor"
+msgstr "Utilisez ceci pour lancer l'éditeur de profil"
+
+#: dialogs/keditloanwizard.cpp:56
+msgid "Edit loan wizard"
+msgstr "Assistant - Éditer le Prêt"
+
+#: dialogs/keditloanwizard.cpp:58
+msgid ""
+"Please enter the date from which on the following changes will be effective. "
+"The date entered must be later than the opening date of this account (%1), "
+"but must not be in the future. The default will be today."
+msgstr ""
+"Veuillez saisir la date à partir de laquelle les modifications suivantes "
+"seront effectives. La date saisie doit être ultérieure à la date d'ouverture "
+"du compte (%1), mais ne doit pas être dans le futur. La valeur par défaut "
+"sera celle d'aujourd'hui."
+
+#: dialogs/keditloanwizard.cpp:76
+msgid ""
+"Note: you will not be able to modify this account today, because the opening "
+"date \"%1\" is in the future. Please revisit this dialog when the time has "
+"come."
+msgstr ""
+"Note : vous ne pourrez pas modifier ce compte aujourd'hui, car la date "
+"d'ouverture \"%1\" se trouve dans le futur. Merci de revoir cette fenêtre le "
+"moment voulu."
+
+#: dialogs/keditloanwizard.cpp:244
+msgid ""
+"Your previous selection was \"%1\". If you select another option, KMyMoney "
+"will dismiss the changes you have just entered. Do you wish to proceed?"
+msgstr ""
+"Votre sélection précédente était \"%1\". Si vous choisissez une autre "
+"option, KMyMoney annulera les changements que vous avez saisis. Voulez-vous "
+"continuer ?"
+
+#: dialogs/kcategoryreassigndlg.cpp:81
+msgid ""
+"At least one transaction/schedule still references the category <b>%1</b>. "
+"However, at least one category with the same currency must exist so that the "
+"transactions/schedules can be reassigned."
+msgstr ""
+"Au moins une opération ou échéance utilise encore cette catégorie <b>%1</b>. "
+"Cependant, au moins une catégorie doit exister pour que les opérations ou "
+"échéances puissent être réassignées."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid ""
+"This dialog does not allow to create new categories. Please pick a category "
+"from the list."
+msgstr ""
+"Cette boite de dialogue ne permet pas de créer de nouvelles catégories. "
+"Choisissez une catégorie de la liste."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid "Category creation"
+msgstr "Création de la catégorie"
+
+#: dialogs/kbackupdlg.cpp:61
+msgid "C&hoose..."
+msgstr "C&hoisir ..."
+
+#: dialogs/kbackupdlg.cpp:63
+msgid "Select mount point"
+msgstr "Choisir le point de montage"
+
+#: dialogs/kbackupdlg.cpp:64
+msgid "Use this to browse to the mount point."
+msgstr "Utilisez ceci pour aller au point de montage."
+
+#: dialogs/keditscheduledlg.cpp:293
+msgid "Next due date"
+msgstr "Date d'échéance suivante"
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid ""
+"You have turned on the GPG encryption support. This means, that new files "
+"will be stored encrypted. Existing files will not be encrypted "
+"automatically. To achieve encryption of existing files, please use the "
+"<b>File/Save as...</b> feature and store the file under a different name. "
+"Once confident with the result, feel free to delete the old file and rename "
+"the encrypted one to the old name."
+msgstr ""
+"Vous avez activé le support du cryptage GPG. Cela signifie que les nouveaux "
+"fichiers seront stockés cryptés. Les fichiers existants ne seront pas "
+"cryptées automatiquement. Pour réaliser le cryptage des fichiers, veuillez "
+"utiliser la fonction <b>Fichier/Enregistrer sous ...</b> et de sauvegarder "
+"le fichier sous un nom différent.Une fois convaincu du résultat, n'hésitez "
+"pas à supprimer l'ancien fichier et renommez le fichier crypté à l'ancien "
+"nom."
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid "GPG encryption activated"
+msgstr "Cryptage GPG activé"
+
+#: dialogs/settings/ksettingshome.cpp:51
+msgid "&Up"
+msgstr "&Haut"
+
+#: dialogs/settings/ksettingshome.cpp:53
+msgid "Move selected item up"
+msgstr "Déplacer l'objet sélectionné vers le haut"
+
+#: dialogs/settings/ksettingshome.cpp:54
+msgid "Use this to move the selected item up by one position in the list."
+msgstr ""
+"Utilisez ceci pour déplacer l'objet sélectionné d'une position vers le haut "
+"de la liste."
+
+#: dialogs/settings/ksettingshome.cpp:55
+msgid "&Down"
+msgstr "&Bas"
+
+#: dialogs/settings/ksettingshome.cpp:57
+msgid "Move selected item down"
+msgstr "Déplacer l'objet sélectionné vers le bas"
+
+#: dialogs/settings/ksettingshome.cpp:58
+msgid "Use this to move the selected item down by one position in the list."
+msgstr ""
+"Utilisez ceci pour déplacer l'objet sélectionné d'une position vers le bas "
+"de la liste."
+
+#: dialogs/settings/rc.cpp:1
+msgid "Color settings"
+msgstr "Choix de la couleur"
+
+#: dialogs/settings/rc.cpp:2
+msgid "Foreground"
+msgstr "Premier plan"
+
+#: dialogs/settings/rc.cpp:3
+msgid "Text colors"
+msgstr "Couleurs du texte"
+
+#: dialogs/settings/rc.cpp:4
+msgid "Grid color"
+msgstr "Couleur de la grille"
+
+#: dialogs/settings/rc.cpp:5
+msgid "Erronous transaction"
+msgstr "Opération erronée"
+
+#: dialogs/settings/rc.cpp:6
+msgid "Value with missing conversion rate"
+msgstr "Valeur avec un taux de conversion manquant"
+
+#: dialogs/settings/rc.cpp:7
+msgid "Negative value"
+msgstr "Valeur négative"
+
+#: dialogs/settings/rc.cpp:8
+msgid "Background"
+msgstr "Couleur de fond"
+
+#: dialogs/settings/rc.cpp:10
+msgid "List background colors"
+msgstr "Liste des couleurs de fond"
+
+#: dialogs/settings/rc.cpp:11
+msgid "Normal"
+msgstr "Normal"
+
+#: dialogs/settings/rc.cpp:12
+msgid "Alternate"
+msgstr "Alternatif"
+
+#: dialogs/settings/rc.cpp:13
+msgid "Special background colors"
+msgstr "Couleurs de fond spéciales"
+
+#: dialogs/settings/rc.cpp:14
+msgid "Ledger group separator"
+msgstr "Séparateur de groupe du registre"
+
+#: dialogs/settings/rc.cpp:15
+msgid "Required field"
+msgstr "Champ requis"
+
+#: dialogs/settings/rc.cpp:16
+msgid "Imported transaction"
+msgstr "Opération Importée"
+
+#: dialogs/settings/rc.cpp:17
+msgid "Matched transaction"
+msgstr "Opération correspondante"
+
+#: dialogs/settings/rc.cpp:18
+msgid "Font settings"
+msgstr "Paramètres de la police"
+
+#: dialogs/settings/rc.cpp:19
+msgid "Use system fonts"
+msgstr "Utiliser les polices du système"
+
+#: dialogs/settings/rc.cpp:20
+msgid "Individual font settings"
+msgstr "Paramètres de police individuelle"
+
+#: dialogs/settings/rc.cpp:24
+msgid "Number of Days of Account Cycle:"
+msgstr "Nombre de jours pour le cycle des comptes :"
+
+#: dialogs/settings/rc.cpp:26
+msgid "Number of Days to Forecast:"
+msgstr "Nombre de jours pour les prévisions :"
+
+#: dialogs/settings/rc.cpp:27
+msgid "Forecast Method"
+msgstr "Méthode des prévisions"
+
+#: dialogs/settings/rc.cpp:28
+msgid "Scheduled and Future Transactions"
+msgstr "Opérations avec échéance ou futures"
+
+#: dialogs/settings/rc.cpp:29
+msgid "History-based"
+msgstr "Basé sur l'historique"
+
+#: dialogs/settings/rc.cpp:30
+msgid "History-based settings"
+msgstr "Paramètres de base de l'historique"
+
+#: dialogs/settings/rc.cpp:31
+msgid "Number of Cycles to use in Forecast:"
+msgstr "Nombre de cycles à utiliser au premier plan :"
+
+#: dialogs/settings/rc.cpp:36
+msgid "General Settings"
+msgstr "Paramètres généraux"
+
+#: dialogs/settings/rc.cpp:37
+msgid "Global"
+msgstr "Global"
+
+#: dialogs/settings/rc.cpp:38
+msgid "Startup page options"
+msgstr "Options de la page de démarrage"
+
+#: dialogs/settings/rc.cpp:39
+msgid "Start with homepage"
+msgstr "Démarrer avec la page d'accueil"
+
+#: dialogs/settings/rc.cpp:40
+msgid "Start with last selected view"
+msgstr "Démarrer avec la dernière page sélectionnée"
+
+#: dialogs/settings/rc.cpp:41
+msgid "Precision settings"
+msgstr "Paramètres de précision"
+
+#: dialogs/settings/rc.cpp:42
+msgid "Price precision"
+msgstr "Précision des cours"
+
+#: dialogs/settings/rc.cpp:43
+msgid "digits"
+msgstr "chiffres"
+
+#: dialogs/settings/rc.cpp:44
+msgid "Autosave options"
+msgstr "Options de sauvegarde automatique"
+
+#: dialogs/settings/rc.cpp:45
+msgid "Autosave periodically"
+msgstr "Sauvegarde automatique périodiquement"
+
+#: dialogs/settings/rc.cpp:46
+msgid "minutes"
+msgstr "minutes"
+
+#: dialogs/settings/rc.cpp:47
+msgid "Fiscal Year"
+msgstr "Année fiscale"
+
+#: dialogs/settings/rc.cpp:48
+msgid "Your fiscal year starts on"
+msgstr "Votre année fiscale commence le"
+
+#: dialogs/settings/rc.cpp:49
+msgid "January"
+msgstr "Janvier"
+
+#: dialogs/settings/rc.cpp:50
+msgid "February"
+msgstr "Février"
+
+#: dialogs/settings/rc.cpp:51
+msgid "March"
+msgstr "Mars"
+
+#: dialogs/settings/rc.cpp:52
+msgid "April"
+msgstr "Avril"
+
+#: dialogs/settings/rc.cpp:53
+msgid "May"
+msgstr "Mai"
+
+#: dialogs/settings/rc.cpp:54
+msgid "June"
+msgstr "Juin"
+
+#: dialogs/settings/rc.cpp:55
+msgid "July"
+msgstr "Juillet"
+
+#: dialogs/settings/rc.cpp:56
+msgid "August"
+msgstr "Août"
+
+#: dialogs/settings/rc.cpp:57
+msgid "September"
+msgstr "Septembre"
+
+#: dialogs/settings/rc.cpp:58
+msgid "October"
+msgstr "Octobre"
+
+#: dialogs/settings/rc.cpp:59
+msgid "November"
+msgstr "Novembre"
+
+#: dialogs/settings/rc.cpp:60
+msgid "December"
+msgstr "Décembre"
+
+#: dialogs/settings/rc.cpp:61
+msgid "Views"
+msgstr "Vues"
+
+#: dialogs/settings/rc.cpp:62
+msgid "Synchronize account selection of ledger and investment view"
+msgstr ""
+"Synchroniser la sélection du compte dans les vues grand livre et "
+"investissement"
+
+#: dialogs/settings/rc.cpp:63
+msgid ""
+"Check the views you want to enable, uncheck those you want to hide, because "
+"you don't need the functionality."
+msgstr ""
+"Cochez les vues que vous voulez afficher, décochez celles que vous voulez "
+"cacher, parce que vous n'avez pas besoin de la fonctionnalité."
+
+#: dialogs/settings/rc.cpp:64
+msgid "Icon size of navigation bar"
+msgstr "Taille de l'icône dans la barre de navigation"
+
+#: dialogs/settings/rc.cpp:65
+msgid "Micro (16px)"
+msgstr "Micro (16px)"
+
+#: dialogs/settings/rc.cpp:66
+msgid "Small (32px)"
+msgstr "Petite (32px)"
+
+#: dialogs/settings/rc.cpp:67
+msgid "Normal (48px)"
+msgstr "Normale (48px)"
+
+#: dialogs/settings/rc.cpp:68
+msgid "Large (64px)"
+msgstr "Grande (64px)"
+
+#: dialogs/settings/rc.cpp:69
+msgid "Show title bar on each page"
+msgstr "Afficher la barre de titre sur chaque page"
+
+#: dialogs/rc.cpp:835 dialogs/settings/rc.cpp:70
+msgid "Filter"
+msgstr "Filtre"
+
+#: dialogs/settings/rc.cpp:71
+msgid "Accounts / Categories"
+msgstr "Comptes / Catégories"
+
+#: dialogs/settings/rc.cpp:72
+msgid "Don't show unused categories"
+msgstr "Masquer les catégories inutilisées"
+
+#: dialogs/settings/rc.cpp:73
+msgid ""
+"This option hides all categories in the categories view that are not used in "
+"at least a single transaction. They are still shown in the category "
+"selection lists."
+msgstr ""
+"Cette option masque toutes les catégories dans la vue des catégories qui ne "
+"sont pas utilisés par au moins une opération. Elles seront encore affichés "
+"dans la listes de sélection des catégories."
+
+#: dialogs/settings/rc.cpp:74
+msgid "Don't show closed accounts"
+msgstr "Ne pas afficher les comptes fermés"
+
+#: dialogs/settings/rc.cpp:75
+msgid ""
+"This option hides all accounts that have been closed by the user in views "
+"and selection lists.\n"
+"\n"
+"You can use <b>View/Show all accounts</b> to temporarily show hidden "
+"accounts in the views."
+msgstr ""
+"Cette option cache tous les comptes qui ont été fermés par l'utilisateur "
+"dans les fenêtres et dans les listes de sélection.\n"
+"\n"
+"Vous pouvez utiliser <b> Voir / Afficher tous les comptes </b> pour montrer "
+"temporairement dans les comptes cachés dans les fenêtres."
+
+#: dialogs/settings/rc.cpp:76
+msgid "Show equity accounts"
+msgstr "Montrer les comptes d'actions"
+
+#: dialogs/rc.cpp:332 dialogs/settings/rc.cpp:77 widgets/rc.cpp:160
+msgid "Schedules"
+msgstr "Échéances"
+
+#: dialogs/settings/rc.cpp:78
+msgid "Don't show finished schedules"
+msgstr "Ne pas afficher les échéances terminées"
+
+#: dialogs/settings/rc.cpp:79
+msgid "This option hides all finished schedules in the schedules view."
+msgstr ""
+"Cette option cache toutes les échéances terminées dans la fenêtre Échéance."
+
+#: dialogs/settings/rc.cpp:81
+msgid "Don't show transactions prior to"
+msgstr "Ne pas afficher les opérations avant le"
+
+#: dialogs/settings/rc.cpp:82
+msgid "Don't show reconciled transactions"
+msgstr "Ne pas afficher les opérations rapprochées"
+
+#: dialogs/settings/rc.cpp:83
+msgid "This option hides all reconciled transactions in the ledger view."
+msgstr ""
+"Cette option cache tous opérations rapprochées dans le fenêtre Registre."
+
+#: dialogs/settings/rc.cpp:84 widgets/rc.cpp:22
+msgid "GPG encryption settings"
+msgstr "Paramètres du chiffrement GPG"
+
+#: dialogs/settings/rc.cpp:85
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Access to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>additional recovery encryption</i> is only accessible, if the "
+"necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id "
+"0x8AFDDC8E is found in your keyring."
+msgstr ""
+"Cette page vous permet de spécifier les paramètres pour le stockage du "
+"fichier crypté de vos données de <b>KMyMoney</b> basées sur <b>GPG</b>.<p>\n"
+"L'accès aux paramètres est désactivé si <b>GPG</b> ne peut pas être détecté "
+"sur votre système. Dans ce cas, veuillez vous s'assurer que <b>GPG</b> "
+"fonctionne correctement pour l'utilisateur courant.<p>\n"
+"Le groupe <i>Rétablissement du chiffrage</i> est seulement accessible, si la "
+"clé nécessaire pour <b>kmymoney-recover@users.sourceforge.net</b> avec "
+"l'identification 0x8AFDDC8E est trouvée dans votre portefeuille de clés."
+
+#: dialogs/settings/rc.cpp:86 widgets/rc.cpp:24
+msgid "Use GPG encryption"
+msgstr "Utiliser le cryptage GPG"
+
+#: dialogs/settings/rc.cpp:87
+msgid "GPG encryption"
+msgstr "Cryptage GPG"
+
+#: dialogs/settings/rc.cpp:88
+msgid "Your key"
+msgstr "Votre clé"
+
+#: dialogs/settings/rc.cpp:89
+msgid ""
+"This combo box lists all the secret keys you have in your keyring. Select "
+"the one you want to use for encryption when saving to a file."
+msgstr ""
+"Cette fenêtre liste toutes les clés secrètes que vous avez dans votre "
+"portefeuille de clés. Sélectionnez celle que vous voulez utiliser pour le "
+"cryptage lors de la sauvegarde dans un fichier."
+
+#: dialogs/settings/rc.cpp:90
+msgid "Additonal keys"
+msgstr "Clés additionnelles"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:50 dialogs/settings/rc.cpp:91
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading 0x."
+msgstr ""
+"Saisissez la clé d'identification que vous voulez utiliser pour le cryptage "
+"de données. Cela peut-être une adresse émail ou une clé hexadécimale. Pour "
+"la clé hexadécimale, n'oubliez pas l'entête 0x."
+
+#: dialogs/settings/rc.cpp:92 widgets/rc.cpp:28
+msgid ""
+"This symbol denotes, if the key for the given user id has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"Ce symbole montre si la clé pour l'utilisateur spécifié a été trouvée dans "
+"votre porte-clés. Il est vert une fois la clé trouvée, foncé autrement."
+
+#: dialogs/kgpgkeyselectiondlg.cpp:61 dialogs/settings/rc.cpp:93
+msgid "Keys for all of the above user ids found"
+msgstr "Clés trouvées pour tous les utilisateurs précédents"
+
+#: dialogs/settings/rc.cpp:94 widgets/rc.cpp:31
+msgid ""
+"This symbol denotes, if the KMyMoney recovery key has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"Ce symbole montre si la clé de récupération KMyMoney a été trouvée dans "
+"votre porte-clés. Il est vert une fois la clé trouvée, foncé autrement."
+
+#: dialogs/settings/rc.cpp:95
+msgid "Recover Key available in keyring"
+msgstr "Clé de récupération disponible dans votre portefeuille"
+
+#: dialogs/settings/rc.cpp:96
+msgid "Also encrypt with KMyMoney's recover key"
+msgstr "Crypter également avec la clé de récupération KMyMoney"
+
+#: dialogs/settings/rc.cpp:97
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out.."
+msgstr ""
+"Vous pouvez indiquer pour crypter les données également avec la clé de "
+"récupération KMyMoney. Seul les développeurs du noyau de KMyMoney sont en "
+"possession de la clé privée exigée pour relire des telles données cryptées."
+"<p> \n"
+"Ce mécanisme est prévu pour le cas où vous auriez perdu votre clé et que "
+"vous ne pourriez plus accéder à vos données. Cette option activée, seuls les "
+"développeurs de KMyMoney peuvent décrypter vos données et vous les fournir "
+"sous une forme lisible. Soyez conscient que vous devrez répondre à quelques "
+"questions détaillées au sujet du contenu de vos données avant que nous vous "
+"les renvoyions."
+
+#: dialogs/settings/rc.cpp:98
+msgid "Homepage Settings"
+msgstr "Paramètres de la page d'accueil"
+
+#: dialogs/settings/rc.cpp:99
+msgid "Up"
+msgstr "Haut"
+
+#: dialogs/settings/rc.cpp:100
+msgid "Down"
+msgstr "Bas"
+
+#: dialogs/settings/rc.cpp:101
+msgid ""
+"Selected entries are shown on the home page of the application.<p>\n"
+"Use the buttons and checkboxes to customize the layout of the home page."
+msgstr ""
+"Les saisies sélectionnées sont affichées sur la page d'accueil du "
+"programme.\n"
+"\n"
+"Utilisez les boutons et les cases pour personnaliser l'affichage de la page "
+"d'accueil."
+
+#: dialogs/settings/rc.cpp:102
+msgid "Homepage/Summary page font scaling"
+msgstr "Échelle de la police pour la page d'accueil ou de résumé"
+
+#: dialogs/settings/rc.cpp:103
+msgid "Percentage of default font size:"
+msgstr "Pourcentage de la taille de la police par défaut :"
+
+#: dialogs/settings/rc.cpp:104
+msgid ""
+"Remember font size when leaving the program if manually changed with mouse-"
+"wheel"
+msgstr ""
+"Se rappeler la taille de la police lors de la sortie du programme en cas de "
+"changement manuel avec la molette de la souris"
+
+#: dialogs/settings/rc.cpp:105
+msgid "Information display"
+msgstr "Information affichée"
+
+#: dialogs/settings/rc.cpp:106
+msgid "Show Account Limit Information"
+msgstr "Affiche les informations sur les limites des comptes"
+
+#: dialogs/settings/rc.cpp:110 widgets/rc.cpp:47
+msgid ""
+"<i>Enter regular expressions which can be used to parse the data returned "
+"from the URL entered above. The symbol, price, and date must be found in "
+"the quote data to be usable. You may also try the KMyMoney user's "
+"mailinglist at <a href=\"mailto:kmymoney2-user@lists.sourceforge.net"
+"\">kmymoney2-user@lists.sourceforge.net</a> to find what settings work for "
+"other users in your country.</i>"
+msgstr ""
+"<i>Entrez les expressions régulières qui peuvent être employées pour "
+"analyser les données retournées de l'URL écrite ci-dessus. Le symbole, le "
+"prix, et la date doivent être trouvés dans les données pour être "
+"utilisables. Vous pouvez également essayer d'envoyer un émail aux "
+"utilisateurs de KMyMoney à<a href=\"mailto:kmymoney2-user@lists.sourceforge."
+"net \">kmymoney2-user@lists.sourceforge.net</a> pour trouver quels "
+"paramètres fonctionnent pour d'autres utilisateurs dans votre pays.</i>"
+
+#: dialogs/settings/rc.cpp:113 widgets/rc.cpp:38
+msgid "Regular Expression to extract the symbol from the downloaded data"
+msgstr ""
+"Expression Régulière pour extraire le symbole depuis les données télé-"
+"chargées"
+
+#: dialogs/settings/rc.cpp:114 widgets/rc.cpp:39
+msgid "Regular Expression to extract the price from the downloaded data"
+msgstr ""
+"Expression Régulière pour extraire le prix depuis les données télé-chargées"
+
+#: dialogs/settings/rc.cpp:115 widgets/rc.cpp:41
+msgid "URL to be used to download the quote"
+msgstr "URL habituelle pour télé-charger la cotation"
+
+#: dialogs/settings/rc.cpp:116 widgets/rc.cpp:42
+msgid ""
+"Enter the URL from which stock quotes will be fetched. <b>%1</b> will be "
+"replaced with the symbol for the security being quoted. For currency "
+"conversions, <b>%2</b> will be replaced with the currency to be quoted and "
+"<b>%1</b> with the currency the quote is based on."
+msgstr ""
+"Entrez l'URL à partir de laquelle seront rapatriées les cotations. <b>%1</b> "
+"sera remplacé par le symbole de la valeur boursière cotée. Pour la "
+"conversion de devise, <b>%2</b> sera remplacé par la devise devant être "
+"cotée et <b>%1</b> avec la devise sur laquelle la cote est basée."
+
+#: dialogs/settings/rc.cpp:118 dialogs/settings/rc.cpp:121 widgets/rc.cpp:40
+#: widgets/rc.cpp:44
+msgid "Regular Expression to extract the date from the downloaded data"
+msgstr ""
+"Expression Régulière pour extraire la date depuis les données télé-chargées"
+
+#: dialogs/rc.cpp:807 dialogs/settings/rc.cpp:119 widgets/rc.cpp:45
+msgid "Date Format"
+msgstr "Format de Date"
+
+#: dialogs/settings/rc.cpp:122
+msgid "Skip HTML stripping"
+msgstr "Sauter les suppressions HTML"
+
+#: dialogs/settings/rc.cpp:123
+msgid ""
+"<p>For easier processing of the data returned by the online source, KMyMoney "
+"usually strips unused parts before it is parsed with the regular "
+"expressions. If matching of the fields relies on those items, then use this "
+"option to turn stripping off.</p>\n"
+"\n"
+"<p>The following items are usually removed by stripping:\n"
+"\n"
+"<ul>\n"
+"<li>HTML tags such as <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded characters such as <b>&amp;nbsp;</b></li>\n"
+"<li>duplicate whitespace</li>\n"
+"</ul>\n"
+"</p>"
+msgstr ""
+"<p>Pour un traitement plus facile des données fournies par la source en "
+"ligne, KMyMoney supprime généralement des parties non utiles afin qu'elles "
+"ne soient pas traitées par les expressions régulières. Si des champs "
+"correspondent à ces éléments, alors utilisez cette option les supprimer.</"
+"p>\n"
+"\n"
+"<p>Les éléments suivants sont habituellement supprimés :\n"
+"\n"
+"<ul>\n"
+"<li>balises HTML comme <b>&lt;tag&gt;</b></li>\n"
+"<li>& caractères encodés comme <b>&amp;nbsp;</b></li>\n"
+"<li>espace dupliqué</li>\n"
+"</ul>\n"
+"</p>"
+
+#: dialogs/settings/rc.cpp:127
+msgid "Register settings"
+msgstr "Paramètres du registre"
+
+#: dialogs/settings/rc.cpp:128
+msgid "Display"
+msgstr "Afficher"
+
+#: dialogs/settings/rc.cpp:131
+msgid ""
+"Using the ledger lens shows the details for the transaction that has focus "
+"in the ledger. Usually, when using the transaction form, only a one line "
+"summary is displayed for each transaction as the details are shown in the "
+"form."
+msgstr ""
+"Utiliser la loupe dans le registre montre les détails de l'opération qui est "
+"sélectionnée dans le registre. Habituellement, lors de l'utilisation du "
+"formulaire d'opérations, seul un résumé d'une ligne est affichée pour chaque "
+"opération, les détails sont affichés dans le formulaire."
+
+#: dialogs/settings/rc.cpp:133
+msgid "Always show a No. field"
+msgstr "Toujours afficher un champ N°"
+
+#: dialogs/settings/rc.cpp:134
+msgid "Show group header between transactions"
+msgstr "Afficher une entête de groupe entre les opérations"
+
+#: dialogs/settings/rc.cpp:135
+msgid ""
+"Draws a larger header above each group of transaction. The grouping depends "
+"on the current sort order."
+msgstr ""
+"Affiche une largeur d'en-tête au dessus de chaque groupe d'opérations. Le "
+"groupement dépend de l'ordre du tri actuel."
+
+#: dialogs/settings/rc.cpp:136
+msgid "Show header for the previous and current fiscal year"
+msgstr "Afficher l'en-tête pour l'exercice précédent et courant"
+
+#: dialogs/settings/rc.cpp:137
+msgid "Sorting"
+msgstr "Tri"
+
+#: dialogs/settings/rc.cpp:138
+msgid "Normal view"
+msgstr "Vue normale"
+
+#: dialogs/settings/rc.cpp:139
+msgid "Reconciliation view"
+msgstr "Vue Rapprochement"
+
+#: dialogs/settings/rc.cpp:140
+msgid "Search view"
+msgstr "Vue Recherche"
+
+#: dialogs/settings/rc.cpp:141
+msgid ""
+"Use the <i>left</i> and <i>right</i> buttons to add and remove sort options. "
+"Use the <i>up</i> and <i>down</i> buttons to modify the sort order. Double-"
+"Click a selected entry to toggle the sort order between <i>ascending</i> and "
+"<i>descending</i>."
+msgstr ""
+"Utilisez les boutons <i>gauche</i> et <i>droit</i> pour ajouter et supprimer "
+"les options de tri. Utilisez les boutons <i>haut</i> et <i>bas</i> pour "
+"modifier l'ordre de tri. Double-cliquez sur une saisie sélectionnée pour "
+"changer l'ordre de tri entre <i>montant</i> et <i>descendant</i>."
+
+#: dialogs/settings/rc.cpp:142
+msgid "Data entry"
+msgstr "Saisie de données"
+
+#: dialogs/settings/rc.cpp:146
+msgid "Use Enter to move between fields"
+msgstr "Utiliser la touche Entrée pour vous déplacer dans les champs"
+
+#: dialogs/settings/rc.cpp:147
+msgid "Match names from start"
+msgstr "Rechercher la correspondance des noms depuis le début"
+
+#: dialogs/settings/rc.cpp:148
+msgid ""
+"Mark this option, if you always want to match names e.g. for payees from the "
+"start. If unset, any substring is matched."
+msgstr ""
+"Cochez cette option, si vous voulez toujours la correspondance des noms, par "
+"exemple pour les tiers, depuis le début. Si décoché, toutes les sous-chaînes "
+"correspondront."
+
+#: dialogs/settings/rc.cpp:149
+msgid "Default reconciliation state"
+msgstr "État de rapprochement par défaut"
+
+#: dialogs/rc.cpp:227 dialogs/settings/rc.cpp:150
+#: widgets/kmymoneycombo.cpp:348 widgets/registersearchline.cpp:84
+msgid "Not reconciled"
+msgstr "Non rapproché"
+
+#: dialogs/rc.cpp:228 dialogs/settings/rc.cpp:151
+#: widgets/kmymoneycombo.cpp:347 widgets/registersearchline.cpp:85
+msgid "Cleared"
+msgstr "Pointé"
+
+#: dialogs/settings/rc.cpp:153
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation "
+"of an account"
+msgstr ""
+"État de rapprochement par défaut pour les opérations pendant le "
+"rapprochement d'un compte"
+
+#: dialogs/settings/rc.cpp:154
+msgid "Autofill"
+msgstr "Remplissage automatique"
+
+#: dialogs/settings/rc.cpp:155
+msgid "No Autofill"
+msgstr "Pas de remplissage automatique"
+
+#: dialogs/settings/rc.cpp:156
+msgid "Don't do autofill of transaction data at all."
+msgstr "Ne pas remplir automatiquement les données de l'opération"
+
+#: dialogs/settings/rc.cpp:157
+msgid "Same transaction if amount differs less than"
+msgstr "Opération identique si le montant diffère de moins de"
+
+#: dialogs/settings/rc.cpp:158
+msgid ""
+"Collect all transactions for the given payee. Treat all transactions that "
+"refer to the same category and have an amount with +/- X % as identical. If "
+"more than one transaction is found, a list of them is presented to the "
+"user.\n"
+"\n"
+"Selecting 0% will list all transactions."
+msgstr ""
+"Recueillir toutes les opérations pour le tiers donné. Traiter toutes les "
+"opérations qui se réfère à la même catégorie et ont un montant de +/- X% "
+"comme identiques. Si plus d'une opération est trouvée, la liste de ces "
+"opérations sera présentée à l'utilisateur.\n"
+"\n"
+"Sélectionner 0% affichera toutes les opérations."
+
+#: dialogs/settings/rc.cpp:159
+msgid ""
+"Two transactions are usually treated identical for autofill, if they refer "
+"the same accounts. They are treated as different transactions though, when "
+"their amount varies by more than the percentage given here."
+msgstr ""
+"Deux opérations seront considérées identiques par la saisie automatique si "
+"elles font référence au même compte. Elles seront considérées comme "
+"différentes si leurs montants varient d'un pourcentage supérieur à celui "
+"indiqué ici."
+
+#: dialogs/settings/rc.cpp:160
+msgid ""
+"_: Same transaction if amount differs less than percent.\n"
+"percent."
+msgstr "pour cent."
+
+#: dialogs/settings/rc.cpp:161
+msgid "with previously most often used transaction for the payee"
+msgstr "Avec l'opération précédente le plus souvent utilisée pour le tiers"
+
+#: dialogs/settings/rc.cpp:162
+msgid ""
+"The data of the last transaction assigned to the category used most often "
+"for this payee is autofilled into the transaction editor."
+msgstr ""
+"Les données de la dernière opération attribuées à la catégorie la plus "
+"souvent utilisée pour ce tiers sont remplies automatiquement dans l'éditeur "
+"de transaction."
+
+#: dialogs/settings/rc.cpp:164
+msgid "Match transactions within days"
+msgstr "Faire correspondre les opérations des jours suivants"
+
+#: dialogs/settings/rc.cpp:165
+msgid ""
+"Search for matching transactions within the range of the posting date of the "
+"imported transaction +/- the number of given days."
+msgstr ""
+"Rechercher les opérations correspondantes dans l'intervalle de date sur +/- "
+"de nombre fourni de jours pour l'opération importée."
+
+#: dialogs/settings/rc.cpp:166
+msgid "Ask for a new payee's default category"
+msgstr "Demander pour un nouveau tiers la catégorie par défaut"
+
+#: dialogs/settings/rc.cpp:167
+msgid ""
+"Whenever a new payee is detected during import of a statement, the user will "
+"be asked to assign a default category for this user when this option is "
+"selected."
+msgstr ""
+"Quand un nouveau tiers est détecté pendant l'importation d'un relevé, il "
+"sera demandé à l'utilisateur de définir une catégorie par défaut pour ce "
+"tiers quand l'option est sélectionnée."
+
+#: dialogs/settings/rc.cpp:168
+msgid "Schedule Settings"
+msgstr "Paramètres des échéances"
+
+#: dialogs/settings/rc.cpp:169
+msgid "Startup options"
+msgstr "Options de la page de démarrage"
+
+#: dialogs/settings/rc.cpp:170
+msgid "Check schedules on startup"
+msgstr "Vérifier les échéances au démarrage"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:60
+#: widgets/kmymoneyonlinequoteconfig.cpp:60
+msgid "Delete the selected source entry"
+msgstr "Supprimer la source sélectionnée"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:61
+#: widgets/kmymoneyonlinequoteconfig.cpp:61
+msgid "Use this to delete the selected online source entry"
+msgstr "Utiliser ceci pour supprimer la source en ligne sélectionnée"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:66
+#: widgets/kmymoneyonlinequoteconfig.cpp:66
+msgid "Create a new source entry for online quotes"
+msgstr "Créer une nouvelle source pour les cotations en ligne"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:67
+#: widgets/kmymoneyonlinequoteconfig.cpp:67
+msgid "Use this to create a new entry for online quotes"
+msgstr ""
+"Utilisez ce bouton pour créer une nouvelle saisie pour les cotations en ligne"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:107
+#: dialogs/settings/ksettingsonlinequotes.cpp:190
+#: dialogs/settings/ksettingsonlinequotes.cpp:193
+#: dialogs/settings/ksettingsonlinequotes.cpp:216
+#: widgets/kmymoneyonlinequoteconfig.cpp:107
+#: widgets/kmymoneyonlinequoteconfig.cpp:185
+#: widgets/kmymoneyonlinequoteconfig.cpp:188
+#: widgets/kmymoneyonlinequoteconfig.cpp:211
+msgid "New Quote Source"
+msgstr "Nouvelle Source de Cotation"
+
+#: dialogs/ksplittransactiondlg.cpp:77 dialogs/rc.cpp:788
+msgid "Clear &All"
+msgstr "&Supprimer Tout"
+
+#: dialogs/ksplittransactiondlg.cpp:79
+msgid "Clear all splits"
+msgstr "Supprimer toutes les parties"
+
+#: dialogs/ksplittransactiondlg.cpp:80
+msgid "Use this to clear all splits of this transaction"
+msgstr "Utilisez ceci pour supprimer toutes les parties de l'opération"
+
+#: dialogs/ksplittransactiondlg.cpp:84
+msgid "&Merge"
+msgstr "&Fusionner"
+
+#: dialogs/ksplittransactiondlg.cpp:183
+msgid ""
+"The total amount of this transaction is %1 while the sum of the splits is %"
+"2. The remaining %3 are unassigned."
+msgstr ""
+"Le montant total de l'opération est %1, tandis que la somme des parties est %"
+"2. Les %3 restants ne sont pas attribués."
+
+#: dialogs/ksplittransactiondlg.cpp:191
+#, c-format
+msgid "Change &total amount of transaction to %1."
+msgstr "Changer le montant &total de l'opération pour %1."
+
+#: dialogs/ksplittransactiondlg.cpp:194
+msgid "&Distribute difference of %1 among all splits."
+msgstr "&Distribuer la différence de %1 entre toutes les parties."
+
+#: dialogs/ksplittransactiondlg.cpp:203
+#, c-format
+msgid "&Leave total amount of transaction at %1."
+msgstr "&Laisser le montant total de l'opération pour %1."
+
+#: dialogs/ksplittransactiondlg.cpp:205
+msgid "&Leave %1 unassigned."
+msgstr "&Laisser %1 non attribué."
+
+#: dialogs/ksplittransactiondlg.cpp:275
+msgid ""
+"You are about to delete all splits of this transaction. Do you really want "
+"to continue?"
+msgstr ""
+"Vous êtes sur le point de supprimer toutes les parties de l'opération. "
+"Voulez-vous continuer ?"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:97
+msgid "Use this to create a new QIF import/export profile"
+msgstr ""
+"Utilisez ceci pour créer un nouveau profil d'importation / exportation QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:148
+#: dialogs/mymoneyqifprofileeditor.cpp:403 dialogs/rc.cpp:797
+msgid "QIF Profile Editor"
+msgstr "Éditeur de profil QIF (Quicken Interchange Format)"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:150
+msgid "QIF Profile Selector"
+msgstr "Sélecteur du profil QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:236
+msgid "The default QIF profile"
+msgstr "Le profil QIF par défaut"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:404
+#: dialogs/mymoneyqifprofileeditor.cpp:417
+msgid "Enter new profile name"
+msgstr "Entrez le nom du nouveau profil"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:436
+msgid "Do you really want to delete profile '%1'?"
+msgstr "Voulez-vous vraiment supprimer le profil '%1' ?"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:38
+msgid "Select additional keys"
+msgstr "Sélectionnez des clés additionnels"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:48 widgets/rc.cpp:25
+msgid "User identification"
+msgstr "Identification de l'utilisateur"
+
+#: dialogs/kendingbalancedlg.cpp:71
+msgid ""
+"Please enter the following fields with the information as you find them on "
+"your statement. Make sure to enter all values in <b>%1</b>."
+msgstr ""
+"Merci de remplir les champs suivants avec les informations que vous "
+"trouverez sur votre relevé. Assurez-vous de saisir toutes les valeurs en <b>%"
+"1</b>."
+
+#: dialogs/kendingbalancedlg.cpp:124
+#, c-format
+msgid "Last reconciled statement: %1"
+msgstr "Dernier relevé rapproché : %1"
+
+#: dialogs/kendingbalancedlg.cpp:437 dialogs/kendingbalancedlg.cpp:577
+#: dialogs/rc.cpp:137
+msgid "Adjustment transaction"
+msgstr "Opération d'ajustement"
+
+#: dialogs/kendingbalancedlg.cpp:510
+msgid ""
+"KMyMoney has calculated the following amounts for interest and amortization "
+"according to recorded payments between %1 and %2."
+msgstr ""
+"KMyMoney a calculé les montants suivants pour l'intérêt et l'amortissement "
+"selon les paiements enregistrés entre %1 et %2."
+
+#: dialogs/kbalancechartdlg.cpp:59
+#, c-format
+msgid "Balance of %1"
+msgstr "Solde de %1"
+
+#: dialogs/kbalancechartdlg.cpp:70
+msgid "%1 Balance History"
+msgstr "%1 Historique du solde"
+
+#: dialogs/kmymoneysplittable.cpp:98
+msgid "Split Options"
+msgstr "Options de répartition"
+
+#: dialogs/kmymoneysplittable.cpp:99 dialogs/rc.cpp:731
+#: widgets/kmymoneypriceview.cpp:149
+msgid "Edit..."
+msgstr "Éditer ..."
+
+#: dialogs/kmymoneysplittable.cpp:100
+msgid "Duplicate"
+msgstr "Dupliquer"
+
+#: dialogs/kmymoneysplittable.cpp:102
+msgid "Delete ..."
+msgstr "Supprimer ..."
+
+#: dialogs/kmymoneysplittable.cpp:275
+msgid ""
+"_: Duplicate split\n"
+"CTRL+c"
+msgstr "CTRL+c"
+
+#: dialogs/kmymoneysplittable.cpp:562
+msgid "will be calculated"
+msgstr "sera calculé"
+
+#: dialogs/kmymoneysplittable.cpp:648
+msgid ""
+"You are about to delete the selected split. Do you really want to continue?"
+msgstr ""
+"Vous êtes sur le point de supprimer la répartition sélectionnée. Voulez-vous "
+"vraiment continuer ?"
+
+#: dialogs/rc.cpp:1
+msgid "Account selection"
+msgstr "Choix du compte"
+
+#: dialogs/rc.cpp:3
+msgid "Account to import to"
+msgstr "Compte à importer vers"
+
+#: dialogs/rc.cpp:6 dialogs/rc.cpp:170 widgets/rc.cpp:169
+msgid "Skip"
+msgstr "Sauter"
+
+#: dialogs/rc.cpp:8
+msgid ""
+"Use this dialog to backup your data. \n"
+"\n"
+"Please make sure you have a disk inserted and that the drive is ready. Then "
+"choose the mount point from either the Choose button or by entering the path "
+"in the available box.\n"
+"\n"
+"Click OK to perform the backup. If your system does not use an automounter, "
+"make sure you mark the checkbox below to \"mount this directory before "
+"backing up.\""
+msgstr ""
+"Utilisez cette fenêtre pour effectuer une copie de sauvegarde de vos "
+"données. \n"
+"\n"
+"Vérifiez qu'une disquette est insérée et que le lecteur est prêt. Choisissez "
+"ensuite le point de montage, soit avec le bouton Choisir, soit en saisissant "
+"le chemin dans la boîte de dialogue.\n"
+"\n"
+"Appuyez sur OK pour effectuer la sauvegarde, après avoir vérifié que vous "
+"ayez bien coché la case \"Monter ce dossier avant de sauvegarder\" dans le "
+"cas où votre système n'utilise pas la fonction \"automount.\""
+
+#: dialogs/rc.cpp:9
+msgid "Device options"
+msgstr "Options du périphérique"
+
+#: dialogs/rc.cpp:10
+msgid ""
+"_: This is the mount point\n"
+"Mount Point:"
+msgstr "Point de montage :"
+
+#: dialogs/rc.cpp:11
+msgid "Choose..."
+msgstr "Choisir ..."
+
+#: dialogs/rc.cpp:12
+msgid "Mount this directory before backing up."
+msgstr "Monter ce dossier avant de sauvegarder."
+
+#: dialogs/rc.cpp:15
+msgid "Reassign categories"
+msgstr "Réassigner des catégories"
+
+#: dialogs/rc.cpp:16
+msgid ""
+"The transactions, schedules and budgets associated with the selected "
+"category need to be re-assigned to a different category before the selected "
+"category can be deleted. Please select a category from the list below."
+msgstr ""
+"Les opérations, échéances ou budget associées avec les catégories choisis "
+"nécessitent d'être réassignées à une catégorie différente avant que la "
+"catégorie sélectionnée soit supprimée. Merci de choisir une catégorie dans "
+"la liste en dessous."
+
+#: dialogs/rc.cpp:17
+msgid "Available categories:"
+msgstr "Catégories disponibles :"
+
+#: dialogs/rc.cpp:21
+msgid ""
+"Please choose the type of import you wish to perform. A simple "
+"explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Merci de choisir le type d'importation que vous voulez effectuer. Une "
+"explication simple du type d'importation est disponible en bas de l'écran et "
+"est mise à jour lorsque vous sélectionnez un objet dans la liste de choix.\n"
+"\n"
+"Une fois que vous avez choisi un type d'importation, appuyez le bouton Ok."
+
+#: dialogs/rc.cpp:23
+msgid "QIF"
+msgstr "QIF"
+
+#: dialogs/rc.cpp:24
+msgid "CSV"
+msgstr "CSV"
+
+#: dialogs/rc.cpp:25
+msgid "Some descripton"
+msgstr "Description"
+
+#: dialogs/rc.cpp:28
+msgid "Confirm Manual Enter"
+msgstr "Confirmer la Saisie Manuelle"
+
+#: dialogs/rc.cpp:29
+msgid "The following changes have been made to the transaction data:"
+msgstr ""
+"Les changements suivants ont été effectués aux données de l'opération :"
+
+#: dialogs/rc.cpp:30
+msgid "Please choose what you wish to do with the above changes"
+msgstr ""
+"Veuillez choisir ce que vous voulez faire parmi les possibilités en dessous"
+
+#: dialogs/rc.cpp:31
+msgid ""
+"Discard the changes and enter the original transaction into the register."
+msgstr ""
+"Annuler les changements et saisir l'opération originale dans le registre."
+
+#: dialogs/rc.cpp:32
+msgid "Enter these new values this one time, for this occurence only."
+msgstr "Saisir ces nouvelles valeurs pour cette fois seulement."
+
+#: dialogs/rc.cpp:33
+msgid "Set all further occurences in this schedule to be these values."
+msgstr "Toutes les futures occurrences de cette échéance auront ces valeurs."
+
+#: dialogs/rc.cpp:36
+msgid "CSV Dialog"
+msgstr "Boîte de Dialogue CSV"
+
+#: dialogs/rc.cpp:37
+msgid ""
+"CSV Dialog. Choose a file and then click on Run. You can view your "
+"progress at\n"
+"the bottom of the screen.\n"
+"\n"
+"You can cancel the process at any time by clicking on the Cancel button."
+msgstr ""
+"Boîte de dialogue CSV. Choisissez un fichier et appuyez sur Démarrer.\n"
+"Vous pouvez constater l'état d'avancement en bas de l'écran.\n"
+"\n"
+"Vous pouvez interrompre l'opération à n'importe quel instant en appuyant sur "
+"le bouton Annuler."
+
+#: dialogs/rc.cpp:38
+msgid "Choose the csv file:"
+msgstr "Choisissez le fichier CSV :"
+
+#: dialogs/rc.cpp:39
+msgid "Browse"
+msgstr "Parcourir"
+
+#: dialogs/rc.cpp:40
+msgid "Between These Dates"
+msgstr "Entre ces dates"
+
+#: dialogs/rc.cpp:41 dialogs/rc.cpp:196
+msgid "Start on:"
+msgstr "Démarrer le :"
+
+#: dialogs/rc.cpp:42 dialogs/rc.cpp:195
+msgid "End on:"
+msgstr "Finir le :"
+
+#: dialogs/rc.cpp:43
+msgid "Run"
+msgstr "Démarrer"
+
+#: dialogs/rc.cpp:44
+msgid "Progress Info"
+msgstr "Information de progression"
+
+#: dialogs/rc.cpp:45
+msgid "Processing Account:"
+msgstr "Compte en cours :"
+
+#: dialogs/rc.cpp:47
+msgid "Processing Transaction:"
+msgstr "Opération en cours :"
+
+#: dialogs/rc.cpp:48
+msgid "0 of 0"
+msgstr "0 de 0"
+
+#: dialogs/rc.cpp:50
+msgid "Exchange Rate/Price Editor"
+msgstr "Éditeur de taux de change ou de cours"
+
+#: dialogs/rc.cpp:55
+msgid "Convert from"
+msgstr "Convertir de"
+
+#: dialogs/rc.cpp:58
+msgid "Convert to"
+msgstr "Convertir vers"
+
+#: dialogs/rc.cpp:61
+msgid "To amount"
+msgstr "Du montant"
+
+#: dialogs/rc.cpp:62
+msgid "Exchange rate / Price"
+msgstr "Taux de change / Cours"
+
+#: dialogs/rc.cpp:64
+msgid ""
+"xx\n"
+"xx"
+msgstr ""
+"xx\n"
+"xx"
+
+#: dialogs/rc.cpp:68
+msgid "Currencies"
+msgstr "Devises"
+
+#: dialogs/rc.cpp:72
+msgid "real ID"
+msgstr "ID réel"
+
+#: dialogs/rc.cpp:73 dialogs/rc.cpp:722
+msgid "ID"
+msgstr "ID"
+
+#: dialogs/rc.cpp:74
+msgid "X"
+msgstr "X"
+
+#: dialogs/rc.cpp:76 dialogs/rc.cpp:459
+msgid "Online Source"
+msgstr "Source en ligne"
+
+#: dialogs/rc.cpp:78 dialogs/rc.cpp:278 dialogs/rc.cpp:312 dialogs/rc.cpp:684
+msgid "F1"
+msgstr "F1"
+
+#: dialogs/rc.cpp:80
+msgid "If this button is not activated, select the base currency first."
+msgstr "Si ce bouton n'est pas activé, sélectionnez en premier une devise."
+
+#: dialogs/rc.cpp:81
+msgid ""
+"Press this button to close the dialog. If the button is not activated, "
+"select your base currency."
+msgstr ""
+"Pressez ce bouton pour fermer la boîte de dialogue. Si le bouton n'est pas "
+"activé, sélectionnez votre devise."
+
+#: dialogs/rc.cpp:82
+msgid "Edit Equity"
+msgstr "Éditer l'action"
+
+#: dialogs/rc.cpp:86 dialogs/rc.cpp:410
+msgid "Smallest fraction:"
+msgstr "Plus petite fraction:"
+
+#: dialogs/rc.cpp:87 dialogs/rc.cpp:408 dialogs/rc.cpp:440
+msgid "1 /"
+msgstr "1 /"
+
+#: dialogs/rc.cpp:88 dialogs/rc.cpp:405
+msgid "Investment Type:"
+msgstr "Type d'investissement :"
+
+#: dialogs/rc.cpp:89 dialogs/rc.cpp:404
+msgid "Equity Name:"
+msgstr "Nom de l'action :"
+
+#: dialogs/rc.cpp:90 dialogs/rc.cpp:409
+msgid "Market Symbol:"
+msgstr "Symbole au Marché:"
+
+#: dialogs/rc.cpp:91
+msgid "Price History"
+msgstr "Historique du cours"
+
+#: dialogs/rc.cpp:97
+msgid "Edit Scheduled transaction"
+msgstr "Editer une opération avec des échéances"
+
+#: dialogs/rc.cpp:98
+msgid "Schedule name:"
+msgstr "Nom de l'échéance :"
+
+#: dialogs/rc.cpp:99
+msgid "Frequency:"
+msgstr "Fréquence :"
+
+#: dialogs/rc.cpp:100
+msgid "Number of selected periods between entries"
+msgstr "Nombre de périodes entre les saisies"
+
+#: dialogs/rc.cpp:101
+msgid "Payment information"
+msgstr "Informations des paiements"
+
+#: dialogs/rc.cpp:105 dialogs/rc.cpp:160 dialogs/rc.cpp:247 dialogs/rc.cpp:752
+#: widgets/register.cpp:569
+msgid "C"
+msgstr "P"
+
+#: dialogs/rc.cpp:113
+msgid "Do nothing"
+msgstr "Ne rien faire"
+
+#: dialogs/rc.cpp:116
+msgid "If this schedule occurs on the weekend:"
+msgstr "Si cette échéance tombe un week-end :"
+
+#: dialogs/rc.cpp:117
+msgid "The amount is an estimate because it varies for each payment"
+msgstr "Le montant est une estimation parce qu'il varie à chaque paiement"
+
+#: dialogs/rc.cpp:118
+msgid "Enter this schedule into the register automatically when it is due"
+msgstr ""
+"Entrez cet échéance dans le registre automatiquement lorsqu'elle est due"
+
+#: dialogs/rc.cpp:119
+msgid "This schedule will end at some time"
+msgstr "Cette échéance s'arrêtera à un moment donné"
+
+#: dialogs/rc.cpp:120
+msgid "Number of transactions remaining:"
+msgstr "Nombre d'opérations restantes :"
+
+#: dialogs/rc.cpp:121
+msgid "Date of final transaction:"
+msgstr "Date de la dernière opération :"
+
+#: dialogs/rc.cpp:125
+msgid "Reconciliation Wizard"
+msgstr "Assistant - Rapprochement"
+
+#: dialogs/rc.cpp:127
+msgid ""
+"Reconciling your account assures, that your recordings match those of your "
+"institution and that there are no mistakes on either side. You should "
+"reconcile your account whenever you receive a statement from your "
+"institution.\n"
+"\n"
+"All relevant information necessary for this process is usually printed on "
+"your statement.\n"
+"\n"
+"On the next page you will verify, that the starting and ending balance are "
+"matching those on your statement. If not, please modify the figures."
+msgstr ""
+"Rapprocher votre compte permet de s'assurer que vos enregistrements "
+"correspondent à ceux de votre établissement et qu'il n'y a pas d'erreur. "
+"Vous pouvez rapprocher votre compte lorsque vous recevez un relevé de votre "
+"établissement.\n"
+"\n"
+"Toutes les informations nécessaires à ce travail figurent généralement sur "
+"votre relevé.\n"
+"\n"
+"Sur la prochaine page, vous pourrez vérifier que les soldes de début et de "
+"fin correspondent bien à ceux de votre relevé. Si ce n'est pas le cas, "
+"modifiez les chiffres."
+
+#: dialogs/rc.cpp:129
+msgid ""
+"KMyMoney calculates your loan payments automatically. The amounts can "
+"deviate from those calculated by the creditor. Therefore, you possibly have "
+"to adjust amortization, interest and other costs according to your "
+"statement.\n"
+"\n"
+"Please enter the following information found on your statement:"
+msgstr ""
+"KMyMoney calcule automatiquement vos remboursements de prêt. Les montants "
+"peuvent être différents de ceux calculés par le créditeur. Aussi, vous aurez "
+"peut-être à ajuster l'amortissement, les intérêts et les autres coûts selon "
+"votre relevé.\n"
+"\n"
+"Merci de saisir les informations suivantes trouvées sur votre relevé :"
+
+#: dialogs/rc.cpp:130
+msgid "Ending date of statement"
+msgstr "Date de fin du relevé"
+
+#: dialogs/rc.cpp:131
+msgid "Starting date of statement"
+msgstr "Date de début du relevé"
+
+#: dialogs/rc.cpp:132
+msgid "Verify payments"
+msgstr "Vérifier les paiements"
+
+#: dialogs/rc.cpp:133 dialogs/rc.cpp:148 dialogs/rc.cpp:476 dialogs/rc.cpp:477
+#: dialogs/rc.cpp:508 dialogs/rc.cpp:513 dialogs/rc.cpp:518 dialogs/rc.cpp:532
+#: dialogs/rc.cpp:539 dialogs/rc.cpp:540 dialogs/rc.cpp:541 dialogs/rc.cpp:542
+#: dialogs/rc.cpp:543 dialogs/rc.cpp:552 dialogs/rc.cpp:553 dialogs/rc.cpp:554
+#: dialogs/rc.cpp:555 dialogs/rc.cpp:556 dialogs/rc.cpp:565 dialogs/rc.cpp:566
+#: dialogs/rc.cpp:567 dialogs/rc.cpp:568 dialogs/rc.cpp:569 dialogs/rc.cpp:578
+#: dialogs/rc.cpp:579 dialogs/rc.cpp:580 dialogs/rc.cpp:581 dialogs/rc.cpp:582
+#: dialogs/rc.cpp:591 dialogs/rc.cpp:592 dialogs/rc.cpp:593 dialogs/rc.cpp:594
+#: dialogs/rc.cpp:595 dialogs/rc.cpp:603 dialogs/rc.cpp:604 dialogs/rc.cpp:605
+#: dialogs/rc.cpp:606 dialogs/rc.cpp:607 dialogs/rc.cpp:618 dialogs/rc.cpp:619
+#: dialogs/rc.cpp:621 dialogs/rc.cpp:636 dialogs/rc.cpp:637 dialogs/rc.cpp:638
+#: dialogs/rc.cpp:639 dialogs/rc.cpp:640 dialogs/rc.cpp:641 dialogs/rc.cpp:651
+#: dialogs/rc.cpp:652 dialogs/rc.cpp:654 dialogs/rc.cpp:657 dialogs/rc.cpp:658
+#: dialogs/rc.cpp:659 dialogs/rc.cpp:664 dialogs/rc.cpp:665 dialogs/rc.cpp:668
+#: dialogs/rc.cpp:670 dialogs/rc.cpp:672 dialogs/rc.cpp:674 dialogs/rc.cpp:676
+#: dialogs/rc.cpp:678 dialogs/rc.cpp:681 dialogs/rc.cpp:823 widgets/rc.cpp:167
+msgid "1"
+msgstr "1"
+
+#: dialogs/rc.cpp:136
+msgid ""
+"If your statement shows different amounts, please cancel this dialog and "
+"correct the false transactions or correct the values in this dialog. In the "
+"later case, KMyMoney will create an adjustment transaction and add it to the "
+"ledger."
+msgstr ""
+"Si votre relevé comporte des montants différents, veuillez appuyer sur le "
+"bouton <b>Annuler</b> et corriger les opérations ou valeurs erronées dans "
+"cette fenêtre. Dans le dernier cas, KMyMoney créera une opération "
+"d'ajustement et l'ajoutera au registre."
+
+#: dialogs/rc.cpp:138
+msgid ""
+"In order to create the adjustment transaction, KMyMoney requires an account "
+"and possibly an interest category to assign the differences to. Please "
+"select an account and - if necessary - a category."
+msgstr ""
+"Afin de créer l'opération d'ajustement, KMyMoney a besoin d'un compte et "
+"éventuellement d'une catégorie d'intérêt pour y assigner la différence. "
+"Merci de sélectionner un compte et si nécessaire une catégorie."
+
+#: dialogs/rc.cpp:140
+msgid "Interest-Category"
+msgstr "Catégorie d'intérêt"
+
+#: dialogs/rc.cpp:141
+msgid "Restarting postponed reconciliation"
+msgstr "Recommencer le rapprochement différé"
+
+#: dialogs/rc.cpp:142
+msgid ""
+"You have previously postponed the reconciliation of this account. If you "
+"have entered charges or interests the last time you started reconciling this "
+"account you can modify these in the ledger later on.\n"
+"\n"
+"It is important, that you continue with the same statement you used when you "
+"postponed the reconciliation.\n"
+"\n"
+"All information you have entered into this wizard will be shown and all "
+"transactions that you already cleared are marked with a 'C'."
+msgstr ""
+"Vous avez différé le rapprochement de ce compte. Si vous avez saisi des "
+"charges ou des intérêts la dernière fois que vous avez rapproché ce compte, "
+"vous pourrez les modifier dans le registre plus tard.\n"
+"\n"
+"Il est important que vous continuiez avec le même relevé que vous avez "
+"utilisé quand vous avez différé le rapprochement.\n"
+"\n"
+"Toutes les informations que vous aurez saisi dans cet assistant seront "
+"affichées et toutes les opérations que vous avez déjà pointées sont marquées "
+"avec un 'C'."
+
+#: dialogs/rc.cpp:143
+msgid "Statement Information"
+msgstr "Informations sur le relevé"
+
+#: dialogs/rc.cpp:144 dialogs/rc.cpp:315 dialogs/rc.cpp:317 dialogs/rc.cpp:320
+#: dialogs/rc.cpp:321 dialogs/rc.cpp:329 dialogs/rc.cpp:330 dialogs/rc.cpp:333
+#: dialogs/rc.cpp:334 dialogs/rc.cpp:335 dialogs/rc.cpp:336 dialogs/rc.cpp:366
+msgid "x"
+msgstr "x"
+
+#: dialogs/rc.cpp:145
+msgid "Statement date:"
+msgstr "Date du relevé :"
+
+#: dialogs/rc.cpp:146
+msgid "Starting balance of this statement:"
+msgstr "Solde de départ de ce relevé :"
+
+#: dialogs/rc.cpp:147
+msgid "Ending balance of this statement:"
+msgstr "Solde de fin de ce relevé :"
+
+#: dialogs/rc.cpp:149
+msgid "Interest / Charges"
+msgstr "Intérêts / Frais"
+
+#: dialogs/rc.cpp:150
+msgid ""
+"If necessary, enter information about interest or charges here. KMyMoney "
+"will create transactions and clear them directly for you."
+msgstr ""
+"Si nécessaire, saisissez les informations pour les intérêts et les frais. "
+"KMyMoney créera les opérations et les pointera directement pour vous."
+
+#: dialogs/rc.cpp:153
+msgid "Charges"
+msgstr "Frais"
+
+#: dialogs/rc.cpp:154
+msgid "Enter Schedule"
+msgstr "Saisir l'échéance"
+
+#: dialogs/rc.cpp:155
+msgid "Schedule Details"
+msgstr "Détails de l'échéance"
+
+#: dialogs/rc.cpp:156 dialogs/rc.cpp:348 dialogs/rc.cpp:389 widgets/rc.cpp:164
+msgid "Name:"
+msgstr "Nom :"
+
+#: dialogs/rc.cpp:157 dialogs/rc.cpp:351 widgets/rc.cpp:165
+msgid "Type:"
+msgstr "Type :"
+
+#: dialogs/rc.cpp:168
+msgid "Enter"
+msgstr "Saisir"
+
+#: dialogs/rc.cpp:169
+msgid ""
+"Enter the transaction and advance the next due date of this schedule to the "
+"next payment date."
+msgstr ""
+"Saisir l'opération et avancer la prochaine date d'échéance pour la prochaine "
+"date de paiement."
+
+#: dialogs/rc.cpp:171
+msgid ""
+"Do not enter the transaction but advance the next due date of this schedule "
+"to the next payment date."
+msgstr ""
+"Ne pas saisir l'opération mais avancer la prochaine date d'échéance pour la "
+"prochaine date de paiement."
+
+#: dialogs/rc.cpp:172
+msgid "Ignore"
+msgstr "Ignorer"
+
+#: dialogs/rc.cpp:173
+msgid ""
+"Do not enter or skip payments for this schedule but continue with the next "
+"schedule."
+msgstr ""
+"Ne pas saisir ou sauter le paiement mais continuer avec l'échéance suivante."
+
+#: dialogs/rc.cpp:175
+msgid "Cancel processing of schedule entry."
+msgstr "Arrêter la saisie de l'échéance."
+
+#: dialogs/rc.cpp:176
+msgid "Update Stock and Currency Prices"
+msgstr "Mettre à jour le cours des devises et des actions"
+
+#: dialogs/rc.cpp:177
+msgid "List of known Equities, and the date they were last updated on."
+msgstr ""
+"Liste des capitaux propres connus, et la date de leur dernière mise à jour."
+
+#: dialogs/rc.cpp:179
+msgid "Update All"
+msgstr "Tout mettre à jour"
+
+#: dialogs/rc.cpp:180
+msgid "Update Selected"
+msgstr "Mettre à jour la sélection"
+
+#: dialogs/rc.cpp:181
+msgid "Status:"
+msgstr "État :"
+
+#: dialogs/rc.cpp:184
+msgid "QIF Export"
+msgstr "Exportation QIF"
+
+#: dialogs/rc.cpp:185
+msgid ""
+"From this dialog you are able to export transactions to a quicken compatible "
+"file, (known as a QIF file, because of the extension). Please enter the "
+"path to the QIF file or select it by clicking on the Browse button.\n"
+"\n"
+"You can choose the file's path, the account and the format of the QIF file "
+"(profile). Choose Account to export all the transactions between the "
+"specified dates or just categories. You can also limit the transactions "
+"that are exported by start and ending date. Once you have pressed the "
+"Export button a message box will appear when the export has completed "
+"detailing how many transactions, categories and payees were exported."
+msgstr ""
+"A partir de cette boîte de dialogue, vous pouvez exporter des opérations "
+"vers un fichier compatible Quicken (connu comme fichier QIF, en raison de "
+"son extension). Merci de saisir l'emplacement du fichier QIF, ou de le "
+"sélectionner en appuyant sur le bouton Parcourir.\n"
+"\n"
+"Vous pouvez choisir l'emplacement du fichier, le compte et le format du "
+"fichier QIF (profil). Choisissez Compte pour exporter toutes les opérations "
+"entre les dates spécifiées ou uniquement les catégories. Vous pouvez aussi "
+"limiter les opérations à exporter par les dates de début et de fin. Quand "
+"vous aurez appuyé sur Exporter; un message apparaîtra à la fin de "
+"l'exportation, indiquant combien d'opérations, catégories et tiers ont été "
+"exportés."
+
+#: dialogs/rc.cpp:186
+msgid "File to export to:"
+msgstr "Fichier à exporter vers :"
+
+#: dialogs/rc.cpp:188
+msgid "Account to export"
+msgstr "Compte à exporter"
+
+#: dialogs/rc.cpp:189 dialogs/rc.cpp:297
+msgid "QIF Profile"
+msgstr "Profil Quicken (QIF)"
+
+#: dialogs/rc.cpp:190 dialogs/rc.cpp:298 dialogs/rc.cpp:362
+#: widgets/kmymoneypriceview.cpp:145
+msgid "New..."
+msgstr "Nouveau ..."
+
+#: dialogs/rc.cpp:191
+msgid "Contents to Export"
+msgstr "Contenus à exporter"
+
+#: dialogs/rc.cpp:194
+msgid "Date Range"
+msgstr "Intervalle de date"
+
+#: dialogs/rc.cpp:199
+msgid "Search transactions"
+msgstr "Rechercher des opérations"
+
+#: dialogs/rc.cpp:200
+msgid "Criteria"
+msgstr "Critère"
+
+#: dialogs/rc.cpp:201
+msgid "Define your search criteria"
+msgstr "Définissez votre critère de recherche"
+
+#: dialogs/kfindtransactiondlg.cpp:169 dialogs/rc.cpp:202
+msgid "Text"
+msgstr "Texte"
+
+#: dialogs/rc.cpp:203
+msgid "Contains"
+msgstr "Contient"
+
+#: dialogs/rc.cpp:204
+msgid "Does not contain"
+msgstr "Ne contient pas"
+
+#: dialogs/rc.cpp:205
+msgid "Treat text as regular expression"
+msgstr "Traiter le texte comme une expression régulière"
+
+#: dialogs/rc.cpp:206
+msgid "Case sensitive"
+msgstr "Sensible à la casse"
+
+#: dialogs/rc.cpp:209
+msgid "Range"
+msgstr "Intervalle"
+
+#: dialogs/rc.cpp:210
+msgid ""
+"_: To (Date)\n"
+"To"
+msgstr "Jusqu'à (Date)"
+
+#: dialogs/rc.cpp:211
+msgid ""
+"_: From (Date)\n"
+"From"
+msgstr "De (Date)"
+
+#: dialogs/rc.cpp:213
+msgid "Search this amount"
+msgstr "Rechercher ce montant"
+
+#: dialogs/rc.cpp:214
+msgid "Search amount in the range"
+msgstr "Rechercher le montant dans l'intervalle"
+
+#: dialogs/rc.cpp:215
+msgid ""
+"_: to (amount)\n"
+"to"
+msgstr "de (montant)"
+
+#: dialogs/rc.cpp:216
+msgid ""
+"_: from (amount)\n"
+"from"
+msgstr "jusqu'à (montant)"
+
+#: dialogs/rc.cpp:220
+msgid "Select transactions without payees"
+msgstr "Sélectionner les opérations sans tiers"
+
+#: dialogs/rc.cpp:221
+msgid "Select all"
+msgstr "Sélectionner tout"
+
+#: dialogs/rc.cpp:222
+msgid "Select none"
+msgstr "Ne rien choisir"
+
+#: dialogs/rc.cpp:224
+msgid "Validity"
+msgstr "Validité"
+
+#: dialogs/rc.cpp:226
+msgid "All states"
+msgstr "Tous les états"
+
+#: dialogs/rc.cpp:230
+msgid "All types"
+msgstr "Tous les types"
+
+#: dialogs/rc.cpp:234
+msgid "Any transaction"
+msgstr "Tout type d'opération"
+
+#: dialogs/rc.cpp:235
+msgid "Valid transaction"
+msgstr "Opération valide"
+
+#: dialogs/rc.cpp:236
+msgid "Invalid transaction"
+msgstr "Opération invalide"
+
+#: dialogs/rc.cpp:237
+msgid "State"
+msgstr "État"
+
+#: dialogs/rc.cpp:238
+msgid "Search this number"
+msgstr "Rechercher ce nombre"
+
+#: dialogs/rc.cpp:239
+msgid "Search number in range"
+msgstr "Rechercher le nombre dans l'intervalle"
+
+#: dialogs/rc.cpp:240
+msgid ""
+"_: to (number)\n"
+"to"
+msgstr "vers (nombre)"
+
+#: dialogs/rc.cpp:241
+msgid ""
+"_: from (number)\n"
+"from"
+msgstr "de (nombre)"
+
+#: dialogs/rc.cpp:242
+msgid "text"
+msgstr "texte"
+
+#: dialogs/rc.cpp:243
+msgid "warning"
+msgstr "alarme"
+
+#: dialogs/rc.cpp:244
+msgid "Result"
+msgstr "Résultat"
+
+#: dialogs/rc.cpp:254
+msgid "F"
+msgstr "F"
+
+#: dialogs/rc.cpp:257 dialogs/rc.cpp:844
+msgid "&Reset"
+msgstr "&Remise à zéro"
+
+#: dialogs/rc.cpp:258
+msgid "&Find"
+msgstr "&Trouver"
+
+#: dialogs/rc.cpp:259
+msgid "GnuCash Import Options"
+msgstr "Options d'importation de GnuCash"
+
+#: dialogs/rc.cpp:260
+msgid "Use 'Help' for more information on these options"
+msgstr "Utiliser l'aide pour plus d'information sur ces options"
+
+#: dialogs/rc.cpp:261
+msgid "Investment Handling"
+msgstr "Gestion de l'investissement"
+
+#: dialogs/rc.cpp:262
+msgid "One investment account for each stock"
+msgstr "Un compte d'investissement pour chaque action"
+
+#: dialogs/rc.cpp:263
+msgid "One investment account for all stocks"
+msgstr "Un compte investissement pour toutes les actions"
+
+#: dialogs/rc.cpp:264
+msgid "Prompt for an investment account for each stock"
+msgstr "Demande un compte d'investissement pour chaque action"
+
+#: dialogs/rc.cpp:265
+msgid "Online price quotes"
+msgstr "Cotations en ligne"
+
+#: dialogs/rc.cpp:266
+msgid "Use Finance::Quote for share price quotes"
+msgstr "Utilise Finance::Quote pour les cotations des actions"
+
+#: dialogs/rc.cpp:267
+msgid "Scheduled Transactions"
+msgstr "Opérations avec échéance"
+
+#: dialogs/rc.cpp:268
+msgid "Drop suspect scheduled transactions"
+msgstr "Supprimer les opérations planifiées suspectes"
+
+#: dialogs/rc.cpp:269
+msgid "Decoding option"
+msgstr "Option de décodage"
+
+#: dialogs/rc.cpp:270
+msgid "Decode using"
+msgstr "Décodage en utilisant"
+
+#: dialogs/rc.cpp:271
+msgid "Transaction Notes option"
+msgstr "Options des notes des opérations"
+
+#: dialogs/rc.cpp:272
+msgid "Use transaction notes on non-split transactions"
+msgstr ""
+"Utiliser les notes pour les opérations pour les opérations non réparties"
+
+#: dialogs/rc.cpp:273
+msgid "Debug Options"
+msgstr "Options de débogue"
+
+#: dialogs/rc.cpp:274
+msgid "General debug data"
+msgstr "Donnée de débogue général"
+
+#: dialogs/rc.cpp:275
+msgid "Display XML data"
+msgstr "Afficher les données XML"
+
+#: dialogs/rc.cpp:276
+msgid "Anonymize data"
+msgstr "Rendre anonyme les données"
+
+#: dialogs/rc.cpp:281
+msgid "Online Quotes - Select price source"
+msgstr "Cotations en Ligne - Sélectionnez la source des cours"
+
+#: dialogs/rc.cpp:284
+msgid ""
+"This price source is not known to KMyMoney. Please select an option below."
+msgstr ""
+"La source des cours n'est connu de KMyMoney. Veuillez choisir une option ci-"
+"dessous."
+
+#: dialogs/rc.cpp:285
+msgid "Do not perform online quotes for this investment"
+msgstr "Ne pas récupérer les cotations en ligne pour cet investissement"
+
+#: dialogs/rc.cpp:286
+msgid "Select a known KMyMoney source from the list below"
+msgstr "Choisissez une source KMyMoney connue depuis la liste ci-dessous"
+
+#: dialogs/rc.cpp:287
+msgid ""
+"Use the following name for the price source.\n"
+"(Click Help for further information.)"
+msgstr ""
+"Utiliser le nom suivant pour la source des cours.\n"
+"(Appuyez sur Aide pour plus d'information.)"
+
+#: dialogs/rc.cpp:288
+msgid "Always use this selection for this price source."
+msgstr "Toujours utiliser cette sélection pour cette source de cours."
+
+#: dialogs/rc.cpp:289
+msgid "QIF Import"
+msgstr "Importer un fichier Quicken (QIF)"
+
+#: dialogs/rc.cpp:290
+msgid ""
+"From this dialog you are able to import transactions from a Quicken<b>&trade;"
+"</b> compatible file, (known as a QIF file, because of the extension).<p>\n"
+"\n"
+"Please enter the path to the QIF file or select it by clicking on the Browse "
+"button. Once you have the file's path press the Import button and KMyMoney "
+"will import all the transactions, categories and payees it finds."
+msgstr ""
+"A partir de cette boîte de dialogue, vous pouvez importer des opérations "
+"d'un fichier compatible Quicken <b>&trade;</b> (connu sous le nom de fichier "
+"QIF, en raison de l'extension).<p>\n"
+"\n"
+"Merci de saisir le chemin du fichier QIF ou de le sélectionner en appuyant "
+"sur le bouton Parcourir. Dès que vous avez le chemin du fichier, appuyez sur "
+"le bouton Importer et KMyMoney importera toutes les opérations, catégories "
+"et tiers qu'il trouvera."
+
+#: dialogs/rc.cpp:291
+msgid "QIF File to Import:"
+msgstr "Fichier Quicken (QIF) à importer :"
+
+#: dialogs/rc.cpp:292
+msgid "Import options"
+msgstr "Options d'importation"
+
+#: dialogs/rc.cpp:293
+msgid "Bank statement"
+msgstr "Relevé de banque"
+
+#: dialogs/rc.cpp:294
+msgid "Other application"
+msgstr "Autre application"
+
+#: dialogs/rc.cpp:295
+msgid ""
+"Select <b>Bank statement</b> turns on automatic category matching which is "
+"turned off in case of <b>Historic data</b>. Use the latter if you import "
+"files from other Personal Finance Management software."
+msgstr ""
+"Sélectionnez <b>Relevé de banque</b> active automatiquement une catégorie de "
+"correspondance qui sera désactivée avec <b>Historique des données</b>. "
+"Utilisez ce dernier si vous importez des fichiers d'autres logiciels de "
+"gestion de finances personnelles."
+
+#: dialogs/rc.cpp:296
+msgid "Source of QIF"
+msgstr "Source QIF"
+
+#: dialogs/rc.cpp:302
+msgid "Verify Import"
+msgstr "Vérifier l'importation"
+
+#: dialogs/rc.cpp:304
+msgid "Ok"
+msgstr "Ok"
+
+#: dialogs/rc.cpp:306
+msgid "MyDialog"
+msgstr "Mon Dialogue"
+
+#: dialogs/rc.cpp:310
+msgid "File Information"
+msgstr "Informations sur le Fichier"
+
+#: dialogs/rc.cpp:316
+msgid "Last modified on"
+msgstr "Dernière modification le"
+
+#: dialogs/rc.cpp:319
+msgid "Base currency"
+msgstr "Devise de base"
+
+#: dialogs/rc.cpp:322
+msgid "Created on"
+msgstr "Créé le"
+
+#: dialogs/rc.cpp:325
+msgid "Accounts/Categories"
+msgstr "Comptes/Catégories"
+
+#: dialogs/rc.cpp:328
+msgid "Closed"
+msgstr "Fermer"
+
+#: dialogs/rc.cpp:331
+msgid "Prices"
+msgstr "Cours"
+
+#: dialogs/rc.cpp:337
+msgid "Splits"
+msgstr "Répartitions"
+
+#: dialogs/rc.cpp:338
+msgid "Price Editor"
+msgstr "Éditeur de Cours"
+
+#: dialogs/rc.cpp:339
+msgid "Show all stored prices"
+msgstr "Afficher tous les cours archivés"
+
+#: dialogs/rc.cpp:343
+msgid "Delete Range..."
+msgstr "Supprimer l'intervalle ..."
+
+#: dialogs/rc.cpp:346
+msgid "New Account Dialog"
+msgstr "Nouveau Compte"
+
+#: dialogs/rc.cpp:349
+msgid "Opening information"
+msgstr "Informations d'ouverture"
+
+#: dialogs/rc.cpp:350
+msgid "Currency:"
+msgstr "Devise :"
+
+#: dialogs/rc.cpp:352 dialogs/rc.cpp:793
+msgid "Date:"
+msgstr "Date :"
+
+#: dialogs/rc.cpp:353
+msgid "Balance:"
+msgstr "Solde :"
+
+#: dialogs/rc.cpp:355
+msgid "Last check number:"
+msgstr "Dernier numéro de chèque :"
+
+#: dialogs/rc.cpp:356
+msgid "Notes:"
+msgstr "Notes :"
+
+#: dialogs/rc.cpp:357
+msgid "No auto-VAT-assignment"
+msgstr "Pas d'affectation automatique de TVA"
+
+#: dialogs/rc.cpp:358 dialogs/rc.cpp:441
+msgid "Price entry"
+msgstr "Cours d'entrée"
+
+#: dialogs/rc.cpp:359
+msgid "Preferred Account"
+msgstr "Compte Favori"
+
+#: dialogs/rc.cpp:363
+msgid "Number:"
+msgstr "Numéro :"
+
+#: dialogs/rc.cpp:364 dialogs/rc.cpp:395
+msgid "BIC"
+msgstr "BIC"
+
+#: dialogs/rc.cpp:367
+msgid "Hierarchy"
+msgstr "Hiérarchie"
+
+#: dialogs/rc.cpp:368
+msgid "Subaccount"
+msgstr "Sous-compte"
+
+#: dialogs/rc.cpp:369
+msgid "Limits"
+msgstr "Limites"
+
+#: dialogs/rc.cpp:370
+msgid ""
+"This page allows to setup certain limits. KMyMoney will warn you when the "
+"account balance reaches a limit."
+msgstr ""
+"Cette page permet de configurer certaines limites. KMyMoney vous avertira "
+"lorsque le solde du compte atteindra une limite."
+
+#: dialogs/rc.cpp:372
+msgid "Absolute limit"
+msgstr "Limite absolue"
+
+#: dialogs/rc.cpp:373
+msgid "Maximum credit limit"
+msgstr "Limite de crédit maximum"
+
+#: dialogs/rc.cpp:374
+msgid "Minimum balance"
+msgstr "Solde minimum"
+
+#: dialogs/rc.cpp:375
+msgid "Early warning"
+msgstr "Première alerte"
+
+#: dialogs/rc.cpp:377
+msgid "VAT details"
+msgstr "Détails de la TVA"
+
+#: dialogs/rc.cpp:378
+msgid "VAT category"
+msgstr "Catégorie de la TVA"
+
+#: dialogs/rc.cpp:379
+msgid "VAT percentage"
+msgstr "Pourcentage de TVA"
+
+#: dialogs/rc.cpp:380
+msgid "Enable auto VAT assignment"
+msgstr "Autoriser l'assignation automatique de la TVA"
+
+#: dialogs/rc.cpp:381
+msgid "Amount entered"
+msgstr "Montant saisi"
+
+#: dialogs/rc.cpp:382
+msgid "Gross amount"
+msgstr "Montant brut"
+
+#: dialogs/rc.cpp:383
+msgid "Net amount"
+msgstr "Montant net"
+
+#: dialogs/rc.cpp:384
+msgid "Include on Tax Reports"
+msgstr "Inclure sur les Rapports de Taxe"
+
+#: dialogs/rc.cpp:387
+msgid "New Institution Dialog"
+msgstr "Nouvel établissement"
+
+#: dialogs/rc.cpp:388
+msgid "Institution Details"
+msgstr "Détails de l'établissement"
+
+#: dialogs/rc.cpp:390
+msgid "City:"
+msgstr "Ville :"
+
+#: dialogs/rc.cpp:394
+msgid "Routing Number:"
+msgstr "Numéro de Routage :"
+
+#: dialogs/rc.cpp:398
+msgid "New Budget"
+msgstr "Nouveau budget"
+
+#: dialogs/rc.cpp:403
+msgid "New Equity"
+msgstr "Nouvelle Action"
+
+#: dialogs/rc.cpp:406 dialogs/rc.cpp:407
+msgid "Trading Symbol of the stock or mutual fund, not required."
+msgstr ""
+"Symbole commercial de l'action ou du fond commun de placement, non requis."
+
+#: dialogs/rc.cpp:414 dialogs/rc.cpp:415
+msgid "Name of the company, or mutual fund."
+msgstr "Nom de la compagnie, ou du fond commun de placement."
+
+#: dialogs/rc.cpp:418
+msgid "New File Dialog"
+msgstr "Nouveau Fichier"
+
+#: dialogs/rc.cpp:419
+msgid ""
+"Use this dialog to enter personal information about yourself.\n"
+"\n"
+"All information is optional and is provided to personalize\n"
+"your KMyMoney file."
+msgstr ""
+"Utilisez cette fenêtre pour saisir les informations vous concernant.\n"
+"\n"
+"Ces renseignements sont optionnels, ils permettent de personnaliser votre "
+"fichier KMyMoney."
+
+#: dialogs/rc.cpp:430
+msgid "New Investment wizard"
+msgstr "Assistant - Nouvel Investissement"
+
+#: dialogs/rc.cpp:431
+msgid "Investment Type"
+msgstr "Type d'investissement"
+
+#: dialogs/rc.cpp:432
+msgid "This wizard allows you to create a new investment."
+msgstr "Cet assistant vous permet de créer un nouvel investissement."
+
+#: dialogs/rc.cpp:433
+msgid ""
+"The first step in this process requires to select the type of investment. "
+"The following steps collect more details about the investment from you."
+msgstr ""
+"La première étape dans ce processus requiert de choisir le type "
+"d'investissement. Les étapes suivantes collectent plus de détails sur votre "
+"investissement."
+
+#: dialogs/rc.cpp:434
+msgid "Type of investment"
+msgstr "Type d'investissement"
+
+#: dialogs/rc.cpp:438
+msgid "Investment details"
+msgstr "Détails de l'investissement"
+
+#: dialogs/rc.cpp:439
+msgid ""
+"Enter the details below and click <b>Next</b> to continue entering the "
+"online update details."
+msgstr ""
+"Entrez les détails ci-dessous et appuyez sur <b>Suivant</b> pour continuer à "
+"saisir les détails de mise à jour en ligne."
+
+#: dialogs/rc.cpp:442 dialogs/rc.cpp:728
+msgid "Fraction"
+msgstr "Fraction"
+
+#: dialogs/rc.cpp:443
+msgid "Trading Currency"
+msgstr "Devise"
+
+#: dialogs/rc.cpp:444
+msgid "Full name"
+msgstr "Nom complet"
+
+#: dialogs/rc.cpp:445
+msgid "AMEX"
+msgstr "AMEX"
+
+#: dialogs/rc.cpp:446
+msgid "EUREX"
+msgstr "EUREX"
+
+#: dialogs/rc.cpp:447
+msgid "FUND"
+msgstr "FUND"
+
+#: dialogs/rc.cpp:448
+msgid "NASDAQ"
+msgstr "NASDAQ"
+
+#: dialogs/rc.cpp:449
+msgid "NYSE"
+msgstr "NYSE"
+
+#: dialogs/rc.cpp:450
+msgid "XETRA"
+msgstr "XETRA"
+
+#: dialogs/rc.cpp:451
+msgid "Trading symbol"
+msgstr "Symbole commercial"
+
+#: dialogs/rc.cpp:452
+msgid "Identification"
+msgstr "Identification"
+
+#: dialogs/rc.cpp:453
+msgid "Enter the ticker symbol (e.g. RHAT)."
+msgstr "Entrez le symbole des cours (exemple RHAT)."
+
+#: dialogs/rc.cpp:454
+msgid "Enter the CUSIP/ISIN/WKN identification number here"
+msgstr "Entrez le numéro d'identification CUSIP/ISIN/WKN ici"
+
+#: dialogs/rc.cpp:455
+msgid "Trading market"
+msgstr "Marché des changes"
+
+#: dialogs/rc.cpp:456
+msgid "Online Update"
+msgstr "Mise à jour en ligne"
+
+#: dialogs/rc.cpp:457
+msgid ""
+"Select an online source and click <b>Finish</b> to store the investment "
+"data. If you don't want to use online updates, just leave the data as is."
+msgstr ""
+"Sélectionnez une source en ligne et appuyez sur <b>Terminer</b> pour "
+"mémoriser les données de l'investissement. Si vous ne voulez pas utiliser "
+"les mises à jour en ligne, laissez les données comme elles sont."
+
+#: dialogs/rc.cpp:458
+msgid "Use Finance::Quote"
+msgstr "Utilise Finance::Quote"
+
+#: dialogs/rc.cpp:460
+msgid "Factor"
+msgstr "Fraction"
+
+#: dialogs/rc.cpp:461
+msgid "New Loan Wizard"
+msgstr "Assistant - Nouveau Prêt"
+
+#: dialogs/rc.cpp:462
+msgid "New Loan Account Wizard"
+msgstr "Assistant - Nouveau Compte Prêt"
+
+#: dialogs/rc.cpp:463
+msgid ""
+"\n"
+"Welcome to the New Loan Account Wizard which will guide you through the "
+"creation of a new loan e.g. for your home, your car or any other loan that "
+"you pay or gain interest for.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Bienvenue dans l'assistant Nouveau Compte Prêt qui vous guidera lors de la "
+"création d'un nouveau prêt, pour votre maison, votre voiture ou tout autre "
+"prêt pour lequel vous payez ou gagnez des intérêts.\n"
+"\n"
+"Veuillez vous assurer que vous avez les informations appropriées. Vous "
+"trouvez généralement ces informations sur votre contrat ou sur votre dernier "
+"relevé."
+
+#: dialogs/rc.cpp:464
+msgid "Edit Loan Account Wizard"
+msgstr "Assistant - Édition Compte Prêt"
+
+#: dialogs/rc.cpp:465
+msgid ""
+"\n"
+"Welcome to the Edit Loan Account Wizard. Please use this wizard to modify "
+"information about your loan account.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Bienvenue dans l'assistant d'édition Compte Prêt. Veuillez utiliser cet "
+"assistant pour modifier les informations de votre compte prêt.\n"
+"\n"
+"Veuillez vous assurer que vous avez toutes les informations appropriées. "
+"Vous pouvez généralement trouver ces informations sur votre contrat ou votre "
+"dernier relevé."
+
+#: dialogs/rc.cpp:467
+msgid ""
+"\n"
+"In the first step, KMyMoney will ask you some general information about the "
+"loan account to be created."
+msgstr ""
+"\n"
+"Durant la première étape, KMyMoney vous demandera des informations générales "
+"à propos du compte prêt à créer."
+
+#: dialogs/rc.cpp:468 dialogs/rc.cpp:522 dialogs/rc.cpp:610
+msgid "1. General Information"
+msgstr "1. Informations Générales"
+
+#: dialogs/rc.cpp:469
+msgid ""
+"\n"
+"2. Calculate Loan\n"
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"2. Calculer le Prêt\n"
+"\n"
+"3. Paiements"
+
+#: dialogs/rc.cpp:470
+msgid "Edit selection"
+msgstr "Éditer la sélection"
+
+#: dialogs/rc.cpp:471
+msgid ""
+"\n"
+"Please select, which data of the loan you want to modify."
+msgstr ""
+"\n"
+"Merci de sélectionner quelle donnée du prêt vous souhaitez modifier."
+
+#: dialogs/rc.cpp:472
+msgid "Modify the interest rate"
+msgstr "Modifier le taux d'intérêt"
+
+#: dialogs/rc.cpp:473
+msgid "Modify additional fees"
+msgstr "Modifier les frais additionnels"
+
+#: dialogs/rc.cpp:474
+msgid "Modify other loan information"
+msgstr "Modifier une autre information du prêt"
+
+#: dialogs/rc.cpp:475
+msgid "Effective date"
+msgstr "Date d'entrée en vigueur"
+
+#: dialogs/rc.cpp:478
+msgid "When should the changes become active?"
+msgstr "Quand les changements deviendront-ils actifs ?"
+
+#: dialogs/rc.cpp:479
+msgid "Lending or borrowing money"
+msgstr "Prêter ou emprunter de l'argent"
+
+#: dialogs/rc.cpp:480
+msgid ""
+"\n"
+"Do you borrow or lend money?"
+msgstr ""
+"\n"
+"Prêtez-vous ou empruntez-vous ?"
+
+#: dialogs/rc.cpp:483
+msgid "Name of the loan"
+msgstr "Nom du prêt"
+
+#: dialogs/rc.cpp:484
+msgid ""
+"\n"
+"How do you want to call this loan? Examples for names are 'car loan', "
+"'school loan', 'home owner loan'."
+msgstr ""
+"\n"
+"Comment voulez-vous nommer ce prêt ? Exemples de noms : 'Emprunt Auto', "
+"'Prêt Scolaire', 'Prêt Immobilier'."
+
+#: dialogs/rc.cpp:486
+msgid "TextLabel6"
+msgstr "TextLabel6"
+
+#: dialogs/rc.cpp:487
+msgid "TextLabel7"
+msgstr "TextLabel7"
+
+#: dialogs/rc.cpp:488
+msgid "Type of interest"
+msgstr "Type d'intérêt"
+
+#: dialogs/rc.cpp:489
+msgid ""
+"\n"
+"Is the interest of this loan fixed over a period of time or is it adapted "
+"from time to time? If the interest rate changes during the amortization "
+"phase of the loan you should choose the option 'variable interest rate'."
+msgstr ""
+"\n"
+"Est-ce que votre prêt a un taux d'intérêt fixe ou un taux variable ?\n"
+"Si le taux d'intérêt change durant la phase d'amortissement du prêt, vous "
+"devriez choisir l'option 'Taux d'intérêt variable'."
+
+#: dialogs/rc.cpp:490
+msgid "Fixed interest rate"
+msgstr "Taux d'intérêt fixe"
+
+#: dialogs/rc.cpp:491
+msgid "Variable interest rate"
+msgstr "Taux d'intérêt variable"
+
+#: dialogs/rc.cpp:492
+msgid "Payments?"
+msgstr "Paiements ?"
+
+#: dialogs/rc.cpp:493
+msgid ""
+"\n"
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?"
+msgstr ""
+"\n"
+"Y a-t-il des paiements saisis pour ce prêt dans KMyMoney ?"
+
+#: dialogs/rc.cpp:494
+msgid "No, no payments were made yet."
+msgstr "Non, aucun paiement n'a encore été effectué."
+
+#: dialogs/rc.cpp:495
+msgid "Yes, payments were made."
+msgstr "Oui, des paiements ont été effectués."
+
+#: dialogs/rc.cpp:496
+msgid ""
+"Note: Payments made to obtain the loan (e.g. Dissagio) are not considered as "
+"payments in this context."
+msgstr ""
+"Note: Les paiements effectués pour obtenir le prêt (par exemple Dissagio) ne "
+"sont pas considérés comme des paiements dans ce contexte."
+
+#: dialogs/rc.cpp:497
+msgid "Recording payments?"
+msgstr "Enregistrer les paiements ?"
+
+#: dialogs/rc.cpp:498
+msgid ""
+"\n"
+"Do you want to record all payments of this loan with KMyMoney?"
+msgstr ""
+"\n"
+"Voulez-vous enregistrer tous les paiements de ce prêt avec KMyMoney ?"
+
+#: dialogs/rc.cpp:499
+msgid "Yes, record all payments."
+msgstr "Oui, enregistrer tous les paiements."
+
+#: dialogs/rc.cpp:500
+msgid "No, only record payments since the beginning of this year."
+msgstr "Non, seulement enregistrer les paiements depuis le début de l'année."
+
+#: dialogs/rc.cpp:501
+msgid "Date of next interest change"
+msgstr "Date du prochain changement de taux d'intérêt"
+
+#: dialogs/rc.cpp:502
+msgid ""
+"\n"
+"Select the date when the interest rate for this loan will be modified and "
+"the frequency of the future changes."
+msgstr ""
+"\n"
+"Choisir la date à laquelle le taux d'intérêt pour ce prêt sera modifié, et "
+"la fréquence des prochaines modifications."
+
+#: dialogs/rc.cpp:503
+msgid "Next interest change on"
+msgstr "Prochain changement de taux d'intérêt le"
+
+#: dialogs/rc.cpp:504
+msgid "Time until next change"
+msgstr "Durée jusqu'au prochain changement"
+
+#: dialogs/rc.cpp:506 dialogs/rc.cpp:571
+msgid ""
+"\n"
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"\n"
+"Veuillez saisir le montant que vous payez pour les intérêts et "
+"l'amortissement ou laisser le champ vide afin de le calculer."
+
+#: dialogs/rc.cpp:507
+msgid "Current amount"
+msgstr "Montant actuel"
+
+#: dialogs/rc.cpp:510
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the amount for principal and interest then enter "
+"it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"KMyMoney calcule soit le nouveau taux d'intérêt, soit le montant de "
+"l'amortissement et de l'intérêt. Si vous connaissez le montant de "
+"l'amortissement et de l'intérêt, saisissez-le ici.\n"
+"\n"
+"Si KMyMoney doit calculer cette valeur pour vous, alors laissez le champ "
+"vide."
+
+#: dialogs/rc.cpp:512 dialogs/rc.cpp:545
+msgid ""
+"\n"
+"Please enter the interest rate or leave the field empty to calculate it."
+msgstr ""
+"\n"
+"Veuillez saisir le taux d'intérêt ou laisser le champ vide pour le calculer."
+
+#: dialogs/rc.cpp:514
+msgid "Current rate"
+msgstr "Taux actuel"
+
+#: dialogs/rc.cpp:516
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the interest rate then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"KMyMoney calcule soit le nouveau taux d'intérêt, soit le montant de "
+"l'amortissement et de l'intérêt. Si vous connaissez le taux d'intérêt, "
+"saisissez-le ici.\n"
+"\n"
+"Si KMyMoney doit calculer cette valeur pour vous, alors laissez le champ "
+"vide."
+
+#: dialogs/rc.cpp:517
+msgid "Date of first payment"
+msgstr "Date du premier paiement"
+
+#: dialogs/rc.cpp:520
+msgid "Calculate Loan"
+msgstr "Calculer le Prêt"
+
+#: dialogs/rc.cpp:521
+msgid ""
+"\n"
+"You have successfully entered the general information about your loan. Next, "
+"KMyMoney needs some information about the calculation of the loan."
+msgstr ""
+"\n"
+"Vous avez saisi les informations générales de votre prêt avec succès. "
+"Maintenant, KMyMoney a besoin de quelques informations pour le calcul du "
+"prêt."
+
+#: dialogs/rc.cpp:523 dialogs/rc.cpp:611
+msgid ""
+"\n"
+"2. Calculate Loan"
+msgstr ""
+"\n"
+"2. Calculer le prêt"
+
+#: dialogs/rc.cpp:524 dialogs/rc.cpp:612
+msgid ""
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"3. Paiements"
+
+#: dialogs/rc.cpp:526
+msgid ""
+"\n"
+"How often will there be payments made to this loan?"
+msgstr ""
+"\n"
+"A quelle fréquence effectuerez-vous les paiements pour ce prêt ?"
+
+#: dialogs/rc.cpp:527
+msgid "Interest calculation"
+msgstr "Calcul des intérêts"
+
+#: dialogs/rc.cpp:528
+msgid ""
+"\n"
+"When does the actual interest rate get calculated?"
+msgstr ""
+"\n"
+"Quand sera calculé le taux d'intérêt actuel ?"
+
+#: dialogs/rc.cpp:529
+msgid "When the payment is received."
+msgstr "Quand le paiement est reçu."
+
+#: dialogs/rc.cpp:530
+msgid "When the payment is due."
+msgstr "Quand le paiement est dû."
+
+#: dialogs/rc.cpp:534 dialogs/rc.cpp:547 dialogs/rc.cpp:560 dialogs/rc.cpp:573
+#: dialogs/rc.cpp:586 dialogs/rc.cpp:598 dialogs/rc.cpp:679
+msgid "Loan amount:"
+msgstr "Montant du prêt :"
+
+#: dialogs/rc.cpp:535 dialogs/rc.cpp:548 dialogs/rc.cpp:561 dialogs/rc.cpp:574
+#: dialogs/rc.cpp:587 dialogs/rc.cpp:599 dialogs/rc.cpp:633 dialogs/rc.cpp:671
+msgid "Interest rate:"
+msgstr "Taux d'intérêt :"
+
+#: dialogs/rc.cpp:536 dialogs/rc.cpp:549 dialogs/rc.cpp:562 dialogs/rc.cpp:575
+#: dialogs/rc.cpp:588 dialogs/rc.cpp:600 dialogs/rc.cpp:669
+msgid "Term:"
+msgstr "Terme :"
+
+#: dialogs/rc.cpp:537 dialogs/rc.cpp:550 dialogs/rc.cpp:563 dialogs/rc.cpp:576
+#: dialogs/rc.cpp:589 dialogs/rc.cpp:601 dialogs/rc.cpp:622 dialogs/rc.cpp:630
+#: dialogs/rc.cpp:677
+msgid "Principal + Interest:"
+msgstr "Amortissement + intérêt :"
+
+#: dialogs/rc.cpp:538 dialogs/rc.cpp:551 dialogs/rc.cpp:564 dialogs/rc.cpp:577
+#: dialogs/rc.cpp:583 dialogs/rc.cpp:585 dialogs/rc.cpp:590 dialogs/rc.cpp:602
+msgid "Final amortization payment"
+msgstr "Paiement final de l'amortissement"
+
+#: dialogs/rc.cpp:557
+msgid "Duration"
+msgstr "Durée"
+
+#: dialogs/rc.cpp:558
+msgid ""
+"\n"
+"Please enter the term of this loan or leave the field empty to calculate it. "
+"The term is the time that is required to fully repay the loan. This time "
+"might be different from the time your loan contract is signed for."
+msgstr ""
+"\n"
+"Veuillez saisir le terme de ce prêt ou laisser ce champ vide pour le "
+"calculer. Le terme est le jour où vous aurez rembourser totalement le prêt. "
+"Cette date doit être différente de la date de signature de votre prêt."
+
+#: dialogs/rc.cpp:584
+msgid ""
+"\n"
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"\n"
+"Veuillez saisir le montant du paiement final d'amortissement, ou laisser le "
+"camp vide pour le calculer."
+
+#: dialogs/rc.cpp:596
+msgid "Calculation Overview"
+msgstr "Récapitulatif du Calcul"
+
+#: dialogs/rc.cpp:597
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown in the overview below. You can "
+"accept these values by selecting \"Next\" or change them by choosing \"Back"
+"\" to return to the input field for the information you want to change."
+msgstr ""
+"\n"
+"KMyMoney a calculé le prêt comme vous pouvez le voir dans l'aperçu ci-"
+"dessous. Vous pouvez accepter ces valeurs en choisissant \"Suivant\" ou les "
+"changer en choisissant \"Retour\" pour retourner au champ de saisie de "
+"l'information que vous voulez changer."
+
+#: dialogs/rc.cpp:609
+msgid ""
+"\n"
+"In the following steps, KMyMoney supports you in setting up categories and "
+"schedules for your loan payments."
+msgstr ""
+"\n"
+"Durant les étapes suivantes, KMyMoney vous aidera à paramétrer les "
+"catégories et les échéances pour vos paiements."
+
+#: dialogs/rc.cpp:614
+msgid ""
+"\n"
+"Please select the category you want to assign the interest payments to or "
+"create a new category."
+msgstr ""
+"\n"
+"Veuillez choisir la catégorie à laquelle vous voulez assigner les paiements "
+"des intérêts, ou créez une nouvelle catégorie."
+
+#: dialogs/rc.cpp:615
+msgid "Additional Fees"
+msgstr "Frais additionnels"
+
+#: dialogs/rc.cpp:616
+msgid ""
+"\n"
+"If your regular payment contains any additional fees, click on the button "
+"\"Additional fees\" to enter them."
+msgstr ""
+"\n"
+"Si vos paiements réguliers contiennent des frais additionnels, appuyez sur "
+"le bouton \"Frais additionnels\" pour les saisir."
+
+#: dialogs/rc.cpp:617
+msgid "= periodical payment:"
+msgstr "= paiement régulier :"
+
+#: dialogs/rc.cpp:623
+msgid ""
+"If no additional fees are included in your periodical payment or you have "
+"entered all such fees, then click on \"Next\"."
+msgstr ""
+"Si aucun frais additionnels ne sont inclus dans vos paiements réguliers, ou "
+"si vous avez saisi ces frais, appuyez sur \"Suivant\"."
+
+#: dialogs/rc.cpp:625
+msgid ""
+"KMyMoney will create a schedule for this payment and reminds you whenever a "
+"payment must be made.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"KMyMoney créera une échéance pour ce paiement et vous rappellera lorsqu'un "
+"paiement devra être fait.<p>\n"
+"Si vous choisissez d'enregistrer tous les paiements, cette date a déjà été "
+"fournie. Si vous choisissez d'enregistrer seulement ces années de paiements, "
+"alors la <b>Première date de paiement dû</b> est la date du premier fait "
+"cette année."
+
+#: dialogs/rc.cpp:626
+msgid "First payment due on:"
+msgstr "Premier paiement dû le :"
+
+#: dialogs/rc.cpp:627
+msgid "Make payment from/to:"
+msgstr "Faire un paiement de/à :"
+
+#: dialogs/rc.cpp:629
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown below. If you want to accept these "
+"values use the \"Finish\" button to update your account, otherwise use the "
+"\"Back\" button to modify your settings."
+msgstr ""
+"\n"
+"KMyMoney a calculé le prêt comme montré ci-dessous. Si vous voulez accepter "
+"ces valeurs, appuyez sur le bouton \"Terminer\" pour mettre à jour votre "
+"compte, sinon appuyez sur le bouton \"Retour\" pour modifier vos paramètres."
+
+#: dialogs/rc.cpp:631
+msgid "Additional fees:"
+msgstr "Frais additionnels :"
+
+#: dialogs/rc.cpp:632
+msgid "Total payment:"
+msgstr "Paiement total :"
+
+#: dialogs/rc.cpp:634
+msgid "Valid from:"
+msgstr "Valide à partir :"
+
+#: dialogs/rc.cpp:635
+msgid "Affected payments:"
+msgstr "Paiements affectés :"
+
+#: dialogs/rc.cpp:645
+msgid "Press this to create a new asset account"
+msgstr "Pressez ce bouton pour créer un nouveau compte d'actif"
+
+#: dialogs/rc.cpp:648
+msgid ""
+"\n"
+"This page summarizes the data you entered. If you need to modify anything, "
+"please use the \"Back\" button to go to respective page. Otherwise use the "
+"\"Finish\" button to create the account."
+msgstr ""
+"\n"
+"Cette page résume les données que vous avez saisies. Si vous devez modifier "
+"quoi que ce soit, veuillez utiliser le bouton \"Retour\" pour retourner à la "
+"page correspondante. Sinon, utilisez le bouton \"Terminer\" pour créer le "
+"compte."
+
+#: dialogs/rc.cpp:650
+msgid "Payee:"
+msgstr "Tiers :"
+
+#: dialogs/rc.cpp:653
+msgid "First payment:"
+msgstr "Premier paiement :"
+
+#: dialogs/rc.cpp:655
+msgid "Amount is:"
+msgstr "Le montant est :"
+
+#: dialogs/rc.cpp:656
+msgid "Loan calculation"
+msgstr "Calcul du prêt"
+
+#: dialogs/rc.cpp:660
+msgid "Periodic Payment:"
+msgstr "Paiements Régulier :"
+
+#: dialogs/rc.cpp:661
+msgid "Additional Fees:"
+msgstr "Frais Additionnels :"
+
+#: dialogs/rc.cpp:662
+msgid "Interest category:"
+msgstr "Catégorie des intérêts :"
+
+#: dialogs/rc.cpp:663
+msgid "Payment from:"
+msgstr "Paiement de :"
+
+#: dialogs/rc.cpp:666
+msgid "Next due date:"
+msgstr "Date du prochain paiement :"
+
+#: dialogs/rc.cpp:673
+msgid "Final Payment:"
+msgstr "Dernier paiement :"
+
+#: dialogs/rc.cpp:675
+msgid "Interest is due:"
+msgstr "L'intérêt est dû :"
+
+#: dialogs/rc.cpp:680
+msgid "Payment frequency:"
+msgstr "Fréquence des paiements :"
+
+#: dialogs/rc.cpp:682
+msgid "Online Quote Configuration"
+msgstr "Configuration de la Cotation en ligne"
+
+#: dialogs/rc.cpp:687
+msgid "Perl Location:"
+msgstr "Emplacement de Perl :"
+
+#: dialogs/rc.cpp:688
+msgid "Script:"
+msgstr "Script :"
+
+#: dialogs/rc.cpp:690
+msgid "Reassign payees"
+msgstr "Réaffecter le tiers"
+
+#: dialogs/rc.cpp:691
+msgid ""
+"The transactions associated with the selected payees need to be re-assigned "
+"to a different payee before the selected payees can be deleted. Please "
+"select a payee from the list below."
+msgstr ""
+"Les opérations associées avec les tiers choisis nécessitent d'être "
+"réassignées à un tiers différent avant que les tiers sélectionnés puissent "
+"être supprimés. Merci de choisir un tiers dans la liste en dessous."
+
+#: dialogs/rc.cpp:692
+msgid "Available payees:"
+msgstr "Tiers disponibles :"
+
+#: dialogs/rc.cpp:693
+msgid "Assign deleted names to the above selected payee's matching list"
+msgstr ""
+"Assigner les noms supprimés au tiers sélectionné dans la liste correspondante"
+
+#: dialogs/rc.cpp:696
+msgid "PluginDlg"
+msgstr "Dialogue Modules d'extension"
+
+#: dialogs/rc.cpp:697
+msgid "PlugIn"
+msgstr "Modules d'extension"
+
+#: dialogs/rc.cpp:698 widgets/transaction.cpp:1071
+#: widgets/transaction.cpp:1658
+msgid "Status"
+msgstr "État"
+
+#: dialogs/rc.cpp:699
+msgid "Feature"
+msgstr "Fonctionnalité"
+
+#: dialogs/rc.cpp:703
+msgid "Reconciliation Dialog"
+msgstr "Rapprochement"
+
+#: dialogs/rc.cpp:704
+msgid ""
+"This dialog will assist in helping you to balance your account.\n"
+"\n"
+"Click on an appropriate transaction within one of the two list views to mark "
+"it as reconciled. To create a transaction or edit\n"
+"a transaction you can return to the register by clicking on the Edit "
+"Transactions button.\n"
+"\n"
+"Your account is balanced when the Difference is Zero. Click on the Finish "
+"button to save the reconciled transactions."
+msgstr ""
+"Cette boîte de dialogue vous aidera à équilibrer votre compte.\n"
+"\n"
+"Appuyez sur l'opération de votre choix dans une des deux listes pour la "
+"marquer comme rapprochée. Pour créer ou éditer une opération, vous pouvez "
+"revenir au registre en appuyant sur le bouton <b>Éditer les Opérations</b>.\n"
+"\n"
+"Votre compte est équilibré quand la différence est de zéro. Appuyez sur le "
+"bouton <b>Terminer</b> pour sauvegarder les opérations rapprochées."
+
+#: dialogs/rc.cpp:705
+msgid "Withdrawals"
+msgstr "Retraits"
+
+#: dialogs/rc.cpp:707 dialogs/rc.cpp:708 dialogs/rc.cpp:822
+msgid "$"
+msgstr "$"
+
+#: dialogs/rc.cpp:710
+msgid "Previous Balance:"
+msgstr "Solde précédent :"
+
+#: dialogs/rc.cpp:711 dialogs/rc.cpp:713 dialogs/rc.cpp:715 dialogs/rc.cpp:717
+#: dialogs/rc.cpp:820
+msgid "0"
+msgstr "0"
+
+#: dialogs/rc.cpp:712
+msgid "Ending Balance:"
+msgstr "Solde final :"
+
+#: dialogs/rc.cpp:714
+msgid "Cleared Balance:"
+msgstr "Solde pointé :"
+
+#: dialogs/rc.cpp:716
+msgid "Difference:"
+msgstr "Différence :"
+
+#: dialogs/rc.cpp:718
+msgid "Edit Transactions..."
+msgstr "Éditer les opérations ..."
+
+#: dialogs/rc.cpp:721
+msgid "Security List Editor"
+msgstr "Éditeur de la Liste des Valeurs"
+
+#: dialogs/rc.cpp:726
+msgid "Market"
+msgstr "Marché"
+
+#: dialogs/rc.cpp:729
+msgid "Cash Fraction"
+msgstr "Fraction d'espèces"
+
+#: dialogs/rc.cpp:730
+msgid "Add..."
+msgstr "Ajouter ..."
+
+#: dialogs/rc.cpp:732 widgets/kmymoneypriceview.cpp:157
+msgid "Delete..."
+msgstr "Supprimer ..."
+
+#: dialogs/rc.cpp:733
+msgid "Show national currencies"
+msgstr "Afficher les devises nationales"
+
+#: dialogs/rc.cpp:735
+msgid "KMyMoney - Select Database"
+msgstr "KMyMoney - Choisir une base de données"
+
+#: dialogs/rc.cpp:736
+msgid "CAUTION!"
+msgstr "ATTENTION!"
+
+#: dialogs/rc.cpp:737
+msgid ""
+"<font color=\"#ff2727\">This software is still in an experimental stage, and "
+"there are still some known response time problems. Please be patient; we are "
+"working on them.\n"
+"As always, please make sure you have adequate backups of your data.</font>"
+msgstr ""
+"<font color=\"#ff2727\">Ce logiciel est encore dans un état expérimental et "
+"il ya encore quelques problèmes de temps de réponse connue. Merci d'être "
+"patient, nous y travaillons.\n"
+"Comme toujours, veuillez vous assurer que vous avez une copie de sauvegarde "
+"de vos données.</font>"
+
+#: dialogs/rc.cpp:738
+msgid "Database Type"
+msgstr "Type de Base de données"
+
+#: dialogs/rc.cpp:739
+msgid "Database Name"
+msgstr "Nom de la base de données"
+
+#: dialogs/rc.cpp:740
+msgid "Host Name"
+msgstr "Nom Ordinateur"
+
+#: dialogs/rc.cpp:741
+msgid "User Name"
+msgstr "Nom Utilisateur"
+
+#: dialogs/rc.cpp:743
+msgid "Preload &all data"
+msgstr "Pré-ch&arger toutes les données"
+
+#: dialogs/rc.cpp:745
+msgid "&Generate SQL"
+msgstr "&Générer SQL"
+
+#: dialogs/rc.cpp:747
+msgid "Ca&ncel"
+msgstr "A&nnuler"
+
+#: dialogs/rc.cpp:762 widgets/rc.cpp:172
+msgid "Sort options"
+msgstr "Options de tri"
+
+#: dialogs/rc.cpp:763
+msgid "Use default"
+msgstr "Utiliser par défaut"
+
+#: dialogs/rc.cpp:767
+msgid "Correct splits"
+msgstr "Correction de la répartition"
+
+#: dialogs/rc.cpp:769
+msgid "How do you want to proceed?"
+msgstr "Comment voulez-vous procéder ?"
+
+#: dialogs/rc.cpp:770
+msgid "Continue to edit splits"
+msgstr "Continuer d'éditer la répartition"
+
+#: dialogs/rc.cpp:771
+#, c-format
+msgid "Change total amount of transaction to %1."
+msgstr "Changer le montant total de l'opération pour %1."
+
+#: dialogs/rc.cpp:772
+msgid "Distribute difference of %1 among all splits."
+msgstr "Répartir la différence de %1 entre toutes les parties."
+
+#: dialogs/rc.cpp:773
+msgid "Leave %1 unassigned."
+msgstr "Laisser %1 non attribué."
+
+#: dialogs/rc.cpp:776
+msgid "Split transaction"
+msgstr "Opération répartie"
+
+#: dialogs/rc.cpp:777
+msgid "<b>11,00<b>"
+msgstr "<b>11,00<b>"
+
+#: dialogs/rc.cpp:778
+msgid "<b>111,00<b>"
+msgstr "<b>111,00<b>"
+
+#: dialogs/rc.cpp:779
+msgid "Unassigned"
+msgstr "Non assigné"
+
+#: dialogs/rc.cpp:780
+msgid "Sum of splits"
+msgstr "Somme des répartitions"
+
+#: dialogs/rc.cpp:781
+msgid "100,00"
+msgstr "100,00"
+
+#: dialogs/rc.cpp:782
+msgid "Transaction amount"
+msgstr "Montant de l'opération"
+
+#: dialogs/rc.cpp:783
+msgid "Merge"
+msgstr "Fusionner"
+
+#: dialogs/rc.cpp:784
+msgid "Merges splits with the same category to one split"
+msgstr ""
+"Fusionner les répartitions avec la même catégorie dans une seule répartition"
+
+#: dialogs/rc.cpp:785
+msgid ""
+"In case you have multiple split entries to the same category and you like to "
+"keep them as a single split, press this button. The amount for identical "
+"categories will be added and stored in a single split for that category."
+msgstr ""
+"Dans le cas où vous avez plusieurs répartitions de la même catégorie et vous "
+"voulez les garder comme une seule répartition, appuyez sur ce bouton. Le "
+"montant identique pour les catégories sera ajouté et stocké dans une seule "
+"répartition pour cette catégorie."
+
+#: dialogs/rc.cpp:786
+msgid "Clear &Zero"
+msgstr "Mettre à &Zéro"
+
+#: dialogs/rc.cpp:787
+msgid "Removes all splits that have a value of zero."
+msgstr "Supprimer les répartitions qui ont une valeur de 0."
+
+#: dialogs/rc.cpp:791
+msgid "New price entry"
+msgstr "Nouveau cours"
+
+#: dialogs/rc.cpp:799
+msgid "Void mark"
+msgstr "Marque vide"
+
+#: dialogs/rc.cpp:800
+msgid "Opening Balance text"
+msgstr "Texte de Solde de Départ"
+
+#: dialogs/rc.cpp:801
+msgid "Type field text"
+msgstr "Texte de champ type"
+
+#: dialogs/rc.cpp:802
+msgid "Account delimiter"
+msgstr "Délimiteur de compte"
+
+#: dialogs/rc.cpp:804
+msgid "Attempt to match similar transactions"
+msgstr "Essayer de faire correspondre les opérations similaires"
+
+#: dialogs/rc.cpp:806 dialogs/rc.cpp:808
+msgid "The format of the dates in the QIF file."
+msgstr "Le format des dates dans les fichiers Quicken (.QIF)."
+
+#: dialogs/rc.cpp:809 dialogs/rc.cpp:811
+msgid ""
+"If a QIF file contains date entries with years represented with two digits "
+"then either an apostrophe or a slash may be used to delimit the year in the "
+"dates for certain centuries. This enables 1905 to be distinguished from "
+"2005. Specify here which range of years will have year delimited by an "
+"apostrophe (eg. for Quicken this is usually 1900-1949)."
+msgstr ""
+"Si un fichier Quicken (.QIF) contient des dates avec des années présentées "
+"par deux chiffres alors une apostrophe ou un caractère / doit être utilisé "
+"pour délimiter l'année. Cela permet de distinguer 1905 de 2005. Spécifiez "
+"ici les années délimitées par une apostrophe (pour Quicken, c'est "
+"typiquement 1900-1949)."
+
+#: dialogs/rc.cpp:810
+msgid "Apostrophe Handling"
+msgstr "Prise en Charge de l'apostrophe"
+
+#: dialogs/rc.cpp:812
+msgid "Amounts"
+msgstr "Montants"
+
+#: dialogs/rc.cpp:813
+msgid "Field"
+msgstr "Champ"
+
+#: dialogs/rc.cpp:814
+msgid "QIF-Record"
+msgstr "Enregistrement QIF (Quicken Interchange Format)"
+
+#: dialogs/rc.cpp:815 dialogs/rc.cpp:833
+msgid "Decimal Symbol"
+msgstr "Symbole décimal"
+
+#: dialogs/rc.cpp:816
+msgid "Thousand Delimiter"
+msgstr "Séparateur des milliers"
+
+#: dialogs/rc.cpp:817
+msgid "SortColumnInvisible"
+msgstr "SortColumnInvisible"
+
+#: dialogs/rc.cpp:819
+msgid "T"
+msgstr "T"
+
+#: dialogs/rc.cpp:821
+msgid "Split-Value"
+msgstr "Valeur de Délimitation"
+
+#: dialogs/rc.cpp:824
+msgid "Commission"
+msgstr "Commission"
+
+#: dialogs/rc.cpp:825
+msgid "O"
+msgstr "O"
+
+#: dialogs/rc.cpp:826
+msgid "2"
+msgstr "2"
+
+#: dialogs/rc.cpp:828
+msgid "I"
+msgstr "I"
+
+#: dialogs/rc.cpp:829
+msgid "3"
+msgstr "3"
+
+#: dialogs/rc.cpp:831
+msgid "Q"
+msgstr "Q"
+
+#: dialogs/rc.cpp:832
+msgid "4"
+msgstr "4"
+
+#: dialogs/rc.cpp:834
+msgid "Thousands Separator"
+msgstr "Séparateur des Milliers"
+
+#: dialogs/rc.cpp:836
+msgid "Output filter location"
+msgstr "Emplacement du filtre de sortie"
+
+#: dialogs/rc.cpp:837
+msgid "Input filter file type"
+msgstr "Type de fichier du filtre de saisie"
+
+#: dialogs/rc.cpp:838
+msgid "*.qif"
+msgstr "*.qif"
+
+#: dialogs/rc.cpp:839
+msgid "Input filter location"
+msgstr "Emplacement du filtre de saisie"
+
+#: dialogs/rc.cpp:843
+msgid "Rename"
+msgstr "Renommer"
+
+#: dialogs/kselecttransactionsdlg.cpp:44
+msgid "Select Transaction"
+msgstr "Sélectionner l'opération"
+
+#: dialogs/kselecttransactionsdlg.cpp:45
+msgid ""
+"Select a transaction and press the OK button or use Cancel to select none."
+msgstr ""
+"Sélectionnez une opération et appuyez sur le bouton OK ou utiliser Annuler "
+"pour n'en sélectionner aucune."
+
+#: dialogs/knewinvestmentwizard.cpp:62
+msgid "Investment detail wizard"
+msgstr "Assistant - Détail de l'investissement"
+
+#: dialogs/knewinvestmentwizard.cpp:82
+msgid "Security detail wizard"
+msgstr "Assistant - Détail de Valeur"
+
+#: dialogs/knewaccountdlg.cpp:121 dialogs/knewinvestmentwizard.cpp:109
+msgid ""
+"_: default price mode\n"
+"<default>"
+msgstr "<défaut>"
+
+#: dialogs/knewaccountdlg.cpp:122 dialogs/knewinvestmentwizard.cpp:110
+msgid "Price per share"
+msgstr "Prix par titre"
+
+#: dialogs/knewaccountdlg.cpp:123 dialogs/knewinvestmentwizard.cpp:111
+msgid "Total for all shares"
+msgstr "Total pour tous les titres"
+
+#: dialogs/knewinvestmentwizard.cpp:129
+msgid "This wizard allows you to modify the selected investment."
+msgstr "Cette assistant vous permet de modifier l'investissement sélectionné."
+
+#: dialogs/knewinvestmentwizard.cpp:132
+msgid "This wizard allows you to modify the selected security."
+msgstr "Cet assistant vous permet de modifier la valeur sélectionnée."
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid ""
+"The selected symbol is already on file. Do you want to reuse the existing "
+"security?"
+msgstr ""
+"Le symbole sélectionné est déjà dans votre fichier. Est-ce que vous voulez "
+"réutiliser la valeur existante ?"
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid "Security found"
+msgstr "Valeur trouvée"
+
+#: dialogs/knewinvestmentwizard.cpp:309
+msgid "Unable to create all objects for the investment"
+msgstr "Impossible de créer tous les objets de l'investissement"
+
+#: dialogs/keditequityentrydlg.cpp:78
+msgid "Change the price information of the selected entry."
+msgstr "Changer l'information du cours de la saisie sélectionnée."
+
+#: dialogs/kaccountselectdlg.cpp:64 widgets/kmymoneybriefschedule.cpp:59
+msgid "&Skip"
+msgstr "&Passer"
+
+#: dialogs/kaccountselectdlg.cpp:66 widgets/kmymoneybriefschedule.cpp:61
+msgid "Skip this transaction"
+msgstr "Sauter cette opération"
+
+#: dialogs/kaccountselectdlg.cpp:67
+msgid ""
+"Use this to skip importing this transaction and proceed with the next one."
+msgstr ""
+"Utilisez ceci pour sauter l'importation de cette opération et passer à la "
+"suivante."
+
+#: dialogs/kaccountselectdlg.cpp:72
+msgid "Create a new account/category"
+msgstr "Créer un nouveau compte / catégorie"
+
+#: dialogs/kaccountselectdlg.cpp:73
+msgid "Use this to add a new account/category to the file"
+msgstr "Utilisez ceci pour ajouter un nouveau compte / catégorie au fichier"
+
+#: dialogs/kaccountselectdlg.cpp:77
+msgid "&Abort"
+msgstr "&Abandonner"
+
+#: dialogs/kaccountselectdlg.cpp:79
+msgid "Abort the import operation and dismiss all changes"
+msgstr "Abandonner l'importation et annuler toutes les modifications"
+
+#: dialogs/kaccountselectdlg.cpp:80
+msgid ""
+"Use this to abort the import. Your financial data will be in the state "
+"before you started the QIF import."
+msgstr ""
+"Utilisez ceci pour interrompre l'importation. Vos données financières seront "
+"dans l'état précédant l'importation QIF."
+
+#: dialogs/knewaccountdlg.cpp:110
+msgid "Is a sub account"
+msgstr "est un sous-compte"
+
+#: dialogs/knewaccountdlg.cpp:184
+msgid "VAT account"
+msgstr "Compte de TVA"
+
+#: dialogs/knewaccountdlg.cpp:474
+msgid ""
+"You have not specified a name.\n"
+"Please fill in this field."
+msgstr ""
+"Vous n'avez pas spécifié de nom.\n"
+"Veuillez remplir ce champ."
+
+#: dialogs/knewaccountdlg.cpp:482
+msgid "Please select a parent account."
+msgstr "Veuillez sélectionner un compte père."
+
+#: dialogs/knewaccountdlg.cpp:489 dialogs/knewaccountdlg.cpp:1029
+msgid "<No Institution>"
+msgstr "<Pas d'établissement>"
+
+#: dialogs/knewaccountdlg.cpp:552
+msgid ""
+"An account named <b>%1</b> already exists. You cannot create a second "
+"account with the same name."
+msgstr ""
+"Un compte appelé <b>%1</b> existe déjà. Vous ne pouvez pas créer une "
+"deuxième compte avec le même nom."
+
+#: dialogs/knewaccountdlg.cpp:567
+msgid ""
+"A category named <b>%1</b> already exists. You cannot create a second "
+"category with the same name."
+msgstr ""
+"Une catégorie appelée <b>%1</b> existe déjà. Vous ne pouvez pas créer une "
+"deuxième catégorie avec le même nom."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid ""
+"You have selected to suppress the display of unused categories in the "
+"KMyMoney configuration dialog. The category you just created will therefore "
+"only be shown if it is used. Otherwise, it will be hidden in the accounts/"
+"categories view."
+msgstr ""
+"Vous avez choisi de supprimer l'affichage des catégories inutilisées dans le "
+"panneau de configuration de KMyMoney. La catégorie que vous venez de créer "
+"ne sera donc affichée que si elle est utilisée. Sinon, elle sera cachée dans "
+"la vue comptes/catégories."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid "Hidden categories"
+msgstr "Catégories masquées"
+
+#: dialogs/knewaccountdlg.cpp:927 dialogs/knewaccountdlg.cpp:979
+#, c-format
+msgid "Is a sub account of %1"
+msgstr "est un sous-compte de %1"
+
+#: dialogs/knewaccountdlg.cpp:1082
+msgid "Cannot add institution"
+msgstr "Impossible d'ajouter l'établissement"
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid ""
+"This dialog does not allow to create new payees. Please pick a payee from "
+"the list."
+msgstr ""
+"Cette fenêtre ne permet pas de créer de nouveaux tiers. Veuillez choisir un "
+"tiers dans la liste."
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid "Payee creation"
+msgstr "Création D'un tiers"
+
+#: dialogs/kimportdlg.cpp:69
+msgid "Use this to start the import operation"
+msgstr "Utilisez ceci pour démarrer l'opération d'importation"
+
+#: dialogs/kimportdlg.cpp:110
+msgid ""
+"%1|Import files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Fichiers importés\n"
+"%2|Tous les fichiers (*.*)"
+
+#: dialogs/kimportdlg.cpp:111
+msgid "Import File..."
+msgstr "Importation du fichier ..."
+
+#: dialogs/knewloanwizard.cpp:124
+msgid "Create a new category"
+msgstr "Créer une nouvelle catégorie"
+
+#: dialogs/knewloanwizard.cpp:125
+msgid "Use this to open the new account editor"
+msgstr "Utilisez ceci pour ouvrir l'éditeur de nouveau compte"
+
+#: dialogs/knewloanwizard.cpp:129
+msgid "&Additional fees..."
+msgstr "&Frais additionnels ..."
+
+#: dialogs/knewloanwizard.cpp:131
+msgid "Enter additional fees"
+msgstr "Entrez des frais additionnels"
+
+#: dialogs/knewloanwizard.cpp:132
+msgid ""
+"Use this to add any additional fees other than principal and interest "
+"contained in your periodical payments."
+msgstr ""
+"Utilisez ceci pour ajouter des frais supplémentaires autres que les intérêts "
+"et l'amortissement contenus dans vos paiements réguliers."
+
+#: dialogs/knewloanwizard.cpp:139
+msgid ""
+"Use this to create a new account to which the initial payment should be made"
+msgstr ""
+"Utilisez ce bouton pour créer un nouveau compte auquel le paiement initial "
+"devrait être fait"
+
+#: dialogs/knewloanwizard.cpp:208
+msgid "To whom do you make payments?"
+msgstr "A qui faites-vous des paiements ?"
+
+#: dialogs/knewloanwizard.cpp:209
+msgid "Payments to"
+msgstr "Paiements à"
+
+#: dialogs/knewloanwizard.cpp:214
+msgid "From whom do you expect payments?"
+msgstr "De qui attendez-vous des paiements ?"
+
+#: dialogs/knewloanwizard.cpp:215
+msgid "Payments from"
+msgstr "Paiements à partir de"
+
+#: dialogs/knewloanwizard.cpp:233
+msgid "Please enter the date, the first payment for this loan was/is due."
+msgstr "Veuillez saisir la date du premier paiement dû pour ce prêt."
+
+#: dialogs/knewloanwizard.cpp:235
+msgid ""
+"Note: Consult the loan contract for details of the first due date. Keep in "
+"mind, that the first due date usually differs from the date the contract was "
+"signed"
+msgstr ""
+"Note : Consultez le contrat du prêt pour obtenir la date de premier "
+"paiement. Souvenez-vous que la date du premier versement est souvent "
+"différente de la date à laquelle le contrat a été signé"
+
+#: dialogs/knewloanwizard.cpp:240
+msgid ""
+"Please enter the original loan amount in the field below or leave it empty "
+"to be calculated."
+msgstr ""
+"Veuillez saisir le montant du prêt ou laissez le champ vide pour qu'il soit "
+"calculé."
+
+#: dialogs/knewloanwizard.cpp:248
+msgid ""
+"Please enter the date, the first payment for this loan was/is due this year."
+msgstr ""
+"Veuillez saisir la date à laquelle le premier paiement est /a été dû cette "
+"année pour ce ce prêt."
+
+#: dialogs/knewloanwizard.cpp:250
+msgid ""
+"Note: You can easily figure out the date of the first payment if you consult "
+"the last statement of last year."
+msgstr ""
+"Note : Vous pouvez facilement retrouver la date du premier paiement si vous "
+"consultez le dernier relevé de l'année dernière."
+
+#: dialogs/knewloanwizard.cpp:254
+msgid ""
+"Please enter the remaining loan amount of last years final statement in the "
+"field below. You should not leave this field empty."
+msgstr ""
+"Veuillez saisir le montant restant du prêt, au dernier relevé de l'année "
+"dernière. Vous ne devez pas laisser ce champ vide."
+
+#: dialogs/knewloanwizard.cpp:311 dialogs/knewloanwizard.cpp:326
+#: dialogs/knewloanwizard.cpp:341 dialogs/knewloanwizard.cpp:357
+#: dialogs/knewloanwizard.cpp:373
+msgid "calculate"
+msgstr "calcule"
+
+#: dialogs/knewloanwizard.cpp:417
+msgid "borrowed"
+msgstr "emprunté"
+
+#: dialogs/knewloanwizard.cpp:419
+msgid "lend"
+msgstr "prêt"
+
+#: dialogs/knewloanwizard.cpp:423
+msgid "not assigned"
+msgstr "non assigné"
+
+#: dialogs/knewloanwizard.cpp:430
+msgid "on reception"
+msgstr "à la réception"
+
+#: dialogs/knewloanwizard.cpp:432
+msgid "on due date"
+msgstr "à la date d'échéance"
+
+#: dialogs/knewloanwizard.cpp:471
+msgid ""
+"The loan wizard is unable to calculate two different values for your loan at "
+"the same time. Please enter a value for the %1 on this page or backup to the "
+"page where the current value to be calculated is defined and fill in a "
+"value."
+msgstr ""
+"L'assistant de prêt ne peut pas calculer deux valeurs différentes en même "
+"temps pour votre prêt. Veuillez saisir une valeur pour le %1 sur cette page "
+"ou revenir à la page où la valeur à calculer a été définie et saisir une "
+"valeur."
+
+#: dialogs/knewloanwizard.cpp:500
+msgid ""
+"You selected, that payments have already been made towards this loan. This "
+"requires you to enter the loan amount exactly as found on your last "
+"statement."
+msgstr ""
+"Vous avez déterminé que des paiements ont déjà été effectués pour ce prêt. "
+"Vus devez donc saisir le montant du prêt exactement comme vous pouvez le "
+"voir sur votre dernier relevé."
+
+#: dialogs/knewloanwizard.cpp:513
+msgid "interest rate"
+msgstr "taux d'intérêt"
+
+#: dialogs/knewloanwizard.cpp:522
+msgid "term"
+msgstr "terme"
+
+#: dialogs/knewloanwizard.cpp:532
+msgid "principal and interest"
+msgstr "amortissement et intérêt"
+
+#: dialogs/knewloanwizard.cpp:743
+#, c-format
+msgid ""
+"The number of payments has been decremented and the final payment has been "
+"modified to %1."
+msgstr ""
+"Le nombre de paiements a été diminué et le dernier paiement a été changé "
+"pour %1."
+
+#: dialogs/knewloanwizard.cpp:751 dialogs/knewloanwizard.cpp:771
+#, c-format
+msgid "The final payment has been modified to %1."
+msgstr "Le dernier paiement a été changé en %1."
+
+#: dialogs/knewloanwizard.cpp:802
+msgid "KMyMoney has calculated a final payment of %1 for this loan."
+msgstr "KMyMoney a calculé un paiement final de %1 pour ce prêt."
+
+#: dialogs/knewloanwizard.cpp:817
+msgid ""
+"You have entered mis-matching information. Please backup to the appropriate "
+"page and update your figures or leave one value empty to let KMyMoney "
+"calculate it for you"
+msgstr ""
+"Vous avez saisi une information non correspondante. Merci de revenir à la "
+"page appropriée et de mettre à jour les chiffres ou laissez une valeur vide "
+"pour laisser KMyMoney la calculer pour vous"
+
+#: dialogs/kfindtransactiondlg.cpp:230
+msgid ""
+"Warning: Filtering by Category will exclude all transfers from the results."
+msgstr ""
+"Attention : Le filtrage par Catégorie exclura tous les virements dans les "
+"résultats."
+
+#: dialogs/kfindtransactiondlg.cpp:239
+msgid "(None)"
+msgstr "(Rien)"
+
+#: dialogs/kfindtransactiondlg.cpp:241
+msgid "Current selections: "
+msgstr "Sélections courantes : "
+
+#: dialogs/kfindtransactiondlg.cpp:716
+msgid "Found %1 matching transactions (D %2 / P %3 = %4)"
+msgstr "%1 opérations correspondantes trouvées (D %2 / P %3 = %4)"
+
+#: dialogs/kfindtransactiondlg.cpp:719
+msgid "Found %1 matching transactions"
+msgstr "%1 opérations correspondantes trouvées"
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "The institution name field is empty. Please enter the name."
+msgstr ""
+"Le nom de l'établissement est vide. S'il vous plaît, veuillez saisir le nom."
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "Adding New Institution"
+msgstr "Ajouter un nouvel établissement"
+
+#: dialogs/kcsvprogressdlg.cpp:69
+msgid "C&lose"
+msgstr "&Fermer"
+
+#: dialogs/kcsvprogressdlg.cpp:247
+msgid " of "
+msgstr " sur "
+
+#: widgets/kmymoneypriceview.cpp:126
+msgid "Commodity"
+msgstr "Produit"
+
+#: widgets/kmymoneypriceview.cpp:130
+msgid "Source"
+msgstr "Source"
+
+#: widgets/kmymoneypriceview.cpp:143
+msgid "Price Options"
+msgstr "Options du Cours"
+
+#: widgets/kmymoneypriceview.cpp:153
+msgid "Online Price Update..."
+msgstr "Mise à jour du cours en ligne ..."
+
+#: widgets/kmymoneycombo.cpp:472 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+msgid "From"
+msgstr "De"
+
+#: widgets/transaction.cpp:668
+msgid "Transaction is missing a category assignment."
+msgstr "Absence de catégorie pour cette opération."
+
+#: widgets/transaction.cpp:671
+msgid "The transaction has a missing assignment of <b>%1</b>."
+msgstr "L'opération a un affectation manquante de <b>%1</b>."
+
+#: widgets/transaction.cpp:874
+msgid "Sell"
+msgstr "Vendre"
+
+#: widgets/transaction.cpp:876
+msgid "Buy"
+msgstr "Acheter"
+
+#: widgets/kmymoneycombo.cpp:520 widgets/transaction.cpp:879
+#: widgets/transaction.cpp:1447
+msgid "Dividend"
+msgstr "Dividendes"
+
+#: widgets/kmymoneycombo.cpp:518 widgets/transaction.cpp:881
+#: widgets/transaction.cpp:1453
+msgid "Yield"
+msgstr "Champ"
+
+#: widgets/transaction.cpp:886 widgets/transaction.cpp:1473
+msgid "Activity"
+msgstr "Activité"
+
+#: widgets/transaction.cpp:887
+msgid "Investment transaction"
+msgstr "Opération d'investissement"
+
+#: widgets/transaction.cpp:1021 widgets/transaction.cpp:1114
+#: widgets/transaction.cpp:1165
+msgid "*** UNASSIGNED ***"
+msgstr "*** NON ASSIGNE ***"
+
+#: widgets/kmymoneycombo.cpp:517 widgets/transaction.cpp:1435
+msgid "Add shares"
+msgstr "Ajouter les titres"
+
+#: widgets/kmymoneycombo.cpp:516 widgets/transaction.cpp:1438
+msgid "Remove shares"
+msgstr "Supprimer les titres"
+
+#: widgets/kmymoneycombo.cpp:522 widgets/transaction.cpp:1441
+msgid "Buy shares"
+msgstr "Acheter des titres"
+
+#: widgets/kmymoneycombo.cpp:521 widgets/transaction.cpp:1444
+msgid "Sell shares"
+msgstr "Vendre des titres"
+
+#: widgets/transaction.cpp:1450
+msgid "Reinvest Dividend"
+msgstr "Réinvestir les Dividendes"
+
+#: widgets/kmymoneycombo.cpp:515 widgets/transaction.cpp:1456
+msgid "Split shares"
+msgstr "Répartir des titres"
+
+#: widgets/transaction.cpp:1515
+msgid "Ratio"
+msgstr "Pourcentage de répartition"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:241
+msgid "%1 Bills."
+msgstr "%1 Factures."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:257
+msgid "%1 Deposits."
+msgstr "%1 Dépôts."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:273
+msgid "%1 Transfers."
+msgstr "%1 Virements."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:355
+msgid ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+msgstr ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:57
+#: widgets/kmymoneyaccounttreeforecast.cpp:84
+msgid "Current"
+msgstr "Courant"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:72
+#: widgets/kmymoneyaccounttreeforecast.cpp:93
+msgid "Total variation"
+msgstr "Variation totale"
+
+#: widgets/stdtransactionmatched.cpp:130
+msgid ""
+"KMyMoney has matched a downloaded transaction with a manually entered one "
+"(result above)"
+msgstr ""
+"KMyMoney a fait correspondre une opération télé-chargée avec une opération "
+"saisie manuellement (résultat ci-après)"
+
+#: widgets/stdtransactionmatched.cpp:138
+msgid "Bank entry:"
+msgstr "Banque saisie :"
+
+#: widgets/stdtransactionmatched.cpp:166
+msgid "Your entry:"
+msgstr "Votre saisie :"
+
+#: widgets/kbudgetvalues.cpp:187
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a monthly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+"Vous avez saisi des valeurs de budget en utilisant une autre base qui "
+"correspondrait à un budget mensuel de <b>%1</b>. Cette valeur doit-elle être "
+"utilisée pour définir le budget mensuel ?"
+
+#: widgets/kbudgetvalues.cpp:187 widgets/kbudgetvalues.cpp:206
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"_: Auto assignment (caption)\n"
+"Auto assignment"
+msgstr "Affectation automatique"
+
+#: widgets/kbudgetvalues.cpp:206
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a yearly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+"Vous avez saisi des valeurs de budget en utilisant une autre base qui "
+"correspondrait à un budget annuel de <b>%1</b>.Cette valeur doit-elle être "
+"utilisée pour définir le budget mensuel ?"
+
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"You have entered budget values using a different base which would result in "
+"an individual monthly budget of <b>%1</b>. Should this value be used to fill "
+"the monthly budgets?"
+msgstr ""
+"Vous avez saisi des valeurs de budget en utilisant une autre base de qui "
+"correspondrait à un budget individuel mensuel de <b>%1</b>.Cette valeur doit-"
+"elle être utilisée pour définir les budgets mensuels ?"
+
+#: widgets/kmymoneybriefschedule.cpp:62
+msgid "Use this button to skip this transaction"
+msgstr "Utilisez ce bouton pour sauter cette opération"
+
+#: widgets/kmymoneybriefschedule.cpp:67
+msgid "Record this transaction into the register"
+msgstr "Enregistrer cette opération dans le registre"
+
+#: widgets/kmymoneybriefschedule.cpp:68
+msgid "Use this button to record this transaction"
+msgstr "Utilisez ce bouton pour enregistrer cette opération"
+
+#: widgets/kmymoneybriefschedule.cpp:96
+msgid "%1 of %2"
+msgstr "%1 de %2"
+
+#: widgets/kmymoneybriefschedule.cpp:109
+msgid "Payment on %1 for %2 with %3 transactions remaining occuring %4."
+msgstr "Paiement le %1 de %2 avec %3 opérations restantes arrivant %4."
+
+#: widgets/kmymoneybriefschedule.cpp:115
+msgid "Payment on %1 for %2 occuring %4."
+msgstr "Paiement le %1 de %2 arrivant %4."
+
+#: widgets/kmymoneybriefschedule.cpp:136
+msgid "%1 days overdue (%2 occurences)."
+msgstr "Impayé de %1 jours (%2 occurrence(s))."
+
+#: widgets/register.cpp:55
+msgid "Post date"
+msgstr "Date d'envoi"
+
+#: widgets/register.cpp:56
+msgid "Date entered"
+msgstr "Date saisie"
+
+#: widgets/register.cpp:60
+msgid "Entry order"
+msgstr "Saisir l'ordre"
+
+#: widgets/register.cpp:63
+msgid "Reconcile state"
+msgstr "État du rapprochement"
+
+#: widgets/register.cpp:440
+msgid ""
+"_: Deposits onto account\n"
+"Deposits"
+msgstr "Dépôt"
+
+#: widgets/register.cpp:442
+msgid ""
+"_: Payments towards credit card\n"
+"Payments"
+msgstr "Paiements"
+
+#: widgets/register.cpp:446
+msgid ""
+"_: Payments made from account\n"
+"Payments"
+msgstr "Paiements"
+
+#: widgets/register.cpp:448
+msgid ""
+"_: Payments made with credit card\n"
+"Charges"
+msgstr "Frais"
+
+#: widgets/register.cpp:736
+msgid ""
+"_: Payment made from account\n"
+"Payment"
+msgstr "Paiement"
+
+#: widgets/register.cpp:737
+msgid ""
+"_: Deposit into account\n"
+"Deposit"
+msgstr "Dépôt"
+
+#: widgets/register.cpp:813
+msgid ""
+"_: Payment made with credit card\n"
+"Charge"
+msgstr "Frais"
+
+#: widgets/register.cpp:814
+msgid ""
+"_: Payment towards credit card\n"
+"Payment"
+msgstr "Paiement"
+
+#: widgets/register.cpp:818 widgets/register.cpp:824
+msgid ""
+"_: Decrease of asset/liability value\n"
+"Decrease"
+msgstr "Débit"
+
+#: widgets/register.cpp:819 widgets/register.cpp:823
+msgid ""
+"_: Increase of asset/liability value\n"
+"Increase"
+msgstr "Crédit"
+
+#: widgets/register.cpp:2280
+msgid "Prior transactions possibly filtered"
+msgstr "Avant les opérations éventuellement filtrées"
+
+#: widgets/register.cpp:2284
+msgid "Last reconciliation"
+msgstr "Dernier rapprochement"
+
+#: widgets/register.cpp:2291
+#, c-format
+msgid "Online Statement Balance: %1"
+msgstr "Solde du relevé en ligne : %1"
+
+#: widgets/register.cpp:2295
+msgid "This year"
+msgstr "Cette année"
+
+#: widgets/kmymoneycombo.cpp:674 widgets/register.cpp:2296
+msgid "Last month"
+msgstr "Mois dernier"
+
+#: widgets/register.cpp:2297
+msgid "This month"
+msgstr "Ce Mois"
+
+#: widgets/register.cpp:2298
+msgid "Last week"
+msgstr "Semaine dernière"
+
+#: widgets/register.cpp:2299
+msgid "This week"
+msgstr "Cette semaine"
+
+#: widgets/register.cpp:2300
+msgid "Yesterday"
+msgstr "Hier"
+
+#: widgets/kmymoneycombo.cpp:666 widgets/register.cpp:2301
+msgid "Today"
+msgstr "Aujourd'hui"
+
+#: widgets/register.cpp:2302 widgets/register.cpp:2307
+msgid "Future transactions"
+msgstr "Opérations futures"
+
+#: widgets/register.cpp:2303
+msgid "Next week"
+msgstr "Semaine suivante"
+
+#: widgets/kmymoneycalendar.cpp:131 widgets/register.cpp:2304
+msgid "Next month"
+msgstr "Mois suivant"
+
+#: widgets/kmymoneycombo.cpp:670 widgets/register.cpp:2315
+msgid "Current fiscal year"
+msgstr "Année fiscale courante"
+
+#: widgets/register.cpp:2316
+msgid "Previous fiscal year"
+msgstr "Année fiscale précédente"
+
+#: widgets/register.cpp:2317
+msgid "Next fiscal year"
+msgstr "Année fiscale suivante"
+
+#: widgets/register.cpp:2349
+msgid ""
+"_: Unknown payee\n"
+"Unknown"
+msgstr "Inconnu"
+
+#: widgets/register.cpp:2368
+msgid ""
+"_: Unknown category\n"
+"Unknown"
+msgstr "Inconnue"
+
+#: widgets/register.cpp:2387
+msgid ""
+"_: Unknown security\n"
+"Unknown"
+msgstr "Inconnue"
+
+#: widgets/klistviewsearchline.cpp:249
+msgid "Search Columns"
+msgstr "Colonnes de recherche"
+
+#: widgets/klistviewsearchline.cpp:251
+msgid "All Visible Columns"
+msgstr "Toutes les colonnes visibles"
+
+#: widgets/klistviewsearchline.cpp:266
+msgid ""
+"_: Column number %1\n"
+"Column No. %1"
+msgstr "Colonne nº %1"
+
+#: widgets/klistviewsearchline.cpp:461 widgets/registersearchline.cpp:286
+msgid "S&earch:"
+msgstr "Ch&ercher :"
+
+#: widgets/kmymoneyaccountselector.cpp:110
+#: widgets/kmymoneyaccountselector.cpp:371
+msgid "Income categories"
+msgstr "Catégories de revenus"
+
+#: widgets/kmymoneyaccountselector.cpp:349
+#: widgets/kmymoneyaccountselector.cpp:350
+msgid "Favorites"
+msgstr "Favoris"
+
+#: widgets/kmymoneyaccountselector.cpp:357
+msgid "Asset accounts"
+msgstr "Comptes d'actif"
+
+#: widgets/kmymoneyaccountselector.cpp:364
+msgid "Liability accounts"
+msgstr "Comptes de passif"
+
+#: widgets/kmymoneyaccountselector.cpp:381
+msgid "Expense categories"
+msgstr "Catégories de dépenses"
+
+#: widgets/kmymoneyaccountselector.cpp:391
+msgid "Equity accounts"
+msgstr "Comptes d'actions"
+
+#: widgets/kmymoneyaccounttreebase.cpp:120
+msgid "Total Balance"
+msgstr "Solde total"
+
+#: widgets/kmymoneyaccounttreebase.cpp:124
+msgid "Total Value"
+msgstr "Valeur totale"
+
+#: widgets/registersearchline.cpp:75
+msgid ""
+"_: label for status combo\n"
+"Stat&us"
+msgstr "&État"
+
+#: widgets/registersearchline.cpp:79
+msgid "Any status"
+msgstr "Aucun état"
+
+#: widgets/registersearchline.cpp:80
+msgid "Imported"
+msgstr "Importé"
+
+#: widgets/registersearchline.cpp:81
+msgid "Matched"
+msgstr "Correspond"
+
+#: widgets/registersearchline.cpp:82
+msgid "Erroneous"
+msgstr "Erroné"
+
+#: widgets/registersearchline.cpp:83
+msgid "Not marked"
+msgstr "Non marqué"
+
+#: widgets/kmymoneyaccounttree.cpp:54
+msgid ""
+"_: Column heading for category in tax report\n"
+"Tax"
+msgstr "Taxe"
+
+#: widgets/kmymoneyaccounttree.cpp:58
+msgid ""
+"_: Column heading for VAT category\n"
+"VAT"
+msgstr "TVA"
+
+#: widgets/kmymoneywizard.cpp:101
+msgid "Continue with next page"
+msgstr "Continuer avec la page suivante"
+
+#: widgets/kmymoneywizard.cpp:103
+msgid "Finish wizard"
+msgstr "Terminer l'assistant"
+
+#: widgets/kmymoneywizard.cpp:121
+msgid "&Back"
+msgstr "&Précédent"
+
+#: widgets/kmymoneywizard.cpp:122
+msgid "&Next"
+msgstr "&Suivant"
+
+#: widgets/kmymoneywizard.cpp:123
+msgid "&Finish"
+msgstr "&Terminer"
+
+#: widgets/kmymoneywizard.cpp:274
+msgid "Step %1 of %2"
+msgstr "Étape %1 sur %2"
+
+#: widgets/kmymoneydateinput.cpp:235
+msgid ""
+"_: Enter todays date into date input widget\n"
+"T"
+msgstr "A"
+
+#: widgets/transactionform.cpp:302
+msgid "&Deposit"
+msgstr "&Dépôt"
+
+#: widgets/transactionform.cpp:304 widgets/transactionform.cpp:313
+#: widgets/transactionform.cpp:323 widgets/transactionform.cpp:333
+msgid "&Transfer"
+msgstr "&Virement"
+
+#: widgets/transactionform.cpp:306
+msgid "&Withdrawal"
+msgstr "&Retrait"
+
+#: widgets/transactionform.cpp:311
+msgid "&Payment"
+msgstr "&Paiement"
+
+#: widgets/transactionform.cpp:315
+msgid "&Charge"
+msgstr "&Frais"
+
+#: widgets/transactionform.cpp:321 widgets/transactionform.cpp:335
+msgid "&Decrease"
+msgstr "&Débit"
+
+#: widgets/transactionform.cpp:325 widgets/transactionform.cpp:331
+msgid "&Increase"
+msgstr "Créd&it"
+
+#: widgets/kmymoneyscheduledcalendar.cpp:42
+msgid "Select Schedules"
+msgstr "Sélectionner les échéances"
+
+#: widgets/kmymoneycalendar.cpp:108
+msgid "Select Style"
+msgstr "Sélectionner le Style"
+
+#: widgets/kmymoneycalendar.cpp:128
+msgid "Choose Style"
+msgstr "Choisir le Style"
+
+#: widgets/kmymoneycalendar.cpp:129
+msgid "Next year"
+msgstr "Année suivante"
+
+#: widgets/kmymoneycalendar.cpp:130
+msgid "Previous year"
+msgstr "Année précédente"
+
+#: widgets/kmymoneycalendar.cpp:132
+msgid "Previous month"
+msgstr "Mois précédent"
+
+#: widgets/kmymoneycalendar.cpp:133
+msgid "Select a week"
+msgstr "Choisir une semaine"
+
+#: widgets/kmymoneycalendar.cpp:134
+msgid "Select a month"
+msgstr "Choisir un mois"
+
+#: widgets/kmymoneycalendar.cpp:135
+msgid "Select a year"
+msgstr "Choisir une année"
+
+#: widgets/kmymoneycalendar.cpp:249
+msgid "Week XX"
+msgstr "Semaine XX"
+
+#: widgets/kmymoneycalendar.cpp:264 widgets/kmymoneycalendar.cpp:300
+#, c-format
+msgid "Week %1"
+msgstr "Semaine %1"
+
+#: widgets/rc.cpp:1
+msgid "Account Types"
+msgstr "Type de compte"
+
+#: widgets/rc.cpp:3
+msgid "Detailed description"
+msgstr "Description détaillée"
+
+#: widgets/rc.cpp:18
+msgid "Period"
+msgstr "Période"
+
+#: widgets/rc.cpp:21
+msgid "Individual"
+msgstr "Individuellement"
+
+#: widgets/rc.cpp:23
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Acces to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>Recovery encryption</i> group is only accessible, if the necessary "
+"key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is "
+"found."
+msgstr ""
+"Cette page vous permet de spécifier les paramètres pour le stockage du "
+"fichier crypté de vos données de <b>KMyMoney</b> basées sur <b>GPG</b>.<p>\n"
+"L'accès aux paramètres est désactivé si <b>GPG</b> ne peut pas être détecté "
+"sur votre système. Dans ce cas, veuillez vous s'assurer que <b>GPG</b> "
+"fonctionne correctement pour l'utilisateur courant.<p>\n"
+"Le groupe <i>Rétablissement du chiffrage</i> est seulement accessible, si la "
+"clé nécessaire pour <b>kmymoney-recover@users.sourceforge.net</b> avec "
+"l'identification 0x8AFDDC8E est trouvée."
+
+#: widgets/rc.cpp:26
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading <i>0x</i>."
+msgstr ""
+"Saisissez la clé d'identification que vous voulez utiliser pour le chiffrage "
+"de données. Elle peut-être une adresse émail ou une clé hexadécimale. Pour "
+"la clé hexadécimale, n'oubliez pas l'entête <i>0x</i>."
+
+#: widgets/rc.cpp:27
+msgid "User ID"
+msgstr "ID Utilisateur"
+
+#: widgets/rc.cpp:29
+msgid "Recovery encryption"
+msgstr "Chiffrage de récupération"
+
+#: widgets/rc.cpp:30
+msgid "Also encrypt with kmymoney-recover key"
+msgstr "Chiffrer également avec la clé de récupération KMyMoney"
+
+#: widgets/rc.cpp:32
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out."
+msgstr ""
+"Vous pouvez indiquer pour crypter les données également avec la clé de "
+"récupération KMyMoney. Seul les développeurs du noyau de KMyMoney sont en "
+"possession de la clé privée exigée pour relire des telles données cryptées."
+"<p> \n"
+"\n"
+"Ce mécanisme est prévu pour le cas où vous auriez perdu votre clé et que "
+"vous ne pourriez plus accéder à vos données. Avec cette option activée, "
+"seuls les développeurs de KMyMoney peuvent décrypter vos données et vous les "
+"fournir sous une forme lisible. Soyez conscient que vous devrez répondre à "
+"quelques questions détaillées au sujet du contenu de vos données avant que "
+"nous vous les renvoyions."
+
+#: widgets/rc.cpp:51
+msgid "PriceInfo"
+msgstr "CoursInfo"
+
+#: widgets/rc.cpp:52
+msgid "Report Tab"
+msgstr "Onglet du Rapport"
+
+#: widgets/rc.cpp:53
+msgid "<p>On this tab, you set the basic properties of this report.</p>"
+msgstr ""
+"<p>Sur cet onglet, vous définissez les propriétés de base de ce rapport.</p>"
+
+#: widgets/rc.cpp:54
+msgid "Report Name"
+msgstr "Nom du Rapport"
+
+#: widgets/rc.cpp:55
+msgid "<p>Choose a name for this report.</p>"
+msgstr "<p>Choisir un nom pour ce rapport.</p>"
+
+#: widgets/rc.cpp:57
+msgid "<p>Enter a comment to help you remember the details of this report.</p>"
+msgstr ""
+"<p>Entrez un commentaire pour aider à vous rappeler les détails de ce "
+"rapport.</p>"
+
+#: widgets/rc.cpp:58
+msgid "Convert values to base currency"
+msgstr "Convertir les valeurs dans la monnaie de base"
+
+#: widgets/rc.cpp:59
+msgid ""
+"_: Convert 'em!!\n"
+"<p>Select this option to convert all values in the report to your base "
+"currency.</p><p>Leave it unchecked if you'd like to see values in their "
+"original currency.</p><p>If currencies are not converted, then subtotals "
+"will not be shown.</p>"
+msgstr ""
+"Convertissez-les !!\n"
+"<p>Choisissez cette option pour convertir toutes les valeurs de ce rapport "
+"dans votre unité de compte de base.</p> <p>Laissez-les non cochées si vous "
+"voulez voir leurs valeurs dans leur unité de compte d'origine.</p> <p>Si "
+"l'unité de compte n'est pas convertie, alors les sous-totaux ne seront pas "
+"affichés.</p>"
+
+#: widgets/rc.cpp:60
+msgid "Mark as a favorite report"
+msgstr "Marquer comme un rapport favori"
+
+#: widgets/rc.cpp:61
+msgid ""
+"<p>Select this option to notate this report as one of your favorites.</"
+"p><p>All your favorite reports are grouped in one place on the report list "
+"for easy access.</p>"
+msgstr ""
+"<p>Sélectionner cette option pour noter ce rapport comme un de vos favoris.</"
+"p> <p>Tous vos rapports favoris sont regroupés dans la liste des rapports "
+"pour un accès rapide.</p>"
+
+#: widgets/rc.cpp:62 widgets/rc.cpp:88
+msgid "Rows/Columns Tab"
+msgstr "Onglet Lignes/Colonnes"
+
+#: widgets/rc.cpp:63 widgets/rc.cpp:89
+msgid ""
+"<p>On this tab, you configure how you'd like the rows and columns to be "
+"selected and organized.</p>"
+msgstr ""
+"<p>Sur cet onglet, vous choisissez comment les lignes et les colonnes "
+"doivent être sélectionnées et organisées.</p>"
+
+#: widgets/rc.cpp:69 widgets/rc.cpp:81
+msgid ""
+"<p>Choose what kind of accounts to display as the rows of this report.</p>"
+msgstr ""
+"<p>Choisir quel type de comptes afficher pour les lignes de ce rapport.</p>"
+
+#: widgets/rc.cpp:71
+msgid "Columns"
+msgstr "Colonnes"
+
+#: widgets/rc.cpp:75
+msgid "Bi-Monthly"
+msgstr "Bimensuel"
+
+#: widgets/rc.cpp:78
+msgid "<p>Choose how large of a time period each column should encompass</p>"
+msgstr "<p>Choisir la durée que chaque colonne devrait englober</p>"
+
+#: widgets/rc.cpp:79
+msgid "Income & Expenses"
+msgstr "Revenu et Dépenses"
+
+#: widgets/rc.cpp:80
+msgid "Assets & Liabilities"
+msgstr "Actifs & Passifs"
+
+#: widgets/rc.cpp:82
+msgid "Rows"
+msgstr "Lignes"
+
+#: widgets/rc.cpp:83
+msgid "Show totals column"
+msgstr "Afficher le total des colonnes"
+
+#: widgets/rc.cpp:84
+msgid "Average days"
+msgstr "Moyenne des jours"
+
+#: widgets/rc.cpp:85
+msgid "Include scheduled transactions"
+msgstr "Inclure les opérations avec échéance"
+
+#: widgets/rc.cpp:86
+msgid "Include transfers"
+msgstr "Inclure les virements"
+
+#: widgets/rc.cpp:87
+msgid "Include unused accounts/categories"
+msgstr "Ajouter les comptes/catégories inutilisés"
+
+#: widgets/rc.cpp:90
+msgid "Organize by:"
+msgstr "Organiser par :"
+
+#: widgets/rc.cpp:92
+msgid "Top Categories"
+msgstr "Catégories principales"
+
+#: widgets/rc.cpp:95
+msgid "Top Accounts"
+msgstr "Comptes principaux"
+
+#: widgets/rc.cpp:98
+msgid "<p>Choose how to group the transactions in this report</p>"
+msgstr "<p>Choisir comment grouper les opérations dans ce rapport</p>"
+
+#: widgets/rc.cpp:99
+msgid "Show Columns"
+msgstr "Afficher les colonnes"
+
+#: widgets/rc.cpp:100
+msgid ""
+"<p>Choose which columns should be shown in the report.</p><p>The date and "
+"transaction amount are always shown.</p>"
+msgstr ""
+"<p>Choisissez les colonnes à afficher dans le rapport.</p><p>La date et le "
+"montant de l'opération sont toujours affichés.</p>"
+
+#: widgets/rc.cpp:102
+msgid "<p>Select this option to show the Memo column</p>"
+msgstr "<p>Sélectionnez cette option pour afficher la colonne Note</p>"
+
+#: widgets/rc.cpp:104
+msgid "<p>Select this option to show the Shares column for investments</p>"
+msgstr ""
+"<p>Sélectionnez cette option pour afficher la colonne Actions pour les "
+"investissements</p>"
+
+#: widgets/rc.cpp:106
+msgid "<p>Select this option to show the Price column for investments</p>"
+msgstr ""
+"<p>Sélectionnez cette option pour afficher la colonne Prix pour "
+"l'investissement</p>"
+
+#: widgets/rc.cpp:108
+msgid "<p>Select this option to show the Reconciled column</p>"
+msgstr "<p>Sélectionnez cette option pour afficher la colonne Rapproché</p>"
+
+#: widgets/rc.cpp:110
+msgid "<p>Select this option to show the Account column</p>"
+msgstr "<p>Sélectionnez cette option pour afficher la colonne Compte</p>"
+
+#: widgets/rc.cpp:112
+msgid "<p>Select this option to show the Number column</p>"
+msgstr "<p>Sélectionnez cette option pour afficher la colonne Numéro</p>"
+
+#: widgets/rc.cpp:114
+msgid "<p>Select this option to show the Payee column</p>"
+msgstr "<p>Sélectionnez cette option pour afficher la colonne Tiers</p>"
+
+#: widgets/rc.cpp:116
+msgid "<p>Select this option to show the Category column</p>"
+msgstr "<p>Sélectionnez cette option pour afficher la colonne Catégorie</p>"
+
+#: widgets/rc.cpp:118
+msgid "<p>Select this option to show the Action column</p>"
+msgstr "<p>Sélectionnez cette option pour afficher la colonne Action</p>"
+
+#: widgets/rc.cpp:120
+msgid "<p>Select this option to show the Running balance column</p>"
+msgstr ""
+"<p>Sélectionnez cette option pour afficher la colonne Solde en cours</p>"
+
+#: widgets/rc.cpp:121
+msgid "Include only Loan accounts"
+msgstr "Inclure seulement les comptes de prêts"
+
+#: widgets/rc.cpp:122
+msgid "Include only Investment accounts"
+msgstr "Inclure seulement les comptes investissement"
+
+#: widgets/rc.cpp:123 widgets/rc.cpp:127
+msgid ""
+"<p>Check this box to include only those categories which have been marked to "
+"\"Include on Tax Reports\"</p>"
+msgstr ""
+"<p>Cocher cette case pour inclure uniquement les catégories qui ont été "
+"marquées \"Inclure sur les rapports Impôt\"</p>"
+
+#: widgets/rc.cpp:124
+msgid "Hide Split Transaction Details"
+msgstr "Cacher les détails de l'opération répartie"
+
+#: widgets/rc.cpp:125
+msgid ""
+"Do not display the individual transactions that make up a split transaction"
+msgstr ""
+"Ne pas afficher les opérations individuelles qui constituent une opération "
+"répartie"
+
+#: widgets/rc.cpp:126
+msgid "Include only Tax categories"
+msgstr "Inclure seulement les catégories Impôts"
+
+#: widgets/rc.cpp:128
+msgid "Chart Tab"
+msgstr "Onglet Diagramme"
+
+#: widgets/rc.cpp:129
+msgid "<p>On this tab, you configure the chart drawn forthis report.</p>"
+msgstr ""
+"<p>Sur cet onglet, vous configurez le diagramme affiché pour ce rapport.</p>"
+
+#: widgets/rc.cpp:130
+msgid "Chart Type"
+msgstr "Type de Diagramme"
+
+#: widgets/rc.cpp:131
+msgid "<p>Select what form you would like the chart to be drawn as.</p>"
+msgstr ""
+"<p>Sélectionnez quelle forme vous voulez pour l'affichage du diagramme.</p>"
+
+#: widgets/rc.cpp:132
+msgid "Line"
+msgstr "Ligne"
+
+#: widgets/rc.cpp:133
+msgid "Bar"
+msgstr "Barre"
+
+#: widgets/rc.cpp:134
+msgid "Stacked Bar"
+msgstr "Barre empilée"
+
+#: widgets/rc.cpp:135
+msgid "Pie"
+msgstr "Circulaire"
+
+#: widgets/rc.cpp:136
+msgid "Ring"
+msgstr "Anneau"
+
+#: widgets/rc.cpp:137
+msgid "Show grid lines"
+msgstr "Afficher les lignes de la grille"
+
+#: widgets/rc.cpp:138
+msgid ""
+"<p>Select this option to show horizontal and vertical grid lines on the "
+"chart.</p>"
+msgstr ""
+"<p>Sélectionnez cette option pour afficher les lignes horizontales et "
+"verticales sur le diagramme.</p>"
+
+#: widgets/rc.cpp:139
+msgid "Draw values on chart"
+msgstr "Afficher les valeurs sur le diagramme"
+
+#: widgets/rc.cpp:140
+msgid ""
+"<p>Select this option to draw the numeric values for data points next to "
+"their plot location.</p>"
+msgstr ""
+"<p>Sélectionnez cette option pour afficher les valeurs numériques pour les "
+"points de données auprès de leur position.</p>"
+
+#: widgets/rc.cpp:141
+msgid "Show as chart by default"
+msgstr "Afficher comme diagramme par défaut"
+
+#: widgets/rc.cpp:142
+msgid ""
+"<p>Select this option to cause the report to be shown as a chart when you "
+"first open the report. Otherwise, it will come up as a text report.</p>"
+msgstr ""
+"<p>Sélectionnez cette option pour avoir le report affiché sous forme de "
+"diagramme en premier quand vous ouvrez le rapport. Sinon, il sera affiché "
+"sous forme de rapport texte.</p>"
+
+#: widgets/rc.cpp:143
+msgid "Line width"
+msgstr "Largeur de ligne"
+
+#: widgets/rc.cpp:144
+msgid "<p>Select what width should be used to draw the line on the chart</p>"
+msgstr ""
+"<p>Sélectionnez quelle largeur sera utilisée pour dessiner les lignes le "
+"diagramme.</p>"
+
+#: widgets/rc.cpp:145
+msgid "ReportControl"
+msgstr "Rapport de Contrôle"
+
+#: widgets/rc.cpp:149
+msgid "Configure this report"
+msgstr "Configurer ce rapport"
+
+#: widgets/rc.cpp:151
+msgid "Create a new report based on this one"
+msgstr "Créer un nouveau rapport basé sur celui-ci"
+
+#: widgets/rc.cpp:153
+msgid "Copy this report to the clipboard"
+msgstr "Copier ce rapport dans le presse papier"
+
+#: widgets/rc.cpp:155
+msgid "Export this report as an HTML or CSV file"
+msgstr "Exporter ce rapport comme un fichier HTML ou CSV"
+
+#: widgets/rc.cpp:157
+msgid "Permanently delete this report"
+msgstr "Supprimer ce rapport définitivement"
+
+#: widgets/rc.cpp:159
+msgid "Close this window"
+msgstr "Fermer cette fenêtre"
+
+#: widgets/rc.cpp:162
+msgid "n of n"
+msgstr "n de n"
+
+#: widgets/rc.cpp:166
+msgid "Account:"
+msgstr "Compte :"
+
+#: widgets/rc.cpp:168
+msgid "Enter..."
+msgstr "Saisir ..."
+
+#: widgets/rc.cpp:171
+msgid "TransactionSortOptionDecl"
+msgstr "TransactionSortOptionDecl"
+
+#: widgets/rc.cpp:173
+msgid "Sort order"
+msgstr "Ordre du tri"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Sunday\n"
+"Sun"
+msgstr "Dim"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Saturday\n"
+"Sat"
+msgstr "Sam"
+
+#: widgets/kmymoneydatetbl.cpp:171 widgets/kmymoneydatetbl.cpp:178
+msgid "Week %1 for year %2."
+msgstr "Semaine %1 de l'année %2."
+
+#: widgets/kmymoneycombo.cpp:417
+msgid "ATM"
+msgstr "DAB"
+
+#: widgets/kmymoneycombo.cpp:418
+msgid "Withdrawal"
+msgstr "Retrait"
+
+#: widgets/kmymoneycombo.cpp:421
+msgid "Cheque"
+msgstr "Chèque"
+
+#: widgets/kmymoneycombo.cpp:469
+msgid ""
+"_: Activity for expense categories\n"
+"Paid"
+msgstr "Payé"
+
+#: widgets/kmymoneycombo.cpp:470
+msgid ""
+"_: Activity for income categories\n"
+"Received"
+msgstr "Reçu"
+
+#: widgets/kmymoneycombo.cpp:519
+msgid "Reinvest dividend"
+msgstr "Réinvestir le Dividende"
+
+#: widgets/kmymoneycombo.cpp:664
+msgid "All dates"
+msgstr "Toutes les dates"
+
+#: widgets/kmymoneycombo.cpp:665
+msgid "As of today"
+msgstr "Comme aujourd'hui"
+
+#: widgets/kmymoneycombo.cpp:667
+msgid "Current month"
+msgstr "Mois courant"
+
+#: widgets/kmymoneycombo.cpp:668
+msgid "Current quarter"
+msgstr "Trimestre courant"
+
+#: widgets/kmymoneycombo.cpp:669
+msgid "Current year"
+msgstr "Année courante"
+
+#: widgets/kmymoneycombo.cpp:671
+msgid "Month to date"
+msgstr "Mois en cours jusqu'à aujourd'hui"
+
+#: widgets/kmymoneycombo.cpp:672
+msgid "Year to date"
+msgstr "Année en cours jusqu'à aujourd'hui"
+
+#: widgets/kmymoneycombo.cpp:673
+msgid "Year to month"
+msgstr "Année en cours jusqu'au mois courant"
+
+#: widgets/kmymoneycombo.cpp:675
+msgid "Last year"
+msgstr "Année précédente"
+
+#: widgets/kmymoneycombo.cpp:676
+msgid "Last fiscal year"
+msgstr "Année fiscale précédente"
+
+#: widgets/kmymoneycombo.cpp:677
+msgid "Last 7 days"
+msgstr "Les 7 derniers jours"
+
+#: widgets/kmymoneycombo.cpp:678
+msgid "Last 30 days"
+msgstr "30 derniers jours"
+
+#: widgets/kmymoneycombo.cpp:679
+msgid "Last 3 months"
+msgstr "3 derniers mois"
+
+#: widgets/kmymoneycombo.cpp:680
+msgid "Last quarter"
+msgstr "Trimestre précédente"
+
+#: widgets/kmymoneycombo.cpp:681
+msgid "Last 6 months"
+msgstr "6 derniers mois"
+
+#: widgets/kmymoneycombo.cpp:682
+msgid "Last 11 months"
+msgstr "11 derniers mois"
+
+#: widgets/kmymoneycombo.cpp:683
+msgid "Last 12 months"
+msgstr "12 derniers mois"
+
+#: widgets/kmymoneycombo.cpp:684
+msgid "Next 7 days"
+msgstr "Les 7 prochains jours"
+
+#: widgets/kmymoneycombo.cpp:685
+msgid "Next 30 days"
+msgstr "30 prochains jours"
+
+#: widgets/kmymoneycombo.cpp:686
+msgid "Next 3 months"
+msgstr "3 prochains mois"
+
+#: widgets/kmymoneycombo.cpp:687
+msgid "Next quarter"
+msgstr "Prochain trimestre"
+
+#: widgets/kmymoneycombo.cpp:688
+msgid "Next 6 months"
+msgstr "6 prochains mois"
+
+#: widgets/kmymoneycombo.cpp:689
+msgid "Next 12 months"
+msgstr "12 prochains mois"
+
+#: widgets/kmymoneycombo.cpp:690
+msgid "Last 3 months to next 3 months"
+msgstr "Des 3 mois précédents aux 3 mois suivants"
+
+#: widgets/kmymoneycombo.cpp:691
+msgid "User defined"
+msgstr "Défini par l'utilisateur"
+
+#~ msgid "Reset"
+#~ msgstr "Remettre à zéro"
+
+#~ msgid "No plugins loaded"
+#~ msgstr "Aucun Module d'extension chargé"
+
+#~ msgid "Create schedule..."
+#~ msgstr "Créer une échéance ..."
+
+#~ msgid "New schedule..."
+#~ msgstr "Nouvelle échéance ..."
+
+#~ msgid "Edit schedule..."
+#~ msgstr "Éditer l'échéance ..."
+
+#~ msgid "Delete schedule..."
+#~ msgstr "Supprimer l'échéance ..."
+
+#~ msgid "Duplicate schedule"
+#~ msgstr "Dupliquer 'échéance"
+
+#~ msgid "Enter schedule..."
+#~ msgstr "Saisir l'échéance ..."
+
+#~ msgid "Skip schedule..."
+#~ msgstr "Sauter l'échéance ..."
+
+#~ msgid "Adjusting schedules..."
+#~ msgstr "Ajustement des échéances ..."
+
+#~ msgid "Add schedule"
+#~ msgstr "Ajouter une Échéance"
+
+#~ msgid "Unable to enter transaction for schedule '%1'"
+#~ msgstr "Impossible de saisir l'opération pour l'échéance '%1'"
+
+#~ msgid "Loaded"
+#~ msgstr "Chargé"
+
+#~ msgid ""
+#~ "_: Plugin interface description\n"
+#~ "Online access"
+#~ msgstr "Accès en ligne"
+
+#~ msgid ""
+#~ "_: Plugin interface description\n"
+#~ "File import"
+#~ msgstr "Importer un fichier"
+
+#~ msgid "not loaded: %1"
+#~ msgstr "Non chargé : %1"
+
+#~ msgid "Schedule options"
+#~ msgstr "Options de l'échéance"
+
+#~ msgid "New Schedule"
+#~ msgstr "Nouvelle échéance"
+
+#~ msgid "Edit Schedule"
+#~ msgstr "Éditer une échéance"
+
+#~ msgid "Search transactions containing the following text"
+#~ msgstr "Rechercher des opérations contenant le texte suivant"
+
+#~ msgid "Search"
+#~ msgstr "Rechercher"
+
+#~ msgid "&Search"
+#~ msgstr "&Rechercher"
+
+#~ msgid "Start the search"
+#~ msgstr "Lancer la recherche"
+
+#~ msgid "Takes the current criteria and searches for matching transactions."
+#~ msgstr ""
+#~ "Prends le critère actuel et recherche des opérations correspondantes."
+
+#~ msgid "Reset all settings"
+#~ msgstr "Remettre à zéro les paramètres"
+
+#~ msgid ""
+#~ "Use this to reset all settings to the state they were when the dialog was "
+#~ "opened."
+#~ msgstr ""
+#~ "Utilisez ceci pour remettre tous les paramètres dans l'état où ils "
+#~ "étaient à l'ouverture de la fenêtre."
+
+#~ msgid "Use this button to close the window"
+#~ msgstr "Utilisez ce bouton pour fermer la fenêtre"
+
+#~ msgid "Multi-user mode not yet implemented\n"
+#~ msgstr "Le mode multi-utilisateur n'est pas encore implémenté\n"
+
+#~ msgid ""
+#~ "Reading the bank list failed with the following error: '%1'. The console "
+#~ "output may have more information."
+#~ msgstr ""
+#~ "La lecture de la banque liste a échoué avec l'erreur suivante: '%1'. La "
+#~ "console peut avoir plus d'informations."
+
+#~ msgid "XMLPP error"
+#~ msgstr "Erreur XMLPP"
+
+#~ msgid "Disabled. No online banking services are available"
+#~ msgstr "Neutralisé. Les services de banque en ligne ne sont pas disponibles"
+
+#~ msgid "CHECKING"
+#~ msgstr "CHÈQUE"
+
+#~ msgid "SAVINGS"
+#~ msgstr "ÉPARGNE"
+
+#~ msgid "MONEY MARKET"
+#~ msgstr "MARCHE MONÉTAIRE"
+
+#~ msgid "CREDIT LINE"
+#~ msgstr "LIGNE DE CRÉDIT"
+
+#~ msgid "CMA"
+#~ msgstr "CMA"
+
+#~ msgid "CREDIT CARD"
+#~ msgstr "CARTE DE CRÉDIT"
+
+#~ msgid "INVESTMENT"
+#~ msgstr "INVESTISSEMENT"
+
+#~ msgid "UNKNOWN"
+#~ msgstr "INCONNU"
+
+#~ msgid "SQLite requires a file name; try again?"
+#~ msgstr "SQLite a besoin d'un nom de fichier; essayez encore ?"
+
+#~ msgid ""
+#~ "<h3>Database Type</h3><p>This box lists all Qt SQL drivers installed on "
+#~ "your system. Select the driver for your database type. If the one you "
+#~ "want is not in the list, you need to install the appropriate driver. See "
+#~ "your distro documentation, or visit the Qt web Site (http://www.trolltech."
+#~ "com) and search for 'SQL drivers'.</p><h3>Database Name</h3><p>The "
+#~ "default database name is KMyMoney, but you may choose some other name if "
+#~ "you like. SQLite has one database per file; selecting this driver opens "
+#~ "the file dialog. For database types other than SQLite and MySql, the "
+#~ "database itself must be pre-created, though KMyMoney will create all "
+#~ "table structures where necessary.</p><h3>Host Name</h3><p>For the average "
+#~ "user, the default name of localhost, being the machine you are currently "
+#~ "using, is correct. For networked databases, enter the host name of the "
+#~ "system where the database is stored. You may need to contact your "
+#~ "database administrator for this information.</p><h3>User Name and "
+#~ "Password</h3><p>Check the permissions set up on your database, or contact "
+#~ "the database administrator, for the correct values to use here. The user "
+#~ "name must be capable of deleting, inserting and updating records. If the "
+#~ "user name is the same as your login name, a password is not normally "
+#~ "required.</p><h3>Generate SQL</h3><p>Click this button to create a text "
+#~ "file and write the commands needed to create the database tables and "
+#~ "other objects. With care, this may be edited if the in-built commands do "
+#~ "not work for your database system.</p><p>Please read the appropriate "
+#~ "chapter of the KMyMoney handbook for further information on database "
+#~ "usage.</p>"
+#~ msgstr ""
+#~ "<h3>Type de Base de données</h3><p>Cette boîte de dialogue liste tous les "
+#~ "drivers SQL pour Qt installés sur votre système. Choisissez le driver "
+#~ "pour votre type de base de données. Si celui que vous voulez n'est pas "
+#~ "dans la liste, vous devez installer le driver approprié. Regardez la "
+#~ "documentation de votre distribution ou visitez le site web Qt (http://www."
+#~ "trolltech.com) et cherchez les 'drivers SQL'.</p><h3>Nom de la base de "
+#~ "données</h3><p>Le nom de la base de données par défaut est KMyMoney, mais "
+#~ "vous pouvez choisir un autre nom si vous voulez. SQLite a une base de "
+#~ "données par fichier; choisir ce driver ouvre la boîte de dialogue de "
+#~ "choix de fichier. Pour les types de base de données différents de SQLite "
+#~ "et MySql, la base de données doit être créée avant, bien que cette "
+#~ "application créera les structures de tables si nécessaire.</p> <h3>Nom de "
+#~ "machine</h3><p>Pour l'utilisateur normal, le nom par par défaut est "
+#~ "localhost, indiquant la machine que vous utilisez actuellement, est "
+#~ "correct. Pour des base de données en réseau, saisissez le nom de "
+#~ "l'ordinateur où la base de données est sauvegardée. Vous pouvez avoir "
+#~ "besoin de contacter l'administrateur de la base de données pour "
+#~ "cetteinformation</p> <h3>Nom d'utilisateur et Mot de passe</"
+#~ "h3><p>Vérifiez les permissions réalisées sur votre base de données ou "
+#~ "contactez l'administrateur de la base de données, pour obtenir les "
+#~ "valeurs correctes à utiliser ici. Le nom de l'utilisateur doit être "
+#~ "capable de supprimer, d'insérer et de mettre à jour les enregistrements. "
+#~ "Si le nom de l'utilisateur est le même que le nom de login, un mot de "
+#~ "passe n'est pas normalement demandé.</p> <h3>Générer SQL</h3><p>Cliquez "
+#~ "sur ce bouton pour créer un fichier texte et écrire les commandes "
+#~ "nécessaires pour créer les tables de la base de données et les autres "
+#~ "objets. Avec précaution ce fichier peut être édité si les commandes "
+#~ "construites automatiquement ne fonctionnent pas pour votre système de "
+#~ "base de données.</p> <p> Merci de lire la chapitre correspondant dans le "
+#~ "manuel KMyMoney pour plus d'information sur les bases de données.</p>"
+
+#~ msgid "Selecting a SQL database"
+#~ msgstr "Choisir une base de données SQL"
+
+#~ msgid "Accept splits and return to transaction form"
+#~ msgstr "Accepter les parties et retourner au formulaire d'opération"
+
+#~ msgid ""
+#~ "Use this to accept all changes to the splits and return to the transaction"
+#~ msgstr ""
+#~ "Utilisez ceci pour accepter tous les changements et retourner à "
+#~ "l'opération"
+
+#~ msgid ""
+#~ "This QIF file contains investment transactions. You are trying to import "
+#~ "this file into an account which is not an investment account. These "
+#~ "transactions will be ignored."
+#~ msgstr ""
+#~ "Ce fichier QIF contient des opérations d'investissement. Vous essayez "
+#~ "d'importer ce fichier dans un compte qui n'est pas un compte "
+#~ "d'investissement. Ces opérations seront ignorées."
+
+#~ msgid "Invalid account for investments"
+#~ msgstr "Compte invalide pour investissements"
+
+#~ msgid "Problem adding imported transaction: "
+#~ msgstr "Problème lors de l'ajout de l'opération importée"
+
+#~ msgid ""
+#~ "This file contains security entries. These are not currently supported "
+#~ "by the QIF importer."
+#~ msgstr ""
+#~ "Ce fichier contient des entrées de valeurs. Celles-ci ne sont pas "
+#~ "actuellement supportées par l'outil d'importation de fichiers QIF."
+
+#~ msgid "Unable to import"
+#~ msgstr "Impossible d'importer"
+
+#~ msgid "Budget "
+#~ msgstr "Budget "
+
+#~ msgid "Forecast "
+#~ msgstr "Prévisions "
+
+#~ msgid "Budget Total"
+#~ msgstr "Budget total"
+
+#~ msgid "Forecast Total"
+#~ msgstr "Total des prévisions"
+
+#~ msgid "pics/titlelabel_background.png"
+#~ msgstr "pics/titlelabel_background.png"
+
+#~ msgid "Incomes and Expenses This Month"
+#~ msgstr "Recettes et dépenses du mois"
+
+#~ msgid "Incomes"
+#~ msgstr "Recettes"
+
+#~ msgid "Schedules This Month"
+#~ msgstr "Echéances du mois"
+
+#~ msgid "&Ok"
+#~ msgstr "&Ok"
+
+#~ msgid "Accepts the value and stores them"
+#~ msgstr "Acceptez les 'informations saisies et enregistrez les"
+
+#~ msgid "Use this to accept all values and close the dialog."
+#~ msgstr ""
+#~ "Utilisez ceci pour accepter les informations et fermer la boîte de "
+#~ "dialogue."
+
+#~ msgid "Cancel the operation"
+#~ msgstr "Annuler l'opération"
+
+#~ msgid "Use this to dismiss all the changes made in this dialog."
+#~ msgstr ""
+#~ "Utilisez ceci pour annuler les changements effectués dans cette fenêtre."
+
+#~ msgid "Abort operation"
+#~ msgstr "Abandonner l'opération"
+
+#~ msgid "Use this to abort the export operation"
+#~ msgstr "Utilisez ceci pour abandonner l'opération d'exportation"
+
+#~ msgid "Start the backup operation"
+#~ msgstr "Démarrer l'opération de sauvegarde"
+
+#~ msgid "Pressing this button starts the backup operation."
+#~ msgstr "Appuyer sur ce bouton lance l'opération de sauvegarde."
+
+#~ msgid "Cancel the backup operation"
+#~ msgstr "Annuler l'opération de sauvegarde"
+
+#~ msgid "Use this to abort the backup and to return to KMyMoney."
+#~ msgstr "Utilisez ceci pour annuler la sauvegarde et retourner à KMyMoney."
+
+#~ msgid "Reject all changes to the splits and return to transaction form"
+#~ msgstr ""
+#~ "Refuser tous les changements sur les parties et retourner au formulaire "
+#~ "d'opération"
+
+#~ msgid ""
+#~ "Use this to reject all changes to the splits and return to the transaction"
+#~ msgstr ""
+#~ "Utilisez ceci pour refuser tous les changements et retourner à l'opération"
+
+#~ msgid "Close dialog"
+#~ msgstr "Fermer la fenêtre"
+
+#~ msgid "Use this to close the dialog and abort the operation"
+#~ msgstr ""
+#~ "Utilisez ceci pour fermer la fenêtre et annuler l'opération en cours"
+
+#~ msgid "Use this to accept and store data"
+#~ msgstr "Utilisez ceci pour accepter et enregistrer l'information"
+
+#~ msgid "Delete the selected profile"
+#~ msgstr "Supprimer le profil sélectionné"
+
+#~ msgid "Use this to delete the selected profile"
+#~ msgstr "Utilisez ceci pour supprimer le profil sélectionné"
+
+#~ msgid "Use this to accept the data."
+#~ msgstr "Utilisez ceci pour accepter l'information."
+
+#~ msgid "Reject all changes to the data and closes the dialog"
+#~ msgstr ""
+#~ "Refuser tous les changements sur les données et fermer la boîte de "
+#~ "dialogue"
+
+#~ msgid "Use this to reject all changes."
+#~ msgstr "Utilisez ceci pour refuser tous les changements."
+
+#~ msgid "Scan"
+#~ msgstr "Scanner"
+
+#~ msgid "Automatically create missing payees"
+#~ msgstr "Créer automatiquement les tiers manquants"
+
+#~ msgid "Remove this price information from the price history"
+#~ msgstr "Supprimer cette information de cours de l'historique des cours"
+
+#~ msgid "Create a new price information entry."
+#~ msgstr "Créer une nouvelle information de cours."
+
+#~ msgid "Accepts the selected action and continues"
+#~ msgstr "Accepter l'action sélectionnée et continuer"
+
+#~ msgid ""
+#~ "Use this to accept the selection and continue processing the transaction"
+#~ msgstr "Utilisez ceci pour accepter la sélection et continuer l'opération"
+
+#~ msgid "Reject any changes"
+#~ msgstr "Ignorer les modifications"
+
+#~ msgid "Use this to abort the account/category dialog"
+#~ msgstr "Utilisez ceci pour clôturer la fenêtre de compte/catégorie"
+
+#~ msgid "Accept modifications"
+#~ msgstr "Accepter les modifications"
+
+#~ msgid "Use this to accept the data and possibly create the account/category"
+#~ msgstr ""
+#~ "Utilisez ceci pour accepter les données et éventuellement créer le compte/"
+#~ "la catégorie"
+
+#~ msgid "New ..."
+#~ msgstr "Nouveau ..."
diff --git a/po/gl.po b/po/gl.po
new file mode 100644
index 0000000..508f38a
--- /dev/null
+++ b/po/gl.po
@@ -0,0 +1,13662 @@
+# translation of kmymoney2 to Galician
+# This file is put in the public domain.
+#
+# mvillarino <mvillarino@users.sourceforge.net>, 2006, 2007, 2008, 2009.
+# Mvillarino <mvillarino@users.sourceforge.net>, 2007, 2008.
+# marce villarino <mvillarino@users.sourceforge.net>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: gl\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-25 19:04+0200\n"
+"PO-Revision-Date: 2009-05-08 22:07+0200\n"
+"Last-Translator: marce villarino <mvillarino@users.sourceforge.net>\n"
+"Language-Team: Galician <proxecto@trasno.ent>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 0.2\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: wizards/wizardpages/rc.cpp:1
+msgid ""
+"Select groups of accounts that correspond to the ways that you will use "
+"KMyMoney. Each group you select will cause several accounts and categories "
+"to be created. Select the groups that are relevant to you. You can always "
+"create additional accounts manually later."
+msgstr ""
+"Escolla grupos de contas que se correspondan co xeito que vaia a usar "
+"KMyMoney. Cada grupo que escolla fará que se críen varias contas e "
+"categorías. Escolla os grupos que lle sexan relevantes, sempre poderá criar "
+"contas adicionais despois."
+
+#: wizards/wizardpages/rc.cpp:2
+msgid ""
+"<p>KMyMoney supports multiple currencies, nevertheless one of them will be "
+"used as your base currency. The base currency is used as default for new "
+"accounts and reports. Please select the base currency from the following "
+"list."
+msgstr ""
+"<p>KMyMoney soporta múltiplas divisas, porén unha delas será usada como a "
+"divisa base. A divisa base é usada por omisión para as novas contas e para "
+"os informes. Escóllaa na seguinte lista."
+
+#: dialogs/kequitypriceupdatedlg.cpp:71 dialogs/rc.cpp:399 dialogs/rc.cpp:485
+#: dialogs/rc.cpp:724 dialogs/settings/rc.cpp:108 reports/listtable.cpp:226
+#: views/kinvestmentview.cpp:71 views/kpayeesview.cpp:351 views/rc.cpp:13
+#: widgets/rc.cpp:5 widgets/rc.cpp:34
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1599
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1629
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1673
+#: wizards/wizardpages/rc.cpp:3
+msgid "Name"
+msgstr "Nome"
+
+#: wizards/wizardpages/rc.cpp:4
+msgid "ISO Code"
+msgstr "Código ISO"
+
+#: dialogs/kequitypriceupdatedlg.cpp:69 dialogs/kequitypriceupdatedlg.cpp:70
+#: dialogs/rc.cpp:71 dialogs/rc.cpp:725 dialogs/settings/rc.cpp:112
+#: views/kinvestmentview.cpp:72 widgets/rc.cpp:37 wizards/wizardpages/rc.cpp:5
+msgid "Symbol"
+msgstr "Símbolo"
+
+#: wizards/wizardpages/rc.cpp:6
+msgid ""
+"<p>Use the fields below to enter some information about yourself.</p>\n"
+"\n"
+"<p>All information is optional and only used to personalize your KMyMoney "
+"file.</p>"
+msgstr ""
+"<p>Use os campos en baixo para introducir a súa información persoal.</p>\n"
+"\n"
+"<p>Toda a información é opcional e serve para personalizar\n"
+"o ficheiro de KMyMoney.</p>"
+
+#: dialogs/rc.cpp:425 wizards/newuserwizard/rc.cpp:27
+#: wizards/wizardpages/rc.cpp:7
+msgid "Town:"
+msgstr "Cidade:"
+
+#: dialogs/rc.cpp:420 wizards/newuserwizard/rc.cpp:22
+#: wizards/wizardpages/rc.cpp:8
+msgid "County/State:"
+msgstr "Provincia/Concello:"
+
+#: dialogs/rc.cpp:391 dialogs/rc.cpp:421 wizards/newuserwizard/rc.cpp:23
+#: wizards/wizardpages/rc.cpp:9
+msgid "Street:"
+msgstr "Rúa:"
+
+#: dialogs/rc.cpp:422 wizards/newuserwizard/rc.cpp:24
+#: wizards/wizardpages/rc.cpp:10
+msgid "Email:"
+msgstr "Correo electrónico:"
+
+#: dialogs/rc.cpp:424 wizards/newuserwizard/rc.cpp:26
+#: wizards/wizardpages/rc.cpp:11
+msgid "Telephone:"
+msgstr "Teléfone:"
+
+#: dialogs/rc.cpp:423 wizards/newuserwizard/rc.cpp:25
+#: wizards/wizardpages/rc.cpp:12
+msgid "Your name:"
+msgstr "O seu nome:"
+
+#: dialogs/rc.cpp:427 wizards/newuserwizard/rc.cpp:29
+#: wizards/wizardpages/rc.cpp:13
+msgid "Load from Addressbook"
+msgstr "Cargar desde o caderno de enderezos"
+
+#: dialogs/rc.cpp:392 dialogs/rc.cpp:426 views/rc.cpp:68
+#: wizards/wizardpages/rc.cpp:14
+msgid "Postal Code:"
+msgstr "Código postal:"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:82
+msgid "KMyMoney New Account Setup"
+msgstr "Configuración dunha nova conta en KMyMoney"
+
+#: dialogs/rc.cpp:360 dialogs/rc.cpp:361 reports/listtable.cpp:230
+#: wizards/newaccountwizard/knewaccountwizard.cpp:83
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1616
+#: wizards/newaccountwizard/rc.cpp:61
+msgid "Institution"
+msgstr "Organización"
+
+#: dialogs/investactivities.cpp:198 dialogs/investactivities.cpp:286
+#: dialogs/investactivities.cpp:367 dialogs/kfindtransactiondlg.cpp:181
+#: dialogs/rc.cpp:139 dialogs/rc.cpp:192 dialogs/rc.cpp:207
+#: dialogs/transactioneditor.cpp:734 reports/listtable.cpp:201
+#: reports/pivottable.cpp:1336 reports/pivottable.cpp:1586
+#: views/kforecastview.cpp:393 views/kgloballedgerview.cpp:175
+#: views/khomeview.cpp:418 views/khomeview.cpp:491 views/khomeview.cpp:525
+#: views/khomeview.cpp:764 views/khomeview.cpp:967 views/khomeview.cpp:1437
+#: views/kscheduledview.cpp:71 views/rc.cpp:17 views/rc.cpp:44
+#: widgets/kmymoneyaccounttreebase.cpp:58
+#: widgets/kmymoneyaccounttreeforecast.cpp:41 widgets/rc.cpp:109
+#: widgets/register.cpp:566 widgets/transaction.cpp:978
+#: widgets/transaction.cpp:1535
+#: wizards/newaccountwizard/knewaccountwizard.cpp:84
+msgid "Account"
+msgstr "Conta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:85
+msgid "Broker"
+msgstr "Corredor"
+
+#: dialogs/kfindtransactiondlg.cpp:225 dialogs/rc.cpp:70 dialogs/rc.cpp:104
+#: dialogs/rc.cpp:159 dialogs/rc.cpp:223 dialogs/rc.cpp:246 dialogs/rc.cpp:751
+#: dialogs/settings/rc.cpp:109 widgets/rc.cpp:35 widgets/register.cpp:568
+#: wizards/newaccountwizard/knewaccountwizard.cpp:86
+msgid "Details"
+msgstr "Detalles"
+
+#: dialogs/knewloanwizard.cpp:636 dialogs/rc.cpp:231 dialogs/rc.cpp:608
+#: kmymoneyutils.cpp:191 views/khomeview.cpp:399
+#: wizards/newaccountwizard/knewaccountwizard.cpp:87
+#: wizards/newaccountwizard/knewaccountwizard.cpp:880
+msgid "Payments"
+msgstr "Pagamentos"
+
+#: dialogs/investactivities.cpp:195 dialogs/investactivities.cpp:283
+#: dialogs/investactivities.cpp:422 dialogs/investtransactioneditor.cpp:217
+#: reports/listtable.cpp:221 widgets/transaction.cpp:1565
+#: wizards/newaccountwizard/knewaccountwizard.cpp:88
+msgid "Fees"
+msgstr "Comisións"
+
+#: dialogs/rc.cpp:624 views/khomeview.cpp:415 views/khomeview.cpp:488
+#: views/khomeview.cpp:522 wizards/newaccountwizard/knewaccountwizard.cpp:89
+msgid "Schedule"
+msgstr "Planificación"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:90
+msgid "Payout"
+msgstr "Pagamento"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:91
+msgid "Parent Account"
+msgstr "Conta nai"
+
+#: dialogs/rc.cpp:719 wizards/newaccountwizard/knewaccountwizard.cpp:92
+#: wizards/newuserwizard/knewuserwizard.cpp:86
+msgid "Finish"
+msgstr "Finalizar"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:248
+msgid "Credit card payment"
+msgstr "Pagamento de tarxeta de crédito"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:264
+#, c-format
+msgid "Loan payment for %1"
+msgstr "Pagamento de empréstito para %1"
+
+#: mymoney/mymoneyscheduled.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:279
+msgid "Loan payment"
+msgstr "Pagamento de empréstito"
+
+#: dialogs/rc.cpp:134 wizards/newaccountwizard/knewaccountwizard.cpp:293
+msgid "Amortization"
+msgstr "Amortización"
+
+#: dialogs/investactivities.cpp:196 dialogs/investactivities.cpp:284
+#: dialogs/investactivities.cpp:366 dialogs/investactivities.cpp:423
+#: dialogs/investtransactioneditor.cpp:227 dialogs/rc.cpp:135
+#: dialogs/rc.cpp:152 dialogs/rc.cpp:544 reports/listtable.cpp:222
+#: widgets/transaction.cpp:1597
+#: wizards/newaccountwizard/knewaccountwizard.cpp:302
+msgid "Interest"
+msgstr "Xuro"
+
+#: dialogs/kcurrencycalculator.cpp:282
+#: wizards/newaccountwizard/knewaccountwizard.cpp:351
+#: wizards/newaccountwizard/knewaccountwizard.cpp:356
+msgid "User"
+msgstr "Usuario"
+
+#: kmymoneyutils.cpp:64 mymoney/mymoneyaccount.cpp:711
+#: reports/querytabletest.cpp:422
+#: wizards/newaccountwizard/knewaccountwizard.cpp:451
+msgid "Checking"
+msgstr "Corrente"
+
+#: kmymoneyutils.cpp:66 mymoney/mymoneyaccount.cpp:714
+#: wizards/newaccountwizard/knewaccountwizard.cpp:452
+msgid "Savings"
+msgstr "Aforro"
+
+#: kmymoneyutils.cpp:68 mymoney/mymoneyaccount.cpp:717
+#: reports/querytabletest.cpp:423
+#: wizards/newaccountwizard/knewaccountwizard.cpp:453
+msgid "Credit Card"
+msgstr "Tarxeta de crédito"
+
+#: kmymoneyutils.cpp:70 mymoney/mymoneyaccount.cpp:720
+#: wizards/newaccountwizard/knewaccountwizard.cpp:454
+msgid "Cash"
+msgstr "Tesouraría"
+
+#: kmymoneyutils.cpp:72 mymoney/mymoneyaccount.cpp:723
+#: wizards/newaccountwizard/knewaccountwizard.cpp:455
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+msgid "Loan"
+msgstr "Empréstito"
+
+#: kmymoneyutils.cpp:76 mymoney/mymoneyaccount.cpp:729
+#: wizards/newaccountwizard/knewaccountwizard.cpp:456
+msgid "Investment"
+msgstr "Investimento"
+
+#: converter/mymoneytemplate.cpp:178 converter/mymoneytemplate.cpp:179
+#: dialogs/knewaccountdlg.cpp:1014 kmymoneyutils.cpp:80
+#: mymoney/mymoneyaccount.cpp:735 views/kaccountsview.cpp:352
+#: views/kmymoneyview.cpp:765 widgets/kmymoneyaccountselector.cpp:177
+#: widgets/kmymoneyaccountselector.cpp:356
+#: wizards/newaccountwizard/knewaccountwizard.cpp:457
+msgid "Asset"
+msgstr "Activos"
+
+#: converter/mymoneytemplate.cpp:182 converter/mymoneytemplate.cpp:183
+#: dialogs/knewaccountdlg.cpp:1016 kmymoneyutils.cpp:82
+#: mymoney/mymoneyaccount.cpp:738 views/kaccountsview.cpp:356
+#: views/kmymoneyview.cpp:766 widgets/kmymoneyaccountselector.cpp:178
+#: widgets/kmymoneyaccountselector.cpp:363
+#: wizards/newaccountwizard/knewaccountwizard.cpp:458
+msgid "Liability"
+msgstr "Pasivos"
+
+#: converter/mymoneytemplate.cpp:194 converter/mymoneytemplate.cpp:195
+#: kmymoneyutils.cpp:94 mymoney/mymoneyaccount.cpp:756
+#: views/kaccountsview.cpp:369 views/kmymoneyview.cpp:769
+#: widgets/kmymoneyaccountselector.cpp:181
+#: widgets/kmymoneyaccountselector.cpp:390
+#: wizards/newaccountwizard/knewaccountwizard.cpp:460
+msgid "Equity"
+msgstr "Patrimonio"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid ""
+"Please make sure to enter the correct conversion for the selected opening "
+"date. If you requested an online quote it might be provided for a different "
+"date."
+msgstr ""
+"Asegúrese de introducir a conversión correcta da data de abertura escollida. "
+"Se pide unha cotización en liña poida que se obteña para unha data diferente."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid "Check date"
+msgstr "Comprobar a data"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:562
+msgid "1 %1 equals %2"
+msgstr "1 %1 vale %2"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:577
+msgid "Conversion rate is not positive"
+msgstr "A taxa de conversión non é positiva"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:583
+msgid "No account name supplied"
+msgstr "Non se indicou un nome de conta"
+
+#: dialogs/keditscheduledlg.cpp:114 mymoney/mymoneyscheduled.cpp:1026
+#: wizards/newaccountwizard/knewaccountwizard.cpp:680
+msgid "Write check"
+msgstr "Cheque escrito"
+
+#: dialogs/keditscheduledlg.cpp:111 mymoney/mymoneyscheduled.cpp:1014
+#: wizards/newaccountwizard/knewaccountwizard.cpp:682
+msgid "Direct debit"
+msgstr "Cargo en conta"
+
+#: dialogs/keditscheduledlg.cpp:113 mymoney/mymoneyscheduled.cpp:1032
+#: wizards/newaccountwizard/knewaccountwizard.cpp:683
+msgid "Bank transfer"
+msgstr "Transferencia bancaria"
+
+#: dialogs/keditscheduledlg.cpp:112 mymoney/mymoneyscheduled.cpp:1029
+#: wizards/newaccountwizard/knewaccountwizard.cpp:685
+msgid "Standing order"
+msgstr "Xiro bancario"
+
+#: dialogs/keditscheduledlg.cpp:110 mymoney/mymoneyscheduled.cpp:1020
+#: wizards/newaccountwizard/knewaccountwizard.cpp:686
+msgid "Manual deposit"
+msgstr "Imposición en mao"
+
+#: dialogs/keditscheduledlg.cpp:109 mymoney/mymoneyscheduled.cpp:1017
+#: wizards/newaccountwizard/knewaccountwizard.cpp:687
+msgid "Direct deposit"
+msgstr "Imposición en conta"
+
+#: dialogs/keditscheduledlg.cpp:115 mymoney/mymoneyscheduled.cpp:1023
+#: wizards/newaccountwizard/knewaccountwizard.cpp:688
+msgid "Other"
+msgstr "Outro"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:697
+msgid "CreditCard %1 monthly payment"
+msgstr "Pagamento mensual da tarxeta de crédito %1"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:703
+msgid "Finish entry and create account"
+msgstr "Rematar a entrada e criar a conta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:705
+msgid "Finish entry and create account and schedule"
+msgstr "Rematar a entrada e criar a conta e a planificación"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:708
+msgid "Next due date is prior to opening date"
+msgstr "A seguinte data de vencemento é anterior á data de abertura"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:712
+msgid "No account selected"
+msgstr "Non escolleu nengunha conta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:716
+msgid "No amount for payment selected"
+msgstr "Non escolleu o importe do pagamento"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:720
+msgid "No payee for payment selected"
+msgstr "Non escolleu o beneficiario do pagamento"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:724
+msgid "No name assigned for schedule"
+msgstr "Non lle deu nome ao plano de asentos"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:805
+msgid "No payee supplied"
+msgstr "Non se indicou o beneficiario"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:819
+msgid "No opening balance supplied"
+msgstr "Non se indicou o saldo de abertura"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:826
+msgid "An interest change can only happen after the first payment"
+msgstr ""
+"As mudanzas do tipo de xuro só poden producirse tras o primeiro pagamento"
+
+#: dialogs/knewloanwizard.cpp:615 dialogs/knewloanwizard.cpp:634
+#: wizards/newaccountwizard/knewaccountwizard.cpp:884
+#: wizards/newaccountwizard/rc.cpp:55
+msgid "Months"
+msgstr "Meses"
+
+#: dialogs/knewloanwizard.cpp:616 dialogs/knewloanwizard.cpp:635
+#: wizards/newaccountwizard/knewaccountwizard.cpp:885
+#: wizards/newaccountwizard/knewaccountwizard.cpp:889
+#: wizards/newaccountwizard/rc.cpp:56
+msgid "Years"
+msgstr "Anos"
+
+#: dialogs/knewloanwizard.cpp:711
+#: wizards/newaccountwizard/knewaccountwizard.cpp:961
+#, c-format
+msgid "KMyMoney has calculated the amount of the loan as %1."
+msgstr "KMyMoney calculou a cantidade do empréstito como %1."
+
+#: dialogs/knewloanwizard.cpp:718
+#: wizards/newaccountwizard/knewaccountwizard.cpp:968
+msgid "KMyMoney has calculated the interest rate to %1%."
+msgstr "KMyMoney calculou o xuro como %1%."
+
+#: dialogs/knewloanwizard.cpp:731
+#: wizards/newaccountwizard/knewaccountwizard.cpp:981
+msgid ""
+"KMyMoney has calculated a periodic payment of %1 to cover principal and "
+"interest."
+msgstr ""
+"KMyMoney calculou un pagamento periódico de %1 para cubrir o principal e os "
+"xuros."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:993
+#, c-format
+msgid ""
+"The number of payments has been decremented and the balloon payment has been "
+"modified to %1."
+msgstr ""
+"O número de pagamentos foi diminuído e o pagamento final foi modificado a %1."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1001
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1021
+#, c-format
+msgid "The balloon payment has been modified to %1."
+msgstr "O pagamento final foi modificado a %1."
+
+#: dialogs/knewloanwizard.cpp:763
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1013
+msgid "KMyMoney has calculated the term of your loan as %1. "
+msgstr "KMyMoney calculou o remate do seu empréstito como %1. "
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1052
+msgid "KMyMoney has calculated a balloon payment of %1 for this loan."
+msgstr "KMyMoney calculou un pagamento final de %1 para este empréstito."
+
+#: dialogs/knewloanwizard.cpp:809
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1059
+msgid "KMyMoney has successfully verified your loan information."
+msgstr "KMyMoney verificou satisfactoriamente a información do empréstito ."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1067
+msgid ""
+"You have entered mis-matching information. Please modify your figures or "
+"leave one value empty to let KMyMoney calculate it for you"
+msgstr ""
+"Introduciu información que non casa. Por favor modifique axeitadamente as "
+"cantidades inseridas ou deixe un valor baleiro para permitirlle a KMyMoney "
+"calculalo para vde."
+
+#: dialogs/knewloanwizard.cpp:504 dialogs/knewloanwizard.cpp:513
+#: dialogs/knewloanwizard.cpp:522 dialogs/knewloanwizard.cpp:532
+#: dialogs/knewloanwizard.cpp:820
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1070
+msgid "Calculation error"
+msgstr "Erro de cálculo"
+
+#: dialogs/knewloanwizard.cpp:824
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1074
+msgid ""
+"\n"
+"\n"
+"Accept this or modify the loan information and recalculate."
+msgstr ""
+"\n"
+"\n"
+"Aceite isto ou modifique a información do empréstito e recalcule."
+
+#: dialogs/knewloanwizard.cpp:826
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1076
+msgid "Calculation successful"
+msgstr "Cálculo correcto"
+
+#: dialogs/knewloanwizard.cpp:846
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1129
+#, c-format
+msgid ""
+"_n: one month\n"
+"%n months"
+msgstr ""
+"un mes\n"
+"%n meses"
+
+#: dialogs/knewloanwizard.cpp:850
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1133
+#, c-format
+msgid ""
+"_n: one year\n"
+"%n years"
+msgstr ""
+"un ano\n"
+"%n anos"
+
+#: dialogs/knewloanwizard.cpp:854
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1137
+#, c-format
+msgid ""
+"_n: one payment\n"
+"%n payments"
+msgstr ""
+"un pagamento\n"
+"%n pagamentos"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1190
+msgid "Press Calculate to verify the values"
+msgstr "Prema en Calcular para verificar os valores"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1194
+msgid "Not all details supplied"
+msgstr "Non se indicaron todos os detalles"
+
+#: dialogs/kaccountselectdlg.cpp:70 dialogs/knewloanwizard.cpp:122
+#: dialogs/knewloanwizard.cpp:136
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1381
+msgid "&Create..."
+msgstr "&Crear..."
+
+#: dialogs/knewloanwizard.cpp:138
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1383
+msgid "Create a new asset account"
+msgstr "Crea unha nova conta de activos"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1384
+msgid ""
+"If the asset account does not yet exist, press this button to create it."
+msgstr "Se a conta de activos non existise, prema neste botón para criala."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1596
+msgid "Account information"
+msgstr "Información da conta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1601
+#: wizards/newaccountwizard/rc.cpp:59
+msgid "Subaccount of"
+msgstr "Subconta de"
+
+#: dialogs/rc.cpp:225 dialogs/rc.cpp:326 dialogs/rc.cpp:371 dialogs/rc.cpp:723
+#: plugins/ofximport/dialogs/rc.cpp:23 reports/listtable.cpp:225
+#: widgets/kmymoneyaccounttreebase.cpp:113 widgets/register.cpp:61
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1606
+msgid "Type"
+msgstr "Tipo"
+
+#: dialogs/kcurrencyeditdlg.cpp:62 dialogs/rc.cpp:56 dialogs/rc.cpp:59
+#: dialogs/rc.cpp:75 dialogs/rc.cpp:727 dialogs/rc.cpp:792
+#: kmymoneyutils.cpp:84 kmymoneyutils.cpp:111 mymoney/mymoneyaccount.cpp:741
+#: mymoney/mymoneysecurity.cpp:169 reports/listtable.cpp:233
+#: widgets/kmymoneypriceview.cpp:127
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1607
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1630
+#: wizards/newaccountwizard/rc.cpp:6 wizards/newaccountwizard/rc.cpp:24
+msgid "Currency"
+msgstr "Moeda"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1608
+#: wizards/newaccountwizard/rc.cpp:7 wizards/newuserwizard/rc.cpp:9
+msgid "Opening date"
+msgstr "Data de abertura"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1610
+#: wizards/newaccountwizard/rc.cpp:9
+msgid "Conversion rate"
+msgstr "Taxa de conversión"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1613
+#: wizards/newaccountwizard/rc.cpp:15 wizards/newuserwizard/rc.cpp:13
+msgid "Opening balance"
+msgstr "Saldo de abertura"
+
+#: dialogs/keditscheduledlg.cpp:507 dialogs/transactioneditor.cpp:784
+#: dialogs/transactioneditor.cpp:848 plugins/ofximport/dialogs/rc.cpp:22
+#: widgets/rc.cpp:111 widgets/register.cpp:59 widgets/transaction.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1618
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1632
+msgid "Number"
+msgstr "Número"
+
+#: dialogs/rc.cpp:365 wizards/newaccountwizard/knewaccountwizard.cpp:1621
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1634
+#: wizards/newaccountwizard/rc.cpp:26 wizards/newaccountwizard/rc.cpp:66
+msgid "IBAN"
+msgstr "IBAN"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1627
+msgid "Brokerage Account"
+msgstr "Conta de corretaxe"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1640
+msgid "Loan information"
+msgstr "Información do empréstito"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1643
+msgid "Amount borrowed"
+msgstr "Cantidade recibida en empréstito"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1645
+msgid "Amount lent"
+msgstr "Cantidade dada en empréstito"
+
+#: dialogs/rc.cpp:515 dialogs/rc.cpp:546
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1647
+#: wizards/newaccountwizard/rc.cpp:75
+msgid "Interest rate"
+msgstr "Taxa de xuro"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1648
+msgid "Interest rate is"
+msgstr "A taxa de xuro é"
+
+#: dialogs/rc.cpp:509 dialogs/rc.cpp:572
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1649
+msgid "Principal and interest"
+msgstr "Principal e xuros"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1650
+#: wizards/newaccountwizard/rc.cpp:90
+msgid "Additional fees"
+msgstr "Cargos adicionais"
+
+#: dialogs/rc.cpp:525 wizards/newaccountwizard/knewaccountwizard.cpp:1651
+#: wizards/newaccountwizard/rc.cpp:44
+msgid "Payment frequency"
+msgstr "Frecuencia dos pagamentos"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1652
+#: wizards/newaccountwizard/rc.cpp:105
+msgid "Payment account"
+msgstr "Conta de gasto"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1655
+msgid "Payout information"
+msgstr "Información do pagamento"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1658
+msgid "Refinance"
+msgstr "Refinanciar"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1661
+msgid "Transfer amount to"
+msgstr "Transferir a cantidade a"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1663
+msgid "Transfer amount from"
+msgstr "Transferir a cantidade desde"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1665
+msgid "Payment date"
+msgstr "Data do pagamento"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1671
+msgid "Schedule information"
+msgstr "Información do plano de asentos"
+
+#: reports/listtable.cpp:228
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1684
+msgid "Occurence"
+msgstr "Acontece"
+
+#: mymoney/mymoneyscheduled.cpp:891 mymoney/mymoneyscheduled.cpp:947
+#: mymoney/mymoneyscheduled.cpp:1283 mymoney/mymoneyscheduletest.cpp:1343
+#: widgets/rc.cpp:19 widgets/rc.cpp:74
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+msgid "Monthly"
+msgstr "Mensualmente"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1677
+msgid "Paid from"
+msgstr "Pago de"
+
+#: widgets/kmymoneycombo.cpp:473 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1678
+msgid "Pay to"
+msgstr "Pagar a"
+
+#: dialogs/investactivities.cpp:197 dialogs/investactivities.cpp:285
+#: dialogs/investactivities.cpp:365 dialogs/kfindtransactiondlg.cpp:197
+#: dialogs/kmymoneysplittable.cpp:80 dialogs/rc.cpp:51 dialogs/rc.cpp:212
+#: reports/listtable.cpp:197 views/khomeview.cpp:421 views/khomeview.cpp:494
+#: views/khomeview.cpp:528 views/kscheduledview.cpp:73 views/rc.cpp:63
+#: widgets/register.cpp:58 widgets/transaction.cpp:1055
+#: widgets/transaction.cpp:1578 widgets/transaction.cpp:1610
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1679
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1685
+msgid "Amount"
+msgstr "Cantidade"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1680
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1686
+msgid "First payment due"
+msgstr "O primeiro pagamento vence o"
+
+#: dialogs/rc.cpp:102 wizards/newaccountwizard/knewaccountwizard.cpp:1681
+#: wizards/newaccountwizard/rc.cpp:115
+msgid "Payment method"
+msgstr "Método de pagamento"
+
+#: wizards/newaccountwizard/rc.cpp:1
+msgid ""
+"This page summarizes the data you have entered. Press <b>Finish</b> to "
+"create the account, schedules, etc. or use <b>Back</b> to modify your "
+"entries."
+msgstr ""
+"Esta páxina resume os dados que inseriu. Prema en <b>Rematar</b> para criar "
+"a conta, planos, etc., ou en <b>Atrás</b> para modificar os dados."
+
+#: wizards/newaccountwizard/rc.cpp:2
+msgid "Item"
+msgstr "Ítem"
+
+#: dialogs/rc.cpp:110 dialogs/rc.cpp:165 dialogs/rc.cpp:252 dialogs/rc.cpp:757
+#: dialogs/rc.cpp:818 views/kinvestmentview.cpp:74 widgets/register.cpp:574
+#: wizards/newaccountwizard/rc.cpp:3
+msgid "Value"
+msgstr "Valor"
+
+#: wizards/newaccountwizard/rc.cpp:4
+msgid ""
+"Enter the name of the account under which it is known within KMyMoney.\n"
+"Select the type for the new account. Use the <b>What's this?</b> feature to "
+"see more details about the various account types.\n"
+"Enter the date the account was opened and its currency."
+msgstr ""
+"Indique o nome da conta en KMyMoney.\n"
+"Escolla o tipo da nova conta. Use a axuda <b>Que é isto?</b> para coñecer "
+"máis detalles acerca dos diferentes tipos de conta.\n"
+"Indique a data de abertura da conta e a divisa na que está denominada."
+
+#: wizards/newaccountwizard/rc.cpp:5
+msgid "Select the currency in which this account is denominated."
+msgstr "Escolla a divisa na que está denominada esta conta."
+
+#: wizards/newaccountwizard/rc.cpp:8
+msgid ""
+"The opening balance is the balance of the account when you start using it "
+"with KMyMoney. For new accounts this is usually 0 but for existing accounts "
+"this may well differ. Please consult the account statements to figure out "
+"this value. The opening balance is to be provided in the currency of the "
+"account as selected with the currency button."
+msgstr ""
+"O saldo inicial é o balance da conta cando comeza a utilizala con KMyMoney. "
+"No caso das contas novas polo xeral vale 0 pero no das preexistentes pode "
+"ser outro valor; consulte os extractos de conta para coñecer esta cantidade. "
+"O saldo inicial debe indicarse na divisa da conta, tal como esta fose "
+"escollida co botón de divisa."
+
+#: wizards/newaccountwizard/rc.cpp:10
+msgid ""
+"The opening date would be the date of the last statement. In case you want "
+"to keep track of transactions prior to this date, enter the ending balance "
+"and statement date of a prior statement and add all following transactions "
+"into KMyMoney.\n"
+"<br>\n"
+"<i>Note</i>: If you do not know the exact amount of the opening balance, "
+"enter an estimate. You can change this value later before you reconcile this "
+"account for the first time."
+msgstr ""
+"A data de abertura debera ser a data do último extracto. Se quer facer un "
+"seguimento de transaccións anteriores a esta data, introduza o saldo final "
+"dun extracto anterior e asente as transaccións que sigan.\n"
+"<br>\n"
+"<i>Nota</i>: Se non sabe o saldo de abertura exacto, indique unha "
+"estimación. Poderá mudar este valor noutro momento antes de conciliar a "
+"conta por primeira vez."
+
+#: dialogs/rc.cpp:52 dialogs/rc.cpp:54 dialogs/rc.cpp:57 dialogs/rc.cpp:60
+#: dialogs/rc.cpp:748 dialogs/rc.cpp:749 dialogs/rc.cpp:768 widgets/rc.cpp:6
+#: widgets/rc.cpp:7 widgets/rc.cpp:8 widgets/rc.cpp:9 widgets/rc.cpp:10
+#: widgets/rc.cpp:11 widgets/rc.cpp:12 widgets/rc.cpp:13 widgets/rc.cpp:14
+#: widgets/rc.cpp:15 widgets/rc.cpp:16 widgets/rc.cpp:17
+#: wizards/newaccountwizard/rc.cpp:11 wizards/newaccountwizard/rc.cpp:88
+#: wizards/newaccountwizard/rc.cpp:91 wizards/newaccountwizard/rc.cpp:93
+#: wizards/newuserwizard/rc.cpp:14
+msgid "xxx"
+msgstr "xxx"
+
+#: wizards/newaccountwizard/rc.cpp:12
+msgid "Account type"
+msgstr "Tipo da conta"
+
+#: wizards/newaccountwizard/rc.cpp:13
+msgid ""
+"For foreign currencies an initial conversion rate needs to be provided. This "
+"should be the price of the foreign currency in the base currency on the "
+"opening date of the account."
+msgstr ""
+"No caso das divisas estranxeiras debe indicarse unha taxa de conversión "
+"inicial, que debe ser o prezo da divisa estranxeira respecto da divisa base "
+"na data de abertura da conta."
+
+#: wizards/newaccountwizard/rc.cpp:14
+msgid "Account name"
+msgstr "Nome da conta"
+
+#: wizards/newaccountwizard/rc.cpp:16
+msgid ""
+"<p><b>Checking</b>\n"
+"Use the checking account type to manage activities on your checking account "
+"e.g. payments, checks and cash card purchases.</p>\n"
+"\n"
+"<p><b>Savings</b>\n"
+"Use the savings account type to manage activities on your savings account.</"
+"p>\n"
+"\n"
+"<p><b>Credit Card</b>\n"
+"Use the credit card account type to manage activities on your credit card.</"
+"p>\n"
+"\n"
+"<p><b>Cash</b>\n"
+"\n"
+"Use the cash account type to manage activities in your wallet.</p>\n"
+"\n"
+"<p><b>Loan</b>\n"
+"Use the loan account type to manage amortization loans (e.g. mortgages, car "
+"loan, money you lend, private loans etc.).</p>\n"
+"\n"
+"<p><b>Investment</b>\n"
+"Use the investment account to manage your stock, mutual fund and other "
+"investments.</p>\n"
+"\n"
+"<p><b>Asset</b>\n"
+"Use the asset account type to manage assets (e.g. your house, car or art "
+"collection).</p>\n"
+"\n"
+"<p><b>Liability</b>\n"
+"Use the liability account type to manage any type of liability except "
+"amortization loans. Use it for taxes you owe or money you borrowed from "
+"friends. For amortization loans like mortgages you should create a loan "
+"account.</p>"
+msgstr ""
+"<p><b>Corrente</b>\n"
+"Use o tipo de conta Corrente para xestionar as actividades na súa conta "
+"corrente, p.ex. pagamentos, nóminas e uso da tarxeta de débito.</p>\n"
+"\n"
+"<p><b>Aforros</b>\n"
+"Use o tipo de conta Aforro para xestionar as actividades na súa conta de "
+"aforros.</p>\n"
+"\n"
+"<p><b>Tarxeta de crédito</b>\n"
+"Use o tipo de conta para Tarxetas de crédito para xestionar as actividades "
+"coa súa tarxeta de crédito.</p>\n"
+"\n"
+"<p><b>Tesouraría</b>\n"
+"\n"
+"Use o tipo de conta de Tesouraría para xestionar as actividades con efectivo."
+"</p>\n"
+"\n"
+"<p><b>Empréstito</b>\n"
+"Use o tipo de conta Empréstito para xestionar empréstitos con amortización "
+"(p.ex. hipotecas, empréstitos ao consumo, cartos que emprestase, etc.).</p>\n"
+"\n"
+"<p><b>Investimento</b>\n"
+"Use o tipo de conta Investimento para xestionar a súa carteira de valores, "
+"fondos de investimento e outros investimentos.</p>\n"
+"\n"
+"<p><b>Activo</b>\n"
+"Use o tipo de conta Activo para xestionar activos (p.ex. a súa casa, coche "
+"ou outros bens).</p>\n"
+"\n"
+"<p><b>Pasivo</b>\n"
+"Use o tipo de conta Pasivo para xestionar calquera tipo de pasivo excepto "
+"empréstitos con amortización. Úseo para impostos que deba ou cartos que "
+"tomase emprestados de amigos. Para empréstitos con amortización debera criar "
+"unha conta de empréstito.</p>"
+
+#: wizards/newaccountwizard/rc.cpp:17
+msgid "Preferred account"
+msgstr "Conta preferida"
+
+#: wizards/newaccountwizard/rc.cpp:18
+msgid ""
+"Mark this checkbox if the account should be maintained as preferred account"
+msgstr "Sinale esta opción se a conta debe ser mantida como conta preferida"
+
+#: wizards/newaccountwizard/rc.cpp:19
+msgid ""
+"Selecting the <b>Preferred Account</b> checkbox will allow preferred access "
+"in some dialogs and views of KMyMoney."
+msgstr ""
+"Se sinala a opción <b>Conta preferida</b> poderá ter aceso preferente "
+"nalgúns diálogos e vistas de KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:20
+msgid "Enter a name under which this account is known within KMyMoney."
+msgstr "Indique o nome co que se referirá a esta conta en KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:21
+msgid "Online quote"
+msgstr "Cotización online"
+
+#: wizards/newaccountwizard/rc.cpp:22
+msgid ""
+"Does this investment account have a brokerage account?<p>\n"
+"\n"
+"<b>Check</b> the mark if this investment account has an associated account "
+"for money that is not invested.<br>\n"
+"\n"
+"<b>Uncheck</b> it if you don't use this account for active stock brokerage. "
+"You should also uncheck it if this account is not maintained by a bank or "
+"broker."
+msgstr ""
+"Ten esta conta de investimento asociada unha de corretaxe?<p>\n"
+"\n"
+"<b>Sinale</b> a opción se esta conta de investimento ten unha conta asociada "
+"para cartos que non están investidos.<br>\n"
+"\n"
+"<b>Desmarque</b>a se non usa esta conta para corretaxe de accións. Tamén "
+"debería desmarcala se non está mantida por un banco ou corredor."
+
+#: wizards/newaccountwizard/rc.cpp:23
+msgid "Create brokerage account"
+msgstr "Criar unha nova conta de corretaxe"
+
+#: wizards/newaccountwizard/rc.cpp:25 wizards/newaccountwizard/rc.cpp:64
+msgid "Account number"
+msgstr "Número de conta"
+
+#: wizards/newaccountwizard/rc.cpp:27
+msgid ""
+"Please select the required options. Please use the <b>What's this?</b> "
+"feature to see more information about the items."
+msgstr ""
+"Escolla as opcións requiridas. Use a axuda <b>Que é isto?</b> para obter "
+"máis información acerca dos ítems."
+
+#: wizards/newaccountwizard/rc.cpp:28
+msgid "What is the type of the loan?"
+msgstr "Cal é o tipo do empréstito?"
+
+#: dialogs/rc.cpp:481 wizards/newaccountwizard/rc.cpp:29
+msgid "I am borrowing money"
+msgstr "Pido prestados cartos"
+
+#: dialogs/rc.cpp:482 wizards/newaccountwizard/rc.cpp:30
+msgid "I am lending money"
+msgstr "Presto cartos"
+
+#: wizards/newaccountwizard/rc.cpp:31
+msgid "Who is the payee/payer of the loan?"
+msgstr "Quen é o beneficiario/pagador da conta?"
+
+#: wizards/newaccountwizard/rc.cpp:32
+msgid ""
+"Enter the name of the person or bank you owe money or who owes you money.\n"
+"\n"
+"If the name does not exist within KMyMoney's database, you are asked if you "
+"want to create it."
+msgstr ""
+"Escreba o nome da persoa ou banco ao que lle deba cartos ou que lle deba "
+"cartos.\n"
+"\n"
+"Se o nome non existe na base de datos de KMyMoney, preguntaráselle se o quer "
+"crear."
+
+#: wizards/newaccountwizard/rc.cpp:33
+msgid "Did you make/receive any payments yet?"
+msgstr "Ten xa feito/recibido algún pagamento?"
+
+#: wizards/newaccountwizard/rc.cpp:36
+msgid ""
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?\n"
+"\n"
+"Note: Payments made to obtain the loan (e.g. Disagio) are not considered as "
+"payments in this context."
+msgstr ""
+"Ten habido pagamentos para este empréstito teñan sido ou non rexistrados en "
+"KMyMoney?\n"
+"\n"
+"Nota: Os pagamentos feitos para obter o empréstito (p. ex. «Comisións de "
+"apertura») non son considerados como pagamentos neste contexto."
+
+#: wizards/newaccountwizard/rc.cpp:37
+msgid "Which payments do you want to record?"
+msgstr "Que pagamentos desexa rexistrar?"
+
+#: wizards/newaccountwizard/rc.cpp:38
+msgid "All payments"
+msgstr "Todos os pagamentos"
+
+#: wizards/newaccountwizard/rc.cpp:39
+msgid "Start with this year's payments"
+msgstr "Comeza cos pagamentos deste ano"
+
+#: wizards/newaccountwizard/rc.cpp:40
+msgid ""
+"<qt>Select which transactions should be recorded.\n"
+"\n"
+"<b>All payments</b> allows you to enter all payments made for this loan.\n"
+"\n"
+"The option to <b>start from the beginning of the current year</b> is meant "
+"for loans that are active for a longer period of time already and you don't "
+"want to enter all transactions of the past.\n"
+"</qt>"
+msgstr ""
+"<qt>Escolla que asentos deben ser rexistrados.\n"
+"\n"
+"<b>Todos os pagamentos</b> permítelle asentas todos os pagamentos feitos "
+"para este empréstito.\n"
+"\n"
+"A opción para <b>iniciar desde o inicio deste ano</b> está pensada para "
+"empréstitos que iniciados tempo atrás para os que non queira introducir "
+"todas as transaccións pasadas.\n"
+"</qt>"
+
+#: wizards/newaccountwizard/rc.cpp:41
+msgid "Balance before start of recording"
+msgstr "Saldo anterior ao inicio do rexistro"
+
+#: wizards/newaccountwizard/rc.cpp:42
+msgid ""
+"Enter the ending balance found on the statement that is the last one before "
+"you want to start recording this loan in KMyMoney."
+msgstr ""
+"Indique o saldo final do último extracto anterior ao rexistro deste "
+"empréstito en KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:43
+msgid ""
+"You have selected to record only payments from the beginning of this year. "
+"Since prior transactions will not be recorded, you need to supply the "
+"balance of the loan on January 1st of this year."
+msgstr ""
+"Escolleu rexistrar só os pagamentos feitos desde o comezo deste ano. Xa que "
+"as operacións anteriores non serán rexistrados, debe fornecer o saldo de "
+"empréstito a día 1 de xaneiro deste ano."
+
+#: wizards/newaccountwizard/rc.cpp:45
+msgid "Interest Compounding frequency"
+msgstr "Frecuencia da composición dos xuros"
+
+#: wizards/newaccountwizard/rc.cpp:46
+msgid ""
+"Select the frequency with which the interest is compounded. If uncertain, "
+"select the same as the payment frequency. Consult your loan contract for "
+"details."
+msgstr ""
+"Escolla a frecuencia coa que se compón o xuro. Se non está certo, escolla a "
+"mesma frecuencia que a de pagamento. Consulte o seu contrato de empréstito "
+"para máis detalles."
+
+#: wizards/newaccountwizard/rc.cpp:47
+msgid "Due date of first payment to be recorded"
+msgstr "Data de vencemento do primeiro pagamento a rexistrar"
+
+#: wizards/newaccountwizard/rc.cpp:48
+msgid ""
+"Depending on the answer to <b>What do you want to record?</b> this field "
+"means the following:<p>\n"
+"\n"
+"<b>All payments</b><br>\n"
+"Enter the due date of the very first payment<p>\n"
+"\n"
+"<b>Start with this year's payments</b><br>\n"
+"Enter the due date of the first payment in the current year"
+msgstr ""
+"E función da resposta a <b>Que desexa rexistrar?</b> este campo significa o "
+"seguinte:<p>\n"
+"\n"
+"<b>Todos os pagamentos</b><br>\n"
+"Indica a data de vencemento do primeiro inicial<p>\n"
+"\n"
+"<b>Comeza cos pagamentos deste ano</b><br>\n"
+"Indica a data de vencemento do primeiro pagamento deste ano"
+
+#: wizards/newaccountwizard/rc.cpp:49
+msgid "Type of interest rate"
+msgstr "Tipo de xuro"
+
+#: wizards/newaccountwizard/rc.cpp:50
+msgid "Fixed"
+msgstr "Fixo"
+
+#: wizards/newaccountwizard/rc.cpp:51
+msgid "Variable"
+msgstr "Variábel"
+
+#: wizards/newaccountwizard/rc.cpp:52
+msgid "Time between interest changes"
+msgstr "Prazo entre cambios de xuro"
+
+#: dialogs/knewloanwizard.cpp:613 wizards/newaccountwizard/rc.cpp:53
+msgid "Days"
+msgstr "Días"
+
+#: dialogs/knewloanwizard.cpp:614 wizards/newaccountwizard/rc.cpp:54
+msgid "Weeks"
+msgstr "Semanas"
+
+#: wizards/newaccountwizard/rc.cpp:57
+msgid "Next interest change is due"
+msgstr "A seguinte taxa de xuro está vencida"
+
+#: wizards/newaccountwizard/rc.cpp:58
+msgid "This page allows you to select the parent account."
+msgstr "Esta páxina permítelle escoller a conta nai."
+
+#: wizards/newaccountwizard/rc.cpp:60
+msgid ""
+"If this account is managed by an institution please select the institution "
+"from the list. If the institution does not exist yet, please choose the "
+"<b>New Institution</b> button to create it. Otherwise, leave this field "
+"empty.\n"
+"Enter the account number used by the institution to identify the account."
+msgstr ""
+"Se esta conta é xestionada por unha entidade bancaria, escóllaa na lista. Se "
+"a entidade aínda non existe, prema no botón <b>Nova organización</b> para "
+"criala. Caso contrario, deixe este campo en branco.\n"
+"Indique o número de conta usado pola entidade para identificar a conta."
+
+#: wizards/newaccountwizard/rc.cpp:62
+msgid "Select the institution which manages this account or leave empty"
+msgstr "Escolla a entidade que xestiona esta conta ou déixeo en branco"
+
+#: wizards/newaccountwizard/rc.cpp:63
+msgid "New Institution"
+msgstr "Nova organización"
+
+#: wizards/newaccountwizard/rc.cpp:65
+msgid ""
+"Accounts managed by an institution are usually referenced by a unique number "
+"the so called account number. Enter that number here.\n"
+"\n"
+"KMyMoney currently uses this number only for some online banking functions."
+msgstr ""
+"As contas xestionadas por unha entidade adoitan ter un número identificador "
+"único, o chamado número de conta. Indique aquí ese número.\n"
+"\n"
+"KMyMoney usa este número só para algunhas funcionalidades de banca en rede."
+
+#: wizards/newaccountwizard/rc.cpp:67
+msgid "Enter the International Bank Account Number into this field"
+msgstr "Introduza aquí o IBAN desta conta"
+
+#: wizards/newaccountwizard/rc.cpp:68
+msgid ""
+"You can enter the IBAN (International Bank Account Number) into this field "
+"if you know it. Usually, people at your institution can tell you the number "
+"or it is printed on your statements.\n"
+"\n"
+"See also http://en.wikipedia.org/wiki/International_Bank_Account_Number for "
+"more information.\n"
+"\n"
+"KMyMoney keeps this field only for documentation purposes and does not use "
+"it otherwise."
+msgstr ""
+"Se o sabe, pode escribir o IBAN (International Bank Account Number) neste "
+"campo. Polo xeral, os traballadores da entidade poderán darlle o número, que "
+"adoita estar impreso nos extractos.\n"
+"\n"
+"Consulte tamén http://en.wikipedia.org/wiki/"
+"International_Bank_Account_Number para máis información.\n"
+"\n"
+"KMyMoney só fai uso deste campo para información e non o usa para outra "
+"cousa."
+
+#: wizards/newaccountwizard/rc.cpp:69
+msgid ""
+"Now enter the details for your loan. You can leave one of the fields empty "
+"and KMyMoney will calculate it when you press the <b>Calculate</b> button. "
+"Before you can continue with the next page you also need to press "
+"<b>Calculate</b> so that KMyMoney can check the logical correctness of the "
+"values you have supplied."
+msgstr ""
+"Agora introduza os detalles do seu empréstito. Pode deixar en branco un dos "
+"campos e KMyMoney calcularao cando prema no botón <b>Calcular</b>. Antes de "
+"poder ir á seguinte páxina tamén debe premer en <b>Calcular</b> para que "
+"KMyMoney verifique a corrección lóxica dos valores que subministrou."
+
+#: wizards/newaccountwizard/rc.cpp:70
+msgid "The interest rate gets calculated"
+msgstr "A taxa de xuro é calculada"
+
+#: wizards/newaccountwizard/rc.cpp:71
+msgid "when the payment is received"
+msgstr "cando se recebe o pagamento"
+
+#: wizards/newaccountwizard/rc.cpp:72
+msgid "when the payment is due"
+msgstr "cando vence o pagamento"
+
+#: dialogs/rc.cpp:531 dialogs/rc.cpp:533 wizards/newaccountwizard/rc.cpp:73
+msgid "Loan amount"
+msgstr "Importe do empréstito"
+
+#: wizards/newaccountwizard/rc.cpp:74
+msgid ""
+"Enter the amount of the loan in this field. If you want to calculate this "
+"field out of the other parameters, please leave it empty. If the field is "
+"marked as required (colored background) you have informed KMyMoney about the "
+"fact that there were already some payments towards the loan. In this case, "
+"please enter the ending balance of your last statement."
+msgstr ""
+"Introduza a importe do empréstito neste campo. Se quer calcular este campo "
+"entre os demais parámetros, déixeo en branco. Se sinala o campo como "
+"requirido (fondo colorido) indicaralle a KMyMoney que xa foron feitos "
+"pagamentos. Neste caso, indique o saldo final do seu último extracto."
+
+#: wizards/newaccountwizard/rc.cpp:76
+msgid ""
+"Please enter the interest rate in percent or leave the field empty to "
+"calculate it."
+msgstr "Introduza a taxa de xuro ou deixe o campo en branco para calculalo."
+
+#: dialogs/rc.cpp:559 wizards/newaccountwizard/rc.cpp:77
+msgid "Term"
+msgstr "Remate"
+
+#: wizards/newaccountwizard/rc.cpp:78
+msgid ""
+"Please enter the term of this loan or enter 0 to calculate it. The term is "
+"the time that is required to fully repay the loan. This time might be "
+"different from the time your loan contract is signed for."
+msgstr ""
+"Introduza o prazo deste empréstito ou indique 0 para calculalo. O prazo é o "
+"tempo requirido para devolver por completo o empréstito. Este tempo pode ser "
+"diferente do tempo polo que asine o contrato de empréstito."
+
+#: wizards/newaccountwizard/rc.cpp:79
+msgid "Payment (principal and interest)"
+msgstr "Pagamento (principal e xuros)"
+
+#: wizards/newaccountwizard/rc.cpp:80
+msgid ""
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"Indique a cantidade que paga de principal e xuros ou deixe o campo en branco "
+"para calculalo."
+
+#: wizards/newaccountwizard/rc.cpp:81
+msgid "Balloon payment"
+msgstr "Pagamento final"
+
+#: wizards/newaccountwizard/rc.cpp:82
+msgid ""
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"Introduza o importe do derradeiro pagamento da amortización ou deixe o campo "
+"vacío para calculalo."
+
+#: wizards/newaccountwizard/rc.cpp:83
+msgid "Calculate"
+msgstr "Calcular"
+
+#: wizards/newaccountwizard/rc.cpp:84
+msgid "Press this button to calculate/verify your loan details."
+msgstr ""
+"Prema nesta botón para calcular/verificar os detalles do seu empréstito."
+
+#: wizards/newaccountwizard/rc.cpp:85
+msgid ""
+"Pressing this button calculates a possibly missing parameter for your loan "
+"or verifies that the values entered match. If something is not correct you "
+"will receive information about it."
+msgstr ""
+"Se preme neste botón calculará un valor a faltar para o empréstito ou "
+"verificará que os valores introducidos casen. Se hai algo non correcto "
+"recibirá información acerca disto."
+
+#: wizards/newaccountwizard/rc.cpp:86
+msgid ""
+"Now enter the information required for the periodic loan payments. If your "
+"regular payments contains any additional fees, click on the <b>Additional "
+"fees</b> button to enter them."
+msgstr ""
+"Agora introduza a información requirida para os pagamentos periódicos do "
+"empréstito. Se o seu pagamento periódico contén cargos adicionais, prema no "
+"botón <b>Cargos Adicionais</b> para introducilos."
+
+#: wizards/newaccountwizard/rc.cpp:87
+msgid "Principal + Interest"
+msgstr "Principal + Xuros"
+
+#: dialogs/rc.cpp:620 wizards/newaccountwizard/rc.cpp:89
+msgid "+"
+msgstr "+"
+
+#: wizards/newaccountwizard/rc.cpp:92
+msgid "= periodical payments"
+msgstr "= pagamentos periódicos"
+
+#: dialogs/rc.cpp:643 wizards/newaccountwizard/rc.cpp:94
+msgid ""
+"If this loan is for an asset, such as a car or a house, you can create the "
+"asset account now. An asset account represents the total value of an asset. "
+"The money from this loan will be transfered into the asset account you "
+"create or select.\n"
+"If this loan is a 'consumer loan' (money to use however you want), you can "
+"use a checking account instead."
+msgstr ""
+"Se este empréstito é para mercar un activo, como un coche ou casa, pode "
+"criar agora a conta que o simboliza. Unha conta de activos representa o "
+"valor total dun activo. O diñeiro deste empréstito será transferido á conta "
+"que críe ou escolla.\n"
+"Se este é un «Crédito para consumo» (cartos que usará para o que lle pete), "
+"pode usar unha conta corrente."
+
+#: dialogs/rc.cpp:644 wizards/newaccountwizard/rc.cpp:95
+msgid "Don't create payout transaction"
+msgstr "Non criar unha transacción de remate"
+
+#: wizards/newaccountwizard/rc.cpp:96
+msgid "Refinance existing loan"
+msgstr "Refinanciar un empréstito existente"
+
+#: wizards/newaccountwizard/rc.cpp:97
+msgid ""
+"Check this if you are refinancing a loan that already exists in KMyMoney"
+msgstr ""
+"Sinale isto se está a refinanciar un empréstito que xa existe en KMyMoney"
+
+#: dialogs/rc.cpp:642 wizards/newaccountwizard/rc.cpp:98
+msgid "Asset Account"
+msgstr "Conta de activos"
+
+#: dialogs/rc.cpp:2 wizards/newaccountwizard/rc.cpp:99
+msgid "Create"
+msgstr "Criar"
+
+#: wizards/newaccountwizard/rc.cpp:100
+msgid "Loan account"
+msgstr "Conta de empréstito"
+
+#: dialogs/rc.cpp:646 wizards/newaccountwizard/rc.cpp:101
+msgid "Date of payment"
+msgstr "Data do pagamento"
+
+#: wizards/newaccountwizard/rc.cpp:102
+msgid ""
+"KMyMoney creates a schedule for this payment and reminds you whenever a "
+"payment must be made. Please select the account to/from which payments will "
+"be made and the category the interest will be assigned to.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"KMyMoney crea un plano de pagamentos para este pagamento, e avisarao cando "
+"deba facer un. Escolla a conta da/á que serán feitos os pagamentos e a "
+"categoría á que se asinarán os intereses.<p>Se escolleu rexistrar todos os "
+"pagamentos, xa proporcionou esta data. Se escolleu rexistrar só os "
+"pagamentos deste ano, entón a <b>Data de vencemento do primeiro pagamento</"
+"b> é a data do primeiro pagamento realizado este ano."
+
+#: dialogs/rc.cpp:613 wizards/newaccountwizard/rc.cpp:103
+msgid "Interest category"
+msgstr "Categoría dos xuros"
+
+#: wizards/newaccountwizard/rc.cpp:104
+msgid ""
+"The category the interest part of the payment will be assigned to. If you "
+"borrow money you usually have to pay interest, so this should be an expense "
+"category. If you lend the money, you receive the interest. In this case, "
+"select an income category here."
+msgstr ""
+"A categoría á que se asinará a parte de xuros do pagamento. Se pediu "
+"prestado cartos polo xeral terá que pagar xuros, polo que isto debe ser unha "
+"categoría de gastos. Se emprestou os cartos, recibirá os xuros. Neste caso, "
+"indique aquí unha categoría de ingresos."
+
+#: wizards/newaccountwizard/rc.cpp:106
+msgid ""
+"Select the account from which you make your periodical payments or where you "
+"receive regular payments in case you lend the money. In most cases, this is "
+"a checking account."
+msgstr ""
+"Escolla a conta coa que fai os pagamentos periódicos ou onde recibirá os "
+"pagamentos non caso de que emprestase os cartos. Na maioría dos casos, esta "
+"é unha conta corrente."
+
+#: dialogs/rc.cpp:519 wizards/newaccountwizard/rc.cpp:107
+msgid "First payment due on"
+msgstr "O primeiro pagamento vence o"
+
+#: wizards/newaccountwizard/rc.cpp:108
+msgid ""
+"For credit card accounts you can create a monthly schedule which will "
+"automatically remind you about the payment. Please fill in the details about "
+"this payment here."
+msgstr ""
+"Para contas de tarxeta de crédito pode criar un plano de asentos mensuais "
+"que lle recordará automaticamente o pagamento. Preencha aquí os detalles "
+"relativos a este pagamento."
+
+#: wizards/newaccountwizard/rc.cpp:109
+msgid "Yes, remind me when the payment is due"
+msgstr "Si, lémbremo cando o pagamento venza"
+
+#: wizards/newaccountwizard/rc.cpp:110
+msgid "Name of schedule"
+msgstr "Nome do plano de transaccións"
+
+#: dialogs/rc.cpp:151 dialogs/rc.cpp:218 dialogs/rc.cpp:219
+#: reports/listtable.cpp:199 views/kscheduledview.cpp:72 widgets/rc.cpp:113
+#: widgets/register.cpp:57 wizards/newaccountwizard/rc.cpp:111
+msgid "Payee"
+msgstr "Beneficiario"
+
+#: wizards/newaccountwizard/rc.cpp:112
+msgid "Estimated monthly payment"
+msgstr "Pagamento mensual estimado"
+
+#: wizards/newaccountwizard/rc.cpp:113
+msgid "Due date of next payment"
+msgstr "Data de vencemento do vindeiro pagamento"
+
+#: wizards/newaccountwizard/rc.cpp:114
+msgid ""
+"Payment should be made\n"
+"from account"
+msgstr ""
+"O pagamento debe realizarse\n"
+"desde unha conta"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:79
+msgid "KMyMoney New File Setup"
+msgstr "Configuración do novo ficheiro de KMyMoney"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:81
+msgid "Introduction"
+msgstr "Introdución"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:82
+msgid "Personal Data"
+msgstr "Dados persoais"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:83
+msgid "Select Currency"
+msgstr "Escoller unha divisa"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:84
+msgid "Select Accounts"
+msgstr "Escoller as contas"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:85
+msgid "Set preferences"
+msgstr "Escoller as preferencias"
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid ""
+"Unable to load data, because no contact has been associated with the owner "
+"of the standard addressbook."
+msgstr ""
+"Non foi posíbel cargar os dados, porque non hai contacto no libro de "
+"enderezos estándar como proprietario."
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid "Addressbook import"
+msgstr "Importar do caderno de enderezos"
+
+#: wizards/newuserwizard/rc.cpp:1
+msgid ""
+"A typical KMyMoney user maintains a checking a account with some institution "
+"and uses it to receive money or pay bills. If this is not the case, please "
+"deselect the checkbox below and continue on the next page."
+msgstr ""
+"O usuario típico de KMyMoney mantén unha conta corrente nalgunha entidade "
+"bancaria e úsaa para recibir cartos e pagar recibos. Se este non é o caso, "
+"por favor desmarque a opción en baixo e continúe á seguinte páxina."
+
+#: wizards/newuserwizard/rc.cpp:2
+msgid "I have a checking account that I want to manage with KMyMoney"
+msgstr "Teño unha conta corrente e quer xestionala con KMyMoney"
+
+#: wizards/newuserwizard/rc.cpp:3
+msgid "The name of the instititution that issued the account."
+msgstr "O nome da entidade que mantén a conta."
+
+#: wizards/newuserwizard/rc.cpp:4
+msgid ""
+"Each institution has a routing number. Enter it here. If uncertain, leave "
+"the field blank. You can modify it later."
+msgstr ""
+"Cada entidade ten un número de rota. Indíqueo aquí. Se non está certo, "
+"déixeo en branco. Poderá modificalo máis tarde."
+
+#: wizards/newuserwizard/rc.cpp:5
+msgid "Name of the institution"
+msgstr "Nome da entidade"
+
+#: wizards/newuserwizard/rc.cpp:6
+msgid "Routing number"
+msgstr "Número de rota"
+
+#: wizards/newuserwizard/rc.cpp:7
+msgid ""
+"In general the institution that issued the account also issued a number for "
+"it. Enter it here. If uncertain, you can modify this entry later."
+msgstr ""
+"Polo xeral, a entidade onde abriu a conta asinoulle un número á conta. "
+"Indíqueo aquí. Se non está certo, poderá modificalo máis tarde."
+
+#: wizards/newuserwizard/rc.cpp:8
+msgid ""
+"Enter a descriptive name that will be used by KMyMoney to identify your "
+"checking account."
+msgstr ""
+"Escreba un nome descritivo que será usado por KMyMoney para identificar a "
+"súa conta corrente."
+
+#: wizards/newuserwizard/rc.cpp:10
+msgid ""
+"Enter the date from when on you plan to keep track of the transactions in "
+"that account. This is usually the date of the last statement. If uncertain, "
+"leave as is."
+msgstr ""
+"Indique a data desde a que prevé rexistrar as transaccións nesa conta. Polo "
+"xeral esta é a data do último extracto. Se non está certo, déixeo como está."
+
+#: wizards/newuserwizard/rc.cpp:11
+msgid "Number of the account"
+msgstr "Número da conta"
+
+#: wizards/newuserwizard/rc.cpp:12
+msgid "Name of the account"
+msgstr "Nome da conta"
+
+#: wizards/newuserwizard/rc.cpp:15
+msgid ""
+"Enter the opening balance of the account. This is usually the ending balance "
+"of the last statement. If uncertain, leave as is."
+msgstr ""
+"Indique o saldo de abertura da conta. Polo xeral este é o saldo final do "
+"último extracto. Se non está certo, déixeo como está."
+
+#: wizards/newuserwizard/rc.cpp:16
+msgid ""
+"The fields below allow you to enter some information about your checking "
+"account. Once this wizard finishes, the account will be created for you "
+"within KMyMoney."
+msgstr ""
+"Os campos en baixo permítenlle introducir algunha información acerca da súa "
+"conta corrente. Cando remate este asistente, a conta será criada en KMyMoney."
+
+#: wizards/newuserwizard/rc.cpp:17
+msgid ""
+"KMyMoney supports multiple currencies. Your reports will be based on a "
+"default curreny which you can select here. The default for new accounts is "
+"also the currency you select here."
+msgstr ""
+"KMyMoney soporta múltiplas divisas. Os seus informes estarán baseados nunha "
+"divisa predeterminada que pode escoller aquí. A predeterminada para novas "
+"contas tamén é a que escolla aquí."
+
+#: wizards/newuserwizard/rc.cpp:18
+msgid ""
+"KMyMoney will store your financial data in a file on the disk. A standard "
+"filename within your KDE user environment will be the default. This is just "
+"provided for convenience and you can choose any other location here."
+msgstr ""
+"KMyMoney gardará os seus dados financeiros nun ficheiro no disco. O "
+"predeterminado é un ficheiro cunha rota estándar no ambiente KDE. Isto só é "
+"por comodidade e pode escoller calquera outra lugar aquí."
+
+#: wizards/newuserwizard/rc.cpp:19
+msgid ""
+"Either the currently selected file exists or the selected directory does not "
+"exist. Please make sure, that\n"
+"\n"
+"<ul>\n"
+"<li>the selected directory exists and</li>\n"
+"<li>the filename is not currently used in this directory.</li>\n"
+"</ul>"
+msgstr ""
+"Ou xa existe o ficheiro escollido ou non existe o cartafol escollido. "
+"Verifique que\n"
+"\n"
+"<ul>\n"
+"<li>o cartafol escollido existe e que</li>\n"
+"<li>o nome do ficheiro non está a ser empregado neste cartafol.</li>\n"
+"</ul>"
+
+#: wizards/newuserwizard/rc.cpp:20
+msgid ""
+"This finishes the setup of your KMyMoney environment. You can now press the "
+"Finish button and start using KMyMoney to record your financial transactions."
+msgstr ""
+"Isto remata a configuración de KMyMoney. Agora pode premer no botón Rematar "
+"e comezar a usar KMyMoney para rexistrar as súas transaccións financeiras."
+
+#: wizards/newuserwizard/rc.cpp:21
+msgid ""
+"Please enter some information about yourself.<br><br>\n"
+"\n"
+"This information will be seen and used only by you. The information is used "
+"to personalize KMyMoney, to encrypt your file, etc."
+msgstr ""
+"Dea información acerca de si.<br><br>\n"
+"\n"
+"Esta información só será vista e usada por si. Serve para personalizar "
+"KMyMoney, cifrar o seu ficheiro, etc."
+
+#: wizards/newuserwizard/rc.cpp:28
+msgid "Zip code"
+msgstr "Código postal"
+
+#: wizards/newuserwizard/rc.cpp:30
+msgid "Welcome to KMyMoney!"
+msgstr "Benvido a KMyMoney!"
+
+#: wizards/newuserwizard/rc.cpp:31
+msgid ""
+"You have started KMyMoney for the first time on this computer. Before this "
+"program can help you to manage your finances, it needs to collect some data "
+"from you.<p>\n"
+"\n"
+"On the next few pages you will be guided through the steps necessary to "
+"setup the program. This will happen only once."
+msgstr ""
+"Iniciou KMyMoney por vez primeira neste ordenador. Antes de que este "
+"programa poda serlle de utilidade para xestionar as súas finanzas, precisa "
+"recoller algúns dados.<p>\n"
+"\n"
+"Nas seguintes páxinas será guiado polos pasos precisos para configurar o "
+"programa. Isto só acontece unha vez."
+
+#: wizards/newuserwizard/rc.cpp:32
+msgid ""
+"<p>KMyMoney can encrypt your datafile using GPG Encryption. GPG encryption "
+"is one of the most secure methods in the world for protecting data. All of "
+"your account numbers and other important financial information will be very "
+"secure.</p>"
+msgstr ""
+"<p>KMyMoney pode cifrar o seu ficheiro de dados mediante cifraxe GPG. A "
+"cifraxe GPG é un dos métodos máis seguros do mundo para protexer dados. "
+"Todos os seus números de conta e outra información financeira importante "
+"estará moi segura.</p>"
+
+#: wizards/newuserwizard/rc.cpp:33
+msgid ""
+"If you would like to review or change any preference settings for KMyMoney "
+"at this time, you can do so here. If not just click <b>Next</b>."
+msgstr ""
+"Se desexa revisar ou mudar calquera parámetro de KMyMoney agora, pode facelo "
+"aquí. Se non, prema en <b>Seguinte</b>."
+
+#: wizards/newuserwizard/rc.cpp:34
+msgid "Configure preferences now"
+msgstr "Configurar agora as preferencias"
+
+#: wizards/newuserwizard/rc.cpp:35
+msgid ""
+"You can change the configuration options at any time using the configuration "
+"dialog. Just select the <b>Configure KMyMoney...</b> option in the "
+"<b>Settings</b> menu."
+msgstr ""
+"Pode mudar en calquera momento a configuración mediante o diálogo de "
+"configuración. Simplemente escolla <b>Configurar KMyMoney...</b> no menú "
+"<b>Configuración</b>."
+
+#: dialogs/rc.cpp:83 dialogs/rc.cpp:411 dialogs/rc.cpp:435
+#: kmymoneyutils.cpp:92 kmymoneyutils.cpp:105 mymoney/mymoneyaccount.cpp:753
+#: mymoney/mymoneysecurity.cpp:160
+msgid "Stock"
+msgstr "Acción"
+
+#: dialogs/rc.cpp:84 dialogs/rc.cpp:412 dialogs/rc.cpp:436
+#: kmymoneyutils.cpp:107 mymoney/mymoneysecurity.cpp:163
+msgid "Mutual Fund"
+msgstr "Fondo de Investimento"
+
+#: dialogs/rc.cpp:85 dialogs/rc.cpp:413 dialogs/rc.cpp:437
+#: kmymoneyutils.cpp:109 mymoney/mymoneysecurity.cpp:166
+msgid "Bond"
+msgstr "Bono"
+
+#: mymoney/mymoneysecurity.cpp:172 reports/querytable.cpp:1150
+#: widgets/kmymoneyaccountselector.cpp:76
+msgid "None"
+msgstr "Nada"
+
+#: dialogs/rc.cpp:46 kmymoneyutils.cpp:402 mymoney/mymoneyaccount.cpp:759
+#: mymoney/mymoneyscheduled.cpp:1002 mymoney/mymoneysecurity.cpp:175
+#: views/kforecastview.cpp:174 widgets/register.cpp:54
+#: widgets/register.cpp:485 widgets/transaction.cpp:708
+#: widgets/transaction.cpp:1459
+msgid "Unknown"
+msgstr "Descoñecida"
+
+#: mymoney/storage/mymoneystoragesql.cpp:191
+msgid ""
+"Database apparently in use\n"
+"Opened by %1 on %2 at %3.\n"
+"Open anyway?"
+msgstr ""
+"Semella que está a usar unha base de dados\n"
+"Aberta por %1 en %2 en %3.\n"
+"Desexa abrir aínda así?"
+
+#: mymoney/storage/mymoneystoragesql.cpp:229
+msgid "Cannot currently create database for driver %1; please create manually"
+msgstr ""
+"Na actualidade non é posíbel criar bases de dados co controlador %1, críeas "
+"á mao"
+
+#: mymoney/storage/mymoneystoragesql.cpp:244
+msgid "Error in create database %1; do you have create permissions?"
+msgstr "Aconteceu un erro ao crear a base de datos %1, criou permisos?"
+
+#: converter/mymoneygncreader.cpp:1329
+#: mymoney/storage/mymoneystoragexml.cpp:166
+msgid "Loading transactions..."
+msgstr "A cargar os asentos..."
+
+#: converter/mymoneygncreader.cpp:1190
+#: mymoney/storage/mymoneystoragexml.cpp:173
+msgid "Loading accounts..."
+msgstr "A cargar as contas..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:180
+msgid "Loading securities..."
+msgstr "A cargar os valores bursátiles..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:187
+msgid "Loading reports..."
+msgstr "A cargar os informes..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:268
+msgid "Unknown XML tag %1 found in line %2"
+msgstr "Atopouse a etiqueta XML descoñecida %1 na liña %2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:274
+msgid "Exception while creating a %1 element: %2"
+msgstr "Aconteceu unha excepción ao criar un elemento %1: %2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:513
+msgid "Loading file information..."
+msgstr "A cargar información do ficheiro..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:591
+msgid "Loading user information..."
+msgstr "A cargar a información do usuario..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:655
+msgid "Saving accounts..."
+msgstr "Gardando as contas..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:678
+msgid "Saving transactions..."
+msgstr "Gardando os asentos..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:747
+msgid "Saving reports..."
+msgstr "A gardar os informes..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:762
+msgid "Saving budgets..."
+msgstr "A gardar os orzamentos..."
+
+#: mymoney/storage/mymoneystoragedump.cpp:414
+msgid "not reconciled"
+msgstr "non conciliada"
+
+#: mymoney/storage/mymoneystoragedump.cpp:417
+msgid "cleared"
+msgstr "librada"
+
+#: mymoney/storage/mymoneystoragedump.cpp:420
+msgid "reconciled"
+msgstr "conciliada"
+
+#: mymoney/storage/mymoneystoragedump.cpp:423
+msgid "frozen"
+msgstr "conxelada"
+
+#: mymoney/storage/mymoneystoragedump.cpp:426
+msgid "unknown"
+msgstr "descoñecido"
+
+#: mymoney/mymoneyaccount.cpp:101
+msgid ""
+"Account %1 contains an opening balance. Please use a KMyMoney version >= 0.8 "
+"and < 0.9 to correct the problem."
+msgstr ""
+"A conta %1 contén un saldo de abertura. Empregue unha versión de KMyMoney >= "
+"0.8 e < 0.9 para corrixir o problema."
+
+#: mymoney/mymoneyaccount.cpp:597
+msgid ""
+"_: Brokerage (suffix for account names)\n"
+"Brokerage"
+msgstr "Corretaxe"
+
+#: kmymoneyutils.cpp:74 mymoney/mymoneyaccount.cpp:726
+msgid "Certificate of Deposit"
+msgstr "Certificado de depósito"
+
+#: kmymoneyutils.cpp:78 mymoney/mymoneyaccount.cpp:732
+msgid "Money Market"
+msgstr "Mercado monetario"
+
+#: converter/mymoneytemplate.cpp:186 converter/mymoneytemplate.cpp:187
+#: dialogs/knewaccountdlg.cpp:1018 kmymoneyutils.cpp:86
+#: mymoney/mymoneyaccount.cpp:744 views/kaccountsview.cpp:360
+#: views/kbudgetview.cpp:372 views/kcategoriesview.cpp:178
+#: views/khomeview.cpp:1813 views/kmymoneyview.cpp:767
+#: widgets/kmymoneyaccountselector.cpp:68
+#: widgets/kmymoneyaccountselector.cpp:179
+#: widgets/kmymoneyaccountselector.cpp:370 widgets/register.cpp:828
+msgid "Income"
+msgstr "Ingreso"
+
+#: converter/mymoneytemplate.cpp:190 converter/mymoneytemplate.cpp:191
+#: dialogs/knewaccountdlg.cpp:1020 kmymoneyutils.cpp:88
+#: mymoney/mymoneyaccount.cpp:747 views/kaccountsview.cpp:364
+#: views/kbudgetview.cpp:378 views/kcategoriesview.cpp:182
+#: views/kmymoneyview.cpp:768 widgets/kmymoneyaccountselector.cpp:72
+#: widgets/kmymoneyaccountselector.cpp:180
+#: widgets/kmymoneyaccountselector.cpp:380 widgets/register.cpp:829
+msgid "Expense"
+msgstr "Gasto"
+
+#: kmymoneyutils.cpp:90 mymoney/mymoneyaccount.cpp:750
+msgid "Investment Loan"
+msgstr "Financiamento de investimento"
+
+#: mymoney/mymoneyfile.cpp:47
+msgid "Opening Balances"
+msgstr "Saldos de abertura"
+
+#: mymoney/mymoneyfile.cpp:398
+msgid "Cannot remove transaction that references a closed account."
+msgstr "Non é posíbel eliminar asentos que fan referencia a contas pechadas."
+
+#: mymoney/mymoneyfile.cpp:1414 mymoney/mymoneyfile.cpp:1433
+#: mymoney/mymoneyfile.cpp:1447 mymoney/mymoneyfile.cpp:1469
+msgid "* Problem with account '%1'"
+msgstr "* Problema coa conta «%1»"
+
+#: mymoney/mymoneyfile.cpp:1419
+msgid " * Parent account '%1' belongs to a different group."
+msgstr " * A conta nai «%1» pertence a un grupo diferente."
+
+#: mymoney/mymoneyfile.cpp:1420 mymoney/mymoneyfile.cpp:1450
+msgid " New parent account is the top level account '%1'."
+msgstr " A nova conta nai é a conta de máximo nivel «%1»."
+
+#: mymoney/mymoneyfile.cpp:1436
+msgid " * Parent account '%1' does not contain '%2' as sub-account."
+msgstr " * A conta nai «%1» non contén «%2» como subconta."
+
+#: mymoney/mymoneyfile.cpp:1449
+msgid " * The parent with id %1 does not exist anymore."
+msgstr " * A conta con id %1 xa non existe."
+
+#: mymoney/mymoneyfile.cpp:1471
+msgid " * Child account with id %1 does not exist anymore."
+msgstr " * A conta filla con id %1 xa non existe."
+
+#: mymoney/mymoneyfile.cpp:1472
+msgid " The child account list will be reconstructed."
+msgstr " A lista de contas fillas será reconstruída."
+
+#: mymoney/mymoneyfile.cpp:1492
+msgid " * Unable to update account data in engine."
+msgstr " * Non foi posíbel actualizar os dados da conta na infraestrutura."
+
+#: mymoney/mymoneyfile.cpp:1499
+msgid "* Reconstructing the child lists for"
+msgstr "* A reconstruír as listas de fillas de"
+
+#: mymoney/mymoneyfile.cpp:1536
+msgid " * Unable to update account data for account %1 in engine"
+msgstr " * Non foi posíbel anovar os dados da conta %1 na infraestrutura"
+
+#: mymoney/mymoneyfile.cpp:1554
+msgid " * Payee %1 recreated with fixed id"
+msgstr " * Criouse de novo o beneficiario %1 cunha id corrixida"
+
+#: mymoney/mymoneyfile.cpp:1583
+msgid " * Payee id updated in split of transaction '%1'."
+msgstr " * Actualizouse a id do beneficiario nunha partida do asento «%1»."
+
+#: mymoney/mymoneyfile.cpp:1596
+msgid " * shares set to value in split of transaction '%1'."
+msgstr ""
+" * axustáronse as participacións ao valor da partida na operación «%1»."
+
+#: mymoney/mymoneyfile.cpp:1599
+msgid " * value set to shares in split of transaction '%1'."
+msgstr ""
+" * Axustouse o valor á cantidade de participación na partida do asento «%1»."
+
+#: mymoney/mymoneyfile.cpp:1605
+msgid ""
+" * Split %2 in transaction '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+" * A partida %2 no asento «%1» contén unha referencia á conta non válida %3. "
+"Por favor, corríxao á mao."
+
+#: mymoney/mymoneyfile.cpp:1616
+msgid " * action marked as interest in split of transaction '%1'."
+msgstr " * Marcouse unha acción como xuro nunha partida do asento «%1»."
+
+#: mymoney/mymoneyfile.cpp:1643
+msgid " * Payee id updated in split of schedule '%1'."
+msgstr " * Actualizouse a id do beneficiario nunha partida do plano «%1»."
+
+#: mymoney/mymoneyfile.cpp:1649
+msgid ""
+" * Split in scheduled transaction '%1' contained value != 0 and shares == 0."
+msgstr ""
+" * Unha partida no asento planificado «%1» contiña un valor != 0 e "
+"participacións ==0."
+
+#: mymoney/mymoneyfile.cpp:1650
+msgid " Shares set to value."
+msgstr " Participacións axustadas ao valor."
+
+#: mymoney/mymoneyfile.cpp:1658
+msgid " * Removed bankid from split in scheduled transaction '%1'."
+msgstr " * Eliminouse a id do banco da partida do asento planificado «%1»."
+
+#: mymoney/mymoneyfile.cpp:1671
+msgid " * shares set to value in split in schedule '%1'."
+msgstr ""
+" * axustáronse as participacións ao valor da partida na planificación «%1»."
+
+#: mymoney/mymoneyfile.cpp:1674
+msgid " * value set to shares in split in schedule '%1'."
+msgstr ""
+" * axustouse o valor á cantidade de participacións na partida da "
+"planificación «%1»."
+
+#: mymoney/mymoneyfile.cpp:1680
+msgid ""
+" * Split %2 in schedule '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+" * A partida %1 na planificación «%1» contén unha referencia á conta non "
+"válida %3. Por favor, corríxao á mao."
+
+#: mymoney/mymoneyfile.cpp:1706
+msgid " * Payee id updated in report '%1'."
+msgstr " * Actualizouse a id do beneficiario no informe «%1»."
+
+#: mymoney/mymoneyfile.cpp:1723
+msgid " * Payee '%1' removed."
+msgstr " * Eliminouse o beneficiario «%1»."
+
+#: mymoney/mymoneyfile.cpp:1730
+msgid "Finish! Data is consistent."
+msgstr "Rematado! Os dados son consistentes."
+
+#: mymoney/mymoneyfile.cpp:1732
+msgid "Finish! %1 problem(s) corrected. %2 problem(s) still present."
+msgstr "Rematado! Corrixíronse %1 problemas. Aínda hai %2 problemas presentes."
+
+#: mymoney/mymoneyscheduled.cpp:873 mymoney/mymoneyscheduled.cpp:918
+#: mymoney/mymoneyscheduled.cpp:969 mymoney/mymoneyscheduled.cpp:1265
+#: mymoney/mymoneyscheduletest.cpp:1336
+msgid "Once"
+msgstr "Unha vez"
+
+#: mymoney/mymoneyscheduled.cpp:875 mymoney/mymoneyscheduled.cpp:924
+#: mymoney/mymoneyscheduled.cpp:1267 mymoney/mymoneyscheduletest.cpp:1337
+#: widgets/rc.cpp:72
+msgid "Daily"
+msgstr "Diariamente"
+
+#: mymoney/mymoneyscheduled.cpp:877 mymoney/mymoneyscheduled.cpp:931
+#: mymoney/mymoneyscheduled.cpp:1269 mymoney/mymoneyscheduletest.cpp:1338
+#: widgets/rc.cpp:73
+msgid "Weekly"
+msgstr "Semanalmente"
+
+#: mymoney/mymoneyscheduled.cpp:881 mymoney/mymoneyscheduled.cpp:932
+#: mymoney/mymoneyscheduled.cpp:1273 mymoney/mymoneyscheduletest.cpp:1339
+msgid "Every other week"
+msgstr "De cada dúas semanas"
+
+#: mymoney/mymoneyscheduled.cpp:879 mymoney/mymoneyscheduled.cpp:1271
+#: mymoney/mymoneyscheduletest.cpp:1340
+msgid "Fortnightly"
+msgstr "Quincenalmente"
+
+#: mymoney/mymoneyscheduled.cpp:883 mymoney/mymoneyscheduled.cpp:941
+#: mymoney/mymoneyscheduled.cpp:1275 mymoney/mymoneyscheduletest.cpp:1341
+msgid "Every half month"
+msgstr "De cada medio mes"
+
+#: mymoney/mymoneyscheduled.cpp:887 mymoney/mymoneyscheduled.cpp:934
+#: mymoney/mymoneyscheduled.cpp:1279 mymoney/mymoneyscheduletest.cpp:1342
+msgid "Every four weeks"
+msgstr "Cada catro semanas"
+
+#: mymoney/mymoneyscheduled.cpp:893 mymoney/mymoneyscheduled.cpp:935
+#: mymoney/mymoneyscheduled.cpp:1285 mymoney/mymoneyscheduletest.cpp:1344
+msgid "Every eight weeks"
+msgstr "De cada oito semanas"
+
+#: mymoney/mymoneyscheduled.cpp:895 mymoney/mymoneyscheduled.cpp:948
+#: mymoney/mymoneyscheduled.cpp:1287 mymoney/mymoneyscheduletest.cpp:1345
+msgid "Every two months"
+msgstr "Bimestral"
+
+#: mymoney/mymoneyscheduled.cpp:897 mymoney/mymoneyscheduled.cpp:949
+#: mymoney/mymoneyscheduled.cpp:1289 mymoney/mymoneyscheduletest.cpp:1346
+msgid "Every three months"
+msgstr "Trimestral"
+
+#: mymoney/mymoneyscheduled.cpp:899 mymoney/mymoneyscheduled.cpp:1291
+#: mymoney/mymoneyscheduletest.cpp:1347 widgets/rc.cpp:76
+msgid "Quarterly"
+msgstr "Trimestralmente"
+
+#: mymoney/mymoneyscheduled.cpp:901 mymoney/mymoneyscheduled.cpp:950
+#: mymoney/mymoneyscheduled.cpp:1293 mymoney/mymoneyscheduletest.cpp:1348
+msgid "Every four months"
+msgstr "Cuadrimestral"
+
+#: mymoney/mymoneyscheduled.cpp:903 mymoney/mymoneyscheduled.cpp:951
+#: mymoney/mymoneyscheduled.cpp:1295 mymoney/mymoneyscheduletest.cpp:1349
+msgid "Twice yearly"
+msgstr "Bianualmente"
+
+#: mymoney/mymoneyscheduled.cpp:905 mymoney/mymoneyscheduled.cpp:957
+#: mymoney/mymoneyscheduled.cpp:1297 mymoney/mymoneyscheduletest.cpp:1350
+#: widgets/rc.cpp:20 widgets/rc.cpp:77
+msgid "Yearly"
+msgstr "Anual"
+
+#: mymoney/mymoneyscheduled.cpp:907 mymoney/mymoneyscheduled.cpp:958
+#: mymoney/mymoneyscheduled.cpp:1299 mymoney/mymoneyscheduletest.cpp:1351
+msgid "Every other year"
+msgstr "Bienal"
+
+#: mymoney/mymoneyscheduled.cpp:870 mymoney/mymoneyscheduled.cpp:913
+#: mymoney/mymoneyscheduled.cpp:966
+msgid "Any"
+msgstr "Calquera"
+
+#: mymoney/mymoneyscheduled.cpp:885 mymoney/mymoneyscheduled.cpp:933
+#: mymoney/mymoneyscheduled.cpp:1277
+msgid "Every three weeks"
+msgstr "De cada tres semanas"
+
+#: mymoney/mymoneyscheduled.cpp:889 mymoney/mymoneyscheduled.cpp:925
+#: mymoney/mymoneyscheduled.cpp:1281
+msgid "Every thirty days"
+msgstr "Cada trinta días"
+
+#: mymoney/mymoneyscheduled.cpp:971
+msgid "Day"
+msgstr "Día"
+
+#: mymoney/mymoneyscheduled.cpp:973 reports/listtable.cpp:206
+#: widgets/kmymoneycalendar.cpp:123 widgets/rc.cpp:97
+msgid "Week"
+msgstr "Semana"
+
+#: mymoney/mymoneyscheduled.cpp:975
+msgid "Half-month"
+msgstr "Medio mes"
+
+#: mymoney/mymoneyscheduled.cpp:977 reports/listtable.cpp:205
+#: widgets/kmymoneycalendar.cpp:124 widgets/rc.cpp:96
+msgid "Month"
+msgstr "Mes"
+
+#: dialogs/rc.cpp:400 mymoney/mymoneyscheduled.cpp:979 views/rc.cpp:14
+msgid "Year"
+msgstr "Ano"
+
+#: mymoney/mymoneyscheduled.cpp:989
+msgid "Bill"
+msgstr "Recibo"
+
+#: dialogs/rc.cpp:107 dialogs/rc.cpp:162 dialogs/rc.cpp:249 dialogs/rc.cpp:754
+#: mymoney/mymoneyscheduled.cpp:992 widgets/kmymoneycombo.cpp:420
+#: widgets/register.cpp:571
+msgid "Deposit"
+msgstr "Imposición"
+
+#: mymoney/mymoneyscheduled.cpp:995 reports/querytable.cpp:594
+#: reports/querytable.cpp:696 widgets/kmymoneycombo.cpp:419
+msgid "Transfer"
+msgstr "Transferencia"
+
+#: mymoney/mymoneyscheduled.cpp:1035
+msgid "Any (Error)"
+msgstr "Calquera (Erro)"
+
+#: dialogs/rc.cpp:114 mymoney/mymoneyscheduled.cpp:1047
+msgid "Change the date to the previous Friday"
+msgstr "Mudar a data ao Venres anterior"
+
+#: dialogs/rc.cpp:115 mymoney/mymoneyscheduled.cpp:1050
+msgid "Change the date to the next Monday"
+msgstr "Mudar a data ao Luns seguinte"
+
+#: mymoney/mymoneyscheduled.cpp:1053
+msgid "Do Nothing"
+msgstr "Non facer nada"
+
+#: kmymoney2.cpp:312
+msgid "Open database..."
+msgstr "Abrir unha base de dados..."
+
+#: kmymoney2.cpp:313
+msgid "Save as database..."
+msgstr "Gardar como base de dados..."
+
+#: kmymoney2.cpp:314
+msgid "Backup..."
+msgstr "Copia de respaldo..."
+
+#: kmymoney2.cpp:315 kmymoney2.cpp:321
+msgid "QIF..."
+msgstr "QIF..."
+
+#: kmymoney2.cpp:316
+msgid "Gnucash..."
+msgstr "Gnucash..."
+
+#: kmymoney2.cpp:317
+msgid "Statement file..."
+msgstr "Ficheiro de extracto bancario..."
+
+#: kmymoney2.cpp:319 kmymoney2.cpp:320
+msgid "Account Template..."
+msgstr "Modelos de contas..."
+
+#: kmymoney2.cpp:322
+msgid "Personal Data..."
+msgstr "Dados persoais..."
+
+#: kmymoney2.cpp:325
+msgid "Dump Memory"
+msgstr "Envorcado de memoria"
+
+#: kmymoney2.cpp:327
+msgid "File-Information..."
+msgstr "Información do ficheiro..."
+
+#: kmymoney2.cpp:332
+msgid "Find transaction..."
+msgstr "Procurar asentos..."
+
+#: kmymoney2.cpp:337
+msgid "Show Transaction Detail"
+msgstr "Mostrar os detalles do asento"
+
+#: kmymoney2.cpp:338 rc.cpp:60
+msgid "Hide reconciled transactions"
+msgstr "Agochar os asentos conciliados"
+
+#: kmymoney2.cpp:339 rc.cpp:57
+msgid "Hide unused categories"
+msgstr "Acochar as categorías non usadas"
+
+#: kmymoney2.cpp:340
+msgid "Show all accounts"
+msgstr "Mostrar todas as contas"
+
+#: kmymoney2.cpp:345
+msgid "New institution..."
+msgstr "Nova entidade..."
+
+#: kmymoney2.cpp:346
+msgid "Edit institution..."
+msgstr "Editar a entidade..."
+
+#: kmymoney2.cpp:347
+msgid "Delete institution..."
+msgstr "Borrar a entidade..."
+
+#: kmymoney2.cpp:352
+msgid "New account..."
+msgstr "Nova conta..."
+
+#: kmymoney2.cpp:354
+msgid "Open ledger"
+msgstr "Abrir o libro maior"
+
+#: kmymoney2.cpp:355
+msgid "Reconcile..."
+msgstr "Conciliar..."
+
+#: kmymoney2.cpp:356
+msgid ""
+"_: Finish reconciliation\n"
+"Finish"
+msgstr "Rematar"
+
+#: kmymoney2.cpp:357
+msgid ""
+"_: Postpone reconciliation\n"
+"Postpone"
+msgstr "Adiar"
+
+#: kmymoney2.cpp:358
+msgid "Edit account..."
+msgstr "Editar a conta..."
+
+#: kmymoney2.cpp:359
+msgid "Delete account..."
+msgstr "Borrar a conta..."
+
+#: kmymoney2.cpp:360
+msgid "Close account"
+msgstr "Pechar a conta"
+
+#: kmymoney2.cpp:361
+msgid "Reopen account"
+msgstr "Abrir de novo a conta"
+
+#: kmymoney2.cpp:362
+msgid "Transaction report"
+msgstr "Importe do asento"
+
+#: kmymoney2.cpp:364
+msgid "Show balance chart..."
+msgstr "Mostrar o diagrama de saldo..."
+
+#: kmymoney2.cpp:366
+msgid "Map to online account"
+msgstr "Asociar a unha conta en liña"
+
+#: kmymoney2.cpp:367
+msgid "Unmap account"
+msgstr "Anular a asociación da conta"
+
+#: dialogs/settings/rc.cpp:126 kmymoney2.cpp:368 views/kpayeesview.cpp:363
+#: widgets/rc.cpp:50
+msgid "Update"
+msgstr "Actualizar"
+
+#: kmymoney2.cpp:372
+msgid "Update account..."
+msgstr "Actualizar a conta..."
+
+#: kmymoney2.cpp:373
+msgid "Update all accounts..."
+msgstr "Actualizar todas as contas..."
+
+#: kmymoney2.cpp:378
+msgid "New category..."
+msgstr "Nova categoría..."
+
+#: kmymoney2.cpp:379
+msgid "Edit category..."
+msgstr "Editar a categoría..."
+
+#: kmymoney2.cpp:380
+msgid "Delete category..."
+msgstr "Borrar a categoría..."
+
+#: kmymoney2.cpp:386
+msgid "QIF Profile Editor..."
+msgstr "Editor de perfís QIF..."
+
+#: kmymoney2.cpp:387
+msgid "Securities..."
+msgstr "Valores bursátiles..."
+
+#: kmymoney2.cpp:388
+msgid "Currencies..."
+msgstr "Divisas..."
+
+#: kmymoney2.cpp:389
+msgid "Prices..."
+msgstr "Prezos..."
+
+#: kmymoney2.cpp:390
+msgid "Update Stock and Currency Prices..."
+msgstr "Actualizar os prezos das accións e divisas..."
+
+#: kmymoney2.cpp:391
+msgid "Consistency Check"
+msgstr "Comprobación de consistencia"
+
+#: kmymoney2.cpp:392
+msgid "Performance-Test"
+msgstr "Probas de rendemento"
+
+#: kmymoney2.cpp:393
+msgid "KCalc..."
+msgstr "KCalc..."
+
+#: kmymoney2.cpp:399
+msgid "Enable all messages"
+msgstr "Permitir todas as mensaxes"
+
+#: kmymoney2.cpp:400
+msgid "KDE language settings..."
+msgstr "Configuración de idioma de KDE..."
+
+#: kmymoney2.cpp:405
+msgid "&Show tip of the day"
+msgstr "Mostrar o consello do &día"
+
+#: kmymoney2.cpp:410
+msgid ""
+"_: New transaction button\n"
+"New"
+msgstr "Novo"
+
+#: kmymoney2.cpp:415
+msgid ""
+"_: Edit transaction button\n"
+"Edit"
+msgstr "Editar"
+
+#: kmymoney2.cpp:417
+msgid ""
+"_: Enter transaction\n"
+"Enter"
+msgstr "Asentar"
+
+#: kmymoney2.cpp:420
+msgid ""
+"_: Edit split button\n"
+"Edit splits"
+msgstr "Editar as partidas"
+
+#: kmymoney2.cpp:421
+msgid ""
+"_: Cancel transaction edit\n"
+"Cancel"
+msgstr "Cancelar"
+
+#: kmymoney2.cpp:422
+msgid ""
+"_: Delete transaction\n"
+"Delete"
+msgstr "Borrar"
+
+#: kmymoney2.cpp:423
+msgid ""
+"_: Duplicate transaction\n"
+"Duplicate"
+msgstr "Duplicar"
+
+#: kmymoney2.cpp:425 kmymoney2.cpp:4826 kmymoney2.cpp:5107
+msgid ""
+"_: Button text for match transaction\n"
+"Match"
+msgstr "Emparellar"
+
+#: kmymoney2.cpp:426
+msgid ""
+"_: Accept 'imported' and 'matched' transaction\n"
+"Accept"
+msgstr "Aceitar"
+
+#: kmymoney2.cpp:428
+msgid ""
+"_: Toggle reconciliation flag\n"
+"Toggle"
+msgstr "Conmutar"
+
+#: kmymoney2.cpp:429
+msgid ""
+"_: Mark transaction cleared\n"
+"Cleared"
+msgstr "Librado"
+
+#: kmymoney2.cpp:430
+msgid ""
+"_: Mark transaction reconciled\n"
+"Reconciled"
+msgstr "Conciliado"
+
+#: kmymoney2.cpp:431
+msgid ""
+"_: Mark transaction not reconciled\n"
+"Not reconciled"
+msgstr "Non conciliado"
+
+#: kmymoney2.cpp:432
+msgid ""
+"_: Select all transactions\n"
+"Select all"
+msgstr "Escoller todos"
+
+#: kmymoney2.cpp:434 kmymoney2.cpp:5497
+msgid "Goto account"
+msgstr "Ir á conta"
+
+#: kmymoney2.cpp:435 kmymoney2.cpp:5495
+msgid "Goto payee"
+msgstr "Ir ao beneficiario"
+
+#: kmymoney2.cpp:436
+msgid "Create scheduled transaction..."
+msgstr "Crear a transacción planificada..."
+
+#: kmymoney2.cpp:437
+msgid "Assign next number"
+msgstr "Asinar o seguinte número"
+
+#: kmymoney2.cpp:438
+msgid ""
+"_: Combine transactions\n"
+"Combine"
+msgstr "Combinar"
+
+#: kmymoney2.cpp:440
+msgid "New investment"
+msgstr "Novo investimento"
+
+#: kmymoney2.cpp:441
+msgid "Edit investment..."
+msgstr "Editar o investimento..."
+
+#: kmymoney2.cpp:442
+msgid "Delete investment..."
+msgstr "Borrar o investimento..."
+
+#: kmymoney2.cpp:443
+msgid "Online price update..."
+msgstr "Actualizar o prezo Online ..."
+
+#: kmymoney2.cpp:444
+msgid "Manual price update..."
+msgstr "Actualizar un prezo á mao ..."
+
+#: kmymoney2.cpp:446
+msgid "New scheduled transaction..."
+msgstr "Nova transacción planificada..."
+
+#: kmymoney2.cpp:447
+msgid "Edit scheduled transaction..."
+msgstr "Editar a transacción planificada..."
+
+#: kmymoney2.cpp:448
+msgid "Delete scheduled transaction..."
+msgstr "Borrar a transacción planificada..."
+
+#: kmymoney2.cpp:449
+msgid "Duplicate scheduled transaction"
+msgstr "Duplicar a transacción planificada"
+
+#: kmymoney2.cpp:450
+msgid "Enter next transaction..."
+msgstr "Asentar a seguinte transacción..."
+
+#: kmymoney2.cpp:451
+msgid "Skip next transaction..."
+msgstr "Omitir a seguinte transacción..."
+
+#: kmymoney2.cpp:453
+msgid "New payee"
+msgstr "Novo beneficiario"
+
+#: kmymoney2.cpp:454
+msgid "Rename payee"
+msgstr "Mudar o nome do beneficiario"
+
+#: kmymoney2.cpp:455
+msgid "Delete payee"
+msgstr "Borrar o beneficiario"
+
+#: kmymoney2.cpp:457
+msgid "New budget"
+msgstr "Novo orzamento"
+
+#: kmymoney2.cpp:458
+msgid "Rename budget"
+msgstr "Mudar o nome do orzamento..."
+
+#: kmymoney2.cpp:459
+msgid "Delete budget"
+msgstr "Borrar o orzamento"
+
+#: kmymoney2.cpp:460
+msgid "Copy budget"
+msgstr "Copiar o orzamento"
+
+#: kmymoney2.cpp:461
+msgid "Change budget year"
+msgstr "Mudar o ano do orzamento"
+
+#: kmymoney2.cpp:462
+msgid ""
+"_: Budget based on forecast\n"
+"Forecast"
+msgstr "Prognosticado"
+
+#: kmymoney2.cpp:467 kmymoney2.cpp:3990 kmymoney2.cpp:3993 kmymoney2.cpp:3999
+msgid "New currency"
+msgstr "Nova divisa"
+
+#: kmymoney2.cpp:468 kmymoney2.cpp:4021 kmymoney2.cpp:4026
+msgid "Rename currency"
+msgstr "Mudar o nome da divisa"
+
+#: kmymoney2.cpp:469 kmymoney2.cpp:4039
+msgid "Delete currency"
+msgstr "Borrar a divisa"
+
+#: dialogs/rc.cpp:69 kmymoney2.cpp:470
+msgid "Select as base currency"
+msgstr "Escoller como divisa básica"
+
+#: kmymoney2.cpp:481
+msgid "View back"
+msgstr "Vista atrás"
+
+#: kmymoney2.cpp:482
+msgid "View forward"
+msgstr "Vista adiante"
+
+#: kmymoney2.cpp:611
+msgid "KMyMoney file needs saving. Save ?"
+msgstr "O ficheiro de KMyMoney precisa ser gardado. Gardar ?"
+
+#: kmymoney2.cpp:757
+msgid "Creating new document..."
+msgstr "A criar un documento novo..."
+
+#: kmymoney2.cpp:869 kmymoney2.cpp:884
+msgid "Open a file."
+msgstr "Abrir un ficheiro."
+
+#: kmymoney2.cpp:872
+msgid ""
+"%1|KMyMoney files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Ficheiros de KMyMoney\n"
+"%2|Todos os ficheiros(*.*)"
+
+#: kmymoney2.cpp:873
+msgid "Open File..."
+msgstr "Abrir un ficheiro..."
+
+#: kmymoney2.cpp:925 kstartuplogo.cpp:100
+msgid "Loading file..."
+msgstr "A cargar o ficheiro..."
+
+#: kmymoney2.cpp:986
+msgid ""
+"<b>%1</b> is either an invalid filename or the file does not exist. You can "
+"open another file or create a new one."
+msgstr ""
+"<b>%1</b> é ou un nome de ficheiro incorrecto ou non existe. Pode abrir "
+"outro ficheiro ou criar un novo."
+
+#: kmymoney2.cpp:986
+msgid "File not found"
+msgstr "Ficheiro non atopado"
+
+#: kmymoney2.cpp:989
+msgid "File <b>%1</b> is already opened in another instance of KMyMoney"
+msgstr "O ficheiro <b>%1</b> xa está aberto en outra instancia de KMyMoney"
+
+#: kmymoney2.cpp:989
+msgid "Duplicate open"
+msgstr "Abrir un duplicado"
+
+#: kmymoney2.cpp:1001
+msgid "Saving file..."
+msgstr "A gardar o ficheiro..."
+
+#: kmymoney2.cpp:1035 kmymoney2.cpp:1047 kmymoney2.cpp:1071
+#, c-format
+msgid "Additional encryption key(s) to be used: %1"
+msgstr "As chaves adicionais de cifrado a empregar: %1"
+
+#: kmymoney2.cpp:1056
+msgid "Saving file with a new filename..."
+msgstr "A gardar o ficheiro con un novo nome..."
+
+#: kmymoney2.cpp:1067
+msgid "Encryption key to be used"
+msgstr "A chave de cifrado a usar"
+
+#: kmymoney2.cpp:1072
+msgid "Manage additional keys"
+msgstr "Xestionar as chaves adicionais"
+
+#: kmymoney2.cpp:1079
+msgid "No encryption"
+msgstr "Sen cifraxe"
+
+#: kmymoney2.cpp:1102
+msgid ""
+"_: KMyMoney (Filefilter)\n"
+"KMyMoney files"
+msgstr "Ficheiros de KMyMoney"
+
+#: kmymoney2.cpp:1103
+msgid ""
+"_: XML (Filefilter)\n"
+"XML files"
+msgstr "Ficheiros XML"
+
+#: kmymoney2.cpp:1104
+msgid ""
+"_: Anonymous (Filefilter)\n"
+"Anonymous files"
+msgstr "Ficheiros anónimos"
+
+#: kmymoney2.cpp:1105
+msgid "All files"
+msgstr "Todos os ficheiros"
+
+#: kmymoney2.cpp:1193
+msgid "Saving file to database..."
+msgstr "A gardar o ficheiro nunha base de dados..."
+
+#: kmymoney2.cpp:1207
+msgid "Cannot save to current database."
+msgstr "Non é posíbel gardar na base de dados actual."
+
+#: kmymoney2.cpp:1225
+msgid "Closing window..."
+msgstr "A pechar a fiestra..."
+
+#: kmymoney2.cpp:1228 kmymoney2.cpp:1249
+msgid "The file has been changed, save it ?"
+msgstr "O ficheiro foi modificado, desexa gardalo ?"
+
+#: kmymoney2.cpp:1339 kmymoney2.cpp:1352
+msgid "Ready."
+msgstr "Listo."
+
+#: kmymoney2.cpp:1397 kmymoney2.cpp:1433
+msgid "No KMyMoneyFile open"
+msgstr "Non hai ningún ficheiro de KMyMoney aberto"
+
+#: kmymoney2.cpp:1401
+msgid "Viewing personal data..."
+msgstr "A ver os dados persoais..."
+
+#: kmymoney2.cpp:1408
+msgid "Edit Personal Data"
+msgstr "Editar os dados persoais"
+
+#: kmymoney2.cpp:1424
+#, c-format
+msgid "Unable to store user information: %1"
+msgstr "Non foi posíbel gardar a información do usuario: %1"
+
+#: kmymoney2.cpp:1447
+msgid "Importing account templates."
+msgstr "A importar os modelos de contas."
+
+#: kmymoney2.cpp:1462
+msgid "Unable to import template(s): %1, thrown in %2:%3"
+msgstr "Non foi posíbel importar os modelos: %1, lanzado en %2:%3"
+
+#: kmymoney2.cpp:1471
+msgid "Exporting account templates."
+msgstr "A exportar os modelos de contas."
+
+#: kmymoney2.cpp:1474
+msgid ""
+"*.kmt|KMyMoney template files\n"
+"*.*|All files"
+msgstr ""
+"*.kmt|Modelos de KMyMoney\n"
+"*.*|Todos os ficheiros"
+
+#: kmymoney2.cpp:1475
+msgid "Save as..."
+msgstr "Gardar como..."
+
+#: kmymoney2.cpp:1517
+msgid "Importing file..."
+msgstr "A importar o ficheiro..."
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "The statements have been processed with the following results:"
+msgstr "Os extractos foron procesados co seguinte resultado:"
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:1754 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "Statement stats"
+msgstr "Estatísticas do extracto"
+
+#: kmymoney2.cpp:1602
+msgid ""
+"You cannot import GnuCash data into an existing file. Do you wish to save "
+"this file?"
+msgstr ""
+"Non pode importar dados de GnuCash nun ficheiro xa existente. Desexa gardar "
+"este ficheiro?"
+
+#: kmymoney2.cpp:1615
+msgid "Importing a Gnucash file."
+msgstr "A importar un ficheiro Gnucash."
+
+#: kmymoney2.cpp:1618
+msgid ""
+"%1|Gnucash files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Ficheiros Gnucash\n"
+"%2|Todos os ficheiros (*.*)"
+
+#: kmymoney2.cpp:1619
+msgid "Import Gnucash file..."
+msgstr "Importar un ficheiro de Gnucash..."
+
+#: kmymoney2.cpp:1658
+msgid "Importing an XML Statement."
+msgstr "A importar un extracto XML."
+
+#: kmymoney2.cpp:1661
+msgid ""
+"%1|XML files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Ficheiros XML \n"
+"%2|Todos os ficheiros (*.*)"
+
+#: kmymoney2.cpp:1662
+msgid "Import XML Statement..."
+msgstr "Importar un extracto XML ..."
+
+#: kmymoney2.cpp:1718
+msgid "Error importing %1: This file is not a valid KMM statement file."
+msgstr ""
+"Aconteceu un erro importando %1: Este non é un ficheiro válido de extractos "
+"KMM."
+
+#: kmymoney2.cpp:1718
+msgid "Invalid Statement"
+msgstr "Extracto non válido"
+
+#: kmymoney2.cpp:1754
+msgid "The statement has been processed with the following results:"
+msgstr "Os extractos foron procesados co seguinte resultado:"
+
+#: kmymoney2.cpp:1763
+msgid "Exporting file..."
+msgstr "A exportar un ficheiro..."
+
+#: kmymoney2.cpp:1786
+msgid "The file <b>%1</b> already exists. Do you really want to override it?"
+msgstr "O ficheiro <b>%1</b> xa existe. Desexa sobrescribilo?"
+
+#: kmymoney2.cpp:1786
+msgid "File already exists"
+msgstr "O ficheiro xa existe"
+
+#: dialogs/rc.cpp:347 dialogs/rc.cpp:649 dialogs/rc.cpp:798 kmymoney2.cpp:1815
+msgid "General"
+msgstr "Xeral"
+
+#: kmymoney2.cpp:1816
+msgid "Register"
+msgstr "Rexistro"
+
+#: kmymoney2.cpp:1817 views/khomeview.cpp:88 views/kmymoneyview.cpp:136
+msgid "Home"
+msgstr "Inicio"
+
+#: kmymoney2.cpp:1818 views/kmymoneyview.cpp:176
+msgid ""
+"Scheduled\n"
+"transactions"
+msgstr ""
+"Asentos\n"
+"planificados"
+
+#: kmymoney2.cpp:1819
+msgid "Encryption"
+msgstr "Cifraxe"
+
+#: kmymoney2.cpp:1820
+msgid "Colors"
+msgstr "Cores"
+
+#: dialogs/rc.cpp:344 dialogs/settings/rc.cpp:107 kmymoney2.cpp:1822
+#: widgets/rc.cpp:33
+msgid "Online Quotes"
+msgstr "Cotizacións Online"
+
+#: kmymoney2.cpp:1823 reports/pivottable.cpp:2426 views/kmymoneyview.cpp:251
+#: views/kmymoneyview.cpp:253 views/kreportsview.cpp:1415 views/rc.cpp:41
+msgid "Forecast"
+msgstr "Prognóstico"
+
+#: kmymoney2.cpp:1824
+msgid "Plugins"
+msgstr "Extensións"
+
+#: kmymoney2.cpp:1893
+msgid ""
+"The file must be saved first before it can be backed up. Do you want to "
+"continue?"
+msgstr ""
+"O ficheiro debe ser gardado antes de poder facerlle unha copia de respaldo. "
+"Desexa continuar?"
+
+#: kmymoney2.cpp:1910
+msgid ""
+"The current implementation of the backup functionality only supports local "
+"files as source files! Your current source file is '%1'."
+msgstr ""
+"A implementación actual da función de respaldo só permite usar ficheiros "
+"locais como orixes! O seu ficheiro orixe actual é «%1»."
+
+#: kmymoney2.cpp:1913
+msgid "Local files only"
+msgstr "Só ficheiros locais"
+
+#: kmymoney2.cpp:1928
+#, c-format
+msgid "Mounting %1"
+msgstr "Montando %1"
+
+#: kmymoney2.cpp:1967
+msgid "Backup file for today exists on that device. Replace ?"
+msgstr ""
+"Xa existe unha copia de respaldo de hoxe nese dispositivo. Desexa "
+"substituíla ?"
+
+#: dialogs/rc.cpp:7 kmymoney2.cpp:1967 kmymoney2.cpp:1994 kmymoney2.cpp:2024
+#: kmymoney2.cpp:2032 kmymoney2.cpp:2057 kmymoney2.cpp:2059
+msgid "Backup"
+msgstr "Copia de respaldo"
+
+#: kmymoney2.cpp:1967
+msgid "&Replace"
+msgstr "&Substituír"
+
+#: kmymoney2.cpp:1972 kmymoney2.cpp:1997 kmymoney2.cpp:2016 kmymoney2.cpp:2035
+#, c-format
+msgid "Unmounting %1"
+msgstr "Desmontando %1"
+
+#: kmymoney2.cpp:1987
+#, c-format
+msgid "Writing %1"
+msgstr "Escribindo %1"
+
+#: kmymoney2.cpp:1994
+msgid "Error mounting device"
+msgstr "Aconteceu un erro ao montar un dispositivo"
+
+#: converter/mymoneygncreader.cpp:1995 kmymoney2.cpp:2023 kmymoney2.cpp:2055
+msgid "Done"
+msgstr "Feito"
+
+#: kmymoney2.cpp:2024 kmymoney2.cpp:2057
+msgid "File successfully backed up"
+msgstr "O ficheiro foi respaldado con éxito"
+
+#: kmymoney2.cpp:2032
+msgid "Error copying file to device"
+msgstr "Aconteceu un erro ao copiar o ficheiro no dispositivo"
+
+#: kmymoney2.cpp:2059
+msgid "Error unmounting device"
+msgstr "Aconteceu un erro desmontando o dispositivo"
+
+#: kmymoney2.cpp:2143
+#, c-format
+msgid "Cannot add institution: %1"
+msgstr "Non foi posíbel engadir a entidade: %1"
+
+#: kmymoney2.cpp:2185
+#, c-format
+msgid "Unable to store institution: %1"
+msgstr "Non foi posíbel gardar a entidade: %1"
+
+#: kmymoney2.cpp:2192
+#, c-format
+msgid "Unable to edit institution: %1"
+msgstr "Non foi posíbel editar a entidade: %1"
+
+#: kmymoney2.cpp:2203
+msgid "Do you really want to delete institution <b>%1</b> ?"
+msgstr "Desexa realmente borrar a entidade <b>%1</b>?"
+
+#: kmymoney2.cpp:2211 kmymoney2.cpp:2215
+#, c-format
+msgid "Unable to delete institution: %1"
+msgstr "Non foi posíbel borrar a entidade: %1"
+
+#: kmymoney2.cpp:2268
+#, c-format
+msgid "Unable to find account: %1"
+msgstr "Non foi posíbel achar a conta: %1"
+
+#: kmymoney2.cpp:2309
+msgid ""
+"This account is a liability and if the opening balance represents money "
+"owed, then it should be negative. Negate the amount?\n"
+"\n"
+"Please click Yes to change the opening balance to %1,\n"
+"Please click No to leave the amount as %2,\n"
+"Please click Cancel to abort the account creation."
+msgstr ""
+"Esta conta é un pasivo e se o saldo de apertura representa diñeiro debido, "
+"debera ser negativo. Cambiar o signo da cantidade?\n"
+"\n"
+"Prema Si para cambiar o saldo de apertura a %1,\n"
+"Prema Non para deixar a cantidade como está, %2,\n"
+"Prema Cancelar para abortar a creación da conta."
+
+#: kmymoney2.cpp:2345 kmymoney2.cpp:2346
+msgid "Loan payout"
+msgstr "Pagamentos de empréstito"
+
+#: dialogs/knewloanwizard.cpp:892 kmymoney2.cpp:2374
+#, c-format
+msgid "Unable to add account: %1"
+msgstr "Non foi posíbel engadir a conta: %1"
+
+#: kmymoney2.cpp:2392
+msgid ""
+"The category <b>%1</b> currently does not exist. Do you want to create it?"
+"<p><i>The parent account will default to <b>%2</b> but can be changed in the "
+"following dialog</i>."
+msgstr ""
+"A categoría <b>%1</b> non existe. Desexa criala? <p><i>A conta nai será por "
+"omisión <b>%2</b> pero poderá mudala no seguinte diálogo</i>."
+
+#: kmymoney2.cpp:2392
+msgid "Create category"
+msgstr "Criar a categoría"
+
+#: kmymoney2.cpp:2429
+msgid "Create a new Category"
+msgstr "Criar unha nova Categoría"
+
+#: kmymoney2.cpp:2505
+#, c-format
+msgid "Unable to create account: %1"
+msgstr "Non foi posíbel criar a conta: %1"
+
+#: kmymoney2.cpp:2516
+msgid ""
+"The security <b>%1</b> currently does not exist as sub-account of <b>%2</b>. "
+"Do you want to create it?"
+msgstr ""
+"O valor bursátil <b>%1</b> non existe como subconta de <b>%2</b>. Desexa "
+"crialo?"
+
+#: kmymoney2.cpp:2517
+msgid "Create security"
+msgstr "Crear un valor"
+
+#: kmymoney2.cpp:2551
+msgid "Do you really want to delete the investment <b>%1</b>?"
+msgstr "Desexa realmente borrar o investimento <b>%1</b>?"
+
+#: kmymoney2.cpp:2551
+msgid "Delete investment"
+msgstr "Borrar o investimento"
+
+#: kmymoney2.cpp:2558
+#, c-format
+msgid "Unable to delete investment: %1"
+msgstr "Non foi posíbel borrar o investimento: %1"
+
+#: kmymoney2.cpp:2640 kmymoney2.cpp:2646
+msgid "Unable to add scheduled transaction: "
+msgstr "Non foi posíbel engadir transaccións planificadas:"
+
+#: kmymoney2.cpp:2722
+msgid "Adjusting transactions..."
+msgstr "A axustar os asentos..."
+
+#: kmymoney2.cpp:2747
+msgid "Adjusting scheduled transactions..."
+msgstr "A axustar os asentos planificados..."
+
+#: kmymoney2.cpp:2765
+msgid "Adjusting budgets..."
+msgstr "A axustar os orzamentos..."
+
+#: kmymoney2.cpp:2783
+msgid ""
+"Unable to exchange category <b>%1</b> with category <b>%2</b>. Reason: %3"
+msgstr ""
+"Non foi posíbel trocar a categoría <b>%1</b> coa categoría <b>%2</b>. "
+"Motivo: %3"
+
+#: kmymoney2.cpp:2804
+msgid "Do you really want to delete category <b>%1</b>?"
+msgstr "Desexa realmente borrar a categoría <b>%1</b>?"
+
+#: kmymoney2.cpp:2811
+msgid "Unable to delete category <b>%1</b>. Cause: %2"
+msgstr "Non foi posíbel eliminar a categoría <b>%1</b>. Motivo: %3"
+
+#: kmymoney2.cpp:2823
+msgid ""
+"Do you want to delete category <b>%1</b> with all its sub-categories or only "
+"the category itself? If you only delete the category itself, all its sub-"
+"categories will be made sub-categories of <b>%2</b>."
+msgstr ""
+"Desexa borrar a categoría <b>%1</b> con todas as súas subcategorías ou só a "
+"categoría en si? Se só borra a categoría, todas as súas fillas serán "
+"adoptadas por <b>%2</b>."
+
+#: kmymoney2.cpp:2827
+msgid "Delete all"
+msgstr "Borrar todas"
+
+#: kmymoney2.cpp:2828
+msgid "Just the category"
+msgstr "Só a categoría"
+
+#: kmymoney2.cpp:2858
+msgid ""
+"Some sub-categories of category <b>%1</b> cannot be deleted, because they "
+"are still used. They will be made sub-categories of <b>%2</b>. Proceed?"
+msgstr ""
+"Algunhas subcategorías da categoría <b>%1</b> non poden ser borradas, porque "
+"aínda están a ser usadas. Serán adoptadas por <b>%2</b>. Desexa continuar?"
+
+#: kmymoney2.cpp:2878
+msgid "Unable to delete a sub-category of category <b>%1</b>. Reason: %2"
+msgstr "Non foi posíbel borrar unha subcategoría de <b>%1</b>. Motivo: %2"
+
+#: kmymoney2.cpp:2889
+msgid "Do you really want to delete account <b>%1</b>?"
+msgstr "Desexa realmente borrar a conta <b>%1</b>?"
+
+#: kmymoney2.cpp:2901
+msgid "Unable to delete account '%1'. Cause: %2"
+msgstr "Non foi posíbel borrar a conta «%1». Motivo: %2 "
+
+#: kmymoney2.cpp:2917
+msgid "Edit account '%1'"
+msgstr "Editar a conta «%1»"
+
+#: kmymoney2.cpp:2922
+msgid "Edit category '%1'"
+msgstr "Editar a categoría «%1»"
+
+#: kmymoney2.cpp:3008
+msgid "Unable to modify account '%1'. Cause: %2"
+msgstr "Non foi posíbel modificar a conta «%1». Motivo: %2"
+
+#: kmymoney2.cpp:3065
+msgid ""
+"KMyMoney has detected some overdue scheduled transactions for this account. "
+"Do you want to enter those scheduled transactions now?"
+msgstr ""
+"KMyMoney detectou algunhas planificacións vencidas nesta conta. Desexa "
+"asentar agora estes asentos planificados?"
+
+#: kmymoney2.cpp:3065
+msgid "Scheduled transactions found"
+msgstr "Atopáronse asentos planificados"
+
+#: kmymoney2.cpp:3163
+msgid ""
+"You are about to finish the reconciliation of this account with a difference "
+"between your bank statement and the transactions marked as cleared.\n"
+"Are you sure you want to finish the reconciliation ?"
+msgstr ""
+"Está a piques de rematar a conciliación desta conta cunha diferenza entre o "
+"seu extracto bancario e os asentos sinalados como librados.\n"
+"Desexa realmente rematar a conciliación ?"
+
+#: kmymoney2.cpp:3165
+msgid "Confirm end of reconciliation"
+msgstr "Confirmar a conciliación"
+
+#: kmymoney2.cpp:3339
+msgid ""
+"You have closed this account. It remains in the system because you have "
+"transactions which still refer to it, but is not shown in the views. You can "
+"make it visible again by going to the View menu and selecting <b>Show all "
+"accounts</b> or by unselecting the <b>Don't show closed accounts</b> setting."
+msgstr ""
+"Pechou esta conta. Aínda segue no sistema porque hai asentos que se refiren "
+"a ela, pero non é mostrada nas vistas. Pode facela visíbel de novo indo ao "
+"menú Vista e escollendo <b>Mostrar todas as contas</b> ou desmarcando a "
+"opción <b>Non mostrar as contas pechadas</b> na configuración."
+
+#: kmymoney2.cpp:3379
+msgid "<b>%1</b> cannot be moved to institution <b>%2</b>. Reason: %3"
+msgstr "<b>%1</b> non pode ser movida á entidade <b>%2</b>. Motivo: %3"
+
+#: kmymoney2.cpp:3393
+msgid "<b>%1</b> cannot be moved to <b>%2</b>. Reason: %3"
+msgstr "<b>%1</b> non pode ser movido a <b>%2</b>. Motivo: %3"
+
+#: kmymoney2.cpp:3408
+msgid "%1 YTD Account Transactions"
+msgstr "Asentos deste ano na conta %1"
+
+#: dialogs/kbalancechartdlg.cpp:71 kmymoney2.cpp:3409
+#: views/kforecastview.cpp:650 views/khomeview.cpp:276
+#: views/khomeview.cpp:1384 views/kreportsview.cpp:619
+msgid "Generated Report"
+msgstr "Informe xerado"
+
+#: dialogs/rc.cpp:324 dialogs/settings/rc.cpp:80 kmymoney2.cpp:3411
+#: views/kreportsview.cpp:1062 views/rc.cpp:58 views/rc.cpp:59
+msgid "Transactions"
+msgstr "Asentos"
+
+#: kmymoney2.cpp:3449
+#, c-format
+msgid "Unable to add scheduled transaction: %1"
+msgstr "Non foi posíbel engadir o transacción planificada: %1"
+
+#: kmymoney2.cpp:3449
+msgid "Add scheduled transaction"
+msgstr "Engadir unha transacción planificada"
+
+#: kmymoney2.cpp:3489
+msgid ""
+"You have entered a scheduled transaction date of <b>%1</b>. Because the "
+"scheduled transaction was last paid on <b>%2</b>, KMyMoney will "
+"automatically adjust the scheduled transaction date to the next date unless "
+"the last payment date is reset. Do you want to reset the last payment date?"
+msgstr ""
+"Indicou unha data para a planificación de <b>%1</b>. Dado que a "
+"planificación foi paga por última vez en <b>%2</b>, KMyMoney axustará "
+"automaticamente a data da planificación á seguinte dada a non ser que "
+"reinicie a data do último pagamento. Desexa reiniciar a data do último "
+"pagamento?"
+
+#: kmymoney2.cpp:3489
+msgid "Reset Last Payment Date"
+msgstr "Reiniciar a data do último pagamento"
+
+#: kmymoney2.cpp:3499 kmymoney2.cpp:3519 kmymoney2.cpp:3531
+msgid "Unable to modify scheduled transaction '%1'"
+msgstr "Non foi posíbel modificar a planificación «%1» "
+
+#: kmymoney2.cpp:3543
+msgid "Are you sure you want to delete the scheduled transaction <b>%1</b>?"
+msgstr "Desexa realmente borrar a planificación <b>%1</b>?"
+
+#: kmymoney2.cpp:3546
+msgid ""
+"In case of loan payments it is currently not possible to recreate the "
+"scheduled transaction."
+msgstr ""
+"No caso de pagamento de empréstitos, na actualidade non é posíbel crear de "
+"novo a planificación dos pagamentos."
+
+#: kmymoney2.cpp:3555
+msgid "Unable to remove scheduled transaction '%1'"
+msgstr "Non foi posíbel eliminar a planificación «%1»"
+
+#: kmymoney2.cpp:3569
+#, c-format
+msgid ""
+"_: Copy of scheduled transaction name\n"
+"Copy of %1"
+msgstr "Copia de %1"
+
+#: kmymoney2.cpp:3581 kmymoney2.cpp:4352
+msgid "Unable to duplicate transaction(s): %1, thrown in %2:%3"
+msgstr "Non foi posíbel duplicar os asentos: %1, lanzado en %2:%3"
+
+#: kmymoney2.cpp:3595
+msgid ""
+"Do you really want to skip the <b>%1</b> transaction scheduled for <b>%2</b>?"
+msgstr ""
+"Desexa realmente omitir a transacción da planificación <b>%1</b> en <b>%2</"
+"b>?"
+
+#: kmymoney2.cpp:3605
+msgid "Unable to skip scheduled transaction <b>%1</b>."
+msgstr "Non foi posíbel omitir a planificación <b>%1</b>."
+
+#: kmymoney2.cpp:3618
+msgid "Unknown scheduled transaction '%1'"
+msgstr "A planificación «%1» é descoñecida"
+
+#: kmymoney2.cpp:3673
+msgid ""
+"Are you sure you wish to stop this scheduled transaction from being entered "
+"into the register?\n"
+"\n"
+"KMyMoney will prompt you again next time it starts unless you manually enter "
+"it later."
+msgstr ""
+"Desexa realmente parar o apuntamento deste asento planificado no rexistro?\n"
+"\n"
+"KMyMoney preguntaralle de novo a próxima vez que arrinque a menos que o "
+"introduza manualmente máis tarde."
+
+#: kmymoney2.cpp:3725 kmymoney2.cpp:3732
+msgid "Unable to enter scheduled transaction '%1'"
+msgstr "Non foi posíbel asentar a transacción planificada «%1»"
+
+#: kmymoney2.cpp:3743 kmymoney2.cpp:3783
+msgid "New Payee"
+msgstr "Novo Beneficiario"
+
+#: kmymoney2.cpp:3745
+msgid "Do you want to add <b>%1</b> as payer/receiver ?"
+msgstr "Desexa engadir a <b>%1</b> á lista de beneficiarios/receptores?"
+
+#: converter/mymoneystatementreader.cpp:892 kmymoney2.cpp:3747
+msgid "New payee/receiver"
+msgstr "Novo beneficiario/receptor"
+
+#: kmymoney2.cpp:3773
+msgid "Unable to add payee"
+msgstr "Non foi posíbel engadir o beneficiario"
+
+#: kmymoney2.cpp:3826
+msgid "Do you really want to remove the payee <b>%1</b>?"
+msgstr "Desexa realmente eliminar o beneficiario <b>%1</b>?"
+
+#: kmymoney2.cpp:3828
+msgid "Do you really want to remove all selected payees?"
+msgstr "Desexa realmente eliminar a todos os beneficiarios escollidos?"
+
+#: kmymoney2.cpp:3830
+msgid "Remove Payee"
+msgstr "Eliminar o beneficiario"
+
+#: kmymoney2.cpp:3870
+msgid ""
+"At least one transaction/scheduled transaction is still referenced by a "
+"payee. Currently you have all payees selected. However, at least one payee "
+"must remain so that the transaction/scheduled transaction can be reassigned."
+msgstr ""
+"Aínda hai un beneficiario que fai referencia dun asento/planificación. Na "
+"actualidade ten escollidos a todos os beneficiarios, pero debe ficar polo "
+"menos un para poder asignar de novo os asentos/planificacións."
+
+#: kmymoney2.cpp:3925
+msgid "Unable to reassign payee of transaction/split"
+msgstr "Non foi posíbel reasignar o beneficiario do asento/partida"
+
+#: converter/mymoneyqifreader.cpp:534 converter/mymoneystatementreader.cpp:959
+#: kmymoney2.cpp:3926 kmymoney2.cpp:3983 views/kbudgetview.cpp:636
+#: views/kbudgetview.cpp:737 views/kbudgetview.cpp:751
+#: views/kpayeesview.cpp:519 views/kpayeesview.cpp:870
+msgid "thrown in"
+msgstr "introducido"
+
+#: kmymoney2.cpp:3982
+msgid "Unable to remove payee(s)"
+msgstr "Non foi posíbel eliminar o(s) beneficiarios(s)"
+
+#: kmymoney2.cpp:3990
+msgid "Enter ISO 4217 code for the new currency"
+msgstr "Escreba o código ISO 4217 da nova divisa"
+
+#: kmymoney2.cpp:3999
+#, c-format
+msgid "Cannot create new currency. %1"
+msgstr "Non foi posíbel criar a nova divisa. %1"
+
+#: kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, c-format
+msgid "Cannot rename currency. %1"
+msgstr "Non foi posíbel mudar o nome da divisa. %1"
+
+#: kmymoney2.cpp:4039
+msgid "Cannot delete currency %1. %2"
+msgstr "Non foi posíbel borrar a divisa %1. %2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Cannot set %1 as base currency: %2"
+msgstr "Non é posíbel usar %1 como divisa base: %2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Set base currency"
+msgstr "Escoller como divisa base"
+
+#: kmymoney2.cpp:4065
+#, c-format
+msgid "Budget %1"
+msgstr "Orzamento %1"
+
+#: kmymoney2.cpp:4075
+msgid "Budget %1 (%2)"
+msgstr "Orzamento %1 (%2)"
+
+#: kmymoney2.cpp:4090 kmymoney2.cpp:4139
+msgid "Unable to add budget: %1, thrown in %2:%3"
+msgstr "Non foi posíbel engadir o orzamento: %1, lanzado en %2:%3"
+
+#: kmymoney2.cpp:4105
+msgid "Do you really want to remove the budget <b>%1</b>?"
+msgstr "Desexa realmente eliminar o orzamento <b>%1</b>?"
+
+#: kmymoney2.cpp:4107
+msgid "Do you really want to remove all selected budgets?"
+msgstr "Desexa realmente eliminar todos os orzamentos escollidos?"
+
+#: kmymoney2.cpp:4109
+msgid "Remove Budget"
+msgstr "Eliminar o orzamento"
+
+#: kmymoney2.cpp:4122
+msgid "Unable to remove budget: %1, thrown in %2:%3"
+msgstr "Non foi posíbel eliminar o orzamento: %1, lanzado en %2:%3"
+
+#: kmymoney2.cpp:4134 views/kreportsview.cpp:659
+#, c-format
+msgid "Copy of %1"
+msgstr "Copia de %1"
+
+#: kmymoney2.cpp:4164
+msgid "Select year"
+msgstr "Escoller un ano"
+
+#: kmymoney2.cpp:4164
+msgid "Budget year"
+msgstr "Ano do orzamento"
+
+#: kmymoney2.cpp:4176 kmymoney2.cpp:4214 kmymoney2.cpp:4274
+msgid "Unable to modify budget: %1, thrown in %2:%3"
+msgstr "Non foi posíbel modificar o orzamento: %1, lanzado en %2:%3"
+
+#: kmymoney2.cpp:4192 kmymoney2.cpp:4250
+msgid ""
+"The current budget already contains data. Continuing will replace all "
+"current values of this budget."
+msgstr ""
+"Este orzamento xa contén dados. Se continúa irá substituír todos os valores "
+"actuais deste orzamento."
+
+#: kmymoney2.cpp:4222
+msgid ""
+"Please be aware that changes made in the following dialog affect all KDE "
+"applications not only KMyMoney."
+msgstr ""
+"Sexa consciente de que as mudanzas que faga no seguinte diálogo afectan a "
+"todos os programas de KDE e non só a KMyMoney."
+
+#: kmymoney2.cpp:4292
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to delete the transactions anyway?"
+msgstr ""
+"Polo menos unha partida dos asentos escollidos foi conciliada. Desexa "
+"eliminar os asentos aínda así?"
+
+#: kmymoney2.cpp:4295 views/kgloballedgerview.cpp:1043
+msgid "Transaction already reconciled"
+msgstr "O asento xa foi conciliado"
+
+#: kmymoney2.cpp:4301
+msgid "Do you really want to delete the selected transaction?"
+msgstr "Desexa realmente borrar o asento escollido?"
+
+#: kmymoney2.cpp:4303
+msgid "Do you really want to delete all %1 selected transactions?"
+msgstr "Desexa realmente borrar os %1 asentos escollidos?"
+
+#: kmymoney2.cpp:4305
+msgid "Delete transaction"
+msgstr "Borrar o asento"
+
+#: kmymoney2.cpp:4306
+msgid "Deleting transactions"
+msgstr "A borrar asentos"
+
+#: kmymoney2.cpp:4321
+msgid "Duplicating transactions"
+msgstr "A duplicar asentos"
+
+#: kmymoney2.cpp:4378
+msgid "Unable to delete transaction(s): %1, thrown in %2:%3"
+msgstr "Non foi posíbel borrar o(s) asento(s): %1, lanzado en %2:%3"
+
+#: kmymoney2.cpp:4452 kmymoney2.cpp:4622
+msgid "Unable to modify transaction: %1, thrown in %2:%3"
+msgstr "Non foi posíbel modificar o asento: %1, lanzado en %2:%3"
+
+#: kmymoney2.cpp:4514
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling and<br>- <b>Cancel</b> returns to the "
+"transaction editor.<p>You can also select an option to save the transaction "
+"automatically when e.g. selecting another transaction."
+msgstr ""
+"Desexa realmente cancelar a edición deste asento sen gardalo?<p>- <b>Si</b> "
+"cancela a edición do asento<br>- <b>Non</b> garda o asento antes de cancelar "
+"e<br>- <b>Cancelar</b> volta ao editor de asentos.<p>Tamén pode escoller "
+"unha opción para gardar o asento automaticamente cando, p.ex. escolla outro "
+"asento."
+
+#: kmymoney2.cpp:4514 kmymoney2.cpp:4517
+msgid "Cancel transaction edit"
+msgstr "Cancelar a edición do asento"
+
+#: kmymoney2.cpp:4517
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling.<p>You can also select an option to save the "
+"transaction automatically when e.g. selecting another transaction."
+msgstr ""
+"Desexa realmente cancelar a edición deste asento sen gardalo?<p>- <b>Si</b> "
+"cancela a edición do asento<br>- <b>Non</b> garda o asento antes de cancelar."
+"<p>Tamén pode escoller unha opción para gardar o asento automaticamente "
+"cando, p.ex. escolla outro asento."
+
+#: kmymoney2.cpp:4667
+msgid "Unable to accept transaction: %1, thrown in %2:%3"
+msgstr "Non foi posíbel aceitar o asento: %1, lanzado en %2:%3"
+
+#: kmymoney2.cpp:4846
+msgid "Unable to unmatch the selected transactions"
+msgstr "Non foi posíbel desemparellar o asento escollido"
+
+#: kmymoney2.cpp:4885
+msgid "No manually entered transaction selected for matching"
+msgstr "Non escolleu unha transacción escriturada á mao para emparellada"
+
+#: kmymoney2.cpp:4887
+msgid "No imported transaction selected for matching"
+msgstr "Non escolleu ningún asento importado para emparellalo"
+
+#: kmymoney2.cpp:4895
+msgid "Unable to match the selected transactions"
+msgstr "Non foi posíbel emparellar os asentos escollidos"
+
+#: kmymoney2.cpp:5097
+msgid "Create a new transaction"
+msgstr "Criar unha nova operación"
+
+#: kmymoney2.cpp:5163
+msgid "Duplicate the current selected transactions"
+msgstr "Duplica os asentos que ten escollidos"
+
+#: kmymoney2.cpp:5223
+msgid ""
+"_: Button text for unmatch transaction\n"
+"Unmatch"
+msgstr "Desemparellar"
+
+#: kmymoney2.cpp:5451 kmymoney2.cpp:5473
+msgid "Goto '%1'"
+msgstr "Ir para «%1»"
+
+#: kmymoney2.cpp:5582
+msgid "Running consistency check..."
+msgstr "A facer unha comprobación de consistencia..."
+
+#: kmymoney2.cpp:5590
+#, c-format
+msgid "Consistency check failed: %1"
+msgstr "A comprobación de consistencia fallou: %1"
+
+#: kmymoney2.cpp:5594
+msgid "Consistency check result"
+msgstr "Resultado da comprobación de consistencia"
+
+#: kmymoney2.cpp:5603
+msgid "Checking for overdue scheduled transactions..."
+msgstr "A comprobar os asentos planificados vencidos..."
+
+#: kmymoney2.cpp:5740
+msgid ""
+"You must first select a KMyMoney file before you can import a statement."
+msgstr "Antes de importar un extracto, debe escoller un ficheiro de KMyMoney."
+
+#: kmymoney2.cpp:5746
+msgid "Importing a statement via Web Connect"
+msgstr "A importar un extracto mediante Conexión á Web"
+
+#: kmymoney2.cpp:5759
+msgid ""
+"Unable to import %1 using %2 plugin. The plugin returned the following "
+"error: %3"
+msgstr ""
+"Non foi posíbel importar %1 usando a extensión %2. A extensión devolveu o "
+"seguinte erro: %3"
+
+#: kmymoney2.cpp:5759 plugins/ofximport/ofximporterplugin.cpp:646
+msgid "Importing error"
+msgstr "Erro ao importar"
+
+#: kmymoney2.cpp:5780
+msgid "All messages have been enabled."
+msgstr "Permítense todas as mensaxes."
+
+#: kmymoney2.cpp:5780
+msgid "All messages"
+msgstr "Todas as mensaxes"
+
+#: kmymoney2.cpp:5855
+msgid "Auto saving..."
+msgstr "A gardar automaticamente..."
+
+#: kmymoney2.cpp:5913
+msgid "Unable to setup online parameters for account ''%1'"
+msgstr "Non foi posíbel configurar os parámetros online da conta «%1»"
+
+#: kmymoney2.cpp:5928
+msgid ""
+"Do you really want to remove the mapping of account <b>%1</b> to an online "
+"account? Depending on the details of the online banking method used, this "
+"action cannot be reverted."
+msgstr ""
+"Desexa realmente eliminar a asociación da conta <b>%1</b> cunha conta en "
+"liña? En función dos detalles do método de banca por internet que empregue, "
+"esta acción pode non ser revertida."
+
+#: kmymoney2.cpp:5928
+msgid "Remove mapping to online account"
+msgstr "Eliminar a asociación cunha conta en liña"
+
+#: kmymoney2.cpp:5939
+#, c-format
+msgid "Unable to unmap account from online account: %1"
+msgstr "Non foi posíbel anular a asociación da conta cunha conta en liña: %1"
+
+#: kmymoney2.cpp:5956
+msgid " (Brokerage)"
+msgstr " (Corretaxe)"
+
+#: kmymoney2.cpp:5957
+msgid ""
+"You try to map a brokerage account to an online account. This is usually not "
+"advisable. In general, the investment account should be mapped to the online "
+"account. Please cancel if you intended to map the investment account, "
+"continue otherwise"
+msgstr ""
+"Pode probar a asociar unha conta de corretaxe cunha conta en liña, aínda que "
+"polo xeral non é aconsellábel. En xeral a conta de investimento debe "
+"asociarse coa conta en liña. Cancele a operación se pretende relacionar a "
+"conta de investimento, caso contrario continúe."
+
+#: kmymoney2.cpp:5957
+msgid "Mapping brokerage account"
+msgstr "A asociar a nova conta de corretaxe"
+
+#: kmymoney2.cpp:5964
+msgid "Select online banking plugin"
+msgstr "Escolla a extensión de banca en liña"
+
+#: kmymoney2.cpp:6005
+#, c-format
+msgid "Unable to map account to online account: %1"
+msgstr "Non foi posíbel asociar a conta a unha conta en liña: %1"
+
+#: converter/mymoneyqifreader.cpp:407 converter/mymoneytemplate.cpp:73
+#: views/kmymoneyview.cpp:590
+msgid "Error while loading file '%1'!"
+msgstr "Aconteceu un erro ao cargar o ficheiro «%1»!"
+
+#: converter/mymoneyqifreader.cpp:409 converter/mymoneyqifreader.cpp:965
+#: converter/mymoneytemplate.cpp:75 views/kmymoneyview.cpp:592
+msgid "File access error"
+msgstr "Erro de aceso ao ficheiro"
+
+#: converter/mymoneytemplate.cpp:84
+msgid "<b>%1</b> is not a template file."
+msgstr "<b>%1</b> non é un ficheiro de modelos."
+
+#: converter/mymoneytemplate.cpp:85 views/kmymoneyview.cpp:603
+msgid "Filetype Error"
+msgstr "Erro Filetype"
+
+#: converter/mymoneytemplate.cpp:93
+msgid "Error while reading template file <b>%1</b> in line %2, column %3"
+msgstr ""
+"Aconteceu un erro ao ler o ficheiro de modelos <b>%1</b> na liña %2, columna "
+"%3"
+
+#: converter/mymoneytemplate.cpp:94
+msgid "Template Error"
+msgstr "Erro dos modelos"
+
+#: converter/mymoneytemplate.cpp:101
+msgid "File '%1' not found!"
+msgstr "Non se atopou o ficheiro «%1»!"
+
+#: converter/mymoneytemplate.cpp:142
+msgid "Invalid tag <b>%1</b> in template file <b>%2</b>!"
+msgstr "Etiqueta non válida <b>%1</b> no ficheiro de modelos <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:214
+#, c-format
+msgid "Loading template %1"
+msgstr "Cargando os modelos %1"
+
+#: converter/mymoneytemplate.cpp:241
+msgid "Invalid top-level account type <b>%1</b> in template file <b>%2</b>!"
+msgstr "Tipo de conta nai erróneo <b>%1</b> no ficheiro de modelos <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:309
+msgid ""
+"Invalid flag type <b>%1</b> for account <b>%3</b> in template file <b>%2</b>!"
+msgstr ""
+"Tipo de etiqueta incorrecta <b>%1</b> para a conta <b>%3</b> no ficheiro de "
+"modelos <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:398 converter/mymoneytemplate.cpp:401
+#: views/kmymoneyview.cpp:1151 views/kmymoneyview.cpp:1154
+msgid "Unable to write changes to '%1'"
+msgstr "Non foi posíbel escribir os cambios en «%1»"
+
+#: converter/mymoneytemplate.cpp:407 views/kmymoneyview.cpp:1162
+msgid "Unable to upload to '%1'"
+msgstr "Non foi posíbel enviar ficheiro a «%1»"
+
+#: converter/mymoneyqifwriter.cpp:70
+msgid ""
+"Unexpected exception '%1' thrown in %2, line %3 caught in MyMoneyQifWriter::"
+"write()"
+msgstr ""
+"A excepción inesperada «%1», lanzada desde %2, liña %3, foi capturada por "
+"MyMoneyQifWriter::write()"
+
+#: converter/mymoneyqifwriter.cpp:80
+msgid "Unable to open file '%1' for writing"
+msgstr "Non foi posíbel abrir o ficheiro «%1» para escritura"
+
+#: converter/webpricequote.cpp:340
+#, c-format
+msgid "Symbol found: %1"
+msgstr "Símbolo atopado: %1"
+
+#: converter/webpricequote.cpp:368
+msgid "Price found: %1 (%2)"
+msgstr "Prezo atopado: %1 (%2)"
+
+#: converter/webpricequote.cpp:380
+#, c-format
+msgid "Date found: %1"
+msgstr "Data atopada: %1"
+
+#: converter/webpricequote.cpp:397 converter/webpricequote.cpp:403
+#, c-format
+msgid "Unable to update price for %1"
+msgstr "Non foi posíbel actualizar o prezo de %1"
+
+#: converter/mymoneyqifreader.cpp:170
+msgid ""
+"_: Category name\n"
+"Reinvested dividend"
+msgstr "Dividendo reinvestido"
+
+#: converter/mymoneyqifreader.cpp:173
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (long term)"
+msgstr "Dividendo reinvestido (a longo prazo)"
+
+#: converter/mymoneyqifreader.cpp:176
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (short term)"
+msgstr "Dividendo reinvestido (a curto prazo)"
+
+#: converter/mymoneyqifreader.cpp:179
+msgid ""
+"_: Category name\n"
+"Dividend"
+msgstr "Dividendo"
+
+#: converter/mymoneyqifreader.cpp:182
+msgid ""
+"_: Category name\n"
+"Interest"
+msgstr "Xuro"
+
+#: converter/mymoneyqifreader.cpp:185
+msgid ""
+"_: Category name\n"
+"Capital Gain (short term)"
+msgstr "Plusvalía (a curto prazo)"
+
+#: converter/mymoneyqifreader.cpp:188
+msgid ""
+"_: Category name\n"
+"Capital Gain (mid term)"
+msgstr "Plusvalía (a medio prazo)"
+
+#: converter/mymoneyqifreader.cpp:191
+msgid ""
+"_: Category name\n"
+"Capital Gain (long term)"
+msgstr "Plusvalía (a longo prazo)"
+
+#: converter/mymoneyqifreader.cpp:194
+msgid ""
+"_: Category name\n"
+"Returned capital"
+msgstr "Capital devolto"
+
+#: converter/mymoneyqifreader.cpp:197
+msgid ""
+"_: Category name\n"
+"Miscellaneous income"
+msgstr "Ingresos diversos"
+
+#: converter/mymoneyqifreader.cpp:200
+msgid ""
+"_: Category name\n"
+"Miscellaneous expense"
+msgstr "Gastos diversos"
+
+#: converter/mymoneyqifreader.cpp:203
+msgid ""
+"_: Category name\n"
+"Investment fees"
+msgstr "Gastos do investimento"
+
+#: converter/mymoneyqifreader.cpp:205
+#, c-format
+msgid "Unknown QIF type %1"
+msgstr "Tipo de QIF descoñecido %1"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Date format selection"
+msgstr "Selección de formato da data"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Pick the date format that suits your input file"
+msgstr "Escolla o formato de data que corresponde co ficheiro de entrada"
+
+#: converter/mymoneyqifreader.cpp:366
+msgid "Importing QIF ..."
+msgstr "A importar o QIF..."
+
+#: converter/mymoneyqifreader.cpp:442
+msgid "Reading QIF ..."
+msgstr "A ler o QIF..."
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Adding transactions"
+msgstr "Engadindo asentos"
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Now adding the transactions to your ledger..."
+msgstr "Estanse a engadir os asentos ao seu libro maior..."
+
+#: converter/mymoneyqifreader.cpp:533
+msgid "Unable to add transactions"
+msgstr "Non foi posíbel engadir asentos"
+
+#: converter/mymoneyqifreader.cpp:567
+msgid ""
+"_: QIF tag for liability account\n"
+"Oth L"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:572
+msgid ""
+"_: QIF tag for category\n"
+"Cat"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:575
+msgid ""
+"_: QIF tag for security\n"
+"Security"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:578
+msgid ""
+"_: QIF tag for investment account\n"
+"Invst"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:581
+msgid ""
+"_: QIF tag for prices\n"
+"Prices"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:599
+msgid ""
+"_: QIF tag for a class\n"
+"Class"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:753 converter/mymoneyqifreader.cpp:2203
+msgid ""
+"The %1 account currently has an opening balance of %2. This QIF file reports "
+"an opening balance of %3. Would you like to overwrite the current balance "
+"with the one from the QIF file?"
+msgstr ""
+"A conta %1 ten un saldo de abertura de %2. Porén, o ficheiro QIF indica que "
+"é de %3. Desexa mudar o saldo de apertura actual polo do ficheiro QIF?"
+
+#: converter/mymoneyqifreader.cpp:754 converter/mymoneyqifreader.cpp:2204
+msgid "Overwrite opening balance"
+msgstr "Cambiar o saldo de apertura"
+
+#: converter/mymoneyqifreader.cpp:879 converter/mymoneyqifreader.cpp:890
+#: converter/mymoneyqifreader.cpp:914
+msgid "Autogenerated by QIF importer"
+msgstr "Xerado automaticamente polo importador de QIF"
+
+#: converter/mymoneyqifreader.cpp:907
+msgid "QIF imported, no account name supplied"
+msgstr "Importouse o QIF: non se indicou un nome de conta"
+
+#: converter/mymoneyqifreader.cpp:940
+msgid ""
+"KMyMoney has imported a second opening balance transaction into account <b>%"
+"1</b> which differs from the one found already on file. Please correct this "
+"manually once the import is done."
+msgstr ""
+"KMyMoney importou unha segunda transacción de saldo de abertura da conta <b>%"
+"1</b> que é diferente do que se atopa no ficheiro. Corrixa manualmente este "
+"problema tras rematar a importación."
+
+#: converter/mymoneyqifreader.cpp:940
+msgid "Opening balance problem"
+msgstr "Problema co saldo de abertura"
+
+#: converter/mymoneyqifreader.cpp:963
+msgid "Error while creating opening balance transaction"
+msgstr "Aconteceu un erro ao crear o asento de saldo de abertura"
+
+#: converter/mymoneyqifreader.cpp:1029 converter/mymoneyqifreader.cpp:1276
+msgid ""
+"The date entry \"%1\" read from the file cannot be interpreted through the "
+"current date profile setting of \"%2\".\n"
+"\n"
+"Pressing \"Continue\" will assign todays date to the transaction. Pressing "
+"\"Cancel\" will abort the import operation. You can then restart the import "
+"and select a different QIF profile or create a new one."
+msgstr ""
+"A data «%1», lida do ficheiro, non puido ser interpretada coa configuración "
+"actual para datas de «%2».\n"
+"\n"
+"Premendo «Continuar» asinará a data de hoxe ao asento. Premendo «Cancelar» "
+"abortará a operación de importación. Entón poderá reiniciar a importación e "
+"escoller outro perfil QIF ou criar un novo."
+
+#: converter/mymoneyqifreader.cpp:1035 converter/mymoneyqifreader.cpp:1282
+msgid "Invalid date format"
+msgstr "Formato de data non válido"
+
+#: converter/mymoneyqifreader.cpp:1398
+#: converter/mymoneystatementreader.cpp:589
+#: converter/mymoneystatementreader.cpp:592
+msgid "Statement Importer"
+msgstr "Importador de extractos"
+
+#: converter/mymoneyqifreader.cpp:1413
+#: converter/mymoneystatementreader.cpp:644
+msgid ""
+"This investment account does not contain the \"%1\" security. Transactions "
+"involving this security will be ignored."
+msgstr ""
+"Esta conta de investimentos non contén o valor «%1». Os asentos que o "
+"conteñan serán ignorados."
+
+#: converter/mymoneyqifreader.cpp:1415
+#: converter/mymoneystatementreader.cpp:612
+#: converter/mymoneystatementreader.cpp:644
+msgid "Security not found"
+msgstr "Valor non atopado"
+
+#: converter/mymoneyqifreader.cpp:2021
+msgid "%1 (Investment)"
+msgstr "%1 (Investimento)"
+
+#: converter/mymoneyqifreader.cpp:2022
+msgid "Autogenerated by QIF importer from type Mutual account entry"
+msgstr ""
+"Xerado automaticamente polo importador de QIF a partir do tipo de conta "
+"«Mutual»"
+
+#: converter/mymoneyqifreader.cpp:2085 converter/mymoneyqifreader.cpp:2228
+msgid "account"
+msgstr "conta"
+
+#: converter/mymoneyqifreader.cpp:2086
+msgid "al"
+msgstr "al"
+
+#: converter/mymoneyqifreader.cpp:2093
+msgid "category"
+msgstr "categoría"
+
+#: converter/mymoneyqifreader.cpp:2094
+msgid "ei"
+msgstr "ei"
+
+#: converter/mymoneyqifreader.cpp:2095
+msgid "Category selection"
+msgstr "Selección de categoría"
+
+#: converter/mymoneyqifreader.cpp:2110
+msgid "Account \"%1\" disappeared: "
+msgstr "A conta «%1» desapareceu: "
+
+#: converter/mymoneyqifreader.cpp:2131
+msgid "The %1 '%2' does not exist. Do you want to create it?"
+msgstr "O %1 «%2» non existe. Desexa crealo?"
+
+#: converter/mymoneyqifreader.cpp:2140
+#, c-format
+msgid "Select %1"
+msgstr "Seleccionar %1"
+
+#: converter/mymoneyqifreader.cpp:2142
+msgid ""
+"The %1 <b>%2</b> currently exists. Do you want to import transactions to "
+"this account?"
+msgstr "O %1 <b>%2</b> xa existe. Desexa importar asentos a esta conta?"
+
+#: converter/mymoneyqifreader.cpp:2147
+msgid ""
+"The %1 <b>%2</b> currently does not exist. You can create a new %3 by "
+"pressing the <b>Create</b> button or select another %4 manually from the "
+"selection box."
+msgstr ""
+"O %1 <b>%2</b> non existe. Pode criar un novo %3 premendo o botón <b>Criar</"
+"b> ou escoller outro %4 manualmente na caixa se selección."
+
+#: converter/mymoneyqifreader.cpp:2154
+#, c-format
+msgid "Import transactions to %1"
+msgstr "Importar asentos a %1"
+
+#: converter/mymoneyqifreader.cpp:2155
+msgid ""
+"No %1 information has been found in the selected QIF file. Please select an "
+"account using the selection box in the dialog or create a new %2 by pressing "
+"the <b>Create</b> button."
+msgstr ""
+"Non se atopou información de %1 no ficheiro QIF escollido. Por favor, "
+"escolla unha conta empregando a caixa de selección do diálogo ou críe unha "
+"nova %2 premendo no botón <b>Criar</b>."
+
+#: converter/mymoneyqifreader.cpp:2229
+msgid "You must select or create an account."
+msgstr "Debe escoller ou criar unha conta."
+
+#: converter/mymoneyqifreader.cpp:2231
+msgid "You must select or create a category."
+msgstr "Debe escoller ou criar unha categoría."
+
+#: converter/mymoneystatementreader.cpp:100
+msgid "_Fees"
+msgstr "_Comisións"
+
+#: converter/mymoneystatementreader.cpp:106
+msgid "_Dividend"
+msgstr "_Dividendo"
+
+#: converter/mymoneystatementreader.cpp:289
+#, c-format
+msgid "Importing statement for account %1"
+msgstr "A importar un extracto da conta %1"
+
+#: converter/mymoneystatementreader.cpp:291
+msgid "Importing statement without transactions"
+msgstr "A importar un extracto da conta sen transaccións"
+
+#: converter/mymoneystatementreader.cpp:385
+msgid " Statement balance is not contained in statement."
+msgstr " O extracto non contén o saldo."
+
+#: converter/mymoneystatementreader.cpp:387
+msgid " Statement balance on %1 is reported to be %2"
+msgstr " Notifícase que o saldo do extracto o %1 é de %2"
+
+#: converter/mymoneystatementreader.cpp:389
+msgid " Transactions"
+msgstr " Asentos"
+
+#: converter/mymoneystatementreader.cpp:390
+msgid " %1 processed"
+msgstr " %1 procesados"
+
+#: converter/mymoneystatementreader.cpp:391
+msgid " %1 added"
+msgstr " %1 engadidos"
+
+#: converter/mymoneystatementreader.cpp:392
+msgid " %1 matched"
+msgstr " %1 casados"
+
+#: converter/mymoneystatementreader.cpp:393
+msgid " %1 duplicates"
+msgstr " %1 duplicados"
+
+#: converter/mymoneystatementreader.cpp:394
+msgid " Payees"
+msgstr " Beneficiarios"
+
+#: converter/mymoneystatementreader.cpp:395
+msgid " %1 created"
+msgstr " %1 criados"
+
+#: converter/mymoneystatementreader.cpp:483
+#, c-format
+msgid "Error creating security record: %1"
+msgstr "Aconteceu un erro ao criar o rexistro do valor bursátil: %1"
+
+#: converter/mymoneystatementreader.cpp:612
+msgid ""
+"This imported statement contains investment transactions with no security. "
+"These transactions will be ignored."
+msgstr ""
+"Este extracto importado contén asentos de investimentos sen valores "
+"bursátiles. Estes asentos serán ignorados."
+
+#: converter/mymoneystatementreader.cpp:803
+msgid "(Fees) "
+msgstr "(Comisións)"
+
+#: converter/mymoneystatementreader.cpp:880
+msgid ""
+"Do you want to add \"%1\" as payee/receiver?\n"
+"\n"
+msgstr ""
+"Desexa engadir a «%1» á lista de beneficiarios/receptores?\n"
+"\n"
+
+#: converter/mymoneystatementreader.cpp:881
+msgid ""
+"Selecting \"Yes\" will create the payee, \"No\" will skip creation of a "
+"payee record and remove the payee information from this transaction. "
+"Selecting \"Cancel\" aborts the import operation.\n"
+"\n"
+"If you select \"No\" here and mark the \"Don't ask again\" checkbox, the "
+"payee information for all following transactions referencing \"%1\" will be "
+"removed."
+msgstr ""
+"Escollendo «Si» criará un novo beneficiario, «Non» evitarao e eliminará deste "
+"asento os dados de beneficiario introducidos. Escollendo «Cancelar» abortará "
+"a operación de importación.\n"
+"\n"
+"Se escolle «Non» aquí e marca a opción «Non preguntar de novo», eliminarase a "
+"información do beneficiario de todos os asentos con referencia a «%1»."
+
+#: converter/mymoneystatementreader.cpp:917
+msgid "Save Category"
+msgstr "Gardar a categoría"
+
+#: converter/mymoneystatementreader.cpp:918
+msgid "No Category"
+msgstr "Sen categoría"
+
+#: converter/mymoneystatementreader.cpp:919 dialogs/rc.cpp:4
+msgid "Abort"
+msgstr "Abortar"
+
+#: converter/mymoneystatementreader.cpp:926
+msgid "Please select a default category for payee '%1':"
+msgstr "Escolla unha categoría predeterminada para o beneficiario «%1»:"
+
+#: converter/mymoneystatementreader.cpp:958
+msgid "Unable to add payee/receiver"
+msgstr "Non foi posíbel engadir o beneficiario/receptor"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid ""
+"KMyMoney has found a scheduled transaction named <b>%1</b> which matches an "
+"imported transaction. Do you want KMyMoney to enter this schedule now so "
+"that the transaction can be matched? "
+msgstr ""
+"KMyMoney atopou unha planificación de asentos chamada <b>%1</b> que casa cun "
+"asento importado. Desexa que KMyMoney introduza agora esta planificación de "
+"tal xeito que poda emparellar o asento?"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid "Schedule found"
+msgstr "Atopouse unha planificación"
+
+#: converter/mymoneystatementreader.cpp:1219
+msgid "Problem adding or matching imported transaction with id '%1': %2"
+msgstr ""
+"Aconteceu un problema ao engadir ou emparellar o asento importado coa id «%"
+"1»: %2"
+
+#: converter/mymoneystatementreader.cpp:1268
+msgid ""
+"<b>You have downloaded a statement for the following account:</b><br><br>"
+msgstr "<b>Descargou un extracto para a conta:</b><br><br>"
+
+#: converter/mymoneystatementreader.cpp:1269
+#, c-format
+msgid " - Account Name: %1"
+msgstr " - Nome da Conta: %1"
+
+#: converter/mymoneystatementreader.cpp:1270
+#, c-format
+msgid " - Account Type: %1"
+msgstr " - Tipo da conta: %1"
+
+#: converter/mymoneystatementreader.cpp:1271
+#, c-format
+msgid " - Account Number: %1"
+msgstr "- Número de conta: %1"
+
+#: converter/mymoneystatementreader.cpp:1279
+msgid "Do you want to import transactions to this account?"
+msgstr "Desexa importar transaccións a esta conta?"
+
+#: converter/mymoneystatementreader.cpp:1281
+msgid ""
+"KMyMoney cannot determine which of your accounts to use. You can create a "
+"new account by pressing the <b>Create</b> button or select another one "
+"manually from the selection box below."
+msgstr ""
+"KMyMoney non pode determinar cal das súas contas utilizar. Pode criar unha "
+"nova conta premendo o botón <b>Criar</b> ou escoller outra manualmente no "
+"despregábel de abaixo."
+
+#: converter/mymoneystatementreader.cpp:1287
+msgid ""
+"No account information has been found in the selected statement file. Please "
+"select an account using the selection box in the dialog or create a new "
+"account by pressing the <b>Create</b> button."
+msgstr ""
+"Non se atopou información da conta no ficheiro de extracto indicado. Escolla "
+"unha conta empregando a caixa de selección deste diálogo ou cree unha nova "
+"conta co botón <b>Criar</b>."
+
+#: converter/mymoneystatementreader.cpp:1294
+msgid "Import transactions"
+msgstr "Importar asentos"
+
+#: converter/mymoneystatementreader.cpp:1330
+msgid ""
+"You must select an account, create a new one, or press the <b>Abort</b> "
+"button."
+msgstr ""
+"Debe escoller unha conta, criar unha nova ou premer no botón <b>Abortar</b>."
+
+#: converter/mymoneygncreader.cpp:119
+msgid "%1: Sorry. This importer cannot handle version %2 of element %3"
+msgstr "%1: Este importador non pode manexar a versión %1 do elemento %2"
+
+#: converter/mymoneygncreader.cpp:193
+#, c-format
+msgid "Account%1"
+msgstr "Conta%1"
+
+#: converter/mymoneygncreader.cpp:197
+#, c-format
+msgid "Stock%1"
+msgstr "Acción%1"
+
+#: converter/mymoneygncreader.cpp:206
+#, c-format
+msgid "Payee%1"
+msgstr "Beneficiario%1"
+
+#: converter/mymoneygncreader.cpp:212
+#, c-format
+msgid "Schedule%1"
+msgstr "Planificación%1"
+
+#: converter/mymoneygncreader.cpp:262
+msgid "This version of the importer cannot handle multi-book files."
+msgstr "Esta versión do importador non pode manexar ficheiros multi-libro."
+
+#: converter/mymoneygncreader.cpp:912
+msgid "Invalid header for file. Should be 'gnc-v2'"
+msgstr "Cabezallo do ficheiro non válido. Debería ser «gnc-v2»"
+
+#: converter/mymoneygncreader.cpp:937 converter/mymoneygncreader.cpp:972
+#: converter/mymoneygncreader.cpp:1062
+#, c-format
+msgid ""
+"Import failed:\n"
+"\n"
+"%1"
+msgstr ""
+"Fallou a importación\n"
+"\n"
+"%1"
+
+#: converter/mymoneygncreader.cpp:1065
+msgid "Import complete"
+msgstr "Completouse a importación"
+
+#: converter/mymoneygncreader.cpp:1120
+msgid "Disguise your wealth"
+msgstr "Disimule a súa riqueza"
+
+#: converter/mymoneygncreader.cpp:1121
+msgid ""
+"Each monetary value on your file will be multiplied by a random number "
+"between 0.01 and 1.99\n"
+"with a different value used for each transaction. In addition, to further "
+"disguise the true\n"
+"values, you may enter a number between %1 and %2 which will be applied to "
+"all values.\n"
+"These numbers will not be stored in the file."
+msgstr ""
+"Cada valor monetario no seu ficheiro será multiplicado por un número "
+"aleatorio entre 0,01 e 1,99\n"
+"usando un valor diferente para cada asento. Ademais, para disfrazar aínda "
+"máis os valores\n"
+"reais, pode introducir un número entre %1 e %2 que será aplicado a todos os "
+"valores.\n"
+"Estes números non serán gardados no ficheiro."
+
+#: converter/mymoneygncreader.cpp:1135
+msgid "Loading commodities..."
+msgstr "Cargando as mercadorías..."
+
+#: converter/mymoneygncreader.cpp:1160
+msgid "Loading prices..."
+msgstr "Cargando os prezos..."
+
+#: converter/mymoneygncreader.cpp:1164 converter/mymoneygncreader.cpp:1171
+msgid "Imported History"
+msgstr "Historia importada"
+
+#: converter/mymoneygncreader.cpp:1251
+#, c-format
+msgid "Current importer does not recognize GnuCash account type %1"
+msgstr "O importador actual non recoñece o tipo de conta de GnuCash %1"
+
+#: converter/mymoneygncreader.cpp:1471
+msgid "Imported Transaction"
+msgstr "Asento importado"
+
+#: converter/mymoneygncreader.cpp:1519
+msgid "Loading templates..."
+msgstr "Cargando os modelos..."
+
+#: converter/mymoneygncreader.cpp:1531
+msgid "Unknown payee"
+msgstr "Beneficiario descoñecido"
+
+#: converter/mymoneygncreader.cpp:1723
+msgid "Loading schedules..."
+msgstr "Cargando as planificacións..."
+
+#: converter/mymoneygncreader.cpp:1735
+#, c-format
+msgid "Can't find template transaction for schedule %1"
+msgstr "Non se atopou o asento que serve de modelo á planificación %1"
+
+#: converter/mymoneygncreader.cpp:1910
+msgid "Reorganizing accounts..."
+msgstr "Reorganizando as contas..."
+
+#: converter/mymoneygncreader.cpp:1972
+msgid ""
+"Your main currency seems to be %1 (%2); do you want to set this as your base "
+"currency?"
+msgstr ""
+"A súa divisa principal semella ser %1 (%2); desexa póla como a súa divisa de "
+"base?"
+
+#: converter/mymoneygncreader.cpp:1993
+msgid "More"
+msgstr "Máis"
+
+#: converter/mymoneygncreader.cpp:1997
+msgid "Save Report"
+msgstr "Gardar o informe"
+
+#: converter/mymoneygncreader.cpp:2017
+msgid ""
+"Problems were encountered in converting schedule '%1'.\n"
+"Do you want to review or edit it now?"
+msgstr ""
+"Atopáronse problemas ao converter a planificación «%1».\n"
+"Desexa revisala ou editala agora?"
+
+#: converter/mymoneygncreader.cpp:2039
+msgid ""
+"Found:\n"
+"\n"
+msgstr ""
+"Atopado:\n"
+"\n"
+
+#: converter/mymoneygncreader.cpp:2040
+msgid " commodities (equities)\n"
+msgstr " mercadorías (patrimonios)\n"
+
+#: converter/mymoneygncreader.cpp:2041
+msgid " prices\n"
+msgstr " prezos\n"
+
+#: converter/mymoneygncreader.cpp:2042
+msgid " accounts\n"
+msgstr " contas\n"
+
+#: converter/mymoneygncreader.cpp:2043
+msgid " transactions\n"
+msgstr " asentos\n"
+
+#: converter/mymoneygncreader.cpp:2044
+msgid " schedules\n"
+msgstr " planificacións\n"
+
+#: converter/mymoneygncreader.cpp:2047
+msgid "No inconsistencies were detected"
+msgstr "Non se atoparon inconsistencias"
+
+#: converter/mymoneygncreader.cpp:2049
+msgid " inconsistencies were detected and corrected\n"
+msgstr " inconsistencias foron detectadas e corrixidas\n"
+
+#: converter/mymoneygncreader.cpp:2054
+msgid " orphan accounts were created\n"
+msgstr " contas orfas foron criadas\n"
+
+#: converter/mymoneygncreader.cpp:2059
+msgid " possible schedule problems were noted\n"
+msgstr " posíbeis problemas en planificacións foron notificados\n"
+
+#: converter/mymoneygncreader.cpp:2064
+msgid "Small Business Features (Customers, Invoices, etc.)"
+msgstr "Funcionalidades para pequenos negocios (clientes, facturas, etc)"
+
+#: converter/mymoneygncreader.cpp:2065 views/kmymoneyview.cpp:241
+#: views/kmymoneyview.cpp:243
+msgid "Budgets"
+msgstr "Orzamentos"
+
+#: converter/mymoneygncreader.cpp:2066
+msgid "Lots"
+msgstr "Lotes"
+
+#: converter/mymoneygncreader.cpp:2068
+msgid "The following features found in your file are not currently supported:"
+msgstr ""
+"As seguintes funcionalidades que se atopan no seu ficheiro non están "
+"soportadas:"
+
+#: converter/mymoneygncreader.cpp:2071
+msgid ""
+"\n"
+"\n"
+"Press More for further information"
+msgstr ""
+"\n"
+"\n"
+"Prema en Máis para obter información adicional"
+
+#: converter/mymoneygncreader.cpp:2139
+msgid "Orphan created from unknown gnucash account"
+msgstr "Criouse unha Orfa a partir dunha conta descoñecida de gnucash"
+
+#: converter/mymoneygncreader.cpp:2170
+msgid "Internal error - invalid interval char in incrDate"
+msgstr "Erro interno - intervalo de char non válido en incrDate"
+
+#: converter/mymoneygncreader.cpp:2233
+msgid "Enter the investment account name "
+msgstr "Introduza o nome da conta de investimentos"
+
+#: converter/mymoneygncreader.cpp:2234
+msgid "My Investments"
+msgstr "Os meus investimentos"
+
+#: converter/mymoneygncreader.cpp:2269
+#, c-format
+msgid "Select parent investment account or enter new name. Stock %1"
+msgstr ""
+"Escolla a conta de investimentos pai ou introduza un novo nome. Acción %1"
+
+#: converter/mymoneygncreader.cpp:2292 converter/mymoneygncreader.cpp:2307
+msgid "%1 is not an Investment Account. Do you wish to make it one?"
+msgstr "%1 non é unha conta de Investimento. Desexa convertela nunha delas?"
+
+#: converter/mymoneygncreader.cpp:2408
+msgid ""
+"An Investment account must be a child of an Asset account\n"
+"Account %1 will be stored under the main Asset account"
+msgstr ""
+"As contas de Investimento deben ser fillas dunha conta de Activos\n"
+"A conta %1 será posta baixo a conta principal de Activos"
+
+#: converter/mymoneygncreader.cpp:2410
+msgid ""
+"An Income account must be a child of an Income account\n"
+"Account %1 will be stored under the main Income account"
+msgstr ""
+"As contas de Ingresos deben ser fillas dunha conta de Ingresos\n"
+"A conta %1 será posta baixo a conta principal de Ingresos"
+
+#: converter/mymoneygncreader.cpp:2412
+msgid ""
+"An Expense account must be a child of an Expense account\n"
+"Account %1 will be stored under the main Expense account"
+msgstr ""
+"As contas de Gastos deben ser fillas dunha conta de Gastos\n"
+"A conta %1 será posta baixo a conta principal de Gastos"
+
+#: converter/mymoneygncreader.cpp:2414
+msgid ""
+"One or more transactions contain a reference to an otherwise unknown "
+"account\n"
+"An asset account with the name %1 has been created to hold the data"
+msgstr ""
+"Un ou máis asentos conteñen unha referencia a unha conta descoñecida\n"
+"Criouse unha conta de activos co nome %1 para conter estes dados"
+
+#: converter/mymoneygncreader.cpp:2416
+msgid "Schedule %1 has interval of %2 which is not currently available"
+msgstr ""
+"A planificación %1 ten un intervalo de %2, que na actualidade non está "
+"dispoñíbel"
+
+#: converter/mymoneygncreader.cpp:2417
+msgid "Schedule %1 dropped at user request"
+msgstr "A planificación %1 foi eliminada a requirimento do usuario"
+
+#: converter/mymoneygncreader.cpp:2418
+msgid "Schedule %1 contains unknown action (key = %2, type = %3)"
+msgstr ""
+"A planificación %1 contén unha acción descoñecida (chave = %1, tipo = %3)"
+
+#: converter/mymoneygncreader.cpp:2419
+msgid "Schedule %1 contains multiple actions; only one has been imported"
+msgstr "A planificación %1 contén múltiplas accións; só foi importada unha"
+
+#: converter/mymoneygncreader.cpp:2420
+msgid "Schedule %1 contains no valid splits"
+msgstr "A planificación %1 non contén partidas válidas"
+
+#: converter/mymoneygncreader.cpp:2421
+msgid ""
+"Schedule %1 appears to contain a formula. GnuCash formulae are not "
+"convertible"
+msgstr ""
+"A planificación %1 parece conter unha fórmula. As fórmulas de GnuCash non "
+"poden ser convertidas"
+
+#: converter/mymoneygncreader.cpp:2422
+msgid ""
+"Schedule %1 contains unknown interval specification; please check for "
+"correct operation"
+msgstr ""
+"A planificación %1 contén unha especificación de intervalo descoñecida; por "
+"favor comprobe que o funcionamento sexa o correcto"
+
+#: converter/mymoneygncreader.cpp:2423
+msgid ""
+"Schedule %1 contains a deferred interval specification; please check for "
+"correct operation"
+msgstr ""
+"A planificación %1 contén unha especificación de intervalo demorado; por "
+"favor comprobe que o funcionamento sexa o correcto"
+
+#: converter/mymoneygncreader.cpp:2424
+msgid ""
+"Account or Category %1, transaction date %2; split contains invalid value; "
+"please check"
+msgstr ""
+"Conta ou Categoría %1, data do asento %2; a partida contén valores non "
+"válidos; por favor verifíqueo"
+
+#: kmymoneyutils.cpp:146
+msgid "&New Schedule..."
+msgstr "&Novo plano de asentos..."
+
+#: kmymoneyutils.cpp:148
+msgid "Create a new schedule."
+msgstr "Cría un novo asento planificado."
+
+#: kmymoneyutils.cpp:149
+msgid "Use this to create a new schedule."
+msgstr "Use isto para criar un novo asento planificado."
+
+#: kmymoneyutils.cpp:158
+msgid "&Filter"
+msgstr "&Filtrar"
+
+#: kmymoneyutils.cpp:160
+msgid "Filter out accounts"
+msgstr "Filtrar as contas"
+
+#: kmymoneyutils.cpp:161
+msgid "Use this to filter out accounts"
+msgstr "Use isto para filtrar as contas"
+
+#: kmymoneyutils.cpp:192
+msgid "Preferred accounts"
+msgstr "Contas preferidas"
+
+#: kmymoneyutils.cpp:193
+msgid "Payment accounts"
+msgstr "Contas de gastos"
+
+#: kmymoneyutils.cpp:194
+msgid "Favorite reports"
+msgstr "Informes favoritos"
+
+#: kmymoneyutils.cpp:195
+msgid "Forecast (schedule)"
+msgstr "Prognóstico (planificación)"
+
+#: kmymoneyutils.cpp:196
+msgid "Networth forecast"
+msgstr "Prognóstico do valor neto"
+
+#: kmymoneyutils.cpp:197
+msgid "Forecast (history)"
+msgstr "Prognóstico (histórico)"
+
+#: kmymoneyutils.cpp:198
+msgid "Assets and Liabilities"
+msgstr "Activos e pasivos"
+
+#: kmymoneyutils.cpp:199 reports/pivottable.cpp:2416 views/khomeview.cpp:1393
+#: widgets/rc.cpp:70
+msgid "Budget"
+msgstr "Orzamento"
+
+#: kmymoneyutils.cpp:200
+msgid "CashFlow"
+msgstr "Fluxo de caixa"
+
+#: dialogs/kenterscheduledlg.cpp:153 kmymoneyutils.cpp:366
+msgid "Unable to load schedule details"
+msgstr "Non foi posíbel cargar os detalles do asento planificado"
+
+#: kmymoneyutils.cpp:390 widgets/register.cpp:473
+msgid ""
+"_: Reconcile state 'Not reconciled'\n"
+"Not reconciled"
+msgstr "Non conciliado"
+
+#: kmymoneyutils.cpp:393 widgets/register.cpp:476
+msgid ""
+"_: Reconcile state 'Cleared'\n"
+"Cleared"
+msgstr "Librado"
+
+#: kmymoneyutils.cpp:396 widgets/register.cpp:479
+msgid ""
+"_: Reconcile state 'Reconciled'\n"
+"Reconciled"
+msgstr "Conciliado"
+
+#: kmymoneyutils.cpp:399 widgets/register.cpp:482
+msgid ""
+"_: Reconcile state 'Frozen'\n"
+"Frozen"
+msgstr "Conxelado"
+
+#: kmymoneyutils.cpp:410
+msgid ""
+"_: Reconcile flag C\n"
+"C"
+msgstr "L"
+
+#: kmymoneyutils.cpp:413
+msgid ""
+"_: Reconcile flag R\n"
+"R"
+msgstr "C"
+
+#: kmymoneyutils.cpp:416
+msgid ""
+"_: Reconcile flag F\n"
+"F"
+msgstr "B"
+
+#: kmymoneyutils.cpp:419
+msgid ""
+"_: Flag for unknown reconciliation state\n"
+"?"
+msgstr "?"
+
+#: _tips.cpp:3
+msgid ""
+"<p>...that you can change the sort order of ledger entries by\n"
+"right-clicking the header of the ledger view?\n"
+msgstr ""
+"<p> ... que pode cambiar a orde de selección das entradas nos libros "
+"diarios\n"
+"premendo co botón dereito no cabezallo da vista do libro?\n"
+
+#: _tips.cpp:9
+msgid ""
+"<p>...that you can easily move to the other side of a transfer transaction\n"
+"by opening the context menu with the right mouse button and selecting one of "
+"the\n"
+"'Goto' functions?\n"
+msgstr ""
+"<p> ...que se pode mover facilmente ao outro lado dun asento de "
+"transferencia\n"
+"abrindo o menú contextual co botón dereito do rato e escollendo\n"
+"unha das funcións «Ir para..»?\n"
+
+#: _tips.cpp:16
+msgid ""
+"<p>...that you can start editing a transaction by double-clicking on the\n"
+"transaction in the register?\n"
+msgstr ""
+"<p>...que pode comezar a editar un asento mediante un duplo-clic\n"
+"no asento, no rexistro?\n"
+
+#: _tips.cpp:22
+msgid ""
+"<p>...that you can show more details of the selected transaction in the\n"
+"register by selecting the 'ledger lens' feature in the settings dialog?\n"
+msgstr ""
+"<p>...que pode ver máis detalles do asento que escolla no rexistro\n"
+"mediante a función «lente do libro maior», do diálogo configuración?\n"
+
+#: _tips.cpp:28
+msgid ""
+"<p>...that transactions with no category assigned or split\n"
+"transactions with unassigned values are marked with an exclamation mark \n"
+"on a yellow triangle in the register?\n"
+msgstr ""
+"<p>... que os asentos sen categoría asinada e as partidas\n"
+"con valores sen asinar chiscan cun sinal triangular cunha exclamación \n"
+"no rexistro?\n"
+
+#: _tips.cpp:35
+msgid ""
+"<p>...that you can show all details of the transactions in the register\n"
+"by typing &lt;Ctrl-T&gt; or selecting the 'Settings/Show Transaction "
+"Detail'\n"
+"menu entry? You can turn this feature off the same way.\n"
+msgstr ""
+"<p>...que pode mostrar todos os detalles dos asentos no libro maior\n"
+"tecleando &lt;Ctrl-T&gt; ou mediante a opción de menú\n"
+"«Configuración/Mostrar os detalles dos asentos». Pode desactivala do mesmo "
+"xeito.\n"
+
+#: _tips.cpp:42
+msgid ""
+"<p>...that you can switch between a listing of all accounts or\n"
+"an icon view of all asset and liability accounts with the tabs\n"
+"in the accounts view?\n"
+msgstr ""
+"<p>...que pode alternar entre un listado de todas as contas\n"
+"ou unha vista en iconas dos activos e pasivos mediante\n"
+"as páxinas na vista das contas?\n"
+
+#: _tips.cpp:49
+msgid "<p>...that the KMyMoney development team wishes you a nice day?\n"
+msgstr ""
+"<p>...que a equipa de desenvolvemento de KMyMoney lle desexa teña un bon "
+"día?\n"
+
+#: _tips.cpp:54
+msgid ""
+"<p>...you can use your own external filter program to convert any\n"
+"import format to QIF on the fly? See the QIF profile editor for\n"
+"more details.\n"
+msgstr ""
+"<p>...que pode empregar o seu proprio programa externo para converter\n"
+"calquera formato de importación a QIF? Consulte o editor de perfís QIF para\n"
+"obter máis detalles.\n"
+
+#: _tips.cpp:61
+msgid ""
+"<p>...that you can create a scheduled transaction from an existing\n"
+"one by selecting the context menu on a transaction in the ledger\n"
+"or the \"More...\"-menu in the transaction form?\n"
+msgstr ""
+"<p>...que pode criar asentos planificados a partir dun xa existente\n"
+"mediante o menú contextual nun asento no libro maior \n"
+"ou co menú «Máis...» no formulario de escrituración?\n"
+
+#: _tips.cpp:68
+msgid ""
+"<p>...that you can switch to the payee of a transaction\n"
+"by selecting the context menu on a transaction in the ledger\n"
+"or in the transaction menu?\n"
+msgstr ""
+"<p>...que pode ir ao beneficiario dun asento\n"
+"mediante o menú contextual nun asento no libro maior\n"
+"ou no menú da transacción?\n"
+
+#: _tips.cpp:75
+msgid ""
+"<p>...that you can modify the colors and fonts used for the ledgers\n"
+"via <i>Configure/Register/...</i>?\n"
+msgstr ""
+"<p>...que pode modificar as cores e tipos de letra usados nos libros\n"
+"mediante <i>Configurar/Rexistro/...</i>?\n"
+
+#: _tips.cpp:81
+msgid ""
+"<p>...that you can hide transactions prior to a specific date?\n"
+"The date can be modified via <i>Configure/Register/Filter</i>.\n"
+msgstr ""
+"<p>...que pode agochar os asentos anteriores a unha certa data?\n"
+"A data pode escollela mediante <i>Configurar/Rexistro/Filtro</i>.\n"
+
+#: _tips.cpp:87
+msgid ""
+"<p>...that you can customize the \"Home-Page\"\n"
+"via <i>Configure/Home</i>?\n"
+msgstr ""
+"<p>...que pode personalizar a «Páxina de Inicio»\n"
+"mediante <i>Configurar/Páxina inicial</i>?\n"
+
+#: _tips.cpp:93
+msgid ""
+"<p>...that you can enter new transactions even while reconciling\n"
+"an account? You can also make the transaction form visible.\n"
+msgstr ""
+"<p>...que pode introducir novos asentos ao tempo que reconcilia unha conta? "
+"Tamén pode facer visíbel o formulario de escrituración.\n"
+
+#: _tips.cpp:99
+msgid ""
+"<p>...that you can actively support the KMyMoney development team in\n"
+"cases that heavily depend on your data? You can save your data in an\n"
+"anonymized way for this support.<p>\n"
+"Just open your data file and immediately\n"
+"select <b>File/Save as...</b>. In the <b>Save As...</b> dialog\n"
+"select the filter <b>Anonymous Files</b> and make sure your file gets\n"
+"the extensions <b>.anon.xml</b>. <p>\n"
+"To verify, how the data looks like you are about to send away, you can open\n"
+"this file in KMyMoney and see how the developers see your data.\n"
+msgstr ""
+"<p> ... que pode apoiar activamente á equipa de desenvolvemento de\n"
+"KMyMoney nos casos que dependan dos seus dados? Pode gardalos\n"
+"nun xeito anónimo para esta fin.<p>\n"
+"Simplemente abra o seu ficheiro e escolla\n"
+"<b>Ficheiro/Gardar como ...</b>. No diálogo <b>Gardar como...</b>\n"
+"escolla o filtro <b>Ficheiros anónimos</b> e asegúrese de que o ficheiro\n"
+"leva as extensións <b>.anon.xml</b>.<p>\n"
+"Para verificar como se verán os dados que está a piques de enviar, abra "
+"este\n"
+" ficheiro con KMyMoney e veraos da mesma maneira que os desenvolventes.\n"
+
+#: _tips.cpp:112
+msgid ""
+"<p>... that you can import your bank statements even without a network \n"
+"connection? Just select the file (OFX or QIF) from the File->Import menu.</"
+"p>\n"
+"<p>Provided by Jose Jorge</p>\n"
+msgstr ""
+"<p>... que pode importar os extractos bancarios mesmo sen conexión á rede? "
+"Simplemente escolla o ficheiro (OFX ou QIF) no menú Ficheiro->Importar.</p>\n"
+"<p>Fornecido por Jose Jorge</p>\n"
+
+#: reports/listtable.cpp:159 reports/listtable.cpp:163
+#: reports/pivottable.cpp:1564
+msgid ""
+"_: Report date range\n"
+"%1 through %2"
+msgstr "Do %1 ao %2"
+
+#: reports/listtable.cpp:171 reports/pivottable.cpp:1571
+#, c-format
+msgid "All currencies converted to %1"
+msgstr "Todas as moedas convertidas a %1"
+
+#: reports/listtable.cpp:172 reports/pivottable.cpp:1328
+msgid "All currencies converted to %1\n"
+msgstr "Todas as divisas convertidas a %1\n"
+
+#: reports/listtable.cpp:176 reports/pivottable.cpp:1573
+msgid "All values shown in %1 unless otherwise noted"
+msgstr "Todos os valores en %1 a non ser que se indique outra cousa"
+
+#: reports/listtable.cpp:177 reports/pivottable.cpp:1330
+msgid "All values shown in %1 unless otherwise noted\n"
+msgstr ""
+"Todos os valores son mostrados en %1 a non ser que se indique o contrario\n"
+
+#: dialogs/kequitypriceupdatedlg.cpp:73 dialogs/kfindtransactiondlg.cpp:188
+#: dialogs/rc.cpp:53 dialogs/rc.cpp:63 dialogs/rc.cpp:208 dialogs/rc.cpp:805
+#: dialogs/settings/rc.cpp:111 dialogs/transactioneditor.cpp:844
+#: reports/listtable.cpp:196 views/khomeview.cpp:412 views/khomeview.cpp:485
+#: views/khomeview.cpp:519 views/rc.cpp:61 widgets/kmymoneypriceview.cpp:128
+#: widgets/rc.cpp:36 widgets/register.cpp:565 widgets/transaction.cpp:1027
+#: widgets/transaction.cpp:1484
+msgid "Date"
+msgstr "Data"
+
+#: reports/listtable.cpp:198
+msgid "Num"
+msgstr "Nº"
+
+#: dialogs/kfindtransactiondlg.cpp:204 dialogs/kmymoneysplittable.cpp:78
+#: dialogs/kmymoneysplittable.cpp:831 dialogs/rc.cpp:217
+#: dialogs/transactioneditor.cpp:831 dialogs/transactioneditor.cpp:1374
+#: dialogs/transactioneditor.cpp:1382 dialogs/transactioneditor.cpp:1396
+#: dialogs/transactioneditor.cpp:1449 dialogs/transactioneditor.cpp:1456
+#: dialogs/transactioneditor.cpp:1504 reports/listtable.cpp:200
+#: views/kcategoriesview.cpp:76 views/rc.cpp:62 widgets/rc.cpp:115
+#: widgets/register.cpp:62 widgets/transaction.cpp:848
+#: widgets/transaction.cpp:906
+msgid "Category"
+msgstr "Categoría"
+
+#: dialogs/kmymoneysplittable.cpp:79 dialogs/kmymoneysplittable.cpp:837
+#: reports/listtable.cpp:202 widgets/rc.cpp:101 widgets/transaction.cpp:1042
+#: widgets/transaction.cpp:1628
+msgid "Memo"
+msgstr "Concepto"
+
+#: reports/listtable.cpp:203
+msgid "Top Category"
+msgstr "Categoría nai"
+
+#: reports/listtable.cpp:204
+msgid "Category Type"
+msgstr "Tipo de categoría"
+
+#: dialogs/rc.cpp:229 dialogs/settings/rc.cpp:152 reports/listtable.cpp:207
+#: widgets/kmymoneycombo.cpp:346 widgets/rc.cpp:107
+msgid "Reconciled"
+msgstr "Conciliados"
+
+#: reports/listtable.cpp:208 widgets/rc.cpp:117
+msgid "Action"
+msgstr "Acción"
+
+#: dialogs/investactivities.cpp:199 dialogs/investactivities.cpp:287
+#: dialogs/investactivities.cpp:424 dialogs/investactivities.cpp:504
+#: dialogs/investactivities.cpp:544 dialogs/investtransactioneditor.cpp:241
+#: reports/listtable.cpp:209 widgets/rc.cpp:103 widgets/transaction.cpp:1513
+msgid "Shares"
+msgstr "Participacións"
+
+#: dialogs/investtransactioneditor.cpp:248
+#: dialogs/investtransactioneditor.cpp:1067
+#: dialogs/investtransactioneditor.cpp:1068
+#: dialogs/investtransactioneditor.cpp:1072
+#: dialogs/kequitypriceupdatedlg.cpp:72 dialogs/rc.cpp:109 dialogs/rc.cpp:164
+#: dialogs/rc.cpp:251 dialogs/rc.cpp:756 dialogs/rc.cpp:827
+#: dialogs/settings/rc.cpp:117 reports/listtable.cpp:210
+#: reports/listtable.cpp:211 reports/pivottable.cpp:2441
+#: views/kinvestmentview.cpp:80 widgets/kmymoneypriceview.cpp:129
+#: widgets/rc.cpp:43 widgets/rc.cpp:105 widgets/register.cpp:573
+msgid "Price"
+msgstr "Prezo"
+
+#: reports/listtable.cpp:212
+msgid "Net Value"
+msgstr "Valor neto"
+
+#: reports/listtable.cpp:213
+msgid "Buys"
+msgstr "Compras"
+
+#: reports/listtable.cpp:214
+msgid "Sells"
+msgstr "Vendas"
+
+#: reports/listtable.cpp:215
+msgid "Dividends Reinvested"
+msgstr "Dividendos reinvestidos"
+
+#: reports/listtable.cpp:216
+msgid "Dividends Paid Out"
+msgstr "Dividendos pagos"
+
+#: reports/listtable.cpp:217
+msgid "Starting Balance"
+msgstr "Saldo inicial"
+
+#: reports/listtable.cpp:218
+msgid "Ending Balance"
+msgstr "Saldo final"
+
+#: reports/listtable.cpp:219
+msgid "Annualized Return"
+msgstr "Retorno anual"
+
+#: reports/listtable.cpp:220
+msgid "Return On Investment"
+msgstr "Retorno do investimento"
+
+#: dialogs/rc.cpp:106 dialogs/rc.cpp:161 dialogs/rc.cpp:248 dialogs/rc.cpp:505
+#: dialogs/rc.cpp:570 dialogs/rc.cpp:667 dialogs/rc.cpp:753
+#: reports/listtable.cpp:223 widgets/register.cpp:570
+msgid "Payment"
+msgstr "Pagamento"
+
+#: dialogs/rc.cpp:111 dialogs/rc.cpp:166 dialogs/rc.cpp:253 dialogs/rc.cpp:709
+#: dialogs/rc.cpp:758 reports/listtable.cpp:224 widgets/rc.cpp:119
+#: widgets/register.cpp:575
+msgid "Balance"
+msgstr "Saldo"
+
+#: reports/listtable.cpp:227 views/kscheduledview.cpp:74
+msgid "Next Due Date"
+msgstr "Próxima data de vencemento"
+
+#: reports/listtable.cpp:229 views/kscheduledview.cpp:76
+msgid "Payment Method"
+msgstr "Método de pagamento"
+
+#: dialogs/rc.cpp:803 reports/listtable.cpp:231 widgets/rc.cpp:2
+msgid "Description"
+msgstr "Descrición"
+
+#: reports/listtable.cpp:232
+msgid "Opening Date"
+msgstr "Data de abertura"
+
+#: reports/listtable.cpp:234
+msgid "Balance Early Warning"
+msgstr "Aviso anticipado de saldo"
+
+#: reports/listtable.cpp:235
+msgid "Balance Max Limit"
+msgstr "Límite máximo do saldo"
+
+#: reports/listtable.cpp:236
+msgid "Credit Early Warning"
+msgstr "Aviso anticipado de crédito"
+
+#: reports/listtable.cpp:237
+msgid "Credit Max Limit"
+msgstr "Límite máximo de crédito"
+
+#: dialogs/rc.cpp:376 reports/listtable.cpp:238
+msgid "Tax"
+msgstr "Imposto"
+
+#: reports/listtable.cpp:239
+msgid "Preferred"
+msgstr "Preferida"
+
+#: reports/listtable.cpp:240
+msgid "Loan Amount"
+msgstr "Importe do empréstito"
+
+#: dialogs/rc.cpp:511 reports/listtable.cpp:241
+msgid "Interest Rate"
+msgstr "Taxa de xuro"
+
+#: reports/listtable.cpp:242
+msgid "Next Interest Change"
+msgstr "Vindeira mudanza dos xuros"
+
+#: reports/listtable.cpp:243
+msgid "Periodic Payment"
+msgstr "Pagamento periódico"
+
+#: reports/listtable.cpp:244
+msgid "Final Payment"
+msgstr "Pagamento final"
+
+#: reports/listtable.cpp:245 views/khomeview.cpp:766 views/khomeview.cpp:1265
+#: views/khomeview.cpp:1273
+msgid "Current Balance"
+msgstr "Saldo actual"
+
+#: dialogs/investactivities.cpp:201 dialogs/investactivities.cpp:289
+#: dialogs/investactivities.cpp:368 dialogs/investactivities.cpp:426
+#: dialogs/rc.cpp:327 reports/listtable.cpp:360 reports/listtable.cpp:364
+#: reports/listtable.cpp:556 reports/listtable.cpp:558
+#: reports/pivottable.cpp:1343 reports/pivottable.cpp:1445
+#: reports/pivottable.cpp:1505 reports/pivottable.cpp:1598
+#: reports/pivottable.cpp:1768 reports/pivottable.cpp:1845
+#: reports/pivottable.cpp:2165 reports/pivottable.cpp:2167
+#: reports/pivottable.cpp:2187 reports/pivottable.cpp:2189
+#: reports/querytabletest.cpp:134 reports/querytabletest.cpp:135
+#: reports/querytabletest.cpp:136 reports/querytabletest.cpp:137
+#: reports/querytabletest.cpp:162 reports/querytabletest.cpp:163
+#: reports/querytabletest.cpp:164 reports/querytabletest.cpp:197
+#: reports/querytabletest.cpp:198 reports/querytabletest.cpp:224
+#: reports/querytabletest.cpp:250 reports/querytabletest.cpp:251
+#: reports/querytabletest.cpp:252 reports/querytabletest.cpp:275
+#: reports/querytabletest.cpp:276 reports/querytabletest.cpp:277
+#: reports/querytabletest.cpp:366 reports/querytabletest.cpp:422
+#: reports/querytabletest.cpp:423 views/kforecastview.cpp:568 views/rc.cpp:18
+#: widgets/kmymoneyaccounttreeforecast.cpp:139 widgets/transaction.cpp:1643
+msgid "Total"
+msgstr "Total"
+
+#: reports/listtable.cpp:444
+msgid "Initial Market Value"
+msgstr "Valor de mercado inicial"
+
+#: reports/listtable.cpp:445
+msgid "Ending Market Value"
+msgstr "Valor de mercado final"
+
+#: reports/listtable.cpp:448 reports/querytabletest.cpp:651
+msgid "Opening Balance"
+msgstr "Saldo de abertura"
+
+#: reports/listtable.cpp:449 reports/querytabletest.cpp:652
+#: reports/querytabletest.cpp:653
+msgid "Closing Balance"
+msgstr "Saldo final"
+
+#: reports/listtable.cpp:490 reports/listtable.cpp:491
+msgid "Calculated"
+msgstr "Calculados"
+
+#: reports/listtable.cpp:572 reports/listtable.cpp:574
+#: reports/pivottable.cpp:1530 reports/pivottable.cpp:1886
+#: reports/querytabletest.cpp:138 reports/querytabletest.cpp:165
+#: reports/querytabletest.cpp:199 reports/querytabletest.cpp:225
+#: reports/querytabletest.cpp:253 reports/querytabletest.cpp:278
+#: reports/querytabletest.cpp:367 reports/querytabletest.cpp:402
+#: reports/querytabletest.cpp:424 reports/querytabletest.cpp:548
+#: reports/querytabletest.cpp:551 reports/querytabletest.cpp:586
+msgid "Grand Total"
+msgstr "Suma total"
+
+#: dialogs/rc.cpp:233 reports/pivottable.cpp:339 views/kscheduledview.cpp:174
+#: views/kscheduledview.cpp:433 views/kscheduledview.cpp:449
+#: widgets/kmymoneyscheduledcalendar.cpp:48
+msgid "Transfers"
+msgstr "Transferencias"
+
+#: reports/pivottable.cpp:1951
+msgid "Legend"
+msgstr "Lenda"
+
+#: reports/pivottable.cpp:2411 views/khomeview.cpp:1406
+#: views/khomeview.cpp:1443
+msgid "Actual"
+msgstr "Real"
+
+#: reports/pivottable.cpp:2421 views/khomeview.cpp:1409
+#: views/khomeview.cpp:1446
+msgid "Difference"
+msgstr "Diferenza"
+
+#: reports/pivottable.cpp:2431
+msgid "Moving Average"
+msgstr "Media móbil"
+
+#: reports/pivottable.cpp:2436
+msgid "Moving Average Price"
+msgstr "Prezo da media móbil"
+
+#: reports/objectinfotable.cpp:214 reports/querytable.cpp:693
+#: reports/querytable.cpp:736 reports/querytable.cpp:1356
+#: reports/querytable.cpp:1375 views/kpayeesview.cpp:742
+#, c-format
+msgid "Transfer from %1"
+msgstr "Transferir desde %1"
+
+#: reports/objectinfotable.cpp:215 reports/querytable.cpp:694
+#: reports/querytable.cpp:735 reports/querytable.cpp:1355
+#: reports/querytable.cpp:1374 views/kpayeesview.cpp:740
+#, c-format
+msgid "Transfer to %1"
+msgstr "Transferir a %1"
+
+#: reports/querytabletest.cpp:471 views/kreportsview.cpp:1144
+msgid "Investment Transactions"
+msgstr "Asentos do Investimento"
+
+#: reports/querytabletest.cpp:472 reports/querytabletest.cpp:564
+msgid "Test Report"
+msgstr "Informe de proba"
+
+#: reports/querytabletest.cpp:547 reports/querytabletest.cpp:550
+msgid "Total Stock 1"
+msgstr "Total acción 1"
+
+#: reports/querytabletest.cpp:563 views/kreportsview.cpp:1174
+msgid "Investment Performance by Account"
+msgstr "Rendemento do Investimento por Conta"
+
+#: reports/querytable.cpp:431 reports/querytable.cpp:1200
+#, c-format
+msgid "Month of %1"
+msgstr "Mes de %1"
+
+#: reports/querytable.cpp:432 reports/querytable.cpp:1201
+#, c-format
+msgid "Week of %1"
+msgstr "Semana de %1"
+
+#: reports/querytable.cpp:576 reports/querytable.cpp:739
+#: reports/querytable.cpp:858 reports/querytable.cpp:1325
+#: reports/querytable.cpp:1481
+msgid "No Institution"
+msgstr "Sen entidade"
+
+#: reports/querytable.cpp:580 reports/querytable.cpp:1329
+msgid "[Empty Payee]"
+msgstr "[Sen beneficiario]"
+
+#: reports/querytable.cpp:615 reports/querytable.cpp:1361
+msgid "[Split Transaction]"
+msgstr "[Varias partidas]"
+
+#: reports/querytable.cpp:616 reports/querytable.cpp:617
+msgid "Split"
+msgstr "Detallar"
+
+#: main.cpp:51
+msgid ""
+"\n"
+"KMyMoney, the Personal Finance Manager for KDE.\n"
+"\n"
+"Please consider contributing to this project with code and/or suggestions."
+msgstr ""
+"\n"
+"KMyMoney, o xestor de finanzas persoais de KDE.\n"
+"\n"
+"Pode contribuír neste proxecto mediante código e/ou suxestións."
+
+#: main.cpp:55
+msgid "language to be used"
+msgstr "linguaxe a usar"
+
+#: main.cpp:56
+msgid "don't open last used file"
+msgstr "non usar o último ficheiro aberto"
+
+#: main.cpp:57
+msgid "enable performance timers"
+msgstr "habilitar os cronómetros de rendemento"
+
+#: main.cpp:61
+msgid "turn on program traces"
+msgstr "habilitar as trazas do programa"
+
+#: main.cpp:62
+msgid "dump the names of all defined KAction objects to stdout and quit"
+msgstr ""
+"envorcar os nomes de todos os obxectos de KAction definidos en stdout e saír"
+
+#: main.cpp:66
+msgid "file to open"
+msgstr "o ficheiro a abrir"
+
+#: main.cpp:92
+msgid "Memory leakage detection"
+msgstr "Detección de perdas de memoria"
+
+#: main.cpp:96
+msgid "Compiled with the following settings:\n"
+msgstr "Compilado coas seguintes opcións:\n"
+
+#: dialogs/kmymoneysplittable.cpp:650 dialogs/ksplittransactiondlg.cpp:277
+#: main.cpp:98
+msgid "KMyMoney"
+msgstr "KMyMoney"
+
+#: main.cpp:104
+msgid "Initial idea, much initial source code, Project admin"
+msgstr "Idea inicial, moito do código fonte inicial, administrador do proxecto"
+
+#: main.cpp:105
+msgid "Core engine, Release Manager, Project admin"
+msgstr "Núcleo do programa, Xerente de versións, Administrador do proxecto"
+
+#: main.cpp:106
+msgid "Reporting logic, OFX Import"
+msgstr "Lóxica dos informes, Importación OFX"
+
+#: main.cpp:107
+msgid "Database backend, maintainer stable branch"
+msgstr "Infraestrutura para bases de datos, mantenedor da galla estábel"
+
+#: main.cpp:108
+msgid "Forecast, Reports"
+msgstr "Prognósticos e informes"
+
+#: main.cpp:109
+msgid "Project Admin"
+msgstr "Administrador do proxecto"
+
+#: main.cpp:110
+msgid "Developer"
+msgstr "Desenvolvente"
+
+#: main.cpp:111
+msgid "Database backend"
+msgstr "Infraestrutura para base de dados"
+
+#: main.cpp:113
+msgid "Initial investment support"
+msgstr "Soporte inicial de investimentos"
+
+#: main.cpp:114
+msgid "Developer & Artist"
+msgstr "Desenvolvente e Artista"
+
+#: main.cpp:115
+msgid "Icons & splash screen"
+msgstr "Iconas e pantalla de benvida"
+
+#: main.cpp:116 main.cpp:117
+msgid "Patches"
+msgstr "Correccións"
+
+#: main.cpp:136
+msgid ""
+"The monetary decimal symbol is not correctly set in the KDE Control Center's "
+"Country/Region & Language settings. Please set it to a reasonable value and "
+"start KMyMoney again."
+msgstr ""
+"O símbolo decimal monetario está mal configurados na Configuración de País e "
+"Lingua do centro de control de KDE. Prégaselle que os configure "
+"adecuadamente e logo reinicie KMyMoney."
+
+#: main.cpp:136
+msgid "Invalid settings"
+msgstr "Configuración non válida"
+
+#: main.cpp:228
+msgid "Another instance of KMyMoney is already running. Do you want to quit?"
+msgstr "Xa está a executarse outra instancia de KMyMoney. Desexa saír?"
+
+#: main.cpp:289
+msgid "Uncaught error. Please report the details to the developers"
+msgstr "Erro non capturado. Por favor, informe dos detalles aos desenvolventes"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "mvillarino"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "mvillarino@users.sourceforge.net"
+
+#: dialogs/kcsvprogressdlg.cpp:62 dialogs/kimportdlg.cpp:66 rc.cpp:1
+msgid "&Import"
+msgstr "&Importar"
+
+#: rc.cpp:2
+msgid "E&xport"
+msgstr "E&xportar"
+
+#: rc.cpp:3
+msgid "&Institution"
+msgstr "En&tidade"
+
+#: rc.cpp:4
+msgid "&Account"
+msgstr "&Conta"
+
+#: rc.cpp:5
+msgid "&Category"
+msgstr "Ca&tegoría"
+
+#: rc.cpp:6
+msgid "&Transaction"
+msgstr "&Asento"
+
+#: rc.cpp:7 rc.cpp:20
+msgid "Mark transaction as..."
+msgstr "Marcar o asento como..."
+
+#: rc.cpp:8 rc.cpp:21
+msgid "Mark transaction"
+msgstr "Marcar o asento"
+
+#: rc.cpp:9
+msgid "T&ools"
+msgstr "&Utilidades"
+
+#: rc.cpp:10
+msgid "Account options"
+msgstr "Opcións da conta"
+
+#: rc.cpp:11
+msgid "Category options"
+msgstr "Opcións da categoría"
+
+#: rc.cpp:12
+msgid "Institution options"
+msgstr "Opcións da entidade"
+
+#: rc.cpp:13
+msgid "Payee options"
+msgstr "Opcións do beneficiario"
+
+#: rc.cpp:14
+msgid "Budget options"
+msgstr "Opcións do orzamento"
+
+#: rc.cpp:15
+msgid "Investment options"
+msgstr "Opcións do investimento"
+
+#: rc.cpp:16
+msgid "Scheduled transactions options"
+msgstr "Opcións das planificacións"
+
+#: rc.cpp:17
+msgid "Transaction options"
+msgstr "Opcións do asento"
+
+#: rc.cpp:18
+msgid "Move transaction to..."
+msgstr "Mover o asento a..."
+
+#: rc.cpp:19
+msgid "Select account"
+msgstr "Escoller unha conta"
+
+#: rc.cpp:22
+msgid "Currency options"
+msgstr "Opcións de divisa"
+
+#: rc.cpp:24
+msgid "Always show a No. field in transaction form"
+msgstr "Mostrar sempre un campo Nº no formulario de escrituración"
+
+#: rc.cpp:25
+msgid "Auto fill with previous transaction data"
+msgstr "Completar automaticamente con datos de asentos anteriores"
+
+#: rc.cpp:26
+msgid "Treat two transactions as identical, if amount differs less than"
+msgstr ""
+"Tratar un par de asentos como idénticos, se os importes difiren menos que"
+
+#: dialogs/settings/rc.cpp:144 rc.cpp:27
+msgid "Auto increment check number"
+msgstr "Incrementar automaticamente o número de cheque"
+
+#: rc.cpp:28
+msgid "Autosave file periodically"
+msgstr "Gardar automaticamente o ficheiro cada certo tempo"
+
+#: rc.cpp:29
+msgid "Autosave interval in minutes"
+msgstr "Intervalo de gardado automático en minutos"
+
+#: rc.cpp:30
+msgid "Check schedules upon startup"
+msgstr "Comprobar os asentos planificados ao arrincar"
+
+#: dialogs/settings/rc.cpp:171 rc.cpp:31
+msgid "Enter transactions this number of days in advance"
+msgstr "Asentar as transaccións con estes días de anticipación"
+
+#: dialogs/settings/rc.cpp:172 rc.cpp:32
+msgid "Number of days to preview schedules in ledger"
+msgstr "Cantidade de días a previsualizar as planificacións no libro maior"
+
+#: dialogs/settings/rc.cpp:143 rc.cpp:33
+msgid "Insert transaction type into No. field for new transactions"
+msgstr "Inserir o tipo de transacción no campo Nº para os novos asentos"
+
+#: dialogs/settings/rc.cpp:145 rc.cpp:34
+msgid "Keep changes when selecting a different transaction/split"
+msgstr "Manter os cambios cando se escolla unha partida/asento diferente"
+
+#: rc.cpp:35
+msgid "Using the Enter key moves between the fields"
+msgstr "A tecla Intro move a través dos campos"
+
+#: dialogs/settings/rc.cpp:130 rc.cpp:36
+msgid "Use the ledger lens"
+msgstr "Usar a lupa do libro maior"
+
+#: rc.cpp:37
+msgid "Price Precision"
+msgstr "Precisión do prezo"
+
+#: dialogs/rc.cpp:65 rc.cpp:38
+msgid "Update price history"
+msgstr "Actualizar o historial de prezos"
+
+#: dialogs/settings/rc.cpp:132 rc.cpp:39
+msgid "Show transaction form"
+msgstr "Mostrar o formulario de escrituración"
+
+#: rc.cpp:40
+msgid "Start with last selected view or homepage"
+msgstr "Iniciar coa última vista escollida ou coa páxina de inicio"
+
+#: rc.cpp:41
+msgid "Use GPG to encrypt data file"
+msgstr "Gardar o ficheiro cifrado con GPG"
+
+#: rc.cpp:42
+msgid "Also encrypt against recover key"
+msgstr "Cifrar tamén coa chave kmymoney-recover"
+
+#: rc.cpp:43
+msgid "GPG User ID (deprecated)"
+msgstr "ID do usuario de GPG (obsoleto)"
+
+#: rc.cpp:44
+msgid "GPG User ID"
+msgstr "ID do usuario de GPG"
+
+#: rc.cpp:45
+msgid "Run in expert (accountant) mode"
+msgstr "Executar no modo experto (contábel)"
+
+#: rc.cpp:46
+msgid "Show splash screen during startup"
+msgstr "Mostrar a páxina de benvida ao iniciar"
+
+#: rc.cpp:47
+msgid "Synchronize account in ledger and investment view"
+msgstr "Sincronizar a conta no libro maior e na vista de investimento"
+
+#: rc.cpp:48
+msgid "Icon size for view selection"
+msgstr "Tamaño dos iconas para a selección da vista"
+
+#: rc.cpp:49
+msgid "list of hidden views"
+msgstr "lista de vistas acochadas"
+
+#: rc.cpp:50
+msgid "Firsttime switch to start new user wizard"
+msgstr "Indicador de primeirizo para iniciar o asistente de novos usuarios"
+
+#: rc.cpp:51
+msgid "Show title bar on each view"
+msgstr "Mostrar a barra de título en cada vista"
+
+#: rc.cpp:52
+msgid "Start string matches for e.g. payees at start of string"
+msgstr ""
+"Inicia a procura de cadeas para por ex. beneficiarios no principio da cadea"
+
+#: rc.cpp:53
+msgid "Order of items on homepage"
+msgstr "A orden dos ítems na páxina de inicio"
+
+#: rc.cpp:54
+msgid "Percentage of default font size used for home view HTML page"
+msgstr ""
+"Porcentaxe do tamaño predeterminado dos textos usado para a páxina HTML de "
+"inicio"
+
+#: rc.cpp:55
+msgid "Remember (manually adjusted) font size in home view on program end."
+msgstr ""
+"Lembrar (axuste manual) o tamaño de letra na vista inicial ao saír do "
+"programa."
+
+#: rc.cpp:56
+msgid "Show account limit information on the Homepage"
+msgstr "Mostrar o límite da conta na páxina de inicio"
+
+#: rc.cpp:58
+msgid "Hide closed accounts"
+msgstr "Acochar as contas pechadas"
+
+#: rc.cpp:59
+msgid "Hide finished schedules"
+msgstr "Acochar as planificacións rematadas"
+
+#: rc.cpp:61
+msgid "Show all register entries in full detail"
+msgstr "Mostrar todas as entradas do rexistro detalladamente"
+
+#: dialogs/settings/rc.cpp:129 rc.cpp:62
+msgid "Show a grid in the register"
+msgstr "Mostrar unha grella no rexistro"
+
+#: rc.cpp:63
+msgid "Show fancy group markers"
+msgstr "Mostrar marcas de grupo destacadas"
+
+#: rc.cpp:64
+msgid "Show fancy markers for previous and current fiscal year"
+msgstr "Mostra marcas luxosas para o ano fiscal actual e anterior"
+
+#: rc.cpp:65
+msgid "Starting month of the fiscal year"
+msgstr "Mes inicial do ano fiscal"
+
+#: rc.cpp:66
+msgid "Starting day of the fiscal year"
+msgstr "Día inicial do ano fiscal"
+
+#: rc.cpp:67
+msgid "Start date"
+msgstr "Data de comezo"
+
+#: dialogs/settings/rc.cpp:9 rc.cpp:68
+msgid "Use system colors"
+msgstr "Usar as cores do sistema"
+
+#: rc.cpp:69
+msgid "List color"
+msgstr "Cor da lista"
+
+#: rc.cpp:70
+msgid "List background color"
+msgstr "Cor do fondo da lista"
+
+#: rc.cpp:71
+msgid "List grid color"
+msgstr "Cor da grella da lista"
+
+#: rc.cpp:72
+msgid "Background color for imported transactions"
+msgstr "Cor de fondo para os asentos importados"
+
+#: rc.cpp:73
+msgid "Background color for matched transactions"
+msgstr "Cor de fondo para os asentos emparellados"
+
+#: rc.cpp:74
+msgid "List color for erronous transactions"
+msgstr "Cor na lista para os asentos con erros"
+
+#: rc.cpp:75
+msgid "List color for missing conversion rate"
+msgstr "Cor na lista para taxas de conversión a faltar"
+
+#: rc.cpp:76
+msgid "List color for negative values"
+msgstr "Cor na lista para valores negativos"
+
+#: rc.cpp:77
+msgid "Background color for group marker"
+msgstr "Cor de fondo para a marca de grupo"
+
+#: rc.cpp:78
+msgid "Background color for required fields"
+msgstr "Cor de fondo para os campos obrigatorios"
+
+#: rc.cpp:79
+msgid "Use system font"
+msgstr "Usar as fontes tipográficas do sistema"
+
+#: dialogs/settings/rc.cpp:21 rc.cpp:80
+msgid "Cell font"
+msgstr "Tipo de letra das celdiñas"
+
+#: dialogs/settings/rc.cpp:22 rc.cpp:81
+msgid "Header font"
+msgstr "Tipo de letra do cabezallo"
+
+#: rc.cpp:82 rc.cpp:83
+msgid "Sort order of register in normal view"
+msgstr "Ordenamento do rexistro na vista normal"
+
+#: rc.cpp:84
+msgid "Sort order of register in search dialog"
+msgstr "Ordenamento do rexistro no diálogo de procura"
+
+#: rc.cpp:85
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation"
+msgstr ""
+"Estado predeterminado de reconciliación das transaccións asentadas durante "
+"unha reconciliación"
+
+#: rc.cpp:86
+msgid "Number of days (plus/minus) to search for matching transactions"
+msgstr "Número de días (antes/despois) para procurar asentos para casar"
+
+#: rc.cpp:87
+msgid "During import, ask for a new payee's default category"
+msgstr ""
+"Durante a importación, preguntar a categoría predeterminada dos novos "
+"beneficiarios"
+
+#: rc.cpp:88
+msgid "Method to calculate forecast"
+msgstr "Método para calcular os prognósticos"
+
+#: rc.cpp:89
+msgid "Days to forecast"
+msgstr "Días a prognosticar"
+
+#: rc.cpp:90
+msgid "Days of normal account cycle"
+msgstr "Días que dura un ciclo normal da conta"
+
+#: rc.cpp:91
+msgid "Number of historic cycles to use in forecast"
+msgstr "Número de ciclos históricos a usar para prognosticar"
+
+#: rc.cpp:92
+msgid "Day of month to start forecast"
+msgstr "Día do mes cando iniciar o prognóstico"
+
+#: rc.cpp:93
+msgid "Method to calculate history-based forecast"
+msgstr "Método para calcular os prognósticos baseados no historial"
+
+#: rc.cpp:94
+msgid "Skip opening date when fetching transactions"
+msgstr "Circunvalar a data de abertura ao obter as transaccións"
+
+#: rc.cpp:95
+msgid "Include future transaction when using Schedule Forecast"
+msgstr "Incluír as transaccións futuras cando se use un prognóstico por planos"
+
+#: rc.cpp:96
+msgid "Include scheduled transactions when using Schedule Forecast"
+msgstr ""
+"Incluír os asentos planificados cando se use un prognóstico planificado"
+
+#: rc.cpp:97
+msgid "additional names for cash account"
+msgstr "nomes adicionais da conta de tesouraría"
+
+#: rc.cpp:98
+msgid "additional names for checking account"
+msgstr "nomes adicionais da conta corrente"
+
+#: rc.cpp:99
+msgid "additional names for credit card account"
+msgstr "nomes adicionais da conta de tarxeta de crédito"
+
+#: rc.cpp:100
+msgid "additional names for asset account"
+msgstr "nomes adicionais da conta de activos"
+
+#: rc.cpp:101
+msgid "additional names for opening balance payee"
+msgstr "nomes adicionais do beneficiario do saldo de abertura"
+
+#: rc.cpp:102
+msgid "additional names for invoice accounts"
+msgstr "nomes adicionais das contas de facturación"
+
+#: rc.cpp:103 widgets/rc.cpp:161 widgets/rc.cpp:163
+msgid "..."
+msgstr "..."
+
+#: views/kcategoriesview.cpp:276
+msgid "Profit: "
+msgstr "Gañancias: "
+
+#: views/kcategoriesview.cpp:278
+msgid "Loss: "
+msgstr "Perdas: "
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:54
+#: dialogs/transactioneditor.cpp:605 views/kpayeesview.cpp:365
+#: widgets/kmymoneyonlinequoteconfig.cpp:54
+msgid "Accepts the entered data and stores it"
+msgstr "Aceita os dados introducidos e almacénaos"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:55 views/kpayeesview.cpp:366
+#: widgets/kmymoneyonlinequoteconfig.cpp:55
+msgid "Use this to accept the modified data."
+msgstr "Use isto para aceitar os dados modificados."
+
+#: views/kpayeesview.cpp:491
+msgid ""
+"A payee with the name '%1' already exists. It is not advisable to have "
+"multiple payees with the same identification name. Are you sure you would "
+"like to rename the payee?"
+msgstr ""
+"Xa hai un beneficiario chamado «%1». Non se recomenda ter varios "
+"beneficiarios co mesmo nome. Desexa realmente mudar o nome do beneficiario?"
+
+#: views/kpayeesview.cpp:518 views/kpayeesview.cpp:869
+msgid "Unable to modify payee"
+msgstr "Non foi posíbel modificar o beneficiario"
+
+#: views/kpayeesview.cpp:564
+msgid "Do you want to save the changes for <b>%1</b>?"
+msgstr "Desexa gardar os cambios en <b>%1</b>?"
+
+#: views/kbudgetview.cpp:490 views/kpayeesview.cpp:565
+msgid "Save changes"
+msgstr "Gardar as mudanzas"
+
+#: views/kgloballedgerview.cpp:737 views/kpayeesview.cpp:662
+#: views/kpayeesview.cpp:753
+#, c-format
+msgid "Balance: %1"
+msgstr "Saldo: %1"
+
+#: views/kpayeesview.cpp:725 views/kpayeesview.cpp:731
+#, c-format
+msgid "Amortization of %1"
+msgstr "Amortización de %1"
+
+#: views/kpayeesview.cpp:727 views/kpayeesview.cpp:733
+#, c-format
+msgid "Payment to %1"
+msgstr "Pagamento de %1"
+
+#: views/kpayeesview.cpp:736
+#, c-format
+msgid "Loan payment from %1"
+msgstr "Pagar empréstito con %1"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:123
+#: dialogs/kconfirmmanualenterdlg.cpp:133 views/kpayeesview.cpp:745
+#: widgets/kmymoneycategory.cpp:160 widgets/kmymoneycategory.cpp:166
+#: widgets/transaction.cpp:851 widgets/transaction.cpp:1397
+#: widgets/transaction.cpp:1411
+msgid ""
+"_: Split transaction (category replacement)\n"
+"Split transaction"
+msgstr "Detallar o asento"
+
+#: views/kreportsview.cpp:262
+msgid ""
+"There was an error creating your report: \"%1\".\n"
+"Please report this error to the developer's list: kmymoney2-developer@lists."
+"sourceforge.net"
+msgstr ""
+"Aconteceu un erro ao criar o seu informe: «%1».\n"
+"Por favor, informe deste erro á lista de correo dos desenvolventes: "
+"kmymoney2-developer@lists.sourceforge.net"
+
+#: views/kreportsview.cpp:264
+msgid "Critical Error"
+msgstr "Erro crítico"
+
+#: views/kreportsview.cpp:268
+msgid "Unable to generate report"
+msgstr "Non foi posíbel xerar o informe"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:125 views/kreportsview.cpp:286
+#: views/rc.cpp:53 widgets/rc.cpp:146
+msgid "Chart"
+msgstr "Diagrama"
+
+#: views/kreportsview.cpp:287 widgets/rc.cpp:147
+msgid "Show the chart version of this report"
+msgstr "Mostra unha ilustración deste informe"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:112 views/khomeview.cpp:900
+#: views/kreportsview.cpp:294 views/kreportsview.cpp:328
+msgid "Report"
+msgstr "Informe"
+
+#: views/kreportsview.cpp:295
+msgid "Show the report version of this chart"
+msgstr "Mostra a versión en texto deste diagrama"
+
+#: views/kmymoneyview.cpp:236 views/kreportsview.cpp:314
+#: views/kreportsview.cpp:326
+msgid "Reports"
+msgstr "Informes"
+
+#: views/khomeview.cpp:902 views/kreportsview.cpp:329 widgets/rc.cpp:56
+msgid "Comment"
+msgstr "Comentario"
+
+#: views/kreportsview.cpp:432
+msgid "Charts"
+msgstr "Diagramas"
+
+#: views/khomeview.cpp:897 views/kreportsview.cpp:470
+msgid "Favorite Reports"
+msgstr "Informes favoritos"
+
+#: views/kreportsview.cpp:486
+msgid "Old Customized Reports"
+msgstr "Informes personalizados vellos"
+
+#: views/kreportsview.cpp:579
+msgid "Include Stylesheet"
+msgstr "Incluír a folla de estilos"
+
+#: views/kreportsview.cpp:585
+msgid ""
+"_: CSV (Filefilter)\n"
+"CSV files"
+msgstr "Ficheiros CSV"
+
+#: views/kreportsview.cpp:586
+msgid ""
+"_: HTML (Filefilter)\n"
+"HTML files"
+msgstr "Ficheiros HTML"
+
+#: views/kreportsview.cpp:591
+msgid "Export as"
+msgstr "Exportar como"
+
+#: views/kreportsview.cpp:619 views/kreportsview.cpp:660
+#: views/kreportsview.cpp:942 views/kreportsview.cpp:950
+#: views/kreportsview.cpp:958 views/kreportsview.cpp:968
+#: views/kreportsview.cpp:980 views/kreportsview.cpp:998
+#: views/kreportsview.cpp:1006 views/kreportsview.cpp:1014
+#: views/kreportsview.cpp:1022 views/kreportsview.cpp:1034
+#: views/kreportsview.cpp:1046 views/kreportsview.cpp:1056
+#: views/kreportsview.cpp:1070 views/kreportsview.cpp:1079
+#: views/kreportsview.cpp:1087 views/kreportsview.cpp:1095
+#: views/kreportsview.cpp:1103 views/kreportsview.cpp:1111
+#: views/kreportsview.cpp:1120 views/kreportsview.cpp:1132
+#: views/kreportsview.cpp:1145 views/kreportsview.cpp:1155
+#: views/kreportsview.cpp:1165 views/kreportsview.cpp:1175
+#: views/kreportsview.cpp:1185 views/kreportsview.cpp:1195
+#: views/kreportsview.cpp:1208 views/kreportsview.cpp:1222
+#: views/kreportsview.cpp:1239 views/kreportsview.cpp:1257
+#: views/kreportsview.cpp:1273 views/kreportsview.cpp:1295
+#: views/kreportsview.cpp:1304 views/kreportsview.cpp:1313
+#: views/kreportsview.cpp:1322 views/kreportsview.cpp:1336
+#: views/kreportsview.cpp:1347 views/kreportsview.cpp:1362
+#: views/kreportsview.cpp:1372 views/kreportsview.cpp:1383
+#: views/kreportsview.cpp:1393 views/kreportsview.cpp:1404
+#: views/kreportsview.cpp:1423 views/kreportsview.cpp:1432
+#: views/kreportsview.cpp:1444 views/kreportsview.cpp:1463
+#: views/kreportsview.cpp:1472 views/kreportsview.cpp:1481
+#: views/kreportsview.cpp:1490
+msgid "Default Report"
+msgstr "Informe de serie"
+
+#: views/kreportsview.cpp:621 views/kreportsview.cpp:661
+msgid "Custom Report"
+msgstr "Informe adaptado"
+
+#: views/kreportsview.cpp:622
+msgid " (Customized)"
+msgstr " (Adaptado)"
+
+#: views/kreportsview.cpp:690
+msgid ""
+"Are you sure you want to delete report <b>%1</b>? There is no way to "
+"recover it!"
+msgstr ""
+"Desexa realmente borrar o informe <b>%1</b>? Non haberá maneira de "
+"recuperalo!"
+
+#: views/kreportsview.cpp:690 views/kreportsview.cpp:702
+msgid "Delete Report?"
+msgstr "Borrar o informe?"
+
+#: views/kreportsview.cpp:702
+msgid "Sorry, <b>%1</b> is a default report. You may not delete it."
+msgstr "<b>%1</b> é un informe de serie. Estes non poden ser borrados."
+
+#: views/kreportsview.cpp:882
+msgid "&Open"
+msgstr "&Abrir"
+
+#: views/kreportsview.cpp:884
+msgid "&New report"
+msgstr "&Novo informe"
+
+#: views/kreportsview.cpp:934
+msgid "Income and Expenses"
+msgstr "Ingresos e gastos"
+
+#: views/kreportsview.cpp:941
+msgid "Income and Expenses This Month"
+msgstr "Ingresos e gastos este mes"
+
+#: views/kreportsview.cpp:949
+msgid "Income and Expenses This Year"
+msgstr "Ingresos e gastos este ano"
+
+#: views/kreportsview.cpp:957
+msgid "Income and Expenses By Year"
+msgstr "Ingresos e gastos segundo o ano"
+
+#: views/kreportsview.cpp:967
+msgid "Income and Expenses Graph"
+msgstr "Diagrama de ingresos e gastos"
+
+#: views/kreportsview.cpp:979
+msgid "Income and Expenses Pie Chart"
+msgstr "Diagrama de sectores para ingresos e gastos"
+
+#: views/khomeview.cpp:1361 views/kreportsview.cpp:990
+msgid "Net Worth"
+msgstr "Valor neto"
+
+#: views/kreportsview.cpp:997
+msgid "Net Worth By Month"
+msgstr "Valor neto por mes"
+
+#: views/kreportsview.cpp:1005
+msgid "Net Worth Today"
+msgstr "Valor neto hoxe"
+
+#: views/kreportsview.cpp:1013
+msgid "Net Worth By Year"
+msgstr "Valor neto por ano"
+
+#: views/kreportsview.cpp:1021
+msgid "7-day Cash Flow Forecast"
+msgstr "Prognóstico de fluxo de caixa a 7 días"
+
+#: views/kreportsview.cpp:1033
+msgid "Net Worth Graph"
+msgstr "Diagrama de valor neto"
+
+#: views/kreportsview.cpp:1045
+msgid "Account Balances by Institution"
+msgstr "Balances de conta por entidade"
+
+#: views/kreportsview.cpp:1055
+msgid "Account Balances by Type"
+msgstr "Balances de conta por tipo"
+
+#: views/kreportsview.cpp:1069
+msgid "Transactions by Account"
+msgstr "Asentos por conta"
+
+#: views/kreportsview.cpp:1078
+msgid "Transactions by Category"
+msgstr "Asentos por categoría"
+
+#: views/kreportsview.cpp:1086
+msgid "Transactions by Payee"
+msgstr "Asentos por beneficiario"
+
+#: views/kreportsview.cpp:1094
+msgid "Transactions by Month"
+msgstr "Asentos por mes"
+
+#: views/kreportsview.cpp:1102
+msgid "Transactions by Week"
+msgstr "Asentos por semana"
+
+#: views/kreportsview.cpp:1110
+msgid "Loan Transactions"
+msgstr "Asentos de empréstitos"
+
+#: views/kreportsview.cpp:1119
+msgid "Transactions by Reconciliation Status"
+msgstr "Asentos segundo o estado de reconciliación"
+
+#: views/kreportsview.cpp:1125
+msgid "Cash Flow"
+msgstr "Fluxo de caixa"
+
+#: views/kreportsview.cpp:1131
+msgid "Cash Flow Transactions This Month"
+msgstr "Asento do fluxo de caixa este mes"
+
+#: views/kmymoneyview.cpp:226 views/kmymoneyview.cpp:228
+#: views/kreportsview.cpp:1137
+msgid "Investments"
+msgstr "Investimentos"
+
+#: views/kreportsview.cpp:1154
+msgid "Investment Holdings by Account"
+msgstr "Participacións do investimento por conta"
+
+#: views/kreportsview.cpp:1164
+msgid "Investment Holdings by Type"
+msgstr "Participacións do investimento por tipo"
+
+#: views/kreportsview.cpp:1184
+msgid "Investment Performance by Type"
+msgstr "Rendemento do investimento por tipo"
+
+#: views/kreportsview.cpp:1194
+msgid "Investment Holdings Pie"
+msgstr "Sectores de participacións por investimento "
+
+#: views/kreportsview.cpp:1207
+msgid "Investment Worth Graph"
+msgstr "Gráfico de valor do investimento"
+
+#: views/kreportsview.cpp:1221
+msgid "Investment Price Graph"
+msgstr "Gráfico de prezo do investimento"
+
+#: views/kreportsview.cpp:1238
+msgid "Investment Moving Average Price Graph"
+msgstr "Gráfico da media móbil do prezo do investimento"
+
+#: views/kreportsview.cpp:1256
+msgid "Investment Moving Average"
+msgstr "Media móbil do investimento"
+
+#: views/kreportsview.cpp:1272
+msgid "Investment Moving Average vs Actual"
+msgstr "Media móbil do investimento fronte a valor actualizado"
+
+#: views/kreportsview.cpp:1287
+msgid "Taxes"
+msgstr "Impostos"
+
+#: views/kreportsview.cpp:1294
+msgid "Tax Transactions by Category"
+msgstr "Asentos de impostos por categoría"
+
+#: views/kreportsview.cpp:1303
+msgid "Tax Transactions by Payee"
+msgstr "Asentos de impostos por beneficiario"
+
+#: views/kreportsview.cpp:1312
+msgid "Tax Transactions by Category Last Fiscal Year"
+msgstr "Asentos de impostos por categoría durante o último ano fiscal"
+
+#: views/kreportsview.cpp:1321
+msgid "Tax Transactions by Payee Last Fiscal Year"
+msgstr "Asentos de impostos por beneficiario durante o último ano fiscal"
+
+#: views/kreportsview.cpp:1328
+msgid "Budgeting"
+msgstr "Orzamentos"
+
+#: views/kreportsview.cpp:1335
+msgid "Budgeted vs. Actual This Year"
+msgstr "Orzamentos vs. efectuado este ano"
+
+#: views/kreportsview.cpp:1346
+#, fuzzy
+msgid "Budgeted vs. Actual This Year (YTM)"
+msgstr "Orzamentos vs. efectuado este ano"
+
+#: views/khomeview.cpp:1383 views/kreportsview.cpp:1361
+msgid "Monthly Budgeted vs. Actual"
+msgstr "Orzamento mensual vs. efectuado"
+
+#: views/kreportsview.cpp:1371
+msgid "Yearly Budgeted vs. Actual"
+msgstr "Orzamento anual vs. efectuado"
+
+#: views/kreportsview.cpp:1382
+msgid "Monthly Budget"
+msgstr "Orzamento mensual"
+
+#: views/kreportsview.cpp:1392
+msgid "Yearly Budget"
+msgstr "Orzamento anual"
+
+#: views/kreportsview.cpp:1403
+msgid "Yearly Budgeted vs Actual Graph"
+msgstr "Gráfico de orzamento anual vs. efectuado"
+
+#: views/kreportsview.cpp:1422
+msgid "Forecast By Month"
+msgstr "Prognóstico por mes"
+
+#: views/kreportsview.cpp:1431
+msgid "Forecast Next Quarter"
+msgstr "Prognóstico o seguinte trimestre"
+
+#: views/kreportsview.cpp:1443
+msgid "Net Worth Forecast Graph"
+msgstr "Gráfico de prognóstico do valor neto"
+
+#: dialogs/rc.cpp:126 dialogs/rc.cpp:128 dialogs/rc.cpp:466
+#: views/kreportsview.cpp:1455
+msgid "General Information"
+msgstr "Información xeral"
+
+#: views/kreportsview.cpp:1462
+msgid "Schedule Information"
+msgstr "Información do plano de asentos"
+
+#: views/kreportsview.cpp:1471
+msgid "Schedule Summary Information"
+msgstr "Información do plano de asentos"
+
+#: views/kreportsview.cpp:1480
+msgid "Account Information"
+msgstr "Información da conta"
+
+#: views/kreportsview.cpp:1489
+msgid "Loan Information"
+msgstr "Información do empréstito"
+
+#: dialogs/rc.cpp:323 views/kmymoneyview.cpp:148 views/kmymoneyview.cpp:150
+msgid "Institutions"
+msgstr "Entidades"
+
+#: dialogs/knewaccountdlg.cpp:98 views/kmymoneyview.cpp:162
+#: views/kmymoneyview.cpp:164 widgets/rc.cpp:4 widgets/rc.cpp:94
+msgid "Accounts"
+msgstr "Contas"
+
+#: views/kmymoneyview.cpp:176
+msgid "Bills & Reminders"
+msgstr "Recibos e Recordatorios"
+
+#: views/kmymoneyview.cpp:178
+msgid "Scheduled transactions"
+msgstr "Asentos planificados"
+
+#: dialogs/knewaccountdlg.cpp:98 dialogs/rc.cpp:193 views/kmymoneyview.cpp:188
+#: views/kmymoneyview.cpp:190 widgets/rc.cpp:91
+msgid "Categories"
+msgstr "Categorías"
+
+#: dialogs/kfindtransactiondlg.cpp:212 dialogs/rc.cpp:318
+#: views/kmymoneyview.cpp:199 views/kmymoneyview.cpp:201 widgets/rc.cpp:93
+msgid "Payees"
+msgstr "Beneficiarios"
+
+#: views/kgloballedgerview.cpp:149 views/kmymoneyview.cpp:211
+msgid "Ledgers"
+msgstr "Libro maior"
+
+#: views/kmymoneyview.cpp:353
+msgid "Creating transactions can only be performed in the ledger view"
+msgstr "Só pode asentar transaccións na vista do libro maior"
+
+#: views/kmymoneyview.cpp:367
+msgid "Modifying transactions can only be performed in the ledger view"
+msgstr "Só pode modificar asentos na vista do libro maior"
+
+#: views/kmymoneyview.cpp:382
+msgid "Duplicating transactions can only be performed in the ledger view"
+msgstr "Só pode duplicar transaccións na vista do libro maior"
+
+#: views/kmymoneyview.cpp:394
+msgid "Edit the current selected transactions"
+msgstr "Editar os asentos escollidos"
+
+#: views/kmymoneyview.cpp:602
+msgid "<b>%1</b> is not a KMyMoney file."
+msgstr "<b>%1</b> non é un ficheiro de KMyMoney."
+
+#: views/kmymoneyview.cpp:643
+msgid "GPG is not available for decryption of file <b>%1</b>"
+msgstr "GPG non está dispoñíbel para descifrar o ficheiro <b>%1</b>"
+
+#: views/kmymoneyview.cpp:721
+msgid ""
+"File <b>%1</b> contains the old binary format used by KMyMoney. Please use "
+"an older version of KMyMoney (0.8.x) that still supports this format to "
+"convert it to the new XML based format."
+msgstr ""
+"O ficheiro <b>%1</b> contén o formato binario usado anteriormente por "
+"KMyMoney. Por favor, use unha versión anterior de KMyMoney (0.8.x) que aínda "
+"soporte este formato para convertelo ao novo formato baseado en XML."
+
+#: views/kmymoneyview.cpp:723
+msgid "File <b>%1</b> contains an unknown file format!"
+msgstr "O ficheiro <b>%1</b> contén un formato descoñecido!"
+
+#: views/kmymoneyview.cpp:728
+msgid "Cannot read from file <b>%1</b>!"
+msgstr "Non é posíbel ler do ficheiro <b>%1</b>!"
+
+#: views/kmymoneyview.cpp:732
+msgid "Cannot load file <b>%1</b>. Reason: %2"
+msgstr "Non foi posíbel cargar o ficheiro <b>%1</b>. Motivo: %2"
+
+#: views/kmymoneyview.cpp:742 views/kmymoneyview.cpp:748
+msgid "File <b>%1</b> not found!"
+msgstr "Non se atopou o ficheiro <b>%1</b>!"
+
+#: views/kmymoneyview.cpp:812
+msgid "Can't open database %1\n"
+msgstr "Non é posíbel abrir a base de dados %1\n"
+
+#: views/kmymoneyview.cpp:844
+msgid "An unrecoverable error occurred while reading the database"
+msgstr "Aconteceu un erro irrecuperábel mentres se lía a base de dados"
+
+#: views/kmymoneyview.cpp:846 views/kmymoneyview.cpp:1208
+msgid "Database malfunction"
+msgstr "Mal funcionamento da base de dados"
+
+#: views/kmymoneyview.cpp:938
+msgid "Unknown fix level in input file"
+msgstr "Nivel de corrección descoñecido no ficheiro de entrada"
+
+#: views/kmymoneyview.cpp:984
+msgid ""
+"GPG does not seem to be installed on your system. Please make sure, that GPG "
+"can be found using the standard search path. This time, encryption is "
+"disabled."
+msgstr ""
+"Non parece que teña instalado GPG no seu sistema. Asegúrese de que poda "
+"acharse na rota estándar de procura. Por agora, non é posíbel a cifraxe."
+
+#: views/kmymoneyview.cpp:984
+msgid "GPG not found"
+msgstr "GPG non atopado"
+
+#: views/kmymoneyview.cpp:991
+msgid ""
+"You have selected to encrypt your data also with the KMyMoney recover key, "
+"but the key with id</p><p><center><b>%1</b></center></p>has not been found "
+"in your keyring at this time. Please make sure to import this key into your "
+"keyring. You can find it on the <a href=\"http://kmymoney2.sourceforge.net/"
+"\">KMyMoney web-site</a>. This time your data will not be encrypted with the "
+"KMyMoney recover key."
+msgstr ""
+"Escolleu cifrar os seus dados coa chave de recuperación de KMyMoney, pero "
+"non se atopou a chave con id </p><p><center><b>%1</b></center></p> no seu "
+"anel de confianza. Asegúrese de introducir esta chave no seu anel de "
+"confianza. Pode encontrala na <a href=\"http://kmymoney2.sourceforge.net/"
+"\">web de KMyMoney</a>. Nesta ocasión os seus dados non serán cifrados coa "
+"chave de recuperación de KMyMoney."
+
+#: views/kmymoneyview.cpp:991 views/kmymoneyview.cpp:1000
+msgid "GPG-Key not found"
+msgstr "Chave GPG non atopada"
+
+#: views/kmymoneyview.cpp:1000
+msgid ""
+"You have specified to encrypt your data for the user-id</p><p><center><b>%1</"
+"b>.</center></p>Unfortunately, a valid key for this user-id was not found in "
+"your keyring. Please make sure to import a valid key for this user-id. This "
+"time, encryption is disabled."
+msgstr ""
+"Escolleu cifrar os seus dados para o user-id </p><p><center><b>%1</b>.</"
+"center></p>. Desafortunadamente, non se atopou ningunha chave válida para "
+"este user-id no seu anel de confianza. Asegúrese de importar unha chave "
+"válida para este user-id. Nesta ocasión, non se permite cifrar."
+
+#: views/kmymoneyview.cpp:1006
+msgid ""
+"You have configured to save your data in encrypted form using GPG. Please be "
+"aware, that this is a brand new feature which is yet untested. Make sure, "
+"you have the necessary understanding that you might loose all your data if "
+"you store it encrypted and cannot decrypt it later on! If unsure, answer "
+"<b>No</b>."
+msgstr ""
+"Configurou o programa para gardar os seus dados cifrados mediante GPG. Esta "
+"é unha nova característica que aínda non está ben probada. Lembre que pode "
+"perder todos os seus dados se os garda cifrados e despois non os pode "
+"descifrar!. Se non está seguro, conteste que <b>Non</b>."
+
+#: views/kmymoneyview.cpp:1008
+msgid "Store GPG encrypted"
+msgstr "Gardar cifrado con GPG"
+
+#: views/kmymoneyview.cpp:1038 views/kmymoneyview.cpp:1052
+msgid "Unable to open file '%1' for writing."
+msgstr "Non foi posíbel abrir o ficheiro «%1» para escritura."
+
+#: views/kmymoneyview.cpp:1065 views/kmymoneyview.cpp:1074
+msgid "Failure while writing to '%1'"
+msgstr "Fallo durante a escritura en «%1»"
+
+#: views/kmymoneyview.cpp:1086 views/kmymoneyview.cpp:1181
+msgid "Tried to access a file when it's not open"
+msgstr "Tentou acceder a un ficheiro cando este non estaba aberto"
+
+#: views/kmymoneyview.cpp:1092
+msgid ""
+"Since this version of KMyMoney only writes data files in its new format, "
+"files written with this version cannot be read by KMyMoney version 0.4. If "
+"you still want to use older versions of KMyMoney with your data files, "
+"please make sure you keep a backup-file of your finance data. If you want to "
+"abort this operation, please press Cancel now"
+msgstr ""
+"Xa que esta versión de KMyMoney só escrebe ficheiros de dados no novo "
+"formato, os escritos con esta versión non poden ser lidos por KMyMoney "
+"versión 0.4. Se aínda desexa usar versións anteriores de KMyMoney cos seus "
+"ficheiros de dados, por favor, asegúrese de manter un ficheiro de respaldo "
+"dos seus dados financeiros. Se desexa abortar esta operación, prema Cancelar "
+"agora"
+
+#: views/kmymoneyview.cpp:1122
+msgid "Malformed URL '%1'"
+msgstr "URL mal formado «%1»"
+
+#: views/kmymoneyview.cpp:1192
+msgid ""
+"Database contains data which must be removed before using SaveAs.\n"
+"Do you wish to continue?"
+msgstr ""
+"A base de datos contén datos que deben ser eliminados antes de usar Gardar "
+"Como.\n"
+"Desexa continuar?"
+
+#: views/kmymoneyview.cpp:1205
+msgid ""
+"An unrecoverable error occurred while writing to the database.\n"
+"It may well be corrupt."
+msgstr ""
+"Aconteceu un erro non recuperábel ao escribir na base de dados.\n"
+"Pode ser estea corrompida."
+
+#: views/kmymoneyview.cpp:1215
+msgid ""
+"Can't open or create database %1\n"
+"Retry SaveAsDatabase and click Help for further info"
+msgstr ""
+"Non é posíbel abrir ou criar a base de datos %1\n"
+"Use de novo Gardar como Base de dados e prema en Axuda para máis información."
+
+#: views/kmymoneyview.cpp:1354
+msgid "Afghanistan Afghani"
+msgstr "Afgani afgán"
+
+#: views/kmymoneyview.cpp:1355
+msgid "Albanian Lek"
+msgstr "Lek albanés"
+
+#: views/kmymoneyview.cpp:1356
+msgid "Netherland Antillian Guilder"
+msgstr "Guilder das Antillas Holandesas"
+
+#: views/kmymoneyview.cpp:1357
+msgid "Algerian Dinar"
+msgstr "Dinar arxelino"
+
+#: views/kmymoneyview.cpp:1358
+msgid "Andorran Franc"
+msgstr "Franco andorrano"
+
+#: views/kmymoneyview.cpp:1359
+msgid "Andorran Peseta"
+msgstr "Peseta andorrana"
+
+#: views/kmymoneyview.cpp:1360
+msgid "Angolan New Kwanza"
+msgstr "Novo Kwanza angolano"
+
+#: views/kmymoneyview.cpp:1361
+msgid "Argentine Peso"
+msgstr "Peso arxentino"
+
+#: views/kmymoneyview.cpp:1362
+msgid "Aruban Florin"
+msgstr "Florin de Aruba"
+
+#: views/kmymoneyview.cpp:1363
+msgid "Australian Dollar"
+msgstr "Dólar australiano"
+
+#: views/kmymoneyview.cpp:1364
+msgid "Azerbaijani Manat"
+msgstr "Manat acerbaixano"
+
+#: views/kmymoneyview.cpp:1365
+msgid "Bahamian Dollar"
+msgstr "Dólar das Bahamas"
+
+#: views/kmymoneyview.cpp:1366
+msgid "Bahraini Dinar"
+msgstr "Dinar do Barén"
+
+#: views/kmymoneyview.cpp:1367
+msgid "Bangladeshi Taka"
+msgstr "Taka bangladechiano"
+
+#: views/kmymoneyview.cpp:1368
+msgid "Barbados Dollar"
+msgstr "Dólar de Barbados"
+
+#: views/kmymoneyview.cpp:1369
+msgid "Belarussian Ruble"
+msgstr "Rublo de Bielorrusia"
+
+#: views/kmymoneyview.cpp:1370
+msgid "Belize Dollar"
+msgstr "Dólar do Belize"
+
+#: views/kmymoneyview.cpp:1371
+msgid "Bermudian Dollar"
+msgstr "Dólar das Bermudas"
+
+#: views/kmymoneyview.cpp:1372
+msgid "Bhutan Ngultrum"
+msgstr "Ngultrum butanés"
+
+#: views/kmymoneyview.cpp:1373
+msgid "Bolivian Boliviano"
+msgstr "Boliviano Bolivia"
+
+#: views/kmymoneyview.cpp:1374
+msgid "Bosnian Convertible Mark"
+msgstr "Marco Bosnio-Hercegovino convertíbel"
+
+#: views/kmymoneyview.cpp:1375
+msgid "Botswana Pula"
+msgstr "Pula botswaniano"
+
+#: views/kmymoneyview.cpp:1376
+msgid "Brazilian Real"
+msgstr "Real brasileiro"
+
+#: views/kmymoneyview.cpp:1377
+msgid "British Pound"
+msgstr "Libra esterlina"
+
+#: views/kmymoneyview.cpp:1378
+msgid "Brunei Dollar"
+msgstr "Dólar do Brunei"
+
+#: views/kmymoneyview.cpp:1379
+msgid "Bulgarian Lev"
+msgstr "Lev búlgaro"
+
+#: views/kmymoneyview.cpp:1380
+msgid "Burundi Franc"
+msgstr "Franco do Burundi"
+
+#: views/kmymoneyview.cpp:1381
+msgid "CFA Franc BEAC"
+msgstr "Franco CFA BEAC"
+
+#: views/kmymoneyview.cpp:1382
+msgid "CFA Franc BCEAO"
+msgstr "Franco CFA BCEAO"
+
+#: views/kmymoneyview.cpp:1383
+msgid "CFP Franc Pacifique"
+msgstr "Franco CFP polinesio"
+
+#: views/kmymoneyview.cpp:1384
+msgid "Cambodia Riel"
+msgstr "Riel camboxano"
+
+#: views/kmymoneyview.cpp:1385
+msgid "Canadian Dollar"
+msgstr "Dólar canadiano"
+
+#: views/kmymoneyview.cpp:1386
+msgid "Cape Verde Escudo"
+msgstr "Escudo de Cabo Verde"
+
+#: views/kmymoneyview.cpp:1387
+msgid "Cayman Islands Dollar"
+msgstr "Dólar das Illas Caimán"
+
+#: views/kmymoneyview.cpp:1388
+msgid "Chilean Peso"
+msgstr "Peso chileno"
+
+#: views/kmymoneyview.cpp:1389
+msgid "Chinese Yuan Renminbi"
+msgstr "Yuan renminbi chinés"
+
+#: views/kmymoneyview.cpp:1390
+msgid "Colombian Peso"
+msgstr "Peso colombiano"
+
+#: views/kmymoneyview.cpp:1391
+msgid "Comoros Franc"
+msgstr "Franco das Comores"
+
+#: views/kmymoneyview.cpp:1392
+msgid "Costa Rican Colon"
+msgstr "Colón da Costa Rica"
+
+#: views/kmymoneyview.cpp:1393
+msgid "Croatian Kuna"
+msgstr "Kuna croata"
+
+#: views/kmymoneyview.cpp:1394
+msgid "Cuban Peso"
+msgstr "Peso cubano"
+
+#: views/kmymoneyview.cpp:1395
+msgid "Czech Koruna"
+msgstr "Coroa checa"
+
+#: views/kmymoneyview.cpp:1396
+msgid "Danish Krone"
+msgstr "Coroa dinamarquesa"
+
+#: views/kmymoneyview.cpp:1397
+msgid "Djibouti Franc"
+msgstr "Franco do Xibutí"
+
+#: views/kmymoneyview.cpp:1398
+msgid "Dominican Peso"
+msgstr "Peso dominicano"
+
+#: views/kmymoneyview.cpp:1399
+msgid "East Caribbean Dollar"
+msgstr "Dólar das Caribe Orientais"
+
+#: views/kmymoneyview.cpp:1400
+msgid "Egyptian Pound"
+msgstr "Libra exipcia"
+
+#: views/kmymoneyview.cpp:1401
+msgid "El Salvador Colon"
+msgstr "Colón do Salvador"
+
+#: views/kmymoneyview.cpp:1402
+msgid "Eritrean Nakfa"
+msgstr "Nakfa eritreo"
+
+#: views/kmymoneyview.cpp:1403
+msgid "Estonian Kroon"
+msgstr "Coroa estonia"
+
+#: views/kmymoneyview.cpp:1404
+msgid "Ethiopian Birr"
+msgstr "Birr etíope"
+
+#: views/kmymoneyview.cpp:1405
+msgid "Euro"
+msgstr "Euro"
+
+#: views/kmymoneyview.cpp:1406
+msgid "Falkland Islands Pound"
+msgstr "Libra das Illas Falkland"
+
+#: views/kmymoneyview.cpp:1407
+msgid "Fiji Dollar"
+msgstr "Dólar das Illas Fiji"
+
+#: views/kmymoneyview.cpp:1408
+msgid "Gambian Dalasi"
+msgstr "Dalasi gambiano"
+
+#: views/kmymoneyview.cpp:1409
+msgid "Georgian Lari"
+msgstr "Lari xeorxiano"
+
+#: views/kmymoneyview.cpp:1410
+msgid "Ghanaian Cedi"
+msgstr "Cedi ganés"
+
+#: views/kmymoneyview.cpp:1411
+msgid "Gibraltar Pound"
+msgstr "Libra xibraltareña"
+
+#: views/kmymoneyview.cpp:1412
+msgid "Guatemalan Quetzal"
+msgstr "Quetzal guatemalteco"
+
+#: views/kmymoneyview.cpp:1413
+msgid "Guinea-Bissau Peso"
+msgstr "Peso guineano"
+
+#: views/kmymoneyview.cpp:1414
+msgid "Guyanan Dollar"
+msgstr "Dólar da Guiana"
+
+#: views/kmymoneyview.cpp:1415
+msgid "Haitian Gourde"
+msgstr "Gurde haitiano"
+
+#: views/kmymoneyview.cpp:1416
+msgid "Honduran Lempira"
+msgstr "Lempira hondureña"
+
+#: views/kmymoneyview.cpp:1417
+msgid "Hong Kong Dollar"
+msgstr "Dólar de Hong Kong"
+
+#: views/kmymoneyview.cpp:1418
+msgid "Hungarian Forint"
+msgstr "Forint húngaro"
+
+#: views/kmymoneyview.cpp:1419
+msgid "Iceland Krona"
+msgstr "Coroa islandesa"
+
+#: views/kmymoneyview.cpp:1420
+msgid "Indian Rupee"
+msgstr "Rupia indiana"
+
+#: views/kmymoneyview.cpp:1421
+msgid "Indonesian Rupiah"
+msgstr "Tupía indonesia"
+
+#: views/kmymoneyview.cpp:1422
+msgid "Iranian Rial"
+msgstr "Rial iraniano"
+
+#: views/kmymoneyview.cpp:1423
+msgid "Iraqi Dinar"
+msgstr "Dinar iraquí"
+
+#: views/kmymoneyview.cpp:1424
+msgid "Israeli New Shekel"
+msgstr "Novo shekel israelita"
+
+#: views/kmymoneyview.cpp:1425
+msgid "Jamaican Dollar"
+msgstr "Dólar xamaicano"
+
+#: views/kmymoneyview.cpp:1426
+msgid "Japanese Yen"
+msgstr "Iene xaponés"
+
+#: views/kmymoneyview.cpp:1427
+msgid "Jordanian Dinar"
+msgstr "Dinar xordano"
+
+#: views/kmymoneyview.cpp:1428
+msgid "Kazakhstan Tenge"
+msgstr "Tenge cazaquistanés"
+
+#: views/kmymoneyview.cpp:1429
+msgid "Kenyan Shilling"
+msgstr "Xelín queniano"
+
+#: views/kmymoneyview.cpp:1430
+msgid "Kuwaiti Dinar"
+msgstr "Dinar kuwaití"
+
+#: views/kmymoneyview.cpp:1431
+msgid "Kyrgyzstan Som"
+msgstr "Som quirguiz"
+
+#: views/kmymoneyview.cpp:1432
+msgid "Laos Kip"
+msgstr "Kip laosiano"
+
+#: views/kmymoneyview.cpp:1433
+msgid "Latvian Lats"
+msgstr "Lats letón"
+
+#: views/kmymoneyview.cpp:1434
+msgid "Lebanese Pound"
+msgstr "Libra libanesa"
+
+#: views/kmymoneyview.cpp:1435
+msgid "Lesotho Loti"
+msgstr "Loti lesotiano"
+
+#: views/kmymoneyview.cpp:1436
+msgid "Liberian Dollar"
+msgstr "Dólar liberiano"
+
+#: views/kmymoneyview.cpp:1437
+msgid "Libyan Dinar"
+msgstr "Dinar libio"
+
+#: views/kmymoneyview.cpp:1438
+msgid "Lithuanian Litas"
+msgstr "Litas lituano"
+
+#: views/kmymoneyview.cpp:1439
+msgid "Macau Pataca"
+msgstr "Pataca macaense"
+
+#: views/kmymoneyview.cpp:1440
+msgid "Macedonian Denar"
+msgstr "Denar macedonio"
+
+#: views/kmymoneyview.cpp:1441
+msgid "Malagasy Franc"
+msgstr "Franco malgaxe"
+
+#: views/kmymoneyview.cpp:1442
+msgid "Malawi Kwacha"
+msgstr "Kwacha do Malawi"
+
+#: views/kmymoneyview.cpp:1443
+msgid "Malaysian Ringgit"
+msgstr "Ringgit malaio"
+
+#: views/kmymoneyview.cpp:1444
+msgid "Maldive Rufiyaa"
+msgstr "Rufiyaa das Maldivas"
+
+#: views/kmymoneyview.cpp:1445
+msgid "Mali Republic Franc"
+msgstr "Franco Malí"
+
+#: views/kmymoneyview.cpp:1446
+msgid "Mauritanian Ouguiya"
+msgstr "Ouguiya mauritano"
+
+#: views/kmymoneyview.cpp:1447
+msgid "Mauritius Rupee"
+msgstr "Tupía da Mauricia"
+
+#: views/kmymoneyview.cpp:1448
+msgid "Mexican Peso"
+msgstr "Peso mexicano"
+
+#: views/kmymoneyview.cpp:1449
+msgid "Moldavian Leu"
+msgstr "Leu moldavo"
+
+#: views/kmymoneyview.cpp:1450
+msgid "Mongolian Tugrik"
+msgstr "Tugrik mongol"
+
+#: views/kmymoneyview.cpp:1451
+msgid "Moroccan Dirham"
+msgstr "Dirham marroquí"
+
+#: views/kmymoneyview.cpp:1452
+msgid "Mozambique Metical"
+msgstr "Metical mozambicano"
+
+#: views/kmymoneyview.cpp:1453
+msgid "Myanmar Kyat"
+msgstr "Kyat de myanmar"
+
+#: views/kmymoneyview.cpp:1454
+msgid "Namibian Dollar"
+msgstr "Dólar da Namibia"
+
+#: views/kmymoneyview.cpp:1455
+msgid "Nepalese Rupee"
+msgstr "Tupía nepalesa"
+
+#: views/kmymoneyview.cpp:1456
+msgid "New Zealand Dollar"
+msgstr "Dólar neozelandés"
+
+#: views/kmymoneyview.cpp:1457
+msgid "Nicaraguan Cordoba Oro"
+msgstr "Córdoba oro nicaraguano"
+
+#: views/kmymoneyview.cpp:1458
+msgid "Nigerian Naira"
+msgstr "Naira nixeriana"
+
+#: views/kmymoneyview.cpp:1459
+msgid "North Korean Won"
+msgstr "Won norte-coreano"
+
+#: views/kmymoneyview.cpp:1460
+msgid "Norwegian Kroner"
+msgstr "Coroa norueguesa"
+
+#: views/kmymoneyview.cpp:1461
+msgid "Omani Rial"
+msgstr "Rial de Omán"
+
+#: views/kmymoneyview.cpp:1462
+msgid "Pakistan Rupee"
+msgstr "Tupía paquistaní"
+
+#: views/kmymoneyview.cpp:1463
+msgid "Panamanian Balboa"
+msgstr "Balboa panameño"
+
+#: views/kmymoneyview.cpp:1464
+msgid "Papua New Guinea Kina"
+msgstr "Kina da Papúa nova guiné"
+
+#: views/kmymoneyview.cpp:1465
+msgid "Paraguay Guarani"
+msgstr "Guaraní paraguaio"
+
+#: views/kmymoneyview.cpp:1466
+msgid "Peruvian Nuevo Sol"
+msgstr "Novo sol peruano"
+
+#: views/kmymoneyview.cpp:1467
+msgid "Philippine Peso"
+msgstr "Peso filipino"
+
+#: views/kmymoneyview.cpp:1468
+msgid "Polish Zloty"
+msgstr "Zloti polaco"
+
+#: views/kmymoneyview.cpp:1469
+msgid "Qatari Rial"
+msgstr "Rial do Catar"
+
+#: views/kmymoneyview.cpp:1470
+msgid "Romanian Leu (new)"
+msgstr "Leu Romaní (novo)"
+
+#: views/kmymoneyview.cpp:1471
+msgid "Russian Ruble"
+msgstr "Rublo ruso"
+
+#: views/kmymoneyview.cpp:1472
+msgid "Rwanda Franc"
+msgstr "Franco ruandés"
+
+#: views/kmymoneyview.cpp:1473
+msgid "Samoan Tala"
+msgstr "Tala samoana"
+
+#: views/kmymoneyview.cpp:1474
+msgid "Sao Tome and Principe Dobra"
+msgstr "Dobra sao-tomense"
+
+#: views/kmymoneyview.cpp:1475
+msgid "Saudi Riyal"
+msgstr "Rial saudita"
+
+#: views/kmymoneyview.cpp:1476
+msgid "Seychelles Rupee"
+msgstr "Tupía das Seicheles"
+
+#: views/kmymoneyview.cpp:1477
+msgid "Sierra Leone Leone"
+msgstr "Leone serra-leonés"
+
+#: views/kmymoneyview.cpp:1478
+msgid "Singapore Dollar"
+msgstr "Dólar de Singapur"
+
+#: views/kmymoneyview.cpp:1481
+msgid "Solomon Islands Dollar"
+msgstr "Dólar das Illas Salomón"
+
+#: views/kmymoneyview.cpp:1482
+msgid "Somali Shilling"
+msgstr "Xelín somaliano"
+
+#: views/kmymoneyview.cpp:1483
+msgid "South African Rand"
+msgstr "Rand sul-africano"
+
+#: views/kmymoneyview.cpp:1484
+msgid "South Korean Won"
+msgstr "Won sul-coreano"
+
+#: views/kmymoneyview.cpp:1485
+msgid "Sri Lanka Rupee"
+msgstr "Tupía do Sri Lanka"
+
+#: views/kmymoneyview.cpp:1486
+msgid "St. Helena Pound"
+msgstr "Libra de Santa Helena"
+
+#: views/kmymoneyview.cpp:1487
+msgid "Sudanese Dinar"
+msgstr "Dinar sudanés"
+
+#: views/kmymoneyview.cpp:1488
+msgid "Suriname Guilder"
+msgstr "Florín do Suriname"
+
+#: views/kmymoneyview.cpp:1489
+msgid "Swaziland Lilangeni"
+msgstr "Lilangeni suazilandés"
+
+#: views/kmymoneyview.cpp:1490
+msgid "Swedish Krona"
+msgstr "Coroa sueca"
+
+#: views/kmymoneyview.cpp:1491
+msgid "Swiss Franc"
+msgstr "Franco suízo"
+
+#: views/kmymoneyview.cpp:1492
+msgid "Syrian Pound"
+msgstr "Libra siria"
+
+#: views/kmymoneyview.cpp:1493
+msgid "Taiwan Dollar"
+msgstr "Dólar de Taiwan"
+
+#: views/kmymoneyview.cpp:1494
+msgid "Tajikistan Somani"
+msgstr "Somoni taxiquistanés"
+
+#: views/kmymoneyview.cpp:1495
+msgid "Tanzanian Shilling"
+msgstr "Xelín tanzano"
+
+#: views/kmymoneyview.cpp:1496
+msgid "Thai Baht"
+msgstr "Baht tailandés"
+
+#: views/kmymoneyview.cpp:1497
+msgid "Tongan Pa'anga"
+msgstr "Pa'anga tongana"
+
+#: views/kmymoneyview.cpp:1498
+msgid "Trinidad and Tobago Dollar"
+msgstr "Dólar de Trindade e Tobago"
+
+#: views/kmymoneyview.cpp:1499
+msgid "Tunisian Dinar"
+msgstr "Dinar tunisiano"
+
+#: views/kmymoneyview.cpp:1500
+msgid "Turkish Lira (new)"
+msgstr "Nova Lira turca"
+
+#: views/kmymoneyview.cpp:1501
+msgid "Turkmenistan Manat"
+msgstr "Manat de Turkmenistán"
+
+#: views/kmymoneyview.cpp:1502
+msgid "US Dollar"
+msgstr "Dólar americano"
+
+#: views/kmymoneyview.cpp:1503
+msgid "Uganda Shilling"
+msgstr "Xelín ugandés"
+
+#: views/kmymoneyview.cpp:1504
+msgid "Ukraine Hryvnia"
+msgstr "Hryvnia ucraniana"
+
+#: views/kmymoneyview.cpp:1505
+msgid "United Arab Emirates Dirham"
+msgstr "Dirham dos Emiratos Árabes Unidos"
+
+#: views/kmymoneyview.cpp:1506
+msgid "Uruguayan Peso"
+msgstr "Peso uruguaio"
+
+#: views/kmymoneyview.cpp:1507
+msgid "Uzbekistani Sum"
+msgstr "Sum usbequistanés"
+
+#: views/kmymoneyview.cpp:1508
+msgid "Vanuatu Vatu"
+msgstr "Vatu vanuatiano"
+
+#: views/kmymoneyview.cpp:1509
+msgid "Venezuelan Bolivar"
+msgstr "Bolívar venezolano"
+
+#: views/kmymoneyview.cpp:1510
+msgid "Vietnamese Dong"
+msgstr "Dong vietnamita"
+
+#: views/kmymoneyview.cpp:1511
+msgid "Yugoslav Dinar"
+msgstr "Dinar iugoslavo"
+
+#: views/kmymoneyview.cpp:1512
+msgid "Zambian Kwacha"
+msgstr "Kwacha da Zambia"
+
+#: views/kmymoneyview.cpp:1513
+msgid "Zimbabwe Dollar"
+msgstr "Dólar do Cimbabue"
+
+#: views/kmymoneyview.cpp:1515
+msgid "Gold"
+msgstr "Ouro"
+
+#: views/kmymoneyview.cpp:1516
+msgid "Palladium"
+msgstr "Paladio"
+
+#: views/kmymoneyview.cpp:1517
+msgid "Platinum"
+msgstr "Platino"
+
+#: views/kmymoneyview.cpp:1518
+msgid "Silver"
+msgstr "Prata"
+
+#: views/kmymoneyview.cpp:1551
+msgid "Austrian Schilling"
+msgstr "Xelín austríaco"
+
+#: views/kmymoneyview.cpp:1552
+msgid "German Mark"
+msgstr "Marco alemán"
+
+#: views/kmymoneyview.cpp:1553
+msgid "French Franc"
+msgstr "Franco francés"
+
+#: views/kmymoneyview.cpp:1554
+msgid "Italian Lira"
+msgstr "Lira italiana"
+
+#: views/kmymoneyview.cpp:1555
+msgid "Spanish Peseta"
+msgstr "Peseta española"
+
+#: views/kmymoneyview.cpp:1556
+msgid "Dutch Guilder"
+msgstr "Guilder holandés"
+
+#: views/kmymoneyview.cpp:1557
+msgid "Belgian Franc"
+msgstr "Franco belga"
+
+#: views/kmymoneyview.cpp:1558
+msgid "Luxembourg Franc"
+msgstr "Franco luxemburgués"
+
+#: views/kmymoneyview.cpp:1559
+msgid "Portuguese Escudo"
+msgstr "Escudo portugués"
+
+#: views/kmymoneyview.cpp:1560
+msgid "Irish Pound"
+msgstr "Libra irlandesa"
+
+#: views/kmymoneyview.cpp:1561
+msgid "Finnish Markka"
+msgstr "Marco finés"
+
+#: views/kmymoneyview.cpp:1562
+msgid "Greek Drachma"
+msgstr "Dracma grego"
+
+#: views/kmymoneyview.cpp:1564
+msgid "Romanian Leu"
+msgstr "Leu romeno"
+
+#: views/kmymoneyview.cpp:1566
+msgid "Russian Ruble (old)"
+msgstr "Rublo ruso (vello)"
+
+#: views/kmymoneyview.cpp:1568
+msgid "Slovenian Tolar"
+msgstr "Tolar esloveno"
+
+#: views/kmymoneyview.cpp:1571
+msgid "Turkish Lira"
+msgstr "Lira turca"
+
+#: views/kmymoneyview.cpp:1574
+msgid "Maltese Lira"
+msgstr "Lira maltesa"
+
+#: views/kmymoneyview.cpp:1575
+msgid "Cyprus Pound"
+msgstr "Libra chipriota"
+
+#: views/kmymoneyview.cpp:1578
+msgid "Slovak Koruna"
+msgstr "Coroa eslovaca"
+
+#: views/kmymoneyview.cpp:1888
+msgid ""
+"The account \"%1\" was previously created as loan account but some "
+"information is missing. The new loan wizard will be started to collect all "
+"relevant information. Please use a KMyMoney version >= 0.8.7 and < 0.9 to "
+"correct the problem."
+msgstr ""
+"A conta «%1» foi criada con anterioridade como de tipo empréstito pero falta "
+"algunha información. O asistente para novos empréstitos comezará a recoller "
+"toda a información de interese. Por favor, empregue unha versión de KMyMoney "
+">= 0.8.7 e < 0.9 para corrixir o problema."
+
+#: views/kmymoneyview.cpp:1892
+msgid "Account problem"
+msgstr "Problema na conta"
+
+#: views/kmymoneyview.cpp:1941
+msgid "Unable to add schedule: "
+msgstr "Non foi posíbel engadir o asento planificado: "
+
+#: views/kmymoneyview.cpp:1970
+msgid "Fix transactions"
+msgstr "Fixar os asentos"
+
+#: views/kaccountsview.cpp:522 views/kinstitutionsview.cpp:300
+msgid "Net Worth: "
+msgstr "Valor neto: "
+
+#: dialogs/rc.cpp:108 dialogs/rc.cpp:163 dialogs/rc.cpp:250 dialogs/rc.cpp:755
+#: dialogs/rc.cpp:830 views/kinvestmentview.cpp:77 widgets/register.cpp:572
+msgid "Quantity"
+msgstr "Cantidade"
+
+#: views/kscheduledlistitem.cpp:137
+msgid "Finished"
+msgstr "Rematado"
+
+#: views/kbudgetview.cpp:109
+msgid "Creates a new budget"
+msgstr "Cría un novo orzamento"
+
+#: views/kbudgetview.cpp:110
+msgid "Use this to create a new empty budget."
+msgstr "Use isto para criar un novo orzamento en branco."
+
+#: views/kbudgetview.cpp:116
+msgid "Rename the current selected budget"
+msgstr "Muda o nome do orzamento escollido"
+
+#: views/kbudgetview.cpp:117
+msgid "Use this to start renaming the selected budget."
+msgstr "Use isto para mudar o nome do orzamento escollido."
+
+#: views/kbudgetview.cpp:123
+msgid "Delete the current selected budget"
+msgstr "Borra o orzamento escollido"
+
+#: views/kbudgetview.cpp:124
+msgid "Use this to delete the selected budget."
+msgstr "Use isto para borrar o orzamento escollido."
+
+#: views/kbudgetview.cpp:130
+msgid "Accepts the entered values and stores the budget"
+msgstr "Aceita os dados introducidos e garda o orzamento"
+
+#: views/kbudgetview.cpp:131
+msgid "Use this to store the modified data."
+msgstr "Use isto para almacenar os dados modificados."
+
+#: views/kbudgetview.cpp:137
+msgid "Revert budget to last saved state"
+msgstr "Repón o orzamento ao último estado gardado"
+
+#: views/kbudgetview.cpp:138
+msgid "Use this to discard the modified data."
+msgstr "Use isto para esquecer os dados modificados."
+
+#: views/kbudgetview.cpp:489
+msgid "Do you want to save the changes for <b>%1</b>"
+msgstr "Desexa gardar os cambios en <b>%1</b>?"
+
+#: views/kbudgetview.cpp:610
+msgid ""
+"A budget with the name '%1' already exists. It is not advisable to have "
+"multiple budgets with the same identification name. Are you sure you would "
+"like to rename the budget?"
+msgstr ""
+"Xa hai un orzamento chamado «%1». Non é recomendábel ter varios orzamentos co "
+"mesmo nome. Desexa realmente mudar o nome do orzamento?"
+
+#: views/kbudgetview.cpp:635 views/kbudgetview.cpp:750
+msgid "Unable to modify budget"
+msgstr "Non foi posíbel modificar o orzamento"
+
+#: views/kbudgetview.cpp:736
+msgid "Unable to reset budget"
+msgstr "Non foi posíbel recuperar o orzamento"
+
+#: views/rc.cpp:1
+msgid "List"
+msgstr "Lista"
+
+#: views/rc.cpp:2 views/rc.cpp:20
+msgid "Collapse all accounts in the list"
+msgstr "Pregar todas as contas na lista"
+
+#: views/rc.cpp:3 views/rc.cpp:21
+msgid "Expand all accounts in the list"
+msgstr "Despregar todas as contas na lista"
+
+#: views/rc.cpp:4
+msgid "Icons"
+msgstr "Iconas"
+
+#: views/rc.cpp:5 views/rc.cpp:22
+msgid "Note: Unused categories are not shown as selected by settings."
+msgstr ""
+"Nota: Non se mostran as categorías non usadas, seguindo a configuración."
+
+#: views/rc.cpp:6 views/rc.cpp:23 views/rc.cpp:54
+msgid "Total Profits:"
+msgstr "Gañancias Totais:"
+
+#: views/rc.cpp:7
+msgid "Your budgets"
+msgstr "Os seus orzamentos"
+
+#: dialogs/rc.cpp:340 dialogs/rc.cpp:841 dialogs/settings/rc.cpp:124
+#: views/rc.cpp:8 widgets/rc.cpp:48 widgets/rc.cpp:150
+msgid "New"
+msgstr "Novo"
+
+#: views/rc.cpp:9
+msgid "Ren"
+msgstr "Mudar o nome"
+
+#: views/rc.cpp:10
+msgid "Del"
+msgstr "Borrar"
+
+#: views/rc.cpp:11
+msgid "Res"
+msgstr "Reiniciar"
+
+#: views/rc.cpp:12
+msgid "Upd"
+msgstr "Actualizar"
+
+#: views/rc.cpp:15
+msgid "Hide unused budget categories"
+msgstr "Acochar as categorías non usadas no orzamento"
+
+#: views/rc.cpp:16
+msgid "Assignments"
+msgstr "Asignacións"
+
+#: views/rc.cpp:19
+msgid "Include subaccounts"
+msgstr "Incluír as subcontas"
+
+#: dialogs/settings/rc.cpp:23 views/rc.cpp:24
+msgid "Forecast Settings"
+msgstr "Configuración dos prognósticos"
+
+#: views/rc.cpp:25
+msgid "Days to Forecast:"
+msgstr "Días a prognosticar:"
+
+#: views/rc.cpp:26
+msgid "Days of Accounts Cycle:"
+msgstr "Días do ciclo das contas:"
+
+#: dialogs/settings/rc.cpp:25 views/rc.cpp:27
+msgid "Day of Month to start Forecast:"
+msgstr "Día do mes cando iniciar o prognóstico:"
+
+#: views/rc.cpp:28
+msgid "Historic Cycles:"
+msgstr "Ciclos históricos:"
+
+#: views/rc.cpp:29
+msgid "Chart Detail:"
+msgstr "Detalle do diagrama:"
+
+#: views/rc.cpp:30 widgets/kmymoneyaccountselector.cpp:64 widgets/rc.cpp:65
+msgid "All"
+msgstr "Todo"
+
+#: views/rc.cpp:31 widgets/rc.cpp:66
+msgid "Top-Level"
+msgstr "Principais"
+
+#: views/rc.cpp:32 widgets/rc.cpp:67
+msgid "Groups"
+msgstr "Grupos"
+
+#: views/rc.cpp:33 widgets/rc.cpp:68
+msgid "Totals"
+msgstr "Totais"
+
+#: views/rc.cpp:34
+msgid "<p>Choose what level of detail to show on the chart.</p>"
+msgstr "<p>Escolla o grau de detalle a mostrar neste diagrama.</p>"
+
+#: views/rc.cpp:35
+msgid "Current Forecast Method:"
+msgstr "Método de prognóstico actual:"
+
+#: views/rc.cpp:36
+msgid "method"
+msgstr "método"
+
+#: dialogs/settings/rc.cpp:32 views/rc.cpp:37
+msgid "History Forecast Method"
+msgstr "Método de prognóstico"
+
+#: dialogs/settings/rc.cpp:33 views/rc.cpp:38
+msgid "Simple Moving Average"
+msgstr "Media móbil simples"
+
+#: dialogs/settings/rc.cpp:34 views/rc.cpp:39
+msgid "Weighted Moving Average"
+msgstr "Media móbil ponderada"
+
+#: dialogs/settings/rc.cpp:35 views/rc.cpp:40
+msgid "Linear Regression"
+msgstr "Regresión linear"
+
+#: dialogs/keditloanwizard.cpp:315 dialogs/rc.cpp:628 dialogs/rc.cpp:647
+#: views/rc.cpp:43
+msgid "Summary"
+msgstr "Resumo"
+
+#: views/rc.cpp:45
+msgid "0 days"
+msgstr "0 días"
+
+#: views/rc.cpp:46
+msgid "30 days"
+msgstr "30 días"
+
+#: views/rc.cpp:47
+msgid "60 days"
+msgstr "60 días"
+
+#: views/rc.cpp:48
+msgid "90 days"
+msgstr "90 días"
+
+#: views/rc.cpp:49
+msgid "New Item"
+msgstr "Novo ítem"
+
+#: views/rc.cpp:50 widgets/rc.cpp:64
+msgid "Detail"
+msgstr "Detalles"
+
+#: views/rc.cpp:51
+msgid "Advanced"
+msgstr "Avanzado"
+
+#: views/rc.cpp:52
+msgid "Budget Forecast"
+msgstr "Orzar a partir do prognóstico"
+
+#: views/rc.cpp:55
+msgid "Investment Summary"
+msgstr "Resumo do investimento"
+
+#: views/rc.cpp:56
+msgid "Select Account:"
+msgstr "Escoller Conta:"
+
+#: views/rc.cpp:57
+msgid ""
+"Summary of the equities contained in this account, showing your holdings and "
+"their most recent price."
+msgstr ""
+"Resumo dos patrimonios contidos nesta conta, mostrando as participacións e o "
+"prezo mais recente."
+
+#: views/rc.cpp:60 widgets/register.cpp:564
+msgid "No."
+msgstr "Nº"
+
+#: views/rc.cpp:64
+msgid "Balance: "
+msgstr "Saldo: "
+
+#: views/rc.cpp:65
+msgid "Address"
+msgstr "Enderezo"
+
+#: views/rc.cpp:66
+msgid "Payee Information"
+msgstr "Información do Beneficiario"
+
+#: views/rc.cpp:67
+msgid "E-Mail:"
+msgstr "Correo electrónico:"
+
+#: dialogs/rc.cpp:393 views/rc.cpp:69
+msgid "Telephone/Fax:"
+msgstr "Teléfono/Fax:"
+
+#: views/rc.cpp:70
+msgid "Notes"
+msgstr "Notas"
+
+#: views/rc.cpp:71
+msgid "Address:"
+msgstr "Enderezo:"
+
+#: views/rc.cpp:72
+msgid "Matching"
+msgstr "Emparellamento"
+
+#: views/rc.cpp:73
+msgid "Transaction Matching"
+msgstr "Emparellamento de operacións"
+
+#: views/rc.cpp:74
+msgid "No matching"
+msgstr "Sen emparellamento"
+
+#: views/rc.cpp:75
+msgid "Match on Payee name"
+msgstr "Casar con base no nome do beneficiario"
+
+#: views/rc.cpp:76
+msgid "Match on a name listed below"
+msgstr "Casar cun nome la lista de baixo"
+
+#: views/rc.cpp:77
+msgid "List of matching names"
+msgstr "Lista de nomes que casan"
+
+#: views/rc.cpp:78
+msgid ""
+"This list contains the names that will match this payee if a transaction is "
+"imported from an external source. Keep in mind, that you can specify regular "
+"expressions here."
+msgstr ""
+"Esta lista contén os nomes que se emparellarán con este beneficiario se un "
+"asento é importado desde unha fonte externa. Lembre que aquí pode empregar "
+"expresións regulares."
+
+#: views/rc.cpp:79
+msgid "Ignore Case"
+msgstr "Ignorar a capitalización"
+
+#: views/rc.cpp:80
+msgid "Default Account"
+msgstr "Conta predeterminada"
+
+#: views/rc.cpp:81
+msgid ""
+"Use the default account for\n"
+"new transactions with this payee"
+msgstr ""
+"Empregar a contra predeterminada para\n"
+"os novos asentos con este beneficiario"
+
+#: views/rc.cpp:82
+msgid "Default category:"
+msgstr "Categoría predeterminada:"
+
+#: views/rc.cpp:83
+msgid "Suggest a category"
+msgstr "Suxerir unha categoría"
+
+#: views/rc.cpp:85
+msgid "New Scheduled transaction..."
+msgstr "Novo asento planificado..."
+
+#: views/rc.cpp:86
+msgid "Filter Accounts"
+msgstr "Filtrar contas"
+
+#: views/rc.cpp:87
+msgid "List View"
+msgstr "Vista en Lista"
+
+#: views/rc.cpp:88
+msgid "Calendar View"
+msgstr "Vista en Calendario"
+
+#: views/kinstitutionsview.cpp:43
+msgid "Institution/Account"
+msgstr "Entidade/Conta"
+
+#: views/kinstitutionsview.cpp:157
+msgid "Accounts with no institution assigned"
+msgstr "Contas sen entidade asinada"
+
+#: views/kscheduledview.cpp:70
+msgid "Type/Name"
+msgstr "Tipo/Nome"
+
+#: views/kscheduledview.cpp:75
+msgid "Frequency"
+msgstr "Frecuencia"
+
+#: views/kscheduledview.cpp:157
+msgid "Unable to load accounts: "
+msgstr "Non foi posíbel cargar as contas: "
+
+#: views/kscheduledview.cpp:171 views/kscheduledview.cpp:429
+#: views/kscheduledview.cpp:445 widgets/kmymoneyscheduledcalendar.cpp:46
+msgid "Bills"
+msgstr "Recibos"
+
+#: dialogs/rc.cpp:232 dialogs/rc.cpp:706 views/kscheduledview.cpp:172
+#: views/kscheduledview.cpp:431 views/kscheduledview.cpp:447
+#: widgets/kmymoneyscheduledcalendar.cpp:47
+msgid "Deposits"
+msgstr "Imposicións"
+
+#: views/kscheduledview.cpp:173 views/kscheduledview.cpp:435
+#: views/kscheduledview.cpp:451
+msgid "Loans"
+msgstr "Empréstitos"
+
+#: views/kscheduledview.cpp:357
+msgid "Error activating context menu"
+msgstr "Aconteceu un erro ao activar o menú contextual"
+
+#: views/kscheduledview.cpp:385
+msgid "Error executing item"
+msgstr "Aconteceu un erro executando o ítem"
+
+#: views/kscheduledview.cpp:419
+msgid "Unable to filter account"
+msgstr "Non foi posíbel filtrar a conta"
+
+#: views/kgloballedgerview.cpp:508
+msgid "Statement Details"
+msgstr "Detalles do extracto"
+
+#: views/kgloballedgerview.cpp:512
+msgid "Statement Deposit Details"
+msgstr "Detalles do extracto do depósito"
+
+#: views/kgloballedgerview.cpp:513
+msgid "Statement Payment Details"
+msgstr "Detalles do extracto do pagamento"
+
+#: views/kgloballedgerview.cpp:642
+msgid "%1 deposits (%3), %2 payments (%4)"
+msgstr "%1 depósitos (%3), %2 pagamentos (%4)"
+
+#: views/kgloballedgerview.cpp:649
+msgid "%1 payments (%2)"
+msgstr "%1 pagamentos (%2)"
+
+#: views/kgloballedgerview.cpp:653
+msgid "%1 deposits (%2)"
+msgstr "%1 depósitos (%2)"
+
+#: views/kgloballedgerview.cpp:721
+#, c-format
+msgid "Statement: %1"
+msgstr "Extracto: %1"
+
+#: views/kgloballedgerview.cpp:722 views/kgloballedgerview.cpp:736
+#, c-format
+msgid "Cleared: %1"
+msgstr "Librado: %1"
+
+#: views/kgloballedgerview.cpp:723
+#, c-format
+msgid "Difference: %1"
+msgstr "Diferenza: %1"
+
+#: views/kgloballedgerview.cpp:730
+#, c-format
+msgid "Last reconciled: %1"
+msgstr "Ultima conciliación: %1"
+
+#: views/kgloballedgerview.cpp:732
+msgid "Never reconciled"
+msgstr "Nunca foi conciliada"
+
+#: views/kgloballedgerview.cpp:772
+msgid "Investment value: %1%2"
+msgstr "Valor do investimento: %1%2"
+
+#: views/kgloballedgerview.cpp:1040
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to continue to edit the transactions anyway?"
+msgstr ""
+"Polo menos unha partida dos asentos escollidos foi conciliada. Desexa "
+"continuar a editar os asentos aínda así?"
+
+#: views/kgloballedgerview.cpp:1051
+msgid ""
+"At least one split of the selected transactions has been frozen. Editing the "
+"transactions is therefore prohibited."
+msgstr ""
+"Polo menos unha partida dos asentos escollidos foi conxelada. Polo tanto, "
+"está prohibido editar estes asentos."
+
+#: views/kgloballedgerview.cpp:1053
+msgid "Transaction already frozen"
+msgstr "O asento xa foi conxelado"
+
+#: views/kgloballedgerview.cpp:1058
+msgid ""
+"At least one split of the selected transaction references an account that "
+"has been closed. Editing the transactions is therefore prohibited."
+msgstr ""
+"Polo menos unha partida do asento escollido fai referencia a unha conta que "
+"foi pechada. Polo tanto, está prohibido editar este asento."
+
+#: views/kgloballedgerview.cpp:1060
+msgid "Account closed"
+msgstr "Conta pechada"
+
+#: views/kgloballedgerview.cpp:1349
+msgid "Cannot create transactions when no account is selected."
+msgstr "Non é posíbel criar asentos se non hai ningunha conta escollida."
+
+#: views/kgloballedgerview.cpp:1354
+msgid "Cannot create transactions in the context of a category."
+msgstr "Non é posíbel escriturar asentos no contexto dunha categoría."
+
+#: views/kgloballedgerview.cpp:1358
+msgid "Cannot create transactions in a closed account."
+msgstr "Non é posíbel escriturar asentos nunha conta pechada."
+
+#: views/kgloballedgerview.cpp:1370
+msgid "Cannot process transaction with focus if it is not selected."
+msgstr "Non é posíbel procesar un asento focado se non está escollido."
+
+#: views/kgloballedgerview.cpp:1400
+msgid "Cannot edit transactions with frozen splits."
+msgstr "Non é posíbel editar asentos con partidas conxeladas."
+
+#: views/kgloballedgerview.cpp:1411
+msgid "Cannot edit transactions in the context of a category."
+msgstr "Non é posíbel editar asentos no contexto dunha categoría."
+
+#: views/kgloballedgerview.cpp:1430
+msgid ""
+"Cannot edit investment transactions and non-investment transactions together."
+msgstr ""
+"Non é posíbel editar á vez asentos de investimentos e asentos que non sexan "
+"de investimentos."
+
+#: views/kgloballedgerview.cpp:1438
+msgid "Cannot edit multiple split transactions at once."
+msgstr "Non é posíbel editar á vez varios asentos con partidas."
+
+#: views/kgloballedgerview.cpp:1448
+msgid "Cannot edit investment transactions in the context of this account."
+msgstr "Non é posíbel editar asentos de investimentos no contexto desta conta."
+
+#: views/kforecastview.cpp:164
+msgid "Scheduled"
+msgstr "Planificado"
+
+#: views/kforecastview.cpp:169
+msgid "History"
+msgstr "Historial"
+
+#: views/kforecastview.cpp:296
+msgid "The balance of %2 is below the minimum balance %3 today."
+msgstr "Hoxe o saldo de %2 é menor que o saldo mínimo %3."
+
+#: views/kforecastview.cpp:301 views/khomeview.cpp:1043
+msgid "The balance of %1 will drop below the minimum balance %2 in %3 days."
+msgstr "O saldo de %1 será menor que o saldo mínimo %2 dentro de %3 días."
+
+#: views/kforecastview.cpp:318 views/khomeview.cpp:1059
+msgid "The balance of %1 is below %2 today."
+msgstr "O saldo de %1 é menor que %2 hoxe."
+
+#: views/kforecastview.cpp:323 views/khomeview.cpp:1064
+msgid "The balance of %1 is above %2 today."
+msgstr "O saldo de %1 é maior que %2 hoxe."
+
+#: views/kforecastview.cpp:330 views/khomeview.cpp:1070
+msgid "The balance of %1 will drop below %2 in %3 days."
+msgstr "O saldo de %1 será menor de %2 dentro de %3 días."
+
+#: views/kforecastview.cpp:335 views/khomeview.cpp:1075
+msgid "The balance of %1 will raise above %2 in %3 days."
+msgstr "O saldo de %1 será maior de %2 en %3 días."
+
+#: views/kforecastview.cpp:348
+msgid "The account %1 is decreasing %2 per cycle."
+msgstr "A conta %1 está a diminuír %2 por ciclo."
+
+#: views/kforecastview.cpp:404 widgets/kmymoneyaccounttreeforecast.cpp:114
+#, c-format
+msgid "Min Bal %1"
+msgstr "Saldo mínimo %1"
+
+#: views/kforecastview.cpp:406 widgets/kmymoneyaccounttreeforecast.cpp:116
+#, c-format
+msgid "Min Date %1"
+msgstr "Data mínima %1"
+
+#: views/kforecastview.cpp:409 widgets/kmymoneyaccounttreeforecast.cpp:119
+#, c-format
+msgid "Max Bal %1"
+msgstr "Saldo máximo %1"
+
+#: views/kforecastview.cpp:411 widgets/kmymoneyaccounttreeforecast.cpp:121
+#, c-format
+msgid "Max Date %1"
+msgstr "Data máxima %1"
+
+#: views/kforecastview.cpp:413 widgets/kmymoneyaccounttreeforecast.cpp:123
+msgid "Average"
+msgstr "Promedio"
+
+#: views/kforecastview.cpp:649 views/khomeview.cpp:268 views/khomeview.cpp:275
+msgid "Networth Forecast"
+msgstr "Prognóstico do valor neto"
+
+#: views/khomeview.cpp:203
+msgid "Your Financial Summary"
+msgstr "O seu resumo financeiro"
+
+#: views/khomeview.cpp:218
+msgid "Preferred Accounts"
+msgstr "Contas preferidas"
+
+#: views/khomeview.cpp:225 views/khomeview.cpp:227
+msgid "Payment Accounts"
+msgstr "Contas de pagamento"
+
+#: views/khomeview.cpp:256
+msgid "Show KMyMoney welcome page"
+msgstr "Mostrar a páxina de benvida de KMyMoney"
+
+#: views/khomeview.cpp:409
+msgid "Overdue payments"
+msgstr "Pagamentos atrasados"
+
+#: views/khomeview.cpp:424 views/khomeview.cpp:497 views/khomeview.cpp:531
+msgid "Balance after"
+msgstr "Saldo despois"
+
+#: views/khomeview.cpp:482
+msgid "Today's payments"
+msgstr "Pagamentos de hoxe"
+
+#: views/khomeview.cpp:516
+msgid "Future payments"
+msgstr "Pagamentos futuros"
+
+#: views/khomeview.cpp:585
+msgid "Less..."
+msgstr "Menos..."
+
+#: views/khomeview.cpp:587
+msgid "More..."
+msgstr "Máis..."
+
+#: views/khomeview.cpp:622
+msgid "Enter schedule"
+msgstr "Introducir unha transacción planificada"
+
+#: views/khomeview.cpp:624
+msgid "Skip schedule"
+msgstr "Circunvalar a planificación"
+
+#: views/khomeview.cpp:627
+msgid "Edit schedule"
+msgstr "Editar o plano de asentos"
+
+#: views/khomeview.cpp:631
+msgid " (%1 payments)"
+msgstr " (%1 pagamentos)"
+
+#: views/khomeview.cpp:771
+msgid "To Minimum Balance / Maximum Credit"
+msgstr "Ao saldo mínimo / crédito máximo"
+
+#: views/khomeview.cpp:964
+msgid "%1 Day Forecast"
+msgstr "Prognóstico de %1 día"
+
+#: views/khomeview.cpp:973 widgets/kmymoneyaccounttreeforecast.cpp:67
+msgid "%1 days"
+msgstr "%1 días"
+
+#: views/khomeview.cpp:1039
+msgid "The balance of %1 is below the minimum balance %2 today."
+msgstr "Hoxe o saldo de %1 é menor que o saldo mínimo %2."
+
+#: views/khomeview.cpp:1175
+msgid ""
+"Before KMyMoney can give you detailed information about your financial "
+"status, you need to create at least one account. Until then, KMyMoney shows "
+"the welcome page instead."
+msgstr ""
+"Para que KMyMoney poda darlle información pormenorizada acerca do seu estado "
+"financeiro debe crear polo menos unha conta. Até que non o faga, KMyMoney "
+"mostrará a páxina de benvida."
+
+#: views/khomeview.cpp:1258
+msgid "Assets and Liabilities Summary"
+msgstr "Resumo de activos e pasivos"
+
+#: views/khomeview.cpp:1262
+msgid "Asset Accounts"
+msgstr "Contas de activos"
+
+#: views/khomeview.cpp:1270
+msgid "Liability Accounts"
+msgstr "Contas de pasivos"
+
+#: views/khomeview.cpp:1348
+msgid "Total Assets"
+msgstr "Activos totais"
+
+#: views/khomeview.cpp:1354
+msgid "Total Liabilities"
+msgstr "Pasivos totais"
+
+#: views/khomeview.cpp:1399
+msgid "Current Month Summary"
+msgstr "Resumo deste mes"
+
+#: views/khomeview.cpp:1403 views/khomeview.cpp:1440
+msgid "Budgeted"
+msgstr "Orzado"
+
+#: views/khomeview.cpp:1433
+msgid "Budget Overruns"
+msgstr "Incumprimentos do orzamento"
+
+#: views/khomeview.cpp:1502
+msgid "No Budget Categories have been overrun"
+msgstr "Non se gastou en exceso en ningunha orza"
+
+#: views/khomeview.cpp:1801
+msgid "Cash Flow Summary"
+msgstr "Resumo do fluxo de caixa"
+
+#: views/khomeview.cpp:1808
+msgid "Income and Expenses of Current Month"
+msgstr "Ingresos e gastos este mes"
+
+#: views/khomeview.cpp:1816
+msgid "Scheduled Income"
+msgstr "Ingresos previstos"
+
+#: views/khomeview.cpp:1819
+msgid "Expenses"
+msgstr "Gastos"
+
+#: views/khomeview.cpp:1822
+msgid "Scheduled Expenses"
+msgstr "Gastos previstos"
+
+#: views/khomeview.cpp:1850
+msgid "Liquid Assets and Liabilities"
+msgstr "Activos e pasivos líquidos"
+
+#: views/khomeview.cpp:1855
+msgid "Liquid Assets"
+msgstr "Activos líquidos"
+
+#: views/khomeview.cpp:1858
+msgid "Transfers to Liquid Liabilities"
+msgstr "Transferencias a pasivos líquidos"
+
+#: views/khomeview.cpp:1861
+msgid "Liquid Liabilities"
+msgstr "Pasivos líquidos"
+
+#: views/khomeview.cpp:1864
+msgid "Other Transfers"
+msgstr "Outras transferencias"
+
+#: views/khomeview.cpp:1908
+msgid "Cash Flow Status"
+msgstr "Estado do fluxo de caixa"
+
+#: views/khomeview.cpp:1914
+msgid "Expected Liquid Assets"
+msgstr "Activos líquidos agardados"
+
+#: views/khomeview.cpp:1917
+msgid "Expected Liquid Liabilities"
+msgstr "Pasivos líquidos agardados"
+
+#: views/khomeview.cpp:1920
+msgid "Expected Profit/Loss"
+msgstr "Gañancias/Perdas agardadas"
+
+#: plugins/ofximport/ofximporterplugin.cpp:64
+msgid "OFX..."
+msgstr "OFX..."
+
+#: plugins/ofximport/ofximporterplugin.cpp:69
+msgid "OFX import file selection"
+msgstr "Escolla do ficheiro OFX a importar"
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid ""
+"Unable to import %1 using the OFX importer plugin. This file is not the "
+"correct format."
+msgstr ""
+"Non foi posíbel importar %1 usando a extensión de importación de OFX. Este "
+"ficheiro non ten o formato correcto."
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid "Incorrect format"
+msgstr "Formato incorrecto"
+
+#: plugins/ofximport/ofximporterplugin.cpp:122
+msgid "Unable to parse file"
+msgstr "Non foi posíbel procesar o ficheiro"
+
+#: plugins/ofximport/ofximporterplugin.cpp:576
+msgid "Online settings"
+msgstr "Configuración da conexión en liña"
+
+#: plugins/ofximport/ofximporterplugin.cpp:635
+#, c-format
+msgid "Error connecting to bank: %1"
+msgstr "Erro de conexión ao banco: %1"
+
+#: plugins/ofximport/ofximporterplugin.cpp:646
+msgid ""
+"Unable to import %1 using the OFX importer plugin. The plugin returned the "
+"following error:<p>%2"
+msgstr ""
+"Non foi posíbel importar %1 usando a extensión de importación de OFX. A "
+"extensión devolveu o seguinte erro:<p>%2"
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Importing process terminated unexpectedly."
+msgstr "O proceso de importación rematou inesperadamente."
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Failed to import all statements."
+msgstr "Non foi posíbel importar todos os extractos."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "The HTTP request failed."
+msgstr "O pedido HTTP fallou."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "Failed"
+msgstr "Fallou"
+
+#: plugins/ofximport/ofxpartner.cpp:410
+msgid "Cannot open file %1 for writing"
+msgstr "Non foi posíbel abrir o ficheiro «%1» para escritura"
+
+#: plugins/ofximport/ofxpartner.cpp:414
+msgid "OFX setup error"
+msgstr "Erro de configuración de OFX"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid "Loading banklist"
+msgstr "A cargar a lista de bancos"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid ""
+"Getting list of banks from http://moneycentral.msn.com/\n"
+"This may take some time depending on the available bandwidth."
+msgstr ""
+"A obter a lista de bancos de http://moneycentral.msn.com/\n"
+"Isto pode demorar algún tempo, segundo o ancho de banda dispoñíbel."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:155
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:199
+msgid "Supports online statements<br>"
+msgstr "Soporta extractos en liña<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:157
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:201
+msgid "Supports investments<br>"
+msgstr "Soporta investimentos<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:159
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:203
+msgid "Supports bill payment (but not supported by KMyMoney yet)<br>"
+msgstr "Soporta o pagamento de facturas (aínda non soportado por KMyMoney)<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:163
+msgid "Does not support online banking</p>"
+msgstr "Non soporta a banca en liña</p>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:173
+msgid "Please choose a bank."
+msgstr "Escolla un banco."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:179
+msgid "Please fill all fields with values."
+msgstr "Preencha todos os campos con valores."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:271
+msgid "No suitable accounts were found at this bank."
+msgstr "Non se atoparon contas apropriadas neste banco."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:283
+msgid "Please choose an account"
+msgstr "Por favor, escolla unha conta"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:386
+msgid "Server message: %1\n"
+msgstr "Mensaxe do servidor: %1\n"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+msgid "Your bank returned warnings when signing on"
+msgstr "O seu banco devolveu avisos cando conectaba"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+#, c-format
+msgid "WARNING %1"
+msgstr "AVISO %1"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+msgid "Error signing onto your bank"
+msgstr "Erro ao conectar co banco"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, c-format
+msgid "ERROR %1"
+msgstr "ERRO %1"
+
+#: plugins/ofximport/dialogs/konlinebankingstatus.cpp:59
+msgid "Enabled & configured"
+msgstr "Habilitada e configurada"
+
+#: plugins/ofximport/dialogs/rc.cpp:1
+msgid "OFX Direct Connect"
+msgstr "Conexión directa OFX"
+
+#: plugins/ofximport/dialogs/rc.cpp:2
+msgid "Contacting bank..."
+msgstr "Conectando co banco ..."
+
+#: plugins/ofximport/dialogs/rc.cpp:4
+msgid "Online Banking Account Setup"
+msgstr "Configuración da conta de banca online"
+
+#: plugins/ofximport/dialogs/rc.cpp:5
+msgid "Select Financial Institution"
+msgstr "Escoller a entidade financeira"
+
+#: plugins/ofximport/dialogs/rc.cpp:6
+msgid "Please select your financial institution from the list below..."
+msgstr "Escolla a súa entidade financeira na lista en baixo..."
+
+#: plugins/ofximport/dialogs/rc.cpp:7
+msgid "Automatic"
+msgstr "Automático"
+
+#: plugins/ofximport/dialogs/rc.cpp:8
+msgid "Financial Institution"
+msgstr "Entidade financeira"
+
+#: plugins/ofximport/dialogs/rc.cpp:9
+msgid "Manual"
+msgstr "Manual"
+
+#: plugins/ofximport/dialogs/rc.cpp:10
+msgid "Org"
+msgstr "Org"
+
+#: plugins/ofximport/dialogs/rc.cpp:11
+msgid "FID"
+msgstr "FID"
+
+#: dialogs/settings/rc.cpp:120 plugins/ofximport/dialogs/rc.cpp:12
+#: widgets/rc.cpp:46
+msgid "URL"
+msgstr "URL"
+
+#: plugins/ofximport/dialogs/rc.cpp:13
+msgid "Enter Login Details"
+msgstr "Introduza os detalles de aceso"
+
+#: plugins/ofximport/dialogs/rc.cpp:14
+msgid ""
+"Please enter the username and password you use to log into this bank for "
+"online banking. Please note that many banks require a separate signup, and "
+"assign a separate PIN or password just for online banking from home."
+msgstr ""
+"Indique o nome de usuario e o contrasinal que usa para acceder á banca "
+"online do seu banco. Lembre que moitos bancos requiren un contrato "
+"específico, e asinan un PIN ou contrasinal só para a banca online desde a "
+"casa."
+
+#: plugins/ofximport/dialogs/rc.cpp:15
+msgid "Connection Details"
+msgstr "Detalles da conexión"
+
+#: plugins/ofximport/dialogs/rc.cpp:16
+msgid "Username"
+msgstr "Nome de usuario"
+
+#: plugins/ofximport/dialogs/rc.cpp:17 plugins/ofximport/dialogs/rc.cpp:36
+msgid "Header Version"
+msgstr "Versión do cabezallo"
+
+#: plugins/ofximport/dialogs/rc.cpp:18 plugins/ofximport/dialogs/rc.cpp:37
+msgid "Identify as"
+msgstr "Identificar como"
+
+#: dialogs/rc.cpp:742 plugins/ofximport/dialogs/rc.cpp:19
+msgid "Password"
+msgstr "Contrasinal"
+
+#: plugins/ofximport/dialogs/rc.cpp:20
+msgid "Select Account"
+msgstr "Escolla unha Conta"
+
+#: plugins/ofximport/dialogs/rc.cpp:21
+msgid ""
+"Please select the account from your financial institution from the list "
+"below which matches this account."
+msgstr ""
+"Escolla a conta na súa entidade financeira na lista en baixo que casa con "
+"esta conta."
+
+#: plugins/ofximport/dialogs/rc.cpp:24
+msgid "Bank"
+msgstr "Banco"
+
+#: plugins/ofximport/dialogs/rc.cpp:25
+msgid "Branch"
+msgstr "Galla"
+
+#: plugins/ofximport/dialogs/rc.cpp:26
+msgid "WizardPage"
+msgstr "Páxina de asistente"
+
+#: plugins/ofximport/dialogs/rc.cpp:27
+msgid ""
+"Congratulations! You have successfully set up your bank for online banking "
+"via OFX."
+msgstr "Parabéns! Configurou satisfactoriamente a banca online mediante OFX."
+
+#: plugins/ofximport/dialogs/rc.cpp:28
+msgid "Account Details"
+msgstr "Detalles da conta"
+
+#: plugins/ofximport/dialogs/rc.cpp:29 plugins/ofximport/dialogs/rc.cpp:31
+msgid "&lt;Not configured&gt;"
+msgstr "&lt;Non configurada&gt;"
+
+#: plugins/ofximport/dialogs/rc.cpp:30
+msgid "BANK/BROKER:"
+msgstr "BANCO/CORREDOR:"
+
+#: plugins/ofximport/dialogs/rc.cpp:32
+msgid "Unavailable"
+msgstr "Non dispoñíbel"
+
+#: plugins/ofximport/dialogs/rc.cpp:33
+msgid "ACCOUNT:"
+msgstr "CONTA:"
+
+#: plugins/ofximport/dialogs/rc.cpp:34
+msgid "STATUS:"
+msgstr "ESTADO:"
+
+#: plugins/ofximport/dialogs/rc.cpp:35
+msgid "OFX Details"
+msgstr "Detalles de OFX"
+
+#: plugins/ofximport/dialogs/rc.cpp:38
+msgid "Start date of import"
+msgstr "Data inicial da importación"
+
+#: plugins/ofximport/dialogs/rc.cpp:39
+msgid "To&day minus"
+msgstr "&Hoxe menos"
+
+#: plugins/ofximport/dialogs/rc.cpp:40
+msgid "days"
+msgstr "días"
+
+#: plugins/ofximport/dialogs/rc.cpp:41
+msgid "Last &update"
+msgstr "Última &actualización"
+
+#: plugins/ofximport/dialogs/rc.cpp:42
+msgid "Pi&ck date"
+msgstr "&Escoller unha data"
+
+#: plugins/ofximport/dialogs/rc.cpp:43
+msgid "Name is derived from"
+msgstr "O nome ven de"
+
+#: plugins/ofximport/dialogs/rc.cpp:44
+msgid "P&AYEEID"
+msgstr "ID&BENEFICIARIO"
+
+#: plugins/ofximport/dialogs/rc.cpp:45
+msgid "&NAME"
+msgstr "&NOME"
+
+#: plugins/ofximport/dialogs/rc.cpp:46
+msgid "field if both are present in download"
+msgstr "o campo se ambos os dous están presentes no obtido"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:81
+msgid "Quicken Windows 2003"
+msgstr "Quicken Windows 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:82
+msgid "Quicken Windows 2004"
+msgstr "Quicken Windows 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:83
+msgid "Quicken Windows 2005"
+msgstr "Quicken Windows 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:84
+msgid "Quicken Windows 2006"
+msgstr "Quicken Windows 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:85
+msgid "Quicken Windows 2007"
+msgstr "Quicken Windows 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:86
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:111
+msgid "Quicken Windows 2008"
+msgstr "Quicken Windows 2008"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:89
+msgid "MS-Money 2003"
+msgstr "MS-Money 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:90
+msgid "MS-Money 2004"
+msgstr "MS-Money 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:91
+msgid "MS-Money 2005"
+msgstr "MS-Money 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:92
+msgid "MS-Money 2006"
+msgstr "MS-Money 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:93
+msgid "MS-Money 2007"
+msgstr "MS-Money 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:94
+msgid "MS-Money Plus"
+msgstr "MS-Money Plus"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:91
+msgid "Report Configuration"
+msgstr "Configuración do informe"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:117
+#: dialogs/kreportconfigurationfilterdlg.cpp:135
+msgid "Rows/Columns"
+msgstr "Filas/Columnas"
+
+#: dialogs/investtransactioneditor.cpp:203
+#: dialogs/investtransactioneditor.cpp:537
+#: dialogs/investtransactioneditor.cpp:579 dialogs/rc.cpp:103
+#: dialogs/rc.cpp:158 dialogs/rc.cpp:245 dialogs/rc.cpp:750 dialogs/rc.cpp:794
+#: widgets/kmymoneyaccountselector.cpp:182 widgets/register.cpp:64
+#: widgets/register.cpp:567 widgets/transaction.cpp:1500
+msgid "Security"
+msgstr "Valor bursátil"
+
+#: dialogs/investtransactioneditor.cpp:211
+msgid "Asset account"
+msgstr "Contas de activos"
+
+#: dialogs/investtransactioneditor.cpp:1073
+msgid "Price/Share"
+msgstr "Prezo/participación"
+
+#: dialogs/kmergetransactionsdlg.cpp:39
+msgid "Merge Transactions"
+msgstr "Xuntar os asentos"
+
+#: dialogs/kmergetransactionsdlg.cpp:40
+msgid "Are you sure you wish to merge these transactions?"
+msgstr "Desexa realmente xuntar estes asentos?"
+
+#: dialogs/kstartdlg.cpp:59
+msgid "Start Dialog"
+msgstr "Diálogo inicial"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Templates"
+msgstr "Modelos"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Select templates"
+msgstr "Escoller os modelos"
+
+#: dialogs/kstartdlg.cpp:80 dialogs/kstartdlg.cpp:119
+msgid "New KMyMoney document"
+msgstr "Novo documento de KMyMoney"
+
+#: dialogs/kstartdlg.cpp:90
+msgid "Open a KMyMoney document"
+msgstr "Abrir un documento de KMyMoney"
+
+#: dialogs/kstartdlg.cpp:96
+msgid ""
+"%1|KMyMoney files (*.kmy)\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Ficheiros de KMyMoney (*.kmy)\n"
+"%2|Todos os ficheiros (*.*)"
+
+#: dialogs/kstartdlg.cpp:102
+msgid "Recent Files"
+msgstr "Ficheiros recentes"
+
+#: dialogs/kstartdlg.cpp:217
+msgid "Blank Document"
+msgstr "Documento baleiro"
+
+#: dialogs/knewbudgetdlg.cpp:71
+msgid "Please specify a budget name"
+msgstr "Indique un nome para o orzamento"
+
+#: dialogs/kgncpricesourcedlg.cpp:48
+#, c-format
+msgid "Investment: %1"
+msgstr "Investimento: %1"
+
+#: dialogs/kgncpricesourcedlg.cpp:49
+#, c-format
+msgid "Quote source: %1"
+msgstr "Fonte da cotización: %1"
+
+#: dialogs/kmymoneypricedlg.cpp:62 dialogs/ksecuritylisteditor.cpp:69
+msgid "Delete this entry"
+msgstr "Borra esta entrada"
+
+#: dialogs/ksecuritylisteditor.cpp:70
+msgid "Remove this security item from the file"
+msgstr "Elimina este valor bursátil do ficheiro"
+
+#: dialogs/ksecuritylisteditor.cpp:73
+msgid "&Add"
+msgstr "&Engadir"
+
+#: dialogs/kmymoneypricedlg.cpp:68 dialogs/ksecuritylisteditor.cpp:75
+msgid "Add a new entry"
+msgstr "Engade unha nova entrada"
+
+#: dialogs/ksecuritylisteditor.cpp:76
+msgid "Create a new security entry."
+msgstr "Crea un novo valor bursátil."
+
+#: dialogs/keditequityentrydlg.cpp:77 dialogs/kmymoneypricedlg.cpp:74
+#: dialogs/ksecuritylisteditor.cpp:81
+msgid "Modify the selected entry"
+msgstr "Modifica a entrada escollida"
+
+#: dialogs/ksecuritylisteditor.cpp:82
+msgid "Change the security information of the selected entry."
+msgstr "Cambia a información do valor escollido."
+
+#: dialogs/kmymoneypricedlg.cpp:80 dialogs/ksecuritylisteditor.cpp:87
+msgid "Close the dialog"
+msgstr "Pechar o diálogo"
+
+#: dialogs/kmymoneypricedlg.cpp:81 dialogs/ksecuritylisteditor.cpp:88
+msgid "Use this to close the dialog and return to the application."
+msgstr "Use isto para pechar o diálogo e retornar ao programa."
+
+#: dialogs/ksecuritylisteditor.cpp:184
+msgid ""
+"Do you really want to remove the currency <b>%1</b> from the file?</"
+"p><i>Note: It is currently not supported to add currencies.</i>"
+msgstr ""
+"Desexa realmente eliminar a divisa <b>%1</b> do ficheiro?</p> <i>Nota: Na "
+"actualidade non se poden engadir divisas.</i>"
+
+#: dialogs/ksecuritylisteditor.cpp:187
+msgid "Do you really want to remove the %1 <b>%2</b> from the file?"
+msgstr "Desexa realmente eliminar o %1 <b>%2</b> do ficheiro?"
+
+#: dialogs/ksecuritylisteditor.cpp:190
+msgid "Delete security"
+msgstr "Borrar o valor"
+
+#: dialogs/kmymoneypricedlg.cpp:63
+msgid "Remove this price item from the file"
+msgstr "Eliminar este prezo do ficheiro"
+
+#: dialogs/kmymoneypricedlg.cpp:66 dialogs/mymoneyqifprofileeditor.cpp:94
+msgid "&New"
+msgstr "&Novo"
+
+#: dialogs/kmymoneypricedlg.cpp:69
+msgid "Create a new price entry."
+msgstr "Crea un novo prezo."
+
+#: dialogs/kmymoneypricedlg.cpp:75
+msgid "Change the details of selected price information."
+msgstr "Cambia os detalles do prezo escollido."
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Do you really want to delete the selected price entry?"
+msgstr "Desexa realmente borrar o prezo escollido?"
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Delete price information"
+msgstr "Borrar a información do prezo"
+
+#: dialogs/kchooseimportexportdlg.cpp:46
+msgid ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Escolla o tipo de importación a realizar. Ten unha explicación\n"
+"do tipo ao fondo da pantalla, que se actualiza cando\n"
+"escolle un ítem na caixa de selección.\n"
+"\n"
+"Cando escolla o tipo que desexa prema no botón «Aceitar»."
+
+#: dialogs/kchooseimportexportdlg.cpp:50 dialogs/rc.cpp:22
+msgid "Choose import type:"
+msgstr "Escolla o tipo de importación:"
+
+#: dialogs/kchooseimportexportdlg.cpp:51 dialogs/rc.cpp:20
+msgid "Choose Import Type Dialog"
+msgstr "Diálogo de selección do tipo de importación"
+
+#: dialogs/kchooseimportexportdlg.cpp:53
+msgid ""
+"Please choose the type of export you wish to perform. A simple explanation\n"
+"of the export type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an export type please press the OK button."
+msgstr ""
+"Escolla o tipo de exportación a realizar. Ten unha explicación\n"
+"do tipo ao fondo da pantalla, que se actualiza cando\n"
+"escolle un ítem na caixa de selección.\n"
+"\n"
+"Cando escolla o tipo que desexa prema no botón «Aceitar»."
+
+#: dialogs/kchooseimportexportdlg.cpp:57
+msgid "Choose export type:"
+msgstr "Escolla o tipo de exportación:"
+
+#: dialogs/kchooseimportexportdlg.cpp:58
+msgid "Choose Export Type Dialog"
+msgstr "Diálogo de selección do tipo de exportación"
+
+#: dialogs/kchooseimportexportdlg.cpp:78
+msgid ""
+"QIF files are created by the popular accounting program Quicken.\n"
+"Another dialog will appear, if you choose this type, asking for further\n"
+"information relevant to the Quicken format."
+msgstr ""
+"Os ficheiros QIF son criados polo popular programa de contabilidade "
+"Quicken.\n"
+"A seguir, aparecerá outro diálogo, se escolle este tipo, onde se lle\n"
+"preguntará uns datos relevantes para o formato Quicken."
+
+#: dialogs/kchooseimportexportdlg.cpp:82
+msgid ""
+"The CSV type uses a comma delimeted text file that can be used by\n"
+"most popular spreadsheet programs available for Linux and other operating\n"
+"systems."
+msgstr ""
+"O tipo CSV usa un ficheiro de texto delimitado por vírgulas que pode ser "
+"usado polas\n"
+"follas de cálculo máis populares dispoñíbeis en Linux\n"
+"e outros Sistemas Operativos."
+
+#: dialogs/kequitypriceupdatedlg.cpp:222
+msgid "%1 units in %2"
+msgstr "%1 unidades en %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid ""
+"Failed to retrieve an exchange rate for %1 from %2. It will be skipped this "
+"time."
+msgstr ""
+"Non foi posíbel obter a cotización de %1 desde %2. Será ignorada esta vez."
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid "Price Update Failed"
+msgstr "Fallou a actualización dos prezos"
+
+#: dialogs/kequitypriceupdatedlg.cpp:427
+msgid ""
+"Failed to retrieve a quote for %1 from %2. Press <b>No</b> to remove the "
+"online price source from this security permanently, <b>Yes</b> to continue "
+"updating this security during future price updates or <b>Cancel</b> to stop "
+"the current update operation."
+msgstr ""
+"Non foi posíbel obter a cotización de %1 en %2. Prema <b>Non</b> para "
+"eliminar permanentemente a fonte de prezos en liña para este valor bursátil, "
+"<b>Si</b> para continuar a actualizar este valor en vindeiras actualizacións "
+"ou <b>Cancelar</b> para cancelar esta actualización."
+
+#: dialogs/kequitypriceupdatedlg.cpp:427 dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Price Update Failed"
+msgstr "Fallou a actualización dos prezos"
+
+#: dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Cannot update security <b>%1</b>: %2"
+msgstr "Non é posíbel actualizar o valor <b>%1</b>: %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:528
+msgid "Price for %1 updated (id %2)"
+msgstr "Actualizouse o prezo de %1 (id %2)"
+
+#: dialogs/kequitypriceupdatedlg.cpp:534
+msgid "Received an invalid price for %1, unable to update."
+msgstr "Recibiuse un prezo non válido para %1, non foi posíbel actualizar."
+
+#: dialogs/kequitypriceupdatedlg.cpp:554
+msgid ""
+"Received a price for %1 (id %2), but this symbol is not on the list! "
+"Aborting entire update."
+msgstr ""
+"Recibiuse un prezo para %1 (id %2), pero este símbolo non está na lista! "
+"Abortando toda a actualización."
+
+#: dialogs/transactioneditor.cpp:222
+msgid ""
+"The number <b>%1</b> has already been used in account <b>%2</b>. Do you want "
+"to replace it with the next available number?"
+msgstr ""
+"O número <b>%1</b> xa foi usado na conta <b>%2</b>. Desexa substituílo co "
+"seguinte número dispoñíbel?"
+
+#: dialogs/transactioneditor.cpp:222
+msgid "Duplicate number"
+msgstr "Número duplicado"
+
+#: dialogs/transactioneditor.cpp:303
+msgid ""
+"This transaction has more than two splits and is based on a different "
+"currency (%1). Using this account to modify the transaction is currently not "
+"very well supported by KMyMoney and may result in false results."
+msgstr ""
+"Este asento ten máis de dúas partidas e está baseado nunha divisa distinta (%"
+"1). O uso desta conta para modificar o asento non está ben soportado por "
+"KMyMoney e pode orixinar resultados falsos."
+
+#: dialogs/transactioneditor.cpp:305
+msgid ""
+"KMyMoney was not able to find a more appropriate account to edit this "
+"transaction. Nevertheless, you are allowed to modify the transaction. If you "
+"don't want to edit this transaction, please cancel from editing next."
+msgstr ""
+"KMyMoney non foi quen de atopar unha conta máis axeitada para editar este "
+"asento. Porén, permíteselle modificalo. Se non quer editalo, cancele na "
+"seguinte páxina."
+
+#: dialogs/transactioneditor.cpp:307
+msgid ""
+"Using e.g. <b>%1</b> to edit this transaction is a better choice. "
+"Nevertheless, you are allowed to modify the transaction. If you want to use "
+"the suggested account instead, please cancel from editing next and change "
+"the view to the suggested account."
+msgstr ""
+"Usar p. ex. <b>%1</b> para editar este asento é mellor idea. Porén, "
+"permíteselle modificalo. Se prefire usar a conta suxerida no canto desta, "
+"cancele e mude a vista para a conta suxerida."
+
+#: dialogs/transactioneditor.cpp:410
+msgid ""
+"This transaction has more than two splits and is originally based on a "
+"different currency (%1). Using this account to modify the transaction may "
+"result in rounding errors. Do you want to continue?"
+msgstr ""
+"Este asento ten máis de dúas partidas e está baseado nunha divisa distinta (%"
+"1). O uso desta conta para modificar o asento pode ocasionar erros de "
+"redondeo. Desexa continuar?"
+
+#: dialogs/transactioneditor.cpp:412
+msgid ""
+"At least one of the selected transactions has more than two splits and is "
+"originally based on a different currency (%1). Using this account to modify "
+"the transactions may result in rounding errors. Do you want to continue?"
+msgstr ""
+"Polo menos un dos asentos escollidos ten máis de dúas partidas e está "
+"baseado nunha divisa distinta (%1). O uso desta conta para modificar o "
+"asento pode ocasionar erros de redondeo. Desexa continuar?"
+
+#: dialogs/transactioneditor.cpp:557
+msgid "Storing transactions"
+msgstr "Gardando os asentos"
+
+#: dialogs/transactioneditor.cpp:603 widgets/kmymoneybriefschedule.cpp:65
+msgid "&Enter"
+msgstr "Ase&ntar"
+
+#: dialogs/transactioneditor.cpp:606
+msgid "Use this to enter the transaction into the ledger."
+msgstr "Use isto para asentar esta operación no libro maior."
+
+#: dialogs/transactioneditor.cpp:607
+msgid "&Schedule"
+msgstr "&Planificar"
+
+#: dialogs/transactioneditor.cpp:609
+msgid "Accepts the entered data and stores it as schedule"
+msgstr "Aceita os dados introducidos e gárdaos como un asento planificado"
+
+#: dialogs/transactioneditor.cpp:610
+msgid "Use this to schedule the transaction for later entry into the ledger."
+msgstr "Use isto para planificar a introdución da transacción no libro maior."
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"The transaction you are about to enter has a post date in the future.<br/"
+"><br/>Do you want to enter it in the ledger or add it to the schedules?"
+msgstr ""
+"A transacción que está a piques de asentar ten unha data futura.<br/>br/"
+">Desexa asentala no libro maior ou engadila ás planificacións?"
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"_: Dialog caption for 'Enter or schedule' dialog\n"
+"Enter or schedule?"
+msgstr "Asentar ou planificar?"
+
+#: dialogs/transactioneditor.cpp:671
+msgid ""
+"The balance of account <b>%1</b> dropped below the warning balance of %2."
+msgstr "O saldo da conta <b>%1</b> baixo do nivel de alerta de %2."
+
+#: dialogs/transactioneditor.cpp:677
+msgid ""
+"The balance of account <b>%1</b> dropped below the minimum balance of %2."
+msgstr "O saldo da conta <b>%1</b> baixo do nivel mínimo de %2."
+
+#: dialogs/transactioneditor.cpp:683
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit warning "
+"limit of %2."
+msgstr ""
+"O balance da conta <b>%1</b> baixo do límite máximo de aviso de crédito de %"
+"2."
+
+#: dialogs/transactioneditor.cpp:689
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit limit of %"
+"2."
+msgstr "O balance da conta <b>%1</b> baixo do límite máximo de crédito de %2."
+
+#: dialogs/transactioneditor.cpp:740
+msgid "Payer/Receiver"
+msgstr "Pagador/Cobrador"
+
+#: dialogs/transactioneditor.cpp:748
+msgid "Category/Account"
+msgstr "Categoría/Conta"
+
+#: dialogs/transactioneditor.cpp:980 dialogs/transactioneditor.cpp:1016
+#: dialogs/transactioneditor.cpp:1378 dialogs/transactioneditor.cpp:1399
+#: dialogs/transactioneditor.cpp:1422 dialogs/transactioneditor.cpp:1443
+#: dialogs/transactioneditor.cpp:1505 dialogs/transactioneditor.cpp:1509
+#: widgets/transaction.cpp:902
+msgid "Transfer from"
+msgstr "Conta de orixe"
+
+#: dialogs/transactioneditor.cpp:982 dialogs/transactioneditor.cpp:1018
+#: dialogs/transactioneditor.cpp:1401 dialogs/transactioneditor.cpp:1445
+#: dialogs/transactioneditor.cpp:1506 widgets/transaction.cpp:902
+msgid "Transfer to"
+msgstr "Transferir a"
+
+#: dialogs/transactioneditor.cpp:1259
+msgid "Select autofill transaction"
+msgstr "Escoller a transacción de completación automática"
+
+#: dialogs/transactionmatcher.cpp:77
+msgid "First transaction does not match requirement for matching"
+msgstr "O primeiro asento non cumpre os requirimentos para o emparellamento"
+
+#: dialogs/transactionmatcher.cpp:79
+msgid "Second transaction does not match requirement for matching"
+msgstr "O segundo asento non cumpre os requirimentos para o emparellamento"
+
+#: dialogs/transactionmatcher.cpp:83 dialogs/transactionmatcher.cpp:133
+msgid "Splits for %1 have conflicting values (%2,%3)"
+msgstr "As partidas de %1 teñen valores en conflito (%2,%3)"
+
+#: dialogs/transactionmatcher.cpp:96 dialogs/transactionmatcher.cpp:149
+msgid ""
+"Both of these transactions have been imported into %1. Therefore they "
+"cannot be matched. Matching works with one imported transaction and one non-"
+"imported transaction."
+msgstr ""
+"Ambos as dúas operacións foron importadas en %1. Por tanto non poden ser "
+"emparelladas. O emparellamento funciona cunha operación importada e unha non "
+"importada."
+
+#: dialogs/transactionmatcher.cpp:101 dialogs/transactionmatcher.cpp:156
+msgid "Unable to match all splits (%1)"
+msgstr "Non foi posíbel emparellar todas as partidas (%1)"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:65
+msgid "Account and transfer account are the same. Please change one."
+msgstr ""
+"A conta orixe e a conta a transferir son a mesma. Por favor, cambie unha."
+
+#: dialogs/kconfirmmanualenterdlg.cpp:84
+msgid "Payee changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Mudou o beneficiario<br>&nbsp;&nbsp;&nbsp;Anterior: <b>%1</b>, Novo: <b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:92
+#: dialogs/kconfirmmanualenterdlg.cpp:100
+msgid "Account changed. Old: \"%1\", New: \"%2\""
+msgstr "Conta cambiada. Anterior: «%1», Nova: «%2»"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:107
+msgid "Account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Cambiou a conta.<br>&nbsp;&nbsp;&nbsp;Anterior: <b>%1</b>, Nova: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:115
+msgid ""
+"Transfer account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</"
+"b><p>"
+msgstr ""
+"Conta de transferencia cambiada.<br>&nbsp;&nbsp;&nbsp;Anterior: <b>%1</b>, "
+"Nova: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:143
+msgid ""
+"Category changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Mudou a categoría.<br>&nbsp;&nbsp;&nbsp;Anterior: <b>%1</b>, Novo: <b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:151
+#: dialogs/kconfirmmanualenterdlg.cpp:153
+msgid "empty"
+msgstr "vacío"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:157
+msgid "Memo changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Mudou o concepto.<br>&nbsp;&nbsp;&nbsp;Anterior: <b>%1</b>, Novo: <b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:166
+msgid "Amount changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Mudou o importe.<br>&nbsp;&nbsp;&nbsp;Anterior: <b>%1</b>, Novo: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:175
+msgid ""
+"Reconciliation flag changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%"
+"2</b><p>"
+msgstr ""
+"Mudou a marca de conciliación.<br>&nbsp;&nbsp;&nbsp;Anterior: <b>%1</b>, "
+"Novo: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:182
+msgid "Fatal error in determining data: "
+msgstr "Aconteceu un erro fatal ao determinar a data: "
+
+#: dialogs/kselectdatabasedlg.cpp:56
+msgid ""
+"There are no Qt SQL drivers installed in your system.\n"
+"Please consult documentation for your distro, or visit the Qt web site (www."
+"trolltech.com) and search for SQL drivers."
+msgstr ""
+"Non hai controladores SQL de Qt instalados no seu sistema.\n"
+"Consulte a documentación da súa distribución, ou visite o sitio web de Qt "
+"(www.trolltech.com) e procure controladores SQL."
+
+#: dialogs/kselectdatabasedlg.cpp:100
+msgid "Qt SQL driver %1 is no longer installed on your system"
+msgstr "O controlador para %1 de Qt SQL non está instalado no sistema"
+
+#: dialogs/kselectdatabasedlg.cpp:107
+msgid "Qt SQL driver %1 is not suported"
+msgstr "O controlador %1 de Qt SQL non está soportado"
+
+#: dialogs/kselectdatabasedlg.cpp:164
+msgid "SQLite files (*.sql);; All files (*.*)"
+msgstr "Ficheiros de SQLite (*.sql);; Todos os ficheiros (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:167
+msgid "Select SQLite file"
+msgstr "Escoller o estilo de SQLite"
+
+#: dialogs/kselectdatabasedlg.cpp:188
+msgid "All files (*.*)"
+msgstr "Todos os ficheiros (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:191
+msgid "Select output file"
+msgstr "Escoller o ficheiro de saída"
+
+#: dialogs/investactivities.cpp:168
+msgid "%1 (Brokerage)"
+msgstr "%1 (Corretaxe)"
+
+#: dialogs/investactivities.cpp:200 dialogs/investactivities.cpp:288
+#: dialogs/investactivities.cpp:425 widgets/transaction.cpp:1548
+msgid "Price/share"
+msgstr "Prezo/participación"
+
+#: dialogs/investactivities.cpp:586
+msgid "Ratio 1/"
+msgstr "Taxa 1/"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid ""
+"<p>Please check that all the details in the following dialog are correct and "
+"press OK.</p><p>Editable data can be changed and can either be applied to "
+"just this occurence or for all subsequent occurences for this schedule. "
+"(You will be asked what you intend after pressing OK in the following dialog)"
+"</p>"
+msgstr ""
+"<p>Por favor, comprobe que todos os detalles son correctos e prema Aceitar.</"
+"p><p>Os dados editábeis poden ser cambiados e tamén poden ser aplicados a só "
+"esta ou a todas as seguintes aparicións deste evento planificado "
+"(Preguntaráselle que pretende despois de premer Aceitar).</p>"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid "Enter scheduled transaction"
+msgstr "Asentar a transacción planificada"
+
+#: dialogs/kcsvprogressdlg.cpp:65 dialogs/kexportdlg.cpp:65
+msgid "&Export"
+msgstr "&Exportar"
+
+#: dialogs/kexportdlg.cpp:67 dialogs/kimportdlg.cpp:68
+msgid "Start operation"
+msgstr "Iniciar a operación"
+
+#: dialogs/kexportdlg.cpp:68
+msgid "Use this to start the export operation"
+msgstr "Use isto para iniciar a operación de exportación"
+
+#: dialogs/kexportdlg.cpp:71 dialogs/kimportdlg.cpp:72
+msgid "&Browse..."
+msgstr "&Escoller..."
+
+#: dialogs/kexportdlg.cpp:73 dialogs/kimportdlg.cpp:74
+msgid "Select filename"
+msgstr "Escolla o nome de ficheiro"
+
+#: dialogs/kexportdlg.cpp:74 dialogs/kimportdlg.cpp:75
+msgid "Use this to select a filename to export to"
+msgstr "Use isto para escoller un nome de ficheiro ao que exportar"
+
+#: dialogs/kexportdlg.cpp:77 dialogs/kimportdlg.cpp:78
+#: dialogs/settings/ksettingsonlinequotes.cpp:64
+#: widgets/kmymoneyonlinequoteconfig.cpp:64
+msgid "&New..."
+msgstr "&Novo..."
+
+#: dialogs/kexportdlg.cpp:79 dialogs/kimportdlg.cpp:80
+#: dialogs/mymoneyqifprofileeditor.cpp:96
+msgid "Create a new profile"
+msgstr "Crea un novo perfil"
+
+#: dialogs/kexportdlg.cpp:80 dialogs/kimportdlg.cpp:81
+msgid "Use this to open the profile editor"
+msgstr "Use isto para abrir o editor de perfís"
+
+#: dialogs/keditloanwizard.cpp:56
+msgid "Edit loan wizard"
+msgstr "Asistente para a edición de empréstitos"
+
+#: dialogs/keditloanwizard.cpp:58
+msgid ""
+"Please enter the date from which on the following changes will be effective. "
+"The date entered must be later than the opening date of this account (%1), "
+"but must not be in the future. The default will be today."
+msgstr ""
+"Introduza a data a partir da cal os seguintes cambios serán efectivos. A "
+"data que escreba debe ser posterior á de apertura da conta (%1), pero non "
+"debe ser futura. Por omisión, será hoxe."
+
+#: dialogs/keditloanwizard.cpp:76
+msgid ""
+"Note: you will not be able to modify this account today, because the opening "
+"date \"%1\" is in the future. Please revisit this dialog when the time has "
+"come."
+msgstr ""
+"Nota: non poderá modificar esta conta hoxe, devido a que a data de apertura «%"
+"1» está no futuro. Por favor volte a este diálogo cando chegue o momento."
+
+#: dialogs/keditloanwizard.cpp:244
+msgid ""
+"Your previous selection was \"%1\". If you select another option, KMyMoney "
+"will dismiss the changes you have just entered. Do you wish to proceed?"
+msgstr ""
+"A súa anterior escolla foi «%1». Se escolle outra, KMyMoney anulará os "
+"cambios que acaba de facer. Quer continuar?"
+
+#: dialogs/kcategoryreassigndlg.cpp:81
+msgid ""
+"At least one transaction/schedule still references the category <b>%1</b>. "
+"However, at least one category with the same currency must exist so that the "
+"transactions/schedules can be reassigned."
+msgstr ""
+"Polo menos unha transacción/planificación mantén referencias á categoría <b>%"
+"1</b>. Porén, debe existir unha categoría denominada na mesma divisa para "
+"que poda reasignar as transaccións/planificacións."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid ""
+"This dialog does not allow to create new categories. Please pick a category "
+"from the list."
+msgstr ""
+"Este diálogo non permite criar novas categorías. Escolla unha categoría na "
+"lista."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid "Category creation"
+msgstr "Creación de categoría"
+
+#: dialogs/kbackupdlg.cpp:61
+msgid "C&hoose..."
+msgstr "Es&coller..."
+
+#: dialogs/kbackupdlg.cpp:63
+msgid "Select mount point"
+msgstr "Escolla o punto de montaxe"
+
+#: dialogs/kbackupdlg.cpp:64
+msgid "Use this to browse to the mount point."
+msgstr "Use isto para indicar o punto de montaxe."
+
+#: dialogs/keditscheduledlg.cpp:293
+msgid "Next due date"
+msgstr "Vindeira data de vencemento"
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid ""
+"You have turned on the GPG encryption support. This means, that new files "
+"will be stored encrypted. Existing files will not be encrypted "
+"automatically. To achieve encryption of existing files, please use the "
+"<b>File/Save as...</b> feature and store the file under a different name. "
+"Once confident with the result, feel free to delete the old file and rename "
+"the encrypted one to the old name."
+msgstr ""
+"Activou o soporte de cifraxe con GPG, o que significa que os ficheiros novos "
+"gardaranse cifrados. Porén os ficheiros existentes non se cifrarán "
+"automaticamente. Para cifrar os ficheiros xa existentes, empregue "
+"<b>Ficheiro/Gardar como...</b> e garde o ficheiro cun nome diferente. Cando "
+"confíe no sistema, borre o ficheiro vello e mude o nome do cifrado."
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid "GPG encryption activated"
+msgstr "Activouse a cifraxe con GPG"
+
+#: dialogs/settings/ksettingshome.cpp:51
+msgid "&Up"
+msgstr "&Subir"
+
+#: dialogs/settings/ksettingshome.cpp:53
+msgid "Move selected item up"
+msgstr "Move o obxecto escollido cara riba"
+
+#: dialogs/settings/ksettingshome.cpp:54
+msgid "Use this to move the selected item up by one position in the list."
+msgstr ""
+"Empregue isto para mover o obxecto escollido unha posición cara riba na "
+"lista."
+
+#: dialogs/settings/ksettingshome.cpp:55
+msgid "&Down"
+msgstr "&Baixar"
+
+#: dialogs/settings/ksettingshome.cpp:57
+msgid "Move selected item down"
+msgstr "Move o obxecto seleccionado cara baixo"
+
+#: dialogs/settings/ksettingshome.cpp:58
+msgid "Use this to move the selected item down by one position in the list."
+msgstr ""
+"Use isto para mover o obxecto escollido unha posición cara baixo na lista."
+
+#: dialogs/settings/rc.cpp:1
+msgid "Color settings"
+msgstr "Configuración das cores"
+
+#: dialogs/settings/rc.cpp:2
+msgid "Foreground"
+msgstr "Principal"
+
+#: dialogs/settings/rc.cpp:3
+msgid "Text colors"
+msgstr "Cores de texto"
+
+#: dialogs/settings/rc.cpp:4
+msgid "Grid color"
+msgstr "Cor da grella"
+
+#: dialogs/settings/rc.cpp:5
+msgid "Erronous transaction"
+msgstr "Asento incorrecto"
+
+#: dialogs/settings/rc.cpp:6
+msgid "Value with missing conversion rate"
+msgstr "Valor ao que lle faltan as taxas de conversión"
+
+#: dialogs/settings/rc.cpp:7
+msgid "Negative value"
+msgstr "Valor negativo"
+
+#: dialogs/settings/rc.cpp:8
+msgid "Background"
+msgstr "Fondo"
+
+#: dialogs/settings/rc.cpp:10
+msgid "List background colors"
+msgstr "Cores do fondo da lista"
+
+#: dialogs/settings/rc.cpp:11
+msgid "Normal"
+msgstr "Normal"
+
+#: dialogs/settings/rc.cpp:12
+msgid "Alternate"
+msgstr "Alternar"
+
+#: dialogs/settings/rc.cpp:13
+msgid "Special background colors"
+msgstr "Cores de fondo especiais"
+
+#: dialogs/settings/rc.cpp:14
+msgid "Ledger group separator"
+msgstr "Separador de grupo no libro maior"
+
+#: dialogs/settings/rc.cpp:15
+msgid "Required field"
+msgstr "Campo requirido"
+
+#: dialogs/settings/rc.cpp:16
+msgid "Imported transaction"
+msgstr "Asento importado"
+
+#: dialogs/settings/rc.cpp:17
+msgid "Matched transaction"
+msgstr "Asento atopado"
+
+#: dialogs/settings/rc.cpp:18
+msgid "Font settings"
+msgstr "Configuración das fontes tipográficas"
+
+#: dialogs/settings/rc.cpp:19
+msgid "Use system fonts"
+msgstr "Usar as fontes tipográficas do sistema"
+
+#: dialogs/settings/rc.cpp:20
+msgid "Individual font settings"
+msgstr "Configuración de fonte individual"
+
+#: dialogs/settings/rc.cpp:24
+msgid "Number of Days of Account Cycle:"
+msgstr "Número de días do ciclo da conta:"
+
+#: dialogs/settings/rc.cpp:26
+msgid "Number of Days to Forecast:"
+msgstr "Número de días a prognosticar:"
+
+#: dialogs/settings/rc.cpp:27
+msgid "Forecast Method"
+msgstr "Método de prognóstico"
+
+#: dialogs/settings/rc.cpp:28
+msgid "Scheduled and Future Transactions"
+msgstr "Asentos planificados e futuros"
+
+#: dialogs/settings/rc.cpp:29
+msgid "History-based"
+msgstr "Baseado no historial"
+
+#: dialogs/settings/rc.cpp:30
+msgid "History-based settings"
+msgstr "Configuración do método baseado no historial"
+
+#: dialogs/settings/rc.cpp:31
+msgid "Number of Cycles to use in Forecast:"
+msgstr "Número de ciclos a usar no prognóstico:"
+
+#: dialogs/settings/rc.cpp:36
+msgid "General Settings"
+msgstr "Configuración xeral"
+
+#: dialogs/settings/rc.cpp:37
+msgid "Global"
+msgstr "Global"
+
+#: dialogs/settings/rc.cpp:38
+msgid "Startup page options"
+msgstr "Opcións da páxina inicial"
+
+#: dialogs/settings/rc.cpp:39
+msgid "Start with homepage"
+msgstr "Iniciar coa páxina de inicio"
+
+#: dialogs/settings/rc.cpp:40
+msgid "Start with last selected view"
+msgstr "Iniciar coa última vista escollida"
+
+#: dialogs/settings/rc.cpp:41
+msgid "Precision settings"
+msgstr "Configuración da precisión"
+
+#: dialogs/settings/rc.cpp:42
+msgid "Price precision"
+msgstr "Precisión do prezo"
+
+#: dialogs/settings/rc.cpp:43
+msgid "digits"
+msgstr "díxitos"
+
+#: dialogs/settings/rc.cpp:44
+msgid "Autosave options"
+msgstr "Opcións do gardado automático"
+
+#: dialogs/settings/rc.cpp:45
+msgid "Autosave periodically"
+msgstr "Gardar periodicamente"
+
+#: dialogs/settings/rc.cpp:46
+msgid "minutes"
+msgstr "minutos"
+
+#: dialogs/settings/rc.cpp:47
+msgid "Fiscal Year"
+msgstr "Ano fiscal"
+
+#: dialogs/settings/rc.cpp:48
+msgid "Your fiscal year starts on"
+msgstr "O ano fiscal comeza o"
+
+#: dialogs/settings/rc.cpp:49
+msgid "January"
+msgstr "Xaneiro"
+
+#: dialogs/settings/rc.cpp:50
+msgid "February"
+msgstr "Febreiro"
+
+#: dialogs/settings/rc.cpp:51
+msgid "March"
+msgstr "Marzo"
+
+#: dialogs/settings/rc.cpp:52
+msgid "April"
+msgstr "Abril"
+
+#: dialogs/settings/rc.cpp:53
+msgid "May"
+msgstr "Maio"
+
+#: dialogs/settings/rc.cpp:54
+msgid "June"
+msgstr "Xuño"
+
+#: dialogs/settings/rc.cpp:55
+msgid "July"
+msgstr "Xullo"
+
+#: dialogs/settings/rc.cpp:56
+msgid "August"
+msgstr "Agosto"
+
+#: dialogs/settings/rc.cpp:57
+msgid "September"
+msgstr "Setembro"
+
+#: dialogs/settings/rc.cpp:58
+msgid "October"
+msgstr "Outubro"
+
+#: dialogs/settings/rc.cpp:59
+msgid "November"
+msgstr "Novembro"
+
+#: dialogs/settings/rc.cpp:60
+msgid "December"
+msgstr "Decembro"
+
+#: dialogs/settings/rc.cpp:61
+msgid "Views"
+msgstr "Vistas"
+
+#: dialogs/settings/rc.cpp:62
+msgid "Synchronize account selection of ledger and investment view"
+msgstr ""
+"Sincronizar a conta escollida no libro maior e na vista de investimentos"
+
+#: dialogs/settings/rc.cpp:63
+msgid ""
+"Check the views you want to enable, uncheck those you want to hide, because "
+"you don't need the functionality."
+msgstr ""
+"Sinale as vistas que desexe habilitar, desmarque as que queira agochar, "
+"porque non precise desa funcionalidade."
+
+#: dialogs/settings/rc.cpp:64
+msgid "Icon size of navigation bar"
+msgstr "Tamaño do icona da barra de navegación"
+
+#: dialogs/settings/rc.cpp:65
+msgid "Micro (16px)"
+msgstr "Micro (16px)"
+
+#: dialogs/settings/rc.cpp:66
+msgid "Small (32px)"
+msgstr "Pequeno (32px)"
+
+#: dialogs/settings/rc.cpp:67
+msgid "Normal (48px)"
+msgstr "Normal (48px)"
+
+#: dialogs/settings/rc.cpp:68
+msgid "Large (64px)"
+msgstr "Grande (64px)"
+
+#: dialogs/settings/rc.cpp:69
+msgid "Show title bar on each page"
+msgstr "Mostrar a barra de título en cada páxina"
+
+#: dialogs/rc.cpp:835 dialogs/settings/rc.cpp:70
+msgid "Filter"
+msgstr "Filtro"
+
+#: dialogs/settings/rc.cpp:71
+msgid "Accounts / Categories"
+msgstr "Contas / Categorías"
+
+#: dialogs/settings/rc.cpp:72
+msgid "Don't show unused categories"
+msgstr "Non mostrar as categorías non empregadas"
+
+#: dialogs/settings/rc.cpp:73
+msgid ""
+"This option hides all categories in the categories view that are not used in "
+"at least a single transaction. They are still shown in the category "
+"selection lists."
+msgstr ""
+"Esta opción agocha na vista de categorías todas as categorías que non estean "
+"a ser usadas en polo menos un asento. Aínda así serán mostradas nas lista de "
+"selección de categoría."
+
+#: dialogs/settings/rc.cpp:74
+msgid "Don't show closed accounts"
+msgstr "Non mostrar as contas pechadas"
+
+#: dialogs/settings/rc.cpp:75
+msgid ""
+"This option hides all accounts that have been closed by the user in views "
+"and selection lists.\n"
+"\n"
+"You can use <b>View/Show all accounts</b> to temporarily show hidden "
+"accounts in the views."
+msgstr ""
+"Esta opción agocha nas vistas e listas de selección a todas as contas que "
+"fosen pechadas polo usuario.\n"
+"\n"
+"Pode usar <b>Ver/Mostrar todas as contas</b> para mostrar temporalmente nas "
+"vistas todas as contas acochadas."
+
+#: dialogs/settings/rc.cpp:76
+msgid "Show equity accounts"
+msgstr "Mostrar as contas de patrimonio"
+
+#: dialogs/rc.cpp:332 dialogs/settings/rc.cpp:77 widgets/rc.cpp:160
+msgid "Schedules"
+msgstr "Planificacións"
+
+#: dialogs/settings/rc.cpp:78
+msgid "Don't show finished schedules"
+msgstr "Non mostrar as planificacións terminadas"
+
+#: dialogs/settings/rc.cpp:79
+msgid "This option hides all finished schedules in the schedules view."
+msgstr ""
+"Esta opción acocha as planificacións rematadas na vista das planificacións."
+
+#: dialogs/settings/rc.cpp:81
+msgid "Don't show transactions prior to"
+msgstr "Non mostrar os asentos anteriores a"
+
+#: dialogs/settings/rc.cpp:82
+msgid "Don't show reconciled transactions"
+msgstr "Non mostrar os asentos conciliados"
+
+#: dialogs/settings/rc.cpp:83
+msgid "This option hides all reconciled transactions in the ledger view."
+msgstr ""
+"Esta opción acocha todos os asentos conciliados na vista do libro maior."
+
+#: dialogs/settings/rc.cpp:84 widgets/rc.cpp:22
+msgid "GPG encryption settings"
+msgstr "Configuración da cifraxe GPG"
+
+#: dialogs/settings/rc.cpp:85
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Access to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>additional recovery encryption</i> is only accessible, if the "
+"necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id "
+"0x8AFDDC8E is found in your keyring."
+msgstr ""
+"Esta páxina permítelle axustar os parámetros para gardar os dados de "
+"<b>KMyMoney</b> cifrados mediante <b>GPG</b>.<p>\n"
+"Non se permite acceder á configuración se non se atopa <b>GPG</b> no "
+"sistema. Neste caso, asegúrese de que <b>GPG</b> traballa correctamente para "
+"o usuario actual.<p>\n"
+"O grupo <i>recuperación de cifraxe</i> só estará accesíbel de atoparse no "
+"seu claviculario a chave para <b>kmymoney-recover@users.sourceforge.net</b> "
+"con id 0x8AFDDC8E."
+
+#: dialogs/settings/rc.cpp:86 widgets/rc.cpp:24
+msgid "Use GPG encryption"
+msgstr "Gardar cifrado con GPG"
+
+#: dialogs/settings/rc.cpp:87
+msgid "GPG encryption"
+msgstr "Cifraxe con GPG"
+
+#: dialogs/settings/rc.cpp:88
+msgid "Your key"
+msgstr "A súa chave:"
+
+#: dialogs/settings/rc.cpp:89
+msgid ""
+"This combo box lists all the secret keys you have in your keyring. Select "
+"the one you want to use for encryption when saving to a file."
+msgstr ""
+"Esta lista despregábel enumera todas as chaves segredas que ten no seu "
+"claviculario. Escolla a que desexa empregar para gardar nun ficheiro."
+
+#: dialogs/settings/rc.cpp:90
+msgid "Additonal keys"
+msgstr "Chaves adicionais"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:50 dialogs/settings/rc.cpp:91
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading 0x."
+msgstr ""
+"Introduza a id da chave que desexa usar para cifrar os dados. Isto pode ser "
+"ou un correo electrónico ou o identificador hexadecimal da chave. Neste caso "
+"non esqueza o 0x inicial."
+
+#: dialogs/settings/rc.cpp:92 widgets/rc.cpp:28
+msgid ""
+"This symbol denotes, if the key for the given user id has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"Este símbolo indica se foi atopada a chave para o identificador de usuario. "
+"Está en verde se foi atopada, escura se non o foi."
+
+#: dialogs/kgpgkeyselectiondlg.cpp:61 dialogs/settings/rc.cpp:93
+msgid "Keys for all of the above user ids found"
+msgstr "Acháronse chaves para todas as id de usuario de riba"
+
+#: dialogs/settings/rc.cpp:94 widgets/rc.cpp:31
+msgid ""
+"This symbol denotes, if the KMyMoney recovery key has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"Este símbolo indica se a chave de recuperación de KMyMoney foi atopada no "
+"seu anel de confianza. Neste caso estará verde, se non se atopa, será escura."
+
+#: dialogs/settings/rc.cpp:95
+msgid "Recover Key available in keyring"
+msgstr "A chave de recuperación está dispoñíbel no claviculario"
+
+#: dialogs/settings/rc.cpp:96
+msgid "Also encrypt with KMyMoney's recover key"
+msgstr "Cifrar tamén coa chave de recuperación de KMyMoney"
+
+#: dialogs/settings/rc.cpp:97
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out.."
+msgstr ""
+"Pode cifrar os seus dados tamén coa chave de recuperación de KMyMoney. Só os "
+"desenvolventes do núcleo de KMyMoney posúen a chave privada imprescindíbel "
+"para descifrar tales dados.<p>\n"
+"\n"
+"Este mecanismo serve por se perde a súa chave e non pode acceder aos dados. "
+"Sinalando esta opción, os desenvolventes de KMyMoney poderán descifrar os "
+"dados e devolverllos nun formato lexíbel. Advírteselle de que terá que "
+"responder unhas preguntas detalladas acerca do contido dos seus dados antes "
+"de poder envialos."
+
+#: dialogs/settings/rc.cpp:98
+msgid "Homepage Settings"
+msgstr "Configuración da páxina de inicio"
+
+#: dialogs/settings/rc.cpp:99
+msgid "Up"
+msgstr "Subir"
+
+#: dialogs/settings/rc.cpp:100
+msgid "Down"
+msgstr "Baixar"
+
+#: dialogs/settings/rc.cpp:101
+msgid ""
+"Selected entries are shown on the home page of the application.<p>\n"
+"Use the buttons and checkboxes to customize the layout of the home page."
+msgstr ""
+"As entradas escollidas móstranse na páxina de inicio do programa.<p>\n"
+"Empregue os botóns e opcións para personalizar o aspecto da páxina de inicio."
+
+#: dialogs/settings/rc.cpp:102
+msgid "Homepage/Summary page font scaling"
+msgstr "Escalado da fonte tipográfica da Páxina inicial/Resumo"
+
+#: dialogs/settings/rc.cpp:103
+msgid "Percentage of default font size:"
+msgstr "Porcentaxe do tamaño da fonte predeterminada:"
+
+#: dialogs/settings/rc.cpp:104
+msgid ""
+"Remember font size when leaving the program if manually changed with mouse-"
+"wheel"
+msgstr ""
+"Lembrar o tamaño da fonte cando se sae do programa se foi mudada manualmente "
+"coa roda do rato"
+
+#: dialogs/settings/rc.cpp:105
+msgid "Information display"
+msgstr "Visualización da información"
+
+#: dialogs/settings/rc.cpp:106
+msgid "Show Account Limit Information"
+msgstr "Mostrar o límite da conta"
+
+#: dialogs/settings/rc.cpp:110 widgets/rc.cpp:47
+msgid ""
+"<i>Enter regular expressions which can be used to parse the data returned "
+"from the URL entered above. The symbol, price, and date must be found in "
+"the quote data to be usable. You may also try the KMyMoney user's "
+"mailinglist at <a href=\"mailto:kmymoney2-user@lists.sourceforge.net"
+"\">kmymoney2-user@lists.sourceforge.net</a> to find what settings work for "
+"other users in your country.</i>"
+msgstr ""
+"<i>Introduza expresións regulares coas que procesar o dados retornados da "
+"URL antes introducida. O símbolo, prezo e data deben atoparse nos dados de "
+"cotización para seren usábeis. Tamén pode mirar na lista de usuarios de "
+"KMyMoney en <a href=\"mailto:kmymoney2-user@lists.sourceforge.net\"> "
+"kmymoney2-user@lists.sourceforge.net</a> para ver que configuracións "
+"funcionan con outros usuarios do seu país.</i>"
+
+#: dialogs/settings/rc.cpp:113 widgets/rc.cpp:38
+msgid "Regular Expression to extract the symbol from the downloaded data"
+msgstr "Expresión regular para extraer o símbolo dos dados obtidos"
+
+#: dialogs/settings/rc.cpp:114 widgets/rc.cpp:39
+msgid "Regular Expression to extract the price from the downloaded data"
+msgstr "Expresión regular para extraer o prezo dos dados obtidos"
+
+#: dialogs/settings/rc.cpp:115 widgets/rc.cpp:41
+msgid "URL to be used to download the quote"
+msgstr "URL desde a que obter a cotización"
+
+#: dialogs/settings/rc.cpp:116 widgets/rc.cpp:42
+msgid ""
+"Enter the URL from which stock quotes will be fetched. <b>%1</b> will be "
+"replaced with the symbol for the security being quoted. For currency "
+"conversions, <b>%2</b> will be replaced with the currency to be quoted and "
+"<b>%1</b> with the currency the quote is based on."
+msgstr ""
+"Introduza a URL da cal tomar as cotizacións das accións. <b>%1</b> será "
+"substituído co símbolo do valor bursátil para o que se buscan cotizacións. "
+"Para conversións de divisas, <b>%2</b> será substituído coa divisa á que "
+"converter e <b>%1</b> coa divisa na que se basea a cotización."
+
+#: dialogs/settings/rc.cpp:118 dialogs/settings/rc.cpp:121 widgets/rc.cpp:40
+#: widgets/rc.cpp:44
+msgid "Regular Expression to extract the date from the downloaded data"
+msgstr "Expresión regular para extraer a data dos dados obtidos"
+
+#: dialogs/rc.cpp:807 dialogs/settings/rc.cpp:119 widgets/rc.cpp:45
+msgid "Date Format"
+msgstr "Formato da data"
+
+#: dialogs/settings/rc.cpp:122
+msgid "Skip HTML stripping"
+msgstr "Non retirar as etiquetas HTML"
+
+#: dialogs/settings/rc.cpp:123
+msgid ""
+"<p>For easier processing of the data returned by the online source, KMyMoney "
+"usually strips unused parts before it is parsed with the regular "
+"expressions. If matching of the fields relies on those items, then use this "
+"option to turn stripping off.</p>\n"
+"\n"
+"<p>The following items are usually removed by stripping:\n"
+"\n"
+"<ul>\n"
+"<li>HTML tags such as <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded characters such as <b>&amp;nbsp;</b></li>\n"
+"<li>duplicate whitespace</li>\n"
+"</ul>\n"
+"</p>"
+msgstr ""
+"<p>Para procesar dun xeito máis sinxelo os datos devoltos pola fonte en "
+"liña, KMyMoney xeralmente suprime as partes non utilizadas antes de que "
+"procesalos con expresións regulares. Se depende destes campos para atopar os "
+"campos, empregue esta opción para non retirar as etiquetas.</p>\n"
+"\n"
+"<p>Xeralmente elimínanse estes elementos:\n"
+"\n"
+"<ul>\n"
+"<li>Etiquetas HTML como <b>&lt;etiqueta&gt;</b></li>\n"
+"<li>Entidades como <b>&amp;nbsp;</b></li>\n"
+"<li>Espazos en branco duplicados</li>\n"
+"</ul>\n"
+"</p>"
+
+#: dialogs/settings/rc.cpp:127
+msgid "Register settings"
+msgstr "Configuración do rexistro"
+
+#: dialogs/settings/rc.cpp:128
+msgid "Display"
+msgstr "Aspecto"
+
+#: dialogs/settings/rc.cpp:131
+msgid ""
+"Using the ledger lens shows the details for the transaction that has focus "
+"in the ledger. Usually, when using the transaction form, only a one line "
+"summary is displayed for each transaction as the details are shown in the "
+"form."
+msgstr ""
+"A lupa do libro maior mostra os detalles do asento que teña focado no libro "
+"maior. Polo xeral, cando se usa o formulario de escrituración, só se mostra "
+"unha liña de resumo por cada asento xa que os detalles son mostrados no "
+"formulario."
+
+#: dialogs/settings/rc.cpp:133
+msgid "Always show a No. field"
+msgstr "Mostrar sempre un campo de número"
+
+#: dialogs/settings/rc.cpp:134
+msgid "Show group header between transactions"
+msgstr "Mostrar o cabezallo de grupo entre os asentos"
+
+#: dialogs/settings/rc.cpp:135
+msgid ""
+"Draws a larger header above each group of transaction. The grouping depends "
+"on the current sort order."
+msgstr ""
+"Debuxa un cabezallo máis grande sobre cada grupo de asentos. O agrupamento "
+"depende da ordenación actual."
+
+#: dialogs/settings/rc.cpp:136
+msgid "Show header for the previous and current fiscal year"
+msgstr "Mostrar un cabezallo para os anos fiscais actual e anterior"
+
+#: dialogs/settings/rc.cpp:137
+msgid "Sorting"
+msgstr "Ordenamento"
+
+#: dialogs/settings/rc.cpp:138
+msgid "Normal view"
+msgstr "Vista normal"
+
+#: dialogs/settings/rc.cpp:139
+msgid "Reconciliation view"
+msgstr "Vista de conciliación"
+
+#: dialogs/settings/rc.cpp:140
+msgid "Search view"
+msgstr "Vista de procuras"
+
+#: dialogs/settings/rc.cpp:141
+msgid ""
+"Use the <i>left</i> and <i>right</i> buttons to add and remove sort options. "
+"Use the <i>up</i> and <i>down</i> buttons to modify the sort order. Double-"
+"Click a selected entry to toggle the sort order between <i>ascending</i> and "
+"<i>descending</i>."
+msgstr ""
+"Use os botóns <i>esquerda</i> e <i>dereita</i> para engadir e eliminar "
+"opcións de ordenamento. Use os botóns <i>subir</i> e <i>baixar</i> para "
+"modificar a orden. Faga duplo-clic nunha entrada para conmutar a orden entre "
+"<i>ascendente</i> e <i>descendente</i>."
+
+#: dialogs/settings/rc.cpp:142
+msgid "Data entry"
+msgstr "Entrada de dados"
+
+#: dialogs/settings/rc.cpp:146
+msgid "Use Enter to move between fields"
+msgstr "Empregar o Intro para moverse polos campos"
+
+#: dialogs/settings/rc.cpp:147
+msgid "Match names from start"
+msgstr "Atopar os nomes desde o principio"
+
+#: dialogs/settings/rc.cpp:148
+msgid ""
+"Mark this option, if you always want to match names e.g. for payees from the "
+"start. If unset, any substring is matched."
+msgstr ""
+"Escolla esta opción se sempre desexa atopar nomes desde o principio, por "
+"exemplo para beneficiarios. Se non a escolle, atoparase calquera subcadea."
+
+#: dialogs/settings/rc.cpp:149
+msgid "Default reconciliation state"
+msgstr "Estado predeterminado de conciliación"
+
+#: dialogs/rc.cpp:227 dialogs/settings/rc.cpp:150
+#: widgets/kmymoneycombo.cpp:348 widgets/registersearchline.cpp:84
+msgid "Not reconciled"
+msgstr "Non conciliados"
+
+#: dialogs/rc.cpp:228 dialogs/settings/rc.cpp:151
+#: widgets/kmymoneycombo.cpp:347 widgets/registersearchline.cpp:85
+msgid "Cleared"
+msgstr "Librada"
+
+#: dialogs/settings/rc.cpp:153
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation "
+"of an account"
+msgstr ""
+"O estado predeterminado de conciliación das transaccións asentadas durante a "
+"conciliación dunha conta"
+
+#: dialogs/settings/rc.cpp:154
+msgid "Autofill"
+msgstr "Preencher automaticamente"
+
+#: dialogs/settings/rc.cpp:155
+msgid "No Autofill"
+msgstr "Non preencher automaticamente"
+
+#: dialogs/settings/rc.cpp:156
+msgid "Don't do autofill of transaction data at all."
+msgstr "Non preencher os datos do asento."
+
+#: dialogs/settings/rc.cpp:157
+msgid "Same transaction if amount differs less than"
+msgstr "A mesma operación se as cantidades difiren menos de"
+
+#: dialogs/settings/rc.cpp:158
+msgid ""
+"Collect all transactions for the given payee. Treat all transactions that "
+"refer to the same category and have an amount with +/- X % as identical. If "
+"more than one transaction is found, a list of them is presented to the "
+"user.\n"
+"\n"
+"Selecting 0% will list all transactions."
+msgstr ""
+"Recolle todos os asento do beneficiario indicado. Trata todas as "
+"transaccións que se refiren á mesma categoría e teñen un importe con ±X % "
+"como se fosen idénticas. Se atopa máis dun asento, mostraralle ao usuario "
+"unha lista con elas.\n"
+"\n"
+"Escoller o 0% listará todas as transaccións."
+
+#: dialogs/settings/rc.cpp:159
+msgid ""
+"Two transactions are usually treated identical for autofill, if they refer "
+"the same accounts. They are treated as different transactions though, when "
+"their amount varies by more than the percentage given here."
+msgstr ""
+"Xeralmente dous asentos on considerados idénticos para o preenchido "
+"automático, de referírense ás mesmas contas. Porén considéranse diferentes "
+"se o seu importe difire en máis da porcentaxe que se indica aquí."
+
+#: dialogs/settings/rc.cpp:160
+msgid ""
+"_: Same transaction if amount differs less than percent.\n"
+"percent."
+msgstr "porcento."
+
+#: dialogs/settings/rc.cpp:161
+msgid "with previously most often used transaction for the payee"
+msgstr "coa transacción máis empregada con este beneficiario anteriormente"
+
+#: dialogs/settings/rc.cpp:162
+msgid ""
+"The data of the last transaction assigned to the category used most often "
+"for this payee is autofilled into the transaction editor."
+msgstr ""
+"Preénchese automaticamente no editor do asento a data da última transacción "
+"asignada á categoría empregada máis frecuentemente con este beneficiario."
+
+#: dialogs/settings/rc.cpp:164
+msgid "Match transactions within days"
+msgstr "Emparellar os asentos próximos no tempo"
+
+#: dialogs/settings/rc.cpp:165
+msgid ""
+"Search for matching transactions within the range of the posting date of the "
+"imported transaction +/- the number of given days."
+msgstr ""
+"Procura transaccións concordantes dentro do rango da data de envío da "
+"transacción importada ± o número de días indicado."
+
+#: dialogs/settings/rc.cpp:166
+msgid "Ask for a new payee's default category"
+msgstr "Preguntar pola categoría predeterminada dos novos beneficiarios"
+
+#: dialogs/settings/rc.cpp:167
+msgid ""
+"Whenever a new payee is detected during import of a statement, the user will "
+"be asked to assign a default category for this user when this option is "
+"selected."
+msgstr ""
+"Se escolle esta opción, sempre que se detecte un novo beneficiario durante a "
+"importación dun extracto, pediráselle ao usuario que lle asigne unha "
+"categoría predeterminada."
+
+#: dialogs/settings/rc.cpp:168
+msgid "Schedule Settings"
+msgstr "Configuración das planificacións"
+
+#: dialogs/settings/rc.cpp:169
+msgid "Startup options"
+msgstr "Opcións de inicio"
+
+#: dialogs/settings/rc.cpp:170
+msgid "Check schedules on startup"
+msgstr "Comprobar os asentos planificados ao arrincar"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:60
+#: widgets/kmymoneyonlinequoteconfig.cpp:60
+msgid "Delete the selected source entry"
+msgstr "Borrar a orixe escollida"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:61
+#: widgets/kmymoneyonlinequoteconfig.cpp:61
+msgid "Use this to delete the selected online source entry"
+msgstr "Use isto para borrar a orixe online escollida"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:66
+#: widgets/kmymoneyonlinequoteconfig.cpp:66
+msgid "Create a new source entry for online quotes"
+msgstr "Crea unha nova orixe de cotizacións online"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:67
+#: widgets/kmymoneyonlinequoteconfig.cpp:67
+msgid "Use this to create a new entry for online quotes"
+msgstr "Use isto para criar unha nova entrada de cotizacións online"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:107
+#: dialogs/settings/ksettingsonlinequotes.cpp:190
+#: dialogs/settings/ksettingsonlinequotes.cpp:193
+#: dialogs/settings/ksettingsonlinequotes.cpp:216
+#: widgets/kmymoneyonlinequoteconfig.cpp:107
+#: widgets/kmymoneyonlinequoteconfig.cpp:185
+#: widgets/kmymoneyonlinequoteconfig.cpp:188
+#: widgets/kmymoneyonlinequoteconfig.cpp:211
+msgid "New Quote Source"
+msgstr "Nova orixe de cotizacións"
+
+#: dialogs/ksplittransactiondlg.cpp:77 dialogs/rc.cpp:788
+msgid "Clear &All"
+msgstr "Borrar &todo"
+
+#: dialogs/ksplittransactiondlg.cpp:79
+msgid "Clear all splits"
+msgstr "Eliminar todas as partidas"
+
+#: dialogs/ksplittransactiondlg.cpp:80
+msgid "Use this to clear all splits of this transaction"
+msgstr "Use isto para eliminar todas as partidas deste asento"
+
+#: dialogs/ksplittransactiondlg.cpp:84
+msgid "&Merge"
+msgstr "&Fusionar"
+
+#: dialogs/ksplittransactiondlg.cpp:183
+msgid ""
+"The total amount of this transaction is %1 while the sum of the splits is %"
+"2. The remaining %3 are unassigned."
+msgstr ""
+"A cantidade total deste asento é %1 mentres que a suma das partidas é %2. A "
+"cantidade restante, %3 está sen asinar."
+
+#: dialogs/ksplittransactiondlg.cpp:191
+#, c-format
+msgid "Change &total amount of transaction to %1."
+msgstr "&Cambiar o importe total do asento a %1."
+
+#: dialogs/ksplittransactiondlg.cpp:194
+msgid "&Distribute difference of %1 among all splits."
+msgstr "&Repartir a diferenza de %1 entre todas as partidas."
+
+#: dialogs/ksplittransactiondlg.cpp:203
+#, c-format
+msgid "&Leave total amount of transaction at %1."
+msgstr "&Deixar a cantidade total do asento como %1."
+
+#: dialogs/ksplittransactiondlg.cpp:205
+msgid "&Leave %1 unassigned."
+msgstr "&Deixar %1 sen asinar."
+
+#: dialogs/ksplittransactiondlg.cpp:275
+msgid ""
+"You are about to delete all splits of this transaction. Do you really want "
+"to continue?"
+msgstr ""
+"Está a piques de borrar todas as partidas deste asento. Desexa continuar?"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:97
+msgid "Use this to create a new QIF import/export profile"
+msgstr "Use isto para criar un novo perfil QIF de importación/exportación"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:148
+#: dialogs/mymoneyqifprofileeditor.cpp:403 dialogs/rc.cpp:797
+msgid "QIF Profile Editor"
+msgstr "Editor de perfil QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:150
+msgid "QIF Profile Selector"
+msgstr "Selector de perfís QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:236
+msgid "The default QIF profile"
+msgstr "O perfil QIF por omisión"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:404
+#: dialogs/mymoneyqifprofileeditor.cpp:417
+msgid "Enter new profile name"
+msgstr "Introduza un novo nome de perfil"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:436
+msgid "Do you really want to delete profile '%1'?"
+msgstr "Desexa realmente borrar o perfil «%1»?"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:38
+msgid "Select additional keys"
+msgstr "Escolla as chaves adicionais"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:48 widgets/rc.cpp:25
+msgid "User identification"
+msgstr "Identificación do usuario"
+
+#: dialogs/kendingbalancedlg.cpp:71
+msgid ""
+"Please enter the following fields with the information as you find them on "
+"your statement. Make sure to enter all values in <b>%1</b>."
+msgstr ""
+"Complete os seguintes campos coa información que ven no seu extracto de "
+"conta. Verifique que todos os valores están en <b>%1</b>."
+
+#: dialogs/kendingbalancedlg.cpp:124
+#, c-format
+msgid "Last reconciled statement: %1"
+msgstr "Ultimo asento conciliado: %1"
+
+#: dialogs/kendingbalancedlg.cpp:437 dialogs/kendingbalancedlg.cpp:577
+#: dialogs/rc.cpp:137
+msgid "Adjustment transaction"
+msgstr "Asento de axuste"
+
+#: dialogs/kendingbalancedlg.cpp:510
+msgid ""
+"KMyMoney has calculated the following amounts for interest and amortization "
+"according to recorded payments between %1 and %2."
+msgstr ""
+"KMyMoney calculou as seguintes cantidades para xuro e amortización de acordo "
+"cos pagamentos rexistrados entre %1 e %2."
+
+#: dialogs/kbalancechartdlg.cpp:59
+#, c-format
+msgid "Balance of %1"
+msgstr "Saldo de %1"
+
+#: dialogs/kbalancechartdlg.cpp:70
+msgid "%1 Balance History"
+msgstr "Historial de saldos de %1"
+
+#: dialogs/kmymoneysplittable.cpp:98
+msgid "Split Options"
+msgstr "Opcións da partida"
+
+#: dialogs/kmymoneysplittable.cpp:99 dialogs/rc.cpp:731
+#: widgets/kmymoneypriceview.cpp:149
+msgid "Edit..."
+msgstr "Editar..."
+
+#: dialogs/kmymoneysplittable.cpp:100
+msgid "Duplicate"
+msgstr "Duplicar"
+
+#: dialogs/kmymoneysplittable.cpp:102
+msgid "Delete ..."
+msgstr "Borrar ..."
+
+#: dialogs/kmymoneysplittable.cpp:275
+msgid ""
+"_: Duplicate split\n"
+"CTRL+c"
+msgstr "Ctrl+C"
+
+#: dialogs/kmymoneysplittable.cpp:562
+msgid "will be calculated"
+msgstr "será calculado"
+
+#: dialogs/kmymoneysplittable.cpp:648
+msgid ""
+"You are about to delete the selected split. Do you really want to continue?"
+msgstr "Está a piques de borrar a partida escollida. Desexa continuar?"
+
+#: dialogs/rc.cpp:1
+msgid "Account selection"
+msgstr "Selección de conta"
+
+#: dialogs/rc.cpp:3
+msgid "Account to import to"
+msgstr "Conta á que importar"
+
+#: dialogs/rc.cpp:6 dialogs/rc.cpp:170 widgets/rc.cpp:169
+msgid "Skip"
+msgstr "Saltar"
+
+#: dialogs/rc.cpp:8
+msgid ""
+"Use this dialog to backup your data. \n"
+"\n"
+"Please make sure you have a disk inserted and that the drive is ready. Then "
+"choose the mount point from either the Choose button or by entering the path "
+"in the available box.\n"
+"\n"
+"Click OK to perform the backup. If your system does not use an automounter, "
+"make sure you mark the checkbox below to \"mount this directory before "
+"backing up.\""
+msgstr ""
+"Use este diálogo para facer unha copia de respaldo dos seus dados.\n"
+"\n"
+"Insira un disco e asegúrese de que o dispositivo está listo. Entón escolla o "
+"punto de montaxe mediante o botón Escoller ou introducindo a rota na caixa "
+"dispoñíbel a tal efecto.\n"
+"\n"
+"Prema Aceitar para realizar a copia. Se o seu sistema non usa un "
+"automontador, asegúrese de escoller a opción «Montar este directorio antes de "
+"respaldar.» "
+
+#: dialogs/rc.cpp:9
+msgid "Device options"
+msgstr "Opcións do dispositivo"
+
+#: dialogs/rc.cpp:10
+msgid ""
+"_: This is the mount point\n"
+"Mount Point:"
+msgstr "Punto de montaxe:"
+
+#: dialogs/rc.cpp:11
+msgid "Choose..."
+msgstr "Escoller..."
+
+#: dialogs/rc.cpp:12
+msgid "Mount this directory before backing up."
+msgstr "Montar este directorio antes de realizar a copia."
+
+#: dialogs/rc.cpp:15
+msgid "Reassign categories"
+msgstr "Asinar de novo as categorías"
+
+#: dialogs/rc.cpp:16
+msgid ""
+"The transactions, schedules and budgets associated with the selected "
+"category need to be re-assigned to a different category before the selected "
+"category can be deleted. Please select a category from the list below."
+msgstr ""
+"As transaccións, planos de asentos e orzamentos asociados coa categoría "
+"escollida deben ser asinados de novo a unha categoría diferente antes de "
+"poder borrar a categoría escollida. Escolla unha categoría na lista en baixo."
+
+#: dialogs/rc.cpp:17
+msgid "Available categories:"
+msgstr "Categorías dispoñíbeis:"
+
+#: dialogs/rc.cpp:21
+msgid ""
+"Please choose the type of import you wish to perform. A simple "
+"explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Por favor escolla o tipo de importación que desexa realizar. Dispón dunha "
+"breve\n"
+"explicación de cada tipo no fondo da pantalla, que se actualiza cando\n"
+"escolle unha opción.\n"
+"\n"
+"Cando escolla o tipo axeitado por favor prema o botón Aceitar."
+
+#: dialogs/rc.cpp:23
+msgid "QIF"
+msgstr "QIF"
+
+#: dialogs/rc.cpp:24
+msgid "CSV"
+msgstr "CSV"
+
+#: dialogs/rc.cpp:25
+msgid "Some descripton"
+msgstr "Algunha descrición"
+
+#: dialogs/rc.cpp:28
+msgid "Confirm Manual Enter"
+msgstr "Confirmar a entrada manual"
+
+#: dialogs/rc.cpp:29
+msgid "The following changes have been made to the transaction data:"
+msgstr "Foron feitos os seguintes cambios nos dados do asento:"
+
+#: dialogs/rc.cpp:30
+msgid "Please choose what you wish to do with the above changes"
+msgstr "Por favor, escolla o que desexa facer cos cambios en riba"
+
+#: dialogs/rc.cpp:31
+msgid ""
+"Discard the changes and enter the original transaction into the register."
+msgstr "Esquecer as mudanzas e introducir o asento orixinal no rexistro."
+
+#: dialogs/rc.cpp:32
+msgid "Enter these new values this one time, for this occurence only."
+msgstr "Asentar estes novos valores esta vez, só nesta ocasión."
+
+#: dialogs/rc.cpp:33
+msgid "Set all further occurences in this schedule to be these values."
+msgstr ""
+"Facer que todas as vindeiras aparicións desta transacción planificada teñan "
+"estes valores."
+
+#: dialogs/rc.cpp:36
+msgid "CSV Dialog"
+msgstr "Diálogo de CSV"
+
+#: dialogs/rc.cpp:37
+msgid ""
+"CSV Dialog. Choose a file and then click on Run. You can view your "
+"progress at\n"
+"the bottom of the screen.\n"
+"\n"
+"You can cancel the process at any time by clicking on the Cancel button."
+msgstr ""
+"Diálogo de CSV. Escolla un ficheiro e prema en Executar. Pode ver o "
+"progreso\n"
+"no fondo da pantalla.\n"
+"\n"
+"Pode cancelar o proceso en calquera instante premendo no botón Cancelar."
+
+#: dialogs/rc.cpp:38
+msgid "Choose the csv file:"
+msgstr "Escolla o ficheiro CSV:"
+
+#: dialogs/rc.cpp:39
+msgid "Browse"
+msgstr "Escoller"
+
+#: dialogs/rc.cpp:40
+msgid "Between These Dates"
+msgstr "Entre estas datas"
+
+#: dialogs/rc.cpp:41 dialogs/rc.cpp:196
+msgid "Start on:"
+msgstr "Comeza o:"
+
+#: dialogs/rc.cpp:42 dialogs/rc.cpp:195
+msgid "End on:"
+msgstr "Remata o:"
+
+#: dialogs/rc.cpp:43
+msgid "Run"
+msgstr "Executar"
+
+#: dialogs/rc.cpp:44
+msgid "Progress Info"
+msgstr "Información do progreso"
+
+#: dialogs/rc.cpp:45
+msgid "Processing Account:"
+msgstr "Procesando a conta:"
+
+#: dialogs/rc.cpp:47
+msgid "Processing Transaction:"
+msgstr "Procesando o asento:"
+
+#: dialogs/rc.cpp:48
+msgid "0 of 0"
+msgstr "0 de 0"
+
+#: dialogs/rc.cpp:50
+msgid "Exchange Rate/Price Editor"
+msgstr "Editor de taxas de cambio/prezo"
+
+#: dialogs/rc.cpp:55
+msgid "Convert from"
+msgstr "Converter de"
+
+#: dialogs/rc.cpp:58
+msgid "Convert to"
+msgstr "Converter en"
+
+#: dialogs/rc.cpp:61
+msgid "To amount"
+msgstr "Importe convertido"
+
+#: dialogs/rc.cpp:62
+msgid "Exchange rate / Price"
+msgstr "Taxa de cambio/ Prezo"
+
+#: dialogs/rc.cpp:64
+msgid ""
+"xx\n"
+"xx"
+msgstr ""
+"xx\n"
+"xx"
+
+#: dialogs/rc.cpp:68
+msgid "Currencies"
+msgstr "Divisas"
+
+#: dialogs/rc.cpp:72
+msgid "real ID"
+msgstr "ID real"
+
+#: dialogs/rc.cpp:73 dialogs/rc.cpp:722
+msgid "ID"
+msgstr "ID"
+
+#: dialogs/rc.cpp:74
+msgid "X"
+msgstr "X"
+
+#: dialogs/rc.cpp:76 dialogs/rc.cpp:459
+msgid "Online Source"
+msgstr "Fonte de cotizacións online"
+
+#: dialogs/rc.cpp:78 dialogs/rc.cpp:278 dialogs/rc.cpp:312 dialogs/rc.cpp:684
+msgid "F1"
+msgstr "F1"
+
+#: dialogs/rc.cpp:80
+msgid "If this button is not activated, select the base currency first."
+msgstr "Se non está activado este botón, escolla antes a divisa de base."
+
+#: dialogs/rc.cpp:81
+msgid ""
+"Press this button to close the dialog. If the button is not activated, "
+"select your base currency."
+msgstr ""
+"Prema neste botón para pechar o diálogo. Se o botón non está activado, "
+"escolla a súa divisa de base."
+
+#: dialogs/rc.cpp:82
+msgid "Edit Equity"
+msgstr "Editar o patrimonio"
+
+#: dialogs/rc.cpp:86 dialogs/rc.cpp:410
+msgid "Smallest fraction:"
+msgstr "Fracción máis pequena:"
+
+#: dialogs/rc.cpp:87 dialogs/rc.cpp:408 dialogs/rc.cpp:440
+msgid "1 /"
+msgstr "1 /"
+
+#: dialogs/rc.cpp:88 dialogs/rc.cpp:405
+msgid "Investment Type:"
+msgstr "Tipo de investimento:"
+
+#: dialogs/rc.cpp:89 dialogs/rc.cpp:404
+msgid "Equity Name:"
+msgstr "Nome do patrimonio:"
+
+#: dialogs/rc.cpp:90 dialogs/rc.cpp:409
+msgid "Market Symbol:"
+msgstr "Símbolo do mercado:"
+
+#: dialogs/rc.cpp:91
+msgid "Price History"
+msgstr "Historial de prezo"
+
+#: dialogs/rc.cpp:97
+msgid "Edit Scheduled transaction"
+msgstr "Editar o asento planificado"
+
+#: dialogs/rc.cpp:98
+msgid "Schedule name:"
+msgstr "Nome do plano:"
+
+#: dialogs/rc.cpp:99
+msgid "Frequency:"
+msgstr "Frecuencia:"
+
+#: dialogs/rc.cpp:100
+msgid "Number of selected periods between entries"
+msgstr "Número de periodos escollidos entre as entradas"
+
+#: dialogs/rc.cpp:101
+msgid "Payment information"
+msgstr "Información do pagamento"
+
+#: dialogs/rc.cpp:105 dialogs/rc.cpp:160 dialogs/rc.cpp:247 dialogs/rc.cpp:752
+#: widgets/register.cpp:569
+msgid "C"
+msgstr "L"
+
+#: dialogs/rc.cpp:113
+msgid "Do nothing"
+msgstr "Non facer nada"
+
+#: dialogs/rc.cpp:116
+msgid "If this schedule occurs on the weekend:"
+msgstr "Se esta transacción acontece durante a fin de semana:"
+
+#: dialogs/rc.cpp:117
+msgid "The amount is an estimate because it varies for each payment"
+msgstr "Esta é unha estimación porque os importes varían en cada pagamento"
+
+#: dialogs/rc.cpp:118
+msgid "Enter this schedule into the register automatically when it is due"
+msgstr "Asentar automaticamente este plano no rexistro cando venza"
+
+#: dialogs/rc.cpp:119
+msgid "This schedule will end at some time"
+msgstr "Este plano rematará nalgún momento"
+
+#: dialogs/rc.cpp:120
+msgid "Number of transactions remaining:"
+msgstr "Número de transaccións restantes:"
+
+#: dialogs/rc.cpp:121
+msgid "Date of final transaction:"
+msgstr "Data da derradeira transacción:"
+
+#: dialogs/rc.cpp:125
+msgid "Reconciliation Wizard"
+msgstr "Asistente de conciliación"
+
+#: dialogs/rc.cpp:127
+msgid ""
+"Reconciling your account assures, that your recordings match those of your "
+"institution and that there are no mistakes on either side. You should "
+"reconcile your account whenever you receive a statement from your "
+"institution.\n"
+"\n"
+"All relevant information necessary for this process is usually printed on "
+"your statement.\n"
+"\n"
+"On the next page you will verify, that the starting and ending balance are "
+"matching those on your statement. If not, please modify the figures."
+msgstr ""
+"Conciliar as súas contas garante que o rexistro que leva coincide co da "
+"entidade e que non hai erros en ningunha das partes. Debería conciliar as "
+"súas contas sempre que reciba un extracto do seu banco.\n"
+"\n"
+"Polo xeral, toda a información precisa para este proceso está impresa no "
+"extracto.\n"
+"\n"
+"Na seguinte páxina verificará que os saldos inicial e final coinciden cos do "
+"seu extracto. Se non coinciden, modifique os valores precisos."
+
+#: dialogs/rc.cpp:129
+msgid ""
+"KMyMoney calculates your loan payments automatically. The amounts can "
+"deviate from those calculated by the creditor. Therefore, you possibly have "
+"to adjust amortization, interest and other costs according to your "
+"statement.\n"
+"\n"
+"Please enter the following information found on your statement:"
+msgstr ""
+"KMyMoney calcula os pagamentos do seu empréstito automaticamente. Os "
+"importes poden desviarse dos calculados polo acredor. De darse este caso, "
+"posibelmente terá que axustar a amortización, xuros e outros custos de "
+"acordo co seu resumo de conta.\n"
+"\n"
+"Introduza a seguinte información, segundo o seu extracto de conta:"
+
+#: dialogs/rc.cpp:130
+msgid "Ending date of statement"
+msgstr "Data final do extracto de conta"
+
+#: dialogs/rc.cpp:131
+msgid "Starting date of statement"
+msgstr "Data inicial do extracto de conta"
+
+#: dialogs/rc.cpp:132
+msgid "Verify payments"
+msgstr "Verifique os pagamentos"
+
+#: dialogs/rc.cpp:133 dialogs/rc.cpp:148 dialogs/rc.cpp:476 dialogs/rc.cpp:477
+#: dialogs/rc.cpp:508 dialogs/rc.cpp:513 dialogs/rc.cpp:518 dialogs/rc.cpp:532
+#: dialogs/rc.cpp:539 dialogs/rc.cpp:540 dialogs/rc.cpp:541 dialogs/rc.cpp:542
+#: dialogs/rc.cpp:543 dialogs/rc.cpp:552 dialogs/rc.cpp:553 dialogs/rc.cpp:554
+#: dialogs/rc.cpp:555 dialogs/rc.cpp:556 dialogs/rc.cpp:565 dialogs/rc.cpp:566
+#: dialogs/rc.cpp:567 dialogs/rc.cpp:568 dialogs/rc.cpp:569 dialogs/rc.cpp:578
+#: dialogs/rc.cpp:579 dialogs/rc.cpp:580 dialogs/rc.cpp:581 dialogs/rc.cpp:582
+#: dialogs/rc.cpp:591 dialogs/rc.cpp:592 dialogs/rc.cpp:593 dialogs/rc.cpp:594
+#: dialogs/rc.cpp:595 dialogs/rc.cpp:603 dialogs/rc.cpp:604 dialogs/rc.cpp:605
+#: dialogs/rc.cpp:606 dialogs/rc.cpp:607 dialogs/rc.cpp:618 dialogs/rc.cpp:619
+#: dialogs/rc.cpp:621 dialogs/rc.cpp:636 dialogs/rc.cpp:637 dialogs/rc.cpp:638
+#: dialogs/rc.cpp:639 dialogs/rc.cpp:640 dialogs/rc.cpp:641 dialogs/rc.cpp:651
+#: dialogs/rc.cpp:652 dialogs/rc.cpp:654 dialogs/rc.cpp:657 dialogs/rc.cpp:658
+#: dialogs/rc.cpp:659 dialogs/rc.cpp:664 dialogs/rc.cpp:665 dialogs/rc.cpp:668
+#: dialogs/rc.cpp:670 dialogs/rc.cpp:672 dialogs/rc.cpp:674 dialogs/rc.cpp:676
+#: dialogs/rc.cpp:678 dialogs/rc.cpp:681 dialogs/rc.cpp:823 widgets/rc.cpp:167
+msgid "1"
+msgstr "1"
+
+#: dialogs/rc.cpp:136
+msgid ""
+"If your statement shows different amounts, please cancel this dialog and "
+"correct the false transactions or correct the values in this dialog. In the "
+"later case, KMyMoney will create an adjustment transaction and add it to the "
+"ledger."
+msgstr ""
+"Se o seu extracto de conta mostra diferentes importes, por favor cancele "
+"este diálogo e corrixa os asentos falsos ou corrixa os valores neste "
+"diálogo. Neste caso, KMyMoney asentará una transacción de axuste e engadiraa "
+"ao libro maior."
+
+#: dialogs/rc.cpp:138
+msgid ""
+"In order to create the adjustment transaction, KMyMoney requires an account "
+"and possibly an interest category to assign the differences to. Please "
+"select an account and - if necessary - a category."
+msgstr ""
+"Coa fin de criar a transacción de axuste, KMyMoney require unha conta e "
+"posibelmente unha categoría a que asinar as diferenzas. Escolla unha conta e "
+"-se o necesitar- unha categoría."
+
+#: dialogs/rc.cpp:140
+msgid "Interest-Category"
+msgstr "Categoría-Xuro"
+
+#: dialogs/rc.cpp:141
+msgid "Restarting postponed reconciliation"
+msgstr "Reiniciando a conciliación aprazada"
+
+#: dialogs/rc.cpp:142
+msgid ""
+"You have previously postponed the reconciliation of this account. If you "
+"have entered charges or interests the last time you started reconciling this "
+"account you can modify these in the ledger later on.\n"
+"\n"
+"It is important, that you continue with the same statement you used when you "
+"postponed the reconciliation.\n"
+"\n"
+"All information you have entered into this wizard will be shown and all "
+"transactions that you already cleared are marked with a 'C'."
+msgstr ""
+"Anteriormente pospuxo a conciliación desta conta. Se asentou cargos ou xuros "
+"a última vez que comezou a conciliar esta conta poderá modificalos no libro "
+"maior máis tarde.\n"
+"\n"
+"É importante que continúe co mesmo extracto de conta que usou cando pospuxo "
+"a conciliación.\n"
+"\n"
+"Toda a información que ten introducido neste asistente será mostrada e os "
+"asentos xa conciliados marcados con un «C»."
+
+#: dialogs/rc.cpp:143
+msgid "Statement Information"
+msgstr "Información do extracto"
+
+#: dialogs/rc.cpp:144 dialogs/rc.cpp:315 dialogs/rc.cpp:317 dialogs/rc.cpp:320
+#: dialogs/rc.cpp:321 dialogs/rc.cpp:329 dialogs/rc.cpp:330 dialogs/rc.cpp:333
+#: dialogs/rc.cpp:334 dialogs/rc.cpp:335 dialogs/rc.cpp:336 dialogs/rc.cpp:366
+msgid "x"
+msgstr "x"
+
+#: dialogs/rc.cpp:145
+msgid "Statement date:"
+msgstr "Data do extracto:"
+
+#: dialogs/rc.cpp:146
+msgid "Starting balance of this statement:"
+msgstr "Saldo anterior a este extracto:"
+
+#: dialogs/rc.cpp:147
+msgid "Ending balance of this statement:"
+msgstr "Saldo á data do extracto:"
+
+#: dialogs/rc.cpp:149
+msgid "Interest / Charges"
+msgstr "Xuros / Cargos"
+
+#: dialogs/rc.cpp:150
+#, fuzzy
+msgid ""
+"If necessary, enter information about interest or charges here. KMyMoney "
+"will create transactions and clear them directly for you."
+msgstr ""
+"Se é preciso, introduza aquí información acerca de xuros ou cargos. KMyMoney "
+"asentará transaccións e reconciliacións directamente por si."
+
+#: dialogs/rc.cpp:153
+msgid "Charges"
+msgstr "Cargos"
+
+#: dialogs/rc.cpp:154
+msgid "Enter Schedule"
+msgstr "Introducir unha transacción planificada"
+
+#: dialogs/rc.cpp:155
+msgid "Schedule Details"
+msgstr "Detalles da transacción planificada"
+
+#: dialogs/rc.cpp:156 dialogs/rc.cpp:348 dialogs/rc.cpp:389 widgets/rc.cpp:164
+msgid "Name:"
+msgstr "Nome:"
+
+#: dialogs/rc.cpp:157 dialogs/rc.cpp:351 widgets/rc.cpp:165
+msgid "Type:"
+msgstr "Tipo:"
+
+#: dialogs/rc.cpp:168
+msgid "Enter"
+msgstr "Asentar"
+
+#: dialogs/rc.cpp:169
+msgid ""
+"Enter the transaction and advance the next due date of this schedule to the "
+"next payment date."
+msgstr ""
+"Escriba o asento e avance a vindeira data de vencemento deste plano até a "
+"seguinte data de vencemento."
+
+#: dialogs/rc.cpp:171
+msgid ""
+"Do not enter the transaction but advance the next due date of this schedule "
+"to the next payment date."
+msgstr ""
+"Non escriba o asento pero avance a vindeira data de vencemento deste plano "
+"até a seguinte data de vencemento."
+
+#: dialogs/rc.cpp:172
+msgid "Ignore"
+msgstr "Ignorar"
+
+#: dialogs/rc.cpp:173
+msgid ""
+"Do not enter or skip payments for this schedule but continue with the next "
+"schedule."
+msgstr ""
+"Non introduce nin salta pagamentos para este plano pero continúa coa "
+"seguinte planificación."
+
+#: dialogs/rc.cpp:175
+msgid "Cancel processing of schedule entry."
+msgstr "Cancela o procesamento do asentamento da planificación."
+
+#: dialogs/rc.cpp:176
+msgid "Update Stock and Currency Prices"
+msgstr "Actualizar os prezos de Accións e Divisas"
+
+#: dialogs/rc.cpp:177
+msgid "List of known Equities, and the date they were last updated on."
+msgstr ""
+"Listado de patrimonios coñecidos, e data en que foron actualizados por "
+"última vez."
+
+#: dialogs/rc.cpp:179
+msgid "Update All"
+msgstr "Actualizar todo"
+
+#: dialogs/rc.cpp:180
+msgid "Update Selected"
+msgstr "Actualizar os escollidos"
+
+#: dialogs/rc.cpp:181
+msgid "Status:"
+msgstr "Estado:"
+
+#: dialogs/rc.cpp:184
+msgid "QIF Export"
+msgstr "Exportar a QIF"
+
+#: dialogs/rc.cpp:185
+msgid ""
+"From this dialog you are able to export transactions to a quicken compatible "
+"file, (known as a QIF file, because of the extension). Please enter the "
+"path to the QIF file or select it by clicking on the Browse button.\n"
+"\n"
+"You can choose the file's path, the account and the format of the QIF file "
+"(profile). Choose Account to export all the transactions between the "
+"specified dates or just categories. You can also limit the transactions "
+"that are exported by start and ending date. Once you have pressed the "
+"Export button a message box will appear when the export has completed "
+"detailing how many transactions, categories and payees were exported."
+msgstr ""
+"Mediante este diálogo é posíbel exportar asentos a un ficheiro compatíbel "
+"con quicken, (coñecidos como ficheiros QIF, debido á extensión). Por favor, "
+"introduza a rota ao ficheiro QIF ou escóllao premendo no botón Escoller.\n"
+"\n"
+"Pode escoller a rota ao ficheiro, a conta e o formato do ficheiro QIF "
+"(perfil). Escolla Conta para exportar todos os asentos entre as datas "
+"especificadas ou simplemente categorías. Tamén pode limitar os asentos que "
+"son exportados mediante as datas inicial e final. Despois de premer no botón "
+"Exportar, aparecerá unha mensaxe ao rematar o proceso de exportación, "
+"detallando cantos asentos, categorías e beneficiarios foron exportados."
+
+#: dialogs/rc.cpp:186
+msgid "File to export to:"
+msgstr "Ficheiro ao que exportar:"
+
+#: dialogs/rc.cpp:188
+msgid "Account to export"
+msgstr "Conta a exportar"
+
+#: dialogs/rc.cpp:189 dialogs/rc.cpp:297
+msgid "QIF Profile"
+msgstr "Perfil QIF"
+
+#: dialogs/rc.cpp:190 dialogs/rc.cpp:298 dialogs/rc.cpp:362
+#: widgets/kmymoneypriceview.cpp:145
+msgid "New..."
+msgstr "Novo..."
+
+#: dialogs/rc.cpp:191
+msgid "Contents to Export"
+msgstr "Contidos a exportar"
+
+#: dialogs/rc.cpp:194
+msgid "Date Range"
+msgstr "Rango de datas"
+
+#: dialogs/rc.cpp:199
+msgid "Search transactions"
+msgstr "Procurar asentos"
+
+#: dialogs/rc.cpp:200
+msgid "Criteria"
+msgstr "Criterios"
+
+#: dialogs/rc.cpp:201
+msgid "Define your search criteria"
+msgstr "Defina os seus criterios de procura"
+
+#: dialogs/kfindtransactiondlg.cpp:169 dialogs/rc.cpp:202
+msgid "Text"
+msgstr "Texto"
+
+#: dialogs/rc.cpp:203
+msgid "Contains"
+msgstr "Contén"
+
+#: dialogs/rc.cpp:204
+msgid "Does not contain"
+msgstr "Non contén"
+
+#: dialogs/rc.cpp:205
+msgid "Treat text as regular expression"
+msgstr "Tratar o texto como se for unha expresión regular"
+
+#: dialogs/rc.cpp:206
+msgid "Case sensitive"
+msgstr "Sensíbel á capitalización"
+
+#: dialogs/rc.cpp:209
+msgid "Range"
+msgstr "Rango"
+
+#: dialogs/rc.cpp:210
+msgid ""
+"_: To (Date)\n"
+"To"
+msgstr "Até"
+
+#: dialogs/rc.cpp:211
+msgid ""
+"_: From (Date)\n"
+"From"
+msgstr "Desde"
+
+#: dialogs/rc.cpp:213
+msgid "Search this amount"
+msgstr "Procurar este importe"
+
+#: dialogs/rc.cpp:214
+msgid "Search amount in the range"
+msgstr "Procurar un importe no rango"
+
+#: dialogs/rc.cpp:215
+msgid ""
+"_: to (amount)\n"
+"to"
+msgstr "de"
+
+#: dialogs/rc.cpp:216
+msgid ""
+"_: from (amount)\n"
+"from"
+msgstr "a"
+
+#: dialogs/rc.cpp:220
+msgid "Select transactions without payees"
+msgstr "Escoller os asentos sen beneficiario"
+
+#: dialogs/rc.cpp:221
+msgid "Select all"
+msgstr "Escoller todo"
+
+#: dialogs/rc.cpp:222
+msgid "Select none"
+msgstr "Non escoller nada"
+
+#: dialogs/rc.cpp:224
+msgid "Validity"
+msgstr "Validez"
+
+#: dialogs/rc.cpp:226
+msgid "All states"
+msgstr "Todos os estados"
+
+#: dialogs/rc.cpp:230
+msgid "All types"
+msgstr "Todos os tipos"
+
+#: dialogs/rc.cpp:234
+msgid "Any transaction"
+msgstr "Calquera asento"
+
+#: dialogs/rc.cpp:235
+msgid "Valid transaction"
+msgstr "Asentos válidos"
+
+#: dialogs/rc.cpp:236
+msgid "Invalid transaction"
+msgstr "Asentos non válidos"
+
+#: dialogs/rc.cpp:237
+msgid "State"
+msgstr "Estado"
+
+#: dialogs/rc.cpp:238
+msgid "Search this number"
+msgstr "Procurar este número"
+
+#: dialogs/rc.cpp:239
+msgid "Search number in range"
+msgstr "Procurar un número no rango"
+
+#: dialogs/rc.cpp:240
+msgid ""
+"_: to (number)\n"
+"to"
+msgstr "a"
+
+#: dialogs/rc.cpp:241
+msgid ""
+"_: from (number)\n"
+"from"
+msgstr "de"
+
+#: dialogs/rc.cpp:242
+msgid "text"
+msgstr "texto"
+
+#: dialogs/rc.cpp:243
+msgid "warning"
+msgstr "aviso"
+
+#: dialogs/rc.cpp:244
+msgid "Result"
+msgstr "Resultado"
+
+#: dialogs/rc.cpp:254
+msgid "F"
+msgstr "F"
+
+#: dialogs/rc.cpp:257 dialogs/rc.cpp:844
+msgid "&Reset"
+msgstr "&Reiniciar"
+
+#: dialogs/rc.cpp:258
+msgid "&Find"
+msgstr "&Procurar"
+
+#: dialogs/rc.cpp:259
+msgid "GnuCash Import Options"
+msgstr "Opcións da importación de GnuCash"
+
+#: dialogs/rc.cpp:260
+msgid "Use 'Help' for more information on these options"
+msgstr "Use «Axuda» para obter máis información acerca destas opcións"
+
+#: dialogs/rc.cpp:261
+msgid "Investment Handling"
+msgstr "Xestión de investimentos"
+
+#: dialogs/rc.cpp:262
+msgid "One investment account for each stock"
+msgstr "Unha conta de investimento para cada acción"
+
+#: dialogs/rc.cpp:263
+msgid "One investment account for all stocks"
+msgstr "Unha conta de investimento para todas as accións"
+
+#: dialogs/rc.cpp:264
+msgid "Prompt for an investment account for each stock"
+msgstr "Preguntar a conta de investimento para cada acción"
+
+#: dialogs/rc.cpp:265
+msgid "Online price quotes"
+msgstr "Cotizacións Online"
+
+#: dialogs/rc.cpp:266
+msgid "Use Finance::Quote for share price quotes"
+msgstr "Usar Finance::Quote para as cotizacións do prezo das participacións"
+
+#: dialogs/rc.cpp:267
+msgid "Scheduled Transactions"
+msgstr "Asentos planificados"
+
+#: dialogs/rc.cpp:268
+msgid "Drop suspect scheduled transactions"
+msgstr "Anular os asentos planificados sospeitosos"
+
+#: dialogs/rc.cpp:269
+msgid "Decoding option"
+msgstr "A descodificar a opción"
+
+#: dialogs/rc.cpp:270
+msgid "Decode using"
+msgstr "A usar a descodificación"
+
+#: dialogs/rc.cpp:271
+msgid "Transaction Notes option"
+msgstr "Opcións das notas do asento"
+
+#: dialogs/rc.cpp:272
+msgid "Use transaction notes on non-split transactions"
+msgstr "Empregas as notas da transacción naquelas que non teñan partidas"
+
+#: dialogs/rc.cpp:273
+msgid "Debug Options"
+msgstr "Opcións de depuración"
+
+#: dialogs/rc.cpp:274
+msgid "General debug data"
+msgstr "Datos xerais de depuración"
+
+#: dialogs/rc.cpp:275
+msgid "Display XML data"
+msgstr "Mostrar os dados XML"
+
+#: dialogs/rc.cpp:276
+msgid "Anonymize data"
+msgstr "Anonimizar os dados"
+
+#: dialogs/rc.cpp:281
+msgid "Online Quotes - Select price source"
+msgstr "Cotizacións online - Escolla a orixe dos prezos"
+
+#: dialogs/rc.cpp:284
+msgid ""
+"This price source is not known to KMyMoney. Please select an option below."
+msgstr ""
+"A orixe dos prezos non é coñecida por KMyMoney. Escolla unha das opcións en "
+"baixo."
+
+#: dialogs/rc.cpp:285
+msgid "Do not perform online quotes for this investment"
+msgstr "Non obter cotizacións online para este investimento"
+
+#: dialogs/rc.cpp:286
+msgid "Select a known KMyMoney source from the list below"
+msgstr "Escoller unha orixe coñecida por KMyMoney da lista en baixo"
+
+#: dialogs/rc.cpp:287
+msgid ""
+"Use the following name for the price source.\n"
+"(Click Help for further information.)"
+msgstr ""
+"Usar este nome para a orixe do prezo.\n"
+"(Prema en Axuda para máis información)."
+
+#: dialogs/rc.cpp:288
+msgid "Always use this selection for this price source."
+msgstr "Usar sempre esta escolla para esta fonte de prezos."
+
+#: dialogs/rc.cpp:289
+msgid "QIF Import"
+msgstr "Importar QIF"
+
+#: dialogs/rc.cpp:290
+msgid ""
+"From this dialog you are able to import transactions from a Quicken<b>&trade;"
+"</b> compatible file, (known as a QIF file, because of the extension).<p>\n"
+"\n"
+"Please enter the path to the QIF file or select it by clicking on the Browse "
+"button. Once you have the file's path press the Import button and KMyMoney "
+"will import all the transactions, categories and payees it finds."
+msgstr ""
+"Desde este diálogo pode importar asentos desde un ficheiro compatíbel con "
+"Quicken<b>&trade;</b> (coñecido como ficheiro QIF, pola extensión empregada)."
+"<p>\n"
+"\n"
+"Por favor introduza a rota ao ficheiro QIF ou escóllao premendo no botón "
+"Escoller. Cando teña a rota ao ficheiro, prema o botón Importar e KMyMoney "
+"importará todos os asentos, categorías e beneficiarios que atope."
+
+#: dialogs/rc.cpp:291
+msgid "QIF File to Import:"
+msgstr "Ficheiro QIF a importar:"
+
+#: dialogs/rc.cpp:292
+msgid "Import options"
+msgstr "Opcións da importación"
+
+#: dialogs/rc.cpp:293
+msgid "Bank statement"
+msgstr "Extracto bancario"
+
+#: dialogs/rc.cpp:294
+msgid "Other application"
+msgstr "Outro programa"
+
+#: dialogs/rc.cpp:295
+msgid ""
+"Select <b>Bank statement</b> turns on automatic category matching which is "
+"turned off in case of <b>Historic data</b>. Use the latter if you import "
+"files from other Personal Finance Management software."
+msgstr ""
+"Se escolle <b>Extracto bancario</b> activará a procura automática da "
+"categoría, que no caso de <b>Datos históricos</b> estará desactivada. "
+"Empregue esta última alternativa se importa ficheiros desde outros programas "
+"de xestión das finanzas persoais,"
+
+#: dialogs/rc.cpp:296
+msgid "Source of QIF"
+msgstr "Orixe do QIF"
+
+#: dialogs/rc.cpp:302
+msgid "Verify Import"
+msgstr "Verificar o importe"
+
+#: dialogs/rc.cpp:304
+msgid "Ok"
+msgstr "Aceptar"
+
+#: dialogs/rc.cpp:306
+msgid "MyDialog"
+msgstr "O meu diálogo"
+
+#: dialogs/rc.cpp:310
+msgid "File Information"
+msgstr "Información do ficheiro"
+
+#: dialogs/rc.cpp:316
+msgid "Last modified on"
+msgstr "Modificado por última vez o"
+
+#: dialogs/rc.cpp:319
+msgid "Base currency"
+msgstr "Divisa base"
+
+#: dialogs/rc.cpp:322
+msgid "Created on"
+msgstr "Criado o"
+
+#: dialogs/rc.cpp:325
+msgid "Accounts/Categories"
+msgstr "Contas/Categorías"
+
+#: dialogs/rc.cpp:328
+msgid "Closed"
+msgstr "Pechado"
+
+#: dialogs/rc.cpp:331
+msgid "Prices"
+msgstr "Prezos"
+
+#: dialogs/rc.cpp:337
+msgid "Splits"
+msgstr "Partidas"
+
+#: dialogs/rc.cpp:338
+msgid "Price Editor"
+msgstr "Editor de prezos"
+
+#: dialogs/rc.cpp:339
+msgid "Show all stored prices"
+msgstr "Mostrar todos os prezos gardados"
+
+#: dialogs/rc.cpp:343
+msgid "Delete Range..."
+msgstr "Borrar o rango ..."
+
+#: dialogs/rc.cpp:346
+msgid "New Account Dialog"
+msgstr "Diálogo para contas novas"
+
+#: dialogs/rc.cpp:349
+msgid "Opening information"
+msgstr "Información de abertura"
+
+#: dialogs/rc.cpp:350
+msgid "Currency:"
+msgstr "Divisa:"
+
+#: dialogs/rc.cpp:352 dialogs/rc.cpp:793
+msgid "Date:"
+msgstr "Data:"
+
+#: dialogs/rc.cpp:353
+msgid "Balance:"
+msgstr "Saldo: "
+
+#: dialogs/rc.cpp:355
+msgid "Last check number:"
+msgstr "Último número de cheque:"
+
+#: dialogs/rc.cpp:356
+msgid "Notes:"
+msgstr "Notas:"
+
+#: dialogs/rc.cpp:357
+msgid "No auto-VAT-assignment"
+msgstr "Non auto-asinar o IVE"
+
+#: dialogs/rc.cpp:358 dialogs/rc.cpp:441
+msgid "Price entry"
+msgstr "Entrada de prezo"
+
+#: dialogs/rc.cpp:359
+msgid "Preferred Account"
+msgstr "Conta preferida"
+
+#: dialogs/rc.cpp:363
+msgid "Number:"
+msgstr "Número:"
+
+#: dialogs/rc.cpp:364 dialogs/rc.cpp:395
+msgid "BIC"
+msgstr "BIC"
+
+#: dialogs/rc.cpp:367
+msgid "Hierarchy"
+msgstr "Xerarquía"
+
+#: dialogs/rc.cpp:368
+msgid "Subaccount"
+msgstr "Subconta"
+
+#: dialogs/rc.cpp:369
+msgid "Limits"
+msgstr "Límites"
+
+#: dialogs/rc.cpp:370
+msgid ""
+"This page allows to setup certain limits. KMyMoney will warn you when the "
+"account balance reaches a limit."
+msgstr ""
+"Esta páxina permítelle estabelecer certos límites. KMyMoney avisarao cando o "
+"límite da conta acade o límite."
+
+#: dialogs/rc.cpp:372
+msgid "Absolute limit"
+msgstr "Límite absoluto"
+
+#: dialogs/rc.cpp:373
+msgid "Maximum credit limit"
+msgstr "Límite máximo de crédito"
+
+#: dialogs/rc.cpp:374
+msgid "Minimum balance"
+msgstr "Saldo mínimo"
+
+#: dialogs/rc.cpp:375
+msgid "Early warning"
+msgstr "Primeiro aviso"
+
+#: dialogs/rc.cpp:377
+msgid "VAT details"
+msgstr "Detalles do IVE"
+
+#: dialogs/rc.cpp:378
+msgid "VAT category"
+msgstr "Categoría do IVE"
+
+#: dialogs/rc.cpp:379
+msgid "VAT percentage"
+msgstr "Porcentaxe do IVE"
+
+#: dialogs/rc.cpp:380
+msgid "Enable auto VAT assignment"
+msgstr "Permitir auto-asinar o IVE"
+
+#: dialogs/rc.cpp:381
+msgid "Amount entered"
+msgstr "Importe introducido"
+
+#: dialogs/rc.cpp:382
+msgid "Gross amount"
+msgstr "Importe bruto"
+
+#: dialogs/rc.cpp:383
+msgid "Net amount"
+msgstr "Importe neto"
+
+#: dialogs/rc.cpp:384
+msgid "Include on Tax Reports"
+msgstr "Incluír nos informes de impostos"
+
+#: dialogs/rc.cpp:387
+msgid "New Institution Dialog"
+msgstr "Diálogo de nova organización"
+
+#: dialogs/rc.cpp:388
+msgid "Institution Details"
+msgstr "Detalles da organización"
+
+#: dialogs/rc.cpp:390
+msgid "City:"
+msgstr "Cidade:"
+
+#: dialogs/rc.cpp:394
+msgid "Routing Number:"
+msgstr "Número de rota:"
+
+#: dialogs/rc.cpp:398
+msgid "New Budget"
+msgstr "Novo orzamento"
+
+#: dialogs/rc.cpp:403
+msgid "New Equity"
+msgstr "Novo patrimonio"
+
+#: dialogs/rc.cpp:406 dialogs/rc.cpp:407
+msgid "Trading Symbol of the stock or mutual fund, not required."
+msgstr "Símbolo comercial das accións ou fondo de investimento, non requirido."
+
+#: dialogs/rc.cpp:414 dialogs/rc.cpp:415
+msgid "Name of the company, or mutual fund."
+msgstr "Nome da compañía ou fondo de investimento."
+
+#: dialogs/rc.cpp:418
+msgid "New File Dialog"
+msgstr "Diálogo de novo ficheiro"
+
+#: dialogs/rc.cpp:419
+msgid ""
+"Use this dialog to enter personal information about yourself.\n"
+"\n"
+"All information is optional and is provided to personalize\n"
+"your KMyMoney file."
+msgstr ""
+"Use este diálogo para introducir a súa información persoal.\n"
+"\n"
+"Toda a información é opcional e serve para personalizar\n"
+"o seu ficheiro de KMyMoney."
+
+#: dialogs/rc.cpp:430
+msgid "New Investment wizard"
+msgstr "Asistente para novos investimentos"
+
+#: dialogs/rc.cpp:431
+msgid "Investment Type"
+msgstr "Tipo de investimento"
+
+#: dialogs/rc.cpp:432
+msgid "This wizard allows you to create a new investment."
+msgstr "Este asistente permítelle crear un novo investimento."
+
+#: dialogs/rc.cpp:433
+msgid ""
+"The first step in this process requires to select the type of investment. "
+"The following steps collect more details about the investment from you."
+msgstr ""
+"O primeiro paso neste proceso require que escolla o tipo de investimento. Os "
+"seguintes pasos pediranlle máis dados."
+
+#: dialogs/rc.cpp:434
+msgid "Type of investment"
+msgstr "Tipo de investimento"
+
+#: dialogs/rc.cpp:438
+msgid "Investment details"
+msgstr "Detalles do investimento"
+
+#: dialogs/rc.cpp:439
+msgid ""
+"Enter the details below and click <b>Next</b> to continue entering the "
+"online update details."
+msgstr ""
+"Introduza os detalles e prema <b>Seguinte</b> para continuar cos detalles da "
+"actualización online."
+
+#: dialogs/rc.cpp:442 dialogs/rc.cpp:728
+msgid "Fraction"
+msgstr "Fracción"
+
+#: dialogs/rc.cpp:443
+msgid "Trading Currency"
+msgstr "Divisa de mercado"
+
+#: dialogs/rc.cpp:444
+msgid "Full name"
+msgstr "Nome completo"
+
+#: dialogs/rc.cpp:445
+msgid "AMEX"
+msgstr "AMEX"
+
+#: dialogs/rc.cpp:446
+msgid "EUREX"
+msgstr "EUREX"
+
+#: dialogs/rc.cpp:447
+msgid "FUND"
+msgstr "FUND"
+
+#: dialogs/rc.cpp:448
+msgid "NASDAQ"
+msgstr "NASDAQ"
+
+#: dialogs/rc.cpp:449
+msgid "NYSE"
+msgstr "NYSE"
+
+#: dialogs/rc.cpp:450
+msgid "XETRA"
+msgstr "XETRA"
+
+#: dialogs/rc.cpp:451
+msgid "Trading symbol"
+msgstr "Símbolo de comercialización"
+
+#: dialogs/rc.cpp:452
+msgid "Identification"
+msgstr "Identificación"
+
+#: dialogs/rc.cpp:453
+msgid "Enter the ticker symbol (e.g. RHAT)."
+msgstr "Introduza o símbolo na bolsa de valores (p.ex. RHAT)."
+
+#: dialogs/rc.cpp:454
+msgid "Enter the CUSIP/ISIN/WKN identification number here"
+msgstr "Introduza aquí o número de identificación CUSIP/ISIN/WKN"
+
+#: dialogs/rc.cpp:455
+msgid "Trading market"
+msgstr "Mercado de valores"
+
+#: dialogs/rc.cpp:456
+msgid "Online Update"
+msgstr "Actualización online"
+
+#: dialogs/rc.cpp:457
+msgid ""
+"Select an online source and click <b>Finish</b> to store the investment "
+"data. If you don't want to use online updates, just leave the data as is."
+msgstr ""
+"Escolla unha orixe online de dados e prema <b>Rematar</b> para gardar o "
+"investimento. Se non desexa usar actualizacións online, déixeo como está."
+
+#: dialogs/rc.cpp:458
+msgid "Use Finance::Quote"
+msgstr "Usar Finance::Quote"
+
+#: dialogs/rc.cpp:460
+msgid "Factor"
+msgstr "Factor"
+
+#: dialogs/rc.cpp:461
+msgid "New Loan Wizard"
+msgstr "Asistente para a creación de empréstitos"
+
+#: dialogs/rc.cpp:462
+msgid "New Loan Account Wizard"
+msgstr "Asistente para nova conta tipo empréstito "
+
+#: dialogs/rc.cpp:463
+msgid ""
+"\n"
+"Welcome to the New Loan Account Wizard which will guide you through the "
+"creation of a new loan e.g. for your home, your car or any other loan that "
+"you pay or gain interest for.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Benvido ao Asistente para Novas Contas de tipo Empréstito, que o guiará a "
+"través da creación do novo empréstito, por ex. para a súa casa, coche ou "
+"calquera empréstito que gañe ou pague xuros.\n"
+"\n"
+"Asegúrese de ter a información relevante a mao. Polo xeral, está no contrato "
+"ou no último extracto de conta."
+
+#: dialogs/rc.cpp:464
+msgid "Edit Loan Account Wizard"
+msgstr "Asistente para a edición de contas de tipo empréstito"
+
+#: dialogs/rc.cpp:465
+msgid ""
+"\n"
+"Welcome to the Edit Loan Account Wizard. Please use this wizard to modify "
+"information about your loan account.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Benvido ao asistente para a edición de contas tipo empréstito.Use este "
+"asistente para modificar información acerca do seu empréstito.\n"
+"\n"
+"Asegúrese de ter a información relevante a mao. Polo xeral, está no contrato "
+"ou no último extracto de conta."
+
+#: dialogs/rc.cpp:467
+msgid ""
+"\n"
+"In the first step, KMyMoney will ask you some general information about the "
+"loan account to be created."
+msgstr ""
+"\n"
+"En primeiro lugar, KMyMoney preguntaralle algúns datos xerais acerca do "
+"empréstito a criar."
+
+#: dialogs/rc.cpp:468 dialogs/rc.cpp:522 dialogs/rc.cpp:610
+msgid "1. General Information"
+msgstr "1. Información xeral"
+
+#: dialogs/rc.cpp:469
+msgid ""
+"\n"
+"2. Calculate Loan\n"
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"2. Calcular o empréstito\n"
+"\n"
+"3. Pagamentos"
+
+#: dialogs/rc.cpp:470
+msgid "Edit selection"
+msgstr "Editar a selección"
+
+#: dialogs/rc.cpp:471
+msgid ""
+"\n"
+"Please select, which data of the loan you want to modify."
+msgstr ""
+"\n"
+"Por favor, escolla os datos do empréstito a modificar."
+
+#: dialogs/rc.cpp:472
+msgid "Modify the interest rate"
+msgstr "Modificar o tipo de xuro"
+
+#: dialogs/rc.cpp:473
+msgid "Modify additional fees"
+msgstr "Modificar as taxas adicionais"
+
+#: dialogs/rc.cpp:474
+msgid "Modify other loan information"
+msgstr "Modificar outra información do empréstito"
+
+#: dialogs/rc.cpp:475
+msgid "Effective date"
+msgstr "Data de efecto"
+
+#: dialogs/rc.cpp:478
+msgid "When should the changes become active?"
+msgstr "Cando deberían facerse efectivos os cambios?"
+
+#: dialogs/rc.cpp:479
+msgid "Lending or borrowing money"
+msgstr "Prestando ou pedindo cartos"
+
+#: dialogs/rc.cpp:480
+msgid ""
+"\n"
+"Do you borrow or lend money?"
+msgstr ""
+"\n"
+"Pides ou prestas cartos?"
+
+#: dialogs/rc.cpp:483
+msgid "Name of the loan"
+msgstr "Nome do empréstito"
+
+#: dialogs/rc.cpp:484
+msgid ""
+"\n"
+"How do you want to call this loan? Examples for names are 'car loan', "
+"'school loan', 'home owner loan'."
+msgstr ""
+"\n"
+"Como lle desexa chamar a este empréstito? Exemplos de nomes son «empréstito "
+"do coche», «empréstito para estudos», «hipoteca»."
+
+#: dialogs/rc.cpp:486
+msgid "TextLabel6"
+msgstr "TextLabel6"
+
+#: dialogs/rc.cpp:487
+msgid "TextLabel7"
+msgstr "TextLabel7"
+
+#: dialogs/rc.cpp:488
+msgid "Type of interest"
+msgstr "Tipo de xuro"
+
+#: dialogs/rc.cpp:489
+msgid ""
+"\n"
+"Is the interest of this loan fixed over a period of time or is it adapted "
+"from time to time? If the interest rate changes during the amortization "
+"phase of the loan you should choose the option 'variable interest rate'."
+msgstr ""
+"\n"
+"Este empréstito é de xuro fixo ou variábel? Se a taxa de xuro cambia durante "
+"a fase de amortización debe escoller a opción «xuro de tipo variábel»."
+
+#: dialogs/rc.cpp:490
+msgid "Fixed interest rate"
+msgstr "Xuro de tipo fixo"
+
+#: dialogs/rc.cpp:491
+msgid "Variable interest rate"
+msgstr "Xuro de tipo variábel"
+
+#: dialogs/rc.cpp:492
+msgid "Payments?"
+msgstr "Pagamentos?"
+
+#: dialogs/rc.cpp:493
+msgid ""
+"\n"
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?"
+msgstr ""
+"\n"
+"Fixéronse pagamentos deste empréstito antes da súa introdución en KMyMoney "
+"ou non?"
+
+#: dialogs/rc.cpp:494
+msgid "No, no payments were made yet."
+msgstr "Non, non se fixeron pagamentos aínda."
+
+#: dialogs/rc.cpp:495
+msgid "Yes, payments were made."
+msgstr "Si, fixéronse pagamentos."
+
+#: dialogs/rc.cpp:496
+msgid ""
+"Note: Payments made to obtain the loan (e.g. Dissagio) are not considered as "
+"payments in this context."
+msgstr ""
+"Nota: Os pagamentos feitos para obter o empréstito (p. ex. «Comisións de "
+"apertura») non son considerados como pagamentos neste contexto."
+
+#: dialogs/rc.cpp:497
+msgid "Recording payments?"
+msgstr "Está a rexistrar pagamentos?"
+
+#: dialogs/rc.cpp:498
+msgid ""
+"\n"
+"Do you want to record all payments of this loan with KMyMoney?"
+msgstr ""
+"\n"
+"Quere rexistar todos os pagamentos deste empréstimo con KMyMoney?"
+
+#: dialogs/rc.cpp:499
+msgid "Yes, record all payments."
+msgstr "Si, rexiste todos os pagamentos."
+
+#: dialogs/rc.cpp:500
+msgid "No, only record payments since the beginning of this year."
+msgstr "Non, rexiste só os pagamentos desde o comezo deste ano."
+
+#: dialogs/rc.cpp:501
+msgid "Date of next interest change"
+msgstr "Data do vindeiro cambio de xuro"
+
+#: dialogs/rc.cpp:502
+msgid ""
+"\n"
+"Select the date when the interest rate for this loan will be modified and "
+"the frequency of the future changes."
+msgstr ""
+"\n"
+"Escolla a data na que se modificará a taxa deste empréstimo e a frecuencia "
+"de mudanzas futuras."
+
+#: dialogs/rc.cpp:503
+msgid "Next interest change on"
+msgstr "Os vindeiros xuros mudan o"
+
+#: dialogs/rc.cpp:504
+msgid "Time until next change"
+msgstr "Tempo até o vindeiro cambio"
+
+#: dialogs/rc.cpp:506 dialogs/rc.cpp:571
+msgid ""
+"\n"
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"\n"
+"Indique a cantidade que paga de principal e xuros ou deixe o campo valeiro "
+"para calculalo."
+
+#: dialogs/rc.cpp:507
+msgid "Current amount"
+msgstr "Importe actual"
+
+#: dialogs/rc.cpp:510
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the amount for principal and interest then enter "
+"it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"KMyMoney pode calcular a nova taxa de xuro ou o importe de principal e "
+"xuros. Se coñece a cantidade de principal e xuros introdúzaa aquí.\n"
+"\n"
+"Se KMyMoney debe calcular este valor, déixeo en branco."
+
+#: dialogs/rc.cpp:512 dialogs/rc.cpp:545
+msgid ""
+"\n"
+"Please enter the interest rate or leave the field empty to calculate it."
+msgstr ""
+"\n"
+"Introduza a taxa de xuro ou deixe o campo en branco para calculalo."
+
+#: dialogs/rc.cpp:514
+msgid "Current rate"
+msgstr "Taxa actual"
+
+#: dialogs/rc.cpp:516
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the interest rate then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"KMyMoney pode calcular a nova taxa de xuro ou o importe de principal e "
+"xuros. Se coñece a taxa de xuro indíquea aquí.\n"
+"\n"
+"Se KMyMoney debe calcular este valor, deixe este campo valeiro."
+
+#: dialogs/rc.cpp:517
+msgid "Date of first payment"
+msgstr "Data do primeiro pagamento"
+
+#: dialogs/rc.cpp:520
+msgid "Calculate Loan"
+msgstr "Calcular o empréstimo"
+
+#: dialogs/rc.cpp:521
+msgid ""
+"\n"
+"You have successfully entered the general information about your loan. Next, "
+"KMyMoney needs some information about the calculation of the loan."
+msgstr ""
+"\n"
+"Introduciu satisfactoriamente a información xeral do seu empréstimo. A "
+"seguir, KMyMoney necesita algunha información acerca do cálculo do "
+"empréstimo."
+
+#: dialogs/rc.cpp:523 dialogs/rc.cpp:611
+msgid ""
+"\n"
+"2. Calculate Loan"
+msgstr ""
+"\n"
+"2. Calcular o empréstimo"
+
+#: dialogs/rc.cpp:524 dialogs/rc.cpp:612
+msgid ""
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"3. Pagamentos"
+
+#: dialogs/rc.cpp:526
+msgid ""
+"\n"
+"How often will there be payments made to this loan?"
+msgstr ""
+"\n"
+"Con que frecuencia se farán pagamentos a este empréstimo?"
+
+#: dialogs/rc.cpp:527
+msgid "Interest calculation"
+msgstr "Cálculo dos xuros"
+
+#: dialogs/rc.cpp:528
+msgid ""
+"\n"
+"When does the actual interest rate get calculated?"
+msgstr ""
+"\n"
+"Cando se calcula a taxa real de xuro?"
+
+#: dialogs/rc.cpp:529
+msgid "When the payment is received."
+msgstr "Cando se recebe o pagamento."
+
+#: dialogs/rc.cpp:530
+msgid "When the payment is due."
+msgstr "Cando vence o pagamento."
+
+#: dialogs/rc.cpp:534 dialogs/rc.cpp:547 dialogs/rc.cpp:560 dialogs/rc.cpp:573
+#: dialogs/rc.cpp:586 dialogs/rc.cpp:598 dialogs/rc.cpp:679
+msgid "Loan amount:"
+msgstr "Importe do empréstimo:"
+
+#: dialogs/rc.cpp:535 dialogs/rc.cpp:548 dialogs/rc.cpp:561 dialogs/rc.cpp:574
+#: dialogs/rc.cpp:587 dialogs/rc.cpp:599 dialogs/rc.cpp:633 dialogs/rc.cpp:671
+msgid "Interest rate:"
+msgstr "Taxa de xuro:"
+
+#: dialogs/rc.cpp:536 dialogs/rc.cpp:549 dialogs/rc.cpp:562 dialogs/rc.cpp:575
+#: dialogs/rc.cpp:588 dialogs/rc.cpp:600 dialogs/rc.cpp:669
+msgid "Term:"
+msgstr "Remate:"
+
+#: dialogs/rc.cpp:537 dialogs/rc.cpp:550 dialogs/rc.cpp:563 dialogs/rc.cpp:576
+#: dialogs/rc.cpp:589 dialogs/rc.cpp:601 dialogs/rc.cpp:622 dialogs/rc.cpp:630
+#: dialogs/rc.cpp:677
+msgid "Principal + Interest:"
+msgstr "Principal + Xuros:"
+
+#: dialogs/rc.cpp:538 dialogs/rc.cpp:551 dialogs/rc.cpp:564 dialogs/rc.cpp:577
+#: dialogs/rc.cpp:583 dialogs/rc.cpp:585 dialogs/rc.cpp:590 dialogs/rc.cpp:602
+msgid "Final amortization payment"
+msgstr "Pagamento de amortizazón final"
+
+#: dialogs/rc.cpp:557
+msgid "Duration"
+msgstr "Duración"
+
+#: dialogs/rc.cpp:558
+msgid ""
+"\n"
+"Please enter the term of this loan or leave the field empty to calculate it. "
+"The term is the time that is required to fully repay the loan. This time "
+"might be different from the time your loan contract is signed for."
+msgstr ""
+"\n"
+"Introduza o prazo deste empréstimo ou deixe o campo valeiro para calculalo. "
+"O prazo é o tempo requerido para devolver por completo o empréstimo. Este "
+"tempo pode ser diferente do tempo polo que asine o contrato de empréstimo."
+
+#: dialogs/rc.cpp:584
+msgid ""
+"\n"
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"\n"
+"Introduza o importe do derradeiro pagamento da amortizazón ou deixe o campo "
+"vacio para calculalo."
+
+#: dialogs/rc.cpp:596
+msgid "Calculation Overview"
+msgstr "Resumo do cálculo"
+
+#: dialogs/rc.cpp:597
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown in the overview below. You can "
+"accept these values by selecting \"Next\" or change them by choosing \"Back"
+"\" to return to the input field for the information you want to change."
+msgstr ""
+"\n"
+"KMyMoney calculou o empréstimo como se mostra no resumo de abaixo. Pode "
+"aceitar estes valores escollendo «Seguinte» ou cambialos escollendo «Atrás» "
+"para voltar ao campo de entrada da información que desexe cambiar."
+
+#: dialogs/rc.cpp:609
+msgid ""
+"\n"
+"In the following steps, KMyMoney supports you in setting up categories and "
+"schedules for your loan payments."
+msgstr ""
+"\n"
+"Nos seguintes pasos, KMyMoney axudarao a configurar as categorías e "
+"transaccións planificadas para os pagamentos do seu empréstimo."
+
+#: dialogs/rc.cpp:614
+msgid ""
+"\n"
+"Please select the category you want to assign the interest payments to or "
+"create a new category."
+msgstr ""
+"\n"
+"Escolla a categoría onde desexe asentar os pagamentos dos xuros ou crie unha "
+"nova categoría."
+
+#: dialogs/rc.cpp:615
+msgid "Additional Fees"
+msgstr "Cargos adicionais"
+
+#: dialogs/rc.cpp:616
+msgid ""
+"\n"
+"If your regular payment contains any additional fees, click on the button "
+"\"Additional fees\" to enter them."
+msgstr ""
+"\n"
+"Se o seu pagamento periódico contén cargos adicionais, prema no botón «Cargos "
+"Adicionais» para introducilos."
+
+#: dialogs/rc.cpp:617
+msgid "= periodical payment:"
+msgstr "= pagamento periódico:"
+
+#: dialogs/rc.cpp:623
+msgid ""
+"If no additional fees are included in your periodical payment or you have "
+"entered all such fees, then click on \"Next\"."
+msgstr ""
+"Se non se inclúen cargos adicionais nos seus pagamentos periódicos ou xa os "
+"introduciu, prema en «Seguir»."
+
+#: dialogs/rc.cpp:625
+msgid ""
+"KMyMoney will create a schedule for this payment and reminds you whenever a "
+"payment must be made.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"KMyMoney vai criar un plano de pagamentos, e avisarao cando deba facer un."
+"<p>\n"
+"Se escolleu rexistar todos os pagamentos, xa proporcionou esta data. Se "
+"escolleu rexistar só os pagamentos deste ano, entón a <b>Data de vencimento "
+"do primeiro pagamento</b> é a data do primeiro pagamento realizado este ano."
+
+#: dialogs/rc.cpp:626
+msgid "First payment due on:"
+msgstr "O primeiro pagamento vence o:"
+
+#: dialogs/rc.cpp:627
+msgid "Make payment from/to:"
+msgstr "Pagar de/a:"
+
+#: dialogs/rc.cpp:629
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown below. If you want to accept these "
+"values use the \"Finish\" button to update your account, otherwise use the "
+"\"Back\" button to modify your settings."
+msgstr ""
+"\n"
+"KMyMoney calculou o empréstimo como se mostra abaixo. Se quer aceitar estes "
+"valores empregue o botón «Finalizar» para actualizar a súa conta, se non é o "
+"caso use o botón «Atrás» para modificar os dados."
+
+#: dialogs/rc.cpp:631
+msgid "Additional fees:"
+msgstr "Cargos adicionais:"
+
+#: dialogs/rc.cpp:632
+msgid "Total payment:"
+msgstr "Pagamento total:"
+
+#: dialogs/rc.cpp:634
+msgid "Valid from:"
+msgstr "Valedeiro de:"
+
+#: dialogs/rc.cpp:635
+msgid "Affected payments:"
+msgstr "Pagamentos afectados:"
+
+#: dialogs/rc.cpp:645
+msgid "Press this to create a new asset account"
+msgstr "Prema aquí para criar unha nova conta de activos"
+
+#: dialogs/rc.cpp:648
+msgid ""
+"\n"
+"This page summarizes the data you entered. If you need to modify anything, "
+"please use the \"Back\" button to go to respective page. Otherwise use the "
+"\"Finish\" button to create the account."
+msgstr ""
+"\n"
+"Esta páxina resume os datos que indroduciu. Se necesita modificar algo use o "
+"botón «Atrás» para ir á páxina apropriada. Caso contrario use o botón "
+"«Rematar» para criar a conta."
+
+#: dialogs/rc.cpp:650
+msgid "Payee:"
+msgstr "Beneficiario:"
+
+#: dialogs/rc.cpp:653
+msgid "First payment:"
+msgstr "Primeiro pagamento:"
+
+#: dialogs/rc.cpp:655
+msgid "Amount is:"
+msgstr "O importe é:"
+
+#: dialogs/rc.cpp:656
+msgid "Loan calculation"
+msgstr "Cálculo de empréstimos"
+
+#: dialogs/rc.cpp:660
+msgid "Periodic Payment:"
+msgstr "Pagamento periódico:"
+
+#: dialogs/rc.cpp:661
+msgid "Additional Fees:"
+msgstr "Cargos adicionais:"
+
+#: dialogs/rc.cpp:662
+msgid "Interest category:"
+msgstr "Categoría onde carga os xuros:"
+
+#: dialogs/rc.cpp:663
+msgid "Payment from:"
+msgstr "Conta devedora:"
+
+#: dialogs/rc.cpp:666
+msgid "Next due date:"
+msgstr "Vindeira data de vencemento:"
+
+#: dialogs/rc.cpp:673
+msgid "Final Payment:"
+msgstr "Pagamento final:"
+
+#: dialogs/rc.cpp:675
+msgid "Interest is due:"
+msgstr "Vencimento dos xuros:"
+
+#: dialogs/rc.cpp:680
+msgid "Payment frequency:"
+msgstr "Frecuencia de pagamento:"
+
+#: dialogs/rc.cpp:682
+msgid "Online Quote Configuration"
+msgstr "Configuración das cotizacións online"
+
+#: dialogs/rc.cpp:687
+msgid "Perl Location:"
+msgstr "Localización de Perl:"
+
+#: dialogs/rc.cpp:688
+msgid "Script:"
+msgstr "Script:"
+
+#: dialogs/rc.cpp:690
+msgid "Reassign payees"
+msgstr "Asignar de novo os beneficiarios"
+
+#: dialogs/rc.cpp:691
+msgid ""
+"The transactions associated with the selected payees need to be re-assigned "
+"to a different payee before the selected payees can be deleted. Please "
+"select a payee from the list below."
+msgstr ""
+"As operacións asociadas dos beneficiarios escollidos deben ser asinadas a "
+"outro beneficiario antes de poder borrar os escollidos. Por favor, escolla "
+"un beneficiario na lista en baixo."
+
+#: dialogs/rc.cpp:692
+msgid "Available payees:"
+msgstr "Beneficiarios disponíbeis:"
+
+#: dialogs/rc.cpp:693
+msgid "Assign deleted names to the above selected payee's matching list"
+msgstr "Asinar os nomes borrados á lista de beneficiarios escollido en riba"
+
+#: dialogs/rc.cpp:696
+msgid "PluginDlg"
+msgstr "Diálogo de extensións"
+
+#: dialogs/rc.cpp:697
+msgid "PlugIn"
+msgstr "Extensión"
+
+#: dialogs/rc.cpp:698 widgets/transaction.cpp:1071
+#: widgets/transaction.cpp:1658
+msgid "Status"
+msgstr "Estado"
+
+#: dialogs/rc.cpp:699
+msgid "Feature"
+msgstr "Funcionalidade"
+
+#: dialogs/rc.cpp:703
+msgid "Reconciliation Dialog"
+msgstr "Diálogo de conciliación"
+
+#: dialogs/rc.cpp:704
+msgid ""
+"This dialog will assist in helping you to balance your account.\n"
+"\n"
+"Click on an appropriate transaction within one of the two list views to mark "
+"it as reconciled. To create a transaction or edit\n"
+"a transaction you can return to the register by clicking on the Edit "
+"Transactions button.\n"
+"\n"
+"Your account is balanced when the Difference is Zero. Click on the Finish "
+"button to save the reconciled transactions."
+msgstr ""
+"Este diálogo axudarao a cadrar súa conta.\n"
+"\n"
+"Prema nun asento adecuado dunha das dúas listas para marcalo como "
+"conciliado. Para criar ou editar un asento \n"
+"pode voltar ao rexisto premendo no botón «Editar o asento».\n"
+"\n"
+"A súa conta está cadrada cando a diferenza é cero. Prema no botón Rematar "
+"para gardar os asentos conciliados."
+
+#: dialogs/rc.cpp:705
+msgid "Withdrawals"
+msgstr "Reintegros"
+
+#: dialogs/rc.cpp:707 dialogs/rc.cpp:708 dialogs/rc.cpp:822
+msgid "$"
+msgstr "$"
+
+#: dialogs/rc.cpp:710
+msgid "Previous Balance:"
+msgstr "Saldo anterior:"
+
+#: dialogs/rc.cpp:711 dialogs/rc.cpp:713 dialogs/rc.cpp:715 dialogs/rc.cpp:717
+#: dialogs/rc.cpp:820
+msgid "0"
+msgstr "0"
+
+#: dialogs/rc.cpp:712
+msgid "Ending Balance:"
+msgstr "Saldo Final:"
+
+#: dialogs/rc.cpp:714
+msgid "Cleared Balance:"
+msgstr "Saldo librado:"
+
+#: dialogs/rc.cpp:716
+msgid "Difference:"
+msgstr "Diferenza:"
+
+#: dialogs/rc.cpp:718
+msgid "Edit Transactions..."
+msgstr "Editar os asentos..."
+
+#: dialogs/rc.cpp:721
+msgid "Security List Editor"
+msgstr "Editor do listado de valores bursátiles"
+
+#: dialogs/rc.cpp:726
+msgid "Market"
+msgstr "Mercado"
+
+#: dialogs/rc.cpp:729
+msgid "Cash Fraction"
+msgstr "Fracción monetaria"
+
+#: dialogs/rc.cpp:730
+msgid "Add..."
+msgstr "Engadir ..."
+
+#: dialogs/rc.cpp:732 widgets/kmymoneypriceview.cpp:157
+msgid "Delete..."
+msgstr "Borrar..."
+
+#: dialogs/rc.cpp:733
+msgid "Show national currencies"
+msgstr "Mostrar as divisas nacionais"
+
+#: dialogs/rc.cpp:735
+msgid "KMyMoney - Select Database"
+msgstr "KMyMoney - Escolla a base de datos"
+
+#: dialogs/rc.cpp:736
+msgid "CAUTION!"
+msgstr "AVISO!"
+
+#: dialogs/rc.cpp:737
+msgid ""
+"<font color=\"#ff2727\">This software is still in an experimental stage, and "
+"there are still some known response time problems. Please be patient; we are "
+"working on them.\n"
+"As always, please make sure you have adequate backups of your data.</font>"
+msgstr ""
+"<font color=\"#ff2727\">Este software aínda está en fase experimental, e "
+"aínda ten algúns problemas coñecidos cos tempos de resposta. Estamos a "
+"traballar neles.\n"
+"Como sempre, verifique que ten unha copia de seguranza dos seus datos.</font>"
+
+#: dialogs/rc.cpp:738
+msgid "Database Type"
+msgstr "Tipo de base de dados"
+
+#: dialogs/rc.cpp:739
+msgid "Database Name"
+msgstr "Nome da base de dados"
+
+#: dialogs/rc.cpp:740
+msgid "Host Name"
+msgstr "Nome do servidor"
+
+#: dialogs/rc.cpp:741
+msgid "User Name"
+msgstr "Nome de usuario"
+
+#: dialogs/rc.cpp:743
+msgid "Preload &all data"
+msgstr "Precargar &todos os dados"
+
+#: dialogs/rc.cpp:745
+msgid "&Generate SQL"
+msgstr "Xeral o &SQL"
+
+#: dialogs/rc.cpp:747
+msgid "Ca&ncel"
+msgstr "Ca&ncelar"
+
+#: dialogs/rc.cpp:762 widgets/rc.cpp:172
+msgid "Sort options"
+msgstr "Opcións do ordenamento"
+
+#: dialogs/rc.cpp:763
+msgid "Use default"
+msgstr "Usar o predeterminado"
+
+#: dialogs/rc.cpp:767
+msgid "Correct splits"
+msgstr "Corrixir as partidas"
+
+#: dialogs/rc.cpp:769
+msgid "How do you want to proceed?"
+msgstr "Como desexa proceder?"
+
+#: dialogs/rc.cpp:770
+msgid "Continue to edit splits"
+msgstr "Continuar editando as partidas"
+
+#: dialogs/rc.cpp:771
+#, c-format
+msgid "Change total amount of transaction to %1."
+msgstr "Muda o importe total do asento a %1."
+
+#: dialogs/rc.cpp:772
+msgid "Distribute difference of %1 among all splits."
+msgstr "Reparte a diferenza de %1 entre todas as partidas."
+
+#: dialogs/rc.cpp:773
+msgid "Leave %1 unassigned."
+msgstr "Deixar %1 sen asinar."
+
+#: dialogs/rc.cpp:776
+msgid "Split transaction"
+msgstr "Varias partidas"
+
+#: dialogs/rc.cpp:777
+msgid "<b>11,00<b>"
+msgstr "<b>11,00<b>"
+
+#: dialogs/rc.cpp:778
+msgid "<b>111,00<b>"
+msgstr "<b>111,00<b>"
+
+#: dialogs/rc.cpp:779
+msgid "Unassigned"
+msgstr "Sen asinar"
+
+#: dialogs/rc.cpp:780
+msgid "Sum of splits"
+msgstr "Suma das partidas"
+
+#: dialogs/rc.cpp:781
+msgid "100,00"
+msgstr "100,00"
+
+#: dialogs/rc.cpp:782
+msgid "Transaction amount"
+msgstr "Importe do asento"
+
+#: dialogs/rc.cpp:783
+msgid "Merge"
+msgstr "Fusionar"
+
+#: dialogs/rc.cpp:784
+msgid "Merges splits with the same category to one split"
+msgstr "Xunta partidas coa mesma categoría nunha única partida"
+
+#: dialogs/rc.cpp:785
+msgid ""
+"In case you have multiple split entries to the same category and you like to "
+"keep them as a single split, press this button. The amount for identical "
+"categories will be added and stored in a single split for that category."
+msgstr ""
+"Prema neste botón se ten varias partidas para a mesma categoría e desexa "
+"conservalas nunha única. O importe das partidas idénticas sumarase e "
+"gardarase nunha única partida con esa categoría."
+
+#: dialogs/rc.cpp:786
+msgid "Clear &Zero"
+msgstr "Limpar os &ceros"
+
+#: dialogs/rc.cpp:787
+msgid "Removes all splits that have a value of zero."
+msgstr "Borra todas as partidas que teñan un valor igual a cero."
+
+#: dialogs/rc.cpp:791
+msgid "New price entry"
+msgstr "Nova entrada de prezo"
+
+#: dialogs/rc.cpp:799
+msgid "Void mark"
+msgstr "Marca de nulo"
+
+#: dialogs/rc.cpp:800
+msgid "Opening Balance text"
+msgstr "Texto do saldo de abertura"
+
+#: dialogs/rc.cpp:801
+msgid "Type field text"
+msgstr "Escreba o campo de texto"
+
+#: dialogs/rc.cpp:802
+msgid "Account delimiter"
+msgstr "Separador de contas"
+
+#: dialogs/rc.cpp:804
+msgid "Attempt to match similar transactions"
+msgstr "Tentar casar asentos semellantes"
+
+#: dialogs/rc.cpp:806 dialogs/rc.cpp:808
+msgid "The format of the dates in the QIF file."
+msgstr "O formato das datas no ficheiro QIF."
+
+#: dialogs/rc.cpp:809 dialogs/rc.cpp:811
+msgid ""
+"If a QIF file contains date entries with years represented with two digits "
+"then either an apostrophe or a slash may be used to delimit the year in the "
+"dates for certain centuries. This enables 1905 to be distinguished from "
+"2005. Specify here which range of years will have year delimited by an "
+"apostrophe (eg. for Quicken this is usually 1900-1949)."
+msgstr ""
+"Se un ficheiro QIF contén asentos co ano representado por dous díxitos entón "
+"pode usarse un apostrofe ou unha barra para delimitalo en certos séculos. "
+"Isto permite distinguir 1095 de 2005. Especifique aquí o rango de anos que "
+"estarán delimitados cun apostrofe (en Quicken isto é polo xeral 1900-1949)."
+
+#: dialogs/rc.cpp:810
+msgid "Apostrophe Handling"
+msgstr "Xestión do apostrofe"
+
+#: dialogs/rc.cpp:812
+msgid "Amounts"
+msgstr "Importes"
+
+#: dialogs/rc.cpp:813
+msgid "Field"
+msgstr "Campo"
+
+#: dialogs/rc.cpp:814
+msgid "QIF-Record"
+msgstr "Rexisto-QIF"
+
+#: dialogs/rc.cpp:815 dialogs/rc.cpp:833
+msgid "Decimal Symbol"
+msgstr "Símbolo decimal"
+
+#: dialogs/rc.cpp:816
+msgid "Thousand Delimiter"
+msgstr "Delimitador de milleiro"
+
+#: dialogs/rc.cpp:817
+msgid "SortColumnInvisible"
+msgstr "SortColumnInvisible"
+
+#: dialogs/rc.cpp:819
+msgid "T"
+msgstr "T"
+
+#: dialogs/rc.cpp:821
+msgid "Split-Value"
+msgstr "Valor da partida"
+
+#: dialogs/rc.cpp:824
+msgid "Commission"
+msgstr "Comisión"
+
+#: dialogs/rc.cpp:825
+msgid "O"
+msgstr "O"
+
+#: dialogs/rc.cpp:826
+msgid "2"
+msgstr "2"
+
+#: dialogs/rc.cpp:828
+msgid "I"
+msgstr "I"
+
+#: dialogs/rc.cpp:829
+msgid "3"
+msgstr "3"
+
+#: dialogs/rc.cpp:831
+msgid "Q"
+msgstr "Q"
+
+#: dialogs/rc.cpp:832
+msgid "4"
+msgstr "4"
+
+#: dialogs/rc.cpp:834
+msgid "Thousands Separator"
+msgstr "Separador de milleiro"
+
+#: dialogs/rc.cpp:836
+msgid "Output filter location"
+msgstr "Filtro para exportar"
+
+#: dialogs/rc.cpp:837
+msgid "Input filter file type"
+msgstr "Tipo de ficheiro do filtro da entrada"
+
+#: dialogs/rc.cpp:838
+msgid "*.qif"
+msgstr "*.qif"
+
+#: dialogs/rc.cpp:839
+msgid "Input filter location"
+msgstr "Filtro para importar"
+
+#: dialogs/rc.cpp:843
+msgid "Rename"
+msgstr "Mudar o nome"
+
+#: dialogs/kselecttransactionsdlg.cpp:44
+msgid "Select Transaction"
+msgstr "Escoller un asento"
+
+#: dialogs/kselecttransactionsdlg.cpp:45
+msgid ""
+"Select a transaction and press the OK button or use Cancel to select none."
+msgstr ""
+"Escolla un asento e prema no botón Aceitar ou use Cancelar para non escoller "
+"nada."
+
+#: dialogs/knewinvestmentwizard.cpp:62
+msgid "Investment detail wizard"
+msgstr "Asistente de detalles do investimento"
+
+#: dialogs/knewinvestmentwizard.cpp:82
+msgid "Security detail wizard"
+msgstr "Asistente de detalles dos valores"
+
+#: dialogs/knewaccountdlg.cpp:121 dialogs/knewinvestmentwizard.cpp:109
+msgid ""
+"_: default price mode\n"
+"<default>"
+msgstr "<predeterminado>"
+
+#: dialogs/knewaccountdlg.cpp:122 dialogs/knewinvestmentwizard.cpp:110
+msgid "Price per share"
+msgstr "Prezo por participación"
+
+#: dialogs/knewaccountdlg.cpp:123 dialogs/knewinvestmentwizard.cpp:111
+msgid "Total for all shares"
+msgstr "Total de todas as participacións"
+
+#: dialogs/knewinvestmentwizard.cpp:129
+msgid "This wizard allows you to modify the selected investment."
+msgstr "Este asistente permítelle modificar o investimento escollido."
+
+#: dialogs/knewinvestmentwizard.cpp:132
+msgid "This wizard allows you to modify the selected security."
+msgstr "Este asistente permítelle modificar o valor bursátil escollido."
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid ""
+"The selected symbol is already on file. Do you want to reuse the existing "
+"security?"
+msgstr ""
+"O símbolo escollido xa está no ficheiro. Desexa reutilizar o valor existente?"
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid "Security found"
+msgstr "Achouse o valor"
+
+#: dialogs/knewinvestmentwizard.cpp:309
+msgid "Unable to create all objects for the investment"
+msgstr "Non foi posíbel criar todos os obxectos para o investimento"
+
+#: dialogs/keditequityentrydlg.cpp:78
+msgid "Change the price information of the selected entry."
+msgstr "Cambia o prezo da entrada escollida."
+
+#: dialogs/kaccountselectdlg.cpp:64 widgets/kmymoneybriefschedule.cpp:59
+msgid "&Skip"
+msgstr "&Saltar"
+
+#: dialogs/kaccountselectdlg.cpp:66 widgets/kmymoneybriefschedule.cpp:61
+msgid "Skip this transaction"
+msgstr "Circunvalar este asento"
+
+#: dialogs/kaccountselectdlg.cpp:67
+msgid ""
+"Use this to skip importing this transaction and proceed with the next one."
+msgstr "Use isto para evitar importar este asento e continuar co seguinte."
+
+#: dialogs/kaccountselectdlg.cpp:72
+msgid "Create a new account/category"
+msgstr "Criar unha nova conta/categoría"
+
+#: dialogs/kaccountselectdlg.cpp:73
+msgid "Use this to add a new account/category to the file"
+msgstr "Use isto para engadir unha nova conta/categoría no ficheiro"
+
+#: dialogs/kaccountselectdlg.cpp:77
+msgid "&Abort"
+msgstr "&Abortar"
+
+#: dialogs/kaccountselectdlg.cpp:79
+msgid "Abort the import operation and dismiss all changes"
+msgstr "Abortar a operación de importación e anular os cambios"
+
+#: dialogs/kaccountselectdlg.cpp:80
+msgid ""
+"Use this to abort the import. Your financial data will be in the state "
+"before you started the QIF import."
+msgstr ""
+"Use isto para abortar a importación. Os seus datos financeiros estarán no "
+"estado anterior á importación do QIF."
+
+#: dialogs/knewaccountdlg.cpp:110
+msgid "Is a sub account"
+msgstr "É unha subconta"
+
+#: dialogs/knewaccountdlg.cpp:184
+msgid "VAT account"
+msgstr "Conta de IVE"
+
+#: dialogs/knewaccountdlg.cpp:474
+msgid ""
+"You have not specified a name.\n"
+"Please fill in this field."
+msgstr ""
+"Non especificou un nome.\n"
+"Por favor, cumprimente o campo."
+
+#: dialogs/knewaccountdlg.cpp:482
+msgid "Please select a parent account."
+msgstr "Por favor, escolla unha conta nai."
+
+#: dialogs/knewaccountdlg.cpp:489 dialogs/knewaccountdlg.cpp:1029
+msgid "<No Institution>"
+msgstr "<Sen organización>"
+
+#: dialogs/knewaccountdlg.cpp:552
+msgid ""
+"An account named <b>%1</b> already exists. You cannot create a second "
+"account with the same name."
+msgstr ""
+"Xa existe unha conta chamada <b>%1</b>. Non pode criar outra co mesmo nome."
+
+#: dialogs/knewaccountdlg.cpp:567
+msgid ""
+"A category named <b>%1</b> already exists. You cannot create a second "
+"category with the same name."
+msgstr ""
+"Xa existe unha categoría chamada <b>%1</b>. Non pode criar outra co mesmo "
+"nome."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid ""
+"You have selected to suppress the display of unused categories in the "
+"KMyMoney configuration dialog. The category you just created will therefore "
+"only be shown if it is used. Otherwise, it will be hidden in the accounts/"
+"categories view."
+msgstr ""
+"Escolleu non mostrar as categorías non utilizadas no diálogo de "
+"configuración de KMyMoney. Portanto, a categoría que acaba de criar só se "
+"mostrará se é utilizada. Caso contrario, estará agochada na vista de contas/"
+"categorías."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid "Hidden categories"
+msgstr "Categorías agochadas"
+
+#: dialogs/knewaccountdlg.cpp:927 dialogs/knewaccountdlg.cpp:979
+#, c-format
+msgid "Is a sub account of %1"
+msgstr "É unha subconta de %1"
+
+#: dialogs/knewaccountdlg.cpp:1082
+msgid "Cannot add institution"
+msgstr "Non foi posíbel engadir a organización"
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid ""
+"This dialog does not allow to create new payees. Please pick a payee from "
+"the list."
+msgstr ""
+"Este diálogo non permite criar novos beneficiarios. Escolla un na lista."
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid "Payee creation"
+msgstr "Criación de Beneficiario"
+
+#: dialogs/kimportdlg.cpp:69
+msgid "Use this to start the import operation"
+msgstr "Use isto para comezar a operación de importación"
+
+#: dialogs/kimportdlg.cpp:110
+msgid ""
+"%1|Import files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Ficheiros de importación \n"
+"%2|Todos os ficheiros (*.*)"
+
+#: dialogs/kimportdlg.cpp:111
+msgid "Import File..."
+msgstr "Importar un ficheiro..."
+
+#: dialogs/knewloanwizard.cpp:124
+msgid "Create a new category"
+msgstr "Cria unha nova categoría"
+
+#: dialogs/knewloanwizard.cpp:125
+msgid "Use this to open the new account editor"
+msgstr "Use isto para abrir o editor de novas contas"
+
+#: dialogs/knewloanwizard.cpp:129
+msgid "&Additional fees..."
+msgstr "Cargos &adicionais..."
+
+#: dialogs/knewloanwizard.cpp:131
+msgid "Enter additional fees"
+msgstr "Introduce cargos adicionais"
+
+#: dialogs/knewloanwizard.cpp:132
+msgid ""
+"Use this to add any additional fees other than principal and interest "
+"contained in your periodical payments."
+msgstr ""
+"Use isto para engadir cargos que non sexan principal ou xuros nos seus "
+"pagamentos periódicos."
+
+#: dialogs/knewloanwizard.cpp:139
+msgid ""
+"Use this to create a new account to which the initial payment should be made"
+msgstr ""
+"Use isto para criar unha nova conta á cal se deba facer o pagamento inicial"
+
+#: dialogs/knewloanwizard.cpp:208
+msgid "To whom do you make payments?"
+msgstr "A quen fai os pagamentos?"
+
+#: dialogs/knewloanwizard.cpp:209
+msgid "Payments to"
+msgstr "Pagar a"
+
+#: dialogs/knewloanwizard.cpp:214
+msgid "From whom do you expect payments?"
+msgstr "De quen espera os pagamentos?"
+
+#: dialogs/knewloanwizard.cpp:215
+msgid "Payments from"
+msgstr "Cobrar a"
+
+#: dialogs/knewloanwizard.cpp:233
+msgid "Please enter the date, the first payment for this loan was/is due."
+msgstr ""
+"Por favor introduza a data na que vence/venceu o primeiro pagamento deste "
+"empréstimo."
+
+#: dialogs/knewloanwizard.cpp:235
+msgid ""
+"Note: Consult the loan contract for details of the first due date. Keep in "
+"mind, that the first due date usually differs from the date the contract was "
+"signed"
+msgstr ""
+"Nota: Consulte o contrato do empréstimo para os detalles da primeira data de "
+"vencemento. Lembre que a primeira data de vencemento polo xeral non é a "
+"mesma que a data na que foi asinado o contrato"
+
+#: dialogs/knewloanwizard.cpp:240
+msgid ""
+"Please enter the original loan amount in the field below or leave it empty "
+"to be calculated."
+msgstr ""
+"Por favor introduza a cantidade orixinal do empréstimo no campo de abaixo ou "
+"déixeo valeiro para ser calculado."
+
+#: dialogs/knewloanwizard.cpp:248
+msgid ""
+"Please enter the date, the first payment for this loan was/is due this year."
+msgstr ""
+"Por favor introduza a data en que vence/venceu o primeiro pagamento deste "
+"ano."
+
+#: dialogs/knewloanwizard.cpp:250
+msgid ""
+"Note: You can easily figure out the date of the first payment if you consult "
+"the last statement of last year."
+msgstr ""
+"Nota: Pode averiguar con facilidade a data do primeiro pagamento se consulta "
+"o derradeiro extracto bancario do ano anterior."
+
+#: dialogs/knewloanwizard.cpp:254
+msgid ""
+"Please enter the remaining loan amount of last years final statement in the "
+"field below. You should not leave this field empty."
+msgstr ""
+"Por favor introduza a cantidade que tras o último pagamento do ano pasado "
+"faltaba por devolver. Non debería deixar ese campo en branco."
+
+#: dialogs/knewloanwizard.cpp:311 dialogs/knewloanwizard.cpp:326
+#: dialogs/knewloanwizard.cpp:341 dialogs/knewloanwizard.cpp:357
+#: dialogs/knewloanwizard.cpp:373
+msgid "calculate"
+msgstr "calcular"
+
+#: dialogs/knewloanwizard.cpp:417
+msgid "borrowed"
+msgstr "prestado"
+
+#: dialogs/knewloanwizard.cpp:419
+msgid "lend"
+msgstr "prestar"
+
+#: dialogs/knewloanwizard.cpp:423
+msgid "not assigned"
+msgstr "non asinado"
+
+#: dialogs/knewloanwizard.cpp:430
+msgid "on reception"
+msgstr "ao receber"
+
+#: dialogs/knewloanwizard.cpp:432
+msgid "on due date"
+msgstr "na data de vencemento"
+
+#: dialogs/knewloanwizard.cpp:471
+msgid ""
+"The loan wizard is unable to calculate two different values for your loan at "
+"the same time. Please enter a value for the %1 on this page or backup to the "
+"page where the current value to be calculated is defined and fill in a "
+"value."
+msgstr ""
+"O asistente de empréstimos non é capaz de calcular dous valores diferentes "
+"para o seu empréstimo ao mesmo tempo. Por favor introduza un valor para o %1 "
+"nesta páxina ou volte á páxina onde se define o valor actual a ser calculado "
+"e introduza un valor."
+
+#: dialogs/knewloanwizard.cpp:500
+msgid ""
+"You selected, that payments have already been made towards this loan. This "
+"requires you to enter the loan amount exactly as found on your last "
+"statement."
+msgstr ""
+"Escolleu que xa foron feitos pagamentos deste empréstimo. Isto requere que "
+"introduza a cantidade prestada tal como ven no seu último extracto bancario."
+
+#: dialogs/knewloanwizard.cpp:513
+msgid "interest rate"
+msgstr "taxa de xuro"
+
+#: dialogs/knewloanwizard.cpp:522
+msgid "term"
+msgstr "remate"
+
+#: dialogs/knewloanwizard.cpp:532
+msgid "principal and interest"
+msgstr "principal e xuros"
+
+#: dialogs/knewloanwizard.cpp:743
+#, c-format
+msgid ""
+"The number of payments has been decremented and the final payment has been "
+"modified to %1."
+msgstr ""
+"O número de pagamentos foi diminuido e o pagamento final foi modificado a %1."
+
+#: dialogs/knewloanwizard.cpp:751 dialogs/knewloanwizard.cpp:771
+#, c-format
+msgid "The final payment has been modified to %1."
+msgstr "O pagamento final foi modificado a %1."
+
+#: dialogs/knewloanwizard.cpp:802
+msgid "KMyMoney has calculated a final payment of %1 for this loan."
+msgstr "KMyMoney calculou un pagamento final de %1 para este empréstimo."
+
+#: dialogs/knewloanwizard.cpp:817
+msgid ""
+"You have entered mis-matching information. Please backup to the appropriate "
+"page and update your figures or leave one value empty to let KMyMoney "
+"calculate it for you"
+msgstr ""
+"Introduciu información que non casa. Por favor volte á páxina adecuada e "
+"actualice os seus dados ou deixe un valor valeiro para permitirlle a "
+"KMyMoney calculalo para vocé"
+
+#: dialogs/kfindtransactiondlg.cpp:230
+msgid ""
+"Warning: Filtering by Category will exclude all transfers from the results."
+msgstr ""
+"Aviso: Se filtra segundo a Categoría excluirá do resultado todas as "
+"transferencias."
+
+#: dialogs/kfindtransactiondlg.cpp:239
+msgid "(None)"
+msgstr "(Nada)"
+
+#: dialogs/kfindtransactiondlg.cpp:241
+msgid "Current selections: "
+msgstr "Seleccións actuais: "
+
+#: dialogs/kfindtransactiondlg.cpp:716
+msgid "Found %1 matching transactions (D %2 / P %3 = %4)"
+msgstr "Atopáronse %1 asentos que se corresponden (D %2 / P %3 = %4)"
+
+#: dialogs/kfindtransactiondlg.cpp:719
+msgid "Found %1 matching transactions"
+msgstr "Atopáronse %1 asentos que se corresponden"
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "The institution name field is empty. Please enter the name."
+msgstr "Non hai nome de organización. Por favor, indique un."
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "Adding New Institution"
+msgstr "Engadindo unha nova entidade"
+
+#: dialogs/kcsvprogressdlg.cpp:69
+msgid "C&lose"
+msgstr "Pec&har"
+
+#: dialogs/kcsvprogressdlg.cpp:247
+msgid " of "
+msgstr " de"
+
+#: widgets/kmymoneypriceview.cpp:126
+msgid "Commodity"
+msgstr "Mercadoría"
+
+#: widgets/kmymoneypriceview.cpp:130
+msgid "Source"
+msgstr "Orixe"
+
+#: widgets/kmymoneypriceview.cpp:143
+msgid "Price Options"
+msgstr "Opcións de prezo"
+
+#: widgets/kmymoneypriceview.cpp:153
+msgid "Online Price Update..."
+msgstr "Actualizar o prezo Online..."
+
+#: widgets/kmymoneycombo.cpp:472 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+msgid "From"
+msgstr "De"
+
+#: widgets/transaction.cpp:668
+msgid "Transaction is missing a category assignment."
+msgstr "O asento non ten asinada nengunha categoría."
+
+#: widgets/transaction.cpp:671
+msgid "The transaction has a missing assignment of <b>%1</b>."
+msgstr "A este asento falta por asinarlle <b>%1</b>."
+
+#: widgets/transaction.cpp:874
+msgid "Sell"
+msgstr "Vender"
+
+#: widgets/transaction.cpp:876
+msgid "Buy"
+msgstr "Mercar"
+
+#: widgets/kmymoneycombo.cpp:520 widgets/transaction.cpp:879
+#: widgets/transaction.cpp:1447
+msgid "Dividend"
+msgstr "Dividendo"
+
+#: widgets/kmymoneycombo.cpp:518 widgets/transaction.cpp:881
+#: widgets/transaction.cpp:1453
+msgid "Yield"
+msgstr "Rendimento"
+
+#: widgets/transaction.cpp:886 widgets/transaction.cpp:1473
+msgid "Activity"
+msgstr "Actividade"
+
+#: widgets/transaction.cpp:887
+msgid "Investment transaction"
+msgstr "Asento de investimento"
+
+#: widgets/transaction.cpp:1021 widgets/transaction.cpp:1114
+#: widgets/transaction.cpp:1165
+msgid "*** UNASSIGNED ***"
+msgstr "*** SEN ASINAR ***"
+
+#: widgets/kmymoneycombo.cpp:517 widgets/transaction.cpp:1435
+msgid "Add shares"
+msgstr "Engadir participacións"
+
+#: widgets/kmymoneycombo.cpp:516 widgets/transaction.cpp:1438
+msgid "Remove shares"
+msgstr "Eliminar participacións"
+
+#: widgets/kmymoneycombo.cpp:522 widgets/transaction.cpp:1441
+msgid "Buy shares"
+msgstr "Mercar participacións"
+
+#: widgets/kmymoneycombo.cpp:521 widgets/transaction.cpp:1444
+msgid "Sell shares"
+msgstr "Vender participacións"
+
+#: widgets/transaction.cpp:1450
+msgid "Reinvest Dividend"
+msgstr "Reinvestir os dividendos"
+
+#: widgets/kmymoneycombo.cpp:515 widgets/transaction.cpp:1456
+msgid "Split shares"
+msgstr "Repartir as participacións"
+
+#: widgets/transaction.cpp:1515
+msgid "Ratio"
+msgstr "Taxa"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:241
+msgid "%1 Bills."
+msgstr "%1 recibos."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:257
+msgid "%1 Deposits."
+msgstr "%1 imposizóns."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:273
+msgid "%1 Transfers."
+msgstr "%1 transferencias."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:355
+msgid ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+msgstr "------------------------------"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:57
+#: widgets/kmymoneyaccounttreeforecast.cpp:84
+msgid "Current"
+msgstr "Actual"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:72
+#: widgets/kmymoneyaccounttreeforecast.cpp:93
+msgid "Total variation"
+msgstr "Variación total"
+
+#: widgets/stdtransactionmatched.cpp:130
+msgid ""
+"KMyMoney has matched a downloaded transaction with a manually entered one "
+"(result above)"
+msgstr ""
+"KMyMoney emparellou un asento obtido cun asentado á mao (o resultado está en "
+"riba)"
+
+#: widgets/stdtransactionmatched.cpp:138
+msgid "Bank entry:"
+msgstr "Asento do banco:"
+
+#: widgets/stdtransactionmatched.cpp:166
+msgid "Your entry:"
+msgstr "O seu asento:"
+
+#: widgets/kbudgetvalues.cpp:187
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a monthly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+"Introduciu orzas usando unha base diferente que dan unha orza mensal de <b>%"
+"1</b>. Debe usarse este valor para preencher a orza mensal?"
+
+#: widgets/kbudgetvalues.cpp:187 widgets/kbudgetvalues.cpp:206
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"_: Auto assignment (caption)\n"
+"Auto assignment"
+msgstr "Asinación automática"
+
+#: widgets/kbudgetvalues.cpp:206
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a yearly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+"Introduciu orzas usando unha base diferente que dan unha orza anual de <b>%"
+"1</b>. Debe usarse este valor para preencher a orza anual?"
+
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"You have entered budget values using a different base which would result in "
+"an individual monthly budget of <b>%1</b>. Should this value be used to fill "
+"the monthly budgets?"
+msgstr ""
+"Introduciu orzas usando unha base diferente que dan unha orza por mes de <b>%"
+"1</b>. Debe usarse este valor para preencher as orzas de cada mes?"
+
+#: widgets/kmymoneybriefschedule.cpp:62
+msgid "Use this button to skip this transaction"
+msgstr "Use este botón para saltar esta transacción"
+
+#: widgets/kmymoneybriefschedule.cpp:67
+msgid "Record this transaction into the register"
+msgstr "Gravar este asento no rexisto"
+
+#: widgets/kmymoneybriefschedule.cpp:68
+msgid "Use this button to record this transaction"
+msgstr "Use este botón para gravar este asento"
+
+#: widgets/kmymoneybriefschedule.cpp:96
+msgid "%1 of %2"
+msgstr "%1 de %2"
+
+#: widgets/kmymoneybriefschedule.cpp:109
+msgid "Payment on %1 for %2 with %3 transactions remaining occuring %4."
+msgstr "Pagamento en %1 para %2 con %3 asentos acontecendo %4."
+
+#: widgets/kmymoneybriefschedule.cpp:115
+msgid "Payment on %1 for %2 occuring %4."
+msgstr "Pagamento en %1 para %2 acontecendo %4."
+
+#: widgets/kmymoneybriefschedule.cpp:136
+msgid "%1 days overdue (%2 occurences)."
+msgstr "%1 días de retraso (%2 ocorrencias)."
+
+#: widgets/register.cpp:55
+msgid "Post date"
+msgstr "Data da operación"
+
+#: widgets/register.cpp:56
+msgid "Date entered"
+msgstr "Data de escriturazón"
+
+#: widgets/register.cpp:60
+msgid "Entry order"
+msgstr "Orden de entrada"
+
+#: widgets/register.cpp:63
+msgid "Reconcile state"
+msgstr "Estado de conciliación"
+
+#: widgets/register.cpp:440
+msgid ""
+"_: Deposits onto account\n"
+"Deposits"
+msgstr "Depósitos"
+
+#: widgets/register.cpp:442
+msgid ""
+"_: Payments towards credit card\n"
+"Payments"
+msgstr "Pagamentos"
+
+#: widgets/register.cpp:446
+msgid ""
+"_: Payments made from account\n"
+"Payments"
+msgstr "Pagamentos"
+
+#: widgets/register.cpp:448
+msgid ""
+"_: Payments made with credit card\n"
+"Charges"
+msgstr "Pagamentos"
+
+#: widgets/register.cpp:736
+msgid ""
+"_: Payment made from account\n"
+"Payment"
+msgstr "Pagamento"
+
+#: widgets/register.cpp:737
+msgid ""
+"_: Deposit into account\n"
+"Deposit"
+msgstr "Depósito"
+
+#: widgets/register.cpp:813
+msgid ""
+"_: Payment made with credit card\n"
+"Charge"
+msgstr "Pagamento"
+
+#: widgets/register.cpp:814
+msgid ""
+"_: Payment towards credit card\n"
+"Payment"
+msgstr "Pagamento"
+
+#: widgets/register.cpp:818 widgets/register.cpp:824
+msgid ""
+"_: Decrease of asset/liability value\n"
+"Decrease"
+msgstr "Diminuir"
+
+#: widgets/register.cpp:819 widgets/register.cpp:823
+msgid ""
+"_: Increase of asset/liability value\n"
+"Increase"
+msgstr "Aumentar"
+
+#: widgets/register.cpp:2280
+msgid "Prior transactions possibly filtered"
+msgstr "O anterior asento posibelmente teña sido filtrado"
+
+#: widgets/register.cpp:2284
+msgid "Last reconciliation"
+msgstr "Última conciliación"
+
+#: widgets/register.cpp:2291
+#, c-format
+msgid "Online Statement Balance: %1"
+msgstr "Saldo do extracto online: %1"
+
+#: widgets/register.cpp:2295
+msgid "This year"
+msgstr "Este ano"
+
+#: widgets/kmymoneycombo.cpp:674 widgets/register.cpp:2296
+msgid "Last month"
+msgstr "O mes pasado"
+
+#: widgets/register.cpp:2297
+msgid "This month"
+msgstr "Este mes"
+
+#: widgets/register.cpp:2298
+msgid "Last week"
+msgstr "A semana pasada"
+
+#: widgets/register.cpp:2299
+msgid "This week"
+msgstr "Esta semana"
+
+#: widgets/register.cpp:2300
+msgid "Yesterday"
+msgstr "Onte"
+
+#: widgets/kmymoneycombo.cpp:666 widgets/register.cpp:2301
+msgid "Today"
+msgstr "Hoxe"
+
+#: widgets/register.cpp:2302 widgets/register.cpp:2307
+msgid "Future transactions"
+msgstr "Asentos futuros"
+
+#: widgets/register.cpp:2303
+msgid "Next week"
+msgstr "Seguinte semana"
+
+#: widgets/kmymoneycalendar.cpp:131 widgets/register.cpp:2304
+msgid "Next month"
+msgstr "O mes que ven"
+
+#: widgets/kmymoneycombo.cpp:670 widgets/register.cpp:2315
+msgid "Current fiscal year"
+msgstr "Este ano fiscal"
+
+#: widgets/register.cpp:2316
+msgid "Previous fiscal year"
+msgstr "O ano fiscal pasado"
+
+#: widgets/register.cpp:2317
+msgid "Next fiscal year"
+msgstr "Seguinte ano fiscal"
+
+#: widgets/register.cpp:2349
+msgid ""
+"_: Unknown payee\n"
+"Unknown"
+msgstr "Descoñecido"
+
+#: widgets/register.cpp:2368
+msgid ""
+"_: Unknown category\n"
+"Unknown"
+msgstr "Descoñecida"
+
+#: widgets/register.cpp:2387
+msgid ""
+"_: Unknown security\n"
+"Unknown"
+msgstr "Descoñecido"
+
+#: widgets/klistviewsearchline.cpp:249
+msgid "Search Columns"
+msgstr "Procurar nas colunas"
+
+#: widgets/klistviewsearchline.cpp:251
+msgid "All Visible Columns"
+msgstr "Todas as colunas visíbeis"
+
+#: widgets/klistviewsearchline.cpp:266
+msgid ""
+"_: Column number %1\n"
+"Column No. %1"
+msgstr "Coluna nº %1"
+
+#: widgets/klistviewsearchline.cpp:461 widgets/registersearchline.cpp:286
+msgid "S&earch:"
+msgstr "&Procurar:"
+
+#: widgets/kmymoneyaccountselector.cpp:110
+#: widgets/kmymoneyaccountselector.cpp:371
+msgid "Income categories"
+msgstr "Categorías de ingresos"
+
+#: widgets/kmymoneyaccountselector.cpp:349
+#: widgets/kmymoneyaccountselector.cpp:350
+msgid "Favorites"
+msgstr "Favoritos"
+
+#: widgets/kmymoneyaccountselector.cpp:357
+msgid "Asset accounts"
+msgstr "Contas de activos"
+
+#: widgets/kmymoneyaccountselector.cpp:364
+msgid "Liability accounts"
+msgstr "Contas de pasivos"
+
+#: widgets/kmymoneyaccountselector.cpp:381
+msgid "Expense categories"
+msgstr "Categorías de gastos"
+
+#: widgets/kmymoneyaccountselector.cpp:391
+msgid "Equity accounts"
+msgstr "Contas de patrimonio"
+
+#: widgets/kmymoneyaccounttreebase.cpp:120
+msgid "Total Balance"
+msgstr "Saldo total"
+
+#: widgets/kmymoneyaccounttreebase.cpp:124
+msgid "Total Value"
+msgstr "Valor total"
+
+#: widgets/registersearchline.cpp:75
+msgid ""
+"_: label for status combo\n"
+"Stat&us"
+msgstr "&Estado"
+
+#: widgets/registersearchline.cpp:79
+msgid "Any status"
+msgstr "Calquer estado"
+
+#: widgets/registersearchline.cpp:80
+msgid "Imported"
+msgstr "Importado"
+
+#: widgets/registersearchline.cpp:81
+msgid "Matched"
+msgstr "Emparellado"
+
+#: widgets/registersearchline.cpp:82
+msgid "Erroneous"
+msgstr "Erróneo"
+
+#: widgets/registersearchline.cpp:83
+msgid "Not marked"
+msgstr "Non marcada"
+
+#: widgets/kmymoneyaccounttree.cpp:54
+msgid ""
+"_: Column heading for category in tax report\n"
+"Tax"
+msgstr "Impostos"
+
+#: widgets/kmymoneyaccounttree.cpp:58
+msgid ""
+"_: Column heading for VAT category\n"
+"VAT"
+msgstr "IVE"
+
+#: widgets/kmymoneywizard.cpp:101
+msgid "Continue with next page"
+msgstr "Continuar coa seguinte páxina"
+
+#: widgets/kmymoneywizard.cpp:103
+msgid "Finish wizard"
+msgstr "Rematar o asistente"
+
+#: widgets/kmymoneywizard.cpp:121
+msgid "&Back"
+msgstr "&Anterior"
+
+#: widgets/kmymoneywizard.cpp:122
+msgid "&Next"
+msgstr "&Seguinte"
+
+#: widgets/kmymoneywizard.cpp:123
+msgid "&Finish"
+msgstr "&Finalizar"
+
+#: widgets/kmymoneywizard.cpp:274
+msgid "Step %1 of %2"
+msgstr "Paso %1 de %2"
+
+#: widgets/kmymoneydateinput.cpp:235
+msgid ""
+"_: Enter todays date into date input widget\n"
+"T"
+msgstr "H"
+
+#: widgets/transactionform.cpp:302
+msgid "&Deposit"
+msgstr "&Imposizón"
+
+#: widgets/transactionform.cpp:304 widgets/transactionform.cpp:313
+#: widgets/transactionform.cpp:323 widgets/transactionform.cpp:333
+msgid "&Transfer"
+msgstr "&Transferencia"
+
+#: widgets/transactionform.cpp:306
+msgid "&Withdrawal"
+msgstr "&Reintegro"
+
+#: widgets/transactionform.cpp:311
+msgid "&Payment"
+msgstr "&Pagamento"
+
+#: widgets/transactionform.cpp:315
+msgid "&Charge"
+msgstr "&Cargar"
+
+#: widgets/transactionform.cpp:321 widgets/transactionform.cpp:335
+msgid "&Decrease"
+msgstr "&Diminuir"
+
+#: widgets/transactionform.cpp:325 widgets/transactionform.cpp:331
+msgid "&Increase"
+msgstr "&Aumentar"
+
+#: widgets/kmymoneyscheduledcalendar.cpp:42
+msgid "Select Schedules"
+msgstr "Escoller as planificacións"
+
+#: widgets/kmymoneycalendar.cpp:108
+msgid "Select Style"
+msgstr "Escoller o estilo"
+
+#: widgets/kmymoneycalendar.cpp:128
+msgid "Choose Style"
+msgstr "Escoller o estilo"
+
+#: widgets/kmymoneycalendar.cpp:129
+msgid "Next year"
+msgstr "O ano que ven"
+
+#: widgets/kmymoneycalendar.cpp:130
+msgid "Previous year"
+msgstr "O ano pasado"
+
+#: widgets/kmymoneycalendar.cpp:132
+msgid "Previous month"
+msgstr "O mes pasado"
+
+#: widgets/kmymoneycalendar.cpp:133
+msgid "Select a week"
+msgstr "Escoller una semana"
+
+#: widgets/kmymoneycalendar.cpp:134
+msgid "Select a month"
+msgstr "Escoller un mes"
+
+#: widgets/kmymoneycalendar.cpp:135
+msgid "Select a year"
+msgstr "Escoller un ano"
+
+#: widgets/kmymoneycalendar.cpp:249
+msgid "Week XX"
+msgstr "Semana XX"
+
+#: widgets/kmymoneycalendar.cpp:264 widgets/kmymoneycalendar.cpp:300
+#, c-format
+msgid "Week %1"
+msgstr "Semana %1"
+
+#: widgets/rc.cpp:1
+msgid "Account Types"
+msgstr "Tipos de conta"
+
+#: widgets/rc.cpp:3
+msgid "Detailed description"
+msgstr "Descripción detallada"
+
+#: widgets/rc.cpp:18
+msgid "Period"
+msgstr "Período"
+
+#: widgets/rc.cpp:21
+msgid "Individual"
+msgstr "Individual"
+
+#: widgets/rc.cpp:23
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Acces to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>Recovery encryption</i> group is only accessible, if the necessary "
+"key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is "
+"found."
+msgstr ""
+"Esta páxina permítelle axustar os parámetros para gardar os seus dados de "
+"<b>KMyMoney</b> cifrados mediante <b>GPG</b>.<p>\n"
+"Non se permite aceder á configuración se non se atopa <b>GPG</b> no seu "
+"sistema. Neste caso, asegúrese de que <b>GPG</b> traballa correctamente para "
+"o usuario actual.<p>\n"
+"O grupo <i>Recuperación de cifraxe</i> só estará acesíbel de atoparse a "
+"chave para <b>kmymoney-recover@users.sourceforge.net</b> con id 0x8AFDDC8E."
+
+#: widgets/rc.cpp:26
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading <i>0x</i>."
+msgstr ""
+"Introduza a id da chave que desexa usar para cifrar os dados. Isto pode ser "
+"ou un correo electrónico ou o identificador hexadecimal do id. Neste caso "
+"non esqueza o <i>0x</i> inicial."
+
+#: widgets/rc.cpp:27
+msgid "User ID"
+msgstr "ID do usuario"
+
+#: widgets/rc.cpp:29
+msgid "Recovery encryption"
+msgstr "Recuperación do cifrado"
+
+#: widgets/rc.cpp:30
+msgid "Also encrypt with kmymoney-recover key"
+msgstr "Cifrar tamén coa chave kmymoney-recover"
+
+#: widgets/rc.cpp:32
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out."
+msgstr ""
+"Pode cifrar os seus dados tamén coa chave de recuperación de KMyMoney. Só os "
+"desenvolventes do núcleo de KMyMoney posúen a chave privada imprescindíbel "
+"para descifrar tais dados.<p>\n"
+"\n"
+"Este mecanismo serve por se perde a súa chave e non pode aceder aos dados. "
+"Sinalando esta opción, os desenvolventes de KMyMoney poderán descifrar os "
+"dados e devolverllos nun formato lexíbel. Advírteselle de que terá que "
+"responder unhas perguntas detalladas acerca do contido dos seus dados antes "
+"de poder envialos."
+
+#: widgets/rc.cpp:51
+msgid "PriceInfo"
+msgstr "PriceInfo"
+
+#: widgets/rc.cpp:52
+msgid "Report Tab"
+msgstr "Páxina de informe"
+
+#: widgets/rc.cpp:53
+msgid "<p>On this tab, you set the basic properties of this report.</p>"
+msgstr "<p>Nesta páxina, configura as propriedades básicas deste informe.</p>"
+
+#: widgets/rc.cpp:54
+msgid "Report Name"
+msgstr "Nome do informe"
+
+#: widgets/rc.cpp:55
+msgid "<p>Choose a name for this report.</p>"
+msgstr "<p>Escolla un nome para este informe.</p>"
+
+#: widgets/rc.cpp:57
+msgid "<p>Enter a comment to help you remember the details of this report.</p>"
+msgstr ""
+"<p>Introduza un comentario que lle axude a lembrar os detalles deste informe."
+"</p>"
+
+#: widgets/rc.cpp:58
+msgid "Convert values to base currency"
+msgstr "Converter os valores á divisa base"
+
+#: widgets/rc.cpp:59
+msgid ""
+"_: Convert 'em!!\n"
+"<p>Select this option to convert all values in the report to your base "
+"currency.</p><p>Leave it unchecked if you'd like to see values in their "
+"original currency.</p><p>If currencies are not converted, then subtotals "
+"will not be shown.</p>"
+msgstr ""
+"<p>Escolla esta opción para converter todos os valores no informe á súa "
+"divisa base.</p><p>Déixea sen sinalar se desexa ver os valores na súa divisa "
+"orixina.</p> <p>Se non converte as divisas, os subtotais non serán mostrados."
+"</p>"
+
+#: widgets/rc.cpp:60
+msgid "Mark as a favorite report"
+msgstr "Marcar como informe preferido"
+
+#: widgets/rc.cpp:61
+msgid ""
+"<p>Select this option to notate this report as one of your favorites.</"
+"p><p>All your favorite reports are grouped in one place on the report list "
+"for easy access.</p>"
+msgstr ""
+"<p>Escolla esta opción para indicar que este informe é un dos seus "
+"predilectos.</p><p>Os seus informes favoritos son agrupados no listado de "
+"informes para aceder facilmente a eles.</p>"
+
+#: widgets/rc.cpp:62 widgets/rc.cpp:88
+msgid "Rows/Columns Tab"
+msgstr "Páxina de Filas/Colunas"
+
+#: widgets/rc.cpp:63 widgets/rc.cpp:89
+msgid ""
+"<p>On this tab, you configure how you'd like the rows and columns to be "
+"selected and organized.</p>"
+msgstr ""
+"<p>Nesta páxina, pode configurar como desexa escoller e organizar as filas e "
+"colunas.</p>"
+
+#: widgets/rc.cpp:69 widgets/rc.cpp:81
+msgid ""
+"<p>Choose what kind of accounts to display as the rows of this report.</p>"
+msgstr "<p>Escolla que clase de contas mostrar como filas deste informe.</p>"
+
+#: widgets/rc.cpp:71
+msgid "Columns"
+msgstr "Colunas"
+
+#: widgets/rc.cpp:75
+msgid "Bi-Monthly"
+msgstr "Bimensalmente"
+
+#: widgets/rc.cpp:78
+msgid "<p>Choose how large of a time period each column should encompass</p>"
+msgstr "<p>Escolla que periodo de tempo debe abarcar cada coluna</p>"
+
+#: widgets/rc.cpp:79
+msgid "Income & Expenses"
+msgstr "Ingresos e Gastos"
+
+#: widgets/rc.cpp:80
+msgid "Assets & Liabilities"
+msgstr "Activos e Pasivos"
+
+#: widgets/rc.cpp:82
+msgid "Rows"
+msgstr "Filas"
+
+#: widgets/rc.cpp:83
+msgid "Show totals column"
+msgstr "Mostrar a coluna dos totais"
+
+#: widgets/rc.cpp:84
+msgid "Average days"
+msgstr "Días promedio"
+
+#: widgets/rc.cpp:85
+msgid "Include scheduled transactions"
+msgstr "Incluír os asentos planificados"
+
+#: widgets/rc.cpp:86
+msgid "Include transfers"
+msgstr "Incluír as transferencias"
+
+#: widgets/rc.cpp:87
+msgid "Include unused accounts/categories"
+msgstr "Incluir as contas/categorías non empregadas"
+
+#: widgets/rc.cpp:90
+msgid "Organize by:"
+msgstr "Organizar por:"
+
+#: widgets/rc.cpp:92
+msgid "Top Categories"
+msgstr "Categorías nai"
+
+#: widgets/rc.cpp:95
+msgid "Top Accounts"
+msgstr "Contas nai"
+
+#: widgets/rc.cpp:98
+msgid "<p>Choose how to group the transactions in this report</p>"
+msgstr "<p>Escolla como agrupar os asentos neste informe</p>"
+
+#: widgets/rc.cpp:99
+msgid "Show Columns"
+msgstr "Mostrar colunas"
+
+#: widgets/rc.cpp:100
+msgid ""
+"<p>Choose which columns should be shown in the report.</p><p>The date and "
+"transaction amount are always shown.</p>"
+msgstr ""
+"<p>Escoller que colunas deben ser mostradas no informe.</p><p>A data e "
+"importe do asento sempre son mostradas.</p>"
+
+#: widgets/rc.cpp:102
+msgid "<p>Select this option to show the Memo column</p>"
+msgstr "<p>Escolla esta opción para mostrar a coluna Conceito</p>"
+
+#: widgets/rc.cpp:104
+msgid "<p>Select this option to show the Shares column for investments</p>"
+msgstr ""
+"<p>Escolla esta opción para mostrar a coluna Participacións nos "
+"investimentos</p>"
+
+#: widgets/rc.cpp:106
+msgid "<p>Select this option to show the Price column for investments</p>"
+msgstr ""
+"<p>Escolla esta opción para mostrar a coluna Prezo nos investimentos</p> "
+
+#: widgets/rc.cpp:108
+msgid "<p>Select this option to show the Reconciled column</p>"
+msgstr "<p>Escolla esta opción para mostrar a coluna Conciliado</p>"
+
+#: widgets/rc.cpp:110
+msgid "<p>Select this option to show the Account column</p>"
+msgstr "<p>Escolla esta opción para mostrar a coluna Conta</p>"
+
+#: widgets/rc.cpp:112
+msgid "<p>Select this option to show the Number column</p>"
+msgstr "<p>Escolla esta opción para mostrar a coluna Número</p>"
+
+#: widgets/rc.cpp:114
+msgid "<p>Select this option to show the Payee column</p>"
+msgstr "<p>Escolla esta opción para mostrar a coluna Beneficiario</p>"
+
+#: widgets/rc.cpp:116
+msgid "<p>Select this option to show the Category column</p>"
+msgstr "<p>Escolla esta opción para mostrar a coluna Categoría</p>"
+
+#: widgets/rc.cpp:118
+msgid "<p>Select this option to show the Action column</p>"
+msgstr "<p>Escolla esta opción para mostrar a coluna Acción</p>"
+
+#: widgets/rc.cpp:120
+msgid "<p>Select this option to show the Running balance column</p>"
+msgstr "<p>Escolla esta opción para mostrar a coluna de Saldo</p>"
+
+#: widgets/rc.cpp:121
+msgid "Include only Loan accounts"
+msgstr "Incluir só as contas de Empréstimo"
+
+#: widgets/rc.cpp:122
+msgid "Include only Investment accounts"
+msgstr "Incluir só as contas de Investimento"
+
+#: widgets/rc.cpp:123 widgets/rc.cpp:127
+msgid ""
+"<p>Check this box to include only those categories which have been marked to "
+"\"Include on Tax Reports\"</p>"
+msgstr ""
+"<p>Sinale esta opción para incluir só as categorías que fosen marcadas como "
+"«Incluir en informes de impostos»</p>"
+
+#: widgets/rc.cpp:124
+msgid "Hide Split Transaction Details"
+msgstr "Acochar os detalles das partidas dos asentos detallados"
+
+#: widgets/rc.cpp:125
+msgid ""
+"Do not display the individual transactions that make up a split transaction"
+msgstr ""
+"Non mostrar as transaccións individuais que conforman un asento con varias "
+"partidas"
+
+#: widgets/rc.cpp:126
+msgid "Include only Tax categories"
+msgstr "Incluir só as categorías de impostos"
+
+#: widgets/rc.cpp:128
+msgid "Chart Tab"
+msgstr "Páxina do Diagrama"
+
+#: widgets/rc.cpp:129
+msgid "<p>On this tab, you configure the chart drawn forthis report.</p>"
+msgstr "<p>Nesta páxina, pode configurar a gráfica deste informe.</p>"
+
+#: widgets/rc.cpp:130
+msgid "Chart Type"
+msgstr "Tipo de diagrama"
+
+#: widgets/rc.cpp:131
+msgid "<p>Select what form you would like the chart to be drawn as.</p>"
+msgstr "<p>Escolla o tipo de diagrama que desexe para este informe.</p>"
+
+#: widgets/rc.cpp:132
+msgid "Line"
+msgstr "Liñas"
+
+#: widgets/rc.cpp:133
+msgid "Bar"
+msgstr "Barras"
+
+#: widgets/rc.cpp:134
+msgid "Stacked Bar"
+msgstr "Barras apiladas"
+
+#: widgets/rc.cpp:135
+msgid "Pie"
+msgstr "Sectores"
+
+#: widgets/rc.cpp:136
+msgid "Ring"
+msgstr "Anel"
+
+#: widgets/rc.cpp:137
+msgid "Show grid lines"
+msgstr "Mostrar as liñas da grella"
+
+#: widgets/rc.cpp:138
+msgid ""
+"<p>Select this option to show horizontal and vertical grid lines on the "
+"chart.</p>"
+msgstr ""
+"<p>Escolla esta opción para mostrar liñas horizontais e verticais no "
+"diagrama.</p> "
+
+#: widgets/rc.cpp:139
+msgid "Draw values on chart"
+msgstr "Mostrar os valores no diagrama"
+
+#: widgets/rc.cpp:140
+msgid ""
+"<p>Select this option to draw the numeric values for data points next to "
+"their plot location.</p>"
+msgstr ""
+"<p>Escolla esta opción para mostrar os valores numéricos xunto aos puntos "
+"dos dados no diagrama.</p> "
+
+#: widgets/rc.cpp:141
+msgid "Show as chart by default"
+msgstr "Mostrar como diagrama por omisión"
+
+#: widgets/rc.cpp:142
+msgid ""
+"<p>Select this option to cause the report to be shown as a chart when you "
+"first open the report. Otherwise, it will come up as a text report.</p>"
+msgstr ""
+"<p>Escolla esta opción para facer que o informe sexa mostrado como un "
+"diagrama cando o abra. Caso contrario, mostrarase o texto do informe.</p>"
+
+#: widgets/rc.cpp:143
+msgid "Line width"
+msgstr "Largura da liña"
+
+#: widgets/rc.cpp:144
+msgid "<p>Select what width should be used to draw the line on the chart</p>"
+msgstr "<p>Escolla a largura coa que debuxar a liña no gráfico</p> "
+
+#: widgets/rc.cpp:145
+msgid "ReportControl"
+msgstr "ReportControl"
+
+#: widgets/rc.cpp:149
+msgid "Configure this report"
+msgstr "Configurar este informe"
+
+#: widgets/rc.cpp:151
+msgid "Create a new report based on this one"
+msgstr "Crea un novo informe baseado neste"
+
+#: widgets/rc.cpp:153
+msgid "Copy this report to the clipboard"
+msgstr "Copia este informe ao portarretallos"
+
+#: widgets/rc.cpp:155
+msgid "Export this report as an HTML or CSV file"
+msgstr "Exporta este informe en formato HTML ou CSV"
+
+#: widgets/rc.cpp:157
+msgid "Permanently delete this report"
+msgstr "Elimina permanentemente este informe"
+
+#: widgets/rc.cpp:159
+msgid "Close this window"
+msgstr "Pechar esta fiestra"
+
+#: widgets/rc.cpp:162
+msgid "n of n"
+msgstr "n de n"
+
+#: widgets/rc.cpp:166
+msgid "Account:"
+msgstr "Conta:"
+
+#: widgets/rc.cpp:168
+msgid "Enter..."
+msgstr "Asentar..."
+
+#: widgets/rc.cpp:171
+msgid "TransactionSortOptionDecl"
+msgstr "TransactionSortOptionDecl"
+
+#: widgets/rc.cpp:173
+msgid "Sort order"
+msgstr "Orden de clasificación"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Sunday\n"
+"Sun"
+msgstr "Dom"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Saturday\n"
+"Sat"
+msgstr "Sáb"
+
+#: widgets/kmymoneydatetbl.cpp:171 widgets/kmymoneydatetbl.cpp:178
+msgid "Week %1 for year %2."
+msgstr "Semana %1 do ano %2."
+
+#: widgets/kmymoneycombo.cpp:417
+msgid "ATM"
+msgstr "ATM"
+
+#: widgets/kmymoneycombo.cpp:418
+msgid "Withdrawal"
+msgstr "Reintegro"
+
+#: widgets/kmymoneycombo.cpp:421
+msgid "Cheque"
+msgstr "Cheque"
+
+#: widgets/kmymoneycombo.cpp:469
+msgid ""
+"_: Activity for expense categories\n"
+"Paid"
+msgstr "Pago"
+
+#: widgets/kmymoneycombo.cpp:470
+msgid ""
+"_: Activity for income categories\n"
+"Received"
+msgstr "Cobrado"
+
+#: widgets/kmymoneycombo.cpp:519
+msgid "Reinvest dividend"
+msgstr "Reinvestir os dividendos"
+
+#: widgets/kmymoneycombo.cpp:664
+msgid "All dates"
+msgstr "Todas as datas"
+
+#: widgets/kmymoneycombo.cpp:665
+msgid "As of today"
+msgstr "A día de hoxe"
+
+#: widgets/kmymoneycombo.cpp:667
+msgid "Current month"
+msgstr "Este mes"
+
+#: widgets/kmymoneycombo.cpp:668
+msgid "Current quarter"
+msgstr "Este trimestre"
+
+#: widgets/kmymoneycombo.cpp:669
+msgid "Current year"
+msgstr "Este ano"
+
+#: widgets/kmymoneycombo.cpp:671
+msgid "Month to date"
+msgstr "O que vai de mes"
+
+#: widgets/kmymoneycombo.cpp:672
+msgid "Year to date"
+msgstr "O que vai de ano"
+
+#: widgets/kmymoneycombo.cpp:673
+msgid "Year to month"
+msgstr "De comezo de ano a comezo do mes"
+
+#: widgets/kmymoneycombo.cpp:675
+msgid "Last year"
+msgstr "O ano pasado"
+
+#: widgets/kmymoneycombo.cpp:676
+msgid "Last fiscal year"
+msgstr "O ano fiscal pasado"
+
+#: widgets/kmymoneycombo.cpp:677
+msgid "Last 7 days"
+msgstr "Os últimos 7 días"
+
+#: widgets/kmymoneycombo.cpp:678
+msgid "Last 30 days"
+msgstr "Os últimos 30 días"
+
+#: widgets/kmymoneycombo.cpp:679
+msgid "Last 3 months"
+msgstr "Os últimos 3 meses"
+
+#: widgets/kmymoneycombo.cpp:680
+msgid "Last quarter"
+msgstr "O último trimestre"
+
+#: widgets/kmymoneycombo.cpp:681
+msgid "Last 6 months"
+msgstr "Os últimos 6 meses"
+
+#: widgets/kmymoneycombo.cpp:682
+msgid "Last 11 months"
+msgstr "Os últimos 11 meses"
+
+#: widgets/kmymoneycombo.cpp:683
+msgid "Last 12 months"
+msgstr "Os últimos 12 meses"
+
+#: widgets/kmymoneycombo.cpp:684
+msgid "Next 7 days"
+msgstr "Os vindeiros 7 días"
+
+#: widgets/kmymoneycombo.cpp:685
+msgid "Next 30 days"
+msgstr "Os vindeiros 30 días"
+
+#: widgets/kmymoneycombo.cpp:686
+msgid "Next 3 months"
+msgstr "Os vindeiros 3 meses"
+
+#: widgets/kmymoneycombo.cpp:687
+msgid "Next quarter"
+msgstr "O vindeiro trimestre"
+
+#: widgets/kmymoneycombo.cpp:688
+msgid "Next 6 months"
+msgstr "Os vindeiros 6 meses"
+
+#: widgets/kmymoneycombo.cpp:689
+msgid "Next 12 months"
+msgstr "Os vindeiros 12 meses"
+
+#: widgets/kmymoneycombo.cpp:690
+msgid "Last 3 months to next 3 months"
+msgstr "Dos últimos aos vindeiros 3 meses"
+
+#: widgets/kmymoneycombo.cpp:691
+msgid "User defined"
+msgstr "Definido polo usuario"
+
+#~ msgid "Reset"
+#~ msgstr "Reiniciar"
+
+#~ msgid "No plugins loaded"
+#~ msgstr "Non hai ningunha extensión cargada"
+
+#~ msgid "Create schedule..."
+#~ msgstr "Criar un plano de asentos..."
+
+#~ msgid "New schedule..."
+#~ msgstr "Novo plano de asentos..."
+
+#~ msgid "Edit schedule..."
+#~ msgstr "Editar un plano de asentos..."
+
+#~ msgid "Delete schedule..."
+#~ msgstr "Borrar o plano de asentos..."
+
+#~ msgid "Duplicate schedule"
+#~ msgstr "Duplicar a planificación"
+
+#~ msgid "Enter schedule..."
+#~ msgstr "Asentar o planificado..."
+
+#~ msgid "Skip schedule..."
+#~ msgstr "Circunvalar a planificación..."
+
+#~ msgid "Adjusting schedules..."
+#~ msgstr "A axustar as planificacións..."
+
+#~ msgid "Add schedule"
+#~ msgstr "Engadir planificación"
+
+#~ msgid "Unable to enter transaction for schedule '%1'"
+#~ msgstr "Non foi posíbel asentar a transacción da planificación «%1»"
+
+#~ msgid "Loaded"
+#~ msgstr "Cargado"
+
+#~ msgid ""
+#~ "_: Plugin interface description\n"
+#~ "Online access"
+#~ msgstr "Aceso en liña"
+
+#~ msgid ""
+#~ "_: Plugin interface description\n"
+#~ "File import"
+#~ msgstr "Importación de ficheiro"
+
+#~ msgid "not loaded: %1"
+#~ msgstr "non cargado: %1"
+
+#~ msgid "Schedule options"
+#~ msgstr "Opcións de planificación"
+
+#~ msgid "New Schedule"
+#~ msgstr "Novo Plano de Transaccións"
+
+#~ msgid "Edit Schedule"
+#~ msgstr "Editar o plano de asentos"
+
+#~ msgid "Search transactions containing the following text"
+#~ msgstr "Procurar asentos que conteñan o seguinte texto"
+
+#~ msgid "Search"
+#~ msgstr "Procurar"
+
+#~ msgid "&Search"
+#~ msgstr "&Procurar"
+
+#~ msgid "Start the search"
+#~ msgstr "Comezar a procura"
+
+#~ msgid "Takes the current criteria and searches for matching transactions."
+#~ msgstr "Toma o criterio actual e procura asentos que se axusten a el."
+
+#~ msgid "Reset all settings"
+#~ msgstr "Limpar todo"
+
+#~ msgid ""
+#~ "Use this to reset all settings to the state they were when the dialog was "
+#~ "opened."
+#~ msgstr ""
+#~ "Empregue isto para que todas as opcións volten ao estado que tiñan ao "
+#~ "iniciar o diálogo."
+
+#~ msgid "Use this button to close the window"
+#~ msgstr "Use este botón para pechar a fiestra"
diff --git a/po/it.po b/po/it.po
new file mode 100644
index 0000000..4f5e743
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,13438 @@
+# translation of it.po to Italiano
+# Samuel Algisi <woodhouse@member.fsf.org>, 2005.
+# Vincenzo Reale <smart2128@baslug.org>, 2005, 2006, 2007, 2008.
+# Sandro Bonazzola <sandrobonazzola@users.sourceforge.net>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: it\n"
+"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
+"POT-Creation-Date: 2009-06-25 19:04+0200\n"
+"PO-Revision-Date: 2009-08-17 08:39+0100\n"
+"Last-Translator: Sandro Bonazzola <sandro.bonazzola@gmail.com>\n"
+"Language-Team: Italian <kde-i18n-it@lists.kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 0.2\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: wizards/wizardpages/rc.cpp:1
+msgid "Select groups of accounts that correspond to the ways that you will use KMyMoney. Each group you select will cause several accounts and categories to be created. Select the groups that are relevant to you. You can always create additional accounts manually later."
+msgstr "Selezionare i gruppi di conto che corrispondono ai modi in cui userai KMyMoney. Ogni gruppo che selezioni causerà la creazione di diversi conti e categorie. Seleziona i gruppi che sono rilevanti per te. È sempre possibile creare conti aggiuntivi manualmente più tardi."
+
+#: wizards/wizardpages/rc.cpp:2
+msgid "<p>KMyMoney supports multiple currencies, nevertheless one of them will be used as your base currency. The base currency is used as default for new accounts and reports. Please select the base currency from the following list."
+msgstr "<p>KMyMoney supporta diverse valute, ciò nonostante una di esse verrà utilizzata come valuta base. La valuta base viene utilizzata come impostazione predefinita per i nuovi conti e per i rapporti. Selezionare la valuta base dall'elenco seguente."
+
+#: dialogs/kequitypriceupdatedlg.cpp:71
+#: dialogs/rc.cpp:399
+#: dialogs/rc.cpp:485
+#: dialogs/rc.cpp:724
+#: dialogs/settings/rc.cpp:108
+#: reports/listtable.cpp:226
+#: views/kinvestmentview.cpp:71
+#: views/kpayeesview.cpp:351
+#: views/rc.cpp:13
+#: widgets/rc.cpp:5
+#: widgets/rc.cpp:34
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1599
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1629
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1673
+#: wizards/wizardpages/rc.cpp:3
+msgid "Name"
+msgstr "Nome"
+
+#: wizards/wizardpages/rc.cpp:4
+msgid "ISO Code"
+msgstr "Codice ISO"
+
+#: dialogs/kequitypriceupdatedlg.cpp:69
+#: dialogs/kequitypriceupdatedlg.cpp:70
+#: dialogs/rc.cpp:71
+#: dialogs/rc.cpp:725
+#: dialogs/settings/rc.cpp:112
+#: views/kinvestmentview.cpp:72
+#: widgets/rc.cpp:37
+#: wizards/wizardpages/rc.cpp:5
+msgid "Symbol"
+msgstr "Simbolo"
+
+#: wizards/wizardpages/rc.cpp:6
+msgid ""
+"<p>Use the fields below to enter some information about yourself.</p>\n"
+"\n"
+"<p>All information is optional and only used to personalize your KMyMoney file.</p>"
+msgstr ""
+"<p>Usa il campo seguente per inserire le proprie informazioni personali.</p>\n"
+"\n"
+"<p>Tutte le informazioni sono facoltative e sono utilizzate solo per \n"
+"personalizzare il file di KMyMoney.</p>"
+
+#: dialogs/rc.cpp:425
+#: wizards/newuserwizard/rc.cpp:27
+#: wizards/wizardpages/rc.cpp:7
+msgid "Town:"
+msgstr "Città:"
+
+#: dialogs/rc.cpp:420
+#: wizards/newuserwizard/rc.cpp:22
+#: wizards/wizardpages/rc.cpp:8
+msgid "County/State:"
+msgstr "Regione/Stato:"
+
+#: dialogs/rc.cpp:391
+#: dialogs/rc.cpp:421
+#: wizards/newuserwizard/rc.cpp:23
+#: wizards/wizardpages/rc.cpp:9
+msgid "Street:"
+msgstr "Via:"
+
+#: dialogs/rc.cpp:422
+#: wizards/newuserwizard/rc.cpp:24
+#: wizards/wizardpages/rc.cpp:10
+msgid "Email:"
+msgstr "Email:"
+
+#: dialogs/rc.cpp:424
+#: wizards/newuserwizard/rc.cpp:26
+#: wizards/wizardpages/rc.cpp:11
+msgid "Telephone:"
+msgstr "Telefono:"
+
+#: dialogs/rc.cpp:423
+#: wizards/newuserwizard/rc.cpp:25
+#: wizards/wizardpages/rc.cpp:12
+msgid "Your name:"
+msgstr "Il tuo nome:"
+
+#: dialogs/rc.cpp:427
+#: wizards/newuserwizard/rc.cpp:29
+#: wizards/wizardpages/rc.cpp:13
+msgid "Load from Addressbook"
+msgstr "Carica dalla rubrica"
+
+#: dialogs/rc.cpp:392
+#: dialogs/rc.cpp:426
+#: views/rc.cpp:68
+#: wizards/wizardpages/rc.cpp:14
+msgid "Postal Code:"
+msgstr "CAP:"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:82
+msgid "KMyMoney New Account Setup"
+msgstr "Impostazione nuovo conto di KMyMoney"
+
+#: dialogs/rc.cpp:360
+#: dialogs/rc.cpp:361
+#: reports/listtable.cpp:230
+#: wizards/newaccountwizard/knewaccountwizard.cpp:83
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1616
+#: wizards/newaccountwizard/rc.cpp:61
+msgid "Institution"
+msgstr "Istituto"
+
+#: dialogs/investactivities.cpp:198
+#: dialogs/investactivities.cpp:286
+#: dialogs/investactivities.cpp:367
+#: dialogs/kfindtransactiondlg.cpp:181
+#: dialogs/rc.cpp:139
+#: dialogs/rc.cpp:192
+#: dialogs/rc.cpp:207
+#: dialogs/transactioneditor.cpp:734
+#: reports/listtable.cpp:201
+#: reports/pivottable.cpp:1336
+#: reports/pivottable.cpp:1586
+#: views/kforecastview.cpp:393
+#: views/kgloballedgerview.cpp:175
+#: views/khomeview.cpp:418
+#: views/khomeview.cpp:491
+#: views/khomeview.cpp:525
+#: views/khomeview.cpp:764
+#: views/khomeview.cpp:967
+#: views/khomeview.cpp:1437
+#: views/kscheduledview.cpp:71
+#: views/rc.cpp:17
+#: views/rc.cpp:44
+#: widgets/kmymoneyaccounttreebase.cpp:58
+#: widgets/kmymoneyaccounttreeforecast.cpp:41
+#: widgets/rc.cpp:109
+#: widgets/register.cpp:566
+#: widgets/transaction.cpp:978
+#: widgets/transaction.cpp:1535
+#: wizards/newaccountwizard/knewaccountwizard.cpp:84
+msgid "Account"
+msgstr "Conto"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:85
+msgid "Broker"
+msgstr "Intermediario"
+
+#: dialogs/kfindtransactiondlg.cpp:225
+#: dialogs/rc.cpp:70
+#: dialogs/rc.cpp:104
+#: dialogs/rc.cpp:159
+#: dialogs/rc.cpp:223
+#: dialogs/rc.cpp:246
+#: dialogs/rc.cpp:751
+#: dialogs/settings/rc.cpp:109
+#: widgets/rc.cpp:35
+#: widgets/register.cpp:568
+#: wizards/newaccountwizard/knewaccountwizard.cpp:86
+msgid "Details"
+msgstr "Dettagli"
+
+#: dialogs/knewloanwizard.cpp:636
+#: dialogs/rc.cpp:231
+#: dialogs/rc.cpp:608
+#: kmymoneyutils.cpp:191
+#: views/khomeview.cpp:399
+#: wizards/newaccountwizard/knewaccountwizard.cpp:87
+#: wizards/newaccountwizard/knewaccountwizard.cpp:880
+msgid "Payments"
+msgstr "Pagamenti"
+
+#: dialogs/investactivities.cpp:195
+#: dialogs/investactivities.cpp:283
+#: dialogs/investactivities.cpp:422
+#: dialogs/investtransactioneditor.cpp:217
+#: reports/listtable.cpp:221
+#: widgets/transaction.cpp:1565
+#: wizards/newaccountwizard/knewaccountwizard.cpp:88
+msgid "Fees"
+msgstr "Tasse"
+
+#: dialogs/rc.cpp:624
+#: views/khomeview.cpp:415
+#: views/khomeview.cpp:488
+#: views/khomeview.cpp:522
+#: wizards/newaccountwizard/knewaccountwizard.cpp:89
+msgid "Schedule"
+msgstr "Pianificazione"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:90
+msgid "Payout"
+msgstr "Pagamento"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:91
+msgid "Parent Account"
+msgstr "Conto genitore"
+
+#: dialogs/rc.cpp:719
+#: wizards/newaccountwizard/knewaccountwizard.cpp:92
+#: wizards/newuserwizard/knewuserwizard.cpp:86
+msgid "Finish"
+msgstr "Fine"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:248
+msgid "Credit card payment"
+msgstr "Pagamento con carta di credito"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:264
+#, c-format
+msgid "Loan payment for %1"
+msgstr "Pagamento del prestito per %1"
+
+#: mymoney/mymoneyscheduled.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:279
+msgid "Loan payment"
+msgstr "Pagamento prestito"
+
+#: dialogs/rc.cpp:134
+#: wizards/newaccountwizard/knewaccountwizard.cpp:293
+msgid "Amortization"
+msgstr "Ammortamento"
+
+#: dialogs/investactivities.cpp:196
+#: dialogs/investactivities.cpp:284
+#: dialogs/investactivities.cpp:366
+#: dialogs/investactivities.cpp:423
+#: dialogs/investtransactioneditor.cpp:227
+#: dialogs/rc.cpp:135
+#: dialogs/rc.cpp:152
+#: dialogs/rc.cpp:544
+#: reports/listtable.cpp:222
+#: widgets/transaction.cpp:1597
+#: wizards/newaccountwizard/knewaccountwizard.cpp:302
+msgid "Interest"
+msgstr "Interesse"
+
+#: dialogs/kcurrencycalculator.cpp:282
+#: wizards/newaccountwizard/knewaccountwizard.cpp:351
+#: wizards/newaccountwizard/knewaccountwizard.cpp:356
+msgid "User"
+msgstr "Utente"
+
+#: kmymoneyutils.cpp:64
+#: mymoney/mymoneyaccount.cpp:711
+#: reports/querytabletest.cpp:422
+#: wizards/newaccountwizard/knewaccountwizard.cpp:451
+msgid "Checking"
+msgstr "Pagamenti"
+
+#: kmymoneyutils.cpp:66
+#: mymoney/mymoneyaccount.cpp:714
+#: wizards/newaccountwizard/knewaccountwizard.cpp:452
+msgid "Savings"
+msgstr "Risparmi"
+
+#: kmymoneyutils.cpp:68
+#: mymoney/mymoneyaccount.cpp:717
+#: reports/querytabletest.cpp:423
+#: wizards/newaccountwizard/knewaccountwizard.cpp:453
+msgid "Credit Card"
+msgstr "Carta di credito"
+
+#: kmymoneyutils.cpp:70
+#: mymoney/mymoneyaccount.cpp:720
+#: wizards/newaccountwizard/knewaccountwizard.cpp:454
+msgid "Cash"
+msgstr "Contante"
+
+#: kmymoneyutils.cpp:72
+#: mymoney/mymoneyaccount.cpp:723
+#: wizards/newaccountwizard/knewaccountwizard.cpp:455
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+msgid "Loan"
+msgstr "Prestito"
+
+#: kmymoneyutils.cpp:76
+#: mymoney/mymoneyaccount.cpp:729
+#: wizards/newaccountwizard/knewaccountwizard.cpp:456
+msgid "Investment"
+msgstr "Investimento"
+
+#: converter/mymoneytemplate.cpp:178
+#: converter/mymoneytemplate.cpp:179
+#: dialogs/knewaccountdlg.cpp:1014
+#: kmymoneyutils.cpp:80
+#: mymoney/mymoneyaccount.cpp:735
+#: views/kaccountsview.cpp:352
+#: views/kmymoneyview.cpp:765
+#: widgets/kmymoneyaccountselector.cpp:177
+#: widgets/kmymoneyaccountselector.cpp:356
+#: wizards/newaccountwizard/knewaccountwizard.cpp:457
+msgid "Asset"
+msgstr "Attività"
+
+#: converter/mymoneytemplate.cpp:182
+#: converter/mymoneytemplate.cpp:183
+#: dialogs/knewaccountdlg.cpp:1016
+#: kmymoneyutils.cpp:82
+#: mymoney/mymoneyaccount.cpp:738
+#: views/kaccountsview.cpp:356
+#: views/kmymoneyview.cpp:766
+#: widgets/kmymoneyaccountselector.cpp:178
+#: widgets/kmymoneyaccountselector.cpp:363
+#: wizards/newaccountwizard/knewaccountwizard.cpp:458
+msgid "Liability"
+msgstr "Passività"
+
+#: converter/mymoneytemplate.cpp:194
+#: converter/mymoneytemplate.cpp:195
+#: kmymoneyutils.cpp:94
+#: mymoney/mymoneyaccount.cpp:756
+#: views/kaccountsview.cpp:369
+#: views/kmymoneyview.cpp:769
+#: widgets/kmymoneyaccountselector.cpp:181
+#: widgets/kmymoneyaccountselector.cpp:390
+#: wizards/newaccountwizard/knewaccountwizard.cpp:460
+msgid "Equity"
+msgstr "Deposito"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid "Please make sure to enter the correct conversion for the selected opening date. If you requested an online quote it might be provided for a different date."
+msgstr "Assicurati di inserire il cambio corretto per la data di apertura selezionata. Se hai richiesto un preventivo in linea potrebbe essere fornita una data diversa."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid "Check date"
+msgstr "Controlla la data"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:562
+msgid "1 %1 equals %2"
+msgstr "1 %1 uguale a %2"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:577
+msgid "Conversion rate is not positive"
+msgstr "Il tasso di conversione non è positivo"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:583
+msgid "No account name supplied"
+msgstr "Nessun nome fornito per il conto"
+
+#: dialogs/keditscheduledlg.cpp:114
+#: mymoney/mymoneyscheduled.cpp:1026
+#: wizards/newaccountwizard/knewaccountwizard.cpp:680
+msgid "Write check"
+msgstr "Scrivi assegno"
+
+#: dialogs/keditscheduledlg.cpp:111
+#: mymoney/mymoneyscheduled.cpp:1014
+#: wizards/newaccountwizard/knewaccountwizard.cpp:682
+msgid "Direct debit"
+msgstr "Addebitamento"
+
+#: dialogs/keditscheduledlg.cpp:113
+#: mymoney/mymoneyscheduled.cpp:1032
+#: wizards/newaccountwizard/knewaccountwizard.cpp:683
+msgid "Bank transfer"
+msgstr "Trasferimento bancario"
+
+#: dialogs/keditscheduledlg.cpp:112
+#: mymoney/mymoneyscheduled.cpp:1029
+#: wizards/newaccountwizard/knewaccountwizard.cpp:685
+msgid "Standing order"
+msgstr "Ordine permanente"
+
+#: dialogs/keditscheduledlg.cpp:110
+#: mymoney/mymoneyscheduled.cpp:1020
+#: wizards/newaccountwizard/knewaccountwizard.cpp:686
+msgid "Manual deposit"
+msgstr "Deposito manuale"
+
+#: dialogs/keditscheduledlg.cpp:109
+#: mymoney/mymoneyscheduled.cpp:1017
+#: wizards/newaccountwizard/knewaccountwizard.cpp:687
+msgid "Direct deposit"
+msgstr "Deposito diretto"
+
+#: dialogs/keditscheduledlg.cpp:115
+#: mymoney/mymoneyscheduled.cpp:1023
+#: wizards/newaccountwizard/knewaccountwizard.cpp:688
+msgid "Other"
+msgstr "Altro"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:697
+msgid "CreditCard %1 monthly payment"
+msgstr "Pagamento mensile carta di credito %1"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:703
+msgid "Finish entry and create account"
+msgstr "Termina inserimento e crea conto"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:705
+msgid "Finish entry and create account and schedule"
+msgstr "Termina l'inserimento e crea un conto e una pianificazione"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:708
+msgid "Next due date is prior to opening date"
+msgstr "La prossima data di scadenza è anteriore alla data di inizio"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:712
+msgid "No account selected"
+msgstr "Nessun conto selezionato"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:716
+msgid "No amount for payment selected"
+msgstr "Nessuna somma per il pagamento selezionato"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:720
+msgid "No payee for payment selected"
+msgstr "Nessun beneficiario per il pagamento selezionato"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:724
+msgid "No name assigned for schedule"
+msgstr "Nessun nome assegnato alla pianificazione"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:805
+msgid "No payee supplied"
+msgstr "Nessun beneficiario fornito"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:819
+msgid "No opening balance supplied"
+msgstr "Nessun saldo iniziale fornito"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:826
+msgid "An interest change can only happen after the first payment"
+msgstr "Una variazione degli interessi può avvenire solo dopo il primo pagamento"
+
+#: dialogs/knewloanwizard.cpp:615
+#: dialogs/knewloanwizard.cpp:634
+#: wizards/newaccountwizard/knewaccountwizard.cpp:884
+#: wizards/newaccountwizard/rc.cpp:55
+msgid "Months"
+msgstr "Mesi"
+
+#: dialogs/knewloanwizard.cpp:616
+#: dialogs/knewloanwizard.cpp:635
+#: wizards/newaccountwizard/knewaccountwizard.cpp:885
+#: wizards/newaccountwizard/knewaccountwizard.cpp:889
+#: wizards/newaccountwizard/rc.cpp:56
+msgid "Years"
+msgstr "Anni"
+
+#: dialogs/knewloanwizard.cpp:711
+#: wizards/newaccountwizard/knewaccountwizard.cpp:961
+#, c-format
+msgid "KMyMoney has calculated the amount of the loan as %1."
+msgstr "KMyMoney ha calcolato il totale del prestito che ammonta a %1."
+
+#: dialogs/knewloanwizard.cpp:718
+#: wizards/newaccountwizard/knewaccountwizard.cpp:968
+msgid "KMyMoney has calculated the interest rate to %1%."
+msgstr "KMyMoney ha calcolato che il tasso d'interesse ammonta al %1%."
+
+#: dialogs/knewloanwizard.cpp:731
+#: wizards/newaccountwizard/knewaccountwizard.cpp:981
+msgid "KMyMoney has calculated a periodic payment of %1 to cover principal and interest."
+msgstr "KMyMoney ha calcolato un pagamento periodico di %1 per coprire capitale e interesse."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:993
+#, c-format
+msgid "The number of payments has been decremented and the balloon payment has been modified to %1."
+msgstr "Il numero di pagamenti è stato ridotto e il pagamento finale è stato modificato in %1."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1001
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1021
+#, c-format
+msgid "The balloon payment has been modified to %1."
+msgstr "Il pagamento finale è stato modificato in %1."
+
+#: dialogs/knewloanwizard.cpp:763
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1013
+msgid "KMyMoney has calculated the term of your loan as %1. "
+msgstr "KMyMoney ha calcolato che il termine del prestito è %1. "
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1052
+msgid "KMyMoney has calculated a balloon payment of %1 for this loan."
+msgstr "KMyMoney ha calcolato un pagamento finale di %1 per questo prestito."
+
+#: dialogs/knewloanwizard.cpp:809
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1059
+msgid "KMyMoney has successfully verified your loan information."
+msgstr "KMyMoney ha verificato con successo le informazioni sul prestito."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1067
+msgid "You have entered mis-matching information. Please modify your figures or leave one value empty to let KMyMoney calculate it for you"
+msgstr "Hai inserito informazioni discordanti. Modifica le cifre o lascia un valore vuoto per lasciare che KMyMoney lo calcoli per te."
+
+#: dialogs/knewloanwizard.cpp:504
+#: dialogs/knewloanwizard.cpp:513
+#: dialogs/knewloanwizard.cpp:522
+#: dialogs/knewloanwizard.cpp:532
+#: dialogs/knewloanwizard.cpp:820
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1070
+msgid "Calculation error"
+msgstr "Errore di calcolo"
+
+#: dialogs/knewloanwizard.cpp:824
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1074
+msgid ""
+"\n"
+"\n"
+"Accept this or modify the loan information and recalculate."
+msgstr ""
+"\n"
+"\n"
+"Accetta o modifica le informazioni sul prestito e ricalcola."
+
+#: dialogs/knewloanwizard.cpp:826
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1076
+msgid "Calculation successful"
+msgstr "Calcolo completato con successo"
+
+#: dialogs/knewloanwizard.cpp:846
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1129
+#, c-format
+msgid ""
+"_n: one month\n"
+"%n months"
+msgstr ""
+"un mese\n"
+"%n mesi"
+
+#: dialogs/knewloanwizard.cpp:850
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1133
+#, c-format
+msgid ""
+"_n: one year\n"
+"%n years"
+msgstr ""
+"un anno\n"
+"%n anni"
+
+#: dialogs/knewloanwizard.cpp:854
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1137
+#, c-format
+msgid ""
+"_n: one payment\n"
+"%n payments"
+msgstr ""
+"un pagamento\n"
+"%n pagamenti"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1190
+msgid "Press Calculate to verify the values"
+msgstr "Premi Calcola per verificare i valori"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1194
+msgid "Not all details supplied"
+msgstr "Non tutti i dettagli sono stati forniti"
+
+#: dialogs/kaccountselectdlg.cpp:70
+#: dialogs/knewloanwizard.cpp:122
+#: dialogs/knewloanwizard.cpp:136
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1381
+msgid "&Create..."
+msgstr "&Crea..."
+
+#: dialogs/knewloanwizard.cpp:138
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1383
+msgid "Create a new asset account"
+msgstr "Crea un nuovo conto attività"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1384
+msgid "If the asset account does not yet exist, press this button to create it."
+msgstr "Se il conto di capitale non esiste ancora, premi questo pulsante per crearlo."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1596
+msgid "Account information"
+msgstr "Informazioni conto"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1601
+#: wizards/newaccountwizard/rc.cpp:59
+msgid "Subaccount of"
+msgstr "Sottoconto di"
+
+#: dialogs/rc.cpp:225
+#: dialogs/rc.cpp:326
+#: dialogs/rc.cpp:371
+#: dialogs/rc.cpp:723
+#: plugins/ofximport/dialogs/rc.cpp:23
+#: reports/listtable.cpp:225
+#: widgets/kmymoneyaccounttreebase.cpp:113
+#: widgets/register.cpp:61
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1606
+msgid "Type"
+msgstr "Tipo"
+
+#: dialogs/kcurrencyeditdlg.cpp:62
+#: dialogs/rc.cpp:56
+#: dialogs/rc.cpp:59
+#: dialogs/rc.cpp:75
+#: dialogs/rc.cpp:727
+#: dialogs/rc.cpp:792
+#: kmymoneyutils.cpp:84
+#: kmymoneyutils.cpp:111
+#: mymoney/mymoneyaccount.cpp:741
+#: mymoney/mymoneysecurity.cpp:169
+#: reports/listtable.cpp:233
+#: widgets/kmymoneypriceview.cpp:127
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1607
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1630
+#: wizards/newaccountwizard/rc.cpp:6
+#: wizards/newaccountwizard/rc.cpp:24
+msgid "Currency"
+msgstr "Valuta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1608
+#: wizards/newaccountwizard/rc.cpp:7
+#: wizards/newuserwizard/rc.cpp:9
+msgid "Opening date"
+msgstr "Data di apertura"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1610
+#: wizards/newaccountwizard/rc.cpp:9
+msgid "Conversion rate"
+msgstr "Tasso di conversione"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1613
+#: wizards/newaccountwizard/rc.cpp:15
+#: wizards/newuserwizard/rc.cpp:13
+msgid "Opening balance"
+msgstr "Bilancio iniziale"
+
+#: dialogs/keditscheduledlg.cpp:507
+#: dialogs/transactioneditor.cpp:784
+#: dialogs/transactioneditor.cpp:848
+#: plugins/ofximport/dialogs/rc.cpp:22
+#: widgets/rc.cpp:111
+#: widgets/register.cpp:59
+#: widgets/transaction.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1618
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1632
+msgid "Number"
+msgstr "Numero"
+
+#: dialogs/rc.cpp:365
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1621
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1634
+#: wizards/newaccountwizard/rc.cpp:26
+#: wizards/newaccountwizard/rc.cpp:66
+msgid "IBAN"
+msgstr "IBAN"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1627
+msgid "Brokerage Account"
+msgstr "Conto d'intermediazione"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1640
+msgid "Loan information"
+msgstr "Informazioni sul prestito"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1643
+msgid "Amount borrowed"
+msgstr "Importo prestito"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1645
+msgid "Amount lent"
+msgstr "Importo prestato"
+
+#: dialogs/rc.cpp:515
+#: dialogs/rc.cpp:546
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1647
+#: wizards/newaccountwizard/rc.cpp:75
+msgid "Interest rate"
+msgstr "Tasso d'interesse"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1648
+msgid "Interest rate is"
+msgstr "Il tasso d'interesse è"
+
+#: dialogs/rc.cpp:509
+#: dialogs/rc.cpp:572
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1649
+msgid "Principal and interest"
+msgstr "Capitale e interesse"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1650
+#: wizards/newaccountwizard/rc.cpp:90
+msgid "Additional fees"
+msgstr "Tasse aggiuntive"
+
+#: dialogs/rc.cpp:525
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1651
+#: wizards/newaccountwizard/rc.cpp:44
+msgid "Payment frequency"
+msgstr "Frequenza di pagamento"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1652
+#: wizards/newaccountwizard/rc.cpp:105
+msgid "Payment account"
+msgstr "Conto pagamenti"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1655
+msgid "Payout information"
+msgstr "Informazioni vincita"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1658
+msgid "Refinance"
+msgstr "Rifinanzia"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1661
+msgid "Transfer amount to"
+msgstr "Trasferisci somma a"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1663
+msgid "Transfer amount from"
+msgstr "Trasferisci somma da"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1665
+msgid "Payment date"
+msgstr "Data pagamento"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1671
+msgid "Schedule information"
+msgstr "Informazioni pianificazione"
+
+#: reports/listtable.cpp:228
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1684
+msgid "Occurence"
+msgstr "Ricorrenza"
+
+#: mymoney/mymoneyscheduled.cpp:891
+#: mymoney/mymoneyscheduled.cpp:947
+#: mymoney/mymoneyscheduled.cpp:1283
+#: mymoney/mymoneyscheduletest.cpp:1343
+#: widgets/rc.cpp:19
+#: widgets/rc.cpp:74
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+msgid "Monthly"
+msgstr "Mensilmente"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1677
+msgid "Paid from"
+msgstr "Pagato da"
+
+#: widgets/kmymoneycombo.cpp:473
+#: widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1678
+msgid "Pay to"
+msgstr "Pagare a"
+
+#: dialogs/investactivities.cpp:197
+#: dialogs/investactivities.cpp:285
+#: dialogs/investactivities.cpp:365
+#: dialogs/kfindtransactiondlg.cpp:197
+#: dialogs/kmymoneysplittable.cpp:80
+#: dialogs/rc.cpp:51
+#: dialogs/rc.cpp:212
+#: reports/listtable.cpp:197
+#: views/khomeview.cpp:421
+#: views/khomeview.cpp:494
+#: views/khomeview.cpp:528
+#: views/kscheduledview.cpp:73
+#: views/rc.cpp:63
+#: widgets/register.cpp:58
+#: widgets/transaction.cpp:1055
+#: widgets/transaction.cpp:1578
+#: widgets/transaction.cpp:1610
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1679
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1685
+msgid "Amount"
+msgstr "Importo"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1680
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1686
+msgid "First payment due"
+msgstr "Il primo pagamento avviene il"
+
+#: dialogs/rc.cpp:102
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1681
+#: wizards/newaccountwizard/rc.cpp:115
+msgid "Payment method"
+msgstr "Metodo pagamento"
+
+#: wizards/newaccountwizard/rc.cpp:1
+msgid "This page summarizes the data you have entered. Press <b>Finish</b> to create the account, schedules, etc. or use <b>Back</b> to modify your entries."
+msgstr "Questa pagina riassume i dati che hai inserito. Premi <b>Fine</b> per creare il conto, pianificazioni, ecc. o usa <b>Indietro</b> per modificare le voci."
+
+#: wizards/newaccountwizard/rc.cpp:2
+msgid "Item"
+msgstr "Elemento"
+
+#: dialogs/rc.cpp:110
+#: dialogs/rc.cpp:165
+#: dialogs/rc.cpp:252
+#: dialogs/rc.cpp:757
+#: dialogs/rc.cpp:818
+#: views/kinvestmentview.cpp:74
+#: widgets/register.cpp:574
+#: wizards/newaccountwizard/rc.cpp:3
+msgid "Value"
+msgstr "Valore"
+
+#: wizards/newaccountwizard/rc.cpp:4
+msgid ""
+"Enter the name of the account under which it is known within KMyMoney.\n"
+"Select the type for the new account. Use the <b>What's this?</b> feature to see more details about the various account types.\n"
+"Enter the date the account was opened and its currency."
+msgstr ""
+"Inserire il nome del conto utilizzato in KMyMoney.\n"
+"Selezionare il tipo per il nuovo conto. Usare la funzionalità <b>Che cos'è?</b> per avere ulteriori informazioni sui vari tipi di conto.\n"
+"Inserire la data di apertura del conto e la sua valuta."
+
+#: wizards/newaccountwizard/rc.cpp:5
+msgid "Select the currency in which this account is denominated."
+msgstr "Seleziona la valuta con cui denominare il conto."
+
+#: wizards/newaccountwizard/rc.cpp:8
+msgid "The opening balance is the balance of the account when you start using it with KMyMoney. For new accounts this is usually 0 but for existing accounts this may well differ. Please consult the account statements to figure out this value. The opening balance is to be provided in the currency of the account as selected with the currency button."
+msgstr "Il bilancio di apertura è il saldo del conto al momento di iniziare a gestirlo con KMyMoney. Per i nuovi conti di solito questo è 0, ma per i conti esistenti questo può variare. Consultare l'estratto conto per capire questo valore. Il bilancio di apertura deve essere fornito nella valuta del conto come selezionato con il pulsante della valuta."
+
+#: wizards/newaccountwizard/rc.cpp:10
+msgid ""
+"The opening date would be the date of the last statement. In case you want to keep track of transactions prior to this date, enter the ending balance and statement date of a prior statement and add all following transactions into KMyMoney.\n"
+"<br>\n"
+"<i>Note</i>: If you do not know the exact amount of the opening balance, enter an estimate. You can change this value later before you reconcile this account for the first time."
+msgstr ""
+"La data di apertura dovrebbe essere la data del tuo ultimo estratto conto. Nel caso in cui tu voglia tener traccia delle transazioni precedenti a questa data, inserisci il bilancio finale, la data dell'estratto conto precedente ed aggiungi le transazioni seguenti in KMyMoney.\n"
+"<br>\n"
+"<i>Nota</i>: Se non conosci l'esatto ammontare del conto, inserisci una stima. Puoi cambiare questo valore in seguito prima di riconciliare il conto."
+
+#: dialogs/rc.cpp:52
+#: dialogs/rc.cpp:54
+#: dialogs/rc.cpp:57
+#: dialogs/rc.cpp:60
+#: dialogs/rc.cpp:748
+#: dialogs/rc.cpp:749
+#: dialogs/rc.cpp:768
+#: widgets/rc.cpp:6
+#: widgets/rc.cpp:7
+#: widgets/rc.cpp:8
+#: widgets/rc.cpp:9
+#: widgets/rc.cpp:10
+#: widgets/rc.cpp:11
+#: widgets/rc.cpp:12
+#: widgets/rc.cpp:13
+#: widgets/rc.cpp:14
+#: widgets/rc.cpp:15
+#: widgets/rc.cpp:16
+#: widgets/rc.cpp:17
+#: wizards/newaccountwizard/rc.cpp:11
+#: wizards/newaccountwizard/rc.cpp:88
+#: wizards/newaccountwizard/rc.cpp:91
+#: wizards/newaccountwizard/rc.cpp:93
+#: wizards/newuserwizard/rc.cpp:14
+msgid "xxx"
+msgstr "xxx"
+
+#: wizards/newaccountwizard/rc.cpp:12
+msgid "Account type"
+msgstr "Tipo di conto"
+
+#: wizards/newaccountwizard/rc.cpp:13
+msgid "For foreign currencies an initial conversion rate needs to be provided. This should be the price of the foreign currency in the base currency on the opening date of the account."
+msgstr "Per le valute estere deve essere fornito un tasso di conversione iniziale. Questo dovrebbe essere il prezzo della valuta estera nella valuta di base alla data di apertura del conto."
+
+#: wizards/newaccountwizard/rc.cpp:14
+msgid "Account name"
+msgstr "Nome conto"
+
+#: wizards/newaccountwizard/rc.cpp:16
+msgid ""
+"<p><b>Checking</b>\n"
+"Use the checking account type to manage activities on your checking account e.g. payments, checks and cash card purchases.</p>\n"
+"\n"
+"<p><b>Savings</b>\n"
+"Use the savings account type to manage activities on your savings account.</p>\n"
+"\n"
+"<p><b>Credit Card</b>\n"
+"Use the credit card account type to manage activities on your credit card.</p>\n"
+"\n"
+"<p><b>Cash</b>\n"
+"\n"
+"Use the cash account type to manage activities in your wallet.</p>\n"
+"\n"
+"<p><b>Loan</b>\n"
+"Use the loan account type to manage amortization loans (e.g. mortgages, car loan, money you lend, private loans etc.).</p>\n"
+"\n"
+"<p><b>Investment</b>\n"
+"Use the investment account to manage your stock, mutual fund and other investments.</p>\n"
+"\n"
+"<p><b>Asset</b>\n"
+"Use the asset account type to manage assets (e.g. your house, car or art collection).</p>\n"
+"\n"
+"<p><b>Liability</b>\n"
+"Use the liability account type to manage any type of liability except amortization loans. Use it for taxes you owe or money you borrowed from friends. For amortization loans like mortgages you should create a loan account.</p>"
+msgstr ""
+"<p><b>Conto corrente</b>\n"
+"\"Usa il tipo conto corrente per gestire le attività sul tuo conto corrente ad esempio pagamenti, acquisti pagati con assegni e carta di credito</p>\n"
+"\n"
+"<p><b>Risparmio</b>\n"
+"Usa il tipo conto di risparmio per gestire le attività sul tuo conto di risparmio.</p>\n"
+"\n"
+"<p><b>Carta di credito </b>\n"
+"Usa il tipo carta di credito per gestire le attività sulla tua carta di credito.</p>\n"
+"\n"
+"<p><b>Contante</b>\n"
+"\n"
+"Usa il tipo contante per la gestione delle attività nel tuo portafoglio.</p>\n"
+"\n"
+"<p><b>Prestito</b>\n"
+"Usa il tipo prestito per la gestione di ammortamento prestiti (ad esempio mutui, prestiti auto, prestiti di denaro, prestiti privati, ecc.)</p>\n"
+"\n"
+"<p><b>Investimenti</b>\n"
+"Usa il conto investimenti per gestire azioni, fondi comuni di investimento e altri investimenti.</p>\n"
+"\n"
+"<p><b>Attività</b>\n"
+"Usa il tipo attività per transazioni riguardanti la gestione di attività (ad esempio, la casa, auto o collezione d'arte).</p>\n"
+"\n"
+"<p><b>Passività</b>\n"
+"Usa il tipo passività per transazioni riguardanti la gestione di passività ad eccezione di ammortamento prestiti. Usalo per le tasse dovute o denaro preso in prestito da amici. Per l'ammortamento di mutui o ipoteche si dovrebbe creare un conto di prestito.</p>"
+
+#: wizards/newaccountwizard/rc.cpp:17
+msgid "Preferred account"
+msgstr "Conto preferito"
+
+#: wizards/newaccountwizard/rc.cpp:18
+msgid "Mark this checkbox if the account should be maintained as preferred account"
+msgstr "Marca questa casella se il conto dovrà essere mantenuto come conto preferito"
+
+#: wizards/newaccountwizard/rc.cpp:19
+msgid "Selecting the <b>Preferred Account</b> checkbox will allow preferred access in some dialogs and views of KMyMoney."
+msgstr "La selezione del <b>Conto preferito</b> permetterà un accesso preferenziale in alcune finestre di dialogo e viste di KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:20
+msgid "Enter a name under which this account is known within KMyMoney."
+msgstr "Inserisci un nome per distinguere il conto in KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:21
+msgid "Online quote"
+msgstr "Quotazionei in linea"
+
+#: wizards/newaccountwizard/rc.cpp:22
+msgid ""
+"Does this investment account have a brokerage account?<p>\n"
+"\n"
+"<b>Check</b> the mark if this investment account has an associated account for money that is not invested.<br>\n"
+"\n"
+"<b>Uncheck</b> it if you don't use this account for active stock brokerage. You should also uncheck it if this account is not maintained by a bank or broker."
+msgstr ""
+"Questo conto investimenti ha un conto di intermediazione?<p>\n"
+"\n"
+"<b>Attiva</b> la casella di controllo se questo conto investimenti ha un conto associato per il denaro che non è investito.<br>\n"
+"\n"
+"<b>Disattivala</b> se non si utilizza questo conto per l'intermediazione attiva di titoli. Si dovrebbe anche disattivare la casella se questo conto non è gestito da una banca o intermediario."
+
+#: wizards/newaccountwizard/rc.cpp:23
+msgid "Create brokerage account"
+msgstr "Crea un nuovo conto di intermediazione"
+
+#: wizards/newaccountwizard/rc.cpp:25
+#: wizards/newaccountwizard/rc.cpp:64
+msgid "Account number"
+msgstr "Numero del conto"
+
+#: wizards/newaccountwizard/rc.cpp:27
+msgid "Please select the required options. Please use the <b>What's this?</b> feature to see more information about the items."
+msgstr "Selezionare le opzioni richieste. Usare la funzionalità <b>Che cos'è?</b> per avere maggiori informazioni riguardo ai singoli elementi."
+
+#: wizards/newaccountwizard/rc.cpp:28
+msgid "What is the type of the loan?"
+msgstr "Qual è il tipo del prestito?"
+
+#: dialogs/rc.cpp:481
+#: wizards/newaccountwizard/rc.cpp:29
+msgid "I am borrowing money"
+msgstr "Sto prendendo a prestito denaro"
+
+#: dialogs/rc.cpp:482
+#: wizards/newaccountwizard/rc.cpp:30
+msgid "I am lending money"
+msgstr "Sto prestando denaro"
+
+#: wizards/newaccountwizard/rc.cpp:31
+msgid "Who is the payee/payer of the loan?"
+msgstr "Chi è il beneficiario/debitore del prestito?"
+
+#: wizards/newaccountwizard/rc.cpp:32
+msgid ""
+"Enter the name of the person or bank you owe money or who owes you money.\n"
+"\n"
+"If the name does not exist within KMyMoney's database, you are asked if you want to create it."
+msgstr ""
+"Inserire il nome della persona o della banca alla quale devi dei soldi o che ti deve dei soldi.\n"
+"\n"
+"Se il nome non esiste all'interno del database di KMyMoney, ti verrà chiesto se desideri crearlo."
+
+#: wizards/newaccountwizard/rc.cpp:33
+msgid "Did you make/receive any payments yet?"
+msgstr "Hai già effettuato/ricevuto qualche pagamento?"
+
+#: wizards/newaccountwizard/rc.cpp:36
+msgid ""
+"Were there any payments for this loan whether they are entered into KMyMoney or not?\n"
+"\n"
+"Note: Payments made to obtain the loan (e.g. Disagio) are not considered as payments in this context."
+msgstr ""
+"Ci sono stati pagamenti per questo prestito, a prescindere dal fatto che essi siano stati inseriti in KMyMoney?\n"
+"\n"
+"Nota: I pagamenti fatti per ottenere il prestito (ad es. le commissioni d'apertura) non sono considerati pagamenti in questo contesto."
+
+#: wizards/newaccountwizard/rc.cpp:37
+msgid "Which payments do you want to record?"
+msgstr "Quali pagamenti vuoi registrare?"
+
+#: wizards/newaccountwizard/rc.cpp:38
+msgid "All payments"
+msgstr "Tutti i pagamenti"
+
+#: wizards/newaccountwizard/rc.cpp:39
+msgid "Start with this year's payments"
+msgstr "Inizia con i pagamenti di quest'anno"
+
+#: wizards/newaccountwizard/rc.cpp:40
+msgid ""
+"<qt>Select which transactions should be recorded.\n"
+"\n"
+"<b>All payments</b> allows you to enter all payments made for this loan.\n"
+"\n"
+"The option to <b>start from the beginning of the current year</b> is meant for loans that are active for a longer period of time already and you don't want to enter all transactions of the past.\n"
+"</qt>"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:41
+msgid "Balance before start of recording"
+msgstr "Saldo prima dell'inizio delle registrazioni"
+
+#: wizards/newaccountwizard/rc.cpp:42
+msgid "Enter the ending balance found on the statement that is the last one before you want to start recording this loan in KMyMoney."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:43
+msgid "You have selected to record only payments from the beginning of this year. Since prior transactions will not be recorded, you need to supply the balance of the loan on January 1st of this year."
+msgstr "Hai selezionato la registrazione dei pagamenti dall'inizio dell'anno. Poiché le transazioni precedenti non saranno registrate, è necessario fornire il saldo del prestito dal 1° gennaio di quest'anno."
+
+#: wizards/newaccountwizard/rc.cpp:45
+msgid "Interest Compounding frequency"
+msgstr "Frequenza interesse composto"
+
+#: wizards/newaccountwizard/rc.cpp:46
+msgid "Select the frequency with which the interest is compounded. If uncertain, select the same as the payment frequency. Consult your loan contract for details."
+msgstr "Seleziona la frequenza con la quale gli interessi sono calcolati. Nell'incertezza, seleziona lo stesso valore per la frequenza di pagamento. Consulta il contratto di prestito per i dettagli."
+
+#: wizards/newaccountwizard/rc.cpp:47
+msgid "Due date of first payment to be recorded"
+msgstr "Data di scadenza del primo pagamento da registrare"
+
+#: wizards/newaccountwizard/rc.cpp:48
+msgid ""
+"Depending on the answer to <b>What do you want to record?</b> this field means the following:<p>\n"
+"\n"
+"<b>All payments</b><br>\n"
+"Enter the due date of the very first payment<p>\n"
+"\n"
+"<b>Start with this year's payments</b><br>\n"
+"Enter the due date of the first payment in the current year"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:49
+msgid "Type of interest rate"
+msgstr "Tipo di tasso d'interesse"
+
+#: wizards/newaccountwizard/rc.cpp:50
+msgid "Fixed"
+msgstr "Fisso"
+
+#: wizards/newaccountwizard/rc.cpp:51
+msgid "Variable"
+msgstr "Variabile"
+
+#: wizards/newaccountwizard/rc.cpp:52
+msgid "Time between interest changes"
+msgstr "Intervallo di tempo tra variazioni degli interessi"
+
+#: dialogs/knewloanwizard.cpp:613
+#: wizards/newaccountwizard/rc.cpp:53
+msgid "Days"
+msgstr "Giorni"
+
+#: dialogs/knewloanwizard.cpp:614
+#: wizards/newaccountwizard/rc.cpp:54
+msgid "Weeks"
+msgstr "Settimane"
+
+#: wizards/newaccountwizard/rc.cpp:57
+msgid "Next interest change is due"
+msgstr "I prossimi interessi cambiano il"
+
+#: wizards/newaccountwizard/rc.cpp:58
+msgid "This page allows you to select the parent account."
+msgstr "Questa pagina ti permette di selezionare un conto padre."
+
+#: wizards/newaccountwizard/rc.cpp:60
+msgid ""
+"If this account is managed by an institution please select the institution from the list. If the institution does not exist yet, please choose the <b>New Institution</b> button to create it. Otherwise, leave this field empty.\n"
+"Enter the account number used by the institution to identify the account."
+msgstr ""
+"Se questo conto è gestito da un istituto, seleziona l'istituto dall'elenco. Se l'istituto non esiste ancora, premi il pulsante <b>Nuovo istituto</b> per crearlo. Altrimenti, lascia il campo vuoto.\n"
+"Inserisci il numero di conto utilizzato dall'istituto per identificare il tuo conto."
+
+#: wizards/newaccountwizard/rc.cpp:62
+msgid "Select the institution which manages this account or leave empty"
+msgstr "Seleziona l'istituto che gestisce questo conto o lascia vuoto"
+
+#: wizards/newaccountwizard/rc.cpp:63
+msgid "New Institution"
+msgstr "Nuovo Istituto"
+
+#: wizards/newaccountwizard/rc.cpp:65
+msgid ""
+"Accounts managed by an institution are usually referenced by a unique number the so called account number. Enter that number here.\n"
+"\n"
+"KMyMoney currently uses this number only for some online banking functions."
+msgstr ""
+"I conti gestiti da un istituto sono normalmente identificati da un numero univoco, il cosiddetto numero di conto. Inserire qui tale numero.\n"
+"\n"
+"KMyMoney attualmente usa questo numero solo per alcune funzionalità di online banking."
+
+#: wizards/newaccountwizard/rc.cpp:67
+msgid "Enter the International Bank Account Number into this field"
+msgstr "Inserisci il codice IBAN (International Bank Account Number) in questo campo"
+
+#: wizards/newaccountwizard/rc.cpp:68
+msgid ""
+"You can enter the IBAN (International Bank Account Number) into this field if you know it. Usually, people at your institution can tell you the number or it is printed on your statements.\n"
+"\n"
+"See also http://en.wikipedia.org/wiki/International_Bank_Account_Number for more information.\n"
+"\n"
+"KMyMoney keeps this field only for documentation purposes and does not use it otherwise."
+msgstr ""
+"È possibile immettere il codice IBAN (International Bank Account Number), in questo campo, se è noto. Di solito, il personale dell'istituto è in grado di fornire il numero oppure il numero è stampato sugli estratti conto o nella corrispondenza.\n"
+"\n"
+"Vedi anche http://it.wikipedia.org/wiki/International_Bank_Account_Number per ulteriori informazioni.\n"
+"\n"
+"KMyMoney mantiene questo campo solo a fini di documentazione, e non viene utilizzato per altri scopi."
+
+#: wizards/newaccountwizard/rc.cpp:69
+msgid "Now enter the details for your loan. You can leave one of the fields empty and KMyMoney will calculate it when you press the <b>Calculate</b> button. Before you can continue with the next page you also need to press <b>Calculate</b> so that KMyMoney can check the logical correctness of the values you have supplied."
+msgstr "Ora inserisci i dettagli del prestito. Puoi lasciare uno dei campi vuoti e KMyMoney lo calcolerà premendo il tasto <b>Calcola</b>. Prima di poter continuare con la prossima pagina, è necessario premere <b>Calcola</b> per consentire a KMyMoney di verificare la correttezza logica dei valori forniti."
+
+#: wizards/newaccountwizard/rc.cpp:70
+msgid "The interest rate gets calculated"
+msgstr "Il tasso attuale calcolato"
+
+#: wizards/newaccountwizard/rc.cpp:71
+msgid "when the payment is received"
+msgstr "quando il pagamento è ricevuto"
+
+#: wizards/newaccountwizard/rc.cpp:72
+msgid "when the payment is due"
+msgstr "quando il pagamento è dovuto"
+
+#: dialogs/rc.cpp:531
+#: dialogs/rc.cpp:533
+#: wizards/newaccountwizard/rc.cpp:73
+msgid "Loan amount"
+msgstr "Importo del prestito"
+
+#: wizards/newaccountwizard/rc.cpp:74
+msgid "Enter the amount of the loan in this field. If you want to calculate this field out of the other parameters, please leave it empty. If the field is marked as required (colored background) you have informed KMyMoney about the fact that there were already some payments towards the loan. In this case, please enter the ending balance of your last statement."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:76
+msgid "Please enter the interest rate in percent or leave the field empty to calculate it."
+msgstr "Inserire il tasso d'interesse in percentuale o lasciare il campo vuoto per calcolarlo."
+
+#: dialogs/rc.cpp:559
+#: wizards/newaccountwizard/rc.cpp:77
+msgid "Term"
+msgstr "Termine"
+
+#: wizards/newaccountwizard/rc.cpp:78
+msgid "Please enter the term of this loan or enter 0 to calculate it. The term is the time that is required to fully repay the loan. This time might be different from the time your loan contract is signed for."
+msgstr "Inserire il termine di questo prestito o lasciare 0 per calcolarlo. Il termine è il tempo richiesto per ripagare completamente il prestito. La durata può differire dal tempo previsto dal tuo contratto."
+
+#: wizards/newaccountwizard/rc.cpp:79
+msgid "Payment (principal and interest)"
+msgstr "Pagamento (capitale e interesse)"
+
+#: wizards/newaccountwizard/rc.cpp:80
+msgid "Please enter the amount you pay for principal and interest or leave the field empty to calculate it."
+msgstr "Inserisci l'importo che paghi per il capitale e l'interesse o lascia il campo vuoto per calcolarlo."
+
+#: wizards/newaccountwizard/rc.cpp:81
+msgid "Balloon payment"
+msgstr "Pagamento finale"
+
+#: wizards/newaccountwizard/rc.cpp:82
+msgid "Please enter the amount of a final amortization payment or leave the field empty to calculate it."
+msgstr "Inserire l'importo del pagamento della rata finale o lasciare il campo bianco per calcolarlo."
+
+#: wizards/newaccountwizard/rc.cpp:83
+msgid "Calculate"
+msgstr "Calcola"
+
+#: wizards/newaccountwizard/rc.cpp:84
+msgid "Press this button to calculate/verify your loan details."
+msgstr "Premi questo pulsante per calcolare/verificare i dettagli del prestito."
+
+#: wizards/newaccountwizard/rc.cpp:85
+msgid "Pressing this button calculates a possibly missing parameter for your loan or verifies that the values entered match. If something is not correct you will receive information about it."
+msgstr "La pressione di questo pulsante calcola un possibile parametro mancante per il prestito o verifica la corrispondenza dei valori inseriti. In caso di inesattezze riceverai delle informazioni a riguardo."
+
+#: wizards/newaccountwizard/rc.cpp:86
+msgid "Now enter the information required for the periodic loan payments. If your regular payments contains any additional fees, click on the <b>Additional fees</b> button to enter them."
+msgstr "Ora inserisci le informazioni richieste per le rate del prestito. Se le rate prevedono costi aggiuntivi, fai clic sul pulsante <b>Costi aggiuntivi</b> per inserirli."
+
+#: wizards/newaccountwizard/rc.cpp:87
+msgid "Principal + Interest"
+msgstr "Capitale + Interesse"
+
+#: dialogs/rc.cpp:620
+#: wizards/newaccountwizard/rc.cpp:89
+msgid "+"
+msgstr "+"
+
+#: wizards/newaccountwizard/rc.cpp:92
+msgid "= periodical payments"
+msgstr "= pagamenti periodici"
+
+#: dialogs/rc.cpp:643
+#: wizards/newaccountwizard/rc.cpp:94
+msgid ""
+"If this loan is for an asset, such as a car or a house, you can create the asset account now. An asset account represents the total value of an asset. The money from this loan will be transfered into the asset account you create or select.\n"
+"If this loan is a 'consumer loan' (money to use however you want), you can use a checking account instead."
+msgstr ""
+"Se questo prestito è per un'attività, come un'auto o una casa, puoi creare subito il conto attività. Un conto attività rappresenta il valore totale di un'attività. Il denaro verrà trasferito da questo prestito al conto attività creato o selezionato.\n"
+"Se questo prestito è un 'prestito al consumo' (denaro per un uso generico), puoi usare invece un conto corrente."
+
+#: dialogs/rc.cpp:644
+#: wizards/newaccountwizard/rc.cpp:95
+msgid "Don't create payout transaction"
+msgstr "Non creare la transazione del pagamento"
+
+#: wizards/newaccountwizard/rc.cpp:96
+msgid "Refinance existing loan"
+msgstr "Rifinanzia un prestito esistente"
+
+#: wizards/newaccountwizard/rc.cpp:97
+msgid "Check this if you are refinancing a loan that already exists in KMyMoney"
+msgstr "Seleziona questa opzione se stai rifinanziando un prestito che esiste già in KMyMoney"
+
+#: dialogs/rc.cpp:642
+#: wizards/newaccountwizard/rc.cpp:98
+msgid "Asset Account"
+msgstr "Conto attività"
+
+#: dialogs/rc.cpp:2
+#: wizards/newaccountwizard/rc.cpp:99
+msgid "Create"
+msgstr "Crea"
+
+#: wizards/newaccountwizard/rc.cpp:100
+msgid "Loan account"
+msgstr "Conto del prestito"
+
+#: dialogs/rc.cpp:646
+#: wizards/newaccountwizard/rc.cpp:101
+msgid "Date of payment"
+msgstr "Data del pagamento"
+
+#: wizards/newaccountwizard/rc.cpp:102
+msgid ""
+"KMyMoney creates a schedule for this payment and reminds you whenever a payment must be made. Please select the account to/from which payments will be made and the category the interest will be assigned to.<p>\n"
+"If you selected to record all payments this date has already been supplied. If you selected to record only this years payments, then the <b>First payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"KMyMoney creerà una pianificazione per questo pagamento e ti ricorderà quando questo pagamento dovrà essere effettuato. Seleziona il conto a/da cui i pagamenti dovranno essere effettuati e la categoria di assegnazione degli interessi.<p>\n"
+"Se hai scelto di registrare tutti i pagamenti questa data è già stata inserita. Se hai scelto di registrare solo i pagamenti dell'anno corrente, allora la <b>Data del primo pagamento</b> è la data del primo pagamento di quest'anno."
+
+#: dialogs/rc.cpp:613
+#: wizards/newaccountwizard/rc.cpp:103
+msgid "Interest category"
+msgstr "Categoria dell'interesse"
+
+#: wizards/newaccountwizard/rc.cpp:104
+msgid "The category the interest part of the payment will be assigned to. If you borrow money you usually have to pay interest, so this should be an expense category. If you lend the money, you receive the interest. In this case, select an income category here."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:106
+msgid "Select the account from which you make your periodical payments or where you receive regular payments in case you lend the money. In most cases, this is a checking account."
+msgstr "Seleziona il conto da cui effettui i tuoi pagamenti periodici o sul quale si ricevono regolari pagamenti nel caso in cui si prestino i soldi. Nella maggior parte dei casi, si tratta di un conto corrente."
+
+#: dialogs/rc.cpp:519
+#: wizards/newaccountwizard/rc.cpp:107
+msgid "First payment due on"
+msgstr "Il primo pagamento avviene il"
+
+#: wizards/newaccountwizard/rc.cpp:108
+msgid "For credit card accounts you can create a monthly schedule which will automatically remind you about the payment. Please fill in the details about this payment here."
+msgstr "Per conti carta di credito è possibile creare una pianificazione mensile che ricorderà automaticamente il pagamento. Si prega di compilare tutti i dettagli su questo pagamento."
+
+#: wizards/newaccountwizard/rc.cpp:109
+msgid "Yes, remind me when the payment is due"
+msgstr "Sì, ricordami le scadenze del pagamento"
+
+#: wizards/newaccountwizard/rc.cpp:110
+msgid "Name of schedule"
+msgstr "Nome della pianificazione"
+
+#: dialogs/rc.cpp:151
+#: dialogs/rc.cpp:218
+#: dialogs/rc.cpp:219
+#: reports/listtable.cpp:199
+#: views/kscheduledview.cpp:72
+#: widgets/rc.cpp:113
+#: widgets/register.cpp:57
+#: wizards/newaccountwizard/rc.cpp:111
+msgid "Payee"
+msgstr "Beneficiario"
+
+#: wizards/newaccountwizard/rc.cpp:112
+msgid "Estimated monthly payment"
+msgstr "Pagamento mensile stimato"
+
+#: wizards/newaccountwizard/rc.cpp:113
+msgid "Due date of next payment"
+msgstr "Data di scadenza del prossimo pagamento"
+
+#: wizards/newaccountwizard/rc.cpp:114
+msgid ""
+"Payment should be made\n"
+"from account"
+msgstr ""
+"Il pagamento deve essere fatto\n"
+"dal conto"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:79
+msgid "KMyMoney New File Setup"
+msgstr "Impostazioni nuovo file di KMyMoney"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:81
+msgid "Introduction"
+msgstr "Introduzione"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:82
+msgid "Personal Data"
+msgstr "Dati personali"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:83
+msgid "Select Currency"
+msgstr "Seleziona una valuta"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:84
+msgid "Select Accounts"
+msgstr "Seleziona conti"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:85
+msgid "Set preferences"
+msgstr "Imposta le preferenze"
+
+#: dialogs/knewfiledlg.cpp:120
+#: wizards/newuserwizard/knewuserwizard.cpp:197
+msgid "Unable to load data, because no contact has been associated with the owner of the standard addressbook."
+msgstr "Impossibile caricare i dati, perché nessun contatto è stato associato al proprietario della rubrica standard."
+
+#: dialogs/knewfiledlg.cpp:120
+#: wizards/newuserwizard/knewuserwizard.cpp:197
+msgid "Addressbook import"
+msgstr "Importa rubrica"
+
+#: wizards/newuserwizard/rc.cpp:1
+msgid "A typical KMyMoney user maintains a checking a account with some institution and uses it to receive money or pay bills. If this is not the case, please deselect the checkbox below and continue on the next page."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:2
+msgid "I have a checking account that I want to manage with KMyMoney"
+msgstr "Ho un conto corrente che desidero gestire con KMyMoney"
+
+#: wizards/newuserwizard/rc.cpp:3
+msgid "The name of the instititution that issued the account."
+msgstr "Il nome dell'istituto che ha emesso il conto."
+
+#: wizards/newuserwizard/rc.cpp:4
+msgid "Each institution has a routing number. Enter it here. If uncertain, leave the field blank. You can modify it later."
+msgstr "Ogni istituto ha un codice di instradamento. Inseriscilo qui. Nell'incertezza, lascia il campo vuoto. Puoi modificarlo in seguito."
+
+#: wizards/newuserwizard/rc.cpp:5
+msgid "Name of the institution"
+msgstr "Nome dell'istituto"
+
+#: wizards/newuserwizard/rc.cpp:6
+msgid "Routing number"
+msgstr "Coordinate bancarie"
+
+#: wizards/newuserwizard/rc.cpp:7
+msgid "In general the institution that issued the account also issued a number for it. Enter it here. If uncertain, you can modify this entry later."
+msgstr "In generale, l'istituto che ha aperto il conto anche rilasciato un numero di conto. Inseriscilo qui. Se incerto, è possibile modificare questa voce in seguito."
+
+#: wizards/newuserwizard/rc.cpp:8
+msgid "Enter a descriptive name that will be used by KMyMoney to identify your checking account."
+msgstr "Immettere un nome descrittivo che sarà utilizzato da KMyMoney per identificare il tuo conto corrente."
+
+#: wizards/newuserwizard/rc.cpp:10
+msgid "Enter the date from when on you plan to keep track of the transactions in that account. This is usually the date of the last statement. If uncertain, leave as is."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:11
+msgid "Number of the account"
+msgstr "Numero del conto"
+
+#: wizards/newuserwizard/rc.cpp:12
+msgid "Name of the account"
+msgstr "Nome del conto"
+
+#: wizards/newuserwizard/rc.cpp:15
+msgid "Enter the opening balance of the account. This is usually the ending balance of the last statement. If uncertain, leave as is."
+msgstr "Inserisci il bilancio di apertura del conto. Solitamente corrisponde al bilancio di chiusura dell'ultimo estratto conto. In caso di incertezza, non modificarlo."
+
+#: wizards/newuserwizard/rc.cpp:16
+msgid "The fields below allow you to enter some information about your checking account. Once this wizard finishes, the account will be created for you within KMyMoney."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:17
+msgid "KMyMoney supports multiple currencies. Your reports will be based on a default curreny which you can select here. The default for new accounts is also the currency you select here."
+msgstr "KMyMoney supporta diverse valute. I tuoi report saranno basati su una valuta predefinita che puoi selezionare qui. Anche l'impostazione predefinita della valuta dei nuovi conti sarà la valuta selezionata qui."
+
+#: wizards/newuserwizard/rc.cpp:18
+msgid "KMyMoney will store your financial data in a file on the disk. A standard filename within your KDE user environment will be the default. This is just provided for convenience and you can choose any other location here."
+msgstr "KMyMoney archivierà i tuoi dati finanziari in un file sul disco. Un nome file standard all'interno del tuo ambiente KDE sarà preimpostato. Questo nome file è fornito solo per convenienza e qui puoi scegliere di salvarlo in qualsiasi altra posizione."
+
+#: wizards/newuserwizard/rc.cpp:19
+msgid ""
+"Either the currently selected file exists or the selected directory does not exist. Please make sure, that\n"
+"\n"
+"<ul>\n"
+"<li>the selected directory exists and</li>\n"
+"<li>the filename is not currently used in this directory.</li>\n"
+"</ul>"
+msgstr ""
+"Il file attualmente selezionato esiste o la cartella selezionata non esiste. Assicurati che:\n"
+"\n"
+"<ul>\n"
+"<li>la cartella selezionata esista e</li>\n"
+"<li>il nome file non sia attualmente usato in questa cartella.</li>\n"
+"</ul>"
+
+#: wizards/newuserwizard/rc.cpp:20
+msgid "This finishes the setup of your KMyMoney environment. You can now press the Finish button and start using KMyMoney to record your financial transactions."
+msgstr "Qui si conclude l'impostazione del tuo ambiente di KMyMoney. Puoi ora premere il tasto Fine ed iniziare a usare KMyMoney per registrare le tue transazioni finanziarie."
+
+#: wizards/newuserwizard/rc.cpp:21
+msgid ""
+"Please enter some information about yourself.<br><br>\n"
+"\n"
+"This information will be seen and used only by you. The information is used to personalize KMyMoney, to encrypt your file, etc."
+msgstr ""
+"Inserire le proprie informazioni personali.<br><br>\n"
+"\n"
+"Tutte le informazioni saranno visibili e utilizzate solo dall'utente. Sono destinate alla personalizzazione di KMyMoney, alla cifratura dei file, ecc."
+
+#: wizards/newuserwizard/rc.cpp:28
+msgid "Zip code"
+msgstr "Codice postale"
+
+#: wizards/newuserwizard/rc.cpp:30
+msgid "Welcome to KMyMoney!"
+msgstr "Benvenuti in KMyMoney!"
+
+#: wizards/newuserwizard/rc.cpp:31
+msgid ""
+"You have started KMyMoney for the first time on this computer. Before this program can help you to manage your finances, it needs to collect some data from you.<p>\n"
+"\n"
+"On the next few pages you will be guided through the steps necessary to setup the program. This will happen only once."
+msgstr ""
+"Hai avviato KMyMoney per la prima volta su questo computer. Prima che questo programma possa aiutarti a gestire le tue finanze, deve raccogliere alcuni dati da te.<p>\n"
+"\n"
+"Nelle prossime poche pagine sarai guidato attraverso i passi necessari per impostare il programma. Questa procedura è richiesta una sola volta."
+
+#: wizards/newuserwizard/rc.cpp:32
+msgid "<p>KMyMoney can encrypt your datafile using GPG Encryption. GPG encryption is one of the most secure methods in the world for protecting data. All of your account numbers and other important financial information will be very secure.</p>"
+msgstr "<p>KmyMoney può cifrare i tuoi dati utilizzando la cifratura di GPG. La cifratura di GPG è uno dei metodi più sicuri al mondo per proteggere i dati. Tutti i tuoi numeri di conto e altre importanti informazioni finanziarie saranno molto protette</p>"
+
+#: wizards/newuserwizard/rc.cpp:33
+msgid "If you would like to review or change any preference settings for KMyMoney at this time, you can do so here. If not just click <b>Next</b>."
+msgstr "Se desideri rivedere o modificare qualsiasi impostazione o preferenza per KMyMoney a questo punto, puoi farlo qui. Altrimenti premi <b>Continua</b>"
+
+#: wizards/newuserwizard/rc.cpp:34
+msgid "Configure preferences now"
+msgstr "Imposta le preferenze ora"
+
+#: wizards/newuserwizard/rc.cpp:35
+msgid "You can change the configuration options at any time using the configuration dialog. Just select the <b>Configure KMyMoney...</b> option in the <b>Settings</b> menu."
+msgstr ""
+
+#: dialogs/rc.cpp:83
+#: dialogs/rc.cpp:411
+#: dialogs/rc.cpp:435
+#: kmymoneyutils.cpp:92
+#: kmymoneyutils.cpp:105
+#: mymoney/mymoneyaccount.cpp:753
+#: mymoney/mymoneysecurity.cpp:160
+msgid "Stock"
+msgstr "Azione"
+
+#: dialogs/rc.cpp:84
+#: dialogs/rc.cpp:412
+#: dialogs/rc.cpp:436
+#: kmymoneyutils.cpp:107
+#: mymoney/mymoneysecurity.cpp:163
+msgid "Mutual Fund"
+msgstr "Fondi comuni"
+
+#: dialogs/rc.cpp:85
+#: dialogs/rc.cpp:413
+#: dialogs/rc.cpp:437
+#: kmymoneyutils.cpp:109
+#: mymoney/mymoneysecurity.cpp:166
+msgid "Bond"
+msgstr "Obbligazione"
+
+#: mymoney/mymoneysecurity.cpp:172
+#: reports/querytable.cpp:1150
+#: widgets/kmymoneyaccountselector.cpp:76
+msgid "None"
+msgstr "Niente"
+
+#: dialogs/rc.cpp:46
+#: kmymoneyutils.cpp:402
+#: mymoney/mymoneyaccount.cpp:759
+#: mymoney/mymoneyscheduled.cpp:1002
+#: mymoney/mymoneysecurity.cpp:175
+#: views/kforecastview.cpp:174
+#: widgets/register.cpp:54
+#: widgets/register.cpp:485
+#: widgets/transaction.cpp:708
+#: widgets/transaction.cpp:1459
+msgid "Unknown"
+msgstr "Sconosciuto"
+
+#: mymoney/storage/mymoneystoragesql.cpp:191
+msgid ""
+"Database apparently in use\n"
+"Opened by %1 on %2 at %3.\n"
+"Open anyway?"
+msgstr ""
+"Database apparentemente in uso\n"
+"Aperto da %1 il %2 alle %3.\n"
+"Aprire comunque?"
+
+#: mymoney/storage/mymoneystoragesql.cpp:229
+msgid "Cannot currently create database for driver %1; please create manually"
+msgstr "Al momento non è possibile creare il database per il driver %1; crealo manualmente"
+
+#: mymoney/storage/mymoneystoragesql.cpp:244
+msgid "Error in create database %1; do you have create permissions?"
+msgstr "Errore nella creazione del database %1; hai i permessi per la creazione?"
+
+#: converter/mymoneygncreader.cpp:1329
+#: mymoney/storage/mymoneystoragexml.cpp:166
+msgid "Loading transactions..."
+msgstr "Caricamento transazioni..."
+
+#: converter/mymoneygncreader.cpp:1190
+#: mymoney/storage/mymoneystoragexml.cpp:173
+msgid "Loading accounts..."
+msgstr "Caricamento dei conti..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:180
+msgid "Loading securities..."
+msgstr "Caricamento strumenti finanziari..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:187
+msgid "Loading reports..."
+msgstr "Caricamento report..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:268
+msgid "Unknown XML tag %1 found in line %2"
+msgstr "Tag XML %1 sconosciuto trovato alla riga %2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:274
+msgid "Exception while creating a %1 element: %2"
+msgstr "Eccezione durante la creazione di un elemento %1: %2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:513
+msgid "Loading file information..."
+msgstr "Caricamento informazioni sul file..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:591
+msgid "Loading user information..."
+msgstr "Caricamento informazioni utente..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:655
+msgid "Saving accounts..."
+msgstr "Salvataggio conti..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:678
+msgid "Saving transactions..."
+msgstr "Salvataggio transazioni..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:747
+msgid "Saving reports..."
+msgstr "Salvataggio report..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:762
+msgid "Saving budgets..."
+msgstr "Salvataggio budget..."
+
+#: mymoney/storage/mymoneystoragedump.cpp:414
+msgid "not reconciled"
+msgstr "non riconciliata"
+
+#: mymoney/storage/mymoneystoragedump.cpp:417
+msgid "cleared"
+msgstr "compensata"
+
+#: mymoney/storage/mymoneystoragedump.cpp:420
+msgid "reconciled"
+msgstr "riconciliato"
+
+#: mymoney/storage/mymoneystoragedump.cpp:423
+msgid "frozen"
+msgstr "congelato"
+
+#: mymoney/storage/mymoneystoragedump.cpp:426
+msgid "unknown"
+msgstr "sconosciuto"
+
+#: mymoney/mymoneyaccount.cpp:101
+msgid "Account %1 contains an opening balance. Please use a KMyMoney version >= 0.8 and < 0.9 to correct the problem."
+msgstr "Il conto %1 contiene un bilancio di apertura. Usare una versione di KMyMoney >= 0.8 e <0.9 per correggere il problema."
+
+#: mymoney/mymoneyaccount.cpp:597
+msgid ""
+"_: Brokerage (suffix for account names)\n"
+"Brokerage"
+msgstr "Intermediazione"
+
+#: kmymoneyutils.cpp:74
+#: mymoney/mymoneyaccount.cpp:726
+msgid "Certificate of Deposit"
+msgstr "Certificato di deposito"
+
+#: kmymoneyutils.cpp:78
+#: mymoney/mymoneyaccount.cpp:732
+msgid "Money Market"
+msgstr "Mercato monetario"
+
+#: converter/mymoneytemplate.cpp:186
+#: converter/mymoneytemplate.cpp:187
+#: dialogs/knewaccountdlg.cpp:1018
+#: kmymoneyutils.cpp:86
+#: mymoney/mymoneyaccount.cpp:744
+#: views/kaccountsview.cpp:360
+#: views/kbudgetview.cpp:372
+#: views/kcategoriesview.cpp:178
+#: views/khomeview.cpp:1813
+#: views/kmymoneyview.cpp:767
+#: widgets/kmymoneyaccountselector.cpp:68
+#: widgets/kmymoneyaccountselector.cpp:179
+#: widgets/kmymoneyaccountselector.cpp:370
+#: widgets/register.cpp:828
+msgid "Income"
+msgstr "Entrate"
+
+#: converter/mymoneytemplate.cpp:190
+#: converter/mymoneytemplate.cpp:191
+#: dialogs/knewaccountdlg.cpp:1020
+#: kmymoneyutils.cpp:88
+#: mymoney/mymoneyaccount.cpp:747
+#: views/kaccountsview.cpp:364
+#: views/kbudgetview.cpp:378
+#: views/kcategoriesview.cpp:182
+#: views/kmymoneyview.cpp:768
+#: widgets/kmymoneyaccountselector.cpp:72
+#: widgets/kmymoneyaccountselector.cpp:180
+#: widgets/kmymoneyaccountselector.cpp:380
+#: widgets/register.cpp:829
+msgid "Expense"
+msgstr "Uscite"
+
+#: kmymoneyutils.cpp:90
+#: mymoney/mymoneyaccount.cpp:750
+msgid "Investment Loan"
+msgstr "Prestito d'Investimento"
+
+#: mymoney/mymoneyfile.cpp:47
+msgid "Opening Balances"
+msgstr "Saldi iniziali"
+
+#: mymoney/mymoneyfile.cpp:398
+msgid "Cannot remove transaction that references a closed account."
+msgstr "Impossibile rimuovere transazioni di investimento che si riferiscono ad un conto chiuso."
+
+#: mymoney/mymoneyfile.cpp:1414
+#: mymoney/mymoneyfile.cpp:1433
+#: mymoney/mymoneyfile.cpp:1447
+#: mymoney/mymoneyfile.cpp:1469
+msgid "* Problem with account '%1'"
+msgstr "* Problema con il conto '%1'"
+
+#: mymoney/mymoneyfile.cpp:1419
+msgid " * Parent account '%1' belongs to a different group."
+msgstr " * Il conto padre '%1' appartiene a un gruppo diverso."
+
+#: mymoney/mymoneyfile.cpp:1420
+#: mymoney/mymoneyfile.cpp:1450
+msgid " New parent account is the top level account '%1'."
+msgstr " Il nuovo conto padre è il conto principale '%1'."
+
+#: mymoney/mymoneyfile.cpp:1436
+msgid " * Parent account '%1' does not contain '%2' as sub-account."
+msgstr " * Il conto padre '%1' non contiene '%2' come sottoconto."
+
+#: mymoney/mymoneyfile.cpp:1449
+msgid " * The parent with id %1 does not exist anymore."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1471
+msgid " * Child account with id %1 does not exist anymore."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1472
+msgid " The child account list will be reconstructed."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1492
+msgid " * Unable to update account data in engine."
+msgstr " * Impossibile aggiornare i dati del conto nel motore."
+
+#: mymoney/mymoneyfile.cpp:1499
+msgid "* Reconstructing the child lists for"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1536
+msgid " * Unable to update account data for account %1 in engine"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1554
+msgid " * Payee %1 recreated with fixed id"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1583
+msgid " * Payee id updated in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1596
+#, fuzzy
+msgid " * shares set to value in split of transaction '%1'."
+msgstr "Premi qui per pulire tutte le divisioni di questa transazione"
+
+#: mymoney/mymoneyfile.cpp:1599
+#, fuzzy
+msgid " * value set to shares in split of transaction '%1'."
+msgstr "Premi qui per pulire tutte le divisioni di questa transazione"
+
+#: mymoney/mymoneyfile.cpp:1605
+msgid " * Split %2 in transaction '%1' contains a reference to invalid account %3. Please fix manually."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1616
+#, fuzzy
+msgid " * action marked as interest in split of transaction '%1'."
+msgstr "Premi qui per pulire tutte le divisioni di questa transazione"
+
+#: mymoney/mymoneyfile.cpp:1643
+msgid " * Payee id updated in split of schedule '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1649
+msgid " * Split in scheduled transaction '%1' contained value != 0 and shares == 0."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1650
+msgid " Shares set to value."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1658
+#, fuzzy
+msgid " * Removed bankid from split in scheduled transaction '%1'."
+msgstr "Premi qui per pulire tutte le divisioni di questa transazione"
+
+#: mymoney/mymoneyfile.cpp:1671
+#, fuzzy
+msgid " * shares set to value in split in schedule '%1'."
+msgstr "Premi qui per pulire tutte le divisioni di questa transazione"
+
+#: mymoney/mymoneyfile.cpp:1674
+#, fuzzy
+msgid " * value set to shares in split in schedule '%1'."
+msgstr "Premi qui per pulire tutte le divisioni di questa transazione"
+
+#: mymoney/mymoneyfile.cpp:1680
+msgid " * Split %2 in schedule '%1' contains a reference to invalid account %3. Please fix manually."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1706
+msgid " * Payee id updated in report '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1723
+msgid " * Payee '%1' removed."
+msgstr " * Creditore '%1' rimosso."
+
+#: mymoney/mymoneyfile.cpp:1730
+msgid "Finish! Data is consistent."
+msgstr "Completato! I dati sono consistenti."
+
+#: mymoney/mymoneyfile.cpp:1732
+msgid "Finish! %1 problem(s) corrected. %2 problem(s) still present."
+msgstr "Completato! %1 problemi corretti. %2 problemi ancora presenti."
+
+#: mymoney/mymoneyscheduled.cpp:873
+#: mymoney/mymoneyscheduled.cpp:918
+#: mymoney/mymoneyscheduled.cpp:969
+#: mymoney/mymoneyscheduled.cpp:1265
+#: mymoney/mymoneyscheduletest.cpp:1336
+msgid "Once"
+msgstr "Una volta"
+
+#: mymoney/mymoneyscheduled.cpp:875
+#: mymoney/mymoneyscheduled.cpp:924
+#: mymoney/mymoneyscheduled.cpp:1267
+#: mymoney/mymoneyscheduletest.cpp:1337
+#: widgets/rc.cpp:72
+msgid "Daily"
+msgstr "Giornalmente"
+
+#: mymoney/mymoneyscheduled.cpp:877
+#: mymoney/mymoneyscheduled.cpp:931
+#: mymoney/mymoneyscheduled.cpp:1269
+#: mymoney/mymoneyscheduletest.cpp:1338
+#: widgets/rc.cpp:73
+msgid "Weekly"
+msgstr "Settimanalmente"
+
+#: mymoney/mymoneyscheduled.cpp:881
+#: mymoney/mymoneyscheduled.cpp:932
+#: mymoney/mymoneyscheduled.cpp:1273
+#: mymoney/mymoneyscheduletest.cpp:1339
+msgid "Every other week"
+msgstr "Ogni altra settimana"
+
+#: mymoney/mymoneyscheduled.cpp:879
+#: mymoney/mymoneyscheduled.cpp:1271
+#: mymoney/mymoneyscheduletest.cpp:1340
+msgid "Fortnightly"
+msgstr "Ogni quindici giorni"
+
+#: mymoney/mymoneyscheduled.cpp:883
+#: mymoney/mymoneyscheduled.cpp:941
+#: mymoney/mymoneyscheduled.cpp:1275
+#: mymoney/mymoneyscheduletest.cpp:1341
+msgid "Every half month"
+msgstr "Ogni mezzo mese"
+
+#: mymoney/mymoneyscheduled.cpp:887
+#: mymoney/mymoneyscheduled.cpp:934
+#: mymoney/mymoneyscheduled.cpp:1279
+#: mymoney/mymoneyscheduletest.cpp:1342
+msgid "Every four weeks"
+msgstr "Ogni quattro settimane"
+
+#: mymoney/mymoneyscheduled.cpp:893
+#: mymoney/mymoneyscheduled.cpp:935
+#: mymoney/mymoneyscheduled.cpp:1285
+#: mymoney/mymoneyscheduletest.cpp:1344
+msgid "Every eight weeks"
+msgstr "Ogni otto settimane"
+
+#: mymoney/mymoneyscheduled.cpp:895
+#: mymoney/mymoneyscheduled.cpp:948
+#: mymoney/mymoneyscheduled.cpp:1287
+#: mymoney/mymoneyscheduletest.cpp:1345
+msgid "Every two months"
+msgstr "Ogni due mesi"
+
+#: mymoney/mymoneyscheduled.cpp:897
+#: mymoney/mymoneyscheduled.cpp:949
+#: mymoney/mymoneyscheduled.cpp:1289
+#: mymoney/mymoneyscheduletest.cpp:1346
+msgid "Every three months"
+msgstr "Ogni tre mesi"
+
+#: mymoney/mymoneyscheduled.cpp:899
+#: mymoney/mymoneyscheduled.cpp:1291
+#: mymoney/mymoneyscheduletest.cpp:1347
+#: widgets/rc.cpp:76
+msgid "Quarterly"
+msgstr "Ogni quadrimestre"
+
+#: mymoney/mymoneyscheduled.cpp:901
+#: mymoney/mymoneyscheduled.cpp:950
+#: mymoney/mymoneyscheduled.cpp:1293
+#: mymoney/mymoneyscheduletest.cpp:1348
+msgid "Every four months"
+msgstr "Ogni quattro mesi"
+
+#: mymoney/mymoneyscheduled.cpp:903
+#: mymoney/mymoneyscheduled.cpp:951
+#: mymoney/mymoneyscheduled.cpp:1295
+#: mymoney/mymoneyscheduletest.cpp:1349
+msgid "Twice yearly"
+msgstr "Due volte all'anno"
+
+#: mymoney/mymoneyscheduled.cpp:905
+#: mymoney/mymoneyscheduled.cpp:957
+#: mymoney/mymoneyscheduled.cpp:1297
+#: mymoney/mymoneyscheduletest.cpp:1350
+#: widgets/rc.cpp:20
+#: widgets/rc.cpp:77
+msgid "Yearly"
+msgstr "Annualmente"
+
+#: mymoney/mymoneyscheduled.cpp:907
+#: mymoney/mymoneyscheduled.cpp:958
+#: mymoney/mymoneyscheduled.cpp:1299
+#: mymoney/mymoneyscheduletest.cpp:1351
+msgid "Every other year"
+msgstr "Ogni due anni"
+
+#: mymoney/mymoneyscheduled.cpp:870
+#: mymoney/mymoneyscheduled.cpp:913
+#: mymoney/mymoneyscheduled.cpp:966
+msgid "Any"
+msgstr "Qualsiasi"
+
+#: mymoney/mymoneyscheduled.cpp:885
+#: mymoney/mymoneyscheduled.cpp:933
+#: mymoney/mymoneyscheduled.cpp:1277
+msgid "Every three weeks"
+msgstr "Ogni tre settimane"
+
+#: mymoney/mymoneyscheduled.cpp:889
+#: mymoney/mymoneyscheduled.cpp:925
+#: mymoney/mymoneyscheduled.cpp:1281
+msgid "Every thirty days"
+msgstr "Ogni trenta giorni"
+
+#: mymoney/mymoneyscheduled.cpp:971
+msgid "Day"
+msgstr "Giorno"
+
+#: mymoney/mymoneyscheduled.cpp:973
+#: reports/listtable.cpp:206
+#: widgets/kmymoneycalendar.cpp:123
+#: widgets/rc.cpp:97
+msgid "Week"
+msgstr "Settimana"
+
+#: mymoney/mymoneyscheduled.cpp:975
+msgid "Half-month"
+msgstr "Metà del mese"
+
+#: mymoney/mymoneyscheduled.cpp:977
+#: reports/listtable.cpp:205
+#: widgets/kmymoneycalendar.cpp:124
+#: widgets/rc.cpp:96
+msgid "Month"
+msgstr "Mese"
+
+#: dialogs/rc.cpp:400
+#: mymoney/mymoneyscheduled.cpp:979
+#: views/rc.cpp:14
+msgid "Year"
+msgstr "Anno"
+
+#: mymoney/mymoneyscheduled.cpp:989
+msgid "Bill"
+msgstr "Addebito"
+
+#: dialogs/rc.cpp:107
+#: dialogs/rc.cpp:162
+#: dialogs/rc.cpp:249
+#: dialogs/rc.cpp:754
+#: mymoney/mymoneyscheduled.cpp:992
+#: widgets/kmymoneycombo.cpp:420
+#: widgets/register.cpp:571
+msgid "Deposit"
+msgstr "Deposito"
+
+#: mymoney/mymoneyscheduled.cpp:995
+#: reports/querytable.cpp:594
+#: reports/querytable.cpp:696
+#: widgets/kmymoneycombo.cpp:419
+msgid "Transfer"
+msgstr "Trasferimento"
+
+#: mymoney/mymoneyscheduled.cpp:1035
+msgid "Any (Error)"
+msgstr "Qualsiasi (Errore)"
+
+#: dialogs/rc.cpp:114
+#: mymoney/mymoneyscheduled.cpp:1047
+msgid "Change the date to the previous Friday"
+msgstr "Cambia la data al Venerdì precedente"
+
+#: dialogs/rc.cpp:115
+#: mymoney/mymoneyscheduled.cpp:1050
+msgid "Change the date to the next Monday"
+msgstr "Cambia la data al Lunedì successivo"
+
+#: mymoney/mymoneyscheduled.cpp:1053
+msgid "Do Nothing"
+msgstr "Non fare niente"
+
+#: kmymoney2.cpp:312
+msgid "Open database..."
+msgstr "Apri database..."
+
+#: kmymoney2.cpp:313
+msgid "Save as database..."
+msgstr "Salva come database..."
+
+#: kmymoney2.cpp:314
+msgid "Backup..."
+msgstr "Backup..."
+
+#: kmymoney2.cpp:315
+#: kmymoney2.cpp:321
+msgid "QIF..."
+msgstr "QIF..."
+
+#: kmymoney2.cpp:316
+msgid "Gnucash..."
+msgstr "GnuCash..."
+
+#: kmymoney2.cpp:317
+msgid "Statement file..."
+msgstr "File estratto conto..."
+
+#: kmymoney2.cpp:319
+#: kmymoney2.cpp:320
+msgid "Account Template..."
+msgstr "Modello di conto..."
+
+#: kmymoney2.cpp:322
+msgid "Personal Data..."
+msgstr "Dati personali..."
+
+#: kmymoney2.cpp:325
+msgid "Dump Memory"
+msgstr "Dump della memoria"
+
+#: kmymoney2.cpp:327
+msgid "File-Information..."
+msgstr "Informazioni sul file..."
+
+#: kmymoney2.cpp:332
+msgid "Find transaction..."
+msgstr "Trova transazione..."
+
+#: kmymoney2.cpp:337
+msgid "Show Transaction Detail"
+msgstr "Mostra dettagli della transazione"
+
+#: kmymoney2.cpp:338
+#: rc.cpp:60
+msgid "Hide reconciled transactions"
+msgstr "Nascondi transazioni riconciliate"
+
+#: kmymoney2.cpp:339
+#: rc.cpp:57
+msgid "Hide unused categories"
+msgstr "Nascondi categorie inutilizzate"
+
+#: kmymoney2.cpp:340
+msgid "Show all accounts"
+msgstr "Mostra tutti i conti"
+
+#: kmymoney2.cpp:345
+msgid "New institution..."
+msgstr "Nuovo istituto..."
+
+#: kmymoney2.cpp:346
+msgid "Edit institution..."
+msgstr "Modifica istituto..."
+
+#: kmymoney2.cpp:347
+msgid "Delete institution..."
+msgstr "Elimina istituto..."
+
+#: kmymoney2.cpp:352
+msgid "New account..."
+msgstr "Nuovo conto..."
+
+#: kmymoney2.cpp:354
+msgid "Open ledger"
+msgstr "Apri libro mastro"
+
+#: kmymoney2.cpp:355
+msgid "Reconcile..."
+msgstr "Riconcilia..."
+
+#: kmymoney2.cpp:356
+msgid ""
+"_: Finish reconciliation\n"
+"Finish"
+msgstr "Fine"
+
+#: kmymoney2.cpp:357
+msgid ""
+"_: Postpone reconciliation\n"
+"Postpone"
+msgstr "Rinvia"
+
+#: kmymoney2.cpp:358
+msgid "Edit account..."
+msgstr "Modifica conto..."
+
+#: kmymoney2.cpp:359
+msgid "Delete account..."
+msgstr "Elimina conto..."
+
+#: kmymoney2.cpp:360
+msgid "Close account"
+msgstr "Chiudi conto"
+
+#: kmymoney2.cpp:361
+msgid "Reopen account"
+msgstr "Riapri conto"
+
+#: kmymoney2.cpp:362
+msgid "Transaction report"
+msgstr "Report della transazione"
+
+#: kmymoney2.cpp:364
+msgid "Show balance chart..."
+msgstr "Mostra rendiconto..."
+
+#: kmymoney2.cpp:366
+msgid "Map to online account"
+msgstr "Mappa su un conto online"
+
+#: kmymoney2.cpp:367
+msgid "Unmap account"
+msgstr "Rimuovi mappa conto"
+
+#: dialogs/settings/rc.cpp:126
+#: kmymoney2.cpp:368
+#: views/kpayeesview.cpp:363
+#: widgets/rc.cpp:50
+msgid "Update"
+msgstr "Aggiorna"
+
+#: kmymoney2.cpp:372
+msgid "Update account..."
+msgstr "Aggiorna conto..."
+
+#: kmymoney2.cpp:373
+msgid "Update all accounts..."
+msgstr "Aggiorna tutti i conti..."
+
+#: kmymoney2.cpp:378
+msgid "New category..."
+msgstr "Nuova categoria..."
+
+#: kmymoney2.cpp:379
+msgid "Edit category..."
+msgstr "Modifica categoria..."
+
+#: kmymoney2.cpp:380
+msgid "Delete category..."
+msgstr "Elimina categoria..."
+
+#: kmymoney2.cpp:386
+msgid "QIF Profile Editor..."
+msgstr "Editor profilo QIF..."
+
+#: kmymoney2.cpp:387
+msgid "Securities..."
+msgstr "Strumenti finanziari..."
+
+#: kmymoney2.cpp:388
+msgid "Currencies..."
+msgstr "Valute..."
+
+#: kmymoney2.cpp:389
+msgid "Prices..."
+msgstr "Prezzi..."
+
+#: kmymoney2.cpp:390
+msgid "Update Stock and Currency Prices..."
+msgstr "Aggiorna prezzi di azioni e valute..."
+
+#: kmymoney2.cpp:391
+msgid "Consistency Check"
+msgstr "Controllo di consistenza"
+
+#: kmymoney2.cpp:392
+msgid "Performance-Test"
+msgstr "Test prestazioni"
+
+#: kmymoney2.cpp:393
+msgid "KCalc..."
+msgstr "KCalc..."
+
+#: kmymoney2.cpp:399
+msgid "Enable all messages"
+msgstr "Abilita tutti i messaggi"
+
+#: kmymoney2.cpp:400
+msgid "KDE language settings..."
+msgstr "Impostazioni della lingua di KDE..."
+
+#: kmymoney2.cpp:405
+msgid "&Show tip of the day"
+msgstr "&Suggerimento del giorno"
+
+#: kmymoney2.cpp:410
+msgid ""
+"_: New transaction button\n"
+"New"
+msgstr "Nuova"
+
+#: kmymoney2.cpp:415
+msgid ""
+"_: Edit transaction button\n"
+"Edit"
+msgstr "Modifica"
+
+#: kmymoney2.cpp:417
+msgid ""
+"_: Enter transaction\n"
+"Enter"
+msgstr "Inserisci"
+
+#: kmymoney2.cpp:420
+msgid ""
+"_: Edit split button\n"
+"Edit splits"
+msgstr "Modifica suddivisioni"
+
+#: kmymoney2.cpp:421
+msgid ""
+"_: Cancel transaction edit\n"
+"Cancel"
+msgstr "Annulla"
+
+#: kmymoney2.cpp:422
+msgid ""
+"_: Delete transaction\n"
+"Delete"
+msgstr "Elimina"
+
+#: kmymoney2.cpp:423
+msgid ""
+"_: Duplicate transaction\n"
+"Duplicate"
+msgstr "Duplica"
+
+#: kmymoney2.cpp:425
+#: kmymoney2.cpp:4826
+#: kmymoney2.cpp:5107
+msgid ""
+"_: Button text for match transaction\n"
+"Match"
+msgstr "Verifica"
+
+#: kmymoney2.cpp:426
+msgid ""
+"_: Accept 'imported' and 'matched' transaction\n"
+"Accept"
+msgstr "Accetta"
+
+#: kmymoney2.cpp:428
+msgid ""
+"_: Toggle reconciliation flag\n"
+"Toggle"
+msgstr "Commuta"
+
+#: kmymoney2.cpp:429
+msgid ""
+"_: Mark transaction cleared\n"
+"Cleared"
+msgstr "Compensata"
+
+#: kmymoney2.cpp:430
+msgid ""
+"_: Mark transaction reconciled\n"
+"Reconciled"
+msgstr "Riconciliata"
+
+#: kmymoney2.cpp:431
+msgid ""
+"_: Mark transaction not reconciled\n"
+"Not reconciled"
+msgstr "Non riconciliata"
+
+#: kmymoney2.cpp:432
+msgid ""
+"_: Select all transactions\n"
+"Select all"
+msgstr "Seleziona tutte"
+
+#: kmymoney2.cpp:434
+#: kmymoney2.cpp:5497
+msgid "Goto account"
+msgstr "Vai al conto"
+
+#: kmymoney2.cpp:435
+#: kmymoney2.cpp:5495
+msgid "Goto payee"
+msgstr "Vai al creditore"
+
+#: kmymoney2.cpp:436
+msgid "Create scheduled transaction..."
+msgstr "Crea transazione pianificata..."
+
+#: kmymoney2.cpp:437
+msgid "Assign next number"
+msgstr "Assegna il prossimo numero"
+
+#: kmymoney2.cpp:438
+msgid ""
+"_: Combine transactions\n"
+"Combine"
+msgstr "Combina"
+
+#: kmymoney2.cpp:440
+msgid "New investment"
+msgstr "Nuovo investimento"
+
+#: kmymoney2.cpp:441
+msgid "Edit investment..."
+msgstr "Modifica investimento..."
+
+#: kmymoney2.cpp:442
+msgid "Delete investment..."
+msgstr "Elimina investimento..."
+
+#: kmymoney2.cpp:443
+msgid "Online price update..."
+msgstr "Aggiornamento in linea dei prezzi..."
+
+#: kmymoney2.cpp:444
+msgid "Manual price update..."
+msgstr "Aggiornamento manuale dei prezzi..."
+
+#: kmymoney2.cpp:446
+msgid "New scheduled transaction..."
+msgstr "Nuova transazione pianificata..."
+
+#: kmymoney2.cpp:447
+msgid "Edit scheduled transaction..."
+msgstr "Modifica transazione pianificata..."
+
+#: kmymoney2.cpp:448
+msgid "Delete scheduled transaction..."
+msgstr "Elimina transazione pianificata..."
+
+#: kmymoney2.cpp:449
+msgid "Duplicate scheduled transaction"
+msgstr "Duplica la transazione pianificata"
+
+#: kmymoney2.cpp:450
+msgid "Enter next transaction..."
+msgstr "Inserisci transazione successiva..."
+
+#: kmymoney2.cpp:451
+msgid "Skip next transaction..."
+msgstr "Salta alla prossima transazione..."
+
+#: kmymoney2.cpp:453
+msgid "New payee"
+msgstr "Nuovo beneficiario"
+
+#: kmymoney2.cpp:454
+msgid "Rename payee"
+msgstr "Rinomina beneficiario"
+
+#: kmymoney2.cpp:455
+msgid "Delete payee"
+msgstr "Elimina beneficiario"
+
+#: kmymoney2.cpp:457
+msgid "New budget"
+msgstr "Nuovo budget"
+
+#: kmymoney2.cpp:458
+msgid "Rename budget"
+msgstr "Rinomina budget"
+
+#: kmymoney2.cpp:459
+msgid "Delete budget"
+msgstr "Elimina budget"
+
+#: kmymoney2.cpp:460
+msgid "Copy budget"
+msgstr "Copia budget"
+
+#: kmymoney2.cpp:461
+msgid "Change budget year"
+msgstr "Cambia anno del budget"
+
+#: kmymoney2.cpp:462
+msgid ""
+"_: Budget based on forecast\n"
+"Forecast"
+msgstr "Previsione"
+
+#: kmymoney2.cpp:467
+#: kmymoney2.cpp:3990
+#: kmymoney2.cpp:3993
+#: kmymoney2.cpp:3999
+msgid "New currency"
+msgstr "Nuova valuta"
+
+#: kmymoney2.cpp:468
+#: kmymoney2.cpp:4021
+#: kmymoney2.cpp:4026
+msgid "Rename currency"
+msgstr "Rinomina valuta"
+
+#: kmymoney2.cpp:469
+#: kmymoney2.cpp:4039
+msgid "Delete currency"
+msgstr "Elimina valuta"
+
+#: dialogs/rc.cpp:69
+#: kmymoney2.cpp:470
+msgid "Select as base currency"
+msgstr "Seleziona come valuta base"
+
+#: kmymoney2.cpp:481
+msgid "View back"
+msgstr "Indietro"
+
+#: kmymoney2.cpp:482
+msgid "View forward"
+msgstr "Avanti"
+
+#: kmymoney2.cpp:611
+msgid "KMyMoney file needs saving. Save ?"
+msgstr "Il file KMyMoney necessita di un salvataggio. Salvare?"
+
+#: kmymoney2.cpp:757
+msgid "Creating new document..."
+msgstr "Creazione del nuovo documento..."
+
+#: kmymoney2.cpp:869
+#: kmymoney2.cpp:884
+msgid "Open a file."
+msgstr "Apri un file."
+
+#: kmymoney2.cpp:872
+msgid ""
+"%1|KMyMoney files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|File di KMyMoney\n"
+"%2|Tutti i file (*.*)"
+
+#: kmymoney2.cpp:873
+msgid "Open File..."
+msgstr "Apri file..."
+
+#: kmymoney2.cpp:925
+#: kstartuplogo.cpp:100
+msgid "Loading file..."
+msgstr "Caricamento file..."
+
+#: kmymoney2.cpp:986
+msgid "<b>%1</b> is either an invalid filename or the file does not exist. You can open another file or create a new one."
+msgstr "<b>%1</b> ha un nome non valido, o il file non esiste. Puoi aprire un altro file o crearne uno nuovo."
+
+#: kmymoney2.cpp:986
+msgid "File not found"
+msgstr "File non trovato"
+
+#: kmymoney2.cpp:989
+msgid "File <b>%1</b> is already opened in another instance of KMyMoney"
+msgstr "Il file <b>%1</b> è già aperto da un'altra istanza di KMyMoney"
+
+#: kmymoney2.cpp:989
+msgid "Duplicate open"
+msgstr "Duplica apertura"
+
+#: kmymoney2.cpp:1001
+msgid "Saving file..."
+msgstr "Salva file..."
+
+#: kmymoney2.cpp:1035
+#: kmymoney2.cpp:1047
+#: kmymoney2.cpp:1071
+#, c-format
+msgid "Additional encryption key(s) to be used: %1"
+msgstr "Chiave/i di cifratura aggiuntiva/e da utilizzare: %1"
+
+#: kmymoney2.cpp:1056
+msgid "Saving file with a new filename..."
+msgstr "Salva file con un nuovo nome..."
+
+#: kmymoney2.cpp:1067
+msgid "Encryption key to be used"
+msgstr "Chiave di cifratura da utilizzare"
+
+#: kmymoney2.cpp:1072
+msgid "Manage additional keys"
+msgstr "Gestisci chiavi aggiuntive"
+
+#: kmymoney2.cpp:1079
+msgid "No encryption"
+msgstr "Nessuna cifratura"
+
+#: kmymoney2.cpp:1102
+msgid ""
+"_: KMyMoney (Filefilter)\n"
+"KMyMoney files"
+msgstr "File di KMyMoney"
+
+#: kmymoney2.cpp:1103
+msgid ""
+"_: XML (Filefilter)\n"
+"XML files"
+msgstr "File XML"
+
+#: kmymoney2.cpp:1104
+msgid ""
+"_: Anonymous (Filefilter)\n"
+"Anonymous files"
+msgstr "File anonimi"
+
+#: kmymoney2.cpp:1105
+msgid "All files"
+msgstr "Tutti i file"
+
+#: kmymoney2.cpp:1193
+msgid "Saving file to database..."
+msgstr "Salvataggio file nel database..."
+
+#: kmymoney2.cpp:1207
+msgid "Cannot save to current database."
+msgstr "Impossibile salvare nel database corrente."
+
+#: kmymoney2.cpp:1225
+msgid "Closing window..."
+msgstr "Chiusura finestra..."
+
+#: kmymoney2.cpp:1228
+#: kmymoney2.cpp:1249
+msgid "The file has been changed, save it ?"
+msgstr "Il file è stato modificato, salvarlo?"
+
+#: kmymoney2.cpp:1339
+#: kmymoney2.cpp:1352
+msgid "Ready."
+msgstr "Pronto."
+
+#: kmymoney2.cpp:1397
+#: kmymoney2.cpp:1433
+msgid "No KMyMoneyFile open"
+msgstr "Nessun file di KMyMoney aperto"
+
+#: kmymoney2.cpp:1401
+msgid "Viewing personal data..."
+msgstr "Visualizzazione dati personali..."
+
+#: kmymoney2.cpp:1408
+msgid "Edit Personal Data"
+msgstr "Modifica dati personali"
+
+#: kmymoney2.cpp:1424
+#, c-format
+msgid "Unable to store user information: %1"
+msgstr "Impossibile memorizzare le informazioni sull'utente: %1"
+
+#: kmymoney2.cpp:1447
+msgid "Importing account templates."
+msgstr "Importa modelli di conto."
+
+#: kmymoney2.cpp:1462
+msgid "Unable to import template(s): %1, thrown in %2:%3"
+msgstr "Impossibile importare il(i) modello(i): %1, in %2: %3"
+
+#: kmymoney2.cpp:1471
+msgid "Exporting account templates."
+msgstr "Esportazione modelli di conto."
+
+#: kmymoney2.cpp:1474
+msgid ""
+"*.kmt|KMyMoney template files\n"
+"*.*|All files"
+msgstr ""
+"*.kmt|Modelli di KMyMoney\n"
+"*.*|Tutti i file"
+
+#: kmymoney2.cpp:1475
+msgid "Save as..."
+msgstr "Salva con nome..."
+
+#: kmymoney2.cpp:1517
+msgid "Importing file..."
+msgstr "Importa file..."
+
+#: kmymoney2.cpp:1552
+#: kmymoney2.cpp:6040
+#: kmymoney2.cpp:6062
+msgid "The statements have been processed with the following results:"
+msgstr ""
+
+#: kmymoney2.cpp:1552
+#: kmymoney2.cpp:1754
+#: kmymoney2.cpp:6040
+#: kmymoney2.cpp:6062
+msgid "Statement stats"
+msgstr "Statistiche estratto conto"
+
+#: kmymoney2.cpp:1602
+msgid "You cannot import GnuCash data into an existing file. Do you wish to save this file?"
+msgstr "Non puoi importare dati GnuCash in un file esistente. Desideri salvare questo file?"
+
+#: kmymoney2.cpp:1615
+msgid "Importing a Gnucash file."
+msgstr "Importazione file GnuCash."
+
+#: kmymoney2.cpp:1618
+msgid ""
+"%1|Gnucash files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|File di Gnucash\n"
+"%2|Tutti i file (*.*)"
+
+#: kmymoney2.cpp:1619
+msgid "Import Gnucash file..."
+msgstr "Importazione del file GnuCash..."
+
+#: kmymoney2.cpp:1658
+msgid "Importing an XML Statement."
+msgstr "Importazione dell'estratto conto in XML."
+
+#: kmymoney2.cpp:1661
+msgid ""
+"%1|XML files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|File XML\n"
+"%2|Tutti i file (*.*)"
+
+#: kmymoney2.cpp:1662
+msgid "Import XML Statement..."
+msgstr "Importazione dell'estratto conto XML..."
+
+#: kmymoney2.cpp:1718
+msgid "Error importing %1: This file is not a valid KMM statement file."
+msgstr "Errore durante l'importazione di %1: Questo file non è un estratto conto KMM valido."
+
+#: kmymoney2.cpp:1718
+msgid "Invalid Statement"
+msgstr "Estratto conto non valido"
+
+#: kmymoney2.cpp:1754
+msgid "The statement has been processed with the following results:"
+msgstr ""
+
+#: kmymoney2.cpp:1763
+msgid "Exporting file..."
+msgstr "Esportazione file..."
+
+#: kmymoney2.cpp:1786
+msgid "The file <b>%1</b> already exists. Do you really want to override it?"
+msgstr "Il file <b>%1</b> esiste già. Vuoi davvero riscriverlo?"
+
+#: kmymoney2.cpp:1786
+msgid "File already exists"
+msgstr "File già esistente"
+
+#: dialogs/rc.cpp:347
+#: dialogs/rc.cpp:649
+#: dialogs/rc.cpp:798
+#: kmymoney2.cpp:1815
+msgid "General"
+msgstr "Generale"
+
+#: kmymoney2.cpp:1816
+msgid "Register"
+msgstr "Registro"
+
+#: kmymoney2.cpp:1817
+#: views/khomeview.cpp:88
+#: views/kmymoneyview.cpp:136
+msgid "Home"
+msgstr "Inizio"
+
+#: kmymoney2.cpp:1818
+#: views/kmymoneyview.cpp:176
+msgid ""
+"Scheduled\n"
+"transactions"
+msgstr ""
+"Transazioni\n"
+"pianificate"
+
+#: kmymoney2.cpp:1819
+msgid "Encryption"
+msgstr "Cifratura"
+
+#: kmymoney2.cpp:1820
+msgid "Colors"
+msgstr "Colori"
+
+#: dialogs/rc.cpp:344
+#: dialogs/settings/rc.cpp:107
+#: kmymoney2.cpp:1822
+#: widgets/rc.cpp:33
+msgid "Online Quotes"
+msgstr "Quotazioni in linea"
+
+#: kmymoney2.cpp:1823
+#: reports/pivottable.cpp:2426
+#: views/kmymoneyview.cpp:251
+#: views/kmymoneyview.cpp:253
+#: views/kreportsview.cpp:1415
+#: views/rc.cpp:41
+msgid "Forecast"
+msgstr "Previsione"
+
+#: kmymoney2.cpp:1824
+msgid "Plugins"
+msgstr "Estensioni"
+
+#: kmymoney2.cpp:1893
+msgid "The file must be saved first before it can be backed up. Do you want to continue?"
+msgstr "Il file sarà salvato prima della creazione del backup. Vuoi davvero continuare?"
+
+#: kmymoney2.cpp:1910
+msgid "The current implementation of the backup functionality only supports local files as source files! Your current source file is '%1'."
+msgstr "L'implementazione attuale della funzionalità di backup supporta solo file locali come sorgenti! Il tuo file corrente è '%1'."
+
+#: kmymoney2.cpp:1913
+msgid "Local files only"
+msgstr "Solo file locali"
+
+#: kmymoney2.cpp:1928
+#, c-format
+msgid "Mounting %1"
+msgstr "Montaggio di %1"
+
+#: kmymoney2.cpp:1967
+msgid "Backup file for today exists on that device. Replace ?"
+msgstr "Il file di backup giornaliero esiste su questo dispositivo. Vuoi sostituirlo?"
+
+#: dialogs/rc.cpp:7
+#: kmymoney2.cpp:1967
+#: kmymoney2.cpp:1994
+#: kmymoney2.cpp:2024
+#: kmymoney2.cpp:2032
+#: kmymoney2.cpp:2057
+#: kmymoney2.cpp:2059
+msgid "Backup"
+msgstr "Backup"
+
+#: kmymoney2.cpp:1967
+msgid "&Replace"
+msgstr "&Sostituisci"
+
+#: kmymoney2.cpp:1972
+#: kmymoney2.cpp:1997
+#: kmymoney2.cpp:2016
+#: kmymoney2.cpp:2035
+#, c-format
+msgid "Unmounting %1"
+msgstr "Smontaggio di %1"
+
+#: kmymoney2.cpp:1987
+#, c-format
+msgid "Writing %1"
+msgstr "Scrittura di %1"
+
+#: kmymoney2.cpp:1994
+msgid "Error mounting device"
+msgstr "Errore in fase di montaggio del dispositivo"
+
+#: converter/mymoneygncreader.cpp:1995
+#: kmymoney2.cpp:2023
+#: kmymoney2.cpp:2055
+msgid "Done"
+msgstr "Fatto"
+
+#: kmymoney2.cpp:2024
+#: kmymoney2.cpp:2057
+msgid "File successfully backed up"
+msgstr "Backup effettuato con successo"
+
+#: kmymoney2.cpp:2032
+msgid "Error copying file to device"
+msgstr "Errore durante la copia del file sul dispositivo"
+
+#: kmymoney2.cpp:2059
+msgid "Error unmounting device"
+msgstr "Errore in fase di smontaggio del dispositivo"
+
+#: kmymoney2.cpp:2143
+#, c-format
+msgid "Cannot add institution: %1"
+msgstr "Impossibile aggiungere l'istituto: %1"
+
+#: kmymoney2.cpp:2185
+#, c-format
+msgid "Unable to store institution: %1"
+msgstr "Impossibile memorizzare l'istituto: %1"
+
+#: kmymoney2.cpp:2192
+#, c-format
+msgid "Unable to edit institution: %1"
+msgstr "Impossibile modificare l'istituto: %1"
+
+#: kmymoney2.cpp:2203
+msgid "Do you really want to delete institution <b>%1</b> ?"
+msgstr "Vuoi davvero eliminare l'istituto <b>%1</b> ?"
+
+#: kmymoney2.cpp:2211
+#: kmymoney2.cpp:2215
+#, c-format
+msgid "Unable to delete institution: %1"
+msgstr "Impossibile eliminare l'istituto: %1"
+
+#: kmymoney2.cpp:2268
+#, c-format
+msgid "Unable to find account: %1"
+msgstr "Impossibile trovare il conto: %1"
+
+#: kmymoney2.cpp:2309
+msgid ""
+"This account is a liability and if the opening balance represents money owed, then it should be negative. Negate the amount?\n"
+"\n"
+"Please click Yes to change the opening balance to %1,\n"
+"Please click No to leave the amount as %2,\n"
+"Please click Cancel to abort the account creation."
+msgstr ""
+"Questo conto è una passività e se il bilancio d'apertura rappresenta denaro di debito, dovrebbero essere in negativo. Rendere negativo l'importo?\n"
+"\n"
+"Fai clic su Sì per cambiare il bilancio d'apertura a %1,\n"
+"Fai clic su No per lasciare l'importo impostato a %2,\n"
+"Fai clic su Annulla per abortire la creazione del conto."
+
+#: kmymoney2.cpp:2345
+#: kmymoney2.cpp:2346
+msgid "Loan payout"
+msgstr "Pagamento prestito"
+
+#: dialogs/knewloanwizard.cpp:892
+#: kmymoney2.cpp:2374
+#, c-format
+msgid "Unable to add account: %1"
+msgstr "Impossibile aggiungere il conto: %1"
+
+#: kmymoney2.cpp:2392
+#, fuzzy
+msgid "The category <b>%1</b> currently does not exist. Do you want to create it?<p><i>The parent account will default to <b>%2</b> but can be changed in the following dialog</i>."
+msgstr "La categoria <b>%1</b> attualmente non esiste. Vuoi crearla? "
+
+#: kmymoney2.cpp:2392
+msgid "Create category"
+msgstr "Crea categoria"
+
+#: kmymoney2.cpp:2429
+msgid "Create a new Category"
+msgstr "Crea una nuova categoria"
+
+#: kmymoney2.cpp:2505
+#, c-format
+msgid "Unable to create account: %1"
+msgstr "Impossibile creare il conto: %1"
+
+#: kmymoney2.cpp:2516
+#, fuzzy
+msgid "The security <b>%1</b> currently does not exist as sub-account of <b>%2</b>. Do you want to create it?"
+msgstr "La categoria <b>%1</b> attualmente non esiste. Vuoi crearla?"
+
+#: kmymoney2.cpp:2517
+msgid "Create security"
+msgstr "Creazione strumento finanziario"
+
+#: kmymoney2.cpp:2551
+msgid "Do you really want to delete the investment <b>%1</b>?"
+msgstr "Vuoi davvero eliminare l'investimento <b>%1</b>?"
+
+#: kmymoney2.cpp:2551
+msgid "Delete investment"
+msgstr "Elimina l'investimento"
+
+#: kmymoney2.cpp:2558
+#, c-format
+msgid "Unable to delete investment: %1"
+msgstr "Impossibile eliminare l'investimento: %1"
+
+#: kmymoney2.cpp:2640
+#: kmymoney2.cpp:2646
+msgid "Unable to add scheduled transaction: "
+msgstr "Impossibile aggiungere la transazione pianificata:"
+
+#: kmymoney2.cpp:2722
+msgid "Adjusting transactions..."
+msgstr "Correzione transazioni ..."
+
+#: kmymoney2.cpp:2747
+msgid "Adjusting scheduled transactions..."
+msgstr "Correzione transazioni pianificate..."
+
+#: kmymoney2.cpp:2765
+msgid "Adjusting budgets..."
+msgstr "Correzione budget ..."
+
+#: kmymoney2.cpp:2783
+msgid "Unable to exchange category <b>%1</b> with category <b>%2</b>. Reason: %3"
+msgstr "Impossibile scambiare la categoria <b>%1</b> con la categoria <b>%2</b>. Motivo: %3"
+
+#: kmymoney2.cpp:2804
+msgid "Do you really want to delete category <b>%1</b>?"
+msgstr "Vuoi davvero eliminare la categoria <b>%1</b>?"
+
+#: kmymoney2.cpp:2811
+msgid "Unable to delete category <b>%1</b>. Cause: %2"
+msgstr "Impossibile rimuovere la categoria <b>%1</b>. Causa: %2"
+
+#: kmymoney2.cpp:2823
+msgid "Do you want to delete category <b>%1</b> with all its sub-categories or only the category itself? If you only delete the category itself, all its sub-categories will be made sub-categories of <b>%2</b>."
+msgstr ""
+
+#: kmymoney2.cpp:2827
+msgid "Delete all"
+msgstr "Elimina tutto"
+
+#: kmymoney2.cpp:2828
+msgid "Just the category"
+msgstr "Solo la categoria"
+
+#: kmymoney2.cpp:2858
+msgid "Some sub-categories of category <b>%1</b> cannot be deleted, because they are still used. They will be made sub-categories of <b>%2</b>. Proceed?"
+msgstr "Alcune sottocategorie della categoria <b>%1</b> non possono essere eliminate perché sono ancora in uso. Saranno rese sottocategorie di <b>%2</b>. Procedere?"
+
+#: kmymoney2.cpp:2878
+msgid "Unable to delete a sub-category of category <b>%1</b>. Reason: %2"
+msgstr "Impossibile eliminare una sottocategoria della categoria <b>%1</b>. Motivo: %2"
+
+#: kmymoney2.cpp:2889
+msgid "Do you really want to delete account <b>%1</b>?"
+msgstr "Vuoi davvero eliminare il conto <b>%1</b>?"
+
+#: kmymoney2.cpp:2901
+msgid "Unable to delete account '%1'. Cause: %2"
+msgstr "Impossibile eliminare il conto '%1'. Motivo: %2 "
+
+#: kmymoney2.cpp:2917
+msgid "Edit account '%1'"
+msgstr "Modifica conto '%1'"
+
+#: kmymoney2.cpp:2922
+msgid "Edit category '%1'"
+msgstr "Modifica categoria '%1'"
+
+#: kmymoney2.cpp:3008
+msgid "Unable to modify account '%1'. Cause: %2"
+msgstr "Impossibile modificare il conto '%1'. Motivo: %2 "
+
+#: kmymoney2.cpp:3065
+#, fuzzy
+msgid "KMyMoney has detected some overdue scheduled transactions for this account. Do you want to enter those scheduled transactions now?"
+msgstr "Almeno una parte delle transazioni selezionate è stata riconciliata. Si desidera eliminare comunque le transazioni?"
+
+#: kmymoney2.cpp:3065
+msgid "Scheduled transactions found"
+msgstr "Trovate transazioni pianificate"
+
+#: kmymoney2.cpp:3163
+msgid ""
+"You are about to finish the reconciliation of this account with a difference between your bank statement and the transactions marked as cleared.\n"
+"Are you sure you want to finish the reconciliation ?"
+msgstr ""
+"Stai per terminare la riconciliazione di questo conto con una differenza tra il tuo estratto conto e le transazioni marcate come compensate.\n"
+"Sei sicuro di voler terminare la riconciliazione?"
+
+#: kmymoney2.cpp:3165
+msgid "Confirm end of reconciliation"
+msgstr "Conferma chiusura della riconciliazione"
+
+#: kmymoney2.cpp:3339
+msgid "You have closed this account. It remains in the system because you have transactions which still refer to it, but is not shown in the views. You can make it visible again by going to the View menu and selecting <b>Show all accounts</b> or by unselecting the <b>Don't show closed accounts</b> setting."
+msgstr ""
+
+#: kmymoney2.cpp:3379
+msgid "<b>%1</b> cannot be moved to institution <b>%2</b>. Reason: %3"
+msgstr "<b>%1</b> non può essere spostato all'istituto <b>%2</b>. Motivo: %3"
+
+#: kmymoney2.cpp:3393
+msgid "<b>%1</b> cannot be moved to <b>%2</b>. Reason: %3"
+msgstr "<b>%1</b> non può essere spostato in <b>%2</b>. Motivo: %3"
+
+#: kmymoney2.cpp:3408
+#, fuzzy
+msgid "%1 YTD Account Transactions"
+msgstr "Transazioni fiscali"
+
+#: dialogs/kbalancechartdlg.cpp:71
+#: kmymoney2.cpp:3409
+#: views/kforecastview.cpp:650
+#: views/khomeview.cpp:276
+#: views/khomeview.cpp:1384
+#: views/kreportsview.cpp:619
+msgid "Generated Report"
+msgstr "Report generato"
+
+#: dialogs/rc.cpp:324
+#: dialogs/settings/rc.cpp:80
+#: kmymoney2.cpp:3411
+#: views/kreportsview.cpp:1062
+#: views/rc.cpp:58
+#: views/rc.cpp:59
+msgid "Transactions"
+msgstr "Transazioni"
+
+#: kmymoney2.cpp:3449
+#, c-format
+msgid "Unable to add scheduled transaction: %1"
+msgstr "Impossibile aggiungere la transazione pianificata: %1"
+
+#: kmymoney2.cpp:3449
+msgid "Add scheduled transaction"
+msgstr "Aggiungi la transazione pianificata"
+
+#: kmymoney2.cpp:3489
+msgid "You have entered a scheduled transaction date of <b>%1</b>. Because the scheduled transaction was last paid on <b>%2</b>, KMyMoney will automatically adjust the scheduled transaction date to the next date unless the last payment date is reset. Do you want to reset the last payment date?"
+msgstr ""
+
+#: kmymoney2.cpp:3489
+msgid "Reset Last Payment Date"
+msgstr "Reimposta l'ultima data di pagamento"
+
+#: kmymoney2.cpp:3499
+#: kmymoney2.cpp:3519
+#: kmymoney2.cpp:3531
+msgid "Unable to modify scheduled transaction '%1'"
+msgstr "Impossibile modificare la transazione pianificata '%1'"
+
+#: kmymoney2.cpp:3543
+#, fuzzy
+msgid "Are you sure you want to delete the scheduled transaction <b>%1</b>?"
+msgstr "Sei sicuro di voler eliminare la pianificazione <b>%1</b>?"
+
+#: kmymoney2.cpp:3546
+#, fuzzy
+msgid "In case of loan payments it is currently not possible to recreate the scheduled transaction."
+msgstr "Nel caso di pagamenti per prestiti non è attualmente possibile ricreare la pianificazione."
+
+#: kmymoney2.cpp:3555
+msgid "Unable to remove scheduled transaction '%1'"
+msgstr "Impossibile rimuovere la transazione pianificata '%1'"
+
+#: kmymoney2.cpp:3569
+#, c-format
+msgid ""
+"_: Copy of scheduled transaction name\n"
+"Copy of %1"
+msgstr "Copia di %1"
+
+#: kmymoney2.cpp:3581
+#: kmymoney2.cpp:4352
+msgid "Unable to duplicate transaction(s): %1, thrown in %2:%3"
+msgstr "Impossibile duplicare la(/e) transazione(/i): %1, lanciata in %2: %3"
+
+#: kmymoney2.cpp:3595
+#, fuzzy
+msgid "Do you really want to skip the <b>%1</b> transaction scheduled for <b>%2</b>?"
+msgstr "Vuoi davvero tralasciare la transazione della pianificazione <b>%1</b> in <b>%2</b>?"
+
+#: kmymoney2.cpp:3605
+msgid "Unable to skip scheduled transaction <b>%1</b>."
+msgstr "Impossibile saltare la transazione pianificata <b>%1</b>."
+
+#: kmymoney2.cpp:3618
+msgid "Unknown scheduled transaction '%1'"
+msgstr "Transazione pianificata sconosciuta '%1'"
+
+#: kmymoney2.cpp:3673
+#, fuzzy
+msgid ""
+"Are you sure you wish to stop this scheduled transaction from being entered into the register?\n"
+"\n"
+"KMyMoney will prompt you again next time it starts unless you manually enter it later."
+msgstr ""
+"Sei sicuro di voler interrompere l'inserimento nel registro di questa pianificazione?\n"
+"\n"
+"KMyMoney ti avviserà al prossimo avvio a meno che tu non la inserisca manualmente."
+
+#: kmymoney2.cpp:3725
+#: kmymoney2.cpp:3732
+msgid "Unable to enter scheduled transaction '%1'"
+msgstr "Impossibile inserire la transazione pianificata '%1'"
+
+#: kmymoney2.cpp:3743
+#: kmymoney2.cpp:3783
+msgid "New Payee"
+msgstr "Nuovo beneficiario"
+
+#: kmymoney2.cpp:3745
+msgid "Do you want to add <b>%1</b> as payer/receiver ?"
+msgstr "Vuoi aggiungere <b>%1</b> come creditore/beneficiario?"
+
+#: converter/mymoneystatementreader.cpp:892
+#: kmymoney2.cpp:3747
+msgid "New payee/receiver"
+msgstr "Nuovo creditore/beneficiario"
+
+#: kmymoney2.cpp:3773
+msgid "Unable to add payee"
+msgstr "Impossibile aggiungere beneficiario"
+
+#: kmymoney2.cpp:3826
+msgid "Do you really want to remove the payee <b>%1</b>?"
+msgstr "Sei sicuro di voler eliminare il beneficiario <b>%1</b>?"
+
+#: kmymoney2.cpp:3828
+msgid "Do you really want to remove all selected payees?"
+msgstr "Sei sicuro di voler eliminare tutti i beneficiari selezionati?"
+
+#: kmymoney2.cpp:3830
+msgid "Remove Payee"
+msgstr "Elimina beneficiario"
+
+#: kmymoney2.cpp:3870
+#, fuzzy
+msgid "At least one transaction/scheduled transaction is still referenced by a payee. Currently you have all payees selected. However, at least one payee must remain so that the transaction/scheduled transaction can be reassigned."
+msgstr "Almeno una transazione/pianificazione fa ancora riferimento alla categoria <b>%1</b>. Tuttavia, almeno una categoria con la stessa valuta deve esistere in modo che le transazioni/pianificazioni possano essere riassegnate."
+
+#: kmymoney2.cpp:3925
+msgid "Unable to reassign payee of transaction/split"
+msgstr "Impossibile riassegnare il beneficiario della transazione/suddivisione"
+
+#: converter/mymoneyqifreader.cpp:534
+#: converter/mymoneystatementreader.cpp:959
+#: kmymoney2.cpp:3926
+#: kmymoney2.cpp:3983
+#: views/kbudgetview.cpp:636
+#: views/kbudgetview.cpp:737
+#: views/kbudgetview.cpp:751
+#: views/kpayeesview.cpp:519
+#: views/kpayeesview.cpp:870
+msgid "thrown in"
+msgstr "introdotto"
+
+#: kmymoney2.cpp:3982
+msgid "Unable to remove payee(s)"
+msgstr "Impossibile eliminare il beneficiario"
+
+#: kmymoney2.cpp:3990
+msgid "Enter ISO 4217 code for the new currency"
+msgstr "Inserisci il codice ISO 4217 per la nuova valuta"
+
+#: kmymoney2.cpp:3999
+#, c-format
+msgid "Cannot create new currency. %1"
+msgstr "Impossibile creare una nuova valuta. %1"
+
+#: kmymoney2.cpp:4021
+#: kmymoney2.cpp:4026
+#, c-format
+msgid "Cannot rename currency. %1"
+msgstr "Impossibile rinominare la valuta. %1"
+
+#: kmymoney2.cpp:4039
+msgid "Cannot delete currency %1. %2"
+msgstr "Impossibile eliminare la valuta %1. %2"
+
+#: kmymoney2.cpp:4054
+#: views/kmymoneyview.cpp:1275
+msgid "Cannot set %1 as base currency: %2"
+msgstr "Impossibile impostare %1 come valuta base: %2"
+
+#: kmymoney2.cpp:4054
+#: views/kmymoneyview.cpp:1275
+msgid "Set base currency"
+msgstr "Imposta la valuta di base"
+
+#: kmymoney2.cpp:4065
+#, c-format
+msgid "Budget %1"
+msgstr "Budget %1"
+
+#: kmymoney2.cpp:4075
+msgid "Budget %1 (%2)"
+msgstr "Budget %1 (%2)"
+
+#: kmymoney2.cpp:4090
+#: kmymoney2.cpp:4139
+msgid "Unable to add budget: %1, thrown in %2:%3"
+msgstr "Impossibile aggiungere il budget: %1 ; lanciata in %2: %3"
+
+#: kmymoney2.cpp:4105
+msgid "Do you really want to remove the budget <b>%1</b>?"
+msgstr "Vuoi davvero rimuovere il budget <b>%1</b>?"
+
+#: kmymoney2.cpp:4107
+msgid "Do you really want to remove all selected budgets?"
+msgstr "Vuoi davvero eliminare tutti i budget selezionati?"
+
+#: kmymoney2.cpp:4109
+msgid "Remove Budget"
+msgstr "Rimuovi budget"
+
+#: kmymoney2.cpp:4122
+msgid "Unable to remove budget: %1, thrown in %2:%3"
+msgstr "Impossibile rimuovere il budget: %1, lanciata in %2:%3"
+
+#: kmymoney2.cpp:4134
+#: views/kreportsview.cpp:659
+#, c-format
+msgid "Copy of %1"
+msgstr "Copia di %1"
+
+#: kmymoney2.cpp:4164
+msgid "Select year"
+msgstr "Seleziona l'anno"
+
+#: kmymoney2.cpp:4164
+msgid "Budget year"
+msgstr "Anno del budget"
+
+#: kmymoney2.cpp:4176
+#: kmymoney2.cpp:4214
+#: kmymoney2.cpp:4274
+msgid "Unable to modify budget: %1, thrown in %2:%3"
+msgstr "Impossibile modificare il budget: %1, lanciata in %2:%3"
+
+#: kmymoney2.cpp:4192
+#: kmymoney2.cpp:4250
+msgid "The current budget already contains data. Continuing will replace all current values of this budget."
+msgstr "Il budget corrente contiene già dei dati. Continuando saranno sostituiti tutti i valori attuali di questo budget"
+
+#: kmymoney2.cpp:4222
+msgid "Please be aware that changes made in the following dialog affect all KDE applications not only KMyMoney."
+msgstr "Attenzione. Le modifiche effettuate nella seguente finestra di dialogo interesseranno tutte le applicazioni KDE, non solo KMyMoney."
+
+#: kmymoney2.cpp:4292
+msgid "At least one split of the selected transactions has been reconciled. Do you wish to delete the transactions anyway?"
+msgstr "Almeno una parte delle transazioni selezionate è stata riconciliata. Si desidera eliminare comunque le transazioni?"
+
+#: kmymoney2.cpp:4295
+#: views/kgloballedgerview.cpp:1043
+msgid "Transaction already reconciled"
+msgstr "Transazione già riconciliata"
+
+#: kmymoney2.cpp:4301
+msgid "Do you really want to delete the selected transaction?"
+msgstr "Vuoi davvero eliminare la transazione selezionata?"
+
+#: kmymoney2.cpp:4303
+msgid "Do you really want to delete all %1 selected transactions?"
+msgstr "Vuoi davvero eliminare le %1 transazioni selezionate?"
+
+#: kmymoney2.cpp:4305
+msgid "Delete transaction"
+msgstr "Eliminare la transazione"
+
+#: kmymoney2.cpp:4306
+msgid "Deleting transactions"
+msgstr "Eliminazione delle transazioni"
+
+#: kmymoney2.cpp:4321
+msgid "Duplicating transactions"
+msgstr "Duplicazione delle transazioni"
+
+#: kmymoney2.cpp:4378
+msgid "Unable to delete transaction(s): %1, thrown in %2:%3"
+msgstr "Impossibile eliminare le transazioni: %1, lanciata in : %2:%3"
+
+#: kmymoney2.cpp:4452
+#: kmymoney2.cpp:4622
+msgid "Unable to modify transaction: %1, thrown in %2:%3"
+msgstr "Impossibile modificare la transazione: %1, lanciata in %2:%3"
+
+#: kmymoney2.cpp:4514
+msgid "Do you really want to cancel editing this transaction without saving it?<p>- <b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the transaction prior to cancelling and<br>- <b>Cancel</b> returns to the transaction editor.<p>You can also select an option to save the transaction automatically when e.g. selecting another transaction."
+msgstr ""
+
+#: kmymoney2.cpp:4514
+#: kmymoney2.cpp:4517
+msgid "Cancel transaction edit"
+msgstr "Annulla la modifica della transazione"
+
+#: kmymoney2.cpp:4517
+msgid "Do you really want to cancel editing this transaction without saving it?<p>- <b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the transaction prior to cancelling.<p>You can also select an option to save the transaction automatically when e.g. selecting another transaction."
+msgstr ""
+
+#: kmymoney2.cpp:4667
+msgid "Unable to accept transaction: %1, thrown in %2:%3"
+msgstr "Impossibile accettare la transazione: %1, lanciata in %2:%3"
+
+#: kmymoney2.cpp:4846
+msgid "Unable to unmatch the selected transactions"
+msgstr ""
+
+#: kmymoney2.cpp:4885
+msgid "No manually entered transaction selected for matching"
+msgstr "Non sono state selezionate transazioni inserite manualmente per la verifica"
+
+#: kmymoney2.cpp:4887
+msgid "No imported transaction selected for matching"
+msgstr "Nessuna transazione importata selezionata per il confronto"
+
+#: kmymoney2.cpp:4895
+msgid "Unable to match the selected transactions"
+msgstr "Impossibile verificare le transazioni selezionate"
+
+#: kmymoney2.cpp:5097
+msgid "Create a new transaction"
+msgstr "Crea una nuova transazione"
+
+#: kmymoney2.cpp:5163
+msgid "Duplicate the current selected transactions"
+msgstr "Duplica le transazioni attualmente selezionate"
+
+#: kmymoney2.cpp:5223
+msgid ""
+"_: Button text for unmatch transaction\n"
+"Unmatch"
+msgstr "Rimuovi corrispondenza"
+
+#: kmymoney2.cpp:5451
+#: kmymoney2.cpp:5473
+msgid "Goto '%1'"
+msgstr "Vai a '%1'"
+
+#: kmymoney2.cpp:5582
+msgid "Running consistency check..."
+msgstr "Esecuzione del controllo di consistenza dei dati..."
+
+#: kmymoney2.cpp:5590
+#, c-format
+msgid "Consistency check failed: %1"
+msgstr "Controllo di consistenza non riuscito: %1"
+
+#: kmymoney2.cpp:5594
+msgid "Consistency check result"
+msgstr "Risultato del controllo di consistenza"
+
+#: kmymoney2.cpp:5603
+#, fuzzy
+msgid "Checking for overdue scheduled transactions..."
+msgstr "Controllo per le pianificazioni arretrate..."
+
+#: kmymoney2.cpp:5740
+msgid "You must first select a KMyMoney file before you can import a statement."
+msgstr "Bisogna prima selezionare un file KMyMoney per importare un estratto conto."
+
+#: kmymoney2.cpp:5746
+msgid "Importing a statement via Web Connect"
+msgstr "Importazione dell'estratto conto via web"
+
+#: kmymoney2.cpp:5759
+msgid "Unable to import %1 using %2 plugin. The plugin returned the following error: %3"
+msgstr "Impossibile importare %1 utilizzando il plugin %2. Il plugin ha restituito il seguente errore: %3"
+
+#: kmymoney2.cpp:5759
+#: plugins/ofximport/ofximporterplugin.cpp:646
+msgid "Importing error"
+msgstr "Importa errore"
+
+#: kmymoney2.cpp:5780
+msgid "All messages have been enabled."
+msgstr "Tutti i messaggi sono stati abilitati."
+
+#: kmymoney2.cpp:5780
+msgid "All messages"
+msgstr "Tutti i messaggi"
+
+#: kmymoney2.cpp:5855
+msgid "Auto saving..."
+msgstr "Salvataggio automatico..."
+
+#: kmymoney2.cpp:5913
+msgid "Unable to setup online parameters for account ''%1'"
+msgstr "Impossibile configurare i parametri in linea per il conto \"%1\""
+
+#: kmymoney2.cpp:5928
+msgid "Do you really want to remove the mapping of account <b>%1</b> to an online account? Depending on the details of the online banking method used, this action cannot be reverted."
+msgstr ""
+
+#: kmymoney2.cpp:5928
+msgid "Remove mapping to online account"
+msgstr "Rimuovere la mappatura sul conto online"
+
+#: kmymoney2.cpp:5939
+#, fuzzy, c-format
+msgid "Unable to unmap account from online account: %1"
+msgstr "Impossibile mappare il conto sul conto in linea: %1"
+
+#: kmymoney2.cpp:5956
+msgid " (Brokerage)"
+msgstr " (Intermediazione)"
+
+#: kmymoney2.cpp:5957
+msgid "You try to map a brokerage account to an online account. This is usually not advisable. In general, the investment account should be mapped to the online account. Please cancel if you intended to map the investment account, continue otherwise"
+msgstr ""
+
+#: kmymoney2.cpp:5957
+msgid "Mapping brokerage account"
+msgstr "Associazione conto di intermediazione"
+
+#: kmymoney2.cpp:5964
+msgid "Select online banking plugin"
+msgstr "Selezionare il plugin online banking"
+
+#: kmymoney2.cpp:6005
+#, c-format
+msgid "Unable to map account to online account: %1"
+msgstr "Impossibile mappare il conto sul conto in linea: %1"
+
+#: converter/mymoneyqifreader.cpp:407
+#: converter/mymoneytemplate.cpp:73
+#: views/kmymoneyview.cpp:590
+msgid "Error while loading file '%1'!"
+msgstr "Errore nel caricamento del file '%1'!"
+
+#: converter/mymoneyqifreader.cpp:409
+#: converter/mymoneyqifreader.cpp:965
+#: converter/mymoneytemplate.cpp:75
+#: views/kmymoneyview.cpp:592
+msgid "File access error"
+msgstr "Errore nell'accesso al file"
+
+#: converter/mymoneytemplate.cpp:84
+msgid "<b>%1</b> is not a template file."
+msgstr "<b>%1</b> non è un file di tipo modello."
+
+#: converter/mymoneytemplate.cpp:85
+#: views/kmymoneyview.cpp:603
+msgid "Filetype Error"
+msgstr "Errore nel tipo di file"
+
+#: converter/mymoneytemplate.cpp:93
+msgid "Error while reading template file <b>%1</b> in line %2, column %3"
+msgstr "Errore nella lettura del file modello <b>%1</b> alla riga %2, colonna %3"
+
+#: converter/mymoneytemplate.cpp:94
+msgid "Template Error"
+msgstr "Errore modello"
+
+#: converter/mymoneytemplate.cpp:101
+msgid "File '%1' not found!"
+msgstr "File '%1' non trovato!"
+
+#: converter/mymoneytemplate.cpp:142
+msgid "Invalid tag <b>%1</b> in template file <b>%2</b>!"
+msgstr "Tag non valido <b>%1</b> nel file modello <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:214
+#, c-format
+msgid "Loading template %1"
+msgstr "Caricamento modello %1"
+
+#: converter/mymoneytemplate.cpp:241
+msgid "Invalid top-level account type <b>%1</b> in template file <b>%2</b>!"
+msgstr "Tipo di conto di primo livello <b>%1</b> non valido nel file modello <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:309
+msgid "Invalid flag type <b>%1</b> for account <b>%3</b> in template file <b>%2</b>!"
+msgstr "Tipo <b>%1</b> non valido per il conto <b>%3</b> nel file modello <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:398
+#: converter/mymoneytemplate.cpp:401
+#: views/kmymoneyview.cpp:1151
+#: views/kmymoneyview.cpp:1154
+msgid "Unable to write changes to '%1'"
+msgstr "Impossibile scrivere i cambiamenti in '%1'"
+
+#: converter/mymoneytemplate.cpp:407
+#: views/kmymoneyview.cpp:1162
+msgid "Unable to upload to '%1'"
+msgstr "Impossibile eseguire l'invio a '%1'"
+
+#: converter/mymoneyqifwriter.cpp:70
+msgid "Unexpected exception '%1' thrown in %2, line %3 caught in MyMoneyQifWriter::write()"
+msgstr "Eccezione inattesa '%1' lanciata in %2, riga %3 verificatasi in MyMoneyQifWriter::write()"
+
+#: converter/mymoneyqifwriter.cpp:80
+msgid "Unable to open file '%1' for writing"
+msgstr "Impossibile aprire il file '%1' in scrittura"
+
+#: converter/webpricequote.cpp:340
+#, c-format
+msgid "Symbol found: %1"
+msgstr "Simbolo trovato: %1"
+
+#: converter/webpricequote.cpp:368
+msgid "Price found: %1 (%2)"
+msgstr "Prezzo trovato: %1 (%2)"
+
+#: converter/webpricequote.cpp:380
+#, c-format
+msgid "Date found: %1"
+msgstr "Data trovata: %1"
+
+#: converter/webpricequote.cpp:397
+#: converter/webpricequote.cpp:403
+#, c-format
+msgid "Unable to update price for %1"
+msgstr "Impossibile aggiornare il prezzo per %1"
+
+#: converter/mymoneyqifreader.cpp:170
+msgid ""
+"_: Category name\n"
+"Reinvested dividend"
+msgstr "Dividendi reinvestiti"
+
+#: converter/mymoneyqifreader.cpp:173
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (long term)"
+msgstr "Dividendi reinvestiti (lungo termine)"
+
+#: converter/mymoneyqifreader.cpp:176
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (short term)"
+msgstr "Dividendi reinvestiti (breve termine)"
+
+#: converter/mymoneyqifreader.cpp:179
+msgid ""
+"_: Category name\n"
+"Dividend"
+msgstr "Dividendi"
+
+#: converter/mymoneyqifreader.cpp:182
+msgid ""
+"_: Category name\n"
+"Interest"
+msgstr "Interessi"
+
+#: converter/mymoneyqifreader.cpp:185
+msgid ""
+"_: Category name\n"
+"Capital Gain (short term)"
+msgstr "Guadagno di capitale (breve termine)"
+
+#: converter/mymoneyqifreader.cpp:188
+msgid ""
+"_: Category name\n"
+"Capital Gain (mid term)"
+msgstr "Guadagno di capitale (medio termine)"
+
+#: converter/mymoneyqifreader.cpp:191
+msgid ""
+"_: Category name\n"
+"Capital Gain (long term)"
+msgstr "Guadagno di capitale (lungo termine)"
+
+#: converter/mymoneyqifreader.cpp:194
+#, fuzzy
+msgid ""
+"_: Category name\n"
+"Returned capital"
+msgstr "Interessi"
+
+#: converter/mymoneyqifreader.cpp:197
+msgid ""
+"_: Category name\n"
+"Miscellaneous income"
+msgstr "Entrate varie"
+
+#: converter/mymoneyqifreader.cpp:200
+msgid ""
+"_: Category name\n"
+"Miscellaneous expense"
+msgstr "Uscite varie"
+
+#: converter/mymoneyqifreader.cpp:203
+msgid ""
+"_: Category name\n"
+"Investment fees"
+msgstr "Spese d'investimemto"
+
+#: converter/mymoneyqifreader.cpp:205
+#, c-format
+msgid "Unknown QIF type %1"
+msgstr "Tipo QIF %1 sconosciuto"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Date format selection"
+msgstr "Selezione del formato data"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Pick the date format that suits your input file"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:366
+msgid "Importing QIF ..."
+msgstr "Importazione QIF..."
+
+#: converter/mymoneyqifreader.cpp:442
+msgid "Reading QIF ..."
+msgstr "Lettura QIF..."
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Adding transactions"
+msgstr "Aggiungere transazioni"
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Now adding the transactions to your ledger..."
+msgstr "Aggiungo la transazione al registro..."
+
+#: converter/mymoneyqifreader.cpp:533
+msgid "Unable to add transactions"
+msgstr "Impossibile aggiungere transazioni"
+
+#: converter/mymoneyqifreader.cpp:567
+msgid ""
+"_: QIF tag for liability account\n"
+"Oth L"
+msgstr "Altre pass"
+
+#: converter/mymoneyqifreader.cpp:572
+msgid ""
+"_: QIF tag for category\n"
+"Cat"
+msgstr "Cat"
+
+#: converter/mymoneyqifreader.cpp:575
+msgid ""
+"_: QIF tag for security\n"
+"Security"
+msgstr "Strumento finanziario"
+
+#: converter/mymoneyqifreader.cpp:578
+msgid ""
+"_: QIF tag for investment account\n"
+"Invst"
+msgstr "Invest"
+
+#: converter/mymoneyqifreader.cpp:581
+msgid ""
+"_: QIF tag for prices\n"
+"Prices"
+msgstr "Prezzi"
+
+#: converter/mymoneyqifreader.cpp:599
+msgid ""
+"_: QIF tag for a class\n"
+"Class"
+msgstr "Classe"
+
+#: converter/mymoneyqifreader.cpp:753
+#: converter/mymoneyqifreader.cpp:2203
+msgid "The %1 account currently has an opening balance of %2. This QIF file reports an opening balance of %3. Would you like to overwrite the current balance with the one from the QIF file?"
+msgstr "Il conto %1 al momento ha un bilancio d'apertura di %2. Questo file QIF riporta un bilancio d'apertura di %3. Vuoi sovrascrivere il bilancio d'apertura corrente con quello del file QIF?"
+
+#: converter/mymoneyqifreader.cpp:754
+#: converter/mymoneyqifreader.cpp:2204
+msgid "Overwrite opening balance"
+msgstr "Sovrascrivi saldo iniziale"
+
+#: converter/mymoneyqifreader.cpp:879
+#: converter/mymoneyqifreader.cpp:890
+#: converter/mymoneyqifreader.cpp:914
+msgid "Autogenerated by QIF importer"
+msgstr "Generato automaticamente dall'importatore QIF"
+
+#: converter/mymoneyqifreader.cpp:907
+msgid "QIF imported, no account name supplied"
+msgstr "QIF importato, nessun nome fornito per il conto"
+
+#: converter/mymoneyqifreader.cpp:940
+msgid "KMyMoney has imported a second opening balance transaction into account <b>%1</b> which differs from the one found already on file. Please correct this manually once the import is done."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:940
+msgid "Opening balance problem"
+msgstr "Problema di bilancio iniziale"
+
+#: converter/mymoneyqifreader.cpp:963
+#, fuzzy
+msgid "Error while creating opening balance transaction"
+msgstr "Modifica le transazioni attualmente selezionate"
+
+#: converter/mymoneyqifreader.cpp:1029
+#: converter/mymoneyqifreader.cpp:1276
+msgid ""
+"The date entry \"%1\" read from the file cannot be interpreted through the current date profile setting of \"%2\".\n"
+"\n"
+"Pressing \"Continue\" will assign todays date to the transaction. Pressing \"Cancel\" will abort the import operation. You can then restart the import and select a different QIF profile or create a new one."
+msgstr ""
+"La data \"%1\" letta dal file non può essere interpretata con l'attuale impostazione del profilo data: \"%2\".\n"
+"\n"
+"La pressione del pulsante \"Continua\" assegnerà la data odierna alla transazione. La pressione di \"Annulla\" annullerà l'importazione. Puoi ricominciare l'importazione e selezionare un altro profilo QIF o crearne uno nuovo."
+
+#: converter/mymoneyqifreader.cpp:1035
+#: converter/mymoneyqifreader.cpp:1282
+msgid "Invalid date format"
+msgstr "Formato data non valido"
+
+#: converter/mymoneyqifreader.cpp:1398
+#: converter/mymoneystatementreader.cpp:589
+#: converter/mymoneystatementreader.cpp:592
+msgid "Statement Importer"
+msgstr "Importatore di estratti conto"
+
+#: converter/mymoneyqifreader.cpp:1413
+#: converter/mymoneystatementreader.cpp:644
+msgid "This investment account does not contain the \"%1\" security. Transactions involving this security will be ignored."
+msgstr "Il conto investimento non contiene lo strumento finanziario \"%1\". Le transazioni che coinvolgono questo strumento finanziario saranno ignorate."
+
+#: converter/mymoneyqifreader.cpp:1415
+#: converter/mymoneystatementreader.cpp:612
+#: converter/mymoneystatementreader.cpp:644
+msgid "Security not found"
+msgstr "Strumento finanziario non trovato"
+
+#: converter/mymoneyqifreader.cpp:2021
+msgid "%1 (Investment)"
+msgstr "%1 (Investmento)"
+
+#: converter/mymoneyqifreader.cpp:2022
+msgid "Autogenerated by QIF importer from type Mutual account entry"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2085
+#: converter/mymoneyqifreader.cpp:2228
+msgid "account"
+msgstr "conto"
+
+#: converter/mymoneyqifreader.cpp:2086
+msgid "al"
+msgstr "al"
+
+#: converter/mymoneyqifreader.cpp:2093
+msgid "category"
+msgstr "categoria"
+
+#: converter/mymoneyqifreader.cpp:2094
+msgid "ei"
+msgstr "ei"
+
+#: converter/mymoneyqifreader.cpp:2095
+msgid "Category selection"
+msgstr "Selezione categoria"
+
+#: converter/mymoneyqifreader.cpp:2110
+msgid "Account \"%1\" disappeared: "
+msgstr "Conto \"%1\" scomparso: "
+
+#: converter/mymoneyqifreader.cpp:2131
+msgid "The %1 '%2' does not exist. Do you want to create it?"
+msgstr "Il %1 '%2' non esiste. Vuoi crearlo?"
+
+#: converter/mymoneyqifreader.cpp:2140
+#, c-format
+msgid "Select %1"
+msgstr "Seleziona %1"
+
+#: converter/mymoneyqifreader.cpp:2142
+msgid "The %1 <b>%2</b> currently exists. Do you want to import transactions to this account?"
+msgstr "Il %1 <b>%2</b> attualmente esiste. Vuoi importare le transazioni in questo conto?"
+
+#: converter/mymoneyqifreader.cpp:2147
+msgid "The %1 <b>%2</b> currently does not exist. You can create a new %3 by pressing the <b>Create</b> button or select another %4 manually from the selection box."
+msgstr "Il %1 <b>%2</b> attualmente non esiste. Puoi crearne un nuovo %3 premendo il pulsante <b>Crea</b> o selezionando un altro %4 manualmente dalla casella di selezione."
+
+#: converter/mymoneyqifreader.cpp:2154
+#, c-format
+msgid "Import transactions to %1"
+msgstr "Importa transazioni a %1"
+
+#: converter/mymoneyqifreader.cpp:2155
+msgid "No %1 information has been found in the selected QIF file. Please select an account using the selection box in the dialog or create a new %2 by pressing the <b>Create</b> button."
+msgstr "Nessuna informazione %1 è stata trovata nel file QIF selezionato. Selezionare un conto usando la casella di selezione nella finestra o creare un nuovo %2 premendo il pulsante <b>Crea</b>."
+
+#: converter/mymoneyqifreader.cpp:2229
+msgid "You must select or create an account."
+msgstr "Devi selezionare o creare un conto."
+
+#: converter/mymoneyqifreader.cpp:2231
+msgid "You must select or create a category."
+msgstr "Devi selezionare o creare una categoria."
+
+#: converter/mymoneystatementreader.cpp:100
+msgid "_Fees"
+msgstr "_Tasse"
+
+#: converter/mymoneystatementreader.cpp:106
+msgid "_Dividend"
+msgstr "_Dividendo"
+
+#: converter/mymoneystatementreader.cpp:289
+#, c-format
+msgid "Importing statement for account %1"
+msgstr "Importa un estratto conto per il conto %1"
+
+#: converter/mymoneystatementreader.cpp:291
+#, fuzzy
+msgid "Importing statement without transactions"
+msgstr "Importa un estratto conto per il conto %1"
+
+#: converter/mymoneystatementreader.cpp:385
+msgid " Statement balance is not contained in statement."
+msgstr " Il bilancio dell'estratto conto non è contenuto nell'estratto conto."
+
+#: converter/mymoneystatementreader.cpp:387
+msgid " Statement balance on %1 is reported to be %2"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:389
+msgid " Transactions"
+msgstr " Transazioni"
+
+#: converter/mymoneystatementreader.cpp:390
+msgid " %1 processed"
+msgstr " %1 processato"
+
+#: converter/mymoneystatementreader.cpp:391
+msgid " %1 added"
+msgstr " %1 aggiunto"
+
+#: converter/mymoneystatementreader.cpp:392
+msgid " %1 matched"
+msgstr " %1 verificata"
+
+#: converter/mymoneystatementreader.cpp:393
+msgid " %1 duplicates"
+msgstr " %1 duplicati"
+
+#: converter/mymoneystatementreader.cpp:394
+msgid " Payees"
+msgstr " Beneficiari"
+
+#: converter/mymoneystatementreader.cpp:395
+msgid " %1 created"
+msgstr " %1 creato"
+
+#: converter/mymoneystatementreader.cpp:483
+#, c-format
+msgid "Error creating security record: %1"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:612
+#, fuzzy
+msgid "This imported statement contains investment transactions with no security. These transactions will be ignored."
+msgstr "Il conto investimento non contiene lo strumento finanziario \"%1\". Le transazioni che coinvolgono questo strumento finanziario saranno ignorate."
+
+#: converter/mymoneystatementreader.cpp:803
+msgid "(Fees) "
+msgstr "(Pagamenti) "
+
+#: converter/mymoneystatementreader.cpp:880
+msgid ""
+"Do you want to add \"%1\" as payee/receiver?\n"
+"\n"
+msgstr ""
+"Vuoi aggiungere \"%1\" come creditore/beneficiario?\n"
+"\n"
+
+#: converter/mymoneystatementreader.cpp:881
+msgid ""
+"Selecting \"Yes\" will create the payee, \"No\" will skip creation of a payee record and remove the payee information from this transaction. Selecting \"Cancel\" aborts the import operation.\n"
+"\n"
+"If you select \"No\" here and mark the \"Don't ask again\" checkbox, the payee information for all following transactions referencing \"%1\" will be removed."
+msgstr ""
+"Selezionando \"Sì\" verrà creato il creditore, selezionando \"No\" non verrà creata la voce corrispondente al creditore e le informazioni del creditore verranno rimosse dalla transazione. Selezionando \"Annulla\" l'importazione verrà terminata.\n"
+"\n"
+"Se selezioni \"No\" qui e spunti la casella di selezione \"Non chiederlo più\", le informazioni sui creditori per tutte le transazioni che si riferiscono a \"%1\" saranno rimosse."
+
+#: converter/mymoneystatementreader.cpp:917
+msgid "Save Category"
+msgstr "Salva categoria"
+
+#: converter/mymoneystatementreader.cpp:918
+msgid "No Category"
+msgstr "Nessuna categoria"
+
+#: converter/mymoneystatementreader.cpp:919
+#: dialogs/rc.cpp:4
+msgid "Abort"
+msgstr "Interrompi"
+
+#: converter/mymoneystatementreader.cpp:926
+msgid "Please select a default category for payee '%1':"
+msgstr "Seleziona una categoria predefinita per il creditore '%1':"
+
+#: converter/mymoneystatementreader.cpp:958
+msgid "Unable to add payee/receiver"
+msgstr "Impossibile aggiungere il creditore/beneficiario"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid "KMyMoney has found a scheduled transaction named <b>%1</b> which matches an imported transaction. Do you want KMyMoney to enter this schedule now so that the transaction can be matched? "
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid "Schedule found"
+msgstr "Pianificazione trovata"
+
+#: converter/mymoneystatementreader.cpp:1219
+msgid "Problem adding or matching imported transaction with id '%1': %2"
+msgstr "Problemi ad aggiungere o verificare la transazione importata con id '%1': %2 "
+
+#: converter/mymoneystatementreader.cpp:1268
+msgid "<b>You have downloaded a statement for the following account:</b><br><br>"
+msgstr "<b>Hai scaricato un estratto conto per il seguente conto:</b><br><br>"
+
+#: converter/mymoneystatementreader.cpp:1269
+#, c-format
+msgid " - Account Name: %1"
+msgstr " - Nome conto: %1"
+
+#: converter/mymoneystatementreader.cpp:1270
+#, c-format
+msgid " - Account Type: %1"
+msgstr " - Tipo conto: %1"
+
+#: converter/mymoneystatementreader.cpp:1271
+#, c-format
+msgid " - Account Number: %1"
+msgstr " - Numero conto: %1"
+
+#: converter/mymoneystatementreader.cpp:1279
+msgid "Do you want to import transactions to this account?"
+msgstr "Vuoi aggiungere le transazioni importate a questo conto?"
+
+#: converter/mymoneystatementreader.cpp:1281
+msgid "KMyMoney cannot determine which of your accounts to use. You can create a new account by pressing the <b>Create</b> button or select another one manually from the selection box below."
+msgstr "KMyMoney non può determinare quale dei tuoi conti usare. Puoi creare un nuovo conto premendo il pulsante <b>Crea</b> o selezionandone uno manualmente dalla casella di selezione sottostante."
+
+#: converter/mymoneystatementreader.cpp:1287
+msgid "No account information has been found in the selected statement file. Please select an account using the selection box in the dialog or create a new account by pressing the <b>Create</b> button."
+msgstr "Nessuna informazione sul conto è stata trovata nel file dell'estratto conto.Selezionare un conto usando la casella di selezione nella finestra o creando un nuovo conto premendo il pulsante <b>Crea</b>."
+
+#: converter/mymoneystatementreader.cpp:1294
+msgid "Import transactions"
+msgstr "Importa transazioni"
+
+#: converter/mymoneystatementreader.cpp:1330
+msgid "You must select an account, create a new one, or press the <b>Abort</b> button."
+msgstr "Devi selezionare un conto, crearne uno nuovo, o premere il pulsante <b>Annulla</b>."
+
+#: converter/mymoneygncreader.cpp:119
+msgid "%1: Sorry. This importer cannot handle version %2 of element %3"
+msgstr "%1: Spiacente. L'importatore non può gestire la versione %2 dell'elemento %3"
+
+#: converter/mymoneygncreader.cpp:193
+#, c-format
+msgid "Account%1"
+msgstr "Conto%1"
+
+#: converter/mymoneygncreader.cpp:197
+#, c-format
+msgid "Stock%1"
+msgstr "Azione%1"
+
+#: converter/mymoneygncreader.cpp:206
+#, c-format
+msgid "Payee%1"
+msgstr "Beneficiario%1"
+
+#: converter/mymoneygncreader.cpp:212
+#, c-format
+msgid "Schedule%1"
+msgstr "Pianifica%1"
+
+#: converter/mymoneygncreader.cpp:262
+msgid "This version of the importer cannot handle multi-book files."
+msgstr "La versione dell'importatore non può gestire file multi-book."
+
+#: converter/mymoneygncreader.cpp:912
+msgid "Invalid header for file. Should be 'gnc-v2'"
+msgstr "Intestazione non valida per il file. Dovrebbe essere 'gnc-v2'"
+
+#: converter/mymoneygncreader.cpp:937
+#: converter/mymoneygncreader.cpp:972
+#: converter/mymoneygncreader.cpp:1062
+#, c-format
+msgid ""
+"Import failed:\n"
+"\n"
+"%1"
+msgstr ""
+"Importazione non riuscita\n"
+"\n"
+"%1"
+
+#: converter/mymoneygncreader.cpp:1065
+msgid "Import complete"
+msgstr "Importazione completata"
+
+#: converter/mymoneygncreader.cpp:1120
+msgid "Disguise your wealth"
+msgstr "Maschera la tua ricchezza"
+
+#: converter/mymoneygncreader.cpp:1121
+msgid ""
+"Each monetary value on your file will be multiplied by a random number between 0.01 and 1.99\n"
+"with a different value used for each transaction. In addition, to further disguise the true\n"
+"values, you may enter a number between %1 and %2 which will be applied to all values.\n"
+"These numbers will not be stored in the file."
+msgstr ""
+"Ogni valore monetario nel tuo file sarà moltiplicato per un numero casuale tra 0.01 e 1.99\n"
+"con un valore diverso per ogni transazione. In aggiunta, per camuffare i valori reali, puoi inserire un numero tra %1 e %2 che sarà applicato a tutti i valori.\n"
+"Questi numeri non saranno salvati nel file."
+
+#: converter/mymoneygncreader.cpp:1135
+msgid "Loading commodities..."
+msgstr "Caricamento merci..."
+
+#: converter/mymoneygncreader.cpp:1160
+msgid "Loading prices..."
+msgstr "Caricamento prezzi..."
+
+#: converter/mymoneygncreader.cpp:1164
+#: converter/mymoneygncreader.cpp:1171
+msgid "Imported History"
+msgstr "Storico importato"
+
+#: converter/mymoneygncreader.cpp:1251
+#, c-format
+msgid "Current importer does not recognize GnuCash account type %1"
+msgstr "L'importatore attuale non riconosce il tipo di conto GnuCash %1"
+
+#: converter/mymoneygncreader.cpp:1471
+msgid "Imported Transaction"
+msgstr "Transazioni importate"
+
+#: converter/mymoneygncreader.cpp:1519
+msgid "Loading templates..."
+msgstr "Caricamento modelli..."
+
+#: converter/mymoneygncreader.cpp:1531
+msgid "Unknown payee"
+msgstr "Beneficiario sconosciuto"
+
+#: converter/mymoneygncreader.cpp:1723
+msgid "Loading schedules..."
+msgstr "Caricamento pianificazioni..."
+
+#: converter/mymoneygncreader.cpp:1735
+#, c-format
+msgid "Can't find template transaction for schedule %1"
+msgstr "Impossibile trovare modello transazione per pianificare %1"
+
+#: converter/mymoneygncreader.cpp:1910
+msgid "Reorganizing accounts..."
+msgstr "Riorganizzare conti..."
+
+#: converter/mymoneygncreader.cpp:1972
+msgid "Your main currency seems to be %1 (%2); do you want to set this as your base currency?"
+msgstr "La valuta principale sembra essere %1 (%2), vuoi impostarla come la tua valuta base?"
+
+#: converter/mymoneygncreader.cpp:1993
+msgid "More"
+msgstr "Altro"
+
+#: converter/mymoneygncreader.cpp:1997
+msgid "Save Report"
+msgstr "Salva report"
+
+#: converter/mymoneygncreader.cpp:2017
+msgid ""
+"Problems were encountered in converting schedule '%1'.\n"
+"Do you want to review or edit it now?"
+msgstr ""
+"Si sono verificati dei problemi nella conversione della pianificazione '%1'.\n"
+"Si desidera esaminarla o modificarla ora?"
+
+#: converter/mymoneygncreader.cpp:2039
+msgid ""
+"Found:\n"
+"\n"
+msgstr ""
+"Trovato:\n"
+"\n"
+
+#: converter/mymoneygncreader.cpp:2040
+msgid " commodities (equities)\n"
+msgstr " merci (capitali)\n"
+
+#: converter/mymoneygncreader.cpp:2041
+msgid " prices\n"
+msgstr " prezzi\n"
+
+#: converter/mymoneygncreader.cpp:2042
+msgid " accounts\n"
+msgstr " conti\n"
+
+#: converter/mymoneygncreader.cpp:2043
+msgid " transactions\n"
+msgstr " transazioni\n"
+
+#: converter/mymoneygncreader.cpp:2044
+msgid " schedules\n"
+msgstr " pianificazioni\n"
+
+#: converter/mymoneygncreader.cpp:2047
+msgid "No inconsistencies were detected"
+msgstr "Nessuna inconsistenza è stata rilevata"
+
+#: converter/mymoneygncreader.cpp:2049
+msgid " inconsistencies were detected and corrected\n"
+msgstr " inconsistenze sono state rilevate e corrette\n"
+
+#: converter/mymoneygncreader.cpp:2054
+msgid " orphan accounts were created\n"
+msgstr " conti orfani sono stati creati\n"
+
+#: converter/mymoneygncreader.cpp:2059
+msgid " possible schedule problems were noted\n"
+msgstr " possibili errori di pianificazione sono stati registrati\n"
+
+#: converter/mymoneygncreader.cpp:2064
+msgid "Small Business Features (Customers, Invoices, etc.)"
+msgstr "Funzionalità per la piccola impresa (clienti, fatture, ecc.)"
+
+#: converter/mymoneygncreader.cpp:2065
+#: views/kmymoneyview.cpp:241
+#: views/kmymoneyview.cpp:243
+msgid "Budgets"
+msgstr "Budget"
+
+#: converter/mymoneygncreader.cpp:2066
+msgid "Lots"
+msgstr "Lotti"
+
+#: converter/mymoneygncreader.cpp:2068
+msgid "The following features found in your file are not currently supported:"
+msgstr "Le seguenti caratteristiche trovate nel tuo file non sono al momento supportate:"
+
+#: converter/mymoneygncreader.cpp:2071
+msgid ""
+"\n"
+"\n"
+"Press More for further information"
+msgstr ""
+"\n"
+"\n"
+"Premi Altro per ulteriori informazioni"
+
+#: converter/mymoneygncreader.cpp:2139
+msgid "Orphan created from unknown gnucash account"
+msgstr "Orfano creato da conto gnucash sconosciuto"
+
+#: converter/mymoneygncreader.cpp:2170
+msgid "Internal error - invalid interval char in incrDate"
+msgstr "Errore interno - intervallo char non valido in incrDate"
+
+#: converter/mymoneygncreader.cpp:2233
+msgid "Enter the investment account name "
+msgstr "Inserisci il nome del conto d'investimento "
+
+#: converter/mymoneygncreader.cpp:2234
+msgid "My Investments"
+msgstr "Investimenti"
+
+#: converter/mymoneygncreader.cpp:2269
+#, c-format
+msgid "Select parent investment account or enter new name. Stock %1"
+msgstr "Seleziona un conto di investimento genitore o inserisci un nuovo nome. Azione %1"
+
+#: converter/mymoneygncreader.cpp:2292
+#: converter/mymoneygncreader.cpp:2307
+msgid "%1 is not an Investment Account. Do you wish to make it one?"
+msgstr "%1 non è un conto di investimento. Vuoi renderlo tale?"
+
+#: converter/mymoneygncreader.cpp:2408
+msgid ""
+"An Investment account must be a child of an Asset account\n"
+"Account %1 will be stored under the main Asset account"
+msgstr ""
+"Un conto Investimento deve essere figlio di un conto Attività\n"
+"Il conto %1 sarà salvato sotto il conto Attività principale"
+
+#: converter/mymoneygncreader.cpp:2410
+msgid ""
+"An Income account must be a child of an Income account\n"
+"Account %1 will be stored under the main Income account"
+msgstr ""
+"Un conto Entrata deve essere figlio di un conto Entrata\n"
+"Il conto %1 sarà salvato sotto il conto Entrata principale"
+
+#: converter/mymoneygncreader.cpp:2412
+msgid ""
+"An Expense account must be a child of an Expense account\n"
+"Account %1 will be stored under the main Expense account"
+msgstr ""
+"Un conto Uscita deve essere figlio di un conto Uscita\n"
+"Il conto %1 sarà salvato sotto il conto Uscita principale"
+
+#: converter/mymoneygncreader.cpp:2414
+msgid ""
+"One or more transactions contain a reference to an otherwise unknown account\n"
+"An asset account with the name %1 has been created to hold the data"
+msgstr ""
+"Una o più transazioni contenenti un riferimento ad un conto sconosciuto\n"
+"Un conto attività con il nome %1 è stato creato per contenere i dati"
+
+#: converter/mymoneygncreader.cpp:2416
+msgid "Schedule %1 has interval of %2 which is not currently available"
+msgstr "La pianificazione %1 ha intervallo di %2 che al momento non è disponibile"
+
+#: converter/mymoneygncreader.cpp:2417
+msgid "Schedule %1 dropped at user request"
+msgstr "Pianificazione %1 scartata alla richiesta dell'utente"
+
+#: converter/mymoneygncreader.cpp:2418
+msgid "Schedule %1 contains unknown action (key = %2, type = %3)"
+msgstr "La pianificazione %1 contiene un'azione sconosciuta (tasto = %2, tipo = %3)"
+
+#: converter/mymoneygncreader.cpp:2419
+msgid "Schedule %1 contains multiple actions; only one has been imported"
+msgstr "La pianificazione %1 contiene azioni multiple, solo una è stata importata"
+
+#: converter/mymoneygncreader.cpp:2420
+msgid "Schedule %1 contains no valid splits"
+msgstr "La pianificazione %1 non contiene suddivisioni valide"
+
+#: converter/mymoneygncreader.cpp:2421
+msgid "Schedule %1 appears to contain a formula. GnuCash formulae are not convertible"
+msgstr "La pianificazione %1 sembra contenere una formula. Le formule di GnuCash non sono convertibili"
+
+#: converter/mymoneygncreader.cpp:2422
+msgid "Schedule %1 contains unknown interval specification; please check for correct operation"
+msgstr "La pianificazione %1 contiene la definizione di un intervallo sconosciuto; controllare la correttezza dell'operazione"
+
+#: converter/mymoneygncreader.cpp:2423
+msgid "Schedule %1 contains a deferred interval specification; please check for correct operation"
+msgstr "La pianificazione %1 contiene la definizione di un intervallo differito; controllare la correttezza dell'operazione"
+
+#: converter/mymoneygncreader.cpp:2424
+msgid "Account or Category %1, transaction date %2; split contains invalid value; please check"
+msgstr "Conto o Categoria %1, data transazione %2; la suddivisione contiene valori non validi; verificare"
+
+#: kmymoneyutils.cpp:146
+msgid "&New Schedule..."
+msgstr "&Nuova pianificazione..."
+
+#: kmymoneyutils.cpp:148
+msgid "Create a new schedule."
+msgstr "Crea una nuova pianificazione."
+
+#: kmymoneyutils.cpp:149
+msgid "Use this to create a new schedule."
+msgstr "Premi qui per creare una nuova pianificazione."
+
+#: kmymoneyutils.cpp:158
+msgid "&Filter"
+msgstr "&Filtro"
+
+#: kmymoneyutils.cpp:160
+msgid "Filter out accounts"
+msgstr "Filtra i conti"
+
+#: kmymoneyutils.cpp:161
+msgid "Use this to filter out accounts"
+msgstr "Premi qui per filtrare i conti"
+
+#: kmymoneyutils.cpp:192
+msgid "Preferred accounts"
+msgstr "Conti preferiti"
+
+#: kmymoneyutils.cpp:193
+msgid "Payment accounts"
+msgstr "Conti pagabili"
+
+#: kmymoneyutils.cpp:194
+msgid "Favorite reports"
+msgstr "Report preferiti"
+
+#: kmymoneyutils.cpp:195
+msgid "Forecast (schedule)"
+msgstr "Previsione (pianificazione)"
+
+#: kmymoneyutils.cpp:196
+msgid "Networth forecast"
+msgstr "Previsione patrimonio netto"
+
+#: kmymoneyutils.cpp:197
+msgid "Forecast (history)"
+msgstr "Previsione (storico)"
+
+#: kmymoneyutils.cpp:198
+msgid "Assets and Liabilities"
+msgstr "Attività e passività"
+
+#: kmymoneyutils.cpp:199
+#: reports/pivottable.cpp:2416
+#: views/khomeview.cpp:1393
+#: widgets/rc.cpp:70
+msgid "Budget"
+msgstr "Budget"
+
+#: kmymoneyutils.cpp:200
+msgid "CashFlow"
+msgstr "Flusso di cassa"
+
+#: dialogs/kenterscheduledlg.cpp:153
+#: kmymoneyutils.cpp:366
+msgid "Unable to load schedule details"
+msgstr "Impossibile caricare i dettagli pianificati"
+
+#: kmymoneyutils.cpp:390
+#: widgets/register.cpp:473
+msgid ""
+"_: Reconcile state 'Not reconciled'\n"
+"Not reconciled"
+msgstr "Non riconciliata"
+
+#: kmymoneyutils.cpp:393
+#: widgets/register.cpp:476
+msgid ""
+"_: Reconcile state 'Cleared'\n"
+"Cleared"
+msgstr "Compensata"
+
+#: kmymoneyutils.cpp:396
+#: widgets/register.cpp:479
+msgid ""
+"_: Reconcile state 'Reconciled'\n"
+"Reconciled"
+msgstr "Riconciliato"
+
+#: kmymoneyutils.cpp:399
+#: widgets/register.cpp:482
+msgid ""
+"_: Reconcile state 'Frozen'\n"
+"Frozen"
+msgstr "Congelato"
+
+#: kmymoneyutils.cpp:410
+msgid ""
+"_: Reconcile flag C\n"
+"C"
+msgstr "C"
+
+#: kmymoneyutils.cpp:413
+msgid ""
+"_: Reconcile flag R\n"
+"R"
+msgstr "R"
+
+#: kmymoneyutils.cpp:416
+msgid ""
+"_: Reconcile flag F\n"
+"F"
+msgstr "F"
+
+#: kmymoneyutils.cpp:419
+msgid ""
+"_: Flag for unknown reconciliation state\n"
+"?"
+msgstr "?"
+
+#: _tips.cpp:3
+msgid ""
+"<p>...that you can change the sort order of ledger entries by\n"
+"right-clicking the header of the ledger view?\n"
+msgstr ""
+"<p>... che puoi cambiare l'ordinamento delle voci dei libri mastri\n"
+"facendo clic con il tasto destro sull'intestazione della colonna dei libri mastri?\n"
+
+#: _tips.cpp:9
+msgid ""
+"<p>...that you can easily move to the other side of a transfer transaction\n"
+"by opening the context menu with the right mouse button and selecting one of the\n"
+"'Goto' functions?\n"
+msgstr ""
+"<p>... che puoi facilmente passare dall'altra parte di una transazione di trasferimento\n"
+"aprendo il menu contestuale con il tasto destro del mouse e selezionando una delle\n"
+"funzionalità 'Vai a'?\n"
+
+#: _tips.cpp:16
+msgid ""
+"<p>...that you can start editing a transaction by double-clicking on the\n"
+"transaction in the register?\n"
+msgstr ""
+"<p>... che puoi iniziare a modificare una transazione facendo doppio clic\n"
+"sulla transazione nel registro?\n"
+
+#: _tips.cpp:22
+msgid ""
+"<p>...that you can show more details of the selected transaction in the\n"
+"register by selecting the 'ledger lens' feature in the settings dialog?\n"
+msgstr ""
+"<p>... che puoi vedere ulteriori dettagli della transazione selezionata nel\n"
+"registro usando la funzionalità 'lente' nella finestra impostazioni?\n"
+
+#: _tips.cpp:28
+msgid ""
+"<p>...that transactions with no category assigned or split\n"
+"transactions with unassigned values are marked with an exclamation mark \n"
+"on a yellow triangle in the register?\n"
+msgstr ""
+"<p>... che le transazioni senza categorie assegnate o le transazioni\n"
+"suddivise con valori non assegnati sono contrassegnate con un punto esclamativo\n"
+"su un triangolo giallo nel registro?\n"
+
+#: _tips.cpp:35
+msgid ""
+"<p>...that you can show all details of the transactions in the register\n"
+"by typing &lt;Ctrl-T&gt; or selecting the 'Settings/Show Transaction Detail'\n"
+"menu entry? You can turn this feature off the same way.\n"
+msgstr ""
+"<p>... che puoi visualizzare tutti i dettagli delle transazioni nel registro\n"
+"premendo &lt;Ctrl-T&gt; o selezionando il menu 'Impostazioni/Mostra dettagli transazione'?\n"
+"Puoi disattivare questa funzionalità allo stesso modo.\n"
+
+#: _tips.cpp:42
+msgid ""
+"<p>...that you can switch between a listing of all accounts or\n"
+"an icon view of all asset and liability accounts with the tabs\n"
+"in the accounts view?\n"
+msgstr ""
+"<p>... puoi spostarti tra una lista di tutti i tuoi conti o\n"
+"una vista a icone di tutti le attività e passività con le schede\n"
+"nella vista conti?\n"
+
+#: _tips.cpp:49
+msgid "<p>...that the KMyMoney development team wishes you a nice day?\n"
+msgstr "<p>... che la squadra di sviluppo di KMyMoney ti augura una buona giornata?\n"
+
+#: _tips.cpp:54
+msgid ""
+"<p>...you can use your own external filter program to convert any\n"
+"import format to QIF on the fly? See the QIF profile editor for\n"
+"more details.\n"
+msgstr ""
+"<p>... che puoi usare un tuo programma esterno di filtri per convertire\n"
+"al volo ogni formato importato a QIF? Vedi l'editor di profilo QIF per\n"
+"ulteriori dettagli.\n"
+
+#: _tips.cpp:61
+msgid ""
+"<p>...that you can create a scheduled transaction from an existing\n"
+"one by selecting the context menu on a transaction in the ledger\n"
+"or the \"More...\"-menu in the transaction form?\n"
+msgstr ""
+"<p>... che puoi creare una transazione pianificata da una già esistente\n"
+"selezionando il menu contestuale su di una transazione nel libro mastro\n"
+"o il menu \"Altro...\" nella modulo della transazione?\n"
+
+#: _tips.cpp:68
+msgid ""
+"<p>...that you can switch to the payee of a transaction\n"
+"by selecting the context menu on a transaction in the ledger\n"
+"or in the transaction menu?\n"
+msgstr ""
+"<p>... che puoi passare al creditore di una transazione\n"
+"attivando il menu contestuale su una transazione nel libro mastro\n"
+"o nel menu delle transazioni?\n"
+
+#: _tips.cpp:75
+msgid ""
+"<p>...that you can modify the colors and fonts used for the ledgers\n"
+"via <i>Configure/Register/...</i>?\n"
+msgstr ""
+"<p>... che puoi modificare i colori e i font usati per i libri mastri\n"
+"attraverso <i>Configura/Registro/...</i>?\n"
+
+#: _tips.cpp:81
+msgid ""
+"<p>...that you can hide transactions prior to a specific date?\n"
+"The date can be modified via <i>Configure/Register/Filter</i>.\n"
+msgstr ""
+"<p>... che puoi nascondere le transazioni precedenti a una specifica data?\n"
+"La data può essere modificata attraverso <i>Configura/Registro/Filtro</i>.\n"
+
+#: _tips.cpp:87
+msgid ""
+"<p>...that you can customize the \"Home-Page\"\n"
+"via <i>Configure/Home</i>?\n"
+msgstr ""
+"<p>... che puoi personalizzare la \"Pagina iniziale\"\n"
+"attraverso <i>Configura/Pagina iniziale\t</i>?\n"
+
+#: _tips.cpp:93
+msgid ""
+"<p>...that you can enter new transactions even while reconciling\n"
+"an account? You can also make the transaction form visible.\n"
+msgstr ""
+"<p>... che puoi inserire nuove transazioni anche mentre\n"
+"riconcili un conto? Puoi anche visualizzare il modulo della transazione.\n"
+
+#: _tips.cpp:99
+msgid ""
+"<p>...that you can actively support the KMyMoney development team in\n"
+"cases that heavily depend on your data? You can save your data in an\n"
+"anonymized way for this support.<p>\n"
+"Just open your data file and immediately\n"
+"select <b>File/Save as...</b>. In the <b>Save As...</b> dialog\n"
+"select the filter <b>Anonymous Files</b> and make sure your file gets\n"
+"the extensions <b>.anon.xml</b>. <p>\n"
+"To verify, how the data looks like you are about to send away, you can open\n"
+"this file in KMyMoney and see how the developers see your data.\n"
+msgstr ""
+"<p>... che puoi supportare attivamente la squadra di sviluppo di KMyMoney\n"
+"in esempi che dipendono molto dai tuoi dati? Puoi salvare i tuoi dati in\n"
+"maniera anonima per questo supporto.<p>\n"
+"Basta aprire il tuo file di dati e selezionare\n"
+"immediatamente <b>File/Salva come ...</b>. Nella finestra <b>Salva come...</b>\n"
+"seleziona il filtro <b>File anonimo</b> e assicurati che il tuo file abbia\n"
+"l'estensione <b>.anon.xml</b>. <p>\n"
+"Per verificare i dati che spedirai, puoi aprire questo file in KMyMoney\n"
+"e vedere i dati esattamente come li vedranno gli sviluppatori.\n"
+
+#: _tips.cpp:112
+msgid ""
+"<p>... that you can import your bank statements even without a network \n"
+"connection? Just select the file (OFX or QIF) from the File->Import menu.</p>\n"
+"<p>Provided by Jose Jorge</p>\n"
+msgstr ""
+"<p>... che puoi importare gli estratti conto della tua banca anche senza una connessione\n"
+"alla Rete? Basta selezionare il file (OFX o QIF) dal menu File->Importa.</p>\n"
+" <p>Fornito da Jose Jorge</p>\n"
+
+#: reports/listtable.cpp:159
+#: reports/listtable.cpp:163
+#: reports/pivottable.cpp:1564
+msgid ""
+"_: Report date range\n"
+"%1 through %2"
+msgstr "dal %1 al %2"
+
+#: reports/listtable.cpp:171
+#: reports/pivottable.cpp:1571
+#, c-format
+msgid "All currencies converted to %1"
+msgstr "Tutte le valute convertite in %1"
+
+#: reports/listtable.cpp:172
+#: reports/pivottable.cpp:1328
+msgid "All currencies converted to %1\n"
+msgstr "Tutte le valute convertite in %1\n"
+
+#: reports/listtable.cpp:176
+#: reports/pivottable.cpp:1573
+msgid "All values shown in %1 unless otherwise noted"
+msgstr "Mostra tutti i valori in %1 se non specificato diversamente"
+
+#: reports/listtable.cpp:177
+#: reports/pivottable.cpp:1330
+msgid "All values shown in %1 unless otherwise noted\n"
+msgstr "Mostra tutti i valori in %1 se non specificato diversamente\n"
+
+#: dialogs/kequitypriceupdatedlg.cpp:73
+#: dialogs/kfindtransactiondlg.cpp:188
+#: dialogs/rc.cpp:53
+#: dialogs/rc.cpp:63
+#: dialogs/rc.cpp:208
+#: dialogs/rc.cpp:805
+#: dialogs/settings/rc.cpp:111
+#: dialogs/transactioneditor.cpp:844
+#: reports/listtable.cpp:196
+#: views/khomeview.cpp:412
+#: views/khomeview.cpp:485
+#: views/khomeview.cpp:519
+#: views/rc.cpp:61
+#: widgets/kmymoneypriceview.cpp:128
+#: widgets/rc.cpp:36
+#: widgets/register.cpp:565
+#: widgets/transaction.cpp:1027
+#: widgets/transaction.cpp:1484
+msgid "Date"
+msgstr "Data"
+
+#: reports/listtable.cpp:198
+msgid "Num"
+msgstr "Num"
+
+#: dialogs/kfindtransactiondlg.cpp:204
+#: dialogs/kmymoneysplittable.cpp:78
+#: dialogs/kmymoneysplittable.cpp:831
+#: dialogs/rc.cpp:217
+#: dialogs/transactioneditor.cpp:831
+#: dialogs/transactioneditor.cpp:1374
+#: dialogs/transactioneditor.cpp:1382
+#: dialogs/transactioneditor.cpp:1396
+#: dialogs/transactioneditor.cpp:1449
+#: dialogs/transactioneditor.cpp:1456
+#: dialogs/transactioneditor.cpp:1504
+#: reports/listtable.cpp:200
+#: views/kcategoriesview.cpp:76
+#: views/rc.cpp:62
+#: widgets/rc.cpp:115
+#: widgets/register.cpp:62
+#: widgets/transaction.cpp:848
+#: widgets/transaction.cpp:906
+msgid "Category"
+msgstr "Categoria"
+
+#: dialogs/kmymoneysplittable.cpp:79
+#: dialogs/kmymoneysplittable.cpp:837
+#: reports/listtable.cpp:202
+#: widgets/rc.cpp:101
+#: widgets/transaction.cpp:1042
+#: widgets/transaction.cpp:1628
+msgid "Memo"
+msgstr "Promemoria"
+
+#: reports/listtable.cpp:203
+msgid "Top Category"
+msgstr "Categoria superiore"
+
+#: reports/listtable.cpp:204
+msgid "Category Type"
+msgstr "Tipo di categoria"
+
+#: dialogs/rc.cpp:229
+#: dialogs/settings/rc.cpp:152
+#: reports/listtable.cpp:207
+#: widgets/kmymoneycombo.cpp:346
+#: widgets/rc.cpp:107
+msgid "Reconciled"
+msgstr "Riconciliato"
+
+#: reports/listtable.cpp:208
+#: widgets/rc.cpp:117
+msgid "Action"
+msgstr "Azione"
+
+#: dialogs/investactivities.cpp:199
+#: dialogs/investactivities.cpp:287
+#: dialogs/investactivities.cpp:424
+#: dialogs/investactivities.cpp:504
+#: dialogs/investactivities.cpp:544
+#: dialogs/investtransactioneditor.cpp:241
+#: reports/listtable.cpp:209
+#: widgets/rc.cpp:103
+#: widgets/transaction.cpp:1513
+msgid "Shares"
+msgstr "Quote"
+
+#: dialogs/investtransactioneditor.cpp:248
+#: dialogs/investtransactioneditor.cpp:1067
+#: dialogs/investtransactioneditor.cpp:1068
+#: dialogs/investtransactioneditor.cpp:1072
+#: dialogs/kequitypriceupdatedlg.cpp:72
+#: dialogs/rc.cpp:109
+#: dialogs/rc.cpp:164
+#: dialogs/rc.cpp:251
+#: dialogs/rc.cpp:756
+#: dialogs/rc.cpp:827
+#: dialogs/settings/rc.cpp:117
+#: reports/listtable.cpp:210
+#: reports/listtable.cpp:211
+#: reports/pivottable.cpp:2441
+#: views/kinvestmentview.cpp:80
+#: widgets/kmymoneypriceview.cpp:129
+#: widgets/rc.cpp:43
+#: widgets/rc.cpp:105
+#: widgets/register.cpp:573
+msgid "Price"
+msgstr "Prezzo"
+
+#: reports/listtable.cpp:212
+msgid "Net Value"
+msgstr "Valore netto"
+
+#: reports/listtable.cpp:213
+msgid "Buys"
+msgstr "Acquisti"
+
+#: reports/listtable.cpp:214
+msgid "Sells"
+msgstr "Vendite"
+
+#: reports/listtable.cpp:215
+msgid "Dividends Reinvested"
+msgstr "Dividendi reinvestiti"
+
+#: reports/listtable.cpp:216
+msgid "Dividends Paid Out"
+msgstr "Dividendi pagati"
+
+#: reports/listtable.cpp:217
+msgid "Starting Balance"
+msgstr "Bilancio iniziale"
+
+#: reports/listtable.cpp:218
+msgid "Ending Balance"
+msgstr "Bilancio finale"
+
+#: reports/listtable.cpp:219
+msgid "Annualized Return"
+msgstr "Redditività annuale"
+
+#: reports/listtable.cpp:220
+msgid "Return On Investment"
+msgstr "Redditività sugli investimenti (ROI)"
+
+#: dialogs/rc.cpp:106
+#: dialogs/rc.cpp:161
+#: dialogs/rc.cpp:248
+#: dialogs/rc.cpp:505
+#: dialogs/rc.cpp:570
+#: dialogs/rc.cpp:667
+#: dialogs/rc.cpp:753
+#: reports/listtable.cpp:223
+#: widgets/register.cpp:570
+msgid "Payment"
+msgstr "Pagamento"
+
+#: dialogs/rc.cpp:111
+#: dialogs/rc.cpp:166
+#: dialogs/rc.cpp:253
+#: dialogs/rc.cpp:709
+#: dialogs/rc.cpp:758
+#: reports/listtable.cpp:224
+#: widgets/rc.cpp:119
+#: widgets/register.cpp:575
+msgid "Balance"
+msgstr "Saldo"
+
+#: reports/listtable.cpp:227
+#: views/kscheduledview.cpp:74
+msgid "Next Due Date"
+msgstr "Prossima data di pagamento"
+
+#: reports/listtable.cpp:229
+#: views/kscheduledview.cpp:76
+msgid "Payment Method"
+msgstr "Metodo di pagamento"
+
+#: dialogs/rc.cpp:803
+#: reports/listtable.cpp:231
+#: widgets/rc.cpp:2
+msgid "Description"
+msgstr "Descrizione "
+
+#: reports/listtable.cpp:232
+msgid "Opening Date"
+msgstr "Data di apertura"
+
+#: reports/listtable.cpp:234
+msgid "Balance Early Warning"
+msgstr "Preallarme bilancio"
+
+#: reports/listtable.cpp:235
+msgid "Balance Max Limit"
+msgstr "Limite massimo di saldo"
+
+#: reports/listtable.cpp:236
+msgid "Credit Early Warning"
+msgstr "Preallarme credito"
+
+#: reports/listtable.cpp:237
+msgid "Credit Max Limit"
+msgstr "Limite massimo di credito"
+
+#: dialogs/rc.cpp:376
+#: reports/listtable.cpp:238
+msgid "Tax"
+msgstr "Imposte"
+
+#: reports/listtable.cpp:239
+msgid "Preferred"
+msgstr "Preferito"
+
+#: reports/listtable.cpp:240
+msgid "Loan Amount"
+msgstr "Importo del prestito"
+
+#: dialogs/rc.cpp:511
+#: reports/listtable.cpp:241
+msgid "Interest Rate"
+msgstr "Tasso d'interesse"
+
+#: reports/listtable.cpp:242
+msgid "Next Interest Change"
+msgstr "Prossima variazione interessi"
+
+#: reports/listtable.cpp:243
+msgid "Periodic Payment"
+msgstr "Pagamento periodico"
+
+#: reports/listtable.cpp:244
+msgid "Final Payment"
+msgstr "Pagamento finale"
+
+#: reports/listtable.cpp:245
+#: views/khomeview.cpp:766
+#: views/khomeview.cpp:1265
+#: views/khomeview.cpp:1273
+msgid "Current Balance"
+msgstr "Saldo corrente"
+
+#: dialogs/investactivities.cpp:201
+#: dialogs/investactivities.cpp:289
+#: dialogs/investactivities.cpp:368
+#: dialogs/investactivities.cpp:426
+#: dialogs/rc.cpp:327
+#: reports/listtable.cpp:360
+#: reports/listtable.cpp:364
+#: reports/listtable.cpp:556
+#: reports/listtable.cpp:558
+#: reports/pivottable.cpp:1343
+#: reports/pivottable.cpp:1445
+#: reports/pivottable.cpp:1505
+#: reports/pivottable.cpp:1598
+#: reports/pivottable.cpp:1768
+#: reports/pivottable.cpp:1845
+#: reports/pivottable.cpp:2165
+#: reports/pivottable.cpp:2167
+#: reports/pivottable.cpp:2187
+#: reports/pivottable.cpp:2189
+#: reports/querytabletest.cpp:134
+#: reports/querytabletest.cpp:135
+#: reports/querytabletest.cpp:136
+#: reports/querytabletest.cpp:137
+#: reports/querytabletest.cpp:162
+#: reports/querytabletest.cpp:163
+#: reports/querytabletest.cpp:164
+#: reports/querytabletest.cpp:197
+#: reports/querytabletest.cpp:198
+#: reports/querytabletest.cpp:224
+#: reports/querytabletest.cpp:250
+#: reports/querytabletest.cpp:251
+#: reports/querytabletest.cpp:252
+#: reports/querytabletest.cpp:275
+#: reports/querytabletest.cpp:276
+#: reports/querytabletest.cpp:277
+#: reports/querytabletest.cpp:366
+#: reports/querytabletest.cpp:422
+#: reports/querytabletest.cpp:423
+#: views/kforecastview.cpp:568
+#: views/rc.cpp:18
+#: widgets/kmymoneyaccounttreeforecast.cpp:139
+#: widgets/transaction.cpp:1643
+msgid "Total"
+msgstr "Totale"
+
+#: reports/listtable.cpp:444
+msgid "Initial Market Value"
+msgstr "Valore di mercato iniziale"
+
+#: reports/listtable.cpp:445
+msgid "Ending Market Value"
+msgstr "Valore di mercato finale"
+
+#: reports/listtable.cpp:448
+#: reports/querytabletest.cpp:651
+msgid "Opening Balance"
+msgstr "Bilancio di apertura"
+
+#: reports/listtable.cpp:449
+#: reports/querytabletest.cpp:652
+#: reports/querytabletest.cpp:653
+msgid "Closing Balance"
+msgstr "Bilancio di chiusura"
+
+#: reports/listtable.cpp:490
+#: reports/listtable.cpp:491
+msgid "Calculated"
+msgstr "Calcolato"
+
+#: reports/listtable.cpp:572
+#: reports/listtable.cpp:574
+#: reports/pivottable.cpp:1530
+#: reports/pivottable.cpp:1886
+#: reports/querytabletest.cpp:138
+#: reports/querytabletest.cpp:165
+#: reports/querytabletest.cpp:199
+#: reports/querytabletest.cpp:225
+#: reports/querytabletest.cpp:253
+#: reports/querytabletest.cpp:278
+#: reports/querytabletest.cpp:367
+#: reports/querytabletest.cpp:402
+#: reports/querytabletest.cpp:424
+#: reports/querytabletest.cpp:548
+#: reports/querytabletest.cpp:551
+#: reports/querytabletest.cpp:586
+msgid "Grand Total"
+msgstr "Totale complessivo"
+
+#: dialogs/rc.cpp:233
+#: reports/pivottable.cpp:339
+#: views/kscheduledview.cpp:174
+#: views/kscheduledview.cpp:433
+#: views/kscheduledview.cpp:449
+#: widgets/kmymoneyscheduledcalendar.cpp:48
+msgid "Transfers"
+msgstr "Trasferimenti"
+
+#: reports/pivottable.cpp:1951
+msgid "Legend"
+msgstr "Legenda"
+
+#: reports/pivottable.cpp:2411
+#: views/khomeview.cpp:1406
+#: views/khomeview.cpp:1443
+msgid "Actual"
+msgstr "Attuale"
+
+#: reports/pivottable.cpp:2421
+#: views/khomeview.cpp:1409
+#: views/khomeview.cpp:1446
+msgid "Difference"
+msgstr "Differenza"
+
+#: reports/pivottable.cpp:2431
+msgid "Moving Average"
+msgstr "Media mobile"
+
+#: reports/pivottable.cpp:2436
+msgid "Moving Average Price"
+msgstr "Media mobile del prezzo"
+
+#: reports/objectinfotable.cpp:214
+#: reports/querytable.cpp:693
+#: reports/querytable.cpp:736
+#: reports/querytable.cpp:1356
+#: reports/querytable.cpp:1375
+#: views/kpayeesview.cpp:742
+#, c-format
+msgid "Transfer from %1"
+msgstr "Trasferisci da %1"
+
+#: reports/objectinfotable.cpp:215
+#: reports/querytable.cpp:694
+#: reports/querytable.cpp:735
+#: reports/querytable.cpp:1355
+#: reports/querytable.cpp:1374
+#: views/kpayeesview.cpp:740
+#, c-format
+msgid "Transfer to %1"
+msgstr "Trasferisci a %1"
+
+#: reports/querytabletest.cpp:471
+#: views/kreportsview.cpp:1144
+msgid "Investment Transactions"
+msgstr "Transazioni investimento"
+
+#: reports/querytabletest.cpp:472
+#: reports/querytabletest.cpp:564
+msgid "Test Report"
+msgstr "Anteprima report"
+
+#: reports/querytabletest.cpp:547
+#: reports/querytabletest.cpp:550
+msgid "Total Stock 1"
+msgstr "Totale Azione 1"
+
+#: reports/querytabletest.cpp:563
+#: views/kreportsview.cpp:1174
+msgid "Investment Performance by Account"
+msgstr "Prestazioni degli investimenti per conto"
+
+#: reports/querytable.cpp:431
+#: reports/querytable.cpp:1200
+#, c-format
+msgid "Month of %1"
+msgstr "Mese di %1"
+
+#: reports/querytable.cpp:432
+#: reports/querytable.cpp:1201
+#, c-format
+msgid "Week of %1"
+msgstr "Settimana di %1"
+
+#: reports/querytable.cpp:576
+#: reports/querytable.cpp:739
+#: reports/querytable.cpp:858
+#: reports/querytable.cpp:1325
+#: reports/querytable.cpp:1481
+msgid "No Institution"
+msgstr "Nessun istituto"
+
+#: reports/querytable.cpp:580
+#: reports/querytable.cpp:1329
+msgid "[Empty Payee]"
+msgstr "[Beneficiario vuoto]"
+
+#: reports/querytable.cpp:615
+#: reports/querytable.cpp:1361
+msgid "[Split Transaction]"
+msgstr "[Transazione suddivisa]"
+
+#: reports/querytable.cpp:616
+#: reports/querytable.cpp:617
+msgid "Split"
+msgstr "Suddividi"
+
+#: main.cpp:51
+msgid ""
+"\n"
+"KMyMoney, the Personal Finance Manager for KDE.\n"
+"\n"
+"Please consider contributing to this project with code and/or suggestions."
+msgstr ""
+"\n"
+"KMyMoney, il programma KDE per le finanze personali.\n"
+"\n"
+"Considera l'idea di contribuire a questo progetto con il codice e/o suggerimenti."
+
+#: main.cpp:55
+msgid "language to be used"
+msgstr "lingua da usare"
+
+#: main.cpp:56
+msgid "don't open last used file"
+msgstr "non aprire l'ultimo file utilizzato"
+
+#: main.cpp:57
+msgid "enable performance timers"
+msgstr "abilita timer prestazioni"
+
+#: main.cpp:61
+msgid "turn on program traces"
+msgstr "abilita traccia del programma"
+
+#: main.cpp:62
+msgid "dump the names of all defined KAction objects to stdout and quit"
+msgstr ""
+
+#: main.cpp:66
+msgid "file to open"
+msgstr "file da aprire"
+
+#: main.cpp:92
+msgid "Memory leakage detection"
+msgstr "Rilevamento utilizzo anomalo della memoria"
+
+#: main.cpp:96
+msgid "Compiled with the following settings:\n"
+msgstr "Compilato con le seguenti impostazioni:\n"
+
+#: dialogs/kmymoneysplittable.cpp:650
+#: dialogs/ksplittransactiondlg.cpp:277
+#: main.cpp:98
+msgid "KMyMoney"
+msgstr "KMyMoney"
+
+#: main.cpp:104
+msgid "Initial idea, much initial source code, Project admin"
+msgstr "Idea iniziale, molto codice sorgente iniziale, amministratore del progetto"
+
+#: main.cpp:105
+msgid "Core engine, Release Manager, Project admin"
+msgstr "Motore di base, gestore dei rilasci, amministratore del progetto"
+
+#: main.cpp:106
+msgid "Reporting logic, OFX Import"
+msgstr "Logica di reportistica, Importatore OFX"
+
+#: main.cpp:107
+msgid "Database backend, maintainer stable branch"
+msgstr "Motore del database, responsabile del ramo stabile"
+
+#: main.cpp:108
+msgid "Forecast, Reports"
+msgstr "Previsione, report"
+
+#: main.cpp:109
+msgid "Project Admin"
+msgstr "Amministratore del progetto"
+
+#: main.cpp:110
+msgid "Developer"
+msgstr "Sviluppatore"
+
+#: main.cpp:111
+msgid "Database backend"
+msgstr "Motore del database"
+
+#: main.cpp:113
+msgid "Initial investment support"
+msgstr "Donazione per il supporto iniziale"
+
+#: main.cpp:114
+msgid "Developer & Artist"
+msgstr "Sviluppatore e artista"
+
+#: main.cpp:115
+msgid "Icons & splash screen"
+msgstr "Icone e schermata d'avvio"
+
+#: main.cpp:116
+#: main.cpp:117
+msgid "Patches"
+msgstr "Patch"
+
+#: main.cpp:136
+msgid "The monetary decimal symbol is not correctly set in the KDE Control Center's Country/Region & Language settings. Please set it to a reasonable value and start KMyMoney again."
+msgstr "Il simbolo decimale monetario non è configurato correttamente nelle impostazioni Regionali/Lingua e Paese del centro di controllo di KDE. Imposta il valore corretto e riavvia KMyMoney."
+
+#: main.cpp:136
+msgid "Invalid settings"
+msgstr "Impostazioni non valide"
+
+#: main.cpp:228
+msgid "Another instance of KMyMoney is already running. Do you want to quit?"
+msgstr "Un'altra istanza di KMyMoney è già in esecuzione. Vuoi uscire?"
+
+#: main.cpp:289
+msgid "Uncaught error. Please report the details to the developers"
+msgstr "Errore non catturato. Segnala i dettagli agli sviluppatori"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Vincenzo Reale,Andrea Nironi,Samuel Algisi,Sandro Bonazzola"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "smart2128@baslug.org,,,sandrobonazzola@users.sourceforge.net"
+
+#: dialogs/kcsvprogressdlg.cpp:62
+#: dialogs/kimportdlg.cpp:66
+#: rc.cpp:1
+msgid "&Import"
+msgstr "&Importa"
+
+#: rc.cpp:2
+msgid "E&xport"
+msgstr "&Esporta"
+
+#: rc.cpp:3
+msgid "&Institution"
+msgstr "&Istituto"
+
+#: rc.cpp:4
+msgid "&Account"
+msgstr "&Conto"
+
+#: rc.cpp:5
+msgid "&Category"
+msgstr "&Categoria"
+
+#: rc.cpp:6
+msgid "&Transaction"
+msgstr "&Transazione"
+
+#: rc.cpp:7
+#: rc.cpp:20
+msgid "Mark transaction as..."
+msgstr "Segna transazione come..."
+
+#: rc.cpp:8
+#: rc.cpp:21
+msgid "Mark transaction"
+msgstr "Segna transazione"
+
+#: rc.cpp:9
+msgid "T&ools"
+msgstr "S&trumenti"
+
+#: rc.cpp:10
+msgid "Account options"
+msgstr "Opzioni conto"
+
+#: rc.cpp:11
+msgid "Category options"
+msgstr "Opzioni categoria"
+
+#: rc.cpp:12
+msgid "Institution options"
+msgstr "Opzioni istituto"
+
+#: rc.cpp:13
+msgid "Payee options"
+msgstr "Opzioni beneficiario"
+
+#: rc.cpp:14
+msgid "Budget options"
+msgstr "Opzioni budget"
+
+#: rc.cpp:15
+msgid "Investment options"
+msgstr "Opzioni investimento"
+
+#: rc.cpp:16
+msgid "Scheduled transactions options"
+msgstr "Opzioni transazioni pianificate"
+
+#: rc.cpp:17
+msgid "Transaction options"
+msgstr "Opzioni transazione"
+
+#: rc.cpp:18
+msgid "Move transaction to..."
+msgstr "Sposta transazione a..."
+
+#: rc.cpp:19
+msgid "Select account"
+msgstr "Seleziona conto"
+
+#: rc.cpp:22
+msgid "Currency options"
+msgstr "Opzioni valuta"
+
+#: rc.cpp:24
+msgid "Always show a No. field in transaction form"
+msgstr "Mostra sempre un campo Num. nel modulo della transazione"
+
+#: rc.cpp:25
+msgid "Auto fill with previous transaction data"
+msgstr "Auto-completamento coi dati della precedente transazione"
+
+#: rc.cpp:26
+msgid "Treat two transactions as identical, if amount differs less than"
+msgstr "Considera due transazioni come identiche, se il loro ammontare differisce per meno di"
+
+#: dialogs/settings/rc.cpp:144
+#: rc.cpp:27
+msgid "Auto increment check number"
+msgstr "Auto-incrementa il numero degli assegni"
+
+#: rc.cpp:28
+msgid "Autosave file periodically"
+msgstr "Salvataggio file automatico periodico"
+
+#: rc.cpp:29
+msgid "Autosave interval in minutes"
+msgstr "Intervallo salvataggio automatico in minuti"
+
+#: rc.cpp:30
+msgid "Check schedules upon startup"
+msgstr "Controlla le operazioni pianificate all'avvio"
+
+#: dialogs/settings/rc.cpp:171
+#: rc.cpp:31
+msgid "Enter transactions this number of days in advance"
+msgstr "Inserisci le transazioni con questo numero di giorni di anticipo"
+
+#: dialogs/settings/rc.cpp:172
+#: rc.cpp:32
+msgid "Number of days to preview schedules in ledger"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:143
+#: rc.cpp:33
+msgid "Insert transaction type into No. field for new transactions"
+msgstr "Inserisci il tipo di transazione nel campo Num. per le nuove transazioni"
+
+#: dialogs/settings/rc.cpp:145
+#: rc.cpp:34
+msgid "Keep changes when selecting a different transaction/split"
+msgstr "Mantieni le modifiche quando si seleziona un'altra transazione/suddivisione"
+
+#: rc.cpp:35
+msgid "Using the Enter key moves between the fields"
+msgstr "Usare il tasto Invio per spostarsi tra i campi"
+
+#: dialogs/settings/rc.cpp:130
+#: rc.cpp:36
+msgid "Use the ledger lens"
+msgstr "Usa la lente"
+
+#: rc.cpp:37
+msgid "Price Precision"
+msgstr "Precisione del prezzo"
+
+#: dialogs/rc.cpp:65
+#: rc.cpp:38
+msgid "Update price history"
+msgstr "Aggiorna lo storico del prezzo"
+
+#: dialogs/settings/rc.cpp:132
+#: rc.cpp:39
+msgid "Show transaction form"
+msgstr "Mostra modulo transazione"
+
+#: rc.cpp:40
+msgid "Start with last selected view or homepage"
+msgstr "Inizia con l'ultima vista selezionata o con la pagina principale"
+
+#: rc.cpp:41
+msgid "Use GPG to encrypt data file"
+msgstr "Usa GPG per cifrare il file dei dati"
+
+#: rc.cpp:42
+msgid "Also encrypt against recover key"
+msgstr "Cifra anche con la chiave di recupero"
+
+#: rc.cpp:43
+msgid "GPG User ID (deprecated)"
+msgstr "ID utente GPG (sconsigliato)"
+
+#: rc.cpp:44
+msgid "GPG User ID"
+msgstr "ID utente GPG"
+
+#: rc.cpp:45
+msgid "Run in expert (accountant) mode"
+msgstr "Esegui in modalità esperto (contabile)"
+
+#: rc.cpp:46
+msgid "Show splash screen during startup"
+msgstr "Mostra schermata iniziale all'avvio"
+
+#: rc.cpp:47
+msgid "Synchronize account in ledger and investment view"
+msgstr "Sincronizza il conto nelle viste libro mastro e investimenti"
+
+#: rc.cpp:48
+msgid "Icon size for view selection"
+msgstr "Dimensione delle icone per la selezione delle viste"
+
+#: rc.cpp:49
+msgid "list of hidden views"
+msgstr "elenco delle viste nascoste"
+
+#: rc.cpp:50
+msgid "Firsttime switch to start new user wizard"
+msgstr ""
+
+#: rc.cpp:51
+msgid "Show title bar on each view"
+msgstr "Mostra la barra del titolo in ogni vista"
+
+#: rc.cpp:52
+msgid "Start string matches for e.g. payees at start of string"
+msgstr ""
+
+#: rc.cpp:53
+msgid "Order of items on homepage"
+msgstr "Ordine degli elementi nella pagina principale"
+
+#: rc.cpp:54
+msgid "Percentage of default font size used for home view HTML page"
+msgstr "Percentuale della dimensione predefinita del carattere utilizzato per visualizzare la pagina principale HTML"
+
+#: rc.cpp:55
+msgid "Remember (manually adjusted) font size in home view on program end."
+msgstr "Memorizza la dimensione dei caratteri (corretta manualmente) nella vista iniziale all'uscita del programma."
+
+#: rc.cpp:56
+msgid "Show account limit information on the Homepage"
+msgstr "Mostra informazioni di limite del conto sulla pagina principale"
+
+#: rc.cpp:58
+msgid "Hide closed accounts"
+msgstr "Nascondi i conti chiusi"
+
+#: rc.cpp:59
+msgid "Hide finished schedules"
+msgstr "Nascondi pianificazioni terminate"
+
+#: rc.cpp:61
+msgid "Show all register entries in full detail"
+msgstr "Mostra il dettaglio completo delle voci di registro "
+
+#: dialogs/settings/rc.cpp:129
+#: rc.cpp:62
+msgid "Show a grid in the register"
+msgstr "Mostra una griglia nel registro"
+
+#: rc.cpp:63
+msgid "Show fancy group markers"
+msgstr "Mostra indicatori di gruppo decorati"
+
+#: rc.cpp:64
+msgid "Show fancy markers for previous and current fiscal year"
+msgstr ""
+
+#: rc.cpp:65
+msgid "Starting month of the fiscal year"
+msgstr "Mese iniziale dell'anno fiscale"
+
+#: rc.cpp:66
+msgid "Starting day of the fiscal year"
+msgstr "Giorno iniziale dell'anno fiscale"
+
+#: rc.cpp:67
+msgid "Start date"
+msgstr "Data di inizio"
+
+#: dialogs/settings/rc.cpp:9
+#: rc.cpp:68
+msgid "Use system colors"
+msgstr "Usa i colori di sistema"
+
+#: rc.cpp:69
+msgid "List color"
+msgstr "Elenco dei colori"
+
+#: rc.cpp:70
+msgid "List background color"
+msgstr "Colore di sfondo degli elenchi"
+
+#: rc.cpp:71
+msgid "List grid color"
+msgstr "Colore della griglia degli elenchi"
+
+#: rc.cpp:72
+msgid "Background color for imported transactions"
+msgstr "Colore di sfondo per le transazioni importate"
+
+#: rc.cpp:73
+msgid "Background color for matched transactions"
+msgstr "Colore di sfondo per le transazioni verificate"
+
+#: rc.cpp:74
+msgid "List color for erronous transactions"
+msgstr "Elenco dei colori per le transazioni non valide"
+
+#: rc.cpp:75
+msgid "List color for missing conversion rate"
+msgstr "Colore dell'elenco con tasso di conversione mancante"
+
+#: rc.cpp:76
+msgid "List color for negative values"
+msgstr "Colore dell'elenco con valori negativi"
+
+#: rc.cpp:77
+msgid "Background color for group marker"
+msgstr "Colore di sfondo per i marcatori di gruppo"
+
+#: rc.cpp:78
+msgid "Background color for required fields"
+msgstr "Colore di sfondo per i campi obbligatori"
+
+#: rc.cpp:79
+msgid "Use system font"
+msgstr "Usa i caratteri di sistema"
+
+#: dialogs/settings/rc.cpp:21
+#: rc.cpp:80
+msgid "Cell font"
+msgstr "Carattere delle celle"
+
+#: dialogs/settings/rc.cpp:22
+#: rc.cpp:81
+msgid "Header font"
+msgstr "Carattere dell'intestazione"
+
+#: rc.cpp:82
+#: rc.cpp:83
+msgid "Sort order of register in normal view"
+msgstr "Ordinamento del registro nella vista normale"
+
+#: rc.cpp:84
+msgid "Sort order of register in search dialog"
+msgstr "Ordinamento del registro nella finestra di ricerca"
+
+#: rc.cpp:85
+msgid "Default reconciliation state for transactions entered during reconciliation"
+msgstr ""
+
+#: rc.cpp:86
+#, fuzzy
+msgid "Number of days (plus/minus) to search for matching transactions"
+msgstr "Usa i criteri correnti e cerca transazioni corrispondenti."
+
+#: rc.cpp:87
+msgid "During import, ask for a new payee's default category"
+msgstr ""
+
+#: rc.cpp:88
+msgid "Method to calculate forecast"
+msgstr "Metodo di calcolo della previsione"
+
+#: rc.cpp:89
+msgid "Days to forecast"
+msgstr "Giorni da prevedere"
+
+#: rc.cpp:90
+msgid "Days of normal account cycle"
+msgstr "Giorni del ciclo di conto normale"
+
+#: rc.cpp:91
+msgid "Number of historic cycles to use in forecast"
+msgstr "Numero di cicli storici da utilizzare nella previsione"
+
+#: rc.cpp:92
+msgid "Day of month to start forecast"
+msgstr "Giorno del mese da cui iniziare la previsione"
+
+#: rc.cpp:93
+msgid "Method to calculate history-based forecast"
+msgstr "Metodo di calcolo della previsione basato sullo storico"
+
+#: rc.cpp:94
+msgid "Skip opening date when fetching transactions"
+msgstr "Salta la data di apertura quando scarichi le transazioni"
+
+#: rc.cpp:95
+msgid "Include future transaction when using Schedule Forecast"
+msgstr "Includi transazione futura quando si usa Previsione pianificazione"
+
+#: rc.cpp:96
+#, fuzzy
+msgid "Include scheduled transactions when using Schedule Forecast"
+msgstr "Includi transazioni pianificate"
+
+#: rc.cpp:97
+msgid "additional names for cash account"
+msgstr "nomi aggiuntivi per il conto di cassa"
+
+#: rc.cpp:98
+msgid "additional names for checking account"
+msgstr "nomi aggiuntivi per il conto assegni"
+
+#: rc.cpp:99
+msgid "additional names for credit card account"
+msgstr "nomi aggiuntivi per il conto carta di credito"
+
+#: rc.cpp:100
+msgid "additional names for asset account"
+msgstr "nomi aggiuntivi per il conto attività"
+
+#: rc.cpp:101
+msgid "additional names for opening balance payee"
+msgstr ""
+
+#: rc.cpp:102
+msgid "additional names for invoice accounts"
+msgstr ""
+
+#: rc.cpp:103
+#: widgets/rc.cpp:161
+#: widgets/rc.cpp:163
+msgid "..."
+msgstr "..."
+
+#: views/kcategoriesview.cpp:276
+msgid "Profit: "
+msgstr "Profitto: "
+
+#: views/kcategoriesview.cpp:278
+msgid "Loss: "
+msgstr "Perdita: "
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:54
+#: dialogs/transactioneditor.cpp:605
+#: views/kpayeesview.cpp:365
+#: widgets/kmymoneyonlinequoteconfig.cpp:54
+msgid "Accepts the entered data and stores it"
+msgstr "Accetta i dati inseriti e li salva"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:55
+#: views/kpayeesview.cpp:366
+#: widgets/kmymoneyonlinequoteconfig.cpp:55
+msgid "Use this to accept the modified data."
+msgstr "Premi qui per accettare le modifiche ai dati."
+
+#: views/kpayeesview.cpp:491
+msgid "A payee with the name '%1' already exists. It is not advisable to have multiple payees with the same identification name. Are you sure you would like to rename the payee?"
+msgstr ""
+
+#: views/kpayeesview.cpp:518
+#: views/kpayeesview.cpp:869
+msgid "Unable to modify payee"
+msgstr "Impossibile modificare il beneficiario"
+
+#: views/kpayeesview.cpp:564
+msgid "Do you want to save the changes for <b>%1</b>?"
+msgstr "Vuoi salvare le modifiche per <b>%1</b>?"
+
+#: views/kbudgetview.cpp:490
+#: views/kpayeesview.cpp:565
+msgid "Save changes"
+msgstr "Salva le modifiche"
+
+#: views/kgloballedgerview.cpp:737
+#: views/kpayeesview.cpp:662
+#: views/kpayeesview.cpp:753
+#, c-format
+msgid "Balance: %1"
+msgstr "Saldo: %1"
+
+#: views/kpayeesview.cpp:725
+#: views/kpayeesview.cpp:731
+#, c-format
+msgid "Amortization of %1"
+msgstr "Ammortamento di %1"
+
+#: views/kpayeesview.cpp:727
+#: views/kpayeesview.cpp:733
+#, c-format
+msgid "Payment to %1"
+msgstr "Pagamento a %1"
+
+#: views/kpayeesview.cpp:736
+#, c-format
+msgid "Loan payment from %1"
+msgstr "Pagamento del prestito da %1"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:123
+#: dialogs/kconfirmmanualenterdlg.cpp:133
+#: views/kpayeesview.cpp:745
+#: widgets/kmymoneycategory.cpp:160
+#: widgets/kmymoneycategory.cpp:166
+#: widgets/transaction.cpp:851
+#: widgets/transaction.cpp:1397
+#: widgets/transaction.cpp:1411
+msgid ""
+"_: Split transaction (category replacement)\n"
+"Split transaction"
+msgstr "Suddividi transazione"
+
+#: views/kreportsview.cpp:262
+msgid ""
+"There was an error creating your report: \"%1\".\n"
+"Please report this error to the developer's list: kmymoney2-developer@lists.sourceforge.net"
+msgstr ""
+"Si è verificato un errore nella creazione del report: \"%1\".\n"
+"Segnala questo errore alla lista degli sviluppatori: kmymoney2-developer@lists.sourceforge.net"
+
+#: views/kreportsview.cpp:264
+msgid "Critical Error"
+msgstr "Errore grave"
+
+#: views/kreportsview.cpp:268
+msgid "Unable to generate report"
+msgstr "Impossibile creare il report"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:125
+#: views/kreportsview.cpp:286
+#: views/rc.cpp:53
+#: widgets/rc.cpp:146
+msgid "Chart"
+msgstr "Grafico"
+
+#: views/kreportsview.cpp:287
+#: widgets/rc.cpp:147
+msgid "Show the chart version of this report"
+msgstr "Mostra il grafico di questo report"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:112
+#: views/khomeview.cpp:900
+#: views/kreportsview.cpp:294
+#: views/kreportsview.cpp:328
+msgid "Report"
+msgstr "Report"
+
+#: views/kreportsview.cpp:295
+msgid "Show the report version of this chart"
+msgstr "Mostra il report di questo grafico"
+
+#: views/kmymoneyview.cpp:236
+#: views/kreportsview.cpp:314
+#: views/kreportsview.cpp:326
+msgid "Reports"
+msgstr "Report"
+
+#: views/khomeview.cpp:902
+#: views/kreportsview.cpp:329
+#: widgets/rc.cpp:56
+msgid "Comment"
+msgstr "Commento"
+
+#: views/kreportsview.cpp:432
+msgid "Charts"
+msgstr "Grafici"
+
+#: views/khomeview.cpp:897
+#: views/kreportsview.cpp:470
+msgid "Favorite Reports"
+msgstr "Report preferiti"
+
+#: views/kreportsview.cpp:486
+msgid "Old Customized Reports"
+msgstr "Vecchi report personalizzati"
+
+#: views/kreportsview.cpp:579
+msgid "Include Stylesheet"
+msgstr "Includi foglio di stile"
+
+#: views/kreportsview.cpp:585
+msgid ""
+"_: CSV (Filefilter)\n"
+"CSV files"
+msgstr "File CSV"
+
+#: views/kreportsview.cpp:586
+msgid ""
+"_: HTML (Filefilter)\n"
+"HTML files"
+msgstr "File HTML"
+
+#: views/kreportsview.cpp:591
+msgid "Export as"
+msgstr "Esporta come"
+
+#: views/kreportsview.cpp:619
+#: views/kreportsview.cpp:660
+#: views/kreportsview.cpp:942
+#: views/kreportsview.cpp:950
+#: views/kreportsview.cpp:958
+#: views/kreportsview.cpp:968
+#: views/kreportsview.cpp:980
+#: views/kreportsview.cpp:998
+#: views/kreportsview.cpp:1006
+#: views/kreportsview.cpp:1014
+#: views/kreportsview.cpp:1022
+#: views/kreportsview.cpp:1034
+#: views/kreportsview.cpp:1046
+#: views/kreportsview.cpp:1056
+#: views/kreportsview.cpp:1070
+#: views/kreportsview.cpp:1079
+#: views/kreportsview.cpp:1087
+#: views/kreportsview.cpp:1095
+#: views/kreportsview.cpp:1103
+#: views/kreportsview.cpp:1111
+#: views/kreportsview.cpp:1120
+#: views/kreportsview.cpp:1132
+#: views/kreportsview.cpp:1145
+#: views/kreportsview.cpp:1155
+#: views/kreportsview.cpp:1165
+#: views/kreportsview.cpp:1175
+#: views/kreportsview.cpp:1185
+#: views/kreportsview.cpp:1195
+#: views/kreportsview.cpp:1208
+#: views/kreportsview.cpp:1222
+#: views/kreportsview.cpp:1239
+#: views/kreportsview.cpp:1257
+#: views/kreportsview.cpp:1273
+#: views/kreportsview.cpp:1295
+#: views/kreportsview.cpp:1304
+#: views/kreportsview.cpp:1313
+#: views/kreportsview.cpp:1322
+#: views/kreportsview.cpp:1336
+#: views/kreportsview.cpp:1347
+#: views/kreportsview.cpp:1362
+#: views/kreportsview.cpp:1372
+#: views/kreportsview.cpp:1383
+#: views/kreportsview.cpp:1393
+#: views/kreportsview.cpp:1404
+#: views/kreportsview.cpp:1423
+#: views/kreportsview.cpp:1432
+#: views/kreportsview.cpp:1444
+#: views/kreportsview.cpp:1463
+#: views/kreportsview.cpp:1472
+#: views/kreportsview.cpp:1481
+#: views/kreportsview.cpp:1490
+msgid "Default Report"
+msgstr "Report predefinito"
+
+#: views/kreportsview.cpp:621
+#: views/kreportsview.cpp:661
+msgid "Custom Report"
+msgstr "Report personalizzato"
+
+#: views/kreportsview.cpp:622
+msgid " (Customized)"
+msgstr " (Personalizzato)"
+
+#: views/kreportsview.cpp:690
+msgid "Are you sure you want to delete report <b>%1</b>? There is no way to recover it!"
+msgstr "Sei sicuro di voler eliminare il report <b>%1</b>? Non ci sarà modo di recuperarlo!"
+
+#: views/kreportsview.cpp:690
+#: views/kreportsview.cpp:702
+msgid "Delete Report?"
+msgstr "Eliminare il report?"
+
+#: views/kreportsview.cpp:702
+msgid "Sorry, <b>%1</b> is a default report. You may not delete it."
+msgstr "Spiacente, <b>%1</b> è il report predefinito. Non puoi eliminarlo."
+
+#: views/kreportsview.cpp:882
+msgid "&Open"
+msgstr "&Apri"
+
+#: views/kreportsview.cpp:884
+msgid "&New report"
+msgstr "&Nuovo report"
+
+#: views/kreportsview.cpp:934
+msgid "Income and Expenses"
+msgstr "Entrate e uscite"
+
+#: views/kreportsview.cpp:941
+msgid "Income and Expenses This Month"
+msgstr "Entrate e uscite di questo mese"
+
+#: views/kreportsview.cpp:949
+msgid "Income and Expenses This Year"
+msgstr "Entrate e uscite di quest'anno"
+
+#: views/kreportsview.cpp:957
+msgid "Income and Expenses By Year"
+msgstr "Entrate e uscite per anno"
+
+#: views/kreportsview.cpp:967
+msgid "Income and Expenses Graph"
+msgstr "Grafico per Entrate e Uscite"
+
+#: views/kreportsview.cpp:979
+msgid "Income and Expenses Pie Chart"
+msgstr "Grafico a torta per Entrate e Uscite"
+
+#: views/khomeview.cpp:1361
+#: views/kreportsview.cpp:990
+msgid "Net Worth"
+msgstr "Patrimonio netto"
+
+#: views/kreportsview.cpp:997
+msgid "Net Worth By Month"
+msgstr "Patrimonio netto per mese"
+
+#: views/kreportsview.cpp:1005
+msgid "Net Worth Today"
+msgstr "Patrimonio netto ad oggi"
+
+#: views/kreportsview.cpp:1013
+msgid "Net Worth By Year"
+msgstr "Patrimonio netto per anno"
+
+#: views/kreportsview.cpp:1021
+msgid "7-day Cash Flow Forecast"
+msgstr "Previsione del flusso di cassa a 7 giorni"
+
+#: views/kreportsview.cpp:1033
+msgid "Net Worth Graph"
+msgstr "Grafico del patrimonio netto"
+
+#: views/kreportsview.cpp:1045
+msgid "Account Balances by Institution"
+msgstr "Saldi dei conti per istituto"
+
+#: views/kreportsview.cpp:1055
+msgid "Account Balances by Type"
+msgstr "Saldi dei conti per tipo"
+
+#: views/kreportsview.cpp:1069
+msgid "Transactions by Account"
+msgstr "Transazioni per conto"
+
+#: views/kreportsview.cpp:1078
+msgid "Transactions by Category"
+msgstr "Transazioni per categoria"
+
+#: views/kreportsview.cpp:1086
+msgid "Transactions by Payee"
+msgstr "Transazioni per beneficiario"
+
+#: views/kreportsview.cpp:1094
+msgid "Transactions by Month"
+msgstr "Transazioni per mese"
+
+#: views/kreportsview.cpp:1102
+msgid "Transactions by Week"
+msgstr "Transazioni per settimana"
+
+#: views/kreportsview.cpp:1110
+msgid "Loan Transactions"
+msgstr "Transazioni prestito"
+
+#: views/kreportsview.cpp:1119
+msgid "Transactions by Reconciliation Status"
+msgstr "Transazioni per stato di riconciliazione"
+
+#: views/kreportsview.cpp:1125
+msgid "Cash Flow"
+msgstr "Flusso di cassa"
+
+#: views/kreportsview.cpp:1131
+msgid "Cash Flow Transactions This Month"
+msgstr "Transazioni del mese in contanti"
+
+#: views/kmymoneyview.cpp:226
+#: views/kmymoneyview.cpp:228
+#: views/kreportsview.cpp:1137
+msgid "Investments"
+msgstr "Investimenti"
+
+#: views/kreportsview.cpp:1154
+msgid "Investment Holdings by Account"
+msgstr "Investimenti di proprietà per conto"
+
+#: views/kreportsview.cpp:1164
+msgid "Investment Holdings by Type"
+msgstr "Investimenti di proprietà per tipo"
+
+#: views/kreportsview.cpp:1184
+msgid "Investment Performance by Type"
+msgstr "Prestazioni degli investimenti per tipo"
+
+#: views/kreportsview.cpp:1194
+msgid "Investment Holdings Pie"
+msgstr "Grafico a torta del portafoglio investimenti"
+
+#: views/kreportsview.cpp:1207
+msgid "Investment Worth Graph"
+msgstr "Grafico del capitale investito"
+
+#: views/kreportsview.cpp:1221
+msgid "Investment Price Graph"
+msgstr "Grafico del prezzo d'investimento"
+
+#: views/kreportsview.cpp:1238
+#, fuzzy
+msgid "Investment Moving Average Price Graph"
+msgstr "Media mobile investimenti"
+
+#: views/kreportsview.cpp:1256
+msgid "Investment Moving Average"
+msgstr "Media mobile investimenti"
+
+#: views/kreportsview.cpp:1272
+#, fuzzy
+msgid "Investment Moving Average vs Actual"
+msgstr "Media mobile ponderata"
+
+#: views/kreportsview.cpp:1287
+msgid "Taxes"
+msgstr "Imposte"
+
+#: views/kreportsview.cpp:1294
+msgid "Tax Transactions by Category"
+msgstr "Transazioni fiscali per categoria"
+
+#: views/kreportsview.cpp:1303
+msgid "Tax Transactions by Payee"
+msgstr "Transazioni fiscali per beneficiario"
+
+#: views/kreportsview.cpp:1312
+msgid "Tax Transactions by Category Last Fiscal Year"
+msgstr "Transazioni fiscali per categoria ultimo anno fiscale"
+
+#: views/kreportsview.cpp:1321
+msgid "Tax Transactions by Payee Last Fiscal Year"
+msgstr "Transazioni fiscali per beneficiario ultimo anno fiscale"
+
+#: views/kreportsview.cpp:1328
+msgid "Budgeting"
+msgstr "Budget"
+
+#: views/kreportsview.cpp:1335
+msgid "Budgeted vs. Actual This Year"
+msgstr "Preventivato vs. Anno in corso"
+
+#: views/kreportsview.cpp:1346
+#, fuzzy
+msgid "Budgeted vs. Actual This Year (YTM)"
+msgstr "Preventivato vs. Anno in corso"
+
+#: views/khomeview.cpp:1383
+#: views/kreportsview.cpp:1361
+msgid "Monthly Budgeted vs. Actual"
+msgstr "Preventivato Mensile vs. Attuale"
+
+#: views/kreportsview.cpp:1371
+msgid "Yearly Budgeted vs. Actual"
+msgstr "Preventivato annuale vs. Attuale"
+
+#: views/kreportsview.cpp:1382
+msgid "Monthly Budget"
+msgstr "Budget mensile"
+
+#: views/kreportsview.cpp:1392
+msgid "Yearly Budget"
+msgstr "Budget annuale"
+
+#: views/kreportsview.cpp:1403
+msgid "Yearly Budgeted vs Actual Graph"
+msgstr "Grafico di confronto Preventivato annuale vs. Attuale"
+
+#: views/kreportsview.cpp:1422
+msgid "Forecast By Month"
+msgstr "Previsione per mese"
+
+#: views/kreportsview.cpp:1431
+msgid "Forecast Next Quarter"
+msgstr "Previsione prossimo quarto"
+
+#: views/kreportsview.cpp:1443
+msgid "Net Worth Forecast Graph"
+msgstr "Grafico di previsione patrimonio netto"
+
+#: dialogs/rc.cpp:126
+#: dialogs/rc.cpp:128
+#: dialogs/rc.cpp:466
+#: views/kreportsview.cpp:1455
+msgid "General Information"
+msgstr "Informazioni generali"
+
+#: views/kreportsview.cpp:1462
+msgid "Schedule Information"
+msgstr "Informazioni pianificazione"
+
+#: views/kreportsview.cpp:1471
+msgid "Schedule Summary Information"
+msgstr "Informazioni di riepilogo pianificazioni"
+
+#: views/kreportsview.cpp:1480
+msgid "Account Information"
+msgstr "Informazioni conto"
+
+#: views/kreportsview.cpp:1489
+msgid "Loan Information"
+msgstr "Informazioni sul prestito"
+
+#: dialogs/rc.cpp:323
+#: views/kmymoneyview.cpp:148
+#: views/kmymoneyview.cpp:150
+msgid "Institutions"
+msgstr "Istituti"
+
+#: dialogs/knewaccountdlg.cpp:98
+#: views/kmymoneyview.cpp:162
+#: views/kmymoneyview.cpp:164
+#: widgets/rc.cpp:4
+#: widgets/rc.cpp:94
+msgid "Accounts"
+msgstr "Conti"
+
+#: views/kmymoneyview.cpp:176
+msgid "Bills & Reminders"
+msgstr "Addebiti e promemoria"
+
+#: views/kmymoneyview.cpp:178
+msgid "Scheduled transactions"
+msgstr "Transazioni pianificate"
+
+#: dialogs/knewaccountdlg.cpp:98
+#: dialogs/rc.cpp:193
+#: views/kmymoneyview.cpp:188
+#: views/kmymoneyview.cpp:190
+#: widgets/rc.cpp:91
+msgid "Categories"
+msgstr "Categorie"
+
+#: dialogs/kfindtransactiondlg.cpp:212
+#: dialogs/rc.cpp:318
+#: views/kmymoneyview.cpp:199
+#: views/kmymoneyview.cpp:201
+#: widgets/rc.cpp:93
+msgid "Payees"
+msgstr "Beneficiari"
+
+#: views/kgloballedgerview.cpp:149
+#: views/kmymoneyview.cpp:211
+msgid "Ledgers"
+msgstr "Registri"
+
+#: views/kmymoneyview.cpp:353
+msgid "Creating transactions can only be performed in the ledger view"
+msgstr "La creazione di transazioni può essere eseguita solo nella vista libro mastro"
+
+#: views/kmymoneyview.cpp:367
+msgid "Modifying transactions can only be performed in the ledger view"
+msgstr "La modifica delle transazioni può essere eseguita solo nella vista libro mastro"
+
+#: views/kmymoneyview.cpp:382
+msgid "Duplicating transactions can only be performed in the ledger view"
+msgstr "La duplicazione delle transazioni può essere eseguita solo nella vista libro mastro"
+
+#: views/kmymoneyview.cpp:394
+msgid "Edit the current selected transactions"
+msgstr "Modifica le transazioni attualmente selezionate"
+
+#: views/kmymoneyview.cpp:602
+msgid "<b>%1</b> is not a KMyMoney file."
+msgstr "<b>%1</b> non è un file KMyMoney."
+
+#: views/kmymoneyview.cpp:643
+msgid "GPG is not available for decryption of file <b>%1</b>"
+msgstr "GPG non è disponibile per la decifratura del file <b>%1</b>"
+
+#: views/kmymoneyview.cpp:721
+msgid "File <b>%1</b> contains the old binary format used by KMyMoney. Please use an older version of KMyMoney (0.8.x) that still supports this format to convert it to the new XML based format."
+msgstr "Il file <b>%1</b> contiene il vecchio formato binario usato da KMyMoney. Utilizza una versione di KMyMoney più vecchia (0.8.x) che ancora supporta questo formato per convertirla al nuovo formato basato su XML."
+
+#: views/kmymoneyview.cpp:723
+msgid "File <b>%1</b> contains an unknown file format!"
+msgstr "Il file <b>%1</b> è in un formato sconosciuto!"
+
+#: views/kmymoneyview.cpp:728
+msgid "Cannot read from file <b>%1</b>!"
+msgstr "Impossibile leggere dal file <b>%1</b>!"
+
+#: views/kmymoneyview.cpp:732
+msgid "Cannot load file <b>%1</b>. Reason: %2"
+msgstr "Impossibile caricare il file <b>%1</b>. Motivo: %2"
+
+#: views/kmymoneyview.cpp:742
+#: views/kmymoneyview.cpp:748
+msgid "File <b>%1</b> not found!"
+msgstr "File <b>%1</b> non trovato!"
+
+#: views/kmymoneyview.cpp:812
+msgid "Can't open database %1\n"
+msgstr "Impossibile aprire il database %1\n"
+
+#: views/kmymoneyview.cpp:844
+msgid "An unrecoverable error occurred while reading the database"
+msgstr "Si è verificato un errore irreparabile durante la lettura del database"
+
+#: views/kmymoneyview.cpp:846
+#: views/kmymoneyview.cpp:1208
+msgid "Database malfunction"
+msgstr "Malfunzionamento del database"
+
+#: views/kmymoneyview.cpp:938
+msgid "Unknown fix level in input file"
+msgstr ""
+
+#: views/kmymoneyview.cpp:984
+msgid "GPG does not seem to be installed on your system. Please make sure, that GPG can be found using the standard search path. This time, encryption is disabled."
+msgstr "Sembra che GPG non sia installato sul tuo sistema. Assicurati che sia installato e che il suo eseguibile sia incluso nel PATH di sistema. Al momento, la cifratura è disabilitata."
+
+#: views/kmymoneyview.cpp:984
+msgid "GPG not found"
+msgstr "GPG non trovato"
+
+#: views/kmymoneyview.cpp:991
+msgid "You have selected to encrypt your data also with the KMyMoney recover key, but the key with id</p><p><center><b>%1</b></center></p>has not been found in your keyring at this time. Please make sure to import this key into your keyring. You can find it on the <a href=\"http://kmymoney2.sourceforge.net/\">KMyMoney web-site</a>. This time your data will not be encrypted with the KMyMoney recover key."
+msgstr "Hai scelto di cifrare i tuoi dati anche con la chiave di recupero KMyMoney, ma la chiave con l'id</p><p><center><b>%1</b></center></p>al momento non è stata trovata nel tuo portachiavi. Assicurati che la chiave sia stata importata nel tuo portachiavi. Puoi trovarla al <a href=\"http://kmymoney2.sourceforge.net/\">sito web di KMyMoney</a>. Fino ad allora i tuoi dati non saranno cifrati con la chiave di recupero KMyMoney."
+
+#: views/kmymoneyview.cpp:991
+#: views/kmymoneyview.cpp:1000
+msgid "GPG-Key not found"
+msgstr "Chiave GPG non trovata"
+
+#: views/kmymoneyview.cpp:1000
+msgid "You have specified to encrypt your data for the user-id</p><p><center><b>%1</b>.</center></p>Unfortunately, a valid key for this user-id was not found in your keyring. Please make sure to import a valid key for this user-id. This time, encryption is disabled."
+msgstr "Hai scelto di cifrare i tuoi dati per l'id utente </p><p><center><b>%1</b>.</center></p> Sfortunatamente, non è stata trovata nessuna chiave valida per questo id nel tuo portachiavi. Assicurati di importare una chiave valida per questo id utente. Al momento, la cifratura è disabilitata."
+
+#: views/kmymoneyview.cpp:1006
+msgid "You have configured to save your data in encrypted form using GPG. Please be aware, that this is a brand new feature which is yet untested. Make sure, you have the necessary understanding that you might loose all your data if you store it encrypted and cannot decrypt it later on! If unsure, answer <b>No</b>."
+msgstr "Hai scelto di salvare i tuoi dati in forma cifrata usando GPG. Attenzione, questa è una nuova funzionalità non ancora testata. Assicurati di aver capito che i tuoi dati diventeranno inaccessibili se verranno cifrati senza che sia possibile decifrarli successivamente! Se non sei sicuro, rispondi <b>No</b>."
+
+#: views/kmymoneyview.cpp:1008
+msgid "Store GPG encrypted"
+msgstr "Salva cifrando con GPG"
+
+#: views/kmymoneyview.cpp:1038
+#: views/kmymoneyview.cpp:1052
+msgid "Unable to open file '%1' for writing."
+msgstr "Impossibile aprire il file '%1' in scrittura."
+
+#: views/kmymoneyview.cpp:1065
+#: views/kmymoneyview.cpp:1074
+msgid "Failure while writing to '%1'"
+msgstr "Errore durante la scrittura in '%1'"
+
+#: views/kmymoneyview.cpp:1086
+#: views/kmymoneyview.cpp:1181
+msgid "Tried to access a file when it's not open"
+msgstr "Tentativo di accedere a un file non ancora aperto"
+
+#: views/kmymoneyview.cpp:1092
+msgid "Since this version of KMyMoney only writes data files in its new format, files written with this version cannot be read by KMyMoney version 0.4. If you still want to use older versions of KMyMoney with your data files, please make sure you keep a backup-file of your finance data. If you want to abort this operation, please press Cancel now"
+msgstr "Da questa versione di KMyMoney i dati verranno scritti in un nuovo formato; i file scritti con questa versione non potranno essere letti da KMyMoney 0.4. Se vuoi poter continuare ad utilizzare vecchie versioni di KMyMoney con i tuoi file di dati, assicurati di conservare un file di backup dei tuoi dati finanziari. Se vuoi interrompere questa operazione, premi Annulla ora"
+
+#: views/kmymoneyview.cpp:1122
+msgid "Malformed URL '%1'"
+msgstr "URL non corretta '%1'"
+
+#: views/kmymoneyview.cpp:1192
+msgid ""
+"Database contains data which must be removed before using SaveAs.\n"
+"Do you wish to continue?"
+msgstr ""
+"Il database contiene dati che devono essere rimossi prima di usare SaveAs.\n"
+"Vuoi continuare?"
+
+#: views/kmymoneyview.cpp:1205
+msgid ""
+"An unrecoverable error occurred while writing to the database.\n"
+"It may well be corrupt."
+msgstr ""
+"Un errore irreparabile si è verificato durante la scrittura del database.\n"
+"Potrebbe essere danneggiato."
+
+#: views/kmymoneyview.cpp:1215
+msgid ""
+"Can't open or create database %1\n"
+"Retry SaveAsDatabase and click Help for further info"
+msgstr ""
+"Impossibile aprire o creare il database %1\n"
+"Riprova SaveAsDatabase e fai clic su Aiuto per ulteriori informazioni"
+
+#: views/kmymoneyview.cpp:1354
+msgid "Afghanistan Afghani"
+msgstr "Afghani afghanistano"
+
+#: views/kmymoneyview.cpp:1355
+msgid "Albanian Lek"
+msgstr "Lek albanese"
+
+#: views/kmymoneyview.cpp:1356
+msgid "Netherland Antillian Guilder"
+msgstr "Guilder delle Antille Olandesi"
+
+#: views/kmymoneyview.cpp:1357
+msgid "Algerian Dinar"
+msgstr "Dinaro algerino"
+
+#: views/kmymoneyview.cpp:1358
+msgid "Andorran Franc"
+msgstr "Franco di Andorra"
+
+#: views/kmymoneyview.cpp:1359
+msgid "Andorran Peseta"
+msgstr "Peseta di Andorra"
+
+#: views/kmymoneyview.cpp:1360
+msgid "Angolan New Kwanza"
+msgstr "Nuovo Kwanza angolano"
+
+#: views/kmymoneyview.cpp:1361
+msgid "Argentine Peso"
+msgstr "Peso argentino"
+
+#: views/kmymoneyview.cpp:1362
+msgid "Aruban Florin"
+msgstr "Fiorino Aruban"
+
+#: views/kmymoneyview.cpp:1363
+msgid "Australian Dollar"
+msgstr "Dollaro australiano"
+
+#: views/kmymoneyview.cpp:1364
+msgid "Azerbaijani Manat"
+msgstr "Manat azerbaijano"
+
+#: views/kmymoneyview.cpp:1365
+msgid "Bahamian Dollar"
+msgstr "Dollaro bahamense"
+
+#: views/kmymoneyview.cpp:1366
+msgid "Bahraini Dinar"
+msgstr "Dinaro bahrainiano"
+
+#: views/kmymoneyview.cpp:1367
+msgid "Bangladeshi Taka"
+msgstr "Taka del Bangladesh"
+
+#: views/kmymoneyview.cpp:1368
+msgid "Barbados Dollar"
+msgstr "Dollaro delle Barbados"
+
+#: views/kmymoneyview.cpp:1369
+msgid "Belarussian Ruble"
+msgstr "Rublo bielorusso"
+
+#: views/kmymoneyview.cpp:1370
+msgid "Belize Dollar"
+msgstr "Dollaro del Belize"
+
+#: views/kmymoneyview.cpp:1371
+msgid "Bermudian Dollar"
+msgstr "Dollaro delle Bermuda"
+
+#: views/kmymoneyview.cpp:1372
+msgid "Bhutan Ngultrum"
+msgstr "Ngultrum del Bhutan"
+
+#: views/kmymoneyview.cpp:1373
+msgid "Bolivian Boliviano"
+msgstr "Boliviano della Bolivia"
+
+#: views/kmymoneyview.cpp:1374
+msgid "Bosnian Convertible Mark"
+msgstr "Valuta convertibile bosniaca"
+
+#: views/kmymoneyview.cpp:1375
+msgid "Botswana Pula"
+msgstr "Pula del Botswana"
+
+#: views/kmymoneyview.cpp:1376
+msgid "Brazilian Real"
+msgstr "Real brasiliano"
+
+#: views/kmymoneyview.cpp:1377
+msgid "British Pound"
+msgstr "Sterlina britannica"
+
+#: views/kmymoneyview.cpp:1378
+msgid "Brunei Dollar"
+msgstr "Dollaro del Brunei"
+
+#: views/kmymoneyview.cpp:1379
+msgid "Bulgarian Lev"
+msgstr "Lev bulgaro"
+
+#: views/kmymoneyview.cpp:1380
+msgid "Burundi Franc"
+msgstr "Franco del Burundi"
+
+#: views/kmymoneyview.cpp:1381
+msgid "CFA Franc BEAC"
+msgstr "Franco BEAC del CFA"
+
+#: views/kmymoneyview.cpp:1382
+msgid "CFA Franc BCEAO"
+msgstr "Franco BCEAO del CFA"
+
+#: views/kmymoneyview.cpp:1383
+msgid "CFP Franc Pacifique"
+msgstr "Franco CFP del Pacifico"
+
+#: views/kmymoneyview.cpp:1384
+msgid "Cambodia Riel"
+msgstr "Riel cambogiano"
+
+#: views/kmymoneyview.cpp:1385
+msgid "Canadian Dollar"
+msgstr "Dollaro canadese"
+
+#: views/kmymoneyview.cpp:1386
+msgid "Cape Verde Escudo"
+msgstr "Scudo di Capo Verde"
+
+#: views/kmymoneyview.cpp:1387
+msgid "Cayman Islands Dollar"
+msgstr "Dollaro delle Isole Cayman"
+
+#: views/kmymoneyview.cpp:1388
+msgid "Chilean Peso"
+msgstr "Peso cileno"
+
+#: views/kmymoneyview.cpp:1389
+msgid "Chinese Yuan Renminbi"
+msgstr "Yuan Renminbi cinese"
+
+#: views/kmymoneyview.cpp:1390
+msgid "Colombian Peso"
+msgstr "Peso colombiano"
+
+#: views/kmymoneyview.cpp:1391
+msgid "Comoros Franc"
+msgstr "Franco delle Comore"
+
+#: views/kmymoneyview.cpp:1392
+msgid "Costa Rican Colon"
+msgstr "Colon della Costa Rica"
+
+#: views/kmymoneyview.cpp:1393
+msgid "Croatian Kuna"
+msgstr "Kuna croata"
+
+#: views/kmymoneyview.cpp:1394
+msgid "Cuban Peso"
+msgstr "Peso cubano"
+
+#: views/kmymoneyview.cpp:1395
+msgid "Czech Koruna"
+msgstr "Corona ceca"
+
+#: views/kmymoneyview.cpp:1396
+msgid "Danish Krone"
+msgstr "Corona danese"
+
+#: views/kmymoneyview.cpp:1397
+msgid "Djibouti Franc"
+msgstr "Franco Djibouti"
+
+#: views/kmymoneyview.cpp:1398
+msgid "Dominican Peso"
+msgstr "Peso dominicano"
+
+#: views/kmymoneyview.cpp:1399
+msgid "East Caribbean Dollar"
+msgstr "Dollaro dei Caraibi dell'Est"
+
+#: views/kmymoneyview.cpp:1400
+msgid "Egyptian Pound"
+msgstr "Sterlina egiziana"
+
+#: views/kmymoneyview.cpp:1401
+msgid "El Salvador Colon"
+msgstr "Colon di El Salvador"
+
+#: views/kmymoneyview.cpp:1402
+msgid "Eritrean Nakfa"
+msgstr "Nakfa dell'Eritrea"
+
+#: views/kmymoneyview.cpp:1403
+msgid "Estonian Kroon"
+msgstr "Corona estone"
+
+#: views/kmymoneyview.cpp:1404
+msgid "Ethiopian Birr"
+msgstr "Birr etiope"
+
+#: views/kmymoneyview.cpp:1405
+msgid "Euro"
+msgstr "Euro"
+
+#: views/kmymoneyview.cpp:1406
+msgid "Falkland Islands Pound"
+msgstr "Sterlina delle Isole Falklands"
+
+#: views/kmymoneyview.cpp:1407
+msgid "Fiji Dollar"
+msgstr "Dollaro delle Fiji"
+
+#: views/kmymoneyview.cpp:1408
+msgid "Gambian Dalasi"
+msgstr "Dalasi del Gambia"
+
+#: views/kmymoneyview.cpp:1409
+msgid "Georgian Lari"
+msgstr "Lari georgiano"
+
+#: views/kmymoneyview.cpp:1410
+msgid "Ghanaian Cedi"
+msgstr "Cedi ghanese"
+
+#: views/kmymoneyview.cpp:1411
+msgid "Gibraltar Pound"
+msgstr "Sterlina di Gibilterra"
+
+#: views/kmymoneyview.cpp:1412
+msgid "Guatemalan Quetzal"
+msgstr "Quetzal guatemalteco"
+
+#: views/kmymoneyview.cpp:1413
+msgid "Guinea-Bissau Peso"
+msgstr "Peso della Guinea-Bissau"
+
+#: views/kmymoneyview.cpp:1414
+msgid "Guyanan Dollar"
+msgstr "Dollaro della Guyana"
+
+#: views/kmymoneyview.cpp:1415
+msgid "Haitian Gourde"
+msgstr "Gourde haitiano"
+
+#: views/kmymoneyview.cpp:1416
+msgid "Honduran Lempira"
+msgstr "Lempira dell'Honduras"
+
+#: views/kmymoneyview.cpp:1417
+msgid "Hong Kong Dollar"
+msgstr "Dollaro di Hong Kong"
+
+#: views/kmymoneyview.cpp:1418
+msgid "Hungarian Forint"
+msgstr "Fiorino ungherese"
+
+#: views/kmymoneyview.cpp:1419
+msgid "Iceland Krona"
+msgstr "Corona islandese"
+
+#: views/kmymoneyview.cpp:1420
+msgid "Indian Rupee"
+msgstr "Rupia indiana"
+
+#: views/kmymoneyview.cpp:1421
+msgid "Indonesian Rupiah"
+msgstr "Rupiah indonesiana"
+
+#: views/kmymoneyview.cpp:1422
+msgid "Iranian Rial"
+msgstr "Real iraniano"
+
+#: views/kmymoneyview.cpp:1423
+msgid "Iraqi Dinar"
+msgstr "Dinaro iracheno"
+
+#: views/kmymoneyview.cpp:1424
+msgid "Israeli New Shekel"
+msgstr "Nuovo Shekel israeliano"
+
+#: views/kmymoneyview.cpp:1425
+msgid "Jamaican Dollar"
+msgstr "Dollaro giamaicano"
+
+#: views/kmymoneyview.cpp:1426
+msgid "Japanese Yen"
+msgstr "Yen giapponese"
+
+#: views/kmymoneyview.cpp:1427
+msgid "Jordanian Dinar"
+msgstr "Dinaro giordano"
+
+#: views/kmymoneyview.cpp:1428
+msgid "Kazakhstan Tenge"
+msgstr "Tenge del Kazakhistan"
+
+#: views/kmymoneyview.cpp:1429
+msgid "Kenyan Shilling"
+msgstr "Scellino kenyota"
+
+#: views/kmymoneyview.cpp:1430
+msgid "Kuwaiti Dinar"
+msgstr "Dinaro kuwaitiano"
+
+#: views/kmymoneyview.cpp:1431
+msgid "Kyrgyzstan Som"
+msgstr "Som del Kyrgyzstan"
+
+#: views/kmymoneyview.cpp:1432
+msgid "Laos Kip"
+msgstr "Kip del Laos"
+
+#: views/kmymoneyview.cpp:1433
+msgid "Latvian Lats"
+msgstr "Lats lettone"
+
+#: views/kmymoneyview.cpp:1434
+msgid "Lebanese Pound"
+msgstr "Sterlina libanese"
+
+#: views/kmymoneyview.cpp:1435
+msgid "Lesotho Loti"
+msgstr "Loti del Lesotho"
+
+#: views/kmymoneyview.cpp:1436
+msgid "Liberian Dollar"
+msgstr "Dollaro liberiano"
+
+#: views/kmymoneyview.cpp:1437
+msgid "Libyan Dinar"
+msgstr "Dinaro libico"
+
+#: views/kmymoneyview.cpp:1438
+msgid "Lithuanian Litas"
+msgstr "Litas lituano"
+
+#: views/kmymoneyview.cpp:1439
+msgid "Macau Pataca"
+msgstr "Pataca di Macau"
+
+#: views/kmymoneyview.cpp:1440
+msgid "Macedonian Denar"
+msgstr "Dinaro macedone"
+
+#: views/kmymoneyview.cpp:1441
+msgid "Malagasy Franc"
+msgstr "Franco di Malagasy"
+
+#: views/kmymoneyview.cpp:1442
+msgid "Malawi Kwacha"
+msgstr "Kwacha di Malawi"
+
+#: views/kmymoneyview.cpp:1443
+msgid "Malaysian Ringgit"
+msgstr "Ringgit malese"
+
+#: views/kmymoneyview.cpp:1444
+msgid "Maldive Rufiyaa"
+msgstr "Rufiyaa delle Maldive"
+
+#: views/kmymoneyview.cpp:1445
+msgid "Mali Republic Franc"
+msgstr "Franco della Repubblica di Mali"
+
+#: views/kmymoneyview.cpp:1446
+msgid "Mauritanian Ouguiya"
+msgstr "Ouguiya mauritiano"
+
+#: views/kmymoneyview.cpp:1447
+msgid "Mauritius Rupee"
+msgstr "Rupia delle Mauritius"
+
+#: views/kmymoneyview.cpp:1448
+msgid "Mexican Peso"
+msgstr "Peso messicano"
+
+#: views/kmymoneyview.cpp:1449
+msgid "Moldavian Leu"
+msgstr "Leu moldavo"
+
+#: views/kmymoneyview.cpp:1450
+msgid "Mongolian Tugrik"
+msgstr "Tugrik mongolo"
+
+#: views/kmymoneyview.cpp:1451
+msgid "Moroccan Dirham"
+msgstr "Dirham marocchino"
+
+#: views/kmymoneyview.cpp:1452
+msgid "Mozambique Metical"
+msgstr "Metical del Mozambico"
+
+#: views/kmymoneyview.cpp:1453
+msgid "Myanmar Kyat"
+msgstr "Kyat di Myanmar"
+
+#: views/kmymoneyview.cpp:1454
+msgid "Namibian Dollar"
+msgstr "Dollaro della Namibia"
+
+#: views/kmymoneyview.cpp:1455
+msgid "Nepalese Rupee"
+msgstr "Rupia nepalese"
+
+#: views/kmymoneyview.cpp:1456
+msgid "New Zealand Dollar"
+msgstr "Dollaro neozelandese"
+
+#: views/kmymoneyview.cpp:1457
+msgid "Nicaraguan Cordoba Oro"
+msgstr "Cordoba d'oro nicaraguense"
+
+#: views/kmymoneyview.cpp:1458
+msgid "Nigerian Naira"
+msgstr "Naira nigeriano"
+
+#: views/kmymoneyview.cpp:1459
+msgid "North Korean Won"
+msgstr "Won della Nord Corea"
+
+#: views/kmymoneyview.cpp:1460
+msgid "Norwegian Kroner"
+msgstr "Corona norvegese"
+
+#: views/kmymoneyview.cpp:1461
+msgid "Omani Rial"
+msgstr "Real omaniano"
+
+#: views/kmymoneyview.cpp:1462
+msgid "Pakistan Rupee"
+msgstr "Rupia pakistana"
+
+#: views/kmymoneyview.cpp:1463
+msgid "Panamanian Balboa"
+msgstr "Balboa panamense"
+
+#: views/kmymoneyview.cpp:1464
+msgid "Papua New Guinea Kina"
+msgstr "Kina di Papua Nuova Guinea"
+
+#: views/kmymoneyview.cpp:1465
+msgid "Paraguay Guarani"
+msgstr "Guarani paraguaiano"
+
+#: views/kmymoneyview.cpp:1466
+msgid "Peruvian Nuevo Sol"
+msgstr "Nuevo Sol peruviano"
+
+#: views/kmymoneyview.cpp:1467
+msgid "Philippine Peso"
+msgstr "Peso delle Filippine"
+
+#: views/kmymoneyview.cpp:1468
+msgid "Polish Zloty"
+msgstr "Zloty polacco"
+
+#: views/kmymoneyview.cpp:1469
+msgid "Qatari Rial"
+msgstr "Real del Qatar"
+
+#: views/kmymoneyview.cpp:1470
+msgid "Romanian Leu (new)"
+msgstr "Leu romeno (nuovo)"
+
+#: views/kmymoneyview.cpp:1471
+msgid "Russian Ruble"
+msgstr "Rublo russo"
+
+#: views/kmymoneyview.cpp:1472
+msgid "Rwanda Franc"
+msgstr "Franco rwandese"
+
+#: views/kmymoneyview.cpp:1473
+msgid "Samoan Tala"
+msgstr "Tala samoano"
+
+#: views/kmymoneyview.cpp:1474
+msgid "Sao Tome and Principe Dobra"
+msgstr "Dobra di Sao Tome e Principe"
+
+#: views/kmymoneyview.cpp:1475
+msgid "Saudi Riyal"
+msgstr "Riyal saudita"
+
+#: views/kmymoneyview.cpp:1476
+msgid "Seychelles Rupee"
+msgstr "Rupia delle Seychelles"
+
+#: views/kmymoneyview.cpp:1477
+msgid "Sierra Leone Leone"
+msgstr "Leone della Sierra Leone"
+
+#: views/kmymoneyview.cpp:1478
+msgid "Singapore Dollar"
+msgstr "Dollaro di Singapore"
+
+#: views/kmymoneyview.cpp:1481
+msgid "Solomon Islands Dollar"
+msgstr "Dollaro delle Isole Solomone"
+
+#: views/kmymoneyview.cpp:1482
+msgid "Somali Shilling"
+msgstr "Scellino somalo"
+
+#: views/kmymoneyview.cpp:1483
+msgid "South African Rand"
+msgstr "Rand sudafricano"
+
+#: views/kmymoneyview.cpp:1484
+msgid "South Korean Won"
+msgstr "Won della Sud Corea"
+
+#: views/kmymoneyview.cpp:1485
+msgid "Sri Lanka Rupee"
+msgstr "Rupia dello Sri Lanka"
+
+#: views/kmymoneyview.cpp:1486
+msgid "St. Helena Pound"
+msgstr "Sterlina di St. Helena"
+
+#: views/kmymoneyview.cpp:1487
+msgid "Sudanese Dinar"
+msgstr "Dinaro sudanese"
+
+#: views/kmymoneyview.cpp:1488
+msgid "Suriname Guilder"
+msgstr "Guilder del Suriname"
+
+#: views/kmymoneyview.cpp:1489
+msgid "Swaziland Lilangeni"
+msgstr "Lilangeni dello Swaziland"
+
+#: views/kmymoneyview.cpp:1490
+msgid "Swedish Krona"
+msgstr "Corona svedese"
+
+#: views/kmymoneyview.cpp:1491
+msgid "Swiss Franc"
+msgstr "Franco svizzero"
+
+#: views/kmymoneyview.cpp:1492
+msgid "Syrian Pound"
+msgstr "Sterlina siriana"
+
+#: views/kmymoneyview.cpp:1493
+msgid "Taiwan Dollar"
+msgstr "Dollaro di Taiwan"
+
+#: views/kmymoneyview.cpp:1494
+msgid "Tajikistan Somani"
+msgstr "Somani del Tajikistan"
+
+#: views/kmymoneyview.cpp:1495
+msgid "Tanzanian Shilling"
+msgstr "Scellino della Tanzania"
+
+#: views/kmymoneyview.cpp:1496
+msgid "Thai Baht"
+msgstr "Baht Thailandese"
+
+#: views/kmymoneyview.cpp:1497
+msgid "Tongan Pa'anga"
+msgstr "Pa'anga di Tonga"
+
+#: views/kmymoneyview.cpp:1498
+msgid "Trinidad and Tobago Dollar"
+msgstr "Dollaro di Trinidad e Tobago"
+
+#: views/kmymoneyview.cpp:1499
+msgid "Tunisian Dinar"
+msgstr "Dinaro tunisino"
+
+#: views/kmymoneyview.cpp:1500
+msgid "Turkish Lira (new)"
+msgstr "Lira turca (nuova)"
+
+#: views/kmymoneyview.cpp:1501
+msgid "Turkmenistan Manat"
+msgstr "Manat del Turkmenistan"
+
+#: views/kmymoneyview.cpp:1502
+msgid "US Dollar"
+msgstr "Dollaro USA"
+
+#: views/kmymoneyview.cpp:1503
+msgid "Uganda Shilling"
+msgstr "Scellino ugandese"
+
+#: views/kmymoneyview.cpp:1504
+msgid "Ukraine Hryvnia"
+msgstr "Hryvnia ucraino"
+
+#: views/kmymoneyview.cpp:1505
+msgid "United Arab Emirates Dirham"
+msgstr "Dirham degli Emirati Arabi Uniti"
+
+#: views/kmymoneyview.cpp:1506
+msgid "Uruguayan Peso"
+msgstr "Peso uruguaiano"
+
+#: views/kmymoneyview.cpp:1507
+msgid "Uzbekistani Sum"
+msgstr "Sum uzbeko"
+
+#: views/kmymoneyview.cpp:1508
+msgid "Vanuatu Vatu"
+msgstr "Vatu di Vanuatu"
+
+#: views/kmymoneyview.cpp:1509
+msgid "Venezuelan Bolivar"
+msgstr "Bolivar venezuelano"
+
+#: views/kmymoneyview.cpp:1510
+msgid "Vietnamese Dong"
+msgstr "Dong vietnamita"
+
+#: views/kmymoneyview.cpp:1511
+msgid "Yugoslav Dinar"
+msgstr "Dinaro iugoslavo"
+
+#: views/kmymoneyview.cpp:1512
+msgid "Zambian Kwacha"
+msgstr "Kwacha dello Zambia"
+
+#: views/kmymoneyview.cpp:1513
+msgid "Zimbabwe Dollar"
+msgstr "Dollaro dello Zimbabwe"
+
+#: views/kmymoneyview.cpp:1515
+msgid "Gold"
+msgstr "Oro"
+
+#: views/kmymoneyview.cpp:1516
+msgid "Palladium"
+msgstr "Palladio"
+
+#: views/kmymoneyview.cpp:1517
+msgid "Platinum"
+msgstr "Platino"
+
+#: views/kmymoneyview.cpp:1518
+msgid "Silver"
+msgstr "Argento"
+
+#: views/kmymoneyview.cpp:1551
+msgid "Austrian Schilling"
+msgstr "Scellino austriaco"
+
+#: views/kmymoneyview.cpp:1552
+msgid "German Mark"
+msgstr "Marco tedesco"
+
+#: views/kmymoneyview.cpp:1553
+msgid "French Franc"
+msgstr "Franco francese"
+
+#: views/kmymoneyview.cpp:1554
+msgid "Italian Lira"
+msgstr "Lira italiana"
+
+#: views/kmymoneyview.cpp:1555
+msgid "Spanish Peseta"
+msgstr "Peseta spagnola"
+
+#: views/kmymoneyview.cpp:1556
+msgid "Dutch Guilder"
+msgstr "Guilder olandese"
+
+#: views/kmymoneyview.cpp:1557
+msgid "Belgian Franc"
+msgstr "Franco belga"
+
+#: views/kmymoneyview.cpp:1558
+msgid "Luxembourg Franc"
+msgstr "Franco lussemburghese"
+
+#: views/kmymoneyview.cpp:1559
+msgid "Portuguese Escudo"
+msgstr "Escudo portoghese"
+
+#: views/kmymoneyview.cpp:1560
+msgid "Irish Pound"
+msgstr "Sterlina irlandese"
+
+#: views/kmymoneyview.cpp:1561
+msgid "Finnish Markka"
+msgstr "Markka finlandese"
+
+#: views/kmymoneyview.cpp:1562
+msgid "Greek Drachma"
+msgstr "Dracma greca"
+
+#: views/kmymoneyview.cpp:1564
+msgid "Romanian Leu"
+msgstr "Leu romeno"
+
+#: views/kmymoneyview.cpp:1566
+msgid "Russian Ruble (old)"
+msgstr "Rublo russo (vecchio)"
+
+#: views/kmymoneyview.cpp:1568
+msgid "Slovenian Tolar"
+msgstr "Tolar sloveno"
+
+#: views/kmymoneyview.cpp:1571
+msgid "Turkish Lira"
+msgstr "Lira turca"
+
+#: views/kmymoneyview.cpp:1574
+msgid "Maltese Lira"
+msgstr "Lira maltese"
+
+#: views/kmymoneyview.cpp:1575
+msgid "Cyprus Pound"
+msgstr "Sterlina di Cipro"
+
+#: views/kmymoneyview.cpp:1578
+msgid "Slovak Koruna"
+msgstr "Corona slovacca"
+
+#: views/kmymoneyview.cpp:1888
+msgid "The account \"%1\" was previously created as loan account but some information is missing. The new loan wizard will be started to collect all relevant information. Please use a KMyMoney version >= 0.8.7 and < 0.9 to correct the problem."
+msgstr "Il conto \"%1\" è stato precedentemente creato come conto di tipo prestito, ma mancano alcune informazioni. La procedura di creazione guidata di un nuovo prestito inizierà a raccogliere le informazioni necessarie. Utilizza una versione di KMyMoney >= 0.8.7 e < 0.9 per correggere il problema."
+
+#: views/kmymoneyview.cpp:1892
+msgid "Account problem"
+msgstr "Problema nel conto"
+
+#: views/kmymoneyview.cpp:1941
+msgid "Unable to add schedule: "
+msgstr "Impossibile aggiungere la pianificazione: "
+
+#: views/kmymoneyview.cpp:1970
+msgid "Fix transactions"
+msgstr "Ripara transazioni"
+
+#: views/kaccountsview.cpp:522
+#: views/kinstitutionsview.cpp:300
+msgid "Net Worth: "
+msgstr "Patrimonio netto: "
+
+#: dialogs/rc.cpp:108
+#: dialogs/rc.cpp:163
+#: dialogs/rc.cpp:250
+#: dialogs/rc.cpp:755
+#: dialogs/rc.cpp:830
+#: views/kinvestmentview.cpp:77
+#: widgets/register.cpp:572
+msgid "Quantity"
+msgstr "Quantità"
+
+#: views/kscheduledlistitem.cpp:137
+msgid "Finished"
+msgstr "Finito"
+
+#: views/kbudgetview.cpp:109
+msgid "Creates a new budget"
+msgstr "Crea un nuovo budget"
+
+#: views/kbudgetview.cpp:110
+msgid "Use this to create a new empty budget."
+msgstr "Premi qui per creare un nuovo budget vuoto."
+
+#: views/kbudgetview.cpp:116
+msgid "Rename the current selected budget"
+msgstr "Rinomina il budget selezionato"
+
+#: views/kbudgetview.cpp:117
+msgid "Use this to start renaming the selected budget."
+msgstr "Premi qui per rinominare il budget selezionato."
+
+#: views/kbudgetview.cpp:123
+msgid "Delete the current selected budget"
+msgstr "Elimina il budget selezionato"
+
+#: views/kbudgetview.cpp:124
+msgid "Use this to delete the selected budget."
+msgstr "Premi qui per eliminare il budget selezionato."
+
+#: views/kbudgetview.cpp:130
+msgid "Accepts the entered values and stores the budget"
+msgstr "Accetta i valori inseriti e salva il budget"
+
+#: views/kbudgetview.cpp:131
+msgid "Use this to store the modified data."
+msgstr "Premi qui per conservare i dati modificati."
+
+#: views/kbudgetview.cpp:137
+msgid "Revert budget to last saved state"
+msgstr "Ripristina il budget all'ultimo stato salvato"
+
+#: views/kbudgetview.cpp:138
+msgid "Use this to discard the modified data."
+msgstr "Premi qui per scartare i dati modificati."
+
+#: views/kbudgetview.cpp:489
+msgid "Do you want to save the changes for <b>%1</b>"
+msgstr "Vuoi salvare le modifiche a <b>%1</b>"
+
+#: views/kbudgetview.cpp:610
+msgid "A budget with the name '%1' already exists. It is not advisable to have multiple budgets with the same identification name. Are you sure you would like to rename the budget?"
+msgstr ""
+
+#: views/kbudgetview.cpp:635
+#: views/kbudgetview.cpp:750
+msgid "Unable to modify budget"
+msgstr "Impossibile modificare il budget"
+
+#: views/kbudgetview.cpp:736
+msgid "Unable to reset budget"
+msgstr "Impossibile azzerare il budget"
+
+#: views/rc.cpp:1
+msgid "List"
+msgstr "Elenco"
+
+#: views/rc.cpp:2
+#: views/rc.cpp:20
+msgid "Collapse all accounts in the list"
+msgstr "Contrai tutti i conti nell'elenco"
+
+#: views/rc.cpp:3
+#: views/rc.cpp:21
+msgid "Expand all accounts in the list"
+msgstr "Espandi tutti i conti nell'elenco"
+
+#: views/rc.cpp:4
+msgid "Icons"
+msgstr "Icone"
+
+#: views/rc.cpp:5
+#: views/rc.cpp:22
+msgid "Note: Unused categories are not shown as selected by settings."
+msgstr "Nota: le categorie inutilizzate non sono mostrate, come scelto nella configurazione."
+
+#: views/rc.cpp:6
+#: views/rc.cpp:23
+#: views/rc.cpp:54
+msgid "Total Profits:"
+msgstr "Profitti totali:"
+
+#: views/rc.cpp:7
+msgid "Your budgets"
+msgstr "I tuoi budget"
+
+#: dialogs/rc.cpp:340
+#: dialogs/rc.cpp:841
+#: dialogs/settings/rc.cpp:124
+#: views/rc.cpp:8
+#: widgets/rc.cpp:48
+#: widgets/rc.cpp:150
+msgid "New"
+msgstr "Nuovo"
+
+#: views/rc.cpp:9
+msgid "Ren"
+msgstr "Rin"
+
+#: views/rc.cpp:10
+msgid "Del"
+msgstr "Eli"
+
+#: views/rc.cpp:11
+msgid "Res"
+msgstr "Azz"
+
+#: views/rc.cpp:12
+msgid "Upd"
+msgstr "Agg"
+
+#: views/rc.cpp:15
+msgid "Hide unused budget categories"
+msgstr "Nascondi le categorie di budget inutilizzate"
+
+#: views/rc.cpp:16
+msgid "Assignments"
+msgstr "Assegnazioni"
+
+#: views/rc.cpp:19
+msgid "Include subaccounts"
+msgstr "Includi sottoconti"
+
+#: dialogs/settings/rc.cpp:23
+#: views/rc.cpp:24
+msgid "Forecast Settings"
+msgstr "Impostazioni previsione"
+
+#: views/rc.cpp:25
+msgid "Days to Forecast:"
+msgstr "Giorni da prevedere:"
+
+#: views/rc.cpp:26
+msgid "Days of Accounts Cycle:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:25
+#: views/rc.cpp:27
+msgid "Day of Month to start Forecast:"
+msgstr "Giorno del mese di inizio della previsione:"
+
+#: views/rc.cpp:28
+msgid "Historic Cycles:"
+msgstr "Cicli storici:"
+
+#: views/rc.cpp:29
+msgid "Chart Detail:"
+msgstr "Dettagli del grafico:"
+
+#: views/rc.cpp:30
+#: widgets/kmymoneyaccountselector.cpp:64
+#: widgets/rc.cpp:65
+msgid "All"
+msgstr "Tutti"
+
+#: views/rc.cpp:31
+#: widgets/rc.cpp:66
+msgid "Top-Level"
+msgstr "Livello principale"
+
+#: views/rc.cpp:32
+#: widgets/rc.cpp:67
+msgid "Groups"
+msgstr "Gruppi"
+
+#: views/rc.cpp:33
+#: widgets/rc.cpp:68
+msgid "Totals"
+msgstr "Totali"
+
+#: views/rc.cpp:34
+msgid "<p>Choose what level of detail to show on the chart.</p>"
+msgstr "<p>Scegli quale livello di dettaglio mostrare nel grafico.</p>"
+
+#: views/rc.cpp:35
+msgid "Current Forecast Method:"
+msgstr "Metodo attuale di previsione:"
+
+#: views/rc.cpp:36
+msgid "method"
+msgstr "metodo"
+
+#: dialogs/settings/rc.cpp:32
+#: views/rc.cpp:37
+msgid "History Forecast Method"
+msgstr "Metodo di previsione dallo storico"
+
+#: dialogs/settings/rc.cpp:33
+#: views/rc.cpp:38
+msgid "Simple Moving Average"
+msgstr "Media mobile semplice"
+
+#: dialogs/settings/rc.cpp:34
+#: views/rc.cpp:39
+msgid "Weighted Moving Average"
+msgstr "Media mobile ponderata"
+
+#: dialogs/settings/rc.cpp:35
+#: views/rc.cpp:40
+msgid "Linear Regression"
+msgstr "Regressione lineare"
+
+#: dialogs/keditloanwizard.cpp:315
+#: dialogs/rc.cpp:628
+#: dialogs/rc.cpp:647
+#: views/rc.cpp:43
+msgid "Summary"
+msgstr "Riepilogo"
+
+#: views/rc.cpp:45
+msgid "0 days"
+msgstr "0 giorni"
+
+#: views/rc.cpp:46
+msgid "30 days"
+msgstr "30 giorni"
+
+#: views/rc.cpp:47
+msgid "60 days"
+msgstr "60 giorni"
+
+#: views/rc.cpp:48
+msgid "90 days"
+msgstr "90 giorni"
+
+#: views/rc.cpp:49
+msgid "New Item"
+msgstr "Nuovo elemento"
+
+#: views/rc.cpp:50
+#: widgets/rc.cpp:64
+msgid "Detail"
+msgstr "Dettagli"
+
+#: views/rc.cpp:51
+msgid "Advanced"
+msgstr "Avanzate"
+
+#: views/rc.cpp:52
+msgid "Budget Forecast"
+msgstr "Previsione di budget"
+
+#: views/rc.cpp:55
+msgid "Investment Summary"
+msgstr "Riepilogo investimento"
+
+#: views/rc.cpp:56
+msgid "Select Account:"
+msgstr "Seleziona conto:"
+
+#: views/rc.cpp:57
+msgid "Summary of the equities contained in this account, showing your holdings and their most recent price."
+msgstr "Sommario delle partecipazioni azionarie contenute in questo conto, mostrando le azioni detenute ed il loro prezzo più recente."
+
+#: views/rc.cpp:60
+#: widgets/register.cpp:564
+msgid "No."
+msgstr "N."
+
+#: views/rc.cpp:64
+msgid "Balance: "
+msgstr "Saldo: "
+
+#: views/rc.cpp:65
+msgid "Address"
+msgstr "Indirizzo"
+
+#: views/rc.cpp:66
+msgid "Payee Information"
+msgstr "Informazioni sul beneficiario"
+
+#: views/rc.cpp:67
+msgid "E-Mail:"
+msgstr "Email:"
+
+#: dialogs/rc.cpp:393
+#: views/rc.cpp:69
+msgid "Telephone/Fax:"
+msgstr "Telefono/Fax:"
+
+#: views/rc.cpp:70
+msgid "Notes"
+msgstr "Note"
+
+#: views/rc.cpp:71
+msgid "Address:"
+msgstr "Indirizzo:"
+
+#: views/rc.cpp:72
+msgid "Matching"
+msgstr "Corrispondenza"
+
+#: views/rc.cpp:73
+msgid "Transaction Matching"
+msgstr "Verifica transazioni"
+
+#: views/rc.cpp:74
+msgid "No matching"
+msgstr "Nessuna corrispondenza"
+
+#: views/rc.cpp:75
+msgid "Match on Payee name"
+msgstr "Verifica nome beneficiario"
+
+#: views/rc.cpp:76
+msgid "Match on a name listed below"
+msgstr "Verifica nome elencato in seguito"
+
+#: views/rc.cpp:77
+msgid "List of matching names"
+msgstr "Elenco di nomi corrispondenti"
+
+#: views/rc.cpp:78
+msgid "This list contains the names that will match this payee if a transaction is imported from an external source. Keep in mind, that you can specify regular expressions here."
+msgstr ""
+
+#: views/rc.cpp:79
+msgid "Ignore Case"
+msgstr "Ingnora maiuscole"
+
+#: views/rc.cpp:80
+msgid "Default Account"
+msgstr "Conto predefinito"
+
+#: views/rc.cpp:81
+#, fuzzy
+msgid ""
+"Use the default account for\n"
+"new transactions with this payee"
+msgstr "Inserisci questa transazione nel libro mastro."
+
+#: views/rc.cpp:82
+msgid "Default category:"
+msgstr "Categoria predefinita:"
+
+#: views/rc.cpp:83
+msgid "Suggest a category"
+msgstr "Suggerisci una categoria"
+
+#: views/rc.cpp:85
+msgid "New Scheduled transaction..."
+msgstr "Nuova transazione pianificata..."
+
+#: views/rc.cpp:86
+msgid "Filter Accounts"
+msgstr "Filtro conti"
+
+#: views/rc.cpp:87
+msgid "List View"
+msgstr "Vista a lista"
+
+#: views/rc.cpp:88
+msgid "Calendar View"
+msgstr "Vista calendario"
+
+#: views/kinstitutionsview.cpp:43
+msgid "Institution/Account"
+msgstr "Istituto/Conto"
+
+#: views/kinstitutionsview.cpp:157
+msgid "Accounts with no institution assigned"
+msgstr "Conti senza istituto"
+
+#: views/kscheduledview.cpp:70
+msgid "Type/Name"
+msgstr "Tipo/Nome"
+
+#: views/kscheduledview.cpp:75
+msgid "Frequency"
+msgstr "Frequenza"
+
+#: views/kscheduledview.cpp:157
+msgid "Unable to load accounts: "
+msgstr "Impossibile caricare i conti: "
+
+#: views/kscheduledview.cpp:171
+#: views/kscheduledview.cpp:429
+#: views/kscheduledview.cpp:445
+#: widgets/kmymoneyscheduledcalendar.cpp:46
+msgid "Bills"
+msgstr "Addebiti"
+
+#: dialogs/rc.cpp:232
+#: dialogs/rc.cpp:706
+#: views/kscheduledview.cpp:172
+#: views/kscheduledview.cpp:431
+#: views/kscheduledview.cpp:447
+#: widgets/kmymoneyscheduledcalendar.cpp:47
+msgid "Deposits"
+msgstr "Depositi"
+
+#: views/kscheduledview.cpp:173
+#: views/kscheduledview.cpp:435
+#: views/kscheduledview.cpp:451
+msgid "Loans"
+msgstr "Prestiti"
+
+#: views/kscheduledview.cpp:357
+msgid "Error activating context menu"
+msgstr "Errore di attivazione del menu contestuale"
+
+#: views/kscheduledview.cpp:385
+msgid "Error executing item"
+msgstr "Errore eseguendo la voce"
+
+#: views/kscheduledview.cpp:419
+msgid "Unable to filter account"
+msgstr "Impossibile filtrare il conto"
+
+#: views/kgloballedgerview.cpp:508
+msgid "Statement Details"
+msgstr "Dettagli estratto conto"
+
+#: views/kgloballedgerview.cpp:512
+msgid "Statement Deposit Details"
+msgstr "Dettagli depositi estratto conto"
+
+#: views/kgloballedgerview.cpp:513
+msgid "Statement Payment Details"
+msgstr "Dettagli pagamenti estratto conto"
+
+#: views/kgloballedgerview.cpp:642
+msgid "%1 deposits (%3), %2 payments (%4)"
+msgstr "%1 depositi (%3), %2 pagamenti (%4)"
+
+#: views/kgloballedgerview.cpp:649
+msgid "%1 payments (%2)"
+msgstr "%1 pagamenti (%2)"
+
+#: views/kgloballedgerview.cpp:653
+msgid "%1 deposits (%2)"
+msgstr "%1 depositi (%2)"
+
+#: views/kgloballedgerview.cpp:721
+#, c-format
+msgid "Statement: %1"
+msgstr "Estratto conto: %1"
+
+#: views/kgloballedgerview.cpp:722
+#: views/kgloballedgerview.cpp:736
+#, c-format
+msgid "Cleared: %1"
+msgstr "Compensata: %1"
+
+#: views/kgloballedgerview.cpp:723
+#, c-format
+msgid "Difference: %1"
+msgstr "Differenza: %1"
+
+#: views/kgloballedgerview.cpp:730
+#, c-format
+msgid "Last reconciled: %1"
+msgstr "Ultimo riconciliato: %1"
+
+#: views/kgloballedgerview.cpp:732
+msgid "Never reconciled"
+msgstr "Mai riconciliato"
+
+#: views/kgloballedgerview.cpp:772
+msgid "Investment value: %1%2"
+msgstr "Valore dell'investimento: %1%2"
+
+#: views/kgloballedgerview.cpp:1040
+#, fuzzy
+msgid "At least one split of the selected transactions has been reconciled. Do you wish to continue to edit the transactions anyway?"
+msgstr "Almeno una parte delle transazioni selezionate è stata riconciliata. Vuoi comunque continuare a modificare le transazioni?"
+
+#: views/kgloballedgerview.cpp:1051
+#, fuzzy
+msgid "At least one split of the selected transactions has been frozen. Editing the transactions is therefore prohibited."
+msgstr "Almeno una parte di questa transazione è stata congelata. Di conseguenza è proibito modificare questa transazione."
+
+#: views/kgloballedgerview.cpp:1053
+msgid "Transaction already frozen"
+msgstr "Transazione già congelata"
+
+#: views/kgloballedgerview.cpp:1058
+#, fuzzy
+msgid "At least one split of the selected transaction references an account that has been closed. Editing the transactions is therefore prohibited."
+msgstr "Almeno una parte di questa transazione è stata congelata. Di conseguenza è proibito modificare questa transazione."
+
+#: views/kgloballedgerview.cpp:1060
+msgid "Account closed"
+msgstr "Conto chiuso"
+
+#: views/kgloballedgerview.cpp:1349
+msgid "Cannot create transactions when no account is selected."
+msgstr "Impossibile creare transazioni quando nessun conto è selezionato."
+
+#: views/kgloballedgerview.cpp:1354
+msgid "Cannot create transactions in the context of a category."
+msgstr "Impossibile creare transazioni nel contesto di una categoria."
+
+#: views/kgloballedgerview.cpp:1358
+msgid "Cannot create transactions in a closed account."
+msgstr "Impossibile creare transazioni in un conto chiuso."
+
+#: views/kgloballedgerview.cpp:1370
+#, fuzzy
+msgid "Cannot process transaction with focus if it is not selected."
+msgstr "Impossibile elaborare le transazioni con suddivisioni congelate."
+
+#: views/kgloballedgerview.cpp:1400
+msgid "Cannot edit transactions with frozen splits."
+msgstr "Impossibile modificare transazioni con suddivisioni congelate."
+
+#: views/kgloballedgerview.cpp:1411
+msgid "Cannot edit transactions in the context of a category."
+msgstr "Impossibile modificare le transazioni nel contesto di una categoria."
+
+#: views/kgloballedgerview.cpp:1430
+msgid "Cannot edit investment transactions and non-investment transactions together."
+msgstr "Impossibile modificare transazioni di investimento e transazioni non di investimento contemporaneamente."
+
+#: views/kgloballedgerview.cpp:1438
+msgid "Cannot edit multiple split transactions at once."
+msgstr "Impossibile modificare transazioni con più suddivisioni in una sola volta."
+
+#: views/kgloballedgerview.cpp:1448
+msgid "Cannot edit investment transactions in the context of this account."
+msgstr "Impossibile modificare transazioni di investimento nel contesto di questo conto."
+
+#: views/kforecastview.cpp:164
+msgid "Scheduled"
+msgstr "Pianificato"
+
+#: views/kforecastview.cpp:169
+msgid "History"
+msgstr "Cronologia"
+
+#: views/kforecastview.cpp:296
+msgid "The balance of %2 is below the minimum balance %3 today."
+msgstr "Il saldo di %2 oggi è inferiore al bilancio minimo %3."
+
+#: views/kforecastview.cpp:301
+#: views/khomeview.cpp:1043
+msgid "The balance of %1 will drop below the minimum balance %2 in %3 days."
+msgstr "Il bilancio di %1 scenderà al di sotto del bilancio minimo %2 in %3 giorni."
+
+#: views/kforecastview.cpp:318
+#: views/khomeview.cpp:1059
+msgid "The balance of %1 is below %2 today."
+msgstr "Il bilancio di %1 oggi è inferiore a %2."
+
+#: views/kforecastview.cpp:323
+#: views/khomeview.cpp:1064
+msgid "The balance of %1 is above %2 today."
+msgstr "Il bilancio di %1 oggi è superiore a %2."
+
+#: views/kforecastview.cpp:330
+#: views/khomeview.cpp:1070
+msgid "The balance of %1 will drop below %2 in %3 days."
+msgstr "Il bilancio di %1 scenderà al di sotto di %2 in %3 giorni."
+
+#: views/kforecastview.cpp:335
+#: views/khomeview.cpp:1075
+msgid "The balance of %1 will raise above %2 in %3 days."
+msgstr "Il bilancio di %1 salirà al di sopra di %2 in %3 giorni."
+
+#: views/kforecastview.cpp:348
+msgid "The account %1 is decreasing %2 per cycle."
+msgstr "Il conto %1 sta diminuendo di %2 per ciclo"
+
+#: views/kforecastview.cpp:404
+#: widgets/kmymoneyaccounttreeforecast.cpp:114
+#, c-format
+msgid "Min Bal %1"
+msgstr "Bil min %1"
+
+#: views/kforecastview.cpp:406
+#: widgets/kmymoneyaccounttreeforecast.cpp:116
+#, c-format
+msgid "Min Date %1"
+msgstr "Data min %1"
+
+#: views/kforecastview.cpp:409
+#: widgets/kmymoneyaccounttreeforecast.cpp:119
+#, c-format
+msgid "Max Bal %1"
+msgstr "Bil max %1"
+
+#: views/kforecastview.cpp:411
+#: widgets/kmymoneyaccounttreeforecast.cpp:121
+#, c-format
+msgid "Max Date %1"
+msgstr "Data max %1"
+
+#: views/kforecastview.cpp:413
+#: widgets/kmymoneyaccounttreeforecast.cpp:123
+msgid "Average"
+msgstr "Media"
+
+#: views/kforecastview.cpp:649
+#: views/khomeview.cpp:268
+#: views/khomeview.cpp:275
+msgid "Networth Forecast"
+msgstr "Previsione di patrimonio netto"
+
+#: views/khomeview.cpp:203
+msgid "Your Financial Summary"
+msgstr "Riepilogo delle tue finanze"
+
+#: views/khomeview.cpp:218
+msgid "Preferred Accounts"
+msgstr "Conti preferiti"
+
+#: views/khomeview.cpp:225
+#: views/khomeview.cpp:227
+msgid "Payment Accounts"
+msgstr "Conti pagabili"
+
+#: views/khomeview.cpp:256
+msgid "Show KMyMoney welcome page"
+msgstr "Mostra la pagina di benvenuto di KMyMoney"
+
+#: views/khomeview.cpp:409
+msgid "Overdue payments"
+msgstr "Pagamenti arretrati"
+
+#: views/khomeview.cpp:424
+#: views/khomeview.cpp:497
+#: views/khomeview.cpp:531
+msgid "Balance after"
+msgstr "Saldo dopo"
+
+#: views/khomeview.cpp:482
+msgid "Today's payments"
+msgstr "Pagamenti di oggi"
+
+#: views/khomeview.cpp:516
+msgid "Future payments"
+msgstr "Pagamenti futuri"
+
+#: views/khomeview.cpp:585
+msgid "Less..."
+msgstr "Meno..."
+
+#: views/khomeview.cpp:587
+msgid "More..."
+msgstr "Più..."
+
+#: views/khomeview.cpp:622
+msgid "Enter schedule"
+msgstr "Inserisci pianificazione"
+
+#: views/khomeview.cpp:624
+msgid "Skip schedule"
+msgstr "Salta pianificazione"
+
+#: views/khomeview.cpp:627
+msgid "Edit schedule"
+msgstr "Modifica pianificazione"
+
+#: views/khomeview.cpp:631
+msgid " (%1 payments)"
+msgstr " (%1 pagamenti)"
+
+#: views/khomeview.cpp:771
+msgid "To Minimum Balance / Maximum Credit"
+msgstr "A bilancio minimo / credito massimo"
+
+#: views/khomeview.cpp:964
+msgid "%1 Day Forecast"
+msgstr "Previsione a %1 giorni"
+
+#: views/khomeview.cpp:973
+#: widgets/kmymoneyaccounttreeforecast.cpp:67
+msgid "%1 days"
+msgstr "%1 giorni"
+
+#: views/khomeview.cpp:1039
+msgid "The balance of %1 is below the minimum balance %2 today."
+msgstr "Il bilancio di %1 oggi è sotto il bilancio minimo %2."
+
+#: views/khomeview.cpp:1175
+msgid "Before KMyMoney can give you detailed information about your financial status, you need to create at least one account. Until then, KMyMoney shows the welcome page instead."
+msgstr ""
+
+#: views/khomeview.cpp:1258
+msgid "Assets and Liabilities Summary"
+msgstr "Riepilogo attività e passività"
+
+#: views/khomeview.cpp:1262
+msgid "Asset Accounts"
+msgstr "Conti attività"
+
+#: views/khomeview.cpp:1270
+msgid "Liability Accounts"
+msgstr "Conti di debito"
+
+#: views/khomeview.cpp:1348
+msgid "Total Assets"
+msgstr "Totale attività"
+
+#: views/khomeview.cpp:1354
+msgid "Total Liabilities"
+msgstr "Totale passività"
+
+#: views/khomeview.cpp:1399
+msgid "Current Month Summary"
+msgstr "Riepilogo mese corrente"
+
+#: views/khomeview.cpp:1403
+#: views/khomeview.cpp:1440
+msgid "Budgeted"
+msgstr "Preventivato"
+
+#: views/khomeview.cpp:1433
+msgid "Budget Overruns"
+msgstr "Sforamenti di budget"
+
+#: views/khomeview.cpp:1502
+msgid "No Budget Categories have been overrun"
+msgstr ""
+
+#: views/khomeview.cpp:1801
+msgid "Cash Flow Summary"
+msgstr "Riepilogo flusso di cassa"
+
+#: views/khomeview.cpp:1808
+msgid "Income and Expenses of Current Month"
+msgstr "Entrate e uscite del mese corrente"
+
+#: views/khomeview.cpp:1816
+msgid "Scheduled Income"
+msgstr "Entrate pianificate"
+
+#: views/khomeview.cpp:1819
+msgid "Expenses"
+msgstr "Uscite"
+
+#: views/khomeview.cpp:1822
+msgid "Scheduled Expenses"
+msgstr "Uscite pianificate"
+
+#: views/khomeview.cpp:1850
+msgid "Liquid Assets and Liabilities"
+msgstr "Attività e passività liquide"
+
+#: views/khomeview.cpp:1855
+msgid "Liquid Assets"
+msgstr "Liquidità"
+
+#: views/khomeview.cpp:1858
+msgid "Transfers to Liquid Liabilities"
+msgstr "Trasferisce a passività liquide"
+
+#: views/khomeview.cpp:1861
+msgid "Liquid Liabilities"
+msgstr "Passività liquide"
+
+#: views/khomeview.cpp:1864
+msgid "Other Transfers"
+msgstr "Altri trasferimenti"
+
+#: views/khomeview.cpp:1908
+msgid "Cash Flow Status"
+msgstr "Stato del flusso di cassa"
+
+#: views/khomeview.cpp:1914
+msgid "Expected Liquid Assets"
+msgstr "Liquidità attesa"
+
+#: views/khomeview.cpp:1917
+msgid "Expected Liquid Liabilities"
+msgstr "Passività liquide attese"
+
+#: views/khomeview.cpp:1920
+msgid "Expected Profit/Loss"
+msgstr "Profitti/Perdite attese"
+
+#: plugins/ofximport/ofximporterplugin.cpp:64
+msgid "OFX..."
+msgstr "OFX..."
+
+#: plugins/ofximport/ofximporterplugin.cpp:69
+msgid "OFX import file selection"
+msgstr "Selezione file da importare con OFX"
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid "Unable to import %1 using the OFX importer plugin. This file is not the correct format."
+msgstr "Impossibile importare %1 utilizzando il plugin di importazione OFX. Questo file non ha un formato corretto."
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid "Incorrect format"
+msgstr "Formato non corretto"
+
+#: plugins/ofximport/ofximporterplugin.cpp:122
+msgid "Unable to parse file"
+msgstr "Impossibile analizzare il file"
+
+#: plugins/ofximport/ofximporterplugin.cpp:576
+msgid "Online settings"
+msgstr "Impostazioni in linea"
+
+#: plugins/ofximport/ofximporterplugin.cpp:635
+#, c-format
+msgid "Error connecting to bank: %1"
+msgstr "Errore durante la connessione alla banca: %1"
+
+#: plugins/ofximport/ofximporterplugin.cpp:646
+msgid "Unable to import %1 using the OFX importer plugin. The plugin returned the following error:<p>%2"
+msgstr "Impossibile importare %1 utilizzando il plugin di importazione OFX. Il plugin ha restituito il seguente errore:<p> %2"
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Importing process terminated unexpectedly."
+msgstr "Processo di importazione terminato in maniera inaspettata."
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Failed to import all statements."
+msgstr "Errore nell'importazione di tutti gli estratti conto."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "The HTTP request failed."
+msgstr "Richiesta HTTP fallita."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "Failed"
+msgstr "Fallito"
+
+#: plugins/ofximport/ofxpartner.cpp:410
+msgid "Cannot open file %1 for writing"
+msgstr "Impossibile aprire il file '%1' in scrittura"
+
+#: plugins/ofximport/ofxpartner.cpp:414
+msgid "OFX setup error"
+msgstr "Errore installazione OFX"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid "Loading banklist"
+msgstr "Caricamento elenco delle banche"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid ""
+"Getting list of banks from http://moneycentral.msn.com/\n"
+"This may take some time depending on the available bandwidth."
+msgstr ""
+"Recupero dell'elenco delle banche da http://moneycentral.msn.com/\n"
+"L'operazione può richiedere un po' di tempo a seconda della larghezza di banda disponibile"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:155
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:199
+msgid "Supports online statements<br>"
+msgstr "Supporta estratti in linea<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:157
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:201
+msgid "Supports investments<br>"
+msgstr "Supporta investimenti<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:159
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:203
+msgid "Supports bill payment (but not supported by KMyMoney yet)<br>"
+msgstr "Supporta il pagamento delle fatture (ma non ancora supportato da KMyMoney)<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:163
+msgid "Does not support online banking</p>"
+msgstr "Non supporta l'online banking</p>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:173
+msgid "Please choose a bank."
+msgstr "Scegli una banca."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:179
+msgid "Please fill all fields with values."
+msgstr "Inserisci i valori in tutti i campi."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:271
+msgid "No suitable accounts were found at this bank."
+msgstr "Nessun conto trovato per questa banca."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:283
+msgid "Please choose an account"
+msgstr "Scegliere un conto"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:386
+msgid "Server message: %1\n"
+msgstr "Messaggio del server: %1\n"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+msgid "Your bank returned warnings when signing on"
+msgstr "La tua banca a segnalato degli avvisi all'accesso"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+#, c-format
+msgid "WARNING %1"
+msgstr "AVVISO%1"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+msgid "Error signing onto your bank"
+msgstr "Errore di connessione alla banca"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, c-format
+msgid "ERROR %1"
+msgstr "ERRORE %1"
+
+#: plugins/ofximport/dialogs/konlinebankingstatus.cpp:59
+msgid "Enabled & configured"
+msgstr "Abilitato e configurato"
+
+#: plugins/ofximport/dialogs/rc.cpp:1
+msgid "OFX Direct Connect"
+msgstr "OFX Direct Connect"
+
+#: plugins/ofximport/dialogs/rc.cpp:2
+msgid "Contacting bank..."
+msgstr "Connessione alla banca in corso..."
+
+#: plugins/ofximport/dialogs/rc.cpp:4
+msgid "Online Banking Account Setup"
+msgstr "Impostazione conto bancario online"
+
+#: plugins/ofximport/dialogs/rc.cpp:5
+msgid "Select Financial Institution"
+msgstr "Seleziona istituto finanziario"
+
+#: plugins/ofximport/dialogs/rc.cpp:6
+msgid "Please select your financial institution from the list below..."
+msgstr "Seleziona il tuo istituto finanziario dal seguente elenco..."
+
+#: plugins/ofximport/dialogs/rc.cpp:7
+msgid "Automatic"
+msgstr "Automatico"
+
+#: plugins/ofximport/dialogs/rc.cpp:8
+msgid "Financial Institution"
+msgstr "Istituto finanziario"
+
+#: plugins/ofximport/dialogs/rc.cpp:9
+msgid "Manual"
+msgstr "Manuale"
+
+#: plugins/ofximport/dialogs/rc.cpp:10
+msgid "Org"
+msgstr "Org"
+
+#: plugins/ofximport/dialogs/rc.cpp:11
+msgid "FID"
+msgstr "ID"
+
+#: dialogs/settings/rc.cpp:120
+#: plugins/ofximport/dialogs/rc.cpp:12
+#: widgets/rc.cpp:46
+msgid "URL"
+msgstr "URL"
+
+#: plugins/ofximport/dialogs/rc.cpp:13
+msgid "Enter Login Details"
+msgstr "Inserisci i dati di accesso"
+
+#: plugins/ofximport/dialogs/rc.cpp:14
+msgid "Please enter the username and password you use to log into this bank for online banking. Please note that many banks require a separate signup, and assign a separate PIN or password just for online banking from home."
+msgstr "Inserisci il nome utente e la password che utilizzi per accedere a questa banca per l'online banking. Nota che molte banche richiedono una registrazione separata e assegnano un codice PIN o password di accesso separata solo per l'online banking da casa."
+
+#: plugins/ofximport/dialogs/rc.cpp:15
+msgid "Connection Details"
+msgstr "Dettagli della connessione"
+
+#: plugins/ofximport/dialogs/rc.cpp:16
+msgid "Username"
+msgstr "Nome utente"
+
+#: plugins/ofximport/dialogs/rc.cpp:17
+#: plugins/ofximport/dialogs/rc.cpp:36
+msgid "Header Version"
+msgstr "Versione dell'intestazione"
+
+#: plugins/ofximport/dialogs/rc.cpp:18
+#: plugins/ofximport/dialogs/rc.cpp:37
+msgid "Identify as"
+msgstr "Identifica come"
+
+#: dialogs/rc.cpp:742
+#: plugins/ofximport/dialogs/rc.cpp:19
+msgid "Password"
+msgstr "Password"
+
+#: plugins/ofximport/dialogs/rc.cpp:20
+msgid "Select Account"
+msgstr "Seleziona conto"
+
+#: plugins/ofximport/dialogs/rc.cpp:21
+msgid "Please select the account from your financial institution from the list below which matches this account."
+msgstr "Seleziona dalla lista seguente il conto dell'istituto finanziario che corrisponde a questo conto."
+
+#: plugins/ofximport/dialogs/rc.cpp:24
+msgid "Bank"
+msgstr "Banca"
+
+#: plugins/ofximport/dialogs/rc.cpp:25
+msgid "Branch"
+msgstr "Ramo"
+
+#: plugins/ofximport/dialogs/rc.cpp:26
+msgid "WizardPage"
+msgstr "Procedura guidata"
+
+#: plugins/ofximport/dialogs/rc.cpp:27
+msgid "Congratulations! You have successfully set up your bank for online banking via OFX."
+msgstr "Congratulazioni! Hai configurato con successo l'accesso alla tua banca online attraverso OFX."
+
+#: plugins/ofximport/dialogs/rc.cpp:28
+msgid "Account Details"
+msgstr "Dettagli conto"
+
+#: plugins/ofximport/dialogs/rc.cpp:29
+#: plugins/ofximport/dialogs/rc.cpp:31
+msgid "&lt;Not configured&gt;"
+msgstr "&lt;Non configurato&gt;"
+
+#: plugins/ofximport/dialogs/rc.cpp:30
+msgid "BANK/BROKER:"
+msgstr "BANCA/INTERMEDIARIO:"
+
+#: plugins/ofximport/dialogs/rc.cpp:32
+msgid "Unavailable"
+msgstr "Non disponibile"
+
+#: plugins/ofximport/dialogs/rc.cpp:33
+msgid "ACCOUNT:"
+msgstr "CONTO:"
+
+#: plugins/ofximport/dialogs/rc.cpp:34
+msgid "STATUS:"
+msgstr "STATO:"
+
+#: plugins/ofximport/dialogs/rc.cpp:35
+msgid "OFX Details"
+msgstr "Dettagli OFX"
+
+#: plugins/ofximport/dialogs/rc.cpp:38
+msgid "Start date of import"
+msgstr "Data iniziale dell'importazione"
+
+#: plugins/ofximport/dialogs/rc.cpp:39
+#, fuzzy
+msgid "To&day minus"
+msgstr "Pagamenti di oggi"
+
+#: plugins/ofximport/dialogs/rc.cpp:40
+msgid "days"
+msgstr "giorni"
+
+#: plugins/ofximport/dialogs/rc.cpp:41
+msgid "Last &update"
+msgstr "&Ultimo aggiornamento"
+
+#: plugins/ofximport/dialogs/rc.cpp:42
+#, fuzzy
+msgid "Pi&ck date"
+msgstr "Data emissione"
+
+#: plugins/ofximport/dialogs/rc.cpp:43
+msgid "Name is derived from"
+msgstr "Il nome deriva da"
+
+#: plugins/ofximport/dialogs/rc.cpp:44
+msgid "P&AYEEID"
+msgstr "IDBENEFICI&ARIO"
+
+#: plugins/ofximport/dialogs/rc.cpp:45
+msgid "&NAME"
+msgstr "&NOME"
+
+#: plugins/ofximport/dialogs/rc.cpp:46
+msgid "field if both are present in download"
+msgstr "campo se entrambi presenti in download"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:81
+msgid "Quicken Windows 2003"
+msgstr "Quicken Windows 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:82
+msgid "Quicken Windows 2004"
+msgstr "Quicken Windows 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:83
+msgid "Quicken Windows 2005"
+msgstr "Quicken Windows 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:84
+msgid "Quicken Windows 2006"
+msgstr "Quicken Windows 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:85
+msgid "Quicken Windows 2007"
+msgstr "Quicken Windows 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:86
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:111
+msgid "Quicken Windows 2008"
+msgstr "Quicken Windows 2008"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:89
+msgid "MS-Money 2003"
+msgstr "MS-Money 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:90
+msgid "MS-Money 2004"
+msgstr "MS-Money 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:91
+msgid "MS-Money 2005"
+msgstr "MS-Money 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:92
+msgid "MS-Money 2006"
+msgstr "MS-Money 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:93
+msgid "MS-Money 2007"
+msgstr "MS-Money 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:94
+msgid "MS-Money Plus"
+msgstr "MS-Money Plus"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:91
+msgid "Report Configuration"
+msgstr "Configurazione report"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:117
+#: dialogs/kreportconfigurationfilterdlg.cpp:135
+msgid "Rows/Columns"
+msgstr "Righe/Colonne"
+
+#: dialogs/investtransactioneditor.cpp:203
+#: dialogs/investtransactioneditor.cpp:537
+#: dialogs/investtransactioneditor.cpp:579
+#: dialogs/rc.cpp:103
+#: dialogs/rc.cpp:158
+#: dialogs/rc.cpp:245
+#: dialogs/rc.cpp:750
+#: dialogs/rc.cpp:794
+#: widgets/kmymoneyaccountselector.cpp:182
+#: widgets/register.cpp:64
+#: widgets/register.cpp:567
+#: widgets/transaction.cpp:1500
+msgid "Security"
+msgstr "Strumenti finanziari"
+
+#: dialogs/investtransactioneditor.cpp:211
+msgid "Asset account"
+msgstr "Conto attività"
+
+#: dialogs/investtransactioneditor.cpp:1073
+msgid "Price/Share"
+msgstr "Prezzo/Quota"
+
+#: dialogs/kmergetransactionsdlg.cpp:39
+msgid "Merge Transactions"
+msgstr "Unisci transazioni"
+
+#: dialogs/kmergetransactionsdlg.cpp:40
+msgid "Are you sure you wish to merge these transactions?"
+msgstr "Sei sicuro di voler unire queste transazioni?"
+
+#: dialogs/kstartdlg.cpp:59
+msgid "Start Dialog"
+msgstr "Finestra iniziale"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Templates"
+msgstr "Modelli"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Select templates"
+msgstr "Seleziona modelli"
+
+#: dialogs/kstartdlg.cpp:80
+#: dialogs/kstartdlg.cpp:119
+msgid "New KMyMoney document"
+msgstr "Nuovo documento KMyMoney"
+
+#: dialogs/kstartdlg.cpp:90
+msgid "Open a KMyMoney document"
+msgstr "Apri un documento KMyMoney"
+
+#: dialogs/kstartdlg.cpp:96
+msgid ""
+"%1|KMyMoney files (*.kmy)\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|File di KMyMoney (*.kmy)\n"
+"%2|Tutti i file (*.*)"
+
+#: dialogs/kstartdlg.cpp:102
+msgid "Recent Files"
+msgstr "File recenti"
+
+#: dialogs/kstartdlg.cpp:217
+msgid "Blank Document"
+msgstr "Documento vuoto"
+
+#: dialogs/knewbudgetdlg.cpp:71
+msgid "Please specify a budget name"
+msgstr "Specifica un nome per il budget"
+
+#: dialogs/kgncpricesourcedlg.cpp:48
+#, c-format
+msgid "Investment: %1"
+msgstr "Investimento: %1"
+
+#: dialogs/kgncpricesourcedlg.cpp:49
+#, c-format
+msgid "Quote source: %1"
+msgstr "Fonte quotazioni: %1"
+
+#: dialogs/kmymoneypricedlg.cpp:62
+#: dialogs/ksecuritylisteditor.cpp:69
+msgid "Delete this entry"
+msgstr "Elimina questa voce"
+
+#: dialogs/ksecuritylisteditor.cpp:70
+msgid "Remove this security item from the file"
+msgstr "Rimuovi la voci relativa a questo strumento finanziario da questo file"
+
+#: dialogs/ksecuritylisteditor.cpp:73
+msgid "&Add"
+msgstr "&Aggiungi"
+
+#: dialogs/kmymoneypricedlg.cpp:68
+#: dialogs/ksecuritylisteditor.cpp:75
+msgid "Add a new entry"
+msgstr "Aggiungi una nuova voce"
+
+#: dialogs/ksecuritylisteditor.cpp:76
+msgid "Create a new security entry."
+msgstr "Crea una nuova voce strumento finanziario."
+
+#: dialogs/keditequityentrydlg.cpp:77
+#: dialogs/kmymoneypricedlg.cpp:74
+#: dialogs/ksecuritylisteditor.cpp:81
+msgid "Modify the selected entry"
+msgstr "Modifica la voce selezionata"
+
+#: dialogs/ksecuritylisteditor.cpp:82
+msgid "Change the security information of the selected entry."
+msgstr "Cambia le informazioni sullo strumento finanziario della voce selezionata."
+
+#: dialogs/kmymoneypricedlg.cpp:80
+#: dialogs/ksecuritylisteditor.cpp:87
+msgid "Close the dialog"
+msgstr "Chiudi la finestra"
+
+#: dialogs/kmymoneypricedlg.cpp:81
+#: dialogs/ksecuritylisteditor.cpp:88
+msgid "Use this to close the dialog and return to the application."
+msgstr "Premi qui per chiudere la finestra e ritornare alla schermata principale."
+
+#: dialogs/ksecuritylisteditor.cpp:184
+msgid "Do you really want to remove the currency <b>%1</b> from the file?</p><i>Note: It is currently not supported to add currencies.</i>"
+msgstr "Vuoi davvero rimuovere la valuta <b>%1</b> dal file?</p><i>Nota: l'aggiunta di valute non è ancora supportata.</i>"
+
+#: dialogs/ksecuritylisteditor.cpp:187
+msgid "Do you really want to remove the %1 <b>%2</b> from the file?"
+msgstr "Vuoi davvero rimuovere il %1 <b>%2</b> dal file?"
+
+#: dialogs/ksecuritylisteditor.cpp:190
+msgid "Delete security"
+msgstr "Elimina strumento finanziario"
+
+#: dialogs/kmymoneypricedlg.cpp:63
+msgid "Remove this price item from the file"
+msgstr "Rimuovi questo prezzo dal file"
+
+#: dialogs/kmymoneypricedlg.cpp:66
+#: dialogs/mymoneyqifprofileeditor.cpp:94
+msgid "&New"
+msgstr "&Nuovo"
+
+#: dialogs/kmymoneypricedlg.cpp:69
+msgid "Create a new price entry."
+msgstr "Crea una nuova voce relativa a un prezzo."
+
+#: dialogs/kmymoneypricedlg.cpp:75
+msgid "Change the details of selected price information."
+msgstr "Cambia i dettagli delle informazioni del prezzo selezionato."
+
+#: dialogs/kmymoneypricedlg.cpp:201
+#: widgets/kmymoneypriceview.cpp:309
+msgid "Do you really want to delete the selected price entry?"
+msgstr "Vuoi davvero eliminare la voce prezzo selezionata?"
+
+#: dialogs/kmymoneypricedlg.cpp:201
+#: widgets/kmymoneypriceview.cpp:309
+msgid "Delete price information"
+msgstr "Eliminare le informazioni del prezzo"
+
+#: dialogs/kchooseimportexportdlg.cpp:46
+msgid ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Scegli il tipo di importazione da effettuare. Una semplice descrizione\n"
+"dei diversi tipi di importazione è disponibile nella parte bassa dello schermo e viene aggiornata quando\n"
+"si seleziona una voce dalla casella corrispondente.\n"
+"\n"
+"Una volta scelto il tipo di importazione premi il pulsante OK."
+
+#: dialogs/kchooseimportexportdlg.cpp:50
+#: dialogs/rc.cpp:22
+msgid "Choose import type:"
+msgstr "Scegli il tipo di importazione:"
+
+#: dialogs/kchooseimportexportdlg.cpp:51
+#: dialogs/rc.cpp:20
+msgid "Choose Import Type Dialog"
+msgstr "Finestra di scelta del tipo di importazione"
+
+#: dialogs/kchooseimportexportdlg.cpp:53
+msgid ""
+"Please choose the type of export you wish to perform. A simple explanation\n"
+"of the export type is available at the bottom of the screen and is updated when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an export type please press the OK button."
+msgstr ""
+"Scegli il tipo di esportazione da effettuare. Una semplice descrizione\n"
+"dei diversi tipi di esportazione è disponibile nella parte bassa dello schermo e viene aggiornata quando\n"
+"si seleziona una voce dalla casella corrispondente.\n"
+"\n"
+"Una volta scelto il tipo di esportazione premi il pulsante OK."
+
+#: dialogs/kchooseimportexportdlg.cpp:57
+msgid "Choose export type:"
+msgstr "Scegli il tipo di esportazione:"
+
+#: dialogs/kchooseimportexportdlg.cpp:58
+msgid "Choose Export Type Dialog"
+msgstr "Finestra di scelta del tipo di esportazione"
+
+#: dialogs/kchooseimportexportdlg.cpp:78
+msgid ""
+"QIF files are created by the popular accounting program Quicken.\n"
+"Another dialog will appear, if you choose this type, asking for further\n"
+"information relevant to the Quicken format."
+msgstr ""
+"I file QIF sono creati dal popolare programma di contabilità Quicken.\n"
+"Se scegli questo tipo di file si aprirà un'altra finestra, in cui potrai\n"
+"specificare informazioni aggiuntive per il formato Quicken."
+
+#: dialogs/kchooseimportexportdlg.cpp:82
+msgid ""
+"The CSV type uses a comma delimeted text file that can be used by\n"
+"most popular spreadsheet programs available for Linux and other operating\n"
+"systems."
+msgstr ""
+"Il tipo CSV utilizza un file di testo con la virgola come separatore di campo;\n"
+"può essere importato in diversi fogli di calcolo disponibili per Linux e per\n"
+"altri sistemi operativi."
+
+#: dialogs/kequitypriceupdatedlg.cpp:222
+msgid "%1 units in %2"
+msgstr "%1 unità in %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid "Failed to retrieve an exchange rate for %1 from %2. It will be skipped this time."
+msgstr "Impossibile ottenere il tasso di cambio per %1 da %2. Sarò omesso per questa volta."
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid "Price Update Failed"
+msgstr "Aggiornamento prezzo fallito"
+
+#: dialogs/kequitypriceupdatedlg.cpp:427
+msgid "Failed to retrieve a quote for %1 from %2. Press <b>No</b> to remove the online price source from this security permanently, <b>Yes</b> to continue updating this security during future price updates or <b>Cancel</b> to stop the current update operation."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:427
+#: dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Price Update Failed"
+msgstr "Aggiornamento prezzo fallito"
+
+#: dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Cannot update security <b>%1</b>: %2"
+msgstr "Impossibile aggiornare lo strumento finanziario <b>%1</b>: %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:528
+msgid "Price for %1 updated (id %2)"
+msgstr "Prezzo per %1 aggiornato (id %2)"
+
+#: dialogs/kequitypriceupdatedlg.cpp:534
+msgid "Received an invalid price for %1, unable to update."
+msgstr "Ricevuto un prezzo non valido per %1, impossibile aggiornare."
+
+#: dialogs/kequitypriceupdatedlg.cpp:554
+msgid "Received a price for %1 (id %2), but this symbol is not on the list! Aborting entire update."
+msgstr "È stato ricevuto un prezzo per %1 (id %2), ma questo simbolo non è nella lista! L'intero aggiornamento verrà annullato."
+
+#: dialogs/transactioneditor.cpp:222
+msgid "The number <b>%1</b> has already been used in account <b>%2</b>. Do you want to replace it with the next available number?"
+msgstr "Il numero <b>%1</b> è già stato usato nel conto <b>%2</b>. Vuoi sostituirlo con il successivo numero disponibile?"
+
+#: dialogs/transactioneditor.cpp:222
+msgid "Duplicate number"
+msgstr "Duplica numero"
+
+#: dialogs/transactioneditor.cpp:303
+msgid "This transaction has more than two splits and is based on a different currency (%1). Using this account to modify the transaction is currently not very well supported by KMyMoney and may result in false results."
+msgstr "Questa transazione ha più di due suddivisioni ed è basata su una valuta diversa (%1). L'utilizzo di questo conto per modificare la transazione non è, al momento, ben supportato da KMyMoney e potrebbe fornire risultati non corretti."
+
+#: dialogs/transactioneditor.cpp:305
+msgid "KMyMoney was not able to find a more appropriate account to edit this transaction. Nevertheless, you are allowed to modify the transaction. If you don't want to edit this transaction, please cancel from editing next."
+msgstr "KMyMoney non è in grado di trovare un conto più appropriato per modificare questa transazione. Tuttavia, ti è consentito modificare la transazione. Se non vuoi modificare questa transazione, annulla la modifica."
+
+#: dialogs/transactioneditor.cpp:307
+msgid "Using e.g. <b>%1</b> to edit this transaction is a better choice. Nevertheless, you are allowed to modify the transaction. If you want to use the suggested account instead, please cancel from editing next and change the view to the suggested account."
+msgstr "L'utilizzo ad es. di <b>%1</b> per modificare questa transazione è una scelta migliore. Tuttavia, ti è consentito di modificare la transazione. Se invece vuoi usare il conto suggerito, annulla la modifica e cambia la vista del conto suggerito."
+
+#: dialogs/transactioneditor.cpp:410
+msgid "This transaction has more than two splits and is originally based on a different currency (%1). Using this account to modify the transaction may result in rounding errors. Do you want to continue?"
+msgstr "Questa transazione ha più di due suddivisioni ed è basata su una valuta diversa (%1). L'utilizzo di questo conto per modificare potrebbe generare errori inattesi. Vuoi continuare?"
+
+#: dialogs/transactioneditor.cpp:412
+#, fuzzy
+msgid "At least one of the selected transactions has more than two splits and is originally based on a different currency (%1). Using this account to modify the transactions may result in rounding errors. Do you want to continue?"
+msgstr "Questa transazione ha più di due divisioni ed è basata su una valuta diversa (%1). L'utilizzo di questo conto per modificare la transazione non è, al momento, ben supportato da KMyMoney e potrebbe fornire risultati non corretti."
+
+#: dialogs/transactioneditor.cpp:557
+msgid "Storing transactions"
+msgstr "Memorizzazione transazioni"
+
+#: dialogs/transactioneditor.cpp:603
+#: widgets/kmymoneybriefschedule.cpp:65
+msgid "&Enter"
+msgstr "Ins&erisci"
+
+#: dialogs/transactioneditor.cpp:606
+msgid "Use this to enter the transaction into the ledger."
+msgstr "Inserisci questa transazione nel libro mastro."
+
+#: dialogs/transactioneditor.cpp:607
+msgid "&Schedule"
+msgstr "Piani&fica"
+
+#: dialogs/transactioneditor.cpp:609
+msgid "Accepts the entered data and stores it as schedule"
+msgstr "Accetta i dati inseriti e li salva come pianificazione"
+
+#: dialogs/transactioneditor.cpp:610
+msgid "Use this to schedule the transaction for later entry into the ledger."
+msgstr "Premi qui per pianificare la transazione per inserirla successivamente nel libro mastro."
+
+#: dialogs/transactioneditor.cpp:612
+msgid "The transaction you are about to enter has a post date in the future.<br/><br/>Do you want to enter it in the ledger or add it to the schedules?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"_: Dialog caption for 'Enter or schedule' dialog\n"
+"Enter or schedule?"
+msgstr "Inserire o pianificare?"
+
+#: dialogs/transactioneditor.cpp:671
+msgid "The balance of account <b>%1</b> dropped below the warning balance of %2."
+msgstr "Il bilancio del conto <b>%1</b> è sceso sotto il bilancio di allarme di %2."
+
+#: dialogs/transactioneditor.cpp:677
+msgid "The balance of account <b>%1</b> dropped below the minimum balance of %2."
+msgstr "Il saldo del conto <b>%1</b> è sceso sotto il saldo minimo di %2."
+
+#: dialogs/transactioneditor.cpp:683
+msgid "The balance of account <b>%1</b> dropped below the maximum credit warning limit of %2."
+msgstr "Il saldo del conto <b>%1</b> è sceso sotto il limite di allarme di credito massimo di %2."
+
+#: dialogs/transactioneditor.cpp:689
+msgid "The balance of account <b>%1</b> dropped below the maximum credit limit of %2."
+msgstr "Il saldo del conto <b>%1</b> è sceso al di sotto del limite di credito massimo di %2."
+
+#: dialogs/transactioneditor.cpp:740
+#, fuzzy
+msgid "Payer/Receiver"
+msgstr "Creditore/Beneficiario"
+
+#: dialogs/transactioneditor.cpp:748
+msgid "Category/Account"
+msgstr "Categoria/Conto"
+
+#: dialogs/transactioneditor.cpp:980
+#: dialogs/transactioneditor.cpp:1016
+#: dialogs/transactioneditor.cpp:1378
+#: dialogs/transactioneditor.cpp:1399
+#: dialogs/transactioneditor.cpp:1422
+#: dialogs/transactioneditor.cpp:1443
+#: dialogs/transactioneditor.cpp:1505
+#: dialogs/transactioneditor.cpp:1509
+#: widgets/transaction.cpp:902
+msgid "Transfer from"
+msgstr "Trasferisci da"
+
+#: dialogs/transactioneditor.cpp:982
+#: dialogs/transactioneditor.cpp:1018
+#: dialogs/transactioneditor.cpp:1401
+#: dialogs/transactioneditor.cpp:1445
+#: dialogs/transactioneditor.cpp:1506
+#: widgets/transaction.cpp:902
+msgid "Transfer to"
+msgstr "Trasferisci a"
+
+#: dialogs/transactioneditor.cpp:1259
+msgid "Select autofill transaction"
+msgstr "Seleziona completamento automatico transazione"
+
+#: dialogs/transactionmatcher.cpp:77
+msgid "First transaction does not match requirement for matching"
+msgstr "La prima transazione non corrisponde ai criteri richiesti"
+
+#: dialogs/transactionmatcher.cpp:79
+msgid "Second transaction does not match requirement for matching"
+msgstr "La seconda transazione non corrisponde ai criteri richiesti"
+
+#: dialogs/transactionmatcher.cpp:83
+#: dialogs/transactionmatcher.cpp:133
+msgid "Splits for %1 have conflicting values (%2,%3)"
+msgstr "Le suddivisioni per %1 presentano valori in conflitto (%2,%3)"
+
+#: dialogs/transactionmatcher.cpp:96
+#: dialogs/transactionmatcher.cpp:149
+msgid "Both of these transactions have been imported into %1. Therefore they cannot be matched. Matching works with one imported transaction and one non-imported transaction."
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:101
+#: dialogs/transactionmatcher.cpp:156
+msgid "Unable to match all splits (%1)"
+msgstr "Impossibile verificare tutte le suddivisioni (%1)"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:65
+msgid "Account and transfer account are the same. Please change one."
+msgstr "Il conto di origine e il conto di destinazione coincidono. Cambiane uno."
+
+#: dialogs/kconfirmmanualenterdlg.cpp:84
+msgid "Payee changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "Beneficiario cambiato.<br>&nbsp;&nbsp;&nbsp;Vecchio: <b>%1</b>, Nuovo: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:92
+#: dialogs/kconfirmmanualenterdlg.cpp:100
+msgid "Account changed. Old: \"%1\", New: \"%2\""
+msgstr "Conto cambiato. Vecchio: \"%1\", nuovo: \"%2\""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:107
+msgid "Account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "Conto cambiato.<br>&nbsp;&nbsp;&nbsp;Vecchio: <b>%1</b>, Nuovo: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:115
+msgid "Transfer account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "Conto di trasferimento cambiato.<br>&nbsp;&nbsp;&nbsp;Vecchio: <b>%1</b>, Nuovo: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:143
+msgid "Category changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "Categoria cambiata.<br>&nbsp;&nbsp;&nbsp;Vecchia: <b>%1</b>, Nuova: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:151
+#: dialogs/kconfirmmanualenterdlg.cpp:153
+msgid "empty"
+msgstr "vuoto"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:157
+msgid "Memo changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "Promemoria modificato.<br>&nbsp;&nbsp;&nbsp;Vecchio: <b>%1</b>, Nuovo: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:166
+msgid "Amount changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "Importo cambiato.<br>&nbsp;&nbsp;&nbsp;Vecchio: <b>%1</b>, Nuovo: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:175
+msgid "Reconciliation flag changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "Contrassegno di riconciliazione modificato.<br>&nbsp;&nbsp;&nbsp;Vecchio: <b>%1</b>, Nuovo: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:182
+msgid "Fatal error in determining data: "
+msgstr "Errore nell'identificazione dei dati"
+
+#: dialogs/kselectdatabasedlg.cpp:56
+msgid ""
+"There are no Qt SQL drivers installed in your system.\n"
+"Please consult documentation for your distro, or visit the Qt web site (www.trolltech.com) and search for SQL drivers."
+msgstr ""
+"Non ci sono driver Qt SQL installati sul tuo sistema.\n"
+"Consulta la documentazione della tua distribuzione, o visita il sito web Qt (www.trolltech.com) e cerca i driver SQL."
+
+#: dialogs/kselectdatabasedlg.cpp:100
+msgid "Qt SQL driver %1 is no longer installed on your system"
+msgstr "Il driver Qt SQL %1 non è installato sul sistema"
+
+#: dialogs/kselectdatabasedlg.cpp:107
+msgid "Qt SQL driver %1 is not suported"
+msgstr "Il driver Qt SQL %1 non è supportato"
+
+#: dialogs/kselectdatabasedlg.cpp:164
+msgid "SQLite files (*.sql);; All files (*.*)"
+msgstr "File SQLite (*.sql);; Tutti i file (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:167
+msgid "Select SQLite file"
+msgstr "Seleziona file SQLite"
+
+#: dialogs/kselectdatabasedlg.cpp:188
+msgid "All files (*.*)"
+msgstr "Tutti i file (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:191
+msgid "Select output file"
+msgstr "Seleziona il file di uscita"
+
+#: dialogs/investactivities.cpp:168
+msgid "%1 (Brokerage)"
+msgstr "%1 (Intermediazione)"
+
+#: dialogs/investactivities.cpp:200
+#: dialogs/investactivities.cpp:288
+#: dialogs/investactivities.cpp:425
+#: widgets/transaction.cpp:1548
+msgid "Price/share"
+msgstr "Prezzo/quota"
+
+#: dialogs/investactivities.cpp:586
+msgid "Ratio 1/"
+msgstr "Rapporto 1/"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid "<p>Please check that all the details in the following dialog are correct and press OK.</p><p>Editable data can be changed and can either be applied to just this occurence or for all subsequent occurences for this schedule. (You will be asked what you intend after pressing OK in the following dialog)</p>"
+msgstr "<p>Controllare che tutti i dettagli nella finestra di dialogo seguente siano corretti e premere OK. </p><p> I dati modificabili possono essere cambiati e applicati solo per questa ricorrenza o per tutte le ricorrenze di questa pianificazione. (Ti verrà chiesto a cosa applicarlo una volta premuto il pulsante OK)</p>"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid "Enter scheduled transaction"
+msgstr "Inserisci la transazione pianificata"
+
+#: dialogs/kcsvprogressdlg.cpp:65
+#: dialogs/kexportdlg.cpp:65
+msgid "&Export"
+msgstr "&Esporta"
+
+#: dialogs/kexportdlg.cpp:67
+#: dialogs/kimportdlg.cpp:68
+msgid "Start operation"
+msgstr "Inizia operazione"
+
+#: dialogs/kexportdlg.cpp:68
+msgid "Use this to start the export operation"
+msgstr "Premi qui per iniziare l'esportazione"
+
+#: dialogs/kexportdlg.cpp:71
+#: dialogs/kimportdlg.cpp:72
+msgid "&Browse..."
+msgstr "&Sfoglia..."
+
+#: dialogs/kexportdlg.cpp:73
+#: dialogs/kimportdlg.cpp:74
+msgid "Select filename"
+msgstr "Seleziona il nome del file"
+
+#: dialogs/kexportdlg.cpp:74
+#: dialogs/kimportdlg.cpp:75
+msgid "Use this to select a filename to export to"
+msgstr "Premi qui per selezionare il nome del file in cui esportare"
+
+#: dialogs/kexportdlg.cpp:77
+#: dialogs/kimportdlg.cpp:78
+#: dialogs/settings/ksettingsonlinequotes.cpp:64
+#: widgets/kmymoneyonlinequoteconfig.cpp:64
+msgid "&New..."
+msgstr "&Nuovo..."
+
+#: dialogs/kexportdlg.cpp:79
+#: dialogs/kimportdlg.cpp:80
+#: dialogs/mymoneyqifprofileeditor.cpp:96
+msgid "Create a new profile"
+msgstr "Crea nuovo profilo"
+
+#: dialogs/kexportdlg.cpp:80
+#: dialogs/kimportdlg.cpp:81
+msgid "Use this to open the profile editor"
+msgstr "Premi qui per aprire l'editor del profilo"
+
+#: dialogs/keditloanwizard.cpp:56
+msgid "Edit loan wizard"
+msgstr "Modifica procedura guidata del prestito"
+
+#: dialogs/keditloanwizard.cpp:58
+msgid "Please enter the date from which on the following changes will be effective. The date entered must be later than the opening date of this account (%1), but must not be in the future. The default will be today."
+msgstr "Inserire la data da cui i cambiamenti elencati diverranno effettivi. La data inserita deve essere successiva alla data d'apertura di questo conto (%1), ma non deve essere futura. Il valore predefinito è la data odierna."
+
+#: dialogs/keditloanwizard.cpp:76
+msgid "Note: you will not be able to modify this account today, because the opening date \"%1\" is in the future. Please revisit this dialog when the time has come."
+msgstr "Nota: potresti non poter modificare questo conto oggi, perché la data d'apertura \"%1\" è futura. Visitare questa sezione quando sarà il momento."
+
+#: dialogs/keditloanwizard.cpp:244
+msgid "Your previous selection was \"%1\". If you select another option, KMyMoney will dismiss the changes you have just entered. Do you wish to proceed?"
+msgstr "La tua selezione precedente era \"%1\". Se selezioni un'altra opzione, KMyMoney annullerà le modifiche che hai appena inserito. Continuare?"
+
+#: dialogs/kcategoryreassigndlg.cpp:81
+msgid "At least one transaction/schedule still references the category <b>%1</b>. However, at least one category with the same currency must exist so that the transactions/schedules can be reassigned."
+msgstr "Almeno una transazione/pianificazione fa ancora riferimento alla categoria <b>%1</b>. Tuttavia, almeno una categoria con la stessa valuta deve esistere in modo che le transazioni/pianificazioni possano essere riassegnate."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid "This dialog does not allow to create new categories. Please pick a category from the list."
+msgstr "Questa finestra non consente di creare nuove categorie. Seleziona una categoria dall'elenco."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid "Category creation"
+msgstr "Creazione categoria"
+
+#: dialogs/kbackupdlg.cpp:61
+msgid "C&hoose..."
+msgstr "&Scegli..."
+
+#: dialogs/kbackupdlg.cpp:63
+msgid "Select mount point"
+msgstr "Seleziona il punto di montaggio"
+
+#: dialogs/kbackupdlg.cpp:64
+msgid "Use this to browse to the mount point."
+msgstr "Premi qui per navigare il punto di montaggio."
+
+#: dialogs/keditscheduledlg.cpp:293
+msgid "Next due date"
+msgstr "Prossima data di scadenza"
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid "You have turned on the GPG encryption support. This means, that new files will be stored encrypted. Existing files will not be encrypted automatically. To achieve encryption of existing files, please use the <b>File/Save as...</b> feature and store the file under a different name. Once confident with the result, feel free to delete the old file and rename the encrypted one to the old name."
+msgstr "Hai attivato il supporto alla cifratura GPG. Ciò significa che i nuovi file salvati saranno cifrati. I file esistenti non saranno cifrati automaticamente. Per ottenere la cifratura dei file esistenti, utilizza la funzione <b>File/Salva come...</b> e salva il file con un altro nome. Dopo aver verificato il risultato, puoi eliminare il vecchio file e rinominare quello cifrato con il nome originale."
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid "GPG encryption activated"
+msgstr "Cifratura GPG attivata"
+
+#: dialogs/settings/ksettingshome.cpp:51
+msgid "&Up"
+msgstr "&Su"
+
+#: dialogs/settings/ksettingshome.cpp:53
+msgid "Move selected item up"
+msgstr "Sposta elemento selezionato in alto"
+
+#: dialogs/settings/ksettingshome.cpp:54
+msgid "Use this to move the selected item up by one position in the list."
+msgstr "Usalo per spostare l'elemento selezionato in alto di una posizione nella lista."
+
+#: dialogs/settings/ksettingshome.cpp:55
+msgid "&Down"
+msgstr "&Giù"
+
+#: dialogs/settings/ksettingshome.cpp:57
+msgid "Move selected item down"
+msgstr "Sposta elemento selezionato in basso"
+
+#: dialogs/settings/ksettingshome.cpp:58
+msgid "Use this to move the selected item down by one position in the list."
+msgstr "Usalo per spostare l'elemento selezionato in basso di una posizione nella lista."
+
+#: dialogs/settings/rc.cpp:1
+msgid "Color settings"
+msgstr "Impostazioni colori"
+
+#: dialogs/settings/rc.cpp:2
+msgid "Foreground"
+msgstr "Primo piano"
+
+#: dialogs/settings/rc.cpp:3
+msgid "Text colors"
+msgstr "Colori del testo"
+
+#: dialogs/settings/rc.cpp:4
+msgid "Grid color"
+msgstr "Colore della griglia"
+
+#: dialogs/settings/rc.cpp:5
+msgid "Erronous transaction"
+msgstr "Transazione non valida"
+
+#: dialogs/settings/rc.cpp:6
+msgid "Value with missing conversion rate"
+msgstr "Valore con tasso di conversione mancante"
+
+#: dialogs/settings/rc.cpp:7
+msgid "Negative value"
+msgstr "Valore negativo"
+
+#: dialogs/settings/rc.cpp:8
+msgid "Background"
+msgstr "Sfondo"
+
+#: dialogs/settings/rc.cpp:10
+msgid "List background colors"
+msgstr "Elenca i colori di sfondo"
+
+#: dialogs/settings/rc.cpp:11
+msgid "Normal"
+msgstr "Normale"
+
+#: dialogs/settings/rc.cpp:12
+msgid "Alternate"
+msgstr "Alternativo"
+
+#: dialogs/settings/rc.cpp:13
+msgid "Special background colors"
+msgstr "Colori di sfondo speciali"
+
+#: dialogs/settings/rc.cpp:14
+msgid "Ledger group separator"
+msgstr "Separatore gruppi del libro mastro"
+
+#: dialogs/settings/rc.cpp:15
+msgid "Required field"
+msgstr "Campo richiesto"
+
+#: dialogs/settings/rc.cpp:16
+msgid "Imported transaction"
+msgstr "Transazione importata"
+
+#: dialogs/settings/rc.cpp:17
+msgid "Matched transaction"
+msgstr "Transazione corrispondente"
+
+#: dialogs/settings/rc.cpp:18
+msgid "Font settings"
+msgstr "Opzioni caratteri"
+
+#: dialogs/settings/rc.cpp:19
+msgid "Use system fonts"
+msgstr "Usa i font di sistema"
+
+#: dialogs/settings/rc.cpp:20
+msgid "Individual font settings"
+msgstr "Impostazioni caratteri individuali"
+
+#: dialogs/settings/rc.cpp:24
+msgid "Number of Days of Account Cycle:"
+msgstr "Numero di giorni del ciclo di conto:"
+
+#: dialogs/settings/rc.cpp:26
+msgid "Number of Days to Forecast:"
+msgstr "Numero di giorni da prevedere:"
+
+#: dialogs/settings/rc.cpp:27
+msgid "Forecast Method"
+msgstr "Metodo di previsione"
+
+#: dialogs/settings/rc.cpp:28
+msgid "Scheduled and Future Transactions"
+msgstr "Transazioni pianificate e future"
+
+#: dialogs/settings/rc.cpp:29
+msgid "History-based"
+msgstr "Basata sullo storico"
+
+#: dialogs/settings/rc.cpp:30
+msgid "History-based settings"
+msgstr "Impostazioni basate sullo storico"
+
+#: dialogs/settings/rc.cpp:31
+msgid "Number of Cycles to use in Forecast:"
+msgstr "Numero di cicli da utilizzare nella previsione:"
+
+#: dialogs/settings/rc.cpp:36
+msgid "General Settings"
+msgstr "Impostazioni generali"
+
+#: dialogs/settings/rc.cpp:37
+msgid "Global"
+msgstr "Globale"
+
+#: dialogs/settings/rc.cpp:38
+msgid "Startup page options"
+msgstr "Opzioni della pagina iniziale"
+
+#: dialogs/settings/rc.cpp:39
+msgid "Start with homepage"
+msgstr "Inizia con la pagina principale"
+
+#: dialogs/settings/rc.cpp:40
+msgid "Start with last selected view"
+msgstr "Inizia con l'ultima vista selezionata"
+
+#: dialogs/settings/rc.cpp:41
+msgid "Precision settings"
+msgstr "Impostazioni di precisione"
+
+#: dialogs/settings/rc.cpp:42
+msgid "Price precision"
+msgstr "Precisione del prezzo"
+
+#: dialogs/settings/rc.cpp:43
+msgid "digits"
+msgstr "cifre"
+
+#: dialogs/settings/rc.cpp:44
+msgid "Autosave options"
+msgstr "Opzioni salvataggio automatico"
+
+#: dialogs/settings/rc.cpp:45
+msgid "Autosave periodically"
+msgstr "Salvataggio automatico periodico"
+
+#: dialogs/settings/rc.cpp:46
+msgid "minutes"
+msgstr "minuti"
+
+#: dialogs/settings/rc.cpp:47
+msgid "Fiscal Year"
+msgstr "Anno fiscale"
+
+#: dialogs/settings/rc.cpp:48
+msgid "Your fiscal year starts on"
+msgstr "Il tuo anno fiscale inizia in"
+
+#: dialogs/settings/rc.cpp:49
+msgid "January"
+msgstr "Gennaio"
+
+#: dialogs/settings/rc.cpp:50
+msgid "February"
+msgstr "Febbraio"
+
+#: dialogs/settings/rc.cpp:51
+msgid "March"
+msgstr "Marzo"
+
+#: dialogs/settings/rc.cpp:52
+msgid "April"
+msgstr "Aprile"
+
+#: dialogs/settings/rc.cpp:53
+msgid "May"
+msgstr "Maggio"
+
+#: dialogs/settings/rc.cpp:54
+msgid "June"
+msgstr "Giugno"
+
+#: dialogs/settings/rc.cpp:55
+msgid "July"
+msgstr "Luglio"
+
+#: dialogs/settings/rc.cpp:56
+msgid "August"
+msgstr "Agosto"
+
+#: dialogs/settings/rc.cpp:57
+msgid "September"
+msgstr "Settembre"
+
+#: dialogs/settings/rc.cpp:58
+msgid "October"
+msgstr "Ottobre"
+
+#: dialogs/settings/rc.cpp:59
+msgid "November"
+msgstr "Novembre"
+
+#: dialogs/settings/rc.cpp:60
+msgid "December"
+msgstr "Dicembre"
+
+#: dialogs/settings/rc.cpp:61
+msgid "Views"
+msgstr "Viste"
+
+#: dialogs/settings/rc.cpp:62
+msgid "Synchronize account selection of ledger and investment view"
+msgstr "Sincronizza la selezione del libro mastro con la vista investimenti"
+
+#: dialogs/settings/rc.cpp:63
+msgid "Check the views you want to enable, uncheck those you want to hide, because you don't need the functionality."
+msgstr "Seleziona le viste che desideri abilitare, deseleziona quelle che vuoi nascondere, perché non hai bisogno di quella funzionalità."
+
+#: dialogs/settings/rc.cpp:64
+msgid "Icon size of navigation bar"
+msgstr "Dimensione icone della barra di navigazione"
+
+#: dialogs/settings/rc.cpp:65
+msgid "Micro (16px)"
+msgstr "Micro (16px)"
+
+#: dialogs/settings/rc.cpp:66
+msgid "Small (32px)"
+msgstr "Piccola (32px)"
+
+#: dialogs/settings/rc.cpp:67
+msgid "Normal (48px)"
+msgstr "Normale (48px)"
+
+#: dialogs/settings/rc.cpp:68
+msgid "Large (64px)"
+msgstr "Grande (64px)"
+
+#: dialogs/settings/rc.cpp:69
+msgid "Show title bar on each page"
+msgstr "Mostra la barra del titolo in ogni pagina"
+
+#: dialogs/rc.cpp:835
+#: dialogs/settings/rc.cpp:70
+msgid "Filter"
+msgstr "Filtro"
+
+#: dialogs/settings/rc.cpp:71
+msgid "Accounts / Categories"
+msgstr "Conti / Categorie"
+
+#: dialogs/settings/rc.cpp:72
+msgid "Don't show unused categories"
+msgstr "Nascondi le categorie non utilizzate"
+
+#: dialogs/settings/rc.cpp:73
+msgid "This option hides all categories in the categories view that are not used in at least a single transaction. They are still shown in the category selection lists."
+msgstr "Questa opzione nasconde tutte le categorie nella vista categorie che non sono usate in almeno una transazione. Le categorie nascoste sono ancora elencate nella lista di selezione categoria."
+
+#: dialogs/settings/rc.cpp:74
+msgid "Don't show closed accounts"
+msgstr "Non mostrare i conti chiusi"
+
+#: dialogs/settings/rc.cpp:75
+msgid ""
+"This option hides all accounts that have been closed by the user in views and selection lists.\n"
+"\n"
+"You can use <b>View/Show all accounts</b> to temporarily show hidden accounts in the views."
+msgstr ""
+"Questa opzione nasconde tutti i conti che sono stati chiusi dall'utente nelle viste e nelle liste di selezione.\n"
+"\n"
+"È possibile utilizzare <b>Visualizza/Mostra tutti i conti</b> per mostrare temporaneamente i conti nascosti nelle viste."
+
+#: dialogs/settings/rc.cpp:76
+msgid "Show equity accounts"
+msgstr "Mostra conti di capitale"
+
+#: dialogs/rc.cpp:332
+#: dialogs/settings/rc.cpp:77
+#: widgets/rc.cpp:160
+msgid "Schedules"
+msgstr "Operazioni pianificate"
+
+#: dialogs/settings/rc.cpp:78
+msgid "Don't show finished schedules"
+msgstr "Non mostrare le pianificazioni completate"
+
+#: dialogs/settings/rc.cpp:79
+msgid "This option hides all finished schedules in the schedules view."
+msgstr "Questa opzione nasconde tutte le pianificazioni finite nella vista pianificazioni."
+
+#: dialogs/settings/rc.cpp:81
+msgid "Don't show transactions prior to"
+msgstr "Non mostrare le transazioni precedenti a"
+
+#: dialogs/settings/rc.cpp:82
+msgid "Don't show reconciled transactions"
+msgstr "Non mostrare le transazioni riconciliate"
+
+#: dialogs/settings/rc.cpp:83
+msgid "This option hides all reconciled transactions in the ledger view."
+msgstr "Questa opzione nasconde tutte le transazioni riconciliate nella vista libro mastro."
+
+#: dialogs/settings/rc.cpp:84
+#: widgets/rc.cpp:22
+msgid "GPG encryption settings"
+msgstr "Impostazioni per la cifratura GPG"
+
+#: dialogs/settings/rc.cpp:85
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Access to the settings is disabled if <b>GPG</b> could not be detected on your system. In this case, please make sure that <b>GPG</b> is working properly for the current user.<p>\n"
+"The <i>additional recovery encryption</i> is only accessible, if the necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is found in your keyring."
+msgstr ""
+"Questa pagina consente di impostare i parametri per il salvataggio cifrato dei tuoi file di dati di <b>KMyMoney</b> tramite <b>GPG</b>.<p>\n"
+"L'accesso alle impostazioni è disabilitato se <b>GPG</b> non è stato trovato sul tuo sistema. In tal caso, assicurati che <b>GPG</b> sia raggiungibile dall'utente corrente.<p>\n"
+"Il <i>recupero supplementare cifratura</i> è disponibile solo se la chiave necessaria per <b>kmymoney-recover@users.sourceforge.net</b> con id 0x8AFDDC8E viene trovata nel portachiavi."
+
+#: dialogs/settings/rc.cpp:86
+#: widgets/rc.cpp:24
+msgid "Use GPG encryption"
+msgstr "Usa cifratura GPG"
+
+#: dialogs/settings/rc.cpp:87
+msgid "GPG encryption"
+msgstr "Cifratura GPG"
+
+#: dialogs/settings/rc.cpp:88
+msgid "Your key"
+msgstr "La tua chiave"
+
+#: dialogs/settings/rc.cpp:89
+msgid "This combo box lists all the secret keys you have in your keyring. Select the one you want to use for encryption when saving to a file."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:90
+msgid "Additonal keys"
+msgstr "Chiavi aggiuntive"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:50
+#: dialogs/settings/rc.cpp:91
+msgid "Enter the id of the key you want to use for data encryption. This can either be an e-mail address or the hexadecimal key id. In case of the key id don't forget the leading 0x."
+msgstr "Inserisci l'id della chiave che vuoi usare per la cifratura dei dati. Questo può essere un indirizzo email o l'id esadecimale della chiave. In quest'ultimo caso non dimenticare lo 0x iniziale."
+
+#: dialogs/settings/rc.cpp:92
+#: widgets/rc.cpp:28
+msgid "This symbol denotes, if the key for the given user id has been found in your keyring. It is green when found, dark otherwise."
+msgstr "Questo simbolo serve per distinguere se la chiave per il dato ID utente è stata trovata nel tuo portachiavi. Se è stata trovata è verde, altrimenti scura."
+
+#: dialogs/kgpgkeyselectiondlg.cpp:61
+#: dialogs/settings/rc.cpp:93
+msgid "Keys for all of the above user ids found"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:94
+#: widgets/rc.cpp:31
+msgid "This symbol denotes, if the KMyMoney recovery key has been found in your keyring. It is green when found, dark otherwise."
+msgstr "Questo simbolo serve per distinguere se la chiave di recupero KMyMoney è stata trovata nel tuo portachiavi. Se è stata trovata è verde, altrimenti scura."
+
+#: dialogs/settings/rc.cpp:95
+msgid "Recover Key available in keyring"
+msgstr "Chiave di recupero disponibile nel portachiavi"
+
+#: dialogs/settings/rc.cpp:96
+msgid "Also encrypt with KMyMoney's recover key"
+msgstr "Cifra anche con la chiave di recupero di KMyMoney"
+
+#: dialogs/settings/rc.cpp:97
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only the core KMyMoney developers are in posession of the respective private key required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and cannot access your data anymore. With this option activated, the KMyMoney developers can decrypt the data and supply you with it in a readable form. Please be prepared, that you have to answer a few detailed questions about the contents of your data before we will send it out.."
+msgstr ""
+"Puoi specificare di cifrare i dati anche con la chiave di recupero KMyMoney. Solo gli sviluppatori principali di KMyMoney sono in possesso delle rispettive chiavi private necessarie per riuscire a tornare a leggere tali dati cifrati.<p>\n"
+"\n"
+"Questo meccanismo è reso disponibile nel caso in cui tu perda la chiave, non riuscendo più ad accedere ai tuoi dati. Attivando questa opzione, gli sviluppatori KMyMoney possono decifrare i dati e fornirteli in una forma leggibile. Preparati, dovrai rispondere ad alcune domande dettagliate sui contenuti dei tuoi dati prima che ti vengano rispediti."
+
+#: dialogs/settings/rc.cpp:98
+msgid "Homepage Settings"
+msgstr "Impostazioni pagina iniziale"
+
+#: dialogs/settings/rc.cpp:99
+msgid "Up"
+msgstr "Su"
+
+#: dialogs/settings/rc.cpp:100
+msgid "Down"
+msgstr "Giù"
+
+#: dialogs/settings/rc.cpp:101
+msgid ""
+"Selected entries are shown on the home page of the application.<p>\n"
+"Use the buttons and checkboxes to customize the layout of the home page."
+msgstr ""
+"Le voci selezionate sono mostrate nella pagina iniziale del programma.<p>\n"
+"Usa i pulsanti e le caselle di controllo per personalizzare la struttura della pagina iniziale."
+
+#: dialogs/settings/rc.cpp:102
+msgid "Homepage/Summary page font scaling"
+msgstr "Ridimensionamento del carattere della pagina principale/sommario"
+
+#: dialogs/settings/rc.cpp:103
+msgid "Percentage of default font size:"
+msgstr "Percentuale della dimensione del carattere predefinito:"
+
+#: dialogs/settings/rc.cpp:104
+msgid "Remember font size when leaving the program if manually changed with mouse-wheel"
+msgstr "Memorizza la dimensione del carattere all'uscita dal programma se modificata manualmente con la rotella del mouse"
+
+#: dialogs/settings/rc.cpp:105
+msgid "Information display"
+msgstr "Visualizzazione informazioni"
+
+#: dialogs/settings/rc.cpp:106
+msgid "Show Account Limit Information"
+msgstr "Mostra informazioni di limite del conto"
+
+#: dialogs/settings/rc.cpp:110
+#: widgets/rc.cpp:47
+msgid "<i>Enter regular expressions which can be used to parse the data returned from the URL entered above. The symbol, price, and date must be found in the quote data to be usable. You may also try the KMyMoney user's mailinglist at <a href=\"mailto:kmymoney2-user@lists.sourceforge.net\">kmymoney2-user@lists.sourceforge.net</a> to find what settings work for other users in your country.</i>"
+msgstr "<i>Inserisci le espressioni regolari che possono essere usate per decodificare i dati restituiti dall'URL sopra inserita. Il simbolo, prezzo e la data devono essere trovati nella quotazione per essere utilizzabile. Puoi anche provare la lista di discussione degli utenti KMyMoney a <a href=\"mailto:kmymoney2-user@lists.sourceforge.net\">kmymoney2-user@lists.sourceforge.net</a> per cercare quali impostazioni funzionano per altri utenti del tuo paese.</i>"
+
+#: dialogs/settings/rc.cpp:113
+#: widgets/rc.cpp:38
+msgid "Regular Expression to extract the symbol from the downloaded data"
+msgstr "Espressione regolare per estrarre il simbolo dai dati scaricati"
+
+#: dialogs/settings/rc.cpp:114
+#: widgets/rc.cpp:39
+msgid "Regular Expression to extract the price from the downloaded data"
+msgstr "Espressione regolare per estrarre il prezzo dai dati scaricati"
+
+#: dialogs/settings/rc.cpp:115
+#: widgets/rc.cpp:41
+msgid "URL to be used to download the quote"
+msgstr "URL da usare per scaricare le quotazioni"
+
+#: dialogs/settings/rc.cpp:116
+#: widgets/rc.cpp:42
+msgid "Enter the URL from which stock quotes will be fetched. <b>%1</b> will be replaced with the symbol for the security being quoted. For currency conversions, <b>%2</b> will be replaced with the currency to be quoted and <b>%1</b> with the currency the quote is based on."
+msgstr "Inserisci l'URL da cui le quotazioni saranno caricate. <b>%1</b> sarà sostituito con il simbolo per lo strumento finanziario in quotazione. Per le conversioni di valuta, <b>%2</b> sarà sostituito con la valuta delle quotazioni e<b>%1</b> con la valuta su cui è basata la quotazione."
+
+#: dialogs/settings/rc.cpp:118
+#: dialogs/settings/rc.cpp:121
+#: widgets/rc.cpp:40
+#: widgets/rc.cpp:44
+msgid "Regular Expression to extract the date from the downloaded data"
+msgstr "Espressione regolare per estrarre la data dai dati scaricati"
+
+#: dialogs/rc.cpp:807
+#: dialogs/settings/rc.cpp:119
+#: widgets/rc.cpp:45
+msgid "Date Format"
+msgstr "Formato data"
+
+#: dialogs/settings/rc.cpp:122
+msgid "Skip HTML stripping"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:123
+msgid ""
+"<p>For easier processing of the data returned by the online source, KMyMoney usually strips unused parts before it is parsed with the regular expressions. If matching of the fields relies on those items, then use this option to turn stripping off.</p>\n"
+"\n"
+"<p>The following items are usually removed by stripping:\n"
+"\n"
+"<ul>\n"
+"<li>HTML tags such as <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded characters such as <b>&amp;nbsp;</b></li>\n"
+"<li>duplicate whitespace</li>\n"
+"</ul>\n"
+"</p>"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:127
+msgid "Register settings"
+msgstr "Impostazioni registro"
+
+#: dialogs/settings/rc.cpp:128
+msgid "Display"
+msgstr "Visualizza"
+
+#: dialogs/settings/rc.cpp:131
+msgid "Using the ledger lens shows the details for the transaction that has focus in the ledger. Usually, when using the transaction form, only a one line summary is displayed for each transaction as the details are shown in the form."
+msgstr "Usando la lente, il libro mastro mostrerà tutti i dettagli della transazione attualmente selezionata. Normalmente il libro mastro mostra una linea per transazione perché i dettagli sono visibili nel modulo sottostante."
+
+#: dialogs/settings/rc.cpp:133
+msgid "Always show a No. field"
+msgstr "Mostra sempre un campo Num."
+
+#: dialogs/settings/rc.cpp:134
+msgid "Show group header between transactions"
+msgstr "Mostra intestazione di gruppo tra le transazioni"
+
+#: dialogs/settings/rc.cpp:135
+msgid "Draws a larger header above each group of transaction. The grouping depends on the current sort order."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:136
+msgid "Show header for the previous and current fiscal year"
+msgstr "Mostra intestazione per il precedente e per l'anno fiscale attuale"
+
+#: dialogs/settings/rc.cpp:137
+msgid "Sorting"
+msgstr "Ordinamento"
+
+#: dialogs/settings/rc.cpp:138
+msgid "Normal view"
+msgstr "Vista normale"
+
+#: dialogs/settings/rc.cpp:139
+msgid "Reconciliation view"
+msgstr "Vista Riconciliazione"
+
+#: dialogs/settings/rc.cpp:140
+msgid "Search view"
+msgstr "Vista di ricerca"
+
+#: dialogs/settings/rc.cpp:141
+msgid "Use the <i>left</i> and <i>right</i> buttons to add and remove sort options. Use the <i>up</i> and <i>down</i> buttons to modify the sort order. Double-Click a selected entry to toggle the sort order between <i>ascending</i> and <i>descending</i>."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:142
+msgid "Data entry"
+msgstr "Inserimento dati"
+
+#: dialogs/settings/rc.cpp:146
+msgid "Use Enter to move between fields"
+msgstr "Usa Invio per spostarti tra i campi"
+
+#: dialogs/settings/rc.cpp:147
+msgid "Match names from start"
+msgstr "Verifica nomi dall'inizio"
+
+#: dialogs/settings/rc.cpp:148
+msgid "Mark this option, if you always want to match names e.g. for payees from the start. If unset, any substring is matched."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:149
+msgid "Default reconciliation state"
+msgstr "Stato di riconciliazione predefinito"
+
+#: dialogs/rc.cpp:227
+#: dialogs/settings/rc.cpp:150
+#: widgets/kmymoneycombo.cpp:348
+#: widgets/registersearchline.cpp:84
+msgid "Not reconciled"
+msgstr "Non riconciliato"
+
+#: dialogs/rc.cpp:228
+#: dialogs/settings/rc.cpp:151
+#: widgets/kmymoneycombo.cpp:347
+#: widgets/registersearchline.cpp:85
+msgid "Cleared"
+msgstr "Compensata"
+
+#: dialogs/settings/rc.cpp:153
+msgid "Default reconciliation state for transactions entered during reconciliation of an account"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:154
+msgid "Autofill"
+msgstr "Completamento automatico"
+
+#: dialogs/settings/rc.cpp:155
+msgid "No Autofill"
+msgstr "No auto riempimento"
+
+#: dialogs/settings/rc.cpp:156
+msgid "Don't do autofill of transaction data at all."
+msgstr "Non completare automaticamente i dati delle transazioni."
+
+#: dialogs/settings/rc.cpp:157
+msgid "Same transaction if amount differs less than"
+msgstr "Stessa transazione se l'ammontare differisce per meno di"
+
+#: dialogs/settings/rc.cpp:158
+msgid ""
+"Collect all transactions for the given payee. Treat all transactions that refer to the same category and have an amount with +/- X % as identical. If more than one transaction is found, a list of them is presented to the user.\n"
+"\n"
+"Selecting 0% will list all transactions."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:159
+msgid "Two transactions are usually treated identical for autofill, if they refer the same accounts. They are treated as different transactions though, when their amount varies by more than the percentage given here."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:160
+msgid ""
+"_: Same transaction if amount differs less than percent.\n"
+"percent."
+msgstr "percento."
+
+#: dialogs/settings/rc.cpp:161
+msgid "with previously most often used transaction for the payee"
+msgstr "con la precedente transazione più utilizzata per il beneficiario"
+
+#: dialogs/settings/rc.cpp:162
+msgid "The data of the last transaction assigned to the category used most often for this payee is autofilled into the transaction editor."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:164
+#, fuzzy
+msgid "Match transactions within days"
+msgstr "Seleziona transazioni senza creditori"
+
+#: dialogs/settings/rc.cpp:165
+msgid "Search for matching transactions within the range of the posting date of the imported transaction +/- the number of given days."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:166
+msgid "Ask for a new payee's default category"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:167
+msgid "Whenever a new payee is detected during import of a statement, the user will be asked to assign a default category for this user when this option is selected."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:168
+msgid "Schedule Settings"
+msgstr "Impostazioni pianificazione"
+
+#: dialogs/settings/rc.cpp:169
+msgid "Startup options"
+msgstr "Opzioni di avvio"
+
+#: dialogs/settings/rc.cpp:170
+msgid "Check schedules on startup"
+msgstr "Controlla le operazioni pianificate all'avvio"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:60
+#: widgets/kmymoneyonlinequoteconfig.cpp:60
+msgid "Delete the selected source entry"
+msgstr "Eliminare la voce sorgente selezionata"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:61
+#: widgets/kmymoneyonlinequoteconfig.cpp:61
+msgid "Use this to delete the selected online source entry"
+msgstr "Premi qui per eliminare la voce del sorgente in linea selezionata"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:66
+#: widgets/kmymoneyonlinequoteconfig.cpp:66
+msgid "Create a new source entry for online quotes"
+msgstr "Crea una nuova voce sorgente per le quotazioni in linea"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:67
+#: widgets/kmymoneyonlinequoteconfig.cpp:67
+msgid "Use this to create a new entry for online quotes"
+msgstr "Premi qui per creare una nuova voce per le quotazioni in linea"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:107
+#: dialogs/settings/ksettingsonlinequotes.cpp:190
+#: dialogs/settings/ksettingsonlinequotes.cpp:193
+#: dialogs/settings/ksettingsonlinequotes.cpp:216
+#: widgets/kmymoneyonlinequoteconfig.cpp:107
+#: widgets/kmymoneyonlinequoteconfig.cpp:185
+#: widgets/kmymoneyonlinequoteconfig.cpp:188
+#: widgets/kmymoneyonlinequoteconfig.cpp:211
+msgid "New Quote Source"
+msgstr "Nuova sorgente quotazioni"
+
+#: dialogs/ksplittransactiondlg.cpp:77
+#: dialogs/rc.cpp:788
+msgid "Clear &All"
+msgstr "Pulisci &tutto"
+
+#: dialogs/ksplittransactiondlg.cpp:79
+msgid "Clear all splits"
+msgstr "Pulisci tutte le suddivisioni"
+
+#: dialogs/ksplittransactiondlg.cpp:80
+msgid "Use this to clear all splits of this transaction"
+msgstr "Premi qui per pulire tutte le suddivisioni di questa transazione"
+
+#: dialogs/ksplittransactiondlg.cpp:84
+msgid "&Merge"
+msgstr "&Unisci"
+
+#: dialogs/ksplittransactiondlg.cpp:183
+msgid "The total amount of this transaction is %1 while the sum of the splits is %2. The remaining %3 are unassigned."
+msgstr "L'importo totale di questa transazione è %1, mentre la somma delle suddivisioni è %2. Il rimanente %3 rimane non assegnato."
+
+#: dialogs/ksplittransactiondlg.cpp:191
+#, c-format
+msgid "Change &total amount of transaction to %1."
+msgstr "Cambia l'impor&to totale della transazione a %1."
+
+#: dialogs/ksplittransactiondlg.cpp:194
+msgid "&Distribute difference of %1 among all splits."
+msgstr "&Distribuisci la differenza di %1 tra tutte le suddivisioni."
+
+#: dialogs/ksplittransactiondlg.cpp:203
+#, c-format
+msgid "&Leave total amount of transaction at %1."
+msgstr "&Lascia l'importo totale della transazione a %1."
+
+#: dialogs/ksplittransactiondlg.cpp:205
+msgid "&Leave %1 unassigned."
+msgstr "&Lascia %1 non assegnato."
+
+#: dialogs/ksplittransactiondlg.cpp:275
+msgid "You are about to delete all splits of this transaction. Do you really want to continue?"
+msgstr "Stai per eliminare tutte le suddivisioni di questa transazione. Vuoi davvero continuare?"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:97
+msgid "Use this to create a new QIF import/export profile"
+msgstr "Premi qui per creare un nuovo profilo di importazione/esportazione QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:148
+#: dialogs/mymoneyqifprofileeditor.cpp:403
+#: dialogs/rc.cpp:797
+msgid "QIF Profile Editor"
+msgstr "Editor del profilo QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:150
+msgid "QIF Profile Selector"
+msgstr "Selezione di profili QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:236
+msgid "The default QIF profile"
+msgstr "Il profilo predefinito QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:404
+#: dialogs/mymoneyqifprofileeditor.cpp:417
+msgid "Enter new profile name"
+msgstr "Inserisci il nome del nuovo profilo"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:436
+msgid "Do you really want to delete profile '%1'?"
+msgstr "Vuoi davvero eliminare il profilo '%1'?"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:38
+msgid "Select additional keys"
+msgstr "Seleziona chiavi aggiuntive"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:48
+#: widgets/rc.cpp:25
+msgid "User identification"
+msgstr "Identificazione utente"
+
+#: dialogs/kendingbalancedlg.cpp:71
+msgid "Please enter the following fields with the information as you find them on your statement. Make sure to enter all values in <b>%1</b>."
+msgstr "Compilare i seguenti campi con le informazioni così come sono stampate sul tuo estratto conto. Assicurati di inserire tutti i valori in <b>%1</b>."
+
+#: dialogs/kendingbalancedlg.cpp:124
+#, c-format
+msgid "Last reconciled statement: %1"
+msgstr "Ultimo estratto conto riconciliato: %1"
+
+#: dialogs/kendingbalancedlg.cpp:437
+#: dialogs/kendingbalancedlg.cpp:577
+#: dialogs/rc.cpp:137
+msgid "Adjustment transaction"
+msgstr "Transazione correttiva"
+
+#: dialogs/kendingbalancedlg.cpp:510
+msgid "KMyMoney has calculated the following amounts for interest and amortization according to recorded payments between %1 and %2."
+msgstr "KMyMoney ha calcolato i seguenti importi per gli interessi e gli ammortamenti, in accordo coi pagamenti registrati tra %1 e %2."
+
+#: dialogs/kbalancechartdlg.cpp:59
+#, c-format
+msgid "Balance of %1"
+msgstr "Saldo di %1"
+
+#: dialogs/kbalancechartdlg.cpp:70
+msgid "%1 Balance History"
+msgstr "Cronologia saldo per %1"
+
+#: dialogs/kmymoneysplittable.cpp:98
+msgid "Split Options"
+msgstr "Opzioni suddivisione"
+
+#: dialogs/kmymoneysplittable.cpp:99
+#: dialogs/rc.cpp:731
+#: widgets/kmymoneypriceview.cpp:149
+msgid "Edit..."
+msgstr "Modifica..."
+
+#: dialogs/kmymoneysplittable.cpp:100
+msgid "Duplicate"
+msgstr "Duplica"
+
+#: dialogs/kmymoneysplittable.cpp:102
+msgid "Delete ..."
+msgstr "Elimina..."
+
+#: dialogs/kmymoneysplittable.cpp:275
+msgid ""
+"_: Duplicate split\n"
+"CTRL+c"
+msgstr "CTRL+c"
+
+#: dialogs/kmymoneysplittable.cpp:562
+msgid "will be calculated"
+msgstr "sarà calcolato"
+
+#: dialogs/kmymoneysplittable.cpp:648
+msgid "You are about to delete the selected split. Do you really want to continue?"
+msgstr "Stai per eliminare la suddivisione selezionata. Vuoi davvero continuare?"
+
+#: dialogs/rc.cpp:1
+msgid "Account selection"
+msgstr "Seleziona conto"
+
+#: dialogs/rc.cpp:3
+msgid "Account to import to"
+msgstr "Conto a cui importare"
+
+#: dialogs/rc.cpp:6
+#: dialogs/rc.cpp:170
+#: widgets/rc.cpp:169
+msgid "Skip"
+msgstr "Salta"
+
+#: dialogs/rc.cpp:8
+msgid ""
+"Use this dialog to backup your data. \n"
+"\n"
+"Please make sure you have a disk inserted and that the drive is ready. Then choose the mount point from either the Choose button or by entering the path in the available box.\n"
+"\n"
+"Click OK to perform the backup. If your system does not use an automounter, make sure you mark the checkbox below to \"mount this directory before backing up.\""
+msgstr ""
+"Usa questa finestra per effettuare il backup dei dati. \n"
+"\n"
+"Assicurati di avere un disco inserito e che il drive sia pronto. Dopodiché seleziona il punto di montaggio premendo il pulsante Scegli o inserendo il percorso nell'apposito campo.\n"
+"\n"
+"Premi OK per effettuare il backup. Se il tuo sistema non usa l'automount, assicurati di aver marcato la casella di selezione seguente a \"monta questa cartella prima di eseguire il backup\"."
+
+#: dialogs/rc.cpp:9
+msgid "Device options"
+msgstr "Opzioni periferica"
+
+#: dialogs/rc.cpp:10
+msgid ""
+"_: This is the mount point\n"
+"Mount Point:"
+msgstr "Punto di mount:"
+
+#: dialogs/rc.cpp:11
+msgid "Choose..."
+msgstr "Scegli..."
+
+#: dialogs/rc.cpp:12
+msgid "Mount this directory before backing up."
+msgstr "Monta questa cartella prima di effettuare il backup."
+
+#: dialogs/rc.cpp:15
+msgid "Reassign categories"
+msgstr "Riassegna categorie"
+
+#: dialogs/rc.cpp:16
+#, fuzzy
+msgid "The transactions, schedules and budgets associated with the selected category need to be re-assigned to a different category before the selected category can be deleted. Please select a category from the list below."
+msgstr "Le transazioni associate ai beneficiari selezionati devono essere riassegnate ad un altro beneficiario prima che i beneficiari selezionati possano essere eliminati. Seleziona un beneficiario dall'elenco seguente."
+
+#: dialogs/rc.cpp:17
+msgid "Available categories:"
+msgstr "Categorie disponibili:"
+
+#: dialogs/rc.cpp:21
+msgid ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Scegliere il tipo di importazione da effettuare. Una descrizione\n"
+"dei diversi tipi di importazione è disponibile alla base dello schermo e viene aggiornata\n"
+"quando si seleziona una voce dalla casella corrispondente.\n"
+"\n"
+"Una volta scelto il tipo di importazione premi il pulsante OK."
+
+#: dialogs/rc.cpp:23
+msgid "QIF"
+msgstr "QIF"
+
+#: dialogs/rc.cpp:24
+msgid "CSV"
+msgstr "CSV"
+
+#: dialogs/rc.cpp:25
+msgid "Some descripton"
+msgstr "Qualche descrizione"
+
+#: dialogs/rc.cpp:28
+msgid "Confirm Manual Enter"
+msgstr "Inserisci con conferma manuale"
+
+#: dialogs/rc.cpp:29
+msgid "The following changes have been made to the transaction data:"
+msgstr "I seguenti cambiamenti sono stati fatti ai dati della transazione:"
+
+#: dialogs/rc.cpp:30
+msgid "Please choose what you wish to do with the above changes"
+msgstr "Scegliere cosa fare con i cambiamenti sottostanti"
+
+#: dialogs/rc.cpp:31
+msgid "Discard the changes and enter the original transaction into the register."
+msgstr "Annulla i cambiamenti e inserisci la transazione originale nel registro."
+
+#: dialogs/rc.cpp:32
+msgid "Enter these new values this one time, for this occurence only."
+msgstr "Inserisci i nuovi valori questa volta, e solo per questa istanza."
+
+#: dialogs/rc.cpp:33
+msgid "Set all further occurences in this schedule to be these values."
+msgstr "Seleziona tutte le occorrenze in questa procedura guidata per avere questi valori."
+
+#: dialogs/rc.cpp:36
+msgid "CSV Dialog"
+msgstr "Finestra CSV"
+
+#: dialogs/rc.cpp:37
+msgid ""
+"CSV Dialog. Choose a file and then click on Run. You can view your progress at\n"
+"the bottom of the screen.\n"
+"\n"
+"You can cancel the process at any time by clicking on the Cancel button."
+msgstr ""
+"Finestra CSV. Scegli un file e fai clic su Vai. Potrai vedere lo stato di avanzamento\n"
+"alla base dello schermo.\n"
+"\n"
+"Potrai annullare il processo in qualsiasi momento facendo clic sul pulsante Annulla."
+
+#: dialogs/rc.cpp:38
+msgid "Choose the csv file:"
+msgstr "Scegli il file CSV:"
+
+#: dialogs/rc.cpp:39
+msgid "Browse"
+msgstr "Sfoglia"
+
+#: dialogs/rc.cpp:40
+msgid "Between These Dates"
+msgstr "Fra queste date"
+
+#: dialogs/rc.cpp:41
+#: dialogs/rc.cpp:196
+msgid "Start on:"
+msgstr "Inizio il:"
+
+#: dialogs/rc.cpp:42
+#: dialogs/rc.cpp:195
+msgid "End on:"
+msgstr "Fine il:"
+
+#: dialogs/rc.cpp:43
+msgid "Run"
+msgstr "Esegui"
+
+#: dialogs/rc.cpp:44
+msgid "Progress Info"
+msgstr "Stato di avanzamento"
+
+#: dialogs/rc.cpp:45
+msgid "Processing Account:"
+msgstr "Conto in elaborazione:"
+
+#: dialogs/rc.cpp:47
+msgid "Processing Transaction:"
+msgstr "Transazione in elaborazione:"
+
+#: dialogs/rc.cpp:48
+msgid "0 of 0"
+msgstr "0 di 0"
+
+#: dialogs/rc.cpp:50
+msgid "Exchange Rate/Price Editor"
+msgstr "Editor del tasso di cambio/prezzo"
+
+#: dialogs/rc.cpp:55
+msgid "Convert from"
+msgstr "Converti da"
+
+#: dialogs/rc.cpp:58
+msgid "Convert to"
+msgstr "Converti in"
+
+#: dialogs/rc.cpp:61
+msgid "To amount"
+msgstr "All'ammontare"
+
+#: dialogs/rc.cpp:62
+msgid "Exchange rate / Price"
+msgstr "Tasso di cambio / Prezzo"
+
+#: dialogs/rc.cpp:64
+msgid ""
+"xx\n"
+"xx"
+msgstr ""
+"xx\n"
+"xx"
+
+#: dialogs/rc.cpp:68
+msgid "Currencies"
+msgstr "Valute"
+
+#: dialogs/rc.cpp:72
+msgid "real ID"
+msgstr "ID reale"
+
+#: dialogs/rc.cpp:73
+#: dialogs/rc.cpp:722
+msgid "ID"
+msgstr "ID"
+
+#: dialogs/rc.cpp:74
+msgid "X"
+msgstr "X"
+
+#: dialogs/rc.cpp:76
+#: dialogs/rc.cpp:459
+msgid "Online Source"
+msgstr "Fonte in linea"
+
+#: dialogs/rc.cpp:78
+#: dialogs/rc.cpp:278
+#: dialogs/rc.cpp:312
+#: dialogs/rc.cpp:684
+msgid "F1"
+msgstr "F1"
+
+#: dialogs/rc.cpp:80
+msgid "If this button is not activated, select the base currency first."
+msgstr "Se questo pulsante non è attivo, occorre selezionare la valuta di base."
+
+#: dialogs/rc.cpp:81
+msgid "Press this button to close the dialog. If the button is not activated, select your base currency."
+msgstr "Premi questo pulsante per chiudere la finestra. Se il pulsante non è attivo, seleziona la valuta di base."
+
+#: dialogs/rc.cpp:82
+msgid "Edit Equity"
+msgstr "Modifica quota di capitale"
+
+#: dialogs/rc.cpp:86
+#: dialogs/rc.cpp:410
+msgid "Smallest fraction:"
+msgstr "Frazione minima:"
+
+#: dialogs/rc.cpp:87
+#: dialogs/rc.cpp:408
+#: dialogs/rc.cpp:440
+msgid "1 /"
+msgstr "1 /"
+
+#: dialogs/rc.cpp:88
+#: dialogs/rc.cpp:405
+msgid "Investment Type:"
+msgstr "Tipo d'investimento:"
+
+#: dialogs/rc.cpp:89
+#: dialogs/rc.cpp:404
+msgid "Equity Name:"
+msgstr "Nome della quota di capitale:"
+
+#: dialogs/rc.cpp:90
+#: dialogs/rc.cpp:409
+msgid "Market Symbol:"
+msgstr "Simbolo del mercato:"
+
+#: dialogs/rc.cpp:91
+msgid "Price History"
+msgstr "Storico del prezzo"
+
+#: dialogs/rc.cpp:97
+msgid "Edit Scheduled transaction"
+msgstr "Modifica transazione pianificata"
+
+#: dialogs/rc.cpp:98
+msgid "Schedule name:"
+msgstr "Nome pianificazione:"
+
+#: dialogs/rc.cpp:99
+msgid "Frequency:"
+msgstr "Frequenza:"
+
+#: dialogs/rc.cpp:100
+msgid "Number of selected periods between entries"
+msgstr "Numero di periodi selezionati tra inserimenti"
+
+#: dialogs/rc.cpp:101
+msgid "Payment information"
+msgstr "Informazioni sul pagamento"
+
+#: dialogs/rc.cpp:105
+#: dialogs/rc.cpp:160
+#: dialogs/rc.cpp:247
+#: dialogs/rc.cpp:752
+#: widgets/register.cpp:569
+msgid "C"
+msgstr "C"
+
+#: dialogs/rc.cpp:113
+msgid "Do nothing"
+msgstr "Non fare niente"
+
+#: dialogs/rc.cpp:116
+msgid "If this schedule occurs on the weekend:"
+msgstr "Se la pianificazione avviene durante il fine settimana:"
+
+#: dialogs/rc.cpp:117
+msgid "The amount is an estimate because it varies for each payment"
+msgstr "La somma è una stima poiché varia per ogni pagamento"
+
+#: dialogs/rc.cpp:118
+msgid "Enter this schedule into the register automatically when it is due"
+msgstr "Inserisci questa pianificazione nel registro automaticamente alla scadenza"
+
+#: dialogs/rc.cpp:119
+msgid "This schedule will end at some time"
+msgstr "Questa pianificazione terminerà in un altro momento"
+
+#: dialogs/rc.cpp:120
+msgid "Number of transactions remaining:"
+msgstr "Numero di transazioni rimaste:"
+
+#: dialogs/rc.cpp:121
+msgid "Date of final transaction:"
+msgstr "Data della transazione finale:"
+
+#: dialogs/rc.cpp:125
+msgid "Reconciliation Wizard"
+msgstr "Procedura guidata di riconciliazione"
+
+#: dialogs/rc.cpp:127
+msgid ""
+"Reconciling your account assures, that your recordings match those of your institution and that there are no mistakes on either side. You should reconcile your account whenever you receive a statement from your institution.\n"
+"\n"
+"All relevant information necessary for this process is usually printed on your statement.\n"
+"\n"
+"On the next page you will verify, that the starting and ending balance are matching those on your statement. If not, please modify the figures."
+msgstr ""
+"Riconciliare i tuoi conti assicura che i tuoi registri corrispondano ai dati della tua banca e che non ci siano errori da entrambe le parti. Dovresti riconciliare i tuoi conti ogni volta che ricevi un estratto dalla tua banca.\n"
+"\n"
+"Tutte le informazioni più importanti necessarie per questo processo sono di solito stampate sul tuo estratto.\n"
+"\n"
+"Nella prossima pagina verificherai che il saldo iniziale e finale coincidano con quelli del tuo estratto. Nel caso in cui non coincidano, modificare gli importi."
+
+#: dialogs/rc.cpp:129
+msgid ""
+"KMyMoney calculates your loan payments automatically. The amounts can deviate from those calculated by the creditor. Therefore, you possibly have to adjust amortization, interest and other costs according to your statement.\n"
+"\n"
+"Please enter the following information found on your statement:"
+msgstr ""
+"KMyMoney calcola i pagamenti del tuo mutuo automaticamente. Gli importi possono essere diversi rispetto a quelli calcolati dai creditori. Quindi, è possibile che tu debba modificare gli ammortamenti, gli interessi e gli altri costi in relazione al tuo estratto.\n"
+"\n"
+"Inserisci le informazioni relative al tuo estratto conto:"
+
+#: dialogs/rc.cpp:130
+msgid "Ending date of statement"
+msgstr "Data finale dell'estratto conto"
+
+#: dialogs/rc.cpp:131
+msgid "Starting date of statement"
+msgstr "Data iniziale dell'estratto conto"
+
+#: dialogs/rc.cpp:132
+msgid "Verify payments"
+msgstr "Verifica pagamenti"
+
+#: dialogs/rc.cpp:133
+#: dialogs/rc.cpp:148
+#: dialogs/rc.cpp:476
+#: dialogs/rc.cpp:477
+#: dialogs/rc.cpp:508
+#: dialogs/rc.cpp:513
+#: dialogs/rc.cpp:518
+#: dialogs/rc.cpp:532
+#: dialogs/rc.cpp:539
+#: dialogs/rc.cpp:540
+#: dialogs/rc.cpp:541
+#: dialogs/rc.cpp:542
+#: dialogs/rc.cpp:543
+#: dialogs/rc.cpp:552
+#: dialogs/rc.cpp:553
+#: dialogs/rc.cpp:554
+#: dialogs/rc.cpp:555
+#: dialogs/rc.cpp:556
+#: dialogs/rc.cpp:565
+#: dialogs/rc.cpp:566
+#: dialogs/rc.cpp:567
+#: dialogs/rc.cpp:568
+#: dialogs/rc.cpp:569
+#: dialogs/rc.cpp:578
+#: dialogs/rc.cpp:579
+#: dialogs/rc.cpp:580
+#: dialogs/rc.cpp:581
+#: dialogs/rc.cpp:582
+#: dialogs/rc.cpp:591
+#: dialogs/rc.cpp:592
+#: dialogs/rc.cpp:593
+#: dialogs/rc.cpp:594
+#: dialogs/rc.cpp:595
+#: dialogs/rc.cpp:603
+#: dialogs/rc.cpp:604
+#: dialogs/rc.cpp:605
+#: dialogs/rc.cpp:606
+#: dialogs/rc.cpp:607
+#: dialogs/rc.cpp:618
+#: dialogs/rc.cpp:619
+#: dialogs/rc.cpp:621
+#: dialogs/rc.cpp:636
+#: dialogs/rc.cpp:637
+#: dialogs/rc.cpp:638
+#: dialogs/rc.cpp:639
+#: dialogs/rc.cpp:640
+#: dialogs/rc.cpp:641
+#: dialogs/rc.cpp:651
+#: dialogs/rc.cpp:652
+#: dialogs/rc.cpp:654
+#: dialogs/rc.cpp:657
+#: dialogs/rc.cpp:658
+#: dialogs/rc.cpp:659
+#: dialogs/rc.cpp:664
+#: dialogs/rc.cpp:665
+#: dialogs/rc.cpp:668
+#: dialogs/rc.cpp:670
+#: dialogs/rc.cpp:672
+#: dialogs/rc.cpp:674
+#: dialogs/rc.cpp:676
+#: dialogs/rc.cpp:678
+#: dialogs/rc.cpp:681
+#: dialogs/rc.cpp:823
+#: widgets/rc.cpp:167
+msgid "1"
+msgstr "1"
+
+#: dialogs/rc.cpp:136
+msgid "If your statement shows different amounts, please cancel this dialog and correct the false transactions or correct the values in this dialog. In the later case, KMyMoney will create an adjustment transaction and add it to the ledger."
+msgstr "Se il tuo estratto conto mostra importi differenti, chiudi questa finestra e correggi le transazioni sbagliate, oppure correggile in questa finestra. In quest'ultimo caso, KMyMoney creerà una transazione correttiva e la aggiungerà al libro mastro."
+
+#: dialogs/rc.cpp:138
+msgid "In order to create the adjustment transaction, KMyMoney requires an account and possibly an interest category to assign the differences to. Please select an account and - if necessary - a category."
+msgstr "Per creare la transazione correttiva, KMyMoney richiede un conto e possibilmente una categoria di interessi a cui assegnare le differenze. Selezionare un conto e - se necessario - una categoria."
+
+#: dialogs/rc.cpp:140
+msgid "Interest-Category"
+msgstr "Categoria di interesse"
+
+#: dialogs/rc.cpp:141
+msgid "Restarting postponed reconciliation"
+msgstr "Ricomincia riconciliazione posticipata"
+
+#: dialogs/rc.cpp:142
+msgid ""
+"You have previously postponed the reconciliation of this account. If you have entered charges or interests the last time you started reconciling this account you can modify these in the ledger later on.\n"
+"\n"
+"It is important, that you continue with the same statement you used when you postponed the reconciliation.\n"
+"\n"
+"All information you have entered into this wizard will be shown and all transactions that you already cleared are marked with a 'C'."
+msgstr ""
+"La riconciliazione di questo conto è stata precedentemente rinviata. Se sono state inserite spese o interessi l'ultima volta che hai iniziato la riconciliazione di questo conto potrai modificarli più tardi sul libro mastro.\n"
+"\n"
+"È importante continuare con lo stesso estratto conto che hai usato quando hai posticipato la riconciliazione.\n"
+"\n"
+"Tutte le informazioni che hai inserito in questa procedura guidata saranno mostrate e tutte le transazioni che hai già compensato saranno segnate con una 'C'."
+
+#: dialogs/rc.cpp:143
+msgid "Statement Information"
+msgstr "Informazioni sull'estratto conto"
+
+#: dialogs/rc.cpp:144
+#: dialogs/rc.cpp:315
+#: dialogs/rc.cpp:317
+#: dialogs/rc.cpp:320
+#: dialogs/rc.cpp:321
+#: dialogs/rc.cpp:329
+#: dialogs/rc.cpp:330
+#: dialogs/rc.cpp:333
+#: dialogs/rc.cpp:334
+#: dialogs/rc.cpp:335
+#: dialogs/rc.cpp:336
+#: dialogs/rc.cpp:366
+msgid "x"
+msgstr "x"
+
+#: dialogs/rc.cpp:145
+msgid "Statement date:"
+msgstr "Data estratto conto:"
+
+#: dialogs/rc.cpp:146
+msgid "Starting balance of this statement:"
+msgstr "Saldo iniziale di questo estratto conto:"
+
+#: dialogs/rc.cpp:147
+msgid "Ending balance of this statement:"
+msgstr "Saldo finale di questo estratto conto:"
+
+#: dialogs/rc.cpp:149
+msgid "Interest / Charges"
+msgstr "Interessi / Spese"
+
+#: dialogs/rc.cpp:150
+msgid "If necessary, enter information about interest or charges here. KMyMoney will create transactions and clear them directly for you."
+msgstr "Se necessario, inserisci qui le informazioni relative agli interessi o alle spese. KMyMoney creerà le transazioni e le compenserà al posto tuo."
+
+#: dialogs/rc.cpp:153
+msgid "Charges"
+msgstr "Spese"
+
+#: dialogs/rc.cpp:154
+msgid "Enter Schedule"
+msgstr "Inserisci pianificazione"
+
+#: dialogs/rc.cpp:155
+msgid "Schedule Details"
+msgstr "Dettagli della pianificazione"
+
+#: dialogs/rc.cpp:156
+#: dialogs/rc.cpp:348
+#: dialogs/rc.cpp:389
+#: widgets/rc.cpp:164
+msgid "Name:"
+msgstr "Nome:"
+
+#: dialogs/rc.cpp:157
+#: dialogs/rc.cpp:351
+#: widgets/rc.cpp:165
+msgid "Type:"
+msgstr "Tipo:"
+
+#: dialogs/rc.cpp:168
+msgid "Enter"
+msgstr "Inserisci"
+
+#: dialogs/rc.cpp:169
+msgid "Enter the transaction and advance the next due date of this schedule to the next payment date."
+msgstr ""
+
+#: dialogs/rc.cpp:171
+msgid "Do not enter the transaction but advance the next due date of this schedule to the next payment date."
+msgstr ""
+
+#: dialogs/rc.cpp:172
+msgid "Ignore"
+msgstr "Ignora"
+
+#: dialogs/rc.cpp:173
+msgid "Do not enter or skip payments for this schedule but continue with the next schedule."
+msgstr ""
+
+#: dialogs/rc.cpp:175
+msgid "Cancel processing of schedule entry."
+msgstr "Annulla l'elaborazione della voce di pianificazione."
+
+#: dialogs/rc.cpp:176
+msgid "Update Stock and Currency Prices"
+msgstr "Aggiorna i prezzi di azioni e valute"
+
+#: dialogs/rc.cpp:177
+msgid "List of known Equities, and the date they were last updated on."
+msgstr "Lista delle quote di capitale conosciute, e l'ultima data in cui sono state aggiornate."
+
+#: dialogs/rc.cpp:179
+msgid "Update All"
+msgstr "Aggiorna tutti"
+
+#: dialogs/rc.cpp:180
+msgid "Update Selected"
+msgstr "Aggiorna i selezionati"
+
+#: dialogs/rc.cpp:181
+msgid "Status:"
+msgstr "Stato:"
+
+#: dialogs/rc.cpp:184
+msgid "QIF Export"
+msgstr "Esportazione QIF"
+
+#: dialogs/rc.cpp:185
+msgid ""
+"From this dialog you are able to export transactions to a quicken compatible file, (known as a QIF file, because of the extension). Please enter the path to the QIF file or select it by clicking on the Browse button.\n"
+"\n"
+"You can choose the file's path, the account and the format of the QIF file (profile). Choose Account to export all the transactions between the specified dates or just categories. You can also limit the transactions that are exported by start and ending date. Once you have pressed the Export button a message box will appear when the export has completed detailing how many transactions, categories and payees were exported."
+msgstr ""
+"Da questa finestra potrai esportare le transazioni in un formato compatibile con Quicken (conosciuto come file QIF, a causa dell'estensione). Inserire il percorso al file QIF, o selezionarlo facendo clic sul pulsante Sfoglia.\n"
+"\n"
+"Puoi scegliere il percorso del file, il conto e il formato del file QIF (profilo) Scegli conto per esportare tutte le transazioni comprese tra le date specificate, o solo le categorie. Puoi anche limitare le transazioni da esportare inserendo una data d'inizio e una di fine. Una volta premuto il pusante Esporta apparirà un messaggio (ad esportazione completata) che riassumerà quante transazioni, categorie e creditori sono stati esportati."
+
+#: dialogs/rc.cpp:186
+msgid "File to export to:"
+msgstr "File dove esportare:"
+
+#: dialogs/rc.cpp:188
+msgid "Account to export"
+msgstr "Conto da esportare"
+
+#: dialogs/rc.cpp:189
+#: dialogs/rc.cpp:297
+msgid "QIF Profile"
+msgstr "Profilo QIF"
+
+#: dialogs/rc.cpp:190
+#: dialogs/rc.cpp:298
+#: dialogs/rc.cpp:362
+#: widgets/kmymoneypriceview.cpp:145
+msgid "New..."
+msgstr "Nuovo..."
+
+#: dialogs/rc.cpp:191
+msgid "Contents to Export"
+msgstr "Contenuti da esportare"
+
+#: dialogs/rc.cpp:194
+msgid "Date Range"
+msgstr "Intervallo di date"
+
+#: dialogs/rc.cpp:199
+msgid "Search transactions"
+msgstr "Ricerca transazioni"
+
+#: dialogs/rc.cpp:200
+msgid "Criteria"
+msgstr "Criteri"
+
+#: dialogs/rc.cpp:201
+msgid "Define your search criteria"
+msgstr "Definisci i criteri di ricerca"
+
+#: dialogs/kfindtransactiondlg.cpp:169
+#: dialogs/rc.cpp:202
+msgid "Text"
+msgstr "Testo"
+
+#: dialogs/rc.cpp:203
+msgid "Contains"
+msgstr "Contiene"
+
+#: dialogs/rc.cpp:204
+msgid "Does not contain"
+msgstr "Non contiene"
+
+#: dialogs/rc.cpp:205
+msgid "Treat text as regular expression"
+msgstr "Tratta il testo come un'espressione regolare"
+
+#: dialogs/rc.cpp:206
+msgid "Case sensitive"
+msgstr "Maiuscole/Minuscole"
+
+#: dialogs/rc.cpp:209
+msgid "Range"
+msgstr "Intervallo"
+
+#: dialogs/rc.cpp:210
+msgid ""
+"_: To (Date)\n"
+"To"
+msgstr "A"
+
+#: dialogs/rc.cpp:211
+msgid ""
+"_: From (Date)\n"
+"From"
+msgstr "Da"
+
+#: dialogs/rc.cpp:213
+msgid "Search this amount"
+msgstr "Ricerca questo importo"
+
+#: dialogs/rc.cpp:214
+msgid "Search amount in the range"
+msgstr "Ricerca l'importo nell'intervallo"
+
+#: dialogs/rc.cpp:215
+msgid ""
+"_: to (amount)\n"
+"to"
+msgstr "a"
+
+#: dialogs/rc.cpp:216
+msgid ""
+"_: from (amount)\n"
+"from"
+msgstr "da"
+
+#: dialogs/rc.cpp:220
+msgid "Select transactions without payees"
+msgstr "Seleziona transazioni senza creditori"
+
+#: dialogs/rc.cpp:221
+msgid "Select all"
+msgstr "Seleziona tutto"
+
+#: dialogs/rc.cpp:222
+msgid "Select none"
+msgstr "Selezione nulla"
+
+#: dialogs/rc.cpp:224
+msgid "Validity"
+msgstr "Validità"
+
+#: dialogs/rc.cpp:226
+msgid "All states"
+msgstr "Tutti gli stati"
+
+#: dialogs/rc.cpp:230
+msgid "All types"
+msgstr "Tutti i tipi"
+
+#: dialogs/rc.cpp:234
+msgid "Any transaction"
+msgstr "Qualsiasi transazione"
+
+#: dialogs/rc.cpp:235
+msgid "Valid transaction"
+msgstr "Transazione valida"
+
+#: dialogs/rc.cpp:236
+msgid "Invalid transaction"
+msgstr "Transazione non valida"
+
+#: dialogs/rc.cpp:237
+msgid "State"
+msgstr "Stato"
+
+#: dialogs/rc.cpp:238
+msgid "Search this number"
+msgstr "Ricerca questo numero"
+
+#: dialogs/rc.cpp:239
+msgid "Search number in range"
+msgstr "Ricerca numero nell'intervallo"
+
+#: dialogs/rc.cpp:240
+msgid ""
+"_: to (number)\n"
+"to"
+msgstr "a"
+
+#: dialogs/rc.cpp:241
+msgid ""
+"_: from (number)\n"
+"from"
+msgstr "da"
+
+#: dialogs/rc.cpp:242
+msgid "text"
+msgstr "testo"
+
+#: dialogs/rc.cpp:243
+msgid "warning"
+msgstr "avviso"
+
+#: dialogs/rc.cpp:244
+msgid "Result"
+msgstr "Risultato"
+
+#: dialogs/rc.cpp:254
+msgid "F"
+msgstr "F"
+
+#: dialogs/rc.cpp:257
+#: dialogs/rc.cpp:844
+msgid "&Reset"
+msgstr "Azze&ra"
+
+#: dialogs/rc.cpp:258
+msgid "&Find"
+msgstr "&Trova"
+
+#: dialogs/rc.cpp:259
+msgid "GnuCash Import Options"
+msgstr "Opzioni di importazione GnuCash"
+
+#: dialogs/rc.cpp:260
+msgid "Use 'Help' for more information on these options"
+msgstr "Usa l'\"Aiuto\" per ulteriori informazioni su queste opzioni"
+
+#: dialogs/rc.cpp:261
+msgid "Investment Handling"
+msgstr "Gestione investimenti"
+
+#: dialogs/rc.cpp:262
+msgid "One investment account for each stock"
+msgstr "Un conto d'investimento per ogni deposito"
+
+#: dialogs/rc.cpp:263
+msgid "One investment account for all stocks"
+msgstr "Un conto d'investimento per tutti i depositi"
+
+#: dialogs/rc.cpp:264
+msgid "Prompt for an investment account for each stock"
+msgstr "Richiedi un conto d'investimento per ogni deposito"
+
+#: dialogs/rc.cpp:265
+msgid "Online price quotes"
+msgstr "Quotazioni in linea"
+
+#: dialogs/rc.cpp:266
+msgid "Use Finance::Quote for share price quotes"
+msgstr "Utilizza Finance::Quote per le quotazioni dei prezzi delle quote"
+
+#: dialogs/rc.cpp:267
+msgid "Scheduled Transactions"
+msgstr "Transazioni pianificate"
+
+#: dialogs/rc.cpp:268
+msgid "Drop suspect scheduled transactions"
+msgstr "Cancella transazioni pianificate sospette"
+
+#: dialogs/rc.cpp:269
+msgid "Decoding option"
+msgstr "Opzione di decodifica"
+
+#: dialogs/rc.cpp:270
+msgid "Decode using"
+msgstr "Decodifica usando"
+
+#: dialogs/rc.cpp:271
+#, fuzzy
+msgid "Transaction Notes option"
+msgstr "Opzioni transazione"
+
+#: dialogs/rc.cpp:272
+#, fuzzy
+msgid "Use transaction notes on non-split transactions"
+msgstr "Inserisci il tipo di transazione nel campo Num. per le nuove transazioni"
+
+#: dialogs/rc.cpp:273
+msgid "Debug Options"
+msgstr "Opzioni di debug"
+
+#: dialogs/rc.cpp:274
+msgid "General debug data"
+msgstr "Dati generali di debug"
+
+#: dialogs/rc.cpp:275
+msgid "Display XML data"
+msgstr "Visualizza dati XML"
+
+#: dialogs/rc.cpp:276
+msgid "Anonymize data"
+msgstr "Elimina le informazioni sensibili dai dati"
+
+#: dialogs/rc.cpp:281
+msgid "Online Quotes - Select price source"
+msgstr "Quotazioni in linea - Seleziona la fonte dei prezzi"
+
+#: dialogs/rc.cpp:284
+msgid "This price source is not known to KMyMoney. Please select an option below."
+msgstr "La fonte dei prezzi non è nota a KMyMoney. Seleziona una delle seguenti opzioni."
+
+#: dialogs/rc.cpp:285
+msgid "Do not perform online quotes for this investment"
+msgstr "Non eseguire quotazioni in linea per questo investimento"
+
+#: dialogs/rc.cpp:286
+msgid "Select a known KMyMoney source from the list below"
+msgstr "Seleziona una fonte nota a KMyMoney dall'elenco seguente"
+
+#: dialogs/rc.cpp:287
+msgid ""
+"Use the following name for the price source.\n"
+"(Click Help for further information.)"
+msgstr ""
+"Usa il seguente nome per la fonte dei prezzi.\n"
+"(Fai clic su Aiuto per ulteriori informazioni.)"
+
+#: dialogs/rc.cpp:288
+msgid "Always use this selection for this price source."
+msgstr "Utilizza sempre questa selezione per la fonte dei prezzi."
+
+#: dialogs/rc.cpp:289
+msgid "QIF Import"
+msgstr "Importazione QIF"
+
+#: dialogs/rc.cpp:290
+msgid ""
+"From this dialog you are able to import transactions from a Quicken<b>&trade;</b> compatible file, (known as a QIF file, because of the extension).<p>\n"
+"\n"
+"Please enter the path to the QIF file or select it by clicking on the Browse button. Once you have the file's path press the Import button and KMyMoney will import all the transactions, categories and payees it finds."
+msgstr ""
+"Da questa finestra potrai importare transazioni da un file compatibile con Quicken<b>&trade;</b>, (noto come QIF file, a causa dell'estensione).<p>\n"
+"\n"
+"Inserire il percorso al file QIF o di selezionarlo facendo clic sul pulsante Sfoglia. Una volta inserito il percorso del file premere il pulsante Importa e KMyMoney importerà tutte le transazioni, categorie e i creditori che troverà."
+
+#: dialogs/rc.cpp:291
+msgid "QIF File to Import:"
+msgstr "File QIF da importare:"
+
+#: dialogs/rc.cpp:292
+msgid "Import options"
+msgstr "Opzioni importazione"
+
+#: dialogs/rc.cpp:293
+msgid "Bank statement"
+msgstr "Estratto conto bancario"
+
+#: dialogs/rc.cpp:294
+msgid "Other application"
+msgstr "Altra applicazione"
+
+#: dialogs/rc.cpp:295
+msgid "Select <b>Bank statement</b> turns on automatic category matching which is turned off in case of <b>Historic data</b>. Use the latter if you import files from other Personal Finance Management software."
+msgstr ""
+
+#: dialogs/rc.cpp:296
+msgid "Source of QIF"
+msgstr "Sorgente QIF"
+
+#: dialogs/rc.cpp:302
+msgid "Verify Import"
+msgstr "Verifica importo"
+
+#: dialogs/rc.cpp:304
+msgid "Ok"
+msgstr "Ok"
+
+#: dialogs/rc.cpp:306
+msgid "MyDialog"
+msgstr "MyDialog"
+
+#: dialogs/rc.cpp:310
+msgid "File Information"
+msgstr "Informazioni sul file"
+
+#: dialogs/rc.cpp:316
+msgid "Last modified on"
+msgstr "Ultima modifica"
+
+#: dialogs/rc.cpp:319
+msgid "Base currency"
+msgstr "Valuta di base"
+
+#: dialogs/rc.cpp:322
+msgid "Created on"
+msgstr "Creato il"
+
+#: dialogs/rc.cpp:325
+msgid "Accounts/Categories"
+msgstr "Conti/Categorie"
+
+#: dialogs/rc.cpp:328
+msgid "Closed"
+msgstr "Chiuso"
+
+#: dialogs/rc.cpp:331
+msgid "Prices"
+msgstr "Prezzi"
+
+#: dialogs/rc.cpp:337
+msgid "Splits"
+msgstr "Suddivisioni"
+
+#: dialogs/rc.cpp:338
+msgid "Price Editor"
+msgstr "Editor prezzi"
+
+#: dialogs/rc.cpp:339
+msgid "Show all stored prices"
+msgstr "Mostra tutti i prezzi memorizzati"
+
+#: dialogs/rc.cpp:343
+msgid "Delete Range..."
+msgstr "Elimina intervallo..."
+
+#: dialogs/rc.cpp:346
+msgid "New Account Dialog"
+msgstr "Nuovo conto"
+
+#: dialogs/rc.cpp:349
+msgid "Opening information"
+msgstr "Informazioni iniziali"
+
+#: dialogs/rc.cpp:350
+msgid "Currency:"
+msgstr "Valuta:"
+
+#: dialogs/rc.cpp:352
+#: dialogs/rc.cpp:793
+msgid "Date:"
+msgstr "Data:"
+
+#: dialogs/rc.cpp:353
+msgid "Balance:"
+msgstr "Saldo:"
+
+#: dialogs/rc.cpp:355
+msgid "Last check number:"
+msgstr "Numero dell'ultimo assegno:"
+
+#: dialogs/rc.cpp:356
+msgid "Notes:"
+msgstr "Note:"
+
+#: dialogs/rc.cpp:357
+msgid "No auto-VAT-assignment"
+msgstr "Nessuna auto-assegnazione IVA"
+
+#: dialogs/rc.cpp:358
+#: dialogs/rc.cpp:441
+#, fuzzy
+msgid "Price entry"
+msgstr "Prezzo di entrata"
+
+#: dialogs/rc.cpp:359
+msgid "Preferred Account"
+msgstr "Conto preferito"
+
+#: dialogs/rc.cpp:363
+msgid "Number:"
+msgstr "Numero:"
+
+#: dialogs/rc.cpp:364
+#: dialogs/rc.cpp:395
+msgid "BIC"
+msgstr "BIC"
+
+#: dialogs/rc.cpp:367
+msgid "Hierarchy"
+msgstr "Gerarchia"
+
+#: dialogs/rc.cpp:368
+msgid "Subaccount"
+msgstr "Sottoconto"
+
+#: dialogs/rc.cpp:369
+msgid "Limits"
+msgstr "Limiti"
+
+#: dialogs/rc.cpp:370
+msgid "This page allows to setup certain limits. KMyMoney will warn you when the account balance reaches a limit."
+msgstr "Questa pagina consente di impostare alcuni limiti. KMyMoney ti avvertirà quando il saldo del conto raggiunge un limite."
+
+#: dialogs/rc.cpp:372
+msgid "Absolute limit"
+msgstr "Limite assoluto"
+
+#: dialogs/rc.cpp:373
+msgid "Maximum credit limit"
+msgstr "Limite di credito massimo"
+
+#: dialogs/rc.cpp:374
+msgid "Minimum balance"
+msgstr "Bilancio minimo"
+
+#: dialogs/rc.cpp:375
+msgid "Early warning"
+msgstr "Preallarme"
+
+#: dialogs/rc.cpp:377
+msgid "VAT details"
+msgstr "Dettagli IVA"
+
+#: dialogs/rc.cpp:378
+msgid "VAT category"
+msgstr "Categoria IVA"
+
+#: dialogs/rc.cpp:379
+msgid "VAT percentage"
+msgstr "Percentuale IVA"
+
+#: dialogs/rc.cpp:380
+msgid "Enable auto VAT assignment"
+msgstr "Abilita assegnazione automatica IVA"
+
+#: dialogs/rc.cpp:381
+msgid "Amount entered"
+msgstr "Importo inserito"
+
+#: dialogs/rc.cpp:382
+msgid "Gross amount"
+msgstr "Importo lordo"
+
+#: dialogs/rc.cpp:383
+msgid "Net amount"
+msgstr "Importo netto"
+
+#: dialogs/rc.cpp:384
+msgid "Include on Tax Reports"
+msgstr "Includi nei Report imposte"
+
+#: dialogs/rc.cpp:387
+msgid "New Institution Dialog"
+msgstr "Finestra di Nuovo istituto"
+
+#: dialogs/rc.cpp:388
+msgid "Institution Details"
+msgstr "Dettagli istituto"
+
+#: dialogs/rc.cpp:390
+msgid "City:"
+msgstr "Città:"
+
+#: dialogs/rc.cpp:394
+msgid "Routing Number:"
+msgstr "Coordinate bancarie:"
+
+#: dialogs/rc.cpp:398
+msgid "New Budget"
+msgstr "Nuovo budget"
+
+#: dialogs/rc.cpp:403
+msgid "New Equity"
+msgstr "Nuova quota di capitale"
+
+#: dialogs/rc.cpp:406
+#: dialogs/rc.cpp:407
+msgid "Trading Symbol of the stock or mutual fund, not required."
+msgstr "Simbolo commerciale dell'azione o del fondo comune (non richiesto)."
+
+#: dialogs/rc.cpp:414
+#: dialogs/rc.cpp:415
+msgid "Name of the company, or mutual fund."
+msgstr "Nome della compagnia, o fondo comune."
+
+#: dialogs/rc.cpp:418
+msgid "New File Dialog"
+msgstr "Nuovo file"
+
+#: dialogs/rc.cpp:419
+msgid ""
+"Use this dialog to enter personal information about yourself.\n"
+"\n"
+"All information is optional and is provided to personalize\n"
+"your KMyMoney file."
+msgstr ""
+"Usa questa finestra per inserire informazioni personali a proposito di te.\n"
+"\n"
+"Tutte le informazioni sono facoltative e sono inserite per \n"
+"personalizzare il tuo file KMyMoney."
+
+#: dialogs/rc.cpp:430
+msgid "New Investment wizard"
+msgstr "Nuova procedura guidata d'investimento"
+
+#: dialogs/rc.cpp:431
+msgid "Investment Type"
+msgstr "Tipo di investimento"
+
+#: dialogs/rc.cpp:432
+msgid "This wizard allows you to create a new investment."
+msgstr "Questa procedura guidata ti permette di creare un nuovo investimento."
+
+#: dialogs/rc.cpp:433
+msgid "The first step in this process requires to select the type of investment. The following steps collect more details about the investment from you."
+msgstr "Il primo passo di questa procedura richiede la selezione del tipo d'investimento. I passi successivi servono a raccogliere ulteriori dettagli sull'investimento."
+
+#: dialogs/rc.cpp:434
+msgid "Type of investment"
+msgstr "Tipo di investimento"
+
+#: dialogs/rc.cpp:438
+msgid "Investment details"
+msgstr "Dettagli investimento"
+
+#: dialogs/rc.cpp:439
+msgid "Enter the details below and click <b>Next</b> to continue entering the online update details."
+msgstr "Inserisci i dettagli qui sotto e fai clic su <b>Continua</b> per continuare a inserire i dettagli sull'aggiornamento in linea."
+
+#: dialogs/rc.cpp:442
+#: dialogs/rc.cpp:728
+msgid "Fraction"
+msgstr "Frazione"
+
+#: dialogs/rc.cpp:443
+msgid "Trading Currency"
+msgstr "Valuta di scambio"
+
+#: dialogs/rc.cpp:444
+msgid "Full name"
+msgstr "Nome completo"
+
+#: dialogs/rc.cpp:445
+msgid "AMEX"
+msgstr "AMEX"
+
+#: dialogs/rc.cpp:446
+msgid "EUREX"
+msgstr "EUREX"
+
+#: dialogs/rc.cpp:447
+msgid "FUND"
+msgstr "FUND"
+
+#: dialogs/rc.cpp:448
+msgid "NASDAQ"
+msgstr "NASDAQ"
+
+#: dialogs/rc.cpp:449
+msgid "NYSE"
+msgstr "NYSE"
+
+#: dialogs/rc.cpp:450
+msgid "XETRA"
+msgstr "XETRA"
+
+#: dialogs/rc.cpp:451
+msgid "Trading symbol"
+msgstr "Simbolo commerciale"
+
+#: dialogs/rc.cpp:452
+msgid "Identification"
+msgstr "Identificativo"
+
+#: dialogs/rc.cpp:453
+msgid "Enter the ticker symbol (e.g. RHAT)."
+msgstr "Inserisci il simbolo del ticker (ad es. RHAT)."
+
+#: dialogs/rc.cpp:454
+msgid "Enter the CUSIP/ISIN/WKN identification number here"
+msgstr "Inserisci il numero identificativo CUSIP/ISIN/WKN qui"
+
+#: dialogs/rc.cpp:455
+msgid "Trading market"
+msgstr "Mercato di scambio"
+
+#: dialogs/rc.cpp:456
+msgid "Online Update"
+msgstr "Aggiornamento in linea"
+
+#: dialogs/rc.cpp:457
+msgid "Select an online source and click <b>Finish</b> to store the investment data. If you don't want to use online updates, just leave the data as is."
+msgstr "Seleziona una fonte di aggiornamenti in linea e fai clic su <b>Fine</b> per salvare i dati dell'investimento. Se non vuoi usare gli aggiornamenti in linea, lascia il dato invariato."
+
+#: dialogs/rc.cpp:458
+msgid "Use Finance::Quote"
+msgstr "Usa Finance::Quote"
+
+#: dialogs/rc.cpp:460
+msgid "Factor"
+msgstr "Coefficiente"
+
+#: dialogs/rc.cpp:461
+msgid "New Loan Wizard"
+msgstr "Nuova procedura guidata di prestito"
+
+#: dialogs/rc.cpp:462
+msgid "New Loan Account Wizard"
+msgstr "Nuova procedura guidata di conto prestito"
+
+#: dialogs/rc.cpp:463
+msgid ""
+"\n"
+"Welcome to the New Loan Account Wizard which will guide you through the creation of a new loan e.g. for your home, your car or any other loan that you pay or gain interest for.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Benvenuto alla procedura guidata per il nuovo conto di tipo Prestito, che ti guiderà alla creazione di un nuovo prestito; ad es.: per la casa, la macchina o per ogni altro prestito per cui paghi o guadagni interessi.\n"
+"\n"
+"Assicurarsi di avere tutte le informazioni importanti a portata di mano. Generalmente, basta il contratto o l'estratto conto."
+
+#: dialogs/rc.cpp:464
+msgid "Edit Loan Account Wizard"
+msgstr "Procedura guidata per la modifica di conto prestito"
+
+#: dialogs/rc.cpp:465
+msgid ""
+"\n"
+"Welcome to the Edit Loan Account Wizard. Please use this wizard to modify information about your loan account.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Benvenuto alla procedura guidata per la modifica di un conto di tipo Prestito. Usa questa procedura guidata per modificare le informazioni riguardanti il tuo conto di tipo Prestito.\n"
+"\n"
+"Assicurarsi di avere tutte le informazioni importanti a portata di mano. Generalmente, basta il contratto o l'estratto conto."
+
+#: dialogs/rc.cpp:467
+msgid ""
+"\n"
+"In the first step, KMyMoney will ask you some general information about the loan account to be created."
+msgstr ""
+"\n"
+"Come prima cosa, KMyMoney ti chiederà alcune informazioni generali riguardanti il conto di tipo Prestito da creare."
+
+#: dialogs/rc.cpp:468
+#: dialogs/rc.cpp:522
+#: dialogs/rc.cpp:610
+msgid "1. General Information"
+msgstr "1. Informazioni generali"
+
+#: dialogs/rc.cpp:469
+msgid ""
+"\n"
+"2. Calculate Loan\n"
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"2. Calcola prestito\n"
+"\n"
+"3. Pagamenti"
+
+#: dialogs/rc.cpp:470
+msgid "Edit selection"
+msgstr "Modifica selezione"
+
+#: dialogs/rc.cpp:471
+msgid ""
+"\n"
+"Please select, which data of the loan you want to modify."
+msgstr ""
+"\n"
+"Seleziona il dato del prestito che vuoi modificare."
+
+#: dialogs/rc.cpp:472
+msgid "Modify the interest rate"
+msgstr "Modifica il tasso d'interesse"
+
+#: dialogs/rc.cpp:473
+msgid "Modify additional fees"
+msgstr "Modifica pagamenti aggiuntivi"
+
+#: dialogs/rc.cpp:474
+msgid "Modify other loan information"
+msgstr "Modifica altre informazioni sul prestito"
+
+#: dialogs/rc.cpp:475
+msgid "Effective date"
+msgstr "Data effettiva"
+
+#: dialogs/rc.cpp:478
+msgid "When should the changes become active?"
+msgstr "Quando dovrebbero diventare attivi i cambiamenti?"
+
+#: dialogs/rc.cpp:479
+msgid "Lending or borrowing money"
+msgstr "Prestando o prendendo in prestito denaro"
+
+#: dialogs/rc.cpp:480
+msgid ""
+"\n"
+"Do you borrow or lend money?"
+msgstr ""
+"\n"
+"Presti o ricevi in prestito denaro?"
+
+#: dialogs/rc.cpp:483
+msgid "Name of the loan"
+msgstr "Nome del prestito"
+
+#: dialogs/rc.cpp:484
+msgid ""
+"\n"
+"How do you want to call this loan? Examples for names are 'car loan', 'school loan', 'home owner loan'."
+msgstr ""
+"\n"
+"Come vuoi chiamare questo prestito? Alcuni esempi di nomi sono are 'prestito per la macchina', 'prestito per la scuola' o 'ipoteca'."
+
+#: dialogs/rc.cpp:486
+msgid "TextLabel6"
+msgstr "TextLabel6"
+
+#: dialogs/rc.cpp:487
+msgid "TextLabel7"
+msgstr "TextLabel7"
+
+#: dialogs/rc.cpp:488
+msgid "Type of interest"
+msgstr "Tipo di interesse"
+
+#: dialogs/rc.cpp:489
+msgid ""
+"\n"
+"Is the interest of this loan fixed over a period of time or is it adapted from time to time? If the interest rate changes during the amortization phase of the loan you should choose the option 'variable interest rate'."
+msgstr ""
+"\n"
+"Gli interessi del prestito sono fissi o sono variabili al passare del tempo? Se il tasso d'interesse cambia durante l'ammortamento del prestito dovresti scegliere l'opzione \"tasso di interesse variabile\"."
+
+#: dialogs/rc.cpp:490
+msgid "Fixed interest rate"
+msgstr "Tasso di interesse fisso"
+
+#: dialogs/rc.cpp:491
+msgid "Variable interest rate"
+msgstr "Tasso di interesse variabile"
+
+#: dialogs/rc.cpp:492
+msgid "Payments?"
+msgstr "Pagamenti?"
+
+#: dialogs/rc.cpp:493
+msgid ""
+"\n"
+"Were there any payments for this loan whether they are entered into KMyMoney or not?"
+msgstr ""
+"\n"
+"Sono stati inseriti dei pagamenti per questo prestito in KMyMoney o no?"
+
+#: dialogs/rc.cpp:494
+msgid "No, no payments were made yet."
+msgstr "No, nessun pagamento è stato effettuato."
+
+#: dialogs/rc.cpp:495
+msgid "Yes, payments were made."
+msgstr "Si, sono stati fatti pagamenti."
+
+#: dialogs/rc.cpp:496
+msgid "Note: Payments made to obtain the loan (e.g. Dissagio) are not considered as payments in this context."
+msgstr "Nota: I pagamenti fatti per ottenere il prestito (ad es. le commissioni d'apertura) non sono considerati pagamenti in questo contesto."
+
+#: dialogs/rc.cpp:497
+msgid "Recording payments?"
+msgstr "Registra pagamenti?"
+
+#: dialogs/rc.cpp:498
+msgid ""
+"\n"
+"Do you want to record all payments of this loan with KMyMoney?"
+msgstr ""
+"\n"
+"Vuoi registrare tutti i pagamenti di questo prestito con KMyMoney?"
+
+#: dialogs/rc.cpp:499
+msgid "Yes, record all payments."
+msgstr "Sì, registra tutti i pagamenti."
+
+#: dialogs/rc.cpp:500
+msgid "No, only record payments since the beginning of this year."
+msgstr "No, registra solo i pagamenti effettuati dall'inizio di quest'anno."
+
+#: dialogs/rc.cpp:501
+msgid "Date of next interest change"
+msgstr "Data del prossimo cambio d'interessi"
+
+#: dialogs/rc.cpp:502
+msgid ""
+"\n"
+"Select the date when the interest rate for this loan will be modified and the frequency of the future changes."
+msgstr ""
+"\n"
+"Seleziona la data in cui i tassi d'interesse per questo prestito saranno modificati e la frequenza dei cambiamenti futuri."
+
+#: dialogs/rc.cpp:503
+msgid "Next interest change on"
+msgstr "I prossimi interessi cambiano il"
+
+#: dialogs/rc.cpp:504
+msgid "Time until next change"
+msgstr "Tempo mancante al prossimo cambiamento"
+
+#: dialogs/rc.cpp:506
+#: dialogs/rc.cpp:571
+msgid ""
+"\n"
+"Please enter the amount you pay for principal and interest or leave the field empty to calculate it."
+msgstr ""
+"\n"
+"Inserisci l'importo che paghi per il capitale e l'interesse o lascia il campo vuoto per calcolarlo."
+
+#: dialogs/rc.cpp:507
+msgid "Current amount"
+msgstr "Importo corrente"
+
+#: dialogs/rc.cpp:510
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal and interest. If you know the amount for principal and interest then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"KMyMoney può calcolare il nuovo tasso d'interesse o l'importo per capitale e interesse. Se conosci l'importo per il capitale e l'interesse inseriscilo qui.\n"
+"\n"
+"Per far calcolare questo valore a KMyMoney, lascia il campo vuoto."
+
+#: dialogs/rc.cpp:512
+#: dialogs/rc.cpp:545
+msgid ""
+"\n"
+"Please enter the interest rate or leave the field empty to calculate it."
+msgstr ""
+"\n"
+"Inserire il tasso d'interesse, o lasciare il campo vuoto per farlo calcolare automaticamente."
+
+#: dialogs/rc.cpp:514
+msgid "Current rate"
+msgstr "Tasso corrente"
+
+#: dialogs/rc.cpp:516
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal and interest. If you know the interest rate then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"KMyMoney può calcolare il nuovo tasso d'interesse o l'importo per capitale e interesse. Se conosci il tasso d'interesse inseriscilo qui.\n"
+"\n"
+"Per far calcolare questo valore a KMyMoney, lascia il campo vuoto."
+
+#: dialogs/rc.cpp:517
+msgid "Date of first payment"
+msgstr "Data del primo pagamento"
+
+#: dialogs/rc.cpp:520
+msgid "Calculate Loan"
+msgstr "Calcola prestito"
+
+#: dialogs/rc.cpp:521
+msgid ""
+"\n"
+"You have successfully entered the general information about your loan. Next, KMyMoney needs some information about the calculation of the loan."
+msgstr ""
+"\n"
+"Le informazioni generali del prestito sono state inserite con successo. Come prossima cosa, KMyMoney ha bisogno di alcune informazioni a proposito del calcolo del prestito."
+
+#: dialogs/rc.cpp:523
+#: dialogs/rc.cpp:611
+msgid ""
+"\n"
+"2. Calculate Loan"
+msgstr ""
+"\n"
+"2. Calcola prestito"
+
+#: dialogs/rc.cpp:524
+#: dialogs/rc.cpp:612
+msgid ""
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"3. Pagamenti"
+
+#: dialogs/rc.cpp:526
+msgid ""
+"\n"
+"How often will there be payments made to this loan?"
+msgstr ""
+"\n"
+"Quanto spesso avverranno i pagamenti a questo prestito?"
+
+#: dialogs/rc.cpp:527
+msgid "Interest calculation"
+msgstr "Calcolo interessi"
+
+#: dialogs/rc.cpp:528
+msgid ""
+"\n"
+"When does the actual interest rate get calculated?"
+msgstr ""
+"\n"
+"Quando va calcolato il tasso attuale d'interesse?"
+
+#: dialogs/rc.cpp:529
+msgid "When the payment is received."
+msgstr "Quando il pagamento è ricevuto."
+
+#: dialogs/rc.cpp:530
+msgid "When the payment is due."
+msgstr "Quando il pagamento è dovuto."
+
+#: dialogs/rc.cpp:534
+#: dialogs/rc.cpp:547
+#: dialogs/rc.cpp:560
+#: dialogs/rc.cpp:573
+#: dialogs/rc.cpp:586
+#: dialogs/rc.cpp:598
+#: dialogs/rc.cpp:679
+msgid "Loan amount:"
+msgstr "Importo del prestito:"
+
+#: dialogs/rc.cpp:535
+#: dialogs/rc.cpp:548
+#: dialogs/rc.cpp:561
+#: dialogs/rc.cpp:574
+#: dialogs/rc.cpp:587
+#: dialogs/rc.cpp:599
+#: dialogs/rc.cpp:633
+#: dialogs/rc.cpp:671
+msgid "Interest rate:"
+msgstr "Tasso d'interessi:"
+
+#: dialogs/rc.cpp:536
+#: dialogs/rc.cpp:549
+#: dialogs/rc.cpp:562
+#: dialogs/rc.cpp:575
+#: dialogs/rc.cpp:588
+#: dialogs/rc.cpp:600
+#: dialogs/rc.cpp:669
+msgid "Term:"
+msgstr "Termine:"
+
+#: dialogs/rc.cpp:537
+#: dialogs/rc.cpp:550
+#: dialogs/rc.cpp:563
+#: dialogs/rc.cpp:576
+#: dialogs/rc.cpp:589
+#: dialogs/rc.cpp:601
+#: dialogs/rc.cpp:622
+#: dialogs/rc.cpp:630
+#: dialogs/rc.cpp:677
+msgid "Principal + Interest:"
+msgstr "Capitale + Interesse:"
+
+#: dialogs/rc.cpp:538
+#: dialogs/rc.cpp:551
+#: dialogs/rc.cpp:564
+#: dialogs/rc.cpp:577
+#: dialogs/rc.cpp:583
+#: dialogs/rc.cpp:585
+#: dialogs/rc.cpp:590
+#: dialogs/rc.cpp:602
+msgid "Final amortization payment"
+msgstr "Pagamento della rata finale"
+
+#: dialogs/rc.cpp:557
+msgid "Duration"
+msgstr "Durata"
+
+#: dialogs/rc.cpp:558
+msgid ""
+"\n"
+"Please enter the term of this loan or leave the field empty to calculate it. The term is the time that is required to fully repay the loan. This time might be different from the time your loan contract is signed for."
+msgstr ""
+"\n"
+"Inserire il termine di questo prestito, o lasciare il campo vuoto per farlo calcolare automaticamente. Il termine è il tempo richiesto per ripagare completamente il prestito. Questa durata può differire dal tempo previsto dal tuo contratto."
+
+#: dialogs/rc.cpp:584
+msgid ""
+"\n"
+"Please enter the amount of a final amortization payment or leave the field empty to calculate it."
+msgstr ""
+"\n"
+"Inserire l'importo del pagamento della rata finale, o lasciare il campo bianco per farlo calcolare automaticamente."
+
+#: dialogs/rc.cpp:596
+msgid "Calculation Overview"
+msgstr "Sommario dei calcoli"
+
+#: dialogs/rc.cpp:597
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown in the overview below. You can accept these values by selecting \"Next\" or change them by choosing \"Back\" to return to the input field for the information you want to change."
+msgstr ""
+"\n"
+"KMyMoney ha calcolato il prestito come mostrato nel sommario sottostante. Puoi accettare questi valori premendo \"Avanti\" o cambiarli premendo \"Indietro\" per ritornare al campo corrispondente all'informazione che vuoi cambiare."
+
+#: dialogs/rc.cpp:609
+msgid ""
+"\n"
+"In the following steps, KMyMoney supports you in setting up categories and schedules for your loan payments."
+msgstr ""
+"\n"
+"Nelle seguenti schermate, KMyMoney ti aiuterà nel configurare le categorie e la pianificazione dei pagamenti del prestito."
+
+#: dialogs/rc.cpp:614
+msgid ""
+"\n"
+"Please select the category you want to assign the interest payments to or create a new category."
+msgstr ""
+"\n"
+"Selezionare la categoria a cui vuoi assegnare l'interesse dei pagamenti o creare una nuova categoria."
+
+#: dialogs/rc.cpp:615
+msgid "Additional Fees"
+msgstr "Pagamenti aggiuntivi"
+
+#: dialogs/rc.cpp:616
+msgid ""
+"\n"
+"If your regular payment contains any additional fees, click on the button \"Additional fees\" to enter them."
+msgstr ""
+"\n"
+"Se le tue rate prevedono pagamenti aggiuntivi, fai clic sul pulsante \"Pagamenti aggiuntivi\" per inserirli."
+
+#: dialogs/rc.cpp:617
+msgid "= periodical payment:"
+msgstr "= pagamento periodico:"
+
+#: dialogs/rc.cpp:623
+msgid "If no additional fees are included in your periodical payment or you have entered all such fees, then click on \"Next\"."
+msgstr "Se non sono previsti pagamenti aggiuntivi alle tue rate o se hai inserito tali pagamenti, allora premi \"Avanti\"."
+
+#: dialogs/rc.cpp:625
+msgid ""
+"KMyMoney will create a schedule for this payment and reminds you whenever a payment must be made.<p>\n"
+"If you selected to record all payments this date has already been supplied. If you selected to record only this years payments, then the <b>First payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"KMyMoney pianificherà un evento per questo pagamento e ti ricorderà quando questo pagamento deve essere fatto.<p>\n"
+"Se hai scelto di registrare tutti i pagamenti questa data è già stata inserita. Se hai scelto di registrare solo i pagamenti dell'anno corrente, allora la <b>Data del primo pagamento</b> si riferisce alla data del primo pagamento di quest'anno."
+
+#: dialogs/rc.cpp:626
+msgid "First payment due on:"
+msgstr "Data del primo pagamento:"
+
+#: dialogs/rc.cpp:627
+msgid "Make payment from/to:"
+msgstr "Effettua pagamento da/a:"
+
+#: dialogs/rc.cpp:629
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown below. If you want to accept these values use the \"Finish\" button to update your account, otherwise use the \"Back\" button to modify your settings."
+msgstr ""
+"\n"
+"KMyMoney ha calcolato il prestito come mostrato sotto. Se vuoi accettare questi valori usa il pulsante \"Fine\" per aggiornare il tuo conto, altrimenti usa il pulsante \"Indietro\" per modificare le tue impostazioni."
+
+#: dialogs/rc.cpp:631
+msgid "Additional fees:"
+msgstr "Pagamenti aggiuntivi:"
+
+#: dialogs/rc.cpp:632
+msgid "Total payment:"
+msgstr "Totale dei pagamenti:"
+
+#: dialogs/rc.cpp:634
+msgid "Valid from:"
+msgstr "Valido da:"
+
+#: dialogs/rc.cpp:635
+msgid "Affected payments:"
+msgstr "Pagamenti effettuati:"
+
+#: dialogs/rc.cpp:645
+msgid "Press this to create a new asset account"
+msgstr "Premi qui per creare un nuovo conto attività"
+
+#: dialogs/rc.cpp:648
+msgid ""
+"\n"
+"This page summarizes the data you entered. If you need to modify anything, please use the \"Back\" button to go to respective page. Otherwise use the \"Finish\" button to create the account."
+msgstr ""
+"\n"
+"Questa pagina riassume i dati inseriti. Se hai bisogno di modificare qualcosa, usa il pulsante \"Indietro\" per andare alla rispettiva pagina. Altrimenti usa il pulsante \"Fine\" per creare il conto."
+
+#: dialogs/rc.cpp:650
+msgid "Payee:"
+msgstr "Beneficiario:"
+
+#: dialogs/rc.cpp:653
+msgid "First payment:"
+msgstr "Primo pagamento:"
+
+#: dialogs/rc.cpp:655
+msgid "Amount is:"
+msgstr "L'importo è:"
+
+#: dialogs/rc.cpp:656
+msgid "Loan calculation"
+msgstr "Calcolo del prestito"
+
+#: dialogs/rc.cpp:660
+msgid "Periodic Payment:"
+msgstr "Pagamento periodico:"
+
+#: dialogs/rc.cpp:661
+msgid "Additional Fees:"
+msgstr "Pagamenti aggiuntivi:"
+
+#: dialogs/rc.cpp:662
+msgid "Interest category:"
+msgstr "Categoria d'interesse:"
+
+#: dialogs/rc.cpp:663
+msgid "Payment from:"
+msgstr "Pagamento da:"
+
+#: dialogs/rc.cpp:666
+msgid "Next due date:"
+msgstr "Prossima data di scadenza:"
+
+#: dialogs/rc.cpp:673
+msgid "Final Payment:"
+msgstr "Pagamento finale:"
+
+#: dialogs/rc.cpp:675
+msgid "Interest is due:"
+msgstr "L'interesse è:"
+
+#: dialogs/rc.cpp:680
+msgid "Payment frequency:"
+msgstr "Frequenza di pagamento:"
+
+#: dialogs/rc.cpp:682
+msgid "Online Quote Configuration"
+msgstr "Configurazione quotazioni in linea"
+
+#: dialogs/rc.cpp:687
+msgid "Perl Location:"
+msgstr "Percorso a Perl:"
+
+#: dialogs/rc.cpp:688
+msgid "Script:"
+msgstr "Script:"
+
+#: dialogs/rc.cpp:690
+msgid "Reassign payees"
+msgstr "Riassegna creditori"
+
+#: dialogs/rc.cpp:691
+msgid "The transactions associated with the selected payees need to be re-assigned to a different payee before the selected payees can be deleted. Please select a payee from the list below."
+msgstr "Le transazioni associate ai beneficiari selezionati devono essere riassegnate a un altro beneficiario prima che i beneficiari selezionati possano essere eliminati. Seleziona un beneficiario dall'elenco seguente."
+
+#: dialogs/rc.cpp:692
+msgid "Available payees:"
+msgstr "Creditori disponibili:"
+
+#: dialogs/rc.cpp:693
+msgid "Assign deleted names to the above selected payee's matching list"
+msgstr ""
+
+#: dialogs/rc.cpp:696
+msgid "PluginDlg"
+msgstr "PluginDlg"
+
+#: dialogs/rc.cpp:697
+msgid "PlugIn"
+msgstr "PlugIn"
+
+#: dialogs/rc.cpp:698
+#: widgets/transaction.cpp:1071
+#: widgets/transaction.cpp:1658
+msgid "Status"
+msgstr "Stato"
+
+#: dialogs/rc.cpp:699
+msgid "Feature"
+msgstr "Funzionalità"
+
+#: dialogs/rc.cpp:703
+msgid "Reconciliation Dialog"
+msgstr "Riconciliazione"
+
+#: dialogs/rc.cpp:704
+msgid ""
+"This dialog will assist in helping you to balance your account.\n"
+"\n"
+"Click on an appropriate transaction within one of the two list views to mark it as reconciled. To create a transaction or edit\n"
+"a transaction you can return to the register by clicking on the Edit Transactions button.\n"
+"\n"
+"Your account is balanced when the Difference is Zero. Click on the Finish button to save the reconciled transactions."
+msgstr ""
+"Questa finestra ti aiuterà a bilanciare il tuo conto.\n"
+"\n"
+"Fare clic su una transazione appropriata dentro a una delle due liste per segnarla come riconciliata. Per creare o modificare \n"
+"\"+\"una transazione puoi ritornare al registro fare clic sul pulsante Modifica transazione.\n"
+"\n"
+"Il tuo conto è in pareggio quando la differenza è zero. Fare clic sul pulsante Fine per salvare le transazioni riconciliate."
+
+#: dialogs/rc.cpp:705
+msgid "Withdrawals"
+msgstr "Prelievi"
+
+#: dialogs/rc.cpp:707
+#: dialogs/rc.cpp:708
+#: dialogs/rc.cpp:822
+msgid "$"
+msgstr "$"
+
+#: dialogs/rc.cpp:710
+msgid "Previous Balance:"
+msgstr "Saldo precedente:"
+
+#: dialogs/rc.cpp:711
+#: dialogs/rc.cpp:713
+#: dialogs/rc.cpp:715
+#: dialogs/rc.cpp:717
+#: dialogs/rc.cpp:820
+msgid "0"
+msgstr "0"
+
+#: dialogs/rc.cpp:712
+msgid "Ending Balance:"
+msgstr "Saldo finale:"
+
+#: dialogs/rc.cpp:714
+msgid "Cleared Balance:"
+msgstr "Saldo Compensato:"
+
+#: dialogs/rc.cpp:716
+msgid "Difference:"
+msgstr "Differenza:"
+
+#: dialogs/rc.cpp:718
+msgid "Edit Transactions..."
+msgstr "Modifica transazioni..."
+
+#: dialogs/rc.cpp:721
+msgid "Security List Editor"
+msgstr "Editor della lista strumenti finanziari"
+
+#: dialogs/rc.cpp:726
+msgid "Market"
+msgstr "Mercato"
+
+#: dialogs/rc.cpp:729
+msgid "Cash Fraction"
+msgstr "Frazione del contante"
+
+#: dialogs/rc.cpp:730
+msgid "Add..."
+msgstr "Aggiungi..."
+
+#: dialogs/rc.cpp:732
+#: widgets/kmymoneypriceview.cpp:157
+msgid "Delete..."
+msgstr "Elimina..."
+
+#: dialogs/rc.cpp:733
+msgid "Show national currencies"
+msgstr "Mostra le valute nazionali"
+
+#: dialogs/rc.cpp:735
+msgid "KMyMoney - Select Database"
+msgstr "KMyMoney - Selezione database"
+
+#: dialogs/rc.cpp:736
+msgid "CAUTION!"
+msgstr "ATTENZIONE!"
+
+#: dialogs/rc.cpp:737
+msgid ""
+"<font color=\"#ff2727\">This software is still in an experimental stage, and there are still some known response time problems. Please be patient; we are working on them.\n"
+"As always, please make sure you have adequate backups of your data.</font>"
+msgstr ""
+"<font color=\"#ff2727\">Questo software è ancora in uno stadio sperimentale e ci sono ancora alcuni problemi relativi ai tempi di risposta. Vi chiediamo di pazientare, stiamo lavorando per risolverli.\n"
+"Come sempre, assicuratevi di avere una copia di sicurezza dei dati.</font>"
+
+#: dialogs/rc.cpp:738
+msgid "Database Type"
+msgstr "Tipo di database"
+
+#: dialogs/rc.cpp:739
+msgid "Database Name"
+msgstr "Nome del database"
+
+#: dialogs/rc.cpp:740
+msgid "Host Name"
+msgstr "Nome host"
+
+#: dialogs/rc.cpp:741
+msgid "User Name"
+msgstr "Nome utente"
+
+#: dialogs/rc.cpp:743
+msgid "Preload &all data"
+msgstr "C&arica subito tutti i dati"
+
+#: dialogs/rc.cpp:745
+msgid "&Generate SQL"
+msgstr "&Genera SQL"
+
+#: dialogs/rc.cpp:747
+msgid "Ca&ncel"
+msgstr "A&nnulla"
+
+#: dialogs/rc.cpp:762
+#: widgets/rc.cpp:172
+msgid "Sort options"
+msgstr "Ordina opzioni"
+
+#: dialogs/rc.cpp:763
+msgid "Use default"
+msgstr "Usa predefinito"
+
+#: dialogs/rc.cpp:767
+msgid "Correct splits"
+msgstr "Correggi suddivisioni"
+
+#: dialogs/rc.cpp:769
+msgid "How do you want to proceed?"
+msgstr "Come vuoi procedere?"
+
+#: dialogs/rc.cpp:770
+msgid "Continue to edit splits"
+msgstr "Continua a modificare le suddivisioni"
+
+#: dialogs/rc.cpp:771
+#, c-format
+msgid "Change total amount of transaction to %1."
+msgstr "Cambia l'importo totale della transazione a %1."
+
+#: dialogs/rc.cpp:772
+msgid "Distribute difference of %1 among all splits."
+msgstr "Distribuisci la differenza di %1 tra tutte le suddivisioni."
+
+#: dialogs/rc.cpp:773
+msgid "Leave %1 unassigned."
+msgstr "Lascia %1 non assegnato."
+
+#: dialogs/rc.cpp:776
+msgid "Split transaction"
+msgstr "Dividi transazione"
+
+#: dialogs/rc.cpp:777
+msgid "<b>11,00<b>"
+msgstr "<b>11,00<b>"
+
+#: dialogs/rc.cpp:778
+msgid "<b>111,00<b>"
+msgstr "<b>111,00<b>"
+
+#: dialogs/rc.cpp:779
+msgid "Unassigned"
+msgstr "Non assegnato"
+
+#: dialogs/rc.cpp:780
+msgid "Sum of splits"
+msgstr "Somma delle suddivisioni"
+
+#: dialogs/rc.cpp:781
+msgid "100,00"
+msgstr "100,00"
+
+#: dialogs/rc.cpp:782
+msgid "Transaction amount"
+msgstr "Importo della transazione"
+
+#: dialogs/rc.cpp:783
+msgid "Merge"
+msgstr "Unisci"
+
+#: dialogs/rc.cpp:784
+msgid "Merges splits with the same category to one split"
+msgstr "Unisci le suddivisioni della stessa categoria in una suddivisione"
+
+#: dialogs/rc.cpp:785
+msgid "In case you have multiple split entries to the same category and you like to keep them as a single split, press this button. The amount for identical categories will be added and stored in a single split for that category."
+msgstr ""
+
+#: dialogs/rc.cpp:786
+msgid "Clear &Zero"
+msgstr "Cancella gli &zero"
+
+#: dialogs/rc.cpp:787
+msgid "Removes all splits that have a value of zero."
+msgstr "Rimuove tutte le suddivisioni che hanno valore zero."
+
+#: dialogs/rc.cpp:791
+msgid "New price entry"
+msgstr "Inserisci il prezzo della quota di capitale"
+
+#: dialogs/rc.cpp:799
+msgid "Void mark"
+msgstr "Segna come vuoto"
+
+#: dialogs/rc.cpp:800
+msgid "Opening Balance text"
+msgstr "Testo del bilancio d'apertura"
+
+#: dialogs/rc.cpp:801
+msgid "Type field text"
+msgstr "Scrivi il campo di testo"
+
+#: dialogs/rc.cpp:802
+msgid "Account delimiter"
+msgstr "Delimitatore conto"
+
+#: dialogs/rc.cpp:804
+msgid "Attempt to match similar transactions"
+msgstr "Cerca corrispondenze con transazioni simili"
+
+#: dialogs/rc.cpp:806
+#: dialogs/rc.cpp:808
+msgid "The format of the dates in the QIF file."
+msgstr "Il formato delle date nel file QIF."
+
+#: dialogs/rc.cpp:809
+#: dialogs/rc.cpp:811
+msgid "If a QIF file contains date entries with years represented with two digits then either an apostrophe or a slash may be used to delimit the year in the dates for certain centuries. This enables 1905 to be distinguished from 2005. Specify here which range of years will have year delimited by an apostrophe (eg. for Quicken this is usually 1900-1949)."
+msgstr "Se un file QIF contiene date col campo anno formattato con due caratteri, allora un apostrofo o una barra potrebbero essere usate come delimitatore dell'anno per alcuni secoli. Questo permette di distinguere una data come il 1905 dal 2005. Specifica qui l'intervallo di anni che saranno delimitati da un apostrofo (ad es: per Quicken di solito è 1900-1949)."
+
+#: dialogs/rc.cpp:810
+msgid "Apostrophe Handling"
+msgstr "Gestione dell'apostrofo"
+
+#: dialogs/rc.cpp:812
+msgid "Amounts"
+msgstr "Importi"
+
+#: dialogs/rc.cpp:813
+msgid "Field"
+msgstr "Campo"
+
+#: dialogs/rc.cpp:814
+msgid "QIF-Record"
+msgstr "Voce QIF"
+
+#: dialogs/rc.cpp:815
+#: dialogs/rc.cpp:833
+msgid "Decimal Symbol"
+msgstr "Simbolo decimale"
+
+#: dialogs/rc.cpp:816
+msgid "Thousand Delimiter"
+msgstr "Delimitatore delle migliaia"
+
+#: dialogs/rc.cpp:817
+msgid "SortColumnInvisible"
+msgstr "SortColumnInvisible"
+
+#: dialogs/rc.cpp:819
+msgid "T"
+msgstr "T"
+
+#: dialogs/rc.cpp:821
+msgid "Split-Value"
+msgstr "Suddivisione-Valore"
+
+#: dialogs/rc.cpp:824
+msgid "Commission"
+msgstr "Commissione"
+
+#: dialogs/rc.cpp:825
+msgid "O"
+msgstr "O"
+
+#: dialogs/rc.cpp:826
+msgid "2"
+msgstr "2"
+
+#: dialogs/rc.cpp:828
+msgid "I"
+msgstr "I"
+
+#: dialogs/rc.cpp:829
+msgid "3"
+msgstr "3"
+
+#: dialogs/rc.cpp:831
+msgid "Q"
+msgstr "Q"
+
+#: dialogs/rc.cpp:832
+msgid "4"
+msgstr "4"
+
+#: dialogs/rc.cpp:834
+msgid "Thousands Separator"
+msgstr "Separatore delle migliaia"
+
+#: dialogs/rc.cpp:836
+msgid "Output filter location"
+msgstr "Posizione del filtro di esportazione"
+
+#: dialogs/rc.cpp:837
+msgid "Input filter file type"
+msgstr "Tipo di file per il filtro di importazione"
+
+#: dialogs/rc.cpp:838
+msgid "*.qif"
+msgstr "*.qif"
+
+#: dialogs/rc.cpp:839
+msgid "Input filter location"
+msgstr "Posizione del filtro di importazione"
+
+#: dialogs/rc.cpp:843
+msgid "Rename"
+msgstr "Rinomina"
+
+#: dialogs/kselecttransactionsdlg.cpp:44
+msgid "Select Transaction"
+msgstr "Seleziona transazione"
+
+#: dialogs/kselecttransactionsdlg.cpp:45
+msgid "Select a transaction and press the OK button or use Cancel to select none."
+msgstr "Seleziona una transazione e premi il pulsante OK o usa Annulla per selezionarne una."
+
+#: dialogs/knewinvestmentwizard.cpp:62
+msgid "Investment detail wizard"
+msgstr "Procedura guidata per i dettagli dell'investimento"
+
+#: dialogs/knewinvestmentwizard.cpp:82
+msgid "Security detail wizard"
+msgstr "Procedura guidata per i dettagli dei certificati"
+
+#: dialogs/knewaccountdlg.cpp:121
+#: dialogs/knewinvestmentwizard.cpp:109
+msgid ""
+"_: default price mode\n"
+"<default>"
+msgstr "<predefinito>"
+
+#: dialogs/knewaccountdlg.cpp:122
+#: dialogs/knewinvestmentwizard.cpp:110
+msgid "Price per share"
+msgstr "Prezzo per quota"
+
+#: dialogs/knewaccountdlg.cpp:123
+#: dialogs/knewinvestmentwizard.cpp:111
+msgid "Total for all shares"
+msgstr "Totale per tutte le quote"
+
+#: dialogs/knewinvestmentwizard.cpp:129
+msgid "This wizard allows you to modify the selected investment."
+msgstr "Questa procedura guidata ti permette di modificare l'investimento selezionato."
+
+#: dialogs/knewinvestmentwizard.cpp:132
+msgid "This wizard allows you to modify the selected security."
+msgstr "Questa procedura guidata ti permette di modificare lo strumento finanziario selezionato."
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid "The selected symbol is already on file. Do you want to reuse the existing security?"
+msgstr "Il simbolo selezionato è già nel file. Vuoi riutilizzare lo strumento finanziario esistente?"
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid "Security found"
+msgstr "Strumento finanziario trovato"
+
+#: dialogs/knewinvestmentwizard.cpp:309
+msgid "Unable to create all objects for the investment"
+msgstr "Impossibile creare tutti gli oggetti per l'investimento"
+
+#: dialogs/keditequityentrydlg.cpp:78
+msgid "Change the price information of the selected entry."
+msgstr "Cambia le informazioni del prezzo per la voce selezionata."
+
+#: dialogs/kaccountselectdlg.cpp:64
+#: widgets/kmymoneybriefschedule.cpp:59
+msgid "&Skip"
+msgstr "&Salta"
+
+#: dialogs/kaccountselectdlg.cpp:66
+#: widgets/kmymoneybriefschedule.cpp:61
+msgid "Skip this transaction"
+msgstr "Salta questa transazione"
+
+#: dialogs/kaccountselectdlg.cpp:67
+msgid "Use this to skip importing this transaction and proceed with the next one."
+msgstr "Premi qui per saltare l'importazione di questa transazione e passare alla successiva."
+
+#: dialogs/kaccountselectdlg.cpp:72
+msgid "Create a new account/category"
+msgstr "Crea un nuovo conto/categoria"
+
+#: dialogs/kaccountselectdlg.cpp:73
+msgid "Use this to add a new account/category to the file"
+msgstr "Premi qui per aggiungere un nuovo conto/categoria al file"
+
+#: dialogs/kaccountselectdlg.cpp:77
+msgid "&Abort"
+msgstr "&Annulla"
+
+#: dialogs/kaccountselectdlg.cpp:79
+msgid "Abort the import operation and dismiss all changes"
+msgstr "Termina l'importazione e annulla tutti i cambiamenti"
+
+#: dialogs/kaccountselectdlg.cpp:80
+msgid "Use this to abort the import. Your financial data will be in the state before you started the QIF import."
+msgstr "Premi qui per annullare l'importazione. I tuoi dati finanziari rimarranno nello stato precedente all'inizio dell'importazione QIF."
+
+#: dialogs/knewaccountdlg.cpp:110
+msgid "Is a sub account"
+msgstr "È un sottoconto"
+
+#: dialogs/knewaccountdlg.cpp:184
+msgid "VAT account"
+msgstr "Conto IVA"
+
+#: dialogs/knewaccountdlg.cpp:474
+msgid ""
+"You have not specified a name.\n"
+"Please fill in this field."
+msgstr ""
+"Non hai specificato un nome.\n"
+"Compilare questo campo."
+
+#: dialogs/knewaccountdlg.cpp:482
+msgid "Please select a parent account."
+msgstr "Selezionare un conto padre."
+
+#: dialogs/knewaccountdlg.cpp:489
+#: dialogs/knewaccountdlg.cpp:1029
+msgid "<No Institution>"
+msgstr "<Nessun istituto>"
+
+#: dialogs/knewaccountdlg.cpp:552
+msgid "An account named <b>%1</b> already exists. You cannot create a second account with the same name."
+msgstr "Un conto con nome <b>%1</b> esiste già. Non è possibile creare un secondo conto con lo stesso nome."
+
+#: dialogs/knewaccountdlg.cpp:567
+msgid "A category named <b>%1</b> already exists. You cannot create a second category with the same name."
+msgstr "Una categoria con nome <b>%1</b> esiste già. Non è possibile creare una seconda categoria con lo stesso nome."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid "You have selected to suppress the display of unused categories in the KMyMoney configuration dialog. The category you just created will therefore only be shown if it is used. Otherwise, it will be hidden in the accounts/categories view."
+msgstr "Hai scelto di non visualizzare le categorie inutilizzate nella finestra di configurazione di KMyMoney. La categoria che hai appena creato sarà mostrata solo se utilizzata. Altrimenti, sarà nascosta nella vista conti/categorie."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid "Hidden categories"
+msgstr "Categorie nascoste"
+
+#: dialogs/knewaccountdlg.cpp:927
+#: dialogs/knewaccountdlg.cpp:979
+#, c-format
+msgid "Is a sub account of %1"
+msgstr "È un sottoconto di %1"
+
+#: dialogs/knewaccountdlg.cpp:1082
+msgid "Cannot add institution"
+msgstr "Non è possibile aggiungere l'istituto"
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid "This dialog does not allow to create new payees. Please pick a payee from the list."
+msgstr "La finestra non consente di creare nuovi beneficiari. Scegli un beneficiario dall'elenco."
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid "Payee creation"
+msgstr "Creazione beneficiario"
+
+#: dialogs/kimportdlg.cpp:69
+msgid "Use this to start the import operation"
+msgstr "Premi qui per iniziare l'operazione di importazione"
+
+#: dialogs/kimportdlg.cpp:110
+msgid ""
+"%1|Import files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|File importati\n"
+"%2|Tutti i file (*.*)"
+
+#: dialogs/kimportdlg.cpp:111
+msgid "Import File..."
+msgstr "Importa file..."
+
+#: dialogs/knewloanwizard.cpp:124
+msgid "Create a new category"
+msgstr "Crea una nuova categoria"
+
+#: dialogs/knewloanwizard.cpp:125
+msgid "Use this to open the new account editor"
+msgstr "Premi qui per aprire l'editor del nuovo conto"
+
+#: dialogs/knewloanwizard.cpp:129
+msgid "&Additional fees..."
+msgstr "Pagamenti &aggiuntivi..."
+
+#: dialogs/knewloanwizard.cpp:131
+msgid "Enter additional fees"
+msgstr "Inserisci tasse addizionali"
+
+#: dialogs/knewloanwizard.cpp:132
+msgid "Use this to add any additional fees other than principal and interest contained in your periodical payments."
+msgstr "Usalo per aggiungere ogni tassa addizionale che non sia capitale e interesse contenuti nei tuoi pagamenti periodici."
+
+#: dialogs/knewloanwizard.cpp:139
+msgid "Use this to create a new account to which the initial payment should be made"
+msgstr "Premi qui per creare un nuovo conto col quale sarà fatto il pagamento iniziale"
+
+#: dialogs/knewloanwizard.cpp:208
+msgid "To whom do you make payments?"
+msgstr "A chi effettui i pagamenti?"
+
+#: dialogs/knewloanwizard.cpp:209
+msgid "Payments to"
+msgstr "Pagamenti a"
+
+#: dialogs/knewloanwizard.cpp:214
+msgid "From whom do you expect payments?"
+msgstr "Da chi ti vengono effettuati pagamenti?"
+
+#: dialogs/knewloanwizard.cpp:215
+msgid "Payments from"
+msgstr "Pagamenti da"
+
+#: dialogs/knewloanwizard.cpp:233
+msgid "Please enter the date, the first payment for this loan was/is due."
+msgstr "Inserire la data in cui è stato/sarà effettuato il primo pagamento per questo prestito."
+
+#: dialogs/knewloanwizard.cpp:235
+msgid "Note: Consult the loan contract for details of the first due date. Keep in mind, that the first due date usually differs from the date the contract was signed"
+msgstr "Nota: Consulta il contratto del prestito per dettagli sulla data del primo pagamento. Ricorda che la data della prima rata di solito differisce dalla data di firma del contratto"
+
+#: dialogs/knewloanwizard.cpp:240
+msgid "Please enter the original loan amount in the field below or leave it empty to be calculated."
+msgstr "Inserire l'importo originale del prestito nel campo sottostante o lasciarlo vuoto per farlo calcolare automaticamente."
+
+#: dialogs/knewloanwizard.cpp:248
+msgid "Please enter the date, the first payment for this loan was/is due this year."
+msgstr "Inserire la data in cui è stato/sarà effettuato il primo pagamento per questo prestito durante l'anno corrente."
+
+#: dialogs/knewloanwizard.cpp:250
+msgid "Note: You can easily figure out the date of the first payment if you consult the last statement of last year."
+msgstr "Nota: Puoi facilmente dedurre la data del primo pagamento di quest'anno consultando la data dell'ultimo pagamento dell'anno scorso."
+
+#: dialogs/knewloanwizard.cpp:254
+msgid "Please enter the remaining loan amount of last years final statement in the field below. You should not leave this field empty."
+msgstr "Inserire l'importo residuo dell'anno scorso nel campo sottostante. Non bisognerebbe lasciare il campo vuoto."
+
+#: dialogs/knewloanwizard.cpp:311
+#: dialogs/knewloanwizard.cpp:326
+#: dialogs/knewloanwizard.cpp:341
+#: dialogs/knewloanwizard.cpp:357
+#: dialogs/knewloanwizard.cpp:373
+msgid "calculate"
+msgstr "calcola"
+
+#: dialogs/knewloanwizard.cpp:417
+msgid "borrowed"
+msgstr "preso in prestito"
+
+#: dialogs/knewloanwizard.cpp:419
+msgid "lend"
+msgstr "prestito"
+
+#: dialogs/knewloanwizard.cpp:423
+msgid "not assigned"
+msgstr "non assegnato"
+
+#: dialogs/knewloanwizard.cpp:430
+msgid "on reception"
+msgstr "al ricevimento"
+
+#: dialogs/knewloanwizard.cpp:432
+msgid "on due date"
+msgstr "alla data di scadenza"
+
+#: dialogs/knewloanwizard.cpp:471
+msgid "The loan wizard is unable to calculate two different values for your loan at the same time. Please enter a value for the %1 on this page or backup to the page where the current value to be calculated is defined and fill in a value."
+msgstr "L'assistente prestito non può calcolare due valori differenti per il tuo prestito nello stesso momento. Inserisci un valore per il %1 in questa pagina o salva alla pagina in cui è definito il valore attuale che deve essere calcolato e inserisci un valore."
+
+#: dialogs/knewloanwizard.cpp:500
+msgid "You selected, that payments have already been made towards this loan. This requires you to enter the loan amount exactly as found on your last statement."
+msgstr "Selezionato, tali pagamenti sono già stati eseguiti per questo prestito. Ciò richiede che tu abbia inserito l'esatto importo del prestito come risulta dalla tua ultima dichiarazione."
+
+#: dialogs/knewloanwizard.cpp:513
+msgid "interest rate"
+msgstr "tasso interesse"
+
+#: dialogs/knewloanwizard.cpp:522
+msgid "term"
+msgstr "scadenza"
+
+#: dialogs/knewloanwizard.cpp:532
+msgid "principal and interest"
+msgstr "Capitale e interesse"
+
+#: dialogs/knewloanwizard.cpp:743
+#, c-format
+msgid "The number of payments has been decremented and the final payment has been modified to %1."
+msgstr "Il numero di pagamenti è stato ridotto e il pagamento finale è stato modificato in %1."
+
+#: dialogs/knewloanwizard.cpp:751
+#: dialogs/knewloanwizard.cpp:771
+#, c-format
+msgid "The final payment has been modified to %1."
+msgstr "Il pagamento finale è stato modificato in %1."
+
+#: dialogs/knewloanwizard.cpp:802
+msgid "KMyMoney has calculated a final payment of %1 for this loan."
+msgstr "KMyMoney ha calcolato un pagamento finale di %1 di questo prestito."
+
+#: dialogs/knewloanwizard.cpp:817
+msgid "You have entered mis-matching information. Please backup to the appropriate page and update your figures or leave one value empty to let KMyMoney calculate it for you"
+msgstr "Hai inserito informazioni discordanti. Torna alla pagina appropriata e aggiorna le cifre o lascia un valore vuoto per lasciare che KMyMoney lo calcoli per te."
+
+#: dialogs/kfindtransactiondlg.cpp:230
+msgid "Warning: Filtering by Category will exclude all transfers from the results."
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:239
+msgid "(None)"
+msgstr "(Nessuno)"
+
+#: dialogs/kfindtransactiondlg.cpp:241
+msgid "Current selections: "
+msgstr "Selezioni attuali: "
+
+#: dialogs/kfindtransactiondlg.cpp:716
+msgid "Found %1 matching transactions (D %2 / P %3 = %4)"
+msgstr "Trovate %1 transazioni corrispondenti (D %2 / P %3 = %4)"
+
+#: dialogs/kfindtransactiondlg.cpp:719
+msgid "Found %1 matching transactions"
+msgstr "Trovate %1 transazioni corrispondenti"
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "The institution name field is empty. Please enter the name."
+msgstr "Il campo del nome istituto è vuoto. Inserire il nome."
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "Adding New Institution"
+msgstr "Aggiunta nuovo istituto"
+
+#: dialogs/kcsvprogressdlg.cpp:69
+msgid "C&lose"
+msgstr "&Chiudi"
+
+#: dialogs/kcsvprogressdlg.cpp:247
+msgid " of "
+msgstr " di "
+
+#: widgets/kmymoneypriceview.cpp:126
+msgid "Commodity"
+msgstr "Titolo"
+
+#: widgets/kmymoneypriceview.cpp:130
+msgid "Source"
+msgstr "Sorgente"
+
+#: widgets/kmymoneypriceview.cpp:143
+msgid "Price Options"
+msgstr "Opzioni prezzo"
+
+#: widgets/kmymoneypriceview.cpp:153
+msgid "Online Price Update..."
+msgstr "Aggiornamento in linea dei prezzi..."
+
+#: widgets/kmymoneycombo.cpp:472
+#: widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+msgid "From"
+msgstr "Da"
+
+#: widgets/transaction.cpp:668
+msgid "Transaction is missing a category assignment."
+msgstr "La transazione non è assegnata a una categoria."
+
+#: widgets/transaction.cpp:671
+msgid "The transaction has a missing assignment of <b>%1</b>."
+msgstr "La transazione ha un assegnamento mancante di <b>%1</b>."
+
+#: widgets/transaction.cpp:874
+msgid "Sell"
+msgstr "Vendi"
+
+#: widgets/transaction.cpp:876
+msgid "Buy"
+msgstr "Acquista"
+
+#: widgets/kmymoneycombo.cpp:520
+#: widgets/transaction.cpp:879
+#: widgets/transaction.cpp:1447
+msgid "Dividend"
+msgstr "Dividendo"
+
+#: widgets/kmymoneycombo.cpp:518
+#: widgets/transaction.cpp:881
+#: widgets/transaction.cpp:1453
+msgid "Yield"
+msgstr "Prodotto"
+
+#: widgets/transaction.cpp:886
+#: widgets/transaction.cpp:1473
+msgid "Activity"
+msgstr "Attività"
+
+#: widgets/transaction.cpp:887
+msgid "Investment transaction"
+msgstr "Transazione d'investimento"
+
+#: widgets/transaction.cpp:1021
+#: widgets/transaction.cpp:1114
+#: widgets/transaction.cpp:1165
+msgid "*** UNASSIGNED ***"
+msgstr "*** NON ASSEGNATO ***"
+
+#: widgets/kmymoneycombo.cpp:517
+#: widgets/transaction.cpp:1435
+msgid "Add shares"
+msgstr "Aggiungi quote"
+
+#: widgets/kmymoneycombo.cpp:516
+#: widgets/transaction.cpp:1438
+msgid "Remove shares"
+msgstr "Rimuovi quote"
+
+#: widgets/kmymoneycombo.cpp:522
+#: widgets/transaction.cpp:1441
+msgid "Buy shares"
+msgstr "Compra quote"
+
+#: widgets/kmymoneycombo.cpp:521
+#: widgets/transaction.cpp:1444
+msgid "Sell shares"
+msgstr "Vendi quote"
+
+#: widgets/transaction.cpp:1450
+msgid "Reinvest Dividend"
+msgstr "Reinvesti dividendo"
+
+#: widgets/kmymoneycombo.cpp:515
+#: widgets/transaction.cpp:1456
+msgid "Split shares"
+msgstr "Dividi quote"
+
+#: widgets/transaction.cpp:1515
+msgid "Ratio"
+msgstr "Indice"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:241
+msgid "%1 Bills."
+msgstr "%1 addebiti."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:257
+msgid "%1 Deposits."
+msgstr "%1 depositi."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:273
+msgid "%1 Transfers."
+msgstr "%1 trasferimenti."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:355
+msgid "st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-th-th-th-th-th-st"
+msgstr "st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-th-th-th-th-th-st"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:57
+#: widgets/kmymoneyaccounttreeforecast.cpp:84
+msgid "Current"
+msgstr "Attuale"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:72
+#: widgets/kmymoneyaccounttreeforecast.cpp:93
+msgid "Total variation"
+msgstr "Variazione totale"
+
+#: widgets/stdtransactionmatched.cpp:130
+msgid "KMyMoney has matched a downloaded transaction with a manually entered one (result above)"
+msgstr ""
+
+#: widgets/stdtransactionmatched.cpp:138
+#, fuzzy
+msgid "Bank entry:"
+msgstr "Documento vuoto"
+
+#: widgets/stdtransactionmatched.cpp:166
+#, fuzzy
+msgid "Your entry:"
+msgstr "Il tuo nome:"
+
+#: widgets/kbudgetvalues.cpp:187
+msgid "You have entered budget values using a different base which would result in a monthly budget of <b>%1</b>. Should this value be used to fill the monthly budget?"
+msgstr "Hai inserito valori di budget usando una base differente che porterebbe a un budget mensile di <b>%1</b>. Questo valore dovrebbe essere usato per riempire il budget mensile?"
+
+#: widgets/kbudgetvalues.cpp:187
+#: widgets/kbudgetvalues.cpp:206
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"_: Auto assignment (caption)\n"
+"Auto assignment"
+msgstr "Assegnazione automatica"
+
+#: widgets/kbudgetvalues.cpp:206
+msgid "You have entered budget values using a different base which would result in a yearly budget of <b>%1</b>. Should this value be used to fill the monthly budget?"
+msgstr "Hai inserito valori di budget usando una base differente che porterebbe a un budget annuale di <b>%1</b>. Questo valore dovrebbe essere usato per riempire il budget mensile?"
+
+#: widgets/kbudgetvalues.cpp:225
+msgid "You have entered budget values using a different base which would result in an individual monthly budget of <b>%1</b>. Should this value be used to fill the monthly budgets?"
+msgstr "Hai inserito valori di budget usando una base differente che porterebbe a un budget mensile individuale di <b>%1</b>. Questo valore dovrebbe essere usato per riempire il budget mensile?"
+
+#: widgets/kmymoneybriefschedule.cpp:62
+msgid "Use this button to skip this transaction"
+msgstr "Premi qui per saltare questa transazione"
+
+#: widgets/kmymoneybriefschedule.cpp:67
+msgid "Record this transaction into the register"
+msgstr "Regista questa transazione nel registro"
+
+#: widgets/kmymoneybriefschedule.cpp:68
+msgid "Use this button to record this transaction"
+msgstr "Premi qui per registrare questa transazione"
+
+#: widgets/kmymoneybriefschedule.cpp:96
+msgid "%1 of %2"
+msgstr "%1 di %2"
+
+#: widgets/kmymoneybriefschedule.cpp:109
+msgid "Payment on %1 for %2 with %3 transactions remaining occuring %4."
+msgstr "Pagamento su %1 per %2 con %3 transazioni rimaste su %4."
+
+#: widgets/kmymoneybriefschedule.cpp:115
+msgid "Payment on %1 for %2 occuring %4."
+msgstr "Pagamento su %1 per %2 su %4."
+
+#: widgets/kmymoneybriefschedule.cpp:136
+msgid "%1 days overdue (%2 occurences)."
+msgstr "%1 giorni in ritardo (%2 occorrenze)."
+
+#: widgets/register.cpp:55
+msgid "Post date"
+msgstr "Data emissione"
+
+#: widgets/register.cpp:56
+msgid "Date entered"
+msgstr "Data inserita"
+
+#: widgets/register.cpp:60
+msgid "Entry order"
+msgstr "Ordine di inserimento"
+
+#: widgets/register.cpp:63
+msgid "Reconcile state"
+msgstr "Stato riconciliazione"
+
+#: widgets/register.cpp:440
+msgid ""
+"_: Deposits onto account\n"
+"Deposits"
+msgstr "Depositi"
+
+#: widgets/register.cpp:442
+msgid ""
+"_: Payments towards credit card\n"
+"Payments"
+msgstr "Pagamenti"
+
+#: widgets/register.cpp:446
+msgid ""
+"_: Payments made from account\n"
+"Payments"
+msgstr "Pagamenti"
+
+#: widgets/register.cpp:448
+msgid ""
+"_: Payments made with credit card\n"
+"Charges"
+msgstr "Addebiti"
+
+#: widgets/register.cpp:736
+msgid ""
+"_: Payment made from account\n"
+"Payment"
+msgstr "Pagamento"
+
+#: widgets/register.cpp:737
+msgid ""
+"_: Deposit into account\n"
+"Deposit"
+msgstr "Deposito"
+
+#: widgets/register.cpp:813
+msgid ""
+"_: Payment made with credit card\n"
+"Charge"
+msgstr "Addebito"
+
+#: widgets/register.cpp:814
+msgid ""
+"_: Payment towards credit card\n"
+"Payment"
+msgstr "Pagamento"
+
+#: widgets/register.cpp:818
+#: widgets/register.cpp:824
+msgid ""
+"_: Decrease of asset/liability value\n"
+"Decrease"
+msgstr "Riduci"
+
+#: widgets/register.cpp:819
+#: widgets/register.cpp:823
+msgid ""
+"_: Increase of asset/liability value\n"
+"Increase"
+msgstr "Aumenta"
+
+#: widgets/register.cpp:2280
+msgid "Prior transactions possibly filtered"
+msgstr "Transazioni precedenti probabilmente filtrate"
+
+#: widgets/register.cpp:2284
+msgid "Last reconciliation"
+msgstr "Ultima riconciliazione"
+
+#: widgets/register.cpp:2291
+#, c-format
+msgid "Online Statement Balance: %1"
+msgstr "Estratto conto in linea: %1"
+
+#: widgets/register.cpp:2295
+msgid "This year"
+msgstr "Quest'anno"
+
+#: widgets/kmymoneycombo.cpp:674
+#: widgets/register.cpp:2296
+msgid "Last month"
+msgstr "Ultimo mese"
+
+#: widgets/register.cpp:2297
+msgid "This month"
+msgstr "Questomese"
+
+#: widgets/register.cpp:2298
+msgid "Last week"
+msgstr "Ultima settimana"
+
+#: widgets/register.cpp:2299
+msgid "This week"
+msgstr "Questa settimana"
+
+#: widgets/register.cpp:2300
+msgid "Yesterday"
+msgstr "Ieri"
+
+#: widgets/kmymoneycombo.cpp:666
+#: widgets/register.cpp:2301
+msgid "Today"
+msgstr "Oggi"
+
+#: widgets/register.cpp:2302
+#: widgets/register.cpp:2307
+msgid "Future transactions"
+msgstr "Transazioni future"
+
+#: widgets/register.cpp:2303
+msgid "Next week"
+msgstr "Settimana successiva"
+
+#: widgets/kmymoneycalendar.cpp:131
+#: widgets/register.cpp:2304
+msgid "Next month"
+msgstr "Mese successivo"
+
+#: widgets/kmymoneycombo.cpp:670
+#: widgets/register.cpp:2315
+msgid "Current fiscal year"
+msgstr "Anno fiscale corrente"
+
+#: widgets/register.cpp:2316
+msgid "Previous fiscal year"
+msgstr "Anno fiscale precedente"
+
+#: widgets/register.cpp:2317
+msgid "Next fiscal year"
+msgstr "Anno fiscale successivo"
+
+#: widgets/register.cpp:2349
+msgid ""
+"_: Unknown payee\n"
+"Unknown"
+msgstr "Sconosciuto"
+
+#: widgets/register.cpp:2368
+msgid ""
+"_: Unknown category\n"
+"Unknown"
+msgstr "Sconosciuta"
+
+#: widgets/register.cpp:2387
+msgid ""
+"_: Unknown security\n"
+"Unknown"
+msgstr "Sconosciuto"
+
+#: widgets/klistviewsearchline.cpp:249
+msgid "Search Columns"
+msgstr "Colonne di ricerca"
+
+#: widgets/klistviewsearchline.cpp:251
+msgid "All Visible Columns"
+msgstr "Tutte le colonne visibili"
+
+#: widgets/klistviewsearchline.cpp:266
+msgid ""
+"_: Column number %1\n"
+"Column No. %1"
+msgstr "Colonna n. %1"
+
+#: widgets/klistviewsearchline.cpp:461
+#: widgets/registersearchline.cpp:286
+msgid "S&earch:"
+msgstr "C&erca:"
+
+#: widgets/kmymoneyaccountselector.cpp:110
+#: widgets/kmymoneyaccountselector.cpp:371
+msgid "Income categories"
+msgstr "Categorie di entrata"
+
+#: widgets/kmymoneyaccountselector.cpp:349
+#: widgets/kmymoneyaccountselector.cpp:350
+msgid "Favorites"
+msgstr "Preferiti"
+
+#: widgets/kmymoneyaccountselector.cpp:357
+msgid "Asset accounts"
+msgstr "Conti attività"
+
+#: widgets/kmymoneyaccountselector.cpp:364
+msgid "Liability accounts"
+msgstr "Conti passività"
+
+#: widgets/kmymoneyaccountselector.cpp:381
+msgid "Expense categories"
+msgstr "Categorie di uscita"
+
+#: widgets/kmymoneyaccountselector.cpp:391
+msgid "Equity accounts"
+msgstr "Conti di capitale"
+
+#: widgets/kmymoneyaccounttreebase.cpp:120
+msgid "Total Balance"
+msgstr "Saldo totale"
+
+#: widgets/kmymoneyaccounttreebase.cpp:124
+msgid "Total Value"
+msgstr "Valore totale"
+
+#: widgets/registersearchline.cpp:75
+msgid ""
+"_: label for status combo\n"
+"Stat&us"
+msgstr "Stat&o"
+
+#: widgets/registersearchline.cpp:79
+msgid "Any status"
+msgstr "Qualsiasi stato"
+
+#: widgets/registersearchline.cpp:80
+msgid "Imported"
+msgstr "Importato"
+
+#: widgets/registersearchline.cpp:81
+msgid "Matched"
+msgstr "Verificato"
+
+#: widgets/registersearchline.cpp:82
+msgid "Erroneous"
+msgstr "Errato"
+
+#: widgets/registersearchline.cpp:83
+msgid "Not marked"
+msgstr "Non segnato"
+
+#: widgets/kmymoneyaccounttree.cpp:54
+msgid ""
+"_: Column heading for category in tax report\n"
+"Tax"
+msgstr "Imposta"
+
+#: widgets/kmymoneyaccounttree.cpp:58
+msgid ""
+"_: Column heading for VAT category\n"
+"VAT"
+msgstr "IVA"
+
+#: widgets/kmymoneywizard.cpp:101
+msgid "Continue with next page"
+msgstr "Continua alla pagina successiva"
+
+#: widgets/kmymoneywizard.cpp:103
+msgid "Finish wizard"
+msgstr "Termina procedura guidata"
+
+#: widgets/kmymoneywizard.cpp:121
+msgid "&Back"
+msgstr "In&dietro"
+
+#: widgets/kmymoneywizard.cpp:122
+msgid "&Next"
+msgstr "Ava&nti"
+
+#: widgets/kmymoneywizard.cpp:123
+msgid "&Finish"
+msgstr "&Fine"
+
+#: widgets/kmymoneywizard.cpp:274
+msgid "Step %1 of %2"
+msgstr "Passo %1 di %2"
+
+#: widgets/kmymoneydateinput.cpp:235
+msgid ""
+"_: Enter todays date into date input widget\n"
+"T"
+msgstr "T"
+
+#: widgets/transactionform.cpp:302
+msgid "&Deposit"
+msgstr "&Deposito"
+
+#: widgets/transactionform.cpp:304
+#: widgets/transactionform.cpp:313
+#: widgets/transactionform.cpp:323
+#: widgets/transactionform.cpp:333
+msgid "&Transfer"
+msgstr "&Trasferimento"
+
+#: widgets/transactionform.cpp:306
+msgid "&Withdrawal"
+msgstr "&Prelievo"
+
+#: widgets/transactionform.cpp:311
+msgid "&Payment"
+msgstr "&Pagamento"
+
+#: widgets/transactionform.cpp:315
+msgid "&Charge"
+msgstr "&Carica"
+
+#: widgets/transactionform.cpp:321
+#: widgets/transactionform.cpp:335
+msgid "&Decrease"
+msgstr "&Riduci"
+
+#: widgets/transactionform.cpp:325
+#: widgets/transactionform.cpp:331
+msgid "&Increase"
+msgstr "&Aumenta"
+
+#: widgets/kmymoneyscheduledcalendar.cpp:42
+msgid "Select Schedules"
+msgstr "Seleziona pianificazioni"
+
+#: widgets/kmymoneycalendar.cpp:108
+msgid "Select Style"
+msgstr "Seleziona stile"
+
+#: widgets/kmymoneycalendar.cpp:128
+msgid "Choose Style"
+msgstr "Scegli stile"
+
+#: widgets/kmymoneycalendar.cpp:129
+msgid "Next year"
+msgstr "Anno successivo"
+
+#: widgets/kmymoneycalendar.cpp:130
+msgid "Previous year"
+msgstr "Anno precedente"
+
+#: widgets/kmymoneycalendar.cpp:132
+msgid "Previous month"
+msgstr "Mese precedente"
+
+#: widgets/kmymoneycalendar.cpp:133
+msgid "Select a week"
+msgstr "Seleziona una settimana"
+
+#: widgets/kmymoneycalendar.cpp:134
+msgid "Select a month"
+msgstr "Seleziona un mese"
+
+#: widgets/kmymoneycalendar.cpp:135
+msgid "Select a year"
+msgstr "Seleziona un anno"
+
+#: widgets/kmymoneycalendar.cpp:249
+msgid "Week XX"
+msgstr "Settimana XX"
+
+#: widgets/kmymoneycalendar.cpp:264
+#: widgets/kmymoneycalendar.cpp:300
+#, c-format
+msgid "Week %1"
+msgstr "Settimana %1"
+
+#: widgets/rc.cpp:1
+msgid "Account Types"
+msgstr "Tipi di conto"
+
+#: widgets/rc.cpp:3
+msgid "Detailed description"
+msgstr "Descrizione dettagliata"
+
+#: widgets/rc.cpp:18
+msgid "Period"
+msgstr "Periodo"
+
+#: widgets/rc.cpp:21
+msgid "Individual"
+msgstr "Individuale"
+
+#: widgets/rc.cpp:23
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Acces to the settings is disabled if <b>GPG</b> could not be detected on your system. In this case, please make sure that <b>GPG</b> is working properly for the current user.<p>\n"
+"The <i>Recovery encryption</i> group is only accessible, if the necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is found."
+msgstr ""
+"Questa pagina di permette di impostare i parametri per il salvataggio cifrato dei tuoi file di dati <b>KMyMoney</b> tramite <b>GPG</b>.<p>\n"
+"L'accesso alle impostazioni è disabilitato se <b>GPG</b> non è stato trovato sul tuo sistema. Nel caso in cui <b>GPG</b> sia installato, ma non sia stato trovato, controllare che l'eseguibile <b>GPG</b> sia raggiungibile dall'utente corrente.<p>\n"
+"Il gruppo <i>Recupera cifratura</i> è disponibile solo se la chiave necessaria per <b>kmymoney-recover@users.sourceforge.net</b> con l'id 0x8AFDDC8E viene trovata."
+
+#: widgets/rc.cpp:26
+msgid "Enter the id of the key you want to use for data encryption. This can either be an e-mail address or the hexadecimal key id. In case of the key id don't forget the leading <i>0x</i>."
+msgstr "Inserisci l'id della chiave che vuoi usare per la cifratura dei dati. Questo può essere un indirizzo email o l'id esadecimale della chiave. In quest'ultimo caso non dimenticare lo <i>0x</i> iniziale."
+
+#: widgets/rc.cpp:27
+msgid "User ID"
+msgstr "ID utente"
+
+#: widgets/rc.cpp:29
+msgid "Recovery encryption"
+msgstr "Ripristino cifratura"
+
+#: widgets/rc.cpp:30
+msgid "Also encrypt with kmymoney-recover key"
+msgstr "Cifra anche con la chiave di recupero-kmymoney"
+
+#: widgets/rc.cpp:32
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only the core KMyMoney developers are in posession of the respective private key required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and cannot access your data anymore. With this option activated, the KMyMoney developers can decrypt the data and supply you with it in a readable form. Please be prepared, that you have to answer a few detailed questions about the contents of your data before we will send it out."
+msgstr ""
+"Puoi specificare di cifrare i dati anche con la chiave di recupero di KMyMoney. Solo gli sviluppatori principali di KMyMoney sono in possesso delle rispettive chiavi private necessarie per riuscire a tornare a leggere tali dati cifrati.<p>\n"
+"\n"
+"Questo meccanismo è reso disponibile nel caso in cui tu perda la chiave, non riuscendo più ad accedere ai tuoi dati. Attivando questa opzione, gli sviluppatori KMyMoney possono decifrare i dati e fornirteli in una forma leggibile. Preparati, dovrai rispondere ad alcune domande dettagliate sui contenuti dei tuoi dati prima che ti vengano rispediti."
+
+#: widgets/rc.cpp:51
+msgid "PriceInfo"
+msgstr "PriceInfo"
+
+#: widgets/rc.cpp:52
+msgid "Report Tab"
+msgstr "Scheda Report"
+
+#: widgets/rc.cpp:53
+msgid "<p>On this tab, you set the basic properties of this report.</p>"
+msgstr "<p>In questa cartella è possibile impostare le proprietà fondamentali per questo report.</p>"
+
+#: widgets/rc.cpp:54
+msgid "Report Name"
+msgstr "Nome report"
+
+#: widgets/rc.cpp:55
+msgid "<p>Choose a name for this report.</p>"
+msgstr "<p>Scegli un nome per questo report.</p>"
+
+#: widgets/rc.cpp:57
+msgid "<p>Enter a comment to help you remember the details of this report.</p>"
+msgstr "<p>Inserisci un commento che aiuti a ricordare i dettagli di questo report.</p>"
+
+#: widgets/rc.cpp:58
+msgid "Convert values to base currency"
+msgstr "Converti i valori alla valuta base"
+
+#: widgets/rc.cpp:59
+msgid ""
+"_: Convert 'em!!\n"
+"<p>Select this option to convert all values in the report to your base currency.</p><p>Leave it unchecked if you'd like to see values in their original currency.</p><p>If currencies are not converted, then subtotals will not be shown.</p>"
+msgstr "<p>Seleziona questa opzione per convertire tutti i valori del report nella valuta di base.</p><p>Lasciala non selezionata se desideri vedere i valori nella valuta originaria.</p><p>Se le valute non sono convertite, i sottototali non saranno mostrati.</p>"
+
+#: widgets/rc.cpp:60
+msgid "Mark as a favorite report"
+msgstr "Segna come report preferito"
+
+#: widgets/rc.cpp:61
+msgid "<p>Select this option to notate this report as one of your favorites.</p><p>All your favorite reports are grouped in one place on the report list for easy access.</p>"
+msgstr "<p>Seleziona questa opzione per segnare questo report come uno dei tuoi preferiti.</p><p>Tutti i tuoi report preferiti sono raggruppati in un unico posto nella lista dei report, per un accesso più rapido.</p>"
+
+#: widgets/rc.cpp:62
+#: widgets/rc.cpp:88
+msgid "Rows/Columns Tab"
+msgstr "Righe e colonne"
+
+#: widgets/rc.cpp:63
+#: widgets/rc.cpp:89
+msgid "<p>On this tab, you configure how you'd like the rows and columns to be selected and organized.</p>"
+msgstr "<p>In questa cartella, configuri come vuoi che siano selezionate e organizzate le righe e le colonne.</p>"
+
+#: widgets/rc.cpp:69
+#: widgets/rc.cpp:81
+msgid "<p>Choose what kind of accounts to display as the rows of this report.</p>"
+msgstr "<p>Scegli quale tipo di conti visualizzare nelle righe di questo report.</p>"
+
+#: widgets/rc.cpp:71
+msgid "Columns"
+msgstr "Colonne"
+
+#: widgets/rc.cpp:75
+msgid "Bi-Monthly"
+msgstr "Bimestrale"
+
+#: widgets/rc.cpp:78
+msgid "<p>Choose how large of a time period each column should encompass</p>"
+msgstr "<p>Scegli la durata temporale che deve essere compresa da ogni colonna</p>"
+
+#: widgets/rc.cpp:79
+msgid "Income & Expenses"
+msgstr "Entrate e uscite"
+
+#: widgets/rc.cpp:80
+msgid "Assets & Liabilities"
+msgstr "Attività e passività"
+
+#: widgets/rc.cpp:82
+msgid "Rows"
+msgstr "Righe"
+
+#: widgets/rc.cpp:83
+msgid "Show totals column"
+msgstr "Mostra colonna dei totali"
+
+#: widgets/rc.cpp:84
+msgid "Average days"
+msgstr "Media giorni"
+
+#: widgets/rc.cpp:85
+msgid "Include scheduled transactions"
+msgstr "Includi transazioni pianificate"
+
+#: widgets/rc.cpp:86
+msgid "Include transfers"
+msgstr "Includi trasferimenti"
+
+#: widgets/rc.cpp:87
+msgid "Include unused accounts/categories"
+msgstr "Includi conti/categorie inutilizzate"
+
+#: widgets/rc.cpp:90
+msgid "Organize by:"
+msgstr "Organizza per:"
+
+#: widgets/rc.cpp:92
+msgid "Top Categories"
+msgstr "Categorie principali"
+
+#: widgets/rc.cpp:95
+msgid "Top Accounts"
+msgstr "Conti principali"
+
+#: widgets/rc.cpp:98
+msgid "<p>Choose how to group the transactions in this report</p>"
+msgstr "<p>Scegli come raggruppare le transazioni in questo report</p>"
+
+#: widgets/rc.cpp:99
+msgid "Show Columns"
+msgstr "Colonne visualizzate"
+
+#: widgets/rc.cpp:100
+msgid "<p>Choose which columns should be shown in the report.</p><p>The date and transaction amount are always shown.</p>"
+msgstr "<p>Scegli quali colonne dovranno essere mostrate nel report.</p><p>La data e il totale della transazione sono sempre mostrate.</p>"
+
+#: widgets/rc.cpp:102
+msgid "<p>Select this option to show the Memo column</p>"
+msgstr "<p>Seleziona questa opzione per visualizzare la colonna Note</p>"
+
+#: widgets/rc.cpp:104
+msgid "<p>Select this option to show the Shares column for investments</p>"
+msgstr "<p>Seleziona questa opzione per visualizzare la colonna Quote per gli investimenti</p>"
+
+#: widgets/rc.cpp:106
+msgid "<p>Select this option to show the Price column for investments</p>"
+msgstr "<p>Seleziona questa opzione per visualizzare la colonna Prezzo per gli investimenti</p>"
+
+#: widgets/rc.cpp:108
+msgid "<p>Select this option to show the Reconciled column</p>"
+msgstr "<p>Seleziona questa opzione per visualizzare la colonna Controllato</p>"
+
+#: widgets/rc.cpp:110
+msgid "<p>Select this option to show the Account column</p>"
+msgstr "<p>Seleziona questa opzione per visualizzare la colonna Conto</p>"
+
+#: widgets/rc.cpp:112
+msgid "<p>Select this option to show the Number column</p>"
+msgstr "<p>Seleziona questa opzione per visualizzare la colonna Numero</p>"
+
+#: widgets/rc.cpp:114
+msgid "<p>Select this option to show the Payee column</p>"
+msgstr "<p>Seleziona questa opzione per visualizzare la colonna Beneficiario</p>"
+
+#: widgets/rc.cpp:116
+msgid "<p>Select this option to show the Category column</p>"
+msgstr "<p>Seleziona questa opzione per visualizzare la colonna Categoria</p>"
+
+#: widgets/rc.cpp:118
+msgid "<p>Select this option to show the Action column</p>"
+msgstr "<p>Seleziona questa opzione per visualizzare la colonna Azione</p>"
+
+#: widgets/rc.cpp:120
+msgid "<p>Select this option to show the Running balance column</p>"
+msgstr "<p>Seleziona questa opzione per mostrare la colonna Saldo corrente</p>"
+
+#: widgets/rc.cpp:121
+msgid "Include only Loan accounts"
+msgstr "Includi solo i conti di prestito"
+
+#: widgets/rc.cpp:122
+msgid "Include only Investment accounts"
+msgstr "Includi solo i conti Investimento"
+
+#: widgets/rc.cpp:123
+#: widgets/rc.cpp:127
+msgid "<p>Check this box to include only those categories which have been marked to \"Include on Tax Reports\"</p>"
+msgstr "<p>Marca questa casella per includere solo le categorie che sono state segnate per \"Includi nei report imposte\"</p>"
+
+#: widgets/rc.cpp:124
+msgid "Hide Split Transaction Details"
+msgstr "Nascondi dettagli della transazione suddivisa"
+
+#: widgets/rc.cpp:125
+msgid "Do not display the individual transactions that make up a split transaction"
+msgstr ""
+
+#: widgets/rc.cpp:126
+msgid "Include only Tax categories"
+msgstr "Includi solo le categorie delle Imposte"
+
+#: widgets/rc.cpp:128
+msgid "Chart Tab"
+msgstr "Scheda del grafico"
+
+#: widgets/rc.cpp:129
+msgid "<p>On this tab, you configure the chart drawn forthis report.</p>"
+msgstr "<p>In questa scheda, è possibile configurare il tracciamento del grafico per questo report.</p>"
+
+#: widgets/rc.cpp:130
+msgid "Chart Type"
+msgstr "Tipo di grafico"
+
+#: widgets/rc.cpp:131
+msgid "<p>Select what form you would like the chart to be drawn as.</p>"
+msgstr "<p>Seleziona la forma che dovrà assumere il grafico.</p>"
+
+#: widgets/rc.cpp:132
+msgid "Line"
+msgstr "Linee"
+
+#: widgets/rc.cpp:133
+msgid "Bar"
+msgstr "Barre"
+
+#: widgets/rc.cpp:134
+msgid "Stacked Bar"
+msgstr "Barre sovrapposte"
+
+#: widgets/rc.cpp:135
+msgid "Pie"
+msgstr "Torta"
+
+#: widgets/rc.cpp:136
+msgid "Ring"
+msgstr "Anello"
+
+#: widgets/rc.cpp:137
+msgid "Show grid lines"
+msgstr "Mostra linee della griglia"
+
+#: widgets/rc.cpp:138
+msgid "<p>Select this option to show horizontal and vertical grid lines on the chart.</p>"
+msgstr "<p>Seleziona questa opzione per mostrare le linee orizzontali e verticali della griglia del grafico.</p>"
+
+#: widgets/rc.cpp:139
+msgid "Draw values on chart"
+msgstr "Disegna i valori sul grafico"
+
+#: widgets/rc.cpp:140
+msgid "<p>Select this option to draw the numeric values for data points next to their plot location.</p>"
+msgstr "<p>Seleziona questa opzione per visualizzare i valori numerici accanto ai punti del grafico.</p>"
+
+#: widgets/rc.cpp:141
+msgid "Show as chart by default"
+msgstr "Mostra un grafico in modo predefinito"
+
+#: widgets/rc.cpp:142
+msgid "<p>Select this option to cause the report to be shown as a chart when you first open the report. Otherwise, it will come up as a text report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:143
+msgid "Line width"
+msgstr "Spessore della linea"
+
+#: widgets/rc.cpp:144
+msgid "<p>Select what width should be used to draw the line on the chart</p>"
+msgstr "<p>Seleziona lo spessore utilizzato per disegnare lla linea del grafico.</p>"
+
+#: widgets/rc.cpp:145
+msgid "ReportControl"
+msgstr "ReportControl"
+
+#: widgets/rc.cpp:149
+msgid "Configure this report"
+msgstr "Configura questo report"
+
+#: widgets/rc.cpp:151
+msgid "Create a new report based on this one"
+msgstr "Crea un nuovo report basato su questo"
+
+#: widgets/rc.cpp:153
+msgid "Copy this report to the clipboard"
+msgstr "Copia questo report negli appunti"
+
+#: widgets/rc.cpp:155
+msgid "Export this report as an HTML or CSV file"
+msgstr "Esporta questo report come HTML o CSV"
+
+#: widgets/rc.cpp:157
+msgid "Permanently delete this report"
+msgstr "Elimina definitivamente questo report"
+
+#: widgets/rc.cpp:159
+msgid "Close this window"
+msgstr "Chiudi questa finestra"
+
+#: widgets/rc.cpp:162
+msgid "n of n"
+msgstr "n di n"
+
+#: widgets/rc.cpp:166
+msgid "Account:"
+msgstr "Conto:"
+
+#: widgets/rc.cpp:168
+msgid "Enter..."
+msgstr "Inserisci..."
+
+#: widgets/rc.cpp:171
+msgid "TransactionSortOptionDecl"
+msgstr "TransactionSortOptionDecl"
+
+#: widgets/rc.cpp:173
+msgid "Sort order"
+msgstr "Ordinamento"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Sunday\n"
+"Sun"
+msgstr "Dom"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Saturday\n"
+"Sat"
+msgstr "Sab"
+
+#: widgets/kmymoneydatetbl.cpp:171
+#: widgets/kmymoneydatetbl.cpp:178
+msgid "Week %1 for year %2."
+msgstr "Settimana %1 dell'anno %2."
+
+#: widgets/kmymoneycombo.cpp:417
+msgid "ATM"
+msgstr "ATM"
+
+#: widgets/kmymoneycombo.cpp:418
+msgid "Withdrawal"
+msgstr "Prelievo"
+
+#: widgets/kmymoneycombo.cpp:421
+msgid "Cheque"
+msgstr "Assegno"
+
+#: widgets/kmymoneycombo.cpp:469
+msgid ""
+"_: Activity for expense categories\n"
+"Paid"
+msgstr "Pagata"
+
+#: widgets/kmymoneycombo.cpp:470
+msgid ""
+"_: Activity for income categories\n"
+"Received"
+msgstr "Ricevuta"
+
+#: widgets/kmymoneycombo.cpp:519
+msgid "Reinvest dividend"
+msgstr "Reinvesti dividendo"
+
+#: widgets/kmymoneycombo.cpp:664
+msgid "All dates"
+msgstr "Tutte le date"
+
+#: widgets/kmymoneycombo.cpp:665
+msgid "As of today"
+msgstr "Fino ad oggi"
+
+#: widgets/kmymoneycombo.cpp:667
+msgid "Current month"
+msgstr "Mese corrente"
+
+#: widgets/kmymoneycombo.cpp:668
+msgid "Current quarter"
+msgstr "Quarto attuale"
+
+#: widgets/kmymoneycombo.cpp:669
+msgid "Current year"
+msgstr "Anno corrente"
+
+#: widgets/kmymoneycombo.cpp:671
+msgid "Month to date"
+msgstr "Mese alla data"
+
+#: widgets/kmymoneycombo.cpp:672
+msgid "Year to date"
+msgstr "Anno alla data"
+
+#: widgets/kmymoneycombo.cpp:673
+msgid "Year to month"
+msgstr "Anno al mese"
+
+#: widgets/kmymoneycombo.cpp:675
+msgid "Last year"
+msgstr "Ultimo anno"
+
+#: widgets/kmymoneycombo.cpp:676
+msgid "Last fiscal year"
+msgstr "Ultimo anno fiscale"
+
+#: widgets/kmymoneycombo.cpp:677
+msgid "Last 7 days"
+msgstr "Ultimi 7 giorni"
+
+#: widgets/kmymoneycombo.cpp:678
+msgid "Last 30 days"
+msgstr "Ultimi 30 giorni"
+
+#: widgets/kmymoneycombo.cpp:679
+msgid "Last 3 months"
+msgstr "Ultimi 3 mesi"
+
+#: widgets/kmymoneycombo.cpp:680
+msgid "Last quarter"
+msgstr "Ultimo quarto"
+
+#: widgets/kmymoneycombo.cpp:681
+msgid "Last 6 months"
+msgstr "Ultimi 6 mesi"
+
+#: widgets/kmymoneycombo.cpp:682
+msgid "Last 11 months"
+msgstr "Ultimi 11 mesi"
+
+#: widgets/kmymoneycombo.cpp:683
+msgid "Last 12 months"
+msgstr "Ultimi 12 mesi"
+
+#: widgets/kmymoneycombo.cpp:684
+msgid "Next 7 days"
+msgstr "Prossimi 7 giorni"
+
+#: widgets/kmymoneycombo.cpp:685
+msgid "Next 30 days"
+msgstr "Prossimi 30 giorni"
+
+#: widgets/kmymoneycombo.cpp:686
+msgid "Next 3 months"
+msgstr "Prossimi 3 mesi"
+
+#: widgets/kmymoneycombo.cpp:687
+msgid "Next quarter"
+msgstr "Prossimo quarto"
+
+#: widgets/kmymoneycombo.cpp:688
+msgid "Next 6 months"
+msgstr "Prossimi 6 mesi"
+
+#: widgets/kmymoneycombo.cpp:689
+msgid "Next 12 months"
+msgstr "Prossimi 12 mesi"
+
+#: widgets/kmymoneycombo.cpp:690
+msgid "Last 3 months to next 3 months"
+msgstr "Ultimi 3 mesi ai successivi 3 mesi"
+
+#: widgets/kmymoneycombo.cpp:691
+msgid "User defined"
+msgstr "Definito dall'utente"
+
+#~ msgctxt "Duplicate split"
+#~ msgid "Qt::CTRL+c"
+#~ msgstr "Qt::CTRL+c"
+#~ msgid "Continue"
+#~ msgstr "Continua"
+#~ msgid "&Help"
+#~ msgstr "&Aiuto"
+#~ msgid "&OK"
+#~ msgstr "&OK"
+#~ msgctxt "Split transaction (category replacement)"
+#~ msgid "Split transaction"
+#~ msgstr "Dividi transazione"
+#~ msgid "&Delete"
+#~ msgstr "Eli&mina"
+#~ msgid "&Edit"
+#~ msgstr "&Modifica"
+#~ msgid "&Close"
+#~ msgstr "&Chiudi"
+#~ msgctxt "Dialog caption for 'Enter or schedule' dialog"
+#~ msgid "Enter or schedule?"
+#~ msgstr "Inserire o pianificare?"
+#~ msgctxt "default price mode"
+#~ msgid "<default>"
+#~ msgstr "<predefinito>"
+#~ msgid "one month"
+#~ msgid_plural "%n months"
+#~ msgstr[0] "un mese"
+#~ msgstr[1] "%n mesi"
+#~ msgid "one year"
+#~ msgid_plural "%n years"
+#~ msgstr[0] "un anno"
+#~ msgstr[1] "%n anni"
+#~ msgid "one payment"
+#~ msgid_plural "%n payments"
+#~ msgstr[0] "un pagamento"
+#~ msgstr[1] "%n pagamenti"
+#~ msgid "&Update"
+#~ msgstr "A&ggiorna"
+#~ msgid "Open"
+#~ msgstr "Apri"
+#~ msgctxt "Reconcile state 'Not reconciled'"
+#~ msgid "Not reconciled"
+#~ msgstr "Non riconciliato"
+#~ msgctxt "Reconcile state 'Cleared'"
+#~ msgid "Cleared"
+#~ msgstr "Compensata"
+#~ msgctxt "Reconcile state 'Reconciled'"
+#~ msgid "Reconciled"
+#~ msgstr "Riconciliato"
+#~ msgctxt "Reconcile state 'Frozen'"
+#~ msgid "Frozen"
+#~ msgstr "Congelato"
+#~ msgctxt "Reconcile flag C"
+#~ msgid "C"
+#~ msgstr "C"
+#~ msgctxt "Reconcile flag R"
+#~ msgid "R"
+#~ msgstr "R"
+#~ msgctxt "Reconcile flag F"
+#~ msgid "F"
+#~ msgstr "F"
+#~ msgctxt "Flag for unknown reconciliation state"
+#~ msgid "?"
+#~ msgstr "?"
+#~ msgctxt "Report date range"
+#~ msgid "%1 through %2"
+#~ msgstr "%1 di %2"
+#~ msgctxt "CSV (Filefilter)"
+#~ msgid "CSV files"
+#~ msgstr "File CSV"
+#~ msgctxt "HTML (Filefilter)"
+#~ msgid "HTML files"
+#~ msgstr "File HTML"
+#~ msgid "&Configure"
+#~ msgstr "&Configura"
+#~ msgctxt "Finish reconciliation"
+#~ msgid "Finish"
+#~ msgstr "Fine"
+#~ msgid "Postpone reconciliation"
+#~ msgstr "Rinvia rinconciliazione"
+#~ msgctxt "New transaction button"
+#~ msgid "New"
+#~ msgstr "Nuovo"
+#~ msgctxt "Edit transaction button"
+#~ msgid "Edit"
+#~ msgstr "Modifica"
+#~ msgctxt "Enter transaction"
+#~ msgid "Enter"
+#~ msgstr "Inserisci"
+#~ msgctxt "Edit split button"
+#~ msgid "Edit splits"
+#~ msgstr "Modifica suddivisioni"
+#~ msgctxt "Cancel transaction edit"
+#~ msgid "Cancel"
+#~ msgstr "Annulla"
+#~ msgctxt "Delete transaction"
+#~ msgid "Delete"
+#~ msgstr "Elimina"
+#~ msgctxt "Duplicate transaction"
+#~ msgid "Duplicate"
+#~ msgstr "Duplica"
+#~ msgctxt "Button text for match transaction"
+#~ msgid "Match"
+#~ msgstr "Verifica"
+#~ msgctxt "Accept 'imported' and 'matched' transaction"
+#~ msgid "Accept"
+#~ msgstr "Accetta"
+#~ msgctxt "Mark transaction cleared"
+#~ msgid "Cleared"
+#~ msgstr "Compensato"
+#~ msgctxt "Mark transaction reconciled"
+#~ msgid "Reconciled"
+#~ msgstr "Riconciliato"
+#~ msgctxt "Mark transaction not reconciled"
+#~ msgid "Not reconciled"
+#~ msgstr "Non riconciliato"
+#~ msgctxt "Select all transactions"
+#~ msgid "Select all"
+#~ msgstr "Seleziona tutto"
+#~ msgctxt "Combine transactions"
+#~ msgid "Combine"
+#~ msgstr "Combina"
+#~ msgid "New scheduled transaction"
+#~ msgstr "Nuova transazione pianificata"
+#~ msgid "Edit scheduled transaction"
+#~ msgstr "Modifica la transazione pianificata"
+
+#, fuzzy
+#~ msgid "Debug Timers"
+#~ msgstr "Opzioni di debug"
+#~ msgid ""
+#~ "*.kmy *.xml|KMyMoney files\n"
+#~ " *.*|All files (*.*)"
+#~ msgstr ""
+#~ "*.kmy *.xml|File di KMyMoney\n"
+#~ " *.*|Tutti i file (*.*)"
+#~ msgctxt "KMyMoney (Filefilter)"
+#~ msgid "KMyMoney files"
+#~ msgstr "File di KMyMoney"
+#~ msgctxt "XML (Filefilter)"
+#~ msgid "XML files"
+#~ msgstr "File XML"
+#~ msgctxt "Anonymous (Filefilter)"
+#~ msgid "Anonymous files"
+#~ msgstr "File anonimi"
+#~ msgid "Save As"
+#~ msgstr "Salva come"
+#~ msgid "Error"
+#~ msgstr "Errore"
+#~ msgid ""
+#~ "*.xml|XML files\n"
+#~ " *.*|All files (*.*)"
+#~ msgstr ""
+#~ "*.xml|File XML\n"
+#~ " *.*|Tutti i file (*.*)"
+#~ msgid "Fonts"
+#~ msgstr "Caratteri"
+#~ msgid "Information"
+#~ msgstr "Informazioni"
+#~ msgctxt "Copy of scheduled transaction name"
+#~ msgid "Copy of %1"
+#~ msgstr "Copia di %1"
+#~ msgid "Warning"
+#~ msgstr "Avviso"
+#~ msgid "Untitled"
+#~ msgstr "Senza titolo"
+#~ msgctxt "Button text for unmatch transaction"
+#~ msgid "Unmatch"
+#~ msgstr "Non verificato"
+#~ msgid "(c) 2000-2009 The KMyMoney development team"
+#~ msgstr "(c) 2000-2009 La squadra di sviluppo di KMyMoney"
+#~ msgid "http://kmymoney2.sourceforge.net/"
+#~ msgstr "http://kmymoney2.sourceforge.net/"
+#~ msgid "Michael Edwardes."
+#~ msgstr "Michael Edwardes."
+#~ msgid "Thomas Baumgart"
+#~ msgstr "Thomas Baumgart"
+#~ msgid "Ace Jones"
+#~ msgstr "Ace Jones"
+#~ msgid "Tony Bloomfield"
+#~ msgstr "Tony Bloomfield"
+#~ msgid "Alvaro Soliverez"
+#~ msgstr "Alvaro Soliverez"
+#~ msgid "Felix Rodriguez"
+#~ msgstr "Felix Rodriguez"
+#~ msgid "John C"
+#~ msgstr "John C"
+#~ msgid "Fernando Vilas"
+#~ msgstr "Fernando Vilas"
+#~ msgid "Kevin Tambascio"
+#~ msgstr "Kevin Tambascio"
+#~ msgid "Javier Campos Morales"
+#~ msgstr "Javier Campos Morales"
+#~ msgid "Robert Wadley"
+#~ msgstr "Robert Wadley"
+#~ msgid "Laurent Montel"
+#~ msgstr "Laurent Montel"
+#~ msgid "Patches and port to kde4"
+#~ msgstr "Patch e conversione a kde4"
+#~ msgid "Wolfgang Rohdewald"
+#~ msgstr "Wolfgang Rohdewald"
+#~ msgid "%1 in file %2 line %3"
+#~ msgstr "%1 nel file %2 riga %3"
+#~ msgid "Executing %1..."
+#~ msgstr "Esecuzione di %1..."
+#~ msgid "Unable to launch: %1"
+#~ msgstr "Impossibile avviare: %1"
+#~ msgid "Fetching URL %1..."
+#~ msgstr "Scaricamento URL %1..."
+#~ msgid "Executing %1 %2 %3..."
+#~ msgstr "Esecuzione di %1 %2 %3..."
+
+#, fuzzy
+#~ msgid "Default Category for Payee"
+#~ msgstr "Crea categoria"
+#~ msgctxt "Category name"
+#~ msgid "Reinvested dividend"
+#~ msgstr "Dividendo reinvestito"
+#~ msgctxt "Category name"
+#~ msgid "Reinvested dividend (long term)"
+#~ msgstr "Dividendo reinvestito (lungo termine)"
+#~ msgctxt "Category name"
+#~ msgid "Reinvested dividend (short term)"
+#~ msgstr "Dividendo reinvestito (breve termine)"
+#~ msgctxt "Category name"
+#~ msgid "Dividend"
+#~ msgstr "Dividendo"
+#~ msgctxt "Category name"
+#~ msgid "Interest"
+#~ msgstr "Interesse"
+
+#, fuzzy
+#~ msgctxt "Category name"
+#~ msgid "Returned capital"
+#~ msgstr "Campo richiesto"
+#~ msgctxt "Category name"
+#~ msgid "Investment fees"
+#~ msgstr "Spese d'investimento"
+
+#, fuzzy
+#~ msgctxt "QIF tag for liability account"
+#~ msgid "Oth L"
+#~ msgstr "Altro"
+#~ msgctxt "QIF tag for category"
+#~ msgid "Cat"
+#~ msgstr "Cat"
+#~ msgctxt "QIF tag for security"
+#~ msgid "Security"
+#~ msgstr "Strumento finanziaro"
+#~ msgctxt "QIF tag for investment account"
+#~ msgid "Invst"
+#~ msgstr "Invst"
+#~ msgctxt "QIF tag for prices"
+#~ msgid "Prices"
+#~ msgstr "Prezzi"
+#~ msgctxt "QIF tag for a class"
+#~ msgid "Class"
+#~ msgstr "Classe"
+#~ msgctxt "Brokerage (suffix for account names)"
+#~ msgid "Brokerage"
+#~ msgstr "Intermediazione"
+#~ msgid "KMyMoney Unittest"
+#~ msgstr "KMyMoney Unittest"
+#~ msgid "Optional arguments are for ctest"
+#~ msgstr "Gli argomenti aggiuntivi sono per ctest"
+#~ msgctxt "Sunday"
+#~ msgid "Sun"
+#~ msgstr "Dom"
+#~ msgctxt "Saturday"
+#~ msgid "Sat"
+#~ msgstr "Sab"
+#~ msgctxt "Activity for expense categories"
+#~ msgid "Paid"
+#~ msgstr "Pagato"
+#~ msgctxt "Activity for income categories"
+#~ msgid "Received"
+#~ msgstr "Ricevuto"
+#~ msgid "Close"
+#~ msgstr "Chiudi"
+#~ msgctxt "Column heading for category in tax report"
+#~ msgid "Tax"
+#~ msgstr "Tassa"
+#~ msgctxt "Column heading for VAT category"
+#~ msgid "VAT"
+#~ msgstr "IVA"
+#~ msgctxt "Enter todays date into date input widget"
+#~ msgid "T"
+#~ msgstr "T"
+#~ msgctxt "Deposits onto account"
+#~ msgid "Deposits"
+#~ msgstr "Depositi"
+#~ msgctxt "Payments towards credit card"
+#~ msgid "Payments"
+#~ msgstr "Pagamenti"
+#~ msgctxt "Payments made from account"
+#~ msgid "Payments"
+#~ msgstr "Pagamenti"
+#~ msgctxt "Payments made with credit card"
+#~ msgid "Charges"
+#~ msgstr "Spese"
+#~ msgctxt "Payment made from account"
+#~ msgid "Payment"
+#~ msgstr "Pagamento"
+#~ msgctxt "Deposit into account"
+#~ msgid "Deposit"
+#~ msgstr "Deposito"
+#~ msgctxt "Payment made with credit card"
+#~ msgid "Charge"
+#~ msgstr "Spesa"
+#~ msgctxt "Payment towards credit card"
+#~ msgid "Payment"
+#~ msgstr "Pagamento"
+#~ msgctxt "Decrease of asset/liability value"
+#~ msgid "Decrease"
+#~ msgstr "Riduci"
+#~ msgctxt "Increase of asset/liability value"
+#~ msgid "Increase"
+#~ msgstr "Aumenta"
+#~ msgctxt "Unknown payee"
+#~ msgid "Unknown"
+#~ msgstr "Sconosciuto"
+#~ msgctxt "Unknown category"
+#~ msgid "Unknown"
+#~ msgstr "Sconosciuto"
+#~ msgctxt "Unknown security"
+#~ msgid "Unknown"
+#~ msgstr "Sconosciuto"
+#~ msgctxt "label for status combo"
+#~ msgid "Stat&us"
+#~ msgstr "Sta&to"
+#~ msgctxt "Auto assignment (caption)"
+#~ msgid "Auto assignment"
+#~ msgstr "Assegnazione automatica"
+#~ msgid "&Cancel"
+#~ msgstr "A&nnulla"
+#~ msgid "No Title specified"
+#~ msgstr "Nessun titolo specificato"
+#~ msgid "<p>Details for %1:</p>"
+#~ msgstr "<p>Dettagli per %1:</p>"
+#~ msgctxt "NAME OF TRANSLATORS"
+#~ msgid "Your names"
+#~ msgstr "Vincenzo Reale"
+#~ msgctxt "EMAIL OF TRANSLATORS"
+#~ msgid "Your emails"
+#~ msgstr "smart2128@baslug.org"
+#~ msgid "Cancel"
+#~ msgstr "Annulla"
+#~ msgid "Browse..."
+#~ msgstr "Sfoglia..."
+#~ msgid "Import"
+#~ msgstr "Importa"
+#~ msgid "Help"
+#~ msgstr "Aiuto"
+#~ msgid "OK"
+#~ msgstr "OK"
+#~ msgid "Delete"
+#~ msgstr "Elimina"
+#~ msgid "Reset"
+#~ msgstr "Azzera"
+#~ msgctxt "To (Date)"
+#~ msgid "To"
+#~ msgstr "A"
+#~ msgctxt "From (Date)"
+#~ msgid "From"
+#~ msgstr "Da"
+#~ msgctxt "to (amount)"
+#~ msgid "to"
+#~ msgstr "a"
+#~ msgctxt "from (amount)"
+#~ msgid "from"
+#~ msgstr "da"
+#~ msgctxt "to (number)"
+#~ msgid "to"
+#~ msgstr "a"
+#~ msgctxt "from (number)"
+#~ msgid "from"
+#~ msgstr "da"
+#~ msgid "Configure"
+#~ msgstr "Configura"
+#~ msgid "Export"
+#~ msgstr "Esporta"
+#~ msgid "Add"
+#~ msgstr "Aggiungi"
+#~ msgid "Edit"
+#~ msgstr "Modifica"
+#~ msgid "Remove"
+#~ msgstr "Rimuovi"
+#~ msgctxt "Same transaction if amount differs less than percent."
+#~ msgid "percent."
+#~ msgstr "percento."
+#~ msgctxt "This is the mount point"
+#~ msgid "Mount Point:"
+#~ msgstr "Punto di mount:"
+#~ msgid "Options"
+#~ msgstr "Opzioni"
+#~ msgid "Modify"
+#~ msgstr "Modifica"
+#~ msgid "Save"
+#~ msgstr "Salva"
+#~ msgid "Main Toolbar"
+#~ msgstr "Barra degli strumenti principale"
+#~ msgid "Copy"
+#~ msgstr "Copia"
+#~ msgid "No"
+#~ msgstr "No"
+#~ msgid "Yes"
+#~ msgstr "Sì"
+#~ msgid "Only display a subset of the model in the chart:"
+#~ msgstr "Visualizza solo un sottoinsieme del modello nel grafico:"
+#~ msgid "in reverse order."
+#~ msgstr "in ordine inverso."
+#~ msgid "Enter passphrase"
+#~ msgstr "Inserisci frase segreta"
+#~ msgid "File"
+#~ msgstr "File"
+
diff --git a/po/kmymoney2.pot b/po/kmymoney2.pot
new file mode 100644
index 0000000..0da8b28
--- /dev/null
+++ b/po/kmymoney2.pot
@@ -0,0 +1,12457 @@
+# SOME DESCRIPTIVE TITLE.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2009-06-25 19:04+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: ENCODING\n"
+
+#: wizards/wizardpages/rc.cpp:1
+msgid ""
+"Select groups of accounts that correspond to the ways that you will use "
+"KMyMoney. Each group you select will cause several accounts and categories "
+"to be created. Select the groups that are relevant to you. You can always "
+"create additional accounts manually later."
+msgstr ""
+
+#: wizards/wizardpages/rc.cpp:2
+msgid ""
+"<p>KMyMoney supports multiple currencies, nevertheless one of them will be "
+"used as your base currency. The base currency is used as default for new "
+"accounts and reports. Please select the base currency from the following "
+"list."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:71 dialogs/rc.cpp:399 dialogs/rc.cpp:485
+#: dialogs/rc.cpp:724 dialogs/settings/rc.cpp:108 reports/listtable.cpp:226
+#: views/kinvestmentview.cpp:71 views/kpayeesview.cpp:351 views/rc.cpp:13
+#: widgets/rc.cpp:5 widgets/rc.cpp:34
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1599
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1629
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1673
+#: wizards/wizardpages/rc.cpp:3
+msgid "Name"
+msgstr ""
+
+#: wizards/wizardpages/rc.cpp:4
+msgid "ISO Code"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:69 dialogs/kequitypriceupdatedlg.cpp:70
+#: dialogs/rc.cpp:71 dialogs/rc.cpp:725 dialogs/settings/rc.cpp:112
+#: views/kinvestmentview.cpp:72 widgets/rc.cpp:37 wizards/wizardpages/rc.cpp:5
+msgid "Symbol"
+msgstr ""
+
+#: wizards/wizardpages/rc.cpp:6
+msgid ""
+"<p>Use the fields below to enter some information about yourself.</p>\n"
+"\n"
+"<p>All information is optional and only used to personalize your KMyMoney "
+"file.</p>"
+msgstr ""
+
+#: dialogs/rc.cpp:425 wizards/newuserwizard/rc.cpp:27
+#: wizards/wizardpages/rc.cpp:7
+msgid "Town:"
+msgstr ""
+
+#: dialogs/rc.cpp:420 wizards/newuserwizard/rc.cpp:22
+#: wizards/wizardpages/rc.cpp:8
+msgid "County/State:"
+msgstr ""
+
+#: dialogs/rc.cpp:391 dialogs/rc.cpp:421 wizards/newuserwizard/rc.cpp:23
+#: wizards/wizardpages/rc.cpp:9
+msgid "Street:"
+msgstr ""
+
+#: dialogs/rc.cpp:422 wizards/newuserwizard/rc.cpp:24
+#: wizards/wizardpages/rc.cpp:10
+msgid "Email:"
+msgstr ""
+
+#: dialogs/rc.cpp:424 wizards/newuserwizard/rc.cpp:26
+#: wizards/wizardpages/rc.cpp:11
+msgid "Telephone:"
+msgstr ""
+
+#: dialogs/rc.cpp:423 wizards/newuserwizard/rc.cpp:25
+#: wizards/wizardpages/rc.cpp:12
+msgid "Your name:"
+msgstr ""
+
+#: dialogs/rc.cpp:427 wizards/newuserwizard/rc.cpp:29
+#: wizards/wizardpages/rc.cpp:13
+msgid "Load from Addressbook"
+msgstr ""
+
+#: dialogs/rc.cpp:392 dialogs/rc.cpp:426 views/rc.cpp:68
+#: wizards/wizardpages/rc.cpp:14
+msgid "Postal Code:"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:82
+msgid "KMyMoney New Account Setup"
+msgstr ""
+
+#: dialogs/rc.cpp:360 dialogs/rc.cpp:361 reports/listtable.cpp:230
+#: wizards/newaccountwizard/knewaccountwizard.cpp:83
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1616
+#: wizards/newaccountwizard/rc.cpp:61
+msgid "Institution"
+msgstr ""
+
+#: dialogs/investactivities.cpp:198 dialogs/investactivities.cpp:286
+#: dialogs/investactivities.cpp:367 dialogs/kfindtransactiondlg.cpp:181
+#: dialogs/rc.cpp:139 dialogs/rc.cpp:192 dialogs/rc.cpp:207
+#: dialogs/transactioneditor.cpp:734 reports/listtable.cpp:201
+#: reports/pivottable.cpp:1336 reports/pivottable.cpp:1586
+#: views/kforecastview.cpp:393 views/kgloballedgerview.cpp:175
+#: views/khomeview.cpp:418 views/khomeview.cpp:491 views/khomeview.cpp:525
+#: views/khomeview.cpp:764 views/khomeview.cpp:967 views/khomeview.cpp:1437
+#: views/kscheduledview.cpp:71 views/rc.cpp:17 views/rc.cpp:44
+#: widgets/kmymoneyaccounttreebase.cpp:58
+#: widgets/kmymoneyaccounttreeforecast.cpp:41 widgets/rc.cpp:109
+#: widgets/register.cpp:566 widgets/transaction.cpp:978
+#: widgets/transaction.cpp:1535
+#: wizards/newaccountwizard/knewaccountwizard.cpp:84
+msgid "Account"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:85
+msgid "Broker"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:225 dialogs/rc.cpp:70 dialogs/rc.cpp:104
+#: dialogs/rc.cpp:159 dialogs/rc.cpp:223 dialogs/rc.cpp:246 dialogs/rc.cpp:751
+#: dialogs/settings/rc.cpp:109 widgets/rc.cpp:35 widgets/register.cpp:568
+#: wizards/newaccountwizard/knewaccountwizard.cpp:86
+msgid "Details"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:636 dialogs/rc.cpp:231 dialogs/rc.cpp:608
+#: kmymoneyutils.cpp:191 views/khomeview.cpp:399
+#: wizards/newaccountwizard/knewaccountwizard.cpp:87
+#: wizards/newaccountwizard/knewaccountwizard.cpp:880
+msgid "Payments"
+msgstr ""
+
+#: dialogs/investactivities.cpp:195 dialogs/investactivities.cpp:283
+#: dialogs/investactivities.cpp:422 dialogs/investtransactioneditor.cpp:217
+#: reports/listtable.cpp:221 widgets/transaction.cpp:1565
+#: wizards/newaccountwizard/knewaccountwizard.cpp:88
+msgid "Fees"
+msgstr ""
+
+#: dialogs/rc.cpp:624 views/khomeview.cpp:415 views/khomeview.cpp:488
+#: views/khomeview.cpp:522 wizards/newaccountwizard/knewaccountwizard.cpp:89
+msgid "Schedule"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:90
+msgid "Payout"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:91
+msgid "Parent Account"
+msgstr ""
+
+#: dialogs/rc.cpp:719 wizards/newaccountwizard/knewaccountwizard.cpp:92
+#: wizards/newuserwizard/knewuserwizard.cpp:86
+msgid "Finish"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:248
+msgid "Credit card payment"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:264
+#, c-format
+msgid "Loan payment for %1"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:279
+msgid "Loan payment"
+msgstr ""
+
+#: dialogs/rc.cpp:134 wizards/newaccountwizard/knewaccountwizard.cpp:293
+msgid "Amortization"
+msgstr ""
+
+#: dialogs/investactivities.cpp:196 dialogs/investactivities.cpp:284
+#: dialogs/investactivities.cpp:366 dialogs/investactivities.cpp:423
+#: dialogs/investtransactioneditor.cpp:227 dialogs/rc.cpp:135
+#: dialogs/rc.cpp:152 dialogs/rc.cpp:544 reports/listtable.cpp:222
+#: widgets/transaction.cpp:1597
+#: wizards/newaccountwizard/knewaccountwizard.cpp:302
+msgid "Interest"
+msgstr ""
+
+#: dialogs/kcurrencycalculator.cpp:282
+#: wizards/newaccountwizard/knewaccountwizard.cpp:351
+#: wizards/newaccountwizard/knewaccountwizard.cpp:356
+msgid "User"
+msgstr ""
+
+#: kmymoneyutils.cpp:64 mymoney/mymoneyaccount.cpp:711
+#: reports/querytabletest.cpp:422
+#: wizards/newaccountwizard/knewaccountwizard.cpp:451
+msgid "Checking"
+msgstr ""
+
+#: kmymoneyutils.cpp:66 mymoney/mymoneyaccount.cpp:714
+#: wizards/newaccountwizard/knewaccountwizard.cpp:452
+msgid "Savings"
+msgstr ""
+
+#: kmymoneyutils.cpp:68 mymoney/mymoneyaccount.cpp:717
+#: reports/querytabletest.cpp:423
+#: wizards/newaccountwizard/knewaccountwizard.cpp:453
+msgid "Credit Card"
+msgstr ""
+
+#: kmymoneyutils.cpp:70 mymoney/mymoneyaccount.cpp:720
+#: wizards/newaccountwizard/knewaccountwizard.cpp:454
+msgid "Cash"
+msgstr ""
+
+#: kmymoneyutils.cpp:72 mymoney/mymoneyaccount.cpp:723
+#: wizards/newaccountwizard/knewaccountwizard.cpp:455
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+msgid "Loan"
+msgstr ""
+
+#: kmymoneyutils.cpp:76 mymoney/mymoneyaccount.cpp:729
+#: wizards/newaccountwizard/knewaccountwizard.cpp:456
+msgid "Investment"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:178 converter/mymoneytemplate.cpp:179
+#: dialogs/knewaccountdlg.cpp:1014 kmymoneyutils.cpp:80
+#: mymoney/mymoneyaccount.cpp:735 views/kaccountsview.cpp:352
+#: views/kmymoneyview.cpp:765 widgets/kmymoneyaccountselector.cpp:177
+#: widgets/kmymoneyaccountselector.cpp:356
+#: wizards/newaccountwizard/knewaccountwizard.cpp:457
+msgid "Asset"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:182 converter/mymoneytemplate.cpp:183
+#: dialogs/knewaccountdlg.cpp:1016 kmymoneyutils.cpp:82
+#: mymoney/mymoneyaccount.cpp:738 views/kaccountsview.cpp:356
+#: views/kmymoneyview.cpp:766 widgets/kmymoneyaccountselector.cpp:178
+#: widgets/kmymoneyaccountselector.cpp:363
+#: wizards/newaccountwizard/knewaccountwizard.cpp:458
+msgid "Liability"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:194 converter/mymoneytemplate.cpp:195
+#: kmymoneyutils.cpp:94 mymoney/mymoneyaccount.cpp:756
+#: views/kaccountsview.cpp:369 views/kmymoneyview.cpp:769
+#: widgets/kmymoneyaccountselector.cpp:181
+#: widgets/kmymoneyaccountselector.cpp:390
+#: wizards/newaccountwizard/knewaccountwizard.cpp:460
+msgid "Equity"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid ""
+"Please make sure to enter the correct conversion for the selected opening "
+"date. If you requested an online quote it might be provided for a different "
+"date."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid "Check date"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:562
+msgid "1 %1 equals %2"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:577
+msgid "Conversion rate is not positive"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:583
+msgid "No account name supplied"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:114 mymoney/mymoneyscheduled.cpp:1026
+#: wizards/newaccountwizard/knewaccountwizard.cpp:680
+msgid "Write check"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:111 mymoney/mymoneyscheduled.cpp:1014
+#: wizards/newaccountwizard/knewaccountwizard.cpp:682
+msgid "Direct debit"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:113 mymoney/mymoneyscheduled.cpp:1032
+#: wizards/newaccountwizard/knewaccountwizard.cpp:683
+msgid "Bank transfer"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:112 mymoney/mymoneyscheduled.cpp:1029
+#: wizards/newaccountwizard/knewaccountwizard.cpp:685
+msgid "Standing order"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:110 mymoney/mymoneyscheduled.cpp:1020
+#: wizards/newaccountwizard/knewaccountwizard.cpp:686
+msgid "Manual deposit"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:109 mymoney/mymoneyscheduled.cpp:1017
+#: wizards/newaccountwizard/knewaccountwizard.cpp:687
+msgid "Direct deposit"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:115 mymoney/mymoneyscheduled.cpp:1023
+#: wizards/newaccountwizard/knewaccountwizard.cpp:688
+msgid "Other"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:697
+msgid "CreditCard %1 monthly payment"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:703
+msgid "Finish entry and create account"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:705
+msgid "Finish entry and create account and schedule"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:708
+msgid "Next due date is prior to opening date"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:712
+msgid "No account selected"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:716
+msgid "No amount for payment selected"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:720
+msgid "No payee for payment selected"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:724
+msgid "No name assigned for schedule"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:805
+msgid "No payee supplied"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:819
+msgid "No opening balance supplied"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:826
+msgid "An interest change can only happen after the first payment"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:615 dialogs/knewloanwizard.cpp:634
+#: wizards/newaccountwizard/knewaccountwizard.cpp:884
+#: wizards/newaccountwizard/rc.cpp:55
+msgid "Months"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:616 dialogs/knewloanwizard.cpp:635
+#: wizards/newaccountwizard/knewaccountwizard.cpp:885
+#: wizards/newaccountwizard/knewaccountwizard.cpp:889
+#: wizards/newaccountwizard/rc.cpp:56
+msgid "Years"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:711
+#: wizards/newaccountwizard/knewaccountwizard.cpp:961
+#, c-format
+msgid "KMyMoney has calculated the amount of the loan as %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:718
+#: wizards/newaccountwizard/knewaccountwizard.cpp:968
+msgid "KMyMoney has calculated the interest rate to %1%."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:731
+#: wizards/newaccountwizard/knewaccountwizard.cpp:981
+msgid ""
+"KMyMoney has calculated a periodic payment of %1 to cover principal and "
+"interest."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:993
+#, c-format
+msgid ""
+"The number of payments has been decremented and the balloon payment has been "
+"modified to %1."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1001
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1021
+#, c-format
+msgid "The balloon payment has been modified to %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:763
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1013
+msgid "KMyMoney has calculated the term of your loan as %1. "
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1052
+msgid "KMyMoney has calculated a balloon payment of %1 for this loan."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:809
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1059
+msgid "KMyMoney has successfully verified your loan information."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1067
+msgid ""
+"You have entered mis-matching information. Please modify your figures or "
+"leave one value empty to let KMyMoney calculate it for you"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:504 dialogs/knewloanwizard.cpp:513
+#: dialogs/knewloanwizard.cpp:522 dialogs/knewloanwizard.cpp:532
+#: dialogs/knewloanwizard.cpp:820
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1070
+msgid "Calculation error"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:824
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1074
+msgid ""
+"\n"
+"\n"
+"Accept this or modify the loan information and recalculate."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:826
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1076
+msgid "Calculation successful"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:846
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1129
+#, c-format
+msgid ""
+"_n: one month\n"
+"%n months"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:850
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1133
+#, c-format
+msgid ""
+"_n: one year\n"
+"%n years"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:854
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1137
+#, c-format
+msgid ""
+"_n: one payment\n"
+"%n payments"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1190
+msgid "Press Calculate to verify the values"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1194
+msgid "Not all details supplied"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:70 dialogs/knewloanwizard.cpp:122
+#: dialogs/knewloanwizard.cpp:136
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1381
+msgid "&Create..."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:138
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1383
+msgid "Create a new asset account"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1384
+msgid ""
+"If the asset account does not yet exist, press this button to create it."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1596
+msgid "Account information"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1601
+#: wizards/newaccountwizard/rc.cpp:59
+msgid "Subaccount of"
+msgstr ""
+
+#: dialogs/rc.cpp:225 dialogs/rc.cpp:326 dialogs/rc.cpp:371 dialogs/rc.cpp:723
+#: plugins/ofximport/dialogs/rc.cpp:23 reports/listtable.cpp:225
+#: widgets/kmymoneyaccounttreebase.cpp:113 widgets/register.cpp:61
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1606
+msgid "Type"
+msgstr ""
+
+#: dialogs/kcurrencyeditdlg.cpp:62 dialogs/rc.cpp:56 dialogs/rc.cpp:59
+#: dialogs/rc.cpp:75 dialogs/rc.cpp:727 dialogs/rc.cpp:792
+#: kmymoneyutils.cpp:84 kmymoneyutils.cpp:111 mymoney/mymoneyaccount.cpp:741
+#: mymoney/mymoneysecurity.cpp:169 reports/listtable.cpp:233
+#: widgets/kmymoneypriceview.cpp:127
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1607
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1630
+#: wizards/newaccountwizard/rc.cpp:6 wizards/newaccountwizard/rc.cpp:24
+msgid "Currency"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1608
+#: wizards/newaccountwizard/rc.cpp:7 wizards/newuserwizard/rc.cpp:9
+msgid "Opening date"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1610
+#: wizards/newaccountwizard/rc.cpp:9
+msgid "Conversion rate"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1613
+#: wizards/newaccountwizard/rc.cpp:15 wizards/newuserwizard/rc.cpp:13
+msgid "Opening balance"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:507 dialogs/transactioneditor.cpp:784
+#: dialogs/transactioneditor.cpp:848 plugins/ofximport/dialogs/rc.cpp:22
+#: widgets/rc.cpp:111 widgets/register.cpp:59 widgets/transaction.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1618
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1632
+msgid "Number"
+msgstr ""
+
+#: dialogs/rc.cpp:365 wizards/newaccountwizard/knewaccountwizard.cpp:1621
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1634
+#: wizards/newaccountwizard/rc.cpp:26 wizards/newaccountwizard/rc.cpp:66
+msgid "IBAN"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1627
+msgid "Brokerage Account"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1640
+msgid "Loan information"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1643
+msgid "Amount borrowed"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1645
+msgid "Amount lent"
+msgstr ""
+
+#: dialogs/rc.cpp:515 dialogs/rc.cpp:546
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1647
+#: wizards/newaccountwizard/rc.cpp:75
+msgid "Interest rate"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1648
+msgid "Interest rate is"
+msgstr ""
+
+#: dialogs/rc.cpp:509 dialogs/rc.cpp:572
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1649
+msgid "Principal and interest"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1650
+#: wizards/newaccountwizard/rc.cpp:90
+msgid "Additional fees"
+msgstr ""
+
+#: dialogs/rc.cpp:525 wizards/newaccountwizard/knewaccountwizard.cpp:1651
+#: wizards/newaccountwizard/rc.cpp:44
+msgid "Payment frequency"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1652
+#: wizards/newaccountwizard/rc.cpp:105
+msgid "Payment account"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1655
+msgid "Payout information"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1658
+msgid "Refinance"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1661
+msgid "Transfer amount to"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1663
+msgid "Transfer amount from"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1665
+msgid "Payment date"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1671
+msgid "Schedule information"
+msgstr ""
+
+#: reports/listtable.cpp:228
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1684
+msgid "Occurence"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:891 mymoney/mymoneyscheduled.cpp:947
+#: mymoney/mymoneyscheduled.cpp:1283 mymoney/mymoneyscheduletest.cpp:1343
+#: widgets/rc.cpp:19 widgets/rc.cpp:74
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+msgid "Monthly"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1677
+msgid "Paid from"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:473 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1678
+msgid "Pay to"
+msgstr ""
+
+#: dialogs/investactivities.cpp:197 dialogs/investactivities.cpp:285
+#: dialogs/investactivities.cpp:365 dialogs/kfindtransactiondlg.cpp:197
+#: dialogs/kmymoneysplittable.cpp:80 dialogs/rc.cpp:51 dialogs/rc.cpp:212
+#: reports/listtable.cpp:197 views/khomeview.cpp:421 views/khomeview.cpp:494
+#: views/khomeview.cpp:528 views/kscheduledview.cpp:73 views/rc.cpp:63
+#: widgets/register.cpp:58 widgets/transaction.cpp:1055
+#: widgets/transaction.cpp:1578 widgets/transaction.cpp:1610
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1679
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1685
+msgid "Amount"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1680
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1686
+msgid "First payment due"
+msgstr ""
+
+#: dialogs/rc.cpp:102 wizards/newaccountwizard/knewaccountwizard.cpp:1681
+#: wizards/newaccountwizard/rc.cpp:115
+msgid "Payment method"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:1
+msgid ""
+"This page summarizes the data you have entered. Press <b>Finish</b> to "
+"create the account, schedules, etc. or use <b>Back</b> to modify your "
+"entries."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:2
+msgid "Item"
+msgstr ""
+
+#: dialogs/rc.cpp:110 dialogs/rc.cpp:165 dialogs/rc.cpp:252 dialogs/rc.cpp:757
+#: dialogs/rc.cpp:818 views/kinvestmentview.cpp:74 widgets/register.cpp:574
+#: wizards/newaccountwizard/rc.cpp:3
+msgid "Value"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:4
+msgid ""
+"Enter the name of the account under which it is known within KMyMoney.\n"
+"Select the type for the new account. Use the <b>What's this?</b> feature to "
+"see more details about the various account types.\n"
+"Enter the date the account was opened and its currency."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:5
+msgid "Select the currency in which this account is denominated."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:8
+msgid ""
+"The opening balance is the balance of the account when you start using it "
+"with KMyMoney. For new accounts this is usually 0 but for existing accounts "
+"this may well differ. Please consult the account statements to figure out "
+"this value. The opening balance is to be provided in the currency of the "
+"account as selected with the currency button."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:10
+msgid ""
+"The opening date would be the date of the last statement. In case you want "
+"to keep track of transactions prior to this date, enter the ending balance "
+"and statement date of a prior statement and add all following transactions "
+"into KMyMoney.\n"
+"<br>\n"
+"<i>Note</i>: If you do not know the exact amount of the opening balance, "
+"enter an estimate. You can change this value later before you reconcile this "
+"account for the first time."
+msgstr ""
+
+#: dialogs/rc.cpp:52 dialogs/rc.cpp:54 dialogs/rc.cpp:57 dialogs/rc.cpp:60
+#: dialogs/rc.cpp:748 dialogs/rc.cpp:749 dialogs/rc.cpp:768 widgets/rc.cpp:6
+#: widgets/rc.cpp:7 widgets/rc.cpp:8 widgets/rc.cpp:9 widgets/rc.cpp:10
+#: widgets/rc.cpp:11 widgets/rc.cpp:12 widgets/rc.cpp:13 widgets/rc.cpp:14
+#: widgets/rc.cpp:15 widgets/rc.cpp:16 widgets/rc.cpp:17
+#: wizards/newaccountwizard/rc.cpp:11 wizards/newaccountwizard/rc.cpp:88
+#: wizards/newaccountwizard/rc.cpp:91 wizards/newaccountwizard/rc.cpp:93
+#: wizards/newuserwizard/rc.cpp:14
+msgid "xxx"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:12
+msgid "Account type"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:13
+msgid ""
+"For foreign currencies an initial conversion rate needs to be provided. This "
+"should be the price of the foreign currency in the base currency on the "
+"opening date of the account."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:14
+msgid "Account name"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:16
+msgid ""
+"<p><b>Checking</b>\n"
+"Use the checking account type to manage activities on your checking account "
+"e.g. payments, checks and cash card purchases.</p>\n"
+"\n"
+"<p><b>Savings</b>\n"
+"Use the savings account type to manage activities on your savings "
+"account.</p>\n"
+"\n"
+"<p><b>Credit Card</b>\n"
+"Use the credit card account type to manage activities on your credit "
+"card.</p>\n"
+"\n"
+"<p><b>Cash</b>\n"
+"\n"
+"Use the cash account type to manage activities in your wallet.</p>\n"
+"\n"
+"<p><b>Loan</b>\n"
+"Use the loan account type to manage amortization loans (e.g. mortgages, car "
+"loan, money you lend, private loans etc.).</p>\n"
+"\n"
+"<p><b>Investment</b>\n"
+"Use the investment account to manage your stock, mutual fund and other "
+"investments.</p>\n"
+"\n"
+"<p><b>Asset</b>\n"
+"Use the asset account type to manage assets (e.g. your house, car or art "
+"collection).</p>\n"
+"\n"
+"<p><b>Liability</b>\n"
+"Use the liability account type to manage any type of liability except "
+"amortization loans. Use it for taxes you owe or money you borrowed from "
+"friends. For amortization loans like mortgages you should create a loan "
+"account.</p>"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:17
+msgid "Preferred account"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:18
+msgid ""
+"Mark this checkbox if the account should be maintained as preferred account"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:19
+msgid ""
+"Selecting the <b>Preferred Account</b> checkbox will allow preferred access "
+"in some dialogs and views of KMyMoney."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:20
+msgid "Enter a name under which this account is known within KMyMoney."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:21
+msgid "Online quote"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:22
+msgid ""
+"Does this investment account have a brokerage account?<p>\n"
+"\n"
+"<b>Check</b> the mark if this investment account has an associated account "
+"for money that is not invested.<br>\n"
+"\n"
+"<b>Uncheck</b> it if you don't use this account for active stock brokerage. "
+"You should also uncheck it if this account is not maintained by a bank or "
+"broker."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:23
+msgid "Create brokerage account"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:25 wizards/newaccountwizard/rc.cpp:64
+msgid "Account number"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:27
+msgid ""
+"Please select the required options. Please use the <b>What's this?</b> "
+"feature to see more information about the items."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:28
+msgid "What is the type of the loan?"
+msgstr ""
+
+#: dialogs/rc.cpp:481 wizards/newaccountwizard/rc.cpp:29
+msgid "I am borrowing money"
+msgstr ""
+
+#: dialogs/rc.cpp:482 wizards/newaccountwizard/rc.cpp:30
+msgid "I am lending money"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:31
+msgid "Who is the payee/payer of the loan?"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:32
+msgid ""
+"Enter the name of the person or bank you owe money or who owes you money.\n"
+"\n"
+"If the name does not exist within KMyMoney's database, you are asked if you "
+"want to create it."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:33
+msgid "Did you make/receive any payments yet?"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:36
+msgid ""
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?\n"
+"\n"
+"Note: Payments made to obtain the loan (e.g. Disagio) are not considered as "
+"payments in this context."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:37
+msgid "Which payments do you want to record?"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:38
+msgid "All payments"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:39
+msgid "Start with this year's payments"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:40
+msgid ""
+"<qt>Select which transactions should be recorded.\n"
+"\n"
+"<b>All payments</b> allows you to enter all payments made for this loan.\n"
+"\n"
+"The option to <b>start from the beginning of the current year</b> is meant "
+"for loans that are active for a longer period of time already and you don't "
+"want to enter all transactions of the past.\n"
+"</qt>"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:41
+msgid "Balance before start of recording"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:42
+msgid ""
+"Enter the ending balance found on the statement that is the last one before "
+"you want to start recording this loan in KMyMoney."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:43
+msgid ""
+"You have selected to record only payments from the beginning of this year. "
+"Since prior transactions will not be recorded, you need to supply the "
+"balance of the loan on January 1st of this year."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:45
+msgid "Interest Compounding frequency"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:46
+msgid ""
+"Select the frequency with which the interest is compounded. If uncertain, "
+"select the same as the payment frequency. Consult your loan contract for "
+"details."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:47
+msgid "Due date of first payment to be recorded"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:48
+msgid ""
+"Depending on the answer to <b>What do you want to record?</b> this field "
+"means the following:<p>\n"
+"\n"
+"<b>All payments</b><br>\n"
+"Enter the due date of the very first payment<p>\n"
+"\n"
+"<b>Start with this year's payments</b><br>\n"
+"Enter the due date of the first payment in the current year"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:49
+msgid "Type of interest rate"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:50
+msgid "Fixed"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:51
+msgid "Variable"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:52
+msgid "Time between interest changes"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:613 wizards/newaccountwizard/rc.cpp:53
+msgid "Days"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:614 wizards/newaccountwizard/rc.cpp:54
+msgid "Weeks"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:57
+msgid "Next interest change is due"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:58
+msgid "This page allows you to select the parent account."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:60
+msgid ""
+"If this account is managed by an institution please select the institution "
+"from the list. If the institution does not exist yet, please choose the "
+"<b>New Institution</b> button to create it. Otherwise, leave this field "
+"empty.\n"
+"Enter the account number used by the institution to identify the account."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:62
+msgid "Select the institution which manages this account or leave empty"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:63
+msgid "New Institution"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:65
+msgid ""
+"Accounts managed by an institution are usually referenced by a unique number "
+"the so called account number. Enter that number here.\n"
+"\n"
+"KMyMoney currently uses this number only for some online banking functions."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:67
+msgid "Enter the International Bank Account Number into this field"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:68
+msgid ""
+"You can enter the IBAN (International Bank Account Number) into this field "
+"if you know it. Usually, people at your institution can tell you the number "
+"or it is printed on your statements.\n"
+"\n"
+"See also http://en.wikipedia.org/wiki/International_Bank_Account_Number for "
+"more information.\n"
+"\n"
+"KMyMoney keeps this field only for documentation purposes and does not use "
+"it otherwise."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:69
+msgid ""
+"Now enter the details for your loan. You can leave one of the fields empty "
+"and KMyMoney will calculate it when you press the <b>Calculate</b> button. "
+"Before you can continue with the next page you also need to press "
+"<b>Calculate</b> so that KMyMoney can check the logical correctness of the "
+"values you have supplied."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:70
+msgid "The interest rate gets calculated"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:71
+msgid "when the payment is received"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:72
+msgid "when the payment is due"
+msgstr ""
+
+#: dialogs/rc.cpp:531 dialogs/rc.cpp:533 wizards/newaccountwizard/rc.cpp:73
+msgid "Loan amount"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:74
+msgid ""
+"Enter the amount of the loan in this field. If you want to calculate this "
+"field out of the other parameters, please leave it empty. If the field is "
+"marked as required (colored background) you have informed KMyMoney about the "
+"fact that there were already some payments towards the loan. In this case, "
+"please enter the ending balance of your last statement."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:76
+msgid ""
+"Please enter the interest rate in percent or leave the field empty to "
+"calculate it."
+msgstr ""
+
+#: dialogs/rc.cpp:559 wizards/newaccountwizard/rc.cpp:77
+msgid "Term"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:78
+msgid ""
+"Please enter the term of this loan or enter 0 to calculate it. The term is "
+"the time that is required to fully repay the loan. This time might be "
+"different from the time your loan contract is signed for."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:79
+msgid "Payment (principal and interest)"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:80
+msgid ""
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:81
+msgid "Balloon payment"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:82
+msgid ""
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:83
+msgid "Calculate"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:84
+msgid "Press this button to calculate/verify your loan details."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:85
+msgid ""
+"Pressing this button calculates a possibly missing parameter for your loan "
+"or verifies that the values entered match. If something is not correct you "
+"will receive information about it."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:86
+msgid ""
+"Now enter the information required for the periodic loan payments. If your "
+"regular payments contains any additional fees, click on the <b>Additional "
+"fees</b> button to enter them."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:87
+msgid "Principal + Interest"
+msgstr ""
+
+#: dialogs/rc.cpp:620 wizards/newaccountwizard/rc.cpp:89
+msgid "+"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:92
+msgid "= periodical payments"
+msgstr ""
+
+#: dialogs/rc.cpp:643 wizards/newaccountwizard/rc.cpp:94
+msgid ""
+"If this loan is for an asset, such as a car or a house, you can create the "
+"asset account now. An asset account represents the total value of an asset. "
+"The money from this loan will be transfered into the asset account you "
+"create or select.\n"
+"If this loan is a 'consumer loan' (money to use however you want), you can "
+"use a checking account instead."
+msgstr ""
+
+#: dialogs/rc.cpp:644 wizards/newaccountwizard/rc.cpp:95
+msgid "Don't create payout transaction"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:96
+msgid "Refinance existing loan"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:97
+msgid ""
+"Check this if you are refinancing a loan that already exists in KMyMoney"
+msgstr ""
+
+#: dialogs/rc.cpp:642 wizards/newaccountwizard/rc.cpp:98
+msgid "Asset Account"
+msgstr ""
+
+#: dialogs/rc.cpp:2 wizards/newaccountwizard/rc.cpp:99
+msgid "Create"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:100
+msgid "Loan account"
+msgstr ""
+
+#: dialogs/rc.cpp:646 wizards/newaccountwizard/rc.cpp:101
+msgid "Date of payment"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:102
+msgid ""
+"KMyMoney creates a schedule for this payment and reminds you whenever a "
+"payment must be made. Please select the account to/from which payments will "
+"be made and the category the interest will be assigned to.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+
+#: dialogs/rc.cpp:613 wizards/newaccountwizard/rc.cpp:103
+msgid "Interest category"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:104
+msgid ""
+"The category the interest part of the payment will be assigned to. If you "
+"borrow money you usually have to pay interest, so this should be an expense "
+"category. If you lend the money, you receive the interest. In this case, "
+"select an income category here."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:106
+msgid ""
+"Select the account from which you make your periodical payments or where you "
+"receive regular payments in case you lend the money. In most cases, this is "
+"a checking account."
+msgstr ""
+
+#: dialogs/rc.cpp:519 wizards/newaccountwizard/rc.cpp:107
+msgid "First payment due on"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:108
+msgid ""
+"For credit card accounts you can create a monthly schedule which will "
+"automatically remind you about the payment. Please fill in the details about "
+"this payment here."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:109
+msgid "Yes, remind me when the payment is due"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:110
+msgid "Name of schedule"
+msgstr ""
+
+#: dialogs/rc.cpp:151 dialogs/rc.cpp:218 dialogs/rc.cpp:219
+#: reports/listtable.cpp:199 views/kscheduledview.cpp:72 widgets/rc.cpp:113
+#: widgets/register.cpp:57 wizards/newaccountwizard/rc.cpp:111
+msgid "Payee"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:112
+msgid "Estimated monthly payment"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:113
+msgid "Due date of next payment"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:114
+msgid ""
+"Payment should be made\n"
+"from account"
+msgstr ""
+
+#: wizards/newuserwizard/knewuserwizard.cpp:79
+msgid "KMyMoney New File Setup"
+msgstr ""
+
+#: wizards/newuserwizard/knewuserwizard.cpp:81
+msgid "Introduction"
+msgstr ""
+
+#: wizards/newuserwizard/knewuserwizard.cpp:82
+msgid "Personal Data"
+msgstr ""
+
+#: wizards/newuserwizard/knewuserwizard.cpp:83
+msgid "Select Currency"
+msgstr ""
+
+#: wizards/newuserwizard/knewuserwizard.cpp:84
+msgid "Select Accounts"
+msgstr ""
+
+#: wizards/newuserwizard/knewuserwizard.cpp:85
+msgid "Set preferences"
+msgstr ""
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid ""
+"Unable to load data, because no contact has been associated with the owner "
+"of the standard addressbook."
+msgstr ""
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid "Addressbook import"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:1
+msgid ""
+"A typical KMyMoney user maintains a checking a account with some institution "
+"and uses it to receive money or pay bills. If this is not the case, please "
+"deselect the checkbox below and continue on the next page."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:2
+msgid "I have a checking account that I want to manage with KMyMoney"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:3
+msgid "The name of the instititution that issued the account."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:4
+msgid ""
+"Each institution has a routing number. Enter it here. If uncertain, leave "
+"the field blank. You can modify it later."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:5
+msgid "Name of the institution"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:6
+msgid "Routing number"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:7
+msgid ""
+"In general the institution that issued the account also issued a number for "
+"it. Enter it here. If uncertain, you can modify this entry later."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:8
+msgid ""
+"Enter a descriptive name that will be used by KMyMoney to identify your "
+"checking account."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:10
+msgid ""
+"Enter the date from when on you plan to keep track of the transactions in "
+"that account. This is usually the date of the last statement. If uncertain, "
+"leave as is."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:11
+msgid "Number of the account"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:12
+msgid "Name of the account"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:15
+msgid ""
+"Enter the opening balance of the account. This is usually the ending balance "
+"of the last statement. If uncertain, leave as is."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:16
+msgid ""
+"The fields below allow you to enter some information about your checking "
+"account. Once this wizard finishes, the account will be created for you "
+"within KMyMoney."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:17
+msgid ""
+"KMyMoney supports multiple currencies. Your reports will be based on a "
+"default curreny which you can select here. The default for new accounts is "
+"also the currency you select here."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:18
+msgid ""
+"KMyMoney will store your financial data in a file on the disk. A standard "
+"filename within your KDE user environment will be the default. This is just "
+"provided for convenience and you can choose any other location here."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:19
+msgid ""
+"Either the currently selected file exists or the selected directory does not "
+"exist. Please make sure, that\n"
+"\n"
+"<ul>\n"
+"<li>the selected directory exists and</li>\n"
+"<li>the filename is not currently used in this directory.</li>\n"
+"</ul>"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:20
+msgid ""
+"This finishes the setup of your KMyMoney environment. You can now press the "
+"Finish button and start using KMyMoney to record your financial transactions."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:21
+msgid ""
+"Please enter some information about yourself.<br><br>\n"
+"\n"
+"This information will be seen and used only by you. The information is used "
+"to personalize KMyMoney, to encrypt your file, etc."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:28
+msgid "Zip code"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:30
+msgid "Welcome to KMyMoney!"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:31
+msgid ""
+"You have started KMyMoney for the first time on this computer. Before this "
+"program can help you to manage your finances, it needs to collect some data "
+"from you.<p>\n"
+"\n"
+"On the next few pages you will be guided through the steps necessary to "
+"setup the program. This will happen only once."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:32
+msgid ""
+"<p>KMyMoney can encrypt your datafile using GPG Encryption. GPG encryption "
+"is one of the most secure methods in the world for protecting data. All of "
+"your account numbers and other important financial information will be very "
+"secure.</p>"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:33
+msgid ""
+"If you would like to review or change any preference settings for KMyMoney "
+"at this time, you can do so here. If not just click <b>Next</b>."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:34
+msgid "Configure preferences now"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:35
+msgid ""
+"You can change the configuration options at any time using the configuration "
+"dialog. Just select the <b>Configure KMyMoney...</b> option in the "
+"<b>Settings</b> menu."
+msgstr ""
+
+#: dialogs/rc.cpp:83 dialogs/rc.cpp:411 dialogs/rc.cpp:435
+#: kmymoneyutils.cpp:92 kmymoneyutils.cpp:105 mymoney/mymoneyaccount.cpp:753
+#: mymoney/mymoneysecurity.cpp:160
+msgid "Stock"
+msgstr ""
+
+#: dialogs/rc.cpp:84 dialogs/rc.cpp:412 dialogs/rc.cpp:436
+#: kmymoneyutils.cpp:107 mymoney/mymoneysecurity.cpp:163
+msgid "Mutual Fund"
+msgstr ""
+
+#: dialogs/rc.cpp:85 dialogs/rc.cpp:413 dialogs/rc.cpp:437
+#: kmymoneyutils.cpp:109 mymoney/mymoneysecurity.cpp:166
+msgid "Bond"
+msgstr ""
+
+#: mymoney/mymoneysecurity.cpp:172 reports/querytable.cpp:1150
+#: widgets/kmymoneyaccountselector.cpp:76
+msgid "None"
+msgstr ""
+
+#: dialogs/rc.cpp:46 kmymoneyutils.cpp:402 mymoney/mymoneyaccount.cpp:759
+#: mymoney/mymoneyscheduled.cpp:1002 mymoney/mymoneysecurity.cpp:175
+#: views/kforecastview.cpp:174 widgets/register.cpp:54
+#: widgets/register.cpp:485 widgets/transaction.cpp:708
+#: widgets/transaction.cpp:1459
+msgid "Unknown"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragesql.cpp:191
+msgid ""
+"Database apparently in use\n"
+"Opened by %1 on %2 at %3.\n"
+"Open anyway?"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragesql.cpp:229
+msgid "Cannot currently create database for driver %1; please create manually"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragesql.cpp:244
+msgid "Error in create database %1; do you have create permissions?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1329
+#: mymoney/storage/mymoneystoragexml.cpp:166
+msgid "Loading transactions..."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1190
+#: mymoney/storage/mymoneystoragexml.cpp:173
+msgid "Loading accounts..."
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:180
+msgid "Loading securities..."
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:187
+msgid "Loading reports..."
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:268
+msgid "Unknown XML tag %1 found in line %2"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:274
+msgid "Exception while creating a %1 element: %2"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:513
+msgid "Loading file information..."
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:591
+msgid "Loading user information..."
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:655
+msgid "Saving accounts..."
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:678
+msgid "Saving transactions..."
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:747
+msgid "Saving reports..."
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:762
+msgid "Saving budgets..."
+msgstr ""
+
+#: mymoney/storage/mymoneystoragedump.cpp:414
+msgid "not reconciled"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragedump.cpp:417
+msgid "cleared"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragedump.cpp:420
+msgid "reconciled"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragedump.cpp:423
+msgid "frozen"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragedump.cpp:426
+msgid "unknown"
+msgstr ""
+
+#: mymoney/mymoneyaccount.cpp:101
+msgid ""
+"Account %1 contains an opening balance. Please use a KMyMoney version >= 0.8 "
+"and < 0.9 to correct the problem."
+msgstr ""
+
+#: mymoney/mymoneyaccount.cpp:597
+msgid ""
+"_: Brokerage (suffix for account names)\n"
+"Brokerage"
+msgstr ""
+
+#: kmymoneyutils.cpp:74 mymoney/mymoneyaccount.cpp:726
+msgid "Certificate of Deposit"
+msgstr ""
+
+#: kmymoneyutils.cpp:78 mymoney/mymoneyaccount.cpp:732
+msgid "Money Market"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:186 converter/mymoneytemplate.cpp:187
+#: dialogs/knewaccountdlg.cpp:1018 kmymoneyutils.cpp:86
+#: mymoney/mymoneyaccount.cpp:744 views/kaccountsview.cpp:360
+#: views/kbudgetview.cpp:372 views/kcategoriesview.cpp:178
+#: views/khomeview.cpp:1813 views/kmymoneyview.cpp:767
+#: widgets/kmymoneyaccountselector.cpp:68
+#: widgets/kmymoneyaccountselector.cpp:179
+#: widgets/kmymoneyaccountselector.cpp:370 widgets/register.cpp:828
+msgid "Income"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:190 converter/mymoneytemplate.cpp:191
+#: dialogs/knewaccountdlg.cpp:1020 kmymoneyutils.cpp:88
+#: mymoney/mymoneyaccount.cpp:747 views/kaccountsview.cpp:364
+#: views/kbudgetview.cpp:378 views/kcategoriesview.cpp:182
+#: views/kmymoneyview.cpp:768 widgets/kmymoneyaccountselector.cpp:72
+#: widgets/kmymoneyaccountselector.cpp:180
+#: widgets/kmymoneyaccountselector.cpp:380 widgets/register.cpp:829
+msgid "Expense"
+msgstr ""
+
+#: kmymoneyutils.cpp:90 mymoney/mymoneyaccount.cpp:750
+msgid "Investment Loan"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:47
+msgid "Opening Balances"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:398
+msgid "Cannot remove transaction that references a closed account."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1414 mymoney/mymoneyfile.cpp:1433
+#: mymoney/mymoneyfile.cpp:1447 mymoney/mymoneyfile.cpp:1469
+msgid "* Problem with account '%1'"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1419
+msgid " * Parent account '%1' belongs to a different group."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1420 mymoney/mymoneyfile.cpp:1450
+msgid " New parent account is the top level account '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1436
+msgid " * Parent account '%1' does not contain '%2' as sub-account."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1449
+msgid " * The parent with id %1 does not exist anymore."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1471
+msgid " * Child account with id %1 does not exist anymore."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1472
+msgid " The child account list will be reconstructed."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1492
+msgid " * Unable to update account data in engine."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1499
+msgid "* Reconstructing the child lists for"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1536
+msgid " * Unable to update account data for account %1 in engine"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1554
+msgid " * Payee %1 recreated with fixed id"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1583
+msgid " * Payee id updated in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1596
+msgid " * shares set to value in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1599
+msgid " * value set to shares in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1605
+msgid ""
+" * Split %2 in transaction '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1616
+msgid " * action marked as interest in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1643
+msgid " * Payee id updated in split of schedule '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1649
+msgid ""
+" * Split in scheduled transaction '%1' contained value != 0 and shares == 0."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1650
+msgid " Shares set to value."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1658
+msgid " * Removed bankid from split in scheduled transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1671
+msgid " * shares set to value in split in schedule '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1674
+msgid " * value set to shares in split in schedule '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1680
+msgid ""
+" * Split %2 in schedule '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1706
+msgid " * Payee id updated in report '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1723
+msgid " * Payee '%1' removed."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1730
+msgid "Finish! Data is consistent."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1732
+msgid "Finish! %1 problem(s) corrected. %2 problem(s) still present."
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:873 mymoney/mymoneyscheduled.cpp:918
+#: mymoney/mymoneyscheduled.cpp:969 mymoney/mymoneyscheduled.cpp:1265
+#: mymoney/mymoneyscheduletest.cpp:1336
+msgid "Once"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:875 mymoney/mymoneyscheduled.cpp:924
+#: mymoney/mymoneyscheduled.cpp:1267 mymoney/mymoneyscheduletest.cpp:1337
+#: widgets/rc.cpp:72
+msgid "Daily"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:877 mymoney/mymoneyscheduled.cpp:931
+#: mymoney/mymoneyscheduled.cpp:1269 mymoney/mymoneyscheduletest.cpp:1338
+#: widgets/rc.cpp:73
+msgid "Weekly"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:881 mymoney/mymoneyscheduled.cpp:932
+#: mymoney/mymoneyscheduled.cpp:1273 mymoney/mymoneyscheduletest.cpp:1339
+msgid "Every other week"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:879 mymoney/mymoneyscheduled.cpp:1271
+#: mymoney/mymoneyscheduletest.cpp:1340
+msgid "Fortnightly"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:883 mymoney/mymoneyscheduled.cpp:941
+#: mymoney/mymoneyscheduled.cpp:1275 mymoney/mymoneyscheduletest.cpp:1341
+msgid "Every half month"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:887 mymoney/mymoneyscheduled.cpp:934
+#: mymoney/mymoneyscheduled.cpp:1279 mymoney/mymoneyscheduletest.cpp:1342
+msgid "Every four weeks"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:893 mymoney/mymoneyscheduled.cpp:935
+#: mymoney/mymoneyscheduled.cpp:1285 mymoney/mymoneyscheduletest.cpp:1344
+msgid "Every eight weeks"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:895 mymoney/mymoneyscheduled.cpp:948
+#: mymoney/mymoneyscheduled.cpp:1287 mymoney/mymoneyscheduletest.cpp:1345
+msgid "Every two months"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:897 mymoney/mymoneyscheduled.cpp:949
+#: mymoney/mymoneyscheduled.cpp:1289 mymoney/mymoneyscheduletest.cpp:1346
+msgid "Every three months"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:899 mymoney/mymoneyscheduled.cpp:1291
+#: mymoney/mymoneyscheduletest.cpp:1347 widgets/rc.cpp:76
+msgid "Quarterly"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:901 mymoney/mymoneyscheduled.cpp:950
+#: mymoney/mymoneyscheduled.cpp:1293 mymoney/mymoneyscheduletest.cpp:1348
+msgid "Every four months"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:903 mymoney/mymoneyscheduled.cpp:951
+#: mymoney/mymoneyscheduled.cpp:1295 mymoney/mymoneyscheduletest.cpp:1349
+msgid "Twice yearly"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:905 mymoney/mymoneyscheduled.cpp:957
+#: mymoney/mymoneyscheduled.cpp:1297 mymoney/mymoneyscheduletest.cpp:1350
+#: widgets/rc.cpp:20 widgets/rc.cpp:77
+msgid "Yearly"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:907 mymoney/mymoneyscheduled.cpp:958
+#: mymoney/mymoneyscheduled.cpp:1299 mymoney/mymoneyscheduletest.cpp:1351
+msgid "Every other year"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:870 mymoney/mymoneyscheduled.cpp:913
+#: mymoney/mymoneyscheduled.cpp:966
+msgid "Any"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:885 mymoney/mymoneyscheduled.cpp:933
+#: mymoney/mymoneyscheduled.cpp:1277
+msgid "Every three weeks"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:889 mymoney/mymoneyscheduled.cpp:925
+#: mymoney/mymoneyscheduled.cpp:1281
+msgid "Every thirty days"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:971
+msgid "Day"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:973 reports/listtable.cpp:206
+#: widgets/kmymoneycalendar.cpp:123 widgets/rc.cpp:97
+msgid "Week"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:975
+msgid "Half-month"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:977 reports/listtable.cpp:205
+#: widgets/kmymoneycalendar.cpp:124 widgets/rc.cpp:96
+msgid "Month"
+msgstr ""
+
+#: dialogs/rc.cpp:400 mymoney/mymoneyscheduled.cpp:979 views/rc.cpp:14
+msgid "Year"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:989
+msgid "Bill"
+msgstr ""
+
+#: dialogs/rc.cpp:107 dialogs/rc.cpp:162 dialogs/rc.cpp:249 dialogs/rc.cpp:754
+#: mymoney/mymoneyscheduled.cpp:992 widgets/kmymoneycombo.cpp:420
+#: widgets/register.cpp:571
+msgid "Deposit"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:995 reports/querytable.cpp:594
+#: reports/querytable.cpp:696 widgets/kmymoneycombo.cpp:419
+msgid "Transfer"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:1035
+msgid "Any (Error)"
+msgstr ""
+
+#: dialogs/rc.cpp:114 mymoney/mymoneyscheduled.cpp:1047
+msgid "Change the date to the previous Friday"
+msgstr ""
+
+#: dialogs/rc.cpp:115 mymoney/mymoneyscheduled.cpp:1050
+msgid "Change the date to the next Monday"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:1053
+msgid "Do Nothing"
+msgstr ""
+
+#: kmymoney2.cpp:312
+msgid "Open database..."
+msgstr ""
+
+#: kmymoney2.cpp:313
+msgid "Save as database..."
+msgstr ""
+
+#: kmymoney2.cpp:314
+msgid "Backup..."
+msgstr ""
+
+#: kmymoney2.cpp:315 kmymoney2.cpp:321
+msgid "QIF..."
+msgstr ""
+
+#: kmymoney2.cpp:316
+msgid "Gnucash..."
+msgstr ""
+
+#: kmymoney2.cpp:317
+msgid "Statement file..."
+msgstr ""
+
+#: kmymoney2.cpp:319 kmymoney2.cpp:320
+msgid "Account Template..."
+msgstr ""
+
+#: kmymoney2.cpp:322
+msgid "Personal Data..."
+msgstr ""
+
+#: kmymoney2.cpp:325
+msgid "Dump Memory"
+msgstr ""
+
+#: kmymoney2.cpp:327
+msgid "File-Information..."
+msgstr ""
+
+#: kmymoney2.cpp:332
+msgid "Find transaction..."
+msgstr ""
+
+#: kmymoney2.cpp:337
+msgid "Show Transaction Detail"
+msgstr ""
+
+#: kmymoney2.cpp:338 rc.cpp:60
+msgid "Hide reconciled transactions"
+msgstr ""
+
+#: kmymoney2.cpp:339 rc.cpp:57
+msgid "Hide unused categories"
+msgstr ""
+
+#: kmymoney2.cpp:340
+msgid "Show all accounts"
+msgstr ""
+
+#: kmymoney2.cpp:345
+msgid "New institution..."
+msgstr ""
+
+#: kmymoney2.cpp:346
+msgid "Edit institution..."
+msgstr ""
+
+#: kmymoney2.cpp:347
+msgid "Delete institution..."
+msgstr ""
+
+#: kmymoney2.cpp:352
+msgid "New account..."
+msgstr ""
+
+#: kmymoney2.cpp:354
+msgid "Open ledger"
+msgstr ""
+
+#: kmymoney2.cpp:355
+msgid "Reconcile..."
+msgstr ""
+
+#: kmymoney2.cpp:356
+msgid ""
+"_: Finish reconciliation\n"
+"Finish"
+msgstr ""
+
+#: kmymoney2.cpp:357
+msgid ""
+"_: Postpone reconciliation\n"
+"Postpone"
+msgstr ""
+
+#: kmymoney2.cpp:358
+msgid "Edit account..."
+msgstr ""
+
+#: kmymoney2.cpp:359
+msgid "Delete account..."
+msgstr ""
+
+#: kmymoney2.cpp:360
+msgid "Close account"
+msgstr ""
+
+#: kmymoney2.cpp:361
+msgid "Reopen account"
+msgstr ""
+
+#: kmymoney2.cpp:362
+msgid "Transaction report"
+msgstr ""
+
+#: kmymoney2.cpp:364
+msgid "Show balance chart..."
+msgstr ""
+
+#: kmymoney2.cpp:366
+msgid "Map to online account"
+msgstr ""
+
+#: kmymoney2.cpp:367
+msgid "Unmap account"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:126 kmymoney2.cpp:368 views/kpayeesview.cpp:363
+#: widgets/rc.cpp:50
+msgid "Update"
+msgstr ""
+
+#: kmymoney2.cpp:372
+msgid "Update account..."
+msgstr ""
+
+#: kmymoney2.cpp:373
+msgid "Update all accounts..."
+msgstr ""
+
+#: kmymoney2.cpp:378
+msgid "New category..."
+msgstr ""
+
+#: kmymoney2.cpp:379
+msgid "Edit category..."
+msgstr ""
+
+#: kmymoney2.cpp:380
+msgid "Delete category..."
+msgstr ""
+
+#: kmymoney2.cpp:386
+msgid "QIF Profile Editor..."
+msgstr ""
+
+#: kmymoney2.cpp:387
+msgid "Securities..."
+msgstr ""
+
+#: kmymoney2.cpp:388
+msgid "Currencies..."
+msgstr ""
+
+#: kmymoney2.cpp:389
+msgid "Prices..."
+msgstr ""
+
+#: kmymoney2.cpp:390
+msgid "Update Stock and Currency Prices..."
+msgstr ""
+
+#: kmymoney2.cpp:391
+msgid "Consistency Check"
+msgstr ""
+
+#: kmymoney2.cpp:392
+msgid "Performance-Test"
+msgstr ""
+
+#: kmymoney2.cpp:393
+msgid "KCalc..."
+msgstr ""
+
+#: kmymoney2.cpp:399
+msgid "Enable all messages"
+msgstr ""
+
+#: kmymoney2.cpp:400
+msgid "KDE language settings..."
+msgstr ""
+
+#: kmymoney2.cpp:405
+msgid "&Show tip of the day"
+msgstr ""
+
+#: kmymoney2.cpp:410
+msgid ""
+"_: New transaction button\n"
+"New"
+msgstr ""
+
+#: kmymoney2.cpp:415
+msgid ""
+"_: Edit transaction button\n"
+"Edit"
+msgstr ""
+
+#: kmymoney2.cpp:417
+msgid ""
+"_: Enter transaction\n"
+"Enter"
+msgstr ""
+
+#: kmymoney2.cpp:420
+msgid ""
+"_: Edit split button\n"
+"Edit splits"
+msgstr ""
+
+#: kmymoney2.cpp:421
+msgid ""
+"_: Cancel transaction edit\n"
+"Cancel"
+msgstr ""
+
+#: kmymoney2.cpp:422
+msgid ""
+"_: Delete transaction\n"
+"Delete"
+msgstr ""
+
+#: kmymoney2.cpp:423
+msgid ""
+"_: Duplicate transaction\n"
+"Duplicate"
+msgstr ""
+
+#: kmymoney2.cpp:425 kmymoney2.cpp:4826 kmymoney2.cpp:5107
+msgid ""
+"_: Button text for match transaction\n"
+"Match"
+msgstr ""
+
+#: kmymoney2.cpp:426
+msgid ""
+"_: Accept 'imported' and 'matched' transaction\n"
+"Accept"
+msgstr ""
+
+#: kmymoney2.cpp:428
+msgid ""
+"_: Toggle reconciliation flag\n"
+"Toggle"
+msgstr ""
+
+#: kmymoney2.cpp:429
+msgid ""
+"_: Mark transaction cleared\n"
+"Cleared"
+msgstr ""
+
+#: kmymoney2.cpp:430
+msgid ""
+"_: Mark transaction reconciled\n"
+"Reconciled"
+msgstr ""
+
+#: kmymoney2.cpp:431
+msgid ""
+"_: Mark transaction not reconciled\n"
+"Not reconciled"
+msgstr ""
+
+#: kmymoney2.cpp:432
+msgid ""
+"_: Select all transactions\n"
+"Select all"
+msgstr ""
+
+#: kmymoney2.cpp:434 kmymoney2.cpp:5497
+msgid "Goto account"
+msgstr ""
+
+#: kmymoney2.cpp:435 kmymoney2.cpp:5495
+msgid "Goto payee"
+msgstr ""
+
+#: kmymoney2.cpp:436
+msgid "Create scheduled transaction..."
+msgstr ""
+
+#: kmymoney2.cpp:437
+msgid "Assign next number"
+msgstr ""
+
+#: kmymoney2.cpp:438
+msgid ""
+"_: Combine transactions\n"
+"Combine"
+msgstr ""
+
+#: kmymoney2.cpp:440
+msgid "New investment"
+msgstr ""
+
+#: kmymoney2.cpp:441
+msgid "Edit investment..."
+msgstr ""
+
+#: kmymoney2.cpp:442
+msgid "Delete investment..."
+msgstr ""
+
+#: kmymoney2.cpp:443
+msgid "Online price update..."
+msgstr ""
+
+#: kmymoney2.cpp:444
+msgid "Manual price update..."
+msgstr ""
+
+#: kmymoney2.cpp:446
+msgid "New scheduled transaction..."
+msgstr ""
+
+#: kmymoney2.cpp:447
+msgid "Edit scheduled transaction..."
+msgstr ""
+
+#: kmymoney2.cpp:448
+msgid "Delete scheduled transaction..."
+msgstr ""
+
+#: kmymoney2.cpp:449
+msgid "Duplicate scheduled transaction"
+msgstr ""
+
+#: kmymoney2.cpp:450
+msgid "Enter next transaction..."
+msgstr ""
+
+#: kmymoney2.cpp:451
+msgid "Skip next transaction..."
+msgstr ""
+
+#: kmymoney2.cpp:453
+msgid "New payee"
+msgstr ""
+
+#: kmymoney2.cpp:454
+msgid "Rename payee"
+msgstr ""
+
+#: kmymoney2.cpp:455
+msgid "Delete payee"
+msgstr ""
+
+#: kmymoney2.cpp:457
+msgid "New budget"
+msgstr ""
+
+#: kmymoney2.cpp:458
+msgid "Rename budget"
+msgstr ""
+
+#: kmymoney2.cpp:459
+msgid "Delete budget"
+msgstr ""
+
+#: kmymoney2.cpp:460
+msgid "Copy budget"
+msgstr ""
+
+#: kmymoney2.cpp:461
+msgid "Change budget year"
+msgstr ""
+
+#: kmymoney2.cpp:462
+msgid ""
+"_: Budget based on forecast\n"
+"Forecast"
+msgstr ""
+
+#: kmymoney2.cpp:467 kmymoney2.cpp:3990 kmymoney2.cpp:3993 kmymoney2.cpp:3999
+msgid "New currency"
+msgstr ""
+
+#: kmymoney2.cpp:468 kmymoney2.cpp:4021 kmymoney2.cpp:4026
+msgid "Rename currency"
+msgstr ""
+
+#: kmymoney2.cpp:469 kmymoney2.cpp:4039
+msgid "Delete currency"
+msgstr ""
+
+#: dialogs/rc.cpp:69 kmymoney2.cpp:470
+msgid "Select as base currency"
+msgstr ""
+
+#: kmymoney2.cpp:481
+msgid "View back"
+msgstr ""
+
+#: kmymoney2.cpp:482
+msgid "View forward"
+msgstr ""
+
+#: kmymoney2.cpp:611
+msgid "KMyMoney file needs saving. Save ?"
+msgstr ""
+
+#: kmymoney2.cpp:757
+msgid "Creating new document..."
+msgstr ""
+
+#: kmymoney2.cpp:869 kmymoney2.cpp:884
+msgid "Open a file."
+msgstr ""
+
+#: kmymoney2.cpp:872
+msgid ""
+"%1|KMyMoney files\n"
+"%2|All files (*.*)"
+msgstr ""
+
+#: kmymoney2.cpp:873
+msgid "Open File..."
+msgstr ""
+
+#: kmymoney2.cpp:925 kstartuplogo.cpp:100
+msgid "Loading file..."
+msgstr ""
+
+#: kmymoney2.cpp:986
+msgid ""
+"<b>%1</b> is either an invalid filename or the file does not exist. You can "
+"open another file or create a new one."
+msgstr ""
+
+#: kmymoney2.cpp:986
+msgid "File not found"
+msgstr ""
+
+#: kmymoney2.cpp:989
+msgid "File <b>%1</b> is already opened in another instance of KMyMoney"
+msgstr ""
+
+#: kmymoney2.cpp:989
+msgid "Duplicate open"
+msgstr ""
+
+#: kmymoney2.cpp:1001
+msgid "Saving file..."
+msgstr ""
+
+#: kmymoney2.cpp:1035 kmymoney2.cpp:1047 kmymoney2.cpp:1071
+#, c-format
+msgid "Additional encryption key(s) to be used: %1"
+msgstr ""
+
+#: kmymoney2.cpp:1056
+msgid "Saving file with a new filename..."
+msgstr ""
+
+#: kmymoney2.cpp:1067
+msgid "Encryption key to be used"
+msgstr ""
+
+#: kmymoney2.cpp:1072
+msgid "Manage additional keys"
+msgstr ""
+
+#: kmymoney2.cpp:1079
+msgid "No encryption"
+msgstr ""
+
+#: kmymoney2.cpp:1102
+msgid ""
+"_: KMyMoney (Filefilter)\n"
+"KMyMoney files"
+msgstr ""
+
+#: kmymoney2.cpp:1103
+msgid ""
+"_: XML (Filefilter)\n"
+"XML files"
+msgstr ""
+
+#: kmymoney2.cpp:1104
+msgid ""
+"_: Anonymous (Filefilter)\n"
+"Anonymous files"
+msgstr ""
+
+#: kmymoney2.cpp:1105
+msgid "All files"
+msgstr ""
+
+#: kmymoney2.cpp:1193
+msgid "Saving file to database..."
+msgstr ""
+
+#: kmymoney2.cpp:1207
+msgid "Cannot save to current database."
+msgstr ""
+
+#: kmymoney2.cpp:1225
+msgid "Closing window..."
+msgstr ""
+
+#: kmymoney2.cpp:1228 kmymoney2.cpp:1249
+msgid "The file has been changed, save it ?"
+msgstr ""
+
+#: kmymoney2.cpp:1339 kmymoney2.cpp:1352
+msgid "Ready."
+msgstr ""
+
+#: kmymoney2.cpp:1397 kmymoney2.cpp:1433
+msgid "No KMyMoneyFile open"
+msgstr ""
+
+#: kmymoney2.cpp:1401
+msgid "Viewing personal data..."
+msgstr ""
+
+#: kmymoney2.cpp:1408
+msgid "Edit Personal Data"
+msgstr ""
+
+#: kmymoney2.cpp:1424
+#, c-format
+msgid "Unable to store user information: %1"
+msgstr ""
+
+#: kmymoney2.cpp:1447
+msgid "Importing account templates."
+msgstr ""
+
+#: kmymoney2.cpp:1462
+msgid "Unable to import template(s): %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:1471
+msgid "Exporting account templates."
+msgstr ""
+
+#: kmymoney2.cpp:1474
+msgid ""
+"*.kmt|KMyMoney template files\n"
+"*.*|All files"
+msgstr ""
+
+#: kmymoney2.cpp:1475
+msgid "Save as..."
+msgstr ""
+
+#: kmymoney2.cpp:1517
+msgid "Importing file..."
+msgstr ""
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "The statements have been processed with the following results:"
+msgstr ""
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:1754 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "Statement stats"
+msgstr ""
+
+#: kmymoney2.cpp:1602
+msgid ""
+"You cannot import GnuCash data into an existing file. Do you wish to save "
+"this file?"
+msgstr ""
+
+#: kmymoney2.cpp:1615
+msgid "Importing a Gnucash file."
+msgstr ""
+
+#: kmymoney2.cpp:1618
+msgid ""
+"%1|Gnucash files\n"
+"%2|All files (*.*)"
+msgstr ""
+
+#: kmymoney2.cpp:1619
+msgid "Import Gnucash file..."
+msgstr ""
+
+#: kmymoney2.cpp:1658
+msgid "Importing an XML Statement."
+msgstr ""
+
+#: kmymoney2.cpp:1661
+msgid ""
+"%1|XML files\n"
+"%2|All files (*.*)"
+msgstr ""
+
+#: kmymoney2.cpp:1662
+msgid "Import XML Statement..."
+msgstr ""
+
+#: kmymoney2.cpp:1718
+msgid "Error importing %1: This file is not a valid KMM statement file."
+msgstr ""
+
+#: kmymoney2.cpp:1718
+msgid "Invalid Statement"
+msgstr ""
+
+#: kmymoney2.cpp:1754
+msgid "The statement has been processed with the following results:"
+msgstr ""
+
+#: kmymoney2.cpp:1763
+msgid "Exporting file..."
+msgstr ""
+
+#: kmymoney2.cpp:1786
+msgid "The file <b>%1</b> already exists. Do you really want to override it?"
+msgstr ""
+
+#: kmymoney2.cpp:1786
+msgid "File already exists"
+msgstr ""
+
+#: dialogs/rc.cpp:347 dialogs/rc.cpp:649 dialogs/rc.cpp:798 kmymoney2.cpp:1815
+msgid "General"
+msgstr ""
+
+#: kmymoney2.cpp:1816
+msgid "Register"
+msgstr ""
+
+#: kmymoney2.cpp:1817 views/khomeview.cpp:88 views/kmymoneyview.cpp:136
+msgid "Home"
+msgstr ""
+
+#: kmymoney2.cpp:1818 views/kmymoneyview.cpp:176
+msgid ""
+"Scheduled\n"
+"transactions"
+msgstr ""
+
+#: kmymoney2.cpp:1819
+msgid "Encryption"
+msgstr ""
+
+#: kmymoney2.cpp:1820
+msgid "Colors"
+msgstr ""
+
+#: dialogs/rc.cpp:344 dialogs/settings/rc.cpp:107 kmymoney2.cpp:1822
+#: widgets/rc.cpp:33
+msgid "Online Quotes"
+msgstr ""
+
+#: kmymoney2.cpp:1823 reports/pivottable.cpp:2426 views/kmymoneyview.cpp:251
+#: views/kmymoneyview.cpp:253 views/kreportsview.cpp:1415 views/rc.cpp:41
+msgid "Forecast"
+msgstr ""
+
+#: kmymoney2.cpp:1824
+msgid "Plugins"
+msgstr ""
+
+#: kmymoney2.cpp:1893
+msgid ""
+"The file must be saved first before it can be backed up. Do you want to "
+"continue?"
+msgstr ""
+
+#: kmymoney2.cpp:1910
+msgid ""
+"The current implementation of the backup functionality only supports local "
+"files as source files! Your current source file is '%1'."
+msgstr ""
+
+#: kmymoney2.cpp:1913
+msgid "Local files only"
+msgstr ""
+
+#: kmymoney2.cpp:1928
+#, c-format
+msgid "Mounting %1"
+msgstr ""
+
+#: kmymoney2.cpp:1967
+msgid "Backup file for today exists on that device. Replace ?"
+msgstr ""
+
+#: dialogs/rc.cpp:7 kmymoney2.cpp:1967 kmymoney2.cpp:1994 kmymoney2.cpp:2024
+#: kmymoney2.cpp:2032 kmymoney2.cpp:2057 kmymoney2.cpp:2059
+msgid "Backup"
+msgstr ""
+
+#: kmymoney2.cpp:1967
+msgid "&Replace"
+msgstr ""
+
+#: kmymoney2.cpp:1972 kmymoney2.cpp:1997 kmymoney2.cpp:2016 kmymoney2.cpp:2035
+#, c-format
+msgid "Unmounting %1"
+msgstr ""
+
+#: kmymoney2.cpp:1987
+#, c-format
+msgid "Writing %1"
+msgstr ""
+
+#: kmymoney2.cpp:1994
+msgid "Error mounting device"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1995 kmymoney2.cpp:2023 kmymoney2.cpp:2055
+msgid "Done"
+msgstr ""
+
+#: kmymoney2.cpp:2024 kmymoney2.cpp:2057
+msgid "File successfully backed up"
+msgstr ""
+
+#: kmymoney2.cpp:2032
+msgid "Error copying file to device"
+msgstr ""
+
+#: kmymoney2.cpp:2059
+msgid "Error unmounting device"
+msgstr ""
+
+#: kmymoney2.cpp:2143
+#, c-format
+msgid "Cannot add institution: %1"
+msgstr ""
+
+#: kmymoney2.cpp:2185
+#, c-format
+msgid "Unable to store institution: %1"
+msgstr ""
+
+#: kmymoney2.cpp:2192
+#, c-format
+msgid "Unable to edit institution: %1"
+msgstr ""
+
+#: kmymoney2.cpp:2203
+msgid "Do you really want to delete institution <b>%1</b> ?"
+msgstr ""
+
+#: kmymoney2.cpp:2211 kmymoney2.cpp:2215
+#, c-format
+msgid "Unable to delete institution: %1"
+msgstr ""
+
+#: kmymoney2.cpp:2268
+#, c-format
+msgid "Unable to find account: %1"
+msgstr ""
+
+#: kmymoney2.cpp:2309
+msgid ""
+"This account is a liability and if the opening balance represents money "
+"owed, then it should be negative. Negate the amount?\n"
+"\n"
+"Please click Yes to change the opening balance to %1,\n"
+"Please click No to leave the amount as %2,\n"
+"Please click Cancel to abort the account creation."
+msgstr ""
+
+#: kmymoney2.cpp:2345 kmymoney2.cpp:2346
+msgid "Loan payout"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:892 kmymoney2.cpp:2374
+#, c-format
+msgid "Unable to add account: %1"
+msgstr ""
+
+#: kmymoney2.cpp:2392
+msgid ""
+"The category <b>%1</b> currently does not exist. Do you want to create "
+"it?<p><i>The parent account will default to <b>%2</b> but can be changed in "
+"the following dialog</i>."
+msgstr ""
+
+#: kmymoney2.cpp:2392
+msgid "Create category"
+msgstr ""
+
+#: kmymoney2.cpp:2429
+msgid "Create a new Category"
+msgstr ""
+
+#: kmymoney2.cpp:2505
+#, c-format
+msgid "Unable to create account: %1"
+msgstr ""
+
+#: kmymoney2.cpp:2516
+msgid ""
+"The security <b>%1</b> currently does not exist as sub-account of <b>%2</b>. "
+"Do you want to create it?"
+msgstr ""
+
+#: kmymoney2.cpp:2517
+msgid "Create security"
+msgstr ""
+
+#: kmymoney2.cpp:2551
+msgid "Do you really want to delete the investment <b>%1</b>?"
+msgstr ""
+
+#: kmymoney2.cpp:2551
+msgid "Delete investment"
+msgstr ""
+
+#: kmymoney2.cpp:2558
+#, c-format
+msgid "Unable to delete investment: %1"
+msgstr ""
+
+#: kmymoney2.cpp:2640 kmymoney2.cpp:2646
+msgid "Unable to add scheduled transaction: "
+msgstr ""
+
+#: kmymoney2.cpp:2722
+msgid "Adjusting transactions..."
+msgstr ""
+
+#: kmymoney2.cpp:2747
+msgid "Adjusting scheduled transactions..."
+msgstr ""
+
+#: kmymoney2.cpp:2765
+msgid "Adjusting budgets..."
+msgstr ""
+
+#: kmymoney2.cpp:2783
+msgid ""
+"Unable to exchange category <b>%1</b> with category <b>%2</b>. Reason: %3"
+msgstr ""
+
+#: kmymoney2.cpp:2804
+msgid "Do you really want to delete category <b>%1</b>?"
+msgstr ""
+
+#: kmymoney2.cpp:2811
+msgid "Unable to delete category <b>%1</b>. Cause: %2"
+msgstr ""
+
+#: kmymoney2.cpp:2823
+msgid ""
+"Do you want to delete category <b>%1</b> with all its sub-categories or only "
+"the category itself? If you only delete the category itself, all its "
+"sub-categories will be made sub-categories of <b>%2</b>."
+msgstr ""
+
+#: kmymoney2.cpp:2827
+msgid "Delete all"
+msgstr ""
+
+#: kmymoney2.cpp:2828
+msgid "Just the category"
+msgstr ""
+
+#: kmymoney2.cpp:2858
+msgid ""
+"Some sub-categories of category <b>%1</b> cannot be deleted, because they "
+"are still used. They will be made sub-categories of <b>%2</b>. Proceed?"
+msgstr ""
+
+#: kmymoney2.cpp:2878
+msgid "Unable to delete a sub-category of category <b>%1</b>. Reason: %2"
+msgstr ""
+
+#: kmymoney2.cpp:2889
+msgid "Do you really want to delete account <b>%1</b>?"
+msgstr ""
+
+#: kmymoney2.cpp:2901
+msgid "Unable to delete account '%1'. Cause: %2"
+msgstr ""
+
+#: kmymoney2.cpp:2917
+msgid "Edit account '%1'"
+msgstr ""
+
+#: kmymoney2.cpp:2922
+msgid "Edit category '%1'"
+msgstr ""
+
+#: kmymoney2.cpp:3008
+msgid "Unable to modify account '%1'. Cause: %2"
+msgstr ""
+
+#: kmymoney2.cpp:3065
+msgid ""
+"KMyMoney has detected some overdue scheduled transactions for this account. "
+"Do you want to enter those scheduled transactions now?"
+msgstr ""
+
+#: kmymoney2.cpp:3065
+msgid "Scheduled transactions found"
+msgstr ""
+
+#: kmymoney2.cpp:3163
+msgid ""
+"You are about to finish the reconciliation of this account with a difference "
+"between your bank statement and the transactions marked as cleared.\n"
+"Are you sure you want to finish the reconciliation ?"
+msgstr ""
+
+#: kmymoney2.cpp:3165
+msgid "Confirm end of reconciliation"
+msgstr ""
+
+#: kmymoney2.cpp:3339
+msgid ""
+"You have closed this account. It remains in the system because you have "
+"transactions which still refer to it, but is not shown in the views. You can "
+"make it visible again by going to the View menu and selecting <b>Show all "
+"accounts</b> or by unselecting the <b>Don't show closed accounts</b> setting."
+msgstr ""
+
+#: kmymoney2.cpp:3379
+msgid "<b>%1</b> cannot be moved to institution <b>%2</b>. Reason: %3"
+msgstr ""
+
+#: kmymoney2.cpp:3393
+msgid "<b>%1</b> cannot be moved to <b>%2</b>. Reason: %3"
+msgstr ""
+
+#: kmymoney2.cpp:3408
+msgid "%1 YTD Account Transactions"
+msgstr ""
+
+#: dialogs/kbalancechartdlg.cpp:71 kmymoney2.cpp:3409
+#: views/kforecastview.cpp:650 views/khomeview.cpp:276
+#: views/khomeview.cpp:1384 views/kreportsview.cpp:619
+msgid "Generated Report"
+msgstr ""
+
+#: dialogs/rc.cpp:324 dialogs/settings/rc.cpp:80 kmymoney2.cpp:3411
+#: views/kreportsview.cpp:1062 views/rc.cpp:58 views/rc.cpp:59
+msgid "Transactions"
+msgstr ""
+
+#: kmymoney2.cpp:3449
+#, c-format
+msgid "Unable to add scheduled transaction: %1"
+msgstr ""
+
+#: kmymoney2.cpp:3449
+msgid "Add scheduled transaction"
+msgstr ""
+
+#: kmymoney2.cpp:3489
+msgid ""
+"You have entered a scheduled transaction date of <b>%1</b>. Because the "
+"scheduled transaction was last paid on <b>%2</b>, KMyMoney will "
+"automatically adjust the scheduled transaction date to the next date unless "
+"the last payment date is reset. Do you want to reset the last payment date?"
+msgstr ""
+
+#: kmymoney2.cpp:3489
+msgid "Reset Last Payment Date"
+msgstr ""
+
+#: kmymoney2.cpp:3499 kmymoney2.cpp:3519 kmymoney2.cpp:3531
+msgid "Unable to modify scheduled transaction '%1'"
+msgstr ""
+
+#: kmymoney2.cpp:3543
+msgid "Are you sure you want to delete the scheduled transaction <b>%1</b>?"
+msgstr ""
+
+#: kmymoney2.cpp:3546
+msgid ""
+"In case of loan payments it is currently not possible to recreate the "
+"scheduled transaction."
+msgstr ""
+
+#: kmymoney2.cpp:3555
+msgid "Unable to remove scheduled transaction '%1'"
+msgstr ""
+
+#: kmymoney2.cpp:3569
+#, c-format
+msgid ""
+"_: Copy of scheduled transaction name\n"
+"Copy of %1"
+msgstr ""
+
+#: kmymoney2.cpp:3581 kmymoney2.cpp:4352
+msgid "Unable to duplicate transaction(s): %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:3595
+msgid ""
+"Do you really want to skip the <b>%1</b> transaction scheduled for <b>%2</b>?"
+msgstr ""
+
+#: kmymoney2.cpp:3605
+msgid "Unable to skip scheduled transaction <b>%1</b>."
+msgstr ""
+
+#: kmymoney2.cpp:3618
+msgid "Unknown scheduled transaction '%1'"
+msgstr ""
+
+#: kmymoney2.cpp:3673
+msgid ""
+"Are you sure you wish to stop this scheduled transaction from being entered "
+"into the register?\n"
+"\n"
+"KMyMoney will prompt you again next time it starts unless you manually enter "
+"it later."
+msgstr ""
+
+#: kmymoney2.cpp:3725 kmymoney2.cpp:3732
+msgid "Unable to enter scheduled transaction '%1'"
+msgstr ""
+
+#: kmymoney2.cpp:3743 kmymoney2.cpp:3783
+msgid "New Payee"
+msgstr ""
+
+#: kmymoney2.cpp:3745
+msgid "Do you want to add <b>%1</b> as payer/receiver ?"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:892 kmymoney2.cpp:3747
+msgid "New payee/receiver"
+msgstr ""
+
+#: kmymoney2.cpp:3773
+msgid "Unable to add payee"
+msgstr ""
+
+#: kmymoney2.cpp:3826
+msgid "Do you really want to remove the payee <b>%1</b>?"
+msgstr ""
+
+#: kmymoney2.cpp:3828
+msgid "Do you really want to remove all selected payees?"
+msgstr ""
+
+#: kmymoney2.cpp:3830
+msgid "Remove Payee"
+msgstr ""
+
+#: kmymoney2.cpp:3870
+msgid ""
+"At least one transaction/scheduled transaction is still referenced by a "
+"payee. Currently you have all payees selected. However, at least one payee "
+"must remain so that the transaction/scheduled transaction can be reassigned."
+msgstr ""
+
+#: kmymoney2.cpp:3925
+msgid "Unable to reassign payee of transaction/split"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:534 converter/mymoneystatementreader.cpp:959
+#: kmymoney2.cpp:3926 kmymoney2.cpp:3983 views/kbudgetview.cpp:636
+#: views/kbudgetview.cpp:737 views/kbudgetview.cpp:751
+#: views/kpayeesview.cpp:519 views/kpayeesview.cpp:870
+msgid "thrown in"
+msgstr ""
+
+#: kmymoney2.cpp:3982
+msgid "Unable to remove payee(s)"
+msgstr ""
+
+#: kmymoney2.cpp:3990
+msgid "Enter ISO 4217 code for the new currency"
+msgstr ""
+
+#: kmymoney2.cpp:3999
+#, c-format
+msgid "Cannot create new currency. %1"
+msgstr ""
+
+#: kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, c-format
+msgid "Cannot rename currency. %1"
+msgstr ""
+
+#: kmymoney2.cpp:4039
+msgid "Cannot delete currency %1. %2"
+msgstr ""
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Cannot set %1 as base currency: %2"
+msgstr ""
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Set base currency"
+msgstr ""
+
+#: kmymoney2.cpp:4065
+#, c-format
+msgid "Budget %1"
+msgstr ""
+
+#: kmymoney2.cpp:4075
+msgid "Budget %1 (%2)"
+msgstr ""
+
+#: kmymoney2.cpp:4090 kmymoney2.cpp:4139
+msgid "Unable to add budget: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4105
+msgid "Do you really want to remove the budget <b>%1</b>?"
+msgstr ""
+
+#: kmymoney2.cpp:4107
+msgid "Do you really want to remove all selected budgets?"
+msgstr ""
+
+#: kmymoney2.cpp:4109
+msgid "Remove Budget"
+msgstr ""
+
+#: kmymoney2.cpp:4122
+msgid "Unable to remove budget: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4134 views/kreportsview.cpp:659
+#, c-format
+msgid "Copy of %1"
+msgstr ""
+
+#: kmymoney2.cpp:4164
+msgid "Select year"
+msgstr ""
+
+#: kmymoney2.cpp:4164
+msgid "Budget year"
+msgstr ""
+
+#: kmymoney2.cpp:4176 kmymoney2.cpp:4214 kmymoney2.cpp:4274
+msgid "Unable to modify budget: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4192 kmymoney2.cpp:4250
+msgid ""
+"The current budget already contains data. Continuing will replace all "
+"current values of this budget."
+msgstr ""
+
+#: kmymoney2.cpp:4222
+msgid ""
+"Please be aware that changes made in the following dialog affect all KDE "
+"applications not only KMyMoney."
+msgstr ""
+
+#: kmymoney2.cpp:4292
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to delete the transactions anyway?"
+msgstr ""
+
+#: kmymoney2.cpp:4295 views/kgloballedgerview.cpp:1043
+msgid "Transaction already reconciled"
+msgstr ""
+
+#: kmymoney2.cpp:4301
+msgid "Do you really want to delete the selected transaction?"
+msgstr ""
+
+#: kmymoney2.cpp:4303
+msgid "Do you really want to delete all %1 selected transactions?"
+msgstr ""
+
+#: kmymoney2.cpp:4305
+msgid "Delete transaction"
+msgstr ""
+
+#: kmymoney2.cpp:4306
+msgid "Deleting transactions"
+msgstr ""
+
+#: kmymoney2.cpp:4321
+msgid "Duplicating transactions"
+msgstr ""
+
+#: kmymoney2.cpp:4378
+msgid "Unable to delete transaction(s): %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4452 kmymoney2.cpp:4622
+msgid "Unable to modify transaction: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4514
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling and<br>- <b>Cancel</b> returns to the "
+"transaction editor.<p>You can also select an option to save the transaction "
+"automatically when e.g. selecting another transaction."
+msgstr ""
+
+#: kmymoney2.cpp:4514 kmymoney2.cpp:4517
+msgid "Cancel transaction edit"
+msgstr ""
+
+#: kmymoney2.cpp:4517
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling.<p>You can also select an option to save the "
+"transaction automatically when e.g. selecting another transaction."
+msgstr ""
+
+#: kmymoney2.cpp:4667
+msgid "Unable to accept transaction: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4846
+msgid "Unable to unmatch the selected transactions"
+msgstr ""
+
+#: kmymoney2.cpp:4885
+msgid "No manually entered transaction selected for matching"
+msgstr ""
+
+#: kmymoney2.cpp:4887
+msgid "No imported transaction selected for matching"
+msgstr ""
+
+#: kmymoney2.cpp:4895
+msgid "Unable to match the selected transactions"
+msgstr ""
+
+#: kmymoney2.cpp:5097
+msgid "Create a new transaction"
+msgstr ""
+
+#: kmymoney2.cpp:5163
+msgid "Duplicate the current selected transactions"
+msgstr ""
+
+#: kmymoney2.cpp:5223
+msgid ""
+"_: Button text for unmatch transaction\n"
+"Unmatch"
+msgstr ""
+
+#: kmymoney2.cpp:5451 kmymoney2.cpp:5473
+msgid "Goto '%1'"
+msgstr ""
+
+#: kmymoney2.cpp:5582
+msgid "Running consistency check..."
+msgstr ""
+
+#: kmymoney2.cpp:5590
+#, c-format
+msgid "Consistency check failed: %1"
+msgstr ""
+
+#: kmymoney2.cpp:5594
+msgid "Consistency check result"
+msgstr ""
+
+#: kmymoney2.cpp:5603
+msgid "Checking for overdue scheduled transactions..."
+msgstr ""
+
+#: kmymoney2.cpp:5740
+msgid ""
+"You must first select a KMyMoney file before you can import a statement."
+msgstr ""
+
+#: kmymoney2.cpp:5746
+msgid "Importing a statement via Web Connect"
+msgstr ""
+
+#: kmymoney2.cpp:5759
+msgid ""
+"Unable to import %1 using %2 plugin. The plugin returned the following "
+"error: %3"
+msgstr ""
+
+#: kmymoney2.cpp:5759 plugins/ofximport/ofximporterplugin.cpp:646
+msgid "Importing error"
+msgstr ""
+
+#: kmymoney2.cpp:5780
+msgid "All messages have been enabled."
+msgstr ""
+
+#: kmymoney2.cpp:5780
+msgid "All messages"
+msgstr ""
+
+#: kmymoney2.cpp:5855
+msgid "Auto saving..."
+msgstr ""
+
+#: kmymoney2.cpp:5913
+msgid "Unable to setup online parameters for account ''%1'"
+msgstr ""
+
+#: kmymoney2.cpp:5928
+msgid ""
+"Do you really want to remove the mapping of account <b>%1</b> to an online "
+"account? Depending on the details of the online banking method used, this "
+"action cannot be reverted."
+msgstr ""
+
+#: kmymoney2.cpp:5928
+msgid "Remove mapping to online account"
+msgstr ""
+
+#: kmymoney2.cpp:5939
+#, c-format
+msgid "Unable to unmap account from online account: %1"
+msgstr ""
+
+#: kmymoney2.cpp:5956
+msgid " (Brokerage)"
+msgstr ""
+
+#: kmymoney2.cpp:5957
+msgid ""
+"You try to map a brokerage account to an online account. This is usually not "
+"advisable. In general, the investment account should be mapped to the online "
+"account. Please cancel if you intended to map the investment account, "
+"continue otherwise"
+msgstr ""
+
+#: kmymoney2.cpp:5957
+msgid "Mapping brokerage account"
+msgstr ""
+
+#: kmymoney2.cpp:5964
+msgid "Select online banking plugin"
+msgstr ""
+
+#: kmymoney2.cpp:6005
+#, c-format
+msgid "Unable to map account to online account: %1"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:407 converter/mymoneytemplate.cpp:73
+#: views/kmymoneyview.cpp:590
+msgid "Error while loading file '%1'!"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:409 converter/mymoneyqifreader.cpp:965
+#: converter/mymoneytemplate.cpp:75 views/kmymoneyview.cpp:592
+msgid "File access error"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:84
+msgid "<b>%1</b> is not a template file."
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:85 views/kmymoneyview.cpp:603
+msgid "Filetype Error"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:93
+msgid "Error while reading template file <b>%1</b> in line %2, column %3"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:94
+msgid "Template Error"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:101
+msgid "File '%1' not found!"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:142
+msgid "Invalid tag <b>%1</b> in template file <b>%2</b>!"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:214
+#, c-format
+msgid "Loading template %1"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:241
+msgid "Invalid top-level account type <b>%1</b> in template file <b>%2</b>!"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:309
+msgid ""
+"Invalid flag type <b>%1</b> for account <b>%3</b> in template file <b>%2</b>!"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:398 converter/mymoneytemplate.cpp:401
+#: views/kmymoneyview.cpp:1151 views/kmymoneyview.cpp:1154
+msgid "Unable to write changes to '%1'"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:407 views/kmymoneyview.cpp:1162
+msgid "Unable to upload to '%1'"
+msgstr ""
+
+#: converter/mymoneyqifwriter.cpp:70
+msgid ""
+"Unexpected exception '%1' thrown in %2, line %3 caught in "
+"MyMoneyQifWriter::write()"
+msgstr ""
+
+#: converter/mymoneyqifwriter.cpp:80
+msgid "Unable to open file '%1' for writing"
+msgstr ""
+
+#: converter/webpricequote.cpp:340
+#, c-format
+msgid "Symbol found: %1"
+msgstr ""
+
+#: converter/webpricequote.cpp:368
+msgid "Price found: %1 (%2)"
+msgstr ""
+
+#: converter/webpricequote.cpp:380
+#, c-format
+msgid "Date found: %1"
+msgstr ""
+
+#: converter/webpricequote.cpp:397 converter/webpricequote.cpp:403
+#, c-format
+msgid "Unable to update price for %1"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:170
+msgid ""
+"_: Category name\n"
+"Reinvested dividend"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:173
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (long term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:176
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (short term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:179
+msgid ""
+"_: Category name\n"
+"Dividend"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:182
+msgid ""
+"_: Category name\n"
+"Interest"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:185
+msgid ""
+"_: Category name\n"
+"Capital Gain (short term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:188
+msgid ""
+"_: Category name\n"
+"Capital Gain (mid term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:191
+msgid ""
+"_: Category name\n"
+"Capital Gain (long term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:194
+msgid ""
+"_: Category name\n"
+"Returned capital"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:197
+msgid ""
+"_: Category name\n"
+"Miscellaneous income"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:200
+msgid ""
+"_: Category name\n"
+"Miscellaneous expense"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:203
+msgid ""
+"_: Category name\n"
+"Investment fees"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:205
+#, c-format
+msgid "Unknown QIF type %1"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Date format selection"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Pick the date format that suits your input file"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:366
+msgid "Importing QIF ..."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:442
+msgid "Reading QIF ..."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Adding transactions"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Now adding the transactions to your ledger..."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:533
+msgid "Unable to add transactions"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:567
+msgid ""
+"_: QIF tag for liability account\n"
+"Oth L"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:572
+msgid ""
+"_: QIF tag for category\n"
+"Cat"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:575
+msgid ""
+"_: QIF tag for security\n"
+"Security"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:578
+msgid ""
+"_: QIF tag for investment account\n"
+"Invst"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:581
+msgid ""
+"_: QIF tag for prices\n"
+"Prices"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:599
+msgid ""
+"_: QIF tag for a class\n"
+"Class"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:753 converter/mymoneyqifreader.cpp:2203
+msgid ""
+"The %1 account currently has an opening balance of %2. This QIF file reports "
+"an opening balance of %3. Would you like to overwrite the current balance "
+"with the one from the QIF file?"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:754 converter/mymoneyqifreader.cpp:2204
+msgid "Overwrite opening balance"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:879 converter/mymoneyqifreader.cpp:890
+#: converter/mymoneyqifreader.cpp:914
+msgid "Autogenerated by QIF importer"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:907
+msgid "QIF imported, no account name supplied"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:940
+msgid ""
+"KMyMoney has imported a second opening balance transaction into account "
+"<b>%1</b> which differs from the one found already on file. Please correct "
+"this manually once the import is done."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:940
+msgid "Opening balance problem"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:963
+msgid "Error while creating opening balance transaction"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1029 converter/mymoneyqifreader.cpp:1276
+msgid ""
+"The date entry \"%1\" read from the file cannot be interpreted through the "
+"current date profile setting of \"%2\".\n"
+"\n"
+"Pressing \"Continue\" will assign todays date to the transaction. Pressing "
+"\"Cancel\" will abort the import operation. You can then restart the import "
+"and select a different QIF profile or create a new one."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1035 converter/mymoneyqifreader.cpp:1282
+msgid "Invalid date format"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1398
+#: converter/mymoneystatementreader.cpp:589
+#: converter/mymoneystatementreader.cpp:592
+msgid "Statement Importer"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1413
+#: converter/mymoneystatementreader.cpp:644
+msgid ""
+"This investment account does not contain the \"%1\" security. Transactions "
+"involving this security will be ignored."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1415
+#: converter/mymoneystatementreader.cpp:612
+#: converter/mymoneystatementreader.cpp:644
+msgid "Security not found"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2021
+msgid "%1 (Investment)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2022
+msgid "Autogenerated by QIF importer from type Mutual account entry"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2085 converter/mymoneyqifreader.cpp:2228
+msgid "account"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2086
+msgid "al"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2093
+msgid "category"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2094
+msgid "ei"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2095
+msgid "Category selection"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2110
+msgid "Account \"%1\" disappeared: "
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2131
+msgid "The %1 '%2' does not exist. Do you want to create it?"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2140
+#, c-format
+msgid "Select %1"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2142
+msgid ""
+"The %1 <b>%2</b> currently exists. Do you want to import transactions to "
+"this account?"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2147
+msgid ""
+"The %1 <b>%2</b> currently does not exist. You can create a new %3 by "
+"pressing the <b>Create</b> button or select another %4 manually from the "
+"selection box."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2154
+#, c-format
+msgid "Import transactions to %1"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2155
+msgid ""
+"No %1 information has been found in the selected QIF file. Please select an "
+"account using the selection box in the dialog or create a new %2 by pressing "
+"the <b>Create</b> button."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2229
+msgid "You must select or create an account."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2231
+msgid "You must select or create a category."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:100
+msgid "_Fees"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:106
+msgid "_Dividend"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:289
+#, c-format
+msgid "Importing statement for account %1"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:291
+msgid "Importing statement without transactions"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:385
+msgid " Statement balance is not contained in statement."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:387
+msgid " Statement balance on %1 is reported to be %2"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:389
+msgid " Transactions"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:390
+msgid " %1 processed"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:391
+msgid " %1 added"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:392
+msgid " %1 matched"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:393
+msgid " %1 duplicates"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:394
+msgid " Payees"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:395
+msgid " %1 created"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:483
+#, c-format
+msgid "Error creating security record: %1"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:612
+msgid ""
+"This imported statement contains investment transactions with no security. "
+"These transactions will be ignored."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:803
+msgid "(Fees) "
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:880
+msgid ""
+"Do you want to add \"%1\" as payee/receiver?\n"
+"\n"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:881
+msgid ""
+"Selecting \"Yes\" will create the payee, \"No\" will skip creation of a "
+"payee record and remove the payee information from this transaction. "
+"Selecting \"Cancel\" aborts the import operation.\n"
+"\n"
+"If you select \"No\" here and mark the \"Don't ask again\" checkbox, the "
+"payee information for all following transactions referencing \"%1\" will be "
+"removed."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:917
+msgid "Save Category"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:918
+msgid "No Category"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:919 dialogs/rc.cpp:4
+msgid "Abort"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:926
+msgid "Please select a default category for payee '%1':"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:958
+msgid "Unable to add payee/receiver"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid ""
+"KMyMoney has found a scheduled transaction named <b>%1</b> which matches an "
+"imported transaction. Do you want KMyMoney to enter this schedule now so "
+"that the transaction can be matched? "
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid "Schedule found"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1219
+msgid "Problem adding or matching imported transaction with id '%1': %2"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1268
+msgid ""
+"<b>You have downloaded a statement for the following account:</b><br><br>"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1269
+#, c-format
+msgid " - Account Name: %1"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1270
+#, c-format
+msgid " - Account Type: %1"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1271
+#, c-format
+msgid " - Account Number: %1"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1279
+msgid "Do you want to import transactions to this account?"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1281
+msgid ""
+"KMyMoney cannot determine which of your accounts to use. You can create a "
+"new account by pressing the <b>Create</b> button or select another one "
+"manually from the selection box below."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1287
+msgid ""
+"No account information has been found in the selected statement file. Please "
+"select an account using the selection box in the dialog or create a new "
+"account by pressing the <b>Create</b> button."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1294
+msgid "Import transactions"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1330
+msgid ""
+"You must select an account, create a new one, or press the <b>Abort</b> "
+"button."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:119
+msgid "%1: Sorry. This importer cannot handle version %2 of element %3"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:193
+#, c-format
+msgid "Account%1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:197
+#, c-format
+msgid "Stock%1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:206
+#, c-format
+msgid "Payee%1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:212
+#, c-format
+msgid "Schedule%1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:262
+msgid "This version of the importer cannot handle multi-book files."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:912
+msgid "Invalid header for file. Should be 'gnc-v2'"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:937 converter/mymoneygncreader.cpp:972
+#: converter/mymoneygncreader.cpp:1062
+#, c-format
+msgid ""
+"Import failed:\n"
+"\n"
+"%1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1065
+msgid "Import complete"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1120
+msgid "Disguise your wealth"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1121
+msgid ""
+"Each monetary value on your file will be multiplied by a random number "
+"between 0.01 and 1.99\n"
+"with a different value used for each transaction. In addition, to further "
+"disguise the true\n"
+"values, you may enter a number between %1 and %2 which will be applied to "
+"all values.\n"
+"These numbers will not be stored in the file."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1135
+msgid "Loading commodities..."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1160
+msgid "Loading prices..."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1164 converter/mymoneygncreader.cpp:1171
+msgid "Imported History"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1251
+#, c-format
+msgid "Current importer does not recognize GnuCash account type %1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1471
+msgid "Imported Transaction"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1519
+msgid "Loading templates..."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1531
+msgid "Unknown payee"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1723
+msgid "Loading schedules..."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1735
+#, c-format
+msgid "Can't find template transaction for schedule %1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1910
+msgid "Reorganizing accounts..."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1972
+msgid ""
+"Your main currency seems to be %1 (%2); do you want to set this as your base "
+"currency?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1993
+msgid "More"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1997
+msgid "Save Report"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2017
+msgid ""
+"Problems were encountered in converting schedule '%1'.\n"
+"Do you want to review or edit it now?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2039
+msgid ""
+"Found:\n"
+"\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2040
+msgid " commodities (equities)\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2041
+msgid " prices\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2042
+msgid " accounts\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2043
+msgid " transactions\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2044
+msgid " schedules\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2047
+msgid "No inconsistencies were detected"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2049
+msgid " inconsistencies were detected and corrected\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2054
+msgid " orphan accounts were created\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2059
+msgid " possible schedule problems were noted\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2064
+msgid "Small Business Features (Customers, Invoices, etc.)"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2065 views/kmymoneyview.cpp:241
+#: views/kmymoneyview.cpp:243
+msgid "Budgets"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2066
+msgid "Lots"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2068
+msgid "The following features found in your file are not currently supported:"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2071
+msgid ""
+"\n"
+"\n"
+"Press More for further information"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2139
+msgid "Orphan created from unknown gnucash account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2170
+msgid "Internal error - invalid interval char in incrDate"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2233
+msgid "Enter the investment account name "
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2234
+msgid "My Investments"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2269
+#, c-format
+msgid "Select parent investment account or enter new name. Stock %1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2292 converter/mymoneygncreader.cpp:2307
+msgid "%1 is not an Investment Account. Do you wish to make it one?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2408
+msgid ""
+"An Investment account must be a child of an Asset account\n"
+"Account %1 will be stored under the main Asset account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2410
+msgid ""
+"An Income account must be a child of an Income account\n"
+"Account %1 will be stored under the main Income account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2412
+msgid ""
+"An Expense account must be a child of an Expense account\n"
+"Account %1 will be stored under the main Expense account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2414
+msgid ""
+"One or more transactions contain a reference to an otherwise unknown "
+"account\n"
+"An asset account with the name %1 has been created to hold the data"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2416
+msgid "Schedule %1 has interval of %2 which is not currently available"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2417
+msgid "Schedule %1 dropped at user request"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2418
+msgid "Schedule %1 contains unknown action (key = %2, type = %3)"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2419
+msgid "Schedule %1 contains multiple actions; only one has been imported"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2420
+msgid "Schedule %1 contains no valid splits"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2421
+msgid ""
+"Schedule %1 appears to contain a formula. GnuCash formulae are not "
+"convertible"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2422
+msgid ""
+"Schedule %1 contains unknown interval specification; please check for "
+"correct operation"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2423
+msgid ""
+"Schedule %1 contains a deferred interval specification; please check for "
+"correct operation"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2424
+msgid ""
+"Account or Category %1, transaction date %2; split contains invalid value; "
+"please check"
+msgstr ""
+
+#: kmymoneyutils.cpp:146
+msgid "&New Schedule..."
+msgstr ""
+
+#: kmymoneyutils.cpp:148
+msgid "Create a new schedule."
+msgstr ""
+
+#: kmymoneyutils.cpp:149
+msgid "Use this to create a new schedule."
+msgstr ""
+
+#: kmymoneyutils.cpp:158
+msgid "&Filter"
+msgstr ""
+
+#: kmymoneyutils.cpp:160
+msgid "Filter out accounts"
+msgstr ""
+
+#: kmymoneyutils.cpp:161
+msgid "Use this to filter out accounts"
+msgstr ""
+
+#: kmymoneyutils.cpp:192
+msgid "Preferred accounts"
+msgstr ""
+
+#: kmymoneyutils.cpp:193
+msgid "Payment accounts"
+msgstr ""
+
+#: kmymoneyutils.cpp:194
+msgid "Favorite reports"
+msgstr ""
+
+#: kmymoneyutils.cpp:195
+msgid "Forecast (schedule)"
+msgstr ""
+
+#: kmymoneyutils.cpp:196
+msgid "Networth forecast"
+msgstr ""
+
+#: kmymoneyutils.cpp:197
+msgid "Forecast (history)"
+msgstr ""
+
+#: kmymoneyutils.cpp:198
+msgid "Assets and Liabilities"
+msgstr ""
+
+#: kmymoneyutils.cpp:199 reports/pivottable.cpp:2416 views/khomeview.cpp:1393
+#: widgets/rc.cpp:70
+msgid "Budget"
+msgstr ""
+
+#: kmymoneyutils.cpp:200
+msgid "CashFlow"
+msgstr ""
+
+#: dialogs/kenterscheduledlg.cpp:153 kmymoneyutils.cpp:366
+msgid "Unable to load schedule details"
+msgstr ""
+
+#: kmymoneyutils.cpp:390 widgets/register.cpp:473
+msgid ""
+"_: Reconcile state 'Not reconciled'\n"
+"Not reconciled"
+msgstr ""
+
+#: kmymoneyutils.cpp:393 widgets/register.cpp:476
+msgid ""
+"_: Reconcile state 'Cleared'\n"
+"Cleared"
+msgstr ""
+
+#: kmymoneyutils.cpp:396 widgets/register.cpp:479
+msgid ""
+"_: Reconcile state 'Reconciled'\n"
+"Reconciled"
+msgstr ""
+
+#: kmymoneyutils.cpp:399 widgets/register.cpp:482
+msgid ""
+"_: Reconcile state 'Frozen'\n"
+"Frozen"
+msgstr ""
+
+#: kmymoneyutils.cpp:410
+msgid ""
+"_: Reconcile flag C\n"
+"C"
+msgstr ""
+
+#: kmymoneyutils.cpp:413
+msgid ""
+"_: Reconcile flag R\n"
+"R"
+msgstr ""
+
+#: kmymoneyutils.cpp:416
+msgid ""
+"_: Reconcile flag F\n"
+"F"
+msgstr ""
+
+#: kmymoneyutils.cpp:419
+msgid ""
+"_: Flag for unknown reconciliation state\n"
+"?"
+msgstr ""
+
+#: _tips.cpp:3
+msgid ""
+"<p>...that you can change the sort order of ledger entries by\n"
+"right-clicking the header of the ledger view?\n"
+msgstr ""
+
+#: _tips.cpp:9
+msgid ""
+"<p>...that you can easily move to the other side of a transfer transaction\n"
+"by opening the context menu with the right mouse button and selecting one of "
+"the\n"
+"'Goto' functions?\n"
+msgstr ""
+
+#: _tips.cpp:16
+msgid ""
+"<p>...that you can start editing a transaction by double-clicking on the\n"
+"transaction in the register?\n"
+msgstr ""
+
+#: _tips.cpp:22
+msgid ""
+"<p>...that you can show more details of the selected transaction in the\n"
+"register by selecting the 'ledger lens' feature in the settings dialog?\n"
+msgstr ""
+
+#: _tips.cpp:28
+msgid ""
+"<p>...that transactions with no category assigned or split\n"
+"transactions with unassigned values are marked with an exclamation mark \n"
+"on a yellow triangle in the register?\n"
+msgstr ""
+
+#: _tips.cpp:35
+msgid ""
+"<p>...that you can show all details of the transactions in the register\n"
+"by typing &lt;Ctrl-T&gt; or selecting the 'Settings/Show Transaction "
+"Detail'\n"
+"menu entry? You can turn this feature off the same way.\n"
+msgstr ""
+
+#: _tips.cpp:42
+msgid ""
+"<p>...that you can switch between a listing of all accounts or\n"
+"an icon view of all asset and liability accounts with the tabs\n"
+"in the accounts view?\n"
+msgstr ""
+
+#: _tips.cpp:49
+msgid "<p>...that the KMyMoney development team wishes you a nice day?\n"
+msgstr ""
+
+#: _tips.cpp:54
+msgid ""
+"<p>...you can use your own external filter program to convert any\n"
+"import format to QIF on the fly? See the QIF profile editor for\n"
+"more details.\n"
+msgstr ""
+
+#: _tips.cpp:61
+msgid ""
+"<p>...that you can create a scheduled transaction from an existing\n"
+"one by selecting the context menu on a transaction in the ledger\n"
+"or the \"More...\"-menu in the transaction form?\n"
+msgstr ""
+
+#: _tips.cpp:68
+msgid ""
+"<p>...that you can switch to the payee of a transaction\n"
+"by selecting the context menu on a transaction in the ledger\n"
+"or in the transaction menu?\n"
+msgstr ""
+
+#: _tips.cpp:75
+msgid ""
+"<p>...that you can modify the colors and fonts used for the ledgers\n"
+"via <i>Configure/Register/...</i>?\n"
+msgstr ""
+
+#: _tips.cpp:81
+msgid ""
+"<p>...that you can hide transactions prior to a specific date?\n"
+"The date can be modified via <i>Configure/Register/Filter</i>.\n"
+msgstr ""
+
+#: _tips.cpp:87
+msgid ""
+"<p>...that you can customize the \"Home-Page\"\n"
+"via <i>Configure/Home</i>?\n"
+msgstr ""
+
+#: _tips.cpp:93
+msgid ""
+"<p>...that you can enter new transactions even while reconciling\n"
+"an account? You can also make the transaction form visible.\n"
+msgstr ""
+
+#: _tips.cpp:99
+msgid ""
+"<p>...that you can actively support the KMyMoney development team in\n"
+"cases that heavily depend on your data? You can save your data in an\n"
+"anonymized way for this support.<p>\n"
+"Just open your data file and immediately\n"
+"select <b>File/Save as...</b>. In the <b>Save As...</b> dialog\n"
+"select the filter <b>Anonymous Files</b> and make sure your file gets\n"
+"the extensions <b>.anon.xml</b>. <p>\n"
+"To verify, how the data looks like you are about to send away, you can open\n"
+"this file in KMyMoney and see how the developers see your data.\n"
+msgstr ""
+
+#: _tips.cpp:112
+msgid ""
+"<p>... that you can import your bank statements even without a network \n"
+"connection? Just select the file (OFX or QIF) from the File->Import "
+"menu.</p>\n"
+"<p>Provided by Jose Jorge</p>\n"
+msgstr ""
+
+#: reports/listtable.cpp:159 reports/listtable.cpp:163
+#: reports/pivottable.cpp:1564
+msgid ""
+"_: Report date range\n"
+"%1 through %2"
+msgstr ""
+
+#: reports/listtable.cpp:171 reports/pivottable.cpp:1571
+#, c-format
+msgid "All currencies converted to %1"
+msgstr ""
+
+#: reports/listtable.cpp:172 reports/pivottable.cpp:1328
+msgid "All currencies converted to %1\n"
+msgstr ""
+
+#: reports/listtable.cpp:176 reports/pivottable.cpp:1573
+msgid "All values shown in %1 unless otherwise noted"
+msgstr ""
+
+#: reports/listtable.cpp:177 reports/pivottable.cpp:1330
+msgid "All values shown in %1 unless otherwise noted\n"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:73 dialogs/kfindtransactiondlg.cpp:188
+#: dialogs/rc.cpp:53 dialogs/rc.cpp:63 dialogs/rc.cpp:208 dialogs/rc.cpp:805
+#: dialogs/settings/rc.cpp:111 dialogs/transactioneditor.cpp:844
+#: reports/listtable.cpp:196 views/khomeview.cpp:412 views/khomeview.cpp:485
+#: views/khomeview.cpp:519 views/rc.cpp:61 widgets/kmymoneypriceview.cpp:128
+#: widgets/rc.cpp:36 widgets/register.cpp:565 widgets/transaction.cpp:1027
+#: widgets/transaction.cpp:1484
+msgid "Date"
+msgstr ""
+
+#: reports/listtable.cpp:198
+msgid "Num"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:204 dialogs/kmymoneysplittable.cpp:78
+#: dialogs/kmymoneysplittable.cpp:831 dialogs/rc.cpp:217
+#: dialogs/transactioneditor.cpp:831 dialogs/transactioneditor.cpp:1374
+#: dialogs/transactioneditor.cpp:1382 dialogs/transactioneditor.cpp:1396
+#: dialogs/transactioneditor.cpp:1449 dialogs/transactioneditor.cpp:1456
+#: dialogs/transactioneditor.cpp:1504 reports/listtable.cpp:200
+#: views/kcategoriesview.cpp:76 views/rc.cpp:62 widgets/rc.cpp:115
+#: widgets/register.cpp:62 widgets/transaction.cpp:848
+#: widgets/transaction.cpp:906
+msgid "Category"
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:79 dialogs/kmymoneysplittable.cpp:837
+#: reports/listtable.cpp:202 widgets/rc.cpp:101 widgets/transaction.cpp:1042
+#: widgets/transaction.cpp:1628
+msgid "Memo"
+msgstr ""
+
+#: reports/listtable.cpp:203
+msgid "Top Category"
+msgstr ""
+
+#: reports/listtable.cpp:204
+msgid "Category Type"
+msgstr ""
+
+#: dialogs/rc.cpp:229 dialogs/settings/rc.cpp:152 reports/listtable.cpp:207
+#: widgets/kmymoneycombo.cpp:346 widgets/rc.cpp:107
+msgid "Reconciled"
+msgstr ""
+
+#: reports/listtable.cpp:208 widgets/rc.cpp:117
+msgid "Action"
+msgstr ""
+
+#: dialogs/investactivities.cpp:199 dialogs/investactivities.cpp:287
+#: dialogs/investactivities.cpp:424 dialogs/investactivities.cpp:504
+#: dialogs/investactivities.cpp:544 dialogs/investtransactioneditor.cpp:241
+#: reports/listtable.cpp:209 widgets/rc.cpp:103 widgets/transaction.cpp:1513
+msgid "Shares"
+msgstr ""
+
+#: dialogs/investtransactioneditor.cpp:248
+#: dialogs/investtransactioneditor.cpp:1067
+#: dialogs/investtransactioneditor.cpp:1068
+#: dialogs/investtransactioneditor.cpp:1072
+#: dialogs/kequitypriceupdatedlg.cpp:72 dialogs/rc.cpp:109 dialogs/rc.cpp:164
+#: dialogs/rc.cpp:251 dialogs/rc.cpp:756 dialogs/rc.cpp:827
+#: dialogs/settings/rc.cpp:117 reports/listtable.cpp:210
+#: reports/listtable.cpp:211 reports/pivottable.cpp:2441
+#: views/kinvestmentview.cpp:80 widgets/kmymoneypriceview.cpp:129
+#: widgets/rc.cpp:43 widgets/rc.cpp:105 widgets/register.cpp:573
+msgid "Price"
+msgstr ""
+
+#: reports/listtable.cpp:212
+msgid "Net Value"
+msgstr ""
+
+#: reports/listtable.cpp:213
+msgid "Buys"
+msgstr ""
+
+#: reports/listtable.cpp:214
+msgid "Sells"
+msgstr ""
+
+#: reports/listtable.cpp:215
+msgid "Dividends Reinvested"
+msgstr ""
+
+#: reports/listtable.cpp:216
+msgid "Dividends Paid Out"
+msgstr ""
+
+#: reports/listtable.cpp:217
+msgid "Starting Balance"
+msgstr ""
+
+#: reports/listtable.cpp:218
+msgid "Ending Balance"
+msgstr ""
+
+#: reports/listtable.cpp:219
+msgid "Annualized Return"
+msgstr ""
+
+#: reports/listtable.cpp:220
+msgid "Return On Investment"
+msgstr ""
+
+#: dialogs/rc.cpp:106 dialogs/rc.cpp:161 dialogs/rc.cpp:248 dialogs/rc.cpp:505
+#: dialogs/rc.cpp:570 dialogs/rc.cpp:667 dialogs/rc.cpp:753
+#: reports/listtable.cpp:223 widgets/register.cpp:570
+msgid "Payment"
+msgstr ""
+
+#: dialogs/rc.cpp:111 dialogs/rc.cpp:166 dialogs/rc.cpp:253 dialogs/rc.cpp:709
+#: dialogs/rc.cpp:758 reports/listtable.cpp:224 widgets/rc.cpp:119
+#: widgets/register.cpp:575
+msgid "Balance"
+msgstr ""
+
+#: reports/listtable.cpp:227 views/kscheduledview.cpp:74
+msgid "Next Due Date"
+msgstr ""
+
+#: reports/listtable.cpp:229 views/kscheduledview.cpp:76
+msgid "Payment Method"
+msgstr ""
+
+#: dialogs/rc.cpp:803 reports/listtable.cpp:231 widgets/rc.cpp:2
+msgid "Description"
+msgstr ""
+
+#: reports/listtable.cpp:232
+msgid "Opening Date"
+msgstr ""
+
+#: reports/listtable.cpp:234
+msgid "Balance Early Warning"
+msgstr ""
+
+#: reports/listtable.cpp:235
+msgid "Balance Max Limit"
+msgstr ""
+
+#: reports/listtable.cpp:236
+msgid "Credit Early Warning"
+msgstr ""
+
+#: reports/listtable.cpp:237
+msgid "Credit Max Limit"
+msgstr ""
+
+#: dialogs/rc.cpp:376 reports/listtable.cpp:238
+msgid "Tax"
+msgstr ""
+
+#: reports/listtable.cpp:239
+msgid "Preferred"
+msgstr ""
+
+#: reports/listtable.cpp:240
+msgid "Loan Amount"
+msgstr ""
+
+#: dialogs/rc.cpp:511 reports/listtable.cpp:241
+msgid "Interest Rate"
+msgstr ""
+
+#: reports/listtable.cpp:242
+msgid "Next Interest Change"
+msgstr ""
+
+#: reports/listtable.cpp:243
+msgid "Periodic Payment"
+msgstr ""
+
+#: reports/listtable.cpp:244
+msgid "Final Payment"
+msgstr ""
+
+#: reports/listtable.cpp:245 views/khomeview.cpp:766 views/khomeview.cpp:1265
+#: views/khomeview.cpp:1273
+msgid "Current Balance"
+msgstr ""
+
+#: dialogs/investactivities.cpp:201 dialogs/investactivities.cpp:289
+#: dialogs/investactivities.cpp:368 dialogs/investactivities.cpp:426
+#: dialogs/rc.cpp:327 reports/listtable.cpp:360 reports/listtable.cpp:364
+#: reports/listtable.cpp:556 reports/listtable.cpp:558
+#: reports/pivottable.cpp:1343 reports/pivottable.cpp:1445
+#: reports/pivottable.cpp:1505 reports/pivottable.cpp:1598
+#: reports/pivottable.cpp:1768 reports/pivottable.cpp:1845
+#: reports/pivottable.cpp:2165 reports/pivottable.cpp:2167
+#: reports/pivottable.cpp:2187 reports/pivottable.cpp:2189
+#: reports/querytabletest.cpp:134 reports/querytabletest.cpp:135
+#: reports/querytabletest.cpp:136 reports/querytabletest.cpp:137
+#: reports/querytabletest.cpp:162 reports/querytabletest.cpp:163
+#: reports/querytabletest.cpp:164 reports/querytabletest.cpp:197
+#: reports/querytabletest.cpp:198 reports/querytabletest.cpp:224
+#: reports/querytabletest.cpp:250 reports/querytabletest.cpp:251
+#: reports/querytabletest.cpp:252 reports/querytabletest.cpp:275
+#: reports/querytabletest.cpp:276 reports/querytabletest.cpp:277
+#: reports/querytabletest.cpp:366 reports/querytabletest.cpp:422
+#: reports/querytabletest.cpp:423 views/kforecastview.cpp:568 views/rc.cpp:18
+#: widgets/kmymoneyaccounttreeforecast.cpp:139 widgets/transaction.cpp:1643
+msgid "Total"
+msgstr ""
+
+#: reports/listtable.cpp:444
+msgid "Initial Market Value"
+msgstr ""
+
+#: reports/listtable.cpp:445
+msgid "Ending Market Value"
+msgstr ""
+
+#: reports/listtable.cpp:448 reports/querytabletest.cpp:651
+msgid "Opening Balance"
+msgstr ""
+
+#: reports/listtable.cpp:449 reports/querytabletest.cpp:652
+#: reports/querytabletest.cpp:653
+msgid "Closing Balance"
+msgstr ""
+
+#: reports/listtable.cpp:490 reports/listtable.cpp:491
+msgid "Calculated"
+msgstr ""
+
+#: reports/listtable.cpp:572 reports/listtable.cpp:574
+#: reports/pivottable.cpp:1530 reports/pivottable.cpp:1886
+#: reports/querytabletest.cpp:138 reports/querytabletest.cpp:165
+#: reports/querytabletest.cpp:199 reports/querytabletest.cpp:225
+#: reports/querytabletest.cpp:253 reports/querytabletest.cpp:278
+#: reports/querytabletest.cpp:367 reports/querytabletest.cpp:402
+#: reports/querytabletest.cpp:424 reports/querytabletest.cpp:548
+#: reports/querytabletest.cpp:551 reports/querytabletest.cpp:586
+msgid "Grand Total"
+msgstr ""
+
+#: dialogs/rc.cpp:233 reports/pivottable.cpp:339 views/kscheduledview.cpp:174
+#: views/kscheduledview.cpp:433 views/kscheduledview.cpp:449
+#: widgets/kmymoneyscheduledcalendar.cpp:48
+msgid "Transfers"
+msgstr ""
+
+#: reports/pivottable.cpp:1951
+msgid "Legend"
+msgstr ""
+
+#: reports/pivottable.cpp:2411 views/khomeview.cpp:1406
+#: views/khomeview.cpp:1443
+msgid "Actual"
+msgstr ""
+
+#: reports/pivottable.cpp:2421 views/khomeview.cpp:1409
+#: views/khomeview.cpp:1446
+msgid "Difference"
+msgstr ""
+
+#: reports/pivottable.cpp:2431
+msgid "Moving Average"
+msgstr ""
+
+#: reports/pivottable.cpp:2436
+msgid "Moving Average Price"
+msgstr ""
+
+#: reports/objectinfotable.cpp:214 reports/querytable.cpp:693
+#: reports/querytable.cpp:736 reports/querytable.cpp:1356
+#: reports/querytable.cpp:1375 views/kpayeesview.cpp:742
+#, c-format
+msgid "Transfer from %1"
+msgstr ""
+
+#: reports/objectinfotable.cpp:215 reports/querytable.cpp:694
+#: reports/querytable.cpp:735 reports/querytable.cpp:1355
+#: reports/querytable.cpp:1374 views/kpayeesview.cpp:740
+#, c-format
+msgid "Transfer to %1"
+msgstr ""
+
+#: reports/querytabletest.cpp:471 views/kreportsview.cpp:1144
+msgid "Investment Transactions"
+msgstr ""
+
+#: reports/querytabletest.cpp:472 reports/querytabletest.cpp:564
+msgid "Test Report"
+msgstr ""
+
+#: reports/querytabletest.cpp:547 reports/querytabletest.cpp:550
+msgid "Total Stock 1"
+msgstr ""
+
+#: reports/querytabletest.cpp:563 views/kreportsview.cpp:1174
+msgid "Investment Performance by Account"
+msgstr ""
+
+#: reports/querytable.cpp:431 reports/querytable.cpp:1200
+#, c-format
+msgid "Month of %1"
+msgstr ""
+
+#: reports/querytable.cpp:432 reports/querytable.cpp:1201
+#, c-format
+msgid "Week of %1"
+msgstr ""
+
+#: reports/querytable.cpp:576 reports/querytable.cpp:739
+#: reports/querytable.cpp:858 reports/querytable.cpp:1325
+#: reports/querytable.cpp:1481
+msgid "No Institution"
+msgstr ""
+
+#: reports/querytable.cpp:580 reports/querytable.cpp:1329
+msgid "[Empty Payee]"
+msgstr ""
+
+#: reports/querytable.cpp:615 reports/querytable.cpp:1361
+msgid "[Split Transaction]"
+msgstr ""
+
+#: reports/querytable.cpp:616 reports/querytable.cpp:617
+msgid "Split"
+msgstr ""
+
+#: main.cpp:51
+msgid ""
+"\n"
+"KMyMoney, the Personal Finance Manager for KDE.\n"
+"\n"
+"Please consider contributing to this project with code and/or suggestions."
+msgstr ""
+
+#: main.cpp:55
+msgid "language to be used"
+msgstr ""
+
+#: main.cpp:56
+msgid "don't open last used file"
+msgstr ""
+
+#: main.cpp:57
+msgid "enable performance timers"
+msgstr ""
+
+#: main.cpp:61
+msgid "turn on program traces"
+msgstr ""
+
+#: main.cpp:62
+msgid "dump the names of all defined KAction objects to stdout and quit"
+msgstr ""
+
+#: main.cpp:66
+msgid "file to open"
+msgstr ""
+
+#: main.cpp:92
+msgid "Memory leakage detection"
+msgstr ""
+
+#: main.cpp:96
+msgid "Compiled with the following settings:\n"
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:650 dialogs/ksplittransactiondlg.cpp:277
+#: main.cpp:98
+msgid "KMyMoney"
+msgstr ""
+
+#: main.cpp:104
+msgid "Initial idea, much initial source code, Project admin"
+msgstr ""
+
+#: main.cpp:105
+msgid "Core engine, Release Manager, Project admin"
+msgstr ""
+
+#: main.cpp:106
+msgid "Reporting logic, OFX Import"
+msgstr ""
+
+#: main.cpp:107
+msgid "Database backend, maintainer stable branch"
+msgstr ""
+
+#: main.cpp:108
+msgid "Forecast, Reports"
+msgstr ""
+
+#: main.cpp:109
+msgid "Project Admin"
+msgstr ""
+
+#: main.cpp:110
+msgid "Developer"
+msgstr ""
+
+#: main.cpp:111
+msgid "Database backend"
+msgstr ""
+
+#: main.cpp:113
+msgid "Initial investment support"
+msgstr ""
+
+#: main.cpp:114
+msgid "Developer & Artist"
+msgstr ""
+
+#: main.cpp:115
+msgid "Icons & splash screen"
+msgstr ""
+
+#: main.cpp:116 main.cpp:117
+msgid "Patches"
+msgstr ""
+
+#: main.cpp:136
+msgid ""
+"The monetary decimal symbol is not correctly set in the KDE Control Center's "
+"Country/Region & Language settings. Please set it to a reasonable value and "
+"start KMyMoney again."
+msgstr ""
+
+#: main.cpp:136
+msgid "Invalid settings"
+msgstr ""
+
+#: main.cpp:228
+msgid "Another instance of KMyMoney is already running. Do you want to quit?"
+msgstr ""
+
+#: main.cpp:289
+msgid "Uncaught error. Please report the details to the developers"
+msgstr ""
+
+#: _translatorinfo.cpp:1 _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr ""
+
+#: _translatorinfo.cpp:3 _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr ""
+
+#: dialogs/kcsvprogressdlg.cpp:62 dialogs/kimportdlg.cpp:66 rc.cpp:1
+msgid "&Import"
+msgstr ""
+
+#: rc.cpp:2
+msgid "E&xport"
+msgstr ""
+
+#: rc.cpp:3
+msgid "&Institution"
+msgstr ""
+
+#: rc.cpp:4
+msgid "&Account"
+msgstr ""
+
+#: rc.cpp:5
+msgid "&Category"
+msgstr ""
+
+#: rc.cpp:6
+msgid "&Transaction"
+msgstr ""
+
+#: rc.cpp:7 rc.cpp:20
+msgid "Mark transaction as..."
+msgstr ""
+
+#: rc.cpp:8 rc.cpp:21
+msgid "Mark transaction"
+msgstr ""
+
+#: rc.cpp:9
+msgid "T&ools"
+msgstr ""
+
+#: rc.cpp:10
+msgid "Account options"
+msgstr ""
+
+#: rc.cpp:11
+msgid "Category options"
+msgstr ""
+
+#: rc.cpp:12
+msgid "Institution options"
+msgstr ""
+
+#: rc.cpp:13
+msgid "Payee options"
+msgstr ""
+
+#: rc.cpp:14
+msgid "Budget options"
+msgstr ""
+
+#: rc.cpp:15
+msgid "Investment options"
+msgstr ""
+
+#: rc.cpp:16
+msgid "Scheduled transactions options"
+msgstr ""
+
+#: rc.cpp:17
+msgid "Transaction options"
+msgstr ""
+
+#: rc.cpp:18
+msgid "Move transaction to..."
+msgstr ""
+
+#: rc.cpp:19
+msgid "Select account"
+msgstr ""
+
+#: rc.cpp:22
+msgid "Currency options"
+msgstr ""
+
+#: rc.cpp:24
+msgid "Always show a No. field in transaction form"
+msgstr ""
+
+#: rc.cpp:25
+msgid "Auto fill with previous transaction data"
+msgstr ""
+
+#: rc.cpp:26
+msgid "Treat two transactions as identical, if amount differs less than"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:144 rc.cpp:27
+msgid "Auto increment check number"
+msgstr ""
+
+#: rc.cpp:28
+msgid "Autosave file periodically"
+msgstr ""
+
+#: rc.cpp:29
+msgid "Autosave interval in minutes"
+msgstr ""
+
+#: rc.cpp:30
+msgid "Check schedules upon startup"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:171 rc.cpp:31
+msgid "Enter transactions this number of days in advance"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:172 rc.cpp:32
+msgid "Number of days to preview schedules in ledger"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:143 rc.cpp:33
+msgid "Insert transaction type into No. field for new transactions"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:145 rc.cpp:34
+msgid "Keep changes when selecting a different transaction/split"
+msgstr ""
+
+#: rc.cpp:35
+msgid "Using the Enter key moves between the fields"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:130 rc.cpp:36
+msgid "Use the ledger lens"
+msgstr ""
+
+#: rc.cpp:37
+msgid "Price Precision"
+msgstr ""
+
+#: dialogs/rc.cpp:65 rc.cpp:38
+msgid "Update price history"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:132 rc.cpp:39
+msgid "Show transaction form"
+msgstr ""
+
+#: rc.cpp:40
+msgid "Start with last selected view or homepage"
+msgstr ""
+
+#: rc.cpp:41
+msgid "Use GPG to encrypt data file"
+msgstr ""
+
+#: rc.cpp:42
+msgid "Also encrypt against recover key"
+msgstr ""
+
+#: rc.cpp:43
+msgid "GPG User ID (deprecated)"
+msgstr ""
+
+#: rc.cpp:44
+msgid "GPG User ID"
+msgstr ""
+
+#: rc.cpp:45
+msgid "Run in expert (accountant) mode"
+msgstr ""
+
+#: rc.cpp:46
+msgid "Show splash screen during startup"
+msgstr ""
+
+#: rc.cpp:47
+msgid "Synchronize account in ledger and investment view"
+msgstr ""
+
+#: rc.cpp:48
+msgid "Icon size for view selection"
+msgstr ""
+
+#: rc.cpp:49
+msgid "list of hidden views"
+msgstr ""
+
+#: rc.cpp:50
+msgid "Firsttime switch to start new user wizard"
+msgstr ""
+
+#: rc.cpp:51
+msgid "Show title bar on each view"
+msgstr ""
+
+#: rc.cpp:52
+msgid "Start string matches for e.g. payees at start of string"
+msgstr ""
+
+#: rc.cpp:53
+msgid "Order of items on homepage"
+msgstr ""
+
+#: rc.cpp:54
+msgid "Percentage of default font size used for home view HTML page"
+msgstr ""
+
+#: rc.cpp:55
+msgid "Remember (manually adjusted) font size in home view on program end."
+msgstr ""
+
+#: rc.cpp:56
+msgid "Show account limit information on the Homepage"
+msgstr ""
+
+#: rc.cpp:58
+msgid "Hide closed accounts"
+msgstr ""
+
+#: rc.cpp:59
+msgid "Hide finished schedules"
+msgstr ""
+
+#: rc.cpp:61
+msgid "Show all register entries in full detail"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:129 rc.cpp:62
+msgid "Show a grid in the register"
+msgstr ""
+
+#: rc.cpp:63
+msgid "Show fancy group markers"
+msgstr ""
+
+#: rc.cpp:64
+msgid "Show fancy markers for previous and current fiscal year"
+msgstr ""
+
+#: rc.cpp:65
+msgid "Starting month of the fiscal year"
+msgstr ""
+
+#: rc.cpp:66
+msgid "Starting day of the fiscal year"
+msgstr ""
+
+#: rc.cpp:67
+msgid "Start date"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:9 rc.cpp:68
+msgid "Use system colors"
+msgstr ""
+
+#: rc.cpp:69
+msgid "List color"
+msgstr ""
+
+#: rc.cpp:70
+msgid "List background color"
+msgstr ""
+
+#: rc.cpp:71
+msgid "List grid color"
+msgstr ""
+
+#: rc.cpp:72
+msgid "Background color for imported transactions"
+msgstr ""
+
+#: rc.cpp:73
+msgid "Background color for matched transactions"
+msgstr ""
+
+#: rc.cpp:74
+msgid "List color for erronous transactions"
+msgstr ""
+
+#: rc.cpp:75
+msgid "List color for missing conversion rate"
+msgstr ""
+
+#: rc.cpp:76
+msgid "List color for negative values"
+msgstr ""
+
+#: rc.cpp:77
+msgid "Background color for group marker"
+msgstr ""
+
+#: rc.cpp:78
+msgid "Background color for required fields"
+msgstr ""
+
+#: rc.cpp:79
+msgid "Use system font"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:21 rc.cpp:80
+msgid "Cell font"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:22 rc.cpp:81
+msgid "Header font"
+msgstr ""
+
+#: rc.cpp:82 rc.cpp:83
+msgid "Sort order of register in normal view"
+msgstr ""
+
+#: rc.cpp:84
+msgid "Sort order of register in search dialog"
+msgstr ""
+
+#: rc.cpp:85
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation"
+msgstr ""
+
+#: rc.cpp:86
+msgid "Number of days (plus/minus) to search for matching transactions"
+msgstr ""
+
+#: rc.cpp:87
+msgid "During import, ask for a new payee's default category"
+msgstr ""
+
+#: rc.cpp:88
+msgid "Method to calculate forecast"
+msgstr ""
+
+#: rc.cpp:89
+msgid "Days to forecast"
+msgstr ""
+
+#: rc.cpp:90
+msgid "Days of normal account cycle"
+msgstr ""
+
+#: rc.cpp:91
+msgid "Number of historic cycles to use in forecast"
+msgstr ""
+
+#: rc.cpp:92
+msgid "Day of month to start forecast"
+msgstr ""
+
+#: rc.cpp:93
+msgid "Method to calculate history-based forecast"
+msgstr ""
+
+#: rc.cpp:94
+msgid "Skip opening date when fetching transactions"
+msgstr ""
+
+#: rc.cpp:95
+msgid "Include future transaction when using Schedule Forecast"
+msgstr ""
+
+#: rc.cpp:96
+msgid "Include scheduled transactions when using Schedule Forecast"
+msgstr ""
+
+#: rc.cpp:97
+msgid "additional names for cash account"
+msgstr ""
+
+#: rc.cpp:98
+msgid "additional names for checking account"
+msgstr ""
+
+#: rc.cpp:99
+msgid "additional names for credit card account"
+msgstr ""
+
+#: rc.cpp:100
+msgid "additional names for asset account"
+msgstr ""
+
+#: rc.cpp:101
+msgid "additional names for opening balance payee"
+msgstr ""
+
+#: rc.cpp:102
+msgid "additional names for invoice accounts"
+msgstr ""
+
+#: rc.cpp:103 widgets/rc.cpp:161 widgets/rc.cpp:163
+msgid "..."
+msgstr ""
+
+#: views/kcategoriesview.cpp:276
+msgid "Profit: "
+msgstr ""
+
+#: views/kcategoriesview.cpp:278
+msgid "Loss: "
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:54
+#: dialogs/transactioneditor.cpp:605 views/kpayeesview.cpp:365
+#: widgets/kmymoneyonlinequoteconfig.cpp:54
+msgid "Accepts the entered data and stores it"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:55 views/kpayeesview.cpp:366
+#: widgets/kmymoneyonlinequoteconfig.cpp:55
+msgid "Use this to accept the modified data."
+msgstr ""
+
+#: views/kpayeesview.cpp:491
+msgid ""
+"A payee with the name '%1' already exists. It is not advisable to have "
+"multiple payees with the same identification name. Are you sure you would "
+"like to rename the payee?"
+msgstr ""
+
+#: views/kpayeesview.cpp:518 views/kpayeesview.cpp:869
+msgid "Unable to modify payee"
+msgstr ""
+
+#: views/kpayeesview.cpp:564
+msgid "Do you want to save the changes for <b>%1</b>?"
+msgstr ""
+
+#: views/kbudgetview.cpp:490 views/kpayeesview.cpp:565
+msgid "Save changes"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:737 views/kpayeesview.cpp:662
+#: views/kpayeesview.cpp:753
+#, c-format
+msgid "Balance: %1"
+msgstr ""
+
+#: views/kpayeesview.cpp:725 views/kpayeesview.cpp:731
+#, c-format
+msgid "Amortization of %1"
+msgstr ""
+
+#: views/kpayeesview.cpp:727 views/kpayeesview.cpp:733
+#, c-format
+msgid "Payment to %1"
+msgstr ""
+
+#: views/kpayeesview.cpp:736
+#, c-format
+msgid "Loan payment from %1"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:123
+#: dialogs/kconfirmmanualenterdlg.cpp:133 views/kpayeesview.cpp:745
+#: widgets/kmymoneycategory.cpp:160 widgets/kmymoneycategory.cpp:166
+#: widgets/transaction.cpp:851 widgets/transaction.cpp:1397
+#: widgets/transaction.cpp:1411
+msgid ""
+"_: Split transaction (category replacement)\n"
+"Split transaction"
+msgstr ""
+
+#: views/kreportsview.cpp:262
+msgid ""
+"There was an error creating your report: \"%1\".\n"
+"Please report this error to the developer's list: "
+"kmymoney2-developer@lists.sourceforge.net"
+msgstr ""
+
+#: views/kreportsview.cpp:264
+msgid "Critical Error"
+msgstr ""
+
+#: views/kreportsview.cpp:268
+msgid "Unable to generate report"
+msgstr ""
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:125 views/kreportsview.cpp:286
+#: views/rc.cpp:53 widgets/rc.cpp:146
+msgid "Chart"
+msgstr ""
+
+#: views/kreportsview.cpp:287 widgets/rc.cpp:147
+msgid "Show the chart version of this report"
+msgstr ""
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:112 views/khomeview.cpp:900
+#: views/kreportsview.cpp:294 views/kreportsview.cpp:328
+msgid "Report"
+msgstr ""
+
+#: views/kreportsview.cpp:295
+msgid "Show the report version of this chart"
+msgstr ""
+
+#: views/kmymoneyview.cpp:236 views/kreportsview.cpp:314
+#: views/kreportsview.cpp:326
+msgid "Reports"
+msgstr ""
+
+#: views/khomeview.cpp:902 views/kreportsview.cpp:329 widgets/rc.cpp:56
+msgid "Comment"
+msgstr ""
+
+#: views/kreportsview.cpp:432
+msgid "Charts"
+msgstr ""
+
+#: views/khomeview.cpp:897 views/kreportsview.cpp:470
+msgid "Favorite Reports"
+msgstr ""
+
+#: views/kreportsview.cpp:486
+msgid "Old Customized Reports"
+msgstr ""
+
+#: views/kreportsview.cpp:579
+msgid "Include Stylesheet"
+msgstr ""
+
+#: views/kreportsview.cpp:585
+msgid ""
+"_: CSV (Filefilter)\n"
+"CSV files"
+msgstr ""
+
+#: views/kreportsview.cpp:586
+msgid ""
+"_: HTML (Filefilter)\n"
+"HTML files"
+msgstr ""
+
+#: views/kreportsview.cpp:591
+msgid "Export as"
+msgstr ""
+
+#: views/kreportsview.cpp:619 views/kreportsview.cpp:660
+#: views/kreportsview.cpp:942 views/kreportsview.cpp:950
+#: views/kreportsview.cpp:958 views/kreportsview.cpp:968
+#: views/kreportsview.cpp:980 views/kreportsview.cpp:998
+#: views/kreportsview.cpp:1006 views/kreportsview.cpp:1014
+#: views/kreportsview.cpp:1022 views/kreportsview.cpp:1034
+#: views/kreportsview.cpp:1046 views/kreportsview.cpp:1056
+#: views/kreportsview.cpp:1070 views/kreportsview.cpp:1079
+#: views/kreportsview.cpp:1087 views/kreportsview.cpp:1095
+#: views/kreportsview.cpp:1103 views/kreportsview.cpp:1111
+#: views/kreportsview.cpp:1120 views/kreportsview.cpp:1132
+#: views/kreportsview.cpp:1145 views/kreportsview.cpp:1155
+#: views/kreportsview.cpp:1165 views/kreportsview.cpp:1175
+#: views/kreportsview.cpp:1185 views/kreportsview.cpp:1195
+#: views/kreportsview.cpp:1208 views/kreportsview.cpp:1222
+#: views/kreportsview.cpp:1239 views/kreportsview.cpp:1257
+#: views/kreportsview.cpp:1273 views/kreportsview.cpp:1295
+#: views/kreportsview.cpp:1304 views/kreportsview.cpp:1313
+#: views/kreportsview.cpp:1322 views/kreportsview.cpp:1336
+#: views/kreportsview.cpp:1347 views/kreportsview.cpp:1362
+#: views/kreportsview.cpp:1372 views/kreportsview.cpp:1383
+#: views/kreportsview.cpp:1393 views/kreportsview.cpp:1404
+#: views/kreportsview.cpp:1423 views/kreportsview.cpp:1432
+#: views/kreportsview.cpp:1444 views/kreportsview.cpp:1463
+#: views/kreportsview.cpp:1472 views/kreportsview.cpp:1481
+#: views/kreportsview.cpp:1490
+msgid "Default Report"
+msgstr ""
+
+#: views/kreportsview.cpp:621 views/kreportsview.cpp:661
+msgid "Custom Report"
+msgstr ""
+
+#: views/kreportsview.cpp:622
+msgid " (Customized)"
+msgstr ""
+
+#: views/kreportsview.cpp:690
+msgid ""
+"Are you sure you want to delete report <b>%1</b>? There is no way to "
+"recover it!"
+msgstr ""
+
+#: views/kreportsview.cpp:690 views/kreportsview.cpp:702
+msgid "Delete Report?"
+msgstr ""
+
+#: views/kreportsview.cpp:702
+msgid "Sorry, <b>%1</b> is a default report. You may not delete it."
+msgstr ""
+
+#: views/kreportsview.cpp:882
+msgid "&Open"
+msgstr ""
+
+#: views/kreportsview.cpp:884
+msgid "&New report"
+msgstr ""
+
+#: views/kreportsview.cpp:934
+msgid "Income and Expenses"
+msgstr ""
+
+#: views/kreportsview.cpp:941
+msgid "Income and Expenses This Month"
+msgstr ""
+
+#: views/kreportsview.cpp:949
+msgid "Income and Expenses This Year"
+msgstr ""
+
+#: views/kreportsview.cpp:957
+msgid "Income and Expenses By Year"
+msgstr ""
+
+#: views/kreportsview.cpp:967
+msgid "Income and Expenses Graph"
+msgstr ""
+
+#: views/kreportsview.cpp:979
+msgid "Income and Expenses Pie Chart"
+msgstr ""
+
+#: views/khomeview.cpp:1361 views/kreportsview.cpp:990
+msgid "Net Worth"
+msgstr ""
+
+#: views/kreportsview.cpp:997
+msgid "Net Worth By Month"
+msgstr ""
+
+#: views/kreportsview.cpp:1005
+msgid "Net Worth Today"
+msgstr ""
+
+#: views/kreportsview.cpp:1013
+msgid "Net Worth By Year"
+msgstr ""
+
+#: views/kreportsview.cpp:1021
+msgid "7-day Cash Flow Forecast"
+msgstr ""
+
+#: views/kreportsview.cpp:1033
+msgid "Net Worth Graph"
+msgstr ""
+
+#: views/kreportsview.cpp:1045
+msgid "Account Balances by Institution"
+msgstr ""
+
+#: views/kreportsview.cpp:1055
+msgid "Account Balances by Type"
+msgstr ""
+
+#: views/kreportsview.cpp:1069
+msgid "Transactions by Account"
+msgstr ""
+
+#: views/kreportsview.cpp:1078
+msgid "Transactions by Category"
+msgstr ""
+
+#: views/kreportsview.cpp:1086
+msgid "Transactions by Payee"
+msgstr ""
+
+#: views/kreportsview.cpp:1094
+msgid "Transactions by Month"
+msgstr ""
+
+#: views/kreportsview.cpp:1102
+msgid "Transactions by Week"
+msgstr ""
+
+#: views/kreportsview.cpp:1110
+msgid "Loan Transactions"
+msgstr ""
+
+#: views/kreportsview.cpp:1119
+msgid "Transactions by Reconciliation Status"
+msgstr ""
+
+#: views/kreportsview.cpp:1125
+msgid "Cash Flow"
+msgstr ""
+
+#: views/kreportsview.cpp:1131
+msgid "Cash Flow Transactions This Month"
+msgstr ""
+
+#: views/kmymoneyview.cpp:226 views/kmymoneyview.cpp:228
+#: views/kreportsview.cpp:1137
+msgid "Investments"
+msgstr ""
+
+#: views/kreportsview.cpp:1154
+msgid "Investment Holdings by Account"
+msgstr ""
+
+#: views/kreportsview.cpp:1164
+msgid "Investment Holdings by Type"
+msgstr ""
+
+#: views/kreportsview.cpp:1184
+msgid "Investment Performance by Type"
+msgstr ""
+
+#: views/kreportsview.cpp:1194
+msgid "Investment Holdings Pie"
+msgstr ""
+
+#: views/kreportsview.cpp:1207
+msgid "Investment Worth Graph"
+msgstr ""
+
+#: views/kreportsview.cpp:1221
+msgid "Investment Price Graph"
+msgstr ""
+
+#: views/kreportsview.cpp:1238
+msgid "Investment Moving Average Price Graph"
+msgstr ""
+
+#: views/kreportsview.cpp:1256
+msgid "Investment Moving Average"
+msgstr ""
+
+#: views/kreportsview.cpp:1272
+msgid "Investment Moving Average vs Actual"
+msgstr ""
+
+#: views/kreportsview.cpp:1287
+msgid "Taxes"
+msgstr ""
+
+#: views/kreportsview.cpp:1294
+msgid "Tax Transactions by Category"
+msgstr ""
+
+#: views/kreportsview.cpp:1303
+msgid "Tax Transactions by Payee"
+msgstr ""
+
+#: views/kreportsview.cpp:1312
+msgid "Tax Transactions by Category Last Fiscal Year"
+msgstr ""
+
+#: views/kreportsview.cpp:1321
+msgid "Tax Transactions by Payee Last Fiscal Year"
+msgstr ""
+
+#: views/kreportsview.cpp:1328
+msgid "Budgeting"
+msgstr ""
+
+#: views/kreportsview.cpp:1335
+msgid "Budgeted vs. Actual This Year"
+msgstr ""
+
+#: views/kreportsview.cpp:1346
+msgid "Budgeted vs. Actual This Year (YTM)"
+msgstr ""
+
+#: views/khomeview.cpp:1383 views/kreportsview.cpp:1361
+msgid "Monthly Budgeted vs. Actual"
+msgstr ""
+
+#: views/kreportsview.cpp:1371
+msgid "Yearly Budgeted vs. Actual"
+msgstr ""
+
+#: views/kreportsview.cpp:1382
+msgid "Monthly Budget"
+msgstr ""
+
+#: views/kreportsview.cpp:1392
+msgid "Yearly Budget"
+msgstr ""
+
+#: views/kreportsview.cpp:1403
+msgid "Yearly Budgeted vs Actual Graph"
+msgstr ""
+
+#: views/kreportsview.cpp:1422
+msgid "Forecast By Month"
+msgstr ""
+
+#: views/kreportsview.cpp:1431
+msgid "Forecast Next Quarter"
+msgstr ""
+
+#: views/kreportsview.cpp:1443
+msgid "Net Worth Forecast Graph"
+msgstr ""
+
+#: dialogs/rc.cpp:126 dialogs/rc.cpp:128 dialogs/rc.cpp:466
+#: views/kreportsview.cpp:1455
+msgid "General Information"
+msgstr ""
+
+#: views/kreportsview.cpp:1462
+msgid "Schedule Information"
+msgstr ""
+
+#: views/kreportsview.cpp:1471
+msgid "Schedule Summary Information"
+msgstr ""
+
+#: views/kreportsview.cpp:1480
+msgid "Account Information"
+msgstr ""
+
+#: views/kreportsview.cpp:1489
+msgid "Loan Information"
+msgstr ""
+
+#: dialogs/rc.cpp:323 views/kmymoneyview.cpp:148 views/kmymoneyview.cpp:150
+msgid "Institutions"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:98 views/kmymoneyview.cpp:162
+#: views/kmymoneyview.cpp:164 widgets/rc.cpp:4 widgets/rc.cpp:94
+msgid "Accounts"
+msgstr ""
+
+#: views/kmymoneyview.cpp:176
+msgid "Bills & Reminders"
+msgstr ""
+
+#: views/kmymoneyview.cpp:178
+msgid "Scheduled transactions"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:98 dialogs/rc.cpp:193 views/kmymoneyview.cpp:188
+#: views/kmymoneyview.cpp:190 widgets/rc.cpp:91
+msgid "Categories"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:212 dialogs/rc.cpp:318
+#: views/kmymoneyview.cpp:199 views/kmymoneyview.cpp:201 widgets/rc.cpp:93
+msgid "Payees"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:149 views/kmymoneyview.cpp:211
+msgid "Ledgers"
+msgstr ""
+
+#: views/kmymoneyview.cpp:353
+msgid "Creating transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:367
+msgid "Modifying transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:382
+msgid "Duplicating transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:394
+msgid "Edit the current selected transactions"
+msgstr ""
+
+#: views/kmymoneyview.cpp:602
+msgid "<b>%1</b> is not a KMyMoney file."
+msgstr ""
+
+#: views/kmymoneyview.cpp:643
+msgid "GPG is not available for decryption of file <b>%1</b>"
+msgstr ""
+
+#: views/kmymoneyview.cpp:721
+msgid ""
+"File <b>%1</b> contains the old binary format used by KMyMoney. Please use "
+"an older version of KMyMoney (0.8.x) that still supports this format to "
+"convert it to the new XML based format."
+msgstr ""
+
+#: views/kmymoneyview.cpp:723
+msgid "File <b>%1</b> contains an unknown file format!"
+msgstr ""
+
+#: views/kmymoneyview.cpp:728
+msgid "Cannot read from file <b>%1</b>!"
+msgstr ""
+
+#: views/kmymoneyview.cpp:732
+msgid "Cannot load file <b>%1</b>. Reason: %2"
+msgstr ""
+
+#: views/kmymoneyview.cpp:742 views/kmymoneyview.cpp:748
+msgid "File <b>%1</b> not found!"
+msgstr ""
+
+#: views/kmymoneyview.cpp:812
+msgid "Can't open database %1\n"
+msgstr ""
+
+#: views/kmymoneyview.cpp:844
+msgid "An unrecoverable error occurred while reading the database"
+msgstr ""
+
+#: views/kmymoneyview.cpp:846 views/kmymoneyview.cpp:1208
+msgid "Database malfunction"
+msgstr ""
+
+#: views/kmymoneyview.cpp:938
+msgid "Unknown fix level in input file"
+msgstr ""
+
+#: views/kmymoneyview.cpp:984
+msgid ""
+"GPG does not seem to be installed on your system. Please make sure, that GPG "
+"can be found using the standard search path. This time, encryption is "
+"disabled."
+msgstr ""
+
+#: views/kmymoneyview.cpp:984
+msgid "GPG not found"
+msgstr ""
+
+#: views/kmymoneyview.cpp:991
+msgid ""
+"You have selected to encrypt your data also with the KMyMoney recover key, "
+"but the key with id</p><p><center><b>%1</b></center></p>has not been found "
+"in your keyring at this time. Please make sure to import this key into your "
+"keyring. You can find it on the <a "
+"href=\"http://kmymoney2.sourceforge.net/\">KMyMoney web-site</a>. This time "
+"your data will not be encrypted with the KMyMoney recover key."
+msgstr ""
+
+#: views/kmymoneyview.cpp:991 views/kmymoneyview.cpp:1000
+msgid "GPG-Key not found"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1000
+msgid ""
+"You have specified to encrypt your data for the "
+"user-id</p><p><center><b>%1</b>.</center></p>Unfortunately, a valid key for "
+"this user-id was not found in your keyring. Please make sure to import a "
+"valid key for this user-id. This time, encryption is disabled."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1006
+msgid ""
+"You have configured to save your data in encrypted form using GPG. Please be "
+"aware, that this is a brand new feature which is yet untested. Make sure, "
+"you have the necessary understanding that you might loose all your data if "
+"you store it encrypted and cannot decrypt it later on! If unsure, answer "
+"<b>No</b>."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1008
+msgid "Store GPG encrypted"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1038 views/kmymoneyview.cpp:1052
+msgid "Unable to open file '%1' for writing."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1065 views/kmymoneyview.cpp:1074
+msgid "Failure while writing to '%1'"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1086 views/kmymoneyview.cpp:1181
+msgid "Tried to access a file when it's not open"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1092
+msgid ""
+"Since this version of KMyMoney only writes data files in its new format, "
+"files written with this version cannot be read by KMyMoney version 0.4. If "
+"you still want to use older versions of KMyMoney with your data files, "
+"please make sure you keep a backup-file of your finance data. If you want to "
+"abort this operation, please press Cancel now"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1122
+msgid "Malformed URL '%1'"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1192
+msgid ""
+"Database contains data which must be removed before using SaveAs.\n"
+"Do you wish to continue?"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1205
+msgid ""
+"An unrecoverable error occurred while writing to the database.\n"
+"It may well be corrupt."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1215
+msgid ""
+"Can't open or create database %1\n"
+"Retry SaveAsDatabase and click Help for further info"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1354
+msgid "Afghanistan Afghani"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1355
+msgid "Albanian Lek"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1356
+msgid "Netherland Antillian Guilder"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1357
+msgid "Algerian Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1358
+msgid "Andorran Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1359
+msgid "Andorran Peseta"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1360
+msgid "Angolan New Kwanza"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1361
+msgid "Argentine Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1362
+msgid "Aruban Florin"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1363
+msgid "Australian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1364
+msgid "Azerbaijani Manat"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1365
+msgid "Bahamian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1366
+msgid "Bahraini Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1367
+msgid "Bangladeshi Taka"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1368
+msgid "Barbados Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1369
+msgid "Belarussian Ruble"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1370
+msgid "Belize Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1371
+msgid "Bermudian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1372
+msgid "Bhutan Ngultrum"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1373
+msgid "Bolivian Boliviano"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1374
+msgid "Bosnian Convertible Mark"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1375
+msgid "Botswana Pula"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1376
+msgid "Brazilian Real"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1377
+msgid "British Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1378
+msgid "Brunei Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1379
+msgid "Bulgarian Lev"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1380
+msgid "Burundi Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1381
+msgid "CFA Franc BEAC"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1382
+msgid "CFA Franc BCEAO"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1383
+msgid "CFP Franc Pacifique"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1384
+msgid "Cambodia Riel"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1385
+msgid "Canadian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1386
+msgid "Cape Verde Escudo"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1387
+msgid "Cayman Islands Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1388
+msgid "Chilean Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1389
+msgid "Chinese Yuan Renminbi"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1390
+msgid "Colombian Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1391
+msgid "Comoros Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1392
+msgid "Costa Rican Colon"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1393
+msgid "Croatian Kuna"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1394
+msgid "Cuban Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1395
+msgid "Czech Koruna"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1396
+msgid "Danish Krone"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1397
+msgid "Djibouti Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1398
+msgid "Dominican Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1399
+msgid "East Caribbean Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1400
+msgid "Egyptian Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1401
+msgid "El Salvador Colon"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1402
+msgid "Eritrean Nakfa"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1403
+msgid "Estonian Kroon"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1404
+msgid "Ethiopian Birr"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1405
+msgid "Euro"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1406
+msgid "Falkland Islands Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1407
+msgid "Fiji Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1408
+msgid "Gambian Dalasi"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1409
+msgid "Georgian Lari"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1410
+msgid "Ghanaian Cedi"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1411
+msgid "Gibraltar Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1412
+msgid "Guatemalan Quetzal"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1413
+msgid "Guinea-Bissau Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1414
+msgid "Guyanan Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1415
+msgid "Haitian Gourde"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1416
+msgid "Honduran Lempira"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1417
+msgid "Hong Kong Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1418
+msgid "Hungarian Forint"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1419
+msgid "Iceland Krona"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1420
+msgid "Indian Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1421
+msgid "Indonesian Rupiah"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1422
+msgid "Iranian Rial"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1423
+msgid "Iraqi Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1424
+msgid "Israeli New Shekel"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1425
+msgid "Jamaican Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1426
+msgid "Japanese Yen"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1427
+msgid "Jordanian Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1428
+msgid "Kazakhstan Tenge"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1429
+msgid "Kenyan Shilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1430
+msgid "Kuwaiti Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1431
+msgid "Kyrgyzstan Som"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1432
+msgid "Laos Kip"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1433
+msgid "Latvian Lats"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1434
+msgid "Lebanese Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1435
+msgid "Lesotho Loti"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1436
+msgid "Liberian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1437
+msgid "Libyan Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1438
+msgid "Lithuanian Litas"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1439
+msgid "Macau Pataca"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1440
+msgid "Macedonian Denar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1441
+msgid "Malagasy Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1442
+msgid "Malawi Kwacha"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1443
+msgid "Malaysian Ringgit"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1444
+msgid "Maldive Rufiyaa"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1445
+msgid "Mali Republic Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1446
+msgid "Mauritanian Ouguiya"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1447
+msgid "Mauritius Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1448
+msgid "Mexican Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1449
+msgid "Moldavian Leu"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1450
+msgid "Mongolian Tugrik"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1451
+msgid "Moroccan Dirham"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1452
+msgid "Mozambique Metical"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1453
+msgid "Myanmar Kyat"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1454
+msgid "Namibian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1455
+msgid "Nepalese Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1456
+msgid "New Zealand Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1457
+msgid "Nicaraguan Cordoba Oro"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1458
+msgid "Nigerian Naira"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1459
+msgid "North Korean Won"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1460
+msgid "Norwegian Kroner"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1461
+msgid "Omani Rial"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1462
+msgid "Pakistan Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1463
+msgid "Panamanian Balboa"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1464
+msgid "Papua New Guinea Kina"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1465
+msgid "Paraguay Guarani"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1466
+msgid "Peruvian Nuevo Sol"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1467
+msgid "Philippine Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1468
+msgid "Polish Zloty"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1469
+msgid "Qatari Rial"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1470
+msgid "Romanian Leu (new)"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1471
+msgid "Russian Ruble"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1472
+msgid "Rwanda Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1473
+msgid "Samoan Tala"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1474
+msgid "Sao Tome and Principe Dobra"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1475
+msgid "Saudi Riyal"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1476
+msgid "Seychelles Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1477
+msgid "Sierra Leone Leone"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1478
+msgid "Singapore Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1481
+msgid "Solomon Islands Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1482
+msgid "Somali Shilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1483
+msgid "South African Rand"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1484
+msgid "South Korean Won"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1485
+msgid "Sri Lanka Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1486
+msgid "St. Helena Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1487
+msgid "Sudanese Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1488
+msgid "Suriname Guilder"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1489
+msgid "Swaziland Lilangeni"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1490
+msgid "Swedish Krona"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1491
+msgid "Swiss Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1492
+msgid "Syrian Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1493
+msgid "Taiwan Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1494
+msgid "Tajikistan Somani"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1495
+msgid "Tanzanian Shilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1496
+msgid "Thai Baht"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1497
+msgid "Tongan Pa'anga"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1498
+msgid "Trinidad and Tobago Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1499
+msgid "Tunisian Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1500
+msgid "Turkish Lira (new)"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1501
+msgid "Turkmenistan Manat"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1502
+msgid "US Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1503
+msgid "Uganda Shilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1504
+msgid "Ukraine Hryvnia"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1505
+msgid "United Arab Emirates Dirham"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1506
+msgid "Uruguayan Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1507
+msgid "Uzbekistani Sum"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1508
+msgid "Vanuatu Vatu"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1509
+msgid "Venezuelan Bolivar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1510
+msgid "Vietnamese Dong"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1511
+msgid "Yugoslav Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1512
+msgid "Zambian Kwacha"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1513
+msgid "Zimbabwe Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1515
+msgid "Gold"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1516
+msgid "Palladium"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1517
+msgid "Platinum"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1518
+msgid "Silver"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1551
+msgid "Austrian Schilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1552
+msgid "German Mark"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1553
+msgid "French Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1554
+msgid "Italian Lira"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1555
+msgid "Spanish Peseta"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1556
+msgid "Dutch Guilder"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1557
+msgid "Belgian Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1558
+msgid "Luxembourg Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1559
+msgid "Portuguese Escudo"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1560
+msgid "Irish Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1561
+msgid "Finnish Markka"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1562
+msgid "Greek Drachma"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1564
+msgid "Romanian Leu"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1566
+msgid "Russian Ruble (old)"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1568
+msgid "Slovenian Tolar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1571
+msgid "Turkish Lira"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1574
+msgid "Maltese Lira"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1575
+msgid "Cyprus Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1578
+msgid "Slovak Koruna"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1888
+msgid ""
+"The account \"%1\" was previously created as loan account but some "
+"information is missing. The new loan wizard will be started to collect all "
+"relevant information. Please use a KMyMoney version >= 0.8.7 and < 0.9 to "
+"correct the problem."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1892
+msgid "Account problem"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1941
+msgid "Unable to add schedule: "
+msgstr ""
+
+#: views/kmymoneyview.cpp:1970
+msgid "Fix transactions"
+msgstr ""
+
+#: views/kaccountsview.cpp:522 views/kinstitutionsview.cpp:300
+msgid "Net Worth: "
+msgstr ""
+
+#: dialogs/rc.cpp:108 dialogs/rc.cpp:163 dialogs/rc.cpp:250 dialogs/rc.cpp:755
+#: dialogs/rc.cpp:830 views/kinvestmentview.cpp:77 widgets/register.cpp:572
+msgid "Quantity"
+msgstr ""
+
+#: views/kscheduledlistitem.cpp:137
+msgid "Finished"
+msgstr ""
+
+#: views/kbudgetview.cpp:109
+msgid "Creates a new budget"
+msgstr ""
+
+#: views/kbudgetview.cpp:110
+msgid "Use this to create a new empty budget."
+msgstr ""
+
+#: views/kbudgetview.cpp:116
+msgid "Rename the current selected budget"
+msgstr ""
+
+#: views/kbudgetview.cpp:117
+msgid "Use this to start renaming the selected budget."
+msgstr ""
+
+#: views/kbudgetview.cpp:123
+msgid "Delete the current selected budget"
+msgstr ""
+
+#: views/kbudgetview.cpp:124
+msgid "Use this to delete the selected budget."
+msgstr ""
+
+#: views/kbudgetview.cpp:130
+msgid "Accepts the entered values and stores the budget"
+msgstr ""
+
+#: views/kbudgetview.cpp:131
+msgid "Use this to store the modified data."
+msgstr ""
+
+#: views/kbudgetview.cpp:137
+msgid "Revert budget to last saved state"
+msgstr ""
+
+#: views/kbudgetview.cpp:138
+msgid "Use this to discard the modified data."
+msgstr ""
+
+#: views/kbudgetview.cpp:489
+msgid "Do you want to save the changes for <b>%1</b>"
+msgstr ""
+
+#: views/kbudgetview.cpp:610
+msgid ""
+"A budget with the name '%1' already exists. It is not advisable to have "
+"multiple budgets with the same identification name. Are you sure you would "
+"like to rename the budget?"
+msgstr ""
+
+#: views/kbudgetview.cpp:635 views/kbudgetview.cpp:750
+msgid "Unable to modify budget"
+msgstr ""
+
+#: views/kbudgetview.cpp:736
+msgid "Unable to reset budget"
+msgstr ""
+
+#: views/rc.cpp:1
+msgid "List"
+msgstr ""
+
+#: views/rc.cpp:2 views/rc.cpp:20
+msgid "Collapse all accounts in the list"
+msgstr ""
+
+#: views/rc.cpp:3 views/rc.cpp:21
+msgid "Expand all accounts in the list"
+msgstr ""
+
+#: views/rc.cpp:4
+msgid "Icons"
+msgstr ""
+
+#: views/rc.cpp:5 views/rc.cpp:22
+msgid "Note: Unused categories are not shown as selected by settings."
+msgstr ""
+
+#: views/rc.cpp:6 views/rc.cpp:23 views/rc.cpp:54
+msgid "Total Profits:"
+msgstr ""
+
+#: views/rc.cpp:7
+msgid "Your budgets"
+msgstr ""
+
+#: dialogs/rc.cpp:340 dialogs/rc.cpp:841 dialogs/settings/rc.cpp:124
+#: views/rc.cpp:8 widgets/rc.cpp:48 widgets/rc.cpp:150
+msgid "New"
+msgstr ""
+
+#: views/rc.cpp:9
+msgid "Ren"
+msgstr ""
+
+#: views/rc.cpp:10
+msgid "Del"
+msgstr ""
+
+#: views/rc.cpp:11
+msgid "Res"
+msgstr ""
+
+#: views/rc.cpp:12
+msgid "Upd"
+msgstr ""
+
+#: views/rc.cpp:15
+msgid "Hide unused budget categories"
+msgstr ""
+
+#: views/rc.cpp:16
+msgid "Assignments"
+msgstr ""
+
+#: views/rc.cpp:19
+msgid "Include subaccounts"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:23 views/rc.cpp:24
+msgid "Forecast Settings"
+msgstr ""
+
+#: views/rc.cpp:25
+msgid "Days to Forecast:"
+msgstr ""
+
+#: views/rc.cpp:26
+msgid "Days of Accounts Cycle:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:25 views/rc.cpp:27
+msgid "Day of Month to start Forecast:"
+msgstr ""
+
+#: views/rc.cpp:28
+msgid "Historic Cycles:"
+msgstr ""
+
+#: views/rc.cpp:29
+msgid "Chart Detail:"
+msgstr ""
+
+#: views/rc.cpp:30 widgets/kmymoneyaccountselector.cpp:64 widgets/rc.cpp:65
+msgid "All"
+msgstr ""
+
+#: views/rc.cpp:31 widgets/rc.cpp:66
+msgid "Top-Level"
+msgstr ""
+
+#: views/rc.cpp:32 widgets/rc.cpp:67
+msgid "Groups"
+msgstr ""
+
+#: views/rc.cpp:33 widgets/rc.cpp:68
+msgid "Totals"
+msgstr ""
+
+#: views/rc.cpp:34
+msgid "<p>Choose what level of detail to show on the chart.</p>"
+msgstr ""
+
+#: views/rc.cpp:35
+msgid "Current Forecast Method:"
+msgstr ""
+
+#: views/rc.cpp:36
+msgid "method"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:32 views/rc.cpp:37
+msgid "History Forecast Method"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:33 views/rc.cpp:38
+msgid "Simple Moving Average"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:34 views/rc.cpp:39
+msgid "Weighted Moving Average"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:35 views/rc.cpp:40
+msgid "Linear Regression"
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:315 dialogs/rc.cpp:628 dialogs/rc.cpp:647
+#: views/rc.cpp:43
+msgid "Summary"
+msgstr ""
+
+#: views/rc.cpp:45
+msgid "0 days"
+msgstr ""
+
+#: views/rc.cpp:46
+msgid "30 days"
+msgstr ""
+
+#: views/rc.cpp:47
+msgid "60 days"
+msgstr ""
+
+#: views/rc.cpp:48
+msgid "90 days"
+msgstr ""
+
+#: views/rc.cpp:49
+msgid "New Item"
+msgstr ""
+
+#: views/rc.cpp:50 widgets/rc.cpp:64
+msgid "Detail"
+msgstr ""
+
+#: views/rc.cpp:51
+msgid "Advanced"
+msgstr ""
+
+#: views/rc.cpp:52
+msgid "Budget Forecast"
+msgstr ""
+
+#: views/rc.cpp:55
+msgid "Investment Summary"
+msgstr ""
+
+#: views/rc.cpp:56
+msgid "Select Account:"
+msgstr ""
+
+#: views/rc.cpp:57
+msgid ""
+"Summary of the equities contained in this account, showing your holdings and "
+"their most recent price."
+msgstr ""
+
+#: views/rc.cpp:60 widgets/register.cpp:564
+msgid "No."
+msgstr ""
+
+#: views/rc.cpp:64
+msgid "Balance: "
+msgstr ""
+
+#: views/rc.cpp:65
+msgid "Address"
+msgstr ""
+
+#: views/rc.cpp:66
+msgid "Payee Information"
+msgstr ""
+
+#: views/rc.cpp:67
+msgid "E-Mail:"
+msgstr ""
+
+#: dialogs/rc.cpp:393 views/rc.cpp:69
+msgid "Telephone/Fax:"
+msgstr ""
+
+#: views/rc.cpp:70
+msgid "Notes"
+msgstr ""
+
+#: views/rc.cpp:71
+msgid "Address:"
+msgstr ""
+
+#: views/rc.cpp:72
+msgid "Matching"
+msgstr ""
+
+#: views/rc.cpp:73
+msgid "Transaction Matching"
+msgstr ""
+
+#: views/rc.cpp:74
+msgid "No matching"
+msgstr ""
+
+#: views/rc.cpp:75
+msgid "Match on Payee name"
+msgstr ""
+
+#: views/rc.cpp:76
+msgid "Match on a name listed below"
+msgstr ""
+
+#: views/rc.cpp:77
+msgid "List of matching names"
+msgstr ""
+
+#: views/rc.cpp:78
+msgid ""
+"This list contains the names that will match this payee if a transaction is "
+"imported from an external source. Keep in mind, that you can specify regular "
+"expressions here."
+msgstr ""
+
+#: views/rc.cpp:79
+msgid "Ignore Case"
+msgstr ""
+
+#: views/rc.cpp:80
+msgid "Default Account"
+msgstr ""
+
+#: views/rc.cpp:81
+msgid ""
+"Use the default account for\n"
+"new transactions with this payee"
+msgstr ""
+
+#: views/rc.cpp:82
+msgid "Default category:"
+msgstr ""
+
+#: views/rc.cpp:83
+msgid "Suggest a category"
+msgstr ""
+
+#: views/rc.cpp:85
+msgid "New Scheduled transaction..."
+msgstr ""
+
+#: views/rc.cpp:86
+msgid "Filter Accounts"
+msgstr ""
+
+#: views/rc.cpp:87
+msgid "List View"
+msgstr ""
+
+#: views/rc.cpp:88
+msgid "Calendar View"
+msgstr ""
+
+#: views/kinstitutionsview.cpp:43
+msgid "Institution/Account"
+msgstr ""
+
+#: views/kinstitutionsview.cpp:157
+msgid "Accounts with no institution assigned"
+msgstr ""
+
+#: views/kscheduledview.cpp:70
+msgid "Type/Name"
+msgstr ""
+
+#: views/kscheduledview.cpp:75
+msgid "Frequency"
+msgstr ""
+
+#: views/kscheduledview.cpp:157
+msgid "Unable to load accounts: "
+msgstr ""
+
+#: views/kscheduledview.cpp:171 views/kscheduledview.cpp:429
+#: views/kscheduledview.cpp:445 widgets/kmymoneyscheduledcalendar.cpp:46
+msgid "Bills"
+msgstr ""
+
+#: dialogs/rc.cpp:232 dialogs/rc.cpp:706 views/kscheduledview.cpp:172
+#: views/kscheduledview.cpp:431 views/kscheduledview.cpp:447
+#: widgets/kmymoneyscheduledcalendar.cpp:47
+msgid "Deposits"
+msgstr ""
+
+#: views/kscheduledview.cpp:173 views/kscheduledview.cpp:435
+#: views/kscheduledview.cpp:451
+msgid "Loans"
+msgstr ""
+
+#: views/kscheduledview.cpp:357
+msgid "Error activating context menu"
+msgstr ""
+
+#: views/kscheduledview.cpp:385
+msgid "Error executing item"
+msgstr ""
+
+#: views/kscheduledview.cpp:419
+msgid "Unable to filter account"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:508
+msgid "Statement Details"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:512
+msgid "Statement Deposit Details"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:513
+msgid "Statement Payment Details"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:642
+msgid "%1 deposits (%3), %2 payments (%4)"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:649
+msgid "%1 payments (%2)"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:653
+msgid "%1 deposits (%2)"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:721
+#, c-format
+msgid "Statement: %1"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:722 views/kgloballedgerview.cpp:736
+#, c-format
+msgid "Cleared: %1"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:723
+#, c-format
+msgid "Difference: %1"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:730
+#, c-format
+msgid "Last reconciled: %1"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:732
+msgid "Never reconciled"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:772
+msgid "Investment value: %1%2"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1040
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to continue to edit the transactions anyway?"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1051
+msgid ""
+"At least one split of the selected transactions has been frozen. Editing the "
+"transactions is therefore prohibited."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1053
+msgid "Transaction already frozen"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1058
+msgid ""
+"At least one split of the selected transaction references an account that "
+"has been closed. Editing the transactions is therefore prohibited."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1060
+msgid "Account closed"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1349
+msgid "Cannot create transactions when no account is selected."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1354
+msgid "Cannot create transactions in the context of a category."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1358
+msgid "Cannot create transactions in a closed account."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1370
+msgid "Cannot process transaction with focus if it is not selected."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1400
+msgid "Cannot edit transactions with frozen splits."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1411
+msgid "Cannot edit transactions in the context of a category."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1430
+msgid ""
+"Cannot edit investment transactions and non-investment transactions together."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1438
+msgid "Cannot edit multiple split transactions at once."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1448
+msgid "Cannot edit investment transactions in the context of this account."
+msgstr ""
+
+#: views/kforecastview.cpp:164
+msgid "Scheduled"
+msgstr ""
+
+#: views/kforecastview.cpp:169
+msgid "History"
+msgstr ""
+
+#: views/kforecastview.cpp:296
+msgid "The balance of %2 is below the minimum balance %3 today."
+msgstr ""
+
+#: views/kforecastview.cpp:301 views/khomeview.cpp:1043
+msgid "The balance of %1 will drop below the minimum balance %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:318 views/khomeview.cpp:1059
+msgid "The balance of %1 is below %2 today."
+msgstr ""
+
+#: views/kforecastview.cpp:323 views/khomeview.cpp:1064
+msgid "The balance of %1 is above %2 today."
+msgstr ""
+
+#: views/kforecastview.cpp:330 views/khomeview.cpp:1070
+msgid "The balance of %1 will drop below %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:335 views/khomeview.cpp:1075
+msgid "The balance of %1 will raise above %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:348
+msgid "The account %1 is decreasing %2 per cycle."
+msgstr ""
+
+#: views/kforecastview.cpp:404 widgets/kmymoneyaccounttreeforecast.cpp:114
+#, c-format
+msgid "Min Bal %1"
+msgstr ""
+
+#: views/kforecastview.cpp:406 widgets/kmymoneyaccounttreeforecast.cpp:116
+#, c-format
+msgid "Min Date %1"
+msgstr ""
+
+#: views/kforecastview.cpp:409 widgets/kmymoneyaccounttreeforecast.cpp:119
+#, c-format
+msgid "Max Bal %1"
+msgstr ""
+
+#: views/kforecastview.cpp:411 widgets/kmymoneyaccounttreeforecast.cpp:121
+#, c-format
+msgid "Max Date %1"
+msgstr ""
+
+#: views/kforecastview.cpp:413 widgets/kmymoneyaccounttreeforecast.cpp:123
+msgid "Average"
+msgstr ""
+
+#: views/kforecastview.cpp:649 views/khomeview.cpp:268 views/khomeview.cpp:275
+msgid "Networth Forecast"
+msgstr ""
+
+#: views/khomeview.cpp:203
+msgid "Your Financial Summary"
+msgstr ""
+
+#: views/khomeview.cpp:218
+msgid "Preferred Accounts"
+msgstr ""
+
+#: views/khomeview.cpp:225 views/khomeview.cpp:227
+msgid "Payment Accounts"
+msgstr ""
+
+#: views/khomeview.cpp:256
+msgid "Show KMyMoney welcome page"
+msgstr ""
+
+#: views/khomeview.cpp:409
+msgid "Overdue payments"
+msgstr ""
+
+#: views/khomeview.cpp:424 views/khomeview.cpp:497 views/khomeview.cpp:531
+msgid "Balance after"
+msgstr ""
+
+#: views/khomeview.cpp:482
+msgid "Today's payments"
+msgstr ""
+
+#: views/khomeview.cpp:516
+msgid "Future payments"
+msgstr ""
+
+#: views/khomeview.cpp:585
+msgid "Less..."
+msgstr ""
+
+#: views/khomeview.cpp:587
+msgid "More..."
+msgstr ""
+
+#: views/khomeview.cpp:622
+msgid "Enter schedule"
+msgstr ""
+
+#: views/khomeview.cpp:624
+msgid "Skip schedule"
+msgstr ""
+
+#: views/khomeview.cpp:627
+msgid "Edit schedule"
+msgstr ""
+
+#: views/khomeview.cpp:631
+msgid " (%1 payments)"
+msgstr ""
+
+#: views/khomeview.cpp:771
+msgid "To Minimum Balance / Maximum Credit"
+msgstr ""
+
+#: views/khomeview.cpp:964
+msgid "%1 Day Forecast"
+msgstr ""
+
+#: views/khomeview.cpp:973 widgets/kmymoneyaccounttreeforecast.cpp:67
+msgid "%1 days"
+msgstr ""
+
+#: views/khomeview.cpp:1039
+msgid "The balance of %1 is below the minimum balance %2 today."
+msgstr ""
+
+#: views/khomeview.cpp:1175
+msgid ""
+"Before KMyMoney can give you detailed information about your financial "
+"status, you need to create at least one account. Until then, KMyMoney shows "
+"the welcome page instead."
+msgstr ""
+
+#: views/khomeview.cpp:1258
+msgid "Assets and Liabilities Summary"
+msgstr ""
+
+#: views/khomeview.cpp:1262
+msgid "Asset Accounts"
+msgstr ""
+
+#: views/khomeview.cpp:1270
+msgid "Liability Accounts"
+msgstr ""
+
+#: views/khomeview.cpp:1348
+msgid "Total Assets"
+msgstr ""
+
+#: views/khomeview.cpp:1354
+msgid "Total Liabilities"
+msgstr ""
+
+#: views/khomeview.cpp:1399
+msgid "Current Month Summary"
+msgstr ""
+
+#: views/khomeview.cpp:1403 views/khomeview.cpp:1440
+msgid "Budgeted"
+msgstr ""
+
+#: views/khomeview.cpp:1433
+msgid "Budget Overruns"
+msgstr ""
+
+#: views/khomeview.cpp:1502
+msgid "No Budget Categories have been overrun"
+msgstr ""
+
+#: views/khomeview.cpp:1801
+msgid "Cash Flow Summary"
+msgstr ""
+
+#: views/khomeview.cpp:1808
+msgid "Income and Expenses of Current Month"
+msgstr ""
+
+#: views/khomeview.cpp:1816
+msgid "Scheduled Income"
+msgstr ""
+
+#: views/khomeview.cpp:1819
+msgid "Expenses"
+msgstr ""
+
+#: views/khomeview.cpp:1822
+msgid "Scheduled Expenses"
+msgstr ""
+
+#: views/khomeview.cpp:1850
+msgid "Liquid Assets and Liabilities"
+msgstr ""
+
+#: views/khomeview.cpp:1855
+msgid "Liquid Assets"
+msgstr ""
+
+#: views/khomeview.cpp:1858
+msgid "Transfers to Liquid Liabilities"
+msgstr ""
+
+#: views/khomeview.cpp:1861
+msgid "Liquid Liabilities"
+msgstr ""
+
+#: views/khomeview.cpp:1864
+msgid "Other Transfers"
+msgstr ""
+
+#: views/khomeview.cpp:1908
+msgid "Cash Flow Status"
+msgstr ""
+
+#: views/khomeview.cpp:1914
+msgid "Expected Liquid Assets"
+msgstr ""
+
+#: views/khomeview.cpp:1917
+msgid "Expected Liquid Liabilities"
+msgstr ""
+
+#: views/khomeview.cpp:1920
+msgid "Expected Profit/Loss"
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:64
+msgid "OFX..."
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:69
+msgid "OFX import file selection"
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid ""
+"Unable to import %1 using the OFX importer plugin. This file is not the "
+"correct format."
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid "Incorrect format"
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:122
+msgid "Unable to parse file"
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:576
+msgid "Online settings"
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:635
+#, c-format
+msgid "Error connecting to bank: %1"
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:646
+msgid ""
+"Unable to import %1 using the OFX importer plugin. The plugin returned the "
+"following error:<p>%2"
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Importing process terminated unexpectedly."
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Failed to import all statements."
+msgstr ""
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "The HTTP request failed."
+msgstr ""
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "Failed"
+msgstr ""
+
+#: plugins/ofximport/ofxpartner.cpp:410
+msgid "Cannot open file %1 for writing"
+msgstr ""
+
+#: plugins/ofximport/ofxpartner.cpp:414
+msgid "OFX setup error"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid "Loading banklist"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid ""
+"Getting list of banks from http://moneycentral.msn.com/\n"
+"This may take some time depending on the available bandwidth."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:155
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:199
+msgid "Supports online statements<br>"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:157
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:201
+msgid "Supports investments<br>"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:159
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:203
+msgid "Supports bill payment (but not supported by KMyMoney yet)<br>"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:163
+msgid "Does not support online banking</p>"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:173
+msgid "Please choose a bank."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:179
+msgid "Please fill all fields with values."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:271
+msgid "No suitable accounts were found at this bank."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:283
+msgid "Please choose an account"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:386
+msgid "Server message: %1\n"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+msgid "Your bank returned warnings when signing on"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+#, c-format
+msgid "WARNING %1"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+msgid "Error signing onto your bank"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, c-format
+msgid "ERROR %1"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingstatus.cpp:59
+msgid "Enabled & configured"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:1
+msgid "OFX Direct Connect"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:2
+msgid "Contacting bank..."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:4
+msgid "Online Banking Account Setup"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:5
+msgid "Select Financial Institution"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:6
+msgid "Please select your financial institution from the list below..."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:7
+msgid "Automatic"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:8
+msgid "Financial Institution"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:9
+msgid "Manual"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:10
+msgid "Org"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:11
+msgid "FID"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:120 plugins/ofximport/dialogs/rc.cpp:12
+#: widgets/rc.cpp:46
+msgid "URL"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:13
+msgid "Enter Login Details"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:14
+msgid ""
+"Please enter the username and password you use to log into this bank for "
+"online banking. Please note that many banks require a separate signup, and "
+"assign a separate PIN or password just for online banking from home."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:15
+msgid "Connection Details"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:16
+msgid "Username"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:17 plugins/ofximport/dialogs/rc.cpp:36
+msgid "Header Version"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:18 plugins/ofximport/dialogs/rc.cpp:37
+msgid "Identify as"
+msgstr ""
+
+#: dialogs/rc.cpp:742 plugins/ofximport/dialogs/rc.cpp:19
+msgid "Password"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:20
+msgid "Select Account"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:21
+msgid ""
+"Please select the account from your financial institution from the list "
+"below which matches this account."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:24
+msgid "Bank"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:25
+msgid "Branch"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:26
+msgid "WizardPage"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:27
+msgid ""
+"Congratulations! You have successfully set up your bank for online banking "
+"via OFX."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:28
+msgid "Account Details"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:29 plugins/ofximport/dialogs/rc.cpp:31
+msgid "&lt;Not configured&gt;"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:30
+msgid "BANK/BROKER:"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:32
+msgid "Unavailable"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:33
+msgid "ACCOUNT:"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:34
+msgid "STATUS:"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:35
+msgid "OFX Details"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:38
+msgid "Start date of import"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:39
+msgid "To&day minus"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:40
+msgid "days"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:41
+msgid "Last &update"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:42
+msgid "Pi&ck date"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:43
+msgid "Name is derived from"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:44
+msgid "P&AYEEID"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:45
+msgid "&NAME"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:46
+msgid "field if both are present in download"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:81
+msgid "Quicken Windows 2003"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:82
+msgid "Quicken Windows 2004"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:83
+msgid "Quicken Windows 2005"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:84
+msgid "Quicken Windows 2006"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:85
+msgid "Quicken Windows 2007"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:86
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:111
+msgid "Quicken Windows 2008"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:89
+msgid "MS-Money 2003"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:90
+msgid "MS-Money 2004"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:91
+msgid "MS-Money 2005"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:92
+msgid "MS-Money 2006"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:93
+msgid "MS-Money 2007"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:94
+msgid "MS-Money Plus"
+msgstr ""
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:91
+msgid "Report Configuration"
+msgstr ""
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:117
+#: dialogs/kreportconfigurationfilterdlg.cpp:135
+msgid "Rows/Columns"
+msgstr ""
+
+#: dialogs/investtransactioneditor.cpp:203
+#: dialogs/investtransactioneditor.cpp:537
+#: dialogs/investtransactioneditor.cpp:579 dialogs/rc.cpp:103
+#: dialogs/rc.cpp:158 dialogs/rc.cpp:245 dialogs/rc.cpp:750 dialogs/rc.cpp:794
+#: widgets/kmymoneyaccountselector.cpp:182 widgets/register.cpp:64
+#: widgets/register.cpp:567 widgets/transaction.cpp:1500
+msgid "Security"
+msgstr ""
+
+#: dialogs/investtransactioneditor.cpp:211
+msgid "Asset account"
+msgstr ""
+
+#: dialogs/investtransactioneditor.cpp:1073
+msgid "Price/Share"
+msgstr ""
+
+#: dialogs/kmergetransactionsdlg.cpp:39
+msgid "Merge Transactions"
+msgstr ""
+
+#: dialogs/kmergetransactionsdlg.cpp:40
+msgid "Are you sure you wish to merge these transactions?"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:59
+msgid "Start Dialog"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Templates"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Select templates"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:80 dialogs/kstartdlg.cpp:119
+msgid "New KMyMoney document"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:90
+msgid "Open a KMyMoney document"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:96
+msgid ""
+"%1|KMyMoney files (*.kmy)\n"
+"%2|All files (*.*)"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:102
+msgid "Recent Files"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:217
+msgid "Blank Document"
+msgstr ""
+
+#: dialogs/knewbudgetdlg.cpp:71
+msgid "Please specify a budget name"
+msgstr ""
+
+#: dialogs/kgncpricesourcedlg.cpp:48
+#, c-format
+msgid "Investment: %1"
+msgstr ""
+
+#: dialogs/kgncpricesourcedlg.cpp:49
+#, c-format
+msgid "Quote source: %1"
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:62 dialogs/ksecuritylisteditor.cpp:69
+msgid "Delete this entry"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:70
+msgid "Remove this security item from the file"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:73
+msgid "&Add"
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:68 dialogs/ksecuritylisteditor.cpp:75
+msgid "Add a new entry"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:76
+msgid "Create a new security entry."
+msgstr ""
+
+#: dialogs/keditequityentrydlg.cpp:77 dialogs/kmymoneypricedlg.cpp:74
+#: dialogs/ksecuritylisteditor.cpp:81
+msgid "Modify the selected entry"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:82
+msgid "Change the security information of the selected entry."
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:80 dialogs/ksecuritylisteditor.cpp:87
+msgid "Close the dialog"
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:81 dialogs/ksecuritylisteditor.cpp:88
+msgid "Use this to close the dialog and return to the application."
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:184
+msgid ""
+"Do you really want to remove the currency <b>%1</b> from the "
+"file?</p><i>Note: It is currently not supported to add currencies.</i>"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:187
+msgid "Do you really want to remove the %1 <b>%2</b> from the file?"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:190
+msgid "Delete security"
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:63
+msgid "Remove this price item from the file"
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:66 dialogs/mymoneyqifprofileeditor.cpp:94
+msgid "&New"
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:69
+msgid "Create a new price entry."
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:75
+msgid "Change the details of selected price information."
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Do you really want to delete the selected price entry?"
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Delete price information"
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:46
+msgid ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:50 dialogs/rc.cpp:22
+msgid "Choose import type:"
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:51 dialogs/rc.cpp:20
+msgid "Choose Import Type Dialog"
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:53
+msgid ""
+"Please choose the type of export you wish to perform. A simple explanation\n"
+"of the export type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an export type please press the OK button."
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:57
+msgid "Choose export type:"
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:58
+msgid "Choose Export Type Dialog"
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:78
+msgid ""
+"QIF files are created by the popular accounting program Quicken.\n"
+"Another dialog will appear, if you choose this type, asking for further\n"
+"information relevant to the Quicken format."
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:82
+msgid ""
+"The CSV type uses a comma delimeted text file that can be used by\n"
+"most popular spreadsheet programs available for Linux and other operating\n"
+"systems."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:222
+msgid "%1 units in %2"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid ""
+"Failed to retrieve an exchange rate for %1 from %2. It will be skipped this "
+"time."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid "Price Update Failed"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:427
+msgid ""
+"Failed to retrieve a quote for %1 from %2. Press <b>No</b> to remove the "
+"online price source from this security permanently, <b>Yes</b> to continue "
+"updating this security during future price updates or <b>Cancel</b> to stop "
+"the current update operation."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:427 dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Price Update Failed"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Cannot update security <b>%1</b>: %2"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:528
+msgid "Price for %1 updated (id %2)"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:534
+msgid "Received an invalid price for %1, unable to update."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:554
+msgid ""
+"Received a price for %1 (id %2), but this symbol is not on the list! "
+"Aborting entire update."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:222
+msgid ""
+"The number <b>%1</b> has already been used in account <b>%2</b>. Do you want "
+"to replace it with the next available number?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:222
+msgid "Duplicate number"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:303
+msgid ""
+"This transaction has more than two splits and is based on a different "
+"currency (%1). Using this account to modify the transaction is currently not "
+"very well supported by KMyMoney and may result in false results."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:305
+msgid ""
+"KMyMoney was not able to find a more appropriate account to edit this "
+"transaction. Nevertheless, you are allowed to modify the transaction. If you "
+"don't want to edit this transaction, please cancel from editing next."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:307
+msgid ""
+"Using e.g. <b>%1</b> to edit this transaction is a better choice. "
+"Nevertheless, you are allowed to modify the transaction. If you want to use "
+"the suggested account instead, please cancel from editing next and change "
+"the view to the suggested account."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:410
+msgid ""
+"This transaction has more than two splits and is originally based on a "
+"different currency (%1). Using this account to modify the transaction may "
+"result in rounding errors. Do you want to continue?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:412
+msgid ""
+"At least one of the selected transactions has more than two splits and is "
+"originally based on a different currency (%1). Using this account to modify "
+"the transactions may result in rounding errors. Do you want to continue?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:557
+msgid "Storing transactions"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:603 widgets/kmymoneybriefschedule.cpp:65
+msgid "&Enter"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:606
+msgid "Use this to enter the transaction into the ledger."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:607
+msgid "&Schedule"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:609
+msgid "Accepts the entered data and stores it as schedule"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:610
+msgid "Use this to schedule the transaction for later entry into the ledger."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"The transaction you are about to enter has a post date in the "
+"future.<br/><br/>Do you want to enter it in the ledger or add it to the "
+"schedules?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"_: Dialog caption for 'Enter or schedule' dialog\n"
+"Enter or schedule?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:671
+msgid ""
+"The balance of account <b>%1</b> dropped below the warning balance of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:677
+msgid ""
+"The balance of account <b>%1</b> dropped below the minimum balance of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:683
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit warning "
+"limit of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:689
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit limit of "
+"%2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:740
+msgid "Payer/Receiver"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:748
+msgid "Category/Account"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:980 dialogs/transactioneditor.cpp:1016
+#: dialogs/transactioneditor.cpp:1378 dialogs/transactioneditor.cpp:1399
+#: dialogs/transactioneditor.cpp:1422 dialogs/transactioneditor.cpp:1443
+#: dialogs/transactioneditor.cpp:1505 dialogs/transactioneditor.cpp:1509
+#: widgets/transaction.cpp:902
+msgid "Transfer from"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:982 dialogs/transactioneditor.cpp:1018
+#: dialogs/transactioneditor.cpp:1401 dialogs/transactioneditor.cpp:1445
+#: dialogs/transactioneditor.cpp:1506 widgets/transaction.cpp:902
+msgid "Transfer to"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:1259
+msgid "Select autofill transaction"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:77
+msgid "First transaction does not match requirement for matching"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:79
+msgid "Second transaction does not match requirement for matching"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:83 dialogs/transactionmatcher.cpp:133
+msgid "Splits for %1 have conflicting values (%2,%3)"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:96 dialogs/transactionmatcher.cpp:149
+msgid ""
+"Both of these transactions have been imported into %1. Therefore they "
+"cannot be matched. Matching works with one imported transaction and one "
+"non-imported transaction."
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:101 dialogs/transactionmatcher.cpp:156
+msgid "Unable to match all splits (%1)"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:65
+msgid "Account and transfer account are the same. Please change one."
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:84
+msgid "Payee changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:92
+#: dialogs/kconfirmmanualenterdlg.cpp:100
+msgid "Account changed. Old: \"%1\", New: \"%2\""
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:107
+msgid "Account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:115
+msgid ""
+"Transfer account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: "
+"<b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:143
+msgid ""
+"Category changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:151
+#: dialogs/kconfirmmanualenterdlg.cpp:153
+msgid "empty"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:157
+msgid "Memo changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:166
+msgid "Amount changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:175
+msgid ""
+"Reconciliation flag changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: "
+"<b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:182
+msgid "Fatal error in determining data: "
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:56
+msgid ""
+"There are no Qt SQL drivers installed in your system.\n"
+"Please consult documentation for your distro, or visit the Qt web site "
+"(www.trolltech.com) and search for SQL drivers."
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:100
+msgid "Qt SQL driver %1 is no longer installed on your system"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:107
+msgid "Qt SQL driver %1 is not suported"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:164
+msgid "SQLite files (*.sql);; All files (*.*)"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:167
+msgid "Select SQLite file"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:188
+msgid "All files (*.*)"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:191
+msgid "Select output file"
+msgstr ""
+
+#: dialogs/investactivities.cpp:168
+msgid "%1 (Brokerage)"
+msgstr ""
+
+#: dialogs/investactivities.cpp:200 dialogs/investactivities.cpp:288
+#: dialogs/investactivities.cpp:425 widgets/transaction.cpp:1548
+msgid "Price/share"
+msgstr ""
+
+#: dialogs/investactivities.cpp:586
+msgid "Ratio 1/"
+msgstr ""
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid ""
+"<p>Please check that all the details in the following dialog are correct and "
+"press OK.</p><p>Editable data can be changed and can either be applied to "
+"just this occurence or for all subsequent occurences for this schedule. "
+"(You will be asked what you intend after pressing OK in the following "
+"dialog)</p>"
+msgstr ""
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid "Enter scheduled transaction"
+msgstr ""
+
+#: dialogs/kcsvprogressdlg.cpp:65 dialogs/kexportdlg.cpp:65
+msgid "&Export"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:67 dialogs/kimportdlg.cpp:68
+msgid "Start operation"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:68
+msgid "Use this to start the export operation"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:71 dialogs/kimportdlg.cpp:72
+msgid "&Browse..."
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:73 dialogs/kimportdlg.cpp:74
+msgid "Select filename"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:74 dialogs/kimportdlg.cpp:75
+msgid "Use this to select a filename to export to"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:77 dialogs/kimportdlg.cpp:78
+#: dialogs/settings/ksettingsonlinequotes.cpp:64
+#: widgets/kmymoneyonlinequoteconfig.cpp:64
+msgid "&New..."
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:79 dialogs/kimportdlg.cpp:80
+#: dialogs/mymoneyqifprofileeditor.cpp:96
+msgid "Create a new profile"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:80 dialogs/kimportdlg.cpp:81
+msgid "Use this to open the profile editor"
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:56
+msgid "Edit loan wizard"
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:58
+msgid ""
+"Please enter the date from which on the following changes will be effective. "
+"The date entered must be later than the opening date of this account (%1), "
+"but must not be in the future. The default will be today."
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:76
+msgid ""
+"Note: you will not be able to modify this account today, because the opening "
+"date \"%1\" is in the future. Please revisit this dialog when the time has "
+"come."
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:244
+msgid ""
+"Your previous selection was \"%1\". If you select another option, KMyMoney "
+"will dismiss the changes you have just entered. Do you wish to proceed?"
+msgstr ""
+
+#: dialogs/kcategoryreassigndlg.cpp:81
+msgid ""
+"At least one transaction/schedule still references the category <b>%1</b>. "
+"However, at least one category with the same currency must exist so that the "
+"transactions/schedules can be reassigned."
+msgstr ""
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid ""
+"This dialog does not allow to create new categories. Please pick a category "
+"from the list."
+msgstr ""
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid "Category creation"
+msgstr ""
+
+#: dialogs/kbackupdlg.cpp:61
+msgid "C&hoose..."
+msgstr ""
+
+#: dialogs/kbackupdlg.cpp:63
+msgid "Select mount point"
+msgstr ""
+
+#: dialogs/kbackupdlg.cpp:64
+msgid "Use this to browse to the mount point."
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:293
+msgid "Next due date"
+msgstr ""
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid ""
+"You have turned on the GPG encryption support. This means, that new files "
+"will be stored encrypted. Existing files will not be encrypted "
+"automatically. To achieve encryption of existing files, please use the "
+"<b>File/Save as...</b> feature and store the file under a different name. "
+"Once confident with the result, feel free to delete the old file and rename "
+"the encrypted one to the old name."
+msgstr ""
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid "GPG encryption activated"
+msgstr ""
+
+#: dialogs/settings/ksettingshome.cpp:51
+msgid "&Up"
+msgstr ""
+
+#: dialogs/settings/ksettingshome.cpp:53
+msgid "Move selected item up"
+msgstr ""
+
+#: dialogs/settings/ksettingshome.cpp:54
+msgid "Use this to move the selected item up by one position in the list."
+msgstr ""
+
+#: dialogs/settings/ksettingshome.cpp:55
+msgid "&Down"
+msgstr ""
+
+#: dialogs/settings/ksettingshome.cpp:57
+msgid "Move selected item down"
+msgstr ""
+
+#: dialogs/settings/ksettingshome.cpp:58
+msgid "Use this to move the selected item down by one position in the list."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:1
+msgid "Color settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:2
+msgid "Foreground"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:3
+msgid "Text colors"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:4
+msgid "Grid color"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:5
+msgid "Erronous transaction"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:6
+msgid "Value with missing conversion rate"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:7
+msgid "Negative value"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:8
+msgid "Background"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:10
+msgid "List background colors"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:11
+msgid "Normal"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:12
+msgid "Alternate"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:13
+msgid "Special background colors"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:14
+msgid "Ledger group separator"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:15
+msgid "Required field"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:16
+msgid "Imported transaction"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:17
+msgid "Matched transaction"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:18
+msgid "Font settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:19
+msgid "Use system fonts"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:20
+msgid "Individual font settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:24
+msgid "Number of Days of Account Cycle:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:26
+msgid "Number of Days to Forecast:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:27
+msgid "Forecast Method"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:28
+msgid "Scheduled and Future Transactions"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:29
+msgid "History-based"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:30
+msgid "History-based settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:31
+msgid "Number of Cycles to use in Forecast:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:36
+msgid "General Settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:37
+msgid "Global"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:38
+msgid "Startup page options"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:39
+msgid "Start with homepage"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:40
+msgid "Start with last selected view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:41
+msgid "Precision settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:42
+msgid "Price precision"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:43
+msgid "digits"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:44
+msgid "Autosave options"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:45
+msgid "Autosave periodically"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:46
+msgid "minutes"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:47
+msgid "Fiscal Year"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:48
+msgid "Your fiscal year starts on"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:49
+msgid "January"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:50
+msgid "February"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:51
+msgid "March"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:52
+msgid "April"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:53
+msgid "May"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:54
+msgid "June"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:55
+msgid "July"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:56
+msgid "August"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:57
+msgid "September"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:58
+msgid "October"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:59
+msgid "November"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:60
+msgid "December"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:61
+msgid "Views"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:62
+msgid "Synchronize account selection of ledger and investment view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:63
+msgid ""
+"Check the views you want to enable, uncheck those you want to hide, because "
+"you don't need the functionality."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:64
+msgid "Icon size of navigation bar"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:65
+msgid "Micro (16px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:66
+msgid "Small (32px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:67
+msgid "Normal (48px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:68
+msgid "Large (64px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:69
+msgid "Show title bar on each page"
+msgstr ""
+
+#: dialogs/rc.cpp:835 dialogs/settings/rc.cpp:70
+msgid "Filter"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:71
+msgid "Accounts / Categories"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:72
+msgid "Don't show unused categories"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:73
+msgid ""
+"This option hides all categories in the categories view that are not used in "
+"at least a single transaction. They are still shown in the category "
+"selection lists."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:74
+msgid "Don't show closed accounts"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:75
+msgid ""
+"This option hides all accounts that have been closed by the user in views "
+"and selection lists.\n"
+"\n"
+"You can use <b>View/Show all accounts</b> to temporarily show hidden "
+"accounts in the views."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:76
+msgid "Show equity accounts"
+msgstr ""
+
+#: dialogs/rc.cpp:332 dialogs/settings/rc.cpp:77 widgets/rc.cpp:160
+msgid "Schedules"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:78
+msgid "Don't show finished schedules"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:79
+msgid "This option hides all finished schedules in the schedules view."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:81
+msgid "Don't show transactions prior to"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:82
+msgid "Don't show reconciled transactions"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:83
+msgid "This option hides all reconciled transactions in the ledger view."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:84 widgets/rc.cpp:22
+msgid "GPG encryption settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:85
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Access to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>additional recovery encryption</i> is only accessible, if the "
+"necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id "
+"0x8AFDDC8E is found in your keyring."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:86 widgets/rc.cpp:24
+msgid "Use GPG encryption"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:87
+msgid "GPG encryption"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:88
+msgid "Your key"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:89
+msgid ""
+"This combo box lists all the secret keys you have in your keyring. Select "
+"the one you want to use for encryption when saving to a file."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:90
+msgid "Additonal keys"
+msgstr ""
+
+#: dialogs/kgpgkeyselectiondlg.cpp:50 dialogs/settings/rc.cpp:91
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading 0x."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:92 widgets/rc.cpp:28
+msgid ""
+"This symbol denotes, if the key for the given user id has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+
+#: dialogs/kgpgkeyselectiondlg.cpp:61 dialogs/settings/rc.cpp:93
+msgid "Keys for all of the above user ids found"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:94 widgets/rc.cpp:31
+msgid ""
+"This symbol denotes, if the KMyMoney recovery key has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:95
+msgid "Recover Key available in keyring"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:96
+msgid "Also encrypt with KMyMoney's recover key"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:97
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out.."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:98
+msgid "Homepage Settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:99
+msgid "Up"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:100
+msgid "Down"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:101
+msgid ""
+"Selected entries are shown on the home page of the application.<p>\n"
+"Use the buttons and checkboxes to customize the layout of the home page."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:102
+msgid "Homepage/Summary page font scaling"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:103
+msgid "Percentage of default font size:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:104
+msgid ""
+"Remember font size when leaving the program if manually changed with "
+"mouse-wheel"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:105
+msgid "Information display"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:106
+msgid "Show Account Limit Information"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:110 widgets/rc.cpp:47
+msgid ""
+"<i>Enter regular expressions which can be used to parse the data returned "
+"from the URL entered above. The symbol, price, and date must be found in "
+"the quote data to be usable. You may also try the KMyMoney user's "
+"mailinglist at <a "
+"href=\"mailto:kmymoney2-user@lists.sourceforge.net\">kmymoney2-user@lists.sou"
+"rceforge.net</a> to find what settings work for other users in your "
+"country.</i>"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:113 widgets/rc.cpp:38
+msgid "Regular Expression to extract the symbol from the downloaded data"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:114 widgets/rc.cpp:39
+msgid "Regular Expression to extract the price from the downloaded data"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:115 widgets/rc.cpp:41
+msgid "URL to be used to download the quote"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:116 widgets/rc.cpp:42
+msgid ""
+"Enter the URL from which stock quotes will be fetched. <b>%1</b> will be "
+"replaced with the symbol for the security being quoted. For currency "
+"conversions, <b>%2</b> will be replaced with the currency to be quoted and "
+"<b>%1</b> with the currency the quote is based on."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:118 dialogs/settings/rc.cpp:121 widgets/rc.cpp:40
+#: widgets/rc.cpp:44
+msgid "Regular Expression to extract the date from the downloaded data"
+msgstr ""
+
+#: dialogs/rc.cpp:807 dialogs/settings/rc.cpp:119 widgets/rc.cpp:45
+msgid "Date Format"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:122
+msgid "Skip HTML stripping"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:123
+msgid ""
+"<p>For easier processing of the data returned by the online source, KMyMoney "
+"usually strips unused parts before it is parsed with the regular "
+"expressions. If matching of the fields relies on those items, then use this "
+"option to turn stripping off.</p>\n"
+"\n"
+"<p>The following items are usually removed by stripping:\n"
+"\n"
+"<ul>\n"
+"<li>HTML tags such as <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded characters such as <b>&amp;nbsp;</b></li>\n"
+"<li>duplicate whitespace</li>\n"
+"</ul>\n"
+"</p>"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:127
+msgid "Register settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:128
+msgid "Display"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:131
+msgid ""
+"Using the ledger lens shows the details for the transaction that has focus "
+"in the ledger. Usually, when using the transaction form, only a one line "
+"summary is displayed for each transaction as the details are shown in the "
+"form."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:133
+msgid "Always show a No. field"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:134
+msgid "Show group header between transactions"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:135
+msgid ""
+"Draws a larger header above each group of transaction. The grouping depends "
+"on the current sort order."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:136
+msgid "Show header for the previous and current fiscal year"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:137
+msgid "Sorting"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:138
+msgid "Normal view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:139
+msgid "Reconciliation view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:140
+msgid "Search view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:141
+msgid ""
+"Use the <i>left</i> and <i>right</i> buttons to add and remove sort options. "
+"Use the <i>up</i> and <i>down</i> buttons to modify the sort order. "
+"Double-Click a selected entry to toggle the sort order between "
+"<i>ascending</i> and <i>descending</i>."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:142
+msgid "Data entry"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:146
+msgid "Use Enter to move between fields"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:147
+msgid "Match names from start"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:148
+msgid ""
+"Mark this option, if you always want to match names e.g. for payees from the "
+"start. If unset, any substring is matched."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:149
+msgid "Default reconciliation state"
+msgstr ""
+
+#: dialogs/rc.cpp:227 dialogs/settings/rc.cpp:150
+#: widgets/kmymoneycombo.cpp:348 widgets/registersearchline.cpp:84
+msgid "Not reconciled"
+msgstr ""
+
+#: dialogs/rc.cpp:228 dialogs/settings/rc.cpp:151
+#: widgets/kmymoneycombo.cpp:347 widgets/registersearchline.cpp:85
+msgid "Cleared"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:153
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation "
+"of an account"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:154
+msgid "Autofill"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:155
+msgid "No Autofill"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:156
+msgid "Don't do autofill of transaction data at all."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:157
+msgid "Same transaction if amount differs less than"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:158
+msgid ""
+"Collect all transactions for the given payee. Treat all transactions that "
+"refer to the same category and have an amount with +/- X % as identical. If "
+"more than one transaction is found, a list of them is presented to the "
+"user.\n"
+"\n"
+"Selecting 0% will list all transactions."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:159
+msgid ""
+"Two transactions are usually treated identical for autofill, if they refer "
+"the same accounts. They are treated as different transactions though, when "
+"their amount varies by more than the percentage given here."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:160
+msgid ""
+"_: Same transaction if amount differs less than percent.\n"
+"percent."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:161
+msgid "with previously most often used transaction for the payee"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:162
+msgid ""
+"The data of the last transaction assigned to the category used most often "
+"for this payee is autofilled into the transaction editor."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:164
+msgid "Match transactions within days"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:165
+msgid ""
+"Search for matching transactions within the range of the posting date of the "
+"imported transaction +/- the number of given days."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:166
+msgid "Ask for a new payee's default category"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:167
+msgid ""
+"Whenever a new payee is detected during import of a statement, the user will "
+"be asked to assign a default category for this user when this option is "
+"selected."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:168
+msgid "Schedule Settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:169
+msgid "Startup options"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:170
+msgid "Check schedules on startup"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:60
+#: widgets/kmymoneyonlinequoteconfig.cpp:60
+msgid "Delete the selected source entry"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:61
+#: widgets/kmymoneyonlinequoteconfig.cpp:61
+msgid "Use this to delete the selected online source entry"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:66
+#: widgets/kmymoneyonlinequoteconfig.cpp:66
+msgid "Create a new source entry for online quotes"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:67
+#: widgets/kmymoneyonlinequoteconfig.cpp:67
+msgid "Use this to create a new entry for online quotes"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:107
+#: dialogs/settings/ksettingsonlinequotes.cpp:190
+#: dialogs/settings/ksettingsonlinequotes.cpp:193
+#: dialogs/settings/ksettingsonlinequotes.cpp:216
+#: widgets/kmymoneyonlinequoteconfig.cpp:107
+#: widgets/kmymoneyonlinequoteconfig.cpp:185
+#: widgets/kmymoneyonlinequoteconfig.cpp:188
+#: widgets/kmymoneyonlinequoteconfig.cpp:211
+msgid "New Quote Source"
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:77 dialogs/rc.cpp:788
+msgid "Clear &All"
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:79
+msgid "Clear all splits"
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:80
+msgid "Use this to clear all splits of this transaction"
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:84
+msgid "&Merge"
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:183
+msgid ""
+"The total amount of this transaction is %1 while the sum of the splits is "
+"%2. The remaining %3 are unassigned."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:191
+#, c-format
+msgid "Change &total amount of transaction to %1."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:194
+msgid "&Distribute difference of %1 among all splits."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:203
+#, c-format
+msgid "&Leave total amount of transaction at %1."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:205
+msgid "&Leave %1 unassigned."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:275
+msgid ""
+"You are about to delete all splits of this transaction. Do you really want "
+"to continue?"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:97
+msgid "Use this to create a new QIF import/export profile"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:148
+#: dialogs/mymoneyqifprofileeditor.cpp:403 dialogs/rc.cpp:797
+msgid "QIF Profile Editor"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:150
+msgid "QIF Profile Selector"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:236
+msgid "The default QIF profile"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:404
+#: dialogs/mymoneyqifprofileeditor.cpp:417
+msgid "Enter new profile name"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:436
+msgid "Do you really want to delete profile '%1'?"
+msgstr ""
+
+#: dialogs/kgpgkeyselectiondlg.cpp:38
+msgid "Select additional keys"
+msgstr ""
+
+#: dialogs/kgpgkeyselectiondlg.cpp:48 widgets/rc.cpp:25
+msgid "User identification"
+msgstr ""
+
+#: dialogs/kendingbalancedlg.cpp:71
+msgid ""
+"Please enter the following fields with the information as you find them on "
+"your statement. Make sure to enter all values in <b>%1</b>."
+msgstr ""
+
+#: dialogs/kendingbalancedlg.cpp:124
+#, c-format
+msgid "Last reconciled statement: %1"
+msgstr ""
+
+#: dialogs/kendingbalancedlg.cpp:437 dialogs/kendingbalancedlg.cpp:577
+#: dialogs/rc.cpp:137
+msgid "Adjustment transaction"
+msgstr ""
+
+#: dialogs/kendingbalancedlg.cpp:510
+msgid ""
+"KMyMoney has calculated the following amounts for interest and amortization "
+"according to recorded payments between %1 and %2."
+msgstr ""
+
+#: dialogs/kbalancechartdlg.cpp:59
+#, c-format
+msgid "Balance of %1"
+msgstr ""
+
+#: dialogs/kbalancechartdlg.cpp:70
+msgid "%1 Balance History"
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:98
+msgid "Split Options"
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:99 dialogs/rc.cpp:731
+#: widgets/kmymoneypriceview.cpp:149
+msgid "Edit..."
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:100
+msgid "Duplicate"
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:102
+msgid "Delete ..."
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:275
+msgid ""
+"_: Duplicate split\n"
+"CTRL+c"
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:562
+msgid "will be calculated"
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:648
+msgid ""
+"You are about to delete the selected split. Do you really want to continue?"
+msgstr ""
+
+#: dialogs/rc.cpp:1
+msgid "Account selection"
+msgstr ""
+
+#: dialogs/rc.cpp:3
+msgid "Account to import to"
+msgstr ""
+
+#: dialogs/rc.cpp:6 dialogs/rc.cpp:170 widgets/rc.cpp:169
+msgid "Skip"
+msgstr ""
+
+#: dialogs/rc.cpp:8
+msgid ""
+"Use this dialog to backup your data. \n"
+"\n"
+"Please make sure you have a disk inserted and that the drive is ready. Then "
+"choose the mount point from either the Choose button or by entering the path "
+"in the available box.\n"
+"\n"
+"Click OK to perform the backup. If your system does not use an automounter, "
+"make sure you mark the checkbox below to \"mount this directory before "
+"backing up.\""
+msgstr ""
+
+#: dialogs/rc.cpp:9
+msgid "Device options"
+msgstr ""
+
+#: dialogs/rc.cpp:10
+msgid ""
+"_: This is the mount point\n"
+"Mount Point:"
+msgstr ""
+
+#: dialogs/rc.cpp:11
+msgid "Choose..."
+msgstr ""
+
+#: dialogs/rc.cpp:12
+msgid "Mount this directory before backing up."
+msgstr ""
+
+#: dialogs/rc.cpp:15
+msgid "Reassign categories"
+msgstr ""
+
+#: dialogs/rc.cpp:16
+msgid ""
+"The transactions, schedules and budgets associated with the selected "
+"category need to be re-assigned to a different category before the selected "
+"category can be deleted. Please select a category from the list below."
+msgstr ""
+
+#: dialogs/rc.cpp:17
+msgid "Available categories:"
+msgstr ""
+
+#: dialogs/rc.cpp:21
+msgid ""
+"Please choose the type of import you wish to perform. A simple "
+"explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+
+#: dialogs/rc.cpp:23
+msgid "QIF"
+msgstr ""
+
+#: dialogs/rc.cpp:24
+msgid "CSV"
+msgstr ""
+
+#: dialogs/rc.cpp:25
+msgid "Some descripton"
+msgstr ""
+
+#: dialogs/rc.cpp:28
+msgid "Confirm Manual Enter"
+msgstr ""
+
+#: dialogs/rc.cpp:29
+msgid "The following changes have been made to the transaction data:"
+msgstr ""
+
+#: dialogs/rc.cpp:30
+msgid "Please choose what you wish to do with the above changes"
+msgstr ""
+
+#: dialogs/rc.cpp:31
+msgid ""
+"Discard the changes and enter the original transaction into the register."
+msgstr ""
+
+#: dialogs/rc.cpp:32
+msgid "Enter these new values this one time, for this occurence only."
+msgstr ""
+
+#: dialogs/rc.cpp:33
+msgid "Set all further occurences in this schedule to be these values."
+msgstr ""
+
+#: dialogs/rc.cpp:36
+msgid "CSV Dialog"
+msgstr ""
+
+#: dialogs/rc.cpp:37
+msgid ""
+"CSV Dialog. Choose a file and then click on Run. You can view your "
+"progress at\n"
+"the bottom of the screen.\n"
+"\n"
+"You can cancel the process at any time by clicking on the Cancel button."
+msgstr ""
+
+#: dialogs/rc.cpp:38
+msgid "Choose the csv file:"
+msgstr ""
+
+#: dialogs/rc.cpp:39
+msgid "Browse"
+msgstr ""
+
+#: dialogs/rc.cpp:40
+msgid "Between These Dates"
+msgstr ""
+
+#: dialogs/rc.cpp:41 dialogs/rc.cpp:196
+msgid "Start on:"
+msgstr ""
+
+#: dialogs/rc.cpp:42 dialogs/rc.cpp:195
+msgid "End on:"
+msgstr ""
+
+#: dialogs/rc.cpp:43
+msgid "Run"
+msgstr ""
+
+#: dialogs/rc.cpp:44
+msgid "Progress Info"
+msgstr ""
+
+#: dialogs/rc.cpp:45
+msgid "Processing Account:"
+msgstr ""
+
+#: dialogs/rc.cpp:47
+msgid "Processing Transaction:"
+msgstr ""
+
+#: dialogs/rc.cpp:48
+msgid "0 of 0"
+msgstr ""
+
+#: dialogs/rc.cpp:50
+msgid "Exchange Rate/Price Editor"
+msgstr ""
+
+#: dialogs/rc.cpp:55
+msgid "Convert from"
+msgstr ""
+
+#: dialogs/rc.cpp:58
+msgid "Convert to"
+msgstr ""
+
+#: dialogs/rc.cpp:61
+msgid "To amount"
+msgstr ""
+
+#: dialogs/rc.cpp:62
+msgid "Exchange rate / Price"
+msgstr ""
+
+#: dialogs/rc.cpp:64
+msgid ""
+"xx\n"
+"xx"
+msgstr ""
+
+#: dialogs/rc.cpp:68
+msgid "Currencies"
+msgstr ""
+
+#: dialogs/rc.cpp:72
+msgid "real ID"
+msgstr ""
+
+#: dialogs/rc.cpp:73 dialogs/rc.cpp:722
+msgid "ID"
+msgstr ""
+
+#: dialogs/rc.cpp:74
+msgid "X"
+msgstr ""
+
+#: dialogs/rc.cpp:76 dialogs/rc.cpp:459
+msgid "Online Source"
+msgstr ""
+
+#: dialogs/rc.cpp:78 dialogs/rc.cpp:278 dialogs/rc.cpp:312 dialogs/rc.cpp:684
+msgid "F1"
+msgstr ""
+
+#: dialogs/rc.cpp:80
+msgid "If this button is not activated, select the base currency first."
+msgstr ""
+
+#: dialogs/rc.cpp:81
+msgid ""
+"Press this button to close the dialog. If the button is not activated, "
+"select your base currency."
+msgstr ""
+
+#: dialogs/rc.cpp:82
+msgid "Edit Equity"
+msgstr ""
+
+#: dialogs/rc.cpp:86 dialogs/rc.cpp:410
+msgid "Smallest fraction:"
+msgstr ""
+
+#: dialogs/rc.cpp:87 dialogs/rc.cpp:408 dialogs/rc.cpp:440
+msgid "1 /"
+msgstr ""
+
+#: dialogs/rc.cpp:88 dialogs/rc.cpp:405
+msgid "Investment Type:"
+msgstr ""
+
+#: dialogs/rc.cpp:89 dialogs/rc.cpp:404
+msgid "Equity Name:"
+msgstr ""
+
+#: dialogs/rc.cpp:90 dialogs/rc.cpp:409
+msgid "Market Symbol:"
+msgstr ""
+
+#: dialogs/rc.cpp:91
+msgid "Price History"
+msgstr ""
+
+#: dialogs/rc.cpp:97
+msgid "Edit Scheduled transaction"
+msgstr ""
+
+#: dialogs/rc.cpp:98
+msgid "Schedule name:"
+msgstr ""
+
+#: dialogs/rc.cpp:99
+msgid "Frequency:"
+msgstr ""
+
+#: dialogs/rc.cpp:100
+msgid "Number of selected periods between entries"
+msgstr ""
+
+#: dialogs/rc.cpp:101
+msgid "Payment information"
+msgstr ""
+
+#: dialogs/rc.cpp:105 dialogs/rc.cpp:160 dialogs/rc.cpp:247 dialogs/rc.cpp:752
+#: widgets/register.cpp:569
+msgid "C"
+msgstr ""
+
+#: dialogs/rc.cpp:113
+msgid "Do nothing"
+msgstr ""
+
+#: dialogs/rc.cpp:116
+msgid "If this schedule occurs on the weekend:"
+msgstr ""
+
+#: dialogs/rc.cpp:117
+msgid "The amount is an estimate because it varies for each payment"
+msgstr ""
+
+#: dialogs/rc.cpp:118
+msgid "Enter this schedule into the register automatically when it is due"
+msgstr ""
+
+#: dialogs/rc.cpp:119
+msgid "This schedule will end at some time"
+msgstr ""
+
+#: dialogs/rc.cpp:120
+msgid "Number of transactions remaining:"
+msgstr ""
+
+#: dialogs/rc.cpp:121
+msgid "Date of final transaction:"
+msgstr ""
+
+#: dialogs/rc.cpp:125
+msgid "Reconciliation Wizard"
+msgstr ""
+
+#: dialogs/rc.cpp:127
+msgid ""
+"Reconciling your account assures, that your recordings match those of your "
+"institution and that there are no mistakes on either side. You should "
+"reconcile your account whenever you receive a statement from your "
+"institution.\n"
+"\n"
+"All relevant information necessary for this process is usually printed on "
+"your statement.\n"
+"\n"
+"On the next page you will verify, that the starting and ending balance are "
+"matching those on your statement. If not, please modify the figures."
+msgstr ""
+
+#: dialogs/rc.cpp:129
+msgid ""
+"KMyMoney calculates your loan payments automatically. The amounts can "
+"deviate from those calculated by the creditor. Therefore, you possibly have "
+"to adjust amortization, interest and other costs according to your "
+"statement.\n"
+"\n"
+"Please enter the following information found on your statement:"
+msgstr ""
+
+#: dialogs/rc.cpp:130
+msgid "Ending date of statement"
+msgstr ""
+
+#: dialogs/rc.cpp:131
+msgid "Starting date of statement"
+msgstr ""
+
+#: dialogs/rc.cpp:132
+msgid "Verify payments"
+msgstr ""
+
+#: dialogs/rc.cpp:133 dialogs/rc.cpp:148 dialogs/rc.cpp:476 dialogs/rc.cpp:477
+#: dialogs/rc.cpp:508 dialogs/rc.cpp:513 dialogs/rc.cpp:518 dialogs/rc.cpp:532
+#: dialogs/rc.cpp:539 dialogs/rc.cpp:540 dialogs/rc.cpp:541 dialogs/rc.cpp:542
+#: dialogs/rc.cpp:543 dialogs/rc.cpp:552 dialogs/rc.cpp:553 dialogs/rc.cpp:554
+#: dialogs/rc.cpp:555 dialogs/rc.cpp:556 dialogs/rc.cpp:565 dialogs/rc.cpp:566
+#: dialogs/rc.cpp:567 dialogs/rc.cpp:568 dialogs/rc.cpp:569 dialogs/rc.cpp:578
+#: dialogs/rc.cpp:579 dialogs/rc.cpp:580 dialogs/rc.cpp:581 dialogs/rc.cpp:582
+#: dialogs/rc.cpp:591 dialogs/rc.cpp:592 dialogs/rc.cpp:593 dialogs/rc.cpp:594
+#: dialogs/rc.cpp:595 dialogs/rc.cpp:603 dialogs/rc.cpp:604 dialogs/rc.cpp:605
+#: dialogs/rc.cpp:606 dialogs/rc.cpp:607 dialogs/rc.cpp:618 dialogs/rc.cpp:619
+#: dialogs/rc.cpp:621 dialogs/rc.cpp:636 dialogs/rc.cpp:637 dialogs/rc.cpp:638
+#: dialogs/rc.cpp:639 dialogs/rc.cpp:640 dialogs/rc.cpp:641 dialogs/rc.cpp:651
+#: dialogs/rc.cpp:652 dialogs/rc.cpp:654 dialogs/rc.cpp:657 dialogs/rc.cpp:658
+#: dialogs/rc.cpp:659 dialogs/rc.cpp:664 dialogs/rc.cpp:665 dialogs/rc.cpp:668
+#: dialogs/rc.cpp:670 dialogs/rc.cpp:672 dialogs/rc.cpp:674 dialogs/rc.cpp:676
+#: dialogs/rc.cpp:678 dialogs/rc.cpp:681 dialogs/rc.cpp:823 widgets/rc.cpp:167
+msgid "1"
+msgstr ""
+
+#: dialogs/rc.cpp:136
+msgid ""
+"If your statement shows different amounts, please cancel this dialog and "
+"correct the false transactions or correct the values in this dialog. In the "
+"later case, KMyMoney will create an adjustment transaction and add it to the "
+"ledger."
+msgstr ""
+
+#: dialogs/rc.cpp:138
+msgid ""
+"In order to create the adjustment transaction, KMyMoney requires an account "
+"and possibly an interest category to assign the differences to. Please "
+"select an account and - if necessary - a category."
+msgstr ""
+
+#: dialogs/rc.cpp:140
+msgid "Interest-Category"
+msgstr ""
+
+#: dialogs/rc.cpp:141
+msgid "Restarting postponed reconciliation"
+msgstr ""
+
+#: dialogs/rc.cpp:142
+msgid ""
+"You have previously postponed the reconciliation of this account. If you "
+"have entered charges or interests the last time you started reconciling this "
+"account you can modify these in the ledger later on.\n"
+"\n"
+"It is important, that you continue with the same statement you used when you "
+"postponed the reconciliation.\n"
+"\n"
+"All information you have entered into this wizard will be shown and all "
+"transactions that you already cleared are marked with a 'C'."
+msgstr ""
+
+#: dialogs/rc.cpp:143
+msgid "Statement Information"
+msgstr ""
+
+#: dialogs/rc.cpp:144 dialogs/rc.cpp:315 dialogs/rc.cpp:317 dialogs/rc.cpp:320
+#: dialogs/rc.cpp:321 dialogs/rc.cpp:329 dialogs/rc.cpp:330 dialogs/rc.cpp:333
+#: dialogs/rc.cpp:334 dialogs/rc.cpp:335 dialogs/rc.cpp:336 dialogs/rc.cpp:366
+msgid "x"
+msgstr ""
+
+#: dialogs/rc.cpp:145
+msgid "Statement date:"
+msgstr ""
+
+#: dialogs/rc.cpp:146
+msgid "Starting balance of this statement:"
+msgstr ""
+
+#: dialogs/rc.cpp:147
+msgid "Ending balance of this statement:"
+msgstr ""
+
+#: dialogs/rc.cpp:149
+msgid "Interest / Charges"
+msgstr ""
+
+#: dialogs/rc.cpp:150
+msgid ""
+"If necessary, enter information about interest or charges here. KMyMoney "
+"will create transactions and clear them directly for you."
+msgstr ""
+
+#: dialogs/rc.cpp:153
+msgid "Charges"
+msgstr ""
+
+#: dialogs/rc.cpp:154
+msgid "Enter Schedule"
+msgstr ""
+
+#: dialogs/rc.cpp:155
+msgid "Schedule Details"
+msgstr ""
+
+#: dialogs/rc.cpp:156 dialogs/rc.cpp:348 dialogs/rc.cpp:389 widgets/rc.cpp:164
+msgid "Name:"
+msgstr ""
+
+#: dialogs/rc.cpp:157 dialogs/rc.cpp:351 widgets/rc.cpp:165
+msgid "Type:"
+msgstr ""
+
+#: dialogs/rc.cpp:168
+msgid "Enter"
+msgstr ""
+
+#: dialogs/rc.cpp:169
+msgid ""
+"Enter the transaction and advance the next due date of this schedule to the "
+"next payment date."
+msgstr ""
+
+#: dialogs/rc.cpp:171
+msgid ""
+"Do not enter the transaction but advance the next due date of this schedule "
+"to the next payment date."
+msgstr ""
+
+#: dialogs/rc.cpp:172
+msgid "Ignore"
+msgstr ""
+
+#: dialogs/rc.cpp:173
+msgid ""
+"Do not enter or skip payments for this schedule but continue with the next "
+"schedule."
+msgstr ""
+
+#: dialogs/rc.cpp:175
+msgid "Cancel processing of schedule entry."
+msgstr ""
+
+#: dialogs/rc.cpp:176
+msgid "Update Stock and Currency Prices"
+msgstr ""
+
+#: dialogs/rc.cpp:177
+msgid "List of known Equities, and the date they were last updated on."
+msgstr ""
+
+#: dialogs/rc.cpp:179
+msgid "Update All"
+msgstr ""
+
+#: dialogs/rc.cpp:180
+msgid "Update Selected"
+msgstr ""
+
+#: dialogs/rc.cpp:181
+msgid "Status:"
+msgstr ""
+
+#: dialogs/rc.cpp:184
+msgid "QIF Export"
+msgstr ""
+
+#: dialogs/rc.cpp:185
+msgid ""
+"From this dialog you are able to export transactions to a quicken compatible "
+"file, (known as a QIF file, because of the extension). Please enter the "
+"path to the QIF file or select it by clicking on the Browse button.\n"
+"\n"
+"You can choose the file's path, the account and the format of the QIF file "
+"(profile). Choose Account to export all the transactions between the "
+"specified dates or just categories. You can also limit the transactions "
+"that are exported by start and ending date. Once you have pressed the "
+"Export button a message box will appear when the export has completed "
+"detailing how many transactions, categories and payees were exported."
+msgstr ""
+
+#: dialogs/rc.cpp:186
+msgid "File to export to:"
+msgstr ""
+
+#: dialogs/rc.cpp:188
+msgid "Account to export"
+msgstr ""
+
+#: dialogs/rc.cpp:189 dialogs/rc.cpp:297
+msgid "QIF Profile"
+msgstr ""
+
+#: dialogs/rc.cpp:190 dialogs/rc.cpp:298 dialogs/rc.cpp:362
+#: widgets/kmymoneypriceview.cpp:145
+msgid "New..."
+msgstr ""
+
+#: dialogs/rc.cpp:191
+msgid "Contents to Export"
+msgstr ""
+
+#: dialogs/rc.cpp:194
+msgid "Date Range"
+msgstr ""
+
+#: dialogs/rc.cpp:199
+msgid "Search transactions"
+msgstr ""
+
+#: dialogs/rc.cpp:200
+msgid "Criteria"
+msgstr ""
+
+#: dialogs/rc.cpp:201
+msgid "Define your search criteria"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:169 dialogs/rc.cpp:202
+msgid "Text"
+msgstr ""
+
+#: dialogs/rc.cpp:203
+msgid "Contains"
+msgstr ""
+
+#: dialogs/rc.cpp:204
+msgid "Does not contain"
+msgstr ""
+
+#: dialogs/rc.cpp:205
+msgid "Treat text as regular expression"
+msgstr ""
+
+#: dialogs/rc.cpp:206
+msgid "Case sensitive"
+msgstr ""
+
+#: dialogs/rc.cpp:209
+msgid "Range"
+msgstr ""
+
+#: dialogs/rc.cpp:210
+msgid ""
+"_: To (Date)\n"
+"To"
+msgstr ""
+
+#: dialogs/rc.cpp:211
+msgid ""
+"_: From (Date)\n"
+"From"
+msgstr ""
+
+#: dialogs/rc.cpp:213
+msgid "Search this amount"
+msgstr ""
+
+#: dialogs/rc.cpp:214
+msgid "Search amount in the range"
+msgstr ""
+
+#: dialogs/rc.cpp:215
+msgid ""
+"_: to (amount)\n"
+"to"
+msgstr ""
+
+#: dialogs/rc.cpp:216
+msgid ""
+"_: from (amount)\n"
+"from"
+msgstr ""
+
+#: dialogs/rc.cpp:220
+msgid "Select transactions without payees"
+msgstr ""
+
+#: dialogs/rc.cpp:221
+msgid "Select all"
+msgstr ""
+
+#: dialogs/rc.cpp:222
+msgid "Select none"
+msgstr ""
+
+#: dialogs/rc.cpp:224
+msgid "Validity"
+msgstr ""
+
+#: dialogs/rc.cpp:226
+msgid "All states"
+msgstr ""
+
+#: dialogs/rc.cpp:230
+msgid "All types"
+msgstr ""
+
+#: dialogs/rc.cpp:234
+msgid "Any transaction"
+msgstr ""
+
+#: dialogs/rc.cpp:235
+msgid "Valid transaction"
+msgstr ""
+
+#: dialogs/rc.cpp:236
+msgid "Invalid transaction"
+msgstr ""
+
+#: dialogs/rc.cpp:237
+msgid "State"
+msgstr ""
+
+#: dialogs/rc.cpp:238
+msgid "Search this number"
+msgstr ""
+
+#: dialogs/rc.cpp:239
+msgid "Search number in range"
+msgstr ""
+
+#: dialogs/rc.cpp:240
+msgid ""
+"_: to (number)\n"
+"to"
+msgstr ""
+
+#: dialogs/rc.cpp:241
+msgid ""
+"_: from (number)\n"
+"from"
+msgstr ""
+
+#: dialogs/rc.cpp:242
+msgid "text"
+msgstr ""
+
+#: dialogs/rc.cpp:243
+msgid "warning"
+msgstr ""
+
+#: dialogs/rc.cpp:244
+msgid "Result"
+msgstr ""
+
+#: dialogs/rc.cpp:254
+msgid "F"
+msgstr ""
+
+#: dialogs/rc.cpp:257 dialogs/rc.cpp:844
+msgid "&Reset"
+msgstr ""
+
+#: dialogs/rc.cpp:258
+msgid "&Find"
+msgstr ""
+
+#: dialogs/rc.cpp:259
+msgid "GnuCash Import Options"
+msgstr ""
+
+#: dialogs/rc.cpp:260
+msgid "Use 'Help' for more information on these options"
+msgstr ""
+
+#: dialogs/rc.cpp:261
+msgid "Investment Handling"
+msgstr ""
+
+#: dialogs/rc.cpp:262
+msgid "One investment account for each stock"
+msgstr ""
+
+#: dialogs/rc.cpp:263
+msgid "One investment account for all stocks"
+msgstr ""
+
+#: dialogs/rc.cpp:264
+msgid "Prompt for an investment account for each stock"
+msgstr ""
+
+#: dialogs/rc.cpp:265
+msgid "Online price quotes"
+msgstr ""
+
+#: dialogs/rc.cpp:266
+msgid "Use Finance::Quote for share price quotes"
+msgstr ""
+
+#: dialogs/rc.cpp:267
+msgid "Scheduled Transactions"
+msgstr ""
+
+#: dialogs/rc.cpp:268
+msgid "Drop suspect scheduled transactions"
+msgstr ""
+
+#: dialogs/rc.cpp:269
+msgid "Decoding option"
+msgstr ""
+
+#: dialogs/rc.cpp:270
+msgid "Decode using"
+msgstr ""
+
+#: dialogs/rc.cpp:271
+msgid "Transaction Notes option"
+msgstr ""
+
+#: dialogs/rc.cpp:272
+msgid "Use transaction notes on non-split transactions"
+msgstr ""
+
+#: dialogs/rc.cpp:273
+msgid "Debug Options"
+msgstr ""
+
+#: dialogs/rc.cpp:274
+msgid "General debug data"
+msgstr ""
+
+#: dialogs/rc.cpp:275
+msgid "Display XML data"
+msgstr ""
+
+#: dialogs/rc.cpp:276
+msgid "Anonymize data"
+msgstr ""
+
+#: dialogs/rc.cpp:281
+msgid "Online Quotes - Select price source"
+msgstr ""
+
+#: dialogs/rc.cpp:284
+msgid ""
+"This price source is not known to KMyMoney. Please select an option below."
+msgstr ""
+
+#: dialogs/rc.cpp:285
+msgid "Do not perform online quotes for this investment"
+msgstr ""
+
+#: dialogs/rc.cpp:286
+msgid "Select a known KMyMoney source from the list below"
+msgstr ""
+
+#: dialogs/rc.cpp:287
+msgid ""
+"Use the following name for the price source.\n"
+"(Click Help for further information.)"
+msgstr ""
+
+#: dialogs/rc.cpp:288
+msgid "Always use this selection for this price source."
+msgstr ""
+
+#: dialogs/rc.cpp:289
+msgid "QIF Import"
+msgstr ""
+
+#: dialogs/rc.cpp:290
+msgid ""
+"From this dialog you are able to import transactions from a "
+"Quicken<b>&trade;</b> compatible file, (known as a QIF file, because of the "
+"extension).<p>\n"
+"\n"
+"Please enter the path to the QIF file or select it by clicking on the Browse "
+"button. Once you have the file's path press the Import button and KMyMoney "
+"will import all the transactions, categories and payees it finds."
+msgstr ""
+
+#: dialogs/rc.cpp:291
+msgid "QIF File to Import:"
+msgstr ""
+
+#: dialogs/rc.cpp:292
+msgid "Import options"
+msgstr ""
+
+#: dialogs/rc.cpp:293
+msgid "Bank statement"
+msgstr ""
+
+#: dialogs/rc.cpp:294
+msgid "Other application"
+msgstr ""
+
+#: dialogs/rc.cpp:295
+msgid ""
+"Select <b>Bank statement</b> turns on automatic category matching which is "
+"turned off in case of <b>Historic data</b>. Use the latter if you import "
+"files from other Personal Finance Management software."
+msgstr ""
+
+#: dialogs/rc.cpp:296
+msgid "Source of QIF"
+msgstr ""
+
+#: dialogs/rc.cpp:302
+msgid "Verify Import"
+msgstr ""
+
+#: dialogs/rc.cpp:304
+msgid "Ok"
+msgstr ""
+
+#: dialogs/rc.cpp:306
+msgid "MyDialog"
+msgstr ""
+
+#: dialogs/rc.cpp:310
+msgid "File Information"
+msgstr ""
+
+#: dialogs/rc.cpp:316
+msgid "Last modified on"
+msgstr ""
+
+#: dialogs/rc.cpp:319
+msgid "Base currency"
+msgstr ""
+
+#: dialogs/rc.cpp:322
+msgid "Created on"
+msgstr ""
+
+#: dialogs/rc.cpp:325
+msgid "Accounts/Categories"
+msgstr ""
+
+#: dialogs/rc.cpp:328
+msgid "Closed"
+msgstr ""
+
+#: dialogs/rc.cpp:331
+msgid "Prices"
+msgstr ""
+
+#: dialogs/rc.cpp:337
+msgid "Splits"
+msgstr ""
+
+#: dialogs/rc.cpp:338
+msgid "Price Editor"
+msgstr ""
+
+#: dialogs/rc.cpp:339
+msgid "Show all stored prices"
+msgstr ""
+
+#: dialogs/rc.cpp:343
+msgid "Delete Range..."
+msgstr ""
+
+#: dialogs/rc.cpp:346
+msgid "New Account Dialog"
+msgstr ""
+
+#: dialogs/rc.cpp:349
+msgid "Opening information"
+msgstr ""
+
+#: dialogs/rc.cpp:350
+msgid "Currency:"
+msgstr ""
+
+#: dialogs/rc.cpp:352 dialogs/rc.cpp:793
+msgid "Date:"
+msgstr ""
+
+#: dialogs/rc.cpp:353
+msgid "Balance:"
+msgstr ""
+
+#: dialogs/rc.cpp:355
+msgid "Last check number:"
+msgstr ""
+
+#: dialogs/rc.cpp:356
+msgid "Notes:"
+msgstr ""
+
+#: dialogs/rc.cpp:357
+msgid "No auto-VAT-assignment"
+msgstr ""
+
+#: dialogs/rc.cpp:358 dialogs/rc.cpp:441
+msgid "Price entry"
+msgstr ""
+
+#: dialogs/rc.cpp:359
+msgid "Preferred Account"
+msgstr ""
+
+#: dialogs/rc.cpp:363
+msgid "Number:"
+msgstr ""
+
+#: dialogs/rc.cpp:364 dialogs/rc.cpp:395
+msgid "BIC"
+msgstr ""
+
+#: dialogs/rc.cpp:367
+msgid "Hierarchy"
+msgstr ""
+
+#: dialogs/rc.cpp:368
+msgid "Subaccount"
+msgstr ""
+
+#: dialogs/rc.cpp:369
+msgid "Limits"
+msgstr ""
+
+#: dialogs/rc.cpp:370
+msgid ""
+"This page allows to setup certain limits. KMyMoney will warn you when the "
+"account balance reaches a limit."
+msgstr ""
+
+#: dialogs/rc.cpp:372
+msgid "Absolute limit"
+msgstr ""
+
+#: dialogs/rc.cpp:373
+msgid "Maximum credit limit"
+msgstr ""
+
+#: dialogs/rc.cpp:374
+msgid "Minimum balance"
+msgstr ""
+
+#: dialogs/rc.cpp:375
+msgid "Early warning"
+msgstr ""
+
+#: dialogs/rc.cpp:377
+msgid "VAT details"
+msgstr ""
+
+#: dialogs/rc.cpp:378
+msgid "VAT category"
+msgstr ""
+
+#: dialogs/rc.cpp:379
+msgid "VAT percentage"
+msgstr ""
+
+#: dialogs/rc.cpp:380
+msgid "Enable auto VAT assignment"
+msgstr ""
+
+#: dialogs/rc.cpp:381
+msgid "Amount entered"
+msgstr ""
+
+#: dialogs/rc.cpp:382
+msgid "Gross amount"
+msgstr ""
+
+#: dialogs/rc.cpp:383
+msgid "Net amount"
+msgstr ""
+
+#: dialogs/rc.cpp:384
+msgid "Include on Tax Reports"
+msgstr ""
+
+#: dialogs/rc.cpp:387
+msgid "New Institution Dialog"
+msgstr ""
+
+#: dialogs/rc.cpp:388
+msgid "Institution Details"
+msgstr ""
+
+#: dialogs/rc.cpp:390
+msgid "City:"
+msgstr ""
+
+#: dialogs/rc.cpp:394
+msgid "Routing Number:"
+msgstr ""
+
+#: dialogs/rc.cpp:398
+msgid "New Budget"
+msgstr ""
+
+#: dialogs/rc.cpp:403
+msgid "New Equity"
+msgstr ""
+
+#: dialogs/rc.cpp:406 dialogs/rc.cpp:407
+msgid "Trading Symbol of the stock or mutual fund, not required."
+msgstr ""
+
+#: dialogs/rc.cpp:414 dialogs/rc.cpp:415
+msgid "Name of the company, or mutual fund."
+msgstr ""
+
+#: dialogs/rc.cpp:418
+msgid "New File Dialog"
+msgstr ""
+
+#: dialogs/rc.cpp:419
+msgid ""
+"Use this dialog to enter personal information about yourself.\n"
+"\n"
+"All information is optional and is provided to personalize\n"
+"your KMyMoney file."
+msgstr ""
+
+#: dialogs/rc.cpp:430
+msgid "New Investment wizard"
+msgstr ""
+
+#: dialogs/rc.cpp:431
+msgid "Investment Type"
+msgstr ""
+
+#: dialogs/rc.cpp:432
+msgid "This wizard allows you to create a new investment."
+msgstr ""
+
+#: dialogs/rc.cpp:433
+msgid ""
+"The first step in this process requires to select the type of investment. "
+"The following steps collect more details about the investment from you."
+msgstr ""
+
+#: dialogs/rc.cpp:434
+msgid "Type of investment"
+msgstr ""
+
+#: dialogs/rc.cpp:438
+msgid "Investment details"
+msgstr ""
+
+#: dialogs/rc.cpp:439
+msgid ""
+"Enter the details below and click <b>Next</b> to continue entering the "
+"online update details."
+msgstr ""
+
+#: dialogs/rc.cpp:442 dialogs/rc.cpp:728
+msgid "Fraction"
+msgstr ""
+
+#: dialogs/rc.cpp:443
+msgid "Trading Currency"
+msgstr ""
+
+#: dialogs/rc.cpp:444
+msgid "Full name"
+msgstr ""
+
+#: dialogs/rc.cpp:445
+msgid "AMEX"
+msgstr ""
+
+#: dialogs/rc.cpp:446
+msgid "EUREX"
+msgstr ""
+
+#: dialogs/rc.cpp:447
+msgid "FUND"
+msgstr ""
+
+#: dialogs/rc.cpp:448
+msgid "NASDAQ"
+msgstr ""
+
+#: dialogs/rc.cpp:449
+msgid "NYSE"
+msgstr ""
+
+#: dialogs/rc.cpp:450
+msgid "XETRA"
+msgstr ""
+
+#: dialogs/rc.cpp:451
+msgid "Trading symbol"
+msgstr ""
+
+#: dialogs/rc.cpp:452
+msgid "Identification"
+msgstr ""
+
+#: dialogs/rc.cpp:453
+msgid "Enter the ticker symbol (e.g. RHAT)."
+msgstr ""
+
+#: dialogs/rc.cpp:454
+msgid "Enter the CUSIP/ISIN/WKN identification number here"
+msgstr ""
+
+#: dialogs/rc.cpp:455
+msgid "Trading market"
+msgstr ""
+
+#: dialogs/rc.cpp:456
+msgid "Online Update"
+msgstr ""
+
+#: dialogs/rc.cpp:457
+msgid ""
+"Select an online source and click <b>Finish</b> to store the investment "
+"data. If you don't want to use online updates, just leave the data as is."
+msgstr ""
+
+#: dialogs/rc.cpp:458
+msgid "Use Finance::Quote"
+msgstr ""
+
+#: dialogs/rc.cpp:460
+msgid "Factor"
+msgstr ""
+
+#: dialogs/rc.cpp:461
+msgid "New Loan Wizard"
+msgstr ""
+
+#: dialogs/rc.cpp:462
+msgid "New Loan Account Wizard"
+msgstr ""
+
+#: dialogs/rc.cpp:463
+msgid ""
+"\n"
+"Welcome to the New Loan Account Wizard which will guide you through the "
+"creation of a new loan e.g. for your home, your car or any other loan that "
+"you pay or gain interest for.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+
+#: dialogs/rc.cpp:464
+msgid "Edit Loan Account Wizard"
+msgstr ""
+
+#: dialogs/rc.cpp:465
+msgid ""
+"\n"
+"Welcome to the Edit Loan Account Wizard. Please use this wizard to modify "
+"information about your loan account.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+
+#: dialogs/rc.cpp:467
+msgid ""
+"\n"
+"In the first step, KMyMoney will ask you some general information about the "
+"loan account to be created."
+msgstr ""
+
+#: dialogs/rc.cpp:468 dialogs/rc.cpp:522 dialogs/rc.cpp:610
+msgid "1. General Information"
+msgstr ""
+
+#: dialogs/rc.cpp:469
+msgid ""
+"\n"
+"2. Calculate Loan\n"
+"\n"
+"3. Payments"
+msgstr ""
+
+#: dialogs/rc.cpp:470
+msgid "Edit selection"
+msgstr ""
+
+#: dialogs/rc.cpp:471
+msgid ""
+"\n"
+"Please select, which data of the loan you want to modify."
+msgstr ""
+
+#: dialogs/rc.cpp:472
+msgid "Modify the interest rate"
+msgstr ""
+
+#: dialogs/rc.cpp:473
+msgid "Modify additional fees"
+msgstr ""
+
+#: dialogs/rc.cpp:474
+msgid "Modify other loan information"
+msgstr ""
+
+#: dialogs/rc.cpp:475
+msgid "Effective date"
+msgstr ""
+
+#: dialogs/rc.cpp:478
+msgid "When should the changes become active?"
+msgstr ""
+
+#: dialogs/rc.cpp:479
+msgid "Lending or borrowing money"
+msgstr ""
+
+#: dialogs/rc.cpp:480
+msgid ""
+"\n"
+"Do you borrow or lend money?"
+msgstr ""
+
+#: dialogs/rc.cpp:483
+msgid "Name of the loan"
+msgstr ""
+
+#: dialogs/rc.cpp:484
+msgid ""
+"\n"
+"How do you want to call this loan? Examples for names are 'car loan', "
+"'school loan', 'home owner loan'."
+msgstr ""
+
+#: dialogs/rc.cpp:486
+msgid "TextLabel6"
+msgstr ""
+
+#: dialogs/rc.cpp:487
+msgid "TextLabel7"
+msgstr ""
+
+#: dialogs/rc.cpp:488
+msgid "Type of interest"
+msgstr ""
+
+#: dialogs/rc.cpp:489
+msgid ""
+"\n"
+"Is the interest of this loan fixed over a period of time or is it adapted "
+"from time to time? If the interest rate changes during the amortization "
+"phase of the loan you should choose the option 'variable interest rate'."
+msgstr ""
+
+#: dialogs/rc.cpp:490
+msgid "Fixed interest rate"
+msgstr ""
+
+#: dialogs/rc.cpp:491
+msgid "Variable interest rate"
+msgstr ""
+
+#: dialogs/rc.cpp:492
+msgid "Payments?"
+msgstr ""
+
+#: dialogs/rc.cpp:493
+msgid ""
+"\n"
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?"
+msgstr ""
+
+#: dialogs/rc.cpp:494
+msgid "No, no payments were made yet."
+msgstr ""
+
+#: dialogs/rc.cpp:495
+msgid "Yes, payments were made."
+msgstr ""
+
+#: dialogs/rc.cpp:496
+msgid ""
+"Note: Payments made to obtain the loan (e.g. Dissagio) are not considered as "
+"payments in this context."
+msgstr ""
+
+#: dialogs/rc.cpp:497
+msgid "Recording payments?"
+msgstr ""
+
+#: dialogs/rc.cpp:498
+msgid ""
+"\n"
+"Do you want to record all payments of this loan with KMyMoney?"
+msgstr ""
+
+#: dialogs/rc.cpp:499
+msgid "Yes, record all payments."
+msgstr ""
+
+#: dialogs/rc.cpp:500
+msgid "No, only record payments since the beginning of this year."
+msgstr ""
+
+#: dialogs/rc.cpp:501
+msgid "Date of next interest change"
+msgstr ""
+
+#: dialogs/rc.cpp:502
+msgid ""
+"\n"
+"Select the date when the interest rate for this loan will be modified and "
+"the frequency of the future changes."
+msgstr ""
+
+#: dialogs/rc.cpp:503
+msgid "Next interest change on"
+msgstr ""
+
+#: dialogs/rc.cpp:504
+msgid "Time until next change"
+msgstr ""
+
+#: dialogs/rc.cpp:506 dialogs/rc.cpp:571
+msgid ""
+"\n"
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+
+#: dialogs/rc.cpp:507
+msgid "Current amount"
+msgstr ""
+
+#: dialogs/rc.cpp:510
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the amount for principal and interest then enter "
+"it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+
+#: dialogs/rc.cpp:512 dialogs/rc.cpp:545
+msgid ""
+"\n"
+"Please enter the interest rate or leave the field empty to calculate it."
+msgstr ""
+
+#: dialogs/rc.cpp:514
+msgid "Current rate"
+msgstr ""
+
+#: dialogs/rc.cpp:516
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the interest rate then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+
+#: dialogs/rc.cpp:517
+msgid "Date of first payment"
+msgstr ""
+
+#: dialogs/rc.cpp:520
+msgid "Calculate Loan"
+msgstr ""
+
+#: dialogs/rc.cpp:521
+msgid ""
+"\n"
+"You have successfully entered the general information about your loan. Next, "
+"KMyMoney needs some information about the calculation of the loan."
+msgstr ""
+
+#: dialogs/rc.cpp:523 dialogs/rc.cpp:611
+msgid ""
+"\n"
+"2. Calculate Loan"
+msgstr ""
+
+#: dialogs/rc.cpp:524 dialogs/rc.cpp:612
+msgid ""
+"\n"
+"3. Payments"
+msgstr ""
+
+#: dialogs/rc.cpp:526
+msgid ""
+"\n"
+"How often will there be payments made to this loan?"
+msgstr ""
+
+#: dialogs/rc.cpp:527
+msgid "Interest calculation"
+msgstr ""
+
+#: dialogs/rc.cpp:528
+msgid ""
+"\n"
+"When does the actual interest rate get calculated?"
+msgstr ""
+
+#: dialogs/rc.cpp:529
+msgid "When the payment is received."
+msgstr ""
+
+#: dialogs/rc.cpp:530
+msgid "When the payment is due."
+msgstr ""
+
+#: dialogs/rc.cpp:534 dialogs/rc.cpp:547 dialogs/rc.cpp:560 dialogs/rc.cpp:573
+#: dialogs/rc.cpp:586 dialogs/rc.cpp:598 dialogs/rc.cpp:679
+msgid "Loan amount:"
+msgstr ""
+
+#: dialogs/rc.cpp:535 dialogs/rc.cpp:548 dialogs/rc.cpp:561 dialogs/rc.cpp:574
+#: dialogs/rc.cpp:587 dialogs/rc.cpp:599 dialogs/rc.cpp:633 dialogs/rc.cpp:671
+msgid "Interest rate:"
+msgstr ""
+
+#: dialogs/rc.cpp:536 dialogs/rc.cpp:549 dialogs/rc.cpp:562 dialogs/rc.cpp:575
+#: dialogs/rc.cpp:588 dialogs/rc.cpp:600 dialogs/rc.cpp:669
+msgid "Term:"
+msgstr ""
+
+#: dialogs/rc.cpp:537 dialogs/rc.cpp:550 dialogs/rc.cpp:563 dialogs/rc.cpp:576
+#: dialogs/rc.cpp:589 dialogs/rc.cpp:601 dialogs/rc.cpp:622 dialogs/rc.cpp:630
+#: dialogs/rc.cpp:677
+msgid "Principal + Interest:"
+msgstr ""
+
+#: dialogs/rc.cpp:538 dialogs/rc.cpp:551 dialogs/rc.cpp:564 dialogs/rc.cpp:577
+#: dialogs/rc.cpp:583 dialogs/rc.cpp:585 dialogs/rc.cpp:590 dialogs/rc.cpp:602
+msgid "Final amortization payment"
+msgstr ""
+
+#: dialogs/rc.cpp:557
+msgid "Duration"
+msgstr ""
+
+#: dialogs/rc.cpp:558
+msgid ""
+"\n"
+"Please enter the term of this loan or leave the field empty to calculate it. "
+"The term is the time that is required to fully repay the loan. This time "
+"might be different from the time your loan contract is signed for."
+msgstr ""
+
+#: dialogs/rc.cpp:584
+msgid ""
+"\n"
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+
+#: dialogs/rc.cpp:596
+msgid "Calculation Overview"
+msgstr ""
+
+#: dialogs/rc.cpp:597
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown in the overview below. You can "
+"accept these values by selecting \"Next\" or change them by choosing "
+"\"Back\" to return to the input field for the information you want to change."
+msgstr ""
+
+#: dialogs/rc.cpp:609
+msgid ""
+"\n"
+"In the following steps, KMyMoney supports you in setting up categories and "
+"schedules for your loan payments."
+msgstr ""
+
+#: dialogs/rc.cpp:614
+msgid ""
+"\n"
+"Please select the category you want to assign the interest payments to or "
+"create a new category."
+msgstr ""
+
+#: dialogs/rc.cpp:615
+msgid "Additional Fees"
+msgstr ""
+
+#: dialogs/rc.cpp:616
+msgid ""
+"\n"
+"If your regular payment contains any additional fees, click on the button "
+"\"Additional fees\" to enter them."
+msgstr ""
+
+#: dialogs/rc.cpp:617
+msgid "= periodical payment:"
+msgstr ""
+
+#: dialogs/rc.cpp:623
+msgid ""
+"If no additional fees are included in your periodical payment or you have "
+"entered all such fees, then click on \"Next\"."
+msgstr ""
+
+#: dialogs/rc.cpp:625
+msgid ""
+"KMyMoney will create a schedule for this payment and reminds you whenever a "
+"payment must be made.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+
+#: dialogs/rc.cpp:626
+msgid "First payment due on:"
+msgstr ""
+
+#: dialogs/rc.cpp:627
+msgid "Make payment from/to:"
+msgstr ""
+
+#: dialogs/rc.cpp:629
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown below. If you want to accept these "
+"values use the \"Finish\" button to update your account, otherwise use the "
+"\"Back\" button to modify your settings."
+msgstr ""
+
+#: dialogs/rc.cpp:631
+msgid "Additional fees:"
+msgstr ""
+
+#: dialogs/rc.cpp:632
+msgid "Total payment:"
+msgstr ""
+
+#: dialogs/rc.cpp:634
+msgid "Valid from:"
+msgstr ""
+
+#: dialogs/rc.cpp:635
+msgid "Affected payments:"
+msgstr ""
+
+#: dialogs/rc.cpp:645
+msgid "Press this to create a new asset account"
+msgstr ""
+
+#: dialogs/rc.cpp:648
+msgid ""
+"\n"
+"This page summarizes the data you entered. If you need to modify anything, "
+"please use the \"Back\" button to go to respective page. Otherwise use the "
+"\"Finish\" button to create the account."
+msgstr ""
+
+#: dialogs/rc.cpp:650
+msgid "Payee:"
+msgstr ""
+
+#: dialogs/rc.cpp:653
+msgid "First payment:"
+msgstr ""
+
+#: dialogs/rc.cpp:655
+msgid "Amount is:"
+msgstr ""
+
+#: dialogs/rc.cpp:656
+msgid "Loan calculation"
+msgstr ""
+
+#: dialogs/rc.cpp:660
+msgid "Periodic Payment:"
+msgstr ""
+
+#: dialogs/rc.cpp:661
+msgid "Additional Fees:"
+msgstr ""
+
+#: dialogs/rc.cpp:662
+msgid "Interest category:"
+msgstr ""
+
+#: dialogs/rc.cpp:663
+msgid "Payment from:"
+msgstr ""
+
+#: dialogs/rc.cpp:666
+msgid "Next due date:"
+msgstr ""
+
+#: dialogs/rc.cpp:673
+msgid "Final Payment:"
+msgstr ""
+
+#: dialogs/rc.cpp:675
+msgid "Interest is due:"
+msgstr ""
+
+#: dialogs/rc.cpp:680
+msgid "Payment frequency:"
+msgstr ""
+
+#: dialogs/rc.cpp:682
+msgid "Online Quote Configuration"
+msgstr ""
+
+#: dialogs/rc.cpp:687
+msgid "Perl Location:"
+msgstr ""
+
+#: dialogs/rc.cpp:688
+msgid "Script:"
+msgstr ""
+
+#: dialogs/rc.cpp:690
+msgid "Reassign payees"
+msgstr ""
+
+#: dialogs/rc.cpp:691
+msgid ""
+"The transactions associated with the selected payees need to be re-assigned "
+"to a different payee before the selected payees can be deleted. Please "
+"select a payee from the list below."
+msgstr ""
+
+#: dialogs/rc.cpp:692
+msgid "Available payees:"
+msgstr ""
+
+#: dialogs/rc.cpp:693
+msgid "Assign deleted names to the above selected payee's matching list"
+msgstr ""
+
+#: dialogs/rc.cpp:696
+msgid "PluginDlg"
+msgstr ""
+
+#: dialogs/rc.cpp:697
+msgid "PlugIn"
+msgstr ""
+
+#: dialogs/rc.cpp:698 widgets/transaction.cpp:1071
+#: widgets/transaction.cpp:1658
+msgid "Status"
+msgstr ""
+
+#: dialogs/rc.cpp:699
+msgid "Feature"
+msgstr ""
+
+#: dialogs/rc.cpp:703
+msgid "Reconciliation Dialog"
+msgstr ""
+
+#: dialogs/rc.cpp:704
+msgid ""
+"This dialog will assist in helping you to balance your account.\n"
+"\n"
+"Click on an appropriate transaction within one of the two list views to mark "
+"it as reconciled. To create a transaction or edit\n"
+"a transaction you can return to the register by clicking on the Edit "
+"Transactions button.\n"
+"\n"
+"Your account is balanced when the Difference is Zero. Click on the Finish "
+"button to save the reconciled transactions."
+msgstr ""
+
+#: dialogs/rc.cpp:705
+msgid "Withdrawals"
+msgstr ""
+
+#: dialogs/rc.cpp:707 dialogs/rc.cpp:708 dialogs/rc.cpp:822
+msgid "$"
+msgstr ""
+
+#: dialogs/rc.cpp:710
+msgid "Previous Balance:"
+msgstr ""
+
+#: dialogs/rc.cpp:711 dialogs/rc.cpp:713 dialogs/rc.cpp:715 dialogs/rc.cpp:717
+#: dialogs/rc.cpp:820
+msgid "0"
+msgstr ""
+
+#: dialogs/rc.cpp:712
+msgid "Ending Balance:"
+msgstr ""
+
+#: dialogs/rc.cpp:714
+msgid "Cleared Balance:"
+msgstr ""
+
+#: dialogs/rc.cpp:716
+msgid "Difference:"
+msgstr ""
+
+#: dialogs/rc.cpp:718
+msgid "Edit Transactions..."
+msgstr ""
+
+#: dialogs/rc.cpp:721
+msgid "Security List Editor"
+msgstr ""
+
+#: dialogs/rc.cpp:726
+msgid "Market"
+msgstr ""
+
+#: dialogs/rc.cpp:729
+msgid "Cash Fraction"
+msgstr ""
+
+#: dialogs/rc.cpp:730
+msgid "Add..."
+msgstr ""
+
+#: dialogs/rc.cpp:732 widgets/kmymoneypriceview.cpp:157
+msgid "Delete..."
+msgstr ""
+
+#: dialogs/rc.cpp:733
+msgid "Show national currencies"
+msgstr ""
+
+#: dialogs/rc.cpp:735
+msgid "KMyMoney - Select Database"
+msgstr ""
+
+#: dialogs/rc.cpp:736
+msgid "CAUTION!"
+msgstr ""
+
+#: dialogs/rc.cpp:737
+msgid ""
+"<font color=\"#ff2727\">This software is still in an experimental stage, and "
+"there are still some known response time problems. Please be patient; we are "
+"working on them.\n"
+"As always, please make sure you have adequate backups of your data.</font>"
+msgstr ""
+
+#: dialogs/rc.cpp:738
+msgid "Database Type"
+msgstr ""
+
+#: dialogs/rc.cpp:739
+msgid "Database Name"
+msgstr ""
+
+#: dialogs/rc.cpp:740
+msgid "Host Name"
+msgstr ""
+
+#: dialogs/rc.cpp:741
+msgid "User Name"
+msgstr ""
+
+#: dialogs/rc.cpp:743
+msgid "Preload &all data"
+msgstr ""
+
+#: dialogs/rc.cpp:745
+msgid "&Generate SQL"
+msgstr ""
+
+#: dialogs/rc.cpp:747
+msgid "Ca&ncel"
+msgstr ""
+
+#: dialogs/rc.cpp:762 widgets/rc.cpp:172
+msgid "Sort options"
+msgstr ""
+
+#: dialogs/rc.cpp:763
+msgid "Use default"
+msgstr ""
+
+#: dialogs/rc.cpp:767
+msgid "Correct splits"
+msgstr ""
+
+#: dialogs/rc.cpp:769
+msgid "How do you want to proceed?"
+msgstr ""
+
+#: dialogs/rc.cpp:770
+msgid "Continue to edit splits"
+msgstr ""
+
+#: dialogs/rc.cpp:771
+#, c-format
+msgid "Change total amount of transaction to %1."
+msgstr ""
+
+#: dialogs/rc.cpp:772
+msgid "Distribute difference of %1 among all splits."
+msgstr ""
+
+#: dialogs/rc.cpp:773
+msgid "Leave %1 unassigned."
+msgstr ""
+
+#: dialogs/rc.cpp:776
+msgid "Split transaction"
+msgstr ""
+
+#: dialogs/rc.cpp:777
+msgid "<b>11,00<b>"
+msgstr ""
+
+#: dialogs/rc.cpp:778
+msgid "<b>111,00<b>"
+msgstr ""
+
+#: dialogs/rc.cpp:779
+msgid "Unassigned"
+msgstr ""
+
+#: dialogs/rc.cpp:780
+msgid "Sum of splits"
+msgstr ""
+
+#: dialogs/rc.cpp:781
+msgid "100,00"
+msgstr ""
+
+#: dialogs/rc.cpp:782
+msgid "Transaction amount"
+msgstr ""
+
+#: dialogs/rc.cpp:783
+msgid "Merge"
+msgstr ""
+
+#: dialogs/rc.cpp:784
+msgid "Merges splits with the same category to one split"
+msgstr ""
+
+#: dialogs/rc.cpp:785
+msgid ""
+"In case you have multiple split entries to the same category and you like to "
+"keep them as a single split, press this button. The amount for identical "
+"categories will be added and stored in a single split for that category."
+msgstr ""
+
+#: dialogs/rc.cpp:786
+msgid "Clear &Zero"
+msgstr ""
+
+#: dialogs/rc.cpp:787
+msgid "Removes all splits that have a value of zero."
+msgstr ""
+
+#: dialogs/rc.cpp:791
+msgid "New price entry"
+msgstr ""
+
+#: dialogs/rc.cpp:799
+msgid "Void mark"
+msgstr ""
+
+#: dialogs/rc.cpp:800
+msgid "Opening Balance text"
+msgstr ""
+
+#: dialogs/rc.cpp:801
+msgid "Type field text"
+msgstr ""
+
+#: dialogs/rc.cpp:802
+msgid "Account delimiter"
+msgstr ""
+
+#: dialogs/rc.cpp:804
+msgid "Attempt to match similar transactions"
+msgstr ""
+
+#: dialogs/rc.cpp:806 dialogs/rc.cpp:808
+msgid "The format of the dates in the QIF file."
+msgstr ""
+
+#: dialogs/rc.cpp:809 dialogs/rc.cpp:811
+msgid ""
+"If a QIF file contains date entries with years represented with two digits "
+"then either an apostrophe or a slash may be used to delimit the year in the "
+"dates for certain centuries. This enables 1905 to be distinguished from "
+"2005. Specify here which range of years will have year delimited by an "
+"apostrophe (eg. for Quicken this is usually 1900-1949)."
+msgstr ""
+
+#: dialogs/rc.cpp:810
+msgid "Apostrophe Handling"
+msgstr ""
+
+#: dialogs/rc.cpp:812
+msgid "Amounts"
+msgstr ""
+
+#: dialogs/rc.cpp:813
+msgid "Field"
+msgstr ""
+
+#: dialogs/rc.cpp:814
+msgid "QIF-Record"
+msgstr ""
+
+#: dialogs/rc.cpp:815 dialogs/rc.cpp:833
+msgid "Decimal Symbol"
+msgstr ""
+
+#: dialogs/rc.cpp:816
+msgid "Thousand Delimiter"
+msgstr ""
+
+#: dialogs/rc.cpp:817
+msgid "SortColumnInvisible"
+msgstr ""
+
+#: dialogs/rc.cpp:819
+msgid "T"
+msgstr ""
+
+#: dialogs/rc.cpp:821
+msgid "Split-Value"
+msgstr ""
+
+#: dialogs/rc.cpp:824
+msgid "Commission"
+msgstr ""
+
+#: dialogs/rc.cpp:825
+msgid "O"
+msgstr ""
+
+#: dialogs/rc.cpp:826
+msgid "2"
+msgstr ""
+
+#: dialogs/rc.cpp:828
+msgid "I"
+msgstr ""
+
+#: dialogs/rc.cpp:829
+msgid "3"
+msgstr ""
+
+#: dialogs/rc.cpp:831
+msgid "Q"
+msgstr ""
+
+#: dialogs/rc.cpp:832
+msgid "4"
+msgstr ""
+
+#: dialogs/rc.cpp:834
+msgid "Thousands Separator"
+msgstr ""
+
+#: dialogs/rc.cpp:836
+msgid "Output filter location"
+msgstr ""
+
+#: dialogs/rc.cpp:837
+msgid "Input filter file type"
+msgstr ""
+
+#: dialogs/rc.cpp:838
+msgid "*.qif"
+msgstr ""
+
+#: dialogs/rc.cpp:839
+msgid "Input filter location"
+msgstr ""
+
+#: dialogs/rc.cpp:843
+msgid "Rename"
+msgstr ""
+
+#: dialogs/kselecttransactionsdlg.cpp:44
+msgid "Select Transaction"
+msgstr ""
+
+#: dialogs/kselecttransactionsdlg.cpp:45
+msgid ""
+"Select a transaction and press the OK button or use Cancel to select none."
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:62
+msgid "Investment detail wizard"
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:82
+msgid "Security detail wizard"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:121 dialogs/knewinvestmentwizard.cpp:109
+msgid ""
+"_: default price mode\n"
+"<default>"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:122 dialogs/knewinvestmentwizard.cpp:110
+msgid "Price per share"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:123 dialogs/knewinvestmentwizard.cpp:111
+msgid "Total for all shares"
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:129
+msgid "This wizard allows you to modify the selected investment."
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:132
+msgid "This wizard allows you to modify the selected security."
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid ""
+"The selected symbol is already on file. Do you want to reuse the existing "
+"security?"
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid "Security found"
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:309
+msgid "Unable to create all objects for the investment"
+msgstr ""
+
+#: dialogs/keditequityentrydlg.cpp:78
+msgid "Change the price information of the selected entry."
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:64 widgets/kmymoneybriefschedule.cpp:59
+msgid "&Skip"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:66 widgets/kmymoneybriefschedule.cpp:61
+msgid "Skip this transaction"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:67
+msgid ""
+"Use this to skip importing this transaction and proceed with the next one."
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:72
+msgid "Create a new account/category"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:73
+msgid "Use this to add a new account/category to the file"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:77
+msgid "&Abort"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:79
+msgid "Abort the import operation and dismiss all changes"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:80
+msgid ""
+"Use this to abort the import. Your financial data will be in the state "
+"before you started the QIF import."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:110
+msgid "Is a sub account"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:184
+msgid "VAT account"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:474
+msgid ""
+"You have not specified a name.\n"
+"Please fill in this field."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:482
+msgid "Please select a parent account."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:489 dialogs/knewaccountdlg.cpp:1029
+msgid "<No Institution>"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:552
+msgid ""
+"An account named <b>%1</b> already exists. You cannot create a second "
+"account with the same name."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:567
+msgid ""
+"A category named <b>%1</b> already exists. You cannot create a second "
+"category with the same name."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid ""
+"You have selected to suppress the display of unused categories in the "
+"KMyMoney configuration dialog. The category you just created will therefore "
+"only be shown if it is used. Otherwise, it will be hidden in the "
+"accounts/categories view."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid "Hidden categories"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:927 dialogs/knewaccountdlg.cpp:979
+#, c-format
+msgid "Is a sub account of %1"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:1082
+msgid "Cannot add institution"
+msgstr ""
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid ""
+"This dialog does not allow to create new payees. Please pick a payee from "
+"the list."
+msgstr ""
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid "Payee creation"
+msgstr ""
+
+#: dialogs/kimportdlg.cpp:69
+msgid "Use this to start the import operation"
+msgstr ""
+
+#: dialogs/kimportdlg.cpp:110
+msgid ""
+"%1|Import files\n"
+"%2|All files (*.*)"
+msgstr ""
+
+#: dialogs/kimportdlg.cpp:111
+msgid "Import File..."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:124
+msgid "Create a new category"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:125
+msgid "Use this to open the new account editor"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:129
+msgid "&Additional fees..."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:131
+msgid "Enter additional fees"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:132
+msgid ""
+"Use this to add any additional fees other than principal and interest "
+"contained in your periodical payments."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:139
+msgid ""
+"Use this to create a new account to which the initial payment should be made"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:208
+msgid "To whom do you make payments?"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:209
+msgid "Payments to"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:214
+msgid "From whom do you expect payments?"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:215
+msgid "Payments from"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:233
+msgid "Please enter the date, the first payment for this loan was/is due."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:235
+msgid ""
+"Note: Consult the loan contract for details of the first due date. Keep in "
+"mind, that the first due date usually differs from the date the contract was "
+"signed"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:240
+msgid ""
+"Please enter the original loan amount in the field below or leave it empty "
+"to be calculated."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:248
+msgid ""
+"Please enter the date, the first payment for this loan was/is due this year."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:250
+msgid ""
+"Note: You can easily figure out the date of the first payment if you consult "
+"the last statement of last year."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:254
+msgid ""
+"Please enter the remaining loan amount of last years final statement in the "
+"field below. You should not leave this field empty."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:311 dialogs/knewloanwizard.cpp:326
+#: dialogs/knewloanwizard.cpp:341 dialogs/knewloanwizard.cpp:357
+#: dialogs/knewloanwizard.cpp:373
+msgid "calculate"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:417
+msgid "borrowed"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:419
+msgid "lend"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:423
+msgid "not assigned"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:430
+msgid "on reception"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:432
+msgid "on due date"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:471
+msgid ""
+"The loan wizard is unable to calculate two different values for your loan at "
+"the same time. Please enter a value for the %1 on this page or backup to the "
+"page where the current value to be calculated is defined and fill in a "
+"value."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:500
+msgid ""
+"You selected, that payments have already been made towards this loan. This "
+"requires you to enter the loan amount exactly as found on your last "
+"statement."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:513
+msgid "interest rate"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:522
+msgid "term"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:532
+msgid "principal and interest"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:743
+#, c-format
+msgid ""
+"The number of payments has been decremented and the final payment has been "
+"modified to %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:751 dialogs/knewloanwizard.cpp:771
+#, c-format
+msgid "The final payment has been modified to %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:802
+msgid "KMyMoney has calculated a final payment of %1 for this loan."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:817
+msgid ""
+"You have entered mis-matching information. Please backup to the appropriate "
+"page and update your figures or leave one value empty to let KMyMoney "
+"calculate it for you"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:230
+msgid ""
+"Warning: Filtering by Category will exclude all transfers from the results."
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:239
+msgid "(None)"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:241
+msgid "Current selections: "
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:716
+msgid "Found %1 matching transactions (D %2 / P %3 = %4)"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:719
+msgid "Found %1 matching transactions"
+msgstr ""
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "The institution name field is empty. Please enter the name."
+msgstr ""
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "Adding New Institution"
+msgstr ""
+
+#: dialogs/kcsvprogressdlg.cpp:69
+msgid "C&lose"
+msgstr ""
+
+#: dialogs/kcsvprogressdlg.cpp:247
+msgid " of "
+msgstr ""
+
+#: widgets/kmymoneypriceview.cpp:126
+msgid "Commodity"
+msgstr ""
+
+#: widgets/kmymoneypriceview.cpp:130
+msgid "Source"
+msgstr ""
+
+#: widgets/kmymoneypriceview.cpp:143
+msgid "Price Options"
+msgstr ""
+
+#: widgets/kmymoneypriceview.cpp:153
+msgid "Online Price Update..."
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:472 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+msgid "From"
+msgstr ""
+
+#: widgets/transaction.cpp:668
+msgid "Transaction is missing a category assignment."
+msgstr ""
+
+#: widgets/transaction.cpp:671
+msgid "The transaction has a missing assignment of <b>%1</b>."
+msgstr ""
+
+#: widgets/transaction.cpp:874
+msgid "Sell"
+msgstr ""
+
+#: widgets/transaction.cpp:876
+msgid "Buy"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:520 widgets/transaction.cpp:879
+#: widgets/transaction.cpp:1447
+msgid "Dividend"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:518 widgets/transaction.cpp:881
+#: widgets/transaction.cpp:1453
+msgid "Yield"
+msgstr ""
+
+#: widgets/transaction.cpp:886 widgets/transaction.cpp:1473
+msgid "Activity"
+msgstr ""
+
+#: widgets/transaction.cpp:887
+msgid "Investment transaction"
+msgstr ""
+
+#: widgets/transaction.cpp:1021 widgets/transaction.cpp:1114
+#: widgets/transaction.cpp:1165
+msgid "*** UNASSIGNED ***"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:517 widgets/transaction.cpp:1435
+msgid "Add shares"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:516 widgets/transaction.cpp:1438
+msgid "Remove shares"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:522 widgets/transaction.cpp:1441
+msgid "Buy shares"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:521 widgets/transaction.cpp:1444
+msgid "Sell shares"
+msgstr ""
+
+#: widgets/transaction.cpp:1450
+msgid "Reinvest Dividend"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:515 widgets/transaction.cpp:1456
+msgid "Split shares"
+msgstr ""
+
+#: widgets/transaction.cpp:1515
+msgid "Ratio"
+msgstr ""
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:241
+msgid "%1 Bills."
+msgstr ""
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:257
+msgid "%1 Deposits."
+msgstr ""
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:273
+msgid "%1 Transfers."
+msgstr ""
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:355
+msgid ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-th"
+"-th-th-th-th-st"
+msgstr ""
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:57
+#: widgets/kmymoneyaccounttreeforecast.cpp:84
+msgid "Current"
+msgstr ""
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:72
+#: widgets/kmymoneyaccounttreeforecast.cpp:93
+msgid "Total variation"
+msgstr ""
+
+#: widgets/stdtransactionmatched.cpp:130
+msgid ""
+"KMyMoney has matched a downloaded transaction with a manually entered one "
+"(result above)"
+msgstr ""
+
+#: widgets/stdtransactionmatched.cpp:138
+msgid "Bank entry:"
+msgstr ""
+
+#: widgets/stdtransactionmatched.cpp:166
+msgid "Your entry:"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:187
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a monthly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:187 widgets/kbudgetvalues.cpp:206
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"_: Auto assignment (caption)\n"
+"Auto assignment"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:206
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a yearly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"You have entered budget values using a different base which would result in "
+"an individual monthly budget of <b>%1</b>. Should this value be used to fill "
+"the monthly budgets?"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:62
+msgid "Use this button to skip this transaction"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:67
+msgid "Record this transaction into the register"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:68
+msgid "Use this button to record this transaction"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:96
+msgid "%1 of %2"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:109
+msgid "Payment on %1 for %2 with %3 transactions remaining occuring %4."
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:115
+msgid "Payment on %1 for %2 occuring %4."
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:136
+msgid "%1 days overdue (%2 occurences)."
+msgstr ""
+
+#: widgets/register.cpp:55
+msgid "Post date"
+msgstr ""
+
+#: widgets/register.cpp:56
+msgid "Date entered"
+msgstr ""
+
+#: widgets/register.cpp:60
+msgid "Entry order"
+msgstr ""
+
+#: widgets/register.cpp:63
+msgid "Reconcile state"
+msgstr ""
+
+#: widgets/register.cpp:440
+msgid ""
+"_: Deposits onto account\n"
+"Deposits"
+msgstr ""
+
+#: widgets/register.cpp:442
+msgid ""
+"_: Payments towards credit card\n"
+"Payments"
+msgstr ""
+
+#: widgets/register.cpp:446
+msgid ""
+"_: Payments made from account\n"
+"Payments"
+msgstr ""
+
+#: widgets/register.cpp:448
+msgid ""
+"_: Payments made with credit card\n"
+"Charges"
+msgstr ""
+
+#: widgets/register.cpp:736
+msgid ""
+"_: Payment made from account\n"
+"Payment"
+msgstr ""
+
+#: widgets/register.cpp:737
+msgid ""
+"_: Deposit into account\n"
+"Deposit"
+msgstr ""
+
+#: widgets/register.cpp:813
+msgid ""
+"_: Payment made with credit card\n"
+"Charge"
+msgstr ""
+
+#: widgets/register.cpp:814
+msgid ""
+"_: Payment towards credit card\n"
+"Payment"
+msgstr ""
+
+#: widgets/register.cpp:818 widgets/register.cpp:824
+msgid ""
+"_: Decrease of asset/liability value\n"
+"Decrease"
+msgstr ""
+
+#: widgets/register.cpp:819 widgets/register.cpp:823
+msgid ""
+"_: Increase of asset/liability value\n"
+"Increase"
+msgstr ""
+
+#: widgets/register.cpp:2280
+msgid "Prior transactions possibly filtered"
+msgstr ""
+
+#: widgets/register.cpp:2284
+msgid "Last reconciliation"
+msgstr ""
+
+#: widgets/register.cpp:2291
+#, c-format
+msgid "Online Statement Balance: %1"
+msgstr ""
+
+#: widgets/register.cpp:2295
+msgid "This year"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:674 widgets/register.cpp:2296
+msgid "Last month"
+msgstr ""
+
+#: widgets/register.cpp:2297
+msgid "This month"
+msgstr ""
+
+#: widgets/register.cpp:2298
+msgid "Last week"
+msgstr ""
+
+#: widgets/register.cpp:2299
+msgid "This week"
+msgstr ""
+
+#: widgets/register.cpp:2300
+msgid "Yesterday"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:666 widgets/register.cpp:2301
+msgid "Today"
+msgstr ""
+
+#: widgets/register.cpp:2302 widgets/register.cpp:2307
+msgid "Future transactions"
+msgstr ""
+
+#: widgets/register.cpp:2303
+msgid "Next week"
+msgstr ""
+
+#: widgets/kmymoneycalendar.cpp:131 widgets/register.cpp:2304
+msgid "Next month"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:670 widgets/register.cpp:2315
+msgid "Current fiscal year"
+msgstr ""
+
+#: widgets/register.cpp:2316
+msgid "Previous fiscal year"
+msgstr ""
+
+#: widgets/register.cpp:2317
+msgid "Next fiscal year"
+msgstr ""
+
+#: widgets/register.cpp:2349
+msgid ""
+"_: Unknown payee\n"
+"Unknown"
+msgstr ""
+
+#: widgets/register.cpp:2368
+msgid ""
+"_: Unknown category\n"
+"Unknown"
+msgstr ""
+
+#: widgets/register.cpp:2387
+msgid ""
+"_: Unknown security\n"
+"Unknown"
+msgstr ""
+
+#: widgets/klistviewsearchline.cpp:249
+msgid "Search Columns"
+msgstr ""
+
+#: widgets/klistviewsearchline.cpp:251
+msgid "All Visible Columns"
+msgstr ""
+
+#: widgets/klistviewsearchline.cpp:266
+msgid ""
+"_: Column number %1\n"
+"Column No. %1"
+msgstr ""
+
+#: widgets/klistviewsearchline.cpp:461 widgets/registersearchline.cpp:286
+msgid "S&earch:"
+msgstr ""
+
+#: widgets/kmymoneyaccountselector.cpp:110
+#: widgets/kmymoneyaccountselector.cpp:371
+msgid "Income categories"
+msgstr ""
+
+#: widgets/kmymoneyaccountselector.cpp:349
+#: widgets/kmymoneyaccountselector.cpp:350
+msgid "Favorites"
+msgstr ""
+
+#: widgets/kmymoneyaccountselector.cpp:357
+msgid "Asset accounts"
+msgstr ""
+
+#: widgets/kmymoneyaccountselector.cpp:364
+msgid "Liability accounts"
+msgstr ""
+
+#: widgets/kmymoneyaccountselector.cpp:381
+msgid "Expense categories"
+msgstr ""
+
+#: widgets/kmymoneyaccountselector.cpp:391
+msgid "Equity accounts"
+msgstr ""
+
+#: widgets/kmymoneyaccounttreebase.cpp:120
+msgid "Total Balance"
+msgstr ""
+
+#: widgets/kmymoneyaccounttreebase.cpp:124
+msgid "Total Value"
+msgstr ""
+
+#: widgets/registersearchline.cpp:75
+msgid ""
+"_: label for status combo\n"
+"Stat&us"
+msgstr ""
+
+#: widgets/registersearchline.cpp:79
+msgid "Any status"
+msgstr ""
+
+#: widgets/registersearchline.cpp:80
+msgid "Imported"
+msgstr ""
+
+#: widgets/registersearchline.cpp:81
+msgid "Matched"
+msgstr ""
+
+#: widgets/registersearchline.cpp:82
+msgid "Erroneous"
+msgstr ""
+
+#: widgets/registersearchline.cpp:83
+msgid "Not marked"
+msgstr ""
+
+#: widgets/kmymoneyaccounttree.cpp:54
+msgid ""
+"_: Column heading for category in tax report\n"
+"Tax"
+msgstr ""
+
+#: widgets/kmymoneyaccounttree.cpp:58
+msgid ""
+"_: Column heading for VAT category\n"
+"VAT"
+msgstr ""
+
+#: widgets/kmymoneywizard.cpp:101
+msgid "Continue with next page"
+msgstr ""
+
+#: widgets/kmymoneywizard.cpp:103
+msgid "Finish wizard"
+msgstr ""
+
+#: widgets/kmymoneywizard.cpp:121
+msgid "&Back"
+msgstr ""
+
+#: widgets/kmymoneywizard.cpp:122
+msgid "&Next"
+msgstr ""
+
+#: widgets/kmymoneywizard.cpp:123
+msgid "&Finish"
+msgstr ""
+
+#: widgets/kmymoneywizard.cpp:274
+msgid "Step %1 of %2"
+msgstr ""
+
+#: widgets/kmymoneydateinput.cpp:235
+msgid ""
+"_: Enter todays date into date input widget\n"
+"T"
+msgstr ""
+
+#: widgets/transactionform.cpp:302
+msgid "&Deposit"
+msgstr ""
+
+#: widgets/transactionform.cpp:304 widgets/transactionform.cpp:313
+#: widgets/transactionform.cpp:323 widgets/transactionform.cpp:333
+msgid "&Transfer"
+msgstr ""
+
+#: widgets/transactionform.cpp:306
+msgid "&Withdrawal"
+msgstr ""
+
+#: widgets/transactionform.cpp:311
+msgid "&Payment"
+msgstr ""
+
+#: widgets/transactionform.cpp:315
+msgid "&Charge"
+msgstr ""
+
+#: widgets/transactionform.cpp:321 widgets/transactionform.cpp:335
+msgid "&Decrease"
+msgstr ""
+
+#: widgets/transactionform.cpp:325 widgets/transactionform.cpp:331
+msgid "&Increase"
+msgstr ""
+
+#: widgets/kmymoneyscheduledcalendar.cpp:42
+msgid "Select Schedules"
+msgstr ""
+
+#: widgets/kmymoneycalendar.cpp:108
+msgid "Select Style"
+msgstr ""
+
+#: widgets/kmymoneycalendar.cpp:128
+msgid "Choose Style"
+msgstr ""
+
+#: widgets/kmymoneycalendar.cpp:129
+msgid "Next year"
+msgstr ""
+
+#: widgets/kmymoneycalendar.cpp:130
+msgid "Previous year"
+msgstr ""
+
+#: widgets/kmymoneycalendar.cpp:132
+msgid "Previous month"
+msgstr ""
+
+#: widgets/kmymoneycalendar.cpp:133
+msgid "Select a week"
+msgstr ""
+
+#: widgets/kmymoneycalendar.cpp:134
+msgid "Select a month"
+msgstr ""
+
+#: widgets/kmymoneycalendar.cpp:135
+msgid "Select a year"
+msgstr ""
+
+#: widgets/kmymoneycalendar.cpp:249
+msgid "Week XX"
+msgstr ""
+
+#: widgets/kmymoneycalendar.cpp:264 widgets/kmymoneycalendar.cpp:300
+#, c-format
+msgid "Week %1"
+msgstr ""
+
+#: widgets/rc.cpp:1
+msgid "Account Types"
+msgstr ""
+
+#: widgets/rc.cpp:3
+msgid "Detailed description"
+msgstr ""
+
+#: widgets/rc.cpp:18
+msgid "Period"
+msgstr ""
+
+#: widgets/rc.cpp:21
+msgid "Individual"
+msgstr ""
+
+#: widgets/rc.cpp:23
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Acces to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>Recovery encryption</i> group is only accessible, if the necessary "
+"key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is "
+"found."
+msgstr ""
+
+#: widgets/rc.cpp:26
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading <i>0x</i>."
+msgstr ""
+
+#: widgets/rc.cpp:27
+msgid "User ID"
+msgstr ""
+
+#: widgets/rc.cpp:29
+msgid "Recovery encryption"
+msgstr ""
+
+#: widgets/rc.cpp:30
+msgid "Also encrypt with kmymoney-recover key"
+msgstr ""
+
+#: widgets/rc.cpp:32
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out."
+msgstr ""
+
+#: widgets/rc.cpp:51
+msgid "PriceInfo"
+msgstr ""
+
+#: widgets/rc.cpp:52
+msgid "Report Tab"
+msgstr ""
+
+#: widgets/rc.cpp:53
+msgid "<p>On this tab, you set the basic properties of this report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:54
+msgid "Report Name"
+msgstr ""
+
+#: widgets/rc.cpp:55
+msgid "<p>Choose a name for this report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:57
+msgid "<p>Enter a comment to help you remember the details of this report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:58
+msgid "Convert values to base currency"
+msgstr ""
+
+#: widgets/rc.cpp:59
+msgid ""
+"_: Convert 'em!!\n"
+"<p>Select this option to convert all values in the report to your base "
+"currency.</p><p>Leave it unchecked if you'd like to see values in their "
+"original currency.</p><p>If currencies are not converted, then subtotals "
+"will not be shown.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:60
+msgid "Mark as a favorite report"
+msgstr ""
+
+#: widgets/rc.cpp:61
+msgid ""
+"<p>Select this option to notate this report as one of your "
+"favorites.</p><p>All your favorite reports are grouped in one place on the "
+"report list for easy access.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:62 widgets/rc.cpp:88
+msgid "Rows/Columns Tab"
+msgstr ""
+
+#: widgets/rc.cpp:63 widgets/rc.cpp:89
+msgid ""
+"<p>On this tab, you configure how you'd like the rows and columns to be "
+"selected and organized.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:69 widgets/rc.cpp:81
+msgid ""
+"<p>Choose what kind of accounts to display as the rows of this report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:71
+msgid "Columns"
+msgstr ""
+
+#: widgets/rc.cpp:75
+msgid "Bi-Monthly"
+msgstr ""
+
+#: widgets/rc.cpp:78
+msgid "<p>Choose how large of a time period each column should encompass</p>"
+msgstr ""
+
+#: widgets/rc.cpp:79
+msgid "Income & Expenses"
+msgstr ""
+
+#: widgets/rc.cpp:80
+msgid "Assets & Liabilities"
+msgstr ""
+
+#: widgets/rc.cpp:82
+msgid "Rows"
+msgstr ""
+
+#: widgets/rc.cpp:83
+msgid "Show totals column"
+msgstr ""
+
+#: widgets/rc.cpp:84
+msgid "Average days"
+msgstr ""
+
+#: widgets/rc.cpp:85
+msgid "Include scheduled transactions"
+msgstr ""
+
+#: widgets/rc.cpp:86
+msgid "Include transfers"
+msgstr ""
+
+#: widgets/rc.cpp:87
+msgid "Include unused accounts/categories"
+msgstr ""
+
+#: widgets/rc.cpp:90
+msgid "Organize by:"
+msgstr ""
+
+#: widgets/rc.cpp:92
+msgid "Top Categories"
+msgstr ""
+
+#: widgets/rc.cpp:95
+msgid "Top Accounts"
+msgstr ""
+
+#: widgets/rc.cpp:98
+msgid "<p>Choose how to group the transactions in this report</p>"
+msgstr ""
+
+#: widgets/rc.cpp:99
+msgid "Show Columns"
+msgstr ""
+
+#: widgets/rc.cpp:100
+msgid ""
+"<p>Choose which columns should be shown in the report.</p><p>The date and "
+"transaction amount are always shown.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:102
+msgid "<p>Select this option to show the Memo column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:104
+msgid "<p>Select this option to show the Shares column for investments</p>"
+msgstr ""
+
+#: widgets/rc.cpp:106
+msgid "<p>Select this option to show the Price column for investments</p>"
+msgstr ""
+
+#: widgets/rc.cpp:108
+msgid "<p>Select this option to show the Reconciled column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:110
+msgid "<p>Select this option to show the Account column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:112
+msgid "<p>Select this option to show the Number column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:114
+msgid "<p>Select this option to show the Payee column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:116
+msgid "<p>Select this option to show the Category column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:118
+msgid "<p>Select this option to show the Action column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:120
+msgid "<p>Select this option to show the Running balance column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:121
+msgid "Include only Loan accounts"
+msgstr ""
+
+#: widgets/rc.cpp:122
+msgid "Include only Investment accounts"
+msgstr ""
+
+#: widgets/rc.cpp:123 widgets/rc.cpp:127
+msgid ""
+"<p>Check this box to include only those categories which have been marked to "
+"\"Include on Tax Reports\"</p>"
+msgstr ""
+
+#: widgets/rc.cpp:124
+msgid "Hide Split Transaction Details"
+msgstr ""
+
+#: widgets/rc.cpp:125
+msgid ""
+"Do not display the individual transactions that make up a split transaction"
+msgstr ""
+
+#: widgets/rc.cpp:126
+msgid "Include only Tax categories"
+msgstr ""
+
+#: widgets/rc.cpp:128
+msgid "Chart Tab"
+msgstr ""
+
+#: widgets/rc.cpp:129
+msgid "<p>On this tab, you configure the chart drawn forthis report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:130
+msgid "Chart Type"
+msgstr ""
+
+#: widgets/rc.cpp:131
+msgid "<p>Select what form you would like the chart to be drawn as.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:132
+msgid "Line"
+msgstr ""
+
+#: widgets/rc.cpp:133
+msgid "Bar"
+msgstr ""
+
+#: widgets/rc.cpp:134
+msgid "Stacked Bar"
+msgstr ""
+
+#: widgets/rc.cpp:135
+msgid "Pie"
+msgstr ""
+
+#: widgets/rc.cpp:136
+msgid "Ring"
+msgstr ""
+
+#: widgets/rc.cpp:137
+msgid "Show grid lines"
+msgstr ""
+
+#: widgets/rc.cpp:138
+msgid ""
+"<p>Select this option to show horizontal and vertical grid lines on the "
+"chart.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:139
+msgid "Draw values on chart"
+msgstr ""
+
+#: widgets/rc.cpp:140
+msgid ""
+"<p>Select this option to draw the numeric values for data points next to "
+"their plot location.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:141
+msgid "Show as chart by default"
+msgstr ""
+
+#: widgets/rc.cpp:142
+msgid ""
+"<p>Select this option to cause the report to be shown as a chart when you "
+"first open the report. Otherwise, it will come up as a text report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:143
+msgid "Line width"
+msgstr ""
+
+#: widgets/rc.cpp:144
+msgid "<p>Select what width should be used to draw the line on the chart</p>"
+msgstr ""
+
+#: widgets/rc.cpp:145
+msgid "ReportControl"
+msgstr ""
+
+#: widgets/rc.cpp:149
+msgid "Configure this report"
+msgstr ""
+
+#: widgets/rc.cpp:151
+msgid "Create a new report based on this one"
+msgstr ""
+
+#: widgets/rc.cpp:153
+msgid "Copy this report to the clipboard"
+msgstr ""
+
+#: widgets/rc.cpp:155
+msgid "Export this report as an HTML or CSV file"
+msgstr ""
+
+#: widgets/rc.cpp:157
+msgid "Permanently delete this report"
+msgstr ""
+
+#: widgets/rc.cpp:159
+msgid "Close this window"
+msgstr ""
+
+#: widgets/rc.cpp:162
+msgid "n of n"
+msgstr ""
+
+#: widgets/rc.cpp:166
+msgid "Account:"
+msgstr ""
+
+#: widgets/rc.cpp:168
+msgid "Enter..."
+msgstr ""
+
+#: widgets/rc.cpp:171
+msgid "TransactionSortOptionDecl"
+msgstr ""
+
+#: widgets/rc.cpp:173
+msgid "Sort order"
+msgstr ""
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Sunday\n"
+"Sun"
+msgstr ""
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Saturday\n"
+"Sat"
+msgstr ""
+
+#: widgets/kmymoneydatetbl.cpp:171 widgets/kmymoneydatetbl.cpp:178
+msgid "Week %1 for year %2."
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:417
+msgid "ATM"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:418
+msgid "Withdrawal"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:421
+msgid "Cheque"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:469
+msgid ""
+"_: Activity for expense categories\n"
+"Paid"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:470
+msgid ""
+"_: Activity for income categories\n"
+"Received"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:519
+msgid "Reinvest dividend"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:664
+msgid "All dates"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:665
+msgid "As of today"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:667
+msgid "Current month"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:668
+msgid "Current quarter"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:669
+msgid "Current year"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:671
+msgid "Month to date"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:672
+msgid "Year to date"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:673
+msgid "Year to month"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:675
+msgid "Last year"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:676
+msgid "Last fiscal year"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:677
+msgid "Last 7 days"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:678
+msgid "Last 30 days"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:679
+msgid "Last 3 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:680
+msgid "Last quarter"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:681
+msgid "Last 6 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:682
+msgid "Last 11 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:683
+msgid "Last 12 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:684
+msgid "Next 7 days"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:685
+msgid "Next 30 days"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:686
+msgid "Next 3 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:687
+msgid "Next quarter"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:688
+msgid "Next 6 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:689
+msgid "Next 12 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:690
+msgid "Last 3 months to next 3 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:691
+msgid "User defined"
+msgstr ""
diff --git a/po/lt.po b/po/lt.po
new file mode 100644
index 0000000..8cc9d20
--- /dev/null
+++ b/po/lt.po
@@ -0,0 +1,13601 @@
+# translation of kmymoney2.po to Lithuanian
+# This file is put in the public domain.
+#
+# Donatas Glodenis <dgvirtual@akl.lt>, 2005, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmymoney2\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-25 19:04+0200\n"
+"PO-Revision-Date: 2006-02-03 08:43+0200\n"
+"Last-Translator: Donatas Glodenis <dgvirtual@akl.lt>\n"
+"Language-Team: Lithuanian <kde-i18n-lt@kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.1\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%"
+"100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: wizards/wizardpages/rc.cpp:1
+msgid ""
+"Select groups of accounts that correspond to the ways that you will use "
+"KMyMoney. Each group you select will cause several accounts and categories "
+"to be created. Select the groups that are relevant to you. You can always "
+"create additional accounts manually later."
+msgstr ""
+
+#: wizards/wizardpages/rc.cpp:2
+msgid ""
+"<p>KMyMoney supports multiple currencies, nevertheless one of them will be "
+"used as your base currency. The base currency is used as default for new "
+"accounts and reports. Please select the base currency from the following "
+"list."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:71 dialogs/rc.cpp:399 dialogs/rc.cpp:485
+#: dialogs/rc.cpp:724 dialogs/settings/rc.cpp:108 reports/listtable.cpp:226
+#: views/kinvestmentview.cpp:71 views/kpayeesview.cpp:351 views/rc.cpp:13
+#: widgets/rc.cpp:5 widgets/rc.cpp:34
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1599
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1629
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1673
+#: wizards/wizardpages/rc.cpp:3
+msgid "Name"
+msgstr "Vardas"
+
+#: wizards/wizardpages/rc.cpp:4
+msgid "ISO Code"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:69 dialogs/kequitypriceupdatedlg.cpp:70
+#: dialogs/rc.cpp:71 dialogs/rc.cpp:725 dialogs/settings/rc.cpp:112
+#: views/kinvestmentview.cpp:72 widgets/rc.cpp:37 wizards/wizardpages/rc.cpp:5
+msgid "Symbol"
+msgstr "Simbolis"
+
+#: wizards/wizardpages/rc.cpp:6
+msgid ""
+"<p>Use the fields below to enter some information about yourself.</p>\n"
+"\n"
+"<p>All information is optional and only used to personalize your KMyMoney "
+"file.</p>"
+msgstr ""
+
+#: dialogs/rc.cpp:425 wizards/newuserwizard/rc.cpp:27
+#: wizards/wizardpages/rc.cpp:7
+msgid "Town:"
+msgstr ""
+
+#: dialogs/rc.cpp:420 wizards/newuserwizard/rc.cpp:22
+#: wizards/wizardpages/rc.cpp:8
+msgid "County/State:"
+msgstr ""
+
+#: dialogs/rc.cpp:391 dialogs/rc.cpp:421 wizards/newuserwizard/rc.cpp:23
+#: wizards/wizardpages/rc.cpp:9
+msgid "Street:"
+msgstr "Gatvė:"
+
+#: dialogs/rc.cpp:422 wizards/newuserwizard/rc.cpp:24
+#: wizards/wizardpages/rc.cpp:10
+msgid "Email:"
+msgstr "E. paštas:"
+
+#: dialogs/rc.cpp:424 wizards/newuserwizard/rc.cpp:26
+#: wizards/wizardpages/rc.cpp:11
+msgid "Telephone:"
+msgstr "Telefonas:"
+
+#: dialogs/rc.cpp:423 wizards/newuserwizard/rc.cpp:25
+#: wizards/wizardpages/rc.cpp:12
+msgid "Your name:"
+msgstr ""
+
+#: dialogs/rc.cpp:427 wizards/newuserwizard/rc.cpp:29
+#: wizards/wizardpages/rc.cpp:13
+msgid "Load from Addressbook"
+msgstr ""
+
+#: dialogs/rc.cpp:392 dialogs/rc.cpp:426 views/rc.cpp:68
+#: wizards/wizardpages/rc.cpp:14
+msgid "Postal Code:"
+msgstr "Pašto kodas:"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:82
+msgid "KMyMoney New Account Setup"
+msgstr ""
+
+#: dialogs/rc.cpp:360 dialogs/rc.cpp:361 reports/listtable.cpp:230
+#: wizards/newaccountwizard/knewaccountwizard.cpp:83
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1616
+#: wizards/newaccountwizard/rc.cpp:61
+msgid "Institution"
+msgstr "Institucija"
+
+#: dialogs/investactivities.cpp:198 dialogs/investactivities.cpp:286
+#: dialogs/investactivities.cpp:367 dialogs/kfindtransactiondlg.cpp:181
+#: dialogs/rc.cpp:139 dialogs/rc.cpp:192 dialogs/rc.cpp:207
+#: dialogs/transactioneditor.cpp:734 reports/listtable.cpp:201
+#: reports/pivottable.cpp:1336 reports/pivottable.cpp:1586
+#: views/kforecastview.cpp:393 views/kgloballedgerview.cpp:175
+#: views/khomeview.cpp:418 views/khomeview.cpp:491 views/khomeview.cpp:525
+#: views/khomeview.cpp:764 views/khomeview.cpp:967 views/khomeview.cpp:1437
+#: views/kscheduledview.cpp:71 views/rc.cpp:17 views/rc.cpp:44
+#: widgets/kmymoneyaccounttreebase.cpp:58
+#: widgets/kmymoneyaccounttreeforecast.cpp:41 widgets/rc.cpp:109
+#: widgets/register.cpp:566 widgets/transaction.cpp:978
+#: widgets/transaction.cpp:1535
+#: wizards/newaccountwizard/knewaccountwizard.cpp:84
+msgid "Account"
+msgstr "Sąskaita"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:85
+#, fuzzy
+msgid "Broker"
+msgstr "&Naršyti"
+
+#: dialogs/kfindtransactiondlg.cpp:225 dialogs/rc.cpp:70 dialogs/rc.cpp:104
+#: dialogs/rc.cpp:159 dialogs/rc.cpp:223 dialogs/rc.cpp:246 dialogs/rc.cpp:751
+#: dialogs/settings/rc.cpp:109 widgets/rc.cpp:35 widgets/register.cpp:568
+#: wizards/newaccountwizard/knewaccountwizard.cpp:86
+msgid "Details"
+msgstr "Detalės"
+
+#: dialogs/knewloanwizard.cpp:636 dialogs/rc.cpp:231 dialogs/rc.cpp:608
+#: kmymoneyutils.cpp:191 views/khomeview.cpp:399
+#: wizards/newaccountwizard/knewaccountwizard.cpp:87
+#: wizards/newaccountwizard/knewaccountwizard.cpp:880
+msgid "Payments"
+msgstr "Mokėjimai"
+
+#: dialogs/investactivities.cpp:195 dialogs/investactivities.cpp:283
+#: dialogs/investactivities.cpp:422 dialogs/investtransactioneditor.cpp:217
+#: reports/listtable.cpp:221 widgets/transaction.cpp:1565
+#: wizards/newaccountwizard/knewaccountwizard.cpp:88
+msgid "Fees"
+msgstr ""
+
+#: dialogs/rc.cpp:624 views/khomeview.cpp:415 views/khomeview.cpp:488
+#: views/khomeview.cpp:522 wizards/newaccountwizard/knewaccountwizard.cpp:89
+msgid "Schedule"
+msgstr "Tvarkaraštis"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:90
+#, fuzzy
+msgid "Payout"
+msgstr "Kam mokėti"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:91
+#, fuzzy
+msgid "Parent Account"
+msgstr "Mokėjimų sąskaitos"
+
+#: dialogs/rc.cpp:719 wizards/newaccountwizard/knewaccountwizard.cpp:92
+#: wizards/newuserwizard/knewuserwizard.cpp:86
+#, fuzzy
+msgid "Finish"
+msgstr "&Baigti"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:248
+#, fuzzy
+msgid "Credit card payment"
+msgstr "Kreditinė kortelė"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:264
+#, fuzzy, c-format
+msgid "Loan payment for %1"
+msgstr "Viso mokėti:"
+
+#: mymoney/mymoneyscheduled.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:279
+msgid "Loan payment"
+msgstr ""
+
+#: dialogs/rc.cpp:134 wizards/newaccountwizard/knewaccountwizard.cpp:293
+msgid "Amortization"
+msgstr "Amortizacija"
+
+#: dialogs/investactivities.cpp:196 dialogs/investactivities.cpp:284
+#: dialogs/investactivities.cpp:366 dialogs/investactivities.cpp:423
+#: dialogs/investtransactioneditor.cpp:227 dialogs/rc.cpp:135
+#: dialogs/rc.cpp:152 dialogs/rc.cpp:544 reports/listtable.cpp:222
+#: widgets/transaction.cpp:1597
+#: wizards/newaccountwizard/knewaccountwizard.cpp:302
+msgid "Interest"
+msgstr "Palūkanos"
+
+#: dialogs/kcurrencycalculator.cpp:282
+#: wizards/newaccountwizard/knewaccountwizard.cpp:351
+#: wizards/newaccountwizard/knewaccountwizard.cpp:356
+msgid "User"
+msgstr "Naudotojas"
+
+#: kmymoneyutils.cpp:64 mymoney/mymoneyaccount.cpp:711
+#: reports/querytabletest.cpp:422
+#: wizards/newaccountwizard/knewaccountwizard.cpp:451
+msgid "Checking"
+msgstr "Einamoji"
+
+#: kmymoneyutils.cpp:66 mymoney/mymoneyaccount.cpp:714
+#: wizards/newaccountwizard/knewaccountwizard.cpp:452
+msgid "Savings"
+msgstr "Santaupos"
+
+#: kmymoneyutils.cpp:68 mymoney/mymoneyaccount.cpp:717
+#: reports/querytabletest.cpp:423
+#: wizards/newaccountwizard/knewaccountwizard.cpp:453
+msgid "Credit Card"
+msgstr "Kreditinė kortelė"
+
+#: kmymoneyutils.cpp:70 mymoney/mymoneyaccount.cpp:720
+#: wizards/newaccountwizard/knewaccountwizard.cpp:454
+msgid "Cash"
+msgstr "Grynieji"
+
+#: kmymoneyutils.cpp:72 mymoney/mymoneyaccount.cpp:723
+#: wizards/newaccountwizard/knewaccountwizard.cpp:455
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+msgid "Loan"
+msgstr "Paskola"
+
+#: kmymoneyutils.cpp:76 mymoney/mymoneyaccount.cpp:729
+#: wizards/newaccountwizard/knewaccountwizard.cpp:456
+msgid "Investment"
+msgstr "Investicija"
+
+#: converter/mymoneytemplate.cpp:178 converter/mymoneytemplate.cpp:179
+#: dialogs/knewaccountdlg.cpp:1014 kmymoneyutils.cpp:80
+#: mymoney/mymoneyaccount.cpp:735 views/kaccountsview.cpp:352
+#: views/kmymoneyview.cpp:765 widgets/kmymoneyaccountselector.cpp:177
+#: widgets/kmymoneyaccountselector.cpp:356
+#: wizards/newaccountwizard/knewaccountwizard.cpp:457
+msgid "Asset"
+msgstr "Turtas"
+
+#: converter/mymoneytemplate.cpp:182 converter/mymoneytemplate.cpp:183
+#: dialogs/knewaccountdlg.cpp:1016 kmymoneyutils.cpp:82
+#: mymoney/mymoneyaccount.cpp:738 views/kaccountsview.cpp:356
+#: views/kmymoneyview.cpp:766 widgets/kmymoneyaccountselector.cpp:178
+#: widgets/kmymoneyaccountselector.cpp:363
+#: wizards/newaccountwizard/knewaccountwizard.cpp:458
+msgid "Liability"
+msgstr "Įsipareigojimas"
+
+#: converter/mymoneytemplate.cpp:194 converter/mymoneytemplate.cpp:195
+#: kmymoneyutils.cpp:94 mymoney/mymoneyaccount.cpp:756
+#: views/kaccountsview.cpp:369 views/kmymoneyview.cpp:769
+#: widgets/kmymoneyaccountselector.cpp:181
+#: widgets/kmymoneyaccountselector.cpp:390
+#: wizards/newaccountwizard/knewaccountwizard.cpp:460
+msgid "Equity"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid ""
+"Please make sure to enter the correct conversion for the selected opening "
+"date. If you requested an online quote it might be provided for a different "
+"date."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+#, fuzzy
+msgid "Check date"
+msgstr "&Sukurti"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:562
+msgid "1 %1 equals %2"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:577
+msgid "Conversion rate is not positive"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:583
+msgid "No account name supplied"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:114 mymoney/mymoneyscheduled.cpp:1026
+#: wizards/newaccountwizard/knewaccountwizard.cpp:680
+msgid "Write check"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:111 mymoney/mymoneyscheduled.cpp:1014
+#: wizards/newaccountwizard/knewaccountwizard.cpp:682
+msgid "Direct debit"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:113 mymoney/mymoneyscheduled.cpp:1032
+#: wizards/newaccountwizard/knewaccountwizard.cpp:683
+#, fuzzy
+msgid "Bank transfer"
+msgstr "Perkėlimas"
+
+#: dialogs/keditscheduledlg.cpp:112 mymoney/mymoneyscheduled.cpp:1029
+#: wizards/newaccountwizard/knewaccountwizard.cpp:685
+msgid "Standing order"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:110 mymoney/mymoneyscheduled.cpp:1020
+#: wizards/newaccountwizard/knewaccountwizard.cpp:686
+msgid "Manual deposit"
+msgstr "Rankinis indėlis"
+
+#: dialogs/keditscheduledlg.cpp:109 mymoney/mymoneyscheduled.cpp:1017
+#: wizards/newaccountwizard/knewaccountwizard.cpp:687
+msgid "Direct deposit"
+msgstr "Tiesioginis indėlis"
+
+#: dialogs/keditscheduledlg.cpp:115 mymoney/mymoneyscheduled.cpp:1023
+#: wizards/newaccountwizard/knewaccountwizard.cpp:688
+msgid "Other"
+msgstr "Kita"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:697
+msgid "CreditCard %1 monthly payment"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:703
+msgid "Finish entry and create account"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:705
+#, fuzzy
+msgid "Finish entry and create account and schedule"
+msgstr "Naudokite tai norėdami sukurti naują tvarkaraštį."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:708
+msgid "Next due date is prior to opening date"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:712
+#, fuzzy
+msgid "No account selected"
+msgstr "Sąskaitos pasirinkimas"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:716
+msgid "No amount for payment selected"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:720
+msgid "No payee for payment selected"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:724
+msgid "No name assigned for schedule"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:805
+msgid "No payee supplied"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:819
+#, fuzzy
+msgid "No opening balance supplied"
+msgstr "Atidarymo balanso tekstas"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:826
+msgid "An interest change can only happen after the first payment"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:615 dialogs/knewloanwizard.cpp:634
+#: wizards/newaccountwizard/knewaccountwizard.cpp:884
+#: wizards/newaccountwizard/rc.cpp:55
+msgid "Months"
+msgstr "Mėnesiai"
+
+#: dialogs/knewloanwizard.cpp:616 dialogs/knewloanwizard.cpp:635
+#: wizards/newaccountwizard/knewaccountwizard.cpp:885
+#: wizards/newaccountwizard/knewaccountwizard.cpp:889
+#: wizards/newaccountwizard/rc.cpp:56
+msgid "Years"
+msgstr "Metai"
+
+#: dialogs/knewloanwizard.cpp:711
+#: wizards/newaccountwizard/knewaccountwizard.cpp:961
+#, c-format
+msgid "KMyMoney has calculated the amount of the loan as %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:718
+#: wizards/newaccountwizard/knewaccountwizard.cpp:968
+msgid "KMyMoney has calculated the interest rate to %1%."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:731
+#: wizards/newaccountwizard/knewaccountwizard.cpp:981
+msgid ""
+"KMyMoney has calculated a periodic payment of %1 to cover principal and "
+"interest."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:993
+#, c-format
+msgid ""
+"The number of payments has been decremented and the balloon payment has been "
+"modified to %1."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1001
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1021
+#, c-format
+msgid "The balloon payment has been modified to %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:763
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1013
+msgid "KMyMoney has calculated the term of your loan as %1. "
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1052
+msgid "KMyMoney has calculated a balloon payment of %1 for this loan."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:809
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1059
+msgid "KMyMoney has successfully verified your loan information."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1067
+msgid ""
+"You have entered mis-matching information. Please modify your figures or "
+"leave one value empty to let KMyMoney calculate it for you"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:504 dialogs/knewloanwizard.cpp:513
+#: dialogs/knewloanwizard.cpp:522 dialogs/knewloanwizard.cpp:532
+#: dialogs/knewloanwizard.cpp:820
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1070
+msgid "Calculation error"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:824
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1074
+msgid ""
+"\n"
+"\n"
+"Accept this or modify the loan information and recalculate."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:826
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1076
+msgid "Calculation successful"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:846
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1129
+#, c-format
+msgid ""
+"_n: one month\n"
+"%n months"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:850
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1133
+#, c-format
+msgid ""
+"_n: one year\n"
+"%n years"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:854
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1137
+#, c-format
+msgid ""
+"_n: one payment\n"
+"%n payments"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1190
+msgid "Press Calculate to verify the values"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1194
+msgid "Not all details supplied"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:70 dialogs/knewloanwizard.cpp:122
+#: dialogs/knewloanwizard.cpp:136
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1381
+msgid "&Create..."
+msgstr "&Sukurti..."
+
+#: dialogs/knewloanwizard.cpp:138
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1383
+msgid "Create a new asset account"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1384
+msgid ""
+"If the asset account does not yet exist, press this button to create it."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1596
+#, fuzzy
+msgid "Account information"
+msgstr "Mokėjimo informacija"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1601
+#: wizards/newaccountwizard/rc.cpp:59
+#, fuzzy
+msgid "Subaccount of"
+msgstr "Šalutinė sąskaita"
+
+#: dialogs/rc.cpp:225 dialogs/rc.cpp:326 dialogs/rc.cpp:371 dialogs/rc.cpp:723
+#: plugins/ofximport/dialogs/rc.cpp:23 reports/listtable.cpp:225
+#: widgets/kmymoneyaccounttreebase.cpp:113 widgets/register.cpp:61
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1606
+msgid "Type"
+msgstr "Tipas"
+
+#: dialogs/kcurrencyeditdlg.cpp:62 dialogs/rc.cpp:56 dialogs/rc.cpp:59
+#: dialogs/rc.cpp:75 dialogs/rc.cpp:727 dialogs/rc.cpp:792
+#: kmymoneyutils.cpp:84 kmymoneyutils.cpp:111 mymoney/mymoneyaccount.cpp:741
+#: mymoney/mymoneysecurity.cpp:169 reports/listtable.cpp:233
+#: widgets/kmymoneypriceview.cpp:127
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1607
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1630
+#: wizards/newaccountwizard/rc.cpp:6 wizards/newaccountwizard/rc.cpp:24
+msgid "Currency"
+msgstr "Valiuta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1608
+#: wizards/newaccountwizard/rc.cpp:7 wizards/newuserwizard/rc.cpp:9
+#, fuzzy
+msgid "Opening date"
+msgstr "Atnaujinti iš interneto"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1610
+#: wizards/newaccountwizard/rc.cpp:9
+#, fuzzy
+msgid "Conversion rate"
+msgstr "Konvertuoti į"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1613
+#: wizards/newaccountwizard/rc.cpp:15 wizards/newuserwizard/rc.cpp:13
+#, fuzzy
+msgid "Opening balance"
+msgstr "Atidarymo balanso tekstas"
+
+#: dialogs/keditscheduledlg.cpp:507 dialogs/transactioneditor.cpp:784
+#: dialogs/transactioneditor.cpp:848 plugins/ofximport/dialogs/rc.cpp:22
+#: widgets/rc.cpp:111 widgets/register.cpp:59 widgets/transaction.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1618
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1632
+msgid "Number"
+msgstr "Numeris"
+
+#: dialogs/rc.cpp:365 wizards/newaccountwizard/knewaccountwizard.cpp:1621
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1634
+#: wizards/newaccountwizard/rc.cpp:26 wizards/newaccountwizard/rc.cpp:66
+msgid "IBAN"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1627
+#, fuzzy
+msgid "Brokerage Account"
+msgstr "Prioritetinė sąskaita"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1640
+#, fuzzy
+msgid "Loan information"
+msgstr "Mokėjimo informacija"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1643
+#, fuzzy
+msgid "Amount borrowed"
+msgstr "Įvesta suma"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1645
+#, fuzzy
+msgid "Amount lent"
+msgstr "Įvesta suma"
+
+#: dialogs/rc.cpp:515 dialogs/rc.cpp:546
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1647
+#: wizards/newaccountwizard/rc.cpp:75
+msgid "Interest rate"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1648
+#, fuzzy
+msgid "Interest rate is"
+msgstr "Palūkanos"
+
+#: dialogs/rc.cpp:509 dialogs/rc.cpp:572
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1649
+msgid "Principal and interest"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1650
+#: wizards/newaccountwizard/rc.cpp:90
+msgid "Additional fees"
+msgstr ""
+
+#: dialogs/rc.cpp:525 wizards/newaccountwizard/knewaccountwizard.cpp:1651
+#: wizards/newaccountwizard/rc.cpp:44
+msgid "Payment frequency"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1652
+#: wizards/newaccountwizard/rc.cpp:105
+#, fuzzy
+msgid "Payment account"
+msgstr "Mokėjimų sąskaitos"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1655
+#, fuzzy
+msgid "Payout information"
+msgstr "Mokėjimo informacija"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1658
+#, fuzzy
+msgid "Refinance"
+msgstr "Pe&rvadinti"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1661
+#, fuzzy
+msgid "Transfer amount to"
+msgstr "Perkelti į"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1663
+#, fuzzy
+msgid "Transfer amount from"
+msgstr "Perkelti iš"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1665
+#, fuzzy
+msgid "Payment date"
+msgstr "Pranešimo data:"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1671
+#, fuzzy
+msgid "Schedule information"
+msgstr "Korespondento informacija"
+
+#: reports/listtable.cpp:228
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1684
+#, fuzzy
+msgid "Occurence"
+msgstr "Valiutos"
+
+#: mymoney/mymoneyscheduled.cpp:891 mymoney/mymoneyscheduled.cpp:947
+#: mymoney/mymoneyscheduled.cpp:1283 mymoney/mymoneyscheduletest.cpp:1343
+#: widgets/rc.cpp:19 widgets/rc.cpp:74
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+msgid "Monthly"
+msgstr "Kas mėnesį"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1677
+#, fuzzy
+msgid "Paid from"
+msgstr "Galioja nuo:"
+
+#: widgets/kmymoneycombo.cpp:473 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1678
+msgid "Pay to"
+msgstr "Kam mokėti"
+
+#: dialogs/investactivities.cpp:197 dialogs/investactivities.cpp:285
+#: dialogs/investactivities.cpp:365 dialogs/kfindtransactiondlg.cpp:197
+#: dialogs/kmymoneysplittable.cpp:80 dialogs/rc.cpp:51 dialogs/rc.cpp:212
+#: reports/listtable.cpp:197 views/khomeview.cpp:421 views/khomeview.cpp:494
+#: views/khomeview.cpp:528 views/kscheduledview.cpp:73 views/rc.cpp:63
+#: widgets/register.cpp:58 widgets/transaction.cpp:1055
+#: widgets/transaction.cpp:1578 widgets/transaction.cpp:1610
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1679
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1685
+msgid "Amount"
+msgstr "Suma"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1680
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1686
+#, fuzzy
+msgid "First payment due"
+msgstr "Mokėjimai ateityje"
+
+#: dialogs/rc.cpp:102 wizards/newaccountwizard/knewaccountwizard.cpp:1681
+#: wizards/newaccountwizard/rc.cpp:115
+msgid "Payment method"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:1
+msgid ""
+"This page summarizes the data you have entered. Press <b>Finish</b> to "
+"create the account, schedules, etc. or use <b>Back</b> to modify your "
+"entries."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:2
+msgid "Item"
+msgstr ""
+
+#: dialogs/rc.cpp:110 dialogs/rc.cpp:165 dialogs/rc.cpp:252 dialogs/rc.cpp:757
+#: dialogs/rc.cpp:818 views/kinvestmentview.cpp:74 widgets/register.cpp:574
+#: wizards/newaccountwizard/rc.cpp:3
+msgid "Value"
+msgstr "Reikšmė"
+
+#: wizards/newaccountwizard/rc.cpp:4
+msgid ""
+"Enter the name of the account under which it is known within KMyMoney.\n"
+"Select the type for the new account. Use the <b>What's this?</b> feature to "
+"see more details about the various account types.\n"
+"Enter the date the account was opened and its currency."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:5
+msgid "Select the currency in which this account is denominated."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:8
+msgid ""
+"The opening balance is the balance of the account when you start using it "
+"with KMyMoney. For new accounts this is usually 0 but for existing accounts "
+"this may well differ. Please consult the account statements to figure out "
+"this value. The opening balance is to be provided in the currency of the "
+"account as selected with the currency button."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:10
+msgid ""
+"The opening date would be the date of the last statement. In case you want "
+"to keep track of transactions prior to this date, enter the ending balance "
+"and statement date of a prior statement and add all following transactions "
+"into KMyMoney.\n"
+"<br>\n"
+"<i>Note</i>: If you do not know the exact amount of the opening balance, "
+"enter an estimate. You can change this value later before you reconcile this "
+"account for the first time."
+msgstr ""
+
+#: dialogs/rc.cpp:52 dialogs/rc.cpp:54 dialogs/rc.cpp:57 dialogs/rc.cpp:60
+#: dialogs/rc.cpp:748 dialogs/rc.cpp:749 dialogs/rc.cpp:768 widgets/rc.cpp:6
+#: widgets/rc.cpp:7 widgets/rc.cpp:8 widgets/rc.cpp:9 widgets/rc.cpp:10
+#: widgets/rc.cpp:11 widgets/rc.cpp:12 widgets/rc.cpp:13 widgets/rc.cpp:14
+#: widgets/rc.cpp:15 widgets/rc.cpp:16 widgets/rc.cpp:17
+#: wizards/newaccountwizard/rc.cpp:11 wizards/newaccountwizard/rc.cpp:88
+#: wizards/newaccountwizard/rc.cpp:91 wizards/newaccountwizard/rc.cpp:93
+#: wizards/newuserwizard/rc.cpp:14
+msgid "xxx"
+msgstr "xxx"
+
+#: wizards/newaccountwizard/rc.cpp:12
+#, fuzzy
+msgid "Account type"
+msgstr "Sąskaitos pavadinimas"
+
+#: wizards/newaccountwizard/rc.cpp:13
+msgid ""
+"For foreign currencies an initial conversion rate needs to be provided. This "
+"should be the price of the foreign currency in the base currency on the "
+"opening date of the account."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:14
+#, fuzzy
+msgid "Account name"
+msgstr "Sąskaitos pavadinimas"
+
+#: wizards/newaccountwizard/rc.cpp:16
+msgid ""
+"<p><b>Checking</b>\n"
+"Use the checking account type to manage activities on your checking account "
+"e.g. payments, checks and cash card purchases.</p>\n"
+"\n"
+"<p><b>Savings</b>\n"
+"Use the savings account type to manage activities on your savings account.</"
+"p>\n"
+"\n"
+"<p><b>Credit Card</b>\n"
+"Use the credit card account type to manage activities on your credit card.</"
+"p>\n"
+"\n"
+"<p><b>Cash</b>\n"
+"\n"
+"Use the cash account type to manage activities in your wallet.</p>\n"
+"\n"
+"<p><b>Loan</b>\n"
+"Use the loan account type to manage amortization loans (e.g. mortgages, car "
+"loan, money you lend, private loans etc.).</p>\n"
+"\n"
+"<p><b>Investment</b>\n"
+"Use the investment account to manage your stock, mutual fund and other "
+"investments.</p>\n"
+"\n"
+"<p><b>Asset</b>\n"
+"Use the asset account type to manage assets (e.g. your house, car or art "
+"collection).</p>\n"
+"\n"
+"<p><b>Liability</b>\n"
+"Use the liability account type to manage any type of liability except "
+"amortization loans. Use it for taxes you owe or money you borrowed from "
+"friends. For amortization loans like mortgages you should create a loan "
+"account.</p>"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:17
+msgid "Preferred account"
+msgstr "Išskirtinė sąskaita"
+
+#: wizards/newaccountwizard/rc.cpp:18
+msgid ""
+"Mark this checkbox if the account should be maintained as preferred account"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:19
+msgid ""
+"Selecting the <b>Preferred Account</b> checkbox will allow preferred access "
+"in some dialogs and views of KMyMoney."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:20
+msgid "Enter a name under which this account is known within KMyMoney."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:21
+#, fuzzy
+msgid "Online quote"
+msgstr "Internetinis šaltinis"
+
+#: wizards/newaccountwizard/rc.cpp:22
+msgid ""
+"Does this investment account have a brokerage account?<p>\n"
+"\n"
+"<b>Check</b> the mark if this investment account has an associated account "
+"for money that is not invested.<br>\n"
+"\n"
+"<b>Uncheck</b> it if you don't use this account for active stock brokerage. "
+"You should also uncheck it if this account is not maintained by a bank or "
+"broker."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:23
+#, fuzzy
+msgid "Create brokerage account"
+msgstr "Išskirtinė sąskaita"
+
+#: wizards/newaccountwizard/rc.cpp:25 wizards/newaccountwizard/rc.cpp:64
+#, fuzzy
+msgid "Account number"
+msgstr "Sąskaitos numeris"
+
+#: wizards/newaccountwizard/rc.cpp:27
+msgid ""
+"Please select the required options. Please use the <b>What's this?</b> "
+"feature to see more information about the items."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:28
+#, fuzzy
+msgid "What is the type of the loan?"
+msgstr "Koks yra sąskaitos pavadinimas?"
+
+#: dialogs/rc.cpp:481 wizards/newaccountwizard/rc.cpp:29
+msgid "I am borrowing money"
+msgstr ""
+
+#: dialogs/rc.cpp:482 wizards/newaccountwizard/rc.cpp:30
+msgid "I am lending money"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:31
+#, fuzzy
+msgid "Who is the payee/payer of the loan?"
+msgstr "Koks yra sąskaitos pavadinimas?"
+
+#: wizards/newaccountwizard/rc.cpp:32
+msgid ""
+"Enter the name of the person or bank you owe money or who owes you money.\n"
+"\n"
+"If the name does not exist within KMyMoney's database, you are asked if you "
+"want to create it."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:33
+msgid "Did you make/receive any payments yet?"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:36
+msgid ""
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?\n"
+"\n"
+"Note: Payments made to obtain the loan (e.g. Disagio) are not considered as "
+"payments in this context."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:37
+msgid "Which payments do you want to record?"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:38
+#, fuzzy
+msgid "All payments"
+msgstr "Mokėjimai"
+
+#: wizards/newaccountwizard/rc.cpp:39
+msgid "Start with this year's payments"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:40
+msgid ""
+"<qt>Select which transactions should be recorded.\n"
+"\n"
+"<b>All payments</b> allows you to enter all payments made for this loan.\n"
+"\n"
+"The option to <b>start from the beginning of the current year</b> is meant "
+"for loans that are active for a longer period of time already and you don't "
+"want to enter all transactions of the past.\n"
+"</qt>"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:41
+msgid "Balance before start of recording"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:42
+msgid ""
+"Enter the ending balance found on the statement that is the last one before "
+"you want to start recording this loan in KMyMoney."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:43
+msgid ""
+"You have selected to record only payments from the beginning of this year. "
+"Since prior transactions will not be recorded, you need to supply the "
+"balance of the loan on January 1st of this year."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:45
+msgid "Interest Compounding frequency"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:46
+msgid ""
+"Select the frequency with which the interest is compounded. If uncertain, "
+"select the same as the payment frequency. Consult your loan contract for "
+"details."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:47
+msgid "Due date of first payment to be recorded"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:48
+msgid ""
+"Depending on the answer to <b>What do you want to record?</b> this field "
+"means the following:<p>\n"
+"\n"
+"<b>All payments</b><br>\n"
+"Enter the due date of the very first payment<p>\n"
+"\n"
+"<b>Start with this year's payments</b><br>\n"
+"Enter the due date of the first payment in the current year"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:49
+#, fuzzy
+msgid "Type of interest rate"
+msgstr "Lauko tipo tekstas"
+
+#: wizards/newaccountwizard/rc.cpp:50
+#, fuzzy
+msgid "Fixed"
+msgstr "Laukas"
+
+#: wizards/newaccountwizard/rc.cpp:51
+#, fuzzy
+msgid "Variable"
+msgstr "Reikšmė"
+
+#: wizards/newaccountwizard/rc.cpp:52
+msgid "Time between interest changes"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:613 wizards/newaccountwizard/rc.cpp:53
+msgid "Days"
+msgstr "Dienos"
+
+#: dialogs/knewloanwizard.cpp:614 wizards/newaccountwizard/rc.cpp:54
+msgid "Weeks"
+msgstr "Savaitės"
+
+#: wizards/newaccountwizard/rc.cpp:57
+msgid "Next interest change is due"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:58
+msgid "This page allows you to select the parent account."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:60
+msgid ""
+"If this account is managed by an institution please select the institution "
+"from the list. If the institution does not exist yet, please choose the "
+"<b>New Institution</b> button to create it. Otherwise, leave this field "
+"empty.\n"
+"Enter the account number used by the institution to identify the account."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:62
+msgid "Select the institution which manages this account or leave empty"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:63
+#, fuzzy
+msgid "New Institution"
+msgstr "<be institucijos>"
+
+#: wizards/newaccountwizard/rc.cpp:65
+msgid ""
+"Accounts managed by an institution are usually referenced by a unique number "
+"the so called account number. Enter that number here.\n"
+"\n"
+"KMyMoney currently uses this number only for some online banking functions."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:67
+msgid "Enter the International Bank Account Number into this field"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:68
+msgid ""
+"You can enter the IBAN (International Bank Account Number) into this field "
+"if you know it. Usually, people at your institution can tell you the number "
+"or it is printed on your statements.\n"
+"\n"
+"See also http://en.wikipedia.org/wiki/International_Bank_Account_Number for "
+"more information.\n"
+"\n"
+"KMyMoney keeps this field only for documentation purposes and does not use "
+"it otherwise."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:69
+msgid ""
+"Now enter the details for your loan. You can leave one of the fields empty "
+"and KMyMoney will calculate it when you press the <b>Calculate</b> button. "
+"Before you can continue with the next page you also need to press "
+"<b>Calculate</b> so that KMyMoney can check the logical correctness of the "
+"values you have supplied."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:70
+msgid "The interest rate gets calculated"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:71
+msgid "when the payment is received"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:72
+msgid "when the payment is due"
+msgstr ""
+
+#: dialogs/rc.cpp:531 dialogs/rc.cpp:533 wizards/newaccountwizard/rc.cpp:73
+msgid "Loan amount"
+msgstr "Paskolos dydis"
+
+#: wizards/newaccountwizard/rc.cpp:74
+msgid ""
+"Enter the amount of the loan in this field. If you want to calculate this "
+"field out of the other parameters, please leave it empty. If the field is "
+"marked as required (colored background) you have informed KMyMoney about the "
+"fact that there were already some payments towards the loan. In this case, "
+"please enter the ending balance of your last statement."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:76
+msgid ""
+"Please enter the interest rate in percent or leave the field empty to "
+"calculate it."
+msgstr ""
+
+#: dialogs/rc.cpp:559 wizards/newaccountwizard/rc.cpp:77
+msgid "Term"
+msgstr "Terminas"
+
+#: wizards/newaccountwizard/rc.cpp:78
+msgid ""
+"Please enter the term of this loan or enter 0 to calculate it. The term is "
+"the time that is required to fully repay the loan. This time might be "
+"different from the time your loan contract is signed for."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:79
+msgid "Payment (principal and interest)"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:80
+msgid ""
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:81
+#, fuzzy
+msgid "Balloon payment"
+msgstr "Viso mokėti:"
+
+#: wizards/newaccountwizard/rc.cpp:82
+msgid ""
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:83
+msgid "Calculate"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:84
+msgid "Press this button to calculate/verify your loan details."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:85
+msgid ""
+"Pressing this button calculates a possibly missing parameter for your loan "
+"or verifies that the values entered match. If something is not correct you "
+"will receive information about it."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:86
+msgid ""
+"Now enter the information required for the periodic loan payments. If your "
+"regular payments contains any additional fees, click on the <b>Additional "
+"fees</b> button to enter them."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:87
+msgid "Principal + Interest"
+msgstr ""
+
+#: dialogs/rc.cpp:620 wizards/newaccountwizard/rc.cpp:89
+msgid "+"
+msgstr "+"
+
+#: wizards/newaccountwizard/rc.cpp:92
+#, fuzzy
+msgid "= periodical payments"
+msgstr "Mokėjimai šiandien"
+
+#: dialogs/rc.cpp:643 wizards/newaccountwizard/rc.cpp:94
+msgid ""
+"If this loan is for an asset, such as a car or a house, you can create the "
+"asset account now. An asset account represents the total value of an asset. "
+"The money from this loan will be transfered into the asset account you "
+"create or select.\n"
+"If this loan is a 'consumer loan' (money to use however you want), you can "
+"use a checking account instead."
+msgstr ""
+
+#: dialogs/rc.cpp:644 wizards/newaccountwizard/rc.cpp:95
+msgid "Don't create payout transaction"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:96
+msgid "Refinance existing loan"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:97
+msgid ""
+"Check this if you are refinancing a loan that already exists in KMyMoney"
+msgstr ""
+
+#: dialogs/rc.cpp:642 wizards/newaccountwizard/rc.cpp:98
+msgid "Asset Account"
+msgstr "Turto sąskaita"
+
+#: dialogs/rc.cpp:2 wizards/newaccountwizard/rc.cpp:99
+#, fuzzy
+msgid "Create"
+msgstr "&Sukurti"
+
+#: wizards/newaccountwizard/rc.cpp:100
+#, fuzzy
+msgid "Loan account"
+msgstr "Paskolos dydis"
+
+#: dialogs/rc.cpp:646 wizards/newaccountwizard/rc.cpp:101
+msgid "Date of payment"
+msgstr "Mokėjimo data"
+
+#: wizards/newaccountwizard/rc.cpp:102
+msgid ""
+"KMyMoney creates a schedule for this payment and reminds you whenever a "
+"payment must be made. Please select the account to/from which payments will "
+"be made and the category the interest will be assigned to.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+
+#: dialogs/rc.cpp:613 wizards/newaccountwizard/rc.cpp:103
+msgid "Interest category"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:104
+msgid ""
+"The category the interest part of the payment will be assigned to. If you "
+"borrow money you usually have to pay interest, so this should be an expense "
+"category. If you lend the money, you receive the interest. In this case, "
+"select an income category here."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:106
+msgid ""
+"Select the account from which you make your periodical payments or where you "
+"receive regular payments in case you lend the money. In most cases, this is "
+"a checking account."
+msgstr ""
+
+#: dialogs/rc.cpp:519 wizards/newaccountwizard/rc.cpp:107
+msgid "First payment due on"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:108
+msgid ""
+"For credit card accounts you can create a monthly schedule which will "
+"automatically remind you about the payment. Please fill in the details about "
+"this payment here."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:109
+msgid "Yes, remind me when the payment is due"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:110
+#, fuzzy
+msgid "Name of schedule"
+msgstr "Naujas tvarkaraštis"
+
+#: dialogs/rc.cpp:151 dialogs/rc.cpp:218 dialogs/rc.cpp:219
+#: reports/listtable.cpp:199 views/kscheduledview.cpp:72 widgets/rc.cpp:113
+#: widgets/register.cpp:57 wizards/newaccountwizard/rc.cpp:111
+msgid "Payee"
+msgstr "Korespondentas"
+
+#: wizards/newaccountwizard/rc.cpp:112
+msgid "Estimated monthly payment"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:113
+msgid "Due date of next payment"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:114
+msgid ""
+"Payment should be made\n"
+"from account"
+msgstr ""
+
+#: wizards/newuserwizard/knewuserwizard.cpp:79
+msgid "KMyMoney New File Setup"
+msgstr ""
+
+#: wizards/newuserwizard/knewuserwizard.cpp:81
+#, fuzzy
+msgid "Introduction"
+msgstr "Institucija"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:82
+#, fuzzy
+msgid "Personal Data"
+msgstr "Asmeniniai duomenys..."
+
+#: wizards/newuserwizard/knewuserwizard.cpp:83
+#, fuzzy
+msgid "Select Currency"
+msgstr "Pasirinkite pagrindinę valiutą"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:84
+#, fuzzy
+msgid "Select Accounts"
+msgstr "Pasirinkite sąskaitą:"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:85
+msgid "Set preferences"
+msgstr ""
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid ""
+"Unable to load data, because no contact has been associated with the owner "
+"of the standard addressbook."
+msgstr ""
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid "Addressbook import"
+msgstr "Adresų knygelės importavimas"
+
+#: wizards/newuserwizard/rc.cpp:1
+msgid ""
+"A typical KMyMoney user maintains a checking a account with some institution "
+"and uses it to receive money or pay bills. If this is not the case, please "
+"deselect the checkbox below and continue on the next page."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:2
+msgid "I have a checking account that I want to manage with KMyMoney"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:3
+msgid "The name of the instititution that issued the account."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:4
+msgid ""
+"Each institution has a routing number. Enter it here. If uncertain, leave "
+"the field blank. You can modify it later."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:5
+#, fuzzy
+msgid "Name of the institution"
+msgstr "Nepavyksta redaguoti institucijos:"
+
+#: wizards/newuserwizard/rc.cpp:6
+#, fuzzy
+msgid "Routing number"
+msgstr "Nukreipimo numeris:"
+
+#: wizards/newuserwizard/rc.cpp:7
+msgid ""
+"In general the institution that issued the account also issued a number for "
+"it. Enter it here. If uncertain, you can modify this entry later."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:8
+msgid ""
+"Enter a descriptive name that will be used by KMyMoney to identify your "
+"checking account."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:10
+msgid ""
+"Enter the date from when on you plan to keep track of the transactions in "
+"that account. This is usually the date of the last statement. If uncertain, "
+"leave as is."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:11
+#, fuzzy
+msgid "Number of the account"
+msgstr "Koks yra sąskaitos pavadinimas?"
+
+#: wizards/newuserwizard/rc.cpp:12
+#, fuzzy
+msgid "Name of the account"
+msgstr "Koks yra sąskaitos pavadinimas?"
+
+#: wizards/newuserwizard/rc.cpp:15
+msgid ""
+"Enter the opening balance of the account. This is usually the ending balance "
+"of the last statement. If uncertain, leave as is."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:16
+msgid ""
+"The fields below allow you to enter some information about your checking "
+"account. Once this wizard finishes, the account will be created for you "
+"within KMyMoney."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:17
+msgid ""
+"KMyMoney supports multiple currencies. Your reports will be based on a "
+"default curreny which you can select here. The default for new accounts is "
+"also the currency you select here."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:18
+msgid ""
+"KMyMoney will store your financial data in a file on the disk. A standard "
+"filename within your KDE user environment will be the default. This is just "
+"provided for convenience and you can choose any other location here."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:19
+msgid ""
+"Either the currently selected file exists or the selected directory does not "
+"exist. Please make sure, that\n"
+"\n"
+"<ul>\n"
+"<li>the selected directory exists and</li>\n"
+"<li>the filename is not currently used in this directory.</li>\n"
+"</ul>"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:20
+msgid ""
+"This finishes the setup of your KMyMoney environment. You can now press the "
+"Finish button and start using KMyMoney to record your financial transactions."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:21
+msgid ""
+"Please enter some information about yourself.<br><br>\n"
+"\n"
+"This information will be seen and used only by you. The information is used "
+"to personalize KMyMoney, to encrypt your file, etc."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:28
+msgid "Zip code"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:30
+msgid "Welcome to KMyMoney!"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:31
+msgid ""
+"You have started KMyMoney for the first time on this computer. Before this "
+"program can help you to manage your finances, it needs to collect some data "
+"from you.<p>\n"
+"\n"
+"On the next few pages you will be guided through the steps necessary to "
+"setup the program. This will happen only once."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:32
+msgid ""
+"<p>KMyMoney can encrypt your datafile using GPG Encryption. GPG encryption "
+"is one of the most secure methods in the world for protecting data. All of "
+"your account numbers and other important financial information will be very "
+"secure.</p>"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:33
+msgid ""
+"If you would like to review or change any preference settings for KMyMoney "
+"at this time, you can do so here. If not just click <b>Next</b>."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:34
+msgid "Configure preferences now"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:35
+msgid ""
+"You can change the configuration options at any time using the configuration "
+"dialog. Just select the <b>Configure KMyMoney...</b> option in the "
+"<b>Settings</b> menu."
+msgstr ""
+
+#: dialogs/rc.cpp:83 dialogs/rc.cpp:411 dialogs/rc.cpp:435
+#: kmymoneyutils.cpp:92 kmymoneyutils.cpp:105 mymoney/mymoneyaccount.cpp:753
+#: mymoney/mymoneysecurity.cpp:160
+msgid "Stock"
+msgstr ""
+
+#: dialogs/rc.cpp:84 dialogs/rc.cpp:412 dialogs/rc.cpp:436
+#: kmymoneyutils.cpp:107 mymoney/mymoneysecurity.cpp:163
+msgid "Mutual Fund"
+msgstr ""
+
+#: dialogs/rc.cpp:85 dialogs/rc.cpp:413 dialogs/rc.cpp:437
+#: kmymoneyutils.cpp:109 mymoney/mymoneysecurity.cpp:166
+msgid "Bond"
+msgstr ""
+
+#: mymoney/mymoneysecurity.cpp:172 reports/querytable.cpp:1150
+#: widgets/kmymoneyaccountselector.cpp:76
+msgid "None"
+msgstr "Nieko"
+
+#: dialogs/rc.cpp:46 kmymoneyutils.cpp:402 mymoney/mymoneyaccount.cpp:759
+#: mymoney/mymoneyscheduled.cpp:1002 mymoney/mymoneysecurity.cpp:175
+#: views/kforecastview.cpp:174 widgets/register.cpp:54
+#: widgets/register.cpp:485 widgets/transaction.cpp:708
+#: widgets/transaction.cpp:1459
+msgid "Unknown"
+msgstr "Nežinoma"
+
+#: mymoney/storage/mymoneystoragesql.cpp:191
+msgid ""
+"Database apparently in use\n"
+"Opened by %1 on %2 at %3.\n"
+"Open anyway?"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragesql.cpp:229
+msgid "Cannot currently create database for driver %1; please create manually"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragesql.cpp:244
+msgid "Error in create database %1; do you have create permissions?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1329
+#: mymoney/storage/mymoneystoragexml.cpp:166
+msgid "Loading transactions..."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1190
+#: mymoney/storage/mymoneystoragexml.cpp:173
+msgid "Loading accounts..."
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:180
+#, fuzzy
+msgid "Loading securities..."
+msgstr "Įkeliamos kainos..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:187
+#, fuzzy
+msgid "Loading reports..."
+msgstr "Įkeliamos kainos..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:268
+msgid "Unknown XML tag %1 found in line %2"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:274
+msgid "Exception while creating a %1 element: %2"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:513
+msgid "Loading file information..."
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:591
+#, fuzzy
+msgid "Loading user information..."
+msgstr "Bendra Informacija"
+
+#: mymoney/storage/mymoneystoragexml.cpp:655
+#, fuzzy
+msgid "Saving accounts..."
+msgstr "Sąskaita perkeliama"
+
+#: mymoney/storage/mymoneystoragexml.cpp:678
+#, fuzzy
+msgid "Saving transactions..."
+msgstr "Rasti operaciją..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:747
+#, fuzzy
+msgid "Saving reports..."
+msgstr "Išsaugojama byla..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:762
+#, fuzzy
+msgid "Saving budgets..."
+msgstr "Išsaugojama byla..."
+
+#: mymoney/storage/mymoneystoragedump.cpp:414
+msgid "not reconciled"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragedump.cpp:417
+msgid "cleared"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragedump.cpp:420
+msgid "reconciled"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragedump.cpp:423
+msgid "frozen"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragedump.cpp:426
+msgid "unknown"
+msgstr "nežinoma"
+
+#: mymoney/mymoneyaccount.cpp:101
+msgid ""
+"Account %1 contains an opening balance. Please use a KMyMoney version >= 0.8 "
+"and < 0.9 to correct the problem."
+msgstr ""
+
+#: mymoney/mymoneyaccount.cpp:597
+msgid ""
+"_: Brokerage (suffix for account names)\n"
+"Brokerage"
+msgstr ""
+
+#: kmymoneyutils.cpp:74 mymoney/mymoneyaccount.cpp:726
+msgid "Certificate of Deposit"
+msgstr "Indėlio sertifikatas"
+
+#: kmymoneyutils.cpp:78 mymoney/mymoneyaccount.cpp:732
+msgid "Money Market"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:186 converter/mymoneytemplate.cpp:187
+#: dialogs/knewaccountdlg.cpp:1018 kmymoneyutils.cpp:86
+#: mymoney/mymoneyaccount.cpp:744 views/kaccountsview.cpp:360
+#: views/kbudgetview.cpp:372 views/kcategoriesview.cpp:178
+#: views/khomeview.cpp:1813 views/kmymoneyview.cpp:767
+#: widgets/kmymoneyaccountselector.cpp:68
+#: widgets/kmymoneyaccountselector.cpp:179
+#: widgets/kmymoneyaccountselector.cpp:370 widgets/register.cpp:828
+msgid "Income"
+msgstr "Įplaukos"
+
+#: converter/mymoneytemplate.cpp:190 converter/mymoneytemplate.cpp:191
+#: dialogs/knewaccountdlg.cpp:1020 kmymoneyutils.cpp:88
+#: mymoney/mymoneyaccount.cpp:747 views/kaccountsview.cpp:364
+#: views/kbudgetview.cpp:378 views/kcategoriesview.cpp:182
+#: views/kmymoneyview.cpp:768 widgets/kmymoneyaccountselector.cpp:72
+#: widgets/kmymoneyaccountselector.cpp:180
+#: widgets/kmymoneyaccountselector.cpp:380 widgets/register.cpp:829
+msgid "Expense"
+msgstr "Išlaidos"
+
+#: kmymoneyutils.cpp:90 mymoney/mymoneyaccount.cpp:750
+msgid "Investment Loan"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:47
+msgid "Opening Balances"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:398
+#, fuzzy
+msgid "Cannot remove transaction that references a closed account."
+msgstr "Išrinkti operacijas be korespondento"
+
+#: mymoney/mymoneyfile.cpp:1414 mymoney/mymoneyfile.cpp:1433
+#: mymoney/mymoneyfile.cpp:1447 mymoney/mymoneyfile.cpp:1469
+#, fuzzy
+msgid "* Problem with account '%1'"
+msgstr "Nepavyksta pridėti operacijos: "
+
+#: mymoney/mymoneyfile.cpp:1419
+msgid " * Parent account '%1' belongs to a different group."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1420 mymoney/mymoneyfile.cpp:1450
+msgid " New parent account is the top level account '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1436
+msgid " * Parent account '%1' does not contain '%2' as sub-account."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1449
+msgid " * The parent with id %1 does not exist anymore."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1471
+msgid " * Child account with id %1 does not exist anymore."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1472
+msgid " The child account list will be reconstructed."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1492
+#, fuzzy
+msgid " * Unable to update account data in engine."
+msgstr "Nepavyksta pridėti operacijos: "
+
+#: mymoney/mymoneyfile.cpp:1499
+msgid "* Reconstructing the child lists for"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1536
+msgid " * Unable to update account data for account %1 in engine"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1554
+msgid " * Payee %1 recreated with fixed id"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1583
+msgid " * Payee id updated in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1596
+#, fuzzy
+msgid " * shares set to value in split of transaction '%1'."
+msgstr "&Pakeisti bendrą operacijos sumą į %1."
+
+#: mymoney/mymoneyfile.cpp:1599
+msgid " * value set to shares in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1605
+msgid ""
+" * Split %2 in transaction '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1616
+msgid " * action marked as interest in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1643
+msgid " * Payee id updated in split of schedule '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1649
+msgid ""
+" * Split in scheduled transaction '%1' contained value != 0 and shares == 0."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1650
+msgid " Shares set to value."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1658
+msgid " * Removed bankid from split in scheduled transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1671
+msgid " * shares set to value in split in schedule '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1674
+msgid " * value set to shares in split in schedule '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1680
+msgid ""
+" * Split %2 in schedule '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1706
+msgid " * Payee id updated in report '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1723
+msgid " * Payee '%1' removed."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1730
+msgid "Finish! Data is consistent."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1732
+msgid "Finish! %1 problem(s) corrected. %2 problem(s) still present."
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:873 mymoney/mymoneyscheduled.cpp:918
+#: mymoney/mymoneyscheduled.cpp:969 mymoney/mymoneyscheduled.cpp:1265
+#: mymoney/mymoneyscheduletest.cpp:1336
+msgid "Once"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:875 mymoney/mymoneyscheduled.cpp:924
+#: mymoney/mymoneyscheduled.cpp:1267 mymoney/mymoneyscheduletest.cpp:1337
+#: widgets/rc.cpp:72
+msgid "Daily"
+msgstr "Kasdien"
+
+#: mymoney/mymoneyscheduled.cpp:877 mymoney/mymoneyscheduled.cpp:931
+#: mymoney/mymoneyscheduled.cpp:1269 mymoney/mymoneyscheduletest.cpp:1338
+#: widgets/rc.cpp:73
+msgid "Weekly"
+msgstr "Kas savaitę"
+
+#: mymoney/mymoneyscheduled.cpp:881 mymoney/mymoneyscheduled.cpp:932
+#: mymoney/mymoneyscheduled.cpp:1273 mymoney/mymoneyscheduletest.cpp:1339
+msgid "Every other week"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:879 mymoney/mymoneyscheduled.cpp:1271
+#: mymoney/mymoneyscheduletest.cpp:1340
+msgid "Fortnightly"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:883 mymoney/mymoneyscheduled.cpp:941
+#: mymoney/mymoneyscheduled.cpp:1275 mymoney/mymoneyscheduletest.cpp:1341
+#, fuzzy
+msgid "Every half month"
+msgstr "Metai iki šiandien"
+
+#: mymoney/mymoneyscheduled.cpp:887 mymoney/mymoneyscheduled.cpp:934
+#: mymoney/mymoneyscheduled.cpp:1279 mymoney/mymoneyscheduletest.cpp:1342
+msgid "Every four weeks"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:893 mymoney/mymoneyscheduled.cpp:935
+#: mymoney/mymoneyscheduled.cpp:1285 mymoney/mymoneyscheduletest.cpp:1344
+msgid "Every eight weeks"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:895 mymoney/mymoneyscheduled.cpp:948
+#: mymoney/mymoneyscheduled.cpp:1287 mymoney/mymoneyscheduletest.cpp:1345
+msgid "Every two months"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:897 mymoney/mymoneyscheduled.cpp:949
+#: mymoney/mymoneyscheduled.cpp:1289 mymoney/mymoneyscheduletest.cpp:1346
+msgid "Every three months"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:899 mymoney/mymoneyscheduled.cpp:1291
+#: mymoney/mymoneyscheduletest.cpp:1347 widgets/rc.cpp:76
+msgid "Quarterly"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:901 mymoney/mymoneyscheduled.cpp:950
+#: mymoney/mymoneyscheduled.cpp:1293 mymoney/mymoneyscheduletest.cpp:1348
+msgid "Every four months"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:903 mymoney/mymoneyscheduled.cpp:951
+#: mymoney/mymoneyscheduled.cpp:1295 mymoney/mymoneyscheduletest.cpp:1349
+msgid "Twice yearly"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:905 mymoney/mymoneyscheduled.cpp:957
+#: mymoney/mymoneyscheduled.cpp:1297 mymoney/mymoneyscheduletest.cpp:1350
+#: widgets/rc.cpp:20 widgets/rc.cpp:77
+msgid "Yearly"
+msgstr "Kas metai"
+
+#: mymoney/mymoneyscheduled.cpp:907 mymoney/mymoneyscheduled.cpp:958
+#: mymoney/mymoneyscheduled.cpp:1299 mymoney/mymoneyscheduletest.cpp:1351
+msgid "Every other year"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:870 mymoney/mymoneyscheduled.cpp:913
+#: mymoney/mymoneyscheduled.cpp:966
+msgid "Any"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:885 mymoney/mymoneyscheduled.cpp:933
+#: mymoney/mymoneyscheduled.cpp:1277
+msgid "Every three weeks"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:889 mymoney/mymoneyscheduled.cpp:925
+#: mymoney/mymoneyscheduled.cpp:1281
+msgid "Every thirty days"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:971
+#, fuzzy
+msgid "Day"
+msgstr "Dienos"
+
+#: mymoney/mymoneyscheduled.cpp:973 reports/listtable.cpp:206
+#: widgets/kmymoneycalendar.cpp:123 widgets/rc.cpp:97
+msgid "Week"
+msgstr "Savaitė"
+
+#: mymoney/mymoneyscheduled.cpp:975
+#, fuzzy
+msgid "Half-month"
+msgstr "Metai iki šiandien"
+
+#: mymoney/mymoneyscheduled.cpp:977 reports/listtable.cpp:205
+#: widgets/kmymoneycalendar.cpp:124 widgets/rc.cpp:96
+msgid "Month"
+msgstr "Mėnuo"
+
+#: dialogs/rc.cpp:400 mymoney/mymoneyscheduled.cpp:979 views/rc.cpp:14
+#, fuzzy
+msgid "Year"
+msgstr "Metai"
+
+#: mymoney/mymoneyscheduled.cpp:989
+msgid "Bill"
+msgstr "Mokėjimo sąskaita"
+
+#: dialogs/rc.cpp:107 dialogs/rc.cpp:162 dialogs/rc.cpp:249 dialogs/rc.cpp:754
+#: mymoney/mymoneyscheduled.cpp:992 widgets/kmymoneycombo.cpp:420
+#: widgets/register.cpp:571
+msgid "Deposit"
+msgstr "Indėlis"
+
+#: mymoney/mymoneyscheduled.cpp:995 reports/querytable.cpp:594
+#: reports/querytable.cpp:696 widgets/kmymoneycombo.cpp:419
+msgid "Transfer"
+msgstr "Perkėlimas"
+
+#: mymoney/mymoneyscheduled.cpp:1035
+msgid "Any (Error)"
+msgstr ""
+
+#: dialogs/rc.cpp:114 mymoney/mymoneyscheduled.cpp:1047
+msgid "Change the date to the previous Friday"
+msgstr ""
+
+#: dialogs/rc.cpp:115 mymoney/mymoneyscheduled.cpp:1050
+msgid "Change the date to the next Monday"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:1053
+msgid "Do Nothing"
+msgstr "Nieko nedaryti"
+
+#: kmymoney2.cpp:312
+#, fuzzy
+msgid "Open database..."
+msgstr "Įrašyti kaip..."
+
+#: kmymoney2.cpp:313
+#, fuzzy
+msgid "Save as database..."
+msgstr "Įrašyti kaip..."
+
+#: kmymoney2.cpp:314
+msgid "Backup..."
+msgstr "Kopijuoti..."
+
+#: kmymoney2.cpp:315 kmymoney2.cpp:321
+#, fuzzy
+msgid "QIF..."
+msgstr "..."
+
+#: kmymoney2.cpp:316
+msgid "Gnucash..."
+msgstr ""
+
+#: kmymoney2.cpp:317
+#, fuzzy
+msgid "Statement file..."
+msgstr "Išsaugojama byla..."
+
+#: kmymoney2.cpp:319 kmymoney2.cpp:320
+#, fuzzy
+msgid "Account Template..."
+msgstr "Sąskaitų šablonas ..."
+
+#: kmymoney2.cpp:322
+msgid "Personal Data..."
+msgstr "Asmeniniai duomenys..."
+
+#: kmymoney2.cpp:325
+msgid "Dump Memory"
+msgstr ""
+
+#: kmymoney2.cpp:327
+#, fuzzy
+msgid "File-Information..."
+msgstr "Korespondento informacija"
+
+#: kmymoney2.cpp:332
+msgid "Find transaction..."
+msgstr "Rasti operaciją..."
+
+#: kmymoney2.cpp:337
+msgid "Show Transaction Detail"
+msgstr "Rodyti operacijų detales"
+
+#: kmymoney2.cpp:338 rc.cpp:60
+msgid "Hide reconciled transactions"
+msgstr ""
+
+#: kmymoney2.cpp:339 rc.cpp:57
+msgid "Hide unused categories"
+msgstr ""
+
+#: kmymoney2.cpp:340
+#, fuzzy
+msgid "Show all accounts"
+msgstr "Įsipareigojimų sąskaitos"
+
+#: kmymoney2.cpp:345
+#, fuzzy
+msgid "New institution..."
+msgstr "Nauja institucija..."
+
+#: kmymoney2.cpp:346
+#, fuzzy
+msgid "Edit institution..."
+msgstr "Pridėti naują instituciją..."
+
+#: kmymoney2.cpp:347
+#, fuzzy
+msgid "Delete institution..."
+msgstr "Nauja institucija..."
+
+#: kmymoney2.cpp:352
+msgid "New account..."
+msgstr "Nauja sąskaita..."
+
+#: kmymoney2.cpp:354
+msgid "Open ledger"
+msgstr ""
+
+#: kmymoney2.cpp:355
+msgid "Reconcile..."
+msgstr "Sutaikyti"
+
+#: kmymoney2.cpp:356
+#, fuzzy
+msgid ""
+"_: Finish reconciliation\n"
+"Finish"
+msgstr "Sutaikinimo vediklis"
+
+#: kmymoney2.cpp:357
+#, fuzzy
+msgid ""
+"_: Postpone reconciliation\n"
+"Postpone"
+msgstr "Sutaikinimo dialogas"
+
+#: kmymoney2.cpp:358
+#, fuzzy
+msgid "Edit account..."
+msgstr "Redaguoti sąskaitą"
+
+#: kmymoney2.cpp:359
+#, fuzzy
+msgid "Delete account..."
+msgstr "Nauja sąskaita..."
+
+#: kmymoney2.cpp:360
+#, fuzzy
+msgid "Close account"
+msgstr "Turto sąskaitos"
+
+#: kmymoney2.cpp:361
+#, fuzzy
+msgid "Reopen account"
+msgstr "Sąskaita perkeliama"
+
+#: kmymoney2.cpp:362
+#, fuzzy
+msgid "Transaction report"
+msgstr "Operacijų istorija"
+
+#: kmymoney2.cpp:364
+msgid "Show balance chart..."
+msgstr ""
+
+#: kmymoney2.cpp:366
+#, fuzzy
+msgid "Map to online account"
+msgstr "Koks yra sąskaitos pavadinimas?"
+
+#: kmymoney2.cpp:367
+#, fuzzy
+msgid "Unmap account"
+msgstr "Paskolos dydis"
+
+#: dialogs/settings/rc.cpp:126 kmymoney2.cpp:368 views/kpayeesview.cpp:363
+#: widgets/rc.cpp:50
+#, fuzzy
+msgid "Update"
+msgstr "&Aukštyn"
+
+#: kmymoney2.cpp:372
+#, fuzzy
+msgid "Update account..."
+msgstr "Redaguoti sąskaitą"
+
+#: kmymoney2.cpp:373
+#, fuzzy
+msgid "Update all accounts..."
+msgstr "Redaguoti sąskaitą"
+
+#: kmymoney2.cpp:378
+msgid "New category..."
+msgstr "Nauja kategorija..."
+
+#: kmymoney2.cpp:379
+#, fuzzy
+msgid "Edit category..."
+msgstr "Nauja kategorija..."
+
+#: kmymoney2.cpp:380
+#, fuzzy
+msgid "Delete category..."
+msgstr "Nauja kategorija..."
+
+#: kmymoney2.cpp:386
+msgid "QIF Profile Editor..."
+msgstr "QIF profilio rengyklė..."
+
+#: kmymoney2.cpp:387
+#, fuzzy
+msgid "Securities..."
+msgstr "Vertybiniai popieriai..."
+
+#: kmymoney2.cpp:388
+#, fuzzy
+msgid "Currencies..."
+msgstr "Valiutos..."
+
+#: kmymoney2.cpp:389
+#, fuzzy
+msgid "Prices..."
+msgstr "Kainos..."
+
+#: kmymoney2.cpp:390
+msgid "Update Stock and Currency Prices..."
+msgstr "Atnaujinti akcijų ir valiutų kainas..."
+
+#: kmymoney2.cpp:391
+msgid "Consistency Check"
+msgstr ""
+
+#: kmymoney2.cpp:392
+msgid "Performance-Test"
+msgstr ""
+
+#: kmymoney2.cpp:393
+msgid "KCalc..."
+msgstr ""
+
+#: kmymoney2.cpp:399
+msgid "Enable all messages"
+msgstr "Įgalinti visus pranešimus"
+
+#: kmymoney2.cpp:400
+msgid "KDE language settings..."
+msgstr ""
+
+#: kmymoney2.cpp:405
+msgid "&Show tip of the day"
+msgstr ""
+
+#: kmymoney2.cpp:410
+#, fuzzy
+msgid ""
+"_: New transaction button\n"
+"New"
+msgstr "Operacijos pagal mėnesius"
+
+#: kmymoney2.cpp:415
+#, fuzzy
+msgid ""
+"_: Edit transaction button\n"
+"Edit"
+msgstr "&Redaguoti operacijas..."
+
+#: kmymoney2.cpp:417
+#, fuzzy
+msgid ""
+"_: Enter transaction\n"
+"Enter"
+msgstr "Bet kokia operacija"
+
+#: kmymoney2.cpp:420
+msgid ""
+"_: Edit split button\n"
+"Edit splits"
+msgstr ""
+
+#: kmymoney2.cpp:421
+#, fuzzy
+msgid ""
+"_: Cancel transaction edit\n"
+"Cancel"
+msgstr "Galiojanti operacija"
+
+#: kmymoney2.cpp:422
+#, fuzzy
+msgid ""
+"_: Delete transaction\n"
+"Delete"
+msgstr "Trinti operaciją"
+
+#: kmymoney2.cpp:423
+#, fuzzy
+msgid ""
+"_: Duplicate transaction\n"
+"Duplicate"
+msgstr "Trinti operaciją"
+
+#: kmymoney2.cpp:425 kmymoney2.cpp:4826 kmymoney2.cpp:5107
+#, fuzzy
+msgid ""
+"_: Button text for match transaction\n"
+"Match"
+msgstr "Bet kokia operacija"
+
+#: kmymoney2.cpp:426
+msgid ""
+"_: Accept 'imported' and 'matched' transaction\n"
+"Accept"
+msgstr ""
+
+#: kmymoney2.cpp:428
+#, fuzzy
+msgid ""
+"_: Toggle reconciliation flag\n"
+"Toggle"
+msgstr "Sutaikinimo dialogas"
+
+#: kmymoney2.cpp:429
+#, fuzzy
+msgid ""
+"_: Mark transaction cleared\n"
+"Cleared"
+msgstr "Ieškoti operacijų"
+
+#: kmymoney2.cpp:430
+#, fuzzy
+msgid ""
+"_: Mark transaction reconciled\n"
+"Reconciled"
+msgstr "Operacijos detalės"
+
+#: kmymoney2.cpp:431
+#, fuzzy
+msgid ""
+"_: Mark transaction not reconciled\n"
+"Not reconciled"
+msgstr "Operacijos detalės"
+
+#: kmymoney2.cpp:432
+#, fuzzy
+msgid ""
+"_: Select all transactions\n"
+"Select all"
+msgstr "Trinti operaciją"
+
+#: kmymoney2.cpp:434 kmymoney2.cpp:5497
+#, fuzzy
+msgid "Goto account"
+msgstr "sąskaita"
+
+#: kmymoney2.cpp:435 kmymoney2.cpp:5495
+msgid "Goto payee"
+msgstr ""
+
+#: kmymoney2.cpp:436
+#, fuzzy
+msgid "Create scheduled transaction..."
+msgstr "Įvesti operaciją pagal tvarkaraštį"
+
+#: kmymoney2.cpp:437
+msgid "Assign next number"
+msgstr ""
+
+#: kmymoney2.cpp:438
+#, fuzzy
+msgid ""
+"_: Combine transactions\n"
+"Combine"
+msgstr "Bet kokia operacija"
+
+#: kmymoney2.cpp:440
+#, fuzzy
+msgid "New investment"
+msgstr "Investicija"
+
+#: kmymoney2.cpp:441
+#, fuzzy
+msgid "Edit investment..."
+msgstr "Investicija"
+
+#: kmymoney2.cpp:442
+#, fuzzy
+msgid "Delete investment..."
+msgstr "Trinti ..."
+
+#: kmymoney2.cpp:443
+#, fuzzy
+msgid "Online price update..."
+msgstr "Atnaujinti iš interneto"
+
+#: kmymoney2.cpp:444
+msgid "Manual price update..."
+msgstr ""
+
+#: kmymoney2.cpp:446
+#, fuzzy
+msgid "New scheduled transaction..."
+msgstr "Įvesti operaciją pagal tvarkaraštį"
+
+#: kmymoney2.cpp:447
+#, fuzzy
+msgid "Edit scheduled transaction..."
+msgstr "Įvesti operaciją pagal tvarkaraštį"
+
+#: kmymoney2.cpp:448
+#, fuzzy
+msgid "Delete scheduled transaction..."
+msgstr "Įvesti operaciją pagal tvarkaraštį"
+
+#: kmymoney2.cpp:449
+#, fuzzy
+msgid "Duplicate scheduled transaction"
+msgstr "Įvesti operaciją pagal tvarkaraštį"
+
+#: kmymoney2.cpp:450
+#, fuzzy
+msgid "Enter next transaction..."
+msgstr "Įvesti operaciją pagal tvarkaraštį"
+
+#: kmymoney2.cpp:451
+#, fuzzy
+msgid "Skip next transaction..."
+msgstr "Rasti operaciją..."
+
+#: kmymoney2.cpp:453
+#, fuzzy
+msgid "New payee"
+msgstr "Naujas korespondentas"
+
+#: kmymoney2.cpp:454
+#, fuzzy
+msgid "Rename payee"
+msgstr "Šalinti korespondentą"
+
+#: kmymoney2.cpp:455
+#, fuzzy
+msgid "Delete payee"
+msgstr "Pasirinkite savaitę"
+
+#: kmymoney2.cpp:457
+msgid "New budget"
+msgstr ""
+
+#: kmymoney2.cpp:458
+msgid "Rename budget"
+msgstr ""
+
+#: kmymoney2.cpp:459
+#, fuzzy
+msgid "Delete budget"
+msgstr "Trinti ataskaitą?"
+
+#: kmymoney2.cpp:460
+msgid "Copy budget"
+msgstr ""
+
+#: kmymoney2.cpp:461
+msgid "Change budget year"
+msgstr ""
+
+#: kmymoney2.cpp:462
+msgid ""
+"_: Budget based on forecast\n"
+"Forecast"
+msgstr ""
+
+#: kmymoney2.cpp:467 kmymoney2.cpp:3990 kmymoney2.cpp:3993 kmymoney2.cpp:3999
+#, fuzzy
+msgid "New currency"
+msgstr "Valiuta"
+
+#: kmymoney2.cpp:468 kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, fuzzy
+msgid "Rename currency"
+msgstr "Valiuta"
+
+#: kmymoney2.cpp:469 kmymoney2.cpp:4039
+#, fuzzy
+msgid "Delete currency"
+msgstr "Valiuta"
+
+#: dialogs/rc.cpp:69 kmymoney2.cpp:470
+msgid "Select as base currency"
+msgstr "Pasirinkite pagrindinę valiutą"
+
+#: kmymoney2.cpp:481
+msgid "View back"
+msgstr "Žiūrėti atgal"
+
+#: kmymoney2.cpp:482
+msgid "View forward"
+msgstr "Žiūrėti pirmyn"
+
+#: kmymoney2.cpp:611
+msgid "KMyMoney file needs saving. Save ?"
+msgstr ""
+
+#: kmymoney2.cpp:757
+msgid "Creating new document..."
+msgstr "Sukuriamas naujas dokumentas..."
+
+#: kmymoney2.cpp:869 kmymoney2.cpp:884
+msgid "Open a file."
+msgstr ""
+
+#: kmymoney2.cpp:872
+msgid ""
+"%1|KMyMoney files\n"
+"%2|All files (*.*)"
+msgstr ""
+
+#: kmymoney2.cpp:873
+msgid "Open File..."
+msgstr ""
+
+#: kmymoney2.cpp:925 kstartuplogo.cpp:100
+msgid "Loading file..."
+msgstr ""
+
+#: kmymoney2.cpp:986
+msgid ""
+"<b>%1</b> is either an invalid filename or the file does not exist. You can "
+"open another file or create a new one."
+msgstr ""
+
+#: kmymoney2.cpp:986
+msgid "File not found"
+msgstr "Byla nerasta"
+
+#: kmymoney2.cpp:989
+msgid "File <b>%1</b> is already opened in another instance of KMyMoney"
+msgstr ""
+
+#: kmymoney2.cpp:989
+msgid "Duplicate open"
+msgstr ""
+
+#: kmymoney2.cpp:1001
+msgid "Saving file..."
+msgstr "Išsaugojama byla..."
+
+#: kmymoney2.cpp:1035 kmymoney2.cpp:1047 kmymoney2.cpp:1071
+#, c-format
+msgid "Additional encryption key(s) to be used: %1"
+msgstr ""
+
+#: kmymoney2.cpp:1056
+msgid "Saving file with a new filename..."
+msgstr "Išsaugojama byla nauju vardu..."
+
+#: kmymoney2.cpp:1067
+msgid "Encryption key to be used"
+msgstr ""
+
+#: kmymoney2.cpp:1072
+msgid "Manage additional keys"
+msgstr ""
+
+#: kmymoney2.cpp:1079
+#, fuzzy
+msgid "No encryption"
+msgstr "Šifravimas"
+
+#: kmymoney2.cpp:1102
+msgid ""
+"_: KMyMoney (Filefilter)\n"
+"KMyMoney files"
+msgstr ""
+
+#: kmymoney2.cpp:1103
+msgid ""
+"_: XML (Filefilter)\n"
+"XML files"
+msgstr ""
+
+#: kmymoney2.cpp:1104
+msgid ""
+"_: Anonymous (Filefilter)\n"
+"Anonymous files"
+msgstr ""
+
+#: kmymoney2.cpp:1105
+#, fuzzy
+msgid "All files"
+msgstr "Visas laikotarpis"
+
+#: kmymoney2.cpp:1193
+#, fuzzy
+msgid "Saving file to database..."
+msgstr "Išsaugojama byla..."
+
+#: kmymoney2.cpp:1207
+msgid "Cannot save to current database."
+msgstr ""
+
+#: kmymoney2.cpp:1225
+msgid "Closing window..."
+msgstr ""
+
+#: kmymoney2.cpp:1228 kmymoney2.cpp:1249
+msgid "The file has been changed, save it ?"
+msgstr ""
+
+#: kmymoney2.cpp:1339 kmymoney2.cpp:1352
+msgid "Ready."
+msgstr "Pasirengęs."
+
+#: kmymoney2.cpp:1397 kmymoney2.cpp:1433
+#, fuzzy
+msgid "No KMyMoneyFile open"
+msgstr "Rodyti KMyMoney pasisveikinimo puslapį"
+
+#: kmymoney2.cpp:1401
+msgid "Viewing personal data..."
+msgstr "Asmeninių duomenų peržiūra..."
+
+#: kmymoney2.cpp:1408
+msgid "Edit Personal Data"
+msgstr "Redaguoti asmeninius duomenis"
+
+#: kmymoney2.cpp:1424
+#, fuzzy, c-format
+msgid "Unable to store user information: %1"
+msgstr "Nepavyksta pridėti operacijos: "
+
+#: kmymoney2.cpp:1447
+msgid "Importing account templates."
+msgstr "Importuojami sąskaitų šablonai."
+
+#: kmymoney2.cpp:1462
+#, fuzzy
+msgid "Unable to import template(s): %1, thrown in %2:%3"
+msgstr "Nepavyksta pašalinti operacijos"
+
+#: kmymoney2.cpp:1471
+#, fuzzy
+msgid "Exporting account templates."
+msgstr "Importuojami sąskaitų šablonai."
+
+#: kmymoney2.cpp:1474
+msgid ""
+"*.kmt|KMyMoney template files\n"
+"*.*|All files"
+msgstr ""
+
+#: kmymoney2.cpp:1475
+msgid "Save as..."
+msgstr "Įrašyti kaip..."
+
+#: kmymoney2.cpp:1517
+msgid "Importing file..."
+msgstr ""
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "The statements have been processed with the following results:"
+msgstr ""
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:1754 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+#, fuzzy
+msgid "Statement stats"
+msgstr "Pranešimo data:"
+
+#: kmymoney2.cpp:1602
+msgid ""
+"You cannot import GnuCash data into an existing file. Do you wish to save "
+"this file?"
+msgstr ""
+
+#: kmymoney2.cpp:1615
+msgid "Importing a Gnucash file."
+msgstr ""
+
+#: kmymoney2.cpp:1618
+msgid ""
+"%1|Gnucash files\n"
+"%2|All files (*.*)"
+msgstr ""
+
+#: kmymoney2.cpp:1619
+msgid "Import Gnucash file..."
+msgstr ""
+
+#: kmymoney2.cpp:1658
+msgid "Importing an XML Statement."
+msgstr ""
+
+#: kmymoney2.cpp:1661
+msgid ""
+"%1|XML files\n"
+"%2|All files (*.*)"
+msgstr ""
+
+#: kmymoney2.cpp:1662
+msgid "Import XML Statement..."
+msgstr ""
+
+#: kmymoney2.cpp:1718
+msgid "Error importing %1: This file is not a valid KMM statement file."
+msgstr ""
+
+#: kmymoney2.cpp:1718
+msgid "Invalid Statement"
+msgstr ""
+
+#: kmymoney2.cpp:1754
+msgid "The statement has been processed with the following results:"
+msgstr ""
+
+#: kmymoney2.cpp:1763
+msgid "Exporting file..."
+msgstr ""
+
+#: kmymoney2.cpp:1786
+msgid "The file <b>%1</b> already exists. Do you really want to override it?"
+msgstr ""
+
+#: kmymoney2.cpp:1786
+msgid "File already exists"
+msgstr ""
+
+#: dialogs/rc.cpp:347 dialogs/rc.cpp:649 dialogs/rc.cpp:798 kmymoney2.cpp:1815
+msgid "General"
+msgstr "Bendra"
+
+#: kmymoney2.cpp:1816
+msgid "Register"
+msgstr "Registras"
+
+#: kmymoney2.cpp:1817 views/khomeview.cpp:88 views/kmymoneyview.cpp:136
+msgid "Home"
+msgstr "Namai"
+
+#: kmymoney2.cpp:1818 views/kmymoneyview.cpp:176
+#, fuzzy
+msgid ""
+"Scheduled\n"
+"transactions"
+msgstr "Įvesti operaciją pagal tvarkaraštį"
+
+#: kmymoney2.cpp:1819
+msgid "Encryption"
+msgstr "Šifravimas"
+
+#: kmymoney2.cpp:1820
+#, fuzzy
+msgid "Colors"
+msgstr "Stulpeliai"
+
+#: dialogs/rc.cpp:344 dialogs/settings/rc.cpp:107 kmymoney2.cpp:1822
+#: widgets/rc.cpp:33
+msgid "Online Quotes"
+msgstr ""
+
+#: kmymoney2.cpp:1823 reports/pivottable.cpp:2426 views/kmymoneyview.cpp:251
+#: views/kmymoneyview.cpp:253 views/kreportsview.cpp:1415 views/rc.cpp:41
+msgid "Forecast"
+msgstr ""
+
+#: kmymoney2.cpp:1824
+#, fuzzy
+msgid "Plugins"
+msgstr "&Priedai"
+
+#: kmymoney2.cpp:1893
+msgid ""
+"The file must be saved first before it can be backed up. Do you want to "
+"continue?"
+msgstr ""
+
+#: kmymoney2.cpp:1910
+msgid ""
+"The current implementation of the backup functionality only supports local "
+"files as source files! Your current source file is '%1'."
+msgstr ""
+
+#: kmymoney2.cpp:1913
+msgid "Local files only"
+msgstr ""
+
+#: kmymoney2.cpp:1928
+#, c-format
+msgid "Mounting %1"
+msgstr "Montuojama %1"
+
+#: kmymoney2.cpp:1967
+msgid "Backup file for today exists on that device. Replace ?"
+msgstr ""
+
+#: dialogs/rc.cpp:7 kmymoney2.cpp:1967 kmymoney2.cpp:1994 kmymoney2.cpp:2024
+#: kmymoney2.cpp:2032 kmymoney2.cpp:2057 kmymoney2.cpp:2059
+msgid "Backup"
+msgstr "Atsarginė kopija"
+
+#: kmymoney2.cpp:1967
+msgid "&Replace"
+msgstr "Pa&keisti"
+
+#: kmymoney2.cpp:1972 kmymoney2.cpp:1997 kmymoney2.cpp:2016 kmymoney2.cpp:2035
+#, c-format
+msgid "Unmounting %1"
+msgstr ""
+
+#: kmymoney2.cpp:1987
+#, c-format
+msgid "Writing %1"
+msgstr ""
+
+#: kmymoney2.cpp:1994
+msgid "Error mounting device"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1995 kmymoney2.cpp:2023 kmymoney2.cpp:2055
+msgid "Done"
+msgstr "Atlikta"
+
+#: kmymoney2.cpp:2024 kmymoney2.cpp:2057
+msgid "File successfully backed up"
+msgstr ""
+
+#: kmymoney2.cpp:2032
+msgid "Error copying file to device"
+msgstr ""
+
+#: kmymoney2.cpp:2059
+msgid "Error unmounting device"
+msgstr ""
+
+#: kmymoney2.cpp:2143
+#, fuzzy, c-format
+msgid "Cannot add institution: %1"
+msgstr "Nepavyksta redaguoti institucijos:"
+
+#: kmymoney2.cpp:2185
+#, fuzzy, c-format
+msgid "Unable to store institution: %1"
+msgstr "Nepavyksta redaguoti institucijos:"
+
+#: kmymoney2.cpp:2192
+#, fuzzy, c-format
+msgid "Unable to edit institution: %1"
+msgstr "Nepavyksta redaguoti institucijos:"
+
+#: kmymoney2.cpp:2203
+msgid "Do you really want to delete institution <b>%1</b> ?"
+msgstr ""
+
+#: kmymoney2.cpp:2211 kmymoney2.cpp:2215
+#, fuzzy, c-format
+msgid "Unable to delete institution: %1"
+msgstr "Nepavyksta redaguoti institucijos:"
+
+#: kmymoney2.cpp:2268
+#, fuzzy, c-format
+msgid "Unable to find account: %1"
+msgstr "Nepavyksta pridėti operacijos: "
+
+#: kmymoney2.cpp:2309
+msgid ""
+"This account is a liability and if the opening balance represents money "
+"owed, then it should be negative. Negate the amount?\n"
+"\n"
+"Please click Yes to change the opening balance to %1,\n"
+"Please click No to leave the amount as %2,\n"
+"Please click Cancel to abort the account creation."
+msgstr ""
+
+#: kmymoney2.cpp:2345 kmymoney2.cpp:2346
+msgid "Loan payout"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:892 kmymoney2.cpp:2374
+#, fuzzy, c-format
+msgid "Unable to add account: %1"
+msgstr "Nepavyksta pridėti operacijos: "
+
+#: kmymoney2.cpp:2392
+msgid ""
+"The category <b>%1</b> currently does not exist. Do you want to create it?"
+"<p><i>The parent account will default to <b>%2</b> but can be changed in the "
+"following dialog</i>."
+msgstr ""
+
+#: kmymoney2.cpp:2392
+msgid "Create category"
+msgstr ""
+
+#: kmymoney2.cpp:2429
+msgid "Create a new Category"
+msgstr ""
+
+#: kmymoney2.cpp:2505
+#, fuzzy, c-format
+msgid "Unable to create account: %1"
+msgstr "Nepavyksta pridėti operacijos: "
+
+#: kmymoney2.cpp:2516
+msgid ""
+"The security <b>%1</b> currently does not exist as sub-account of <b>%2</b>. "
+"Do you want to create it?"
+msgstr ""
+
+#: kmymoney2.cpp:2517
+#, fuzzy
+msgid "Create security"
+msgstr "Trinti vertybinį popierį"
+
+#: kmymoney2.cpp:2551
+msgid "Do you really want to delete the investment <b>%1</b>?"
+msgstr ""
+
+#: kmymoney2.cpp:2551
+msgid "Delete investment"
+msgstr ""
+
+#: kmymoney2.cpp:2558
+#, fuzzy, c-format
+msgid "Unable to delete investment: %1"
+msgstr "Nepavyksta redaguoti institucijos:"
+
+#: kmymoney2.cpp:2640 kmymoney2.cpp:2646
+#, fuzzy
+msgid "Unable to add scheduled transaction: "
+msgstr "Nepavyksta pridėti operacijos: "
+
+#: kmymoney2.cpp:2722
+#, fuzzy
+msgid "Adjusting transactions..."
+msgstr "Priderinimo operacija"
+
+#: kmymoney2.cpp:2747
+#, fuzzy
+msgid "Adjusting scheduled transactions..."
+msgstr "Priderinimo operacija"
+
+#: kmymoney2.cpp:2765
+#, fuzzy
+msgid "Adjusting budgets..."
+msgstr "Išsaugojama byla..."
+
+#: kmymoney2.cpp:2783
+msgid ""
+"Unable to exchange category <b>%1</b> with category <b>%2</b>. Reason: %3"
+msgstr ""
+
+#: kmymoney2.cpp:2804
+msgid "Do you really want to delete category <b>%1</b>?"
+msgstr ""
+
+#: kmymoney2.cpp:2811
+msgid "Unable to delete category <b>%1</b>. Cause: %2"
+msgstr ""
+
+#: kmymoney2.cpp:2823
+msgid ""
+"Do you want to delete category <b>%1</b> with all its sub-categories or only "
+"the category itself? If you only delete the category itself, all its sub-"
+"categories will be made sub-categories of <b>%2</b>."
+msgstr ""
+
+#: kmymoney2.cpp:2827
+#, fuzzy
+msgid "Delete all"
+msgstr "Išrinkti visus"
+
+#: kmymoney2.cpp:2828
+#, fuzzy
+msgid "Just the category"
+msgstr "Nauja kategorija..."
+
+#: kmymoney2.cpp:2858
+msgid ""
+"Some sub-categories of category <b>%1</b> cannot be deleted, because they "
+"are still used. They will be made sub-categories of <b>%2</b>. Proceed?"
+msgstr ""
+
+#: kmymoney2.cpp:2878
+msgid "Unable to delete a sub-category of category <b>%1</b>. Reason: %2"
+msgstr ""
+
+#: kmymoney2.cpp:2889
+msgid "Do you really want to delete account <b>%1</b>?"
+msgstr ""
+
+#: kmymoney2.cpp:2901
+msgid "Unable to delete account '%1'. Cause: %2"
+msgstr ""
+
+#: kmymoney2.cpp:2917
+#, fuzzy
+msgid "Edit account '%1'"
+msgstr "Redaguoti sąskaitą"
+
+#: kmymoney2.cpp:2922
+#, fuzzy
+msgid "Edit category '%1'"
+msgstr "Nauja kategorija..."
+
+#: kmymoney2.cpp:3008
+#, fuzzy
+msgid "Unable to modify account '%1'. Cause: %2"
+msgstr "Nepavyksta pakeisti tvarkaraščio: "
+
+#: kmymoney2.cpp:3065
+msgid ""
+"KMyMoney has detected some overdue scheduled transactions for this account. "
+"Do you want to enter those scheduled transactions now?"
+msgstr ""
+
+#: kmymoney2.cpp:3065
+#, fuzzy
+msgid "Scheduled transactions found"
+msgstr "Įvesti operaciją pagal tvarkaraštį"
+
+#: kmymoney2.cpp:3163
+msgid ""
+"You are about to finish the reconciliation of this account with a difference "
+"between your bank statement and the transactions marked as cleared.\n"
+"Are you sure you want to finish the reconciliation ?"
+msgstr ""
+
+#: kmymoney2.cpp:3165
+msgid "Confirm end of reconciliation"
+msgstr ""
+
+#: kmymoney2.cpp:3339
+msgid ""
+"You have closed this account. It remains in the system because you have "
+"transactions which still refer to it, but is not shown in the views. You can "
+"make it visible again by going to the View menu and selecting <b>Show all "
+"accounts</b> or by unselecting the <b>Don't show closed accounts</b> setting."
+msgstr ""
+
+#: kmymoney2.cpp:3379
+msgid "<b>%1</b> cannot be moved to institution <b>%2</b>. Reason: %3"
+msgstr ""
+
+#: kmymoney2.cpp:3393
+msgid "<b>%1</b> cannot be moved to <b>%2</b>. Reason: %3"
+msgstr ""
+
+#: kmymoney2.cpp:3408
+#, fuzzy
+msgid "%1 YTD Account Transactions"
+msgstr "Mokesčių operacijos"
+
+#: dialogs/kbalancechartdlg.cpp:71 kmymoney2.cpp:3409
+#: views/kforecastview.cpp:650 views/khomeview.cpp:276
+#: views/khomeview.cpp:1384 views/kreportsview.cpp:619
+#, fuzzy
+msgid "Generated Report"
+msgstr "Trinti ataskaitą?"
+
+#: dialogs/rc.cpp:324 dialogs/settings/rc.cpp:80 kmymoney2.cpp:3411
+#: views/kreportsview.cpp:1062 views/rc.cpp:58 views/rc.cpp:59
+msgid "Transactions"
+msgstr "Operacijos"
+
+#: kmymoney2.cpp:3449
+#, fuzzy, c-format
+msgid "Unable to add scheduled transaction: %1"
+msgstr "Nepavyksta pakeisti tvarkaraščio: "
+
+#: kmymoney2.cpp:3449
+#, fuzzy
+msgid "Add scheduled transaction"
+msgstr "Įvesti operaciją pagal tvarkaraštį"
+
+#: kmymoney2.cpp:3489
+msgid ""
+"You have entered a scheduled transaction date of <b>%1</b>. Because the "
+"scheduled transaction was last paid on <b>%2</b>, KMyMoney will "
+"automatically adjust the scheduled transaction date to the next date unless "
+"the last payment date is reset. Do you want to reset the last payment date?"
+msgstr ""
+
+#: kmymoney2.cpp:3489
+#, fuzzy
+msgid "Reset Last Payment Date"
+msgstr "Pranešimo data:"
+
+#: kmymoney2.cpp:3499 kmymoney2.cpp:3519 kmymoney2.cpp:3531
+#, fuzzy
+msgid "Unable to modify scheduled transaction '%1'"
+msgstr "Nepavyksta pakeisti tvarkaraščio: "
+
+#: kmymoney2.cpp:3543
+#, fuzzy
+msgid "Are you sure you want to delete the scheduled transaction <b>%1</b>?"
+msgstr "Naudokite tai norėdami ištrinti pažymėtą profilį"
+
+#: kmymoney2.cpp:3546
+msgid ""
+"In case of loan payments it is currently not possible to recreate the "
+"scheduled transaction."
+msgstr ""
+
+#: kmymoney2.cpp:3555
+#, fuzzy
+msgid "Unable to remove scheduled transaction '%1'"
+msgstr "Nepavyksta pakeisti tvarkaraščio: "
+
+#: kmymoney2.cpp:3569
+#, c-format
+msgid ""
+"_: Copy of scheduled transaction name\n"
+"Copy of %1"
+msgstr ""
+
+#: kmymoney2.cpp:3581 kmymoney2.cpp:4352
+#, fuzzy
+msgid "Unable to duplicate transaction(s): %1, thrown in %2:%3"
+msgstr "Nepavyksta pridėti operacijos: "
+
+#: kmymoney2.cpp:3595
+#, fuzzy
+msgid ""
+"Do you really want to skip the <b>%1</b> transaction scheduled for <b>%2</b>?"
+msgstr "Naudokite tai norėdami ištrinti pažymėtą profilį"
+
+#: kmymoney2.cpp:3605
+#, fuzzy
+msgid "Unable to skip scheduled transaction <b>%1</b>."
+msgstr "Nepavyksta pakeisti tvarkaraščio: "
+
+#: kmymoney2.cpp:3618
+#, fuzzy
+msgid "Unknown scheduled transaction '%1'"
+msgstr "Įvesti operaciją pagal tvarkaraštį"
+
+#: kmymoney2.cpp:3673
+msgid ""
+"Are you sure you wish to stop this scheduled transaction from being entered "
+"into the register?\n"
+"\n"
+"KMyMoney will prompt you again next time it starts unless you manually enter "
+"it later."
+msgstr ""
+
+#: kmymoney2.cpp:3725 kmymoney2.cpp:3732
+#, fuzzy
+msgid "Unable to enter scheduled transaction '%1'"
+msgstr "Įvesti operaciją pagal tvarkaraštį"
+
+#: kmymoney2.cpp:3743 kmymoney2.cpp:3783
+msgid "New Payee"
+msgstr "Naujas korespondentas"
+
+#: kmymoney2.cpp:3745
+msgid "Do you want to add <b>%1</b> as payer/receiver ?"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:892 kmymoney2.cpp:3747
+msgid "New payee/receiver"
+msgstr "Naujas korespondentas"
+
+#: kmymoney2.cpp:3773
+msgid "Unable to add payee"
+msgstr ""
+
+#: kmymoney2.cpp:3826
+#, fuzzy
+msgid "Do you really want to remove the payee <b>%1</b>?"
+msgstr "Naudokite tai norėdami ištrinti pažymėtą profilį"
+
+#: kmymoney2.cpp:3828
+msgid "Do you really want to remove all selected payees?"
+msgstr ""
+
+#: kmymoney2.cpp:3830
+msgid "Remove Payee"
+msgstr "Šalinti korespondentą"
+
+#: kmymoney2.cpp:3870
+msgid ""
+"At least one transaction/scheduled transaction is still referenced by a "
+"payee. Currently you have all payees selected. However, at least one payee "
+"must remain so that the transaction/scheduled transaction can be reassigned."
+msgstr ""
+
+#: kmymoney2.cpp:3925
+#, fuzzy
+msgid "Unable to reassign payee of transaction/split"
+msgstr "Nepavyksta pašalinti operacijos"
+
+#: converter/mymoneyqifreader.cpp:534 converter/mymoneystatementreader.cpp:959
+#: kmymoney2.cpp:3926 kmymoney2.cpp:3983 views/kbudgetview.cpp:636
+#: views/kbudgetview.cpp:737 views/kbudgetview.cpp:751
+#: views/kpayeesview.cpp:519 views/kpayeesview.cpp:870
+msgid "thrown in"
+msgstr "įmesti"
+
+#: kmymoney2.cpp:3982
+#, fuzzy
+msgid "Unable to remove payee(s)"
+msgstr "Nepavyksta pašalinti operacijos"
+
+#: kmymoney2.cpp:3990
+msgid "Enter ISO 4217 code for the new currency"
+msgstr ""
+
+#: kmymoney2.cpp:3999
+#, fuzzy, c-format
+msgid "Cannot create new currency. %1"
+msgstr "Sukurti naują kainos įrašą."
+
+#: kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, fuzzy, c-format
+msgid "Cannot rename currency. %1"
+msgstr "Sukurti naują kainos įrašą."
+
+#: kmymoney2.cpp:4039
+#, fuzzy
+msgid "Cannot delete currency %1. %2"
+msgstr "Sukurti naują kainos įrašą."
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+#, fuzzy
+msgid "Cannot set %1 as base currency: %2"
+msgstr "Pasirinkite pagrindinę valiutą"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+#, fuzzy
+msgid "Set base currency"
+msgstr "Pasirinkite pagrindinę valiutą"
+
+#: kmymoney2.cpp:4065
+#, c-format
+msgid "Budget %1"
+msgstr ""
+
+#: kmymoney2.cpp:4075
+msgid "Budget %1 (%2)"
+msgstr ""
+
+#: kmymoney2.cpp:4090 kmymoney2.cpp:4139
+msgid "Unable to add budget: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4105
+#, fuzzy
+msgid "Do you really want to remove the budget <b>%1</b>?"
+msgstr "Naudokite tai norėdami ištrinti pažymėtą profilį"
+
+#: kmymoney2.cpp:4107
+msgid "Do you really want to remove all selected budgets?"
+msgstr ""
+
+#: kmymoney2.cpp:4109
+#, fuzzy
+msgid "Remove Budget"
+msgstr "Šalinti korespondentą"
+
+#: kmymoney2.cpp:4122
+#, fuzzy
+msgid "Unable to remove budget: %1, thrown in %2:%3"
+msgstr "Nepavyksta pašalinti operacijos"
+
+#: kmymoney2.cpp:4134 views/kreportsview.cpp:659
+#, c-format
+msgid "Copy of %1"
+msgstr ""
+
+#: kmymoney2.cpp:4164
+#, fuzzy
+msgid "Select year"
+msgstr "Pasirinkite metus"
+
+#: kmymoney2.cpp:4164
+#, fuzzy
+msgid "Budget year"
+msgstr "Kiti metai"
+
+#: kmymoney2.cpp:4176 kmymoney2.cpp:4214 kmymoney2.cpp:4274
+msgid "Unable to modify budget: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4192 kmymoney2.cpp:4250
+msgid ""
+"The current budget already contains data. Continuing will replace all "
+"current values of this budget."
+msgstr ""
+
+#: kmymoney2.cpp:4222
+msgid ""
+"Please be aware that changes made in the following dialog affect all KDE "
+"applications not only KMyMoney."
+msgstr ""
+
+#: kmymoney2.cpp:4292
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to delete the transactions anyway?"
+msgstr ""
+
+#: kmymoney2.cpp:4295 views/kgloballedgerview.cpp:1043
+msgid "Transaction already reconciled"
+msgstr ""
+
+#: kmymoney2.cpp:4301
+#, fuzzy
+msgid "Do you really want to delete the selected transaction?"
+msgstr "Naudokite tai norėdami ištrinti pažymėtą profilį"
+
+#: kmymoney2.cpp:4303
+msgid "Do you really want to delete all %1 selected transactions?"
+msgstr ""
+
+#: kmymoney2.cpp:4305
+msgid "Delete transaction"
+msgstr "Trinti operaciją"
+
+#: kmymoney2.cpp:4306
+#, fuzzy
+msgid "Deleting transactions"
+msgstr "Trinti operaciją"
+
+#: kmymoney2.cpp:4321
+#, fuzzy
+msgid "Duplicating transactions"
+msgstr "Skelti operaciją"
+
+#: kmymoney2.cpp:4378
+#, fuzzy
+msgid "Unable to delete transaction(s): %1, thrown in %2:%3"
+msgstr "Nepavyksta pridėti operacijos: "
+
+#: kmymoney2.cpp:4452 kmymoney2.cpp:4622
+#, fuzzy
+msgid "Unable to modify transaction: %1, thrown in %2:%3"
+msgstr "Nepavyksta pridėti operacijos: "
+
+#: kmymoney2.cpp:4514
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling and<br>- <b>Cancel</b> returns to the "
+"transaction editor.<p>You can also select an option to save the transaction "
+"automatically when e.g. selecting another transaction."
+msgstr ""
+
+#: kmymoney2.cpp:4514 kmymoney2.cpp:4517
+#, fuzzy
+msgid "Cancel transaction edit"
+msgstr "Galiojanti operacija"
+
+#: kmymoney2.cpp:4517
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling.<p>You can also select an option to save the "
+"transaction automatically when e.g. selecting another transaction."
+msgstr ""
+
+#: kmymoney2.cpp:4667
+#, fuzzy
+msgid "Unable to accept transaction: %1, thrown in %2:%3"
+msgstr "Nepavyksta pridėti operacijos: "
+
+#: kmymoney2.cpp:4846
+#, fuzzy
+msgid "Unable to unmatch the selected transactions"
+msgstr "Nepavyksta pašalinti operacijos"
+
+#: kmymoney2.cpp:4885
+msgid "No manually entered transaction selected for matching"
+msgstr ""
+
+#: kmymoney2.cpp:4887
+msgid "No imported transaction selected for matching"
+msgstr ""
+
+#: kmymoney2.cpp:4895
+#, fuzzy
+msgid "Unable to match the selected transactions"
+msgstr "Nepavyksta pašalinti operacijos"
+
+#: kmymoney2.cpp:5097
+#, fuzzy
+msgid "Create a new transaction"
+msgstr "Trinti operaciją"
+
+#: kmymoney2.cpp:5163
+#, fuzzy
+msgid "Duplicate the current selected transactions"
+msgstr "Trinti pasirinktą profilį"
+
+#: kmymoney2.cpp:5223
+#, fuzzy
+msgid ""
+"_: Button text for unmatch transaction\n"
+"Unmatch"
+msgstr "Bet kokia operacija"
+
+#: kmymoney2.cpp:5451 kmymoney2.cpp:5473
+msgid "Goto '%1'"
+msgstr ""
+
+#: kmymoney2.cpp:5582
+msgid "Running consistency check..."
+msgstr ""
+
+#: kmymoney2.cpp:5590
+#, c-format
+msgid "Consistency check failed: %1"
+msgstr ""
+
+#: kmymoney2.cpp:5594
+msgid "Consistency check result"
+msgstr ""
+
+#: kmymoney2.cpp:5603
+#, fuzzy
+msgid "Checking for overdue scheduled transactions..."
+msgstr "Įvesti operaciją pagal tvarkaraštį"
+
+#: kmymoney2.cpp:5740
+msgid ""
+"You must first select a KMyMoney file before you can import a statement."
+msgstr ""
+
+#: kmymoney2.cpp:5746
+msgid "Importing a statement via Web Connect"
+msgstr ""
+
+#: kmymoney2.cpp:5759
+msgid ""
+"Unable to import %1 using %2 plugin. The plugin returned the following "
+"error: %3"
+msgstr ""
+
+#: kmymoney2.cpp:5759 plugins/ofximport/ofximporterplugin.cpp:646
+msgid "Importing error"
+msgstr ""
+
+#: kmymoney2.cpp:5780
+msgid "All messages have been enabled."
+msgstr ""
+
+#: kmymoney2.cpp:5780
+msgid "All messages"
+msgstr ""
+
+#: kmymoney2.cpp:5855
+#, fuzzy
+msgid "Auto saving..."
+msgstr "Išsaugojama byla..."
+
+#: kmymoney2.cpp:5913
+#, fuzzy
+msgid "Unable to setup online parameters for account ''%1'"
+msgstr "Nepavyksta pridėti operacijos: "
+
+#: kmymoney2.cpp:5928
+msgid ""
+"Do you really want to remove the mapping of account <b>%1</b> to an online "
+"account? Depending on the details of the online banking method used, this "
+"action cannot be reverted."
+msgstr ""
+
+#: kmymoney2.cpp:5928
+#, fuzzy
+msgid "Remove mapping to online account"
+msgstr "Koks yra sąskaitos pavadinimas?"
+
+#: kmymoney2.cpp:5939
+#, fuzzy, c-format
+msgid "Unable to unmap account from online account: %1"
+msgstr "Nepavyksta pridėti operacijos: "
+
+#: kmymoney2.cpp:5956
+#, fuzzy
+msgid " (Brokerage)"
+msgstr "&Naršyti"
+
+#: kmymoney2.cpp:5957
+msgid ""
+"You try to map a brokerage account to an online account. This is usually not "
+"advisable. In general, the investment account should be mapped to the online "
+"account. Please cancel if you intended to map the investment account, "
+"continue otherwise"
+msgstr ""
+
+#: kmymoney2.cpp:5957
+#, fuzzy
+msgid "Mapping brokerage account"
+msgstr "Išskirtinė sąskaita"
+
+#: kmymoney2.cpp:5964
+msgid "Select online banking plugin"
+msgstr ""
+
+#: kmymoney2.cpp:6005
+#, fuzzy, c-format
+msgid "Unable to map account to online account: %1"
+msgstr "Nepavyksta pridėti operacijos: "
+
+#: converter/mymoneyqifreader.cpp:407 converter/mymoneytemplate.cpp:73
+#: views/kmymoneyview.cpp:590
+msgid "Error while loading file '%1'!"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:409 converter/mymoneyqifreader.cpp:965
+#: converter/mymoneytemplate.cpp:75 views/kmymoneyview.cpp:592
+msgid "File access error"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:84
+msgid "<b>%1</b> is not a template file."
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:85 views/kmymoneyview.cpp:603
+msgid "Filetype Error"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:93
+msgid "Error while reading template file <b>%1</b> in line %2, column %3"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:94
+msgid "Template Error"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:101
+msgid "File '%1' not found!"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:142
+msgid "Invalid tag <b>%1</b> in template file <b>%2</b>!"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:214
+#, c-format
+msgid "Loading template %1"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:241
+msgid "Invalid top-level account type <b>%1</b> in template file <b>%2</b>!"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:309
+msgid ""
+"Invalid flag type <b>%1</b> for account <b>%3</b> in template file <b>%2</b>!"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:398 converter/mymoneytemplate.cpp:401
+#: views/kmymoneyview.cpp:1151 views/kmymoneyview.cpp:1154
+msgid "Unable to write changes to '%1'"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:407 views/kmymoneyview.cpp:1162
+msgid "Unable to upload to '%1'"
+msgstr ""
+
+#: converter/mymoneyqifwriter.cpp:70
+msgid ""
+"Unexpected exception '%1' thrown in %2, line %3 caught in MyMoneyQifWriter::"
+"write()"
+msgstr ""
+
+#: converter/mymoneyqifwriter.cpp:80
+msgid "Unable to open file '%1' for writing"
+msgstr "Nepavyksta atverti „%1“ bylos rašymui"
+
+#: converter/webpricequote.cpp:340
+#, c-format
+msgid "Symbol found: %1"
+msgstr ""
+
+#: converter/webpricequote.cpp:368
+msgid "Price found: %1 (%2)"
+msgstr ""
+
+#: converter/webpricequote.cpp:380
+#, c-format
+msgid "Date found: %1"
+msgstr ""
+
+#: converter/webpricequote.cpp:397 converter/webpricequote.cpp:403
+#, c-format
+msgid "Unable to update price for %1"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:170
+msgid ""
+"_: Category name\n"
+"Reinvested dividend"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:173
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (long term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:176
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (short term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:179
+msgid ""
+"_: Category name\n"
+"Dividend"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:182
+msgid ""
+"_: Category name\n"
+"Interest"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:185
+msgid ""
+"_: Category name\n"
+"Capital Gain (short term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:188
+msgid ""
+"_: Category name\n"
+"Capital Gain (mid term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:191
+msgid ""
+"_: Category name\n"
+"Capital Gain (long term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:194
+msgid ""
+"_: Category name\n"
+"Returned capital"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:197
+msgid ""
+"_: Category name\n"
+"Miscellaneous income"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:200
+msgid ""
+"_: Category name\n"
+"Miscellaneous expense"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:203
+msgid ""
+"_: Category name\n"
+"Investment fees"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:205
+#, c-format
+msgid "Unknown QIF type %1"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:355
+#, fuzzy
+msgid "Date format selection"
+msgstr "Korespondento informacija"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Pick the date format that suits your input file"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:366
+#, fuzzy
+msgid "Importing QIF ..."
+msgstr "Importuojami sąskaitų šablonai."
+
+#: converter/mymoneyqifreader.cpp:442
+msgid "Reading QIF ..."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Adding transactions"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Now adding the transactions to your ledger..."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:533
+#, fuzzy
+msgid "Unable to add transactions"
+msgstr "Nepavyksta pridėti operacijos: "
+
+#: converter/mymoneyqifreader.cpp:567
+msgid ""
+"_: QIF tag for liability account\n"
+"Oth L"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:572
+msgid ""
+"_: QIF tag for category\n"
+"Cat"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:575
+msgid ""
+"_: QIF tag for security\n"
+"Security"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:578
+msgid ""
+"_: QIF tag for investment account\n"
+"Invst"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:581
+msgid ""
+"_: QIF tag for prices\n"
+"Prices"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:599
+msgid ""
+"_: QIF tag for a class\n"
+"Class"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:753 converter/mymoneyqifreader.cpp:2203
+msgid ""
+"The %1 account currently has an opening balance of %2. This QIF file reports "
+"an opening balance of %3. Would you like to overwrite the current balance "
+"with the one from the QIF file?"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:754 converter/mymoneyqifreader.cpp:2204
+msgid "Overwrite opening balance"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:879 converter/mymoneyqifreader.cpp:890
+#: converter/mymoneyqifreader.cpp:914
+msgid "Autogenerated by QIF importer"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:907
+#, fuzzy
+msgid "QIF imported, no account name supplied"
+msgstr "Importuojami sąskaitų šablonai."
+
+#: converter/mymoneyqifreader.cpp:940
+msgid ""
+"KMyMoney has imported a second opening balance transaction into account <b>%"
+"1</b> which differs from the one found already on file. Please correct this "
+"manually once the import is done."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:940
+#, fuzzy
+msgid "Opening balance problem"
+msgstr "Atidarymo balanso tekstas"
+
+#: converter/mymoneyqifreader.cpp:963
+#, fuzzy
+msgid "Error while creating opening balance transaction"
+msgstr "Įvesti operaciją pagal tvarkaraštį"
+
+#: converter/mymoneyqifreader.cpp:1029 converter/mymoneyqifreader.cpp:1276
+msgid ""
+"The date entry \"%1\" read from the file cannot be interpreted through the "
+"current date profile setting of \"%2\".\n"
+"\n"
+"Pressing \"Continue\" will assign todays date to the transaction. Pressing "
+"\"Cancel\" will abort the import operation. You can then restart the import "
+"and select a different QIF profile or create a new one."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1035 converter/mymoneyqifreader.cpp:1282
+msgid "Invalid date format"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1398
+#: converter/mymoneystatementreader.cpp:589
+#: converter/mymoneystatementreader.cpp:592
+msgid "Statement Importer"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1413
+#: converter/mymoneystatementreader.cpp:644
+msgid ""
+"This investment account does not contain the \"%1\" security. Transactions "
+"involving this security will be ignored."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1415
+#: converter/mymoneystatementreader.cpp:612
+#: converter/mymoneystatementreader.cpp:644
+msgid "Security not found"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2021
+#, fuzzy
+msgid "%1 (Investment)"
+msgstr "Investicija"
+
+#: converter/mymoneyqifreader.cpp:2022
+msgid "Autogenerated by QIF importer from type Mutual account entry"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2085 converter/mymoneyqifreader.cpp:2228
+msgid "account"
+msgstr "sąskaita"
+
+#: converter/mymoneyqifreader.cpp:2086
+msgid "al"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2093
+msgid "category"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2094
+msgid "ei"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2095
+msgid "Category selection"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2110
+msgid "Account \"%1\" disappeared: "
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2131
+msgid "The %1 '%2' does not exist. Do you want to create it?"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2140
+#, c-format
+msgid "Select %1"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2142
+msgid ""
+"The %1 <b>%2</b> currently exists. Do you want to import transactions to "
+"this account?"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2147
+msgid ""
+"The %1 <b>%2</b> currently does not exist. You can create a new %3 by "
+"pressing the <b>Create</b> button or select another %4 manually from the "
+"selection box."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2154
+#, c-format
+msgid "Import transactions to %1"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2155
+msgid ""
+"No %1 information has been found in the selected QIF file. Please select an "
+"account using the selection box in the dialog or create a new %2 by pressing "
+"the <b>Create</b> button."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2229
+msgid "You must select or create an account."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2231
+msgid "You must select or create a category."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:100
+#, fuzzy
+msgid "_Fees"
+msgstr "Savaitės"
+
+#: converter/mymoneystatementreader.cpp:106
+msgid "_Dividend"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:289
+#, c-format
+msgid "Importing statement for account %1"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:291
+#, fuzzy
+msgid "Importing statement without transactions"
+msgstr "Priderinimo operacija"
+
+#: converter/mymoneystatementreader.cpp:385
+#, fuzzy
+msgid " Statement balance is not contained in statement."
+msgstr "Šio pranešimo pradžios balansas:"
+
+#: converter/mymoneystatementreader.cpp:387
+msgid " Statement balance on %1 is reported to be %2"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:389
+#, fuzzy
+msgid " Transactions"
+msgstr "Operacijos"
+
+#: converter/mymoneystatementreader.cpp:390
+msgid " %1 processed"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:391
+msgid " %1 added"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:392
+msgid " %1 matched"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:393
+#, fuzzy
+msgid " %1 duplicates"
+msgstr "Dublikuoti"
+
+#: converter/mymoneystatementreader.cpp:394
+#, fuzzy
+msgid " Payees"
+msgstr "Korespondentai"
+
+#: converter/mymoneystatementreader.cpp:395
+msgid " %1 created"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:483
+#, c-format
+msgid "Error creating security record: %1"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:612
+msgid ""
+"This imported statement contains investment transactions with no security. "
+"These transactions will be ignored."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:803
+msgid "(Fees) "
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:880
+msgid ""
+"Do you want to add \"%1\" as payee/receiver?\n"
+"\n"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:881
+msgid ""
+"Selecting \"Yes\" will create the payee, \"No\" will skip creation of a "
+"payee record and remove the payee information from this transaction. "
+"Selecting \"Cancel\" aborts the import operation.\n"
+"\n"
+"If you select \"No\" here and mark the \"Don't ask again\" checkbox, the "
+"payee information for all following transactions referencing \"%1\" will be "
+"removed."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:917
+#, fuzzy
+msgid "Save Category"
+msgstr "Kategorija"
+
+#: converter/mymoneystatementreader.cpp:918
+#, fuzzy
+msgid "No Category"
+msgstr "Aukščiausia kategorija"
+
+#: converter/mymoneystatementreader.cpp:919 dialogs/rc.cpp:4
+msgid "Abort"
+msgstr "Nutraukti"
+
+#: converter/mymoneystatementreader.cpp:926
+msgid "Please select a default category for payee '%1':"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:958
+msgid "Unable to add payee/receiver"
+msgstr "Nepavyko pridėti korespondento"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid ""
+"KMyMoney has found a scheduled transaction named <b>%1</b> which matches an "
+"imported transaction. Do you want KMyMoney to enter this schedule now so "
+"that the transaction can be matched? "
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1162
+#, fuzzy
+msgid "Schedule found"
+msgstr "Tvarkaraštis"
+
+#: converter/mymoneystatementreader.cpp:1219
+#, fuzzy
+msgid "Problem adding or matching imported transaction with id '%1': %2"
+msgstr "Nepavyksta pridėti operacijos: "
+
+#: converter/mymoneystatementreader.cpp:1268
+msgid ""
+"<b>You have downloaded a statement for the following account:</b><br><br>"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1269
+#, fuzzy, c-format
+msgid " - Account Name: %1"
+msgstr " - Sąskaitos numeris: %1<br>"
+
+#: converter/mymoneystatementreader.cpp:1270
+#, fuzzy, c-format
+msgid " - Account Type: %1"
+msgstr "Sąskaitos"
+
+#: converter/mymoneystatementreader.cpp:1271
+#, fuzzy, c-format
+msgid " - Account Number: %1"
+msgstr " - Sąskaitos numeris: %1<br>"
+
+#: converter/mymoneystatementreader.cpp:1279
+msgid "Do you want to import transactions to this account?"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1281
+msgid ""
+"KMyMoney cannot determine which of your accounts to use. You can create a "
+"new account by pressing the <b>Create</b> button or select another one "
+"manually from the selection box below."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1287
+msgid ""
+"No account information has been found in the selected statement file. Please "
+"select an account using the selection box in the dialog or create a new "
+"account by pressing the <b>Create</b> button."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1294
+msgid "Import transactions"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1330
+msgid ""
+"You must select an account, create a new one, or press the <b>Abort</b> "
+"button."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:119
+msgid "%1: Sorry. This importer cannot handle version %2 of element %3"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:193
+#, c-format
+msgid "Account%1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:197
+#, c-format
+msgid "Stock%1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:206
+#, c-format
+msgid "Payee%1"
+msgstr "Korespondentas %1"
+
+#: converter/mymoneygncreader.cpp:212
+#, c-format
+msgid "Schedule%1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:262
+msgid "This version of the importer cannot handle multi-book files."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:912
+msgid "Invalid header for file. Should be 'gnc-v2'"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:937 converter/mymoneygncreader.cpp:972
+#: converter/mymoneygncreader.cpp:1062
+#, fuzzy, c-format
+msgid ""
+"Import failed:\n"
+"\n"
+"%1"
+msgstr "Importuojami sąskaitų šablonai."
+
+#: converter/mymoneygncreader.cpp:1065
+#, fuzzy
+msgid "Import complete"
+msgstr "Importuojami sąskaitų šablonai."
+
+#: converter/mymoneygncreader.cpp:1120
+msgid "Disguise your wealth"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1121
+msgid ""
+"Each monetary value on your file will be multiplied by a random number "
+"between 0.01 and 1.99\n"
+"with a different value used for each transaction. In addition, to further "
+"disguise the true\n"
+"values, you may enter a number between %1 and %2 which will be applied to "
+"all values.\n"
+"These numbers will not be stored in the file."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1135
+msgid "Loading commodities..."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1160
+msgid "Loading prices..."
+msgstr "Įkeliamos kainos..."
+
+#: converter/mymoneygncreader.cpp:1164 converter/mymoneygncreader.cpp:1171
+msgid "Imported History"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1251
+#, c-format
+msgid "Current importer does not recognize GnuCash account type %1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1471
+msgid "Imported Transaction"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1519
+msgid "Loading templates..."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1531
+msgid "Unknown payee"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1723
+msgid "Loading schedules..."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1735
+#, c-format
+msgid "Can't find template transaction for schedule %1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1910
+msgid "Reorganizing accounts..."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1972
+msgid ""
+"Your main currency seems to be %1 (%2); do you want to set this as your base "
+"currency?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1993
+msgid "More"
+msgstr "Daugiau"
+
+#: converter/mymoneygncreader.cpp:1997
+#, fuzzy
+msgid "Save Report"
+msgstr "Mėgstamiausios ataskaitos"
+
+#: converter/mymoneygncreader.cpp:2017
+msgid ""
+"Problems were encountered in converting schedule '%1'.\n"
+"Do you want to review or edit it now?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2039
+msgid ""
+"Found:\n"
+"\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2040
+msgid " commodities (equities)\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2041
+msgid " prices\n"
+msgstr " kainos\n"
+
+#: converter/mymoneygncreader.cpp:2042
+msgid " accounts\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2043
+msgid " transactions\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2044
+msgid " schedules\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2047
+msgid "No inconsistencies were detected"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2049
+msgid " inconsistencies were detected and corrected\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2054
+msgid " orphan accounts were created\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2059
+msgid " possible schedule problems were noted\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2064
+msgid "Small Business Features (Customers, Invoices, etc.)"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2065 views/kmymoneyview.cpp:241
+#: views/kmymoneyview.cpp:243
+msgid "Budgets"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2066
+#, fuzzy
+msgid "Lots"
+msgstr "Mėnesiai"
+
+#: converter/mymoneygncreader.cpp:2068
+msgid "The following features found in your file are not currently supported:"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2071
+msgid ""
+"\n"
+"\n"
+"Press More for further information"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2139
+msgid "Orphan created from unknown gnucash account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2170
+msgid "Internal error - invalid interval char in incrDate"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2233
+msgid "Enter the investment account name "
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2234
+msgid "My Investments"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2269
+#, c-format
+msgid "Select parent investment account or enter new name. Stock %1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2292 converter/mymoneygncreader.cpp:2307
+msgid "%1 is not an Investment Account. Do you wish to make it one?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2408
+msgid ""
+"An Investment account must be a child of an Asset account\n"
+"Account %1 will be stored under the main Asset account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2410
+msgid ""
+"An Income account must be a child of an Income account\n"
+"Account %1 will be stored under the main Income account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2412
+msgid ""
+"An Expense account must be a child of an Expense account\n"
+"Account %1 will be stored under the main Expense account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2414
+msgid ""
+"One or more transactions contain a reference to an otherwise unknown "
+"account\n"
+"An asset account with the name %1 has been created to hold the data"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2416
+msgid "Schedule %1 has interval of %2 which is not currently available"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2417
+msgid "Schedule %1 dropped at user request"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2418
+msgid "Schedule %1 contains unknown action (key = %2, type = %3)"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2419
+msgid "Schedule %1 contains multiple actions; only one has been imported"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2420
+msgid "Schedule %1 contains no valid splits"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2421
+msgid ""
+"Schedule %1 appears to contain a formula. GnuCash formulae are not "
+"convertible"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2422
+msgid ""
+"Schedule %1 contains unknown interval specification; please check for "
+"correct operation"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2423
+msgid ""
+"Schedule %1 contains a deferred interval specification; please check for "
+"correct operation"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2424
+msgid ""
+"Account or Category %1, transaction date %2; split contains invalid value; "
+"please check"
+msgstr ""
+
+#: kmymoneyutils.cpp:146
+msgid "&New Schedule..."
+msgstr "&Naujas tvarkaraštis..."
+
+#: kmymoneyutils.cpp:148
+msgid "Create a new schedule."
+msgstr "Sukurti naują tvarkaraštį."
+
+#: kmymoneyutils.cpp:149
+msgid "Use this to create a new schedule."
+msgstr "Naudokite tai norėdami sukurti naują tvarkaraštį."
+
+#: kmymoneyutils.cpp:158
+msgid "&Filter"
+msgstr "&Filtras"
+
+#: kmymoneyutils.cpp:160
+msgid "Filter out accounts"
+msgstr ""
+
+#: kmymoneyutils.cpp:161
+msgid "Use this to filter out accounts"
+msgstr ""
+
+#: kmymoneyutils.cpp:192
+msgid "Preferred accounts"
+msgstr ""
+
+#: kmymoneyutils.cpp:193
+msgid "Payment accounts"
+msgstr "Mokėjimų sąskaitos"
+
+#: kmymoneyutils.cpp:194
+msgid "Favorite reports"
+msgstr "Mėgstamiausios ataskaitos"
+
+#: kmymoneyutils.cpp:195
+#, fuzzy
+msgid "Forecast (schedule)"
+msgstr "Sukurti naują tvarkaraštį."
+
+#: kmymoneyutils.cpp:196
+#, fuzzy
+msgid "Networth forecast"
+msgstr "Grynoji vertė šiandien"
+
+#: kmymoneyutils.cpp:197
+msgid "Forecast (history)"
+msgstr ""
+
+#: kmymoneyutils.cpp:198
+#, fuzzy
+msgid "Assets and Liabilities"
+msgstr "Turtas ir įsipareigojimai"
+
+#: kmymoneyutils.cpp:199 reports/pivottable.cpp:2416 views/khomeview.cpp:1393
+#: widgets/rc.cpp:70
+msgid "Budget"
+msgstr ""
+
+#: kmymoneyutils.cpp:200
+#, fuzzy
+msgid "CashFlow"
+msgstr "Grynieji"
+
+#: dialogs/kenterscheduledlg.cpp:153 kmymoneyutils.cpp:366
+msgid "Unable to load schedule details"
+msgstr "Nepavyksta įkelti tvarkaraščio detalių"
+
+#: kmymoneyutils.cpp:390 widgets/register.cpp:473
+#, fuzzy
+msgid ""
+"_: Reconcile state 'Not reconciled'\n"
+"Not reconciled"
+msgstr "Nesutaikintos"
+
+#: kmymoneyutils.cpp:393 widgets/register.cpp:476
+#, fuzzy
+msgid ""
+"_: Reconcile state 'Cleared'\n"
+"Cleared"
+msgstr "Sutaikinimo vediklis"
+
+#: kmymoneyutils.cpp:396 widgets/register.cpp:479
+#, fuzzy
+msgid ""
+"_: Reconcile state 'Reconciled'\n"
+"Reconciled"
+msgstr "Nesutaikintos"
+
+#: kmymoneyutils.cpp:399 widgets/register.cpp:482
+#, fuzzy
+msgid ""
+"_: Reconcile state 'Frozen'\n"
+"Frozen"
+msgstr "Sutaikinimo vediklis"
+
+#: kmymoneyutils.cpp:410
+#, fuzzy
+msgid ""
+"_: Reconcile flag C\n"
+"C"
+msgstr "Sutaikintos"
+
+#: kmymoneyutils.cpp:413
+#, fuzzy
+msgid ""
+"_: Reconcile flag R\n"
+"R"
+msgstr "Sutaikintos"
+
+#: kmymoneyutils.cpp:416
+#, fuzzy
+msgid ""
+"_: Reconcile flag F\n"
+"F"
+msgstr "Sutaikintos"
+
+#: kmymoneyutils.cpp:419
+msgid ""
+"_: Flag for unknown reconciliation state\n"
+"?"
+msgstr ""
+
+#: _tips.cpp:3
+msgid ""
+"<p>...that you can change the sort order of ledger entries by\n"
+"right-clicking the header of the ledger view?\n"
+msgstr ""
+
+#: _tips.cpp:9
+msgid ""
+"<p>...that you can easily move to the other side of a transfer transaction\n"
+"by opening the context menu with the right mouse button and selecting one of "
+"the\n"
+"'Goto' functions?\n"
+msgstr ""
+
+#: _tips.cpp:16
+msgid ""
+"<p>...that you can start editing a transaction by double-clicking on the\n"
+"transaction in the register?\n"
+msgstr ""
+
+#: _tips.cpp:22
+msgid ""
+"<p>...that you can show more details of the selected transaction in the\n"
+"register by selecting the 'ledger lens' feature in the settings dialog?\n"
+msgstr ""
+
+#: _tips.cpp:28
+msgid ""
+"<p>...that transactions with no category assigned or split\n"
+"transactions with unassigned values are marked with an exclamation mark \n"
+"on a yellow triangle in the register?\n"
+msgstr ""
+
+#: _tips.cpp:35
+msgid ""
+"<p>...that you can show all details of the transactions in the register\n"
+"by typing &lt;Ctrl-T&gt; or selecting the 'Settings/Show Transaction "
+"Detail'\n"
+"menu entry? You can turn this feature off the same way.\n"
+msgstr ""
+
+#: _tips.cpp:42
+msgid ""
+"<p>...that you can switch between a listing of all accounts or\n"
+"an icon view of all asset and liability accounts with the tabs\n"
+"in the accounts view?\n"
+msgstr ""
+
+#: _tips.cpp:49
+msgid "<p>...that the KMyMoney development team wishes you a nice day?\n"
+msgstr ""
+
+#: _tips.cpp:54
+msgid ""
+"<p>...you can use your own external filter program to convert any\n"
+"import format to QIF on the fly? See the QIF profile editor for\n"
+"more details.\n"
+msgstr ""
+
+#: _tips.cpp:61
+msgid ""
+"<p>...that you can create a scheduled transaction from an existing\n"
+"one by selecting the context menu on a transaction in the ledger\n"
+"or the \"More...\"-menu in the transaction form?\n"
+msgstr ""
+
+#: _tips.cpp:68
+msgid ""
+"<p>...that you can switch to the payee of a transaction\n"
+"by selecting the context menu on a transaction in the ledger\n"
+"or in the transaction menu?\n"
+msgstr ""
+
+#: _tips.cpp:75
+msgid ""
+"<p>...that you can modify the colors and fonts used for the ledgers\n"
+"via <i>Configure/Register/...</i>?\n"
+msgstr ""
+
+#: _tips.cpp:81
+msgid ""
+"<p>...that you can hide transactions prior to a specific date?\n"
+"The date can be modified via <i>Configure/Register/Filter</i>.\n"
+msgstr ""
+
+#: _tips.cpp:87
+msgid ""
+"<p>...that you can customize the \"Home-Page\"\n"
+"via <i>Configure/Home</i>?\n"
+msgstr ""
+
+#: _tips.cpp:93
+msgid ""
+"<p>...that you can enter new transactions even while reconciling\n"
+"an account? You can also make the transaction form visible.\n"
+msgstr ""
+
+#: _tips.cpp:99
+msgid ""
+"<p>...that you can actively support the KMyMoney development team in\n"
+"cases that heavily depend on your data? You can save your data in an\n"
+"anonymized way for this support.<p>\n"
+"Just open your data file and immediately\n"
+"select <b>File/Save as...</b>. In the <b>Save As...</b> dialog\n"
+"select the filter <b>Anonymous Files</b> and make sure your file gets\n"
+"the extensions <b>.anon.xml</b>. <p>\n"
+"To verify, how the data looks like you are about to send away, you can open\n"
+"this file in KMyMoney and see how the developers see your data.\n"
+msgstr ""
+
+#: _tips.cpp:112
+msgid ""
+"<p>... that you can import your bank statements even without a network \n"
+"connection? Just select the file (OFX or QIF) from the File->Import menu.</"
+"p>\n"
+"<p>Provided by Jose Jorge</p>\n"
+msgstr ""
+
+#: reports/listtable.cpp:159 reports/listtable.cpp:163
+#: reports/pivottable.cpp:1564
+msgid ""
+"_: Report date range\n"
+"%1 through %2"
+msgstr ""
+
+#: reports/listtable.cpp:171 reports/pivottable.cpp:1571
+#, c-format
+msgid "All currencies converted to %1"
+msgstr "Visos valiutos konvertuotos į: %1"
+
+#: reports/listtable.cpp:172 reports/pivottable.cpp:1328
+msgid "All currencies converted to %1\n"
+msgstr "Visos valiutos konvertuotos į valiutą: %1\n"
+
+#: reports/listtable.cpp:176 reports/pivottable.cpp:1573
+msgid "All values shown in %1 unless otherwise noted"
+msgstr "Visos vertės rodomos: %1 (jei kitaip nepažymėta)"
+
+#: reports/listtable.cpp:177 reports/pivottable.cpp:1330
+msgid "All values shown in %1 unless otherwise noted\n"
+msgstr "Viso reikšmės, jei kitaip nepažymėta, rodomos valiuta: %1\n"
+
+#: dialogs/kequitypriceupdatedlg.cpp:73 dialogs/kfindtransactiondlg.cpp:188
+#: dialogs/rc.cpp:53 dialogs/rc.cpp:63 dialogs/rc.cpp:208 dialogs/rc.cpp:805
+#: dialogs/settings/rc.cpp:111 dialogs/transactioneditor.cpp:844
+#: reports/listtable.cpp:196 views/khomeview.cpp:412 views/khomeview.cpp:485
+#: views/khomeview.cpp:519 views/rc.cpp:61 widgets/kmymoneypriceview.cpp:128
+#: widgets/rc.cpp:36 widgets/register.cpp:565 widgets/transaction.cpp:1027
+#: widgets/transaction.cpp:1484
+msgid "Date"
+msgstr "Data"
+
+#: reports/listtable.cpp:198
+msgid "Num"
+msgstr "Nr."
+
+#: dialogs/kfindtransactiondlg.cpp:204 dialogs/kmymoneysplittable.cpp:78
+#: dialogs/kmymoneysplittable.cpp:831 dialogs/rc.cpp:217
+#: dialogs/transactioneditor.cpp:831 dialogs/transactioneditor.cpp:1374
+#: dialogs/transactioneditor.cpp:1382 dialogs/transactioneditor.cpp:1396
+#: dialogs/transactioneditor.cpp:1449 dialogs/transactioneditor.cpp:1456
+#: dialogs/transactioneditor.cpp:1504 reports/listtable.cpp:200
+#: views/kcategoriesview.cpp:76 views/rc.cpp:62 widgets/rc.cpp:115
+#: widgets/register.cpp:62 widgets/transaction.cpp:848
+#: widgets/transaction.cpp:906
+msgid "Category"
+msgstr "Kategorija"
+
+#: dialogs/kmymoneysplittable.cpp:79 dialogs/kmymoneysplittable.cpp:837
+#: reports/listtable.cpp:202 widgets/rc.cpp:101 widgets/transaction.cpp:1042
+#: widgets/transaction.cpp:1628
+msgid "Memo"
+msgstr "Memo"
+
+#: reports/listtable.cpp:203
+msgid "Top Category"
+msgstr "Aukščiausia kategorija"
+
+#: reports/listtable.cpp:204
+msgid "Category Type"
+msgstr "Kategorijos tipas"
+
+#: dialogs/rc.cpp:229 dialogs/settings/rc.cpp:152 reports/listtable.cpp:207
+#: widgets/kmymoneycombo.cpp:346 widgets/rc.cpp:107
+msgid "Reconciled"
+msgstr "Sutaikintos"
+
+#: reports/listtable.cpp:208 widgets/rc.cpp:117
+msgid "Action"
+msgstr "Veiksmas"
+
+#: dialogs/investactivities.cpp:199 dialogs/investactivities.cpp:287
+#: dialogs/investactivities.cpp:424 dialogs/investactivities.cpp:504
+#: dialogs/investactivities.cpp:544 dialogs/investtransactioneditor.cpp:241
+#: reports/listtable.cpp:209 widgets/rc.cpp:103 widgets/transaction.cpp:1513
+msgid "Shares"
+msgstr ""
+
+#: dialogs/investtransactioneditor.cpp:248
+#: dialogs/investtransactioneditor.cpp:1067
+#: dialogs/investtransactioneditor.cpp:1068
+#: dialogs/investtransactioneditor.cpp:1072
+#: dialogs/kequitypriceupdatedlg.cpp:72 dialogs/rc.cpp:109 dialogs/rc.cpp:164
+#: dialogs/rc.cpp:251 dialogs/rc.cpp:756 dialogs/rc.cpp:827
+#: dialogs/settings/rc.cpp:117 reports/listtable.cpp:210
+#: reports/listtable.cpp:211 reports/pivottable.cpp:2441
+#: views/kinvestmentview.cpp:80 widgets/kmymoneypriceview.cpp:129
+#: widgets/rc.cpp:43 widgets/rc.cpp:105 widgets/register.cpp:573
+msgid "Price"
+msgstr "Kaina"
+
+#: reports/listtable.cpp:212
+msgid "Net Value"
+msgstr ""
+
+#: reports/listtable.cpp:213
+msgid "Buys"
+msgstr ""
+
+#: reports/listtable.cpp:214
+msgid "Sells"
+msgstr ""
+
+#: reports/listtable.cpp:215
+msgid "Dividends Reinvested"
+msgstr ""
+
+#: reports/listtable.cpp:216
+msgid "Dividends Paid Out"
+msgstr ""
+
+#: reports/listtable.cpp:217
+msgid "Starting Balance"
+msgstr ""
+
+#: reports/listtable.cpp:218
+msgid "Ending Balance"
+msgstr ""
+
+#: reports/listtable.cpp:219
+msgid "Annualized Return"
+msgstr ""
+
+#: reports/listtable.cpp:220
+#, fuzzy
+msgid "Return On Investment"
+msgstr "Investicija"
+
+#: dialogs/rc.cpp:106 dialogs/rc.cpp:161 dialogs/rc.cpp:248 dialogs/rc.cpp:505
+#: dialogs/rc.cpp:570 dialogs/rc.cpp:667 dialogs/rc.cpp:753
+#: reports/listtable.cpp:223 widgets/register.cpp:570
+msgid "Payment"
+msgstr ""
+
+#: dialogs/rc.cpp:111 dialogs/rc.cpp:166 dialogs/rc.cpp:253 dialogs/rc.cpp:709
+#: dialogs/rc.cpp:758 reports/listtable.cpp:224 widgets/rc.cpp:119
+#: widgets/register.cpp:575
+msgid "Balance"
+msgstr "Balansas"
+
+#: reports/listtable.cpp:227 views/kscheduledview.cpp:74
+msgid "Next Due Date"
+msgstr ""
+
+#: reports/listtable.cpp:229 views/kscheduledview.cpp:76
+msgid "Payment Method"
+msgstr ""
+
+#: dialogs/rc.cpp:803 reports/listtable.cpp:231 widgets/rc.cpp:2
+msgid "Description"
+msgstr "Aprašymas"
+
+#: reports/listtable.cpp:232
+#, fuzzy
+msgid "Opening Date"
+msgstr "Atnaujinti iš interneto"
+
+#: reports/listtable.cpp:234
+msgid "Balance Early Warning"
+msgstr ""
+
+#: reports/listtable.cpp:235
+#, fuzzy
+msgid "Balance Max Limit"
+msgstr "Balansas: "
+
+#: reports/listtable.cpp:236
+#, fuzzy
+msgid "Credit Early Warning"
+msgstr "Kreditinė kortelė"
+
+#: reports/listtable.cpp:237
+#, fuzzy
+msgid "Credit Max Limit"
+msgstr "Kreditinė kortelė"
+
+#: dialogs/rc.cpp:376 reports/listtable.cpp:238
+msgid "Tax"
+msgstr "Mokestis"
+
+#: reports/listtable.cpp:239
+#, fuzzy
+msgid "Preferred"
+msgstr "Prioritetinė sąskaita"
+
+#: reports/listtable.cpp:240
+#, fuzzy
+msgid "Loan Amount"
+msgstr "Paskolos dydis"
+
+#: dialogs/rc.cpp:511 reports/listtable.cpp:241
+msgid "Interest Rate"
+msgstr ""
+
+#: reports/listtable.cpp:242
+#, fuzzy
+msgid "Next Interest Change"
+msgstr "Palūkanos"
+
+#: reports/listtable.cpp:243
+#, fuzzy
+msgid "Periodic Payment"
+msgstr "Mokėjimai šiandien"
+
+#: reports/listtable.cpp:244
+#, fuzzy
+msgid "Final Payment"
+msgstr "Mokėjimai"
+
+#: reports/listtable.cpp:245 views/khomeview.cpp:766 views/khomeview.cpp:1265
+#: views/khomeview.cpp:1273
+#, fuzzy
+msgid "Current Balance"
+msgstr "Suderintas balansas:"
+
+#: dialogs/investactivities.cpp:201 dialogs/investactivities.cpp:289
+#: dialogs/investactivities.cpp:368 dialogs/investactivities.cpp:426
+#: dialogs/rc.cpp:327 reports/listtable.cpp:360 reports/listtable.cpp:364
+#: reports/listtable.cpp:556 reports/listtable.cpp:558
+#: reports/pivottable.cpp:1343 reports/pivottable.cpp:1445
+#: reports/pivottable.cpp:1505 reports/pivottable.cpp:1598
+#: reports/pivottable.cpp:1768 reports/pivottable.cpp:1845
+#: reports/pivottable.cpp:2165 reports/pivottable.cpp:2167
+#: reports/pivottable.cpp:2187 reports/pivottable.cpp:2189
+#: reports/querytabletest.cpp:134 reports/querytabletest.cpp:135
+#: reports/querytabletest.cpp:136 reports/querytabletest.cpp:137
+#: reports/querytabletest.cpp:162 reports/querytabletest.cpp:163
+#: reports/querytabletest.cpp:164 reports/querytabletest.cpp:197
+#: reports/querytabletest.cpp:198 reports/querytabletest.cpp:224
+#: reports/querytabletest.cpp:250 reports/querytabletest.cpp:251
+#: reports/querytabletest.cpp:252 reports/querytabletest.cpp:275
+#: reports/querytabletest.cpp:276 reports/querytabletest.cpp:277
+#: reports/querytabletest.cpp:366 reports/querytabletest.cpp:422
+#: reports/querytabletest.cpp:423 views/kforecastview.cpp:568 views/rc.cpp:18
+#: widgets/kmymoneyaccounttreeforecast.cpp:139 widgets/transaction.cpp:1643
+msgid "Total"
+msgstr "Iš viso"
+
+#: reports/listtable.cpp:444
+msgid "Initial Market Value"
+msgstr ""
+
+#: reports/listtable.cpp:445
+msgid "Ending Market Value"
+msgstr ""
+
+#: reports/listtable.cpp:448 reports/querytabletest.cpp:651
+#, fuzzy
+msgid "Opening Balance"
+msgstr "Atidarymo balanso tekstas"
+
+#: reports/listtable.cpp:449 reports/querytabletest.cpp:652
+#: reports/querytabletest.cpp:653
+#, fuzzy
+msgid "Closing Balance"
+msgstr "Pabaigos balansas:"
+
+#: reports/listtable.cpp:490 reports/listtable.cpp:491
+msgid "Calculated"
+msgstr ""
+
+#: reports/listtable.cpp:572 reports/listtable.cpp:574
+#: reports/pivottable.cpp:1530 reports/pivottable.cpp:1886
+#: reports/querytabletest.cpp:138 reports/querytabletest.cpp:165
+#: reports/querytabletest.cpp:199 reports/querytabletest.cpp:225
+#: reports/querytabletest.cpp:253 reports/querytabletest.cpp:278
+#: reports/querytabletest.cpp:367 reports/querytabletest.cpp:402
+#: reports/querytabletest.cpp:424 reports/querytabletest.cpp:548
+#: reports/querytabletest.cpp:551 reports/querytabletest.cpp:586
+msgid "Grand Total"
+msgstr "VISO"
+
+#: dialogs/rc.cpp:233 reports/pivottable.cpp:339 views/kscheduledview.cpp:174
+#: views/kscheduledview.cpp:433 views/kscheduledview.cpp:449
+#: widgets/kmymoneyscheduledcalendar.cpp:48
+msgid "Transfers"
+msgstr "Perkėlimai"
+
+#: reports/pivottable.cpp:1951
+#, fuzzy
+msgid "Legend"
+msgstr "Didžioji knyga"
+
+#: reports/pivottable.cpp:2411 views/khomeview.cpp:1406
+#: views/khomeview.cpp:1443
+msgid "Actual"
+msgstr ""
+
+#: reports/pivottable.cpp:2421 views/khomeview.cpp:1409
+#: views/khomeview.cpp:1446
+#, fuzzy
+msgid "Difference"
+msgstr "Skirtumas:"
+
+#: reports/pivottable.cpp:2431
+#, fuzzy
+msgid "Moving Average"
+msgstr "Visos būklės"
+
+#: reports/pivottable.cpp:2436
+#, fuzzy
+msgid "Moving Average Price"
+msgstr "Visos būklės"
+
+#: reports/objectinfotable.cpp:214 reports/querytable.cpp:693
+#: reports/querytable.cpp:736 reports/querytable.cpp:1356
+#: reports/querytable.cpp:1375 views/kpayeesview.cpp:742
+#, c-format
+msgid "Transfer from %1"
+msgstr "Perkelti iš %1"
+
+#: reports/objectinfotable.cpp:215 reports/querytable.cpp:694
+#: reports/querytable.cpp:735 reports/querytable.cpp:1355
+#: reports/querytable.cpp:1374 views/kpayeesview.cpp:740
+#, c-format
+msgid "Transfer to %1"
+msgstr "Perkelti į %1"
+
+#: reports/querytabletest.cpp:471 views/kreportsview.cpp:1144
+msgid "Investment Transactions"
+msgstr ""
+
+#: reports/querytabletest.cpp:472 reports/querytabletest.cpp:564
+msgid "Test Report"
+msgstr ""
+
+#: reports/querytabletest.cpp:547 reports/querytabletest.cpp:550
+msgid "Total Stock 1"
+msgstr ""
+
+#: reports/querytabletest.cpp:563 views/kreportsview.cpp:1174
+msgid "Investment Performance by Account"
+msgstr ""
+
+#: reports/querytable.cpp:431 reports/querytable.cpp:1200
+#, c-format
+msgid "Month of %1"
+msgstr ""
+
+#: reports/querytable.cpp:432 reports/querytable.cpp:1201
+#, c-format
+msgid "Week of %1"
+msgstr ""
+
+#: reports/querytable.cpp:576 reports/querytable.cpp:739
+#: reports/querytable.cpp:858 reports/querytable.cpp:1325
+#: reports/querytable.cpp:1481
+#, fuzzy
+msgid "No Institution"
+msgstr "<be institucijos>"
+
+#: reports/querytable.cpp:580 reports/querytable.cpp:1329
+msgid "[Empty Payee]"
+msgstr "[Korespondento nėra]"
+
+#: reports/querytable.cpp:615 reports/querytable.cpp:1361
+#, fuzzy
+msgid "[Split Transaction]"
+msgstr "Skelti operaciją"
+
+#: reports/querytable.cpp:616 reports/querytable.cpp:617
+msgid "Split"
+msgstr ""
+
+#: main.cpp:51
+msgid ""
+"\n"
+"KMyMoney, the Personal Finance Manager for KDE.\n"
+"\n"
+"Please consider contributing to this project with code and/or suggestions."
+msgstr ""
+
+#: main.cpp:55
+msgid "language to be used"
+msgstr ""
+
+#: main.cpp:56
+msgid "don't open last used file"
+msgstr ""
+
+#: main.cpp:57
+msgid "enable performance timers"
+msgstr ""
+
+#: main.cpp:61
+msgid "turn on program traces"
+msgstr ""
+
+#: main.cpp:62
+msgid "dump the names of all defined KAction objects to stdout and quit"
+msgstr ""
+
+#: main.cpp:66
+msgid "file to open"
+msgstr ""
+
+#: main.cpp:92
+msgid "Memory leakage detection"
+msgstr ""
+
+#: main.cpp:96
+msgid "Compiled with the following settings:\n"
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:650 dialogs/ksplittransactiondlg.cpp:277
+#: main.cpp:98
+msgid "KMyMoney"
+msgstr ""
+
+#: main.cpp:104
+msgid "Initial idea, much initial source code, Project admin"
+msgstr ""
+
+#: main.cpp:105
+msgid "Core engine, Release Manager, Project admin"
+msgstr ""
+
+#: main.cpp:106
+msgid "Reporting logic, OFX Import"
+msgstr ""
+
+#: main.cpp:107
+msgid "Database backend, maintainer stable branch"
+msgstr ""
+
+#: main.cpp:108
+#, fuzzy
+msgid "Forecast, Reports"
+msgstr "Mėgstamiausios ataskaitos"
+
+#: main.cpp:109
+msgid "Project Admin"
+msgstr ""
+
+#: main.cpp:110
+msgid "Developer"
+msgstr "Programuotojas"
+
+#: main.cpp:111
+#, fuzzy
+msgid "Database backend"
+msgstr "Laikotarpis"
+
+#: main.cpp:113
+msgid "Initial investment support"
+msgstr ""
+
+#: main.cpp:114
+msgid "Developer & Artist"
+msgstr ""
+
+#: main.cpp:115
+msgid "Icons & splash screen"
+msgstr ""
+
+#: main.cpp:116 main.cpp:117
+msgid "Patches"
+msgstr ""
+
+#: main.cpp:136
+msgid ""
+"The monetary decimal symbol is not correctly set in the KDE Control Center's "
+"Country/Region & Language settings. Please set it to a reasonable value and "
+"start KMyMoney again."
+msgstr ""
+
+#: main.cpp:136
+msgid "Invalid settings"
+msgstr ""
+
+#: main.cpp:228
+msgid "Another instance of KMyMoney is already running. Do you want to quit?"
+msgstr ""
+
+#: main.cpp:289
+msgid "Uncaught error. Please report the details to the developers"
+msgstr ""
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr ""
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr ""
+
+#: dialogs/kcsvprogressdlg.cpp:62 dialogs/kimportdlg.cpp:66 rc.cpp:1
+msgid "&Import"
+msgstr "&Importuoti"
+
+#: rc.cpp:2
+msgid "E&xport"
+msgstr "&Eksportuoti"
+
+#: rc.cpp:3
+msgid "&Institution"
+msgstr "&Institucija"
+
+#: rc.cpp:4
+msgid "&Account"
+msgstr "&Sąskaita"
+
+#: rc.cpp:5
+#, fuzzy
+msgid "&Category"
+msgstr "Kategorija"
+
+#: rc.cpp:6
+#, fuzzy
+msgid "&Transaction"
+msgstr "Operacijos"
+
+#: rc.cpp:7 rc.cpp:20
+#, fuzzy
+msgid "Mark transaction as..."
+msgstr "Rasti operaciją..."
+
+#: rc.cpp:8 rc.cpp:21
+#, fuzzy
+msgid "Mark transaction"
+msgstr "Ieškoti operacijų"
+
+#: rc.cpp:9
+#, fuzzy
+msgid "T&ools"
+msgstr "Iš viso"
+
+#: rc.cpp:10
+msgid "Account options"
+msgstr ""
+
+#: rc.cpp:11
+#, fuzzy
+msgid "Category options"
+msgstr "Kategorijos"
+
+#: rc.cpp:12
+#, fuzzy
+msgid "Institution options"
+msgstr "Institucijų parinktys"
+
+#: rc.cpp:13
+#, fuzzy
+msgid "Payee options"
+msgstr "Korespondento informacija"
+
+#: rc.cpp:14
+#, fuzzy
+msgid "Budget options"
+msgstr "Indėlio parinktys"
+
+#: rc.cpp:15
+#, fuzzy
+msgid "Investment options"
+msgstr "Investicijos"
+
+#: rc.cpp:16
+#, fuzzy
+msgid "Scheduled transactions options"
+msgstr "Įvesti operaciją pagal tvarkaraštį"
+
+#: rc.cpp:17
+#, fuzzy
+msgid "Transaction options"
+msgstr "Operacijos detalės"
+
+#: rc.cpp:18
+#, fuzzy
+msgid "Move transaction to..."
+msgstr "Rasti operaciją..."
+
+#: rc.cpp:19
+#, fuzzy
+msgid "Select account"
+msgstr "Pasirinkite sąskaitą:"
+
+#: rc.cpp:22
+#, fuzzy
+msgid "Currency options"
+msgstr "Valiutos"
+
+#: rc.cpp:24
+msgid "Always show a No. field in transaction form"
+msgstr ""
+
+#: rc.cpp:25
+msgid "Auto fill with previous transaction data"
+msgstr ""
+
+#: rc.cpp:26
+msgid "Treat two transactions as identical, if amount differs less than"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:144 rc.cpp:27
+msgid "Auto increment check number"
+msgstr ""
+
+#: rc.cpp:28
+msgid "Autosave file periodically"
+msgstr ""
+
+#: rc.cpp:29
+msgid "Autosave interval in minutes"
+msgstr ""
+
+#: rc.cpp:30
+msgid "Check schedules upon startup"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:171 rc.cpp:31
+msgid "Enter transactions this number of days in advance"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:172 rc.cpp:32
+msgid "Number of days to preview schedules in ledger"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:143 rc.cpp:33
+msgid "Insert transaction type into No. field for new transactions"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:145 rc.cpp:34
+msgid "Keep changes when selecting a different transaction/split"
+msgstr ""
+
+#: rc.cpp:35
+msgid "Using the Enter key moves between the fields"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:130 rc.cpp:36
+msgid "Use the ledger lens"
+msgstr ""
+
+#: rc.cpp:37
+#, fuzzy
+msgid "Price Precision"
+msgstr "Kainų istorija"
+
+#: dialogs/rc.cpp:65 rc.cpp:38
+msgid "Update price history"
+msgstr "Atnaujinti kainų istoriją"
+
+#: dialogs/settings/rc.cpp:132 rc.cpp:39
+msgid "Show transaction form"
+msgstr ""
+
+#: rc.cpp:40
+msgid "Start with last selected view or homepage"
+msgstr ""
+
+#: rc.cpp:41
+#, fuzzy
+msgid "Use GPG to encrypt data file"
+msgstr "Naudoti GPG šifravimą"
+
+#: rc.cpp:42
+#, fuzzy
+msgid "Also encrypt against recover key"
+msgstr "Taip pat šifruoti ir kmymoney-recovery raktu"
+
+#: rc.cpp:43
+#, fuzzy
+msgid "GPG User ID (deprecated)"
+msgstr "Naudotojo ID"
+
+#: rc.cpp:44
+#, fuzzy
+msgid "GPG User ID"
+msgstr "Naudotojo ID"
+
+#: rc.cpp:45
+msgid "Run in expert (accountant) mode"
+msgstr ""
+
+#: rc.cpp:46
+msgid "Show splash screen during startup"
+msgstr ""
+
+#: rc.cpp:47
+msgid "Synchronize account in ledger and investment view"
+msgstr ""
+
+#: rc.cpp:48
+msgid "Icon size for view selection"
+msgstr ""
+
+#: rc.cpp:49
+msgid "list of hidden views"
+msgstr ""
+
+#: rc.cpp:50
+msgid "Firsttime switch to start new user wizard"
+msgstr ""
+
+#: rc.cpp:51
+msgid "Show title bar on each view"
+msgstr ""
+
+#: rc.cpp:52
+msgid "Start string matches for e.g. payees at start of string"
+msgstr ""
+
+#: rc.cpp:53
+msgid "Order of items on homepage"
+msgstr ""
+
+#: rc.cpp:54
+msgid "Percentage of default font size used for home view HTML page"
+msgstr ""
+
+#: rc.cpp:55
+msgid "Remember (manually adjusted) font size in home view on program end."
+msgstr ""
+
+#: rc.cpp:56
+msgid "Show account limit information on the Homepage"
+msgstr ""
+
+#: rc.cpp:58
+#, fuzzy
+msgid "Hide closed accounts"
+msgstr "Turto sąskaitos"
+
+#: rc.cpp:59
+msgid "Hide finished schedules"
+msgstr ""
+
+#: rc.cpp:61
+msgid "Show all register entries in full detail"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:129 rc.cpp:62
+msgid "Show a grid in the register"
+msgstr ""
+
+#: rc.cpp:63
+msgid "Show fancy group markers"
+msgstr ""
+
+#: rc.cpp:64
+msgid "Show fancy markers for previous and current fiscal year"
+msgstr ""
+
+#: rc.cpp:65
+msgid "Starting month of the fiscal year"
+msgstr ""
+
+#: rc.cpp:66
+#, fuzzy
+msgid "Starting day of the fiscal year"
+msgstr "Pranešimo pradžios data"
+
+#: rc.cpp:67
+#, fuzzy
+msgid "Start date"
+msgstr "Metai iki šiandien"
+
+#: dialogs/settings/rc.cpp:9 rc.cpp:68
+msgid "Use system colors"
+msgstr ""
+
+#: rc.cpp:69
+msgid "List color"
+msgstr ""
+
+#: rc.cpp:70
+msgid "List background color"
+msgstr ""
+
+#: rc.cpp:71
+msgid "List grid color"
+msgstr ""
+
+#: rc.cpp:72
+msgid "Background color for imported transactions"
+msgstr ""
+
+#: rc.cpp:73
+msgid "Background color for matched transactions"
+msgstr ""
+
+#: rc.cpp:74
+msgid "List color for erronous transactions"
+msgstr ""
+
+#: rc.cpp:75
+msgid "List color for missing conversion rate"
+msgstr ""
+
+#: rc.cpp:76
+msgid "List color for negative values"
+msgstr ""
+
+#: rc.cpp:77
+msgid "Background color for group marker"
+msgstr ""
+
+#: rc.cpp:78
+msgid "Background color for required fields"
+msgstr ""
+
+#: rc.cpp:79
+msgid "Use system font"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:21 rc.cpp:80
+msgid "Cell font"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:22 rc.cpp:81
+msgid "Header font"
+msgstr ""
+
+#: rc.cpp:82 rc.cpp:83
+msgid "Sort order of register in normal view"
+msgstr ""
+
+#: rc.cpp:84
+msgid "Sort order of register in search dialog"
+msgstr ""
+
+#: rc.cpp:85
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation"
+msgstr ""
+
+#: rc.cpp:86
+msgid "Number of days (plus/minus) to search for matching transactions"
+msgstr ""
+
+#: rc.cpp:87
+msgid "During import, ask for a new payee's default category"
+msgstr ""
+
+#: rc.cpp:88
+msgid "Method to calculate forecast"
+msgstr ""
+
+#: rc.cpp:89
+msgid "Days to forecast"
+msgstr ""
+
+#: rc.cpp:90
+msgid "Days of normal account cycle"
+msgstr ""
+
+#: rc.cpp:91
+msgid "Number of historic cycles to use in forecast"
+msgstr ""
+
+#: rc.cpp:92
+msgid "Day of month to start forecast"
+msgstr ""
+
+#: rc.cpp:93
+msgid "Method to calculate history-based forecast"
+msgstr ""
+
+#: rc.cpp:94
+msgid "Skip opening date when fetching transactions"
+msgstr ""
+
+#: rc.cpp:95
+msgid "Include future transaction when using Schedule Forecast"
+msgstr ""
+
+#: rc.cpp:96
+#, fuzzy
+msgid "Include scheduled transactions when using Schedule Forecast"
+msgstr "Įvesti operaciją pagal tvarkaraštį"
+
+#: rc.cpp:97
+msgid "additional names for cash account"
+msgstr ""
+
+#: rc.cpp:98
+msgid "additional names for checking account"
+msgstr ""
+
+#: rc.cpp:99
+msgid "additional names for credit card account"
+msgstr ""
+
+#: rc.cpp:100
+msgid "additional names for asset account"
+msgstr ""
+
+#: rc.cpp:101
+msgid "additional names for opening balance payee"
+msgstr ""
+
+#: rc.cpp:102
+msgid "additional names for invoice accounts"
+msgstr ""
+
+#: rc.cpp:103 widgets/rc.cpp:161 widgets/rc.cpp:163
+msgid "..."
+msgstr "..."
+
+#: views/kcategoriesview.cpp:276
+msgid "Profit: "
+msgstr ""
+
+#: views/kcategoriesview.cpp:278
+msgid "Loss: "
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:54
+#: dialogs/transactioneditor.cpp:605 views/kpayeesview.cpp:365
+#: widgets/kmymoneyonlinequoteconfig.cpp:54
+msgid "Accepts the entered data and stores it"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:55 views/kpayeesview.cpp:366
+#: widgets/kmymoneyonlinequoteconfig.cpp:55
+msgid "Use this to accept the modified data."
+msgstr ""
+
+#: views/kpayeesview.cpp:491
+msgid ""
+"A payee with the name '%1' already exists. It is not advisable to have "
+"multiple payees with the same identification name. Are you sure you would "
+"like to rename the payee?"
+msgstr ""
+
+#: views/kpayeesview.cpp:518 views/kpayeesview.cpp:869
+msgid "Unable to modify payee"
+msgstr ""
+
+#: views/kpayeesview.cpp:564
+msgid "Do you want to save the changes for <b>%1</b>?"
+msgstr ""
+
+#: views/kbudgetview.cpp:490 views/kpayeesview.cpp:565
+#, fuzzy
+msgid "Save changes"
+msgstr "Atmesti pakeitimus"
+
+#: views/kgloballedgerview.cpp:737 views/kpayeesview.cpp:662
+#: views/kpayeesview.cpp:753
+#, c-format
+msgid "Balance: %1"
+msgstr ""
+
+#: views/kpayeesview.cpp:725 views/kpayeesview.cpp:731
+#, c-format
+msgid "Amortization of %1"
+msgstr ""
+
+#: views/kpayeesview.cpp:727 views/kpayeesview.cpp:733
+#, c-format
+msgid "Payment to %1"
+msgstr ""
+
+#: views/kpayeesview.cpp:736
+#, c-format
+msgid "Loan payment from %1"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:123
+#: dialogs/kconfirmmanualenterdlg.cpp:133 views/kpayeesview.cpp:745
+#: widgets/kmymoneycategory.cpp:160 widgets/kmymoneycategory.cpp:166
+#: widgets/transaction.cpp:851 widgets/transaction.cpp:1397
+#: widgets/transaction.cpp:1411
+#, fuzzy
+msgid ""
+"_: Split transaction (category replacement)\n"
+"Split transaction"
+msgstr "Išrinkti operacijas be korespondento"
+
+#: views/kreportsview.cpp:262
+msgid ""
+"There was an error creating your report: \"%1\".\n"
+"Please report this error to the developer's list: kmymoney2-developer@lists."
+"sourceforge.net"
+msgstr ""
+
+#: views/kreportsview.cpp:264
+msgid "Critical Error"
+msgstr "Kritinė klaida"
+
+#: views/kreportsview.cpp:268
+msgid "Unable to generate report"
+msgstr "Nepavyksta generuoti ataskaitos"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:125 views/kreportsview.cpp:286
+#: views/rc.cpp:53 widgets/rc.cpp:146
+msgid "Chart"
+msgstr ""
+
+#: views/kreportsview.cpp:287 widgets/rc.cpp:147
+msgid "Show the chart version of this report"
+msgstr ""
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:112 views/khomeview.cpp:900
+#: views/kreportsview.cpp:294 views/kreportsview.cpp:328
+msgid "Report"
+msgstr "Ataskaita"
+
+#: views/kreportsview.cpp:295
+msgid "Show the report version of this chart"
+msgstr ""
+
+#: views/kmymoneyview.cpp:236 views/kreportsview.cpp:314
+#: views/kreportsview.cpp:326
+msgid "Reports"
+msgstr "Ataskaitos"
+
+#: views/khomeview.cpp:902 views/kreportsview.cpp:329 widgets/rc.cpp:56
+msgid "Comment"
+msgstr "Komentaras"
+
+#: views/kreportsview.cpp:432
+msgid "Charts"
+msgstr ""
+
+#: views/khomeview.cpp:897 views/kreportsview.cpp:470
+msgid "Favorite Reports"
+msgstr "Mėgstamiausios ataskaitos"
+
+#: views/kreportsview.cpp:486
+msgid "Old Customized Reports"
+msgstr "Senesnės savadarbės ataskaitos"
+
+#: views/kreportsview.cpp:579
+msgid "Include Stylesheet"
+msgstr ""
+
+#: views/kreportsview.cpp:585
+msgid ""
+"_: CSV (Filefilter)\n"
+"CSV files"
+msgstr ""
+
+#: views/kreportsview.cpp:586
+msgid ""
+"_: HTML (Filefilter)\n"
+"HTML files"
+msgstr ""
+
+#: views/kreportsview.cpp:591
+#, fuzzy
+msgid "Export as"
+msgstr "&Eksportuoti"
+
+#: views/kreportsview.cpp:619 views/kreportsview.cpp:660
+#: views/kreportsview.cpp:942 views/kreportsview.cpp:950
+#: views/kreportsview.cpp:958 views/kreportsview.cpp:968
+#: views/kreportsview.cpp:980 views/kreportsview.cpp:998
+#: views/kreportsview.cpp:1006 views/kreportsview.cpp:1014
+#: views/kreportsview.cpp:1022 views/kreportsview.cpp:1034
+#: views/kreportsview.cpp:1046 views/kreportsview.cpp:1056
+#: views/kreportsview.cpp:1070 views/kreportsview.cpp:1079
+#: views/kreportsview.cpp:1087 views/kreportsview.cpp:1095
+#: views/kreportsview.cpp:1103 views/kreportsview.cpp:1111
+#: views/kreportsview.cpp:1120 views/kreportsview.cpp:1132
+#: views/kreportsview.cpp:1145 views/kreportsview.cpp:1155
+#: views/kreportsview.cpp:1165 views/kreportsview.cpp:1175
+#: views/kreportsview.cpp:1185 views/kreportsview.cpp:1195
+#: views/kreportsview.cpp:1208 views/kreportsview.cpp:1222
+#: views/kreportsview.cpp:1239 views/kreportsview.cpp:1257
+#: views/kreportsview.cpp:1273 views/kreportsview.cpp:1295
+#: views/kreportsview.cpp:1304 views/kreportsview.cpp:1313
+#: views/kreportsview.cpp:1322 views/kreportsview.cpp:1336
+#: views/kreportsview.cpp:1347 views/kreportsview.cpp:1362
+#: views/kreportsview.cpp:1372 views/kreportsview.cpp:1383
+#: views/kreportsview.cpp:1393 views/kreportsview.cpp:1404
+#: views/kreportsview.cpp:1423 views/kreportsview.cpp:1432
+#: views/kreportsview.cpp:1444 views/kreportsview.cpp:1463
+#: views/kreportsview.cpp:1472 views/kreportsview.cpp:1481
+#: views/kreportsview.cpp:1490
+msgid "Default Report"
+msgstr "Standartinė ataskaita"
+
+#: views/kreportsview.cpp:621 views/kreportsview.cpp:661
+msgid "Custom Report"
+msgstr "Savadarbė ataskaita"
+
+#: views/kreportsview.cpp:622
+msgid " (Customized)"
+msgstr "(Savadarbė)"
+
+#: views/kreportsview.cpp:690
+msgid ""
+"Are you sure you want to delete report <b>%1</b>? There is no way to "
+"recover it!"
+msgstr ""
+
+#: views/kreportsview.cpp:690 views/kreportsview.cpp:702
+msgid "Delete Report?"
+msgstr "Trinti ataskaitą?"
+
+#: views/kreportsview.cpp:702
+msgid "Sorry, <b>%1</b> is a default report. You may not delete it."
+msgstr ""
+
+#: views/kreportsview.cpp:882
+msgid "&Open"
+msgstr "&Atverti"
+
+#: views/kreportsview.cpp:884
+msgid "&New report"
+msgstr "&Nauja ataskaita"
+
+#: views/kreportsview.cpp:934
+msgid "Income and Expenses"
+msgstr "Įplaukos ir išlaidos"
+
+#: views/kreportsview.cpp:941
+msgid "Income and Expenses This Month"
+msgstr "Įplaukos ir išlaidos šį mėnesį"
+
+#: views/kreportsview.cpp:949
+msgid "Income and Expenses This Year"
+msgstr "Įplaukos ir išlaidos šiais metais"
+
+#: views/kreportsview.cpp:957
+#, fuzzy
+msgid "Income and Expenses By Year"
+msgstr "Įplaukos ir išlaidos šiais metais"
+
+#: views/kreportsview.cpp:967
+#, fuzzy
+msgid "Income and Expenses Graph"
+msgstr "Įplaukos ir išlaidos"
+
+#: views/kreportsview.cpp:979
+#, fuzzy
+msgid "Income and Expenses Pie Chart"
+msgstr "Įplaukos ir išlaidos šiais metais"
+
+#: views/khomeview.cpp:1361 views/kreportsview.cpp:990
+msgid "Net Worth"
+msgstr "Grynoji vertė"
+
+#: views/kreportsview.cpp:997
+msgid "Net Worth By Month"
+msgstr "Grynoji vertė pagal mėnesius"
+
+#: views/kreportsview.cpp:1005
+msgid "Net Worth Today"
+msgstr "Grynoji vertė šiandien"
+
+#: views/kreportsview.cpp:1013
+msgid "Net Worth By Year"
+msgstr "Grynoji vertė pagal metus"
+
+#: views/kreportsview.cpp:1021
+msgid "7-day Cash Flow Forecast"
+msgstr ""
+
+#: views/kreportsview.cpp:1033
+#, fuzzy
+msgid "Net Worth Graph"
+msgstr "Grynoji vertė"
+
+#: views/kreportsview.cpp:1045
+msgid "Account Balances by Institution"
+msgstr "Sąskaitų balansai pagal institucijas"
+
+#: views/kreportsview.cpp:1055
+msgid "Account Balances by Type"
+msgstr "Sąskaitų balansai pagal tipus"
+
+#: views/kreportsview.cpp:1069
+msgid "Transactions by Account"
+msgstr "Operacijos pagal sąskaitas"
+
+#: views/kreportsview.cpp:1078
+msgid "Transactions by Category"
+msgstr "Operacijos pagal kategorijas"
+
+#: views/kreportsview.cpp:1086
+msgid "Transactions by Payee"
+msgstr "Operacijos pagal korespondentą"
+
+#: views/kreportsview.cpp:1094
+msgid "Transactions by Month"
+msgstr "Operacijos pagal mėnesius"
+
+#: views/kreportsview.cpp:1102
+msgid "Transactions by Week"
+msgstr "Operacijos pagal savaites"
+
+#: views/kreportsview.cpp:1110
+#, fuzzy
+msgid "Loan Transactions"
+msgstr "Mokesčių operacijos"
+
+#: views/kreportsview.cpp:1119
+#, fuzzy
+msgid "Transactions by Reconciliation Status"
+msgstr "Operacijos pagal sąskaitas"
+
+#: views/kreportsview.cpp:1125
+#, fuzzy
+msgid "Cash Flow"
+msgstr "Grynieji"
+
+#: views/kreportsview.cpp:1131
+#, fuzzy
+msgid "Cash Flow Transactions This Month"
+msgstr "Operacijos pagal mėnesius"
+
+#: views/kmymoneyview.cpp:226 views/kmymoneyview.cpp:228
+#: views/kreportsview.cpp:1137
+msgid "Investments"
+msgstr "Investicijos"
+
+#: views/kreportsview.cpp:1154
+msgid "Investment Holdings by Account"
+msgstr ""
+
+#: views/kreportsview.cpp:1164
+msgid "Investment Holdings by Type"
+msgstr ""
+
+#: views/kreportsview.cpp:1184
+msgid "Investment Performance by Type"
+msgstr ""
+
+#: views/kreportsview.cpp:1194
+#, fuzzy
+msgid "Investment Holdings Pie"
+msgstr "Investicijos"
+
+#: views/kreportsview.cpp:1207
+#, fuzzy
+msgid "Investment Worth Graph"
+msgstr "Grynoji vertė"
+
+#: views/kreportsview.cpp:1221
+#, fuzzy
+msgid "Investment Price Graph"
+msgstr "Grynoji vertė"
+
+#: views/kreportsview.cpp:1238
+#, fuzzy
+msgid "Investment Moving Average Price Graph"
+msgstr "Investicijos"
+
+#: views/kreportsview.cpp:1256
+#, fuzzy
+msgid "Investment Moving Average"
+msgstr "Investicijos"
+
+#: views/kreportsview.cpp:1272
+msgid "Investment Moving Average vs Actual"
+msgstr ""
+
+#: views/kreportsview.cpp:1287
+msgid "Taxes"
+msgstr "Mokesčiai"
+
+#: views/kreportsview.cpp:1294
+#, fuzzy
+msgid "Tax Transactions by Category"
+msgstr "Operacijos pagal kategorijas"
+
+#: views/kreportsview.cpp:1303
+#, fuzzy
+msgid "Tax Transactions by Payee"
+msgstr "Operacijos pagal korespondentą"
+
+#: views/kreportsview.cpp:1312
+#, fuzzy
+msgid "Tax Transactions by Category Last Fiscal Year"
+msgstr "Operacijos pagal kategorijas"
+
+#: views/kreportsview.cpp:1321
+#, fuzzy
+msgid "Tax Transactions by Payee Last Fiscal Year"
+msgstr "Operacijos pagal korespondentą"
+
+#: views/kreportsview.cpp:1328
+msgid "Budgeting"
+msgstr ""
+
+#: views/kreportsview.cpp:1335
+msgid "Budgeted vs. Actual This Year"
+msgstr ""
+
+#: views/kreportsview.cpp:1346
+msgid "Budgeted vs. Actual This Year (YTM)"
+msgstr ""
+
+#: views/khomeview.cpp:1383 views/kreportsview.cpp:1361
+msgid "Monthly Budgeted vs. Actual"
+msgstr ""
+
+#: views/kreportsview.cpp:1371
+msgid "Yearly Budgeted vs. Actual"
+msgstr ""
+
+#: views/kreportsview.cpp:1382
+#, fuzzy
+msgid "Monthly Budget"
+msgstr "Kas mėnesį"
+
+#: views/kreportsview.cpp:1392
+#, fuzzy
+msgid "Yearly Budget"
+msgstr "Kas metai"
+
+#: views/kreportsview.cpp:1403
+msgid "Yearly Budgeted vs Actual Graph"
+msgstr ""
+
+#: views/kreportsview.cpp:1422
+#, fuzzy
+msgid "Forecast By Month"
+msgstr "Grynoji vertė pagal mėnesius"
+
+#: views/kreportsview.cpp:1431
+#, fuzzy
+msgid "Forecast Next Quarter"
+msgstr "Kiti metai"
+
+#: views/kreportsview.cpp:1443
+#, fuzzy
+msgid "Net Worth Forecast Graph"
+msgstr "Grynoji vertė šiandien"
+
+#: dialogs/rc.cpp:126 dialogs/rc.cpp:128 dialogs/rc.cpp:466
+#: views/kreportsview.cpp:1455
+msgid "General Information"
+msgstr "Bendra Informacija"
+
+#: views/kreportsview.cpp:1462
+#, fuzzy
+msgid "Schedule Information"
+msgstr "Korespondento informacija"
+
+#: views/kreportsview.cpp:1471
+#, fuzzy
+msgid "Schedule Summary Information"
+msgstr "Korespondento informacija"
+
+#: views/kreportsview.cpp:1480
+#, fuzzy
+msgid "Account Information"
+msgstr "Mokėjimo informacija"
+
+#: views/kreportsview.cpp:1489
+#, fuzzy
+msgid "Loan Information"
+msgstr "Mokėjimo informacija"
+
+#: dialogs/rc.cpp:323 views/kmymoneyview.cpp:148 views/kmymoneyview.cpp:150
+msgid "Institutions"
+msgstr "Institucijos"
+
+#: dialogs/knewaccountdlg.cpp:98 views/kmymoneyview.cpp:162
+#: views/kmymoneyview.cpp:164 widgets/rc.cpp:4 widgets/rc.cpp:94
+msgid "Accounts"
+msgstr "Sąskaitos"
+
+#: views/kmymoneyview.cpp:176
+msgid "Bills & Reminders"
+msgstr "Mokėjimų sąskaitos ir pirminimai"
+
+#: views/kmymoneyview.cpp:178
+#, fuzzy
+msgid "Scheduled transactions"
+msgstr "Įvesti operaciją pagal tvarkaraštį"
+
+#: dialogs/knewaccountdlg.cpp:98 dialogs/rc.cpp:193 views/kmymoneyview.cpp:188
+#: views/kmymoneyview.cpp:190 widgets/rc.cpp:91
+msgid "Categories"
+msgstr "Kategorijos"
+
+#: dialogs/kfindtransactiondlg.cpp:212 dialogs/rc.cpp:318
+#: views/kmymoneyview.cpp:199 views/kmymoneyview.cpp:201 widgets/rc.cpp:93
+msgid "Payees"
+msgstr "Korespondentai"
+
+#: views/kgloballedgerview.cpp:149 views/kmymoneyview.cpp:211
+msgid "Ledgers"
+msgstr "Didžioji knyga"
+
+#: views/kmymoneyview.cpp:353
+msgid "Creating transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:367
+msgid "Modifying transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:382
+msgid "Duplicating transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:394
+#, fuzzy
+msgid "Edit the current selected transactions"
+msgstr "Įvesti operaciją pagal tvarkaraštį"
+
+#: views/kmymoneyview.cpp:602
+msgid "<b>%1</b> is not a KMyMoney file."
+msgstr ""
+
+#: views/kmymoneyview.cpp:643
+msgid "GPG is not available for decryption of file <b>%1</b>"
+msgstr ""
+
+#: views/kmymoneyview.cpp:721
+msgid ""
+"File <b>%1</b> contains the old binary format used by KMyMoney. Please use "
+"an older version of KMyMoney (0.8.x) that still supports this format to "
+"convert it to the new XML based format."
+msgstr ""
+
+#: views/kmymoneyview.cpp:723
+msgid "File <b>%1</b> contains an unknown file format!"
+msgstr ""
+
+#: views/kmymoneyview.cpp:728
+msgid "Cannot read from file <b>%1</b>!"
+msgstr ""
+
+#: views/kmymoneyview.cpp:732
+msgid "Cannot load file <b>%1</b>. Reason: %2"
+msgstr ""
+
+#: views/kmymoneyview.cpp:742 views/kmymoneyview.cpp:748
+#, fuzzy
+msgid "File <b>%1</b> not found!"
+msgstr "Byla nerasta"
+
+#: views/kmymoneyview.cpp:812
+msgid "Can't open database %1\n"
+msgstr ""
+
+#: views/kmymoneyview.cpp:844
+msgid "An unrecoverable error occurred while reading the database"
+msgstr ""
+
+#: views/kmymoneyview.cpp:846 views/kmymoneyview.cpp:1208
+msgid "Database malfunction"
+msgstr ""
+
+#: views/kmymoneyview.cpp:938
+msgid "Unknown fix level in input file"
+msgstr ""
+
+#: views/kmymoneyview.cpp:984
+msgid ""
+"GPG does not seem to be installed on your system. Please make sure, that GPG "
+"can be found using the standard search path. This time, encryption is "
+"disabled."
+msgstr ""
+
+#: views/kmymoneyview.cpp:984
+msgid "GPG not found"
+msgstr ""
+
+#: views/kmymoneyview.cpp:991
+msgid ""
+"You have selected to encrypt your data also with the KMyMoney recover key, "
+"but the key with id</p><p><center><b>%1</b></center></p>has not been found "
+"in your keyring at this time. Please make sure to import this key into your "
+"keyring. You can find it on the <a href=\"http://kmymoney2.sourceforge.net/"
+"\">KMyMoney web-site</a>. This time your data will not be encrypted with the "
+"KMyMoney recover key."
+msgstr ""
+
+#: views/kmymoneyview.cpp:991 views/kmymoneyview.cpp:1000
+msgid "GPG-Key not found"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1000
+msgid ""
+"You have specified to encrypt your data for the user-id</p><p><center><b>%1</"
+"b>.</center></p>Unfortunately, a valid key for this user-id was not found in "
+"your keyring. Please make sure to import a valid key for this user-id. This "
+"time, encryption is disabled."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1006
+msgid ""
+"You have configured to save your data in encrypted form using GPG. Please be "
+"aware, that this is a brand new feature which is yet untested. Make sure, "
+"you have the necessary understanding that you might loose all your data if "
+"you store it encrypted and cannot decrypt it later on! If unsure, answer "
+"<b>No</b>."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1008
+msgid "Store GPG encrypted"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1038 views/kmymoneyview.cpp:1052
+msgid "Unable to open file '%1' for writing."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1065 views/kmymoneyview.cpp:1074
+msgid "Failure while writing to '%1'"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1086 views/kmymoneyview.cpp:1181
+msgid "Tried to access a file when it's not open"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1092
+msgid ""
+"Since this version of KMyMoney only writes data files in its new format, "
+"files written with this version cannot be read by KMyMoney version 0.4. If "
+"you still want to use older versions of KMyMoney with your data files, "
+"please make sure you keep a backup-file of your finance data. If you want to "
+"abort this operation, please press Cancel now"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1122
+msgid "Malformed URL '%1'"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1192
+msgid ""
+"Database contains data which must be removed before using SaveAs.\n"
+"Do you wish to continue?"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1205
+msgid ""
+"An unrecoverable error occurred while writing to the database.\n"
+"It may well be corrupt."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1215
+msgid ""
+"Can't open or create database %1\n"
+"Retry SaveAsDatabase and click Help for further info"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1354
+msgid "Afghanistan Afghani"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1355
+msgid "Albanian Lek"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1356
+msgid "Netherland Antillian Guilder"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1357
+msgid "Algerian Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1358
+msgid "Andorran Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1359
+msgid "Andorran Peseta"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1360
+msgid "Angolan New Kwanza"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1361
+msgid "Argentine Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1362
+msgid "Aruban Florin"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1363
+msgid "Australian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1364
+msgid "Azerbaijani Manat"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1365
+msgid "Bahamian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1366
+msgid "Bahraini Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1367
+msgid "Bangladeshi Taka"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1368
+msgid "Barbados Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1369
+msgid "Belarussian Ruble"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1370
+msgid "Belize Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1371
+msgid "Bermudian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1372
+msgid "Bhutan Ngultrum"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1373
+msgid "Bolivian Boliviano"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1374
+msgid "Bosnian Convertible Mark"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1375
+msgid "Botswana Pula"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1376
+msgid "Brazilian Real"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1377
+msgid "British Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1378
+msgid "Brunei Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1379
+msgid "Bulgarian Lev"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1380
+msgid "Burundi Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1381
+msgid "CFA Franc BEAC"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1382
+msgid "CFA Franc BCEAO"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1383
+msgid "CFP Franc Pacifique"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1384
+msgid "Cambodia Riel"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1385
+msgid "Canadian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1386
+msgid "Cape Verde Escudo"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1387
+msgid "Cayman Islands Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1388
+msgid "Chilean Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1389
+msgid "Chinese Yuan Renminbi"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1390
+msgid "Colombian Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1391
+msgid "Comoros Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1392
+msgid "Costa Rican Colon"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1393
+msgid "Croatian Kuna"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1394
+msgid "Cuban Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1395
+msgid "Czech Koruna"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1396
+msgid "Danish Krone"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1397
+msgid "Djibouti Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1398
+msgid "Dominican Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1399
+msgid "East Caribbean Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1400
+msgid "Egyptian Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1401
+msgid "El Salvador Colon"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1402
+msgid "Eritrean Nakfa"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1403
+msgid "Estonian Kroon"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1404
+msgid "Ethiopian Birr"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1405
+msgid "Euro"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1406
+msgid "Falkland Islands Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1407
+msgid "Fiji Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1408
+msgid "Gambian Dalasi"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1409
+msgid "Georgian Lari"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1410
+msgid "Ghanaian Cedi"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1411
+msgid "Gibraltar Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1412
+msgid "Guatemalan Quetzal"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1413
+msgid "Guinea-Bissau Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1414
+msgid "Guyanan Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1415
+msgid "Haitian Gourde"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1416
+msgid "Honduran Lempira"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1417
+msgid "Hong Kong Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1418
+msgid "Hungarian Forint"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1419
+msgid "Iceland Krona"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1420
+msgid "Indian Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1421
+msgid "Indonesian Rupiah"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1422
+msgid "Iranian Rial"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1423
+msgid "Iraqi Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1424
+msgid "Israeli New Shekel"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1425
+msgid "Jamaican Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1426
+msgid "Japanese Yen"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1427
+msgid "Jordanian Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1428
+msgid "Kazakhstan Tenge"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1429
+msgid "Kenyan Shilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1430
+msgid "Kuwaiti Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1431
+msgid "Kyrgyzstan Som"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1432
+msgid "Laos Kip"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1433
+msgid "Latvian Lats"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1434
+msgid "Lebanese Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1435
+msgid "Lesotho Loti"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1436
+msgid "Liberian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1437
+msgid "Libyan Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1438
+msgid "Lithuanian Litas"
+msgstr "Lietuvos litai"
+
+#: views/kmymoneyview.cpp:1439
+msgid "Macau Pataca"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1440
+msgid "Macedonian Denar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1441
+msgid "Malagasy Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1442
+msgid "Malawi Kwacha"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1443
+msgid "Malaysian Ringgit"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1444
+msgid "Maldive Rufiyaa"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1445
+msgid "Mali Republic Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1446
+msgid "Mauritanian Ouguiya"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1447
+msgid "Mauritius Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1448
+msgid "Mexican Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1449
+msgid "Moldavian Leu"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1450
+msgid "Mongolian Tugrik"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1451
+msgid "Moroccan Dirham"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1452
+msgid "Mozambique Metical"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1453
+msgid "Myanmar Kyat"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1454
+msgid "Namibian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1455
+msgid "Nepalese Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1456
+msgid "New Zealand Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1457
+msgid "Nicaraguan Cordoba Oro"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1458
+msgid "Nigerian Naira"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1459
+msgid "North Korean Won"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1460
+msgid "Norwegian Kroner"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1461
+msgid "Omani Rial"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1462
+msgid "Pakistan Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1463
+msgid "Panamanian Balboa"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1464
+msgid "Papua New Guinea Kina"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1465
+msgid "Paraguay Guarani"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1466
+msgid "Peruvian Nuevo Sol"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1467
+msgid "Philippine Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1468
+msgid "Polish Zloty"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1469
+msgid "Qatari Rial"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1470
+msgid "Romanian Leu (new)"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1471
+msgid "Russian Ruble"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1472
+msgid "Rwanda Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1473
+msgid "Samoan Tala"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1474
+msgid "Sao Tome and Principe Dobra"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1475
+msgid "Saudi Riyal"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1476
+msgid "Seychelles Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1477
+msgid "Sierra Leone Leone"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1478
+msgid "Singapore Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1481
+msgid "Solomon Islands Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1482
+msgid "Somali Shilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1483
+msgid "South African Rand"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1484
+msgid "South Korean Won"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1485
+msgid "Sri Lanka Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1486
+msgid "St. Helena Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1487
+msgid "Sudanese Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1488
+msgid "Suriname Guilder"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1489
+msgid "Swaziland Lilangeni"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1490
+msgid "Swedish Krona"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1491
+msgid "Swiss Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1492
+msgid "Syrian Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1493
+msgid "Taiwan Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1494
+msgid "Tajikistan Somani"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1495
+msgid "Tanzanian Shilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1496
+msgid "Thai Baht"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1497
+msgid "Tongan Pa'anga"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1498
+msgid "Trinidad and Tobago Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1499
+msgid "Tunisian Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1500
+msgid "Turkish Lira (new)"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1501
+msgid "Turkmenistan Manat"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1502
+msgid "US Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1503
+msgid "Uganda Shilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1504
+msgid "Ukraine Hryvnia"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1505
+msgid "United Arab Emirates Dirham"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1506
+msgid "Uruguayan Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1507
+msgid "Uzbekistani Sum"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1508
+msgid "Vanuatu Vatu"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1509
+msgid "Venezuelan Bolivar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1510
+msgid "Vietnamese Dong"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1511
+msgid "Yugoslav Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1512
+msgid "Zambian Kwacha"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1513
+msgid "Zimbabwe Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1515
+msgid "Gold"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1516
+msgid "Palladium"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1517
+msgid "Platinum"
+msgstr "Platina"
+
+#: views/kmymoneyview.cpp:1518
+msgid "Silver"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1551
+msgid "Austrian Schilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1552
+msgid "German Mark"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1553
+msgid "French Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1554
+msgid "Italian Lira"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1555
+msgid "Spanish Peseta"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1556
+msgid "Dutch Guilder"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1557
+msgid "Belgian Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1558
+msgid "Luxembourg Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1559
+msgid "Portuguese Escudo"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1560
+msgid "Irish Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1561
+msgid "Finnish Markka"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1562
+msgid "Greek Drachma"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1564
+msgid "Romanian Leu"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1566
+msgid "Russian Ruble (old)"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1568
+msgid "Slovenian Tolar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1571
+msgid "Turkish Lira"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1574
+msgid "Maltese Lira"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1575
+msgid "Cyprus Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1578
+msgid "Slovak Koruna"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1888
+msgid ""
+"The account \"%1\" was previously created as loan account but some "
+"information is missing. The new loan wizard will be started to collect all "
+"relevant information. Please use a KMyMoney version >= 0.8.7 and < 0.9 to "
+"correct the problem."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1892
+msgid "Account problem"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1941
+msgid "Unable to add schedule: "
+msgstr ""
+
+#: views/kmymoneyview.cpp:1970
+msgid "Fix transactions"
+msgstr ""
+
+#: views/kaccountsview.cpp:522 views/kinstitutionsview.cpp:300
+msgid "Net Worth: "
+msgstr ""
+
+#: dialogs/rc.cpp:108 dialogs/rc.cpp:163 dialogs/rc.cpp:250 dialogs/rc.cpp:755
+#: dialogs/rc.cpp:830 views/kinvestmentview.cpp:77 widgets/register.cpp:572
+msgid "Quantity"
+msgstr "Kiekis"
+
+#: views/kscheduledlistitem.cpp:137
+msgid "Finished"
+msgstr "Baigta"
+
+#: views/kbudgetview.cpp:109
+#, fuzzy
+msgid "Creates a new budget"
+msgstr "Sukurti naują tvarkaraštį."
+
+#: views/kbudgetview.cpp:110
+#, fuzzy
+msgid "Use this to create a new empty budget."
+msgstr "Naudokite tai norėdami sukurti naują tvarkaraštį."
+
+#: views/kbudgetview.cpp:116
+#, fuzzy
+msgid "Rename the current selected budget"
+msgstr "Trinti pasirinktą profilį"
+
+#: views/kbudgetview.cpp:117
+#, fuzzy
+msgid "Use this to start renaming the selected budget."
+msgstr "Naudokite tai norėdami ištrinti pažymėtą profilį"
+
+#: views/kbudgetview.cpp:123
+#, fuzzy
+msgid "Delete the current selected budget"
+msgstr "Trinti pasirinktą profilį"
+
+#: views/kbudgetview.cpp:124
+#, fuzzy
+msgid "Use this to delete the selected budget."
+msgstr "Naudokite tai norėdami ištrinti pažymėtą profilį"
+
+#: views/kbudgetview.cpp:130
+#, fuzzy
+msgid "Accepts the entered values and stores the budget"
+msgstr "Priima vertes ir jas išsaugo"
+
+#: views/kbudgetview.cpp:131
+#, fuzzy
+msgid "Use this to store the modified data."
+msgstr "Naudokite tai norėdami užverti dialogą"
+
+#: views/kbudgetview.cpp:137
+msgid "Revert budget to last saved state"
+msgstr ""
+
+#: views/kbudgetview.cpp:138
+#, fuzzy
+msgid "Use this to discard the modified data."
+msgstr "Naudokite tai norėdami užverti dialogą"
+
+#: views/kbudgetview.cpp:489
+msgid "Do you want to save the changes for <b>%1</b>"
+msgstr ""
+
+#: views/kbudgetview.cpp:610
+msgid ""
+"A budget with the name '%1' already exists. It is not advisable to have "
+"multiple budgets with the same identification name. Are you sure you would "
+"like to rename the budget?"
+msgstr ""
+
+#: views/kbudgetview.cpp:635 views/kbudgetview.cpp:750
+#, fuzzy
+msgid "Unable to modify budget"
+msgstr "Nepavyksta pakeisti tvarkaraščio: "
+
+#: views/kbudgetview.cpp:736
+#, fuzzy
+msgid "Unable to reset budget"
+msgstr "Nepavyksta pakeisti tvarkaraščio: "
+
+#: views/rc.cpp:1
+msgid "List"
+msgstr "Sąrašas"
+
+#: views/rc.cpp:2 views/rc.cpp:20
+msgid "Collapse all accounts in the list"
+msgstr ""
+
+#: views/rc.cpp:3 views/rc.cpp:21
+msgid "Expand all accounts in the list"
+msgstr ""
+
+#: views/rc.cpp:4
+msgid "Icons"
+msgstr "Ženkliukai"
+
+#: views/rc.cpp:5 views/rc.cpp:22
+msgid "Note: Unused categories are not shown as selected by settings."
+msgstr ""
+
+#: views/rc.cpp:6 views/rc.cpp:23 views/rc.cpp:54
+msgid "Total Profits:"
+msgstr ""
+
+#: views/rc.cpp:7
+msgid "Your budgets"
+msgstr ""
+
+#: dialogs/rc.cpp:340 dialogs/rc.cpp:841 dialogs/settings/rc.cpp:124
+#: views/rc.cpp:8 widgets/rc.cpp:48 widgets/rc.cpp:150
+msgid "New"
+msgstr "Naujas"
+
+#: views/rc.cpp:9
+#, fuzzy
+msgid "Ren"
+msgstr "Pa&leisti"
+
+#: views/rc.cpp:10
+#, fuzzy
+msgid "Del"
+msgstr "Detalės"
+
+#: views/rc.cpp:11
+#, fuzzy
+msgid "Res"
+msgstr "Iš naujo"
+
+#: views/rc.cpp:12
+#, fuzzy
+msgid "Upd"
+msgstr "&Aukštyn"
+
+#: views/rc.cpp:15
+msgid "Hide unused budget categories"
+msgstr ""
+
+#: views/rc.cpp:16
+#, fuzzy
+msgid "Assignments"
+msgstr "Turtas"
+
+#: views/rc.cpp:19
+#, fuzzy
+msgid "Include subaccounts"
+msgstr "Yra šalutinė sąskaita"
+
+#: dialogs/settings/rc.cpp:23 views/rc.cpp:24
+#, fuzzy
+msgid "Forecast Settings"
+msgstr "Bendrieji nustatymai"
+
+#: views/rc.cpp:25
+#, fuzzy
+msgid "Days to Forecast:"
+msgstr "Grynoji vertė šiandien"
+
+#: views/rc.cpp:26
+msgid "Days of Accounts Cycle:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:25 views/rc.cpp:27
+msgid "Day of Month to start Forecast:"
+msgstr ""
+
+#: views/rc.cpp:28
+msgid "Historic Cycles:"
+msgstr ""
+
+#: views/rc.cpp:29
+#, fuzzy
+msgid "Chart Detail:"
+msgstr "Ataskaitos kortelė"
+
+#: views/rc.cpp:30 widgets/kmymoneyaccountselector.cpp:64 widgets/rc.cpp:65
+msgid "All"
+msgstr "Visi"
+
+#: views/rc.cpp:31 widgets/rc.cpp:66
+msgid "Top-Level"
+msgstr ""
+
+#: views/rc.cpp:32 widgets/rc.cpp:67
+msgid "Groups"
+msgstr ""
+
+#: views/rc.cpp:33 widgets/rc.cpp:68
+#, fuzzy
+msgid "Totals"
+msgstr "Iš viso"
+
+#: views/rc.cpp:34
+#, fuzzy
+msgid "<p>Choose what level of detail to show on the chart.</p>"
+msgstr "<p>Pasirinkite pavadinimą šiai ataskaitai.</p>"
+
+#: views/rc.cpp:35
+msgid "Current Forecast Method:"
+msgstr ""
+
+#: views/rc.cpp:36
+#, fuzzy
+msgid "method"
+msgstr "Metodas:"
+
+#: dialogs/settings/rc.cpp:32 views/rc.cpp:37
+msgid "History Forecast Method"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:33 views/rc.cpp:38
+msgid "Simple Moving Average"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:34 views/rc.cpp:39
+msgid "Weighted Moving Average"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:35 views/rc.cpp:40
+msgid "Linear Regression"
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:315 dialogs/rc.cpp:628 dialogs/rc.cpp:647
+#: views/rc.cpp:43
+msgid "Summary"
+msgstr "Santrauka"
+
+#: views/rc.cpp:45
+#, fuzzy
+msgid "0 days"
+msgstr "Paskutinės 30 d."
+
+#: views/rc.cpp:46
+#, fuzzy
+msgid "30 days"
+msgstr "Paskutinės 30 d."
+
+#: views/rc.cpp:47
+#, fuzzy
+msgid "60 days"
+msgstr "Paskutinės 30 d."
+
+#: views/rc.cpp:48
+#, fuzzy
+msgid "90 days"
+msgstr "Paskutinės 30 d."
+
+#: views/rc.cpp:49
+msgid "New Item"
+msgstr ""
+
+#: views/rc.cpp:50 widgets/rc.cpp:64
+#, fuzzy
+msgid "Detail"
+msgstr "Detalės"
+
+#: views/rc.cpp:51
+#, fuzzy
+msgid "Advanced"
+msgstr "&Sudėtingiau..."
+
+#: views/rc.cpp:52
+#, fuzzy
+msgid "Budget Forecast"
+msgstr "Kiti metai"
+
+#: views/rc.cpp:55
+msgid "Investment Summary"
+msgstr "investicijų apžvalga"
+
+#: views/rc.cpp:56
+msgid "Select Account:"
+msgstr "Pasirinkite sąskaitą:"
+
+#: views/rc.cpp:57
+msgid ""
+"Summary of the equities contained in this account, showing your holdings and "
+"their most recent price."
+msgstr ""
+
+#: views/rc.cpp:60 widgets/register.cpp:564
+msgid "No."
+msgstr "Nr."
+
+#: views/rc.cpp:64
+msgid "Balance: "
+msgstr "Balansas: "
+
+#: views/rc.cpp:65
+#, fuzzy
+msgid "Address"
+msgstr "Adresas:"
+
+#: views/rc.cpp:66
+msgid "Payee Information"
+msgstr "Korespondento informacija"
+
+#: views/rc.cpp:67
+msgid "E-Mail:"
+msgstr "E. paštas:"
+
+#: dialogs/rc.cpp:393 views/rc.cpp:69
+msgid "Telephone/Fax:"
+msgstr "Telefonas/faksas:"
+
+#: views/rc.cpp:70
+#, fuzzy
+msgid "Notes"
+msgstr "Pastabos:"
+
+#: views/rc.cpp:71
+msgid "Address:"
+msgstr "Adresas:"
+
+#: views/rc.cpp:72
+#, fuzzy
+msgid "Matching"
+msgstr "Nieko nedaryti"
+
+#: views/rc.cpp:73
+#, fuzzy
+msgid "Transaction Matching"
+msgstr "Operacijos pagal mėnesius"
+
+#: views/rc.cpp:74
+#, fuzzy
+msgid "No matching"
+msgstr "Nieko nedaryti"
+
+#: views/rc.cpp:75
+#, fuzzy
+msgid "Match on Payee name"
+msgstr "Vadybininko vardas:"
+
+#: views/rc.cpp:76
+#, fuzzy
+msgid "Match on a name listed below"
+msgstr "Vadybininko vardas:"
+
+#: views/rc.cpp:77
+#, fuzzy
+msgid "List of matching names"
+msgstr "Nieko nedaryti"
+
+#: views/rc.cpp:78
+msgid ""
+"This list contains the names that will match this payee if a transaction is "
+"imported from an external source. Keep in mind, that you can specify regular "
+"expressions here."
+msgstr ""
+
+#: views/rc.cpp:79
+#, fuzzy
+msgid "Ignore Case"
+msgstr "Padidėjimas"
+
+#: views/rc.cpp:80
+#, fuzzy
+msgid "Default Account"
+msgstr "Pasirinkite sąskaitą:"
+
+#: views/rc.cpp:81
+#, fuzzy
+msgid ""
+"Use the default account for\n"
+"new transactions with this payee"
+msgstr "<p>Pasirinkite kaip sugrupuoti pervedimus šiame pranešime</p>"
+
+#: views/rc.cpp:82
+#, fuzzy
+msgid "Default category:"
+msgstr "Nauja kategorija..."
+
+#: views/rc.cpp:83
+#, fuzzy
+msgid "Suggest a category"
+msgstr "Nauja kategorija..."
+
+#: views/rc.cpp:85
+#, fuzzy
+msgid "New Scheduled transaction..."
+msgstr "Įvesti operaciją pagal tvarkaraštį"
+
+#: views/rc.cpp:86
+msgid "Filter Accounts"
+msgstr ""
+
+#: views/rc.cpp:87
+msgid "List View"
+msgstr "Sąrašo vaizdas"
+
+#: views/rc.cpp:88
+msgid "Calendar View"
+msgstr "Kalendoriaus vaizdas"
+
+#: views/kinstitutionsview.cpp:43
+#, fuzzy
+msgid "Institution/Account"
+msgstr "Institucija"
+
+#: views/kinstitutionsview.cpp:157
+msgid "Accounts with no institution assigned"
+msgstr ""
+
+#: views/kscheduledview.cpp:70
+msgid "Type/Name"
+msgstr ""
+
+#: views/kscheduledview.cpp:75
+msgid "Frequency"
+msgstr ""
+
+#: views/kscheduledview.cpp:157
+msgid "Unable to load accounts: "
+msgstr ""
+
+#: views/kscheduledview.cpp:171 views/kscheduledview.cpp:429
+#: views/kscheduledview.cpp:445 widgets/kmymoneyscheduledcalendar.cpp:46
+msgid "Bills"
+msgstr "Mokėjimo sąskaitos"
+
+#: dialogs/rc.cpp:232 dialogs/rc.cpp:706 views/kscheduledview.cpp:172
+#: views/kscheduledview.cpp:431 views/kscheduledview.cpp:447
+#: widgets/kmymoneyscheduledcalendar.cpp:47
+msgid "Deposits"
+msgstr "Indėliai"
+
+#: views/kscheduledview.cpp:173 views/kscheduledview.cpp:435
+#: views/kscheduledview.cpp:451
+msgid "Loans"
+msgstr ""
+
+#: views/kscheduledview.cpp:357
+msgid "Error activating context menu"
+msgstr ""
+
+#: views/kscheduledview.cpp:385
+msgid "Error executing item"
+msgstr ""
+
+#: views/kscheduledview.cpp:419
+msgid "Unable to filter account"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:508
+#, fuzzy
+msgid "Statement Details"
+msgstr "Pranešimo data:"
+
+#: views/kgloballedgerview.cpp:512
+#, fuzzy
+msgid "Statement Deposit Details"
+msgstr "Pranešimo data:"
+
+#: views/kgloballedgerview.cpp:513
+#, fuzzy
+msgid "Statement Payment Details"
+msgstr "Pranešimo data:"
+
+#: views/kgloballedgerview.cpp:642
+msgid "%1 deposits (%3), %2 payments (%4)"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:649
+#, fuzzy
+msgid "%1 payments (%2)"
+msgstr "Viso mokėti:"
+
+#: views/kgloballedgerview.cpp:653
+#, fuzzy
+msgid "%1 deposits (%2)"
+msgstr "%1 indėliai."
+
+#: views/kgloballedgerview.cpp:721
+#, c-format
+msgid "Statement: %1"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:722 views/kgloballedgerview.cpp:736
+#, c-format
+msgid "Cleared: %1"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:723
+#, c-format
+msgid "Difference: %1"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:730
+#, fuzzy, c-format
+msgid "Last reconciled: %1"
+msgstr "Sutaikinta: %1"
+
+#: views/kgloballedgerview.cpp:732
+#, fuzzy
+msgid "Never reconciled"
+msgstr "Nesutaikintos"
+
+#: views/kgloballedgerview.cpp:772
+#, fuzzy
+msgid "Investment value: %1%2"
+msgstr "Investicija: %1"
+
+#: views/kgloballedgerview.cpp:1040
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to continue to edit the transactions anyway?"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1051
+msgid ""
+"At least one split of the selected transactions has been frozen. Editing the "
+"transactions is therefore prohibited."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1053
+msgid "Transaction already frozen"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1058
+msgid ""
+"At least one split of the selected transaction references an account that "
+"has been closed. Editing the transactions is therefore prohibited."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1060
+#, fuzzy
+msgid "Account closed"
+msgstr "Sąskaitos"
+
+#: views/kgloballedgerview.cpp:1349
+#, fuzzy
+msgid "Cannot create transactions when no account is selected."
+msgstr "Išrinkti operacijas be korespondento"
+
+#: views/kgloballedgerview.cpp:1354
+msgid "Cannot create transactions in the context of a category."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1358
+#, fuzzy
+msgid "Cannot create transactions in a closed account."
+msgstr "Išrinkti operacijas be korespondento"
+
+#: views/kgloballedgerview.cpp:1370
+#, fuzzy
+msgid "Cannot process transaction with focus if it is not selected."
+msgstr "Išrinkti operacijas be korespondento"
+
+#: views/kgloballedgerview.cpp:1400
+#, fuzzy
+msgid "Cannot edit transactions with frozen splits."
+msgstr "Išrinkti operacijas be korespondento"
+
+#: views/kgloballedgerview.cpp:1411
+msgid "Cannot edit transactions in the context of a category."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1430
+msgid ""
+"Cannot edit investment transactions and non-investment transactions together."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1438
+msgid "Cannot edit multiple split transactions at once."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1448
+msgid "Cannot edit investment transactions in the context of this account."
+msgstr ""
+
+#: views/kforecastview.cpp:164
+#, fuzzy
+msgid "Scheduled"
+msgstr "Tvarkaraštis"
+
+#: views/kforecastview.cpp:169
+#, fuzzy
+msgid "History"
+msgstr "Kainų istorija"
+
+#: views/kforecastview.cpp:296
+msgid "The balance of %2 is below the minimum balance %3 today."
+msgstr ""
+
+#: views/kforecastview.cpp:301 views/khomeview.cpp:1043
+msgid "The balance of %1 will drop below the minimum balance %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:318 views/khomeview.cpp:1059
+msgid "The balance of %1 is below %2 today."
+msgstr ""
+
+#: views/kforecastview.cpp:323 views/khomeview.cpp:1064
+msgid "The balance of %1 is above %2 today."
+msgstr ""
+
+#: views/kforecastview.cpp:330 views/khomeview.cpp:1070
+msgid "The balance of %1 will drop below %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:335 views/khomeview.cpp:1075
+msgid "The balance of %1 will raise above %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:348
+msgid "The account %1 is decreasing %2 per cycle."
+msgstr ""
+
+#: views/kforecastview.cpp:404 widgets/kmymoneyaccounttreeforecast.cpp:114
+#, c-format
+msgid "Min Bal %1"
+msgstr ""
+
+#: views/kforecastview.cpp:406 widgets/kmymoneyaccounttreeforecast.cpp:116
+#, c-format
+msgid "Min Date %1"
+msgstr ""
+
+#: views/kforecastview.cpp:409 widgets/kmymoneyaccounttreeforecast.cpp:119
+#, c-format
+msgid "Max Bal %1"
+msgstr ""
+
+#: views/kforecastview.cpp:411 widgets/kmymoneyaccounttreeforecast.cpp:121
+#, c-format
+msgid "Max Date %1"
+msgstr ""
+
+#: views/kforecastview.cpp:413 widgets/kmymoneyaccounttreeforecast.cpp:123
+#, fuzzy
+msgid "Average"
+msgstr "Visos būklės"
+
+#: views/kforecastview.cpp:649 views/khomeview.cpp:268 views/khomeview.cpp:275
+#, fuzzy
+msgid "Networth Forecast"
+msgstr "Grynoji vertė šiandien"
+
+#: views/khomeview.cpp:203
+msgid "Your Financial Summary"
+msgstr "Jūsų finansų apžvalga"
+
+#: views/khomeview.cpp:218
+msgid "Preferred Accounts"
+msgstr ""
+
+#: views/khomeview.cpp:225 views/khomeview.cpp:227
+msgid "Payment Accounts"
+msgstr "Mokėjimų sąskaitos"
+
+#: views/khomeview.cpp:256
+msgid "Show KMyMoney welcome page"
+msgstr "Rodyti KMyMoney pasisveikinimo puslapį"
+
+#: views/khomeview.cpp:409
+msgid "Overdue payments"
+msgstr "Vėluojantys mokėjimai"
+
+#: views/khomeview.cpp:424 views/khomeview.cpp:497 views/khomeview.cpp:531
+#, fuzzy
+msgid "Balance after"
+msgstr "Balansas: "
+
+#: views/khomeview.cpp:482
+#, fuzzy
+msgid "Today's payments"
+msgstr "Mokėjimai šiandien"
+
+#: views/khomeview.cpp:516
+msgid "Future payments"
+msgstr "Mokėjimai ateityje"
+
+#: views/khomeview.cpp:585
+#, fuzzy
+msgid "Less..."
+msgstr "Mažiau..."
+
+#: views/khomeview.cpp:587
+#, fuzzy
+msgid "More..."
+msgstr "Daugiau..."
+
+#: views/khomeview.cpp:622
+#, fuzzy
+msgid "Enter schedule"
+msgstr "Naujas tvarkaraštis"
+
+#: views/khomeview.cpp:624
+#, fuzzy
+msgid "Skip schedule"
+msgstr "&Naujas tvarkaraštis..."
+
+#: views/khomeview.cpp:627
+#, fuzzy
+msgid "Edit schedule"
+msgstr "Redaguoti mokėjimo sąskaitos tvarkaraštį"
+
+#: views/khomeview.cpp:631
+#, fuzzy
+msgid " (%1 payments)"
+msgstr "Viso mokėti:"
+
+#: views/khomeview.cpp:771
+#, fuzzy
+msgid "To Minimum Balance / Maximum Credit"
+msgstr "Pabaigos balansas:"
+
+#: views/khomeview.cpp:964
+#, fuzzy
+msgid "%1 Day Forecast"
+msgstr "Grynoji vertė šiandien"
+
+#: views/khomeview.cpp:973 widgets/kmymoneyaccounttreeforecast.cpp:67
+msgid "%1 days"
+msgstr ""
+
+#: views/khomeview.cpp:1039
+msgid "The balance of %1 is below the minimum balance %2 today."
+msgstr ""
+
+#: views/khomeview.cpp:1175
+msgid ""
+"Before KMyMoney can give you detailed information about your financial "
+"status, you need to create at least one account. Until then, KMyMoney shows "
+"the welcome page instead."
+msgstr ""
+
+#: views/khomeview.cpp:1258
+#, fuzzy
+msgid "Assets and Liabilities Summary"
+msgstr "Turtas ir įsipareigojimai"
+
+#: views/khomeview.cpp:1262
+#, fuzzy
+msgid "Asset Accounts"
+msgstr "Turto sąskaita"
+
+#: views/khomeview.cpp:1270
+#, fuzzy
+msgid "Liability Accounts"
+msgstr "Įsipareigojimų sąskaitos"
+
+#: views/khomeview.cpp:1348
+#, fuzzy
+msgid "Total Assets"
+msgstr "Iš viso"
+
+#: views/khomeview.cpp:1354
+#, fuzzy
+msgid "Total Liabilities"
+msgstr "Turtas ir įsipareigojimai"
+
+#: views/khomeview.cpp:1399
+#, fuzzy
+msgid "Current Month Summary"
+msgstr "Šis mėnuo"
+
+#: views/khomeview.cpp:1403 views/khomeview.cpp:1440
+#, fuzzy
+msgid "Budgeted"
+msgstr "Kiti metai"
+
+#: views/khomeview.cpp:1433
+#, fuzzy
+msgid "Budget Overruns"
+msgstr "Kiti metai"
+
+#: views/khomeview.cpp:1502
+msgid "No Budget Categories have been overrun"
+msgstr ""
+
+#: views/khomeview.cpp:1801
+msgid "Cash Flow Summary"
+msgstr ""
+
+#: views/khomeview.cpp:1808
+#, fuzzy
+msgid "Income and Expenses of Current Month"
+msgstr "Įplaukos ir išlaidos šį mėnesį"
+
+#: views/khomeview.cpp:1816
+#, fuzzy
+msgid "Scheduled Income"
+msgstr "Tvarkaraščio pavadinimas:"
+
+#: views/khomeview.cpp:1819
+#, fuzzy
+msgid "Expenses"
+msgstr "Išlaidos"
+
+#: views/khomeview.cpp:1822
+#, fuzzy
+msgid "Scheduled Expenses"
+msgstr "Įplaukos ir išlaidos šį mėnesį"
+
+#: views/khomeview.cpp:1850
+#, fuzzy
+msgid "Liquid Assets and Liabilities"
+msgstr "Turtas ir įsipareigojimai"
+
+#: views/khomeview.cpp:1855
+#, fuzzy
+msgid "Liquid Assets"
+msgstr "Turtas"
+
+#: views/khomeview.cpp:1858
+#, fuzzy
+msgid "Transfers to Liquid Liabilities"
+msgstr "Turtas ir įsipareigojimai"
+
+#: views/khomeview.cpp:1861
+#, fuzzy
+msgid "Liquid Liabilities"
+msgstr "Įsipareigojimas"
+
+#: views/khomeview.cpp:1864
+#, fuzzy
+msgid "Other Transfers"
+msgstr "Perkėlimai"
+
+#: views/khomeview.cpp:1908
+msgid "Cash Flow Status"
+msgstr ""
+
+#: views/khomeview.cpp:1914
+msgid "Expected Liquid Assets"
+msgstr ""
+
+#: views/khomeview.cpp:1917
+#, fuzzy
+msgid "Expected Liquid Liabilities"
+msgstr "Turtas ir įsipareigojimai"
+
+#: views/khomeview.cpp:1920
+msgid "Expected Profit/Loss"
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:64
+#, fuzzy
+msgid "OFX..."
+msgstr "..."
+
+#: plugins/ofximport/ofximporterplugin.cpp:69
+#, fuzzy
+msgid "OFX import file selection"
+msgstr "Išvedimio filtro vieta"
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid ""
+"Unable to import %1 using the OFX importer plugin. This file is not the "
+"correct format."
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid "Incorrect format"
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:122
+#, fuzzy
+msgid "Unable to parse file"
+msgstr "Nepavyksta pakeisti tvarkaraščio: "
+
+#: plugins/ofximport/ofximporterplugin.cpp:576
+#, fuzzy
+msgid "Online settings"
+msgstr "GPG šifravimo nustatymai"
+
+#: plugins/ofximport/ofximporterplugin.cpp:635
+#, c-format
+msgid "Error connecting to bank: %1"
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:646
+msgid ""
+"Unable to import %1 using the OFX importer plugin. The plugin returned the "
+"following error:<p>%2"
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Importing process terminated unexpectedly."
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Failed to import all statements."
+msgstr ""
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "The HTTP request failed."
+msgstr ""
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "Failed"
+msgstr "Nepavyko"
+
+#: plugins/ofximport/ofxpartner.cpp:410
+#, fuzzy
+msgid "Cannot open file %1 for writing"
+msgstr "Nepavyksta atverti „%1“ bylos rašymui"
+
+#: plugins/ofximport/ofxpartner.cpp:414
+msgid "OFX setup error"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+#, fuzzy
+msgid "Loading banklist"
+msgstr "Įkeliamos kainos..."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid ""
+"Getting list of banks from http://moneycentral.msn.com/\n"
+"This may take some time depending on the available bandwidth."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:155
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:199
+msgid "Supports online statements<br>"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:157
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:201
+msgid "Supports investments<br>"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:159
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:203
+msgid "Supports bill payment (but not supported by KMyMoney yet)<br>"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:163
+msgid "Does not support online banking</p>"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:173
+msgid "Please choose a bank."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:179
+msgid "Please fill all fields with values."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:271
+msgid "No suitable accounts were found at this bank."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:283
+msgid "Please choose an account"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:386
+msgid "Server message: %1\n"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+msgid "Your bank returned warnings when signing on"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+#, c-format
+msgid "WARNING %1"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+msgid "Error signing onto your bank"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, c-format
+msgid "ERROR %1"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingstatus.cpp:59
+msgid "Enabled & configured"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:1
+msgid "OFX Direct Connect"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:2
+msgid "Contacting bank..."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:4
+msgid "Online Banking Account Setup"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:5
+#, fuzzy
+msgid "Select Financial Institution"
+msgstr "Sąskaitų balansai pagal institucijas"
+
+#: plugins/ofximport/dialogs/rc.cpp:6
+msgid "Please select your financial institution from the list below..."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:7
+msgid "Automatic"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:8
+#, fuzzy
+msgid "Financial Institution"
+msgstr "Institucija"
+
+#: plugins/ofximport/dialogs/rc.cpp:9
+#, fuzzy
+msgid "Manual"
+msgstr "Rankinis indėlis"
+
+#: plugins/ofximport/dialogs/rc.cpp:10
+msgid "Org"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:11
+#, fuzzy
+msgid "FID"
+msgstr "ID"
+
+#: dialogs/settings/rc.cpp:120 plugins/ofximport/dialogs/rc.cpp:12
+#: widgets/rc.cpp:46
+msgid "URL"
+msgstr "URL"
+
+#: plugins/ofximport/dialogs/rc.cpp:13
+#, fuzzy
+msgid "Enter Login Details"
+msgstr "Operacijos detalės"
+
+#: plugins/ofximport/dialogs/rc.cpp:14
+msgid ""
+"Please enter the username and password you use to log into this bank for "
+"online banking. Please note that many banks require a separate signup, and "
+"assign a separate PIN or password just for online banking from home."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:15
+#, fuzzy
+msgid "Connection Details"
+msgstr "Operacijos detalės"
+
+#: plugins/ofximport/dialogs/rc.cpp:16
+msgid "Username"
+msgstr "Naudotojas"
+
+#: plugins/ofximport/dialogs/rc.cpp:17 plugins/ofximport/dialogs/rc.cpp:36
+msgid "Header Version"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:18 plugins/ofximport/dialogs/rc.cpp:37
+#, fuzzy
+msgid "Identify as"
+msgstr "Identifikacija"
+
+#: dialogs/rc.cpp:742 plugins/ofximport/dialogs/rc.cpp:19
+msgid "Password"
+msgstr "Slaptažodis"
+
+#: plugins/ofximport/dialogs/rc.cpp:20
+#, fuzzy
+msgid "Select Account"
+msgstr "Pasirinkite sąskaitą:"
+
+#: plugins/ofximport/dialogs/rc.cpp:21
+msgid ""
+"Please select the account from your financial institution from the list "
+"below which matches this account."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:24
+msgid "Bank"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:25
+#, fuzzy
+msgid "Branch"
+msgstr "Balansas"
+
+#: plugins/ofximport/dialogs/rc.cpp:26
+msgid "WizardPage"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:27
+msgid ""
+"Congratulations! You have successfully set up your bank for online banking "
+"via OFX."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:28
+msgid "Account Details"
+msgstr "Sąskaitos detalės"
+
+#: plugins/ofximport/dialogs/rc.cpp:29 plugins/ofximport/dialogs/rc.cpp:31
+msgid "&lt;Not configured&gt;"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:30
+msgid "BANK/BROKER:"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:32
+#, fuzzy
+msgid "Unavailable"
+msgstr "Reikšmė"
+
+#: plugins/ofximport/dialogs/rc.cpp:33
+msgid "ACCOUNT:"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:34
+msgid "STATUS:"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:35
+#, fuzzy
+msgid "OFX Details"
+msgstr "Detalės"
+
+#: plugins/ofximport/dialogs/rc.cpp:38
+#, fuzzy
+msgid "Start date of import"
+msgstr "Pranešimo pradžios data"
+
+#: plugins/ofximport/dialogs/rc.cpp:39
+#, fuzzy
+msgid "To&day minus"
+msgstr "Mokėjimai šiandien"
+
+#: plugins/ofximport/dialogs/rc.cpp:40
+#, fuzzy
+msgid "days"
+msgstr "Paskutinės 30 d."
+
+#: plugins/ofximport/dialogs/rc.cpp:41
+#, fuzzy
+msgid "Last &update"
+msgstr "Praėję metai"
+
+#: plugins/ofximport/dialogs/rc.cpp:42
+msgid "Pi&ck date"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:43
+msgid "Name is derived from"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:44
+msgid "P&AYEEID"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:45
+msgid "&NAME"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:46
+msgid "field if both are present in download"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:81
+msgid "Quicken Windows 2003"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:82
+msgid "Quicken Windows 2004"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:83
+msgid "Quicken Windows 2005"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:84
+msgid "Quicken Windows 2006"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:85
+msgid "Quicken Windows 2007"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:86
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:111
+msgid "Quicken Windows 2008"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:89
+msgid "MS-Money 2003"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:90
+msgid "MS-Money 2004"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:91
+msgid "MS-Money 2005"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:92
+msgid "MS-Money 2006"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:93
+msgid "MS-Money 2007"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:94
+msgid "MS-Money Plus"
+msgstr ""
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:91
+msgid "Report Configuration"
+msgstr "Ataskaitos konfigūravimas"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:117
+#: dialogs/kreportconfigurationfilterdlg.cpp:135
+msgid "Rows/Columns"
+msgstr "Eilutės/Stulpeliai"
+
+#: dialogs/investtransactioneditor.cpp:203
+#: dialogs/investtransactioneditor.cpp:537
+#: dialogs/investtransactioneditor.cpp:579 dialogs/rc.cpp:103
+#: dialogs/rc.cpp:158 dialogs/rc.cpp:245 dialogs/rc.cpp:750 dialogs/rc.cpp:794
+#: widgets/kmymoneyaccountselector.cpp:182 widgets/register.cpp:64
+#: widgets/register.cpp:567 widgets/transaction.cpp:1500
+msgid "Security"
+msgstr "Saugumas"
+
+#: dialogs/investtransactioneditor.cpp:211
+#, fuzzy
+msgid "Asset account"
+msgstr "Turto sąskaitos"
+
+#: dialogs/investtransactioneditor.cpp:1073
+#, fuzzy
+msgid "Price/Share"
+msgstr "Kaina"
+
+#: dialogs/kmergetransactionsdlg.cpp:39
+#, fuzzy
+msgid "Merge Transactions"
+msgstr "Operacijos"
+
+#: dialogs/kmergetransactionsdlg.cpp:40
+msgid "Are you sure you wish to merge these transactions?"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:59
+msgid "Start Dialog"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Templates"
+msgstr "Šablonai"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Select templates"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:80 dialogs/kstartdlg.cpp:119
+msgid "New KMyMoney document"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:90
+msgid "Open a KMyMoney document"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:96
+msgid ""
+"%1|KMyMoney files (*.kmy)\n"
+"%2|All files (*.*)"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:102
+msgid "Recent Files"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:217
+msgid "Blank Document"
+msgstr ""
+
+#: dialogs/knewbudgetdlg.cpp:71
+msgid "Please specify a budget name"
+msgstr ""
+
+#: dialogs/kgncpricesourcedlg.cpp:48
+#, c-format
+msgid "Investment: %1"
+msgstr "Investicija: %1"
+
+#: dialogs/kgncpricesourcedlg.cpp:49
+#, c-format
+msgid "Quote source: %1"
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:62 dialogs/ksecuritylisteditor.cpp:69
+msgid "Delete this entry"
+msgstr "Trinti šį įrašą"
+
+#: dialogs/ksecuritylisteditor.cpp:70
+msgid "Remove this security item from the file"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:73
+msgid "&Add"
+msgstr "&Pridėti"
+
+#: dialogs/kmymoneypricedlg.cpp:68 dialogs/ksecuritylisteditor.cpp:75
+msgid "Add a new entry"
+msgstr "Pridėti naują įrašą"
+
+#: dialogs/ksecuritylisteditor.cpp:76
+msgid "Create a new security entry."
+msgstr ""
+
+#: dialogs/keditequityentrydlg.cpp:77 dialogs/kmymoneypricedlg.cpp:74
+#: dialogs/ksecuritylisteditor.cpp:81
+msgid "Modify the selected entry"
+msgstr "Keisti pažymėtą įrašą"
+
+#: dialogs/ksecuritylisteditor.cpp:82
+msgid "Change the security information of the selected entry."
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:80 dialogs/ksecuritylisteditor.cpp:87
+msgid "Close the dialog"
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:81 dialogs/ksecuritylisteditor.cpp:88
+msgid "Use this to close the dialog and return to the application."
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:184
+msgid ""
+"Do you really want to remove the currency <b>%1</b> from the file?</"
+"p><i>Note: It is currently not supported to add currencies.</i>"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:187
+msgid "Do you really want to remove the %1 <b>%2</b> from the file?"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:190
+msgid "Delete security"
+msgstr "Trinti vertybinį popierį"
+
+#: dialogs/kmymoneypricedlg.cpp:63
+msgid "Remove this price item from the file"
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:66 dialogs/mymoneyqifprofileeditor.cpp:94
+msgid "&New"
+msgstr "&Naujas"
+
+#: dialogs/kmymoneypricedlg.cpp:69
+msgid "Create a new price entry."
+msgstr "Sukurti naują kainos įrašą."
+
+#: dialogs/kmymoneypricedlg.cpp:75
+msgid "Change the details of selected price information."
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Do you really want to delete the selected price entry?"
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Delete price information"
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:46
+msgid ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:50 dialogs/rc.cpp:22
+msgid "Choose import type:"
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:51 dialogs/rc.cpp:20
+msgid "Choose Import Type Dialog"
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:53
+msgid ""
+"Please choose the type of export you wish to perform. A simple explanation\n"
+"of the export type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an export type please press the OK button."
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:57
+msgid "Choose export type:"
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:58
+msgid "Choose Export Type Dialog"
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:78
+msgid ""
+"QIF files are created by the popular accounting program Quicken.\n"
+"Another dialog will appear, if you choose this type, asking for further\n"
+"information relevant to the Quicken format."
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:82
+msgid ""
+"The CSV type uses a comma delimeted text file that can be used by\n"
+"most popular spreadsheet programs available for Linux and other operating\n"
+"systems."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:222
+msgid "%1 units in %2"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid ""
+"Failed to retrieve an exchange rate for %1 from %2. It will be skipped this "
+"time."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid "Price Update Failed"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:427
+msgid ""
+"Failed to retrieve a quote for %1 from %2. Press <b>No</b> to remove the "
+"online price source from this security permanently, <b>Yes</b> to continue "
+"updating this security during future price updates or <b>Cancel</b> to stop "
+"the current update operation."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:427 dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Price Update Failed"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Cannot update security <b>%1</b>: %2"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:528
+msgid "Price for %1 updated (id %2)"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:534
+msgid "Received an invalid price for %1, unable to update."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:554
+msgid ""
+"Received a price for %1 (id %2), but this symbol is not on the list! "
+"Aborting entire update."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:222
+msgid ""
+"The number <b>%1</b> has already been used in account <b>%2</b>. Do you want "
+"to replace it with the next available number?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:222
+msgid "Duplicate number"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:303
+msgid ""
+"This transaction has more than two splits and is based on a different "
+"currency (%1). Using this account to modify the transaction is currently not "
+"very well supported by KMyMoney and may result in false results."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:305
+msgid ""
+"KMyMoney was not able to find a more appropriate account to edit this "
+"transaction. Nevertheless, you are allowed to modify the transaction. If you "
+"don't want to edit this transaction, please cancel from editing next."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:307
+msgid ""
+"Using e.g. <b>%1</b> to edit this transaction is a better choice. "
+"Nevertheless, you are allowed to modify the transaction. If you want to use "
+"the suggested account instead, please cancel from editing next and change "
+"the view to the suggested account."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:410
+msgid ""
+"This transaction has more than two splits and is originally based on a "
+"different currency (%1). Using this account to modify the transaction may "
+"result in rounding errors. Do you want to continue?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:412
+msgid ""
+"At least one of the selected transactions has more than two splits and is "
+"originally based on a different currency (%1). Using this account to modify "
+"the transactions may result in rounding errors. Do you want to continue?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:557
+#, fuzzy
+msgid "Storing transactions"
+msgstr "Ieškoti operacijų"
+
+#: dialogs/transactioneditor.cpp:603 widgets/kmymoneybriefschedule.cpp:65
+msgid "&Enter"
+msgstr "Į&vesti"
+
+#: dialogs/transactioneditor.cpp:606
+#, fuzzy
+msgid "Use this to enter the transaction into the ledger."
+msgstr "<p>Pasirinkite kaip sugrupuoti pervedimus šiame pranešime</p>"
+
+#: dialogs/transactioneditor.cpp:607
+#, fuzzy
+msgid "&Schedule"
+msgstr "Tvarkaraštis"
+
+#: dialogs/transactioneditor.cpp:609
+#, fuzzy
+msgid "Accepts the entered data and stores it as schedule"
+msgstr "Priima vertes ir jas išsaugo"
+
+#: dialogs/transactioneditor.cpp:610
+msgid "Use this to schedule the transaction for later entry into the ledger."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"The transaction you are about to enter has a post date in the future.<br/"
+"><br/>Do you want to enter it in the ledger or add it to the schedules?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"_: Dialog caption for 'Enter or schedule' dialog\n"
+"Enter or schedule?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:671
+msgid ""
+"The balance of account <b>%1</b> dropped below the warning balance of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:677
+msgid ""
+"The balance of account <b>%1</b> dropped below the minimum balance of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:683
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit warning "
+"limit of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:689
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit limit of %"
+"2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:740
+#, fuzzy
+msgid "Payer/Receiver"
+msgstr "Gavėjas"
+
+#: dialogs/transactioneditor.cpp:748
+#, fuzzy
+msgid "Category/Account"
+msgstr "Kategorija"
+
+#: dialogs/transactioneditor.cpp:980 dialogs/transactioneditor.cpp:1016
+#: dialogs/transactioneditor.cpp:1378 dialogs/transactioneditor.cpp:1399
+#: dialogs/transactioneditor.cpp:1422 dialogs/transactioneditor.cpp:1443
+#: dialogs/transactioneditor.cpp:1505 dialogs/transactioneditor.cpp:1509
+#: widgets/transaction.cpp:902
+msgid "Transfer from"
+msgstr "Perkelti iš"
+
+#: dialogs/transactioneditor.cpp:982 dialogs/transactioneditor.cpp:1018
+#: dialogs/transactioneditor.cpp:1401 dialogs/transactioneditor.cpp:1445
+#: dialogs/transactioneditor.cpp:1506 widgets/transaction.cpp:902
+msgid "Transfer to"
+msgstr "Perkelti į"
+
+#: dialogs/transactioneditor.cpp:1259
+#, fuzzy
+msgid "Select autofill transaction"
+msgstr "Trinti operaciją"
+
+#: dialogs/transactionmatcher.cpp:77
+msgid "First transaction does not match requirement for matching"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:79
+msgid "Second transaction does not match requirement for matching"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:83 dialogs/transactionmatcher.cpp:133
+msgid "Splits for %1 have conflicting values (%2,%3)"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:96 dialogs/transactionmatcher.cpp:149
+msgid ""
+"Both of these transactions have been imported into %1. Therefore they "
+"cannot be matched. Matching works with one imported transaction and one non-"
+"imported transaction."
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:101 dialogs/transactionmatcher.cpp:156
+msgid "Unable to match all splits (%1)"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:65
+msgid "Account and transfer account are the same. Please change one."
+msgstr ""
+"Sąskaita sutampa su sąskaita, į kurią perkeliama. Prašome vieną jų pakeisti."
+
+#: dialogs/kconfirmmanualenterdlg.cpp:84
+msgid "Payee changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:92
+#: dialogs/kconfirmmanualenterdlg.cpp:100
+msgid "Account changed. Old: \"%1\", New: \"%2\""
+msgstr "Sąskaita pakeista. Senoji: „%1“, Naujoji: „%2“"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:107
+msgid "Account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:115
+#, fuzzy
+msgid ""
+"Transfer account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</"
+"b><p>"
+msgstr "Perkėlimo sąskaita pakeista. Senoji: „%1“, Naujoji: „%2“"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:143
+msgid ""
+"Category changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:151
+#: dialogs/kconfirmmanualenterdlg.cpp:153
+msgid "empty"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:157
+msgid "Memo changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:166
+msgid "Amount changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:175
+msgid ""
+"Reconciliation flag changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%"
+"2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:182
+msgid "Fatal error in determining data: "
+msgstr "Rimta klaida nustatant duomenis: "
+
+#: dialogs/kselectdatabasedlg.cpp:56
+msgid ""
+"There are no Qt SQL drivers installed in your system.\n"
+"Please consult documentation for your distro, or visit the Qt web site (www."
+"trolltech.com) and search for SQL drivers."
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:100
+msgid "Qt SQL driver %1 is no longer installed on your system"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:107
+msgid "Qt SQL driver %1 is not suported"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:164
+msgid "SQLite files (*.sql);; All files (*.*)"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:167
+#, fuzzy
+msgid "Select SQLite file"
+msgstr "Pasirinkti stilių"
+
+#: dialogs/kselectdatabasedlg.cpp:188
+#, fuzzy
+msgid "All files (*.*)"
+msgstr "Visas laikotarpis"
+
+#: dialogs/kselectdatabasedlg.cpp:191
+#, fuzzy
+msgid "Select output file"
+msgstr "Pasirinkti stilių"
+
+#: dialogs/investactivities.cpp:168
+msgid "%1 (Brokerage)"
+msgstr ""
+
+#: dialogs/investactivities.cpp:200 dialogs/investactivities.cpp:288
+#: dialogs/investactivities.cpp:425 widgets/transaction.cpp:1548
+#, fuzzy
+msgid "Price/share"
+msgstr "Kaina"
+
+#: dialogs/investactivities.cpp:586
+msgid "Ratio 1/"
+msgstr ""
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid ""
+"<p>Please check that all the details in the following dialog are correct and "
+"press OK.</p><p>Editable data can be changed and can either be applied to "
+"just this occurence or for all subsequent occurences for this schedule. "
+"(You will be asked what you intend after pressing OK in the following dialog)"
+"</p>"
+msgstr ""
+
+#: dialogs/kenterscheduledlg.cpp:201
+#, fuzzy
+msgid "Enter scheduled transaction"
+msgstr "Įvesti operaciją pagal tvarkaraštį"
+
+#: dialogs/kcsvprogressdlg.cpp:65 dialogs/kexportdlg.cpp:65
+msgid "&Export"
+msgstr "&Eksportuoti"
+
+#: dialogs/kexportdlg.cpp:67 dialogs/kimportdlg.cpp:68
+msgid "Start operation"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:68
+msgid "Use this to start the export operation"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:71 dialogs/kimportdlg.cpp:72
+msgid "&Browse..."
+msgstr "&Naršyti..."
+
+#: dialogs/kexportdlg.cpp:73 dialogs/kimportdlg.cpp:74
+msgid "Select filename"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:74 dialogs/kimportdlg.cpp:75
+msgid "Use this to select a filename to export to"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:77 dialogs/kimportdlg.cpp:78
+#: dialogs/settings/ksettingsonlinequotes.cpp:64
+#: widgets/kmymoneyonlinequoteconfig.cpp:64
+msgid "&New..."
+msgstr "&Naujas..."
+
+#: dialogs/kexportdlg.cpp:79 dialogs/kimportdlg.cpp:80
+#: dialogs/mymoneyqifprofileeditor.cpp:96
+msgid "Create a new profile"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:80 dialogs/kimportdlg.cpp:81
+msgid "Use this to open the profile editor"
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:56
+msgid "Edit loan wizard"
+msgstr "Paskolos redagavimo vediklis"
+
+#: dialogs/keditloanwizard.cpp:58
+msgid ""
+"Please enter the date from which on the following changes will be effective. "
+"The date entered must be later than the opening date of this account (%1), "
+"but must not be in the future. The default will be today."
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:76
+msgid ""
+"Note: you will not be able to modify this account today, because the opening "
+"date \"%1\" is in the future. Please revisit this dialog when the time has "
+"come."
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:244
+msgid ""
+"Your previous selection was \"%1\". If you select another option, KMyMoney "
+"will dismiss the changes you have just entered. Do you wish to proceed?"
+msgstr ""
+
+#: dialogs/kcategoryreassigndlg.cpp:81
+msgid ""
+"At least one transaction/schedule still references the category <b>%1</b>. "
+"However, at least one category with the same currency must exist so that the "
+"transactions/schedules can be reassigned."
+msgstr ""
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid ""
+"This dialog does not allow to create new categories. Please pick a category "
+"from the list."
+msgstr ""
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+#, fuzzy
+msgid "Category creation"
+msgstr "Kategorija"
+
+#: dialogs/kbackupdlg.cpp:61
+msgid "C&hoose..."
+msgstr "Pas&irinkti..."
+
+#: dialogs/kbackupdlg.cpp:63
+msgid "Select mount point"
+msgstr ""
+
+#: dialogs/kbackupdlg.cpp:64
+msgid "Use this to browse to the mount point."
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:293
+#, fuzzy
+msgid "Next due date"
+msgstr "Kiti metai"
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid ""
+"You have turned on the GPG encryption support. This means, that new files "
+"will be stored encrypted. Existing files will not be encrypted "
+"automatically. To achieve encryption of existing files, please use the "
+"<b>File/Save as...</b> feature and store the file under a different name. "
+"Once confident with the result, feel free to delete the old file and rename "
+"the encrypted one to the old name."
+msgstr ""
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+#, fuzzy
+msgid "GPG encryption activated"
+msgstr "Naudoti GPG šifravimą"
+
+#: dialogs/settings/ksettingshome.cpp:51
+msgid "&Up"
+msgstr "&Aukštyn"
+
+#: dialogs/settings/ksettingshome.cpp:53
+msgid "Move selected item up"
+msgstr ""
+
+#: dialogs/settings/ksettingshome.cpp:54
+msgid "Use this to move the selected item up by one position in the list."
+msgstr ""
+
+#: dialogs/settings/ksettingshome.cpp:55
+msgid "&Down"
+msgstr "&Žemyn"
+
+#: dialogs/settings/ksettingshome.cpp:57
+msgid "Move selected item down"
+msgstr ""
+
+#: dialogs/settings/ksettingshome.cpp:58
+msgid "Use this to move the selected item down by one position in the list."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:1
+msgid "Color settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:2
+msgid "Foreground"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:3
+msgid "Text colors"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:4
+msgid "Grid color"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:5
+#, fuzzy
+msgid "Erronous transaction"
+msgstr "Bet kokia operacija"
+
+#: dialogs/settings/rc.cpp:6
+msgid "Value with missing conversion rate"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:7
+msgid "Negative value"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:8
+#, fuzzy
+msgid "Background"
+msgstr "Atsarginė kopija"
+
+#: dialogs/settings/rc.cpp:10
+msgid "List background colors"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:11
+#, fuzzy
+msgid "Normal"
+msgstr "Vadovo nėra"
+
+#: dialogs/settings/rc.cpp:12
+#, fuzzy
+msgid "Alternate"
+msgstr "Visos būklės"
+
+#: dialogs/settings/rc.cpp:13
+msgid "Special background colors"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:14
+msgid "Ledger group separator"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:15
+msgid "Required field"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:16
+#, fuzzy
+msgid "Imported transaction"
+msgstr "Trinti operaciją"
+
+#: dialogs/settings/rc.cpp:17
+#, fuzzy
+msgid "Matched transaction"
+msgstr "Ieškoti operacijų"
+
+#: dialogs/settings/rc.cpp:18
+msgid "Font settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:19
+msgid "Use system fonts"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:20
+msgid "Individual font settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:24
+msgid "Number of Days of Account Cycle:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:26
+msgid "Number of Days to Forecast:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:27
+msgid "Forecast Method"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:28
+#, fuzzy
+msgid "Scheduled and Future Transactions"
+msgstr "Įvesti operaciją pagal tvarkaraštį"
+
+#: dialogs/settings/rc.cpp:29
+#, fuzzy
+msgid "History-based"
+msgstr "Kainų istorija"
+
+#: dialogs/settings/rc.cpp:30
+msgid "History-based settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:31
+msgid "Number of Cycles to use in Forecast:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:36
+msgid "General Settings"
+msgstr "Bendrieji nustatymai"
+
+#: dialogs/settings/rc.cpp:37
+msgid "Global"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:38
+msgid "Startup page options"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:39
+msgid "Start with homepage"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:40
+msgid "Start with last selected view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:41
+#, fuzzy
+msgid "Precision settings"
+msgstr "GPG šifravimo nustatymai"
+
+#: dialogs/settings/rc.cpp:42
+#, fuzzy
+msgid "Price precision"
+msgstr "Kainų istorija"
+
+#: dialogs/settings/rc.cpp:43
+msgid "digits"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:44
+msgid "Autosave options"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:45
+msgid "Autosave periodically"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:46
+msgid "minutes"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:47
+msgid "Fiscal Year"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:48
+#, fuzzy
+msgid "Your fiscal year starts on"
+msgstr "Šie metai"
+
+#: dialogs/settings/rc.cpp:49
+msgid "January"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:50
+msgid "February"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:51
+#, fuzzy
+msgid "March"
+msgstr "Ieškoti"
+
+#: dialogs/settings/rc.cpp:52
+msgid "April"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:53
+msgid "May"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:54
+msgid "June"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:55
+msgid "July"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:56
+msgid "August"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:57
+msgid "September"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:58
+#, fuzzy
+msgid "October"
+msgstr "Kita"
+
+#: dialogs/settings/rc.cpp:59
+#, fuzzy
+msgid "November"
+msgstr "Numeris"
+
+#: dialogs/settings/rc.cpp:60
+#, fuzzy
+msgid "December"
+msgstr "Sumažėjimas"
+
+#: dialogs/settings/rc.cpp:61
+msgid "Views"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:62
+msgid "Synchronize account selection of ledger and investment view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:63
+msgid ""
+"Check the views you want to enable, uncheck those you want to hide, because "
+"you don't need the functionality."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:64
+msgid "Icon size of navigation bar"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:65
+msgid "Micro (16px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:66
+msgid "Small (32px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:67
+msgid "Normal (48px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:68
+msgid "Large (64px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:69
+msgid "Show title bar on each page"
+msgstr ""
+
+#: dialogs/rc.cpp:835 dialogs/settings/rc.cpp:70
+msgid "Filter"
+msgstr "Filtras"
+
+#: dialogs/settings/rc.cpp:71
+#, fuzzy
+msgid "Accounts / Categories"
+msgstr "Pagrindines kategorijas"
+
+#: dialogs/settings/rc.cpp:72
+msgid "Don't show unused categories"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:73
+msgid ""
+"This option hides all categories in the categories view that are not used in "
+"at least a single transaction. They are still shown in the category "
+"selection lists."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:74
+msgid "Don't show closed accounts"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:75
+msgid ""
+"This option hides all accounts that have been closed by the user in views "
+"and selection lists.\n"
+"\n"
+"You can use <b>View/Show all accounts</b> to temporarily show hidden "
+"accounts in the views."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:76
+#, fuzzy
+msgid "Show equity accounts"
+msgstr "Redaguoti sąskaitą"
+
+#: dialogs/rc.cpp:332 dialogs/settings/rc.cpp:77 widgets/rc.cpp:160
+msgid "Schedules"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:78
+msgid "Don't show finished schedules"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:79
+msgid "This option hides all finished schedules in the schedules view."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:81
+#, fuzzy
+msgid "Don't show transactions prior to"
+msgstr "Nepavyksta pašalinti operacijos"
+
+#: dialogs/settings/rc.cpp:82
+#, fuzzy
+msgid "Don't show reconciled transactions"
+msgstr "Nepavyksta pašalinti operacijos"
+
+#: dialogs/settings/rc.cpp:83
+msgid "This option hides all reconciled transactions in the ledger view."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:84 widgets/rc.cpp:22
+msgid "GPG encryption settings"
+msgstr "GPG šifravimo nustatymai"
+
+#: dialogs/settings/rc.cpp:85
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Access to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>additional recovery encryption</i> is only accessible, if the "
+"necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id "
+"0x8AFDDC8E is found in your keyring."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:86 widgets/rc.cpp:24
+msgid "Use GPG encryption"
+msgstr "Naudoti GPG šifravimą"
+
+#: dialogs/settings/rc.cpp:87
+#, fuzzy
+msgid "GPG encryption"
+msgstr "Naudoti GPG šifravimą"
+
+#: dialogs/settings/rc.cpp:88
+msgid "Your key"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:89
+msgid ""
+"This combo box lists all the secret keys you have in your keyring. Select "
+"the one you want to use for encryption when saving to a file."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:90
+msgid "Additonal keys"
+msgstr ""
+
+#: dialogs/kgpgkeyselectiondlg.cpp:50 dialogs/settings/rc.cpp:91
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading 0x."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:92 widgets/rc.cpp:28
+msgid ""
+"This symbol denotes, if the key for the given user id has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+
+#: dialogs/kgpgkeyselectiondlg.cpp:61 dialogs/settings/rc.cpp:93
+msgid "Keys for all of the above user ids found"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:94 widgets/rc.cpp:31
+msgid ""
+"This symbol denotes, if the KMyMoney recovery key has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:95
+msgid "Recover Key available in keyring"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:96
+#, fuzzy
+msgid "Also encrypt with KMyMoney's recover key"
+msgstr "Taip pat šifruoti ir kmymoney-recovery raktu"
+
+#: dialogs/settings/rc.cpp:97
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out.."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:98
+#, fuzzy
+msgid "Homepage Settings"
+msgstr "Bendrieji nustatymai"
+
+#: dialogs/settings/rc.cpp:99
+#, fuzzy
+msgid "Up"
+msgstr "&Aukštyn"
+
+#: dialogs/settings/rc.cpp:100
+#, fuzzy
+msgid "Down"
+msgstr "&Žemyn"
+
+#: dialogs/settings/rc.cpp:101
+msgid ""
+"Selected entries are shown on the home page of the application.<p>\n"
+"Use the buttons and checkboxes to customize the layout of the home page."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:102
+msgid "Homepage/Summary page font scaling"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:103
+msgid "Percentage of default font size:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:104
+msgid ""
+"Remember font size when leaving the program if manually changed with mouse-"
+"wheel"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:105
+#, fuzzy
+msgid "Information display"
+msgstr "Mokėjimo informacija"
+
+#: dialogs/settings/rc.cpp:106
+#, fuzzy
+msgid "Show Account Limit Information"
+msgstr "Mokėjimo informacija"
+
+#: dialogs/settings/rc.cpp:110 widgets/rc.cpp:47
+msgid ""
+"<i>Enter regular expressions which can be used to parse the data returned "
+"from the URL entered above. The symbol, price, and date must be found in "
+"the quote data to be usable. You may also try the KMyMoney user's "
+"mailinglist at <a href=\"mailto:kmymoney2-user@lists.sourceforge.net"
+"\">kmymoney2-user@lists.sourceforge.net</a> to find what settings work for "
+"other users in your country.</i>"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:113 widgets/rc.cpp:38
+msgid "Regular Expression to extract the symbol from the downloaded data"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:114 widgets/rc.cpp:39
+msgid "Regular Expression to extract the price from the downloaded data"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:115 widgets/rc.cpp:41
+msgid "URL to be used to download the quote"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:116 widgets/rc.cpp:42
+msgid ""
+"Enter the URL from which stock quotes will be fetched. <b>%1</b> will be "
+"replaced with the symbol for the security being quoted. For currency "
+"conversions, <b>%2</b> will be replaced with the currency to be quoted and "
+"<b>%1</b> with the currency the quote is based on."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:118 dialogs/settings/rc.cpp:121 widgets/rc.cpp:40
+#: widgets/rc.cpp:44
+msgid "Regular Expression to extract the date from the downloaded data"
+msgstr ""
+
+#: dialogs/rc.cpp:807 dialogs/settings/rc.cpp:119 widgets/rc.cpp:45
+msgid "Date Format"
+msgstr "Datos formatas"
+
+#: dialogs/settings/rc.cpp:122
+msgid "Skip HTML stripping"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:123
+msgid ""
+"<p>For easier processing of the data returned by the online source, KMyMoney "
+"usually strips unused parts before it is parsed with the regular "
+"expressions. If matching of the fields relies on those items, then use this "
+"option to turn stripping off.</p>\n"
+"\n"
+"<p>The following items are usually removed by stripping:\n"
+"\n"
+"<ul>\n"
+"<li>HTML tags such as <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded characters such as <b>&amp;nbsp;</b></li>\n"
+"<li>duplicate whitespace</li>\n"
+"</ul>\n"
+"</p>"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:127
+msgid "Register settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:128
+#, fuzzy
+msgid "Display"
+msgstr "Kasdien"
+
+#: dialogs/settings/rc.cpp:131
+msgid ""
+"Using the ledger lens shows the details for the transaction that has focus "
+"in the ledger. Usually, when using the transaction form, only a one line "
+"summary is displayed for each transaction as the details are shown in the "
+"form."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:133
+msgid "Always show a No. field"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:134
+#, fuzzy
+msgid "Show group header between transactions"
+msgstr "Trinti operaciją"
+
+#: dialogs/settings/rc.cpp:135
+msgid ""
+"Draws a larger header above each group of transaction. The grouping depends "
+"on the current sort order."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:136
+msgid "Show header for the previous and current fiscal year"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:137
+msgid "Sorting"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:138
+msgid "Normal view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:139
+#, fuzzy
+msgid "Reconciliation view"
+msgstr "Sutaikinimo vediklis"
+
+#: dialogs/settings/rc.cpp:140
+#, fuzzy
+msgid "Search view"
+msgstr "Ieškoti"
+
+#: dialogs/settings/rc.cpp:141
+msgid ""
+"Use the <i>left</i> and <i>right</i> buttons to add and remove sort options. "
+"Use the <i>up</i> and <i>down</i> buttons to modify the sort order. Double-"
+"Click a selected entry to toggle the sort order between <i>ascending</i> and "
+"<i>descending</i>."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:142
+#, fuzzy
+msgid "Data entry"
+msgstr "Įvesta suma"
+
+#: dialogs/settings/rc.cpp:146
+msgid "Use Enter to move between fields"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:147
+msgid "Match names from start"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:148
+msgid ""
+"Mark this option, if you always want to match names e.g. for payees from the "
+"start. If unset, any substring is matched."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:149
+#, fuzzy
+msgid "Default reconciliation state"
+msgstr "Sutaikinimo vediklis"
+
+#: dialogs/rc.cpp:227 dialogs/settings/rc.cpp:150
+#: widgets/kmymoneycombo.cpp:348 widgets/registersearchline.cpp:84
+msgid "Not reconciled"
+msgstr "Nesutaikintos"
+
+#: dialogs/rc.cpp:228 dialogs/settings/rc.cpp:151
+#: widgets/kmymoneycombo.cpp:347 widgets/registersearchline.cpp:85
+msgid "Cleared"
+msgstr "Patvirtintos"
+
+#: dialogs/settings/rc.cpp:153
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation "
+"of an account"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:154
+msgid "Autofill"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:155
+msgid "No Autofill"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:156
+#, fuzzy
+msgid "Don't do autofill of transaction data at all."
+msgstr "Trinti operaciją"
+
+#: dialogs/settings/rc.cpp:157
+msgid "Same transaction if amount differs less than"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:158
+msgid ""
+"Collect all transactions for the given payee. Treat all transactions that "
+"refer to the same category and have an amount with +/- X % as identical. If "
+"more than one transaction is found, a list of them is presented to the "
+"user.\n"
+"\n"
+"Selecting 0% will list all transactions."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:159
+msgid ""
+"Two transactions are usually treated identical for autofill, if they refer "
+"the same accounts. They are treated as different transactions though, when "
+"their amount varies by more than the percentage given here."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:160
+msgid ""
+"_: Same transaction if amount differs less than percent.\n"
+"percent."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:161
+msgid "with previously most often used transaction for the payee"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:162
+msgid ""
+"The data of the last transaction assigned to the category used most often "
+"for this payee is autofilled into the transaction editor."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:164
+#, fuzzy
+msgid "Match transactions within days"
+msgstr "Išrinkti operacijas be korespondento"
+
+#: dialogs/settings/rc.cpp:165
+msgid ""
+"Search for matching transactions within the range of the posting date of the "
+"imported transaction +/- the number of given days."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:166
+msgid "Ask for a new payee's default category"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:167
+msgid ""
+"Whenever a new payee is detected during import of a statement, the user will "
+"be asked to assign a default category for this user when this option is "
+"selected."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:168
+#, fuzzy
+msgid "Schedule Settings"
+msgstr "Tvarkaraščio detalės"
+
+#: dialogs/settings/rc.cpp:169
+msgid "Startup options"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:170
+msgid "Check schedules on startup"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:60
+#: widgets/kmymoneyonlinequoteconfig.cpp:60
+msgid "Delete the selected source entry"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:61
+#: widgets/kmymoneyonlinequoteconfig.cpp:61
+msgid "Use this to delete the selected online source entry"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:66
+#: widgets/kmymoneyonlinequoteconfig.cpp:66
+msgid "Create a new source entry for online quotes"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:67
+#: widgets/kmymoneyonlinequoteconfig.cpp:67
+msgid "Use this to create a new entry for online quotes"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:107
+#: dialogs/settings/ksettingsonlinequotes.cpp:190
+#: dialogs/settings/ksettingsonlinequotes.cpp:193
+#: dialogs/settings/ksettingsonlinequotes.cpp:216
+#: widgets/kmymoneyonlinequoteconfig.cpp:107
+#: widgets/kmymoneyonlinequoteconfig.cpp:185
+#: widgets/kmymoneyonlinequoteconfig.cpp:188
+#: widgets/kmymoneyonlinequoteconfig.cpp:211
+msgid "New Quote Source"
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:77 dialogs/rc.cpp:788
+msgid "Clear &All"
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:79
+msgid "Clear all splits"
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:80
+msgid "Use this to clear all splits of this transaction"
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:84
+#, fuzzy
+msgid "&Merge"
+msgstr "Visos būklės"
+
+#: dialogs/ksplittransactiondlg.cpp:183
+msgid ""
+"The total amount of this transaction is %1 while the sum of the splits is %"
+"2. The remaining %3 are unassigned."
+msgstr ""
+"Šios operacijos bendra suma yra %1, tačiau atskirų dalių suma yra %2. Likę %"
+"3 yra nepriskirti."
+
+#: dialogs/ksplittransactiondlg.cpp:191
+#, fuzzy, c-format
+msgid "Change &total amount of transaction to %1."
+msgstr "&Pakeisti bendrą operacijos sumą į %1."
+
+#: dialogs/ksplittransactiondlg.cpp:194
+msgid "&Distribute difference of %1 among all splits."
+msgstr "&Paskirstyti skirtumą %1 tarp operacijos dalių."
+
+#: dialogs/ksplittransactiondlg.cpp:203
+#, fuzzy, c-format
+msgid "&Leave total amount of transaction at %1."
+msgstr "&Pakeisti bendrą operacijos sumą į %1."
+
+#: dialogs/ksplittransactiondlg.cpp:205
+msgid "&Leave %1 unassigned."
+msgstr "&Palikti %1 nepriskirta."
+
+#: dialogs/ksplittransactiondlg.cpp:275
+msgid ""
+"You are about to delete all splits of this transaction. Do you really want "
+"to continue?"
+msgstr ""
+"Jūs ruošiatės ištrinti visas šios operacijos dalis. Ar tikrai norite tęsti?"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:97
+msgid "Use this to create a new QIF import/export profile"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:148
+#: dialogs/mymoneyqifprofileeditor.cpp:403 dialogs/rc.cpp:797
+msgid "QIF Profile Editor"
+msgstr "QIF profilio rengyklė"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:150
+msgid "QIF Profile Selector"
+msgstr "QIF profilio parinkiklis"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:236
+msgid "The default QIF profile"
+msgstr "Numatytasis QIF profilis"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:404
+#: dialogs/mymoneyqifprofileeditor.cpp:417
+msgid "Enter new profile name"
+msgstr "įrašyti naują profilio vardą"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:436
+msgid "Do you really want to delete profile '%1'?"
+msgstr ""
+
+#: dialogs/kgpgkeyselectiondlg.cpp:38
+#, fuzzy
+msgid "Select additional keys"
+msgstr "Nieko neišrinkti"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:48 widgets/rc.cpp:25
+msgid "User identification"
+msgstr "Naudotojo identifikacija"
+
+#: dialogs/kendingbalancedlg.cpp:71
+msgid ""
+"Please enter the following fields with the information as you find them on "
+"your statement. Make sure to enter all values in <b>%1</b>."
+msgstr ""
+
+#: dialogs/kendingbalancedlg.cpp:124
+#, c-format
+msgid "Last reconciled statement: %1"
+msgstr ""
+
+#: dialogs/kendingbalancedlg.cpp:437 dialogs/kendingbalancedlg.cpp:577
+#: dialogs/rc.cpp:137
+msgid "Adjustment transaction"
+msgstr "Priderinimo operacija"
+
+#: dialogs/kendingbalancedlg.cpp:510
+msgid ""
+"KMyMoney has calculated the following amounts for interest and amortization "
+"according to recorded payments between %1 and %2."
+msgstr ""
+
+#: dialogs/kbalancechartdlg.cpp:59
+#, fuzzy, c-format
+msgid "Balance of %1"
+msgstr "Balansas: "
+
+#: dialogs/kbalancechartdlg.cpp:70
+#, fuzzy
+msgid "%1 Balance History"
+msgstr "Kainų istorija"
+
+#: dialogs/kmymoneysplittable.cpp:98
+msgid "Split Options"
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:99 dialogs/rc.cpp:731
+#: widgets/kmymoneypriceview.cpp:149
+#, fuzzy
+msgid "Edit..."
+msgstr "Redaguoti ..."
+
+#: dialogs/kmymoneysplittable.cpp:100
+msgid "Duplicate"
+msgstr "Dublikuoti"
+
+#: dialogs/kmymoneysplittable.cpp:102
+msgid "Delete ..."
+msgstr "Trinti ..."
+
+#: dialogs/kmymoneysplittable.cpp:275
+#, fuzzy
+msgid ""
+"_: Duplicate split\n"
+"CTRL+c"
+msgstr "Dublikuoti"
+
+#: dialogs/kmymoneysplittable.cpp:562
+msgid "will be calculated"
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:648
+msgid ""
+"You are about to delete the selected split. Do you really want to continue?"
+msgstr ""
+
+#: dialogs/rc.cpp:1
+msgid "Account selection"
+msgstr "Sąskaitos pasirinkimas"
+
+#: dialogs/rc.cpp:3
+msgid "Account to import to"
+msgstr "Sąskaita, į kurią importuoti"
+
+#: dialogs/rc.cpp:6 dialogs/rc.cpp:170 widgets/rc.cpp:169
+#, fuzzy
+msgid "Skip"
+msgstr "Pra&leisti"
+
+#: dialogs/rc.cpp:8
+msgid ""
+"Use this dialog to backup your data. \n"
+"\n"
+"Please make sure you have a disk inserted and that the drive is ready. Then "
+"choose the mount point from either the Choose button or by entering the path "
+"in the available box.\n"
+"\n"
+"Click OK to perform the backup. If your system does not use an automounter, "
+"make sure you mark the checkbox below to \"mount this directory before "
+"backing up.\""
+msgstr ""
+
+#: dialogs/rc.cpp:9
+msgid "Device options"
+msgstr ""
+
+#: dialogs/rc.cpp:10
+msgid ""
+"_: This is the mount point\n"
+"Mount Point:"
+msgstr ""
+
+#: dialogs/rc.cpp:11
+#, fuzzy
+msgid "Choose..."
+msgstr "Pas&irinkti..."
+
+#: dialogs/rc.cpp:12
+msgid "Mount this directory before backing up."
+msgstr ""
+
+#: dialogs/rc.cpp:15
+#, fuzzy
+msgid "Reassign categories"
+msgstr "Kategorijos"
+
+#: dialogs/rc.cpp:16
+msgid ""
+"The transactions, schedules and budgets associated with the selected "
+"category need to be re-assigned to a different category before the selected "
+"category can be deleted. Please select a category from the list below."
+msgstr ""
+
+#: dialogs/rc.cpp:17
+msgid "Available categories:"
+msgstr ""
+
+#: dialogs/rc.cpp:21
+msgid ""
+"Please choose the type of import you wish to perform. A simple "
+"explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+
+#: dialogs/rc.cpp:23
+msgid "QIF"
+msgstr ""
+
+#: dialogs/rc.cpp:24
+msgid "CSV"
+msgstr "CSV"
+
+#: dialogs/rc.cpp:25
+msgid "Some descripton"
+msgstr ""
+
+#: dialogs/rc.cpp:28
+msgid "Confirm Manual Enter"
+msgstr ""
+
+#: dialogs/rc.cpp:29
+msgid "The following changes have been made to the transaction data:"
+msgstr ""
+
+#: dialogs/rc.cpp:30
+msgid "Please choose what you wish to do with the above changes"
+msgstr ""
+
+#: dialogs/rc.cpp:31
+msgid ""
+"Discard the changes and enter the original transaction into the register."
+msgstr ""
+
+#: dialogs/rc.cpp:32
+msgid "Enter these new values this one time, for this occurence only."
+msgstr ""
+
+#: dialogs/rc.cpp:33
+msgid "Set all further occurences in this schedule to be these values."
+msgstr ""
+
+#: dialogs/rc.cpp:36
+msgid "CSV Dialog"
+msgstr ""
+
+#: dialogs/rc.cpp:37
+msgid ""
+"CSV Dialog. Choose a file and then click on Run. You can view your "
+"progress at\n"
+"the bottom of the screen.\n"
+"\n"
+"You can cancel the process at any time by clicking on the Cancel button."
+msgstr ""
+
+#: dialogs/rc.cpp:38
+msgid "Choose the csv file:"
+msgstr ""
+
+#: dialogs/rc.cpp:39
+#, fuzzy
+msgid "Browse"
+msgstr "&Naršyti"
+
+#: dialogs/rc.cpp:40
+msgid "Between These Dates"
+msgstr ""
+
+#: dialogs/rc.cpp:41 dialogs/rc.cpp:196
+msgid "Start on:"
+msgstr ""
+
+#: dialogs/rc.cpp:42 dialogs/rc.cpp:195
+msgid "End on:"
+msgstr ""
+
+#: dialogs/rc.cpp:43
+#, fuzzy
+msgid "Run"
+msgstr "Pa&leisti"
+
+#: dialogs/rc.cpp:44
+msgid "Progress Info"
+msgstr ""
+
+#: dialogs/rc.cpp:45
+msgid "Processing Account:"
+msgstr ""
+
+#: dialogs/rc.cpp:47
+msgid "Processing Transaction:"
+msgstr ""
+
+#: dialogs/rc.cpp:48
+msgid "0 of 0"
+msgstr ""
+
+#: dialogs/rc.cpp:50
+#, fuzzy
+msgid "Exchange Rate/Price Editor"
+msgstr "Keitimo kurso rengyklė"
+
+#: dialogs/rc.cpp:55
+msgid "Convert from"
+msgstr "Konvertuoti iš"
+
+#: dialogs/rc.cpp:58
+msgid "Convert to"
+msgstr "Konvertuoti į"
+
+#: dialogs/rc.cpp:61
+#, fuzzy
+msgid "To amount"
+msgstr "Į sumą"
+
+#: dialogs/rc.cpp:62
+msgid "Exchange rate / Price"
+msgstr "Keitimo santykis / kaina"
+
+#: dialogs/rc.cpp:64
+msgid ""
+"xx\n"
+"xx"
+msgstr ""
+"xx\n"
+"xx"
+
+#: dialogs/rc.cpp:68
+msgid "Currencies"
+msgstr "Valiutos"
+
+#: dialogs/rc.cpp:72
+msgid "real ID"
+msgstr "Tikrasis ID"
+
+#: dialogs/rc.cpp:73 dialogs/rc.cpp:722
+msgid "ID"
+msgstr "ID"
+
+#: dialogs/rc.cpp:74
+msgid "X"
+msgstr "X"
+
+#: dialogs/rc.cpp:76 dialogs/rc.cpp:459
+msgid "Online Source"
+msgstr "Internetinis šaltinis"
+
+#: dialogs/rc.cpp:78 dialogs/rc.cpp:278 dialogs/rc.cpp:312 dialogs/rc.cpp:684
+msgid "F1"
+msgstr "F1"
+
+#: dialogs/rc.cpp:80
+msgid "If this button is not activated, select the base currency first."
+msgstr ""
+"Jei šis mygtukas nėra aktyvus, visų pirma pasirinkite pagrindinę valiutą."
+
+#: dialogs/rc.cpp:81
+msgid ""
+"Press this button to close the dialog. If the button is not activated, "
+"select your base currency."
+msgstr ""
+"Spauskite šį mygtuką norėdami užverti dialogą. Jei šis mygtukas nėra "
+"aktyvus, pasirinkite pagrindinę valiutą."
+
+#: dialogs/rc.cpp:82
+msgid "Edit Equity"
+msgstr ""
+
+#: dialogs/rc.cpp:86 dialogs/rc.cpp:410
+msgid "Smallest fraction:"
+msgstr ""
+
+#: dialogs/rc.cpp:87 dialogs/rc.cpp:408 dialogs/rc.cpp:440
+msgid "1 /"
+msgstr "1 /"
+
+#: dialogs/rc.cpp:88 dialogs/rc.cpp:405
+msgid "Investment Type:"
+msgstr "Investicijos tipas:"
+
+#: dialogs/rc.cpp:89 dialogs/rc.cpp:404
+msgid "Equity Name:"
+msgstr ""
+
+#: dialogs/rc.cpp:90 dialogs/rc.cpp:409
+msgid "Market Symbol:"
+msgstr ""
+
+#: dialogs/rc.cpp:91
+msgid "Price History"
+msgstr "Kainų istorija"
+
+#: dialogs/rc.cpp:97
+#, fuzzy
+msgid "Edit Scheduled transaction"
+msgstr "Įvesti operaciją pagal tvarkaraštį"
+
+#: dialogs/rc.cpp:98
+#, fuzzy
+msgid "Schedule name:"
+msgstr "Tvarkaraščio pavadinimas:"
+
+#: dialogs/rc.cpp:99
+msgid "Frequency:"
+msgstr "Dažnumas:"
+
+#: dialogs/rc.cpp:100
+msgid "Number of selected periods between entries"
+msgstr ""
+
+#: dialogs/rc.cpp:101
+#, fuzzy
+msgid "Payment information"
+msgstr "Mokėjimo informacija"
+
+#: dialogs/rc.cpp:105 dialogs/rc.cpp:160 dialogs/rc.cpp:247 dialogs/rc.cpp:752
+#: widgets/register.cpp:569
+msgid "C"
+msgstr "C"
+
+#: dialogs/rc.cpp:113
+#, fuzzy
+msgid "Do nothing"
+msgstr "Nieko nedaryti"
+
+#: dialogs/rc.cpp:116
+msgid "If this schedule occurs on the weekend:"
+msgstr "Jei operacija pasitaiko savaitgalį:"
+
+#: dialogs/rc.cpp:117
+msgid "The amount is an estimate because it varies for each payment"
+msgstr ""
+
+#: dialogs/rc.cpp:118
+msgid "Enter this schedule into the register automatically when it is due"
+msgstr ""
+
+#: dialogs/rc.cpp:119
+msgid "This schedule will end at some time"
+msgstr ""
+
+#: dialogs/rc.cpp:120
+msgid "Number of transactions remaining:"
+msgstr ""
+
+#: dialogs/rc.cpp:121
+msgid "Date of final transaction:"
+msgstr ""
+
+#: dialogs/rc.cpp:125
+msgid "Reconciliation Wizard"
+msgstr "Sutaikinimo vediklis"
+
+#: dialogs/rc.cpp:127
+msgid ""
+"Reconciling your account assures, that your recordings match those of your "
+"institution and that there are no mistakes on either side. You should "
+"reconcile your account whenever you receive a statement from your "
+"institution.\n"
+"\n"
+"All relevant information necessary for this process is usually printed on "
+"your statement.\n"
+"\n"
+"On the next page you will verify, that the starting and ending balance are "
+"matching those on your statement. If not, please modify the figures."
+msgstr ""
+"Sąskaitos sutikrinimas užtikrina, kad jūsų įrašai atitinka Jūsų institucijos "
+"įrašus, ir kad abiejose pusėse nėra jokių klaidų. Sąskaitą turėtumėte "
+"sutikrinti kiekvieną kartą gavę pranešimą iš savo institucijos.\n"
+"\n"
+"Visa šiam procesui reikalinga informacija turėtų būti pateikta Jūsų gautame "
+"pranešime - ataskaitoje.\n"
+"\n"
+"Kitame puslapyje galėsite patikrinti, ar pradžios ir pabaigos balansai "
+"atitinka Jūsų gautame pranešime esančius. Jei ne, turėsite peržiūrėti "
+"operacijų sąrašą ir pakeisti įrašus."
+
+#: dialogs/rc.cpp:129
+msgid ""
+"KMyMoney calculates your loan payments automatically. The amounts can "
+"deviate from those calculated by the creditor. Therefore, you possibly have "
+"to adjust amortization, interest and other costs according to your "
+"statement.\n"
+"\n"
+"Please enter the following information found on your statement:"
+msgstr ""
+"KMyMoney automatiškai apskaičiuoja Jūsų paskolos įmokų dydžius. Šie dydžiai "
+"gali skirtis nuo kreditoriaus paskaičiuotų. Taigi, gali tekti priderinti "
+"sumą priklausomai nuo amortizacijos, palūkanų ir kitų įkainių, atsižvelgiant "
+"į gautą pranešimą.\n"
+"\n"
+"Prašome įrašyti šią informaciją iš gauto pranešimo:"
+
+#: dialogs/rc.cpp:130
+msgid "Ending date of statement"
+msgstr "Pranešimo pradžios data"
+
+#: dialogs/rc.cpp:131
+msgid "Starting date of statement"
+msgstr "Pranešimo pradžios data"
+
+#: dialogs/rc.cpp:132
+msgid "Verify payments"
+msgstr "Patvirtinti mokėjimus"
+
+#: dialogs/rc.cpp:133 dialogs/rc.cpp:148 dialogs/rc.cpp:476 dialogs/rc.cpp:477
+#: dialogs/rc.cpp:508 dialogs/rc.cpp:513 dialogs/rc.cpp:518 dialogs/rc.cpp:532
+#: dialogs/rc.cpp:539 dialogs/rc.cpp:540 dialogs/rc.cpp:541 dialogs/rc.cpp:542
+#: dialogs/rc.cpp:543 dialogs/rc.cpp:552 dialogs/rc.cpp:553 dialogs/rc.cpp:554
+#: dialogs/rc.cpp:555 dialogs/rc.cpp:556 dialogs/rc.cpp:565 dialogs/rc.cpp:566
+#: dialogs/rc.cpp:567 dialogs/rc.cpp:568 dialogs/rc.cpp:569 dialogs/rc.cpp:578
+#: dialogs/rc.cpp:579 dialogs/rc.cpp:580 dialogs/rc.cpp:581 dialogs/rc.cpp:582
+#: dialogs/rc.cpp:591 dialogs/rc.cpp:592 dialogs/rc.cpp:593 dialogs/rc.cpp:594
+#: dialogs/rc.cpp:595 dialogs/rc.cpp:603 dialogs/rc.cpp:604 dialogs/rc.cpp:605
+#: dialogs/rc.cpp:606 dialogs/rc.cpp:607 dialogs/rc.cpp:618 dialogs/rc.cpp:619
+#: dialogs/rc.cpp:621 dialogs/rc.cpp:636 dialogs/rc.cpp:637 dialogs/rc.cpp:638
+#: dialogs/rc.cpp:639 dialogs/rc.cpp:640 dialogs/rc.cpp:641 dialogs/rc.cpp:651
+#: dialogs/rc.cpp:652 dialogs/rc.cpp:654 dialogs/rc.cpp:657 dialogs/rc.cpp:658
+#: dialogs/rc.cpp:659 dialogs/rc.cpp:664 dialogs/rc.cpp:665 dialogs/rc.cpp:668
+#: dialogs/rc.cpp:670 dialogs/rc.cpp:672 dialogs/rc.cpp:674 dialogs/rc.cpp:676
+#: dialogs/rc.cpp:678 dialogs/rc.cpp:681 dialogs/rc.cpp:823 widgets/rc.cpp:167
+msgid "1"
+msgstr "1"
+
+#: dialogs/rc.cpp:136
+msgid ""
+"If your statement shows different amounts, please cancel this dialog and "
+"correct the false transactions or correct the values in this dialog. In the "
+"later case, KMyMoney will create an adjustment transaction and add it to the "
+"ledger."
+msgstr ""
+"Jei gautame pranešime matote kitokias sumas, prašome išeiti iš šio dialogo "
+"ir pataisyti neteisingai įrašytas operacijas arba pataisyti vertes šiame "
+"dialoge. Pastaruoju atveju, KMyMoney sukurs pataisymo operaciją ir įdės ją į "
+"didžiąją knygą."
+
+#: dialogs/rc.cpp:138
+msgid ""
+"In order to create the adjustment transaction, KMyMoney requires an account "
+"and possibly an interest category to assign the differences to. Please "
+"select an account and - if necessary - a category."
+msgstr ""
+"Pataisymo operacijos sukūrimui KMyMoney programai reikia sąskaitos ir gal "
+"būt - palūkanų kagetorijos, kad būtų galima psirskirti skirtumus. Prašome "
+"pasirinkti sąskaitą, ir, jei reikia - kategoriją."
+
+#: dialogs/rc.cpp:140
+msgid "Interest-Category"
+msgstr "Palūkanų kategorija"
+
+#: dialogs/rc.cpp:141
+msgid "Restarting postponed reconciliation"
+msgstr ""
+
+#: dialogs/rc.cpp:142
+#, fuzzy
+msgid ""
+"You have previously postponed the reconciliation of this account. If you "
+"have entered charges or interests the last time you started reconciling this "
+"account you can modify these in the ledger later on.\n"
+"\n"
+"It is important, that you continue with the same statement you used when you "
+"postponed the reconciliation.\n"
+"\n"
+"All information you have entered into this wizard will be shown and all "
+"transactions that you already cleared are marked with a 'C'."
+msgstr "Anksčiau esate atidėję šios sąskaitos sutaikinimą. "
+
+#: dialogs/rc.cpp:143
+msgid "Statement Information"
+msgstr "Pranešimo informacija"
+
+#: dialogs/rc.cpp:144 dialogs/rc.cpp:315 dialogs/rc.cpp:317 dialogs/rc.cpp:320
+#: dialogs/rc.cpp:321 dialogs/rc.cpp:329 dialogs/rc.cpp:330 dialogs/rc.cpp:333
+#: dialogs/rc.cpp:334 dialogs/rc.cpp:335 dialogs/rc.cpp:336 dialogs/rc.cpp:366
+msgid "x"
+msgstr ""
+
+#: dialogs/rc.cpp:145
+msgid "Statement date:"
+msgstr "Pranešimo data:"
+
+#: dialogs/rc.cpp:146
+msgid "Starting balance of this statement:"
+msgstr "Šio pranešimo pradžios balansas:"
+
+#: dialogs/rc.cpp:147
+msgid "Ending balance of this statement:"
+msgstr "Šio pranešimo pabaigos balansas:"
+
+#: dialogs/rc.cpp:149
+msgid "Interest / Charges"
+msgstr ""
+
+#: dialogs/rc.cpp:150
+msgid ""
+"If necessary, enter information about interest or charges here. KMyMoney "
+"will create transactions and clear them directly for you."
+msgstr ""
+
+#: dialogs/rc.cpp:153
+msgid "Charges"
+msgstr ""
+
+#: dialogs/rc.cpp:154
+#, fuzzy
+msgid "Enter Schedule"
+msgstr "Naujas tvarkaraštis"
+
+#: dialogs/rc.cpp:155
+msgid "Schedule Details"
+msgstr "Tvarkaraščio detalės"
+
+#: dialogs/rc.cpp:156 dialogs/rc.cpp:348 dialogs/rc.cpp:389 widgets/rc.cpp:164
+msgid "Name:"
+msgstr "Vardas:"
+
+#: dialogs/rc.cpp:157 dialogs/rc.cpp:351 widgets/rc.cpp:165
+msgid "Type:"
+msgstr "Tipas:"
+
+#: dialogs/rc.cpp:168
+#, fuzzy
+msgid "Enter"
+msgstr "Į&vesti"
+
+#: dialogs/rc.cpp:169
+msgid ""
+"Enter the transaction and advance the next due date of this schedule to the "
+"next payment date."
+msgstr ""
+
+#: dialogs/rc.cpp:171
+msgid ""
+"Do not enter the transaction but advance the next due date of this schedule "
+"to the next payment date."
+msgstr ""
+
+#: dialogs/rc.cpp:172
+#, fuzzy
+msgid "Ignore"
+msgstr "Padidėjimas"
+
+#: dialogs/rc.cpp:173
+msgid ""
+"Do not enter or skip payments for this schedule but continue with the next "
+"schedule."
+msgstr ""
+
+#: dialogs/rc.cpp:175
+msgid "Cancel processing of schedule entry."
+msgstr ""
+
+#: dialogs/rc.cpp:176
+msgid "Update Stock and Currency Prices"
+msgstr "Atnaujinti akcijų ir valiutų kainas"
+
+#: dialogs/rc.cpp:177
+msgid "List of known Equities, and the date they were last updated on."
+msgstr ""
+
+#: dialogs/rc.cpp:179
+#, fuzzy
+msgid "Update All"
+msgstr "&Aukštyn"
+
+#: dialogs/rc.cpp:180
+msgid "Update Selected"
+msgstr ""
+
+#: dialogs/rc.cpp:181
+msgid "Status:"
+msgstr "Būsena:"
+
+#: dialogs/rc.cpp:184
+msgid "QIF Export"
+msgstr ""
+
+#: dialogs/rc.cpp:185
+msgid ""
+"From this dialog you are able to export transactions to a quicken compatible "
+"file, (known as a QIF file, because of the extension). Please enter the "
+"path to the QIF file or select it by clicking on the Browse button.\n"
+"\n"
+"You can choose the file's path, the account and the format of the QIF file "
+"(profile). Choose Account to export all the transactions between the "
+"specified dates or just categories. You can also limit the transactions "
+"that are exported by start and ending date. Once you have pressed the "
+"Export button a message box will appear when the export has completed "
+"detailing how many transactions, categories and payees were exported."
+msgstr ""
+
+#: dialogs/rc.cpp:186
+msgid "File to export to:"
+msgstr ""
+
+#: dialogs/rc.cpp:188
+msgid "Account to export"
+msgstr ""
+
+#: dialogs/rc.cpp:189 dialogs/rc.cpp:297
+msgid "QIF Profile"
+msgstr ""
+
+#: dialogs/rc.cpp:190 dialogs/rc.cpp:298 dialogs/rc.cpp:362
+#: widgets/kmymoneypriceview.cpp:145
+msgid "New..."
+msgstr "Nauja..."
+
+#: dialogs/rc.cpp:191
+msgid "Contents to Export"
+msgstr ""
+
+#: dialogs/rc.cpp:194
+msgid "Date Range"
+msgstr "Laikotarpis"
+
+#: dialogs/rc.cpp:199
+msgid "Search transactions"
+msgstr "Ieškoti operacijų"
+
+#: dialogs/rc.cpp:200
+msgid "Criteria"
+msgstr ""
+
+#: dialogs/rc.cpp:201
+msgid "Define your search criteria"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:169 dialogs/rc.cpp:202
+msgid "Text"
+msgstr "Tekstas"
+
+#: dialogs/rc.cpp:203
+msgid "Contains"
+msgstr ""
+
+#: dialogs/rc.cpp:204
+#, fuzzy
+msgid "Does not contain"
+msgstr "Nieko nedaryti"
+
+#: dialogs/rc.cpp:205
+msgid "Treat text as regular expression"
+msgstr ""
+
+#: dialogs/rc.cpp:206
+msgid "Case sensitive"
+msgstr "Skirti raidžių dydį"
+
+#: dialogs/rc.cpp:209
+msgid "Range"
+msgstr "Intervalas"
+
+#: dialogs/rc.cpp:210
+#, fuzzy
+msgid ""
+"_: To (Date)\n"
+"To"
+msgstr "Data"
+
+#: dialogs/rc.cpp:211
+msgid ""
+"_: From (Date)\n"
+"From"
+msgstr ""
+
+#: dialogs/rc.cpp:213
+msgid "Search this amount"
+msgstr "Ieškoti tokios sumos"
+
+#: dialogs/rc.cpp:214
+msgid "Search amount in the range"
+msgstr "Ieškoti sumos intervale"
+
+#: dialogs/rc.cpp:215
+#, fuzzy
+msgid ""
+"_: to (amount)\n"
+"to"
+msgstr "Į sumą"
+
+#: dialogs/rc.cpp:216
+#, fuzzy
+msgid ""
+"_: from (amount)\n"
+"from"
+msgstr "Į sumą"
+
+#: dialogs/rc.cpp:220
+msgid "Select transactions without payees"
+msgstr "Išrinkti operacijas be korespondento"
+
+#: dialogs/rc.cpp:221
+msgid "Select all"
+msgstr "Išrinkti visus"
+
+#: dialogs/rc.cpp:222
+msgid "Select none"
+msgstr "Nieko neišrinkti"
+
+#: dialogs/rc.cpp:224
+msgid "Validity"
+msgstr "Galiojimas"
+
+#: dialogs/rc.cpp:226
+msgid "All states"
+msgstr "Visos būklės"
+
+#: dialogs/rc.cpp:230
+msgid "All types"
+msgstr "Visi tipai"
+
+#: dialogs/rc.cpp:234
+msgid "Any transaction"
+msgstr "Bet kokia operacija"
+
+#: dialogs/rc.cpp:235
+msgid "Valid transaction"
+msgstr "Galiojanti operacija"
+
+#: dialogs/rc.cpp:236
+msgid "Invalid transaction"
+msgstr "Negaliojanti operacija"
+
+#: dialogs/rc.cpp:237
+msgid "State"
+msgstr "Būsena"
+
+#: dialogs/rc.cpp:238
+msgid "Search this number"
+msgstr "Ieškoti šio numerio"
+
+#: dialogs/rc.cpp:239
+msgid "Search number in range"
+msgstr "Ieškoti numerių intervale"
+
+#: dialogs/rc.cpp:240
+msgid ""
+"_: to (number)\n"
+"to"
+msgstr ""
+
+#: dialogs/rc.cpp:241
+msgid ""
+"_: from (number)\n"
+"from"
+msgstr ""
+
+#: dialogs/rc.cpp:242
+msgid "text"
+msgstr "tekstas"
+
+#: dialogs/rc.cpp:243
+msgid "warning"
+msgstr ""
+
+#: dialogs/rc.cpp:244
+#, fuzzy
+msgid "Result"
+msgstr "Iš naujo"
+
+#: dialogs/rc.cpp:254
+msgid "F"
+msgstr ""
+
+#: dialogs/rc.cpp:257 dialogs/rc.cpp:844
+msgid "&Reset"
+msgstr "&Iš naujo"
+
+#: dialogs/rc.cpp:258
+#, fuzzy
+msgid "&Find"
+msgstr "&Baigti"
+
+#: dialogs/rc.cpp:259
+msgid "GnuCash Import Options"
+msgstr ""
+
+#: dialogs/rc.cpp:260
+msgid "Use 'Help' for more information on these options"
+msgstr ""
+
+#: dialogs/rc.cpp:261
+msgid "Investment Handling"
+msgstr ""
+
+#: dialogs/rc.cpp:262
+msgid "One investment account for each stock"
+msgstr ""
+
+#: dialogs/rc.cpp:263
+msgid "One investment account for all stocks"
+msgstr ""
+
+#: dialogs/rc.cpp:264
+msgid "Prompt for an investment account for each stock"
+msgstr ""
+
+#: dialogs/rc.cpp:265
+#, fuzzy
+msgid "Online price quotes"
+msgstr "Internetinis šaltinis"
+
+#: dialogs/rc.cpp:266
+msgid "Use Finance::Quote for share price quotes"
+msgstr ""
+
+#: dialogs/rc.cpp:267
+msgid "Scheduled Transactions"
+msgstr ""
+
+#: dialogs/rc.cpp:268
+msgid "Drop suspect scheduled transactions"
+msgstr ""
+
+#: dialogs/rc.cpp:269
+#, fuzzy
+msgid "Decoding option"
+msgstr "Aprašymas"
+
+#: dialogs/rc.cpp:270
+msgid "Decode using"
+msgstr ""
+
+#: dialogs/rc.cpp:271
+#, fuzzy
+msgid "Transaction Notes option"
+msgstr "Operacijos detalės"
+
+#: dialogs/rc.cpp:272
+#, fuzzy
+msgid "Use transaction notes on non-split transactions"
+msgstr "Išrinkti operacijas be korespondento"
+
+#: dialogs/rc.cpp:273
+msgid "Debug Options"
+msgstr ""
+
+#: dialogs/rc.cpp:274
+msgid "General debug data"
+msgstr ""
+
+#: dialogs/rc.cpp:275
+msgid "Display XML data"
+msgstr ""
+
+#: dialogs/rc.cpp:276
+msgid "Anonymize data"
+msgstr ""
+
+#: dialogs/rc.cpp:281
+msgid "Online Quotes - Select price source"
+msgstr ""
+
+#: dialogs/rc.cpp:284
+msgid ""
+"This price source is not known to KMyMoney. Please select an option below."
+msgstr ""
+
+#: dialogs/rc.cpp:285
+msgid "Do not perform online quotes for this investment"
+msgstr ""
+
+#: dialogs/rc.cpp:286
+msgid "Select a known KMyMoney source from the list below"
+msgstr ""
+
+#: dialogs/rc.cpp:287
+msgid ""
+"Use the following name for the price source.\n"
+"(Click Help for further information.)"
+msgstr ""
+
+#: dialogs/rc.cpp:288
+msgid "Always use this selection for this price source."
+msgstr ""
+
+#: dialogs/rc.cpp:289
+msgid "QIF Import"
+msgstr ""
+
+#: dialogs/rc.cpp:290
+msgid ""
+"From this dialog you are able to import transactions from a Quicken<b>&trade;"
+"</b> compatible file, (known as a QIF file, because of the extension).<p>\n"
+"\n"
+"Please enter the path to the QIF file or select it by clicking on the Browse "
+"button. Once you have the file's path press the Import button and KMyMoney "
+"will import all the transactions, categories and payees it finds."
+msgstr ""
+
+#: dialogs/rc.cpp:291
+msgid "QIF File to Import:"
+msgstr ""
+
+#: dialogs/rc.cpp:292
+msgid "Import options"
+msgstr ""
+
+#: dialogs/rc.cpp:293
+#, fuzzy
+msgid "Bank statement"
+msgstr "Pridėti naują įrašą"
+
+#: dialogs/rc.cpp:294
+#, fuzzy
+msgid "Other application"
+msgstr "Išvedimio filtro vieta"
+
+#: dialogs/rc.cpp:295
+msgid ""
+"Select <b>Bank statement</b> turns on automatic category matching which is "
+"turned off in case of <b>Historic data</b>. Use the latter if you import "
+"files from other Personal Finance Management software."
+msgstr ""
+
+#: dialogs/rc.cpp:296
+#, fuzzy
+msgid "Source of QIF"
+msgstr "Šaltinis"
+
+#: dialogs/rc.cpp:302
+msgid "Verify Import"
+msgstr "Patvirtinti importavimą"
+
+#: dialogs/rc.cpp:304
+#, fuzzy
+msgid "Ok"
+msgstr "&Gerai"
+
+#: dialogs/rc.cpp:306
+msgid "MyDialog"
+msgstr ""
+
+#: dialogs/rc.cpp:310
+#, fuzzy
+msgid "File Information"
+msgstr "Korespondento informacija"
+
+#: dialogs/rc.cpp:316
+#, fuzzy
+msgid "Last modified on"
+msgstr "Praėjęs mėnuo"
+
+#: dialogs/rc.cpp:319
+#, fuzzy
+msgid "Base currency"
+msgstr "Valiuta"
+
+#: dialogs/rc.cpp:322
+#, fuzzy
+msgid "Created on"
+msgstr "&Sukurti"
+
+#: dialogs/rc.cpp:325
+#, fuzzy
+msgid "Accounts/Categories"
+msgstr "Kategorijos"
+
+#: dialogs/rc.cpp:328
+#, fuzzy
+msgid "Closed"
+msgstr "Užverti dialogą"
+
+#: dialogs/rc.cpp:331
+#, fuzzy
+msgid "Prices"
+msgstr "Kaina"
+
+#: dialogs/rc.cpp:337
+#, fuzzy
+msgid "Splits"
+msgstr "&Skelti"
+
+#: dialogs/rc.cpp:338
+msgid "Price Editor"
+msgstr "Kainos redaktorius"
+
+#: dialogs/rc.cpp:339
+msgid "Show all stored prices"
+msgstr "Rodyti visas išsaugotas kainas"
+
+#: dialogs/rc.cpp:343
+#, fuzzy
+msgid "Delete Range..."
+msgstr "Trinti in&tervalą..."
+
+#: dialogs/rc.cpp:346
+msgid "New Account Dialog"
+msgstr "Naujos sąskaitos dialogas"
+
+#: dialogs/rc.cpp:349
+#, fuzzy
+msgid "Opening information"
+msgstr "Mokėjimo informacija"
+
+#: dialogs/rc.cpp:350
+msgid "Currency:"
+msgstr "Valiuta:"
+
+#: dialogs/rc.cpp:352 dialogs/rc.cpp:793
+msgid "Date:"
+msgstr "Data:"
+
+#: dialogs/rc.cpp:353
+#, fuzzy
+msgid "Balance:"
+msgstr "Balansas: "
+
+#: dialogs/rc.cpp:355
+msgid "Last check number:"
+msgstr ""
+
+#: dialogs/rc.cpp:356
+msgid "Notes:"
+msgstr "Pastabos:"
+
+#: dialogs/rc.cpp:357
+msgid "No auto-VAT-assignment"
+msgstr "Be automatinio VAT išskaičiavimo"
+
+#: dialogs/rc.cpp:358 dialogs/rc.cpp:441
+#, fuzzy
+msgid "Price entry"
+msgstr "Naujas kainos įrašas"
+
+#: dialogs/rc.cpp:359
+msgid "Preferred Account"
+msgstr "Prioritetinė sąskaita"
+
+#: dialogs/rc.cpp:363
+msgid "Number:"
+msgstr "Numeris:"
+
+#: dialogs/rc.cpp:364 dialogs/rc.cpp:395
+msgid "BIC"
+msgstr ""
+
+#: dialogs/rc.cpp:367
+#, fuzzy
+msgid "Hierarchy"
+msgstr "Ieškoti"
+
+#: dialogs/rc.cpp:368
+msgid "Subaccount"
+msgstr "Šalutinė sąskaita"
+
+#: dialogs/rc.cpp:369
+msgid "Limits"
+msgstr ""
+
+#: dialogs/rc.cpp:370
+msgid ""
+"This page allows to setup certain limits. KMyMoney will warn you when the "
+"account balance reaches a limit."
+msgstr ""
+
+#: dialogs/rc.cpp:372
+#, fuzzy
+msgid "Absolute limit"
+msgstr "Sąskaitos skirtukas"
+
+#: dialogs/rc.cpp:373
+msgid "Maximum credit limit"
+msgstr ""
+
+#: dialogs/rc.cpp:374
+msgid "Minimum balance"
+msgstr ""
+
+#: dialogs/rc.cpp:375
+msgid "Early warning"
+msgstr ""
+
+#: dialogs/rc.cpp:377
+msgid "VAT details"
+msgstr "PVM detalės"
+
+#: dialogs/rc.cpp:378
+msgid "VAT category"
+msgstr "PVM kategorija"
+
+#: dialogs/rc.cpp:379
+msgid "VAT percentage"
+msgstr "PVM procentai"
+
+#: dialogs/rc.cpp:380
+msgid "Enable auto VAT assignment"
+msgstr "Įgalinti automatinį PVM priskyrimą"
+
+#: dialogs/rc.cpp:381
+msgid "Amount entered"
+msgstr "Įvesta suma"
+
+#: dialogs/rc.cpp:382
+msgid "Gross amount"
+msgstr ""
+
+#: dialogs/rc.cpp:383
+msgid "Net amount"
+msgstr ""
+
+#: dialogs/rc.cpp:384
+msgid "Include on Tax Reports"
+msgstr "Įterpti į mokesčių pranešimą"
+
+#: dialogs/rc.cpp:387
+msgid "New Institution Dialog"
+msgstr "Naujos institucijos dialogas"
+
+#: dialogs/rc.cpp:388
+msgid "Institution Details"
+msgstr "Institucijos detalės"
+
+#: dialogs/rc.cpp:390
+msgid "City:"
+msgstr "Miestas:"
+
+#: dialogs/rc.cpp:394
+msgid "Routing Number:"
+msgstr "Nukreipimo numeris:"
+
+#: dialogs/rc.cpp:398
+msgid "New Budget"
+msgstr ""
+
+#: dialogs/rc.cpp:403
+msgid "New Equity"
+msgstr ""
+
+#: dialogs/rc.cpp:406 dialogs/rc.cpp:407
+msgid "Trading Symbol of the stock or mutual fund, not required."
+msgstr ""
+
+#: dialogs/rc.cpp:414 dialogs/rc.cpp:415
+msgid "Name of the company, or mutual fund."
+msgstr "Kompanijos arba bendrojo fondo pavadinimas."
+
+#: dialogs/rc.cpp:418
+msgid "New File Dialog"
+msgstr ""
+
+#: dialogs/rc.cpp:419
+msgid ""
+"Use this dialog to enter personal information about yourself.\n"
+"\n"
+"All information is optional and is provided to personalize\n"
+"your KMyMoney file."
+msgstr ""
+
+#: dialogs/rc.cpp:430
+msgid "New Investment wizard"
+msgstr ""
+
+#: dialogs/rc.cpp:431
+msgid "Investment Type"
+msgstr ""
+
+#: dialogs/rc.cpp:432
+msgid "This wizard allows you to create a new investment."
+msgstr ""
+
+#: dialogs/rc.cpp:433
+msgid ""
+"The first step in this process requires to select the type of investment. "
+"The following steps collect more details about the investment from you."
+msgstr ""
+
+#: dialogs/rc.cpp:434
+msgid "Type of investment"
+msgstr ""
+
+#: dialogs/rc.cpp:438
+msgid "Investment details"
+msgstr ""
+
+#: dialogs/rc.cpp:439
+msgid ""
+"Enter the details below and click <b>Next</b> to continue entering the "
+"online update details."
+msgstr ""
+
+#: dialogs/rc.cpp:442 dialogs/rc.cpp:728
+msgid "Fraction"
+msgstr ""
+
+#: dialogs/rc.cpp:443
+msgid "Trading Currency"
+msgstr ""
+
+#: dialogs/rc.cpp:444
+msgid "Full name"
+msgstr ""
+
+#: dialogs/rc.cpp:445
+msgid "AMEX"
+msgstr ""
+
+#: dialogs/rc.cpp:446
+msgid "EUREX"
+msgstr ""
+
+#: dialogs/rc.cpp:447
+msgid "FUND"
+msgstr ""
+
+#: dialogs/rc.cpp:448
+msgid "NASDAQ"
+msgstr ""
+
+#: dialogs/rc.cpp:449
+msgid "NYSE"
+msgstr ""
+
+#: dialogs/rc.cpp:450
+msgid "XETRA"
+msgstr ""
+
+#: dialogs/rc.cpp:451
+msgid "Trading symbol"
+msgstr ""
+
+#: dialogs/rc.cpp:452
+msgid "Identification"
+msgstr "Identifikacija"
+
+#: dialogs/rc.cpp:453
+msgid "Enter the ticker symbol (e.g. RHAT)."
+msgstr ""
+
+#: dialogs/rc.cpp:454
+msgid "Enter the CUSIP/ISIN/WKN identification number here"
+msgstr ""
+
+#: dialogs/rc.cpp:455
+msgid "Trading market"
+msgstr ""
+
+#: dialogs/rc.cpp:456
+msgid "Online Update"
+msgstr "Atnaujinti iš interneto"
+
+#: dialogs/rc.cpp:457
+msgid ""
+"Select an online source and click <b>Finish</b> to store the investment "
+"data. If you don't want to use online updates, just leave the data as is."
+msgstr ""
+
+#: dialogs/rc.cpp:458
+msgid "Use Finance::Quote"
+msgstr ""
+
+#: dialogs/rc.cpp:460
+msgid "Factor"
+msgstr ""
+
+#: dialogs/rc.cpp:461
+msgid "New Loan Wizard"
+msgstr "Naujos paskolos vediklis"
+
+#: dialogs/rc.cpp:462
+msgid "New Loan Account Wizard"
+msgstr "Naujos paskolos sąskaitos vediklis"
+
+#: dialogs/rc.cpp:463
+msgid ""
+"\n"
+"Welcome to the New Loan Account Wizard which will guide you through the "
+"creation of a new loan e.g. for your home, your car or any other loan that "
+"you pay or gain interest for.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+
+#: dialogs/rc.cpp:464
+msgid "Edit Loan Account Wizard"
+msgstr "Paskolos sąskaitos redagavimo vediklis"
+
+#: dialogs/rc.cpp:465
+msgid ""
+"\n"
+"Welcome to the Edit Loan Account Wizard. Please use this wizard to modify "
+"information about your loan account.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+
+#: dialogs/rc.cpp:467
+msgid ""
+"\n"
+"In the first step, KMyMoney will ask you some general information about the "
+"loan account to be created."
+msgstr ""
+
+#: dialogs/rc.cpp:468 dialogs/rc.cpp:522 dialogs/rc.cpp:610
+msgid "1. General Information"
+msgstr "1. Bendroji informacija"
+
+#: dialogs/rc.cpp:469
+msgid ""
+"\n"
+"2. Calculate Loan\n"
+"\n"
+"3. Payments"
+msgstr ""
+
+#: dialogs/rc.cpp:470
+msgid "Edit selection"
+msgstr ""
+
+#: dialogs/rc.cpp:471
+msgid ""
+"\n"
+"Please select, which data of the loan you want to modify."
+msgstr ""
+
+#: dialogs/rc.cpp:472
+msgid "Modify the interest rate"
+msgstr ""
+
+#: dialogs/rc.cpp:473
+msgid "Modify additional fees"
+msgstr ""
+
+#: dialogs/rc.cpp:474
+msgid "Modify other loan information"
+msgstr ""
+
+#: dialogs/rc.cpp:475
+msgid "Effective date"
+msgstr ""
+
+#: dialogs/rc.cpp:478
+msgid "When should the changes become active?"
+msgstr ""
+
+#: dialogs/rc.cpp:479
+msgid "Lending or borrowing money"
+msgstr ""
+
+#: dialogs/rc.cpp:480
+msgid ""
+"\n"
+"Do you borrow or lend money?"
+msgstr ""
+
+#: dialogs/rc.cpp:483
+msgid "Name of the loan"
+msgstr ""
+
+#: dialogs/rc.cpp:484
+msgid ""
+"\n"
+"How do you want to call this loan? Examples for names are 'car loan', "
+"'school loan', 'home owner loan'."
+msgstr ""
+
+#: dialogs/rc.cpp:486
+msgid "TextLabel6"
+msgstr ""
+
+#: dialogs/rc.cpp:487
+msgid "TextLabel7"
+msgstr ""
+
+#: dialogs/rc.cpp:488
+msgid "Type of interest"
+msgstr ""
+
+#: dialogs/rc.cpp:489
+msgid ""
+"\n"
+"Is the interest of this loan fixed over a period of time or is it adapted "
+"from time to time? If the interest rate changes during the amortization "
+"phase of the loan you should choose the option 'variable interest rate'."
+msgstr ""
+
+#: dialogs/rc.cpp:490
+msgid "Fixed interest rate"
+msgstr ""
+
+#: dialogs/rc.cpp:491
+msgid "Variable interest rate"
+msgstr ""
+
+#: dialogs/rc.cpp:492
+msgid "Payments?"
+msgstr ""
+
+#: dialogs/rc.cpp:493
+msgid ""
+"\n"
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?"
+msgstr ""
+
+#: dialogs/rc.cpp:494
+msgid "No, no payments were made yet."
+msgstr ""
+
+#: dialogs/rc.cpp:495
+msgid "Yes, payments were made."
+msgstr ""
+
+#: dialogs/rc.cpp:496
+msgid ""
+"Note: Payments made to obtain the loan (e.g. Dissagio) are not considered as "
+"payments in this context."
+msgstr ""
+
+#: dialogs/rc.cpp:497
+msgid "Recording payments?"
+msgstr ""
+
+#: dialogs/rc.cpp:498
+msgid ""
+"\n"
+"Do you want to record all payments of this loan with KMyMoney?"
+msgstr ""
+
+#: dialogs/rc.cpp:499
+msgid "Yes, record all payments."
+msgstr ""
+
+#: dialogs/rc.cpp:500
+msgid "No, only record payments since the beginning of this year."
+msgstr ""
+
+#: dialogs/rc.cpp:501
+msgid "Date of next interest change"
+msgstr ""
+
+#: dialogs/rc.cpp:502
+msgid ""
+"\n"
+"Select the date when the interest rate for this loan will be modified and "
+"the frequency of the future changes."
+msgstr ""
+
+#: dialogs/rc.cpp:503
+msgid "Next interest change on"
+msgstr ""
+
+#: dialogs/rc.cpp:504
+msgid "Time until next change"
+msgstr ""
+
+#: dialogs/rc.cpp:506 dialogs/rc.cpp:571
+msgid ""
+"\n"
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+
+#: dialogs/rc.cpp:507
+msgid "Current amount"
+msgstr ""
+
+#: dialogs/rc.cpp:510
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the amount for principal and interest then enter "
+"it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+
+#: dialogs/rc.cpp:512 dialogs/rc.cpp:545
+msgid ""
+"\n"
+"Please enter the interest rate or leave the field empty to calculate it."
+msgstr ""
+
+#: dialogs/rc.cpp:514
+msgid "Current rate"
+msgstr ""
+
+#: dialogs/rc.cpp:516
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the interest rate then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+
+#: dialogs/rc.cpp:517
+msgid "Date of first payment"
+msgstr ""
+
+#: dialogs/rc.cpp:520
+msgid "Calculate Loan"
+msgstr ""
+
+#: dialogs/rc.cpp:521
+msgid ""
+"\n"
+"You have successfully entered the general information about your loan. Next, "
+"KMyMoney needs some information about the calculation of the loan."
+msgstr ""
+
+#: dialogs/rc.cpp:523 dialogs/rc.cpp:611
+msgid ""
+"\n"
+"2. Calculate Loan"
+msgstr ""
+
+#: dialogs/rc.cpp:524 dialogs/rc.cpp:612
+msgid ""
+"\n"
+"3. Payments"
+msgstr ""
+
+#: dialogs/rc.cpp:526
+msgid ""
+"\n"
+"How often will there be payments made to this loan?"
+msgstr ""
+
+#: dialogs/rc.cpp:527
+msgid "Interest calculation"
+msgstr ""
+
+#: dialogs/rc.cpp:528
+msgid ""
+"\n"
+"When does the actual interest rate get calculated?"
+msgstr ""
+
+#: dialogs/rc.cpp:529
+msgid "When the payment is received."
+msgstr ""
+
+#: dialogs/rc.cpp:530
+msgid "When the payment is due."
+msgstr ""
+
+#: dialogs/rc.cpp:534 dialogs/rc.cpp:547 dialogs/rc.cpp:560 dialogs/rc.cpp:573
+#: dialogs/rc.cpp:586 dialogs/rc.cpp:598 dialogs/rc.cpp:679
+msgid "Loan amount:"
+msgstr "Paskolos dydis:"
+
+#: dialogs/rc.cpp:535 dialogs/rc.cpp:548 dialogs/rc.cpp:561 dialogs/rc.cpp:574
+#: dialogs/rc.cpp:587 dialogs/rc.cpp:599 dialogs/rc.cpp:633 dialogs/rc.cpp:671
+msgid "Interest rate:"
+msgstr ""
+
+#: dialogs/rc.cpp:536 dialogs/rc.cpp:549 dialogs/rc.cpp:562 dialogs/rc.cpp:575
+#: dialogs/rc.cpp:588 dialogs/rc.cpp:600 dialogs/rc.cpp:669
+msgid "Term:"
+msgstr ""
+
+#: dialogs/rc.cpp:537 dialogs/rc.cpp:550 dialogs/rc.cpp:563 dialogs/rc.cpp:576
+#: dialogs/rc.cpp:589 dialogs/rc.cpp:601 dialogs/rc.cpp:622 dialogs/rc.cpp:630
+#: dialogs/rc.cpp:677
+msgid "Principal + Interest:"
+msgstr ""
+
+#: dialogs/rc.cpp:538 dialogs/rc.cpp:551 dialogs/rc.cpp:564 dialogs/rc.cpp:577
+#: dialogs/rc.cpp:583 dialogs/rc.cpp:585 dialogs/rc.cpp:590 dialogs/rc.cpp:602
+msgid "Final amortization payment"
+msgstr ""
+
+#: dialogs/rc.cpp:557
+msgid "Duration"
+msgstr "Trukmė"
+
+#: dialogs/rc.cpp:558
+msgid ""
+"\n"
+"Please enter the term of this loan or leave the field empty to calculate it. "
+"The term is the time that is required to fully repay the loan. This time "
+"might be different from the time your loan contract is signed for."
+msgstr ""
+
+#: dialogs/rc.cpp:584
+msgid ""
+"\n"
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+
+#: dialogs/rc.cpp:596
+msgid "Calculation Overview"
+msgstr ""
+
+#: dialogs/rc.cpp:597
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown in the overview below. You can "
+"accept these values by selecting \"Next\" or change them by choosing \"Back"
+"\" to return to the input field for the information you want to change."
+msgstr ""
+
+#: dialogs/rc.cpp:609
+msgid ""
+"\n"
+"In the following steps, KMyMoney supports you in setting up categories and "
+"schedules for your loan payments."
+msgstr ""
+
+#: dialogs/rc.cpp:614
+msgid ""
+"\n"
+"Please select the category you want to assign the interest payments to or "
+"create a new category."
+msgstr ""
+
+#: dialogs/rc.cpp:615
+msgid "Additional Fees"
+msgstr ""
+
+#: dialogs/rc.cpp:616
+msgid ""
+"\n"
+"If your regular payment contains any additional fees, click on the button "
+"\"Additional fees\" to enter them."
+msgstr ""
+
+#: dialogs/rc.cpp:617
+msgid "= periodical payment:"
+msgstr ""
+
+#: dialogs/rc.cpp:623
+msgid ""
+"If no additional fees are included in your periodical payment or you have "
+"entered all such fees, then click on \"Next\"."
+msgstr ""
+
+#: dialogs/rc.cpp:625
+msgid ""
+"KMyMoney will create a schedule for this payment and reminds you whenever a "
+"payment must be made.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+
+#: dialogs/rc.cpp:626
+msgid "First payment due on:"
+msgstr ""
+
+#: dialogs/rc.cpp:627
+msgid "Make payment from/to:"
+msgstr ""
+
+#: dialogs/rc.cpp:629
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown below. If you want to accept these "
+"values use the \"Finish\" button to update your account, otherwise use the "
+"\"Back\" button to modify your settings."
+msgstr ""
+
+#: dialogs/rc.cpp:631
+msgid "Additional fees:"
+msgstr ""
+
+#: dialogs/rc.cpp:632
+msgid "Total payment:"
+msgstr "Viso mokėti:"
+
+#: dialogs/rc.cpp:634
+msgid "Valid from:"
+msgstr "Galioja nuo:"
+
+#: dialogs/rc.cpp:635
+msgid "Affected payments:"
+msgstr ""
+
+#: dialogs/rc.cpp:645
+msgid "Press this to create a new asset account"
+msgstr ""
+
+#: dialogs/rc.cpp:648
+msgid ""
+"\n"
+"This page summarizes the data you entered. If you need to modify anything, "
+"please use the \"Back\" button to go to respective page. Otherwise use the "
+"\"Finish\" button to create the account."
+msgstr ""
+
+#: dialogs/rc.cpp:650
+msgid "Payee:"
+msgstr "Korespondentas:"
+
+#: dialogs/rc.cpp:653
+msgid "First payment:"
+msgstr ""
+
+#: dialogs/rc.cpp:655
+msgid "Amount is:"
+msgstr "Suma yra:"
+
+#: dialogs/rc.cpp:656
+msgid "Loan calculation"
+msgstr "Paskolos skaičiavimas"
+
+#: dialogs/rc.cpp:660
+msgid "Periodic Payment:"
+msgstr ""
+
+#: dialogs/rc.cpp:661
+msgid "Additional Fees:"
+msgstr ""
+
+#: dialogs/rc.cpp:662
+msgid "Interest category:"
+msgstr ""
+
+#: dialogs/rc.cpp:663
+msgid "Payment from:"
+msgstr ""
+
+#: dialogs/rc.cpp:666
+msgid "Next due date:"
+msgstr ""
+
+#: dialogs/rc.cpp:673
+msgid "Final Payment:"
+msgstr ""
+
+#: dialogs/rc.cpp:675
+msgid "Interest is due:"
+msgstr ""
+
+#: dialogs/rc.cpp:680
+msgid "Payment frequency:"
+msgstr ""
+
+#: dialogs/rc.cpp:682
+msgid "Online Quote Configuration"
+msgstr ""
+
+#: dialogs/rc.cpp:687
+msgid "Perl Location:"
+msgstr ""
+
+#: dialogs/rc.cpp:688
+msgid "Script:"
+msgstr "Scenarijus:"
+
+#: dialogs/rc.cpp:690
+msgid "Reassign payees"
+msgstr ""
+
+#: dialogs/rc.cpp:691
+msgid ""
+"The transactions associated with the selected payees need to be re-assigned "
+"to a different payee before the selected payees can be deleted. Please "
+"select a payee from the list below."
+msgstr ""
+
+#: dialogs/rc.cpp:692
+msgid "Available payees:"
+msgstr ""
+
+#: dialogs/rc.cpp:693
+msgid "Assign deleted names to the above selected payee's matching list"
+msgstr ""
+
+#: dialogs/rc.cpp:696
+#, fuzzy
+msgid "PluginDlg"
+msgstr "&Priedai"
+
+#: dialogs/rc.cpp:697
+#, fuzzy
+msgid "PlugIn"
+msgstr "&Priedai"
+
+#: dialogs/rc.cpp:698 widgets/transaction.cpp:1071
+#: widgets/transaction.cpp:1658
+#, fuzzy
+msgid "Status"
+msgstr "Būsena:"
+
+#: dialogs/rc.cpp:699
+#, fuzzy
+msgid "Feature"
+msgstr "&Sukurti"
+
+#: dialogs/rc.cpp:703
+msgid "Reconciliation Dialog"
+msgstr "Sutaikinimo dialogas"
+
+#: dialogs/rc.cpp:704
+msgid ""
+"This dialog will assist in helping you to balance your account.\n"
+"\n"
+"Click on an appropriate transaction within one of the two list views to mark "
+"it as reconciled. To create a transaction or edit\n"
+"a transaction you can return to the register by clicking on the Edit "
+"Transactions button.\n"
+"\n"
+"Your account is balanced when the Difference is Zero. Click on the Finish "
+"button to save the reconciled transactions."
+msgstr ""
+
+#: dialogs/rc.cpp:705
+msgid "Withdrawals"
+msgstr "Išėmimai"
+
+#: dialogs/rc.cpp:707 dialogs/rc.cpp:708 dialogs/rc.cpp:822
+msgid "$"
+msgstr "$"
+
+#: dialogs/rc.cpp:710
+msgid "Previous Balance:"
+msgstr "Ankstesnis balansas:"
+
+#: dialogs/rc.cpp:711 dialogs/rc.cpp:713 dialogs/rc.cpp:715 dialogs/rc.cpp:717
+#: dialogs/rc.cpp:820
+msgid "0"
+msgstr "0"
+
+#: dialogs/rc.cpp:712
+msgid "Ending Balance:"
+msgstr "Pabaigos balansas:"
+
+#: dialogs/rc.cpp:714
+msgid "Cleared Balance:"
+msgstr "Suderintas balansas:"
+
+#: dialogs/rc.cpp:716
+msgid "Difference:"
+msgstr "Skirtumas:"
+
+#: dialogs/rc.cpp:718
+#, fuzzy
+msgid "Edit Transactions..."
+msgstr "&Redaguoti operacijas..."
+
+#: dialogs/rc.cpp:721
+msgid "Security List Editor"
+msgstr ""
+
+#: dialogs/rc.cpp:726
+msgid "Market"
+msgstr ""
+
+#: dialogs/rc.cpp:729
+msgid "Cash Fraction"
+msgstr ""
+
+#: dialogs/rc.cpp:730
+#, fuzzy
+msgid "Add..."
+msgstr "Redaguoti ..."
+
+#: dialogs/rc.cpp:732 widgets/kmymoneypriceview.cpp:157
+#, fuzzy
+msgid "Delete..."
+msgstr "Trinti ..."
+
+#: dialogs/rc.cpp:733
+msgid "Show national currencies"
+msgstr ""
+
+#: dialogs/rc.cpp:735
+msgid "KMyMoney - Select Database"
+msgstr ""
+
+#: dialogs/rc.cpp:736
+msgid "CAUTION!"
+msgstr ""
+
+#: dialogs/rc.cpp:737
+msgid ""
+"<font color=\"#ff2727\">This software is still in an experimental stage, and "
+"there are still some known response time problems. Please be patient; we are "
+"working on them.\n"
+"As always, please make sure you have adequate backups of your data.</font>"
+msgstr ""
+
+#: dialogs/rc.cpp:738
+#, fuzzy
+msgid "Database Type"
+msgstr "Kategorijos tipas"
+
+#: dialogs/rc.cpp:739
+#, fuzzy
+msgid "Database Name"
+msgstr "Laikotarpis"
+
+#: dialogs/rc.cpp:740
+#, fuzzy
+msgid "Host Name"
+msgstr "Ataskaitos pavadinimas"
+
+#: dialogs/rc.cpp:741
+#, fuzzy
+msgid "User Name"
+msgstr "Naudotojas"
+
+#: dialogs/rc.cpp:743
+#, fuzzy
+msgid "Preload &all data"
+msgstr "Asmeniniai duomenys..."
+
+#: dialogs/rc.cpp:745
+#, fuzzy
+msgid "&Generate SQL"
+msgstr "Bendra"
+
+#: dialogs/rc.cpp:747
+msgid "Ca&ncel"
+msgstr ""
+
+#: dialogs/rc.cpp:762 widgets/rc.cpp:172
+#, fuzzy
+msgid "Sort options"
+msgstr "Indėlio parinktys"
+
+#: dialogs/rc.cpp:763
+#, fuzzy
+msgid "Use default"
+msgstr "Naudotojo nustatyta"
+
+#: dialogs/rc.cpp:767
+msgid "Correct splits"
+msgstr ""
+
+#: dialogs/rc.cpp:769
+msgid "How do you want to proceed?"
+msgstr ""
+
+#: dialogs/rc.cpp:770
+msgid "Continue to edit splits"
+msgstr ""
+
+#: dialogs/rc.cpp:771
+#, fuzzy, c-format
+msgid "Change total amount of transaction to %1."
+msgstr "&Pakeisti bendrą operacijos sumą į %1."
+
+#: dialogs/rc.cpp:772
+#, fuzzy
+msgid "Distribute difference of %1 among all splits."
+msgstr "&Paskirstyti skirtumą %1 tarp operacijos dalių."
+
+#: dialogs/rc.cpp:773
+#, fuzzy
+msgid "Leave %1 unassigned."
+msgstr "&Palikti %1 nepriskirta."
+
+#: dialogs/rc.cpp:776
+msgid "Split transaction"
+msgstr ""
+
+#: dialogs/rc.cpp:777
+msgid "<b>11,00<b>"
+msgstr ""
+
+#: dialogs/rc.cpp:778
+msgid "<b>111,00<b>"
+msgstr ""
+
+#: dialogs/rc.cpp:779
+msgid "Unassigned"
+msgstr ""
+
+#: dialogs/rc.cpp:780
+msgid "Sum of splits"
+msgstr ""
+
+#: dialogs/rc.cpp:781
+msgid "100,00"
+msgstr ""
+
+#: dialogs/rc.cpp:782
+msgid "Transaction amount"
+msgstr ""
+
+#: dialogs/rc.cpp:783
+#, fuzzy
+msgid "Merge"
+msgstr "Daugiau"
+
+#: dialogs/rc.cpp:784
+msgid "Merges splits with the same category to one split"
+msgstr ""
+
+#: dialogs/rc.cpp:785
+msgid ""
+"In case you have multiple split entries to the same category and you like to "
+"keep them as a single split, press this button. The amount for identical "
+"categories will be added and stored in a single split for that category."
+msgstr ""
+
+#: dialogs/rc.cpp:786
+#, fuzzy
+msgid "Clear &Zero"
+msgstr "Patvirtintos"
+
+#: dialogs/rc.cpp:787
+msgid "Removes all splits that have a value of zero."
+msgstr ""
+
+#: dialogs/rc.cpp:791
+msgid "New price entry"
+msgstr "Naujas kainos įrašas"
+
+#: dialogs/rc.cpp:799
+msgid "Void mark"
+msgstr "Tuščias ženklas"
+
+#: dialogs/rc.cpp:800
+msgid "Opening Balance text"
+msgstr "Atidarymo balanso tekstas"
+
+#: dialogs/rc.cpp:801
+msgid "Type field text"
+msgstr "Lauko tipo tekstas"
+
+#: dialogs/rc.cpp:802
+msgid "Account delimiter"
+msgstr "Sąskaitos skirtukas"
+
+#: dialogs/rc.cpp:804
+#, fuzzy
+msgid "Attempt to match similar transactions"
+msgstr "Bandyti sulyginti panašias operacijas"
+
+#: dialogs/rc.cpp:806 dialogs/rc.cpp:808
+msgid "The format of the dates in the QIF file."
+msgstr "Datos formatas QIF byloje."
+
+#: dialogs/rc.cpp:809 dialogs/rc.cpp:811
+msgid ""
+"If a QIF file contains date entries with years represented with two digits "
+"then either an apostrophe or a slash may be used to delimit the year in the "
+"dates for certain centuries. This enables 1905 to be distinguished from "
+"2005. Specify here which range of years will have year delimited by an "
+"apostrophe (eg. for Quicken this is usually 1900-1949)."
+msgstr ""
+
+#: dialogs/rc.cpp:810
+msgid "Apostrophe Handling"
+msgstr "Apostrofų tvarkymas"
+
+#: dialogs/rc.cpp:812
+msgid "Amounts"
+msgstr "Sumos"
+
+#: dialogs/rc.cpp:813
+msgid "Field"
+msgstr "Laukas"
+
+#: dialogs/rc.cpp:814
+msgid "QIF-Record"
+msgstr "QIF įrašas"
+
+#: dialogs/rc.cpp:815 dialogs/rc.cpp:833
+msgid "Decimal Symbol"
+msgstr "Dešimtainis simbolis"
+
+#: dialogs/rc.cpp:816
+msgid "Thousand Delimiter"
+msgstr "Tūkstančio skirtukas"
+
+#: dialogs/rc.cpp:817
+msgid "SortColumnInvisible"
+msgstr ""
+
+#: dialogs/rc.cpp:819
+msgid "T"
+msgstr "T"
+
+#: dialogs/rc.cpp:821
+msgid "Split-Value"
+msgstr "Perskirta-vertė"
+
+#: dialogs/rc.cpp:824
+msgid "Commission"
+msgstr "Komisiniai"
+
+#: dialogs/rc.cpp:825
+msgid "O"
+msgstr "O"
+
+#: dialogs/rc.cpp:826
+msgid "2"
+msgstr "2"
+
+#: dialogs/rc.cpp:828
+msgid "I"
+msgstr "I"
+
+#: dialogs/rc.cpp:829
+msgid "3"
+msgstr "3"
+
+#: dialogs/rc.cpp:831
+msgid "Q"
+msgstr "Q"
+
+#: dialogs/rc.cpp:832
+msgid "4"
+msgstr "4"
+
+#: dialogs/rc.cpp:834
+msgid "Thousands Separator"
+msgstr "Tūkstančių skirtukas"
+
+#: dialogs/rc.cpp:836
+msgid "Output filter location"
+msgstr "Išvedimio filtro vieta"
+
+#: dialogs/rc.cpp:837
+#, fuzzy
+msgid "Input filter file type"
+msgstr "Įvedimo filtro vieta"
+
+#: dialogs/rc.cpp:838
+msgid "*.qif"
+msgstr ""
+
+#: dialogs/rc.cpp:839
+msgid "Input filter location"
+msgstr "Įvedimo filtro vieta"
+
+#: dialogs/rc.cpp:843
+#, fuzzy
+msgid "Rename"
+msgstr "Pe&rvadinti"
+
+#: dialogs/kselecttransactionsdlg.cpp:44
+#, fuzzy
+msgid "Select Transaction"
+msgstr "Skelti operaciją"
+
+#: dialogs/kselecttransactionsdlg.cpp:45
+msgid ""
+"Select a transaction and press the OK button or use Cancel to select none."
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:62
+msgid "Investment detail wizard"
+msgstr "Investicijų detalių vediklis"
+
+#: dialogs/knewinvestmentwizard.cpp:82
+msgid "Security detail wizard"
+msgstr "Vertybinių popierių detalių vediklis"
+
+#: dialogs/knewaccountdlg.cpp:121 dialogs/knewinvestmentwizard.cpp:109
+msgid ""
+"_: default price mode\n"
+"<default>"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:122 dialogs/knewinvestmentwizard.cpp:110
+#, fuzzy
+msgid "Price per share"
+msgstr "Kaina"
+
+#: dialogs/knewaccountdlg.cpp:123 dialogs/knewinvestmentwizard.cpp:111
+msgid "Total for all shares"
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:129
+msgid "This wizard allows you to modify the selected investment."
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:132
+msgid "This wizard allows you to modify the selected security."
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid ""
+"The selected symbol is already on file. Do you want to reuse the existing "
+"security?"
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:186
+#, fuzzy
+msgid "Security found"
+msgstr "Saugumas"
+
+#: dialogs/knewinvestmentwizard.cpp:309
+msgid "Unable to create all objects for the investment"
+msgstr ""
+
+#: dialogs/keditequityentrydlg.cpp:78
+msgid "Change the price information of the selected entry."
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:64 widgets/kmymoneybriefschedule.cpp:59
+msgid "&Skip"
+msgstr "Pra&leisti"
+
+#: dialogs/kaccountselectdlg.cpp:66 widgets/kmymoneybriefschedule.cpp:61
+msgid "Skip this transaction"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:67
+msgid ""
+"Use this to skip importing this transaction and proceed with the next one."
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:72
+msgid "Create a new account/category"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:73
+msgid "Use this to add a new account/category to the file"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:77
+msgid "&Abort"
+msgstr "&Atšaukti"
+
+#: dialogs/kaccountselectdlg.cpp:79
+msgid "Abort the import operation and dismiss all changes"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:80
+msgid ""
+"Use this to abort the import. Your financial data will be in the state "
+"before you started the QIF import."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:110
+msgid "Is a sub account"
+msgstr "Yra šalutinė sąskaita"
+
+#: dialogs/knewaccountdlg.cpp:184
+#, fuzzy
+msgid "VAT account"
+msgstr "Sąskaita"
+
+#: dialogs/knewaccountdlg.cpp:474
+msgid ""
+"You have not specified a name.\n"
+"Please fill in this field."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:482
+msgid "Please select a parent account."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:489 dialogs/knewaccountdlg.cpp:1029
+msgid "<No Institution>"
+msgstr "<be institucijos>"
+
+#: dialogs/knewaccountdlg.cpp:552
+msgid ""
+"An account named <b>%1</b> already exists. You cannot create a second "
+"account with the same name."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:567
+msgid ""
+"A category named <b>%1</b> already exists. You cannot create a second "
+"category with the same name."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid ""
+"You have selected to suppress the display of unused categories in the "
+"KMyMoney configuration dialog. The category you just created will therefore "
+"only be shown if it is used. Otherwise, it will be hidden in the accounts/"
+"categories view."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid "Hidden categories"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:927 dialogs/knewaccountdlg.cpp:979
+#, c-format
+msgid "Is a sub account of %1"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:1082
+msgid "Cannot add institution"
+msgstr ""
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid ""
+"This dialog does not allow to create new payees. Please pick a payee from "
+"the list."
+msgstr ""
+
+#: dialogs/kpayeereassigndlg.cpp:75
+#, fuzzy
+msgid "Payee creation"
+msgstr "Korespondento informacija"
+
+#: dialogs/kimportdlg.cpp:69
+msgid "Use this to start the import operation"
+msgstr ""
+
+#: dialogs/kimportdlg.cpp:110
+msgid ""
+"%1|Import files\n"
+"%2|All files (*.*)"
+msgstr ""
+
+#: dialogs/kimportdlg.cpp:111
+#, fuzzy
+msgid "Import File..."
+msgstr "Importuojami sąskaitų šablonai."
+
+#: dialogs/knewloanwizard.cpp:124
+msgid "Create a new category"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:125
+msgid "Use this to open the new account editor"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:129
+msgid "&Additional fees..."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:131
+msgid "Enter additional fees"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:132
+msgid ""
+"Use this to add any additional fees other than principal and interest "
+"contained in your periodical payments."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:139
+msgid ""
+"Use this to create a new account to which the initial payment should be made"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:208
+msgid "To whom do you make payments?"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:209
+msgid "Payments to"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:214
+msgid "From whom do you expect payments?"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:215
+msgid "Payments from"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:233
+msgid "Please enter the date, the first payment for this loan was/is due."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:235
+msgid ""
+"Note: Consult the loan contract for details of the first due date. Keep in "
+"mind, that the first due date usually differs from the date the contract was "
+"signed"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:240
+msgid ""
+"Please enter the original loan amount in the field below or leave it empty "
+"to be calculated."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:248
+msgid ""
+"Please enter the date, the first payment for this loan was/is due this year."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:250
+msgid ""
+"Note: You can easily figure out the date of the first payment if you consult "
+"the last statement of last year."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:254
+msgid ""
+"Please enter the remaining loan amount of last years final statement in the "
+"field below. You should not leave this field empty."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:311 dialogs/knewloanwizard.cpp:326
+#: dialogs/knewloanwizard.cpp:341 dialogs/knewloanwizard.cpp:357
+#: dialogs/knewloanwizard.cpp:373
+msgid "calculate"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:417
+msgid "borrowed"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:419
+msgid "lend"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:423
+msgid "not assigned"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:430
+msgid "on reception"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:432
+msgid "on due date"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:471
+msgid ""
+"The loan wizard is unable to calculate two different values for your loan at "
+"the same time. Please enter a value for the %1 on this page or backup to the "
+"page where the current value to be calculated is defined and fill in a "
+"value."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:500
+msgid ""
+"You selected, that payments have already been made towards this loan. This "
+"requires you to enter the loan amount exactly as found on your last "
+"statement."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:513
+msgid "interest rate"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:522
+msgid "term"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:532
+msgid "principal and interest"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:743
+#, c-format
+msgid ""
+"The number of payments has been decremented and the final payment has been "
+"modified to %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:751 dialogs/knewloanwizard.cpp:771
+#, c-format
+msgid "The final payment has been modified to %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:802
+msgid "KMyMoney has calculated a final payment of %1 for this loan."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:817
+msgid ""
+"You have entered mis-matching information. Please backup to the appropriate "
+"page and update your figures or leave one value empty to let KMyMoney "
+"calculate it for you"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:230
+msgid ""
+"Warning: Filtering by Category will exclude all transfers from the results."
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:239
+msgid "(None)"
+msgstr "(Nieko)"
+
+#: dialogs/kfindtransactiondlg.cpp:241
+msgid "Current selections: "
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:716
+msgid "Found %1 matching transactions (D %2 / P %3 = %4)"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:719
+#, fuzzy
+msgid "Found %1 matching transactions"
+msgstr "Skelti operaciją"
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "The institution name field is empty. Please enter the name."
+msgstr ""
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "Adding New Institution"
+msgstr ""
+
+#: dialogs/kcsvprogressdlg.cpp:69
+msgid "C&lose"
+msgstr ""
+
+#: dialogs/kcsvprogressdlg.cpp:247
+msgid " of "
+msgstr ""
+
+#: widgets/kmymoneypriceview.cpp:126
+msgid "Commodity"
+msgstr ""
+
+#: widgets/kmymoneypriceview.cpp:130
+msgid "Source"
+msgstr "Šaltinis"
+
+#: widgets/kmymoneypriceview.cpp:143
+msgid "Price Options"
+msgstr ""
+
+#: widgets/kmymoneypriceview.cpp:153
+#, fuzzy
+msgid "Online Price Update..."
+msgstr "Atnaujinti iš interneto"
+
+#: widgets/kmymoneycombo.cpp:472 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+msgid "From"
+msgstr "Nuo"
+
+#: widgets/transaction.cpp:668
+#, fuzzy
+msgid "Transaction is missing a category assignment."
+msgstr "Operacijos pagal kategorijas"
+
+#: widgets/transaction.cpp:671
+msgid "The transaction has a missing assignment of <b>%1</b>."
+msgstr ""
+
+#: widgets/transaction.cpp:874
+msgid "Sell"
+msgstr ""
+
+#: widgets/transaction.cpp:876
+msgid "Buy"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:520 widgets/transaction.cpp:879
+#: widgets/transaction.cpp:1447
+msgid "Dividend"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:518 widgets/transaction.cpp:881
+#: widgets/transaction.cpp:1453
+msgid "Yield"
+msgstr ""
+
+#: widgets/transaction.cpp:886 widgets/transaction.cpp:1473
+msgid "Activity"
+msgstr ""
+
+#: widgets/transaction.cpp:887
+#, fuzzy
+msgid "Investment transaction"
+msgstr "Priderinimo operacija"
+
+#: widgets/transaction.cpp:1021 widgets/transaction.cpp:1114
+#: widgets/transaction.cpp:1165
+msgid "*** UNASSIGNED ***"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:517 widgets/transaction.cpp:1435
+#, fuzzy
+msgid "Add shares"
+msgstr "Adresas:"
+
+#: widgets/kmymoneycombo.cpp:516 widgets/transaction.cpp:1438
+#, fuzzy
+msgid "Remove shares"
+msgstr "Šalinti korespondentą"
+
+#: widgets/kmymoneycombo.cpp:522 widgets/transaction.cpp:1441
+msgid "Buy shares"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:521 widgets/transaction.cpp:1444
+#, fuzzy
+msgid "Sell shares"
+msgstr "Visos būklės"
+
+#: widgets/transaction.cpp:1450
+msgid "Reinvest Dividend"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:515 widgets/transaction.cpp:1456
+#, fuzzy
+msgid "Split shares"
+msgstr "Perskirta-vertė"
+
+#: widgets/transaction.cpp:1515
+#, fuzzy
+msgid "Ratio"
+msgstr "Trukmė"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:241
+msgid "%1 Bills."
+msgstr "%1 mokėjimų sąskaitos."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:257
+msgid "%1 Deposits."
+msgstr "%1 indėliai."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:273
+msgid "%1 Transfers."
+msgstr "%1 perkėlimai."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:355
+msgid ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+msgstr ""
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:57
+#: widgets/kmymoneyaccounttreeforecast.cpp:84
+#, fuzzy
+msgid "Current"
+msgstr "Valiuta"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:72
+#: widgets/kmymoneyaccounttreeforecast.cpp:93
+msgid "Total variation"
+msgstr ""
+
+#: widgets/stdtransactionmatched.cpp:130
+msgid ""
+"KMyMoney has matched a downloaded transaction with a manually entered one "
+"(result above)"
+msgstr ""
+
+#: widgets/stdtransactionmatched.cpp:138
+#, fuzzy
+msgid "Bank entry:"
+msgstr "Pridėti naują įrašą"
+
+#: widgets/stdtransactionmatched.cpp:166
+#, fuzzy
+msgid "Your entry:"
+msgstr "Naujas kainos įrašas"
+
+#: widgets/kbudgetvalues.cpp:187
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a monthly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:187 widgets/kbudgetvalues.cpp:206
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"_: Auto assignment (caption)\n"
+"Auto assignment"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:206
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a yearly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"You have entered budget values using a different base which would result in "
+"an individual monthly budget of <b>%1</b>. Should this value be used to fill "
+"the monthly budgets?"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:62
+#, fuzzy
+msgid "Use this button to skip this transaction"
+msgstr "Išrinkti operacijas be korespondento"
+
+#: widgets/kmymoneybriefschedule.cpp:67
+msgid "Record this transaction into the register"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:68
+msgid "Use this button to record this transaction"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:96
+msgid "%1 of %2"
+msgstr "%1 iš %2"
+
+#: widgets/kmymoneybriefschedule.cpp:109
+msgid "Payment on %1 for %2 with %3 transactions remaining occuring %4."
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:115
+msgid "Payment on %1 for %2 occuring %4."
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:136
+msgid "%1 days overdue (%2 occurences)."
+msgstr ""
+
+#: widgets/register.cpp:55
+msgid "Post date"
+msgstr ""
+
+#: widgets/register.cpp:56
+#, fuzzy
+msgid "Date entered"
+msgstr "Įvesta suma"
+
+#: widgets/register.cpp:60
+#, fuzzy
+msgid "Entry order"
+msgstr "Įvesti"
+
+#: widgets/register.cpp:63
+#, fuzzy
+msgid "Reconcile state"
+msgstr "Sutaikintos"
+
+#: widgets/register.cpp:440
+#, fuzzy
+msgid ""
+"_: Deposits onto account\n"
+"Deposits"
+msgstr "Sąskaita perkeliama"
+
+#: widgets/register.cpp:442
+msgid ""
+"_: Payments towards credit card\n"
+"Payments"
+msgstr ""
+
+#: widgets/register.cpp:446
+#, fuzzy
+msgid ""
+"_: Payments made from account\n"
+"Payments"
+msgstr "Mokėjimų sąskaitos"
+
+#: widgets/register.cpp:448
+msgid ""
+"_: Payments made with credit card\n"
+"Charges"
+msgstr ""
+
+#: widgets/register.cpp:736
+#, fuzzy
+msgid ""
+"_: Payment made from account\n"
+"Payment"
+msgstr "Mokėjimų sąskaitos"
+
+#: widgets/register.cpp:737
+#, fuzzy
+msgid ""
+"_: Deposit into account\n"
+"Deposit"
+msgstr "Sąskaita perkeliama"
+
+#: widgets/register.cpp:813
+msgid ""
+"_: Payment made with credit card\n"
+"Charge"
+msgstr ""
+
+#: widgets/register.cpp:814
+msgid ""
+"_: Payment towards credit card\n"
+"Payment"
+msgstr ""
+
+#: widgets/register.cpp:818 widgets/register.cpp:824
+msgid ""
+"_: Decrease of asset/liability value\n"
+"Decrease"
+msgstr ""
+
+#: widgets/register.cpp:819 widgets/register.cpp:823
+msgid ""
+"_: Increase of asset/liability value\n"
+"Increase"
+msgstr ""
+
+#: widgets/register.cpp:2280
+#, fuzzy
+msgid "Prior transactions possibly filtered"
+msgstr "Ieškoti operacijų"
+
+#: widgets/register.cpp:2284
+#, fuzzy
+msgid "Last reconciliation"
+msgstr "Sutaikinimo vediklis"
+
+#: widgets/register.cpp:2291
+#, fuzzy, c-format
+msgid "Online Statement Balance: %1"
+msgstr "Pranešimo data:"
+
+#: widgets/register.cpp:2295
+#, fuzzy
+msgid "This year"
+msgstr "Praėję metai"
+
+#: widgets/kmymoneycombo.cpp:674 widgets/register.cpp:2296
+msgid "Last month"
+msgstr "Praėjęs mėnuo"
+
+#: widgets/register.cpp:2297
+#, fuzzy
+msgid "This month"
+msgstr "Praėjęs mėnuo"
+
+#: widgets/register.cpp:2298
+#, fuzzy
+msgid "Last week"
+msgstr "Praėję metai"
+
+#: widgets/register.cpp:2299
+msgid "This week"
+msgstr ""
+
+#: widgets/register.cpp:2300
+msgid "Yesterday"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:666 widgets/register.cpp:2301
+msgid "Today"
+msgstr ""
+
+#: widgets/register.cpp:2302 widgets/register.cpp:2307
+#, fuzzy
+msgid "Future transactions"
+msgstr "Trinti operaciją"
+
+#: widgets/register.cpp:2303
+#, fuzzy
+msgid "Next week"
+msgstr "Praėję metai"
+
+#: widgets/kmymoneycalendar.cpp:131 widgets/register.cpp:2304
+msgid "Next month"
+msgstr "Kitas mėnuo"
+
+#: widgets/kmymoneycombo.cpp:670 widgets/register.cpp:2315
+#, fuzzy
+msgid "Current fiscal year"
+msgstr "Šie metai"
+
+#: widgets/register.cpp:2316
+#, fuzzy
+msgid "Previous fiscal year"
+msgstr "Ankstesni metai"
+
+#: widgets/register.cpp:2317
+#, fuzzy
+msgid "Next fiscal year"
+msgstr "Praėję metai"
+
+#: widgets/register.cpp:2349
+msgid ""
+"_: Unknown payee\n"
+"Unknown"
+msgstr ""
+
+#: widgets/register.cpp:2368
+#, fuzzy
+msgid ""
+"_: Unknown category\n"
+"Unknown"
+msgstr "Nauja kategorija..."
+
+#: widgets/register.cpp:2387
+#, fuzzy
+msgid ""
+"_: Unknown security\n"
+"Unknown"
+msgstr "Nežinoma sąskaita"
+
+#: widgets/klistviewsearchline.cpp:249
+#, fuzzy
+msgid "Search Columns"
+msgstr "Rodomi stulpeliai"
+
+#: widgets/klistviewsearchline.cpp:251
+msgid "All Visible Columns"
+msgstr ""
+
+#: widgets/klistviewsearchline.cpp:266
+msgid ""
+"_: Column number %1\n"
+"Column No. %1"
+msgstr ""
+
+#: widgets/klistviewsearchline.cpp:461 widgets/registersearchline.cpp:286
+#, fuzzy
+msgid "S&earch:"
+msgstr "Ieškoti"
+
+#: widgets/kmymoneyaccountselector.cpp:110
+#: widgets/kmymoneyaccountselector.cpp:371
+msgid "Income categories"
+msgstr ""
+
+#: widgets/kmymoneyaccountselector.cpp:349
+#: widgets/kmymoneyaccountselector.cpp:350
+#, fuzzy
+msgid "Favorites"
+msgstr "Mėgstamiausios ataskaitos"
+
+#: widgets/kmymoneyaccountselector.cpp:357
+msgid "Asset accounts"
+msgstr "Turto sąskaitos"
+
+#: widgets/kmymoneyaccountselector.cpp:364
+msgid "Liability accounts"
+msgstr "Įsipareigojimų sąskaitos"
+
+#: widgets/kmymoneyaccountselector.cpp:381
+msgid "Expense categories"
+msgstr ""
+
+#: widgets/kmymoneyaccountselector.cpp:391
+#, fuzzy
+msgid "Equity accounts"
+msgstr "Redaguoti sąskaitą"
+
+#: widgets/kmymoneyaccounttreebase.cpp:120
+#, fuzzy
+msgid "Total Balance"
+msgstr "Balansas"
+
+#: widgets/kmymoneyaccounttreebase.cpp:124
+#, fuzzy
+msgid "Total Value"
+msgstr "Turtas ir įsipareigojimai"
+
+#: widgets/registersearchline.cpp:75
+msgid ""
+"_: label for status combo\n"
+"Stat&us"
+msgstr ""
+
+#: widgets/registersearchline.cpp:79
+#, fuzzy
+msgid "Any status"
+msgstr "Visos būklės"
+
+#: widgets/registersearchline.cpp:80
+#, fuzzy
+msgid "Imported"
+msgstr "&Importuoti"
+
+#: widgets/registersearchline.cpp:81
+#, fuzzy
+msgid "Matched"
+msgstr "Ieškoti"
+
+#: widgets/registersearchline.cpp:82
+msgid "Erroneous"
+msgstr ""
+
+#: widgets/registersearchline.cpp:83
+#, fuzzy
+msgid "Not marked"
+msgstr "Tuščias ženklas"
+
+#: widgets/kmymoneyaccounttree.cpp:54
+msgid ""
+"_: Column heading for category in tax report\n"
+"Tax"
+msgstr ""
+
+#: widgets/kmymoneyaccounttree.cpp:58
+msgid ""
+"_: Column heading for VAT category\n"
+"VAT"
+msgstr ""
+
+#: widgets/kmymoneywizard.cpp:101
+msgid "Continue with next page"
+msgstr ""
+
+#: widgets/kmymoneywizard.cpp:103
+#, fuzzy
+msgid "Finish wizard"
+msgstr "Baigta"
+
+#: widgets/kmymoneywizard.cpp:121
+#, fuzzy
+msgid "&Back"
+msgstr "Atsarginė kopija"
+
+#: widgets/kmymoneywizard.cpp:122
+#, fuzzy
+msgid "&Next"
+msgstr "&Naujas"
+
+#: widgets/kmymoneywizard.cpp:123
+msgid "&Finish"
+msgstr "&Baigti"
+
+#: widgets/kmymoneywizard.cpp:274
+#, fuzzy
+msgid "Step %1 of %2"
+msgstr "%1 iš %2"
+
+#: widgets/kmymoneydateinput.cpp:235
+msgid ""
+"_: Enter todays date into date input widget\n"
+"T"
+msgstr ""
+
+#: widgets/transactionform.cpp:302
+msgid "&Deposit"
+msgstr "In&dėlis"
+
+#: widgets/transactionform.cpp:304 widgets/transactionform.cpp:313
+#: widgets/transactionform.cpp:323 widgets/transactionform.cpp:333
+msgid "&Transfer"
+msgstr "&Perkėlimas"
+
+#: widgets/transactionform.cpp:306
+msgid "&Withdrawal"
+msgstr "&Išėmimas"
+
+#: widgets/transactionform.cpp:311
+msgid "&Payment"
+msgstr ""
+
+#: widgets/transactionform.cpp:315
+#, fuzzy
+msgid "&Charge"
+msgstr "Če&kis"
+
+#: widgets/transactionform.cpp:321 widgets/transactionform.cpp:335
+#, fuzzy
+msgid "&Decrease"
+msgstr "Sumažėjimas"
+
+#: widgets/transactionform.cpp:325 widgets/transactionform.cpp:331
+#, fuzzy
+msgid "&Increase"
+msgstr "Padidėjimas"
+
+#: widgets/kmymoneyscheduledcalendar.cpp:42
+msgid "Select Schedules"
+msgstr "Pasirinkti tvarkaraščius"
+
+#: widgets/kmymoneycalendar.cpp:108
+msgid "Select Style"
+msgstr "Pasirinkti stilių"
+
+#: widgets/kmymoneycalendar.cpp:128
+msgid "Choose Style"
+msgstr ""
+
+#: widgets/kmymoneycalendar.cpp:129
+msgid "Next year"
+msgstr "Kiti metai"
+
+#: widgets/kmymoneycalendar.cpp:130
+msgid "Previous year"
+msgstr "Ankstesni metai"
+
+#: widgets/kmymoneycalendar.cpp:132
+msgid "Previous month"
+msgstr "Ankstesnis mėnuo"
+
+#: widgets/kmymoneycalendar.cpp:133
+msgid "Select a week"
+msgstr "Pasirinkite savaitę"
+
+#: widgets/kmymoneycalendar.cpp:134
+msgid "Select a month"
+msgstr "Pasirinkite mėnesį"
+
+#: widgets/kmymoneycalendar.cpp:135
+msgid "Select a year"
+msgstr "Pasirinkite metus"
+
+#: widgets/kmymoneycalendar.cpp:249
+msgid "Week XX"
+msgstr ""
+
+#: widgets/kmymoneycalendar.cpp:264 widgets/kmymoneycalendar.cpp:300
+#, c-format
+msgid "Week %1"
+msgstr "Savaitė %1"
+
+#: widgets/rc.cpp:1
+#, fuzzy
+msgid "Account Types"
+msgstr "Sąskaitos"
+
+#: widgets/rc.cpp:3
+#, fuzzy
+msgid "Detailed description"
+msgstr "Aprašymas"
+
+#: widgets/rc.cpp:18
+msgid "Period"
+msgstr ""
+
+#: widgets/rc.cpp:21
+msgid "Individual"
+msgstr ""
+
+#: widgets/rc.cpp:23
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Acces to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>Recovery encryption</i> group is only accessible, if the necessary "
+"key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is "
+"found."
+msgstr ""
+
+#: widgets/rc.cpp:26
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading <i>0x</i>."
+msgstr ""
+
+#: widgets/rc.cpp:27
+msgid "User ID"
+msgstr "Naudotojo ID"
+
+#: widgets/rc.cpp:29
+msgid "Recovery encryption"
+msgstr "Atsarginis šifravimas"
+
+#: widgets/rc.cpp:30
+msgid "Also encrypt with kmymoney-recover key"
+msgstr "Taip pat šifruoti ir kmymoney-recovery raktu"
+
+#: widgets/rc.cpp:32
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out."
+msgstr ""
+
+#: widgets/rc.cpp:51
+msgid "PriceInfo"
+msgstr ""
+
+#: widgets/rc.cpp:52
+msgid "Report Tab"
+msgstr "Ataskaitos kortelė"
+
+#: widgets/rc.cpp:53
+msgid "<p>On this tab, you set the basic properties of this report.</p>"
+msgstr "<p>Šioje kortelėje galite nustatyti pagrindines pranešimo detales.</p>"
+
+#: widgets/rc.cpp:54
+msgid "Report Name"
+msgstr "Ataskaitos pavadinimas"
+
+#: widgets/rc.cpp:55
+msgid "<p>Choose a name for this report.</p>"
+msgstr "<p>Pasirinkite pavadinimą šiai ataskaitai.</p>"
+
+#: widgets/rc.cpp:57
+msgid "<p>Enter a comment to help you remember the details of this report.</p>"
+msgstr ""
+"<p>Įrašykite komentarą, kuris padėtų Jums atsiminti šios ataskaitos turinį.</"
+"p>"
+
+#: widgets/rc.cpp:58
+msgid "Convert values to base currency"
+msgstr "Konvertuoti sumas į pagrindinę valiutą"
+
+#: widgets/rc.cpp:59
+msgid ""
+"_: Convert 'em!!\n"
+"<p>Select this option to convert all values in the report to your base "
+"currency.</p><p>Leave it unchecked if you'd like to see values in their "
+"original currency.</p><p>If currencies are not converted, then subtotals "
+"will not be shown.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:60
+msgid "Mark as a favorite report"
+msgstr "Žymėti kaip mėgstamą ataskaitą"
+
+#: widgets/rc.cpp:61
+msgid ""
+"<p>Select this option to notate this report as one of your favorites.</"
+"p><p>All your favorite reports are grouped in one place on the report list "
+"for easy access.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:62 widgets/rc.cpp:88
+msgid "Rows/Columns Tab"
+msgstr "Eilučių/stulpelių kortelė"
+
+#: widgets/rc.cpp:63 widgets/rc.cpp:89
+msgid ""
+"<p>On this tab, you configure how you'd like the rows and columns to be "
+"selected and organized.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:69 widgets/rc.cpp:81
+msgid ""
+"<p>Choose what kind of accounts to display as the rows of this report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:71
+msgid "Columns"
+msgstr "Stulpeliai"
+
+#: widgets/rc.cpp:75
+msgid "Bi-Monthly"
+msgstr ""
+
+#: widgets/rc.cpp:78
+msgid "<p>Choose how large of a time period each column should encompass</p>"
+msgstr ""
+
+#: widgets/rc.cpp:79
+msgid "Income & Expenses"
+msgstr ""
+
+#: widgets/rc.cpp:80
+msgid "Assets & Liabilities"
+msgstr "Turtas ir įsipareigojimai"
+
+#: widgets/rc.cpp:82
+msgid "Rows"
+msgstr "Eilutės"
+
+#: widgets/rc.cpp:83
+#, fuzzy
+msgid "Show totals column"
+msgstr "Įsipareigojimų sąskaitos"
+
+#: widgets/rc.cpp:84
+#, fuzzy
+msgid "Average days"
+msgstr "Visos būklės"
+
+#: widgets/rc.cpp:85
+#, fuzzy
+msgid "Include scheduled transactions"
+msgstr "Įvesti operaciją pagal tvarkaraštį"
+
+#: widgets/rc.cpp:86
+#, fuzzy
+msgid "Include transfers"
+msgstr "Perkėlimai"
+
+#: widgets/rc.cpp:87
+msgid "Include unused accounts/categories"
+msgstr ""
+
+#: widgets/rc.cpp:90
+msgid "Organize by:"
+msgstr "Organizuoti pagal"
+
+#: widgets/rc.cpp:92
+msgid "Top Categories"
+msgstr "Pagrindines kategorijas"
+
+#: widgets/rc.cpp:95
+msgid "Top Accounts"
+msgstr "Pagrindines sąskaitas"
+
+#: widgets/rc.cpp:98
+msgid "<p>Choose how to group the transactions in this report</p>"
+msgstr "<p>Pasirinkite kaip sugrupuoti pervedimus šiame pranešime</p>"
+
+#: widgets/rc.cpp:99
+msgid "Show Columns"
+msgstr "Rodomi stulpeliai"
+
+#: widgets/rc.cpp:100
+msgid ""
+"<p>Choose which columns should be shown in the report.</p><p>The date and "
+"transaction amount are always shown.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:102
+msgid "<p>Select this option to show the Memo column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:104
+msgid "<p>Select this option to show the Shares column for investments</p>"
+msgstr ""
+
+#: widgets/rc.cpp:106
+msgid "<p>Select this option to show the Price column for investments</p>"
+msgstr ""
+
+#: widgets/rc.cpp:108
+msgid "<p>Select this option to show the Reconciled column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:110
+msgid "<p>Select this option to show the Account column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:112
+msgid "<p>Select this option to show the Number column</p>"
+msgstr ""
+"<p>Pažymėkite šią parinktį jei norite, kad būtų rodomas numerio stulpelis</p>"
+
+#: widgets/rc.cpp:114
+msgid "<p>Select this option to show the Payee column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:116
+msgid "<p>Select this option to show the Category column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:118
+msgid "<p>Select this option to show the Action column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:120
+#, fuzzy
+msgid "<p>Select this option to show the Running balance column</p>"
+msgstr ""
+"<p>Pažymėkite šią parinktį jei norite, kad būtų rodomas numerio stulpelis</p>"
+
+#: widgets/rc.cpp:121
+#, fuzzy
+msgid "Include only Loan accounts"
+msgstr "Įterpti į mokesčių pranešimą"
+
+#: widgets/rc.cpp:122
+msgid "Include only Investment accounts"
+msgstr ""
+
+#: widgets/rc.cpp:123 widgets/rc.cpp:127
+msgid ""
+"<p>Check this box to include only those categories which have been marked to "
+"\"Include on Tax Reports\"</p>"
+msgstr ""
+
+#: widgets/rc.cpp:124
+#, fuzzy
+msgid "Hide Split Transaction Details"
+msgstr "Operacijos detalės"
+
+#: widgets/rc.cpp:125
+msgid ""
+"Do not display the individual transactions that make up a split transaction"
+msgstr ""
+
+#: widgets/rc.cpp:126
+msgid "Include only Tax categories"
+msgstr ""
+
+#: widgets/rc.cpp:128
+#, fuzzy
+msgid "Chart Tab"
+msgstr "Ataskaitos kortelė"
+
+#: widgets/rc.cpp:129
+#, fuzzy
+msgid "<p>On this tab, you configure the chart drawn forthis report.</p>"
+msgstr "<p>Šioje kortelėje galite nustatyti pagrindines pranešimo detales.</p>"
+
+#: widgets/rc.cpp:130
+#, fuzzy
+msgid "Chart Type"
+msgstr "Kategorijos tipas"
+
+#: widgets/rc.cpp:131
+msgid "<p>Select what form you would like the chart to be drawn as.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:132
+msgid "Line"
+msgstr ""
+
+#: widgets/rc.cpp:133
+msgid "Bar"
+msgstr ""
+
+#: widgets/rc.cpp:134
+msgid "Stacked Bar"
+msgstr ""
+
+#: widgets/rc.cpp:135
+#, fuzzy
+msgid "Pie"
+msgstr "Kaina"
+
+#: widgets/rc.cpp:136
+#, fuzzy
+msgid "Ring"
+msgstr "Intervalas"
+
+#: widgets/rc.cpp:137
+msgid "Show grid lines"
+msgstr ""
+
+#: widgets/rc.cpp:138
+#, fuzzy
+msgid ""
+"<p>Select this option to show horizontal and vertical grid lines on the "
+"chart.</p>"
+msgstr ""
+"<p>Pažymėkite šią parinktį jei norite, kad būtų rodomas numerio stulpelis</p>"
+
+#: widgets/rc.cpp:139
+msgid "Draw values on chart"
+msgstr ""
+
+#: widgets/rc.cpp:140
+msgid ""
+"<p>Select this option to draw the numeric values for data points next to "
+"their plot location.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:141
+msgid "Show as chart by default"
+msgstr ""
+
+#: widgets/rc.cpp:142
+msgid ""
+"<p>Select this option to cause the report to be shown as a chart when you "
+"first open the report. Otherwise, it will come up as a text report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:143
+msgid "Line width"
+msgstr ""
+
+#: widgets/rc.cpp:144
+#, fuzzy
+msgid "<p>Select what width should be used to draw the line on the chart</p>"
+msgstr ""
+"<p>Pažymėkite šią parinktį jei norite, kad būtų rodomas numerio stulpelis</p>"
+
+#: widgets/rc.cpp:145
+msgid "ReportControl"
+msgstr ""
+
+#: widgets/rc.cpp:149
+msgid "Configure this report"
+msgstr ""
+
+#: widgets/rc.cpp:151
+msgid "Create a new report based on this one"
+msgstr ""
+
+#: widgets/rc.cpp:153
+msgid "Copy this report to the clipboard"
+msgstr ""
+
+#: widgets/rc.cpp:155
+msgid "Export this report as an HTML or CSV file"
+msgstr ""
+
+#: widgets/rc.cpp:157
+msgid "Permanently delete this report"
+msgstr ""
+
+#: widgets/rc.cpp:159
+msgid "Close this window"
+msgstr "Uždaryti šį langą"
+
+#: widgets/rc.cpp:162
+msgid "n of n"
+msgstr ""
+
+#: widgets/rc.cpp:166
+msgid "Account:"
+msgstr "Sąskaita:"
+
+#: widgets/rc.cpp:168
+msgid "Enter..."
+msgstr "Įvesti..."
+
+#: widgets/rc.cpp:171
+#, fuzzy
+msgid "TransactionSortOptionDecl"
+msgstr "Operacijos detalės"
+
+#: widgets/rc.cpp:173
+msgid "Sort order"
+msgstr ""
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Sunday\n"
+"Sun"
+msgstr ""
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Saturday\n"
+"Sat"
+msgstr ""
+
+#: widgets/kmymoneydatetbl.cpp:171 widgets/kmymoneydatetbl.cpp:178
+msgid "Week %1 for year %2."
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:417
+msgid "ATM"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:418
+msgid "Withdrawal"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:421
+msgid "Cheque"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:469
+msgid ""
+"_: Activity for expense categories\n"
+"Paid"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:470
+msgid ""
+"_: Activity for income categories\n"
+"Received"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:519
+msgid "Reinvest dividend"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:664
+msgid "All dates"
+msgstr "Visas laikotarpis"
+
+#: widgets/kmymoneycombo.cpp:665
+msgid "As of today"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:667
+msgid "Current month"
+msgstr "Šis mėnuo"
+
+#: widgets/kmymoneycombo.cpp:668
+#, fuzzy
+msgid "Current quarter"
+msgstr "Šie metai"
+
+#: widgets/kmymoneycombo.cpp:669
+#, fuzzy
+msgid "Current year"
+msgstr "Šie metai"
+
+#: widgets/kmymoneycombo.cpp:671
+msgid "Month to date"
+msgstr "Mėnuo iki šiandien"
+
+#: widgets/kmymoneycombo.cpp:672
+msgid "Year to date"
+msgstr "Metai iki šiandien"
+
+#: widgets/kmymoneycombo.cpp:673
+#, fuzzy
+msgid "Year to month"
+msgstr "Metai iki šiandien"
+
+#: widgets/kmymoneycombo.cpp:675
+#, fuzzy
+msgid "Last year"
+msgstr "Praėję metai"
+
+#: widgets/kmymoneycombo.cpp:676
+#, fuzzy
+msgid "Last fiscal year"
+msgstr "Praėję metai"
+
+#: widgets/kmymoneycombo.cpp:677
+#, fuzzy
+msgid "Last 7 days"
+msgstr "Paskutinės 30 d."
+
+#: widgets/kmymoneycombo.cpp:678
+msgid "Last 30 days"
+msgstr "Paskutinės 30 d."
+
+#: widgets/kmymoneycombo.cpp:679
+msgid "Last 3 months"
+msgstr "Paskutiniai 3 mėn."
+
+#: widgets/kmymoneycombo.cpp:680
+#, fuzzy
+msgid "Last quarter"
+msgstr "Praėję metai"
+
+#: widgets/kmymoneycombo.cpp:681
+msgid "Last 6 months"
+msgstr "Paskutiniai 6 mėn."
+
+#: widgets/kmymoneycombo.cpp:682
+#, fuzzy
+msgid "Last 11 months"
+msgstr "Paskutiniai 12 mėn."
+
+#: widgets/kmymoneycombo.cpp:683
+msgid "Last 12 months"
+msgstr "Paskutiniai 12 mėn."
+
+#: widgets/kmymoneycombo.cpp:684
+#, fuzzy
+msgid "Next 7 days"
+msgstr "Grynoji vertė šiandien"
+
+#: widgets/kmymoneycombo.cpp:685
+msgid "Next 30 days"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:686
+msgid "Next 3 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:687
+#, fuzzy
+msgid "Next quarter"
+msgstr "Kiti metai"
+
+#: widgets/kmymoneycombo.cpp:688
+msgid "Next 6 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:689
+msgid "Next 12 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:690
+#, fuzzy
+msgid "Last 3 months to next 3 months"
+msgstr "Paskutiniai 3 mėn."
+
+#: widgets/kmymoneycombo.cpp:691
+msgid "User defined"
+msgstr "Naudotojo nustatyta"
+
+#~ msgid "Reset"
+#~ msgstr "Iš naujo"
+
+#, fuzzy
+#~ msgid "New schedule..."
+#~ msgstr "&Naujas tvarkaraštis..."
+
+#, fuzzy
+#~ msgid "Edit schedule..."
+#~ msgstr "Redaguoti mokėjimo sąskaitos tvarkaraštį"
+
+#, fuzzy
+#~ msgid "Delete schedule..."
+#~ msgstr "Trinti ..."
+
+#, fuzzy
+#~ msgid "Duplicate schedule"
+#~ msgstr "Dublikuoti"
+
+#, fuzzy
+#~ msgid "Enter schedule..."
+#~ msgstr "&Naujas tvarkaraštis..."
+
+#, fuzzy
+#~ msgid "Skip schedule..."
+#~ msgstr "&Naujas tvarkaraštis..."
+
+#, fuzzy
+#~ msgid "Adjusting schedules..."
+#~ msgstr "Išsaugojama byla..."
+
+#, fuzzy
+#~ msgid "Add schedule"
+#~ msgstr "Tvarkaraštis"
+
+#, fuzzy
+#~ msgid "Unable to enter transaction for schedule '%1'"
+#~ msgstr "Nepavyksta pridėti operacijos / pakeisti tvarkaraščio"
+
+#, fuzzy
+#~ msgid "Loaded"
+#~ msgstr "Paskola"
+
+#, fuzzy
+#~ msgid "Schedule options"
+#~ msgstr "Tvarkaraščio detalės"
+
+#~ msgid "New Schedule"
+#~ msgstr "Naujas tvarkaraštis"
+
+#, fuzzy
+#~ msgid "Edit Schedule"
+#~ msgstr "Redaguoti mokėjimo sąskaitos tvarkaraštį"
+
+#~ msgid "Search transactions containing the following text"
+#~ msgstr "Išrinkti operacijas, turinčias šį tekstą"
+
+#~ msgid "Search"
+#~ msgstr "Ieškoti"
+
+#~ msgid "&Search"
+#~ msgstr "&Ieškoti"
+
+#, fuzzy
+#~ msgid "Budget "
+#~ msgstr "Kiti metai"
+
+#, fuzzy
+#~ msgid "Forecast "
+#~ msgstr "Bendra suma:"
+
+#, fuzzy
+#~ msgid "Budget Total"
+#~ msgstr "Kiti metai"
+
+#, fuzzy
+#~ msgid "Forecast Total"
+#~ msgstr "Bendra suma:"
+
+#, fuzzy
+#~ msgid "Incomes and Expenses This Month"
+#~ msgstr "Įplaukos ir išlaidos šį mėnesį"
+
+#, fuzzy
+#~ msgid "Incomes"
+#~ msgstr "Įplaukos"
+
+#, fuzzy
+#~ msgid "Schedules This Month"
+#~ msgstr "Korespondento informacija"
+
+#~ msgid "&Ok"
+#~ msgstr "&Gerai"
+
+#~ msgid "Accepts the value and stores them"
+#~ msgstr "Priima vertes ir jas išsaugo"
+
+#~ msgid "Use this to accept all values and close the dialog."
+#~ msgstr ""
+#~ "Naudokite šį mygtuką norėdami priimti visas vertes ir užverti dialogą."
+
+#~ msgid "Cancel the operation"
+#~ msgstr "Nutraukti operaciją"
+
+#~ msgid "Use this to dismiss all the changes made in this dialog."
+#~ msgstr ""
+#~ "Naudokite šį mygtuką norėdami atšaukti visus šiame dialoge atliktus "
+#~ "pakeitimus."
+
+#~ msgid "Close dialog"
+#~ msgstr "Užverti dialogą"
+
+#~ msgid "Delete the selected profile"
+#~ msgstr "Trinti pasirinktą profilį"
+
+#~ msgid "Use this to delete the selected profile"
+#~ msgstr "Naudokite tai norėdami ištrinti pažymėtą profilį"
+
+#, fuzzy
+#~ msgid "Scan"
+#~ msgstr "&Skanuoti"
+
+#~ msgid "Reject any changes"
+#~ msgstr "Atmesti visus pakeitimus"
+
+#~ msgid "Accept modifications"
+#~ msgstr "Priimti pakeitimus"
+
+#~ msgid "New ..."
+#~ msgstr "Naujas ..."
+
+#, fuzzy
+#~ msgid "S&ummary"
+#~ msgstr "Santrauka"
+
+#, fuzzy
+#~ msgid "Det&ail"
+#~ msgstr "Detalės"
+
+#, fuzzy
+#~ msgid "Total Incomes This Month"
+#~ msgstr "Įplaukos ir išlaidos šį mėnesį"
+
+#, fuzzy
+#~ msgid "Total Expenses This Month"
+#~ msgstr "Įplaukos ir išlaidos šį mėnesį"
+
+#, fuzzy
+#~ msgid "Scheduled Transfers This Month"
+#~ msgstr "Įplaukos ir išlaidos šį mėnesį"
+
+#~ msgid "&Create"
+#~ msgstr "&Sukurti"
+
+#, fuzzy
+#~ msgid "Te&xt"
+#~ msgstr "Tekstas"
+
+#~ msgid "&Delete ..."
+#~ msgstr "&Trinti ..."
+
+#, fuzzy
+#~ msgid "&Yearly"
+#~ msgstr "Kas metai"
+
+#~ msgid "Advanced Institution Settings"
+#~ msgstr "Sudėtingesni institucijos nustatymai"
+
+#, fuzzy
+#~ msgid "OFX Direct Connect Settings"
+#~ msgstr "Bendrieji nustatymai"
+
+#, fuzzy
+#~ msgid "1/"
+#~ msgstr "1 /"
+
+#, fuzzy
+#~ msgid "Account Fraction"
+#~ msgstr "Sąskaitos pasirinkimas"
+
+#~ msgid "R"
+#~ msgstr "S"
+
+#, fuzzy
+#~ msgid "Column 1"
+#~ msgstr "Stulpeliai"
+
+#~ msgid "Transaction History"
+#~ msgstr "Operacijų istorija"
+
+#~ msgid "Personal Information"
+#~ msgstr "Asmeninė informacija"
+
+#~ msgid "Online update using OFX..."
+#~ msgstr "Atnaujinti iš interneto naudojant OFX..."
+
+#, fuzzy
+#~ msgid "Match Transaction..."
+#~ msgstr "&Redaguoti operacijas..."
+
+#, fuzzy
+#~ msgid "Match With This Transaction"
+#~ msgstr "Ieškoti operacijų"
+
+#, fuzzy
+#~ msgid "Open Configuration Dialog"
+#~ msgstr "OFX konfigūracijos pagalba"
+
+#, fuzzy
+#~ msgid "Importing templates..."
+#~ msgstr "Importuojami sąskaitų šablonai."
+
+#~ msgid "Until today"
+#~ msgstr "Iki šiandien"
+
+#~ msgid "Tax Transactions"
+#~ msgstr "Mokesčių operacijos"
+
+#, fuzzy
+#~ msgid "Pa&yee"
+#~ msgstr "Korespondentas"
+
+#, fuzzy
+#~ msgid "Return"
+#~ msgstr "Pa&leisti"
+
+#, fuzzy
+#~ msgid "Summar&y"
+#~ msgstr "Santrauka"
+
+#, fuzzy
+#~ msgid "one month"
+#~ msgstr "Kitas mėnuo"
+
+#, fuzzy
+#~ msgid "one year"
+#~ msgstr "Kiti metai"
+
+#, fuzzy
+#~ msgid "one payment"
+#~ msgstr "Viso mokėti:"
+
+#, fuzzy
+#~ msgid "E&dit"
+#~ msgstr "Redaguoti..."
+
+#, fuzzy
+#~ msgid "De&lete"
+#~ msgstr "Trinti..."
+
+#, fuzzy
+#~ msgid "Ne&w"
+#~ msgstr "Naujas"
+
+#~ msgid "*.kmt|Account templates"
+#~ msgstr "*.kmt|Sąskaitų šablonai"
+
+#~ msgid "Select account template(s)"
+#~ msgstr "Pasirinkite sąskaitų šabloną(us)"
+
+#, fuzzy
+#~ msgid "Convert 'em!!"
+#~ msgstr "Konvertuoti iš"
+
+#, fuzzy
+#~ msgid "Outbox"
+#~ msgstr "Siunčiami"
+
+#~ msgid "Online update using HBCI..."
+#~ msgstr "Online update using HBCI..."
+
+#~ msgid "&Bills/Deposits"
+#~ msgstr "&Mokėjimų sąskaitos/Indėliai"
+
+#~ msgid "&Reports"
+#~ msgstr "&Ataskaitos"
+
+#~ msgid "Add new account..."
+#~ msgstr "Pridėti naują sąskaitą..."
+
+#~ msgid "Reconcile ..."
+#~ msgstr "Sutaikinti ..."
+
+#~ msgid "Toggle the statusbar..."
+#~ msgstr "Perjungti būsenos juostą..."
+
+#~ msgid "Cannot move account"
+#~ msgstr "Sąskaitos perkelti negalima"
+
+#~ msgid "Transfer to/from %1"
+#~ msgstr "Perkelti į/iš %1"
+
+#~ msgid "You currently owe: "
+#~ msgstr "Šiuo metu Jūs skolingi: "
+
+#~ msgid "There is no user manual yet"
+#~ msgstr "Naudotojo vadovo kol kas nėra"
+
+#~ msgid "AT&M"
+#~ msgstr "AT&M"
+
+#~ msgid "Account Details ..."
+#~ msgstr "Sąskaitos detalės ..."
+
+#~ msgid "Mark as ..."
+#~ msgstr "Pažymėti kaip ..."
+
+#~ msgid "Move to account ..."
+#~ msgstr "Perkelti į sąskaitą..."
+
+#~ msgid "New Account..."
+#~ msgstr "Nauja sąskaita..."
+
+#~ msgid "KMyMoney Options"
+#~ msgstr "KMyMoney parinktys"
+
+#~ msgid "Really delete this institution: "
+#~ msgstr "Ar tikrai ištrinti šią instituciją:"
+
+#~ msgid "Cannot edit personal data"
+#~ msgstr "Asmeninių duomenų redaguoti negalima"
+
+#~ msgid "*.dat|Account templates"
+#~ msgstr "*.dat|Sąskaitų šablonai"
+
+#~ msgid "Select account template"
+#~ msgstr "Pasirinkite sąskaitų šabloną"
+
+#~ msgid "Ready"
+#~ msgstr "Pasiruošęs"
+
+#~ msgid "&Account Details"
+#~ msgstr "&Sąskaitos detalės"
+
+#~ msgid ""
+#~ "*.csv|CSV files\n"
+#~ "*.html|HTML files\n"
+#~ "*.*|All files"
+#~ msgstr ""
+#~ "*.csv|CSV bylos\n"
+#~ "*.html|HTML bylos\n"
+#~ "*.*|Visos bylos"
+
+#~ msgid "To"
+#~ msgstr "Iki"
+
+#~ msgid "Bill Options"
+#~ msgstr "Mokėjimų sąskaitų parinktys"
+
+#~ msgid "New Bill..."
+#~ msgstr "Nauja mokėjimo sąskaita..."
+
+#~ msgid "New Deposit..."
+#~ msgstr "Naujas indėlis..."
+
+#~ msgid "Transfer Options"
+#~ msgstr "Perkėlimo parinktys"
+
+#~ msgid "New Transfer..."
+#~ msgstr "Naujas perkėlimas..."
+
+#~ msgid "Transfer %1 %2"
+#~ msgstr "Perkėlimas %1 %2"
+
+#~ msgid "Edit Transfer Schedule"
+#~ msgstr "Redaguoti perkėlimo tvarkaraštį"
+
+#~ msgid "Edit Deposit Schedule"
+#~ msgstr "Įrašyti indėlio tvarkaraštį"
+
+#~ msgid "Direct Debit"
+#~ msgstr "Tiesioginis debetas"
+
+#~ msgid "Direct Deposit"
+#~ msgstr "Tiesioginis indėlis"
+
+#~ msgid "Manual Deposit"
+#~ msgstr "Rankinis indėlis"
+
+#~ msgid "Write Check"
+#~ msgstr "Išrašyti čekį"
+
+#~ msgid "Withdrawal or Transfer"
+#~ msgstr "Išėmimas arba perkėlimas"
+
+#~ msgid "Bill or Transfer"
+#~ msgstr "Mokėjimo sąskaita arba perkėlimas"
+
+#~ msgid "Edit Scheduled Transfer"
+#~ msgstr "Redaguoti tvarkaraštyje nustatytą perkėlimą"
+
+#~ msgid "Pay to:"
+#~ msgstr "Mokėti kam:"
+
+#~ msgid "From:"
+#~ msgstr "Nuo:"
+
+#~ msgid "To:"
+#~ msgstr "Iki:"
+
+#~ msgid "Amount:"
+#~ msgstr "Suma:"
+
+#~ msgid "Category:"
+#~ msgstr "Kategorija:"
+
+#~ msgid "Memo:"
+#~ msgstr "Memo:"
+
+#~ msgid "<b>Name:</b>"
+#~ msgstr "<b>Pavadinimas:</b>"
+
+#~ msgid "<b>Type:</b>"
+#~ msgstr "<b>Tipas:</b>"
+
+#~ msgid "<b>Payee:</b>"
+#~ msgstr "<b>Korespondentas:</b>"
+
+#~ msgid "<b>Category:</b>"
+#~ msgstr "<b>Kategorija:</b>"
+
+#, fuzzy
+#~ msgid "<b>From (account):</b>"
+#~ msgstr "<b>Suma:</b>"
+
+#~ msgid "<b>Memo:</b>"
+#~ msgstr "<b>Memo:</b>"
+
+#, fuzzy
+#~ msgid "<b>To (account):</b>"
+#~ msgstr "<b>Suma:</b>"
+
+#~ msgid "<b>Date:</b>"
+#~ msgstr "<b>Data:</b>"
+
+#~ msgid "<b>Amount:</b>"
+#~ msgstr "<b>Suma:</b>"
+
+#~ msgid "to"
+#~ msgstr "iki"
+
+#~ msgid "from"
+#~ msgstr "nuo"
+
+#~ msgid "New Account"
+#~ msgstr "Nauja sąskaita"
+
+#~ msgid "Account Type Selection"
+#~ msgstr "Sąskaitos tipo pasirinkimas"
+
+#~ msgid "What is the account number?"
+#~ msgstr "Koks yra sąskaitos numeris?"
+
+#~ msgid "&Price"
+#~ msgstr "&Kaina"
+
+#~ msgid "Payee changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Korespondentas pakeistas. Senasis: „%1“, Naujasis: „%2“"
+
+#~ msgid "Category changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Kategorija pakeista. Sena: „%1“, Nauja: „%2“"
+
+#~ msgid "Memo changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Memo pakeista. Sena: „%1“, Nauja: „%2“"
+
+#~ msgid "Amount changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Suma pakeista. Sena: „%1“, Nauja: „%2“"
+
+#~ msgid "%1 items of the details for the transaction have changed."
+#~ msgstr "%1 įrašas(-i/-ų)) operacijų detalėse pasikeitė."
+
+#~ msgid "The date must lie in the range %1 to %2"
+#~ msgstr "Data turi būti intervale nuo %1 iki %2"
+
+#~ msgid "Use this to accept the data and possibly update the exchange rate"
+#~ msgstr ""
+#~ "Naudokite šį mygtuką norėdami priimti duomenis bei gal būt atnaujinti "
+#~ "keitimo santykį"
+
+#~ msgid "Open online help"
+#~ msgstr "Atverti pagalbą internete"
+
+#~ msgid "<b>From:</b>"
+#~ msgstr "<b>Iš:</b>"
+
+#~ msgid "<b>To:</b>"
+#~ msgstr "<b>Į:</b>"
diff --git a/po/message-stats.sh b/po/message-stats.sh
new file mode 100644
index 0000000..0af63b3
--- /dev/null
+++ b/po/message-stats.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+#
+# This is a wrapper that executes stats.pl for all .po files in the
+# given directory
+#
+# This wrapper is executed by 'make message-stats'.
+# It is a custom target as defined in po/CMakeLists.txt
+#
+# The script requires to find the kmymoney2.pot file in the same
+# directory in order to check if the po file is based on the current
+# pot file.
+#
+#***************************************************************************
+#* 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. *
+#***************************************************************************
+
+# Change to the directory provided on the command line.
+cd $*
+
+echo "<?xml version='1.0' standalone='yes'?>"
+echo "<!DOCTYPE issuelist>"
+echo "<translist>"
+for i in *.po; do
+ perl ./stats.pl ./$i;
+done;
+echo "</translist>"
+echo "<?xml version='1.0'?>"
diff --git a/po/nl.po b/po/nl.po
new file mode 100644
index 0000000..7c7a6d5
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,13682 @@
+# translation of nl_wip.po to
+# translation of nl_2009_05_19_02.po to
+# translation of nl_2009_05_19_01.po to
+# translation of nl_2009-05-14.po to
+# translation of nl.po to
+# translation of kmymoney2.pot to dutch
+# This file is put in the public domain.
+#
+# Bert Keuter <bert.keuter@home.nl>, 2008.
+# KMyMoney <bert.keuter@home.nl>, 2008, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: nl_wip\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-25 19:04+0200\n"
+"PO-Revision-Date: 2009-08-30 16:01+0200\n"
+"Last-Translator: \n"
+"Language-Team: Nederlands <kde-i18n-doc@kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"X-Poedit-Language: Dutch\n"
+"X-Poedit-Country: NETHERLANDS\n"
+"X-Poedit-SourceCharset: utf-8\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: wizards/wizardpages/rc.cpp:1
+msgid ""
+"Select groups of accounts that correspond to the ways that you will use "
+"KMyMoney. Each group you select will cause several accounts and categories "
+"to be created. Select the groups that are relevant to you. You can always "
+"create additional accounts manually later."
+msgstr ""
+"Selecteer een sjabloon in uw taal. Afhankelijk van uw taalkeuze wordt een "
+"set standaard inkomsten en uitgaven rubrieken aangemaakt. U kunt op elk "
+"gewenst moment nieuwe rubrieken toevoegen en/of wijzigingen hierin "
+"aanbrengen."
+
+#: wizards/wizardpages/rc.cpp:2
+msgid ""
+"<p>KMyMoney supports multiple currencies, nevertheless one of them will be "
+"used as your base currency. The base currency is used as default for new "
+"accounts and reports. Please select the base currency from the following "
+"list."
+msgstr ""
+"<p>KMyMoney ondersteunt het gebruik van meerdere munteenheden. Er kan echter "
+"slechts één gebruikt worden als standaard munteenheid. Deze wordt gebruikt "
+"in alle uw rekeningen en rapporten. Selecteer a.u.b. uw standaard "
+"munteenheid uit onderstaande lijst."
+
+#: dialogs/kequitypriceupdatedlg.cpp:71 dialogs/rc.cpp:399 dialogs/rc.cpp:485
+#: dialogs/rc.cpp:724 dialogs/settings/rc.cpp:108 reports/listtable.cpp:226
+#: views/kinvestmentview.cpp:71 views/kpayeesview.cpp:351 views/rc.cpp:13
+#: widgets/rc.cpp:5 widgets/rc.cpp:34
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1599
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1629
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1673
+#: wizards/wizardpages/rc.cpp:3
+msgid "Name"
+msgstr "Naam"
+
+#: wizards/wizardpages/rc.cpp:4
+msgid "ISO Code"
+msgstr "ISO code"
+
+#: dialogs/kequitypriceupdatedlg.cpp:69 dialogs/kequitypriceupdatedlg.cpp:70
+#: dialogs/rc.cpp:71 dialogs/rc.cpp:725 dialogs/settings/rc.cpp:112
+#: views/kinvestmentview.cpp:72 widgets/rc.cpp:37 wizards/wizardpages/rc.cpp:5
+msgid "Symbol"
+msgstr "Symbool"
+
+#: wizards/wizardpages/rc.cpp:6
+msgid ""
+"<p>Use the fields below to enter some information about yourself.</p>\n"
+"\n"
+"<p>All information is optional and only used to personalize your KMyMoney "
+"file.</p>"
+msgstr ""
+"<p>In dit venster heeft u de mogelijkheid informatie over uzelf invoeren.</"
+"p>\n"
+"\n"
+"<p>Alle hier gevraagde informatie is optioneel en wordt uitsluitend gebruikt "
+"voor het persoonlijk maken van uw KMyMoney bestand.</p>"
+
+#: dialogs/rc.cpp:425 wizards/newuserwizard/rc.cpp:27
+#: wizards/wizardpages/rc.cpp:7
+msgid "Town:"
+msgstr "Woonplaats:"
+
+#: dialogs/rc.cpp:420 wizards/newuserwizard/rc.cpp:22
+#: wizards/wizardpages/rc.cpp:8
+msgid "County/State:"
+msgstr "Provincie/Staat:"
+
+#: dialogs/rc.cpp:391 dialogs/rc.cpp:421 wizards/newuserwizard/rc.cpp:23
+#: wizards/wizardpages/rc.cpp:9
+msgid "Street:"
+msgstr "Straat:"
+
+#: dialogs/rc.cpp:422 wizards/newuserwizard/rc.cpp:24
+#: wizards/wizardpages/rc.cpp:10
+msgid "Email:"
+msgstr "E-mail:"
+
+#: dialogs/rc.cpp:424 wizards/newuserwizard/rc.cpp:26
+#: wizards/wizardpages/rc.cpp:11
+msgid "Telephone:"
+msgstr "Telefoon:"
+
+#: dialogs/rc.cpp:423 wizards/newuserwizard/rc.cpp:25
+#: wizards/wizardpages/rc.cpp:12
+msgid "Your name:"
+msgstr "Uw naam:"
+
+#: dialogs/rc.cpp:427 wizards/newuserwizard/rc.cpp:29
+#: wizards/wizardpages/rc.cpp:13
+msgid "Load from Addressbook"
+msgstr "Ophalen uit Adresboek"
+
+#: dialogs/rc.cpp:392 dialogs/rc.cpp:426 views/rc.cpp:68
+#: wizards/wizardpages/rc.cpp:14
+msgid "Postal Code:"
+msgstr "Postcode:"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:82
+msgid "KMyMoney New Account Setup"
+msgstr "KMyMoney Nieuwe Rekening set-up"
+
+#: dialogs/rc.cpp:360 dialogs/rc.cpp:361 reports/listtable.cpp:230
+#: wizards/newaccountwizard/knewaccountwizard.cpp:83
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1616
+#: wizards/newaccountwizard/rc.cpp:61
+msgid "Institution"
+msgstr "Financiële instelling"
+
+#: dialogs/investactivities.cpp:198 dialogs/investactivities.cpp:286
+#: dialogs/investactivities.cpp:367 dialogs/kfindtransactiondlg.cpp:181
+#: dialogs/rc.cpp:139 dialogs/rc.cpp:192 dialogs/rc.cpp:207
+#: dialogs/transactioneditor.cpp:734 reports/listtable.cpp:201
+#: reports/pivottable.cpp:1336 reports/pivottable.cpp:1586
+#: views/kforecastview.cpp:393 views/kgloballedgerview.cpp:175
+#: views/khomeview.cpp:418 views/khomeview.cpp:491 views/khomeview.cpp:525
+#: views/khomeview.cpp:764 views/khomeview.cpp:967 views/khomeview.cpp:1437
+#: views/kscheduledview.cpp:71 views/rc.cpp:17 views/rc.cpp:44
+#: widgets/kmymoneyaccounttreebase.cpp:58
+#: widgets/kmymoneyaccounttreeforecast.cpp:41 widgets/rc.cpp:109
+#: widgets/register.cpp:566 widgets/transaction.cpp:978
+#: widgets/transaction.cpp:1535
+#: wizards/newaccountwizard/knewaccountwizard.cpp:84
+msgid "Account"
+msgstr "Rekening"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:85
+msgid "Broker"
+msgstr "Effectenmakelaar"
+
+#: dialogs/kfindtransactiondlg.cpp:225 dialogs/rc.cpp:70 dialogs/rc.cpp:104
+#: dialogs/rc.cpp:159 dialogs/rc.cpp:223 dialogs/rc.cpp:246 dialogs/rc.cpp:751
+#: dialogs/settings/rc.cpp:109 widgets/rc.cpp:35 widgets/register.cpp:568
+#: wizards/newaccountwizard/knewaccountwizard.cpp:86
+msgid "Details"
+msgstr "Details"
+
+#: dialogs/knewloanwizard.cpp:636 dialogs/rc.cpp:231 dialogs/rc.cpp:608
+#: kmymoneyutils.cpp:191 views/khomeview.cpp:399
+#: wizards/newaccountwizard/knewaccountwizard.cpp:87
+#: wizards/newaccountwizard/knewaccountwizard.cpp:880
+msgid "Payments"
+msgstr "Betalingen"
+
+#: dialogs/investactivities.cpp:195 dialogs/investactivities.cpp:283
+#: dialogs/investactivities.cpp:422 dialogs/investtransactioneditor.cpp:217
+#: reports/listtable.cpp:221 widgets/transaction.cpp:1565
+#: wizards/newaccountwizard/knewaccountwizard.cpp:88
+msgid "Fees"
+msgstr "Kosten"
+
+#: dialogs/rc.cpp:624 views/khomeview.cpp:415 views/khomeview.cpp:488
+#: views/khomeview.cpp:522 wizards/newaccountwizard/knewaccountwizard.cpp:89
+msgid "Schedule"
+msgstr "Schema"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:90
+msgid "Payout"
+msgstr "Uitbetaling"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:91
+msgid "Parent Account"
+msgstr "Moederrekening"
+
+#: dialogs/rc.cpp:719 wizards/newaccountwizard/knewaccountwizard.cpp:92
+#: wizards/newuserwizard/knewuserwizard.cpp:86
+msgid "Finish"
+msgstr "Voltooien"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:248
+msgid "Credit card payment"
+msgstr "Creditcard betaling"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:264
+#, c-format
+msgid "Loan payment for %1"
+msgstr "Aflossing van %1"
+
+#: mymoney/mymoneyscheduled.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:279
+msgid "Loan payment"
+msgstr "Aflossing"
+
+#: dialogs/rc.cpp:134 wizards/newaccountwizard/knewaccountwizard.cpp:293
+msgid "Amortization"
+msgstr "Aflossing"
+
+#: dialogs/investactivities.cpp:196 dialogs/investactivities.cpp:284
+#: dialogs/investactivities.cpp:366 dialogs/investactivities.cpp:423
+#: dialogs/investtransactioneditor.cpp:227 dialogs/rc.cpp:135
+#: dialogs/rc.cpp:152 dialogs/rc.cpp:544 reports/listtable.cpp:222
+#: widgets/transaction.cpp:1597
+#: wizards/newaccountwizard/knewaccountwizard.cpp:302
+msgid "Interest"
+msgstr "Dividend"
+
+#: dialogs/kcurrencycalculator.cpp:282
+#: wizards/newaccountwizard/knewaccountwizard.cpp:351
+#: wizards/newaccountwizard/knewaccountwizard.cpp:356
+msgid "User"
+msgstr "Gebruiker"
+
+#: kmymoneyutils.cpp:64 mymoney/mymoneyaccount.cpp:711
+#: reports/querytabletest.cpp:422
+#: wizards/newaccountwizard/knewaccountwizard.cpp:451
+msgid "Checking"
+msgstr "Betaal"
+
+#: kmymoneyutils.cpp:66 mymoney/mymoneyaccount.cpp:714
+#: wizards/newaccountwizard/knewaccountwizard.cpp:452
+msgid "Savings"
+msgstr "Spaargeld"
+
+#: kmymoneyutils.cpp:68 mymoney/mymoneyaccount.cpp:717
+#: reports/querytabletest.cpp:423
+#: wizards/newaccountwizard/knewaccountwizard.cpp:453
+msgid "Credit Card"
+msgstr "Creditcard"
+
+#: kmymoneyutils.cpp:70 mymoney/mymoneyaccount.cpp:720
+#: wizards/newaccountwizard/knewaccountwizard.cpp:454
+msgid "Cash"
+msgstr "Contant"
+
+#: kmymoneyutils.cpp:72 mymoney/mymoneyaccount.cpp:723
+#: wizards/newaccountwizard/knewaccountwizard.cpp:455
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+msgid "Loan"
+msgstr "Lening"
+
+#: kmymoneyutils.cpp:76 mymoney/mymoneyaccount.cpp:729
+#: wizards/newaccountwizard/knewaccountwizard.cpp:456
+msgid "Investment"
+msgstr "Belegging"
+
+#: converter/mymoneytemplate.cpp:178 converter/mymoneytemplate.cpp:179
+#: dialogs/knewaccountdlg.cpp:1014 kmymoneyutils.cpp:80
+#: mymoney/mymoneyaccount.cpp:735 views/kaccountsview.cpp:352
+#: views/kmymoneyview.cpp:765 widgets/kmymoneyaccountselector.cpp:177
+#: widgets/kmymoneyaccountselector.cpp:356
+#: wizards/newaccountwizard/knewaccountwizard.cpp:457
+msgid "Asset"
+msgstr "Vermogen"
+
+#: converter/mymoneytemplate.cpp:182 converter/mymoneytemplate.cpp:183
+#: dialogs/knewaccountdlg.cpp:1016 kmymoneyutils.cpp:82
+#: mymoney/mymoneyaccount.cpp:738 views/kaccountsview.cpp:356
+#: views/kmymoneyview.cpp:766 widgets/kmymoneyaccountselector.cpp:178
+#: widgets/kmymoneyaccountselector.cpp:363
+#: wizards/newaccountwizard/knewaccountwizard.cpp:458
+msgid "Liability"
+msgstr "Schulden"
+
+#: converter/mymoneytemplate.cpp:194 converter/mymoneytemplate.cpp:195
+#: kmymoneyutils.cpp:94 mymoney/mymoneyaccount.cpp:756
+#: views/kaccountsview.cpp:369 views/kmymoneyview.cpp:769
+#: widgets/kmymoneyaccountselector.cpp:181
+#: widgets/kmymoneyaccountselector.cpp:390
+#: wizards/newaccountwizard/knewaccountwizard.cpp:460
+msgid "Equity"
+msgstr "Eigen vermogen"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid ""
+"Please make sure to enter the correct conversion for the selected opening "
+"date. If you requested an online quote it might be provided for a different "
+"date."
+msgstr ""
+"Voer a.u.b. de correcte wissel-/aandelenkoers in voor deze datum. Bij een "
+"online opvraging kan het voorkomen dat de koers voor een andere datum "
+"bedoeld is."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid "Check date"
+msgstr "Controle datum"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:562
+msgid "1 %1 equals %2"
+msgstr "1 %1 is gelijk aan %2"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:577
+msgid "Conversion rate is not positive"
+msgstr "Wisselkoers is negatief"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:583
+msgid "No account name supplied"
+msgstr "Geen rekening naam ingevuld"
+
+#: dialogs/keditscheduledlg.cpp:114 mymoney/mymoneyscheduled.cpp:1026
+#: wizards/newaccountwizard/knewaccountwizard.cpp:680
+msgid "Write check"
+msgstr "Cheque"
+
+#: dialogs/keditscheduledlg.cpp:111 mymoney/mymoneyscheduled.cpp:1014
+#: wizards/newaccountwizard/knewaccountwizard.cpp:682
+msgid "Direct debit"
+msgstr "Incasso"
+
+#: dialogs/keditscheduledlg.cpp:113 mymoney/mymoneyscheduled.cpp:1032
+#: wizards/newaccountwizard/knewaccountwizard.cpp:683
+msgid "Bank transfer"
+msgstr "Overschrijving"
+
+#: dialogs/keditscheduledlg.cpp:112 mymoney/mymoneyscheduled.cpp:1029
+#: wizards/newaccountwizard/knewaccountwizard.cpp:685
+msgid "Standing order"
+msgstr "Automatische overboeking"
+
+#: dialogs/keditscheduledlg.cpp:110 mymoney/mymoneyscheduled.cpp:1020
+#: wizards/newaccountwizard/knewaccountwizard.cpp:686
+msgid "Manual deposit"
+msgstr "Contant"
+
+#: dialogs/keditscheduledlg.cpp:109 mymoney/mymoneyscheduled.cpp:1017
+#: wizards/newaccountwizard/knewaccountwizard.cpp:687
+msgid "Direct deposit"
+msgstr "Acceptgiro"
+
+#: dialogs/keditscheduledlg.cpp:115 mymoney/mymoneyscheduled.cpp:1023
+#: wizards/newaccountwizard/knewaccountwizard.cpp:688
+msgid "Other"
+msgstr "Andere betaalwijze"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:697
+msgid "CreditCard %1 monthly payment"
+msgstr "Maandelijkse creditcard betaling van %1"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:703
+msgid "Finish entry and create account"
+msgstr "Creëer rekening"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:705
+msgid "Finish entry and create account and schedule"
+msgstr "Creëer rekening en periodieke transactie"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:708
+msgid "Next due date is prior to opening date"
+msgstr "Eerstvolgende vervaldatum ligt voor de openingssdatum"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:712
+msgid "No account selected"
+msgstr "Geen rekening geselecteerd"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:716
+msgid "No amount for payment selected"
+msgstr "Geen bedrag ingevuld voor deze betaling"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:720
+msgid "No payee for payment selected"
+msgstr "Geen relatie ingevuld voor deze betaling"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:724
+msgid "No name assigned for schedule"
+msgstr "Geen naam voor ingevuld voor deze periodieke transactie"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:805
+msgid "No payee supplied"
+msgstr "Geen relatie ingevuld"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:819
+msgid "No opening balance supplied"
+msgstr "Geen beginsaldo ingevuld"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:826
+msgid "An interest change can only happen after the first payment"
+msgstr ""
+"Een wijziging van de rente kan uitsluitend plaatsvinden na de eerste "
+"betaling."
+
+#: dialogs/knewloanwizard.cpp:615 dialogs/knewloanwizard.cpp:634
+#: wizards/newaccountwizard/knewaccountwizard.cpp:884
+#: wizards/newaccountwizard/rc.cpp:55
+msgid "Months"
+msgstr "Maanden"
+
+#: dialogs/knewloanwizard.cpp:616 dialogs/knewloanwizard.cpp:635
+#: wizards/newaccountwizard/knewaccountwizard.cpp:885
+#: wizards/newaccountwizard/knewaccountwizard.cpp:889
+#: wizards/newaccountwizard/rc.cpp:56
+msgid "Years"
+msgstr "Jaren"
+
+#: dialogs/knewloanwizard.cpp:711
+#: wizards/newaccountwizard/knewaccountwizard.cpp:961
+#, c-format
+msgid "KMyMoney has calculated the amount of the loan as %1."
+msgstr "KMyMoney heeft de totale lening berekend op %1."
+
+#: dialogs/knewloanwizard.cpp:718
+#: wizards/newaccountwizard/knewaccountwizard.cpp:968
+msgid "KMyMoney has calculated the interest rate to %1%."
+msgstr "KMyMoney heeft een rentepercentage berekend van %1%."
+
+#: dialogs/knewloanwizard.cpp:731
+#: wizards/newaccountwizard/knewaccountwizard.cpp:981
+msgid ""
+"KMyMoney has calculated a periodic payment of %1 to cover principal and "
+"interest."
+msgstr "KMyMoney heeft een aflossing en rente berekend van %1."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:993
+#, c-format
+msgid ""
+"The number of payments has been decremented and the balloon payment has been "
+"modified to %1."
+msgstr ""
+"Het aantal betalingen is verminderd en de laatste aflossing is gewijzigd "
+"naar %1."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1001
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1021
+#, c-format
+msgid "The balloon payment has been modified to %1."
+msgstr "De laatste aflossing is gewijzigd naar %1."
+
+#: dialogs/knewloanwizard.cpp:763
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1013
+msgid "KMyMoney has calculated the term of your loan as %1. "
+msgstr "KMyMoney heeft een looptijd voor uw lening berekend van %1. "
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1052
+msgid "KMyMoney has calculated a balloon payment of %1 for this loan."
+msgstr "KMyMoney heeft een laatste aflossing van %1 berekend voor deze lening."
+
+#: dialogs/knewloanwizard.cpp:809
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1059
+msgid "KMyMoney has successfully verified your loan information."
+msgstr ""
+"KMyMoney heeft met succes de informatie aangaande uw lening geverifieerd."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1067
+msgid ""
+"You have entered mis-matching information. Please modify your figures or "
+"leave one value empty to let KMyMoney calculate it for you"
+msgstr ""
+"U heeft incorrecte informatie ingevoerd. Pas de ingevoerde waarden aan, of "
+"laat één leeg om die door het KMyMoney te laten berekenen."
+
+#: dialogs/knewloanwizard.cpp:504 dialogs/knewloanwizard.cpp:513
+#: dialogs/knewloanwizard.cpp:522 dialogs/knewloanwizard.cpp:532
+#: dialogs/knewloanwizard.cpp:820
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1070
+msgid "Calculation error"
+msgstr "Fout in de berekening"
+
+#: dialogs/knewloanwizard.cpp:824
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1074
+msgid ""
+"\n"
+"\n"
+"Accept this or modify the loan information and recalculate."
+msgstr ""
+"\n"
+"\n"
+"Accepteer deze uitkomst of wijzig de informatie en voer een herberekening "
+"uit."
+
+#: dialogs/knewloanwizard.cpp:826
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1076
+msgid "Calculation successful"
+msgstr "Berekening geslaagd"
+
+#: dialogs/knewloanwizard.cpp:846
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1129
+#, c-format
+msgid ""
+"_n: one month\n"
+"%n months"
+msgstr ""
+"_n: one month\n"
+"%n maanden"
+
+#: dialogs/knewloanwizard.cpp:850
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1133
+#, c-format
+msgid ""
+"_n: one year\n"
+"%n years"
+msgstr ""
+"_n: one year\n"
+"%n jaren"
+
+#: dialogs/knewloanwizard.cpp:854
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1137
+#, c-format
+msgid ""
+"_n: one payment\n"
+"%n payments"
+msgstr ""
+"_n: one payment\n"
+"%n betalingen"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1190
+msgid "Press Calculate to verify the values"
+msgstr "Druk op Berekenen om de waarden te controleren"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1194
+msgid "Not all details supplied"
+msgstr "Niet alle informatie is ingevoerd"
+
+#: dialogs/kaccountselectdlg.cpp:70 dialogs/knewloanwizard.cpp:122
+#: dialogs/knewloanwizard.cpp:136
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1381
+msgid "&Create..."
+msgstr "&Creëer..."
+
+#: dialogs/knewloanwizard.cpp:138
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1383
+msgid "Create a new asset account"
+msgstr "Creëer een nieuwe vermogensrekening"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1384
+msgid ""
+"If the asset account does not yet exist, press this button to create it."
+msgstr ""
+"Als de vermogensrekening nog niet bestaat, druk dan op deze knop om de "
+"rekening aan te maken."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1596
+msgid "Account information"
+msgstr "Rekening informatie"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1601
+#: wizards/newaccountwizard/rc.cpp:59
+msgid "Subaccount of"
+msgstr "Subrekening van"
+
+#: dialogs/rc.cpp:225 dialogs/rc.cpp:326 dialogs/rc.cpp:371 dialogs/rc.cpp:723
+#: plugins/ofximport/dialogs/rc.cpp:23 reports/listtable.cpp:225
+#: widgets/kmymoneyaccounttreebase.cpp:113 widgets/register.cpp:61
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1606
+msgid "Type"
+msgstr "Type"
+
+#: dialogs/kcurrencyeditdlg.cpp:62 dialogs/rc.cpp:56 dialogs/rc.cpp:59
+#: dialogs/rc.cpp:75 dialogs/rc.cpp:727 dialogs/rc.cpp:792
+#: kmymoneyutils.cpp:84 kmymoneyutils.cpp:111 mymoney/mymoneyaccount.cpp:741
+#: mymoney/mymoneysecurity.cpp:169 reports/listtable.cpp:233
+#: widgets/kmymoneypriceview.cpp:127
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1607
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1630
+#: wizards/newaccountwizard/rc.cpp:6 wizards/newaccountwizard/rc.cpp:24
+msgid "Currency"
+msgstr "Munteenheid"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1608
+#: wizards/newaccountwizard/rc.cpp:7 wizards/newuserwizard/rc.cpp:9
+msgid "Opening date"
+msgstr "Openingsdatum"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1610
+#: wizards/newaccountwizard/rc.cpp:9
+msgid "Conversion rate"
+msgstr "(Wissel-)koers"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1613
+#: wizards/newaccountwizard/rc.cpp:15 wizards/newuserwizard/rc.cpp:13
+msgid "Opening balance"
+msgstr "Beginsaldo"
+
+#: dialogs/keditscheduledlg.cpp:507 dialogs/transactioneditor.cpp:784
+#: dialogs/transactioneditor.cpp:848 plugins/ofximport/dialogs/rc.cpp:22
+#: widgets/rc.cpp:111 widgets/register.cpp:59 widgets/transaction.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1618
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1632
+msgid "Number"
+msgstr "Nummer"
+
+#: dialogs/rc.cpp:365 wizards/newaccountwizard/knewaccountwizard.cpp:1621
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1634
+#: wizards/newaccountwizard/rc.cpp:26 wizards/newaccountwizard/rc.cpp:66
+msgid "IBAN"
+msgstr "IBAN"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1627
+msgid "Brokerage Account"
+msgstr "Kasrekening"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1640
+msgid "Loan information"
+msgstr "Informatie over de lening"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1643
+msgid "Amount borrowed"
+msgstr "Geleend bedrag"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1645
+msgid "Amount lent"
+msgstr "Uitgeleend bedrag"
+
+#: dialogs/rc.cpp:515 dialogs/rc.cpp:546
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1647
+#: wizards/newaccountwizard/rc.cpp:75
+msgid "Interest rate"
+msgstr "Rentepercentage"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1648
+msgid "Interest rate is"
+msgstr "Rentepercentage is"
+
+#: dialogs/rc.cpp:509 dialogs/rc.cpp:572
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1649
+msgid "Principal and interest"
+msgstr "Rente en aflossing"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1650
+#: wizards/newaccountwizard/rc.cpp:90
+msgid "Additional fees"
+msgstr "Additionele kosten"
+
+#: dialogs/rc.cpp:525 wizards/newaccountwizard/knewaccountwizard.cpp:1651
+#: wizards/newaccountwizard/rc.cpp:44
+msgid "Payment frequency"
+msgstr "Frequentie van betalingen"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1652
+#: wizards/newaccountwizard/rc.cpp:105
+msgid "Payment account"
+msgstr "Betaalrekening"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1655
+msgid "Payout information"
+msgstr "Informatie over de betaling"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1658
+msgid "Refinance"
+msgstr "Herfinancieren"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1661
+msgid "Transfer amount to"
+msgstr "Boek bedrag over naar"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1663
+msgid "Transfer amount from"
+msgstr "Boek bedrag over van"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1665
+msgid "Payment date"
+msgstr "Betaaldatum"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1671
+msgid "Schedule information"
+msgstr "Informatie over periodieke transactie"
+
+#: reports/listtable.cpp:228
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1684
+msgid "Occurence"
+msgstr "Voorval"
+
+#: mymoney/mymoneyscheduled.cpp:891 mymoney/mymoneyscheduled.cpp:947
+#: mymoney/mymoneyscheduled.cpp:1283 mymoney/mymoneyscheduletest.cpp:1343
+#: widgets/rc.cpp:19 widgets/rc.cpp:74
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+msgid "Monthly"
+msgstr "Maandelijks"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1677
+msgid "Paid from"
+msgstr "Betaald van"
+
+#: widgets/kmymoneycombo.cpp:473 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1678
+msgid "Pay to"
+msgstr "Betalen aan"
+
+#: dialogs/investactivities.cpp:197 dialogs/investactivities.cpp:285
+#: dialogs/investactivities.cpp:365 dialogs/kfindtransactiondlg.cpp:197
+#: dialogs/kmymoneysplittable.cpp:80 dialogs/rc.cpp:51 dialogs/rc.cpp:212
+#: reports/listtable.cpp:197 views/khomeview.cpp:421 views/khomeview.cpp:494
+#: views/khomeview.cpp:528 views/kscheduledview.cpp:73 views/rc.cpp:63
+#: widgets/register.cpp:58 widgets/transaction.cpp:1055
+#: widgets/transaction.cpp:1578 widgets/transaction.cpp:1610
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1679
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1685
+msgid "Amount"
+msgstr "Bedrag"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1680
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1686
+msgid "First payment due"
+msgstr "Eerste betaling gepland op"
+
+#: dialogs/rc.cpp:102 wizards/newaccountwizard/knewaccountwizard.cpp:1681
+#: wizards/newaccountwizard/rc.cpp:115
+msgid "Payment method"
+msgstr "Wijze van betalen"
+
+#: wizards/newaccountwizard/rc.cpp:1
+msgid ""
+"This page summarizes the data you have entered. Press <b>Finish</b> to "
+"create the account, schedules, etc. or use <b>Back</b> to modify your "
+"entries."
+msgstr ""
+"Deze pagina toont een samenvatting van de door u ingevoerde gegevens. Druk "
+"op <b>Voltooien</b> om de rekening, periodieke transacties etc. aan te "
+"maken, of gebruik <b>Terug</b> om uw gegevens te corrigeren."
+
+#: wizards/newaccountwizard/rc.cpp:2
+msgid "Item"
+msgstr "Item"
+
+#: dialogs/rc.cpp:110 dialogs/rc.cpp:165 dialogs/rc.cpp:252 dialogs/rc.cpp:757
+#: dialogs/rc.cpp:818 views/kinvestmentview.cpp:74 widgets/register.cpp:574
+#: wizards/newaccountwizard/rc.cpp:3
+msgid "Value"
+msgstr "Bedrag"
+
+#: wizards/newaccountwizard/rc.cpp:4
+msgid ""
+"Enter the name of the account under which it is known within KMyMoney.\n"
+"Select the type for the new account. Use the <b>What's this?</b> feature to "
+"see more details about the various account types.\n"
+"Enter the date the account was opened and its currency."
+msgstr ""
+"Voer de naam in van de rekening zoals deze in KMyMoney bekend is.\n"
+"Selecteer het juiste type voor deze rekening. Gebruik de <b>Wat is dit?</b> "
+"optie om meer details te zien aangaande de verschillende rekening types.\n"
+"Voer de datum in waarop deze rekening is aangemaakt, en de juiste "
+"munteenheid."
+
+#: wizards/newaccountwizard/rc.cpp:5
+msgid "Select the currency in which this account is denominated."
+msgstr "Selecteer de munteenheid welke wordt gebruikt voor deze rekening."
+
+#: wizards/newaccountwizard/rc.cpp:8
+msgid ""
+"The opening balance is the balance of the account when you start using it "
+"with KMyMoney. For new accounts this is usually 0 but for existing accounts "
+"this may well differ. Please consult the account statements to figure out "
+"this value. The opening balance is to be provided in the currency of the "
+"account as selected with the currency button."
+msgstr ""
+"Het beginsaldo is het bedrag op de rekening op het moment dat u start met "
+"het bijhouden van uw financiën in KMyMoney. Voor nieuwe rekeningen is dit "
+"beginsaldo meestal 0,00. Uiteraard kan dit ook een ander bedrag zijn. Voer "
+"hier het juist bedrag in."
+
+#: wizards/newaccountwizard/rc.cpp:10
+msgid ""
+"The opening date would be the date of the last statement. In case you want "
+"to keep track of transactions prior to this date, enter the ending balance "
+"and statement date of a prior statement and add all following transactions "
+"into KMyMoney.\n"
+"<br>\n"
+"<i>Note</i>: If you do not know the exact amount of the opening balance, "
+"enter an estimate. You can change this value later before you reconcile this "
+"account for the first time."
+msgstr ""
+"De openingssdatum voor deze rekening is de datum op uw laatst ontvangen "
+"afschrift. In het geval u transacties vóór deze datum wilt gebruiken voer "
+"dan een eindsaldo en datum van een eerder afschrift in en voeg ook alle "
+"voorgaande transacties toe.\n"
+"<br>\n"
+"<i>Opmerking</i>: Als u het exacte beginsaldo niet weet, voer dan een "
+"schatting in. U kunt deze waarde later alsnog wijzigen voordat u de rekening "
+"sluitend maakt."
+
+#: dialogs/rc.cpp:52 dialogs/rc.cpp:54 dialogs/rc.cpp:57 dialogs/rc.cpp:60
+#: dialogs/rc.cpp:748 dialogs/rc.cpp:749 dialogs/rc.cpp:768 widgets/rc.cpp:6
+#: widgets/rc.cpp:7 widgets/rc.cpp:8 widgets/rc.cpp:9 widgets/rc.cpp:10
+#: widgets/rc.cpp:11 widgets/rc.cpp:12 widgets/rc.cpp:13 widgets/rc.cpp:14
+#: widgets/rc.cpp:15 widgets/rc.cpp:16 widgets/rc.cpp:17
+#: wizards/newaccountwizard/rc.cpp:11 wizards/newaccountwizard/rc.cpp:88
+#: wizards/newaccountwizard/rc.cpp:91 wizards/newaccountwizard/rc.cpp:93
+#: wizards/newuserwizard/rc.cpp:14
+msgid "xxx"
+msgstr "xxx"
+
+#: wizards/newaccountwizard/rc.cpp:12
+msgid "Account type"
+msgstr "Rekening type"
+
+#: wizards/newaccountwizard/rc.cpp:13
+msgid ""
+"For foreign currencies an initial conversion rate needs to be provided. This "
+"should be the price of the foreign currency in the base currency on the "
+"opening date of the account."
+msgstr ""
+"Voor vreemde munteenheden moet een wisselkoers worden opgegeven. Dit moet de "
+"waarde zijn van de vreemde munteenheid, omgerekend in de eigen munteenheid, "
+"op het moment dat u de rekening opende."
+
+#: wizards/newaccountwizard/rc.cpp:14
+msgid "Account name"
+msgstr "Rekening naam"
+
+#: wizards/newaccountwizard/rc.cpp:16
+msgid ""
+"<p><b>Checking</b>\n"
+"Use the checking account type to manage activities on your checking account "
+"e.g. payments, checks and cash card purchases.</p>\n"
+"\n"
+"<p><b>Savings</b>\n"
+"Use the savings account type to manage activities on your savings account.</"
+"p>\n"
+"\n"
+"<p><b>Credit Card</b>\n"
+"Use the credit card account type to manage activities on your credit card.</"
+"p>\n"
+"\n"
+"<p><b>Cash</b>\n"
+"\n"
+"Use the cash account type to manage activities in your wallet.</p>\n"
+"\n"
+"<p><b>Loan</b>\n"
+"Use the loan account type to manage amortization loans (e.g. mortgages, car "
+"loan, money you lend, private loans etc.).</p>\n"
+"\n"
+"<p><b>Investment</b>\n"
+"Use the investment account to manage your stock, mutual fund and other "
+"investments.</p>\n"
+"\n"
+"<p><b>Asset</b>\n"
+"Use the asset account type to manage assets (e.g. your house, car or art "
+"collection).</p>\n"
+"\n"
+"<p><b>Liability</b>\n"
+"Use the liability account type to manage any type of liability except "
+"amortization loans. Use it for taxes you owe or money you borrowed from "
+"friends. For amortization loans like mortgages you should create a loan "
+"account.</p>"
+msgstr ""
+"<p><b>Betaal</b>\n"
+"Gebruik dit type rekening om uw inkomsten en uitgaven te beheren, zoals "
+"kasopnames en (pin)-betalingen.</p>\n"
+"\n"
+"<p><b>Sparen</b>\n"
+"Gebruik dit type rekening om uw spaargelden te beheren.</p>."
+"\\n<p><b>Creditcard</b>\n"
+"Gebruik dit type rekening om al uw betalingen met een creditcard te beheren."
+"</p>\n"
+"\n"
+"<p><b>Kas</b>\n"
+"\n"
+"Gebruik dit type rekening om al uw contanten (geld in kas) te beheren.</p>\n"
+"\n"
+"<p><b>Lening</b>\n"
+"Gebruik dit type rekening om al uw leningen te beheren.</p>\n"
+"\n"
+"<p><b>Belegging</b>\n"
+"Gebruik dit type rekening om al uw beleggingen te beheren.</p>\n"
+"\n"
+"<p><b>Bezitting</b>\n"
+"Gebruik dit type rekening om uw bezittingen/vermogen te beheren.(bv. kunst "
+"of andere kostbaarheden).</p>\n"
+"\n"
+"<p><b>Schuld</b>\n"
+"Gebruik dit type rekening voor het beheren van al uw schulden anders dan "
+"leningen of hypotheken. Bv. leningen van vrienden of belastingschulden. Voor "
+"alle andere schulden moet u een lening aanmaken.</p>"
+
+#: wizards/newaccountwizard/rc.cpp:17
+msgid "Preferred account"
+msgstr "Voorkeursrekening"
+
+#: wizards/newaccountwizard/rc.cpp:18
+msgid ""
+"Mark this checkbox if the account should be maintained as preferred account"
+msgstr "Vink dit aan als deze rekening uw voorkeursrekening moet blijven."
+
+#: wizards/newaccountwizard/rc.cpp:19
+msgid ""
+"Selecting the <b>Preferred Account</b> checkbox will allow preferred access "
+"in some dialogs and views of KMyMoney."
+msgstr ""
+"Het selecteren van het <b>Voorkeursrekening</b> keuzehokje zorgt ervoor dat "
+"in sommige dialogen en overzichten deze rekening als standaard wordt "
+"gebruikt."
+
+#: wizards/newaccountwizard/rc.cpp:20
+msgid "Enter a name under which this account is known within KMyMoney."
+msgstr "Voer een naam in waaronder deze rekening bekend is in KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:21
+msgid "Online quote"
+msgstr "Online koers"
+
+#: wizards/newaccountwizard/rc.cpp:22
+msgid ""
+"Does this investment account have a brokerage account?<p>\n"
+"\n"
+"<b>Check</b> the mark if this investment account has an associated account "
+"for money that is not invested.<br>\n"
+"\n"
+"<b>Uncheck</b> it if you don't use this account for active stock brokerage. "
+"You should also uncheck it if this account is not maintained by a bank or "
+"broker."
+msgstr ""
+"Heeft deze beleggingsrekening een gekoppelde kasrekening?<p>\n"
+"\n"
+"<b>Selecteer</b> deze markering als deze beleggingsrekening een gekoppelde "
+"kasrekening heeft voor (nog) niet geïnvesteerd geld.<br>\n"
+"\n"
+"<b>Deselecteer</b> als u deze beleggingsrekening geen gekoppelde kasrekening "
+"heeft of niet wordt beheerd door een finaniële instelling of "
+"effectenmakelaar."
+
+#: wizards/newaccountwizard/rc.cpp:23
+msgid "Create brokerage account"
+msgstr "Creëer kasrekening"
+
+#: wizards/newaccountwizard/rc.cpp:25 wizards/newaccountwizard/rc.cpp:64
+msgid "Account number"
+msgstr "Rekeningnummer"
+
+#: wizards/newaccountwizard/rc.cpp:27
+msgid ""
+"Please select the required options. Please use the <b>What's this?</b> "
+"feature to see more information about the items."
+msgstr ""
+"Selecteer de verplichte opties. Gebruik de <b>Wat is dit?</b> functie om "
+"meer informatie te krijgen over deze items."
+
+#: wizards/newaccountwizard/rc.cpp:28
+msgid "What is the type of the loan?"
+msgstr "Wat is het type lening?"
+
+#: dialogs/rc.cpp:481 wizards/newaccountwizard/rc.cpp:29
+msgid "I am borrowing money"
+msgstr "Ik leen geld"
+
+#: dialogs/rc.cpp:482 wizards/newaccountwizard/rc.cpp:30
+msgid "I am lending money"
+msgstr "Ik leen geld uit"
+
+#: wizards/newaccountwizard/rc.cpp:31
+msgid "Who is the payee/payer of the loan?"
+msgstr "Wie is de schuldenaar van de lening?"
+
+#: wizards/newaccountwizard/rc.cpp:32
+msgid ""
+"Enter the name of the person or bank you owe money or who owes you money.\n"
+"\n"
+"If the name does not exist within KMyMoney's database, you are asked if you "
+"want to create it."
+msgstr ""
+"Voer de naam in van de persoon of de bank aan wie u geld verschuldigd bent "
+"of van wie u nog geld krijgt.\n"
+"\n"
+"Als deze naam nog niet bestaat in de KMyMoney database, wordt u gevraagd of "
+"u deze naam wilt aanmaken."
+
+#: wizards/newaccountwizard/rc.cpp:33
+msgid "Did you make/receive any payments yet?"
+msgstr "Heeft u al betalingen gedaan/ontvangen?"
+
+#: wizards/newaccountwizard/rc.cpp:36
+msgid ""
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?\n"
+"\n"
+"Note: Payments made to obtain the loan (e.g. Disagio) are not considered as "
+"payments in this context."
+msgstr ""
+"Zijn er betalingen gedaan voor deze rekening, ongeacht of ze wel of niet in "
+"KMyMoney zijn ingevoerd?\n"
+"\n"
+"Opmerking: betalingen gedaan om de lening te verkrijgen (bv. disagio) worden "
+"in deze context niet beschouwd als betalingen."
+
+#: wizards/newaccountwizard/rc.cpp:37
+msgid "Which payments do you want to record?"
+msgstr "Welke betalingen wilt u opslaan?"
+
+#: wizards/newaccountwizard/rc.cpp:38
+msgid "All payments"
+msgstr "Alle betalingen"
+
+#: wizards/newaccountwizard/rc.cpp:39
+msgid "Start with this year's payments"
+msgstr "Start met betalingen uit dit jaar"
+
+#: wizards/newaccountwizard/rc.cpp:40
+msgid ""
+"<qt>Select which transactions should be recorded.\n"
+"\n"
+"<b>All payments</b> allows you to enter all payments made for this loan.\n"
+"\n"
+"The option to <b>start from the beginning of the current year</b> is meant "
+"for loans that are active for a longer period of time already and you don't "
+"want to enter all transactions of the past.\n"
+"</qt>"
+msgstr ""
+"<qt>Selecteer welke transacties moeten worden geregistreerd\n"
+"\n"
+"<b>Alle betalingen</b> maakt het mogelijk alle betalingen van/naar deze "
+"lening in te voeren\n"
+"\n"
+"De optie om te <b>starten vanaf het begin van dit jaar</b> is bedoeld voor "
+"leningen die al langer lopen en waarvoor u niet alle transacties uit het "
+"verleden wilt invoeren.\n"
+"</qt>"
+
+#: wizards/newaccountwizard/rc.cpp:41
+msgid "Balance before start of recording"
+msgstr "Saldo bij aanvang"
+
+#: wizards/newaccountwizard/rc.cpp:42
+msgid ""
+"Enter the ending balance found on the statement that is the last one before "
+"you want to start recording this loan in KMyMoney."
+msgstr ""
+"Voer het laatste bekende eindsaldo in zoals dit is vermeld op uw "
+"bankafschrift, voordat u bent begonnen met het bijhouden van de transacties "
+"in KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:43
+msgid ""
+"You have selected to record only payments from the beginning of this year. "
+"Since prior transactions will not be recorded, you need to supply the "
+"balance of the loan on January 1st of this year."
+msgstr ""
+"U hebt geselecteerd om betalingen bij te houden vanaf het begin van dit "
+"jaar. Omdat voorgaande transacties niet worden geregistreerd moet u het "
+"beginsaldo van deze lening opgeven zoals dat was op 1 januari van dit jaar."
+
+#: wizards/newaccountwizard/rc.cpp:45
+msgid "Interest Compounding frequency"
+msgstr "Rente betalings frequentie"
+
+#: wizards/newaccountwizard/rc.cpp:46
+msgid ""
+"Select the frequency with which the interest is compounded. If uncertain, "
+"select the same as the payment frequency. Consult your loan contract for "
+"details."
+msgstr ""
+"Selecteer de rentevast periode. Als u dit niet weet gebruik dan dezelfde "
+"frequentie als die waarmee de betalingen plaatsvinden. Kijk in het contract "
+"voor uw lening voor meer details."
+
+#: wizards/newaccountwizard/rc.cpp:47
+msgid "Due date of first payment to be recorded"
+msgstr "Datum waarop eerste betaling moet plaatsvinden"
+
+#: wizards/newaccountwizard/rc.cpp:48
+msgid ""
+"Depending on the answer to <b>What do you want to record?</b> this field "
+"means the following:<p>\n"
+"\n"
+"<b>All payments</b><br>\n"
+"Enter the due date of the very first payment<p>\n"
+"\n"
+"<b>Start with this year's payments</b><br>\n"
+"Enter the due date of the first payment in the current year"
+msgstr ""
+"Afhankelijk van het antwoord op<b>Wat wilt u vastleggen?</b> betekent dit "
+"veld het volgende:<p>\n"
+"\n"
+"<b>Alle betalingen</b><br>\n"
+"Voer de verval datum voor de eerste betaling in<p>\n"
+"\n"
+"<b>Start met de betalingen voor dit jaar</b><br>\n"
+"Voer de eerste betaaldatum voor dit jaar in"
+
+#: wizards/newaccountwizard/rc.cpp:49
+msgid "Type of interest rate"
+msgstr "Type rente"
+
+#: wizards/newaccountwizard/rc.cpp:50
+msgid "Fixed"
+msgstr "Vast"
+
+#: wizards/newaccountwizard/rc.cpp:51
+msgid "Variable"
+msgstr "Variabel"
+
+#: wizards/newaccountwizard/rc.cpp:52
+msgid "Time between interest changes"
+msgstr "Periode tussen rente wijzigingen"
+
+#: dialogs/knewloanwizard.cpp:613 wizards/newaccountwizard/rc.cpp:53
+msgid "Days"
+msgstr "Dagen"
+
+#: dialogs/knewloanwizard.cpp:614 wizards/newaccountwizard/rc.cpp:54
+msgid "Weeks"
+msgstr "Weken"
+
+#: wizards/newaccountwizard/rc.cpp:57
+msgid "Next interest change is due"
+msgstr "Volgende datum van rente wijziging"
+
+#: wizards/newaccountwizard/rc.cpp:58
+msgid "This page allows you to select the parent account."
+msgstr "Op deze pagina kunt u de moederrekening selecteren."
+
+#: wizards/newaccountwizard/rc.cpp:60
+msgid ""
+"If this account is managed by an institution please select the institution "
+"from the list. If the institution does not exist yet, please choose the "
+"<b>New Institution</b> button to create it. Otherwise, leave this field "
+"empty.\n"
+"Enter the account number used by the institution to identify the account."
+msgstr ""
+"Als dit een rekening is bij een financiële instelling, zoals een bank of een "
+"effectenhandelaar, selecteer dan de naam van de instelling, of kies "
+"<b>Nieuwe financiële instelling</b> om deze alsnog aan te maken. Laat in "
+"anders dit veld leeg.\n"
+"Geef tevens het rekening nummer op waaronder deze bekend is bij de "
+"financiële instelling."
+
+#: wizards/newaccountwizard/rc.cpp:62
+msgid "Select the institution which manages this account or leave empty"
+msgstr ""
+"Selecteer de financiële instelling die uw rekening beheert of laat dit veld "
+"leeg"
+
+#: wizards/newaccountwizard/rc.cpp:63
+msgid "New Institution"
+msgstr "Nieuwe financiële instelling"
+
+#: wizards/newaccountwizard/rc.cpp:65
+msgid ""
+"Accounts managed by an institution are usually referenced by a unique number "
+"the so called account number. Enter that number here.\n"
+"\n"
+"KMyMoney currently uses this number only for some online banking functions."
+msgstr ""
+"Rekeningen die worden beheerd bij een financiële instelling zijn meestal "
+"bekend onder een uniek nummer of rekening nummer. Voer dat hier in a.u.b.\n"
+"\n"
+"KMyMoney gebruikt dit nummer soms bij online bankieren."
+
+#: wizards/newaccountwizard/rc.cpp:67
+msgid "Enter the International Bank Account Number into this field"
+msgstr "Voer in dit veld het International Bank Account Number (IBAN) in"
+
+#: wizards/newaccountwizard/rc.cpp:68
+msgid ""
+"You can enter the IBAN (International Bank Account Number) into this field "
+"if you know it. Usually, people at your institution can tell you the number "
+"or it is printed on your statements.\n"
+"\n"
+"See also http://en.wikipedia.org/wiki/International_Bank_Account_Number for "
+"more information.\n"
+"\n"
+"KMyMoney keeps this field only for documentation purposes and does not use "
+"it otherwise."
+msgstr ""
+"U kunt in dit veld het IBAN nummer invoeren als het bij u bekend is.\n"
+"\n"
+"Zie ook http://en.wikipedia.org/wiki/International_Bank_Account_Number voor "
+"meer informatie.\n"
+"\n"
+"KMyMoney onthoudt deze waarde uitsluitend voor documentatie doeleinden."
+
+#: wizards/newaccountwizard/rc.cpp:69
+msgid ""
+"Now enter the details for your loan. You can leave one of the fields empty "
+"and KMyMoney will calculate it when you press the <b>Calculate</b> button. "
+"Before you can continue with the next page you also need to press "
+"<b>Calculate</b> so that KMyMoney can check the logical correctness of the "
+"values you have supplied."
+msgstr ""
+"U kunt nu informatie over uw lening invoeren. U kunt één van de velden leeg "
+"laten waarna KMyMoney de juiste waarde voor dit veld berekent als u op de "
+"<b>Berekenen</b> knop drukt. Voordat u doorgaat naar de volgende pagina "
+"dient u op <b>Berekenen</b> te drukken zodat KMyMoney kan controleren of de "
+"ingevoerde waarden logisch en correct zijn."
+
+#: wizards/newaccountwizard/rc.cpp:70
+msgid "The interest rate gets calculated"
+msgstr "Het rentepercentage wordt berekend"
+
+#: wizards/newaccountwizard/rc.cpp:71
+msgid "when the payment is received"
+msgstr "als de betaling is ontvangen"
+
+#: wizards/newaccountwizard/rc.cpp:72
+msgid "when the payment is due"
+msgstr "als de betaling is uitgevoerd"
+
+#: dialogs/rc.cpp:531 dialogs/rc.cpp:533 wizards/newaccountwizard/rc.cpp:73
+msgid "Loan amount"
+msgstr "Bedrag van de lening"
+
+#: wizards/newaccountwizard/rc.cpp:74
+msgid ""
+"Enter the amount of the loan in this field. If you want to calculate this "
+"field out of the other parameters, please leave it empty. If the field is "
+"marked as required (colored background) you have informed KMyMoney about the "
+"fact that there were already some payments towards the loan. In this case, "
+"please enter the ending balance of your last statement."
+msgstr ""
+"Voer het bedrag van de lening in. Als u dit bedrag wilt berekenen vanuit de "
+"overige waarden, laat dit veld dan leeg. Als dit veld als verplicht is "
+"aangemerkt (gekleurde achtergrond) dan heeft u al kenbaar gemaakt dat er "
+"betalingen voor deze lening hebben plaatsgevonden. In dat geval dient u het "
+"eindsaldo zoals dat is vermeldt op uw laatste bankafschrift in te voeren."
+
+#: wizards/newaccountwizard/rc.cpp:76
+msgid ""
+"Please enter the interest rate in percent or leave the field empty to "
+"calculate it."
+msgstr "Vul het rentepercentage in of laat het veld leeg om het te berekenen."
+
+#: dialogs/rc.cpp:559 wizards/newaccountwizard/rc.cpp:77
+msgid "Term"
+msgstr "Looptijd"
+
+#: wizards/newaccountwizard/rc.cpp:78
+msgid ""
+"Please enter the term of this loan or enter 0 to calculate it. The term is "
+"the time that is required to fully repay the loan. This time might be "
+"different from the time your loan contract is signed for."
+msgstr ""
+"Voer de looptijd voor deze lening in of laat het veld leeg om het te "
+"berekenen. De looptijd is de tijd die nodig is om de lening volledig af te "
+"lossen. Deze tijdsduur kan verschillen van de looptijd van het contract."
+
+#: wizards/newaccountwizard/rc.cpp:79
+msgid "Payment (principal and interest)"
+msgstr "Betaling (aflossing en rente)"
+
+#: wizards/newaccountwizard/rc.cpp:80
+msgid ""
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"Voer het bedrag in dat u betaald voor rente en aflossing of laat het veld "
+"leeg om het te berekenen."
+
+#: wizards/newaccountwizard/rc.cpp:81
+msgid "Balloon payment"
+msgstr "Laatste aflossing"
+
+#: wizards/newaccountwizard/rc.cpp:82
+msgid ""
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"Voer het bedrag in van een laatste aflossing of laat het veld leeg om het te "
+"berekenen."
+
+#: wizards/newaccountwizard/rc.cpp:83
+msgid "Calculate"
+msgstr "Berekenen"
+
+#: wizards/newaccountwizard/rc.cpp:84
+msgid "Press this button to calculate/verify your loan details."
+msgstr ""
+"Druk op deze knop om de gegevens van deze lening te controleren/berekenen."
+
+#: wizards/newaccountwizard/rc.cpp:85
+msgid ""
+"Pressing this button calculates a possibly missing parameter for your loan "
+"or verifies that the values entered match. If something is not correct you "
+"will receive information about it."
+msgstr ""
+"Als u op deze knop drukt wordt de ontbrekende waarde berekend, dan wel "
+"worden alle ingevoerde waarden geverifiëerd. Als iets niet klopt dan wordt "
+"dit gemeld."
+
+#: wizards/newaccountwizard/rc.cpp:86
+msgid ""
+"Now enter the information required for the periodic loan payments. If your "
+"regular payments contains any additional fees, click on the <b>Additional "
+"fees</b> button to enter them."
+msgstr ""
+"Voer nu de informatie in aangaande de verplichte periodieke betalingen. Als "
+"uw periodieke betaling inclusief extra kosten is, klik dat op <b>Additionele "
+"kosten</b> om deze in te voeren."
+
+#: wizards/newaccountwizard/rc.cpp:87
+msgid "Principal + Interest"
+msgstr "Aflossing + rente"
+
+#: dialogs/rc.cpp:620 wizards/newaccountwizard/rc.cpp:89
+msgid "+"
+msgstr "+"
+
+#: wizards/newaccountwizard/rc.cpp:92
+msgid "= periodical payments"
+msgstr "= periodieke betalingen"
+
+#: dialogs/rc.cpp:643 wizards/newaccountwizard/rc.cpp:94
+msgid ""
+"If this loan is for an asset, such as a car or a house, you can create the "
+"asset account now. An asset account represents the total value of an asset. "
+"The money from this loan will be transfered into the asset account you "
+"create or select.\n"
+"If this loan is a 'consumer loan' (money to use however you want), you can "
+"use a checking account instead."
+msgstr ""
+"Als deze rekening bedoeld is voor vermogen, zoals een huis of auto, dan kunt "
+"u nu een vermogensrekening aanmaken. Een vermogensrekening vertegenwoordigt "
+"de waarde van al uw bezittingen. Het geld van deze lening wordt overgeboekt "
+"naar de door u aangemaakte vermogensrekening.\n"
+"Als de lening een consumptieve lening is (voor willekeurig gebruik), dan "
+"kunt u ook een betaalrekening aanmaken."
+
+#: dialogs/rc.cpp:644 wizards/newaccountwizard/rc.cpp:95
+msgid "Don't create payout transaction"
+msgstr "Betalings transactie niet aanmaken"
+
+#: wizards/newaccountwizard/rc.cpp:96
+msgid "Refinance existing loan"
+msgstr "Herfinancieren van bestaande lening"
+
+#: wizards/newaccountwizard/rc.cpp:97
+msgid ""
+"Check this if you are refinancing a loan that already exists in KMyMoney"
+msgstr "Vink dit aan als u een in KMyMoney bestaande lening herfinanciert"
+
+#: dialogs/rc.cpp:642 wizards/newaccountwizard/rc.cpp:98
+msgid "Asset Account"
+msgstr "Vermogensrekening"
+
+#: dialogs/rc.cpp:2 wizards/newaccountwizard/rc.cpp:99
+msgid "Create"
+msgstr "Creëer"
+
+#: wizards/newaccountwizard/rc.cpp:100
+msgid "Loan account"
+msgstr "Rekening voor lening"
+
+#: dialogs/rc.cpp:646 wizards/newaccountwizard/rc.cpp:101
+msgid "Date of payment"
+msgstr "Datum van betaling"
+
+#: wizards/newaccountwizard/rc.cpp:102
+msgid ""
+"KMyMoney creates a schedule for this payment and reminds you whenever a "
+"payment must be made. Please select the account to/from which payments will "
+"be made and the category the interest will be assigned to.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"KMyMoney zal een periodieke transactie maken voor deze betaling en u eraan "
+"herinneren als u een betaling moet doen.<p>\n"
+" Selecteer de rekening waarheen/waarnaar de betalingen worden verricht, en "
+"de rubriek waarop de rente moet worden geboekt.Als u ervoor gekozen heeft om "
+"alle betalingen op te nemen, dan is de dag van betalen al bekend. Als u "
+"ervoor heeft gekozen om alleen de betalingen van dit jaar op te nemen, dan "
+"is de <b>Eerste geplande betaling</b> de datum van de eerste betaling die "
+"gemaakt is in dit jaar."
+
+#: dialogs/rc.cpp:613 wizards/newaccountwizard/rc.cpp:103
+msgid "Interest category"
+msgstr "Rente rubriek"
+
+#: wizards/newaccountwizard/rc.cpp:104
+msgid ""
+"The category the interest part of the payment will be assigned to. If you "
+"borrow money you usually have to pay interest, so this should be an expense "
+"category. If you lend the money, you receive the interest. In this case, "
+"select an income category here."
+msgstr ""
+"De rubriek waar de betaalde rente wordt geboekt. Als u geld leent dan "
+"betaalt u meestal rente, dus dit dient een uitgaven rubriek te zijn. Als u "
+"geld uitleent en u ontvangt rente dan kunt u een inkomsten rubriek "
+"selecteren."
+
+#: wizards/newaccountwizard/rc.cpp:106
+msgid ""
+"Select the account from which you make your periodical payments or where you "
+"receive regular payments in case you lend the money. In most cases, this is "
+"a checking account."
+msgstr ""
+"Selecteer een rekening waar de periodieke betaling van worden afgeboekt dan "
+"wel waar deze plaatsvinden. In de meeste gevallen is dit een betaalrekening."
+
+#: dialogs/rc.cpp:519 wizards/newaccountwizard/rc.cpp:107
+msgid "First payment due on"
+msgstr "Eerste betaling gepland op"
+
+#: wizards/newaccountwizard/rc.cpp:108
+msgid ""
+"For credit card accounts you can create a monthly schedule which will "
+"automatically remind you about the payment. Please fill in the details about "
+"this payment here."
+msgstr ""
+"Voor creditcard rekeningen kunt u een maandelijkse periodieke transactie "
+"aanmaken om u aan de betalingen te herinneren. Vul hier de details omtrent "
+"deze betalingen in."
+
+#: wizards/newaccountwizard/rc.cpp:109
+msgid "Yes, remind me when the payment is due"
+msgstr "Ja, herinner mij eraan als de betaling plaats moet vinden"
+
+#: wizards/newaccountwizard/rc.cpp:110
+msgid "Name of schedule"
+msgstr "Naam van periodieke transactie"
+
+#: dialogs/rc.cpp:151 dialogs/rc.cpp:218 dialogs/rc.cpp:219
+#: reports/listtable.cpp:199 views/kscheduledview.cpp:72 widgets/rc.cpp:113
+#: widgets/register.cpp:57 wizards/newaccountwizard/rc.cpp:111
+msgid "Payee"
+msgstr "Relatie"
+
+#: wizards/newaccountwizard/rc.cpp:112
+msgid "Estimated monthly payment"
+msgstr "Geschatte maandelijkse betaling"
+
+#: wizards/newaccountwizard/rc.cpp:113
+msgid "Due date of next payment"
+msgstr "Vervaldatum voor de eerstvolgende betaling"
+
+#: wizards/newaccountwizard/rc.cpp:114
+msgid ""
+"Payment should be made\n"
+"from account"
+msgstr ""
+"Betaling moet gedaan worden\n"
+"van rekening"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:79
+msgid "KMyMoney New File Setup"
+msgstr "KMyMoney Nieuw bestand set-up"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:81
+msgid "Introduction"
+msgstr "Introductie"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:82
+msgid "Personal Data"
+msgstr "Persoonlijke gegevens"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:83
+msgid "Select Currency"
+msgstr "Selecteer munteenheid"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:84
+msgid "Select Accounts"
+msgstr "Selecteer rekeningen"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:85
+msgid "Set preferences"
+msgstr "Voorkeuren instellen"
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid ""
+"Unable to load data, because no contact has been associated with the owner "
+"of the standard addressbook."
+msgstr ""
+"Kan de gegevens niet laden, omdat er geen contactpersoon in verband is "
+"gebracht met de eigenaar van het standaard adresboek."
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid "Addressbook import"
+msgstr "Adresboek importeren"
+
+#: wizards/newuserwizard/rc.cpp:1
+msgid ""
+"A typical KMyMoney user maintains a checking a account with some institution "
+"and uses it to receive money or pay bills. If this is not the case, please "
+"deselect the checkbox below and continue on the next page."
+msgstr ""
+"Een doorsnee KMyMoney gebruiker heeft tenminste één betaalrekening bij een "
+"financiële instelling. Als dit niet het geval is haal dan het kruisje weg "
+"bij de onderstaande regel en ga naar de volgende pagina."
+
+#: wizards/newuserwizard/rc.cpp:2
+msgid "I have a checking account that I want to manage with KMyMoney"
+msgstr "Ik heb een betaalrekening die ik wil beheren met KMyMoney"
+
+#: wizards/newuserwizard/rc.cpp:3
+msgid "The name of the instititution that issued the account."
+msgstr "De naam van de Bank die deze rekening heeft uitgegeven."
+
+#: wizards/newuserwizard/rc.cpp:4
+msgid ""
+"Each institution has a routing number. Enter it here. If uncertain, leave "
+"the field blank. You can modify it later."
+msgstr ""
+"Iedere financiële instelling heeft een eigen identificatie/rekening nummer. "
+"Voer dat hier in. Als u het niet weet laat dit veld dan leeg. Het kan later "
+"alsnog worden ingevuld."
+
+#: wizards/newuserwizard/rc.cpp:5
+msgid "Name of the institution"
+msgstr "Naam van de financiële instelling"
+
+#: wizards/newuserwizard/rc.cpp:6
+msgid "Routing number"
+msgstr "IBAN nummer van de bank"
+
+#: wizards/newuserwizard/rc.cpp:7
+msgid ""
+"In general the institution that issued the account also issued a number for "
+"it. Enter it here. If uncertain, you can modify this entry later."
+msgstr ""
+"Normaal gesproken verstrekt de financiële instelling ook een uniek nummer "
+"voor de rekening. Voer dat hier in. Als u het niet weet dan kunt u dat later "
+"alsnog invullen."
+
+#: wizards/newuserwizard/rc.cpp:8
+msgid ""
+"Enter a descriptive name that will be used by KMyMoney to identify your "
+"checking account."
+msgstr ""
+"Voer een beschrijving in van de betaalrekening. KMyMoney gebruikt dit dan in "
+"alle overzichten."
+
+#: wizards/newuserwizard/rc.cpp:10
+msgid ""
+"Enter the date from when on you plan to keep track of the transactions in "
+"that account. This is usually the date of the last statement. If uncertain, "
+"leave as is."
+msgstr ""
+"Voer in vanaf welke datum u transacties gaat bijhouden voor deze rekening. "
+"Normaal gesproken is dit de datum van de laatste bankafschrift. Als u het "
+"niet weet, laat deze datum dan ongewijzigd."
+
+#: wizards/newuserwizard/rc.cpp:11
+msgid "Number of the account"
+msgstr "Nummer van de rekening"
+
+#: wizards/newuserwizard/rc.cpp:12
+msgid "Name of the account"
+msgstr "Naam van de rekening"
+
+#: wizards/newuserwizard/rc.cpp:15
+msgid ""
+"Enter the opening balance of the account. This is usually the ending balance "
+"of the last statement. If uncertain, leave as is."
+msgstr ""
+"Voer het saanvangssaldo in voor deze rekening. Dit is normalerwijze het "
+"eindsaldo zoals dit is vermeld op uw laatste bankafschrift. Indien u het "
+"niet weet, laat dan deze waarde ongewijzigd."
+
+#: wizards/newuserwizard/rc.cpp:16
+msgid ""
+"The fields below allow you to enter some information about your checking "
+"account. Once this wizard finishes, the account will be created for you "
+"within KMyMoney."
+msgstr ""
+"In onderstaande velden kunt u informatie invullen over uw betaalrekening. "
+"Als deze wizard eindigt wordt de betaalrekening aangemaakt in KMyMoney."
+
+#: wizards/newuserwizard/rc.cpp:17
+msgid ""
+"KMyMoney supports multiple currencies. Your reports will be based on a "
+"default curreny which you can select here. The default for new accounts is "
+"also the currency you select here."
+msgstr ""
+"KMyMoney ondersteunt meerdere munteenheid. Uw rapporten worden gebaseerd op "
+"de standaard munteenheid die u hier selecteert. Deze standaard munteenheid "
+"wordt ook gebruikt bij het aanmaken van nieuwe rekeningen."
+
+#: wizards/newuserwizard/rc.cpp:18
+msgid ""
+"KMyMoney will store your financial data in a file on the disk. A standard "
+"filename within your KDE user environment will be the default. This is just "
+"provided for convenience and you can choose any other location here."
+msgstr ""
+"KMyMoney slaat alle gegevens op in een bestand op uw harde schijf. Op basis "
+"van uw persoonlijke gegevens heeft KMyMoney onderstaande bestandsnaam "
+"toegekend. Uiteraard kunt u de naam van het bestand en de lokatie waar u "
+"deze wilt opslaan aanpassen aan uw persoonlijk wensen."
+
+#: wizards/newuserwizard/rc.cpp:19
+msgid ""
+"Either the currently selected file exists or the selected directory does not "
+"exist. Please make sure, that\n"
+"\n"
+"<ul>\n"
+"<li>the selected directory exists and</li>\n"
+"<li>the filename is not currently used in this directory.</li>\n"
+"</ul>"
+msgstr ""
+"De geselecteerde map bestaat niet of u heeft een bestandsnaam opgegeven "
+"welke al in gebruik is. Stel zeker dat\n"
+"\n"
+"<ul>\n"
+"<li>de geselecteerde map bestaat en</li>\n"
+"<li>dat de bestandsnaam nog niet bestaat in deze map.</li>\n"
+"</ul>"
+
+#: wizards/newuserwizard/rc.cpp:20
+msgid ""
+"This finishes the setup of your KMyMoney environment. You can now press the "
+"Finish button and start using KMyMoney to record your financial transactions."
+msgstr ""
+"Hiermee eindigt de wizard 'KMyMoney nieuw bestand set-up'. U kunt nu op de "
+"Voltooien knop drukken en starten met het invoeren van uw financiële "
+"transacties."
+
+#: wizards/newuserwizard/rc.cpp:21
+msgid ""
+"Please enter some information about yourself.<br><br>\n"
+"\n"
+"This information will be seen and used only by you. The information is used "
+"to personalize KMyMoney, to encrypt your file, etc."
+msgstr ""
+"Gebruik deze dialoog om informatie over uzelf in te voeren<br><br>\n"
+"\n"
+"Alle informatie is optioneel en wordt gebruikt voor het persoonlijk maken "
+"van uw KMyMoney bestand."
+
+#: wizards/newuserwizard/rc.cpp:28
+msgid "Zip code"
+msgstr "Postcode"
+
+#: wizards/newuserwizard/rc.cpp:30
+msgid "Welcome to KMyMoney!"
+msgstr "Welkom bij KMyMoney!"
+
+#: wizards/newuserwizard/rc.cpp:31
+msgid ""
+"You have started KMyMoney for the first time on this computer. Before this "
+"program can help you to manage your finances, it needs to collect some data "
+"from you.<p>\n"
+"\n"
+"On the next few pages you will be guided through the steps necessary to "
+"setup the program. This will happen only once."
+msgstr ""
+"Dit is de eerste keer dat u KMyMoney gebruikt op deze computer. Voordat u "
+"kunt beginnen met het vastleggen van uw financiële transacties dient u een "
+"aantal basis gegevens in te voeren.<p>\n"
+"\n"
+"Op de volgende pagina's wordt u door de noodzakelijke stappen geleid."
+
+#: wizards/newuserwizard/rc.cpp:32
+msgid ""
+"<p>KMyMoney can encrypt your datafile using GPG Encryption. GPG encryption "
+"is one of the most secure methods in the world for protecting data. All of "
+"your account numbers and other important financial information will be very "
+"secure.</p>"
+msgstr ""
+"<p>KMyMoney kan gegevens versleutelen middels GPG versleuteling. GPG "
+"versleuteling is één van de veiligste methodes ter wereld om uw gegevens te "
+"beveiligen. Al uw rekening nummers en andere financiële informatie is zo "
+"perfect beschermd.</p>"
+
+#: wizards/newuserwizard/rc.cpp:33
+msgid ""
+"If you would like to review or change any preference settings for KMyMoney "
+"at this time, you can do so here. If not just click <b>Next</b>."
+msgstr ""
+"Als u uw ingevoerde gegevens nogmaals wilt bekijken of wijzigen dan kan dat "
+"door op de knop <b>Voorkeuren instellen</b> te drukken. Selecteer anders "
+"<b>Volgende</b>."
+
+#: wizards/newuserwizard/rc.cpp:34
+msgid "Configure preferences now"
+msgstr "Voorkeuren instellen"
+
+#: wizards/newuserwizard/rc.cpp:35
+msgid ""
+"You can change the configuration options at any time using the configuration "
+"dialog. Just select the <b>Configure KMyMoney...</b> option in the "
+"<b>Settings</b> menu."
+msgstr ""
+"Na het sluiten van deze wizard kunt u de ingevoerde gegevens altijd wijzigen "
+"via het menu. Selecteer <b>KMyMoney instellen...</b> uit het "
+"<b>Instellingen</b> menu."
+
+#: dialogs/rc.cpp:83 dialogs/rc.cpp:411 dialogs/rc.cpp:435
+#: kmymoneyutils.cpp:92 kmymoneyutils.cpp:105 mymoney/mymoneyaccount.cpp:753
+#: mymoney/mymoneysecurity.cpp:160
+msgid "Stock"
+msgstr "Aandeel"
+
+#: dialogs/rc.cpp:84 dialogs/rc.cpp:412 dialogs/rc.cpp:436
+#: kmymoneyutils.cpp:107 mymoney/mymoneysecurity.cpp:163
+msgid "Mutual Fund"
+msgstr "Beleggingsfonds"
+
+#: dialogs/rc.cpp:85 dialogs/rc.cpp:413 dialogs/rc.cpp:437
+#: kmymoneyutils.cpp:109 mymoney/mymoneysecurity.cpp:166
+msgid "Bond"
+msgstr "Obligatie"
+
+#: mymoney/mymoneysecurity.cpp:172 reports/querytable.cpp:1150
+#: widgets/kmymoneyaccountselector.cpp:76
+msgid "None"
+msgstr "Geen"
+
+#: dialogs/rc.cpp:46 kmymoneyutils.cpp:402 mymoney/mymoneyaccount.cpp:759
+#: mymoney/mymoneyscheduled.cpp:1002 mymoney/mymoneysecurity.cpp:175
+#: views/kforecastview.cpp:174 widgets/register.cpp:54
+#: widgets/register.cpp:485 widgets/transaction.cpp:708
+#: widgets/transaction.cpp:1459
+msgid "Unknown"
+msgstr "Onbekend"
+
+#: mymoney/storage/mymoneystoragesql.cpp:191
+msgid ""
+"Database apparently in use\n"
+"Opened by %1 on %2 at %3.\n"
+"Open anyway?"
+msgstr ""
+"Database is momenteel in gebruik\n"
+"Geopend door %1 op %2 om %3.\n"
+"Toch openen?"
+
+#: mymoney/storage/mymoneystoragesql.cpp:229
+msgid "Cannot currently create database for driver %1; please create manually"
+msgstr "Kan geen database aanmaken voor driver %1. Maak deze handmatig aan."
+
+#: mymoney/storage/mymoneystoragesql.cpp:244
+msgid "Error in create database %1; do you have create permissions?"
+msgstr ""
+"Fout bij het aanmaken van database %1. Heeft u wel de juiste rechten om deze "
+"actie uit te voeren?"
+
+#: converter/mymoneygncreader.cpp:1329
+#: mymoney/storage/mymoneystoragexml.cpp:166
+msgid "Loading transactions..."
+msgstr "Bezig met laden van transacties..."
+
+#: converter/mymoneygncreader.cpp:1190
+#: mymoney/storage/mymoneystoragexml.cpp:173
+msgid "Loading accounts..."
+msgstr "Bezig met laden van rekeningen..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:180
+msgid "Loading securities..."
+msgstr "Bezig met laden van fondsen..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:187
+msgid "Loading reports..."
+msgstr "Bezig met laden van rapporten..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:268
+msgid "Unknown XML tag %1 found in line %2"
+msgstr "Onbekend XML label %1 gevonden in regel %2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:274
+msgid "Exception while creating a %1 element: %2"
+msgstr "Fout tijdens het creëren van een %1 element: %2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:513
+msgid "Loading file information..."
+msgstr "Bezig met laden van bestandsinformatie..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:591
+msgid "Loading user information..."
+msgstr "Bezig met laden van gebruikers informatie..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:655
+msgid "Saving accounts..."
+msgstr "Opslaan van rekeningen..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:678
+msgid "Saving transactions..."
+msgstr "Opslaan van transacties..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:747
+msgid "Saving reports..."
+msgstr "Opslaan van rapporten..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:762
+msgid "Saving budgets..."
+msgstr "Opslaan van budgetten..."
+
+#: mymoney/storage/mymoneystoragedump.cpp:414
+msgid "not reconciled"
+msgstr "niet gecontroleerd"
+
+#: mymoney/storage/mymoneystoragedump.cpp:417
+msgid "cleared"
+msgstr "betaald"
+
+#: mymoney/storage/mymoneystoragedump.cpp:420
+msgid "reconciled"
+msgstr "gecontroleerd"
+
+#: mymoney/storage/mymoneystoragedump.cpp:423
+msgid "frozen"
+msgstr "bevroren"
+
+#: mymoney/storage/mymoneystoragedump.cpp:426
+msgid "unknown"
+msgstr "onbekend"
+
+#: mymoney/mymoneyaccount.cpp:101
+msgid ""
+"Account %1 contains an opening balance. Please use a KMyMoney version >= 0.8 "
+"and < 0.9 to correct the problem."
+msgstr ""
+"Rekening %1 bevat een beginsaldo. Gebruik KMyMoney versie 0.8 tot 0.9 om dit "
+"probleem te corrigeren."
+
+#: mymoney/mymoneyaccount.cpp:597
+msgid ""
+"_: Brokerage (suffix for account names)\n"
+"Brokerage"
+msgstr "Kasrekening"
+
+#: kmymoneyutils.cpp:74 mymoney/mymoneyaccount.cpp:726
+msgid "Certificate of Deposit"
+msgstr "Bewijs van Storting"
+
+#: kmymoneyutils.cpp:78 mymoney/mymoneyaccount.cpp:732
+msgid "Money Market"
+msgstr "Geldmarkt"
+
+#: converter/mymoneytemplate.cpp:186 converter/mymoneytemplate.cpp:187
+#: dialogs/knewaccountdlg.cpp:1018 kmymoneyutils.cpp:86
+#: mymoney/mymoneyaccount.cpp:744 views/kaccountsview.cpp:360
+#: views/kbudgetview.cpp:372 views/kcategoriesview.cpp:178
+#: views/khomeview.cpp:1813 views/kmymoneyview.cpp:767
+#: widgets/kmymoneyaccountselector.cpp:68
+#: widgets/kmymoneyaccountselector.cpp:179
+#: widgets/kmymoneyaccountselector.cpp:370 widgets/register.cpp:828
+msgid "Income"
+msgstr "Inkomsten"
+
+#: converter/mymoneytemplate.cpp:190 converter/mymoneytemplate.cpp:191
+#: dialogs/knewaccountdlg.cpp:1020 kmymoneyutils.cpp:88
+#: mymoney/mymoneyaccount.cpp:747 views/kaccountsview.cpp:364
+#: views/kbudgetview.cpp:378 views/kcategoriesview.cpp:182
+#: views/kmymoneyview.cpp:768 widgets/kmymoneyaccountselector.cpp:72
+#: widgets/kmymoneyaccountselector.cpp:180
+#: widgets/kmymoneyaccountselector.cpp:380 widgets/register.cpp:829
+msgid "Expense"
+msgstr "Uitgaven"
+
+#: kmymoneyutils.cpp:90 mymoney/mymoneyaccount.cpp:750
+msgid "Investment Loan"
+msgstr "Lening voor beleggingen"
+
+#: mymoney/mymoneyfile.cpp:47
+msgid "Opening Balances"
+msgstr "Beginsaldo"
+
+#: mymoney/mymoneyfile.cpp:398
+msgid "Cannot remove transaction that references a closed account."
+msgstr ""
+"Kan geen transactie verwijderen welke verwijst naar een gesloten rekening."
+
+#: mymoney/mymoneyfile.cpp:1414 mymoney/mymoneyfile.cpp:1433
+#: mymoney/mymoneyfile.cpp:1447 mymoney/mymoneyfile.cpp:1469
+msgid "* Problem with account '%1'"
+msgstr "* Probleem met rekening '%1'"
+
+#: mymoney/mymoneyfile.cpp:1419
+msgid " * Parent account '%1' belongs to a different group."
+msgstr " * Moederrekening '%1' behoort tot een andere groep."
+
+#: mymoney/mymoneyfile.cpp:1420 mymoney/mymoneyfile.cpp:1450
+msgid " New parent account is the top level account '%1'."
+msgstr " Nieuwe moederrekening is al aanwezig '%1'."
+
+#: mymoney/mymoneyfile.cpp:1436
+msgid " * Parent account '%1' does not contain '%2' as sub-account."
+msgstr " * Moederrekening '%1' heeft '%2' niet als subrekening."
+
+#: mymoney/mymoneyfile.cpp:1449
+msgid " * The parent with id %1 does not exist anymore."
+msgstr " * De moederrekening met id %1 bestaat niet meer."
+
+#: mymoney/mymoneyfile.cpp:1471
+msgid " * Child account with id %1 does not exist anymore."
+msgstr " * Dochterrekening met id %1 bestaat niet meer."
+
+#: mymoney/mymoneyfile.cpp:1472
+msgid " The child account list will be reconstructed."
+msgstr " Dochterrekening wordt gereconstrueerd."
+
+#: mymoney/mymoneyfile.cpp:1492
+msgid " * Unable to update account data in engine."
+msgstr " * Kan rekening gegevens niet bijwerken."
+
+#: mymoney/mymoneyfile.cpp:1499
+msgid "* Reconstructing the child lists for"
+msgstr "* Reconstructie van de dochterlijst voor"
+
+#: mymoney/mymoneyfile.cpp:1536
+msgid " * Unable to update account data for account %1 in engine"
+msgstr " * Kan gegevens van rekening %1 niet bijwerken"
+
+#: mymoney/mymoneyfile.cpp:1554
+msgid " * Payee %1 recreated with fixed id"
+msgstr " * Relatie%1 is opnieuw aangemaakt met een vaste id"
+
+#: mymoney/mymoneyfile.cpp:1583
+msgid " * Payee id updated in split of transaction '%1'."
+msgstr " * Relatieid is bijgewerkt in de splitsing van transactie '%1'."
+
+#: mymoney/mymoneyfile.cpp:1596
+msgid " * shares set to value in split of transaction '%1'."
+msgstr ""
+" * waarde van aandelen aangepast aan het bedrag van de splitsing voor "
+"transactie.'%1'."
+
+#: mymoney/mymoneyfile.cpp:1599
+msgid " * value set to shares in split of transaction '%1'."
+msgstr " * Waarde ingesteld op aandelen in splitsing '%1'."
+
+#: mymoney/mymoneyfile.cpp:1605
+msgid ""
+" * Split %2 in transaction '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+" * Splitsing %2 in transactie '%1' refereert naar een ongeldige rekening %"
+"3. Graag handmatig corrigeren."
+
+#: mymoney/mymoneyfile.cpp:1616
+msgid " * action marked as interest in split of transaction '%1'."
+msgstr " * Waarde aangemerkt als rente in splitsing '%1'."
+
+#: mymoney/mymoneyfile.cpp:1643
+msgid " * Payee id updated in split of schedule '%1'."
+msgstr ""
+" * Relatieid is bijgewerkt in de splitsing van periodieke transactie '%1'."
+
+#: mymoney/mymoneyfile.cpp:1649
+msgid ""
+" * Split in scheduled transaction '%1' contained value != 0 and shares == 0."
+msgstr ""
+" * Splitsing in periodieke transactie '%1' bevat een waarde != 0 en "
+"aandelen == 0."
+
+#: mymoney/mymoneyfile.cpp:1650
+msgid " Shares set to value."
+msgstr " Aandelen krijgen deze waarde."
+
+#: mymoney/mymoneyfile.cpp:1658
+msgid " * Removed bankid from split in scheduled transaction '%1'."
+msgstr " * Bankid is verwijderd uit de periodieke transactie '%1'."
+
+#: mymoney/mymoneyfile.cpp:1671
+msgid " * shares set to value in split in schedule '%1'."
+msgstr " * Aandelen ingesteld conform bedrag in periodieke transactie '%1'."
+
+#: mymoney/mymoneyfile.cpp:1674
+msgid " * value set to shares in split in schedule '%1'."
+msgstr ""
+" * waarde ingesteld voor aandelen in de splitsing van de periodieke "
+"transactie '%1'."
+
+#: mymoney/mymoneyfile.cpp:1680
+msgid ""
+" * Split %2 in schedule '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+" * Splitsing %2 in periodieke transactie '%1' verwijst naar een ongeldige "
+"rekening %3. Graag handmatig corrigeren."
+
+#: mymoney/mymoneyfile.cpp:1706
+msgid " * Payee id updated in report '%1'."
+msgstr " * Relatieid bijgewerkt in rapport '%1'."
+
+#: mymoney/mymoneyfile.cpp:1723
+msgid " * Payee '%1' removed."
+msgstr " * Relatie'%1' is verwijderd."
+
+#: mymoney/mymoneyfile.cpp:1730
+msgid "Finish! Data is consistent."
+msgstr "Gereed! Gegevens zijn consistent."
+
+#: mymoney/mymoneyfile.cpp:1732
+msgid "Finish! %1 problem(s) corrected. %2 problem(s) still present."
+msgstr ""
+"Gereed! %1 problemen zijn gecorrigeerd. %2 problemen zijn nog aanwezig."
+
+#: mymoney/mymoneyscheduled.cpp:873 mymoney/mymoneyscheduled.cpp:918
+#: mymoney/mymoneyscheduled.cpp:969 mymoney/mymoneyscheduled.cpp:1265
+#: mymoney/mymoneyscheduletest.cpp:1336
+msgid "Once"
+msgstr "Eenmalig"
+
+#: mymoney/mymoneyscheduled.cpp:875 mymoney/mymoneyscheduled.cpp:924
+#: mymoney/mymoneyscheduled.cpp:1267 mymoney/mymoneyscheduletest.cpp:1337
+#: widgets/rc.cpp:72
+msgid "Daily"
+msgstr "dagelijks"
+
+#: mymoney/mymoneyscheduled.cpp:877 mymoney/mymoneyscheduled.cpp:931
+#: mymoney/mymoneyscheduled.cpp:1269 mymoney/mymoneyscheduletest.cpp:1338
+#: widgets/rc.cpp:73
+msgid "Weekly"
+msgstr "wekelijks"
+
+#: mymoney/mymoneyscheduled.cpp:881 mymoney/mymoneyscheduled.cpp:932
+#: mymoney/mymoneyscheduled.cpp:1273 mymoney/mymoneyscheduletest.cpp:1339
+msgid "Every other week"
+msgstr "om de week"
+
+#: mymoney/mymoneyscheduled.cpp:879 mymoney/mymoneyscheduled.cpp:1271
+#: mymoney/mymoneyscheduletest.cpp:1340
+msgid "Fortnightly"
+msgstr "tweewekelijks"
+
+#: mymoney/mymoneyscheduled.cpp:883 mymoney/mymoneyscheduled.cpp:941
+#: mymoney/mymoneyscheduled.cpp:1275 mymoney/mymoneyscheduletest.cpp:1341
+msgid "Every half month"
+msgstr "iedere halve maand"
+
+#: mymoney/mymoneyscheduled.cpp:887 mymoney/mymoneyscheduled.cpp:934
+#: mymoney/mymoneyscheduled.cpp:1279 mymoney/mymoneyscheduletest.cpp:1342
+msgid "Every four weeks"
+msgstr "iedere vier weken"
+
+#: mymoney/mymoneyscheduled.cpp:893 mymoney/mymoneyscheduled.cpp:935
+#: mymoney/mymoneyscheduled.cpp:1285 mymoney/mymoneyscheduletest.cpp:1344
+msgid "Every eight weeks"
+msgstr "iedere acht weken"
+
+#: mymoney/mymoneyscheduled.cpp:895 mymoney/mymoneyscheduled.cpp:948
+#: mymoney/mymoneyscheduled.cpp:1287 mymoney/mymoneyscheduletest.cpp:1345
+msgid "Every two months"
+msgstr "iedere twee maanden"
+
+#: mymoney/mymoneyscheduled.cpp:897 mymoney/mymoneyscheduled.cpp:949
+#: mymoney/mymoneyscheduled.cpp:1289 mymoney/mymoneyscheduletest.cpp:1346
+msgid "Every three months"
+msgstr "iedere drie maanden"
+
+#: mymoney/mymoneyscheduled.cpp:899 mymoney/mymoneyscheduled.cpp:1291
+#: mymoney/mymoneyscheduletest.cpp:1347 widgets/rc.cpp:76
+msgid "Quarterly"
+msgstr "ieder kwartaal"
+
+#: mymoney/mymoneyscheduled.cpp:901 mymoney/mymoneyscheduled.cpp:950
+#: mymoney/mymoneyscheduled.cpp:1293 mymoney/mymoneyscheduletest.cpp:1348
+msgid "Every four months"
+msgstr "iedere vier maanden"
+
+#: mymoney/mymoneyscheduled.cpp:903 mymoney/mymoneyscheduled.cpp:951
+#: mymoney/mymoneyscheduled.cpp:1295 mymoney/mymoneyscheduletest.cpp:1349
+msgid "Twice yearly"
+msgstr "halfjaarlijks"
+
+#: mymoney/mymoneyscheduled.cpp:905 mymoney/mymoneyscheduled.cpp:957
+#: mymoney/mymoneyscheduled.cpp:1297 mymoney/mymoneyscheduletest.cpp:1350
+#: widgets/rc.cpp:20 widgets/rc.cpp:77
+msgid "Yearly"
+msgstr "jaarlijks"
+
+#: mymoney/mymoneyscheduled.cpp:907 mymoney/mymoneyscheduled.cpp:958
+#: mymoney/mymoneyscheduled.cpp:1299 mymoney/mymoneyscheduletest.cpp:1351
+msgid "Every other year"
+msgstr "om het jaar"
+
+#: mymoney/mymoneyscheduled.cpp:870 mymoney/mymoneyscheduled.cpp:913
+#: mymoney/mymoneyscheduled.cpp:966
+msgid "Any"
+msgstr "willekeurig"
+
+#: mymoney/mymoneyscheduled.cpp:885 mymoney/mymoneyscheduled.cpp:933
+#: mymoney/mymoneyscheduled.cpp:1277
+msgid "Every three weeks"
+msgstr "Iedere drie weken"
+
+#: mymoney/mymoneyscheduled.cpp:889 mymoney/mymoneyscheduled.cpp:925
+#: mymoney/mymoneyscheduled.cpp:1281
+msgid "Every thirty days"
+msgstr "Iedere dertig dagen"
+
+#: mymoney/mymoneyscheduled.cpp:971
+msgid "Day"
+msgstr "Dagelijks"
+
+#: mymoney/mymoneyscheduled.cpp:973 reports/listtable.cpp:206
+#: widgets/kmymoneycalendar.cpp:123 widgets/rc.cpp:97
+msgid "Week"
+msgstr "Wekelijks"
+
+#: mymoney/mymoneyscheduled.cpp:975
+msgid "Half-month"
+msgstr "Half maandelijks"
+
+#: mymoney/mymoneyscheduled.cpp:977 reports/listtable.cpp:205
+#: widgets/kmymoneycalendar.cpp:124 widgets/rc.cpp:96
+msgid "Month"
+msgstr "Maandelijks"
+
+#: dialogs/rc.cpp:400 mymoney/mymoneyscheduled.cpp:979 views/rc.cpp:14
+msgid "Year"
+msgstr "Jaarlijks"
+
+#: mymoney/mymoneyscheduled.cpp:989
+msgid "Bill"
+msgstr "Rekening"
+
+#: dialogs/rc.cpp:107 dialogs/rc.cpp:162 dialogs/rc.cpp:249 dialogs/rc.cpp:754
+#: mymoney/mymoneyscheduled.cpp:992 widgets/kmymoneycombo.cpp:420
+#: widgets/register.cpp:571
+msgid "Deposit"
+msgstr "Storting"
+
+#: mymoney/mymoneyscheduled.cpp:995 reports/querytable.cpp:594
+#: reports/querytable.cpp:696 widgets/kmymoneycombo.cpp:419
+msgid "Transfer"
+msgstr "Overboeking"
+
+#: mymoney/mymoneyscheduled.cpp:1035
+msgid "Any (Error)"
+msgstr "Willekeurige fout"
+
+#: dialogs/rc.cpp:114 mymoney/mymoneyscheduled.cpp:1047
+msgid "Change the date to the previous Friday"
+msgstr "De datum veranderen naar de voorafgaande vrijdag"
+
+#: dialogs/rc.cpp:115 mymoney/mymoneyscheduled.cpp:1050
+msgid "Change the date to the next Monday"
+msgstr "De datum veranderen naar de volgende maandag"
+
+#: mymoney/mymoneyscheduled.cpp:1053
+msgid "Do Nothing"
+msgstr "Niets doen"
+
+#: kmymoney2.cpp:312
+msgid "Open database..."
+msgstr "Database openen..."
+
+#: kmymoney2.cpp:313
+msgid "Save as database..."
+msgstr "Opslaan als database..."
+
+#: kmymoney2.cpp:314
+msgid "Backup..."
+msgstr "Reservekopie..."
+
+#: kmymoney2.cpp:315 kmymoney2.cpp:321
+msgid "QIF..."
+msgstr "QIF..."
+
+#: kmymoney2.cpp:316
+msgid "Gnucash..."
+msgstr "Gnucash..."
+
+#: kmymoney2.cpp:317
+msgid "Statement file..."
+msgstr "Bankafschriften bestand..."
+
+#: kmymoney2.cpp:319 kmymoney2.cpp:320
+msgid "Account Template..."
+msgstr "Rekening Sjabloon..."
+
+#: kmymoney2.cpp:322
+msgid "Personal Data..."
+msgstr "Persoonlijke Gegevens..."
+
+#: kmymoney2.cpp:325
+msgid "Dump Memory"
+msgstr "Geheugen dumpen"
+
+#: kmymoney2.cpp:327
+msgid "File-Information..."
+msgstr "Bestand informatie..."
+
+#: kmymoney2.cpp:332
+msgid "Find transaction..."
+msgstr "Zoek transactie..."
+
+#: kmymoney2.cpp:337
+msgid "Show Transaction Detail"
+msgstr "Toon Transactie Details"
+
+#: kmymoney2.cpp:338 rc.cpp:60
+msgid "Hide reconciled transactions"
+msgstr "Verberg gecontroleerde transacties"
+
+#: kmymoney2.cpp:339 rc.cpp:57
+msgid "Hide unused categories"
+msgstr "Verberg niet gebruikte rubrieken"
+
+#: kmymoney2.cpp:340
+msgid "Show all accounts"
+msgstr "Toon alle rekeningen"
+
+#: kmymoney2.cpp:345
+msgid "New institution..."
+msgstr "Nieuwe financiële instelling..."
+
+#: kmymoney2.cpp:346
+msgid "Edit institution..."
+msgstr "Bewerk financiële instelling..."
+
+#: kmymoney2.cpp:347
+msgid "Delete institution..."
+msgstr "Verwijder financiële instelling..."
+
+#: kmymoney2.cpp:352
+msgid "New account..."
+msgstr "Nieuwe rekening..."
+
+#: kmymoney2.cpp:354
+msgid "Open ledger"
+msgstr "Open kasboek"
+
+#: kmymoney2.cpp:355
+msgid "Reconcile..."
+msgstr "Sluitend maken..."
+
+#: kmymoney2.cpp:356
+msgid ""
+"_: Finish reconciliation\n"
+"Finish"
+msgstr "Beëindig"
+
+#: kmymoney2.cpp:357
+msgid ""
+"_: Postpone reconciliation\n"
+"Postpone"
+msgstr "Uitstellen"
+
+#: kmymoney2.cpp:358
+msgid "Edit account..."
+msgstr "Bewerk Rekening..."
+
+#: kmymoney2.cpp:359
+msgid "Delete account..."
+msgstr "Verwijder rekening..."
+
+#: kmymoney2.cpp:360
+msgid "Close account"
+msgstr "Sluit rekening"
+
+#: kmymoney2.cpp:361
+msgid "Reopen account"
+msgstr "Heropen rekening"
+
+#: kmymoney2.cpp:362
+msgid "Transaction report"
+msgstr "Transactie rapport"
+
+#: kmymoney2.cpp:364
+msgid "Show balance chart..."
+msgstr "Toon saldo grafiek..."
+
+#: kmymoney2.cpp:366
+msgid "Map to online account"
+msgstr "Gekoppeld aan online rekening"
+
+#: kmymoney2.cpp:367
+msgid "Unmap account"
+msgstr "Ontkoppel rekening"
+
+#: dialogs/settings/rc.cpp:126 kmymoney2.cpp:368 views/kpayeesview.cpp:363
+#: widgets/rc.cpp:50
+msgid "Update"
+msgstr "Bijwerken"
+
+#: kmymoney2.cpp:372
+msgid "Update account..."
+msgstr "Bijwerken rekening..."
+
+#: kmymoney2.cpp:373
+msgid "Update all accounts..."
+msgstr "Bijwerken van alle rekening..."
+
+#: kmymoney2.cpp:378
+msgid "New category..."
+msgstr "Nieuwe rubriek..."
+
+#: kmymoney2.cpp:379
+msgid "Edit category..."
+msgstr "Bewerk rubriek..."
+
+#: kmymoney2.cpp:380
+msgid "Delete category..."
+msgstr "Verwijder rubriek..."
+
+#: kmymoney2.cpp:386
+msgid "QIF Profile Editor..."
+msgstr "QIF profiel editor..."
+
+#: kmymoney2.cpp:387
+msgid "Securities..."
+msgstr "Aandelen..."
+
+#: kmymoney2.cpp:388
+msgid "Currencies..."
+msgstr "Munteenheden..."
+
+#: kmymoney2.cpp:389
+msgid "Prices..."
+msgstr "(Wissel-)koersen..."
+
+#: kmymoney2.cpp:390
+msgid "Update Stock and Currency Prices..."
+msgstr "Koersen van aandelen en munteenheden bijwerken..."
+
+#: kmymoney2.cpp:391
+msgid "Consistency Check"
+msgstr "Consistentie Controle"
+
+#: kmymoney2.cpp:392
+msgid "Performance-Test"
+msgstr "Prestatie test"
+
+#: kmymoney2.cpp:393
+msgid "KCalc..."
+msgstr "KCalc..."
+
+#: kmymoney2.cpp:399
+msgid "Enable all messages"
+msgstr "Alle berichten inschakelen"
+
+#: kmymoney2.cpp:400
+msgid "KDE language settings..."
+msgstr "KDE taal opties..."
+
+#: kmymoney2.cpp:405
+msgid "&Show tip of the day"
+msgstr "&Toon tip van de dag"
+
+#: kmymoney2.cpp:410
+msgid ""
+"_: New transaction button\n"
+"New"
+msgstr "Nieuw"
+
+#: kmymoney2.cpp:415
+msgid ""
+"_: Edit transaction button\n"
+"Edit"
+msgstr "Bewerk"
+
+#: kmymoney2.cpp:417
+msgid ""
+"_: Enter transaction\n"
+"Enter"
+msgstr "Invoeren"
+
+#: kmymoney2.cpp:420
+msgid ""
+"_: Edit split button\n"
+"Edit splits"
+msgstr "Bewerk splitsing"
+
+#: kmymoney2.cpp:421
+msgid ""
+"_: Cancel transaction edit\n"
+"Cancel"
+msgstr "Annuleer"
+
+#: kmymoney2.cpp:422
+msgid ""
+"_: Delete transaction\n"
+"Delete"
+msgstr "Verwijder"
+
+#: kmymoney2.cpp:423
+msgid ""
+"_: Duplicate transaction\n"
+"Duplicate"
+msgstr "Kopiëer"
+
+#: kmymoney2.cpp:425 kmymoney2.cpp:4826 kmymoney2.cpp:5107
+msgid ""
+"_: Button text for match transaction\n"
+"Match"
+msgstr "Vergelijk"
+
+#: kmymoney2.cpp:426
+msgid ""
+"_: Accept 'imported' and 'matched' transaction\n"
+"Accept"
+msgstr "Accepteer"
+
+#: kmymoney2.cpp:428
+msgid ""
+"_: Toggle reconciliation flag\n"
+"Toggle"
+msgstr "Verander"
+
+#: kmymoney2.cpp:429
+msgid ""
+"_: Mark transaction cleared\n"
+"Cleared"
+msgstr "Betaald"
+
+#: kmymoney2.cpp:430
+msgid ""
+"_: Mark transaction reconciled\n"
+"Reconciled"
+msgstr "Gecontroleerd"
+
+#: kmymoney2.cpp:431
+msgid ""
+"_: Mark transaction not reconciled\n"
+"Not reconciled"
+msgstr "Niet gecontroleerd"
+
+#: kmymoney2.cpp:432
+msgid ""
+"_: Select all transactions\n"
+"Select all"
+msgstr "Selecteer alles"
+
+#: kmymoney2.cpp:434 kmymoney2.cpp:5497
+msgid "Goto account"
+msgstr "Ga naar rekening"
+
+#: kmymoney2.cpp:435 kmymoney2.cpp:5495
+msgid "Goto payee"
+msgstr "Ga naar relatie"
+
+#: kmymoney2.cpp:436
+msgid "Create scheduled transaction..."
+msgstr "Periodieke transactie aanmaken"
+
+#: kmymoney2.cpp:437
+msgid "Assign next number"
+msgstr "Volgend nummer toekennen"
+
+#: kmymoney2.cpp:438
+msgid ""
+"_: Combine transactions\n"
+"Combine"
+msgstr "Combineer"
+
+#: kmymoney2.cpp:440
+msgid "New investment"
+msgstr "Nieuwe belegging"
+
+#: kmymoney2.cpp:441
+msgid "Edit investment..."
+msgstr "Bewerk belegging..."
+
+#: kmymoney2.cpp:442
+msgid "Delete investment..."
+msgstr "verwijder belegging..."
+
+#: kmymoney2.cpp:443
+msgid "Online price update..."
+msgstr "Online Koers update ..."
+
+#: kmymoney2.cpp:444
+msgid "Manual price update..."
+msgstr "Handmatige Koers update..."
+
+#: kmymoney2.cpp:446
+msgid "New scheduled transaction..."
+msgstr "Nieuwe periodieke transactie..."
+
+#: kmymoney2.cpp:447
+msgid "Edit scheduled transaction..."
+msgstr "Periodieke transactie bewerken..."
+
+#: kmymoney2.cpp:448
+msgid "Delete scheduled transaction..."
+msgstr "Periodieke transactie verwijderen..."
+
+#: kmymoney2.cpp:449
+msgid "Duplicate scheduled transaction"
+msgstr "Periodieke transactie dupliceren..."
+
+#: kmymoney2.cpp:450
+msgid "Enter next transaction..."
+msgstr "Volgende transactie invoeren..."
+
+#: kmymoney2.cpp:451
+msgid "Skip next transaction..."
+msgstr "Volgende transactie overslaan"
+
+#: kmymoney2.cpp:453
+msgid "New payee"
+msgstr "Nieuwe relatie"
+
+#: kmymoney2.cpp:454
+msgid "Rename payee"
+msgstr "Relatiehernoemen"
+
+#: kmymoney2.cpp:455
+msgid "Delete payee"
+msgstr "Verwijder relatie"
+
+#: kmymoney2.cpp:457
+msgid "New budget"
+msgstr "Nieuw budget"
+
+#: kmymoney2.cpp:458
+msgid "Rename budget"
+msgstr "Hernoemen budget"
+
+#: kmymoney2.cpp:459
+msgid "Delete budget"
+msgstr "Verwijder budget"
+
+#: kmymoney2.cpp:460
+msgid "Copy budget"
+msgstr "Kopiëer budget"
+
+#: kmymoney2.cpp:461
+msgid "Change budget year"
+msgstr "Wijzig budget jaar"
+
+#: kmymoney2.cpp:462
+msgid ""
+"_: Budget based on forecast\n"
+"Forecast"
+msgstr "Prognose"
+
+#: kmymoney2.cpp:467 kmymoney2.cpp:3990 kmymoney2.cpp:3993 kmymoney2.cpp:3999
+msgid "New currency"
+msgstr "Nieuwe munteenheid"
+
+#: kmymoney2.cpp:468 kmymoney2.cpp:4021 kmymoney2.cpp:4026
+msgid "Rename currency"
+msgstr "Hernoem munteenheid"
+
+#: kmymoney2.cpp:469 kmymoney2.cpp:4039
+msgid "Delete currency"
+msgstr "Verwijder munteenheid"
+
+#: dialogs/rc.cpp:69 kmymoney2.cpp:470
+msgid "Select as base currency"
+msgstr "Kies een basisvaluta"
+
+#: kmymoney2.cpp:481
+msgid "View back"
+msgstr "Kijk terug"
+
+#: kmymoney2.cpp:482
+msgid "View forward"
+msgstr "Kijk vooruit"
+
+#: kmymoney2.cpp:611
+msgid "KMyMoney file needs saving. Save ?"
+msgstr "KMyMoney bestand is niet opgeslagen. Opslaan ?"
+
+#: kmymoney2.cpp:757
+msgid "Creating new document..."
+msgstr "Bezig met maken van nieuw document..."
+
+#: kmymoney2.cpp:869 kmymoney2.cpp:884
+msgid "Open a file."
+msgstr "Een bestand openen."
+
+#: kmymoney2.cpp:872
+msgid ""
+"%1|KMyMoney files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|KMyMoney bestanden\n"
+"%2|Alle bestanden (*.*)"
+
+#: kmymoney2.cpp:873
+msgid "Open File..."
+msgstr "Bestand Openen..."
+
+#: kmymoney2.cpp:925 kstartuplogo.cpp:100
+msgid "Loading file..."
+msgstr "Bezig met laden van bestand..."
+
+#: kmymoney2.cpp:986
+msgid ""
+"<b>%1</b> is either an invalid filename or the file does not exist. You can "
+"open another file or create a new one."
+msgstr ""
+"<b>%1</b> is een ongeldige bestandsnaam of het bestand bestaat niet. U kunt "
+"een ander bestand openen of een nieuwe aanmaken."
+
+#: kmymoney2.cpp:986
+msgid "File not found"
+msgstr "Bestand niet gevonden"
+
+#: kmymoney2.cpp:989
+msgid "File <b>%1</b> is already opened in another instance of KMyMoney"
+msgstr "Bestand <b>%1</b> is al geopend door een andere instantie van KMyMoney"
+
+#: kmymoney2.cpp:989
+msgid "Duplicate open"
+msgstr "Open duplicaat"
+
+#: kmymoney2.cpp:1001
+msgid "Saving file..."
+msgstr "Bezig met opslaan van bestand..."
+
+#: kmymoney2.cpp:1035 kmymoney2.cpp:1047 kmymoney2.cpp:1071
+#, c-format
+msgid "Additional encryption key(s) to be used: %1"
+msgstr "Aanvullende sleutels om te gebruiken: %1"
+
+#: kmymoney2.cpp:1056
+msgid "Saving file with a new filename..."
+msgstr "Bezig met opslaan van bestand met een nieuwe bestandsnaam..."
+
+#: kmymoney2.cpp:1067
+msgid "Encryption key to be used"
+msgstr "Te gebruiken sleutel"
+
+#: kmymoney2.cpp:1072
+msgid "Manage additional keys"
+msgstr "Beheer aanvullende sleutels"
+
+#: kmymoney2.cpp:1079
+msgid "No encryption"
+msgstr "Geen versleuteling"
+
+#: kmymoney2.cpp:1102
+msgid ""
+"_: KMyMoney (Filefilter)\n"
+"KMyMoney files"
+msgstr "KMyMoney bestanden"
+
+#: kmymoney2.cpp:1103
+msgid ""
+"_: XML (Filefilter)\n"
+"XML files"
+msgstr "XML bestanden"
+
+#: kmymoney2.cpp:1104
+msgid ""
+"_: Anonymous (Filefilter)\n"
+"Anonymous files"
+msgstr "Anonieme bestanden"
+
+#: kmymoney2.cpp:1105
+msgid "All files"
+msgstr "Alle bestanden"
+
+#: kmymoney2.cpp:1193
+msgid "Saving file to database..."
+msgstr "Bestand opslaan in database..."
+
+#: kmymoney2.cpp:1207
+msgid "Cannot save to current database."
+msgstr "Kan niet opslaan in huidige database."
+
+#: kmymoney2.cpp:1225
+msgid "Closing window..."
+msgstr "Bezig met sluiten van venster..."
+
+#: kmymoney2.cpp:1228 kmymoney2.cpp:1249
+msgid "The file has been changed, save it ?"
+msgstr "Het bestand is veranderd, wilt u het opslaan ?"
+
+#: kmymoney2.cpp:1339 kmymoney2.cpp:1352
+msgid "Ready."
+msgstr "Gereed."
+
+#: kmymoney2.cpp:1397 kmymoney2.cpp:1433
+msgid "No KMyMoneyFile open"
+msgstr "Geen KMyMoney bestand geopend"
+
+#: kmymoney2.cpp:1401
+msgid "Viewing personal data..."
+msgstr "Bekijk persoonlijke gegevens..."
+
+#: kmymoney2.cpp:1408
+msgid "Edit Personal Data"
+msgstr "Persoonlijke gegevens Bewerken"
+
+#: kmymoney2.cpp:1424
+#, c-format
+msgid "Unable to store user information: %1"
+msgstr "Kan gebruikers informatie niet opslaan: %1"
+
+#: kmymoney2.cpp:1447
+msgid "Importing account templates."
+msgstr "Bezig met importeren van rekening sjablonen."
+
+#: kmymoney2.cpp:1462
+msgid "Unable to import template(s): %1, thrown in %2:%3"
+msgstr "Kan voorbeeld bestand niet importeren: %1 ingevoegd in %2: %3"
+
+#: kmymoney2.cpp:1471
+msgid "Exporting account templates."
+msgstr "Exporteren rekeningen voorbeelden."
+
+#: kmymoney2.cpp:1474
+msgid ""
+"*.kmt|KMyMoney template files\n"
+"*.*|All files"
+msgstr ""
+"*.kmt|KMyMoney sjabloon bestanden\n"
+"*.*|Alle bestanden"
+
+#: kmymoney2.cpp:1475
+msgid "Save as..."
+msgstr "Opslaan als..."
+
+#: kmymoney2.cpp:1517
+msgid "Importing file..."
+msgstr "Bezig met importeren van bestand..."
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "The statements have been processed with the following results:"
+msgstr "Dit afschrift is verwerkt met de volgende resultaten:"
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:1754 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "Statement stats"
+msgstr "Bankafschrift statistieken"
+
+#: kmymoney2.cpp:1602
+msgid ""
+"You cannot import GnuCash data into an existing file. Do you wish to save "
+"this file?"
+msgstr ""
+"U kunt GnuCash gegevens niet importeren in een bestaand bestand. Wilt u dit "
+"bestaand opslaan?"
+
+#: kmymoney2.cpp:1615
+msgid "Importing a Gnucash file."
+msgstr "Bezig met importeren van een Gnucash bestand."
+
+#: kmymoney2.cpp:1618
+msgid ""
+"%1|Gnucash files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Gnucash bestanden\n"
+"%2|Alle bestanden (*.*)"
+
+#: kmymoney2.cpp:1619
+msgid "Import Gnucash file..."
+msgstr "Gnucash bestand importeren..."
+
+#: kmymoney2.cpp:1658
+msgid "Importing an XML Statement."
+msgstr "Importeren van een XML afschrift."
+
+#: kmymoney2.cpp:1661
+msgid ""
+"%1|XML files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|XML bestanden\n"
+"%2|Alle bestanden (*.*)"
+
+#: kmymoney2.cpp:1662
+msgid "Import XML Statement..."
+msgstr "Importeer XML afschrift..."
+
+#: kmymoney2.cpp:1718
+msgid "Error importing %1: This file is not a valid KMM statement file."
+msgstr "Fout bij importeren van %1. Dit bestand is geen geldig KMM bestand."
+
+#: kmymoney2.cpp:1718
+msgid "Invalid Statement"
+msgstr "Ongeldige afschrift"
+
+#: kmymoney2.cpp:1754
+msgid "The statement has been processed with the following results:"
+msgstr "Dit afschrift is verwerkt met de volgende resultaten:"
+
+#: kmymoney2.cpp:1763
+msgid "Exporting file..."
+msgstr "Exporteren van bestand..."
+
+#: kmymoney2.cpp:1786
+msgid "The file <b>%1</b> already exists. Do you really want to override it?"
+msgstr "Het bestand <b>%1</b> bestaat al. Wilt u deze overschrijven?"
+
+#: kmymoney2.cpp:1786
+msgid "File already exists"
+msgstr "Bestand bestaat al"
+
+#: dialogs/rc.cpp:347 dialogs/rc.cpp:649 dialogs/rc.cpp:798 kmymoney2.cpp:1815
+msgid "General"
+msgstr "Algemeen"
+
+#: kmymoney2.cpp:1816
+msgid "Register"
+msgstr "Kasboek"
+
+#: kmymoney2.cpp:1817 views/khomeview.cpp:88 views/kmymoneyview.cpp:136
+msgid "Home"
+msgstr "Startpagina"
+
+#: kmymoney2.cpp:1818 views/kmymoneyview.cpp:176
+msgid ""
+"Scheduled\n"
+"transactions"
+msgstr ""
+"Betalings-\n"
+"agenda"
+
+#: kmymoney2.cpp:1819
+msgid "Encryption"
+msgstr "Versleuteling"
+
+#: kmymoney2.cpp:1820
+msgid "Colors"
+msgstr "Kleuren"
+
+#: dialogs/rc.cpp:344 dialogs/settings/rc.cpp:107 kmymoney2.cpp:1822
+#: widgets/rc.cpp:33
+msgid "Online Quotes"
+msgstr "Online (wissel-)koersen"
+
+#: kmymoney2.cpp:1823 reports/pivottable.cpp:2426 views/kmymoneyview.cpp:251
+#: views/kmymoneyview.cpp:253 views/kreportsview.cpp:1415 views/rc.cpp:41
+msgid "Forecast"
+msgstr "Prognose"
+
+#: kmymoney2.cpp:1824
+msgid "Plugins"
+msgstr "invoegtoepassingen"
+
+#: kmymoney2.cpp:1893
+msgid ""
+"The file must be saved first before it can be backed up. Do you want to "
+"continue?"
+msgstr ""
+"Het bestand moet eerst worden opgeslagen voordat een reservekopie kan worden "
+"gemaakt. Wilt u doorgaan?"
+
+#: kmymoney2.cpp:1910
+msgid ""
+"The current implementation of the backup functionality only supports local "
+"files as source files! Your current source file is '%1'."
+msgstr ""
+"De huidige reservekopie functionaliteit ondersteunt alleen lokaal opgeslagen "
+"bestanden als bronbestand. Uw huidige bronbestand is '%1'."
+
+#: kmymoney2.cpp:1913
+msgid "Local files only"
+msgstr "Uitsluitend lokale bestanden"
+
+#: kmymoney2.cpp:1928
+#, c-format
+msgid "Mounting %1"
+msgstr "Koppelen van %1"
+
+#: kmymoney2.cpp:1967
+msgid "Backup file for today exists on that device. Replace ?"
+msgstr ""
+"Er bestaat al een reservekopie van vandaag. Moet deze worden vervangen?"
+
+#: dialogs/rc.cpp:7 kmymoney2.cpp:1967 kmymoney2.cpp:1994 kmymoney2.cpp:2024
+#: kmymoney2.cpp:2032 kmymoney2.cpp:2057 kmymoney2.cpp:2059
+msgid "Backup"
+msgstr "Reservekopie"
+
+#: kmymoney2.cpp:1967
+msgid "&Replace"
+msgstr "&Vervang"
+
+#: kmymoney2.cpp:1972 kmymoney2.cpp:1997 kmymoney2.cpp:2016 kmymoney2.cpp:2035
+#, c-format
+msgid "Unmounting %1"
+msgstr "Ontkoppelen van %1"
+
+#: kmymoney2.cpp:1987
+#, c-format
+msgid "Writing %1"
+msgstr "Schrijven naar %1"
+
+#: kmymoney2.cpp:1994
+msgid "Error mounting device"
+msgstr "Fout bij het koppelen van apparaat"
+
+#: converter/mymoneygncreader.cpp:1995 kmymoney2.cpp:2023 kmymoney2.cpp:2055
+msgid "Done"
+msgstr "Gereed"
+
+#: kmymoney2.cpp:2024 kmymoney2.cpp:2057
+msgid "File successfully backed up"
+msgstr "Reservekopie van bestand is geslaagd"
+
+#: kmymoney2.cpp:2032
+msgid "Error copying file to device"
+msgstr "Fout bij het kopiëren"
+
+#: kmymoney2.cpp:2059
+msgid "Error unmounting device"
+msgstr "Fout bij het ontkoppelen van apparaat"
+
+#: kmymoney2.cpp:2143
+#, c-format
+msgid "Cannot add institution: %1"
+msgstr "Kan financiële instelling niet toevoegen: %1"
+
+#: kmymoney2.cpp:2185
+#, c-format
+msgid "Unable to store institution: %1"
+msgstr "Kan financiële instelling niet opslaan: %1"
+
+#: kmymoney2.cpp:2192
+#, c-format
+msgid "Unable to edit institution: %1"
+msgstr "Kan financiële instelling niet bewerken: %1"
+
+#: kmymoney2.cpp:2203
+msgid "Do you really want to delete institution <b>%1</b> ?"
+msgstr "Wilt u deze financiële instelling echt verwijderen <b>%1</b> ?"
+
+#: kmymoney2.cpp:2211 kmymoney2.cpp:2215
+#, c-format
+msgid "Unable to delete institution: %1"
+msgstr "Kan financiële instelling niet verwijderen: %1"
+
+#: kmymoney2.cpp:2268
+#, c-format
+msgid "Unable to find account: %1"
+msgstr "Kan rekening niet vinden: %1"
+
+#: kmymoney2.cpp:2309
+msgid ""
+"This account is a liability and if the opening balance represents money "
+"owed, then it should be negative. Negate the amount?\n"
+"\n"
+"Please click Yes to change the opening balance to %1,\n"
+"Please click No to leave the amount as %2,\n"
+"Please click Cancel to abort the account creation."
+msgstr ""
+"Deze rekening is een schuld, als het beginsaldo geld betreft dat u bezit, "
+"dan moet dit saldo negatief zijn. Dit bedrag negatief maken?\n"
+"\n"
+"Klik op Ja om het beginsaldo te wijzigen in %1,\n"
+"Klik op Nee om het beginsaldo %2 te behouden,\n"
+"Klik op Annuleer om het aanmaken van de rekening af te breken."
+
+#: kmymoney2.cpp:2345 kmymoney2.cpp:2346
+msgid "Loan payout"
+msgstr "Uitbetaling van lening"
+
+#: dialogs/knewloanwizard.cpp:892 kmymoney2.cpp:2374
+#, c-format
+msgid "Unable to add account: %1"
+msgstr "Kan rekening niet toevoegen: %1"
+
+#: kmymoney2.cpp:2392
+msgid ""
+"The category <b>%1</b> currently does not exist. Do you want to create it?"
+"<p><i>The parent account will default to <b>%2</b> but can be changed in the "
+"following dialog</i>."
+msgstr ""
+"De rubriek <b>%1</b> bestaat nog niet. Wilt u deze aanmaken?<p><i>De "
+"bijbehorende rekening is <b>%2</b> maar kan worden gewijzigd in het volgende "
+"dialoogvenster</i>."
+
+#: kmymoney2.cpp:2392
+msgid "Create category"
+msgstr "Creëer rubriek"
+
+#: kmymoney2.cpp:2429
+msgid "Create a new Category"
+msgstr "Creëer een nieuwe rubriek"
+
+#: kmymoney2.cpp:2505
+#, c-format
+msgid "Unable to create account: %1"
+msgstr "Kan Bank niet aanmaken: %1"
+
+#: kmymoney2.cpp:2516
+msgid ""
+"The security <b>%1</b> currently does not exist as sub-account of <b>%2</b>. "
+"Do you want to create it?"
+msgstr ""
+"Het aandeel <b>%1</b> bestaat nog niet als een rubriek onder <b>%2</b>. Wilt "
+"u deze aanmaken?"
+
+#: kmymoney2.cpp:2517
+msgid "Create security"
+msgstr "Aandeel aanmaken"
+
+#: kmymoney2.cpp:2551
+msgid "Do you really want to delete the investment <b>%1</b>?"
+msgstr "Wilt u de belegging daadwerkelijk verwijderen <b>%1</b>?"
+
+#: kmymoney2.cpp:2551
+msgid "Delete investment"
+msgstr "Belegging verwijderen"
+
+#: kmymoney2.cpp:2558
+#, c-format
+msgid "Unable to delete investment: %1"
+msgstr "Kan belegging niet verwijderen: %1"
+
+#: kmymoney2.cpp:2640 kmymoney2.cpp:2646
+msgid "Unable to add scheduled transaction: "
+msgstr "Kan periodieke transactie niet toevoegen: "
+
+#: kmymoney2.cpp:2722
+msgid "Adjusting transactions..."
+msgstr "Transacties aanpassen..."
+
+#: kmymoney2.cpp:2747
+msgid "Adjusting scheduled transactions..."
+msgstr "Periodieke transacties worden aangepast..."
+
+#: kmymoney2.cpp:2765
+msgid "Adjusting budgets..."
+msgstr "Budgetten worden aangepast..."
+
+#: kmymoney2.cpp:2783
+msgid ""
+"Unable to exchange category <b>%1</b> with category <b>%2</b>. Reason: %3"
+msgstr "Kan rubriek <b>%1</b> niet vervangen door rubriek <b>%2</b>, Reden: %3"
+
+#: kmymoney2.cpp:2804
+msgid "Do you really want to delete category <b>%1</b>?"
+msgstr "Wilt u rubriek <b>%1</b> daadwerkelijk verwijderen?"
+
+#: kmymoney2.cpp:2811
+msgid "Unable to delete category <b>%1</b>. Cause: %2"
+msgstr "Kan rubriek <b>%1</b> niet verwijderen. Oorzaak: %2"
+
+#: kmymoney2.cpp:2823
+msgid ""
+"Do you want to delete category <b>%1</b> with all its sub-categories or only "
+"the category itself? If you only delete the category itself, all its sub-"
+"categories will be made sub-categories of <b>%2</b>."
+msgstr ""
+"Wilt u categorie <b>%1</b> vervangen inclusief alle subcategorieën of alleen "
+"de categorie zelf? Als u alleen de categorie wilt vervangen, dan worden alle "
+"subcategorieën gekoppeld aan rubriek <b>%2</b>."
+
+#: kmymoney2.cpp:2827
+msgid "Delete all"
+msgstr "Alles verwijderen"
+
+#: kmymoney2.cpp:2828
+msgid "Just the category"
+msgstr "Alleen de rubriek"
+
+#: kmymoney2.cpp:2858
+msgid ""
+"Some sub-categories of category <b>%1</b> cannot be deleted, because they "
+"are still used. They will be made sub-categories of <b>%2</b>. Proceed?"
+msgstr ""
+"Sommige subcategorieën van de rubriek <b>%1</b> kunnen niet worden "
+"verwijderd. Deze zijn nog in gebruik. Ze worden verplaatst naar rubriek <b>%"
+"2</b>. Doorgaan?"
+
+#: kmymoney2.cpp:2878
+msgid "Unable to delete a sub-category of category <b>%1</b>. Reason: %2"
+msgstr "Kan subcategorie van rubriek <b>%1</b> niet verwijderen. Reden: %2"
+
+#: kmymoney2.cpp:2889
+msgid "Do you really want to delete account <b>%1</b>?"
+msgstr "Wilt u rekening <b>%1</b> daadwerkelijk verwijderen?"
+
+#: kmymoney2.cpp:2901
+msgid "Unable to delete account '%1'. Cause: %2"
+msgstr "Kan rekening '%1' niet verwijderen. Oorzaak: %2"
+
+#: kmymoney2.cpp:2917
+msgid "Edit account '%1'"
+msgstr "Bewerk rekening '%1'"
+
+#: kmymoney2.cpp:2922
+msgid "Edit category '%1'"
+msgstr "Bewerk rubriek '%1'"
+
+#: kmymoney2.cpp:3008
+msgid "Unable to modify account '%1'. Cause: %2"
+msgstr "Kan rekeningen '%1' niet aanpassen. Oorzaak: %2"
+
+#: kmymoney2.cpp:3065
+msgid ""
+"KMyMoney has detected some overdue scheduled transactions for this account. "
+"Do you want to enter those scheduled transactions now?"
+msgstr ""
+"KMyMoney heeft een aantal periodieke transacties gedetecteerd die nog moeten "
+"worden betaald. Wilt u deze transacties nu invoeren?"
+
+#: kmymoney2.cpp:3065
+msgid "Scheduled transactions found"
+msgstr "Periodieke transacties gevonden"
+
+#: kmymoney2.cpp:3163
+msgid ""
+"You are about to finish the reconciliation of this account with a difference "
+"between your bank statement and the transactions marked as cleared.\n"
+"Are you sure you want to finish the reconciliation ?"
+msgstr ""
+"U staat op het punt het sluitend maken van deze rekening af te sluiten. Er "
+"is echter een verschil in saldo tussen uw bankafschrift en de transacties "
+"die u als betaald heeft gemarkeerd.\n"
+"Weet u zeker dat u nu wilt afsluiten?"
+
+#: kmymoney2.cpp:3165
+msgid "Confirm end of reconciliation"
+msgstr "Bevestig stoppen met sluitend maken van de rekening"
+
+#: kmymoney2.cpp:3339
+msgid ""
+"You have closed this account. It remains in the system because you have "
+"transactions which still refer to it, but is not shown in the views. You can "
+"make it visible again by going to the View menu and selecting <b>Show all "
+"accounts</b> or by unselecting the <b>Don't show closed accounts</b> setting."
+msgstr ""
+"Deze rekening is gesloten. De rekening blijft bestaan omdat er transacties "
+"aan zijn gekoppeld, maar zal niet meer zichtbaar zijn. U kunt de rekening "
+"weer zichtbaar maken in het menu Beeld en <b>Toon alle rekeningen</b> te "
+"kiezen of door het uitvinken van de optie <b>Verberg gesloten rekeningen</b>."
+
+#: kmymoney2.cpp:3379
+msgid "<b>%1</b> cannot be moved to institution <b>%2</b>. Reason: %3"
+msgstr ""
+"<b>%1</b> kan niet naar de financiële instelling <b>%2</b> verplaatst "
+"worden. Reden: %3"
+
+#: kmymoney2.cpp:3393
+msgid "<b>%1</b> cannot be moved to <b>%2</b>. Reason: %3"
+msgstr ""
+"<b>%1</b> kan niet verplaatst worden naar <b>%2</b> verplaatst worden. "
+"Reden: %3"
+
+#: kmymoney2.cpp:3408
+msgid "%1 YTD Account Transactions"
+msgstr "%1 Rekening transacties tot vandaag"
+
+#: dialogs/kbalancechartdlg.cpp:71 kmymoney2.cpp:3409
+#: views/kforecastview.cpp:650 views/khomeview.cpp:276
+#: views/khomeview.cpp:1384 views/kreportsview.cpp:619
+msgid "Generated Report"
+msgstr "Aangemaakt rapport"
+
+#: dialogs/rc.cpp:324 dialogs/settings/rc.cpp:80 kmymoney2.cpp:3411
+#: views/kreportsview.cpp:1062 views/rc.cpp:58 views/rc.cpp:59
+msgid "Transactions"
+msgstr "Transacties"
+
+#: kmymoney2.cpp:3449
+#, c-format
+msgid "Unable to add scheduled transaction: %1"
+msgstr "Kan periodieke transactie niet toevoegen: %1"
+
+#: kmymoney2.cpp:3449
+msgid "Add scheduled transaction"
+msgstr "Periodieke transactie invoeren"
+
+#: kmymoney2.cpp:3489
+msgid ""
+"You have entered a scheduled transaction date of <b>%1</b>. Because the "
+"scheduled transaction was last paid on <b>%2</b>, KMyMoney will "
+"automatically adjust the scheduled transaction date to the next date unless "
+"the last payment date is reset. Do you want to reset the last payment date?"
+msgstr ""
+"U hebt een geplande transactie datum <b>%1</b> ingevoerd. Omdat de "
+"periodieke transactie voor het laatst betaald is op <b>%2</b> zal KMyMoney "
+"de plandatum aanpassen naar de eerstvolgende vervaldatum, tenzij u de datum "
+"van de laatste betaling aanpast. Wilt u de datum van de laatste betaling "
+"aanpassen?"
+
+#: kmymoney2.cpp:3489
+msgid "Reset Last Payment Date"
+msgstr "Herstel laatste betaaldatum"
+
+#: kmymoney2.cpp:3499 kmymoney2.cpp:3519 kmymoney2.cpp:3531
+msgid "Unable to modify scheduled transaction '%1'"
+msgstr "Kan periodieke transactie niet wijzigen: '%1'"
+
+#: kmymoney2.cpp:3543
+msgid "Are you sure you want to delete the scheduled transaction <b>%1</b>?"
+msgstr "Weet u zeker dat u periodieke transactie <b>%1</b> wilt verwijderen?"
+
+#: kmymoney2.cpp:3546
+msgid ""
+"In case of loan payments it is currently not possible to recreate the "
+"scheduled transaction."
+msgstr ""
+"Indien het een aflossing van een lening betreft, is het niet mogelijk de "
+"periodieke transactie aan te passen."
+
+#: kmymoney2.cpp:3555
+msgid "Unable to remove scheduled transaction '%1'"
+msgstr "Kan periodieke transactie '%1' niet verwijderen"
+
+#: kmymoney2.cpp:3569
+#, c-format
+msgid ""
+"_: Copy of scheduled transaction name\n"
+"Copy of %1"
+msgstr "Kopie van %1"
+
+#: kmymoney2.cpp:3581 kmymoney2.cpp:4352
+msgid "Unable to duplicate transaction(s): %1, thrown in %2:%3"
+msgstr "Kan transactie(s) niet kopiëren: %1, geplaatst in %2:%3"
+
+#: kmymoney2.cpp:3595
+msgid ""
+"Do you really want to skip the <b>%1</b> transaction scheduled for <b>%2</b>?"
+msgstr ""
+"Weet u zeker dat u de <b>%1</b> transactie gepland op <b>%2</b> wilt "
+"overslaan?"
+
+#: kmymoney2.cpp:3605
+msgid "Unable to skip scheduled transaction <b>%1</b>."
+msgstr "Kan periodieke transactie <b>%1</b>niet overslaan."
+
+#: kmymoney2.cpp:3618
+msgid "Unknown scheduled transaction '%1'"
+msgstr "Onbekende periodieke transactie '%1'"
+
+#: kmymoney2.cpp:3673
+msgid ""
+"Are you sure you wish to stop this scheduled transaction from being entered "
+"into the register?\n"
+"\n"
+"KMyMoney will prompt you again next time it starts unless you manually enter "
+"it later."
+msgstr ""
+"Weet u zeker dat u wilt stoppen met het invoeren van deze periodieke "
+"transactie in het kasboek?\n"
+"\n"
+"De eerstvolgende keer dat KMyMoney wordt gestart wordt u hier weer aan "
+"herinnerd."
+
+#: kmymoney2.cpp:3725 kmymoney2.cpp:3732
+msgid "Unable to enter scheduled transaction '%1'"
+msgstr "Kan periodieke transactie niet invoeren '%1'"
+
+#: kmymoney2.cpp:3743 kmymoney2.cpp:3783
+msgid "New Payee"
+msgstr "Nieuwe relatie"
+
+#: kmymoney2.cpp:3745
+msgid "Do you want to add <b>%1</b> as payer/receiver ?"
+msgstr "Wilt u <b>%1</b> toevoegen als relatie?"
+
+#: converter/mymoneystatementreader.cpp:892 kmymoney2.cpp:3747
+msgid "New payee/receiver"
+msgstr "Nieuwe relatie"
+
+#: kmymoney2.cpp:3773
+msgid "Unable to add payee"
+msgstr "Kan relatieniet toevoegen"
+
+#: kmymoney2.cpp:3826
+msgid "Do you really want to remove the payee <b>%1</b>?"
+msgstr "Wilt u relatie <b>%1</b> echt verwijderen?"
+
+#: kmymoney2.cpp:3828
+msgid "Do you really want to remove all selected payees?"
+msgstr "Wilt u alle geselecteerde relaties echt verwijderen?"
+
+#: kmymoney2.cpp:3830
+msgid "Remove Payee"
+msgstr "RelatieVerwijderen"
+
+#: kmymoney2.cpp:3870
+msgid ""
+"At least one transaction/scheduled transaction is still referenced by a "
+"payee. Currently you have all payees selected. However, at least one payee "
+"must remain so that the transaction/scheduled transaction can be reassigned."
+msgstr ""
+"Tenminste één (periodieke) transactie verwijst nog naar een relatie. Op dit "
+"moment heeft u alle relaties geselecteerd. U dient slechts één relatiete "
+"selecteren zodat deze (periodieke) transactie daaraan kan worden gekoppeld."
+
+#: kmymoney2.cpp:3925
+msgid "Unable to reassign payee of transaction/split"
+msgstr "Kan relatieniet aan andere transactie koppelen"
+
+#: converter/mymoneyqifreader.cpp:534 converter/mymoneystatementreader.cpp:959
+#: kmymoney2.cpp:3926 kmymoney2.cpp:3983 views/kbudgetview.cpp:636
+#: views/kbudgetview.cpp:737 views/kbudgetview.cpp:751
+#: views/kpayeesview.cpp:519 views/kpayeesview.cpp:870
+msgid "thrown in"
+msgstr "Ingevoegd"
+
+#: kmymoney2.cpp:3982
+msgid "Unable to remove payee(s)"
+msgstr "Kan relatie(s) niet verwijderen"
+
+#: kmymoney2.cpp:3990
+msgid "Enter ISO 4217 code for the new currency"
+msgstr "ISO 4217 code invoeren voor de nieuwe munteenheid"
+
+#: kmymoney2.cpp:3999
+#, c-format
+msgid "Cannot create new currency. %1"
+msgstr "Kan nieuwe munteenheid niet aanmaken. %1"
+
+#: kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, c-format
+msgid "Cannot rename currency. %1"
+msgstr "Kan nieuwe munteenheid niet hernoemen. %1"
+
+#: kmymoney2.cpp:4039
+msgid "Cannot delete currency %1. %2"
+msgstr "Kan munteenheid %1 niet verwijderen. %2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Cannot set %1 as base currency: %2"
+msgstr "Kan %1 niet als standaard munteenheid instellen: %2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Set base currency"
+msgstr "Kies basisvaluta"
+
+#: kmymoney2.cpp:4065
+#, c-format
+msgid "Budget %1"
+msgstr "Budget %1"
+
+#: kmymoney2.cpp:4075
+msgid "Budget %1 (%2)"
+msgstr "Budget %1 (%2)"
+
+#: kmymoney2.cpp:4090 kmymoney2.cpp:4139
+msgid "Unable to add budget: %1, thrown in %2:%3"
+msgstr "Kan budget niet toevoegen: %1 geplaatst in %2: %3"
+
+#: kmymoney2.cpp:4105
+msgid "Do you really want to remove the budget <b>%1</b>?"
+msgstr "Wilt u budget <b>%1</b> daadwerkelijk verwijderen?"
+
+#: kmymoney2.cpp:4107
+msgid "Do you really want to remove all selected budgets?"
+msgstr "Wilt u alle geselecteerde budgetten daadwerkelijk verwijderen?"
+
+#: kmymoney2.cpp:4109
+msgid "Remove Budget"
+msgstr "Budget verwijderen"
+
+#: kmymoney2.cpp:4122
+msgid "Unable to remove budget: %1, thrown in %2:%3"
+msgstr "Kan budget%1 niet verwijderen, geplaatst in %2: %3"
+
+#: kmymoney2.cpp:4134 views/kreportsview.cpp:659
+#, c-format
+msgid "Copy of %1"
+msgstr "Kopie van %1"
+
+#: kmymoney2.cpp:4164
+msgid "Select year"
+msgstr "Selecteer jaar"
+
+#: kmymoney2.cpp:4164
+msgid "Budget year"
+msgstr "Budget jaar"
+
+#: kmymoney2.cpp:4176 kmymoney2.cpp:4214 kmymoney2.cpp:4274
+msgid "Unable to modify budget: %1, thrown in %2:%3"
+msgstr "Kan budget %1 niet aanpassen. Geplaatst in %2:%3"
+
+#: kmymoney2.cpp:4192 kmymoney2.cpp:4250
+msgid ""
+"The current budget already contains data. Continuing will replace all "
+"current values of this budget."
+msgstr ""
+"Het huidige budget bevat al gegevens. Als u doorgaat worden alle gegevens "
+"vervangen."
+
+#: kmymoney2.cpp:4222
+msgid ""
+"Please be aware that changes made in the following dialog affect all KDE "
+"applications not only KMyMoney."
+msgstr ""
+"Let op dat alle wijzigingen die u in de volgende dialoog aanbrengt van "
+"toepassing zijn op alle KDE applicaties en niet alleen KMyMoney."
+
+#: kmymoney2.cpp:4292
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to delete the transactions anyway?"
+msgstr ""
+"Tenminste één splitsing van deze transactie is gecontroleerd. Wilt u "
+"doorgaan met het verwijderen van deze transacties?"
+
+#: kmymoney2.cpp:4295 views/kgloballedgerview.cpp:1043
+msgid "Transaction already reconciled"
+msgstr "Transactie is al gecontroleerd"
+
+#: kmymoney2.cpp:4301
+msgid "Do you really want to delete the selected transaction?"
+msgstr "Wilt u de geselecteerde transacties daadwerkelijk verwijderen?"
+
+#: kmymoney2.cpp:4303
+msgid "Do you really want to delete all %1 selected transactions?"
+msgstr "Wilt u alle %1 geselecteerde transacties daadwerkelijk verwijderen?"
+
+#: kmymoney2.cpp:4305
+msgid "Delete transaction"
+msgstr "Transactie verwijderen"
+
+#: kmymoney2.cpp:4306
+msgid "Deleting transactions"
+msgstr "Transacties verwijderen"
+
+#: kmymoney2.cpp:4321
+msgid "Duplicating transactions"
+msgstr "Kopiëren van transacties"
+
+#: kmymoney2.cpp:4378
+msgid "Unable to delete transaction(s): %1, thrown in %2:%3"
+msgstr "Kan transactie(s) niet verwijderen, geplaatst in %2:%3"
+
+#: kmymoney2.cpp:4452 kmymoney2.cpp:4622
+msgid "Unable to modify transaction: %1, thrown in %2:%3"
+msgstr "Kan transactie(s) niet aanpassen, geplaatst in %2:%3"
+
+#: kmymoney2.cpp:4514
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling and<br>- <b>Cancel</b> returns to the "
+"transaction editor.<p>You can also select an option to save the transaction "
+"automatically when e.g. selecting another transaction."
+msgstr ""
+"Wilt u stoppen met het wijzigen van de transactie zonder deze op te slaan?"
+"<p>- <b>Ja</b> annuleert het wijzigen<br>- <b>Nee</b>Slaat de transactie "
+"eerst op en annuleert vervolgens en<br>- <b>Annuleer</b> brengt u terug naar "
+"de transactie editor.<p>U kunt ook de optie kiezen om transacties "
+"automatisch op te slaan als u een andere transactie selecteert."
+
+#: kmymoney2.cpp:4514 kmymoney2.cpp:4517
+msgid "Cancel transaction edit"
+msgstr "Annuleer transactie bewerken"
+
+#: kmymoney2.cpp:4517
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling.<p>You can also select an option to save the "
+"transaction automatically when e.g. selecting another transaction."
+msgstr ""
+"Wilt u stoppen met het wijzigen van de transactie zonder deze op te slaan?"
+"<p>- <b>Ja</b> annuleert de wijzigingen<br>- <b>Nee</b> Slaat de transactie "
+"eerst op en annuleert vervolgens en<br>- <b>Annuleren</b> brengt u terug "
+"naar de transactie editor.<p> U kunt ook instellen via het menu dat "
+"transacties automatisch worden opgeslagen als u een andere transactie "
+"selecteert."
+
+#: kmymoney2.cpp:4667
+msgid "Unable to accept transaction: %1, thrown in %2:%3"
+msgstr "Kan transactie niet accepteren: %1, geplaatst in %2:%3"
+
+#: kmymoney2.cpp:4846
+msgid "Unable to unmatch the selected transactions"
+msgstr "Kan deze transacties niet vergelijken"
+
+#: kmymoney2.cpp:4885
+msgid "No manually entered transaction selected for matching"
+msgstr "Geen handmatig ingevoerde transactie geselecteerd om te vergelijken"
+
+#: kmymoney2.cpp:4887
+msgid "No imported transaction selected for matching"
+msgstr "Geen geimporteerde transactie geselecteerd om te vergelijken"
+
+#: kmymoney2.cpp:4895
+msgid "Unable to match the selected transactions"
+msgstr "Kan deze transacties niet vergelijken"
+
+#: kmymoney2.cpp:5097
+msgid "Create a new transaction"
+msgstr "Een nieuwe transactie toevoegen"
+
+#: kmymoney2.cpp:5163
+msgid "Duplicate the current selected transactions"
+msgstr "Dupliceer de geselecteerde transacties"
+
+#: kmymoney2.cpp:5223
+msgid ""
+"_: Button text for unmatch transaction\n"
+"Unmatch"
+msgstr "Niet vergelijken"
+
+#: kmymoney2.cpp:5451 kmymoney2.cpp:5473
+msgid "Goto '%1'"
+msgstr "Ga naar '%1'"
+
+#: kmymoney2.cpp:5582
+msgid "Running consistency check..."
+msgstr "Consistentie controle loopt..."
+
+#: kmymoney2.cpp:5590
+#, c-format
+msgid "Consistency check failed: %1"
+msgstr "Consistentie Controle mislukt: %1"
+
+#: kmymoney2.cpp:5594
+msgid "Consistency check result"
+msgstr "Resultaat van consistentie controle"
+
+#: kmymoney2.cpp:5603
+msgid "Checking for overdue scheduled transactions..."
+msgstr "Controle op periodieke transacties die vervallen zijn..."
+
+#: kmymoney2.cpp:5740
+msgid ""
+"You must first select a KMyMoney file before you can import a statement."
+msgstr ""
+"U moet eerst een KMyMoney bestand selecteren alvorens u afschrift kunt "
+"importeren."
+
+#: kmymoney2.cpp:5746
+msgid "Importing a statement via Web Connect"
+msgstr "Importeren van een afschrift via Web Connect"
+
+#: kmymoney2.cpp:5759
+msgid ""
+"Unable to import %1 using %2 plugin. The plugin returned the following "
+"error: %3"
+msgstr ""
+"Kon %1 niet importeren met invoegtoepassing %2. De invoegtoepassing gaf de "
+"volgende foutmelding terug: %3"
+
+#: kmymoney2.cpp:5759 plugins/ofximport/ofximporterplugin.cpp:646
+msgid "Importing error"
+msgstr "importeer fout"
+
+#: kmymoney2.cpp:5780
+msgid "All messages have been enabled."
+msgstr "Alle berichten staan aan."
+
+#: kmymoney2.cpp:5780
+msgid "All messages"
+msgstr "Alle berichten"
+
+#: kmymoney2.cpp:5855
+msgid "Auto saving..."
+msgstr "Automatisch opslaan..."
+
+#: kmymoney2.cpp:5913
+msgid "Unable to setup online parameters for account ''%1'"
+msgstr "Kan parameters voor online bankieren niet instellen ''%1'"
+
+#: kmymoney2.cpp:5928
+msgid ""
+"Do you really want to remove the mapping of account <b>%1</b> to an online "
+"account? Depending on the details of the online banking method used, this "
+"action cannot be reverted."
+msgstr ""
+"Wet u zeker dat u de koppeling van rekening <b>%1</b> met een online "
+"rekening wilt verwijderen? Afhankelijk van de gebruikte methode voor online "
+"bankieren kan het zijn dat deze actie omkeerbaar is."
+
+#: kmymoney2.cpp:5928
+msgid "Remove mapping to online account"
+msgstr "Verwijderen koppeling naar online rekening"
+
+#: kmymoney2.cpp:5939
+#, c-format
+msgid "Unable to unmap account from online account: %1"
+msgstr "Kan koppeling naar online rekening %1 niet verwijderen."
+
+#: kmymoney2.cpp:5956
+msgid " (Brokerage)"
+msgstr " (Afsluitprovisie)"
+
+#: kmymoney2.cpp:5957
+msgid ""
+"You try to map a brokerage account to an online account. This is usually not "
+"advisable. In general, the investment account should be mapped to the online "
+"account. Please cancel if you intended to map the investment account, "
+"continue otherwise"
+msgstr ""
+"U probeert een kasrekening te koppelen aan een online rekening. Wij raden u "
+"af dit te doen. Over het algemeen wordt aan een online rekening een "
+"beleggingsrekening gekoppeld. Annuleer deze handeling indien u van plan was "
+"een beleggingsrekening te koppelen. Anders kunt u gewoon doorgaan."
+
+#: kmymoney2.cpp:5957
+msgid "Mapping brokerage account"
+msgstr "Koppel kasrekening"
+
+#: kmymoney2.cpp:5964
+msgid "Select online banking plugin"
+msgstr "Selecteer invoegtoepassing voor online bankieren "
+
+#: kmymoney2.cpp:6005
+#, c-format
+msgid "Unable to map account to online account: %1"
+msgstr "Kan koppeling naar online rekening %1 niet aanmaken."
+
+#: converter/mymoneyqifreader.cpp:407 converter/mymoneytemplate.cpp:73
+#: views/kmymoneyview.cpp:590
+msgid "Error while loading file '%1'!"
+msgstr "Fout bij het laden van bestand '%1'!"
+
+#: converter/mymoneyqifreader.cpp:409 converter/mymoneyqifreader.cpp:965
+#: converter/mymoneytemplate.cpp:75 views/kmymoneyview.cpp:592
+msgid "File access error"
+msgstr "Fout bij bestandstoegang"
+
+#: converter/mymoneytemplate.cpp:84
+msgid "<b>%1</b> is not a template file."
+msgstr "<b>%1</b> is geen voorbeeld bestand."
+
+#: converter/mymoneytemplate.cpp:85 views/kmymoneyview.cpp:603
+msgid "Filetype Error"
+msgstr "Fout bestandstype"
+
+#: converter/mymoneytemplate.cpp:93
+msgid "Error while reading template file <b>%1</b> in line %2, column %3"
+msgstr ""
+"Fout bij het lezen van voorbeeld bestand <b>%1</b> in regel %2, kolom %3"
+
+#: converter/mymoneytemplate.cpp:94
+msgid "Template Error"
+msgstr "Voorbeeld fout"
+
+#: converter/mymoneytemplate.cpp:101
+msgid "File '%1' not found!"
+msgstr "Bestand '%1' niet gevonden!"
+
+#: converter/mymoneytemplate.cpp:142
+msgid "Invalid tag <b>%1</b> in template file <b>%2</b>!"
+msgstr "Ongeldige vlag <b>%1</b> in voorbeeld bestand <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:214
+#, c-format
+msgid "Loading template %1"
+msgstr "Voorbeeld bestand %1 wordt geladen"
+
+#: converter/mymoneytemplate.cpp:241
+msgid "Invalid top-level account type <b>%1</b> in template file <b>%2</b>!"
+msgstr "Ongeldig hoofd rekening type <b>%1</b> in voorbeeld bestand <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:309
+msgid ""
+"Invalid flag type <b>%1</b> for account <b>%3</b> in template file <b>%2</b>!"
+msgstr ""
+"Ongeldige markering <b>%1</b> voor rekening <b>%3</b> in voorbeeld bestand "
+"<b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:398 converter/mymoneytemplate.cpp:401
+#: views/kmymoneyview.cpp:1151 views/kmymoneyview.cpp:1154
+msgid "Unable to write changes to '%1'"
+msgstr "Kon wijzigingen niet schrijven naar '%1'"
+
+#: converter/mymoneytemplate.cpp:407 views/kmymoneyview.cpp:1162
+msgid "Unable to upload to '%1'"
+msgstr "Kon niet uploaden naar '%1'"
+
+#: converter/mymoneyqifwriter.cpp:70
+msgid ""
+"Unexpected exception '%1' thrown in %2, line %3 caught in MyMoneyQifWriter::"
+"write()"
+msgstr ""
+"Onverwachte uitzondering '%1' opgetreden in %2, regel %3 in "
+"MyMoneyQifWriter::write()"
+
+#: converter/mymoneyqifwriter.cpp:80
+msgid "Unable to open file '%1' for writing"
+msgstr "Kon bestand '%1' niet openen voor schrijven"
+
+#: converter/webpricequote.cpp:340
+#, c-format
+msgid "Symbol found: %1"
+msgstr "Gevonden symbool: %1"
+
+#: converter/webpricequote.cpp:368
+msgid "Price found: %1 (%2)"
+msgstr "Gevonden koers: %1 (%2)"
+
+#: converter/webpricequote.cpp:380
+#, c-format
+msgid "Date found: %1"
+msgstr "Gevonden datum: %1"
+
+#: converter/webpricequote.cpp:397 converter/webpricequote.cpp:403
+#, c-format
+msgid "Unable to update price for %1"
+msgstr "Kan koers niet bijwerken voor %1"
+
+#: converter/mymoneyqifreader.cpp:170
+msgid ""
+"_: Category name\n"
+"Reinvested dividend"
+msgstr "Herbelegd dividend"
+
+#: converter/mymoneyqifreader.cpp:173
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (long term)"
+msgstr "Geherinvesteerd dividend (lange termijn)"
+
+#: converter/mymoneyqifreader.cpp:176
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (short term)"
+msgstr "Geherinvesteerd dividend (korte termijn)"
+
+#: converter/mymoneyqifreader.cpp:179
+msgid ""
+"_: Category name\n"
+"Dividend"
+msgstr "Dividend"
+
+#: converter/mymoneyqifreader.cpp:182
+msgid ""
+"_: Category name\n"
+"Interest"
+msgstr "Rente"
+
+#: converter/mymoneyqifreader.cpp:185
+msgid ""
+"_: Category name\n"
+"Capital Gain (short term)"
+msgstr "Kapitaal aanwas (korte termijn)"
+
+#: converter/mymoneyqifreader.cpp:188
+msgid ""
+"_: Category name\n"
+"Capital Gain (mid term)"
+msgstr "Kapitaal aanwas (middellange termijn)"
+
+#: converter/mymoneyqifreader.cpp:191
+msgid ""
+"_: Category name\n"
+"Capital Gain (long term)"
+msgstr "Kapitaal aanwas (lange termijn)"
+
+#: converter/mymoneyqifreader.cpp:194
+msgid ""
+"_: Category name\n"
+"Returned capital"
+msgstr "Ontvangen kapitaal"
+
+#: converter/mymoneyqifreader.cpp:197
+msgid ""
+"_: Category name\n"
+"Miscellaneous income"
+msgstr "Overig inkomen"
+
+#: converter/mymoneyqifreader.cpp:200
+msgid ""
+"_: Category name\n"
+"Miscellaneous expense"
+msgstr "Overige uitgaven"
+
+#: converter/mymoneyqifreader.cpp:203
+msgid ""
+"_: Category name\n"
+"Investment fees"
+msgstr "Investeringskosten"
+
+#: converter/mymoneyqifreader.cpp:205
+#, c-format
+msgid "Unknown QIF type %1"
+msgstr "Onbekende QIF type %1"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Date format selection"
+msgstr "Datum formaat selectie"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Pick the date format that suits your input file"
+msgstr "Selecteer de datum die overeenkomt met uw invoer bestand."
+
+#: converter/mymoneyqifreader.cpp:366
+msgid "Importing QIF ..."
+msgstr "Importeren van QIF..."
+
+#: converter/mymoneyqifreader.cpp:442
+msgid "Reading QIF ..."
+msgstr "Lezen van QIF..."
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Adding transactions"
+msgstr "Transacties toevoegen"
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Now adding the transactions to your ledger..."
+msgstr "Transacties worden nu toegevoegd aan uw kasboek..."
+
+#: converter/mymoneyqifreader.cpp:533
+msgid "Unable to add transactions"
+msgstr "Kan transacties niet toevoegen"
+
+#: converter/mymoneyqifreader.cpp:567
+msgid ""
+"_: QIF tag for liability account\n"
+"Oth L"
+msgstr "Oth L"
+
+#: converter/mymoneyqifreader.cpp:572
+msgid ""
+"_: QIF tag for category\n"
+"Cat"
+msgstr "Cat."
+
+#: converter/mymoneyqifreader.cpp:575
+msgid ""
+"_: QIF tag for security\n"
+"Security"
+msgstr "Aandeel"
+
+#: converter/mymoneyqifreader.cpp:578
+msgid ""
+"_: QIF tag for investment account\n"
+"Invst"
+msgstr "Invst"
+
+#: converter/mymoneyqifreader.cpp:581
+msgid ""
+"_: QIF tag for prices\n"
+"Prices"
+msgstr "Koersen"
+
+#: converter/mymoneyqifreader.cpp:599
+msgid ""
+"_: QIF tag for a class\n"
+"Class"
+msgstr "Klasse"
+
+#: converter/mymoneyqifreader.cpp:753 converter/mymoneyqifreader.cpp:2203
+msgid ""
+"The %1 account currently has an opening balance of %2. This QIF file reports "
+"an opening balance of %3. Would you like to overwrite the current balance "
+"with the one from the QIF file?"
+msgstr ""
+"Rekening %1 heeft momenteel een beginsaldo van %2. Het QIF import bestand "
+"meld een beginsaldo van %3. Wilt u het huidige beginsaldo overschrijven met "
+"de waarde uit het QIF bestand?"
+
+#: converter/mymoneyqifreader.cpp:754 converter/mymoneyqifreader.cpp:2204
+msgid "Overwrite opening balance"
+msgstr "Overschijf beginsaldo"
+
+#: converter/mymoneyqifreader.cpp:879 converter/mymoneyqifreader.cpp:890
+#: converter/mymoneyqifreader.cpp:914
+msgid "Autogenerated by QIF importer"
+msgstr "Gegenereerd door de QIF importer"
+
+#: converter/mymoneyqifreader.cpp:907
+msgid "QIF imported, no account name supplied"
+msgstr "QIF geïmporteerd, geen rekening naam opgegeven"
+
+#: converter/mymoneyqifreader.cpp:940
+msgid ""
+"KMyMoney has imported a second opening balance transaction into account <b>%"
+"1</b> which differs from the one found already on file. Please correct this "
+"manually once the import is done."
+msgstr ""
+"KMyMoney heeft een tweede beginsaldo geïmporteerd in rekening <b>%1</b> "
+"welke afwijkt van het oorspronkelijke beginsaldo. Pas het beginsaldo aan "
+"zodra alles is geïmporteerd."
+
+#: converter/mymoneyqifreader.cpp:940
+msgid "Opening balance problem"
+msgstr "Beginsaldo probleem"
+
+#: converter/mymoneyqifreader.cpp:963
+msgid "Error while creating opening balance transaction"
+msgstr "Fout bij het aanmaken van de transactie voor het beginsaldo"
+
+#: converter/mymoneyqifreader.cpp:1029 converter/mymoneyqifreader.cpp:1276
+msgid ""
+"The date entry \"%1\" read from the file cannot be interpreted through the "
+"current date profile setting of \"%2\".\n"
+"\n"
+"Pressing \"Continue\" will assign todays date to the transaction. Pressing "
+"\"Cancel\" will abort the import operation. You can then restart the import "
+"and select a different QIF profile or create a new one."
+msgstr ""
+"De uit het bestand ingevoerde datum \"%1\" kan niet worden gelezen met de "
+"huidige profiel instelling van \"%2\".\n"
+"\n"
+"Als u op \"Doorgaan\" klikt dan wordt de datum van vandaag toegekend aan "
+"alle transacties. \"Annuleer\" breekt de bewerking direct af. U kunt het "
+"importeren herstarten met een ander QIF datum profiel."
+
+#: converter/mymoneyqifreader.cpp:1035 converter/mymoneyqifreader.cpp:1282
+msgid "Invalid date format"
+msgstr "Ongeldig datumformaat"
+
+#: converter/mymoneyqifreader.cpp:1398
+#: converter/mymoneystatementreader.cpp:589
+#: converter/mymoneystatementreader.cpp:592
+msgid "Statement Importer"
+msgstr "Import voor Afschriften"
+
+#: converter/mymoneyqifreader.cpp:1413
+#: converter/mymoneystatementreader.cpp:644
+msgid ""
+"This investment account does not contain the \"%1\" security. Transactions "
+"involving this security will be ignored."
+msgstr ""
+"Deze Invstrekening bevat geen \"%1\" aandeel. Transacties voor dit aandeel "
+"worden niet meegenomen."
+
+#: converter/mymoneyqifreader.cpp:1415
+#: converter/mymoneystatementreader.cpp:612
+#: converter/mymoneystatementreader.cpp:644
+msgid "Security not found"
+msgstr "Aandeel niet gevonden"
+
+#: converter/mymoneyqifreader.cpp:2021
+msgid "%1 (Investment)"
+msgstr "%1 (Belegging)"
+
+#: converter/mymoneyqifreader.cpp:2022
+msgid "Autogenerated by QIF importer from type Mutual account entry"
+msgstr "Gegenereerd door de QIF importer"
+
+#: converter/mymoneyqifreader.cpp:2085 converter/mymoneyqifreader.cpp:2228
+msgid "account"
+msgstr "rekening"
+
+#: converter/mymoneyqifreader.cpp:2086
+msgid "al"
+msgstr "al"
+
+#: converter/mymoneyqifreader.cpp:2093
+msgid "category"
+msgstr "rubriek"
+
+#: converter/mymoneyqifreader.cpp:2094
+msgid "ei"
+msgstr "ei"
+
+#: converter/mymoneyqifreader.cpp:2095
+msgid "Category selection"
+msgstr "Rubriek selectie"
+
+#: converter/mymoneyqifreader.cpp:2110
+msgid "Account \"%1\" disappeared: "
+msgstr "Rekening \"%1\" is verdwenen: "
+
+#: converter/mymoneyqifreader.cpp:2131
+msgid "The %1 '%2' does not exist. Do you want to create it?"
+msgstr "De %1 '%2' bestaat niet. Wilt u die aanmaken?"
+
+#: converter/mymoneyqifreader.cpp:2140
+#, c-format
+msgid "Select %1"
+msgstr "Selecteer %1"
+
+#: converter/mymoneyqifreader.cpp:2142
+msgid ""
+"The %1 <b>%2</b> currently exists. Do you want to import transactions to "
+"this account?"
+msgstr ""
+"De %1 <b>%2</b> bestaat al. Wilt u de transacties toch importeren naar deze "
+"rekening?"
+
+#: converter/mymoneyqifreader.cpp:2147
+msgid ""
+"The %1 <b>%2</b> currently does not exist. You can create a new %3 by "
+"pressing the <b>Create</b> button or select another %4 manually from the "
+"selection box."
+msgstr ""
+"De %1 <b>%2</b> nog niet. U kunt een nieuwe %3 aanmaken door te klikken op "
+"de <b>Creëer</b>knop of een andere %4 te selecteren uit de onderstaande "
+"lijst."
+
+#: converter/mymoneyqifreader.cpp:2154
+#, c-format
+msgid "Import transactions to %1"
+msgstr "Importeer transacties naar %1"
+
+#: converter/mymoneyqifreader.cpp:2155
+msgid ""
+"No %1 information has been found in the selected QIF file. Please select an "
+"account using the selection box in the dialog or create a new %2 by pressing "
+"the <b>Create</b> button."
+msgstr ""
+"Er is geen %1 informatie gevonden in het QIF bestand. Selecteer een rekening "
+"via de lijst of maak een nieuwe %2 aan door te klikken op de <b>Creëer</b> "
+"knop."
+
+#: converter/mymoneyqifreader.cpp:2229
+msgid "You must select or create an account."
+msgstr "U moet een rekening selecteren of aanmaken."
+
+#: converter/mymoneyqifreader.cpp:2231
+msgid "You must select or create a category."
+msgstr "U moet een rubriek selecteren of aanmaken."
+
+#: converter/mymoneystatementreader.cpp:100
+msgid "_Fees"
+msgstr "_Kosten"
+
+#: converter/mymoneystatementreader.cpp:106
+msgid "_Dividend"
+msgstr "_Dividend"
+
+#: converter/mymoneystatementreader.cpp:289
+#, c-format
+msgid "Importing statement for account %1"
+msgstr "Bank afschrift importeren voor rekening %1"
+
+#: converter/mymoneystatementreader.cpp:291
+msgid "Importing statement without transactions"
+msgstr "Bank afschrift zonder transacties importeren"
+
+#: converter/mymoneystatementreader.cpp:385
+msgid " Statement balance is not contained in statement."
+msgstr " Saldo voor dit bankafschrift is niet vermeld op bankafschrift"
+
+#: converter/mymoneystatementreader.cpp:387
+msgid " Statement balance on %1 is reported to be %2"
+msgstr " Saldo op bankafschrift %1 is %2"
+
+#: converter/mymoneystatementreader.cpp:389
+msgid " Transactions"
+msgstr " Transacties"
+
+#: converter/mymoneystatementreader.cpp:390
+msgid " %1 processed"
+msgstr " %1 verwerkt"
+
+#: converter/mymoneystatementreader.cpp:391
+msgid " %1 added"
+msgstr " %1 toegevoegd"
+
+#: converter/mymoneystatementreader.cpp:392
+msgid " %1 matched"
+msgstr " %1 vergeleken"
+
+#: converter/mymoneystatementreader.cpp:393
+msgid " %1 duplicates"
+msgstr " %1 duplicaten"
+
+#: converter/mymoneystatementreader.cpp:394
+msgid " Payees"
+msgstr " Relaties"
+
+#: converter/mymoneystatementreader.cpp:395
+msgid " %1 created"
+msgstr " %1 aangemaakt"
+
+#: converter/mymoneystatementreader.cpp:483
+#, c-format
+msgid "Error creating security record: %1"
+msgstr "Fout bij aanmaken van fonds: %1"
+
+#: converter/mymoneystatementreader.cpp:612
+msgid ""
+"This imported statement contains investment transactions with no security. "
+"These transactions will be ignored."
+msgstr ""
+"Dit QIF bestand bevat beleggings transacties, maar bevat geen fondsen. Deze "
+"transacties worden genegeerd."
+
+#: converter/mymoneystatementreader.cpp:803
+msgid "(Fees) "
+msgstr "(Kosten)"
+
+#: converter/mymoneystatementreader.cpp:880
+msgid ""
+"Do you want to add \"%1\" as payee/receiver?\n"
+"\n"
+msgstr ""
+"Wilt u \"%1\" toevoegen als relatie?\n"
+"\n"
+
+#: converter/mymoneystatementreader.cpp:881
+msgid ""
+"Selecting \"Yes\" will create the payee, \"No\" will skip creation of a "
+"payee record and remove the payee information from this transaction. "
+"Selecting \"Cancel\" aborts the import operation.\n"
+"\n"
+"If you select \"No\" here and mark the \"Don't ask again\" checkbox, the "
+"payee information for all following transactions referencing \"%1\" will be "
+"removed."
+msgstr ""
+"Als u \"Ja\" kiest, zal de relatieaangemaakt worden, bij \"Nee\" wordt de "
+"creatie van een relatieovergeslagen en wordt de relatieinformatie uit deze "
+"transactie verwijderd. Het selecteren van \"Annuleren\" breekt de "
+"importbewerking af.\n"
+"\n"
+"Als u hier \"Nee\" kiest en het keuzevak \"Niet opnieuw vragen\" aanvinkt, "
+"dan zal de relatieinformatie voor alle volgende transacties die verwijzen "
+"naar \"%1\" worden verwijderd."
+
+#: converter/mymoneystatementreader.cpp:917
+msgid "Save Category"
+msgstr "Rubriek opslaan"
+
+#: converter/mymoneystatementreader.cpp:918
+msgid "No Category"
+msgstr "Geen rubriek"
+
+#: converter/mymoneystatementreader.cpp:919 dialogs/rc.cpp:4
+msgid "Abort"
+msgstr "Afbreken"
+
+#: converter/mymoneystatementreader.cpp:926
+msgid "Please select a default category for payee '%1':"
+msgstr "Selecteer een standaard rubriek voor de relatie'%1':"
+
+#: converter/mymoneystatementreader.cpp:958
+msgid "Unable to add payee/receiver"
+msgstr "Kan relatie niet toevoegen"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid ""
+"KMyMoney has found a scheduled transaction named <b>%1</b> which matches an "
+"imported transaction. Do you want KMyMoney to enter this schedule now so "
+"that the transaction can be matched? "
+msgstr ""
+"KmYmoney heeft een periodieke transactie <b>%1</b> gevonden welke "
+"overeenkomt met een geimporteerde transactie. Wilt u deze periodieke "
+"transactie nu invoeren zodat deze 2 transacties kunnen worden vergeleken."
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid "Schedule found"
+msgstr "Periodieke transactie gevonden"
+
+#: converter/mymoneystatementreader.cpp:1219
+msgid "Problem adding or matching imported transaction with id '%1': %2"
+msgstr "Probleem bij het toevoegen van de geïmporteerde transactie '%1': %2"
+
+#: converter/mymoneystatementreader.cpp:1268
+msgid ""
+"<b>You have downloaded a statement for the following account:</b><br><br>"
+msgstr ""
+"<b>U hebt een afschrift voor de volgende rekening gedownload:</b><br><br>"
+
+#: converter/mymoneystatementreader.cpp:1269
+#, c-format
+msgid " - Account Name: %1"
+msgstr " - Rekening Naam: %1"
+
+#: converter/mymoneystatementreader.cpp:1270
+#, c-format
+msgid " - Account Type: %1"
+msgstr " - Rekening Type: %1"
+
+#: converter/mymoneystatementreader.cpp:1271
+#, c-format
+msgid " - Account Number: %1"
+msgstr " - Rekening Nummer: %1"
+
+#: converter/mymoneystatementreader.cpp:1279
+msgid "Do you want to import transactions to this account?"
+msgstr "Wilt u transacties importeren naar deze rekening?"
+
+#: converter/mymoneystatementreader.cpp:1281
+msgid ""
+"KMyMoney cannot determine which of your accounts to use. You can create a "
+"new account by pressing the <b>Create</b> button or select another one "
+"manually from the selection box below."
+msgstr ""
+"KMyMoney kan niet vaststellen welke rekening gebruikt moet worden. U kunt "
+"een nieuwe rekening aanmaken door op de <b>Creëer</b> knop te drukken of "
+"handmatig een keuze te maken uit onderstaande lijst."
+
+#: converter/mymoneystatementreader.cpp:1287
+msgid ""
+"No account information has been found in the selected statement file. Please "
+"select an account using the selection box in the dialog or create a new "
+"account by pressing the <b>Create</b> button."
+msgstr ""
+"Er is geen rekening informatie gevonden in de geselecteerde bankafschrift. "
+"Selecteer een rekening via de lijst of creëer een nieuwe rekening door te "
+"drukken op de <b>Creëer</b> knop."
+
+#: converter/mymoneystatementreader.cpp:1294
+msgid "Import transactions"
+msgstr "Transacties importeren"
+
+#: converter/mymoneystatementreader.cpp:1330
+msgid ""
+"You must select an account, create a new one, or press the <b>Abort</b> "
+"button."
+msgstr ""
+"U moet een rekening selecteren, een nieuwe aanmaken, of op de <b>Breek af</"
+"b> knop klikken."
+
+#: converter/mymoneygncreader.cpp:119
+msgid "%1: Sorry. This importer cannot handle version %2 of element %3"
+msgstr ""
+"%1: Sorry. Dit importeer programma kan versie %2 van element %3 niet "
+"verwerken"
+
+#: converter/mymoneygncreader.cpp:193
+#, c-format
+msgid "Account%1"
+msgstr "Rekening %1"
+
+#: converter/mymoneygncreader.cpp:197
+#, c-format
+msgid "Stock%1"
+msgstr "Aandeel %1"
+
+#: converter/mymoneygncreader.cpp:206
+#, c-format
+msgid "Payee%1"
+msgstr "Relatie %1"
+
+#: converter/mymoneygncreader.cpp:212
+#, c-format
+msgid "Schedule%1"
+msgstr "Periodieke transactie%1"
+
+#: converter/mymoneygncreader.cpp:262
+msgid "This version of the importer cannot handle multi-book files."
+msgstr ""
+"Deze versie van het importeer programma kan niet omgaan met multi-book "
+"bestanden."
+
+#: converter/mymoneygncreader.cpp:912
+msgid "Invalid header for file. Should be 'gnc-v2'"
+msgstr "Ongeldig versie van het bestand. Dit moet zijn 'gnc-v2'"
+
+#: converter/mymoneygncreader.cpp:937 converter/mymoneygncreader.cpp:972
+#: converter/mymoneygncreader.cpp:1062
+#, c-format
+msgid ""
+"Import failed:\n"
+"\n"
+"%1"
+msgstr ""
+"Import mislukt\n"
+"\n"
+"%1"
+
+#: converter/mymoneygncreader.cpp:1065
+msgid "Import complete"
+msgstr "Import compleet"
+
+#: converter/mymoneygncreader.cpp:1120
+msgid "Disguise your wealth"
+msgstr "Verberg uw rijkdom"
+
+#: converter/mymoneygncreader.cpp:1121
+msgid ""
+"Each monetary value on your file will be multiplied by a random number "
+"between 0.01 and 1.99\n"
+"with a different value used for each transaction. In addition, to further "
+"disguise the true\n"
+"values, you may enter a number between %1 and %2 which will be applied to "
+"all values.\n"
+"These numbers will not be stored in the file."
+msgstr ""
+"Iedere monetaire waarde in uw bestand wordt vermenigvuldigt met een "
+"willekeurig getal tussen 0,01 en 1,99\n"
+"iedere transactie met een ander getal. Aanvullend kunt u, om de werkelijke "
+"waarden te verbergen\n"
+"een getal opgeven tussen %1 en %2 welke wordt toegepast op elke waarde.\n"
+"Deze getallen worden opgeslagen in het bestand."
+
+#: converter/mymoneygncreader.cpp:1135
+msgid "Loading commodities..."
+msgstr "Laden van producten..."
+
+#: converter/mymoneygncreader.cpp:1160
+msgid "Loading prices..."
+msgstr "Laden van koersen..."
+
+#: converter/mymoneygncreader.cpp:1164 converter/mymoneygncreader.cpp:1171
+msgid "Imported History"
+msgstr "Geïmporteerde Historie"
+
+#: converter/mymoneygncreader.cpp:1251
+#, c-format
+msgid "Current importer does not recognize GnuCash account type %1"
+msgstr "Huidige importeer programma hekent het GnuCash rekening type %1 niet"
+
+#: converter/mymoneygncreader.cpp:1471
+msgid "Imported Transaction"
+msgstr "Geïmporteerde Transactie"
+
+#: converter/mymoneygncreader.cpp:1519
+msgid "Loading templates..."
+msgstr "Bezig met laden van sjablonen..."
+
+#: converter/mymoneygncreader.cpp:1531
+msgid "Unknown payee"
+msgstr "Onbekende relatie"
+
+#: converter/mymoneygncreader.cpp:1723
+msgid "Loading schedules..."
+msgstr "Bezig met laden van periodieke transacties..."
+
+#: converter/mymoneygncreader.cpp:1735
+#, c-format
+msgid "Can't find template transaction for schedule %1"
+msgstr "Kan geen sjabloon vinden voor periodieke transactie %1"
+
+#: converter/mymoneygncreader.cpp:1910
+msgid "Reorganizing accounts..."
+msgstr "Bezig met het herindelen van rekeningen..."
+
+#: converter/mymoneygncreader.cpp:1972
+msgid ""
+"Your main currency seems to be %1 (%2); do you want to set this as your base "
+"currency?"
+msgstr ""
+"De munteenheid die u hoofdzakelijk gebruikt lijkt %1 (%2) te zijn; wilt u "
+"dit instellen als uw standaard munteenheid?"
+
+#: converter/mymoneygncreader.cpp:1993
+msgid "More"
+msgstr "Meer"
+
+#: converter/mymoneygncreader.cpp:1997
+msgid "Save Report"
+msgstr "Sla rapport op"
+
+#: converter/mymoneygncreader.cpp:2017
+msgid ""
+"Problems were encountered in converting schedule '%1'.\n"
+"Do you want to review or edit it now?"
+msgstr ""
+"Er zijn problemen opgetreden tijdens het converteren van de periodieke "
+"transactie '%1'.\n"
+"Wilt u deze bekijken of direct bewerken?"
+
+#: converter/mymoneygncreader.cpp:2039
+msgid ""
+"Found:\n"
+"\n"
+msgstr ""
+"Gevonden:\n"
+"\n"
+
+#: converter/mymoneygncreader.cpp:2040
+msgid " commodities (equities)\n"
+msgstr "Producten (aandelen)\n"
+
+#: converter/mymoneygncreader.cpp:2041
+msgid " prices\n"
+msgstr "koersen\n"
+
+#: converter/mymoneygncreader.cpp:2042
+msgid " accounts\n"
+msgstr " rekeningen\n"
+
+#: converter/mymoneygncreader.cpp:2043
+msgid " transactions\n"
+msgstr " transacties\n"
+
+#: converter/mymoneygncreader.cpp:2044
+msgid " schedules\n"
+msgstr " betalingsagenda\n"
+
+#: converter/mymoneygncreader.cpp:2047
+msgid "No inconsistencies were detected"
+msgstr "Er zijn geen inconsistenties ontdekt"
+
+#: converter/mymoneygncreader.cpp:2049
+msgid " inconsistencies were detected and corrected\n"
+msgstr " er zijn inconsistenties gevonden en gecorrigeerd\n"
+
+#: converter/mymoneygncreader.cpp:2054
+msgid " orphan accounts were created\n"
+msgstr "er zijn zwevende rekeningen gecreëerd\n"
+
+#: converter/mymoneygncreader.cpp:2059
+msgid " possible schedule problems were noted\n"
+msgstr " mogelijke problemen met periodieke transactie zijn genoteerd\n"
+
+#: converter/mymoneygncreader.cpp:2064
+msgid "Small Business Features (Customers, Invoices, etc.)"
+msgstr "Opties voor kleine bedrijven (Klanten, Facturen, etc.)"
+
+#: converter/mymoneygncreader.cpp:2065 views/kmymoneyview.cpp:241
+#: views/kmymoneyview.cpp:243
+msgid "Budgets"
+msgstr "Budgetten"
+
+#: converter/mymoneygncreader.cpp:2066
+msgid "Lots"
+msgstr "Coupures"
+
+#: converter/mymoneygncreader.cpp:2068
+msgid "The following features found in your file are not currently supported:"
+msgstr ""
+"De volgende functies die in uw bestand zijn aangetroffen, worden momenteel "
+"niet ondersteund:"
+
+#: converter/mymoneygncreader.cpp:2071
+msgid ""
+"\n"
+"\n"
+"Press More for further information"
+msgstr ""
+"\n"
+"\n"
+"Klik om Meer voor verder informatie"
+
+#: converter/mymoneygncreader.cpp:2139
+msgid "Orphan created from unknown gnucash account"
+msgstr "Zwevende rekening gecreëerd voor onbekende GnuCash rekening"
+
+#: converter/mymoneygncreader.cpp:2170
+msgid "Internal error - invalid interval char in incrDate"
+msgstr "Interne fout - ongeldige interval letter in incrDate"
+
+#: converter/mymoneygncreader.cpp:2233
+msgid "Enter the investment account name "
+msgstr "Geef de naam op voor deze beleggingsrekening"
+
+#: converter/mymoneygncreader.cpp:2234
+msgid "My Investments"
+msgstr "Mijn beleggings portefeuille"
+
+#: converter/mymoneygncreader.cpp:2269
+#, c-format
+msgid "Select parent investment account or enter new name. Stock %1"
+msgstr "Selecteer beleggingsrekening of geef een nieuwe naam op. Aandeel %1"
+
+#: converter/mymoneygncreader.cpp:2292 converter/mymoneygncreader.cpp:2307
+msgid "%1 is not an Investment Account. Do you wish to make it one?"
+msgstr "%1 is geen beleggingsrekening. Wilt u er één aanmaken?"
+
+#: converter/mymoneygncreader.cpp:2408
+msgid ""
+"An Investment account must be a child of an Asset account\n"
+"Account %1 will be stored under the main Asset account"
+msgstr ""
+"Een beleggingsrekening is een subrekening van een rekening voor bezittingen\n"
+"Rekening %1 zal worden opgeslagen onder de hoofdrekening voor uw bezittingen"
+
+#: converter/mymoneygncreader.cpp:2410
+msgid ""
+"An Income account must be a child of an Income account\n"
+"Account %1 will be stored under the main Income account"
+msgstr ""
+"Een Inkomen rekening moet een subrekening zijn van een Inkomen Rekening\n"
+"rekening %1 zal worden opgeslagen onder de hoofd Inkomen rekening"
+
+#: converter/mymoneygncreader.cpp:2412
+msgid ""
+"An Expense account must be a child of an Expense account\n"
+"Account %1 will be stored under the main Expense account"
+msgstr ""
+"Een Uitgaven rekening moet een subrekening zijn van een Uitgaven Rekening\n"
+"Rekening %1 zal worden opgeslagen onder de hoofd Uitgaven rekening"
+
+#: converter/mymoneygncreader.cpp:2414
+msgid ""
+"One or more transactions contain a reference to an otherwise unknown "
+"account\n"
+"An asset account with the name %1 has been created to hold the data"
+msgstr ""
+"Eén of meer transacties verwijzen naar een onbekende rekening\n"
+"Voor deze transacties wordt nu een Bezittingen rekening met de naam %1 "
+"gecreëerd"
+
+#: converter/mymoneygncreader.cpp:2416
+msgid "Schedule %1 has interval of %2 which is not currently available"
+msgstr "Periodieke transactie %1 heeft een onbekend interval van %2 "
+
+#: converter/mymoneygncreader.cpp:2417
+msgid "Schedule %1 dropped at user request"
+msgstr "Periodieke transactie %1 is vervallen op verzoek van de gebruiker"
+
+#: converter/mymoneygncreader.cpp:2418
+msgid "Schedule %1 contains unknown action (key = %2, type = %3)"
+msgstr ""
+"Periodieke transactie %1 bevat een onbekende actie (key = %2, type = %3)"
+
+#: converter/mymoneygncreader.cpp:2419
+msgid "Schedule %1 contains multiple actions; only one has been imported"
+msgstr ""
+"Periodieke transactie %1 bevat meerdere acties. Er is slechts één "
+"geïmporteerd"
+
+#: converter/mymoneygncreader.cpp:2420
+msgid "Schedule %1 contains no valid splits"
+msgstr "Periodieke transactie %1 bevat geen geldige splitsingen"
+
+#: converter/mymoneygncreader.cpp:2421
+msgid ""
+"Schedule %1 appears to contain a formula. GnuCash formulae are not "
+"convertible"
+msgstr ""
+"Periodieke transactie %1 bevat een formule. GnuCash formules kunnen niet "
+"worden geconverteerd"
+
+#: converter/mymoneygncreader.cpp:2422
+msgid ""
+"Schedule %1 contains unknown interval specification; please check for "
+"correct operation"
+msgstr ""
+"Periodieke transactie %1 bevat een onbekende interval. Pas dit a.u.b. aan"
+
+#: converter/mymoneygncreader.cpp:2423
+msgid ""
+"Schedule %1 contains a deferred interval specification; please check for "
+"correct operation"
+msgstr ""
+"Periodieke transactie %1 bevat een onbekende interval. Pas dit a.u.b. aan"
+
+#: converter/mymoneygncreader.cpp:2424
+msgid ""
+"Account or Category %1, transaction date %2; split contains invalid value; "
+"please check"
+msgstr ""
+"Rekening of Rubriek %1, transactie datum %2; Splitsing bevat een ongeldige "
+"waarde. Graag controleren"
+
+#: kmymoneyutils.cpp:146
+msgid "&New Schedule..."
+msgstr "&Nieuwe periodieke transactie..."
+
+#: kmymoneyutils.cpp:148
+msgid "Create a new schedule."
+msgstr "Maak een nieuwe periodieke transactie."
+
+#: kmymoneyutils.cpp:149
+msgid "Use this to create a new schedule."
+msgstr "Gebruik dit om een nieuwe periodieke transactie te maken."
+
+#: kmymoneyutils.cpp:158
+msgid "&Filter"
+msgstr "&Filter"
+
+#: kmymoneyutils.cpp:160
+msgid "Filter out accounts"
+msgstr "Filter rekeningen"
+
+#: kmymoneyutils.cpp:161
+msgid "Use this to filter out accounts"
+msgstr "Gebruik dit om rekening te filteren"
+
+#: kmymoneyutils.cpp:192
+msgid "Preferred accounts"
+msgstr "Voorkeursrekeningen"
+
+#: kmymoneyutils.cpp:193
+msgid "Payment accounts"
+msgstr "rekening voor betalingen"
+
+#: kmymoneyutils.cpp:194
+msgid "Favorite reports"
+msgstr "Favoriete rapporten"
+
+#: kmymoneyutils.cpp:195
+msgid "Forecast (schedule)"
+msgstr "Prognose (periode)"
+
+#: kmymoneyutils.cpp:196
+msgid "Networth forecast"
+msgstr "Prognose van uw saldo"
+
+#: kmymoneyutils.cpp:197
+msgid "Forecast (history)"
+msgstr "Prognose (historie)"
+
+#: kmymoneyutils.cpp:198
+msgid "Assets and Liabilities"
+msgstr "Bezittingen & Schulden"
+
+#: kmymoneyutils.cpp:199 reports/pivottable.cpp:2416 views/khomeview.cpp:1393
+#: widgets/rc.cpp:70
+msgid "Budget"
+msgstr "Budget"
+
+#: kmymoneyutils.cpp:200
+msgid "CashFlow"
+msgstr "Cash flow"
+
+#: dialogs/kenterscheduledlg.cpp:153 kmymoneyutils.cpp:366
+msgid "Unable to load schedule details"
+msgstr "Kan details van periodieke transactie niet laden"
+
+#: kmymoneyutils.cpp:390 widgets/register.cpp:473
+msgid ""
+"_: Reconcile state 'Not reconciled'\n"
+"Not reconciled"
+msgstr "Niet gecontroleerd"
+
+#: kmymoneyutils.cpp:393 widgets/register.cpp:476
+msgid ""
+"_: Reconcile state 'Cleared'\n"
+"Cleared"
+msgstr "Betaald"
+
+#: kmymoneyutils.cpp:396 widgets/register.cpp:479
+msgid ""
+"_: Reconcile state 'Reconciled'\n"
+"Reconciled"
+msgstr "Gecontroleerd"
+
+#: kmymoneyutils.cpp:399 widgets/register.cpp:482
+msgid ""
+"_: Reconcile state 'Frozen'\n"
+"Frozen"
+msgstr "Bevroren"
+
+#: kmymoneyutils.cpp:410
+msgid ""
+"_: Reconcile flag C\n"
+"C"
+msgstr "B"
+
+#: kmymoneyutils.cpp:413
+msgid ""
+"_: Reconcile flag R\n"
+"R"
+msgstr "C"
+
+#: kmymoneyutils.cpp:416
+msgid ""
+"_: Reconcile flag F\n"
+"F"
+msgstr "F"
+
+#: kmymoneyutils.cpp:419
+msgid ""
+"_: Flag for unknown reconciliation state\n"
+"?"
+msgstr "?"
+
+#: _tips.cpp:3
+msgid ""
+"<p>...that you can change the sort order of ledger entries by\n"
+"right-clicking the header of the ledger view?\n"
+msgstr ""
+"<p>...u de sorteervolgorde van het kasboek kunt wijzigen door\n"
+"met de rechter muistoets te klikken op de labels in het kasboek overzicht?\n"
+
+#: _tips.cpp:9
+msgid ""
+"<p>...that you can easily move to the other side of a transfer transaction\n"
+"by opening the context menu with the right mouse button and selecting one of "
+"the\n"
+"'Goto' functions?\n"
+msgstr ""
+"<p>...u snel naar de tegenrekening van een overboekings transactie kunt \n"
+"schakelen door het openen van het context menu met de rechter muisknop en "
+"één van de 'Ga naar ...' functie te selecteren?\n"
+
+#: _tips.cpp:16
+msgid ""
+"<p>...that you can start editing a transaction by double-clicking on the\n"
+"transaction in the register?\n"
+msgstr ""
+"<p>...u een transactie kunt bewerken door te dubbelklikken op de \n"
+"transactie in het kasboek?\n"
+
+#: _tips.cpp:22
+msgid ""
+"<p>...that you can show more details of the selected transaction in the\n"
+"register by selecting the 'ledger lens' feature in the settings dialog?\n"
+msgstr ""
+"<p>...u meer details over de geselecteerde transactie kunt bekijken in het\n"
+"kasboek door de 'Kasboek Lens' mogelijkheid aan te zetten in het opties "
+"menu?\n"
+
+#: _tips.cpp:28
+msgid ""
+"<p>...that transactions with no category assigned or split\n"
+"transactions with unassigned values are marked with an exclamation mark \n"
+"on a yellow triangle in the register?\n"
+msgstr ""
+"<p>...transacties zonder rubriek, of splitsingen met bedragen die niet\n"
+"zijn toegewezen, in het kasboek gemarkeerd worden met een uitroepteken \n"
+"of een gele driehoek?\n"
+
+#: _tips.cpp:35
+msgid ""
+"<p>...that you can show all details of the transactions in the register\n"
+"by typing &lt;Ctrl-T&gt; or selecting the 'Settings/Show Transaction "
+"Detail'\n"
+"menu entry? You can turn this feature off the same way.\n"
+msgstr ""
+"<p>...u alle details van een transactie in het kasboek kunt zien\n"
+"door &lt;Ctrl-T&gt; in te typen of via het menu 'Opties/Laat Transactie "
+"Details zien'\n"
+"te kiezen? Via dezelfde handelingen kunt u dit ook weer uitschakelen.\n"
+
+#: _tips.cpp:42
+msgid ""
+"<p>...that you can switch between a listing of all accounts or\n"
+"an icon view of all asset and liability accounts with the tabs\n"
+"in the accounts view?\n"
+msgstr ""
+"<p>...u kunt wisselen van een lijst van alle rekeningen naar\n"
+"een pictogrammen overzicht van de rekeningen middels tabbladen\n"
+"in het rekeningen overzicht?\n"
+
+#: _tips.cpp:49
+msgid "<p>...that the KMyMoney development team wishes you a nice day?\n"
+msgstr "<p>...het KMyMoney ontwikkel team u een prettige dag toewenst?\n"
+
+#: _tips.cpp:54
+msgid ""
+"<p>...you can use your own external filter program to convert any\n"
+"import format to QIF on the fly? See the QIF profile editor for\n"
+"more details.\n"
+msgstr ""
+"<p>...u een eigen extern filter programma kunt gebruiken om elk\n"
+"formaat direct naar het QIF formaat om te zetten? Ga hiervoor naar de\n"
+"QIF profiel editor voor meer details.\n"
+
+#: _tips.cpp:61
+msgid ""
+"<p>...that you can create a scheduled transaction from an existing\n"
+"one by selecting the context menu on a transaction in the ledger\n"
+"or the \"More...\"-menu in the transaction form?\n"
+msgstr ""
+"<p>...u een periodieke transactie kunt maken van een bestaande\n"
+"transactie via het context menu (rechter muisknop) of via het \n"
+"\"Meer...\"-menu in het transactieformulier?\n"
+
+#: _tips.cpp:68
+msgid ""
+"<p>...that you can switch to the payee of a transaction\n"
+"by selecting the context menu on a transaction in the ledger\n"
+"or in the transaction menu?\n"
+msgstr ""
+"<p>...u kunt wisselen naar de relatievan een transactie\n"
+"via het contextmenu (rechter muisknop) in het kasboek of via het\n"
+" \"Meer...\"-menu in het transactie formulier?\n"
+
+#: _tips.cpp:75
+msgid ""
+"<p>...that you can modify the colors and fonts used for the ledgers\n"
+"via <i>Configure/Register/...</i>?\n"
+msgstr ""
+"<p>... u kleuren en lettertypes voor het kasboek kunt wijzigen\n"
+"via <i>Instellingen/KMyMoney instellen/kasboek...</i>?\n"
+
+#: _tips.cpp:81
+msgid ""
+"<p>...that you can hide transactions prior to a specific date?\n"
+"The date can be modified via <i>Configure/Register/Filter</i>.\n"
+msgstr ""
+"<p>...u transacties voor een bepaalde datum kunt verbergen?\n"
+"De datum kan worden aangepast via <i>Instellingen/KMyMoney instellen/Kasboek/"
+"Filter</i>.\n"
+
+#: _tips.cpp:87
+msgid ""
+"<p>...that you can customize the \"Home-Page\"\n"
+"via <i>Configure/Home</i>?\n"
+msgstr ""
+"<p>...u de \"Startpagina\" kunt aanpassen\n"
+"via <i>Instellingen/KMyMoney instellen/Start..</i>?\n"
+
+#: _tips.cpp:93
+msgid ""
+"<p>...that you can enter new transactions even while reconciling\n"
+"an account? You can also make the transaction form visible.\n"
+msgstr ""
+"<p>...u een nieuwe transactie kunt invoeren tijdens Saldo Controle\n"
+"van een rekening? U kunt ook het transactie formulier zichtbaar maken.\n"
+
+#: _tips.cpp:99
+msgid ""
+"<p>...that you can actively support the KMyMoney development team in\n"
+"cases that heavily depend on your data? You can save your data in an\n"
+"anonymized way for this support.<p>\n"
+"Just open your data file and immediately\n"
+"select <b>File/Save as...</b>. In the <b>Save As...</b> dialog\n"
+"select the filter <b>Anonymous Files</b> and make sure your file gets\n"
+"the extensions <b>.anon.xml</b>. <p>\n"
+"To verify, how the data looks like you are about to send away, you can open\n"
+"this file in KMyMoney and see how the developers see your data.\n"
+msgstr "<p>...u het KMyMoney team actief kunt ondersteunen?</p>\n"
+
+#: _tips.cpp:112
+msgid ""
+"<p>... that you can import your bank statements even without a network \n"
+"connection? Just select the file (OFX or QIF) from the File->Import menu.</"
+"p>\n"
+"<p>Provided by Jose Jorge</p>\n"
+msgstr ""
+"<p> u bankafschriften kunt importeren zonder een netwerk aansluiting.\n"
+"Selecteer het OFX of QIF bestandstype via het Bestand->Importeer.. menu </"
+"p>\n"
+
+#: reports/listtable.cpp:159 reports/listtable.cpp:163
+#: reports/pivottable.cpp:1564
+msgid ""
+"_: Report date range\n"
+"%1 through %2"
+msgstr "%1 tot en met %2"
+
+#: reports/listtable.cpp:171 reports/pivottable.cpp:1571
+#, c-format
+msgid "All currencies converted to %1"
+msgstr "Alle munteenheden zijn omgezet naar %1"
+
+#: reports/listtable.cpp:172 reports/pivottable.cpp:1328
+msgid "All currencies converted to %1\n"
+msgstr "Alle munteenheden zijn omgezet naar %1\n"
+
+#: reports/listtable.cpp:176 reports/pivottable.cpp:1573
+msgid "All values shown in %1 unless otherwise noted"
+msgstr "Alle bedragen in %1, tenzij anders aangegeven"
+
+#: reports/listtable.cpp:177 reports/pivottable.cpp:1330
+msgid "All values shown in %1 unless otherwise noted\n"
+msgstr "Alle waarden worden getoond in %1 tenzij anders aangegeven\n"
+
+#: dialogs/kequitypriceupdatedlg.cpp:73 dialogs/kfindtransactiondlg.cpp:188
+#: dialogs/rc.cpp:53 dialogs/rc.cpp:63 dialogs/rc.cpp:208 dialogs/rc.cpp:805
+#: dialogs/settings/rc.cpp:111 dialogs/transactioneditor.cpp:844
+#: reports/listtable.cpp:196 views/khomeview.cpp:412 views/khomeview.cpp:485
+#: views/khomeview.cpp:519 views/rc.cpp:61 widgets/kmymoneypriceview.cpp:128
+#: widgets/rc.cpp:36 widgets/register.cpp:565 widgets/transaction.cpp:1027
+#: widgets/transaction.cpp:1484
+msgid "Date"
+msgstr "Datum"
+
+#: reports/listtable.cpp:198
+msgid "Num"
+msgstr "Num"
+
+#: dialogs/kfindtransactiondlg.cpp:204 dialogs/kmymoneysplittable.cpp:78
+#: dialogs/kmymoneysplittable.cpp:831 dialogs/rc.cpp:217
+#: dialogs/transactioneditor.cpp:831 dialogs/transactioneditor.cpp:1374
+#: dialogs/transactioneditor.cpp:1382 dialogs/transactioneditor.cpp:1396
+#: dialogs/transactioneditor.cpp:1449 dialogs/transactioneditor.cpp:1456
+#: dialogs/transactioneditor.cpp:1504 reports/listtable.cpp:200
+#: views/kcategoriesview.cpp:76 views/rc.cpp:62 widgets/rc.cpp:115
+#: widgets/register.cpp:62 widgets/transaction.cpp:848
+#: widgets/transaction.cpp:906
+msgid "Category"
+msgstr "Rubriek/Rekening"
+
+#: dialogs/kmymoneysplittable.cpp:79 dialogs/kmymoneysplittable.cpp:837
+#: reports/listtable.cpp:202 widgets/rc.cpp:101 widgets/transaction.cpp:1042
+#: widgets/transaction.cpp:1628
+msgid "Memo"
+msgstr "Notitie"
+
+#: reports/listtable.cpp:203
+msgid "Top Category"
+msgstr "Hoofd rubriek"
+
+#: reports/listtable.cpp:204
+msgid "Category Type"
+msgstr "Rubriek Type"
+
+#: dialogs/rc.cpp:229 dialogs/settings/rc.cpp:152 reports/listtable.cpp:207
+#: widgets/kmymoneycombo.cpp:346 widgets/rc.cpp:107
+msgid "Reconciled"
+msgstr "Gecontroleerd"
+
+#: reports/listtable.cpp:208 widgets/rc.cpp:117
+msgid "Action"
+msgstr "Actie"
+
+#: dialogs/investactivities.cpp:199 dialogs/investactivities.cpp:287
+#: dialogs/investactivities.cpp:424 dialogs/investactivities.cpp:504
+#: dialogs/investactivities.cpp:544 dialogs/investtransactioneditor.cpp:241
+#: reports/listtable.cpp:209 widgets/rc.cpp:103 widgets/transaction.cpp:1513
+msgid "Shares"
+msgstr "Aandelen"
+
+#: dialogs/investtransactioneditor.cpp:248
+#: dialogs/investtransactioneditor.cpp:1067
+#: dialogs/investtransactioneditor.cpp:1068
+#: dialogs/investtransactioneditor.cpp:1072
+#: dialogs/kequitypriceupdatedlg.cpp:72 dialogs/rc.cpp:109 dialogs/rc.cpp:164
+#: dialogs/rc.cpp:251 dialogs/rc.cpp:756 dialogs/rc.cpp:827
+#: dialogs/settings/rc.cpp:117 reports/listtable.cpp:210
+#: reports/listtable.cpp:211 reports/pivottable.cpp:2441
+#: views/kinvestmentview.cpp:80 widgets/kmymoneypriceview.cpp:129
+#: widgets/rc.cpp:43 widgets/rc.cpp:105 widgets/register.cpp:573
+msgid "Price"
+msgstr "Koers"
+
+#: reports/listtable.cpp:212
+msgid "Net Value"
+msgstr "Netto Vermogen"
+
+#: reports/listtable.cpp:213
+msgid "Buys"
+msgstr "Koopt"
+
+#: reports/listtable.cpp:214
+msgid "Sells"
+msgstr "Verkoopt"
+
+#: reports/listtable.cpp:215
+msgid "Dividends Reinvested"
+msgstr "Herbelegde Dividenden"
+
+#: reports/listtable.cpp:216
+msgid "Dividends Paid Out"
+msgstr "Uitbetaalde Dividenden"
+
+#: reports/listtable.cpp:217
+msgid "Starting Balance"
+msgstr "Beginsaldo"
+
+#: reports/listtable.cpp:218
+msgid "Ending Balance"
+msgstr "Eindsaldo"
+
+#: reports/listtable.cpp:219
+msgid "Annualized Return"
+msgstr "Jaarlijkse opbrengst"
+
+#: reports/listtable.cpp:220
+msgid "Return On Investment"
+msgstr "Beleggings opbrengst"
+
+#: dialogs/rc.cpp:106 dialogs/rc.cpp:161 dialogs/rc.cpp:248 dialogs/rc.cpp:505
+#: dialogs/rc.cpp:570 dialogs/rc.cpp:667 dialogs/rc.cpp:753
+#: reports/listtable.cpp:223 widgets/register.cpp:570
+msgid "Payment"
+msgstr "Betaling"
+
+#: dialogs/rc.cpp:111 dialogs/rc.cpp:166 dialogs/rc.cpp:253 dialogs/rc.cpp:709
+#: dialogs/rc.cpp:758 reports/listtable.cpp:224 widgets/rc.cpp:119
+#: widgets/register.cpp:575
+msgid "Balance"
+msgstr "Totaal"
+
+#: reports/listtable.cpp:227 views/kscheduledview.cpp:74
+msgid "Next Due Date"
+msgstr "Vervaldatum"
+
+#: reports/listtable.cpp:229 views/kscheduledview.cpp:76
+msgid "Payment Method"
+msgstr "Betalingsmethode"
+
+#: dialogs/rc.cpp:803 reports/listtable.cpp:231 widgets/rc.cpp:2
+msgid "Description"
+msgstr "Omschrijving"
+
+#: reports/listtable.cpp:232
+msgid "Opening Date"
+msgstr "Startdatum"
+
+#: reports/listtable.cpp:234
+msgid "Balance Early Warning"
+msgstr "Vroegtijdige saldo waarschuwing"
+
+#: reports/listtable.cpp:235
+msgid "Balance Max Limit"
+msgstr "Maximum saldo"
+
+#: reports/listtable.cpp:236
+msgid "Credit Early Warning"
+msgstr "Vroegtijdige krediet waarschuwing"
+
+#: reports/listtable.cpp:237
+msgid "Credit Max Limit"
+msgstr "Maximale krediet"
+
+#: dialogs/rc.cpp:376 reports/listtable.cpp:238
+msgid "Tax"
+msgstr "Belasting"
+
+#: reports/listtable.cpp:239
+msgid "Preferred"
+msgstr "Voorkeur"
+
+#: reports/listtable.cpp:240
+msgid "Loan Amount"
+msgstr "Bedrag van de lening"
+
+#: dialogs/rc.cpp:511 reports/listtable.cpp:241
+msgid "Interest Rate"
+msgstr "Rentepercentage"
+
+#: reports/listtable.cpp:242
+msgid "Next Interest Change"
+msgstr "Volgende rentewijziging per"
+
+#: reports/listtable.cpp:243
+msgid "Periodic Payment"
+msgstr "Periodieke Betaling:"
+
+#: reports/listtable.cpp:244
+msgid "Final Payment"
+msgstr "Laatste Betaling"
+
+#: reports/listtable.cpp:245 views/khomeview.cpp:766 views/khomeview.cpp:1265
+#: views/khomeview.cpp:1273
+msgid "Current Balance"
+msgstr "Huidig saldo"
+
+#: dialogs/investactivities.cpp:201 dialogs/investactivities.cpp:289
+#: dialogs/investactivities.cpp:368 dialogs/investactivities.cpp:426
+#: dialogs/rc.cpp:327 reports/listtable.cpp:360 reports/listtable.cpp:364
+#: reports/listtable.cpp:556 reports/listtable.cpp:558
+#: reports/pivottable.cpp:1343 reports/pivottable.cpp:1445
+#: reports/pivottable.cpp:1505 reports/pivottable.cpp:1598
+#: reports/pivottable.cpp:1768 reports/pivottable.cpp:1845
+#: reports/pivottable.cpp:2165 reports/pivottable.cpp:2167
+#: reports/pivottable.cpp:2187 reports/pivottable.cpp:2189
+#: reports/querytabletest.cpp:134 reports/querytabletest.cpp:135
+#: reports/querytabletest.cpp:136 reports/querytabletest.cpp:137
+#: reports/querytabletest.cpp:162 reports/querytabletest.cpp:163
+#: reports/querytabletest.cpp:164 reports/querytabletest.cpp:197
+#: reports/querytabletest.cpp:198 reports/querytabletest.cpp:224
+#: reports/querytabletest.cpp:250 reports/querytabletest.cpp:251
+#: reports/querytabletest.cpp:252 reports/querytabletest.cpp:275
+#: reports/querytabletest.cpp:276 reports/querytabletest.cpp:277
+#: reports/querytabletest.cpp:366 reports/querytabletest.cpp:422
+#: reports/querytabletest.cpp:423 views/kforecastview.cpp:568 views/rc.cpp:18
+#: widgets/kmymoneyaccounttreeforecast.cpp:139 widgets/transaction.cpp:1643
+msgid "Total"
+msgstr "Totaal"
+
+#: reports/listtable.cpp:444
+msgid "Initial Market Value"
+msgstr "Initiële marktwaarde"
+
+#: reports/listtable.cpp:445
+msgid "Ending Market Value"
+msgstr "Slotkoers"
+
+#: reports/listtable.cpp:448 reports/querytabletest.cpp:651
+msgid "Opening Balance"
+msgstr "Openings Saldo"
+
+#: reports/listtable.cpp:449 reports/querytabletest.cpp:652
+#: reports/querytabletest.cpp:653
+msgid "Closing Balance"
+msgstr "Eindsaldo"
+
+#: reports/listtable.cpp:490 reports/listtable.cpp:491
+msgid "Calculated"
+msgstr "Berekend"
+
+#: reports/listtable.cpp:572 reports/listtable.cpp:574
+#: reports/pivottable.cpp:1530 reports/pivottable.cpp:1886
+#: reports/querytabletest.cpp:138 reports/querytabletest.cpp:165
+#: reports/querytabletest.cpp:199 reports/querytabletest.cpp:225
+#: reports/querytabletest.cpp:253 reports/querytabletest.cpp:278
+#: reports/querytabletest.cpp:367 reports/querytabletest.cpp:402
+#: reports/querytabletest.cpp:424 reports/querytabletest.cpp:548
+#: reports/querytabletest.cpp:551 reports/querytabletest.cpp:586
+msgid "Grand Total"
+msgstr "Totaal"
+
+#: dialogs/rc.cpp:233 reports/pivottable.cpp:339 views/kscheduledview.cpp:174
+#: views/kscheduledview.cpp:433 views/kscheduledview.cpp:449
+#: widgets/kmymoneyscheduledcalendar.cpp:48
+msgid "Transfers"
+msgstr "Overboekingen"
+
+#: reports/pivottable.cpp:1951
+msgid "Legend"
+msgstr "Legenda"
+
+#: reports/pivottable.cpp:2411 views/khomeview.cpp:1406
+#: views/khomeview.cpp:1443
+msgid "Actual"
+msgstr "Actueel"
+
+#: reports/pivottable.cpp:2421 views/khomeview.cpp:1409
+#: views/khomeview.cpp:1446
+msgid "Difference"
+msgstr "Verschil"
+
+#: reports/pivottable.cpp:2431
+msgid "Moving Average"
+msgstr "Lopend gemiddelde"
+
+#: reports/pivottable.cpp:2436
+msgid "Moving Average Price"
+msgstr "Lopend gemiddelde voor koers"
+
+#: reports/objectinfotable.cpp:214 reports/querytable.cpp:693
+#: reports/querytable.cpp:736 reports/querytable.cpp:1356
+#: reports/querytable.cpp:1375 views/kpayeesview.cpp:742
+#, c-format
+msgid "Transfer from %1"
+msgstr "Overboeking van %1"
+
+#: reports/objectinfotable.cpp:215 reports/querytable.cpp:694
+#: reports/querytable.cpp:735 reports/querytable.cpp:1355
+#: reports/querytable.cpp:1374 views/kpayeesview.cpp:740
+#, c-format
+msgid "Transfer to %1"
+msgstr "Overboeking naar %1"
+
+#: reports/querytabletest.cpp:471 views/kreportsview.cpp:1144
+msgid "Investment Transactions"
+msgstr "Beleggings transacties"
+
+#: reports/querytabletest.cpp:472 reports/querytabletest.cpp:564
+msgid "Test Report"
+msgstr "Test Rapport"
+
+#: reports/querytabletest.cpp:547 reports/querytabletest.cpp:550
+msgid "Total Stock 1"
+msgstr "Totaal aandelen pakket 1"
+
+#: reports/querytabletest.cpp:563 views/kreportsview.cpp:1174
+msgid "Investment Performance by Account"
+msgstr "Prestatie van de beleggingen per rekening"
+
+#: reports/querytable.cpp:431 reports/querytable.cpp:1200
+#, c-format
+msgid "Month of %1"
+msgstr "Maand van %1"
+
+#: reports/querytable.cpp:432 reports/querytable.cpp:1201
+#, c-format
+msgid "Week of %1"
+msgstr "Week van %1"
+
+#: reports/querytable.cpp:576 reports/querytable.cpp:739
+#: reports/querytable.cpp:858 reports/querytable.cpp:1325
+#: reports/querytable.cpp:1481
+msgid "No Institution"
+msgstr "Geen financiële instelling"
+
+#: reports/querytable.cpp:580 reports/querytable.cpp:1329
+msgid "[Empty Payee]"
+msgstr "[Lege relatie]"
+
+#: reports/querytable.cpp:615 reports/querytable.cpp:1361
+msgid "[Split Transaction]"
+msgstr "[Splits transactie]"
+
+#: reports/querytable.cpp:616 reports/querytable.cpp:617
+msgid "Split"
+msgstr "Splitsing"
+
+#: main.cpp:51
+msgid ""
+"\n"
+"KMyMoney, the Personal Finance Manager for KDE.\n"
+"\n"
+"Please consider contributing to this project with code and/or suggestions."
+msgstr ""
+"\n"
+"KMyMoney, de Persoonlijke Financiën Manager voor KDE.\n"
+"\n"
+"Overweeg om bij te dragen aan dit project door middel van programmeer code "
+"en/of suggesties."
+
+#: main.cpp:55
+msgid "language to be used"
+msgstr "te gebruiken taal"
+
+#: main.cpp:56
+msgid "don't open last used file"
+msgstr "laatst gebruikte bestand niet openen"
+
+#: main.cpp:57
+msgid "enable performance timers"
+msgstr "Start prestatie timers"
+
+#: main.cpp:61
+msgid "turn on program traces"
+msgstr "Zet programma trance aan"
+
+#: main.cpp:62
+msgid "dump the names of all defined KAction objects to stdout and quit"
+msgstr "Dump alle namen die zijn gedefiniëerd in KAction naar stdout en stop"
+
+#: main.cpp:66
+msgid "file to open"
+msgstr "bestand om te openen"
+
+#: main.cpp:92
+msgid "Memory leakage detection"
+msgstr "Geheugenlek detectie"
+
+#: main.cpp:96
+msgid "Compiled with the following settings:\n"
+msgstr "Gecompileerd met de volgende opties:\n"
+
+#: dialogs/kmymoneysplittable.cpp:650 dialogs/ksplittransactiondlg.cpp:277
+#: main.cpp:98
+msgid "KMyMoney"
+msgstr "KMyMoney"
+
+#: main.cpp:104
+msgid "Initial idea, much initial source code, Project admin"
+msgstr "Oorspronkelijke idee, veel van de eerste broncode, Projectbeheerder"
+
+#: main.cpp:105
+msgid "Core engine, Release Manager, Project admin"
+msgstr "Core engine, Versie Manager, Project administratie"
+
+#: main.cpp:106
+msgid "Reporting logic, OFX Import"
+msgstr "Rapportage logica, OFX import"
+
+#: main.cpp:107
+msgid "Database backend, maintainer stable branch"
+msgstr "Database backend, onderhoud van stabiele versie"
+
+#: main.cpp:108
+msgid "Forecast, Reports"
+msgstr "Budget, Rapporten"
+
+#: main.cpp:109
+msgid "Project Admin"
+msgstr "Project Beheerder"
+
+#: main.cpp:110
+msgid "Developer"
+msgstr "Ontwikkelaar"
+
+#: main.cpp:111
+msgid "Database backend"
+msgstr "Database backend"
+
+#: main.cpp:113
+msgid "Initial investment support"
+msgstr "Initiële beleggings ondersteuning"
+
+#: main.cpp:114
+msgid "Developer & Artist"
+msgstr "Ontwikkelaar & Ontwerper"
+
+#: main.cpp:115
+msgid "Icons & splash screen"
+msgstr "Iconen & opstartscherm"
+
+#: main.cpp:116 main.cpp:117
+msgid "Patches"
+msgstr "Patches"
+
+#: main.cpp:136
+msgid ""
+"The monetary decimal symbol is not correctly set in the KDE Control Center's "
+"Country/Region & Language settings. Please set it to a reasonable value and "
+"start KMyMoney again."
+msgstr ""
+"In het KDE Control Centrum onder Regio & Toegankelijkheid is niet de juiste "
+"decimale waarde ingesteld voor uw munteenheid. Stel deze eerst correct in en "
+"start KMyMoney opnieuw."
+
+#: main.cpp:136
+msgid "Invalid settings"
+msgstr "Ongeldige opties "
+
+#: main.cpp:228
+msgid "Another instance of KMyMoney is already running. Do you want to quit?"
+msgstr "Er draait al een andere instantie van KMyMoney. Wilt u afsluiten?"
+
+#: main.cpp:289
+msgid "Uncaught error. Please report the details to the developers"
+msgstr "Onverwachte fout. Meld deze aan de ontwikkelaars."
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Uw namen"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "Uw Emails"
+
+#: dialogs/kcsvprogressdlg.cpp:62 dialogs/kimportdlg.cpp:66 rc.cpp:1
+msgid "&Import"
+msgstr "&Importeren"
+
+#: rc.cpp:2
+msgid "E&xport"
+msgstr "E&xporteer"
+
+#: rc.cpp:3
+msgid "&Institution"
+msgstr "&Financiële instelling"
+
+#: rc.cpp:4
+msgid "&Account"
+msgstr "&Rekening"
+
+#: rc.cpp:5
+msgid "&Category"
+msgstr "&Rubriek"
+
+#: rc.cpp:6
+msgid "&Transaction"
+msgstr "&Transactie"
+
+#: rc.cpp:7 rc.cpp:20
+msgid "Mark transaction as..."
+msgstr "Markeer transactie als..."
+
+#: rc.cpp:8 rc.cpp:21
+msgid "Mark transaction"
+msgstr "Markeer transactie"
+
+#: rc.cpp:9
+msgid "T&ools"
+msgstr "G&ereedschappen"
+
+#: rc.cpp:10
+msgid "Account options"
+msgstr "Rekening opties"
+
+#: rc.cpp:11
+msgid "Category options"
+msgstr "Rubriek opties"
+
+#: rc.cpp:12
+msgid "Institution options"
+msgstr "Opties voor financiële instelling"
+
+#: rc.cpp:13
+msgid "Payee options"
+msgstr "RelatieOpties"
+
+#: rc.cpp:14
+msgid "Budget options"
+msgstr "Budget opties"
+
+#: rc.cpp:15
+msgid "Investment options"
+msgstr "Beleggings opties"
+
+#: rc.cpp:16
+msgid "Scheduled transactions options"
+msgstr "Opties voor periodieke transacties "
+
+#: rc.cpp:17
+msgid "Transaction options"
+msgstr "Transactie Opties"
+
+#: rc.cpp:18
+msgid "Move transaction to..."
+msgstr "Transacties verplaatsen naar..."
+
+#: rc.cpp:19
+msgid "Select account"
+msgstr "Selecteer rekening"
+
+#: rc.cpp:22
+msgid "Currency options"
+msgstr "Munteenheid opties"
+
+#: rc.cpp:24
+msgid "Always show a No. field in transaction form"
+msgstr "Altijd een Nr. veld tonen in transactieformulier"
+
+#: rc.cpp:25
+msgid "Auto fill with previous transaction data"
+msgstr "Autovullen met vorige transactiegegevens"
+
+#: rc.cpp:26
+msgid "Treat two transactions as identical, if amount differs less than"
+msgstr ""
+"Behandel twee transacties als identiek als de bedragen minder verschillen dan"
+
+#: dialogs/settings/rc.cpp:144 rc.cpp:27
+msgid "Auto increment check number"
+msgstr "Automatisch ophogen controle nummer"
+
+#: rc.cpp:28
+msgid "Autosave file periodically"
+msgstr "Periodiek opslaan"
+
+#: rc.cpp:29
+msgid "Autosave interval in minutes"
+msgstr "Interval voor periodiek opslaan"
+
+#: rc.cpp:30
+msgid "Check schedules upon startup"
+msgstr "Periodieke transacties nakijken bij opstarten"
+
+#: dialogs/settings/rc.cpp:171 rc.cpp:31
+msgid "Enter transactions this number of days in advance"
+msgstr "Transacties dit aantal dagen van te voren invoeren"
+
+#: dialogs/settings/rc.cpp:172 rc.cpp:32
+msgid "Number of days to preview schedules in ledger"
+msgstr "Aantal toekomstige dagen zichtbaar in het kasboek"
+
+#: dialogs/settings/rc.cpp:143 rc.cpp:33
+msgid "Insert transaction type into No. field for new transactions"
+msgstr "Transactie type invoegen in Nr. veld voor nieuwe transacties"
+
+#: dialogs/settings/rc.cpp:145 rc.cpp:34
+msgid "Keep changes when selecting a different transaction/split"
+msgstr "Bewaar wijzigingen als u een andere transactie of splitsing selecteert"
+
+#: rc.cpp:35
+msgid "Using the Enter key moves between the fields"
+msgstr "Gebruik de Enter toets om te wisselen tussen velden"
+
+#: dialogs/settings/rc.cpp:130 rc.cpp:36
+msgid "Use the ledger lens"
+msgstr "De Kasboek Lens gebruiken"
+
+#: rc.cpp:37
+msgid "Price Precision"
+msgstr "Koers nauwkeurigheid"
+
+#: dialogs/rc.cpp:65 rc.cpp:38
+msgid "Update price history"
+msgstr "Koershistorie bijwerken"
+
+#: dialogs/settings/rc.cpp:132 rc.cpp:39
+msgid "Show transaction form"
+msgstr "Transactieformulier tonen"
+
+#: rc.cpp:40
+msgid "Start with last selected view or homepage"
+msgstr "Start met laatst gekozen pagina of startpagina"
+
+#: rc.cpp:41
+msgid "Use GPG to encrypt data file"
+msgstr "Gebruik GPG om het bestand te versleutelen"
+
+#: rc.cpp:42
+msgid "Also encrypt against recover key"
+msgstr "Versleutel ook met de herstelsleutel"
+
+#: rc.cpp:43
+msgid "GPG User ID (deprecated)"
+msgstr "GPG Gebruikers ID"
+
+#: rc.cpp:44
+msgid "GPG User ID"
+msgstr "GPG Gebruikers ID"
+
+#: rc.cpp:45
+msgid "Run in expert (accountant) mode"
+msgstr "Start in expert (accountant) modus"
+
+#: rc.cpp:46
+msgid "Show splash screen during startup"
+msgstr "Laat splash-screen zien tijdens opstarten"
+
+#: rc.cpp:47
+msgid "Synchronize account in ledger and investment view"
+msgstr "Synchroniseer rekening in kasboek en beleggings overzicht"
+
+#: rc.cpp:48
+msgid "Icon size for view selection"
+msgstr "Pictogram grootte voor overzichten"
+
+#: rc.cpp:49
+msgid "list of hidden views"
+msgstr "lijst van verborgen overzichten"
+
+#: rc.cpp:50
+msgid "Firsttime switch to start new user wizard"
+msgstr "Eerste keer starten van de wizard voor nieuwe gebruikers"
+
+#: rc.cpp:51
+msgid "Show title bar on each view"
+msgstr "Toon titels in ieder scherm"
+
+#: rc.cpp:52
+msgid "Start string matches for e.g. payees at start of string"
+msgstr "Tekst is identiek aan bv. relaties vanaf begin van de tekst."
+
+#: rc.cpp:53
+msgid "Order of items on homepage"
+msgstr "Volgorde van items op de startpagina"
+
+#: rc.cpp:54
+msgid "Percentage of default font size used for home view HTML page"
+msgstr ""
+"Percentage van de standaard lettergrootte te gebruiken voor het bekijken van "
+"de HTML startpagina"
+
+#: rc.cpp:55
+msgid "Remember (manually adjusted) font size in home view on program end."
+msgstr ""
+"Onthoud de grootte van de lettertypes bij het afsluiten van het programma."
+
+#: rc.cpp:56
+msgid "Show account limit information on the Homepage"
+msgstr "Toon rekening limiet op de Startpagina"
+
+#: rc.cpp:58
+msgid "Hide closed accounts"
+msgstr "Verberg gesloten rekeningen"
+
+#: rc.cpp:59
+msgid "Hide finished schedules"
+msgstr "Verberg afgehandelde periodieke transacties"
+
+#: rc.cpp:61
+msgid "Show all register entries in full detail"
+msgstr "Laat alle kasboek transacties volledig zien"
+
+#: dialogs/settings/rc.cpp:129 rc.cpp:62
+msgid "Show a grid in the register"
+msgstr "Toon een raster in het kasboek"
+
+#: rc.cpp:63
+msgid "Show fancy group markers"
+msgstr "Laat mooie groeps markeringen zien"
+
+#: rc.cpp:64
+msgid "Show fancy markers for previous and current fiscal year"
+msgstr ""
+"Laat mooie markeringen zien voor het vorige en het huidige fiscale jaar"
+
+#: rc.cpp:65
+msgid "Starting month of the fiscal year"
+msgstr "Start maand van het fiscale jaar"
+
+#: rc.cpp:66
+msgid "Starting day of the fiscal year"
+msgstr "Startdatum voor het fiscale jaar"
+
+#: rc.cpp:67
+msgid "Start date"
+msgstr "Aanvangsdatum"
+
+#: dialogs/settings/rc.cpp:9 rc.cpp:68
+msgid "Use system colors"
+msgstr "Gebruik systeemlettertypen"
+
+#: rc.cpp:69
+msgid "List color"
+msgstr "Lijst kleuren"
+
+#: rc.cpp:70
+msgid "List background color"
+msgstr "Lijst achtergrond kleur"
+
+#: rc.cpp:71
+msgid "List grid color"
+msgstr "Lijst raster kleur"
+
+#: rc.cpp:72
+msgid "Background color for imported transactions"
+msgstr "Achtergrond kleur voor geïmporteerde transacties"
+
+#: rc.cpp:73
+msgid "Background color for matched transactions"
+msgstr "Achtergrond kleur voor identieke transacties"
+
+#: rc.cpp:74
+msgid "List color for erronous transactions"
+msgstr "Kleur van de lijst met foutieve transacties"
+
+#: rc.cpp:75
+msgid "List color for missing conversion rate"
+msgstr "Kleur van de lijst voor ontbrekende wisselkoersen"
+
+#: rc.cpp:76
+msgid "List color for negative values"
+msgstr "Kleur van de lijst voor negatieve waarden"
+
+#: rc.cpp:77
+msgid "Background color for group marker"
+msgstr "Achtergrondkleur voor groep markering"
+
+#: rc.cpp:78
+msgid "Background color for required fields"
+msgstr "Achtergrondkleur voor verplichte velden"
+
+#: rc.cpp:79
+msgid "Use system font"
+msgstr "Gebruik systeemlettertypen"
+
+#: dialogs/settings/rc.cpp:21 rc.cpp:80
+msgid "Cell font"
+msgstr "Lettertype voor Cel"
+
+#: dialogs/settings/rc.cpp:22 rc.cpp:81
+msgid "Header font"
+msgstr "Lettertype voor Kop"
+
+#: rc.cpp:82 rc.cpp:83
+msgid "Sort order of register in normal view"
+msgstr "Sorteervolgorde in het standaard kasboek overzicht"
+
+#: rc.cpp:84
+msgid "Sort order of register in search dialog"
+msgstr "Sorteervolgorde in de kasboek zoek dialoog"
+
+#: rc.cpp:85
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation"
+msgstr ""
+"Standaard status voor transactie ingevoerd tijdens het sluitend maken van de "
+"rekening"
+
+#: rc.cpp:86
+msgid "Number of days (plus/minus) to search for matching transactions"
+msgstr ""
+"Aaantal dagen (plus/minus) waarbinnen naar overeenkomstige transacties moet "
+"worden gezocht."
+
+#: rc.cpp:87
+msgid "During import, ask for a new payee's default category"
+msgstr ""
+"Vraag naar de standaard rubriek voor een nieuwe relatie tijdens het "
+"importeren"
+
+#: rc.cpp:88
+msgid "Method to calculate forecast"
+msgstr "Methode om de prognose te berekenen"
+
+#: rc.cpp:89
+msgid "Days to forecast"
+msgstr "Dagen te prognotiseren"
+
+#: rc.cpp:90
+msgid "Days of normal account cycle"
+msgstr "Dagen voor een normale rekening cyclus"
+
+#: rc.cpp:91
+msgid "Number of historic cycles to use in forecast"
+msgstr "Nummer van historische cycli te gebruiken in de prognose"
+
+#: rc.cpp:92
+msgid "Day of month to start forecast"
+msgstr "Dag van de maand waarop de prognose start"
+
+#: rc.cpp:93
+msgid "Method to calculate history-based forecast"
+msgstr ""
+"Methode voor het berekenen van een prognose gebaseerd op historische gegevens"
+
+#: rc.cpp:94
+msgid "Skip opening date when fetching transactions"
+msgstr "Sla startdatum over tijdens ophalen van transacties"
+
+#: rc.cpp:95
+msgid "Include future transaction when using Schedule Forecast"
+msgstr "Toekomstige transacties opnemen in periodieke transactie prognose"
+
+#: rc.cpp:96
+msgid "Include scheduled transactions when using Schedule Forecast"
+msgstr "Periodieke transacties opnemen in Periodieke transactie prognose"
+
+#: rc.cpp:97
+msgid "additional names for cash account"
+msgstr "additionele namen voor de kasrekening"
+
+#: rc.cpp:98
+msgid "additional names for checking account"
+msgstr "additionele namen voor de betaalrekening"
+
+#: rc.cpp:99
+msgid "additional names for credit card account"
+msgstr "additionele namen voor de creditcard rekening"
+
+#: rc.cpp:100
+msgid "additional names for asset account"
+msgstr "additionele namen voor de bezittingen rekening"
+
+#: rc.cpp:101
+msgid "additional names for opening balance payee"
+msgstr "additionele namen voor beginsaldo relatie"
+
+#: rc.cpp:102
+msgid "additional names for invoice accounts"
+msgstr "additionele namen voor de factuur rekeningen"
+
+#: rc.cpp:103 widgets/rc.cpp:161 widgets/rc.cpp:163
+msgid "..."
+msgstr "..."
+
+#: views/kcategoriesview.cpp:276
+msgid "Profit: "
+msgstr "Winst: "
+
+#: views/kcategoriesview.cpp:278
+msgid "Loss: "
+msgstr "Verlies: "
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:54
+#: dialogs/transactioneditor.cpp:605 views/kpayeesview.cpp:365
+#: widgets/kmymoneyonlinequoteconfig.cpp:54
+msgid "Accepts the entered data and stores it"
+msgstr "Accepteert de ingevoerde gegevens en slaat deze op"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:55 views/kpayeesview.cpp:366
+#: widgets/kmymoneyonlinequoteconfig.cpp:55
+msgid "Use this to accept the modified data."
+msgstr "Gebruik dit om de gewijzigde gegevens te accepteren."
+
+#: views/kpayeesview.cpp:491
+msgid ""
+"A payee with the name '%1' already exists. It is not advisable to have "
+"multiple payees with the same identification name. Are you sure you would "
+"like to rename the payee?"
+msgstr ""
+"Er is al een relatiemet de naam %1. Het is niet aan te raden meerdere "
+"relaties aan te maken onder dezelfde naam. Weet u zeker dat u de relatieeen "
+"andere naam wilt geven?"
+
+#: views/kpayeesview.cpp:518 views/kpayeesview.cpp:869
+msgid "Unable to modify payee"
+msgstr "Kan relatieniet wijzigen"
+
+#: views/kpayeesview.cpp:564
+msgid "Do you want to save the changes for <b>%1</b>?"
+msgstr "Wilt u de wijzigingen voor <b>%1</b> opslaan?"
+
+#: views/kbudgetview.cpp:490 views/kpayeesview.cpp:565
+msgid "Save changes"
+msgstr "Wijzigingen opslaan"
+
+#: views/kgloballedgerview.cpp:737 views/kpayeesview.cpp:662
+#: views/kpayeesview.cpp:753
+#, c-format
+msgid "Balance: %1"
+msgstr "Saldo: %1"
+
+#: views/kpayeesview.cpp:725 views/kpayeesview.cpp:731
+#, c-format
+msgid "Amortization of %1"
+msgstr "Aflossing van %1"
+
+#: views/kpayeesview.cpp:727 views/kpayeesview.cpp:733
+#, c-format
+msgid "Payment to %1"
+msgstr "Betaling aan %1"
+
+#: views/kpayeesview.cpp:736
+#, c-format
+msgid "Loan payment from %1"
+msgstr "Lening betaling van %1"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:123
+#: dialogs/kconfirmmanualenterdlg.cpp:133 views/kpayeesview.cpp:745
+#: widgets/kmymoneycategory.cpp:160 widgets/kmymoneycategory.cpp:166
+#: widgets/transaction.cpp:851 widgets/transaction.cpp:1397
+#: widgets/transaction.cpp:1411
+msgid ""
+"_: Split transaction (category replacement)\n"
+"Split transaction"
+msgstr "Splits transactie"
+
+#: views/kreportsview.cpp:262
+msgid ""
+"There was an error creating your report: \"%1\".\n"
+"Please report this error to the developer's list: kmymoney2-developer@lists."
+"sourceforge.net"
+msgstr ""
+"Er was een fout bij het maken van uw rapport: \"%1\".\n"
+"Rapporteer deze fout bij de ontwikkelaars: KMyMoney2-developer@lists."
+"sourceforge.net"
+
+#: views/kreportsview.cpp:264
+msgid "Critical Error"
+msgstr "Kritieke Fout"
+
+#: views/kreportsview.cpp:268
+msgid "Unable to generate report"
+msgstr "Kan rapport niet aanmaken"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:125 views/kreportsview.cpp:286
+#: views/rc.cpp:53 widgets/rc.cpp:146
+msgid "Chart"
+msgstr "Grafiek"
+
+#: views/kreportsview.cpp:287 widgets/rc.cpp:147
+msgid "Show the chart version of this report"
+msgstr "Laat de grafiek versie zien van dit rapport"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:112 views/khomeview.cpp:900
+#: views/kreportsview.cpp:294 views/kreportsview.cpp:328
+msgid "Report"
+msgstr "Rapport"
+
+#: views/kreportsview.cpp:295
+msgid "Show the report version of this chart"
+msgstr "Laat de rapport versie zien van deze grafiek"
+
+#: views/kmymoneyview.cpp:236 views/kreportsview.cpp:314
+#: views/kreportsview.cpp:326
+msgid "Reports"
+msgstr "Rapporten"
+
+#: views/khomeview.cpp:902 views/kreportsview.cpp:329 widgets/rc.cpp:56
+msgid "Comment"
+msgstr "Commentaar"
+
+#: views/kreportsview.cpp:432
+msgid "Charts"
+msgstr "Grafieken"
+
+#: views/khomeview.cpp:897 views/kreportsview.cpp:470
+msgid "Favorite Reports"
+msgstr "Favoriete Rapporten"
+
+#: views/kreportsview.cpp:486
+msgid "Old Customized Reports"
+msgstr "Oude aangepaste rapporten"
+
+#: views/kreportsview.cpp:579
+msgid "Include Stylesheet"
+msgstr "Voeg stijlblad bij"
+
+#: views/kreportsview.cpp:585
+msgid ""
+"_: CSV (Filefilter)\n"
+"CSV files"
+msgstr "CSV bestanden"
+
+#: views/kreportsview.cpp:586
+msgid ""
+"_: HTML (Filefilter)\n"
+"HTML files"
+msgstr "HTML bestanden"
+
+#: views/kreportsview.cpp:591
+msgid "Export as"
+msgstr "Exporteren als"
+
+#: views/kreportsview.cpp:619 views/kreportsview.cpp:660
+#: views/kreportsview.cpp:942 views/kreportsview.cpp:950
+#: views/kreportsview.cpp:958 views/kreportsview.cpp:968
+#: views/kreportsview.cpp:980 views/kreportsview.cpp:998
+#: views/kreportsview.cpp:1006 views/kreportsview.cpp:1014
+#: views/kreportsview.cpp:1022 views/kreportsview.cpp:1034
+#: views/kreportsview.cpp:1046 views/kreportsview.cpp:1056
+#: views/kreportsview.cpp:1070 views/kreportsview.cpp:1079
+#: views/kreportsview.cpp:1087 views/kreportsview.cpp:1095
+#: views/kreportsview.cpp:1103 views/kreportsview.cpp:1111
+#: views/kreportsview.cpp:1120 views/kreportsview.cpp:1132
+#: views/kreportsview.cpp:1145 views/kreportsview.cpp:1155
+#: views/kreportsview.cpp:1165 views/kreportsview.cpp:1175
+#: views/kreportsview.cpp:1185 views/kreportsview.cpp:1195
+#: views/kreportsview.cpp:1208 views/kreportsview.cpp:1222
+#: views/kreportsview.cpp:1239 views/kreportsview.cpp:1257
+#: views/kreportsview.cpp:1273 views/kreportsview.cpp:1295
+#: views/kreportsview.cpp:1304 views/kreportsview.cpp:1313
+#: views/kreportsview.cpp:1322 views/kreportsview.cpp:1336
+#: views/kreportsview.cpp:1347 views/kreportsview.cpp:1362
+#: views/kreportsview.cpp:1372 views/kreportsview.cpp:1383
+#: views/kreportsview.cpp:1393 views/kreportsview.cpp:1404
+#: views/kreportsview.cpp:1423 views/kreportsview.cpp:1432
+#: views/kreportsview.cpp:1444 views/kreportsview.cpp:1463
+#: views/kreportsview.cpp:1472 views/kreportsview.cpp:1481
+#: views/kreportsview.cpp:1490
+msgid "Default Report"
+msgstr "Standaard Rapport"
+
+#: views/kreportsview.cpp:621 views/kreportsview.cpp:661
+msgid "Custom Report"
+msgstr "Aangepast Rapport"
+
+#: views/kreportsview.cpp:622
+msgid " (Customized)"
+msgstr " (Aangepast)"
+
+#: views/kreportsview.cpp:690
+msgid ""
+"Are you sure you want to delete report <b>%1</b>? There is no way to "
+"recover it!"
+msgstr ""
+"Weet u zeker dat u rapport <b>%1</b> wilt verwijderen? U kunt deze niet meer "
+"terug halen!"
+
+#: views/kreportsview.cpp:690 views/kreportsview.cpp:702
+msgid "Delete Report?"
+msgstr "Rapport Verwijderen?"
+
+#: views/kreportsview.cpp:702
+msgid "Sorry, <b>%1</b> is a default report. You may not delete it."
+msgstr ""
+"Sorry, <b>%1</b> is een standaardrapport. U kunt deze niet verwijderen."
+
+#: views/kreportsview.cpp:882
+msgid "&Open"
+msgstr "&Openen"
+
+#: views/kreportsview.cpp:884
+msgid "&New report"
+msgstr "&Nieuw rapport"
+
+#: views/kreportsview.cpp:934
+msgid "Income and Expenses"
+msgstr "Inkomsten en Uitgaven"
+
+#: views/kreportsview.cpp:941
+msgid "Income and Expenses This Month"
+msgstr "Inkomsten en Uitgaven deze maand"
+
+#: views/kreportsview.cpp:949
+msgid "Income and Expenses This Year"
+msgstr "Inkomsten en Uitgaven dit jaar"
+
+#: views/kreportsview.cpp:957
+msgid "Income and Expenses By Year"
+msgstr "Inkomsten en Uitgaven per jaar"
+
+#: views/kreportsview.cpp:967
+msgid "Income and Expenses Graph"
+msgstr "Inkomsten en Uitgaven grafiek"
+
+#: views/kreportsview.cpp:979
+msgid "Income and Expenses Pie Chart"
+msgstr "Inkomsten en Uitgaven taart grafiek"
+
+#: views/khomeview.cpp:1361 views/kreportsview.cpp:990
+msgid "Net Worth"
+msgstr "Netto Vermogen"
+
+#: views/kreportsview.cpp:997
+msgid "Net Worth By Month"
+msgstr "Netto vermogen per maand "
+
+#: views/kreportsview.cpp:1005
+msgid "Net Worth Today"
+msgstr "Netto vermogen per vandaag"
+
+#: views/kreportsview.cpp:1013
+msgid "Net Worth By Year"
+msgstr "Netto vermogen per jaar"
+
+#: views/kreportsview.cpp:1021
+msgid "7-day Cash Flow Forecast"
+msgstr "7-daagse prognose voor uw cash flow"
+
+#: views/kreportsview.cpp:1033
+msgid "Net Worth Graph"
+msgstr "Netto vermogen grafiek"
+
+#: views/kreportsview.cpp:1045
+msgid "Account Balances by Institution"
+msgstr "Saldo van rekeningen per financiële instelling"
+
+#: views/kreportsview.cpp:1055
+msgid "Account Balances by Type"
+msgstr "Saldo per type rekening"
+
+#: views/kreportsview.cpp:1069
+msgid "Transactions by Account"
+msgstr "Transacties per rekening"
+
+#: views/kreportsview.cpp:1078
+msgid "Transactions by Category"
+msgstr "Transacties per rubriek"
+
+#: views/kreportsview.cpp:1086
+msgid "Transactions by Payee"
+msgstr "Transacties per relatie"
+
+#: views/kreportsview.cpp:1094
+msgid "Transactions by Month"
+msgstr "Transacties per maand"
+
+#: views/kreportsview.cpp:1102
+msgid "Transactions by Week"
+msgstr "Transacties per week"
+
+#: views/kreportsview.cpp:1110
+msgid "Loan Transactions"
+msgstr "Lening transacties"
+
+#: views/kreportsview.cpp:1119
+msgid "Transactions by Reconciliation Status"
+msgstr "Transacties per Controle Status"
+
+#: views/kreportsview.cpp:1125
+msgid "Cash Flow"
+msgstr "Cash flow"
+
+#: views/kreportsview.cpp:1131
+msgid "Cash Flow Transactions This Month"
+msgstr "Cash flow transacties deze maand"
+
+#: views/kmymoneyview.cpp:226 views/kmymoneyview.cpp:228
+#: views/kreportsview.cpp:1137
+msgid "Investments"
+msgstr "Beleggingen"
+
+#: views/kreportsview.cpp:1154
+msgid "Investment Holdings by Account"
+msgstr "Beleggingen: Portefeuille per Rekening"
+
+#: views/kreportsview.cpp:1164
+msgid "Investment Holdings by Type"
+msgstr "Beleggingen: Portefeuille per Type"
+
+#: views/kreportsview.cpp:1184
+msgid "Investment Performance by Type"
+msgstr "Beleggingen: Prestaties per Type"
+
+#: views/kreportsview.cpp:1194
+msgid "Investment Holdings Pie"
+msgstr "Beleggingen: Portefeuille grafiek"
+
+#: views/kreportsview.cpp:1207
+msgid "Investment Worth Graph"
+msgstr "Beleggingen: Waarde grafiek"
+
+#: views/kreportsview.cpp:1221
+msgid "Investment Price Graph"
+msgstr "Beleggingen: Koersverloop grafiek"
+
+#: views/kreportsview.cpp:1238
+msgid "Investment Moving Average Price Graph"
+msgstr "Beleggingen: Lopend gemiddelde koers grafiek"
+
+#: views/kreportsview.cpp:1256
+msgid "Investment Moving Average"
+msgstr "Beleggingen: Lopend gemiddelde"
+
+#: views/kreportsview.cpp:1272
+msgid "Investment Moving Average vs Actual"
+msgstr "Beleggingen: Gewogen gemiddelde vs actueel"
+
+#: views/kreportsview.cpp:1287
+msgid "Taxes"
+msgstr "Belastingen"
+
+#: views/kreportsview.cpp:1294
+msgid "Tax Transactions by Category"
+msgstr "Belasting transacties per rubriek"
+
+#: views/kreportsview.cpp:1303
+msgid "Tax Transactions by Payee"
+msgstr "Belasting transacties per relatie"
+
+#: views/kreportsview.cpp:1312
+msgid "Tax Transactions by Category Last Fiscal Year"
+msgstr "Belasting transacties per rubriek voor vorig fiscaal jaar"
+
+#: views/kreportsview.cpp:1321
+msgid "Tax Transactions by Payee Last Fiscal Year"
+msgstr "Belasting transacties per relatie in het vorige fiscaal jaar"
+
+#: views/kreportsview.cpp:1328
+msgid "Budgeting"
+msgstr "Budgettering"
+
+#: views/kreportsview.cpp:1335
+msgid "Budgeted vs. Actual This Year"
+msgstr "Budget vs. gerealiseerd dit jaar"
+
+#: views/kreportsview.cpp:1346
+msgid "Budgeted vs. Actual This Year (YTM)"
+msgstr "Budget vs. gerealiseerd dit jaar"
+
+#: views/khomeview.cpp:1383 views/kreportsview.cpp:1361
+msgid "Monthly Budgeted vs. Actual"
+msgstr "Maandelijks gebudgetteerd vs. gerealiseerd"
+
+#: views/kreportsview.cpp:1371
+msgid "Yearly Budgeted vs. Actual"
+msgstr "Jaarlijks gebudgetteerd vs. gerealiseerd"
+
+#: views/kreportsview.cpp:1382
+msgid "Monthly Budget"
+msgstr "Maandelijks budget"
+
+#: views/kreportsview.cpp:1392
+msgid "Yearly Budget"
+msgstr "Jaarlijks budget"
+
+#: views/kreportsview.cpp:1403
+msgid "Yearly Budgeted vs Actual Graph"
+msgstr "Jaarlijks gebudgetteerd vs. gerealiseerd"
+
+#: views/kreportsview.cpp:1422
+msgid "Forecast By Month"
+msgstr "Budget per maand"
+
+#: views/kreportsview.cpp:1431
+msgid "Forecast Next Quarter"
+msgstr "Budget voor volgende kwartaal"
+
+#: views/kreportsview.cpp:1443
+msgid "Net Worth Forecast Graph"
+msgstr "Grafiek voor Netto waarde prognose"
+
+#: dialogs/rc.cpp:126 dialogs/rc.cpp:128 dialogs/rc.cpp:466
+#: views/kreportsview.cpp:1455
+msgid "General Information"
+msgstr "Algemene informatie"
+
+#: views/kreportsview.cpp:1462
+msgid "Schedule Information"
+msgstr "Informatie over periodieke transactie "
+
+#: views/kreportsview.cpp:1471
+msgid "Schedule Summary Information"
+msgstr "Overzicht periodieke transacties"
+
+#: views/kreportsview.cpp:1480
+msgid "Account Information"
+msgstr "Rekening informatie"
+
+#: views/kreportsview.cpp:1489
+msgid "Loan Information"
+msgstr "Lening Informatie"
+
+#: dialogs/rc.cpp:323 views/kmymoneyview.cpp:148 views/kmymoneyview.cpp:150
+msgid "Institutions"
+msgstr "Financiële instellingen"
+
+#: dialogs/knewaccountdlg.cpp:98 views/kmymoneyview.cpp:162
+#: views/kmymoneyview.cpp:164 widgets/rc.cpp:4 widgets/rc.cpp:94
+msgid "Accounts"
+msgstr "Rekeningen"
+
+#: views/kmymoneyview.cpp:176
+msgid "Bills & Reminders"
+msgstr "Rekeningen en Herinneringen"
+
+#: views/kmymoneyview.cpp:178
+msgid "Scheduled transactions"
+msgstr "Betalingsagenda"
+
+#: dialogs/knewaccountdlg.cpp:98 dialogs/rc.cpp:193 views/kmymoneyview.cpp:188
+#: views/kmymoneyview.cpp:190 widgets/rc.cpp:91
+msgid "Categories"
+msgstr "Rubrieken"
+
+#: dialogs/kfindtransactiondlg.cpp:212 dialogs/rc.cpp:318
+#: views/kmymoneyview.cpp:199 views/kmymoneyview.cpp:201 widgets/rc.cpp:93
+msgid "Payees"
+msgstr "Relaties"
+
+#: views/kgloballedgerview.cpp:149 views/kmymoneyview.cpp:211
+msgid "Ledgers"
+msgstr "Kasboeken"
+
+#: views/kmymoneyview.cpp:353
+msgid "Creating transactions can only be performed in the ledger view"
+msgstr "Transacties kunnen alleen aangemaakt worden in het kasboek overzicht"
+
+#: views/kmymoneyview.cpp:367
+msgid "Modifying transactions can only be performed in the ledger view"
+msgstr ""
+"Aanpassen van transactie kan alleen uitgevoerd worden in het kasboek "
+"overzicht"
+
+#: views/kmymoneyview.cpp:382
+msgid "Duplicating transactions can only be performed in the ledger view"
+msgstr ""
+"Het dupliceren van transacties kan alleen uitgevoerd worden in het kasboek "
+"overzicht"
+
+#: views/kmymoneyview.cpp:394
+msgid "Edit the current selected transactions"
+msgstr "Bewerk de geselecteerde transacties"
+
+#: views/kmymoneyview.cpp:602
+msgid "<b>%1</b> is not a KMyMoney file."
+msgstr "<b>%1</b> is geen KMyMoney bestand."
+
+#: views/kmymoneyview.cpp:643
+msgid "GPG is not available for decryption of file <b>%1</b>"
+msgstr "GPG is niet beschikbaar voor decryptie van bestand <b>%1</b>"
+
+#: views/kmymoneyview.cpp:721
+msgid ""
+"File <b>%1</b> contains the old binary format used by KMyMoney. Please use "
+"an older version of KMyMoney (0.8.x) that still supports this format to "
+"convert it to the new XML based format."
+msgstr ""
+"Bestand <b>%1</b> bevateen oud formaat gebruikt door KMyMoney. Gebruik een "
+"oudere versie van KMyMoney (0.8.x) dat deze versie ondersteunt en kan "
+"converteren naar het nieuwe XML formaat."
+
+#: views/kmymoneyview.cpp:723
+msgid "File <b>%1</b> contains an unknown file format!"
+msgstr "Bestand <b>%1</b> heeft een onbekend bestand formaat!"
+
+#: views/kmymoneyview.cpp:728
+msgid "Cannot read from file <b>%1</b>!"
+msgstr "Kan bestand <b>%1</b> niet lezen!"
+
+#: views/kmymoneyview.cpp:732
+msgid "Cannot load file <b>%1</b>. Reason: %2"
+msgstr "Kan bestand <b>%1</b> niet laden. Reden: %2"
+
+#: views/kmymoneyview.cpp:742 views/kmymoneyview.cpp:748
+msgid "File <b>%1</b> not found!"
+msgstr "Bestand <b>%1</b> niet gevonden!"
+
+#: views/kmymoneyview.cpp:812
+msgid "Can't open database %1\n"
+msgstr "Kan database %1 niet openen\n"
+
+#: views/kmymoneyview.cpp:844
+msgid "An unrecoverable error occurred while reading the database"
+msgstr ""
+"Er is een niet corrigeerbare fout opgetreden tijdens het lezen van de "
+"database"
+
+#: views/kmymoneyview.cpp:846 views/kmymoneyview.cpp:1208
+msgid "Database malfunction"
+msgstr "Database functioneert niet goed"
+
+#: views/kmymoneyview.cpp:938
+msgid "Unknown fix level in input file"
+msgstr "Onbekend versie in Input bestand"
+
+#: views/kmymoneyview.cpp:984
+msgid ""
+"GPG does not seem to be installed on your system. Please make sure, that GPG "
+"can be found using the standard search path. This time, encryption is "
+"disabled."
+msgstr ""
+"GPG lijkt niet te zijn geïnstalleerd op uw systeem. Zorg ervoor dat GPG "
+"gevonden kan worden met het standaard zoekpad. Voor deze keer is encryptie "
+"uitgeschakeld."
+
+#: views/kmymoneyview.cpp:984
+msgid "GPG not found"
+msgstr "GPG niet gevonden"
+
+#: views/kmymoneyview.cpp:991
+msgid ""
+"You have selected to encrypt your data also with the KMyMoney recover key, "
+"but the key with id</p><p><center><b>%1</b></center></p>has not been found "
+"in your keyring at this time. Please make sure to import this key into your "
+"keyring. You can find it on the <a href=\"http://kmymoney2.sourceforge.net/"
+"\">KMyMoney web-site</a>. This time your data will not be encrypted with the "
+"KMyMoney recover key."
+msgstr ""
+"U heeft ervoor gekozen om uw gegevens te versleutelen met de KMyMoney "
+"herstelsleutel, maar de sleutel met id</p><p><center><b>%1</b></center></p> "
+"is op dit moment niet aangetroffen in uw sleutelbos. Zorg ervoor dat u deze "
+"sleutel importeert naar uw sleutelbos. U kunt het vinden op de <a href="
+"\"http://kmymoney2.sourceforge.net/\">KMyMoney website</a>. Deze keer zullen "
+"uw gegevens niet versleuteld worden met de KMyMoney herstelsleutel."
+
+#: views/kmymoneyview.cpp:991 views/kmymoneyview.cpp:1000
+msgid "GPG-Key not found"
+msgstr "GPG-Sleutel niet gevonden"
+
+#: views/kmymoneyview.cpp:1000
+msgid ""
+"You have specified to encrypt your data for the user-id</p><p><center><b>%1</"
+"b>.</center></p>Unfortunately, a valid key for this user-id was not found in "
+"your keyring. Please make sure to import a valid key for this user-id. This "
+"time, encryption is disabled."
+msgstr ""
+"U heeft ervoor gekozen om uw gegevens te versleutelen voor Gebruikers-ID</"
+"p><p><center><b>%1</b>.</center></p>Helaas is er geen geldige sleutel "
+"aangetroffen in uw sleutelbos. Zorg ervoor dat u een geldige sleutel "
+"importeert voor dit Gebruikers-ID. Deze keer is encryptie uitgeschakeld."
+
+#: views/kmymoneyview.cpp:1006
+msgid ""
+"You have configured to save your data in encrypted form using GPG. Please be "
+"aware, that this is a brand new feature which is yet untested. Make sure, "
+"you have the necessary understanding that you might loose all your data if "
+"you store it encrypted and cannot decrypt it later on! If unsure, answer "
+"<b>No</b>."
+msgstr ""
+"U heeft ingesteld dat uw gegevens in versleutelde vorm moeten worden "
+"opgeslagen met GPG. Let op! Dit os een gloednieuwe functie is die nog niet "
+"getest is. Denk er aan dat u al uw gegevens kunt verliezen als u dit "
+"versleuteld opslaat en het later niet meer kunt ontcijferen. Als u onzeker "
+"bent, antwoordt dan <b>Nee</b>."
+
+#: views/kmymoneyview.cpp:1008
+msgid "Store GPG encrypted"
+msgstr "Opslaan met GPG versleuteling"
+
+#: views/kmymoneyview.cpp:1038 views/kmymoneyview.cpp:1052
+msgid "Unable to open file '%1' for writing."
+msgstr "Kon bestand '%1' niet openen voor schrijven."
+
+#: views/kmymoneyview.cpp:1065 views/kmymoneyview.cpp:1074
+msgid "Failure while writing to '%1'"
+msgstr "Fout bij schrijven naar '%1'"
+
+#: views/kmymoneyview.cpp:1086 views/kmymoneyview.cpp:1181
+msgid "Tried to access a file when it's not open"
+msgstr ""
+"Geprobeerd toegang te krijgen tot een bestand terwijl deze niet geopend was"
+
+#: views/kmymoneyview.cpp:1092
+msgid ""
+"Since this version of KMyMoney only writes data files in its new format, "
+"files written with this version cannot be read by KMyMoney version 0.4. If "
+"you still want to use older versions of KMyMoney with your data files, "
+"please make sure you keep a backup-file of your finance data. If you want to "
+"abort this operation, please press Cancel now"
+msgstr ""
+"Omdat deze versie van KMyMoney alleen gegevensbestanden in het nieuwe "
+"formaat schrijft, kunnen bestanden die met deze versie geschreven zijn, niet "
+"gelezen worden door KMyMoney versie 0.4. Als u nog oudere versies van "
+"KMyMoney wilt gebruiken met uw gegevensbestanden, let er dan op dat u een "
+"reservekopie maakt van uw financiële gegevens. Als u deze bewerking wilt "
+"afbreken, kies dan nu Annuleren"
+
+#: views/kmymoneyview.cpp:1122
+msgid "Malformed URL '%1'"
+msgstr "Misvormde URL '%1'"
+
+#: views/kmymoneyview.cpp:1192
+msgid ""
+"Database contains data which must be removed before using SaveAs.\n"
+"Do you wish to continue?"
+msgstr ""
+"De database bevat gegevens die moeten worden verwijderd voordat u Opslaan "
+"Als kunt gebruiken.\n"
+"Wilt u doorgaan?"
+
+#: views/kmymoneyview.cpp:1205
+msgid ""
+"An unrecoverable error occurred while writing to the database.\n"
+"It may well be corrupt."
+msgstr ""
+"Er is een niet corrigeerbare fout opgetreden bij het schrijven in de "
+"database.\n"
+"De database is waarschijnlijk corrupt."
+
+#: views/kmymoneyview.cpp:1215
+msgid ""
+"Can't open or create database %1\n"
+"Retry SaveAsDatabase and click Help for further info"
+msgstr ""
+"Kan database %1 niet openen of aanmaken\n"
+"Probeer Opslaan Als Database en klik op Help voor verdere informatie"
+
+#: views/kmymoneyview.cpp:1354
+msgid "Afghanistan Afghani"
+msgstr "Afghaanse Afghani"
+
+#: views/kmymoneyview.cpp:1355
+msgid "Albanian Lek"
+msgstr "Albanese Lek"
+
+#: views/kmymoneyview.cpp:1356
+msgid "Netherland Antillian Guilder"
+msgstr "Nederlandse Antillen Gulden"
+
+#: views/kmymoneyview.cpp:1357
+msgid "Algerian Dinar"
+msgstr "Algerijnse Dinar"
+
+#: views/kmymoneyview.cpp:1358
+msgid "Andorran Franc"
+msgstr "Andorrese Franc"
+
+#: views/kmymoneyview.cpp:1359
+msgid "Andorran Peseta"
+msgstr "Andorra - Peseta"
+
+#: views/kmymoneyview.cpp:1360
+msgid "Angolan New Kwanza"
+msgstr "Angola - New Kwanza"
+
+#: views/kmymoneyview.cpp:1361
+msgid "Argentine Peso"
+msgstr "Argentijnse Peso"
+
+#: views/kmymoneyview.cpp:1362
+msgid "Aruban Florin"
+msgstr "Arubaanse Gulden"
+
+#: views/kmymoneyview.cpp:1363
+msgid "Australian Dollar"
+msgstr "Australische Dollar"
+
+#: views/kmymoneyview.cpp:1364
+msgid "Azerbaijani Manat"
+msgstr "Azaberdjan - Manat"
+
+#: views/kmymoneyview.cpp:1365
+msgid "Bahamian Dollar"
+msgstr "Bahaamse Dollar"
+
+#: views/kmymoneyview.cpp:1366
+msgid "Bahraini Dinar"
+msgstr "Bahreinse Dinar"
+
+#: views/kmymoneyview.cpp:1367
+msgid "Bangladeshi Taka"
+msgstr "Bangladesh - Taka"
+
+#: views/kmymoneyview.cpp:1368
+msgid "Barbados Dollar"
+msgstr "Barbados - Dollar"
+
+#: views/kmymoneyview.cpp:1369
+msgid "Belarussian Ruble"
+msgstr "Wit-Russische Roebel"
+
+#: views/kmymoneyview.cpp:1370
+msgid "Belize Dollar"
+msgstr "Beliziaanse Dollar"
+
+#: views/kmymoneyview.cpp:1371
+msgid "Bermudian Dollar"
+msgstr "Bermuda - Dollar"
+
+#: views/kmymoneyview.cpp:1372
+msgid "Bhutan Ngultrum"
+msgstr "Bhutan - Ngultrum"
+
+#: views/kmymoneyview.cpp:1373
+msgid "Bolivian Boliviano"
+msgstr "Bolivia - Boliviano"
+
+#: views/kmymoneyview.cpp:1374
+msgid "Bosnian Convertible Mark"
+msgstr "Bosnië - Converteerbare Mark"
+
+#: views/kmymoneyview.cpp:1375
+msgid "Botswana Pula"
+msgstr "Botswana - Pula"
+
+#: views/kmymoneyview.cpp:1376
+msgid "Brazilian Real"
+msgstr "Braziliaanse Real"
+
+#: views/kmymoneyview.cpp:1377
+msgid "British Pound"
+msgstr "Britse Pond"
+
+#: views/kmymoneyview.cpp:1378
+msgid "Brunei Dollar"
+msgstr "Bruneise Dollar"
+
+#: views/kmymoneyview.cpp:1379
+msgid "Bulgarian Lev"
+msgstr "Bulgaarde Lev"
+
+#: views/kmymoneyview.cpp:1380
+msgid "Burundi Franc"
+msgstr "Burundese Frank"
+
+#: views/kmymoneyview.cpp:1381
+msgid "CFA Franc BEAC"
+msgstr "CFA Frank BEAC"
+
+#: views/kmymoneyview.cpp:1382
+msgid "CFA Franc BCEAO"
+msgstr "CFA Frank BCEAO"
+
+#: views/kmymoneyview.cpp:1383
+msgid "CFP Franc Pacifique"
+msgstr "CFP Frank Pacifique"
+
+#: views/kmymoneyview.cpp:1384
+msgid "Cambodia Riel"
+msgstr "Cambodja - Riel"
+
+#: views/kmymoneyview.cpp:1385
+msgid "Canadian Dollar"
+msgstr "Canadese Dollar"
+
+#: views/kmymoneyview.cpp:1386
+msgid "Cape Verde Escudo"
+msgstr "Kaapverdische Escudo"
+
+#: views/kmymoneyview.cpp:1387
+msgid "Cayman Islands Dollar"
+msgstr "Kaaiman Eilanden Dollar"
+
+#: views/kmymoneyview.cpp:1388
+msgid "Chilean Peso"
+msgstr "Chileense Peso"
+
+#: views/kmymoneyview.cpp:1389
+msgid "Chinese Yuan Renminbi"
+msgstr "Chinese Yuan Renminbi"
+
+#: views/kmymoneyview.cpp:1390
+msgid "Colombian Peso"
+msgstr "Colombiaanse Peso"
+
+#: views/kmymoneyview.cpp:1391
+msgid "Comoros Franc"
+msgstr "Comoros - Franc"
+
+#: views/kmymoneyview.cpp:1392
+msgid "Costa Rican Colon"
+msgstr "Costa Ricaanse Colon"
+
+#: views/kmymoneyview.cpp:1393
+msgid "Croatian Kuna"
+msgstr "Kroatische Kuna"
+
+#: views/kmymoneyview.cpp:1394
+msgid "Cuban Peso"
+msgstr "Cubaanse Peso"
+
+#: views/kmymoneyview.cpp:1395
+msgid "Czech Koruna"
+msgstr "Tsjechie - Koruna"
+
+#: views/kmymoneyview.cpp:1396
+msgid "Danish Krone"
+msgstr "Deense Kroon"
+
+#: views/kmymoneyview.cpp:1397
+msgid "Djibouti Franc"
+msgstr "Djibouti - Franc"
+
+#: views/kmymoneyview.cpp:1398
+msgid "Dominican Peso"
+msgstr "Dominicaanse Peso"
+
+#: views/kmymoneyview.cpp:1399
+msgid "East Caribbean Dollar"
+msgstr "Oost Carribische eilanden - Dollar"
+
+#: views/kmymoneyview.cpp:1400
+msgid "Egyptian Pound"
+msgstr "Egyptische Pond"
+
+#: views/kmymoneyview.cpp:1401
+msgid "El Salvador Colon"
+msgstr "El Salvador Colon"
+
+#: views/kmymoneyview.cpp:1402
+msgid "Eritrean Nakfa"
+msgstr "Eritrea - Nafka"
+
+#: views/kmymoneyview.cpp:1403
+msgid "Estonian Kroon"
+msgstr "Estlandse Kroon"
+
+#: views/kmymoneyview.cpp:1404
+msgid "Ethiopian Birr"
+msgstr "Ethiopische Birr"
+
+#: views/kmymoneyview.cpp:1405
+msgid "Euro"
+msgstr "Euro"
+
+#: views/kmymoneyview.cpp:1406
+msgid "Falkland Islands Pound"
+msgstr "Falkland Eilanden Pond"
+
+#: views/kmymoneyview.cpp:1407
+msgid "Fiji Dollar"
+msgstr "Fiji Eilanden - Dollar"
+
+#: views/kmymoneyview.cpp:1408
+msgid "Gambian Dalasi"
+msgstr "Gambia - Dalasi"
+
+#: views/kmymoneyview.cpp:1409
+msgid "Georgian Lari"
+msgstr "Georgie - Lari"
+
+#: views/kmymoneyview.cpp:1410
+msgid "Ghanaian Cedi"
+msgstr "Ghana - Cedi"
+
+#: views/kmymoneyview.cpp:1411
+msgid "Gibraltar Pound"
+msgstr "Gibraltar - Pond"
+
+#: views/kmymoneyview.cpp:1412
+msgid "Guatemalan Quetzal"
+msgstr "Guatemala - Quetzal"
+
+#: views/kmymoneyview.cpp:1413
+msgid "Guinea-Bissau Peso"
+msgstr "Guinnee-Bissau - Peso"
+
+#: views/kmymoneyview.cpp:1414
+msgid "Guyanan Dollar"
+msgstr "Guyaanse Dollar"
+
+#: views/kmymoneyview.cpp:1415
+msgid "Haitian Gourde"
+msgstr "Haiti - Gourde"
+
+#: views/kmymoneyview.cpp:1416
+msgid "Honduran Lempira"
+msgstr "Honduras - Lempira"
+
+#: views/kmymoneyview.cpp:1417
+msgid "Hong Kong Dollar"
+msgstr "Hong Kong Dollar"
+
+#: views/kmymoneyview.cpp:1418
+msgid "Hungarian Forint"
+msgstr "Hongaarse Forint"
+
+#: views/kmymoneyview.cpp:1419
+msgid "Iceland Krona"
+msgstr "IJslandse Kroon"
+
+#: views/kmymoneyview.cpp:1420
+msgid "Indian Rupee"
+msgstr "Indiase Roepie"
+
+#: views/kmymoneyview.cpp:1421
+msgid "Indonesian Rupiah"
+msgstr "Indonesische Roepie"
+
+#: views/kmymoneyview.cpp:1422
+msgid "Iranian Rial"
+msgstr "Iran - Rial"
+
+#: views/kmymoneyview.cpp:1423
+msgid "Iraqi Dinar"
+msgstr "Iraakse Dinar"
+
+#: views/kmymoneyview.cpp:1424
+msgid "Israeli New Shekel"
+msgstr "Israelische Nieuwe Shekel"
+
+#: views/kmymoneyview.cpp:1425
+msgid "Jamaican Dollar"
+msgstr "Jamaicaanse Dollar"
+
+#: views/kmymoneyview.cpp:1426
+msgid "Japanese Yen"
+msgstr "Japanse Yen"
+
+#: views/kmymoneyview.cpp:1427
+msgid "Jordanian Dinar"
+msgstr "Jordaanse Dinar"
+
+#: views/kmymoneyview.cpp:1428
+msgid "Kazakhstan Tenge"
+msgstr "Kazachstan - Tenge"
+
+#: views/kmymoneyview.cpp:1429
+msgid "Kenyan Shilling"
+msgstr "Keniaanse Shilling"
+
+#: views/kmymoneyview.cpp:1430
+msgid "Kuwaiti Dinar"
+msgstr "Kuweit - Dinar"
+
+#: views/kmymoneyview.cpp:1431
+msgid "Kyrgyzstan Som"
+msgstr "Kyrgistan - Som"
+
+#: views/kmymoneyview.cpp:1432
+msgid "Laos Kip"
+msgstr "Laos Kip"
+
+#: views/kmymoneyview.cpp:1433
+msgid "Latvian Lats"
+msgstr "Letland - Lats"
+
+#: views/kmymoneyview.cpp:1434
+msgid "Lebanese Pound"
+msgstr "Libanese Pond"
+
+#: views/kmymoneyview.cpp:1435
+msgid "Lesotho Loti"
+msgstr "Lesotho - Litas"
+
+#: views/kmymoneyview.cpp:1436
+msgid "Liberian Dollar"
+msgstr "Liberiaanse Dollar"
+
+#: views/kmymoneyview.cpp:1437
+msgid "Libyan Dinar"
+msgstr "Libische Dinar"
+
+#: views/kmymoneyview.cpp:1438
+msgid "Lithuanian Litas"
+msgstr "Litouwen - Litas"
+
+#: views/kmymoneyview.cpp:1439
+msgid "Macau Pataca"
+msgstr "Macau - Pataca"
+
+#: views/kmymoneyview.cpp:1440
+msgid "Macedonian Denar"
+msgstr "Macedonie - Denar"
+
+#: views/kmymoneyview.cpp:1441
+msgid "Malagasy Franc"
+msgstr "Malagassie - Franc"
+
+#: views/kmymoneyview.cpp:1442
+msgid "Malawi Kwacha"
+msgstr "Malawese Kwacha"
+
+#: views/kmymoneyview.cpp:1443
+msgid "Malaysian Ringgit"
+msgstr "Maleissische Ringgit"
+
+#: views/kmymoneyview.cpp:1444
+msgid "Maldive Rufiyaa"
+msgstr "Malediven - Rufiyaa"
+
+#: views/kmymoneyview.cpp:1445
+msgid "Mali Republic Franc"
+msgstr "Mail - Franc"
+
+#: views/kmymoneyview.cpp:1446
+msgid "Mauritanian Ouguiya"
+msgstr "Mauritanie - Ouguiya"
+
+#: views/kmymoneyview.cpp:1447
+msgid "Mauritius Rupee"
+msgstr "Mauritius - Rupee"
+
+#: views/kmymoneyview.cpp:1448
+msgid "Mexican Peso"
+msgstr "Mexicaanse Peso"
+
+#: views/kmymoneyview.cpp:1449
+msgid "Moldavian Leu"
+msgstr "Albanese Lek"
+
+#: views/kmymoneyview.cpp:1450
+msgid "Mongolian Tugrik"
+msgstr "Mongolie - Tugrik"
+
+#: views/kmymoneyview.cpp:1451
+msgid "Moroccan Dirham"
+msgstr "Marokkaanse Dirham"
+
+#: views/kmymoneyview.cpp:1452
+msgid "Mozambique Metical"
+msgstr "Mozambiek - Metical"
+
+#: views/kmymoneyview.cpp:1453
+msgid "Myanmar Kyat"
+msgstr "Myanmar - Kyat"
+
+#: views/kmymoneyview.cpp:1454
+msgid "Namibian Dollar"
+msgstr "Namibische Dollar"
+
+#: views/kmymoneyview.cpp:1455
+msgid "Nepalese Rupee"
+msgstr "Nepalese Roepie"
+
+#: views/kmymoneyview.cpp:1456
+msgid "New Zealand Dollar"
+msgstr "Nieuw Zeelandse Dollar"
+
+#: views/kmymoneyview.cpp:1457
+msgid "Nicaraguan Cordoba Oro"
+msgstr "Nicaragua - Cordoba Oro"
+
+#: views/kmymoneyview.cpp:1458
+msgid "Nigerian Naira"
+msgstr "Nigeria - Naira"
+
+#: views/kmymoneyview.cpp:1459
+msgid "North Korean Won"
+msgstr "Noord Koreaanse Won"
+
+#: views/kmymoneyview.cpp:1460
+msgid "Norwegian Kroner"
+msgstr "Norwegische Kroon"
+
+#: views/kmymoneyview.cpp:1461
+msgid "Omani Rial"
+msgstr "Oman - Rial"
+
+#: views/kmymoneyview.cpp:1462
+msgid "Pakistan Rupee"
+msgstr "Pakistaanse Roepie"
+
+#: views/kmymoneyview.cpp:1463
+msgid "Panamanian Balboa"
+msgstr "Panama Balbao"
+
+#: views/kmymoneyview.cpp:1464
+msgid "Papua New Guinea Kina"
+msgstr "Papua Nieuw Guineese Kina"
+
+#: views/kmymoneyview.cpp:1465
+msgid "Paraguay Guarani"
+msgstr "Paraguay - Guerani"
+
+#: views/kmymoneyview.cpp:1466
+msgid "Peruvian Nuevo Sol"
+msgstr "Peruaanse Nuevo Sol"
+
+#: views/kmymoneyview.cpp:1467
+msgid "Philippine Peso"
+msgstr "Fillipijnen - Peso"
+
+#: views/kmymoneyview.cpp:1468
+msgid "Polish Zloty"
+msgstr "Poolse Zloty"
+
+#: views/kmymoneyview.cpp:1469
+msgid "Qatari Rial"
+msgstr "Quatar - Rial"
+
+#: views/kmymoneyview.cpp:1470
+msgid "Romanian Leu (new)"
+msgstr "Roemenie - Leu (nieuw)"
+
+#: views/kmymoneyview.cpp:1471
+msgid "Russian Ruble"
+msgstr "Russische Roebel"
+
+#: views/kmymoneyview.cpp:1472
+msgid "Rwanda Franc"
+msgstr "Rwandese Frank"
+
+#: views/kmymoneyview.cpp:1473
+msgid "Samoan Tala"
+msgstr "Samos - Tala"
+
+#: views/kmymoneyview.cpp:1474
+msgid "Sao Tome and Principe Dobra"
+msgstr "San Toma - Dobra"
+
+#: views/kmymoneyview.cpp:1475
+msgid "Saudi Riyal"
+msgstr "Saoedische Riyal"
+
+#: views/kmymoneyview.cpp:1476
+msgid "Seychelles Rupee"
+msgstr "Seychellen - Rupee"
+
+#: views/kmymoneyview.cpp:1477
+msgid "Sierra Leone Leone"
+msgstr "Sierre Leone - Leone"
+
+#: views/kmymoneyview.cpp:1478
+msgid "Singapore Dollar"
+msgstr "Singapore Dollar"
+
+#: views/kmymoneyview.cpp:1481
+msgid "Solomon Islands Dollar"
+msgstr "Solomon Eilanden Dollar"
+
+#: views/kmymoneyview.cpp:1482
+msgid "Somali Shilling"
+msgstr "Somali Shilling"
+
+#: views/kmymoneyview.cpp:1483
+msgid "South African Rand"
+msgstr "Zuid Afrikaanse Rand"
+
+#: views/kmymoneyview.cpp:1484
+msgid "South Korean Won"
+msgstr "Zuid Koreaanse Won"
+
+#: views/kmymoneyview.cpp:1485
+msgid "Sri Lanka Rupee"
+msgstr "Sri Lankaanse Roepie"
+
+#: views/kmymoneyview.cpp:1486
+msgid "St. Helena Pound"
+msgstr "St. Helena Pond"
+
+#: views/kmymoneyview.cpp:1487
+msgid "Sudanese Dinar"
+msgstr "Soedanese Dinar"
+
+#: views/kmymoneyview.cpp:1488
+msgid "Suriname Guilder"
+msgstr "Surinaamse Gulden"
+
+#: views/kmymoneyview.cpp:1489
+msgid "Swaziland Lilangeni"
+msgstr "Swasiland - Lilangeni"
+
+#: views/kmymoneyview.cpp:1490
+msgid "Swedish Krona"
+msgstr "Zweedse Kroon"
+
+#: views/kmymoneyview.cpp:1491
+msgid "Swiss Franc"
+msgstr "Zwitserse Frank"
+
+#: views/kmymoneyview.cpp:1492
+msgid "Syrian Pound"
+msgstr "Syrische Pond"
+
+#: views/kmymoneyview.cpp:1493
+msgid "Taiwan Dollar"
+msgstr "Taiwanese Dollar"
+
+#: views/kmymoneyview.cpp:1494
+msgid "Tajikistan Somani"
+msgstr "Tajikstan - Somani"
+
+#: views/kmymoneyview.cpp:1495
+msgid "Tanzanian Shilling"
+msgstr "Tanzaniaanse Shilling"
+
+#: views/kmymoneyview.cpp:1496
+msgid "Thai Baht"
+msgstr "Thaise Baht"
+
+#: views/kmymoneyview.cpp:1497
+msgid "Tongan Pa'anga"
+msgstr "Tonga - Pa'anga"
+
+#: views/kmymoneyview.cpp:1498
+msgid "Trinidad and Tobago Dollar"
+msgstr "Trinidad en Tobago Dollar"
+
+#: views/kmymoneyview.cpp:1499
+msgid "Tunisian Dinar"
+msgstr "Tunesische Dinar"
+
+#: views/kmymoneyview.cpp:1500
+msgid "Turkish Lira (new)"
+msgstr "Turkse Lira (nieuw)"
+
+#: views/kmymoneyview.cpp:1501
+msgid "Turkmenistan Manat"
+msgstr "Turkmenistan - Manat"
+
+#: views/kmymoneyview.cpp:1502
+msgid "US Dollar"
+msgstr "VS Dollar"
+
+#: views/kmymoneyview.cpp:1503
+msgid "Uganda Shilling"
+msgstr "Oegandese Shilling"
+
+#: views/kmymoneyview.cpp:1504
+msgid "Ukraine Hryvnia"
+msgstr "Oekraine - Hryvnia"
+
+#: views/kmymoneyview.cpp:1505
+msgid "United Arab Emirates Dirham"
+msgstr "Verenigde Arabische Emiraten Dirham"
+
+#: views/kmymoneyview.cpp:1506
+msgid "Uruguayan Peso"
+msgstr "Uruguayaanse Peso"
+
+#: views/kmymoneyview.cpp:1507
+msgid "Uzbekistani Sum"
+msgstr "Oezbekistan - Sum"
+
+#: views/kmymoneyview.cpp:1508
+msgid "Vanuatu Vatu"
+msgstr "Vanuatu Vatu"
+
+#: views/kmymoneyview.cpp:1509
+msgid "Venezuelan Bolivar"
+msgstr "Venezuelaanse Bolivar"
+
+#: views/kmymoneyview.cpp:1510
+msgid "Vietnamese Dong"
+msgstr "Vietnamese Dong"
+
+#: views/kmymoneyview.cpp:1511
+msgid "Yugoslav Dinar"
+msgstr "Joegoslavische Dinar"
+
+#: views/kmymoneyview.cpp:1512
+msgid "Zambian Kwacha"
+msgstr "Zambische Kwacha"
+
+#: views/kmymoneyview.cpp:1513
+msgid "Zimbabwe Dollar"
+msgstr "Zimbabwaanse Dollar"
+
+#: views/kmymoneyview.cpp:1515
+msgid "Gold"
+msgstr "Goud"
+
+#: views/kmymoneyview.cpp:1516
+msgid "Palladium"
+msgstr "Palladium"
+
+#: views/kmymoneyview.cpp:1517
+msgid "Platinum"
+msgstr "Platinum"
+
+#: views/kmymoneyview.cpp:1518
+msgid "Silver"
+msgstr "Zilver"
+
+#: views/kmymoneyview.cpp:1551
+msgid "Austrian Schilling"
+msgstr "Oostenrijk - Schilling"
+
+#: views/kmymoneyview.cpp:1552
+msgid "German Mark"
+msgstr "Duitse Mark"
+
+#: views/kmymoneyview.cpp:1553
+msgid "French Franc"
+msgstr "Franse Frank"
+
+#: views/kmymoneyview.cpp:1554
+msgid "Italian Lira"
+msgstr "Italiaanse Lire"
+
+#: views/kmymoneyview.cpp:1555
+msgid "Spanish Peseta"
+msgstr "Spaanse Peseta"
+
+#: views/kmymoneyview.cpp:1556
+msgid "Dutch Guilder"
+msgstr "Nederlandse Gulden"
+
+#: views/kmymoneyview.cpp:1557
+msgid "Belgian Franc"
+msgstr "Belgische Frank"
+
+#: views/kmymoneyview.cpp:1558
+msgid "Luxembourg Franc"
+msgstr "Luxemburgse Frank"
+
+#: views/kmymoneyview.cpp:1559
+msgid "Portuguese Escudo"
+msgstr "Portugese Escudo"
+
+#: views/kmymoneyview.cpp:1560
+msgid "Irish Pound"
+msgstr "Ierse Pond"
+
+#: views/kmymoneyview.cpp:1561
+msgid "Finnish Markka"
+msgstr "Finse Markka"
+
+#: views/kmymoneyview.cpp:1562
+msgid "Greek Drachma"
+msgstr "Griekse Drachme"
+
+#: views/kmymoneyview.cpp:1564
+msgid "Romanian Leu"
+msgstr "Roemenie - Leu"
+
+#: views/kmymoneyview.cpp:1566
+msgid "Russian Ruble (old)"
+msgstr "Russische Roebel"
+
+#: views/kmymoneyview.cpp:1568
+msgid "Slovenian Tolar"
+msgstr "Sloveense Tolar"
+
+#: views/kmymoneyview.cpp:1571
+msgid "Turkish Lira"
+msgstr "Turkse Lira"
+
+#: views/kmymoneyview.cpp:1574
+msgid "Maltese Lira"
+msgstr "Maltese Lira"
+
+#: views/kmymoneyview.cpp:1575
+msgid "Cyprus Pound"
+msgstr "Cypriotische Pond"
+
+#: views/kmymoneyview.cpp:1578
+msgid "Slovak Koruna"
+msgstr "Slowakije - Koruna"
+
+#: views/kmymoneyview.cpp:1888
+msgid ""
+"The account \"%1\" was previously created as loan account but some "
+"information is missing. The new loan wizard will be started to collect all "
+"relevant information. Please use a KMyMoney version >= 0.8.7 and < 0.9 to "
+"correct the problem."
+msgstr ""
+"De rekening \"%1\" was eerder aangemaakt als een lening maar er mist "
+"informatie. De wizard voor een nieuwe lening start nu om de ontbrekende "
+"informatie te verzamelen. Gebruik een KMyMoney versie later dan 0.8.7 en "
+"voor 0.9 om dit probleem op te lossen."
+
+#: views/kmymoneyview.cpp:1892
+msgid "Account problem"
+msgstr "Rekening probleem"
+
+#: views/kmymoneyview.cpp:1941
+msgid "Unable to add schedule: "
+msgstr "Kan periodieke transactie niet toevoegen: "
+
+#: views/kmymoneyview.cpp:1970
+msgid "Fix transactions"
+msgstr "Transacties repareren"
+
+#: views/kaccountsview.cpp:522 views/kinstitutionsview.cpp:300
+msgid "Net Worth: "
+msgstr "Netto waarde: "
+
+#: dialogs/rc.cpp:108 dialogs/rc.cpp:163 dialogs/rc.cpp:250 dialogs/rc.cpp:755
+#: dialogs/rc.cpp:830 views/kinvestmentview.cpp:77 widgets/register.cpp:572
+msgid "Quantity"
+msgstr "Hoeveelheid"
+
+#: views/kscheduledlistitem.cpp:137
+msgid "Finished"
+msgstr "Voltooid"
+
+#: views/kbudgetview.cpp:109
+msgid "Creates a new budget"
+msgstr "Creëer een nieuw budget"
+
+#: views/kbudgetview.cpp:110
+msgid "Use this to create a new empty budget."
+msgstr "Gebruik dit om een nieuw blanco budget aan te maken."
+
+#: views/kbudgetview.cpp:116
+msgid "Rename the current selected budget"
+msgstr "Geef huidig budget een andere naam"
+
+#: views/kbudgetview.cpp:117
+msgid "Use this to start renaming the selected budget."
+msgstr "Gebruik dit om het geselecteerde budget een andere naam te geven."
+
+#: views/kbudgetview.cpp:123
+msgid "Delete the current selected budget"
+msgstr "Verwijder het geselecteerde budget"
+
+#: views/kbudgetview.cpp:124
+msgid "Use this to delete the selected budget."
+msgstr "Gebruik dit om het geselecteerde budget te verwijderen."
+
+#: views/kbudgetview.cpp:130
+msgid "Accepts the entered values and stores the budget"
+msgstr "Accepteert de ingevoerde data en slaat het budget op"
+
+#: views/kbudgetview.cpp:131
+msgid "Use this to store the modified data."
+msgstr "Gebruik dit om de gewijzigde gegevens op te slaan."
+
+#: views/kbudgetview.cpp:137
+msgid "Revert budget to last saved state"
+msgstr "Terug naar laatste opgeslagen versie"
+
+#: views/kbudgetview.cpp:138
+msgid "Use this to discard the modified data."
+msgstr "Gebruik dit om de gewijzigde gegevens niet op te slaan."
+
+#: views/kbudgetview.cpp:489
+msgid "Do you want to save the changes for <b>%1</b>"
+msgstr "Wilt u de wijzigingen voor <b>%1</b> opslaan"
+
+#: views/kbudgetview.cpp:610
+msgid ""
+"A budget with the name '%1' already exists. It is not advisable to have "
+"multiple budgets with the same identification name. Are you sure you would "
+"like to rename the budget?"
+msgstr ""
+"Er bestaat al een budget onder de naam %1. Het is niet aan te raden meerdere "
+"budgetten met dezelfde naam aan te maken. Weet u zeker dat u dit budget een "
+"andere naam wilt geven?"
+
+#: views/kbudgetview.cpp:635 views/kbudgetview.cpp:750
+msgid "Unable to modify budget"
+msgstr "Kan budget niet wijzigen"
+
+#: views/kbudgetview.cpp:736
+msgid "Unable to reset budget"
+msgstr "Kan budget niet herstellen"
+
+#: views/rc.cpp:1
+msgid "List"
+msgstr "Lijst"
+
+#: views/rc.cpp:2 views/rc.cpp:20
+msgid "Collapse all accounts in the list"
+msgstr "Alle rekeningen in deze lijst inklappen"
+
+#: views/rc.cpp:3 views/rc.cpp:21
+msgid "Expand all accounts in the list"
+msgstr "Alle rekeningen in deze lijst uitvouwen"
+
+#: views/rc.cpp:4
+msgid "Icons"
+msgstr "Iconen"
+
+#: views/rc.cpp:5 views/rc.cpp:22
+msgid "Note: Unused categories are not shown as selected by settings."
+msgstr ""
+"N.B.: Ongebruikte rubrieken worden niet getoond, zoals ingesteld in "
+"Instellingen - KMyMoney instellen."
+
+#: views/rc.cpp:6 views/rc.cpp:23 views/rc.cpp:54
+msgid "Total Profits:"
+msgstr "Totale Winsten:"
+
+#: views/rc.cpp:7
+msgid "Your budgets"
+msgstr "Uw budgetten"
+
+#: dialogs/rc.cpp:340 dialogs/rc.cpp:841 dialogs/settings/rc.cpp:124
+#: views/rc.cpp:8 widgets/rc.cpp:48 widgets/rc.cpp:150
+msgid "New"
+msgstr "Nieuw"
+
+#: views/rc.cpp:9
+msgid "Ren"
+msgstr "Ren"
+
+#: views/rc.cpp:10
+msgid "Del"
+msgstr "Del"
+
+#: views/rc.cpp:11
+msgid "Res"
+msgstr "Res"
+
+#: views/rc.cpp:12
+msgid "Upd"
+msgstr "Upd"
+
+#: views/rc.cpp:15
+msgid "Hide unused budget categories"
+msgstr "Verberg niet gebruikte budget rubrieken"
+
+#: views/rc.cpp:16
+msgid "Assignments"
+msgstr "Toewijzingen"
+
+#: views/rc.cpp:19
+msgid "Include subaccounts"
+msgstr "Inclusief sub-rekeningen"
+
+#: dialogs/settings/rc.cpp:23 views/rc.cpp:24
+msgid "Forecast Settings"
+msgstr "Prognose Opties"
+
+#: views/rc.cpp:25
+msgid "Days to Forecast:"
+msgstr "Aantal dagen te prognotiseren:"
+
+#: views/rc.cpp:26
+msgid "Days of Accounts Cycle:"
+msgstr "Dagen voor rekening cyclus:"
+
+#: dialogs/settings/rc.cpp:25 views/rc.cpp:27
+msgid "Day of Month to start Forecast:"
+msgstr "Dag van de maand waarop de prognose start:"
+
+#: views/rc.cpp:28
+msgid "Historic Cycles:"
+msgstr "Historische cycli:"
+
+#: views/rc.cpp:29
+msgid "Chart Detail:"
+msgstr "Grafiek details:"
+
+#: views/rc.cpp:30 widgets/kmymoneyaccountselector.cpp:64 widgets/rc.cpp:65
+msgid "All"
+msgstr "Alles"
+
+#: views/rc.cpp:31 widgets/rc.cpp:66
+msgid "Top-Level"
+msgstr "Hoogste niveau"
+
+#: views/rc.cpp:32 widgets/rc.cpp:67
+msgid "Groups"
+msgstr "Groepen"
+
+#: views/rc.cpp:33 widgets/rc.cpp:68
+msgid "Totals"
+msgstr "Totalen"
+
+#: views/rc.cpp:34
+msgid "<p>Choose what level of detail to show on the chart.</p>"
+msgstr "<p>Kies wel detail niveau moet worden getoond in de grafiek.</p>"
+
+#: views/rc.cpp:35
+msgid "Current Forecast Method:"
+msgstr "Huidige prognose methodiek:"
+
+#: views/rc.cpp:36
+msgid "method"
+msgstr "Methode"
+
+#: dialogs/settings/rc.cpp:32 views/rc.cpp:37
+msgid "History Forecast Method"
+msgstr "Prognose op basis van historie"
+
+#: dialogs/settings/rc.cpp:33 views/rc.cpp:38
+msgid "Simple Moving Average"
+msgstr "Eenvoudige Lopend gemiddelde"
+
+#: dialogs/settings/rc.cpp:34 views/rc.cpp:39
+msgid "Weighted Moving Average"
+msgstr "Gewogen gemiddelde"
+
+#: dialogs/settings/rc.cpp:35 views/rc.cpp:40
+msgid "Linear Regression"
+msgstr "Lineaire regressie"
+
+#: dialogs/keditloanwizard.cpp:315 dialogs/rc.cpp:628 dialogs/rc.cpp:647
+#: views/rc.cpp:43
+msgid "Summary"
+msgstr "Samenvatting"
+
+#: views/rc.cpp:45
+msgid "0 days"
+msgstr "0 dagen"
+
+#: views/rc.cpp:46
+msgid "30 days"
+msgstr "30 dagen"
+
+#: views/rc.cpp:47
+msgid "60 days"
+msgstr "60 dagen"
+
+#: views/rc.cpp:48
+msgid "90 days"
+msgstr "90 dagen"
+
+#: views/rc.cpp:49
+msgid "New Item"
+msgstr "Nieuw onderwerp"
+
+#: views/rc.cpp:50 widgets/rc.cpp:64
+msgid "Detail"
+msgstr "Detail"
+
+#: views/rc.cpp:51
+msgid "Advanced"
+msgstr "Geavanceerd"
+
+#: views/rc.cpp:52
+msgid "Budget Forecast"
+msgstr "Budget prognose"
+
+#: views/rc.cpp:55
+msgid "Investment Summary"
+msgstr "Beleggingen: Samenvatting"
+
+#: views/rc.cpp:56
+msgid "Select Account:"
+msgstr "Rekening Selecteren:"
+
+#: views/rc.cpp:57
+msgid ""
+"Summary of the equities contained in this account, showing your holdings and "
+"their most recent price."
+msgstr ""
+"Samenvatting van alle aandelen voor deze rekening. Hier ziet u uw "
+"portefeuille en de actuele waarde."
+
+#: views/rc.cpp:60 widgets/register.cpp:564
+msgid "No."
+msgstr "Nr."
+
+#: views/rc.cpp:64
+msgid "Balance: "
+msgstr "Saldo: "
+
+#: views/rc.cpp:65
+msgid "Address"
+msgstr "Adres"
+
+#: views/rc.cpp:66
+msgid "Payee Information"
+msgstr "Relatie Informatie"
+
+#: views/rc.cpp:67
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#: dialogs/rc.cpp:393 views/rc.cpp:69
+msgid "Telephone/Fax:"
+msgstr "Telefoon/Fax:"
+
+#: views/rc.cpp:70
+msgid "Notes"
+msgstr "Opmerkingen"
+
+#: views/rc.cpp:71
+msgid "Address:"
+msgstr "Adres:"
+
+#: views/rc.cpp:72
+msgid "Matching"
+msgstr "Vergelijken"
+
+#: views/rc.cpp:73
+msgid "Transaction Matching"
+msgstr "Transacties vergelijken"
+
+#: views/rc.cpp:74
+msgid "No matching"
+msgstr "Niet vergelijken"
+
+#: views/rc.cpp:75
+msgid "Match on Payee name"
+msgstr "Vergelijk op naam van relatie"
+
+#: views/rc.cpp:76
+msgid "Match on a name listed below"
+msgstr "Vergelijk op onderstaande naam"
+
+#: views/rc.cpp:77
+msgid "List of matching names"
+msgstr "Lijst van identieke namen"
+
+#: views/rc.cpp:78
+msgid ""
+"This list contains the names that will match this payee if a transaction is "
+"imported from an external source. Keep in mind, that you can specify regular "
+"expressions here."
+msgstr ""
+"Deze lijst bevat de namen die vergeleken worden met relaties als een "
+"transactie wordt geimporteerd vanuit een externe bron. Let op: U kunt hier "
+"ook eigen regels invoeren."
+
+#: views/rc.cpp:79
+msgid "Ignore Case"
+msgstr "Hoofd- en kleine letters"
+
+#: views/rc.cpp:80
+msgid "Default Account"
+msgstr "Standaard Rubriek/Rekening"
+
+#: views/rc.cpp:81
+msgid ""
+"Use the default account for\n"
+"new transactions with this payee"
+msgstr ""
+"Gebruik een standaard rubriek/rekening voor\n"
+"alle transacties van of naar deze relatie"
+
+#: views/rc.cpp:82
+msgid "Default category:"
+msgstr "Standaard rubriek"
+
+#: views/rc.cpp:83
+msgid "Suggest a category"
+msgstr "Stel een rubriek of rekening voor"
+
+#: views/rc.cpp:85
+msgid "New Scheduled transaction..."
+msgstr "Nieuwe periodieke transactie..."
+
+#: views/rc.cpp:86
+msgid "Filter Accounts"
+msgstr "Filter rekeningen"
+
+#: views/rc.cpp:87
+msgid "List View"
+msgstr "Lijst Weergave"
+
+#: views/rc.cpp:88
+msgid "Calendar View"
+msgstr "Kalender Weergave"
+
+#: views/kinstitutionsview.cpp:43
+msgid "Institution/Account"
+msgstr "Financiële instelling/Rekening"
+
+#: views/kinstitutionsview.cpp:157
+msgid "Accounts with no institution assigned"
+msgstr "Rekeningen niet gekoppeld aan financiële instelling"
+
+#: views/kscheduledview.cpp:70
+msgid "Type/Name"
+msgstr "Type/Naam"
+
+#: views/kscheduledview.cpp:75
+msgid "Frequency"
+msgstr "Frequentie"
+
+#: views/kscheduledview.cpp:157
+msgid "Unable to load accounts: "
+msgstr "Kan rekeningen niet laden: "
+
+#: views/kscheduledview.cpp:171 views/kscheduledview.cpp:429
+#: views/kscheduledview.cpp:445 widgets/kmymoneyscheduledcalendar.cpp:46
+msgid "Bills"
+msgstr "Afschrijvingen"
+
+#: dialogs/rc.cpp:232 dialogs/rc.cpp:706 views/kscheduledview.cpp:172
+#: views/kscheduledview.cpp:431 views/kscheduledview.cpp:447
+#: widgets/kmymoneyscheduledcalendar.cpp:47
+msgid "Deposits"
+msgstr "Bijschrijvingen"
+
+#: views/kscheduledview.cpp:173 views/kscheduledview.cpp:435
+#: views/kscheduledview.cpp:451
+msgid "Loans"
+msgstr "Aflossingen"
+
+#: views/kscheduledview.cpp:357
+msgid "Error activating context menu"
+msgstr "Fout bij het activeren van context menu"
+
+#: views/kscheduledview.cpp:385
+msgid "Error executing item"
+msgstr "Fout bij uitvoeren van item"
+
+#: views/kscheduledview.cpp:419
+msgid "Unable to filter account"
+msgstr "Kan rekening niet filteren"
+
+#: views/kgloballedgerview.cpp:508
+msgid "Statement Details"
+msgstr "Bankafschrift details"
+
+#: views/kgloballedgerview.cpp:512
+msgid "Statement Deposit Details"
+msgstr "Details over bijschrijvingen"
+
+#: views/kgloballedgerview.cpp:513
+msgid "Statement Payment Details"
+msgstr "Details over betalingen"
+
+#: views/kgloballedgerview.cpp:642
+msgid "%1 deposits (%3), %2 payments (%4)"
+msgstr "%1 bijschrijvingen (%3), %2 betalingen (%4)"
+
+#: views/kgloballedgerview.cpp:649
+msgid "%1 payments (%2)"
+msgstr "%1 betalingen (%2)"
+
+#: views/kgloballedgerview.cpp:653
+msgid "%1 deposits (%2)"
+msgstr "%1 Stortingen (%2)"
+
+#: views/kgloballedgerview.cpp:721
+#, c-format
+msgid "Statement: %1"
+msgstr "Bankafschrift: %1"
+
+#: views/kgloballedgerview.cpp:722 views/kgloballedgerview.cpp:736
+#, c-format
+msgid "Cleared: %1"
+msgstr "Betaald: %1"
+
+#: views/kgloballedgerview.cpp:723
+#, c-format
+msgid "Difference: %1"
+msgstr "Verschil: %1"
+
+#: views/kgloballedgerview.cpp:730
+#, c-format
+msgid "Last reconciled: %1"
+msgstr "Laatste keer rekening sluitend gemaakt op: %1"
+
+#: views/kgloballedgerview.cpp:732
+msgid "Never reconciled"
+msgstr "Nooit gecontroleerd"
+
+#: views/kgloballedgerview.cpp:772
+msgid "Investment value: %1%2"
+msgstr "Beleggingswaarde: %1%2"
+
+#: views/kgloballedgerview.cpp:1040
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to continue to edit the transactions anyway?"
+msgstr ""
+"Tenminste één splitsing van deze transactie is gecontroleerd. Wilt u "
+"doorgaan met het bewerken van de transactie?"
+
+#: views/kgloballedgerview.cpp:1051
+msgid ""
+"At least one split of the selected transactions has been frozen. Editing the "
+"transactions is therefore prohibited."
+msgstr ""
+"Tenminste één splitsing van deze transactie is bevroren. U kunt deze "
+"transactie niet bewerken."
+
+#: views/kgloballedgerview.cpp:1053
+msgid "Transaction already frozen"
+msgstr "Transactie is al bevroren"
+
+#: views/kgloballedgerview.cpp:1058
+msgid ""
+"At least one split of the selected transaction references an account that "
+"has been closed. Editing the transactions is therefore prohibited."
+msgstr ""
+"Tenminste één splitsing van deze transactie verwijst naar een rekening die "
+"is gesloten. U kunt derhalve deze transactie niet bewerken."
+
+#: views/kgloballedgerview.cpp:1060
+msgid "Account closed"
+msgstr "Rekening gesloten"
+
+#: views/kgloballedgerview.cpp:1349
+msgid "Cannot create transactions when no account is selected."
+msgstr "Kan geen transactie aanmaken als er geen rekening is geselecteerd."
+
+#: views/kgloballedgerview.cpp:1354
+msgid "Cannot create transactions in the context of a category."
+msgstr "Kan geen transacties aanmaken binnen de context van een rubriek."
+
+#: views/kgloballedgerview.cpp:1358
+msgid "Cannot create transactions in a closed account."
+msgstr "Kan geen transacties aanmaken voor een gesloten rekening."
+
+#: views/kgloballedgerview.cpp:1370
+msgid "Cannot process transaction with focus if it is not selected."
+msgstr "Kan geen transactie aanpassen als deze niet is geselecteerd."
+
+#: views/kgloballedgerview.cpp:1400
+msgid "Cannot edit transactions with frozen splits."
+msgstr "Kan transacties met bevroren splitsingen niet bewerken."
+
+#: views/kgloballedgerview.cpp:1411
+msgid "Cannot edit transactions in the context of a category."
+msgstr "Kan transacties niet bewerken."
+
+#: views/kgloballedgerview.cpp:1430
+msgid ""
+"Cannot edit investment transactions and non-investment transactions together."
+msgstr ""
+"Kan een beleggings transactie en een normale transactie niet tegelijkertijd "
+"bewerken."
+
+#: views/kgloballedgerview.cpp:1438
+msgid "Cannot edit multiple split transactions at once."
+msgstr "Kan niet meer dan één transactie per keer bewerken."
+
+#: views/kgloballedgerview.cpp:1448
+msgid "Cannot edit investment transactions in the context of this account."
+msgstr ""
+"Kan beleggings transactie niet bewerken in de context van deze rekening."
+
+#: views/kforecastview.cpp:164
+msgid "Scheduled"
+msgstr "Gepland"
+
+#: views/kforecastview.cpp:169
+msgid "History"
+msgstr "Historie"
+
+#: views/kforecastview.cpp:296
+msgid "The balance of %2 is below the minimum balance %3 today."
+msgstr "Het saldo van %2 is vandaag onder het minimum saldo van %3."
+
+#: views/kforecastview.cpp:301 views/khomeview.cpp:1043
+msgid "The balance of %1 will drop below the minimum balance %2 in %3 days."
+msgstr "Het saldo van %1 zakt onder het minimum saldo van %2 over %3 dagen."
+
+#: views/kforecastview.cpp:318 views/khomeview.cpp:1059
+msgid "The balance of %1 is below %2 today."
+msgstr "Het saldo van %1 is vandaag lager dan %2."
+
+#: views/kforecastview.cpp:323 views/khomeview.cpp:1064
+msgid "The balance of %1 is above %2 today."
+msgstr "Het saldo van %1 is vandaag hoger dan %2."
+
+#: views/kforecastview.cpp:330 views/khomeview.cpp:1070
+msgid "The balance of %1 will drop below %2 in %3 days."
+msgstr "Het saldo van %1 wordt lager dan %2 over %3 dagen."
+
+#: views/kforecastview.cpp:335 views/khomeview.cpp:1075
+msgid "The balance of %1 will raise above %2 in %3 days."
+msgstr "Het saldo van %1 stijgt boven %2 over %3 dagen."
+
+#: views/kforecastview.cpp:348
+msgid "The account %1 is decreasing %2 per cycle."
+msgstr "De rekening %1 daalt %2 per cyclus."
+
+#: views/kforecastview.cpp:404 widgets/kmymoneyaccounttreeforecast.cpp:114
+#, c-format
+msgid "Min Bal %1"
+msgstr "Min saldo %1"
+
+#: views/kforecastview.cpp:406 widgets/kmymoneyaccounttreeforecast.cpp:116
+#, c-format
+msgid "Min Date %1"
+msgstr "Min Datum %1"
+
+#: views/kforecastview.cpp:409 widgets/kmymoneyaccounttreeforecast.cpp:119
+#, c-format
+msgid "Max Bal %1"
+msgstr "Max Saldo %1"
+
+#: views/kforecastview.cpp:411 widgets/kmymoneyaccounttreeforecast.cpp:121
+#, c-format
+msgid "Max Date %1"
+msgstr "Max Datum %1"
+
+#: views/kforecastview.cpp:413 widgets/kmymoneyaccounttreeforecast.cpp:123
+msgid "Average"
+msgstr "Gemiddeld"
+
+#: views/kforecastview.cpp:649 views/khomeview.cpp:268 views/khomeview.cpp:275
+msgid "Networth Forecast"
+msgstr "Prognose van uw saldo"
+
+#: views/khomeview.cpp:203
+msgid "Your Financial Summary"
+msgstr "Uw Financiële Samenvatting"
+
+#: views/khomeview.cpp:218
+msgid "Preferred Accounts"
+msgstr "Voorkeursrekeningen"
+
+#: views/khomeview.cpp:225 views/khomeview.cpp:227
+msgid "Payment Accounts"
+msgstr "Overzicht rekeningen"
+
+#: views/khomeview.cpp:256
+msgid "Show KMyMoney welcome page"
+msgstr "Toon KMyMoney welkomstpagina"
+
+#: views/khomeview.cpp:409
+msgid "Overdue payments"
+msgstr "Achterstallige betalingen"
+
+#: views/khomeview.cpp:424 views/khomeview.cpp:497 views/khomeview.cpp:531
+msgid "Balance after"
+msgstr "Saldo na"
+
+#: views/khomeview.cpp:482
+msgid "Today's payments"
+msgstr "Betalingen voor vandaag"
+
+#: views/khomeview.cpp:516
+msgid "Future payments"
+msgstr "Toekomstige betalingen"
+
+#: views/khomeview.cpp:585
+msgid "Less..."
+msgstr "Minder..."
+
+#: views/khomeview.cpp:587
+msgid "More..."
+msgstr "Meer..."
+
+#: views/khomeview.cpp:622
+msgid "Enter schedule"
+msgstr "Voer Periodieke Transactie in"
+
+#: views/khomeview.cpp:624
+msgid "Skip schedule"
+msgstr "Sla periodieke transactie over"
+
+#: views/khomeview.cpp:627
+msgid "Edit schedule"
+msgstr "Bewerk periodieke transactie"
+
+#: views/khomeview.cpp:631
+msgid " (%1 payments)"
+msgstr " (%1 betalingen)"
+
+#: views/khomeview.cpp:771
+msgid "To Minimum Balance / Maximum Credit"
+msgstr "Verschil t.o.v. minimum saldo / maximale krediet"
+
+#: views/khomeview.cpp:964
+msgid "%1 Day Forecast"
+msgstr "%1 dagen prognose"
+
+#: views/khomeview.cpp:973 widgets/kmymoneyaccounttreeforecast.cpp:67
+msgid "%1 days"
+msgstr "%1 dagen"
+
+#: views/khomeview.cpp:1039
+msgid "The balance of %1 is below the minimum balance %2 today."
+msgstr "Het saldo van %1 is vandaag onder het minimum saldo van %2."
+
+#: views/khomeview.cpp:1175
+msgid ""
+"Before KMyMoney can give you detailed information about your financial "
+"status, you need to create at least one account. Until then, KMyMoney shows "
+"the welcome page instead."
+msgstr ""
+"Voordat KMyMoney u gedetailleerde informatie over uw financiële situatie kan "
+"verstrekken, dient u tenminste een rekening aan te maken. KMyMoney toont u "
+"derhalve de Startpagina."
+
+#: views/khomeview.cpp:1258
+msgid "Assets and Liabilities Summary"
+msgstr "Overzicht Activa en Passiva"
+
+#: views/khomeview.cpp:1262
+msgid "Asset Accounts"
+msgstr "Activa"
+
+#: views/khomeview.cpp:1270
+msgid "Liability Accounts"
+msgstr "Passiva"
+
+#: views/khomeview.cpp:1348
+msgid "Total Assets"
+msgstr "Totaal Activa"
+
+#: views/khomeview.cpp:1354
+msgid "Total Liabilities"
+msgstr "Totaal Passiva"
+
+#: views/khomeview.cpp:1399
+msgid "Current Month Summary"
+msgstr "Huidige maand samenvatting"
+
+#: views/khomeview.cpp:1403 views/khomeview.cpp:1440
+msgid "Budgeted"
+msgstr "Gebudgetteerd"
+
+#: views/khomeview.cpp:1433
+msgid "Budget Overruns"
+msgstr "Budget overschrijdingen"
+
+#: views/khomeview.cpp:1502
+msgid "No Budget Categories have been overrun"
+msgstr "Er zijn budget rubrieken overschreden"
+
+#: views/khomeview.cpp:1801
+msgid "Cash Flow Summary"
+msgstr "Cash flow samenvatting"
+
+#: views/khomeview.cpp:1808
+msgid "Income and Expenses of Current Month"
+msgstr "Inkomsten en Uitgaven in de huidige maand"
+
+#: views/khomeview.cpp:1816
+msgid "Scheduled Income"
+msgstr "Gepland inkomen"
+
+#: views/khomeview.cpp:1819
+msgid "Expenses"
+msgstr "Uitgaven"
+
+#: views/khomeview.cpp:1822
+msgid "Scheduled Expenses"
+msgstr "Geplande uitgaven"
+
+#: views/khomeview.cpp:1850
+msgid "Liquid Assets and Liabilities"
+msgstr "Liquide middelen & Schulden"
+
+#: views/khomeview.cpp:1855
+msgid "Liquid Assets"
+msgstr "Liquide middelen"
+
+#: views/khomeview.cpp:1858
+msgid "Transfers to Liquid Liabilities"
+msgstr "Overboekingen naar liquide schulden"
+
+#: views/khomeview.cpp:1861
+msgid "Liquid Liabilities"
+msgstr "Liquide schulden"
+
+#: views/khomeview.cpp:1864
+msgid "Other Transfers"
+msgstr "Overige overboekingen"
+
+#: views/khomeview.cpp:1908
+msgid "Cash Flow Status"
+msgstr "Cash flow status"
+
+#: views/khomeview.cpp:1914
+msgid "Expected Liquid Assets"
+msgstr "Prognose liquide middelen"
+
+#: views/khomeview.cpp:1917
+msgid "Expected Liquid Liabilities"
+msgstr "Prognose liquide schulden"
+
+#: views/khomeview.cpp:1920
+msgid "Expected Profit/Loss"
+msgstr "Verwachte Winst/Verlies"
+
+#: plugins/ofximport/ofximporterplugin.cpp:64
+msgid "OFX..."
+msgstr "OFX..."
+
+#: plugins/ofximport/ofximporterplugin.cpp:69
+msgid "OFX import file selection"
+msgstr "OFX import; bestand selectie"
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid ""
+"Unable to import %1 using the OFX importer plugin. This file is not the "
+"correct format."
+msgstr ""
+"Kon %1 niet importeren met OFX invoegtoepassing %2. Dit bestand heeft niet "
+"het juiste formaat."
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid "Incorrect format"
+msgstr "Onjuist formaat"
+
+#: plugins/ofximport/ofximporterplugin.cpp:122
+msgid "Unable to parse file"
+msgstr "Kan bestand niet verwerken"
+
+#: plugins/ofximport/ofximporterplugin.cpp:576
+msgid "Online settings"
+msgstr "Online instellingen"
+
+#: plugins/ofximport/ofximporterplugin.cpp:635
+#, c-format
+msgid "Error connecting to bank: %1"
+msgstr "Fout bij verbinding zoeken met bank: %1"
+
+#: plugins/ofximport/ofximporterplugin.cpp:646
+msgid ""
+"Unable to import %1 using the OFX importer plugin. The plugin returned the "
+"following error:<p>%2"
+msgstr ""
+"Kon %1 niet importeren met de OFX invoegtoepassing. De invoegtoepassing gaf "
+"de volgende foutmelding terug:<p>%2"
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Importing process terminated unexpectedly."
+msgstr "Importeer proces is overwacht gestopt."
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Failed to import all statements."
+msgstr "Kan niet alle afschriften importeren."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "The HTTP request failed."
+msgstr "Het HTTP verzoek is mislukt."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "Failed"
+msgstr "Mislukt"
+
+#: plugins/ofximport/ofxpartner.cpp:410
+msgid "Cannot open file %1 for writing"
+msgstr "Kon bestand '%1' niet openen voor schrijven"
+
+#: plugins/ofximport/ofxpartner.cpp:414
+msgid "OFX setup error"
+msgstr "OFX setup fout"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid "Loading banklist"
+msgstr "Lijst van banken wordt geladen"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid ""
+"Getting list of banks from http://moneycentral.msn.com/\n"
+"This may take some time depending on the available bandwidth."
+msgstr ""
+"Ophalen van de lijst van banken via http://moneycentral.msn.com/\n"
+"Dit kan enige tijd duren."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:155
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:199
+msgid "Supports online statements<br>"
+msgstr "Ondersteunt online bankafschriften"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:157
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:201
+msgid "Supports investments<br>"
+msgstr "Ondersteunt investeringen<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:159
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:203
+msgid "Supports bill payment (but not supported by KMyMoney yet)<br>"
+msgstr ""
+"Ondersteunt betalen op rekening (Let op: nog niet ondersteunt in KMyMoney)"
+"<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:163
+msgid "Does not support online banking</p>"
+msgstr "Geen ondersteuning voor online bankieren</p>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:173
+msgid "Please choose a bank."
+msgstr "Kies een bank a.u.b."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:179
+msgid "Please fill all fields with values."
+msgstr "Vul a.u.b.alle velden met getallen"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:271
+msgid "No suitable accounts were found at this bank."
+msgstr "Er zijn geen geschikte rekeningen gevonden bij deze bank."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:283
+msgid "Please choose an account"
+msgstr "Kies a.u.b. een rekening"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:386
+msgid "Server message: %1\n"
+msgstr "Server melding: %1\n"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+msgid "Your bank returned warnings when signing on"
+msgstr "Uw bank geeft waarschuwingen tijdens het aanmelden"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+#, c-format
+msgid "WARNING %1"
+msgstr "WAARSCHUWING %1"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+msgid "Error signing onto your bank"
+msgstr "Fout bij verbinding zoeken met bank: %1"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, c-format
+msgid "ERROR %1"
+msgstr "FOUT %1"
+
+#: plugins/ofximport/dialogs/konlinebankingstatus.cpp:59
+msgid "Enabled & configured"
+msgstr "Gestart & geconfigureerd"
+
+#: plugins/ofximport/dialogs/rc.cpp:1
+msgid "OFX Direct Connect"
+msgstr "OFX Directe Verbinding"
+
+#: plugins/ofximport/dialogs/rc.cpp:2
+msgid "Contacting bank..."
+msgstr "Bezig contact te leggen met de bank..."
+
+#: plugins/ofximport/dialogs/rc.cpp:4
+msgid "Online Banking Account Setup"
+msgstr "Set-up voor online bankieren"
+
+#: plugins/ofximport/dialogs/rc.cpp:5
+msgid "Select Financial Institution"
+msgstr "Selecteer een financiële instelling"
+
+#: plugins/ofximport/dialogs/rc.cpp:6
+msgid "Please select your financial institution from the list below..."
+msgstr "Selecteer een financiële instelling uit onderstaande lijst..."
+
+#: plugins/ofximport/dialogs/rc.cpp:7
+msgid "Automatic"
+msgstr "Automatisch"
+
+#: plugins/ofximport/dialogs/rc.cpp:8
+msgid "Financial Institution"
+msgstr "Financiële instelling"
+
+#: plugins/ofximport/dialogs/rc.cpp:9
+msgid "Manual"
+msgstr "Handmatig"
+
+#: plugins/ofximport/dialogs/rc.cpp:10
+msgid "Org"
+msgstr "Org"
+
+#: plugins/ofximport/dialogs/rc.cpp:11
+msgid "FID"
+msgstr "FID"
+
+#: dialogs/settings/rc.cpp:120 plugins/ofximport/dialogs/rc.cpp:12
+#: widgets/rc.cpp:46
+msgid "URL"
+msgstr "URL"
+
+#: plugins/ofximport/dialogs/rc.cpp:13
+msgid "Enter Login Details"
+msgstr "Voer aanmeld gegevens in"
+
+#: plugins/ofximport/dialogs/rc.cpp:14
+msgid ""
+"Please enter the username and password you use to log into this bank for "
+"online banking. Please note that many banks require a separate signup, and "
+"assign a separate PIN or password just for online banking from home."
+msgstr ""
+"Voer uw gebruikersnaam en wachtwoord in om in te loggen bij uw bank voor "
+"online bankieren. Let op: sommige banken vereisen een separate wijze van "
+"aanmelden, bv met een PINcode of wachtwoord specifiek voor het online "
+"bankieren."
+
+#: plugins/ofximport/dialogs/rc.cpp:15
+msgid "Connection Details"
+msgstr "Verbindings details"
+
+#: plugins/ofximport/dialogs/rc.cpp:16
+msgid "Username"
+msgstr "Gebruikersnaam"
+
+#: plugins/ofximport/dialogs/rc.cpp:17 plugins/ofximport/dialogs/rc.cpp:36
+msgid "Header Version"
+msgstr "Versie"
+
+#: plugins/ofximport/dialogs/rc.cpp:18 plugins/ofximport/dialogs/rc.cpp:37
+msgid "Identify as"
+msgstr "Identificeer als"
+
+#: dialogs/rc.cpp:742 plugins/ofximport/dialogs/rc.cpp:19
+msgid "Password"
+msgstr "Wachtwoord"
+
+#: plugins/ofximport/dialogs/rc.cpp:20
+msgid "Select Account"
+msgstr "Selecteer Rekening"
+
+#: plugins/ofximport/dialogs/rc.cpp:21
+msgid ""
+"Please select the account from your financial institution from the list "
+"below which matches this account."
+msgstr ""
+"Selecteer een rekening bij uw financiële instelling uit de onderstaande "
+"lijst, welke overeenkomt met deze rekening in kMyMoney."
+
+#: plugins/ofximport/dialogs/rc.cpp:24
+msgid "Bank"
+msgstr "Bank"
+
+#: plugins/ofximport/dialogs/rc.cpp:25
+msgid "Branch"
+msgstr "Sector"
+
+#: plugins/ofximport/dialogs/rc.cpp:26
+msgid "WizardPage"
+msgstr "Wizard pagina"
+
+#: plugins/ofximport/dialogs/rc.cpp:27
+msgid ""
+"Congratulations! You have successfully set up your bank for online banking "
+"via OFX."
+msgstr ""
+"Gefeliciteerd! U heeft online bankieren via OFX correct geconfigureerd."
+
+#: plugins/ofximport/dialogs/rc.cpp:28
+msgid "Account Details"
+msgstr "Rekening details"
+
+#: plugins/ofximport/dialogs/rc.cpp:29 plugins/ofximport/dialogs/rc.cpp:31
+msgid "&lt;Not configured&gt;"
+msgstr "&lt;Niet geconfigureerd&gt;"
+
+#: plugins/ofximport/dialogs/rc.cpp:30
+msgid "BANK/BROKER:"
+msgstr "BANK/EFFECTENMAKELAAR"
+
+#: plugins/ofximport/dialogs/rc.cpp:32
+msgid "Unavailable"
+msgstr "Niet beschikbaar"
+
+#: plugins/ofximport/dialogs/rc.cpp:33
+msgid "ACCOUNT:"
+msgstr "REKENING:"
+
+#: plugins/ofximport/dialogs/rc.cpp:34
+msgid "STATUS:"
+msgstr "STATUS:"
+
+#: plugins/ofximport/dialogs/rc.cpp:35
+msgid "OFX Details"
+msgstr "OFX details"
+
+#: plugins/ofximport/dialogs/rc.cpp:38
+msgid "Start date of import"
+msgstr "Aanvangsdatum bij importeren"
+
+#: plugins/ofximport/dialogs/rc.cpp:39
+msgid "To&day minus"
+msgstr "Van&daag en eerder"
+
+#: plugins/ofximport/dialogs/rc.cpp:40
+msgid "days"
+msgstr "dagen"
+
+#: plugins/ofximport/dialogs/rc.cpp:41
+msgid "Last &update"
+msgstr "Laatste &update"
+
+#: plugins/ofximport/dialogs/rc.cpp:42
+msgid "Pi&ck date"
+msgstr "Ki&es datum"
+
+#: plugins/ofximport/dialogs/rc.cpp:43
+msgid "Name is derived from"
+msgstr "Naam is afgeleid van"
+
+#: plugins/ofximport/dialogs/rc.cpp:44
+msgid "P&AYEEID"
+msgstr "B&egunstigdeID"
+
+#: plugins/ofximport/dialogs/rc.cpp:45
+msgid "&NAME"
+msgstr "&NAAM"
+
+#: plugins/ofximport/dialogs/rc.cpp:46
+msgid "field if both are present in download"
+msgstr "veld indien beide aanwezig zijn tijdens download"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:81
+msgid "Quicken Windows 2003"
+msgstr "Quicken Windows 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:82
+msgid "Quicken Windows 2004"
+msgstr "Quicken Windows 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:83
+msgid "Quicken Windows 2005"
+msgstr "Quicken Windows 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:84
+msgid "Quicken Windows 2006"
+msgstr "Quicken Windows 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:85
+msgid "Quicken Windows 2007"
+msgstr "Quicken Windows 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:86
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:111
+msgid "Quicken Windows 2008"
+msgstr "Quicken Windows 2008"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:89
+msgid "MS-Money 2003"
+msgstr "MS-Money 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:90
+msgid "MS-Money 2004"
+msgstr "MS-Money 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:91
+msgid "MS-Money 2005"
+msgstr "MS-Money 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:92
+msgid "MS-Money 2006"
+msgstr "MS-Money 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:93
+msgid "MS-Money 2007"
+msgstr "MS-Money 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:94
+msgid "MS-Money Plus"
+msgstr "MS-Money Plus"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:91
+msgid "Report Configuration"
+msgstr "Rapport Configuratie"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:117
+#: dialogs/kreportconfigurationfilterdlg.cpp:135
+msgid "Rows/Columns"
+msgstr "Rijen/Kolommen"
+
+#: dialogs/investtransactioneditor.cpp:203
+#: dialogs/investtransactioneditor.cpp:537
+#: dialogs/investtransactioneditor.cpp:579 dialogs/rc.cpp:103
+#: dialogs/rc.cpp:158 dialogs/rc.cpp:245 dialogs/rc.cpp:750 dialogs/rc.cpp:794
+#: widgets/kmymoneyaccountselector.cpp:182 widgets/register.cpp:64
+#: widgets/register.cpp:567 widgets/transaction.cpp:1500
+msgid "Security"
+msgstr "Symbool"
+
+#: dialogs/investtransactioneditor.cpp:211
+msgid "Asset account"
+msgstr "Bezittingen rekening"
+
+#: dialogs/investtransactioneditor.cpp:1073
+msgid "Price/Share"
+msgstr "Koers/Aandeel"
+
+#: dialogs/kmergetransactionsdlg.cpp:39
+msgid "Merge Transactions"
+msgstr "Voeg transacties samen"
+
+#: dialogs/kmergetransactionsdlg.cpp:40
+msgid "Are you sure you wish to merge these transactions?"
+msgstr "Weet u zeker dat u deze transacties wilt samenvoegen?"
+
+#: dialogs/kstartdlg.cpp:59
+msgid "Start Dialog"
+msgstr "Start dialoog"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Templates"
+msgstr "Sjablonen"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Select templates"
+msgstr "Selecteer sjablonen"
+
+#: dialogs/kstartdlg.cpp:80 dialogs/kstartdlg.cpp:119
+msgid "New KMyMoney document"
+msgstr "Nieuw KMyMoney document"
+
+#: dialogs/kstartdlg.cpp:90
+msgid "Open a KMyMoney document"
+msgstr "Open een KMyMoney document"
+
+#: dialogs/kstartdlg.cpp:96
+msgid ""
+"%1|KMyMoney files (*.kmy)\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|KMyMoney bestanden (*.kmy)\n"
+"%2|Alle bestanden (*.*)"
+
+#: dialogs/kstartdlg.cpp:102
+msgid "Recent Files"
+msgstr "Recente Bestanden"
+
+#: dialogs/kstartdlg.cpp:217
+msgid "Blank Document"
+msgstr "Leeg Document"
+
+#: dialogs/knewbudgetdlg.cpp:71
+msgid "Please specify a budget name"
+msgstr "Specificeer a.u.b. een budget naam"
+
+#: dialogs/kgncpricesourcedlg.cpp:48
+#, c-format
+msgid "Investment: %1"
+msgstr "Beleggingen: %1"
+
+#: dialogs/kgncpricesourcedlg.cpp:49
+#, c-format
+msgid "Quote source: %1"
+msgstr "Bron voor koersen: %1"
+
+#: dialogs/kmymoneypricedlg.cpp:62 dialogs/ksecuritylisteditor.cpp:69
+msgid "Delete this entry"
+msgstr "Dit item verwijderen"
+
+#: dialogs/ksecuritylisteditor.cpp:70
+msgid "Remove this security item from the file"
+msgstr "Verwijder dit aandeel uit het bestand"
+
+#: dialogs/ksecuritylisteditor.cpp:73
+msgid "&Add"
+msgstr "&Toevoegen"
+
+#: dialogs/kmymoneypricedlg.cpp:68 dialogs/ksecuritylisteditor.cpp:75
+msgid "Add a new entry"
+msgstr "Een nieuw item toevoegen"
+
+#: dialogs/ksecuritylisteditor.cpp:76
+msgid "Create a new security entry."
+msgstr "Creëer een nieuw aandeel."
+
+#: dialogs/keditequityentrydlg.cpp:77 dialogs/kmymoneypricedlg.cpp:74
+#: dialogs/ksecuritylisteditor.cpp:81
+msgid "Modify the selected entry"
+msgstr "Het geselecteerde item wijzigen"
+
+#: dialogs/ksecuritylisteditor.cpp:82
+msgid "Change the security information of the selected entry."
+msgstr "Wijzig de informatie van het geselecteerde item."
+
+#: dialogs/kmymoneypricedlg.cpp:80 dialogs/ksecuritylisteditor.cpp:87
+msgid "Close the dialog"
+msgstr "Dialoog sluiten"
+
+#: dialogs/kmymoneypricedlg.cpp:81 dialogs/ksecuritylisteditor.cpp:88
+msgid "Use this to close the dialog and return to the application."
+msgstr ""
+"Gebruik dit om de dialoog te sluiten en terug te keren naar de toepassing."
+
+#: dialogs/ksecuritylisteditor.cpp:184
+msgid ""
+"Do you really want to remove the currency <b>%1</b> from the file?</"
+"p><i>Note: It is currently not supported to add currencies.</i>"
+msgstr ""
+"Wilt u munteenheid <b>%1</b> werkelijk verwijderen uit het bestand?</"
+"p><i>Opm: Het toevoegen van munteenheden wordt momenteel niet ondersteund.</"
+"i>"
+
+#: dialogs/ksecuritylisteditor.cpp:187
+msgid "Do you really want to remove the %1 <b>%2</b> from the file?"
+msgstr "Wilt u de %1 <b>%2</b> werkelijk verwijderen uit het bestand?"
+
+#: dialogs/ksecuritylisteditor.cpp:190
+msgid "Delete security"
+msgstr "Verwijder aandeel"
+
+#: dialogs/kmymoneypricedlg.cpp:63
+msgid "Remove this price item from the file"
+msgstr "Deze koers verwijderen uit het bestand"
+
+#: dialogs/kmymoneypricedlg.cpp:66 dialogs/mymoneyqifprofileeditor.cpp:94
+msgid "&New"
+msgstr "&Nieuw"
+
+#: dialogs/kmymoneypricedlg.cpp:69
+msgid "Create a new price entry."
+msgstr "Een nieuw koers creëren."
+
+#: dialogs/kmymoneypricedlg.cpp:75
+msgid "Change the details of selected price information."
+msgstr "De details van geselecteerde koers wijzigen."
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Do you really want to delete the selected price entry?"
+msgstr "Weet u zeker dat u de geselecteerde koers wilt verwijderen?"
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Delete price information"
+msgstr "Koers verwijderen"
+
+#: dialogs/kchooseimportexportdlg.cpp:46
+msgid ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Kies het type import dat u wilt uitvoeren. Een eenvoudige uitleg\n"
+"van het import type is beschikbaar aan de onderzijde van het scherm en wordt "
+"bijgewerkt zodra\n"
+"u een item selecteert uit de keuzelijst.\n"
+"\n"
+"Als u eenmaal een import type hebt gekozen, druk dan op de OK knop."
+
+#: dialogs/kchooseimportexportdlg.cpp:50 dialogs/rc.cpp:22
+msgid "Choose import type:"
+msgstr "Kies import type:"
+
+#: dialogs/kchooseimportexportdlg.cpp:51 dialogs/rc.cpp:20
+msgid "Choose Import Type Dialog"
+msgstr "Kies Import Type Dialoog"
+
+#: dialogs/kchooseimportexportdlg.cpp:53
+msgid ""
+"Please choose the type of export you wish to perform. A simple explanation\n"
+"of the export type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an export type please press the OK button."
+msgstr ""
+"Kies het type export dat u wilt uitvoeren. Een eenvoudige uitleg\n"
+"van het export type is beschikbaar aan de onderzijde van het scherm en wordt "
+"bijgewerkt zodra\n"
+"u een item selecteert uit het selectiemenu.\n"
+"\n"
+"Als u eenmaal een import type hebt gekozen, druk dan op de OK knop."
+
+#: dialogs/kchooseimportexportdlg.cpp:57
+msgid "Choose export type:"
+msgstr "Kies Export type:"
+
+#: dialogs/kchooseimportexportdlg.cpp:58
+msgid "Choose Export Type Dialog"
+msgstr "Kies Export Type Dialoog"
+
+#: dialogs/kchooseimportexportdlg.cpp:78
+msgid ""
+"QIF files are created by the popular accounting program Quicken.\n"
+"Another dialog will appear, if you choose this type, asking for further\n"
+"information relevant to the Quicken format."
+msgstr ""
+"QIF bestanden worden gemaakt door het populaire boekhoudprogramma Quicken.\n"
+"Er zal een andere dialoog verschijnen als u dit type kiest. Deze dialoog "
+"vraagt om verdere\n"
+"informatie die relevant is voor het Quicken formaat."
+
+#: dialogs/kchooseimportexportdlg.cpp:82
+msgid ""
+"The CSV type uses a comma delimeted text file that can be used by\n"
+"most popular spreadsheet programs available for Linux and other operating\n"
+"systems."
+msgstr ""
+"Het CSV type gebruikt een kommagescheiden tekstbestand dat gebruikt kan "
+"worden door\n"
+"de meeste populaire spreadsheet programma's die beschikbaar zijn voor Linux "
+"en andere\n"
+"besturingssystemen."
+
+#: dialogs/kequitypriceupdatedlg.cpp:222
+msgid "%1 units in %2"
+msgstr "%1 eenheden in %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid ""
+"Failed to retrieve an exchange rate for %1 from %2. It will be skipped this "
+"time."
+msgstr ""
+"Kan de conversie koers van %1 van %2 niet achterhalen. Deze stap wordt "
+"overgeslagen."
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid "Price Update Failed"
+msgstr "Koers bijwerken is mislukt"
+
+#: dialogs/kequitypriceupdatedlg.cpp:427
+msgid ""
+"Failed to retrieve a quote for %1 from %2. Press <b>No</b> to remove the "
+"online price source from this security permanently, <b>Yes</b> to continue "
+"updating this security during future price updates or <b>Cancel</b> to stop "
+"the current update operation."
+msgstr ""
+"Kan geen waarden vinden voor %1 van %2. Druk op <b>Nee</b> om deze online "
+"bron permament te verwijderen, <b>Ja</b> om deze bron te behouden en "
+"<b>Annuleer</b> om de huidige sessie te beeindigen."
+
+#: dialogs/kequitypriceupdatedlg.cpp:427 dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Price Update Failed"
+msgstr "Koers bijwerken mislukt"
+
+#: dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Cannot update security <b>%1</b>: %2"
+msgstr "Kan aandeel niet bijwerken <b>%1</b>: %2 "
+
+#: dialogs/kequitypriceupdatedlg.cpp:528
+msgid "Price for %1 updated (id %2)"
+msgstr "Koers voor %1 bijgewerkt (id %2)"
+
+#: dialogs/kequitypriceupdatedlg.cpp:534
+msgid "Received an invalid price for %1, unable to update."
+msgstr "Ongeldige koers voor %1 ontvangen, kan niet bijwerken."
+
+#: dialogs/kequitypriceupdatedlg.cpp:554
+msgid ""
+"Received a price for %1 (id %2), but this symbol is not on the list! "
+"Aborting entire update."
+msgstr ""
+"Koers voor %1 ontvangen (id %2), maar dit symbool staat niet op de lijst! "
+"De update wordt afgebroken."
+
+#: dialogs/transactioneditor.cpp:222
+msgid ""
+"The number <b>%1</b> has already been used in account <b>%2</b>. Do you want "
+"to replace it with the next available number?"
+msgstr ""
+"Het nummer <b>%1</b> wordt al gebruikt in rekening <b>%2</b>. Wilt u het "
+"vervangen door het eerstvolgende beschikbare nummer?"
+
+#: dialogs/transactioneditor.cpp:222
+msgid "Duplicate number"
+msgstr "Dubbel nummer"
+
+#: dialogs/transactioneditor.cpp:303
+msgid ""
+"This transaction has more than two splits and is based on a different "
+"currency (%1). Using this account to modify the transaction is currently not "
+"very well supported by KMyMoney and may result in false results."
+msgstr ""
+"Deze transactie bestaat uit meer dan 2 splitsingen gebaseerd op "
+"verschillende munteenheden (%1). KMyMoney ondersteunt dit soort transacties "
+"nog niet volledig. Doorgaan kan leiden tot foutieve resultaten."
+
+#: dialogs/transactioneditor.cpp:305
+msgid ""
+"KMyMoney was not able to find a more appropriate account to edit this "
+"transaction. Nevertheless, you are allowed to modify the transaction. If you "
+"don't want to edit this transaction, please cancel from editing next."
+msgstr ""
+"KMyMoney kon geen geschiktere rekening vinden om deze transactie te "
+"bewerken. Desondanks is het u toegestaan de transactie te wijzigen. Als u "
+"deze transactie niet wilt bewerken, annuleer dan het bewerken."
+
+#: dialogs/transactioneditor.cpp:307
+msgid ""
+"Using e.g. <b>%1</b> to edit this transaction is a better choice. "
+"Nevertheless, you are allowed to modify the transaction. If you want to use "
+"the suggested account instead, please cancel from editing next and change "
+"the view to the suggested account."
+msgstr ""
+"Het gebruik van <b>%1</b> om deze transactie te bewerken, is een betere "
+"keuze. Desondanks is het u toegestaan de transactie te wijzigen. Als u de "
+"voorgestelde rekening wilt gebruiken, annuleer dan het bewerken en verander "
+"de weergave naar de voorgestelde rekening."
+
+#: dialogs/transactioneditor.cpp:410
+msgid ""
+"This transaction has more than two splits and is originally based on a "
+"different currency (%1). Using this account to modify the transaction may "
+"result in rounding errors. Do you want to continue?"
+msgstr ""
+"Deze transactie bestaat uit meer dan 2 splitsingen gebaseerd op "
+"verschillende munteenheden (%1). KMyMoney ondersteunt dit soort transacties "
+"niet volledig. Doorgaan kan leiden tot afrondingsfouten. Wilt u doorgaan?"
+
+#: dialogs/transactioneditor.cpp:412
+msgid ""
+"At least one of the selected transactions has more than two splits and is "
+"originally based on a different currency (%1). Using this account to modify "
+"the transactions may result in rounding errors. Do you want to continue?"
+msgstr ""
+"Tenminste één transactie bestaat uit meer dan 2 splitsingen gebaseerd op "
+"verschillende munteenheden (%1). Doorgaan kan leiden tot afrondingsfouten. "
+"Wilt u doorgaan?"
+
+#: dialogs/transactioneditor.cpp:557
+msgid "Storing transactions"
+msgstr "Opslaan van transacties"
+
+#: dialogs/transactioneditor.cpp:603 widgets/kmymoneybriefschedule.cpp:65
+msgid "&Enter"
+msgstr "&Invoeren"
+
+#: dialogs/transactioneditor.cpp:606
+msgid "Use this to enter the transaction into the ledger."
+msgstr "Gebruik dit om de transactie in het kasboek in te voeren."
+
+#: dialogs/transactioneditor.cpp:607
+msgid "&Schedule"
+msgstr "&Betalingsagenda"
+
+#: dialogs/transactioneditor.cpp:609
+msgid "Accepts the entered data and stores it as schedule"
+msgstr ""
+"Accepteert de ingevoerde gegevens en slaat deze op als periodieke betaling"
+
+#: dialogs/transactioneditor.cpp:610
+msgid "Use this to schedule the transaction for later entry into the ledger."
+msgstr ""
+"Gebruik dit om de transactie te plannen en later op te nemen in het kasboek."
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"The transaction you are about to enter has a post date in the future.<br/"
+"><br/>Do you want to enter it in the ledger or add it to the schedules?"
+msgstr ""
+"De transactie die u probeert in te voeren is gedateerd in de toekomst .<br/"
+"><br/>Wilt u deze transactie opnemen in het kasboek of in de lijst van "
+"periodieke transacties?"
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"_: Dialog caption for 'Enter or schedule' dialog\n"
+"Enter or schedule?"
+msgstr "Kasboek of Periodieke Transactie?"
+
+#: dialogs/transactioneditor.cpp:671
+msgid ""
+"The balance of account <b>%1</b> dropped below the warning balance of %2."
+msgstr "Het saldo van rekening <b>%1</b> is gedaald onder %2."
+
+#: dialogs/transactioneditor.cpp:677
+msgid ""
+"The balance of account <b>%1</b> dropped below the minimum balance of %2."
+msgstr ""
+"Het saldo van rekening <b>%1</b> is gezakt onder het minimum bedrag van %2."
+
+#: dialogs/transactioneditor.cpp:683
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit warning "
+"limit of %2."
+msgstr ""
+"Het saldo van rekening <b>%1</b> is gezakt onder de krediet limiet van %2."
+
+#: dialogs/transactioneditor.cpp:689
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit limit of %"
+"2."
+msgstr ""
+"Het saldo van rekening <b>%1</b> is gezakt onder de maximale krediet limiet "
+"van %2."
+
+#: dialogs/transactioneditor.cpp:740
+msgid "Payer/Receiver"
+msgstr "Betalende/Ontvangende partij"
+
+#: dialogs/transactioneditor.cpp:748
+msgid "Category/Account"
+msgstr "Rubriek/Rekening"
+
+#: dialogs/transactioneditor.cpp:980 dialogs/transactioneditor.cpp:1016
+#: dialogs/transactioneditor.cpp:1378 dialogs/transactioneditor.cpp:1399
+#: dialogs/transactioneditor.cpp:1422 dialogs/transactioneditor.cpp:1443
+#: dialogs/transactioneditor.cpp:1505 dialogs/transactioneditor.cpp:1509
+#: widgets/transaction.cpp:902
+msgid "Transfer from"
+msgstr "Overboeken van"
+
+#: dialogs/transactioneditor.cpp:982 dialogs/transactioneditor.cpp:1018
+#: dialogs/transactioneditor.cpp:1401 dialogs/transactioneditor.cpp:1445
+#: dialogs/transactioneditor.cpp:1506 widgets/transaction.cpp:902
+msgid "Transfer to"
+msgstr "Overboeken naar"
+
+#: dialogs/transactioneditor.cpp:1259
+msgid "Select autofill transaction"
+msgstr "Selecteer automatisch aanvullen van transactie"
+
+#: dialogs/transactionmatcher.cpp:77
+msgid "First transaction does not match requirement for matching"
+msgstr "Eerste transactie komt niet overeen"
+
+#: dialogs/transactionmatcher.cpp:79
+msgid "Second transaction does not match requirement for matching"
+msgstr "Tweede transactie komt niet overeen"
+
+#: dialogs/transactionmatcher.cpp:83 dialogs/transactionmatcher.cpp:133
+msgid "Splits for %1 have conflicting values (%2,%3)"
+msgstr "Splitsing van %1 bevat conflicterende waarden (%2,%3)"
+
+#: dialogs/transactionmatcher.cpp:96 dialogs/transactionmatcher.cpp:149
+msgid ""
+"Both of these transactions have been imported into %1. Therefore they "
+"cannot be matched. Matching works with one imported transaction and one non-"
+"imported transaction."
+msgstr ""
+"Beide transacties zijn geïmporteerd in %1. Ze kunnen niet worden vergeleken. "
+"Vergelijken kan alleen tussen een geïmporteerde en een niet geïmporteerde "
+"transactie."
+
+#: dialogs/transactionmatcher.cpp:101 dialogs/transactionmatcher.cpp:156
+msgid "Unable to match all splits (%1)"
+msgstr "Kan niet alle splitsingen vergelijken (%1)"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:65
+msgid "Account and transfer account are the same. Please change one."
+msgstr "Rekening en tegenrekening zijn hetzelfde. Verander één van beide."
+
+#: dialogs/kconfirmmanualenterdlg.cpp:84
+msgid "Payee changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Relatie is gewijzigd.<br>&nbsp;&nbsp;&nbsp;Oud: <b>%1</b>, Nieuw: <b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:92
+#: dialogs/kconfirmmanualenterdlg.cpp:100
+msgid "Account changed. Old: \"%1\", New: \"%2\""
+msgstr "Rekening veranderd. Oud: \"%1\", Nieuw: \"%2\""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:107
+msgid "Account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Rekening is gewijzigd.<br>&nbsp;&nbsp;&nbsp;Oud: <b>%1</b>, Nieuw: <b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:115
+msgid ""
+"Transfer account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</"
+"b><p>"
+msgstr ""
+"Tegenrekening veranderd.<br>&nbsp;&nbsp;&nbsp;Oud: <b>%1</b>, Nieuw: <b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:143
+msgid ""
+"Category changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Rubriek is gewijzigd.<br>&nbsp;&nbsp;&nbsp;Oud: <b>%1</b>, Nieuw: <b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:151
+#: dialogs/kconfirmmanualenterdlg.cpp:153
+msgid "empty"
+msgstr "leeg"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:157
+msgid "Memo changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Memo is gewijzigd.<br>&nbsp;&nbsp;&nbsp;Oud: <b>%1</b>, Nieuw: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:166
+msgid "Amount changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Bedrag is gewijzigd.<br>&nbsp;&nbsp;&nbsp;Oud: <b>%1</b>, Nieuw: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:175
+msgid ""
+"Reconciliation flag changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%"
+"2</b><p>"
+msgstr ""
+"Status veld is gewijzigd.<br>&nbsp;&nbsp;&nbsp;Oud: <b>%1</b>, Nieuw: <b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:182
+msgid "Fatal error in determining data: "
+msgstr "Fatale fout tijdens het bepalen van gegevens: "
+
+#: dialogs/kselectdatabasedlg.cpp:56
+msgid ""
+"There are no Qt SQL drivers installed in your system.\n"
+"Please consult documentation for your distro, or visit the Qt web site (www."
+"trolltech.com) and search for SQL drivers."
+msgstr ""
+"Er zijn geen Qt SQL drivers geinstalleerd op uw systeem.\n"
+"Raadpleeg de documentatie van uw distributie (bv. Ubuntu, OpenSuse), of "
+"bezoek de website (www.trolltech.com) en zoek naar de juiste SQL drivers."
+
+#: dialogs/kselectdatabasedlg.cpp:100
+msgid "Qt SQL driver %1 is no longer installed on your system"
+msgstr "Qt SQL driver %1 is niet meer op uw systeem geïnstalleerd"
+
+#: dialogs/kselectdatabasedlg.cpp:107
+msgid "Qt SQL driver %1 is not suported"
+msgstr "Qt SQL driver %1 wordt niet ondersteund"
+
+#: dialogs/kselectdatabasedlg.cpp:164
+msgid "SQLite files (*.sql);; All files (*.*)"
+msgstr "SQLite bestanden (*.sql);; Alle bestanden (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:167
+msgid "Select SQLite file"
+msgstr "Selecteer SQLite bestand"
+
+#: dialogs/kselectdatabasedlg.cpp:188
+msgid "All files (*.*)"
+msgstr "Alle bestanden (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:191
+msgid "Select output file"
+msgstr "Selecteer uitvoer bestand"
+
+#: dialogs/investactivities.cpp:168
+msgid "%1 (Brokerage)"
+msgstr "%1 (Afsluitprovisie)"
+
+#: dialogs/investactivities.cpp:200 dialogs/investactivities.cpp:288
+#: dialogs/investactivities.cpp:425 widgets/transaction.cpp:1548
+msgid "Price/share"
+msgstr "Koers/aandeel"
+
+#: dialogs/investactivities.cpp:586
+msgid "Ratio 1/"
+msgstr "Ratio /1"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid ""
+"<p>Please check that all the details in the following dialog are correct and "
+"press OK.</p><p>Editable data can be changed and can either be applied to "
+"just this occurence or for all subsequent occurences for this schedule. "
+"(You will be asked what you intend after pressing OK in the following dialog)"
+"</p>"
+msgstr ""
+"<p>Controleer of alle onderstaande details correct zijn en klik OK.</"
+"p><p>Bewerkbare gegevens kunnen veranderd worden en kunnen of toegepast "
+"worden op alleen dit voorval of op alle volgende voorvallen voor deze "
+"periodieke transactie. (U wordt gevraagd wat uw bedoeling is nadat u op OK "
+"heeft geklikt).</p>"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid "Enter scheduled transaction"
+msgstr "Periodieke Transactie Invoeren"
+
+#: dialogs/kcsvprogressdlg.cpp:65 dialogs/kexportdlg.cpp:65
+msgid "&Export"
+msgstr "&Exporteren"
+
+#: dialogs/kexportdlg.cpp:67 dialogs/kimportdlg.cpp:68
+msgid "Start operation"
+msgstr "Start bewerking"
+
+#: dialogs/kexportdlg.cpp:68
+msgid "Use this to start the export operation"
+msgstr "Gebruik dit om het exporteren te starten"
+
+#: dialogs/kexportdlg.cpp:71 dialogs/kimportdlg.cpp:72
+msgid "&Browse..."
+msgstr "&Bladeren..."
+
+#: dialogs/kexportdlg.cpp:73 dialogs/kimportdlg.cpp:74
+msgid "Select filename"
+msgstr "Kies bestandsnaam"
+
+#: dialogs/kexportdlg.cpp:74 dialogs/kimportdlg.cpp:75
+msgid "Use this to select a filename to export to"
+msgstr "Gebruik dit om een bestandsnaam te kiezen om naar te exporteren"
+
+#: dialogs/kexportdlg.cpp:77 dialogs/kimportdlg.cpp:78
+#: dialogs/settings/ksettingsonlinequotes.cpp:64
+#: widgets/kmymoneyonlinequoteconfig.cpp:64
+msgid "&New..."
+msgstr "&Nieuw..."
+
+#: dialogs/kexportdlg.cpp:79 dialogs/kimportdlg.cpp:80
+#: dialogs/mymoneyqifprofileeditor.cpp:96
+msgid "Create a new profile"
+msgstr "Creëer een nieuw profiel"
+
+#: dialogs/kexportdlg.cpp:80 dialogs/kimportdlg.cpp:81
+msgid "Use this to open the profile editor"
+msgstr "Gebruik dit om de profiel editor te starten"
+
+#: dialogs/keditloanwizard.cpp:56
+msgid "Edit loan wizard"
+msgstr "Wizard voor wijzigen van de lening"
+
+#: dialogs/keditloanwizard.cpp:58
+msgid ""
+"Please enter the date from which on the following changes will be effective. "
+"The date entered must be later than the opening date of this account (%1), "
+"but must not be in the future. The default will be today."
+msgstr ""
+"Voer de datum in vanaf wanneer de volgende wijzigingen effectief zullen "
+"worden. De ingevoerde datum moet later zijn dan de openingsdatum van deze "
+"rekening (%1), maar mag niet in de toekomst liggen. Standaard staat de datum "
+"op vandaag."
+
+#: dialogs/keditloanwizard.cpp:76
+msgid ""
+"Note: you will not be able to modify this account today, because the opening "
+"date \"%1\" is in the future. Please revisit this dialog when the time has "
+"come."
+msgstr ""
+"N.B.: het is niet mogelijk om deze rekening nu te wijzigen, omdat de "
+"openingsdatum \"%1\" in de toekomst ligt. Open deze dialoog opnieuw als deze "
+"datum is aangebroken."
+
+#: dialogs/keditloanwizard.cpp:244
+msgid ""
+"Your previous selection was \"%1\". If you select another option, KMyMoney "
+"will dismiss the changes you have just entered. Do you wish to proceed?"
+msgstr ""
+"Uw vorige selectie was \"%1\". Als u een andere optie selecteert, worden "
+"alle wijzigingen die u heeft aangebracht geannuleerd. Wilt u doorgaan?"
+
+#: dialogs/kcategoryreassigndlg.cpp:81
+msgid ""
+"At least one transaction/schedule still references the category <b>%1</b>. "
+"However, at least one category with the same currency must exist so that the "
+"transactions/schedules can be reassigned."
+msgstr ""
+"Tenminste één (periodieke) transactie verwijst nog naar deze rubriek <b>%1</"
+"b>. Let wel, er moet minstens 1 rubriek beschikbaar zijn met dezelfde "
+"munteenheid zodat deze (periodieke) transactie aan een andere rubriek kan "
+"worden toegewezen."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid ""
+"This dialog does not allow to create new categories. Please pick a category "
+"from the list."
+msgstr ""
+"Deze dialoog staat het creëren van een nieuwe rubriek niet toe. Kies een "
+"rubriek uit de lijst."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid "Category creation"
+msgstr "Rubriek aanmaken"
+
+#: dialogs/kbackupdlg.cpp:61
+msgid "C&hoose..."
+msgstr "&Kiezen..."
+
+#: dialogs/kbackupdlg.cpp:63
+msgid "Select mount point"
+msgstr "Selecteer koppelpunt"
+
+#: dialogs/kbackupdlg.cpp:64
+msgid "Use this to browse to the mount point."
+msgstr "Gebruik dit om te bladeren naar het koppelpunt."
+
+#: dialogs/keditscheduledlg.cpp:293
+msgid "Next due date"
+msgstr "Volgende betaaldatum"
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid ""
+"You have turned on the GPG encryption support. This means, that new files "
+"will be stored encrypted. Existing files will not be encrypted "
+"automatically. To achieve encryption of existing files, please use the "
+"<b>File/Save as...</b> feature and store the file under a different name. "
+"Once confident with the result, feel free to delete the old file and rename "
+"the encrypted one to the old name."
+msgstr ""
+"U hebt GPG versleuteling geactiveerd. Dit betekent dat nieuwe bestanden "
+"versleuteld worden opgeslagen. Bestaande bestanden worden niet automatisch "
+"versleuteld. Als u ook bestaande bestanden wilt versleutelen, gebruik dan "
+"<b>Bestand/Opslaan als..</b> uit het menu en sla het bestand op onder een "
+"andere naam. Verwijder pas de oude bestanden als u tevreden bent met de "
+"versleuteling en dit verder wilt gebruiken."
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid "GPG encryption activated"
+msgstr "GPG versleuteling geactiveerd"
+
+#: dialogs/settings/ksettingshome.cpp:51
+msgid "&Up"
+msgstr "&Omhoog"
+
+#: dialogs/settings/ksettingshome.cpp:53
+msgid "Move selected item up"
+msgstr "Geselecteerde item omhoog schuiven"
+
+#: dialogs/settings/ksettingshome.cpp:54
+msgid "Use this to move the selected item up by one position in the list."
+msgstr ""
+"Gebruik dit om het geselecteerde item een positie omhoog te schuiven in de "
+"lijst."
+
+#: dialogs/settings/ksettingshome.cpp:55
+msgid "&Down"
+msgstr "&Omlaag"
+
+#: dialogs/settings/ksettingshome.cpp:57
+msgid "Move selected item down"
+msgstr "Geselecteerde item omlaag schuiven"
+
+#: dialogs/settings/ksettingshome.cpp:58
+msgid "Use this to move the selected item down by one position in the list."
+msgstr ""
+"Gebruik dit om het geselecteerde item een positie omlaag te schuiven in de "
+"lijst."
+
+#: dialogs/settings/rc.cpp:1
+msgid "Color settings"
+msgstr "Kleur opties"
+
+#: dialogs/settings/rc.cpp:2
+msgid "Foreground"
+msgstr "Voorgrond"
+
+#: dialogs/settings/rc.cpp:3
+msgid "Text colors"
+msgstr "Tekst kleuren"
+
+#: dialogs/settings/rc.cpp:4
+msgid "Grid color"
+msgstr "Rasterlijn kleur"
+
+#: dialogs/settings/rc.cpp:5
+msgid "Erronous transaction"
+msgstr "Foutieve transactie"
+
+#: dialogs/settings/rc.cpp:6
+msgid "Value with missing conversion rate"
+msgstr "Waarde met ontbrekende wisselkoers"
+
+#: dialogs/settings/rc.cpp:7
+msgid "Negative value"
+msgstr "Negatieve waarde"
+
+#: dialogs/settings/rc.cpp:8
+msgid "Background"
+msgstr "Achtergrond"
+
+#: dialogs/settings/rc.cpp:10
+msgid "List background colors"
+msgstr "Toon achtergrond kleuren"
+
+#: dialogs/settings/rc.cpp:11
+msgid "Normal"
+msgstr "Normaal"
+
+#: dialogs/settings/rc.cpp:12
+msgid "Alternate"
+msgstr "Variabel"
+
+#: dialogs/settings/rc.cpp:13
+msgid "Special background colors"
+msgstr "Speciale achtergrond kleuren"
+
+#: dialogs/settings/rc.cpp:14
+msgid "Ledger group separator"
+msgstr "Kasboek scheiding"
+
+#: dialogs/settings/rc.cpp:15
+msgid "Required field"
+msgstr "Verplicht veld"
+
+#: dialogs/settings/rc.cpp:16
+msgid "Imported transaction"
+msgstr "Geïmporteerde transactie"
+
+#: dialogs/settings/rc.cpp:17
+msgid "Matched transaction"
+msgstr "Identieke transactie"
+
+#: dialogs/settings/rc.cpp:18
+msgid "Font settings"
+msgstr "Lettertype opties"
+
+#: dialogs/settings/rc.cpp:19
+msgid "Use system fonts"
+msgstr "Gebruik systeemlettertypen"
+
+#: dialogs/settings/rc.cpp:20
+msgid "Individual font settings"
+msgstr "Individuele lettertype opties"
+
+#: dialogs/settings/rc.cpp:24
+msgid "Number of Days of Account Cycle:"
+msgstr "Aantal dagen voor rekening cyclus:"
+
+#: dialogs/settings/rc.cpp:26
+msgid "Number of Days to Forecast:"
+msgstr "Aantal dagen te budgetteren:"
+
+#: dialogs/settings/rc.cpp:27
+msgid "Forecast Method"
+msgstr "Budget methode"
+
+#: dialogs/settings/rc.cpp:28
+msgid "Scheduled and Future Transactions"
+msgstr "Geplande en toekomstige transacties"
+
+#: dialogs/settings/rc.cpp:29
+msgid "History-based"
+msgstr "Historie gebaseerd"
+
+#: dialogs/settings/rc.cpp:30
+msgid "History-based settings"
+msgstr "Opties gebaseerd op historie"
+
+#: dialogs/settings/rc.cpp:31
+msgid "Number of Cycles to use in Forecast:"
+msgstr "Aantal cycli te gebruiken in de prognose:"
+
+#: dialogs/settings/rc.cpp:36
+msgid "General Settings"
+msgstr "Algemene Opties"
+
+#: dialogs/settings/rc.cpp:37
+msgid "Global"
+msgstr "Globaal"
+
+#: dialogs/settings/rc.cpp:38
+msgid "Startup page options"
+msgstr "Startpagina opties"
+
+#: dialogs/settings/rc.cpp:39
+msgid "Start with homepage"
+msgstr "Begin met startpagina"
+
+#: dialogs/settings/rc.cpp:40
+msgid "Start with last selected view"
+msgstr "Start met laatst gekozen overzicht"
+
+#: dialogs/settings/rc.cpp:41
+msgid "Precision settings"
+msgstr "Nauwkeurigheids opties"
+
+#: dialogs/settings/rc.cpp:42
+msgid "Price precision"
+msgstr "Koers nauwkeurigheid"
+
+#: dialogs/settings/rc.cpp:43
+msgid "digits"
+msgstr "cijfers"
+
+#: dialogs/settings/rc.cpp:44
+msgid "Autosave options"
+msgstr "Opties voor automatisch opslaan"
+
+#: dialogs/settings/rc.cpp:45
+msgid "Autosave periodically"
+msgstr "Sla periodiek op"
+
+#: dialogs/settings/rc.cpp:46
+msgid "minutes"
+msgstr "minuten"
+
+#: dialogs/settings/rc.cpp:47
+msgid "Fiscal Year"
+msgstr "Fiscaal jaar"
+
+#: dialogs/settings/rc.cpp:48
+msgid "Your fiscal year starts on"
+msgstr "Uw fiscale jaar start op"
+
+#: dialogs/settings/rc.cpp:49
+msgid "January"
+msgstr "Januari"
+
+#: dialogs/settings/rc.cpp:50
+msgid "February"
+msgstr "Februari"
+
+#: dialogs/settings/rc.cpp:51
+msgid "March"
+msgstr "Maart"
+
+#: dialogs/settings/rc.cpp:52
+msgid "April"
+msgstr "April"
+
+#: dialogs/settings/rc.cpp:53
+msgid "May"
+msgstr "Mei"
+
+#: dialogs/settings/rc.cpp:54
+msgid "June"
+msgstr "Juni"
+
+#: dialogs/settings/rc.cpp:55
+msgid "July"
+msgstr "Juli"
+
+#: dialogs/settings/rc.cpp:56
+msgid "August"
+msgstr "Augustus"
+
+#: dialogs/settings/rc.cpp:57
+msgid "September"
+msgstr "September"
+
+#: dialogs/settings/rc.cpp:58
+msgid "October"
+msgstr "Oktober"
+
+#: dialogs/settings/rc.cpp:59
+msgid "November"
+msgstr "November"
+
+#: dialogs/settings/rc.cpp:60
+msgid "December"
+msgstr "December"
+
+#: dialogs/settings/rc.cpp:61
+msgid "Views"
+msgstr "Overzicht"
+
+#: dialogs/settings/rc.cpp:62
+msgid "Synchronize account selection of ledger and investment view"
+msgstr ""
+"Synchroniseer rekening selectie van het kasboek met het beleggingen overzicht"
+
+#: dialogs/settings/rc.cpp:63
+msgid ""
+"Check the views you want to enable, uncheck those you want to hide, because "
+"you don't need the functionality."
+msgstr ""
+"Markeer de overzichten die u wilt gebruiken, demarkeer de overzichten die u "
+"wilt verbergen omdat u die niet nodig heeft."
+
+#: dialogs/settings/rc.cpp:64
+msgid "Icon size of navigation bar"
+msgstr "Pictogram grootte voor de navigatie balk"
+
+#: dialogs/settings/rc.cpp:65
+msgid "Micro (16px)"
+msgstr "Micro (16px)"
+
+#: dialogs/settings/rc.cpp:66
+msgid "Small (32px)"
+msgstr "Klein (32px)"
+
+#: dialogs/settings/rc.cpp:67
+msgid "Normal (48px)"
+msgstr "Normaal (48px)"
+
+#: dialogs/settings/rc.cpp:68
+msgid "Large (64px)"
+msgstr "Groot (64px)"
+
+#: dialogs/settings/rc.cpp:69
+msgid "Show title bar on each page"
+msgstr "Toon kop boven iedere pagina"
+
+#: dialogs/rc.cpp:835 dialogs/settings/rc.cpp:70
+msgid "Filter"
+msgstr "Filter"
+
+#: dialogs/settings/rc.cpp:71
+msgid "Accounts / Categories"
+msgstr "Rekeningen / Rubrieken"
+
+#: dialogs/settings/rc.cpp:72
+msgid "Don't show unused categories"
+msgstr "Ongebruikte rubrieken niet tonen"
+
+#: dialogs/settings/rc.cpp:73
+msgid ""
+"This option hides all categories in the categories view that are not used in "
+"at least a single transaction. They are still shown in the category "
+"selection lists."
+msgstr ""
+"Deze optie verbergt in het overzicht alle rubrieken die niet gebruikt "
+"worden. U kunt ze wel zien in de rubriek selectie lijst."
+
+#: dialogs/settings/rc.cpp:74
+msgid "Don't show closed accounts"
+msgstr "Gesloten rekeningen niet tonen"
+
+#: dialogs/settings/rc.cpp:75
+msgid ""
+"This option hides all accounts that have been closed by the user in views "
+"and selection lists.\n"
+"\n"
+"You can use <b>View/Show all accounts</b> to temporarily show hidden "
+"accounts in the views."
+msgstr ""
+"Deze optie verbergt alle rekeningen die zijn gesloten door de gebruiker, "
+"zodat ze niet worden getoond in overzichten/lijsten.\n"
+"\n"
+"U kunt de optie <b>Bekijk/toon alle rekeningen</b> gebruiken om deze "
+"verborgen rekeningen tijdelijk zichtbaar te maken."
+
+#: dialogs/settings/rc.cpp:76
+msgid "Show equity accounts"
+msgstr "Toon aandelenrekeningen"
+
+#: dialogs/rc.cpp:332 dialogs/settings/rc.cpp:77 widgets/rc.cpp:160
+msgid "Schedules"
+msgstr "Betalingsagenda"
+
+#: dialogs/settings/rc.cpp:78
+msgid "Don't show finished schedules"
+msgstr "Afgesloten periodieke transacties niet tonen"
+
+#: dialogs/settings/rc.cpp:79
+msgid "This option hides all finished schedules in the schedules view."
+msgstr "Deze optie verbergt alle periodieke transacties die zijn betaald."
+
+#: dialogs/settings/rc.cpp:81
+msgid "Don't show transactions prior to"
+msgstr "Toon geen transacties voor"
+
+#: dialogs/settings/rc.cpp:82
+msgid "Don't show reconciled transactions"
+msgstr "Gecontroleerde transacties niet tonen"
+
+#: dialogs/settings/rc.cpp:83
+msgid "This option hides all reconciled transactions in the ledger view."
+msgstr "Deze optie verbergt alle gecontroleerde transacties in het kasboek."
+
+#: dialogs/settings/rc.cpp:84 widgets/rc.cpp:22
+msgid "GPG encryption settings"
+msgstr "Opties voor GPG versleuteling"
+
+#: dialogs/settings/rc.cpp:85
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Access to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>additional recovery encryption</i> is only accessible, if the "
+"necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id "
+"0x8AFDDC8E is found in your keyring."
+msgstr ""
+"Op deze pagina kunt u de parameters instellen voor het versleutelen van uw "
+"<b>KMyMoney</b> database gebaseerd op <b>GPG</b>.<p>\n"
+"Toegang tot deze opties is uitgesloten als <b>GPG</b> niet aanwezig is op uw "
+"systeem. In dat geval is het belangrijk vast te stellen of <b>GPG</b> goed "
+"functioneert voor de huidige gebruiker.<p>\n"
+"De <i>Herstel versleuteling</i> groep is uitsluitend toegankelijk, als de "
+"juiste sleutel voor <b>kmymoney-recover@users.sourceforge.net</b> met id "
+"0x8AFDDC8E is gevonden."
+
+#: dialogs/settings/rc.cpp:86 widgets/rc.cpp:24
+msgid "Use GPG encryption"
+msgstr "Gebruik GPG versleuteling"
+
+#: dialogs/settings/rc.cpp:87
+msgid "GPG encryption"
+msgstr "GPG versleuteling"
+
+#: dialogs/settings/rc.cpp:88
+msgid "Your key"
+msgstr "Uw sleutel"
+
+#: dialogs/settings/rc.cpp:89
+msgid ""
+"This combo box lists all the secret keys you have in your keyring. Select "
+"the one you want to use for encryption when saving to a file."
+msgstr ""
+"Dit venster laat alle geheime sleutels zien in uw sleutelring. Selecteer de "
+"sleutel die u wilt gebruiken als u het bestand opslaat."
+
+#: dialogs/settings/rc.cpp:90
+msgid "Additonal keys"
+msgstr "Additionele sleutels"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:50 dialogs/settings/rc.cpp:91
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading 0x."
+msgstr ""
+"Voer de id van de sleutel in die u wilt gebruiken voor de gegevens "
+"versleuteling. Dit kan een e-mail adres zijn of een hexadecimale sleutel id. "
+"In het geval van een key id niet vergeten de voorafgaande 0x mee te geven."
+
+#: dialogs/settings/rc.cpp:92 widgets/rc.cpp:28
+msgid ""
+"This symbol denotes, if the key for the given user id has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"Dit symbool geeft aan of de sleutel voor de opgegeven Gebruikers-ID is "
+"gevonden. Groen geeft aan dat de sleutel is gevonden, zwart geeft aan dat "
+"deze niet is gevonden."
+
+#: dialogs/kgpgkeyselectiondlg.cpp:61 dialogs/settings/rc.cpp:93
+msgid "Keys for all of the above user ids found"
+msgstr "Sleutels voor alle hierboven genoemde gebruiker ID's"
+
+#: dialogs/settings/rc.cpp:94 widgets/rc.cpp:31
+msgid ""
+"This symbol denotes, if the KMyMoney recovery key has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"Dit symbool geeft aan, of de KMyMoney herstelsleutel is gevonden. Groen "
+"geeft aan dat de sleutel is gevonden, zwart geeft aan dat deze niet is "
+"gevonden."
+
+#: dialogs/settings/rc.cpp:95
+msgid "Recover Key available in keyring"
+msgstr "Herstelsleutel is beschikbaar in de sleutelring"
+
+#: dialogs/settings/rc.cpp:96
+msgid "Also encrypt with KMyMoney's recover key"
+msgstr "Versleutel ook met de kMyMoney herstelsleutel"
+
+#: dialogs/settings/rc.cpp:97
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out.."
+msgstr ""
+"U kunt specificeren of de gegevens ook met de KMyMoney herstelsleutel moeten "
+"worden versleuteld. Alleen de KMyMoney ontwikkelaars zijn in bezit van de "
+"bijbehorende privé-sleutel om op deze wijze versleutelde gegevens te lezen."
+"<p>\n"
+"\n"
+"Deze methode wordt gebruikt voor het geval u uw sleutel verliest en de "
+"gegevens niet meer kunnen worden gelezen. Als deze optie is geactiveerd "
+"kunnen de KMyMoney ontwikkelaars de gegevens ontsleutelen en in een leesbaar "
+"formaat aan u opleveren. Alvorens deze optie actief is dient u een aantal "
+"gedetailleerde vragen te beantwoorden over uw database welke worden "
+"verzonden naar de KMyMoney ontwikkelaars.."
+
+#: dialogs/settings/rc.cpp:98
+msgid "Homepage Settings"
+msgstr "Startpagina Opties"
+
+#: dialogs/settings/rc.cpp:99
+msgid "Up"
+msgstr "Omhoog"
+
+#: dialogs/settings/rc.cpp:100
+msgid "Down"
+msgstr "Omlaag"
+
+#: dialogs/settings/rc.cpp:101
+msgid ""
+"Selected entries are shown on the home page of the application.<p>\n"
+"Use the buttons and checkboxes to customize the layout of the home page."
+msgstr ""
+"De geselecteerde items worden getoond op de startpagina.<p>\n"
+"Gebruik de knoppen en keuzevakjes om de lay-out van de startpagina aan te "
+"passen."
+
+#: dialogs/settings/rc.cpp:102
+msgid "Homepage/Summary page font scaling"
+msgstr "Tekstgrootte voor Start-/Samenvatting pagina"
+
+#: dialogs/settings/rc.cpp:103
+msgid "Percentage of default font size:"
+msgstr "Percentage van standaard letter grootte:"
+
+#: dialogs/settings/rc.cpp:104
+msgid ""
+"Remember font size when leaving the program if manually changed with mouse-"
+"wheel"
+msgstr ""
+"Onthoudt de grootte van het lettertype als het programma wordt afgesloten"
+
+#: dialogs/settings/rc.cpp:105
+msgid "Information display"
+msgstr "Toon informatie"
+
+#: dialogs/settings/rc.cpp:106
+msgid "Show Account Limit Information"
+msgstr "Toon informatie over de rekening limiet"
+
+#: dialogs/settings/rc.cpp:110 widgets/rc.cpp:47
+msgid ""
+"<i>Enter regular expressions which can be used to parse the data returned "
+"from the URL entered above. The symbol, price, and date must be found in "
+"the quote data to be usable. You may also try the KMyMoney user's "
+"mailinglist at <a href=\"mailto:kmymoney2-user@lists.sourceforge.net"
+"\">kmymoney2-user@lists.sourceforge.net</a> to find what settings work for "
+"other users in your country.</i>"
+msgstr ""
+"<i>Voer standaard expressies in die gebruikt kunnen worden om de gegevens te "
+"verwerken die terugkomen vanaf de aangegeven URL. Het symbool, de koers en "
+"datum welke worden gevonden in de koers gegevens moeten bruikbaar zijn. U "
+"kunt ook via de KMyMoney gebruikers mailinglijst op <a> href=\"mailto:"
+"kmymoney2-user@lists.sourceforge.net \">kmymoney2-user@lists.sourceforge."
+"net</a> proberen te achterhalen welke opties voor andere gebruikers in uw "
+"land werken.</i>"
+
+#: dialogs/settings/rc.cpp:113 widgets/rc.cpp:38
+msgid "Regular Expression to extract the symbol from the downloaded data"
+msgstr ""
+"Normale expressie voor het extraheren van symbolen uit de gedownloade "
+"gegevens"
+
+#: dialogs/settings/rc.cpp:114 widgets/rc.cpp:39
+msgid "Regular Expression to extract the price from the downloaded data"
+msgstr ""
+"Normale expressie voor het extraheren van de koers uit de gedownloade "
+"gegevens"
+
+#: dialogs/settings/rc.cpp:115 widgets/rc.cpp:41
+msgid "URL to be used to download the quote"
+msgstr "URL voor het downloaden van de koersen"
+
+#: dialogs/settings/rc.cpp:116 widgets/rc.cpp:42
+msgid ""
+"Enter the URL from which stock quotes will be fetched. <b>%1</b> will be "
+"replaced with the symbol for the security being quoted. For currency "
+"conversions, <b>%2</b> will be replaced with the currency to be quoted and "
+"<b>%1</b> with the currency the quote is based on."
+msgstr ""
+"Voer de URL in van waaruit de aandelen koersen moeten worden opgehaald. <b>%"
+"1</b> wordt vervangen door het symbool van de aandeel waarvoor de koers "
+"wordt opgevraagd. Voor munteenheid conversies wordt <b>%2</b> vervangen door "
+"de conversie koers die is opgevraagd en wordt <b>%1</b> vervangen door de "
+"munteenheid waarop de koers is gebaseerd."
+
+#: dialogs/settings/rc.cpp:118 dialogs/settings/rc.cpp:121 widgets/rc.cpp:40
+#: widgets/rc.cpp:44
+msgid "Regular Expression to extract the date from the downloaded data"
+msgstr ""
+"Normale expressie voor het extraheren van de datum uit de gedownloade "
+"gegevens"
+
+#: dialogs/rc.cpp:807 dialogs/settings/rc.cpp:119 widgets/rc.cpp:45
+msgid "Date Format"
+msgstr "Datum formaat"
+
+#: dialogs/settings/rc.cpp:122
+msgid "Skip HTML stripping"
+msgstr "Annuleer HTML schoning"
+
+#: dialogs/settings/rc.cpp:123
+msgid ""
+"<p>For easier processing of the data returned by the online source, KMyMoney "
+"usually strips unused parts before it is parsed with the regular "
+"expressions. If matching of the fields relies on those items, then use this "
+"option to turn stripping off.</p>\n"
+"\n"
+"<p>The following items are usually removed by stripping:\n"
+"\n"
+"<ul>\n"
+"<li>HTML tags such as <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded characters such as <b>&amp;nbsp;</b></li>\n"
+"<li>duplicate whitespace</li>\n"
+"</ul>\n"
+"</p>"
+msgstr ""
+"<p>KMyMoney verwijdert niet standaard informatie uit de geimporteerde "
+"gegevens alsvorens deze worden gebruikt . Mocht u toch gebruik willen maken "
+"van deze niet standaard informatie gebruik dan deze optie, zodat u wel alle "
+"informatie importeert.</p>\n"
+"\n"
+"<p>De volgende items worden standaard verwijderd:\n"
+"\n"
+"<ul>\n"
+"<li>HTML tags zoals <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded characters zoals <b>&amp;nbsp;</b></li>\n"
+"<li>dubbele spaties</li>\n"
+"</ul>\n"
+"</p>"
+
+#: dialogs/settings/rc.cpp:127
+msgid "Register settings"
+msgstr "Kasboek opties"
+
+#: dialogs/settings/rc.cpp:128
+msgid "Display"
+msgstr "Toon"
+
+#: dialogs/settings/rc.cpp:131
+msgid ""
+"Using the ledger lens shows the details for the transaction that has focus "
+"in the ledger. Usually, when using the transaction form, only a one line "
+"summary is displayed for each transaction as the details are shown in the "
+"form."
+msgstr ""
+"Maakt gebruik van de Kasboek Lens om details weer te geven over de "
+"transactie die is geselecteerd in het kasboek. Als u het transactie "
+"formulier gebruikt wordt normaal gesproken slechts één regel per transactie "
+"getoond. Details worden getoond in het transactie formulier."
+
+#: dialogs/settings/rc.cpp:133
+msgid "Always show a No. field"
+msgstr "Toon altijd een Nr. veld"
+
+#: dialogs/settings/rc.cpp:134
+msgid "Show group header between transactions"
+msgstr "Toon groeperings regel tussen de transacties"
+
+#: dialogs/settings/rc.cpp:135
+msgid ""
+"Draws a larger header above each group of transaction. The grouping depends "
+"on the current sort order."
+msgstr ""
+"Toont een grote kop boven iedere transactie groep. De groepering wordt "
+"bepaald door de volgorde van sorteren."
+
+#: dialogs/settings/rc.cpp:136
+msgid "Show header for the previous and current fiscal year"
+msgstr "Toon kop voor het vorige en het huidige fiscale jaar"
+
+#: dialogs/settings/rc.cpp:137
+msgid "Sorting"
+msgstr "Sortering"
+
+#: dialogs/settings/rc.cpp:138
+msgid "Normal view"
+msgstr "Normaal overzicht"
+
+#: dialogs/settings/rc.cpp:139
+msgid "Reconciliation view"
+msgstr "Sluitend maken overzicht"
+
+#: dialogs/settings/rc.cpp:140
+msgid "Search view"
+msgstr "Zoek overzicht"
+
+#: dialogs/settings/rc.cpp:141
+msgid ""
+"Use the <i>left</i> and <i>right</i> buttons to add and remove sort options. "
+"Use the <i>up</i> and <i>down</i> buttons to modify the sort order. Double-"
+"Click a selected entry to toggle the sort order between <i>ascending</i> and "
+"<i>descending</i>."
+msgstr ""
+"Gebruik de <i>links</i> en <i>rechts</i> knoppen om sorteer opties toe te "
+"voegen of te verwijderen. Gebruik de <i>omhoog</i> en <i>omlaag</i> knoppen "
+"om de sorteer volgorde te wijzigen. Dubbelklik op de geselecteerde kolom/"
+"regel om de sorteer volgorde te wijzigen in <i>Oplopend</i> of "
+"<i>Neerwaarts</i>."
+
+#: dialogs/settings/rc.cpp:142
+msgid "Data entry"
+msgstr "Gegevens invoer"
+
+#: dialogs/settings/rc.cpp:146
+msgid "Use Enter to move between fields"
+msgstr "Gebruik Enter om naar een ander veld te gaan"
+
+#: dialogs/settings/rc.cpp:147
+msgid "Match names from start"
+msgstr "Vergelijk namen vanaf het begin"
+
+#: dialogs/settings/rc.cpp:148
+msgid ""
+"Mark this option, if you always want to match names e.g. for payees from the "
+"start. If unset, any substring is matched."
+msgstr ""
+"Selecteer deze optie als u standaard namen van bv. relaties wilt zoeken/"
+"vergelijken. Als u deze optie niet gebruikt dan wordt elke willekeurige "
+"tekst gezocht/vergeleken."
+
+#: dialogs/settings/rc.cpp:149
+msgid "Default reconciliation state"
+msgstr "Standaard status bij het sluitend maken van de rekening"
+
+#: dialogs/rc.cpp:227 dialogs/settings/rc.cpp:150
+#: widgets/kmymoneycombo.cpp:348 widgets/registersearchline.cpp:84
+msgid "Not reconciled"
+msgstr "Niet gecontroleerd"
+
+#: dialogs/rc.cpp:228 dialogs/settings/rc.cpp:151
+#: widgets/kmymoneycombo.cpp:347 widgets/registersearchline.cpp:85
+msgid "Cleared"
+msgstr "Betaald"
+
+#: dialogs/settings/rc.cpp:153
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation "
+"of an account"
+msgstr ""
+"Standaard status voor transacties die worden ingevoerd tijdens het sluitend "
+"maken van een rekening."
+
+#: dialogs/settings/rc.cpp:154
+msgid "Autofill"
+msgstr "Automatisch invullen"
+
+#: dialogs/settings/rc.cpp:155
+msgid "No Autofill"
+msgstr "Niet automatisch invullen"
+
+#: dialogs/settings/rc.cpp:156
+msgid "Don't do autofill of transaction data at all."
+msgstr "Transactie gegevens nooit automatisch invullen"
+
+#: dialogs/settings/rc.cpp:157
+msgid "Same transaction if amount differs less than"
+msgstr "Identieke transactie als het verschil kleiner is dan"
+
+#: dialogs/settings/rc.cpp:158
+msgid ""
+"Collect all transactions for the given payee. Treat all transactions that "
+"refer to the same category and have an amount with +/- X % as identical. If "
+"more than one transaction is found, a list of them is presented to the "
+"user.\n"
+"\n"
+"Selecting 0% will list all transactions."
+msgstr ""
+"Verzamel alle transacties voor de geselecteerde relatie. Behandel alle "
+"transacties die verwijzen naar dezelfde rubriek en een bedrag binnen een "
+"marge van +/- X % als identiek. Als er meerdere transactie worden gevonden, "
+"dan wordt een lijst getoond.\n"
+"\n"
+"Als u 0% selecteert worden alle transacties getoond."
+
+#: dialogs/settings/rc.cpp:159
+msgid ""
+"Two transactions are usually treated identical for autofill, if they refer "
+"the same accounts. They are treated as different transactions though, when "
+"their amount varies by more than the percentage given here."
+msgstr ""
+"Twee transacties zijn normaal gesproken identiek als hun bedragen identiek "
+"zijn en ze naar dezelfde rekening verwijzen. Ze worden als verschillende "
+"transacties behandeld indien de bedragen met meer dan het aangegeven "
+"percentage van elkaar afwijken."
+
+#: dialogs/settings/rc.cpp:160
+msgid ""
+"_: Same transaction if amount differs less than percent.\n"
+"percent."
+msgstr "Procent."
+
+#: dialogs/settings/rc.cpp:161
+msgid "with previously most often used transaction for the payee"
+msgstr "inclusief de meest gebruikte transactie voor deze gebruiker"
+
+#: dialogs/settings/rc.cpp:162
+msgid ""
+"The data of the last transaction assigned to the category used most often "
+"for this payee is autofilled into the transaction editor."
+msgstr ""
+"De gegevens van de laatste transacties gekoppeld aan de meeste gebruikte "
+"rubriek voor deze gebruiker wordt automatisch ingevuld in de transactie "
+"editor."
+
+#: dialogs/settings/rc.cpp:164
+msgid "Match transactions within days"
+msgstr "Aantal dagen waarbinnen transacties moeten worden vergelijken"
+
+#: dialogs/settings/rc.cpp:165
+msgid ""
+"Search for matching transactions within the range of the posting date of the "
+"imported transaction +/- the number of given days."
+msgstr ""
+"Zoek naar identieke transacties binnen de periode zoals aangegeven (datum "
+"+/- een aantal opgegeven dagen)"
+
+#: dialogs/settings/rc.cpp:166
+msgid "Ask for a new payee's default category"
+msgstr "Vraag naar een nieuwe standaard rubriek voor deze relatie"
+
+#: dialogs/settings/rc.cpp:167
+msgid ""
+"Whenever a new payee is detected during import of a statement, the user will "
+"be asked to assign a default category for this user when this option is "
+"selected."
+msgstr ""
+"Als deze optie wordt geselecteerd zal, zodra een nieuwe relatie is "
+"gedetecteerd tijdens het importeren van transacties, gevraagd worden een "
+"standaard rubriek aan deze relatie toe te kennen."
+
+#: dialogs/settings/rc.cpp:168
+msgid "Schedule Settings"
+msgstr "Opties voor betalingsagenda"
+
+#: dialogs/settings/rc.cpp:169
+msgid "Startup options"
+msgstr "Opties voor opstarten"
+
+#: dialogs/settings/rc.cpp:170
+msgid "Check schedules on startup"
+msgstr "Betalingsagenda controleren bij opstarten"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:60
+#: widgets/kmymoneyonlinequoteconfig.cpp:60
+msgid "Delete the selected source entry"
+msgstr "Verwijder de geselecteerde bron"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:61
+#: widgets/kmymoneyonlinequoteconfig.cpp:61
+msgid "Use this to delete the selected online source entry"
+msgstr "Gebruik dit om de geselecteerde online bron te verwijderen"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:66
+#: widgets/kmymoneyonlinequoteconfig.cpp:66
+msgid "Create a new source entry for online quotes"
+msgstr "Creëer een nieuwe bron voor online koersen"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:67
+#: widgets/kmymoneyonlinequoteconfig.cpp:67
+msgid "Use this to create a new entry for online quotes"
+msgstr "Gebruik dit om nieuwe bron voor online koersen aan te maken"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:107
+#: dialogs/settings/ksettingsonlinequotes.cpp:190
+#: dialogs/settings/ksettingsonlinequotes.cpp:193
+#: dialogs/settings/ksettingsonlinequotes.cpp:216
+#: widgets/kmymoneyonlinequoteconfig.cpp:107
+#: widgets/kmymoneyonlinequoteconfig.cpp:185
+#: widgets/kmymoneyonlinequoteconfig.cpp:188
+#: widgets/kmymoneyonlinequoteconfig.cpp:211
+msgid "New Quote Source"
+msgstr "Nieuwe bron voor online koersen"
+
+#: dialogs/ksplittransactiondlg.cpp:77 dialogs/rc.cpp:788
+msgid "Clear &All"
+msgstr "&Alles leegmaken"
+
+#: dialogs/ksplittransactiondlg.cpp:79
+msgid "Clear all splits"
+msgstr "Verwijder alle splitsingen"
+
+#: dialogs/ksplittransactiondlg.cpp:80
+msgid "Use this to clear all splits of this transaction"
+msgstr "Gebruik dit om alle splitsingen in deze transactie te verwijderen"
+
+#: dialogs/ksplittransactiondlg.cpp:84
+msgid "&Merge"
+msgstr "&Samenvoegen"
+
+#: dialogs/ksplittransactiondlg.cpp:183
+msgid ""
+"The total amount of this transaction is %1 while the sum of the splits is %"
+"2. The remaining %3 are unassigned."
+msgstr ""
+"Het totaal bedrag van deze transactie is %1, de som van de splitsingen is %"
+"2. De resterende %3 is niet toegewezen."
+
+#: dialogs/ksplittransactiondlg.cpp:191
+#, c-format
+msgid "Change &total amount of transaction to %1."
+msgstr "&Totaal bedrag van transactie wijzigen naar %1."
+
+#: dialogs/ksplittransactiondlg.cpp:194
+msgid "&Distribute difference of %1 among all splits."
+msgstr "&Verdeel het verschil van %1 over alle splitsingen."
+
+#: dialogs/ksplittransactiondlg.cpp:203
+#, c-format
+msgid "&Leave total amount of transaction at %1."
+msgstr "&Totaal bedrag van transactie gelijk laten aan %1."
+
+#: dialogs/ksplittransactiondlg.cpp:205
+msgid "&Leave %1 unassigned."
+msgstr "&Laat %1 niet toegewezen."
+
+#: dialogs/ksplittransactiondlg.cpp:275
+msgid ""
+"You are about to delete all splits of this transaction. Do you really want "
+"to continue?"
+msgstr ""
+"U staat op het punt alle splitsingen voor deze transactie te verwijderen. "
+"Wil u doorgaan?"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:97
+msgid "Use this to create a new QIF import/export profile"
+msgstr "Gebruik dit om een nieuw QIF import/export profiel aan te maken"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:148
+#: dialogs/mymoneyqifprofileeditor.cpp:403 dialogs/rc.cpp:797
+msgid "QIF Profile Editor"
+msgstr "QIF profiel editor"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:150
+msgid "QIF Profile Selector"
+msgstr "QIF profiel selectie"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:236
+msgid "The default QIF profile"
+msgstr "Het standaard QIF profiel"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:404
+#: dialogs/mymoneyqifprofileeditor.cpp:417
+msgid "Enter new profile name"
+msgstr "Voer een nieuwe profielnaam in"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:436
+msgid "Do you really want to delete profile '%1'?"
+msgstr "Wilt u profiel '%1' werkelijk verwijderen?"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:38
+msgid "Select additional keys"
+msgstr "Voer additionele sleutels in"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:48 widgets/rc.cpp:25
+msgid "User identification"
+msgstr "Gebruikers identificatie"
+
+#: dialogs/kendingbalancedlg.cpp:71
+msgid ""
+"Please enter the following fields with the information as you find them on "
+"your statement. Make sure to enter all values in <b>%1</b>."
+msgstr ""
+"Voer a.u.b. de volgende velden in met de informatie zoals u die vindt op uw "
+"bankafschrift. Zorg ervoor dat u alle waarden invoert in <b>%1</b>."
+
+#: dialogs/kendingbalancedlg.cpp:124
+#, c-format
+msgid "Last reconciled statement: %1"
+msgstr "Laatst gecontroleerde bankafschrift: %1"
+
+#: dialogs/kendingbalancedlg.cpp:437 dialogs/kendingbalancedlg.cpp:577
+#: dialogs/rc.cpp:137
+msgid "Adjustment transaction"
+msgstr "Aanpassingstransactie"
+
+#: dialogs/kendingbalancedlg.cpp:510
+msgid ""
+"KMyMoney has calculated the following amounts for interest and amortization "
+"according to recorded payments between %1 and %2."
+msgstr ""
+"KMyMoney heeft uit de betalingen tussen %1 en %2 de volgende bedragen "
+"berekend voor rente en aflossing."
+
+#: dialogs/kbalancechartdlg.cpp:59
+#, c-format
+msgid "Balance of %1"
+msgstr "Saldo van %1"
+
+#: dialogs/kbalancechartdlg.cpp:70
+msgid "%1 Balance History"
+msgstr "%1 Saldo historie"
+
+#: dialogs/kmymoneysplittable.cpp:98
+msgid "Split Options"
+msgstr "Opties voor gesplitste transacties"
+
+#: dialogs/kmymoneysplittable.cpp:99 dialogs/rc.cpp:731
+#: widgets/kmymoneypriceview.cpp:149
+msgid "Edit..."
+msgstr "Bewerken..."
+
+#: dialogs/kmymoneysplittable.cpp:100
+msgid "Duplicate"
+msgstr "Dupliceer"
+
+#: dialogs/kmymoneysplittable.cpp:102
+msgid "Delete ..."
+msgstr "Verwijderen ..."
+
+#: dialogs/kmymoneysplittable.cpp:275
+msgid ""
+"_: Duplicate split\n"
+"CTRL+c"
+msgstr "CTRL+c"
+
+#: dialogs/kmymoneysplittable.cpp:562
+msgid "will be calculated"
+msgstr "wordt berekend"
+
+#: dialogs/kmymoneysplittable.cpp:648
+msgid ""
+"You are about to delete the selected split. Do you really want to continue?"
+msgstr "U staat op het punt deze splitsing te verwijderen. Wilt u doorgaan?"
+
+#: dialogs/rc.cpp:1
+msgid "Account selection"
+msgstr "Rekening selectie"
+
+#: dialogs/rc.cpp:3
+msgid "Account to import to"
+msgstr "Rekening om naar te importeren"
+
+#: dialogs/rc.cpp:6 dialogs/rc.cpp:170 widgets/rc.cpp:169
+msgid "Skip"
+msgstr "Overslaan"
+
+#: dialogs/rc.cpp:8
+msgid ""
+"Use this dialog to backup your data. \n"
+"\n"
+"Please make sure you have a disk inserted and that the drive is ready. Then "
+"choose the mount point from either the Choose button or by entering the path "
+"in the available box.\n"
+"\n"
+"Click OK to perform the backup. If your system does not use an automounter, "
+"make sure you mark the checkbox below to \"mount this directory before "
+"backing up.\""
+msgstr ""
+"Gebruik deze dialoog om een reservekopie te maken van uw gegevens. \n"
+"\n"
+"Zorg ervoor dat u een medium (diskette, Cd-rom) heeft geplaatst en dat het "
+"apparaat gereed is. Kies het juiste koppelpunt (mount point) met de knop "
+"Kiezen of door juiste pad in te voeren in het daarvoor bestemde veld.\n"
+"Druk op OK om de reservekopie te maken. Als uw systeem het apparaat niet "
+"automatisch koppelt, zorg er dan voor dat u het onderstaande keuzehokje "
+"\"deze map koppelen voor het maken van een reservekopie.\" aanvinkt"
+
+#: dialogs/rc.cpp:9
+msgid "Device options"
+msgstr "Apparaatopties"
+
+#: dialogs/rc.cpp:10
+msgid ""
+"_: This is the mount point\n"
+"Mount Point:"
+msgstr "Koppelpunt:"
+
+#: dialogs/rc.cpp:11
+msgid "Choose..."
+msgstr "Kiezen..."
+
+#: dialogs/rc.cpp:12
+msgid "Mount this directory before backing up."
+msgstr "Deze map koppelen voor het maken van een reservekopie."
+
+#: dialogs/rc.cpp:15
+msgid "Reassign categories"
+msgstr "Rubriek opnieuw toewijzen"
+
+#: dialogs/rc.cpp:16
+msgid ""
+"The transactions, schedules and budgets associated with the selected "
+"category need to be re-assigned to a different category before the selected "
+"category can be deleted. Please select a category from the list below."
+msgstr ""
+"De (periodieke) transacties en budgetten moeten worden toegewezen aan een "
+"andere rubriek alvorens de geselecteerde rubriek kan worden verwijderd. "
+"Selecteer a.u.b. een rubriek uit onderstaande lijst."
+
+#: dialogs/rc.cpp:17
+msgid "Available categories:"
+msgstr "Beschikbare rubrieken:"
+
+#: dialogs/rc.cpp:21
+msgid ""
+"Please choose the type of import you wish to perform. A simple "
+"explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Kies a.u.b. het type import dat u wilt uitvoeren. Een eenvoudige uitleg\n"
+"van het import type is onderin het scherm beschikbaar en wordt bijgewerkt "
+"wanneer\n"
+"u een item uit de keuzelijst selecteert.\n"
+"\n"
+"Als u het juiste import type hebt gekozen, druk dan op de OK knop."
+
+#: dialogs/rc.cpp:23
+msgid "QIF"
+msgstr "QIF"
+
+#: dialogs/rc.cpp:24
+msgid "CSV"
+msgstr "CSV"
+
+#: dialogs/rc.cpp:25
+msgid "Some descripton"
+msgstr "Willekeurige beschrijving"
+
+#: dialogs/rc.cpp:28
+msgid "Confirm Manual Enter"
+msgstr "Bevestig Handmatige invoer"
+
+#: dialogs/rc.cpp:29
+msgid "The following changes have been made to the transaction data:"
+msgstr "De volgende wijzigingen zijn aangebracht in de transactie gegevens:"
+
+#: dialogs/rc.cpp:30
+msgid "Please choose what you wish to do with the above changes"
+msgstr "Kies wat u wilt doen met bovenstaande wijzigingen"
+
+#: dialogs/rc.cpp:31
+msgid ""
+"Discard the changes and enter the original transaction into the register."
+msgstr ""
+"Annuleer de wijzigingen en leg de originele transactie vast in het kasboek."
+
+#: dialogs/rc.cpp:32
+msgid "Enter these new values this one time, for this occurence only."
+msgstr "Voer deze nieuwe waarden eenmalig in."
+
+#: dialogs/rc.cpp:33
+msgid "Set all further occurences in this schedule to be these values."
+msgstr "Stel alle verdere periodieke transactie in op deze waarden."
+
+#: dialogs/rc.cpp:36
+msgid "CSV Dialog"
+msgstr "CSV Dialoog"
+
+#: dialogs/rc.cpp:37
+msgid ""
+"CSV Dialog. Choose a file and then click on Run. You can view your "
+"progress at\n"
+"the bottom of the screen.\n"
+"\n"
+"You can cancel the process at any time by clicking on the Cancel button."
+msgstr ""
+"CSV Dialoog. Kies een bestand en druk dan op Uitvoeren. U kunt uw "
+"voortgang bekijken \n"
+"aan de onderzijde van het scherm.\n"
+"\n"
+"U kunt het proces op elk moment stoppen door op de knop Annuleren te drukken."
+
+#: dialogs/rc.cpp:38
+msgid "Choose the csv file:"
+msgstr "Kies het csv bestand:"
+
+#: dialogs/rc.cpp:39
+msgid "Browse"
+msgstr "Bladeren"
+
+#: dialogs/rc.cpp:40
+msgid "Between These Dates"
+msgstr "Tussen deze Datums"
+
+#: dialogs/rc.cpp:41 dialogs/rc.cpp:196
+msgid "Start on:"
+msgstr "Start op:"
+
+#: dialogs/rc.cpp:42 dialogs/rc.cpp:195
+msgid "End on:"
+msgstr "Eindig op:"
+
+#: dialogs/rc.cpp:43
+msgid "Run"
+msgstr "Uitvoeren"
+
+#: dialogs/rc.cpp:44
+msgid "Progress Info"
+msgstr "Voortgangs informatie"
+
+#: dialogs/rc.cpp:45
+msgid "Processing Account:"
+msgstr "Verwerken van rekening:"
+
+#: dialogs/rc.cpp:47
+msgid "Processing Transaction:"
+msgstr "Verwerken van transactie:"
+
+#: dialogs/rc.cpp:48
+msgid "0 of 0"
+msgstr "0 van 0"
+
+#: dialogs/rc.cpp:50
+msgid "Exchange Rate/Price Editor"
+msgstr "(Wissel-)koers editor"
+
+#: dialogs/rc.cpp:55
+msgid "Convert from"
+msgstr "Omzetten van"
+
+#: dialogs/rc.cpp:58
+msgid "Convert to"
+msgstr "Omzetten naar"
+
+#: dialogs/rc.cpp:61
+msgid "To amount"
+msgstr "Naar bedrag"
+
+#: dialogs/rc.cpp:62
+msgid "Exchange rate / Price"
+msgstr "Wisselkoers / Koers"
+
+#: dialogs/rc.cpp:64
+msgid ""
+"xx\n"
+"xx"
+msgstr ""
+"xx\n"
+"xx"
+
+#: dialogs/rc.cpp:68
+msgid "Currencies"
+msgstr "Munteenheden"
+
+#: dialogs/rc.cpp:72
+msgid "real ID"
+msgstr "werkelijke ID"
+
+#: dialogs/rc.cpp:73 dialogs/rc.cpp:722
+msgid "ID"
+msgstr "ID"
+
+#: dialogs/rc.cpp:74
+msgid "X"
+msgstr "X"
+
+#: dialogs/rc.cpp:76 dialogs/rc.cpp:459
+msgid "Online Source"
+msgstr "Online gegevensbron"
+
+#: dialogs/rc.cpp:78 dialogs/rc.cpp:278 dialogs/rc.cpp:312 dialogs/rc.cpp:684
+msgid "F1"
+msgstr "F1"
+
+#: dialogs/rc.cpp:80
+msgid "If this button is not activated, select the base currency first."
+msgstr ""
+"Als deze knop niet geactiveerd is, kies dan eerst uw standaard munteenheid."
+
+#: dialogs/rc.cpp:81
+msgid ""
+"Press this button to close the dialog. If the button is not activated, "
+"select your base currency."
+msgstr ""
+"Druk op deze knop om de dialoog te sluiten. Als de knop niet geactiveerd is, "
+"selecteer dan eerst uw standaard munteenheid."
+
+#: dialogs/rc.cpp:82
+msgid "Edit Equity"
+msgstr "Bewerk aandeel"
+
+#: dialogs/rc.cpp:86 dialogs/rc.cpp:410
+msgid "Smallest fraction:"
+msgstr "Kleinste deel:"
+
+#: dialogs/rc.cpp:87 dialogs/rc.cpp:408 dialogs/rc.cpp:440
+msgid "1 /"
+msgstr "1 /"
+
+#: dialogs/rc.cpp:88 dialogs/rc.cpp:405
+msgid "Investment Type:"
+msgstr "Type belegging:"
+
+#: dialogs/rc.cpp:89 dialogs/rc.cpp:404
+msgid "Equity Name:"
+msgstr "Naam van aandeel:"
+
+#: dialogs/rc.cpp:90 dialogs/rc.cpp:409
+msgid "Market Symbol:"
+msgstr "Marktsymbool:"
+
+#: dialogs/rc.cpp:91
+msgid "Price History"
+msgstr "Koershistorie"
+
+#: dialogs/rc.cpp:97
+msgid "Edit Scheduled transaction"
+msgstr "Periodieke transactie bewerken"
+
+#: dialogs/rc.cpp:98
+msgid "Schedule name:"
+msgstr "Naam voor periodieke transactie:"
+
+#: dialogs/rc.cpp:99
+msgid "Frequency:"
+msgstr "Frequentie:"
+
+#: dialogs/rc.cpp:100
+msgid "Number of selected periods between entries"
+msgstr "Aantal periodes tussen invoer"
+
+#: dialogs/rc.cpp:101
+msgid "Payment information"
+msgstr "Informatie over betaling"
+
+#: dialogs/rc.cpp:105 dialogs/rc.cpp:160 dialogs/rc.cpp:247 dialogs/rc.cpp:752
+#: widgets/register.cpp:569
+msgid "C"
+msgstr "C"
+
+#: dialogs/rc.cpp:113
+msgid "Do nothing"
+msgstr "Niets doen"
+
+#: dialogs/rc.cpp:116
+msgid "If this schedule occurs on the weekend:"
+msgstr "Als deze periodieke transactie in het weekend valt:"
+
+#: dialogs/rc.cpp:117
+msgid "The amount is an estimate because it varies for each payment"
+msgstr "Dit is een schatting omdat het bedrag varieert per betaling"
+
+#: dialogs/rc.cpp:118
+msgid "Enter this schedule into the register automatically when it is due"
+msgstr ""
+"Deze periodieke transactie automatisch invoeren in het kasboek op de "
+"vervaldatum"
+
+#: dialogs/rc.cpp:119
+msgid "This schedule will end at some time"
+msgstr "Deze periodieke transactie stopt op een bepaalde datum"
+
+#: dialogs/rc.cpp:120
+msgid "Number of transactions remaining:"
+msgstr "Aantal resterende transacties:"
+
+#: dialogs/rc.cpp:121
+msgid "Date of final transaction:"
+msgstr "Datum van laatste transactie:"
+
+#: dialogs/rc.cpp:125
+msgid "Reconciliation Wizard"
+msgstr "Saldo Controle wizard"
+
+#: dialogs/rc.cpp:127
+msgid ""
+"Reconciling your account assures, that your recordings match those of your "
+"institution and that there are no mistakes on either side. You should "
+"reconcile your account whenever you receive a statement from your "
+"institution.\n"
+"\n"
+"All relevant information necessary for this process is usually printed on "
+"your statement.\n"
+"\n"
+"On the next page you will verify, that the starting and ending balance are "
+"matching those on your statement. If not, please modify the figures."
+msgstr ""
+"Elke keer als u een bankafschrift ontvangt, dient u uw rekeningen sluitend "
+"te maken. De belangrijkste reden voor het sluitend maken van rekeningen is "
+"om ervoor te zorgen dat uw gegevens synchroon lopen met die van de bank. Het "
+"is het handigst als u het sluitend maken uitvoert na ontvangst van een "
+"bankafschrift.\n"
+"\n"
+"Alle benodigde informatie voor deze wizard staat normaal gesproken op uw "
+"bankafschrift.\n"
+"\n"
+"Op de volgende pagina geeft u aan of het begin- en eindsaldo overeenstemmen "
+"met uw laatste bankafschrift. Indien dit niet het geval is kunt u dit zelf "
+"aanpassen."
+
+#: dialogs/rc.cpp:129
+msgid ""
+"KMyMoney calculates your loan payments automatically. The amounts can "
+"deviate from those calculated by the creditor. Therefore, you possibly have "
+"to adjust amortization, interest and other costs according to your "
+"statement.\n"
+"\n"
+"Please enter the following information found on your statement:"
+msgstr ""
+"KMyMoney berekent de betalingen voor uw lening automatisch. Het bedrag dat "
+"door uw bank is berekend kan hiervan afwijken. Daarom moet u mogelijk "
+"aflossingen, rente en andere kosten aanpassen aan uw bankafschrift.\n"
+"\n"
+"Voer a.u.b. de volgende informatie in, gebaseerd op uw bankafschrift:"
+
+#: dialogs/rc.cpp:130
+msgid "Ending date of statement"
+msgstr "Einddatum van de bankafschrift"
+
+#: dialogs/rc.cpp:131
+msgid "Starting date of statement"
+msgstr "Startdatum van de bankafschrift"
+
+#: dialogs/rc.cpp:132
+msgid "Verify payments"
+msgstr "Controleer betalingen"
+
+#: dialogs/rc.cpp:133 dialogs/rc.cpp:148 dialogs/rc.cpp:476 dialogs/rc.cpp:477
+#: dialogs/rc.cpp:508 dialogs/rc.cpp:513 dialogs/rc.cpp:518 dialogs/rc.cpp:532
+#: dialogs/rc.cpp:539 dialogs/rc.cpp:540 dialogs/rc.cpp:541 dialogs/rc.cpp:542
+#: dialogs/rc.cpp:543 dialogs/rc.cpp:552 dialogs/rc.cpp:553 dialogs/rc.cpp:554
+#: dialogs/rc.cpp:555 dialogs/rc.cpp:556 dialogs/rc.cpp:565 dialogs/rc.cpp:566
+#: dialogs/rc.cpp:567 dialogs/rc.cpp:568 dialogs/rc.cpp:569 dialogs/rc.cpp:578
+#: dialogs/rc.cpp:579 dialogs/rc.cpp:580 dialogs/rc.cpp:581 dialogs/rc.cpp:582
+#: dialogs/rc.cpp:591 dialogs/rc.cpp:592 dialogs/rc.cpp:593 dialogs/rc.cpp:594
+#: dialogs/rc.cpp:595 dialogs/rc.cpp:603 dialogs/rc.cpp:604 dialogs/rc.cpp:605
+#: dialogs/rc.cpp:606 dialogs/rc.cpp:607 dialogs/rc.cpp:618 dialogs/rc.cpp:619
+#: dialogs/rc.cpp:621 dialogs/rc.cpp:636 dialogs/rc.cpp:637 dialogs/rc.cpp:638
+#: dialogs/rc.cpp:639 dialogs/rc.cpp:640 dialogs/rc.cpp:641 dialogs/rc.cpp:651
+#: dialogs/rc.cpp:652 dialogs/rc.cpp:654 dialogs/rc.cpp:657 dialogs/rc.cpp:658
+#: dialogs/rc.cpp:659 dialogs/rc.cpp:664 dialogs/rc.cpp:665 dialogs/rc.cpp:668
+#: dialogs/rc.cpp:670 dialogs/rc.cpp:672 dialogs/rc.cpp:674 dialogs/rc.cpp:676
+#: dialogs/rc.cpp:678 dialogs/rc.cpp:681 dialogs/rc.cpp:823 widgets/rc.cpp:167
+msgid "1"
+msgstr "1"
+
+#: dialogs/rc.cpp:136
+msgid ""
+"If your statement shows different amounts, please cancel this dialog and "
+"correct the false transactions or correct the values in this dialog. In the "
+"later case, KMyMoney will create an adjustment transaction and add it to the "
+"ledger."
+msgstr ""
+"Als uw afschrift andere bedragen laat zien, annuleer dan deze dialoog en "
+"corrigeer de foutieve transacties of corrigeer de waarden in deze dialoog. "
+"In het laatste geval zal KMyMoney een aanpassingstransactie aanmaken en deze "
+"toevoegen aan het kasboek."
+
+#: dialogs/rc.cpp:138
+msgid ""
+"In order to create the adjustment transaction, KMyMoney requires an account "
+"and possibly an interest category to assign the differences to. Please "
+"select an account and - if necessary - a category."
+msgstr ""
+"Om de aanpassingstransactie aan te maken, heeft KMyMoney een rekening nodig "
+"en mogelijk een rentecategorie om de verschillen aan toe te wijzen. "
+"Selecteer een rekening en, indien nodig, een rubriek."
+
+#: dialogs/rc.cpp:140
+msgid "Interest-Category"
+msgstr "Rente rubriek"
+
+#: dialogs/rc.cpp:141
+msgid "Restarting postponed reconciliation"
+msgstr "Herstarten van uitgestelde Saldo Controle"
+
+#: dialogs/rc.cpp:142
+msgid ""
+"You have previously postponed the reconciliation of this account. If you "
+"have entered charges or interests the last time you started reconciling this "
+"account you can modify these in the ledger later on.\n"
+"\n"
+"It is important, that you continue with the same statement you used when you "
+"postponed the reconciliation.\n"
+"\n"
+"All information you have entered into this wizard will be shown and all "
+"transactions that you already cleared are marked with a 'C'."
+msgstr ""
+"U heeft in een eerder stadium de Saldo Controle voor deze rekening "
+"afgebroken. Als u toen kosten of rente heeft ingevoerd voor deze rekening "
+"dan kunt u deze later handmatig aanpassen in het kasboek.\n"
+"\n"
+"Het is belangrijk door te gaan met dezelfde bankafschrift als die waar u mee "
+"bezig was toen deze Saldo Controle is afgebroken.\n"
+"\n"
+"Alle informatie die al ingevoerd was via deze wizard wordt aan u getoond, "
+"alle betaalde transacties zijn gemarkeerd met een 'B'."
+
+#: dialogs/rc.cpp:143
+msgid "Statement Information"
+msgstr "Bankafschrift informatie"
+
+#: dialogs/rc.cpp:144 dialogs/rc.cpp:315 dialogs/rc.cpp:317 dialogs/rc.cpp:320
+#: dialogs/rc.cpp:321 dialogs/rc.cpp:329 dialogs/rc.cpp:330 dialogs/rc.cpp:333
+#: dialogs/rc.cpp:334 dialogs/rc.cpp:335 dialogs/rc.cpp:336 dialogs/rc.cpp:366
+msgid "x"
+msgstr "x"
+
+#: dialogs/rc.cpp:145
+msgid "Statement date:"
+msgstr "Datum bankafschrift:"
+
+#: dialogs/rc.cpp:146
+msgid "Starting balance of this statement:"
+msgstr "Beginsaldo van dit bankafschrift:"
+
+#: dialogs/rc.cpp:147
+msgid "Ending balance of this statement:"
+msgstr "Eindsaldo van dit afschrift:"
+
+#: dialogs/rc.cpp:149
+msgid "Interest / Charges"
+msgstr "Rente / Kosten"
+
+#: dialogs/rc.cpp:150
+msgid ""
+"If necessary, enter information about interest or charges here. KMyMoney "
+"will create transactions and clear them directly for you."
+msgstr ""
+"Indien noodzakelijk kunt u hier extra informatie over rente of kosten "
+"invoeren. KMyMoney voert deze transactie automatisch in en markeert ze "
+"direct als betaald (B)."
+
+#: dialogs/rc.cpp:153
+msgid "Charges"
+msgstr "Kosten"
+
+#: dialogs/rc.cpp:154
+msgid "Enter Schedule"
+msgstr "Nieuwe periodieke transactie"
+
+#: dialogs/rc.cpp:155
+msgid "Schedule Details"
+msgstr "Periodieke transactie details"
+
+#: dialogs/rc.cpp:156 dialogs/rc.cpp:348 dialogs/rc.cpp:389 widgets/rc.cpp:164
+msgid "Name:"
+msgstr "Naam:"
+
+#: dialogs/rc.cpp:157 dialogs/rc.cpp:351 widgets/rc.cpp:165
+msgid "Type:"
+msgstr "Type:"
+
+#: dialogs/rc.cpp:168
+msgid "Enter"
+msgstr "Invoeren"
+
+#: dialogs/rc.cpp:169
+msgid ""
+"Enter the transaction and advance the next due date of this schedule to the "
+"next payment date."
+msgstr "Voer deze transactie in en pas de vervaldatum aan."
+
+#: dialogs/rc.cpp:171
+msgid ""
+"Do not enter the transaction but advance the next due date of this schedule "
+"to the next payment date."
+msgstr "Voer deze transactie niet in maar pas de vervaldatum aan."
+
+#: dialogs/rc.cpp:172
+msgid "Ignore"
+msgstr "Negeer"
+
+#: dialogs/rc.cpp:173
+msgid ""
+"Do not enter or skip payments for this schedule but continue with the next "
+"schedule."
+msgstr ""
+"Sla deze betaling over en ga door met de volgende periodieke transactie."
+
+#: dialogs/rc.cpp:175
+msgid "Cancel processing of schedule entry."
+msgstr "Annuleer het invoeren van periodieke transacties."
+
+#: dialogs/rc.cpp:176
+msgid "Update Stock and Currency Prices"
+msgstr "Koersen van munteenheden en aandelen bijwerken"
+
+#: dialogs/rc.cpp:177
+msgid "List of known Equities, and the date they were last updated on."
+msgstr ""
+"Lijst van bekende aandelen en de datum waarop ze voor het laatst zijn "
+"bijgewerkt."
+
+#: dialogs/rc.cpp:179
+msgid "Update All"
+msgstr "Alles bijwerken"
+
+#: dialogs/rc.cpp:180
+msgid "Update Selected"
+msgstr "Selectie bijwerken"
+
+#: dialogs/rc.cpp:181
+msgid "Status:"
+msgstr "Status:"
+
+#: dialogs/rc.cpp:184
+msgid "QIF Export"
+msgstr "QIF Export"
+
+#: dialogs/rc.cpp:185
+msgid ""
+"From this dialog you are able to export transactions to a quicken compatible "
+"file, (known as a QIF file, because of the extension). Please enter the "
+"path to the QIF file or select it by clicking on the Browse button.\n"
+"\n"
+"You can choose the file's path, the account and the format of the QIF file "
+"(profile). Choose Account to export all the transactions between the "
+"specified dates or just categories. You can also limit the transactions "
+"that are exported by start and ending date. Once you have pressed the "
+"Export button a message box will appear when the export has completed "
+"detailing how many transactions, categories and payees were exported."
+msgstr ""
+"Vanuit deze dialoog kunt u transacties exporteren naar een quicken "
+"compatibel bestand, (bekend als een QIF bestand, vanwege de extensie). Voer "
+"het pad naar het QIF bestand in of selecteer deze door Bladeren te "
+"selecteren.\n"
+"\n"
+"U kunt het pad kiezen, alsmede de rekening en het formaat van het QIF "
+"bestand (profiel). Kies Rekening om alle transacties tussen bepaalde datums "
+"of van bepaalde rubrieken te exporteren. U kunt de te exporteren transacties "
+"ook beperken met een start- en einddatum. Als u op de Export knop heeft "
+"gedrukt, zal er een bericht verschijnen zodra de export gereed is met daarin "
+"informatie over hoeveel transacties, rubrieken en relaties zijn geëxporteerd."
+
+#: dialogs/rc.cpp:186
+msgid "File to export to:"
+msgstr "Bestand om naar te exporteren:"
+
+#: dialogs/rc.cpp:188
+msgid "Account to export"
+msgstr "Rekening om te exporteren"
+
+#: dialogs/rc.cpp:189 dialogs/rc.cpp:297
+msgid "QIF Profile"
+msgstr "QIF Profiel"
+
+#: dialogs/rc.cpp:190 dialogs/rc.cpp:298 dialogs/rc.cpp:362
+#: widgets/kmymoneypriceview.cpp:145
+msgid "New..."
+msgstr "Nieuw..."
+
+#: dialogs/rc.cpp:191
+msgid "Contents to Export"
+msgstr "Inhoud om te exporteren"
+
+#: dialogs/rc.cpp:194
+msgid "Date Range"
+msgstr "Gegevensbereik"
+
+#: dialogs/rc.cpp:199
+msgid "Search transactions"
+msgstr "Transacties doorzoeken"
+
+#: dialogs/rc.cpp:200
+msgid "Criteria"
+msgstr "Randvoorwaarden"
+
+#: dialogs/rc.cpp:201
+msgid "Define your search criteria"
+msgstr "Bepaal uw zoekcriteria"
+
+#: dialogs/kfindtransactiondlg.cpp:169 dialogs/rc.cpp:202
+msgid "Text"
+msgstr "Tekst"
+
+#: dialogs/rc.cpp:203
+msgid "Contains"
+msgstr "Bevat"
+
+#: dialogs/rc.cpp:204
+msgid "Does not contain"
+msgstr "Bevat niet"
+
+#: dialogs/rc.cpp:205
+msgid "Treat text as regular expression"
+msgstr "Tekst behandelen als reguliere expressie"
+
+#: dialogs/rc.cpp:206
+msgid "Case sensitive"
+msgstr "Hoofdlettergevoelig"
+
+#: dialogs/rc.cpp:209
+msgid "Range"
+msgstr "Bereik"
+
+#: dialogs/rc.cpp:210
+msgid ""
+"_: To (Date)\n"
+"To"
+msgstr "Tot"
+
+#: dialogs/rc.cpp:211
+msgid ""
+"_: From (Date)\n"
+"From"
+msgstr ""
+"_: From (Date)\n"
+"Van"
+
+#: dialogs/rc.cpp:213
+msgid "Search this amount"
+msgstr "Zoek dit bedrag"
+
+#: dialogs/rc.cpp:214
+msgid "Search amount in the range"
+msgstr "Bedrag zoeken binnen het bereik"
+
+#: dialogs/rc.cpp:215
+msgid ""
+"_: to (amount)\n"
+"to"
+msgstr "tot"
+
+#: dialogs/rc.cpp:216
+msgid ""
+"_: from (amount)\n"
+"from"
+msgstr "van"
+
+#: dialogs/rc.cpp:220
+msgid "Select transactions without payees"
+msgstr "Selecteer transacties zonder relaties"
+
+#: dialogs/rc.cpp:221
+msgid "Select all"
+msgstr "Alles selecteren"
+
+#: dialogs/rc.cpp:222
+msgid "Select none"
+msgstr "Niets selecteren"
+
+#: dialogs/rc.cpp:224
+msgid "Validity"
+msgstr "Geldigheid"
+
+#: dialogs/rc.cpp:226
+msgid "All states"
+msgstr "Alle toestanden"
+
+#: dialogs/rc.cpp:230
+msgid "All types"
+msgstr "Alle typen"
+
+#: dialogs/rc.cpp:234
+msgid "Any transaction"
+msgstr "Elke transactie"
+
+#: dialogs/rc.cpp:235
+msgid "Valid transaction"
+msgstr "Geldige transactie"
+
+#: dialogs/rc.cpp:236
+msgid "Invalid transaction"
+msgstr "Ongeldige transactie"
+
+#: dialogs/rc.cpp:237
+msgid "State"
+msgstr "Toestand"
+
+#: dialogs/rc.cpp:238
+msgid "Search this number"
+msgstr "Zoek dit nummer"
+
+#: dialogs/rc.cpp:239
+msgid "Search number in range"
+msgstr "Nummer zoeken binnen het bereik"
+
+#: dialogs/rc.cpp:240
+msgid ""
+"_: to (number)\n"
+"to"
+msgstr "tot"
+
+#: dialogs/rc.cpp:241
+msgid ""
+"_: from (number)\n"
+"from"
+msgstr "van"
+
+#: dialogs/rc.cpp:242
+msgid "text"
+msgstr "tekst"
+
+#: dialogs/rc.cpp:243
+msgid "warning"
+msgstr "waarschuwing"
+
+#: dialogs/rc.cpp:244
+msgid "Result"
+msgstr "Resultaat"
+
+#: dialogs/rc.cpp:254
+msgid "F"
+msgstr "F"
+
+#: dialogs/rc.cpp:257 dialogs/rc.cpp:844
+msgid "&Reset"
+msgstr "&Herstel"
+
+#: dialogs/rc.cpp:258
+msgid "&Find"
+msgstr "&Zoek"
+
+#: dialogs/rc.cpp:259
+msgid "GnuCash Import Options"
+msgstr "GnuCash Importeer Opties"
+
+#: dialogs/rc.cpp:260
+msgid "Use 'Help' for more information on these options"
+msgstr "Gebruik 'Help' voor meer informatie over deze opties"
+
+#: dialogs/rc.cpp:261
+msgid "Investment Handling"
+msgstr "Beleggings handeling"
+
+#: dialogs/rc.cpp:262
+msgid "One investment account for each stock"
+msgstr "Een beleggingsrekening voor ieder aandeel"
+
+#: dialogs/rc.cpp:263
+msgid "One investment account for all stocks"
+msgstr "Een beleggingsrekening voor alle aandelen"
+
+#: dialogs/rc.cpp:264
+msgid "Prompt for an investment account for each stock"
+msgstr "Vraag naar een beleggingsrekening voor ieder aandeel"
+
+#: dialogs/rc.cpp:265
+msgid "Online price quotes"
+msgstr "Online wisselkoersen"
+
+#: dialogs/rc.cpp:266
+msgid "Use Finance::Quote for share price quotes"
+msgstr "Gebruik Financiën::Koers voor aandelen"
+
+#: dialogs/rc.cpp:267
+msgid "Scheduled Transactions"
+msgstr "Betalingsagenda"
+
+#: dialogs/rc.cpp:268
+msgid "Drop suspect scheduled transactions"
+msgstr "Negeer verdachte periodieke transacties"
+
+#: dialogs/rc.cpp:269
+msgid "Decoding option"
+msgstr "Decodeeroptie"
+
+#: dialogs/rc.cpp:270
+msgid "Decode using"
+msgstr "Het gebruik van decodering"
+
+#: dialogs/rc.cpp:271
+msgid "Transaction Notes option"
+msgstr "Opties voor notities bij transacties"
+
+#: dialogs/rc.cpp:272
+msgid "Use transaction notes on non-split transactions"
+msgstr "Gebruik notitie veld bij transacties."
+
+#: dialogs/rc.cpp:273
+msgid "Debug Options"
+msgstr "Debug Opties"
+
+#: dialogs/rc.cpp:274
+msgid "General debug data"
+msgstr "Algemene debug gegevens"
+
+#: dialogs/rc.cpp:275
+msgid "Display XML data"
+msgstr "Toon XML data"
+
+#: dialogs/rc.cpp:276
+msgid "Anonymize data"
+msgstr "Gegevens anoniem maken"
+
+#: dialogs/rc.cpp:281
+msgid "Online Quotes - Select price source"
+msgstr "Online koersen - Selecteer bron"
+
+#: dialogs/rc.cpp:284
+msgid ""
+"This price source is not known to KMyMoney. Please select an option below."
+msgstr ""
+"Deze bron voor deze koers is niet bekend bij KMyMoney. Kies één van "
+"onderstaande opties."
+
+#: dialogs/rc.cpp:285
+msgid "Do not perform online quotes for this investment"
+msgstr "Voer geen online koers update uit voor deze belegging"
+
+#: dialogs/rc.cpp:286
+msgid "Select a known KMyMoney source from the list below"
+msgstr "Kies een bekende KMyMoney bron uit onderstaande lijst"
+
+#: dialogs/rc.cpp:287
+msgid ""
+"Use the following name for the price source.\n"
+"(Click Help for further information.)"
+msgstr ""
+"Gebruik de volgende naam voor de koers bron.\n"
+"(Klik Help voor verdere informatie.)"
+
+#: dialogs/rc.cpp:288
+msgid "Always use this selection for this price source."
+msgstr "Altijd deze selectie gebruiken als bron voor deze koers."
+
+#: dialogs/rc.cpp:289
+msgid "QIF Import"
+msgstr "QIF Import"
+
+#: dialogs/rc.cpp:290
+msgid ""
+"From this dialog you are able to import transactions from a Quicken<b>&trade;"
+"</b> compatible file, (known as a QIF file, because of the extension).<p>\n"
+"\n"
+"Please enter the path to the QIF file or select it by clicking on the Browse "
+"button. Once you have the file's path press the Import button and KMyMoney "
+"will import all the transactions, categories and payees it finds."
+msgstr ""
+"In dit venster kunt u transacties uit een Quicken compatibel bestand "
+"importeren, (beter bekend als een QIF bestand, vanwege de extensie).<p>\n"
+"\n"
+"Selecteer de map en het te importeren QIF bestand middels klikken op de knop "
+"Bladeren. Als u het juiste bestand heeft geselecteerd, druk dan op de "
+"Importeren knop en KMyMoney zal alle transacties, categoriëen en relaties "
+"die het kan vinden, importeren."
+
+#: dialogs/rc.cpp:291
+msgid "QIF File to Import:"
+msgstr "QIF bestand om te importeren:"
+
+#: dialogs/rc.cpp:292
+msgid "Import options"
+msgstr "Importeer opties"
+
+#: dialogs/rc.cpp:293
+msgid "Bank statement"
+msgstr "Bankafschrift"
+
+#: dialogs/rc.cpp:294
+msgid "Other application"
+msgstr "Andere applicatie"
+
+#: dialogs/rc.cpp:295
+msgid ""
+"Select <b>Bank statement</b> turns on automatic category matching which is "
+"turned off in case of <b>Historic data</b>. Use the latter if you import "
+"files from other Personal Finance Management software."
+msgstr ""
+"Het selecteren van <b>Bankafschrift</b> zorgt voor automatische toewijzing "
+"van een rubriek. Kiest u voor <b>Historisch gegevens</b> dan wordt dit niet "
+"gedaan. Deze laatste optie is met name bedoeld voor het importeren van "
+"gegevens uit andere Financiële software (bv MS-Money, GNUCash)"
+
+#: dialogs/rc.cpp:296
+msgid "Source of QIF"
+msgstr "Bron voor QIF"
+
+#: dialogs/rc.cpp:302
+msgid "Verify Import"
+msgstr "Importeren bevestigen"
+
+#: dialogs/rc.cpp:304
+msgid "Ok"
+msgstr "Ok"
+
+#: dialogs/rc.cpp:306
+msgid "MyDialog"
+msgstr "Mijn Dialoog"
+
+#: dialogs/rc.cpp:310
+msgid "File Information"
+msgstr "Bestands Informatie"
+
+#: dialogs/rc.cpp:316
+msgid "Last modified on"
+msgstr "Voor het laatst aangepast op"
+
+#: dialogs/rc.cpp:319
+msgid "Base currency"
+msgstr "Standaard munteenheid"
+
+#: dialogs/rc.cpp:322
+msgid "Created on"
+msgstr "Gecreëerd op"
+
+#: dialogs/rc.cpp:325
+msgid "Accounts/Categories"
+msgstr "Rekeningen/Rubrieken"
+
+#: dialogs/rc.cpp:328
+msgid "Closed"
+msgstr "Gesloten"
+
+#: dialogs/rc.cpp:331
+msgid "Prices"
+msgstr "Wisselkoersen"
+
+#: dialogs/rc.cpp:337
+msgid "Splits"
+msgstr "Splitsing"
+
+#: dialogs/rc.cpp:338
+msgid "Price Editor"
+msgstr "(Wissel-)koers editor"
+
+#: dialogs/rc.cpp:339
+msgid "Show all stored prices"
+msgstr "Toon alle wisselkoersen"
+
+#: dialogs/rc.cpp:343
+msgid "Delete Range..."
+msgstr "Bereik Verwijderen..."
+
+#: dialogs/rc.cpp:346
+msgid "New Account Dialog"
+msgstr "Nieuwe Rekening Dialoog"
+
+#: dialogs/rc.cpp:349
+msgid "Opening information"
+msgstr "Start informatie"
+
+#: dialogs/rc.cpp:350
+msgid "Currency:"
+msgstr "Munteenheid:"
+
+#: dialogs/rc.cpp:352 dialogs/rc.cpp:793
+msgid "Date:"
+msgstr "Datum:"
+
+#: dialogs/rc.cpp:353
+msgid "Balance:"
+msgstr "Totaal:"
+
+#: dialogs/rc.cpp:355
+msgid "Last check number:"
+msgstr "Laatste controle nummer:"
+
+#: dialogs/rc.cpp:356
+msgid "Notes:"
+msgstr "Opmerkingen:"
+
+#: dialogs/rc.cpp:357
+msgid "No auto-VAT-assignment"
+msgstr "Geen automatische BTW-toewijzing"
+
+#: dialogs/rc.cpp:358 dialogs/rc.cpp:441
+msgid "Price entry"
+msgstr "Invoermethode"
+
+#: dialogs/rc.cpp:359
+msgid "Preferred Account"
+msgstr "Voorkeursrekening"
+
+#: dialogs/rc.cpp:363
+msgid "Number:"
+msgstr "Nummer:"
+
+#: dialogs/rc.cpp:364 dialogs/rc.cpp:395
+msgid "BIC"
+msgstr "BIC"
+
+#: dialogs/rc.cpp:367
+msgid "Hierarchy"
+msgstr "Hiërarchie"
+
+#: dialogs/rc.cpp:368
+msgid "Subaccount"
+msgstr "Subrekening"
+
+#: dialogs/rc.cpp:369
+msgid "Limits"
+msgstr "Limieten"
+
+#: dialogs/rc.cpp:370
+msgid ""
+"This page allows to setup certain limits. KMyMoney will warn you when the "
+"account balance reaches a limit."
+msgstr ""
+"Op deze pagina kunt u bepaalde limieten instellen. KMyMoney waarschuwt u als "
+"deze limieten worden overschreden."
+
+#: dialogs/rc.cpp:372
+msgid "Absolute limit"
+msgstr "Absolute limiet"
+
+#: dialogs/rc.cpp:373
+msgid "Maximum credit limit"
+msgstr "Maximale kredietlimiet"
+
+#: dialogs/rc.cpp:374
+msgid "Minimum balance"
+msgstr "Minimum saldo"
+
+#: dialogs/rc.cpp:375
+msgid "Early warning"
+msgstr "Vroegtijdige waarschuwing"
+
+#: dialogs/rc.cpp:377
+msgid "VAT details"
+msgstr "BTW details"
+
+#: dialogs/rc.cpp:378
+msgid "VAT category"
+msgstr "BTW rubriek"
+
+#: dialogs/rc.cpp:379
+msgid "VAT percentage"
+msgstr "BTW percentage"
+
+#: dialogs/rc.cpp:380
+msgid "Enable auto VAT assignment"
+msgstr "Automatische BTW-toewijzing inschakelen"
+
+#: dialogs/rc.cpp:381
+msgid "Amount entered"
+msgstr "Ingevuld bedrag"
+
+#: dialogs/rc.cpp:382
+msgid "Gross amount"
+msgstr "Bruto bedrag"
+
+#: dialogs/rc.cpp:383
+msgid "Net amount"
+msgstr "Netto bedrag"
+
+#: dialogs/rc.cpp:384
+msgid "Include on Tax Reports"
+msgstr "Meenemen in Belasting overzichten"
+
+#: dialogs/rc.cpp:387
+msgid "New Institution Dialog"
+msgstr "Nieuwe financiële instelling dialoog"
+
+#: dialogs/rc.cpp:388
+msgid "Institution Details"
+msgstr "Details voor financiële instelling"
+
+#: dialogs/rc.cpp:390
+msgid "City:"
+msgstr "Plaats:"
+
+#: dialogs/rc.cpp:394
+msgid "Routing Number:"
+msgstr "Banknummer:"
+
+#: dialogs/rc.cpp:398
+msgid "New Budget"
+msgstr "Nieuw Budget"
+
+#: dialogs/rc.cpp:403
+msgid "New Equity"
+msgstr "Nieuw Aandeel"
+
+#: dialogs/rc.cpp:406 dialogs/rc.cpp:407
+msgid "Trading Symbol of the stock or mutual fund, not required."
+msgstr "Handelssymbool van het aandeel of beleggingsfonds, niet verplicht."
+
+#: dialogs/rc.cpp:414 dialogs/rc.cpp:415
+msgid "Name of the company, or mutual fund."
+msgstr "Naam van het bedrijf of beleggingsfonds."
+
+#: dialogs/rc.cpp:418
+msgid "New File Dialog"
+msgstr "Nieuw Bestand Dialoog"
+
+#: dialogs/rc.cpp:419
+msgid ""
+"Use this dialog to enter personal information about yourself.\n"
+"\n"
+"All information is optional and is provided to personalize\n"
+"your KMyMoney file."
+msgstr ""
+"Dit venster biedt u de gelegenheid uw persoonlijke gegevens in te voeren.\n"
+"\n"
+"Alle velden zijn optioneel en worden uitsluitend gebruikt voor het "
+"persoonlijk maken van uw KMyMoney bestand."
+
+#: dialogs/rc.cpp:430
+msgid "New Investment wizard"
+msgstr "Wizard voor nieuwe beleggingen "
+
+#: dialogs/rc.cpp:431
+msgid "Investment Type"
+msgstr "Type belegging"
+
+#: dialogs/rc.cpp:432
+msgid "This wizard allows you to create a new investment."
+msgstr "Met deze wizard kunt u een nieuwe belegging aanmaken"
+
+#: dialogs/rc.cpp:433
+msgid ""
+"The first step in this process requires to select the type of investment. "
+"The following steps collect more details about the investment from you."
+msgstr ""
+"In de eerste stap dient u aan te geven welk type belegging het betreft. In "
+"de daaropvolgende stappen worden de overige details van uw belegging "
+"verzameld."
+
+#: dialogs/rc.cpp:434
+msgid "Type of investment"
+msgstr "Type belegging"
+
+#: dialogs/rc.cpp:438
+msgid "Investment details"
+msgstr "Beleggingsdetails"
+
+#: dialogs/rc.cpp:439
+msgid ""
+"Enter the details below and click <b>Next</b> to continue entering the "
+"online update details."
+msgstr ""
+"Voer onderstaande details in en klik <b>Volgende</b> om het invoeren van "
+"online update details te vervolgen."
+
+#: dialogs/rc.cpp:442 dialogs/rc.cpp:728
+msgid "Fraction"
+msgstr "Fractie"
+
+#: dialogs/rc.cpp:443
+msgid "Trading Currency"
+msgstr "Handelsvaluta"
+
+#: dialogs/rc.cpp:444
+msgid "Full name"
+msgstr "Volledige naam"
+
+#: dialogs/rc.cpp:445
+msgid "AMEX"
+msgstr "AMEX"
+
+#: dialogs/rc.cpp:446
+msgid "EUREX"
+msgstr "EUREX"
+
+#: dialogs/rc.cpp:447
+msgid "FUND"
+msgstr "FUND"
+
+#: dialogs/rc.cpp:448
+msgid "NASDAQ"
+msgstr "NASDAQ"
+
+#: dialogs/rc.cpp:449
+msgid "NYSE"
+msgstr "NYSE"
+
+#: dialogs/rc.cpp:450
+msgid "XETRA"
+msgstr "XETRA"
+
+#: dialogs/rc.cpp:451
+msgid "Trading symbol"
+msgstr "Handelssymbool"
+
+#: dialogs/rc.cpp:452
+msgid "Identification"
+msgstr "Identificatie"
+
+#: dialogs/rc.cpp:453
+msgid "Enter the ticker symbol (e.g. RHAT)."
+msgstr "Voer aandelen symbool in (b.v. RHAT)."
+
+#: dialogs/rc.cpp:454
+msgid "Enter the CUSIP/ISIN/WKN identification number here"
+msgstr "Voer het CUSIP/ISIN/WKN identificatienummer hier in"
+
+#: dialogs/rc.cpp:455
+msgid "Trading market"
+msgstr "Handelsmarkt"
+
+#: dialogs/rc.cpp:456
+msgid "Online Update"
+msgstr "Online Update"
+
+#: dialogs/rc.cpp:457
+msgid ""
+"Select an online source and click <b>Finish</b> to store the investment "
+"data. If you don't want to use online updates, just leave the data as is."
+msgstr ""
+"Kies een online bron en klik <b>Voltooien</b> om de beleggingsgegevens op te "
+"slaan. Als u geen online updates wilt gebruiken, laat de gegevens dan zoals "
+"ze nu zijn."
+
+#: dialogs/rc.cpp:458
+msgid "Use Finance::Quote"
+msgstr "Gebruik Financiën::Koers"
+
+#: dialogs/rc.cpp:460
+msgid "Factor"
+msgstr "Factor"
+
+#: dialogs/rc.cpp:461
+msgid "New Loan Wizard"
+msgstr "Nieuwe Lening wizard"
+
+#: dialogs/rc.cpp:462
+msgid "New Loan Account Wizard"
+msgstr "Nieuwe Lening wizard"
+
+#: dialogs/rc.cpp:463
+msgid ""
+"\n"
+"Welcome to the New Loan Account Wizard which will guide you through the "
+"creation of a new loan e.g. for your home, your car or any other loan that "
+"you pay or gain interest for.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Welkom bij de Nieuwe Lening wizard, welke u zal begeleiden bij het creëren "
+"van een lening voor bijv. uw huis, uw auto of een andere lening waarvoor u "
+"rente betaalt of ontvangt.\n"
+"\n"
+"Zorg er a.u.b. voor dat u de relevante informatie bij de hand hebt. "
+"Doorgaans staat deze informatie in uw contract of op een bankafschrift."
+
+#: dialogs/rc.cpp:464
+msgid "Edit Loan Account Wizard"
+msgstr "Bewerk Lening wizard"
+
+#: dialogs/rc.cpp:465
+msgid ""
+"\n"
+"Welcome to the Edit Loan Account Wizard. Please use this wizard to modify "
+"information about your loan account.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Welkom bij de wizard voor het bewerken van uw lening rekening. Gebruik deze "
+"wizard om gegevens voor uw lening bij te werken.\n"
+"\n"
+"Zorg ervoor dat u alle relevante informatie bij de hand heeft. Meestal vindt "
+"u de gevraagde informatie op uw contract of laatste bankafschrift."
+
+#: dialogs/rc.cpp:467
+msgid ""
+"\n"
+"In the first step, KMyMoney will ask you some general information about the "
+"loan account to be created."
+msgstr ""
+"\n"
+"In de eerste stap zal KMyMoney u wat algemene informatie vragen over de "
+"lening rekening die aangemaakt moet worden."
+
+#: dialogs/rc.cpp:468 dialogs/rc.cpp:522 dialogs/rc.cpp:610
+msgid "1. General Information"
+msgstr "1. Algemene Informatie"
+
+#: dialogs/rc.cpp:469
+msgid ""
+"\n"
+"2. Calculate Loan\n"
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"2. Bereken Lening\n"
+"\n"
+"3. Betalingen"
+
+#: dialogs/rc.cpp:470
+msgid "Edit selection"
+msgstr "Selectie bewerken"
+
+#: dialogs/rc.cpp:471
+msgid ""
+"\n"
+"Please select, which data of the loan you want to modify."
+msgstr ""
+"\n"
+"Kies a.u.b. welke gegevens van de lening u wilt wijzigen."
+
+#: dialogs/rc.cpp:472
+msgid "Modify the interest rate"
+msgstr "Wijzig het rentepercentage"
+
+#: dialogs/rc.cpp:473
+msgid "Modify additional fees"
+msgstr "Wijzig additionele kosten"
+
+#: dialogs/rc.cpp:474
+msgid "Modify other loan information"
+msgstr "Wijzig overige informatie over de lening"
+
+#: dialogs/rc.cpp:475
+msgid "Effective date"
+msgstr "Effectieve datum"
+
+#: dialogs/rc.cpp:478
+msgid "When should the changes become active?"
+msgstr "Wanneer moeten de wijzigingen actief worden?"
+
+#: dialogs/rc.cpp:479
+msgid "Lending or borrowing money"
+msgstr "Geld lenen of uitlenen"
+
+#: dialogs/rc.cpp:480
+msgid ""
+"\n"
+"Do you borrow or lend money?"
+msgstr ""
+"\n"
+"Wilt u geld lenen of uitlenen?"
+
+#: dialogs/rc.cpp:483
+msgid "Name of the loan"
+msgstr "Naam van de lening"
+
+#: dialogs/rc.cpp:484
+msgid ""
+"\n"
+"How do you want to call this loan? Examples for names are 'car loan', "
+"'school loan', 'home owner loan'."
+msgstr ""
+"\n"
+"Hoe wilt u deze lening noemen? Voorbeelden voor namen zijn 'auto lening', "
+"'doorlopend krediet', 'lening voor keuken' etc."
+
+#: dialogs/rc.cpp:486
+msgid "TextLabel6"
+msgstr "TextLabel6"
+
+#: dialogs/rc.cpp:487
+msgid "TextLabel7"
+msgstr "TextLabel7"
+
+#: dialogs/rc.cpp:488
+msgid "Type of interest"
+msgstr "Type rente"
+
+#: dialogs/rc.cpp:489
+msgid ""
+"\n"
+"Is the interest of this loan fixed over a period of time or is it adapted "
+"from time to time? If the interest rate changes during the amortization "
+"phase of the loan you should choose the option 'variable interest rate'."
+msgstr ""
+"\n"
+"Is de rente van deze lening vastgesteld voor een bepaalde tijd of wordt deze "
+"periodiek aangepast? Als het rentepercentage wijzigt gedurende de aflossing "
+"van de lening, dan moet u kiezen voor de optie 'variabel rentepercentage'."
+
+#: dialogs/rc.cpp:490
+msgid "Fixed interest rate"
+msgstr "Vast rentepercentage"
+
+#: dialogs/rc.cpp:491
+msgid "Variable interest rate"
+msgstr "Variabel rentepercentage"
+
+#: dialogs/rc.cpp:492
+msgid "Payments?"
+msgstr "Betalingen?"
+
+#: dialogs/rc.cpp:493
+msgid ""
+"\n"
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?"
+msgstr ""
+"\n"
+"Hebben er al betalingen plaatsgevonden voor deze lening, ongeacht of ze wel "
+"of niet in KMyMoney zijn ingevoerd?"
+
+#: dialogs/rc.cpp:494
+msgid "No, no payments were made yet."
+msgstr "Nee, er zijn nog geen betalingen gedaan."
+
+#: dialogs/rc.cpp:495
+msgid "Yes, payments were made."
+msgstr "Ja, er zijn betalingen gedaan."
+
+#: dialogs/rc.cpp:496
+msgid ""
+"Note: Payments made to obtain the loan (e.g. Dissagio) are not considered as "
+"payments in this context."
+msgstr ""
+"Opmerking: Betalingen om de lening te verkrijgen (bijv. Disagio) worden in "
+"deze context niet beschouwd als betalingen."
+
+#: dialogs/rc.cpp:497
+msgid "Recording payments?"
+msgstr "Betalingen opnemen?"
+
+#: dialogs/rc.cpp:498
+msgid ""
+"\n"
+"Do you want to record all payments of this loan with KMyMoney?"
+msgstr ""
+"\n"
+"Wilt u alle betalingen van deze leningen opnemen in KMyMoney?"
+
+#: dialogs/rc.cpp:499
+msgid "Yes, record all payments."
+msgstr "Ja, neem alle betalingen op."
+
+#: dialogs/rc.cpp:500
+msgid "No, only record payments since the beginning of this year."
+msgstr "Nee, neem alleen de betalingen op vanaf het begin van dit jaar."
+
+#: dialogs/rc.cpp:501
+msgid "Date of next interest change"
+msgstr "Datum van volgende rentewijziging"
+
+#: dialogs/rc.cpp:502
+msgid ""
+"\n"
+"Select the date when the interest rate for this loan will be modified and "
+"the frequency of the future changes."
+msgstr ""
+"\n"
+"Kies de datum wanneer het rentepercentage voor deze lening gewijzigd zal "
+"worden en de frequentie van toekomstige wijzigingen."
+
+#: dialogs/rc.cpp:503
+msgid "Next interest change on"
+msgstr "Volgende rentewijziging op"
+
+#: dialogs/rc.cpp:504
+msgid "Time until next change"
+msgstr "Tijd tot volgende wijziging"
+
+#: dialogs/rc.cpp:506 dialogs/rc.cpp:571
+msgid ""
+"\n"
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"\n"
+"Voer het bedrag in dat u betaald voor rente en aflossing of laat het veld "
+"leeg om het te berekenen."
+
+#: dialogs/rc.cpp:507
+msgid "Current amount"
+msgstr "Huidig bedrag"
+
+#: dialogs/rc.cpp:510
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the amount for principal and interest then enter "
+"it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"KMyMoney berekent ofwel het nieuwe rentepercentage of het bedrag voor "
+"aflossing en rente. Als u het bedrag voor aflossing en rente weet, voer het "
+"dan hier in.\n"
+"\n"
+"Als KMyMoney deze waarde voor u moet berekenen, laat het veld dan leeg."
+
+#: dialogs/rc.cpp:512 dialogs/rc.cpp:545
+msgid ""
+"\n"
+"Please enter the interest rate or leave the field empty to calculate it."
+msgstr ""
+"\n"
+"Vul het rentepercentage in of laat het veld leeg om het te berekenen."
+
+#: dialogs/rc.cpp:514
+msgid "Current rate"
+msgstr "Huidig percentage"
+
+#: dialogs/rc.cpp:516
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the interest rate then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"KMyMoney berekent het nieuwe rentepercentage of het bedrag voor aflossing en "
+"rente. Als u het rentepercentage weet, voer het dan hier in.\n"
+"\n"
+"Als KMyMoney deze waarde voor u moet berekenen, laat het veld dan leeg."
+
+#: dialogs/rc.cpp:517
+msgid "Date of first payment"
+msgstr "Datum van eerste betaling"
+
+#: dialogs/rc.cpp:520
+msgid "Calculate Loan"
+msgstr "Lening Berekenen"
+
+#: dialogs/rc.cpp:521
+msgid ""
+"\n"
+"You have successfully entered the general information about your loan. Next, "
+"KMyMoney needs some information about the calculation of the loan."
+msgstr ""
+"\n"
+"U heeft met succes de algemene informatie over uw lening ingevoerd. KMyMoney "
+"heeft nu informatie nodig over de berekeningsmethode van de lening."
+
+#: dialogs/rc.cpp:523 dialogs/rc.cpp:611
+msgid ""
+"\n"
+"2. Calculate Loan"
+msgstr ""
+"\n"
+"2. Lening Berekenen"
+
+#: dialogs/rc.cpp:524 dialogs/rc.cpp:612
+msgid ""
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"3. Betalingen"
+
+#: dialogs/rc.cpp:526
+msgid ""
+"\n"
+"How often will there be payments made to this loan?"
+msgstr ""
+"\n"
+"Hoe vaak zullen er betalingen worden gedaan voor deze lening?"
+
+#: dialogs/rc.cpp:527
+msgid "Interest calculation"
+msgstr "Berekening van de rente"
+
+#: dialogs/rc.cpp:528
+msgid ""
+"\n"
+"When does the actual interest rate get calculated?"
+msgstr ""
+"\n"
+"Wanneer wordt het werkelijke rentepercentage berekend?"
+
+#: dialogs/rc.cpp:529
+msgid "When the payment is received."
+msgstr "Wanneer de betaling is ontvangen."
+
+#: dialogs/rc.cpp:530
+msgid "When the payment is due."
+msgstr "Wanneer de betaling gedaan moet zijn."
+
+#: dialogs/rc.cpp:534 dialogs/rc.cpp:547 dialogs/rc.cpp:560 dialogs/rc.cpp:573
+#: dialogs/rc.cpp:586 dialogs/rc.cpp:598 dialogs/rc.cpp:679
+msgid "Loan amount:"
+msgstr "Bedrag van de lening:"
+
+#: dialogs/rc.cpp:535 dialogs/rc.cpp:548 dialogs/rc.cpp:561 dialogs/rc.cpp:574
+#: dialogs/rc.cpp:587 dialogs/rc.cpp:599 dialogs/rc.cpp:633 dialogs/rc.cpp:671
+msgid "Interest rate:"
+msgstr "Rentepercentage:"
+
+#: dialogs/rc.cpp:536 dialogs/rc.cpp:549 dialogs/rc.cpp:562 dialogs/rc.cpp:575
+#: dialogs/rc.cpp:588 dialogs/rc.cpp:600 dialogs/rc.cpp:669
+msgid "Term:"
+msgstr "Looptijd:"
+
+#: dialogs/rc.cpp:537 dialogs/rc.cpp:550 dialogs/rc.cpp:563 dialogs/rc.cpp:576
+#: dialogs/rc.cpp:589 dialogs/rc.cpp:601 dialogs/rc.cpp:622 dialogs/rc.cpp:630
+#: dialogs/rc.cpp:677
+msgid "Principal + Interest:"
+msgstr "Aflossing + rente:"
+
+#: dialogs/rc.cpp:538 dialogs/rc.cpp:551 dialogs/rc.cpp:564 dialogs/rc.cpp:577
+#: dialogs/rc.cpp:583 dialogs/rc.cpp:585 dialogs/rc.cpp:590 dialogs/rc.cpp:602
+msgid "Final amortization payment"
+msgstr "Laatste aflossing"
+
+#: dialogs/rc.cpp:557
+msgid "Duration"
+msgstr "Tijdsduur"
+
+#: dialogs/rc.cpp:558
+msgid ""
+"\n"
+"Please enter the term of this loan or leave the field empty to calculate it. "
+"The term is the time that is required to fully repay the loan. This time "
+"might be different from the time your loan contract is signed for."
+msgstr ""
+"\n"
+"Voer a.u.b. de looptijd voor deze lening in of laat het veld leeg om het te "
+"berekenen. De looptijd is de tijd die nodig is om de lening volledig af te "
+"betalen. Deze tijdsduur kan verschillen van de looptijd van het contract."
+
+#: dialogs/rc.cpp:584
+msgid ""
+"\n"
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"\n"
+"Voer a.u.b. het bedrag in van de laatste aflossing of laat het veld leeg om "
+"het te berekenen."
+
+#: dialogs/rc.cpp:596
+msgid "Calculation Overview"
+msgstr "Overzicht Berekening"
+
+#: dialogs/rc.cpp:597
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown in the overview below. You can "
+"accept these values by selecting \"Next\" or change them by choosing \"Back"
+"\" to return to the input field for the information you want to change."
+msgstr ""
+"\n"
+"KMyMoney heeft de lening berekend zoals getoond in het onderstaande "
+"overzicht. U kunt deze waarden accepteren door \"Volgende\" te kiezen of ze "
+"wijzigen door \"Terug\" te kiezen."
+
+#: dialogs/rc.cpp:609
+msgid ""
+"\n"
+"In the following steps, KMyMoney supports you in setting up categories and "
+"schedules for your loan payments."
+msgstr ""
+"\n"
+"In de volgende stappen helpt KMyMoney u bij het opstellen van rubrieken en "
+"periodieke transacties voor de aflossing van uw lening."
+
+#: dialogs/rc.cpp:614
+msgid ""
+"\n"
+"Please select the category you want to assign the interest payments to or "
+"create a new category."
+msgstr ""
+"\n"
+"Kies a.u.b. een rubriek waaraan u de rentebetalingen wilt toekennen of maak "
+"een nieuwe rubriek."
+
+#: dialogs/rc.cpp:615
+msgid "Additional Fees"
+msgstr "Additionele kosten"
+
+#: dialogs/rc.cpp:616
+msgid ""
+"\n"
+"If your regular payment contains any additional fees, click on the button "
+"\"Additional fees\" to enter them."
+msgstr ""
+"\n"
+"Als uw periodieke betalingen ook additionele kosten omvat, klik dan op de "
+"knop \"Additionele kosten\" om deze in te voeren."
+
+#: dialogs/rc.cpp:617
+msgid "= periodical payment:"
+msgstr "= periodieke betaling:"
+
+#: dialogs/rc.cpp:623
+msgid ""
+"If no additional fees are included in your periodical payment or you have "
+"entered all such fees, then click on \"Next\"."
+msgstr ""
+"Als u periodieke betalingen geen additionele kosten omvat of u heeft deze al "
+"ingevoerd klik dan op \"Volgende\"."
+
+#: dialogs/rc.cpp:625
+msgid ""
+"KMyMoney will create a schedule for this payment and reminds you whenever a "
+"payment must be made.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"KMyMoney zal een periodieke transactie maken voor deze betaling en u eraan "
+"herinneren als u een betaling moet doen.<p>\n"
+"Als u ervoor gekozen heeft om alle betalingen op te nemen, dan is voor deze "
+"datum al een waarde ingevoerd. Als u ervoor heeft gekozen om alleen de "
+"betalingen van dit jaar op te nemen, dan is de <b>Eerste geplande betaling</"
+"b> de datum van de eerste betaling die gemaakt is in dit jaar."
+
+#: dialogs/rc.cpp:626
+msgid "First payment due on:"
+msgstr "Eerste betaling gepland op:"
+
+#: dialogs/rc.cpp:627
+msgid "Make payment from/to:"
+msgstr "Doe betaling van/naar:"
+
+#: dialogs/rc.cpp:629
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown below. If you want to accept these "
+"values use the \"Finish\" button to update your account, otherwise use the "
+"\"Back\" button to modify your settings."
+msgstr ""
+"\n"
+"KMyMoney heeft de lening berekend zoals hieronder getoond. Als u deze "
+"waarden wilt accepteren, gebruikt u de knop \"Voltooien\" om uw rekening bij "
+"te werken, anders kunt u de knop \"Vorige\" gebruiken om uw instellingen te "
+"wijzigen."
+
+#: dialogs/rc.cpp:631
+msgid "Additional fees:"
+msgstr "Additionele kosten:"
+
+#: dialogs/rc.cpp:632
+msgid "Total payment:"
+msgstr "Totale betaling:"
+
+#: dialogs/rc.cpp:634
+msgid "Valid from:"
+msgstr "Geldig van:"
+
+#: dialogs/rc.cpp:635
+msgid "Affected payments:"
+msgstr "Betroffen betalingen:"
+
+#: dialogs/rc.cpp:645
+msgid "Press this to create a new asset account"
+msgstr "Klik hier om een vermogensrekening aan te maken"
+
+#: dialogs/rc.cpp:648
+msgid ""
+"\n"
+"This page summarizes the data you entered. If you need to modify anything, "
+"please use the \"Back\" button to go to respective page. Otherwise use the "
+"\"Finish\" button to create the account."
+msgstr ""
+"\n"
+"Deze pagina toont een samenvatting van de door u ingevoerde gegevens. Als u "
+"iets wilt wijzigen, gebruik dan de knop \"Vorige\" om naar de betreffende "
+"pagina te gaan. Zoniet, gebruik dan de knop \"Voltooien\" om de rekening aan "
+"te maken."
+
+#: dialogs/rc.cpp:650
+msgid "Payee:"
+msgstr "Relatie:"
+
+#: dialogs/rc.cpp:653
+msgid "First payment:"
+msgstr "Eerste betaling:"
+
+#: dialogs/rc.cpp:655
+msgid "Amount is:"
+msgstr "Bedrag is:"
+
+#: dialogs/rc.cpp:656
+msgid "Loan calculation"
+msgstr "Berekenen van de lening"
+
+#: dialogs/rc.cpp:660
+msgid "Periodic Payment:"
+msgstr "Periodieke Betaling:"
+
+#: dialogs/rc.cpp:661
+msgid "Additional Fees:"
+msgstr "Additionele kosten:"
+
+#: dialogs/rc.cpp:662
+msgid "Interest category:"
+msgstr "Rente rubriek:"
+
+#: dialogs/rc.cpp:663
+msgid "Payment from:"
+msgstr "Betaling van:"
+
+#: dialogs/rc.cpp:666
+msgid "Next due date:"
+msgstr "Volgende vervaldatum:"
+
+#: dialogs/rc.cpp:673
+msgid "Final Payment:"
+msgstr "Laatste Betaling:"
+
+#: dialogs/rc.cpp:675
+msgid "Interest is due:"
+msgstr "Rente moet betaald zijn op:"
+
+#: dialogs/rc.cpp:680
+msgid "Payment frequency:"
+msgstr "Betalingsfrequentie:"
+
+#: dialogs/rc.cpp:682
+msgid "Online Quote Configuration"
+msgstr "Online koersen configuratie"
+
+#: dialogs/rc.cpp:687
+msgid "Perl Location:"
+msgstr "Perl Locatie:"
+
+#: dialogs/rc.cpp:688
+msgid "Script:"
+msgstr "Script:"
+
+#: dialogs/rc.cpp:690
+msgid "Reassign payees"
+msgstr "Relaties opnieuw toewijzen"
+
+#: dialogs/rc.cpp:691
+msgid ""
+"The transactions associated with the selected payees need to be re-assigned "
+"to a different payee before the selected payees can be deleted. Please "
+"select a payee from the list below."
+msgstr ""
+"De transacties welke zijn gekoppeld aan de geselecteerde relatiemoeten aan "
+"een andere relatieworden toegewezen alvorens deze kan worden verwijderd. "
+"Selecteer een relatieuit onderstaande lijst."
+
+#: dialogs/rc.cpp:692
+msgid "Available payees:"
+msgstr "Beschikbare relaties:"
+
+#: dialogs/rc.cpp:693
+msgid "Assign deleted names to the above selected payee's matching list"
+msgstr "Ken verwijderde namen toe aan de bovengenoemde relaties."
+
+#: dialogs/rc.cpp:696
+msgid "PluginDlg"
+msgstr "PluginDlg"
+
+#: dialogs/rc.cpp:697
+msgid "PlugIn"
+msgstr "Invoegtoepassing"
+
+#: dialogs/rc.cpp:698 widgets/transaction.cpp:1071
+#: widgets/transaction.cpp:1658
+msgid "Status"
+msgstr "Status"
+
+#: dialogs/rc.cpp:699
+msgid "Feature"
+msgstr "Kenmerk"
+
+#: dialogs/rc.cpp:703
+msgid "Reconciliation Dialog"
+msgstr "Saldo Controle dialoog"
+
+#: dialogs/rc.cpp:704
+msgid ""
+"This dialog will assist in helping you to balance your account.\n"
+"\n"
+"Click on an appropriate transaction within one of the two list views to mark "
+"it as reconciled. To create a transaction or edit\n"
+"a transaction you can return to the register by clicking on the Edit "
+"Transactions button.\n"
+"\n"
+"Your account is balanced when the Difference is Zero. Click on the Finish "
+"button to save the reconciled transactions."
+msgstr ""
+"Deze dialoog assisteert u bij het controleren van uw rekeningsaldo.\n"
+"\n"
+"Klik op de juiste transactie om deze als gecontroleerd te markeren. Om een "
+"transactie alsnog aan te passen of aan te maken\n"
+"kunt u naar het kasboek gaan en op de Bewerk Transactie knop drukken.\n"
+"\n"
+"Uw huidige rekening is gecontroleerd als het Verschil 0,00 is. Klik op "
+"afsluiten als u gereed met met het controleren van de transacties."
+
+#: dialogs/rc.cpp:705
+msgid "Withdrawals"
+msgstr "Opnames"
+
+#: dialogs/rc.cpp:707 dialogs/rc.cpp:708 dialogs/rc.cpp:822
+msgid "$"
+msgstr "$"
+
+#: dialogs/rc.cpp:710
+msgid "Previous Balance:"
+msgstr "Vorig Saldo:"
+
+#: dialogs/rc.cpp:711 dialogs/rc.cpp:713 dialogs/rc.cpp:715 dialogs/rc.cpp:717
+#: dialogs/rc.cpp:820
+msgid "0"
+msgstr "0"
+
+#: dialogs/rc.cpp:712
+msgid "Ending Balance:"
+msgstr "Eindsaldo:"
+
+#: dialogs/rc.cpp:714
+msgid "Cleared Balance:"
+msgstr "Gecontroleerd Saldo:"
+
+#: dialogs/rc.cpp:716
+msgid "Difference:"
+msgstr "Verschil:"
+
+#: dialogs/rc.cpp:718
+msgid "Edit Transactions..."
+msgstr "Bewerk Transacties..."
+
+#: dialogs/rc.cpp:721
+msgid "Security List Editor"
+msgstr "Aandelen lijst editor"
+
+#: dialogs/rc.cpp:726
+msgid "Market"
+msgstr "Markt"
+
+#: dialogs/rc.cpp:729
+msgid "Cash Fraction"
+msgstr "Contanten deel"
+
+#: dialogs/rc.cpp:730
+msgid "Add..."
+msgstr "Toevoegen..."
+
+#: dialogs/rc.cpp:732 widgets/kmymoneypriceview.cpp:157
+msgid "Delete..."
+msgstr "Verwijderen..."
+
+#: dialogs/rc.cpp:733
+msgid "Show national currencies"
+msgstr "Toon nationale munteenheden"
+
+#: dialogs/rc.cpp:735
+msgid "KMyMoney - Select Database"
+msgstr "KMyMoney - Selecteer Database"
+
+#: dialogs/rc.cpp:736
+msgid "CAUTION!"
+msgstr "LET OP!"
+
+#: dialogs/rc.cpp:737
+msgid ""
+"<font color=\"#ff2727\">This software is still in an experimental stage, and "
+"there are still some known response time problems. Please be patient; we are "
+"working on them.\n"
+"As always, please make sure you have adequate backups of your data.</font>"
+msgstr ""
+"<font kleur=\"#ff2727\">Deze software is nog in ontwikkeling, er kunnen af "
+"en toe problemen optreden. Wij werken hard aan het oplossen van deze "
+"problemen. Zorg ervoor dat u altijd een goede reservekopie heeft van uw "
+"gegevens.</font>"
+
+#: dialogs/rc.cpp:738
+msgid "Database Type"
+msgstr "Database Type"
+
+#: dialogs/rc.cpp:739
+msgid "Database Name"
+msgstr "Database Naam"
+
+#: dialogs/rc.cpp:740
+msgid "Host Name"
+msgstr "Systeem Naam"
+
+#: dialogs/rc.cpp:741
+msgid "User Name"
+msgstr "Gebruikersnaam"
+
+#: dialogs/rc.cpp:743
+msgid "Preload &all data"
+msgstr "Laad &alle gegevens"
+
+#: dialogs/rc.cpp:745
+msgid "&Generate SQL"
+msgstr "&Maak SQL aan"
+
+#: dialogs/rc.cpp:747
+msgid "Ca&ncel"
+msgstr "A&nnuleer"
+
+#: dialogs/rc.cpp:762 widgets/rc.cpp:172
+msgid "Sort options"
+msgstr "Sorteer opties"
+
+#: dialogs/rc.cpp:763
+msgid "Use default"
+msgstr "Gebruik standaard"
+
+#: dialogs/rc.cpp:767
+msgid "Correct splits"
+msgstr "Corrigeer splitsing"
+
+#: dialogs/rc.cpp:769
+msgid "How do you want to proceed?"
+msgstr "Hoe wil u verder gaan?"
+
+#: dialogs/rc.cpp:770
+msgid "Continue to edit splits"
+msgstr "Doorgaan met Bewerk Splitsing"
+
+#: dialogs/rc.cpp:771
+#, c-format
+msgid "Change total amount of transaction to %1."
+msgstr "Totaal bedrag van transactie wijzigen naar %1."
+
+#: dialogs/rc.cpp:772
+msgid "Distribute difference of %1 among all splits."
+msgstr "Verdeel het verschil van %1 over alle splitsingen."
+
+#: dialogs/rc.cpp:773
+msgid "Leave %1 unassigned."
+msgstr "Laat %1 niet toegewezen."
+
+#: dialogs/rc.cpp:776
+msgid "Split transaction"
+msgstr "Splits Transactie"
+
+#: dialogs/rc.cpp:777
+msgid "<b>11,00<b>"
+msgstr "<b>11,00<b>"
+
+#: dialogs/rc.cpp:778
+msgid "<b>111,00<b>"
+msgstr "<b>111,00<b>"
+
+#: dialogs/rc.cpp:779
+msgid "Unassigned"
+msgstr "Niet toegewezen"
+
+#: dialogs/rc.cpp:780
+msgid "Sum of splits"
+msgstr "Som van splitsingen"
+
+#: dialogs/rc.cpp:781
+msgid "100,00"
+msgstr "100,00"
+
+#: dialogs/rc.cpp:782
+msgid "Transaction amount"
+msgstr "Transactie bedrag"
+
+#: dialogs/rc.cpp:783
+msgid "Merge"
+msgstr "&Mix"
+
+#: dialogs/rc.cpp:784
+msgid "Merges splits with the same category to one split"
+msgstr ""
+"Voegt gesplitste transacties uit dezelfde rubriek samen tot één gesplitste "
+"transactie."
+
+#: dialogs/rc.cpp:785
+msgid ""
+"In case you have multiple split entries to the same category and you like to "
+"keep them as a single split, press this button. The amount for identical "
+"categories will be added and stored in a single split for that category."
+msgstr ""
+"In het geval u meerdere gesplitste transacties heeft in dezelfde categorie "
+"die u separaat wilt behouden, druk dan op deze knop. Het totale bedrag voor "
+"de identieke categorien wordt dan opgeteld en in een gesplitste transactie "
+"voor die rubriek opgeslagen."
+
+#: dialogs/rc.cpp:786
+msgid "Clear &Zero"
+msgstr "Verwijder &Maak 0"
+
+#: dialogs/rc.cpp:787
+msgid "Removes all splits that have a value of zero."
+msgstr "Verwijder alle gesplitste transacties die een waarde van 0 hebben."
+
+#: dialogs/rc.cpp:791
+msgid "New price entry"
+msgstr "Invoer van nieuwe wisselkoers"
+
+#: dialogs/rc.cpp:799
+msgid "Void mark"
+msgstr "Ongeldigheids markering"
+
+#: dialogs/rc.cpp:800
+msgid "Opening Balance text"
+msgstr "Naam beginsaldo"
+
+#: dialogs/rc.cpp:801
+msgid "Type field text"
+msgstr "Veldtype naam"
+
+#: dialogs/rc.cpp:802
+msgid "Account delimiter"
+msgstr "Scheidingsteken rekening"
+
+#: dialogs/rc.cpp:804
+msgid "Attempt to match similar transactions"
+msgstr "Proberen identieke transacties te vinden"
+
+#: dialogs/rc.cpp:806 dialogs/rc.cpp:808
+msgid "The format of the dates in the QIF file."
+msgstr "Het formaat van de datums in het QIF-bestand."
+
+#: dialogs/rc.cpp:809 dialogs/rc.cpp:811
+msgid ""
+"If a QIF file contains date entries with years represented with two digits "
+"then either an apostrophe or a slash may be used to delimit the year in the "
+"dates for certain centuries. This enables 1905 to be distinguished from "
+"2005. Specify here which range of years will have year delimited by an "
+"apostrophe (eg. for Quicken this is usually 1900-1949)."
+msgstr ""
+"Als een QIF bestand datums bevat waarin jaartallen met twee cijfers worden "
+"weergegeven, dan kunt u een apostrof of een slash gebruiken om het jaartal "
+"in de datums toe te kennen aan een bepaalde eeuw. Dit stelt u in staat om "
+"1905 te onderscheiden van 2005. Geef hier op welk bereik van jaren is "
+"aangegeven met een apostrof (bijv. voor Quicken is dit doorgaans 1900-1949)."
+
+#: dialogs/rc.cpp:810
+msgid "Apostrophe Handling"
+msgstr "Omgang met Apostrof"
+
+#: dialogs/rc.cpp:812
+msgid "Amounts"
+msgstr "Bedragen"
+
+#: dialogs/rc.cpp:813
+msgid "Field"
+msgstr "Veld"
+
+#: dialogs/rc.cpp:814
+msgid "QIF-Record"
+msgstr "QIF-Record"
+
+#: dialogs/rc.cpp:815 dialogs/rc.cpp:833
+msgid "Decimal Symbol"
+msgstr "Scheidingsteken Decimalen"
+
+#: dialogs/rc.cpp:816
+msgid "Thousand Delimiter"
+msgstr "Scheidingsteken Duizendtallen"
+
+#: dialogs/rc.cpp:817
+msgid "SortColumnInvisible"
+msgstr "SorteerKolomOnzichtbaar"
+
+#: dialogs/rc.cpp:819
+msgid "T"
+msgstr "T"
+
+#: dialogs/rc.cpp:821
+msgid "Split-Value"
+msgstr "Splitsings Waarde"
+
+#: dialogs/rc.cpp:824
+msgid "Commission"
+msgstr "Vergoeding"
+
+#: dialogs/rc.cpp:825
+msgid "O"
+msgstr "O"
+
+#: dialogs/rc.cpp:826
+msgid "2"
+msgstr "2"
+
+#: dialogs/rc.cpp:828
+msgid "I"
+msgstr "I"
+
+#: dialogs/rc.cpp:829
+msgid "3"
+msgstr "3"
+
+#: dialogs/rc.cpp:831
+msgid "Q"
+msgstr "Q"
+
+#: dialogs/rc.cpp:832
+msgid "4"
+msgstr "4"
+
+#: dialogs/rc.cpp:834
+msgid "Thousands Separator"
+msgstr "Scheidingsteken Duizendtallen"
+
+#: dialogs/rc.cpp:836
+msgid "Output filter location"
+msgstr "Uitgaande filter locatie"
+
+#: dialogs/rc.cpp:837
+msgid "Input filter file type"
+msgstr "Invoerfilter bestandstype"
+
+#: dialogs/rc.cpp:838
+msgid "*.qif"
+msgstr "*.qif"
+
+#: dialogs/rc.cpp:839
+msgid "Input filter location"
+msgstr "Lokatie van invoerfilter"
+
+#: dialogs/rc.cpp:843
+msgid "Rename"
+msgstr "Hernoemen"
+
+#: dialogs/kselecttransactionsdlg.cpp:44
+msgid "Select Transaction"
+msgstr "Selecteer Transactie"
+
+#: dialogs/kselecttransactionsdlg.cpp:45
+msgid ""
+"Select a transaction and press the OK button or use Cancel to select none."
+msgstr ""
+"Selecteer een transactie en druk op de OK knop, of kies Annuleer om niets te "
+"selecteren."
+
+#: dialogs/knewinvestmentwizard.cpp:62
+msgid "Investment detail wizard"
+msgstr "Wizard voor beleggingsdetails"
+
+#: dialogs/knewinvestmentwizard.cpp:82
+msgid "Security detail wizard"
+msgstr "Aandelen details wizard"
+
+#: dialogs/knewaccountdlg.cpp:121 dialogs/knewinvestmentwizard.cpp:109
+msgid ""
+"_: default price mode\n"
+"<default>"
+msgstr "<standaard>"
+
+#: dialogs/knewaccountdlg.cpp:122 dialogs/knewinvestmentwizard.cpp:110
+msgid "Price per share"
+msgstr "Koers per aandeel"
+
+#: dialogs/knewaccountdlg.cpp:123 dialogs/knewinvestmentwizard.cpp:111
+msgid "Total for all shares"
+msgstr "Totaal van alle aandelen"
+
+#: dialogs/knewinvestmentwizard.cpp:129
+msgid "This wizard allows you to modify the selected investment."
+msgstr "Deze wizard helpt u bij het aanpassen van de geselecteerde belegging."
+
+#: dialogs/knewinvestmentwizard.cpp:132
+msgid "This wizard allows you to modify the selected security."
+msgstr "Deze wizard helpt u bij het aanpassen van het geselecteerde aandeel."
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid ""
+"The selected symbol is already on file. Do you want to reuse the existing "
+"security?"
+msgstr ""
+"Het geselecteerde symbool bestaat al. Wilt u desondanks dit symbool hier "
+"gebruiken?"
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid "Security found"
+msgstr "Aandeel gevonden"
+
+#: dialogs/knewinvestmentwizard.cpp:309
+msgid "Unable to create all objects for the investment"
+msgstr "Kan niet alle objecten aanmaken voor deze belegging"
+
+#: dialogs/keditequityentrydlg.cpp:78
+msgid "Change the price information of the selected entry."
+msgstr "De koers van het geselecteerde item wijzigen."
+
+#: dialogs/kaccountselectdlg.cpp:64 widgets/kmymoneybriefschedule.cpp:59
+msgid "&Skip"
+msgstr "&Overslaan"
+
+#: dialogs/kaccountselectdlg.cpp:66 widgets/kmymoneybriefschedule.cpp:61
+msgid "Skip this transaction"
+msgstr "Deze transactie overslaan"
+
+#: dialogs/kaccountselectdlg.cpp:67
+msgid ""
+"Use this to skip importing this transaction and proceed with the next one."
+msgstr ""
+"Gebruik dit om deze transactie over te slaan en door te gaan met de volgende."
+
+#: dialogs/kaccountselectdlg.cpp:72
+msgid "Create a new account/category"
+msgstr "Een nieuwe rekening/rubriek aanmaken"
+
+#: dialogs/kaccountselectdlg.cpp:73
+msgid "Use this to add a new account/category to the file"
+msgstr ""
+"Gebruik dit om een nieuwe rekening/rubriek toe te voegen aan het bestand"
+
+#: dialogs/kaccountselectdlg.cpp:77
+msgid "&Abort"
+msgstr "&Afbreken"
+
+#: dialogs/kaccountselectdlg.cpp:79
+msgid "Abort the import operation and dismiss all changes"
+msgstr "De importbewerking afbreken en alle wijzigingen verwerpen"
+
+#: dialogs/kaccountselectdlg.cpp:80
+msgid ""
+"Use this to abort the import. Your financial data will be in the state "
+"before you started the QIF import."
+msgstr ""
+"Gebruik dit om de import af te breken. Uw financiële gegevens zullen worden "
+"hersteld naar de staat waarin ze waren voordat u de QIF import gestart hebt."
+
+#: dialogs/knewaccountdlg.cpp:110
+msgid "Is a sub account"
+msgstr "Is een subrekening"
+
+#: dialogs/knewaccountdlg.cpp:184
+msgid "VAT account"
+msgstr "BTW Rekening"
+
+#: dialogs/knewaccountdlg.cpp:474
+msgid ""
+"You have not specified a name.\n"
+"Please fill in this field."
+msgstr ""
+"U heeft geen naam opgegeven.\n"
+"Vul a.u.b. dit veld in."
+
+#: dialogs/knewaccountdlg.cpp:482
+msgid "Please select a parent account."
+msgstr "Selecteer een moederrekening."
+
+#: dialogs/knewaccountdlg.cpp:489 dialogs/knewaccountdlg.cpp:1029
+msgid "<No Institution>"
+msgstr "<Geen financiële instelling>"
+
+#: dialogs/knewaccountdlg.cpp:552
+msgid ""
+"An account named <b>%1</b> already exists. You cannot create a second "
+"account with the same name."
+msgstr ""
+"Er bestaat al een rekening met deze naam <b>%1</b>. U kunt geen tweede "
+"rekening aanmaken met dezelfde naam."
+
+#: dialogs/knewaccountdlg.cpp:567
+msgid ""
+"A category named <b>%1</b> already exists. You cannot create a second "
+"category with the same name."
+msgstr ""
+"Er bestaat al een rubriek met deze naam <b>%1</b>. U kunt geen tweede "
+"rubriek aanmaken met dezelfde naam."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid ""
+"You have selected to suppress the display of unused categories in the "
+"KMyMoney configuration dialog. The category you just created will therefore "
+"only be shown if it is used. Otherwise, it will be hidden in the accounts/"
+"categories view."
+msgstr ""
+"U heeft ervoor gekozen om de weergave van ongebruikte rubrieken te "
+"onderdrukken in de KMyMoney configuratie dialoog. De rubriek die u zojuist "
+"heeft aangemaakt zal daarom alleen getoond worden als deze gebruikt wordt. "
+"Anders zal hij verborgen blijven in de rekeningen/rubrieken weergave."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid "Hidden categories"
+msgstr "Verborgen rubrieken"
+
+#: dialogs/knewaccountdlg.cpp:927 dialogs/knewaccountdlg.cpp:979
+#, c-format
+msgid "Is a sub account of %1"
+msgstr "Is een subrubriek van %1"
+
+#: dialogs/knewaccountdlg.cpp:1082
+msgid "Cannot add institution"
+msgstr "Kan financiële instelling niet toevoegen"
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid ""
+"This dialog does not allow to create new payees. Please pick a payee from "
+"the list."
+msgstr ""
+"Deze dialoog is niet bedoeld voor het aanmaken van nieuwe relaties. Kies een "
+"relatie uit de lijst."
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid "Payee creation"
+msgstr "Aanmaken van een relatie"
+
+#: dialogs/kimportdlg.cpp:69
+msgid "Use this to start the import operation"
+msgstr "Gebruik dit om het importeren te starten"
+
+#: dialogs/kimportdlg.cpp:110
+msgid ""
+"%1|Import files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Importeer bestanden\n"
+"%2|Alle bestanden (*.*)"
+
+#: dialogs/kimportdlg.cpp:111
+msgid "Import File..."
+msgstr "Importeer bestand..."
+
+#: dialogs/knewloanwizard.cpp:124
+msgid "Create a new category"
+msgstr "Een nieuwe rubriek aanmaken"
+
+#: dialogs/knewloanwizard.cpp:125
+msgid "Use this to open the new account editor"
+msgstr "Gebruik dit om de Nieuwe Rekening editor te starten"
+
+#: dialogs/knewloanwizard.cpp:129
+msgid "&Additional fees..."
+msgstr "&Additionele kosten..."
+
+#: dialogs/knewloanwizard.cpp:131
+msgid "Enter additional fees"
+msgstr "Voer additionele kosten in"
+
+#: dialogs/knewloanwizard.cpp:132
+msgid ""
+"Use this to add any additional fees other than principal and interest "
+"contained in your periodical payments."
+msgstr ""
+"Gebruik dit om additionele kosten (anders dan aflossing en rente) welke zijn "
+"opgenomen in uw periodieke betalingen in te voeren."
+
+#: dialogs/knewloanwizard.cpp:139
+msgid ""
+"Use this to create a new account to which the initial payment should be made"
+msgstr ""
+"Gebruik dit om een nieuwe rekening aan te maken waarop de eerste betaling "
+"moet plaatsvinden"
+
+#: dialogs/knewloanwizard.cpp:208
+msgid "To whom do you make payments?"
+msgstr "Aan wie doet u betalingen?"
+
+#: dialogs/knewloanwizard.cpp:209
+msgid "Payments to"
+msgstr "Betalingen aan"
+
+#: dialogs/knewloanwizard.cpp:214
+msgid "From whom do you expect payments?"
+msgstr "Van wie verwacht u betalingen?"
+
+#: dialogs/knewloanwizard.cpp:215
+msgid "Payments from"
+msgstr "Betalingen van"
+
+#: dialogs/knewloanwizard.cpp:233
+msgid "Please enter the date, the first payment for this loan was/is due."
+msgstr ""
+"Voer de datum in waarop de eerste betaling van de lening moet plaatsvinden/"
+"vervalt."
+
+#: dialogs/knewloanwizard.cpp:235
+msgid ""
+"Note: Consult the loan contract for details of the first due date. Keep in "
+"mind, that the first due date usually differs from the date the contract was "
+"signed"
+msgstr ""
+"Opm: Raadpleeg het contract voor deze lening om vast te stellen wanneer de "
+"eerste betaling moet plaatsvinden/vervalt. Dit is meestal een andere datum "
+"dan de dag waarop het contract is afgesloten."
+
+#: dialogs/knewloanwizard.cpp:240
+msgid ""
+"Please enter the original loan amount in the field below or leave it empty "
+"to be calculated."
+msgstr ""
+"Voer a.u.b. het originele bedrag van de lening in of laat dit veld het leeg "
+"om het te laten berekenen."
+
+#: dialogs/knewloanwizard.cpp:248
+msgid ""
+"Please enter the date, the first payment for this loan was/is due this year."
+msgstr ""
+"Voer de datum in waarop de eerste betaling dit jaar moest plaatsvinden/"
+"verviel."
+
+#: dialogs/knewloanwizard.cpp:250
+msgid ""
+"Note: You can easily figure out the date of the first payment if you consult "
+"the last statement of last year."
+msgstr ""
+"Opm: U kunt deze datum snel vaststellen door te kijken op de laatste "
+"bankafschrift van het afgelopen jaar."
+
+#: dialogs/knewloanwizard.cpp:254
+msgid ""
+"Please enter the remaining loan amount of last years final statement in the "
+"field below. You should not leave this field empty."
+msgstr ""
+"Voer het openstaande bedrag van de lening in zoals dit is vermeld op de "
+"laatste bankafschrift van het afgelopen jaar. U moet dit veld niet leeg "
+"laten."
+
+#: dialogs/knewloanwizard.cpp:311 dialogs/knewloanwizard.cpp:326
+#: dialogs/knewloanwizard.cpp:341 dialogs/knewloanwizard.cpp:357
+#: dialogs/knewloanwizard.cpp:373
+msgid "calculate"
+msgstr "berekenen"
+
+#: dialogs/knewloanwizard.cpp:417
+msgid "borrowed"
+msgstr "geleend"
+
+#: dialogs/knewloanwizard.cpp:419
+msgid "lend"
+msgstr "uitgeleend"
+
+#: dialogs/knewloanwizard.cpp:423
+msgid "not assigned"
+msgstr "niet toegekend"
+
+#: dialogs/knewloanwizard.cpp:430
+msgid "on reception"
+msgstr "bij ontvangst"
+
+#: dialogs/knewloanwizard.cpp:432
+msgid "on due date"
+msgstr "op vervaldatum"
+
+#: dialogs/knewloanwizard.cpp:471
+msgid ""
+"The loan wizard is unable to calculate two different values for your loan at "
+"the same time. Please enter a value for the %1 on this page or backup to the "
+"page where the current value to be calculated is defined and fill in a "
+"value."
+msgstr ""
+"De lening wizard kan niet tegelijkertijd twee verschillende waarden "
+"berekenen voor uw lening. Voer a.u.b. een waarde in voor de %1 op deze "
+"pagina of ga terug naar de pagina waar de huidige te berekenen waarde is "
+"gedefinieerd en vul daar een waarde in."
+
+#: dialogs/knewloanwizard.cpp:500
+msgid ""
+"You selected, that payments have already been made towards this loan. This "
+"requires you to enter the loan amount exactly as found on your last "
+"statement."
+msgstr ""
+"U heeft aangegeven dat er al betalingen zijn gedaan voor deze lening. Dit "
+"vereist dat u het bedrag van de lening precies zo invoert als u het vindt op "
+"uw laatste afschrift."
+
+#: dialogs/knewloanwizard.cpp:513
+msgid "interest rate"
+msgstr "rentepercentage"
+
+#: dialogs/knewloanwizard.cpp:522
+msgid "term"
+msgstr "looptijd"
+
+#: dialogs/knewloanwizard.cpp:532
+msgid "principal and interest"
+msgstr "Aflossing en rente"
+
+#: dialogs/knewloanwizard.cpp:743
+#, c-format
+msgid ""
+"The number of payments has been decremented and the final payment has been "
+"modified to %1."
+msgstr ""
+"Het aantal betalingen is verminderd en de laatste betaling is gewijzigd naar "
+"%1."
+
+#: dialogs/knewloanwizard.cpp:751 dialogs/knewloanwizard.cpp:771
+#, c-format
+msgid "The final payment has been modified to %1."
+msgstr "De laatste betaling is gewijzigd naar %1."
+
+#: dialogs/knewloanwizard.cpp:802
+msgid "KMyMoney has calculated a final payment of %1 for this loan."
+msgstr "KMyMoney heeft een laatste betaling van %1 berekend voor deze lening."
+
+#: dialogs/knewloanwizard.cpp:817
+msgid ""
+"You have entered mis-matching information. Please backup to the appropriate "
+"page and update your figures or leave one value empty to let KMyMoney "
+"calculate it for you"
+msgstr ""
+"U heeft tegenstrijdige informatie ingevoerd. Ga terug naar de juiste pagina, "
+"werk de getallen bij of laat een waarde leeg om deze vervolgens door "
+"KMyMoney te laten berekenen"
+
+#: dialogs/kfindtransactiondlg.cpp:230
+msgid ""
+"Warning: Filtering by Category will exclude all transfers from the results."
+msgstr ""
+"Waarschuwing: Filteren op rubriek laat geen transacties zien in het "
+"eindresultaat."
+
+#: dialogs/kfindtransactiondlg.cpp:239
+msgid "(None)"
+msgstr "(Geen)"
+
+#: dialogs/kfindtransactiondlg.cpp:241
+msgid "Current selections: "
+msgstr "Huidige selecties: "
+
+#: dialogs/kfindtransactiondlg.cpp:716
+msgid "Found %1 matching transactions (D %2 / P %3 = %4)"
+msgstr "% 1 identieke transacties gevonden (D %2 / P %3 = %4)"
+
+#: dialogs/kfindtransactiondlg.cpp:719
+msgid "Found %1 matching transactions"
+msgstr "%1 Identieke transacties gevonden"
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "The institution name field is empty. Please enter the name."
+msgstr ""
+"De naam van de financiële instelling is niet ingevuld. Voer deze a.u.b. in."
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "Adding New Institution"
+msgstr "Toevoegen van nieuwe financiële instelling"
+
+#: dialogs/kcsvprogressdlg.cpp:69
+msgid "C&lose"
+msgstr "S&luiten"
+
+#: dialogs/kcsvprogressdlg.cpp:247
+msgid " of "
+msgstr " van "
+
+#: widgets/kmymoneypriceview.cpp:126
+msgid "Commodity"
+msgstr "Symbool"
+
+#: widgets/kmymoneypriceview.cpp:130
+msgid "Source"
+msgstr "Bron"
+
+#: widgets/kmymoneypriceview.cpp:143
+msgid "Price Options"
+msgstr "Koers opties"
+
+#: widgets/kmymoneypriceview.cpp:153
+msgid "Online Price Update..."
+msgstr "Online Koers Update..."
+
+#: widgets/kmymoneycombo.cpp:472 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+msgid "From"
+msgstr "Van"
+
+#: widgets/transaction.cpp:668
+msgid "Transaction is missing a category assignment."
+msgstr "Transactie is niet aan een rubriek toegewezen."
+
+#: widgets/transaction.cpp:671
+msgid "The transaction has a missing assignment of <b>%1</b>."
+msgstr "De transactie mist een toewijzing van <b>%1</b>."
+
+#: widgets/transaction.cpp:874
+msgid "Sell"
+msgstr "Verkoop"
+
+#: widgets/transaction.cpp:876
+msgid "Buy"
+msgstr "Koop"
+
+#: widgets/kmymoneycombo.cpp:520 widgets/transaction.cpp:879
+#: widgets/transaction.cpp:1447
+msgid "Dividend"
+msgstr "Dividend"
+
+#: widgets/kmymoneycombo.cpp:518 widgets/transaction.cpp:881
+#: widgets/transaction.cpp:1453
+msgid "Yield"
+msgstr "Rendement"
+
+#: widgets/transaction.cpp:886 widgets/transaction.cpp:1473
+msgid "Activity"
+msgstr "Activiteit"
+
+#: widgets/transaction.cpp:887
+msgid "Investment transaction"
+msgstr "Beleggings transactie"
+
+#: widgets/transaction.cpp:1021 widgets/transaction.cpp:1114
+#: widgets/transaction.cpp:1165
+msgid "*** UNASSIGNED ***"
+msgstr "*** Niet toegewezen ***"
+
+#: widgets/kmymoneycombo.cpp:517 widgets/transaction.cpp:1435
+msgid "Add shares"
+msgstr "Aandelen toevoegen"
+
+#: widgets/kmymoneycombo.cpp:516 widgets/transaction.cpp:1438
+msgid "Remove shares"
+msgstr "Verwijder aandelen"
+
+#: widgets/kmymoneycombo.cpp:522 widgets/transaction.cpp:1441
+msgid "Buy shares"
+msgstr "Koop aandelen"
+
+#: widgets/kmymoneycombo.cpp:521 widgets/transaction.cpp:1444
+msgid "Sell shares"
+msgstr "Verkoop aandelen"
+
+#: widgets/transaction.cpp:1450
+msgid "Reinvest Dividend"
+msgstr "Dividend Herbeleggen"
+
+#: widgets/kmymoneycombo.cpp:515 widgets/transaction.cpp:1456
+msgid "Split shares"
+msgstr "Splits aandelen"
+
+#: widgets/transaction.cpp:1515
+msgid "Ratio"
+msgstr "Ratio"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:241
+msgid "%1 Bills."
+msgstr "%1 Rekeningen."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:257
+msgid "%1 Deposits."
+msgstr "%1 Stortingen."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:273
+msgid "%1 Transfers."
+msgstr "%1 Overboekingen."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:355
+msgid ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+msgstr ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:57
+#: widgets/kmymoneyaccounttreeforecast.cpp:84
+msgid "Current"
+msgstr "Huidig"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:72
+#: widgets/kmymoneyaccounttreeforecast.cpp:93
+msgid "Total variation"
+msgstr "Totale variantie"
+
+#: widgets/stdtransactionmatched.cpp:130
+msgid ""
+"KMyMoney has matched a downloaded transaction with a manually entered one "
+"(result above)"
+msgstr ""
+"KMyMoney heeft een transactie gevonden die identiek is aan een handmatig "
+"ingevoerde transactie (zie resultaat hierboven)"
+
+#: widgets/stdtransactionmatched.cpp:138
+msgid "Bank entry:"
+msgstr "Bank invoer:"
+
+#: widgets/stdtransactionmatched.cpp:166
+msgid "Your entry:"
+msgstr "Uw invoer:"
+
+#: widgets/kbudgetvalues.cpp:187
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a monthly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+"U hebt budget waarden ingevoerd die zijn gebaseerd op andere basisgegevens "
+"wat resulteert in een maandelijks budget van <b>%1</b>. Wilt u deze waarden "
+"gebruiken om het maandelijks budget op te stellen?"
+
+#: widgets/kbudgetvalues.cpp:187 widgets/kbudgetvalues.cpp:206
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"_: Auto assignment (caption)\n"
+"Auto assignment"
+msgstr "Automatisch toewijzen"
+
+#: widgets/kbudgetvalues.cpp:206
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a yearly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+"U hebt budget waarden ingevoerd gebaseerd op andere basisgegevens wat "
+"resulteert in een jaarlijks budget van <b>%1</b>. Wilt u deze waarden "
+"gebruiken om het jaarlijks budget op te stellen?"
+
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"You have entered budget values using a different base which would result in "
+"an individual monthly budget of <b>%1</b>. Should this value be used to fill "
+"the monthly budgets?"
+msgstr ""
+"U hebt budget waarden ingevoerd gebaseerd op andere basisgegevens wat "
+"resulteert in een individueel maandelijks budget van <b>%1</b>. Wilt u deze "
+"waarden gebruiken om de maandelijks budgetten op te stellen?"
+
+#: widgets/kmymoneybriefschedule.cpp:62
+msgid "Use this button to skip this transaction"
+msgstr "Gebruik deze knop om deze transactie over te slaan"
+
+#: widgets/kmymoneybriefschedule.cpp:67
+msgid "Record this transaction into the register"
+msgstr "Sla deze transactie op in het kasboek"
+
+#: widgets/kmymoneybriefschedule.cpp:68
+msgid "Use this button to record this transaction"
+msgstr "Gebruik deze knop om deze transactie op te slaan"
+
+#: widgets/kmymoneybriefschedule.cpp:96
+msgid "%1 of %2"
+msgstr "%1 van %2"
+
+#: widgets/kmymoneybriefschedule.cpp:109
+msgid "Payment on %1 for %2 with %3 transactions remaining occuring %4."
+msgstr "Betaling op %1 van %2 met %3 transacties resterend %4."
+
+#: widgets/kmymoneybriefschedule.cpp:115
+msgid "Payment on %1 for %2 occuring %4."
+msgstr "Betaling op %1 voor %2 treedt op op %4."
+
+#: widgets/kmymoneybriefschedule.cpp:136
+msgid "%1 days overdue (%2 occurences)."
+msgstr "%1 dagen over tijd (komt %2 voor)."
+
+#: widgets/register.cpp:55
+msgid "Post date"
+msgstr "Plaatsings datum"
+
+#: widgets/register.cpp:56
+msgid "Date entered"
+msgstr "Ingevoerde datum"
+
+#: widgets/register.cpp:60
+msgid "Entry order"
+msgstr "Volgorde van invoer"
+
+#: widgets/register.cpp:63
+msgid "Reconcile state"
+msgstr "Controle status"
+
+#: widgets/register.cpp:440
+msgid ""
+"_: Deposits onto account\n"
+"Deposits"
+msgstr "Stortingen"
+
+#: widgets/register.cpp:442
+msgid ""
+"_: Payments towards credit card\n"
+"Payments"
+msgstr "Betalingen"
+
+#: widgets/register.cpp:446
+msgid ""
+"_: Payments made from account\n"
+"Payments"
+msgstr "Betalingen"
+
+#: widgets/register.cpp:448
+msgid ""
+"_: Payments made with credit card\n"
+"Charges"
+msgstr "Kosten"
+
+#: widgets/register.cpp:736
+msgid ""
+"_: Payment made from account\n"
+"Payment"
+msgstr "Betaling"
+
+#: widgets/register.cpp:737
+msgid ""
+"_: Deposit into account\n"
+"Deposit"
+msgstr "Storting"
+
+#: widgets/register.cpp:813
+msgid ""
+"_: Payment made with credit card\n"
+"Charge"
+msgstr "Kosten"
+
+#: widgets/register.cpp:814
+msgid ""
+"_: Payment towards credit card\n"
+"Payment"
+msgstr "Betaling"
+
+#: widgets/register.cpp:818 widgets/register.cpp:824
+msgid ""
+"_: Decrease of asset/liability value\n"
+"Decrease"
+msgstr "Verlaag"
+
+#: widgets/register.cpp:819 widgets/register.cpp:823
+msgid ""
+"_: Increase of asset/liability value\n"
+"Increase"
+msgstr "Verhoog"
+
+#: widgets/register.cpp:2280
+msgid "Prior transactions possibly filtered"
+msgstr "Voorgaand transacties zijn mogelijk gefilterd"
+
+#: widgets/register.cpp:2284
+msgid "Last reconciliation"
+msgstr "Datum laatste keer sluitend gemaakt van de rekening"
+
+#: widgets/register.cpp:2291
+#, c-format
+msgid "Online Statement Balance: %1"
+msgstr "Online Bankafschrift: %1"
+
+#: widgets/register.cpp:2295
+msgid "This year"
+msgstr "Dit jaar"
+
+#: widgets/kmymoneycombo.cpp:674 widgets/register.cpp:2296
+msgid "Last month"
+msgstr "Vorige maand"
+
+#: widgets/register.cpp:2297
+msgid "This month"
+msgstr "Deze maand"
+
+#: widgets/register.cpp:2298
+msgid "Last week"
+msgstr "Vorige week"
+
+#: widgets/register.cpp:2299
+msgid "This week"
+msgstr "Deze week"
+
+#: widgets/register.cpp:2300
+msgid "Yesterday"
+msgstr "Gisteren"
+
+#: widgets/kmymoneycombo.cpp:666 widgets/register.cpp:2301
+msgid "Today"
+msgstr "Vandaag"
+
+#: widgets/register.cpp:2302 widgets/register.cpp:2307
+msgid "Future transactions"
+msgstr "Toekomstige transacties"
+
+#: widgets/register.cpp:2303
+msgid "Next week"
+msgstr "Volgende week"
+
+#: widgets/kmymoneycalendar.cpp:131 widgets/register.cpp:2304
+msgid "Next month"
+msgstr "Volgende maand"
+
+#: widgets/kmymoneycombo.cpp:670 widgets/register.cpp:2315
+msgid "Current fiscal year"
+msgstr "Huidig fiscaal jaar"
+
+#: widgets/register.cpp:2316
+msgid "Previous fiscal year"
+msgstr "Vorig fiscaal jaar"
+
+#: widgets/register.cpp:2317
+msgid "Next fiscal year"
+msgstr "Volgende fiscale jaar"
+
+#: widgets/register.cpp:2349
+msgid ""
+"_: Unknown payee\n"
+"Unknown"
+msgstr "Onbekend"
+
+#: widgets/register.cpp:2368
+msgid ""
+"_: Unknown category\n"
+"Unknown"
+msgstr "Onbekend"
+
+#: widgets/register.cpp:2387
+msgid ""
+"_: Unknown security\n"
+"Unknown"
+msgstr "Onbekend"
+
+#: widgets/klistviewsearchline.cpp:249
+msgid "Search Columns"
+msgstr "Zoek in kolommen"
+
+#: widgets/klistviewsearchline.cpp:251
+msgid "All Visible Columns"
+msgstr "Alle zichtbare kolommen"
+
+#: widgets/klistviewsearchline.cpp:266
+msgid ""
+"_: Column number %1\n"
+"Column No. %1"
+msgstr "Kolom Nr. %1"
+
+#: widgets/klistviewsearchline.cpp:461 widgets/registersearchline.cpp:286
+msgid "S&earch:"
+msgstr "Z&oeken:"
+
+#: widgets/kmymoneyaccountselector.cpp:110
+#: widgets/kmymoneyaccountselector.cpp:371
+msgid "Income categories"
+msgstr "Inkomsten rubrieken"
+
+#: widgets/kmymoneyaccountselector.cpp:349
+#: widgets/kmymoneyaccountselector.cpp:350
+msgid "Favorites"
+msgstr "Favorieten"
+
+#: widgets/kmymoneyaccountselector.cpp:357
+msgid "Asset accounts"
+msgstr "Vermogensrekeningen"
+
+#: widgets/kmymoneyaccountselector.cpp:364
+msgid "Liability accounts"
+msgstr "Schulden rekeningen"
+
+#: widgets/kmymoneyaccountselector.cpp:381
+msgid "Expense categories"
+msgstr "Uitgaven rubrieken"
+
+#: widgets/kmymoneyaccountselector.cpp:391
+msgid "Equity accounts"
+msgstr "Aandelen rekeningen"
+
+#: widgets/kmymoneyaccounttreebase.cpp:120
+msgid "Total Balance"
+msgstr "Totaal Saldo"
+
+#: widgets/kmymoneyaccounttreebase.cpp:124
+msgid "Total Value"
+msgstr "Totale Waarde"
+
+#: widgets/registersearchline.cpp:75
+msgid ""
+"_: label for status combo\n"
+"Stat&us"
+msgstr "Stat&us"
+
+#: widgets/registersearchline.cpp:79
+msgid "Any status"
+msgstr "Willekeurige status"
+
+#: widgets/registersearchline.cpp:80
+msgid "Imported"
+msgstr "Geïmporteerd"
+
+#: widgets/registersearchline.cpp:81
+msgid "Matched"
+msgstr "Identiek"
+
+#: widgets/registersearchline.cpp:82
+msgid "Erroneous"
+msgstr "Foutief"
+
+#: widgets/registersearchline.cpp:83
+msgid "Not marked"
+msgstr "Niet gemarkeerd"
+
+#: widgets/kmymoneyaccounttree.cpp:54
+msgid ""
+"_: Column heading for category in tax report\n"
+"Tax"
+msgstr "Belasting"
+
+#: widgets/kmymoneyaccounttree.cpp:58
+msgid ""
+"_: Column heading for VAT category\n"
+"VAT"
+msgstr "BTW"
+
+#: widgets/kmymoneywizard.cpp:101
+msgid "Continue with next page"
+msgstr "Ga door met de volgende pagina"
+
+#: widgets/kmymoneywizard.cpp:103
+msgid "Finish wizard"
+msgstr "Beëindig wizard"
+
+#: widgets/kmymoneywizard.cpp:121
+msgid "&Back"
+msgstr "&Terug"
+
+#: widgets/kmymoneywizard.cpp:122
+msgid "&Next"
+msgstr "&Volgende"
+
+#: widgets/kmymoneywizard.cpp:123
+msgid "&Finish"
+msgstr "&Voltooien"
+
+#: widgets/kmymoneywizard.cpp:274
+msgid "Step %1 of %2"
+msgstr "Stap %1 van %2"
+
+#: widgets/kmymoneydateinput.cpp:235
+msgid ""
+"_: Enter todays date into date input widget\n"
+"T"
+msgstr "T"
+
+#: widgets/transactionform.cpp:302
+msgid "&Deposit"
+msgstr "&Storting"
+
+#: widgets/transactionform.cpp:304 widgets/transactionform.cpp:313
+#: widgets/transactionform.cpp:323 widgets/transactionform.cpp:333
+msgid "&Transfer"
+msgstr "&Overboeking"
+
+#: widgets/transactionform.cpp:306
+msgid "&Withdrawal"
+msgstr "&Opname"
+
+#: widgets/transactionform.cpp:311
+msgid "&Payment"
+msgstr " &Betaling"
+
+#: widgets/transactionform.cpp:315
+msgid "&Charge"
+msgstr "&Factureren"
+
+#: widgets/transactionform.cpp:321 widgets/transactionform.cpp:335
+msgid "&Decrease"
+msgstr "&Verminderen"
+
+#: widgets/transactionform.cpp:325 widgets/transactionform.cpp:331
+msgid "&Increase"
+msgstr "&Ophogen"
+
+#: widgets/kmymoneyscheduledcalendar.cpp:42
+msgid "Select Schedules"
+msgstr "Selecteer transactie type(n)"
+
+#: widgets/kmymoneycalendar.cpp:108
+msgid "Select Style"
+msgstr "Selecteer periode"
+
+#: widgets/kmymoneycalendar.cpp:128
+msgid "Choose Style"
+msgstr "Kies Stijl"
+
+#: widgets/kmymoneycalendar.cpp:129
+msgid "Next year"
+msgstr "Volgend jaar"
+
+#: widgets/kmymoneycalendar.cpp:130
+msgid "Previous year"
+msgstr "Vorig jaar"
+
+#: widgets/kmymoneycalendar.cpp:132
+msgid "Previous month"
+msgstr "Vorige maand"
+
+#: widgets/kmymoneycalendar.cpp:133
+msgid "Select a week"
+msgstr "Selecteer een week"
+
+#: widgets/kmymoneycalendar.cpp:134
+msgid "Select a month"
+msgstr "Selecteer een maand"
+
+#: widgets/kmymoneycalendar.cpp:135
+msgid "Select a year"
+msgstr "Selecteer een jaar"
+
+#: widgets/kmymoneycalendar.cpp:249
+msgid "Week XX"
+msgstr "Week XX"
+
+#: widgets/kmymoneycalendar.cpp:264 widgets/kmymoneycalendar.cpp:300
+#, c-format
+msgid "Week %1"
+msgstr "Week %1"
+
+#: widgets/rc.cpp:1
+msgid "Account Types"
+msgstr "Rekening Types"
+
+#: widgets/rc.cpp:3
+msgid "Detailed description"
+msgstr "Gedetailleerde omschrijving"
+
+#: widgets/rc.cpp:18
+msgid "Period"
+msgstr "Periode"
+
+#: widgets/rc.cpp:21
+msgid "Individual"
+msgstr "Individueel"
+
+#: widgets/rc.cpp:23
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Acces to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>Recovery encryption</i> group is only accessible, if the necessary "
+"key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is "
+"found."
+msgstr ""
+"Op deze pagina kunt u de parameters instellen voor het versleutelen van uw "
+"<b>KMyMoney</b> database gebaseerd op <b>GPG</b>.<p>\n"
+"Toegang tot deze opties is uitgesloten als <b>GPG</b> niet aanwezig is op uw "
+"systeem. In dat geval is het belangrijk vast te stellen of <b>GPG</b> goed "
+"functioneert voor de huidige gebruiker.<p>\n"
+"De <i>Herstel versleuteling</i> groep is uitsluitend toegankelijk, als de "
+"juiste sleutel voor <b>kmymoney-recover@users.sourceforge.net</b> met id "
+"0x8AFDDC8E is gevonden."
+
+#: widgets/rc.cpp:26
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading <i>0x</i>."
+msgstr ""
+"Voer de sleutel in die u wilt gebruiken voor het versleutelen van de "
+"gegevens. Dit mag zowel een E-Mail adres zijn als een hexadecimale sleutel "
+"id. Gebruikt u een hex sleutel id vergeet dan niet de voorafgaande <i>0x</i>."
+
+#: widgets/rc.cpp:27
+msgid "User ID"
+msgstr "Gebruikers ID"
+
+#: widgets/rc.cpp:29
+msgid "Recovery encryption"
+msgstr "Herstel versleuteling"
+
+#: widgets/rc.cpp:30
+msgid "Also encrypt with kmymoney-recover key"
+msgstr "Versleutel ook met de kMyMoney herstelsleutel"
+
+#: widgets/rc.cpp:32
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out."
+msgstr ""
+"U kunt specificeren of u de gegevens ook wilt versleutelen met de KMyMoney "
+"herstelsleutel. Alleen de KMyMoney ontwikkelaars zijn in het bezit van de "
+"bijbehorende privé sleutel om versleutelde gegevens weer terug te lezen.<p>\n"
+"\n"
+"Op deze wijze is het alsnog mogelijk bij verlies van uw eigen sleutel de "
+"gegevens toch nog te lezen. Als u deze optie activeert, dan kunnen de "
+"KMyMoney ontwikkelaars de gegevens ontsleutelen en deze in een leesbaar "
+"formaat aan u opleveren. U dient wel eerst een aantal gedetailleerde vragen "
+"te beantwoorden over uw opgeslagen gegevens voordat we de informatie "
+"verzenden."
+
+#: widgets/rc.cpp:51
+msgid "PriceInfo"
+msgstr "Koers informatie"
+
+#: widgets/rc.cpp:52
+msgid "Report Tab"
+msgstr "Rapportage Tab"
+
+#: widgets/rc.cpp:53
+msgid "<p>On this tab, you set the basic properties of this report.</p>"
+msgstr ""
+"<p>Op dit tabblad moet u de standaard instellingen van het rapport "
+"vastleggen.</p>"
+
+#: widgets/rc.cpp:54
+msgid "Report Name"
+msgstr "Rapport naam"
+
+#: widgets/rc.cpp:55
+msgid "<p>Choose a name for this report.</p>"
+msgstr "<p>Kies een naam voor dit rapport.</p>"
+
+#: widgets/rc.cpp:57
+msgid "<p>Enter a comment to help you remember the details of this report.</p>"
+msgstr ""
+"<p>Voeg commentaar toe om informatie over dit rapport vast te leggen.</p>"
+
+#: widgets/rc.cpp:58
+msgid "Convert values to base currency"
+msgstr "Converteer waardes naar de standaard munteenheid"
+
+#: widgets/rc.cpp:59
+msgid ""
+"_: Convert 'em!!\n"
+"<p>Select this option to convert all values in the report to your base "
+"currency.</p><p>Leave it unchecked if you'd like to see values in their "
+"original currency.</p><p>If currencies are not converted, then subtotals "
+"will not be shown.</p>"
+msgstr ""
+"<p>Selecteer deze optie om alle waarden in dit rapport om te zetten naar de "
+"standaard munteenheid.</p><p>Zet deze optie uit als u de waarden wilt zien "
+"in de originele munteenheid.</p><p>Als de munteenheid niet worden "
+"geconverteerd, dan worden geen subtotalen berekend.</p>"
+
+#: widgets/rc.cpp:60
+msgid "Mark as a favorite report"
+msgstr "Markeer als favoriet rapport"
+
+#: widgets/rc.cpp:61
+msgid ""
+"<p>Select this option to notate this report as one of your favorites.</"
+"p><p>All your favorite reports are grouped in one place on the report list "
+"for easy access.</p>"
+msgstr ""
+"<p>Selecteer deze optie om dit rapport als eén van uw favorieten aan te "
+"merken. </p><p>Al uw favoriete rapporten worden gegroepeerd op één plaats in "
+"de lijst van rapporten zodat u ze eenvoudig kunt vinden.</p>"
+
+#: widgets/rc.cpp:62 widgets/rc.cpp:88
+msgid "Rows/Columns Tab"
+msgstr "Rijen/kolommen tabblad"
+
+#: widgets/rc.cpp:63 widgets/rc.cpp:89
+msgid ""
+"<p>On this tab, you configure how you'd like the rows and columns to be "
+"selected and organized.</p>"
+msgstr ""
+"<p>Op dit tabblad kunt u aangeven hoe u rijen en kolommen wilt selecteren en "
+"organiseren.</p>"
+
+#: widgets/rc.cpp:69 widgets/rc.cpp:81
+msgid ""
+"<p>Choose what kind of accounts to display as the rows of this report.</p>"
+msgstr ""
+"<p>Kies wel type rekeningen moeten worden getoond als rijen in dit rapport.</"
+"p>"
+
+#: widgets/rc.cpp:71
+msgid "Columns"
+msgstr "Kolommen"
+
+#: widgets/rc.cpp:75
+msgid "Bi-Monthly"
+msgstr "Tweemaandelijks"
+
+#: widgets/rc.cpp:78
+msgid "<p>Choose how large of a time period each column should encompass</p>"
+msgstr "<p>Kies de tijdsperiode die iedere kolom moet omspannen</p>"
+
+#: widgets/rc.cpp:79
+msgid "Income & Expenses"
+msgstr "Inkomsten & Uitgaven"
+
+#: widgets/rc.cpp:80
+msgid "Assets & Liabilities"
+msgstr "Bezittingen & Schulden"
+
+#: widgets/rc.cpp:82
+msgid "Rows"
+msgstr "Rijen"
+
+#: widgets/rc.cpp:83
+msgid "Show totals column"
+msgstr "Toon totalen kolom"
+
+#: widgets/rc.cpp:84
+msgid "Average days"
+msgstr "Gemiddelde aantal dagen"
+
+#: widgets/rc.cpp:85
+msgid "Include scheduled transactions"
+msgstr "Inclusief periodieke transacties"
+
+#: widgets/rc.cpp:86
+msgid "Include transfers"
+msgstr "Inclusief overboekingen"
+
+#: widgets/rc.cpp:87
+msgid "Include unused accounts/categories"
+msgstr "Toon ook niet gebruikte rekeningen/rubrieken"
+
+#: widgets/rc.cpp:90
+msgid "Organize by:"
+msgstr "Organiseer als:"
+
+#: widgets/rc.cpp:92
+msgid "Top Categories"
+msgstr "Hoofd rubrieken"
+
+#: widgets/rc.cpp:95
+msgid "Top Accounts"
+msgstr "Hoofdrekeningen"
+
+#: widgets/rc.cpp:98
+msgid "<p>Choose how to group the transactions in this report</p>"
+msgstr "<p>Kies hoe u transacties wilt groeperen in dit rapport.</p>"
+
+#: widgets/rc.cpp:99
+msgid "Show Columns"
+msgstr "Toon kolommen"
+
+#: widgets/rc.cpp:100
+msgid ""
+"<p>Choose which columns should be shown in the report.</p><p>The date and "
+"transaction amount are always shown.</p>"
+msgstr ""
+"<p>Kies hoe de kolommen moeten worden getoond in dit rapport.</p><p>De datum "
+"en het bedrag van transacties worden altijd getoond.</p>"
+
+#: widgets/rc.cpp:102
+msgid "<p>Select this option to show the Memo column</p>"
+msgstr "<p>Selecteer deze optie om de Memo kolom te tonen.</p>"
+
+#: widgets/rc.cpp:104
+msgid "<p>Select this option to show the Shares column for investments</p>"
+msgstr "<p>Selecteer deze optie om de Aandelen kolom te tonen.</p>"
+
+#: widgets/rc.cpp:106
+msgid "<p>Select this option to show the Price column for investments</p>"
+msgstr ""
+"<p>Selecteer deze optie om de Koers voor een Investering kolom te tonen.</p>"
+
+#: widgets/rc.cpp:108
+msgid "<p>Select this option to show the Reconciled column</p>"
+msgstr "<p>Selecteer deze optie om de Transactie Controle kolom te tonen.</p>"
+
+#: widgets/rc.cpp:110
+msgid "<p>Select this option to show the Account column</p>"
+msgstr "<p>Selecteer deze optie om de Rekening kolom te tonen.</p>"
+
+#: widgets/rc.cpp:112
+msgid "<p>Select this option to show the Number column</p>"
+msgstr "<p>Selecteer deze optie om de Nummer kolom te tonen.</p>"
+
+#: widgets/rc.cpp:114
+msgid "<p>Select this option to show the Payee column</p>"
+msgstr "<p>Selecteer deze optie om de Relatiekolom te tonen.</p>"
+
+#: widgets/rc.cpp:116
+msgid "<p>Select this option to show the Category column</p>"
+msgstr "<p>Selecteer deze optie om de rubrieken kolom te tonen.</p>"
+
+#: widgets/rc.cpp:118
+msgid "<p>Select this option to show the Action column</p>"
+msgstr "<p>Selecteer deze optie om de Actie kolom te tonen.</p>"
+
+#: widgets/rc.cpp:120
+msgid "<p>Select this option to show the Running balance column</p>"
+msgstr "<p>Selecteer deze optie om de \"Lopend Saldo\" kolom te tonen.</p>"
+
+#: widgets/rc.cpp:121
+msgid "Include only Loan accounts"
+msgstr "Uitsluitend leningen"
+
+#: widgets/rc.cpp:122
+msgid "Include only Investment accounts"
+msgstr "Alleen beleggingsrekeningen meenemen"
+
+#: widgets/rc.cpp:123 widgets/rc.cpp:127
+msgid ""
+"<p>Check this box to include only those categories which have been marked to "
+"\"Include on Tax Reports\"</p>"
+msgstr ""
+"<p>Vink dit aan om alléén die rubrieken mee te nemen die zijn gemarkeerd met "
+"\"Opnemen in Belasting rapport\"</p>"
+
+#: widgets/rc.cpp:124
+msgid "Hide Split Transaction Details"
+msgstr "Verberg details van gesplitste transactie"
+
+#: widgets/rc.cpp:125
+msgid ""
+"Do not display the individual transactions that make up a split transaction"
+msgstr ""
+"Laat niet de individuele transacties zien die in deze gesplitste transactie "
+"zijn opgenomen"
+
+#: widgets/rc.cpp:126
+msgid "Include only Tax categories"
+msgstr "Alleen Belasting rubrieken tonen"
+
+#: widgets/rc.cpp:128
+msgid "Chart Tab"
+msgstr "Tabblad Grafiek"
+
+#: widgets/rc.cpp:129
+msgid "<p>On this tab, you configure the chart drawn forthis report.</p>"
+msgstr "<p>Op dit tabblad kunt u de grafiek voor dit rapport configureren.</p>"
+
+#: widgets/rc.cpp:130
+msgid "Chart Type"
+msgstr "Grafiek Type"
+
+#: widgets/rc.cpp:131
+msgid "<p>Select what form you would like the chart to be drawn as.</p>"
+msgstr ""
+"<p>Selecteer welk formulier u wilt gebruiken als basis voor de te tekenen "
+"grafiek.</p>"
+
+#: widgets/rc.cpp:132
+msgid "Line"
+msgstr "Regel"
+
+#: widgets/rc.cpp:133
+msgid "Bar"
+msgstr "Balk"
+
+#: widgets/rc.cpp:134
+msgid "Stacked Bar"
+msgstr "Gestapelde Balk"
+
+#: widgets/rc.cpp:135
+msgid "Pie"
+msgstr "Taart"
+
+#: widgets/rc.cpp:136
+msgid "Ring"
+msgstr "Cirkel"
+
+#: widgets/rc.cpp:137
+msgid "Show grid lines"
+msgstr "Toon rasterlijnen"
+
+#: widgets/rc.cpp:138
+msgid ""
+"<p>Select this option to show horizontal and vertical grid lines on the "
+"chart.</p>"
+msgstr ""
+"<p>Selecteer deze optie om zowel horizontale als verticale lijnen te tonen "
+"in de grafiek.</p>"
+
+#: widgets/rc.cpp:139
+msgid "Draw values on chart"
+msgstr "Zet waarden op de grafiek"
+
+#: widgets/rc.cpp:140
+msgid ""
+"<p>Select this option to draw the numeric values for data points next to "
+"their plot location.</p>"
+msgstr ""
+"<p>Selecteer deze optie om numerieke waardes weer te geven direct naast hun "
+"locatie op de grafiek.</p>"
+
+#: widgets/rc.cpp:141
+msgid "Show as chart by default"
+msgstr "Laat standaard als grafiek zien"
+
+#: widgets/rc.cpp:142
+msgid ""
+"<p>Select this option to cause the report to be shown as a chart when you "
+"first open the report. Otherwise, it will come up as a text report.</p>"
+msgstr ""
+"<p>Selecteer deze optie om het rapport als grafiek te tonen als u dit "
+"rapport voor het eerst opent. Anders wordt deze als tekst rapport getoond.</"
+"p>"
+
+#: widgets/rc.cpp:143
+msgid "Line width"
+msgstr "Lijndikte"
+
+#: widgets/rc.cpp:144
+msgid "<p>Select what width should be used to draw the line on the chart</p>"
+msgstr "<p>Selecteer welke lijndikte moet worden gebruikt in de grafiek</p>"
+
+#: widgets/rc.cpp:145
+msgid "ReportControl"
+msgstr "RapportControle"
+
+#: widgets/rc.cpp:149
+msgid "Configure this report"
+msgstr "Configureer dit rapport"
+
+#: widgets/rc.cpp:151
+msgid "Create a new report based on this one"
+msgstr "Creëer een nieuw rapport gebaseerd op deze"
+
+#: widgets/rc.cpp:153
+msgid "Copy this report to the clipboard"
+msgstr "Kopiëer dit rapport naar het klembord"
+
+#: widgets/rc.cpp:155
+msgid "Export this report as an HTML or CSV file"
+msgstr "Exporteer dit rapport als een HTML of CSV bestand"
+
+#: widgets/rc.cpp:157
+msgid "Permanently delete this report"
+msgstr "Verwijder dit rapport"
+
+#: widgets/rc.cpp:159
+msgid "Close this window"
+msgstr "Sluit dit venster"
+
+#: widgets/rc.cpp:162
+msgid "n of n"
+msgstr "n van n"
+
+#: widgets/rc.cpp:166
+msgid "Account:"
+msgstr "Rekening:"
+
+#: widgets/rc.cpp:168
+msgid "Enter..."
+msgstr "Invoeren..."
+
+#: widgets/rc.cpp:171
+msgid "TransactionSortOptionDecl"
+msgstr "TransactionSortOptionDecl"
+
+#: widgets/rc.cpp:173
+msgid "Sort order"
+msgstr "Sorteer volgorde"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Sunday\n"
+"Sun"
+msgstr "Zon"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Saturday\n"
+"Sat"
+msgstr "Zat"
+
+#: widgets/kmymoneydatetbl.cpp:171 widgets/kmymoneydatetbl.cpp:178
+msgid "Week %1 for year %2."
+msgstr "Week %1 voor jaar %2."
+
+#: widgets/kmymoneycombo.cpp:417
+msgid "ATM"
+msgstr "Pinautomaat"
+
+#: widgets/kmymoneycombo.cpp:418
+msgid "Withdrawal"
+msgstr "Opname"
+
+#: widgets/kmymoneycombo.cpp:421
+msgid "Cheque"
+msgstr "Cheque"
+
+#: widgets/kmymoneycombo.cpp:469
+msgid ""
+"_: Activity for expense categories\n"
+"Paid"
+msgstr ""
+"_: Activity for expense categories\n"
+"Betaald"
+
+#: widgets/kmymoneycombo.cpp:470
+msgid ""
+"_: Activity for income categories\n"
+"Received"
+msgstr ""
+"_: Activity for income categories\n"
+"Ontvangen"
+
+#: widgets/kmymoneycombo.cpp:519
+msgid "Reinvest dividend"
+msgstr "Dividend Herbeleggen"
+
+#: widgets/kmymoneycombo.cpp:664
+msgid "All dates"
+msgstr "Alle datums"
+
+#: widgets/kmymoneycombo.cpp:665
+msgid "As of today"
+msgstr "Vanaf vandaag"
+
+#: widgets/kmymoneycombo.cpp:667
+msgid "Current month"
+msgstr "Huidige maand"
+
+#: widgets/kmymoneycombo.cpp:668
+msgid "Current quarter"
+msgstr "Huidig kwartaal"
+
+#: widgets/kmymoneycombo.cpp:669
+msgid "Current year"
+msgstr "Huidig jaar"
+
+#: widgets/kmymoneycombo.cpp:671
+msgid "Month to date"
+msgstr "Maand tot nu"
+
+#: widgets/kmymoneycombo.cpp:672
+msgid "Year to date"
+msgstr "Jaar tot nu"
+
+#: widgets/kmymoneycombo.cpp:673
+msgid "Year to month"
+msgstr "Jaar van maand"
+
+#: widgets/kmymoneycombo.cpp:675
+msgid "Last year"
+msgstr "Afgelopen jaar"
+
+#: widgets/kmymoneycombo.cpp:676
+msgid "Last fiscal year"
+msgstr "Afgelopen fiscaal jaar"
+
+#: widgets/kmymoneycombo.cpp:677
+msgid "Last 7 days"
+msgstr "Laatste 7 dagen"
+
+#: widgets/kmymoneycombo.cpp:678
+msgid "Last 30 days"
+msgstr "Laatste 30 dagen"
+
+#: widgets/kmymoneycombo.cpp:679
+msgid "Last 3 months"
+msgstr "Laatste 3 maanden"
+
+#: widgets/kmymoneycombo.cpp:680
+msgid "Last quarter"
+msgstr "Laatste kwartaal"
+
+#: widgets/kmymoneycombo.cpp:681
+msgid "Last 6 months"
+msgstr "Laatste 6 maanden"
+
+#: widgets/kmymoneycombo.cpp:682
+msgid "Last 11 months"
+msgstr "Laatste 11 maanden"
+
+#: widgets/kmymoneycombo.cpp:683
+msgid "Last 12 months"
+msgstr "Laatste 12 maanden"
+
+#: widgets/kmymoneycombo.cpp:684
+msgid "Next 7 days"
+msgstr "Komende 7 dagen"
+
+#: widgets/kmymoneycombo.cpp:685
+msgid "Next 30 days"
+msgstr "Komende 30 dagen"
+
+#: widgets/kmymoneycombo.cpp:686
+msgid "Next 3 months"
+msgstr "Komende 3 maanden"
+
+#: widgets/kmymoneycombo.cpp:687
+msgid "Next quarter"
+msgstr "Volgende kwartaal"
+
+#: widgets/kmymoneycombo.cpp:688
+msgid "Next 6 months"
+msgstr "Komende 6 maanden"
+
+#: widgets/kmymoneycombo.cpp:689
+msgid "Next 12 months"
+msgstr "Komende 12 maanden"
+
+#: widgets/kmymoneycombo.cpp:690
+msgid "Last 3 months to next 3 months"
+msgstr "Afgelopen 3 maanden t/m volgende 3 maanden"
+
+#: widgets/kmymoneycombo.cpp:691
+msgid "User defined"
+msgstr "Door de gebruiker bepaald"
+
+#~ msgid "Reset"
+#~ msgstr "Herstel"
diff --git a/po/pl.po b/po/pl.po
new file mode 100644
index 0000000..1524ce6
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,15372 @@
+# translation of pl.po to polish
+# This file is put in the public domain.
+#
+# Robert Gomulka <rgom@o2.pl>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: pl\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-25 19:04+0200\n"
+"PO-Revision-Date: 2007-02-21 21:57+0100\n"
+"Last-Translator: Robert Gomulka <rgom@o2.pl>\n"
+"Language-Team: polish <pl@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: wizards/wizardpages/rc.cpp:1
+msgid ""
+"Select groups of accounts that correspond to the ways that you will use "
+"KMyMoney. Each group you select will cause several accounts and categories "
+"to be created. Select the groups that are relevant to you. You can always "
+"create additional accounts manually later."
+msgstr ""
+
+#: wizards/wizardpages/rc.cpp:2
+msgid ""
+"<p>KMyMoney supports multiple currencies, nevertheless one of them will be "
+"used as your base currency. The base currency is used as default for new "
+"accounts and reports. Please select the base currency from the following "
+"list."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:71 dialogs/rc.cpp:399 dialogs/rc.cpp:485
+#: dialogs/rc.cpp:724 dialogs/settings/rc.cpp:108 reports/listtable.cpp:226
+#: views/kinvestmentview.cpp:71 views/kpayeesview.cpp:351 views/rc.cpp:13
+#: widgets/rc.cpp:5 widgets/rc.cpp:34
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1599
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1629
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1673
+#: wizards/wizardpages/rc.cpp:3
+msgid "Name"
+msgstr "Nazwa"
+
+#: wizards/wizardpages/rc.cpp:4
+msgid "ISO Code"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:69 dialogs/kequitypriceupdatedlg.cpp:70
+#: dialogs/rc.cpp:71 dialogs/rc.cpp:725 dialogs/settings/rc.cpp:112
+#: views/kinvestmentview.cpp:72 widgets/rc.cpp:37 wizards/wizardpages/rc.cpp:5
+msgid "Symbol"
+msgstr "Symbol"
+
+#: wizards/wizardpages/rc.cpp:6
+#, fuzzy
+msgid ""
+"<p>Use the fields below to enter some information about yourself.</p>\n"
+"\n"
+"<p>All information is optional and only used to personalize your KMyMoney "
+"file.</p>"
+msgstr ""
+"Użyj tego okna, żeby dodać informacje osobiste o sobie.\n"
+"\n"
+"Wszystkie informacje są opcjonalne i używane do spersonalizowania\n"
+"Twojego pliku KMyMoney."
+
+#: dialogs/rc.cpp:425 wizards/newuserwizard/rc.cpp:27
+#: wizards/wizardpages/rc.cpp:7
+msgid "Town:"
+msgstr "Miasto:"
+
+#: dialogs/rc.cpp:420 wizards/newuserwizard/rc.cpp:22
+#: wizards/wizardpages/rc.cpp:8
+msgid "County/State:"
+msgstr "Województwo:"
+
+#: dialogs/rc.cpp:391 dialogs/rc.cpp:421 wizards/newuserwizard/rc.cpp:23
+#: wizards/wizardpages/rc.cpp:9
+msgid "Street:"
+msgstr "Ulica:"
+
+#: dialogs/rc.cpp:422 wizards/newuserwizard/rc.cpp:24
+#: wizards/wizardpages/rc.cpp:10
+msgid "Email:"
+msgstr "E-mail:"
+
+#: dialogs/rc.cpp:424 wizards/newuserwizard/rc.cpp:26
+#: wizards/wizardpages/rc.cpp:11
+msgid "Telephone:"
+msgstr "Telefon:"
+
+#: dialogs/rc.cpp:423 wizards/newuserwizard/rc.cpp:25
+#: wizards/wizardpages/rc.cpp:12
+msgid "Your name:"
+msgstr "Twoje imię:"
+
+#: dialogs/rc.cpp:427 wizards/newuserwizard/rc.cpp:29
+#: wizards/wizardpages/rc.cpp:13
+msgid "Load from Addressbook"
+msgstr "Wczytaj z książki adresowej"
+
+#: dialogs/rc.cpp:392 dialogs/rc.cpp:426 views/rc.cpp:68
+#: wizards/wizardpages/rc.cpp:14
+msgid "Postal Code:"
+msgstr "Kod pocztowy:"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:82
+msgid "KMyMoney New Account Setup"
+msgstr ""
+
+#: dialogs/rc.cpp:360 dialogs/rc.cpp:361 reports/listtable.cpp:230
+#: wizards/newaccountwizard/knewaccountwizard.cpp:83
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1616
+#: wizards/newaccountwizard/rc.cpp:61
+msgid "Institution"
+msgstr "Instytucja"
+
+#: dialogs/investactivities.cpp:198 dialogs/investactivities.cpp:286
+#: dialogs/investactivities.cpp:367 dialogs/kfindtransactiondlg.cpp:181
+#: dialogs/rc.cpp:139 dialogs/rc.cpp:192 dialogs/rc.cpp:207
+#: dialogs/transactioneditor.cpp:734 reports/listtable.cpp:201
+#: reports/pivottable.cpp:1336 reports/pivottable.cpp:1586
+#: views/kforecastview.cpp:393 views/kgloballedgerview.cpp:175
+#: views/khomeview.cpp:418 views/khomeview.cpp:491 views/khomeview.cpp:525
+#: views/khomeview.cpp:764 views/khomeview.cpp:967 views/khomeview.cpp:1437
+#: views/kscheduledview.cpp:71 views/rc.cpp:17 views/rc.cpp:44
+#: widgets/kmymoneyaccounttreebase.cpp:58
+#: widgets/kmymoneyaccounttreeforecast.cpp:41 widgets/rc.cpp:109
+#: widgets/register.cpp:566 widgets/transaction.cpp:978
+#: widgets/transaction.cpp:1535
+#: wizards/newaccountwizard/knewaccountwizard.cpp:84
+msgid "Account"
+msgstr "Konto"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:85
+#, fuzzy
+msgid "Broker"
+msgstr " (Brokerskie)"
+
+#: dialogs/kfindtransactiondlg.cpp:225 dialogs/rc.cpp:70 dialogs/rc.cpp:104
+#: dialogs/rc.cpp:159 dialogs/rc.cpp:223 dialogs/rc.cpp:246 dialogs/rc.cpp:751
+#: dialogs/settings/rc.cpp:109 widgets/rc.cpp:35 widgets/register.cpp:568
+#: wizards/newaccountwizard/knewaccountwizard.cpp:86
+msgid "Details"
+msgstr "Szczegóły"
+
+#: dialogs/knewloanwizard.cpp:636 dialogs/rc.cpp:231 dialogs/rc.cpp:608
+#: kmymoneyutils.cpp:191 views/khomeview.cpp:399
+#: wizards/newaccountwizard/knewaccountwizard.cpp:87
+#: wizards/newaccountwizard/knewaccountwizard.cpp:880
+msgid "Payments"
+msgstr "Płatności"
+
+#: dialogs/investactivities.cpp:195 dialogs/investactivities.cpp:283
+#: dialogs/investactivities.cpp:422 dialogs/investtransactioneditor.cpp:217
+#: reports/listtable.cpp:221 widgets/transaction.cpp:1565
+#: wizards/newaccountwizard/knewaccountwizard.cpp:88
+msgid "Fees"
+msgstr "Opłaty"
+
+#: dialogs/rc.cpp:624 views/khomeview.cpp:415 views/khomeview.cpp:488
+#: views/khomeview.cpp:522 wizards/newaccountwizard/knewaccountwizard.cpp:89
+msgid "Schedule"
+msgstr "Harmonogram"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:90
+#, fuzzy
+msgid "Payout"
+msgstr "Płatność dla"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:91
+#, fuzzy
+msgid "Parent Account"
+msgstr "Konta płatności"
+
+#: dialogs/rc.cpp:719 wizards/newaccountwizard/knewaccountwizard.cpp:92
+#: wizards/newuserwizard/knewuserwizard.cpp:86
+#, fuzzy
+msgid "Finish"
+msgstr "&Zakończ"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:248
+#, fuzzy
+msgid "Credit card payment"
+msgstr "Karta kredytowa"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:264
+#, fuzzy, c-format
+msgid "Loan payment for %1"
+msgstr "Spłata pożyczki z %1"
+
+#: mymoney/mymoneyscheduled.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:279
+msgid "Loan payment"
+msgstr "Spłata pożyczki"
+
+#: dialogs/rc.cpp:134 wizards/newaccountwizard/knewaccountwizard.cpp:293
+msgid "Amortization"
+msgstr "Amortyzacja"
+
+#: dialogs/investactivities.cpp:196 dialogs/investactivities.cpp:284
+#: dialogs/investactivities.cpp:366 dialogs/investactivities.cpp:423
+#: dialogs/investtransactioneditor.cpp:227 dialogs/rc.cpp:135
+#: dialogs/rc.cpp:152 dialogs/rc.cpp:544 reports/listtable.cpp:222
+#: widgets/transaction.cpp:1597
+#: wizards/newaccountwizard/knewaccountwizard.cpp:302
+msgid "Interest"
+msgstr "Odsetki"
+
+#: dialogs/kcurrencycalculator.cpp:282
+#: wizards/newaccountwizard/knewaccountwizard.cpp:351
+#: wizards/newaccountwizard/knewaccountwizard.cpp:356
+msgid "User"
+msgstr "Użytkownik"
+
+#: kmymoneyutils.cpp:64 mymoney/mymoneyaccount.cpp:711
+#: reports/querytabletest.cpp:422
+#: wizards/newaccountwizard/knewaccountwizard.cpp:451
+msgid "Checking"
+msgstr "Oszczędnościowo-rozliczeniowe"
+
+#: kmymoneyutils.cpp:66 mymoney/mymoneyaccount.cpp:714
+#: wizards/newaccountwizard/knewaccountwizard.cpp:452
+msgid "Savings"
+msgstr "Oszczędnościowe"
+
+#: kmymoneyutils.cpp:68 mymoney/mymoneyaccount.cpp:717
+#: reports/querytabletest.cpp:423
+#: wizards/newaccountwizard/knewaccountwizard.cpp:453
+msgid "Credit Card"
+msgstr "Karta kredytowa"
+
+#: kmymoneyutils.cpp:70 mymoney/mymoneyaccount.cpp:720
+#: wizards/newaccountwizard/knewaccountwizard.cpp:454
+msgid "Cash"
+msgstr "Gotówka"
+
+#: kmymoneyutils.cpp:72 mymoney/mymoneyaccount.cpp:723
+#: wizards/newaccountwizard/knewaccountwizard.cpp:455
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+msgid "Loan"
+msgstr "Pożyczka"
+
+#: kmymoneyutils.cpp:76 mymoney/mymoneyaccount.cpp:729
+#: wizards/newaccountwizard/knewaccountwizard.cpp:456
+msgid "Investment"
+msgstr "Inwestycja"
+
+#: converter/mymoneytemplate.cpp:178 converter/mymoneytemplate.cpp:179
+#: dialogs/knewaccountdlg.cpp:1014 kmymoneyutils.cpp:80
+#: mymoney/mymoneyaccount.cpp:735 views/kaccountsview.cpp:352
+#: views/kmymoneyview.cpp:765 widgets/kmymoneyaccountselector.cpp:177
+#: widgets/kmymoneyaccountselector.cpp:356
+#: wizards/newaccountwizard/knewaccountwizard.cpp:457
+msgid "Asset"
+msgstr "Aktywa"
+
+#: converter/mymoneytemplate.cpp:182 converter/mymoneytemplate.cpp:183
+#: dialogs/knewaccountdlg.cpp:1016 kmymoneyutils.cpp:82
+#: mymoney/mymoneyaccount.cpp:738 views/kaccountsview.cpp:356
+#: views/kmymoneyview.cpp:766 widgets/kmymoneyaccountselector.cpp:178
+#: widgets/kmymoneyaccountselector.cpp:363
+#: wizards/newaccountwizard/knewaccountwizard.cpp:458
+msgid "Liability"
+msgstr "Zobowiązanie"
+
+#: converter/mymoneytemplate.cpp:194 converter/mymoneytemplate.cpp:195
+#: kmymoneyutils.cpp:94 mymoney/mymoneyaccount.cpp:756
+#: views/kaccountsview.cpp:369 views/kmymoneyview.cpp:769
+#: widgets/kmymoneyaccountselector.cpp:181
+#: widgets/kmymoneyaccountselector.cpp:390
+#: wizards/newaccountwizard/knewaccountwizard.cpp:460
+msgid "Equity"
+msgstr "Kapitał"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid ""
+"Please make sure to enter the correct conversion for the selected opening "
+"date. If you requested an online quote it might be provided for a different "
+"date."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+#, fuzzy
+msgid "Check date"
+msgstr "Czek"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:562
+msgid "1 %1 equals %2"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:577
+msgid "Conversion rate is not positive"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:583
+msgid "No account name supplied"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:114 mymoney/mymoneyscheduled.cpp:1026
+#: wizards/newaccountwizard/knewaccountwizard.cpp:680
+msgid "Write check"
+msgstr "Czek"
+
+#: dialogs/keditscheduledlg.cpp:111 mymoney/mymoneyscheduled.cpp:1014
+#: wizards/newaccountwizard/knewaccountwizard.cpp:682
+msgid "Direct debit"
+msgstr "Polecenie zapłaty"
+
+#: dialogs/keditscheduledlg.cpp:113 mymoney/mymoneyscheduled.cpp:1032
+#: wizards/newaccountwizard/knewaccountwizard.cpp:683
+#, fuzzy
+msgid "Bank transfer"
+msgstr "Przelew"
+
+#: dialogs/keditscheduledlg.cpp:112 mymoney/mymoneyscheduled.cpp:1029
+#: wizards/newaccountwizard/knewaccountwizard.cpp:685
+msgid "Standing order"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:110 mymoney/mymoneyscheduled.cpp:1020
+#: wizards/newaccountwizard/knewaccountwizard.cpp:686
+msgid "Manual deposit"
+msgstr "Wpłata własna"
+
+#: dialogs/keditscheduledlg.cpp:109 mymoney/mymoneyscheduled.cpp:1017
+#: wizards/newaccountwizard/knewaccountwizard.cpp:687
+msgid "Direct deposit"
+msgstr "Wpłata bezpośrednia"
+
+#: dialogs/keditscheduledlg.cpp:115 mymoney/mymoneyscheduled.cpp:1023
+#: wizards/newaccountwizard/knewaccountwizard.cpp:688
+msgid "Other"
+msgstr "Inny"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:697
+#, fuzzy
+msgid "CreditCard %1 monthly payment"
+msgstr "Szacowane miesięczne płatności"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:703
+msgid "Finish entry and create account"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:705
+#, fuzzy
+msgid "Finish entry and create account and schedule"
+msgstr "Użyj tego przycisku, żeby stworzyć nowy harmonogram."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:708
+msgid "Next due date is prior to opening date"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:712
+#, fuzzy
+msgid "No account selected"
+msgstr "Wybór konta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:716
+msgid "No amount for payment selected"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:720
+msgid "No payee for payment selected"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:724
+msgid "No name assigned for schedule"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:805
+msgid "No payee supplied"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:819
+#, fuzzy
+msgid "No opening balance supplied"
+msgstr "Stany otwarcia"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:826
+msgid "An interest change can only happen after the first payment"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:615 dialogs/knewloanwizard.cpp:634
+#: wizards/newaccountwizard/knewaccountwizard.cpp:884
+#: wizards/newaccountwizard/rc.cpp:55
+msgid "Months"
+msgstr "Miesiące"
+
+#: dialogs/knewloanwizard.cpp:616 dialogs/knewloanwizard.cpp:635
+#: wizards/newaccountwizard/knewaccountwizard.cpp:885
+#: wizards/newaccountwizard/knewaccountwizard.cpp:889
+#: wizards/newaccountwizard/rc.cpp:56
+msgid "Years"
+msgstr "Lata"
+
+#: dialogs/knewloanwizard.cpp:711
+#: wizards/newaccountwizard/knewaccountwizard.cpp:961
+#, c-format
+msgid "KMyMoney has calculated the amount of the loan as %1."
+msgstr "KMyMoney wyliczył kwotę pożyczki na %1."
+
+#: dialogs/knewloanwizard.cpp:718
+#: wizards/newaccountwizard/knewaccountwizard.cpp:968
+msgid "KMyMoney has calculated the interest rate to %1%."
+msgstr "KMyMoney wyliczył stopę procentową na %1%."
+
+#: dialogs/knewloanwizard.cpp:731
+#: wizards/newaccountwizard/knewaccountwizard.cpp:981
+msgid ""
+"KMyMoney has calculated a periodic payment of %1 to cover principal and "
+"interest."
+msgstr ""
+"KMyMoney wyliczył płatność okresową %1 żeby pokryć kapitał główny i odsetki."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:993
+#, fuzzy, c-format
+msgid ""
+"The number of payments has been decremented and the balloon payment has been "
+"modified to %1."
+msgstr ""
+"Liczba płatności została zmniejszona a końcowa płatność zmieniona na %1."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1001
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1021
+#, fuzzy, c-format
+msgid "The balloon payment has been modified to %1."
+msgstr "Ostatnia płatność została zmieniona na %1."
+
+#: dialogs/knewloanwizard.cpp:763
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1013
+msgid "KMyMoney has calculated the term of your loan as %1. "
+msgstr "KMyMoney wyliczył okres ważności pożyczki na %1."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1052
+#, fuzzy
+msgid "KMyMoney has calculated a balloon payment of %1 for this loan."
+msgstr "KMyMoney wyliczył końcową płatność %1 dla tej pożyczki."
+
+#: dialogs/knewloanwizard.cpp:809
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1059
+msgid "KMyMoney has successfully verified your loan information."
+msgstr "KMyMoney pomyślnie zweryfikował informacje o pożyczce."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1067
+#, fuzzy
+msgid ""
+"You have entered mis-matching information. Please modify your figures or "
+"leave one value empty to let KMyMoney calculate it for you"
+msgstr ""
+"Wpisano niepasujące do siebie informacje. Proszę się cofnąć do odpowiedniej "
+"strony i zaktualizować liczby albo pozostawić jedną z wartości pustą, żeby "
+"KMyMoney wyliczył ją automatycznie."
+
+#: dialogs/knewloanwizard.cpp:504 dialogs/knewloanwizard.cpp:513
+#: dialogs/knewloanwizard.cpp:522 dialogs/knewloanwizard.cpp:532
+#: dialogs/knewloanwizard.cpp:820
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1070
+msgid "Calculation error"
+msgstr "Błąd obliczania"
+
+#: dialogs/knewloanwizard.cpp:824
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1074
+msgid ""
+"\n"
+"\n"
+"Accept this or modify the loan information and recalculate."
+msgstr ""
+"\n"
+"\n"
+"Zaakceptuj to albo zmień informacje o pożyczce i przelicz ponownie."
+
+#: dialogs/knewloanwizard.cpp:826
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1076
+msgid "Calculation successful"
+msgstr "Obliczanie zakończone powodzeniem"
+
+#: dialogs/knewloanwizard.cpp:846
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1129
+#, fuzzy, c-format
+msgid ""
+"_n: one month\n"
+"%n months"
+msgstr ""
+"1 miesiąc\n"
+"%n miesiące\n"
+"%n miesięcy"
+
+#: dialogs/knewloanwizard.cpp:850
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1133
+#, fuzzy, c-format
+msgid ""
+"_n: one year\n"
+"%n years"
+msgstr ""
+"1 rok\n"
+"%n lata\n"
+"%n lat"
+
+#: dialogs/knewloanwizard.cpp:854
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1137
+#, fuzzy, c-format
+msgid ""
+"_n: one payment\n"
+"%n payments"
+msgstr ""
+"1 płatność\n"
+"%n płatności\n"
+"%n płatności"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1190
+msgid "Press Calculate to verify the values"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1194
+msgid "Not all details supplied"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:70 dialogs/knewloanwizard.cpp:122
+#: dialogs/knewloanwizard.cpp:136
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1381
+msgid "&Create..."
+msgstr "&Utwórz..."
+
+#: dialogs/knewloanwizard.cpp:138
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1383
+msgid "Create a new asset account"
+msgstr "Stwórz nowy rachunek aktywów"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1384
+#, fuzzy
+msgid ""
+"If the asset account does not yet exist, press this button to create it."
+msgstr ""
+"Nie istnieje obecnie papier wartościowy \"%1\". Czy chcesz go utworzyć?"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1596
+#, fuzzy
+msgid "Account information"
+msgstr "Opcje konta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1601
+#: wizards/newaccountwizard/rc.cpp:59
+#, fuzzy
+msgid "Subaccount of"
+msgstr "Podkonto"
+
+#: dialogs/rc.cpp:225 dialogs/rc.cpp:326 dialogs/rc.cpp:371 dialogs/rc.cpp:723
+#: plugins/ofximport/dialogs/rc.cpp:23 reports/listtable.cpp:225
+#: widgets/kmymoneyaccounttreebase.cpp:113 widgets/register.cpp:61
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1606
+msgid "Type"
+msgstr "Typ"
+
+#: dialogs/kcurrencyeditdlg.cpp:62 dialogs/rc.cpp:56 dialogs/rc.cpp:59
+#: dialogs/rc.cpp:75 dialogs/rc.cpp:727 dialogs/rc.cpp:792
+#: kmymoneyutils.cpp:84 kmymoneyutils.cpp:111 mymoney/mymoneyaccount.cpp:741
+#: mymoney/mymoneysecurity.cpp:169 reports/listtable.cpp:233
+#: widgets/kmymoneypriceview.cpp:127
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1607
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1630
+#: wizards/newaccountwizard/rc.cpp:6 wizards/newaccountwizard/rc.cpp:24
+msgid "Currency"
+msgstr "Waluta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1608
+#: wizards/newaccountwizard/rc.cpp:7 wizards/newuserwizard/rc.cpp:9
+#, fuzzy
+msgid "Opening date"
+msgstr "Aktualizacja online"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1610
+#: wizards/newaccountwizard/rc.cpp:9
+#, fuzzy
+msgid "Conversion rate"
+msgstr "Stopa procentowa"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1613
+#: wizards/newaccountwizard/rc.cpp:15 wizards/newuserwizard/rc.cpp:13
+#, fuzzy
+msgid "Opening balance"
+msgstr "Stany otwarcia"
+
+#: dialogs/keditscheduledlg.cpp:507 dialogs/transactioneditor.cpp:784
+#: dialogs/transactioneditor.cpp:848 plugins/ofximport/dialogs/rc.cpp:22
+#: widgets/rc.cpp:111 widgets/register.cpp:59 widgets/transaction.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1618
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1632
+msgid "Number"
+msgstr "Numer"
+
+#: dialogs/rc.cpp:365 wizards/newaccountwizard/knewaccountwizard.cpp:1621
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1634
+#: wizards/newaccountwizard/rc.cpp:26 wizards/newaccountwizard/rc.cpp:66
+msgid "IBAN"
+msgstr "IBAN"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1627
+msgid "Brokerage Account"
+msgstr "Konto brokerskie"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1640
+#, fuzzy
+msgid "Loan information"
+msgstr "Informacje o płatności"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1643
+#, fuzzy
+msgid "Amount borrowed"
+msgstr "pożyczone od"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1645
+#, fuzzy
+msgid "Amount lent"
+msgstr "Wpisano kwotę"
+
+#: dialogs/rc.cpp:515 dialogs/rc.cpp:546
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1647
+#: wizards/newaccountwizard/rc.cpp:75
+msgid "Interest rate"
+msgstr "Stopa procentowa"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1648
+#, fuzzy
+msgid "Interest rate is"
+msgstr "Stopa procentowa"
+
+#: dialogs/rc.cpp:509 dialogs/rc.cpp:572
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1649
+msgid "Principal and interest"
+msgstr "Kwota główna i odsetki"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1650
+#: wizards/newaccountwizard/rc.cpp:90
+#, fuzzy
+msgid "Additional fees"
+msgstr "Dodatkowe opłaty:"
+
+#: dialogs/rc.cpp:525 wizards/newaccountwizard/knewaccountwizard.cpp:1651
+#: wizards/newaccountwizard/rc.cpp:44
+msgid "Payment frequency"
+msgstr "Częstotliwość płatności"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1652
+#: wizards/newaccountwizard/rc.cpp:105
+#, fuzzy
+msgid "Payment account"
+msgstr "Konta płatności"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1655
+#, fuzzy
+msgid "Payout information"
+msgstr "Informacje o płatności"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1658
+#, fuzzy
+msgid "Refinance"
+msgstr "&Zmień nazwę"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1661
+#, fuzzy
+msgid "Transfer amount to"
+msgstr "Przelew na"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1663
+#, fuzzy
+msgid "Transfer amount from"
+msgstr "Przelew z"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1665
+#, fuzzy
+msgid "Payment date"
+msgstr "Płatności dla"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1671
+#, fuzzy
+msgid "Schedule information"
+msgstr "Zaplanowane transakcje"
+
+#: reports/listtable.cpp:228
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1684
+#, fuzzy
+msgid "Occurence"
+msgstr "Waluty"
+
+#: mymoney/mymoneyscheduled.cpp:891 mymoney/mymoneyscheduled.cpp:947
+#: mymoney/mymoneyscheduled.cpp:1283 mymoney/mymoneyscheduletest.cpp:1343
+#: widgets/rc.cpp:19 widgets/rc.cpp:74
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+msgid "Monthly"
+msgstr "Miesięcznie"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1677
+#, fuzzy
+msgid "Paid from"
+msgstr "Ważny od:"
+
+#: widgets/kmymoneycombo.cpp:473 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1678
+msgid "Pay to"
+msgstr "Płatność dla"
+
+#: dialogs/investactivities.cpp:197 dialogs/investactivities.cpp:285
+#: dialogs/investactivities.cpp:365 dialogs/kfindtransactiondlg.cpp:197
+#: dialogs/kmymoneysplittable.cpp:80 dialogs/rc.cpp:51 dialogs/rc.cpp:212
+#: reports/listtable.cpp:197 views/khomeview.cpp:421 views/khomeview.cpp:494
+#: views/khomeview.cpp:528 views/kscheduledview.cpp:73 views/rc.cpp:63
+#: widgets/register.cpp:58 widgets/transaction.cpp:1055
+#: widgets/transaction.cpp:1578 widgets/transaction.cpp:1610
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1679
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1685
+msgid "Amount"
+msgstr "Suma/kwota"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1680
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1686
+#, fuzzy
+msgid "First payment due"
+msgstr "Pierwsza płatność planowana na"
+
+#: dialogs/rc.cpp:102 wizards/newaccountwizard/knewaccountwizard.cpp:1681
+#: wizards/newaccountwizard/rc.cpp:115
+msgid "Payment method"
+msgstr "Metoda płatności"
+
+#: wizards/newaccountwizard/rc.cpp:1
+msgid ""
+"This page summarizes the data you have entered. Press <b>Finish</b> to "
+"create the account, schedules, etc. or use <b>Back</b> to modify your "
+"entries."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:2
+#, fuzzy
+msgid "Item"
+msgstr "termin"
+
+#: dialogs/rc.cpp:110 dialogs/rc.cpp:165 dialogs/rc.cpp:252 dialogs/rc.cpp:757
+#: dialogs/rc.cpp:818 views/kinvestmentview.cpp:74 widgets/register.cpp:574
+#: wizards/newaccountwizard/rc.cpp:3
+msgid "Value"
+msgstr "Wartość"
+
+#: wizards/newaccountwizard/rc.cpp:4
+msgid ""
+"Enter the name of the account under which it is known within KMyMoney.\n"
+"Select the type for the new account. Use the <b>What's this?</b> feature to "
+"see more details about the various account types.\n"
+"Enter the date the account was opened and its currency."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:5
+msgid "Select the currency in which this account is denominated."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:8
+msgid ""
+"The opening balance is the balance of the account when you start using it "
+"with KMyMoney. For new accounts this is usually 0 but for existing accounts "
+"this may well differ. Please consult the account statements to figure out "
+"this value. The opening balance is to be provided in the currency of the "
+"account as selected with the currency button."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:10
+#, fuzzy
+msgid ""
+"The opening date would be the date of the last statement. In case you want "
+"to keep track of transactions prior to this date, enter the ending balance "
+"and statement date of a prior statement and add all following transactions "
+"into KMyMoney.\n"
+"<br>\n"
+"<i>Note</i>: If you do not know the exact amount of the opening balance, "
+"enter an estimate. You can change this value later before you reconcile this "
+"account for the first time."
+msgstr ""
+"Wpisz stan końcowy konta z ostatniego wyciągu. W wypadku, gdy chcesz "
+"przechowywać historię transakcji sprzed tej daty, wpisz stan końcowy z "
+"poprzedniego wyciągu i dodaj kolejne transakcje.\n"
+"<br>\n"
+"Uwaga: jeśli chcesz zarządzać tym kontem od momentu otwarcia, wpisz 0. Jeśli "
+"nie znasz dokładnej sumy, wprowadź wartość przybliżoną. Można ją później "
+"zmienić przez rozpoczęciem uzgadniania."
+
+#: dialogs/rc.cpp:52 dialogs/rc.cpp:54 dialogs/rc.cpp:57 dialogs/rc.cpp:60
+#: dialogs/rc.cpp:748 dialogs/rc.cpp:749 dialogs/rc.cpp:768 widgets/rc.cpp:6
+#: widgets/rc.cpp:7 widgets/rc.cpp:8 widgets/rc.cpp:9 widgets/rc.cpp:10
+#: widgets/rc.cpp:11 widgets/rc.cpp:12 widgets/rc.cpp:13 widgets/rc.cpp:14
+#: widgets/rc.cpp:15 widgets/rc.cpp:16 widgets/rc.cpp:17
+#: wizards/newaccountwizard/rc.cpp:11 wizards/newaccountwizard/rc.cpp:88
+#: wizards/newaccountwizard/rc.cpp:91 wizards/newaccountwizard/rc.cpp:93
+#: wizards/newuserwizard/rc.cpp:14
+msgid "xxx"
+msgstr "xxx"
+
+#: wizards/newaccountwizard/rc.cpp:12
+#, fuzzy
+msgid "Account type"
+msgstr "Nazwa konta"
+
+#: wizards/newaccountwizard/rc.cpp:13
+msgid ""
+"For foreign currencies an initial conversion rate needs to be provided. This "
+"should be the price of the foreign currency in the base currency on the "
+"opening date of the account."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:14
+#, fuzzy
+msgid "Account name"
+msgstr "Nazwa konta"
+
+#: wizards/newaccountwizard/rc.cpp:16
+msgid ""
+"<p><b>Checking</b>\n"
+"Use the checking account type to manage activities on your checking account "
+"e.g. payments, checks and cash card purchases.</p>\n"
+"\n"
+"<p><b>Savings</b>\n"
+"Use the savings account type to manage activities on your savings account.</"
+"p>\n"
+"\n"
+"<p><b>Credit Card</b>\n"
+"Use the credit card account type to manage activities on your credit card.</"
+"p>\n"
+"\n"
+"<p><b>Cash</b>\n"
+"\n"
+"Use the cash account type to manage activities in your wallet.</p>\n"
+"\n"
+"<p><b>Loan</b>\n"
+"Use the loan account type to manage amortization loans (e.g. mortgages, car "
+"loan, money you lend, private loans etc.).</p>\n"
+"\n"
+"<p><b>Investment</b>\n"
+"Use the investment account to manage your stock, mutual fund and other "
+"investments.</p>\n"
+"\n"
+"<p><b>Asset</b>\n"
+"Use the asset account type to manage assets (e.g. your house, car or art "
+"collection).</p>\n"
+"\n"
+"<p><b>Liability</b>\n"
+"Use the liability account type to manage any type of liability except "
+"amortization loans. Use it for taxes you owe or money you borrowed from "
+"friends. For amortization loans like mortgages you should create a loan "
+"account.</p>"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:17
+msgid "Preferred account"
+msgstr "Preferowane konto"
+
+#: wizards/newaccountwizard/rc.cpp:18
+msgid ""
+"Mark this checkbox if the account should be maintained as preferred account"
+msgstr "Zaznacz tę opcję, jeśli te konto powinno być kontem preferowanym."
+
+#: wizards/newaccountwizard/rc.cpp:19
+#, fuzzy
+msgid ""
+"Selecting the <b>Preferred Account</b> checkbox will allow preferred access "
+"in some dialogs and views of KMyMoney."
+msgstr ""
+"Zaznaczenie opcji <b>Preferowane konto</b> pozwoli na ułatwiony dostęp w "
+"niektórych oknach."
+
+#: wizards/newaccountwizard/rc.cpp:20
+msgid "Enter a name under which this account is known within KMyMoney."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:21
+#, fuzzy
+msgid "Online quote"
+msgstr "Wyceny online"
+
+#: wizards/newaccountwizard/rc.cpp:22
+#, fuzzy
+msgid ""
+"Does this investment account have a brokerage account?<p>\n"
+"\n"
+"<b>Check</b> the mark if this investment account has an associated account "
+"for money that is not invested.<br>\n"
+"\n"
+"<b>Uncheck</b> it if you don't use this account for active stock brokerage. "
+"You should also uncheck it if this account is not maintained by a bank or "
+"broker."
+msgstr ""
+"Wybierz <b>Tak</b> jeśli to konto inwestycyjne posiada powiązane konto "
+"pieniężne na środki, które nie są inwestowane.<br>\n"
+"\n"
+"Wybierz <b>Nie</b> jeśli nie używasz tego konta jako aktywnego konta "
+"maklerskiego. Powinieneś również wybrać <b>Nie</b> w wypadku, gdy konto to "
+"nie jest zarządzane przez bank ani instytucję maklerską."
+
+#: wizards/newaccountwizard/rc.cpp:23
+#, fuzzy
+msgid "Create brokerage account"
+msgstr "Konto brokerskie"
+
+#: wizards/newaccountwizard/rc.cpp:25 wizards/newaccountwizard/rc.cpp:64
+#, fuzzy
+msgid "Account number"
+msgstr "Numer konta"
+
+#: wizards/newaccountwizard/rc.cpp:27
+msgid ""
+"Please select the required options. Please use the <b>What's this?</b> "
+"feature to see more information about the items."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:28
+#, fuzzy
+msgid "What is the type of the loan?"
+msgstr "Jaka ma być nazwa konta?"
+
+#: dialogs/rc.cpp:481 wizards/newaccountwizard/rc.cpp:29
+msgid "I am borrowing money"
+msgstr "Pożyczam od kogoś"
+
+#: dialogs/rc.cpp:482 wizards/newaccountwizard/rc.cpp:30
+msgid "I am lending money"
+msgstr "Pożyczam komuś"
+
+#: wizards/newaccountwizard/rc.cpp:31
+#, fuzzy
+msgid "Who is the payee/payer of the loan?"
+msgstr "Jaka ma być nazwa konta?"
+
+#: wizards/newaccountwizard/rc.cpp:32
+msgid ""
+"Enter the name of the person or bank you owe money or who owes you money.\n"
+"\n"
+"If the name does not exist within KMyMoney's database, you are asked if you "
+"want to create it."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:33
+msgid "Did you make/receive any payments yet?"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:36
+#, fuzzy
+msgid ""
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?\n"
+"\n"
+"Note: Payments made to obtain the loan (e.g. Disagio) are not considered as "
+"payments in this context."
+msgstr ""
+"Uwaga: płatności dokonywane po to, żeby uzyskać pożyczkę (np. disaggio), nie "
+"są traktowane w tym kontekście jako płatności."
+
+#: wizards/newaccountwizard/rc.cpp:37
+#, fuzzy
+msgid "Which payments do you want to record?"
+msgstr "Jakiego typu konto chcesz utworzyć?"
+
+#: wizards/newaccountwizard/rc.cpp:38
+#, fuzzy
+msgid "All payments"
+msgstr "Płatności"
+
+#: wizards/newaccountwizard/rc.cpp:39
+#, fuzzy
+msgid "Start with this year's payments"
+msgstr "Uruchom ze stroną domową"
+
+#: wizards/newaccountwizard/rc.cpp:40
+msgid ""
+"<qt>Select which transactions should be recorded.\n"
+"\n"
+"<b>All payments</b> allows you to enter all payments made for this loan.\n"
+"\n"
+"The option to <b>start from the beginning of the current year</b> is meant "
+"for loans that are active for a longer period of time already and you don't "
+"want to enter all transactions of the past.\n"
+"</qt>"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:41
+msgid "Balance before start of recording"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:42
+msgid ""
+"Enter the ending balance found on the statement that is the last one before "
+"you want to start recording this loan in KMyMoney."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:43
+msgid ""
+"You have selected to record only payments from the beginning of this year. "
+"Since prior transactions will not be recorded, you need to supply the "
+"balance of the loan on January 1st of this year."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:45
+msgid "Interest Compounding frequency"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:46
+msgid ""
+"Select the frequency with which the interest is compounded. If uncertain, "
+"select the same as the payment frequency. Consult your loan contract for "
+"details."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:47
+#, fuzzy
+msgid "Due date of first payment to be recorded"
+msgstr "Data pierwszej płatności"
+
+#: wizards/newaccountwizard/rc.cpp:48
+msgid ""
+"Depending on the answer to <b>What do you want to record?</b> this field "
+"means the following:<p>\n"
+"\n"
+"<b>All payments</b><br>\n"
+"Enter the due date of the very first payment<p>\n"
+"\n"
+"<b>Start with this year's payments</b><br>\n"
+"Enter the due date of the first payment in the current year"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:49
+#, fuzzy
+msgid "Type of interest rate"
+msgstr "Typ oprocentowania"
+
+#: wizards/newaccountwizard/rc.cpp:50
+#, fuzzy
+msgid "Fixed"
+msgstr "Pole"
+
+#: wizards/newaccountwizard/rc.cpp:51
+#, fuzzy
+msgid "Variable"
+msgstr "Wartość"
+
+#: wizards/newaccountwizard/rc.cpp:52
+#, fuzzy
+msgid "Time between interest changes"
+msgstr "Data kolejnej zmiany oprocentowania"
+
+#: dialogs/knewloanwizard.cpp:613 wizards/newaccountwizard/rc.cpp:53
+msgid "Days"
+msgstr "Dni"
+
+#: dialogs/knewloanwizard.cpp:614 wizards/newaccountwizard/rc.cpp:54
+msgid "Weeks"
+msgstr "Tygodnie"
+
+#: wizards/newaccountwizard/rc.cpp:57
+#, fuzzy
+msgid "Next interest change is due"
+msgstr "Kolejna zmiana oprocentowania"
+
+#: wizards/newaccountwizard/rc.cpp:58
+#, fuzzy
+msgid "This page allows you to select the parent account."
+msgstr "Proszę wybrać konto nadrzędne."
+
+#: wizards/newaccountwizard/rc.cpp:60
+#, fuzzy
+msgid ""
+"If this account is managed by an institution please select the institution "
+"from the list. If the institution does not exist yet, please choose the "
+"<b>New Institution</b> button to create it. Otherwise, leave this field "
+"empty.\n"
+"Enter the account number used by the institution to identify the account."
+msgstr ""
+"Jeśli rachunek obsługiwany jest przez instytucję, trzeba ją wybrać z listy. "
+"Jeśli instytucja jeszcze nie istnieje, należy kliknąć na przycisk <b>Nowa "
+"instytucja</b>, żeby ją utworzyć.\n"
+"<br>\n"
+"W innym wypadku należy pozostawić pole puste."
+
+#: wizards/newaccountwizard/rc.cpp:62
+msgid "Select the institution which manages this account or leave empty"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:63
+#, fuzzy
+msgid "New Institution"
+msgstr "&Nowa instytucja"
+
+#: wizards/newaccountwizard/rc.cpp:65
+msgid ""
+"Accounts managed by an institution are usually referenced by a unique number "
+"the so called account number. Enter that number here.\n"
+"\n"
+"KMyMoney currently uses this number only for some online banking functions."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:67
+msgid "Enter the International Bank Account Number into this field"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:68
+msgid ""
+"You can enter the IBAN (International Bank Account Number) into this field "
+"if you know it. Usually, people at your institution can tell you the number "
+"or it is printed on your statements.\n"
+"\n"
+"See also http://en.wikipedia.org/wiki/International_Bank_Account_Number for "
+"more information.\n"
+"\n"
+"KMyMoney keeps this field only for documentation purposes and does not use "
+"it otherwise."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:69
+msgid ""
+"Now enter the details for your loan. You can leave one of the fields empty "
+"and KMyMoney will calculate it when you press the <b>Calculate</b> button. "
+"Before you can continue with the next page you also need to press "
+"<b>Calculate</b> so that KMyMoney can check the logical correctness of the "
+"values you have supplied."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:70
+#, fuzzy
+msgid "The interest rate gets calculated"
+msgstr ""
+"\n"
+"Kiedy jest obliczana rzeczywista stopa procentowa?"
+
+#: wizards/newaccountwizard/rc.cpp:71
+#, fuzzy
+msgid "when the payment is received"
+msgstr "Kiedy otrzymuje się płatność."
+
+#: wizards/newaccountwizard/rc.cpp:72
+#, fuzzy
+msgid "when the payment is due"
+msgstr "W terminie płatności."
+
+#: dialogs/rc.cpp:531 dialogs/rc.cpp:533 wizards/newaccountwizard/rc.cpp:73
+msgid "Loan amount"
+msgstr "Kwota pożyczki"
+
+#: wizards/newaccountwizard/rc.cpp:74
+msgid ""
+"Enter the amount of the loan in this field. If you want to calculate this "
+"field out of the other parameters, please leave it empty. If the field is "
+"marked as required (colored background) you have informed KMyMoney about the "
+"fact that there were already some payments towards the loan. In this case, "
+"please enter the ending balance of your last statement."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:76
+#, fuzzy
+msgid ""
+"Please enter the interest rate in percent or leave the field empty to "
+"calculate it."
+msgstr ""
+"\n"
+"Proszę wpisać stopę procentową albo pozostawić pole puste, żeby ją wyliczyć."
+
+#: dialogs/rc.cpp:559 wizards/newaccountwizard/rc.cpp:77
+msgid "Term"
+msgstr "Termin"
+
+#: wizards/newaccountwizard/rc.cpp:78
+#, fuzzy
+msgid ""
+"Please enter the term of this loan or enter 0 to calculate it. The term is "
+"the time that is required to fully repay the loan. This time might be "
+"different from the time your loan contract is signed for."
+msgstr ""
+"\n"
+"Proszę wpisać okres ważności tej pożyczki lub pozostawić pole puste, żeby je "
+"wyliczyć. Okres ważności to czas, wymagany na pełną spłatę pożyczki. Może on "
+"się różnić od okresu, na który podpisano umowę kredytu lub pożyczki."
+
+#: wizards/newaccountwizard/rc.cpp:79
+#, fuzzy
+msgid "Payment (principal and interest)"
+msgstr "kapitał główny i odsetki"
+
+#: wizards/newaccountwizard/rc.cpp:80
+#, fuzzy
+msgid ""
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"\n"
+"Proszę wpisać kwotę płaconą na kapitał i odsetki albo zostawić pole puste, "
+"żeby je wyliczyć."
+
+#: wizards/newaccountwizard/rc.cpp:81
+#, fuzzy
+msgid "Balloon payment"
+msgstr "Spłata pożyczki"
+
+#: wizards/newaccountwizard/rc.cpp:82
+#, fuzzy
+msgid ""
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"\n"
+"Proszę wpisać kwotę ostatniej płatności amortyzacji albo pozostawić pole "
+"puste dla automatycznego wyliczenia."
+
+#: wizards/newaccountwizard/rc.cpp:83
+#, fuzzy
+msgid "Calculate"
+msgstr "oblicz"
+
+#: wizards/newaccountwizard/rc.cpp:84
+msgid "Press this button to calculate/verify your loan details."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:85
+msgid ""
+"Pressing this button calculates a possibly missing parameter for your loan "
+"or verifies that the values entered match. If something is not correct you "
+"will receive information about it."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:86
+#, fuzzy
+msgid ""
+"Now enter the information required for the periodic loan payments. If your "
+"regular payments contains any additional fees, click on the <b>Additional "
+"fees</b> button to enter them."
+msgstr ""
+"\n"
+"Jeśli regularna płatność zawiera jakiekolwiek dodatkowe opłaty, kliknij na "
+"przycisk \"Dodatkowe opłaty\" żeby je wprowadzić."
+
+#: wizards/newaccountwizard/rc.cpp:87
+#, fuzzy
+msgid "Principal + Interest"
+msgstr "Kapitał + odsetki:"
+
+#: dialogs/rc.cpp:620 wizards/newaccountwizard/rc.cpp:89
+msgid "+"
+msgstr "+"
+
+#: wizards/newaccountwizard/rc.cpp:92
+#, fuzzy
+msgid "= periodical payments"
+msgstr "= płatność okresowa:"
+
+#: dialogs/rc.cpp:643 wizards/newaccountwizard/rc.cpp:94
+#, fuzzy
+msgid ""
+"If this loan is for an asset, such as a car or a house, you can create the "
+"asset account now. An asset account represents the total value of an asset. "
+"The money from this loan will be transfered into the asset account you "
+"create or select.\n"
+"If this loan is a 'consumer loan' (money to use however you want), you can "
+"use a checking account instead."
+msgstr ""
+"\n"
+"Jeżeli ta pożyczka jest przeznaczona na aktywa, takie jak samochód lub dom, "
+"można teraz utworzyć konto aktywów. Konto aktywów reprezentuje całkowitą "
+"wartość dobra. Pieniądze z tej pożyczki będą przelane na konto aktywów, "
+"które stworzysz lub wybierzesz.\n"
+"Jeśli ta pożyczka jest pożyczką konsumencką (pieniądze przeznaczone na "
+"cokolwiek się chce), można w zamian użyć konta oszczędnościowo-"
+"rozliczeniowego."
+
+#: dialogs/rc.cpp:644 wizards/newaccountwizard/rc.cpp:95
+msgid "Don't create payout transaction"
+msgstr "Nie twórz transakcji wydania"
+
+#: wizards/newaccountwizard/rc.cpp:96
+msgid "Refinance existing loan"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:97
+msgid ""
+"Check this if you are refinancing a loan that already exists in KMyMoney"
+msgstr ""
+
+#: dialogs/rc.cpp:642 wizards/newaccountwizard/rc.cpp:98
+msgid "Asset Account"
+msgstr "Rachunek aktywów"
+
+#: dialogs/rc.cpp:2 wizards/newaccountwizard/rc.cpp:99
+#, fuzzy
+msgid "Create"
+msgstr "&Stwórz"
+
+#: wizards/newaccountwizard/rc.cpp:100
+#, fuzzy
+msgid "Loan account"
+msgstr "Kwota pożyczki"
+
+#: dialogs/rc.cpp:646 wizards/newaccountwizard/rc.cpp:101
+msgid "Date of payment"
+msgstr "Data płatności"
+
+#: wizards/newaccountwizard/rc.cpp:102
+#, fuzzy
+msgid ""
+"KMyMoney creates a schedule for this payment and reminds you whenever a "
+"payment must be made. Please select the account to/from which payments will "
+"be made and the category the interest will be assigned to.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"KMyMoney utworzy harmonogram płatności i przypomni, kiedy będą musiały być "
+"dokonywane.<p>\n"
+"Jeśli wybrano zapamiętywanie wszystkich płatności, data ta już została "
+"dostarczona. Jeśli wybrano zapamiętywanie tylko płatności z tego roku, wtedy "
+"<b>Pierwszy termin płatności</b> jest datą pierwszej płatności dokonanej w "
+"tym roku."
+
+#: dialogs/rc.cpp:613 wizards/newaccountwizard/rc.cpp:103
+msgid "Interest category"
+msgstr "Kategoria oprocentowania"
+
+#: wizards/newaccountwizard/rc.cpp:104
+msgid ""
+"The category the interest part of the payment will be assigned to. If you "
+"borrow money you usually have to pay interest, so this should be an expense "
+"category. If you lend the money, you receive the interest. In this case, "
+"select an income category here."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:106
+msgid ""
+"Select the account from which you make your periodical payments or where you "
+"receive regular payments in case you lend the money. In most cases, this is "
+"a checking account."
+msgstr ""
+
+#: dialogs/rc.cpp:519 wizards/newaccountwizard/rc.cpp:107
+msgid "First payment due on"
+msgstr "Pierwsza płatność planowana na"
+
+#: wizards/newaccountwizard/rc.cpp:108
+msgid ""
+"For credit card accounts you can create a monthly schedule which will "
+"automatically remind you about the payment. Please fill in the details about "
+"this payment here."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:109
+#, fuzzy
+msgid "Yes, remind me when the payment is due"
+msgstr "Tak, przypominaj mi o nadchodzącej płatności"
+
+#: wizards/newaccountwizard/rc.cpp:110
+#, fuzzy
+msgid "Name of schedule"
+msgstr "Nowy harmonogram"
+
+#: dialogs/rc.cpp:151 dialogs/rc.cpp:218 dialogs/rc.cpp:219
+#: reports/listtable.cpp:199 views/kscheduledview.cpp:72 widgets/rc.cpp:113
+#: widgets/register.cpp:57 wizards/newaccountwizard/rc.cpp:111
+msgid "Payee"
+msgstr "Beneficjent"
+
+#: wizards/newaccountwizard/rc.cpp:112
+msgid "Estimated monthly payment"
+msgstr "Szacowane miesięczne płatności"
+
+#: wizards/newaccountwizard/rc.cpp:113
+msgid "Due date of next payment"
+msgstr "Planowana data kolejnej płatności"
+
+#: wizards/newaccountwizard/rc.cpp:114
+msgid ""
+"Payment should be made\n"
+"from account"
+msgstr ""
+"Płatności powinny być dokonywane\n"
+"z konta"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:79
+#, fuzzy
+msgid "KMyMoney New File Setup"
+msgstr "Brak otwartego pliku KMyMoney"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:81
+#, fuzzy
+msgid "Introduction"
+msgstr "Instytucja"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:82
+#, fuzzy
+msgid "Personal Data"
+msgstr "Dane osobiste..."
+
+#: wizards/newuserwizard/knewuserwizard.cpp:83
+#, fuzzy
+msgid "Select Currency"
+msgstr "Wybierz walutę podstawową"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:84
+#, fuzzy
+msgid "Select Accounts"
+msgstr "Wybierz konto:"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:85
+msgid "Set preferences"
+msgstr ""
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid ""
+"Unable to load data, because no contact has been associated with the owner "
+"of the standard addressbook."
+msgstr ""
+"Nie można wczytać danych, gdyż żaden kontakt nie został przypisany do "
+"właściciela domyślnej książki adresowej."
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid "Addressbook import"
+msgstr "Import książki adresowej"
+
+#: wizards/newuserwizard/rc.cpp:1
+msgid ""
+"A typical KMyMoney user maintains a checking a account with some institution "
+"and uses it to receive money or pay bills. If this is not the case, please "
+"deselect the checkbox below and continue on the next page."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:2
+msgid "I have a checking account that I want to manage with KMyMoney"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:3
+msgid "The name of the instititution that issued the account."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:4
+msgid ""
+"Each institution has a routing number. Enter it here. If uncertain, leave "
+"the field blank. You can modify it later."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:5
+#, fuzzy
+msgid "Name of the institution"
+msgstr "Nazwa pożyczki"
+
+#: wizards/newuserwizard/rc.cpp:6
+#, fuzzy
+msgid "Routing number"
+msgstr "Identyfikator banku/oddziału:"
+
+#: wizards/newuserwizard/rc.cpp:7
+msgid ""
+"In general the institution that issued the account also issued a number for "
+"it. Enter it here. If uncertain, you can modify this entry later."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:8
+msgid ""
+"Enter a descriptive name that will be used by KMyMoney to identify your "
+"checking account."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:10
+msgid ""
+"Enter the date from when on you plan to keep track of the transactions in "
+"that account. This is usually the date of the last statement. If uncertain, "
+"leave as is."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:11
+#, fuzzy
+msgid "Number of the account"
+msgstr "Nazwa pożyczki"
+
+#: wizards/newuserwizard/rc.cpp:12
+#, fuzzy
+msgid "Name of the account"
+msgstr "Nazwa pożyczki"
+
+#: wizards/newuserwizard/rc.cpp:15
+msgid ""
+"Enter the opening balance of the account. This is usually the ending balance "
+"of the last statement. If uncertain, leave as is."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:16
+msgid ""
+"The fields below allow you to enter some information about your checking "
+"account. Once this wizard finishes, the account will be created for you "
+"within KMyMoney."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:17
+msgid ""
+"KMyMoney supports multiple currencies. Your reports will be based on a "
+"default curreny which you can select here. The default for new accounts is "
+"also the currency you select here."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:18
+msgid ""
+"KMyMoney will store your financial data in a file on the disk. A standard "
+"filename within your KDE user environment will be the default. This is just "
+"provided for convenience and you can choose any other location here."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:19
+msgid ""
+"Either the currently selected file exists or the selected directory does not "
+"exist. Please make sure, that\n"
+"\n"
+"<ul>\n"
+"<li>the selected directory exists and</li>\n"
+"<li>the filename is not currently used in this directory.</li>\n"
+"</ul>"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:20
+msgid ""
+"This finishes the setup of your KMyMoney environment. You can now press the "
+"Finish button and start using KMyMoney to record your financial transactions."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:21
+#, fuzzy
+msgid ""
+"Please enter some information about yourself.<br><br>\n"
+"\n"
+"This information will be seen and used only by you. The information is used "
+"to personalize KMyMoney, to encrypt your file, etc."
+msgstr ""
+"Użyj tego okna, żeby dodać informacje osobiste o sobie.\n"
+"\n"
+"Wszystkie informacje są opcjonalne i używane do spersonalizowania\n"
+"Twojego pliku KMyMoney."
+
+#: wizards/newuserwizard/rc.cpp:28
+msgid "Zip code"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:30
+msgid "Welcome to KMyMoney!"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:31
+msgid ""
+"You have started KMyMoney for the first time on this computer. Before this "
+"program can help you to manage your finances, it needs to collect some data "
+"from you.<p>\n"
+"\n"
+"On the next few pages you will be guided through the steps necessary to "
+"setup the program. This will happen only once."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:32
+msgid ""
+"<p>KMyMoney can encrypt your datafile using GPG Encryption. GPG encryption "
+"is one of the most secure methods in the world for protecting data. All of "
+"your account numbers and other important financial information will be very "
+"secure.</p>"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:33
+msgid ""
+"If you would like to review or change any preference settings for KMyMoney "
+"at this time, you can do so here. If not just click <b>Next</b>."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:34
+msgid "Configure preferences now"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:35
+msgid ""
+"You can change the configuration options at any time using the configuration "
+"dialog. Just select the <b>Configure KMyMoney...</b> option in the "
+"<b>Settings</b> menu."
+msgstr ""
+
+#: dialogs/rc.cpp:83 dialogs/rc.cpp:411 dialogs/rc.cpp:435
+#: kmymoneyutils.cpp:92 kmymoneyutils.cpp:105 mymoney/mymoneyaccount.cpp:753
+#: mymoney/mymoneysecurity.cpp:160
+msgid "Stock"
+msgstr "Papiery wartościowe"
+
+#: dialogs/rc.cpp:84 dialogs/rc.cpp:412 dialogs/rc.cpp:436
+#: kmymoneyutils.cpp:107 mymoney/mymoneysecurity.cpp:163
+msgid "Mutual Fund"
+msgstr "Fundusz powierniczy"
+
+#: dialogs/rc.cpp:85 dialogs/rc.cpp:413 dialogs/rc.cpp:437
+#: kmymoneyutils.cpp:109 mymoney/mymoneysecurity.cpp:166
+msgid "Bond"
+msgstr "Obligacja"
+
+#: mymoney/mymoneysecurity.cpp:172 reports/querytable.cpp:1150
+#: widgets/kmymoneyaccountselector.cpp:76
+msgid "None"
+msgstr "Brak"
+
+#: dialogs/rc.cpp:46 kmymoneyutils.cpp:402 mymoney/mymoneyaccount.cpp:759
+#: mymoney/mymoneyscheduled.cpp:1002 mymoney/mymoneysecurity.cpp:175
+#: views/kforecastview.cpp:174 widgets/register.cpp:54
+#: widgets/register.cpp:485 widgets/transaction.cpp:708
+#: widgets/transaction.cpp:1459
+msgid "Unknown"
+msgstr "Nieznany"
+
+#: mymoney/storage/mymoneystoragesql.cpp:191
+msgid ""
+"Database apparently in use\n"
+"Opened by %1 on %2 at %3.\n"
+"Open anyway?"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragesql.cpp:229
+msgid "Cannot currently create database for driver %1; please create manually"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragesql.cpp:244
+msgid "Error in create database %1; do you have create permissions?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1329
+#: mymoney/storage/mymoneystoragexml.cpp:166
+msgid "Loading transactions..."
+msgstr "Wczytywanie transakcji..."
+
+#: converter/mymoneygncreader.cpp:1190
+#: mymoney/storage/mymoneystoragexml.cpp:173
+msgid "Loading accounts..."
+msgstr "Wczytywanie kont..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:180
+#, fuzzy
+msgid "Loading securities..."
+msgstr "Wczytywanie towarów..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:187
+#, fuzzy
+msgid "Loading reports..."
+msgstr "Wczytywanie cen..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:268
+msgid "Unknown XML tag %1 found in line %2"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:274
+msgid "Exception while creating a %1 element: %2"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:513
+#, fuzzy
+msgid "Loading file information..."
+msgstr "Wczytywanie pliku..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:591
+#, fuzzy
+msgid "Loading user information..."
+msgstr "Wczytywanie transakcji..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:655
+#, fuzzy
+msgid "Saving accounts..."
+msgstr "Wczytywanie kont..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:678
+#, fuzzy
+msgid "Saving transactions..."
+msgstr "Wczytywanie transakcji..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:747
+#, fuzzy
+msgid "Saving reports..."
+msgstr "Zapisywanie pliku..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:762
+#, fuzzy
+msgid "Saving budgets..."
+msgstr "Zapisywanie pliku..."
+
+#: mymoney/storage/mymoneystoragedump.cpp:414
+msgid "not reconciled"
+msgstr "nieuzgodnione"
+
+#: mymoney/storage/mymoneystoragedump.cpp:417
+msgid "cleared"
+msgstr "rozliczone"
+
+#: mymoney/storage/mymoneystoragedump.cpp:420
+msgid "reconciled"
+msgstr "uzgodnione"
+
+#: mymoney/storage/mymoneystoragedump.cpp:423
+msgid "frozen"
+msgstr "zablokowany"
+
+#: mymoney/storage/mymoneystoragedump.cpp:426
+msgid "unknown"
+msgstr "nieznany"
+
+#: mymoney/mymoneyaccount.cpp:101
+msgid ""
+"Account %1 contains an opening balance. Please use a KMyMoney version >= 0.8 "
+"and < 0.9 to correct the problem."
+msgstr ""
+
+#: mymoney/mymoneyaccount.cpp:597
+msgid ""
+"_: Brokerage (suffix for account names)\n"
+"Brokerage"
+msgstr ""
+
+#: kmymoneyutils.cpp:74 mymoney/mymoneyaccount.cpp:726
+msgid "Certificate of Deposit"
+msgstr "Certyfikat wkładu bankowego"
+
+#: kmymoneyutils.cpp:78 mymoney/mymoneyaccount.cpp:732
+msgid "Money Market"
+msgstr "Giełda pieniężn"
+
+#: converter/mymoneytemplate.cpp:186 converter/mymoneytemplate.cpp:187
+#: dialogs/knewaccountdlg.cpp:1018 kmymoneyutils.cpp:86
+#: mymoney/mymoneyaccount.cpp:744 views/kaccountsview.cpp:360
+#: views/kbudgetview.cpp:372 views/kcategoriesview.cpp:178
+#: views/khomeview.cpp:1813 views/kmymoneyview.cpp:767
+#: widgets/kmymoneyaccountselector.cpp:68
+#: widgets/kmymoneyaccountselector.cpp:179
+#: widgets/kmymoneyaccountselector.cpp:370 widgets/register.cpp:828
+msgid "Income"
+msgstr "Dochód"
+
+#: converter/mymoneytemplate.cpp:190 converter/mymoneytemplate.cpp:191
+#: dialogs/knewaccountdlg.cpp:1020 kmymoneyutils.cpp:88
+#: mymoney/mymoneyaccount.cpp:747 views/kaccountsview.cpp:364
+#: views/kbudgetview.cpp:378 views/kcategoriesview.cpp:182
+#: views/kmymoneyview.cpp:768 widgets/kmymoneyaccountselector.cpp:72
+#: widgets/kmymoneyaccountselector.cpp:180
+#: widgets/kmymoneyaccountselector.cpp:380 widgets/register.cpp:829
+msgid "Expense"
+msgstr "Wydatek"
+
+#: kmymoneyutils.cpp:90 mymoney/mymoneyaccount.cpp:750
+msgid "Investment Loan"
+msgstr "Kredyt inwestycyjny"
+
+#: mymoney/mymoneyfile.cpp:47
+msgid "Opening Balances"
+msgstr "Stany otwarcia"
+
+#: mymoney/mymoneyfile.cpp:398
+#, fuzzy
+msgid "Cannot remove transaction that references a closed account."
+msgstr "Czy chcesz zaimportować transakcje do tego konta?"
+
+#: mymoney/mymoneyfile.cpp:1414 mymoney/mymoneyfile.cpp:1433
+#: mymoney/mymoneyfile.cpp:1447 mymoney/mymoneyfile.cpp:1469
+#, fuzzy
+msgid "* Problem with account '%1'"
+msgstr "Nie można wczytać kont:"
+
+#: mymoney/mymoneyfile.cpp:1419
+msgid " * Parent account '%1' belongs to a different group."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1420 mymoney/mymoneyfile.cpp:1450
+msgid " New parent account is the top level account '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1436
+msgid " * Parent account '%1' does not contain '%2' as sub-account."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1449
+msgid " * The parent with id %1 does not exist anymore."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1471
+msgid " * Child account with id %1 does not exist anymore."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1472
+msgid " The child account list will be reconstructed."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1492
+#, fuzzy
+msgid " * Unable to update account data in engine."
+msgstr "Nie można usunąć konta: "
+
+#: mymoney/mymoneyfile.cpp:1499
+msgid "* Reconstructing the child lists for"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1536
+msgid " * Unable to update account data for account %1 in engine"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1554
+msgid " * Payee %1 recreated with fixed id"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1583
+msgid " * Payee id updated in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1596
+#, fuzzy
+msgid " * shares set to value in split of transaction '%1'."
+msgstr "Użyj, żeby rozliczyć wszystkie podziały tej transakcji"
+
+#: mymoney/mymoneyfile.cpp:1599
+#, fuzzy
+msgid " * value set to shares in split of transaction '%1'."
+msgstr "Użyj, żeby rozliczyć wszystkie podziały tej transakcji"
+
+#: mymoney/mymoneyfile.cpp:1605
+msgid ""
+" * Split %2 in transaction '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1616
+#, fuzzy
+msgid " * action marked as interest in split of transaction '%1'."
+msgstr "Użyj, żeby rozliczyć wszystkie podziały tej transakcji"
+
+#: mymoney/mymoneyfile.cpp:1643
+msgid " * Payee id updated in split of schedule '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1649
+msgid ""
+" * Split in scheduled transaction '%1' contained value != 0 and shares == 0."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1650
+msgid " Shares set to value."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1658
+#, fuzzy
+msgid " * Removed bankid from split in scheduled transaction '%1'."
+msgstr "Użyj, żeby rozliczyć wszystkie podziały tej transakcji"
+
+#: mymoney/mymoneyfile.cpp:1671
+#, fuzzy
+msgid " * shares set to value in split in schedule '%1'."
+msgstr "Użyj, żeby rozliczyć wszystkie podziały tej transakcji"
+
+#: mymoney/mymoneyfile.cpp:1674
+#, fuzzy
+msgid " * value set to shares in split in schedule '%1'."
+msgstr "Użyj, żeby rozliczyć wszystkie podziały tej transakcji"
+
+#: mymoney/mymoneyfile.cpp:1680
+msgid ""
+" * Split %2 in schedule '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1706
+msgid " * Payee id updated in report '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1723
+msgid " * Payee '%1' removed."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1730
+msgid "Finish! Data is consistent."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1732
+msgid "Finish! %1 problem(s) corrected. %2 problem(s) still present."
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:873 mymoney/mymoneyscheduled.cpp:918
+#: mymoney/mymoneyscheduled.cpp:969 mymoney/mymoneyscheduled.cpp:1265
+#: mymoney/mymoneyscheduletest.cpp:1336
+msgid "Once"
+msgstr "Jednorazowo"
+
+#: mymoney/mymoneyscheduled.cpp:875 mymoney/mymoneyscheduled.cpp:924
+#: mymoney/mymoneyscheduled.cpp:1267 mymoney/mymoneyscheduletest.cpp:1337
+#: widgets/rc.cpp:72
+msgid "Daily"
+msgstr "Dziennie"
+
+#: mymoney/mymoneyscheduled.cpp:877 mymoney/mymoneyscheduled.cpp:931
+#: mymoney/mymoneyscheduled.cpp:1269 mymoney/mymoneyscheduletest.cpp:1338
+#: widgets/rc.cpp:73
+msgid "Weekly"
+msgstr "Tygodniowo"
+
+#: mymoney/mymoneyscheduled.cpp:881 mymoney/mymoneyscheduled.cpp:932
+#: mymoney/mymoneyscheduled.cpp:1273 mymoney/mymoneyscheduletest.cpp:1339
+msgid "Every other week"
+msgstr "Co drugi tydzień"
+
+#: mymoney/mymoneyscheduled.cpp:879 mymoney/mymoneyscheduled.cpp:1271
+#: mymoney/mymoneyscheduletest.cpp:1340
+msgid "Fortnightly"
+msgstr "Co dwa tygodnie"
+
+#: mymoney/mymoneyscheduled.cpp:883 mymoney/mymoneyscheduled.cpp:941
+#: mymoney/mymoneyscheduled.cpp:1275 mymoney/mymoneyscheduletest.cpp:1341
+#, fuzzy
+msgid "Every half month"
+msgstr "Co cztery miesiące"
+
+#: mymoney/mymoneyscheduled.cpp:887 mymoney/mymoneyscheduled.cpp:934
+#: mymoney/mymoneyscheduled.cpp:1279 mymoney/mymoneyscheduletest.cpp:1342
+msgid "Every four weeks"
+msgstr "Co cztery tygodnie"
+
+#: mymoney/mymoneyscheduled.cpp:893 mymoney/mymoneyscheduled.cpp:935
+#: mymoney/mymoneyscheduled.cpp:1285 mymoney/mymoneyscheduletest.cpp:1344
+#, fuzzy
+msgid "Every eight weeks"
+msgstr "Co drugi tydzień"
+
+#: mymoney/mymoneyscheduled.cpp:895 mymoney/mymoneyscheduled.cpp:948
+#: mymoney/mymoneyscheduled.cpp:1287 mymoney/mymoneyscheduletest.cpp:1345
+msgid "Every two months"
+msgstr "Co dwa miesiące"
+
+#: mymoney/mymoneyscheduled.cpp:897 mymoney/mymoneyscheduled.cpp:949
+#: mymoney/mymoneyscheduled.cpp:1289 mymoney/mymoneyscheduletest.cpp:1346
+msgid "Every three months"
+msgstr "Co trzy miesiące"
+
+#: mymoney/mymoneyscheduled.cpp:899 mymoney/mymoneyscheduled.cpp:1291
+#: mymoney/mymoneyscheduletest.cpp:1347 widgets/rc.cpp:76
+msgid "Quarterly"
+msgstr "Co kwartał"
+
+#: mymoney/mymoneyscheduled.cpp:901 mymoney/mymoneyscheduled.cpp:950
+#: mymoney/mymoneyscheduled.cpp:1293 mymoney/mymoneyscheduletest.cpp:1348
+msgid "Every four months"
+msgstr "Co cztery miesiące"
+
+#: mymoney/mymoneyscheduled.cpp:903 mymoney/mymoneyscheduled.cpp:951
+#: mymoney/mymoneyscheduled.cpp:1295 mymoney/mymoneyscheduletest.cpp:1349
+msgid "Twice yearly"
+msgstr "Dwa razy do roku"
+
+#: mymoney/mymoneyscheduled.cpp:905 mymoney/mymoneyscheduled.cpp:957
+#: mymoney/mymoneyscheduled.cpp:1297 mymoney/mymoneyscheduletest.cpp:1350
+#: widgets/rc.cpp:20 widgets/rc.cpp:77
+msgid "Yearly"
+msgstr "Raz do roku"
+
+#: mymoney/mymoneyscheduled.cpp:907 mymoney/mymoneyscheduled.cpp:958
+#: mymoney/mymoneyscheduled.cpp:1299 mymoney/mymoneyscheduletest.cpp:1351
+msgid "Every other year"
+msgstr "Co dwa lata"
+
+#: mymoney/mymoneyscheduled.cpp:870 mymoney/mymoneyscheduled.cpp:913
+#: mymoney/mymoneyscheduled.cpp:966
+msgid "Any"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:885 mymoney/mymoneyscheduled.cpp:933
+#: mymoney/mymoneyscheduled.cpp:1277
+#, fuzzy
+msgid "Every three weeks"
+msgstr "Co drugi tydzień"
+
+#: mymoney/mymoneyscheduled.cpp:889 mymoney/mymoneyscheduled.cpp:925
+#: mymoney/mymoneyscheduled.cpp:1281
+#, fuzzy
+msgid "Every thirty days"
+msgstr "Co dwa lata"
+
+#: mymoney/mymoneyscheduled.cpp:971
+#, fuzzy
+msgid "Day"
+msgstr "Dni"
+
+#: mymoney/mymoneyscheduled.cpp:973 reports/listtable.cpp:206
+#: widgets/kmymoneycalendar.cpp:123 widgets/rc.cpp:97
+msgid "Week"
+msgstr "Tydzień"
+
+#: mymoney/mymoneyscheduled.cpp:975
+#, fuzzy
+msgid "Half-month"
+msgstr "Co cztery miesiące"
+
+#: mymoney/mymoneyscheduled.cpp:977 reports/listtable.cpp:205
+#: widgets/kmymoneycalendar.cpp:124 widgets/rc.cpp:96
+msgid "Month"
+msgstr "Miesiąc"
+
+#: dialogs/rc.cpp:400 mymoney/mymoneyscheduled.cpp:979 views/rc.cpp:14
+#, fuzzy
+msgid "Year"
+msgstr "Lata"
+
+#: mymoney/mymoneyscheduled.cpp:989
+msgid "Bill"
+msgstr "Opłata"
+
+#: dialogs/rc.cpp:107 dialogs/rc.cpp:162 dialogs/rc.cpp:249 dialogs/rc.cpp:754
+#: mymoney/mymoneyscheduled.cpp:992 widgets/kmymoneycombo.cpp:420
+#: widgets/register.cpp:571
+msgid "Deposit"
+msgstr "Wpłata"
+
+#: mymoney/mymoneyscheduled.cpp:995 reports/querytable.cpp:594
+#: reports/querytable.cpp:696 widgets/kmymoneycombo.cpp:419
+msgid "Transfer"
+msgstr "Przelew"
+
+#: mymoney/mymoneyscheduled.cpp:1035
+msgid "Any (Error)"
+msgstr "Dowolnie (błąd)"
+
+#: dialogs/rc.cpp:114 mymoney/mymoneyscheduled.cpp:1047
+msgid "Change the date to the previous Friday"
+msgstr "Zmień datę na poprzedni piątek"
+
+#: dialogs/rc.cpp:115 mymoney/mymoneyscheduled.cpp:1050
+msgid "Change the date to the next Monday"
+msgstr "Zmień datę na kolejny poniedziałek"
+
+#: mymoney/mymoneyscheduled.cpp:1053
+msgid "Do Nothing"
+msgstr "Nic nie rób"
+
+#: kmymoney2.cpp:312
+#, fuzzy
+msgid "Open database..."
+msgstr "Otwórz plik..."
+
+#: kmymoney2.cpp:313
+#, fuzzy
+msgid "Save as database..."
+msgstr "Zapisz jako..."
+
+#: kmymoney2.cpp:314
+msgid "Backup..."
+msgstr "Kopia zapasowa..."
+
+#: kmymoney2.cpp:315 kmymoney2.cpp:321
+#, fuzzy
+msgid "QIF..."
+msgstr "QIF ..."
+
+#: kmymoney2.cpp:316
+#, fuzzy
+msgid "Gnucash..."
+msgstr "Gnucash ..."
+
+#: kmymoney2.cpp:317
+#, fuzzy
+msgid "Statement file..."
+msgstr "Plik wyciągu ..."
+
+#: kmymoney2.cpp:319 kmymoney2.cpp:320
+#, fuzzy
+msgid "Account Template..."
+msgstr "Szablon konta ..."
+
+#: kmymoney2.cpp:322
+msgid "Personal Data..."
+msgstr "Dane osobiste..."
+
+#: kmymoney2.cpp:325
+#, fuzzy
+msgid "Dump Memory"
+msgstr "Zrzut pamięci..."
+
+#: kmymoney2.cpp:327
+#, fuzzy
+msgid "File-Information..."
+msgstr "Informacje o beneficjencie"
+
+#: kmymoney2.cpp:332
+msgid "Find transaction..."
+msgstr "Znajdź transakcję..."
+
+#: kmymoney2.cpp:337
+msgid "Show Transaction Detail"
+msgstr "Pokaż szczegóły transakcji"
+
+#: kmymoney2.cpp:338 rc.cpp:60
+msgid "Hide reconciled transactions"
+msgstr "Ukryj uzgodnione transakcje"
+
+#: kmymoney2.cpp:339 rc.cpp:57
+#, fuzzy
+msgid "Hide unused categories"
+msgstr "Ukryte kategorie"
+
+#: kmymoney2.cpp:340
+#, fuzzy
+msgid "Show all accounts"
+msgstr "Brak rachunku aktywów"
+
+#: kmymoney2.cpp:345
+#, fuzzy
+msgid "New institution..."
+msgstr "Nowa instytucja..."
+
+#: kmymoney2.cpp:346
+#, fuzzy
+msgid "Edit institution..."
+msgstr "Dodaj nową instytucję..."
+
+#: kmymoney2.cpp:347
+#, fuzzy
+msgid "Delete institution..."
+msgstr "Nowa instytucja..."
+
+#: kmymoney2.cpp:352
+msgid "New account..."
+msgstr "Nowe konto..."
+
+#: kmymoney2.cpp:354
+#, fuzzy
+msgid "Open ledger"
+msgstr "Otwórz plik."
+
+#: kmymoney2.cpp:355
+msgid "Reconcile..."
+msgstr "Uzgodnij..."
+
+#: kmymoney2.cpp:356
+#, fuzzy
+msgid ""
+"_: Finish reconciliation\n"
+"Finish"
+msgstr "Zakończ uzgadnianie"
+
+#: kmymoney2.cpp:357
+#, fuzzy
+msgid ""
+"_: Postpone reconciliation\n"
+"Postpone"
+msgstr "Przełóż uzgadnianie"
+
+#: kmymoney2.cpp:358
+#, fuzzy
+msgid "Edit account..."
+msgstr "Edytuj konto"
+
+#: kmymoney2.cpp:359
+#, fuzzy
+msgid "Delete account..."
+msgstr "Nowe konto..."
+
+#: kmymoney2.cpp:360
+#, fuzzy
+msgid "Close account"
+msgstr "Brak rachunku aktywów"
+
+#: kmymoney2.cpp:361
+#, fuzzy
+msgid "Reopen account"
+msgstr "konto przeciwstawne"
+
+#: kmymoney2.cpp:362
+#, fuzzy
+msgid "Transaction report"
+msgstr "Kwota transakcji"
+
+#: kmymoney2.cpp:364
+msgid "Show balance chart..."
+msgstr ""
+
+#: kmymoney2.cpp:366
+#, fuzzy
+msgid "Map to online account"
+msgstr "Mapuj do konta HBCI..."
+
+#: kmymoney2.cpp:367
+#, fuzzy
+msgid "Unmap account"
+msgstr "Kwota pożyczki"
+
+#: dialogs/settings/rc.cpp:126 kmymoney2.cpp:368 views/kpayeesview.cpp:363
+#: widgets/rc.cpp:50
+#, fuzzy
+msgid "Update"
+msgstr "Aktualizuj &wszystko"
+
+#: kmymoney2.cpp:372
+#, fuzzy
+msgid "Update account..."
+msgstr "Edytuj konto"
+
+#: kmymoney2.cpp:373
+#, fuzzy
+msgid "Update all accounts..."
+msgstr "Edytuj konto"
+
+#: kmymoney2.cpp:378
+msgid "New category..."
+msgstr "Nowa kategoria..."
+
+#: kmymoney2.cpp:379
+#, fuzzy
+msgid "Edit category..."
+msgstr "Edytuj kategorię"
+
+#: kmymoney2.cpp:380
+#, fuzzy
+msgid "Delete category..."
+msgstr "Nowa kategoria..."
+
+#: kmymoney2.cpp:386
+msgid "QIF Profile Editor..."
+msgstr "Edytor profilu QIF..."
+
+#: kmymoney2.cpp:387
+#, fuzzy
+msgid "Securities..."
+msgstr "Papiery wartościowe ..."
+
+#: kmymoney2.cpp:388
+#, fuzzy
+msgid "Currencies..."
+msgstr "Waluty ..."
+
+#: kmymoney2.cpp:389
+#, fuzzy
+msgid "Prices..."
+msgstr "Ceny ..."
+
+#: kmymoney2.cpp:390
+msgid "Update Stock and Currency Prices..."
+msgstr "Aktualizuj ceny walut i papierów wartościowych..."
+
+#: kmymoney2.cpp:391
+msgid "Consistency Check"
+msgstr "Sprawdzenie spójności"
+
+#: kmymoney2.cpp:392
+msgid "Performance-Test"
+msgstr ""
+
+#: kmymoney2.cpp:393
+msgid "KCalc..."
+msgstr ""
+
+#: kmymoney2.cpp:399
+msgid "Enable all messages"
+msgstr "Włącz wszystkie komunikaty"
+
+#: kmymoney2.cpp:400
+msgid "KDE language settings..."
+msgstr ""
+
+#: kmymoney2.cpp:405
+msgid "&Show tip of the day"
+msgstr "&Pokaż podpowiedź dnia"
+
+#: kmymoney2.cpp:410
+#, fuzzy
+msgid ""
+"_: New transaction button\n"
+"New"
+msgstr "Pokaż formularz transakcji"
+
+#: kmymoney2.cpp:415
+#, fuzzy
+msgid ""
+"_: Edit transaction button\n"
+"Edit"
+msgstr "Podziel transakcję"
+
+#: kmymoney2.cpp:417
+#, fuzzy
+msgid ""
+"_: Enter transaction\n"
+"Enter"
+msgstr "Dowolna transakcja"
+
+#: kmymoney2.cpp:420
+#, fuzzy
+msgid ""
+"_: Edit split button\n"
+"Edit splits"
+msgstr "Edytuj podziały..."
+
+#: kmymoney2.cpp:421
+#, fuzzy
+msgid ""
+"_: Cancel transaction edit\n"
+"Cancel"
+msgstr "Ważna transakcja"
+
+#: kmymoney2.cpp:422
+#, fuzzy
+msgid ""
+"_: Delete transaction\n"
+"Delete"
+msgstr "Usuń transakcję"
+
+#: kmymoney2.cpp:423
+#, fuzzy
+msgid ""
+"_: Duplicate transaction\n"
+"Duplicate"
+msgstr "Podziel transakcję"
+
+#: kmymoney2.cpp:425 kmymoney2.cpp:4826 kmymoney2.cpp:5107
+#, fuzzy
+msgid ""
+"_: Button text for match transaction\n"
+"Match"
+msgstr "Użyj tego przycisku, żeby zapisać tę transakcję"
+
+#: kmymoney2.cpp:426
+#, fuzzy
+msgid ""
+"_: Accept 'imported' and 'matched' transaction\n"
+"Accept"
+msgstr "Import transakcji"
+
+#: kmymoney2.cpp:428
+#, fuzzy
+msgid ""
+"_: Toggle reconciliation flag\n"
+"Toggle"
+msgstr "Przełóż uzgadnianie"
+
+#: kmymoney2.cpp:429
+#, fuzzy
+msgid ""
+"_: Mark transaction cleared\n"
+"Cleared"
+msgstr "Przeszukuj transakcje"
+
+#: kmymoney2.cpp:430
+#, fuzzy
+msgid ""
+"_: Mark transaction reconciled\n"
+"Reconciled"
+msgstr "Transakcja uprzednio uzgodniona"
+
+#: kmymoney2.cpp:431
+#, fuzzy
+msgid ""
+"_: Mark transaction not reconciled\n"
+"Not reconciled"
+msgstr "Transakcja uprzednio uzgodniona"
+
+#: kmymoney2.cpp:432
+#, fuzzy
+msgid ""
+"_: Select all transactions\n"
+"Select all"
+msgstr "Usuń transakcję"
+
+#: kmymoney2.cpp:434 kmymoney2.cpp:5497
+#, fuzzy
+msgid "Goto account"
+msgstr "konto"
+
+#: kmymoney2.cpp:435 kmymoney2.cpp:5495
+#, fuzzy
+msgid "Goto payee"
+msgstr "Przejdź do beneficjenta/odbiorcy"
+
+#: kmymoney2.cpp:436
+#, fuzzy
+msgid "Create scheduled transaction..."
+msgstr "Wprowadź zaplanowaną transakcję"
+
+#: kmymoney2.cpp:437
+msgid "Assign next number"
+msgstr ""
+
+#: kmymoney2.cpp:438
+#, fuzzy
+msgid ""
+"_: Combine transactions\n"
+"Combine"
+msgstr "Napraw transakcje"
+
+#: kmymoney2.cpp:440
+#, fuzzy
+msgid "New investment"
+msgstr "Usuń inwestycję"
+
+#: kmymoney2.cpp:441
+#, fuzzy
+msgid "Edit investment..."
+msgstr "Usuń inwestycję"
+
+#: kmymoney2.cpp:442
+#, fuzzy
+msgid "Delete investment..."
+msgstr "Usuń inwestycję"
+
+#: kmymoney2.cpp:443
+#, fuzzy
+msgid "Online price update..."
+msgstr "Aktualizacja cen online..."
+
+#: kmymoney2.cpp:444
+#, fuzzy
+msgid "Manual price update..."
+msgstr "Ręczna aktualizacja cen..."
+
+#: kmymoney2.cpp:446
+#, fuzzy
+msgid "New scheduled transaction..."
+msgstr "Wprowadź zaplanowaną transakcję"
+
+#: kmymoney2.cpp:447
+#, fuzzy
+msgid "Edit scheduled transaction..."
+msgstr "Wprowadź zaplanowaną transakcję"
+
+#: kmymoney2.cpp:448
+#, fuzzy
+msgid "Delete scheduled transaction..."
+msgstr "Wprowadź zaplanowaną transakcję"
+
+#: kmymoney2.cpp:449
+#, fuzzy
+msgid "Duplicate scheduled transaction"
+msgstr "Wprowadź zaplanowaną transakcję"
+
+#: kmymoney2.cpp:450
+#, fuzzy
+msgid "Enter next transaction..."
+msgstr "Usuń transakcję ..."
+
+#: kmymoney2.cpp:451
+#, fuzzy
+msgid "Skip next transaction..."
+msgstr "Pomiń tę transakcję"
+
+#: kmymoney2.cpp:453
+#, fuzzy
+msgid "New payee"
+msgstr "Nowy beneficjent"
+
+#: kmymoney2.cpp:454
+#, fuzzy
+msgid "Rename payee"
+msgstr "Usuń beneficjenta"
+
+#: kmymoney2.cpp:455
+#, fuzzy
+msgid "Delete payee"
+msgstr "Usuń beneficjenta..."
+
+#: kmymoney2.cpp:457
+msgid "New budget"
+msgstr ""
+
+#: kmymoney2.cpp:458
+#, fuzzy
+msgid "Rename budget"
+msgstr "Zmień nazwę..."
+
+#: kmymoney2.cpp:459
+#, fuzzy
+msgid "Delete budget"
+msgstr "Usunąć raport?"
+
+#: kmymoney2.cpp:460
+#, fuzzy
+msgid "Copy budget"
+msgstr "Budżety"
+
+#: kmymoney2.cpp:461
+msgid "Change budget year"
+msgstr ""
+
+#: kmymoney2.cpp:462
+msgid ""
+"_: Budget based on forecast\n"
+"Forecast"
+msgstr ""
+
+#: kmymoney2.cpp:467 kmymoney2.cpp:3990 kmymoney2.cpp:3993 kmymoney2.cpp:3999
+msgid "New currency"
+msgstr "Nowa waluta"
+
+#: kmymoney2.cpp:468 kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, fuzzy
+msgid "Rename currency"
+msgstr "Nowa waluta"
+
+#: kmymoney2.cpp:469 kmymoney2.cpp:4039
+#, fuzzy
+msgid "Delete currency"
+msgstr "Wybierz walutę podstawową"
+
+#: dialogs/rc.cpp:69 kmymoney2.cpp:470
+msgid "Select as base currency"
+msgstr "Wybierz jako walutę podstawową"
+
+#: kmymoney2.cpp:481
+msgid "View back"
+msgstr "Widok wstecz"
+
+#: kmymoney2.cpp:482
+msgid "View forward"
+msgstr "Widok w przód"
+
+#: kmymoney2.cpp:611
+msgid "KMyMoney file needs saving. Save ?"
+msgstr "Plik KMyMoney potrzebuje zapisania. Zapisać?"
+
+#: kmymoney2.cpp:757
+msgid "Creating new document..."
+msgstr "Tworzenie nowego dokumentu..."
+
+#: kmymoney2.cpp:869 kmymoney2.cpp:884
+msgid "Open a file."
+msgstr "Otwórz plik."
+
+#: kmymoney2.cpp:872
+msgid ""
+"%1|KMyMoney files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Pliki KMyMoney\n"
+"%2|Wszystkie pliki (*.*)"
+
+#: kmymoney2.cpp:873
+msgid "Open File..."
+msgstr "Otwórz plik..."
+
+#: kmymoney2.cpp:925 kstartuplogo.cpp:100
+msgid "Loading file..."
+msgstr "Wczytywanie pliku..."
+
+#: kmymoney2.cpp:986
+msgid ""
+"<b>%1</b> is either an invalid filename or the file does not exist. You can "
+"open another file or create a new one."
+msgstr ""
+"<b>%1</b> albo nie jest ważną nazwą pliku, albo plik nie istnieje. Możesz "
+"otworzyć inny plik lub stworzyć nowy."
+
+#: kmymoney2.cpp:986
+msgid "File not found"
+msgstr "Nie znaleziono pliku"
+
+#: kmymoney2.cpp:989
+msgid "File <b>%1</b> is already opened in another instance of KMyMoney"
+msgstr "Inna instancja KMyMoney już posiada otwarty plik <b>%1</b>"
+
+#: kmymoney2.cpp:989
+msgid "Duplicate open"
+msgstr "Ponowne otwarcie"
+
+#: kmymoney2.cpp:1001
+msgid "Saving file..."
+msgstr "Zapisywanie pliku..."
+
+#: kmymoney2.cpp:1035 kmymoney2.cpp:1047 kmymoney2.cpp:1071
+#, c-format
+msgid "Additional encryption key(s) to be used: %1"
+msgstr ""
+
+#: kmymoney2.cpp:1056
+msgid "Saving file with a new filename..."
+msgstr "Zapisywanie pliku z nową nazwą..."
+
+#: kmymoney2.cpp:1067
+msgid "Encryption key to be used"
+msgstr ""
+
+#: kmymoney2.cpp:1072
+#, fuzzy
+msgid "Manage additional keys"
+msgstr "Wprowadź dodatkowe opłaty"
+
+#: kmymoney2.cpp:1079
+#, fuzzy
+msgid "No encryption"
+msgstr "Szyfrowanie"
+
+#: kmymoney2.cpp:1102
+#, fuzzy
+msgid ""
+"_: KMyMoney (Filefilter)\n"
+"KMyMoney files"
+msgstr "Brak otwartego pliku KMyMoney"
+
+#: kmymoney2.cpp:1103
+msgid ""
+"_: XML (Filefilter)\n"
+"XML files"
+msgstr ""
+
+#: kmymoney2.cpp:1104
+msgid ""
+"_: Anonymous (Filefilter)\n"
+"Anonymous files"
+msgstr ""
+
+#: kmymoney2.cpp:1105
+#, fuzzy
+msgid "All files"
+msgstr "Wszystkie daty"
+
+#: kmymoney2.cpp:1193
+#, fuzzy
+msgid "Saving file to database..."
+msgstr "Zapisywanie pliku..."
+
+#: kmymoney2.cpp:1207
+msgid "Cannot save to current database."
+msgstr ""
+
+#: kmymoney2.cpp:1225
+msgid "Closing window..."
+msgstr "Zamykanie okna..."
+
+#: kmymoney2.cpp:1228 kmymoney2.cpp:1249
+msgid "The file has been changed, save it ?"
+msgstr "Plik został zmieniony, zapisać go?"
+
+#: kmymoney2.cpp:1339 kmymoney2.cpp:1352
+msgid "Ready."
+msgstr "Gotowy."
+
+#: kmymoney2.cpp:1397 kmymoney2.cpp:1433
+#, fuzzy
+msgid "No KMyMoneyFile open"
+msgstr "Brak otwartego pliku KMyMoney"
+
+#: kmymoney2.cpp:1401
+msgid "Viewing personal data..."
+msgstr "Przeglądanie danych osobistych..."
+
+#: kmymoney2.cpp:1408
+msgid "Edit Personal Data"
+msgstr "Edycja danych osobistych"
+
+#: kmymoney2.cpp:1424
+#, fuzzy, c-format
+msgid "Unable to store user information: %1"
+msgstr "Nie można pobrać informacji o koncie"
+
+#: kmymoney2.cpp:1447
+msgid "Importing account templates."
+msgstr "Importowanie szablonów kont."
+
+#: kmymoney2.cpp:1462
+#, fuzzy
+msgid "Unable to import template(s): %1, thrown in %2:%3"
+msgstr "Nie można przetworzyć daty %1 z użyciem formatu %2: %3"
+
+#: kmymoney2.cpp:1471
+#, fuzzy
+msgid "Exporting account templates."
+msgstr "Importowanie szablonów kont."
+
+#: kmymoney2.cpp:1474
+msgid ""
+"*.kmt|KMyMoney template files\n"
+"*.*|All files"
+msgstr ""
+"*.kmt|Pliki szablonów KMyMoney\n"
+"*.*|Wszystkie pliki"
+
+#: kmymoney2.cpp:1475
+msgid "Save as..."
+msgstr "Zapisz jako..."
+
+#: kmymoney2.cpp:1517
+msgid "Importing file..."
+msgstr "Importowanie pliku..."
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "The statements have been processed with the following results:"
+msgstr ""
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:1754 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+#, fuzzy
+msgid "Statement stats"
+msgstr "Data wyciągu:"
+
+#: kmymoney2.cpp:1602
+msgid ""
+"You cannot import GnuCash data into an existing file. Do you wish to save "
+"this file?"
+msgstr ""
+"Nie można zaimportować danych GnuCash do istniejącego pliku. Czy chcesz go "
+"zapisać?"
+
+#: kmymoney2.cpp:1615
+msgid "Importing a Gnucash file."
+msgstr "Importowanie pliku Gnucash."
+
+#: kmymoney2.cpp:1618
+msgid ""
+"%1|Gnucash files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Pliki Gnucash\n"
+"%2|Wszystkie pliki (*.*)"
+
+#: kmymoney2.cpp:1619
+msgid "Import Gnucash file..."
+msgstr "Import pliku Gnucash..."
+
+#: kmymoney2.cpp:1658
+msgid "Importing an XML Statement."
+msgstr "Importowanie wyciągu XML."
+
+#: kmymoney2.cpp:1661
+msgid ""
+"%1|XML files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Pliki XML\n"
+"%2|Wszystkie pliki (*.*)"
+
+#: kmymoney2.cpp:1662
+msgid "Import XML Statement..."
+msgstr "Import wyciągu XML..."
+
+#: kmymoney2.cpp:1718
+msgid "Error importing %1: This file is not a valid KMM statement file."
+msgstr "Błąd przy imporcie %1. Plik nie jest poprawnym wyciągiem KMM."
+
+#: kmymoney2.cpp:1718
+msgid "Invalid Statement"
+msgstr "Nieprawidłowy wyciąg"
+
+#: kmymoney2.cpp:1754
+msgid "The statement has been processed with the following results:"
+msgstr ""
+
+#: kmymoney2.cpp:1763
+msgid "Exporting file..."
+msgstr "Eksportowanie pliku..."
+
+#: kmymoney2.cpp:1786
+#, fuzzy
+msgid "The file <b>%1</b> already exists. Do you really want to override it?"
+msgstr "Kategoria <b>%1</b> nie występuje obecnie. Czy chcesz ją utworzyć?"
+
+#: kmymoney2.cpp:1786
+msgid "File already exists"
+msgstr ""
+
+#: dialogs/rc.cpp:347 dialogs/rc.cpp:649 dialogs/rc.cpp:798 kmymoney2.cpp:1815
+msgid "General"
+msgstr "Ogólne"
+
+#: kmymoney2.cpp:1816
+msgid "Register"
+msgstr "Rejestr"
+
+#: kmymoney2.cpp:1817 views/khomeview.cpp:88 views/kmymoneyview.cpp:136
+msgid "Home"
+msgstr "Strona domowa"
+
+#: kmymoney2.cpp:1818 views/kmymoneyview.cpp:176
+#, fuzzy
+msgid ""
+"Scheduled\n"
+"transactions"
+msgstr "Zaplanowane transakcje"
+
+#: kmymoney2.cpp:1819
+msgid "Encryption"
+msgstr "Szyfrowanie"
+
+#: kmymoney2.cpp:1820
+#, fuzzy
+msgid "Colors"
+msgstr "Kolory"
+
+#: dialogs/rc.cpp:344 dialogs/settings/rc.cpp:107 kmymoney2.cpp:1822
+#: widgets/rc.cpp:33
+msgid "Online Quotes"
+msgstr "Wyceny online"
+
+#: kmymoney2.cpp:1823 reports/pivottable.cpp:2426 views/kmymoneyview.cpp:251
+#: views/kmymoneyview.cpp:253 views/kreportsview.cpp:1415 views/rc.cpp:41
+msgid "Forecast"
+msgstr ""
+
+#: kmymoney2.cpp:1824
+#, fuzzy
+msgid "Plugins"
+msgstr "&Wtyczki"
+
+#: kmymoney2.cpp:1893
+msgid ""
+"The file must be saved first before it can be backed up. Do you want to "
+"continue?"
+msgstr ""
+"Plik musi zostać zapisany przed robieniem kopii zapasowej. Czy chcesz "
+"kontynuować?"
+
+#: kmymoney2.cpp:1910
+msgid ""
+"The current implementation of the backup functionality only supports local "
+"files as source files! Your current source file is '%1'."
+msgstr ""
+"Obecna implementacja funkcjonalności kopii zapasowych obsługuje jako pliki "
+"źródłowe tylko pliki lokalne. Twoim aktualnym plikiem źródłowym jest '%1'."
+
+#: kmymoney2.cpp:1913
+msgid "Local files only"
+msgstr "Tylko pliki lokalne"
+
+#: kmymoney2.cpp:1928
+#, c-format
+msgid "Mounting %1"
+msgstr "Montowanie %1"
+
+#: kmymoney2.cpp:1967
+msgid "Backup file for today exists on that device. Replace ?"
+msgstr "Dzisiejsza kopia zapasowa istnieje na tym urządzeniu. Zastąpić?"
+
+#: dialogs/rc.cpp:7 kmymoney2.cpp:1967 kmymoney2.cpp:1994 kmymoney2.cpp:2024
+#: kmymoney2.cpp:2032 kmymoney2.cpp:2057 kmymoney2.cpp:2059
+msgid "Backup"
+msgstr "Kopia zapasowa"
+
+#: kmymoney2.cpp:1967
+msgid "&Replace"
+msgstr "&Zastąp"
+
+#: kmymoney2.cpp:1972 kmymoney2.cpp:1997 kmymoney2.cpp:2016 kmymoney2.cpp:2035
+#, c-format
+msgid "Unmounting %1"
+msgstr "Odmontowywanie %1"
+
+#: kmymoney2.cpp:1987
+#, c-format
+msgid "Writing %1"
+msgstr "Zapisywanie %1"
+
+#: kmymoney2.cpp:1994
+msgid "Error mounting device"
+msgstr "Błąd montowania urządzenia"
+
+#: converter/mymoneygncreader.cpp:1995 kmymoney2.cpp:2023 kmymoney2.cpp:2055
+msgid "Done"
+msgstr "Zrobione"
+
+#: kmymoney2.cpp:2024 kmymoney2.cpp:2057
+msgid "File successfully backed up"
+msgstr "Pomyślnie utworzono kopię zapasową"
+
+#: kmymoney2.cpp:2032
+msgid "Error copying file to device"
+msgstr "Błąd przy kopiowaniu pliku na urządzenie"
+
+#: kmymoney2.cpp:2059
+msgid "Error unmounting device"
+msgstr "Błąd przy odmontowywaniu urządzenia"
+
+#: kmymoney2.cpp:2143
+#, fuzzy, c-format
+msgid "Cannot add institution: %1"
+msgstr "Nie można dodać instytucji: "
+
+#: kmymoney2.cpp:2185
+#, fuzzy, c-format
+msgid "Unable to store institution: %1"
+msgstr "Nie można edytować instytucji: "
+
+#: kmymoney2.cpp:2192
+#, fuzzy, c-format
+msgid "Unable to edit institution: %1"
+msgstr "Nie można edytować instytucji: "
+
+#: kmymoney2.cpp:2203
+#, fuzzy
+msgid "Do you really want to delete institution <b>%1</b> ?"
+msgstr "Czy na pewno usunąć profil '%1'?"
+
+#: kmymoney2.cpp:2211 kmymoney2.cpp:2215
+#, fuzzy, c-format
+msgid "Unable to delete institution: %1"
+msgstr "Nie można edytować instytucji: "
+
+#: kmymoney2.cpp:2268
+#, fuzzy, c-format
+msgid "Unable to find account: %1"
+msgstr "Nie można wczytać kont:"
+
+#: kmymoney2.cpp:2309
+msgid ""
+"This account is a liability and if the opening balance represents money "
+"owed, then it should be negative. Negate the amount?\n"
+"\n"
+"Please click Yes to change the opening balance to %1,\n"
+"Please click No to leave the amount as %2,\n"
+"Please click Cancel to abort the account creation."
+msgstr ""
+"Konto to jest kontem pasywów a jeśli stan otwarcia reprezentuje pieniądze, "
+"które jest się winnym, wtedy powinna to być wartość ujemna. Zanegować "
+"kwotę?\n"
+"\n"
+"Proszę kliknąć Tak, żeby zmienić stan otwarcia na %1,\n"
+"Proszę kliknąć Nie, żebu pozostawić sumę %2,\n"
+"Proszę wcisnąć Anuluj, żeby przerwać tworzenie konta."
+
+#: kmymoney2.cpp:2345 kmymoney2.cpp:2346
+msgid "Loan payout"
+msgstr "Uruchomienie pożyczki"
+
+#: dialogs/knewloanwizard.cpp:892 kmymoney2.cpp:2374
+#, fuzzy, c-format
+msgid "Unable to add account: %1"
+msgstr "Nie można wczytać kont:"
+
+#: kmymoney2.cpp:2392
+#, fuzzy
+msgid ""
+"The category <b>%1</b> currently does not exist. Do you want to create it?"
+"<p><i>The parent account will default to <b>%2</b> but can be changed in the "
+"following dialog</i>."
+msgstr "Kategoria <b>%1</b> nie występuje obecnie. Czy chcesz ją utworzyć?"
+
+#: kmymoney2.cpp:2392
+msgid "Create category"
+msgstr "Stwórz kategorię"
+
+#: kmymoney2.cpp:2429
+msgid "Create a new Category"
+msgstr "Stwórz nową kategorię"
+
+#: kmymoney2.cpp:2505
+#, fuzzy, c-format
+msgid "Unable to create account: %1"
+msgstr "Nie można usunąć konta: "
+
+#: kmymoney2.cpp:2516
+#, fuzzy
+msgid ""
+"The security <b>%1</b> currently does not exist as sub-account of <b>%2</b>. "
+"Do you want to create it?"
+msgstr "Kategoria <b>%1</b> nie występuje obecnie. Czy chcesz ją utworzyć?"
+
+#: kmymoney2.cpp:2517
+#, fuzzy
+msgid "Create security"
+msgstr "Usuń papier wartościowy"
+
+#: kmymoney2.cpp:2551
+#, fuzzy
+msgid "Do you really want to delete the investment <b>%1</b>?"
+msgstr "Czy na pewno usunąć wybraną inwestycję?"
+
+#: kmymoney2.cpp:2551
+msgid "Delete investment"
+msgstr "Usuń inwestycję"
+
+#: kmymoney2.cpp:2558
+#, fuzzy, c-format
+msgid "Unable to delete investment: %1"
+msgstr "Nie można edytować instytucji: "
+
+#: kmymoney2.cpp:2640 kmymoney2.cpp:2646
+#, fuzzy
+msgid "Unable to add scheduled transaction: "
+msgstr "Nie można dodać transakcji: "
+
+#: kmymoney2.cpp:2722
+#, fuzzy
+msgid "Adjusting transactions..."
+msgstr "Wczytywanie transakcji..."
+
+#: kmymoney2.cpp:2747
+#, fuzzy
+msgid "Adjusting scheduled transactions..."
+msgstr "Wczytywanie transakcji..."
+
+#: kmymoney2.cpp:2765
+#, fuzzy
+msgid "Adjusting budgets..."
+msgstr "Wczytywanie harmonogramów..."
+
+#: kmymoney2.cpp:2783
+msgid ""
+"Unable to exchange category <b>%1</b> with category <b>%2</b>. Reason: %3"
+msgstr ""
+
+#: kmymoney2.cpp:2804
+#, fuzzy
+msgid "Do you really want to delete category <b>%1</b>?"
+msgstr "Czy na pewno usunąć kategorię '%1'"
+
+#: kmymoney2.cpp:2811
+#, fuzzy
+msgid "Unable to delete category <b>%1</b>. Cause: %2"
+msgstr "Nie można usunąć kategorii: "
+
+#: kmymoney2.cpp:2823
+msgid ""
+"Do you want to delete category <b>%1</b> with all its sub-categories or only "
+"the category itself? If you only delete the category itself, all its sub-"
+"categories will be made sub-categories of <b>%2</b>."
+msgstr ""
+
+#: kmymoney2.cpp:2827
+#, fuzzy
+msgid "Delete all"
+msgstr "Zaznacz wszystko"
+
+#: kmymoney2.cpp:2828
+#, fuzzy
+msgid "Just the category"
+msgstr "Stwórz kategorię"
+
+#: kmymoney2.cpp:2858
+msgid ""
+"Some sub-categories of category <b>%1</b> cannot be deleted, because they "
+"are still used. They will be made sub-categories of <b>%2</b>. Proceed?"
+msgstr ""
+
+#: kmymoney2.cpp:2878
+msgid "Unable to delete a sub-category of category <b>%1</b>. Reason: %2"
+msgstr ""
+
+#: kmymoney2.cpp:2889
+#, fuzzy
+msgid "Do you really want to delete account <b>%1</b>?"
+msgstr "Czy na pewno usunąć konto '%1'"
+
+#: kmymoney2.cpp:2901
+#, fuzzy
+msgid "Unable to delete account '%1'. Cause: %2"
+msgstr "Nie można wczytać kont:"
+
+#: kmymoney2.cpp:2917
+#, fuzzy
+msgid "Edit account '%1'"
+msgstr "Edytuj konto"
+
+#: kmymoney2.cpp:2922
+#, fuzzy
+msgid "Edit category '%1'"
+msgstr "Edytuj kategorię"
+
+#: kmymoney2.cpp:3008
+#, fuzzy
+msgid "Unable to modify account '%1'. Cause: %2"
+msgstr "Nie można wczytać kont:"
+
+#: kmymoney2.cpp:3065
+#, fuzzy
+msgid ""
+"KMyMoney has detected some overdue scheduled transactions for this account. "
+"Do you want to enter those scheduled transactions now?"
+msgstr ""
+"Co najmniej jeden z podziałów tej transakcji został rozliczony. Czy chcesz "
+"kontynuować i mimo to edytować transakcję?"
+
+#: kmymoney2.cpp:3065
+#, fuzzy
+msgid "Scheduled transactions found"
+msgstr "Zaplanowane transakcje"
+
+#: kmymoney2.cpp:3163
+msgid ""
+"You are about to finish the reconciliation of this account with a difference "
+"between your bank statement and the transactions marked as cleared.\n"
+"Are you sure you want to finish the reconciliation ?"
+msgstr ""
+
+#: kmymoney2.cpp:3165
+#, fuzzy
+msgid "Confirm end of reconciliation"
+msgstr "Przełóż uzgadnianie"
+
+#: kmymoney2.cpp:3339
+msgid ""
+"You have closed this account. It remains in the system because you have "
+"transactions which still refer to it, but is not shown in the views. You can "
+"make it visible again by going to the View menu and selecting <b>Show all "
+"accounts</b> or by unselecting the <b>Don't show closed accounts</b> setting."
+msgstr ""
+
+#: kmymoney2.cpp:3379
+msgid "<b>%1</b> cannot be moved to institution <b>%2</b>. Reason: %3"
+msgstr ""
+
+#: kmymoney2.cpp:3393
+msgid "<b>%1</b> cannot be moved to <b>%2</b>. Reason: %3"
+msgstr ""
+
+#: kmymoney2.cpp:3408
+#, fuzzy
+msgid "%1 YTD Account Transactions"
+msgstr "Transakcje podatkowe"
+
+#: dialogs/kbalancechartdlg.cpp:71 kmymoney2.cpp:3409
+#: views/kforecastview.cpp:650 views/khomeview.cpp:276
+#: views/khomeview.cpp:1384 views/kreportsview.cpp:619
+#, fuzzy
+msgid "Generated Report"
+msgstr "Usunąć raport?"
+
+#: dialogs/rc.cpp:324 dialogs/settings/rc.cpp:80 kmymoney2.cpp:3411
+#: views/kreportsview.cpp:1062 views/rc.cpp:58 views/rc.cpp:59
+msgid "Transactions"
+msgstr "Transakcje"
+
+#: kmymoney2.cpp:3449
+#, fuzzy, c-format
+msgid "Unable to add scheduled transaction: %1"
+msgstr "Nie można dodać harmonogramu: "
+
+#: kmymoney2.cpp:3449
+#, fuzzy
+msgid "Add scheduled transaction"
+msgstr "Wprowadź zaplanowaną transakcję"
+
+#: kmymoney2.cpp:3489
+msgid ""
+"You have entered a scheduled transaction date of <b>%1</b>. Because the "
+"scheduled transaction was last paid on <b>%2</b>, KMyMoney will "
+"automatically adjust the scheduled transaction date to the next date unless "
+"the last payment date is reset. Do you want to reset the last payment date?"
+msgstr ""
+
+#: kmymoney2.cpp:3489
+#, fuzzy
+msgid "Reset Last Payment Date"
+msgstr "Płatności dla"
+
+#: kmymoney2.cpp:3499 kmymoney2.cpp:3519 kmymoney2.cpp:3531
+#, fuzzy
+msgid "Unable to modify scheduled transaction '%1'"
+msgstr "Nie można zmodyfikować harmonogramu: "
+
+#: kmymoney2.cpp:3543
+#, fuzzy
+msgid "Are you sure you want to delete the scheduled transaction <b>%1</b>?"
+msgstr "Czy na pewno usunąć wybrany harmonogram?"
+
+#: kmymoney2.cpp:3546
+#, fuzzy
+msgid ""
+"In case of loan payments it is currently not possible to recreate the "
+"scheduled transaction."
+msgstr ""
+"W przypadku spłat pożyczki nie jest obecnie możliwe ponowne stworzenie "
+"harmonogramu"
+
+#: kmymoney2.cpp:3555
+#, fuzzy
+msgid "Unable to remove scheduled transaction '%1'"
+msgstr "Nie można usunąć harmonogramu"
+
+#: kmymoney2.cpp:3569
+#, fuzzy, c-format
+msgid ""
+"_: Copy of scheduled transaction name\n"
+"Copy of %1"
+msgstr "Wyrzuć podejrzane zaplanowane transakcje"
+
+#: kmymoney2.cpp:3581 kmymoney2.cpp:4352
+#, fuzzy
+msgid "Unable to duplicate transaction(s): %1, thrown in %2:%3"
+msgstr "Nie można dodać transakcji: "
+
+#: kmymoney2.cpp:3595
+#, fuzzy
+msgid ""
+"Do you really want to skip the <b>%1</b> transaction scheduled for <b>%2</b>?"
+msgstr ""
+"Czy na pewno chcesz przenieść <b>%1</b>, żeby stało się podkontem <b>%2</b>?"
+
+#: kmymoney2.cpp:3605
+#, fuzzy
+msgid "Unable to skip scheduled transaction <b>%1</b>."
+msgstr "Nie można edytować harmonogramu"
+
+#: kmymoney2.cpp:3618
+#, fuzzy
+msgid "Unknown scheduled transaction '%1'"
+msgstr "Wprowadź zaplanowaną transakcję"
+
+#: kmymoney2.cpp:3673
+#, fuzzy
+msgid ""
+"Are you sure you wish to stop this scheduled transaction from being entered "
+"into the register?\n"
+"\n"
+"KMyMoney will prompt you again next time it starts unless you manually enter "
+"it later."
+msgstr ""
+"Czy na pewno powstrzymać harmonogram przed wprowadzeniem do rejestru?\n"
+"\n"
+"KMyMoney zapyta ponownie przy kolejnym uruchomieniu, chyba że wprowadzisz go "
+"później ręcznie."
+
+#: kmymoney2.cpp:3725 kmymoney2.cpp:3732
+#, fuzzy
+msgid "Unable to enter scheduled transaction '%1'"
+msgstr "Wprowadź zaplanowaną transakcję"
+
+#: kmymoney2.cpp:3743 kmymoney2.cpp:3783
+msgid "New Payee"
+msgstr "Nowy beneficjent"
+
+#: kmymoney2.cpp:3745
+#, fuzzy
+msgid "Do you want to add <b>%1</b> as payer/receiver ?"
+msgstr "Czy chcesz dodać '%1' jako beneficjenta/odbiorcę?"
+
+#: converter/mymoneystatementreader.cpp:892 kmymoney2.cpp:3747
+msgid "New payee/receiver"
+msgstr "Nowy beneficjent/odbiorca"
+
+#: kmymoney2.cpp:3773
+msgid "Unable to add payee"
+msgstr "Nie można dodać beneficjenta"
+
+#: kmymoney2.cpp:3826
+#, fuzzy
+msgid "Do you really want to remove the payee <b>%1</b>?"
+msgstr "Czy na pewno usunąć tego beneficjenta: "
+
+#: kmymoney2.cpp:3828
+#, fuzzy
+msgid "Do you really want to remove all selected payees?"
+msgstr "Czy na pewno usunąć tego beneficjenta: "
+
+#: kmymoney2.cpp:3830
+msgid "Remove Payee"
+msgstr "Usuń beneficjenta"
+
+#: kmymoney2.cpp:3870
+msgid ""
+"At least one transaction/scheduled transaction is still referenced by a "
+"payee. Currently you have all payees selected. However, at least one payee "
+"must remain so that the transaction/scheduled transaction can be reassigned."
+msgstr ""
+
+#: kmymoney2.cpp:3925
+#, fuzzy
+msgid "Unable to reassign payee of transaction/split"
+msgstr "Nie można usunąć transakcji"
+
+#: converter/mymoneyqifreader.cpp:534 converter/mymoneystatementreader.cpp:959
+#: kmymoney2.cpp:3926 kmymoney2.cpp:3983 views/kbudgetview.cpp:636
+#: views/kbudgetview.cpp:737 views/kbudgetview.cpp:751
+#: views/kpayeesview.cpp:519 views/kpayeesview.cpp:870
+msgid "thrown in"
+msgstr "rzucony w"
+
+#: kmymoney2.cpp:3982
+#, fuzzy
+msgid "Unable to remove payee(s)"
+msgstr "Nie można usunąć beneficjenta"
+
+#: kmymoney2.cpp:3990
+#, fuzzy
+msgid "Enter ISO 4217 code for the new currency"
+msgstr "Wprowadź kod ISO 4217 nowej waluty"
+
+#: kmymoney2.cpp:3999
+#, fuzzy, c-format
+msgid "Cannot create new currency. %1"
+msgstr "Nie można stworzyć nowej waluty."
+
+#: kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, fuzzy, c-format
+msgid "Cannot rename currency. %1"
+msgstr "Nie można stworzyć nowej waluty."
+
+#: kmymoney2.cpp:4039
+#, fuzzy
+msgid "Cannot delete currency %1. %2"
+msgstr "Nie można stworzyć nowej waluty."
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+#, fuzzy
+msgid "Cannot set %1 as base currency: %2"
+msgstr "Wybierz jako walutę podstawową"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+#, fuzzy
+msgid "Set base currency"
+msgstr "Wybierz walutę podstawową"
+
+#: kmymoney2.cpp:4065
+#, fuzzy, c-format
+msgid "Budget %1"
+msgstr "Budżety"
+
+#: kmymoney2.cpp:4075
+msgid "Budget %1 (%2)"
+msgstr ""
+
+#: kmymoney2.cpp:4090 kmymoney2.cpp:4139
+#, fuzzy
+msgid "Unable to add budget: %1, thrown in %2:%3"
+msgstr "Nie można przetworzyć daty %1 z użyciem formatu %2: %3"
+
+#: kmymoney2.cpp:4105
+#, fuzzy
+msgid "Do you really want to remove the budget <b>%1</b>?"
+msgstr "Czy na pewno usunąć z pliku %1 <b>%2</b>?"
+
+#: kmymoney2.cpp:4107
+#, fuzzy
+msgid "Do you really want to remove all selected budgets?"
+msgstr "Czy na pewno usunąć wybraną inwestycję?"
+
+#: kmymoney2.cpp:4109
+#, fuzzy
+msgid "Remove Budget"
+msgstr "Usuń beneficjenta"
+
+#: kmymoney2.cpp:4122
+#, fuzzy
+msgid "Unable to remove budget: %1, thrown in %2:%3"
+msgstr "Nie można przetworzyć daty %1 z użyciem formatu %2: %3"
+
+#: kmymoney2.cpp:4134 views/kreportsview.cpp:659
+#, c-format
+msgid "Copy of %1"
+msgstr "Kopia %1"
+
+#: kmymoney2.cpp:4164
+#, fuzzy
+msgid "Select year"
+msgstr "Wybierz rok"
+
+#: kmymoney2.cpp:4164
+#, fuzzy
+msgid "Budget year"
+msgstr "Następny rok"
+
+#: kmymoney2.cpp:4176 kmymoney2.cpp:4214 kmymoney2.cpp:4274
+msgid "Unable to modify budget: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4192 kmymoney2.cpp:4250
+msgid ""
+"The current budget already contains data. Continuing will replace all "
+"current values of this budget."
+msgstr ""
+
+#: kmymoney2.cpp:4222
+msgid ""
+"Please be aware that changes made in the following dialog affect all KDE "
+"applications not only KMyMoney."
+msgstr ""
+
+#: kmymoney2.cpp:4292
+#, fuzzy
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to delete the transactions anyway?"
+msgstr ""
+"Co najmniej jeden z podziałów tej transakcji został rozliczony. Czy chcesz "
+"kontynuować i mimo to edytować transakcję?"
+
+#: kmymoney2.cpp:4295 views/kgloballedgerview.cpp:1043
+msgid "Transaction already reconciled"
+msgstr "Transakcja uprzednio uzgodniona"
+
+#: kmymoney2.cpp:4301
+#, fuzzy
+msgid "Do you really want to delete the selected transaction?"
+msgstr "Czy na pewno usunąć wybraną inwestycję?"
+
+#: kmymoney2.cpp:4303
+#, fuzzy
+msgid "Do you really want to delete all %1 selected transactions?"
+msgstr "Czy na pewno usunąć wybraną inwestycję?"
+
+#: kmymoney2.cpp:4305
+msgid "Delete transaction"
+msgstr "Usuń transakcję"
+
+#: kmymoney2.cpp:4306
+#, fuzzy
+msgid "Deleting transactions"
+msgstr "Usuń transakcję"
+
+#: kmymoney2.cpp:4321
+#, fuzzy
+msgid "Duplicating transactions"
+msgstr "Podziel transakcję"
+
+#: kmymoney2.cpp:4378
+#, fuzzy
+msgid "Unable to delete transaction(s): %1, thrown in %2:%3"
+msgstr "Nie można dodać transakcji: "
+
+#: kmymoney2.cpp:4452 kmymoney2.cpp:4622
+#, fuzzy
+msgid "Unable to modify transaction: %1, thrown in %2:%3"
+msgstr "Nie można dodać/zmodyfikować transakcji"
+
+#: kmymoney2.cpp:4514
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling and<br>- <b>Cancel</b> returns to the "
+"transaction editor.<p>You can also select an option to save the transaction "
+"automatically when e.g. selecting another transaction."
+msgstr ""
+
+#: kmymoney2.cpp:4514 kmymoney2.cpp:4517
+#, fuzzy
+msgid "Cancel transaction edit"
+msgstr "Ważna transakcja"
+
+#: kmymoney2.cpp:4517
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling.<p>You can also select an option to save the "
+"transaction automatically when e.g. selecting another transaction."
+msgstr ""
+
+#: kmymoney2.cpp:4667
+#, fuzzy
+msgid "Unable to accept transaction: %1, thrown in %2:%3"
+msgstr "Nie można dodać transakcji: "
+
+#: kmymoney2.cpp:4846
+#, fuzzy
+msgid "Unable to unmatch the selected transactions"
+msgstr "Nie można usunąć transakcji"
+
+#: kmymoney2.cpp:4885
+msgid "No manually entered transaction selected for matching"
+msgstr ""
+
+#: kmymoney2.cpp:4887
+#, fuzzy
+msgid "No imported transaction selected for matching"
+msgstr "Akceptuje zaimportowane transakcje i kontynuuje"
+
+#: kmymoney2.cpp:4895
+#, fuzzy
+msgid "Unable to match the selected transactions"
+msgstr "Nie można usunąć transakcji"
+
+#: kmymoney2.cpp:5097
+#, fuzzy
+msgid "Create a new transaction"
+msgstr "Stwórz nowy rachunek aktywów"
+
+#: kmymoney2.cpp:5163
+#, fuzzy
+msgid "Duplicate the current selected transactions"
+msgstr "Skasuj wybrany profil"
+
+#: kmymoney2.cpp:5223
+#, fuzzy
+msgid ""
+"_: Button text for unmatch transaction\n"
+"Unmatch"
+msgstr "Użyj tego przycisku, żeby zapisać tę transakcję"
+
+#: kmymoney2.cpp:5451 kmymoney2.cpp:5473
+msgid "Goto '%1'"
+msgstr "Idź do '%1'"
+
+#: kmymoney2.cpp:5582
+msgid "Running consistency check..."
+msgstr "Uruchamianie sprawdzania spójności..."
+
+#: kmymoney2.cpp:5590
+#, fuzzy, c-format
+msgid "Consistency check failed: %1"
+msgstr "Wynik sprawdzania spójności"
+
+#: kmymoney2.cpp:5594
+msgid "Consistency check result"
+msgstr "Wynik sprawdzania spójności"
+
+#: kmymoney2.cpp:5603
+#, fuzzy
+msgid "Checking for overdue scheduled transactions..."
+msgstr "Sprawdzanie zaległych harmonogramów..."
+
+#: kmymoney2.cpp:5740
+msgid ""
+"You must first select a KMyMoney file before you can import a statement."
+msgstr ""
+"Musisz wpierw wybrać plik KMyMoney, zanim będziesz mógł zaimportować wyciąg."
+
+#: kmymoney2.cpp:5746
+msgid "Importing a statement via Web Connect"
+msgstr "Import wyciągu przez Web Connect"
+
+#: kmymoney2.cpp:5759
+msgid ""
+"Unable to import %1 using %2 plugin. The plugin returned the following "
+"error: %3"
+msgstr ""
+"Nie można zaimportować %1 przy pomocy wtyczki %2. Wtyczka zwróciła "
+"następujący błąd: %3."
+
+#: kmymoney2.cpp:5759 plugins/ofximport/ofximporterplugin.cpp:646
+msgid "Importing error"
+msgstr "Błąd importu"
+
+#: kmymoney2.cpp:5780
+msgid "All messages have been enabled."
+msgstr "Włączono wszystkie komunikaty."
+
+#: kmymoney2.cpp:5780
+msgid "All messages"
+msgstr "Wszystkie komunikaty"
+
+#: kmymoney2.cpp:5855
+#, fuzzy
+msgid "Auto saving..."
+msgstr "Zapisywanie pliku..."
+
+#: kmymoney2.cpp:5913
+#, fuzzy
+msgid "Unable to setup online parameters for account ''%1'"
+msgstr "Nie można usunąć konta: "
+
+#: kmymoney2.cpp:5928
+msgid ""
+"Do you really want to remove the mapping of account <b>%1</b> to an online "
+"account? Depending on the details of the online banking method used, this "
+"action cannot be reverted."
+msgstr ""
+
+#: kmymoney2.cpp:5928
+#, fuzzy
+msgid "Remove mapping to online account"
+msgstr "Mapuj do konta HBCI..."
+
+#: kmymoney2.cpp:5939
+#, fuzzy, c-format
+msgid "Unable to unmap account from online account: %1"
+msgstr "Nie można usunąć konta: "
+
+#: kmymoney2.cpp:5956
+#, fuzzy
+msgid " (Brokerage)"
+msgstr " (Brokerskie)"
+
+#: kmymoney2.cpp:5957
+msgid ""
+"You try to map a brokerage account to an online account. This is usually not "
+"advisable. In general, the investment account should be mapped to the online "
+"account. Please cancel if you intended to map the investment account, "
+"continue otherwise"
+msgstr ""
+
+#: kmymoney2.cpp:5957
+#, fuzzy
+msgid "Mapping brokerage account"
+msgstr "Konto brokerskie"
+
+#: kmymoney2.cpp:5964
+msgid "Select online banking plugin"
+msgstr ""
+
+#: kmymoney2.cpp:6005
+#, fuzzy, c-format
+msgid "Unable to map account to online account: %1"
+msgstr "Nie można usunąć konta: "
+
+#: converter/mymoneyqifreader.cpp:407 converter/mymoneytemplate.cpp:73
+#: views/kmymoneyview.cpp:590
+msgid "Error while loading file '%1'!"
+msgstr "Błąd wczytywania pliku '%1'!"
+
+#: converter/mymoneyqifreader.cpp:409 converter/mymoneyqifreader.cpp:965
+#: converter/mymoneytemplate.cpp:75 views/kmymoneyview.cpp:592
+msgid "File access error"
+msgstr "Błąd przy dostępie do pliku"
+
+#: converter/mymoneytemplate.cpp:84
+msgid "<b>%1</b> is not a template file."
+msgstr "<b>%1</b> nie jest plikiem szablonu."
+
+#: converter/mymoneytemplate.cpp:85 views/kmymoneyview.cpp:603
+msgid "Filetype Error"
+msgstr "Błąd typu pliku"
+
+#: converter/mymoneytemplate.cpp:93
+msgid "Error while reading template file <b>%1</b> in line %2, column %3"
+msgstr "Błąd podczas odczytu pliku szablonu <b>%1</b> w linii %2, kolumna %3"
+
+#: converter/mymoneytemplate.cpp:94
+msgid "Template Error"
+msgstr "Błąd szablonu"
+
+#: converter/mymoneytemplate.cpp:101
+msgid "File '%1' not found!"
+msgstr "Nie znaleziono pliku '%1'!"
+
+#: converter/mymoneytemplate.cpp:142
+msgid "Invalid tag <b>%1</b> in template file <b>%2</b>!"
+msgstr "Nieprawidłowy znacznik <b>%1</b> w pliku szablonu <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:214
+#, c-format
+msgid "Loading template %1"
+msgstr "Wczytywanie szablonu %1"
+
+#: converter/mymoneytemplate.cpp:241
+msgid "Invalid top-level account type <b>%1</b> in template file <b>%2</b>!"
+msgstr ""
+"Nieważny typ konta głównego poziomu <b>%1</b> w pliku szablonu <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:309
+msgid ""
+"Invalid flag type <b>%1</b> for account <b>%3</b> in template file <b>%2</b>!"
+msgstr ""
+"Nieważny typ znacznika <b>%1</b> dla konta <b>%3</b> w pliku szablonu <b>%2</"
+"b>!"
+
+#: converter/mymoneytemplate.cpp:398 converter/mymoneytemplate.cpp:401
+#: views/kmymoneyview.cpp:1151 views/kmymoneyview.cpp:1154
+msgid "Unable to write changes to '%1'"
+msgstr "Nie można zapisać zmian do '%1'"
+
+#: converter/mymoneytemplate.cpp:407 views/kmymoneyview.cpp:1162
+msgid "Unable to upload to '%1'"
+msgstr "Nie można zapisać do '%1'"
+
+#: converter/mymoneyqifwriter.cpp:70
+msgid ""
+"Unexpected exception '%1' thrown in %2, line %3 caught in MyMoneyQifWriter::"
+"write()"
+msgstr ""
+"Nieoczekiwany wyjątek '%1' przechwycony w %2, linia %3 przechwycony w "
+"MyMoneyQifWriter::write()"
+
+#: converter/mymoneyqifwriter.cpp:80
+msgid "Unable to open file '%1' for writing"
+msgstr "Nie można otworzyć pliku '%1' do zapisu"
+
+#: converter/webpricequote.cpp:340
+#, c-format
+msgid "Symbol found: %1"
+msgstr "Znaleziono symbol: %1"
+
+#: converter/webpricequote.cpp:368
+msgid "Price found: %1 (%2)"
+msgstr "Znaleziono cenę: %1 (%2)"
+
+#: converter/webpricequote.cpp:380
+#, c-format
+msgid "Date found: %1"
+msgstr "Znaleziono datę: %1"
+
+#: converter/webpricequote.cpp:397 converter/webpricequote.cpp:403
+#, c-format
+msgid "Unable to update price for %1"
+msgstr "Nie można zaktualizować ceny dla %1"
+
+#: converter/mymoneyqifreader.cpp:170
+#, fuzzy
+msgid ""
+"_: Category name\n"
+"Reinvested dividend"
+msgstr "Zainwestuj dywidendę"
+
+#: converter/mymoneyqifreader.cpp:173
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (long term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:176
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (short term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:179
+msgid ""
+"_: Category name\n"
+"Dividend"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:182
+msgid ""
+"_: Category name\n"
+"Interest"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:185
+msgid ""
+"_: Category name\n"
+"Capital Gain (short term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:188
+msgid ""
+"_: Category name\n"
+"Capital Gain (mid term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:191
+msgid ""
+"_: Category name\n"
+"Capital Gain (long term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:194
+msgid ""
+"_: Category name\n"
+"Returned capital"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:197
+msgid ""
+"_: Category name\n"
+"Miscellaneous income"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:200
+msgid ""
+"_: Category name\n"
+"Miscellaneous expense"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:203
+msgid ""
+"_: Category name\n"
+"Investment fees"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:205
+#, fuzzy, c-format
+msgid "Unknown QIF type %1"
+msgstr "Nieznany beneficjent"
+
+#: converter/mymoneyqifreader.cpp:355
+#, fuzzy
+msgid "Date format selection"
+msgstr "Wybór kategorii"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Pick the date format that suits your input file"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:366
+#, fuzzy
+msgid "Importing QIF ..."
+msgstr "Importowanie pliku..."
+
+#: converter/mymoneyqifreader.cpp:442
+#, fuzzy
+msgid "Reading QIF ..."
+msgstr "QIF ..."
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Adding transactions"
+msgstr "Dodawanie transakcji"
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Now adding the transactions to your ledger..."
+msgstr "Dodawanie transakcji do księgi rachunkowej..."
+
+#: converter/mymoneyqifreader.cpp:533
+#, fuzzy
+msgid "Unable to add transactions"
+msgstr "Nie można dodać transakcji: "
+
+#: converter/mymoneyqifreader.cpp:567
+msgid ""
+"_: QIF tag for liability account\n"
+"Oth L"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:572
+msgid ""
+"_: QIF tag for category\n"
+"Cat"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:575
+msgid ""
+"_: QIF tag for security\n"
+"Security"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:578
+#, fuzzy
+msgid ""
+"_: QIF tag for investment account\n"
+"Invst"
+msgstr "Dołącz tylko rachunki inwestycyjne"
+
+#: converter/mymoneyqifreader.cpp:581
+msgid ""
+"_: QIF tag for prices\n"
+"Prices"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:599
+msgid ""
+"_: QIF tag for a class\n"
+"Class"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:753 converter/mymoneyqifreader.cpp:2203
+msgid ""
+"The %1 account currently has an opening balance of %2. This QIF file reports "
+"an opening balance of %3. Would you like to overwrite the current balance "
+"with the one from the QIF file?"
+msgstr ""
+"Konto %1 posiada obecnie stan otwarcia %2. Ten plik QIF zgłasza stan "
+"otwarcia %3. Czy chcesz zastąpić bilans bieżący przez ten z pliku QIF?"
+
+#: converter/mymoneyqifreader.cpp:754 converter/mymoneyqifreader.cpp:2204
+msgid "Overwrite opening balance"
+msgstr "Zastąp saldo otwarcia"
+
+#: converter/mymoneyqifreader.cpp:879 converter/mymoneyqifreader.cpp:890
+#: converter/mymoneyqifreader.cpp:914
+msgid "Autogenerated by QIF importer"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:907
+#, fuzzy
+msgid "QIF imported, no account name supplied"
+msgstr "Importowanie szablonów kont."
+
+#: converter/mymoneyqifreader.cpp:940
+msgid ""
+"KMyMoney has imported a second opening balance transaction into account <b>%"
+"1</b> which differs from the one found already on file. Please correct this "
+"manually once the import is done."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:940
+#, fuzzy
+msgid "Opening balance problem"
+msgstr "Stany otwarcia"
+
+#: converter/mymoneyqifreader.cpp:963
+#, fuzzy
+msgid "Error while creating opening balance transaction"
+msgstr "Ukryj uzgodnione transakcje"
+
+#: converter/mymoneyqifreader.cpp:1029 converter/mymoneyqifreader.cpp:1276
+msgid ""
+"The date entry \"%1\" read from the file cannot be interpreted through the "
+"current date profile setting of \"%2\".\n"
+"\n"
+"Pressing \"Continue\" will assign todays date to the transaction. Pressing "
+"\"Cancel\" will abort the import operation. You can then restart the import "
+"and select a different QIF profile or create a new one."
+msgstr ""
+"Wpis daty \"%1\" odczytane z pliku nie mogą zostać zinterpretowane przy "
+"obecnym ustawieniu profilu daty \"%2\".\n"
+"\n"
+"Wciśnięcie \"Dalej\" spowoduje przydzielenie transakcji dzisiejszej daty. "
+"Wciśnięcie \"Anuluj\" przerwie importowanie. Możne je następnie wznowić i "
+"wybrać inny profil QIF albo stworzyć nowy."
+
+#: converter/mymoneyqifreader.cpp:1035 converter/mymoneyqifreader.cpp:1282
+msgid "Invalid date format"
+msgstr "Niepoprawny format daty"
+
+#: converter/mymoneyqifreader.cpp:1398
+#: converter/mymoneystatementreader.cpp:589
+#: converter/mymoneystatementreader.cpp:592
+msgid "Statement Importer"
+msgstr "Importowanie wyciągu"
+
+#: converter/mymoneyqifreader.cpp:1413
+#: converter/mymoneystatementreader.cpp:644
+msgid ""
+"This investment account does not contain the \"%1\" security. Transactions "
+"involving this security will be ignored."
+msgstr ""
+"Te konto inwestycyjne nie zawiera papieru wartościowego \"%1\". Transakcje "
+"dotyczące tego waloru będą ignorowane."
+
+#: converter/mymoneyqifreader.cpp:1415
+#: converter/mymoneystatementreader.cpp:612
+#: converter/mymoneystatementreader.cpp:644
+msgid "Security not found"
+msgstr "Nie znaleziono papieru wartościowego"
+
+#: converter/mymoneyqifreader.cpp:2021
+#, fuzzy
+msgid "%1 (Investment)"
+msgstr "Inwestycja"
+
+#: converter/mymoneyqifreader.cpp:2022
+msgid "Autogenerated by QIF importer from type Mutual account entry"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2085 converter/mymoneyqifreader.cpp:2228
+msgid "account"
+msgstr "konto"
+
+#: converter/mymoneyqifreader.cpp:2086
+msgid "al"
+msgstr "al"
+
+#: converter/mymoneyqifreader.cpp:2093
+msgid "category"
+msgstr "kategoria"
+
+#: converter/mymoneyqifreader.cpp:2094
+msgid "ei"
+msgstr "ei"
+
+#: converter/mymoneyqifreader.cpp:2095
+msgid "Category selection"
+msgstr "Wybór kategorii"
+
+#: converter/mymoneyqifreader.cpp:2110
+msgid "Account \"%1\" disappeared: "
+msgstr "Zniknęło konto \"%1\": "
+
+#: converter/mymoneyqifreader.cpp:2131
+msgid "The %1 '%2' does not exist. Do you want to create it?"
+msgstr "Nie istnieje %1 '%2'. Czy chcesz go utworzyć?"
+
+#: converter/mymoneyqifreader.cpp:2140
+#, c-format
+msgid "Select %1"
+msgstr "Wybierz %1"
+
+#: converter/mymoneyqifreader.cpp:2142
+msgid ""
+"The %1 <b>%2</b> currently exists. Do you want to import transactions to "
+"this account?"
+msgstr ""
+"Istnieje obecnie %1 <b>%2</b>. Czy chcesz zaimportować transakcje do tego "
+"konta?"
+
+#: converter/mymoneyqifreader.cpp:2147
+msgid ""
+"The %1 <b>%2</b> currently does not exist. You can create a new %3 by "
+"pressing the <b>Create</b> button or select another %4 manually from the "
+"selection box."
+msgstr ""
+"%1 <b>%2</b> aktualnie nie istnieje. Można utworzyć nowy %3 wciskając "
+"przycisk <b>Utwórz</b> albo wybierając inny %4 z listy wyboru."
+
+#: converter/mymoneyqifreader.cpp:2154
+#, c-format
+msgid "Import transactions to %1"
+msgstr "Importuj transakcje do %1"
+
+#: converter/mymoneyqifreader.cpp:2155
+msgid ""
+"No %1 information has been found in the selected QIF file. Please select an "
+"account using the selection box in the dialog or create a new %2 by pressing "
+"the <b>Create</b> button."
+msgstr ""
+"Nie znaleziono informacji %1 w wybranym pliku QIF. Proszę wybrać konto przy "
+"pomocy elementu wyboru w oknie lub stworzyć nowe naciskając przycisk "
+"<b>Stwórz</b>."
+
+#: converter/mymoneyqifreader.cpp:2229
+msgid "You must select or create an account."
+msgstr "Musisz wybrać lub stworzyć konto."
+
+#: converter/mymoneyqifreader.cpp:2231
+msgid "You must select or create a category."
+msgstr "Musisz wybrać lub stworzyć kategorię."
+
+#: converter/mymoneystatementreader.cpp:100
+#, fuzzy
+msgid "_Fees"
+msgstr "Opłaty"
+
+#: converter/mymoneystatementreader.cpp:106
+#, fuzzy
+msgid "_Dividend"
+msgstr "Dywidenda"
+
+#: converter/mymoneystatementreader.cpp:289
+#, fuzzy, c-format
+msgid "Importing statement for account %1"
+msgstr "Import wyciągu przy pomocy wtyczki %1"
+
+#: converter/mymoneystatementreader.cpp:291
+#, fuzzy
+msgid "Importing statement without transactions"
+msgstr "Import wyciągu przy pomocy wtyczki %1"
+
+#: converter/mymoneystatementreader.cpp:385
+#, fuzzy
+msgid " Statement balance is not contained in statement."
+msgstr "Początkowe saldo konta dla tego wyciągu:"
+
+#: converter/mymoneystatementreader.cpp:387
+msgid " Statement balance on %1 is reported to be %2"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:389
+#, fuzzy
+msgid " Transactions"
+msgstr "Transakcje"
+
+#: converter/mymoneystatementreader.cpp:390
+msgid " %1 processed"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:391
+msgid " %1 added"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:392
+msgid " %1 matched"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:393
+#, fuzzy
+msgid " %1 duplicates"
+msgstr "Duplikat"
+
+#: converter/mymoneystatementreader.cpp:394
+#, fuzzy
+msgid " Payees"
+msgstr "Beneficjenci"
+
+#: converter/mymoneystatementreader.cpp:395
+msgid " %1 created"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:483
+#, fuzzy, c-format
+msgid "Error creating security record: %1"
+msgstr "Błąd połączenia do banku: %1"
+
+#: converter/mymoneystatementreader.cpp:612
+#, fuzzy
+msgid ""
+"This imported statement contains investment transactions with no security. "
+"These transactions will be ignored."
+msgstr ""
+"Te konto inwestycyjne nie zawiera papieru wartościowego \"%1\". Transakcje "
+"dotyczące tego waloru będą ignorowane."
+
+#: converter/mymoneystatementreader.cpp:803
+msgid "(Fees) "
+msgstr "(Opłaty)"
+
+#: converter/mymoneystatementreader.cpp:880
+msgid ""
+"Do you want to add \"%1\" as payee/receiver?\n"
+"\n"
+msgstr ""
+"Czy chcesz dodać \"%1\" jako płatnika lub odbiorcę?\n"
+"\n"
+
+#: converter/mymoneystatementreader.cpp:881
+msgid ""
+"Selecting \"Yes\" will create the payee, \"No\" will skip creation of a "
+"payee record and remove the payee information from this transaction. "
+"Selecting \"Cancel\" aborts the import operation.\n"
+"\n"
+"If you select \"No\" here and mark the \"Don't ask again\" checkbox, the "
+"payee information for all following transactions referencing \"%1\" will be "
+"removed."
+msgstr ""
+"Wybranie \"Tak\" spowoduje utworzenie beneficjenta, \"Nie\" natomiast "
+"pominięcie tworzenia rekordu i usunięcie jego informacji z tej transakcji. "
+"Wybranie \"Anuluj\" przerwie operację importu.\n"
+"\n"
+"Jeśli wybierze się tutaj \"Nie\" i zaznaczy opcję \"Nie pytaj ponownie\", "
+"informacje dotyczące beneficjenta dla wszystkich następnych transakcji "
+"odwołujących się do \"%1\" zostaną usunięte."
+
+#: converter/mymoneystatementreader.cpp:917
+#, fuzzy
+msgid "Save Category"
+msgstr "Kategoria opłat"
+
+#: converter/mymoneystatementreader.cpp:918
+#, fuzzy
+msgid "No Category"
+msgstr "Kategoria główna"
+
+#: converter/mymoneystatementreader.cpp:919 dialogs/rc.cpp:4
+msgid "Abort"
+msgstr "Porzuć"
+
+#: converter/mymoneystatementreader.cpp:926
+msgid "Please select a default category for payee '%1':"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:958
+msgid "Unable to add payee/receiver"
+msgstr "Nie można dodać beneficjenta/odbiorcy"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid ""
+"KMyMoney has found a scheduled transaction named <b>%1</b> which matches an "
+"imported transaction. Do you want KMyMoney to enter this schedule now so "
+"that the transaction can be matched? "
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1162
+#, fuzzy
+msgid "Schedule found"
+msgstr "Harmonogram"
+
+#: converter/mymoneystatementreader.cpp:1219
+#, fuzzy
+msgid "Problem adding or matching imported transaction with id '%1': %2"
+msgstr "Problem z dodaniem zaimportowanej transakcji: "
+
+#: converter/mymoneystatementreader.cpp:1268
+msgid ""
+"<b>You have downloaded a statement for the following account:</b><br><br>"
+msgstr "<b>Pobrałeś wyciąg dla następującego konta:</b><br><br>"
+
+#: converter/mymoneystatementreader.cpp:1269
+#, fuzzy, c-format
+msgid " - Account Name: %1"
+msgstr " - Nazwa konta: %1<br>"
+
+#: converter/mymoneystatementreader.cpp:1270
+#, fuzzy, c-format
+msgid " - Account Type: %1"
+msgstr " - Typ konta: %1<br>"
+
+#: converter/mymoneystatementreader.cpp:1271
+#, fuzzy, c-format
+msgid " - Account Number: %1"
+msgstr " - Numer konta: %1<br>"
+
+#: converter/mymoneystatementreader.cpp:1279
+msgid "Do you want to import transactions to this account?"
+msgstr "Czy chcesz zaimportować transakcje do tego konta?"
+
+#: converter/mymoneystatementreader.cpp:1281
+msgid ""
+"KMyMoney cannot determine which of your accounts to use. You can create a "
+"new account by pressing the <b>Create</b> button or select another one "
+"manually from the selection box below."
+msgstr ""
+"KMyMoney nie może odgadnąć, którego z Twoich kont użyć. Można stworzyć nowe "
+"konto wciskając <b>Utwórz</b> albo wybrać ręcznie inne z listy wyboru."
+
+#: converter/mymoneystatementreader.cpp:1287
+msgid ""
+"No account information has been found in the selected statement file. Please "
+"select an account using the selection box in the dialog or create a new "
+"account by pressing the <b>Create</b> button."
+msgstr ""
+"W wybranym pliku wyciągu nie znaleziono informacji o koncie. Proszę wybrać "
+"konto przy pomocy okienka wyboru albo stworzyć nowe wciskając przycisk "
+"<b>Utwórz</b>."
+
+#: converter/mymoneystatementreader.cpp:1294
+msgid "Import transactions"
+msgstr "Import transakcji"
+
+#: converter/mymoneystatementreader.cpp:1330
+msgid ""
+"You must select an account, create a new one, or press the <b>Abort</b> "
+"button."
+msgstr ""
+"Musisz wybrać konto, stworzyć nowe albo wcisnąć przycisk <b>Porzuć</b>."
+
+#: converter/mymoneygncreader.cpp:119
+#, fuzzy
+msgid "%1: Sorry. This importer cannot handle version %2 of element %3"
+msgstr "Ta wersja procedury importującej nie obsługuje plików wieloksięgowych."
+
+#: converter/mymoneygncreader.cpp:193
+#, c-format
+msgid "Account%1"
+msgstr "Konto%1"
+
+#: converter/mymoneygncreader.cpp:197
+#, c-format
+msgid "Stock%1"
+msgstr "Akcja%1"
+
+#: converter/mymoneygncreader.cpp:206
+#, c-format
+msgid "Payee%1"
+msgstr "Beneficjent%1"
+
+#: converter/mymoneygncreader.cpp:212
+#, c-format
+msgid "Schedule%1"
+msgstr "Harmonogram%1"
+
+#: converter/mymoneygncreader.cpp:262
+msgid "This version of the importer cannot handle multi-book files."
+msgstr "Ta wersja procedury importującej nie obsługuje plików wieloksięgowych."
+
+#: converter/mymoneygncreader.cpp:912
+#, fuzzy
+msgid "Invalid header for file. Should be 'gnc-v2'"
+msgstr "Niepoprawny nagłówek pliku. Powinno być gnc-v2"
+
+#: converter/mymoneygncreader.cpp:937 converter/mymoneygncreader.cpp:972
+#: converter/mymoneygncreader.cpp:1062
+#, fuzzy, c-format
+msgid ""
+"Import failed:\n"
+"\n"
+"%1"
+msgstr ""
+"Import nieudany\n"
+"\n"
+
+#: converter/mymoneygncreader.cpp:1065
+#, fuzzy
+msgid "Import complete"
+msgstr "Opcje importu"
+
+#: converter/mymoneygncreader.cpp:1120
+msgid "Disguise your wealth"
+msgstr "Ukryj swój majątek"
+
+#: converter/mymoneygncreader.cpp:1121
+msgid ""
+"Each monetary value on your file will be multiplied by a random number "
+"between 0.01 and 1.99\n"
+"with a different value used for each transaction. In addition, to further "
+"disguise the true\n"
+"values, you may enter a number between %1 and %2 which will be applied to "
+"all values.\n"
+"These numbers will not be stored in the file."
+msgstr ""
+"Każda wielkość pieniężna w Twoim pliku zostanie pomnożona przez losową "
+"liczbę\n"
+"pomiędzy 0,01 a 1,99\n"
+"z różnymi wartościami użytymi dla każdej transakcji. Dodatkowo, żeby "
+"bardziej\n"
+"zakamuflować prawdziwe wartości, można podać liczbę spomiędzy %1 a %2, która "
+"będzie zastosowana do wszystkich wartości.\n"
+"Liczby te nie będą przechowywane w pliku."
+
+#: converter/mymoneygncreader.cpp:1135
+msgid "Loading commodities..."
+msgstr "Wczytywanie towarów..."
+
+#: converter/mymoneygncreader.cpp:1160
+msgid "Loading prices..."
+msgstr "Wczytywanie cen..."
+
+#: converter/mymoneygncreader.cpp:1164 converter/mymoneygncreader.cpp:1171
+msgid "Imported History"
+msgstr "Zaimportowana historia"
+
+#: converter/mymoneygncreader.cpp:1251
+#, c-format
+msgid "Current importer does not recognize GnuCash account type %1"
+msgstr "Obecna wersja kodu importującego nie rozpoznaje konta GnuCasha typu %1"
+
+#: converter/mymoneygncreader.cpp:1471
+msgid "Imported Transaction"
+msgstr "Zaimportowane transakcje"
+
+#: converter/mymoneygncreader.cpp:1519
+msgid "Loading templates..."
+msgstr "Wczytywanie szablonów..."
+
+#: converter/mymoneygncreader.cpp:1531
+msgid "Unknown payee"
+msgstr "Nieznany beneficjent"
+
+#: converter/mymoneygncreader.cpp:1723
+msgid "Loading schedules..."
+msgstr "Wczytywanie harmonogramów..."
+
+#: converter/mymoneygncreader.cpp:1735
+#, c-format
+msgid "Can't find template transaction for schedule %1"
+msgstr "Nie można znaleźć szablonu transakcji dla harmonogramu %1"
+
+#: converter/mymoneygncreader.cpp:1910
+msgid "Reorganizing accounts..."
+msgstr "Reorganizacja kont..."
+
+#: converter/mymoneygncreader.cpp:1972
+msgid ""
+"Your main currency seems to be %1 (%2); do you want to set this as your base "
+"currency?"
+msgstr ""
+"Twoją główną walutą wydaje się być %1 (%2); czy chcesz ją ustawić jako "
+"walutę podstawową?"
+
+#: converter/mymoneygncreader.cpp:1993
+msgid "More"
+msgstr "Więcej"
+
+#: converter/mymoneygncreader.cpp:1997
+#, fuzzy
+msgid "Save Report"
+msgstr "Ulubione raporty"
+
+#: converter/mymoneygncreader.cpp:2017
+msgid ""
+"Problems were encountered in converting schedule '%1'.\n"
+"Do you want to review or edit it now?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2039
+msgid ""
+"Found:\n"
+"\n"
+msgstr ""
+"Znaleziono:\n"
+"\n"
+
+#: converter/mymoneygncreader.cpp:2040
+msgid " commodities (equities)\n"
+msgstr " towary (kapitał)\n"
+
+#: converter/mymoneygncreader.cpp:2041
+msgid " prices\n"
+msgstr " ceny\n"
+
+#: converter/mymoneygncreader.cpp:2042
+msgid " accounts\n"
+msgstr " konta\n"
+
+#: converter/mymoneygncreader.cpp:2043
+msgid " transactions\n"
+msgstr " transakcje\n"
+
+#: converter/mymoneygncreader.cpp:2044
+msgid " schedules\n"
+msgstr " harmonogramy\n"
+
+#: converter/mymoneygncreader.cpp:2047
+msgid "No inconsistencies were detected"
+msgstr "Nie wykryto niespójności"
+
+#: converter/mymoneygncreader.cpp:2049
+msgid " inconsistencies were detected and corrected\n"
+msgstr " znaleziono i naprawiono niespójności\n"
+
+#: converter/mymoneygncreader.cpp:2054
+msgid " orphan accounts were created\n"
+msgstr " utworzono osierocone konta\n"
+
+#: converter/mymoneygncreader.cpp:2059
+msgid " possible schedule problems were noted\n"
+msgstr " zauważono potencjalne problemy harmonogramu\n"
+
+#: converter/mymoneygncreader.cpp:2064
+msgid "Small Business Features (Customers, Invoices, etc.)"
+msgstr " Wsparcie dla małego biznesu (klienci, faktury, itd.)"
+
+#: converter/mymoneygncreader.cpp:2065 views/kmymoneyview.cpp:241
+#: views/kmymoneyview.cpp:243
+msgid "Budgets"
+msgstr "Budżety"
+
+#: converter/mymoneygncreader.cpp:2066
+msgid "Lots"
+msgstr "Zestawy"
+
+#: converter/mymoneygncreader.cpp:2068
+msgid "The following features found in your file are not currently supported:"
+msgstr ""
+"Następujące funkcjonalności znalezione w pliku nie są obecnie obsługiwane:"
+
+#: converter/mymoneygncreader.cpp:2071
+msgid ""
+"\n"
+"\n"
+"Press More for further information"
+msgstr ""
+"\n"
+"\n"
+"W celu uzyskania kolejnych informacji wciśnij Więcej"
+
+#: converter/mymoneygncreader.cpp:2139
+msgid "Orphan created from unknown gnucash account"
+msgstr "Sierota powstała z nieznanego konta gnucasch"
+
+#: converter/mymoneygncreader.cpp:2170
+msgid "Internal error - invalid interval char in incrDate"
+msgstr "Błąd wewnętrzny - nieprawidłowy znak przerwy w incrDate"
+
+#: converter/mymoneygncreader.cpp:2233
+msgid "Enter the investment account name "
+msgstr "Wpisz nazwę konta inwestycyjnego"
+
+#: converter/mymoneygncreader.cpp:2234
+msgid "My Investments"
+msgstr "Moje inwestycje"
+
+#: converter/mymoneygncreader.cpp:2269
+#, c-format
+msgid "Select parent investment account or enter new name. Stock %1"
+msgstr "Wybierz nadrzędne konto inwestycyjne albo wpisz nową nazwę. Akcje %1"
+
+#: converter/mymoneygncreader.cpp:2292 converter/mymoneygncreader.cpp:2307
+msgid "%1 is not an Investment Account. Do you wish to make it one?"
+msgstr "%1 nie jest kontem inwestycyjnym. Czy ma się takim stać?"
+
+#: converter/mymoneygncreader.cpp:2408
+msgid ""
+"An Investment account must be a child of an Asset account\n"
+"Account %1 will be stored under the main Asset account"
+msgstr ""
+"Konto inwestycji musi być dzieckiem konta aktywów\n"
+"Konto %1 będzie przechowane pod głównym kontem aktywów"
+
+#: converter/mymoneygncreader.cpp:2410
+msgid ""
+"An Income account must be a child of an Income account\n"
+"Account %1 will be stored under the main Income account"
+msgstr ""
+"Konto dochodów musi być dzieckiem konta dochodów\n"
+"Konto %1 będzie przechowane pod głównym kontem dochodów"
+
+#: converter/mymoneygncreader.cpp:2412
+msgid ""
+"An Expense account must be a child of an Expense account\n"
+"Account %1 will be stored under the main Expense account"
+msgstr ""
+"Konto wydatków musi być dzieckiem konta wydatków\n"
+"Konto %1 będzie przechowane pod głównym kontem wydatków"
+
+#: converter/mymoneygncreader.cpp:2414
+msgid ""
+"One or more transactions contain a reference to an otherwise unknown "
+"account\n"
+"An asset account with the name %1 has been created to hold the data"
+msgstr ""
+"Co najmniej jedna transakcja zawiera odniesienie do nieznanego konta\n"
+"Zostało utworzone konto aktywów o nazwie %1 w celu przechowania danych"
+
+#: converter/mymoneygncreader.cpp:2416
+msgid "Schedule %1 has interval of %2 which is not currently available"
+msgstr ""
+"Harmonogram %1 ma przedział czasowy %2, który nie jest obecnie dostępny"
+
+#: converter/mymoneygncreader.cpp:2417
+msgid "Schedule %1 dropped at user request"
+msgstr "Harmonogram %1 porzucony na życzenie użytkownika"
+
+#: converter/mymoneygncreader.cpp:2418
+msgid "Schedule %1 contains unknown action (key = %2, type = %3)"
+msgstr "Harmonogram %1 zawiera nieznane działanie (klucz = %2, typ = %3)"
+
+#: converter/mymoneygncreader.cpp:2419
+msgid "Schedule %1 contains multiple actions; only one has been imported"
+msgstr ""
+"Harmonogram %1 zawiera wiele działań, tylko jedno zostało zaimportowane"
+
+#: converter/mymoneygncreader.cpp:2420
+msgid "Schedule %1 contains no valid splits"
+msgstr "Harmonogram %1 nie zawiera ważnych podziałów"
+
+#: converter/mymoneygncreader.cpp:2421
+msgid ""
+"Schedule %1 appears to contain a formula. GnuCash formulae are not "
+"convertible"
+msgstr ""
+"Wygląda na to, że harmonogram %1 zawiera wzór. Wzory GnuCasha nie mogą być "
+"skonwertowane"
+
+#: converter/mymoneygncreader.cpp:2422
+#, fuzzy
+msgid ""
+"Schedule %1 contains unknown interval specification; please check for "
+"correct operation"
+msgstr ""
+"Harmonogram %1 zawiera złożone określenie przedziału czasowego, upewnij się "
+"co do poprawnej operacji"
+
+#: converter/mymoneygncreader.cpp:2423
+#, fuzzy
+msgid ""
+"Schedule %1 contains a deferred interval specification; please check for "
+"correct operation"
+msgstr ""
+"Harmonogram %1 zawiera złożone określenie przedziału czasowego, upewnij się "
+"co do poprawnej operacji"
+
+#: converter/mymoneygncreader.cpp:2424
+msgid ""
+"Account or Category %1, transaction date %2; split contains invalid value; "
+"please check"
+msgstr ""
+"Konto lub kategoria %1, data transakcji %2; podział zawiera nieważną "
+"wartość; proszę sprawdzić"
+
+#: kmymoneyutils.cpp:146
+msgid "&New Schedule..."
+msgstr "&Nowy harmonogram..."
+
+#: kmymoneyutils.cpp:148
+msgid "Create a new schedule."
+msgstr "Tworzy nowy harmonogram."
+
+#: kmymoneyutils.cpp:149
+msgid "Use this to create a new schedule."
+msgstr "Użyj tego przycisku, żeby stworzyć nowy harmonogram."
+
+#: kmymoneyutils.cpp:158
+msgid "&Filter"
+msgstr "&Filtr"
+
+#: kmymoneyutils.cpp:160
+msgid "Filter out accounts"
+msgstr "Odfiltruj konta"
+
+#: kmymoneyutils.cpp:161
+msgid "Use this to filter out accounts"
+msgstr "Użyj, żeby odfiltrować konta"
+
+#: kmymoneyutils.cpp:192
+msgid "Preferred accounts"
+msgstr "Preferowane konta"
+
+#: kmymoneyutils.cpp:193
+msgid "Payment accounts"
+msgstr "Konta płatności"
+
+#: kmymoneyutils.cpp:194
+msgid "Favorite reports"
+msgstr "Ulubione raporty"
+
+#: kmymoneyutils.cpp:195
+#, fuzzy
+msgid "Forecast (schedule)"
+msgstr "Stwórz harmonogram..."
+
+#: kmymoneyutils.cpp:196
+#, fuzzy
+msgid "Networth forecast"
+msgstr "Wartość netto dziś"
+
+#: kmymoneyutils.cpp:197
+msgid "Forecast (history)"
+msgstr ""
+
+#: kmymoneyutils.cpp:198
+#, fuzzy
+msgid "Assets and Liabilities"
+msgstr "Aktywa i pasywa"
+
+#: kmymoneyutils.cpp:199 reports/pivottable.cpp:2416 views/khomeview.cpp:1393
+#: widgets/rc.cpp:70
+#, fuzzy
+msgid "Budget"
+msgstr "Budżety"
+
+#: kmymoneyutils.cpp:200
+#, fuzzy
+msgid "CashFlow"
+msgstr "Gotówka"
+
+#: dialogs/kenterscheduledlg.cpp:153 kmymoneyutils.cpp:366
+msgid "Unable to load schedule details"
+msgstr "Nie można wczytać szczegółów harmonogramu"
+
+#: kmymoneyutils.cpp:390 widgets/register.cpp:473
+#, fuzzy
+msgid ""
+"_: Reconcile state 'Not reconciled'\n"
+"Not reconciled"
+msgstr "nieuzgodnione"
+
+#: kmymoneyutils.cpp:393 widgets/register.cpp:476
+#, fuzzy
+msgid ""
+"_: Reconcile state 'Cleared'\n"
+"Cleared"
+msgstr "Asystent uzgadniania"
+
+#: kmymoneyutils.cpp:396 widgets/register.cpp:479
+#, fuzzy
+msgid ""
+"_: Reconcile state 'Reconciled'\n"
+"Reconciled"
+msgstr "nieuzgodnione"
+
+#: kmymoneyutils.cpp:399 widgets/register.cpp:482
+#, fuzzy
+msgid ""
+"_: Reconcile state 'Frozen'\n"
+"Frozen"
+msgstr "Ostatni uzgodniony wyciąg: %1"
+
+#: kmymoneyutils.cpp:410
+#, fuzzy
+msgid ""
+"_: Reconcile flag C\n"
+"C"
+msgstr "Uzgodnione"
+
+#: kmymoneyutils.cpp:413
+#, fuzzy
+msgid ""
+"_: Reconcile flag R\n"
+"R"
+msgstr "Uzgodnione"
+
+#: kmymoneyutils.cpp:416
+#, fuzzy
+msgid ""
+"_: Reconcile flag F\n"
+"F"
+msgstr "Uzgodnione"
+
+#: kmymoneyutils.cpp:419
+msgid ""
+"_: Flag for unknown reconciliation state\n"
+"?"
+msgstr ""
+
+#: _tips.cpp:3
+msgid ""
+"<p>...that you can change the sort order of ledger entries by\n"
+"right-clicking the header of the ledger view?\n"
+msgstr ""
+"<p>...możesz zmienić kolejność sortowania wpisów księgi rachunkowej\n"
+"klikając prawym przyciskiem myszy na nagłówku w widoku księgi?\n"
+
+#: _tips.cpp:9
+#, fuzzy
+msgid ""
+"<p>...that you can easily move to the other side of a transfer transaction\n"
+"by opening the context menu with the right mouse button and selecting one of "
+"the\n"
+"'Goto' functions?\n"
+msgstr ""
+"<p>...możesz łatwo przenieść się na drugą stronę transakcji przelewu\n"
+"otwierając menu kontekstowe prawym klawiszem myszy i wybierając\n"
+"funkcję 'Idź do ...'?\n"
+
+#: _tips.cpp:16
+msgid ""
+"<p>...that you can start editing a transaction by double-clicking on the\n"
+"transaction in the register?\n"
+msgstr ""
+"<p>...możesz rozpocząć edycję transakcji podwójnie klikając\n"
+"na transakcji w rejestrze?\n"
+
+#: _tips.cpp:22
+msgid ""
+"<p>...that you can show more details of the selected transaction in the\n"
+"register by selecting the 'ledger lens' feature in the settings dialog?\n"
+msgstr ""
+"<p>...możesz pokazać więcej szczegółów dotyczących wybranej transakcji w\n"
+"rejestrze wybierając opcję lupy księgi rachunkowej w oknie ustawień?\n"
+
+#: _tips.cpp:28
+#, fuzzy
+msgid ""
+"<p>...that transactions with no category assigned or split\n"
+"transactions with unassigned values are marked with an exclamation mark \n"
+"on a yellow triangle in the register?\n"
+msgstr ""
+"<p>...transakcje bez przydzielonej kategorii\n"
+"lub podzielone transakcje z nieprzypisanymi wartościami migają\n"
+"w rejestrze na <font color=\"red\">czerwono</font>?\n"
+
+#: _tips.cpp:35
+msgid ""
+"<p>...that you can show all details of the transactions in the register\n"
+"by typing &lt;Ctrl-T&gt; or selecting the 'Settings/Show Transaction "
+"Detail'\n"
+"menu entry? You can turn this feature off the same way.\n"
+msgstr ""
+"<p>...możesz pokazać wszystkie szczegóły transakcji w rejestrze\n"
+"wpisując &lt;Ctrl-T&gt; albo wybierając pozycję menu\n"
+"'Ustawienia/Pokaż szczegóły transakcji'?\n"
+"W ten sam sposób można wyłączyć to zachowanie.\n"
+
+#: _tips.cpp:42
+msgid ""
+"<p>...that you can switch between a listing of all accounts or\n"
+"an icon view of all asset and liability accounts with the tabs\n"
+"in the accounts view?\n"
+msgstr ""
+"<p>...możesz przełączać się pomiędzy wyświetlaniem wszystkich kont albo\n"
+"widokiem ikonek wszystkich kont aktywów i pasywów za pomocą kart\n"
+"w widoku kont?\n"
+
+#: _tips.cpp:49
+msgid "<p>...that the KMyMoney development team wishes you a nice day?\n"
+msgstr "<p>...zespół programistów KMyMoney życzy miłego dnia?\n"
+
+#: _tips.cpp:54
+msgid ""
+"<p>...you can use your own external filter program to convert any\n"
+"import format to QIF on the fly? See the QIF profile editor for\n"
+"more details.\n"
+msgstr ""
+"<p>...możesz używać własnego zewnętrznego programu filtrującego, żeby "
+"skonwertować\n"
+"dowolny format importu w locie na QIF? Zobacz edytor profilu QIF\n"
+"żeby poznać więcej szczegółów.\n"
+
+#: _tips.cpp:61
+msgid ""
+"<p>...that you can create a scheduled transaction from an existing\n"
+"one by selecting the context menu on a transaction in the ledger\n"
+"or the \"More...\"-menu in the transaction form?\n"
+msgstr ""
+"<p>...możesz stworzyć zaplanowaną transakcję na podstawie istniejącej,\n"
+"wybierając menu kontekstowe transakcji w księdze rachunkowej\n"
+"albo menu \"Więcej...\" w formularzu transakcji?\n"
+
+#: _tips.cpp:68
+#, fuzzy
+msgid ""
+"<p>...that you can switch to the payee of a transaction\n"
+"by selecting the context menu on a transaction in the ledger\n"
+"or in the transaction menu?\n"
+msgstr ""
+"<p>...można się przełączyć na beneficjenta transakcji\n"
+"wybierając menu kontekstowe transakcji w księdze rachunkowej\n"
+"lub menu \"Więcej\" w formularzu transakcji?\n"
+
+#: _tips.cpp:75
+msgid ""
+"<p>...that you can modify the colors and fonts used for the ledgers\n"
+"via <i>Configure/Register/...</i>?\n"
+msgstr ""
+"<p>...możesz zmieniać kolory i czcionki używane w księdze rachunkowej\n"
+"przez <i>Konfiguracja/Rejestr/...</i>?\n"
+
+#: _tips.cpp:81
+msgid ""
+"<p>...that you can hide transactions prior to a specific date?\n"
+"The date can be modified via <i>Configure/Register/Filter</i>.\n"
+msgstr ""
+"<p>...możesz ukryć transakcje wcześniejsze niż określona data?\n"
+"Datę można zmienić w <i>Konfiguracja/Rejestr/Filtr</i>.\n"
+
+#: _tips.cpp:87
+msgid ""
+"<p>...that you can customize the \"Home-Page\"\n"
+"via <i>Configure/Home</i>?\n"
+msgstr ""
+"<p>... możesz dostosować \"stronę startową\"\n"
+"w <i>Konfiguruj/Strona domowa</i>?\n"
+
+#: _tips.cpp:93
+msgid ""
+"<p>...that you can enter new transactions even while reconciling\n"
+"an account? You can also make the transaction form visible.\n"
+msgstr ""
+"<p>...można wprowadzać nowe transakcje nawet podczas uzgadniania\n"
+"konta? Można również pokazać formularz transakcji.\n"
+
+#: _tips.cpp:99
+#, fuzzy
+msgid ""
+"<p>...that you can actively support the KMyMoney development team in\n"
+"cases that heavily depend on your data? You can save your data in an\n"
+"anonymized way for this support.<p>\n"
+"Just open your data file and immediately\n"
+"select <b>File/Save as...</b>. In the <b>Save As...</b> dialog\n"
+"select the filter <b>Anonymous Files</b> and make sure your file gets\n"
+"the extensions <b>.anon.xml</b>. <p>\n"
+"To verify, how the data looks like you are about to send away, you can open\n"
+"this file in KMyMoney and see how the developers see your data.\n"
+msgstr ""
+"<p>...możesz aktywnie wspomagać ekipę programistów KMyMoney w\n"
+"przypadkach, które bardzo zależą od Twoich danych? Możesz wtedy zapisać dane "
+"w\n"
+"anonimowy sposób.<p>\n"
+"Po prostu otwórz plik z danymi i natychmiast\n"
+"wybierz <b>Plik/Zapisz jako...</b>. W okienku <b>Zapisz jako...</b>\n"
+"wybierz filtr <b>Anonimowe pliki</b> i upewnij się, że Twój plik\n"
+"przybierze rozszerzenie <b>.anon.xml</b>.<p>\n"
+"Żeby zweryfikować wygląd danych, które zamierzasz zaraz wysłać, możesz "
+"otworzyć\n"
+"plik w KMyMoney i zobaczyć, jakie dane zobaczą programiści.\n"
+
+#: _tips.cpp:112
+msgid ""
+"<p>... that you can import your bank statements even without a network \n"
+"connection? Just select the file (OFX or QIF) from the File->Import menu.</"
+"p>\n"
+"<p>Provided by Jose Jorge</p>\n"
+msgstr ""
+
+#: reports/listtable.cpp:159 reports/listtable.cpp:163
+#: reports/pivottable.cpp:1564
+msgid ""
+"_: Report date range\n"
+"%1 through %2"
+msgstr ""
+
+#: reports/listtable.cpp:171 reports/pivottable.cpp:1571
+#, c-format
+msgid "All currencies converted to %1"
+msgstr "Wszystkie waluty skonwertowano na %1"
+
+#: reports/listtable.cpp:172 reports/pivottable.cpp:1328
+msgid "All currencies converted to %1\n"
+msgstr "Wszystkie waluty skonwertowano na %1\n"
+
+#: reports/listtable.cpp:176 reports/pivottable.cpp:1573
+msgid "All values shown in %1 unless otherwise noted"
+msgstr "Wszystkie wartości pokazane w %1, chyba że zaznaczono inaczej"
+
+#: reports/listtable.cpp:177 reports/pivottable.cpp:1330
+msgid "All values shown in %1 unless otherwise noted\n"
+msgstr "Wszystkie wartości pokazane w %1, chyba że zaznaczono inaczej\n"
+
+#: dialogs/kequitypriceupdatedlg.cpp:73 dialogs/kfindtransactiondlg.cpp:188
+#: dialogs/rc.cpp:53 dialogs/rc.cpp:63 dialogs/rc.cpp:208 dialogs/rc.cpp:805
+#: dialogs/settings/rc.cpp:111 dialogs/transactioneditor.cpp:844
+#: reports/listtable.cpp:196 views/khomeview.cpp:412 views/khomeview.cpp:485
+#: views/khomeview.cpp:519 views/rc.cpp:61 widgets/kmymoneypriceview.cpp:128
+#: widgets/rc.cpp:36 widgets/register.cpp:565 widgets/transaction.cpp:1027
+#: widgets/transaction.cpp:1484
+msgid "Date"
+msgstr "Data"
+
+#: reports/listtable.cpp:198
+msgid "Num"
+msgstr "Num"
+
+#: dialogs/kfindtransactiondlg.cpp:204 dialogs/kmymoneysplittable.cpp:78
+#: dialogs/kmymoneysplittable.cpp:831 dialogs/rc.cpp:217
+#: dialogs/transactioneditor.cpp:831 dialogs/transactioneditor.cpp:1374
+#: dialogs/transactioneditor.cpp:1382 dialogs/transactioneditor.cpp:1396
+#: dialogs/transactioneditor.cpp:1449 dialogs/transactioneditor.cpp:1456
+#: dialogs/transactioneditor.cpp:1504 reports/listtable.cpp:200
+#: views/kcategoriesview.cpp:76 views/rc.cpp:62 widgets/rc.cpp:115
+#: widgets/register.cpp:62 widgets/transaction.cpp:848
+#: widgets/transaction.cpp:906
+msgid "Category"
+msgstr "Kategoria"
+
+#: dialogs/kmymoneysplittable.cpp:79 dialogs/kmymoneysplittable.cpp:837
+#: reports/listtable.cpp:202 widgets/rc.cpp:101 widgets/transaction.cpp:1042
+#: widgets/transaction.cpp:1628
+msgid "Memo"
+msgstr "Notatka"
+
+#: reports/listtable.cpp:203
+msgid "Top Category"
+msgstr "Kategoria główna"
+
+#: reports/listtable.cpp:204
+msgid "Category Type"
+msgstr "Typ kategorii"
+
+#: dialogs/rc.cpp:229 dialogs/settings/rc.cpp:152 reports/listtable.cpp:207
+#: widgets/kmymoneycombo.cpp:346 widgets/rc.cpp:107
+msgid "Reconciled"
+msgstr "Uzgodnione"
+
+#: reports/listtable.cpp:208 widgets/rc.cpp:117
+msgid "Action"
+msgstr "Działanie"
+
+#: dialogs/investactivities.cpp:199 dialogs/investactivities.cpp:287
+#: dialogs/investactivities.cpp:424 dialogs/investactivities.cpp:504
+#: dialogs/investactivities.cpp:544 dialogs/investtransactioneditor.cpp:241
+#: reports/listtable.cpp:209 widgets/rc.cpp:103 widgets/transaction.cpp:1513
+msgid "Shares"
+msgstr "Udziały"
+
+#: dialogs/investtransactioneditor.cpp:248
+#: dialogs/investtransactioneditor.cpp:1067
+#: dialogs/investtransactioneditor.cpp:1068
+#: dialogs/investtransactioneditor.cpp:1072
+#: dialogs/kequitypriceupdatedlg.cpp:72 dialogs/rc.cpp:109 dialogs/rc.cpp:164
+#: dialogs/rc.cpp:251 dialogs/rc.cpp:756 dialogs/rc.cpp:827
+#: dialogs/settings/rc.cpp:117 reports/listtable.cpp:210
+#: reports/listtable.cpp:211 reports/pivottable.cpp:2441
+#: views/kinvestmentview.cpp:80 widgets/kmymoneypriceview.cpp:129
+#: widgets/rc.cpp:43 widgets/rc.cpp:105 widgets/register.cpp:573
+msgid "Price"
+msgstr "Cena"
+
+#: reports/listtable.cpp:212
+msgid "Net Value"
+msgstr "Wartość netto"
+
+#: reports/listtable.cpp:213
+msgid "Buys"
+msgstr "Zakupy"
+
+#: reports/listtable.cpp:214
+msgid "Sells"
+msgstr "Sprzedaże"
+
+#: reports/listtable.cpp:215
+msgid "Dividends Reinvested"
+msgstr "Dywidendy zainwestowane"
+
+#: reports/listtable.cpp:216
+msgid "Dividends Paid Out"
+msgstr "Dywidendy wypłacone"
+
+#: reports/listtable.cpp:217
+msgid "Starting Balance"
+msgstr "Saldo początkowe"
+
+#: reports/listtable.cpp:218
+msgid "Ending Balance"
+msgstr "Saldo końcowe"
+
+#: reports/listtable.cpp:219
+msgid "Annualized Return"
+msgstr "Roczna stopa zwrotu"
+
+#: reports/listtable.cpp:220
+#, fuzzy
+msgid "Return On Investment"
+msgstr "Inwestycja"
+
+#: dialogs/rc.cpp:106 dialogs/rc.cpp:161 dialogs/rc.cpp:248 dialogs/rc.cpp:505
+#: dialogs/rc.cpp:570 dialogs/rc.cpp:667 dialogs/rc.cpp:753
+#: reports/listtable.cpp:223 widgets/register.cpp:570
+msgid "Payment"
+msgstr "Płatność"
+
+#: dialogs/rc.cpp:111 dialogs/rc.cpp:166 dialogs/rc.cpp:253 dialogs/rc.cpp:709
+#: dialogs/rc.cpp:758 reports/listtable.cpp:224 widgets/rc.cpp:119
+#: widgets/register.cpp:575
+msgid "Balance"
+msgstr "Saldo"
+
+#: reports/listtable.cpp:227 views/kscheduledview.cpp:74
+msgid "Next Due Date"
+msgstr "Kolejna data płatności"
+
+#: reports/listtable.cpp:229 views/kscheduledview.cpp:76
+msgid "Payment Method"
+msgstr "Sposób zapłaty"
+
+#: dialogs/rc.cpp:803 reports/listtable.cpp:231 widgets/rc.cpp:2
+msgid "Description"
+msgstr "Opis"
+
+#: reports/listtable.cpp:232
+#, fuzzy
+msgid "Opening Date"
+msgstr "Aktualizacja online"
+
+#: reports/listtable.cpp:234
+msgid "Balance Early Warning"
+msgstr ""
+
+#: reports/listtable.cpp:235
+#, fuzzy
+msgid "Balance Max Limit"
+msgstr "Saldo: "
+
+#: reports/listtable.cpp:236
+#, fuzzy
+msgid "Credit Early Warning"
+msgstr "Import transakcji"
+
+#: reports/listtable.cpp:237
+#, fuzzy
+msgid "Credit Max Limit"
+msgstr "Karta kredytowa"
+
+#: dialogs/rc.cpp:376 reports/listtable.cpp:238
+msgid "Tax"
+msgstr "Podatek"
+
+#: reports/listtable.cpp:239
+#, fuzzy
+msgid "Preferred"
+msgstr "Preferowane konto"
+
+#: reports/listtable.cpp:240
+#, fuzzy
+msgid "Loan Amount"
+msgstr "Kwota pożyczki"
+
+#: dialogs/rc.cpp:511 reports/listtable.cpp:241
+msgid "Interest Rate"
+msgstr "Stopa procentowa"
+
+#: reports/listtable.cpp:242
+#, fuzzy
+msgid "Next Interest Change"
+msgstr "Kolejna zmiana oprocentowania"
+
+#: reports/listtable.cpp:243
+#, fuzzy
+msgid "Periodic Payment"
+msgstr "Okresowa płatność:"
+
+#: reports/listtable.cpp:244
+#, fuzzy
+msgid "Final Payment"
+msgstr "Końcowa płatność:"
+
+#: reports/listtable.cpp:245 views/khomeview.cpp:766 views/khomeview.cpp:1265
+#: views/khomeview.cpp:1273
+#, fuzzy
+msgid "Current Balance"
+msgstr "Aktualne saldo: "
+
+#: dialogs/investactivities.cpp:201 dialogs/investactivities.cpp:289
+#: dialogs/investactivities.cpp:368 dialogs/investactivities.cpp:426
+#: dialogs/rc.cpp:327 reports/listtable.cpp:360 reports/listtable.cpp:364
+#: reports/listtable.cpp:556 reports/listtable.cpp:558
+#: reports/pivottable.cpp:1343 reports/pivottable.cpp:1445
+#: reports/pivottable.cpp:1505 reports/pivottable.cpp:1598
+#: reports/pivottable.cpp:1768 reports/pivottable.cpp:1845
+#: reports/pivottable.cpp:2165 reports/pivottable.cpp:2167
+#: reports/pivottable.cpp:2187 reports/pivottable.cpp:2189
+#: reports/querytabletest.cpp:134 reports/querytabletest.cpp:135
+#: reports/querytabletest.cpp:136 reports/querytabletest.cpp:137
+#: reports/querytabletest.cpp:162 reports/querytabletest.cpp:163
+#: reports/querytabletest.cpp:164 reports/querytabletest.cpp:197
+#: reports/querytabletest.cpp:198 reports/querytabletest.cpp:224
+#: reports/querytabletest.cpp:250 reports/querytabletest.cpp:251
+#: reports/querytabletest.cpp:252 reports/querytabletest.cpp:275
+#: reports/querytabletest.cpp:276 reports/querytabletest.cpp:277
+#: reports/querytabletest.cpp:366 reports/querytabletest.cpp:422
+#: reports/querytabletest.cpp:423 views/kforecastview.cpp:568 views/rc.cpp:18
+#: widgets/kmymoneyaccounttreeforecast.cpp:139 widgets/transaction.cpp:1643
+msgid "Total"
+msgstr "Suma"
+
+#: reports/listtable.cpp:444
+msgid "Initial Market Value"
+msgstr ""
+
+#: reports/listtable.cpp:445
+#, fuzzy
+msgid "Ending Market Value"
+msgstr "Saldo końcowe"
+
+#: reports/listtable.cpp:448 reports/querytabletest.cpp:651
+#, fuzzy
+msgid "Opening Balance"
+msgstr "Stany otwarcia"
+
+#: reports/listtable.cpp:449 reports/querytabletest.cpp:652
+#: reports/querytabletest.cpp:653
+#, fuzzy
+msgid "Closing Balance"
+msgstr "Saldo końcowe"
+
+#: reports/listtable.cpp:490 reports/listtable.cpp:491
+#, fuzzy
+msgid "Calculated"
+msgstr "oblicz"
+
+#: reports/listtable.cpp:572 reports/listtable.cpp:574
+#: reports/pivottable.cpp:1530 reports/pivottable.cpp:1886
+#: reports/querytabletest.cpp:138 reports/querytabletest.cpp:165
+#: reports/querytabletest.cpp:199 reports/querytabletest.cpp:225
+#: reports/querytabletest.cpp:253 reports/querytabletest.cpp:278
+#: reports/querytabletest.cpp:367 reports/querytabletest.cpp:402
+#: reports/querytabletest.cpp:424 reports/querytabletest.cpp:548
+#: reports/querytabletest.cpp:551 reports/querytabletest.cpp:586
+msgid "Grand Total"
+msgstr "Suma całkowita"
+
+#: dialogs/rc.cpp:233 reports/pivottable.cpp:339 views/kscheduledview.cpp:174
+#: views/kscheduledview.cpp:433 views/kscheduledview.cpp:449
+#: widgets/kmymoneyscheduledcalendar.cpp:48
+msgid "Transfers"
+msgstr "Przelewy"
+
+#: reports/pivottable.cpp:1951
+#, fuzzy
+msgid "Legend"
+msgstr "Księgi rachunkowe"
+
+#: reports/pivottable.cpp:2411 views/khomeview.cpp:1406
+#: views/khomeview.cpp:1443
+msgid "Actual"
+msgstr ""
+
+#: reports/pivottable.cpp:2421 views/khomeview.cpp:1409
+#: views/khomeview.cpp:1446
+#, fuzzy
+msgid "Difference"
+msgstr "Różnica:"
+
+#: reports/pivottable.cpp:2431
+#, fuzzy
+msgid "Moving Average"
+msgstr "Wszystkie stany"
+
+#: reports/pivottable.cpp:2436
+#, fuzzy
+msgid "Moving Average Price"
+msgstr "Wszystkie stany"
+
+#: reports/objectinfotable.cpp:214 reports/querytable.cpp:693
+#: reports/querytable.cpp:736 reports/querytable.cpp:1356
+#: reports/querytable.cpp:1375 views/kpayeesview.cpp:742
+#, c-format
+msgid "Transfer from %1"
+msgstr "Przelew od %1"
+
+#: reports/objectinfotable.cpp:215 reports/querytable.cpp:694
+#: reports/querytable.cpp:735 reports/querytable.cpp:1355
+#: reports/querytable.cpp:1374 views/kpayeesview.cpp:740
+#, c-format
+msgid "Transfer to %1"
+msgstr "Przelew na %1"
+
+#: reports/querytabletest.cpp:471 views/kreportsview.cpp:1144
+msgid "Investment Transactions"
+msgstr "Transakcje inwestycyjne"
+
+#: reports/querytabletest.cpp:472 reports/querytabletest.cpp:564
+msgid "Test Report"
+msgstr "Raport testowy"
+
+#: reports/querytabletest.cpp:547 reports/querytabletest.cpp:550
+msgid "Total Stock 1"
+msgstr "Total Stock 1"
+
+#: reports/querytabletest.cpp:563 views/kreportsview.cpp:1174
+msgid "Investment Performance by Account"
+msgstr "Rentowność inwestycji wg konta"
+
+#: reports/querytable.cpp:431 reports/querytable.cpp:1200
+#, c-format
+msgid "Month of %1"
+msgstr "Miesiąc %1"
+
+#: reports/querytable.cpp:432 reports/querytable.cpp:1201
+#, c-format
+msgid "Week of %1"
+msgstr "Tydzień %1"
+
+#: reports/querytable.cpp:576 reports/querytable.cpp:739
+#: reports/querytable.cpp:858 reports/querytable.cpp:1325
+#: reports/querytable.cpp:1481
+#, fuzzy
+msgid "No Institution"
+msgstr "<Bez instytucji>"
+
+#: reports/querytable.cpp:580 reports/querytable.cpp:1329
+msgid "[Empty Payee]"
+msgstr "[Pusty beneficjent]"
+
+#: reports/querytable.cpp:615 reports/querytable.cpp:1361
+#, fuzzy
+msgid "[Split Transaction]"
+msgstr "Podziel transakcję"
+
+#: reports/querytable.cpp:616 reports/querytable.cpp:617
+msgid "Split"
+msgstr "Podział"
+
+#: main.cpp:51
+msgid ""
+"\n"
+"KMyMoney, the Personal Finance Manager for KDE.\n"
+"\n"
+"Please consider contributing to this project with code and/or suggestions."
+msgstr ""
+"\n"
+"KMyMoney, zarządzanie finansami osobistymi dla KDE.\n"
+"\n"
+"Proszę rozważyć własny wkład w projekt w postaci kodu i/lub sugestii."
+
+#: main.cpp:55
+msgid "language to be used"
+msgstr "użyty język"
+
+#: main.cpp:56
+msgid "don't open last used file"
+msgstr "nie otwieraj ostatnio używanego pliku"
+
+#: main.cpp:57
+msgid "enable performance timers"
+msgstr ""
+
+#: main.cpp:61
+msgid "turn on program traces"
+msgstr "włącz komunikaty diagnostyczne"
+
+#: main.cpp:62
+msgid "dump the names of all defined KAction objects to stdout and quit"
+msgstr ""
+
+#: main.cpp:66
+msgid "file to open"
+msgstr "plik do otwarcia"
+
+#: main.cpp:92
+msgid "Memory leakage detection"
+msgstr "Wykrywanie wycieków pamięci"
+
+#: main.cpp:96
+msgid "Compiled with the following settings:\n"
+msgstr "Skompilowany z następującymi ustawieniami:\n"
+
+#: dialogs/kmymoneysplittable.cpp:650 dialogs/ksplittransactiondlg.cpp:277
+#: main.cpp:98
+msgid "KMyMoney"
+msgstr "KMyMoney"
+
+#: main.cpp:104
+#, fuzzy
+msgid "Initial idea, much initial source code, Project admin"
+msgstr ""
+"Pierwotny pomysł, większość oryginalnego kodu źródłowego, administrator "
+"projektu"
+
+#: main.cpp:105
+msgid "Core engine, Release Manager, Project admin"
+msgstr "Silnik rdzenia, menadżer wydań, administrator projektu"
+
+#: main.cpp:106
+msgid "Reporting logic, OFX Import"
+msgstr "Logika raportowania, import OFX"
+
+#: main.cpp:107
+msgid "Database backend, maintainer stable branch"
+msgstr ""
+
+#: main.cpp:108
+#, fuzzy
+msgid "Forecast, Reports"
+msgstr "Ulubione raporty"
+
+#: main.cpp:109
+msgid "Project Admin"
+msgstr "Administrator projektu"
+
+#: main.cpp:110
+msgid "Developer"
+msgstr "Programista"
+
+#: main.cpp:111
+#, fuzzy
+msgid "Database backend"
+msgstr "Zakres dat"
+
+#: main.cpp:113
+msgid "Initial investment support"
+msgstr "Pierwotna obsługa inwestycji"
+
+#: main.cpp:114
+msgid "Developer & Artist"
+msgstr "Programista i grafik"
+
+#: main.cpp:115
+msgid "Icons & splash screen"
+msgstr "Ikonki i ekran powitalny"
+
+#: main.cpp:116 main.cpp:117
+msgid "Patches"
+msgstr "Łatki"
+
+#: main.cpp:136
+#, fuzzy
+msgid ""
+"The monetary decimal symbol is not correctly set in the KDE Control Center's "
+"Country/Region & Language settings. Please set it to a reasonable value and "
+"start KMyMoney again."
+msgstr ""
+"Albo symbol przecinka w walucie, albo separator tysięcy nie jest poprawnie "
+"ustawiony w centrum sterowania KDE - ustawienia regionalne. Proszę je "
+"ustawić na jakieś rozsądne wartości i uruchomić ponownie KMyMoney."
+
+#: main.cpp:136
+msgid "Invalid settings"
+msgstr "Niepoprawne ustawienia"
+
+#: main.cpp:228
+msgid "Another instance of KMyMoney is already running. Do you want to quit?"
+msgstr "Jest już uruchomiona inna instancja KMyMoney. Czy chcesz zakończyć?"
+
+#: main.cpp:289
+msgid "Uncaught error. Please report the details to the developers"
+msgstr ""
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr ""
+"Marcin Gil\n"
+"Robert Gomułka"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr ""
+"marcin.gil@gmail.com\n"
+"carramba@epf.pl"
+
+#: dialogs/kcsvprogressdlg.cpp:62 dialogs/kimportdlg.cpp:66 rc.cpp:1
+msgid "&Import"
+msgstr "&Import"
+
+#: rc.cpp:2
+msgid "E&xport"
+msgstr "&Eksport"
+
+#: rc.cpp:3
+msgid "&Institution"
+msgstr "&Instytucja"
+
+#: rc.cpp:4
+msgid "&Account"
+msgstr "&Konto"
+
+#: rc.cpp:5
+#, fuzzy
+msgid "&Category"
+msgstr "Kategoria"
+
+#: rc.cpp:6
+#, fuzzy
+msgid "&Transaction"
+msgstr "Transakcje"
+
+#: rc.cpp:7 rc.cpp:20
+#, fuzzy
+msgid "Mark transaction as..."
+msgstr "Scalanie transakcji ..."
+
+#: rc.cpp:8 rc.cpp:21
+#, fuzzy
+msgid "Mark transaction"
+msgstr " transakcje\n"
+
+#: rc.cpp:9
+#, fuzzy
+msgid "T&ools"
+msgstr "Suma"
+
+#: rc.cpp:10
+msgid "Account options"
+msgstr "Opcje konta"
+
+#: rc.cpp:11
+#, fuzzy
+msgid "Category options"
+msgstr "Wybór kategorii"
+
+#: rc.cpp:12
+#, fuzzy
+msgid "Institution options"
+msgstr "Opcje instytucji"
+
+#: rc.cpp:13
+#, fuzzy
+msgid "Payee options"
+msgstr "Opcje beneficjenta"
+
+#: rc.cpp:14
+#, fuzzy
+msgid "Budget options"
+msgstr "Opcje konta"
+
+#: rc.cpp:15
+#, fuzzy
+msgid "Investment options"
+msgstr "Opcje inwestycji"
+
+#: rc.cpp:16
+#, fuzzy
+msgid "Scheduled transactions options"
+msgstr "Zaplanowane transakcje"
+
+#: rc.cpp:17
+#, fuzzy
+msgid "Transaction options"
+msgstr "Opcje transakcji"
+
+#: rc.cpp:18
+#, fuzzy
+msgid "Move transaction to..."
+msgstr "Scalanie transakcji ..."
+
+#: rc.cpp:19
+#, fuzzy
+msgid "Select account"
+msgstr "Wybierz konto:"
+
+#: rc.cpp:22
+#, fuzzy
+msgid "Currency options"
+msgstr "Opcje waluty"
+
+#: rc.cpp:24
+msgid "Always show a No. field in transaction form"
+msgstr "Zawsze pokazuj pole numeru w formularzu transakcji"
+
+#: rc.cpp:25
+msgid "Auto fill with previous transaction data"
+msgstr "Wypełniaj automatycznie danymi poprzedniej transakcji"
+
+#: rc.cpp:26
+msgid "Treat two transactions as identical, if amount differs less than"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:144 rc.cpp:27
+msgid "Auto increment check number"
+msgstr "Automatycznie zwiększaj numer rachunku"
+
+#: rc.cpp:28
+msgid "Autosave file periodically"
+msgstr ""
+
+#: rc.cpp:29
+msgid "Autosave interval in minutes"
+msgstr ""
+
+#: rc.cpp:30
+msgid "Check schedules upon startup"
+msgstr "Sprawdź harmonogramy przy starcie"
+
+#: dialogs/settings/rc.cpp:171 rc.cpp:31
+msgid "Enter transactions this number of days in advance"
+msgstr "Przejdź do transakcji z wyprzedzeniem o tę liczbę dni"
+
+#: dialogs/settings/rc.cpp:172 rc.cpp:32
+msgid "Number of days to preview schedules in ledger"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:143 rc.cpp:33
+msgid "Insert transaction type into No. field for new transactions"
+msgstr "Wstaw typ transakcji do pola numeru przy nowych transakcjach"
+
+#: dialogs/settings/rc.cpp:145 rc.cpp:34
+msgid "Keep changes when selecting a different transaction/split"
+msgstr "Zachowaj zmiany podczas wybierania innej transakcji lub podziału"
+
+#: rc.cpp:35
+msgid "Using the Enter key moves between the fields"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:130 rc.cpp:36
+msgid "Use the ledger lens"
+msgstr "Użyj lupy księgi rachunkowej"
+
+#: rc.cpp:37
+#, fuzzy
+msgid "Price Precision"
+msgstr "Dokładność ceny: "
+
+#: dialogs/rc.cpp:65 rc.cpp:38
+msgid "Update price history"
+msgstr "Aktualizuj historię ceny"
+
+#: dialogs/settings/rc.cpp:132 rc.cpp:39
+msgid "Show transaction form"
+msgstr "Pokaż formularz transakcji"
+
+#: rc.cpp:40
+#, fuzzy
+msgid "Start with last selected view or homepage"
+msgstr "Uruchom z ostatnio wybraną stroną"
+
+#: rc.cpp:41
+#, fuzzy
+msgid "Use GPG to encrypt data file"
+msgstr "Użyj szyfrowania GPG"
+
+#: rc.cpp:42
+#, fuzzy
+msgid "Also encrypt against recover key"
+msgstr "Szyfruj również z kluczem odzyskiwania KMyMoney"
+
+#: rc.cpp:43
+#, fuzzy
+msgid "GPG User ID (deprecated)"
+msgstr "ID użytkownika"
+
+#: rc.cpp:44
+#, fuzzy
+msgid "GPG User ID"
+msgstr "ID użytkownika"
+
+#: rc.cpp:45
+msgid "Run in expert (accountant) mode"
+msgstr ""
+
+#: rc.cpp:46
+msgid "Show splash screen during startup"
+msgstr ""
+
+#: rc.cpp:47
+msgid "Synchronize account in ledger and investment view"
+msgstr ""
+
+#: rc.cpp:48
+msgid "Icon size for view selection"
+msgstr ""
+
+#: rc.cpp:49
+msgid "list of hidden views"
+msgstr ""
+
+#: rc.cpp:50
+msgid "Firsttime switch to start new user wizard"
+msgstr ""
+
+#: rc.cpp:51
+msgid "Show title bar on each view"
+msgstr ""
+
+#: rc.cpp:52
+msgid "Start string matches for e.g. payees at start of string"
+msgstr ""
+
+#: rc.cpp:53
+msgid "Order of items on homepage"
+msgstr ""
+
+#: rc.cpp:54
+msgid "Percentage of default font size used for home view HTML page"
+msgstr ""
+
+#: rc.cpp:55
+msgid "Remember (manually adjusted) font size in home view on program end."
+msgstr ""
+
+#: rc.cpp:56
+msgid "Show account limit information on the Homepage"
+msgstr ""
+
+#: rc.cpp:58
+#, fuzzy
+msgid "Hide closed accounts"
+msgstr "Odfiltruj konta"
+
+#: rc.cpp:59
+#, fuzzy
+msgid "Hide finished schedules"
+msgstr "Wczytywanie harmonogramów..."
+
+#: rc.cpp:61
+msgid "Show all register entries in full detail"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:129 rc.cpp:62
+#, fuzzy
+msgid "Show a grid in the register"
+msgstr "Pokaż siatkę rejestru."
+
+#: rc.cpp:63
+msgid "Show fancy group markers"
+msgstr ""
+
+#: rc.cpp:64
+msgid "Show fancy markers for previous and current fiscal year"
+msgstr ""
+
+#: rc.cpp:65
+msgid "Starting month of the fiscal year"
+msgstr ""
+
+#: rc.cpp:66
+#, fuzzy
+msgid "Starting day of the fiscal year"
+msgstr "Początkowa data wyciągu"
+
+#: rc.cpp:67
+#, fuzzy
+msgid "Start date"
+msgstr "Data początkowa:"
+
+#: dialogs/settings/rc.cpp:9 rc.cpp:68
+#, fuzzy
+msgid "Use system colors"
+msgstr "Użyj czcionek systemowych"
+
+#: rc.cpp:69
+#, fuzzy
+msgid "List color"
+msgstr "Kolory list"
+
+#: rc.cpp:70
+#, fuzzy
+msgid "List background color"
+msgstr "Kolor tła listy:"
+
+#: rc.cpp:71
+#, fuzzy
+msgid "List grid color"
+msgstr "Kolor siatki listy:"
+
+#: rc.cpp:72
+#, fuzzy
+msgid "Background color for imported transactions"
+msgstr "Problem z dodaniem zaimportowanej transakcji: "
+
+#: rc.cpp:73
+msgid "Background color for matched transactions"
+msgstr ""
+
+#: rc.cpp:74
+msgid "List color for erronous transactions"
+msgstr ""
+
+#: rc.cpp:75
+#, fuzzy
+msgid "List color for missing conversion rate"
+msgstr "Wartość z brakującym kursem wymiany:"
+
+#: rc.cpp:76
+msgid "List color for negative values"
+msgstr ""
+
+#: rc.cpp:77
+msgid "Background color for group marker"
+msgstr ""
+
+#: rc.cpp:78
+msgid "Background color for required fields"
+msgstr ""
+
+#: rc.cpp:79
+#, fuzzy
+msgid "Use system font"
+msgstr "Użyj czcionek systemowych"
+
+#: dialogs/settings/rc.cpp:21 rc.cpp:80
+#, fuzzy
+msgid "Cell font"
+msgstr "Czcionka komórki"
+
+#: dialogs/settings/rc.cpp:22 rc.cpp:81
+#, fuzzy
+msgid "Header font"
+msgstr "Czcionka nagłówka"
+
+#: rc.cpp:82 rc.cpp:83
+msgid "Sort order of register in normal view"
+msgstr ""
+
+#: rc.cpp:84
+msgid "Sort order of register in search dialog"
+msgstr ""
+
+#: rc.cpp:85
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation"
+msgstr ""
+
+#: rc.cpp:86
+#, fuzzy
+msgid "Number of days (plus/minus) to search for matching transactions"
+msgstr "Szuka pasujących transakcji przy użyciu bieżących kryteriów."
+
+#: rc.cpp:87
+msgid "During import, ask for a new payee's default category"
+msgstr ""
+
+#: rc.cpp:88
+msgid "Method to calculate forecast"
+msgstr ""
+
+#: rc.cpp:89
+msgid "Days to forecast"
+msgstr ""
+
+#: rc.cpp:90
+msgid "Days of normal account cycle"
+msgstr ""
+
+#: rc.cpp:91
+msgid "Number of historic cycles to use in forecast"
+msgstr ""
+
+#: rc.cpp:92
+msgid "Day of month to start forecast"
+msgstr ""
+
+#: rc.cpp:93
+msgid "Method to calculate history-based forecast"
+msgstr ""
+
+#: rc.cpp:94
+#, fuzzy
+msgid "Skip opening date when fetching transactions"
+msgstr "Pomiń tę transakcję"
+
+#: rc.cpp:95
+msgid "Include future transaction when using Schedule Forecast"
+msgstr ""
+
+#: rc.cpp:96
+#, fuzzy
+msgid "Include scheduled transactions when using Schedule Forecast"
+msgstr "Zaplanowane transakcje"
+
+#: rc.cpp:97
+msgid "additional names for cash account"
+msgstr ""
+
+#: rc.cpp:98
+msgid "additional names for checking account"
+msgstr ""
+
+#: rc.cpp:99
+msgid "additional names for credit card account"
+msgstr ""
+
+#: rc.cpp:100
+#, fuzzy
+msgid "additional names for asset account"
+msgstr "Stwórz nowy rachunek aktywów"
+
+#: rc.cpp:101
+msgid "additional names for opening balance payee"
+msgstr ""
+
+#: rc.cpp:102
+msgid "additional names for invoice accounts"
+msgstr ""
+
+#: rc.cpp:103 widgets/rc.cpp:161 widgets/rc.cpp:163
+msgid "..."
+msgstr "..."
+
+#: views/kcategoriesview.cpp:276
+#, fuzzy
+msgid "Profit: "
+msgstr "Zysk: %1"
+
+#: views/kcategoriesview.cpp:278
+#, fuzzy
+msgid "Loss: "
+msgstr "Strata: %1"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:54
+#: dialogs/transactioneditor.cpp:605 views/kpayeesview.cpp:365
+#: widgets/kmymoneyonlinequoteconfig.cpp:54
+msgid "Accepts the entered data and stores it"
+msgstr "Akceptuje i zapisuje wprowadzone dane"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:55 views/kpayeesview.cpp:366
+#: widgets/kmymoneyonlinequoteconfig.cpp:55
+msgid "Use this to accept the modified data."
+msgstr "Użyj, żeby zaakceptować zmienione dane."
+
+#: views/kpayeesview.cpp:491
+msgid ""
+"A payee with the name '%1' already exists. It is not advisable to have "
+"multiple payees with the same identification name. Are you sure you would "
+"like to rename the payee?"
+msgstr ""
+
+#: views/kpayeesview.cpp:518 views/kpayeesview.cpp:869
+msgid "Unable to modify payee"
+msgstr "Nie można zmodyfikować beneficjenta"
+
+#: views/kpayeesview.cpp:564
+#, fuzzy
+msgid "Do you want to save the changes for <b>%1</b>?"
+msgstr "Czy chcesz odrzucić zmiany '%1'"
+
+#: views/kbudgetview.cpp:490 views/kpayeesview.cpp:565
+#, fuzzy
+msgid "Save changes"
+msgstr "Odrzuć zmiany"
+
+#: views/kgloballedgerview.cpp:737 views/kpayeesview.cpp:662
+#: views/kpayeesview.cpp:753
+#, c-format
+msgid "Balance: %1"
+msgstr "Saldo: %1"
+
+#: views/kpayeesview.cpp:725 views/kpayeesview.cpp:731
+#, c-format
+msgid "Amortization of %1"
+msgstr "Amortyzacja %1"
+
+#: views/kpayeesview.cpp:727 views/kpayeesview.cpp:733
+#, c-format
+msgid "Payment to %1"
+msgstr "Płatność na %1"
+
+#: views/kpayeesview.cpp:736
+#, c-format
+msgid "Loan payment from %1"
+msgstr "Spłata pożyczki z %1"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:123
+#: dialogs/kconfirmmanualenterdlg.cpp:133 views/kpayeesview.cpp:745
+#: widgets/kmymoneycategory.cpp:160 widgets/kmymoneycategory.cpp:166
+#: widgets/transaction.cpp:851 widgets/transaction.cpp:1397
+#: widgets/transaction.cpp:1411
+#, fuzzy
+msgid ""
+"_: Split transaction (category replacement)\n"
+"Split transaction"
+msgstr "Zaznacz transakcje bez beneficjentów"
+
+#: views/kreportsview.cpp:262
+msgid ""
+"There was an error creating your report: \"%1\".\n"
+"Please report this error to the developer's list: kmymoney2-developer@lists."
+"sourceforge.net"
+msgstr ""
+"Wystąpił błąd podczas tworzenia raportu: \"%1\".\n"
+"Proszę go zgłosić na listę programistów: kmymoney2-developer@lists."
+"sourceforge.net"
+
+#: views/kreportsview.cpp:264
+msgid "Critical Error"
+msgstr "Błąd krytyczny"
+
+#: views/kreportsview.cpp:268
+msgid "Unable to generate report"
+msgstr "Nie można wygenerować raportu"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:125 views/kreportsview.cpp:286
+#: views/rc.cpp:53 widgets/rc.cpp:146
+msgid "Chart"
+msgstr "Wykres"
+
+#: views/kreportsview.cpp:287 widgets/rc.cpp:147
+msgid "Show the chart version of this report"
+msgstr "Pokaż ten raport jako wykres"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:112 views/khomeview.cpp:900
+#: views/kreportsview.cpp:294 views/kreportsview.cpp:328
+msgid "Report"
+msgstr "Raport"
+
+#: views/kreportsview.cpp:295
+msgid "Show the report version of this chart"
+msgstr "Pokaż ten wykres jako raport"
+
+#: views/kmymoneyview.cpp:236 views/kreportsview.cpp:314
+#: views/kreportsview.cpp:326
+msgid "Reports"
+msgstr "Raporty"
+
+#: views/khomeview.cpp:902 views/kreportsview.cpp:329 widgets/rc.cpp:56
+msgid "Comment"
+msgstr "Komentarz"
+
+#: views/kreportsview.cpp:432
+#, fuzzy
+msgid "Charts"
+msgstr "Wykres"
+
+#: views/khomeview.cpp:897 views/kreportsview.cpp:470
+msgid "Favorite Reports"
+msgstr "Ulubione raporty"
+
+#: views/kreportsview.cpp:486
+msgid "Old Customized Reports"
+msgstr "Stare przerobione raporty"
+
+#: views/kreportsview.cpp:579
+msgid "Include Stylesheet"
+msgstr ""
+
+#: views/kreportsview.cpp:585
+#, fuzzy
+msgid ""
+"_: CSV (Filefilter)\n"
+"CSV files"
+msgstr "Brak otwartego pliku KMyMoney"
+
+#: views/kreportsview.cpp:586
+msgid ""
+"_: HTML (Filefilter)\n"
+"HTML files"
+msgstr ""
+
+#: views/kreportsview.cpp:591
+#, fuzzy
+msgid "Export as"
+msgstr "&Eksport"
+
+#: views/kreportsview.cpp:619 views/kreportsview.cpp:660
+#: views/kreportsview.cpp:942 views/kreportsview.cpp:950
+#: views/kreportsview.cpp:958 views/kreportsview.cpp:968
+#: views/kreportsview.cpp:980 views/kreportsview.cpp:998
+#: views/kreportsview.cpp:1006 views/kreportsview.cpp:1014
+#: views/kreportsview.cpp:1022 views/kreportsview.cpp:1034
+#: views/kreportsview.cpp:1046 views/kreportsview.cpp:1056
+#: views/kreportsview.cpp:1070 views/kreportsview.cpp:1079
+#: views/kreportsview.cpp:1087 views/kreportsview.cpp:1095
+#: views/kreportsview.cpp:1103 views/kreportsview.cpp:1111
+#: views/kreportsview.cpp:1120 views/kreportsview.cpp:1132
+#: views/kreportsview.cpp:1145 views/kreportsview.cpp:1155
+#: views/kreportsview.cpp:1165 views/kreportsview.cpp:1175
+#: views/kreportsview.cpp:1185 views/kreportsview.cpp:1195
+#: views/kreportsview.cpp:1208 views/kreportsview.cpp:1222
+#: views/kreportsview.cpp:1239 views/kreportsview.cpp:1257
+#: views/kreportsview.cpp:1273 views/kreportsview.cpp:1295
+#: views/kreportsview.cpp:1304 views/kreportsview.cpp:1313
+#: views/kreportsview.cpp:1322 views/kreportsview.cpp:1336
+#: views/kreportsview.cpp:1347 views/kreportsview.cpp:1362
+#: views/kreportsview.cpp:1372 views/kreportsview.cpp:1383
+#: views/kreportsview.cpp:1393 views/kreportsview.cpp:1404
+#: views/kreportsview.cpp:1423 views/kreportsview.cpp:1432
+#: views/kreportsview.cpp:1444 views/kreportsview.cpp:1463
+#: views/kreportsview.cpp:1472 views/kreportsview.cpp:1481
+#: views/kreportsview.cpp:1490
+msgid "Default Report"
+msgstr "Domyślny raport"
+
+#: views/kreportsview.cpp:621 views/kreportsview.cpp:661
+msgid "Custom Report"
+msgstr "Raport użytkownika"
+
+#: views/kreportsview.cpp:622
+msgid " (Customized)"
+msgstr " (Dostosowany)"
+
+#: views/kreportsview.cpp:690
+#, fuzzy
+msgid ""
+"Are you sure you want to delete report <b>%1</b>? There is no way to "
+"recover it!"
+msgstr "Czy na pewno usunąć %1? Nie ma możliwości jego odzyskania!"
+
+#: views/kreportsview.cpp:690 views/kreportsview.cpp:702
+msgid "Delete Report?"
+msgstr "Usunąć raport?"
+
+#: views/kreportsview.cpp:702
+#, fuzzy
+msgid "Sorry, <b>%1</b> is a default report. You may not delete it."
+msgstr "Niestety, %1 to raport domyślny. Nie można go usunąć."
+
+#: views/kreportsview.cpp:882
+msgid "&Open"
+msgstr "&Otwórz"
+
+#: views/kreportsview.cpp:884
+msgid "&New report"
+msgstr "&Nowy raport"
+
+#: views/kreportsview.cpp:934
+msgid "Income and Expenses"
+msgstr "Dochody i wydatki"
+
+#: views/kreportsview.cpp:941
+msgid "Income and Expenses This Month"
+msgstr "Dochody i wydatki w tym miesiącu"
+
+#: views/kreportsview.cpp:949
+msgid "Income and Expenses This Year"
+msgstr "Dochody i wydatki w tym roku"
+
+#: views/kreportsview.cpp:957
+#, fuzzy
+msgid "Income and Expenses By Year"
+msgstr "Dochody i wydatki w tym roku"
+
+#: views/kreportsview.cpp:967
+#, fuzzy
+msgid "Income and Expenses Graph"
+msgstr "Dochody i wydatki"
+
+#: views/kreportsview.cpp:979
+#, fuzzy
+msgid "Income and Expenses Pie Chart"
+msgstr "Dochody i wydatki w tym roku"
+
+#: views/khomeview.cpp:1361 views/kreportsview.cpp:990
+msgid "Net Worth"
+msgstr "Wartość netto"
+
+#: views/kreportsview.cpp:997
+msgid "Net Worth By Month"
+msgstr "Wartość netto wg miesiąca"
+
+#: views/kreportsview.cpp:1005
+msgid "Net Worth Today"
+msgstr "Wartość netto dziś"
+
+#: views/kreportsview.cpp:1013
+msgid "Net Worth By Year"
+msgstr "Wartość netto wg roku"
+
+#: views/kreportsview.cpp:1021
+msgid "7-day Cash Flow Forecast"
+msgstr ""
+
+#: views/kreportsview.cpp:1033
+#, fuzzy
+msgid "Net Worth Graph"
+msgstr "Wartość netto: "
+
+#: views/kreportsview.cpp:1045
+msgid "Account Balances by Institution"
+msgstr "Stany kont wg instytucji"
+
+#: views/kreportsview.cpp:1055
+msgid "Account Balances by Type"
+msgstr "Stany kont wg typu"
+
+#: views/kreportsview.cpp:1069
+msgid "Transactions by Account"
+msgstr "Transakcje wg konta"
+
+#: views/kreportsview.cpp:1078
+msgid "Transactions by Category"
+msgstr "Transakcje wg kategorii"
+
+#: views/kreportsview.cpp:1086
+msgid "Transactions by Payee"
+msgstr "Transakcje wg beneficjenta"
+
+#: views/kreportsview.cpp:1094
+msgid "Transactions by Month"
+msgstr "Transakcje wg miesiąca"
+
+#: views/kreportsview.cpp:1102
+msgid "Transactions by Week"
+msgstr "Transakcje wg tygodnia"
+
+#: views/kreportsview.cpp:1110
+#, fuzzy
+msgid "Loan Transactions"
+msgstr "Transakcje podatkowe"
+
+#: views/kreportsview.cpp:1119
+#, fuzzy
+msgid "Transactions by Reconciliation Status"
+msgstr "Transakcje wg konta"
+
+#: views/kreportsview.cpp:1125
+#, fuzzy
+msgid "Cash Flow"
+msgstr "Gotówka"
+
+#: views/kreportsview.cpp:1131
+#, fuzzy
+msgid "Cash Flow Transactions This Month"
+msgstr "Transakcje wg miesiąca"
+
+#: views/kmymoneyview.cpp:226 views/kmymoneyview.cpp:228
+#: views/kreportsview.cpp:1137
+msgid "Investments"
+msgstr "Inwestycje"
+
+#: views/kreportsview.cpp:1154
+msgid "Investment Holdings by Account"
+msgstr "Udziały inwestycyjne wg konta"
+
+#: views/kreportsview.cpp:1164
+msgid "Investment Holdings by Type"
+msgstr "Udziały inwestycyjne wg typu"
+
+#: views/kreportsview.cpp:1184
+msgid "Investment Performance by Type"
+msgstr "Rentowność inwestycji wg typu"
+
+#: views/kreportsview.cpp:1194
+#, fuzzy
+msgid "Investment Holdings Pie"
+msgstr "Udziały inwestycyjne wg typu"
+
+#: views/kreportsview.cpp:1207
+#, fuzzy
+msgid "Investment Worth Graph"
+msgstr "Wartość netto: "
+
+#: views/kreportsview.cpp:1221
+#, fuzzy
+msgid "Investment Price Graph"
+msgstr "Wartość netto: "
+
+#: views/kreportsview.cpp:1238
+#, fuzzy
+msgid "Investment Moving Average Price Graph"
+msgstr "Udziały inwestycyjne wg typu"
+
+#: views/kreportsview.cpp:1256
+#, fuzzy
+msgid "Investment Moving Average"
+msgstr "Udziały inwestycyjne wg typu"
+
+#: views/kreportsview.cpp:1272
+#, fuzzy
+msgid "Investment Moving Average vs Actual"
+msgstr "Udziały inwestycyjne wg konta"
+
+#: views/kreportsview.cpp:1287
+msgid "Taxes"
+msgstr "Podatki"
+
+#: views/kreportsview.cpp:1294
+#, fuzzy
+msgid "Tax Transactions by Category"
+msgstr "Transakcje wg kategorii"
+
+#: views/kreportsview.cpp:1303
+#, fuzzy
+msgid "Tax Transactions by Payee"
+msgstr "Transakcje wg beneficjenta"
+
+#: views/kreportsview.cpp:1312
+#, fuzzy
+msgid "Tax Transactions by Category Last Fiscal Year"
+msgstr "Transakcje wg kategorii"
+
+#: views/kreportsview.cpp:1321
+#, fuzzy
+msgid "Tax Transactions by Payee Last Fiscal Year"
+msgstr "Transakcje wg beneficjenta"
+
+#: views/kreportsview.cpp:1328
+#, fuzzy
+msgid "Budgeting"
+msgstr "Budżety"
+
+#: views/kreportsview.cpp:1335
+msgid "Budgeted vs. Actual This Year"
+msgstr ""
+
+#: views/kreportsview.cpp:1346
+msgid "Budgeted vs. Actual This Year (YTM)"
+msgstr ""
+
+#: views/khomeview.cpp:1383 views/kreportsview.cpp:1361
+msgid "Monthly Budgeted vs. Actual"
+msgstr ""
+
+#: views/kreportsview.cpp:1371
+msgid "Yearly Budgeted vs. Actual"
+msgstr ""
+
+#: views/kreportsview.cpp:1382
+#, fuzzy
+msgid "Monthly Budget"
+msgstr "Miesięcznie"
+
+#: views/kreportsview.cpp:1392
+#, fuzzy
+msgid "Yearly Budget"
+msgstr "Budżety"
+
+#: views/kreportsview.cpp:1403
+msgid "Yearly Budgeted vs Actual Graph"
+msgstr ""
+
+#: views/kreportsview.cpp:1422
+#, fuzzy
+msgid "Forecast By Month"
+msgstr "Sposób zapłaty"
+
+#: views/kreportsview.cpp:1431
+#, fuzzy
+msgid "Forecast Next Quarter"
+msgstr "Kolejna data płatności"
+
+#: views/kreportsview.cpp:1443
+#, fuzzy
+msgid "Net Worth Forecast Graph"
+msgstr "Wartość netto dziś"
+
+#: dialogs/rc.cpp:126 dialogs/rc.cpp:128 dialogs/rc.cpp:466
+#: views/kreportsview.cpp:1455
+msgid "General Information"
+msgstr "Informacje ogólne"
+
+#: views/kreportsview.cpp:1462
+#, fuzzy
+msgid "Schedule Information"
+msgstr "Zaplanowane transakcje"
+
+#: views/kreportsview.cpp:1471
+#, fuzzy
+msgid "Schedule Summary Information"
+msgstr "Zaplanowane transakcje"
+
+#: views/kreportsview.cpp:1480
+#, fuzzy
+msgid "Account Information"
+msgstr "Opcje konta"
+
+#: views/kreportsview.cpp:1489
+#, fuzzy
+msgid "Loan Information"
+msgstr "Informacje o płatności"
+
+#: dialogs/rc.cpp:323 views/kmymoneyview.cpp:148 views/kmymoneyview.cpp:150
+msgid "Institutions"
+msgstr "Instytucje"
+
+#: dialogs/knewaccountdlg.cpp:98 views/kmymoneyview.cpp:162
+#: views/kmymoneyview.cpp:164 widgets/rc.cpp:4 widgets/rc.cpp:94
+msgid "Accounts"
+msgstr "Konta"
+
+#: views/kmymoneyview.cpp:176
+msgid "Bills & Reminders"
+msgstr "Opłaty i przypomnienia"
+
+#: views/kmymoneyview.cpp:178
+#, fuzzy
+msgid "Scheduled transactions"
+msgstr "Zaplanowane transakcje"
+
+#: dialogs/knewaccountdlg.cpp:98 dialogs/rc.cpp:193 views/kmymoneyview.cpp:188
+#: views/kmymoneyview.cpp:190 widgets/rc.cpp:91
+msgid "Categories"
+msgstr "Kategorie"
+
+#: dialogs/kfindtransactiondlg.cpp:212 dialogs/rc.cpp:318
+#: views/kmymoneyview.cpp:199 views/kmymoneyview.cpp:201 widgets/rc.cpp:93
+msgid "Payees"
+msgstr "Beneficjenci"
+
+#: views/kgloballedgerview.cpp:149 views/kmymoneyview.cpp:211
+msgid "Ledgers"
+msgstr "Księgi rachunkowe"
+
+#: views/kmymoneyview.cpp:353
+msgid "Creating transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:367
+msgid "Modifying transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:382
+msgid "Duplicating transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:394
+#, fuzzy
+msgid "Edit the current selected transactions"
+msgstr "Ukryj uzgodnione transakcje"
+
+#: views/kmymoneyview.cpp:602
+msgid "<b>%1</b> is not a KMyMoney file."
+msgstr "<b>%1</b> nie jest plikiem KMyMoney."
+
+#: views/kmymoneyview.cpp:643
+#, fuzzy
+msgid "GPG is not available for decryption of file <b>%1</b>"
+msgstr "GPG nie jest dostępne dla odszyfrowania pliku '%1'"
+
+#: views/kmymoneyview.cpp:721
+msgid ""
+"File <b>%1</b> contains the old binary format used by KMyMoney. Please use "
+"an older version of KMyMoney (0.8.x) that still supports this format to "
+"convert it to the new XML based format."
+msgstr ""
+
+#: views/kmymoneyview.cpp:723
+#, fuzzy
+msgid "File <b>%1</b> contains an unknown file format!"
+msgstr "Plik '%1' zawiera nieznany format pliku!"
+
+#: views/kmymoneyview.cpp:728
+#, fuzzy
+msgid "Cannot read from file <b>%1</b>!"
+msgstr "Nie można czytać z pliku '%1'!"
+
+#: views/kmymoneyview.cpp:732
+msgid "Cannot load file <b>%1</b>. Reason: %2"
+msgstr ""
+
+#: views/kmymoneyview.cpp:742 views/kmymoneyview.cpp:748
+#, fuzzy
+msgid "File <b>%1</b> not found!"
+msgstr "Nie znaleziono pliku '%1'!"
+
+#: views/kmymoneyview.cpp:812
+msgid "Can't open database %1\n"
+msgstr ""
+
+#: views/kmymoneyview.cpp:844
+msgid "An unrecoverable error occurred while reading the database"
+msgstr ""
+
+#: views/kmymoneyview.cpp:846 views/kmymoneyview.cpp:1208
+msgid "Database malfunction"
+msgstr ""
+
+#: views/kmymoneyview.cpp:938
+msgid "Unknown fix level in input file"
+msgstr ""
+
+#: views/kmymoneyview.cpp:984
+msgid ""
+"GPG does not seem to be installed on your system. Please make sure, that GPG "
+"can be found using the standard search path. This time, encryption is "
+"disabled."
+msgstr ""
+"Wygląda na to, że na Twoim systemie nie ma zainstalowanego GPG. Upewnij się, "
+"że można go znaleźć na standardowej ścieżce przeszukiwań. A teraz "
+"szyfrowanie jest wyłączone."
+
+#: views/kmymoneyview.cpp:984
+msgid "GPG not found"
+msgstr "Nie znaleziono GPG"
+
+#: views/kmymoneyview.cpp:991
+msgid ""
+"You have selected to encrypt your data also with the KMyMoney recover key, "
+"but the key with id</p><p><center><b>%1</b></center></p>has not been found "
+"in your keyring at this time. Please make sure to import this key into your "
+"keyring. You can find it on the <a href=\"http://kmymoney2.sourceforge.net/"
+"\">KMyMoney web-site</a>. This time your data will not be encrypted with the "
+"KMyMoney recover key."
+msgstr ""
+"Wybrano szyfrowanie danych również kluczem odzyskiwania KMyMoney, ale klucz "
+"z identyfikatorem </p><p><center><b>%1</b></center></p> nie został "
+"odnaleziony w kręgu kluczy. Należy ten klucz zaimportować do kręgu. Można go "
+"znaleźć na <a href=\"http://kmymoney2.sourceforge.net/\">stronie www "
+"KMyMoney</a>. Tym razem Twoje dane nie zostaną zaszyfrowane z kluczem "
+"odzyskiwania KMyMoney."
+
+#: views/kmymoneyview.cpp:991 views/kmymoneyview.cpp:1000
+msgid "GPG-Key not found"
+msgstr "Nie znaleziono klucza GPG"
+
+#: views/kmymoneyview.cpp:1000
+msgid ""
+"You have specified to encrypt your data for the user-id</p><p><center><b>%1</"
+"b>.</center></p>Unfortunately, a valid key for this user-id was not found in "
+"your keyring. Please make sure to import a valid key for this user-id. This "
+"time, encryption is disabled."
+msgstr ""
+"Wyspecyfikowano szyfrowanie danych z identyfikatorem użytkownika </"
+"p><p><center><b>%1</b>.</center></p> Niestety, w kręgu kluczy nie znaleziono "
+"ważnego klucza dla tego identyfikatora. Tym razem szyfrowanie jest wyłączone"
+
+#: views/kmymoneyview.cpp:1006
+msgid ""
+"You have configured to save your data in encrypted form using GPG. Please be "
+"aware, that this is a brand new feature which is yet untested. Make sure, "
+"you have the necessary understanding that you might loose all your data if "
+"you store it encrypted and cannot decrypt it later on! If unsure, answer "
+"<b>No</b>."
+msgstr ""
+"Skonfigurowano zapisywanie danych w formacie szyfrowanym przez GPG. Proszę "
+"zwrócić uwagę, że jest to całkiem nowa funkcjonalność i nie została jeszcze "
+"przetestowana. Upewnij się, że zdajesz sobie sprawę z możliwości utraty "
+"wszystkich danych jeśli przechowujesz je zaszyfrowane i nie możesz ich "
+"później odszyfrować! Jeśli nie jesteś pewien, odpowiedz <b>Nie</b>."
+
+#: views/kmymoneyview.cpp:1008
+msgid "Store GPG encrypted"
+msgstr "Przechowuj szyfrowane GPG"
+
+#: views/kmymoneyview.cpp:1038 views/kmymoneyview.cpp:1052
+msgid "Unable to open file '%1' for writing."
+msgstr "Nie można otworzyć pliku '%1' do zapisu."
+
+#: views/kmymoneyview.cpp:1065 views/kmymoneyview.cpp:1074
+msgid "Failure while writing to '%1'"
+msgstr "Błąd podczas zapisu do '%1'"
+
+#: views/kmymoneyview.cpp:1086 views/kmymoneyview.cpp:1181
+msgid "Tried to access a file when it's not open"
+msgstr "Próba dostępu do pliku kiedy nie jest otwarty"
+
+#: views/kmymoneyview.cpp:1092
+#, fuzzy
+msgid ""
+"Since this version of KMyMoney only writes data files in its new format, "
+"files written with this version cannot be read by KMyMoney version 0.4. If "
+"you still want to use older versions of KMyMoney with your data files, "
+"please make sure you keep a backup-file of your finance data. If you want to "
+"abort this operation, please press Cancel now"
+msgstr ""
+"Od tej wersji KMyMoney zapisuje dane tylko w nowym formacie, pliki tej "
+"wersji nie będą mogły być odczytane przez KMyMoney w wersji 0.4. Jeśli nadal "
+"chcesz używać starszej wersji KMyMoney ze swoimi plikami danych, upewnij "
+"się, że przechowujesz kopię zapasową swoich danych finansowych. Jeśli chcesz "
+"przerwać, wciśnij Anuluj."
+
+#: views/kmymoneyview.cpp:1122
+msgid "Malformed URL '%1'"
+msgstr "Zły format URL-a '%1'"
+
+#: views/kmymoneyview.cpp:1192
+msgid ""
+"Database contains data which must be removed before using SaveAs.\n"
+"Do you wish to continue?"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1205
+msgid ""
+"An unrecoverable error occurred while writing to the database.\n"
+"It may well be corrupt."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1215
+msgid ""
+"Can't open or create database %1\n"
+"Retry SaveAsDatabase and click Help for further info"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1354
+msgid "Afghanistan Afghani"
+msgstr "Afgańskie afgani"
+
+#: views/kmymoneyview.cpp:1355
+msgid "Albanian Lek"
+msgstr "Albański Lek"
+
+#: views/kmymoneyview.cpp:1356
+msgid "Netherland Antillian Guilder"
+msgstr "Gulden antylijski"
+
+#: views/kmymoneyview.cpp:1357
+msgid "Algerian Dinar"
+msgstr "Dinar algierski"
+
+#: views/kmymoneyview.cpp:1358
+msgid "Andorran Franc"
+msgstr "Frank andorski"
+
+#: views/kmymoneyview.cpp:1359
+msgid "Andorran Peseta"
+msgstr "Peseta andorska"
+
+#: views/kmymoneyview.cpp:1360
+msgid "Angolan New Kwanza"
+msgstr "Nowa kwanza Angoli"
+
+#: views/kmymoneyview.cpp:1361
+msgid "Argentine Peso"
+msgstr "Peso argentyńskie"
+
+#: views/kmymoneyview.cpp:1362
+msgid "Aruban Florin"
+msgstr "Florin arubański"
+
+#: views/kmymoneyview.cpp:1363
+msgid "Australian Dollar"
+msgstr "Dolar australijski"
+
+#: views/kmymoneyview.cpp:1364
+msgid "Azerbaijani Manat"
+msgstr "Manat azerbejdżański"
+
+#: views/kmymoneyview.cpp:1365
+msgid "Bahamian Dollar"
+msgstr "Dolar bahamski"
+
+#: views/kmymoneyview.cpp:1366
+msgid "Bahraini Dinar"
+msgstr "Dinar Bahrajnu"
+
+#: views/kmymoneyview.cpp:1367
+msgid "Bangladeshi Taka"
+msgstr "Taka Bangladeszu"
+
+#: views/kmymoneyview.cpp:1368
+msgid "Barbados Dollar"
+msgstr "Dolar barbadoski"
+
+#: views/kmymoneyview.cpp:1369
+msgid "Belarussian Ruble"
+msgstr "Rubel białoruski"
+
+#: views/kmymoneyview.cpp:1370
+msgid "Belize Dollar"
+msgstr "Dolar Belize"
+
+#: views/kmymoneyview.cpp:1371
+msgid "Bermudian Dollar"
+msgstr "Dolar bermudzki"
+
+#: views/kmymoneyview.cpp:1372
+msgid "Bhutan Ngultrum"
+msgstr "Ngultrum Bhutanu"
+
+#: views/kmymoneyview.cpp:1373
+msgid "Bolivian Boliviano"
+msgstr "Boliviano boliwijskie"
+
+#: views/kmymoneyview.cpp:1374
+msgid "Bosnian Convertible Mark"
+msgstr "Marka konwertybilna Bośni"
+
+#: views/kmymoneyview.cpp:1375
+msgid "Botswana Pula"
+msgstr "Pula Botswany"
+
+#: views/kmymoneyview.cpp:1376
+msgid "Brazilian Real"
+msgstr "Real brazylijski"
+
+#: views/kmymoneyview.cpp:1377
+msgid "British Pound"
+msgstr "Funt brytyjski"
+
+#: views/kmymoneyview.cpp:1378
+msgid "Brunei Dollar"
+msgstr "Dolar brunejski"
+
+#: views/kmymoneyview.cpp:1379
+msgid "Bulgarian Lev"
+msgstr "Bułgarska lewa"
+
+#: views/kmymoneyview.cpp:1380
+msgid "Burundi Franc"
+msgstr "Frank burundyjski"
+
+#: views/kmymoneyview.cpp:1381
+msgid "CFA Franc BEAC"
+msgstr "Frank CFA BEAC"
+
+#: views/kmymoneyview.cpp:1382
+msgid "CFA Franc BCEAO"
+msgstr "Frank CFA BCEAO"
+
+#: views/kmymoneyview.cpp:1383
+msgid "CFP Franc Pacifique"
+msgstr "Frank CFP"
+
+#: views/kmymoneyview.cpp:1384
+msgid "Cambodia Riel"
+msgstr "Riel kambodżański"
+
+#: views/kmymoneyview.cpp:1385
+msgid "Canadian Dollar"
+msgstr "Dolar kanadyjski"
+
+#: views/kmymoneyview.cpp:1386
+msgid "Cape Verde Escudo"
+msgstr "Cape Verde Escudo"
+
+#: views/kmymoneyview.cpp:1387
+msgid "Cayman Islands Dollar"
+msgstr "Dolar kajmański"
+
+#: views/kmymoneyview.cpp:1388
+msgid "Chilean Peso"
+msgstr "Chilijskie peso"
+
+#: views/kmymoneyview.cpp:1389
+msgid "Chinese Yuan Renminbi"
+msgstr "Chiński juan renminbi"
+
+#: views/kmymoneyview.cpp:1390
+msgid "Colombian Peso"
+msgstr "Kolumbijskie peso"
+
+#: views/kmymoneyview.cpp:1391
+msgid "Comoros Franc"
+msgstr "Frank komoryjski"
+
+#: views/kmymoneyview.cpp:1392
+msgid "Costa Rican Colon"
+msgstr "Colon kostarykański"
+
+#: views/kmymoneyview.cpp:1393
+msgid "Croatian Kuna"
+msgstr "Kuna chorwacka"
+
+#: views/kmymoneyview.cpp:1394
+msgid "Cuban Peso"
+msgstr "Kubańskie peso"
+
+#: views/kmymoneyview.cpp:1395
+msgid "Czech Koruna"
+msgstr "Korona czeska"
+
+#: views/kmymoneyview.cpp:1396
+msgid "Danish Krone"
+msgstr "Korona duńska"
+
+#: views/kmymoneyview.cpp:1397
+msgid "Djibouti Franc"
+msgstr "Frank Dżibuti"
+
+#: views/kmymoneyview.cpp:1398
+msgid "Dominican Peso"
+msgstr "Peso dominikańskie"
+
+#: views/kmymoneyview.cpp:1399
+msgid "East Caribbean Dollar"
+msgstr "Dolar wschodniokaraibski"
+
+#: views/kmymoneyview.cpp:1400
+msgid "Egyptian Pound"
+msgstr "Funt egipski"
+
+#: views/kmymoneyview.cpp:1401
+msgid "El Salvador Colon"
+msgstr "Colon salwadorski"
+
+#: views/kmymoneyview.cpp:1402
+msgid "Eritrean Nakfa"
+msgstr "Nakfa Erytrei"
+
+#: views/kmymoneyview.cpp:1403
+msgid "Estonian Kroon"
+msgstr "Korona estońska"
+
+#: views/kmymoneyview.cpp:1404
+msgid "Ethiopian Birr"
+msgstr "Brr etiopski"
+
+#: views/kmymoneyview.cpp:1405
+msgid "Euro"
+msgstr "Euro"
+
+#: views/kmymoneyview.cpp:1406
+msgid "Falkland Islands Pound"
+msgstr "Funt falklandzki"
+
+#: views/kmymoneyview.cpp:1407
+msgid "Fiji Dollar"
+msgstr "Dolar Fidżi"
+
+#: views/kmymoneyview.cpp:1408
+msgid "Gambian Dalasi"
+msgstr "Dalasi gambijskie"
+
+#: views/kmymoneyview.cpp:1409
+msgid "Georgian Lari"
+msgstr "Lari gruzińskie"
+
+#: views/kmymoneyview.cpp:1410
+msgid "Ghanaian Cedi"
+msgstr "Cedi Ghany"
+
+#: views/kmymoneyview.cpp:1411
+msgid "Gibraltar Pound"
+msgstr "Funt gibraltarski"
+
+#: views/kmymoneyview.cpp:1412
+msgid "Guatemalan Quetzal"
+msgstr "Quetzal gwatemalski"
+
+#: views/kmymoneyview.cpp:1413
+msgid "Guinea-Bissau Peso"
+msgstr "Peso Gwinea Bissau"
+
+#: views/kmymoneyview.cpp:1414
+msgid "Guyanan Dollar"
+msgstr "Dolar gujański"
+
+#: views/kmymoneyview.cpp:1415
+msgid "Haitian Gourde"
+msgstr "Gourde Haiti"
+
+#: views/kmymoneyview.cpp:1416
+msgid "Honduran Lempira"
+msgstr "Lempira Hondurasu"
+
+#: views/kmymoneyview.cpp:1417
+msgid "Hong Kong Dollar"
+msgstr "Dolar hongkoński"
+
+#: views/kmymoneyview.cpp:1418
+msgid "Hungarian Forint"
+msgstr "Funt węgierski"
+
+#: views/kmymoneyview.cpp:1419
+msgid "Iceland Krona"
+msgstr "Korona islandzka"
+
+#: views/kmymoneyview.cpp:1420
+msgid "Indian Rupee"
+msgstr "Rupia indyjska"
+
+#: views/kmymoneyview.cpp:1421
+msgid "Indonesian Rupiah"
+msgstr "Rupia indonezyjska"
+
+#: views/kmymoneyview.cpp:1422
+msgid "Iranian Rial"
+msgstr "Rial irański"
+
+#: views/kmymoneyview.cpp:1423
+msgid "Iraqi Dinar"
+msgstr "Dinar iracki"
+
+#: views/kmymoneyview.cpp:1424
+msgid "Israeli New Shekel"
+msgstr "Nowy szekel izraelski"
+
+#: views/kmymoneyview.cpp:1425
+msgid "Jamaican Dollar"
+msgstr "Dolar jamajski"
+
+#: views/kmymoneyview.cpp:1426
+msgid "Japanese Yen"
+msgstr "Japoński jen"
+
+#: views/kmymoneyview.cpp:1427
+msgid "Jordanian Dinar"
+msgstr "Dinar jordański"
+
+#: views/kmymoneyview.cpp:1428
+msgid "Kazakhstan Tenge"
+msgstr "Tenge Kazachstanu"
+
+#: views/kmymoneyview.cpp:1429
+msgid "Kenyan Shilling"
+msgstr "Szyling kenijski"
+
+#: views/kmymoneyview.cpp:1430
+msgid "Kuwaiti Dinar"
+msgstr "Dinar kuwejcki"
+
+#: views/kmymoneyview.cpp:1431
+msgid "Kyrgyzstan Som"
+msgstr "Som Kirgistanu"
+
+#: views/kmymoneyview.cpp:1432
+msgid "Laos Kip"
+msgstr "Kip Laosu"
+
+#: views/kmymoneyview.cpp:1433
+msgid "Latvian Lats"
+msgstr "Łat łotewski"
+
+#: views/kmymoneyview.cpp:1434
+msgid "Lebanese Pound"
+msgstr "Funt libański"
+
+#: views/kmymoneyview.cpp:1435
+msgid "Lesotho Loti"
+msgstr "Loti Lesotho"
+
+#: views/kmymoneyview.cpp:1436
+msgid "Liberian Dollar"
+msgstr "Dolar liberyjski"
+
+#: views/kmymoneyview.cpp:1437
+msgid "Libyan Dinar"
+msgstr "Dinar libijski"
+
+#: views/kmymoneyview.cpp:1438
+msgid "Lithuanian Litas"
+msgstr "Lit litewski"
+
+#: views/kmymoneyview.cpp:1439
+msgid "Macau Pataca"
+msgstr "Pataca Macau"
+
+#: views/kmymoneyview.cpp:1440
+msgid "Macedonian Denar"
+msgstr "Denar macedoński"
+
+#: views/kmymoneyview.cpp:1441
+msgid "Malagasy Franc"
+msgstr "Frank malgaski"
+
+#: views/kmymoneyview.cpp:1442
+msgid "Malawi Kwacha"
+msgstr "Kwacha malabijska"
+
+#: views/kmymoneyview.cpp:1443
+msgid "Malaysian Ringgit"
+msgstr "Ringgit Malezji"
+
+#: views/kmymoneyview.cpp:1444
+msgid "Maldive Rufiyaa"
+msgstr "Rupia malediwska"
+
+#: views/kmymoneyview.cpp:1445
+msgid "Mali Republic Franc"
+msgstr "Frank Republiki Mali"
+
+#: views/kmymoneyview.cpp:1446
+msgid "Mauritanian Ouguiya"
+msgstr "Mauretańska Ouguiya"
+
+#: views/kmymoneyview.cpp:1447
+msgid "Mauritius Rupee"
+msgstr "Rupia Mauritiusa"
+
+#: views/kmymoneyview.cpp:1448
+msgid "Mexican Peso"
+msgstr "Meksykańskie peso"
+
+#: views/kmymoneyview.cpp:1449
+#, fuzzy
+msgid "Moldavian Leu"
+msgstr "Lej rumuński"
+
+#: views/kmymoneyview.cpp:1450
+msgid "Mongolian Tugrik"
+msgstr "Tugrik mongolski"
+
+#: views/kmymoneyview.cpp:1451
+msgid "Moroccan Dirham"
+msgstr "Dirham marokański"
+
+#: views/kmymoneyview.cpp:1452
+msgid "Mozambique Metical"
+msgstr "Metical Mozambiku"
+
+#: views/kmymoneyview.cpp:1453
+msgid "Myanmar Kyat"
+msgstr "Kiat birmański"
+
+#: views/kmymoneyview.cpp:1454
+msgid "Namibian Dollar"
+msgstr "Dolar namibijski"
+
+#: views/kmymoneyview.cpp:1455
+msgid "Nepalese Rupee"
+msgstr "Rupia nepalska"
+
+#: views/kmymoneyview.cpp:1456
+msgid "New Zealand Dollar"
+msgstr "Dolar nowozelandzki"
+
+#: views/kmymoneyview.cpp:1457
+msgid "Nicaraguan Cordoba Oro"
+msgstr "Cordoba nikaraguańska"
+
+#: views/kmymoneyview.cpp:1458
+msgid "Nigerian Naira"
+msgstr "Naria nigeryjska"
+
+#: views/kmymoneyview.cpp:1459
+msgid "North Korean Won"
+msgstr "Won północnokoreański"
+
+#: views/kmymoneyview.cpp:1460
+msgid "Norwegian Kroner"
+msgstr "Korona norweska"
+
+#: views/kmymoneyview.cpp:1461
+msgid "Omani Rial"
+msgstr "Rial omański"
+
+#: views/kmymoneyview.cpp:1462
+msgid "Pakistan Rupee"
+msgstr "Rupia pakistańska"
+
+#: views/kmymoneyview.cpp:1463
+msgid "Panamanian Balboa"
+msgstr "Balboa panamska"
+
+#: views/kmymoneyview.cpp:1464
+msgid "Papua New Guinea Kina"
+msgstr "Kina Papui Nowej Gwinei"
+
+#: views/kmymoneyview.cpp:1465
+msgid "Paraguay Guarani"
+msgstr "Guarani paragwajskie"
+
+#: views/kmymoneyview.cpp:1466
+msgid "Peruvian Nuevo Sol"
+msgstr "Nowy sol Peru"
+
+#: views/kmymoneyview.cpp:1467
+msgid "Philippine Peso"
+msgstr "Peso filipińskie"
+
+#: views/kmymoneyview.cpp:1468
+msgid "Polish Zloty"
+msgstr "Złoty polski"
+
+#: views/kmymoneyview.cpp:1469
+msgid "Qatari Rial"
+msgstr "Rial katarski"
+
+#: views/kmymoneyview.cpp:1470
+msgid "Romanian Leu (new)"
+msgstr "Lej rumuński (nowy)"
+
+#: views/kmymoneyview.cpp:1471
+msgid "Russian Ruble"
+msgstr "Rubel rosyjski"
+
+#: views/kmymoneyview.cpp:1472
+msgid "Rwanda Franc"
+msgstr "Frank rwandyjski"
+
+#: views/kmymoneyview.cpp:1473
+msgid "Samoan Tala"
+msgstr "Tala Samoa"
+
+#: views/kmymoneyview.cpp:1474
+msgid "Sao Tome and Principe Dobra"
+msgstr "Dobra Wysp Świętego Tomasza i Książęcej"
+
+#: views/kmymoneyview.cpp:1475
+msgid "Saudi Riyal"
+msgstr "Rial saudyjski"
+
+#: views/kmymoneyview.cpp:1476
+msgid "Seychelles Rupee"
+msgstr "Rupia seszelska"
+
+#: views/kmymoneyview.cpp:1477
+msgid "Sierra Leone Leone"
+msgstr "Leone Sierra Leone"
+
+#: views/kmymoneyview.cpp:1478
+msgid "Singapore Dollar"
+msgstr "Dolar singapurski"
+
+#: views/kmymoneyview.cpp:1481
+msgid "Solomon Islands Dollar"
+msgstr "Dolar Wysp Salomona"
+
+#: views/kmymoneyview.cpp:1482
+msgid "Somali Shilling"
+msgstr "Szyling somalijski"
+
+#: views/kmymoneyview.cpp:1483
+msgid "South African Rand"
+msgstr "Rand południowoafrykański"
+
+#: views/kmymoneyview.cpp:1484
+msgid "South Korean Won"
+msgstr "Won południowokoreański"
+
+#: views/kmymoneyview.cpp:1485
+msgid "Sri Lanka Rupee"
+msgstr "Rupia Sri Lanka"
+
+#: views/kmymoneyview.cpp:1486
+msgid "St. Helena Pound"
+msgstr "Funt Św. Heleny"
+
+#: views/kmymoneyview.cpp:1487
+msgid "Sudanese Dinar"
+msgstr "Dinar sudański"
+
+#: views/kmymoneyview.cpp:1488
+msgid "Suriname Guilder"
+msgstr "Gulden surinamski"
+
+#: views/kmymoneyview.cpp:1489
+msgid "Swaziland Lilangeni"
+msgstr "Lilangeni Suazi"
+
+#: views/kmymoneyview.cpp:1490
+msgid "Swedish Krona"
+msgstr "Korona szwedzka"
+
+#: views/kmymoneyview.cpp:1491
+msgid "Swiss Franc"
+msgstr "Frank szwajcarski"
+
+#: views/kmymoneyview.cpp:1492
+msgid "Syrian Pound"
+msgstr "Funt syryjski"
+
+#: views/kmymoneyview.cpp:1493
+msgid "Taiwan Dollar"
+msgstr "Dolar tajwański"
+
+#: views/kmymoneyview.cpp:1494
+msgid "Tajikistan Somani"
+msgstr "Somoni Tadżykistanu"
+
+#: views/kmymoneyview.cpp:1495
+msgid "Tanzanian Shilling"
+msgstr "Szyling tanzański"
+
+#: views/kmymoneyview.cpp:1496
+msgid "Thai Baht"
+msgstr "Bat Tajlandii"
+
+#: views/kmymoneyview.cpp:1497
+msgid "Tongan Pa'anga"
+msgstr "Pa'anga Tonga"
+
+#: views/kmymoneyview.cpp:1498
+msgid "Trinidad and Tobago Dollar"
+msgstr "Dolar Trynidad i Tobago"
+
+#: views/kmymoneyview.cpp:1499
+msgid "Tunisian Dinar"
+msgstr "Dinar tunezyjski"
+
+#: views/kmymoneyview.cpp:1500
+msgid "Turkish Lira (new)"
+msgstr "Nowa lira turecka"
+
+#: views/kmymoneyview.cpp:1501
+msgid "Turkmenistan Manat"
+msgstr "Manat turkmeński"
+
+#: views/kmymoneyview.cpp:1502
+msgid "US Dollar"
+msgstr "Dolar amerykański"
+
+#: views/kmymoneyview.cpp:1503
+msgid "Uganda Shilling"
+msgstr "Szyling ugandyjski"
+
+#: views/kmymoneyview.cpp:1504
+msgid "Ukraine Hryvnia"
+msgstr "Hrywna ukraińska"
+
+#: views/kmymoneyview.cpp:1505
+msgid "United Arab Emirates Dirham"
+msgstr "Dirham Zjednoczonych Emiratów Arabskich"
+
+#: views/kmymoneyview.cpp:1506
+msgid "Uruguayan Peso"
+msgstr "Peso urugwajskie"
+
+#: views/kmymoneyview.cpp:1507
+msgid "Uzbekistani Sum"
+msgstr "Sum Uzbekistanu"
+
+#: views/kmymoneyview.cpp:1508
+msgid "Vanuatu Vatu"
+msgstr "Vanuatu Vatu"
+
+#: views/kmymoneyview.cpp:1509
+msgid "Venezuelan Bolivar"
+msgstr "Bolivar wenezuelski"
+
+#: views/kmymoneyview.cpp:1510
+msgid "Vietnamese Dong"
+msgstr "Dong wietnamski"
+
+#: views/kmymoneyview.cpp:1511
+msgid "Yugoslav Dinar"
+msgstr "Dinar jugosłowiański"
+
+#: views/kmymoneyview.cpp:1512
+msgid "Zambian Kwacha"
+msgstr "Kwacha Zambii"
+
+#: views/kmymoneyview.cpp:1513
+msgid "Zimbabwe Dollar"
+msgstr "Dolar Zimbabwe"
+
+#: views/kmymoneyview.cpp:1515
+msgid "Gold"
+msgstr "Złoto"
+
+#: views/kmymoneyview.cpp:1516
+msgid "Palladium"
+msgstr "Pallad"
+
+#: views/kmymoneyview.cpp:1517
+msgid "Platinum"
+msgstr "Platyna"
+
+#: views/kmymoneyview.cpp:1518
+msgid "Silver"
+msgstr "Srebro"
+
+#: views/kmymoneyview.cpp:1551
+msgid "Austrian Schilling"
+msgstr "Szyling austriacki"
+
+#: views/kmymoneyview.cpp:1552
+msgid "German Mark"
+msgstr "Marka niemiecka"
+
+#: views/kmymoneyview.cpp:1553
+msgid "French Franc"
+msgstr "Frank francuski"
+
+#: views/kmymoneyview.cpp:1554
+msgid "Italian Lira"
+msgstr "Lir włoski"
+
+#: views/kmymoneyview.cpp:1555
+msgid "Spanish Peseta"
+msgstr "Hiszpańska peseta"
+
+#: views/kmymoneyview.cpp:1556
+msgid "Dutch Guilder"
+msgstr "Gulden holenderski"
+
+#: views/kmymoneyview.cpp:1557
+msgid "Belgian Franc"
+msgstr "Frank belgijski"
+
+#: views/kmymoneyview.cpp:1558
+msgid "Luxembourg Franc"
+msgstr "Frank luksemburski"
+
+#: views/kmymoneyview.cpp:1559
+msgid "Portuguese Escudo"
+msgstr "Escudo portugalskie"
+
+#: views/kmymoneyview.cpp:1560
+msgid "Irish Pound"
+msgstr "Funt irlandzki"
+
+#: views/kmymoneyview.cpp:1561
+msgid "Finnish Markka"
+msgstr "Marka fińska"
+
+#: views/kmymoneyview.cpp:1562
+msgid "Greek Drachma"
+msgstr "Drachma grecka"
+
+#: views/kmymoneyview.cpp:1564
+msgid "Romanian Leu"
+msgstr "Lej rumuński"
+
+#: views/kmymoneyview.cpp:1566
+msgid "Russian Ruble (old)"
+msgstr "Rubel rosyjski (stary)"
+
+#: views/kmymoneyview.cpp:1568
+msgid "Slovenian Tolar"
+msgstr "Tolar słoweński"
+
+#: views/kmymoneyview.cpp:1571
+msgid "Turkish Lira"
+msgstr "Lira turecka"
+
+#: views/kmymoneyview.cpp:1574
+msgid "Maltese Lira"
+msgstr "Lira maltańska"
+
+#: views/kmymoneyview.cpp:1575
+msgid "Cyprus Pound"
+msgstr "Funt cypryjski"
+
+#: views/kmymoneyview.cpp:1578
+msgid "Slovak Koruna"
+msgstr "Korona słowacka"
+
+#: views/kmymoneyview.cpp:1888
+#, fuzzy
+msgid ""
+"The account \"%1\" was previously created as loan account but some "
+"information is missing. The new loan wizard will be started to collect all "
+"relevant information. Please use a KMyMoney version >= 0.8.7 and < 0.9 to "
+"correct the problem."
+msgstr ""
+"Konto \"%1\" zostało poprzednio utworzone jako konto pożyczki, ale brakuje w "
+"nim pewnych informacji. Zostanie uruchomiony asystent nowej pożyczki, w celu "
+"zebrania odpowiednich informacji. Jeśli zakończysz działanie asystenta, plik "
+"zostanie zamknięty."
+
+#: views/kmymoneyview.cpp:1892
+msgid "Account problem"
+msgstr "Problem z kontem"
+
+#: views/kmymoneyview.cpp:1941
+msgid "Unable to add schedule: "
+msgstr "Nie można dodać harmonogramu: "
+
+#: views/kmymoneyview.cpp:1970
+msgid "Fix transactions"
+msgstr "Napraw transakcje"
+
+#: views/kaccountsview.cpp:522 views/kinstitutionsview.cpp:300
+msgid "Net Worth: "
+msgstr "Wartość netto: "
+
+#: dialogs/rc.cpp:108 dialogs/rc.cpp:163 dialogs/rc.cpp:250 dialogs/rc.cpp:755
+#: dialogs/rc.cpp:830 views/kinvestmentview.cpp:77 widgets/register.cpp:572
+msgid "Quantity"
+msgstr "Ilość"
+
+#: views/kscheduledlistitem.cpp:137
+msgid "Finished"
+msgstr "Skończone"
+
+#: views/kbudgetview.cpp:109
+#, fuzzy
+msgid "Creates a new budget"
+msgstr "Stwórz nowe konto"
+
+#: views/kbudgetview.cpp:110
+#, fuzzy
+msgid "Use this to create a new empty budget."
+msgstr "Użyj tego przycisku, żeby stworzyć nowy harmonogram."
+
+#: views/kbudgetview.cpp:116
+#, fuzzy
+msgid "Rename the current selected budget"
+msgstr "Skasuj wybrany profil"
+
+#: views/kbudgetview.cpp:117
+#, fuzzy
+msgid "Use this to start renaming the selected budget."
+msgstr "Użyj, żeby skasować wybrany profil"
+
+#: views/kbudgetview.cpp:123
+#, fuzzy
+msgid "Delete the current selected budget"
+msgstr "Skasuj wybrany profil"
+
+#: views/kbudgetview.cpp:124
+#, fuzzy
+msgid "Use this to delete the selected budget."
+msgstr "Użyj, żeby skasować wybrany profil"
+
+#: views/kbudgetview.cpp:130
+#, fuzzy
+msgid "Accepts the entered values and stores the budget"
+msgstr "Akceptuje i zapisuje wprowadzone dane"
+
+#: views/kbudgetview.cpp:131
+#, fuzzy
+msgid "Use this to store the modified data."
+msgstr "Użyj, żeby zaakceptować zmienione dane."
+
+#: views/kbudgetview.cpp:137
+msgid "Revert budget to last saved state"
+msgstr ""
+
+#: views/kbudgetview.cpp:138
+#, fuzzy
+msgid "Use this to discard the modified data."
+msgstr "Użyj, żeby zaakceptować zmienione dane."
+
+#: views/kbudgetview.cpp:489
+#, fuzzy
+msgid "Do you want to save the changes for <b>%1</b>"
+msgstr "Czy chcesz odrzucić zmiany '%1'"
+
+#: views/kbudgetview.cpp:610
+msgid ""
+"A budget with the name '%1' already exists. It is not advisable to have "
+"multiple budgets with the same identification name. Are you sure you would "
+"like to rename the budget?"
+msgstr ""
+
+#: views/kbudgetview.cpp:635 views/kbudgetview.cpp:750
+#, fuzzy
+msgid "Unable to modify budget"
+msgstr "Nie można zmienić sumy/kwoty"
+
+#: views/kbudgetview.cpp:736
+#, fuzzy
+msgid "Unable to reset budget"
+msgstr "Nie można zmienić sumy/kwoty"
+
+#: views/rc.cpp:1
+msgid "List"
+msgstr "Lista"
+
+#: views/rc.cpp:2 views/rc.cpp:20
+msgid "Collapse all accounts in the list"
+msgstr ""
+
+#: views/rc.cpp:3 views/rc.cpp:21
+msgid "Expand all accounts in the list"
+msgstr ""
+
+#: views/rc.cpp:4
+msgid "Icons"
+msgstr "Ikonki"
+
+#: views/rc.cpp:5 views/rc.cpp:22
+msgid "Note: Unused categories are not shown as selected by settings."
+msgstr ""
+"Uwaga: nieużywane kategorie nie są pokazywane zgodnie z wybranymi "
+"ustawieniami."
+
+#: views/rc.cpp:6 views/rc.cpp:23 views/rc.cpp:54
+msgid "Total Profits:"
+msgstr "Całkowite zyski:"
+
+#: views/rc.cpp:7
+#, fuzzy
+msgid "Your budgets"
+msgstr "Budżety"
+
+#: dialogs/rc.cpp:340 dialogs/rc.cpp:841 dialogs/settings/rc.cpp:124
+#: views/rc.cpp:8 widgets/rc.cpp:48 widgets/rc.cpp:150
+msgid "New"
+msgstr "Nowy"
+
+#: views/rc.cpp:9
+#, fuzzy
+msgid "Ren"
+msgstr "&Rozpocznij"
+
+#: views/rc.cpp:10
+#, fuzzy
+msgid "Del"
+msgstr "Szczegóły"
+
+#: views/rc.cpp:11
+#, fuzzy
+msgid "Res"
+msgstr "Ustawienia domyślne"
+
+#: views/rc.cpp:12
+#, fuzzy
+msgid "Upd"
+msgstr "W &górę"
+
+#: views/rc.cpp:15
+#, fuzzy
+msgid "Hide unused budget categories"
+msgstr "Ukryte kategorie"
+
+#: views/rc.cpp:16
+#, fuzzy
+msgid "Assignments"
+msgstr "Aktywa"
+
+#: views/rc.cpp:19
+#, fuzzy
+msgid "Include subaccounts"
+msgstr "Jest podkontem"
+
+#: dialogs/settings/rc.cpp:23 views/rc.cpp:24
+#, fuzzy
+msgid "Forecast Settings"
+msgstr "Ustawienia czcionek"
+
+#: views/rc.cpp:25
+#, fuzzy
+msgid "Days to Forecast:"
+msgstr "Liczba pozostałych transakcji:"
+
+#: views/rc.cpp:26
+msgid "Days of Accounts Cycle:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:25 views/rc.cpp:27
+msgid "Day of Month to start Forecast:"
+msgstr ""
+
+#: views/rc.cpp:28
+msgid "Historic Cycles:"
+msgstr ""
+
+#: views/rc.cpp:29
+#, fuzzy
+msgid "Chart Detail:"
+msgstr "Wykres"
+
+#: views/rc.cpp:30 widgets/kmymoneyaccountselector.cpp:64 widgets/rc.cpp:65
+msgid "All"
+msgstr "Wszystko"
+
+#: views/rc.cpp:31 widgets/rc.cpp:66
+msgid "Top-Level"
+msgstr ""
+
+#: views/rc.cpp:32 widgets/rc.cpp:67
+msgid "Groups"
+msgstr ""
+
+#: views/rc.cpp:33 widgets/rc.cpp:68
+#, fuzzy
+msgid "Totals"
+msgstr "Suma"
+
+#: views/rc.cpp:34
+#, fuzzy
+msgid "<p>Choose what level of detail to show on the chart.</p>"
+msgstr ""
+"<p>Wybierz jaki rodzaj kont powinien być wyświetlany w wierszach tego "
+"raportu.</p>"
+
+#: views/rc.cpp:35
+#, fuzzy
+msgid "Current Forecast Method:"
+msgstr "Sposób zapłaty"
+
+#: views/rc.cpp:36
+#, fuzzy
+msgid "method"
+msgstr "Metoda:"
+
+#: dialogs/settings/rc.cpp:32 views/rc.cpp:37
+#, fuzzy
+msgid "History Forecast Method"
+msgstr "Sposób zapłaty"
+
+#: dialogs/settings/rc.cpp:33 views/rc.cpp:38
+msgid "Simple Moving Average"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:34 views/rc.cpp:39
+msgid "Weighted Moving Average"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:35 views/rc.cpp:40
+msgid "Linear Regression"
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:315 dialogs/rc.cpp:628 dialogs/rc.cpp:647
+#: views/rc.cpp:43
+msgid "Summary"
+msgstr "Podsumowanie"
+
+#: views/rc.cpp:45
+#, fuzzy
+msgid "0 days"
+msgstr "Ostatnie 30 dni"
+
+#: views/rc.cpp:46
+#, fuzzy
+msgid "30 days"
+msgstr "Ostatnie 30 dni"
+
+#: views/rc.cpp:47
+#, fuzzy
+msgid "60 days"
+msgstr "Ostatnie 30 dni"
+
+#: views/rc.cpp:48
+#, fuzzy
+msgid "90 days"
+msgstr "Ostatnie 30 dni"
+
+#: views/rc.cpp:49
+msgid "New Item"
+msgstr ""
+
+#: views/rc.cpp:50 widgets/rc.cpp:64
+#, fuzzy
+msgid "Detail"
+msgstr "Szczegóły"
+
+#: views/rc.cpp:51
+#, fuzzy
+msgid "Advanced"
+msgstr "Z&aawansowane..."
+
+#: views/rc.cpp:52
+#, fuzzy
+msgid "Budget Forecast"
+msgstr "Następny rok"
+
+#: views/rc.cpp:55
+msgid "Investment Summary"
+msgstr "Podsumowanie inwestycji"
+
+#: views/rc.cpp:56
+msgid "Select Account:"
+msgstr "Wybierz konto:"
+
+#: views/rc.cpp:57
+msgid ""
+"Summary of the equities contained in this account, showing your holdings and "
+"their most recent price."
+msgstr ""
+"Podsumowanie akcji zwykłych zawartych w tym koncie, pokazujące Twoje udziały "
+"i ich najświeższe ceny."
+
+#: views/rc.cpp:60 widgets/register.cpp:564
+msgid "No."
+msgstr "Nr"
+
+#: views/rc.cpp:64
+msgid "Balance: "
+msgstr "Saldo: "
+
+#: views/rc.cpp:65
+#, fuzzy
+msgid "Address"
+msgstr "Adres:"
+
+#: views/rc.cpp:66
+msgid "Payee Information"
+msgstr "Informacje o beneficjencie"
+
+#: views/rc.cpp:67
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#: dialogs/rc.cpp:393 views/rc.cpp:69
+msgid "Telephone/Fax:"
+msgstr "Telefon/fax:"
+
+#: views/rc.cpp:70
+#, fuzzy
+msgid "Notes"
+msgstr "Adnotacje:"
+
+#: views/rc.cpp:71
+msgid "Address:"
+msgstr "Adres:"
+
+#: views/rc.cpp:72
+#, fuzzy
+msgid "Matching"
+msgstr "Nic nie rób"
+
+#: views/rc.cpp:73
+#, fuzzy
+msgid "Transaction Matching"
+msgstr "Opcje transakcji"
+
+#: views/rc.cpp:74
+#, fuzzy
+msgid "No matching"
+msgstr "Nic nie rób"
+
+#: views/rc.cpp:75
+#, fuzzy
+msgid "Match on Payee name"
+msgstr "Nazwisko menadżera:"
+
+#: views/rc.cpp:76
+#, fuzzy
+msgid "Match on a name listed below"
+msgstr "Nazwisko menadżera:"
+
+#: views/rc.cpp:77
+#, fuzzy
+msgid "List of matching names"
+msgstr "Nic nie rób"
+
+#: views/rc.cpp:78
+msgid ""
+"This list contains the names that will match this payee if a transaction is "
+"imported from an external source. Keep in mind, that you can specify regular "
+"expressions here."
+msgstr ""
+
+#: views/rc.cpp:79
+#, fuzzy
+msgid "Ignore Case"
+msgstr "Powiększ"
+
+#: views/rc.cpp:80
+#, fuzzy
+msgid "Default Account"
+msgstr "Wybierz konto:"
+
+#: views/rc.cpp:81
+#, fuzzy
+msgid ""
+"Use the default account for\n"
+"new transactions with this payee"
+msgstr "Zapisz transakcję w rejestrze"
+
+#: views/rc.cpp:82
+#, fuzzy
+msgid "Default category:"
+msgstr "Stwórz kategorię"
+
+#: views/rc.cpp:83
+#, fuzzy
+msgid "Suggest a category"
+msgstr "Stwórz kategorię"
+
+#: views/rc.cpp:85
+#, fuzzy
+msgid "New Scheduled transaction..."
+msgstr "Wprowadź zaplanowaną transakcję"
+
+#: views/rc.cpp:86
+msgid "Filter Accounts"
+msgstr "Filtruj konta"
+
+#: views/rc.cpp:87
+msgid "List View"
+msgstr "Widok listy"
+
+#: views/rc.cpp:88
+msgid "Calendar View"
+msgstr "Widok kalendarza"
+
+#: views/kinstitutionsview.cpp:43
+#, fuzzy
+msgid "Institution/Account"
+msgstr "Instytucja"
+
+#: views/kinstitutionsview.cpp:157
+msgid "Accounts with no institution assigned"
+msgstr "Konta bez przypisanej instytucji"
+
+#: views/kscheduledview.cpp:70
+msgid "Type/Name"
+msgstr "Typ/nazwa"
+
+#: views/kscheduledview.cpp:75
+msgid "Frequency"
+msgstr "Częstotliwość"
+
+#: views/kscheduledview.cpp:157
+msgid "Unable to load accounts: "
+msgstr "Nie można wczytać kont:"
+
+#: views/kscheduledview.cpp:171 views/kscheduledview.cpp:429
+#: views/kscheduledview.cpp:445 widgets/kmymoneyscheduledcalendar.cpp:46
+msgid "Bills"
+msgstr "Opłaty"
+
+#: dialogs/rc.cpp:232 dialogs/rc.cpp:706 views/kscheduledview.cpp:172
+#: views/kscheduledview.cpp:431 views/kscheduledview.cpp:447
+#: widgets/kmymoneyscheduledcalendar.cpp:47
+msgid "Deposits"
+msgstr "Wpłaty"
+
+#: views/kscheduledview.cpp:173 views/kscheduledview.cpp:435
+#: views/kscheduledview.cpp:451
+msgid "Loans"
+msgstr "Pożyczki"
+
+#: views/kscheduledview.cpp:357
+#, fuzzy
+msgid "Error activating context menu"
+msgstr "Błąd budowania menu kontekstowego"
+
+#: views/kscheduledview.cpp:385
+msgid "Error executing item"
+msgstr "Błąd wykonywania elementu"
+
+#: views/kscheduledview.cpp:419
+msgid "Unable to filter account"
+msgstr "Nie można filtrować kont"
+
+#: views/kgloballedgerview.cpp:508
+#, fuzzy
+msgid "Statement Details"
+msgstr "Data wyciągu:"
+
+#: views/kgloballedgerview.cpp:512
+#, fuzzy
+msgid "Statement Deposit Details"
+msgstr "Importowanie wyciągu"
+
+#: views/kgloballedgerview.cpp:513
+#, fuzzy
+msgid "Statement Payment Details"
+msgstr "Data wyciągu:"
+
+#: views/kgloballedgerview.cpp:642
+msgid "%1 deposits (%3), %2 payments (%4)"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:649
+#, fuzzy
+msgid "%1 payments (%2)"
+msgstr "Spłata pożyczki"
+
+#: views/kgloballedgerview.cpp:653
+#, fuzzy
+msgid "%1 deposits (%2)"
+msgstr "%1 wpłat."
+
+#: views/kgloballedgerview.cpp:721
+#, c-format
+msgid "Statement: %1"
+msgstr "Wyciąg: %1"
+
+#: views/kgloballedgerview.cpp:722 views/kgloballedgerview.cpp:736
+#, c-format
+msgid "Cleared: %1"
+msgstr "Rozliczone: %1"
+
+#: views/kgloballedgerview.cpp:723
+#, c-format
+msgid "Difference: %1"
+msgstr "Różnica: %1"
+
+#: views/kgloballedgerview.cpp:730
+#, fuzzy, c-format
+msgid "Last reconciled: %1"
+msgstr "Ostatni uzgodniony wyciąg: %1"
+
+#: views/kgloballedgerview.cpp:732
+#, fuzzy
+msgid "Never reconciled"
+msgstr "Nieuzgodnione"
+
+#: views/kgloballedgerview.cpp:772
+#, fuzzy
+msgid "Investment value: %1%2"
+msgstr "Inwestycja: %1"
+
+#: views/kgloballedgerview.cpp:1040
+#, fuzzy
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to continue to edit the transactions anyway?"
+msgstr ""
+"Co najmniej jeden z podziałów tej transakcji został rozliczony. Czy chcesz "
+"kontynuować i mimo to edytować transakcję?"
+
+#: views/kgloballedgerview.cpp:1051
+#, fuzzy
+msgid ""
+"At least one split of the selected transactions has been frozen. Editing the "
+"transactions is therefore prohibited."
+msgstr ""
+"Co najmniej jeden z podziałów tej transakcji został zamrożony. Zakazuje się "
+"z tego powodu edycji tej transakcji."
+
+#: views/kgloballedgerview.cpp:1053
+msgid "Transaction already frozen"
+msgstr "Transakcja już zamrożona"
+
+#: views/kgloballedgerview.cpp:1058
+#, fuzzy
+msgid ""
+"At least one split of the selected transaction references an account that "
+"has been closed. Editing the transactions is therefore prohibited."
+msgstr ""
+"Co najmniej jeden z podziałów tej transakcji został zamrożony. Zakazuje się "
+"z tego powodu edycji tej transakcji."
+
+#: views/kgloballedgerview.cpp:1060
+#, fuzzy
+msgid "Account closed"
+msgstr "Konta"
+
+#: views/kgloballedgerview.cpp:1349
+#, fuzzy
+msgid "Cannot create transactions when no account is selected."
+msgstr "Zaznacz transakcje bez beneficjentów"
+
+#: views/kgloballedgerview.cpp:1354
+msgid "Cannot create transactions in the context of a category."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1358
+#, fuzzy
+msgid "Cannot create transactions in a closed account."
+msgstr "Czy chcesz zaimportować transakcje do tego konta?"
+
+#: views/kgloballedgerview.cpp:1370
+#, fuzzy
+msgid "Cannot process transaction with focus if it is not selected."
+msgstr "Zaznacz transakcje bez beneficjentów"
+
+#: views/kgloballedgerview.cpp:1400
+#, fuzzy
+msgid "Cannot edit transactions with frozen splits."
+msgstr "Zaznacz transakcje bez beneficjentów"
+
+#: views/kgloballedgerview.cpp:1411
+#, fuzzy
+msgid "Cannot edit transactions in the context of a category."
+msgstr "Nie można edytować konta/kategorii: "
+
+#: views/kgloballedgerview.cpp:1430
+msgid ""
+"Cannot edit investment transactions and non-investment transactions together."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1438
+#, fuzzy
+msgid "Cannot edit multiple split transactions at once."
+msgstr "Powróć do okna podziału transakcji"
+
+#: views/kgloballedgerview.cpp:1448
+#, fuzzy
+msgid "Cannot edit investment transactions in the context of this account."
+msgstr "Czy chcesz zaimportować transakcje do tego konta?"
+
+#: views/kforecastview.cpp:164
+#, fuzzy
+msgid "Scheduled"
+msgstr "Harmonogram"
+
+#: views/kforecastview.cpp:169
+#, fuzzy
+msgid "History"
+msgstr "Historia ceny"
+
+#: views/kforecastview.cpp:296
+msgid "The balance of %2 is below the minimum balance %3 today."
+msgstr ""
+
+#: views/kforecastview.cpp:301 views/khomeview.cpp:1043
+msgid "The balance of %1 will drop below the minimum balance %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:318 views/khomeview.cpp:1059
+msgid "The balance of %1 is below %2 today."
+msgstr ""
+
+#: views/kforecastview.cpp:323 views/khomeview.cpp:1064
+msgid "The balance of %1 is above %2 today."
+msgstr ""
+
+#: views/kforecastview.cpp:330 views/khomeview.cpp:1070
+msgid "The balance of %1 will drop below %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:335 views/khomeview.cpp:1075
+msgid "The balance of %1 will raise above %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:348
+msgid "The account %1 is decreasing %2 per cycle."
+msgstr ""
+
+#: views/kforecastview.cpp:404 widgets/kmymoneyaccounttreeforecast.cpp:114
+#, c-format
+msgid "Min Bal %1"
+msgstr ""
+
+#: views/kforecastview.cpp:406 widgets/kmymoneyaccounttreeforecast.cpp:116
+#, fuzzy, c-format
+msgid "Min Date %1"
+msgstr "Wczytywanie szablonu %1"
+
+#: views/kforecastview.cpp:409 widgets/kmymoneyaccounttreeforecast.cpp:119
+#, c-format
+msgid "Max Bal %1"
+msgstr ""
+
+#: views/kforecastview.cpp:411 widgets/kmymoneyaccounttreeforecast.cpp:121
+#, c-format
+msgid "Max Date %1"
+msgstr ""
+
+#: views/kforecastview.cpp:413 widgets/kmymoneyaccounttreeforecast.cpp:123
+#, fuzzy
+msgid "Average"
+msgstr "Wszystkie stany"
+
+#: views/kforecastview.cpp:649 views/khomeview.cpp:268 views/khomeview.cpp:275
+#, fuzzy
+msgid "Networth Forecast"
+msgstr "Wartość netto dziś"
+
+#: views/khomeview.cpp:203
+msgid "Your Financial Summary"
+msgstr "Podsumowanie finansowe"
+
+#: views/khomeview.cpp:218
+msgid "Preferred Accounts"
+msgstr "Preferowane konta"
+
+#: views/khomeview.cpp:225 views/khomeview.cpp:227
+msgid "Payment Accounts"
+msgstr "Konta płatności"
+
+#: views/khomeview.cpp:256
+msgid "Show KMyMoney welcome page"
+msgstr "Pokaż stronę powitalną KMyMoney"
+
+#: views/khomeview.cpp:409
+msgid "Overdue payments"
+msgstr "Zaległe płatności"
+
+#: views/khomeview.cpp:424 views/khomeview.cpp:497 views/khomeview.cpp:531
+#, fuzzy
+msgid "Balance after"
+msgstr "Saldo: "
+
+#: views/khomeview.cpp:482
+#, fuzzy
+msgid "Today's payments"
+msgstr "Dzisiejsze płatności"
+
+#: views/khomeview.cpp:516
+msgid "Future payments"
+msgstr "Przyszłe płatności"
+
+#: views/khomeview.cpp:585
+#, fuzzy
+msgid "Less..."
+msgstr "Mniej ..."
+
+#: views/khomeview.cpp:587
+#, fuzzy
+msgid "More..."
+msgstr "Więcej ..."
+
+#: views/khomeview.cpp:622
+#, fuzzy
+msgid "Enter schedule"
+msgstr "Nowy harmonogram"
+
+#: views/khomeview.cpp:624
+#, fuzzy
+msgid "Skip schedule"
+msgstr "Wczytywanie harmonogramów..."
+
+#: views/khomeview.cpp:627
+#, fuzzy
+msgid "Edit schedule"
+msgstr "Edycja harmonogramu opłat"
+
+#: views/khomeview.cpp:631
+#, fuzzy
+msgid " (%1 payments)"
+msgstr "Spłata pożyczki"
+
+#: views/khomeview.cpp:771
+#, fuzzy
+msgid "To Minimum Balance / Maximum Credit"
+msgstr "Saldo końcowe"
+
+#: views/khomeview.cpp:964
+#, fuzzy
+msgid "%1 Day Forecast"
+msgstr "Liczba pozostałych transakcji:"
+
+#: views/khomeview.cpp:973 widgets/kmymoneyaccounttreeforecast.cpp:67
+msgid "%1 days"
+msgstr ""
+
+#: views/khomeview.cpp:1039
+msgid "The balance of %1 is below the minimum balance %2 today."
+msgstr ""
+
+#: views/khomeview.cpp:1175
+msgid ""
+"Before KMyMoney can give you detailed information about your financial "
+"status, you need to create at least one account. Until then, KMyMoney shows "
+"the welcome page instead."
+msgstr ""
+
+#: views/khomeview.cpp:1258
+#, fuzzy
+msgid "Assets and Liabilities Summary"
+msgstr "Aktywa i pasywa"
+
+#: views/khomeview.cpp:1262
+#, fuzzy
+msgid "Asset Accounts"
+msgstr "Rachunek aktywów"
+
+#: views/khomeview.cpp:1270
+#, fuzzy
+msgid "Liability Accounts"
+msgstr "Rachunki pasywów"
+
+#: views/khomeview.cpp:1348
+#, fuzzy
+msgid "Total Assets"
+msgstr "Suma"
+
+#: views/khomeview.cpp:1354
+#, fuzzy
+msgid "Total Liabilities"
+msgstr "Aktywa i pasywa"
+
+#: views/khomeview.cpp:1399
+#, fuzzy
+msgid "Current Month Summary"
+msgstr "Bieżący miesiąc"
+
+#: views/khomeview.cpp:1403 views/khomeview.cpp:1440
+#, fuzzy
+msgid "Budgeted"
+msgstr "Budżety"
+
+#: views/khomeview.cpp:1433
+#, fuzzy
+msgid "Budget Overruns"
+msgstr "Następny rok"
+
+#: views/khomeview.cpp:1502
+msgid "No Budget Categories have been overrun"
+msgstr ""
+
+#: views/khomeview.cpp:1801
+msgid "Cash Flow Summary"
+msgstr ""
+
+#: views/khomeview.cpp:1808
+#, fuzzy
+msgid "Income and Expenses of Current Month"
+msgstr "Dochody i wydatki w tym miesiącu"
+
+#: views/khomeview.cpp:1816
+#, fuzzy
+msgid "Scheduled Income"
+msgstr "Nazwa harmonogramu:"
+
+#: views/khomeview.cpp:1819
+#, fuzzy
+msgid "Expenses"
+msgstr "Wydatek"
+
+#: views/khomeview.cpp:1822
+#, fuzzy
+msgid "Scheduled Expenses"
+msgstr "Dochody i wydatki w tym miesiącu"
+
+#: views/khomeview.cpp:1850
+#, fuzzy
+msgid "Liquid Assets and Liabilities"
+msgstr "Aktywa i pasywa"
+
+#: views/khomeview.cpp:1855
+#, fuzzy
+msgid "Liquid Assets"
+msgstr "Aktywa"
+
+#: views/khomeview.cpp:1858
+#, fuzzy
+msgid "Transfers to Liquid Liabilities"
+msgstr "Aktywa i pasywa"
+
+#: views/khomeview.cpp:1861
+#, fuzzy
+msgid "Liquid Liabilities"
+msgstr "Zobowiązanie"
+
+#: views/khomeview.cpp:1864
+#, fuzzy
+msgid "Other Transfers"
+msgstr "Przelewy"
+
+#: views/khomeview.cpp:1908
+msgid "Cash Flow Status"
+msgstr ""
+
+#: views/khomeview.cpp:1914
+msgid "Expected Liquid Assets"
+msgstr ""
+
+#: views/khomeview.cpp:1917
+#, fuzzy
+msgid "Expected Liquid Liabilities"
+msgstr "Aktywa i pasywa"
+
+#: views/khomeview.cpp:1920
+#, fuzzy
+msgid "Expected Profit/Loss"
+msgstr "Całkowite zyski:"
+
+#: plugins/ofximport/ofximporterplugin.cpp:64
+#, fuzzy
+msgid "OFX..."
+msgstr "QIF ..."
+
+#: plugins/ofximport/ofximporterplugin.cpp:69
+#, fuzzy
+msgid "OFX import file selection"
+msgstr "Położenie filtra wyjściowego"
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+#, fuzzy
+msgid ""
+"Unable to import %1 using the OFX importer plugin. This file is not the "
+"correct format."
+msgstr ""
+"Nie można zaimportować %1 przy pomocy wtyczki %2. To nie jest poprawny "
+"format pliku."
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid "Incorrect format"
+msgstr "Niepoprawny format"
+
+#: plugins/ofximport/ofximporterplugin.cpp:122
+#, fuzzy
+msgid "Unable to parse file"
+msgstr "Nie można dodać beneficjenta"
+
+#: plugins/ofximport/ofximporterplugin.cpp:576
+#, fuzzy
+msgid "Online settings"
+msgstr "Ustawienia wycen online"
+
+#: plugins/ofximport/ofximporterplugin.cpp:635
+#, c-format
+msgid "Error connecting to bank: %1"
+msgstr "Błąd połączenia do banku: %1"
+
+#: plugins/ofximport/ofximporterplugin.cpp:646
+#, fuzzy
+msgid ""
+"Unable to import %1 using the OFX importer plugin. The plugin returned the "
+"following error:<p>%2"
+msgstr ""
+"Nie można zaimportować %1 przy pomocy wtyczki %2. Wtyczka zwróciła "
+"następujący błąd: %3."
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Importing process terminated unexpectedly."
+msgstr "Nieoczekiwane zakończenie procesu importowania."
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Failed to import all statements."
+msgstr "Nieudany import wszystkich wyciągów."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "The HTTP request failed."
+msgstr "Niepowodzenie żądania HTTP."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "Failed"
+msgstr "Nieudane"
+
+#: plugins/ofximport/ofxpartner.cpp:410
+#, fuzzy
+msgid "Cannot open file %1 for writing"
+msgstr "Nie można otworzyć pliku '%1' do zapisu"
+
+#: plugins/ofximport/ofxpartner.cpp:414
+#, fuzzy
+msgid "OFX setup error"
+msgstr "Błąd typu pliku"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+#, fuzzy
+msgid "Loading banklist"
+msgstr "Wczytywanie kont..."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid ""
+"Getting list of banks from http://moneycentral.msn.com/\n"
+"This may take some time depending on the available bandwidth."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:155
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:199
+msgid "Supports online statements<br>"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:157
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:201
+#, fuzzy
+msgid "Supports investments<br>"
+msgstr "Typ inwestycji"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:159
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:203
+msgid "Supports bill payment (but not supported by KMyMoney yet)<br>"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:163
+msgid "Does not support online banking</p>"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:173
+msgid "Please choose a bank."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:179
+#, fuzzy
+msgid "Please fill all fields with values."
+msgstr "Proszę wypełnić pole sumy/kwoty."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:271
+msgid "No suitable accounts were found at this bank."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:283
+#, fuzzy
+msgid "Please choose an account"
+msgstr "Proszę wybrać konto nadrzędne."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:386
+msgid "Server message: %1\n"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+msgid "Your bank returned warnings when signing on"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+#, c-format
+msgid "WARNING %1"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, fuzzy
+msgid "Error signing onto your bank"
+msgstr "Błąd połączenia do banku: %1"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, c-format
+msgid "ERROR %1"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingstatus.cpp:59
+msgid "Enabled & configured"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:1
+msgid "OFX Direct Connect"
+msgstr "Bezpośrednie połączenie OFX"
+
+#: plugins/ofximport/dialogs/rc.cpp:2
+msgid "Contacting bank..."
+msgstr "Kontaktowanie się z bankiem..."
+
+#: plugins/ofximport/dialogs/rc.cpp:4
+msgid "Online Banking Account Setup"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:5
+#, fuzzy
+msgid "Select Financial Institution"
+msgstr "Stany kont wg instytucji"
+
+#: plugins/ofximport/dialogs/rc.cpp:6
+msgid "Please select your financial institution from the list below..."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:7
+msgid "Automatic"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:8
+#, fuzzy
+msgid "Financial Institution"
+msgstr "Instytucja"
+
+#: plugins/ofximport/dialogs/rc.cpp:9
+#, fuzzy
+msgid "Manual"
+msgstr "Wpłata własna"
+
+#: plugins/ofximport/dialogs/rc.cpp:10
+msgid "Org"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:11
+#, fuzzy
+msgid "FID"
+msgstr "FIID"
+
+#: dialogs/settings/rc.cpp:120 plugins/ofximport/dialogs/rc.cpp:12
+#: widgets/rc.cpp:46
+msgid "URL"
+msgstr "URL"
+
+#: plugins/ofximport/dialogs/rc.cpp:13
+#, fuzzy
+msgid "Enter Login Details"
+msgstr "Szczegóły transakcji"
+
+#: plugins/ofximport/dialogs/rc.cpp:14
+msgid ""
+"Please enter the username and password you use to log into this bank for "
+"online banking. Please note that many banks require a separate signup, and "
+"assign a separate PIN or password just for online banking from home."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:15
+#, fuzzy
+msgid "Connection Details"
+msgstr "Szczegóły transakcji"
+
+#: plugins/ofximport/dialogs/rc.cpp:16
+msgid "Username"
+msgstr "Nazwa użytkownika"
+
+#: plugins/ofximport/dialogs/rc.cpp:17 plugins/ofximport/dialogs/rc.cpp:36
+#, fuzzy
+msgid "Header Version"
+msgstr "Czcionka nagłówka"
+
+#: plugins/ofximport/dialogs/rc.cpp:18 plugins/ofximport/dialogs/rc.cpp:37
+#, fuzzy
+msgid "Identify as"
+msgstr "Identyfikacja"
+
+#: dialogs/rc.cpp:742 plugins/ofximport/dialogs/rc.cpp:19
+msgid "Password"
+msgstr "Hasło"
+
+#: plugins/ofximport/dialogs/rc.cpp:20
+#, fuzzy
+msgid "Select Account"
+msgstr "Wybierz konto:"
+
+#: plugins/ofximport/dialogs/rc.cpp:21
+msgid ""
+"Please select the account from your financial institution from the list "
+"below which matches this account."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:24
+msgid "Bank"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:25
+#, fuzzy
+msgid "Branch"
+msgstr "Saldo"
+
+#: plugins/ofximport/dialogs/rc.cpp:26
+msgid "WizardPage"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:27
+msgid ""
+"Congratulations! You have successfully set up your bank for online banking "
+"via OFX."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:28
+msgid "Account Details"
+msgstr "Szczegóły konta"
+
+#: plugins/ofximport/dialogs/rc.cpp:29 plugins/ofximport/dialogs/rc.cpp:31
+msgid "&lt;Not configured&gt;"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:30
+msgid "BANK/BROKER:"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:32
+#, fuzzy
+msgid "Unavailable"
+msgstr "Wartość"
+
+#: plugins/ofximport/dialogs/rc.cpp:33
+msgid "ACCOUNT:"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:34
+msgid "STATUS:"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:35
+#, fuzzy
+msgid "OFX Details"
+msgstr "Szczegóły"
+
+#: plugins/ofximport/dialogs/rc.cpp:38
+#, fuzzy
+msgid "Start date of import"
+msgstr "Początkowa data wyciągu"
+
+#: plugins/ofximport/dialogs/rc.cpp:39
+#, fuzzy
+msgid "To&day minus"
+msgstr "Dzisiejsze płatności"
+
+#: plugins/ofximport/dialogs/rc.cpp:40
+#, fuzzy
+msgid "days"
+msgstr "Ostatnie 30 dni"
+
+#: plugins/ofximport/dialogs/rc.cpp:41
+#, fuzzy
+msgid "Last &update"
+msgstr "Ostatni rok"
+
+#: plugins/ofximport/dialogs/rc.cpp:42
+#, fuzzy
+msgid "Pi&ck date"
+msgstr "Data wykonania"
+
+#: plugins/ofximport/dialogs/rc.cpp:43
+msgid "Name is derived from"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:44
+msgid "P&AYEEID"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:45
+#, fuzzy
+msgid "&NAME"
+msgstr "AMEX"
+
+#: plugins/ofximport/dialogs/rc.cpp:46
+msgid "field if both are present in download"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:81
+msgid "Quicken Windows 2003"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:82
+msgid "Quicken Windows 2004"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:83
+msgid "Quicken Windows 2005"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:84
+msgid "Quicken Windows 2006"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:85
+msgid "Quicken Windows 2007"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:86
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:111
+msgid "Quicken Windows 2008"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:89
+msgid "MS-Money 2003"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:90
+msgid "MS-Money 2004"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:91
+msgid "MS-Money 2005"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:92
+msgid "MS-Money 2006"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:93
+msgid "MS-Money 2007"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:94
+msgid "MS-Money Plus"
+msgstr ""
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:91
+msgid "Report Configuration"
+msgstr "Konfiguracja raportu"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:117
+#: dialogs/kreportconfigurationfilterdlg.cpp:135
+msgid "Rows/Columns"
+msgstr "Wiersze/kolumny"
+
+#: dialogs/investtransactioneditor.cpp:203
+#: dialogs/investtransactioneditor.cpp:537
+#: dialogs/investtransactioneditor.cpp:579 dialogs/rc.cpp:103
+#: dialogs/rc.cpp:158 dialogs/rc.cpp:245 dialogs/rc.cpp:750 dialogs/rc.cpp:794
+#: widgets/kmymoneyaccountselector.cpp:182 widgets/register.cpp:64
+#: widgets/register.cpp:567 widgets/transaction.cpp:1500
+msgid "Security"
+msgstr "Walor"
+
+#: dialogs/investtransactioneditor.cpp:211
+#, fuzzy
+msgid "Asset account"
+msgstr "Rachunki aktywów"
+
+#: dialogs/investtransactioneditor.cpp:1073
+#, fuzzy
+msgid "Price/Share"
+msgstr "Cena za udział"
+
+#: dialogs/kmergetransactionsdlg.cpp:39
+#, fuzzy
+msgid "Merge Transactions"
+msgstr "Transakcje"
+
+#: dialogs/kmergetransactionsdlg.cpp:40
+#, fuzzy
+msgid "Are you sure you wish to merge these transactions?"
+msgstr "Czy na pewno usunąć wybrany harmonogram?"
+
+#: dialogs/kstartdlg.cpp:59
+msgid "Start Dialog"
+msgstr "Okno startowe"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Templates"
+msgstr "Szablony"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Select templates"
+msgstr "Wybierz szablony"
+
+#: dialogs/kstartdlg.cpp:80 dialogs/kstartdlg.cpp:119
+msgid "New KMyMoney document"
+msgstr "Nowy dokument KMyMoney"
+
+#: dialogs/kstartdlg.cpp:90
+msgid "Open a KMyMoney document"
+msgstr "Otwórz dokument KMyMoney"
+
+#: dialogs/kstartdlg.cpp:96
+msgid ""
+"%1|KMyMoney files (*.kmy)\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Pliki KMyMoney (*.kmy)\n"
+"%2|Wszystkie pliki (*.*)"
+
+#: dialogs/kstartdlg.cpp:102
+msgid "Recent Files"
+msgstr "Ostatnio używane"
+
+#: dialogs/kstartdlg.cpp:217
+msgid "Blank Document"
+msgstr "Pusty dokument"
+
+#: dialogs/knewbudgetdlg.cpp:71
+msgid "Please specify a budget name"
+msgstr ""
+
+#: dialogs/kgncpricesourcedlg.cpp:48
+#, c-format
+msgid "Investment: %1"
+msgstr "Inwestycja: %1"
+
+#: dialogs/kgncpricesourcedlg.cpp:49
+#, c-format
+msgid "Quote source: %1"
+msgstr "Źródło wyceny: %1"
+
+#: dialogs/kmymoneypricedlg.cpp:62 dialogs/ksecuritylisteditor.cpp:69
+msgid "Delete this entry"
+msgstr "Usuń tę pozycję"
+
+#: dialogs/ksecuritylisteditor.cpp:70
+msgid "Remove this security item from the file"
+msgstr "Usuń tę pozycję papierów wartościowych z pliku"
+
+#: dialogs/ksecuritylisteditor.cpp:73
+msgid "&Add"
+msgstr "&Dodaj"
+
+#: dialogs/kmymoneypricedlg.cpp:68 dialogs/ksecuritylisteditor.cpp:75
+msgid "Add a new entry"
+msgstr "Dodaj nową pozycję"
+
+#: dialogs/ksecuritylisteditor.cpp:76
+msgid "Create a new security entry."
+msgstr "Stwórz nowy wpis waloru."
+
+#: dialogs/keditequityentrydlg.cpp:77 dialogs/kmymoneypricedlg.cpp:74
+#: dialogs/ksecuritylisteditor.cpp:81
+msgid "Modify the selected entry"
+msgstr "Zmień wybraną pozycję"
+
+#: dialogs/ksecuritylisteditor.cpp:82
+msgid "Change the security information of the selected entry."
+msgstr "Zmień informacje dotyczące papieru wartościowego na wybranej pozycji."
+
+#: dialogs/kmymoneypricedlg.cpp:80 dialogs/ksecuritylisteditor.cpp:87
+msgid "Close the dialog"
+msgstr "Zamknij okno"
+
+#: dialogs/kmymoneypricedlg.cpp:81 dialogs/ksecuritylisteditor.cpp:88
+msgid "Use this to close the dialog and return to the application."
+msgstr "Użyj, żeby zamknąć to okienko i wrócić do aplikacji."
+
+#: dialogs/ksecuritylisteditor.cpp:184
+msgid ""
+"Do you really want to remove the currency <b>%1</b> from the file?</"
+"p><i>Note: It is currently not supported to add currencies.</i>"
+msgstr ""
+"Czy na pewno usunąć walutę <b>%1</b> z pliku?</p><i>Uwaga: nie da się "
+"obecnie dodawać walut.</i>"
+
+#: dialogs/ksecuritylisteditor.cpp:187
+msgid "Do you really want to remove the %1 <b>%2</b> from the file?"
+msgstr "Czy na pewno usunąć z pliku %1 <b>%2</b>?"
+
+#: dialogs/ksecuritylisteditor.cpp:190
+msgid "Delete security"
+msgstr "Usuń papier wartościowy"
+
+#: dialogs/kmymoneypricedlg.cpp:63
+msgid "Remove this price item from the file"
+msgstr "Usuń z pliku tę pozycję ceny"
+
+#: dialogs/kmymoneypricedlg.cpp:66 dialogs/mymoneyqifprofileeditor.cpp:94
+msgid "&New"
+msgstr "&Nowy"
+
+#: dialogs/kmymoneypricedlg.cpp:69
+msgid "Create a new price entry."
+msgstr "Stwórz nową pozycję ceny."
+
+#: dialogs/kmymoneypricedlg.cpp:75
+msgid "Change the details of selected price information."
+msgstr "Zmień szczegóły wybranej ceny."
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Do you really want to delete the selected price entry?"
+msgstr "Czy na pewno chcesz usunąć wybraną pozycję ceny?"
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Delete price information"
+msgstr "Usuń informacje o cenie"
+
+#: dialogs/kchooseimportexportdlg.cpp:46
+msgid ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Proszę wybrać typ importu. Proste objaśnienie\n"
+"typu importu znajduje się na dole ekranu a aktualizuje się,\n"
+"kiedy\n"
+"wybierze się element z elementu wyboru.\n"
+"\n"
+"Po wybraniu typu importu proszę kliknąć na przycisk OK."
+
+#: dialogs/kchooseimportexportdlg.cpp:50 dialogs/rc.cpp:22
+msgid "Choose import type:"
+msgstr "Wybierz typ importu:"
+
+#: dialogs/kchooseimportexportdlg.cpp:51 dialogs/rc.cpp:20
+msgid "Choose Import Type Dialog"
+msgstr "Okno wyboru typu importu"
+
+#: dialogs/kchooseimportexportdlg.cpp:53
+msgid ""
+"Please choose the type of export you wish to perform. A simple explanation\n"
+"of the export type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an export type please press the OK button."
+msgstr ""
+"Proszę wybrać typ eksportu. Proste objaśnienie\n"
+"typu eksportu znajduje się na dole ekranu a aktualizuje się,\n"
+"kiedy\n"
+"wybierze się element z elementu wyboru.\n"
+"\n"
+"Po wybraniu typu eksportu proszę kliknąć na przycisk OK."
+
+#: dialogs/kchooseimportexportdlg.cpp:57
+msgid "Choose export type:"
+msgstr "Wybierz typ eksportu:"
+
+#: dialogs/kchooseimportexportdlg.cpp:58
+msgid "Choose Export Type Dialog"
+msgstr "Okno wyboru typu eksportu"
+
+#: dialogs/kchooseimportexportdlg.cpp:78
+msgid ""
+"QIF files are created by the popular accounting program Quicken.\n"
+"Another dialog will appear, if you choose this type, asking for further\n"
+"information relevant to the Quicken format."
+msgstr ""
+"Pliki QIF są tworzone przez popularny program rachunkowy - Quicken.\n"
+"Po wybraniu tego typu pojawi się kolejne okienko, z prośbą o podanie "
+"dalszych\n"
+"informacji związanych z formatem Quicken."
+
+#: dialogs/kchooseimportexportdlg.cpp:82
+msgid ""
+"The CSV type uses a comma delimeted text file that can be used by\n"
+"most popular spreadsheet programs available for Linux and other operating\n"
+"systems."
+msgstr ""
+"Typ CSV używa pliku z tekstem rozdzielonym przecinkami, który może być "
+"użyty\n"
+"przez większość popularnych arkuszy kalkulacyjnych w Linuksie i innych\n"
+"systemach operacyjnych."
+
+#: dialogs/kequitypriceupdatedlg.cpp:222
+msgid "%1 units in %2"
+msgstr "%1 jednostek w %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+#, fuzzy
+msgid ""
+"Failed to retrieve an exchange rate for %1 from %2. It will be skipped this "
+"time."
+msgstr ""
+"Nie udało się pobrać wyceny %1 z %2. Czy wyłączyć aktualizację cen online "
+"dla tego waloru?"
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+#, fuzzy
+msgid "Price Update Failed"
+msgstr "Aktualizacja ceny nieudana"
+
+#: dialogs/kequitypriceupdatedlg.cpp:427
+msgid ""
+"Failed to retrieve a quote for %1 from %2. Press <b>No</b> to remove the "
+"online price source from this security permanently, <b>Yes</b> to continue "
+"updating this security during future price updates or <b>Cancel</b> to stop "
+"the current update operation."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:427 dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Price Update Failed"
+msgstr "Aktualizacja ceny nieudana"
+
+#: dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Cannot update security <b>%1</b>: %2"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:528
+#, fuzzy
+msgid "Price for %1 updated (id %2)"
+msgstr "Zaktualizowano cenę %1"
+
+#: dialogs/kequitypriceupdatedlg.cpp:534
+msgid "Received an invalid price for %1, unable to update."
+msgstr "Otrzymano niepoprawną cenę %1, nie można zaktualizować."
+
+#: dialogs/kequitypriceupdatedlg.cpp:554
+#, fuzzy
+msgid ""
+"Received a price for %1 (id %2), but this symbol is not on the list! "
+"Aborting entire update."
+msgstr ""
+"Otrzymano cenę dla %1, ale tego symbolu nie ma na liście. Cała aktualizacja "
+"zostaje przerwana."
+
+#: dialogs/transactioneditor.cpp:222
+msgid ""
+"The number <b>%1</b> has already been used in account <b>%2</b>. Do you want "
+"to replace it with the next available number?"
+msgstr ""
+"Numer <b>%1</b> został już użyty w koncie <b>%2</b>. Czy chcesz go zastąpić "
+"przez kolejny dostępny numer?"
+
+#: dialogs/transactioneditor.cpp:222
+msgid "Duplicate number"
+msgstr "Duplikat numeru"
+
+#: dialogs/transactioneditor.cpp:303
+msgid ""
+"This transaction has more than two splits and is based on a different "
+"currency (%1). Using this account to modify the transaction is currently not "
+"very well supported by KMyMoney and may result in false results."
+msgstr ""
+"Transakcja ta zawiera więcej, niż dwa podziały i bazuje na innej walucie (%"
+"1). Użycie tego konta do jej modyfikacji nie jest obecnie najlepiej "
+"obsługiwane przez KMyMoney i może dać nieprawdziwe wyniki."
+
+#: dialogs/transactioneditor.cpp:305
+msgid ""
+"KMyMoney was not able to find a more appropriate account to edit this "
+"transaction. Nevertheless, you are allowed to modify the transaction. If you "
+"don't want to edit this transaction, please cancel from editing next."
+msgstr ""
+"KMyMoney nie był w stanie znaleźć bardziej odpowiedniego konta do edycji tej "
+"transakcji. Tym niemniej nadal możesz ją edytować. Jeśli nie chcesz tego "
+"robić, anuluj przechodzenie dalej."
+
+#: dialogs/transactioneditor.cpp:307
+msgid ""
+"Using e.g. <b>%1</b> to edit this transaction is a better choice. "
+"Nevertheless, you are allowed to modify the transaction. If you want to use "
+"the suggested account instead, please cancel from editing next and change "
+"the view to the suggested account."
+msgstr ""
+"Lepszym wyborem dla edycji tej transakcji jest użycie np. <b>%1</b>. Mimo "
+"wszystko, można modyfikować tę transakcję. Jeśli zamiast tego chciałbyś użyć "
+"sugerowanego konta, anuluj edycję tekstu i zmień widok na sugerowane konto."
+
+#: dialogs/transactioneditor.cpp:410
+#, fuzzy
+msgid ""
+"This transaction has more than two splits and is originally based on a "
+"different currency (%1). Using this account to modify the transaction may "
+"result in rounding errors. Do you want to continue?"
+msgstr ""
+"Transakcja ta zawiera więcej, niż dwa podziały i bazuje na innej walucie (%"
+"1). Użycie tego konta do jej modyfikacji nie jest obecnie najlepiej "
+"obsługiwane przez KMyMoney i może dać nieprawdziwe wyniki."
+
+#: dialogs/transactioneditor.cpp:412
+#, fuzzy
+msgid ""
+"At least one of the selected transactions has more than two splits and is "
+"originally based on a different currency (%1). Using this account to modify "
+"the transactions may result in rounding errors. Do you want to continue?"
+msgstr ""
+"Transakcja ta zawiera więcej, niż dwa podziały i bazuje na innej walucie (%"
+"1). Użycie tego konta do jej modyfikacji nie jest obecnie najlepiej "
+"obsługiwane przez KMyMoney i może dać nieprawdziwe wyniki."
+
+#: dialogs/transactioneditor.cpp:557
+#, fuzzy
+msgid "Storing transactions"
+msgstr "Dodawanie transakcji"
+
+#: dialogs/transactioneditor.cpp:603 widgets/kmymoneybriefschedule.cpp:65
+msgid "&Enter"
+msgstr "&Wprowadź"
+
+#: dialogs/transactioneditor.cpp:606
+#, fuzzy
+msgid "Use this to enter the transaction into the ledger."
+msgstr "Zapisz transakcję w rejestrze"
+
+#: dialogs/transactioneditor.cpp:607
+#, fuzzy
+msgid "&Schedule"
+msgstr "Harmonogram"
+
+#: dialogs/transactioneditor.cpp:609
+#, fuzzy
+msgid "Accepts the entered data and stores it as schedule"
+msgstr "Akceptuje i zapisuje wprowadzone dane"
+
+#: dialogs/transactioneditor.cpp:610
+#, fuzzy
+msgid "Use this to schedule the transaction for later entry into the ledger."
+msgstr ""
+"Użyj, żeby zaakceptować wszystkie transakcje i zaimportować je do pliku."
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"The transaction you are about to enter has a post date in the future.<br/"
+"><br/>Do you want to enter it in the ledger or add it to the schedules?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"_: Dialog caption for 'Enter or schedule' dialog\n"
+"Enter or schedule?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:671
+msgid ""
+"The balance of account <b>%1</b> dropped below the warning balance of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:677
+msgid ""
+"The balance of account <b>%1</b> dropped below the minimum balance of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:683
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit warning "
+"limit of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:689
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit limit of %"
+"2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:740
+#, fuzzy
+msgid "Payer/Receiver"
+msgstr "Odbiorca"
+
+#: dialogs/transactioneditor.cpp:748
+msgid "Category/Account"
+msgstr "Kategoria/konto"
+
+#: dialogs/transactioneditor.cpp:980 dialogs/transactioneditor.cpp:1016
+#: dialogs/transactioneditor.cpp:1378 dialogs/transactioneditor.cpp:1399
+#: dialogs/transactioneditor.cpp:1422 dialogs/transactioneditor.cpp:1443
+#: dialogs/transactioneditor.cpp:1505 dialogs/transactioneditor.cpp:1509
+#: widgets/transaction.cpp:902
+msgid "Transfer from"
+msgstr "Przelew z"
+
+#: dialogs/transactioneditor.cpp:982 dialogs/transactioneditor.cpp:1018
+#: dialogs/transactioneditor.cpp:1401 dialogs/transactioneditor.cpp:1445
+#: dialogs/transactioneditor.cpp:1506 widgets/transaction.cpp:902
+msgid "Transfer to"
+msgstr "Przelew na"
+
+#: dialogs/transactioneditor.cpp:1259
+#, fuzzy
+msgid "Select autofill transaction"
+msgstr "Usuń transakcję"
+
+#: dialogs/transactionmatcher.cpp:77
+msgid "First transaction does not match requirement for matching"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:79
+msgid "Second transaction does not match requirement for matching"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:83 dialogs/transactionmatcher.cpp:133
+msgid "Splits for %1 have conflicting values (%2,%3)"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:96 dialogs/transactionmatcher.cpp:149
+msgid ""
+"Both of these transactions have been imported into %1. Therefore they "
+"cannot be matched. Matching works with one imported transaction and one non-"
+"imported transaction."
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:101 dialogs/transactionmatcher.cpp:156
+#, fuzzy
+msgid "Unable to match all splits (%1)"
+msgstr "Nie można zaznaczyć podziału"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:65
+msgid "Account and transfer account are the same. Please change one."
+msgstr "Konto i konto docelowe są takie same. Proszę zmienić jedno z nich."
+
+#: dialogs/kconfirmmanualenterdlg.cpp:84
+msgid "Payee changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:92
+#: dialogs/kconfirmmanualenterdlg.cpp:100
+msgid "Account changed. Old: \"%1\", New: \"%2\""
+msgstr "Zmiana konta. Stare :\"%1\", nowe: \"%2\""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:107
+msgid "Account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:115
+#, fuzzy
+msgid ""
+"Transfer account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</"
+"b><p>"
+msgstr "Zmiana konta docelowego. Stare: \"%1\", nowe: \"%2\""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:143
+msgid ""
+"Category changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:151
+#: dialogs/kconfirmmanualenterdlg.cpp:153
+msgid "empty"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:157
+msgid "Memo changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:166
+msgid "Amount changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:175
+msgid ""
+"Reconciliation flag changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%"
+"2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:182
+msgid "Fatal error in determining data: "
+msgstr "Poważny błąd przy określaniu danych: "
+
+#: dialogs/kselectdatabasedlg.cpp:56
+msgid ""
+"There are no Qt SQL drivers installed in your system.\n"
+"Please consult documentation for your distro, or visit the Qt web site (www."
+"trolltech.com) and search for SQL drivers."
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:100
+msgid "Qt SQL driver %1 is no longer installed on your system"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:107
+msgid "Qt SQL driver %1 is not suported"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:164
+#, fuzzy
+msgid "SQLite files (*.sql);; All files (*.*)"
+msgstr ""
+"*.%1|Pliki %2\n"
+"*.*|Wszystkie pliki (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:167
+#, fuzzy
+msgid "Select SQLite file"
+msgstr "Zaznacz styl"
+
+#: dialogs/kselectdatabasedlg.cpp:188
+#, fuzzy
+msgid "All files (*.*)"
+msgstr "Wszystkie daty"
+
+#: dialogs/kselectdatabasedlg.cpp:191
+#, fuzzy
+msgid "Select output file"
+msgstr "Wybierz nazwę pliku"
+
+#: dialogs/investactivities.cpp:168
+#, fuzzy
+msgid "%1 (Brokerage)"
+msgstr " (Brokerskie)"
+
+#: dialogs/investactivities.cpp:200 dialogs/investactivities.cpp:288
+#: dialogs/investactivities.cpp:425 widgets/transaction.cpp:1548
+#, fuzzy
+msgid "Price/share"
+msgstr "Cena za udział"
+
+#: dialogs/investactivities.cpp:586
+msgid "Ratio 1/"
+msgstr ""
+
+#: dialogs/kenterscheduledlg.cpp:201
+#, fuzzy
+msgid ""
+"<p>Please check that all the details in the following dialog are correct and "
+"press OK.</p><p>Editable data can be changed and can either be applied to "
+"just this occurence or for all subsequent occurences for this schedule. "
+"(You will be asked what you intend after pressing OK in the following dialog)"
+"</p>"
+msgstr ""
+"<b><p>Proszę się upewnić, że wszystkie poniższe szczegóły są poprawne i "
+"wcisnąć OK.</p><p>Dane modyfikowalne można zmieniać, a zmienione można "
+"wykorzystać w tym wystąpieniu, albo wszystkich kolejnych wystąpieniach tego "
+"harmonogramu. (Zostaniesz o to zapytany po kliknięciu na OK).</p></b>"
+
+#: dialogs/kenterscheduledlg.cpp:201
+#, fuzzy
+msgid "Enter scheduled transaction"
+msgstr "Wprowadź zaplanowaną transakcję"
+
+#: dialogs/kcsvprogressdlg.cpp:65 dialogs/kexportdlg.cpp:65
+msgid "&Export"
+msgstr "&Eksport"
+
+#: dialogs/kexportdlg.cpp:67 dialogs/kimportdlg.cpp:68
+msgid "Start operation"
+msgstr "Rozpocznij operację"
+
+#: dialogs/kexportdlg.cpp:68
+msgid "Use this to start the export operation"
+msgstr "Użyj, żeby rozpocząć eksportowanie"
+
+#: dialogs/kexportdlg.cpp:71 dialogs/kimportdlg.cpp:72
+msgid "&Browse..."
+msgstr "P&rzeglądaj..."
+
+#: dialogs/kexportdlg.cpp:73 dialogs/kimportdlg.cpp:74
+msgid "Select filename"
+msgstr "Wybierz nazwę pliku"
+
+#: dialogs/kexportdlg.cpp:74 dialogs/kimportdlg.cpp:75
+msgid "Use this to select a filename to export to"
+msgstr "Użyj, żeby wybrać nazwę pliku do eksportu"
+
+#: dialogs/kexportdlg.cpp:77 dialogs/kimportdlg.cpp:78
+#: dialogs/settings/ksettingsonlinequotes.cpp:64
+#: widgets/kmymoneyonlinequoteconfig.cpp:64
+msgid "&New..."
+msgstr "&Nowy..."
+
+#: dialogs/kexportdlg.cpp:79 dialogs/kimportdlg.cpp:80
+#: dialogs/mymoneyqifprofileeditor.cpp:96
+msgid "Create a new profile"
+msgstr "Utwórz nowy profil"
+
+#: dialogs/kexportdlg.cpp:80 dialogs/kimportdlg.cpp:81
+msgid "Use this to open the profile editor"
+msgstr "Użyj, żeby otworzyć edytor profilu"
+
+#: dialogs/keditloanwizard.cpp:56
+msgid "Edit loan wizard"
+msgstr "Asystent edycji pożyczki"
+
+#: dialogs/keditloanwizard.cpp:58
+msgid ""
+"Please enter the date from which on the following changes will be effective. "
+"The date entered must be later than the opening date of this account (%1), "
+"but must not be in the future. The default will be today."
+msgstr ""
+"Proszę podać datę, od której zmiany zaczną obowiązywać. Musi ona być nowsza "
+"niż data otwarcia tego konta (%1), ale nie może być w przyszłości. Domyślnie "
+"będzie to dzisiejsza data."
+
+#: dialogs/keditloanwizard.cpp:76
+msgid ""
+"Note: you will not be able to modify this account today, because the opening "
+"date \"%1\" is in the future. Please revisit this dialog when the time has "
+"come."
+msgstr ""
+"Uwaga: nie będzie można modyfikować dziś tego konta, ponieważ data otwarcia "
+"\"%1\" jest z przyszłości. Proszę spróbować ponownie, kiedy ten czas "
+"nadejdzie."
+
+#: dialogs/keditloanwizard.cpp:244
+msgid ""
+"Your previous selection was \"%1\". If you select another option, KMyMoney "
+"will dismiss the changes you have just entered. Do you wish to proceed?"
+msgstr ""
+"Poprzednio było wybrane \"%1\". Jeśli wybierzesz inną opcję, KMyMoney "
+"odrzuci zmiany, których właśnie dokonałeś. Czy chcesz kontynuować?"
+
+#: dialogs/kcategoryreassigndlg.cpp:81
+msgid ""
+"At least one transaction/schedule still references the category <b>%1</b>. "
+"However, at least one category with the same currency must exist so that the "
+"transactions/schedules can be reassigned."
+msgstr ""
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid ""
+"This dialog does not allow to create new categories. Please pick a category "
+"from the list."
+msgstr ""
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+#, fuzzy
+msgid "Category creation"
+msgstr "Wybór kategorii"
+
+#: dialogs/kbackupdlg.cpp:61
+msgid "C&hoose..."
+msgstr "&Wybierz..."
+
+#: dialogs/kbackupdlg.cpp:63
+msgid "Select mount point"
+msgstr "Wybierz punkt montowania"
+
+#: dialogs/kbackupdlg.cpp:64
+msgid "Use this to browse to the mount point."
+msgstr "Użyj, żeby wybrać punkt montowania."
+
+#: dialogs/keditscheduledlg.cpp:293
+#, fuzzy
+msgid "Next due date"
+msgstr "Następny termin płatności:"
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid ""
+"You have turned on the GPG encryption support. This means, that new files "
+"will be stored encrypted. Existing files will not be encrypted "
+"automatically. To achieve encryption of existing files, please use the "
+"<b>File/Save as...</b> feature and store the file under a different name. "
+"Once confident with the result, feel free to delete the old file and rename "
+"the encrypted one to the old name."
+msgstr ""
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+#, fuzzy
+msgid "GPG encryption activated"
+msgstr "Użyj szyfrowania GPG"
+
+#: dialogs/settings/ksettingshome.cpp:51
+msgid "&Up"
+msgstr "W &górę"
+
+#: dialogs/settings/ksettingshome.cpp:53
+msgid "Move selected item up"
+msgstr "Przesuń wybrany element w górę"
+
+#: dialogs/settings/ksettingshome.cpp:54
+msgid "Use this to move the selected item up by one position in the list."
+msgstr ""
+"Użyj, żeby przenieść zaznaczoną pozycję na liście w górę o jedno miejsce."
+
+#: dialogs/settings/ksettingshome.cpp:55
+msgid "&Down"
+msgstr "W &dół"
+
+#: dialogs/settings/ksettingshome.cpp:57
+msgid "Move selected item down"
+msgstr "Przesuń wybrany element w dół"
+
+#: dialogs/settings/ksettingshome.cpp:58
+msgid "Use this to move the selected item down by one position in the list."
+msgstr ""
+"Użyj, żeby przenieść zaznaczoną pozycję na liście w dół o jedno miejsce."
+
+#: dialogs/settings/rc.cpp:1
+#, fuzzy
+msgid "Color settings"
+msgstr "Ustawienia kolorów"
+
+#: dialogs/settings/rc.cpp:2
+msgid "Foreground"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:3
+#, fuzzy
+msgid "Text colors"
+msgstr "Użyj czcionek systemowych"
+
+#: dialogs/settings/rc.cpp:4
+#, fuzzy
+msgid "Grid color"
+msgstr "Kolor siatki listy:"
+
+#: dialogs/settings/rc.cpp:5
+#, fuzzy
+msgid "Erronous transaction"
+msgstr "Dowolna transakcja"
+
+#: dialogs/settings/rc.cpp:6
+#, fuzzy
+msgid "Value with missing conversion rate"
+msgstr "Wartość z brakującym kursem wymiany:"
+
+#: dialogs/settings/rc.cpp:7
+#, fuzzy
+msgid "Negative value"
+msgstr "Wartość netto"
+
+#: dialogs/settings/rc.cpp:8
+#, fuzzy
+msgid "Background"
+msgstr "Kopia zapasowa"
+
+#: dialogs/settings/rc.cpp:10
+#, fuzzy
+msgid "List background colors"
+msgstr "Kolor tła listy:"
+
+#: dialogs/settings/rc.cpp:11
+#, fuzzy
+msgid "Normal"
+msgstr "Brak podręcznika"
+
+#: dialogs/settings/rc.cpp:12
+#, fuzzy
+msgid "Alternate"
+msgstr "Wszystkie stany"
+
+#: dialogs/settings/rc.cpp:13
+#, fuzzy
+msgid "Special background colors"
+msgstr "Kolor tła listy:"
+
+#: dialogs/settings/rc.cpp:14
+msgid "Ledger group separator"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:15
+msgid "Required field"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:16
+#, fuzzy
+msgid "Imported transaction"
+msgstr "Zaimportowane transakcje"
+
+#: dialogs/settings/rc.cpp:17
+#, fuzzy
+msgid "Matched transaction"
+msgstr "Przeszukuj transakcje"
+
+#: dialogs/settings/rc.cpp:18
+msgid "Font settings"
+msgstr "Ustawienia czcionek"
+
+#: dialogs/settings/rc.cpp:19
+msgid "Use system fonts"
+msgstr "Użyj czcionek systemowych"
+
+#: dialogs/settings/rc.cpp:20
+#, fuzzy
+msgid "Individual font settings"
+msgstr "Niepoprawne ustawienia"
+
+#: dialogs/settings/rc.cpp:24
+msgid "Number of Days of Account Cycle:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:26
+#, fuzzy
+msgid "Number of Days to Forecast:"
+msgstr "Liczba pozostałych transakcji:"
+
+#: dialogs/settings/rc.cpp:27
+#, fuzzy
+msgid "Forecast Method"
+msgstr "Sposób zapłaty"
+
+#: dialogs/settings/rc.cpp:28
+#, fuzzy
+msgid "Scheduled and Future Transactions"
+msgstr "Zaplanowane transakcje"
+
+#: dialogs/settings/rc.cpp:29
+#, fuzzy
+msgid "History-based"
+msgstr "Ustawienia rejestru"
+
+#: dialogs/settings/rc.cpp:30
+#, fuzzy
+msgid "History-based settings"
+msgstr "Ustawienia rejestru"
+
+#: dialogs/settings/rc.cpp:31
+msgid "Number of Cycles to use in Forecast:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:36
+msgid "General Settings"
+msgstr "Ustawienia ogólne"
+
+#: dialogs/settings/rc.cpp:37
+msgid "Global"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:38
+msgid "Startup page options"
+msgstr "Opcje strony startowej"
+
+#: dialogs/settings/rc.cpp:39
+#, fuzzy
+msgid "Start with homepage"
+msgstr "Uruchom ze stroną domową"
+
+#: dialogs/settings/rc.cpp:40
+#, fuzzy
+msgid "Start with last selected view"
+msgstr "Uruchom z ostatnio wybraną stroną"
+
+#: dialogs/settings/rc.cpp:41
+#, fuzzy
+msgid "Precision settings"
+msgstr "Ustawienia szyfrowania GPG"
+
+#: dialogs/settings/rc.cpp:42
+#, fuzzy
+msgid "Price precision"
+msgstr "Dokładność ceny: "
+
+#: dialogs/settings/rc.cpp:43
+msgid "digits"
+msgstr "cyfry"
+
+#: dialogs/settings/rc.cpp:44
+#, fuzzy
+msgid "Autosave options"
+msgstr "Opcje konta"
+
+#: dialogs/settings/rc.cpp:45
+msgid "Autosave periodically"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:46
+msgid "minutes"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:47
+msgid "Fiscal Year"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:48
+#, fuzzy
+msgid "Your fiscal year starts on"
+msgstr "Bieżący rok"
+
+#: dialogs/settings/rc.cpp:49
+msgid "January"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:50
+msgid "February"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:51
+#, fuzzy
+msgid "March"
+msgstr "Szukaj"
+
+#: dialogs/settings/rc.cpp:52
+msgid "April"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:53
+msgid "May"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:54
+msgid "June"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:55
+msgid "July"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:56
+msgid "August"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:57
+msgid "September"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:58
+#, fuzzy
+msgid "October"
+msgstr "Inny"
+
+#: dialogs/settings/rc.cpp:59
+#, fuzzy
+msgid "November"
+msgstr "Numer"
+
+#: dialogs/settings/rc.cpp:60
+#, fuzzy
+msgid "December"
+msgstr "Pomniejsz"
+
+#: dialogs/settings/rc.cpp:61
+msgid "Views"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:62
+msgid "Synchronize account selection of ledger and investment view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:63
+msgid ""
+"Check the views you want to enable, uncheck those you want to hide, because "
+"you don't need the functionality."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:64
+msgid "Icon size of navigation bar"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:65
+msgid "Micro (16px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:66
+msgid "Small (32px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:67
+msgid "Normal (48px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:68
+msgid "Large (64px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:69
+msgid "Show title bar on each page"
+msgstr ""
+
+#: dialogs/rc.cpp:835 dialogs/settings/rc.cpp:70
+msgid "Filter"
+msgstr "Filtr"
+
+#: dialogs/settings/rc.cpp:71
+#, fuzzy
+msgid "Accounts / Categories"
+msgstr "Kategorie główne"
+
+#: dialogs/settings/rc.cpp:72
+msgid "Don't show unused categories"
+msgstr "Nie pokazuj nieużywanych kategorii"
+
+#: dialogs/settings/rc.cpp:73
+msgid ""
+"This option hides all categories in the categories view that are not used in "
+"at least a single transaction. They are still shown in the category "
+"selection lists."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:74
+#, fuzzy
+msgid "Don't show closed accounts"
+msgstr "Nie pokazuj nieużywanych kategorii"
+
+#: dialogs/settings/rc.cpp:75
+msgid ""
+"This option hides all accounts that have been closed by the user in views "
+"and selection lists.\n"
+"\n"
+"You can use <b>View/Show all accounts</b> to temporarily show hidden "
+"accounts in the views."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:76
+#, fuzzy
+msgid "Show equity accounts"
+msgstr "Edytuj konto"
+
+#: dialogs/rc.cpp:332 dialogs/settings/rc.cpp:77 widgets/rc.cpp:160
+msgid "Schedules"
+msgstr "Harmonogramy"
+
+#: dialogs/settings/rc.cpp:78
+#, fuzzy
+msgid "Don't show finished schedules"
+msgstr "Nie pokazuj nieużywanych kategorii"
+
+#: dialogs/settings/rc.cpp:79
+msgid "This option hides all finished schedules in the schedules view."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:81
+#, fuzzy
+msgid "Don't show transactions prior to"
+msgstr "Ukryj uzgodnione transakcje"
+
+#: dialogs/settings/rc.cpp:82
+#, fuzzy
+msgid "Don't show reconciled transactions"
+msgstr "Ukryj uzgodnione transakcje"
+
+#: dialogs/settings/rc.cpp:83
+msgid "This option hides all reconciled transactions in the ledger view."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:84 widgets/rc.cpp:22
+msgid "GPG encryption settings"
+msgstr "Ustawienia szyfrowania GPG"
+
+#: dialogs/settings/rc.cpp:85
+#, fuzzy
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Access to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>additional recovery encryption</i> is only accessible, if the "
+"necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id "
+"0x8AFDDC8E is found in your keyring."
+msgstr ""
+"Strona umożliwiające ustawienie parametrów zaszyfrowanego pliku danych "
+"<b>KMyMoney</b> na podstawie <b>GPG</b>.<p>\n"
+"Dostęp do ustawień jest wyłączony jeśli nie można wykryć <b>GPG</b> w "
+"systemie. W takim wypadku należy się upewnić, że <b>GPG</b> działa poprawnie "
+"dla bieżącego użytkownika.<p>\n"
+"Opcja <i>Odzyskiwanie szyfrowania</i> jest dostępna tylko wtedy, gdy "
+"znaleziono niezbędny klucz dla <b>kmymoney-recover@users.sourceforge.net</b> "
+"z identyfikatorem 0x8AFDDC8E."
+
+#: dialogs/settings/rc.cpp:86 widgets/rc.cpp:24
+msgid "Use GPG encryption"
+msgstr "Użyj szyfrowania GPG"
+
+#: dialogs/settings/rc.cpp:87
+#, fuzzy
+msgid "GPG encryption"
+msgstr "Użyj szyfrowania GPG"
+
+#: dialogs/settings/rc.cpp:88
+#, fuzzy
+msgid "Your key"
+msgstr "Twoje imię:"
+
+#: dialogs/settings/rc.cpp:89
+msgid ""
+"This combo box lists all the secret keys you have in your keyring. Select "
+"the one you want to use for encryption when saving to a file."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:90
+#, fuzzy
+msgid "Additonal keys"
+msgstr "Dodatkowe opłaty"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:50 dialogs/settings/rc.cpp:91
+#, fuzzy
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading 0x."
+msgstr ""
+"Podaj identyfikator klucza, którego chcesz użyć do szyfrowania danych. Może "
+"to być albo adres e-mail, albo szesnastkowy identyfikator. W drugim "
+"przypadku nie zapomnij o początkowym <i>0x</i>."
+
+#: dialogs/settings/rc.cpp:92 widgets/rc.cpp:28
+msgid ""
+"This symbol denotes, if the key for the given user id has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"Symbol ten określa, czy w kręgu kluczy znaleziono klucz dla danego "
+"identyfikatora użytkownika. Jeśli tak, jest zielony, w przeciwnym wypadku "
+"szary."
+
+#: dialogs/kgpgkeyselectiondlg.cpp:61 dialogs/settings/rc.cpp:93
+msgid "Keys for all of the above user ids found"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:94 widgets/rc.cpp:31
+msgid ""
+"This symbol denotes, if the KMyMoney recovery key has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"Symbol ten określa, czy w kręgu kluczy znaleziono klucz odzyskiwania "
+"KMyMoney. Jeśli tak, jest zielony, w przeciwnym wypadku szary."
+
+#: dialogs/settings/rc.cpp:95
+msgid "Recover Key available in keyring"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:96
+#, fuzzy
+msgid "Also encrypt with KMyMoney's recover key"
+msgstr "Szyfruj również z kluczem odzyskiwania KMyMoney"
+
+#: dialogs/settings/rc.cpp:97
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out.."
+msgstr ""
+"Możesz również określić, że dane mają być dodatkowo zaszyfrowane przy pomocy "
+"klucza odzyskiwania KMyMoney. Tylko programiści jądra KMyMoney są w "
+"posiadaniu odpowiedniego klucza prywatnego, wymaganego do odczytania tak "
+"zaszyfrowanych danych.<p>\n"
+"\n"
+"Mechanizm ten istnieje na wypadek utraty klucza przez użytkownika, a co za "
+"tym idzie, niemożnością uzyskania dostępu do danych. Po aktywowaniu tej "
+"opcji programiści KMyMoney są w stanie odszyfrować dane i dostarczyć je w "
+"czytelnej formie. Proszę się przygotować na konieczność udzielenia "
+"odpowiedzi na kilka szczegółowych pytań związanych z zawartością danych, "
+"zanim zostaną one przez nas wysłane..."
+
+#: dialogs/settings/rc.cpp:98
+#, fuzzy
+msgid "Homepage Settings"
+msgstr "Ustawienia strony domowej"
+
+#: dialogs/settings/rc.cpp:99
+#, fuzzy
+msgid "Up"
+msgstr "W &górę"
+
+#: dialogs/settings/rc.cpp:100
+#, fuzzy
+msgid "Down"
+msgstr "W &dół"
+
+#: dialogs/settings/rc.cpp:101
+#, fuzzy
+msgid ""
+"Selected entries are shown on the home page of the application.<p>\n"
+"Use the buttons and checkboxes to customize the layout of the home page."
+msgstr ""
+"Wybrane pozycje pokazują się na stronie domowej aplikacji.\n"
+"\n"
+"Użyj przycisków i opcji wyboru, żeby dostosować układ strony domowej."
+
+#: dialogs/settings/rc.cpp:102
+msgid "Homepage/Summary page font scaling"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:103
+msgid "Percentage of default font size:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:104
+msgid ""
+"Remember font size when leaving the program if manually changed with mouse-"
+"wheel"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:105
+#, fuzzy
+msgid "Information display"
+msgstr "Informacje o płatności"
+
+#: dialogs/settings/rc.cpp:106
+#, fuzzy
+msgid "Show Account Limit Information"
+msgstr "Opcje konta"
+
+#: dialogs/settings/rc.cpp:110 widgets/rc.cpp:47
+msgid ""
+"<i>Enter regular expressions which can be used to parse the data returned "
+"from the URL entered above. The symbol, price, and date must be found in "
+"the quote data to be usable. You may also try the KMyMoney user's "
+"mailinglist at <a href=\"mailto:kmymoney2-user@lists.sourceforge.net"
+"\">kmymoney2-user@lists.sourceforge.net</a> to find what settings work for "
+"other users in your country.</i>"
+msgstr ""
+"<i>Wpisz wyrażenie regularne, które może zostać użyte do przetworzenia "
+"danych z wpisanego powyżej URL-a. W danych wyceny muszą się znaleźć symbol, "
+"cena i data. Można również spróbować na liście użytkowników KMyMoney <a href="
+"\"mailto:kmymoney2-user@lists.sourceforge.net\">kmymoney2-user@lists."
+"sourceforge.net</a> poszukać, jakie ustawienia działają dla innych "
+"użytkowników z Twojego kraju.</i>"
+
+#: dialogs/settings/rc.cpp:113 widgets/rc.cpp:38
+msgid "Regular Expression to extract the symbol from the downloaded data"
+msgstr "Wyrażenie regularne do wydobycia symbolu ze ściągniętych danych"
+
+#: dialogs/settings/rc.cpp:114 widgets/rc.cpp:39
+msgid "Regular Expression to extract the price from the downloaded data"
+msgstr "Wyrażenie regularne do wydobycia ceny ze ściągniętych danych"
+
+#: dialogs/settings/rc.cpp:115 widgets/rc.cpp:41
+msgid "URL to be used to download the quote"
+msgstr "URL używany do pobrania wyceny"
+
+#: dialogs/settings/rc.cpp:116 widgets/rc.cpp:42
+msgid ""
+"Enter the URL from which stock quotes will be fetched. <b>%1</b> will be "
+"replaced with the symbol for the security being quoted. For currency "
+"conversions, <b>%2</b> will be replaced with the currency to be quoted and "
+"<b>%1</b> with the currency the quote is based on."
+msgstr ""
+"Wpisz URL, z którego będą pobierane wyceny papierów wartościowych. <b>%1</b> "
+"zostanie zastąpiony przez symbol papieru wartościowego podlegającego "
+"wycenie. Przy konwersji walut <b>%2</b> zostanie zastąpiony przez walutę, "
+"która będzie wyceniana, a <b>%1</b> przez walutę, na której oparta jest "
+"wycena."
+
+#: dialogs/settings/rc.cpp:118 dialogs/settings/rc.cpp:121 widgets/rc.cpp:40
+#: widgets/rc.cpp:44
+msgid "Regular Expression to extract the date from the downloaded data"
+msgstr "Wyrażenie regularne do wydobycia daty ze ściągniętych danych"
+
+#: dialogs/rc.cpp:807 dialogs/settings/rc.cpp:119 widgets/rc.cpp:45
+msgid "Date Format"
+msgstr "Format daty"
+
+#: dialogs/settings/rc.cpp:122
+msgid "Skip HTML stripping"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:123
+msgid ""
+"<p>For easier processing of the data returned by the online source, KMyMoney "
+"usually strips unused parts before it is parsed with the regular "
+"expressions. If matching of the fields relies on those items, then use this "
+"option to turn stripping off.</p>\n"
+"\n"
+"<p>The following items are usually removed by stripping:\n"
+"\n"
+"<ul>\n"
+"<li>HTML tags such as <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded characters such as <b>&amp;nbsp;</b></li>\n"
+"<li>duplicate whitespace</li>\n"
+"</ul>\n"
+"</p>"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:127
+msgid "Register settings"
+msgstr "Ustawienia rejestru"
+
+#: dialogs/settings/rc.cpp:128
+#, fuzzy
+msgid "Display"
+msgstr "Dziennie"
+
+#: dialogs/settings/rc.cpp:131
+msgid ""
+"Using the ledger lens shows the details for the transaction that has focus "
+"in the ledger. Usually, when using the transaction form, only a one line "
+"summary is displayed for each transaction as the details are shown in the "
+"form."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:133
+#, fuzzy
+msgid "Always show a No. field"
+msgstr "Zawsze pokazuj pole numeru w formularzu transakcji"
+
+#: dialogs/settings/rc.cpp:134
+#, fuzzy
+msgid "Show group header between transactions"
+msgstr "Stwórz nowy rachunek aktywów"
+
+#: dialogs/settings/rc.cpp:135
+msgid ""
+"Draws a larger header above each group of transaction. The grouping depends "
+"on the current sort order."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:136
+msgid "Show header for the previous and current fiscal year"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:137
+msgid "Sorting"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:138
+msgid "Normal view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:139
+#, fuzzy
+msgid "Reconciliation view"
+msgstr "Asystent uzgadniania"
+
+#: dialogs/settings/rc.cpp:140
+#, fuzzy
+msgid "Search view"
+msgstr "Szukaj"
+
+#: dialogs/settings/rc.cpp:141
+msgid ""
+"Use the <i>left</i> and <i>right</i> buttons to add and remove sort options. "
+"Use the <i>up</i> and <i>down</i> buttons to modify the sort order. Double-"
+"Click a selected entry to toggle the sort order between <i>ascending</i> and "
+"<i>descending</i>."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:142
+#, fuzzy
+msgid "Data entry"
+msgstr "Wpisano kwotę"
+
+#: dialogs/settings/rc.cpp:146
+msgid "Use Enter to move between fields"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:147
+msgid "Match names from start"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:148
+msgid ""
+"Mark this option, if you always want to match names e.g. for payees from the "
+"start. If unset, any substring is matched."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:149
+#, fuzzy
+msgid "Default reconciliation state"
+msgstr "Przełóż uzgadnianie"
+
+#: dialogs/rc.cpp:227 dialogs/settings/rc.cpp:150
+#: widgets/kmymoneycombo.cpp:348 widgets/registersearchline.cpp:84
+msgid "Not reconciled"
+msgstr "Nieuzgodnione"
+
+#: dialogs/rc.cpp:228 dialogs/settings/rc.cpp:151
+#: widgets/kmymoneycombo.cpp:347 widgets/registersearchline.cpp:85
+msgid "Cleared"
+msgstr "Rozliczony"
+
+#: dialogs/settings/rc.cpp:153
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation "
+"of an account"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:154
+msgid "Autofill"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:155
+msgid "No Autofill"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:156
+#, fuzzy
+msgid "Don't do autofill of transaction data at all."
+msgstr "Wypełniaj automatycznie danymi poprzedniej transakcji"
+
+#: dialogs/settings/rc.cpp:157
+#, fuzzy
+msgid "Same transaction if amount differs less than"
+msgstr "&Zmień kwotę transakcji na %2"
+
+#: dialogs/settings/rc.cpp:158
+msgid ""
+"Collect all transactions for the given payee. Treat all transactions that "
+"refer to the same category and have an amount with +/- X % as identical. If "
+"more than one transaction is found, a list of them is presented to the "
+"user.\n"
+"\n"
+"Selecting 0% will list all transactions."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:159
+msgid ""
+"Two transactions are usually treated identical for autofill, if they refer "
+"the same accounts. They are treated as different transactions though, when "
+"their amount varies by more than the percentage given here."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:160
+msgid ""
+"_: Same transaction if amount differs less than percent.\n"
+"percent."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:161
+msgid "with previously most often used transaction for the payee"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:162
+msgid ""
+"The data of the last transaction assigned to the category used most often "
+"for this payee is autofilled into the transaction editor."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:164
+#, fuzzy
+msgid "Match transactions within days"
+msgstr "Zaznacz transakcje bez beneficjentów"
+
+#: dialogs/settings/rc.cpp:165
+msgid ""
+"Search for matching transactions within the range of the posting date of the "
+"imported transaction +/- the number of given days."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:166
+msgid "Ask for a new payee's default category"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:167
+msgid ""
+"Whenever a new payee is detected during import of a statement, the user will "
+"be asked to assign a default category for this user when this option is "
+"selected."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:168
+#, fuzzy
+msgid "Schedule Settings"
+msgstr "Ustawienia harmonogramów"
+
+#: dialogs/settings/rc.cpp:169
+#, fuzzy
+msgid "Startup options"
+msgstr "Opcje strony startowej"
+
+#: dialogs/settings/rc.cpp:170
+#, fuzzy
+msgid "Check schedules on startup"
+msgstr "Sprawdź harmonogramy przy starcie"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:60
+#: widgets/kmymoneyonlinequoteconfig.cpp:60
+msgid "Delete the selected source entry"
+msgstr "Usuń wybraną pozycję źródła"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:61
+#: widgets/kmymoneyonlinequoteconfig.cpp:61
+msgid "Use this to delete the selected online source entry"
+msgstr "Użyj, żeby usunąć wybraną pozycję źródła online"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:66
+#: widgets/kmymoneyonlinequoteconfig.cpp:66
+msgid "Create a new source entry for online quotes"
+msgstr "Stwórz nowy wpis źródła wycen online"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:67
+#: widgets/kmymoneyonlinequoteconfig.cpp:67
+msgid "Use this to create a new entry for online quotes"
+msgstr "Użyj w celu stworzenia nowego wpisu wycen online"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:107
+#: dialogs/settings/ksettingsonlinequotes.cpp:190
+#: dialogs/settings/ksettingsonlinequotes.cpp:193
+#: dialogs/settings/ksettingsonlinequotes.cpp:216
+#: widgets/kmymoneyonlinequoteconfig.cpp:107
+#: widgets/kmymoneyonlinequoteconfig.cpp:185
+#: widgets/kmymoneyonlinequoteconfig.cpp:188
+#: widgets/kmymoneyonlinequoteconfig.cpp:211
+msgid "New Quote Source"
+msgstr "Nowe źródło wyceny"
+
+#: dialogs/ksplittransactiondlg.cpp:77 dialogs/rc.cpp:788
+msgid "Clear &All"
+msgstr "&Rozlicz wszystko"
+
+#: dialogs/ksplittransactiondlg.cpp:79
+msgid "Clear all splits"
+msgstr "Rozlicz wszystkie podziały"
+
+#: dialogs/ksplittransactiondlg.cpp:80
+msgid "Use this to clear all splits of this transaction"
+msgstr "Użyj, żeby rozliczyć wszystkie podziały tej transakcji"
+
+#: dialogs/ksplittransactiondlg.cpp:84
+#, fuzzy
+msgid "&Merge"
+msgstr "Wszystkie stany"
+
+#: dialogs/ksplittransactiondlg.cpp:183
+msgid ""
+"The total amount of this transaction is %1 while the sum of the splits is %"
+"2. The remaining %3 are unassigned."
+msgstr ""
+"Całkowita suma tej transakcji to %1, podczas gdy suma podziałów wynosi %2. "
+"Pozostałe %3 nie są przypisane."
+
+#: dialogs/ksplittransactiondlg.cpp:191
+#, fuzzy, c-format
+msgid "Change &total amount of transaction to %1."
+msgstr "&Zmień całkowitą kwotę transakcji na %1."
+
+#: dialogs/ksplittransactiondlg.cpp:194
+msgid "&Distribute difference of %1 among all splits."
+msgstr "Ro&zdziel różnicę %1 pomiędzy wszystkie podziały."
+
+#: dialogs/ksplittransactiondlg.cpp:203
+#, fuzzy, c-format
+msgid "&Leave total amount of transaction at %1."
+msgstr "&Zmień całkowitą kwotę transakcji na %1."
+
+#: dialogs/ksplittransactiondlg.cpp:205
+msgid "&Leave %1 unassigned."
+msgstr "&Pozostaw %1 nieprzydzielony."
+
+#: dialogs/ksplittransactiondlg.cpp:275
+msgid ""
+"You are about to delete all splits of this transaction. Do you really want "
+"to continue?"
+msgstr ""
+"Zamierzasz usunąć wszystkie podziały tej transakcji. Czy na pewno "
+"kontynuować?"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:97
+msgid "Use this to create a new QIF import/export profile"
+msgstr "Użyj, żeby stworzyć nowe profil importu/eksportu QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:148
+#: dialogs/mymoneyqifprofileeditor.cpp:403 dialogs/rc.cpp:797
+msgid "QIF Profile Editor"
+msgstr "Edytor profilu QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:150
+msgid "QIF Profile Selector"
+msgstr "Wybór profilu QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:236
+msgid "The default QIF profile"
+msgstr "Domyślny profil QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:404
+#: dialogs/mymoneyqifprofileeditor.cpp:417
+msgid "Enter new profile name"
+msgstr "Wpisz nazwę nowego profilu"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:436
+msgid "Do you really want to delete profile '%1'?"
+msgstr "Czy na pewno usunąć profil '%1'?"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:38
+#, fuzzy
+msgid "Select additional keys"
+msgstr "Wprowadź dodatkowe opłaty"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:48 widgets/rc.cpp:25
+msgid "User identification"
+msgstr "Identyfikacja użytkownika"
+
+#: dialogs/kendingbalancedlg.cpp:71
+#, fuzzy
+msgid ""
+"Please enter the following fields with the information as you find them on "
+"your statement. Make sure to enter all values in <b>%1</b>."
+msgstr "Proszę uzupełnić następujące pola informacjami z wyciągu."
+
+#: dialogs/kendingbalancedlg.cpp:124
+#, c-format
+msgid "Last reconciled statement: %1"
+msgstr "Ostatni uzgodniony wyciąg: %1"
+
+#: dialogs/kendingbalancedlg.cpp:437 dialogs/kendingbalancedlg.cpp:577
+#: dialogs/rc.cpp:137
+msgid "Adjustment transaction"
+msgstr "Transakcja regulacyjna"
+
+#: dialogs/kendingbalancedlg.cpp:510
+msgid ""
+"KMyMoney has calculated the following amounts for interest and amortization "
+"according to recorded payments between %1 and %2."
+msgstr ""
+"KMyMoney obliczył następujące kwoty odsetek i amortyzacji zgodnie z "
+"zarejestrowanymi płatnościami pomiędzy %1 a %2."
+
+#: dialogs/kbalancechartdlg.cpp:59
+#, fuzzy, c-format
+msgid "Balance of %1"
+msgstr "Saldo: %1"
+
+#: dialogs/kbalancechartdlg.cpp:70
+#, fuzzy
+msgid "%1 Balance History"
+msgstr "Historia ceny"
+
+#: dialogs/kmymoneysplittable.cpp:98
+msgid "Split Options"
+msgstr "Opcje podziału"
+
+#: dialogs/kmymoneysplittable.cpp:99 dialogs/rc.cpp:731
+#: widgets/kmymoneypriceview.cpp:149
+#, fuzzy
+msgid "Edit..."
+msgstr "Edytuj ..."
+
+#: dialogs/kmymoneysplittable.cpp:100
+msgid "Duplicate"
+msgstr "Duplikat"
+
+#: dialogs/kmymoneysplittable.cpp:102
+msgid "Delete ..."
+msgstr "Usuń..."
+
+#: dialogs/kmymoneysplittable.cpp:275
+msgid ""
+"_: Duplicate split\n"
+"CTRL+c"
+msgstr "CTRL+c"
+
+#: dialogs/kmymoneysplittable.cpp:562
+msgid "will be calculated"
+msgstr "będzie obliczone"
+
+#: dialogs/kmymoneysplittable.cpp:648
+msgid ""
+"You are about to delete the selected split. Do you really want to continue?"
+msgstr "Zamierzasz usunąć wybrany podział. Czy chcesz kontynuować?"
+
+#: dialogs/rc.cpp:1
+msgid "Account selection"
+msgstr "Wybór konta"
+
+#: dialogs/rc.cpp:3
+msgid "Account to import to"
+msgstr "Docelowe konto importu"
+
+#: dialogs/rc.cpp:6 dialogs/rc.cpp:170 widgets/rc.cpp:169
+#, fuzzy
+msgid "Skip"
+msgstr "P&omiń"
+
+#: dialogs/rc.cpp:8
+msgid ""
+"Use this dialog to backup your data. \n"
+"\n"
+"Please make sure you have a disk inserted and that the drive is ready. Then "
+"choose the mount point from either the Choose button or by entering the path "
+"in the available box.\n"
+"\n"
+"Click OK to perform the backup. If your system does not use an automounter, "
+"make sure you mark the checkbox below to \"mount this directory before "
+"backing up.\""
+msgstr ""
+"Użyj tego okienka, żeby zrobić kopię zapasową danych.\n"
+"\n"
+"Trzeba się upewnić, że dyskietka została włożona, a napęd jest gotowy. "
+"Następnie trzeba wybrać punkt montowania, albo przez przycisk Wybierz, albo "
+"wpisując ścieżkę w dostępnym polu.\n"
+"\n"
+"Kliknięcie OK spowoduje zrobienie kopii zapasowej. Jeśli system nie używa "
+"automatycznego montowania, należy zaznaczyć opcję wyboru \"zamontuj ten "
+"katalog przed robieniem kopii zapasowej\"."
+
+#: dialogs/rc.cpp:9
+msgid "Device options"
+msgstr "Opcje urządzenia"
+
+#: dialogs/rc.cpp:10
+#, fuzzy
+msgid ""
+"_: This is the mount point\n"
+"Mount Point:"
+msgstr "Użyj, żeby wybrać punkt montowania."
+
+#: dialogs/rc.cpp:11
+#, fuzzy
+msgid "Choose..."
+msgstr "&Wybierz..."
+
+#: dialogs/rc.cpp:12
+msgid "Mount this directory before backing up."
+msgstr "Zamontuj ten katalog przed rozpoczęciem tworzenia kopii zapasowej."
+
+#: dialogs/rc.cpp:15
+#, fuzzy
+msgid "Reassign categories"
+msgstr "Ukryte kategorie"
+
+#: dialogs/rc.cpp:16
+msgid ""
+"The transactions, schedules and budgets associated with the selected "
+"category need to be re-assigned to a different category before the selected "
+"category can be deleted. Please select a category from the list below."
+msgstr ""
+
+#: dialogs/rc.cpp:17
+#, fuzzy
+msgid "Available categories:"
+msgstr "Ukryte kategorie"
+
+#: dialogs/rc.cpp:21
+msgid ""
+"Please choose the type of import you wish to perform. A simple "
+"explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Proszę wybrać typ importu, który będzie wykonywany. Proste objaśnienie\n"
+"typu importu znajduje się na dole ekranu i aktualizowane, gdy\n"
+"wybierze się pozycję z okienka wyboru.\n"
+"\n"
+"Po wybraniu typu importu należy kliknąć na przycisk OK."
+
+#: dialogs/rc.cpp:23
+msgid "QIF"
+msgstr "QIF"
+
+#: dialogs/rc.cpp:24
+msgid "CSV"
+msgstr "CSV"
+
+#: dialogs/rc.cpp:25
+msgid "Some descripton"
+msgstr "Jakiś opis"
+
+#: dialogs/rc.cpp:28
+msgid "Confirm Manual Enter"
+msgstr "Potwierdź ręczne wprowadzenie"
+
+#: dialogs/rc.cpp:29
+#, fuzzy
+msgid "The following changes have been made to the transaction data:"
+msgstr "Dokonano jakichś zmian danych transakcji."
+
+#: dialogs/rc.cpp:30
+msgid "Please choose what you wish to do with the above changes"
+msgstr "Wybierz co chcesz zrobić z powyższymi zmianami"
+
+#: dialogs/rc.cpp:31
+msgid ""
+"Discard the changes and enter the original transaction into the register."
+msgstr "Porzuć zmiany i wprowadź do rejestru oryginalną transakcję."
+
+#: dialogs/rc.cpp:32
+msgid "Enter these new values this one time, for this occurence only."
+msgstr "Wprowadź nowe wartości tylko tym razem, dla tego wystąpienia."
+
+#: dialogs/rc.cpp:33
+msgid "Set all further occurences in this schedule to be these values."
+msgstr "Ustaw wszystkie dalsze wystąpienia w tym harmonogramie na te wartości."
+
+#: dialogs/rc.cpp:36
+msgid "CSV Dialog"
+msgstr "Okienko CSV"
+
+#: dialogs/rc.cpp:37
+msgid ""
+"CSV Dialog. Choose a file and then click on Run. You can view your "
+"progress at\n"
+"the bottom of the screen.\n"
+"\n"
+"You can cancel the process at any time by clicking on the Cancel button."
+msgstr ""
+"Okienko CSV. Wybierz plik i kliknij na Rozpocznij. Możesz obejrzeć postęp\n"
+"na dole ekranu.\n"
+"\n"
+"W dowolnym momencie można przerwać proces klikając na przycisk Anuluj."
+
+#: dialogs/rc.cpp:38
+msgid "Choose the csv file:"
+msgstr "Wybierz plik csv:"
+
+#: dialogs/rc.cpp:39
+#, fuzzy
+msgid "Browse"
+msgstr "P&rzeglądaj"
+
+#: dialogs/rc.cpp:40
+msgid "Between These Dates"
+msgstr "Między tymi datami"
+
+#: dialogs/rc.cpp:41 dialogs/rc.cpp:196
+msgid "Start on:"
+msgstr "Początek:"
+
+#: dialogs/rc.cpp:42 dialogs/rc.cpp:195
+msgid "End on:"
+msgstr "Koniec:"
+
+#: dialogs/rc.cpp:43
+#, fuzzy
+msgid "Run"
+msgstr "&Rozpocznij"
+
+#: dialogs/rc.cpp:44
+msgid "Progress Info"
+msgstr "Postęp"
+
+#: dialogs/rc.cpp:45
+msgid "Processing Account:"
+msgstr "Przetwarzanie konta:"
+
+#: dialogs/rc.cpp:47
+msgid "Processing Transaction:"
+msgstr "Przetwarzanie transakcji:"
+
+#: dialogs/rc.cpp:48
+msgid "0 of 0"
+msgstr "0 z 0"
+
+#: dialogs/rc.cpp:50
+#, fuzzy
+msgid "Exchange Rate/Price Editor"
+msgstr "Edytor kursu wymiany"
+
+#: dialogs/rc.cpp:55
+msgid "Convert from"
+msgstr "Konwertuj z"
+
+#: dialogs/rc.cpp:58
+msgid "Convert to"
+msgstr "Konwertuj na"
+
+#: dialogs/rc.cpp:61
+#, fuzzy
+msgid "To amount"
+msgstr "Do sumy"
+
+#: dialogs/rc.cpp:62
+msgid "Exchange rate / Price"
+msgstr "Kurs wymiany / cena"
+
+#: dialogs/rc.cpp:64
+msgid ""
+"xx\n"
+"xx"
+msgstr ""
+"xx\n"
+"xx"
+
+#: dialogs/rc.cpp:68
+msgid "Currencies"
+msgstr "Waluty"
+
+#: dialogs/rc.cpp:72
+msgid "real ID"
+msgstr "rzeczywisty ID"
+
+#: dialogs/rc.cpp:73 dialogs/rc.cpp:722
+msgid "ID"
+msgstr "ID"
+
+#: dialogs/rc.cpp:74
+msgid "X"
+msgstr "X"
+
+#: dialogs/rc.cpp:76 dialogs/rc.cpp:459
+msgid "Online Source"
+msgstr "Źródło danych online"
+
+#: dialogs/rc.cpp:78 dialogs/rc.cpp:278 dialogs/rc.cpp:312 dialogs/rc.cpp:684
+msgid "F1"
+msgstr "F1"
+
+#: dialogs/rc.cpp:80
+msgid "If this button is not activated, select the base currency first."
+msgstr "Jeśli przycisk nie jest aktywny, wybierz wpierw podstawową walutę."
+
+#: dialogs/rc.cpp:81
+msgid ""
+"Press this button to close the dialog. If the button is not activated, "
+"select your base currency."
+msgstr ""
+"Wciśnij ten przycisk, żeby zamknąć okienko. Jeśli przycisk nie jest aktywny, "
+"wybierz walutę podstawową."
+
+#: dialogs/rc.cpp:82
+msgid "Edit Equity"
+msgstr "Edytuj kapitał"
+
+#: dialogs/rc.cpp:86 dialogs/rc.cpp:410
+msgid "Smallest fraction:"
+msgstr "Najmniejszy ułamek:"
+
+#: dialogs/rc.cpp:87 dialogs/rc.cpp:408 dialogs/rc.cpp:440
+msgid "1 /"
+msgstr "1 /"
+
+#: dialogs/rc.cpp:88 dialogs/rc.cpp:405
+msgid "Investment Type:"
+msgstr "Typ inwestycji:"
+
+#: dialogs/rc.cpp:89 dialogs/rc.cpp:404
+msgid "Equity Name:"
+msgstr "Nazwa kapitału:"
+
+#: dialogs/rc.cpp:90 dialogs/rc.cpp:409
+msgid "Market Symbol:"
+msgstr "Symbol giełdowy:"
+
+#: dialogs/rc.cpp:91
+msgid "Price History"
+msgstr "Historia ceny"
+
+#: dialogs/rc.cpp:97
+#, fuzzy
+msgid "Edit Scheduled transaction"
+msgstr "Wprowadź zaplanowaną transakcję"
+
+#: dialogs/rc.cpp:98
+#, fuzzy
+msgid "Schedule name:"
+msgstr "Nazwa harmonogramu:"
+
+#: dialogs/rc.cpp:99
+msgid "Frequency:"
+msgstr "Częstotliwość:"
+
+#: dialogs/rc.cpp:100
+msgid "Number of selected periods between entries"
+msgstr ""
+
+#: dialogs/rc.cpp:101
+#, fuzzy
+msgid "Payment information"
+msgstr "Informacje o płatności"
+
+#: dialogs/rc.cpp:105 dialogs/rc.cpp:160 dialogs/rc.cpp:247 dialogs/rc.cpp:752
+#: widgets/register.cpp:569
+msgid "C"
+msgstr "R"
+
+#: dialogs/rc.cpp:113
+#, fuzzy
+msgid "Do nothing"
+msgstr "Nic nie rób"
+
+#: dialogs/rc.cpp:116
+msgid "If this schedule occurs on the weekend:"
+msgstr "Kiedy harmonogram wypada w weekend:"
+
+#: dialogs/rc.cpp:117
+#, fuzzy
+msgid "The amount is an estimate because it varies for each payment"
+msgstr "Wartość szacunkowa ze względu na zmiany kwoty"
+
+#: dialogs/rc.cpp:118
+#, fuzzy
+msgid "Enter this schedule into the register automatically when it is due"
+msgstr "Wprowadź to automatycznie do rejestru"
+
+#: dialogs/rc.cpp:119
+#, fuzzy
+msgid "This schedule will end at some time"
+msgstr "Seria ta kiedyś się skończy"
+
+#: dialogs/rc.cpp:120
+msgid "Number of transactions remaining:"
+msgstr "Liczba pozostałych transakcji:"
+
+#: dialogs/rc.cpp:121
+msgid "Date of final transaction:"
+msgstr "Data ostatniej transakcji:"
+
+#: dialogs/rc.cpp:125
+msgid "Reconciliation Wizard"
+msgstr "Asystent uzgadniania"
+
+#: dialogs/rc.cpp:127
+msgid ""
+"Reconciling your account assures, that your recordings match those of your "
+"institution and that there are no mistakes on either side. You should "
+"reconcile your account whenever you receive a statement from your "
+"institution.\n"
+"\n"
+"All relevant information necessary for this process is usually printed on "
+"your statement.\n"
+"\n"
+"On the next page you will verify, that the starting and ending balance are "
+"matching those on your statement. If not, please modify the figures."
+msgstr ""
+"Uzgadnianie konta ma na celu zapewnienie, że Twoje zapisy pasują do zapisów "
+"instytucji i że po żadnej ze stron nie wystąpiły pomyłki. Powinno się "
+"uzgadniać stan konta kiedy tylko otrzyma się wyciąg z instytucji.\n"
+"\n"
+"Wszystkie potrzebne do tego informacje są zwykle wydrukowane na wyciągu.\n"
+"\n"
+"Na kolejnej stronie zweryfikujesz, czy stan (saldo) początkowy i końcowy "
+"konta pasują do tych z wyciągu. Jeśli nie, zmień te wartości."
+
+#: dialogs/rc.cpp:129
+msgid ""
+"KMyMoney calculates your loan payments automatically. The amounts can "
+"deviate from those calculated by the creditor. Therefore, you possibly have "
+"to adjust amortization, interest and other costs according to your "
+"statement.\n"
+"\n"
+"Please enter the following information found on your statement:"
+msgstr ""
+"KMyMoney automatycznie wylicza płatności pożyczki. Wartości mogą odbiegać od "
+"tych wyliczonych przez wierzyciela. Dlatego prawdopodobnie trzeba "
+"zmodyfikować amortyzację, odsetki i inne koszta na podstawie wyciągu.\n"
+"\n"
+"Proszę wpisać następujące informacje z wyciągu:"
+
+#: dialogs/rc.cpp:130
+msgid "Ending date of statement"
+msgstr "Końcowa data wyciągu"
+
+#: dialogs/rc.cpp:131
+msgid "Starting date of statement"
+msgstr "Początkowa data wyciągu"
+
+#: dialogs/rc.cpp:132
+msgid "Verify payments"
+msgstr "Weryfikacja płatności"
+
+#: dialogs/rc.cpp:133 dialogs/rc.cpp:148 dialogs/rc.cpp:476 dialogs/rc.cpp:477
+#: dialogs/rc.cpp:508 dialogs/rc.cpp:513 dialogs/rc.cpp:518 dialogs/rc.cpp:532
+#: dialogs/rc.cpp:539 dialogs/rc.cpp:540 dialogs/rc.cpp:541 dialogs/rc.cpp:542
+#: dialogs/rc.cpp:543 dialogs/rc.cpp:552 dialogs/rc.cpp:553 dialogs/rc.cpp:554
+#: dialogs/rc.cpp:555 dialogs/rc.cpp:556 dialogs/rc.cpp:565 dialogs/rc.cpp:566
+#: dialogs/rc.cpp:567 dialogs/rc.cpp:568 dialogs/rc.cpp:569 dialogs/rc.cpp:578
+#: dialogs/rc.cpp:579 dialogs/rc.cpp:580 dialogs/rc.cpp:581 dialogs/rc.cpp:582
+#: dialogs/rc.cpp:591 dialogs/rc.cpp:592 dialogs/rc.cpp:593 dialogs/rc.cpp:594
+#: dialogs/rc.cpp:595 dialogs/rc.cpp:603 dialogs/rc.cpp:604 dialogs/rc.cpp:605
+#: dialogs/rc.cpp:606 dialogs/rc.cpp:607 dialogs/rc.cpp:618 dialogs/rc.cpp:619
+#: dialogs/rc.cpp:621 dialogs/rc.cpp:636 dialogs/rc.cpp:637 dialogs/rc.cpp:638
+#: dialogs/rc.cpp:639 dialogs/rc.cpp:640 dialogs/rc.cpp:641 dialogs/rc.cpp:651
+#: dialogs/rc.cpp:652 dialogs/rc.cpp:654 dialogs/rc.cpp:657 dialogs/rc.cpp:658
+#: dialogs/rc.cpp:659 dialogs/rc.cpp:664 dialogs/rc.cpp:665 dialogs/rc.cpp:668
+#: dialogs/rc.cpp:670 dialogs/rc.cpp:672 dialogs/rc.cpp:674 dialogs/rc.cpp:676
+#: dialogs/rc.cpp:678 dialogs/rc.cpp:681 dialogs/rc.cpp:823 widgets/rc.cpp:167
+msgid "1"
+msgstr "1"
+
+#: dialogs/rc.cpp:136
+msgid ""
+"If your statement shows different amounts, please cancel this dialog and "
+"correct the false transactions or correct the values in this dialog. In the "
+"later case, KMyMoney will create an adjustment transaction and add it to the "
+"ledger."
+msgstr ""
+"Jeżeli wyciąg pokazuje odmienne kwoty, proszę anulować to okienko i poprawić "
+"fałszywe transakcje lub skorygować wartości w okienku. W tym drugim "
+"przypadku KMyMoney stworzy transakcję regulacyjną i doda ją do księgi "
+"rachunkowej."
+
+#: dialogs/rc.cpp:138
+msgid ""
+"In order to create the adjustment transaction, KMyMoney requires an account "
+"and possibly an interest category to assign the differences to. Please "
+"select an account and - if necessary - a category."
+msgstr ""
+"Żeby stworzyć transakcję regulacyjną, KMyMoney wymaga konta i być może "
+"kategorii odsetek do przypisania różnic. Proszę wybrać konto i jeśli trzeba "
+"kategorię."
+
+#: dialogs/rc.cpp:140
+msgid "Interest-Category"
+msgstr "Kategoria odsetek"
+
+#: dialogs/rc.cpp:141
+msgid "Restarting postponed reconciliation"
+msgstr "Wznowienie przełożonego uzgadniania"
+
+#: dialogs/rc.cpp:142
+msgid ""
+"You have previously postponed the reconciliation of this account. If you "
+"have entered charges or interests the last time you started reconciling this "
+"account you can modify these in the ledger later on.\n"
+"\n"
+"It is important, that you continue with the same statement you used when you "
+"postponed the reconciliation.\n"
+"\n"
+"All information you have entered into this wizard will be shown and all "
+"transactions that you already cleared are marked with a 'C'."
+msgstr ""
+"Odroczyłeś poprzednio uzgadnianie tego konta. Jeśli wpisałeś opłaty lub "
+"odsetki ostatnim razem, kiedy rozpocząłeś uzgadnianie tego konta, możesz je "
+"później zmodyfikować w księdze rachunkowej.\n"
+"\n"
+"Ważne jest, żeby kontynuować z tym samym wyciągiem, którego użyto, kiedy "
+"odkładano uzgadnianie.\n"
+"\n"
+"Zostaną pokazane wszystkie informacje, które wpisano w tym asystencie, a "
+"wszystkie rozliczone transakcje będą oznaczone przez 'R'."
+
+#: dialogs/rc.cpp:143
+msgid "Statement Information"
+msgstr "Informacje o wyciągu"
+
+#: dialogs/rc.cpp:144 dialogs/rc.cpp:315 dialogs/rc.cpp:317 dialogs/rc.cpp:320
+#: dialogs/rc.cpp:321 dialogs/rc.cpp:329 dialogs/rc.cpp:330 dialogs/rc.cpp:333
+#: dialogs/rc.cpp:334 dialogs/rc.cpp:335 dialogs/rc.cpp:336 dialogs/rc.cpp:366
+msgid "x"
+msgstr ""
+
+#: dialogs/rc.cpp:145
+msgid "Statement date:"
+msgstr "Data wyciągu:"
+
+#: dialogs/rc.cpp:146
+msgid "Starting balance of this statement:"
+msgstr "Początkowe saldo konta dla tego wyciągu:"
+
+#: dialogs/rc.cpp:147
+msgid "Ending balance of this statement:"
+msgstr "Końcowe saldo konta dla tego wyciągu:"
+
+#: dialogs/rc.cpp:149
+msgid "Interest / Charges"
+msgstr "Odsetki/opłaty"
+
+#: dialogs/rc.cpp:150
+#, fuzzy
+msgid ""
+"If necessary, enter information about interest or charges here. KMyMoney "
+"will create transactions and clear them directly for you."
+msgstr ""
+"W razie potrzeby proszę podać informacje o odsetkach lub opłatach. KMyMoney "
+"stworzy transakcje i rozliczy je bezpośrednio."
+
+#: dialogs/rc.cpp:153
+msgid "Charges"
+msgstr "Opłaty"
+
+#: dialogs/rc.cpp:154
+#, fuzzy
+msgid "Enter Schedule"
+msgstr "Nowy harmonogram"
+
+#: dialogs/rc.cpp:155
+msgid "Schedule Details"
+msgstr "Szczegóły harmonogramu"
+
+#: dialogs/rc.cpp:156 dialogs/rc.cpp:348 dialogs/rc.cpp:389 widgets/rc.cpp:164
+msgid "Name:"
+msgstr "Nazwa:"
+
+#: dialogs/rc.cpp:157 dialogs/rc.cpp:351 widgets/rc.cpp:165
+msgid "Type:"
+msgstr "Typ:"
+
+#: dialogs/rc.cpp:168
+msgid "Enter"
+msgstr "Wprowadź"
+
+#: dialogs/rc.cpp:169
+msgid ""
+"Enter the transaction and advance the next due date of this schedule to the "
+"next payment date."
+msgstr ""
+
+#: dialogs/rc.cpp:171
+msgid ""
+"Do not enter the transaction but advance the next due date of this schedule "
+"to the next payment date."
+msgstr ""
+
+#: dialogs/rc.cpp:172
+#, fuzzy
+msgid "Ignore"
+msgstr "Powiększ"
+
+#: dialogs/rc.cpp:173
+msgid ""
+"Do not enter or skip payments for this schedule but continue with the next "
+"schedule."
+msgstr ""
+
+#: dialogs/rc.cpp:175
+msgid "Cancel processing of schedule entry."
+msgstr ""
+
+#: dialogs/rc.cpp:176
+msgid "Update Stock and Currency Prices"
+msgstr "Aktualizuj ceny walut i papierów wartościowych"
+
+#: dialogs/rc.cpp:177
+msgid "List of known Equities, and the date they were last updated on."
+msgstr "Lista znanych akcji zwykłych i data, kiedy ostatnio je zaktualizowano."
+
+#: dialogs/rc.cpp:179
+#, fuzzy
+msgid "Update All"
+msgstr "Aktualizuj &wszystko"
+
+#: dialogs/rc.cpp:180
+#, fuzzy
+msgid "Update Selected"
+msgstr "&Aktualizuj zaznaczone"
+
+#: dialogs/rc.cpp:181
+msgid "Status:"
+msgstr "Stan:"
+
+#: dialogs/rc.cpp:184
+msgid "QIF Export"
+msgstr "Eksport QIF"
+
+#: dialogs/rc.cpp:185
+msgid ""
+"From this dialog you are able to export transactions to a quicken compatible "
+"file, (known as a QIF file, because of the extension). Please enter the "
+"path to the QIF file or select it by clicking on the Browse button.\n"
+"\n"
+"You can choose the file's path, the account and the format of the QIF file "
+"(profile). Choose Account to export all the transactions between the "
+"specified dates or just categories. You can also limit the transactions "
+"that are exported by start and ending date. Once you have pressed the "
+"Export button a message box will appear when the export has completed "
+"detailing how many transactions, categories and payees were exported."
+msgstr ""
+"Okienko to służy do eksportu transakcji do pliku kompatybilnego z quicken, "
+"(znanego jako plik QIF, z powodu rozszerzenia). Należy wpisać ścieżkę do "
+"pliku QIF lub zaznaczyć go po kliknięciu na przycisk Przeglądaj.\n"
+"\n"
+"Można wybrać ścieżkę do pliku, konto i format pliku QIF (profil). Wybierz "
+"konto do eksportu wszystkich transakcji pomiędzy określonymi datami lub "
+"tylko kategorii. Można również ograniczyć eksportowane transakcje datami "
+"początku i końca. Po kliknięciu przycisku Eksport i zakończeniu eksportu "
+"pojawi się okienko dialogowe, pokazujące ile transakcji, kategorii i "
+"beneficjentów zostało wyeksportowane."
+
+#: dialogs/rc.cpp:186
+msgid "File to export to:"
+msgstr "Plik eksportu:"
+
+#: dialogs/rc.cpp:188
+msgid "Account to export"
+msgstr "Konto do eksportu"
+
+#: dialogs/rc.cpp:189 dialogs/rc.cpp:297
+msgid "QIF Profile"
+msgstr "Profil QIF"
+
+#: dialogs/rc.cpp:190 dialogs/rc.cpp:298 dialogs/rc.cpp:362
+#: widgets/kmymoneypriceview.cpp:145
+msgid "New..."
+msgstr "Nowy..."
+
+#: dialogs/rc.cpp:191
+msgid "Contents to Export"
+msgstr "Treści do wyeksportowania"
+
+#: dialogs/rc.cpp:194
+msgid "Date Range"
+msgstr "Zakres dat"
+
+#: dialogs/rc.cpp:199
+msgid "Search transactions"
+msgstr "Przeszukuj transakcje"
+
+#: dialogs/rc.cpp:200
+msgid "Criteria"
+msgstr ""
+
+#: dialogs/rc.cpp:201
+msgid "Define your search criteria"
+msgstr "Zdefiniuj kryteria wyszukiwania"
+
+#: dialogs/kfindtransactiondlg.cpp:169 dialogs/rc.cpp:202
+msgid "Text"
+msgstr "Tekst"
+
+#: dialogs/rc.cpp:203
+#, fuzzy
+msgid "Contains"
+msgstr "Podstawa kosztu"
+
+#: dialogs/rc.cpp:204
+#, fuzzy
+msgid "Does not contain"
+msgstr "Nic nie rób"
+
+#: dialogs/rc.cpp:205
+msgid "Treat text as regular expression"
+msgstr "Traktuj tekst jako wyrażenie regularne"
+
+#: dialogs/rc.cpp:206
+msgid "Case sensitive"
+msgstr "Uwzględnij wielkość znaków"
+
+#: dialogs/rc.cpp:209
+msgid "Range"
+msgstr "Zakres"
+
+#: dialogs/rc.cpp:210
+#, fuzzy
+msgid ""
+"_: To (Date)\n"
+"To"
+msgstr "Do"
+
+#: dialogs/rc.cpp:211
+#, fuzzy
+msgid ""
+"_: From (Date)\n"
+"From"
+msgstr "Od"
+
+#: dialogs/rc.cpp:213
+msgid "Search this amount"
+msgstr "Szukaj tej sumy/kwoty"
+
+#: dialogs/rc.cpp:214
+msgid "Search amount in the range"
+msgstr "Szukaj sumy/kwoty w zakresie"
+
+#: dialogs/rc.cpp:215
+#, fuzzy
+msgid ""
+"_: to (amount)\n"
+"to"
+msgstr "Do sumy"
+
+#: dialogs/rc.cpp:216
+#, fuzzy
+msgid ""
+"_: from (amount)\n"
+"from"
+msgstr "Do sumy"
+
+#: dialogs/rc.cpp:220
+msgid "Select transactions without payees"
+msgstr "Zaznacz transakcje bez beneficjentów"
+
+#: dialogs/rc.cpp:221
+msgid "Select all"
+msgstr "Zaznacz wszystko"
+
+#: dialogs/rc.cpp:222
+msgid "Select none"
+msgstr "Odznacz wszystko"
+
+#: dialogs/rc.cpp:224
+msgid "Validity"
+msgstr "Wiarygodność"
+
+#: dialogs/rc.cpp:226
+msgid "All states"
+msgstr "Wszystkie stany"
+
+#: dialogs/rc.cpp:230
+msgid "All types"
+msgstr "Wszystkie typy"
+
+#: dialogs/rc.cpp:234
+msgid "Any transaction"
+msgstr "Dowolna transakcja"
+
+#: dialogs/rc.cpp:235
+msgid "Valid transaction"
+msgstr "Ważna transakcja"
+
+#: dialogs/rc.cpp:236
+msgid "Invalid transaction"
+msgstr "Nieważna transakcja"
+
+#: dialogs/rc.cpp:237
+msgid "State"
+msgstr "Stan"
+
+#: dialogs/rc.cpp:238
+msgid "Search this number"
+msgstr "Szukaj tego numeru"
+
+#: dialogs/rc.cpp:239
+msgid "Search number in range"
+msgstr "Szukaj numeru w zakresie"
+
+#: dialogs/rc.cpp:240
+#, fuzzy
+msgid ""
+"_: to (number)\n"
+"to"
+msgstr "Typ, numer"
+
+#: dialogs/rc.cpp:241
+#, fuzzy
+msgid ""
+"_: from (number)\n"
+"from"
+msgstr "Typ, numer"
+
+#: dialogs/rc.cpp:242
+msgid "text"
+msgstr "tekst"
+
+#: dialogs/rc.cpp:243
+msgid "warning"
+msgstr ""
+
+#: dialogs/rc.cpp:244
+#, fuzzy
+msgid "Result"
+msgstr "Ustawienia domyślne"
+
+#: dialogs/rc.cpp:254
+msgid "F"
+msgstr "F"
+
+#: dialogs/rc.cpp:257 dialogs/rc.cpp:844
+msgid "&Reset"
+msgstr "P&rzywróć"
+
+#: dialogs/rc.cpp:258
+#, fuzzy
+msgid "&Find"
+msgstr "&Zakończ"
+
+#: dialogs/rc.cpp:259
+msgid "GnuCash Import Options"
+msgstr "Opcje importu GnuCash"
+
+#: dialogs/rc.cpp:260
+msgid "Use 'Help' for more information on these options"
+msgstr "Uzyj 'Pomocy', żeby znaleźć więcej informacji na temat tych opcji"
+
+#: dialogs/rc.cpp:261
+msgid "Investment Handling"
+msgstr "Obsługa inwestycji"
+
+#: dialogs/rc.cpp:262
+msgid "One investment account for each stock"
+msgstr ""
+"Osobne rachunki inwestycyjne dla każdego rodzaju papierów wartościowych"
+
+#: dialogs/rc.cpp:263
+msgid "One investment account for all stocks"
+msgstr ""
+"Jeden rachunek inwestycyjny dla wszystkich rodzajów papierów wartościowych"
+
+#: dialogs/rc.cpp:264
+msgid "Prompt for an investment account for each stock"
+msgstr ""
+"Zapytaj o rachunek inwestycyjny dla każdego rodzaju papierów wartościowych"
+
+#: dialogs/rc.cpp:265
+#, fuzzy
+msgid "Online price quotes"
+msgstr "Wyceny online"
+
+#: dialogs/rc.cpp:266
+msgid "Use Finance::Quote for share price quotes"
+msgstr ""
+
+#: dialogs/rc.cpp:267
+msgid "Scheduled Transactions"
+msgstr "Zaplanowane transakcje"
+
+#: dialogs/rc.cpp:268
+msgid "Drop suspect scheduled transactions"
+msgstr "Wyrzuć podejrzane zaplanowane transakcje"
+
+#: dialogs/rc.cpp:269
+msgid "Decoding option"
+msgstr "Opcje dekodowania"
+
+#: dialogs/rc.cpp:270
+msgid "Decode using"
+msgstr "Dekoduj przy pomocy"
+
+#: dialogs/rc.cpp:271
+#, fuzzy
+msgid "Transaction Notes option"
+msgstr "Opcje transakcji"
+
+#: dialogs/rc.cpp:272
+#, fuzzy
+msgid "Use transaction notes on non-split transactions"
+msgstr "Wstaw typ transakcji do pola numeru przy nowych transakcjach"
+
+#: dialogs/rc.cpp:273
+msgid "Debug Options"
+msgstr "Opcje diagnostyczne"
+
+#: dialogs/rc.cpp:274
+msgid "General debug data"
+msgstr "Ogólne dane diagnostyczne"
+
+#: dialogs/rc.cpp:275
+msgid "Display XML data"
+msgstr "Wyświetl dane XML"
+
+#: dialogs/rc.cpp:276
+msgid "Anonymize data"
+msgstr "Zmień dane w anonimowe"
+
+#: dialogs/rc.cpp:281
+msgid "Online Quotes - Select price source"
+msgstr "Wyceny online - wybierz źródło ceny"
+
+#: dialogs/rc.cpp:284
+msgid ""
+"This price source is not known to KMyMoney. Please select an option below."
+msgstr "To źródło ceny nie jest znane w KMyMoney. Proszę wybrać opcję poniżej."
+
+#: dialogs/rc.cpp:285
+#, fuzzy
+msgid "Do not perform online quotes for this investment"
+msgstr "&Nie dokonuj wyceny online tej inwestycji"
+
+#: dialogs/rc.cpp:286
+#, fuzzy
+msgid "Select a known KMyMoney source from the list below"
+msgstr "Wy&bierz z listy poniżej znane źródło KMyMoney"
+
+#: dialogs/rc.cpp:287
+#, fuzzy
+msgid ""
+"Use the following name for the price source.\n"
+"(Click Help for further information.)"
+msgstr ""
+"&Użyj następującej nazwy dla źródła ceny.\n"
+"(Kliknij na pomoc w celu uzyskania dalszych informacji.)"
+
+#: dialogs/rc.cpp:288
+#, fuzzy
+msgid "Always use this selection for this price source."
+msgstr "Z&awsze używaj tego wyboru dla tego źródła ceny."
+
+#: dialogs/rc.cpp:289
+msgid "QIF Import"
+msgstr "Import QIF"
+
+#: dialogs/rc.cpp:290
+msgid ""
+"From this dialog you are able to import transactions from a Quicken<b>&trade;"
+"</b> compatible file, (known as a QIF file, because of the extension).<p>\n"
+"\n"
+"Please enter the path to the QIF file or select it by clicking on the Browse "
+"button. Once you have the file's path press the Import button and KMyMoney "
+"will import all the transactions, categories and payees it finds."
+msgstr ""
+"Z tego okienka można zaimportować transakcje z pliku kompatybilnego z "
+"Quicken<b>&trade;</b> (ze względu na rozszerzenie znanego również jako plik "
+"QIF).<p>\n"
+"\n"
+"Proszę wpisać ścieżkę do pliku QIF albo przejść do niego przeglądając "
+"strukturę systemu plików. Po podaniu tej ścieżki należy wcisnąć przycisk "
+"Import, a KMyMoney zaimportuje wszystkie znalezione transakcje, kategorie i "
+"beneficjentów."
+
+#: dialogs/rc.cpp:291
+msgid "QIF File to Import:"
+msgstr "Plik importu QIF:"
+
+#: dialogs/rc.cpp:292
+msgid "Import options"
+msgstr "Opcje importu"
+
+#: dialogs/rc.cpp:293
+#, fuzzy
+msgid "Bank statement"
+msgstr "Wyciąg:"
+
+#: dialogs/rc.cpp:294
+#, fuzzy
+msgid "Other application"
+msgstr "Obliczenie odsetek"
+
+#: dialogs/rc.cpp:295
+msgid ""
+"Select <b>Bank statement</b> turns on automatic category matching which is "
+"turned off in case of <b>Historic data</b>. Use the latter if you import "
+"files from other Personal Finance Management software."
+msgstr ""
+
+#: dialogs/rc.cpp:296
+#, fuzzy
+msgid "Source of QIF"
+msgstr "Źródło"
+
+#: dialogs/rc.cpp:302
+msgid "Verify Import"
+msgstr "Weryfikacja importu"
+
+#: dialogs/rc.cpp:304
+#, fuzzy
+msgid "Ok"
+msgstr "&Ok"
+
+#: dialogs/rc.cpp:306
+#, fuzzy
+msgid "MyDialog"
+msgstr "Okienko CSV"
+
+#: dialogs/rc.cpp:310
+#, fuzzy
+msgid "File Information"
+msgstr "Informacje o beneficjencie"
+
+#: dialogs/rc.cpp:316
+#, fuzzy
+msgid "Last modified on"
+msgstr "Ostatni miesiąc"
+
+#: dialogs/rc.cpp:319
+#, fuzzy
+msgid "Base currency"
+msgstr "Nowa waluta"
+
+#: dialogs/rc.cpp:322
+#, fuzzy
+msgid "Created on"
+msgstr "&Stwórz"
+
+#: dialogs/rc.cpp:325
+#, fuzzy
+msgid "Accounts/Categories"
+msgstr "Kategorie"
+
+#: dialogs/rc.cpp:328
+#, fuzzy
+msgid "Closed"
+msgstr "&Zamknij"
+
+#: dialogs/rc.cpp:331
+#, fuzzy
+msgid "Prices"
+msgstr "Cena"
+
+#: dialogs/rc.cpp:337
+#, fuzzy
+msgid "Splits"
+msgstr "Podział"
+
+#: dialogs/rc.cpp:338
+msgid "Price Editor"
+msgstr "Edytor ceny"
+
+#: dialogs/rc.cpp:339
+msgid "Show all stored prices"
+msgstr "Pokaż wszystkie przechowywane ceny"
+
+#: dialogs/rc.cpp:343
+#, fuzzy
+msgid "Delete Range..."
+msgstr "Usuń zak&res..."
+
+#: dialogs/rc.cpp:346
+msgid "New Account Dialog"
+msgstr "Okno nowego konta"
+
+#: dialogs/rc.cpp:349
+#, fuzzy
+msgid "Opening information"
+msgstr "Informacje o płatności"
+
+#: dialogs/rc.cpp:350
+msgid "Currency:"
+msgstr "Waluta:"
+
+#: dialogs/rc.cpp:352 dialogs/rc.cpp:793
+msgid "Date:"
+msgstr "Data:"
+
+#: dialogs/rc.cpp:353
+#, fuzzy
+msgid "Balance:"
+msgstr "Saldo: "
+
+#: dialogs/rc.cpp:355
+#, fuzzy
+msgid "Last check number:"
+msgstr "Automatycznie zwiększaj numer rachunku"
+
+#: dialogs/rc.cpp:356
+msgid "Notes:"
+msgstr "Adnotacje:"
+
+#: dialogs/rc.cpp:357
+msgid "No auto-VAT-assignment"
+msgstr "Brak automatycznego przypisania VAT"
+
+#: dialogs/rc.cpp:358 dialogs/rc.cpp:441
+#, fuzzy
+msgid "Price entry"
+msgstr "Nowa pozycja ceny"
+
+#: dialogs/rc.cpp:359
+msgid "Preferred Account"
+msgstr "Preferowane konto"
+
+#: dialogs/rc.cpp:363
+msgid "Number:"
+msgstr "Numer:"
+
+#: dialogs/rc.cpp:364 dialogs/rc.cpp:395
+msgid "BIC"
+msgstr ""
+
+#: dialogs/rc.cpp:367
+#, fuzzy
+msgid "Hierarchy"
+msgstr "Szukaj"
+
+#: dialogs/rc.cpp:368
+msgid "Subaccount"
+msgstr "Podkonto"
+
+#: dialogs/rc.cpp:369
+#, fuzzy
+msgid "Limits"
+msgstr "cyfry"
+
+#: dialogs/rc.cpp:370
+msgid ""
+"This page allows to setup certain limits. KMyMoney will warn you when the "
+"account balance reaches a limit."
+msgstr ""
+
+#: dialogs/rc.cpp:372
+#, fuzzy
+msgid "Absolute limit"
+msgstr "Separator konta"
+
+#: dialogs/rc.cpp:373
+msgid "Maximum credit limit"
+msgstr ""
+
+#: dialogs/rc.cpp:374
+#, fuzzy
+msgid "Minimum balance"
+msgstr "Saldo końcowe"
+
+#: dialogs/rc.cpp:375
+msgid "Early warning"
+msgstr ""
+
+#: dialogs/rc.cpp:377
+msgid "VAT details"
+msgstr "Szczegóły VAT"
+
+#: dialogs/rc.cpp:378
+msgid "VAT category"
+msgstr "Kategoria VAT"
+
+#: dialogs/rc.cpp:379
+msgid "VAT percentage"
+msgstr "Procent VAT"
+
+#: dialogs/rc.cpp:380
+msgid "Enable auto VAT assignment"
+msgstr "Włącz automatyczne przypisanie VAT"
+
+#: dialogs/rc.cpp:381
+msgid "Amount entered"
+msgstr "Wpisano kwotę"
+
+#: dialogs/rc.cpp:382
+msgid "Gross amount"
+msgstr "Kwota brutto"
+
+#: dialogs/rc.cpp:383
+msgid "Net amount"
+msgstr "Kwota netto"
+
+#: dialogs/rc.cpp:384
+msgid "Include on Tax Reports"
+msgstr "Dołącz do raportów podatkowych"
+
+#: dialogs/rc.cpp:387
+msgid "New Institution Dialog"
+msgstr "Okno nowej instytucji"
+
+#: dialogs/rc.cpp:388
+msgid "Institution Details"
+msgstr "Szczegóły instytucji"
+
+#: dialogs/rc.cpp:390
+msgid "City:"
+msgstr "Miasto:"
+
+#: dialogs/rc.cpp:394
+msgid "Routing Number:"
+msgstr "Identyfikator banku/oddziału:"
+
+#: dialogs/rc.cpp:398
+#, fuzzy
+msgid "New Budget"
+msgstr "Budżety"
+
+#: dialogs/rc.cpp:403
+msgid "New Equity"
+msgstr "Nowy kapitał"
+
+#: dialogs/rc.cpp:406 dialogs/rc.cpp:407
+msgid "Trading Symbol of the stock or mutual fund, not required."
+msgstr "Symbol handlowy akcji lub funduszu inwestycyjnego, niewymagany."
+
+#: dialogs/rc.cpp:414 dialogs/rc.cpp:415
+msgid "Name of the company, or mutual fund."
+msgstr "Nazwa firmy lub funduszu inwestycyjnego."
+
+#: dialogs/rc.cpp:418
+msgid "New File Dialog"
+msgstr "Okno dialogowe nowego pliku"
+
+#: dialogs/rc.cpp:419
+msgid ""
+"Use this dialog to enter personal information about yourself.\n"
+"\n"
+"All information is optional and is provided to personalize\n"
+"your KMyMoney file."
+msgstr ""
+"Użyj tego okna, żeby dodać informacje osobiste o sobie.\n"
+"\n"
+"Wszystkie informacje są opcjonalne i używane do spersonalizowania\n"
+"Twojego pliku KMyMoney."
+
+#: dialogs/rc.cpp:430
+msgid "New Investment wizard"
+msgstr "Asystent nowej inwestycji"
+
+#: dialogs/rc.cpp:431
+msgid "Investment Type"
+msgstr "Typ inwestycji"
+
+#: dialogs/rc.cpp:432
+#, fuzzy
+msgid "This wizard allows you to create a new investment."
+msgstr "Proszę wybrać konto nadrzędne."
+
+#: dialogs/rc.cpp:433
+#, fuzzy
+msgid ""
+"The first step in this process requires to select the type of investment. "
+"The following steps collect more details about the investment from you."
+msgstr ""
+"Asystent pozwalający na stworzenie nowej inwestycji.\n"
+"\n"
+"Pierwszym wymaganym krokiem tego procesu jest wybór typu inwestycji. Kolejne "
+"kroki służą zebraniu od użytkownika większej ilości szczegółów na jej temat."
+
+#: dialogs/rc.cpp:434
+msgid "Type of investment"
+msgstr "Typ inwestycji"
+
+#: dialogs/rc.cpp:438
+msgid "Investment details"
+msgstr "Szczegóły inwestycji"
+
+#: dialogs/rc.cpp:439
+msgid ""
+"Enter the details below and click <b>Next</b> to continue entering the "
+"online update details."
+msgstr ""
+"Wpisz poniżej szczegóły i kliknij na <b>Dalej</b>, żeby kontynuować "
+"wpisywanie szczegółów aktualizacji online."
+
+#: dialogs/rc.cpp:442 dialogs/rc.cpp:728
+msgid "Fraction"
+msgstr "Ułamek"
+
+#: dialogs/rc.cpp:443
+msgid "Trading Currency"
+msgstr "Waluta handlowa"
+
+#: dialogs/rc.cpp:444
+msgid "Full name"
+msgstr "Pełna nazwa"
+
+#: dialogs/rc.cpp:445
+msgid "AMEX"
+msgstr "AMEX"
+
+#: dialogs/rc.cpp:446
+msgid "EUREX"
+msgstr "EUREX"
+
+#: dialogs/rc.cpp:447
+msgid "FUND"
+msgstr "FUND"
+
+#: dialogs/rc.cpp:448
+msgid "NASDAQ"
+msgstr "NASDAQ"
+
+#: dialogs/rc.cpp:449
+msgid "NYSE"
+msgstr "NYSE"
+
+#: dialogs/rc.cpp:450
+msgid "XETRA"
+msgstr "XETRA"
+
+#: dialogs/rc.cpp:451
+msgid "Trading symbol"
+msgstr "Symbol handlowy"
+
+#: dialogs/rc.cpp:452
+msgid "Identification"
+msgstr "Identyfikacja"
+
+#: dialogs/rc.cpp:453
+#, fuzzy
+msgid "Enter the ticker symbol (e.g. RHAT)."
+msgstr "Podaj kod tickera, np. RHAT."
+
+#: dialogs/rc.cpp:454
+msgid "Enter the CUSIP/ISIN/WKN identification number here"
+msgstr "Wpisz tutaj numer identyfikacyjny CUSIP/ISIN/WKN"
+
+#: dialogs/rc.cpp:455
+msgid "Trading market"
+msgstr "Giełda handlowa"
+
+#: dialogs/rc.cpp:456
+msgid "Online Update"
+msgstr "Aktualizacja online"
+
+#: dialogs/rc.cpp:457
+msgid ""
+"Select an online source and click <b>Finish</b> to store the investment "
+"data. If you don't want to use online updates, just leave the data as is."
+msgstr ""
+"Wybierz źródło online i kliknij na <b>Zakończ</b>, żeby zachować dane "
+"inwestycji. Jeśli nie chcesz używać aktualizacji online, pozostaw dane "
+"niezmienione."
+
+#: dialogs/rc.cpp:458
+msgid "Use Finance::Quote"
+msgstr ""
+
+#: dialogs/rc.cpp:460
+msgid "Factor"
+msgstr "Współczynnik"
+
+#: dialogs/rc.cpp:461
+msgid "New Loan Wizard"
+msgstr "Asystent nowej pożyczki"
+
+#: dialogs/rc.cpp:462
+msgid "New Loan Account Wizard"
+msgstr "Asystent nowego rachunku kredytowego"
+
+#: dialogs/rc.cpp:463
+msgid ""
+"\n"
+"Welcome to the New Loan Account Wizard which will guide you through the "
+"creation of a new loan e.g. for your home, your car or any other loan that "
+"you pay or gain interest for.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Witamy w asystencie nowego konta pożyczki. Poprowadzi on przez proces "
+"tworzenia nowej pożyczki, np. na dom, samochód albo dowolną inną pożyczkę, "
+"którą spłacasz lub [gain interest for].\n"
+"\n"
+"Trzeba się upewnić, że odpowiednie informacje znajdują się pod ręką. Zwykle "
+"można je znaleźć na umowie i ostatnim wyciągu."
+
+#: dialogs/rc.cpp:464
+msgid "Edit Loan Account Wizard"
+msgstr "Asystent edycji rachunku kredytowego"
+
+#: dialogs/rc.cpp:465
+msgid ""
+"\n"
+"Welcome to the Edit Loan Account Wizard. Please use this wizard to modify "
+"information about your loan account.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Witamy w asystencie edycji konta pożyczki. Należy go użyć w wypadku "
+"modyfikacji informacji związanych z tego typu rachunkiem.\n"
+"\n"
+"Trzeba się upewnić, że odpowiednie informacje znajdują się pod ręką. Zwykle "
+"można je znaleźć na umowie i ostatnim wyciągu."
+
+#: dialogs/rc.cpp:467
+msgid ""
+"\n"
+"In the first step, KMyMoney will ask you some general information about the "
+"loan account to be created."
+msgstr ""
+"\n"
+"W pierwszym kroku KMyMoney poprosi o ogólne informacje dotyczące tworzonego "
+"konta kredytowego."
+
+#: dialogs/rc.cpp:468 dialogs/rc.cpp:522 dialogs/rc.cpp:610
+msgid "1. General Information"
+msgstr "1. Informacje ogólne"
+
+#: dialogs/rc.cpp:469
+msgid ""
+"\n"
+"2. Calculate Loan\n"
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"2. Obliczenie pożyczki\n"
+"\n"
+"3. Płatności"
+
+#: dialogs/rc.cpp:470
+msgid "Edit selection"
+msgstr "Edycja zaznaczenia"
+
+#: dialogs/rc.cpp:471
+msgid ""
+"\n"
+"Please select, which data of the loan you want to modify."
+msgstr ""
+"\n"
+"Proszę wybrać, które dane pożyczki chce się zmodyfikować."
+
+#: dialogs/rc.cpp:472
+msgid "Modify the interest rate"
+msgstr "Zmień stopę procentową"
+
+#: dialogs/rc.cpp:473
+msgid "Modify additional fees"
+msgstr "Zmień dodatkowe opłaty"
+
+#: dialogs/rc.cpp:474
+msgid "Modify other loan information"
+msgstr "Zmień inne informacje o pożyczce"
+
+#: dialogs/rc.cpp:475
+msgid "Effective date"
+msgstr "Data efektywna"
+
+#: dialogs/rc.cpp:478
+msgid "When should the changes become active?"
+msgstr "Kiedy zmiany mają się uaktywnić?"
+
+#: dialogs/rc.cpp:479
+msgid "Lending or borrowing money"
+msgstr "Pożyczanie pieniędzy komuś, czy od kogoś"
+
+#: dialogs/rc.cpp:480
+msgid ""
+"\n"
+"Do you borrow or lend money?"
+msgstr ""
+"\n"
+"Pożyczasz pieniądze komuś, czy od kogoś?"
+
+#: dialogs/rc.cpp:483
+msgid "Name of the loan"
+msgstr "Nazwa pożyczki"
+
+#: dialogs/rc.cpp:484
+msgid ""
+"\n"
+"How do you want to call this loan? Examples for names are 'car loan', "
+"'school loan', 'home owner loan'."
+msgstr ""
+"\n"
+"Jak chcesz nazwać tę pożyczkę? Przykładami nazw są 'kredyt na samochód', "
+"'pożyczka szkolna', 'kredyt właściciela lokalu'."
+
+#: dialogs/rc.cpp:486
+msgid "TextLabel6"
+msgstr "TextLabel6"
+
+#: dialogs/rc.cpp:487
+msgid "TextLabel7"
+msgstr "TextLabel7"
+
+#: dialogs/rc.cpp:488
+msgid "Type of interest"
+msgstr "Typ oprocentowania"
+
+#: dialogs/rc.cpp:489
+msgid ""
+"\n"
+"Is the interest of this loan fixed over a period of time or is it adapted "
+"from time to time? If the interest rate changes during the amortization "
+"phase of the loan you should choose the option 'variable interest rate'."
+msgstr ""
+"\n"
+"Czy odsetki tej pożyczki są stałe w okresie jej spłaty, czy zmieniają się od "
+"czasu do czasu? Jeśli stopa procentowa podlega zmianom podczas fazy "
+"amortyzacji, należy wybrać opcję 'zmienna stopa procentowa'."
+
+#: dialogs/rc.cpp:490
+msgid "Fixed interest rate"
+msgstr "Stała stopa procentowa"
+
+#: dialogs/rc.cpp:491
+msgid "Variable interest rate"
+msgstr "Zmienna stopa procentowa"
+
+#: dialogs/rc.cpp:492
+msgid "Payments?"
+msgstr "Płatności?"
+
+#: dialogs/rc.cpp:493
+msgid ""
+"\n"
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?"
+msgstr ""
+"\n"
+"Czy były jakiekolwiek płatności tej pożyczki, niezależnie od tego, czy "
+"wprowadzono je do KMyMoney, czy też nie?"
+
+#: dialogs/rc.cpp:494
+msgid "No, no payments were made yet."
+msgstr "Nie, jeszcze nie dokonywano płatności."
+
+#: dialogs/rc.cpp:495
+msgid "Yes, payments were made."
+msgstr "Tak, dokonywano płatności."
+
+#: dialogs/rc.cpp:496
+msgid ""
+"Note: Payments made to obtain the loan (e.g. Dissagio) are not considered as "
+"payments in this context."
+msgstr ""
+"Uwaga: płatności dokonywane po to, żeby uzyskać pożyczkę (np. disaggio), nie "
+"są traktowane w tym kontekście jako płatności."
+
+#: dialogs/rc.cpp:497
+msgid "Recording payments?"
+msgstr "Nagrywanie płatności?"
+
+#: dialogs/rc.cpp:498
+msgid ""
+"\n"
+"Do you want to record all payments of this loan with KMyMoney?"
+msgstr ""
+"\n"
+"Czy KMyMoney ma zapamiętywać wszystkie płatności tej pożyczki?"
+
+#: dialogs/rc.cpp:499
+msgid "Yes, record all payments."
+msgstr "Tak, zapamiętuj płatności."
+
+#: dialogs/rc.cpp:500
+msgid "No, only record payments since the beginning of this year."
+msgstr "Nie, zapamiętuj płatności tylko od początku tego roku."
+
+#: dialogs/rc.cpp:501
+msgid "Date of next interest change"
+msgstr "Data kolejnej zmiany oprocentowania"
+
+#: dialogs/rc.cpp:502
+msgid ""
+"\n"
+"Select the date when the interest rate for this loan will be modified and "
+"the frequency of the future changes."
+msgstr ""
+"\n"
+"Wybierz datę, kiedy zmieni się stopa procentowa tej pożyczki i częstość "
+"kolejnych zmian."
+
+#: dialogs/rc.cpp:503
+msgid "Next interest change on"
+msgstr "Kolejna zmiana oprocentowania"
+
+#: dialogs/rc.cpp:504
+msgid "Time until next change"
+msgstr "Czas do kolejnej zmiany"
+
+#: dialogs/rc.cpp:506 dialogs/rc.cpp:571
+msgid ""
+"\n"
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"\n"
+"Proszę wpisać kwotę płaconą na kapitał i odsetki albo zostawić pole puste, "
+"żeby je wyliczyć."
+
+#: dialogs/rc.cpp:507
+msgid "Current amount"
+msgstr "Bieżąca suma/kwota"
+
+#: dialogs/rc.cpp:510
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the amount for principal and interest then enter "
+"it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"KMyMoney wylicza albo nową stopę procentową, albo kwoty kapitału głównego i "
+"odsetek. Jeśli znasz powyższe kwoty, wpisz je tutaj.\n"
+"\n"
+"Jeśli natomiast KMyMoney ma je wyliczyć za Ciebie, pozostaw puste pole."
+
+#: dialogs/rc.cpp:512 dialogs/rc.cpp:545
+msgid ""
+"\n"
+"Please enter the interest rate or leave the field empty to calculate it."
+msgstr ""
+"\n"
+"Proszę wpisać stopę procentową albo pozostawić pole puste, żeby ją wyliczyć."
+
+#: dialogs/rc.cpp:514
+msgid "Current rate"
+msgstr "Bieżąca stopa"
+
+#: dialogs/rc.cpp:516
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the interest rate then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"KMyMoney wylicza albo nową stopę procentową, albo kwotę kapitału głównego i "
+"odsetek. Jeśli znasz stopę procentową, wpisz ją tutaj.\n"
+"\n"
+"W wypadku, gdy KMyMoney powinien ją wyliczyć za Ciebie, pozostaw to pole "
+"puste."
+
+#: dialogs/rc.cpp:517
+msgid "Date of first payment"
+msgstr "Data pierwszej płatności"
+
+#: dialogs/rc.cpp:520
+msgid "Calculate Loan"
+msgstr "Oblicz pożyczkę"
+
+#: dialogs/rc.cpp:521
+msgid ""
+"\n"
+"You have successfully entered the general information about your loan. Next, "
+"KMyMoney needs some information about the calculation of the loan."
+msgstr ""
+"\n"
+"Pomyślnie ukończono etap zbierania ogólnych informacji dotyczących pożyczki. "
+"Teraz KMyMoney potrzebuje informacji związanych z obliczaniem pożyczki."
+
+#: dialogs/rc.cpp:523 dialogs/rc.cpp:611
+msgid ""
+"\n"
+"2. Calculate Loan"
+msgstr ""
+"\n"
+"2. Obliczenie pożyczki"
+
+#: dialogs/rc.cpp:524 dialogs/rc.cpp:612
+msgid ""
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"3. Płatności"
+
+#: dialogs/rc.cpp:526
+msgid ""
+"\n"
+"How often will there be payments made to this loan?"
+msgstr ""
+"\n"
+"Jak często będą odbywać się spłaty pożyczki?"
+
+#: dialogs/rc.cpp:527
+msgid "Interest calculation"
+msgstr "Obliczenie odsetek"
+
+#: dialogs/rc.cpp:528
+msgid ""
+"\n"
+"When does the actual interest rate get calculated?"
+msgstr ""
+"\n"
+"Kiedy jest obliczana rzeczywista stopa procentowa?"
+
+#: dialogs/rc.cpp:529
+msgid "When the payment is received."
+msgstr "Kiedy otrzymuje się płatność."
+
+#: dialogs/rc.cpp:530
+msgid "When the payment is due."
+msgstr "W terminie płatności."
+
+#: dialogs/rc.cpp:534 dialogs/rc.cpp:547 dialogs/rc.cpp:560 dialogs/rc.cpp:573
+#: dialogs/rc.cpp:586 dialogs/rc.cpp:598 dialogs/rc.cpp:679
+msgid "Loan amount:"
+msgstr "Kwota pożyczki:"
+
+#: dialogs/rc.cpp:535 dialogs/rc.cpp:548 dialogs/rc.cpp:561 dialogs/rc.cpp:574
+#: dialogs/rc.cpp:587 dialogs/rc.cpp:599 dialogs/rc.cpp:633 dialogs/rc.cpp:671
+msgid "Interest rate:"
+msgstr "Stopa procentowa:"
+
+#: dialogs/rc.cpp:536 dialogs/rc.cpp:549 dialogs/rc.cpp:562 dialogs/rc.cpp:575
+#: dialogs/rc.cpp:588 dialogs/rc.cpp:600 dialogs/rc.cpp:669
+msgid "Term:"
+msgstr "Termin:"
+
+#: dialogs/rc.cpp:537 dialogs/rc.cpp:550 dialogs/rc.cpp:563 dialogs/rc.cpp:576
+#: dialogs/rc.cpp:589 dialogs/rc.cpp:601 dialogs/rc.cpp:622 dialogs/rc.cpp:630
+#: dialogs/rc.cpp:677
+msgid "Principal + Interest:"
+msgstr "Kapitał + odsetki:"
+
+#: dialogs/rc.cpp:538 dialogs/rc.cpp:551 dialogs/rc.cpp:564 dialogs/rc.cpp:577
+#: dialogs/rc.cpp:583 dialogs/rc.cpp:585 dialogs/rc.cpp:590 dialogs/rc.cpp:602
+msgid "Final amortization payment"
+msgstr "Ostatnia płatność amortyzacji"
+
+#: dialogs/rc.cpp:557
+msgid "Duration"
+msgstr "Czas trwania"
+
+#: dialogs/rc.cpp:558
+msgid ""
+"\n"
+"Please enter the term of this loan or leave the field empty to calculate it. "
+"The term is the time that is required to fully repay the loan. This time "
+"might be different from the time your loan contract is signed for."
+msgstr ""
+"\n"
+"Proszę wpisać okres ważności tej pożyczki lub pozostawić pole puste, żeby je "
+"wyliczyć. Okres ważności to czas, wymagany na pełną spłatę pożyczki. Może on "
+"się różnić od okresu, na który podpisano umowę kredytu lub pożyczki."
+
+#: dialogs/rc.cpp:584
+msgid ""
+"\n"
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"\n"
+"Proszę wpisać kwotę ostatniej płatności amortyzacji albo pozostawić pole "
+"puste dla automatycznego wyliczenia."
+
+#: dialogs/rc.cpp:596
+msgid "Calculation Overview"
+msgstr "Przegląd kalkulacji"
+
+#: dialogs/rc.cpp:597
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown in the overview below. You can "
+"accept these values by selecting \"Next\" or change them by choosing \"Back"
+"\" to return to the input field for the information you want to change."
+msgstr ""
+"\n"
+"KMyMoney wyliczył pożyczkę jak pokazano w podglądzie poniżej. Można "
+"zaakceptować te wartości wybierając \"Dalej\" albo zmienić je klikając na "
+"\"Cofnij\", żeby wrócić do pól wymagających skorygowania."
+
+#: dialogs/rc.cpp:609
+msgid ""
+"\n"
+"In the following steps, KMyMoney supports you in setting up categories and "
+"schedules for your loan payments."
+msgstr ""
+"\n"
+"W kolejnych krokach KMyMoney pomaga ustawić kategorie i harmonogramy spłat "
+"pożyczki."
+
+#: dialogs/rc.cpp:614
+msgid ""
+"\n"
+"Please select the category you want to assign the interest payments to or "
+"create a new category."
+msgstr ""
+"\n"
+"Proszę wybrać kategorię, do której chce się przypisać spłaty odsetek albo "
+"stworzyć nową."
+
+#: dialogs/rc.cpp:615
+msgid "Additional Fees"
+msgstr "Dodatkowe opłaty"
+
+#: dialogs/rc.cpp:616
+msgid ""
+"\n"
+"If your regular payment contains any additional fees, click on the button "
+"\"Additional fees\" to enter them."
+msgstr ""
+"\n"
+"Jeśli regularna płatność zawiera jakiekolwiek dodatkowe opłaty, kliknij na "
+"przycisk \"Dodatkowe opłaty\" żeby je wprowadzić."
+
+#: dialogs/rc.cpp:617
+msgid "= periodical payment:"
+msgstr "= płatność okresowa:"
+
+#: dialogs/rc.cpp:623
+msgid ""
+"If no additional fees are included in your periodical payment or you have "
+"entered all such fees, then click on \"Next\"."
+msgstr ""
+"Jeśli w okresowych płatnościach nie są dołączone dodatkowe opłaty albo "
+"wszystkie już zostały wpisane, kliknij na \"Dalej\"."
+
+#: dialogs/rc.cpp:625
+msgid ""
+"KMyMoney will create a schedule for this payment and reminds you whenever a "
+"payment must be made.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"KMyMoney utworzy harmonogram płatności i przypomni, kiedy będą musiały być "
+"dokonywane.<p>\n"
+"Jeśli wybrano zapamiętywanie wszystkich płatności, data ta już została "
+"dostarczona. Jeśli wybrano zapamiętywanie tylko płatności z tego roku, wtedy "
+"<b>Pierwszy termin płatności</b> jest datą pierwszej płatności dokonanej w "
+"tym roku."
+
+#: dialogs/rc.cpp:626
+msgid "First payment due on:"
+msgstr "Pierwsza płatność planowana na:"
+
+#: dialogs/rc.cpp:627
+msgid "Make payment from/to:"
+msgstr "Stwórz płatność z/na:"
+
+#: dialogs/rc.cpp:629
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown below. If you want to accept these "
+"values use the \"Finish\" button to update your account, otherwise use the "
+"\"Back\" button to modify your settings."
+msgstr ""
+"\n"
+"KMyMoney wyliczył pożyczkę, zgodnie z poniższymi danymi. Jeśli chcesz "
+"zaakceptować te wartości, użyj przycisku \"Zakończ\", żeby zaktualizować "
+"konto, w przeciwnym wypadku użyj przycisku \"Cofnij\", żeby zmodyfikować "
+"ustawienia."
+
+#: dialogs/rc.cpp:631
+msgid "Additional fees:"
+msgstr "Dodatkowe opłaty:"
+
+#: dialogs/rc.cpp:632
+msgid "Total payment:"
+msgstr "Całkowita płatność:"
+
+#: dialogs/rc.cpp:634
+msgid "Valid from:"
+msgstr "Ważny od:"
+
+#: dialogs/rc.cpp:635
+msgid "Affected payments:"
+msgstr "Płatności, na które oddziałuje:"
+
+#: dialogs/rc.cpp:645
+msgid "Press this to create a new asset account"
+msgstr "Wciśnij, żeby stworzyć nowy rachunek aktywów"
+
+#: dialogs/rc.cpp:648
+msgid ""
+"\n"
+"This page summarizes the data you entered. If you need to modify anything, "
+"please use the \"Back\" button to go to respective page. Otherwise use the "
+"\"Finish\" button to create the account."
+msgstr ""
+"\n"
+"Strona ta podsumowuje wpisane dane. Jeśli trzeba coś zmodyfikować, należy w "
+"tym celu użyć przycisku \"Wstecz\", żeby przejść do odpowiedniej strony. W "
+"przeciwnym wypadku należy użyć przycisku \"Zakończ\", żeby stworzyć konto."
+
+#: dialogs/rc.cpp:650
+msgid "Payee:"
+msgstr "Beneficjent:"
+
+#: dialogs/rc.cpp:653
+msgid "First payment:"
+msgstr "Pierwsza płatność:"
+
+#: dialogs/rc.cpp:655
+msgid "Amount is:"
+msgstr "Suma/kwota:"
+
+#: dialogs/rc.cpp:656
+msgid "Loan calculation"
+msgstr "Obliczanie pożyczki"
+
+#: dialogs/rc.cpp:660
+msgid "Periodic Payment:"
+msgstr "Okresowa płatność:"
+
+#: dialogs/rc.cpp:661
+msgid "Additional Fees:"
+msgstr "Dodatkowe opłaty:"
+
+#: dialogs/rc.cpp:662
+msgid "Interest category:"
+msgstr "Kategoria oprocentowania:"
+
+#: dialogs/rc.cpp:663
+msgid "Payment from:"
+msgstr "Płatność z:"
+
+#: dialogs/rc.cpp:666
+msgid "Next due date:"
+msgstr "Następny termin płatności:"
+
+#: dialogs/rc.cpp:673
+msgid "Final Payment:"
+msgstr "Końcowa płatność:"
+
+#: dialogs/rc.cpp:675
+msgid "Interest is due:"
+msgstr "Data naliczania odsetek:"
+
+#: dialogs/rc.cpp:680
+msgid "Payment frequency:"
+msgstr "Częstotliwość płatności:"
+
+#: dialogs/rc.cpp:682
+msgid "Online Quote Configuration"
+msgstr "Konfiguracja wyceny online"
+
+#: dialogs/rc.cpp:687
+msgid "Perl Location:"
+msgstr "Położenie Perla:"
+
+#: dialogs/rc.cpp:688
+msgid "Script:"
+msgstr "Skrypt:"
+
+#: dialogs/rc.cpp:690
+msgid "Reassign payees"
+msgstr ""
+
+#: dialogs/rc.cpp:691
+msgid ""
+"The transactions associated with the selected payees need to be re-assigned "
+"to a different payee before the selected payees can be deleted. Please "
+"select a payee from the list below."
+msgstr ""
+
+#: dialogs/rc.cpp:692
+msgid "Available payees:"
+msgstr ""
+
+#: dialogs/rc.cpp:693
+msgid "Assign deleted names to the above selected payee's matching list"
+msgstr ""
+
+#: dialogs/rc.cpp:696
+#, fuzzy
+msgid "PluginDlg"
+msgstr "&Wtyczki"
+
+#: dialogs/rc.cpp:697
+#, fuzzy
+msgid "PlugIn"
+msgstr "&Wtyczki"
+
+#: dialogs/rc.cpp:698 widgets/transaction.cpp:1071
+#: widgets/transaction.cpp:1658
+#, fuzzy
+msgid "Status"
+msgstr "Stan:"
+
+#: dialogs/rc.cpp:699
+#, fuzzy
+msgid "Feature"
+msgstr "&Stwórz"
+
+#: dialogs/rc.cpp:703
+msgid "Reconciliation Dialog"
+msgstr "Okno uzgadniania"
+
+#: dialogs/rc.cpp:704
+msgid ""
+"This dialog will assist in helping you to balance your account.\n"
+"\n"
+"Click on an appropriate transaction within one of the two list views to mark "
+"it as reconciled. To create a transaction or edit\n"
+"a transaction you can return to the register by clicking on the Edit "
+"Transactions button.\n"
+"\n"
+"Your account is balanced when the Difference is Zero. Click on the Finish "
+"button to save the reconciled transactions."
+msgstr ""
+"Okno to pomoże w zbilansowaniu konta.\n"
+"\n"
+"Kliknij na odpowiedniej transakcji z jednej lub drugiej listy, żeby oznaczyć "
+"ją jako uzgodnioną. Żeby stworzyć transakcję\n"
+"lub ją edytować można powrócić do rejestru klikając na przycisk Edytuj "
+"transakcję.\n"
+"\n"
+"Konto jest zbilansowane kiedy Różnica wynosi zero. Kliknij na przycisk "
+"Zakończ, żeby zapisać uzgodnione transakcje."
+
+#: dialogs/rc.cpp:705
+msgid "Withdrawals"
+msgstr "Wypłaty"
+
+#: dialogs/rc.cpp:707 dialogs/rc.cpp:708 dialogs/rc.cpp:822
+msgid "$"
+msgstr "$"
+
+#: dialogs/rc.cpp:710
+msgid "Previous Balance:"
+msgstr "Poprzednie saldo:"
+
+#: dialogs/rc.cpp:711 dialogs/rc.cpp:713 dialogs/rc.cpp:715 dialogs/rc.cpp:717
+#: dialogs/rc.cpp:820
+msgid "0"
+msgstr "0"
+
+#: dialogs/rc.cpp:712
+msgid "Ending Balance:"
+msgstr "Końcowe saldo:"
+
+#: dialogs/rc.cpp:714
+msgid "Cleared Balance:"
+msgstr "Rozliczone saldo:"
+
+#: dialogs/rc.cpp:716
+msgid "Difference:"
+msgstr "Różnica:"
+
+#: dialogs/rc.cpp:718
+#, fuzzy
+msgid "Edit Transactions..."
+msgstr "&Edycja transakcji..."
+
+#: dialogs/rc.cpp:721
+msgid "Security List Editor"
+msgstr "Edycja listy papierów wartościowych"
+
+#: dialogs/rc.cpp:726
+msgid "Market"
+msgstr "Giełda"
+
+#: dialogs/rc.cpp:729
+msgid "Cash Fraction"
+msgstr "Ułamek pieniężny"
+
+#: dialogs/rc.cpp:730
+#, fuzzy
+msgid "Add..."
+msgstr "&Dodaj..."
+
+#: dialogs/rc.cpp:732 widgets/kmymoneypriceview.cpp:157
+#, fuzzy
+msgid "Delete..."
+msgstr "Usuń..."
+
+#: dialogs/rc.cpp:733
+msgid "Show national currencies"
+msgstr "Pokaż waluty narodowe"
+
+#: dialogs/rc.cpp:735
+msgid "KMyMoney - Select Database"
+msgstr ""
+
+#: dialogs/rc.cpp:736
+msgid "CAUTION!"
+msgstr ""
+
+#: dialogs/rc.cpp:737
+msgid ""
+"<font color=\"#ff2727\">This software is still in an experimental stage, and "
+"there are still some known response time problems. Please be patient; we are "
+"working on them.\n"
+"As always, please make sure you have adequate backups of your data.</font>"
+msgstr ""
+
+#: dialogs/rc.cpp:738
+#, fuzzy
+msgid "Database Type"
+msgstr "Typ kategorii"
+
+#: dialogs/rc.cpp:739
+#, fuzzy
+msgid "Database Name"
+msgstr "Zakres dat"
+
+#: dialogs/rc.cpp:740
+#, fuzzy
+msgid "Host Name"
+msgstr "Nazwa raportu"
+
+#: dialogs/rc.cpp:741
+#, fuzzy
+msgid "User Name"
+msgstr "Nazwa użytkownika"
+
+#: dialogs/rc.cpp:743
+#, fuzzy
+msgid "Preload &all data"
+msgstr "Dane osobiste..."
+
+#: dialogs/rc.cpp:745
+#, fuzzy
+msgid "&Generate SQL"
+msgstr "Ogólne"
+
+#: dialogs/rc.cpp:747
+msgid "Ca&ncel"
+msgstr ""
+
+#: dialogs/rc.cpp:762 widgets/rc.cpp:172
+#, fuzzy
+msgid "Sort options"
+msgstr "Opcje importu"
+
+#: dialogs/rc.cpp:763
+#, fuzzy
+msgid "Use default"
+msgstr "Własne użytkownika"
+
+#: dialogs/rc.cpp:767
+msgid "Correct splits"
+msgstr "Popraw podziały"
+
+#: dialogs/rc.cpp:769
+msgid "How do you want to proceed?"
+msgstr ""
+
+#: dialogs/rc.cpp:770
+#, fuzzy
+msgid "Continue to edit splits"
+msgstr "Kontynuuj &edycję podziałów"
+
+#: dialogs/rc.cpp:771
+#, fuzzy, c-format
+msgid "Change total amount of transaction to %1."
+msgstr "&Zmień całkowitą kwotę transakcji na %1."
+
+#: dialogs/rc.cpp:772
+#, fuzzy
+msgid "Distribute difference of %1 among all splits."
+msgstr "Ro&zdziel różnicę %1 pomiędzy wszystkie podziały."
+
+#: dialogs/rc.cpp:773
+#, fuzzy
+msgid "Leave %1 unassigned."
+msgstr "&Pozostaw %1 nieprzydzielony."
+
+#: dialogs/rc.cpp:776
+msgid "Split transaction"
+msgstr "Podziel transakcję"
+
+#: dialogs/rc.cpp:777
+msgid "<b>11,00<b>"
+msgstr "<b>11,00<b>"
+
+#: dialogs/rc.cpp:778
+msgid "<b>111,00<b>"
+msgstr "<b>111,00<b>"
+
+#: dialogs/rc.cpp:779
+msgid "Unassigned"
+msgstr "Nieprzydzielone"
+
+#: dialogs/rc.cpp:780
+msgid "Sum of splits"
+msgstr "Suma podziałów"
+
+#: dialogs/rc.cpp:781
+msgid "100,00"
+msgstr "100,00"
+
+#: dialogs/rc.cpp:782
+msgid "Transaction amount"
+msgstr "Kwota transakcji"
+
+#: dialogs/rc.cpp:783
+#, fuzzy
+msgid "Merge"
+msgstr "Więcej"
+
+#: dialogs/rc.cpp:784
+msgid "Merges splits with the same category to one split"
+msgstr ""
+
+#: dialogs/rc.cpp:785
+msgid ""
+"In case you have multiple split entries to the same category and you like to "
+"keep them as a single split, press this button. The amount for identical "
+"categories will be added and stored in a single split for that category."
+msgstr ""
+
+#: dialogs/rc.cpp:786
+#, fuzzy
+msgid "Clear &Zero"
+msgstr "Rozliczony"
+
+#: dialogs/rc.cpp:787
+msgid "Removes all splits that have a value of zero."
+msgstr ""
+
+#: dialogs/rc.cpp:791
+msgid "New price entry"
+msgstr "Nowa pozycja ceny"
+
+#: dialogs/rc.cpp:799
+msgid "Void mark"
+msgstr "Znacznik nieważności"
+
+#: dialogs/rc.cpp:800
+msgid "Opening Balance text"
+msgstr "Tekst stanu otwarcia"
+
+#: dialogs/rc.cpp:801
+msgid "Type field text"
+msgstr "Wpisz tekst pozycji"
+
+#: dialogs/rc.cpp:802
+msgid "Account delimiter"
+msgstr "Separator konta"
+
+#: dialogs/rc.cpp:804
+#, fuzzy
+msgid "Attempt to match similar transactions"
+msgstr "Próba dopasowania podobnych transakcji"
+
+#: dialogs/rc.cpp:806 dialogs/rc.cpp:808
+msgid "The format of the dates in the QIF file."
+msgstr "Format dat w pliku QIF."
+
+#: dialogs/rc.cpp:809 dialogs/rc.cpp:811
+msgid ""
+"If a QIF file contains date entries with years represented with two digits "
+"then either an apostrophe or a slash may be used to delimit the year in the "
+"dates for certain centuries. This enables 1905 to be distinguished from "
+"2005. Specify here which range of years will have year delimited by an "
+"apostrophe (eg. for Quicken this is usually 1900-1949)."
+msgstr ""
+"Jeśli plik QIF zawiera wpisy dat z latami reprezentowanymi przez dwie cyfry, "
+"wtedy do oddzielenia lat w datach poszczególnych wieków może być użyty "
+"apostrof lub ukośnik. Pozwala to odróżnić rok 1905 od 2005. Należy tu "
+"określić, który zakres lat będzie miał rok oddzielony apostrofem (np. dla "
+"Quickena to zwykle 1900-1949)."
+
+#: dialogs/rc.cpp:810
+msgid "Apostrophe Handling"
+msgstr "Obsługa apostrofów"
+
+#: dialogs/rc.cpp:812
+msgid "Amounts"
+msgstr "Sumy/kwoty"
+
+#: dialogs/rc.cpp:813
+msgid "Field"
+msgstr "Pole"
+
+#: dialogs/rc.cpp:814
+msgid "QIF-Record"
+msgstr "Rekord QIF"
+
+#: dialogs/rc.cpp:815 dialogs/rc.cpp:833
+msgid "Decimal Symbol"
+msgstr "Symbol dziesiętny"
+
+#: dialogs/rc.cpp:816
+msgid "Thousand Delimiter"
+msgstr "Separator tysięcy"
+
+#: dialogs/rc.cpp:817
+msgid "SortColumnInvisible"
+msgstr "SortColumnInvisible"
+
+#: dialogs/rc.cpp:819
+msgid "T"
+msgstr "T"
+
+#: dialogs/rc.cpp:821
+msgid "Split-Value"
+msgstr "Wartość podziału"
+
+#: dialogs/rc.cpp:824
+msgid "Commission"
+msgstr "Prowizja"
+
+#: dialogs/rc.cpp:825
+msgid "O"
+msgstr "O"
+
+#: dialogs/rc.cpp:826
+msgid "2"
+msgstr "2"
+
+#: dialogs/rc.cpp:828
+msgid "I"
+msgstr "I"
+
+#: dialogs/rc.cpp:829
+msgid "3"
+msgstr "3"
+
+#: dialogs/rc.cpp:831
+msgid "Q"
+msgstr "Q"
+
+#: dialogs/rc.cpp:832
+msgid "4"
+msgstr "4"
+
+#: dialogs/rc.cpp:834
+msgid "Thousands Separator"
+msgstr "Separator tysięcy"
+
+#: dialogs/rc.cpp:836
+msgid "Output filter location"
+msgstr "Położenie filtra wyjściowego"
+
+#: dialogs/rc.cpp:837
+msgid "Input filter file type"
+msgstr "Typ pliku filtra wejściowego"
+
+#: dialogs/rc.cpp:838
+msgid "*.qif"
+msgstr "*.qif"
+
+#: dialogs/rc.cpp:839
+msgid "Input filter location"
+msgstr "Położenie filtra wejściowego"
+
+#: dialogs/rc.cpp:843
+#, fuzzy
+msgid "Rename"
+msgstr "&Zmień nazwę"
+
+#: dialogs/kselecttransactionsdlg.cpp:44
+#, fuzzy
+msgid "Select Transaction"
+msgstr "Podziel transakcję"
+
+#: dialogs/kselecttransactionsdlg.cpp:45
+msgid ""
+"Select a transaction and press the OK button or use Cancel to select none."
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:62
+msgid "Investment detail wizard"
+msgstr "Asystent szczegółów inwestycji"
+
+#: dialogs/knewinvestmentwizard.cpp:82
+msgid "Security detail wizard"
+msgstr "Asystent szczegółów papierów wartościowych"
+
+#: dialogs/knewaccountdlg.cpp:121 dialogs/knewinvestmentwizard.cpp:109
+msgid ""
+"_: default price mode\n"
+"<default>"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:122 dialogs/knewinvestmentwizard.cpp:110
+#, fuzzy
+msgid "Price per share"
+msgstr "Cena za udział"
+
+#: dialogs/knewaccountdlg.cpp:123 dialogs/knewinvestmentwizard.cpp:111
+msgid "Total for all shares"
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:129
+#, fuzzy
+msgid "This wizard allows you to modify the selected investment."
+msgstr "Proszę wybrać konto nadrzędne."
+
+#: dialogs/knewinvestmentwizard.cpp:132
+#, fuzzy
+msgid "This wizard allows you to modify the selected security."
+msgstr "Proszę wybrać konto nadrzędne."
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid ""
+"The selected symbol is already on file. Do you want to reuse the existing "
+"security?"
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:186
+#, fuzzy
+msgid "Security found"
+msgstr "Nie znaleziono papieru wartościowego"
+
+#: dialogs/knewinvestmentwizard.cpp:309
+msgid "Unable to create all objects for the investment"
+msgstr ""
+
+#: dialogs/keditequityentrydlg.cpp:78
+msgid "Change the price information of the selected entry."
+msgstr "Zmień informacje o cenie dla wybranej pozycji."
+
+#: dialogs/kaccountselectdlg.cpp:64 widgets/kmymoneybriefschedule.cpp:59
+msgid "&Skip"
+msgstr "P&omiń"
+
+#: dialogs/kaccountselectdlg.cpp:66 widgets/kmymoneybriefschedule.cpp:61
+msgid "Skip this transaction"
+msgstr "Pomiń tę transakcję"
+
+#: dialogs/kaccountselectdlg.cpp:67
+msgid ""
+"Use this to skip importing this transaction and proceed with the next one."
+msgstr "Użyj, żeby pominąć importowanie tej transakcji i przejść do kolejnej."
+
+#: dialogs/kaccountselectdlg.cpp:72
+msgid "Create a new account/category"
+msgstr "Stwórz nowe konto/kategorię"
+
+#: dialogs/kaccountselectdlg.cpp:73
+msgid "Use this to add a new account/category to the file"
+msgstr "Użyj w celu dodania do pliku nowego konta/kategorii"
+
+#: dialogs/kaccountselectdlg.cpp:77
+msgid "&Abort"
+msgstr "Po&rzuć"
+
+#: dialogs/kaccountselectdlg.cpp:79
+msgid "Abort the import operation and dismiss all changes"
+msgstr "Porzuć operację importu i odrzuć wszystkie zmiany"
+
+#: dialogs/kaccountselectdlg.cpp:80
+msgid ""
+"Use this to abort the import. Your financial data will be in the state "
+"before you started the QIF import."
+msgstr ""
+"Użyj, żeby porzucić import. Dane finansowe będą w stanie jak sprzed "
+"rozpoczęcia importu QIF."
+
+#: dialogs/knewaccountdlg.cpp:110
+msgid "Is a sub account"
+msgstr "Jest podkontem"
+
+#: dialogs/knewaccountdlg.cpp:184
+#, fuzzy
+msgid "VAT account"
+msgstr "Konto"
+
+#: dialogs/knewaccountdlg.cpp:474
+msgid ""
+"You have not specified a name.\n"
+"Please fill in this field."
+msgstr ""
+"Nie określono nazwy.\n"
+"Proszę wypełnić te pole."
+
+#: dialogs/knewaccountdlg.cpp:482
+msgid "Please select a parent account."
+msgstr "Proszę wybrać konto nadrzędne."
+
+#: dialogs/knewaccountdlg.cpp:489 dialogs/knewaccountdlg.cpp:1029
+msgid "<No Institution>"
+msgstr "<Bez instytucji>"
+
+#: dialogs/knewaccountdlg.cpp:552
+msgid ""
+"An account named <b>%1</b> already exists. You cannot create a second "
+"account with the same name."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:567
+msgid ""
+"A category named <b>%1</b> already exists. You cannot create a second "
+"category with the same name."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid ""
+"You have selected to suppress the display of unused categories in the "
+"KMyMoney configuration dialog. The category you just created will therefore "
+"only be shown if it is used. Otherwise, it will be hidden in the accounts/"
+"categories view."
+msgstr ""
+"Wybrano opcję ukrywania nieużywanych kategorii w oknie konfiguracyjnym "
+"KMyMoney. W związku z powyższym kategoria, którą właśnie utworzyłeś, będzie "
+"pokazywana tylko wtedy, kiedy zostanie użyta. W przeciwnym wypadku będzie "
+"ukrywana w widoku kont i kategorii."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid "Hidden categories"
+msgstr "Ukryte kategorie"
+
+#: dialogs/knewaccountdlg.cpp:927 dialogs/knewaccountdlg.cpp:979
+#, c-format
+msgid "Is a sub account of %1"
+msgstr "Jest podkontem %1"
+
+#: dialogs/knewaccountdlg.cpp:1082
+msgid "Cannot add institution"
+msgstr "Nie można dodać instytucji"
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid ""
+"This dialog does not allow to create new payees. Please pick a payee from "
+"the list."
+msgstr ""
+
+#: dialogs/kpayeereassigndlg.cpp:75
+#, fuzzy
+msgid "Payee creation"
+msgstr "Informacje o beneficjencie"
+
+#: dialogs/kimportdlg.cpp:69
+msgid "Use this to start the import operation"
+msgstr "Użyj, żeby rozpocząć importowanie"
+
+#: dialogs/kimportdlg.cpp:110
+#, fuzzy
+msgid ""
+"%1|Import files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Pliki XML\n"
+"%2|Wszystkie pliki (*.*)"
+
+#: dialogs/kimportdlg.cpp:111
+#, fuzzy
+msgid "Import File..."
+msgstr "Importowanie pliku..."
+
+#: dialogs/knewloanwizard.cpp:124
+msgid "Create a new category"
+msgstr "Utwórz nową kategorię"
+
+#: dialogs/knewloanwizard.cpp:125
+msgid "Use this to open the new account editor"
+msgstr "Użyj w celu otwarcia edytora nowego konta"
+
+#: dialogs/knewloanwizard.cpp:129
+msgid "&Additional fees..."
+msgstr "Dodatkowe &opłaty..."
+
+#: dialogs/knewloanwizard.cpp:131
+msgid "Enter additional fees"
+msgstr "Wprowadź dodatkowe opłaty"
+
+#: dialogs/knewloanwizard.cpp:132
+msgid ""
+"Use this to add any additional fees other than principal and interest "
+"contained in your periodical payments."
+msgstr ""
+"Użyj, żeby dodać pozostałe opłaty nie będące odsetkami ani kapitałem "
+"głównym, zawarte w okresowych płatnościach."
+
+#: dialogs/knewloanwizard.cpp:139
+msgid ""
+"Use this to create a new account to which the initial payment should be made"
+msgstr ""
+"Użyj, żeby stworzyć nowe konto, na które powinny się dokonywać płatności "
+"początkowe"
+
+#: dialogs/knewloanwizard.cpp:208
+msgid "To whom do you make payments?"
+msgstr "Na czyją rzecz dokonujesz płatności?"
+
+#: dialogs/knewloanwizard.cpp:209
+msgid "Payments to"
+msgstr "Płatności dla"
+
+#: dialogs/knewloanwizard.cpp:214
+msgid "From whom do you expect payments?"
+msgstr "Od kogo oczekujesz płatności?"
+
+#: dialogs/knewloanwizard.cpp:215
+msgid "Payments from"
+msgstr "Płatności od"
+
+#: dialogs/knewloanwizard.cpp:233
+msgid "Please enter the date, the first payment for this loan was/is due."
+msgstr ""
+"Proszę wprowadzić datę, kiedy pierwsza spłata pożyczki miała lub będzie "
+"miała miejsce."
+
+#: dialogs/knewloanwizard.cpp:235
+msgid ""
+"Note: Consult the loan contract for details of the first due date. Keep in "
+"mind, that the first due date usually differs from the date the contract was "
+"signed"
+msgstr ""
+"Uwaga: sprawdź w umowie kredytu lub pożyczki szczegóły pierwszego terminu "
+"płatności. Należy zwrócić uwagę na fakt, że zwykle różni się ona od daty "
+"podpisania umowy."
+
+#: dialogs/knewloanwizard.cpp:240
+msgid ""
+"Please enter the original loan amount in the field below or leave it empty "
+"to be calculated."
+msgstr ""
+"Proszę w polu poniżej wprowadzić oryginalną sumę pożyczki albo zostawić "
+"puste, żeby wyliczyła się automatycznie."
+
+#: dialogs/knewloanwizard.cpp:248
+msgid ""
+"Please enter the date, the first payment for this loan was/is due this year."
+msgstr ""
+"Proszę wprowadzić datę, kiedy pierwsza spłata pożyczki w tym roku miała lub "
+"będzie miała miejsce."
+
+#: dialogs/knewloanwizard.cpp:250
+msgid ""
+"Note: You can easily figure out the date of the first payment if you consult "
+"the last statement of last year."
+msgstr ""
+"Uwaga: Można łatwo odkryć datę pierwszej płatności na podstawie ostatniego "
+"wyciągu zeszłego roku."
+
+#: dialogs/knewloanwizard.cpp:254
+msgid ""
+"Please enter the remaining loan amount of last years final statement in the "
+"field below. You should not leave this field empty."
+msgstr ""
+"Proszę wpisać pozostałą sumę pożyczki końcowego wyciągu ostatniego roku w "
+"poniższym polu. Nie należy pozostawiać tego pola pustego."
+
+#: dialogs/knewloanwizard.cpp:311 dialogs/knewloanwizard.cpp:326
+#: dialogs/knewloanwizard.cpp:341 dialogs/knewloanwizard.cpp:357
+#: dialogs/knewloanwizard.cpp:373
+msgid "calculate"
+msgstr "oblicz"
+
+#: dialogs/knewloanwizard.cpp:417
+msgid "borrowed"
+msgstr "pożyczone od"
+
+#: dialogs/knewloanwizard.cpp:419
+msgid "lend"
+msgstr "pożyczone komuś"
+
+#: dialogs/knewloanwizard.cpp:423
+msgid "not assigned"
+msgstr "nieprzypisane"
+
+#: dialogs/knewloanwizard.cpp:430
+msgid "on reception"
+msgstr "przy odbiorze"
+
+#: dialogs/knewloanwizard.cpp:432
+msgid "on due date"
+msgstr "przy terminie płatności"
+
+#: dialogs/knewloanwizard.cpp:471
+msgid ""
+"The loan wizard is unable to calculate two different values for your loan at "
+"the same time. Please enter a value for the %1 on this page or backup to the "
+"page where the current value to be calculated is defined and fill in a "
+"value."
+msgstr ""
+"Asystent pożyczki nie jest w stanie obliczyć dwóch różnych wartości pożyczki "
+"w tym samym czasie. Proszę wpisać na tej stronie wartość %1 albo wrócić na "
+"stronę, gdzie definiuje się bieżącą wartość do wyliczenia i wpisać tę "
+"wartość."
+
+#: dialogs/knewloanwizard.cpp:500
+msgid ""
+"You selected, that payments have already been made towards this loan. This "
+"requires you to enter the loan amount exactly as found on your last "
+"statement."
+msgstr ""
+"Zaznaczyłeś, że dokonywano już płatności na rzecz tego kredytu lub pożyczki. "
+"Wymaga to podania sumy pożyczki dokładnie takiej, jaka widnieje na ostatnim "
+"wyciągu."
+
+#: dialogs/knewloanwizard.cpp:513
+msgid "interest rate"
+msgstr "stopa procentowa"
+
+#: dialogs/knewloanwizard.cpp:522
+msgid "term"
+msgstr "termin"
+
+#: dialogs/knewloanwizard.cpp:532
+msgid "principal and interest"
+msgstr "kapitał główny i odsetki"
+
+#: dialogs/knewloanwizard.cpp:743
+#, c-format
+msgid ""
+"The number of payments has been decremented and the final payment has been "
+"modified to %1."
+msgstr ""
+"Liczba płatności została zmniejszona a końcowa płatność zmieniona na %1."
+
+#: dialogs/knewloanwizard.cpp:751 dialogs/knewloanwizard.cpp:771
+#, c-format
+msgid "The final payment has been modified to %1."
+msgstr "Ostatnia płatność została zmieniona na %1."
+
+#: dialogs/knewloanwizard.cpp:802
+msgid "KMyMoney has calculated a final payment of %1 for this loan."
+msgstr "KMyMoney wyliczył końcową płatność %1 dla tej pożyczki."
+
+#: dialogs/knewloanwizard.cpp:817
+msgid ""
+"You have entered mis-matching information. Please backup to the appropriate "
+"page and update your figures or leave one value empty to let KMyMoney "
+"calculate it for you"
+msgstr ""
+"Wpisano niepasujące do siebie informacje. Proszę się cofnąć do odpowiedniej "
+"strony i zaktualizować liczby albo pozostawić jedną z wartości pustą, żeby "
+"KMyMoney wyliczył ją automatycznie."
+
+#: dialogs/kfindtransactiondlg.cpp:230
+msgid ""
+"Warning: Filtering by Category will exclude all transfers from the results."
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:239
+msgid "(None)"
+msgstr "(Brak)"
+
+#: dialogs/kfindtransactiondlg.cpp:241
+msgid "Current selections: "
+msgstr "Bieżące zaznaczenia: "
+
+#: dialogs/kfindtransactiondlg.cpp:716
+msgid "Found %1 matching transactions (D %2 / P %3 = %4)"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:719
+#, fuzzy
+msgid "Found %1 matching transactions"
+msgstr "Podziel transakcję"
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "The institution name field is empty. Please enter the name."
+msgstr "Nazwa instytucji jest pusta. Proszę podać nazwę."
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "Adding New Institution"
+msgstr "Dodawanie nowej instytucji"
+
+#: dialogs/kcsvprogressdlg.cpp:69
+msgid "C&lose"
+msgstr "&Zamknij"
+
+#: dialogs/kcsvprogressdlg.cpp:247
+msgid " of "
+msgstr " z "
+
+#: widgets/kmymoneypriceview.cpp:126
+msgid "Commodity"
+msgstr "Towar"
+
+#: widgets/kmymoneypriceview.cpp:130
+msgid "Source"
+msgstr "Źródło"
+
+#: widgets/kmymoneypriceview.cpp:143
+msgid "Price Options"
+msgstr "Opcje cen"
+
+#: widgets/kmymoneypriceview.cpp:153
+#, fuzzy
+msgid "Online Price Update..."
+msgstr "Aktualizacja cen online..."
+
+#: widgets/kmymoneycombo.cpp:472 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+msgid "From"
+msgstr "Od"
+
+#: widgets/transaction.cpp:668
+#, fuzzy
+msgid "Transaction is missing a category assignment."
+msgstr "Transakcje wg kategorii"
+
+#: widgets/transaction.cpp:671
+msgid "The transaction has a missing assignment of <b>%1</b>."
+msgstr ""
+
+#: widgets/transaction.cpp:874
+msgid "Sell"
+msgstr "Sprzedaj"
+
+#: widgets/transaction.cpp:876
+msgid "Buy"
+msgstr "Kup"
+
+#: widgets/kmymoneycombo.cpp:520 widgets/transaction.cpp:879
+#: widgets/transaction.cpp:1447
+msgid "Dividend"
+msgstr "Dywidenda"
+
+#: widgets/kmymoneycombo.cpp:518 widgets/transaction.cpp:881
+#: widgets/transaction.cpp:1453
+msgid "Yield"
+msgstr "Zysk"
+
+#: widgets/transaction.cpp:886 widgets/transaction.cpp:1473
+msgid "Activity"
+msgstr "Aktywność"
+
+#: widgets/transaction.cpp:887
+#, fuzzy
+msgid "Investment transaction"
+msgstr "Transakcje inwestycyjne"
+
+#: widgets/transaction.cpp:1021 widgets/transaction.cpp:1114
+#: widgets/transaction.cpp:1165
+msgid "*** UNASSIGNED ***"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:517 widgets/transaction.cpp:1435
+#, fuzzy
+msgid "Add shares"
+msgstr "Dodaj udziały"
+
+#: widgets/kmymoneycombo.cpp:516 widgets/transaction.cpp:1438
+#, fuzzy
+msgid "Remove shares"
+msgstr "Usuń udziały"
+
+#: widgets/kmymoneycombo.cpp:522 widgets/transaction.cpp:1441
+#, fuzzy
+msgid "Buy shares"
+msgstr "Kup udziały"
+
+#: widgets/kmymoneycombo.cpp:521 widgets/transaction.cpp:1444
+#, fuzzy
+msgid "Sell shares"
+msgstr "Sprzedaj udziały"
+
+#: widgets/transaction.cpp:1450
+msgid "Reinvest Dividend"
+msgstr "Zainwestuj dywidendę"
+
+#: widgets/kmymoneycombo.cpp:515 widgets/transaction.cpp:1456
+#, fuzzy
+msgid "Split shares"
+msgstr "Sprzedaj udziały"
+
+#: widgets/transaction.cpp:1515
+#, fuzzy
+msgid "Ratio"
+msgstr "Ułamek"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:241
+msgid "%1 Bills."
+msgstr "%1 opłat."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:257
+msgid "%1 Deposits."
+msgstr "%1 wpłat."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:273
+msgid "%1 Transfers."
+msgstr "%1 przelewów."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:355
+msgid ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+msgstr ".-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-."
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:57
+#: widgets/kmymoneyaccounttreeforecast.cpp:84
+#, fuzzy
+msgid "Current"
+msgstr "Waluta"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:72
+#: widgets/kmymoneyaccounttreeforecast.cpp:93
+#, fuzzy
+msgid "Total variation"
+msgstr "Weryfikacja importu"
+
+#: widgets/stdtransactionmatched.cpp:130
+msgid ""
+"KMyMoney has matched a downloaded transaction with a manually entered one "
+"(result above)"
+msgstr ""
+
+#: widgets/stdtransactionmatched.cpp:138
+#, fuzzy
+msgid "Bank entry:"
+msgstr "Pusty dokument"
+
+#: widgets/stdtransactionmatched.cpp:166
+#, fuzzy
+msgid "Your entry:"
+msgstr "Twoje imię:"
+
+#: widgets/kbudgetvalues.cpp:187
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a monthly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:187 widgets/kbudgetvalues.cpp:206
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"_: Auto assignment (caption)\n"
+"Auto assignment"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:206
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a yearly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"You have entered budget values using a different base which would result in "
+"an individual monthly budget of <b>%1</b>. Should this value be used to fill "
+"the monthly budgets?"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:62
+#, fuzzy
+msgid "Use this button to skip this transaction"
+msgstr "Użyj tego przycisku, żeby zapisać tę transakcję"
+
+#: widgets/kmymoneybriefschedule.cpp:67
+msgid "Record this transaction into the register"
+msgstr "Zapisz transakcję w rejestrze"
+
+#: widgets/kmymoneybriefschedule.cpp:68
+msgid "Use this button to record this transaction"
+msgstr "Użyj tego przycisku, żeby zapisać tę transakcję"
+
+#: widgets/kmymoneybriefschedule.cpp:96
+msgid "%1 of %2"
+msgstr "%1 z %2"
+
+#: widgets/kmymoneybriefschedule.cpp:109
+msgid "Payment on %1 for %2 with %3 transactions remaining occuring %4."
+msgstr "Płatność %1 dla %2 z %3 pozostałymi transakcjami występującymi %4."
+
+#: widgets/kmymoneybriefschedule.cpp:115
+msgid "Payment on %1 for %2 occuring %4."
+msgstr "Płatność %1 dla %2 występująca %4."
+
+#: widgets/kmymoneybriefschedule.cpp:136
+msgid "%1 days overdue (%2 occurences)."
+msgstr "Zaległe %1 dni (%2 wystąpień)"
+
+#: widgets/register.cpp:55
+msgid "Post date"
+msgstr "Data wykonania"
+
+#: widgets/register.cpp:56
+#, fuzzy
+msgid "Date entered"
+msgstr "Wpisano kwotę"
+
+#: widgets/register.cpp:60
+#, fuzzy
+msgid "Entry order"
+msgstr "Data zapisu"
+
+#: widgets/register.cpp:63
+#, fuzzy
+msgid "Reconcile state"
+msgstr "Uzgodnione"
+
+#: widgets/register.cpp:440
+#, fuzzy
+msgid ""
+"_: Deposits onto account\n"
+"Deposits"
+msgstr "konto przeciwstawne"
+
+#: widgets/register.cpp:442
+#, fuzzy
+msgid ""
+"_: Payments towards credit card\n"
+"Payments"
+msgstr "Metoda płatności"
+
+#: widgets/register.cpp:446
+#, fuzzy
+msgid ""
+"_: Payments made from account\n"
+"Payments"
+msgstr ""
+"Płatności powinny być dokonywane\n"
+"z konta"
+
+#: widgets/register.cpp:448
+#, fuzzy
+msgid ""
+"_: Payments made with credit card\n"
+"Charges"
+msgstr "Metoda płatności"
+
+#: widgets/register.cpp:736
+#, fuzzy
+msgid ""
+"_: Payment made from account\n"
+"Payment"
+msgstr ""
+"Płatności powinny być dokonywane\n"
+"z konta"
+
+#: widgets/register.cpp:737
+#, fuzzy
+msgid ""
+"_: Deposit into account\n"
+"Deposit"
+msgstr "konto przeciwstawne"
+
+#: widgets/register.cpp:813
+#, fuzzy
+msgid ""
+"_: Payment made with credit card\n"
+"Charge"
+msgstr "Metoda płatności"
+
+#: widgets/register.cpp:814
+#, fuzzy
+msgid ""
+"_: Payment towards credit card\n"
+"Payment"
+msgstr "Metoda płatności"
+
+#: widgets/register.cpp:818 widgets/register.cpp:824
+msgid ""
+"_: Decrease of asset/liability value\n"
+"Decrease"
+msgstr ""
+
+#: widgets/register.cpp:819 widgets/register.cpp:823
+msgid ""
+"_: Increase of asset/liability value\n"
+"Increase"
+msgstr ""
+
+#: widgets/register.cpp:2280
+#, fuzzy
+msgid "Prior transactions possibly filtered"
+msgstr "Przeszukuj transakcje"
+
+#: widgets/register.cpp:2284
+#, fuzzy
+msgid "Last reconciliation"
+msgstr "Przełóż uzgadnianie"
+
+#: widgets/register.cpp:2291
+#, fuzzy, c-format
+msgid "Online Statement Balance: %1"
+msgstr "Wyciąg: %1"
+
+#: widgets/register.cpp:2295
+#, fuzzy
+msgid "This year"
+msgstr "Dwa razy do roku"
+
+#: widgets/kmymoneycombo.cpp:674 widgets/register.cpp:2296
+msgid "Last month"
+msgstr "Ostatni miesiąc"
+
+#: widgets/register.cpp:2297
+#, fuzzy
+msgid "This month"
+msgstr "Ostatni miesiąc"
+
+#: widgets/register.cpp:2298
+#, fuzzy
+msgid "Last week"
+msgstr "Ostatni rok"
+
+#: widgets/register.cpp:2299
+msgid "This week"
+msgstr ""
+
+#: widgets/register.cpp:2300
+msgid "Yesterday"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:666 widgets/register.cpp:2301
+msgid "Today"
+msgstr ""
+
+#: widgets/register.cpp:2302 widgets/register.cpp:2307
+#, fuzzy
+msgid "Future transactions"
+msgstr "Napraw transakcje"
+
+#: widgets/register.cpp:2303
+#, fuzzy
+msgid "Next week"
+msgstr "Ostatni rok"
+
+#: widgets/kmymoneycalendar.cpp:131 widgets/register.cpp:2304
+msgid "Next month"
+msgstr "Następny miesiąc"
+
+#: widgets/kmymoneycombo.cpp:670 widgets/register.cpp:2315
+#, fuzzy
+msgid "Current fiscal year"
+msgstr "Bieżący rok"
+
+#: widgets/register.cpp:2316
+#, fuzzy
+msgid "Previous fiscal year"
+msgstr "Poprzedni rok"
+
+#: widgets/register.cpp:2317
+#, fuzzy
+msgid "Next fiscal year"
+msgstr "Ostatni rok"
+
+#: widgets/register.cpp:2349
+#, fuzzy
+msgid ""
+"_: Unknown payee\n"
+"Unknown"
+msgstr "Nieznany beneficjent"
+
+#: widgets/register.cpp:2368
+#, fuzzy
+msgid ""
+"_: Unknown category\n"
+"Unknown"
+msgstr "Nieznany beneficjent"
+
+#: widgets/register.cpp:2387
+#, fuzzy
+msgid ""
+"_: Unknown security\n"
+"Unknown"
+msgstr "Nieznane konto"
+
+#: widgets/klistviewsearchline.cpp:249
+#, fuzzy
+msgid "Search Columns"
+msgstr "Pokaż kolumny"
+
+#: widgets/klistviewsearchline.cpp:251
+msgid "All Visible Columns"
+msgstr ""
+
+#: widgets/klistviewsearchline.cpp:266
+msgid ""
+"_: Column number %1\n"
+"Column No. %1"
+msgstr ""
+
+#: widgets/klistviewsearchline.cpp:461 widgets/registersearchline.cpp:286
+#, fuzzy
+msgid "S&earch:"
+msgstr "Szukaj"
+
+#: widgets/kmymoneyaccountselector.cpp:110
+#: widgets/kmymoneyaccountselector.cpp:371
+msgid "Income categories"
+msgstr "Kategorie dochodów"
+
+#: widgets/kmymoneyaccountselector.cpp:349
+#: widgets/kmymoneyaccountselector.cpp:350
+#, fuzzy
+msgid "Favorites"
+msgstr "Ulubione raporty"
+
+#: widgets/kmymoneyaccountselector.cpp:357
+msgid "Asset accounts"
+msgstr "Rachunki aktywów"
+
+#: widgets/kmymoneyaccountselector.cpp:364
+msgid "Liability accounts"
+msgstr "Rachunki pasywów"
+
+#: widgets/kmymoneyaccountselector.cpp:381
+msgid "Expense categories"
+msgstr "Kategorie wydatków"
+
+#: widgets/kmymoneyaccountselector.cpp:391
+#, fuzzy
+msgid "Equity accounts"
+msgstr "Edytuj konto"
+
+#: widgets/kmymoneyaccounttreebase.cpp:120
+#, fuzzy
+msgid "Total Balance"
+msgstr "Saldo"
+
+#: widgets/kmymoneyaccounttreebase.cpp:124
+#, fuzzy
+msgid "Total Value"
+msgstr "Wartość netto"
+
+#: widgets/registersearchline.cpp:75
+msgid ""
+"_: label for status combo\n"
+"Stat&us"
+msgstr ""
+
+#: widgets/registersearchline.cpp:79
+#, fuzzy
+msgid "Any status"
+msgstr "Wszystkie stany"
+
+#: widgets/registersearchline.cpp:80
+#, fuzzy
+msgid "Imported"
+msgstr "&Import"
+
+#: widgets/registersearchline.cpp:81
+#, fuzzy
+msgid "Matched"
+msgstr "Łatki"
+
+#: widgets/registersearchline.cpp:82
+msgid "Erroneous"
+msgstr ""
+
+#: widgets/registersearchline.cpp:83
+#, fuzzy
+msgid "Not marked"
+msgstr "Nierozliczony"
+
+#: widgets/kmymoneyaccounttree.cpp:54
+msgid ""
+"_: Column heading for category in tax report\n"
+"Tax"
+msgstr ""
+
+#: widgets/kmymoneyaccounttree.cpp:58
+msgid ""
+"_: Column heading for VAT category\n"
+"VAT"
+msgstr ""
+
+#: widgets/kmymoneywizard.cpp:101
+#, fuzzy
+msgid "Continue with next page"
+msgstr "Kontynuuj &edycję podziałów"
+
+#: widgets/kmymoneywizard.cpp:103
+#, fuzzy
+msgid "Finish wizard"
+msgstr "Marka fińska"
+
+#: widgets/kmymoneywizard.cpp:121
+#, fuzzy
+msgid "&Back"
+msgstr "Kopia zapasowa"
+
+#: widgets/kmymoneywizard.cpp:122
+#, fuzzy
+msgid "&Next"
+msgstr "&Nowy"
+
+#: widgets/kmymoneywizard.cpp:123
+msgid "&Finish"
+msgstr "&Zakończ"
+
+#: widgets/kmymoneywizard.cpp:274
+#, fuzzy
+msgid "Step %1 of %2"
+msgstr "%1 z %2"
+
+#: widgets/kmymoneydateinput.cpp:235
+#, fuzzy
+msgid ""
+"_: Enter todays date into date input widget\n"
+"T"
+msgstr "T"
+
+#: widgets/transactionform.cpp:302
+msgid "&Deposit"
+msgstr "&Wpłata"
+
+#: widgets/transactionform.cpp:304 widgets/transactionform.cpp:313
+#: widgets/transactionform.cpp:323 widgets/transactionform.cpp:333
+msgid "&Transfer"
+msgstr "&Przelew"
+
+#: widgets/transactionform.cpp:306
+msgid "&Withdrawal"
+msgstr "W&ypłata"
+
+#: widgets/transactionform.cpp:311
+msgid "&Payment"
+msgstr "&Płatność"
+
+#: widgets/transactionform.cpp:315
+#, fuzzy
+msgid "&Charge"
+msgstr "Opłata"
+
+#: widgets/transactionform.cpp:321 widgets/transactionform.cpp:335
+#, fuzzy
+msgid "&Decrease"
+msgstr "Pomniejsz"
+
+#: widgets/transactionform.cpp:325 widgets/transactionform.cpp:331
+#, fuzzy
+msgid "&Increase"
+msgstr "Powiększ"
+
+#: widgets/kmymoneyscheduledcalendar.cpp:42
+msgid "Select Schedules"
+msgstr "Wybierz harmonogramy"
+
+#: widgets/kmymoneycalendar.cpp:108
+msgid "Select Style"
+msgstr "Zaznacz styl"
+
+#: widgets/kmymoneycalendar.cpp:128
+msgid "Choose Style"
+msgstr "Wybierz styl"
+
+#: widgets/kmymoneycalendar.cpp:129
+msgid "Next year"
+msgstr "Następny rok"
+
+#: widgets/kmymoneycalendar.cpp:130
+msgid "Previous year"
+msgstr "Poprzedni rok"
+
+#: widgets/kmymoneycalendar.cpp:132
+msgid "Previous month"
+msgstr "Poprzedni miesiąc"
+
+#: widgets/kmymoneycalendar.cpp:133
+msgid "Select a week"
+msgstr "Wybierz tydzień"
+
+#: widgets/kmymoneycalendar.cpp:134
+msgid "Select a month"
+msgstr "Wybierz miesiąc"
+
+#: widgets/kmymoneycalendar.cpp:135
+msgid "Select a year"
+msgstr "Wybierz rok"
+
+#: widgets/kmymoneycalendar.cpp:249
+msgid "Week XX"
+msgstr "Tydzień XX"
+
+#: widgets/kmymoneycalendar.cpp:264 widgets/kmymoneycalendar.cpp:300
+#, c-format
+msgid "Week %1"
+msgstr "Tydzień %1"
+
+#: widgets/rc.cpp:1
+#, fuzzy
+msgid "Account Types"
+msgstr "Konta"
+
+#: widgets/rc.cpp:3
+#, fuzzy
+msgid "Detailed description"
+msgstr "Opis"
+
+#: widgets/rc.cpp:18
+msgid "Period"
+msgstr ""
+
+#: widgets/rc.cpp:21
+msgid "Individual"
+msgstr ""
+
+#: widgets/rc.cpp:23
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Acces to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>Recovery encryption</i> group is only accessible, if the necessary "
+"key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is "
+"found."
+msgstr ""
+"Strona umożliwiające ustawienie parametrów zaszyfrowanego pliku danych "
+"<b>KMyMoney</b> na podstawie <b>GPG</b>.<p>\n"
+"Dostęp do ustawień jest wyłączony jeśli nie można wykryć <b>GPG</b> w "
+"systemie. W takim wypadku należy się upewnić, że <b>GPG</b> działa poprawnie "
+"dla bieżącego użytkownika.<p>\n"
+"Opcja <i>Odzyskiwanie szyfrowania</i> jest dostępna tylko wtedy, gdy "
+"znaleziono niezbędny klucz dla <b>kmymoney-recover@users.sourceforge.net</b> "
+"z identyfikatorem 0x8AFDDC8E."
+
+#: widgets/rc.cpp:26
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading <i>0x</i>."
+msgstr ""
+"Podaj identyfikator klucza, którego chcesz użyć do szyfrowania danych. Może "
+"to być albo adres e-mail, albo szesnastkowy identyfikator. W drugim "
+"przypadku nie zapomnij o początkowym <i>0x</i>."
+
+#: widgets/rc.cpp:27
+msgid "User ID"
+msgstr "ID użytkownika"
+
+#: widgets/rc.cpp:29
+msgid "Recovery encryption"
+msgstr "Szyfrowanie odzyskiwania"
+
+#: widgets/rc.cpp:30
+msgid "Also encrypt with kmymoney-recover key"
+msgstr "Szyfruj również z kluczem odzyskiwania KMyMoney"
+
+#: widgets/rc.cpp:32
+#, fuzzy
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out."
+msgstr ""
+"Możesz również określić, że dane mają być dodatkowo zaszyfrowane przy pomocy "
+"klucza odzyskiwania KMyMoney. Tylko programiści jądra KMyMoney są w "
+"posiadaniu odpowiedniego klucza prywatnego, wymaganego do odczytania tak "
+"zaszyfrowanych danych.<p>\n"
+"\n"
+"Mechanizm ten istnieje na wypadek utraty klucza przez użytkownika, a co za "
+"tym idzie, niemożnością uzyskania dostępu do danych. Po aktywowaniu tej "
+"opcji programiści KMyMoney są w stanie odszyfrować dane i dostarczyć je w "
+"czytelnej formie. Proszę się przygotować na konieczność udzielenia "
+"odpowiedzi na kilka szczegółowych pytań związanych z zawartością danych, "
+"zanim zostaną one przez nas wysłane..."
+
+#: widgets/rc.cpp:51
+msgid "PriceInfo"
+msgstr "PriceInfo"
+
+#: widgets/rc.cpp:52
+msgid "Report Tab"
+msgstr "Karta raportu"
+
+#: widgets/rc.cpp:53
+msgid "<p>On this tab, you set the basic properties of this report.</p>"
+msgstr "<p>Na tej karcie ustawia się podstawowe właściwości tego raportu.</p>"
+
+#: widgets/rc.cpp:54
+msgid "Report Name"
+msgstr "Nazwa raportu"
+
+#: widgets/rc.cpp:55
+msgid "<p>Choose a name for this report.</p>"
+msgstr "<p>Wybierz nazwę tego raportu.</p>"
+
+#: widgets/rc.cpp:57
+msgid "<p>Enter a comment to help you remember the details of this report.</p>"
+msgstr ""
+"<p>Wprowadź komentarz, który pomoże zapamiętać szczegóły tego raportu.</p>"
+
+#: widgets/rc.cpp:58
+msgid "Convert values to base currency"
+msgstr "Konwertuj wartości na walutę podstawową"
+
+#: widgets/rc.cpp:59
+msgid ""
+"_: Convert 'em!!\n"
+"<p>Select this option to convert all values in the report to your base "
+"currency.</p><p>Leave it unchecked if you'd like to see values in their "
+"original currency.</p><p>If currencies are not converted, then subtotals "
+"will not be shown.</p>"
+msgstr ""
+"<p>Wybierz tę opcję, żeby skonwertować wszystkie wartości z raportu na "
+"walutę podstawową.</p><p>Pozostaw niezmienione, jeśli chcesz widzieć "
+"wartości w oryginalnych walutach.</p><p>Jeżeli waluty nie są skonwertowane, "
+"podsumy nie będą pokazywane.</p>"
+
+#: widgets/rc.cpp:60
+msgid "Mark as a favorite report"
+msgstr "Zaznacz jako ulubiony raport"
+
+#: widgets/rc.cpp:61
+msgid ""
+"<p>Select this option to notate this report as one of your favorites.</"
+"p><p>All your favorite reports are grouped in one place on the report list "
+"for easy access.</p>"
+msgstr ""
+"<p>Zaznacz tę opcję, żeby odnotować, że ten raport jest jednym z Twoich "
+"ulubionych.</p><p>Wszystkie ulubione raporty są zgrupowane w jednym miejscu "
+"listy raportów, umożliwiając łatwy dostęp.</p>"
+
+#: widgets/rc.cpp:62 widgets/rc.cpp:88
+msgid "Rows/Columns Tab"
+msgstr "Karta wierszy/kolumn"
+
+#: widgets/rc.cpp:63 widgets/rc.cpp:89
+msgid ""
+"<p>On this tab, you configure how you'd like the rows and columns to be "
+"selected and organized.</p>"
+msgstr ""
+"<p>Na tej karcie konfiguruje się, w jaki sposób powinny być wybrane i "
+"poukładane wiersze i kolumny.</p>"
+
+#: widgets/rc.cpp:69 widgets/rc.cpp:81
+msgid ""
+"<p>Choose what kind of accounts to display as the rows of this report.</p>"
+msgstr ""
+"<p>Wybierz jaki rodzaj kont powinien być wyświetlany w wierszach tego "
+"raportu.</p>"
+
+#: widgets/rc.cpp:71
+msgid "Columns"
+msgstr "Kolumny"
+
+#: widgets/rc.cpp:75
+msgid "Bi-Monthly"
+msgstr "Co drugi m-c"
+
+#: widgets/rc.cpp:78
+msgid "<p>Choose how large of a time period each column should encompass</p>"
+msgstr "<p>Wybierz, jak długi okres czasu powinna obejmować każda kolumna</p>"
+
+#: widgets/rc.cpp:79
+msgid "Income & Expenses"
+msgstr "Dochody i wydatki"
+
+#: widgets/rc.cpp:80
+msgid "Assets & Liabilities"
+msgstr "Aktywa i pasywa"
+
+#: widgets/rc.cpp:82
+msgid "Rows"
+msgstr "Wiersze"
+
+#: widgets/rc.cpp:83
+#, fuzzy
+msgid "Show totals column"
+msgstr "Brak rachunku aktywów"
+
+#: widgets/rc.cpp:84
+#, fuzzy
+msgid "Average days"
+msgstr "Wszystkie stany"
+
+#: widgets/rc.cpp:85
+#, fuzzy
+msgid "Include scheduled transactions"
+msgstr "Zaplanowane transakcje"
+
+#: widgets/rc.cpp:86
+#, fuzzy
+msgid "Include transfers"
+msgstr "Przelewy"
+
+#: widgets/rc.cpp:87
+#, fuzzy
+msgid "Include unused accounts/categories"
+msgstr "Wczytaj predefiniowane konta/kategorie"
+
+#: widgets/rc.cpp:90
+msgid "Organize by:"
+msgstr "Układaj wg:"
+
+#: widgets/rc.cpp:92
+msgid "Top Categories"
+msgstr "Kategorie główne"
+
+#: widgets/rc.cpp:95
+msgid "Top Accounts"
+msgstr "Konta główn"
+
+#: widgets/rc.cpp:98
+msgid "<p>Choose how to group the transactions in this report</p>"
+msgstr "<p>Wybierz, w jaki sposób pogrupować transakcje w tym raporcie</p>"
+
+#: widgets/rc.cpp:99
+msgid "Show Columns"
+msgstr "Pokaż kolumny"
+
+#: widgets/rc.cpp:100
+msgid ""
+"<p>Choose which columns should be shown in the report.</p><p>The date and "
+"transaction amount are always shown.</p>"
+msgstr ""
+"<p>Wybierz, które kolumny mają się pokazać w raporcie.</p><p>Data i kwota "
+"transakcji są pokazywane zawsze.</p>"
+
+#: widgets/rc.cpp:102
+msgid "<p>Select this option to show the Memo column</p>"
+msgstr "<b>Zaznacz tę opcję, żeby pokazała się kolumna Notatek</p>"
+
+#: widgets/rc.cpp:104
+msgid "<p>Select this option to show the Shares column for investments</p>"
+msgstr ""
+"<p>Zaznacz tę opcję żeby pokazywała się kolumna udziałów dla inwestycji</p>"
+
+#: widgets/rc.cpp:106
+msgid "<p>Select this option to show the Price column for investments</p>"
+msgstr ""
+"<p>Zaznacz tę opcję żeby pokazywała się kolumna ceny dla inwestycji</p>"
+
+#: widgets/rc.cpp:108
+msgid "<p>Select this option to show the Reconciled column</p>"
+msgstr "<p>Zaznacz tę opcję, żeby pokazywała się kolumna rozliczonych</p>"
+
+#: widgets/rc.cpp:110
+msgid "<p>Select this option to show the Account column</p>"
+msgstr "<b>Zaznacz tę opcję, żeby pokazała się kolumna Rachunku</p>"
+
+#: widgets/rc.cpp:112
+msgid "<p>Select this option to show the Number column</p>"
+msgstr "<p>Zaznacz tę opcję, żeby pokazywała się kolumna numeru</p>"
+
+#: widgets/rc.cpp:114
+msgid "<p>Select this option to show the Payee column</p>"
+msgstr "<b>Zaznacz tę opcję, żeby pokazała się kolumna Beneficjenta</p>"
+
+#: widgets/rc.cpp:116
+msgid "<p>Select this option to show the Category column</p>"
+msgstr "<p>Zaznacz tę opcję, żeby pokazała się kolumna Kategorii</p>"
+
+#: widgets/rc.cpp:118
+msgid "<p>Select this option to show the Action column</p>"
+msgstr "<b>Zaznacz tę opcję, żeby pokazała się kolumna Działania</p>"
+
+#: widgets/rc.cpp:120
+#, fuzzy
+msgid "<p>Select this option to show the Running balance column</p>"
+msgstr "<p>Zaznacz tę opcję, żeby pokazywała się kolumna rozliczonych</p>"
+
+#: widgets/rc.cpp:121
+#, fuzzy
+msgid "Include only Loan accounts"
+msgstr "Dołącz tylko rachunki inwestycyjne"
+
+#: widgets/rc.cpp:122
+msgid "Include only Investment accounts"
+msgstr "Dołącz tylko rachunki inwestycyjne"
+
+#: widgets/rc.cpp:123 widgets/rc.cpp:127
+msgid ""
+"<p>Check this box to include only those categories which have been marked to "
+"\"Include on Tax Reports\"</p>"
+msgstr ""
+"<b>Zaznacz tę opcję, żeby dołączać tylko te kategorie, które zostały "
+"zaznaczone do \"Dołączania w raportach podatkowych\"</p>"
+
+#: widgets/rc.cpp:124
+#, fuzzy
+msgid "Hide Split Transaction Details"
+msgstr "Szczegóły transakcji"
+
+#: widgets/rc.cpp:125
+msgid ""
+"Do not display the individual transactions that make up a split transaction"
+msgstr ""
+
+#: widgets/rc.cpp:126
+msgid "Include only Tax categories"
+msgstr "Dołącz tylko kategorie podatków"
+
+#: widgets/rc.cpp:128
+#, fuzzy
+msgid "Chart Tab"
+msgstr "Wykres"
+
+#: widgets/rc.cpp:129
+#, fuzzy
+msgid "<p>On this tab, you configure the chart drawn forthis report.</p>"
+msgstr "<p>Na tej karcie ustawia się podstawowe właściwości tego raportu.</p>"
+
+#: widgets/rc.cpp:130
+#, fuzzy
+msgid "Chart Type"
+msgstr "Typ kategorii"
+
+#: widgets/rc.cpp:131
+msgid "<p>Select what form you would like the chart to be drawn as.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:132
+msgid "Line"
+msgstr ""
+
+#: widgets/rc.cpp:133
+msgid "Bar"
+msgstr ""
+
+#: widgets/rc.cpp:134
+msgid "Stacked Bar"
+msgstr ""
+
+#: widgets/rc.cpp:135
+#, fuzzy
+msgid "Pie"
+msgstr "Cena"
+
+#: widgets/rc.cpp:136
+#, fuzzy
+msgid "Ring"
+msgstr "Zakres"
+
+#: widgets/rc.cpp:137
+#, fuzzy
+msgid "Show grid lines"
+msgstr "Pokaż siatkę rejestru."
+
+#: widgets/rc.cpp:138
+#, fuzzy
+msgid ""
+"<p>Select this option to show horizontal and vertical grid lines on the "
+"chart.</p>"
+msgstr ""
+"<p>Zaznacz tę opcję żeby pokazywała się kolumna ceny dla inwestycji</p>"
+
+#: widgets/rc.cpp:139
+msgid "Draw values on chart"
+msgstr ""
+
+#: widgets/rc.cpp:140
+#, fuzzy
+msgid ""
+"<p>Select this option to draw the numeric values for data points next to "
+"their plot location.</p>"
+msgstr ""
+"<p>Zaznacz tę opcję żeby pokazywała się kolumna ceny dla inwestycji</p>"
+
+#: widgets/rc.cpp:141
+msgid "Show as chart by default"
+msgstr ""
+
+#: widgets/rc.cpp:142
+msgid ""
+"<p>Select this option to cause the report to be shown as a chart when you "
+"first open the report. Otherwise, it will come up as a text report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:143
+msgid "Line width"
+msgstr ""
+
+#: widgets/rc.cpp:144
+#, fuzzy
+msgid "<p>Select what width should be used to draw the line on the chart</p>"
+msgstr ""
+"<p>Zaznacz tę opcję żeby pokazywała się kolumna ceny dla inwestycji</p>"
+
+#: widgets/rc.cpp:145
+msgid "ReportControl"
+msgstr "ReportControl"
+
+#: widgets/rc.cpp:149
+msgid "Configure this report"
+msgstr "Konfiguruj ten raport"
+
+#: widgets/rc.cpp:151
+msgid "Create a new report based on this one"
+msgstr "Stwórz nowy raport na podstawie tego"
+
+#: widgets/rc.cpp:153
+msgid "Copy this report to the clipboard"
+msgstr "Kopiuj ten raport do schowka"
+
+#: widgets/rc.cpp:155
+msgid "Export this report as an HTML or CSV file"
+msgstr "Eksportuj ten raport jako plik HTML lub CSV"
+
+#: widgets/rc.cpp:157
+msgid "Permanently delete this report"
+msgstr "Nieodwołalnie usuń ten raport"
+
+#: widgets/rc.cpp:159
+msgid "Close this window"
+msgstr "Zamknij okno"
+
+#: widgets/rc.cpp:162
+msgid "n of n"
+msgstr "n z n"
+
+#: widgets/rc.cpp:166
+msgid "Account:"
+msgstr "Konto:"
+
+#: widgets/rc.cpp:168
+msgid "Enter..."
+msgstr "Przejdź..."
+
+#: widgets/rc.cpp:171
+#, fuzzy
+msgid "TransactionSortOptionDecl"
+msgstr "Opcje transakcji"
+
+#: widgets/rc.cpp:173
+#, fuzzy
+msgid "Sort order"
+msgstr "Wybierz porządek sortowania"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Sunday\n"
+"Sun"
+msgstr "Nie"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Saturday\n"
+"Sat"
+msgstr "Sob"
+
+#: widgets/kmymoneydatetbl.cpp:171 widgets/kmymoneydatetbl.cpp:178
+msgid "Week %1 for year %2."
+msgstr "Tydzień %1 w roku %2."
+
+#: widgets/kmymoneycombo.cpp:417
+msgid "ATM"
+msgstr "Bankomat"
+
+#: widgets/kmymoneycombo.cpp:418
+msgid "Withdrawal"
+msgstr "Wypłata"
+
+#: widgets/kmymoneycombo.cpp:421
+msgid "Cheque"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:469
+#, fuzzy
+msgid ""
+"_: Activity for expense categories\n"
+"Paid"
+msgstr "Kategorie wydatków"
+
+#: widgets/kmymoneycombo.cpp:470
+#, fuzzy
+msgid ""
+"_: Activity for income categories\n"
+"Received"
+msgstr "Kategorie dochodów"
+
+#: widgets/kmymoneycombo.cpp:519
+#, fuzzy
+msgid "Reinvest dividend"
+msgstr "Zainwestuj dywidendę"
+
+#: widgets/kmymoneycombo.cpp:664
+msgid "All dates"
+msgstr "Wszystkie daty"
+
+#: widgets/kmymoneycombo.cpp:665
+msgid "As of today"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:667
+msgid "Current month"
+msgstr "Bieżący miesiąc"
+
+#: widgets/kmymoneycombo.cpp:668
+#, fuzzy
+msgid "Current quarter"
+msgstr "Bieżąca stopa"
+
+#: widgets/kmymoneycombo.cpp:669
+#, fuzzy
+msgid "Current year"
+msgstr "Bieżący rok"
+
+#: widgets/kmymoneycombo.cpp:671
+msgid "Month to date"
+msgstr "Miesiąc do dnia"
+
+#: widgets/kmymoneycombo.cpp:672
+msgid "Year to date"
+msgstr "Rok do dnia"
+
+#: widgets/kmymoneycombo.cpp:673
+#, fuzzy
+msgid "Year to month"
+msgstr "Co dwa miesiące"
+
+#: widgets/kmymoneycombo.cpp:675
+#, fuzzy
+msgid "Last year"
+msgstr "Ostatni rok"
+
+#: widgets/kmymoneycombo.cpp:676
+#, fuzzy
+msgid "Last fiscal year"
+msgstr "Ostatni rok"
+
+#: widgets/kmymoneycombo.cpp:677
+#, fuzzy
+msgid "Last 7 days"
+msgstr "Ostatnie 30 dni"
+
+#: widgets/kmymoneycombo.cpp:678
+msgid "Last 30 days"
+msgstr "Ostatnie 30 dni"
+
+#: widgets/kmymoneycombo.cpp:679
+msgid "Last 3 months"
+msgstr "Ostatnie 3 miesiące"
+
+#: widgets/kmymoneycombo.cpp:680
+#, fuzzy
+msgid "Last quarter"
+msgstr "Ostatni rok"
+
+#: widgets/kmymoneycombo.cpp:681
+msgid "Last 6 months"
+msgstr "Ostatnie 6 miesięcy"
+
+#: widgets/kmymoneycombo.cpp:682
+#, fuzzy
+msgid "Last 11 months"
+msgstr "Ostatnie 12 miesięcy"
+
+#: widgets/kmymoneycombo.cpp:683
+msgid "Last 12 months"
+msgstr "Ostatnie 12 miesięcy"
+
+#: widgets/kmymoneycombo.cpp:684
+#, fuzzy
+msgid "Next 7 days"
+msgstr "Następne 30 dni"
+
+#: widgets/kmymoneycombo.cpp:685
+msgid "Next 30 days"
+msgstr "Następne 30 dni"
+
+#: widgets/kmymoneycombo.cpp:686
+msgid "Next 3 months"
+msgstr "Następne 3 miesiące"
+
+#: widgets/kmymoneycombo.cpp:687
+#, fuzzy
+msgid "Next quarter"
+msgstr "Kolejna data płatności"
+
+#: widgets/kmymoneycombo.cpp:688
+msgid "Next 6 months"
+msgstr "Następne 6 miesięcy"
+
+#: widgets/kmymoneycombo.cpp:689
+msgid "Next 12 months"
+msgstr "Następne 12 miesięcy"
+
+#: widgets/kmymoneycombo.cpp:690
+#, fuzzy
+msgid "Last 3 months to next 3 months"
+msgstr "Ostatnie 3 miesiące"
+
+#: widgets/kmymoneycombo.cpp:691
+msgid "User defined"
+msgstr "Własne użytkownika"
+
+#~ msgid "Reset"
+#~ msgstr "Ustawienia domyślne"
+
+#~ msgid "Create schedule..."
+#~ msgstr "Stwórz harmonogram..."
+
+#, fuzzy
+#~ msgid "New schedule..."
+#~ msgstr "&Nowy harmonogram..."
+
+#, fuzzy
+#~ msgid "Edit schedule..."
+#~ msgstr "Wczytywanie harmonogramów..."
+
+#, fuzzy
+#~ msgid "Delete schedule..."
+#~ msgstr "Stwórz harmonogram..."
+
+#, fuzzy
+#~ msgid "Duplicate schedule"
+#~ msgstr "Ponowne otwarcie"
+
+#, fuzzy
+#~ msgid "Enter schedule..."
+#~ msgstr "Stwórz harmonogram..."
+
+#, fuzzy
+#~ msgid "Skip schedule..."
+#~ msgstr "Wczytywanie harmonogramów..."
+
+#, fuzzy
+#~ msgid "Adjusting schedules..."
+#~ msgstr "Wczytywanie harmonogramów..."
+
+#, fuzzy
+#~ msgid "Add schedule"
+#~ msgstr " harmonogramy\n"
+
+#, fuzzy
+#~ msgid "Unable to enter transaction for schedule '%1'"
+#~ msgstr "Nie można dodać transakcji/zmienić harmonogramu"
+
+#, fuzzy
+#~ msgid "Loaded"
+#~ msgstr "Pożyczka"
+
+#, fuzzy
+#~ msgid "not loaded: %1"
+#~ msgstr "Rozliczone: %1"
+
+#, fuzzy
+#~ msgid "Schedule options"
+#~ msgstr "Opcje startowe harmonogramu"
+
+#~ msgid "New Schedule"
+#~ msgstr "Nowy harmonogram"
+
+#, fuzzy
+#~ msgid "Edit Schedule"
+#~ msgstr "Edycja harmonogramu opłat"
+
+#~ msgid "Search transactions containing the following text"
+#~ msgstr "Wyszukaj transakcje zawierające następujący tekst"
+
+#~ msgid "Search"
+#~ msgstr "Szukaj"
+
+#~ msgid "&Search"
+#~ msgstr "&Szukaj"
+
+#~ msgid "Start the search"
+#~ msgstr "Rozpocznij szukanie"
+
+#~ msgid "Takes the current criteria and searches for matching transactions."
+#~ msgstr "Szuka pasujących transakcji przy użyciu bieżących kryteriów."
+
+#~ msgid "Reset all settings"
+#~ msgstr "Przywróć wszystkie wartości"
+
+#~ msgid ""
+#~ "Use this to reset all settings to the state they were when the dialog was "
+#~ "opened."
+#~ msgstr "Użyj, by przywrócić ustawienia do stanu z chwili otwarcia okienka."
+
+#~ msgid "Use this button to close the window"
+#~ msgstr "Użyj tego przycisku w celu zamknięcia okna"
+
+#, fuzzy
+#~ msgid "Multi-user mode not yet implemented\n"
+#~ msgstr "Funkcja nie jest dostępna"
+
+#~ msgid "Accept splits and return to transaction form"
+#~ msgstr "Zaakceptuj podziały i wróć do formularza transakcji"
+
+#~ msgid ""
+#~ "Use this to accept all changes to the splits and return to the transaction"
+#~ msgstr "Użyj, żeby zaakceptować wszystkie zmiany i powrócić do transakcji"
+
+#~ msgid ""
+#~ "This QIF file contains investment transactions. You are trying to import "
+#~ "this file into an account which is not an investment account. These "
+#~ "transactions will be ignored."
+#~ msgstr ""
+#~ "Ten plik QIF zawiera transakcje inwestycyjne. Próbujesz go zaimportować "
+#~ "do konta, które nie jest kontem inwestycyjnym. Transakcje te zostaną "
+#~ "zignorowane."
+
+#~ msgid "Invalid account for investments"
+#~ msgstr "Nieprawidłowe konto dla inwestycji"
+
+#~ msgid "Problem adding imported transaction: "
+#~ msgstr "Problem z dodaniem zaimportowanej transakcji: "
+
+#~ msgid ""
+#~ "This file contains security entries. These are not currently supported "
+#~ "by the QIF importer."
+#~ msgstr ""
+#~ "Ten plik zawiera pozycje papierów wartościowych. Nie są one obecnie "
+#~ "obsługiwane przez kod importujący QIF."
+
+#~ msgid "Unable to import"
+#~ msgstr "Nie można zaimportować"
+
+#, fuzzy
+#~ msgid "Budget "
+#~ msgstr "Budżety"
+
+#, fuzzy
+#~ msgid "Forecast "
+#~ msgstr "Całkowita suma/kwota"
+
+#, fuzzy
+#~ msgid "Budget Total"
+#~ msgstr "Następny rok"
+
+#, fuzzy
+#~ msgid "Forecast Total"
+#~ msgstr "Całkowita suma/kwota"
+
+#, fuzzy
+#~ msgid "Incomes and Expenses This Month"
+#~ msgstr "Dochody i wydatki w tym miesiącu"
+
+#, fuzzy
+#~ msgid "Incomes"
+#~ msgstr "Dochód"
+
+#, fuzzy
+#~ msgid "Schedules This Month"
+#~ msgstr "Zaplanowane transakcje"
+
+#~ msgid "&Ok"
+#~ msgstr "&Ok"
+
+#~ msgid "Accepts the value and stores them"
+#~ msgstr "Akceptuje i zachowuje wartość"
+
+#~ msgid "Use this to accept all values and close the dialog."
+#~ msgstr "Użyj, żeby zaakceptować wszystkie wartości i zamknąć okno."
+
+#~ msgid "Cancel the operation"
+#~ msgstr "Anuluj operację"
+
+#~ msgid "Use this to dismiss all the changes made in this dialog."
+#~ msgstr "Użyj, żeby odrzucić wszystkie zmiany wprowadzone w okienku."
+
+#~ msgid "Abort operation"
+#~ msgstr "Porzuć operację"
+
+#~ msgid "Use this to abort the export operation"
+#~ msgstr "Użyj żeby przerwać operację eksportu"
+
+#~ msgid "Start the backup operation"
+#~ msgstr "Rozpocznij robienie kopii zapasowej"
+
+#~ msgid "Pressing this button starts the backup operation."
+#~ msgstr "Wciśnięcie przycisku rozpoczyna robienie kopii zapasowej."
+
+#~ msgid "Cancel the backup operation"
+#~ msgstr "Anuluj robienie kopii zapasowej"
+
+#~ msgid "Use this to abort the backup and to return to KMyMoney."
+#~ msgstr ""
+#~ "Użyj, żeby zaprzestać robienia kopii zapasowej i wrócić do KMyMoney."
+
+#~ msgid "Reject all changes to the splits and return to transaction form"
+#~ msgstr "Odrzuć wszystkie zmiany podziałów i powróć do formularza transakcji"
+
+#~ msgid ""
+#~ "Use this to reject all changes to the splits and return to the transaction"
+#~ msgstr "Użyj, żeby odrzucić wszystkie zmiany i powrócić do transakcji"
+
+#~ msgid "Close dialog"
+#~ msgstr "Zamknij okno"
+
+#~ msgid "Use this to close the dialog and abort the operation"
+#~ msgstr "Użyj, żeby zamknąć okno i porzucić operację"
+
+#~ msgid "Use this to accept and store data"
+#~ msgstr "Użyj, żeby zaakceptować i zachować dane"
+
+#~ msgid "Delete the selected profile"
+#~ msgstr "Skasuj wybrany profil"
+
+#~ msgid "Use this to delete the selected profile"
+#~ msgstr "Użyj, żeby skasować wybrany profil"
+
+#~ msgid "Use this to accept the data."
+#~ msgstr "Użyj, żeby zaakceptować dane."
+
+#~ msgid "Reject all changes to the data and closes the dialog"
+#~ msgstr "Odrzuca wszystkie zmiany danych i zamyka okienko"
+
+#~ msgid "Use this to reject all changes."
+#~ msgstr "Użyj, żeby odrzucić wszystkie zmiany."
+
+#, fuzzy
+#~ msgid "Scan"
+#~ msgstr "Prze&szukaj"
+
+#~ msgid "Automatically create missing payees"
+#~ msgstr "Automatycznie stwórz brakujących beneficjentów"
+
+#~ msgid "Remove this price information from the price history"
+#~ msgstr "Usuń te informacje o cenie z historii cen"
+
+#~ msgid "Create a new price information entry."
+#~ msgstr "Stwórz nowy wpis z informacją o cenie."
+
+#~ msgid "Accepts the selected action and continues"
+#~ msgstr "Akceptuje wybraną operację i kontynuuje"
+
+#~ msgid ""
+#~ "Use this to accept the selection and continue processing the transaction"
+#~ msgstr ""
+#~ "Użyj, żeby zaakceptować wybór i kontynuować przetwarzanie transakcji"
+
+#~ msgid "Reject any changes"
+#~ msgstr "Odrzuć wszelkie zmiany"
+
+#~ msgid "Use this to abort the account/category dialog"
+#~ msgstr "Użyj, żeby opuścić okno dialogowe konta/kategorii"
+
+#~ msgid "Accept modifications"
+#~ msgstr "Zaakceptuj zmiany"
+
+#~ msgid "Use this to accept the data and possibly create the account/category"
+#~ msgstr "Użyj, żeby przyjąć dane i ewentualnie stworzyć konto/kategorię"
+
+#~ msgid "New ..."
+#~ msgstr "Nowa..."
+
+#, fuzzy
+#~ msgid "S&ummary"
+#~ msgstr "Podsumowanie"
+
+#, fuzzy
+#~ msgid "Det&ail"
+#~ msgstr "Szczegóły"
+
+#, fuzzy
+#~ msgid "Total Incomes This Month"
+#~ msgstr "Dochody i wydatki w tym miesiącu"
+
+#, fuzzy
+#~ msgid "Total Expenses This Month"
+#~ msgstr "Dochody i wydatki w tym miesiącu"
+
+#, fuzzy
+#~ msgid "Scheduled Transfers This Month"
+#~ msgstr "Dochody i wydatki w tym miesiącu"
+
+#, fuzzy
+#~ msgid "&Use the ledger lens"
+#~ msgstr "Użyj lupy księgi rachunkowej"
+
+#~ msgid "&Create"
+#~ msgstr "&Stwórz"
+
+#, fuzzy
+#~ msgid "Co&nfigure"
+#~ msgstr "Kon&figuracja"
+
+#, fuzzy
+#~ msgid "Te&xt"
+#~ msgstr "Tekst"
+
+#~ msgid "Online &Quotes"
+#~ msgstr "Źródła &wyceny online"
+
+#~ msgid "&Edit ..."
+#~ msgstr "&Edycja..."
+
+#~ msgid "&Delete ..."
+#~ msgstr "&Usuń..."
+
+#, fuzzy
+#~ msgid "&Yearly"
+#~ msgstr "Raz do roku"
+
+#~ msgid "Advanced Institution Settings"
+#~ msgstr "Zaawansowane ustawienia instytucji"
+
+#~ msgid "OFX Direct Connect Settings"
+#~ msgstr "Ustawienia bezpośredniego połączenia OFX"
+
+#~ msgid "Enable OFX Direct Connect"
+#~ msgstr "Włącz bezpośredniego połączenia OFX"
+
+#~ msgid "FIORG"
+#~ msgstr "FIORG"
+
+#~ msgid ""
+#~ "Failed to retrieve a quote for %1 from %2. Would you like to disable "
+#~ "online price updates for this security?"
+#~ msgstr ""
+#~ "Nie udało się pobrać wyceny %1 z %2. Czy wyłączyć aktualizację cen online "
+#~ "dla tego waloru?"
+
+#, fuzzy
+#~ msgid "Commodity Editor"
+#~ msgstr "Towar"
+
+#, fuzzy
+#~ msgid "1/"
+#~ msgstr "1 /"
+
+#, fuzzy
+#~ msgid "Account Fraction"
+#~ msgstr "Wybór konta"
+
+#, fuzzy
+#~ msgid "Online Banking"
+#~ msgstr "Skonfiguruj &bankowość internetową..."
+
+#~ msgid "Checkings"
+#~ msgstr "Bieżący"
+
+#~ msgid "R"
+#~ msgstr "U"
+
+#, fuzzy
+#~ msgid "Column 1"
+#~ msgstr "Kolumny"
+
+#~ msgid "Transaction History"
+#~ msgstr "Historia transakcji"
+
+#~ msgid "Personal Information"
+#~ msgstr "Informacje osobiste"
+
+#~ msgid "TextLabel2"
+#~ msgstr "TextLabel2"
+
+#~ msgid "YTD:"
+#~ msgstr "RDD:"
+
+#~ msgid "TextLabel4"
+#~ msgstr "TextLabel4"
+
+#~ msgid "Online update using OFX..."
+#~ msgstr "Aktualizacja online przy pomocy OFX..."
+
+#, fuzzy
+#~ msgid "Match Transaction..."
+#~ msgstr "&Edycja transakcji..."
+
+#, fuzzy
+#~ msgid "Match With This Transaction"
+#~ msgstr "Pomiń tę transakcję"
+
+#~ msgid "Import %1 Statement..."
+#~ msgstr "Import wyciągu %1..."
+
+#~ msgid "Unable to import <b>%1</b> file. There is no such plugin loaded."
+#~ msgstr ""
+#~ "Nie można zaimportować pliku <b>%1</b>. Nie została wczytana odpowiednia "
+#~ "wtyczka."
+
+#~ msgid "Function not available"
+#~ msgstr "Funkcja nie jest dostępna"
+
+#~ msgid "Edit an account"
+#~ msgstr "Edytuj konto"
+
+#~ msgid ""
+#~ "The currently opened KMyMoney document does not contain a single asset "
+#~ "account. In order to maintain your finances you need at least one asset "
+#~ "account (e.g. your checkings account). KMyMoney will start the \"New "
+#~ "Account Wizard\" now which allows you to create your first asset account."
+#~ msgstr ""
+#~ "Aktualnie otwarty dokument KMyMoney nie zawiera żadnego konta aktywów. "
+#~ "Żeby zarządzać swoimi finansami potrzebujesz co najmniej jednego takiego "
+#~ "konta (np. rachunek bieżący). KMyMail wyświetli teraz \"Asystenta nowego "
+#~ "konta\", który pozwoli utworzyć pierwsze konto aktywów."
+
+#~ msgid "No asset account"
+#~ msgstr "Brak rachunku aktywów"
+
+#~ msgid "%1 (Plugin)..."
+#~ msgstr "%1 (Wtyczka)..."
+
+#~ msgid "GnuCash Importer"
+#~ msgstr "Import z Gnucash"
+
+#, fuzzy
+#~ msgid "Open Configuration Dialog"
+#~ msgstr "Pomoc konfiguracji OFX"
+
+#, fuzzy
+#~ msgid "Importing templates..."
+#~ msgstr "Wczytywanie szablonów..."
+
+#~ msgid "Until today"
+#~ msgstr "Aż do dziś"
+
+#~ msgid "Tax Transactions"
+#~ msgstr "Transakcje podatkowe"
+
+#~ msgid "Unable to parse date %1 using format %2: %3"
+#~ msgstr "Nie można przetworzyć daty %1 z użyciem formatu %2: %3"
+
+#, fuzzy
+#~ msgid "Pa&yee"
+#~ msgstr "Beneficjent"
+
+#, fuzzy
+#~ msgid "Return"
+#~ msgstr "&Rozpocznij"
+
+#, fuzzy
+#~ msgid "Summar&y"
+#~ msgstr "Podsumowanie"
+
+#, fuzzy
+#~ msgid "one month"
+#~ msgstr "Następny miesiąc"
+
+#, fuzzy
+#~ msgid "one year"
+#~ msgstr "Następny rok"
+
+#, fuzzy
+#~ msgid "one payment"
+#~ msgstr "Spłata pożyczki"
+
+#~ msgid "Every four week"
+#~ msgstr "Co cztery tygodnie"
+
+#, fuzzy
+#~ msgid "E&dit"
+#~ msgstr "Edytuj..."
+
+#, fuzzy
+#~ msgid "De&lete"
+#~ msgstr "Usuń..."
+
+#, fuzzy
+#~ msgid "Ne&w"
+#~ msgstr "Nowy"
+
+#~ msgid "Change into one of the directories and select the desired file."
+#~ msgstr "Przejdź do jednego z katalogów i wybierz żądany plik."
+
+#~ msgid "*.kmt|Account templates"
+#~ msgstr "*.kmt|Szablony kont"
+
+#~ msgid "Select account template(s)"
+#~ msgstr "Wybierz szablon(y) kont"
+
+#, fuzzy
+#~ msgid "Duplicate split"
+#~ msgstr "Ponowne otwarcie"
+
+#, fuzzy
+#~ msgid "Convert 'em!!"
+#~ msgstr "Konwertuj z"
+
+#~ msgid "Outbox"
+#~ msgstr "Zlecenia oczekujące"
+
+#~ msgid "AqBanking importer ..."
+#~ msgstr "Import AqBanking..."
+
+#~ msgid "Online update using HBCI..."
+#~ msgstr "Aktualizuj w sieci przy pomocy HBCI..."
+
+#~ msgid ""
+#~ "In order to map this account to an HBCI account, the account's "
+#~ "institution must have a bank code assigned. Please assign one before "
+#~ "continuing."
+#~ msgstr ""
+#~ "Żeby zmapować to konto do konta HBCI, instytucja rachunku musi mieć "
+#~ "przypisany kod bankowy. Proszę przypisać jeden przed wykonaniem dalszych "
+#~ "czynności."
+
+#~ msgid ""
+#~ "In order to map this account to an HBCI account, this account must have "
+#~ "an account number assigned."
+#~ msgstr ""
+#~ "Żeby zmapować to konto do konta HBCI, musi ono mieć przypisany numer "
+#~ "konta."
+
+#~ msgid "Error importing statement."
+#~ msgstr "Błąd przy imporcie wyciągu."
+
+#~ msgid "&Split"
+#~ msgstr "P&odziel"
+
+#~ msgid "Split the amount into different categories."
+#~ msgstr "Rozdziel sumę pomiędzy różne kategorie."
+
+#~ msgid "&Bills/Deposits"
+#~ msgstr "&Opłaty/wpłaty"
+
+#~ msgid "&Reports"
+#~ msgstr "&Raporty"
+
+#~ msgid "Add new account..."
+#~ msgstr "Dodaj nowe konto..."
+
+#~ msgid "Reconcile ..."
+#~ msgstr "Uzgodnij ..."
+
+#~ msgid "Add new transaction"
+#~ msgstr "Dodaj nową transakcję"
+
+#~ msgid ""
+#~ "The next dialog allows you to add predefined account/category templates "
+#~ "to the new file. Different languages are available to select from. You "
+#~ "can skip loading any template now by selecting <b>Cancel</b> from the "
+#~ "next dialog. If you wish to add more templates later, you can restart "
+#~ "this operation by selecting <b>File/Import/Account Templates</b>."
+#~ msgstr ""
+#~ "Kolejne okno pozwala na dodanie uprzednio zdefiniowanych szablonów kont/"
+#~ "kategorii do nowego pliku. Możliwy jest wybór spośród różnych języków. "
+#~ "Można teraz pominąć wczytywanie szablonów poprzez wciśnięcie <b>Anuluj</"
+#~ "b> w następnym oknie. W wypadku konieczności dodania większej liczby "
+#~ "szablonów później, można ponownie wywołać działanie wybierając <b>Plik/"
+#~ "Import/Szablony kont</b>"
+
+#~ msgid ""
+#~ "*.kmy|KMyMoney files\n"
+#~ "*.xml|XML Files\n"
+#~ "*.ANON.xml|Anonymous Files\n"
+#~ "*.*|All files"
+#~ msgstr ""
+#~ "*.kmy|Pliki KMyMoney\n"
+#~ "*.xml|Pliki XML\n"
+#~ "*.ANON.xml|Pliki anonimowe\n"
+#~ "*.*|All files"
+
+#~ msgid "Toggling toolbar..."
+#~ msgstr "Przełączanie paska narzędzi..."
+
+#~ msgid "Toggle the statusbar..."
+#~ msgstr "Przełączanie paska stanu..."
+
+#~ msgid ""
+#~ "This function is used by the developers to\n"
+#~ "\n"
+#~ "perform a dump of the engine's data in memory."
+#~ msgstr ""
+#~ "Funkcja używana przez programistów\n"
+#~ "\n"
+#~ "żeby zrzucić zawartość danych silnika z pamięci."
+
+#~ msgid ""
+#~ "Unable to autoEnter schedule %1. Please check manually!\n"
+#~ "Debug data has been copied to clipboard; please paste into an\n"
+#~ "email and send to kmymoney2-developer@lists.sourceforge.net"
+#~ msgstr ""
+#~ "Nie można automatycznie wprowadzić harmonogramu %1. Proszę sprawdzić "
+#~ "ręcznie!\n"
+#~ "Dane diagnostyczne zostały skopiowane do schowka, proszę je\n"
+#~ "wkleić do e-maila i przesłać na adres kmymoney2-developer@lists."
+#~ "sourceforge.net"
+
+#~ msgid "%1 caught in %2 at line %3"
+#~ msgstr "%1 przechwycony w %2, linia %3"
+
+#~ msgid "Cannot remove account from institution"
+#~ msgstr "Nie można usunąć kont z instytucji"
+
+#~ msgid "Moving account"
+#~ msgstr "Przenoszenie konta"
+
+#~ msgid "Cannot move account"
+#~ msgstr "Nie można przenieść konta"
+
+#~ msgid "Cannot move account to institution"
+#~ msgstr "Nie można przenieść konta do instytucji"
+
+#~ msgid "Show Top Categories Only"
+#~ msgstr "Pokazuj tylko główne kategorie"
+
+#~ msgid ""
+#~ "<p>Select this option to summarize all sub-categories into a single line "
+#~ "for each Top Category.</p><p>(e.g. Values for Computers:Hardware and "
+#~ "Computers:Software will all be shown on the Computers line)</p>"
+#~ msgstr ""
+#~ "<p>Zaznacz tę opcję, żeby podsumować wszystkie podkategorie w pojedynczej "
+#~ "linii dla każdej kategorii głównej.</p><p>(np. wartości sprzętu "
+#~ "komputerowego i programów komputerowych będą razem pokazane w linii "
+#~ "Komputery)</p>"
+
+#~ msgid "Transfer to/from %1"
+#~ msgstr "Przelew do/z %1"
+
+#~ msgid "Unable to add category"
+#~ msgstr "Nie można dodać kategorii"
+
+#~ msgid "Securities"
+#~ msgstr "Papiery wartościowe"
+
+#~ msgid "Reconciled: %1"
+#~ msgstr "Uzgodniono: %1"
+
+#~ msgid "You currently owe: "
+#~ msgstr "Jesteś aktualnie winien: "
+
+#~ msgid "There is no user manual yet"
+#~ msgstr "Podręcznik użytkownika jeszcze nie istnieje"
+
+#~ msgid "Unable to setup payee/receiver"
+#~ msgstr "Nie można ustawić płatnika/odbiorcy"
+
+#~ msgid "Unable to modify split"
+#~ msgstr "Nie można modyfikować podziału"
+
+#~ msgid "Unable to modify category"
+#~ msgstr "Nie można zmodyfikować kategorii"
+
+#~ msgid "Unable to modify number"
+#~ msgstr "Nie można zmodyfikować numeru"
+
+#~ msgid "Unable to modify type"
+#~ msgstr "Nie można zmodyfikować typu"
+
+#~ msgid "&Check"
+#~ msgstr "&Czek"
+
+#~ msgid "AT&M"
+#~ msgstr "Banko&mat"
+
+#~ msgid ""
+#~ "An investment transaction can only be modified in the investment view. Do "
+#~ "you want to change to the investment view?"
+#~ msgstr ""
+#~ "Transakcja inwestycyjna może być zmieniana tylko w widoku transakcji. Czy "
+#~ "chcesz przełączyć się na ten widok?"
+
+#~ msgid "Account Options"
+#~ msgstr "Opcje konta`"
+
+#~ msgid "Account Details ..."
+#~ msgstr "Szczegóły konta ..."
+
+#~ msgid "Mark as ..."
+#~ msgstr "Zaznacz jako ..."
+
+#~ msgid "Move to account ..."
+#~ msgstr "Przenieś do konta ..."
+
+#~ msgid "Moving a split to a different account is not yet implemented"
+#~ msgstr ""
+#~ "Przenoszenie podziału do innego konta nie jest jeszcze zaimplementowane"
+
+#~ msgid ""
+#~ "You are about to delete the selected transaction. Do you really want to "
+#~ "continue?"
+#~ msgstr "Zamierzasz usunąć wybraną transakcję. Czy na pewno kontynuować?"
+
+#~ msgid "New Account..."
+#~ msgstr "Nowe konto..."
+
+#~ msgid "KMyMoney Options"
+#~ msgstr "Opcje KMyMoney"
+
+#~ msgid "Really delete this institution: "
+#~ msgstr "Naprawdę usunąć tę instytucję: "
+
+#~ msgid "Cannot delete institution: "
+#~ msgstr "Nie można usunąć instytucji: "
+
+#~ msgid "Cannot delete account: "
+#~ msgstr "Nie można usunąć konta: "
+
+#~ msgid ""
+#~ "You have specified to encrypt your data but you have not provided a user-"
+#~ "id. Please make sure to setup a valid user id. This time, encryption is "
+#~ "disabled."
+#~ msgstr ""
+#~ "Kazałeś szyfrować dane, ale nie określiłeś identyfikatora użytkownika. "
+#~ "Upewnij się, że ustawiłeś ważny identyfikator. A teraz szyfrowanie jest "
+#~ "wyłączone."
+
+#~ msgid "Cannot add bank"
+#~ msgstr "Nie można dodać banku"
+
+#~ msgid "Create new KMyMoney file"
+#~ msgstr "Stwórz nowy plik KMyMoney"
+
+#~ msgid "Cannot edit personal data"
+#~ msgstr "Nie można edytować danych osobistych"
+
+#~ msgid "*.dat|Account templates"
+#~ msgstr "*.dat|Szablony kont"
+
+#~ msgid "Select account template"
+#~ msgstr "Wybierz szablon konta"
+
+#~ msgid "Cannot find the data file containing the default categories"
+#~ msgstr "Nie można odnaleźć pliku z danymi zawierającego domyślne kategorie"
+
+#~ msgid "Loading default accounts"
+#~ msgstr "Wczytywanie domyślnych kont"
+
+#~ msgid "Ready"
+#~ msgstr "Gotowy"
+
+#~ msgid "Show transactionform"
+#~ msgstr "Pokaż formularz transakcji"
+
+#~ msgid ""
+#~ "Use this to finish reconciling your account against the bank statement."
+#~ msgstr "Użyj, żeby zakończyć uzgadnianie konta z wyciągiem bankowym."
+
+#~ msgid "&Postpone"
+#~ msgstr "O&drocz"
+
+#~ msgid ""
+#~ "Use this to postpone reconciling your account against the bank statement "
+#~ "to a later point in time."
+#~ msgstr ""
+#~ "Użyj, żeby odwlec w czasie uzgadnianie stanu konta z wyciągiem bankowym."
+
+#~ msgid "&Account Details"
+#~ msgstr "Szczegóły &konta"
+
+#~ msgid "Open the account dialog"
+#~ msgstr "Otwórz okno dialogowe konta"
+
+#~ msgid "Use this view and modify the account details."
+#~ msgstr "Użyj tego widoku do zmiany szczegółów konta."
+
+#~ msgid "&Reconcile ..."
+#~ msgstr "&Uzgodnij..."
+
+#~ msgid "Start the account reconciliation"
+#~ msgstr "Rozpocznij uzgadnianie konta"
+
+#~ msgid "Use this to reconcile your account against the bank statement."
+#~ msgstr "Użyj, żeby uzgodnić stan konta z wyciągiem bankowym."
+
+#~ msgid ""
+#~ "<center><b>Reconcile account</b></center><hr>\n"
+#~ "<b>1.</b> Click on column 'C' to clear the transactions appearing on your "
+#~ "bank statement."
+#~ msgstr ""
+#~ "<center><b>Uzgodnienie konta</b></center><hr>\n"
+#~ "<b>1.</b> Kliknij na kolumnie 'R', żeby rozliczyć transakcje pojawiające "
+#~ "się na wyciągu z banku."
+
+#~ msgid ""
+#~ "<b>2.</b> Match the cleared transactions with the amount noted on your "
+#~ "bank statement.<br>"
+#~ msgstr ""
+#~ "<b>2.</b>Dopasuj rozliczone transakcje do kwoty zapisanej na wyciągu z "
+#~ "banku.<br>"
+
+#~ msgid "Cleared:"
+#~ msgstr "Rozliczone:"
+
+#~ msgid "<p><b>3.</b> Hit the Finish button when you're done."
+#~ msgstr "<p><b>3.</b> Wciśnij przycisk Zakończ, kiedy skończysz."
+
+#~ msgid "Loan Payment"
+#~ msgstr "Spłata pożyczki"
+
+#~ msgid "Goto payer/receiver"
+#~ msgstr "Przejdź do płatnika lub odbiorcy"
+
+#~ msgid ""
+#~ "*.csv|CSV files\n"
+#~ "*.html|HTML files\n"
+#~ "*.*|All files"
+#~ msgstr ""
+#~ "*.csv|Pliki CSV\n"
+#~ "*.html|Pliki HTML\n"
+#~ "*.*|Wszystkie pliki"
+
+#~ msgid "Account register"
+#~ msgstr "Rejestr konta"
+
+#~ msgid "Cannot edit category: "
+#~ msgstr "Nie można edytować kategorii: "
+
+#~ msgid "Symbol Name"
+#~ msgstr "Nazwa symbolu"
+
+#~ msgid "Modify the loan details for this loan"
+#~ msgstr "Modyfikuj szczegóły tej pożyczki"
+
+#~ msgid ""
+#~ "Use this to start a wizard that allows changing the details for this loan."
+#~ msgstr ""
+#~ "Użyj, żeby wywołać asystenta, który pozwoli zmienić szczegóły tej "
+#~ "pożyczki."
+
+#~ msgid "To"
+#~ msgstr "Do"
+
+#~ msgid ""
+#~ "The price history for <b>%1</b> does not contain an entry for <b>%2</b>. "
+#~ "Do you want to add a new entry in the history based on the price of this "
+#~ "transaction?"
+#~ msgstr ""
+#~ "Historia ceny <b>%1</b> nie zawiera pozycji dla <b>%2</b>. Czy chcesz "
+#~ "dodać nową pozycję historii opartą o cenę z tej transakcji?"
+
+#~ msgid "Add price info"
+#~ msgstr "Dodaj informację o cenie"
+
+#~ msgid ""
+#~ "The price history for <b>%1</b> contains a different price for <b>%2</"
+#~ "b>. Do you want to update the price in the history to the one of this "
+#~ "transaction?"
+#~ msgstr ""
+#~ "Historia ceny <b>%1</b> zawiera inną cenę <b>%2</b>. Czy chcesz "
+#~ "zaktualizować cenę w historii do wartości z tej transakcji?"
+
+#~ msgid "Update price info"
+#~ msgstr "Aktualizuj informacje o cenie"
+
+#~ msgid "Unable to add/modify security"
+#~ msgstr "Nie można dodać/zmienić papierów wartościowych"
+
+#~ msgid ""
+#~ "The %1 <b>%2</b> uses a different currency than the selected investment. "
+#~ "Please make sure to enter all values for this transaction in <b>%2</b>. "
+#~ "When you save this transaction you will have the chance to enter the "
+#~ "necessary conversion rates."
+#~ msgstr ""
+#~ "%1 <b>%2</b> używa innej waluty, niż wybrana inwestycja. Proszę się "
+#~ "upewnić, że wpisano w <b>%2</b> wszystkie wartości dla tej transakcji. "
+#~ "Podczas zapisu transakcji będzie można wpisać niezbędne współczynniki "
+#~ "konwersji"
+
+#~ msgid "Stock security"
+#~ msgstr "Giełdowe papiery wartościowe"
+
+#~ msgid "C&harge"
+#~ msgstr "O&płata"
+
+#~ msgid "$ Gain"
+#~ msgstr "Przyrost zł"
+
+#~ msgid "1 Week %"
+#~ msgstr "1 tydzień %"
+
+#~ msgid "4 Weeks %"
+#~ msgstr "4 tygodnie %"
+
+#~ msgid "3 Months %"
+#~ msgstr "3 miesiące %"
+
+#~ msgid "YTD %"
+#~ msgstr "RDD %"
+
+#~ msgid "On-line Price Update ..."
+#~ msgstr "Sieciowa aktualizacja cen..."
+
+#~ msgid "New payee..."
+#~ msgstr "Nowy beneficjent..."
+
+#~ msgid "Bill Options"
+#~ msgstr "Opcje opłaty"
+
+#~ msgid "New Bill..."
+#~ msgstr "Nowa opłata..."
+
+#~ msgid "Deposit Options"
+#~ msgstr "Opcje wpłaty"
+
+#~ msgid "New Deposit..."
+#~ msgstr "Nowa wpłata..."
+
+#~ msgid "Transfer Options"
+#~ msgstr "Opcje przelewu"
+
+#~ msgid "New Transfer..."
+#~ msgstr "Nowy przelew..."
+
+#~ msgid "Personal Equity"
+#~ msgstr "Kapitał osobisty"
+
+#~ msgid "Transfer %1 %2"
+#~ msgstr "Przelew %1 %2"
+
+#~ msgid "Edit Transfer Schedule"
+#~ msgstr "Edytuj harmonogram przelewów"
+
+#~ msgid "Edit Loan Payment Schedule"
+#~ msgstr "Edytuj harmonogram spłat pożyczki"
+
+#~ msgid "Edit Deposit Schedule"
+#~ msgstr "Edycja harmonogramu wpłat"
+
+#~ msgid "Direct Debit"
+#~ msgstr "Polecenie zapłaty"
+
+#~ msgid "Direct Deposit"
+#~ msgstr "Wpłata bezpośrednia"
+
+#~ msgid "Manual Deposit"
+#~ msgstr "Wpłata własna"
+
+#~ msgid "Write Check"
+#~ msgstr "Czek"
+
+#~ msgid "Please specify the account first before you assign splits."
+#~ msgstr "Proszę określić konto przed przypisaniem podziałów."
+
+#~ msgid "Exception in slot split clicked"
+#~ msgstr "Wyjątek w slot split clicked"
+
+#~ msgid ""
+#~ "The frequency of this schedule must be set to something other than Once"
+#~ msgstr ""
+#~ "Częstotliwość tego harmonogramu musi być ustawiona na wartość różną od "
+#~ "Jednorazowo"
+
+#~ msgid "Please fill in the name field."
+#~ msgstr "Proszę wypełnić pole nazwy."
+
+#~ msgid "Please fill in the From account field."
+#~ msgstr "Proszę wypełnić pole Z konta."
+
+#~ msgid "Please fill in the To account field."
+#~ msgstr "Proszę wypełnić pole Na konto."
+
+#~ msgid "Please fill in the payee field."
+#~ msgstr "Proszę wypełnić pole beneficjenta."
+
+#~ msgid "Please fill in the category field."
+#~ msgstr "Proszę wypełnić pole kategorii."
+
+#~ msgid "Please fill in ending date"
+#~ msgstr "Proszę wpisać datę zakończenia"
+
+#~ msgid "Account from and account to are the same"
+#~ msgstr "Konto z i konto na są takie same"
+
+#~ msgid "Exception in loadWidgetsFromSchedule(1)"
+#~ msgstr "Wyjątek w loadWidgetsFromSchedule(1)"
+
+#~ msgid "Exception in loadWidgetsFromSchedule(2)"
+#~ msgstr "Wyjątek w loadWidgetsFromSchedule(2)"
+
+#~ msgid "All split data lost. Please re-enter splits"
+#~ msgstr "Utracono wszystkie dane o podziałach. Proszę wprowadzić je ponownie"
+
+#~ msgid "Error in slotAmountChanged?"
+#~ msgstr "Błąd w slotAmountChanged?"
+
+#~ msgid ""
+#~ "The schedule can not be automatically entered when the start date is on "
+#~ "or before todays date."
+#~ msgstr ""
+#~ "Harmonogram nie może być wprowadzony automatycznie, kiedy data początkowa "
+#~ "jest dzisiaj albo wcześniej."
+
+#~ msgid "The end date can not be set for occurences set to Once"
+#~ msgstr ""
+#~ "Nie można ustawiać daty końcowej, kiedy liczba wystąpień jest równa jeden"
+
+#~ msgid ""
+#~ "The start date must be greater than today, to automatically enter this "
+#~ "schedule."
+#~ msgstr ""
+#~ "Data rozpoczęcia musi być nowsza od dzisiejszej żeby automatycznie "
+#~ "przejść do tego harmonogramu."
+
+#~ msgid "Withdrawal or Transfer"
+#~ msgstr "Wypłata lub przelew"
+
+#~ msgid ""
+#~ "You have specified an %1 category for a %2 schedule. Do you want to keep "
+#~ "it that way?"
+#~ msgstr ""
+#~ "Określiłeś dla harmonogramu %2 kategorię %1. Czy chcesz to tak zachować?"
+
+#~ msgid "Verify category type"
+#~ msgstr "Weryfikacja typu kategorii"
+
+#~ msgid "Bill or Transfer"
+#~ msgstr "Spłata albo przelew"
+
+#~ msgid "Cancel the import operation"
+#~ msgstr "Anuluj operację importu"
+
+#~ msgid ""
+#~ "Use this to abort the import and undo all changes made during import."
+#~ msgstr ""
+#~ "Użyj, żeby przerwać import i wycofać wszystkie dokonane podczas niego "
+#~ "zmiany."
+
+#~ msgid ""
+#~ "You are about to cancel the entire import. Any changes you have made in "
+#~ "this dialog will be lost. Are you sure you want to cancel?"
+#~ msgstr ""
+#~ "Zamierzasz anulować całą operację importu. Wszystkie wprowadzone tu "
+#~ "zmiany zostaną utracone. Czy na pewno anulować?"
+
+#~ msgid "Verify cancel"
+#~ msgstr "Weryfikacja anulowania"
+
+#~ msgid ""
+#~ "The imported data is displayed together with the data already stored in "
+#~ "the file. Imported transactions are shown with a yellow background. "
+#~ "Pressing \"OK\" will accept all transactions, \"Cancel\" will remove all "
+#~ "imported transactions.\n"
+#~ "You may modify the transactions - if need to - before you press \"OK\" or "
+#~ "even delete transactions that have been imported incorrectly (e.g. "
+#~ "duplicate transactions)."
+#~ msgstr ""
+#~ "Dane zaimportowane są wyświetlane razem z danymi już przechowywanymi w "
+#~ "pliku. Zaimportowane transakcje są pokazywane na żółtym tle. Wciśnięcie "
+#~ "\"OK\" spowoduje zaakceptowanie wszystkich transakcji, \"Anuluj\" "
+#~ "natomiast usunięcie wszystkich zaimportowanych transakcji.\n"
+#~ "W razie potrzeby można modyfikować transakcje - zanim wciśnie się \"OK\" "
+#~ "lub usunie transakcje, które zostały niepoprawnie zaimportowane (np. "
+#~ "duplikaty)."
+
+#~ msgid "General settings"
+#~ msgstr "Ustawienia ogólne"
+
+#~ msgid "Equity/Currency/Value options"
+#~ msgstr "Opcje kapitału/waluty/wartości"
+
+#~ msgid "Accounts View"
+#~ msgstr "Widok kont"
+
+#~ msgid "Accounts view settings"
+#~ msgstr "Ustawienia wyglądu kont"
+
+#~ msgid "Use the normal institution view"
+#~ msgstr "Użyj normalnego widoku instytucji"
+
+#~ msgid "Use the new accounts view"
+#~ msgstr "Użyj widoku nowych kont"
+
+#~ msgid "Restrict by date"
+#~ msgstr "Ogranicz po dacie"
+
+#~ msgid "Restrict by transaction state"
+#~ msgstr "Ogranicz po stanie transakcji"
+
+#~ msgid "Data Encryption Settings"
+#~ msgstr "Ustawienia szyfrowania"
+
+#~ msgid "List view colour :"
+#~ msgstr "Kolor widoku listy:"
+
+#~ msgid "Mount Point:"
+#~ msgstr "Punkt montowania:"
+
+#~ msgid "textLabel2"
+#~ msgstr "textLabel2"
+
+#~ msgid "Edit Scheduled Transfer"
+#~ msgstr "Edytuj zaplanowany przelew"
+
+#~ msgid "Pay to:"
+#~ msgstr "Płatność dla:"
+
+#~ msgid "From:"
+#~ msgstr "Od:"
+
+#~ msgid "To:"
+#~ msgstr "Do:"
+
+#~ msgid "Amount:"
+#~ msgstr "Suma/kwota:"
+
+#~ msgid "Category:"
+#~ msgstr "Kategoria:"
+
+#~ msgid "Memo:"
+#~ msgstr "Notatka:"
+
+#~ msgid "<b>Name:</b>"
+#~ msgstr "<b>Nazwa:</b>"
+
+#~ msgid "<b>Type:</b>"
+#~ msgstr "<b>Typ:</b>"
+
+#~ msgid "<b>Payee:</b>"
+#~ msgstr "<b>Beneficjent:</b>"
+
+#~ msgid "<b>Category:</b>"
+#~ msgstr "<b>Kategoria:</b>"
+
+#, fuzzy
+#~ msgid "<b>From (account):</b>"
+#~ msgstr "<b>Z:</b>"
+
+#~ msgid "<b>Memo:</b>"
+#~ msgstr "<b>Notatka:</b>"
+
+#, fuzzy
+#~ msgid "<b>To (account):</b>"
+#~ msgstr "<b>Na:</b>"
+
+#~ msgid "<b>Date:</b>"
+#~ msgstr "<b>Data:</b>"
+
+#~ msgid "<b>Amount:</b>"
+#~ msgstr "<b>Suma/kwota:</b>"
+
+#~ msgid "to"
+#~ msgstr "do"
+
+#~ msgid "from"
+#~ msgstr "od"
+
+#~ msgid "Equity-Symbol:"
+#~ msgstr "Symbol kapitału:"
+
+#~ msgid "New Account"
+#~ msgstr "Nowe konto"
+
+#~ msgid "Institution Selection"
+#~ msgstr "Wybór instytucji"
+
+#~ msgid "<u>I</u>nstitution"
+#~ msgstr "<u>I</u>nstytucja"
+
+#~ msgid "Account Type Selection"
+#~ msgstr "Wybór typu konta"
+
+#~ msgid "What is the account number?"
+#~ msgstr "Jaki jest numer konta?"
+
+#~ msgid ""
+#~ "If you do not know the account number, please leave this field empty. You "
+#~ "can add the account number at any later time in the account details "
+#~ "dialog. The account number is only used by KMyMoney for online banking."
+#~ msgstr ""
+#~ "Jeśi nie znasz numeru konta, pozostaw to pole puste. Można dodać konto "
+#~ "rachunku później w oknie szczegółów konta. Konto rachunku jest używane "
+#~ "przez KMyMoney dla potrzeb bankowości internetowej."
+
+#~ msgid "Does this investment account has a brokerage account?"
+#~ msgstr "Czy to konto inwestycyjne posiada konto brokerskie?"
+
+#~ msgid "What is the opening balance and date of this account?"
+#~ msgstr "Jaka jest data i saldo konta przy otwieraniu rachunku?"
+
+#~ msgid "What is the currency of this account?"
+#~ msgstr "Jaka jest waluta tego konta?"
+
+#~ msgid "&Price"
+#~ msgstr "&Cena"
+
+#~ msgid "Account Payment"
+#~ msgstr "Płatność z/na konto"
+
+#~ msgid ""
+#~ "Do you wish to add a payment for this credit card account to the list of "
+#~ "monthly payments?"
+#~ msgstr ""
+#~ "Czy chcesz dodać płatność tego konta karty kredytowej do listy płatności "
+#~ "miesięcznych?"
+
+#~ msgid ""
+#~ "The information to create the account has now been collected. Press the "
+#~ "<b>Finish</b> button to actually create the account or the <b>Back</b> "
+#~ "button to modify the settings. The <b>Cancel</b> button will dismiss all "
+#~ "data and leave this wizard.<br>\n"
+#~ "Once the account is successfully created you can enter your transactions "
+#~ "on this account."
+#~ msgstr ""
+#~ "Zebrano informacje potrzebne do utworzenia konta. Proszę wcisnąć przycisk "
+#~ "<b>Zakończ</b>, żeby je stworzyć albo <b>Cofnij</b> w celu zmodyfikowania "
+#~ "ustawień. Przycisk <b>Anuluj</b> spowoduje odrzucenie wszystkich danych i "
+#~ "opuszczenie asystenta.<br>\n"
+#~ "Po pomyślnym utworzeniu konta można wpisywać jego transakcje."
+
+#~ msgid ""
+#~ "Adding a new institution.\n"
+#~ "\n"
+#~ "The only required field is the name, which can be the name of a bank like "
+#~ "Woolwhich, or a descriptive name like Family Cash Accounts."
+#~ msgstr ""
+#~ "Dodawanie nowej instytucji.\n"
+#~ "\n"
+#~ "Jedynym wymaganym polem jest nazwa, która może być zarówno nazwą banku, "
+#~ "jak PKO, jak i nazwą opisową typu Konta pieniężne członków rodziny."
+
+#~ msgid "What should happen with the difference?"
+#~ msgstr "Co ma się stać z różnicą?"
+
+#~ msgid "&Distribute difference among all splits"
+#~ msgstr "&Rozdziel różnicę pomiędzy wszystkie podziały"
+
+#~ msgid "&Leave unassigned"
+#~ msgstr "Pozostaw &nieprzydzielone"
+
+#~ msgid ""
+#~ "The schedule %1 caused an internal problem. Please contact the developers "
+#~ "via e-mail on kmymoney2-developer@lists.sourceforge.net for further "
+#~ "instructions mentioning this problem."
+#~ msgstr ""
+#~ "Harmonogram %1 spowodował wystąpienie wewnętrznego błędu. Proszę "
+#~ "skontaktować się z programistami poprzez e-mail kmymoney2-developer@lists."
+#~ "sourceforge.net wspominając o nim w celu dalszych instrukcji."
+
+#~ msgid "Payee changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Zmiana beneficjenta. Stary: \"%1\", nowy: \"%2\""
+
+#~ msgid "Category changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Zmiana kategorii. Stara: \"%1\", nowa: \"%2\""
+
+#~ msgid "Memo changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Zmiana notatki. Stara: \"%1\", nowa: \"%2\""
+
+#~ msgid "Amount changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Zmiana kwoty. Stara: \"%1\", nowa: \"%2\""
+
+#~ msgid "%1 items of the details for the transaction have changed."
+#~ msgstr "Zmieniono %1 szczegółów transakcji."
+
+#~ msgid ""
+#~ "Some occurences that are older than '%1' have not been entered yet.\n"
+#~ "\n"
+#~ "Delete all occurences that have not been entered before this date?"
+#~ msgstr ""
+#~ "Niektóre wystąpienia starsze od '%1' nie zostały jeszcze wprowadzone.\n"
+#~ "\n"
+#~ "Czy usunąć wszystkie nie wprowadzone wystąpienia sprzed tej daty?"
+
+#~ msgid ""
+#~ "Are you sure you want to enter this occurence which is %1 days after "
+#~ "today?"
+#~ msgstr "Czy chcesz wprowadzić to wystąpienie, późniejsze o %1 dni od dziś?"
+
+#~ msgid "The date must lie in the range %1 to %2"
+#~ msgstr "Data musi się zawierać pomiędzy %1 a %2"
+
+#~ msgid "1 %2 costs <i>price</i<> %1"
+#~ msgstr "1 %2 kosztuje %1"
+
+#~ msgid ""
+#~ "Do you really want to select %1 as your base currency? This selection can "
+#~ "currently not be modified! If unsure, press 'No' now."
+#~ msgstr ""
+#~ "Czy na pewno wybrać %1 jako walutę podstawową? Obecnie nie jest możliwa "
+#~ "późniejsza zmiana! Jeśli nie jesteś pewien, wciśnij 'Nie'."
+
+#~ msgid "This feature needs to be implemented."
+#~ msgstr "Ta funkcjonalność jeszcze nie jest zaimplementowana."
+
+#~ msgid "Implementation missing"
+#~ msgstr "Brakująca funkcjonalność"
+
+#~ msgid "Use this to abort the dialog"
+#~ msgstr "Użyj, żeby porzucić okienko"
+
+#~ msgid "Use this to accept the data and possibly update the exchange rate"
+#~ msgstr ""
+#~ "Uzyj, żeby zaakceptować zmiany i być może zaktualizować kurs wymiany"
+
+#~ msgid "Use this to accept the action and perform it"
+#~ msgstr "Użyj, żeby zaakceptować i wykonać operację"
+
+#~ msgid "Use this to continue editing the splits"
+#~ msgstr "Użyj, żeby kontynuować edycję podziałów"
+
+#~ msgid "Leave the dialog and return to where you came from."
+#~ msgstr "Opuść okienko i powróć do poprzedniego."
+
+#~ msgid "Open online help"
+#~ msgstr "Otwórz pomoc online"
+
+#~ msgid ""
+#~ "Opens the online help and shows detailed information about transaction "
+#~ "searching."
+#~ msgstr ""
+#~ "Otwiera pomoc online i pokazuje szczegółowe informacje na temat "
+#~ "wyszukiwania transakcji."
+
+#~ msgid "What is the opening balance and date of this brokerage account?"
+#~ msgstr "Jaka jest data i saldo konta przy otwieraniu rachunku brokerskiego?"
+
+#~ msgid "Please enter the payment amount."
+#~ msgstr "Proszę podać kwotę płatności."
+
+#~ msgid "Please enter the schedule name."
+#~ msgstr "Proszę wpisać nazwę harmonogramu."
+
+#~ msgid "Please enter the payee name."
+#~ msgstr "Proszę wpisać nazwę beneficjenta."
+
+#~ msgid "Please select the account."
+#~ msgstr "Proszę wybrać rachunek."
+
+#~ msgid ""
+#~ "Use the checking account type to manage activities on your checking "
+#~ "account e.g. payments, checks and cash card purchases."
+#~ msgstr ""
+#~ "Użyj konta typu oszczędnościowo-rozliczeniowego, żeby zarządzać "
+#~ "czynnościami związanymi z rachunkiem oszczędnościowo-rozliczeniowym, jak "
+#~ "np. płatności, czeki i zakupy kartą bankomatową."
+
+#~ msgid ""
+#~ "Use the savings account type to manage activities on your savings account."
+#~ msgstr "Użyj rachunku oszczędnościowego, żeby zarządzać oszczędnościami."
+
+#~ msgid ""
+#~ "Use the credit card account type to manage activities on your credit card."
+#~ msgstr ""
+#~ "Użyj rachunku kredytowego, by zarządzać czynnościami związanymi z kartami "
+#~ "kredytowymi."
+
+#~ msgid "Use the cash account type to manage activities in your wallet."
+#~ msgstr "Użyj konta gotówkowego, żeby zarządzać portfelem."
+
+#~ msgid ""
+#~ "Use the asset account type to manage assets (e.g. your house, car or art "
+#~ "collection)."
+#~ msgstr ""
+#~ "Uzyj konta aktywów, żeby zarządzać aktywami (np. swoim domem, samochodem "
+#~ "albo kolekcją dzieł sztuki)."
+
+#~ msgid ""
+#~ "Use the liability account type to manage any type of liability except "
+#~ "amortization loans. Use it for taxes you owe or money you borrowed from "
+#~ "friends. For amortization loans like mortgages you should create a loan "
+#~ "account."
+#~ msgstr ""
+#~ "Użyj konta pasywów do zarządzania wszelkimi wierzytelnościami, "
+#~ "zobowiązaniami za wyjątkiem pożyczek zamortyzowanych. Używaj go dla "
+#~ "podatków do zapłacenia albo pieniędzy, które pożyczyłeś od przyjaciół. "
+#~ "Dla pożyczek zamortyzowanych jak kredyty hipoteczne powinieneś utworzyć "
+#~ "konto pożyczek."
+
+#~ msgid ""
+#~ "Use the loan account type to manage amortization loans (e.g. mortgages, "
+#~ "car loan, money you lend, private loans etc.)."
+#~ msgstr ""
+#~ "Użyj konta pożyczkowego, żeby zarządzać pożyczkami amortyzowanymi (np. "
+#~ "kredyty hipoteczne, pożyczka na samochód, pieniądze komuś pożyczone, "
+#~ "prywatne pożyczki itd.)."
+
+#~ msgid ""
+#~ "Use the investment account to manage your stock, mutual fund and other "
+#~ "investments."
+#~ msgstr ""
+#~ "Użyj rachunku inwestycyjnego, żeby zarządzać papierami wartościowymi, "
+#~ "funduszami inwestycyjnymi i innymi inwestycjami."
+
+#~ msgid "Explanation is not yet available! UnknownAccountType will be set"
+#~ msgstr ""
+#~ "Wyjaśnienie nie jest jeszcze dostępne. Zostanie ustawiony nieznany typ "
+#~ "konta"
+
+#~ msgid "Account with that name already exists."
+#~ msgstr "Konto o tej nazwie już istnieje."
+
+#~ msgid "Category with that name already exists."
+#~ msgstr "Kategoria o tej nazwie już istnieje."
+
+#~ msgid "chkVersion: Element %1 must have version %2"
+#~ msgstr "chkVersion: Element %1 musi być w wersji %2"
diff --git a/po/pt.po b/po/pt.po
new file mode 100644
index 0000000..2968043
--- /dev/null
+++ b/po/pt.po
@@ -0,0 +1,13747 @@
+# translation of pt.po to português
+# adapted from pt_BR.po (Português do Brasil)
+#
+# This file is distributed under the same license as the KMyMoney package.
+#
+#
+# Luís Pedro Coelho <luis@luispedro.org>, 2004.
+# Rogério Guerra Borin <rogerio.borin@ig.com.br>, 2004 (Português do Brasil).
+# Jose Jorge <jjorge@free.fr>, 2008, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: pt\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-25 19:04+0200\n"
+"PO-Revision-Date: 2009-02-07 11:10+0100\n"
+"Last-Translator: Jose Jorge <jjorge@free.fr>\n"
+"Language-Team: português <pt@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: wizards/wizardpages/rc.cpp:1
+msgid ""
+"Select groups of accounts that correspond to the ways that you will use "
+"KMyMoney. Each group you select will cause several accounts and categories "
+"to be created. Select the groups that are relevant to you. You can always "
+"create additional accounts manually later."
+msgstr ""
+"Seleccione os grupos de contas que correspondem à maneira de que vai "
+"utilizar KMyMoney. Cada grupo vai criar várias contas e categorias. Escolha "
+"só os grupos que necessita. Vai poder criar mais contas quando precisar."
+
+#: wizards/wizardpages/rc.cpp:2
+msgid ""
+"<p>KMyMoney supports multiple currencies, nevertheless one of them will be "
+"used as your base currency. The base currency is used as default for new "
+"accounts and reports. Please select the base currency from the following "
+"list."
+msgstr ""
+"<p>KMyMoney aceita várias moedas, no entanto nenhuma dela será utilizada "
+"como moeda de base. A moeda de base é utilizada por omissão nas novas contas "
+"e nos relatórios. É favor escolher a moeda de base na lista seguinte."
+
+#: dialogs/kequitypriceupdatedlg.cpp:71 dialogs/rc.cpp:399 dialogs/rc.cpp:485
+#: dialogs/rc.cpp:724 dialogs/settings/rc.cpp:108 reports/listtable.cpp:226
+#: views/kinvestmentview.cpp:71 views/kpayeesview.cpp:351 views/rc.cpp:13
+#: widgets/rc.cpp:5 widgets/rc.cpp:34
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1599
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1629
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1673
+#: wizards/wizardpages/rc.cpp:3
+msgid "Name"
+msgstr "Nome"
+
+#: wizards/wizardpages/rc.cpp:4
+msgid "ISO Code"
+msgstr "Código ISO"
+
+# TODO: Verify
+#: dialogs/kequitypriceupdatedlg.cpp:69 dialogs/kequitypriceupdatedlg.cpp:70
+#: dialogs/rc.cpp:71 dialogs/rc.cpp:725 dialogs/settings/rc.cpp:112
+#: views/kinvestmentview.cpp:72 widgets/rc.cpp:37 wizards/wizardpages/rc.cpp:5
+msgid "Symbol"
+msgstr "Símbolo"
+
+#: wizards/wizardpages/rc.cpp:6
+msgid ""
+"<p>Use the fields below to enter some information about yourself.</p>\n"
+"\n"
+"<p>All information is optional and only used to personalize your KMyMoney "
+"file.</p>"
+msgstr ""
+"<p>Use este diálogo para introduzir informações pessoais sobre si.</p>\n"
+"\n"
+"<p>Todas informações são opcionais e são oferecidas para personalizar o seu "
+"ficheiro KMyMoney.</p>"
+
+#: dialogs/rc.cpp:425 wizards/newuserwizard/rc.cpp:27
+#: wizards/wizardpages/rc.cpp:7
+msgid "Town:"
+msgstr "Cidade:"
+
+#: dialogs/rc.cpp:420 wizards/newuserwizard/rc.cpp:22
+#: wizards/wizardpages/rc.cpp:8
+msgid "County/State:"
+msgstr "País/Estado:"
+
+#: dialogs/rc.cpp:391 dialogs/rc.cpp:421 wizards/newuserwizard/rc.cpp:23
+#: wizards/wizardpages/rc.cpp:9
+msgid "Street:"
+msgstr "Rua:"
+
+#: dialogs/rc.cpp:422 wizards/newuserwizard/rc.cpp:24
+#: wizards/wizardpages/rc.cpp:10
+msgid "Email:"
+msgstr "Email:"
+
+#: dialogs/rc.cpp:424 wizards/newuserwizard/rc.cpp:26
+#: wizards/wizardpages/rc.cpp:11
+msgid "Telephone:"
+msgstr "Telefone:"
+
+#: dialogs/rc.cpp:423 wizards/newuserwizard/rc.cpp:25
+#: wizards/wizardpages/rc.cpp:12
+msgid "Your name:"
+msgstr "Nome:"
+
+#: dialogs/rc.cpp:427 wizards/newuserwizard/rc.cpp:29
+#: wizards/wizardpages/rc.cpp:13
+msgid "Load from Addressbook"
+msgstr "Carregar a partir do Livro de Endereços"
+
+#: dialogs/rc.cpp:392 dialogs/rc.cpp:426 views/rc.cpp:68
+#: wizards/wizardpages/rc.cpp:14
+msgid "Postal Code:"
+msgstr "Código Postal:"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:82
+msgid "KMyMoney New Account Setup"
+msgstr "KMyMoney Configuração de Nova Conta "
+
+#: dialogs/rc.cpp:360 dialogs/rc.cpp:361 reports/listtable.cpp:230
+#: wizards/newaccountwizard/knewaccountwizard.cpp:83
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1616
+#: wizards/newaccountwizard/rc.cpp:61
+msgid "Institution"
+msgstr "Instituição"
+
+#: dialogs/investactivities.cpp:198 dialogs/investactivities.cpp:286
+#: dialogs/investactivities.cpp:367 dialogs/kfindtransactiondlg.cpp:181
+#: dialogs/rc.cpp:139 dialogs/rc.cpp:192 dialogs/rc.cpp:207
+#: dialogs/transactioneditor.cpp:734 reports/listtable.cpp:201
+#: reports/pivottable.cpp:1336 reports/pivottable.cpp:1586
+#: views/kforecastview.cpp:393 views/kgloballedgerview.cpp:175
+#: views/khomeview.cpp:418 views/khomeview.cpp:491 views/khomeview.cpp:525
+#: views/khomeview.cpp:764 views/khomeview.cpp:967 views/khomeview.cpp:1437
+#: views/kscheduledview.cpp:71 views/rc.cpp:17 views/rc.cpp:44
+#: widgets/kmymoneyaccounttreebase.cpp:58
+#: widgets/kmymoneyaccounttreeforecast.cpp:41 widgets/rc.cpp:109
+#: widgets/register.cpp:566 widgets/transaction.cpp:978
+#: widgets/transaction.cpp:1535
+#: wizards/newaccountwizard/knewaccountwizard.cpp:84
+msgid "Account"
+msgstr "Conta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:85
+msgid "Broker"
+msgstr "Corretor"
+
+#: dialogs/kfindtransactiondlg.cpp:225 dialogs/rc.cpp:70 dialogs/rc.cpp:104
+#: dialogs/rc.cpp:159 dialogs/rc.cpp:223 dialogs/rc.cpp:246 dialogs/rc.cpp:751
+#: dialogs/settings/rc.cpp:109 widgets/rc.cpp:35 widgets/register.cpp:568
+#: wizards/newaccountwizard/knewaccountwizard.cpp:86
+msgid "Details"
+msgstr "Detalhes"
+
+#: dialogs/knewloanwizard.cpp:636 dialogs/rc.cpp:231 dialogs/rc.cpp:608
+#: kmymoneyutils.cpp:191 views/khomeview.cpp:399
+#: wizards/newaccountwizard/knewaccountwizard.cpp:87
+#: wizards/newaccountwizard/knewaccountwizard.cpp:880
+msgid "Payments"
+msgstr "Pagamentos"
+
+#: dialogs/investactivities.cpp:195 dialogs/investactivities.cpp:283
+#: dialogs/investactivities.cpp:422 dialogs/investtransactioneditor.cpp:217
+#: reports/listtable.cpp:221 widgets/transaction.cpp:1565
+#: wizards/newaccountwizard/knewaccountwizard.cpp:88
+msgid "Fees"
+msgstr "Taxas"
+
+#: dialogs/rc.cpp:624 views/khomeview.cpp:415 views/khomeview.cpp:488
+#: views/khomeview.cpp:522 wizards/newaccountwizard/knewaccountwizard.cpp:89
+msgid "Schedule"
+msgstr "Calendário"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:90
+msgid "Payout"
+msgstr "Pagar a"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:91
+msgid "Parent Account"
+msgstr "Conta Parente"
+
+#: dialogs/rc.cpp:719 wizards/newaccountwizard/knewaccountwizard.cpp:92
+#: wizards/newuserwizard/knewuserwizard.cpp:86
+msgid "Finish"
+msgstr "Terminar"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:248
+msgid "Credit card payment"
+msgstr "Pagamento de Cartão de Crédito"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:264
+#, c-format
+msgid "Loan payment for %1"
+msgstr "Pagamento de financiamento para %1"
+
+#: mymoney/mymoneyscheduled.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:279
+msgid "Loan payment"
+msgstr "Pagamento de financiamento"
+
+#: dialogs/rc.cpp:134 wizards/newaccountwizard/knewaccountwizard.cpp:293
+msgid "Amortization"
+msgstr "Amortização"
+
+#: dialogs/investactivities.cpp:196 dialogs/investactivities.cpp:284
+#: dialogs/investactivities.cpp:366 dialogs/investactivities.cpp:423
+#: dialogs/investtransactioneditor.cpp:227 dialogs/rc.cpp:135
+#: dialogs/rc.cpp:152 dialogs/rc.cpp:544 reports/listtable.cpp:222
+#: widgets/transaction.cpp:1597
+#: wizards/newaccountwizard/knewaccountwizard.cpp:302
+msgid "Interest"
+msgstr "Juros"
+
+#: dialogs/kcurrencycalculator.cpp:282
+#: wizards/newaccountwizard/knewaccountwizard.cpp:351
+#: wizards/newaccountwizard/knewaccountwizard.cpp:356
+msgid "User"
+msgstr "Utilizador"
+
+#: kmymoneyutils.cpp:64 mymoney/mymoneyaccount.cpp:711
+#: reports/querytabletest.cpp:422
+#: wizards/newaccountwizard/knewaccountwizard.cpp:451
+msgid "Checking"
+msgstr "Cheques"
+
+#: kmymoneyutils.cpp:66 mymoney/mymoneyaccount.cpp:714
+#: wizards/newaccountwizard/knewaccountwizard.cpp:452
+msgid "Savings"
+msgstr "Poupança"
+
+#: kmymoneyutils.cpp:68 mymoney/mymoneyaccount.cpp:717
+#: reports/querytabletest.cpp:423
+#: wizards/newaccountwizard/knewaccountwizard.cpp:453
+msgid "Credit Card"
+msgstr "Cartão de Crédito"
+
+#: kmymoneyutils.cpp:70 mymoney/mymoneyaccount.cpp:720
+#: wizards/newaccountwizard/knewaccountwizard.cpp:454
+msgid "Cash"
+msgstr "Dinheiro"
+
+#: kmymoneyutils.cpp:72 mymoney/mymoneyaccount.cpp:723
+#: wizards/newaccountwizard/knewaccountwizard.cpp:455
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+msgid "Loan"
+msgstr "Financiamento"
+
+#: kmymoneyutils.cpp:76 mymoney/mymoneyaccount.cpp:729
+#: wizards/newaccountwizard/knewaccountwizard.cpp:456
+msgid "Investment"
+msgstr "Investimento"
+
+#: converter/mymoneytemplate.cpp:178 converter/mymoneytemplate.cpp:179
+#: dialogs/knewaccountdlg.cpp:1014 kmymoneyutils.cpp:80
+#: mymoney/mymoneyaccount.cpp:735 views/kaccountsview.cpp:352
+#: views/kmymoneyview.cpp:765 widgets/kmymoneyaccountselector.cpp:177
+#: widgets/kmymoneyaccountselector.cpp:356
+#: wizards/newaccountwizard/knewaccountwizard.cpp:457
+msgid "Asset"
+msgstr "Activo"
+
+#: converter/mymoneytemplate.cpp:182 converter/mymoneytemplate.cpp:183
+#: dialogs/knewaccountdlg.cpp:1016 kmymoneyutils.cpp:82
+#: mymoney/mymoneyaccount.cpp:738 views/kaccountsview.cpp:356
+#: views/kmymoneyview.cpp:766 widgets/kmymoneyaccountselector.cpp:178
+#: widgets/kmymoneyaccountselector.cpp:363
+#: wizards/newaccountwizard/knewaccountwizard.cpp:458
+msgid "Liability"
+msgstr "Passivo"
+
+# TODO: Verify
+#: converter/mymoneytemplate.cpp:194 converter/mymoneytemplate.cpp:195
+#: kmymoneyutils.cpp:94 mymoney/mymoneyaccount.cpp:756
+#: views/kaccountsview.cpp:369 views/kmymoneyview.cpp:769
+#: widgets/kmymoneyaccountselector.cpp:181
+#: widgets/kmymoneyaccountselector.cpp:390
+#: wizards/newaccountwizard/knewaccountwizard.cpp:460
+msgid "Equity"
+msgstr "Acção Ordinária"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid ""
+"Please make sure to enter the correct conversion for the selected opening "
+"date. If you requested an online quote it might be provided for a different "
+"date."
+msgstr ""
+"Por favor assegure-se que o valor de conversão é correcto na data de "
+"abertura indicada. Se pediu um valor em linha pode ser indicado para uma "
+"data diferente."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid "Check date"
+msgstr "Verificar a data"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:562
+msgid "1 %1 equals %2"
+msgstr "1 %1 vale %2"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:577
+msgid "Conversion rate is not positive"
+msgstr "A taxa de conversão não é positiva"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:583
+msgid "No account name supplied"
+msgstr "Nenhum nome de conta indicado"
+
+#: dialogs/keditscheduledlg.cpp:114 mymoney/mymoneyscheduled.cpp:1026
+#: wizards/newaccountwizard/knewaccountwizard.cpp:680
+msgid "Write check"
+msgstr "Escrever um cheque"
+
+#: dialogs/keditscheduledlg.cpp:111 mymoney/mymoneyscheduled.cpp:1014
+#: wizards/newaccountwizard/knewaccountwizard.cpp:682
+msgid "Direct debit"
+msgstr "Débito directo"
+
+#: dialogs/keditscheduledlg.cpp:113 mymoney/mymoneyscheduled.cpp:1032
+#: wizards/newaccountwizard/knewaccountwizard.cpp:683
+msgid "Bank transfer"
+msgstr "Transferência de Banco"
+
+#: dialogs/keditscheduledlg.cpp:112 mymoney/mymoneyscheduled.cpp:1029
+#: wizards/newaccountwizard/knewaccountwizard.cpp:685
+msgid "Standing order"
+msgstr "Ordem permanente"
+
+#: dialogs/keditscheduledlg.cpp:110 mymoney/mymoneyscheduled.cpp:1020
+#: wizards/newaccountwizard/knewaccountwizard.cpp:686
+msgid "Manual deposit"
+msgstr "Depósito manual"
+
+#: dialogs/keditscheduledlg.cpp:109 mymoney/mymoneyscheduled.cpp:1017
+#: wizards/newaccountwizard/knewaccountwizard.cpp:687
+msgid "Direct deposit"
+msgstr "Depósito directo"
+
+#: dialogs/keditscheduledlg.cpp:115 mymoney/mymoneyscheduled.cpp:1023
+#: wizards/newaccountwizard/knewaccountwizard.cpp:688
+msgid "Other"
+msgstr "Outro"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:697
+msgid "CreditCard %1 monthly payment"
+msgstr "Pagamento mensal do cartão %1"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:703
+msgid "Finish entry and create account"
+msgstr "Terminar e criar a conta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:705
+msgid "Finish entry and create account and schedule"
+msgstr "Terminar e criar a conta e o evento recorrente"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:708
+msgid "Next due date is prior to opening date"
+msgstr "A data seguinte é anterior à data de abertura"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:712
+msgid "No account selected"
+msgstr "Nenhuma conta seleccionada"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:716
+msgid "No amount for payment selected"
+msgstr "Nenhuma quantidade para o pagamento seleccionado"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:720
+msgid "No payee for payment selected"
+msgstr "Nenhum beneficiário para o pagamento seleccionado"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:724
+msgid "No name assigned for schedule"
+msgstr "Nenhum nome atribuído para agendar"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:805
+msgid "No payee supplied"
+msgstr "Nenhum pagamento fornecido"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:819
+msgid "No opening balance supplied"
+msgstr "Nenhum valor de abertura indicado"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:826
+msgid "An interest change can only happen after the first payment"
+msgstr "Uma mudança de interesse só pode ocorrer após o primeiro pagamento"
+
+#: dialogs/knewloanwizard.cpp:615 dialogs/knewloanwizard.cpp:634
+#: wizards/newaccountwizard/knewaccountwizard.cpp:884
+#: wizards/newaccountwizard/rc.cpp:55
+msgid "Months"
+msgstr "Meses"
+
+#: dialogs/knewloanwizard.cpp:616 dialogs/knewloanwizard.cpp:635
+#: wizards/newaccountwizard/knewaccountwizard.cpp:885
+#: wizards/newaccountwizard/knewaccountwizard.cpp:889
+#: wizards/newaccountwizard/rc.cpp:56
+msgid "Years"
+msgstr "Anos"
+
+#: dialogs/knewloanwizard.cpp:711
+#: wizards/newaccountwizard/knewaccountwizard.cpp:961
+#, c-format
+msgid "KMyMoney has calculated the amount of the loan as %1."
+msgstr "O KMyMoney calculou o montante do financiamento como %1."
+
+#: dialogs/knewloanwizard.cpp:718
+#: wizards/newaccountwizard/knewaccountwizard.cpp:968
+msgid "KMyMoney has calculated the interest rate to %1%."
+msgstr "O KMyMoney calculou a taxa de juro como %1%."
+
+#: dialogs/knewloanwizard.cpp:731
+#: wizards/newaccountwizard/knewaccountwizard.cpp:981
+msgid ""
+"KMyMoney has calculated a periodic payment of %1 to cover principal and "
+"interest."
+msgstr ""
+"O KMyMoney calculou um pagamento periódico de %1 para cobrir o principal e o "
+"juro."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:993
+#, c-format
+msgid ""
+"The number of payments has been decremented and the balloon payment has been "
+"modified to %1."
+msgstr ""
+"O número de pagamentos foi diminuído e o pagamento balão foi modificado para "
+"%1."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1001
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1021
+#, c-format
+msgid "The balloon payment has been modified to %1."
+msgstr "O pagamento balão foi modificado para %1."
+
+#: dialogs/knewloanwizard.cpp:763
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1013
+msgid "KMyMoney has calculated the term of your loan as %1. "
+msgstr "O KMyMoney calculou o prazo do seu financiamento como %1. "
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1052
+msgid "KMyMoney has calculated a balloon payment of %1 for this loan."
+msgstr "KMyMoney calculou um pagamento balão de %1 neste empréstimo."
+
+#: dialogs/knewloanwizard.cpp:809
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1059
+msgid "KMyMoney has successfully verified your loan information."
+msgstr "O KMyMoney verificou com sucesso as informações do seu financiamento."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1067
+msgid ""
+"You have entered mis-matching information. Please modify your figures or "
+"leave one value empty to let KMyMoney calculate it for you"
+msgstr ""
+"Você escreveu uma informação que não concorda. É favor mudar ou deixar um "
+"valor vazio para que o KMyMoney o possa calcular para si"
+
+#: dialogs/knewloanwizard.cpp:504 dialogs/knewloanwizard.cpp:513
+#: dialogs/knewloanwizard.cpp:522 dialogs/knewloanwizard.cpp:532
+#: dialogs/knewloanwizard.cpp:820
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1070
+msgid "Calculation error"
+msgstr "Erro de cálculo"
+
+#: dialogs/knewloanwizard.cpp:824
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1074
+msgid ""
+"\n"
+"\n"
+"Accept this or modify the loan information and recalculate."
+msgstr ""
+"\n"
+"\n"
+"Aceitar isto ou modificar as informações de financiamento e recalcular."
+
+#: dialogs/knewloanwizard.cpp:826
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1076
+msgid "Calculation successful"
+msgstr "Cálculo bem sucedido"
+
+#: dialogs/knewloanwizard.cpp:846
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1129
+#, c-format
+msgid ""
+"_n: one month\n"
+"%n months"
+msgstr "%n meses"
+
+#: dialogs/knewloanwizard.cpp:850
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1133
+#, c-format
+msgid ""
+"_n: one year\n"
+"%n years"
+msgstr "%n anos"
+
+#: dialogs/knewloanwizard.cpp:854
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1137
+#, c-format
+msgid ""
+"_n: one payment\n"
+"%n payments"
+msgstr "%n pagamentos"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1190
+msgid "Press Calculate to verify the values"
+msgstr "Carregue em Calcular para obter os valores"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1194
+msgid "Not all details supplied"
+msgstr "Não indicar todos os detalhes"
+
+#: dialogs/kaccountselectdlg.cpp:70 dialogs/knewloanwizard.cpp:122
+#: dialogs/knewloanwizard.cpp:136
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1381
+msgid "&Create..."
+msgstr "&Criar..."
+
+#: dialogs/knewloanwizard.cpp:138
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1383
+msgid "Create a new asset account"
+msgstr "Criar uma nova conta de activos"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1384
+msgid ""
+"If the asset account does not yet exist, press this button to create it."
+msgstr "Se a conta de activos não existir, carregue neste botão para a criar."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1596
+msgid "Account information"
+msgstr "Informação da conta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1601
+#: wizards/newaccountwizard/rc.cpp:59
+msgid "Subaccount of"
+msgstr "Sub-conta de"
+
+#: dialogs/rc.cpp:225 dialogs/rc.cpp:326 dialogs/rc.cpp:371 dialogs/rc.cpp:723
+#: plugins/ofximport/dialogs/rc.cpp:23 reports/listtable.cpp:225
+#: widgets/kmymoneyaccounttreebase.cpp:113 widgets/register.cpp:61
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1606
+msgid "Type"
+msgstr "Tipo"
+
+#: dialogs/kcurrencyeditdlg.cpp:62 dialogs/rc.cpp:56 dialogs/rc.cpp:59
+#: dialogs/rc.cpp:75 dialogs/rc.cpp:727 dialogs/rc.cpp:792
+#: kmymoneyutils.cpp:84 kmymoneyutils.cpp:111 mymoney/mymoneyaccount.cpp:741
+#: mymoney/mymoneysecurity.cpp:169 reports/listtable.cpp:233
+#: widgets/kmymoneypriceview.cpp:127
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1607
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1630
+#: wizards/newaccountwizard/rc.cpp:6 wizards/newaccountwizard/rc.cpp:24
+msgid "Currency"
+msgstr "Moeda"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1608
+#: wizards/newaccountwizard/rc.cpp:7 wizards/newuserwizard/rc.cpp:9
+msgid "Opening date"
+msgstr "Data de abertura"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1610
+#: wizards/newaccountwizard/rc.cpp:9
+msgid "Conversion rate"
+msgstr "Taxa de cambio"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1613
+#: wizards/newaccountwizard/rc.cpp:15 wizards/newuserwizard/rc.cpp:13
+msgid "Opening balance"
+msgstr "Valor de abertura"
+
+#: dialogs/keditscheduledlg.cpp:507 dialogs/transactioneditor.cpp:784
+#: dialogs/transactioneditor.cpp:848 plugins/ofximport/dialogs/rc.cpp:22
+#: widgets/rc.cpp:111 widgets/register.cpp:59 widgets/transaction.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1618
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1632
+msgid "Number"
+msgstr "Número"
+
+#: dialogs/rc.cpp:365 wizards/newaccountwizard/knewaccountwizard.cpp:1621
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1634
+#: wizards/newaccountwizard/rc.cpp:26 wizards/newaccountwizard/rc.cpp:66
+msgid "IBAN"
+msgstr "IBAN"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1627
+msgid "Brokerage Account"
+msgstr "Conta de Corretagem"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1640
+msgid "Loan information"
+msgstr "Informação do empréstimo"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1643
+msgid "Amount borrowed"
+msgstr "Quantidade emprestada"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1645
+msgid "Amount lent"
+msgstr "Quantidade devida"
+
+#: dialogs/rc.cpp:515 dialogs/rc.cpp:546
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1647
+#: wizards/newaccountwizard/rc.cpp:75
+msgid "Interest rate"
+msgstr "Taxa de juro"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1648
+msgid "Interest rate is"
+msgstr "A taxa de juros é"
+
+#: dialogs/rc.cpp:509 dialogs/rc.cpp:572
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1649
+msgid "Principal and interest"
+msgstr "Principal e juros"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1650
+#: wizards/newaccountwizard/rc.cpp:90
+msgid "Additional fees"
+msgstr "Honorários adicionais"
+
+#: dialogs/rc.cpp:525 wizards/newaccountwizard/knewaccountwizard.cpp:1651
+#: wizards/newaccountwizard/rc.cpp:44
+msgid "Payment frequency"
+msgstr "Frequência de pagamento"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1652
+#: wizards/newaccountwizard/rc.cpp:105
+msgid "Payment account"
+msgstr "Conta de pagamento"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1655
+msgid "Payout information"
+msgstr "Informação do pagamento"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1658
+msgid "Refinance"
+msgstr "Refinanciar"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1661
+msgid "Transfer amount to"
+msgstr "Transferir a quantidade para"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1663
+msgid "Transfer amount from"
+msgstr "Transferir a quantidade de"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1665
+msgid "Payment date"
+msgstr "Data de pagamento"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1671
+msgid "Schedule information"
+msgstr "Informação de agendamento"
+
+#: reports/listtable.cpp:228
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1684
+msgid "Occurence"
+msgstr "Ocorrência"
+
+#: mymoney/mymoneyscheduled.cpp:891 mymoney/mymoneyscheduled.cpp:947
+#: mymoney/mymoneyscheduled.cpp:1283 mymoney/mymoneyscheduletest.cpp:1343
+#: widgets/rc.cpp:19 widgets/rc.cpp:74
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+msgid "Monthly"
+msgstr "Mensalmente"
+
+# TODO: Verify
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1677
+msgid "Paid from"
+msgstr "Pago de"
+
+#: widgets/kmymoneycombo.cpp:473 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1678
+msgid "Pay to"
+msgstr "Pago para"
+
+#: dialogs/investactivities.cpp:197 dialogs/investactivities.cpp:285
+#: dialogs/investactivities.cpp:365 dialogs/kfindtransactiondlg.cpp:197
+#: dialogs/kmymoneysplittable.cpp:80 dialogs/rc.cpp:51 dialogs/rc.cpp:212
+#: reports/listtable.cpp:197 views/khomeview.cpp:421 views/khomeview.cpp:494
+#: views/khomeview.cpp:528 views/kscheduledview.cpp:73 views/rc.cpp:63
+#: widgets/register.cpp:58 widgets/transaction.cpp:1055
+#: widgets/transaction.cpp:1578 widgets/transaction.cpp:1610
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1679
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1685
+msgid "Amount"
+msgstr "Montante"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1680
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1686
+msgid "First payment due"
+msgstr "Primeiro pagamento devido"
+
+#: dialogs/rc.cpp:102 wizards/newaccountwizard/knewaccountwizard.cpp:1681
+#: wizards/newaccountwizard/rc.cpp:115
+msgid "Payment method"
+msgstr "Método de pagamento"
+
+#: wizards/newaccountwizard/rc.cpp:1
+msgid ""
+"This page summarizes the data you have entered. Press <b>Finish</b> to "
+"create the account, schedules, etc. or use <b>Back</b> to modify your "
+"entries."
+msgstr ""
+"Esta página resume os dados que você inseriu. Pressione <b>Terminar</b> para "
+"criar a conta, agendamentos, etc, ou use <b>Recuar</b> para modificar suas "
+"entradas."
+
+#: wizards/newaccountwizard/rc.cpp:2
+msgid "Item"
+msgstr "Item"
+
+#: dialogs/rc.cpp:110 dialogs/rc.cpp:165 dialogs/rc.cpp:252 dialogs/rc.cpp:757
+#: dialogs/rc.cpp:818 views/kinvestmentview.cpp:74 widgets/register.cpp:574
+#: wizards/newaccountwizard/rc.cpp:3
+msgid "Value"
+msgstr "Valor"
+
+#: wizards/newaccountwizard/rc.cpp:4
+msgid ""
+"Enter the name of the account under which it is known within KMyMoney.\n"
+"Select the type for the new account. Use the <b>What's this?</b> feature to "
+"see more details about the various account types.\n"
+"Enter the date the account was opened and its currency."
+msgstr ""
+"Indique o nome da conta sob o qual vai ser conhecida no KMyMoney.\n"
+"Escolha o tipo para a nova conta. Use a função<b> O Que é isto?</b> para "
+"saber mais acerca dos vários tipos de contas.\n"
+"Indique também a data de abertura da conta e a sua moeda."
+
+#: wizards/newaccountwizard/rc.cpp:5
+msgid "Select the currency in which this account is denominated."
+msgstr "Seleccione a moeda na qual esta conta será denominada."
+
+#: wizards/newaccountwizard/rc.cpp:8
+#, fuzzy
+msgid ""
+"The opening balance is the balance of the account when you start using it "
+"with KMyMoney. For new accounts this is usually 0 but for existing accounts "
+"this may well differ. Please consult the account statements to figure out "
+"this value. The opening balance is to be provided in the currency of the "
+"account as selected with the currency button."
+msgstr ""
+"O valor de abertura é o saldo da conta quando você começa a utilizar-la com "
+"o KMyMoney. Para novas contas é habitualmente zero mas para contas que já "
+"existem pode ser diferente. Consulte os seus dados para saber o valor. O "
+"valor de abertura deve ser indicado na moeda escolhida para a conta."
+
+# TODO: Verify
+#: wizards/newaccountwizard/rc.cpp:10
+msgid ""
+"The opening date would be the date of the last statement. In case you want "
+"to keep track of transactions prior to this date, enter the ending balance "
+"and statement date of a prior statement and add all following transactions "
+"into KMyMoney.\n"
+"<br>\n"
+"<i>Note</i>: If you do not know the exact amount of the opening balance, "
+"enter an estimate. You can change this value later before you reconcile this "
+"account for the first time."
+msgstr ""
+"A data de abertura será a data actual. Se quiser guardar as transacções "
+"anteriores, indique uma data anterior, e terá de inserir todas as "
+"transacções subsequentes no KMyMoney.\n"
+"<br>\n"
+"<i>Nota</i>: Se não conhecer o valor exacto de abertura, meta uma estimação. "
+"Poderá mudar este valor mais tarde antes de reconciliar a sua conta pela "
+"primeira vêz."
+
+#: dialogs/rc.cpp:52 dialogs/rc.cpp:54 dialogs/rc.cpp:57 dialogs/rc.cpp:60
+#: dialogs/rc.cpp:748 dialogs/rc.cpp:749 dialogs/rc.cpp:768 widgets/rc.cpp:6
+#: widgets/rc.cpp:7 widgets/rc.cpp:8 widgets/rc.cpp:9 widgets/rc.cpp:10
+#: widgets/rc.cpp:11 widgets/rc.cpp:12 widgets/rc.cpp:13 widgets/rc.cpp:14
+#: widgets/rc.cpp:15 widgets/rc.cpp:16 widgets/rc.cpp:17
+#: wizards/newaccountwizard/rc.cpp:11 wizards/newaccountwizard/rc.cpp:88
+#: wizards/newaccountwizard/rc.cpp:91 wizards/newaccountwizard/rc.cpp:93
+#: wizards/newuserwizard/rc.cpp:14
+msgid "xxx"
+msgstr "xxx"
+
+#: wizards/newaccountwizard/rc.cpp:12
+msgid "Account type"
+msgstr "Tipo de conta"
+
+#: wizards/newaccountwizard/rc.cpp:13
+msgid ""
+"For foreign currencies an initial conversion rate needs to be provided. This "
+"should be the price of the foreign currency in the base currency on the "
+"opening date of the account."
+msgstr ""
+"Para moedas estrangeiras uma taxa de conversão inicial tem de ser indicada. "
+"Isto deveria ser o preço da moeda estrangeira na moeda de base, à data de "
+"abertura da conta."
+
+#: wizards/newaccountwizard/rc.cpp:14
+msgid "Account name"
+msgstr "Nome da conta"
+
+#: wizards/newaccountwizard/rc.cpp:16
+msgid ""
+"<p><b>Checking</b>\n"
+"Use the checking account type to manage activities on your checking account "
+"e.g. payments, checks and cash card purchases.</p>\n"
+"\n"
+"<p><b>Savings</b>\n"
+"Use the savings account type to manage activities on your savings account.</"
+"p>\n"
+"\n"
+"<p><b>Credit Card</b>\n"
+"Use the credit card account type to manage activities on your credit card.</"
+"p>\n"
+"\n"
+"<p><b>Cash</b>\n"
+"\n"
+"Use the cash account type to manage activities in your wallet.</p>\n"
+"\n"
+"<p><b>Loan</b>\n"
+"Use the loan account type to manage amortization loans (e.g. mortgages, car "
+"loan, money you lend, private loans etc.).</p>\n"
+"\n"
+"<p><b>Investment</b>\n"
+"Use the investment account to manage your stock, mutual fund and other "
+"investments.</p>\n"
+"\n"
+"<p><b>Asset</b>\n"
+"Use the asset account type to manage assets (e.g. your house, car or art "
+"collection).</p>\n"
+"\n"
+"<p><b>Liability</b>\n"
+"Use the liability account type to manage any type of liability except "
+"amortization loans. Use it for taxes you owe or money you borrowed from "
+"friends. For amortization loans like mortgages you should create a loan "
+"account.</p>"
+msgstr ""
+"<p><b> Corrente</b> a verificar conta tipo até ligada a verificar conta e g "
+"e</p> n\n"
+"<p><b> Poupança</b> conta tipo até ligada conta</p> n\n"
+"<p><b> Crédito Cartão</b> conta tipo até ligada</p> n\n"
+"<p><b> Dinheiro</b> n conta tipo até em</p> n\n"
+"<p><b> Financiamento</b> conta tipo até e g emprestado para privado</p> n\n"
+"<p><b> Investimento</b> conta até e outros</p> n\n"
+"<p><b> Ativo</b> conta tipo até e g casa ou</p> n\n"
+"<p><b> Passivo</b> conta tipo até qualquer tipo de Usar para ou emprestado "
+"de de Para tal como a conta</p>"
+
+#: wizards/newaccountwizard/rc.cpp:17
+msgid "Preferred account"
+msgstr "Conta preferida"
+
+# TODO: Verify
+#: wizards/newaccountwizard/rc.cpp:18
+msgid ""
+"Mark this checkbox if the account should be maintained as preferred account"
+msgstr ""
+"Marque este checkbox caso a conta deva ser mantida como conta preferida"
+
+#: wizards/newaccountwizard/rc.cpp:19
+msgid ""
+"Selecting the <b>Preferred Account</b> checkbox will allow preferred access "
+"in some dialogs and views of KMyMoney."
+msgstr ""
+"Assinalar a caixa de <b>Conta Preferida</b> permitirá acesso preferencial em "
+"algumas janelas e visões do KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:20
+msgid "Enter a name under which this account is known within KMyMoney."
+msgstr "Insira um nome pelo qual esta conta será conhecida dentro do KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:21
+msgid "Online quote"
+msgstr "Cotações em linha"
+
+#: wizards/newaccountwizard/rc.cpp:22
+msgid ""
+"Does this investment account have a brokerage account?<p>\n"
+"\n"
+"<b>Check</b> the mark if this investment account has an associated account "
+"for money that is not invested.<br>\n"
+"\n"
+"<b>Uncheck</b> it if you don't use this account for active stock brokerage. "
+"You should also uncheck it if this account is not maintained by a bank or "
+"broker."
+msgstr ""
+"Esta conta de investimento possui uma conta de corretagem?<p>\n"
+"\n"
+"Selecione <b>Sim</b> se a conta de investimento possui uma conta associada "
+"para o dinheiro que não é investido.<br>\n"
+"\n"
+"Selecione <b>Não</b> se você não usa esta conta para corretagem dos ativos "
+"das acções. Você também deve optar por isso se esta conta não é mantida por "
+"um banco ou corretor."
+
+#: wizards/newaccountwizard/rc.cpp:23
+msgid "Create brokerage account"
+msgstr "Criar conta de corretagem"
+
+#: wizards/newaccountwizard/rc.cpp:25 wizards/newaccountwizard/rc.cpp:64
+msgid "Account number"
+msgstr "Número de conta "
+
+#: wizards/newaccountwizard/rc.cpp:27
+msgid ""
+"Please select the required options. Please use the <b>What's this?</b> "
+"feature to see more information about the items."
+msgstr ""
+"Por favor, seleccione as opções necessárias. Use o recurso <b>O quê é isto?</"
+"b> para obter mais informações sobre as opções."
+
+#: wizards/newaccountwizard/rc.cpp:28
+msgid "What is the type of the loan?"
+msgstr "Qual é o tipo de empréstimo?"
+
+#: dialogs/rc.cpp:481 wizards/newaccountwizard/rc.cpp:29
+msgid "I am borrowing money"
+msgstr "Eu estou pedindo dinheiro emprestado"
+
+#: dialogs/rc.cpp:482 wizards/newaccountwizard/rc.cpp:30
+msgid "I am lending money"
+msgstr "Eu estou emprestando dinheiro a alguém"
+
+#: wizards/newaccountwizard/rc.cpp:31
+msgid "Who is the payee/payer of the loan?"
+msgstr "Quem é o pagador do empréstimo?"
+
+#: wizards/newaccountwizard/rc.cpp:32
+msgid ""
+"Enter the name of the person or bank you owe money or who owes you money.\n"
+"\n"
+"If the name does not exist within KMyMoney's database, you are asked if you "
+"want to create it."
+msgstr ""
+"Insira o nome da pessoa ou banco do qual você deve dinheiro ou que deve "
+"dinheiro para você.\n"
+"\n"
+"Se o nome não existir no banco de dados do KMyMoney, será perguntado se "
+"deseja criá-lo."
+
+#: wizards/newaccountwizard/rc.cpp:33
+msgid "Did you make/receive any payments yet?"
+msgstr "make qualquer?"
+
+# TODO: Neste ou nesse?
+# TODO: Deságio?
+#: wizards/newaccountwizard/rc.cpp:36
+msgid ""
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?\n"
+"\n"
+"Note: Payments made to obtain the loan (e.g. Disagio) are not considered as "
+"payments in this context."
+msgstr ""
+"Ocorreram quaisquer pagamentos para este empréstimo estejam eles registrados "
+"no KMyMoney ou não?\n"
+"\n"
+"Nota: Pagamentos feitos para obter o empréstimo (como taxas de serviço) não "
+"são considerados como pagamentos neste contexto."
+
+#: wizards/newaccountwizard/rc.cpp:37
+msgid "Which payments do you want to record?"
+msgstr "Quais pagamentos você deseja registrar?"
+
+#: wizards/newaccountwizard/rc.cpp:38
+msgid "All payments"
+msgstr "Todos os pagamentos"
+
+# TODO: Verify 'home'
+#: wizards/newaccountwizard/rc.cpp:39
+msgid "Start with this year's payments"
+msgstr "Iniciar com os pagamentos deste ano"
+
+#: wizards/newaccountwizard/rc.cpp:40
+msgid ""
+"<qt>Select which transactions should be recorded.\n"
+"\n"
+"<b>All payments</b> allows you to enter all payments made for this loan.\n"
+"\n"
+"The option to <b>start from the beginning of the current year</b> is meant "
+"for loans that are active for a longer period of time already and you don't "
+"want to enter all transactions of the past.\n"
+"</qt>"
+msgstr ""
+"<qt> Seleccionar n\n"
+"<b> Tudo</b> até all para n até<b> start de de ano</b> é para activo para a "
+"de hora e t até all de\n"
+"</qt>"
+
+#: wizards/newaccountwizard/rc.cpp:41
+msgid "Balance before start of recording"
+msgstr "Balanceamento start de gravar"
+
+#: wizards/newaccountwizard/rc.cpp:42
+msgid ""
+"Enter the ending balance found on the statement that is the last one before "
+"you want to start recording this loan in KMyMoney."
+msgstr ""
+"Insira o balanço final encontrado no extracto que for o último antes de você "
+"iniciar o registro deste financiamento no KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:43
+msgid ""
+"You have selected to record only payments from the beginning of this year. "
+"Since prior transactions will not be recorded, you need to supply the "
+"balance of the loan on January 1st of this year."
+msgstr ""
+"Você selecionou registrar somente os pagamentos a partir do início deste "
+"ano. Uma vez que as transacções anteriores não será registradas, você "
+"precisa fornecer o balanço do financiamento no dia 1º de janeiro deste ano."
+
+#: wizards/newaccountwizard/rc.cpp:45
+msgid "Interest Compounding frequency"
+msgstr "Frequência de Cômputo dos Juros"
+
+#: wizards/newaccountwizard/rc.cpp:46
+msgid ""
+"Select the frequency with which the interest is compounded. If uncertain, "
+"select the same as the payment frequency. Consult your loan contract for "
+"details."
+msgstr ""
+"Selecione a frequência com que os juros serão computados. Se não tiver "
+"certeza, seleccione a mesma da frequência do pagamento. Consulte o seu "
+"contrato de financiamento para mais detalhes."
+
+#: wizards/newaccountwizard/rc.cpp:47
+msgid "Due date of first payment to be recorded"
+msgstr "Data do primeiro pagamento a ser registrado"
+
+#: wizards/newaccountwizard/rc.cpp:48
+msgid ""
+"Depending on the answer to <b>What do you want to record?</b> this field "
+"means the following:<p>\n"
+"\n"
+"<b>All payments</b><br>\n"
+"Enter the due date of the very first payment<p>\n"
+"\n"
+"<b>Start with this year's payments</b><br>\n"
+"Enter the due date of the first payment in the current year"
+msgstr ""
+"Dependendo da resposta ao <b>O que você deseja registrar?</b> o campo "
+"significa o seguinte:<p>\n"
+"\n"
+"<b>Todo os pagamentos</b><br>\n"
+"Insira a data do primeiro pagamento<p>\n"
+"\n"
+"<b>Iniciar com os pagamentos deste ano</b><br>\n"
+"Insira a data do primeiro pagamento no ano atual"
+
+#: wizards/newaccountwizard/rc.cpp:49
+msgid "Type of interest rate"
+msgstr "Tipo de taxa de juro"
+
+#: wizards/newaccountwizard/rc.cpp:50
+msgid "Fixed"
+msgstr "Fixo"
+
+#: wizards/newaccountwizard/rc.cpp:51
+msgid "Variable"
+msgstr "Variável"
+
+#: wizards/newaccountwizard/rc.cpp:52
+msgid "Time between interest changes"
+msgstr "Tempo entre as mudanças de juros"
+
+#: dialogs/knewloanwizard.cpp:613 wizards/newaccountwizard/rc.cpp:53
+msgid "Days"
+msgstr "Dias"
+
+#: dialogs/knewloanwizard.cpp:614 wizards/newaccountwizard/rc.cpp:54
+msgid "Weeks"
+msgstr "Semanas"
+
+#: wizards/newaccountwizard/rc.cpp:57
+msgid "Next interest change is due"
+msgstr "A próxima mudança de juros é"
+
+#: wizards/newaccountwizard/rc.cpp:58
+msgid "This page allows you to select the parent account."
+msgstr "Aqui pode seleccionar a conta parente."
+
+#: wizards/newaccountwizard/rc.cpp:60
+msgid ""
+"If this account is managed by an institution please select the institution "
+"from the list. If the institution does not exist yet, please choose the "
+"<b>New Institution</b> button to create it. Otherwise, leave this field "
+"empty.\n"
+"Enter the account number used by the institution to identify the account."
+msgstr ""
+"Se esta conta for gerenciada por uma instituição, por favor seleccione a "
+"instituição na lista. Se a instituição ainda não existir, seleccione o botão "
+"<b>Nova Instituição</b> para criá-la. Caso contrário, deixe este campo em "
+"branco.\n"
+"Insira o número da conta usada pela instituição para identificar a conta."
+
+#: wizards/newaccountwizard/rc.cpp:62
+msgid "Select the institution which manages this account or leave empty"
+msgstr "Seleccionar conta ou vazio"
+
+#: wizards/newaccountwizard/rc.cpp:63
+msgid "New Institution"
+msgstr "Nova Instituição"
+
+#: wizards/newaccountwizard/rc.cpp:65
+msgid ""
+"Accounts managed by an institution are usually referenced by a unique number "
+"the so called account number. Enter that number here.\n"
+"\n"
+"KMyMoney currently uses this number only for some online banking functions."
+msgstr ""
+"Contas a unique número conta número Enter número n número para alguns ligado."
+
+#: wizards/newaccountwizard/rc.cpp:67
+msgid "Enter the International Bank Account Number into this field"
+msgstr "Insira o Número de Conta de Banco Internacional neste campo"
+
+#: wizards/newaccountwizard/rc.cpp:68
+msgid ""
+"You can enter the IBAN (International Bank Account Number) into this field "
+"if you know it. Usually, people at your institution can tell you the number "
+"or it is printed on your statements.\n"
+"\n"
+"See also http://en.wikipedia.org/wiki/International_Bank_Account_Number for "
+"more information.\n"
+"\n"
+"KMyMoney keeps this field only for documentation purposes and does not use "
+"it otherwise."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:69
+msgid ""
+"Now enter the details for your loan. You can leave one of the fields empty "
+"and KMyMoney will calculate it when you press the <b>Calculate</b> button. "
+"Before you can continue with the next page you also need to press "
+"<b>Calculate</b> so that KMyMoney can check the logical correctness of the "
+"values you have supplied."
+msgstr ""
+"Agora insira os detalhes de seu empréstimo. Você pode deixar um dos campos "
+"em branco e o KMyMoney irá calculá-lo que você pressionar o botão "
+"<b>Calcular</b>. Antes de continuar com a próxima página, você pode também "
+"pressionar <b>Calcular</b> de modo que o KMyMoney possa verificar a exatidão "
+"dos valores que você forneceu."
+
+#: wizards/newaccountwizard/rc.cpp:70
+msgid "The interest rate gets calculated"
+msgstr "A taxa de juro é calculada?"
+
+#: wizards/newaccountwizard/rc.cpp:71
+msgid "when the payment is received"
+msgstr "quando o pagamento é recebido"
+
+#: wizards/newaccountwizard/rc.cpp:72
+msgid "when the payment is due"
+msgstr "quando o pagamento é devido"
+
+#: dialogs/rc.cpp:531 dialogs/rc.cpp:533 wizards/newaccountwizard/rc.cpp:73
+msgid "Loan amount"
+msgstr "Montante do financiamento"
+
+#: wizards/newaccountwizard/rc.cpp:74
+msgid ""
+"Enter the amount of the loan in this field. If you want to calculate this "
+"field out of the other parameters, please leave it empty. If the field is "
+"marked as required (colored background) you have informed KMyMoney about the "
+"fact that there were already some payments towards the loan. In this case, "
+"please enter the ending balance of your last statement."
+msgstr ""
+"Insira o valor do financiamento neste campo. Se você deseja calcular este "
+"campo com base em outros parâmetros, por favor deixe-o em branco. Se o campo "
+"estiver marcado como obrigatório (fundo colorido) você provavelmente "
+"informou ao KMyMoney que já existem alguns pagamentos referentes a este "
+"financiamento. Neste caso, por favor, insira o saldo final de seu último "
+"extracto."
+
+#: wizards/newaccountwizard/rc.cpp:76
+msgid ""
+"Please enter the interest rate in percent or leave the field empty to "
+"calculate it."
+msgstr ""
+"Por favor insira a taxa de juros em porcentagem ou deixe o campo em branco "
+"para calculá-la."
+
+#: dialogs/rc.cpp:559 wizards/newaccountwizard/rc.cpp:77
+msgid "Term"
+msgstr "Prazo"
+
+# TODO: Verify
+# Para o qual?
+#: wizards/newaccountwizard/rc.cpp:78
+msgid ""
+"Please enter the term of this loan or enter 0 to calculate it. The term is "
+"the time that is required to fully repay the loan. This time might be "
+"different from the time your loan contract is signed for."
+msgstr ""
+"Por favor, insira o prazo deste financiamento ou insira 0 para calculá-lo. O "
+"prazo é o tempo que é necessário para pagar totalmente o financiamento. Este "
+"tempo pode ser diferente do tempo constante no contrato de financiamento que "
+"você assinou."
+
+#: wizards/newaccountwizard/rc.cpp:79
+msgid "Payment (principal and interest)"
+msgstr "Pagamento (principal e juros)"
+
+#: wizards/newaccountwizard/rc.cpp:80
+msgid ""
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"Por favor insira o valor que deseja pagar pelo principal e juros ou deixe "
+"este campo em branco para calculá-lo."
+
+#: wizards/newaccountwizard/rc.cpp:81
+msgid "Balloon payment"
+msgstr "Balão de pagamento"
+
+#: wizards/newaccountwizard/rc.cpp:82
+msgid ""
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"Por favor, insira o valor de um pagamento de amortização final ou deixe este "
+"campo em branco para calcula-lo."
+
+#: wizards/newaccountwizard/rc.cpp:83
+msgid "Calculate"
+msgstr "Calcular"
+
+#: wizards/newaccountwizard/rc.cpp:84
+msgid "Press this button to calculate/verify your loan details."
+msgstr ""
+"Pressione este botão para calcular/verificar os detalhes do seu "
+"financiamento."
+
+#: wizards/newaccountwizard/rc.cpp:85
+msgid ""
+"Pressing this button calculates a possibly missing parameter for your loan "
+"or verifies that the values entered match. If something is not correct you "
+"will receive information about it."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:86
+msgid ""
+"Now enter the information required for the periodic loan payments. If your "
+"regular payments contains any additional fees, click on the <b>Additional "
+"fees</b> button to enter them."
+msgstr ""
+"Agora insira as informações necessárias para os pagamentos periódicos do "
+"financiamento. Se seus pagamentos regulares possuem quaisquer taxas "
+"adicionais, clique no botão <b>Taxas adicionais</b> para inseri-las."
+
+#: wizards/newaccountwizard/rc.cpp:87
+msgid "Principal + Interest"
+msgstr "Principal + Juros"
+
+#: dialogs/rc.cpp:620 wizards/newaccountwizard/rc.cpp:89
+msgid "+"
+msgstr "+"
+
+#: wizards/newaccountwizard/rc.cpp:92
+msgid "= periodical payments"
+msgstr "= pagamentos periódicos"
+
+#: dialogs/rc.cpp:643 wizards/newaccountwizard/rc.cpp:94
+msgid ""
+"If this loan is for an asset, such as a car or a house, you can create the "
+"asset account now. An asset account represents the total value of an asset. "
+"The money from this loan will be transfered into the asset account you "
+"create or select.\n"
+"If this loan is a 'consumer loan' (money to use however you want), you can "
+"use a checking account instead."
+msgstr ""
+"Se o financiamento for para um bem, como um carro ou uma casa, você pode "
+"criar uma conta de activo agora. Uma conta de activo representa o valor "
+"total de um bem. O dinheiro deste empréstimo será transferido para a conta "
+"de activo que você criar ou seleccionar.\n"
+"Se o empréstimo for um 'empréstimo de consumo' (dinheira para ser usado no "
+"que você quiser), você pode usar uma conta corrente como destino do dinheiro."
+
+#: dialogs/rc.cpp:644 wizards/newaccountwizard/rc.cpp:95
+msgid "Don't create payout transaction"
+msgstr "Não criar transacção de pagamento"
+
+#: wizards/newaccountwizard/rc.cpp:96
+msgid "Refinance existing loan"
+msgstr "Refinanciar um empréstimo existente"
+
+#: wizards/newaccountwizard/rc.cpp:97
+msgid ""
+"Check this if you are refinancing a loan that already exists in KMyMoney"
+msgstr ""
+"Ative isto se você está refinanciando um financiamento que já existe no "
+"KMyMoney"
+
+#: dialogs/rc.cpp:642 wizards/newaccountwizard/rc.cpp:98
+msgid "Asset Account"
+msgstr "Conta de Activos"
+
+#: dialogs/rc.cpp:2 wizards/newaccountwizard/rc.cpp:99
+msgid "Create"
+msgstr "Criar"
+
+#: wizards/newaccountwizard/rc.cpp:100
+msgid "Loan account"
+msgstr "Conta de financiamento"
+
+#: dialogs/rc.cpp:646 wizards/newaccountwizard/rc.cpp:101
+msgid "Date of payment"
+msgstr "Data do pagamento"
+
+#: wizards/newaccountwizard/rc.cpp:102
+msgid ""
+"KMyMoney creates a schedule for this payment and reminds you whenever a "
+"payment must be made. Please select the account to/from which payments will "
+"be made and the category the interest will be assigned to.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"O KMyMoney cria um agendamento para este pagamento e irá lhe lembrar sempre "
+"que um pagamento deve ser feito. Por favor, seleccione a conta para/de a "
+"qual os pagamentos serão feitos e a categoria a qual os juros devem ser "
+"atribuídos. \n"
+"Se você optou por registrar todos os pagamentos, esta data já foi fornecida. "
+"Se você optou por registrar somente os pagamentos do ano atual, então a "
+"<b>Primeira data de pagamento</b> é a data do primeiro pagamento feito este "
+"ano. "
+"<p>"
+
+#: dialogs/rc.cpp:613 wizards/newaccountwizard/rc.cpp:103
+msgid "Interest category"
+msgstr "Categoria de juros"
+
+#: wizards/newaccountwizard/rc.cpp:104
+msgid ""
+"The category the interest part of the payment will be assigned to. If you "
+"borrow money you usually have to pay interest, so this should be an expense "
+"category. If you lend the money, you receive the interest. In this case, "
+"select an income category here."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:106
+msgid ""
+"Select the account from which you make your periodical payments or where you "
+"receive regular payments in case you lend the money. In most cases, this is "
+"a checking account."
+msgstr ""
+"Seleccionar conta de make ou where regular em emprestado a Dentro é a a "
+"verificar conta."
+
+#: dialogs/rc.cpp:519 wizards/newaccountwizard/rc.cpp:107
+msgid "First payment due on"
+msgstr "Primeiro pagamento vence em"
+
+#: wizards/newaccountwizard/rc.cpp:108
+msgid ""
+"For credit card accounts you can create a monthly schedule which will "
+"automatically remind you about the payment. Please fill in the details about "
+"this payment here."
+msgstr ""
+"Para contas de cartão de crédito, você pode criar um agendamento mensal que "
+"lhe lembrará automaticamente sobre o pagamento. Por favor, preencha os "
+"detalhes sobre este pagamento aqui."
+
+#: wizards/newaccountwizard/rc.cpp:109
+msgid "Yes, remind me when the payment is due"
+msgstr "Sim, lembrar-me quando o pagamento é devido"
+
+#: wizards/newaccountwizard/rc.cpp:110
+msgid "Name of schedule"
+msgstr "Nome do agendamento"
+
+#: dialogs/rc.cpp:151 dialogs/rc.cpp:218 dialogs/rc.cpp:219
+#: reports/listtable.cpp:199 views/kscheduledview.cpp:72 widgets/rc.cpp:113
+#: widgets/register.cpp:57 wizards/newaccountwizard/rc.cpp:111
+msgid "Payee"
+msgstr "Beneficiário"
+
+#: wizards/newaccountwizard/rc.cpp:112
+msgid "Estimated monthly payment"
+msgstr "Pagamento mensal estimado"
+
+#: wizards/newaccountwizard/rc.cpp:113
+msgid "Due date of next payment"
+msgstr "Data de vencimento do próximo pagamento"
+
+# TODO: Verify
+#: wizards/newaccountwizard/rc.cpp:114
+msgid ""
+"Payment should be made\n"
+"from account"
+msgstr ""
+"Pagamento deve ser feito\n"
+"a partir da conta"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:79
+msgid "KMyMoney New File Setup"
+msgstr "KMyMoney Preparação dum Novo Ficheiro"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:81
+msgid "Introduction"
+msgstr "Introdução"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:82
+msgid "Personal Data"
+msgstr "Dados Pessoais"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:83
+msgid "Select Currency"
+msgstr "Seleccionar a Moeda"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:84
+msgid "Select Accounts"
+msgstr "Seleccionar as Contas"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:85
+msgid "Set preferences"
+msgstr "Definir as preferências"
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid ""
+"Unable to load data, because no contact has been associated with the owner "
+"of the standard addressbook."
+msgstr ""
+"Não foi possível carregar os dados, porque nenhum contacto foi associado "
+"como dono do livro de endereços padrão."
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid "Addressbook import"
+msgstr "Importar do livro de endereços"
+
+#: wizards/newuserwizard/rc.cpp:1
+msgid ""
+"A typical KMyMoney user maintains a checking a account with some institution "
+"and uses it to receive money or pay bills. If this is not the case, please "
+"deselect the checkbox below and continue on the next page."
+msgstr ""
+"Um usuário típico do KMyMoney possui uma conta corrente com alguma "
+"instituição e a usa para receber dinheiro ou pagar contas. Se este não é o "
+"caso, por favor desative a caixa abaixo e prossiga para a próxima página."
+
+#: wizards/newuserwizard/rc.cpp:2
+msgid "I have a checking account that I want to manage with KMyMoney"
+msgstr ""
+"Eu tenho uma conta corrente que desejo que seja gerenciada com o KMyMoney"
+
+#: wizards/newuserwizard/rc.cpp:3
+msgid "The name of the instititution that issued the account."
+msgstr "O nome da instituição onde está a conta."
+
+#: wizards/newuserwizard/rc.cpp:4
+msgid ""
+"Each institution has a routing number. Enter it here. If uncertain, leave "
+"the field blank. You can modify it later."
+msgstr ""
+"Cada instituição possui um número de agência. Insira-o aqui. Se não tiver "
+"certeza, deixe o campo em branco. Você poderá modificá-lo mais tarde."
+
+#: wizards/newuserwizard/rc.cpp:5
+msgid "Name of the institution"
+msgstr "Nome da instituição"
+
+#: wizards/newuserwizard/rc.cpp:6
+msgid "Routing number"
+msgstr "Número de Encaminhamento"
+
+#: wizards/newuserwizard/rc.cpp:7
+msgid ""
+"In general the institution that issued the account also issued a number for "
+"it. Enter it here. If uncertain, you can modify this entry later."
+msgstr ""
+"Em geral, a instituição que fez a conta também lhe deu um número. Digite-o "
+"aqui. Se incerto, você pode modificar esta entrada mais tarde."
+
+#: wizards/newuserwizard/rc.cpp:8
+msgid ""
+"Enter a descriptive name that will be used by KMyMoney to identify your "
+"checking account."
+msgstr ""
+"Insira um nome descritivo que será usado pelo KMyMoney para identificar sua "
+"conta corrente."
+
+#: wizards/newuserwizard/rc.cpp:10
+msgid ""
+"Enter the date from when on you plan to keep track of the transactions in "
+"that account. This is usually the date of the last statement. If uncertain, "
+"leave as is."
+msgstr ""
+"Insira a data a partir da qual você planeja manter o controle de suas "
+"transacções na conta. Normalmente é a data do último extracto. Se não tiver "
+"certeza, deixe o campo como ele está."
+
+#: wizards/newuserwizard/rc.cpp:11
+msgid "Number of the account"
+msgstr "Número da conta"
+
+#: wizards/newuserwizard/rc.cpp:12
+msgid "Name of the account"
+msgstr "Nome da conta"
+
+#: wizards/newuserwizard/rc.cpp:15
+msgid ""
+"Enter the opening balance of the account. This is usually the ending balance "
+"of the last statement. If uncertain, leave as is."
+msgstr "Enter a abrir de conta Este/Esta é de last é."
+
+#: wizards/newuserwizard/rc.cpp:16
+msgid ""
+"The fields below allow you to enter some information about your checking "
+"account. Once this wizard finishes, the account will be created for you "
+"within KMyMoney."
+msgstr ""
+"Os campos abaixo permitem que você insira algumas informações sobre sua "
+"conta corrente. Uma vez que o assistente se encerrar, a conta será criada no "
+"KMyMoney."
+
+#: wizards/newuserwizard/rc.cpp:17
+msgid ""
+"KMyMoney supports multiple currencies. Your reports will be based on a "
+"default curreny which you can select here. The default for new accounts is "
+"also the currency you select here."
+msgstr ""
+"KMyMoney multiple ligada a por omissão seleccionar por omissão para novo é "
+"moeda seleccionar."
+
+#: wizards/newuserwizard/rc.cpp:18
+msgid ""
+"KMyMoney will store your financial data in a file on the disk. A standard "
+"filename within your KDE user environment will be the default. This is just "
+"provided for convenience and you can choose any other location here."
+msgstr ""
+"O KMyMoney armazenará seus dados financeiros em um arquivo no disco. Um nome "
+"de arquivo e caminho dentro de seu ambiente de usuário do KDE será o padrão. "
+"Ele é apenas fornecido para sua conveniência e você pode seleccionar "
+"qualquer outra localização aqui."
+
+#: wizards/newuserwizard/rc.cpp:19
+msgid ""
+"Either the currently selected file exists or the selected directory does not "
+"exist. Please make sure, that\n"
+"\n"
+"<ul>\n"
+"<li>the selected directory exists and</li>\n"
+"<li>the filename is not currently used in this directory.</li>\n"
+"</ul>"
+msgstr ""
+"Ou já existe o ficheiro seleccionado, ou a pasta pedida não existe. É favor "
+"assegurar-se, que\n"
+"\n"
+"<ul>\n"
+"<li>a pasta existe e</li>\n"
+"<li>um ficheiro com o mesmo nome não existe já na pasta.</li>\n"
+"</ul>"
+
+#: wizards/newuserwizard/rc.cpp:20
+msgid ""
+"This finishes the setup of your KMyMoney environment. You can now press the "
+"Finish button and start using KMyMoney to record your financial transactions."
+msgstr ""
+"Aqui acaba a configuração do KMyMoney. Você pode agora carregar no botão "
+"Terminar e começar a usar o KMyMoney para registar as suas transacções "
+"financeiras."
+
+#: wizards/newuserwizard/rc.cpp:21
+msgid ""
+"Please enter some information about yourself.<br><br>\n"
+"\n"
+"This information will be seen and used only by you. The information is used "
+"to personalize KMyMoney, to encrypt your file, etc."
+msgstr ""
+"Por favor, insira algumas informações sobre você mesmo.<br><br>\n"
+"\n"
+"Estas informações serão vistas e usadas somente por você. Elas são usadas "
+"para personalizar o KMyMoney, criptografar seu arquivo, etc."
+
+#: wizards/newuserwizard/rc.cpp:28
+msgid "Zip code"
+msgstr "Código postal"
+
+#: wizards/newuserwizard/rc.cpp:30
+msgid "Welcome to KMyMoney!"
+msgstr "Bem-vindo no KMyMoney!"
+
+#: wizards/newuserwizard/rc.cpp:31
+msgid ""
+"You have started KMyMoney for the first time on this computer. Before this "
+"program can help you to manage your finances, it needs to collect some data "
+"from you.<p>\n"
+"\n"
+"On the next few pages you will be guided through the steps necessary to "
+"setup the program. This will happen only once."
+msgstr ""
+"Você iniciou o KMyMoney pela primeira vez neste computador. Antes que este "
+"programa possa auxiliá-lo a gerir suas finanças, ele precisa colectar alguns "
+"dados seus.<p>\n"
+"\n"
+"Nas próximas páginas, você será guiado pelos passos necessários para "
+"configurar o programa. Isto será feito apenas uma vez."
+
+#: wizards/newuserwizard/rc.cpp:32
+msgid ""
+"<p>KMyMoney can encrypt your datafile using GPG Encryption. GPG encryption "
+"is one of the most secure methods in the world for protecting data. All of "
+"your account numbers and other important financial information will be very "
+"secure.</p>"
+msgstr ""
+"<p>O KMyMoney pode criptografar os seus ficheiros usando a Criptografia GPG. "
+"A Criptografia GPG é um dos métodos mais seguros no mundo para proteger seus "
+"dados. Todos os seus números de conta e outras informações financeiras "
+"importantes estarão bem seguras.</p>"
+
+#: wizards/newuserwizard/rc.cpp:33
+msgid ""
+"If you would like to review or change any preference settings for KMyMoney "
+"at this time, you can do so here. If not just click <b>Next</b>."
+msgstr ""
+"tal como até ou modificar qualquer configurações para KMyMoney nos hora "
+"não<b> Seguinte</b>."
+
+#: wizards/newuserwizard/rc.cpp:34
+msgid "Configure preferences now"
+msgstr "Definir as preferências agora"
+
+#: wizards/newuserwizard/rc.cpp:35
+msgid ""
+"You can change the configuration options at any time using the configuration "
+"dialog. Just select the <b>Configure KMyMoney...</b> option in the "
+"<b>Settings</b> menu."
+msgstr ""
+"Você modificar as configurações das opções a qualquer momento usando a "
+"janela de configuração. Apenas seleccione a opção <b>Configurar o KMyMoney..."
+"</b> no menu <b>Configuração</b>."
+
+#: dialogs/rc.cpp:83 dialogs/rc.cpp:411 dialogs/rc.cpp:435
+#: kmymoneyutils.cpp:92 kmymoneyutils.cpp:105 mymoney/mymoneyaccount.cpp:753
+#: mymoney/mymoneysecurity.cpp:160
+msgid "Stock"
+msgstr "Acção"
+
+#: dialogs/rc.cpp:84 dialogs/rc.cpp:412 dialogs/rc.cpp:436
+#: kmymoneyutils.cpp:107 mymoney/mymoneysecurity.cpp:163
+msgid "Mutual Fund"
+msgstr "Fundo Comum de Investimento"
+
+# TODO: Verify
+#: dialogs/rc.cpp:85 dialogs/rc.cpp:413 dialogs/rc.cpp:437
+#: kmymoneyutils.cpp:109 mymoney/mymoneysecurity.cpp:166
+msgid "Bond"
+msgstr "Título"
+
+#: mymoney/mymoneysecurity.cpp:172 reports/querytable.cpp:1150
+#: widgets/kmymoneyaccountselector.cpp:76
+msgid "None"
+msgstr "Nenhum"
+
+#: dialogs/rc.cpp:46 kmymoneyutils.cpp:402 mymoney/mymoneyaccount.cpp:759
+#: mymoney/mymoneyscheduled.cpp:1002 mymoney/mymoneysecurity.cpp:175
+#: views/kforecastview.cpp:174 widgets/register.cpp:54
+#: widgets/register.cpp:485 widgets/transaction.cpp:708
+#: widgets/transaction.cpp:1459
+msgid "Unknown"
+msgstr "Desconhecido"
+
+#: mymoney/storage/mymoneystoragesql.cpp:191
+msgid ""
+"Database apparently in use\n"
+"Opened by %1 on %2 at %3.\n"
+"Open anyway?"
+msgstr ""
+"O Banco de Dados está aparentemente em uso\n"
+"Aberto por %1 em %2 às %3.\n"
+"Abrir mesmo assim?"
+
+#: mymoney/storage/mymoneystoragesql.cpp:229
+msgid "Cannot currently create database for driver %1; please create manually"
+msgstr ""
+"Não é possível criar actualmente um banco de dados para o sistema %1; é "
+"favor criar-lo manualmente"
+
+#: mymoney/storage/mymoneystoragesql.cpp:244
+msgid "Error in create database %1; do you have create permissions?"
+msgstr "Erro ao criar a base de dados %1; tem as permissões necessárias?"
+
+#: converter/mymoneygncreader.cpp:1329
+#: mymoney/storage/mymoneystoragexml.cpp:166
+msgid "Loading transactions..."
+msgstr "Carregando as transacções..."
+
+#: converter/mymoneygncreader.cpp:1190
+#: mymoney/storage/mymoneystoragexml.cpp:173
+msgid "Loading accounts..."
+msgstr "Carregando as contas..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:180
+msgid "Loading securities..."
+msgstr "A carregar os títulos..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:187
+msgid "Loading reports..."
+msgstr "A carregar os relatórios..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:268
+msgid "Unknown XML tag %1 found in line %2"
+msgstr "Marca XML desconhecida %1 encontrada na linha %2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:274
+msgid "Exception while creating a %1 element: %2"
+msgstr "Excepção ao criar um element %1 :%2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:513
+msgid "Loading file information..."
+msgstr "A carregar as informações do ficheiro..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:591
+msgid "Loading user information..."
+msgstr "A carregar as informações do utilizador..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:655
+msgid "Saving accounts..."
+msgstr "A gravar as contas..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:678
+msgid "Saving transactions..."
+msgstr "A gravar as transacções..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:747
+msgid "Saving reports..."
+msgstr "A gravar os relatórios..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:762
+msgid "Saving budgets..."
+msgstr "A gravar os orçamentos..."
+
+#: mymoney/storage/mymoneystoragedump.cpp:414
+msgid "not reconciled"
+msgstr "não reconciliada"
+
+#: mymoney/storage/mymoneystoragedump.cpp:417
+msgid "cleared"
+msgstr "compensada"
+
+#: mymoney/storage/mymoneystoragedump.cpp:420
+msgid "reconciled"
+msgstr "reconciliada"
+
+#: mymoney/storage/mymoneystoragedump.cpp:423
+msgid "frozen"
+msgstr "congelada"
+
+#: mymoney/storage/mymoneystoragedump.cpp:426
+msgid "unknown"
+msgstr "desconhecido"
+
+#: mymoney/mymoneyaccount.cpp:101
+msgid ""
+"Account %1 contains an opening balance. Please use a KMyMoney version >= 0.8 "
+"and < 0.9 to correct the problem."
+msgstr ""
+"A conta %1 contém um saldo de abertura. Por favor, use o KMyMoney versão >= "
+"0.8 e < 0.9 para corrigir o problema."
+
+#: mymoney/mymoneyaccount.cpp:597
+msgid ""
+"_: Brokerage (suffix for account names)\n"
+"Brokerage"
+msgstr "Corretagem"
+
+#: kmymoneyutils.cpp:74 mymoney/mymoneyaccount.cpp:726
+msgid "Certificate of Deposit"
+msgstr "Certificado de Depósito"
+
+#: kmymoneyutils.cpp:78 mymoney/mymoneyaccount.cpp:732
+msgid "Money Market"
+msgstr "Mercado Monetário"
+
+#: converter/mymoneytemplate.cpp:186 converter/mymoneytemplate.cpp:187
+#: dialogs/knewaccountdlg.cpp:1018 kmymoneyutils.cpp:86
+#: mymoney/mymoneyaccount.cpp:744 views/kaccountsview.cpp:360
+#: views/kbudgetview.cpp:372 views/kcategoriesview.cpp:178
+#: views/khomeview.cpp:1813 views/kmymoneyview.cpp:767
+#: widgets/kmymoneyaccountselector.cpp:68
+#: widgets/kmymoneyaccountselector.cpp:179
+#: widgets/kmymoneyaccountselector.cpp:370 widgets/register.cpp:828
+msgid "Income"
+msgstr "Receita"
+
+#: converter/mymoneytemplate.cpp:190 converter/mymoneytemplate.cpp:191
+#: dialogs/knewaccountdlg.cpp:1020 kmymoneyutils.cpp:88
+#: mymoney/mymoneyaccount.cpp:747 views/kaccountsview.cpp:364
+#: views/kbudgetview.cpp:378 views/kcategoriesview.cpp:182
+#: views/kmymoneyview.cpp:768 widgets/kmymoneyaccountselector.cpp:72
+#: widgets/kmymoneyaccountselector.cpp:180
+#: widgets/kmymoneyaccountselector.cpp:380 widgets/register.cpp:829
+msgid "Expense"
+msgstr "Despesa"
+
+#: kmymoneyutils.cpp:90 mymoney/mymoneyaccount.cpp:750
+msgid "Investment Loan"
+msgstr "Financiamento de Investimento"
+
+#: mymoney/mymoneyfile.cpp:47
+msgid "Opening Balances"
+msgstr "Saldo de Abertura"
+
+#: mymoney/mymoneyfile.cpp:398
+msgid "Cannot remove transaction that references a closed account."
+msgstr "Não é apagar transacções que se referem a uma conta fechada."
+
+#: mymoney/mymoneyfile.cpp:1414 mymoney/mymoneyfile.cpp:1433
+#: mymoney/mymoneyfile.cpp:1447 mymoney/mymoneyfile.cpp:1469
+msgid "* Problem with account '%1'"
+msgstr "* Problema com a conta '%1'"
+
+#: mymoney/mymoneyfile.cpp:1419
+msgid " * Parent account '%1' belongs to a different group."
+msgstr " * Conta pai '%1' provém de um grupo diferente."
+
+#: mymoney/mymoneyfile.cpp:1420 mymoney/mymoneyfile.cpp:1450
+msgid " New parent account is the top level account '%1'."
+msgstr "Novo conta é topo level conta."
+
+#: mymoney/mymoneyfile.cpp:1436
+msgid " * Parent account '%1' does not contain '%2' as sub-account."
+msgstr " * Conta pai '%1' não contém '%2' como sub-conta."
+
+#: mymoney/mymoneyfile.cpp:1449
+msgid " * The parent with id %1 does not exist anymore."
+msgstr "com id não."
+
+#: mymoney/mymoneyfile.cpp:1471
+msgid " * Child account with id %1 does not exist anymore."
+msgstr " * Conta filho com id %1 não existe mais."
+
+#: mymoney/mymoneyfile.cpp:1472
+msgid " The child account list will be reconstructed."
+msgstr " A lista de contas filho será reconstruída."
+
+#: mymoney/mymoneyfile.cpp:1492
+msgid " * Unable to update account data in engine."
+msgstr " * Não foi possível actualizar dados da conta no motor."
+
+#: mymoney/mymoneyfile.cpp:1499
+msgid "* Reconstructing the child lists for"
+msgstr "* Reconstruindo a lista de filhos para"
+
+#: mymoney/mymoneyfile.cpp:1536
+msgid " * Unable to update account data for account %1 in engine"
+msgstr ""
+" * Não foi possível actualizar os dados da conta para a conta %1 no motor"
+
+#: mymoney/mymoneyfile.cpp:1554
+msgid " * Payee %1 recreated with fixed id"
+msgstr " * Beneficiário %1 recriado com id fixo"
+
+#: mymoney/mymoneyfile.cpp:1583
+msgid " * Payee id updated in split of transaction '%1'."
+msgstr " * Id do beneficiário actualizado na parcela da transacção '%1'."
+
+#: mymoney/mymoneyfile.cpp:1596
+msgid " * shares set to value in split of transaction '%1'."
+msgstr " * valor para cotas na parcela da transacção '%1'."
+
+#: mymoney/mymoneyfile.cpp:1599
+msgid " * value set to shares in split of transaction '%1'."
+msgstr " * valor para cotas na parcela da transacção '%1'."
+
+#: mymoney/mymoneyfile.cpp:1605
+msgid ""
+" * Split %2 in transaction '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+" * Parcela %2 na transacção '%1' contém uma referência para uma conta "
+"inválida %3. Por favor, corrija manualmente."
+
+#: mymoney/mymoneyfile.cpp:1616
+msgid " * action marked as interest in split of transaction '%1'."
+msgstr " * valor marcado como interesse no desdobramento da transacção'%1'."
+
+#: mymoney/mymoneyfile.cpp:1643
+msgid " * Payee id updated in split of schedule '%1'."
+msgstr " * Id do beneficiário actualizado na parcela do agendamento '%1'."
+
+#: mymoney/mymoneyfile.cpp:1649
+msgid ""
+" * Split in scheduled transaction '%1' contained value != 0 and shares == 0."
+msgstr ""
+" * Parcela na transacção '%1' agendada contém valor != 0 e cotas == 0."
+
+#: mymoney/mymoneyfile.cpp:1650
+msgid " Shares set to value."
+msgstr " Cotas metidas ao valor."
+
+#: mymoney/mymoneyfile.cpp:1658
+msgid " * Removed bankid from split in scheduled transaction '%1'."
+msgstr " * Bankid retirado da parcela na transacção agendada '%1'."
+
+#: mymoney/mymoneyfile.cpp:1671
+msgid " * shares set to value in split in schedule '%1'."
+msgstr " * cotas metidas ao valor na parcela de agendamento '%1'."
+
+#: mymoney/mymoneyfile.cpp:1674
+msgid " * value set to shares in split in schedule '%1'."
+msgstr " * valor metido nas cotas na parcela de agendamento '%1'."
+
+#: mymoney/mymoneyfile.cpp:1680
+msgid ""
+" * Split %2 in schedule '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+" * Parcela %2 no agendamento '%1' contém uma referência para uma conta "
+"inválida %3. Por favor, corrija manualmente."
+
+#: mymoney/mymoneyfile.cpp:1706
+msgid " * Payee id updated in report '%1'."
+msgstr " * Id do beneficiário actualizada no relatório '%1'."
+
+#: mymoney/mymoneyfile.cpp:1723
+msgid " * Payee '%1' removed."
+msgstr " * Beneficiário '%1' removido."
+
+#: mymoney/mymoneyfile.cpp:1730
+msgid "Finish! Data is consistent."
+msgstr "Terminado! Dados estão consistentes."
+
+#: mymoney/mymoneyfile.cpp:1732
+msgid "Finish! %1 problem(s) corrected. %2 problem(s) still present."
+msgstr ""
+"Terminado! %1 porblema(s) corrigido(s). %2 problema(s) ainda presente(s)."
+
+#: mymoney/mymoneyscheduled.cpp:873 mymoney/mymoneyscheduled.cpp:918
+#: mymoney/mymoneyscheduled.cpp:969 mymoney/mymoneyscheduled.cpp:1265
+#: mymoney/mymoneyscheduletest.cpp:1336
+msgid "Once"
+msgstr "Uma vez"
+
+#: mymoney/mymoneyscheduled.cpp:875 mymoney/mymoneyscheduled.cpp:924
+#: mymoney/mymoneyscheduled.cpp:1267 mymoney/mymoneyscheduletest.cpp:1337
+#: widgets/rc.cpp:72
+msgid "Daily"
+msgstr "Diariamente"
+
+#: mymoney/mymoneyscheduled.cpp:877 mymoney/mymoneyscheduled.cpp:931
+#: mymoney/mymoneyscheduled.cpp:1269 mymoney/mymoneyscheduletest.cpp:1338
+#: widgets/rc.cpp:73
+msgid "Weekly"
+msgstr "Semanalmente"
+
+#: mymoney/mymoneyscheduled.cpp:881 mymoney/mymoneyscheduled.cpp:932
+#: mymoney/mymoneyscheduled.cpp:1273 mymoney/mymoneyscheduletest.cpp:1339
+msgid "Every other week"
+msgstr "Em semanas alternadas"
+
+#: mymoney/mymoneyscheduled.cpp:879 mymoney/mymoneyscheduled.cpp:1271
+#: mymoney/mymoneyscheduletest.cpp:1340
+msgid "Fortnightly"
+msgstr "A cada duas semanas"
+
+#: mymoney/mymoneyscheduled.cpp:883 mymoney/mymoneyscheduled.cpp:941
+#: mymoney/mymoneyscheduled.cpp:1275 mymoney/mymoneyscheduletest.cpp:1341
+msgid "Every half month"
+msgstr "A cada quinzena"
+
+#: mymoney/mymoneyscheduled.cpp:887 mymoney/mymoneyscheduled.cpp:934
+#: mymoney/mymoneyscheduled.cpp:1279 mymoney/mymoneyscheduletest.cpp:1342
+msgid "Every four weeks"
+msgstr "A cada quatro semanas"
+
+#: mymoney/mymoneyscheduled.cpp:893 mymoney/mymoneyscheduled.cpp:935
+#: mymoney/mymoneyscheduled.cpp:1285 mymoney/mymoneyscheduletest.cpp:1344
+msgid "Every eight weeks"
+msgstr "Todas as oito semanas"
+
+#: mymoney/mymoneyscheduled.cpp:895 mymoney/mymoneyscheduled.cpp:948
+#: mymoney/mymoneyscheduled.cpp:1287 mymoney/mymoneyscheduletest.cpp:1345
+msgid "Every two months"
+msgstr "A cada dois meses"
+
+#: mymoney/mymoneyscheduled.cpp:897 mymoney/mymoneyscheduled.cpp:949
+#: mymoney/mymoneyscheduled.cpp:1289 mymoney/mymoneyscheduletest.cpp:1346
+msgid "Every three months"
+msgstr "A cada três meses"
+
+#: mymoney/mymoneyscheduled.cpp:899 mymoney/mymoneyscheduled.cpp:1291
+#: mymoney/mymoneyscheduletest.cpp:1347 widgets/rc.cpp:76
+msgid "Quarterly"
+msgstr "Trimestralmente"
+
+#: mymoney/mymoneyscheduled.cpp:901 mymoney/mymoneyscheduled.cpp:950
+#: mymoney/mymoneyscheduled.cpp:1293 mymoney/mymoneyscheduletest.cpp:1348
+msgid "Every four months"
+msgstr "A cada quatro meses"
+
+#: mymoney/mymoneyscheduled.cpp:903 mymoney/mymoneyscheduled.cpp:951
+#: mymoney/mymoneyscheduled.cpp:1295 mymoney/mymoneyscheduletest.cpp:1349
+msgid "Twice yearly"
+msgstr "Duas vezes ao ano"
+
+#: mymoney/mymoneyscheduled.cpp:905 mymoney/mymoneyscheduled.cpp:957
+#: mymoney/mymoneyscheduled.cpp:1297 mymoney/mymoneyscheduletest.cpp:1350
+#: widgets/rc.cpp:20 widgets/rc.cpp:77
+msgid "Yearly"
+msgstr "Anualmente"
+
+#: mymoney/mymoneyscheduled.cpp:907 mymoney/mymoneyscheduled.cpp:958
+#: mymoney/mymoneyscheduled.cpp:1299 mymoney/mymoneyscheduletest.cpp:1351
+msgid "Every other year"
+msgstr "Em anos alternados"
+
+#: mymoney/mymoneyscheduled.cpp:870 mymoney/mymoneyscheduled.cpp:913
+#: mymoney/mymoneyscheduled.cpp:966
+msgid "Any"
+msgstr "Qualquer"
+
+#: mymoney/mymoneyscheduled.cpp:885 mymoney/mymoneyscheduled.cpp:933
+#: mymoney/mymoneyscheduled.cpp:1277
+msgid "Every three weeks"
+msgstr "Todas as três semanas"
+
+#: mymoney/mymoneyscheduled.cpp:889 mymoney/mymoneyscheduled.cpp:925
+#: mymoney/mymoneyscheduled.cpp:1281
+msgid "Every thirty days"
+msgstr "A cada trinta dias"
+
+#: mymoney/mymoneyscheduled.cpp:971
+#, fuzzy
+msgid "Day"
+msgstr "Dias"
+
+#: mymoney/mymoneyscheduled.cpp:973 reports/listtable.cpp:206
+#: widgets/kmymoneycalendar.cpp:123 widgets/rc.cpp:97
+msgid "Week"
+msgstr "Semana"
+
+#: mymoney/mymoneyscheduled.cpp:975
+#, fuzzy
+msgid "Half-month"
+msgstr "A cada quinzena"
+
+#: mymoney/mymoneyscheduled.cpp:977 reports/listtable.cpp:205
+#: widgets/kmymoneycalendar.cpp:124 widgets/rc.cpp:96
+msgid "Month"
+msgstr "Mês"
+
+#: dialogs/rc.cpp:400 mymoney/mymoneyscheduled.cpp:979 views/rc.cpp:14
+msgid "Year"
+msgstr "Ano"
+
+#: mymoney/mymoneyscheduled.cpp:989
+msgid "Bill"
+msgstr "Conta a Pagar"
+
+#: dialogs/rc.cpp:107 dialogs/rc.cpp:162 dialogs/rc.cpp:249 dialogs/rc.cpp:754
+#: mymoney/mymoneyscheduled.cpp:992 widgets/kmymoneycombo.cpp:420
+#: widgets/register.cpp:571
+msgid "Deposit"
+msgstr "Depósito"
+
+#: mymoney/mymoneyscheduled.cpp:995 reports/querytable.cpp:594
+#: reports/querytable.cpp:696 widgets/kmymoneycombo.cpp:419
+msgid "Transfer"
+msgstr "Transferência"
+
+#: mymoney/mymoneyscheduled.cpp:1035
+msgid "Any (Error)"
+msgstr "Qualquer (Erro)"
+
+#: dialogs/rc.cpp:114 mymoney/mymoneyscheduled.cpp:1047
+msgid "Change the date to the previous Friday"
+msgstr "Mudar a data para a sexta-feira anterior"
+
+#: dialogs/rc.cpp:115 mymoney/mymoneyscheduled.cpp:1050
+msgid "Change the date to the next Monday"
+msgstr "Mudar a data para a segunda-feira seguinte"
+
+#: mymoney/mymoneyscheduled.cpp:1053
+msgid "Do Nothing"
+msgstr "Não fazer nada"
+
+#: kmymoney2.cpp:312
+msgid "Open database..."
+msgstr "Abrir base de dados ..."
+
+#: kmymoney2.cpp:313
+msgid "Save as database..."
+msgstr "Gravar como base de dados ..."
+
+#: kmymoney2.cpp:314
+msgid "Backup..."
+msgstr "Cópia de Segurança..."
+
+#: kmymoney2.cpp:315 kmymoney2.cpp:321
+msgid "QIF..."
+msgstr "QIF ..."
+
+#: kmymoney2.cpp:316
+msgid "Gnucash..."
+msgstr "Gnucash ..."
+
+#: kmymoney2.cpp:317
+msgid "Statement file..."
+msgstr "Ficheiro de extracto..."
+
+#: kmymoney2.cpp:319 kmymoney2.cpp:320
+msgid "Account Template..."
+msgstr "Modelo de Contas ..."
+
+#: kmymoney2.cpp:322
+msgid "Personal Data..."
+msgstr "Dados Pessoais..."
+
+#: kmymoney2.cpp:325
+msgid "Dump Memory"
+msgstr "Esvaziar a Memória"
+
+#: kmymoney2.cpp:327
+msgid "File-Information..."
+msgstr "Informações do Ficheiro ..."
+
+#: kmymoney2.cpp:332
+msgid "Find transaction..."
+msgstr "Procurar transacção..."
+
+#: kmymoney2.cpp:337
+msgid "Show Transaction Detail"
+msgstr "Mostrar Detalhes da transacção"
+
+#: kmymoney2.cpp:338 rc.cpp:60
+msgid "Hide reconciled transactions"
+msgstr "Ocultar transacções reconciliadas"
+
+#: kmymoney2.cpp:339 rc.cpp:57
+msgid "Hide unused categories"
+msgstr "Esconder as categorias não utilizadas"
+
+#: kmymoney2.cpp:340
+msgid "Show all accounts"
+msgstr "Mostrar todas as contas"
+
+#: kmymoney2.cpp:345
+msgid "New institution..."
+msgstr "Nova instituição..."
+
+#: kmymoney2.cpp:346
+msgid "Edit institution..."
+msgstr "Editar a instituição..."
+
+#: kmymoney2.cpp:347
+msgid "Delete institution..."
+msgstr "Apagar a instituição..."
+
+#: kmymoney2.cpp:352
+msgid "New account..."
+msgstr "Nova conta..."
+
+#: kmymoney2.cpp:354
+msgid "Open ledger"
+msgstr "Abrir o registo"
+
+#: kmymoney2.cpp:355
+msgid "Reconcile..."
+msgstr "Reconciliar..."
+
+#: kmymoney2.cpp:356
+msgid ""
+"_: Finish reconciliation\n"
+"Finish"
+msgstr "Terminar"
+
+#: kmymoney2.cpp:357
+msgid ""
+"_: Postpone reconciliation\n"
+"Postpone"
+msgstr "Adiar"
+
+#: kmymoney2.cpp:358
+msgid "Edit account..."
+msgstr "Editar conta..."
+
+#: kmymoney2.cpp:359
+msgid "Delete account..."
+msgstr "Apagar a conta..."
+
+#: kmymoney2.cpp:360
+msgid "Close account"
+msgstr "Fechar a conta"
+
+#: kmymoney2.cpp:361
+msgid "Reopen account"
+msgstr "Abrir de novo a conta"
+
+#: kmymoney2.cpp:362
+msgid "Transaction report"
+msgstr "Relatório de transacção"
+
+#: kmymoney2.cpp:364
+msgid "Show balance chart..."
+msgstr "Mostrar gráfico de saldo..."
+
+#: kmymoney2.cpp:366
+msgid "Map to online account"
+msgstr "Ligar a uma conta em linha"
+
+#: kmymoney2.cpp:367
+msgid "Unmap account"
+msgstr "Desligar a Conta"
+
+#: dialogs/settings/rc.cpp:126 kmymoney2.cpp:368 views/kpayeesview.cpp:363
+#: widgets/rc.cpp:50
+msgid "Update"
+msgstr "Actualizar"
+
+#: kmymoney2.cpp:372
+msgid "Update account..."
+msgstr "Actualizar a conta..."
+
+#: kmymoney2.cpp:373
+msgid "Update all accounts..."
+msgstr "Actualizar todas as contas..."
+
+#: kmymoney2.cpp:378
+msgid "New category..."
+msgstr "Nova categoria..."
+
+#: kmymoney2.cpp:379
+msgid "Edit category..."
+msgstr "Editar a categoria..."
+
+#: kmymoney2.cpp:380
+msgid "Delete category..."
+msgstr "Apagar a categoria..."
+
+#: kmymoney2.cpp:386
+msgid "QIF Profile Editor..."
+msgstr "Editor de Perfil QIF..."
+
+#: kmymoney2.cpp:387
+msgid "Securities..."
+msgstr "Títulos..."
+
+#: kmymoney2.cpp:388
+msgid "Currencies..."
+msgstr "Moedas ..."
+
+#: kmymoney2.cpp:389
+msgid "Prices..."
+msgstr "Preços ..."
+
+#: kmymoney2.cpp:390
+msgid "Update Stock and Currency Prices..."
+msgstr "Actualizar os Preços das Moedas e Acções..."
+
+#: kmymoney2.cpp:391
+msgid "Consistency Check"
+msgstr "Verificação de Consistência"
+
+#: kmymoney2.cpp:392
+msgid "Performance-Test"
+msgstr "Testar a Performance"
+
+#: kmymoney2.cpp:393
+msgid "KCalc..."
+msgstr "KCalc..."
+
+#: kmymoney2.cpp:399
+msgid "Enable all messages"
+msgstr "Habilitar todas as mensagens"
+
+#: kmymoney2.cpp:400
+msgid "KDE language settings..."
+msgstr "Configuração KDE da língua..."
+
+#: kmymoney2.cpp:405
+msgid "&Show tip of the day"
+msgstr "&Mostrar dica do dia"
+
+#: kmymoney2.cpp:410
+msgid ""
+"_: New transaction button\n"
+"New"
+msgstr "Nova"
+
+#: kmymoney2.cpp:415
+msgid ""
+"_: Edit transaction button\n"
+"Edit"
+msgstr "Editar"
+
+#: kmymoney2.cpp:417
+msgid ""
+"_: Enter transaction\n"
+"Enter"
+msgstr "Gravar"
+
+#: kmymoney2.cpp:420
+msgid ""
+"_: Edit split button\n"
+"Edit splits"
+msgstr "Editar parcelas"
+
+#: kmymoney2.cpp:421
+msgid ""
+"_: Cancel transaction edit\n"
+"Cancel"
+msgstr "Cancelar"
+
+#: kmymoney2.cpp:422
+msgid ""
+"_: Delete transaction\n"
+"Delete"
+msgstr "Apagar"
+
+#: kmymoney2.cpp:423
+msgid ""
+"_: Duplicate transaction\n"
+"Duplicate"
+msgstr "Duplicar"
+
+#: kmymoney2.cpp:425 kmymoney2.cpp:4826 kmymoney2.cpp:5107
+msgid ""
+"_: Button text for match transaction\n"
+"Match"
+msgstr "Corresponder"
+
+#: kmymoney2.cpp:426
+msgid ""
+"_: Accept 'imported' and 'matched' transaction\n"
+"Accept"
+msgstr "Aceitar"
+
+#: kmymoney2.cpp:428
+msgid ""
+"_: Toggle reconciliation flag\n"
+"Toggle"
+msgstr "Trocar"
+
+#: kmymoney2.cpp:429
+msgid ""
+"_: Mark transaction cleared\n"
+"Cleared"
+msgstr "Compensada"
+
+#: kmymoney2.cpp:430
+msgid ""
+"_: Mark transaction reconciled\n"
+"Reconciled"
+msgstr "Reconciliada"
+
+#: kmymoney2.cpp:431
+msgid ""
+"_: Mark transaction not reconciled\n"
+"Not reconciled"
+msgstr "Não reconciliada"
+
+#: kmymoney2.cpp:432
+msgid ""
+"_: Select all transactions\n"
+"Select all"
+msgstr "Seleccionar tudo"
+
+#: kmymoney2.cpp:434 kmymoney2.cpp:5497
+msgid "Goto account"
+msgstr "Ir à conta"
+
+#: kmymoney2.cpp:435 kmymoney2.cpp:5495
+msgid "Goto payee"
+msgstr "Ir ao beneficiário"
+
+#: kmymoney2.cpp:436
+#, fuzzy
+msgid "Create scheduled transaction..."
+msgstr "Inserir a transacção agendada"
+
+#: kmymoney2.cpp:437
+msgid "Assign next number"
+msgstr "Atribuir o número seguinte"
+
+#: kmymoney2.cpp:438
+msgid ""
+"_: Combine transactions\n"
+"Combine"
+msgstr "Combinar"
+
+#: kmymoney2.cpp:440
+msgid "New investment"
+msgstr "Novo investimento"
+
+#: kmymoney2.cpp:441
+msgid "Edit investment..."
+msgstr "Editar o investimento..."
+
+#: kmymoney2.cpp:442
+msgid "Delete investment..."
+msgstr "Apagar o investimento..."
+
+#: kmymoney2.cpp:443
+msgid "Online price update..."
+msgstr "Actualizar preços pela rede..."
+
+#: kmymoney2.cpp:444
+msgid "Manual price update..."
+msgstr "Actualizar preços manualmente..."
+
+#: kmymoney2.cpp:446
+#, fuzzy
+msgid "New scheduled transaction..."
+msgstr "Inserir a transacção agendada"
+
+#: kmymoney2.cpp:447
+#, fuzzy
+msgid "Edit scheduled transaction..."
+msgstr "Inserir a transacção agendada"
+
+#: kmymoney2.cpp:448
+#, fuzzy
+msgid "Delete scheduled transaction..."
+msgstr "Inserir a transacção agendada"
+
+#: kmymoney2.cpp:449
+#, fuzzy
+msgid "Duplicate scheduled transaction"
+msgstr "Inserir a transacção agendada"
+
+#: kmymoney2.cpp:450
+#, fuzzy
+msgid "Enter next transaction..."
+msgstr "Inserir a transacção agendada"
+
+#: kmymoney2.cpp:451
+#, fuzzy
+msgid "Skip next transaction..."
+msgstr "Saltar esta transacção"
+
+#: kmymoney2.cpp:453
+msgid "New payee"
+msgstr "Novo beneficiário"
+
+#: kmymoney2.cpp:454
+msgid "Rename payee"
+msgstr "Mudar o nome"
+
+#: kmymoney2.cpp:455
+msgid "Delete payee"
+msgstr "Apagar o beneficiário"
+
+#: kmymoney2.cpp:457
+msgid "New budget"
+msgstr "Novo orçamento"
+
+#: kmymoney2.cpp:458
+msgid "Rename budget"
+msgstr "Renomear o orçamento"
+
+#: kmymoney2.cpp:459
+msgid "Delete budget"
+msgstr "Apagar o orçamento"
+
+#: kmymoney2.cpp:460
+msgid "Copy budget"
+msgstr "Copiar o orçamento"
+
+#: kmymoney2.cpp:461
+msgid "Change budget year"
+msgstr "Modificar o ano do orçamento"
+
+#: kmymoney2.cpp:462
+msgid ""
+"_: Budget based on forecast\n"
+"Forecast"
+msgstr "Previsão"
+
+#: kmymoney2.cpp:467 kmymoney2.cpp:3990 kmymoney2.cpp:3993 kmymoney2.cpp:3999
+msgid "New currency"
+msgstr "Nova moeda"
+
+#: kmymoney2.cpp:468 kmymoney2.cpp:4021 kmymoney2.cpp:4026
+msgid "Rename currency"
+msgstr "Mudar o nome da moeda"
+
+#: kmymoney2.cpp:469 kmymoney2.cpp:4039
+msgid "Delete currency"
+msgstr "Apagar a moeda"
+
+#: dialogs/rc.cpp:69 kmymoney2.cpp:470
+msgid "Select as base currency"
+msgstr "Seleccionar como moeda de base"
+
+#: kmymoney2.cpp:481
+msgid "View back"
+msgstr "Ver anterior"
+
+#: kmymoney2.cpp:482
+msgid "View forward"
+msgstr "Ver seguinte"
+
+#: kmymoney2.cpp:611
+msgid "KMyMoney file needs saving. Save ?"
+msgstr "O Ficheiro do KMyMoney precisa ser gravado. Gravar?"
+
+#: kmymoney2.cpp:757
+msgid "Creating new document..."
+msgstr "Criando um novo documento..."
+
+#: kmymoney2.cpp:869 kmymoney2.cpp:884
+msgid "Open a file."
+msgstr "Abrir um ficheiro."
+
+#: kmymoney2.cpp:872
+msgid ""
+"%1|KMyMoney files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Ficheiros do KMyMoney\n"
+"%2|Todos os ficheiros (*.*)"
+
+#: kmymoney2.cpp:873
+msgid "Open File..."
+msgstr "Abrir Arquivo..."
+
+#: kmymoney2.cpp:925 kstartuplogo.cpp:100
+msgid "Loading file..."
+msgstr "Carregando ficheiro..."
+
+#: kmymoney2.cpp:986
+msgid ""
+"<b>%1</b> is either an invalid filename or the file does not exist. You can "
+"open another file or create a new one."
+msgstr ""
+"<b>%1</b> é um nome de ficheiro inválido ou de um ficheiro que não existe. "
+"Você pode abrir outro ficheiro ou criar um novo."
+
+#: kmymoney2.cpp:986
+msgid "File not found"
+msgstr "O ficheiro não foi encontrado"
+
+#: kmymoney2.cpp:989
+msgid "File <b>%1</b> is already opened in another instance of KMyMoney"
+msgstr "O ficheiro <b>%1</b> já está aberto em outra instância do KMyMoney"
+
+#: kmymoney2.cpp:989
+msgid "Duplicate open"
+msgstr "Abrir duplicata"
+
+#: kmymoney2.cpp:1001
+msgid "Saving file..."
+msgstr "A Guardar ficheiro..."
+
+#: kmymoney2.cpp:1035 kmymoney2.cpp:1047 kmymoney2.cpp:1071
+#, c-format
+msgid "Additional encryption key(s) to be used: %1"
+msgstr "Chave(s) de encrição adicionais a utilizar: %1"
+
+#: kmymoney2.cpp:1056
+msgid "Saving file with a new filename..."
+msgstr "A guardar ficheiro com um novo nome..."
+
+#: kmymoney2.cpp:1067
+msgid "Encryption key to be used"
+msgstr "Chave de encritação a utilizar"
+
+#: kmymoney2.cpp:1072
+msgid "Manage additional keys"
+msgstr "Gerir chaves adicionais"
+
+#: kmymoney2.cpp:1079
+msgid "No encryption"
+msgstr "Nenhuma encritação"
+
+#: kmymoney2.cpp:1102
+msgid ""
+"_: KMyMoney (Filefilter)\n"
+"KMyMoney files"
+msgstr "Ficheiros KMyMoney"
+
+#: kmymoney2.cpp:1103
+msgid ""
+"_: XML (Filefilter)\n"
+"XML files"
+msgstr "Ficheiros XML"
+
+#: kmymoney2.cpp:1104
+msgid ""
+"_: Anonymous (Filefilter)\n"
+"Anonymous files"
+msgstr "Ficheiros Anónimos"
+
+#: kmymoney2.cpp:1105
+msgid "All files"
+msgstr "Todos os ficheiros"
+
+#: kmymoney2.cpp:1193
+msgid "Saving file to database..."
+msgstr "Gravando o ficheiro numa base de dados..."
+
+#: kmymoney2.cpp:1207
+msgid "Cannot save to current database."
+msgstr "Não posso gravar no banco de dados actual."
+
+#: kmymoney2.cpp:1225
+msgid "Closing window..."
+msgstr "A fechar janela..."
+
+#: kmymoney2.cpp:1228 kmymoney2.cpp:1249
+msgid "The file has been changed, save it ?"
+msgstr "O ficheiro foi modificado, deseja gravá-lo?"
+
+#: kmymoney2.cpp:1339 kmymoney2.cpp:1352
+msgid "Ready."
+msgstr "Pronto."
+
+#: kmymoney2.cpp:1397 kmymoney2.cpp:1433
+msgid "No KMyMoneyFile open"
+msgstr "Nenhum ficheiro KMyMoney aberto"
+
+#: kmymoney2.cpp:1401
+msgid "Viewing personal data..."
+msgstr "Visualizando dados pessoais..."
+
+#: kmymoney2.cpp:1408
+msgid "Edit Personal Data"
+msgstr "Editar Dados Pessoais"
+
+#: kmymoney2.cpp:1424
+#, c-format
+msgid "Unable to store user information: %1"
+msgstr "Não foi possível armazenar as informações do usuário: %1"
+
+#: kmymoney2.cpp:1447
+msgid "Importing account templates."
+msgstr "Importando modelos de contas."
+
+#: kmymoney2.cpp:1462
+msgid "Unable to import template(s): %1, thrown in %2:%3"
+msgstr "Não foi possível importar modelo(s): %1. lançado em %2:%3"
+
+#: kmymoney2.cpp:1471
+msgid "Exporting account templates."
+msgstr "A exportar os modelos de conta."
+
+#: kmymoney2.cpp:1474
+msgid ""
+"*.kmt|KMyMoney template files\n"
+"*.*|All files"
+msgstr ""
+"*.kmt|Modelos de contas do KMyMoney\n"
+"*.*|Todos os ficheiros"
+
+#: kmymoney2.cpp:1475
+msgid "Save as..."
+msgstr "Gravar como..."
+
+#: kmymoney2.cpp:1517
+msgid "Importing file..."
+msgstr "A importar ficheiro..."
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "The statements have been processed with the following results:"
+msgstr "O extracto foi processado com os resultados seguintes :"
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:1754 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "Statement stats"
+msgstr "Estatísticas do Extracto"
+
+#: kmymoney2.cpp:1602
+msgid ""
+"You cannot import GnuCash data into an existing file. Do you wish to save "
+"this file?"
+msgstr ""
+"Você não pode importar dados do GnuCash num ficheiro existente. Você deseja "
+"gravar este ficheiro?"
+
+#: kmymoney2.cpp:1615
+msgid "Importing a Gnucash file."
+msgstr "Importando um ficheiro Gnucash."
+
+#: kmymoney2.cpp:1618
+msgid ""
+"%1|Gnucash files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Ficheiros Gnucash\n"
+"%2|Todos os ficheiros (*.*)"
+
+#: kmymoney2.cpp:1619
+msgid "Import Gnucash file..."
+msgstr "Importar arquivo Gnucash..."
+
+#: kmymoney2.cpp:1658
+msgid "Importing an XML Statement."
+msgstr "Importando um Extracto XML."
+
+#: kmymoney2.cpp:1661
+msgid ""
+"%1|XML files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Arquivos XML\n"
+"%2|Todos os arquivos (*.*)"
+
+#: kmymoney2.cpp:1662
+msgid "Import XML Statement..."
+msgstr "Importar Extracto XML..."
+
+#: kmymoney2.cpp:1718
+msgid "Error importing %1: This file is not a valid KMM statement file."
+msgstr ""
+"Erro ao importar %1: Este arquivo não é um arquivo de extrado KMM válido."
+
+#: kmymoney2.cpp:1718
+msgid "Invalid Statement"
+msgstr "Extracto Inválido"
+
+#: kmymoney2.cpp:1754
+msgid "The statement has been processed with the following results:"
+msgstr "O extracto foi processado com os resultados seguintes :"
+
+#: kmymoney2.cpp:1763
+msgid "Exporting file..."
+msgstr "A exportar ficheiro..."
+
+#: kmymoney2.cpp:1786
+msgid "The file <b>%1</b> already exists. Do you really want to override it?"
+msgstr "O arquivo <b>%1</b> já existe. Você realmente deseja sobrescrevê-lo?"
+
+#: kmymoney2.cpp:1786
+msgid "File already exists"
+msgstr "O ficheiro já existe"
+
+#: dialogs/rc.cpp:347 dialogs/rc.cpp:649 dialogs/rc.cpp:798 kmymoney2.cpp:1815
+msgid "General"
+msgstr "Geral"
+
+#: kmymoney2.cpp:1816
+msgid "Register"
+msgstr "Registo"
+
+# TODO: Verify
+#: kmymoney2.cpp:1817 views/khomeview.cpp:88 views/kmymoneyview.cpp:136
+msgid "Home"
+msgstr "Inicio"
+
+#: kmymoney2.cpp:1818 views/kmymoneyview.cpp:176
+#, fuzzy
+msgid ""
+"Scheduled\n"
+"transactions"
+msgstr "Transacções Agendadas"
+
+#: kmymoney2.cpp:1819
+msgid "Encryption"
+msgstr "Encritação"
+
+#: kmymoney2.cpp:1820
+msgid "Colors"
+msgstr "Cores"
+
+#: dialogs/rc.cpp:344 dialogs/settings/rc.cpp:107 kmymoney2.cpp:1822
+#: widgets/rc.cpp:33
+msgid "Online Quotes"
+msgstr "Cotacções em linha"
+
+#: kmymoney2.cpp:1823 reports/pivottable.cpp:2426 views/kmymoneyview.cpp:251
+#: views/kmymoneyview.cpp:253 views/kreportsview.cpp:1415 views/rc.cpp:41
+msgid "Forecast"
+msgstr "Previsão"
+
+#: kmymoney2.cpp:1824
+msgid "Plugins"
+msgstr "Grefões"
+
+#: kmymoney2.cpp:1893
+msgid ""
+"The file must be saved first before it can be backed up. Do you want to "
+"continue?"
+msgstr ""
+"O ficheiro deve ser gravado primeiro, para que possa ser feita uma cópia de "
+"segurança. Deseja continuar?"
+
+#: kmymoney2.cpp:1910
+msgid ""
+"The current implementation of the backup functionality only supports local "
+"files as source files! Your current source file is '%1'."
+msgstr ""
+"A implementação actual da funcionalidade de cópia de segurança apenas "
+"suporta ficheiros locais como ficheiros de origem! Seu ficheiro de origem "
+"actual é '%1'."
+
+#: kmymoney2.cpp:1913
+msgid "Local files only"
+msgstr "Ficheiros locais somente"
+
+#: kmymoney2.cpp:1928
+#, c-format
+msgid "Mounting %1"
+msgstr "A montar %1"
+
+#: kmymoney2.cpp:1967
+msgid "Backup file for today exists on that device. Replace ?"
+msgstr ""
+"Já existe um ficheiro de cópia de segurança de hoje neste dispositivo. "
+"Deseja substituí-lo?"
+
+#: dialogs/rc.cpp:7 kmymoney2.cpp:1967 kmymoney2.cpp:1994 kmymoney2.cpp:2024
+#: kmymoney2.cpp:2032 kmymoney2.cpp:2057 kmymoney2.cpp:2059
+msgid "Backup"
+msgstr "Cópia reserva"
+
+#: kmymoney2.cpp:1967
+msgid "&Replace"
+msgstr "&Substituir"
+
+#: kmymoney2.cpp:1972 kmymoney2.cpp:1997 kmymoney2.cpp:2016 kmymoney2.cpp:2035
+#, c-format
+msgid "Unmounting %1"
+msgstr "A desmontar %1"
+
+#: kmymoney2.cpp:1987
+#, c-format
+msgid "Writing %1"
+msgstr "A gravar %1"
+
+#: kmymoney2.cpp:1994
+msgid "Error mounting device"
+msgstr "Erro ao montar dispositivo"
+
+#: converter/mymoneygncreader.cpp:1995 kmymoney2.cpp:2023 kmymoney2.cpp:2055
+msgid "Done"
+msgstr "Feito"
+
+#: kmymoney2.cpp:2024 kmymoney2.cpp:2057
+msgid "File successfully backed up"
+msgstr "Cópia de segurança do ficheiro feita com sucesso"
+
+#: kmymoney2.cpp:2032
+msgid "Error copying file to device"
+msgstr "Erro ao copiar ficheiro para o dispositivo"
+
+#: kmymoney2.cpp:2059
+msgid "Error unmounting device"
+msgstr "Erro ao desmontar dispositivo"
+
+#: kmymoney2.cpp:2143
+#, c-format
+msgid "Cannot add institution: %1"
+msgstr "Não foi possível adicionar a instituição: %1"
+
+#: kmymoney2.cpp:2185
+#, c-format
+msgid "Unable to store institution: %1"
+msgstr "Não foi possível armazenar instituição: %1"
+
+#: kmymoney2.cpp:2192
+#, c-format
+msgid "Unable to edit institution: %1"
+msgstr "Não foi possível editar instituição: %1"
+
+#: kmymoney2.cpp:2203
+msgid "Do you really want to delete institution <b>%1</b> ?"
+msgstr "Você realmente deseja apagar a instituição <b>%1</b> ?"
+
+#: kmymoney2.cpp:2211 kmymoney2.cpp:2215
+#, c-format
+msgid "Unable to delete institution: %1"
+msgstr "Não foi possível apagar a instituição: %1"
+
+#: kmymoney2.cpp:2268
+#, c-format
+msgid "Unable to find account: %1"
+msgstr "Não foi possível encontrar a conta: %1"
+
+#: kmymoney2.cpp:2309
+msgid ""
+"This account is a liability and if the opening balance represents money "
+"owed, then it should be negative. Negate the amount?\n"
+"\n"
+"Please click Yes to change the opening balance to %1,\n"
+"Please click No to leave the amount as %2,\n"
+"Please click Cancel to abort the account creation."
+msgstr ""
+"Esta conta é um passivo e se o saldo de abertura representa dinheiro devido, "
+"então ele deve ser negativo. Inverter o sinal do montante?\n"
+"\n"
+"Por favor, clique em Sim para mudar o saldo de abertura para %1,\n"
+"Por favor, clique em Não para deixar o montante com %2,\n"
+"Por favor, clique em Cancelar para abortar a criação da conta."
+
+#: kmymoney2.cpp:2345 kmymoney2.cpp:2346
+msgid "Loan payout"
+msgstr "Pagamento do financiamento"
+
+#: dialogs/knewloanwizard.cpp:892 kmymoney2.cpp:2374
+#, c-format
+msgid "Unable to add account: %1"
+msgstr "Não foi possível adicionar a conta: %1"
+
+#: kmymoney2.cpp:2392
+msgid ""
+"The category <b>%1</b> currently does not exist. Do you want to create it?"
+"<p><i>The parent account will default to <b>%2</b> but can be changed in the "
+"following dialog</i>."
+msgstr ""
+"A categoria <b>%1</b> atualmente não existe. Você deseja criá-la?<p><i>A "
+"conta pai será a <b>%2</b> mas ela pode ser modificada no diálogo a seguir</"
+"i>."
+
+#: kmymoney2.cpp:2392
+msgid "Create category"
+msgstr "Criar categoria"
+
+#: kmymoney2.cpp:2429
+msgid "Create a new Category"
+msgstr "Criar uma nova Categoria"
+
+#: kmymoney2.cpp:2505
+#, c-format
+msgid "Unable to create account: %1"
+msgstr "Não foi possível criar a conta: %1"
+
+#: kmymoney2.cpp:2516
+msgid ""
+"The security <b>%1</b> currently does not exist as sub-account of <b>%2</b>. "
+"Do you want to create it?"
+msgstr ""
+"O título <b>%1</b> atualmente não existe como uma sub-conta de <b>%2</b>. "
+"Você deseja criá-lo?"
+
+#: kmymoney2.cpp:2517
+msgid "Create security"
+msgstr "Criar título"
+
+#: kmymoney2.cpp:2551
+msgid "Do you really want to delete the investment <b>%1</b>?"
+msgstr "Você realmente deseja apagar o investimento <b>%1</b>?"
+
+#: kmymoney2.cpp:2551
+msgid "Delete investment"
+msgstr "Remover investimento"
+
+#: kmymoney2.cpp:2558
+#, c-format
+msgid "Unable to delete investment: %1"
+msgstr "Não foi possível apagar o investimento: %1"
+
+#: kmymoney2.cpp:2640 kmymoney2.cpp:2646
+#, fuzzy
+msgid "Unable to add scheduled transaction: "
+msgstr "Não foi possível adicionar transacções"
+
+#: kmymoney2.cpp:2722
+msgid "Adjusting transactions..."
+msgstr "Ajustando as transacções..."
+
+#: kmymoney2.cpp:2747
+#, fuzzy
+msgid "Adjusting scheduled transactions..."
+msgstr "Ajustando as transacções..."
+
+#: kmymoney2.cpp:2765
+msgid "Adjusting budgets..."
+msgstr "Ajustando os orçamentos..."
+
+#: kmymoney2.cpp:2783
+msgid ""
+"Unable to exchange category <b>%1</b> with category <b>%2</b>. Reason: %3"
+msgstr ""
+"Não foi possível trocar a categoria <b>%1</b> com a categoria <b>%2</b>. "
+"Motivo: %3"
+
+#: kmymoney2.cpp:2804
+msgid "Do you really want to delete category <b>%1</b>?"
+msgstr "Você realmente deseja apagar a categoria <b>%1</b>?"
+
+#: kmymoney2.cpp:2811
+msgid "Unable to delete category <b>%1</b>. Cause: %2"
+msgstr "Não foi possível apagar a categoria <b>%1</b>. Motivo: %2"
+
+#: kmymoney2.cpp:2823
+msgid ""
+"Do you want to delete category <b>%1</b> with all its sub-categories or only "
+"the category itself? If you only delete the category itself, all its sub-"
+"categories will be made sub-categories of <b>%2</b>."
+msgstr ""
+"Você deseja apagar a categoria <b>%1</b> com todas as suas sub-categorias ou "
+"somente a categoria propriamente dita? Se você deseja apagar somente a "
+"categoria em si, todas as suas sub-categorias serão colocadas como sub-"
+"categorias de <b>%2</b>."
+
+#: kmymoney2.cpp:2827
+msgid "Delete all"
+msgstr "Apagar tudo"
+
+#: kmymoney2.cpp:2828
+msgid "Just the category"
+msgstr "Sómente a categoria"
+
+#: kmymoney2.cpp:2858
+msgid ""
+"Some sub-categories of category <b>%1</b> cannot be deleted, because they "
+"are still used. They will be made sub-categories of <b>%2</b>. Proceed?"
+msgstr ""
+"Algumas sub-categorias da categoria <b>%1</b> não podem ser removidas porque "
+"elas ainda estão em uso. Elas serão colocadas como sub-categorias de <b>%2</"
+"b>. Proceder?"
+
+#: kmymoney2.cpp:2878
+msgid "Unable to delete a sub-category of category <b>%1</b>. Reason: %2"
+msgstr ""
+"Não foi possível apagar uma sub-categoria da categoria <b>%1</b>. Motivo: %2"
+
+#: kmymoney2.cpp:2889
+msgid "Do you really want to delete account <b>%1</b>?"
+msgstr "Você realmente deseja apagar a conta <b>%1</b>?"
+
+#: kmymoney2.cpp:2901
+msgid "Unable to delete account '%1'. Cause: %2"
+msgstr "Não foi possível apagar a conta '%1'. Motivo: %2"
+
+#: kmymoney2.cpp:2917
+msgid "Edit account '%1'"
+msgstr "Editar conta '%1'"
+
+#: kmymoney2.cpp:2922
+msgid "Edit category '%1'"
+msgstr "Editar categoria '%1'"
+
+#: kmymoney2.cpp:3008
+msgid "Unable to modify account '%1'. Cause: %2"
+msgstr "Não foi possível modificar a conta '%1'. Motivo: %2"
+
+#: kmymoney2.cpp:3065
+#, fuzzy
+msgid ""
+"KMyMoney has detected some overdue scheduled transactions for this account. "
+"Do you want to enter those scheduled transactions now?"
+msgstr ""
+"KMyMoney detectou alguns agendamentos atrasados para esta conta. Deseja "
+"inserir estas transacções agendadas agora?"
+
+#: kmymoney2.cpp:3065
+msgid "Scheduled transactions found"
+msgstr "Transacções agendadas encontradas"
+
+#: kmymoney2.cpp:3163
+msgid ""
+"You are about to finish the reconciliation of this account with a difference "
+"between your bank statement and the transactions marked as cleared.\n"
+"Are you sure you want to finish the reconciliation ?"
+msgstr ""
+"Você está prestes a encerrar a reconciliação desta conta com uma diferença "
+"entre o extracto de seu banco e as transacções marcadas como compensadas.\n"
+"Você tem certeza que deseja encerrar a reconciliação?"
+
+#: kmymoney2.cpp:3165
+msgid "Confirm end of reconciliation"
+msgstr "Confirme o fim da reconciliação"
+
+#: kmymoney2.cpp:3339
+msgid ""
+"You have closed this account. It remains in the system because you have "
+"transactions which still refer to it, but is not shown in the views. You can "
+"make it visible again by going to the View menu and selecting <b>Show all "
+"accounts</b> or by unselecting the <b>Don't show closed accounts</b> setting."
+msgstr ""
+"Você conta em sistema até é não em vistas Você make visível até Ver menu e "
+"seleccionar<b> Mostrar all</b> ou<b> t show</b>."
+
+#: kmymoney2.cpp:3379
+msgid "<b>%1</b> cannot be moved to institution <b>%2</b>. Reason: %3"
+msgstr "<b>%1</b> não pode ser movida para a instituição <b>%2</b>. Razão: %3"
+
+#: kmymoney2.cpp:3393
+msgid "<b>%1</b> cannot be moved to <b>%2</b>. Reason: %3"
+msgstr "<b>%1</b> não pode ser movido para <b>%2</b>. Motivo: %3"
+
+#: kmymoney2.cpp:3408
+msgid "%1 YTD Account Transactions"
+msgstr "%1 Conta Transações YTD"
+
+#: dialogs/kbalancechartdlg.cpp:71 kmymoney2.cpp:3409
+#: views/kforecastview.cpp:650 views/khomeview.cpp:276
+#: views/khomeview.cpp:1384 views/kreportsview.cpp:619
+msgid "Generated Report"
+msgstr "Relatório Criado"
+
+#: dialogs/rc.cpp:324 dialogs/settings/rc.cpp:80 kmymoney2.cpp:3411
+#: views/kreportsview.cpp:1062 views/rc.cpp:58 views/rc.cpp:59
+msgid "Transactions"
+msgstr "Transacções"
+
+#: kmymoney2.cpp:3449
+#, fuzzy, c-format
+msgid "Unable to add scheduled transaction: %1"
+msgstr "Não foi possível adicionar agendamento: %1"
+
+#: kmymoney2.cpp:3449
+#, fuzzy
+msgid "Add scheduled transaction"
+msgstr "Inserir a transacção agendada"
+
+#: kmymoney2.cpp:3489
+#, fuzzy
+msgid ""
+"You have entered a scheduled transaction date of <b>%1</b>. Because the "
+"scheduled transaction was last paid on <b>%2</b>, KMyMoney will "
+"automatically adjust the scheduled transaction date to the next date unless "
+"the last payment date is reset. Do you want to reset the last payment date?"
+msgstr ""
+"Você a Escalonar data de<b></b> escalonar last ligada<b></b> KMyMoney "
+"escalonar data até data last data é até last data?"
+
+#: kmymoney2.cpp:3489
+msgid "Reset Last Payment Date"
+msgstr "Reiniciar a Data de Último Pagamento"
+
+#: kmymoney2.cpp:3499 kmymoney2.cpp:3519 kmymoney2.cpp:3531
+#, fuzzy
+msgid "Unable to modify scheduled transaction '%1'"
+msgstr "Não foi possível modificar agendamento '%1'"
+
+#: kmymoney2.cpp:3543
+#, fuzzy
+msgid "Are you sure you want to delete the scheduled transaction <b>%1</b>?"
+msgstr "Você tem certeza que deseja apagar o agendamento <b>%1</b>?"
+
+#: kmymoney2.cpp:3546
+#, fuzzy
+msgid ""
+"In case of loan payments it is currently not possible to recreate the "
+"scheduled transaction."
+msgstr ""
+"No caso de pagamento de financiamentos, atualmente não é possível recriar o "
+"agendamento."
+
+#: kmymoney2.cpp:3555
+#, fuzzy
+msgid "Unable to remove scheduled transaction '%1'"
+msgstr "Não foi possível remover o agendamento '%1'"
+
+#: kmymoney2.cpp:3569
+#, fuzzy, c-format
+msgid ""
+"_: Copy of scheduled transaction name\n"
+"Copy of %1"
+msgstr "Cópia de %1"
+
+#: kmymoney2.cpp:3581 kmymoney2.cpp:4352
+msgid "Unable to duplicate transaction(s): %1, thrown in %2:%3"
+msgstr "Não foi possível duplicar transacção(ões): %1, lançado em %2:%3"
+
+#: kmymoney2.cpp:3595
+#, fuzzy
+msgid ""
+"Do you really want to skip the <b>%1</b> transaction scheduled for <b>%2</b>?"
+msgstr ""
+"Você realmente deseja pular a transacção do agendamento <b>%1</b> em <b>%2</"
+"b>?"
+
+#: kmymoney2.cpp:3605
+#, fuzzy
+msgid "Unable to skip scheduled transaction <b>%1</b>."
+msgstr "Não foi possível pular o agendamento <b>%1</b>."
+
+#: kmymoney2.cpp:3618
+#, fuzzy
+msgid "Unknown scheduled transaction '%1'"
+msgstr "Agendamento desconhecido '%1'"
+
+#: kmymoney2.cpp:3673
+#, fuzzy
+msgid ""
+"Are you sure you wish to stop this scheduled transaction from being entered "
+"into the register?\n"
+"\n"
+"KMyMoney will prompt you again next time it starts unless you manually enter "
+"it later."
+msgstr ""
+"Tem certeza de que deseja parar de realizar a entrada deste evento no "
+"registo?\n"
+"\n"
+"O KMyMoney irá questioná-lo novamente na próxima vez que for iniciado, a "
+"menos que o introduza manualmente mais tarde."
+
+#: kmymoney2.cpp:3725 kmymoney2.cpp:3732
+#, fuzzy
+msgid "Unable to enter scheduled transaction '%1'"
+msgstr "Inserir a transacção agendada"
+
+#: kmymoney2.cpp:3743 kmymoney2.cpp:3783
+msgid "New Payee"
+msgstr "Novo Beneficiário"
+
+#: kmymoney2.cpp:3745
+msgid "Do you want to add <b>%1</b> as payer/receiver ?"
+msgstr "Você deseja adicionar <b>%1</b> como beneficiário/recebedor?"
+
+#: converter/mymoneystatementreader.cpp:892 kmymoney2.cpp:3747
+msgid "New payee/receiver"
+msgstr "Novo beneficiário/receptor"
+
+#: kmymoney2.cpp:3773
+msgid "Unable to add payee"
+msgstr "Incapaz de adicionar beneficiário"
+
+#: kmymoney2.cpp:3826
+msgid "Do you really want to remove the payee <b>%1</b>?"
+msgstr "Você realmente deseja remover o beneficiário <b>%1</b>?"
+
+#: kmymoney2.cpp:3828
+msgid "Do you really want to remove all selected payees?"
+msgstr "Você realmente deseja remover todos os beneficiários selecionados?"
+
+#: kmymoney2.cpp:3830
+msgid "Remove Payee"
+msgstr "Remover Beneficiário"
+
+#: kmymoney2.cpp:3870
+#, fuzzy
+msgid ""
+"At least one transaction/scheduled transaction is still referenced by a "
+"payee. Currently you have all payees selected. However, at least one payee "
+"must remain so that the transaction/scheduled transaction can be reassigned."
+msgstr ""
+"Pelo menos uma das transacções/agendamentos ainda é referenciada por um "
+"beneficiário. Atualmente, você tem todos os beneficiários selecionados. No "
+"entanto, pelo menos um beneficiário deve permanecer de modo que as "
+"transacções/agendamentos possam ser reatribuídas."
+
+#: kmymoney2.cpp:3925
+msgid "Unable to reassign payee of transaction/split"
+msgstr "Não foi possível reatribuir beneficiário de transacção/parcela"
+
+#: converter/mymoneyqifreader.cpp:534 converter/mymoneystatementreader.cpp:959
+#: kmymoney2.cpp:3926 kmymoney2.cpp:3983 views/kbudgetview.cpp:636
+#: views/kbudgetview.cpp:737 views/kbudgetview.cpp:751
+#: views/kpayeesview.cpp:519 views/kpayeesview.cpp:870
+msgid "thrown in"
+msgstr "lançado em"
+
+#: kmymoney2.cpp:3982
+msgid "Unable to remove payee(s)"
+msgstr "Não foi possível remover beneficiário(s)"
+
+#: kmymoney2.cpp:3990
+msgid "Enter ISO 4217 code for the new currency"
+msgstr "Insira o código ISO 4217 para a nova moeda"
+
+#: kmymoney2.cpp:3999
+#, c-format
+msgid "Cannot create new currency. %1"
+msgstr "Não foi possível criar a nova moeda. %1"
+
+#: kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, c-format
+msgid "Cannot rename currency. %1"
+msgstr "Não foi possível renomear a moeda. %1"
+
+#: kmymoney2.cpp:4039
+msgid "Cannot delete currency %1. %2"
+msgstr "Não foi possível apagar a moeda %1. %2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Cannot set %1 as base currency: %2"
+msgstr "set base moeda 2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Set base currency"
+msgstr "Modificar a moeda de base"
+
+#: kmymoney2.cpp:4065
+#, c-format
+msgid "Budget %1"
+msgstr "Orçamento %1"
+
+#: kmymoney2.cpp:4075
+msgid "Budget %1 (%2)"
+msgstr "Orçamento %1 (%2)"
+
+#: kmymoney2.cpp:4090 kmymoney2.cpp:4139
+msgid "Unable to add budget: %1, thrown in %2:%3"
+msgstr "Impossível de adicionar o orçamento: %1, lançado em %2:%3"
+
+#: kmymoney2.cpp:4105
+msgid "Do you really want to remove the budget <b>%1</b>?"
+msgstr "Você relamente deseja remover o orçamento <b>%1</b>?"
+
+#: kmymoney2.cpp:4107
+msgid "Do you really want to remove all selected budgets?"
+msgstr "Deseja mesmo remover todos os orçamentos seleccionados?"
+
+#: kmymoney2.cpp:4109
+msgid "Remove Budget"
+msgstr "Remover o orçamento"
+
+#: kmymoney2.cpp:4122
+msgid "Unable to remove budget: %1, thrown in %2:%3"
+msgstr "Não foi possível remover orçamento: %1, lançado em %2:%3"
+
+#: kmymoney2.cpp:4134 views/kreportsview.cpp:659
+#, c-format
+msgid "Copy of %1"
+msgstr "Cópia de %1"
+
+#: kmymoney2.cpp:4164
+msgid "Select year"
+msgstr "Selecionar ano"
+
+# TODO: próximo/seguinte?
+# TODO: abaixo igual
+#: kmymoney2.cpp:4164
+msgid "Budget year"
+msgstr "Ano do orçamento"
+
+#: kmymoney2.cpp:4176 kmymoney2.cpp:4214 kmymoney2.cpp:4274
+msgid "Unable to modify budget: %1, thrown in %2:%3"
+msgstr "Não foi possível modificar orçamento: %1, lançado em %2:%3"
+
+#: kmymoney2.cpp:4192 kmymoney2.cpp:4250
+msgid ""
+"The current budget already contains data. Continuing will replace all "
+"current values of this budget."
+msgstr ""
+"O orçamento atual já contém dados. Continuar substituirá todos os valores "
+"atuais deste orçamento."
+
+#: kmymoney2.cpp:4222
+msgid ""
+"Please be aware that changes made in the following dialog affect all KDE "
+"applications not only KMyMoney."
+msgstr "em all KDE aplicações não KMyMoney."
+
+#: kmymoney2.cpp:4292
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to delete the transactions anyway?"
+msgstr ""
+"Pelos menos um elemento das transacções seleccionadas foi reconciliado. "
+"Deseja apagar as transacções na mesma?"
+
+#: kmymoney2.cpp:4295 views/kgloballedgerview.cpp:1043
+msgid "Transaction already reconciled"
+msgstr "Transacção já reconciliada"
+
+#: kmymoney2.cpp:4301
+msgid "Do you really want to delete the selected transaction?"
+msgstr "Você realmente deseja apagar a transacção seleccionada?"
+
+#: kmymoney2.cpp:4303
+msgid "Do you really want to delete all %1 selected transactions?"
+msgstr "Você realmente deseja apagar todas as %1 transacções selecionadas?"
+
+#: kmymoney2.cpp:4305
+msgid "Delete transaction"
+msgstr "Apagar transacção"
+
+#: kmymoney2.cpp:4306
+msgid "Deleting transactions"
+msgstr "Apagando transacções"
+
+#: kmymoney2.cpp:4321
+msgid "Duplicating transactions"
+msgstr "Duplicando transacções"
+
+#: kmymoney2.cpp:4378
+msgid "Unable to delete transaction(s): %1, thrown in %2:%3"
+msgstr "Não foi possível apagar transacção(ões): %1, lançada em %2:%3"
+
+#: kmymoney2.cpp:4452 kmymoney2.cpp:4622
+msgid "Unable to modify transaction: %1, thrown in %2:%3"
+msgstr "Não foi possível modificar transacção: %1, lançada em %2:%3"
+
+#: kmymoney2.cpp:4514
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling and<br>- <b>Cancel</b> returns to the "
+"transaction editor.<p>You can also select an option to save the transaction "
+"automatically when e.g. selecting another transaction."
+msgstr ""
+"Deseja mesmo cancelar a edição da transacção sem a gravar?<p>- <b>Sim</b> "
+"cancela a edição da transacção<br>- <b>Não</b> grava a transacção antes de "
+"sair da edição e <br>- <b>Cancelar</b> regressa ao editor de transacção."
+"<p>Também pode activar uma opção que grava automaticamente a transacção "
+"quando seleccionar outra."
+
+#: kmymoney2.cpp:4514 kmymoney2.cpp:4517
+msgid "Cancel transaction edit"
+msgstr "Cancelar edição da transacção"
+
+#: kmymoney2.cpp:4517
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling.<p>You can also select an option to save the "
+"transaction automatically when e.g. selecting another transaction."
+msgstr ""
+"Você realmente deseja cancelar a edição desta transacção sem salvá-la?<p>- "
+"<b>Sim</b> cancela a edição da transacção<br>- <b>Não</b> salva a transacção "
+"antes de saír.<p>Você pode também seleccionar uma opção para salvar "
+"automaticamente a transacção quando seleccionar outra transacção."
+
+#: kmymoney2.cpp:4667
+msgid "Unable to accept transaction: %1, thrown in %2:%3"
+msgstr "Não foi possível aceitar a transacção: %1, lançada em %2:%3"
+
+#: kmymoney2.cpp:4846
+msgid "Unable to unmatch the selected transactions"
+msgstr "Não foi possível fazer corresponder estas transacções"
+
+#: kmymoney2.cpp:4885
+msgid "No manually entered transaction selected for matching"
+msgstr "Nenhuma transacção manual foi seleccionada para corresponder"
+
+#: kmymoney2.cpp:4887
+msgid "No imported transaction selected for matching"
+msgstr "Nenhuma transacção importada foi seleccionada para corresponder"
+
+#: kmymoney2.cpp:4895
+msgid "Unable to match the selected transactions"
+msgstr "Não foi possível fazer corresponder as transacções seleccionadas"
+
+#: kmymoney2.cpp:5097
+msgid "Create a new transaction"
+msgstr "Criar uma nova transacção"
+
+#: kmymoney2.cpp:5163
+msgid "Duplicate the current selected transactions"
+msgstr "Apagar as transacções actualmente seleccionadas"
+
+#: kmymoney2.cpp:5223
+msgid ""
+"_: Button text for unmatch transaction\n"
+"Unmatch"
+msgstr "Sem correspondência"
+
+#: kmymoney2.cpp:5451 kmymoney2.cpp:5473
+msgid "Goto '%1'"
+msgstr "Ir para '%1'"
+
+#: kmymoney2.cpp:5582
+msgid "Running consistency check..."
+msgstr "Executando uma verificação da consistência..."
+
+#: kmymoney2.cpp:5590
+#, c-format
+msgid "Consistency check failed: %1"
+msgstr "Verificação de consistência falhou: %1"
+
+#: kmymoney2.cpp:5594
+msgid "Consistency check result"
+msgstr "Resultado da verificaçào de consistência"
+
+#: kmymoney2.cpp:5603
+#, fuzzy
+msgid "Checking for overdue scheduled transactions..."
+msgstr "Verificação eventos vencidos..."
+
+#: kmymoney2.cpp:5740
+msgid ""
+"You must first select a KMyMoney file before you can import a statement."
+msgstr ""
+"Você deve primeiro seleccionar um ficheiro do KMyMoney antes de poder "
+"importar um extracto."
+
+#: kmymoney2.cpp:5746
+msgid "Importing a statement via Web Connect"
+msgstr "Importando um extracto através de uma Conexão Internet"
+
+#: kmymoney2.cpp:5759
+msgid ""
+"Unable to import %1 using %2 plugin. The plugin returned the following "
+"error: %3"
+msgstr ""
+"Não foi possível importar %1 usando o grefão %2. O grefão retornou o "
+"seguinte erro: %3"
+
+#: kmymoney2.cpp:5759 plugins/ofximport/ofximporterplugin.cpp:646
+msgid "Importing error"
+msgstr "Erro de importação"
+
+#: kmymoney2.cpp:5780
+msgid "All messages have been enabled."
+msgstr "Todas as mensagens foram habilitadas."
+
+#: kmymoney2.cpp:5780
+msgid "All messages"
+msgstr "Todas as messagens"
+
+#: kmymoney2.cpp:5855
+msgid "Auto saving..."
+msgstr "Gravação automática..."
+
+#: kmymoney2.cpp:5913
+msgid "Unable to setup online parameters for account ''%1'"
+msgstr "Não foi possível configurar os parâmetros em linha para a conta: %1"
+
+#: kmymoney2.cpp:5928
+msgid ""
+"Do you really want to remove the mapping of account <b>%1</b> to an online "
+"account? Depending on the details of the online banking method used, this "
+"action cannot be reverted."
+msgstr ""
+"Deseja mesmo apagar a ligação da conta <b>%1</b> a uma conta em linha? "
+"Seguinteo método de banco em linha, pode não ser possível reverter esta "
+"acção."
+
+#: kmymoney2.cpp:5928
+msgid "Remove mapping to online account"
+msgstr "Desligar da conta em linha"
+
+#: kmymoney2.cpp:5939
+#, c-format
+msgid "Unable to unmap account from online account: %1"
+msgstr "Não foi possível desligar a conta da conta em linha: %1"
+
+#: kmymoney2.cpp:5956
+msgid " (Brokerage)"
+msgstr " (Corretagem)"
+
+#: kmymoney2.cpp:5957
+msgid ""
+"You try to map a brokerage account to an online account. This is usually not "
+"advisable. In general, the investment account should be mapped to the online "
+"account. Please cancel if you intended to map the investment account, "
+"continue otherwise"
+msgstr ""
+
+#: kmymoney2.cpp:5957
+msgid "Mapping brokerage account"
+msgstr "Criar conta de corretagem"
+
+#: kmymoney2.cpp:5964
+msgid "Select online banking plugin"
+msgstr "Escolha o grefão de banco em linha"
+
+#: kmymoney2.cpp:6005
+#, c-format
+msgid "Unable to map account to online account: %1"
+msgstr "Não foi possível ligar a conta á conta em linha: %1"
+
+#: converter/mymoneyqifreader.cpp:407 converter/mymoneytemplate.cpp:73
+#: views/kmymoneyview.cpp:590
+msgid "Error while loading file '%1'!"
+msgstr "Erro ao carregar ficheiro '%1'!"
+
+#: converter/mymoneyqifreader.cpp:409 converter/mymoneyqifreader.cpp:965
+#: converter/mymoneytemplate.cpp:75 views/kmymoneyview.cpp:592
+msgid "File access error"
+msgstr "Erro de acesso a ficheiro"
+
+#: converter/mymoneytemplate.cpp:84
+msgid "<b>%1</b> is not a template file."
+msgstr "<b>%1</b> não é um arquivo de modelo."
+
+#: converter/mymoneytemplate.cpp:85 views/kmymoneyview.cpp:603
+msgid "Filetype Error"
+msgstr "Erro de Tipo de Ficheiro"
+
+#: converter/mymoneytemplate.cpp:93
+msgid "Error while reading template file <b>%1</b> in line %2, column %3"
+msgstr "Erro ao ler o arquivo de modelo <b>%1</b> na linha %2, coluna %3"
+
+#: converter/mymoneytemplate.cpp:94
+msgid "Template Error"
+msgstr "Erro de Modelo"
+
+#: converter/mymoneytemplate.cpp:101
+msgid "File '%1' not found!"
+msgstr "Arquivo'%1' não encontrado!"
+
+#: converter/mymoneytemplate.cpp:142
+msgid "Invalid tag <b>%1</b> in template file <b>%2</b>!"
+msgstr "Tag inválida <b>%1</b> no arquivo de modelo <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:214
+#, c-format
+msgid "Loading template %1"
+msgstr "Carregando modelo %1"
+
+#: converter/mymoneytemplate.cpp:241
+msgid "Invalid top-level account type <b>%1</b> in template file <b>%2</b>!"
+msgstr ""
+"Tipo <b>%1</b> de conta de nível superior inválido no arquivo de modelo <b>%"
+"2</b>!"
+
+#: converter/mymoneytemplate.cpp:309
+msgid ""
+"Invalid flag type <b>%1</b> for account <b>%3</b> in template file <b>%2</b>!"
+msgstr ""
+"Tipo <b>%1</b> de flag inválido para conta <b>%3</b> no arquivo de modelo <b>"
+"%2</b>!"
+
+#: converter/mymoneytemplate.cpp:398 converter/mymoneytemplate.cpp:401
+#: views/kmymoneyview.cpp:1151 views/kmymoneyview.cpp:1154
+msgid "Unable to write changes to '%1'"
+msgstr "Incapaz de gravar mudanças em '%1'"
+
+#: converter/mymoneytemplate.cpp:407 views/kmymoneyview.cpp:1162
+msgid "Unable to upload to '%1'"
+msgstr "Incapaz de enviar ficheiro para '%1'"
+
+#: converter/mymoneyqifwriter.cpp:70
+msgid ""
+"Unexpected exception '%1' thrown in %2, line %3 caught in MyMoneyQifWriter::"
+"write()"
+msgstr ""
+"Excepção inesperada '%1' lançada in %2, linha %3, apanhada "
+"emMyMoneyQifWriter::write()"
+
+#: converter/mymoneyqifwriter.cpp:80
+msgid "Unable to open file '%1' for writing"
+msgstr "Incapaz de abrir ficheiro '%1' para escrita"
+
+#: converter/webpricequote.cpp:340
+#, c-format
+msgid "Symbol found: %1"
+msgstr "Símbolo encontrado: %1"
+
+#: converter/webpricequote.cpp:368
+msgid "Price found: %1 (%2)"
+msgstr "Preço encontrado: %1 (%2)"
+
+#: converter/webpricequote.cpp:380
+#, c-format
+msgid "Date found: %1"
+msgstr "Data encontrada: %1"
+
+#: converter/webpricequote.cpp:397 converter/webpricequote.cpp:403
+#, c-format
+msgid "Unable to update price for %1"
+msgstr "Não foi possível actualizar o preço de %1"
+
+#: converter/mymoneyqifreader.cpp:170
+msgid ""
+"_: Category name\n"
+"Reinvested dividend"
+msgstr "Dividendos reinvestidos"
+
+#: converter/mymoneyqifreader.cpp:173
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (long term)"
+msgstr "Dividendos reinvestidos (prazo longo)"
+
+#: converter/mymoneyqifreader.cpp:176
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (short term)"
+msgstr "Dividendos reinvestidos (prazo curto)"
+
+#: converter/mymoneyqifreader.cpp:179
+msgid ""
+"_: Category name\n"
+"Dividend"
+msgstr "Dividendos"
+
+#: converter/mymoneyqifreader.cpp:182
+msgid ""
+"_: Category name\n"
+"Interest"
+msgstr "Rendimento"
+
+#: converter/mymoneyqifreader.cpp:185
+msgid ""
+"_: Category name\n"
+"Capital Gain (short term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:188
+msgid ""
+"_: Category name\n"
+"Capital Gain (mid term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:191
+msgid ""
+"_: Category name\n"
+"Capital Gain (long term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:194
+msgid ""
+"_: Category name\n"
+"Returned capital"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:197
+msgid ""
+"_: Category name\n"
+"Miscellaneous income"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:200
+msgid ""
+"_: Category name\n"
+"Miscellaneous expense"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:203
+msgid ""
+"_: Category name\n"
+"Investment fees"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:205
+#, c-format
+msgid "Unknown QIF type %1"
+msgstr "Tipo %1 QIF desconhecido"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Date format selection"
+msgstr "Selecção de formato de data"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Pick the date format that suits your input file"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:366
+msgid "Importing QIF ..."
+msgstr "A importar QIF..."
+
+#: converter/mymoneyqifreader.cpp:442
+msgid "Reading QIF ..."
+msgstr "A ler QIF ..."
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Adding transactions"
+msgstr "Adicionando transacções"
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Now adding the transactions to your ledger..."
+msgstr "Adicionando agora as transacções ao seu livro de registros..."
+
+#: converter/mymoneyqifreader.cpp:533
+msgid "Unable to add transactions"
+msgstr "Não foi possível adicionar transacções"
+
+#: converter/mymoneyqifreader.cpp:567
+msgid ""
+"_: QIF tag for liability account\n"
+"Oth L"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:572
+msgid ""
+"_: QIF tag for category\n"
+"Cat"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:575
+msgid ""
+"_: QIF tag for security\n"
+"Security"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:578
+msgid ""
+"_: QIF tag for investment account\n"
+"Invst"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:581
+msgid ""
+"_: QIF tag for prices\n"
+"Prices"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:599
+msgid ""
+"_: QIF tag for a class\n"
+"Class"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:753 converter/mymoneyqifreader.cpp:2203
+msgid ""
+"The %1 account currently has an opening balance of %2. This QIF file reports "
+"an opening balance of %3. Would you like to overwrite the current balance "
+"with the one from the QIF file?"
+msgstr ""
+"A conta %1 actualmente possui um saldo de abertura de %2. Este ficheiro QIF "
+"indica um saldo de abertura de %3. Você deseja sobrescrever o saldo actual "
+"com o do ficheiro QIF?"
+
+#: converter/mymoneyqifreader.cpp:754 converter/mymoneyqifreader.cpp:2204
+msgid "Overwrite opening balance"
+msgstr "Sobrescrever saldo de abertura"
+
+#: converter/mymoneyqifreader.cpp:879 converter/mymoneyqifreader.cpp:890
+#: converter/mymoneyqifreader.cpp:914
+msgid "Autogenerated by QIF importer"
+msgstr "Criado automaticamente pelo importador QIF"
+
+#: converter/mymoneyqifreader.cpp:907
+msgid "QIF imported, no account name supplied"
+msgstr "QIF importado, nenhum nome de conta indicado"
+
+#: converter/mymoneyqifreader.cpp:940
+msgid ""
+"KMyMoney has imported a second opening balance transaction into account <b>%"
+"1</b> which differs from the one found already on file. Please correct this "
+"manually once the import is done."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:940
+msgid "Opening balance problem"
+msgstr "Problema com o valor de abertura"
+
+#: converter/mymoneyqifreader.cpp:963
+msgid "Error while creating opening balance transaction"
+msgstr "Erro ao criar a transacção de saldo inicial"
+
+#: converter/mymoneyqifreader.cpp:1029 converter/mymoneyqifreader.cpp:1276
+msgid ""
+"The date entry \"%1\" read from the file cannot be interpreted through the "
+"current date profile setting of \"%2\".\n"
+"\n"
+"Pressing \"Continue\" will assign todays date to the transaction. Pressing "
+"\"Cancel\" will abort the import operation. You can then restart the import "
+"and select a different QIF profile or create a new one."
+msgstr ""
+"A data \"%1\" lida do ficheiro não pode ser interpretada através do perfil "
+"\"%2\" configurado actualmente.\n"
+"\n"
+"Pressionando \"Continuar\" irá atribuir a data de hoje para a transacção. "
+"Pressionando \"Cancelar\" irá abortar a operação de importação. Pode "
+"reiniciar a importação e seleccionar um perfil QIF diferente ou criar um "
+"novo."
+
+#: converter/mymoneyqifreader.cpp:1035 converter/mymoneyqifreader.cpp:1282
+msgid "Invalid date format"
+msgstr "Formato de data inválido"
+
+#: converter/mymoneyqifreader.cpp:1398
+#: converter/mymoneystatementreader.cpp:589
+#: converter/mymoneystatementreader.cpp:592
+msgid "Statement Importer"
+msgstr "Importador de Extracto"
+
+#: converter/mymoneyqifreader.cpp:1413
+#: converter/mymoneystatementreader.cpp:644
+msgid ""
+"This investment account does not contain the \"%1\" security. Transactions "
+"involving this security will be ignored."
+msgstr ""
+"Esta conta de investimento não contém o título \"%1\". Transacções "
+"envolvendo este título serão ignoradas."
+
+#: converter/mymoneyqifreader.cpp:1415
+#: converter/mymoneystatementreader.cpp:612
+#: converter/mymoneystatementreader.cpp:644
+msgid "Security not found"
+msgstr "Título não encontrado"
+
+#: converter/mymoneyqifreader.cpp:2021
+msgid "%1 (Investment)"
+msgstr "%1 (Investimento)"
+
+#: converter/mymoneyqifreader.cpp:2022
+msgid "Autogenerated by QIF importer from type Mutual account entry"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2085 converter/mymoneyqifreader.cpp:2228
+msgid "account"
+msgstr "conta"
+
+# TODO: Verify
+#: converter/mymoneyqifreader.cpp:2086
+msgid "al"
+msgstr "al"
+
+#: converter/mymoneyqifreader.cpp:2093
+msgid "category"
+msgstr "categoria"
+
+# TODO: Verify
+#: converter/mymoneyqifreader.cpp:2094
+msgid "ei"
+msgstr "ei"
+
+#: converter/mymoneyqifreader.cpp:2095
+msgid "Category selection"
+msgstr "Selecção de categoria"
+
+#: converter/mymoneyqifreader.cpp:2110
+msgid "Account \"%1\" disappeared: "
+msgstr "Conta \"%1\" desapareceu: "
+
+#: converter/mymoneyqifreader.cpp:2131
+msgid "The %1 '%2' does not exist. Do you want to create it?"
+msgstr "O %1 '%2' não existe. Deseja criá-lo?"
+
+#: converter/mymoneyqifreader.cpp:2140
+#, c-format
+msgid "Select %1"
+msgstr "Seleccionar %1"
+
+#: converter/mymoneyqifreader.cpp:2142
+msgid ""
+"The %1 <b>%2</b> currently exists. Do you want to import transactions to "
+"this account?"
+msgstr ""
+"O %1 <b>%2</b> existe actualmente. Deseja importar transacções para esta "
+"conta?"
+
+#: converter/mymoneyqifreader.cpp:2147
+msgid ""
+"The %1 <b>%2</b> currently does not exist. You can create a new %3 by "
+"pressing the <b>Create</b> button or select another %4 manually from the "
+"selection box."
+msgstr ""
+"O %1 <b>%2</b> actualmente não existe. Pode criar um novo %3 pressionando o "
+"botão <b>Criar</b> ou seleccionar outro %4 manualmente, a partir da caixa de "
+"selecção."
+
+#: converter/mymoneyqifreader.cpp:2154
+#, c-format
+msgid "Import transactions to %1"
+msgstr "Importar transacções para %1"
+
+#: converter/mymoneyqifreader.cpp:2155
+msgid ""
+"No %1 information has been found in the selected QIF file. Please select an "
+"account using the selection box in the dialog or create a new %2 by pressing "
+"the <b>Create</b> button."
+msgstr ""
+"Nenhuma informação %1 foi encontrada no ficheiro QIF seleccionado. Por "
+"favor, seleccione uma conta usando a caixa de selecção no diálogo ou crie "
+"uma nova %2 pressionando o botão <b><Criar/b>."
+
+#: converter/mymoneyqifreader.cpp:2229
+msgid "You must select or create an account."
+msgstr "Deve seleccionar ou criar uma conta."
+
+#: converter/mymoneyqifreader.cpp:2231
+msgid "You must select or create a category."
+msgstr "Deve seleccionar ou criar uma categoria."
+
+#: converter/mymoneystatementreader.cpp:100
+msgid "_Fees"
+msgstr "_Taxas"
+
+#: converter/mymoneystatementreader.cpp:106
+msgid "_Dividend"
+msgstr "_Dividendos"
+
+#: converter/mymoneystatementreader.cpp:289
+#, c-format
+msgid "Importing statement for account %1"
+msgstr "Importando um extracto para a conta %1"
+
+#: converter/mymoneystatementreader.cpp:291
+msgid "Importing statement without transactions"
+msgstr "Importando um extracto sem transacções"
+
+#: converter/mymoneystatementreader.cpp:385
+msgid " Statement balance is not contained in statement."
+msgstr " O orçamento deste extracto não está nele."
+
+#: converter/mymoneystatementreader.cpp:387
+msgid " Statement balance on %1 is reported to be %2"
+msgstr " O orçamento do extracto em %1 indica ser %2"
+
+#: converter/mymoneystatementreader.cpp:389
+msgid " Transactions"
+msgstr " Transacções"
+
+#: converter/mymoneystatementreader.cpp:390
+msgid " %1 processed"
+msgstr " %1 processadas"
+
+#: converter/mymoneystatementreader.cpp:391
+msgid " %1 added"
+msgstr " %1 adicionadas"
+
+#: converter/mymoneystatementreader.cpp:392
+msgid " %1 matched"
+msgstr " %1 correspondidas"
+
+#: converter/mymoneystatementreader.cpp:393
+msgid " %1 duplicates"
+msgstr " %1 duplicadas"
+
+#: converter/mymoneystatementreader.cpp:394
+msgid " Payees"
+msgstr " Beneficiários"
+
+#: converter/mymoneystatementreader.cpp:395
+msgid " %1 created"
+msgstr " %1 criados"
+
+#: converter/mymoneystatementreader.cpp:483
+#, c-format
+msgid "Error creating security record: %1"
+msgstr "Erro ao criar o registo de título: %1"
+
+#: converter/mymoneystatementreader.cpp:612
+msgid ""
+"This imported statement contains investment transactions with no security. "
+"These transactions will be ignored."
+msgstr ""
+"O extracto importado contém transacções de investimento sem títulos. Essas "
+"transacções vão ser ignoradas."
+
+#: converter/mymoneystatementreader.cpp:803
+msgid "(Fees) "
+msgstr "(Taxas) "
+
+#: converter/mymoneystatementreader.cpp:880
+msgid ""
+"Do you want to add \"%1\" as payee/receiver?\n"
+"\n"
+msgstr ""
+"Deseja adicionar \"%1\" como um beneficiário/receptor?\n"
+"\n"
+
+#: converter/mymoneystatementreader.cpp:881
+msgid ""
+"Selecting \"Yes\" will create the payee, \"No\" will skip creation of a "
+"payee record and remove the payee information from this transaction. "
+"Selecting \"Cancel\" aborts the import operation.\n"
+"\n"
+"If you select \"No\" here and mark the \"Don't ask again\" checkbox, the "
+"payee information for all following transactions referencing \"%1\" will be "
+"removed."
+msgstr ""
+"Seleccionando \"Sim\" irá criar o beneficiário, \"Não\" irá saltar a criação "
+"de um registo de beneficiário e remover a informação de beneficiário desta "
+"transacção. Seleccionando \"Cancelar\" a operação de importação será "
+"abortada.\n"
+"\n"
+"Se seleccionar \"Não\" aqui e assinalar a opção \"Não perguntar novamente\", "
+"a informação de beneficiário para todas as transacções seguintes "
+"referenciando \"%1\" será removida."
+
+#: converter/mymoneystatementreader.cpp:917
+#, fuzzy
+msgid "Save Category"
+msgstr "Categoria"
+
+#: converter/mymoneystatementreader.cpp:918
+#, fuzzy
+msgid "No Category"
+msgstr "Categoria de Topo"
+
+#: converter/mymoneystatementreader.cpp:919 dialogs/rc.cpp:4
+msgid "Abort"
+msgstr "Cancelar"
+
+#: converter/mymoneystatementreader.cpp:926
+msgid "Please select a default category for payee '%1':"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:958
+msgid "Unable to add payee/receiver"
+msgstr "Incapaz de adicionar beneficiário/receptor"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid ""
+"KMyMoney has found a scheduled transaction named <b>%1</b> which matches an "
+"imported transaction. Do you want KMyMoney to enter this schedule now so "
+"that the transaction can be matched? "
+msgstr ""
+"KMyMoney encontrou uma transacção agendada nomeada <b>%1</b> que corresponde "
+"á transacção importada. Quer que o KMyMoney inscreva este agendamento agora "
+"para que as transacções possam corresponder? "
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid "Schedule found"
+msgstr "Agendamento encontrado"
+
+#: converter/mymoneystatementreader.cpp:1219
+msgid "Problem adding or matching imported transaction with id '%1': %2"
+msgstr ""
+"Problema ao adicionar ou conrresponder a transacção importada com o id '%1': "
+"%2"
+
+#: converter/mymoneystatementreader.cpp:1268
+msgid ""
+"<b>You have downloaded a statement for the following account:</b><br><br>"
+msgstr "<b>Você obteve um extracto para a seguinte conta:</b><br><br>"
+
+#: converter/mymoneystatementreader.cpp:1269
+#, c-format
+msgid " - Account Name: %1"
+msgstr " - Nome da Conta: %1"
+
+#: converter/mymoneystatementreader.cpp:1270
+#, c-format
+msgid " - Account Type: %1"
+msgstr " - Tipo da Conta: %1"
+
+#: converter/mymoneystatementreader.cpp:1271
+#, c-format
+msgid " - Account Number: %1"
+msgstr " - Número da Conta: %1"
+
+#: converter/mymoneystatementreader.cpp:1279
+msgid "Do you want to import transactions to this account?"
+msgstr "Deseja importar as transacções para esta conta?"
+
+#: converter/mymoneystatementreader.cpp:1281
+msgid ""
+"KMyMoney cannot determine which of your accounts to use. You can create a "
+"new account by pressing the <b>Create</b> button or select another one "
+"manually from the selection box below."
+msgstr ""
+"O KMyMoney não pode determinar quais de suas contas usar. Você pode criar "
+"uma nova conta pressionando o botão <b>Criar</b> ou seleccionar uma "
+"manualmente a partir da caixa de seleção abaixo."
+
+#: converter/mymoneystatementreader.cpp:1287
+msgid ""
+"No account information has been found in the selected statement file. Please "
+"select an account using the selection box in the dialog or create a new "
+"account by pressing the <b>Create</b> button."
+msgstr ""
+"Nenhuma informação de conta foi encontrada no ficheiro de extracto "
+"seleccionado. Por favor, seleccione uma conta usando a caixa de selecção na "
+"janela ou crie uma nova conta pressionando o botão <b>Criar</b>."
+
+#: converter/mymoneystatementreader.cpp:1294
+msgid "Import transactions"
+msgstr "Importar transacções"
+
+#: converter/mymoneystatementreader.cpp:1330
+msgid ""
+"You must select an account, create a new one, or press the <b>Abort</b> "
+"button."
+msgstr ""
+"Você deve seleccionar uma conta, criar uma nova, ou pressionar o botão "
+"<b>Cancelar</b>."
+
+#: converter/mymoneygncreader.cpp:119
+msgid "%1: Sorry. This importer cannot handle version %2 of element %3"
+msgstr ""
+"%1: Desculpe. Este importador não pode gerir a versão %2 do elemento %3"
+
+#: converter/mymoneygncreader.cpp:193
+#, c-format
+msgid "Account%1"
+msgstr "Conta%1"
+
+#: converter/mymoneygncreader.cpp:197
+#, c-format
+msgid "Stock%1"
+msgstr "Acção%1"
+
+#: converter/mymoneygncreader.cpp:206
+#, c-format
+msgid "Payee%1"
+msgstr "Beneficiário%1"
+
+#: converter/mymoneygncreader.cpp:212
+#, c-format
+msgid "Schedule%1"
+msgstr "Agendamento%1"
+
+#: converter/mymoneygncreader.cpp:262
+msgid "This version of the importer cannot handle multi-book files."
+msgstr ""
+"Esta versão do importador não pode manipular ficheiros com livros múltiplos."
+
+#: converter/mymoneygncreader.cpp:912
+msgid "Invalid header for file. Should be 'gnc-v2'"
+msgstr "Cabeçalho inválido para o ficheiro. Deveria ser 'gnc-v2'"
+
+#: converter/mymoneygncreader.cpp:937 converter/mymoneygncreader.cpp:972
+#: converter/mymoneygncreader.cpp:1062
+#, c-format
+msgid ""
+"Import failed:\n"
+"\n"
+"%1"
+msgstr ""
+"O importe falhou:\n"
+"\n"
+"%1"
+
+#: converter/mymoneygncreader.cpp:1065
+msgid "Import complete"
+msgstr "Importação terminada"
+
+#: converter/mymoneygncreader.cpp:1120
+msgid "Disguise your wealth"
+msgstr "Mascarar seu patrimônio"
+
+#: converter/mymoneygncreader.cpp:1121
+msgid ""
+"Each monetary value on your file will be multiplied by a random number "
+"between 0.01 and 1.99\n"
+"with a different value used for each transaction. In addition, to further "
+"disguise the true\n"
+"values, you may enter a number between %1 and %2 which will be applied to "
+"all values.\n"
+"These numbers will not be stored in the file."
+msgstr ""
+"Cada valor monetário no seu ficheiro será multiplicado por um número "
+"aleatório entre 0,01 e 1,99\n"
+"com um valor diferente usado para cada transacção. Além disso, para esconder "
+"melhor os valores\n"
+"verdadeiros, você pode inserir um número entre %1 e %2 que será aplicado a "
+"todos os valores.\n"
+"Estes números não serão armazenados no ficheiro."
+
+#: converter/mymoneygncreader.cpp:1135
+msgid "Loading commodities..."
+msgstr "Carregando mercadorias..."
+
+#: converter/mymoneygncreader.cpp:1160
+msgid "Loading prices..."
+msgstr "Carregando preços..."
+
+#: converter/mymoneygncreader.cpp:1164 converter/mymoneygncreader.cpp:1171
+msgid "Imported History"
+msgstr "Histórico Importado"
+
+#: converter/mymoneygncreader.cpp:1251
+#, c-format
+msgid "Current importer does not recognize GnuCash account type %1"
+msgstr "O importador atual não reconhece o tipo de conta %1 do GnuCash"
+
+#: converter/mymoneygncreader.cpp:1471
+msgid "Imported Transaction"
+msgstr "Transacção Importada"
+
+#: converter/mymoneygncreader.cpp:1519
+msgid "Loading templates..."
+msgstr "Carregando modelos..."
+
+#: converter/mymoneygncreader.cpp:1531
+msgid "Unknown payee"
+msgstr "Beneficiário desconhecido"
+
+#: converter/mymoneygncreader.cpp:1723
+msgid "Loading schedules..."
+msgstr "Carregando agendamentos..."
+
+#: converter/mymoneygncreader.cpp:1735
+#, c-format
+msgid "Can't find template transaction for schedule %1"
+msgstr ""
+"Não foi possível encontrar um modelo de transacção para o agendamento %1"
+
+#: converter/mymoneygncreader.cpp:1910
+msgid "Reorganizing accounts..."
+msgstr "Reorganizando as contas..."
+
+#: converter/mymoneygncreader.cpp:1972
+msgid ""
+"Your main currency seems to be %1 (%2); do you want to set this as your base "
+"currency?"
+msgstr ""
+"Sua moeda de base parece ser %1 (%2); você deseja configurar isto como sua "
+"moeda de base?"
+
+#: converter/mymoneygncreader.cpp:1993
+msgid "More"
+msgstr "Mais"
+
+#: converter/mymoneygncreader.cpp:1997
+msgid "Save Report"
+msgstr "Gravar o Relatório"
+
+#: converter/mymoneygncreader.cpp:2017
+msgid ""
+"Problems were encountered in converting schedule '%1'.\n"
+"Do you want to review or edit it now?"
+msgstr ""
+"Apareceram problemas ao converter o agendamento '%1'.\n"
+"Deseja verificar-lo e editar-lo agora?"
+
+#: converter/mymoneygncreader.cpp:2039
+msgid ""
+"Found:\n"
+"\n"
+msgstr ""
+"Encontrado:\n"
+"\n"
+
+#: converter/mymoneygncreader.cpp:2040
+msgid " commodities (equities)\n"
+msgstr " mercadorias (valores)\n"
+
+#: converter/mymoneygncreader.cpp:2041
+msgid " prices\n"
+msgstr " preços\n"
+
+#: converter/mymoneygncreader.cpp:2042
+msgid " accounts\n"
+msgstr " contas\n"
+
+#: converter/mymoneygncreader.cpp:2043
+msgid " transactions\n"
+msgstr " transacções\n"
+
+#: converter/mymoneygncreader.cpp:2044
+msgid " schedules\n"
+msgstr " agendamentos\n"
+
+#: converter/mymoneygncreader.cpp:2047
+msgid "No inconsistencies were detected"
+msgstr "Nenhuma inconsistência foi detectada"
+
+#: converter/mymoneygncreader.cpp:2049
+msgid " inconsistencies were detected and corrected\n"
+msgstr " inconsistências foram detectadas e corrigidas\n"
+
+#: converter/mymoneygncreader.cpp:2054
+msgid " orphan accounts were created\n"
+msgstr " contas órfãos foram criadas\n"
+
+#: converter/mymoneygncreader.cpp:2059
+msgid " possible schedule problems were noted\n"
+msgstr " problemas possíveis de agendamento foram anotados\n"
+
+#: converter/mymoneygncreader.cpp:2064
+msgid "Small Business Features (Customers, Invoices, etc.)"
+msgstr "Recursos para Pequenos Negócios (Clientes, Recibos, etc.)"
+
+#: converter/mymoneygncreader.cpp:2065 views/kmymoneyview.cpp:241
+#: views/kmymoneyview.cpp:243
+msgid "Budgets"
+msgstr "Orçamentos"
+
+#: converter/mymoneygncreader.cpp:2066
+msgid "Lots"
+msgstr "Lotes"
+
+#: converter/mymoneygncreader.cpp:2068
+msgid "The following features found in your file are not currently supported:"
+msgstr ""
+"Os seguintes recursos encontrados em seu ficheiro não são atualmente "
+"suportados:"
+
+#: converter/mymoneygncreader.cpp:2071
+msgid ""
+"\n"
+"\n"
+"Press More for further information"
+msgstr ""
+"\n"
+"\n"
+"Pressione Mais para mais informacções"
+
+#: converter/mymoneygncreader.cpp:2139
+msgid "Orphan created from unknown gnucash account"
+msgstr "Órfão criado de uma conta gnucash desconhecida"
+
+#: converter/mymoneygncreader.cpp:2170
+msgid "Internal error - invalid interval char in incrDate"
+msgstr "Erro interno - intervalo de caracteres inválido em incrDate"
+
+#: converter/mymoneygncreader.cpp:2233
+msgid "Enter the investment account name "
+msgstr "Insira o nome da conta investimento "
+
+#: converter/mymoneygncreader.cpp:2234
+msgid "My Investments"
+msgstr "Os Meus Investimentos"
+
+#: converter/mymoneygncreader.cpp:2269
+#, c-format
+msgid "Select parent investment account or enter new name. Stock %1"
+msgstr "Selecione a conta de investimento pai ou insira um novo nome. Acção %1"
+
+#: converter/mymoneygncreader.cpp:2292 converter/mymoneygncreader.cpp:2307
+msgid "%1 is not an Investment Account. Do you wish to make it one?"
+msgstr "%1 não é uma Conta de Investimento. Você deseja torná-la uma?"
+
+#: converter/mymoneygncreader.cpp:2408
+msgid ""
+"An Investment account must be a child of an Asset account\n"
+"Account %1 will be stored under the main Asset account"
+msgstr ""
+"Um conta de Investimento deve ser filha de uma conta de Investimento\n"
+"A conta %1 será armazenada sob a conta de Investimentos principal"
+
+#: converter/mymoneygncreader.cpp:2410
+msgid ""
+"An Income account must be a child of an Income account\n"
+"Account %1 will be stored under the main Income account"
+msgstr ""
+"Um conta de Receita deve ser filha de uma conta de Receita\n"
+"A conta %1 será armazenada sob a conta de Receitas principal"
+
+#: converter/mymoneygncreader.cpp:2412
+msgid ""
+"An Expense account must be a child of an Expense account\n"
+"Account %1 will be stored under the main Expense account"
+msgstr ""
+"Uma conta de Despesa deve ser filha de uma conta de Despesa\n"
+"A conta %1 será armazenada sob a conta de Despesas principal"
+
+#: converter/mymoneygncreader.cpp:2414
+msgid ""
+"One or more transactions contain a reference to an otherwise unknown "
+"account\n"
+"An asset account with the name %1 has been created to hold the data"
+msgstr ""
+"Uma ou mais transacções contém uma referência para uma conta desconhecida\n"
+"Uma conta de ativos com o nome %1 foi criada para conter estes dados"
+
+#: converter/mymoneygncreader.cpp:2416
+msgid "Schedule %1 has interval of %2 which is not currently available"
+msgstr ""
+"O agendamento %1 possui intervalo de %2 que não está atualmente disponível"
+
+#: converter/mymoneygncreader.cpp:2417
+msgid "Schedule %1 dropped at user request"
+msgstr "Agendamento %1 descartado por solicitação do usuário"
+
+#: converter/mymoneygncreader.cpp:2418
+msgid "Schedule %1 contains unknown action (key = %2, type = %3)"
+msgstr "O agendamento %1 contém uma acção desconhecida (chave = %2, tipo= %3)"
+
+#: converter/mymoneygncreader.cpp:2419
+msgid "Schedule %1 contains multiple actions; only one has been imported"
+msgstr ""
+"O agendamento %1 contém acções múltiplas; somente uma acção pode ser "
+"importada"
+
+#: converter/mymoneygncreader.cpp:2420
+msgid "Schedule %1 contains no valid splits"
+msgstr "O agendamento %1 não contém parcelas válidas"
+
+#: converter/mymoneygncreader.cpp:2421
+msgid ""
+"Schedule %1 appears to contain a formula. GnuCash formulae are not "
+"convertible"
+msgstr ""
+"O agendamento %1 parece conter uma fórmula. Fórmulas do GnuCash não são "
+"conversíveis"
+
+#: converter/mymoneygncreader.cpp:2422
+msgid ""
+"Schedule %1 contains unknown interval specification; please check for "
+"correct operation"
+msgstr ""
+"O agendamento %1 contém uma especificação de intervalo desconhecida; por "
+"favor verifique a operação correta"
+
+#: converter/mymoneygncreader.cpp:2423
+msgid ""
+"Schedule %1 contains a deferred interval specification; please check for "
+"correct operation"
+msgstr ""
+"O agendamento %1 contém uma especificação de intervalo posterior; por favor "
+"verifique a operação correta"
+
+#: converter/mymoneygncreader.cpp:2424
+msgid ""
+"Account or Category %1, transaction date %2; split contains invalid value; "
+"please check"
+msgstr ""
+"Na Conta ou Categoria %1, a transacção datada %2 contém um valor inválido; "
+"por favor, verifique"
+
+#: kmymoneyutils.cpp:146
+msgid "&New Schedule..."
+msgstr "&Novo Evento..."
+
+#: kmymoneyutils.cpp:148
+msgid "Create a new schedule."
+msgstr "Criar um novo evento recorrente."
+
+#: kmymoneyutils.cpp:149
+msgid "Use this to create a new schedule."
+msgstr "Use isto para criar um novo evento recorrente."
+
+#: kmymoneyutils.cpp:158
+msgid "&Filter"
+msgstr "&Filtrar"
+
+#: kmymoneyutils.cpp:160
+msgid "Filter out accounts"
+msgstr "Filtrar contas"
+
+# TODO: Verify
+#: kmymoneyutils.cpp:161
+msgid "Use this to filter out accounts"
+msgstr "Use isto para filtrar contas"
+
+#: kmymoneyutils.cpp:192
+msgid "Preferred accounts"
+msgstr "Contas preferidas"
+
+#: kmymoneyutils.cpp:193
+msgid "Payment accounts"
+msgstr "Contas de pagamento"
+
+#: kmymoneyutils.cpp:194
+msgid "Favorite reports"
+msgstr "Relatórios favoritos"
+
+#: kmymoneyutils.cpp:195
+msgid "Forecast (schedule)"
+msgstr "Previsão (agendada)"
+
+#: kmymoneyutils.cpp:196
+msgid "Networth forecast"
+msgstr "Previsão de patrimônio líquido"
+
+#: kmymoneyutils.cpp:197
+msgid "Forecast (history)"
+msgstr "Previsão (histórico)"
+
+#: kmymoneyutils.cpp:198
+msgid "Assets and Liabilities"
+msgstr "Activos e Passivos"
+
+#: kmymoneyutils.cpp:199 reports/pivottable.cpp:2416 views/khomeview.cpp:1393
+#: widgets/rc.cpp:70
+msgid "Budget"
+msgstr "Orçamento"
+
+#: kmymoneyutils.cpp:200
+msgid "CashFlow"
+msgstr "Tesouraria"
+
+#: dialogs/kenterscheduledlg.cpp:153 kmymoneyutils.cpp:366
+msgid "Unable to load schedule details"
+msgstr "Impossível carregar os detalhes do evento recorrente"
+
+#: kmymoneyutils.cpp:390 widgets/register.cpp:473
+msgid ""
+"_: Reconcile state 'Not reconciled'\n"
+"Not reconciled"
+msgstr "Não reconciliada"
+
+#: kmymoneyutils.cpp:393 widgets/register.cpp:476
+msgid ""
+"_: Reconcile state 'Cleared'\n"
+"Cleared"
+msgstr "Compensada"
+
+#: kmymoneyutils.cpp:396 widgets/register.cpp:479
+msgid ""
+"_: Reconcile state 'Reconciled'\n"
+"Reconciled"
+msgstr "Reconciliada"
+
+#: kmymoneyutils.cpp:399 widgets/register.cpp:482
+msgid ""
+"_: Reconcile state 'Frozen'\n"
+"Frozen"
+msgstr "Congelado"
+
+#: kmymoneyutils.cpp:410
+msgid ""
+"_: Reconcile flag C\n"
+"C"
+msgstr "C"
+
+#: kmymoneyutils.cpp:413
+msgid ""
+"_: Reconcile flag R\n"
+"R"
+msgstr "R"
+
+#: kmymoneyutils.cpp:416
+msgid ""
+"_: Reconcile flag F\n"
+"F"
+msgstr "F"
+
+#: kmymoneyutils.cpp:419
+msgid ""
+"_: Flag for unknown reconciliation state\n"
+"?"
+msgstr "?"
+
+#: _tips.cpp:3
+msgid ""
+"<p>...that you can change the sort order of ledger entries by\n"
+"right-clicking the header of the ledger view?\n"
+msgstr ""
+"<p>...que pode mudar a sequência de ordenação das entradas\n"
+"do livro de registos clicando com o botão direito no cabeçalho\n"
+"da visão do mesmo?\n"
+
+#: _tips.cpp:9
+msgid ""
+"<p>...that you can easily move to the other side of a transfer transaction\n"
+"by opening the context menu with the right mouse button and selecting one of "
+"the\n"
+"'Goto' functions?\n"
+msgstr ""
+"<p>...que pode facilmente mover para o outro lado de uma transacção de\n"
+"transferência abrindo o menu de contexto com o botão direito do rato\n"
+"e seleccionando uma das funções 'Ir para...'?\n"
+
+#: _tips.cpp:16
+msgid ""
+"<p>...that you can start editing a transaction by double-clicking on the\n"
+"transaction in the register?\n"
+msgstr ""
+"<p>...que pode começar a editar uma transacção dando um clique-duplo\n"
+"na transacção desejada no registo?\n"
+
+#: _tips.cpp:22
+msgid ""
+"<p>...that you can show more details of the selected transaction in the\n"
+"register by selecting the 'ledger lens' feature in the settings dialog?\n"
+msgstr ""
+"<p>...que pode mostrar mais detalhes da transacção seleccionada\n"
+"no registo seleccionando a funcionalidade de 'lentes do livro de registos'\n"
+"no diálogo de configurações?\n"
+
+#: _tips.cpp:28
+msgid ""
+"<p>...that transactions with no category assigned or split\n"
+"transactions with unassigned values are marked with an exclamation mark \n"
+"on a yellow triangle in the register?\n"
+msgstr ""
+"<p>...que transacções sem categoria atribuída ou parcela\n"
+"de transacção sem valores atribuídos são sinalizados com um ponto de \n"
+"exclamação em um triângulo amarelo no livro de registro?\n"
+
+#: _tips.cpp:35
+msgid ""
+"<p>...that you can show all details of the transactions in the register\n"
+"by typing &lt;Ctrl-T&gt; or selecting the 'Settings/Show Transaction "
+"Detail'\n"
+"menu entry? You can turn this feature off the same way.\n"
+msgstr ""
+"<p>...que você pode mostrar todos os detalhes das transacções no livro de\n"
+"registro digitando &lt;Ctrl-T&gt; ou selecionando a entrada de menu\n"
+" 'Configurações->Mostrar Detalhes da Transação'? Você pode desligar\n"
+"este recurso da mesma maneira.\n"
+
+#: _tips.cpp:42
+msgid ""
+"<p>...that you can switch between a listing of all accounts or\n"
+"an icon view of all asset and liability accounts with the tabs\n"
+"in the accounts view?\n"
+msgstr ""
+"<p>...que pode alternar entre a listagem de todas as contas\n"
+"e uma visão de ícones de todas as contas de activos e de passivos\n"
+"com as abas na visão de contas?\n"
+
+#: _tips.cpp:49
+msgid "<p>...that the KMyMoney development team wishes you a nice day?\n"
+msgstr ""
+"<p>...que a equipa de desenvolvimento do KMyMoney lhe deseja \n"
+"um bom dia?\n"
+
+#: _tips.cpp:54
+msgid ""
+"<p>...you can use your own external filter program to convert any\n"
+"import format to QIF on the fly? See the QIF profile editor for\n"
+"more details.\n"
+msgstr ""
+"<p>...que pode usar o seu próprio programa de filtragem externo\n"
+"para converter qualquer formato de importação para QIF?\n"
+"Veja o editor de perfil QIF para mais detalhes.\n"
+
+#: _tips.cpp:61
+msgid ""
+"<p>...that you can create a scheduled transaction from an existing\n"
+"one by selecting the context menu on a transaction in the ledger\n"
+"or the \"More...\"-menu in the transaction form?\n"
+msgstr ""
+"<p>...que pode criar uma transacção agendada a partir de uma\n"
+"existente seleccionando o menu de contexto de uma transacção no livro\n"
+"de registos ou o menu \"Mais...\" no formulário da transacção?\n"
+
+#: _tips.cpp:68
+#, fuzzy
+msgid ""
+"<p>...that you can switch to the payee of a transaction\n"
+"by selecting the context menu on a transaction in the ledger\n"
+"or in the transaction menu?\n"
+msgstr ""
+"<p>...que pode passar para o beneficiário de uma transacção\n"
+"seleccionando o menu de contexto de uma transacção no livro de\n"
+"registos ou o menu \"Mais...\" no formulário da transacção?\n"
+
+#: _tips.cpp:75
+msgid ""
+"<p>...that you can modify the colors and fonts used for the ledgers\n"
+"via <i>Configure/Register/...</i>?\n"
+msgstr ""
+"<p>...que pode modificar as cores e fontes usadas no livro\n"
+"de registos via <i>Configurar/Registo/...</i>?\n"
+
+#: _tips.cpp:81
+msgid ""
+"<p>...that you can hide transactions prior to a specific date?\n"
+"The date can be modified via <i>Configure/Register/Filter</i>.\n"
+msgstr ""
+"<p>...que pode esconder transacções anteriores a uma data\n"
+"específica? A data pode ser modificada via <i>Configurar/Filtro</i>.\n"
+
+#: _tips.cpp:87
+msgid ""
+"<p>...that you can customize the \"Home-Page\"\n"
+"via <i>Configure/Home</i>?\n"
+msgstr ""
+"<p>...que pode personalizar a \"Página Inicial\"\n"
+"via <i>Configurar/Página Inicial</i>?\n"
+
+#: _tips.cpp:93
+msgid ""
+"<p>...that you can enter new transactions even while reconciling\n"
+"an account? You can also make the transaction form visible.\n"
+msgstr ""
+"<p>...que pode introduzir novas transacções mesmo enquanto estiver\n"
+"reconciliando uma conta? Pode também tornar o formulário de transacção\n"
+"visível.\n"
+
+#: _tips.cpp:99
+msgid ""
+"<p>...that you can actively support the KMyMoney development team in\n"
+"cases that heavily depend on your data? You can save your data in an\n"
+"anonymized way for this support.<p>\n"
+"Just open your data file and immediately\n"
+"select <b>File/Save as...</b>. In the <b>Save As...</b> dialog\n"
+"select the filter <b>Anonymous Files</b> and make sure your file gets\n"
+"the extensions <b>.anon.xml</b>. <p>\n"
+"To verify, how the data looks like you are about to send away, you can open\n"
+"this file in KMyMoney and see how the developers see your data.\n"
+msgstr ""
+"<p>...que você pode ajudar activamente a equipe de desenvolvimento do "
+"KMyMoney\n"
+"em casos onde ela depende fortemente dos seus dados? Você pode salvar seus\n"
+"dados de uma forma anónima para este fim.<p>\n"
+"Apenas abra seu arquivo de dados e seleccione imediatamente <b>Arquivo-"
+">Salvar\n"
+"como...</b>. Na janela <b>Salvar Como...</b> seleccione o filtro <b>Arquivos "
+"Anónimos\n"
+"</b> e certifique-se de obter a extensão <b>.anon.xml</b>.\n"
+"Para verificar como seus dados aparecerão ao enviá-los, você pode abrir este "
+"arquivo\n"
+"no KMyMoney e ver como os programadores verão seus dados.\n"
+
+#: _tips.cpp:112
+msgid ""
+"<p>... that you can import your bank statements even without a network \n"
+"connection? Just select the file (OFX or QIF) from the File->Import menu.</"
+"p>\n"
+"<p>Provided by Jose Jorge</p>\n"
+msgstr ""
+"<p>... que pode importar os seus extractos de banco, mesmo sem ligação à "
+"rede?\n"
+"Basta seleccionar o ficheiro (OFX ou QIF) a partir do menu Ficheiro-"
+">Importar.</p>\n"
+"<p>Indicado por José Jorge</p>\n"
+
+#: reports/listtable.cpp:159 reports/listtable.cpp:163
+#: reports/pivottable.cpp:1564
+msgid ""
+"_: Report date range\n"
+"%1 through %2"
+msgstr "%1 até %2"
+
+#: reports/listtable.cpp:171 reports/pivottable.cpp:1571
+#, c-format
+msgid "All currencies converted to %1"
+msgstr "Todas as moedas convertidas para %1"
+
+#: reports/listtable.cpp:172 reports/pivottable.cpp:1328
+msgid "All currencies converted to %1\n"
+msgstr "Todas as moedas convertidas para %1\n"
+
+#: reports/listtable.cpp:176 reports/pivottable.cpp:1573
+msgid "All values shown in %1 unless otherwise noted"
+msgstr ""
+"Todos os valores exibidos em %1, a menos que anotados de maneira diferente"
+
+#: reports/listtable.cpp:177 reports/pivottable.cpp:1330
+msgid "All values shown in %1 unless otherwise noted\n"
+msgstr ""
+"Todos os valores exibidos em %1, a menos que anotados de maneira diferente\n"
+
+#: dialogs/kequitypriceupdatedlg.cpp:73 dialogs/kfindtransactiondlg.cpp:188
+#: dialogs/rc.cpp:53 dialogs/rc.cpp:63 dialogs/rc.cpp:208 dialogs/rc.cpp:805
+#: dialogs/settings/rc.cpp:111 dialogs/transactioneditor.cpp:844
+#: reports/listtable.cpp:196 views/khomeview.cpp:412 views/khomeview.cpp:485
+#: views/khomeview.cpp:519 views/rc.cpp:61 widgets/kmymoneypriceview.cpp:128
+#: widgets/rc.cpp:36 widgets/register.cpp:565 widgets/transaction.cpp:1027
+#: widgets/transaction.cpp:1484
+msgid "Date"
+msgstr "Data"
+
+#: reports/listtable.cpp:198
+msgid "Num"
+msgstr "Número"
+
+#: dialogs/kfindtransactiondlg.cpp:204 dialogs/kmymoneysplittable.cpp:78
+#: dialogs/kmymoneysplittable.cpp:831 dialogs/rc.cpp:217
+#: dialogs/transactioneditor.cpp:831 dialogs/transactioneditor.cpp:1374
+#: dialogs/transactioneditor.cpp:1382 dialogs/transactioneditor.cpp:1396
+#: dialogs/transactioneditor.cpp:1449 dialogs/transactioneditor.cpp:1456
+#: dialogs/transactioneditor.cpp:1504 reports/listtable.cpp:200
+#: views/kcategoriesview.cpp:76 views/rc.cpp:62 widgets/rc.cpp:115
+#: widgets/register.cpp:62 widgets/transaction.cpp:848
+#: widgets/transaction.cpp:906
+msgid "Category"
+msgstr "Categoria"
+
+#: dialogs/kmymoneysplittable.cpp:79 dialogs/kmymoneysplittable.cpp:837
+#: reports/listtable.cpp:202 widgets/rc.cpp:101 widgets/transaction.cpp:1042
+#: widgets/transaction.cpp:1628
+msgid "Memo"
+msgstr "Memo"
+
+#: reports/listtable.cpp:203
+msgid "Top Category"
+msgstr "Categoria de Topo"
+
+#: reports/listtable.cpp:204
+msgid "Category Type"
+msgstr "Tipo de Categoria"
+
+#: dialogs/rc.cpp:229 dialogs/settings/rc.cpp:152 reports/listtable.cpp:207
+#: widgets/kmymoneycombo.cpp:346 widgets/rc.cpp:107
+msgid "Reconciled"
+msgstr "Reconciliada"
+
+#: reports/listtable.cpp:208 widgets/rc.cpp:117
+msgid "Action"
+msgstr "Acção"
+
+#: dialogs/investactivities.cpp:199 dialogs/investactivities.cpp:287
+#: dialogs/investactivities.cpp:424 dialogs/investactivities.cpp:504
+#: dialogs/investactivities.cpp:544 dialogs/investtransactioneditor.cpp:241
+#: reports/listtable.cpp:209 widgets/rc.cpp:103 widgets/transaction.cpp:1513
+msgid "Shares"
+msgstr "Cotas"
+
+#: dialogs/investtransactioneditor.cpp:248
+#: dialogs/investtransactioneditor.cpp:1067
+#: dialogs/investtransactioneditor.cpp:1068
+#: dialogs/investtransactioneditor.cpp:1072
+#: dialogs/kequitypriceupdatedlg.cpp:72 dialogs/rc.cpp:109 dialogs/rc.cpp:164
+#: dialogs/rc.cpp:251 dialogs/rc.cpp:756 dialogs/rc.cpp:827
+#: dialogs/settings/rc.cpp:117 reports/listtable.cpp:210
+#: reports/listtable.cpp:211 reports/pivottable.cpp:2441
+#: views/kinvestmentview.cpp:80 widgets/kmymoneypriceview.cpp:129
+#: widgets/rc.cpp:43 widgets/rc.cpp:105 widgets/register.cpp:573
+msgid "Price"
+msgstr "Preço"
+
+#: reports/listtable.cpp:212
+msgid "Net Value"
+msgstr "Valor Líquido"
+
+#: reports/listtable.cpp:213
+msgid "Buys"
+msgstr "Compras"
+
+#: reports/listtable.cpp:214
+msgid "Sells"
+msgstr "Vendas"
+
+#: reports/listtable.cpp:215
+msgid "Dividends Reinvested"
+msgstr "Dividendos Reinvestidos"
+
+#: reports/listtable.cpp:216
+msgid "Dividends Paid Out"
+msgstr "Dividendos Pagos"
+
+#: reports/listtable.cpp:217
+msgid "Starting Balance"
+msgstr "Saldo Inicial"
+
+#: reports/listtable.cpp:218
+msgid "Ending Balance"
+msgstr "Saldo Final"
+
+#: reports/listtable.cpp:219
+msgid "Annualized Return"
+msgstr "Retorno Anual"
+
+#: reports/listtable.cpp:220
+msgid "Return On Investment"
+msgstr "Retorno Do Investimento"
+
+#: dialogs/rc.cpp:106 dialogs/rc.cpp:161 dialogs/rc.cpp:248 dialogs/rc.cpp:505
+#: dialogs/rc.cpp:570 dialogs/rc.cpp:667 dialogs/rc.cpp:753
+#: reports/listtable.cpp:223 widgets/register.cpp:570
+msgid "Payment"
+msgstr "Pagamento"
+
+#: dialogs/rc.cpp:111 dialogs/rc.cpp:166 dialogs/rc.cpp:253 dialogs/rc.cpp:709
+#: dialogs/rc.cpp:758 reports/listtable.cpp:224 widgets/rc.cpp:119
+#: widgets/register.cpp:575
+msgid "Balance"
+msgstr "Saldo"
+
+#: reports/listtable.cpp:227 views/kscheduledview.cpp:74
+msgid "Next Due Date"
+msgstr "Próxima Data de Vencimento"
+
+#: reports/listtable.cpp:229 views/kscheduledview.cpp:76
+msgid "Payment Method"
+msgstr "Método de Pagamento"
+
+#: dialogs/rc.cpp:803 reports/listtable.cpp:231 widgets/rc.cpp:2
+msgid "Description"
+msgstr "Descripção"
+
+#: reports/listtable.cpp:232
+msgid "Opening Date"
+msgstr "Data de Abertura"
+
+#: reports/listtable.cpp:234
+msgid "Balance Early Warning"
+msgstr "Aviso de Valor"
+
+#: reports/listtable.cpp:235
+msgid "Balance Max Limit"
+msgstr "Limite Máximo de Valor"
+
+#: reports/listtable.cpp:236
+msgid "Credit Early Warning"
+msgstr "Aviso de Crédito"
+
+#: reports/listtable.cpp:237
+msgid "Credit Max Limit"
+msgstr "Limite Máximo de Crédito"
+
+#: dialogs/rc.cpp:376 reports/listtable.cpp:238
+msgid "Tax"
+msgstr "Imposto"
+
+#: reports/listtable.cpp:239
+msgid "Preferred"
+msgstr "Preferido"
+
+#: reports/listtable.cpp:240
+msgid "Loan Amount"
+msgstr "Quantia do Empréstimo"
+
+#: dialogs/rc.cpp:511 reports/listtable.cpp:241
+msgid "Interest Rate"
+msgstr "Taxa de Juro"
+
+#: reports/listtable.cpp:242
+msgid "Next Interest Change"
+msgstr "Próxima mudança de taxa de juro"
+
+#: reports/listtable.cpp:243
+msgid "Periodic Payment"
+msgstr "Pagamento Periódico"
+
+#: reports/listtable.cpp:244
+msgid "Final Payment"
+msgstr "Pagamento Final"
+
+#: reports/listtable.cpp:245 views/khomeview.cpp:766 views/khomeview.cpp:1265
+#: views/khomeview.cpp:1273
+msgid "Current Balance"
+msgstr "Saldo Actual"
+
+#: dialogs/investactivities.cpp:201 dialogs/investactivities.cpp:289
+#: dialogs/investactivities.cpp:368 dialogs/investactivities.cpp:426
+#: dialogs/rc.cpp:327 reports/listtable.cpp:360 reports/listtable.cpp:364
+#: reports/listtable.cpp:556 reports/listtable.cpp:558
+#: reports/pivottable.cpp:1343 reports/pivottable.cpp:1445
+#: reports/pivottable.cpp:1505 reports/pivottable.cpp:1598
+#: reports/pivottable.cpp:1768 reports/pivottable.cpp:1845
+#: reports/pivottable.cpp:2165 reports/pivottable.cpp:2167
+#: reports/pivottable.cpp:2187 reports/pivottable.cpp:2189
+#: reports/querytabletest.cpp:134 reports/querytabletest.cpp:135
+#: reports/querytabletest.cpp:136 reports/querytabletest.cpp:137
+#: reports/querytabletest.cpp:162 reports/querytabletest.cpp:163
+#: reports/querytabletest.cpp:164 reports/querytabletest.cpp:197
+#: reports/querytabletest.cpp:198 reports/querytabletest.cpp:224
+#: reports/querytabletest.cpp:250 reports/querytabletest.cpp:251
+#: reports/querytabletest.cpp:252 reports/querytabletest.cpp:275
+#: reports/querytabletest.cpp:276 reports/querytabletest.cpp:277
+#: reports/querytabletest.cpp:366 reports/querytabletest.cpp:422
+#: reports/querytabletest.cpp:423 views/kforecastview.cpp:568 views/rc.cpp:18
+#: widgets/kmymoneyaccounttreeforecast.cpp:139 widgets/transaction.cpp:1643
+msgid "Total"
+msgstr "Total"
+
+#: reports/listtable.cpp:444
+msgid "Initial Market Value"
+msgstr "Valor Inicial do Mercado"
+
+#: reports/listtable.cpp:445
+msgid "Ending Market Value"
+msgstr "Valor Final no Mercado"
+
+#: reports/listtable.cpp:448 reports/querytabletest.cpp:651
+msgid "Opening Balance"
+msgstr "Saldo de Abertura"
+
+#: reports/listtable.cpp:449 reports/querytabletest.cpp:652
+#: reports/querytabletest.cpp:653
+msgid "Closing Balance"
+msgstr "Saldo de Fechamento"
+
+#: reports/listtable.cpp:490 reports/listtable.cpp:491
+msgid "Calculated"
+msgstr "Calculado"
+
+#: reports/listtable.cpp:572 reports/listtable.cpp:574
+#: reports/pivottable.cpp:1530 reports/pivottable.cpp:1886
+#: reports/querytabletest.cpp:138 reports/querytabletest.cpp:165
+#: reports/querytabletest.cpp:199 reports/querytabletest.cpp:225
+#: reports/querytabletest.cpp:253 reports/querytabletest.cpp:278
+#: reports/querytabletest.cpp:367 reports/querytabletest.cpp:402
+#: reports/querytabletest.cpp:424 reports/querytabletest.cpp:548
+#: reports/querytabletest.cpp:551 reports/querytabletest.cpp:586
+msgid "Grand Total"
+msgstr "Total Completo"
+
+#: dialogs/rc.cpp:233 reports/pivottable.cpp:339 views/kscheduledview.cpp:174
+#: views/kscheduledview.cpp:433 views/kscheduledview.cpp:449
+#: widgets/kmymoneyscheduledcalendar.cpp:48
+msgid "Transfers"
+msgstr "Transferências"
+
+#: reports/pivottable.cpp:1951
+msgid "Legend"
+msgstr "Legenda"
+
+#: reports/pivottable.cpp:2411 views/khomeview.cpp:1406
+#: views/khomeview.cpp:1443
+msgid "Actual"
+msgstr "Real"
+
+#: reports/pivottable.cpp:2421 views/khomeview.cpp:1409
+#: views/khomeview.cpp:1446
+msgid "Difference"
+msgstr "Diferença"
+
+#: reports/pivottable.cpp:2431
+msgid "Moving Average"
+msgstr "Média dos Movimentos"
+
+#: reports/pivottable.cpp:2436
+#, fuzzy
+msgid "Moving Average Price"
+msgstr "Média dos Movimentos"
+
+#: reports/objectinfotable.cpp:214 reports/querytable.cpp:693
+#: reports/querytable.cpp:736 reports/querytable.cpp:1356
+#: reports/querytable.cpp:1375 views/kpayeesview.cpp:742
+#, c-format
+msgid "Transfer from %1"
+msgstr "Transferir de %1"
+
+#: reports/objectinfotable.cpp:215 reports/querytable.cpp:694
+#: reports/querytable.cpp:735 reports/querytable.cpp:1355
+#: reports/querytable.cpp:1374 views/kpayeesview.cpp:740
+#, c-format
+msgid "Transfer to %1"
+msgstr "Transferir para %1"
+
+#: reports/querytabletest.cpp:471 views/kreportsview.cpp:1144
+msgid "Investment Transactions"
+msgstr "Transacções de Investimento"
+
+#: reports/querytabletest.cpp:472 reports/querytabletest.cpp:564
+msgid "Test Report"
+msgstr "Relatório de Teste"
+
+#: reports/querytabletest.cpp:547 reports/querytabletest.cpp:550
+msgid "Total Stock 1"
+msgstr "Total de Ações 1"
+
+#: reports/querytabletest.cpp:563 views/kreportsview.cpp:1174
+msgid "Investment Performance by Account"
+msgstr "Desempenho dos Investimentos por Conta"
+
+#: reports/querytable.cpp:431 reports/querytable.cpp:1200
+#, c-format
+msgid "Month of %1"
+msgstr "Mês de %1"
+
+#: reports/querytable.cpp:432 reports/querytable.cpp:1201
+#, c-format
+msgid "Week of %1"
+msgstr "Semana de %1"
+
+#: reports/querytable.cpp:576 reports/querytable.cpp:739
+#: reports/querytable.cpp:858 reports/querytable.cpp:1325
+#: reports/querytable.cpp:1481
+msgid "No Institution"
+msgstr "Nenhuma Instituição"
+
+#: reports/querytable.cpp:580 reports/querytable.cpp:1329
+msgid "[Empty Payee]"
+msgstr "[Beneficiário Vazio]"
+
+#: reports/querytable.cpp:615 reports/querytable.cpp:1361
+msgid "[Split Transaction]"
+msgstr "[Dividir Transação]"
+
+#: reports/querytable.cpp:616 reports/querytable.cpp:617
+msgid "Split"
+msgstr "Dividir"
+
+#: main.cpp:51
+msgid ""
+"\n"
+"KMyMoney, the Personal Finance Manager for KDE.\n"
+"\n"
+"Please consider contributing to this project with code and/or suggestions."
+msgstr ""
+"\n"
+"KMyMoney, o Gerenciador de Finanças Pessoais para o KDE.\n"
+"\n"
+"Por favor, considere a possibilidade de contribuir para este projeto\n"
+"com código e/ou sugestões."
+
+#: main.cpp:55
+msgid "language to be used"
+msgstr "língua a ser usada"
+
+#: main.cpp:56
+msgid "don't open last used file"
+msgstr "não abrir o último arquivo usado"
+
+#: main.cpp:57
+msgid "enable performance timers"
+msgstr "ativar cronômetros de desempenho"
+
+#: main.cpp:61
+msgid "turn on program traces"
+msgstr "ligar rastreio do programa"
+
+#: main.cpp:62
+msgid "dump the names of all defined KAction objects to stdout and quit"
+msgstr ""
+"direcionar os nomes de todos os objetos KAction definidos para a saída "
+"padrão e sair"
+
+#: main.cpp:66
+msgid "file to open"
+msgstr "ficheiro a abrir"
+
+#: main.cpp:92
+msgid "Memory leakage detection"
+msgstr "Detecção de fuga de memória"
+
+#: main.cpp:96
+msgid "Compiled with the following settings:\n"
+msgstr "Compilado com as seguintes configurações:\n"
+
+#: dialogs/kmymoneysplittable.cpp:650 dialogs/ksplittransactiondlg.cpp:277
+#: main.cpp:98
+msgid "KMyMoney"
+msgstr "KMyMoney"
+
+#: main.cpp:104
+msgid "Initial idea, much initial source code, Project admin"
+msgstr ""
+"Ideia inicial, muito do código fonte original, Administrador do Projecto"
+
+#: main.cpp:105
+msgid "Core engine, Release Manager, Project admin"
+msgstr "Motor do Núcleo, Gerenciador de Versões, Administrador do Projeto"
+
+#: main.cpp:106
+msgid "Reporting logic, OFX Import"
+msgstr "Relatório lógico, Importador OFX"
+
+#: main.cpp:107
+msgid "Database backend, maintainer stable branch"
+msgstr "Base de Dados sistema, versão estavel"
+
+#: main.cpp:108
+msgid "Forecast, Reports"
+msgstr "Prvisão, Relatórios"
+
+#: main.cpp:109
+msgid "Project Admin"
+msgstr "Administrador de Projecto"
+
+#: main.cpp:110
+msgid "Developer"
+msgstr "Programador"
+
+#: main.cpp:111
+msgid "Database backend"
+msgstr "Base de Dados sistema"
+
+#: main.cpp:113
+msgid "Initial investment support"
+msgstr "Suporte inicial a investimentos"
+
+#: main.cpp:114
+msgid "Developer & Artist"
+msgstr "Programador & Artista"
+
+#: main.cpp:115
+msgid "Icons & splash screen"
+msgstr "Ícones & tela de apresentação"
+
+#: main.cpp:116 main.cpp:117
+msgid "Patches"
+msgstr "Correcções"
+
+#: main.cpp:136
+msgid ""
+"The monetary decimal symbol is not correctly set in the KDE Control Center's "
+"Country/Region & Language settings. Please set it to a reasonable value and "
+"start KMyMoney again."
+msgstr ""
+"é não set em KDE Control Centro s País Região Língua configurações set até a "
+"valor e start KMyMoney."
+
+#: main.cpp:136
+msgid "Invalid settings"
+msgstr "Configurações inválidas"
+
+#: main.cpp:228
+msgid "Another instance of KMyMoney is already running. Do you want to quit?"
+msgstr "Outra instância do KMyMoney já está rodando. Você deseja sair?"
+
+#: main.cpp:289
+msgid "Uncaught error. Please report the details to the developers"
+msgstr "Erro no previsto. É favor indicar os detalhes aos programadores"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "José Nuno Pires,Pedro Morais,José Jorge"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "jncp@netcabo.pt,morais@kde.org,jjorge@free.fr"
+
+#: dialogs/kcsvprogressdlg.cpp:62 dialogs/kimportdlg.cpp:66 rc.cpp:1
+msgid "&Import"
+msgstr "&Importar"
+
+#: rc.cpp:2
+msgid "E&xport"
+msgstr "E&xportar"
+
+#: rc.cpp:3
+msgid "&Institution"
+msgstr "&Instituição"
+
+#: rc.cpp:4
+msgid "&Account"
+msgstr "&Conta"
+
+#: rc.cpp:5
+msgid "&Category"
+msgstr "&Categoria"
+
+#: rc.cpp:6
+msgid "&Transaction"
+msgstr "Transacções"
+
+# TODO merge?
+#: rc.cpp:7 rc.cpp:20
+msgid "Mark transaction as..."
+msgstr "Marcar a transacção como..."
+
+#: rc.cpp:8 rc.cpp:21
+msgid "Mark transaction"
+msgstr "Marcar a transacção"
+
+#: rc.cpp:9
+msgid "T&ools"
+msgstr "&Ferramentas"
+
+#: rc.cpp:10
+msgid "Account options"
+msgstr "Opções de Conta"
+
+#: rc.cpp:11
+msgid "Category options"
+msgstr "Opções de categoria"
+
+#: rc.cpp:12
+msgid "Institution options"
+msgstr " Opções da Instituição"
+
+#: rc.cpp:13
+msgid "Payee options"
+msgstr "Opções de Beneficiário"
+
+#: rc.cpp:14
+msgid "Budget options"
+msgstr "Opções de orçamento"
+
+#: rc.cpp:15
+msgid "Investment options"
+msgstr "Opções de Investimento"
+
+#: rc.cpp:16
+#, fuzzy
+msgid "Scheduled transactions options"
+msgstr "Transacções agendadas encontradas"
+
+#: rc.cpp:17
+msgid "Transaction options"
+msgstr "Opções de Transacção"
+
+# TODO merge?
+#: rc.cpp:18
+msgid "Move transaction to..."
+msgstr "Mover a transacção para..."
+
+#: rc.cpp:19
+msgid "Select account"
+msgstr "Seleccionar a conta"
+
+#: rc.cpp:22
+msgid "Currency options"
+msgstr "Opções de Moeda"
+
+#: rc.cpp:24
+msgid "Always show a No. field in transaction form"
+msgstr "Sempre mostrar um campo Nr. no formulário da transacção"
+
+#: rc.cpp:25
+msgid "Auto fill with previous transaction data"
+msgstr "Preencher automaticamente com os dados da transacção anterior"
+
+#: rc.cpp:26
+msgid "Treat two transactions as identical, if amount differs less than"
+msgstr "Tratar duas transacções como idênticas se o valor diferir menos de"
+
+#: dialogs/settings/rc.cpp:144 rc.cpp:27
+msgid "Auto increment check number"
+msgstr "Incrementar automaticamente o número do cheque"
+
+#: rc.cpp:28
+msgid "Autosave file periodically"
+msgstr "Salvar periodicamente o arquivo"
+
+#: rc.cpp:29
+msgid "Autosave interval in minutes"
+msgstr "Intervalo de salvamento em minutos"
+
+#: rc.cpp:30
+msgid "Check schedules upon startup"
+msgstr "Verificar eventos recorrentes ao iniciar"
+
+#: dialogs/settings/rc.cpp:171 rc.cpp:31
+msgid "Enter transactions this number of days in advance"
+msgstr "Introduzir transacções esta quantidade de dias antecipadamente"
+
+#: dialogs/settings/rc.cpp:172 rc.cpp:32
+msgid "Number of days to preview schedules in ledger"
+msgstr "Dias antes dos agendamentos a antecipar no registo"
+
+#: dialogs/settings/rc.cpp:143 rc.cpp:33
+msgid "Insert transaction type into No. field for new transactions"
+msgstr "Inserir o tipo da transacção no campo Nr. para novas transacções"
+
+#: dialogs/settings/rc.cpp:145 rc.cpp:34
+msgid "Keep changes when selecting a different transaction/split"
+msgstr "Manter mudanças ao seleccionar uma diferente transacção/parcela"
+
+#: rc.cpp:35
+msgid "Using the Enter key moves between the fields"
+msgstr "Usar a tecla Enter move entre os campos"
+
+# TODO: lentes?
+#: dialogs/settings/rc.cpp:130 rc.cpp:36
+msgid "Use the ledger lens"
+msgstr "Usar as lentes do livro de registos"
+
+#: rc.cpp:37
+msgid "Price Precision"
+msgstr "Precisão do Preço"
+
+#: dialogs/rc.cpp:65 rc.cpp:38
+msgid "Update price history"
+msgstr "Atualizar histórico de preços"
+
+#: dialogs/settings/rc.cpp:132 rc.cpp:39
+msgid "Show transaction form"
+msgstr "Mostrar o formulário da transacção"
+
+#: rc.cpp:40
+msgid "Start with last selected view or homepage"
+msgstr "Iniciar com a última visão seleccionada ou página inicial"
+
+#: rc.cpp:41
+msgid "Use GPG to encrypt data file"
+msgstr "Usar GPG para criptografar arquivo de dados"
+
+#: rc.cpp:42
+msgid "Also encrypt against recover key"
+msgstr "Também criptografar com a chave de recuperação"
+
+#: rc.cpp:43
+msgid "GPG User ID (deprecated)"
+msgstr "ID do Usuário no GPG (obsoleto)"
+
+#: rc.cpp:44
+msgid "GPG User ID"
+msgstr "ID do Usuário no GPG"
+
+#: rc.cpp:45
+msgid "Run in expert (accountant) mode"
+msgstr "Executar em modo especialista (contador)"
+
+#: rc.cpp:46
+msgid "Show splash screen during startup"
+msgstr "Mostrar imagem de início ao arrancar"
+
+#: rc.cpp:47
+msgid "Synchronize account in ledger and investment view"
+msgstr "Sincronizar conta nas visões do livro de registro e de investimento"
+
+#: rc.cpp:48
+msgid "Icon size for view selection"
+msgstr "Tamanho do ícone para a seleção de visão"
+
+#: rc.cpp:49
+msgid "list of hidden views"
+msgstr "lista de visões ocultas"
+
+#: rc.cpp:50
+msgid "Firsttime switch to start new user wizard"
+msgstr "Na primeira vez alternar para o assistente de novo usuário"
+
+#: rc.cpp:51
+msgid "Show title bar on each view"
+msgstr "Mostrar a barra de título em cada vista"
+
+#: rc.cpp:52
+msgid "Start string matches for e.g. payees at start of string"
+msgstr ""
+
+#: rc.cpp:53
+msgid "Order of items on homepage"
+msgstr "Ordem dos itens na página inicial"
+
+#: rc.cpp:54
+msgid "Percentage of default font size used for home view HTML page"
+msgstr ""
+"Percentagem padrão de tamanho de fonte usada para a visão inicial da página "
+"HTML"
+
+#: rc.cpp:55
+msgid "Remember (manually adjusted) font size in home view on program end."
+msgstr ""
+"Recordar (ajustado manualmente) o tamanho da fonte na visão inicial ao "
+"encerrar o programa."
+
+#: rc.cpp:56
+msgid "Show account limit information on the Homepage"
+msgstr "Mostrar os limites das contas na página de início"
+
+#: rc.cpp:58
+msgid "Hide closed accounts"
+msgstr "Ocultar contas ocultas"
+
+#: rc.cpp:59
+msgid "Hide finished schedules"
+msgstr "Ocultar agendamentos terminados"
+
+#: rc.cpp:61
+msgid "Show all register entries in full detail"
+msgstr "Mostrar todos os valores do registo em completo"
+
+#: dialogs/settings/rc.cpp:129 rc.cpp:62
+msgid "Show a grid in the register"
+msgstr "Mostrar uma grelha no registo"
+
+#: rc.cpp:63
+msgid "Show fancy group markers"
+msgstr "Mostrar lindos marcadores de grupos"
+
+#: rc.cpp:64
+msgid "Show fancy markers for previous and current fiscal year"
+msgstr "Mostrar lindos marcadores para os anos fiscais"
+
+#: rc.cpp:65
+msgid "Starting month of the fiscal year"
+msgstr "Mês inicial do ano fiscal"
+
+#: rc.cpp:66
+msgid "Starting day of the fiscal year"
+msgstr "Dia inicial do ano fiscal"
+
+#: rc.cpp:67
+msgid "Start date"
+msgstr "Data inicial"
+
+#: dialogs/settings/rc.cpp:9 rc.cpp:68
+msgid "Use system colors"
+msgstr "Usar as cores do sistema"
+
+#: rc.cpp:69
+msgid "List color"
+msgstr "Cor da lista"
+
+#: rc.cpp:70
+msgid "List background color"
+msgstr "Cor do fundo da lista"
+
+#: rc.cpp:71
+msgid "List grid color"
+msgstr "Cor da grade"
+
+#: rc.cpp:72
+msgid "Background color for imported transactions"
+msgstr "Cor de fundo para transacções importadas"
+
+#: rc.cpp:73
+msgid "Background color for matched transactions"
+msgstr "Cor de fundo para transacções correspondentes"
+
+#: rc.cpp:74
+msgid "List color for erronous transactions"
+msgstr "Cor da lista para transacções erradas"
+
+#: rc.cpp:75
+msgid "List color for missing conversion rate"
+msgstr "Cor da lista para taxas de conversão faltando"
+
+#: rc.cpp:76
+msgid "List color for negative values"
+msgstr "Cor da lista para valores negativos"
+
+#: rc.cpp:77
+msgid "Background color for group marker"
+msgstr "Cor de fundo para o marcador de grupo"
+
+#: rc.cpp:78
+msgid "Background color for required fields"
+msgstr "Cor de fundo para campos obrigatórios"
+
+#: rc.cpp:79
+msgid "Use system font"
+msgstr "Utilizar o tipo de letra do sistema"
+
+#: dialogs/settings/rc.cpp:21 rc.cpp:80
+msgid "Cell font"
+msgstr "Tipo de letra das células"
+
+#: dialogs/settings/rc.cpp:22 rc.cpp:81
+msgid "Header font"
+msgstr "Tipo de letra de cabeçalho"
+
+#: rc.cpp:82 rc.cpp:83
+msgid "Sort order of register in normal view"
+msgstr "Ordenação do registro na visão normal"
+
+#: rc.cpp:84
+msgid "Sort order of register in search dialog"
+msgstr "Ordenação do registro na janela de busca"
+
+#: rc.cpp:85
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation"
+msgstr ""
+"Estado de reconciliação por omissão para as transacções inseridas durante a "
+"reconciliação"
+
+#: rc.cpp:86
+msgid "Number of days (plus/minus) to search for matching transactions"
+msgstr "Dias (mais ou menos) a procurar por transacções que correspondem"
+
+#: rc.cpp:87
+msgid "During import, ask for a new payee's default category"
+msgstr ""
+
+#: rc.cpp:88
+msgid "Method to calculate forecast"
+msgstr "Método para calcular a previsão"
+
+#: rc.cpp:89
+msgid "Days to forecast"
+msgstr "Dias a prever"
+
+#: rc.cpp:90
+msgid "Days of normal account cycle"
+msgstr "Dias de ciclo normal da conta"
+
+#: rc.cpp:91
+msgid "Number of historic cycles to use in forecast"
+msgstr "Ciclos do histórico a utilizar na previsão"
+
+#: rc.cpp:92
+msgid "Day of month to start forecast"
+msgstr "Dia do mês onde começar a previsão"
+
+#: rc.cpp:93
+msgid "Method to calculate history-based forecast"
+msgstr "Método para calcular previsão baseada no histórico"
+
+#: rc.cpp:94
+msgid "Skip opening date when fetching transactions"
+msgstr "Pular data de abertura ao obter transacções"
+
+#: rc.cpp:95
+msgid "Include future transaction when using Schedule Forecast"
+msgstr "Incluir as transacções futuras na Previsão de Agendamentos"
+
+#: rc.cpp:96
+msgid "Include scheduled transactions when using Schedule Forecast"
+msgstr "Incluir as transacções agendadas na Previsão de Agendamentos"
+
+#: rc.cpp:97
+msgid "additional names for cash account"
+msgstr "nomes adicionais para a conta de tesouraria"
+
+#: rc.cpp:98
+msgid "additional names for checking account"
+msgstr "nomes adicionais para a contas de cheques"
+
+#: rc.cpp:99
+msgid "additional names for credit card account"
+msgstr "nomes adicionais para a conta de cartão de crédito"
+
+#: rc.cpp:100
+msgid "additional names for asset account"
+msgstr "nomes adicionais para conta de activos"
+
+#: rc.cpp:101
+msgid "additional names for opening balance payee"
+msgstr "nomes adicionais para o beneficiário do saldo inicial"
+
+#: rc.cpp:102
+msgid "additional names for invoice accounts"
+msgstr "nomes adicionais para as contas de recibos"
+
+#: rc.cpp:103 widgets/rc.cpp:161 widgets/rc.cpp:163
+msgid "..."
+msgstr "..."
+
+#: views/kcategoriesview.cpp:276
+msgid "Profit: "
+msgstr "Lucro: "
+
+#: views/kcategoriesview.cpp:278
+msgid "Loss: "
+msgstr "Percas: "
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:54
+#: dialogs/transactioneditor.cpp:605 views/kpayeesview.cpp:365
+#: widgets/kmymoneyonlinequoteconfig.cpp:54
+msgid "Accepts the entered data and stores it"
+msgstr "Aceita os dados introduzidos e armazena-os"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:55 views/kpayeesview.cpp:366
+#: widgets/kmymoneyonlinequoteconfig.cpp:55
+msgid "Use this to accept the modified data."
+msgstr "Use isto para aceitar os dados modificados."
+
+#: views/kpayeesview.cpp:491
+msgid ""
+"A payee with the name '%1' already exists. It is not advisable to have "
+"multiple payees with the same identification name. Are you sure you would "
+"like to rename the payee?"
+msgstr ""
+"Um beneficiário com o nome '%1' já existe. Não é aconselhável ter vários "
+"beneficiários com o mesmo nome de identificação. Você tem certeza que deseja "
+"renomear o beneficiário?"
+
+#: views/kpayeesview.cpp:518 views/kpayeesview.cpp:869
+msgid "Unable to modify payee"
+msgstr "Incapaz de modificar beneficiário"
+
+#: views/kpayeesview.cpp:564
+msgid "Do you want to save the changes for <b>%1</b>?"
+msgstr "Você deseja salvar as alterações para <b>%1</b>?"
+
+#: views/kbudgetview.cpp:490 views/kpayeesview.cpp:565
+msgid "Save changes"
+msgstr "Gravar as alterações"
+
+#: views/kgloballedgerview.cpp:737 views/kpayeesview.cpp:662
+#: views/kpayeesview.cpp:753
+#, c-format
+msgid "Balance: %1"
+msgstr "Saldo: %1"
+
+#: views/kpayeesview.cpp:725 views/kpayeesview.cpp:731
+#, c-format
+msgid "Amortization of %1"
+msgstr "Amortização de %1"
+
+#: views/kpayeesview.cpp:727 views/kpayeesview.cpp:733
+#, c-format
+msgid "Payment to %1"
+msgstr "Pagamento para %1"
+
+#: views/kpayeesview.cpp:736
+#, c-format
+msgid "Loan payment from %1"
+msgstr "Pagamento de financiamento de %1"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:123
+#: dialogs/kconfirmmanualenterdlg.cpp:133 views/kpayeesview.cpp:745
+#: widgets/kmymoneycategory.cpp:160 widgets/kmymoneycategory.cpp:166
+#: widgets/transaction.cpp:851 widgets/transaction.cpp:1397
+#: widgets/transaction.cpp:1411
+msgid ""
+"_: Split transaction (category replacement)\n"
+"Split transaction"
+msgstr "Dividir a transacção"
+
+#: views/kreportsview.cpp:262
+msgid ""
+"There was an error creating your report: \"%1\".\n"
+"Please report this error to the developer's list: kmymoney2-developer@lists."
+"sourceforge.net"
+msgstr ""
+"Ocorreu um erro ao criar o seu relatório: \"%1\".\n"
+"Por favor relate este erro na lista de desenvolvedores: kmymoney2-"
+"developer@lists.sourceforge.net"
+
+#: views/kreportsview.cpp:264
+msgid "Critical Error"
+msgstr "Erro Crítico"
+
+#: views/kreportsview.cpp:268
+msgid "Unable to generate report"
+msgstr "Não foi possível gerar o relatório"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:125 views/kreportsview.cpp:286
+#: views/rc.cpp:53 widgets/rc.cpp:146
+msgid "Chart"
+msgstr "Gráfico"
+
+#: views/kreportsview.cpp:287 widgets/rc.cpp:147
+msgid "Show the chart version of this report"
+msgstr "Mostrar a versão do gráfico deste relatório"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:112 views/khomeview.cpp:900
+#: views/kreportsview.cpp:294 views/kreportsview.cpp:328
+msgid "Report"
+msgstr "Relatório"
+
+#: views/kreportsview.cpp:295
+msgid "Show the report version of this chart"
+msgstr "Mostrar a versão do relatório deste gráfico"
+
+#: views/kmymoneyview.cpp:236 views/kreportsview.cpp:314
+#: views/kreportsview.cpp:326
+msgid "Reports"
+msgstr "Relatórios"
+
+#: views/khomeview.cpp:902 views/kreportsview.cpp:329 widgets/rc.cpp:56
+msgid "Comment"
+msgstr "Comentário"
+
+#: views/kreportsview.cpp:432
+msgid "Charts"
+msgstr "Gráficos"
+
+#: views/khomeview.cpp:897 views/kreportsview.cpp:470
+msgid "Favorite Reports"
+msgstr "Relatórios Favoritos"
+
+#: views/kreportsview.cpp:486
+msgid "Old Customized Reports"
+msgstr "Relatórios Personalizados Antigos"
+
+#: views/kreportsview.cpp:579
+msgid "Include Stylesheet"
+msgstr "Incluir a Folha de estilo"
+
+#: views/kreportsview.cpp:585
+msgid ""
+"_: CSV (Filefilter)\n"
+"CSV files"
+msgstr "Arquivos CSV"
+
+#: views/kreportsview.cpp:586
+msgid ""
+"_: HTML (Filefilter)\n"
+"HTML files"
+msgstr "Arquivos HTML"
+
+#: views/kreportsview.cpp:591
+msgid "Export as"
+msgstr "Exportar como"
+
+#: views/kreportsview.cpp:619 views/kreportsview.cpp:660
+#: views/kreportsview.cpp:942 views/kreportsview.cpp:950
+#: views/kreportsview.cpp:958 views/kreportsview.cpp:968
+#: views/kreportsview.cpp:980 views/kreportsview.cpp:998
+#: views/kreportsview.cpp:1006 views/kreportsview.cpp:1014
+#: views/kreportsview.cpp:1022 views/kreportsview.cpp:1034
+#: views/kreportsview.cpp:1046 views/kreportsview.cpp:1056
+#: views/kreportsview.cpp:1070 views/kreportsview.cpp:1079
+#: views/kreportsview.cpp:1087 views/kreportsview.cpp:1095
+#: views/kreportsview.cpp:1103 views/kreportsview.cpp:1111
+#: views/kreportsview.cpp:1120 views/kreportsview.cpp:1132
+#: views/kreportsview.cpp:1145 views/kreportsview.cpp:1155
+#: views/kreportsview.cpp:1165 views/kreportsview.cpp:1175
+#: views/kreportsview.cpp:1185 views/kreportsview.cpp:1195
+#: views/kreportsview.cpp:1208 views/kreportsview.cpp:1222
+#: views/kreportsview.cpp:1239 views/kreportsview.cpp:1257
+#: views/kreportsview.cpp:1273 views/kreportsview.cpp:1295
+#: views/kreportsview.cpp:1304 views/kreportsview.cpp:1313
+#: views/kreportsview.cpp:1322 views/kreportsview.cpp:1336
+#: views/kreportsview.cpp:1347 views/kreportsview.cpp:1362
+#: views/kreportsview.cpp:1372 views/kreportsview.cpp:1383
+#: views/kreportsview.cpp:1393 views/kreportsview.cpp:1404
+#: views/kreportsview.cpp:1423 views/kreportsview.cpp:1432
+#: views/kreportsview.cpp:1444 views/kreportsview.cpp:1463
+#: views/kreportsview.cpp:1472 views/kreportsview.cpp:1481
+#: views/kreportsview.cpp:1490
+msgid "Default Report"
+msgstr "Relatório Padrão"
+
+#: views/kreportsview.cpp:621 views/kreportsview.cpp:661
+msgid "Custom Report"
+msgstr "Relatório Personalizado"
+
+#: views/kreportsview.cpp:622
+msgid " (Customized)"
+msgstr " (Personalizado)"
+
+#: views/kreportsview.cpp:690
+msgid ""
+"Are you sure you want to delete report <b>%1</b>? There is no way to "
+"recover it!"
+msgstr ""
+"Você tem certeza que deseja apagar o relatório <b>%1</b>? Não será possível "
+"recuperá-lo!"
+
+#: views/kreportsview.cpp:690 views/kreportsview.cpp:702
+msgid "Delete Report?"
+msgstr "Apagar o Relatório?"
+
+#: views/kreportsview.cpp:702
+msgid "Sorry, <b>%1</b> is a default report. You may not delete it."
+msgstr "Desculpe, o <b>%1</b> é um relatório padrão. Você não pode apagá-lo."
+
+#: views/kreportsview.cpp:882
+msgid "&Open"
+msgstr "&Abrir"
+
+#: views/kreportsview.cpp:884
+msgid "&New report"
+msgstr "&Novo relatório"
+
+#: views/kreportsview.cpp:934
+msgid "Income and Expenses"
+msgstr "Receitas e Despesas"
+
+#: views/kreportsview.cpp:941
+msgid "Income and Expenses This Month"
+msgstr "Receitas e Despesas Deste Mês"
+
+#: views/kreportsview.cpp:949
+msgid "Income and Expenses This Year"
+msgstr "Receitas e Despesas Deste Ano"
+
+#: views/kreportsview.cpp:957
+msgid "Income and Expenses By Year"
+msgstr "Receitas e Despesas Por Ano"
+
+#: views/kreportsview.cpp:967
+msgid "Income and Expenses Graph"
+msgstr "Receita e Despesas em Gráfico"
+
+#: views/kreportsview.cpp:979
+msgid "Income and Expenses Pie Chart"
+msgstr "Receita e Despesas em Gráfico Circular"
+
+#: views/khomeview.cpp:1361 views/kreportsview.cpp:990
+msgid "Net Worth"
+msgstr "Valor Líquido"
+
+#: views/kreportsview.cpp:997
+msgid "Net Worth By Month"
+msgstr "Valor Líquido Por Mês"
+
+#: views/kreportsview.cpp:1005
+msgid "Net Worth Today"
+msgstr "Valor Líquido Hoje"
+
+#: views/kreportsview.cpp:1013
+msgid "Net Worth By Year"
+msgstr "Valor Líquido Por Ano"
+
+#: views/kreportsview.cpp:1021
+msgid "7-day Cash Flow Forecast"
+msgstr "Previsão da Tesouraria em 7 dias"
+
+#: views/kreportsview.cpp:1033
+msgid "Net Worth Graph"
+msgstr "Valor Líquido em Gráfico"
+
+#: views/kreportsview.cpp:1045
+msgid "Account Balances by Institution"
+msgstr "Saldo de Contas por Instituição"
+
+#: views/kreportsview.cpp:1055
+msgid "Account Balances by Type"
+msgstr "Saldo de Contas por Tipo"
+
+#: views/kreportsview.cpp:1069
+msgid "Transactions by Account"
+msgstr "Transações por Conta"
+
+#: views/kreportsview.cpp:1078
+msgid "Transactions by Category"
+msgstr "Transacções por Categoria"
+
+#: views/kreportsview.cpp:1086
+msgid "Transactions by Payee"
+msgstr "Transações por Beneficiários"
+
+#: views/kreportsview.cpp:1094
+msgid "Transactions by Month"
+msgstr "Transações por Mês"
+
+#: views/kreportsview.cpp:1102
+msgid "Transactions by Week"
+msgstr "Transacções por Semana"
+
+#: views/kreportsview.cpp:1110
+msgid "Loan Transactions"
+msgstr "Transações de Financiamentos"
+
+#: views/kreportsview.cpp:1119
+msgid "Transactions by Reconciliation Status"
+msgstr "Transações por Estado de Reconciliação"
+
+#: views/kreportsview.cpp:1125
+msgid "Cash Flow"
+msgstr "Tesouraria"
+
+#: views/kreportsview.cpp:1131
+msgid "Cash Flow Transactions This Month"
+msgstr "Transacções de Tesouraria neste Mês"
+
+#: views/kmymoneyview.cpp:226 views/kmymoneyview.cpp:228
+#: views/kreportsview.cpp:1137
+msgid "Investments"
+msgstr "Investimentos"
+
+#: views/kreportsview.cpp:1154
+msgid "Investment Holdings by Account"
+msgstr "Investimentos Detidos por Conta"
+
+#: views/kreportsview.cpp:1164
+msgid "Investment Holdings by Type"
+msgstr "Investimentos Detidos por Tipo"
+
+#: views/kreportsview.cpp:1184
+msgid "Investment Performance by Type"
+msgstr "Desempenho dos Investimentos por Tipo"
+
+#: views/kreportsview.cpp:1194
+msgid "Investment Holdings Pie"
+msgstr "Gráfico Circular de Investimentos"
+
+#: views/kreportsview.cpp:1207
+msgid "Investment Worth Graph"
+msgstr "Gráfico de Investimento Líquido"
+
+#: views/kreportsview.cpp:1221
+#, fuzzy
+msgid "Investment Price Graph"
+msgstr "Gráfico de Investimento Líquido"
+
+#: views/kreportsview.cpp:1238
+#, fuzzy
+msgid "Investment Moving Average Price Graph"
+msgstr "Média Movente do Investimento"
+
+#: views/kreportsview.cpp:1256
+msgid "Investment Moving Average"
+msgstr "Média Movente do Investimento"
+
+#: views/kreportsview.cpp:1272
+msgid "Investment Moving Average vs Actual"
+msgstr "Média Movente do Investimento contra o Real"
+
+#: views/kreportsview.cpp:1287
+msgid "Taxes"
+msgstr "Impostos"
+
+#: views/kreportsview.cpp:1294
+msgid "Tax Transactions by Category"
+msgstr "Transacções de Imposto por Categoria"
+
+#: views/kreportsview.cpp:1303
+msgid "Tax Transactions by Payee"
+msgstr "Transacções de Imposto por Beneficiários"
+
+#: views/kreportsview.cpp:1312
+msgid "Tax Transactions by Category Last Fiscal Year"
+msgstr "Transacções de Imposto por Categoria no Último Ano Fiscal"
+
+#: views/kreportsview.cpp:1321
+msgid "Tax Transactions by Payee Last Fiscal Year"
+msgstr "Transacções de Imposto por Beneficiários no Último Ano Fiscal"
+
+#: views/kreportsview.cpp:1328
+msgid "Budgeting"
+msgstr "Orçamento"
+
+#: views/kreportsview.cpp:1335
+msgid "Budgeted vs. Actual This Year"
+msgstr "Orçamento contra Real Neste Ano"
+
+#: views/kreportsview.cpp:1346
+#, fuzzy
+msgid "Budgeted vs. Actual This Year (YTM)"
+msgstr "Orçamento contra Real Neste Ano"
+
+#: views/khomeview.cpp:1383 views/kreportsview.cpp:1361
+msgid "Monthly Budgeted vs. Actual"
+msgstr "Orçamento Mensal contra Real"
+
+#: views/kreportsview.cpp:1371
+msgid "Yearly Budgeted vs. Actual"
+msgstr "Orçamento Anual contra Real"
+
+#: views/kreportsview.cpp:1382
+msgid "Monthly Budget"
+msgstr "Orçamento Mensal"
+
+#: views/kreportsview.cpp:1392
+msgid "Yearly Budget"
+msgstr "Orçamento Anual"
+
+#: views/kreportsview.cpp:1403
+msgid "Yearly Budgeted vs Actual Graph"
+msgstr "Orçamento Anual contra Gráfico Real"
+
+#: views/kreportsview.cpp:1422
+msgid "Forecast By Month"
+msgstr "Previsão Por Mês"
+
+#: views/kreportsview.cpp:1431
+msgid "Forecast Next Quarter"
+msgstr "Previsão no Próximo Trimestre"
+
+#: views/kreportsview.cpp:1443
+msgid "Net Worth Forecast Graph"
+msgstr "Gráfico de Previsão do Benefício"
+
+#: dialogs/rc.cpp:126 dialogs/rc.cpp:128 dialogs/rc.cpp:466
+#: views/kreportsview.cpp:1455
+msgid "General Information"
+msgstr "Informações Gerais"
+
+#: views/kreportsview.cpp:1462
+msgid "Schedule Information"
+msgstr "Informação de agendamento"
+
+#: views/kreportsview.cpp:1471
+msgid "Schedule Summary Information"
+msgstr "Resumo da Informação de agendamento"
+
+#: views/kreportsview.cpp:1480
+msgid "Account Information"
+msgstr "Informação da conta"
+
+#: views/kreportsview.cpp:1489
+msgid "Loan Information"
+msgstr "Informação do Empréstimo"
+
+#: dialogs/rc.cpp:323 views/kmymoneyview.cpp:148 views/kmymoneyview.cpp:150
+msgid "Institutions"
+msgstr "Instituições"
+
+#: dialogs/knewaccountdlg.cpp:98 views/kmymoneyview.cpp:162
+#: views/kmymoneyview.cpp:164 widgets/rc.cpp:4 widgets/rc.cpp:94
+msgid "Accounts"
+msgstr "Contas"
+
+#: views/kmymoneyview.cpp:176
+msgid "Bills & Reminders"
+msgstr "Contas a Pagar & Lembretes"
+
+#: views/kmymoneyview.cpp:178
+#, fuzzy
+msgid "Scheduled transactions"
+msgstr "Transacções Agendadas"
+
+#: dialogs/knewaccountdlg.cpp:98 dialogs/rc.cpp:193 views/kmymoneyview.cpp:188
+#: views/kmymoneyview.cpp:190 widgets/rc.cpp:91
+msgid "Categories"
+msgstr "Categorias"
+
+#: dialogs/kfindtransactiondlg.cpp:212 dialogs/rc.cpp:318
+#: views/kmymoneyview.cpp:199 views/kmymoneyview.cpp:201 widgets/rc.cpp:93
+msgid "Payees"
+msgstr "Beneficiários"
+
+#: views/kgloballedgerview.cpp:149 views/kmymoneyview.cpp:211
+msgid "Ledgers"
+msgstr "Livro de registos"
+
+#: views/kmymoneyview.cpp:353
+msgid "Creating transactions can only be performed in the ledger view"
+msgstr ""
+"A criação de transacções só pode ser executada na visão do livro de registros"
+
+#: views/kmymoneyview.cpp:367
+msgid "Modifying transactions can only be performed in the ledger view"
+msgstr ""
+"A modificação de transacções só pode ser executada na visão do livro de "
+"registros"
+
+#: views/kmymoneyview.cpp:382
+msgid "Duplicating transactions can only be performed in the ledger view"
+msgstr ""
+"A duplicação de transacções só pode ser executada na visão do livro de "
+"registros"
+
+#: views/kmymoneyview.cpp:394
+msgid "Edit the current selected transactions"
+msgstr "Editar as transacções seleccionadas"
+
+#: views/kmymoneyview.cpp:602
+msgid "<b>%1</b> is not a KMyMoney file."
+msgstr "<b>%1</b> não é um ficheiro KMyMoney."
+
+#: views/kmymoneyview.cpp:643
+msgid "GPG is not available for decryption of file <b>%1</b>"
+msgstr "GPG não está disponível para descifrar o ficheiro<b>%1</b>"
+
+#: views/kmymoneyview.cpp:721
+msgid ""
+"File <b>%1</b> contains the old binary format used by KMyMoney. Please use "
+"an older version of KMyMoney (0.8.x) that still supports this format to "
+"convert it to the new XML based format."
+msgstr ""
+"O ficheiro<b>%1</b> contém um binário no formato KMyMoney mais antigo. É "
+"favor utilizar uma versão mais antiga (0.8.x) de KMyMoney que aceita este "
+"formato para o converter no novo formato XML."
+
+#: views/kmymoneyview.cpp:723
+msgid "File <b>%1</b> contains an unknown file format!"
+msgstr "O ficheiro<b>%1</b> contém um ficheiro num formato desconhecido!"
+
+#: views/kmymoneyview.cpp:728
+msgid "Cannot read from file <b>%1</b>!"
+msgstr "Não consigo ler a partir do ficheiro <b>%1</b>!"
+
+#: views/kmymoneyview.cpp:732
+msgid "Cannot load file <b>%1</b>. Reason: %2"
+msgstr "Não consigo carregar o ficheiro <b>%1</b>. Razão: %2"
+
+#: views/kmymoneyview.cpp:742 views/kmymoneyview.cpp:748
+msgid "File <b>%1</b> not found!"
+msgstr "Ficheiro<b>%1</b> não encontrado!"
+
+#: views/kmymoneyview.cpp:812
+msgid "Can't open database %1\n"
+msgstr "Não foi possível abrir o banco de dados %1\n"
+
+#: views/kmymoneyview.cpp:844
+msgid "An unrecoverable error occurred while reading the database"
+msgstr "Um erro irrecuperável ocorreu durante a leitura do banco de dados"
+
+#: views/kmymoneyview.cpp:846 views/kmymoneyview.cpp:1208
+msgid "Database malfunction"
+msgstr "Mau funcionamento do banco de dados"
+
+#: views/kmymoneyview.cpp:938
+msgid "Unknown fix level in input file"
+msgstr "Nível de correção desconhecido no arquivo de entrada"
+
+#: views/kmymoneyview.cpp:984
+msgid ""
+"GPG does not seem to be installed on your system. Please make sure, that GPG "
+"can be found using the standard search path. This time, encryption is "
+"disabled."
+msgstr ""
+"O GPG não parece estar instalado em seu sistema. Por favor, certifique-se de "
+"que o GPG pode ser encontrado usando o caminho de busca padrão. Por "
+"enquanto, a criptografia está desabilitada."
+
+#: views/kmymoneyview.cpp:984
+msgid "GPG not found"
+msgstr "GPG não encontrado"
+
+#: views/kmymoneyview.cpp:991
+msgid ""
+"You have selected to encrypt your data also with the KMyMoney recover key, "
+"but the key with id</p><p><center><b>%1</b></center></p>has not been found "
+"in your keyring at this time. Please make sure to import this key into your "
+"keyring. You can find it on the <a href=\"http://kmymoney2.sourceforge.net/"
+"\">KMyMoney web-site</a>. This time your data will not be encrypted with the "
+"KMyMoney recover key."
+msgstr ""
+"Você optou por criptografar seus dados também com a chave de recuperação do "
+"KMyMoney, mas a chave com id</p><p><center>%1<b></b></center></p>não foi "
+"encontrada em seu chaveiro actual. Você pode encontrá-la na <a href=\"http://"
+"kmymoney2.sourceforge.net/\">Página Internet do KMyMoney</a>. Por enquanto, "
+"seus dados não serão criptografados com a chave de recuperação do KMyMoney."
+
+#: views/kmymoneyview.cpp:991 views/kmymoneyview.cpp:1000
+msgid "GPG-Key not found"
+msgstr "Chave GPG não encontrada"
+
+#: views/kmymoneyview.cpp:1000
+msgid ""
+"You have specified to encrypt your data for the user-id</p><p><center><b>%1</"
+"b>.</center></p>Unfortunately, a valid key for this user-id was not found in "
+"your keyring. Please make sure to import a valid key for this user-id. This "
+"time, encryption is disabled."
+msgstr ""
+"Você optou por criptografar seus dados para a id de usuário</p><p><center><b>"
+"%1</b>.</center></p>Infelizmente não foi encontrada uma chave válida para "
+"esta id de usuário em seu chaveiro. Por favor, certifique-se de que importou "
+"uma chave válida para esta id de usuário. Por enquanto, a criptografia está "
+"desabilitada."
+
+#: views/kmymoneyview.cpp:1006
+msgid ""
+"You have configured to save your data in encrypted form using GPG. Please be "
+"aware, that this is a brand new feature which is yet untested. Make sure, "
+"you have the necessary understanding that you might loose all your data if "
+"you store it encrypted and cannot decrypt it later on! If unsure, answer "
+"<b>No</b>."
+msgstr ""
+"Você optou por salvar seus dados criptografando-os usando o GPG. Por favor, "
+"esteja ciente que este recurso é novo e não foi ainda exaustivamente "
+"testado. Saiba que você pode perder todos os seus dados se você armazená-los "
+"criptografados e não puder decriptografar-los depois! Se não tiver certeza, "
+"responda <b>Não</b>."
+
+#: views/kmymoneyview.cpp:1008
+msgid "Store GPG encrypted"
+msgstr "Gravar criptografado pelo GPG"
+
+#: views/kmymoneyview.cpp:1038 views/kmymoneyview.cpp:1052
+msgid "Unable to open file '%1' for writing."
+msgstr "Incapaz de abrir ficheiro '%1' para escrita."
+
+#: views/kmymoneyview.cpp:1065 views/kmymoneyview.cpp:1074
+msgid "Failure while writing to '%1'"
+msgstr "Erro ao escrever em '%1'"
+
+#: views/kmymoneyview.cpp:1086 views/kmymoneyview.cpp:1181
+msgid "Tried to access a file when it's not open"
+msgstr "Tentou aceder a um ficheiro que não se encontrava aberto"
+
+#: views/kmymoneyview.cpp:1092
+msgid ""
+"Since this version of KMyMoney only writes data files in its new format, "
+"files written with this version cannot be read by KMyMoney version 0.4. If "
+"you still want to use older versions of KMyMoney with your data files, "
+"please make sure you keep a backup-file of your finance data. If you want to "
+"abort this operation, please press Cancel now"
+msgstr ""
+"versão de KMyMoney ficheiros em novo formatar ficheiros com versão KMyMoney "
+"versão até mais antigo de KMyMoney com ficheiros make a salvaguarda ficheiro "
+"de até Cancelar agora"
+
+#: views/kmymoneyview.cpp:1122
+msgid "Malformed URL '%1'"
+msgstr "URL mal formado '%1'"
+
+#: views/kmymoneyview.cpp:1192
+msgid ""
+"Database contains data which must be removed before using SaveAs.\n"
+"Do you wish to continue?"
+msgstr ""
+"O Banco de Dados contém dados que devem ser removidos antes de se usar o "
+"'Salvar Como'.\n"
+"Você deseja continuar?"
+
+#: views/kmymoneyview.cpp:1205
+msgid ""
+"An unrecoverable error occurred while writing to the database.\n"
+"It may well be corrupt."
+msgstr ""
+"Um erro irrecuperável ocorreu ao salvar o banco de dados.\n"
+"Ele poderá estar corrompido."
+
+#: views/kmymoneyview.cpp:1215
+msgid ""
+"Can't open or create database %1\n"
+"Retry SaveAsDatabase and click Help for further info"
+msgstr ""
+"Não foi possível abrir ou criar o banco de dados %1\n"
+"Tente novamente o 'Salvar Como Banco de Dados' e clique em 'Ajuda' para mais "
+"informações"
+
+#: views/kmymoneyview.cpp:1354
+msgid "Afghanistan Afghani"
+msgstr "Afeganistão (Afegani)"
+
+#: views/kmymoneyview.cpp:1355
+msgid "Albanian Lek"
+msgstr "Albânia (Lek)"
+
+#: views/kmymoneyview.cpp:1356
+msgid "Netherland Antillian Guilder"
+msgstr "Antilhas Holandesas (Florim)"
+
+#: views/kmymoneyview.cpp:1357
+msgid "Algerian Dinar"
+msgstr "Argélia (Dinar Algeriano)"
+
+#: views/kmymoneyview.cpp:1358
+msgid "Andorran Franc"
+msgstr "Andorra (Franco Francês)"
+
+#: views/kmymoneyview.cpp:1359
+msgid "Andorran Peseta"
+msgstr "Andorra (Peseta Espanhola)"
+
+#: views/kmymoneyview.cpp:1360
+msgid "Angolan New Kwanza"
+msgstr "Angola (Kuanza Novo)"
+
+#: views/kmymoneyview.cpp:1361
+msgid "Argentine Peso"
+msgstr "Argentina (Peso)"
+
+#: views/kmymoneyview.cpp:1362
+msgid "Aruban Florin"
+msgstr "Aruba (Florim de Aruba)"
+
+#: views/kmymoneyview.cpp:1363
+msgid "Australian Dollar"
+msgstr "Austrália (Dólar Australiano)"
+
+#: views/kmymoneyview.cpp:1364
+msgid "Azerbaijani Manat"
+msgstr "Azerbaidjão (Manat Azerbaidjano)"
+
+#: views/kmymoneyview.cpp:1365
+msgid "Bahamian Dollar"
+msgstr "Bahamas (Dólar das Bahamas)"
+
+#: views/kmymoneyview.cpp:1366
+msgid "Bahraini Dinar"
+msgstr "Barein (Dinar de Barein)"
+
+#: views/kmymoneyview.cpp:1367
+msgid "Bangladeshi Taka"
+msgstr "Bangladesh (Taka)"
+
+#: views/kmymoneyview.cpp:1368
+msgid "Barbados Dollar"
+msgstr "Barbados (Dólar de Barbados)"
+
+#: views/kmymoneyview.cpp:1369
+msgid "Belarussian Ruble"
+msgstr "Bielorrússia (Rublo Bielorrusso)"
+
+#: views/kmymoneyview.cpp:1370
+msgid "Belize Dollar"
+msgstr "Belize (Dólar de Belize)"
+
+#: views/kmymoneyview.cpp:1371
+msgid "Bermudian Dollar"
+msgstr "Bermudas (Dólar de Bermudas)"
+
+#: views/kmymoneyview.cpp:1372
+msgid "Bhutan Ngultrum"
+msgstr "Butão (Ngultrum)"
+
+#: views/kmymoneyview.cpp:1373
+msgid "Bolivian Boliviano"
+msgstr "Bolívia (Boliviano)"
+
+#: views/kmymoneyview.cpp:1374
+msgid "Bosnian Convertible Mark"
+msgstr "Bósnia (Marco Conversível)"
+
+#: views/kmymoneyview.cpp:1375
+msgid "Botswana Pula"
+msgstr "Botsuana (Pula)"
+
+#: views/kmymoneyview.cpp:1376
+msgid "Brazilian Real"
+msgstr "Brasil (Real)"
+
+#: views/kmymoneyview.cpp:1377
+msgid "British Pound"
+msgstr "Inglaterra (Libra)"
+
+#: views/kmymoneyview.cpp:1378
+msgid "Brunei Dollar"
+msgstr "Brunei (Dólar do Brunei)"
+
+#: views/kmymoneyview.cpp:1379
+msgid "Bulgarian Lev"
+msgstr "Bulgária (Lev)"
+
+#: views/kmymoneyview.cpp:1380
+msgid "Burundi Franc"
+msgstr "Burundi (Franco do Burundi)"
+
+#: views/kmymoneyview.cpp:1381
+msgid "CFA Franc BEAC"
+msgstr "BEAC - Banco dos Estados da África Central (Franco CFA)"
+
+#: views/kmymoneyview.cpp:1382
+msgid "CFA Franc BCEAO"
+msgstr "Franco CFA BCEAO"
+
+#: views/kmymoneyview.cpp:1383
+msgid "CFP Franc Pacifique"
+msgstr "Franco CFP do Pacífico"
+
+#: views/kmymoneyview.cpp:1384
+msgid "Cambodia Riel"
+msgstr "Cambodja (Riel)"
+
+#: views/kmymoneyview.cpp:1385
+msgid "Canadian Dollar"
+msgstr "Canadá (Dólar Canadense)"
+
+#: views/kmymoneyview.cpp:1386
+msgid "Cape Verde Escudo"
+msgstr "Cabo Verde (Escudo)"
+
+#: views/kmymoneyview.cpp:1387
+msgid "Cayman Islands Dollar"
+msgstr "Ilhas Caimão (Dólar das Ilhas Cármen)"
+
+#: views/kmymoneyview.cpp:1388
+msgid "Chilean Peso"
+msgstr "Chile (Peso Chileno)"
+
+#: views/kmymoneyview.cpp:1389
+msgid "Chinese Yuan Renminbi"
+msgstr "China (Yuan)"
+
+#: views/kmymoneyview.cpp:1390
+msgid "Colombian Peso"
+msgstr "Colômbia (Peso Colombiano)"
+
+#: views/kmymoneyview.cpp:1391
+msgid "Comoros Franc"
+msgstr "Camarões (Franco de Camarões)"
+
+#: views/kmymoneyview.cpp:1392
+msgid "Costa Rican Colon"
+msgstr "Costa Rica (Colón da Costa Rica)"
+
+#: views/kmymoneyview.cpp:1393
+msgid "Croatian Kuna"
+msgstr "Croácia (Kuna)"
+
+#: views/kmymoneyview.cpp:1394
+msgid "Cuban Peso"
+msgstr "Cuba (Peso Cubano)"
+
+#: views/kmymoneyview.cpp:1395
+msgid "Czech Koruna"
+msgstr "República Checa (Corada Checa)"
+
+#: views/kmymoneyview.cpp:1396
+msgid "Danish Krone"
+msgstr "Dinamarca (Coroa Dinamarquesa)"
+
+#: views/kmymoneyview.cpp:1397
+msgid "Djibouti Franc"
+msgstr "Djibuti (Franco do Djibuti)"
+
+#: views/kmymoneyview.cpp:1398
+msgid "Dominican Peso"
+msgstr "República Dominicana (Peso Dominicano)"
+
+#: views/kmymoneyview.cpp:1399
+msgid "East Caribbean Dollar"
+msgstr "Caraíba do Leste (Dólar do Caraíba do Leste)"
+
+#: views/kmymoneyview.cpp:1400
+msgid "Egyptian Pound"
+msgstr "Egipto (Libra Egípcia)"
+
+#: views/kmymoneyview.cpp:1401
+msgid "El Salvador Colon"
+msgstr "El Salvador (Colón Salvadorenho)"
+
+#: views/kmymoneyview.cpp:1402
+msgid "Eritrean Nakfa"
+msgstr "Eritréia (Nafka)"
+
+#: views/kmymoneyview.cpp:1403
+msgid "Estonian Kroon"
+msgstr "Estónia (Coroa Estoniana)"
+
+#: views/kmymoneyview.cpp:1404
+msgid "Ethiopian Birr"
+msgstr "Etiópia (Birr)"
+
+#: views/kmymoneyview.cpp:1405
+msgid "Euro"
+msgstr "Euro"
+
+#: views/kmymoneyview.cpp:1406
+msgid "Falkland Islands Pound"
+msgstr "Ilhas Falkland (Libra)"
+
+#: views/kmymoneyview.cpp:1407
+msgid "Fiji Dollar"
+msgstr "Fiji (Dólar de Fiji)"
+
+#: views/kmymoneyview.cpp:1408
+msgid "Gambian Dalasi"
+msgstr "Gâmbia (Dalasi)"
+
+#: views/kmymoneyview.cpp:1409
+msgid "Georgian Lari"
+msgstr "Geórgia (Lari)"
+
+#: views/kmymoneyview.cpp:1410
+msgid "Ghanaian Cedi"
+msgstr "Gana (Cedi)"
+
+#: views/kmymoneyview.cpp:1411
+msgid "Gibraltar Pound"
+msgstr "Gibraltar (Libra de Gibraltar)"
+
+#: views/kmymoneyview.cpp:1412
+msgid "Guatemalan Quetzal"
+msgstr "Guatemala (Quetzal)"
+
+#: views/kmymoneyview.cpp:1413
+msgid "Guinea-Bissau Peso"
+msgstr "Guiné-Bissau (Peso de Guiné-Bissau)"
+
+#: views/kmymoneyview.cpp:1414
+msgid "Guyanan Dollar"
+msgstr "Guiana (Dólar Guianense)"
+
+#: views/kmymoneyview.cpp:1415
+msgid "Haitian Gourde"
+msgstr "Haiti (Gourde)"
+
+#: views/kmymoneyview.cpp:1416
+msgid "Honduran Lempira"
+msgstr "Honduras (Lempira)"
+
+#: views/kmymoneyview.cpp:1417
+msgid "Hong Kong Dollar"
+msgstr "Hong Kong (Dólar de Hong Kong)"
+
+#: views/kmymoneyview.cpp:1418
+msgid "Hungarian Forint"
+msgstr "Hungria (Forint)"
+
+#: views/kmymoneyview.cpp:1419
+msgid "Iceland Krona"
+msgstr "Islândia (Coroa Islandesa)"
+
+#: views/kmymoneyview.cpp:1420
+msgid "Indian Rupee"
+msgstr "Índia (Rúpia Indiana)"
+
+#: views/kmymoneyview.cpp:1421
+msgid "Indonesian Rupiah"
+msgstr "Indonésia (Rúpia da Indonésia)"
+
+#: views/kmymoneyview.cpp:1422
+msgid "Iranian Rial"
+msgstr "Irão (Rial Iraniano)"
+
+#: views/kmymoneyview.cpp:1423
+msgid "Iraqi Dinar"
+msgstr "Iraque (Dinar Iraquiano)"
+
+#: views/kmymoneyview.cpp:1424
+msgid "Israeli New Shekel"
+msgstr "Israel (Shekel Novo)"
+
+#: views/kmymoneyview.cpp:1425
+msgid "Jamaican Dollar"
+msgstr "Jamaica (Dólar Jamaicano)"
+
+#: views/kmymoneyview.cpp:1426
+msgid "Japanese Yen"
+msgstr "Japão (Iene)"
+
+#: views/kmymoneyview.cpp:1427
+msgid "Jordanian Dinar"
+msgstr "Jordânia (Dinar Jordaniano)"
+
+#: views/kmymoneyview.cpp:1428
+msgid "Kazakhstan Tenge"
+msgstr "Kazaquestão (Tenge)"
+
+#: views/kmymoneyview.cpp:1429
+msgid "Kenyan Shilling"
+msgstr "Quénia (Xelim Queniano)"
+
+#: views/kmymoneyview.cpp:1430
+msgid "Kuwaiti Dinar"
+msgstr "Kuwait (Dinar Kuwaitiano)"
+
+#: views/kmymoneyview.cpp:1431
+msgid "Kyrgyzstan Som"
+msgstr "Quirguistão (Som)"
+
+#: views/kmymoneyview.cpp:1432
+msgid "Laos Kip"
+msgstr "Laos (Quipe)"
+
+#: views/kmymoneyview.cpp:1433
+msgid "Latvian Lats"
+msgstr "Letónia (Lats)"
+
+#: views/kmymoneyview.cpp:1434
+msgid "Lebanese Pound"
+msgstr "Líbano (Libra Libanesa)"
+
+#: views/kmymoneyview.cpp:1435
+msgid "Lesotho Loti"
+msgstr "Lesoto (Loti)"
+
+#: views/kmymoneyview.cpp:1436
+msgid "Liberian Dollar"
+msgstr "Libéria (Dólar Liberiano)"
+
+#: views/kmymoneyview.cpp:1437
+msgid "Libyan Dinar"
+msgstr "Líbia (Dinar Líbio)"
+
+#: views/kmymoneyview.cpp:1438
+msgid "Lithuanian Litas"
+msgstr "Lituânia (Litas)"
+
+#: views/kmymoneyview.cpp:1439
+msgid "Macau Pataca"
+msgstr "Macau (Pataca)"
+
+#: views/kmymoneyview.cpp:1440
+msgid "Macedonian Denar"
+msgstr "Macedónia (Dinar Macedónio)"
+
+#: views/kmymoneyview.cpp:1441
+msgid "Malagasy Franc"
+msgstr "Madagáscar (Franco Malagaxe)"
+
+#: views/kmymoneyview.cpp:1442
+msgid "Malawi Kwacha"
+msgstr "Malawi (Quacha Malauiana)"
+
+#: views/kmymoneyview.cpp:1443
+msgid "Malaysian Ringgit"
+msgstr "Malásia (Ringgit malaio)"
+
+#: views/kmymoneyview.cpp:1444
+msgid "Maldive Rufiyaa"
+msgstr "Maldivas (Rúfia)"
+
+#: views/kmymoneyview.cpp:1445
+msgid "Mali Republic Franc"
+msgstr "Mali (Franco CFA)"
+
+#: views/kmymoneyview.cpp:1446
+msgid "Mauritanian Ouguiya"
+msgstr "Mauritânia (Ouguiya)"
+
+#: views/kmymoneyview.cpp:1447
+msgid "Mauritius Rupee"
+msgstr "Maurício (Rúpia de Maurício)"
+
+#: views/kmymoneyview.cpp:1448
+msgid "Mexican Peso"
+msgstr "México (Peso Mexicano)"
+
+#: views/kmymoneyview.cpp:1449
+msgid "Moldavian Leu"
+msgstr "Moldávia (Moldavian Leu)"
+
+#: views/kmymoneyview.cpp:1450
+msgid "Mongolian Tugrik"
+msgstr "Mongólia (Tugrik)"
+
+#: views/kmymoneyview.cpp:1451
+msgid "Moroccan Dirham"
+msgstr "Marrocos (Dirrã Marroquino)"
+
+#: views/kmymoneyview.cpp:1452
+msgid "Mozambique Metical"
+msgstr "Moçambique (Metical)"
+
+#: views/kmymoneyview.cpp:1453
+msgid "Myanmar Kyat"
+msgstr "Mianmar (Kiat)"
+
+#: views/kmymoneyview.cpp:1454
+msgid "Namibian Dollar"
+msgstr "Namíbia (Dólar Namibiano)"
+
+#: views/kmymoneyview.cpp:1455
+msgid "Nepalese Rupee"
+msgstr "Nepal (Rúpia Nepalesa)"
+
+#: views/kmymoneyview.cpp:1456
+msgid "New Zealand Dollar"
+msgstr "Nova Zelândia (Dólar)"
+
+#: views/kmymoneyview.cpp:1457
+msgid "Nicaraguan Cordoba Oro"
+msgstr "Nicarágua (Córdoba Ouro)"
+
+#: views/kmymoneyview.cpp:1458
+msgid "Nigerian Naira"
+msgstr "Nigéria (Naira)"
+
+#: views/kmymoneyview.cpp:1459
+msgid "North Korean Won"
+msgstr "Coreia do Norte (Won Norte-Coreano)"
+
+#: views/kmymoneyview.cpp:1460
+msgid "Norwegian Kroner"
+msgstr "Noruega (Coroa Norueguesa)"
+
+#: views/kmymoneyview.cpp:1461
+msgid "Omani Rial"
+msgstr "Omã (Rial Omani)"
+
+#: views/kmymoneyview.cpp:1462
+msgid "Pakistan Rupee"
+msgstr "Paquistão (Rúpia Paquistanesa)"
+
+#: views/kmymoneyview.cpp:1463
+msgid "Panamanian Balboa"
+msgstr "Panamá (Balboa)"
+
+#: views/kmymoneyview.cpp:1464
+msgid "Papua New Guinea Kina"
+msgstr "Papua Nova Guiné (Kina)"
+
+#: views/kmymoneyview.cpp:1465
+msgid "Paraguay Guarani"
+msgstr "Paraguai (Guarani)"
+
+#: views/kmymoneyview.cpp:1466
+msgid "Peruvian Nuevo Sol"
+msgstr "Peru (Sol Novo)"
+
+#: views/kmymoneyview.cpp:1467
+msgid "Philippine Peso"
+msgstr "Filipinas (Peso Filipino)"
+
+#: views/kmymoneyview.cpp:1468
+msgid "Polish Zloty"
+msgstr "Polónia (Zloty)"
+
+#: views/kmymoneyview.cpp:1469
+msgid "Qatari Rial"
+msgstr "Qatar (Rial de Qatar)"
+
+#: views/kmymoneyview.cpp:1470
+msgid "Romanian Leu (new)"
+msgstr "Roménia (Leu Romeno)"
+
+#: views/kmymoneyview.cpp:1471
+msgid "Russian Ruble"
+msgstr "Federação Russa (Rublo)"
+
+#: views/kmymoneyview.cpp:1472
+msgid "Rwanda Franc"
+msgstr "Ruanda (Franco da Ruanda)"
+
+#: views/kmymoneyview.cpp:1473
+msgid "Samoan Tala"
+msgstr "Samoa (Tala)"
+
+#: views/kmymoneyview.cpp:1474
+msgid "Sao Tome and Principe Dobra"
+msgstr "São Tomé e Príncipe (Dobra)"
+
+#: views/kmymoneyview.cpp:1475
+msgid "Saudi Riyal"
+msgstr "Arábia Saudita (Rial Saudita)"
+
+#: views/kmymoneyview.cpp:1476
+msgid "Seychelles Rupee"
+msgstr "Seicheles (Rúpia de Seicheles)"
+
+#: views/kmymoneyview.cpp:1477
+msgid "Sierra Leone Leone"
+msgstr "Serra Leoa (Leone)"
+
+#: views/kmymoneyview.cpp:1478
+msgid "Singapore Dollar"
+msgstr "Singapura (Dólar de Singapura)"
+
+#: views/kmymoneyview.cpp:1481
+msgid "Solomon Islands Dollar"
+msgstr "Ilhas Salomão (Dólar das Ilhas Salomão)"
+
+#: views/kmymoneyview.cpp:1482
+msgid "Somali Shilling"
+msgstr "Somália (Xelim Somaliano)"
+
+#: views/kmymoneyview.cpp:1483
+msgid "South African Rand"
+msgstr "África do Sul (Rand)"
+
+#: views/kmymoneyview.cpp:1484
+msgid "South Korean Won"
+msgstr "Coreia do Sul (Won Sul-Coreano)"
+
+#: views/kmymoneyview.cpp:1485
+msgid "Sri Lanka Rupee"
+msgstr "Sri Lanka (Rúpia Cingalesa)"
+
+#: views/kmymoneyview.cpp:1486
+msgid "St. Helena Pound"
+msgstr "Santa Helena (Libra de Santa Helena)"
+
+#: views/kmymoneyview.cpp:1487
+msgid "Sudanese Dinar"
+msgstr "Sudão (Dinar Sudanês)"
+
+#: views/kmymoneyview.cpp:1488
+msgid "Suriname Guilder"
+msgstr "Suriname (Florim do Suriname)"
+
+#: views/kmymoneyview.cpp:1489
+msgid "Swaziland Lilangeni"
+msgstr "Suazilândia (Lilangeni)"
+
+#: views/kmymoneyview.cpp:1490
+msgid "Swedish Krona"
+msgstr "Suécia (Coroa Sueca)"
+
+#: views/kmymoneyview.cpp:1491
+msgid "Swiss Franc"
+msgstr "Franco Suíço"
+
+#: views/kmymoneyview.cpp:1492
+msgid "Syrian Pound"
+msgstr "Síria (Libra Síria)"
+
+#: views/kmymoneyview.cpp:1493
+msgid "Taiwan Dollar"
+msgstr "Taiwan (Dólar de Taiwan)"
+
+#: views/kmymoneyview.cpp:1494
+msgid "Tajikistan Somani"
+msgstr "Tadjiquistão (Somoni)"
+
+#: views/kmymoneyview.cpp:1495
+msgid "Tanzanian Shilling"
+msgstr "Tanzânia (Xelim Tanzaniano)"
+
+#: views/kmymoneyview.cpp:1496
+msgid "Thai Baht"
+msgstr "Tailândia (Baht)"
+
+#: views/kmymoneyview.cpp:1497
+msgid "Tongan Pa'anga"
+msgstr "Tonga (Pa'anga)"
+
+#: views/kmymoneyview.cpp:1498
+msgid "Trinidad and Tobago Dollar"
+msgstr "Trinidade e Tobago (Dólar de Trinidade e Tobago)"
+
+#: views/kmymoneyview.cpp:1499
+msgid "Tunisian Dinar"
+msgstr "Tunísia (Dinar Tunisiano)"
+
+#: views/kmymoneyview.cpp:1500
+msgid "Turkish Lira (new)"
+msgstr "Turquia (Lira Turca Nova)"
+
+#: views/kmymoneyview.cpp:1501
+msgid "Turkmenistan Manat"
+msgstr "Turcomenistão (Manat Turcomano)"
+
+#: views/kmymoneyview.cpp:1502
+msgid "US Dollar"
+msgstr "Dólar US"
+
+#: views/kmymoneyview.cpp:1503
+msgid "Uganda Shilling"
+msgstr "Uganda (Xelim Ugandense)"
+
+#: views/kmymoneyview.cpp:1504
+msgid "Ukraine Hryvnia"
+msgstr "Ucrânia (Hryvnia)"
+
+#: views/kmymoneyview.cpp:1505
+msgid "United Arab Emirates Dirham"
+msgstr "Emirados Árabes Unidos (Dirrã)"
+
+#: views/kmymoneyview.cpp:1506
+msgid "Uruguayan Peso"
+msgstr "Uruguai (Peso Uruguaio)"
+
+#: views/kmymoneyview.cpp:1507
+msgid "Uzbekistani Sum"
+msgstr "Uzbequistão (Sum)"
+
+#: views/kmymoneyview.cpp:1508
+msgid "Vanuatu Vatu"
+msgstr "Vanuatu (Vatu)"
+
+#: views/kmymoneyview.cpp:1509
+msgid "Venezuelan Bolivar"
+msgstr "Venezuela (Bolívar)"
+
+#: views/kmymoneyview.cpp:1510
+msgid "Vietnamese Dong"
+msgstr "Vietname (Dongue)"
+
+#: views/kmymoneyview.cpp:1511
+msgid "Yugoslav Dinar"
+msgstr "Jugoslávia (Dinar Jugoslavo)"
+
+#: views/kmymoneyview.cpp:1512
+msgid "Zambian Kwacha"
+msgstr "Zâmbia (Quacha Zambiana)"
+
+#: views/kmymoneyview.cpp:1513
+msgid "Zimbabwe Dollar"
+msgstr "Zimbábue (Dólar Zimbabuano)"
+
+#: views/kmymoneyview.cpp:1515
+msgid "Gold"
+msgstr "Ouro"
+
+#: views/kmymoneyview.cpp:1516
+msgid "Palladium"
+msgstr "Paládio"
+
+#: views/kmymoneyview.cpp:1517
+msgid "Platinum"
+msgstr "Platina"
+
+#: views/kmymoneyview.cpp:1518
+msgid "Silver"
+msgstr "Prata"
+
+#: views/kmymoneyview.cpp:1551
+msgid "Austrian Schilling"
+msgstr "Áustria (Xelim Austríaco)"
+
+#: views/kmymoneyview.cpp:1552
+msgid "German Mark"
+msgstr "Alemanha (Marco Alemão)"
+
+#: views/kmymoneyview.cpp:1553
+msgid "French Franc"
+msgstr "França (Franco Francês)"
+
+#: views/kmymoneyview.cpp:1554
+msgid "Italian Lira"
+msgstr "Itália (Lira Italiana)"
+
+#: views/kmymoneyview.cpp:1555
+msgid "Spanish Peseta"
+msgstr "Espanha (Peseta)"
+
+#: views/kmymoneyview.cpp:1556
+msgid "Dutch Guilder"
+msgstr "Holanda (Florim)"
+
+#: views/kmymoneyview.cpp:1557
+msgid "Belgian Franc"
+msgstr "Bélgica (Franco Belga)"
+
+#: views/kmymoneyview.cpp:1558
+msgid "Luxembourg Franc"
+msgstr "Luxemburgo (Franco Luxemburguês)"
+
+#: views/kmymoneyview.cpp:1559
+msgid "Portuguese Escudo"
+msgstr "Portugal (Escudo Português)"
+
+#: views/kmymoneyview.cpp:1560
+msgid "Irish Pound"
+msgstr "Irlanda (Libra Irlandesa)"
+
+#: views/kmymoneyview.cpp:1561
+msgid "Finnish Markka"
+msgstr "Finlândia (Marco Finlandês)"
+
+#: views/kmymoneyview.cpp:1562
+msgid "Greek Drachma"
+msgstr "Grécia (Dacma)"
+
+#: views/kmymoneyview.cpp:1564
+msgid "Romanian Leu"
+msgstr "Roménia (Leu Romeno)"
+
+#: views/kmymoneyview.cpp:1566
+msgid "Russian Ruble (old)"
+msgstr "Rússia (Rublo - Antigo)"
+
+#: views/kmymoneyview.cpp:1568
+msgid "Slovenian Tolar"
+msgstr "Eslovénia (Tolar)"
+
+#: views/kmymoneyview.cpp:1571
+msgid "Turkish Lira"
+msgstr "Turquia (Lira Turca)"
+
+#: views/kmymoneyview.cpp:1574
+msgid "Maltese Lira"
+msgstr "Malta (Lira Maltesa)"
+
+#: views/kmymoneyview.cpp:1575
+msgid "Cyprus Pound"
+msgstr "Chipre (Libra Cipriota)"
+
+#: views/kmymoneyview.cpp:1578
+msgid "Slovak Koruna"
+msgstr "Eslováquia (Coroa Eslovaca)"
+
+#: views/kmymoneyview.cpp:1888
+msgid ""
+"The account \"%1\" was previously created as loan account but some "
+"information is missing. The new loan wizard will be started to collect all "
+"relevant information. Please use a KMyMoney version >= 0.8.7 and < 0.9 to "
+"correct the problem."
+msgstr ""
+"conta conta alguns informação é novo assistente até all informação a "
+"KMyMoney versão e até correcto."
+
+#: views/kmymoneyview.cpp:1892
+msgid "Account problem"
+msgstr "Problema na conta"
+
+#: views/kmymoneyview.cpp:1941
+msgid "Unable to add schedule: "
+msgstr "Incapaz de adicionar evento recorrente"
+
+#: views/kmymoneyview.cpp:1970
+msgid "Fix transactions"
+msgstr "Corrigir transacções"
+
+#: views/kaccountsview.cpp:522 views/kinstitutionsview.cpp:300
+msgid "Net Worth: "
+msgstr "Valor Líquido: "
+
+#: dialogs/rc.cpp:108 dialogs/rc.cpp:163 dialogs/rc.cpp:250 dialogs/rc.cpp:755
+#: dialogs/rc.cpp:830 views/kinvestmentview.cpp:77 widgets/register.cpp:572
+msgid "Quantity"
+msgstr "Quantidade"
+
+#: views/kscheduledlistitem.cpp:137
+msgid "Finished"
+msgstr "Finalizado"
+
+#: views/kbudgetview.cpp:109
+msgid "Creates a new budget"
+msgstr "Criar um novo orçamento"
+
+#: views/kbudgetview.cpp:110
+msgid "Use this to create a new empty budget."
+msgstr "Use isto para criar um novo orçamento em branco."
+
+#: views/kbudgetview.cpp:116
+msgid "Rename the current selected budget"
+msgstr "Renomear o orçamento atualmente selecionado"
+
+#: views/kbudgetview.cpp:117
+msgid "Use this to start renaming the selected budget."
+msgstr "Use isto para renomear o orçamento selecionado."
+
+#: views/kbudgetview.cpp:123
+msgid "Delete the current selected budget"
+msgstr "Remover o orçamento atualmente selecionado"
+
+#: views/kbudgetview.cpp:124
+msgid "Use this to delete the selected budget."
+msgstr "Use isto para remover o orçamento selecionado."
+
+#: views/kbudgetview.cpp:130
+msgid "Accepts the entered values and stores the budget"
+msgstr "Aceitar os valores inseridos e armazenar o orçamento"
+
+#: views/kbudgetview.cpp:131
+msgid "Use this to store the modified data."
+msgstr "Use isto para armazenar os dados modificados."
+
+#: views/kbudgetview.cpp:137
+msgid "Revert budget to last saved state"
+msgstr "Reverter até last"
+
+#: views/kbudgetview.cpp:138
+msgid "Use this to discard the modified data."
+msgstr "Use isto para descartar os dados modificados."
+
+#: views/kbudgetview.cpp:489
+msgid "Do you want to save the changes for <b>%1</b>"
+msgstr "Você deseja salvar as modificações para <b>%1</b>"
+
+#: views/kbudgetview.cpp:610
+msgid ""
+"A budget with the name '%1' already exists. It is not advisable to have "
+"multiple budgets with the same identification name. Are you sure you would "
+"like to rename the budget?"
+msgstr ""
+"A com nome é não até multiple com identificação nome tal como até rename?"
+
+#: views/kbudgetview.cpp:635 views/kbudgetview.cpp:750
+msgid "Unable to modify budget"
+msgstr "Não foi possível modificar o orçamento"
+
+#: views/kbudgetview.cpp:736
+msgid "Unable to reset budget"
+msgstr "Não foi possível reiniciar o orçamento"
+
+#: views/rc.cpp:1
+msgid "List"
+msgstr "Lista"
+
+#: views/rc.cpp:2 views/rc.cpp:20
+msgid "Collapse all accounts in the list"
+msgstr "Recolher todas as contas na lista"
+
+#: views/rc.cpp:3 views/rc.cpp:21
+msgid "Expand all accounts in the list"
+msgstr "Expandir todas as contas na lista"
+
+#: views/rc.cpp:4
+msgid "Icons"
+msgstr "Ícones"
+
+#: views/rc.cpp:5 views/rc.cpp:22
+msgid "Note: Unused categories are not shown as selected by settings."
+msgstr ""
+"Nota: Categorias não usadas não são mostradas como selecionadas pelas "
+"configurações."
+
+#: views/rc.cpp:6 views/rc.cpp:23 views/rc.cpp:54
+msgid "Total Profits:"
+msgstr "Total de Rendimentos:"
+
+#: views/rc.cpp:7
+msgid "Your budgets"
+msgstr "Seus orçamentos"
+
+#: dialogs/rc.cpp:340 dialogs/rc.cpp:841 dialogs/settings/rc.cpp:124
+#: views/rc.cpp:8 widgets/rc.cpp:48 widgets/rc.cpp:150
+msgid "New"
+msgstr "Novo"
+
+#: views/rc.cpp:9
+msgid "Ren"
+msgstr "Ren"
+
+#: views/rc.cpp:10
+msgid "Del"
+msgstr "Apg"
+
+#: views/rc.cpp:11
+msgid "Res"
+msgstr "Rnc"
+
+#: views/rc.cpp:12
+msgid "Upd"
+msgstr "Act"
+
+#: views/rc.cpp:15
+msgid "Hide unused budget categories"
+msgstr "Esconder as categorias de orçamento não utilizadas"
+
+#: views/rc.cpp:16
+msgid "Assignments"
+msgstr "Atribuições"
+
+#: views/rc.cpp:19
+msgid "Include subaccounts"
+msgstr "Incluir as sub-contas"
+
+#: dialogs/settings/rc.cpp:23 views/rc.cpp:24
+msgid "Forecast Settings"
+msgstr "Configuração da Previsão"
+
+#: views/rc.cpp:25
+msgid "Days to Forecast:"
+msgstr "Dias a Prever:"
+
+#: views/rc.cpp:26
+msgid "Days of Accounts Cycle:"
+msgstr "Dias de ciclo das Contas:"
+
+#: dialogs/settings/rc.cpp:25 views/rc.cpp:27
+msgid "Day of Month to start Forecast:"
+msgstr "Dia do Mês onde comaçar a Previsão:"
+
+#: views/rc.cpp:28
+msgid "Historic Cycles:"
+msgstr "Ciclos Históricos:"
+
+#: views/rc.cpp:29
+msgid "Chart Detail:"
+msgstr "Detalhe do Gráfico:"
+
+#: views/rc.cpp:30 widgets/kmymoneyaccountselector.cpp:64 widgets/rc.cpp:65
+msgid "All"
+msgstr "Todos"
+
+#: views/rc.cpp:31 widgets/rc.cpp:66
+msgid "Top-Level"
+msgstr "Nível de Topo"
+
+#: views/rc.cpp:32 widgets/rc.cpp:67
+msgid "Groups"
+msgstr "Grupos"
+
+#: views/rc.cpp:33 widgets/rc.cpp:68
+msgid "Totals"
+msgstr "Totais"
+
+#: views/rc.cpp:34
+msgid "<p>Choose what level of detail to show on the chart.</p>"
+msgstr "<p>Seleccione que nível de detalhe exibir neste gráfico.</p>"
+
+#: views/rc.cpp:35
+msgid "Current Forecast Method:"
+msgstr "Método Actual de Previsão:"
+
+#: views/rc.cpp:36
+msgid "method"
+msgstr "método"
+
+#: dialogs/settings/rc.cpp:32 views/rc.cpp:37
+msgid "History Forecast Method"
+msgstr "Método de Previsão pelo Histórico"
+
+#: dialogs/settings/rc.cpp:33 views/rc.cpp:38
+msgid "Simple Moving Average"
+msgstr "Média Simples dos Movimentos"
+
+#: dialogs/settings/rc.cpp:34 views/rc.cpp:39
+msgid "Weighted Moving Average"
+msgstr "Média Ponderada dos Movimentos"
+
+#: dialogs/settings/rc.cpp:35 views/rc.cpp:40
+msgid "Linear Regression"
+msgstr "Regressão Linear"
+
+#: dialogs/keditloanwizard.cpp:315 dialogs/rc.cpp:628 dialogs/rc.cpp:647
+#: views/rc.cpp:43
+msgid "Summary"
+msgstr "Resumo"
+
+#: views/rc.cpp:45
+msgid "0 days"
+msgstr "0 dias"
+
+#: views/rc.cpp:46
+msgid "30 days"
+msgstr "30 dias"
+
+#: views/rc.cpp:47
+msgid "60 days"
+msgstr "60 dias"
+
+#: views/rc.cpp:48
+msgid "90 days"
+msgstr "90 dias"
+
+#: views/rc.cpp:49
+msgid "New Item"
+msgstr "Novo Item"
+
+#: views/rc.cpp:50 widgets/rc.cpp:64
+msgid "Detail"
+msgstr "Detalhe"
+
+#: views/rc.cpp:51
+msgid "Advanced"
+msgstr "Avançado"
+
+#: views/rc.cpp:52
+msgid "Budget Forecast"
+msgstr "Previsão do Orçamento"
+
+#: views/rc.cpp:55
+msgid "Investment Summary"
+msgstr "Resumo do Investimento"
+
+#: views/rc.cpp:56
+msgid "Select Account:"
+msgstr "Selecionar uma Conta:"
+
+#: views/rc.cpp:57
+msgid ""
+"Summary of the equities contained in this account, showing your holdings and "
+"their most recent price."
+msgstr ""
+"Resumo dos títulos contidos nesta conta, mostrando suas posses e os preços "
+"mais recentes delas."
+
+#: views/rc.cpp:60 widgets/register.cpp:564
+msgid "No."
+msgstr "Nº."
+
+#: views/rc.cpp:64
+msgid "Balance: "
+msgstr "Saldo: "
+
+#: views/rc.cpp:65
+msgid "Address"
+msgstr "Endereço"
+
+#: views/rc.cpp:66
+msgid "Payee Information"
+msgstr "Informações de Beneficiário"
+
+#: views/rc.cpp:67
+msgid "E-Mail:"
+msgstr "Email:"
+
+#: dialogs/rc.cpp:393 views/rc.cpp:69
+msgid "Telephone/Fax:"
+msgstr "Telefone/Fax:"
+
+#: views/rc.cpp:70
+msgid "Notes"
+msgstr "Notas"
+
+#: views/rc.cpp:71
+msgid "Address:"
+msgstr "Endereço:"
+
+#: views/rc.cpp:72
+msgid "Matching"
+msgstr "Corresponder"
+
+#: views/rc.cpp:73
+msgid "Transaction Matching"
+msgstr "Correspondência de Transação"
+
+#: views/rc.cpp:74
+msgid "No matching"
+msgstr "Sem correspondência"
+
+#: views/rc.cpp:75
+msgid "Match on Payee name"
+msgstr "Corresponder nome de Beneficiário"
+
+#: views/rc.cpp:76
+msgid "Match on a name listed below"
+msgstr "Corresponder por um nome listado abaixo"
+
+#: views/rc.cpp:77
+msgid "List of matching names"
+msgstr "Listas dos nomes que correspondem"
+
+#: views/rc.cpp:78
+msgid ""
+"This list contains the names that will match this payee if a transaction is "
+"imported from an external source. Keep in mind, that you can specify regular "
+"expressions here."
+msgstr ""
+"Esta lista contém os nomes que vão corresponder a este beneficiário se uma "
+"transacção for importada. Guarde em mente que pode utilizar as expressões "
+"regulares aqui."
+
+#: views/rc.cpp:79
+msgid "Ignore Case"
+msgstr "Ignorar Capitalização"
+
+#: views/rc.cpp:80
+#, fuzzy
+msgid "Default Account"
+msgstr "Seleccione a Conta"
+
+#: views/rc.cpp:81
+#, fuzzy
+msgid ""
+"Use the default account for\n"
+"new transactions with this payee"
+msgstr "Use isto para inserir a transacção no registo."
+
+#: views/rc.cpp:82
+#, fuzzy
+msgid "Default category:"
+msgstr "Criar categoria"
+
+#: views/rc.cpp:83
+#, fuzzy
+msgid "Suggest a category"
+msgstr "Sómente a categoria"
+
+#: views/rc.cpp:85
+#, fuzzy
+msgid "New Scheduled transaction..."
+msgstr "Inserir a transacção agendada"
+
+#: views/rc.cpp:86
+msgid "Filter Accounts"
+msgstr "Filtrar Contas"
+
+#: views/rc.cpp:87
+msgid "List View"
+msgstr "Visão de Lista"
+
+#: views/rc.cpp:88
+msgid "Calendar View"
+msgstr "Visão de Calendário"
+
+#: views/kinstitutionsview.cpp:43
+msgid "Institution/Account"
+msgstr "Instituição/Conta"
+
+#: views/kinstitutionsview.cpp:157
+msgid "Accounts with no institution assigned"
+msgstr "Conta sem instituição atribuída"
+
+#: views/kscheduledview.cpp:70
+msgid "Type/Name"
+msgstr "Tipo/Nome"
+
+#: views/kscheduledview.cpp:75
+msgid "Frequency"
+msgstr "Frequência"
+
+#: views/kscheduledview.cpp:157
+msgid "Unable to load accounts: "
+msgstr "Incapaz de carregar contas: "
+
+#: views/kscheduledview.cpp:171 views/kscheduledview.cpp:429
+#: views/kscheduledview.cpp:445 widgets/kmymoneyscheduledcalendar.cpp:46
+msgid "Bills"
+msgstr "Contas a Pagar"
+
+#: dialogs/rc.cpp:232 dialogs/rc.cpp:706 views/kscheduledview.cpp:172
+#: views/kscheduledview.cpp:431 views/kscheduledview.cpp:447
+#: widgets/kmymoneyscheduledcalendar.cpp:47
+msgid "Deposits"
+msgstr "Depósitos"
+
+#: views/kscheduledview.cpp:173 views/kscheduledview.cpp:435
+#: views/kscheduledview.cpp:451
+msgid "Loans"
+msgstr "Financiamentos"
+
+#: views/kscheduledview.cpp:357
+msgid "Error activating context menu"
+msgstr "Erro ao activar o menu de contexto"
+
+#: views/kscheduledview.cpp:385
+msgid "Error executing item"
+msgstr "Erro executando item"
+
+#: views/kscheduledview.cpp:419
+msgid "Unable to filter account"
+msgstr "Incapaz de filtrar conta"
+
+#: views/kgloballedgerview.cpp:508
+msgid "Statement Details"
+msgstr "Detalhes do Extracto"
+
+#: views/kgloballedgerview.cpp:512
+msgid "Statement Deposit Details"
+msgstr "Detalhes do Extracto de Depósito"
+
+#: views/kgloballedgerview.cpp:513
+msgid "Statement Payment Details"
+msgstr "Detalhes do Extracto de Pagamento"
+
+#: views/kgloballedgerview.cpp:642
+msgid "%1 deposits (%3), %2 payments (%4)"
+msgstr "%1 depósitos (%3), %2 pagamentos (%4)"
+
+#: views/kgloballedgerview.cpp:649
+msgid "%1 payments (%2)"
+msgstr "%1 pagamentos (%2)"
+
+#: views/kgloballedgerview.cpp:653
+msgid "%1 deposits (%2)"
+msgstr "%1 depósitos (%2)"
+
+#: views/kgloballedgerview.cpp:721
+#, c-format
+msgid "Statement: %1"
+msgstr "Extracto: %1"
+
+#: views/kgloballedgerview.cpp:722 views/kgloballedgerview.cpp:736
+#, c-format
+msgid "Cleared: %1"
+msgstr "Compensada: %1"
+
+#: views/kgloballedgerview.cpp:723
+#, c-format
+msgid "Difference: %1"
+msgstr "Diferença: %1"
+
+#: views/kgloballedgerview.cpp:730
+#, c-format
+msgid "Last reconciled: %1"
+msgstr "Último reconcilio: %1"
+
+#: views/kgloballedgerview.cpp:732
+msgid "Never reconciled"
+msgstr "Nunca reconciliada"
+
+#: views/kgloballedgerview.cpp:772
+msgid "Investment value: %1%2"
+msgstr "Valor do Investimento: %1%2"
+
+#: views/kgloballedgerview.cpp:1040
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to continue to edit the transactions anyway?"
+msgstr ""
+"Pelos menos um elemento da transacções seleccionadas foi reconciliado. "
+"Deseja continuar e editar as transacções na mesma?"
+
+#: views/kgloballedgerview.cpp:1051
+msgid ""
+"At least one split of the selected transactions has been frozen. Editing the "
+"transactions is therefore prohibited."
+msgstr ""
+"Pelos menos uma parcela das transacções selecionadas foi congelada. A edição "
+"das transacções é por isso proibida."
+
+#: views/kgloballedgerview.cpp:1053
+msgid "Transaction already frozen"
+msgstr "Transacção já congelada"
+
+#: views/kgloballedgerview.cpp:1058
+msgid ""
+"At least one split of the selected transaction references an account that "
+"has been closed. Editing the transactions is therefore prohibited."
+msgstr ""
+"Pelos menos uma parcela da transacção seleccionada se refere a uma conta que "
+"foi fechada. A edição das transacções é por isso proibida."
+
+#: views/kgloballedgerview.cpp:1060
+msgid "Account closed"
+msgstr "Conta fechada"
+
+#: views/kgloballedgerview.cpp:1349
+msgid "Cannot create transactions when no account is selected."
+msgstr "Não é possível criar transacções sem conta seleccionada."
+
+#: views/kgloballedgerview.cpp:1354
+msgid "Cannot create transactions in the context of a category."
+msgstr "Não é possível criar transacções no contexto de uma categoria."
+
+#: views/kgloballedgerview.cpp:1358
+msgid "Cannot create transactions in a closed account."
+msgstr "Não é possível criar transacções numa conta fechada."
+
+#: views/kgloballedgerview.cpp:1370
+msgid "Cannot process transaction with focus if it is not selected."
+msgstr ""
+"Não é possível modificar a transacção com foco se ela não estiver "
+"seleccionada."
+
+#: views/kgloballedgerview.cpp:1400
+msgid "Cannot edit transactions with frozen splits."
+msgstr "Não é possível editar transacções com parcelas congeladas."
+
+#: views/kgloballedgerview.cpp:1411
+msgid "Cannot edit transactions in the context of a category."
+msgstr "Não é possível editar transacções no contexto de uma categoria."
+
+#: views/kgloballedgerview.cpp:1430
+msgid ""
+"Cannot edit investment transactions and non-investment transactions together."
+msgstr ""
+"Não é possível editar transacções de investimento e de não-investimento ao "
+"mesmo tempo."
+
+#: views/kgloballedgerview.cpp:1438
+msgid "Cannot edit multiple split transactions at once."
+msgstr "editar multiple nos."
+
+#: views/kgloballedgerview.cpp:1448
+msgid "Cannot edit investment transactions in the context of this account."
+msgstr ""
+"Não é possível editar transacções de investimentos no contexto desta conta."
+
+#: views/kforecastview.cpp:164
+msgid "Scheduled"
+msgstr "Agendado"
+
+#: views/kforecastview.cpp:169
+msgid "History"
+msgstr "Histórico"
+
+#: views/kforecastview.cpp:296
+msgid "The balance of %2 is below the minimum balance %3 today."
+msgstr "Hoje, o saldo de %2 está abaixo do saldo mínimo %3."
+
+#: views/kforecastview.cpp:301 views/khomeview.cpp:1043
+msgid "The balance of %1 will drop below the minimum balance %2 in %3 days."
+msgstr "O saldo de %1 estará abaixo do saldo mínimo de %2 em %3 dias."
+
+#: views/kforecastview.cpp:318 views/khomeview.cpp:1059
+msgid "The balance of %1 is below %2 today."
+msgstr "Hoje, o saldo de %1 está abaixo de %2."
+
+#: views/kforecastview.cpp:323 views/khomeview.cpp:1064
+msgid "The balance of %1 is above %2 today."
+msgstr "Hoje, o saldo de %1 está acima de %2."
+
+#: views/kforecastview.cpp:330 views/khomeview.cpp:1070
+msgid "The balance of %1 will drop below %2 in %3 days."
+msgstr "O saldo de %1 estará abaixo de %2 em %3 dias."
+
+#: views/kforecastview.cpp:335 views/khomeview.cpp:1075
+msgid "The balance of %1 will raise above %2 in %3 days."
+msgstr "O saldo de %1 estará acima de %2 em %3 dias."
+
+#: views/kforecastview.cpp:348
+msgid "The account %1 is decreasing %2 per cycle."
+msgstr "A conta %1 está diminuindo de %2 por ciclo."
+
+#: views/kforecastview.cpp:404 widgets/kmymoneyaccounttreeforecast.cpp:114
+#, c-format
+msgid "Min Bal %1"
+msgstr "Valor Mínimo %1"
+
+#: views/kforecastview.cpp:406 widgets/kmymoneyaccounttreeforecast.cpp:116
+#, c-format
+msgid "Min Date %1"
+msgstr "Data Mínima %1"
+
+#: views/kforecastview.cpp:409 widgets/kmymoneyaccounttreeforecast.cpp:119
+#, c-format
+msgid "Max Bal %1"
+msgstr "Valor Máximo %1"
+
+#: views/kforecastview.cpp:411 widgets/kmymoneyaccounttreeforecast.cpp:121
+#, c-format
+msgid "Max Date %1"
+msgstr "Data Máxima %1"
+
+#: views/kforecastview.cpp:413 widgets/kmymoneyaccounttreeforecast.cpp:123
+msgid "Average"
+msgstr "Média"
+
+#: views/kforecastview.cpp:649 views/khomeview.cpp:268 views/khomeview.cpp:275
+msgid "Networth Forecast"
+msgstr "Previsão do Benefício"
+
+#: views/khomeview.cpp:203
+msgid "Your Financial Summary"
+msgstr "O Seu Resumo Financeiro"
+
+#: views/khomeview.cpp:218
+msgid "Preferred Accounts"
+msgstr "Contas Preferidas"
+
+#: views/khomeview.cpp:225 views/khomeview.cpp:227
+msgid "Payment Accounts"
+msgstr "Contas de Pagamento"
+
+#: views/khomeview.cpp:256
+msgid "Show KMyMoney welcome page"
+msgstr "Mostrar a página de boas vindas do KMyMoney"
+
+#: views/khomeview.cpp:409
+msgid "Overdue payments"
+msgstr "Pagamentos atrasados"
+
+#: views/khomeview.cpp:424 views/khomeview.cpp:497 views/khomeview.cpp:531
+msgid "Balance after"
+msgstr "Saldo depois"
+
+#: views/khomeview.cpp:482
+msgid "Today's payments"
+msgstr "Pagamentos de hoje"
+
+#: views/khomeview.cpp:516
+msgid "Future payments"
+msgstr "Pagamentos futuros"
+
+#: views/khomeview.cpp:585
+msgid "Less..."
+msgstr "Menos..."
+
+#: views/khomeview.cpp:587
+msgid "More..."
+msgstr "Mais ..."
+
+#: views/khomeview.cpp:622
+msgid "Enter schedule"
+msgstr "Entrar agendamento"
+
+#: views/khomeview.cpp:624
+msgid "Skip schedule"
+msgstr "Ignorar agendamento"
+
+#: views/khomeview.cpp:627
+msgid "Edit schedule"
+msgstr "Editar agendamento"
+
+#: views/khomeview.cpp:631
+msgid " (%1 payments)"
+msgstr " (%1 pagamentos)"
+
+#: views/khomeview.cpp:771
+msgid "To Minimum Balance / Maximum Credit"
+msgstr "Para o Saldo Mínimo / Crédito Máximo"
+
+#: views/khomeview.cpp:964
+msgid "%1 Day Forecast"
+msgstr "%1 Dias de Previsão"
+
+#: views/khomeview.cpp:973 widgets/kmymoneyaccounttreeforecast.cpp:67
+msgid "%1 days"
+msgstr "%1 dias"
+
+#: views/khomeview.cpp:1039
+msgid "The balance of %1 is below the minimum balance %2 today."
+msgstr "Hoje, o saldo de %1 está abaixo do saldo mínimo de %2."
+
+#: views/khomeview.cpp:1175
+msgid ""
+"Before KMyMoney can give you detailed information about your financial "
+"status, you need to create at least one account. Until then, KMyMoney shows "
+"the welcome page instead."
+msgstr ""
+"Antes que KMyMoney lhe possa dar informações financeiras, deve criar pelo "
+"menos uma conta. Por agora, KMyMoney mostra-lhe a página de bemvindas."
+
+#: views/khomeview.cpp:1258
+msgid "Assets and Liabilities Summary"
+msgstr "Resumo de Activos e Passivos"
+
+#: views/khomeview.cpp:1262
+msgid "Asset Accounts"
+msgstr "Contas de Activos"
+
+#: views/khomeview.cpp:1270
+msgid "Liability Accounts"
+msgstr "Contas de Passivo"
+
+#: views/khomeview.cpp:1348
+msgid "Total Assets"
+msgstr "Total Activo"
+
+#: views/khomeview.cpp:1354
+msgid "Total Liabilities"
+msgstr "Total dos Passivos"
+
+#: views/khomeview.cpp:1399
+msgid "Current Month Summary"
+msgstr "Resumo do Mês Actual"
+
+#: views/khomeview.cpp:1403 views/khomeview.cpp:1440
+msgid "Budgeted"
+msgstr "Orçamentado"
+
+# TODO: próximo/seguinte?
+# TODO: abaixo igual
+#: views/khomeview.cpp:1433
+msgid "Budget Overruns"
+msgstr "Orçamentos Ultrapassados"
+
+#: views/khomeview.cpp:1502
+msgid "No Budget Categories have been overrun"
+msgstr "Nenhuma Categoria de Orçamento foi ultrapassada"
+
+#: views/khomeview.cpp:1801
+msgid "Cash Flow Summary"
+msgstr "Resumo da Tesouraria"
+
+#: views/khomeview.cpp:1808
+msgid "Income and Expenses of Current Month"
+msgstr "Receitas e Despesas Deste Mês"
+
+#: views/khomeview.cpp:1816
+msgid "Scheduled Income"
+msgstr "Receitas Agendadas"
+
+#: views/khomeview.cpp:1819
+msgid "Expenses"
+msgstr "Despesas"
+
+#: views/khomeview.cpp:1822
+msgid "Scheduled Expenses"
+msgstr "Despesas Agendadas"
+
+#: views/khomeview.cpp:1850
+msgid "Liquid Assets and Liabilities"
+msgstr "Activos e Passivos liquidos"
+
+#: views/khomeview.cpp:1855
+msgid "Liquid Assets"
+msgstr "Activos liquidos"
+
+#: views/khomeview.cpp:1858
+msgid "Transfers to Liquid Liabilities"
+msgstr "Transferimentos para Passivos líquidos"
+
+#: views/khomeview.cpp:1861
+msgid "Liquid Liabilities"
+msgstr "Passivos líquidos"
+
+#: views/khomeview.cpp:1864
+msgid "Other Transfers"
+msgstr "Outras Transferências"
+
+#: views/khomeview.cpp:1908
+msgid "Cash Flow Status"
+msgstr "Estado da Tesouraria"
+
+#: views/khomeview.cpp:1914
+msgid "Expected Liquid Assets"
+msgstr "Previsão de Valores Líquidos"
+
+#: views/khomeview.cpp:1917
+msgid "Expected Liquid Liabilities"
+msgstr "Previsão de Activos e Obrigações"
+
+#: views/khomeview.cpp:1920
+msgid "Expected Profit/Loss"
+msgstr "Previsão de Rendimentos/Percas"
+
+#: plugins/ofximport/ofximporterplugin.cpp:64
+msgid "OFX..."
+msgstr "OFX..."
+
+#: plugins/ofximport/ofximporterplugin.cpp:69
+msgid "OFX import file selection"
+msgstr "Selecção do ficheiro de importe OFX"
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid ""
+"Unable to import %1 using the OFX importer plugin. This file is not the "
+"correct format."
+msgstr ""
+"Não foi possível importar %1 usando o grefão de importe OFX. Este ficheiro "
+"não é o formato correcto."
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid "Incorrect format"
+msgstr "Formato incorreto"
+
+#: plugins/ofximport/ofximporterplugin.cpp:122
+msgid "Unable to parse file"
+msgstr "Incapaz de percorrer o ficheiro"
+
+#: plugins/ofximport/ofximporterplugin.cpp:576
+msgid "Online settings"
+msgstr "Configurações em linha"
+
+#: plugins/ofximport/ofximporterplugin.cpp:635
+#, c-format
+msgid "Error connecting to bank: %1"
+msgstr "Erro ao conectar-se ao banco: %1"
+
+#: plugins/ofximport/ofximporterplugin.cpp:646
+msgid ""
+"Unable to import %1 using the OFX importer plugin. The plugin returned the "
+"following error:<p>%2"
+msgstr ""
+"Não foi possível importar %1 usando o grefão de importe OFX. O grefão "
+"retornou o seguinte erro: <p>%3"
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Importing process terminated unexpectedly."
+msgstr "Processo de importação terminou de maneira inesperada."
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Failed to import all statements."
+msgstr "Falha ao importar todas as transacções."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "The HTTP request failed."
+msgstr "A requisição HTTP falhou."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "Failed"
+msgstr "Falhou"
+
+#: plugins/ofximport/ofxpartner.cpp:410
+msgid "Cannot open file %1 for writing"
+msgstr "Incapaz de abrir o ficheiro '%1' para escrita"
+
+#: plugins/ofximport/ofxpartner.cpp:414
+msgid "OFX setup error"
+msgstr "Erro de preparação OFX"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid "Loading banklist"
+msgstr "A carregar a lista dos bancos"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid ""
+"Getting list of banks from http://moneycentral.msn.com/\n"
+"This may take some time depending on the available bandwidth."
+msgstr ""
+"A obter a lista dos bancos a partir de http://moneycentral.msn.com/\n"
+"Pode levar bastante tempo seguinte a rede disponível."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:155
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:199
+msgid "Supports online statements<br>"
+msgstr "Aceita declarações em linha<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:157
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:201
+msgid "Supports investments<br>"
+msgstr "Aceita investimentos<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:159
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:203
+msgid "Supports bill payment (but not supported by KMyMoney yet)<br>"
+msgstr ""
+"Aceita pagamento de facturas (mas ainda não é suportado pelo KMyMoney)<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:163
+msgid "Does not support online banking</p>"
+msgstr "Não suporta banco em linha</p>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:173
+msgid "Please choose a bank."
+msgstr "Por favor escolha um banco."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:179
+msgid "Please fill all fields with values."
+msgstr "É favor preencher todos os campos com valores."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:271
+msgid "No suitable accounts were found at this bank."
+msgstr "Nenhuma conta correcta foi encontrada neste banco."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:283
+msgid "Please choose an account"
+msgstr "Por favor escolha uma conta"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:386
+msgid "Server message: %1\n"
+msgstr "Mensagem do servidor: %1\n"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+msgid "Your bank returned warnings when signing on"
+msgstr "O seu banco indicou um aviso na ligação"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+#, c-format
+msgid "WARNING %1"
+msgstr "ATENÇÃO %1"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+msgid "Error signing onto your bank"
+msgstr "Erro ao ligar-se ao seu banco"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, c-format
+msgid "ERROR %1"
+msgstr "ERRO %1"
+
+#: plugins/ofximport/dialogs/konlinebankingstatus.cpp:59
+msgid "Enabled & configured"
+msgstr "Activo e configurado"
+
+#: plugins/ofximport/dialogs/rc.cpp:1
+msgid "OFX Direct Connect"
+msgstr "OFX Ligação Directa"
+
+#: plugins/ofximport/dialogs/rc.cpp:2
+msgid "Contacting bank..."
+msgstr "Contactando o banco..."
+
+#: plugins/ofximport/dialogs/rc.cpp:4
+msgid "Online Banking Account Setup"
+msgstr "Configuração de Conta de Banco em linha"
+
+#: plugins/ofximport/dialogs/rc.cpp:5
+msgid "Select Financial Institution"
+msgstr "Seleccionar Instituição Financeira"
+
+#: plugins/ofximport/dialogs/rc.cpp:6
+msgid "Please select your financial institution from the list below..."
+msgstr "Por favor, seleccione a instituição financeira na lista abaixo..."
+
+#: plugins/ofximport/dialogs/rc.cpp:7
+msgid "Automatic"
+msgstr "Automático"
+
+#: plugins/ofximport/dialogs/rc.cpp:8
+msgid "Financial Institution"
+msgstr "Instituição Financeira"
+
+#: plugins/ofximport/dialogs/rc.cpp:9
+msgid "Manual"
+msgstr "Manual"
+
+#: plugins/ofximport/dialogs/rc.cpp:10
+msgid "Org"
+msgstr "Org"
+
+#: plugins/ofximport/dialogs/rc.cpp:11
+msgid "FID"
+msgstr "FID"
+
+#: dialogs/settings/rc.cpp:120 plugins/ofximport/dialogs/rc.cpp:12
+#: widgets/rc.cpp:46
+msgid "URL"
+msgstr "URL"
+
+#: plugins/ofximport/dialogs/rc.cpp:13
+msgid "Enter Login Details"
+msgstr "Escreva os Detalhes de Identificação"
+
+#: plugins/ofximport/dialogs/rc.cpp:14
+msgid ""
+"Please enter the username and password you use to log into this bank for "
+"online banking. Please note that many banks require a separate signup, and "
+"assign a separate PIN or password just for online banking from home."
+msgstr ""
+"Por favor insira o nome de usuário e senha a serem usados para conectar-se "
+"ao banco para uso em linha. Por favor, observe que muitos bancos exigem uma "
+"conexão separada, e atribuem logins e senhas diferentes e exclusivas para "
+"acesso do banco em linha a partir de sua casa."
+
+#: plugins/ofximport/dialogs/rc.cpp:15
+msgid "Connection Details"
+msgstr "Detalhes da Ligação"
+
+#: plugins/ofximport/dialogs/rc.cpp:16
+msgid "Username"
+msgstr "Nome do Utilizador"
+
+#: plugins/ofximport/dialogs/rc.cpp:17 plugins/ofximport/dialogs/rc.cpp:36
+msgid "Header Version"
+msgstr "Versão de cabeçalho"
+
+#: plugins/ofximport/dialogs/rc.cpp:18 plugins/ofximport/dialogs/rc.cpp:37
+msgid "Identify as"
+msgstr "Identificar como"
+
+#: dialogs/rc.cpp:742 plugins/ofximport/dialogs/rc.cpp:19
+msgid "Password"
+msgstr "Senha"
+
+#: plugins/ofximport/dialogs/rc.cpp:20
+msgid "Select Account"
+msgstr "Seleccione a Conta"
+
+#: plugins/ofximport/dialogs/rc.cpp:21
+msgid ""
+"Please select the account from your financial institution from the list "
+"below which matches this account."
+msgstr ""
+"Por favor, seleccione a conta de sua instituição financeira a partir da "
+"lista abaixo que corresponde a esta conta."
+
+#: plugins/ofximport/dialogs/rc.cpp:24
+msgid "Bank"
+msgstr "Banco"
+
+#: plugins/ofximport/dialogs/rc.cpp:25
+msgid "Branch"
+msgstr "Ramificação"
+
+#: plugins/ofximport/dialogs/rc.cpp:26
+msgid "WizardPage"
+msgstr "WizardPage"
+
+#: plugins/ofximport/dialogs/rc.cpp:27
+msgid ""
+"Congratulations! You have successfully set up your bank for online banking "
+"via OFX."
+msgstr ""
+"Parabéns! Você configurou correctamente o seu banco para actualizar em "
+"linha via OFX."
+
+#: plugins/ofximport/dialogs/rc.cpp:28
+msgid "Account Details"
+msgstr "Detalhes da Conta"
+
+#: plugins/ofximport/dialogs/rc.cpp:29 plugins/ofximport/dialogs/rc.cpp:31
+msgid "&lt;Not configured&gt;"
+msgstr "&lt;Não configurada&gt;"
+
+#: plugins/ofximport/dialogs/rc.cpp:30
+msgid "BANK/BROKER:"
+msgstr "BANCO/CORRETOR:"
+
+#: plugins/ofximport/dialogs/rc.cpp:32
+msgid "Unavailable"
+msgstr "Indisponível"
+
+#: plugins/ofximport/dialogs/rc.cpp:33
+msgid "ACCOUNT:"
+msgstr "CONTA:"
+
+#: plugins/ofximport/dialogs/rc.cpp:34
+msgid "STATUS:"
+msgstr "ESTADO:"
+
+#: plugins/ofximport/dialogs/rc.cpp:35
+msgid "OFX Details"
+msgstr "Detalhes OFX"
+
+#: plugins/ofximport/dialogs/rc.cpp:38
+msgid "Start date of import"
+msgstr "Data inicial do importe"
+
+#: plugins/ofximport/dialogs/rc.cpp:39
+msgid "To&day minus"
+msgstr "Ho&je menos"
+
+#: plugins/ofximport/dialogs/rc.cpp:40
+msgid "days"
+msgstr "dias"
+
+#: plugins/ofximport/dialogs/rc.cpp:41
+msgid "Last &update"
+msgstr "Última act&ualização"
+
+#: plugins/ofximport/dialogs/rc.cpp:42
+msgid "Pi&ck date"
+msgstr "Es&colha a data"
+
+#: plugins/ofximport/dialogs/rc.cpp:43
+msgid "Name is derived from"
+msgstr "O nome é derivado de"
+
+#: plugins/ofximport/dialogs/rc.cpp:44
+msgid "P&AYEEID"
+msgstr "P&AYEEID"
+
+#: plugins/ofximport/dialogs/rc.cpp:45
+msgid "&NAME"
+msgstr "&NOME"
+
+#: plugins/ofximport/dialogs/rc.cpp:46
+msgid "field if both are present in download"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:81
+msgid "Quicken Windows 2003"
+msgstr "Quicken Windows 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:82
+msgid "Quicken Windows 2004"
+msgstr "Quicken Windows 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:83
+msgid "Quicken Windows 2005"
+msgstr "Quicken Windows 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:84
+msgid "Quicken Windows 2006"
+msgstr "Quicken Windows 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:85
+msgid "Quicken Windows 2007"
+msgstr "Quicken Windows 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:86
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:111
+msgid "Quicken Windows 2008"
+msgstr "Quicken Windows 2008"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:89
+msgid "MS-Money 2003"
+msgstr "MS-Money 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:90
+msgid "MS-Money 2004"
+msgstr "MS-Money 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:91
+msgid "MS-Money 2005"
+msgstr "MS-Money 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:92
+msgid "MS-Money 2006"
+msgstr "MS-Money 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:93
+msgid "MS-Money 2007"
+msgstr "MS-Money 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:94
+msgid "MS-Money Plus"
+msgstr "MS-Money Plus"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:91
+msgid "Report Configuration"
+msgstr "Configuração do Relatório"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:117
+#: dialogs/kreportconfigurationfilterdlg.cpp:135
+msgid "Rows/Columns"
+msgstr "Linhas/Colunas"
+
+#: dialogs/investtransactioneditor.cpp:203
+#: dialogs/investtransactioneditor.cpp:537
+#: dialogs/investtransactioneditor.cpp:579 dialogs/rc.cpp:103
+#: dialogs/rc.cpp:158 dialogs/rc.cpp:245 dialogs/rc.cpp:750 dialogs/rc.cpp:794
+#: widgets/kmymoneyaccountselector.cpp:182 widgets/register.cpp:64
+#: widgets/register.cpp:567 widgets/transaction.cpp:1500
+msgid "Security"
+msgstr "Segurança"
+
+#: dialogs/investtransactioneditor.cpp:211
+msgid "Asset account"
+msgstr "Conta de ativos"
+
+#: dialogs/investtransactioneditor.cpp:1073
+msgid "Price/Share"
+msgstr "Preço/Acção"
+
+#: dialogs/kmergetransactionsdlg.cpp:39
+msgid "Merge Transactions"
+msgstr "Reunir Transacções"
+
+#: dialogs/kmergetransactionsdlg.cpp:40
+msgid "Are you sure you wish to merge these transactions?"
+msgstr "Tem a certeza que deseja combinar estas transacções?"
+
+#: dialogs/kstartdlg.cpp:59
+msgid "Start Dialog"
+msgstr "Início"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Templates"
+msgstr "Modelos"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Select templates"
+msgstr "Seleccionar modelos"
+
+#: dialogs/kstartdlg.cpp:80 dialogs/kstartdlg.cpp:119
+msgid "New KMyMoney document"
+msgstr "Novo documento do KMyMoney"
+
+#: dialogs/kstartdlg.cpp:90
+msgid "Open a KMyMoney document"
+msgstr "Abrir um documento do KMyMoney"
+
+#: dialogs/kstartdlg.cpp:96
+msgid ""
+"%1|KMyMoney files (*.kmy)\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Ficheiros KMyMoney (*.kmy)\n"
+"%2|Todos os ficheiros (*.*)"
+
+#: dialogs/kstartdlg.cpp:102
+msgid "Recent Files"
+msgstr "Ficheiros Recentes"
+
+#: dialogs/kstartdlg.cpp:217
+msgid "Blank Document"
+msgstr "Documento em Branco"
+
+#: dialogs/knewbudgetdlg.cpp:71
+msgid "Please specify a budget name"
+msgstr "Por favor, especifique um nome para o orçamento"
+
+#: dialogs/kgncpricesourcedlg.cpp:48
+#, c-format
+msgid "Investment: %1"
+msgstr "Investimento: %1"
+
+#: dialogs/kgncpricesourcedlg.cpp:49
+#, c-format
+msgid "Quote source: %1"
+msgstr "Fonte de cotação: %1"
+
+#: dialogs/kmymoneypricedlg.cpp:62 dialogs/ksecuritylisteditor.cpp:69
+msgid "Delete this entry"
+msgstr "Remover esta entrada"
+
+#: dialogs/ksecuritylisteditor.cpp:70
+msgid "Remove this security item from the file"
+msgstr "Remover este ítem de título do ficheiro"
+
+#: dialogs/ksecuritylisteditor.cpp:73
+msgid "&Add"
+msgstr "&Adicionar"
+
+#: dialogs/kmymoneypricedlg.cpp:68 dialogs/ksecuritylisteditor.cpp:75
+msgid "Add a new entry"
+msgstr "Adicionar um novo item"
+
+#: dialogs/ksecuritylisteditor.cpp:76
+msgid "Create a new security entry."
+msgstr "Criar uma nova entrada de título."
+
+#: dialogs/keditequityentrydlg.cpp:77 dialogs/kmymoneypricedlg.cpp:74
+#: dialogs/ksecuritylisteditor.cpp:81
+msgid "Modify the selected entry"
+msgstr "Modificar a entrada seleccionada"
+
+#: dialogs/ksecuritylisteditor.cpp:82
+msgid "Change the security information of the selected entry."
+msgstr "Mudar as informações do título da entrada seleccionada."
+
+#: dialogs/kmymoneypricedlg.cpp:80 dialogs/ksecuritylisteditor.cpp:87
+msgid "Close the dialog"
+msgstr "Fechar o diálogo"
+
+#: dialogs/kmymoneypricedlg.cpp:81 dialogs/ksecuritylisteditor.cpp:88
+msgid "Use this to close the dialog and return to the application."
+msgstr "Use isto para fechar a janela e retornar para a aplicação."
+
+#: dialogs/ksecuritylisteditor.cpp:184
+msgid ""
+"Do you really want to remove the currency <b>%1</b> from the file?</"
+"p><i>Note: It is currently not supported to add currencies.</i>"
+msgstr ""
+"Você deseja realmente remover a moeda <b>%1</b> do ficheiro?</p><i>Nota: "
+"Atualmente não é possível adicionar moedas.</i>"
+
+#: dialogs/ksecuritylisteditor.cpp:187
+msgid "Do you really want to remove the %1 <b>%2</b> from the file?"
+msgstr "Você deseja realmente remover o(a) %1 <b>%2</b> do ficheiro?"
+
+#: dialogs/ksecuritylisteditor.cpp:190
+msgid "Delete security"
+msgstr "Remover título"
+
+#: dialogs/kmymoneypricedlg.cpp:63
+msgid "Remove this price item from the file"
+msgstr "Remover este ítem de preço do ficheiro"
+
+#: dialogs/kmymoneypricedlg.cpp:66 dialogs/mymoneyqifprofileeditor.cpp:94
+msgid "&New"
+msgstr "&Novo"
+
+#: dialogs/kmymoneypricedlg.cpp:69
+msgid "Create a new price entry."
+msgstr "Criar uma nova entrada de preço."
+
+#: dialogs/kmymoneypricedlg.cpp:75
+msgid "Change the details of selected price information."
+msgstr "Mudar os detalhes das informações do preço selecionado."
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Do you really want to delete the selected price entry?"
+msgstr "Você realmente deseja apagar a entrada de preço seleccionada?"
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Delete price information"
+msgstr "Apagar informações de preço"
+
+#: dialogs/kchooseimportexportdlg.cpp:46
+msgid ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Por favor seleccione o tipo de importação que você deseja realizar. Uma "
+"explicação simples\n"
+"sobre os tipos de importação está disponível em baixo da janela e é "
+"actualizada quando você\n"
+"selecciona um elemento na caixa de opção.\n"
+"\n"
+"Uma vez que tenha escolhido um tipo de importação, por favor pressione o "
+"botão OK."
+
+#: dialogs/kchooseimportexportdlg.cpp:50 dialogs/rc.cpp:22
+msgid "Choose import type:"
+msgstr "Escolher tipo de importação:"
+
+#: dialogs/kchooseimportexportdlg.cpp:51 dialogs/rc.cpp:20
+msgid "Choose Import Type Dialog"
+msgstr "Escolher Tipo de Importação"
+
+#: dialogs/kchooseimportexportdlg.cpp:53
+msgid ""
+"Please choose the type of export you wish to perform. A simple explanation\n"
+"of the export type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an export type please press the OK button."
+msgstr ""
+"Por favor seleccione o tipo de exportação que você deseja realizar. Uma "
+"explicação simples\n"
+"sobre os tipos de exportação está disponível na base da janela e é "
+"actualizada quando você\n"
+"selecciona um ítem na caixa de opção.\n"
+"\n"
+"Uma vez que tenha escolhido um tipo de exportação, por favor pressione o "
+"botão OK."
+
+#: dialogs/kchooseimportexportdlg.cpp:57
+msgid "Choose export type:"
+msgstr "Escolha o tipo de exportação:"
+
+#: dialogs/kchooseimportexportdlg.cpp:58
+msgid "Choose Export Type Dialog"
+msgstr "Diálogo de Escolha do Tipo de Exportação"
+
+#: dialogs/kchooseimportexportdlg.cpp:78
+msgid ""
+"QIF files are created by the popular accounting program Quicken.\n"
+"Another dialog will appear, if you choose this type, asking for further\n"
+"information relevant to the Quicken format."
+msgstr ""
+"Ficheiros QIF são criados pelo popular programa de contabilidade Quicken.\n"
+"Se escolher este tipo, outro diálogo irá aparecer pedindo mais informações "
+"relevantes ao formato Quicken."
+
+#: dialogs/kchooseimportexportdlg.cpp:82
+msgid ""
+"The CSV type uses a comma delimeted text file that can be used by\n"
+"most popular spreadsheet programs available for Linux and other operating\n"
+"systems."
+msgstr ""
+"O tipo CSV usa um ficheiro de texto delimitado por vírgulas que pode ser "
+"usado pela maioria das folhas de cálculo disponíveis para Linux e outros "
+"sistemas operacionais."
+
+#: dialogs/kequitypriceupdatedlg.cpp:222
+msgid "%1 units in %2"
+msgstr "%1 unidades em %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid ""
+"Failed to retrieve an exchange rate for %1 from %2. It will be skipped this "
+"time."
+msgstr ""
+"Ocorreu uma falha ao obter a cotação de %1 a partir de %2. Vai ser ignorada "
+"por esta vês."
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid "Price Update Failed"
+msgstr "A actualização do preço falhou"
+
+#: dialogs/kequitypriceupdatedlg.cpp:427
+msgid ""
+"Failed to retrieve a quote for %1 from %2. Press <b>No</b> to remove the "
+"online price source from this security permanently, <b>Yes</b> to continue "
+"updating this security during future price updates or <b>Cancel</b> to stop "
+"the current update operation."
+msgstr ""
+"Não pude obter o valor de %1 a partir de %2. Carregue em <b>Não</b> para "
+"retirar esta fonte de valor definitivamente, <b>Sim</b> para a continuar de "
+"utilizar em actualizações futuras ou <b>Cancelar</b> para parar a "
+"actualização actual."
+
+#: dialogs/kequitypriceupdatedlg.cpp:427 dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Price Update Failed"
+msgstr "Actualização de Preço Falhou"
+
+#: dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Cannot update security <b>%1</b>: %2"
+msgstr "Não consigo actualizar o título <b>%1</b>: %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:528
+msgid "Price for %1 updated (id %2)"
+msgstr "Preço para %1 actualizado (id %2)"
+
+#: dialogs/kequitypriceupdatedlg.cpp:534
+msgid "Received an invalid price for %1, unable to update."
+msgstr "Valor inválido recebido para %1, não foi possível actualizar."
+
+#: dialogs/kequitypriceupdatedlg.cpp:554
+msgid ""
+"Received a price for %1 (id %2), but this symbol is not on the list! "
+"Aborting entire update."
+msgstr ""
+"Recebi um preço %1 (id %2), mas este smbolo não está na lista! Anulo toda a "
+"actualização."
+
+#: dialogs/transactioneditor.cpp:222
+msgid ""
+"The number <b>%1</b> has already been used in account <b>%2</b>. Do you want "
+"to replace it with the next available number?"
+msgstr ""
+"O número <b>%1</b> já está sendo usado na conta <b>%2</b>. Você deseja "
+"substituí-lo com o próximo número disponível?"
+
+#: dialogs/transactioneditor.cpp:222
+msgid "Duplicate number"
+msgstr "Número duplicado"
+
+#: dialogs/transactioneditor.cpp:303
+msgid ""
+"This transaction has more than two splits and is based on a different "
+"currency (%1). Using this account to modify the transaction is currently not "
+"very well supported by KMyMoney and may result in false results."
+msgstr ""
+"Esta transacção possui mais de duas parcelas e é baseada em uma moeda "
+"diferente (%1). Usar esta conta para modificar a transacção não é atualmente "
+"bem suportado pelo KMyMoney e pode resultar em resultados falsos."
+
+#: dialogs/transactioneditor.cpp:305
+msgid ""
+"KMyMoney was not able to find a more appropriate account to edit this "
+"transaction. Nevertheless, you are allowed to modify the transaction. If you "
+"don't want to edit this transaction, please cancel from editing next."
+msgstr ""
+"O KMyMoney não foi capaz de encontrar uma conta mais apropriada para editar "
+"esta transacção. Independente disto, você pode modificar a transacção. Se "
+"você não deseja editar esta transacção, por favor anule editando a seguinte."
+
+#: dialogs/transactioneditor.cpp:307
+msgid ""
+"Using e.g. <b>%1</b> to edit this transaction is a better choice. "
+"Nevertheless, you are allowed to modify the transaction. If you want to use "
+"the suggested account instead, please cancel from editing next and change "
+"the view to the suggested account."
+msgstr ""
+"Usar neste caso <b>%1</b> para editar esta transacção é a melhor opção. "
+"Independente disto, você pode modificar a transacção. Se você preferir usar "
+"a conta sugerida, por favor anule esta edição de transacção e mude a visão "
+"para a conta sugerida."
+
+#: dialogs/transactioneditor.cpp:410
+msgid ""
+"This transaction has more than two splits and is originally based on a "
+"different currency (%1). Using this account to modify the transaction may "
+"result in rounding errors. Do you want to continue?"
+msgstr ""
+"Esta transacção possui mais de duas parcelas e é baseada em uma moeda "
+"diferente (%1). Usar esta conta para modificar a transacção pode resultar em "
+"erros de arredondado. Deseja continuar?"
+
+#: dialogs/transactioneditor.cpp:412
+msgid ""
+"At least one of the selected transactions has more than two splits and is "
+"originally based on a different currency (%1). Using this account to modify "
+"the transactions may result in rounding errors. Do you want to continue?"
+msgstr ""
+"Pelo menos uma das transacções seleccionadas possui mais de duas parcelas e "
+"é baseada em uma moeda diferente (%1). Usar esta conta para modificar as "
+"transacções pode resultar em erros de arredondado. Deseja continuar?"
+
+#: dialogs/transactioneditor.cpp:557
+msgid "Storing transactions"
+msgstr "A gravar transacções"
+
+#: dialogs/transactioneditor.cpp:603 widgets/kmymoneybriefschedule.cpp:65
+msgid "&Enter"
+msgstr "&Entrar"
+
+#: dialogs/transactioneditor.cpp:606
+msgid "Use this to enter the transaction into the ledger."
+msgstr "Use isto para inserir a transacção no registo."
+
+#: dialogs/transactioneditor.cpp:607
+msgid "&Schedule"
+msgstr "A&gendar"
+
+#: dialogs/transactioneditor.cpp:609
+msgid "Accepts the entered data and stores it as schedule"
+msgstr "Aceita os dados escritos e guarda-los como um agendamento"
+
+#: dialogs/transactioneditor.cpp:610
+msgid "Use this to schedule the transaction for later entry into the ledger."
+msgstr ""
+"Use isto para agendar a transacção para ser inserida mais tarde no registo."
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"The transaction you are about to enter has a post date in the future.<br/"
+"><br/>Do you want to enter it in the ledger or add it to the schedules?"
+msgstr ""
+"A transacção que está prestes a inserir tem uma data de valor futura.<br/"
+"><br/>Deseja inserir-la no registo ou ajuntar-la aos agendamentos?"
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"_: Dialog caption for 'Enter or schedule' dialog\n"
+"Enter or schedule?"
+msgstr "Inserir ou agendar?"
+
+#: dialogs/transactioneditor.cpp:671
+msgid ""
+"The balance of account <b>%1</b> dropped below the warning balance of %2."
+msgstr "O balanceamento da conta <b>%1</b> passou além do nivél de alerta %2."
+
+#: dialogs/transactioneditor.cpp:677
+msgid ""
+"The balance of account <b>%1</b> dropped below the minimum balance of %2."
+msgstr "O balanceamento da conta <b>%1</b> passou além do nivél mínimo %2."
+
+#: dialogs/transactioneditor.cpp:683
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit warning "
+"limit of %2."
+msgstr ""
+"O balanceamento da conta <b>%1</b> passou abaixo do nivél maxímo de crédito %"
+"2."
+
+#: dialogs/transactioneditor.cpp:689
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit limit of %"
+"2."
+msgstr ""
+"O balanceamento da conta <b>%1</b> passou abaixo do nivél máximo de crédito %"
+"2."
+
+#: dialogs/transactioneditor.cpp:740
+msgid "Payer/Receiver"
+msgstr "Beneficiário/Destinatário"
+
+#: dialogs/transactioneditor.cpp:748
+msgid "Category/Account"
+msgstr "Categoria/Conta"
+
+#: dialogs/transactioneditor.cpp:980 dialogs/transactioneditor.cpp:1016
+#: dialogs/transactioneditor.cpp:1378 dialogs/transactioneditor.cpp:1399
+#: dialogs/transactioneditor.cpp:1422 dialogs/transactioneditor.cpp:1443
+#: dialogs/transactioneditor.cpp:1505 dialogs/transactioneditor.cpp:1509
+#: widgets/transaction.cpp:902
+msgid "Transfer from"
+msgstr "Transferir de"
+
+#: dialogs/transactioneditor.cpp:982 dialogs/transactioneditor.cpp:1018
+#: dialogs/transactioneditor.cpp:1401 dialogs/transactioneditor.cpp:1445
+#: dialogs/transactioneditor.cpp:1506 widgets/transaction.cpp:902
+msgid "Transfer to"
+msgstr "Transferir para"
+
+#: dialogs/transactioneditor.cpp:1259
+msgid "Select autofill transaction"
+msgstr "Seleccionar transacção auto-preenchida"
+
+#: dialogs/transactionmatcher.cpp:77
+msgid "First transaction does not match requirement for matching"
+msgstr "A primeira transacção não corresponde ao pedido para corresponder"
+
+#: dialogs/transactionmatcher.cpp:79
+msgid "Second transaction does not match requirement for matching"
+msgstr "A segunda transacção não corresponde ao pedido para corresponder"
+
+#: dialogs/transactionmatcher.cpp:83 dialogs/transactionmatcher.cpp:133
+msgid "Splits for %1 have conflicting values (%2,%3)"
+msgstr "Parcelar para %1 possuem valores conflitantes (%2, %3)"
+
+#: dialogs/transactionmatcher.cpp:96 dialogs/transactionmatcher.cpp:149
+msgid ""
+"Both of these transactions have been imported into %1. Therefore they "
+"cannot be matched. Matching works with one imported transaction and one non-"
+"imported transaction."
+msgstr ""
+"Ambas as transacções foram importadas para %1. Portanto, elas não podem "
+"corresponder. A correspondência funciona entre uma transacção importada e "
+"outra não-importada."
+
+#: dialogs/transactionmatcher.cpp:101 dialogs/transactionmatcher.cpp:156
+msgid "Unable to match all splits (%1)"
+msgstr "Não foi possível corresponder todas as parcelas (%1)"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:65
+msgid "Account and transfer account are the same. Please change one."
+msgstr "Contas de origem e destino são iguais. Por favor, mude uma delas."
+
+#: dialogs/kconfirmmanualenterdlg.cpp:84
+msgid "Payee changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Beneficiário modificado.<br>&nbsp;&nbsp;&nbsp; Antes<b>%1</b>, Depois: <b>%"
+"2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:92
+#: dialogs/kconfirmmanualenterdlg.cpp:100
+msgid "Account changed. Old: \"%1\", New: \"%2\""
+msgstr "Conta modificada. Antiga: \"%1\", Nova: \"%2\""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:107
+msgid "Account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Conta modificada<br>&nbsp;&nbsp;&nbsp; Antiga: <b>%1</b> Nova: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:115
+msgid ""
+"Transfer account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</"
+"b><p>"
+msgstr ""
+"Conta de transferência modificada.<br>&nbsp;&nbsp;&nbsp; Antes: <b>%1</b>, "
+"Depois:<b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:143
+msgid ""
+"Category changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Categoria modificada<br>&nbsp;&nbsp;&nbsp;Antiga <b>%1</b>; Nova<b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:151
+#: dialogs/kconfirmmanualenterdlg.cpp:153
+msgid "empty"
+msgstr "empty"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:157
+msgid "Memo changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Memo modificado<br>&nbsp;&nbsp;&nbsp; Antes: <b>%1</b> Depois: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:166
+msgid "Amount changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Valor modificado<br>&nbsp;&nbsp;&nbsp; Antes: <b>%1</b>, Depois: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:175
+msgid ""
+"Reconciliation flag changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%"
+"2</b><p>"
+msgstr ""
+"A marca de reconciliação mudou.<br>&nbsp;&nbsp;&nbsp;Antes: <b>%1</b>, "
+"Depois: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:182
+msgid "Fatal error in determining data: "
+msgstr "Erro fatal determinando dados: "
+
+#: dialogs/kselectdatabasedlg.cpp:56
+msgid ""
+"There are no Qt SQL drivers installed in your system.\n"
+"Please consult documentation for your distro, or visit the Qt web site (www."
+"trolltech.com) and search for SQL drivers."
+msgstr ""
+"Não há piloto Qt para SQL no seu sistema.\n"
+"É favor verificar a documentação da sua distribuição, ou visitar o site "
+"internet do Qt (www.trolltech.com) e procurar os pilotos SQL."
+
+#: dialogs/kselectdatabasedlg.cpp:100
+msgid "Qt SQL driver %1 is no longer installed on your system"
+msgstr "O piloto Qt SQL %1 não está agora instalado no seu sistema"
+
+#: dialogs/kselectdatabasedlg.cpp:107
+msgid "Qt SQL driver %1 is not suported"
+msgstr "O piloto Qt SQL %1 não é suportado"
+
+#: dialogs/kselectdatabasedlg.cpp:164
+msgid "SQLite files (*.sql);; All files (*.*)"
+msgstr "Ficheiros SQLite (*.sql);;Todos os ficheiros (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:167
+msgid "Select SQLite file"
+msgstr "Seleccionar o ficheiro SQLite"
+
+#: dialogs/kselectdatabasedlg.cpp:188
+msgid "All files (*.*)"
+msgstr "Todos os ficheiros (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:191
+msgid "Select output file"
+msgstr "Seleccionar o ficheiro de saída"
+
+#: dialogs/investactivities.cpp:168
+msgid "%1 (Brokerage)"
+msgstr "%1 (Corretagem)"
+
+#: dialogs/investactivities.cpp:200 dialogs/investactivities.cpp:288
+#: dialogs/investactivities.cpp:425 widgets/transaction.cpp:1548
+msgid "Price/share"
+msgstr "Preço/acção"
+
+#: dialogs/investactivities.cpp:586
+msgid "Ratio 1/"
+msgstr "Ratio 1/"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid ""
+"<p>Please check that all the details in the following dialog are correct and "
+"press OK.</p><p>Editable data can be changed and can either be applied to "
+"just this occurence or for all subsequent occurences for this schedule. "
+"(You will be asked what you intend after pressing OK in the following dialog)"
+"</p>"
+msgstr ""
+"<p>Por favor verifique que todos os detalhes na janela seguinte estão "
+"correctos e carregue em OK.</p><p>Os dados podem ser mudados seja só para "
+"esta ocorrencia ou para todas as ocorrencias futuras deste agendamento. "
+"(Vai-lhe ser pedida a sua escolha quando tiver carregado em OK)</p>"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid "Enter scheduled transaction"
+msgstr "Inserir a transacção agendada"
+
+#: dialogs/kcsvprogressdlg.cpp:65 dialogs/kexportdlg.cpp:65
+msgid "&Export"
+msgstr "&Exportar"
+
+#: dialogs/kexportdlg.cpp:67 dialogs/kimportdlg.cpp:68
+msgid "Start operation"
+msgstr "Iniciar operação"
+
+#: dialogs/kexportdlg.cpp:68
+msgid "Use this to start the export operation"
+msgstr "Use isto para iniciar a operação de exportação"
+
+#: dialogs/kexportdlg.cpp:71 dialogs/kimportdlg.cpp:72
+msgid "&Browse..."
+msgstr "&Navegar..."
+
+#: dialogs/kexportdlg.cpp:73 dialogs/kimportdlg.cpp:74
+msgid "Select filename"
+msgstr "Seleccionar nome do ficheiro"
+
+#: dialogs/kexportdlg.cpp:74 dialogs/kimportdlg.cpp:75
+msgid "Use this to select a filename to export to"
+msgstr "Use isto para seleccionar o nome do ficheiro para onde exportar"
+
+#: dialogs/kexportdlg.cpp:77 dialogs/kimportdlg.cpp:78
+#: dialogs/settings/ksettingsonlinequotes.cpp:64
+#: widgets/kmymoneyonlinequoteconfig.cpp:64
+msgid "&New..."
+msgstr "&Novo..."
+
+#: dialogs/kexportdlg.cpp:79 dialogs/kimportdlg.cpp:80
+#: dialogs/mymoneyqifprofileeditor.cpp:96
+msgid "Create a new profile"
+msgstr "Criar um novo perfil"
+
+#: dialogs/kexportdlg.cpp:80 dialogs/kimportdlg.cpp:81
+msgid "Use this to open the profile editor"
+msgstr "Use isto para abrir o editor de perfil"
+
+#: dialogs/keditloanwizard.cpp:56
+msgid "Edit loan wizard"
+msgstr "Assistente para edição de financiamento"
+
+#: dialogs/keditloanwizard.cpp:58
+msgid ""
+"Please enter the date from which on the following changes will be effective. "
+"The date entered must be later than the opening date of this account (%1), "
+"but must not be in the future. The default will be today."
+msgstr ""
+"Por favor, introduza a data a partir da qual as seguintes mudanças serão "
+"efectivas. A data introduzida deve ser posterior à data de abertura desta "
+"conta (%1), mas não pode ser no futuro. Por omissão, será hoje."
+
+#: dialogs/keditloanwizard.cpp:76
+msgid ""
+"Note: you will not be able to modify this account today, because the opening "
+"date \"%1\" is in the future. Please revisit this dialog when the time has "
+"come."
+msgstr ""
+"Nota: Não poderá modificar esta conta hoje, porque a data de abertura \"%1\" "
+"está no futuro. Por favor, visite novamente este diálogo quando a data "
+"chegar."
+
+#: dialogs/keditloanwizard.cpp:244
+msgid ""
+"Your previous selection was \"%1\". If you select another option, KMyMoney "
+"will dismiss the changes you have just entered. Do you wish to proceed?"
+msgstr ""
+"A sua selecção anterior foi \"%1\". Se seleccionar outra opção, o KMyMoney "
+"irá descartar as mudanças que acabou de entrar. Deseja prosseguir?"
+
+#: dialogs/kcategoryreassigndlg.cpp:81
+msgid ""
+"At least one transaction/schedule still references the category <b>%1</b>. "
+"However, at least one category with the same currency must exist so that the "
+"transactions/schedules can be reassigned."
+msgstr ""
+"Pelo menos uma das transacções/agendamentos ainda se refere à categoria <b>%"
+"1</b>. No entanto, pelo menos uma categoria com a mesma moeda deve existir "
+"de modo que as transacções/agendamentos possam ser re-atribuídos."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid ""
+"This dialog does not allow to create new categories. Please pick a category "
+"from the list."
+msgstr ""
+"Esta janela não permite criar novas categorias. Por favor, seleccione uma "
+"categoria na lista."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid "Category creation"
+msgstr "Criação de categoria"
+
+#: dialogs/kbackupdlg.cpp:61
+msgid "C&hoose..."
+msgstr "E&scolher..."
+
+#: dialogs/kbackupdlg.cpp:63
+msgid "Select mount point"
+msgstr "Selecciona o ponto de montagem"
+
+#: dialogs/kbackupdlg.cpp:64
+msgid "Use this to browse to the mount point."
+msgstr "Use isto para navegar ao ponto de montagem."
+
+#: dialogs/keditscheduledlg.cpp:293
+msgid "Next due date"
+msgstr "Data seguinte de vencimento"
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid ""
+"You have turned on the GPG encryption support. This means, that new files "
+"will be stored encrypted. Existing files will not be encrypted "
+"automatically. To achieve encryption of existing files, please use the "
+"<b>File/Save as...</b> feature and store the file under a different name. "
+"Once confident with the result, feel free to delete the old file and rename "
+"the encrypted one to the old name."
+msgstr ""
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid "GPG encryption activated"
+msgstr "Criptografia GPG activada"
+
+#: dialogs/settings/ksettingshome.cpp:51
+msgid "&Up"
+msgstr "&Subir"
+
+#: dialogs/settings/ksettingshome.cpp:53
+msgid "Move selected item up"
+msgstr "Mover o item seleccionado para cima"
+
+# TODO: Verify acima??
+#: dialogs/settings/ksettingshome.cpp:54
+msgid "Use this to move the selected item up by one position in the list."
+msgstr ""
+"Use isto para mover o item seleccionado uma posição para cima na lista."
+
+#: dialogs/settings/ksettingshome.cpp:55
+msgid "&Down"
+msgstr "&Descer"
+
+#: dialogs/settings/ksettingshome.cpp:57
+msgid "Move selected item down"
+msgstr "Mover o item seleccionado para baixo"
+
+#: dialogs/settings/ksettingshome.cpp:58
+msgid "Use this to move the selected item down by one position in the list."
+msgstr ""
+"Use isto para mover o item seleccionado uma posição para baixo na lista."
+
+#: dialogs/settings/rc.cpp:1
+msgid "Color settings"
+msgstr "Configuração das cores"
+
+#: dialogs/settings/rc.cpp:2
+msgid "Foreground"
+msgstr "Principal"
+
+#: dialogs/settings/rc.cpp:3
+msgid "Text colors"
+msgstr "Cor do texto"
+
+#: dialogs/settings/rc.cpp:4
+msgid "Grid color"
+msgstr "Cor da Grelha"
+
+#: dialogs/settings/rc.cpp:5
+msgid "Erronous transaction"
+msgstr "Transacção incorreta"
+
+#: dialogs/settings/rc.cpp:6
+msgid "Value with missing conversion rate"
+msgstr "Valor sem taxa de conversão"
+
+#: dialogs/settings/rc.cpp:7
+msgid "Negative value"
+msgstr "Valor negativo"
+
+#: dialogs/settings/rc.cpp:8
+msgid "Background"
+msgstr "Fundo"
+
+#: dialogs/settings/rc.cpp:10
+msgid "List background colors"
+msgstr "Lista as cores do fundo"
+
+#: dialogs/settings/rc.cpp:11
+msgid "Normal"
+msgstr "Normal"
+
+#: dialogs/settings/rc.cpp:12
+msgid "Alternate"
+msgstr "Alternar"
+
+#: dialogs/settings/rc.cpp:13
+msgid "Special background colors"
+msgstr "Cores de fundo especiais"
+
+#: dialogs/settings/rc.cpp:14
+msgid "Ledger group separator"
+msgstr "Separador de grupo do registo"
+
+#: dialogs/settings/rc.cpp:15
+msgid "Required field"
+msgstr "Zona necessária"
+
+#: dialogs/settings/rc.cpp:16
+msgid "Imported transaction"
+msgstr "Transacção importada"
+
+#: dialogs/settings/rc.cpp:17
+msgid "Matched transaction"
+msgstr "Transacção correspondida"
+
+#: dialogs/settings/rc.cpp:18
+msgid "Font settings"
+msgstr "Configuração de fonte"
+
+#: dialogs/settings/rc.cpp:19
+msgid "Use system fonts"
+msgstr "Usar fontes do sistema"
+
+#: dialogs/settings/rc.cpp:20
+msgid "Individual font settings"
+msgstr "Configurações de fonte individuais"
+
+#: dialogs/settings/rc.cpp:24
+msgid "Number of Days of Account Cycle:"
+msgstr "Número de Dias do Ciclo de Conta:"
+
+#: dialogs/settings/rc.cpp:26
+msgid "Number of Days to Forecast:"
+msgstr "Número de Dias a Prever:"
+
+#: dialogs/settings/rc.cpp:27
+msgid "Forecast Method"
+msgstr "Método de Previsão"
+
+#: dialogs/settings/rc.cpp:28
+msgid "Scheduled and Future Transactions"
+msgstr "Transacções Agendadas e Futuras"
+
+#: dialogs/settings/rc.cpp:29
+msgid "History-based"
+msgstr "Baseado no Histórico"
+
+#: dialogs/settings/rc.cpp:30
+msgid "History-based settings"
+msgstr "Configuração do Baseado no Histórico"
+
+#: dialogs/settings/rc.cpp:31
+msgid "Number of Cycles to use in Forecast:"
+msgstr "Número de Ciclos a utilizar na Previsão:"
+
+#: dialogs/settings/rc.cpp:36
+msgid "General Settings"
+msgstr "Configurações Gerais"
+
+#: dialogs/settings/rc.cpp:37
+msgid "Global"
+msgstr "Global"
+
+#: dialogs/settings/rc.cpp:38
+msgid "Startup page options"
+msgstr "Opções da página inicial"
+
+# TODO: Verify 'home'
+#: dialogs/settings/rc.cpp:39
+msgid "Start with homepage"
+msgstr "Iniciar com a página de inicio"
+
+#: dialogs/settings/rc.cpp:40
+msgid "Start with last selected view"
+msgstr "Iniciar com a última vista aberta"
+
+#: dialogs/settings/rc.cpp:41
+msgid "Precision settings"
+msgstr "Configuração da precisão"
+
+#: dialogs/settings/rc.cpp:42
+msgid "Price precision"
+msgstr "Precisão do preço"
+
+#: dialogs/settings/rc.cpp:43
+msgid "digits"
+msgstr "dígitos"
+
+#: dialogs/settings/rc.cpp:44
+msgid "Autosave options"
+msgstr "Opções de Gravação Automática"
+
+#: dialogs/settings/rc.cpp:45
+msgid "Autosave periodically"
+msgstr "Gravação Automática periódica"
+
+#: dialogs/settings/rc.cpp:46
+msgid "minutes"
+msgstr "minutos"
+
+#: dialogs/settings/rc.cpp:47
+msgid "Fiscal Year"
+msgstr "Ano Fiscal"
+
+#: dialogs/settings/rc.cpp:48
+msgid "Your fiscal year starts on"
+msgstr "O ano fiscal começa em"
+
+#: dialogs/settings/rc.cpp:49
+msgid "January"
+msgstr "Janeiro"
+
+#: dialogs/settings/rc.cpp:50
+msgid "February"
+msgstr "Fevereiro"
+
+#: dialogs/settings/rc.cpp:51
+msgid "March"
+msgstr "Março"
+
+#: dialogs/settings/rc.cpp:52
+msgid "April"
+msgstr "Abril"
+
+#: dialogs/settings/rc.cpp:53
+msgid "May"
+msgstr "Maio"
+
+#: dialogs/settings/rc.cpp:54
+msgid "June"
+msgstr "Junho"
+
+#: dialogs/settings/rc.cpp:55
+msgid "July"
+msgstr "Julho"
+
+#: dialogs/settings/rc.cpp:56
+msgid "August"
+msgstr "Agosto"
+
+#: dialogs/settings/rc.cpp:57
+msgid "September"
+msgstr "Setembro"
+
+#: dialogs/settings/rc.cpp:58
+msgid "October"
+msgstr "Outubro"
+
+#: dialogs/settings/rc.cpp:59
+msgid "November"
+msgstr "Novembro"
+
+#: dialogs/settings/rc.cpp:60
+msgid "December"
+msgstr "Dezembro"
+
+#: dialogs/settings/rc.cpp:61
+msgid "Views"
+msgstr "Vistas"
+
+#: dialogs/settings/rc.cpp:62
+msgid "Synchronize account selection of ledger and investment view"
+msgstr "Sincronizar conta selection de e"
+
+#: dialogs/settings/rc.cpp:63
+msgid ""
+"Check the views you want to enable, uncheck those you want to hide, because "
+"you don't need the functionality."
+msgstr ""
+"Selecione as visões que deseja ativar, desative as que deseja ocultar, "
+"porque você não precisa desta funcionalidade."
+
+#: dialogs/settings/rc.cpp:64
+msgid "Icon size of navigation bar"
+msgstr "Tamanho do ícone da barra de navegação"
+
+#: dialogs/settings/rc.cpp:65
+msgid "Micro (16px)"
+msgstr "Micro (16px)"
+
+#: dialogs/settings/rc.cpp:66
+msgid "Small (32px)"
+msgstr "Pequeno (32px)"
+
+#: dialogs/settings/rc.cpp:67
+msgid "Normal (48px)"
+msgstr "Normal (48px)"
+
+#: dialogs/settings/rc.cpp:68
+msgid "Large (64px)"
+msgstr "Grande (64px)"
+
+#: dialogs/settings/rc.cpp:69
+msgid "Show title bar on each page"
+msgstr "Mostrar a barra de título em cada página"
+
+#: dialogs/rc.cpp:835 dialogs/settings/rc.cpp:70
+msgid "Filter"
+msgstr "Filtro"
+
+#: dialogs/settings/rc.cpp:71
+msgid "Accounts / Categories"
+msgstr "Contas / Categorias"
+
+#: dialogs/settings/rc.cpp:72
+msgid "Don't show unused categories"
+msgstr "Não mostrar categorias não usadas"
+
+#: dialogs/settings/rc.cpp:73
+msgid ""
+"This option hides all categories in the categories view that are not used in "
+"at least a single transaction. They are still shown in the category "
+"selection lists."
+msgstr "Este/Esta all em não em nos a single em categoria selection listas."
+
+#: dialogs/settings/rc.cpp:74
+msgid "Don't show closed accounts"
+msgstr "Não mostrar as contas fechadas"
+
+#: dialogs/settings/rc.cpp:75
+msgid ""
+"This option hides all accounts that have been closed by the user in views "
+"and selection lists.\n"
+"\n"
+"You can use <b>View/Show all accounts</b> to temporarily show hidden "
+"accounts in the views."
+msgstr ""
+"Esta opção oculta todas as contas que foram fechadas pelo usuário nas visões "
+"e listas de seleção.\n"
+"\n"
+"Você pode usar <b>Ver/Mostrar todas as contas</b> para mostrar "
+"temporariamente todas as contas ocultas nas visões."
+
+#: dialogs/settings/rc.cpp:76
+#, fuzzy
+msgid "Show equity accounts"
+msgstr "Contas de equidade"
+
+#: dialogs/rc.cpp:332 dialogs/settings/rc.cpp:77 widgets/rc.cpp:160
+msgid "Schedules"
+msgstr "Eventos Recorrentes"
+
+#: dialogs/settings/rc.cpp:78
+msgid "Don't show finished schedules"
+msgstr "Não mostrar agendamentos encerrados"
+
+#: dialogs/settings/rc.cpp:79
+msgid "This option hides all finished schedules in the schedules view."
+msgstr ""
+"Esta opção oculta todos os agendamentos encerrados na visão de agendamentos."
+
+#: dialogs/settings/rc.cpp:81
+msgid "Don't show transactions prior to"
+msgstr "Não mostrar transacções anteriores a"
+
+#: dialogs/settings/rc.cpp:82
+msgid "Don't show reconciled transactions"
+msgstr "Não mostrar as transacções reconciliadas"
+
+#: dialogs/settings/rc.cpp:83
+msgid "This option hides all reconciled transactions in the ledger view."
+msgstr ""
+"Esta opção esconde todas as transacções reconciliadas no livro de registos."
+
+#: dialogs/settings/rc.cpp:84 widgets/rc.cpp:22
+msgid "GPG encryption settings"
+msgstr "Configuração de criptografia GPG"
+
+#: dialogs/settings/rc.cpp:85
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Access to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>additional recovery encryption</i> is only accessible, if the "
+"necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id "
+"0x8AFDDC8E is found in your keyring."
+msgstr ""
+"Esta página permite configurar os parâmetros para criptografia de ficheiro "
+"dos seus dados do <b>KMyMoney</b> baseada no <b>GPG</b>.<p>\n"
+"O acesso a estas configurações está desabilitado se o <b>GPG</b> não puder "
+"ser detectado em seu sistema. Neste caso, certifique-se de que o <b>GPG</b> "
+"está funcionando corretamente para o usuário atual.<p>\n"
+"O grupo <i>Criptografia de segurança</i> só está acessível se a chave para o "
+"<b>kmymoney-recover@users.sourceforge.net</b> com ID 0x8AFDDC8E foi "
+"encontrada em seu chaveiro."
+
+#: dialogs/settings/rc.cpp:86 widgets/rc.cpp:24
+msgid "Use GPG encryption"
+msgstr "Usar criptografia GPG"
+
+#: dialogs/settings/rc.cpp:87
+msgid "GPG encryption"
+msgstr "Criptografia GPG"
+
+#: dialogs/settings/rc.cpp:88
+msgid "Your key"
+msgstr "A sua chave"
+
+#: dialogs/settings/rc.cpp:89
+msgid ""
+"This combo box lists all the secret keys you have in your keyring. Select "
+"the one you want to use for encryption when saving to a file."
+msgstr ""
+"Esta lista contém todas as chaves secretas do seu chaveiro. Escolha a chave "
+"que deseja utilizar para criptografar os ficheiros gravados."
+
+#: dialogs/settings/rc.cpp:90
+msgid "Additonal keys"
+msgstr "Chaves adicionais"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:50 dialogs/settings/rc.cpp:91
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading 0x."
+msgstr ""
+"Insira o ID da chave que deseja usar para criptografia de dados. Isto pode "
+"ser tanto um endereço de e-mail ou uma chave hexadecimal da ID. No caso da "
+"chave da ID, não esqueça de precedê-la com o 0x."
+
+#: dialogs/settings/rc.cpp:92 widgets/rc.cpp:28
+msgid ""
+"This symbol denotes, if the key for the given user id has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"Este símbolo indica se a chave para a id de usuário fornecida foi encontrada "
+"em seu chaveiro. Está verde quando foi encontrada e preto no caso contrário."
+
+#: dialogs/kgpgkeyselectiondlg.cpp:61 dialogs/settings/rc.cpp:93
+msgid "Keys for all of the above user ids found"
+msgstr "Chaves para todos os ids do utilizador acima encontrados"
+
+#: dialogs/settings/rc.cpp:94 widgets/rc.cpp:31
+msgid ""
+"This symbol denotes, if the KMyMoney recovery key has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"Este símbolo indica se a chave de recuperação do KMyMoney foi encontrada em "
+"seu chaveiro. Está verde quando foi encontrada e preto no caso contrário."
+
+#: dialogs/settings/rc.cpp:95
+msgid "Recover Key available in keyring"
+msgstr "Chave de Recuperação encontrada no chaveiro"
+
+#: dialogs/settings/rc.cpp:96
+msgid "Also encrypt with KMyMoney's recover key"
+msgstr "Também criptografar com a chave de recuperação do KMyMoney"
+
+#: dialogs/settings/rc.cpp:97
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out.."
+msgstr ""
+"Você pode especificar para criptografar os dados com a chave de recuperação "
+"do KMyMoney. Somente os programadores do núcleo do KMyMoney possuem a "
+"respectiva chave privada necessária para decriptografar os referidos dados."
+"<p>\n"
+"\n"
+"Este mecanismo é fornecido para o caso de que você tenha perdido sua chave e "
+"não possa aceder mais seus dados. Com esta opção activada, os programadores "
+"do KMyMoney podem decriptografar os dados e fornecê-los para você em uma "
+"forma legível. Por favor, esteja preparado para responder algumas questões "
+"referentes o conteúdo de seus dados antes que nós possamos enviá-los para "
+"você."
+
+# TODO: Verify
+#: dialogs/settings/rc.cpp:98
+msgid "Homepage Settings"
+msgstr "Configuração da página principal"
+
+#: dialogs/settings/rc.cpp:99
+msgid "Up"
+msgstr "Subir"
+
+#: dialogs/settings/rc.cpp:100
+msgid "Down"
+msgstr "Descer"
+
+#: dialogs/settings/rc.cpp:101
+msgid ""
+"Selected entries are shown on the home page of the application.<p>\n"
+"Use the buttons and checkboxes to customize the layout of the home page."
+msgstr ""
+"Entradas selecionadas serão mostradas na página inicial do aplicativo.<p>\n"
+"Use os botões e caixas para personalizar a aparência da página inicial."
+
+#: dialogs/settings/rc.cpp:102
+msgid "Homepage/Summary page font scaling"
+msgstr "Escalonamento de fonte na Página Inicial/Resumo"
+
+#: dialogs/settings/rc.cpp:103
+msgid "Percentage of default font size:"
+msgstr "Percentagem do tamanho da fonte padrão:"
+
+#: dialogs/settings/rc.cpp:104
+msgid ""
+"Remember font size when leaving the program if manually changed with mouse-"
+"wheel"
+msgstr ""
+"Recordar tamanho de fonte ao sair do programa se ele for alterado "
+"manualmente com a roda do mouse"
+
+#: dialogs/settings/rc.cpp:105
+msgid "Information display"
+msgstr "Informação mostrada"
+
+#: dialogs/settings/rc.cpp:106
+msgid "Show Account Limit Information"
+msgstr "Mostra o limite da conta"
+
+#: dialogs/settings/rc.cpp:110 widgets/rc.cpp:47
+msgid ""
+"<i>Enter regular expressions which can be used to parse the data returned "
+"from the URL entered above. The symbol, price, and date must be found in "
+"the quote data to be usable. You may also try the KMyMoney user's "
+"mailinglist at <a href=\"mailto:kmymoney2-user@lists.sourceforge.net"
+"\">kmymoney2-user@lists.sourceforge.net</a> to find what settings work for "
+"other users in your country.</i>"
+msgstr ""
+"<i>Insira expressões regulares que podem ser usadas para analisar os dados "
+"obtidos da URL inserida acima. O símbolo, preço e data devem ser "
+"encontrados nos dados de cotação para que els possam ser usados. Você pode "
+"também acessar a lista de usuários do KMyMoney em <a href=\"mailto:kmymoney2-"
+"user@lists.sourceforge.net\">kmymoney2-user@lists.sourceforge.net</a> para "
+"encontrar que configurações funcionam para outros usuários do seu país.</i>"
+
+#: dialogs/settings/rc.cpp:113 widgets/rc.cpp:38
+msgid "Regular Expression to extract the symbol from the downloaded data"
+msgstr "Expreção Regular para extrair o símbolo dos dados obtidos"
+
+#: dialogs/settings/rc.cpp:114 widgets/rc.cpp:39
+msgid "Regular Expression to extract the price from the downloaded data"
+msgstr "Expressão Regular para extrair o preço dos dados obtidos"
+
+#: dialogs/settings/rc.cpp:115 widgets/rc.cpp:41
+msgid "URL to be used to download the quote"
+msgstr "URL a ser usada para obter a cotação"
+
+#: dialogs/settings/rc.cpp:116 widgets/rc.cpp:42
+msgid ""
+"Enter the URL from which stock quotes will be fetched. <b>%1</b> will be "
+"replaced with the symbol for the security being quoted. For currency "
+"conversions, <b>%2</b> will be replaced with the currency to be quoted and "
+"<b>%1</b> with the currency the quote is based on."
+msgstr ""
+"Insira a URL a partir da qual as cotações das acções serão obtidas. <b>%1</"
+"b> será substituído com o símbolo para a acção sendo cotada. Para conversões "
+"de moeda, <b>%2</b> será substituído com a moeda a ser cotada e <b>%1</b> "
+"com a moeda cuja cotação se baseia."
+
+#: dialogs/settings/rc.cpp:118 dialogs/settings/rc.cpp:121 widgets/rc.cpp:40
+#: widgets/rc.cpp:44
+msgid "Regular Expression to extract the date from the downloaded data"
+msgstr "Expressão Regular para extrair a data dos dados obtidos"
+
+#: dialogs/rc.cpp:807 dialogs/settings/rc.cpp:119 widgets/rc.cpp:45
+msgid "Date Format"
+msgstr "Formato de Data"
+
+#: dialogs/settings/rc.cpp:122
+msgid "Skip HTML stripping"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:123
+msgid ""
+"<p>For easier processing of the data returned by the online source, KMyMoney "
+"usually strips unused parts before it is parsed with the regular "
+"expressions. If matching of the fields relies on those items, then use this "
+"option to turn stripping off.</p>\n"
+"\n"
+"<p>The following items are usually removed by stripping:\n"
+"\n"
+"<ul>\n"
+"<li>HTML tags such as <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded characters such as <b>&amp;nbsp;</b></li>\n"
+"<li>duplicate whitespace</li>\n"
+"</ul>\n"
+"</p>"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:127
+msgid "Register settings"
+msgstr "Configurações do registo"
+
+#: dialogs/settings/rc.cpp:128
+msgid "Display"
+msgstr "Visualização"
+
+#: dialogs/settings/rc.cpp:131
+msgid ""
+"Using the ledger lens shows the details for the transaction that has focus "
+"in the ledger. Usually, when using the transaction form, only a one line "
+"summary is displayed for each transaction as the details are shown in the "
+"form."
+msgstr ""
+"Usar a lupa do livro de registro mostra todos os detalhes para a transacção "
+"que possui o foco no livro de registro. Normalmente, ao usar o formulário de "
+"transacção, somente uma linha resumo é exibida para cada transacção sendo os "
+"detalhes mostrados no formulário."
+
+#: dialogs/settings/rc.cpp:133
+msgid "Always show a No. field"
+msgstr "Sempre mostrar um campo Nr."
+
+#: dialogs/settings/rc.cpp:134
+msgid "Show group header between transactions"
+msgstr "Mostrar o cabeçalho de grupo entre as transacções"
+
+#: dialogs/settings/rc.cpp:135
+msgid ""
+"Draws a larger header above each group of transaction. The grouping depends "
+"on the current sort order."
+msgstr ""
+"Desenha um grande cabeçalho acima de cada grupo da transacção. O agrupamento "
+"depende da ordenação atual."
+
+#: dialogs/settings/rc.cpp:136
+msgid "Show header for the previous and current fiscal year"
+msgstr "Mostrar o cabeçalho para os anos fiscais"
+
+#: dialogs/settings/rc.cpp:137
+msgid "Sorting"
+msgstr "Ordenação"
+
+#: dialogs/settings/rc.cpp:138
+msgid "Normal view"
+msgstr "Visão normal"
+
+#: dialogs/settings/rc.cpp:139
+msgid "Reconciliation view"
+msgstr "Visão de reconciliação"
+
+#: dialogs/settings/rc.cpp:140
+msgid "Search view"
+msgstr "Visão de busca"
+
+#: dialogs/settings/rc.cpp:141
+msgid ""
+"Use the <i>left</i> and <i>right</i> buttons to add and remove sort options. "
+"Use the <i>up</i> and <i>down</i> buttons to modify the sort order. Double-"
+"Click a selected entry to toggle the sort order between <i>ascending</i> and "
+"<i>descending</i>."
+msgstr ""
+"Usar os botões <i> esquerda</i> e <i> direita</i> para adicionar e remover "
+"opções de ordenação. Usar os botões <i>acima</i> e <i>abaixo</i> para "
+"modificar o ordem de ordenação. Um clique-duplo em uma entrada seleccionada "
+"alternará a ordenação entre <i>ascendente</i> e <i> descendente</i>."
+
+#: dialogs/settings/rc.cpp:142
+msgid "Data entry"
+msgstr "Entrada de dados"
+
+#: dialogs/settings/rc.cpp:146
+msgid "Use Enter to move between fields"
+msgstr "Use Enter para mover-se entre os campos"
+
+#: dialogs/settings/rc.cpp:147
+msgid "Match names from start"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:148
+msgid ""
+"Mark this option, if you always want to match names e.g. for payees from the "
+"start. If unset, any substring is matched."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:149
+msgid "Default reconciliation state"
+msgstr "Estado por omissão da reconciliação"
+
+#: dialogs/rc.cpp:227 dialogs/settings/rc.cpp:150
+#: widgets/kmymoneycombo.cpp:348 widgets/registersearchline.cpp:84
+msgid "Not reconciled"
+msgstr "Não reconciliada"
+
+#: dialogs/rc.cpp:228 dialogs/settings/rc.cpp:151
+#: widgets/kmymoneycombo.cpp:347 widgets/registersearchline.cpp:85
+msgid "Cleared"
+msgstr "Compensada"
+
+#: dialogs/settings/rc.cpp:153
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation "
+"of an account"
+msgstr ""
+"Estado por omissão da reconciliação para as transacções inseridas durante a "
+"reconciliação duma conta"
+
+#: dialogs/settings/rc.cpp:154
+msgid "Autofill"
+msgstr "Preencher automaticamente"
+
+#: dialogs/settings/rc.cpp:155
+msgid "No Autofill"
+msgstr "Não preencher automaticamente"
+
+#: dialogs/settings/rc.cpp:156
+msgid "Don't do autofill of transaction data at all."
+msgstr "Nunca preencher automaticamente os dados."
+
+#: dialogs/settings/rc.cpp:157
+msgid "Same transaction if amount differs less than"
+msgstr "Mesma transacção se o valor diferir por menos de"
+
+#: dialogs/settings/rc.cpp:158
+msgid ""
+"Collect all transactions for the given payee. Treat all transactions that "
+"refer to the same category and have an amount with +/- X % as identical. If "
+"more than one transaction is found, a list of them is presented to the "
+"user.\n"
+"\n"
+"Selecting 0% will list all transactions."
+msgstr ""
+"Colecta todas as transacções para o beneficiário. Trata todas as transacções "
+"que se referem à mesma categoria e de valor +/- X % como idênticas. Se mais "
+"de uma transacção for encontrada, uma lista delas é proposta.\n"
+"\n"
+"Escolhendo 0% vai listar todas as transacções ."
+
+#: dialogs/settings/rc.cpp:159
+msgid ""
+"Two transactions are usually treated identical for autofill, if they refer "
+"the same accounts. They are treated as different transactions though, when "
+"their amount varies by more than the percentage given here."
+msgstr ""
+"Duas transacções normalmente são consideradas idêntica para auto-"
+"preenchimento se elas referem-se à mesma conta. Elas são tratadas como "
+"transacções diferentes quando seus valores variem mais do que a porcentagem "
+"fornecida aqui."
+
+#: dialogs/settings/rc.cpp:160
+msgid ""
+"_: Same transaction if amount differs less than percent.\n"
+"percent."
+msgstr "percento."
+
+#: dialogs/settings/rc.cpp:161
+msgid "with previously most often used transaction for the payee"
+msgstr "com a transacção anterior mais atribuída ao beneficiário"
+
+#: dialogs/settings/rc.cpp:162
+msgid ""
+"The data of the last transaction assigned to the category used most often "
+"for this payee is autofilled into the transaction editor."
+msgstr ""
+"Os dados da última transacção atribuída à categoria mais utilizada para o "
+"beneficiário são preenchidos automaticamente no editor de transacções."
+
+#: dialogs/settings/rc.cpp:164
+msgid "Match transactions within days"
+msgstr "Corresponder as transacções por dias"
+
+#: dialogs/settings/rc.cpp:165
+msgid ""
+"Search for matching transactions within the range of the posting date of the "
+"imported transaction +/- the number of given days."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:166
+msgid "Ask for a new payee's default category"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:167
+msgid ""
+"Whenever a new payee is detected during import of a statement, the user will "
+"be asked to assign a default category for this user when this option is "
+"selected."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:168
+msgid "Schedule Settings"
+msgstr "Configurações de Agendamento"
+
+#: dialogs/settings/rc.cpp:169
+msgid "Startup options"
+msgstr "Opções de inicialização"
+
+#: dialogs/settings/rc.cpp:170
+msgid "Check schedules on startup"
+msgstr "Verificar agendamentos na inicialização"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:60
+#: widgets/kmymoneyonlinequoteconfig.cpp:60
+msgid "Delete the selected source entry"
+msgstr "Remover a entrada de fonte seleccionada"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:61
+#: widgets/kmymoneyonlinequoteconfig.cpp:61
+msgid "Use this to delete the selected online source entry"
+msgstr ""
+"Use isto para remover a entrada de fonte de cotação em linha seleccionada"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:66
+#: widgets/kmymoneyonlinequoteconfig.cpp:66
+msgid "Create a new source entry for online quotes"
+msgstr "Criar uma nova entrada de fonte para cotações em linha"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:67
+#: widgets/kmymoneyonlinequoteconfig.cpp:67
+msgid "Use this to create a new entry for online quotes"
+msgstr "Use isto para criar uma nova entrada para cotações em linha"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:107
+#: dialogs/settings/ksettingsonlinequotes.cpp:190
+#: dialogs/settings/ksettingsonlinequotes.cpp:193
+#: dialogs/settings/ksettingsonlinequotes.cpp:216
+#: widgets/kmymoneyonlinequoteconfig.cpp:107
+#: widgets/kmymoneyonlinequoteconfig.cpp:185
+#: widgets/kmymoneyonlinequoteconfig.cpp:188
+#: widgets/kmymoneyonlinequoteconfig.cpp:211
+msgid "New Quote Source"
+msgstr "Nova Fonte de Cotação"
+
+# TODO: Verify
+#: dialogs/ksplittransactiondlg.cpp:77 dialogs/rc.cpp:788
+msgid "Clear &All"
+msgstr "Limpar &Tudo"
+
+#: dialogs/ksplittransactiondlg.cpp:79
+msgid "Clear all splits"
+msgstr "Limpar todas divisões"
+
+#: dialogs/ksplittransactiondlg.cpp:80
+msgid "Use this to clear all splits of this transaction"
+msgstr "Use isto para limpar todas divisões desta transacção"
+
+#: dialogs/ksplittransactiondlg.cpp:84
+msgid "&Merge"
+msgstr "Co&mbinar"
+
+#: dialogs/ksplittransactiondlg.cpp:183
+msgid ""
+"The total amount of this transaction is %1 while the sum of the splits is %"
+"2. The remaining %3 are unassigned."
+msgstr ""
+"O montante total desta transacção é %1 enquanto a soma das transacções é %2. "
+"Os %3 restantes estão por atribuir."
+
+#: dialogs/ksplittransactiondlg.cpp:191
+#, c-format
+msgid "Change &total amount of transaction to %1."
+msgstr "Modificar a quantia &total da transacção para %1."
+
+#: dialogs/ksplittransactiondlg.cpp:194
+msgid "&Distribute difference of %1 among all splits."
+msgstr "&Distribuir a diferença de %1 entre todas as divisões."
+
+#: dialogs/ksplittransactiondlg.cpp:203
+#, c-format
+msgid "&Leave total amount of transaction at %1."
+msgstr "Deixar o va&lor total da transacção em %1."
+
+#: dialogs/ksplittransactiondlg.cpp:205
+msgid "&Leave %1 unassigned."
+msgstr "D&eixar %1 sem atribuição."
+
+#: dialogs/ksplittransactiondlg.cpp:275
+msgid ""
+"You are about to delete all splits of this transaction. Do you really want "
+"to continue?"
+msgstr ""
+"Está prestes a apagar todas as divisões desta transacção. Deseja realmente "
+"continuar?"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:97
+msgid "Use this to create a new QIF import/export profile"
+msgstr "Use isto para criar um novo perfil de importação/exportação QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:148
+#: dialogs/mymoneyqifprofileeditor.cpp:403 dialogs/rc.cpp:797
+msgid "QIF Profile Editor"
+msgstr "Editor de Perfil QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:150
+msgid "QIF Profile Selector"
+msgstr "Seletor de Perfil QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:236
+msgid "The default QIF profile"
+msgstr "O perfil QIF padrão"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:404
+#: dialogs/mymoneyqifprofileeditor.cpp:417
+msgid "Enter new profile name"
+msgstr "Introduza o nome do novo perfil"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:436
+msgid "Do you really want to delete profile '%1'?"
+msgstr "Deseja realmente apagar o perfil '%1'?"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:38
+msgid "Select additional keys"
+msgstr "Seleccionar as chaves adicionais"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:48 widgets/rc.cpp:25
+msgid "User identification"
+msgstr "Identificação do usuário"
+
+#: dialogs/kendingbalancedlg.cpp:71
+msgid ""
+"Please enter the following fields with the information as you find them on "
+"your statement. Make sure to enter all values in <b>%1</b>."
+msgstr ""
+
+#: dialogs/kendingbalancedlg.cpp:124
+#, c-format
+msgid "Last reconciled statement: %1"
+msgstr "Último extracto reconciliado: %1"
+
+#: dialogs/kendingbalancedlg.cpp:437 dialogs/kendingbalancedlg.cpp:577
+#: dialogs/rc.cpp:137
+msgid "Adjustment transaction"
+msgstr "Transacção de ajuste"
+
+#: dialogs/kendingbalancedlg.cpp:510
+msgid ""
+"KMyMoney has calculated the following amounts for interest and amortization "
+"according to recorded payments between %1 and %2."
+msgstr ""
+"O KMyMoney calculou os seguintes montantes para juros e amortização de "
+"acordo com os pagamentos registrados entre %1 e %2."
+
+#: dialogs/kbalancechartdlg.cpp:59
+#, c-format
+msgid "Balance of %1"
+msgstr "Balanceamento de %1"
+
+#: dialogs/kbalancechartdlg.cpp:70
+msgid "%1 Balance History"
+msgstr "%1 Balanceamento Histórico"
+
+#: dialogs/kmymoneysplittable.cpp:98
+msgid "Split Options"
+msgstr "Opções de Parcela"
+
+#: dialogs/kmymoneysplittable.cpp:99 dialogs/rc.cpp:731
+#: widgets/kmymoneypriceview.cpp:149
+msgid "Edit..."
+msgstr "Editar ..."
+
+#: dialogs/kmymoneysplittable.cpp:100
+msgid "Duplicate"
+msgstr "Duplicar"
+
+#: dialogs/kmymoneysplittable.cpp:102
+msgid "Delete ..."
+msgstr "Apagar ..."
+
+#: dialogs/kmymoneysplittable.cpp:275
+msgid ""
+"_: Duplicate split\n"
+"CTRL+c"
+msgstr "CTRL+c"
+
+# TODO: Verify (calculada?)
+#: dialogs/kmymoneysplittable.cpp:562
+msgid "will be calculated"
+msgstr "será calculado"
+
+#: dialogs/kmymoneysplittable.cpp:648
+msgid ""
+"You are about to delete the selected split. Do you really want to continue?"
+msgstr ""
+"Você está prestes a remover a parcela seleccionada. Você deseja realmente "
+"continuar?"
+
+#: dialogs/rc.cpp:1
+msgid "Account selection"
+msgstr "Selecção de conta"
+
+# Verify: Conta destino seria melhor?
+#: dialogs/rc.cpp:3
+msgid "Account to import to"
+msgstr "Conta para a qual importar"
+
+#: dialogs/rc.cpp:6 dialogs/rc.cpp:170 widgets/rc.cpp:169
+msgid "Skip"
+msgstr "Saltar"
+
+# TODO: Verify
+#: dialogs/rc.cpp:8
+msgid ""
+"Use this dialog to backup your data. \n"
+"\n"
+"Please make sure you have a disk inserted and that the drive is ready. Then "
+"choose the mount point from either the Choose button or by entering the path "
+"in the available box.\n"
+"\n"
+"Click OK to perform the backup. If your system does not use an automounter, "
+"make sure you mark the checkbox below to \"mount this directory before "
+"backing up.\""
+msgstr ""
+"Use este diálogo para fazer uma cópia de segurança dos seus dados.\n"
+"\n"
+"Por favor, certifique-se de que você possui um disquete inserido e que o "
+"leitor está pronto. Então, escolha o ponto de montagem através do botão "
+"Escolher ou inserindo o caminho na caixa disponível.\n"
+"\n"
+"Clique em OK para realizar a cópia de segurança. Se o seu sistema não usa um "
+"montador automático, habilite a opção \"montar este diretório antes de "
+"realizar a cópia de segurança.\""
+
+#: dialogs/rc.cpp:9
+msgid "Device options"
+msgstr "Opções de dispositivo"
+
+#: dialogs/rc.cpp:10
+msgid ""
+"_: This is the mount point\n"
+"Mount Point:"
+msgstr "Ponto de Montagem:"
+
+#: dialogs/rc.cpp:11
+msgid "Choose..."
+msgstr "Escolher..."
+
+#: dialogs/rc.cpp:12
+msgid "Mount this directory before backing up."
+msgstr "Montar esta pasta antes de fazer a cópia de segurança."
+
+#: dialogs/rc.cpp:15
+msgid "Reassign categories"
+msgstr "Reatribuir as categorias"
+
+#: dialogs/rc.cpp:16
+msgid ""
+"The transactions, schedules and budgets associated with the selected "
+"category need to be re-assigned to a different category before the selected "
+"category can be deleted. Please select a category from the list below."
+msgstr ""
+"As transacções, agendamentos e orçamentos associados com a categoria "
+"seleccionada precisam ser re-atribuídas antes que a categoria seleccionada "
+"possa ser removida. Por favor, seleccione uma categoria na lista abaixo."
+
+#: dialogs/rc.cpp:17
+msgid "Available categories:"
+msgstr "Categorias disponíveis:"
+
+#: dialogs/rc.cpp:21
+msgid ""
+"Please choose the type of import you wish to perform. A simple "
+"explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Por favor, escolha o tipo de importação que deseja fazer. Uma explicação "
+"simples sobre o tipo está disponível na parte inferior da tela e é "
+"actualizada quando selecciona um item na caixa de escolha.\n"
+"\n"
+"Uma vez que tenha escolhido o tipo, por favor pressione o botão OK."
+
+#: dialogs/rc.cpp:23
+msgid "QIF"
+msgstr "QIF"
+
+#: dialogs/rc.cpp:24
+msgid "CSV"
+msgstr "CSV"
+
+#: dialogs/rc.cpp:25
+msgid "Some descripton"
+msgstr "Alguma descrição"
+
+#: dialogs/rc.cpp:28
+msgid "Confirm Manual Enter"
+msgstr "Confirmar Entrada Manual"
+
+#: dialogs/rc.cpp:29
+msgid "The following changes have been made to the transaction data:"
+msgstr "As seguintes modificações foram feitas aos dados da transacção:"
+
+#: dialogs/rc.cpp:30
+msgid "Please choose what you wish to do with the above changes"
+msgstr "Por favor, escolha o que deseja fazer com as mudanças acima"
+
+#: dialogs/rc.cpp:31
+msgid ""
+"Discard the changes and enter the original transaction into the register."
+msgstr "Descartar as mudanças e introduzir a transacção original no registo."
+
+#: dialogs/rc.cpp:32
+msgid "Enter these new values this one time, for this occurence only."
+msgstr ""
+"Introduzir estes novos valores desta vez, para esta ocorrência somente."
+
+#: dialogs/rc.cpp:33
+msgid "Set all further occurences in this schedule to be these values."
+msgstr "Usar estes valores para todas as demais ocorrências deste evento."
+
+#: dialogs/rc.cpp:36
+msgid "CSV Dialog"
+msgstr "CSV"
+
+#: dialogs/rc.cpp:37
+msgid ""
+"CSV Dialog. Choose a file and then click on Run. You can view your "
+"progress at\n"
+"the bottom of the screen.\n"
+"\n"
+"You can cancel the process at any time by clicking on the Cancel button."
+msgstr ""
+"Diálogo CSV. Escolha um ficheiro e então clique em Proceder. Pode "
+"visualizar o seu progresso na parte inferior da janela.\n"
+"\n"
+"Pode cancelar o processo a qualquer momento clicando no botão Cancelar."
+
+#: dialogs/rc.cpp:38
+msgid "Choose the csv file:"
+msgstr "Escolha o ficheiro csv:"
+
+#: dialogs/rc.cpp:39
+msgid "Browse"
+msgstr "Navegar"
+
+#: dialogs/rc.cpp:40
+msgid "Between These Dates"
+msgstr "Entre estas Datas"
+
+#: dialogs/rc.cpp:41 dialogs/rc.cpp:196
+msgid "Start on:"
+msgstr "Inicia em:"
+
+#: dialogs/rc.cpp:42 dialogs/rc.cpp:195
+msgid "End on:"
+msgstr "Termina em:"
+
+#: dialogs/rc.cpp:43
+msgid "Run"
+msgstr "Proceder"
+
+#: dialogs/rc.cpp:44
+msgid "Progress Info"
+msgstr "Informações de Progresso"
+
+#: dialogs/rc.cpp:45
+msgid "Processing Account:"
+msgstr "Conta Processada:"
+
+#: dialogs/rc.cpp:47
+msgid "Processing Transaction:"
+msgstr "Transacção Processada:"
+
+#: dialogs/rc.cpp:48
+msgid "0 of 0"
+msgstr "0 de 0"
+
+#: dialogs/rc.cpp:50
+msgid "Exchange Rate/Price Editor"
+msgstr "Editor da Taxa de Câmbio/Preço"
+
+#: dialogs/rc.cpp:55
+msgid "Convert from"
+msgstr "Converter de"
+
+#: dialogs/rc.cpp:58
+msgid "Convert to"
+msgstr "Converter em"
+
+#: dialogs/rc.cpp:61
+msgid "To amount"
+msgstr "Para a quantia"
+
+#: dialogs/rc.cpp:62
+msgid "Exchange rate / Price"
+msgstr "Taxa de câmbio / Preço"
+
+#: dialogs/rc.cpp:64
+msgid ""
+"xx\n"
+"xx"
+msgstr ""
+"xx\n"
+"xx"
+
+#: dialogs/rc.cpp:68
+msgid "Currencies"
+msgstr "Moedas"
+
+#: dialogs/rc.cpp:72
+msgid "real ID"
+msgstr "ID real"
+
+#: dialogs/rc.cpp:73 dialogs/rc.cpp:722
+msgid "ID"
+msgstr "ID"
+
+#: dialogs/rc.cpp:74
+msgid "X"
+msgstr "X"
+
+#: dialogs/rc.cpp:76 dialogs/rc.cpp:459
+msgid "Online Source"
+msgstr "Fonte em linha"
+
+#: dialogs/rc.cpp:78 dialogs/rc.cpp:278 dialogs/rc.cpp:312 dialogs/rc.cpp:684
+msgid "F1"
+msgstr "F1"
+
+#: dialogs/rc.cpp:80
+msgid "If this button is not activated, select the base currency first."
+msgstr ""
+"Se este botão não estiver activado, seleccione a moeda de base primeiro."
+
+#: dialogs/rc.cpp:81
+msgid ""
+"Press this button to close the dialog. If the button is not activated, "
+"select your base currency."
+msgstr ""
+"Pressione este botão para fechar o diálogo. Se o botão não estiver activado, "
+"seleccione sua moeda base."
+
+#: dialogs/rc.cpp:82
+msgid "Edit Equity"
+msgstr "Editar Acção Ordinária"
+
+#: dialogs/rc.cpp:86 dialogs/rc.cpp:410
+msgid "Smallest fraction:"
+msgstr "Menor fração:"
+
+#: dialogs/rc.cpp:87 dialogs/rc.cpp:408 dialogs/rc.cpp:440
+msgid "1 /"
+msgstr "1 /"
+
+#: dialogs/rc.cpp:88 dialogs/rc.cpp:405
+msgid "Investment Type:"
+msgstr "Tipo de Investimento:"
+
+# TODO: Verify
+#: dialogs/rc.cpp:89 dialogs/rc.cpp:404
+msgid "Equity Name:"
+msgstr "Nome do Património:"
+
+# TODO: Verify
+#: dialogs/rc.cpp:90 dialogs/rc.cpp:409
+msgid "Market Symbol:"
+msgstr "Símbolo de Mercado:"
+
+#: dialogs/rc.cpp:91
+msgid "Price History"
+msgstr "Histórico do Preço"
+
+#: dialogs/rc.cpp:97
+#, fuzzy
+msgid "Edit Scheduled transaction"
+msgstr "Inserir a transacção agendada"
+
+#: dialogs/rc.cpp:98
+msgid "Schedule name:"
+msgstr "Nome de agendamento:"
+
+#: dialogs/rc.cpp:99
+msgid "Frequency:"
+msgstr "Frequência:"
+
+#: dialogs/rc.cpp:100
+msgid "Number of selected periods between entries"
+msgstr ""
+
+#: dialogs/rc.cpp:101
+msgid "Payment information"
+msgstr "Informação do pagamento"
+
+#: dialogs/rc.cpp:105 dialogs/rc.cpp:160 dialogs/rc.cpp:247 dialogs/rc.cpp:752
+#: widgets/register.cpp:569
+msgid "C"
+msgstr "C"
+
+#: dialogs/rc.cpp:113
+msgid "Do nothing"
+msgstr "Não fazer nada"
+
+#: dialogs/rc.cpp:116
+msgid "If this schedule occurs on the weekend:"
+msgstr "Se este evento ocorrer no final de semana:"
+
+#: dialogs/rc.cpp:117
+msgid "The amount is an estimate because it varies for each payment"
+msgstr "A quantia é uma estimação porque varia a cada pagamento"
+
+# TODO: Verify
+#: dialogs/rc.cpp:118
+msgid "Enter this schedule into the register automatically when it is due"
+msgstr ""
+"Inscrever este agendamento no registo automaticamente quando estará devido"
+
+#: dialogs/rc.cpp:119
+msgid "This schedule will end at some time"
+msgstr "Este agendamento vai acabar nalgum dia"
+
+#: dialogs/rc.cpp:120
+msgid "Number of transactions remaining:"
+msgstr "Número de transacções remanescentes:"
+
+#: dialogs/rc.cpp:121
+msgid "Date of final transaction:"
+msgstr "Data da transacção final:"
+
+#: dialogs/rc.cpp:125
+msgid "Reconciliation Wizard"
+msgstr "Assistente de Reconciliação"
+
+#: dialogs/rc.cpp:127
+msgid ""
+"Reconciling your account assures, that your recordings match those of your "
+"institution and that there are no mistakes on either side. You should "
+"reconcile your account whenever you receive a statement from your "
+"institution.\n"
+"\n"
+"All relevant information necessary for this process is usually printed on "
+"your statement.\n"
+"\n"
+"On the next page you will verify, that the starting and ending balance are "
+"matching those on your statement. If not, please modify the figures."
+msgstr ""
+"Reconciliar sua conta garante que seus registos correspondem aos de sua "
+"instituição e que não existem erros em ambos os lados. Você deve reconciliar "
+"sua conta sempre que receber um extracto de sua instituição.\n"
+"\n"
+"Todas as informações relevantes necessárias para este processo são "
+"normalmente impressas no seu extracto.\n"
+"\n"
+"Na próxima página você verificará, se o saldo inicial e final correspondem "
+"ao do seu extracto. Caso contrário, por favor ajuste os valores."
+
+#: dialogs/rc.cpp:129
+msgid ""
+"KMyMoney calculates your loan payments automatically. The amounts can "
+"deviate from those calculated by the creditor. Therefore, you possibly have "
+"to adjust amortization, interest and other costs according to your "
+"statement.\n"
+"\n"
+"Please enter the following information found on your statement:"
+msgstr ""
+"O KMyMoney calcula automaticamente os pagamentos do seu financiamento. Os "
+"montantes podem desviar daqueles calculados pelo seu credor. Portanto, "
+"possivelmente terá que ajustar a amortização, os juros e outros custos, de "
+"acordo com o seu extracto.\n"
+"\n"
+"Por favor, introduza as seguintes informações encontradas no seu extracto:"
+
+#: dialogs/rc.cpp:130
+msgid "Ending date of statement"
+msgstr "Data final do extracto"
+
+#: dialogs/rc.cpp:131
+msgid "Starting date of statement"
+msgstr "Data inicial do extracto"
+
+#: dialogs/rc.cpp:132
+msgid "Verify payments"
+msgstr "Verificar pagamentos"
+
+#: dialogs/rc.cpp:133 dialogs/rc.cpp:148 dialogs/rc.cpp:476 dialogs/rc.cpp:477
+#: dialogs/rc.cpp:508 dialogs/rc.cpp:513 dialogs/rc.cpp:518 dialogs/rc.cpp:532
+#: dialogs/rc.cpp:539 dialogs/rc.cpp:540 dialogs/rc.cpp:541 dialogs/rc.cpp:542
+#: dialogs/rc.cpp:543 dialogs/rc.cpp:552 dialogs/rc.cpp:553 dialogs/rc.cpp:554
+#: dialogs/rc.cpp:555 dialogs/rc.cpp:556 dialogs/rc.cpp:565 dialogs/rc.cpp:566
+#: dialogs/rc.cpp:567 dialogs/rc.cpp:568 dialogs/rc.cpp:569 dialogs/rc.cpp:578
+#: dialogs/rc.cpp:579 dialogs/rc.cpp:580 dialogs/rc.cpp:581 dialogs/rc.cpp:582
+#: dialogs/rc.cpp:591 dialogs/rc.cpp:592 dialogs/rc.cpp:593 dialogs/rc.cpp:594
+#: dialogs/rc.cpp:595 dialogs/rc.cpp:603 dialogs/rc.cpp:604 dialogs/rc.cpp:605
+#: dialogs/rc.cpp:606 dialogs/rc.cpp:607 dialogs/rc.cpp:618 dialogs/rc.cpp:619
+#: dialogs/rc.cpp:621 dialogs/rc.cpp:636 dialogs/rc.cpp:637 dialogs/rc.cpp:638
+#: dialogs/rc.cpp:639 dialogs/rc.cpp:640 dialogs/rc.cpp:641 dialogs/rc.cpp:651
+#: dialogs/rc.cpp:652 dialogs/rc.cpp:654 dialogs/rc.cpp:657 dialogs/rc.cpp:658
+#: dialogs/rc.cpp:659 dialogs/rc.cpp:664 dialogs/rc.cpp:665 dialogs/rc.cpp:668
+#: dialogs/rc.cpp:670 dialogs/rc.cpp:672 dialogs/rc.cpp:674 dialogs/rc.cpp:676
+#: dialogs/rc.cpp:678 dialogs/rc.cpp:681 dialogs/rc.cpp:823 widgets/rc.cpp:167
+msgid "1"
+msgstr "1"
+
+#: dialogs/rc.cpp:136
+msgid ""
+"If your statement shows different amounts, please cancel this dialog and "
+"correct the false transactions or correct the values in this dialog. In the "
+"later case, KMyMoney will create an adjustment transaction and add it to the "
+"ledger."
+msgstr ""
+"Se o seu extracto mostra diferentes montantes, por favor cancele este "
+"diálogo e corrija as falsas transacções ou então os valores neste diálogo. "
+"Em último caso, o KMyMoney irá criar uma transacção de ajuste e adicioná-la "
+"ao livro de registos."
+
+#: dialogs/rc.cpp:138
+msgid ""
+"In order to create the adjustment transaction, KMyMoney requires an account "
+"and possibly an interest category to assign the differences to. Please "
+"select an account and - if necessary - a category."
+msgstr ""
+"Com o objectivo de criar a transacção de ajuste, o KMyMoney requer uma conta "
+"e possivelmente uma categoria de juros para a qual atribuir as diferenças. "
+"Por favor, seleccione uma conta e, se necessário, uma categoria."
+
+#: dialogs/rc.cpp:140
+msgid "Interest-Category"
+msgstr "Categoria de Juros"
+
+#: dialogs/rc.cpp:141
+msgid "Restarting postponed reconciliation"
+msgstr "Reiniciando reconciliação adiada"
+
+#: dialogs/rc.cpp:142
+msgid ""
+"You have previously postponed the reconciliation of this account. If you "
+"have entered charges or interests the last time you started reconciling this "
+"account you can modify these in the ledger later on.\n"
+"\n"
+"It is important, that you continue with the same statement you used when you "
+"postponed the reconciliation.\n"
+"\n"
+"All information you have entered into this wizard will be shown and all "
+"transactions that you already cleared are marked with a 'C'."
+msgstr ""
+"Anteriormente, adiou a reconciliação desta conta. Se introduziu taxas ou "
+"juros a última vez que iniciou a reconciliação desta conta, pode modificá-"
+"los no livro de registos mais tarde.\n"
+"\n"
+"É importante que continue com o mesmo extracto usado quando adiou a "
+"reconciliação.\n"
+"\n"
+"Todas as informações que introduziu neste assistente serão mostradas e todas "
+"as transacções que já marcou como compensadas estão marcadas com 'C'."
+
+#: dialogs/rc.cpp:143
+msgid "Statement Information"
+msgstr "Informações do Extrato"
+
+#: dialogs/rc.cpp:144 dialogs/rc.cpp:315 dialogs/rc.cpp:317 dialogs/rc.cpp:320
+#: dialogs/rc.cpp:321 dialogs/rc.cpp:329 dialogs/rc.cpp:330 dialogs/rc.cpp:333
+#: dialogs/rc.cpp:334 dialogs/rc.cpp:335 dialogs/rc.cpp:336 dialogs/rc.cpp:366
+msgid "x"
+msgstr "x"
+
+#: dialogs/rc.cpp:145
+msgid "Statement date:"
+msgstr "Data do extracto:"
+
+#: dialogs/rc.cpp:146
+msgid "Starting balance of this statement:"
+msgstr "Saldo inicial deste extracto:"
+
+#: dialogs/rc.cpp:147
+msgid "Ending balance of this statement:"
+msgstr "Saldo final deste extracto:"
+
+#: dialogs/rc.cpp:149
+msgid "Interest / Charges"
+msgstr "Juros / Encargos"
+
+#: dialogs/rc.cpp:150
+#, fuzzy
+msgid ""
+"If necessary, enter information about interest or charges here. KMyMoney "
+"will create transactions and clear them directly for you."
+msgstr ""
+"Se necessário, introduza informações sobre juros e taxas aqui. O KMyMoney "
+"irá criar transacções e compensa-las-á automaticamente por si."
+
+#: dialogs/rc.cpp:153
+msgid "Charges"
+msgstr "Encargos"
+
+#: dialogs/rc.cpp:154
+msgid "Enter Schedule"
+msgstr "Entrar Agendamento"
+
+#: dialogs/rc.cpp:155
+msgid "Schedule Details"
+msgstr "Detalhes do Evento"
+
+#: dialogs/rc.cpp:156 dialogs/rc.cpp:348 dialogs/rc.cpp:389 widgets/rc.cpp:164
+msgid "Name:"
+msgstr "Nome:"
+
+#: dialogs/rc.cpp:157 dialogs/rc.cpp:351 widgets/rc.cpp:165
+msgid "Type:"
+msgstr "Tipo:"
+
+#: dialogs/rc.cpp:168
+msgid "Enter"
+msgstr "Aceitar"
+
+#: dialogs/rc.cpp:169
+msgid ""
+"Enter the transaction and advance the next due date of this schedule to the "
+"next payment date."
+msgstr ""
+"Inserir o agendamento e avançar a data do próximo pagamento para o seguinte."
+
+#: dialogs/rc.cpp:171
+msgid ""
+"Do not enter the transaction but advance the next due date of this schedule "
+"to the next payment date."
+msgstr ""
+"Não inserir os pagamentos deste agendamento e avançar a data do próximo "
+"pagamento para o seguinte."
+
+#: dialogs/rc.cpp:172
+msgid "Ignore"
+msgstr "Ignorar"
+
+#: dialogs/rc.cpp:173
+msgid ""
+"Do not enter or skip payments for this schedule but continue with the next "
+"schedule."
+msgstr ""
+"Não inserir ou saltar os pagamentos deste agendamento e continuar com o "
+"agendamento seguinte."
+
+#: dialogs/rc.cpp:175
+msgid "Cancel processing of schedule entry."
+msgstr "Cancelar o processamento deste agendamento."
+
+#: dialogs/rc.cpp:176
+msgid "Update Stock and Currency Prices"
+msgstr "Actualizar os Preços das Moedas e das Acções"
+
+#: dialogs/rc.cpp:177
+msgid "List of known Equities, and the date they were last updated on."
+msgstr "Lista de Acções conhecidas, e a data da última actualização de valor."
+
+#: dialogs/rc.cpp:179
+msgid "Update All"
+msgstr "Actualizar Tudo"
+
+#: dialogs/rc.cpp:180
+msgid "Update Selected"
+msgstr "Actualizar Seleccionados"
+
+#: dialogs/rc.cpp:181
+msgid "Status:"
+msgstr "Estado:"
+
+#: dialogs/rc.cpp:184
+msgid "QIF Export"
+msgstr "Exportar QIF"
+
+#: dialogs/rc.cpp:185
+msgid ""
+"From this dialog you are able to export transactions to a quicken compatible "
+"file, (known as a QIF file, because of the extension). Please enter the "
+"path to the QIF file or select it by clicking on the Browse button.\n"
+"\n"
+"You can choose the file's path, the account and the format of the QIF file "
+"(profile). Choose Account to export all the transactions between the "
+"specified dates or just categories. You can also limit the transactions "
+"that are exported by start and ending date. Once you have pressed the "
+"Export button a message box will appear when the export has completed "
+"detailing how many transactions, categories and payees were exported."
+msgstr ""
+"A partir deste diálogo será capaz de exportar transacções para um ficheiro "
+"compatível com Quicken (conhecido com ficheiro QIF, por causa de sua "
+"extensão). Por favor, introduza o caminho para o ficheiro QIF ou seleccione-"
+"o clicando no botão Navegar.\n"
+"\n"
+"Pode escolher o caminho do ficheiro, a conta e o formato do ficheiro QIF "
+"(perfil). Escolha a conta para exportar todas as transacções entre as datas "
+"especificadas ou apenas as categorias. Pode também limitar as transacções "
+"que são exportadas pelas datas inicial e final. Pressionando o botão "
+"Exportar, quando a exportação estiver completa uma caixa de mensagem irá "
+"aparecer detalhando quantas transacções, categorias e beneficiários foram "
+"exportados."
+
+#: dialogs/rc.cpp:186
+msgid "File to export to:"
+msgstr "Arquivo para o qual exporta:"
+
+#: dialogs/rc.cpp:188
+msgid "Account to export"
+msgstr "Conta a exportar"
+
+#: dialogs/rc.cpp:189 dialogs/rc.cpp:297
+msgid "QIF Profile"
+msgstr "Perfil QIF"
+
+# TODO: Verify (Novo/Nova)
+#: dialogs/rc.cpp:190 dialogs/rc.cpp:298 dialogs/rc.cpp:362
+#: widgets/kmymoneypriceview.cpp:145
+msgid "New..."
+msgstr "Novo..."
+
+#: dialogs/rc.cpp:191
+msgid "Contents to Export"
+msgstr "Conteúdo a Exportar"
+
+#: dialogs/rc.cpp:194
+msgid "Date Range"
+msgstr "Período"
+
+#: dialogs/rc.cpp:199
+msgid "Search transactions"
+msgstr "Procurar transacções"
+
+#: dialogs/rc.cpp:200
+msgid "Criteria"
+msgstr "Critério"
+
+#: dialogs/rc.cpp:201
+msgid "Define your search criteria"
+msgstr "Definir critério de procura"
+
+#: dialogs/kfindtransactiondlg.cpp:169 dialogs/rc.cpp:202
+msgid "Text"
+msgstr "Texto"
+
+#: dialogs/rc.cpp:203
+#, fuzzy
+msgid "Contains"
+msgstr "Financiamentos"
+
+#: dialogs/rc.cpp:204
+#, fuzzy
+msgid "Does not contain"
+msgstr "Não fazer nada"
+
+#: dialogs/rc.cpp:205
+msgid "Treat text as regular expression"
+msgstr "Tratar texto como uma expressão regular"
+
+#: dialogs/rc.cpp:206
+msgid "Case sensitive"
+msgstr "Distinguir Maiúsculas"
+
+#: dialogs/rc.cpp:209
+msgid "Range"
+msgstr "Faixa"
+
+#: dialogs/rc.cpp:210
+msgid ""
+"_: To (Date)\n"
+"To"
+msgstr "Até"
+
+#: dialogs/rc.cpp:211
+msgid ""
+"_: From (Date)\n"
+"From"
+msgstr "De"
+
+#: dialogs/rc.cpp:213
+msgid "Search this amount"
+msgstr "Procurar por este montante"
+
+#: dialogs/rc.cpp:214
+msgid "Search amount in the range"
+msgstr "Procurar montante na faixa"
+
+#: dialogs/rc.cpp:215
+msgid ""
+"_: to (amount)\n"
+"to"
+msgstr "até"
+
+#: dialogs/rc.cpp:216
+msgid ""
+"_: from (amount)\n"
+"from"
+msgstr "de"
+
+#: dialogs/rc.cpp:220
+msgid "Select transactions without payees"
+msgstr "Seleccionar transacções sem beneficiários"
+
+#: dialogs/rc.cpp:221
+msgid "Select all"
+msgstr "Seleccionar tudo"
+
+#: dialogs/rc.cpp:222
+msgid "Select none"
+msgstr "Limpar selecção"
+
+#: dialogs/rc.cpp:224
+msgid "Validity"
+msgstr "Validade"
+
+#: dialogs/rc.cpp:226
+msgid "All states"
+msgstr "Qualquer estado"
+
+#: dialogs/rc.cpp:230
+msgid "All types"
+msgstr "Todos os tipos"
+
+#: dialogs/rc.cpp:234
+msgid "Any transaction"
+msgstr "Qualquer transacção"
+
+#: dialogs/rc.cpp:235
+msgid "Valid transaction"
+msgstr "Transacção válida"
+
+#: dialogs/rc.cpp:236
+msgid "Invalid transaction"
+msgstr "Transacção inválida"
+
+#: dialogs/rc.cpp:237
+msgid "State"
+msgstr "Estado"
+
+#: dialogs/rc.cpp:238
+msgid "Search this number"
+msgstr "Procurar este número"
+
+#: dialogs/rc.cpp:239
+msgid "Search number in range"
+msgstr "Procurar número na faixa"
+
+#: dialogs/rc.cpp:240
+msgid ""
+"_: to (number)\n"
+"to"
+msgstr "até"
+
+#: dialogs/rc.cpp:241
+msgid ""
+"_: from (number)\n"
+"from"
+msgstr "de"
+
+#: dialogs/rc.cpp:242
+msgid "text"
+msgstr "texto"
+
+#: dialogs/rc.cpp:243
+msgid "warning"
+msgstr "aviso"
+
+#: dialogs/rc.cpp:244
+msgid "Result"
+msgstr "Resultado"
+
+# TODO: Verify
+#: dialogs/rc.cpp:254
+msgid "F"
+msgstr "F"
+
+#: dialogs/rc.cpp:257 dialogs/rc.cpp:844
+msgid "&Reset"
+msgstr "&Reiniciar"
+
+#: dialogs/rc.cpp:258
+#, fuzzy
+msgid "&Find"
+msgstr "&Finalizar"
+
+#: dialogs/rc.cpp:259
+msgid "GnuCash Import Options"
+msgstr "Opções de Importação do GnuCash"
+
+#: dialogs/rc.cpp:260
+msgid "Use 'Help' for more information on these options"
+msgstr "Use 'Ajuda' para mais informações sobre estas opções"
+
+#: dialogs/rc.cpp:261
+msgid "Investment Handling"
+msgstr "Manipulação do Investimento"
+
+#: dialogs/rc.cpp:262
+msgid "One investment account for each stock"
+msgstr "Uma conta de investimento para cada acção"
+
+#: dialogs/rc.cpp:263
+msgid "One investment account for all stocks"
+msgstr "Uma conta de investimento para todas as acções"
+
+#: dialogs/rc.cpp:264
+msgid "Prompt for an investment account for each stock"
+msgstr "Perguntar por uma conta de investimento para cada acção"
+
+#: dialogs/rc.cpp:265
+msgid "Online price quotes"
+msgstr "Cotações de preços em linha"
+
+#: dialogs/rc.cpp:266
+msgid "Use Finance::Quote for share price quotes"
+msgstr "Usar Finance::Quote para cotações de preços de acções"
+
+#: dialogs/rc.cpp:267
+msgid "Scheduled Transactions"
+msgstr "Transacções Agendadas"
+
+#: dialogs/rc.cpp:268
+msgid "Drop suspect scheduled transactions"
+msgstr "Descartar transacções agendadas suspeitas"
+
+#: dialogs/rc.cpp:269
+msgid "Decoding option"
+msgstr "Opção de descodificação"
+
+#: dialogs/rc.cpp:270
+msgid "Decode using"
+msgstr "Uso de descodificação"
+
+#: dialogs/rc.cpp:271
+msgid "Transaction Notes option"
+msgstr "Opção de Notas de Transacção"
+
+#: dialogs/rc.cpp:272
+msgid "Use transaction notes on non-split transactions"
+msgstr "Utilizar notas de transacção nas transacções não parceladas."
+
+#: dialogs/rc.cpp:273
+msgid "Debug Options"
+msgstr "Opções de Depuração"
+
+#: dialogs/rc.cpp:274
+msgid "General debug data"
+msgstr "Dados gerais de depuração"
+
+#: dialogs/rc.cpp:275
+msgid "Display XML data"
+msgstr "Exibir dados XML"
+
+#: dialogs/rc.cpp:276
+msgid "Anonymize data"
+msgstr "Tornar os dados anônimos"
+
+#: dialogs/rc.cpp:281
+msgid "Online Quotes - Select price source"
+msgstr "Cotações em linha - Seleccione a fonte de valores"
+
+#: dialogs/rc.cpp:284
+msgid ""
+"This price source is not known to KMyMoney. Please select an option below."
+msgstr ""
+"Esta fonte de valores não é conhecida pelo KMyMoney. Por favor seleccione "
+"uma opção abaixo."
+
+#: dialogs/rc.cpp:285
+msgid "Do not perform online quotes for this investment"
+msgstr "Não levantar cotações em linha para este investimento"
+
+#: dialogs/rc.cpp:286
+msgid "Select a known KMyMoney source from the list below"
+msgstr "Seleccione uma fonte conhecida do KMyMoney a partir da lista abaixo"
+
+#: dialogs/rc.cpp:287
+msgid ""
+"Use the following name for the price source.\n"
+"(Click Help for further information.)"
+msgstr ""
+"Use o seguinte nome para a fonte de valores.\n"
+"(Clique em Ajuda para mais informacções.)"
+
+#: dialogs/rc.cpp:288
+msgid "Always use this selection for this price source."
+msgstr "Sempre usar esta selecção para esta fonte de valores."
+
+#: dialogs/rc.cpp:289
+msgid "QIF Import"
+msgstr "Importar QIF"
+
+#: dialogs/rc.cpp:290
+msgid ""
+"From this dialog you are able to import transactions from a Quicken<b>&trade;"
+"</b> compatible file, (known as a QIF file, because of the extension).<p>\n"
+"\n"
+"Please enter the path to the QIF file or select it by clicking on the Browse "
+"button. Once you have the file's path press the Import button and KMyMoney "
+"will import all the transactions, categories and payees it finds."
+msgstr ""
+"A partir deste diálogo será capaz de importar transacções de um ficheiro "
+"compatível com o Quicken<b>&trade;</b>, (conhecido como ficheiro QIF, devido "
+"à sua extensão).<p>\n"
+"\n"
+"Por favor, introduza o caminho do ficheiro QIF ou seleccione-o clicando no "
+"botão Navegar. Assim que tenha introduzido o caminho do ficheiro pressione o "
+"botão Importar e o KMyMoney irá importar todas as transacções, categorias e "
+"beneficiários que ele encontrar."
+
+#: dialogs/rc.cpp:291
+msgid "QIF File to Import:"
+msgstr "Arquivo QIF a Importar:"
+
+#: dialogs/rc.cpp:292
+msgid "Import options"
+msgstr "Opções de importação"
+
+#: dialogs/rc.cpp:293
+msgid "Bank statement"
+msgstr "Extracto de Banco"
+
+#: dialogs/rc.cpp:294
+msgid "Other application"
+msgstr "Outro programa"
+
+#: dialogs/rc.cpp:295
+msgid ""
+"Select <b>Bank statement</b> turns on automatic category matching which is "
+"turned off in case of <b>Historic data</b>. Use the latter if you import "
+"files from other Personal Finance Management software."
+msgstr ""
+
+#: dialogs/rc.cpp:296
+msgid "Source of QIF"
+msgstr "Origem do QIF"
+
+#: dialogs/rc.cpp:302
+msgid "Verify Import"
+msgstr "Verificar Importação"
+
+#: dialogs/rc.cpp:304
+msgid "Ok"
+msgstr "Ok"
+
+#: dialogs/rc.cpp:306
+msgid "MyDialog"
+msgstr "MinhaJanela"
+
+#: dialogs/rc.cpp:310
+msgid "File Information"
+msgstr "Informação do Ficheiro"
+
+#: dialogs/rc.cpp:316
+msgid "Last modified on"
+msgstr "Última modificação"
+
+#: dialogs/rc.cpp:319
+msgid "Base currency"
+msgstr "Moeda de base"
+
+#: dialogs/rc.cpp:322
+msgid "Created on"
+msgstr "Criada em"
+
+#: dialogs/rc.cpp:325
+msgid "Accounts/Categories"
+msgstr "Contas/Categorias"
+
+#: dialogs/rc.cpp:328
+msgid "Closed"
+msgstr "Fechado"
+
+#: dialogs/rc.cpp:331
+msgid "Prices"
+msgstr "Preços"
+
+#: dialogs/rc.cpp:337
+msgid "Splits"
+msgstr "Parcelas"
+
+#: dialogs/rc.cpp:338
+msgid "Price Editor"
+msgstr "Editor de Preço"
+
+#: dialogs/rc.cpp:339
+msgid "Show all stored prices"
+msgstr "Mostrar todos os preços armazenados"
+
+#: dialogs/rc.cpp:343
+msgid "Delete Range..."
+msgstr "Apagar Intervalo..."
+
+#: dialogs/rc.cpp:346
+msgid "New Account Dialog"
+msgstr "Nova Conta"
+
+#: dialogs/rc.cpp:349
+msgid "Opening information"
+msgstr "Informações de abertura"
+
+#: dialogs/rc.cpp:350
+msgid "Currency:"
+msgstr "Moeda:"
+
+#: dialogs/rc.cpp:352 dialogs/rc.cpp:793
+msgid "Date:"
+msgstr "Data:"
+
+#: dialogs/rc.cpp:353
+msgid "Balance:"
+msgstr "Saldo:"
+
+#: dialogs/rc.cpp:355
+msgid "Last check number:"
+msgstr "Último número de cheque:"
+
+#: dialogs/rc.cpp:356
+msgid "Notes:"
+msgstr "Notas:"
+
+#: dialogs/rc.cpp:357
+msgid "No auto-VAT-assignment"
+msgstr "Sem atribuição automática de IVA"
+
+# TODO: Verify
+#: dialogs/rc.cpp:358 dialogs/rc.cpp:441
+msgid "Price entry"
+msgstr "Preço inicial"
+
+#: dialogs/rc.cpp:359
+msgid "Preferred Account"
+msgstr "Conta Preferida"
+
+#: dialogs/rc.cpp:363
+msgid "Number:"
+msgstr "Número:"
+
+#: dialogs/rc.cpp:364 dialogs/rc.cpp:395
+msgid "BIC"
+msgstr "BIC"
+
+#: dialogs/rc.cpp:367
+msgid "Hierarchy"
+msgstr "Hierarquia"
+
+#: dialogs/rc.cpp:368
+msgid "Subaccount"
+msgstr "Sub-conta"
+
+#: dialogs/rc.cpp:369
+msgid "Limits"
+msgstr "Limites"
+
+#: dialogs/rc.cpp:370
+msgid ""
+"This page allows to setup certain limits. KMyMoney will warn you when the "
+"account balance reaches a limit."
+msgstr ""
+"Esta página permite de configurar certos limites. KMyMoney vai avisar-lo "
+"quando o saldo da conta atinge um limite."
+
+#: dialogs/rc.cpp:372
+msgid "Absolute limit"
+msgstr "Limite absoluto"
+
+#: dialogs/rc.cpp:373
+msgid "Maximum credit limit"
+msgstr "Crédito máximo"
+
+#: dialogs/rc.cpp:374
+msgid "Minimum balance"
+msgstr "Saldo mínimo"
+
+#: dialogs/rc.cpp:375
+msgid "Early warning"
+msgstr "Aviso com antecedência"
+
+#: dialogs/rc.cpp:377
+msgid "VAT details"
+msgstr "Detalhes IVA"
+
+#: dialogs/rc.cpp:378
+msgid "VAT category"
+msgstr "Categoria IVA"
+
+#: dialogs/rc.cpp:379
+msgid "VAT percentage"
+msgstr "Percentagem IVA"
+
+#: dialogs/rc.cpp:380
+msgid "Enable auto VAT assignment"
+msgstr "Activar atribuição automática de IVA"
+
+#: dialogs/rc.cpp:381
+msgid "Amount entered"
+msgstr "Quantidade inserida"
+
+#: dialogs/rc.cpp:382
+msgid "Gross amount"
+msgstr "Montante bruto"
+
+#: dialogs/rc.cpp:383
+msgid "Net amount"
+msgstr "Montante líquido"
+
+#: dialogs/rc.cpp:384
+msgid "Include on Tax Reports"
+msgstr "Incluir nos Relatórios de Impostos"
+
+#: dialogs/rc.cpp:387
+msgid "New Institution Dialog"
+msgstr "Diálogo de Nova Instituição"
+
+#: dialogs/rc.cpp:388
+msgid "Institution Details"
+msgstr "Detalhes da Instituição"
+
+#: dialogs/rc.cpp:390
+msgid "City:"
+msgstr "Cidade:"
+
+#: dialogs/rc.cpp:394
+msgid "Routing Number:"
+msgstr "Número da Rua:"
+
+#: dialogs/rc.cpp:398
+msgid "New Budget"
+msgstr "Novo Orçamento"
+
+#: dialogs/rc.cpp:403
+msgid "New Equity"
+msgstr "Nova Acção Ordinária"
+
+#: dialogs/rc.cpp:406 dialogs/rc.cpp:407
+msgid "Trading Symbol of the stock or mutual fund, not required."
+msgstr ""
+"Símbolo Comercial da acção ou fundo comum de investimento, não requerido."
+
+#: dialogs/rc.cpp:414 dialogs/rc.cpp:415
+msgid "Name of the company, or mutual fund."
+msgstr "Nome da companhia, ou fundo comum de investimento."
+
+#: dialogs/rc.cpp:418
+msgid "New File Dialog"
+msgstr "Novo Ficheiro"
+
+#: dialogs/rc.cpp:419
+msgid ""
+"Use this dialog to enter personal information about yourself.\n"
+"\n"
+"All information is optional and is provided to personalize\n"
+"your KMyMoney file."
+msgstr ""
+"Use este diálogo para inserir informações pessoais sobre você.\n"
+"\n"
+"Todas informações são opcionais e são oferecidas para personalizar o\n"
+"seu ficheiro KMyMoney."
+
+#: dialogs/rc.cpp:430
+msgid "New Investment wizard"
+msgstr "Assistente de Novo Investimento"
+
+#: dialogs/rc.cpp:431
+msgid "Investment Type"
+msgstr "Tipo de Investimento"
+
+#: dialogs/rc.cpp:432
+msgid "This wizard allows you to create a new investment."
+msgstr "Este assistente permite que você crie um novo investimento."
+
+#: dialogs/rc.cpp:433
+msgid ""
+"The first step in this process requires to select the type of investment. "
+"The following steps collect more details about the investment from you."
+msgstr ""
+"O primeiro passo no processo requer que você seleccione o tipo de "
+"investimento. Os passos seguintes colectam mais detalhes sobre o "
+"investimento."
+
+#: dialogs/rc.cpp:434
+msgid "Type of investment"
+msgstr "Tipo de investimento"
+
+#: dialogs/rc.cpp:438
+msgid "Investment details"
+msgstr "Detalhes do Investimento"
+
+#: dialogs/rc.cpp:439
+msgid ""
+"Enter the details below and click <b>Next</b> to continue entering the "
+"online update details."
+msgstr ""
+"Insira os detalhes abaixo e clique <b>Próximo</b> para continuar inserindo "
+"os detalhes de actualização em linha."
+
+#: dialogs/rc.cpp:442 dialogs/rc.cpp:728
+msgid "Fraction"
+msgstr "Fração"
+
+#: dialogs/rc.cpp:443
+msgid "Trading Currency"
+msgstr "Moeda de Comercialização"
+
+#: dialogs/rc.cpp:444
+msgid "Full name"
+msgstr "Nome completo"
+
+#: dialogs/rc.cpp:445
+msgid "AMEX"
+msgstr "AMEX"
+
+#: dialogs/rc.cpp:446
+msgid "EUREX"
+msgstr "EUREX"
+
+#: dialogs/rc.cpp:447
+msgid "FUND"
+msgstr "FUND"
+
+#: dialogs/rc.cpp:448
+msgid "NASDAQ"
+msgstr "NASDAQ"
+
+#: dialogs/rc.cpp:449
+msgid "NYSE"
+msgstr "NYSE"
+
+#: dialogs/rc.cpp:450
+msgid "XETRA"
+msgstr "XETRA"
+
+#: dialogs/rc.cpp:451
+msgid "Trading symbol"
+msgstr "Símbolo de Comercialização"
+
+#: dialogs/rc.cpp:452
+msgid "Identification"
+msgstr "Identificação"
+
+#: dialogs/rc.cpp:453
+msgid "Enter the ticker symbol (e.g. RHAT)."
+msgstr "Insira o símbolo da acção (p.e. RHAT)."
+
+#: dialogs/rc.cpp:454
+msgid "Enter the CUSIP/ISIN/WKN identification number here"
+msgstr "Insira o número de identificação CUSIP/ISIN/WKN aqui"
+
+#: dialogs/rc.cpp:455
+msgid "Trading market"
+msgstr "Mercado de negócios"
+
+#: dialogs/rc.cpp:456
+msgid "Online Update"
+msgstr "Actualização em linha"
+
+#: dialogs/rc.cpp:457
+msgid ""
+"Select an online source and click <b>Finish</b> to store the investment "
+"data. If you don't want to use online updates, just leave the data as is."
+msgstr ""
+"Selecione a fonte em linha e clique <b>Terminar</b> para gravar os dados do "
+"investimento. Se você não deseja usar actualizações em linha, simplesmente "
+"deixe os dados como estão."
+
+#: dialogs/rc.cpp:458
+msgid "Use Finance::Quote"
+msgstr "Utilizar Finance::Quote"
+
+#: dialogs/rc.cpp:460
+msgid "Factor"
+msgstr "Factor"
+
+#: dialogs/rc.cpp:461
+msgid "New Loan Wizard"
+msgstr "Assistente para Novo Financiamento"
+
+#: dialogs/rc.cpp:462
+msgid "New Loan Account Wizard"
+msgstr "Assistente para Nova Conta de Financiamento"
+
+# TODO: Verify 'interest'
+#: dialogs/rc.cpp:463
+msgid ""
+"\n"
+"Welcome to the New Loan Account Wizard which will guide you through the "
+"creation of a new loan e.g. for your home, your car or any other loan that "
+"you pay or gain interest for.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Bem-vindo ao Assistente para Nova Conta de Financiamento, o qual irá guiá-lo "
+"através da criação de um novo financiamento, por exemplo, para sua casa, "
+"carro ou qualquer outro financiamento no qual pague ou ganhe juros.\n"
+"\n"
+"Por favor, certifique-se que tem todas as informações relevantes à mão. "
+"Normalmente obtém estas informações no seu contracto e no seu último "
+"extracto."
+
+#: dialogs/rc.cpp:464
+msgid "Edit Loan Account Wizard"
+msgstr "Assistente para Edição de Conta de Financiamento"
+
+#: dialogs/rc.cpp:465
+msgid ""
+"\n"
+"Welcome to the Edit Loan Account Wizard. Please use this wizard to modify "
+"information about your loan account.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Bem-vindo ao Assistente para Edição de Conta de Financiamento. Por favor, "
+"use este assistente para modificar as informações sobre sua conta de "
+"financiamento.\n"
+"\n"
+"Por favor, certifique-se de ter todas as informações relevante à mão. "
+"Normalmente obtém estas informações no seu contracto e no seu último "
+"extracto."
+
+#: dialogs/rc.cpp:467
+msgid ""
+"\n"
+"In the first step, KMyMoney will ask you some general information about the "
+"loan account to be created."
+msgstr ""
+"\n"
+"No primeiro passo, O KMyMoney irá pedir algumas informações gerais sobre a "
+"conta de financiamento a ser criada."
+
+#: dialogs/rc.cpp:468 dialogs/rc.cpp:522 dialogs/rc.cpp:610
+msgid "1. General Information"
+msgstr "1. Informações Gerais"
+
+#: dialogs/rc.cpp:469
+msgid ""
+"\n"
+"2. Calculate Loan\n"
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"2. Calcular Financiamento\n"
+"\n"
+"3. Pagamentos"
+
+#: dialogs/rc.cpp:470
+msgid "Edit selection"
+msgstr "Editar selecção"
+
+#: dialogs/rc.cpp:471
+msgid ""
+"\n"
+"Please select, which data of the loan you want to modify."
+msgstr ""
+"\n"
+"Por favor, seleccione quais dados do financiamento que deseja modificar."
+
+#: dialogs/rc.cpp:472
+msgid "Modify the interest rate"
+msgstr "Modificar a taxa de juro"
+
+#: dialogs/rc.cpp:473
+msgid "Modify additional fees"
+msgstr "Modificar tarifas adicionais"
+
+#: dialogs/rc.cpp:474
+msgid "Modify other loan information"
+msgstr "Modificar outras informações do financiamento"
+
+#: dialogs/rc.cpp:475
+msgid "Effective date"
+msgstr "Data efectiva"
+
+#: dialogs/rc.cpp:478
+msgid "When should the changes become active?"
+msgstr "Quando devem ser tornadas activas as mudanças?"
+
+#: dialogs/rc.cpp:479
+msgid "Lending or borrowing money"
+msgstr "Emprestando dinheiro"
+
+#: dialogs/rc.cpp:480
+msgid ""
+"\n"
+"Do you borrow or lend money?"
+msgstr ""
+"\n"
+"Pediu dinheiro emprestado ou emprestou a alguém?"
+
+#: dialogs/rc.cpp:483
+msgid "Name of the loan"
+msgstr "Nome do financiamento"
+
+# TODO: Verify
+# Compra de casa?
+#: dialogs/rc.cpp:484
+msgid ""
+"\n"
+"How do you want to call this loan? Examples for names are 'car loan', "
+"'school loan', 'home owner loan'."
+msgstr ""
+"\n"
+"Como deseja chamar este financiamento? Exemplos de nomes seriam "
+"'financiamento de carro', 'financiamento de escola', 'financiamento para "
+"compra de casa'."
+
+#: dialogs/rc.cpp:486
+msgid "TextLabel6"
+msgstr "TextLabel6"
+
+#: dialogs/rc.cpp:487
+msgid "TextLabel7"
+msgstr "TextLabel7"
+
+#: dialogs/rc.cpp:488
+msgid "Type of interest"
+msgstr "Tipo de juros"
+
+#: dialogs/rc.cpp:489
+msgid ""
+"\n"
+"Is the interest of this loan fixed over a period of time or is it adapted "
+"from time to time? If the interest rate changes during the amortization "
+"phase of the loan you should choose the option 'variable interest rate'."
+msgstr ""
+"\n"
+"Os juros deste investimento são fixos sobre um período de tempo ou são "
+"adaptados de tempos em tempos? Se a taxa de juro muda durante a fase de "
+"amortização, deve escolher a opção 'taxa de juro variável'."
+
+#: dialogs/rc.cpp:490
+msgid "Fixed interest rate"
+msgstr "Taxa de juro fixa"
+
+#: dialogs/rc.cpp:491
+msgid "Variable interest rate"
+msgstr "Taxa de juro variável"
+
+#: dialogs/rc.cpp:492
+msgid "Payments?"
+msgstr "Pagamentos?"
+
+# TODO: Verify
+#: dialogs/rc.cpp:493
+msgid ""
+"\n"
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?"
+msgstr ""
+"\n"
+"Existiam quaisquer pagamentos para este financiamento aquando da entrada "
+"deles no KMyMoney, ou não?"
+
+#: dialogs/rc.cpp:494
+msgid "No, no payments were made yet."
+msgstr "Não, nenhum pagamento foi feito ainda."
+
+#: dialogs/rc.cpp:495
+msgid "Yes, payments were made."
+msgstr "Sim, já foram feitos pagamentos."
+
+# TODO: Neste ou nesse?
+# TODO: Deságio?
+#: dialogs/rc.cpp:496
+msgid ""
+"Note: Payments made to obtain the loan (e.g. Dissagio) are not considered as "
+"payments in this context."
+msgstr ""
+"Nota: Pagamentos feitos para obter o financiamento (i.e. deságio) não são "
+"considerados como pagamentos neste contexto."
+
+# TODO: verify
+#: dialogs/rc.cpp:497
+msgid "Recording payments?"
+msgstr "Registando pagamentos?"
+
+#: dialogs/rc.cpp:498
+msgid ""
+"\n"
+"Do you want to record all payments of this loan with KMyMoney?"
+msgstr ""
+"\n"
+"Quer registar todos os pagamentos deste financiamento com o KMyMoney?"
+
+#: dialogs/rc.cpp:499
+msgid "Yes, record all payments."
+msgstr "Sim, registar todos os pagamentos."
+
+#: dialogs/rc.cpp:500
+msgid "No, only record payments since the beginning of this year."
+msgstr "Não, registar somente os pagamentos feitos desde o início deste ano."
+
+#: dialogs/rc.cpp:501
+msgid "Date of next interest change"
+msgstr "Data da próxima mudança na taxa de juro"
+
+#: dialogs/rc.cpp:502
+msgid ""
+"\n"
+"Select the date when the interest rate for this loan will be modified and "
+"the frequency of the future changes."
+msgstr ""
+"\n"
+"Seleccione a data na qual a taxa de juro para este financiamento será "
+"modificada e a frequência para mudanças futuras."
+
+#: dialogs/rc.cpp:503
+msgid "Next interest change on"
+msgstr "Próxima mudança de taxa de juro em"
+
+#: dialogs/rc.cpp:504
+msgid "Time until next change"
+msgstr "Intervalo até a mudança seguinte"
+
+#: dialogs/rc.cpp:506 dialogs/rc.cpp:571
+msgid ""
+"\n"
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"\n"
+"Por favor insira o montante que você paga pelo principal da dívida e juros "
+"ou deixe este campo em branco para que o programa possa calculá-lo."
+
+#: dialogs/rc.cpp:507
+msgid "Current amount"
+msgstr "Montante actual"
+
+#: dialogs/rc.cpp:510
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the amount for principal and interest then enter "
+"it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"O KMyMoney calcula a nova taxa de juros ou o montante do principal da dívida "
+"e juros. Se você sabe o montante do principal da dívida e juros, então "
+"insira-o aqui.\n"
+"\n"
+"Se deseja que o KMyMoney calcule este valor para você, então deixe o campo "
+"em branco."
+
+#: dialogs/rc.cpp:512 dialogs/rc.cpp:545
+msgid ""
+"\n"
+"Please enter the interest rate or leave the field empty to calculate it."
+msgstr ""
+"\n"
+"Por favor, introduza a taxa de juros ou deixe este campo em branco para "
+"calculá-lo automaticamente."
+
+#: dialogs/rc.cpp:514
+msgid "Current rate"
+msgstr "Taxa actual"
+
+#: dialogs/rc.cpp:516
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the interest rate then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"O KMyMoney calcula a nova taxa de juros ou o montante do principal da dívida "
+"e juros. Se você sabe a taxa de juros, então insira-a aqui.\n"
+"\n"
+"Se deseja que o KMyMoney calcule este valor para você, então deixe o campo "
+"em branco."
+
+#: dialogs/rc.cpp:517
+msgid "Date of first payment"
+msgstr "Data do primeiro pagamento"
+
+#: dialogs/rc.cpp:520
+msgid "Calculate Loan"
+msgstr "Calcular Financiamento"
+
+#: dialogs/rc.cpp:521
+msgid ""
+"\n"
+"You have successfully entered the general information about your loan. Next, "
+"KMyMoney needs some information about the calculation of the loan."
+msgstr ""
+"\n"
+"Introduziu com sucesso as informações gerais sobre o seu financiamento. A "
+"seguir, o KMyMoney precisa de algumas informações gerais sobre o cálculo do "
+"financiamento."
+
+#: dialogs/rc.cpp:523 dialogs/rc.cpp:611
+msgid ""
+"\n"
+"2. Calculate Loan"
+msgstr ""
+"\n"
+"2. Calcular Financiamento"
+
+#: dialogs/rc.cpp:524 dialogs/rc.cpp:612
+msgid ""
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"3. Pagamentos"
+
+#: dialogs/rc.cpp:526
+msgid ""
+"\n"
+"How often will there be payments made to this loan?"
+msgstr ""
+"\n"
+"Com que frequência serão feitos os pagamentos para este financiamento?"
+
+#: dialogs/rc.cpp:527
+msgid "Interest calculation"
+msgstr "Cálculo de juros"
+
+#: dialogs/rc.cpp:528
+msgid ""
+"\n"
+"When does the actual interest rate get calculated?"
+msgstr ""
+"\n"
+"Quando a taxa real de juro é calculada?"
+
+#: dialogs/rc.cpp:529
+msgid "When the payment is received."
+msgstr "Quando o pagamento é recebido."
+
+#: dialogs/rc.cpp:530
+msgid "When the payment is due."
+msgstr "Quando o pagamento vence."
+
+#: dialogs/rc.cpp:534 dialogs/rc.cpp:547 dialogs/rc.cpp:560 dialogs/rc.cpp:573
+#: dialogs/rc.cpp:586 dialogs/rc.cpp:598 dialogs/rc.cpp:679
+msgid "Loan amount:"
+msgstr "Montante do financiamento:"
+
+#: dialogs/rc.cpp:535 dialogs/rc.cpp:548 dialogs/rc.cpp:561 dialogs/rc.cpp:574
+#: dialogs/rc.cpp:587 dialogs/rc.cpp:599 dialogs/rc.cpp:633 dialogs/rc.cpp:671
+msgid "Interest rate:"
+msgstr "Taxa de juro:"
+
+#: dialogs/rc.cpp:536 dialogs/rc.cpp:549 dialogs/rc.cpp:562 dialogs/rc.cpp:575
+#: dialogs/rc.cpp:588 dialogs/rc.cpp:600 dialogs/rc.cpp:669
+msgid "Term:"
+msgstr "Prazo:"
+
+#: dialogs/rc.cpp:537 dialogs/rc.cpp:550 dialogs/rc.cpp:563 dialogs/rc.cpp:576
+#: dialogs/rc.cpp:589 dialogs/rc.cpp:601 dialogs/rc.cpp:622 dialogs/rc.cpp:630
+#: dialogs/rc.cpp:677
+msgid "Principal + Interest:"
+msgstr "Principal + Juros:"
+
+#: dialogs/rc.cpp:538 dialogs/rc.cpp:551 dialogs/rc.cpp:564 dialogs/rc.cpp:577
+#: dialogs/rc.cpp:583 dialogs/rc.cpp:585 dialogs/rc.cpp:590 dialogs/rc.cpp:602
+msgid "Final amortization payment"
+msgstr "Pagamento final da amortização"
+
+#: dialogs/rc.cpp:557
+msgid "Duration"
+msgstr "Duração"
+
+# TODO: Verify
+# Para o qual?
+#: dialogs/rc.cpp:558
+msgid ""
+"\n"
+"Please enter the term of this loan or leave the field empty to calculate it. "
+"The term is the time that is required to fully repay the loan. This time "
+"might be different from the time your loan contract is signed for."
+msgstr ""
+"\n"
+"Por favor, indique o prazo deste financiamento ou deixe este campo vazio "
+"para calculá-lo automaticamente. O prazo é o tempo necessário para pagar "
+"completamente o financiamento. Este tempo pode ser diferente do tempo para o "
+"qual seu contracto é assinado."
+
+#: dialogs/rc.cpp:584
+msgid ""
+"\n"
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"\n"
+"Por favor, introduza o montante de um pagamento de amortização final ou "
+"deixe este campo vazio para calculá-lo automaticamente."
+
+#: dialogs/rc.cpp:596
+msgid "Calculation Overview"
+msgstr "Visão Geral do Cálculo"
+
+#: dialogs/rc.cpp:597
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown in the overview below. You can "
+"accept these values by selecting \"Next\" or change them by choosing \"Back"
+"\" to return to the input field for the information you want to change."
+msgstr ""
+"\n"
+"O KMyMoney calculou o financiamento conforme mostrado na visão geral abaixo. "
+"Pode aceitar estes valores seleccionando \"Próximo\" ou mudá-los escolhendo "
+"\"Voltar\" para retornar ao campo de entrada da informação que deseja "
+"modificar."
+
+#: dialogs/rc.cpp:609
+msgid ""
+"\n"
+"In the following steps, KMyMoney supports you in setting up categories and "
+"schedules for your loan payments."
+msgstr ""
+"\n"
+"Nos passos seguintes, o KMyMoney irá suportá-lo na configuração de "
+"categorias e de eventos recorrentes para os seus pagamentos de financiamento."
+
+#: dialogs/rc.cpp:614
+msgid ""
+"\n"
+"Please select the category you want to assign the interest payments to or "
+"create a new category."
+msgstr ""
+"\n"
+"Por favor, seleccione a categoria à qual quer atribuir os pagamentos de "
+"juros ou crie uma nova categoria."
+
+#: dialogs/rc.cpp:615
+msgid "Additional Fees"
+msgstr "Taxas Adicionais"
+
+#: dialogs/rc.cpp:616
+msgid ""
+"\n"
+"If your regular payment contains any additional fees, click on the button "
+"\"Additional fees\" to enter them."
+msgstr ""
+"\n"
+"Se o seu pagamento regular contém quaisquer taxas adicionais, clique no "
+"botão \"Taxas adicionais\" para introduzir-las."
+
+#: dialogs/rc.cpp:617
+msgid "= periodical payment:"
+msgstr "= pagamento periódico:"
+
+#: dialogs/rc.cpp:623
+msgid ""
+"If no additional fees are included in your periodical payment or you have "
+"entered all such fees, then click on \"Next\"."
+msgstr ""
+"Se não existirem taxas adicionais incluídas no seu pagamento periódico, ou "
+"já introduziu todas essas taxas, então clique em \"Próximo\"."
+
+#: dialogs/rc.cpp:625
+msgid ""
+"KMyMoney will create a schedule for this payment and reminds you whenever a "
+"payment must be made.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"O KMyMoney criará um agendamento para este pagamento e lembrará você sempre "
+"que um pagamento tiver que ser fetio.<p>\n"
+"Se você optou por registrar todos os pagamentos esta data já foi fornecida. "
+"Se você optou por registrar somente os pagamentos anuais, então a "
+"<b>Primeira data de pagamento</b> é a data do primeiro pagamento feito neste "
+"ano."
+
+#: dialogs/rc.cpp:626
+msgid "First payment due on:"
+msgstr "Primeiro pagamento vence em:"
+
+#: dialogs/rc.cpp:627
+msgid "Make payment from/to:"
+msgstr "Fazer pagamento de/para:"
+
+#: dialogs/rc.cpp:629
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown below. If you want to accept these "
+"values use the \"Finish\" button to update your account, otherwise use the "
+"\"Back\" button to modify your settings."
+msgstr ""
+"\n"
+"O KMyMoney calculou o financiamento como mostrado abaixo. Se quer aceitar "
+"estes valores use o botão \"Finalizar\" para actualizar a sua conta, caso "
+"contrário, use o botão \"Voltar\" para modificar suas configurações."
+
+#: dialogs/rc.cpp:631
+msgid "Additional fees:"
+msgstr "Taxas adicionais:"
+
+#: dialogs/rc.cpp:632
+msgid "Total payment:"
+msgstr "Pagamento total:"
+
+# TODO: Verify
+#: dialogs/rc.cpp:634
+msgid "Valid from:"
+msgstr "Válido a partir de:"
+
+#: dialogs/rc.cpp:635
+msgid "Affected payments:"
+msgstr "Pagamentos afectados:"
+
+#: dialogs/rc.cpp:645
+msgid "Press this to create a new asset account"
+msgstr "Pressione isto para criar uma nova conta de activos"
+
+#: dialogs/rc.cpp:648
+msgid ""
+"\n"
+"This page summarizes the data you entered. If you need to modify anything, "
+"please use the \"Back\" button to go to respective page. Otherwise use the "
+"\"Finish\" button to create the account."
+msgstr ""
+"\n"
+"Esta página resume os dados que introduziu. Se deseja modificar qualquer "
+"coisa, por favor use o botão \"Voltar\" e vá para a respectiva página. Caso "
+"contrário, use o botão \"Finalizar\" para criar a conta."
+
+#: dialogs/rc.cpp:650
+msgid "Payee:"
+msgstr "Beneficiário:"
+
+#: dialogs/rc.cpp:653
+msgid "First payment:"
+msgstr "Primeiro pagamento:"
+
+#: dialogs/rc.cpp:655
+msgid "Amount is:"
+msgstr "Montante é:"
+
+#: dialogs/rc.cpp:656
+msgid "Loan calculation"
+msgstr "Cálculo do financiamento"
+
+#: dialogs/rc.cpp:660
+msgid "Periodic Payment:"
+msgstr "Pagamento Periódico:"
+
+#: dialogs/rc.cpp:661
+msgid "Additional Fees:"
+msgstr "Taxas Adicionais:"
+
+#: dialogs/rc.cpp:662
+msgid "Interest category:"
+msgstr "Categoria de Juros:"
+
+# TODO: De/a partir de?
+#: dialogs/rc.cpp:663
+msgid "Payment from:"
+msgstr "Pagamento a partir de:"
+
+#: dialogs/rc.cpp:666
+msgid "Next due date:"
+msgstr "Próxima data de vencimento:"
+
+#: dialogs/rc.cpp:673
+msgid "Final Payment:"
+msgstr "Pagamento Final:"
+
+# TODO: Verify
+#: dialogs/rc.cpp:675
+msgid "Interest is due:"
+msgstr "Juro pagável:"
+
+#: dialogs/rc.cpp:680
+msgid "Payment frequency:"
+msgstr "Frequência de pagamento:"
+
+#: dialogs/rc.cpp:682
+msgid "Online Quote Configuration"
+msgstr "Configuração de Cotação em linha"
+
+#: dialogs/rc.cpp:687
+msgid "Perl Location:"
+msgstr "Localização do Perl:"
+
+#: dialogs/rc.cpp:688
+msgid "Script:"
+msgstr "Script:"
+
+#: dialogs/rc.cpp:690
+msgid "Reassign payees"
+msgstr "Re-atribuir os beneficiários"
+
+#: dialogs/rc.cpp:691
+msgid ""
+"The transactions associated with the selected payees need to be re-assigned "
+"to a different payee before the selected payees can be deleted. Please "
+"select a payee from the list below."
+msgstr ""
+"As transacções associadas com os beneficiários selecionados precisam ser re-"
+"atribuídas antes que os beneficiários sejam removidos. Por favor, seleccione "
+"um beneficiário na lista abaixo."
+
+#: dialogs/rc.cpp:692
+msgid "Available payees:"
+msgstr "Beneficiários disponíveis:"
+
+#: dialogs/rc.cpp:693
+msgid "Assign deleted names to the above selected payee's matching list"
+msgstr "Atribuir os nomes apagados ao beneficiário seleccionado"
+
+#: dialogs/rc.cpp:696
+msgid "PluginDlg"
+msgstr "PluginDlg"
+
+#: dialogs/rc.cpp:697
+msgid "PlugIn"
+msgstr "Grefão"
+
+#: dialogs/rc.cpp:698 widgets/transaction.cpp:1071
+#: widgets/transaction.cpp:1658
+msgid "Status"
+msgstr "Estado"
+
+#: dialogs/rc.cpp:699
+msgid "Feature"
+msgstr "Característica"
+
+#: dialogs/rc.cpp:703
+msgid "Reconciliation Dialog"
+msgstr "Reconciliação"
+
+#: dialogs/rc.cpp:704
+msgid ""
+"This dialog will assist in helping you to balance your account.\n"
+"\n"
+"Click on an appropriate transaction within one of the two list views to mark "
+"it as reconciled. To create a transaction or edit\n"
+"a transaction you can return to the register by clicking on the Edit "
+"Transactions button.\n"
+"\n"
+"Your account is balanced when the Difference is Zero. Click on the Finish "
+"button to save the reconciled transactions."
+msgstr ""
+"Este diálogo irá ajudá-lo a realizar o balanço da sua conta\n"
+"\n"
+"Clique na transacção apropriada dentro de uma das duas listas visualizadas "
+"para marcá-la como reconciliada. Para criar uma transacção ou editar uma já "
+"existente pode retornar ao registo clicando no botão Editar Transacções.\n"
+"\n"
+"Sua conta está equilibrada quando a Diferença é Zero. Clique no botão "
+"Finalizar para salvar as transacções reconciliadas."
+
+#: dialogs/rc.cpp:705
+msgid "Withdrawals"
+msgstr "Levantamentos"
+
+#: dialogs/rc.cpp:707 dialogs/rc.cpp:708 dialogs/rc.cpp:822
+msgid "$"
+msgstr "$"
+
+#: dialogs/rc.cpp:710
+msgid "Previous Balance:"
+msgstr "Salto Anterior:"
+
+#: dialogs/rc.cpp:711 dialogs/rc.cpp:713 dialogs/rc.cpp:715 dialogs/rc.cpp:717
+#: dialogs/rc.cpp:820
+msgid "0"
+msgstr "0"
+
+#: dialogs/rc.cpp:712
+msgid "Ending Balance:"
+msgstr "Saldo Final:"
+
+# TODO: Verify Clear=Compensar?
+#: dialogs/rc.cpp:714
+msgid "Cleared Balance:"
+msgstr "Saldo Compensado:"
+
+#: dialogs/rc.cpp:716
+msgid "Difference:"
+msgstr "Diferença:"
+
+#: dialogs/rc.cpp:718
+msgid "Edit Transactions..."
+msgstr "Editar Transacções..."
+
+#: dialogs/rc.cpp:721
+msgid "Security List Editor"
+msgstr "Editor de Lista de Títulos"
+
+#: dialogs/rc.cpp:726
+msgid "Market"
+msgstr "Mercado"
+
+#: dialogs/rc.cpp:729
+msgid "Cash Fraction"
+msgstr "Fração do Dinheiro"
+
+#: dialogs/rc.cpp:730
+msgid "Add..."
+msgstr "Adicionar..."
+
+#: dialogs/rc.cpp:732 widgets/kmymoneypriceview.cpp:157
+msgid "Delete..."
+msgstr "Apagar ..."
+
+#: dialogs/rc.cpp:733
+msgid "Show national currencies"
+msgstr "Mostrar moedas nacionais"
+
+#: dialogs/rc.cpp:735
+msgid "KMyMoney - Select Database"
+msgstr "KMyMoney - Seleccionar a Base de Dados"
+
+#: dialogs/rc.cpp:736
+msgid "CAUTION!"
+msgstr "ATENÇÃO!"
+
+#: dialogs/rc.cpp:737
+#, fuzzy
+msgid ""
+"<font color=\"#ff2727\">This software is still in an experimental stage, and "
+"there are still some known response time problems. Please be patient; we are "
+"working on them.\n"
+"As always, please make sure you have adequate backups of your data.</font>"
+msgstr ""
+"<font color=\"#ff2727\"> Este programa ainda é experimental, e pode perder "
+"dados. É favor assegurar-se de ter uma cópia dos dados antes de gravar numa "
+"base de dados.</font>"
+
+#: dialogs/rc.cpp:738
+msgid "Database Type"
+msgstr "Tipo de Base de Dados"
+
+#: dialogs/rc.cpp:739
+msgid "Database Name"
+msgstr "Nome da Base de Dados"
+
+#: dialogs/rc.cpp:740
+msgid "Host Name"
+msgstr "Nome da Máquina"
+
+#: dialogs/rc.cpp:741
+msgid "User Name"
+msgstr "Nome do Utilizador"
+
+#: dialogs/rc.cpp:743
+#, fuzzy
+msgid "Preload &all data"
+msgstr "Pré-carregar todos os dados"
+
+#: dialogs/rc.cpp:745
+msgid "&Generate SQL"
+msgstr "&Criar SQL"
+
+#: dialogs/rc.cpp:747
+msgid "Ca&ncel"
+msgstr "A&nular"
+
+#: dialogs/rc.cpp:762 widgets/rc.cpp:172
+msgid "Sort options"
+msgstr "Opções de ordeno"
+
+#: dialogs/rc.cpp:763
+msgid "Use default"
+msgstr "Usar por omissão"
+
+#: dialogs/rc.cpp:767
+msgid "Correct splits"
+msgstr "Corrigir divisões"
+
+#: dialogs/rc.cpp:769
+msgid "How do you want to proceed?"
+msgstr "Como deseja proceder?"
+
+#: dialogs/rc.cpp:770
+msgid "Continue to edit splits"
+msgstr "Continuar a editar as divisões"
+
+#: dialogs/rc.cpp:771
+#, c-format
+msgid "Change total amount of transaction to %1."
+msgstr "Modificar a quantia total da transacção para %1."
+
+#: dialogs/rc.cpp:772
+msgid "Distribute difference of %1 among all splits."
+msgstr "Distribuir a diferença de %1 entre todas as divisões."
+
+#: dialogs/rc.cpp:773
+msgid "Leave %1 unassigned."
+msgstr "Deixar %1 sem atribuição."
+
+#: dialogs/rc.cpp:776
+msgid "Split transaction"
+msgstr "Parcelar transacção"
+
+#: dialogs/rc.cpp:777
+msgid "<b>11,00<b>"
+msgstr "<b>11,00<b>"
+
+#: dialogs/rc.cpp:778
+msgid "<b>111,00<b>"
+msgstr "<b>111,00<b>"
+
+#: dialogs/rc.cpp:779
+msgid "Unassigned"
+msgstr "Sem atribuição"
+
+# TODO: Verify
+#: dialogs/rc.cpp:780
+msgid "Sum of splits"
+msgstr "Soma das parcelas"
+
+#: dialogs/rc.cpp:781
+msgid "100,00"
+msgstr "100,00"
+
+#: dialogs/rc.cpp:782
+msgid "Transaction amount"
+msgstr "Montante da transacção"
+
+#: dialogs/rc.cpp:783
+msgid "Merge"
+msgstr "Combinar"
+
+#: dialogs/rc.cpp:784
+msgid "Merges splits with the same category to one split"
+msgstr "Combina parcelas com a mesma categoria em uma só"
+
+#: dialogs/rc.cpp:785
+msgid ""
+"In case you have multiple split entries to the same category and you like to "
+"keep them as a single split, press this button. The amount for identical "
+"categories will be added and stored in a single split for that category."
+msgstr ""
+
+#: dialogs/rc.cpp:786
+msgid "Clear &Zero"
+msgstr "Apagar os &Zeros"
+
+#: dialogs/rc.cpp:787
+msgid "Removes all splits that have a value of zero."
+msgstr "Apaga todas as parcelas com um valor de zero."
+
+# TODO: Verify
+#: dialogs/rc.cpp:791
+msgid "New price entry"
+msgstr "Nova entrada de preço"
+
+#: dialogs/rc.cpp:799
+msgid "Void mark"
+msgstr "Marca de vazio"
+
+#: dialogs/rc.cpp:800
+msgid "Opening Balance text"
+msgstr "Texto de Saldo de Abertura"
+
+#: dialogs/rc.cpp:801
+msgid "Type field text"
+msgstr "Texto do campo de tipo"
+
+#: dialogs/rc.cpp:802
+msgid "Account delimiter"
+msgstr "Delimitador de conta"
+
+#: dialogs/rc.cpp:804
+msgid "Attempt to match similar transactions"
+msgstr "Tentar fazer corresponder as transacções parecidas"
+
+#: dialogs/rc.cpp:806 dialogs/rc.cpp:808
+msgid "The format of the dates in the QIF file."
+msgstr "O formato de datas no ficheiro QIF."
+
+#: dialogs/rc.cpp:809 dialogs/rc.cpp:811
+msgid ""
+"If a QIF file contains date entries with years represented with two digits "
+"then either an apostrophe or a slash may be used to delimit the year in the "
+"dates for certain centuries. This enables 1905 to be distinguished from "
+"2005. Specify here which range of years will have year delimited by an "
+"apostrophe (eg. for Quicken this is usually 1900-1949)."
+msgstr ""
+"Se um ficheiro QIF contiver entradas de datas com os anos representados com "
+"dois dígitos então um apóstrofe ou um traço deve ser usado para delimitar o "
+"ano nas datas para determinados séculos. Isto possibilita que 1905 seja "
+"diferenciado de 2005. Especifique aqui o intervalo de anos que terá o ano "
+"delimitado por um apóstrofe (para o Quicken este intervalo normalmente é "
+"1900-1949)."
+
+#: dialogs/rc.cpp:810
+msgid "Apostrophe Handling"
+msgstr "Tratamento de Apóstrofos"
+
+#: dialogs/rc.cpp:812
+msgid "Amounts"
+msgstr "Montantes"
+
+#: dialogs/rc.cpp:813
+msgid "Field"
+msgstr "Campo"
+
+#: dialogs/rc.cpp:814
+msgid "QIF-Record"
+msgstr "Ficheiro QIF"
+
+#: dialogs/rc.cpp:815 dialogs/rc.cpp:833
+msgid "Decimal Symbol"
+msgstr "Símbolo Decimal"
+
+#: dialogs/rc.cpp:816
+msgid "Thousand Delimiter"
+msgstr "Delimitador de Milhar"
+
+#: dialogs/rc.cpp:817
+msgid "SortColumnInvisible"
+msgstr "SortColumnInvisible"
+
+#: dialogs/rc.cpp:819
+msgid "T"
+msgstr "T"
+
+#: dialogs/rc.cpp:821
+msgid "Split-Value"
+msgstr "Valor-Limite"
+
+#: dialogs/rc.cpp:824
+msgid "Commission"
+msgstr "Comissão"
+
+#: dialogs/rc.cpp:825
+msgid "O"
+msgstr "O"
+
+#: dialogs/rc.cpp:826
+msgid "2"
+msgstr "2"
+
+#: dialogs/rc.cpp:828
+msgid "I"
+msgstr "I"
+
+#: dialogs/rc.cpp:829
+msgid "3"
+msgstr "3"
+
+# TODO: Verify
+#: dialogs/rc.cpp:831
+msgid "Q"
+msgstr "Q"
+
+#: dialogs/rc.cpp:832
+msgid "4"
+msgstr "4"
+
+#: dialogs/rc.cpp:834
+msgid "Thousands Separator"
+msgstr "Separador de Milhares"
+
+#: dialogs/rc.cpp:836
+msgid "Output filter location"
+msgstr "Localização do filtro de saída"
+
+#: dialogs/rc.cpp:837
+msgid "Input filter file type"
+msgstr "Filtro de entrada de tipo de ficheiro"
+
+#: dialogs/rc.cpp:838
+msgid "*.qif"
+msgstr "*.qif"
+
+#: dialogs/rc.cpp:839
+msgid "Input filter location"
+msgstr "Localização do filtro de entrada"
+
+#: dialogs/rc.cpp:843
+msgid "Rename"
+msgstr "Renomear"
+
+#: dialogs/kselecttransactionsdlg.cpp:44
+msgid "Select Transaction"
+msgstr "Seleccionar Transacção"
+
+#: dialogs/kselecttransactionsdlg.cpp:45
+msgid ""
+"Select a transaction and press the OK button or use Cancel to select none."
+msgstr ""
+"Selecione uma transacção e pressione 'OK' ou use o 'Cancelar' para não "
+"seleccionar nenhuma."
+
+#: dialogs/knewinvestmentwizard.cpp:62
+msgid "Investment detail wizard"
+msgstr "Assistente de detalhes do Investimento"
+
+#: dialogs/knewinvestmentwizard.cpp:82
+msgid "Security detail wizard"
+msgstr "Assistente de detalhes de título"
+
+#: dialogs/knewaccountdlg.cpp:121 dialogs/knewinvestmentwizard.cpp:109
+msgid ""
+"_: default price mode\n"
+"<default>"
+msgstr "<por omissão>"
+
+#: dialogs/knewaccountdlg.cpp:122 dialogs/knewinvestmentwizard.cpp:110
+msgid "Price per share"
+msgstr "Preço por cota"
+
+#: dialogs/knewaccountdlg.cpp:123 dialogs/knewinvestmentwizard.cpp:111
+msgid "Total for all shares"
+msgstr "Total para todas as acções"
+
+#: dialogs/knewinvestmentwizard.cpp:129
+msgid "This wizard allows you to modify the selected investment."
+msgstr "Este assistente permite-lhe de modificar o investimento seleccionado."
+
+#: dialogs/knewinvestmentwizard.cpp:132
+msgid "This wizard allows you to modify the selected security."
+msgstr "Este assistente permite-lhe de modificar a conta seleccionada."
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid ""
+"The selected symbol is already on file. Do you want to reuse the existing "
+"security?"
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid "Security found"
+msgstr "Título encontrado"
+
+#: dialogs/knewinvestmentwizard.cpp:309
+msgid "Unable to create all objects for the investment"
+msgstr "Não foi possível criar todos os objetos para o investimento"
+
+#: dialogs/keditequityentrydlg.cpp:78
+msgid "Change the price information of the selected entry."
+msgstr "Mudar a informação de preço da entrada seleccionada."
+
+#: dialogs/kaccountselectdlg.cpp:64 widgets/kmymoneybriefschedule.cpp:59
+msgid "&Skip"
+msgstr "&Saltar"
+
+#: dialogs/kaccountselectdlg.cpp:66 widgets/kmymoneybriefschedule.cpp:61
+msgid "Skip this transaction"
+msgstr "Saltar esta transacção"
+
+#: dialogs/kaccountselectdlg.cpp:67
+msgid ""
+"Use this to skip importing this transaction and proceed with the next one."
+msgstr ""
+"Use isto para omitir a importação desta transacção e prosseguir para a "
+"seguinte."
+
+#: dialogs/kaccountselectdlg.cpp:72
+msgid "Create a new account/category"
+msgstr "Criar uma nova conta/categoria"
+
+#: dialogs/kaccountselectdlg.cpp:73
+msgid "Use this to add a new account/category to the file"
+msgstr "Use isto para adicionar uma nova conta/categoria ao ficheiro"
+
+#: dialogs/kaccountselectdlg.cpp:77
+msgid "&Abort"
+msgstr "C&ancelar"
+
+#: dialogs/kaccountselectdlg.cpp:79
+msgid "Abort the import operation and dismiss all changes"
+msgstr "Cancelar a operação de importação e desfazer todas mudanças"
+
+#: dialogs/kaccountselectdlg.cpp:80
+msgid ""
+"Use this to abort the import. Your financial data will be in the state "
+"before you started the QIF import."
+msgstr ""
+"Use isto para abortar a importação. Os seus dados financeiros estarão no "
+"estado que se encontravam antes de iniciar a importação de QIF."
+
+#: dialogs/knewaccountdlg.cpp:110
+msgid "Is a sub account"
+msgstr "É uma sub-conta"
+
+#: dialogs/knewaccountdlg.cpp:184
+msgid "VAT account"
+msgstr "Conta VAT"
+
+#: dialogs/knewaccountdlg.cpp:474
+msgid ""
+"You have not specified a name.\n"
+"Please fill in this field."
+msgstr ""
+"Não especificou um nome.\n"
+"Por favor, preencha este campo."
+
+#: dialogs/knewaccountdlg.cpp:482
+msgid "Please select a parent account."
+msgstr "Por favor, seleccione uma conta pai."
+
+#: dialogs/knewaccountdlg.cpp:489 dialogs/knewaccountdlg.cpp:1029
+msgid "<No Institution>"
+msgstr "<Nenhuma Instituição>"
+
+#: dialogs/knewaccountdlg.cpp:552
+msgid ""
+"An account named <b>%1</b> already exists. You cannot create a second "
+"account with the same name."
+msgstr ""
+"Uma conta chamada <b>%1</b> já existe. Você não pode criar uma segunda conta "
+"com o mesmo nome."
+
+#: dialogs/knewaccountdlg.cpp:567
+msgid ""
+"A category named <b>%1</b> already exists. You cannot create a second "
+"category with the same name."
+msgstr ""
+"Uma categoria chamada <b>%1</b> já existe. Você não pode criar uma segunda "
+"categoria com o mesmo nome."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid ""
+"You have selected to suppress the display of unused categories in the "
+"KMyMoney configuration dialog. The category you just created will therefore "
+"only be shown if it is used. Otherwise, it will be hidden in the accounts/"
+"categories view."
+msgstr ""
+"Você optou por suprimir a exibição de categorias não usadas no diálogo de "
+"configuração do KMyMoney. A categoria recém-criada só será exibida se ela "
+"for usada. Caso contrário, ela ficará oculta na visão de contas/categorias."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid "Hidden categories"
+msgstr "Categorias ocultas"
+
+#: dialogs/knewaccountdlg.cpp:927 dialogs/knewaccountdlg.cpp:979
+#, c-format
+msgid "Is a sub account of %1"
+msgstr "É uma sub-conta de %1"
+
+#: dialogs/knewaccountdlg.cpp:1082
+msgid "Cannot add institution"
+msgstr "Não foi possível adicionar instituição"
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid ""
+"This dialog does not allow to create new payees. Please pick a payee from "
+"the list."
+msgstr ""
+"Esta janela não permite criar novos beneficiários. Por favor indique um "
+"beneficiário na lista."
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid "Payee creation"
+msgstr "Criação de beneficiário"
+
+#: dialogs/kimportdlg.cpp:69
+msgid "Use this to start the import operation"
+msgstr "Use isto para iniciar a operação de importação"
+
+#: dialogs/kimportdlg.cpp:110
+msgid ""
+"%1|Import files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Ficheiros de Importação\n"
+"%2|Todos os ficheiros (*.*)"
+
+#: dialogs/kimportdlg.cpp:111
+msgid "Import File..."
+msgstr "Importar Ficheiro..."
+
+#: dialogs/knewloanwizard.cpp:124
+msgid "Create a new category"
+msgstr "Cria uma nova categoria"
+
+#: dialogs/knewloanwizard.cpp:125
+msgid "Use this to open the new account editor"
+msgstr "Use isto para abrir o editor de nova conta"
+
+#: dialogs/knewloanwizard.cpp:129
+msgid "&Additional fees..."
+msgstr "T&axas adicionais..."
+
+#: dialogs/knewloanwizard.cpp:131
+msgid "Enter additional fees"
+msgstr "Introduzir taxas adicionais"
+
+#: dialogs/knewloanwizard.cpp:132
+msgid ""
+"Use this to add any additional fees other than principal and interest "
+"contained in your periodical payments."
+msgstr ""
+"Use isto para inserir qualquer taxa adicional além do principal e juros "
+"contidos em seus pagamentos periódicos."
+
+#: dialogs/knewloanwizard.cpp:139
+msgid ""
+"Use this to create a new account to which the initial payment should be made"
+msgstr ""
+"Use isto para criar uma nova conta para a qual o pagamento inicial deve ser "
+"feito"
+
+#: dialogs/knewloanwizard.cpp:208
+msgid "To whom do you make payments?"
+msgstr "A quem faz os pagamentos?"
+
+#: dialogs/knewloanwizard.cpp:209
+msgid "Payments to"
+msgstr "Pagamentos a"
+
+#: dialogs/knewloanwizard.cpp:214
+msgid "From whom do you expect payments?"
+msgstr "De quem espera os pagamentos?"
+
+#: dialogs/knewloanwizard.cpp:215
+msgid "Payments from"
+msgstr "Pagamentos de"
+
+#: dialogs/knewloanwizard.cpp:233
+msgid "Please enter the date, the first payment for this loan was/is due."
+msgstr ""
+"Por favor, introduza a data na qual o primeiro pagamento para este "
+"financiamento venceu/vence."
+
+#: dialogs/knewloanwizard.cpp:235
+msgid ""
+"Note: Consult the loan contract for details of the first due date. Keep in "
+"mind, that the first due date usually differs from the date the contract was "
+"signed"
+msgstr ""
+"Nota: Consulte o contracto de financiamento para detalhes da primeira data "
+"de vencimento. Tenha em mente que a primeira data de vencimento normalmente "
+"difere da data no qual o contracto foi assinado"
+
+#: dialogs/knewloanwizard.cpp:240
+msgid ""
+"Please enter the original loan amount in the field below or leave it empty "
+"to be calculated."
+msgstr ""
+"Por favor, introduza o montante original do financiamento no campo abaixo ou "
+"deixe-o vazio para que seja calculado automaticamente."
+
+#: dialogs/knewloanwizard.cpp:248
+msgid ""
+"Please enter the date, the first payment for this loan was/is due this year."
+msgstr ""
+"Por favor, introduza a data em que o primeiro pagamento para este "
+"financiamento venceu/vence neste ano."
+
+#: dialogs/knewloanwizard.cpp:250
+msgid ""
+"Note: You can easily figure out the date of the first payment if you consult "
+"the last statement of last year."
+msgstr ""
+"Nota: Pode facilmente determinar a data do primeiro pagamento consultando o "
+"último extracto do ano passado."
+
+#: dialogs/knewloanwizard.cpp:254
+msgid ""
+"Please enter the remaining loan amount of last years final statement in the "
+"field below. You should not leave this field empty."
+msgstr ""
+"Por favor, introduza o montante remanescente do financiamento relativo ao "
+"extracto final do ano passado. Não deve deixar este campo vazio."
+
+#: dialogs/knewloanwizard.cpp:311 dialogs/knewloanwizard.cpp:326
+#: dialogs/knewloanwizard.cpp:341 dialogs/knewloanwizard.cpp:357
+#: dialogs/knewloanwizard.cpp:373
+msgid "calculate"
+msgstr "calcular"
+
+#: dialogs/knewloanwizard.cpp:417
+msgid "borrowed"
+msgstr "emprestado de"
+
+#: dialogs/knewloanwizard.cpp:419
+msgid "lend"
+msgstr "emprestado a"
+
+#: dialogs/knewloanwizard.cpp:423
+msgid "not assigned"
+msgstr "não atribuído"
+
+#: dialogs/knewloanwizard.cpp:430
+msgid "on reception"
+msgstr "na recepção"
+
+#: dialogs/knewloanwizard.cpp:432
+msgid "on due date"
+msgstr "na data de vencimento"
+
+#: dialogs/knewloanwizard.cpp:471
+msgid ""
+"The loan wizard is unable to calculate two different values for your loan at "
+"the same time. Please enter a value for the %1 on this page or backup to the "
+"page where the current value to be calculated is defined and fill in a "
+"value."
+msgstr ""
+"O assistente de financiamento não é capaz de calcular dois valores "
+"diferentes para o seu financiamento ao mesmo tempo. Por favor, introduza o "
+"valor para o %1 nesta página ou vá até a página onde o valor actual a ser "
+"calculado está definido e preencha um valor."
+
+#: dialogs/knewloanwizard.cpp:500
+msgid ""
+"You selected, that payments have already been made towards this loan. This "
+"requires you to enter the loan amount exactly as found on your last "
+"statement."
+msgstr ""
+"Indicou que pagamentos já foram feitos relativos a este financiamento. Isto "
+"requer que introduza o montante do financiamento exactamente como encontrado "
+"no seu último extracto."
+
+#: dialogs/knewloanwizard.cpp:513
+msgid "interest rate"
+msgstr "taxa de juro"
+
+#: dialogs/knewloanwizard.cpp:522
+msgid "term"
+msgstr "prazo"
+
+#: dialogs/knewloanwizard.cpp:532
+msgid "principal and interest"
+msgstr "principal e juros"
+
+#: dialogs/knewloanwizard.cpp:743
+#, c-format
+msgid ""
+"The number of payments has been decremented and the final payment has been "
+"modified to %1."
+msgstr ""
+"O número de pagamentos foi decrementado e o pagamento final foi modificado "
+"para %1."
+
+#: dialogs/knewloanwizard.cpp:751 dialogs/knewloanwizard.cpp:771
+#, c-format
+msgid "The final payment has been modified to %1."
+msgstr "O pagamento final foi modificado para %1."
+
+#: dialogs/knewloanwizard.cpp:802
+msgid "KMyMoney has calculated a final payment of %1 for this loan."
+msgstr "O KMyMoney calculou o pagamento final de %1 para este financiamento."
+
+#: dialogs/knewloanwizard.cpp:817
+msgid ""
+"You have entered mis-matching information. Please backup to the appropriate "
+"page and update your figures or leave one value empty to let KMyMoney "
+"calculate it for you"
+msgstr ""
+"Introduziu informações discordantes. Por favor, volte à página apropriada e "
+"actualize suas quantias ou deixe um valor vazio para permitir que o KMyMoney "
+"o calcule automaticamente"
+
+#: dialogs/kfindtransactiondlg.cpp:230
+msgid ""
+"Warning: Filtering by Category will exclude all transfers from the results."
+msgstr ""
+"Aviso: a filtragem por Categoria vai excluir todos os transferimentos dos "
+"resultados."
+
+#: dialogs/kfindtransactiondlg.cpp:239
+msgid "(None)"
+msgstr "(Nenhum)"
+
+#: dialogs/kfindtransactiondlg.cpp:241
+msgid "Current selections: "
+msgstr "Selecções Actuais: "
+
+#: dialogs/kfindtransactiondlg.cpp:716
+msgid "Found %1 matching transactions (D %2 / P %3 = %4)"
+msgstr "Encontrei %1 transacções que correspondem (D %2 / P %3 = %4)"
+
+#: dialogs/kfindtransactiondlg.cpp:719
+msgid "Found %1 matching transactions"
+msgstr "Encontrei %1 transacções que correspondem"
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "The institution name field is empty. Please enter the name."
+msgstr ""
+"O campo de nome da instituição está vazio. Por favor, introduza o nome."
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "Adding New Institution"
+msgstr "Adicionando uma Nova Instituição"
+
+#: dialogs/kcsvprogressdlg.cpp:69
+msgid "C&lose"
+msgstr "F&echar"
+
+#: dialogs/kcsvprogressdlg.cpp:247
+msgid " of "
+msgstr " de "
+
+#: widgets/kmymoneypriceview.cpp:126
+msgid "Commodity"
+msgstr "Mercadoria"
+
+#: widgets/kmymoneypriceview.cpp:130
+msgid "Source"
+msgstr "Origem"
+
+#: widgets/kmymoneypriceview.cpp:143
+msgid "Price Options"
+msgstr "Opções de Preço"
+
+#: widgets/kmymoneypriceview.cpp:153
+msgid "Online Price Update..."
+msgstr "Actualização em linha dos Preço..."
+
+#: widgets/kmymoneycombo.cpp:472 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+msgid "From"
+msgstr "De"
+
+#: widgets/transaction.cpp:668
+msgid "Transaction is missing a category assignment."
+msgstr "Está faltando atribuir uma categoria para a transacção."
+
+#: widgets/transaction.cpp:671
+msgid "The transaction has a missing assignment of <b>%1</b>."
+msgstr "Está faltando atribuir <b>%1</b> para a transacção."
+
+#: widgets/transaction.cpp:874
+msgid "Sell"
+msgstr "Vender"
+
+#: widgets/transaction.cpp:876
+msgid "Buy"
+msgstr "Comprar"
+
+#: widgets/kmymoneycombo.cpp:520 widgets/transaction.cpp:879
+#: widgets/transaction.cpp:1447
+msgid "Dividend"
+msgstr "Dividendos"
+
+#: widgets/kmymoneycombo.cpp:518 widgets/transaction.cpp:881
+#: widgets/transaction.cpp:1453
+msgid "Yield"
+msgstr "Rendimento"
+
+#: widgets/transaction.cpp:886 widgets/transaction.cpp:1473
+msgid "Activity"
+msgstr "Actividade"
+
+#: widgets/transaction.cpp:887
+msgid "Investment transaction"
+msgstr "Transacção do Investimento"
+
+#: widgets/transaction.cpp:1021 widgets/transaction.cpp:1114
+#: widgets/transaction.cpp:1165
+msgid "*** UNASSIGNED ***"
+msgstr "*** NÃO ATTRIBUÍDA ***"
+
+#: widgets/kmymoneycombo.cpp:517 widgets/transaction.cpp:1435
+msgid "Add shares"
+msgstr "Adicionar acções"
+
+#: widgets/kmymoneycombo.cpp:516 widgets/transaction.cpp:1438
+msgid "Remove shares"
+msgstr "Remover acções"
+
+#: widgets/kmymoneycombo.cpp:522 widgets/transaction.cpp:1441
+msgid "Buy shares"
+msgstr "Comprar acções"
+
+#: widgets/kmymoneycombo.cpp:521 widgets/transaction.cpp:1444
+msgid "Sell shares"
+msgstr "Vender acções"
+
+#: widgets/transaction.cpp:1450
+msgid "Reinvest Dividend"
+msgstr "Reinvestir Dividendos"
+
+#: widgets/kmymoneycombo.cpp:515 widgets/transaction.cpp:1456
+msgid "Split shares"
+msgstr "Dividir acções"
+
+#: widgets/transaction.cpp:1515
+msgid "Ratio"
+msgstr "Taxa"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:241
+msgid "%1 Bills."
+msgstr "%1 Facturas."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:257
+msgid "%1 Deposits."
+msgstr "%1 Depósitos."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:273
+msgid "%1 Transfers."
+msgstr "%1 Transferências."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:355
+msgid ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+msgstr ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:57
+#: widgets/kmymoneyaccounttreeforecast.cpp:84
+msgid "Current"
+msgstr "Actual"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:72
+#: widgets/kmymoneyaccounttreeforecast.cpp:93
+msgid "Total variation"
+msgstr "Variação total"
+
+#: widgets/stdtransactionmatched.cpp:130
+msgid ""
+"KMyMoney has matched a downloaded transaction with a manually entered one "
+"(result above)"
+msgstr ""
+"KMyMoney fez corresponder uma transacção descarregada com uma inserida "
+"manualmente (resultado abaixo)"
+
+#: widgets/stdtransactionmatched.cpp:138
+msgid "Bank entry:"
+msgstr "Linha do Banco:"
+
+#: widgets/stdtransactionmatched.cpp:166
+msgid "Your entry:"
+msgstr "A sua Linha:"
+
+#: widgets/kbudgetvalues.cpp:187
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a monthly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+"Você inseriu valores de orçamento usando uma base diferente que resultará em "
+"um orçamento mensal de <b>%1</b>. Este valor deve ser usado para preencher o "
+"orçamento mensal?"
+
+#: widgets/kbudgetvalues.cpp:187 widgets/kbudgetvalues.cpp:206
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"_: Auto assignment (caption)\n"
+"Auto assignment"
+msgstr "Attribuir automáticamente"
+
+#: widgets/kbudgetvalues.cpp:206
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a yearly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+"Você inseriu valores de orçamento usando uma base diferente que resultará em "
+"um orçamento anual de <b>%1</b>. Este valor deve ser usado para preencher o "
+"orçamento mensal?"
+
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"You have entered budget values using a different base which would result in "
+"an individual monthly budget of <b>%1</b>. Should this value be used to fill "
+"the monthly budgets?"
+msgstr ""
+"Você inseriu valores de orçamento usando uma base diferente que resultará em "
+"um orçamento mensal individual de <b>%1</b>. Este valor deve ser usado para "
+"preencher o orçamento mensal?"
+
+#: widgets/kmymoneybriefschedule.cpp:62
+#, fuzzy
+msgid "Use this button to skip this transaction"
+msgstr "Use este botão para gravar esta transacção"
+
+#: widgets/kmymoneybriefschedule.cpp:67
+msgid "Record this transaction into the register"
+msgstr "Gravar esta transacção no registo"
+
+#: widgets/kmymoneybriefschedule.cpp:68
+msgid "Use this button to record this transaction"
+msgstr "Use este botão para gravar esta transacção"
+
+#: widgets/kmymoneybriefschedule.cpp:96
+msgid "%1 of %2"
+msgstr "%1 de %2"
+
+#: widgets/kmymoneybriefschedule.cpp:109
+msgid "Payment on %1 for %2 with %3 transactions remaining occuring %4."
+msgstr "Pagamento em %1 para %2 com %3 transacções restantes ocorrendo %4."
+
+#: widgets/kmymoneybriefschedule.cpp:115
+msgid "Payment on %1 for %2 occuring %4."
+msgstr "Pagamento em %1 para %2 ocorrendo %4."
+
+#: widgets/kmymoneybriefschedule.cpp:136
+msgid "%1 days overdue (%2 occurences)."
+msgstr "%1 dias em atraso (%2 ocorrências)."
+
+#: widgets/register.cpp:55
+msgid "Post date"
+msgstr "Data da transacção"
+
+#: widgets/register.cpp:56
+msgid "Date entered"
+msgstr "Data entrada"
+
+#: widgets/register.cpp:60
+msgid "Entry order"
+msgstr "Ordem de entrada"
+
+#: widgets/register.cpp:63
+msgid "Reconcile state"
+msgstr "Estado de reconcilio"
+
+#: widgets/register.cpp:440
+msgid ""
+"_: Deposits onto account\n"
+"Deposits"
+msgstr "Depósitos"
+
+#: widgets/register.cpp:442
+msgid ""
+"_: Payments towards credit card\n"
+"Payments"
+msgstr "Pagamentos"
+
+# TODO: Verify
+#: widgets/register.cpp:446
+msgid ""
+"_: Payments made from account\n"
+"Payments"
+msgstr "Pagamentos"
+
+#: widgets/register.cpp:448
+msgid ""
+"_: Payments made with credit card\n"
+"Charges"
+msgstr "Encargos"
+
+# TODO: Verify
+#: widgets/register.cpp:736
+msgid ""
+"_: Payment made from account\n"
+"Payment"
+msgstr "Pagamento"
+
+#: widgets/register.cpp:737
+msgid ""
+"_: Deposit into account\n"
+"Deposit"
+msgstr "Depósito"
+
+#: widgets/register.cpp:813
+msgid ""
+"_: Payment made with credit card\n"
+"Charge"
+msgstr "Encargo"
+
+#: widgets/register.cpp:814
+msgid ""
+"_: Payment towards credit card\n"
+"Payment"
+msgstr "Pagamento"
+
+#: widgets/register.cpp:818 widgets/register.cpp:824
+msgid ""
+"_: Decrease of asset/liability value\n"
+"Decrease"
+msgstr "Diminuir"
+
+#: widgets/register.cpp:819 widgets/register.cpp:823
+msgid ""
+"_: Increase of asset/liability value\n"
+"Increase"
+msgstr "Aumentar"
+
+#: widgets/register.cpp:2280
+msgid "Prior transactions possibly filtered"
+msgstr "As transacções anteriores foram provavelmente filtradas"
+
+#: widgets/register.cpp:2284
+msgid "Last reconciliation"
+msgstr "Última reconciliação"
+
+#: widgets/register.cpp:2291
+#, c-format
+msgid "Online Statement Balance: %1"
+msgstr "Orçamento do Extracto: %1"
+
+#: widgets/register.cpp:2295
+msgid "This year"
+msgstr "Este ano"
+
+#: widgets/kmymoneycombo.cpp:674 widgets/register.cpp:2296
+msgid "Last month"
+msgstr "Último mês"
+
+#: widgets/register.cpp:2297
+msgid "This month"
+msgstr "Este mês"
+
+#: widgets/register.cpp:2298
+msgid "Last week"
+msgstr "Última semana"
+
+#: widgets/register.cpp:2299
+msgid "This week"
+msgstr "Nesta semana"
+
+#: widgets/register.cpp:2300
+msgid "Yesterday"
+msgstr "Ontem"
+
+#: widgets/kmymoneycombo.cpp:666 widgets/register.cpp:2301
+msgid "Today"
+msgstr "Hoje"
+
+#: widgets/register.cpp:2302 widgets/register.cpp:2307
+msgid "Future transactions"
+msgstr "Futuras transacções"
+
+#: widgets/register.cpp:2303
+msgid "Next week"
+msgstr "Próxima semana"
+
+#: widgets/kmymoneycalendar.cpp:131 widgets/register.cpp:2304
+msgid "Next month"
+msgstr "Próximo mês"
+
+#: widgets/kmymoneycombo.cpp:670 widgets/register.cpp:2315
+msgid "Current fiscal year"
+msgstr "Ano fiscal actual"
+
+#: widgets/register.cpp:2316
+msgid "Previous fiscal year"
+msgstr "Ano fiscal anterior"
+
+#: widgets/register.cpp:2317
+msgid "Next fiscal year"
+msgstr "Próximo ano fiscal"
+
+#: widgets/register.cpp:2349
+msgid ""
+"_: Unknown payee\n"
+"Unknown"
+msgstr "Desconhecido"
+
+#: widgets/register.cpp:2368
+msgid ""
+"_: Unknown category\n"
+"Unknown"
+msgstr "Desconhecido"
+
+#: widgets/register.cpp:2387
+msgid ""
+"_: Unknown security\n"
+"Unknown"
+msgstr "Desconhecida"
+
+#: widgets/klistviewsearchline.cpp:249
+msgid "Search Columns"
+msgstr "Colunas de Procura"
+
+#: widgets/klistviewsearchline.cpp:251
+msgid "All Visible Columns"
+msgstr "Todas as Colunas Visíveis"
+
+#: widgets/klistviewsearchline.cpp:266
+msgid ""
+"_: Column number %1\n"
+"Column No. %1"
+msgstr "Coluna n° %1"
+
+#: widgets/klistviewsearchline.cpp:461 widgets/registersearchline.cpp:286
+msgid "S&earch:"
+msgstr "P&rocurar:"
+
+#: widgets/kmymoneyaccountselector.cpp:110
+#: widgets/kmymoneyaccountselector.cpp:371
+msgid "Income categories"
+msgstr "Categorias de receitas"
+
+#: widgets/kmymoneyaccountselector.cpp:349
+#: widgets/kmymoneyaccountselector.cpp:350
+msgid "Favorites"
+msgstr "Favoritos"
+
+#: widgets/kmymoneyaccountselector.cpp:357
+msgid "Asset accounts"
+msgstr "Contas de activos"
+
+#: widgets/kmymoneyaccountselector.cpp:364
+msgid "Liability accounts"
+msgstr "Contas de passivo"
+
+#: widgets/kmymoneyaccountselector.cpp:381
+msgid "Expense categories"
+msgstr "Categorias de despesas"
+
+#: widgets/kmymoneyaccountselector.cpp:391
+msgid "Equity accounts"
+msgstr "Contas de equidade"
+
+#: widgets/kmymoneyaccounttreebase.cpp:120
+msgid "Total Balance"
+msgstr "Saldo Total"
+
+#: widgets/kmymoneyaccounttreebase.cpp:124
+msgid "Total Value"
+msgstr "Valor Total"
+
+#: widgets/registersearchline.cpp:75
+msgid ""
+"_: label for status combo\n"
+"Stat&us"
+msgstr "Estad&o"
+
+#: widgets/registersearchline.cpp:79
+msgid "Any status"
+msgstr "Qualquer estado"
+
+#: widgets/registersearchline.cpp:80
+msgid "Imported"
+msgstr "Importada"
+
+#: widgets/registersearchline.cpp:81
+msgid "Matched"
+msgstr "Correspondidas"
+
+#: widgets/registersearchline.cpp:82
+msgid "Erroneous"
+msgstr "Errada"
+
+#: widgets/registersearchline.cpp:83
+msgid "Not marked"
+msgstr "Não marcada"
+
+#: widgets/kmymoneyaccounttree.cpp:54
+msgid ""
+"_: Column heading for category in tax report\n"
+"Tax"
+msgstr "Taxa"
+
+#: widgets/kmymoneyaccounttree.cpp:58
+msgid ""
+"_: Column heading for VAT category\n"
+"VAT"
+msgstr "IVA"
+
+#: widgets/kmymoneywizard.cpp:101
+msgid "Continue with next page"
+msgstr "Continuar com a página seguinte"
+
+#: widgets/kmymoneywizard.cpp:103
+msgid "Finish wizard"
+msgstr "Terminar o assistente"
+
+#: widgets/kmymoneywizard.cpp:121
+msgid "&Back"
+msgstr "&Recuar"
+
+#: widgets/kmymoneywizard.cpp:122
+msgid "&Next"
+msgstr "Segui&nte"
+
+#: widgets/kmymoneywizard.cpp:123
+msgid "&Finish"
+msgstr "&Finalizar"
+
+#: widgets/kmymoneywizard.cpp:274
+msgid "Step %1 of %2"
+msgstr "Passo %1 de %2"
+
+#: widgets/kmymoneydateinput.cpp:235
+msgid ""
+"_: Enter todays date into date input widget\n"
+"T"
+msgstr "T"
+
+#: widgets/transactionform.cpp:302
+msgid "&Deposit"
+msgstr "&Depósito"
+
+#: widgets/transactionform.cpp:304 widgets/transactionform.cpp:313
+#: widgets/transactionform.cpp:323 widgets/transactionform.cpp:333
+msgid "&Transfer"
+msgstr "&Transferência"
+
+#: widgets/transactionform.cpp:306
+msgid "&Withdrawal"
+msgstr "&Levantamento"
+
+#: widgets/transactionform.cpp:311
+msgid "&Payment"
+msgstr "&Pagamento"
+
+#: widgets/transactionform.cpp:315
+msgid "&Charge"
+msgstr "En&cargos"
+
+#: widgets/transactionform.cpp:321 widgets/transactionform.cpp:335
+msgid "&Decrease"
+msgstr "&Diminuir"
+
+#: widgets/transactionform.cpp:325 widgets/transactionform.cpp:331
+msgid "&Increase"
+msgstr "&Aumentar"
+
+#: widgets/kmymoneyscheduledcalendar.cpp:42
+msgid "Select Schedules"
+msgstr "Seleccionar Eventos"
+
+#: widgets/kmymoneycalendar.cpp:108
+msgid "Select Style"
+msgstr "Seleccionar Estilo"
+
+#: widgets/kmymoneycalendar.cpp:128
+msgid "Choose Style"
+msgstr "Escolher Estilo"
+
+# TODO: próximo/seguinte?
+# TODO: abaixo igual
+#: widgets/kmymoneycalendar.cpp:129
+msgid "Next year"
+msgstr "Próximo ano"
+
+#: widgets/kmymoneycalendar.cpp:130
+msgid "Previous year"
+msgstr "Ano anterior"
+
+#: widgets/kmymoneycalendar.cpp:132
+msgid "Previous month"
+msgstr "Mês anterior"
+
+#: widgets/kmymoneycalendar.cpp:133
+msgid "Select a week"
+msgstr "Seleccionar uma semana"
+
+#: widgets/kmymoneycalendar.cpp:134
+msgid "Select a month"
+msgstr "Seleccionar um mês"
+
+#: widgets/kmymoneycalendar.cpp:135
+msgid "Select a year"
+msgstr "Seleccionar um ano"
+
+#: widgets/kmymoneycalendar.cpp:249
+msgid "Week XX"
+msgstr "Semana XX"
+
+#: widgets/kmymoneycalendar.cpp:264 widgets/kmymoneycalendar.cpp:300
+#, c-format
+msgid "Week %1"
+msgstr "Semana %1"
+
+#: widgets/rc.cpp:1
+msgid "Account Types"
+msgstr "Tipos de Conta"
+
+#: widgets/rc.cpp:3
+msgid "Detailed description"
+msgstr "Descrição detalhada"
+
+#: widgets/rc.cpp:18
+msgid "Period"
+msgstr "Período"
+
+#: widgets/rc.cpp:21
+msgid "Individual"
+msgstr "Individual"
+
+#: widgets/rc.cpp:23
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Acces to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>Recovery encryption</i> group is only accessible, if the necessary "
+"key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is "
+"found."
+msgstr ""
+"Esta página permite configurar os parâmetros para criptografia de ficheiro "
+"dos seus dados do <b>KMyMoney</b> baseada no <b>GPG</b>.<p>\n"
+"O acesso a estas configurações está desabilitado se o <b>GPG</b> não puder "
+"ser detectado em seu sistema. Neste caso, certifique-se de que o <b>GPG</b> "
+"está funcionando corretamente para o usuário atual.<p>\n"
+"O grupo <i>Criptografia de segurança</i> só está acessível se a chave para o "
+"<b>kmymoney-recover@users.sourceforge.net</b> com ID 0x8AFDDC8E foi "
+"encontrada em seu chaveiro."
+
+#: widgets/rc.cpp:26
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading <i>0x</i>."
+msgstr ""
+"Insira a id da chave que você deseja usar para a criptografia de dados. Isto "
+"pode ser tanto um endereço de e-mail ou a id hexadecimal da chave. No caso "
+"da id da chave, não esqueça o prefixo <i>0x</i>."
+
+#: widgets/rc.cpp:27
+msgid "User ID"
+msgstr "ID do Utilizador"
+
+#: widgets/rc.cpp:29
+msgid "Recovery encryption"
+msgstr "Criptografia de segurança"
+
+#: widgets/rc.cpp:30
+msgid "Also encrypt with kmymoney-recover key"
+msgstr "Também criptografar com a chave de recuperação do KMyMoney"
+
+#: widgets/rc.cpp:32
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out."
+msgstr ""
+"Você pode configurar para que o KMyMoney criptografe os dados também com a "
+"chave de recuperação. Somente os desenvolvedores principais do KMyMoney "
+"possuem a respectiva chave privada necessária para descriptografar os dados."
+"<p>\n"
+"\n"
+"Este mecanismo é fornecido para o caso de você perder sua chave e não "
+"conseguir mais acessar seus dados. Com esta opção ativada, os "
+"desenvolvedores do KMyMoner podem decriptografar os dados e retorná-los para "
+"você em uma forma legível. Por favor, esteja preparado pois terá que "
+"responder questões detalhadas sobre o conteúdo dos seus dados antes que nós "
+"o enviemos de volta."
+
+#: widgets/rc.cpp:51
+msgid "PriceInfo"
+msgstr "PriceInfo"
+
+#: widgets/rc.cpp:52
+msgid "Report Tab"
+msgstr "Página Relatório"
+
+#: widgets/rc.cpp:53
+msgid "<p>On this tab, you set the basic properties of this report.</p>"
+msgstr ""
+"<p>Nesta página, você configura as propriedades básicas deste relatório.</p>"
+
+#: widgets/rc.cpp:54
+msgid "Report Name"
+msgstr "Nome do Relatório"
+
+#: widgets/rc.cpp:55
+msgid "<p>Choose a name for this report.</p>"
+msgstr "<p>Selecione um nome para este relatório.</p>"
+
+#: widgets/rc.cpp:57
+msgid "<p>Enter a comment to help you remember the details of this report.</p>"
+msgstr ""
+"<p>Insira um comentário para ajudá-lo a lembrar-se dos detalhes deste "
+"relatório.</p>"
+
+#: widgets/rc.cpp:58
+msgid "Convert values to base currency"
+msgstr "Converter os valores para a moeda de base"
+
+#: widgets/rc.cpp:59
+msgid ""
+"_: Convert 'em!!\n"
+"<p>Select this option to convert all values in the report to your base "
+"currency.</p><p>Leave it unchecked if you'd like to see values in their "
+"original currency.</p><p>If currencies are not converted, then subtotals "
+"will not be shown.</p>"
+msgstr ""
+"<p>Seleccione esta opção para converter todos os valores do relatório na sua "
+"moeda de base.</p><p>Não a marque se quiser obter os valores na moeda de "
+"origem.</p><p>Se as moedas não forem convertidas, os sub-totais não vão ser "
+"dados.</p>"
+
+#: widgets/rc.cpp:60
+msgid "Mark as a favorite report"
+msgstr "Marcar como um relatório favorito"
+
+#: widgets/rc.cpp:61
+msgid ""
+"<p>Select this option to notate this report as one of your favorites.</"
+"p><p>All your favorite reports are grouped in one place on the report list "
+"for easy access.</p>"
+msgstr ""
+"<p>Seleccione esta opção para anotar este relatório como um de seus "
+"favoritos.</p><p>Todos os seus relatórios favoritos são agrupados em um "
+"local na lista de relatórios para fácil acesso.</p>"
+
+#: widgets/rc.cpp:62 widgets/rc.cpp:88
+msgid "Rows/Columns Tab"
+msgstr "Página Linhas/Colunas"
+
+#: widgets/rc.cpp:63 widgets/rc.cpp:89
+msgid ""
+"<p>On this tab, you configure how you'd like the rows and columns to be "
+"selected and organized.</p>"
+msgstr ""
+"<p>Nesta página, você configura como gostaria que as linhas e colunas sejam "
+"selecionadas e organizadas.</p>"
+
+#: widgets/rc.cpp:69 widgets/rc.cpp:81
+msgid ""
+"<p>Choose what kind of accounts to display as the rows of this report.</p>"
+msgstr ""
+"<p>Selecione que tipo de contas exibir como linhas neste relatório.</p>"
+
+#: widgets/rc.cpp:71
+msgid "Columns"
+msgstr "Colunas"
+
+#: widgets/rc.cpp:75
+msgid "Bi-Monthly"
+msgstr "Bi-Mensalmente"
+
+#: widgets/rc.cpp:78
+msgid "<p>Choose how large of a time period each column should encompass</p>"
+msgstr ""
+"<p>Selecione quão largo de um período de tempo cada coluna deve abranger</p>"
+
+#: widgets/rc.cpp:79
+msgid "Income & Expenses"
+msgstr "Receitas e Despesas"
+
+#: widgets/rc.cpp:80
+msgid "Assets & Liabilities"
+msgstr "Ativos & Obrigações"
+
+#: widgets/rc.cpp:82
+msgid "Rows"
+msgstr "Linhas"
+
+#: widgets/rc.cpp:83
+msgid "Show totals column"
+msgstr "Mostrar a coluna dos totais"
+
+#: widgets/rc.cpp:84
+msgid "Average days"
+msgstr "Média de dias"
+
+#: widgets/rc.cpp:85
+msgid "Include scheduled transactions"
+msgstr "Incluir as transacções agendadas"
+
+#: widgets/rc.cpp:86
+msgid "Include transfers"
+msgstr "Incluir as transferências"
+
+#: widgets/rc.cpp:87
+msgid "Include unused accounts/categories"
+msgstr "Incluir as contas e categorias não usadas"
+
+#: widgets/rc.cpp:90
+msgid "Organize by:"
+msgstr "Organizadas por:"
+
+#: widgets/rc.cpp:92
+msgid "Top Categories"
+msgstr "Top Categorias"
+
+#: widgets/rc.cpp:95
+msgid "Top Accounts"
+msgstr "Top Contas"
+
+#: widgets/rc.cpp:98
+msgid "<p>Choose how to group the transactions in this report</p>"
+msgstr "<p>Seleccione como agrupar as transacções neste relatório</p>"
+
+#: widgets/rc.cpp:99
+msgid "Show Columns"
+msgstr "Mostrar as Colunas"
+
+#: widgets/rc.cpp:100
+msgid ""
+"<p>Choose which columns should be shown in the report.</p><p>The date and "
+"transaction amount are always shown.</p>"
+msgstr ""
+"<p>Selecione quais colunas devem ser mostradas no relatório.</p><p>A data e "
+"o montante da transacção são sempre mostrados.</p>"
+
+#: widgets/rc.cpp:102
+msgid "<p>Select this option to show the Memo column</p>"
+msgstr "<p>Selecione esta opção para mostrar a coluna Memo</p>"
+
+#: widgets/rc.cpp:104
+msgid "<p>Select this option to show the Shares column for investments</p>"
+msgstr ""
+"<p>Selecione esta opção para mostrar a coluna Cotas para investimentos</p>"
+
+#: widgets/rc.cpp:106
+msgid "<p>Select this option to show the Price column for investments</p>"
+msgstr ""
+"<p>Selecione esta opção para mostrar a coluna Preço para os investimentos</p>"
+
+#: widgets/rc.cpp:108
+msgid "<p>Select this option to show the Reconciled column</p>"
+msgstr "<p>Selecione esta opção para mostrar a coluna Reconciliado</p>"
+
+#: widgets/rc.cpp:110
+msgid "<p>Select this option to show the Account column</p>"
+msgstr "<p>Selecione esta opção para mostrar a coluna Conta</p>"
+
+#: widgets/rc.cpp:112
+msgid "<p>Select this option to show the Number column</p>"
+msgstr "<p>Selecione esta opção para mostrar a coluna Número</p>"
+
+#: widgets/rc.cpp:114
+msgid "<p>Select this option to show the Payee column</p>"
+msgstr "<p>Selecione esta opção para mostrar a coluna Beneficiário</p>"
+
+#: widgets/rc.cpp:116
+msgid "<p>Select this option to show the Category column</p>"
+msgstr "<p>Seleccione esta opção para mostrar a coluna Categoria</p>"
+
+#: widgets/rc.cpp:118
+msgid "<p>Select this option to show the Action column</p>"
+msgstr "<p>Selecione esta opção para mostrar a coluna Acção</p>"
+
+#: widgets/rc.cpp:120
+msgid "<p>Select this option to show the Running balance column</p>"
+msgstr "<p>Selecione esta opção para mostrar a coluna de saldo em execução</p>"
+
+#: widgets/rc.cpp:121
+msgid "Include only Loan accounts"
+msgstr "Incluir apenas as Contas de Empréstimo"
+
+#: widgets/rc.cpp:122
+msgid "Include only Investment accounts"
+msgstr "Incluir sómente as Contas de Investimento"
+
+#: widgets/rc.cpp:123 widgets/rc.cpp:127
+msgid ""
+"<p>Check this box to include only those categories which have been marked to "
+"\"Include on Tax Reports\"</p>"
+msgstr ""
+"<p>Active esta caixa para incluir somente aquelas categorias marcadas para "
+"\"Incluir no Relatório de Taxas\"</p>"
+
+#: widgets/rc.cpp:124
+msgid "Hide Split Transaction Details"
+msgstr "Ocultar Detalhes da Parcela da Transacção"
+
+#: widgets/rc.cpp:125
+msgid ""
+"Do not display the individual transactions that make up a split transaction"
+msgstr ""
+"Não exibir transacções individuais que fazem parte de uma parcela de "
+"transacção"
+
+#: widgets/rc.cpp:126
+msgid "Include only Tax categories"
+msgstr "Incluir somente categorias de Impostos"
+
+#: widgets/rc.cpp:128
+msgid "Chart Tab"
+msgstr "Gráficos"
+
+#: widgets/rc.cpp:129
+msgid "<p>On this tab, you configure the chart drawn forthis report.</p>"
+msgstr ""
+"<p>Nesta página, você pode configurar os gráficos gerados para este "
+"relatório.</p>"
+
+#: widgets/rc.cpp:130
+msgid "Chart Type"
+msgstr "Tipo de Gráfico"
+
+#: widgets/rc.cpp:131
+msgid "<p>Select what form you would like the chart to be drawn as.</p>"
+msgstr ""
+"<p>Selecione a forma que você gostaria que o gráfico fosse desenhado.</p>"
+
+#: widgets/rc.cpp:132
+msgid "Line"
+msgstr "Linha"
+
+#: widgets/rc.cpp:133
+msgid "Bar"
+msgstr "Barra"
+
+#: widgets/rc.cpp:134
+msgid "Stacked Bar"
+msgstr "Barra Empilhada "
+
+#: widgets/rc.cpp:135
+msgid "Pie"
+msgstr "Circular"
+
+#: widgets/rc.cpp:136
+msgid "Ring"
+msgstr "Anel"
+
+#: widgets/rc.cpp:137
+msgid "Show grid lines"
+msgstr "Mostrar as linhas da grelha"
+
+#: widgets/rc.cpp:138
+msgid ""
+"<p>Select this option to show horizontal and vertical grid lines on the "
+"chart.</p>"
+msgstr ""
+"<p> Seleccione esta opção para ver as linhas horizontais e verticais no "
+"gráfico.</p>"
+
+#: widgets/rc.cpp:139
+msgid "Draw values on chart"
+msgstr "Mostrar os valors no gráfico"
+
+#: widgets/rc.cpp:140
+msgid ""
+"<p>Select this option to draw the numeric values for data points next to "
+"their plot location.</p>"
+msgstr ""
+"<p> Seleccione esta opção para ver os valores numéricos perto dos pontos de "
+"marcação.</p>"
+
+#: widgets/rc.cpp:141
+msgid "Show as chart by default"
+msgstr "Mostrar como gráfico por omissão"
+
+#: widgets/rc.cpp:142
+msgid ""
+"<p>Select this option to cause the report to be shown as a chart when you "
+"first open the report. Otherwise, it will come up as a text report.</p>"
+msgstr ""
+"<p>Seleccione esta opção para ver o relatório como gráfico quando abre o "
+"relatório. Senão, vai obter o relatrio textual.</p>"
+
+#: widgets/rc.cpp:143
+msgid "Line width"
+msgstr ""
+
+#: widgets/rc.cpp:144
+#, fuzzy
+msgid "<p>Select what width should be used to draw the line on the chart</p>"
+msgstr ""
+"<p> Seleccione esta opção para ver as linhas horizontais e verticais no "
+"gráfico.</p>"
+
+#: widgets/rc.cpp:145
+msgid "ReportControl"
+msgstr "ReportControl"
+
+#: widgets/rc.cpp:149
+msgid "Configure this report"
+msgstr "Configurar este relatório"
+
+#: widgets/rc.cpp:151
+msgid "Create a new report based on this one"
+msgstr "Criar um novo relatório baseado neste"
+
+#: widgets/rc.cpp:153
+msgid "Copy this report to the clipboard"
+msgstr "Copiar este relatório para a área de transferência"
+
+#: widgets/rc.cpp:155
+msgid "Export this report as an HTML or CSV file"
+msgstr "Exportar este relatório como um ficheiro HTML ou CSV"
+
+#: widgets/rc.cpp:157
+msgid "Permanently delete this report"
+msgstr "Apagar permanentemente este relatório"
+
+#: widgets/rc.cpp:159
+msgid "Close this window"
+msgstr "Fechar esta janela"
+
+#: widgets/rc.cpp:162
+msgid "n of n"
+msgstr "n de n"
+
+#: widgets/rc.cpp:166
+msgid "Account:"
+msgstr "Conta:"
+
+#: widgets/rc.cpp:168
+msgid "Enter..."
+msgstr "Entrar..."
+
+#: widgets/rc.cpp:171
+msgid "TransactionSortOptionDecl"
+msgstr "TransactionSortOptionDecl"
+
+#: widgets/rc.cpp:173
+msgid "Sort order"
+msgstr "Ordenar"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Sunday\n"
+"Sun"
+msgstr "Dom"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Saturday\n"
+"Sat"
+msgstr "Sáb"
+
+#: widgets/kmymoneydatetbl.cpp:171 widgets/kmymoneydatetbl.cpp:178
+msgid "Week %1 for year %2."
+msgstr "Semana %1 do ano %2."
+
+#: widgets/kmymoneycombo.cpp:417
+msgid "ATM"
+msgstr "ATM"
+
+#: widgets/kmymoneycombo.cpp:418
+msgid "Withdrawal"
+msgstr "Levantamento"
+
+#: widgets/kmymoneycombo.cpp:421
+msgid "Cheque"
+msgstr "Cheque"
+
+#: widgets/kmymoneycombo.cpp:469
+msgid ""
+"_: Activity for expense categories\n"
+"Paid"
+msgstr "Pago"
+
+#: widgets/kmymoneycombo.cpp:470
+msgid ""
+"_: Activity for income categories\n"
+"Received"
+msgstr "Recebido"
+
+#: widgets/kmymoneycombo.cpp:519
+msgid "Reinvest dividend"
+msgstr "Reinvestir os dividendos"
+
+#: widgets/kmymoneycombo.cpp:664
+msgid "All dates"
+msgstr "Todas as datas"
+
+#: widgets/kmymoneycombo.cpp:665
+msgid "As of today"
+msgstr "Como a de hoje"
+
+#: widgets/kmymoneycombo.cpp:667
+msgid "Current month"
+msgstr "Mês actual"
+
+#: widgets/kmymoneycombo.cpp:668
+msgid "Current quarter"
+msgstr "Trimestre actual"
+
+#: widgets/kmymoneycombo.cpp:669
+msgid "Current year"
+msgstr "Ano actual"
+
+#: widgets/kmymoneycombo.cpp:671
+msgid "Month to date"
+msgstr "Início do mês até hoje"
+
+#: widgets/kmymoneycombo.cpp:672
+msgid "Year to date"
+msgstr "Início do ano até hoje"
+
+#: widgets/kmymoneycombo.cpp:673
+msgid "Year to month"
+msgstr "Ano até mês"
+
+#: widgets/kmymoneycombo.cpp:675
+msgid "Last year"
+msgstr "Último ano"
+
+#: widgets/kmymoneycombo.cpp:676
+msgid "Last fiscal year"
+msgstr "Último ano fiscal"
+
+#: widgets/kmymoneycombo.cpp:677
+msgid "Last 7 days"
+msgstr "Últimos 7 dias"
+
+#: widgets/kmymoneycombo.cpp:678
+msgid "Last 30 days"
+msgstr "Últimos 30 dias"
+
+#: widgets/kmymoneycombo.cpp:679
+msgid "Last 3 months"
+msgstr "Últimos 3 meses"
+
+#: widgets/kmymoneycombo.cpp:680
+msgid "Last quarter"
+msgstr "Último trimestre"
+
+#: widgets/kmymoneycombo.cpp:681
+msgid "Last 6 months"
+msgstr "Últimos 6 meses"
+
+#: widgets/kmymoneycombo.cpp:682
+msgid "Last 11 months"
+msgstr "Últimos 11 meses"
+
+#: widgets/kmymoneycombo.cpp:683
+msgid "Last 12 months"
+msgstr "Últimos 12 meses"
+
+#: widgets/kmymoneycombo.cpp:684
+msgid "Next 7 days"
+msgstr "7 dias seguintes"
+
+#: widgets/kmymoneycombo.cpp:685
+msgid "Next 30 days"
+msgstr "Próximos 30 dias"
+
+#: widgets/kmymoneycombo.cpp:686
+msgid "Next 3 months"
+msgstr "Próximos 3 meses"
+
+#: widgets/kmymoneycombo.cpp:687
+msgid "Next quarter"
+msgstr "Próximo trimestre"
+
+#: widgets/kmymoneycombo.cpp:688
+msgid "Next 6 months"
+msgstr "Próximos 6 meses"
+
+#: widgets/kmymoneycombo.cpp:689
+msgid "Next 12 months"
+msgstr "Próximos 12 meses"
+
+#: widgets/kmymoneycombo.cpp:690
+msgid "Last 3 months to next 3 months"
+msgstr "Últimos 3 meses até 3 próximos meses"
+
+#: widgets/kmymoneycombo.cpp:691
+msgid "User defined"
+msgstr "Definido pelo utilizador"
+
+#~ msgid "Reset"
+#~ msgstr "Reiniciar"
+
+#~ msgid "No plugins loaded"
+#~ msgstr "Nenhum grefão carregado"
+
+#~ msgid "Create schedule..."
+#~ msgstr "Criar evento..."
+
+#~ msgid "New schedule..."
+#~ msgstr "Novo agendamento..."
+
+#~ msgid "Edit schedule..."
+#~ msgstr "Editar previsão..."
+
+#~ msgid "Delete schedule..."
+#~ msgstr "Apagar agendamento..."
+
+#~ msgid "Duplicate schedule"
+#~ msgstr "Duplicar agendamento"
+
+#~ msgid "Enter schedule..."
+#~ msgstr "Marcar o agendamento..."
+
+#~ msgid "Skip schedule..."
+#~ msgstr "Ignorar agendamento..."
+
+#~ msgid "Adjusting schedules..."
+#~ msgstr "Ajustando os agendamentos..."
+
+#~ msgid "Add schedule"
+#~ msgstr "Adicionar agendamento"
+
+#~ msgid "Unable to enter transaction for schedule '%1'"
+#~ msgstr "Não foi possível inserir a transacção para o agendamento '%1'"
+
+#~ msgid "Loaded"
+#~ msgstr "Carregado"
+
+#~ msgid ""
+#~ "_: Plugin interface description\n"
+#~ "Online access"
+#~ msgstr "Acesso em linha"
+
+#~ msgid ""
+#~ "_: Plugin interface description\n"
+#~ "File import"
+#~ msgstr "Importe de ficheiro"
+
+#~ msgid "not loaded: %1"
+#~ msgstr "não carregado: %1"
+
+#~ msgid "Schedule options"
+#~ msgstr "Opções de Agendamento"
+
+#~ msgid "New Schedule"
+#~ msgstr "Novo Evento"
+
+#~ msgid "Edit Schedule"
+#~ msgstr "Editar Agendamento"
+
+#~ msgid "Search transactions containing the following text"
+#~ msgstr "Procurar transacções contendo o seguinte texto"
+
+#~ msgid "Search"
+#~ msgstr "Procurar"
+
+#~ msgid "&Search"
+#~ msgstr "&Procurar"
+
+#~ msgid "Start the search"
+#~ msgstr "Iniciar a procura"
+
+#~ msgid "Takes the current criteria and searches for matching transactions."
+#~ msgstr ""
+#~ "Toma os critérios actuais e procura por transacções que casem com estes "
+#~ "critérios."
+
+#~ msgid "Reset all settings"
+#~ msgstr "Reiniciar todas configurações"
+
+#~ msgid ""
+#~ "Use this to reset all settings to the state they were when the dialog was "
+#~ "opened."
+#~ msgstr ""
+#~ "Use isto para retornar todas as configurações ao estado em que elas se "
+#~ "encontravam quando o diálogo foi aberto."
+
+#~ msgid "Use this button to close the window"
+#~ msgstr "Use este botão para fechar a janela"
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644
index 0000000..e5ee6de
--- /dev/null
+++ b/po/pt_BR.po
@@ -0,0 +1,14013 @@
+# Tradução de pt_BR.po para Brazilian Portuguese
+# translation of kmymoney2.po to Brazilian Portuguese
+#
+# This file is distributed under the same license as the KMyMoney package.
+#
+#
+# Rogério Guerra Borin <rogerio.borin@ig.com.br>, 2004.
+# Rogerio Guerra Borin <rogerio.borin@ig.com.br>, 2004.
+# Marcus Gama <marcus.gama@gmail.com>, 2006, 2008, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmymoney2\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-25 19:04+0200\n"
+"PO-Revision-Date: 2009-06-26 19:21-0300\n"
+"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
+"Language-Team: Brazilian Portuguese <kde-i18n-pt_br@kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 0.3\n"
+"Plural-Forms: nplurals=2; plural=(n>1);\n"
+
+#: wizards/wizardpages/rc.cpp:1
+msgid ""
+"Select groups of accounts that correspond to the ways that you will use "
+"KMyMoney. Each group you select will cause several accounts and categories "
+"to be created. Select the groups that are relevant to you. You can always "
+"create additional accounts manually later."
+msgstr ""
+"Selecione os grupos de contas que correspondem à maneira a qual você "
+"utilizará o KMyMoney. Cada grupo que selecionar implicará em diversas contas "
+"e categorias a serem criadas. Selecione os grupos que são relevantes para "
+"você. Você sempre poderá criar contas adicionais manualmente mais tarde."
+
+#: wizards/wizardpages/rc.cpp:2
+msgid ""
+"<p>KMyMoney supports multiple currencies, nevertheless one of them will be "
+"used as your base currency. The base currency is used as default for new "
+"accounts and reports. Please select the base currency from the following "
+"list."
+msgstr ""
+"<p>O KMyMoney suporta várias moedas, no entanto apenas uma delas será usada "
+"como moeda base. A moeda base é usada por padrão nas novas contas e nos "
+"relatórios. Por favor, selecione a moeda base na lista a seguir."
+
+#: dialogs/kequitypriceupdatedlg.cpp:71 dialogs/rc.cpp:399 dialogs/rc.cpp:485
+#: dialogs/rc.cpp:724 dialogs/settings/rc.cpp:108 reports/listtable.cpp:226
+#: views/kinvestmentview.cpp:71 views/kpayeesview.cpp:351 views/rc.cpp:13
+#: widgets/rc.cpp:5 widgets/rc.cpp:34
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1599
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1629
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1673
+#: wizards/wizardpages/rc.cpp:3
+msgid "Name"
+msgstr "Nome"
+
+#: wizards/wizardpages/rc.cpp:4
+msgid "ISO Code"
+msgstr "Código ISO"
+
+# TODO: Verify
+#: dialogs/kequitypriceupdatedlg.cpp:69 dialogs/kequitypriceupdatedlg.cpp:70
+#: dialogs/rc.cpp:71 dialogs/rc.cpp:725 dialogs/settings/rc.cpp:112
+#: views/kinvestmentview.cpp:72 widgets/rc.cpp:37 wizards/wizardpages/rc.cpp:5
+msgid "Symbol"
+msgstr "Símbolo"
+
+#: wizards/wizardpages/rc.cpp:6
+msgid ""
+"<p>Use the fields below to enter some information about yourself.</p>\n"
+"\n"
+"<p>All information is optional and only used to personalize your KMyMoney "
+"file.</p>"
+msgstr ""
+"<p>Use os campos abaixo para inserir algumas informações sobre si.</p>\n"
+"\n"
+"<p>Todas informações são opcionais e são oferecidas somente para "
+"personalizar o seu arquivo KMyMoney.</p>"
+
+#: dialogs/rc.cpp:425 wizards/newuserwizard/rc.cpp:27
+#: wizards/wizardpages/rc.cpp:7
+msgid "Town:"
+msgstr "Cidade:"
+
+#: dialogs/rc.cpp:420 wizards/newuserwizard/rc.cpp:22
+#: wizards/wizardpages/rc.cpp:8
+msgid "County/State:"
+msgstr "País/Estado:"
+
+#: dialogs/rc.cpp:391 dialogs/rc.cpp:421 wizards/newuserwizard/rc.cpp:23
+#: wizards/wizardpages/rc.cpp:9
+msgid "Street:"
+msgstr "Rua:"
+
+#: dialogs/rc.cpp:422 wizards/newuserwizard/rc.cpp:24
+#: wizards/wizardpages/rc.cpp:10
+msgid "Email:"
+msgstr "E-mail:"
+
+#: dialogs/rc.cpp:424 wizards/newuserwizard/rc.cpp:26
+#: wizards/wizardpages/rc.cpp:11
+msgid "Telephone:"
+msgstr "Telefone:"
+
+#: dialogs/rc.cpp:423 wizards/newuserwizard/rc.cpp:25
+#: wizards/wizardpages/rc.cpp:12
+msgid "Your name:"
+msgstr "Seu nome:"
+
+#: dialogs/rc.cpp:427 wizards/newuserwizard/rc.cpp:29
+#: wizards/wizardpages/rc.cpp:13
+msgid "Load from Addressbook"
+msgstr "Carregar do Livro de Endereços"
+
+#: dialogs/rc.cpp:392 dialogs/rc.cpp:426 views/rc.cpp:68
+#: wizards/wizardpages/rc.cpp:14
+msgid "Postal Code:"
+msgstr "Código Postal:"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:82
+msgid "KMyMoney New Account Setup"
+msgstr "Configuração de Nova Conta do KMyMoney"
+
+#: dialogs/rc.cpp:360 dialogs/rc.cpp:361 reports/listtable.cpp:230
+#: wizards/newaccountwizard/knewaccountwizard.cpp:83
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1616
+#: wizards/newaccountwizard/rc.cpp:61
+msgid "Institution"
+msgstr "Instituição"
+
+#: dialogs/investactivities.cpp:198 dialogs/investactivities.cpp:286
+#: dialogs/investactivities.cpp:367 dialogs/kfindtransactiondlg.cpp:181
+#: dialogs/rc.cpp:139 dialogs/rc.cpp:192 dialogs/rc.cpp:207
+#: dialogs/transactioneditor.cpp:734 reports/listtable.cpp:201
+#: reports/pivottable.cpp:1336 reports/pivottable.cpp:1586
+#: views/kforecastview.cpp:393 views/kgloballedgerview.cpp:175
+#: views/khomeview.cpp:418 views/khomeview.cpp:491 views/khomeview.cpp:525
+#: views/khomeview.cpp:764 views/khomeview.cpp:967 views/khomeview.cpp:1437
+#: views/kscheduledview.cpp:71 views/rc.cpp:17 views/rc.cpp:44
+#: widgets/kmymoneyaccounttreebase.cpp:58
+#: widgets/kmymoneyaccounttreeforecast.cpp:41 widgets/rc.cpp:109
+#: widgets/register.cpp:566 widgets/transaction.cpp:978
+#: widgets/transaction.cpp:1535
+#: wizards/newaccountwizard/knewaccountwizard.cpp:84
+msgid "Account"
+msgstr "Conta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:85
+msgid "Broker"
+msgstr "Corretor"
+
+#: dialogs/kfindtransactiondlg.cpp:225 dialogs/rc.cpp:70 dialogs/rc.cpp:104
+#: dialogs/rc.cpp:159 dialogs/rc.cpp:223 dialogs/rc.cpp:246 dialogs/rc.cpp:751
+#: dialogs/settings/rc.cpp:109 widgets/rc.cpp:35 widgets/register.cpp:568
+#: wizards/newaccountwizard/knewaccountwizard.cpp:86
+msgid "Details"
+msgstr "Detalhes"
+
+#: dialogs/knewloanwizard.cpp:636 dialogs/rc.cpp:231 dialogs/rc.cpp:608
+#: kmymoneyutils.cpp:191 views/khomeview.cpp:399
+#: wizards/newaccountwizard/knewaccountwizard.cpp:87
+#: wizards/newaccountwizard/knewaccountwizard.cpp:880
+msgid "Payments"
+msgstr "Pagamentos"
+
+#: dialogs/investactivities.cpp:195 dialogs/investactivities.cpp:283
+#: dialogs/investactivities.cpp:422 dialogs/investtransactioneditor.cpp:217
+#: reports/listtable.cpp:221 widgets/transaction.cpp:1565
+#: wizards/newaccountwizard/knewaccountwizard.cpp:88
+msgid "Fees"
+msgstr "Taxas"
+
+#: dialogs/rc.cpp:624 views/khomeview.cpp:415 views/khomeview.cpp:488
+#: views/khomeview.cpp:522 wizards/newaccountwizard/knewaccountwizard.cpp:89
+msgid "Schedule"
+msgstr "Agendamento"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:90
+msgid "Payout"
+msgstr "Pagar a"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:91
+msgid "Parent Account"
+msgstr "Conta Pai"
+
+#: dialogs/rc.cpp:719 wizards/newaccountwizard/knewaccountwizard.cpp:92
+#: wizards/newuserwizard/knewuserwizard.cpp:86
+msgid "Finish"
+msgstr "Terminar"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:248
+msgid "Credit card payment"
+msgstr "Pagamento de cartão de crédito"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:264
+#, c-format
+msgid "Loan payment for %1"
+msgstr "Pagamento de financiamento para %1"
+
+#: mymoney/mymoneyscheduled.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:279
+msgid "Loan payment"
+msgstr "Pagamento de financiamento"
+
+#: dialogs/rc.cpp:134 wizards/newaccountwizard/knewaccountwizard.cpp:293
+msgid "Amortization"
+msgstr "Amortização"
+
+#: dialogs/investactivities.cpp:196 dialogs/investactivities.cpp:284
+#: dialogs/investactivities.cpp:366 dialogs/investactivities.cpp:423
+#: dialogs/investtransactioneditor.cpp:227 dialogs/rc.cpp:135
+#: dialogs/rc.cpp:152 dialogs/rc.cpp:544 reports/listtable.cpp:222
+#: widgets/transaction.cpp:1597
+#: wizards/newaccountwizard/knewaccountwizard.cpp:302
+msgid "Interest"
+msgstr "Juros"
+
+#: dialogs/kcurrencycalculator.cpp:282
+#: wizards/newaccountwizard/knewaccountwizard.cpp:351
+#: wizards/newaccountwizard/knewaccountwizard.cpp:356
+msgid "User"
+msgstr "Usuário"
+
+#: kmymoneyutils.cpp:64 mymoney/mymoneyaccount.cpp:711
+#: reports/querytabletest.cpp:422
+#: wizards/newaccountwizard/knewaccountwizard.cpp:451
+msgid "Checking"
+msgstr "Corrente"
+
+#: kmymoneyutils.cpp:66 mymoney/mymoneyaccount.cpp:714
+#: wizards/newaccountwizard/knewaccountwizard.cpp:452
+msgid "Savings"
+msgstr "Poupança"
+
+#: kmymoneyutils.cpp:68 mymoney/mymoneyaccount.cpp:717
+#: reports/querytabletest.cpp:423
+#: wizards/newaccountwizard/knewaccountwizard.cpp:453
+msgid "Credit Card"
+msgstr "Cartão de Crédito"
+
+#: kmymoneyutils.cpp:70 mymoney/mymoneyaccount.cpp:720
+#: wizards/newaccountwizard/knewaccountwizard.cpp:454
+msgid "Cash"
+msgstr "Dinheiro"
+
+#: kmymoneyutils.cpp:72 mymoney/mymoneyaccount.cpp:723
+#: wizards/newaccountwizard/knewaccountwizard.cpp:455
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+msgid "Loan"
+msgstr "Financiamento"
+
+#: kmymoneyutils.cpp:76 mymoney/mymoneyaccount.cpp:729
+#: wizards/newaccountwizard/knewaccountwizard.cpp:456
+msgid "Investment"
+msgstr "Investimento"
+
+#: converter/mymoneytemplate.cpp:178 converter/mymoneytemplate.cpp:179
+#: dialogs/knewaccountdlg.cpp:1014 kmymoneyutils.cpp:80
+#: mymoney/mymoneyaccount.cpp:735 views/kaccountsview.cpp:352
+#: views/kmymoneyview.cpp:765 widgets/kmymoneyaccountselector.cpp:177
+#: widgets/kmymoneyaccountselector.cpp:356
+#: wizards/newaccountwizard/knewaccountwizard.cpp:457
+msgid "Asset"
+msgstr "Ativo"
+
+#: converter/mymoneytemplate.cpp:182 converter/mymoneytemplate.cpp:183
+#: dialogs/knewaccountdlg.cpp:1016 kmymoneyutils.cpp:82
+#: mymoney/mymoneyaccount.cpp:738 views/kaccountsview.cpp:356
+#: views/kmymoneyview.cpp:766 widgets/kmymoneyaccountselector.cpp:178
+#: widgets/kmymoneyaccountselector.cpp:363
+#: wizards/newaccountwizard/knewaccountwizard.cpp:458
+msgid "Liability"
+msgstr "Passivo"
+
+# TODO: Verify
+#: converter/mymoneytemplate.cpp:194 converter/mymoneytemplate.cpp:195
+#: kmymoneyutils.cpp:94 mymoney/mymoneyaccount.cpp:756
+#: views/kaccountsview.cpp:369 views/kmymoneyview.cpp:769
+#: widgets/kmymoneyaccountselector.cpp:181
+#: widgets/kmymoneyaccountselector.cpp:390
+#: wizards/newaccountwizard/knewaccountwizard.cpp:460
+msgid "Equity"
+msgstr "Ação Ordinária"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid ""
+"Please make sure to enter the correct conversion for the selected opening "
+"date. If you requested an online quote it might be provided for a different "
+"date."
+msgstr ""
+"Por favor certifique-se de que o valor de conversão está correto para a data "
+"de abertura indicada. Se você solicitou um valor online pode ser indicado "
+"para uma data diferente."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid "Check date"
+msgstr "Verificar a data"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:562
+msgid "1 %1 equals %2"
+msgstr "1 %1 vale %2"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:577
+msgid "Conversion rate is not positive"
+msgstr "A taxa de conversão não é positiva"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:583
+msgid "No account name supplied"
+msgstr "Nenhum nome de conta fornecido"
+
+#: dialogs/keditscheduledlg.cpp:114 mymoney/mymoneyscheduled.cpp:1026
+#: wizards/newaccountwizard/knewaccountwizard.cpp:680
+msgid "Write check"
+msgstr "Cheque"
+
+#: dialogs/keditscheduledlg.cpp:111 mymoney/mymoneyscheduled.cpp:1014
+#: wizards/newaccountwizard/knewaccountwizard.cpp:682
+msgid "Direct debit"
+msgstr "Débito direto"
+
+#: dialogs/keditscheduledlg.cpp:113 mymoney/mymoneyscheduled.cpp:1032
+#: wizards/newaccountwizard/knewaccountwizard.cpp:683
+msgid "Bank transfer"
+msgstr "Transferência de banco"
+
+#: dialogs/keditscheduledlg.cpp:112 mymoney/mymoneyscheduled.cpp:1029
+#: wizards/newaccountwizard/knewaccountwizard.cpp:685
+msgid "Standing order"
+msgstr "Ordem bancária"
+
+#: dialogs/keditscheduledlg.cpp:110 mymoney/mymoneyscheduled.cpp:1020
+#: wizards/newaccountwizard/knewaccountwizard.cpp:686
+msgid "Manual deposit"
+msgstr "Depósito manual"
+
+#: dialogs/keditscheduledlg.cpp:109 mymoney/mymoneyscheduled.cpp:1017
+#: wizards/newaccountwizard/knewaccountwizard.cpp:687
+msgid "Direct deposit"
+msgstr "Depósito direto"
+
+#: dialogs/keditscheduledlg.cpp:115 mymoney/mymoneyscheduled.cpp:1023
+#: wizards/newaccountwizard/knewaccountwizard.cpp:688
+msgid "Other"
+msgstr "Outro"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:697
+msgid "CreditCard %1 monthly payment"
+msgstr "Pagamento mensal do cartão de crédito %1"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:703
+msgid "Finish entry and create account"
+msgstr "Terminar e criar a conta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:705
+msgid "Finish entry and create account and schedule"
+msgstr "Terminar e criar a conta e o agendamento"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:708
+msgid "Next due date is prior to opening date"
+msgstr "A próxima data é anterior à data de abertura"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:712
+msgid "No account selected"
+msgstr "Nenhuma conta selecionada"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:716
+msgid "No amount for payment selected"
+msgstr "Nenhum valor para o pagamento selecionado"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:720
+msgid "No payee for payment selected"
+msgstr "Nenhum beneficiário para o pagamento selecionado"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:724
+msgid "No name assigned for schedule"
+msgstr "Nenhum nome atribuído para o agendamento"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:805
+msgid "No payee supplied"
+msgstr "Nenhum pagamento fornecido"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:819
+msgid "No opening balance supplied"
+msgstr "Nenhum saldo de abertura fornecido"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:826
+msgid "An interest change can only happen after the first payment"
+msgstr "Uma mudança de juros só pode ocorrer após o primeiro pagamento"
+
+#: dialogs/knewloanwizard.cpp:615 dialogs/knewloanwizard.cpp:634
+#: wizards/newaccountwizard/knewaccountwizard.cpp:884
+#: wizards/newaccountwizard/rc.cpp:55
+msgid "Months"
+msgstr "Meses"
+
+#: dialogs/knewloanwizard.cpp:616 dialogs/knewloanwizard.cpp:635
+#: wizards/newaccountwizard/knewaccountwizard.cpp:885
+#: wizards/newaccountwizard/knewaccountwizard.cpp:889
+#: wizards/newaccountwizard/rc.cpp:56
+msgid "Years"
+msgstr "Anos"
+
+#: dialogs/knewloanwizard.cpp:711
+#: wizards/newaccountwizard/knewaccountwizard.cpp:961
+#, c-format
+msgid "KMyMoney has calculated the amount of the loan as %1."
+msgstr "O KMyMoney calculou o montante do financiamento como %1."
+
+#: dialogs/knewloanwizard.cpp:718
+#: wizards/newaccountwizard/knewaccountwizard.cpp:968
+msgid "KMyMoney has calculated the interest rate to %1%."
+msgstr "O KMyMoney calculou a taxa de juros como %1%."
+
+#: dialogs/knewloanwizard.cpp:731
+#: wizards/newaccountwizard/knewaccountwizard.cpp:981
+msgid ""
+"KMyMoney has calculated a periodic payment of %1 to cover principal and "
+"interest."
+msgstr ""
+"O KMyMoney calculou um pagamento periódico de %1 para cobrir o juro e o "
+"principal."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:993
+#, c-format
+msgid ""
+"The number of payments has been decremented and the balloon payment has been "
+"modified to %1."
+msgstr ""
+"O número de pagamentos foi diminuído e o pagamento balão foi modificado para "
+"%1."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1001
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1021
+#, c-format
+msgid "The balloon payment has been modified to %1."
+msgstr "O pagamento balão foi modificado para %1."
+
+#: dialogs/knewloanwizard.cpp:763
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1013
+msgid "KMyMoney has calculated the term of your loan as %1. "
+msgstr "O KMyMoney calculou o prazo do seu financiamento como %1. "
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1052
+msgid "KMyMoney has calculated a balloon payment of %1 for this loan."
+msgstr "O KMyMoney calculou um pagamento balão de %1 neste empréstimo."
+
+#: dialogs/knewloanwizard.cpp:809
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1059
+msgid "KMyMoney has successfully verified your loan information."
+msgstr "O KMyMoney verificou com sucesso as informações do seu financiamento."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1067
+msgid ""
+"You have entered mis-matching information. Please modify your figures or "
+"leave one value empty to let KMyMoney calculate it for you"
+msgstr ""
+"Você inseriu uma informação inconsistente. Por favor, modifique seus números "
+"ou deixe um valor vazio para que o KMyMoney o possa calculá-lo para você"
+
+#: dialogs/knewloanwizard.cpp:504 dialogs/knewloanwizard.cpp:513
+#: dialogs/knewloanwizard.cpp:522 dialogs/knewloanwizard.cpp:532
+#: dialogs/knewloanwizard.cpp:820
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1070
+msgid "Calculation error"
+msgstr "Erro de cálculo"
+
+#: dialogs/knewloanwizard.cpp:824
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1074
+msgid ""
+"\n"
+"\n"
+"Accept this or modify the loan information and recalculate."
+msgstr ""
+"\n"
+"\n"
+"Aceitar isto ou modificar as informações de financiamento e recalcular."
+
+#: dialogs/knewloanwizard.cpp:826
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1076
+msgid "Calculation successful"
+msgstr "Cálculo bem sucedido"
+
+#: dialogs/knewloanwizard.cpp:846
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1129
+#, c-format
+msgid ""
+"_n: one month\n"
+"%n months"
+msgstr "um mês"
+
+#: dialogs/knewloanwizard.cpp:850
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1133
+#, c-format
+msgid ""
+"_n: one year\n"
+"%n years"
+msgstr "um ano"
+
+#: dialogs/knewloanwizard.cpp:854
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1137
+#, c-format
+msgid ""
+"_n: one payment\n"
+"%n payments"
+msgstr "um pagamento"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1190
+msgid "Press Calculate to verify the values"
+msgstr "Pressione Calcular para obter os valores"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1194
+msgid "Not all details supplied"
+msgstr "Nem todos os detalhes fornecidos"
+
+#: dialogs/kaccountselectdlg.cpp:70 dialogs/knewloanwizard.cpp:122
+#: dialogs/knewloanwizard.cpp:136
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1381
+msgid "&Create..."
+msgstr "&Criar..."
+
+#: dialogs/knewloanwizard.cpp:138
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1383
+msgid "Create a new asset account"
+msgstr "Criar uma nova conta de ativos"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1384
+msgid "If the asset account does not yet exist, press this button to create it."
+msgstr "Se a conta de ativos não existir, pressione neste botão para criá-la."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1596
+msgid "Account information"
+msgstr "Informações da conta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1601
+#: wizards/newaccountwizard/rc.cpp:59
+msgid "Subaccount of"
+msgstr "Sub-conta de"
+
+#: dialogs/rc.cpp:225 dialogs/rc.cpp:326 dialogs/rc.cpp:371 dialogs/rc.cpp:723
+#: plugins/ofximport/dialogs/rc.cpp:23 reports/listtable.cpp:225
+#: widgets/kmymoneyaccounttreebase.cpp:113 widgets/register.cpp:61
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1606
+msgid "Type"
+msgstr "Tipo"
+
+#: dialogs/kcurrencyeditdlg.cpp:62 dialogs/rc.cpp:56 dialogs/rc.cpp:59
+#: dialogs/rc.cpp:75 dialogs/rc.cpp:727 dialogs/rc.cpp:792
+#: kmymoneyutils.cpp:84 kmymoneyutils.cpp:111 mymoney/mymoneyaccount.cpp:741
+#: mymoney/mymoneysecurity.cpp:169 reports/listtable.cpp:233
+#: widgets/kmymoneypriceview.cpp:127
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1607
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1630
+#: wizards/newaccountwizard/rc.cpp:6 wizards/newaccountwizard/rc.cpp:24
+msgid "Currency"
+msgstr "Moeda"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1608
+#: wizards/newaccountwizard/rc.cpp:7 wizards/newuserwizard/rc.cpp:9
+msgid "Opening date"
+msgstr "Data de abertura"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1610
+#: wizards/newaccountwizard/rc.cpp:9
+msgid "Conversion rate"
+msgstr "Taxa de câmbio"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1613
+#: wizards/newaccountwizard/rc.cpp:15 wizards/newuserwizard/rc.cpp:13
+msgid "Opening balance"
+msgstr "Saldo de abertura"
+
+#: dialogs/keditscheduledlg.cpp:507 dialogs/transactioneditor.cpp:784
+#: dialogs/transactioneditor.cpp:848 plugins/ofximport/dialogs/rc.cpp:22
+#: widgets/rc.cpp:111 widgets/register.cpp:59 widgets/transaction.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1618
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1632
+msgid "Number"
+msgstr "Número"
+
+#: dialogs/rc.cpp:365 wizards/newaccountwizard/knewaccountwizard.cpp:1621
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1634
+#: wizards/newaccountwizard/rc.cpp:26 wizards/newaccountwizard/rc.cpp:66
+msgid "IBAN"
+msgstr "IBAN"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1627
+msgid "Brokerage Account"
+msgstr "Conta de Corretagem"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1640
+msgid "Loan information"
+msgstr "Informações do financiamento"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1643
+msgid "Amount borrowed"
+msgstr "Valor emprestado"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1645
+msgid "Amount lent"
+msgstr "Valor devido"
+
+#: dialogs/rc.cpp:515 dialogs/rc.cpp:546
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1647
+#: wizards/newaccountwizard/rc.cpp:75
+msgid "Interest rate"
+msgstr "Taxa de juros"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1648
+msgid "Interest rate is"
+msgstr "Taxa de juros de"
+
+#: dialogs/rc.cpp:509 dialogs/rc.cpp:572
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1649
+msgid "Principal and interest"
+msgstr "Principal e juros"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1650
+#: wizards/newaccountwizard/rc.cpp:90
+msgid "Additional fees"
+msgstr "Taxas adicionais"
+
+#: dialogs/rc.cpp:525 wizards/newaccountwizard/knewaccountwizard.cpp:1651
+#: wizards/newaccountwizard/rc.cpp:44
+msgid "Payment frequency"
+msgstr "Frequência de pagamento"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1652
+#: wizards/newaccountwizard/rc.cpp:105
+msgid "Payment account"
+msgstr "Conta de pagamento"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1655
+msgid "Payout information"
+msgstr "Informações do pagamento"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1658
+msgid "Refinance"
+msgstr "Refinanciar"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1661
+msgid "Transfer amount to"
+msgstr "Transferir o valor para"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1663
+msgid "Transfer amount from"
+msgstr "Transferir o valor de"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1665
+msgid "Payment date"
+msgstr "Data de pagamento"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1671
+msgid "Schedule information"
+msgstr "Informações do agendamento"
+
+#: reports/listtable.cpp:228
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1684
+msgid "Occurence"
+msgstr "Ocorrência"
+
+#: mymoney/mymoneyscheduled.cpp:891 mymoney/mymoneyscheduled.cpp:947
+#: mymoney/mymoneyscheduled.cpp:1283 mymoney/mymoneyscheduletest.cpp:1343
+#: widgets/rc.cpp:19 widgets/rc.cpp:74
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+msgid "Monthly"
+msgstr "Mensalmente"
+
+# TODO: Verify
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1677
+msgid "Paid from"
+msgstr "Pago de"
+
+#: widgets/kmymoneycombo.cpp:473 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1678
+msgid "Pay to"
+msgstr "Pagar para"
+
+#: dialogs/investactivities.cpp:197 dialogs/investactivities.cpp:285
+#: dialogs/investactivities.cpp:365 dialogs/kfindtransactiondlg.cpp:197
+#: dialogs/kmymoneysplittable.cpp:80 dialogs/rc.cpp:51 dialogs/rc.cpp:212
+#: reports/listtable.cpp:197 views/khomeview.cpp:421 views/khomeview.cpp:494
+#: views/khomeview.cpp:528 views/kscheduledview.cpp:73 views/rc.cpp:63
+#: widgets/register.cpp:58 widgets/transaction.cpp:1055
+#: widgets/transaction.cpp:1578 widgets/transaction.cpp:1610
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1679
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1685
+msgid "Amount"
+msgstr "Montante"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1680
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1686
+msgid "First payment due"
+msgstr "Primeiro pagamento devido"
+
+#: dialogs/rc.cpp:102 wizards/newaccountwizard/knewaccountwizard.cpp:1681
+#: wizards/newaccountwizard/rc.cpp:115
+msgid "Payment method"
+msgstr "Método de pagamento"
+
+#: wizards/newaccountwizard/rc.cpp:1
+msgid ""
+"This page summarizes the data you have entered. Press <b>Finish</b> to "
+"create the account, schedules, etc. or use <b>Back</b> to modify your "
+"entries."
+msgstr ""
+"Esta página resume os dados que você inseriu. Pressione <b>Terminar</b> para "
+"criar a conta, agendamentos, etc, ou use <b>Recuar</b> para modificar suas "
+"entradas."
+
+#: wizards/newaccountwizard/rc.cpp:2
+msgid "Item"
+msgstr "Item"
+
+#: dialogs/rc.cpp:110 dialogs/rc.cpp:165 dialogs/rc.cpp:252 dialogs/rc.cpp:757
+#: dialogs/rc.cpp:818 views/kinvestmentview.cpp:74 widgets/register.cpp:574
+#: wizards/newaccountwizard/rc.cpp:3
+msgid "Value"
+msgstr "Valor"
+
+#: wizards/newaccountwizard/rc.cpp:4
+msgid ""
+"Enter the name of the account under which it is known within KMyMoney.\n"
+"Select the type for the new account. Use the <b>What's this?</b> feature to "
+"see more details about the various account types.\n"
+"Enter the date the account was opened and its currency."
+msgstr ""
+"Insira o nome pelo qual a conta será conhecida dentro do KMyMoney.\n"
+"Selecione o tipo para a nova conta. Use o recurso <b>O que é isto?</b> ara "
+"obter mais detalhes sobre os diversos tipos de contas.\n"
+"Insira a data em que a conta foi aberta e sua moeda."
+
+#: wizards/newaccountwizard/rc.cpp:5
+msgid "Select the currency in which this account is denominated."
+msgstr "Selecione a moeda na qual esta conta será denominada."
+
+#: wizards/newaccountwizard/rc.cpp:8
+msgid ""
+"The opening balance is the balance of the account when you start using it "
+"with KMyMoney. For new accounts this is usually 0 but for existing accounts "
+"this may well differ. Please consult the account statements to figure out "
+"this value. The opening balance is to be provided in the currency of the "
+"account as selected with the currency button."
+msgstr ""
+"O saldo de abertura é o saldo da conta quando você começa a utilizá-la com o "
+"KMyMoney. Para novas contas é habitualmente zero mas para contas que já "
+"existem pode ser diferente. Por favor, consulte os seus extratos para saber "
+"o valor. O valor de abertura deve ser indicado na moeda escolhida para a "
+"conta."
+
+#: wizards/newaccountwizard/rc.cpp:10
+msgid ""
+"The opening date would be the date of the last statement. In case you want "
+"to keep track of transactions prior to this date, enter the ending balance "
+"and statement date of a prior statement and add all following transactions "
+"into KMyMoney.\n"
+"<br>\n"
+"<i>Note</i>: If you do not know the exact amount of the opening balance, "
+"enter an estimate. You can change this value later before you reconcile this "
+"account for the first time."
+msgstr ""
+"O saldo de abertura deve ser o da data do último extrato. Caso você deseja "
+"manter o controle de transações antes desta data, insira o saldo final e "
+"data do extrato de um extrato anterior e adicione todas as transações "
+"anteriores no KMyMoney.\n"
+"<br>\n"
+"<i>Nota</i>: Se você não sabe o valor exato do saldo de abertura, insira uma "
+"estimativa. Você pode mudar este valor mais tarde, antes de reconciliar esta "
+"conta pela primeira vez."
+
+#: dialogs/rc.cpp:52 dialogs/rc.cpp:54 dialogs/rc.cpp:57 dialogs/rc.cpp:60
+#: dialogs/rc.cpp:748 dialogs/rc.cpp:749 dialogs/rc.cpp:768 widgets/rc.cpp:6
+#: widgets/rc.cpp:7 widgets/rc.cpp:8 widgets/rc.cpp:9 widgets/rc.cpp:10
+#: widgets/rc.cpp:11 widgets/rc.cpp:12 widgets/rc.cpp:13 widgets/rc.cpp:14
+#: widgets/rc.cpp:15 widgets/rc.cpp:16 widgets/rc.cpp:17
+#: wizards/newaccountwizard/rc.cpp:11 wizards/newaccountwizard/rc.cpp:88
+#: wizards/newaccountwizard/rc.cpp:91 wizards/newaccountwizard/rc.cpp:93
+#: wizards/newuserwizard/rc.cpp:14
+msgid "xxx"
+msgstr "xxx"
+
+#: wizards/newaccountwizard/rc.cpp:12
+msgid "Account type"
+msgstr "Tipo de conta"
+
+#: wizards/newaccountwizard/rc.cpp:13
+msgid ""
+"For foreign currencies an initial conversion rate needs to be provided. This "
+"should be the price of the foreign currency in the base currency on the "
+"opening date of the account."
+msgstr ""
+"Para moedas estrangeiras uma taxa de conversão inicial tem que ser "
+"fornecida. Isto deveria ser o preço da moeda estrangeira na moeda de base, à "
+"data de abertura da conta."
+
+#: wizards/newaccountwizard/rc.cpp:14
+msgid "Account name"
+msgstr "Nome da conta"
+
+#: wizards/newaccountwizard/rc.cpp:16
+msgid ""
+"<p><b>Checking</b>\n"
+"Use the checking account type to manage activities on your checking account "
+"e.g. payments, checks and cash card purchases.</p>\n"
+"\n"
+"<p><b>Savings</b>\n"
+"Use the savings account type to manage activities on your savings account.</"
+"p>\n"
+"\n"
+"<p><b>Credit Card</b>\n"
+"Use the credit card account type to manage activities on your credit card.</"
+"p>\n"
+"\n"
+"<p><b>Cash</b>\n"
+"\n"
+"Use the cash account type to manage activities in your wallet.</p>\n"
+"\n"
+"<p><b>Loan</b>\n"
+"Use the loan account type to manage amortization loans (e.g. mortgages, car "
+"loan, money you lend, private loans etc.).</p>\n"
+"\n"
+"<p><b>Investment</b>\n"
+"Use the investment account to manage your stock, mutual fund and other "
+"investments.</p>\n"
+"\n"
+"<p><b>Asset</b>\n"
+"Use the asset account type to manage assets (e.g. your house, car or art "
+"collection).</p>\n"
+"\n"
+"<p><b>Liability</b>\n"
+"Use the liability account type to manage any type of liability except "
+"amortization loans. Use it for taxes you owe or money you borrowed from "
+"friends. For amortization loans like mortgages you should create a loan "
+"account.</p>"
+msgstr ""
+"<p><b>Corrente</b>\n"
+"Use a conta do tipo corrente para gerenciar as atividades nas suas contas "
+"correntes, como por exemplo, pagamentos, cheques e compras com cartão de "
+"débito.</p> \n"
+"\n"
+"<p><b>Poupança</b>\n"
+"Use a conta do tipo poupança para gerenciar as atividades na sua conta "
+"poupança.</p>\n"
+"\n"
+"<p><b>Cartão de Crédito</b>\n"
+"Use a conta do tipo cartão de crédito para gerenciar as atividades no seu "
+"cartão de crédito.</p>\n"
+"\n"
+"<p><b>Dinheiro</b>\n"
+"Use o tipo de conta dinheiro para gerenciar as atividades na sua carteira.</"
+"p>\n"
+"\n"
+"<p><b>Financiamento</b>\n"
+"Use a conta do tipo financiamento para gerenciar amortização de "
+"financiamentos (por exemplo, hipotecas, financiamento de carro, dinheiro que "
+"você emprestou para alguém, financiamentos privados, etc.).</p>\n"
+"\n"
+"<p><b>Investimento</b>\n"
+"Use a conta investimento para gerenciar suas ações, fundos e outros "
+"investimentos.</p>\n"
+"\n"
+"<p><b>Ativo</b>\n"
+"Use a conta do tipo ativo para gerenciar ativos (por exemplo, sua casa, "
+"carro ou coleção de arte).</p>\n"
+"\n"
+"<p><b>Passivo</b>\n"
+"Use o a conta do tipo passivo para gerenciar quaisquer tipos de passivos, "
+"exceto amortização de financiamentos. Use-o para taxas que você deve ou "
+"dinheiro que você emprestou de amigos. Para amortização de financiamentos, "
+"como hipotecas, você deve criar uma conta de financiamento.</p>"
+
+#: wizards/newaccountwizard/rc.cpp:17
+msgid "Preferred account"
+msgstr "Conta preferida"
+
+# TODO: Verify
+#: wizards/newaccountwizard/rc.cpp:18
+msgid "Mark this checkbox if the account should be maintained as preferred account"
+msgstr "Marque este checkbox caso a conta deva ser mantida como conta preferida"
+
+#: wizards/newaccountwizard/rc.cpp:19
+msgid ""
+"Selecting the <b>Preferred Account</b> checkbox will allow preferred access "
+"in some dialogs and views of KMyMoney."
+msgstr ""
+"Assinalar a caixa de <b>Conta Preferida</b> permitirá acesso preferencial em "
+"algumas janelas e visões do KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:20
+msgid "Enter a name under which this account is known within KMyMoney."
+msgstr "Insira um nome pelo qual esta conta será conhecida dentro do KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:21
+msgid "Online quote"
+msgstr "Cotações online"
+
+#: wizards/newaccountwizard/rc.cpp:22
+msgid ""
+"Does this investment account have a brokerage account?<p>\n"
+"\n"
+"<b>Check</b> the mark if this investment account has an associated account "
+"for money that is not invested.<br>\n"
+"\n"
+"<b>Uncheck</b> it if you don't use this account for active stock brokerage. "
+"You should also uncheck it if this account is not maintained by a bank or "
+"broker."
+msgstr ""
+"Esta conta de investimento possui uma conta de corretagem?<p>\n"
+"\n"
+"Selecione <b>Sim</b> se a conta de investimento possui uma conta associada "
+"para o dinheiro que não é investido.<br>\n"
+"\n"
+"Selecione <b>Não</b> se você não usa esta conta para corretagem dos ativos "
+"das ações. Você também deve optar por isso se esta conta não é mantida por "
+"um banco ou corretor."
+
+#: wizards/newaccountwizard/rc.cpp:23
+msgid "Create brokerage account"
+msgstr "Criar conta de corretagem"
+
+#: wizards/newaccountwizard/rc.cpp:25 wizards/newaccountwizard/rc.cpp:64
+msgid "Account number"
+msgstr "Número de conta"
+
+#: wizards/newaccountwizard/rc.cpp:27
+msgid ""
+"Please select the required options. Please use the <b>What's this?</b> "
+"feature to see more information about the items."
+msgstr ""
+"Por favor, selecione as opções necessárias. Use o recurso <b>O quê é isto?</"
+"b> para obter mais informações sobre as opções."
+
+#: wizards/newaccountwizard/rc.cpp:28
+msgid "What is the type of the loan?"
+msgstr "Qual é o tipo de empréstimo?"
+
+#: dialogs/rc.cpp:481 wizards/newaccountwizard/rc.cpp:29
+msgid "I am borrowing money"
+msgstr "Eu estou tomando dinheiro emprestado"
+
+#: dialogs/rc.cpp:482 wizards/newaccountwizard/rc.cpp:30
+msgid "I am lending money"
+msgstr "Eu estou emprestando dinheiro a alguém"
+
+#: wizards/newaccountwizard/rc.cpp:31
+msgid "Who is the payee/payer of the loan?"
+msgstr "Quem é o beneficiário/recebedor do empréstimo?"
+
+#: wizards/newaccountwizard/rc.cpp:32
+msgid ""
+"Enter the name of the person or bank you owe money or who owes you money.\n"
+"\n"
+"If the name does not exist within KMyMoney's database, you are asked if you "
+"want to create it."
+msgstr ""
+"Insira o nome da pessoa ou banco do qual você deve dinheiro ou que deve "
+"dinheiro para você.\n"
+"\n"
+"Se o nome não existir no banco de dados do KMyMoney, será perguntado se "
+"deseja criá-lo."
+
+#: wizards/newaccountwizard/rc.cpp:33
+msgid "Did you make/receive any payments yet?"
+msgstr "Você já efetuou/recebeu algum pagamento?"
+
+# TODO: Neste ou nesse?
+# TODO: Deságio?
+#: wizards/newaccountwizard/rc.cpp:36
+msgid ""
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?\n"
+"\n"
+"Note: Payments made to obtain the loan (e.g. Disagio) are not considered as "
+"payments in this context."
+msgstr ""
+"Ocorreram quaisquer pagamentos para este empréstimo estejam eles registrados "
+"no KMyMoney ou não?\n"
+"\n"
+"Nota: Pagamentos feitos para obter o empréstimo (como taxas de serviço) não "
+"são considerados como pagamentos neste contexto."
+
+#: wizards/newaccountwizard/rc.cpp:37
+msgid "Which payments do you want to record?"
+msgstr "Quais pagamentos você deseja registrar?"
+
+#: wizards/newaccountwizard/rc.cpp:38
+msgid "All payments"
+msgstr "Todos os pagamentos"
+
+# TODO: Verify 'home'
+#: wizards/newaccountwizard/rc.cpp:39
+msgid "Start with this year's payments"
+msgstr "Iniciar com os pagamentos deste ano"
+
+#: wizards/newaccountwizard/rc.cpp:40
+msgid ""
+"<qt>Select which transactions should be recorded.\n"
+"\n"
+"<b>All payments</b> allows you to enter all payments made for this loan.\n"
+"\n"
+"The option to <b>start from the beginning of the current year</b> is meant "
+"for loans that are active for a longer period of time already and you don't "
+"want to enter all transactions of the past.\n"
+"</qt>"
+msgstr ""
+"<qt>Selecionar quais transações devem ser registradas.\n"
+"\n"
+"<b>Todos os pagamentos</b> permite que você insira todos os pagamentos "
+"feitos para este financiamento.\n"
+"\n"
+"A opção <b>iniciar a partir do início do ano atual</b> significa que para "
+"financiamentos que já estão ativos por um período de tempo maior você não "
+"deseja inserir todas as transações do passado.\n"
+"</qt>"
+
+#: wizards/newaccountwizard/rc.cpp:41
+msgid "Balance before start of recording"
+msgstr "Saldo antes do início do registro"
+
+#: wizards/newaccountwizard/rc.cpp:42
+msgid ""
+"Enter the ending balance found on the statement that is the last one before "
+"you want to start recording this loan in KMyMoney."
+msgstr ""
+"Insira o balanço final encontrado no extrato que for o último antes de você "
+"iniciar o registro deste financiamento no KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:43
+msgid ""
+"You have selected to record only payments from the beginning of this year. "
+"Since prior transactions will not be recorded, you need to supply the "
+"balance of the loan on January 1st of this year."
+msgstr ""
+"Você selecionou registrar somente os pagamentos a partir do início deste "
+"ano. Uma vez que as transações anteriores não será registradas, você precisa "
+"fornecer o balanço do financiamento no dia 1º de janeiro deste ano."
+
+#: wizards/newaccountwizard/rc.cpp:45
+msgid "Interest Compounding frequency"
+msgstr "Frequência de Cômputo dos Juros"
+
+#: wizards/newaccountwizard/rc.cpp:46
+msgid ""
+"Select the frequency with which the interest is compounded. If uncertain, "
+"select the same as the payment frequency. Consult your loan contract for "
+"details."
+msgstr ""
+"Selecione a frequência com que os juros serão computados. Se não tiver "
+"certeza, selecione a mesma da frequência do pagamento. Consulte o seu "
+"contrato de financiamento para mais detalhes."
+
+#: wizards/newaccountwizard/rc.cpp:47
+msgid "Due date of first payment to be recorded"
+msgstr "Data do primeiro pagamento a ser registrado"
+
+#: wizards/newaccountwizard/rc.cpp:48
+msgid ""
+"Depending on the answer to <b>What do you want to record?</b> this field "
+"means the following:<p>\n"
+"\n"
+"<b>All payments</b><br>\n"
+"Enter the due date of the very first payment<p>\n"
+"\n"
+"<b>Start with this year's payments</b><br>\n"
+"Enter the due date of the first payment in the current year"
+msgstr ""
+"Dependendo da resposta ao <b>O que você deseja registrar?</b> o campo "
+"significa o seguinte:<p>\n"
+"\n"
+"<b>Todo os pagamentos</b><br>\n"
+"Insira a data do primeiro pagamento<p>\n"
+"\n"
+"<b>Iniciar com os pagamentos deste ano</b><br>\n"
+"Insira a data do primeiro pagamento no ano atual"
+
+#: wizards/newaccountwizard/rc.cpp:49
+msgid "Type of interest rate"
+msgstr "Tipo de taxa de juros"
+
+#: wizards/newaccountwizard/rc.cpp:50
+msgid "Fixed"
+msgstr "Fixo"
+
+#: wizards/newaccountwizard/rc.cpp:51
+msgid "Variable"
+msgstr "Variável"
+
+#: wizards/newaccountwizard/rc.cpp:52
+msgid "Time between interest changes"
+msgstr "Tempo entre as mudanças de juros"
+
+#: dialogs/knewloanwizard.cpp:613 wizards/newaccountwizard/rc.cpp:53
+msgid "Days"
+msgstr "Dias"
+
+#: dialogs/knewloanwizard.cpp:614 wizards/newaccountwizard/rc.cpp:54
+msgid "Weeks"
+msgstr "Semanas"
+
+#: wizards/newaccountwizard/rc.cpp:57
+msgid "Next interest change is due"
+msgstr "A próxima mudança de juros é"
+
+#: wizards/newaccountwizard/rc.cpp:58
+msgid "This page allows you to select the parent account."
+msgstr "Esta página lhe permite selecionar a conta pai."
+
+#: wizards/newaccountwizard/rc.cpp:60
+msgid ""
+"If this account is managed by an institution please select the institution "
+"from the list. If the institution does not exist yet, please choose the "
+"<b>New Institution</b> button to create it. Otherwise, leave this field "
+"empty.\n"
+"Enter the account number used by the institution to identify the account."
+msgstr ""
+"Se esta conta for gerenciada por uma instituição, por favor selecione a "
+"instituição na lista. Se a instituição ainda não existir, selecione o botão "
+"<b>Nova Instituição</b> para criá-la. Caso contrário, deixe este campo em "
+"branco.\n"
+"Insira o número da conta usada pela instituição para identificar a conta."
+
+#: wizards/newaccountwizard/rc.cpp:62
+msgid "Select the institution which manages this account or leave empty"
+msgstr "Selecione a instituição que gerencia esta conta ou deixe em branco"
+
+#: wizards/newaccountwizard/rc.cpp:63
+msgid "New Institution"
+msgstr "Nova Instituição"
+
+#: wizards/newaccountwizard/rc.cpp:65
+msgid ""
+"Accounts managed by an institution are usually referenced by a unique number "
+"the so called account number. Enter that number here.\n"
+"\n"
+"KMyMoney currently uses this number only for some online banking functions."
+msgstr ""
+"Contas gerenciadas por uma instituição são normalmente referenciadas por um "
+"número único que é chamado número da conta. Insira este número aqui.\n"
+"\n"
+"O KMyMoney atualmente usa este número somente para as funções de banco "
+"online."
+
+#: wizards/newaccountwizard/rc.cpp:67
+msgid "Enter the International Bank Account Number into this field"
+msgstr "Insira o Número de Conta de Banco Internacional neste campo"
+
+#: wizards/newaccountwizard/rc.cpp:68
+msgid ""
+"You can enter the IBAN (International Bank Account Number) into this field "
+"if you know it. Usually, people at your institution can tell you the number "
+"or it is printed on your statements.\n"
+"\n"
+"See also http://en.wikipedia.org/wiki/International_Bank_Account_Number for "
+"more information.\n"
+"\n"
+"KMyMoney keeps this field only for documentation purposes and does not use "
+"it otherwise."
+msgstr ""
+"Você pode inserir o IBAN (do inglês, Número de Conta de Banco Internacional) "
+"neste campo se você o conhece. Normalmente, funcionários de sua instituição "
+"podem informá-lo sobre o número ou ele aparece impresso em seus extratos.\n"
+"\n"
+"Acesse http://en.wikipedia.org/wiki/International_Bank_Account_Number para "
+"mais informações.\n"
+"\n"
+"O KMyMoney mantém este campo somente para fins de documentação e não utiliza "
+"esta informação para nenhum outro fim."
+
+#: wizards/newaccountwizard/rc.cpp:69
+msgid ""
+"Now enter the details for your loan. You can leave one of the fields empty "
+"and KMyMoney will calculate it when you press the <b>Calculate</b> button. "
+"Before you can continue with the next page you also need to press "
+"<b>Calculate</b> so that KMyMoney can check the logical correctness of the "
+"values you have supplied."
+msgstr ""
+"Agora insira os detalhes de seu empréstimo. Você pode deixar um dos campos "
+"em branco e o KMyMoney irá calculá-lo que você pressionar o botão "
+"<b>Calcular</b>. Antes de continuar com a próxima página, você pode também "
+"pressionar <b>Calcular</b> de modo que o KMyMoney possa verificar a exatidão "
+"dos valores que você forneceu."
+
+#: wizards/newaccountwizard/rc.cpp:70
+msgid "The interest rate gets calculated"
+msgstr "A taxa de juros é calculada"
+
+#: wizards/newaccountwizard/rc.cpp:71
+msgid "when the payment is received"
+msgstr "quando o pagamento é recebido"
+
+#: wizards/newaccountwizard/rc.cpp:72
+msgid "when the payment is due"
+msgstr "quando o pagamento é devido"
+
+#: dialogs/rc.cpp:531 dialogs/rc.cpp:533 wizards/newaccountwizard/rc.cpp:73
+msgid "Loan amount"
+msgstr "Montante do financiamento"
+
+#: wizards/newaccountwizard/rc.cpp:74
+msgid ""
+"Enter the amount of the loan in this field. If you want to calculate this "
+"field out of the other parameters, please leave it empty. If the field is "
+"marked as required (colored background) you have informed KMyMoney about the "
+"fact that there were already some payments towards the loan. In this case, "
+"please enter the ending balance of your last statement."
+msgstr ""
+"Insira o valor do financiamento neste campo. Se você deseja calcular este "
+"campo com base em outros parâmetros, por favor deixe-o em branco. Se o campo "
+"estiver marcado como obrigatório (fundo colorido) você provavelmente "
+"informou ao KMyMoney que já existem alguns pagamentos referentes a este "
+"financiamento. Neste caso, por favor, insira o saldo final de seu último "
+"extrato."
+
+#: wizards/newaccountwizard/rc.cpp:76
+msgid ""
+"Please enter the interest rate in percent or leave the field empty to "
+"calculate it."
+msgstr ""
+"Por favor insira a taxa de juros em porcentagem ou deixe o campo em branco "
+"para calculá-la."
+
+#: dialogs/rc.cpp:559 wizards/newaccountwizard/rc.cpp:77
+msgid "Term"
+msgstr "Prazo"
+
+# TODO: Verify
+# Para o qual?
+#: wizards/newaccountwizard/rc.cpp:78
+msgid ""
+"Please enter the term of this loan or enter 0 to calculate it. The term is "
+"the time that is required to fully repay the loan. This time might be "
+"different from the time your loan contract is signed for."
+msgstr ""
+"Por favor, insira o prazo deste financiamento ou insira 0 para calculá-lo. O "
+"prazo é o tempo que é necessário para pagar totalmente o financiamento. Este "
+"tempo pode ser diferente do tempo constante no contrato de financiamento que "
+"você assinou."
+
+#: wizards/newaccountwizard/rc.cpp:79
+msgid "Payment (principal and interest)"
+msgstr "Pagamento (principal e juros)"
+
+#: wizards/newaccountwizard/rc.cpp:80
+msgid ""
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"Por favor insira o valor que deseja pagar pelo principal e juros ou deixe "
+"este campo em branco para calculá-lo."
+
+#: wizards/newaccountwizard/rc.cpp:81
+msgid "Balloon payment"
+msgstr "Pagamento balão"
+
+#: wizards/newaccountwizard/rc.cpp:82
+msgid ""
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"Por favor, insira o valor de um pagamento de amortização final ou deixe este "
+"campo em branco para calculá-lo."
+
+#: wizards/newaccountwizard/rc.cpp:83
+msgid "Calculate"
+msgstr "Calcular"
+
+#: wizards/newaccountwizard/rc.cpp:84
+msgid "Press this button to calculate/verify your loan details."
+msgstr ""
+"Pressione este botão para calcular/verificar os detalhes do seu "
+"financiamento."
+
+#: wizards/newaccountwizard/rc.cpp:85
+msgid ""
+"Pressing this button calculates a possibly missing parameter for your loan "
+"or verifies that the values entered match. If something is not correct you "
+"will receive information about it."
+msgstr ""
+"Pressionar este botão calcula um possível parâmetro que esteja faltando para "
+"seu financiamento ou verifica se os valores inseridos estão corretos. Se "
+"algum valor estiver incorreto você receberá informações sobre isso."
+
+#: wizards/newaccountwizard/rc.cpp:86
+msgid ""
+"Now enter the information required for the periodic loan payments. If your "
+"regular payments contains any additional fees, click on the <b>Additional "
+"fees</b> button to enter them."
+msgstr ""
+"Agora insira as informações necessárias para os pagamentos periódicos do "
+"financiamento. Se seus pagamentos regulares possuem quaisquer taxas "
+"adicionais, clique no botão <b>Taxas adicionais</b> para inserí-las."
+
+#: wizards/newaccountwizard/rc.cpp:87
+msgid "Principal + Interest"
+msgstr "Principal + Juros"
+
+#: dialogs/rc.cpp:620 wizards/newaccountwizard/rc.cpp:89
+msgid "+"
+msgstr "+"
+
+#: wizards/newaccountwizard/rc.cpp:92
+msgid "= periodical payments"
+msgstr "= pagamentos periódicos"
+
+#: dialogs/rc.cpp:643 wizards/newaccountwizard/rc.cpp:94
+msgid ""
+"If this loan is for an asset, such as a car or a house, you can create the "
+"asset account now. An asset account represents the total value of an asset. "
+"The money from this loan will be transfered into the asset account you "
+"create or select.\n"
+"If this loan is a 'consumer loan' (money to use however you want), you can "
+"use a checking account instead."
+msgstr ""
+"Se o financiamento for para um bem, como um carro ou uma casa, você pode "
+"criar uma conta de ativo agora. Uma conta de ativo representa o valor total "
+"de um bem. O dinheiro deste empréstimo será transferido para a conta de "
+"ativo que você criar ou selecionar.\n"
+"Se o empréstimo for um 'empréstimo de consumo' (dinheira para ser usado no "
+"que você quiser), você pode usar uma conta corrente como destino do dinheiro."
+
+#: dialogs/rc.cpp:644 wizards/newaccountwizard/rc.cpp:95
+msgid "Don't create payout transaction"
+msgstr "Não criar transação de pagamento"
+
+#: wizards/newaccountwizard/rc.cpp:96
+msgid "Refinance existing loan"
+msgstr "Refinanciar empréstimo existente"
+
+#: wizards/newaccountwizard/rc.cpp:97
+msgid "Check this if you are refinancing a loan that already exists in KMyMoney"
+msgstr ""
+"Ative isto se você está refinanciando um financiamento que já existe no "
+"KMyMoney"
+
+#: dialogs/rc.cpp:642 wizards/newaccountwizard/rc.cpp:98
+msgid "Asset Account"
+msgstr "Contas de Ativos"
+
+#: dialogs/rc.cpp:2 wizards/newaccountwizard/rc.cpp:99
+msgid "Create"
+msgstr "Criar"
+
+#: wizards/newaccountwizard/rc.cpp:100
+msgid "Loan account"
+msgstr "Conta de financiamento"
+
+#: dialogs/rc.cpp:646 wizards/newaccountwizard/rc.cpp:101
+msgid "Date of payment"
+msgstr "Data do pagamento"
+
+#: wizards/newaccountwizard/rc.cpp:102
+msgid ""
+"KMyMoney creates a schedule for this payment and reminds you whenever a "
+"payment must be made. Please select the account to/from which payments will "
+"be made and the category the interest will be assigned to.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"O KMyMoney cria um agendamento para este pagamento e irá lhe lembrar sempre "
+"que um pagamento deve ser feito. Por favor, selecione a conta para/de a qual "
+"os pagamentos serão feitos e a categoria a qual os juros devem ser "
+"atribuídos. \n"
+"Se você optou por registrar todos os pagamentos, esta data já foi fornecida. "
+"Se você optou por registrar somente os pagamentos do ano atual, então a "
+"<b>Primeira data de pagamento</b> é a data do primeiro pagamento feito este "
+"ano. "
+"<p>"
+
+#: dialogs/rc.cpp:613 wizards/newaccountwizard/rc.cpp:103
+msgid "Interest category"
+msgstr "Categoria de juros"
+
+#: wizards/newaccountwizard/rc.cpp:104
+msgid ""
+"The category the interest part of the payment will be assigned to. If you "
+"borrow money you usually have to pay interest, so this should be an expense "
+"category. If you lend the money, you receive the interest. In this case, "
+"select an income category here."
+msgstr ""
+"A categoria a qual parte dos juros do pagamento será atribuída. Se você "
+"obteve dinheiro emprestado, normalmente você pagará juros, assim esta "
+"categoria deverá ser uma categoria de despesa. Se você concedeu um "
+"empréstimo, você recebe o valor dos juros. Neste caso, selecione uma "
+"categoria de receita aqui."
+
+#: wizards/newaccountwizard/rc.cpp:106
+msgid ""
+"Select the account from which you make your periodical payments or where you "
+"receive regular payments in case you lend the money. In most cases, this is "
+"a checking account."
+msgstr ""
+"Selecione a conta da qual você fará seus pagamentos periódicos ou onde você "
+"receberá os pagamentos regulares no caso de ter concedido um empréstimo. Na "
+"maioria dos casos, é uma conta corrente."
+
+#: dialogs/rc.cpp:519 wizards/newaccountwizard/rc.cpp:107
+msgid "First payment due on"
+msgstr "Primeiro pagamento vence em"
+
+#: wizards/newaccountwizard/rc.cpp:108
+msgid ""
+"For credit card accounts you can create a monthly schedule which will "
+"automatically remind you about the payment. Please fill in the details about "
+"this payment here."
+msgstr ""
+"Para contas de cartão de crédito, você pode criar um agendamento mensal que "
+"lhe lembrará automaticamente sobre o pagamento. Por favor, preencha os "
+"detalhes sobre este pagamento aqui."
+
+#: wizards/newaccountwizard/rc.cpp:109
+msgid "Yes, remind me when the payment is due"
+msgstr "Sim, lembrar-me quando o pagamento deve ser feito"
+
+#: wizards/newaccountwizard/rc.cpp:110
+msgid "Name of schedule"
+msgstr "Nome do agendamento"
+
+#: dialogs/rc.cpp:151 dialogs/rc.cpp:218 dialogs/rc.cpp:219
+#: reports/listtable.cpp:199 views/kscheduledview.cpp:72 widgets/rc.cpp:113
+#: widgets/register.cpp:57 wizards/newaccountwizard/rc.cpp:111
+msgid "Payee"
+msgstr "Beneficiário"
+
+#: wizards/newaccountwizard/rc.cpp:112
+msgid "Estimated monthly payment"
+msgstr "Pagamento mensal estimado"
+
+#: wizards/newaccountwizard/rc.cpp:113
+msgid "Due date of next payment"
+msgstr "Data de vencimento do próximo pagamento"
+
+# TODO: Verify
+#: wizards/newaccountwizard/rc.cpp:114
+msgid ""
+"Payment should be made\n"
+"from account"
+msgstr ""
+"Pagamento deve ser feito\n"
+"a partir da conta"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:79
+msgid "KMyMoney New File Setup"
+msgstr "Configuração de um Novo Arquivo do KMyMoney"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:81
+msgid "Introduction"
+msgstr "Introdução"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:82
+msgid "Personal Data"
+msgstr "Dados Pessoais"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:83
+msgid "Select Currency"
+msgstr "Selecionar Moeda"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:84
+msgid "Select Accounts"
+msgstr "Selecionar Contas"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:85
+msgid "Set preferences"
+msgstr "Configurar preferências"
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid ""
+"Unable to load data, because no contact has been associated with the owner "
+"of the standard addressbook."
+msgstr ""
+"Não foi possível carregar os dados porque nenhum contato está associado como "
+"dono do livro de endereços padrão."
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid "Addressbook import"
+msgstr "Importar do livro de endereços"
+
+#: wizards/newuserwizard/rc.cpp:1
+msgid ""
+"A typical KMyMoney user maintains a checking a account with some institution "
+"and uses it to receive money or pay bills. If this is not the case, please "
+"deselect the checkbox below and continue on the next page."
+msgstr ""
+"Um usuário típico do KMyMoney possui uma conta corrente com alguma "
+"instituição e a usa para receber dinheiro ou pagar contas. Se este não é o "
+"caso, por favor desative a caixa abaixo e prossiga para a próxima página."
+
+#: wizards/newuserwizard/rc.cpp:2
+msgid "I have a checking account that I want to manage with KMyMoney"
+msgstr "Eu tenho uma conta corrente que desejo que seja gerenciada com o KMyMoney"
+
+#: wizards/newuserwizard/rc.cpp:3
+msgid "The name of the instititution that issued the account."
+msgstr "O nome da instituição onde está a conta."
+
+#: wizards/newuserwizard/rc.cpp:4
+msgid ""
+"Each institution has a routing number. Enter it here. If uncertain, leave "
+"the field blank. You can modify it later."
+msgstr ""
+"Cada instituição possui um número de agência. Insira-o aqui. Se não tiver "
+"certeza, deixe o campo em branco. Você poderá modificá-lo mais tarde."
+
+#: wizards/newuserwizard/rc.cpp:5
+msgid "Name of the institution"
+msgstr "Nome da instituição"
+
+#: wizards/newuserwizard/rc.cpp:6
+msgid "Routing number"
+msgstr "Número da agência"
+
+#: wizards/newuserwizard/rc.cpp:7
+msgid ""
+"In general the institution that issued the account also issued a number for "
+"it. Enter it here. If uncertain, you can modify this entry later."
+msgstr ""
+"Normalmente, a instituição que fornece uma conta também fornece um número "
+"para ela. Insira-o aqui. Se não tiver certeza quanto ao número, você poderá "
+"modificar esta entrada mais tarde."
+
+#: wizards/newuserwizard/rc.cpp:8
+msgid ""
+"Enter a descriptive name that will be used by KMyMoney to identify your "
+"checking account."
+msgstr ""
+"Insira um nome descritivo que será usado pelo KMyMoney para identificar sua "
+"conta corrente."
+
+#: wizards/newuserwizard/rc.cpp:10
+msgid ""
+"Enter the date from when on you plan to keep track of the transactions in "
+"that account. This is usually the date of the last statement. If uncertain, "
+"leave as is."
+msgstr ""
+"Insira a data a partir da qual você planeja manter o controle de suas "
+"transações na conta. Normalmente é a data do último extrato. Se não tiver "
+"certeza, deixe o campo como ele está."
+
+#: wizards/newuserwizard/rc.cpp:11
+msgid "Number of the account"
+msgstr "Número da conta"
+
+#: wizards/newuserwizard/rc.cpp:12
+msgid "Name of the account"
+msgstr "Nome da conta"
+
+#: wizards/newuserwizard/rc.cpp:15
+msgid ""
+"Enter the opening balance of the account. This is usually the ending balance "
+"of the last statement. If uncertain, leave as is."
+msgstr ""
+"Insira o saldo de abertura da conta. Normalmente é o saldo do último "
+"extrato. Se não tiver certeza, deixe o campo como ele está."
+
+#: wizards/newuserwizard/rc.cpp:16
+msgid ""
+"The fields below allow you to enter some information about your checking "
+"account. Once this wizard finishes, the account will be created for you "
+"within KMyMoney."
+msgstr ""
+"Os campos abaixo permitem que você insira algumas informações sobre sua "
+"conta corrente. Uma vez que o assistente se encerrar, a conta será criada no "
+"KMyMoney."
+
+#: wizards/newuserwizard/rc.cpp:17
+msgid ""
+"KMyMoney supports multiple currencies. Your reports will be based on a "
+"default curreny which you can select here. The default for new accounts is "
+"also the currency you select here."
+msgstr ""
+"O KMyMoney suporta várias moedas. Seus relatórios serão baseados na moeda "
+"padrão que pode ser selecionada aqui. O padrão para novas contas é também a "
+"moeda que você selecionar aqui."
+
+#: wizards/newuserwizard/rc.cpp:18
+msgid ""
+"KMyMoney will store your financial data in a file on the disk. A standard "
+"filename within your KDE user environment will be the default. This is just "
+"provided for convenience and you can choose any other location here."
+msgstr ""
+"O KMyMoney armazenará seus dados financeiros em um arquivo no disco. Um nome "
+"de arquivo e caminho dentro de seu ambiente de usuário do KDE será o padrão. "
+"Ele é apenas fornecido para sua conveniência e você pode selecionar qualquer "
+"outra localização aqui."
+
+#: wizards/newuserwizard/rc.cpp:19
+msgid ""
+"Either the currently selected file exists or the selected directory does not "
+"exist. Please make sure, that\n"
+"\n"
+"<ul>\n"
+"<li>the selected directory exists and</li>\n"
+"<li>the filename is not currently used in this directory.</li>\n"
+"</ul>"
+msgstr ""
+"Já existe o arquivo selecionado, ou a pasta selecionada não existe. Favor "
+"certificar-se de que\n"
+"\n"
+"<ul>\n"
+"<li>a pasta existe e</li>\n"
+"<li>um arquivo com o mesmo nome já não existe na pasta.</li>\n"
+"</ul>"
+
+#: wizards/newuserwizard/rc.cpp:20
+msgid ""
+"This finishes the setup of your KMyMoney environment. You can now press the "
+"Finish button and start using KMyMoney to record your financial transactions."
+msgstr ""
+"Aqui termina a configuração do KMyMoney. Você pode agora pressionar o botão "
+"Terminar e começar a usar o KMyMoney para registrar as suas transações "
+"financeiras."
+
+#: wizards/newuserwizard/rc.cpp:21
+msgid ""
+"Please enter some information about yourself.<br><br>\n"
+"\n"
+"This information will be seen and used only by you. The information is used "
+"to personalize KMyMoney, to encrypt your file, etc."
+msgstr ""
+"Por favor, insira algumas informações sobre você mesmo.<br><br>\n"
+"\n"
+"Estas informações serão vistas e usadas somente por você. Elas são usadas "
+"para personalizar o KMyMoney, criptografar seu arquivo, etc."
+
+#: wizards/newuserwizard/rc.cpp:28
+msgid "Zip code"
+msgstr "CEP"
+
+#: wizards/newuserwizard/rc.cpp:30
+msgid "Welcome to KMyMoney!"
+msgstr "Bem-vindo ao KMyMoney!"
+
+#: wizards/newuserwizard/rc.cpp:31
+msgid ""
+"You have started KMyMoney for the first time on this computer. Before this "
+"program can help you to manage your finances, it needs to collect some data "
+"from you.<p>\n"
+"\n"
+"On the next few pages you will be guided through the steps necessary to "
+"setup the program. This will happen only once."
+msgstr ""
+"Você iniciou o KMyMoney pela primeira vez neste computador. Antes que este "
+"programa possa auxiliá-lo a gerenciar suas finanças, ele precisa coletar "
+"alguns dados seus.<p>\n"
+"\n"
+"Nas próximas páginas, você será guiado pelos passos necessários para "
+"configurar o programa. Isto será feito apenas uma vez."
+
+#: wizards/newuserwizard/rc.cpp:32
+msgid ""
+"<p>KMyMoney can encrypt your datafile using GPG Encryption. GPG encryption "
+"is one of the most secure methods in the world for protecting data. All of "
+"your account numbers and other important financial information will be very "
+"secure.</p>"
+msgstr ""
+"<p>O KMyMoney pode criptografar suas arquivos de dados usando a Criptografia "
+"GPG. A Criptografia GPG é um dos métodos mais seguros no mundo para proteger "
+"seus dados. Todos os seus números de conta e outras informações financeiras "
+"importantes estarão bem seguras.</p>"
+
+#: wizards/newuserwizard/rc.cpp:33
+msgid ""
+"If you would like to review or change any preference settings for KMyMoney "
+"at this time, you can do so here. If not just click <b>Next</b>."
+msgstr ""
+"Se você desejar revisar ou mudar qualquer uma das configurações de "
+"preferência para o KMyMoney agora, você pode fazer isso aqui. Caso "
+"contrário, apenas clique em <b>Próximo</b>."
+
+#: wizards/newuserwizard/rc.cpp:34
+msgid "Configure preferences now"
+msgstr "Configurar preferências agora"
+
+#: wizards/newuserwizard/rc.cpp:35
+msgid ""
+"You can change the configuration options at any time using the configuration "
+"dialog. Just select the <b>Configure KMyMoney...</b> option in the "
+"<b>Settings</b> menu."
+msgstr ""
+"Você modificar as configurações das opções a qualquer momento usando a "
+"janela de configuração. Apenas selecione a opção <b>Configurar o KMyMoney..."
+"</b> no menu <b>Configurações</b>."
+
+#: dialogs/rc.cpp:83 dialogs/rc.cpp:411 dialogs/rc.cpp:435
+#: kmymoneyutils.cpp:92 kmymoneyutils.cpp:105 mymoney/mymoneyaccount.cpp:753
+#: mymoney/mymoneysecurity.cpp:160
+msgid "Stock"
+msgstr "Ação"
+
+#: dialogs/rc.cpp:84 dialogs/rc.cpp:412 dialogs/rc.cpp:436
+#: kmymoneyutils.cpp:107 mymoney/mymoneysecurity.cpp:163
+msgid "Mutual Fund"
+msgstr "Fundo Comum de Investimento"
+
+# TODO: Verify
+#: dialogs/rc.cpp:85 dialogs/rc.cpp:413 dialogs/rc.cpp:437
+#: kmymoneyutils.cpp:109 mymoney/mymoneysecurity.cpp:166
+msgid "Bond"
+msgstr "Título"
+
+#: mymoney/mymoneysecurity.cpp:172 reports/querytable.cpp:1150
+#: widgets/kmymoneyaccountselector.cpp:76
+msgid "None"
+msgstr "Nenhum"
+
+#: dialogs/rc.cpp:46 kmymoneyutils.cpp:402 mymoney/mymoneyaccount.cpp:759
+#: mymoney/mymoneyscheduled.cpp:1002 mymoney/mymoneysecurity.cpp:175
+#: views/kforecastview.cpp:174 widgets/register.cpp:54
+#: widgets/register.cpp:485 widgets/transaction.cpp:708
+#: widgets/transaction.cpp:1459
+msgid "Unknown"
+msgstr "Desconhecido"
+
+#: mymoney/storage/mymoneystoragesql.cpp:191
+msgid ""
+"Database apparently in use\n"
+"Opened by %1 on %2 at %3.\n"
+"Open anyway?"
+msgstr ""
+"O Banco de Dados está aparentemente em uso\n"
+"Aberto por %1 em %2 às %3.\n"
+"Abrir mesmo assim?"
+
+#: mymoney/storage/mymoneystoragesql.cpp:229
+msgid "Cannot currently create database for driver %1; please create manually"
+msgstr ""
+"Não foi possível criar o banco de dados para o driver %1; por favor crie "
+"manualmente"
+
+#: mymoney/storage/mymoneystoragesql.cpp:244
+msgid "Error in create database %1; do you have create permissions?"
+msgstr "Erro ao criar o banco de dados %1; você possui permissões para criação?"
+
+#: converter/mymoneygncreader.cpp:1329
+#: mymoney/storage/mymoneystoragexml.cpp:166
+msgid "Loading transactions..."
+msgstr "Carregando transações..."
+
+#: converter/mymoneygncreader.cpp:1190
+#: mymoney/storage/mymoneystoragexml.cpp:173
+msgid "Loading accounts..."
+msgstr "Carregando contas..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:180
+msgid "Loading securities..."
+msgstr "Carregando títulos..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:187
+msgid "Loading reports..."
+msgstr "Carregando relatórios..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:268
+msgid "Unknown XML tag %1 found in line %2"
+msgstr "Marca XML desconhecida %1 encontrada na linha %2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:274
+msgid "Exception while creating a %1 element: %2"
+msgstr "Exceção ao criar um element %1 :%2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:513
+msgid "Loading file information..."
+msgstr "Carregando informações do arquivo..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:591
+msgid "Loading user information..."
+msgstr "Carregando informações do usuário..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:655
+msgid "Saving accounts..."
+msgstr "Salvando contas..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:678
+msgid "Saving transactions..."
+msgstr "Salvando transações..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:747
+msgid "Saving reports..."
+msgstr "Salvando relatórios..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:762
+msgid "Saving budgets..."
+msgstr "Salvando orçamentos..."
+
+#: mymoney/storage/mymoneystoragedump.cpp:414
+msgid "not reconciled"
+msgstr "não reconciliada"
+
+#: mymoney/storage/mymoneystoragedump.cpp:417
+msgid "cleared"
+msgstr "compensada"
+
+#: mymoney/storage/mymoneystoragedump.cpp:420
+msgid "reconciled"
+msgstr "reconciliada"
+
+#: mymoney/storage/mymoneystoragedump.cpp:423
+msgid "frozen"
+msgstr "congelada"
+
+#: mymoney/storage/mymoneystoragedump.cpp:426
+msgid "unknown"
+msgstr "desconhecido"
+
+#: mymoney/mymoneyaccount.cpp:101
+msgid ""
+"Account %1 contains an opening balance. Please use a KMyMoney version >= 0.8 "
+"and < 0.9 to correct the problem."
+msgstr ""
+"A conta %1 contém um saldo de abertura. Por favor, use o KMyMoney versão >= "
+"0.8 e < 0.9 para corrigir o problema."
+
+#: mymoney/mymoneyaccount.cpp:597
+msgid ""
+"_: Brokerage (suffix for account names)\n"
+"Brokerage"
+msgstr "Corretagem"
+
+#: kmymoneyutils.cpp:74 mymoney/mymoneyaccount.cpp:726
+msgid "Certificate of Deposit"
+msgstr "Certificado de Depósito"
+
+#: kmymoneyutils.cpp:78 mymoney/mymoneyaccount.cpp:732
+msgid "Money Market"
+msgstr "Mercado Monetário"
+
+#: converter/mymoneytemplate.cpp:186 converter/mymoneytemplate.cpp:187
+#: dialogs/knewaccountdlg.cpp:1018 kmymoneyutils.cpp:86
+#: mymoney/mymoneyaccount.cpp:744 views/kaccountsview.cpp:360
+#: views/kbudgetview.cpp:372 views/kcategoriesview.cpp:178
+#: views/khomeview.cpp:1813 views/kmymoneyview.cpp:767
+#: widgets/kmymoneyaccountselector.cpp:68
+#: widgets/kmymoneyaccountselector.cpp:179
+#: widgets/kmymoneyaccountselector.cpp:370 widgets/register.cpp:828
+msgid "Income"
+msgstr "Receita"
+
+#: converter/mymoneytemplate.cpp:190 converter/mymoneytemplate.cpp:191
+#: dialogs/knewaccountdlg.cpp:1020 kmymoneyutils.cpp:88
+#: mymoney/mymoneyaccount.cpp:747 views/kaccountsview.cpp:364
+#: views/kbudgetview.cpp:378 views/kcategoriesview.cpp:182
+#: views/kmymoneyview.cpp:768 widgets/kmymoneyaccountselector.cpp:72
+#: widgets/kmymoneyaccountselector.cpp:180
+#: widgets/kmymoneyaccountselector.cpp:380 widgets/register.cpp:829
+msgid "Expense"
+msgstr "Despesa"
+
+#: kmymoneyutils.cpp:90 mymoney/mymoneyaccount.cpp:750
+msgid "Investment Loan"
+msgstr "Financiamento de Investimento"
+
+#: mymoney/mymoneyfile.cpp:47
+msgid "Opening Balances"
+msgstr "Saldo de Abertura"
+
+#: mymoney/mymoneyfile.cpp:398
+msgid "Cannot remove transaction that references a closed account."
+msgstr "Não é possível remover transações que se referem a uma conta fechada."
+
+#: mymoney/mymoneyfile.cpp:1414 mymoney/mymoneyfile.cpp:1433
+#: mymoney/mymoneyfile.cpp:1447 mymoney/mymoneyfile.cpp:1469
+msgid "* Problem with account '%1'"
+msgstr "* Problema com a conta '%1'"
+
+#: mymoney/mymoneyfile.cpp:1419
+msgid " * Parent account '%1' belongs to a different group."
+msgstr " * Conta pai '%1' provém de um grupo diferente."
+
+#: mymoney/mymoneyfile.cpp:1420 mymoney/mymoneyfile.cpp:1450
+msgid " New parent account is the top level account '%1'."
+msgstr " Nova conta pai é a conta '%1' de nível superior"
+
+#: mymoney/mymoneyfile.cpp:1436
+msgid " * Parent account '%1' does not contain '%2' as sub-account."
+msgstr " * Conta pai '%1' não contém '%2' como sub-conta."
+
+#: mymoney/mymoneyfile.cpp:1449
+msgid " * The parent with id %1 does not exist anymore."
+msgstr " * O pai com id %1 não existe mais."
+
+#: mymoney/mymoneyfile.cpp:1471
+msgid " * Child account with id %1 does not exist anymore."
+msgstr " * Conta filho com id %1 não existe mais."
+
+#: mymoney/mymoneyfile.cpp:1472
+msgid " The child account list will be reconstructed."
+msgstr " A lista de contas filho será reconstruída."
+
+#: mymoney/mymoneyfile.cpp:1492
+msgid " * Unable to update account data in engine."
+msgstr " * Não foi possível atualizar dados da conta no motor."
+
+#: mymoney/mymoneyfile.cpp:1499
+msgid "* Reconstructing the child lists for"
+msgstr "* Reconstruindo a lista de filhos para"
+
+#: mymoney/mymoneyfile.cpp:1536
+msgid " * Unable to update account data for account %1 in engine"
+msgstr " * Não foi possível atualizar os dados da conta para a conta %1 no motor"
+
+#: mymoney/mymoneyfile.cpp:1554
+msgid " * Payee %1 recreated with fixed id"
+msgstr " * Beneficiário %1 recriado com id fixo"
+
+#: mymoney/mymoneyfile.cpp:1583
+msgid " * Payee id updated in split of transaction '%1'."
+msgstr " * Id do beneficiário atualizado na parcela da transação '%1'."
+
+#: mymoney/mymoneyfile.cpp:1596
+msgid " * shares set to value in split of transaction '%1'."
+msgstr " * cotas configuradas para valor na parcela da transação '%1'."
+
+#: mymoney/mymoneyfile.cpp:1599
+msgid " * value set to shares in split of transaction '%1'."
+msgstr " * valor para cotas na parcela da transação '%1'."
+
+#: mymoney/mymoneyfile.cpp:1605
+msgid ""
+" * Split %2 in transaction '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+" * Parcela %2 na transação '%1' contém uma referência para uma conta "
+"inválida %3. Por favor, corrija manualmente."
+
+#: mymoney/mymoneyfile.cpp:1616
+msgid " * action marked as interest in split of transaction '%1'."
+msgstr " * ação marcada como juros na parcela da transação '%1'."
+
+#: mymoney/mymoneyfile.cpp:1643
+msgid " * Payee id updated in split of schedule '%1'."
+msgstr " * Id do beneficiário atualizado na parcela do agendamento '%1'."
+
+#: mymoney/mymoneyfile.cpp:1649
+msgid " * Split in scheduled transaction '%1' contained value != 0 and shares == 0."
+msgstr " * Parcela na transação '%1' agendada contém valor != 0 e cotas == 0."
+
+#: mymoney/mymoneyfile.cpp:1650
+msgid " Shares set to value."
+msgstr " Cotas configuradas para valor."
+
+#: mymoney/mymoneyfile.cpp:1658
+msgid " * Removed bankid from split in scheduled transaction '%1'."
+msgstr " * Id do banco removido da parcela na transação agendada '%1'."
+
+#: mymoney/mymoneyfile.cpp:1671
+msgid " * shares set to value in split in schedule '%1'."
+msgstr " * cotas inseridas ao valor na parcela de agendamento '%1'."
+
+#: mymoney/mymoneyfile.cpp:1674
+msgid " * value set to shares in split in schedule '%1'."
+msgstr " * valor para cotas na parcela de agendamento '%1'."
+
+#: mymoney/mymoneyfile.cpp:1680
+msgid ""
+" * Split %2 in schedule '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+" * Parcela %2 no agendamento '%1' contém uma referência para uma conta "
+"inválida %3. Por favor, corrija manualmente."
+
+#: mymoney/mymoneyfile.cpp:1706
+msgid " * Payee id updated in report '%1'."
+msgstr " * Id do beneficiário atualizada no relatório '%1'."
+
+#: mymoney/mymoneyfile.cpp:1723
+msgid " * Payee '%1' removed."
+msgstr " * Beneficiário '%1' removido."
+
+#: mymoney/mymoneyfile.cpp:1730
+msgid "Finish! Data is consistent."
+msgstr "Terminado! Dados estão consistentes."
+
+#: mymoney/mymoneyfile.cpp:1732
+msgid "Finish! %1 problem(s) corrected. %2 problem(s) still present."
+msgstr "Terminado! %1 porblema(s) corrigido(s). %2 problema(s) ainda presente(s)."
+
+#: mymoney/mymoneyscheduled.cpp:873 mymoney/mymoneyscheduled.cpp:918
+#: mymoney/mymoneyscheduled.cpp:969 mymoney/mymoneyscheduled.cpp:1265
+#: mymoney/mymoneyscheduletest.cpp:1336
+msgid "Once"
+msgstr "Uma vez"
+
+#: mymoney/mymoneyscheduled.cpp:875 mymoney/mymoneyscheduled.cpp:924
+#: mymoney/mymoneyscheduled.cpp:1267 mymoney/mymoneyscheduletest.cpp:1337
+#: widgets/rc.cpp:72
+msgid "Daily"
+msgstr "Diariamente"
+
+#: mymoney/mymoneyscheduled.cpp:877 mymoney/mymoneyscheduled.cpp:931
+#: mymoney/mymoneyscheduled.cpp:1269 mymoney/mymoneyscheduletest.cpp:1338
+#: widgets/rc.cpp:73
+msgid "Weekly"
+msgstr "Semanalmente"
+
+#: mymoney/mymoneyscheduled.cpp:881 mymoney/mymoneyscheduled.cpp:932
+#: mymoney/mymoneyscheduled.cpp:1273 mymoney/mymoneyscheduletest.cpp:1339
+msgid "Every other week"
+msgstr "Em semanas alternadas"
+
+#: mymoney/mymoneyscheduled.cpp:879 mymoney/mymoneyscheduled.cpp:1271
+#: mymoney/mymoneyscheduletest.cpp:1340
+msgid "Fortnightly"
+msgstr "A cada duas semanas"
+
+#: mymoney/mymoneyscheduled.cpp:883 mymoney/mymoneyscheduled.cpp:941
+#: mymoney/mymoneyscheduled.cpp:1275 mymoney/mymoneyscheduletest.cpp:1341
+msgid "Every half month"
+msgstr "A cada quinzena"
+
+#: mymoney/mymoneyscheduled.cpp:887 mymoney/mymoneyscheduled.cpp:934
+#: mymoney/mymoneyscheduled.cpp:1279 mymoney/mymoneyscheduletest.cpp:1342
+msgid "Every four weeks"
+msgstr "A cada quatro semanas"
+
+#: mymoney/mymoneyscheduled.cpp:893 mymoney/mymoneyscheduled.cpp:935
+#: mymoney/mymoneyscheduled.cpp:1285 mymoney/mymoneyscheduletest.cpp:1344
+msgid "Every eight weeks"
+msgstr "A cada oito semanas"
+
+#: mymoney/mymoneyscheduled.cpp:895 mymoney/mymoneyscheduled.cpp:948
+#: mymoney/mymoneyscheduled.cpp:1287 mymoney/mymoneyscheduletest.cpp:1345
+msgid "Every two months"
+msgstr "A cada dois meses"
+
+#: mymoney/mymoneyscheduled.cpp:897 mymoney/mymoneyscheduled.cpp:949
+#: mymoney/mymoneyscheduled.cpp:1289 mymoney/mymoneyscheduletest.cpp:1346
+msgid "Every three months"
+msgstr "A cada três meses"
+
+#: mymoney/mymoneyscheduled.cpp:899 mymoney/mymoneyscheduled.cpp:1291
+#: mymoney/mymoneyscheduletest.cpp:1347 widgets/rc.cpp:76
+msgid "Quarterly"
+msgstr "Trimestralmente"
+
+#: mymoney/mymoneyscheduled.cpp:901 mymoney/mymoneyscheduled.cpp:950
+#: mymoney/mymoneyscheduled.cpp:1293 mymoney/mymoneyscheduletest.cpp:1348
+msgid "Every four months"
+msgstr "A cada quatro meses"
+
+#: mymoney/mymoneyscheduled.cpp:903 mymoney/mymoneyscheduled.cpp:951
+#: mymoney/mymoneyscheduled.cpp:1295 mymoney/mymoneyscheduletest.cpp:1349
+msgid "Twice yearly"
+msgstr "Duas vezes ao ano"
+
+#: mymoney/mymoneyscheduled.cpp:905 mymoney/mymoneyscheduled.cpp:957
+#: mymoney/mymoneyscheduled.cpp:1297 mymoney/mymoneyscheduletest.cpp:1350
+#: widgets/rc.cpp:20 widgets/rc.cpp:77
+msgid "Yearly"
+msgstr "Anualmente"
+
+#: mymoney/mymoneyscheduled.cpp:907 mymoney/mymoneyscheduled.cpp:958
+#: mymoney/mymoneyscheduled.cpp:1299 mymoney/mymoneyscheduletest.cpp:1351
+msgid "Every other year"
+msgstr "Em anos alternados"
+
+#: mymoney/mymoneyscheduled.cpp:870 mymoney/mymoneyscheduled.cpp:913
+#: mymoney/mymoneyscheduled.cpp:966
+msgid "Any"
+msgstr "Qualquer"
+
+#: mymoney/mymoneyscheduled.cpp:885 mymoney/mymoneyscheduled.cpp:933
+#: mymoney/mymoneyscheduled.cpp:1277
+msgid "Every three weeks"
+msgstr "A cada três semanas"
+
+#: mymoney/mymoneyscheduled.cpp:889 mymoney/mymoneyscheduled.cpp:925
+#: mymoney/mymoneyscheduled.cpp:1281
+msgid "Every thirty days"
+msgstr "A cada trinta dias"
+
+#: mymoney/mymoneyscheduled.cpp:971
+msgid "Day"
+msgstr "Dia"
+
+#: mymoney/mymoneyscheduled.cpp:973 reports/listtable.cpp:206
+#: widgets/kmymoneycalendar.cpp:123 widgets/rc.cpp:97
+msgid "Week"
+msgstr "Semana"
+
+#: mymoney/mymoneyscheduled.cpp:975
+msgid "Half-month"
+msgstr "Quinzena"
+
+#: mymoney/mymoneyscheduled.cpp:977 reports/listtable.cpp:205
+#: widgets/kmymoneycalendar.cpp:124 widgets/rc.cpp:96
+msgid "Month"
+msgstr "Mês"
+
+#: dialogs/rc.cpp:400 mymoney/mymoneyscheduled.cpp:979 views/rc.cpp:14
+msgid "Year"
+msgstr "Ano"
+
+#: mymoney/mymoneyscheduled.cpp:989
+msgid "Bill"
+msgstr "Conta a Pagar"
+
+#: dialogs/rc.cpp:107 dialogs/rc.cpp:162 dialogs/rc.cpp:249 dialogs/rc.cpp:754
+#: mymoney/mymoneyscheduled.cpp:992 widgets/kmymoneycombo.cpp:420
+#: widgets/register.cpp:571
+msgid "Deposit"
+msgstr "Depósito"
+
+#: mymoney/mymoneyscheduled.cpp:995 reports/querytable.cpp:594
+#: reports/querytable.cpp:696 widgets/kmymoneycombo.cpp:419
+msgid "Transfer"
+msgstr "Transferência"
+
+#: mymoney/mymoneyscheduled.cpp:1035
+msgid "Any (Error)"
+msgstr "Qualquer (Erro)"
+
+#: dialogs/rc.cpp:114 mymoney/mymoneyscheduled.cpp:1047
+msgid "Change the date to the previous Friday"
+msgstr "Mudar a data para a sexta-feira anterior"
+
+#: dialogs/rc.cpp:115 mymoney/mymoneyscheduled.cpp:1050
+msgid "Change the date to the next Monday"
+msgstr "Mudar a data para a próxima segunda-feira"
+
+#: mymoney/mymoneyscheduled.cpp:1053
+msgid "Do Nothing"
+msgstr "Não fazer nada"
+
+#: kmymoney2.cpp:312
+msgid "Open database..."
+msgstr "Abrir banco de dados..."
+
+#: kmymoney2.cpp:313
+msgid "Save as database..."
+msgstr "Salvar como banco de dados..."
+
+#: kmymoney2.cpp:314
+msgid "Backup..."
+msgstr "Cópia de Segurança..."
+
+#: kmymoney2.cpp:315 kmymoney2.cpp:321
+msgid "QIF..."
+msgstr "QIF..."
+
+#: kmymoney2.cpp:316
+msgid "Gnucash..."
+msgstr "Gnucash..."
+
+#: kmymoney2.cpp:317
+msgid "Statement file..."
+msgstr "Arquivo de extrato..."
+
+#: kmymoney2.cpp:319 kmymoney2.cpp:320
+msgid "Account Template..."
+msgstr "Modelo de Contas..."
+
+#: kmymoney2.cpp:322
+msgid "Personal Data..."
+msgstr "Dados Pessoais..."
+
+#: kmymoney2.cpp:325
+msgid "Dump Memory"
+msgstr "Esvaziar a Memória"
+
+#: kmymoney2.cpp:327
+msgid "File-Information..."
+msgstr "Informações do Arquivo..."
+
+#: kmymoney2.cpp:332
+msgid "Find transaction..."
+msgstr "Procurar transação..."
+
+#: kmymoney2.cpp:337
+msgid "Show Transaction Detail"
+msgstr "Mostrar Detalhes da Transação"
+
+#: kmymoney2.cpp:338 rc.cpp:60
+msgid "Hide reconciled transactions"
+msgstr "Ocultar transações reconciliadas"
+
+#: kmymoney2.cpp:339 rc.cpp:57
+msgid "Hide unused categories"
+msgstr "Ocultar categorias não utilizadas"
+
+#: kmymoney2.cpp:340
+msgid "Show all accounts"
+msgstr "Mostrar todas as contas"
+
+#: kmymoney2.cpp:345
+msgid "New institution..."
+msgstr "Nova instituição..."
+
+#: kmymoney2.cpp:346
+msgid "Edit institution..."
+msgstr "Editar instituição..."
+
+#: kmymoney2.cpp:347
+msgid "Delete institution..."
+msgstr "Apagar instituição..."
+
+#: kmymoney2.cpp:352
+msgid "New account..."
+msgstr "Nova conta..."
+
+#: kmymoney2.cpp:354
+msgid "Open ledger"
+msgstr "Abrir livro de registros"
+
+#: kmymoney2.cpp:355
+msgid "Reconcile..."
+msgstr "Reconciliar..."
+
+#: kmymoney2.cpp:356
+msgid ""
+"_: Finish reconciliation\n"
+"Finish"
+msgstr "Terminar"
+
+#: kmymoney2.cpp:357
+msgid ""
+"_: Postpone reconciliation\n"
+"Postpone"
+msgstr "Adiar"
+
+#: kmymoney2.cpp:358
+msgid "Edit account..."
+msgstr "Editar conta..."
+
+#: kmymoney2.cpp:359
+msgid "Delete account..."
+msgstr "Apagar conta..."
+
+#: kmymoney2.cpp:360
+msgid "Close account"
+msgstr "Fechar conta"
+
+#: kmymoney2.cpp:361
+msgid "Reopen account"
+msgstr "Reabrir conta"
+
+#: kmymoney2.cpp:362
+msgid "Transaction report"
+msgstr "Relatório de transação"
+
+#: kmymoney2.cpp:364
+msgid "Show balance chart..."
+msgstr "Mostrar gráfico de saldo..."
+
+#: kmymoney2.cpp:366
+msgid "Map to online account"
+msgstr "Mapear para conta online"
+
+#: kmymoney2.cpp:367
+msgid "Unmap account"
+msgstr "Desmapear conta"
+
+#: dialogs/settings/rc.cpp:126 kmymoney2.cpp:368 views/kpayeesview.cpp:363
+#: widgets/rc.cpp:50
+msgid "Update"
+msgstr "Atualizar"
+
+#: kmymoney2.cpp:372
+msgid "Update account..."
+msgstr "Atualizar conta..."
+
+#: kmymoney2.cpp:373
+msgid "Update all accounts..."
+msgstr "Atualizar todas as contas..."
+
+#: kmymoney2.cpp:378
+msgid "New category..."
+msgstr "Nova categoria..."
+
+#: kmymoney2.cpp:379
+msgid "Edit category..."
+msgstr "Editar categoria..."
+
+#: kmymoney2.cpp:380
+msgid "Delete category..."
+msgstr "Apagar categoria..."
+
+#: kmymoney2.cpp:386
+msgid "QIF Profile Editor..."
+msgstr "Editor de Perfil QIF..."
+
+#: kmymoney2.cpp:387
+msgid "Securities..."
+msgstr "Títulos..."
+
+#: kmymoney2.cpp:388
+msgid "Currencies..."
+msgstr "Moedas..."
+
+#: kmymoney2.cpp:389
+msgid "Prices..."
+msgstr "Preços..."
+
+#: kmymoney2.cpp:390
+msgid "Update Stock and Currency Prices..."
+msgstr "Atualizar Preços e Moeda da Ação..."
+
+#: kmymoney2.cpp:391
+msgid "Consistency Check"
+msgstr "Checagem de Consistência"
+
+#: kmymoney2.cpp:392
+msgid "Performance-Test"
+msgstr "Teste de Desempenho"
+
+#: kmymoney2.cpp:393
+msgid "KCalc..."
+msgstr "KCalc..."
+
+#: kmymoney2.cpp:399
+msgid "Enable all messages"
+msgstr "Habilitar todas as mensagens"
+
+#: kmymoney2.cpp:400
+msgid "KDE language settings..."
+msgstr "Configurações de idioma do KDE..."
+
+#: kmymoney2.cpp:405
+msgid "&Show tip of the day"
+msgstr "&Mostrar dica do dia"
+
+#: kmymoney2.cpp:410
+msgid ""
+"_: New transaction button\n"
+"New"
+msgstr "Nova"
+
+#: kmymoney2.cpp:415
+msgid ""
+"_: Edit transaction button\n"
+"Edit"
+msgstr "Editar"
+
+#: kmymoney2.cpp:417
+msgid ""
+"_: Enter transaction\n"
+"Enter"
+msgstr "Inserir"
+
+#: kmymoney2.cpp:420
+msgid ""
+"_: Edit split button\n"
+"Edit splits"
+msgstr "Editar parcelas"
+
+#: kmymoney2.cpp:421
+msgid ""
+"_: Cancel transaction edit\n"
+"Cancel"
+msgstr "Cancelar"
+
+#: kmymoney2.cpp:422
+msgid ""
+"_: Delete transaction\n"
+"Delete"
+msgstr "Apagar"
+
+#: kmymoney2.cpp:423
+msgid ""
+"_: Duplicate transaction\n"
+"Duplicate"
+msgstr "Duplicar"
+
+#: kmymoney2.cpp:425 kmymoney2.cpp:4826 kmymoney2.cpp:5107
+msgid ""
+"_: Button text for match transaction\n"
+"Match"
+msgstr "Corresponder"
+
+#: kmymoney2.cpp:426
+msgid ""
+"_: Accept 'imported' and 'matched' transaction\n"
+"Accept"
+msgstr "Aceitar"
+
+#: kmymoney2.cpp:428
+msgid ""
+"_: Toggle reconciliation flag\n"
+"Toggle"
+msgstr "Trocar"
+
+#: kmymoney2.cpp:429
+msgid ""
+"_: Mark transaction cleared\n"
+"Cleared"
+msgstr "Compensada"
+
+#: kmymoney2.cpp:430
+msgid ""
+"_: Mark transaction reconciled\n"
+"Reconciled"
+msgstr "Reconciliada"
+
+#: kmymoney2.cpp:431
+msgid ""
+"_: Mark transaction not reconciled\n"
+"Not reconciled"
+msgstr "Não reconciliada"
+
+#: kmymoney2.cpp:432
+msgid ""
+"_: Select all transactions\n"
+"Select all"
+msgstr "Selecionar tudo"
+
+#: kmymoney2.cpp:434 kmymoney2.cpp:5497
+msgid "Goto account"
+msgstr "Ir para conta"
+
+#: kmymoney2.cpp:435 kmymoney2.cpp:5495
+msgid "Goto payee"
+msgstr "Ir para beneficiário"
+
+#: kmymoney2.cpp:436
+msgid "Create scheduled transaction..."
+msgstr "Criar transação agendada..."
+
+#: kmymoney2.cpp:437
+msgid "Assign next number"
+msgstr "Atribuir próximo número"
+
+#: kmymoney2.cpp:438
+msgid ""
+"_: Combine transactions\n"
+"Combine"
+msgstr "Combinar"
+
+#: kmymoney2.cpp:440
+msgid "New investment"
+msgstr "Novo investimento"
+
+#: kmymoney2.cpp:441
+msgid "Edit investment..."
+msgstr "Editar investimento..."
+
+#: kmymoney2.cpp:442
+msgid "Delete investment..."
+msgstr "Apagar investimento..."
+
+#: kmymoney2.cpp:443
+msgid "Online price update..."
+msgstr "Atualizar preços pela rede..."
+
+#: kmymoney2.cpp:444
+msgid "Manual price update..."
+msgstr "Atualizar preços manualmente..."
+
+#: kmymoney2.cpp:446
+msgid "New scheduled transaction..."
+msgstr "Nova transação agendada..."
+
+#: kmymoney2.cpp:447
+msgid "Edit scheduled transaction..."
+msgstr "Editar transação agendada..."
+
+#: kmymoney2.cpp:448
+msgid "Delete scheduled transaction..."
+msgstr "Apagar transação agendada..."
+
+#: kmymoney2.cpp:449
+msgid "Duplicate scheduled transaction"
+msgstr "Duplicar transação agendada"
+
+#: kmymoney2.cpp:450
+msgid "Enter next transaction..."
+msgstr "Inserir próxima transação..."
+
+#: kmymoney2.cpp:451
+msgid "Skip next transaction..."
+msgstr "Pular próxima transação..."
+
+#: kmymoney2.cpp:453
+msgid "New payee"
+msgstr "Novo beneficiário"
+
+#: kmymoney2.cpp:454
+msgid "Rename payee"
+msgstr "Renomear beneficiário"
+
+#: kmymoney2.cpp:455
+msgid "Delete payee"
+msgstr "Apagar beneficiário"
+
+#: kmymoney2.cpp:457
+msgid "New budget"
+msgstr "Novo orçamento"
+
+#: kmymoney2.cpp:458
+msgid "Rename budget"
+msgstr "Renomear orçamento"
+
+#: kmymoney2.cpp:459
+msgid "Delete budget"
+msgstr "Apagar orçamento"
+
+#: kmymoney2.cpp:460
+msgid "Copy budget"
+msgstr "Copiar orçamento"
+
+#: kmymoney2.cpp:461
+msgid "Change budget year"
+msgstr "Modificar ano do orçamento"
+
+#: kmymoney2.cpp:462
+msgid ""
+"_: Budget based on forecast\n"
+"Forecast"
+msgstr "Previsão"
+
+#: kmymoney2.cpp:467 kmymoney2.cpp:3990 kmymoney2.cpp:3993 kmymoney2.cpp:3999
+msgid "New currency"
+msgstr "Nova moeda"
+
+#: kmymoney2.cpp:468 kmymoney2.cpp:4021 kmymoney2.cpp:4026
+msgid "Rename currency"
+msgstr "Renomear moeda"
+
+#: kmymoney2.cpp:469 kmymoney2.cpp:4039
+msgid "Delete currency"
+msgstr "Apagar moeda"
+
+#: dialogs/rc.cpp:69 kmymoney2.cpp:470
+msgid "Select as base currency"
+msgstr "Selecionar como moeda base"
+
+#: kmymoney2.cpp:481
+msgid "View back"
+msgstr "Ver anterior"
+
+#: kmymoney2.cpp:482
+msgid "View forward"
+msgstr "Ver seguinte"
+
+#: kmymoney2.cpp:611
+msgid "KMyMoney file needs saving. Save ?"
+msgstr "O Arquivo do KMyMoney precisa ser salvo. Salvar?"
+
+#: kmymoney2.cpp:757
+msgid "Creating new document..."
+msgstr "Criando um novo documento..."
+
+#: kmymoney2.cpp:869 kmymoney2.cpp:884
+msgid "Open a file."
+msgstr "Abrir um arquivo."
+
+#: kmymoney2.cpp:872
+msgid ""
+"%1|KMyMoney files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Arquivos do KMyMoney\n"
+"%2|Todos arquivos (*.*)"
+
+#: kmymoney2.cpp:873
+msgid "Open File..."
+msgstr "Abrir Arquivo..."
+
+#: kmymoney2.cpp:925 kstartuplogo.cpp:100
+msgid "Loading file..."
+msgstr "Carregando arquivo..."
+
+#: kmymoney2.cpp:986
+msgid ""
+"<b>%1</b> is either an invalid filename or the file does not exist. You can "
+"open another file or create a new one."
+msgstr ""
+"<b>%1</b> é um nome de arquivo inválido ou de um arquivo que não existe. "
+"Você pode abrir outro arquivo ou criar um novo."
+
+#: kmymoney2.cpp:986
+msgid "File not found"
+msgstr "Arquivo não encontrado"
+
+#: kmymoney2.cpp:989
+msgid "File <b>%1</b> is already opened in another instance of KMyMoney"
+msgstr "O arquivo <b>%1</b> já está aberto em outra instância do KMyMoney"
+
+#: kmymoney2.cpp:989
+msgid "Duplicate open"
+msgstr "Abrir duplicata"
+
+#: kmymoney2.cpp:1001
+msgid "Saving file..."
+msgstr "Salvando arquivo..."
+
+#: kmymoney2.cpp:1035 kmymoney2.cpp:1047 kmymoney2.cpp:1071
+#, c-format
+msgid "Additional encryption key(s) to be used: %1"
+msgstr "Chave(s) de criptografia adicionais a ser(em) usada(s): %1"
+
+#: kmymoney2.cpp:1056
+msgid "Saving file with a new filename..."
+msgstr "Salvando arquivo com um novo nome..."
+
+#: kmymoney2.cpp:1067
+msgid "Encryption key to be used"
+msgstr "Chave de criptografia a ser usada"
+
+#: kmymoney2.cpp:1072
+msgid "Manage additional keys"
+msgstr "Gerenciar chaves adicionais"
+
+#: kmymoney2.cpp:1079
+msgid "No encryption"
+msgstr "Sem criptografia"
+
+#: kmymoney2.cpp:1102
+msgid ""
+"_: KMyMoney (Filefilter)\n"
+"KMyMoney files"
+msgstr "Arquivos KMyMoney"
+
+#: kmymoney2.cpp:1103
+msgid ""
+"_: XML (Filefilter)\n"
+"XML files"
+msgstr "Arquivos XML"
+
+#: kmymoney2.cpp:1104
+msgid ""
+"_: Anonymous (Filefilter)\n"
+"Anonymous files"
+msgstr "Arquivos Anônimos"
+
+#: kmymoney2.cpp:1105
+msgid "All files"
+msgstr "Todos os arquivos"
+
+#: kmymoney2.cpp:1193
+msgid "Saving file to database..."
+msgstr "Salvando arquivo num banco de dados..."
+
+#: kmymoney2.cpp:1207
+msgid "Cannot save to current database."
+msgstr "Não foi possível salvar para o banco de dados atual."
+
+#: kmymoney2.cpp:1225
+msgid "Closing window..."
+msgstr "Fechando janela..."
+
+#: kmymoney2.cpp:1228 kmymoney2.cpp:1249
+msgid "The file has been changed, save it ?"
+msgstr "O arquivo foi modificado, deseja salvá-lo?"
+
+#: kmymoney2.cpp:1339 kmymoney2.cpp:1352
+msgid "Ready."
+msgstr "Pronto."
+
+#: kmymoney2.cpp:1397 kmymoney2.cpp:1433
+msgid "No KMyMoneyFile open"
+msgstr "Nenhum arquivo KMyMoney aberto"
+
+#: kmymoney2.cpp:1401
+msgid "Viewing personal data..."
+msgstr "Visualizando dados pessoais..."
+
+#: kmymoney2.cpp:1408
+msgid "Edit Personal Data"
+msgstr "Editar Dados Pessoais"
+
+#: kmymoney2.cpp:1424
+#, c-format
+msgid "Unable to store user information: %1"
+msgstr "Não foi possível armazenar as informações do usuário: %1"
+
+#: kmymoney2.cpp:1447
+msgid "Importing account templates."
+msgstr "Importando modelos de contas."
+
+#: kmymoney2.cpp:1462
+msgid "Unable to import template(s): %1, thrown in %2:%3"
+msgstr "Não foi possível importar modelo(s): %1. lançado em %2:%3"
+
+#: kmymoney2.cpp:1471
+msgid "Exporting account templates."
+msgstr "Exportando modelos de conta."
+
+#: kmymoney2.cpp:1474
+msgid ""
+"*.kmt|KMyMoney template files\n"
+"*.*|All files"
+msgstr ""
+"*.kmt|Arquivos de modelos de contas do KMyMoney\n"
+"*.*|Todos os arquivos"
+
+#: kmymoney2.cpp:1475
+msgid "Save as..."
+msgstr "Slavar como..."
+
+#: kmymoney2.cpp:1517
+msgid "Importing file..."
+msgstr "Importando arquivo..."
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "The statements have been processed with the following results:"
+msgstr "Os extratos foram processado com os seguintes resultados:"
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:1754 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "Statement stats"
+msgstr "Estatísticas do Extrato"
+
+#: kmymoney2.cpp:1602
+msgid ""
+"You cannot import GnuCash data into an existing file. Do you wish to save "
+"this file?"
+msgstr ""
+"Você não pode importar dados do GnuCash em um arquivo existente. Você deseja "
+"salvar este arquivo?"
+
+#: kmymoney2.cpp:1615
+msgid "Importing a Gnucash file."
+msgstr "Importando um arquivo Gnucash."
+
+#: kmymoney2.cpp:1618
+msgid ""
+"%1|Gnucash files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Arquivos Gnucash\n"
+"%2|Todos os arquivos (*.*)"
+
+#: kmymoney2.cpp:1619
+msgid "Import Gnucash file..."
+msgstr "Importar arquivo Gnucash..."
+
+#: kmymoney2.cpp:1658
+msgid "Importing an XML Statement."
+msgstr "Importando um Extrato XML."
+
+#: kmymoney2.cpp:1661
+msgid ""
+"%1|XML files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Arquivos XML\n"
+"%2|Todos os arquivos (*.*)"
+
+#: kmymoney2.cpp:1662
+msgid "Import XML Statement..."
+msgstr "Importar Extrato XML..."
+
+#: kmymoney2.cpp:1718
+msgid "Error importing %1: This file is not a valid KMM statement file."
+msgstr "Erro ao importar %1: Este arquivo não é um arquivo de extrado KMM válido."
+
+#: kmymoney2.cpp:1718
+msgid "Invalid Statement"
+msgstr "Extrato Inválido"
+
+#: kmymoney2.cpp:1754
+msgid "The statement has been processed with the following results:"
+msgstr "O extrato foi processado com os seguintes resultados:"
+
+#: kmymoney2.cpp:1763
+msgid "Exporting file..."
+msgstr "Exportando arquivo..."
+
+#: kmymoney2.cpp:1786
+msgid "The file <b>%1</b> already exists. Do you really want to override it?"
+msgstr "O arquivo <b>%1</b> já existe. Você realmente deseja sobrescrevê-lo?"
+
+#: kmymoney2.cpp:1786
+msgid "File already exists"
+msgstr "Arquivo já existe"
+
+#: dialogs/rc.cpp:347 dialogs/rc.cpp:649 dialogs/rc.cpp:798 kmymoney2.cpp:1815
+msgid "General"
+msgstr "Geral"
+
+#: kmymoney2.cpp:1816
+msgid "Register"
+msgstr "Registro"
+
+# TODO: Verify
+#: kmymoney2.cpp:1817 views/khomeview.cpp:88 views/kmymoneyview.cpp:136
+msgid "Home"
+msgstr "Início"
+
+#: kmymoney2.cpp:1818 views/kmymoneyview.cpp:176
+msgid ""
+"Scheduled\n"
+"transactions"
+msgstr ""
+"Transações\n"
+"Agendadas"
+
+#: kmymoney2.cpp:1819
+msgid "Encryption"
+msgstr "Criptografia"
+
+#: kmymoney2.cpp:1820
+msgid "Colors"
+msgstr "Cores"
+
+#: dialogs/rc.cpp:344 dialogs/settings/rc.cpp:107 kmymoney2.cpp:1822
+#: widgets/rc.cpp:33
+msgid "Online Quotes"
+msgstr "Cotações Online"
+
+#: kmymoney2.cpp:1823 reports/pivottable.cpp:2426 views/kmymoneyview.cpp:251
+#: views/kmymoneyview.cpp:253 views/kreportsview.cpp:1415 views/rc.cpp:41
+msgid "Forecast"
+msgstr "Previsão"
+
+#: kmymoney2.cpp:1824
+msgid "Plugins"
+msgstr "Plugins"
+
+#: kmymoney2.cpp:1893
+msgid ""
+"The file must be saved first before it can be backed up. Do you want to "
+"continue?"
+msgstr ""
+"O arquivo deve ser salvo primeiro, para que possa ser feita uma cópia "
+"reserva. Você deseja continuar?"
+
+#: kmymoney2.cpp:1910
+msgid ""
+"The current implementation of the backup functionality only supports local "
+"files as source files! Your current source file is '%1'."
+msgstr ""
+"A implementação atual da funcionalidade de cópia de segurança somente "
+"suporta arquivos locais como arquivos origem! Seu arquivo origem atual é '%"
+"1'."
+
+#: kmymoney2.cpp:1913
+msgid "Local files only"
+msgstr "Arquivos locais somente"
+
+#: kmymoney2.cpp:1928
+#, c-format
+msgid "Mounting %1"
+msgstr "Montando %1"
+
+#: kmymoney2.cpp:1967
+msgid "Backup file for today exists on that device. Replace ?"
+msgstr ""
+"Já existe um arquivo de cópia de segurança de hoje neste dispositivo. "
+"Deseja substituí-lo?"
+
+#: dialogs/rc.cpp:7 kmymoney2.cpp:1967 kmymoney2.cpp:1994 kmymoney2.cpp:2024
+#: kmymoney2.cpp:2032 kmymoney2.cpp:2057 kmymoney2.cpp:2059
+msgid "Backup"
+msgstr "Cópia de Segurança"
+
+#: kmymoney2.cpp:1967
+msgid "&Replace"
+msgstr "&Substituir"
+
+#: kmymoney2.cpp:1972 kmymoney2.cpp:1997 kmymoney2.cpp:2016 kmymoney2.cpp:2035
+#, c-format
+msgid "Unmounting %1"
+msgstr "Desmontando %1"
+
+#: kmymoney2.cpp:1987
+#, c-format
+msgid "Writing %1"
+msgstr "Gravando %1"
+
+#: kmymoney2.cpp:1994
+msgid "Error mounting device"
+msgstr "Erro montando dispositivo"
+
+#: converter/mymoneygncreader.cpp:1995 kmymoney2.cpp:2023 kmymoney2.cpp:2055
+msgid "Done"
+msgstr "Feito"
+
+#: kmymoney2.cpp:2024 kmymoney2.cpp:2057
+msgid "File successfully backed up"
+msgstr "Cópia de segurança do arquivo feita com sucesso"
+
+#: kmymoney2.cpp:2032
+msgid "Error copying file to device"
+msgstr "Erro copiando arquivo para o dispositivo"
+
+#: kmymoney2.cpp:2059
+msgid "Error unmounting device"
+msgstr "Erro desmontando dispositivo"
+
+#: kmymoney2.cpp:2143
+#, c-format
+msgid "Cannot add institution: %1"
+msgstr "Não foi possível adicionar a instituição: %1"
+
+#: kmymoney2.cpp:2185
+#, c-format
+msgid "Unable to store institution: %1"
+msgstr "Não foi possível armazenar instituição: %1"
+
+#: kmymoney2.cpp:2192
+#, c-format
+msgid "Unable to edit institution: %1"
+msgstr "Não foi possível editar instituição: %1"
+
+#: kmymoney2.cpp:2203
+msgid "Do you really want to delete institution <b>%1</b> ?"
+msgstr "Você realmente deseja apagar a instituição <b>%1</b> ?"
+
+#: kmymoney2.cpp:2211 kmymoney2.cpp:2215
+#, c-format
+msgid "Unable to delete institution: %1"
+msgstr "Não foi possível apagar a instituição: %1"
+
+#: kmymoney2.cpp:2268
+#, c-format
+msgid "Unable to find account: %1"
+msgstr "Não foi possível encontrar a conta: %1"
+
+#: kmymoney2.cpp:2309
+msgid ""
+"This account is a liability and if the opening balance represents money "
+"owed, then it should be negative. Negate the amount?\n"
+"\n"
+"Please click Yes to change the opening balance to %1,\n"
+"Please click No to leave the amount as %2,\n"
+"Please click Cancel to abort the account creation."
+msgstr ""
+"Esta conta é um passivo e se o saldo de abertura representa dinheiro devido, "
+"então ele deve ser negativo. Inverter o sinal do montante?\n"
+"\n"
+"Por favor, clique em Sim para mudar o saldo de abertura para %1,\n"
+"Por favor, clique em Não para deixar o montante com %2,\n"
+"Por favor, clique em Cancelar para abortar a criação da conta."
+
+#: kmymoney2.cpp:2345 kmymoney2.cpp:2346
+msgid "Loan payout"
+msgstr "Pagamento do financiamento"
+
+#: dialogs/knewloanwizard.cpp:892 kmymoney2.cpp:2374
+#, c-format
+msgid "Unable to add account: %1"
+msgstr "Não foi possível adicionar a conta: %1"
+
+#: kmymoney2.cpp:2392
+msgid ""
+"The category <b>%1</b> currently does not exist. Do you want to create it?"
+"<p><i>The parent account will default to <b>%2</b> but can be changed in the "
+"following dialog</i>."
+msgstr ""
+"A categoria <b>%1</b> atualmente não existe. Você deseja criá-la?<p><i>A "
+"conta pai será a <b>%2</b> mas ela pode ser modificada no diálogo a seguir</"
+"i>."
+
+#: kmymoney2.cpp:2392
+msgid "Create category"
+msgstr "Criar categoria"
+
+#: kmymoney2.cpp:2429
+msgid "Create a new Category"
+msgstr "Criar uma nova Categoria"
+
+#: kmymoney2.cpp:2505
+#, c-format
+msgid "Unable to create account: %1"
+msgstr "Não foi possível criar a conta: %1"
+
+#: kmymoney2.cpp:2516
+msgid ""
+"The security <b>%1</b> currently does not exist as sub-account of <b>%2</b>. "
+"Do you want to create it?"
+msgstr ""
+"O título <b>%1</b> atualmente não existe como uma sub-conta de <b>%2</b>. "
+"Você deseja criá-lo?"
+
+#: kmymoney2.cpp:2517
+msgid "Create security"
+msgstr "Criar título"
+
+#: kmymoney2.cpp:2551
+msgid "Do you really want to delete the investment <b>%1</b>?"
+msgstr "Você realmente deseja apagar o investimento <b>%1</b>?"
+
+#: kmymoney2.cpp:2551
+msgid "Delete investment"
+msgstr "Remover investimento"
+
+#: kmymoney2.cpp:2558
+#, c-format
+msgid "Unable to delete investment: %1"
+msgstr "Não foi possível apagar o investimento: %1"
+
+#: kmymoney2.cpp:2640 kmymoney2.cpp:2646
+msgid "Unable to add scheduled transaction: "
+msgstr "Não foi possível adicionar transação agendada:"
+
+#: kmymoney2.cpp:2722
+msgid "Adjusting transactions..."
+msgstr "Ajustando transações..."
+
+#: kmymoney2.cpp:2747
+msgid "Adjusting scheduled transactions..."
+msgstr "Ajustando transações agendadas..."
+
+#: kmymoney2.cpp:2765
+msgid "Adjusting budgets..."
+msgstr "Ajustando orçamentos..."
+
+#: kmymoney2.cpp:2783
+msgid "Unable to exchange category <b>%1</b> with category <b>%2</b>. Reason: %3"
+msgstr ""
+"Não foi possível trocar a categoria <b>%1</b> com a categoria <b>%2</b>. "
+"Motivo: %3"
+
+#: kmymoney2.cpp:2804
+msgid "Do you really want to delete category <b>%1</b>?"
+msgstr "Você realmente deseja apagar a categoria <b>%1</b>?"
+
+#: kmymoney2.cpp:2811
+msgid "Unable to delete category <b>%1</b>. Cause: %2"
+msgstr "Não foi possível apagar a categoria <b>%1</b>. Motivo: %2"
+
+#: kmymoney2.cpp:2823
+msgid ""
+"Do you want to delete category <b>%1</b> with all its sub-categories or only "
+"the category itself? If you only delete the category itself, all its sub-"
+"categories will be made sub-categories of <b>%2</b>."
+msgstr ""
+"Você deseja apagar a categoria <b>%1</b> com todas as suas sub-categorias ou "
+"somente a categoria propriamente dita? Se você deseja apagar somente a "
+"categoria em si, todas as suas sub-categorias serão colocadas como sub-"
+"categorias de <b>%2</b>."
+
+#: kmymoney2.cpp:2827
+msgid "Delete all"
+msgstr "Apagar tudo"
+
+#: kmymoney2.cpp:2828
+msgid "Just the category"
+msgstr "Somente a categoria"
+
+#: kmymoney2.cpp:2858
+msgid ""
+"Some sub-categories of category <b>%1</b> cannot be deleted, because they "
+"are still used. They will be made sub-categories of <b>%2</b>. Proceed?"
+msgstr ""
+"Algumas sub-categorias da categoria <b>%1</b> não podem ser removidas porque "
+"elas ainda estão em uso. Elas serão colocadas como sub-categorias de <b>%2</"
+"b>. Proceder?"
+
+#: kmymoney2.cpp:2878
+msgid "Unable to delete a sub-category of category <b>%1</b>. Reason: %2"
+msgstr "Não foi possível apagar uma sub-categoria da categoria <b>%1</b>. Motivo: %2"
+
+#: kmymoney2.cpp:2889
+msgid "Do you really want to delete account <b>%1</b>?"
+msgstr "Você realmente deseja apagar a conta <b>%1</b>?"
+
+#: kmymoney2.cpp:2901
+msgid "Unable to delete account '%1'. Cause: %2"
+msgstr "Não foi possível apagar a conta '%1'. Motivo: %2"
+
+#: kmymoney2.cpp:2917
+msgid "Edit account '%1'"
+msgstr "Editar conta '%1'"
+
+#: kmymoney2.cpp:2922
+msgid "Edit category '%1'"
+msgstr "Editar categoria '%1'"
+
+#: kmymoney2.cpp:3008
+msgid "Unable to modify account '%1'. Cause: %2"
+msgstr "Não foi possível modificar a conta '%1'. Motivo: %2"
+
+#: kmymoney2.cpp:3065
+msgid ""
+"KMyMoney has detected some overdue scheduled transactions for this account. "
+"Do you want to enter those scheduled transactions now?"
+msgstr ""
+"O KMyMoney detectou alguns agendamentos atrasados para esta conta. Você "
+"deseja inserir estas transações agendadas agora?"
+
+#: kmymoney2.cpp:3065
+msgid "Scheduled transactions found"
+msgstr "Transações agendadas encontradas"
+
+#: kmymoney2.cpp:3163
+msgid ""
+"You are about to finish the reconciliation of this account with a difference "
+"between your bank statement and the transactions marked as cleared.\n"
+"Are you sure you want to finish the reconciliation ?"
+msgstr ""
+"Você está prestes a encerrar a reconciliação desta conta com uma diferença "
+"entre o extrato de seu banco e as transações marcadas como compensadas.\n"
+"Você tem certeza que deseja encerrar a reconciliação?"
+
+#: kmymoney2.cpp:3165
+msgid "Confirm end of reconciliation"
+msgstr "Confirmar fim da reconciliação"
+
+#: kmymoney2.cpp:3339
+msgid ""
+"You have closed this account. It remains in the system because you have "
+"transactions which still refer to it, but is not shown in the views. You can "
+"make it visible again by going to the View menu and selecting <b>Show all "
+"accounts</b> or by unselecting the <b>Don't show closed accounts</b> setting."
+msgstr ""
+"Você fechou esta conta. Ela permanece no sistema porque você possui "
+"transações que ainda se referem a ela, mas ela não é exibida nas visões. "
+"Você pode torná-la visível novamente acessando o menu 'Ver' e selecionando "
+"<b>Mostrar todas as contas</b> ou desabilitando a opção <b>Não mostrar "
+"contas fechadas</b>."
+
+#: kmymoney2.cpp:3379
+msgid "<b>%1</b> cannot be moved to institution <b>%2</b>. Reason: %3"
+msgstr "<b>%1</b> não pode ser movida para a instituição <b>%2</b>. Razão: %3"
+
+#: kmymoney2.cpp:3393
+msgid "<b>%1</b> cannot be moved to <b>%2</b>. Reason: %3"
+msgstr "<b>%1</b> não pode ser movido para <b>%2</b>. Motivo: %3"
+
+#: kmymoney2.cpp:3408
+msgid "%1 YTD Account Transactions"
+msgstr "%1 Conta Transações YTD"
+
+#: dialogs/kbalancechartdlg.cpp:71 kmymoney2.cpp:3409
+#: views/kforecastview.cpp:650 views/khomeview.cpp:276
+#: views/khomeview.cpp:1384 views/kreportsview.cpp:619
+msgid "Generated Report"
+msgstr "Relatório Criado"
+
+#: dialogs/rc.cpp:324 dialogs/settings/rc.cpp:80 kmymoney2.cpp:3411
+#: views/kreportsview.cpp:1062 views/rc.cpp:58 views/rc.cpp:59
+msgid "Transactions"
+msgstr "Transações"
+
+#: kmymoney2.cpp:3449
+#, c-format
+msgid "Unable to add scheduled transaction: %1"
+msgstr "Não foi possível adicionar transação agendada: %1"
+
+#: kmymoney2.cpp:3449
+msgid "Add scheduled transaction"
+msgstr "Adicionar transação agendada"
+
+#: kmymoney2.cpp:3489
+msgid ""
+"You have entered a scheduled transaction date of <b>%1</b>. Because the "
+"scheduled transaction was last paid on <b>%2</b>, KMyMoney will "
+"automatically adjust the scheduled transaction date to the next date unless "
+"the last payment date is reset. Do you want to reset the last payment date?"
+msgstr ""
+"Você inseriu uma data de agendamento de <b>%1</b>. Uma vez que o "
+"agendamento foi pago pela última vez em <b>%2</b>, o KMyMoney "
+"automaticamente ajustará a data de agendamento para a próxima data a menos "
+"que a última data de pagamento seja reiniciada. Você deseja reiniciar a "
+"última data de pagamento?"
+
+#: kmymoney2.cpp:3489
+msgid "Reset Last Payment Date"
+msgstr "Reiniciar Data do Último Pagamento"
+
+#: kmymoney2.cpp:3499 kmymoney2.cpp:3519 kmymoney2.cpp:3531
+msgid "Unable to modify scheduled transaction '%1'"
+msgstr "Não foi possível modificar transação agendada '%1'"
+
+#: kmymoney2.cpp:3543
+msgid "Are you sure you want to delete the scheduled transaction <b>%1</b>?"
+msgstr "Você tem certeza que deseja apagar a transação agendada <b>%1</b>?"
+
+#: kmymoney2.cpp:3546
+msgid ""
+"In case of loan payments it is currently not possible to recreate the "
+"scheduled transaction."
+msgstr ""
+"No caso de pagamento de financiamentos, atualmente não é possível recriar a "
+"transação agendada."
+
+#: kmymoney2.cpp:3555
+msgid "Unable to remove scheduled transaction '%1'"
+msgstr "Não foi possível remover a transação agendada '%1'"
+
+#: kmymoney2.cpp:3569
+#, c-format
+msgid ""
+"_: Copy of scheduled transaction name\n"
+"Copy of %1"
+msgstr "Cópia de %1"
+
+#: kmymoney2.cpp:3581 kmymoney2.cpp:4352
+msgid "Unable to duplicate transaction(s): %1, thrown in %2:%3"
+msgstr "Não foi possível duplicar transação(ões): %1, lançado em %2:%3"
+
+#: kmymoney2.cpp:3595
+msgid "Do you really want to skip the <b>%1</b> transaction scheduled for <b>%2</b>?"
+msgstr "Você realmente deseja pular a transação agendada <b>%1</b> para <b>%2</b>?"
+
+#: kmymoney2.cpp:3605
+msgid "Unable to skip scheduled transaction <b>%1</b>."
+msgstr "Não foi possível pular a transação agendada <b>%1</b>."
+
+#: kmymoney2.cpp:3618
+msgid "Unknown scheduled transaction '%1'"
+msgstr "Transação agendada desconhecida '%1'"
+
+#: kmymoney2.cpp:3673
+msgid ""
+"Are you sure you wish to stop this scheduled transaction from being entered "
+"into the register?\n"
+"\n"
+"KMyMoney will prompt you again next time it starts unless you manually enter "
+"it later."
+msgstr ""
+"Você tem certeza que deseja parar de realizar a entrada desta transação "
+"agendada no livro de registro?\n"
+"\n"
+"O KMyMoney irá questioná-lo novamente na próxima vez que for iniciado, a "
+"menos que você insira-a manualmente mais tarde."
+
+#: kmymoney2.cpp:3725 kmymoney2.cpp:3732
+msgid "Unable to enter scheduled transaction '%1'"
+msgstr "Não foi possível inserir transação agendada '%1'"
+
+#: kmymoney2.cpp:3743 kmymoney2.cpp:3783
+msgid "New Payee"
+msgstr "Novo Beneficiário"
+
+#: kmymoney2.cpp:3745
+msgid "Do you want to add <b>%1</b> as payer/receiver ?"
+msgstr "Você deseja adicionar <b>%1</b> como beneficiário/recebedor?"
+
+#: converter/mymoneystatementreader.cpp:892 kmymoney2.cpp:3747
+msgid "New payee/receiver"
+msgstr "Novo beneficiário/recebedor"
+
+#: kmymoney2.cpp:3773
+msgid "Unable to add payee"
+msgstr "Incapaz de adicionar beneficiário"
+
+#: kmymoney2.cpp:3826
+msgid "Do you really want to remove the payee <b>%1</b>?"
+msgstr "Você realmente deseja remover o beneficiário <b>%1</b>?"
+
+#: kmymoney2.cpp:3828
+msgid "Do you really want to remove all selected payees?"
+msgstr "Você realmente deseja remover todos os beneficiários selecionados?"
+
+#: kmymoney2.cpp:3830
+msgid "Remove Payee"
+msgstr "Remover Beneficiário"
+
+#: kmymoney2.cpp:3870
+msgid ""
+"At least one transaction/scheduled transaction is still referenced by a "
+"payee. Currently you have all payees selected. However, at least one payee "
+"must remain so that the transaction/scheduled transaction can be reassigned."
+msgstr ""
+"Pelo menos uma das transações/agendamentos ainda é referenciada por um "
+"beneficiário. Atualmente, você tem todos os beneficiários selecionados. No "
+"entanto, pelo menos um beneficiário deve permanecer de modo que as "
+"transações/agendamentos possam ser reatribuídas."
+
+#: kmymoney2.cpp:3925
+msgid "Unable to reassign payee of transaction/split"
+msgstr "Não foi possível reatribuir beneficiário de transação/parcela"
+
+#: converter/mymoneyqifreader.cpp:534 converter/mymoneystatementreader.cpp:959
+#: kmymoney2.cpp:3926 kmymoney2.cpp:3983 views/kbudgetview.cpp:636
+#: views/kbudgetview.cpp:737 views/kbudgetview.cpp:751
+#: views/kpayeesview.cpp:519 views/kpayeesview.cpp:870
+msgid "thrown in"
+msgstr "lançado em"
+
+#: kmymoney2.cpp:3982
+msgid "Unable to remove payee(s)"
+msgstr "Não foi possível remover beneficiário(s)"
+
+#: kmymoney2.cpp:3990
+msgid "Enter ISO 4217 code for the new currency"
+msgstr "Insira o código ISO 4217 para a nova moeda"
+
+#: kmymoney2.cpp:3999
+#, c-format
+msgid "Cannot create new currency. %1"
+msgstr "Não foi possível criar a nova moeda. %1"
+
+#: kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, c-format
+msgid "Cannot rename currency. %1"
+msgstr "Não foi possível renomear a moeda. %1"
+
+#: kmymoney2.cpp:4039
+msgid "Cannot delete currency %1. %2"
+msgstr "Não foi possível apagar a moeda %1. %2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Cannot set %1 as base currency: %2"
+msgstr "Não foi possível configurar %1 como moeda base: %2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Set base currency"
+msgstr "Configurar moeda base"
+
+#: kmymoney2.cpp:4065
+#, c-format
+msgid "Budget %1"
+msgstr "Orçamento %1"
+
+#: kmymoney2.cpp:4075
+msgid "Budget %1 (%2)"
+msgstr "Orçamento %1 (%2)"
+
+#: kmymoney2.cpp:4090 kmymoney2.cpp:4139
+msgid "Unable to add budget: %1, thrown in %2:%3"
+msgstr "Não foi possível adicionar o orçamento: %1, lançado em %2:%3"
+
+#: kmymoney2.cpp:4105
+msgid "Do you really want to remove the budget <b>%1</b>?"
+msgstr "Você relamente deseja remover o orçamento <b>%1</b>?"
+
+#: kmymoney2.cpp:4107
+msgid "Do you really want to remove all selected budgets?"
+msgstr "Você realmente deseja remover todos os orçamentos selecionados?"
+
+#: kmymoney2.cpp:4109
+msgid "Remove Budget"
+msgstr "Remover Orçamento"
+
+#: kmymoney2.cpp:4122
+msgid "Unable to remove budget: %1, thrown in %2:%3"
+msgstr "Não foi possível remover orçamento: %1, lançado em %2:%3"
+
+#: kmymoney2.cpp:4134 views/kreportsview.cpp:659
+#, c-format
+msgid "Copy of %1"
+msgstr "Cópia de %1"
+
+#: kmymoney2.cpp:4164
+msgid "Select year"
+msgstr "Selecionar ano"
+
+#: kmymoney2.cpp:4164
+msgid "Budget year"
+msgstr "Ano do orçamento"
+
+#: kmymoney2.cpp:4176 kmymoney2.cpp:4214 kmymoney2.cpp:4274
+msgid "Unable to modify budget: %1, thrown in %2:%3"
+msgstr "Não foi possível modificar orçamento: %1, lançado em %2:%3"
+
+#: kmymoney2.cpp:4192 kmymoney2.cpp:4250
+msgid ""
+"The current budget already contains data. Continuing will replace all "
+"current values of this budget."
+msgstr ""
+"O orçamento atual já contém dados. Continuar substituirá todos os valores "
+"atuais deste orçamento."
+
+#: kmymoney2.cpp:4222
+msgid ""
+"Please be aware that changes made in the following dialog affect all KDE "
+"applications not only KMyMoney."
+msgstr ""
+"Por favor, saiba que as mudanças realizadas no diálogo a seguir afetarão "
+"todas as aplicações do KDE e não somente o KMyMoney."
+
+#: kmymoney2.cpp:4292
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to delete the transactions anyway?"
+msgstr ""
+"Pelos menos uma parcela das transações selecionadas foi reconciliada. Você "
+"ainda deseja excluir as transações?"
+
+#: kmymoney2.cpp:4295 views/kgloballedgerview.cpp:1043
+msgid "Transaction already reconciled"
+msgstr "Transação já reconciliada"
+
+#: kmymoney2.cpp:4301
+msgid "Do you really want to delete the selected transaction?"
+msgstr "Você realmente deseja apagar a transação selecionada?"
+
+#: kmymoney2.cpp:4303
+msgid "Do you really want to delete all %1 selected transactions?"
+msgstr "Você realmente deseja apagar todas as %1 transações selecionadas?"
+
+#: kmymoney2.cpp:4305
+msgid "Delete transaction"
+msgstr "Apagar transação"
+
+#: kmymoney2.cpp:4306
+msgid "Deleting transactions"
+msgstr "Apagando transações"
+
+#: kmymoney2.cpp:4321
+msgid "Duplicating transactions"
+msgstr "Duplicando transações"
+
+#: kmymoney2.cpp:4378
+msgid "Unable to delete transaction(s): %1, thrown in %2:%3"
+msgstr "Não foi possível apagar transação(ões): %1, lançada em %2:%3"
+
+#: kmymoney2.cpp:4452 kmymoney2.cpp:4622
+msgid "Unable to modify transaction: %1, thrown in %2:%3"
+msgstr "Não foi possível modificar transação: %1, lançada em %2:%3"
+
+#: kmymoney2.cpp:4514
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling and<br>- <b>Cancel</b> returns to the "
+"transaction editor.<p>You can also select an option to save the transaction "
+"automatically when e.g. selecting another transaction."
+msgstr ""
+"Você realmente deseja cancelar a edição desta transação sem salvá-la?<p>- "
+"<b>Sim</b> cancela a edição da transação<br>- <b>Não</b> salva a transação "
+"antes de cancelar e<br>- <b>Cancelar</b> retorna para o editor de transação."
+"<p>Você pode também selecionar uma opção para salvar automaticamente a "
+"transação quando selecionar outra transação."
+
+#: kmymoney2.cpp:4514 kmymoney2.cpp:4517
+msgid "Cancel transaction edit"
+msgstr "Cancelar edição da transação"
+
+#: kmymoney2.cpp:4517
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling.<p>You can also select an option to save the "
+"transaction automatically when e.g. selecting another transaction."
+msgstr ""
+"Você realmente deseja cancelar a edição desta transação sem salvá-la?<p>- "
+"<b>Sim</b> cancela a edição da transação<br>- <b>Não</b> salva a transação "
+"antes de cancelar.<p>Você pode também selecionar uma opção para salvar "
+"automaticamente a transação quando selecionar outra transação."
+
+#: kmymoney2.cpp:4667
+msgid "Unable to accept transaction: %1, thrown in %2:%3"
+msgstr "Não foi possível aceitar a transação: %1, lançada em %2:%3"
+
+#: kmymoney2.cpp:4846
+msgid "Unable to unmatch the selected transactions"
+msgstr "Não foi possível corresponder as transações selecionadas"
+
+#: kmymoney2.cpp:4885
+msgid "No manually entered transaction selected for matching"
+msgstr "Nenhuma transação inserida manualmente selecionada para correspondência"
+
+#: kmymoney2.cpp:4887
+msgid "No imported transaction selected for matching"
+msgstr "Nenhuma transação importada selecionada para correspondência"
+
+#: kmymoney2.cpp:4895
+msgid "Unable to match the selected transactions"
+msgstr "Não foi possível corresponder as transações selecionadas"
+
+#: kmymoney2.cpp:5097
+msgid "Create a new transaction"
+msgstr "Criar uma nova transação"
+
+#: kmymoney2.cpp:5163
+msgid "Duplicate the current selected transactions"
+msgstr "Duplicar as transações atualmente selecionadas"
+
+#: kmymoney2.cpp:5223
+msgid ""
+"_: Button text for unmatch transaction\n"
+"Unmatch"
+msgstr "Sem correspondência"
+
+#: kmymoney2.cpp:5451 kmymoney2.cpp:5473
+msgid "Goto '%1'"
+msgstr "Ir para '%1'"
+
+#: kmymoney2.cpp:5582
+msgid "Running consistency check..."
+msgstr "Executando uma verificação da consistência..."
+
+#: kmymoney2.cpp:5590
+#, c-format
+msgid "Consistency check failed: %1"
+msgstr "Verificação de consistência falhou: %1"
+
+#: kmymoney2.cpp:5594
+msgid "Consistency check result"
+msgstr "Resultado da verificaçào de consistência"
+
+#: kmymoney2.cpp:5603
+msgid "Checking for overdue scheduled transactions..."
+msgstr "Checando transação agendadas vencidas..."
+
+#: kmymoney2.cpp:5740
+msgid "You must first select a KMyMoney file before you can import a statement."
+msgstr ""
+"Você deve primeiro selecionar um arquivo do KMyMoney antes de poder importar "
+"um extrato."
+
+#: kmymoney2.cpp:5746
+msgid "Importing a statement via Web Connect"
+msgstr "Importando um extrato através de uma Conexão Web"
+
+#: kmymoney2.cpp:5759
+msgid ""
+"Unable to import %1 using %2 plugin. The plugin returned the following "
+"error: %3"
+msgstr ""
+"Não foi possível importar %1 usando o plugin %2. O plugin retornou o "
+"seguinte erro: %3"
+
+#: kmymoney2.cpp:5759 plugins/ofximport/ofximporterplugin.cpp:646
+msgid "Importing error"
+msgstr "Erro de importação"
+
+#: kmymoney2.cpp:5780
+msgid "All messages have been enabled."
+msgstr "Todas as mensagens foram habilitadas."
+
+#: kmymoney2.cpp:5780
+msgid "All messages"
+msgstr "Todas as messagens"
+
+#: kmymoney2.cpp:5855
+msgid "Auto saving..."
+msgstr "Salvamento automático..."
+
+#: kmymoney2.cpp:5913
+msgid "Unable to setup online parameters for account ''%1'"
+msgstr "Não foi possível configurar os parâmetros online para a conta '%1'"
+
+#: kmymoney2.cpp:5928
+msgid ""
+"Do you really want to remove the mapping of account <b>%1</b> to an online "
+"account? Depending on the details of the online banking method used, this "
+"action cannot be reverted."
+msgstr ""
+"Você deseja realmente remover o mapeamento da conta <b>%1</b> para uma conta "
+"online? Dependendo das configurações do banco online, pode não ser possível "
+"reverter esta ação."
+
+#: kmymoney2.cpp:5928
+msgid "Remove mapping to online account"
+msgstr "Remober mapeamento de conta online"
+
+#: kmymoney2.cpp:5939
+#, c-format
+msgid "Unable to unmap account from online account: %1"
+msgstr "Não foi possível desmapear a conta de uma conta online: %1"
+
+#: kmymoney2.cpp:5956
+msgid " (Brokerage)"
+msgstr " (Corretagem)"
+
+#: kmymoney2.cpp:5957
+msgid ""
+"You try to map a brokerage account to an online account. This is usually not "
+"advisable. In general, the investment account should be mapped to the online "
+"account. Please cancel if you intended to map the investment account, "
+"continue otherwise"
+msgstr ""
+"Você tentou mapear uma conta de corretagem para uma conta online. Isto "
+"normalmente não é recomendável. Em geral, a conta de investimento deve ser "
+"mapeada para uma conta online. Por favor, cancele se você pretendia mapear a "
+"conta de investimento. Caso contrário, prossiga"
+
+#: kmymoney2.cpp:5957
+msgid "Mapping brokerage account"
+msgstr "Mapeando conta de corretagem"
+
+#: kmymoney2.cpp:5964
+msgid "Select online banking plugin"
+msgstr "Selecione o plugin de banco online"
+
+#: kmymoney2.cpp:6005
+#, c-format
+msgid "Unable to map account to online account: %1"
+msgstr "Não foi possível mapear a contra para a conta online: %1"
+
+#: converter/mymoneyqifreader.cpp:407 converter/mymoneytemplate.cpp:73
+#: views/kmymoneyview.cpp:590
+msgid "Error while loading file '%1'!"
+msgstr "Erro carregando arquivo '%1'!"
+
+#: converter/mymoneyqifreader.cpp:409 converter/mymoneyqifreader.cpp:965
+#: converter/mymoneytemplate.cpp:75 views/kmymoneyview.cpp:592
+msgid "File access error"
+msgstr "Erro de acesso a arquivo"
+
+#: converter/mymoneytemplate.cpp:84
+msgid "<b>%1</b> is not a template file."
+msgstr "<b>%1</b> não é um arquivo de modelo."
+
+#: converter/mymoneytemplate.cpp:85 views/kmymoneyview.cpp:603
+msgid "Filetype Error"
+msgstr "Erro de Tipo de Arquivo"
+
+#: converter/mymoneytemplate.cpp:93
+msgid "Error while reading template file <b>%1</b> in line %2, column %3"
+msgstr "Erro ao ler o arquivo de modelo <b>%1</b> na linha %2, coluna %3"
+
+#: converter/mymoneytemplate.cpp:94
+msgid "Template Error"
+msgstr "Erro de Modelo"
+
+#: converter/mymoneytemplate.cpp:101
+msgid "File '%1' not found!"
+msgstr "Arquivo'%1' não encontrado!"
+
+#: converter/mymoneytemplate.cpp:142
+msgid "Invalid tag <b>%1</b> in template file <b>%2</b>!"
+msgstr "Tag inválida <b>%1</b> no arquivo de modelo <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:214
+#, c-format
+msgid "Loading template %1"
+msgstr "Carregando modelo %1"
+
+#: converter/mymoneytemplate.cpp:241
+msgid "Invalid top-level account type <b>%1</b> in template file <b>%2</b>!"
+msgstr ""
+"Tipo <b>%1</b> de conta de nível superior inválido no arquivo de modelo <b>%"
+"2</b>!"
+
+#: converter/mymoneytemplate.cpp:309
+msgid "Invalid flag type <b>%1</b> for account <b>%3</b> in template file <b>%2</b>!"
+msgstr ""
+"Tipo <b>%1</b> de flag inválido para conta <b>%3</b> no arquivo de modelo <b>"
+"%2</b>!"
+
+#: converter/mymoneytemplate.cpp:398 converter/mymoneytemplate.cpp:401
+#: views/kmymoneyview.cpp:1151 views/kmymoneyview.cpp:1154
+msgid "Unable to write changes to '%1'"
+msgstr "Incapaz de gravar mudanças em '%1'"
+
+#: converter/mymoneytemplate.cpp:407 views/kmymoneyview.cpp:1162
+msgid "Unable to upload to '%1'"
+msgstr "Incapaz de enviar arquivo para '%1'"
+
+#: converter/mymoneyqifwriter.cpp:70
+msgid ""
+"Unexpected exception '%1' thrown in %2, line %3 caught in MyMoneyQifWriter::"
+"write()"
+msgstr ""
+"Exceção inesperada '%1' lançada in %2, linha %3, capturada "
+"emMyMoneyQifWriter::write()"
+
+#: converter/mymoneyqifwriter.cpp:80
+msgid "Unable to open file '%1' for writing"
+msgstr "Incapaz de abrir arquivo '%1' para escrita"
+
+#: converter/webpricequote.cpp:340
+#, c-format
+msgid "Symbol found: %1"
+msgstr "Símbolo encontrado: %1"
+
+#: converter/webpricequote.cpp:368
+msgid "Price found: %1 (%2)"
+msgstr "Preço encontrado: %1 (%2)"
+
+#: converter/webpricequote.cpp:380
+#, c-format
+msgid "Date found: %1"
+msgstr "Data encontrada: %1"
+
+#: converter/webpricequote.cpp:397 converter/webpricequote.cpp:403
+#, c-format
+msgid "Unable to update price for %1"
+msgstr "Não foi possível atualizar o preço de %1"
+
+#: converter/mymoneyqifreader.cpp:170
+msgid ""
+"_: Category name\n"
+"Reinvested dividend"
+msgstr "Dividendos reinvestidos"
+
+#: converter/mymoneyqifreader.cpp:173
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (long term)"
+msgstr "Dividendos reinvestidos (longo prazo)"
+
+#: converter/mymoneyqifreader.cpp:176
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (short term)"
+msgstr "Dividendos reinvestidos (curto prazo)"
+
+#: converter/mymoneyqifreader.cpp:179
+msgid ""
+"_: Category name\n"
+"Dividend"
+msgstr "Dividendos"
+
+#: converter/mymoneyqifreader.cpp:182
+msgid ""
+"_: Category name\n"
+"Interest"
+msgstr "Rendimento"
+
+#: converter/mymoneyqifreader.cpp:185
+msgid ""
+"_: Category name\n"
+"Capital Gain (short term)"
+msgstr "Ganho de Capital (curto prazo)"
+
+#: converter/mymoneyqifreader.cpp:188
+msgid ""
+"_: Category name\n"
+"Capital Gain (mid term)"
+msgstr "Ganho de Capital (médio prazo)"
+
+#: converter/mymoneyqifreader.cpp:191
+msgid ""
+"_: Category name\n"
+"Capital Gain (long term)"
+msgstr "Ganho de Capital (longo prazo)"
+
+#: converter/mymoneyqifreader.cpp:194
+msgid ""
+"_: Category name\n"
+"Returned capital"
+msgstr "Capital retornado"
+
+#: converter/mymoneyqifreader.cpp:197
+msgid ""
+"_: Category name\n"
+"Miscellaneous income"
+msgstr "Rendimentos diversos"
+
+#: converter/mymoneyqifreader.cpp:200
+msgid ""
+"_: Category name\n"
+"Miscellaneous expense"
+msgstr "Gastos diversos"
+
+#: converter/mymoneyqifreader.cpp:203
+msgid ""
+"_: Category name\n"
+"Investment fees"
+msgstr "Taxas de investimentos"
+
+#: converter/mymoneyqifreader.cpp:205
+#, c-format
+msgid "Unknown QIF type %1"
+msgstr "Tipo %1 QIF desconhecido"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Date format selection"
+msgstr "Seleção de formato de data"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Pick the date format that suits your input file"
+msgstr "Selecione o formato de data que se adequa ao seu arquivo de entrada"
+
+#: converter/mymoneyqifreader.cpp:366
+msgid "Importing QIF ..."
+msgstr "Importando QIF..."
+
+#: converter/mymoneyqifreader.cpp:442
+msgid "Reading QIF ..."
+msgstr "Lendo QIF..."
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Adding transactions"
+msgstr "Adicionando transações"
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Now adding the transactions to your ledger..."
+msgstr "Adicionando agora as transações ao seu livro de registros..."
+
+#: converter/mymoneyqifreader.cpp:533
+msgid "Unable to add transactions"
+msgstr "Não foi possível adicionar transações"
+
+#: converter/mymoneyqifreader.cpp:567
+msgid ""
+"_: QIF tag for liability account\n"
+"Oth L"
+msgstr "Oth L"
+
+#: converter/mymoneyqifreader.cpp:572
+msgid ""
+"_: QIF tag for category\n"
+"Cat"
+msgstr "Cat"
+
+#: converter/mymoneyqifreader.cpp:575
+msgid ""
+"_: QIF tag for security\n"
+"Security"
+msgstr "Título"
+
+#: converter/mymoneyqifreader.cpp:578
+msgid ""
+"_: QIF tag for investment account\n"
+"Invst"
+msgstr "Invst"
+
+#: converter/mymoneyqifreader.cpp:581
+msgid ""
+"_: QIF tag for prices\n"
+"Prices"
+msgstr "Preços"
+
+#: converter/mymoneyqifreader.cpp:599
+msgid ""
+"_: QIF tag for a class\n"
+"Class"
+msgstr "Classe"
+
+#: converter/mymoneyqifreader.cpp:753 converter/mymoneyqifreader.cpp:2203
+msgid ""
+"The %1 account currently has an opening balance of %2. This QIF file reports "
+"an opening balance of %3. Would you like to overwrite the current balance "
+"with the one from the QIF file?"
+msgstr ""
+"A conta %1 atualmente possui um saldo de abertura de %2. Este arquivo QIF "
+"reporta um saldo de abertura de %3. Você deseja sobrescrever a saldo atual "
+"com o do arquivo QIF?"
+
+#: converter/mymoneyqifreader.cpp:754 converter/mymoneyqifreader.cpp:2204
+msgid "Overwrite opening balance"
+msgstr "Sobrescrever saldo de abertura"
+
+#: converter/mymoneyqifreader.cpp:879 converter/mymoneyqifreader.cpp:890
+#: converter/mymoneyqifreader.cpp:914
+msgid "Autogenerated by QIF importer"
+msgstr "Criado automaticamente pelo importador QIF"
+
+#: converter/mymoneyqifreader.cpp:907
+msgid "QIF imported, no account name supplied"
+msgstr "QIF importado, nenhum nome de conta indicado"
+
+#: converter/mymoneyqifreader.cpp:940
+msgid ""
+"KMyMoney has imported a second opening balance transaction into account <b>%"
+"1</b> which differs from the one found already on file. Please correct this "
+"manually once the import is done."
+msgstr ""
+"O KMyMoney importou uma segunda transação de saldo de abertura para a conta "
+"<b>%1</b> que é diferente da encontrada no arquivo. Por favor, corrija isto "
+"manualmente após a importação estiver concluída."
+
+#: converter/mymoneyqifreader.cpp:940
+msgid "Opening balance problem"
+msgstr "Problema com o saldo de abertura"
+
+#: converter/mymoneyqifreader.cpp:963
+msgid "Error while creating opening balance transaction"
+msgstr "Erro ao criar a transacção de saldo inicial"
+
+#: converter/mymoneyqifreader.cpp:1029 converter/mymoneyqifreader.cpp:1276
+msgid ""
+"The date entry \"%1\" read from the file cannot be interpreted through the "
+"current date profile setting of \"%2\".\n"
+"\n"
+"Pressing \"Continue\" will assign todays date to the transaction. Pressing "
+"\"Cancel\" will abort the import operation. You can then restart the import "
+"and select a different QIF profile or create a new one."
+msgstr ""
+"A data \"%1\" lida do arquivo não pode ser interpretada através do perfil \"%"
+"2\" configurado atualmente.\n"
+"\n"
+"Pressionando \"Continuar\" irá atribuir a data de hoje para a transação. "
+"Pressionando \"Cancelar\" irá abortar a operação de importação. Você pode "
+"reiniciar a importação e selecionar um perfil QIF diferente ou criar um novo."
+
+#: converter/mymoneyqifreader.cpp:1035 converter/mymoneyqifreader.cpp:1282
+msgid "Invalid date format"
+msgstr "Formato de data inválido"
+
+#: converter/mymoneyqifreader.cpp:1398
+#: converter/mymoneystatementreader.cpp:589
+#: converter/mymoneystatementreader.cpp:592
+msgid "Statement Importer"
+msgstr "Importador de Extrato"
+
+#: converter/mymoneyqifreader.cpp:1413
+#: converter/mymoneystatementreader.cpp:644
+msgid ""
+"This investment account does not contain the \"%1\" security. Transactions "
+"involving this security will be ignored."
+msgstr ""
+"Esta conta de investimento não contém o título \"%1\". Transações "
+"envolvendo este título serão ignoradas."
+
+#: converter/mymoneyqifreader.cpp:1415
+#: converter/mymoneystatementreader.cpp:612
+#: converter/mymoneystatementreader.cpp:644
+msgid "Security not found"
+msgstr "Título não encontrado"
+
+#: converter/mymoneyqifreader.cpp:2021
+msgid "%1 (Investment)"
+msgstr "%1 (Investimento)"
+
+#: converter/mymoneyqifreader.cpp:2022
+msgid "Autogenerated by QIF importer from type Mutual account entry"
+msgstr ""
+"Gerado automaticamente pelo importador QIF a partir da entrada de conta do "
+"tipo Mútuo"
+
+#: converter/mymoneyqifreader.cpp:2085 converter/mymoneyqifreader.cpp:2228
+msgid "account"
+msgstr "conta"
+
+# TODO: Verify
+#: converter/mymoneyqifreader.cpp:2086
+msgid "al"
+msgstr "al"
+
+#: converter/mymoneyqifreader.cpp:2093
+msgid "category"
+msgstr "categoria"
+
+# TODO: Verify
+#: converter/mymoneyqifreader.cpp:2094
+msgid "ei"
+msgstr "ei"
+
+#: converter/mymoneyqifreader.cpp:2095
+msgid "Category selection"
+msgstr "Seleção de categoria"
+
+#: converter/mymoneyqifreader.cpp:2110
+msgid "Account \"%1\" disappeared: "
+msgstr "Conta \"%1\" desapareceu: "
+
+#: converter/mymoneyqifreader.cpp:2131
+msgid "The %1 '%2' does not exist. Do you want to create it?"
+msgstr "O %1 '%2' não existe. Você deseja criá-lo?"
+
+#: converter/mymoneyqifreader.cpp:2140
+#, c-format
+msgid "Select %1"
+msgstr "Selecionar %1"
+
+#: converter/mymoneyqifreader.cpp:2142
+msgid ""
+"The %1 <b>%2</b> currently exists. Do you want to import transactions to "
+"this account?"
+msgstr ""
+"O %1 <b>%2</b> existe atualmente. Você deseja importar transações para esta "
+"conta?"
+
+#: converter/mymoneyqifreader.cpp:2147
+msgid ""
+"The %1 <b>%2</b> currently does not exist. You can create a new %3 by "
+"pressing the <b>Create</b> button or select another %4 manually from the "
+"selection box."
+msgstr ""
+"O %1 <b>%2</b> atualmente não existe. Você pode criar um novo %3 "
+"pressionando o botão <b>Criar</b> ou selecionar outro %4 manualmente, a "
+"partir da caixa de seleção."
+
+#: converter/mymoneyqifreader.cpp:2154
+#, c-format
+msgid "Import transactions to %1"
+msgstr "Importar transações para %1"
+
+#: converter/mymoneyqifreader.cpp:2155
+msgid ""
+"No %1 information has been found in the selected QIF file. Please select an "
+"account using the selection box in the dialog or create a new %2 by pressing "
+"the <b>Create</b> button."
+msgstr ""
+"Nenhuma informação %1 foi encontrada no arquivo QIF selecionado. Por favor, "
+"selecione uma conta usando a caixa de seleção no diálogo ou crie uma nova %2 "
+"pressionando o botão <b><Criar/b>."
+
+#: converter/mymoneyqifreader.cpp:2229
+msgid "You must select or create an account."
+msgstr "Você deve selecionar ou criar uma conta."
+
+#: converter/mymoneyqifreader.cpp:2231
+msgid "You must select or create a category."
+msgstr "Você deve selecionar ou criar uma categoria."
+
+#: converter/mymoneystatementreader.cpp:100
+msgid "_Fees"
+msgstr "_Taxas"
+
+#: converter/mymoneystatementreader.cpp:106
+msgid "_Dividend"
+msgstr "_Dividendos"
+
+#: converter/mymoneystatementreader.cpp:289
+#, c-format
+msgid "Importing statement for account %1"
+msgstr "Importando extrato para a conta %1"
+
+#: converter/mymoneystatementreader.cpp:291
+msgid "Importing statement without transactions"
+msgstr "Importando extrato sem transações"
+
+#: converter/mymoneystatementreader.cpp:385
+msgid " Statement balance is not contained in statement."
+msgstr " O saldo não está contido no extrato."
+
+#: converter/mymoneystatementreader.cpp:387
+msgid " Statement balance on %1 is reported to be %2"
+msgstr " O saldo do extrato em %1 foi reportado como %2"
+
+#: converter/mymoneystatementreader.cpp:389
+msgid " Transactions"
+msgstr " Transações"
+
+#: converter/mymoneystatementreader.cpp:390
+msgid " %1 processed"
+msgstr " %1 processadas"
+
+#: converter/mymoneystatementreader.cpp:391
+msgid " %1 added"
+msgstr " %1 adicionadas"
+
+#: converter/mymoneystatementreader.cpp:392
+msgid " %1 matched"
+msgstr " %1 correspondidas"
+
+#: converter/mymoneystatementreader.cpp:393
+msgid " %1 duplicates"
+msgstr " %1 duplicadas"
+
+#: converter/mymoneystatementreader.cpp:394
+msgid " Payees"
+msgstr " Beneficiários"
+
+#: converter/mymoneystatementreader.cpp:395
+msgid " %1 created"
+msgstr " %1 criados"
+
+#: converter/mymoneystatementreader.cpp:483
+#, c-format
+msgid "Error creating security record: %1"
+msgstr "Erro ao criar o registro de título: %1"
+
+#: converter/mymoneystatementreader.cpp:612
+msgid ""
+"This imported statement contains investment transactions with no security. "
+"These transactions will be ignored."
+msgstr ""
+"O extrato importado contém transações de investimento sem títulos. Essas "
+"transações serão ignoradas."
+
+#: converter/mymoneystatementreader.cpp:803
+msgid "(Fees) "
+msgstr "(Taxas) "
+
+#: converter/mymoneystatementreader.cpp:880
+msgid ""
+"Do you want to add \"%1\" as payee/receiver?\n"
+"\n"
+msgstr ""
+"Você deseja adicionar \"%1\" como um beneficiário/recebedor?\n"
+"\n"
+
+#: converter/mymoneystatementreader.cpp:881
+msgid ""
+"Selecting \"Yes\" will create the payee, \"No\" will skip creation of a "
+"payee record and remove the payee information from this transaction. "
+"Selecting \"Cancel\" aborts the import operation.\n"
+"\n"
+"If you select \"No\" here and mark the \"Don't ask again\" checkbox, the "
+"payee information for all following transactions referencing \"%1\" will be "
+"removed."
+msgstr ""
+"Selecionando \"Sim\" irá criar o beneficiário, \"Não\" irá pular a criação "
+"de um registro de beneficiário e remover a informação de beneficiário desta "
+"transação. Selecionando \"Cancelar\" a operação de importação será "
+"abortada.\n"
+"\n"
+"Se você selecionar \"Não\" aqui e marcar a caixa de checagem \"Não perguntar "
+"novamente\", a informação de beneficiário para todas as transações seguintes "
+"referenciando \"%1\" será removida."
+
+#: converter/mymoneystatementreader.cpp:917
+msgid "Save Category"
+msgstr "Salvar Categoria"
+
+#: converter/mymoneystatementreader.cpp:918
+msgid "No Category"
+msgstr "Sem Categoria"
+
+#: converter/mymoneystatementreader.cpp:919 dialogs/rc.cpp:4
+msgid "Abort"
+msgstr "Cancelar"
+
+#: converter/mymoneystatementreader.cpp:926
+msgid "Please select a default category for payee '%1':"
+msgstr "Por favor, selecione uma categoria padrão para o beneficiário '%1':"
+
+#: converter/mymoneystatementreader.cpp:958
+msgid "Unable to add payee/receiver"
+msgstr "Incapaz de adicionar beneficiário/recebedor"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid ""
+"KMyMoney has found a scheduled transaction named <b>%1</b> which matches an "
+"imported transaction. Do you want KMyMoney to enter this schedule now so "
+"that the transaction can be matched? "
+msgstr ""
+"O KMyMoney encontrou uma transação agendada com o nome <b>%1</b> que "
+"corresponde à transação importada. Você deseja que o KMyMoney insira este "
+"agendamento agora de modo que a transação possa ser correspondida?"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid "Schedule found"
+msgstr "Agendamento encontrado"
+
+#: converter/mymoneystatementreader.cpp:1219
+msgid "Problem adding or matching imported transaction with id '%1': %2"
+msgstr "Problema ao adicionar a transação importada correspondente com id '%1': %2"
+
+#: converter/mymoneystatementreader.cpp:1268
+msgid "<b>You have downloaded a statement for the following account:</b><br><br>"
+msgstr "<b>Você obteve um extrato para a seguinte conta:</b><br><br>"
+
+#: converter/mymoneystatementreader.cpp:1269
+#, c-format
+msgid " - Account Name: %1"
+msgstr " - Nome da Conta: %1"
+
+#: converter/mymoneystatementreader.cpp:1270
+#, c-format
+msgid " - Account Type: %1"
+msgstr " - Tipo da Conta: %1"
+
+#: converter/mymoneystatementreader.cpp:1271
+#, c-format
+msgid " - Account Number: %1"
+msgstr " - Número da Conta: %1"
+
+#: converter/mymoneystatementreader.cpp:1279
+msgid "Do you want to import transactions to this account?"
+msgstr "Você deseja importar as transações para esta conta?"
+
+#: converter/mymoneystatementreader.cpp:1281
+msgid ""
+"KMyMoney cannot determine which of your accounts to use. You can create a "
+"new account by pressing the <b>Create</b> button or select another one "
+"manually from the selection box below."
+msgstr ""
+"O KMyMoney não pode determinar quais de suas contas usar. Você pode criar "
+"uma nova conta pressionando o botão <b>Criar</b> ou selecionar uma "
+"manualmente a partir da caixa de seleção abaixo."
+
+#: converter/mymoneystatementreader.cpp:1287
+msgid ""
+"No account information has been found in the selected statement file. Please "
+"select an account using the selection box in the dialog or create a new "
+"account by pressing the <b>Create</b> button."
+msgstr ""
+"Nenhuma informação de conta foi encontrada no arquivo de extrato "
+"selecionado. Por favor, selecione uma conta usando a caixa de seleção na "
+"janela ou crie uma nova conta pressionando o botão <b>Criar</b>."
+
+#: converter/mymoneystatementreader.cpp:1294
+msgid "Import transactions"
+msgstr "Importar transações"
+
+#: converter/mymoneystatementreader.cpp:1330
+msgid ""
+"You must select an account, create a new one, or press the <b>Abort</b> "
+"button."
+msgstr ""
+"Você deve selecionar uma conta, criar uma nova, ou pressionar o botão "
+"<b>Cancelar</b>."
+
+#: converter/mymoneygncreader.cpp:119
+msgid "%1: Sorry. This importer cannot handle version %2 of element %3"
+msgstr "%1: Desculpe. Este importador não pode manipular a versão %2 do elemento %3"
+
+#: converter/mymoneygncreader.cpp:193
+#, c-format
+msgid "Account%1"
+msgstr "Conta%1"
+
+#: converter/mymoneygncreader.cpp:197
+#, c-format
+msgid "Stock%1"
+msgstr "Ação%1"
+
+#: converter/mymoneygncreader.cpp:206
+#, c-format
+msgid "Payee%1"
+msgstr "Beneficiário%1"
+
+#: converter/mymoneygncreader.cpp:212
+#, c-format
+msgid "Schedule%1"
+msgstr "Agendamento%1"
+
+#: converter/mymoneygncreader.cpp:262
+msgid "This version of the importer cannot handle multi-book files."
+msgstr "Esta versão do importador não pode manipular arquivos com livros múltiplos."
+
+#: converter/mymoneygncreader.cpp:912
+msgid "Invalid header for file. Should be 'gnc-v2'"
+msgstr "Cabeçalho inválido para o arquivo. Deveria ser 'gnc-v2'"
+
+#: converter/mymoneygncreader.cpp:937 converter/mymoneygncreader.cpp:972
+#: converter/mymoneygncreader.cpp:1062
+#, c-format
+msgid ""
+"Import failed:\n"
+"\n"
+"%1"
+msgstr ""
+"Importação falhou:\n"
+"\n"
+"%1"
+
+#: converter/mymoneygncreader.cpp:1065
+msgid "Import complete"
+msgstr "Importação terminada"
+
+#: converter/mymoneygncreader.cpp:1120
+msgid "Disguise your wealth"
+msgstr "Mascarar seu patrimônio"
+
+#: converter/mymoneygncreader.cpp:1121
+msgid ""
+"Each monetary value on your file will be multiplied by a random number "
+"between 0.01 and 1.99\n"
+"with a different value used for each transaction. In addition, to further "
+"disguise the true\n"
+"values, you may enter a number between %1 and %2 which will be applied to "
+"all values.\n"
+"These numbers will not be stored in the file."
+msgstr ""
+"Cada valor monetário em seu arquivo será multiplicado por um número "
+"randômico entre 0,01 e 1,99\n"
+"com um valor diferente usado para cada transação. Além disso, para "
+"distinguir no futuro os valores\n"
+"verdadeiros, você pode inserir um número entre %1 e %2 que será aplicado a "
+"todos os valores.\n"
+"Estes números não serão armazenados no arquivo."
+
+#: converter/mymoneygncreader.cpp:1135
+msgid "Loading commodities..."
+msgstr "Carregando mercadorias..."
+
+#: converter/mymoneygncreader.cpp:1160
+msgid "Loading prices..."
+msgstr "Carregando preços..."
+
+#: converter/mymoneygncreader.cpp:1164 converter/mymoneygncreader.cpp:1171
+msgid "Imported History"
+msgstr "Histórico Importado"
+
+#: converter/mymoneygncreader.cpp:1251
+#, c-format
+msgid "Current importer does not recognize GnuCash account type %1"
+msgstr "O importador atual não reconhece o tipo de conta %1 do GnuCash"
+
+#: converter/mymoneygncreader.cpp:1471
+msgid "Imported Transaction"
+msgstr "Transação Importada"
+
+#: converter/mymoneygncreader.cpp:1519
+msgid "Loading templates..."
+msgstr "Carregando modelos..."
+
+#: converter/mymoneygncreader.cpp:1531
+msgid "Unknown payee"
+msgstr "Beneficiário desconhecido"
+
+#: converter/mymoneygncreader.cpp:1723
+msgid "Loading schedules..."
+msgstr "Carregando agendamentos..."
+
+#: converter/mymoneygncreader.cpp:1735
+#, c-format
+msgid "Can't find template transaction for schedule %1"
+msgstr "Não foi possível encontrar um modelo de transação para o agendamento %1"
+
+#: converter/mymoneygncreader.cpp:1910
+msgid "Reorganizing accounts..."
+msgstr "Reorganizando contas..."
+
+#: converter/mymoneygncreader.cpp:1972
+msgid ""
+"Your main currency seems to be %1 (%2); do you want to set this as your base "
+"currency?"
+msgstr ""
+"Sua moeda base parece ser %1 (%2); você deseja configurar isto como sua "
+"moeda base?"
+
+#: converter/mymoneygncreader.cpp:1993
+msgid "More"
+msgstr "Mais"
+
+#: converter/mymoneygncreader.cpp:1997
+msgid "Save Report"
+msgstr "Salvar Relatório"
+
+#: converter/mymoneygncreader.cpp:2017
+msgid ""
+"Problems were encountered in converting schedule '%1'.\n"
+"Do you want to review or edit it now?"
+msgstr ""
+"Problemas foram encontrados ao converter o agendamento '%1'.\n"
+"Você deseja verificá-lo e editá-lo agora?"
+
+#: converter/mymoneygncreader.cpp:2039
+msgid ""
+"Found:\n"
+"\n"
+msgstr ""
+"Encontrado:\n"
+"\n"
+
+#: converter/mymoneygncreader.cpp:2040
+msgid " commodities (equities)\n"
+msgstr " mercadorias (valores)\n"
+
+#: converter/mymoneygncreader.cpp:2041
+msgid " prices\n"
+msgstr " preços\n"
+
+#: converter/mymoneygncreader.cpp:2042
+msgid " accounts\n"
+msgstr " contas\n"
+
+#: converter/mymoneygncreader.cpp:2043
+msgid " transactions\n"
+msgstr " transações\n"
+
+#: converter/mymoneygncreader.cpp:2044
+msgid " schedules\n"
+msgstr " agendamentos\n"
+
+#: converter/mymoneygncreader.cpp:2047
+msgid "No inconsistencies were detected"
+msgstr "Nenhuma inconsistência foi detectada"
+
+#: converter/mymoneygncreader.cpp:2049
+msgid " inconsistencies were detected and corrected\n"
+msgstr " inconsistências foram detectadas e corrigidas\n"
+
+#: converter/mymoneygncreader.cpp:2054
+msgid " orphan accounts were created\n"
+msgstr " contas órfãos foram criadas\n"
+
+#: converter/mymoneygncreader.cpp:2059
+msgid " possible schedule problems were noted\n"
+msgstr " problemas possíveis de agendamento foram anotados\n"
+
+#: converter/mymoneygncreader.cpp:2064
+msgid "Small Business Features (Customers, Invoices, etc.)"
+msgstr "Recursos para Pequenos Negócios (Clientes, Recibos, etc.)"
+
+#: converter/mymoneygncreader.cpp:2065 views/kmymoneyview.cpp:241
+#: views/kmymoneyview.cpp:243
+msgid "Budgets"
+msgstr "Orçamentos"
+
+#: converter/mymoneygncreader.cpp:2066
+msgid "Lots"
+msgstr "Lotes"
+
+#: converter/mymoneygncreader.cpp:2068
+msgid "The following features found in your file are not currently supported:"
+msgstr ""
+"Os seguintes recursos encontrados em seu arquivo não são atualmente "
+"suportados:"
+
+#: converter/mymoneygncreader.cpp:2071
+msgid ""
+"\n"
+"\n"
+"Press More for further information"
+msgstr ""
+"\n"
+"\n"
+"Pressione Mais para mais informações"
+
+#: converter/mymoneygncreader.cpp:2139
+msgid "Orphan created from unknown gnucash account"
+msgstr "Órfão criado de uma conta gnucash desconhecida"
+
+#: converter/mymoneygncreader.cpp:2170
+msgid "Internal error - invalid interval char in incrDate"
+msgstr "Erro interno - intervalo de caracteres inválido em incrDate"
+
+#: converter/mymoneygncreader.cpp:2233
+msgid "Enter the investment account name "
+msgstr "Insira o nome da conta investimento "
+
+#: converter/mymoneygncreader.cpp:2234
+msgid "My Investments"
+msgstr "Meus Investimentos"
+
+#: converter/mymoneygncreader.cpp:2269
+#, c-format
+msgid "Select parent investment account or enter new name. Stock %1"
+msgstr "Selecione a conta de investimento pai ou insira um novo nome. Ação %1"
+
+#: converter/mymoneygncreader.cpp:2292 converter/mymoneygncreader.cpp:2307
+msgid "%1 is not an Investment Account. Do you wish to make it one?"
+msgstr "%1 não é uma Conta de Investimento. Você deseja torná-la uma?"
+
+#: converter/mymoneygncreader.cpp:2408
+msgid ""
+"An Investment account must be a child of an Asset account\n"
+"Account %1 will be stored under the main Asset account"
+msgstr ""
+"Um conta de Investimento deve ser filha de uma conta de Investimento\n"
+"A conta %1 será armazenada sob a conta de Investimentos principal"
+
+#: converter/mymoneygncreader.cpp:2410
+msgid ""
+"An Income account must be a child of an Income account\n"
+"Account %1 will be stored under the main Income account"
+msgstr ""
+"Um conta de Receita deve ser filha de uma conta de Receita\n"
+"A conta %1 será armazenada sob a conta de Receitas principal"
+
+#: converter/mymoneygncreader.cpp:2412
+msgid ""
+"An Expense account must be a child of an Expense account\n"
+"Account %1 will be stored under the main Expense account"
+msgstr ""
+"Uma conta de Despesa deve ser filha de uma conta de Despesa\n"
+"A conta %1 será armazenada sob a conta de Despesas principal"
+
+#: converter/mymoneygncreader.cpp:2414
+msgid ""
+"One or more transactions contain a reference to an otherwise unknown "
+"account\n"
+"An asset account with the name %1 has been created to hold the data"
+msgstr ""
+"Uma ou mais transações contém uma referência para uma conta desconhecida\n"
+"Uma conta de ativos com o nome %1 foi criada para conter estes dados"
+
+#: converter/mymoneygncreader.cpp:2416
+msgid "Schedule %1 has interval of %2 which is not currently available"
+msgstr "O agendamento %1 possui intervalo de %2 que não está atualmente disponível"
+
+#: converter/mymoneygncreader.cpp:2417
+msgid "Schedule %1 dropped at user request"
+msgstr "Agendamento %1 descartado por solicitação do usuário"
+
+#: converter/mymoneygncreader.cpp:2418
+msgid "Schedule %1 contains unknown action (key = %2, type = %3)"
+msgstr "O agendamento %1 contém uma ação desconhecida (chave = %2, tipo= %3)"
+
+#: converter/mymoneygncreader.cpp:2419
+msgid "Schedule %1 contains multiple actions; only one has been imported"
+msgstr "O agendamento %1 contém ações múltiplas; somente uma ação pode ser importada"
+
+#: converter/mymoneygncreader.cpp:2420
+msgid "Schedule %1 contains no valid splits"
+msgstr "O agendamento %1 não contém parcelas válidas"
+
+#: converter/mymoneygncreader.cpp:2421
+msgid ""
+"Schedule %1 appears to contain a formula. GnuCash formulae are not "
+"convertible"
+msgstr ""
+"O agendamento %1 parece conter uma fórmula. Fórmulas do GnuCash não são "
+"conversíveis"
+
+#: converter/mymoneygncreader.cpp:2422
+msgid ""
+"Schedule %1 contains unknown interval specification; please check for "
+"correct operation"
+msgstr ""
+"O agendamento %1 contém uma especificação de intervalo desconhecida; por "
+"favor verifique a operação correta"
+
+#: converter/mymoneygncreader.cpp:2423
+msgid ""
+"Schedule %1 contains a deferred interval specification; please check for "
+"correct operation"
+msgstr ""
+"O agendamento %1 contém uma especificação de intervalo posterior; por favor "
+"verifique a operação correta"
+
+#: converter/mymoneygncreader.cpp:2424
+msgid ""
+"Account or Category %1, transaction date %2; split contains invalid value; "
+"please check"
+msgstr ""
+"Na Conta ou Categoria %1, a transação datada em %2 contém valor de parcela "
+"inválido. Por favor, verificar"
+
+#: kmymoneyutils.cpp:146
+msgid "&New Schedule..."
+msgstr "&Novo Agendamento..."
+
+#: kmymoneyutils.cpp:148
+msgid "Create a new schedule."
+msgstr "Criar um novo agendamento."
+
+#: kmymoneyutils.cpp:149
+msgid "Use this to create a new schedule."
+msgstr "Use isto para criar um novo agendamento."
+
+#: kmymoneyutils.cpp:158
+msgid "&Filter"
+msgstr "&Filtrar"
+
+#: kmymoneyutils.cpp:160
+msgid "Filter out accounts"
+msgstr "Filtrar contas"
+
+# TODO: Verify
+#: kmymoneyutils.cpp:161
+msgid "Use this to filter out accounts"
+msgstr "Use isto para filtrar contas"
+
+#: kmymoneyutils.cpp:192
+msgid "Preferred accounts"
+msgstr "Contas preferidas"
+
+#: kmymoneyutils.cpp:193
+msgid "Payment accounts"
+msgstr "Contas de pagamento"
+
+#: kmymoneyutils.cpp:194
+msgid "Favorite reports"
+msgstr "Relatórios favoritos"
+
+#: kmymoneyutils.cpp:195
+msgid "Forecast (schedule)"
+msgstr "Previsão (agendada)"
+
+#: kmymoneyutils.cpp:196
+msgid "Networth forecast"
+msgstr "Previsão de patrimônio líquido"
+
+#: kmymoneyutils.cpp:197
+msgid "Forecast (history)"
+msgstr "Previsão (histórico)"
+
+#: kmymoneyutils.cpp:198
+msgid "Assets and Liabilities"
+msgstr "Ativos & Passivos"
+
+#: kmymoneyutils.cpp:199 reports/pivottable.cpp:2416 views/khomeview.cpp:1393
+#: widgets/rc.cpp:70
+msgid "Budget"
+msgstr "Orçamento"
+
+#: kmymoneyutils.cpp:200
+msgid "CashFlow"
+msgstr "Tesouraria"
+
+#: dialogs/kenterscheduledlg.cpp:153 kmymoneyutils.cpp:366
+msgid "Unable to load schedule details"
+msgstr "Incapaz de carregar os detalhes de agendamento"
+
+#: kmymoneyutils.cpp:390 widgets/register.cpp:473
+msgid ""
+"_: Reconcile state 'Not reconciled'\n"
+"Not reconciled"
+msgstr "Não reconciliada"
+
+#: kmymoneyutils.cpp:393 widgets/register.cpp:476
+msgid ""
+"_: Reconcile state 'Cleared'\n"
+"Cleared"
+msgstr "Compensada"
+
+#: kmymoneyutils.cpp:396 widgets/register.cpp:479
+msgid ""
+"_: Reconcile state 'Reconciled'\n"
+"Reconciled"
+msgstr "Reconciliada"
+
+#: kmymoneyutils.cpp:399 widgets/register.cpp:482
+msgid ""
+"_: Reconcile state 'Frozen'\n"
+"Frozen"
+msgstr "Congelado"
+
+#: kmymoneyutils.cpp:410
+msgid ""
+"_: Reconcile flag C\n"
+"C"
+msgstr "C"
+
+#: kmymoneyutils.cpp:413
+msgid ""
+"_: Reconcile flag R\n"
+"R"
+msgstr "R"
+
+#: kmymoneyutils.cpp:416
+msgid ""
+"_: Reconcile flag F\n"
+"F"
+msgstr "F"
+
+#: kmymoneyutils.cpp:419
+msgid ""
+"_: Flag for unknown reconciliation state\n"
+"?"
+msgstr "?"
+
+#: _tips.cpp:3
+msgid ""
+"<p>...that you can change the sort order of ledger entries by\n"
+"right-clicking the header of the ledger view?\n"
+msgstr ""
+"<p>...que você pode mudar a sequência de ordenação das entradas\n"
+"do livro de registros clicando com o botão direito no cabeçalho\n"
+"da visão do mesmo?\n"
+
+#: _tips.cpp:9
+msgid ""
+"<p>...that you can easily move to the other side of a transfer transaction\n"
+"by opening the context menu with the right mouse button and selecting one of "
+"the\n"
+"'Goto' functions?\n"
+msgstr ""
+"<p>...que você pode facilmente mover o outro lado de uma transação de\n"
+"transferência abrindo o menu de contexto com o botão direito do mouse\n"
+"e selecionando uma das funções 'Ir para'?\n"
+
+#: _tips.cpp:16
+msgid ""
+"<p>...that you can start editing a transaction by double-clicking on the\n"
+"transaction in the register?\n"
+msgstr ""
+"<p>...que você pode começar a editar uma transação dando um clique-duplo\n"
+"na transação desejada no registro?\n"
+
+#: _tips.cpp:22
+msgid ""
+"<p>...that you can show more details of the selected transaction in the\n"
+"register by selecting the 'ledger lens' feature in the settings dialog?\n"
+msgstr ""
+"<p>...que você pode mostrar mais detalhes da transação selecionada\n"
+"no registro selecionando a funcionalidade de 'lentes do livro de registros'\n"
+"no diálogo de configurações?\n"
+
+#: _tips.cpp:28
+msgid ""
+"<p>...that transactions with no category assigned or split\n"
+"transactions with unassigned values are marked with an exclamation mark \n"
+"on a yellow triangle in the register?\n"
+msgstr ""
+"<p>...que transações sem categoria atribuída ou parcela\n"
+"de transação sem valores atribuídos são sinalizados com um ponto de \n"
+"exclamação em um triângulo amarelo no livro de registro?\n"
+
+#: _tips.cpp:35
+msgid ""
+"<p>...that you can show all details of the transactions in the register\n"
+"by typing &lt;Ctrl-T&gt; or selecting the 'Settings/Show Transaction "
+"Detail'\n"
+"menu entry? You can turn this feature off the same way.\n"
+msgstr ""
+"<p>...que você pode mostrar todos os detalhes das transações no livro de\n"
+"registro digitando &lt;Ctrl-T&gt; ou selecionando a entrada de menu\n"
+" 'Configurações->Mostrar Detalhes da Transação'? Você pode desligar\n"
+"este recurso da mesma maneira.\n"
+
+#: _tips.cpp:42
+msgid ""
+"<p>...that you can switch between a listing of all accounts or\n"
+"an icon view of all asset and liability accounts with the tabs\n"
+"in the accounts view?\n"
+msgstr ""
+"<p>...que você pode chavear entre a listagem de todas as contas\n"
+"e uma visão de ícones de todas as contas de ativos e de passivos\n"
+"com as abas na visão de contas?\n"
+
+#: _tips.cpp:49
+msgid "<p>...that the KMyMoney development team wishes you a nice day?\n"
+msgstr ""
+"<p>...que o time de desenvolvimento do KMyMoney deseja a você\n"
+"um belo dia?\n"
+
+#: _tips.cpp:54
+msgid ""
+"<p>...you can use your own external filter program to convert any\n"
+"import format to QIF on the fly? See the QIF profile editor for\n"
+"more details.\n"
+msgstr ""
+"<p>...você pode usar o seu próprio programa de filtragem externo\n"
+"para converter qualquer formato de importação para QIF on the fly?\n"
+"Veja o editor de perfil QIF para maiores detalhes.\n"
+
+#: _tips.cpp:61
+msgid ""
+"<p>...that you can create a scheduled transaction from an existing\n"
+"one by selecting the context menu on a transaction in the ledger\n"
+"or the \"More...\"-menu in the transaction form?\n"
+msgstr ""
+"<p>...que você pode criar uma transação agendada a partir de uma\n"
+"existente selecionando o menu de contexto de uma transação no livro\n"
+"de registros ou o menu \"Mais...\" no formulário da transação?\n"
+
+#: _tips.cpp:68
+msgid ""
+"<p>...that you can switch to the payee of a transaction\n"
+"by selecting the context menu on a transaction in the ledger\n"
+"or in the transaction menu?\n"
+msgstr ""
+"<p>...que você pode alternar para o beneficiário de uma transação\n"
+"selecionando o menu de contexto de uma transação no livro de\n"
+"registros ou no menu de transações?\n"
+
+#: _tips.cpp:75
+msgid ""
+"<p>...that you can modify the colors and fonts used for the ledgers\n"
+"via <i>Configure/Register/...</i>?\n"
+msgstr ""
+"<p>...que você pode modificar as cores e fontes usadas no livro\n"
+"de registros via <i>Configurar/Registro/...</i>?\n"
+
+#: _tips.cpp:81
+msgid ""
+"<p>...that you can hide transactions prior to a specific date?\n"
+"The date can be modified via <i>Configure/Register/Filter</i>.\n"
+msgstr ""
+"<p>...que você pode esconder transações anteriores a uma data\n"
+"específica? A data pode ser modificada via <i>Configurar/Filtro</i>.\n"
+
+#: _tips.cpp:87
+msgid ""
+"<p>...that you can customize the \"Home-Page\"\n"
+"via <i>Configure/Home</i>?\n"
+msgstr ""
+"<p>...que você pode personalizar a \"Página Inicial\"\n"
+"através do <i>Configurar/Página Inicial</i>?\n"
+
+#: _tips.cpp:93
+msgid ""
+"<p>...that you can enter new transactions even while reconciling\n"
+"an account? You can also make the transaction form visible.\n"
+msgstr ""
+"<p>...que você pode entrar com novas transações mesmo enquanto estiver\n"
+"reconciliando uma conta? Você pode também tornar o formulário de transação\n"
+"visível.\n"
+
+#: _tips.cpp:99
+msgid ""
+"<p>...that you can actively support the KMyMoney development team in\n"
+"cases that heavily depend on your data? You can save your data in an\n"
+"anonymized way for this support.<p>\n"
+"Just open your data file and immediately\n"
+"select <b>File/Save as...</b>. In the <b>Save As...</b> dialog\n"
+"select the filter <b>Anonymous Files</b> and make sure your file gets\n"
+"the extensions <b>.anon.xml</b>. <p>\n"
+"To verify, how the data looks like you are about to send away, you can open\n"
+"this file in KMyMoney and see how the developers see your data.\n"
+msgstr ""
+"<p>...que você pode ajudar ativamente a equipe de desenvolvimento do "
+"KMyMoney\n"
+"em casos onde ela depende fortemente dos seus dados? Você pode salvar seus\n"
+"dados de uma forma anônima para este fim.<p>\n"
+"Apenas abra seu arquivo de dados e selecione imediatamente <b>Arquivo-"
+">Salvar\n"
+"como...</b>. Na janela <b>Salvar Como...</b> selecione o filtro <b>Arquivos "
+"Anônimos\n"
+"</b> e certifique-se de obter a extensão <b>.anon.xml</b>.\n"
+"Para verificar como seus dados aparecerão ao enviá-los, você pode abrir este "
+"arquivo\n"
+"no KMyMoney e ver como os desenvolvedores verão seus dados.\n"
+
+#: _tips.cpp:112
+msgid ""
+"<p>... that you can import your bank statements even without a network \n"
+"connection? Just select the file (OFX or QIF) from the File->Import menu.</"
+"p>\n"
+"<p>Provided by Jose Jorge</p>\n"
+msgstr ""
+"<p>... que você pode importar seus extratos de banco mesmo sem uma conexão "
+"de rede? Basta selecionar o arquivo (OFC ou QIF) a partir do menu Arquivo-"
+">Importar.</p>\n"
+"<p>Dica de Jose Jorge</p>\n"
+
+#: reports/listtable.cpp:159 reports/listtable.cpp:163
+#: reports/pivottable.cpp:1564
+msgid ""
+"_: Report date range\n"
+"%1 through %2"
+msgstr "%1 até %2"
+
+#: reports/listtable.cpp:171 reports/pivottable.cpp:1571
+#, c-format
+msgid "All currencies converted to %1"
+msgstr "Todas as moedas convertidas para %1"
+
+#: reports/listtable.cpp:172 reports/pivottable.cpp:1328
+msgid "All currencies converted to %1\n"
+msgstr "Todas as moedas convertidas para %1\n"
+
+#: reports/listtable.cpp:176 reports/pivottable.cpp:1573
+msgid "All values shown in %1 unless otherwise noted"
+msgstr "Todos os valores exibidos em %1, a menos que anotados de maneira diferente"
+
+#: reports/listtable.cpp:177 reports/pivottable.cpp:1330
+msgid "All values shown in %1 unless otherwise noted\n"
+msgstr "Todos os valores exibidos em %1, a menos que anotados de maneira diferente\n"
+
+#: dialogs/kequitypriceupdatedlg.cpp:73 dialogs/kfindtransactiondlg.cpp:188
+#: dialogs/rc.cpp:53 dialogs/rc.cpp:63 dialogs/rc.cpp:208 dialogs/rc.cpp:805
+#: dialogs/settings/rc.cpp:111 dialogs/transactioneditor.cpp:844
+#: reports/listtable.cpp:196 views/khomeview.cpp:412 views/khomeview.cpp:485
+#: views/khomeview.cpp:519 views/rc.cpp:61 widgets/kmymoneypriceview.cpp:128
+#: widgets/rc.cpp:36 widgets/register.cpp:565 widgets/transaction.cpp:1027
+#: widgets/transaction.cpp:1484
+msgid "Date"
+msgstr "Data"
+
+#: reports/listtable.cpp:198
+msgid "Num"
+msgstr "Número"
+
+#: dialogs/kfindtransactiondlg.cpp:204 dialogs/kmymoneysplittable.cpp:78
+#: dialogs/kmymoneysplittable.cpp:831 dialogs/rc.cpp:217
+#: dialogs/transactioneditor.cpp:831 dialogs/transactioneditor.cpp:1374
+#: dialogs/transactioneditor.cpp:1382 dialogs/transactioneditor.cpp:1396
+#: dialogs/transactioneditor.cpp:1449 dialogs/transactioneditor.cpp:1456
+#: dialogs/transactioneditor.cpp:1504 reports/listtable.cpp:200
+#: views/kcategoriesview.cpp:76 views/rc.cpp:62 widgets/rc.cpp:115
+#: widgets/register.cpp:62 widgets/transaction.cpp:848
+#: widgets/transaction.cpp:906
+msgid "Category"
+msgstr "Categoria"
+
+#: dialogs/kmymoneysplittable.cpp:79 dialogs/kmymoneysplittable.cpp:837
+#: reports/listtable.cpp:202 widgets/rc.cpp:101 widgets/transaction.cpp:1042
+#: widgets/transaction.cpp:1628
+msgid "Memo"
+msgstr "Memo"
+
+#: reports/listtable.cpp:203
+msgid "Top Category"
+msgstr "Categoria de Topo"
+
+#: reports/listtable.cpp:204
+msgid "Category Type"
+msgstr "Tipo de Categoria"
+
+#: dialogs/rc.cpp:229 dialogs/settings/rc.cpp:152 reports/listtable.cpp:207
+#: widgets/kmymoneycombo.cpp:346 widgets/rc.cpp:107
+msgid "Reconciled"
+msgstr "Reconciliado"
+
+#: reports/listtable.cpp:208 widgets/rc.cpp:117
+msgid "Action"
+msgstr "Ação"
+
+#: dialogs/investactivities.cpp:199 dialogs/investactivities.cpp:287
+#: dialogs/investactivities.cpp:424 dialogs/investactivities.cpp:504
+#: dialogs/investactivities.cpp:544 dialogs/investtransactioneditor.cpp:241
+#: reports/listtable.cpp:209 widgets/rc.cpp:103 widgets/transaction.cpp:1513
+msgid "Shares"
+msgstr "Cotas"
+
+#: dialogs/investtransactioneditor.cpp:248
+#: dialogs/investtransactioneditor.cpp:1067
+#: dialogs/investtransactioneditor.cpp:1068
+#: dialogs/investtransactioneditor.cpp:1072
+#: dialogs/kequitypriceupdatedlg.cpp:72 dialogs/rc.cpp:109 dialogs/rc.cpp:164
+#: dialogs/rc.cpp:251 dialogs/rc.cpp:756 dialogs/rc.cpp:827
+#: dialogs/settings/rc.cpp:117 reports/listtable.cpp:210
+#: reports/listtable.cpp:211 reports/pivottable.cpp:2441
+#: views/kinvestmentview.cpp:80 widgets/kmymoneypriceview.cpp:129
+#: widgets/rc.cpp:43 widgets/rc.cpp:105 widgets/register.cpp:573
+msgid "Price"
+msgstr "Preço"
+
+#: reports/listtable.cpp:212
+msgid "Net Value"
+msgstr "Valor Líquido"
+
+#: reports/listtable.cpp:213
+msgid "Buys"
+msgstr "Compras"
+
+#: reports/listtable.cpp:214
+msgid "Sells"
+msgstr "Vendas"
+
+#: reports/listtable.cpp:215
+msgid "Dividends Reinvested"
+msgstr "Dividendos Reinvestidos"
+
+#: reports/listtable.cpp:216
+msgid "Dividends Paid Out"
+msgstr "Dividendos Pagos"
+
+#: reports/listtable.cpp:217
+msgid "Starting Balance"
+msgstr "Saldo Inicial"
+
+#: reports/listtable.cpp:218
+msgid "Ending Balance"
+msgstr "Saldo Final"
+
+#: reports/listtable.cpp:219
+msgid "Annualized Return"
+msgstr "Retorno Anual"
+
+#: reports/listtable.cpp:220
+msgid "Return On Investment"
+msgstr "Retorno Do Investimento"
+
+#: dialogs/rc.cpp:106 dialogs/rc.cpp:161 dialogs/rc.cpp:248 dialogs/rc.cpp:505
+#: dialogs/rc.cpp:570 dialogs/rc.cpp:667 dialogs/rc.cpp:753
+#: reports/listtable.cpp:223 widgets/register.cpp:570
+msgid "Payment"
+msgstr "Pagamento"
+
+#: dialogs/rc.cpp:111 dialogs/rc.cpp:166 dialogs/rc.cpp:253 dialogs/rc.cpp:709
+#: dialogs/rc.cpp:758 reports/listtable.cpp:224 widgets/rc.cpp:119
+#: widgets/register.cpp:575
+msgid "Balance"
+msgstr "Saldo"
+
+#: reports/listtable.cpp:227 views/kscheduledview.cpp:74
+msgid "Next Due Date"
+msgstr "Próxima Data de Vencimento"
+
+#: reports/listtable.cpp:229 views/kscheduledview.cpp:76
+msgid "Payment Method"
+msgstr "Método de Pagamento"
+
+#: dialogs/rc.cpp:803 reports/listtable.cpp:231 widgets/rc.cpp:2
+msgid "Description"
+msgstr "Descrição"
+
+#: reports/listtable.cpp:232
+msgid "Opening Date"
+msgstr "Data de Abertura"
+
+#: reports/listtable.cpp:234
+msgid "Balance Early Warning"
+msgstr "Aviso Antecipado de Saldo"
+
+#: reports/listtable.cpp:235
+msgid "Balance Max Limit"
+msgstr "Limite Máximo de Saldo"
+
+#: reports/listtable.cpp:236
+msgid "Credit Early Warning"
+msgstr "Aviso Antecipado de Crédito"
+
+#: reports/listtable.cpp:237
+msgid "Credit Max Limit"
+msgstr "Limite Máximo de Crédito"
+
+#: dialogs/rc.cpp:376 reports/listtable.cpp:238
+msgid "Tax"
+msgstr "Imposto"
+
+#: reports/listtable.cpp:239
+msgid "Preferred"
+msgstr "Preferida"
+
+#: reports/listtable.cpp:240
+msgid "Loan Amount"
+msgstr "Montante do Financiamento"
+
+#: dialogs/rc.cpp:511 reports/listtable.cpp:241
+msgid "Interest Rate"
+msgstr "Taxa de Juros"
+
+#: reports/listtable.cpp:242
+msgid "Next Interest Change"
+msgstr "Próxima Mudança de Juros"
+
+#: reports/listtable.cpp:243
+msgid "Periodic Payment"
+msgstr "Pagamento Periódico"
+
+#: reports/listtable.cpp:244
+msgid "Final Payment"
+msgstr "Pagamento Final"
+
+#: reports/listtable.cpp:245 views/khomeview.cpp:766 views/khomeview.cpp:1265
+#: views/khomeview.cpp:1273
+msgid "Current Balance"
+msgstr "Saldo Atual"
+
+#: dialogs/investactivities.cpp:201 dialogs/investactivities.cpp:289
+#: dialogs/investactivities.cpp:368 dialogs/investactivities.cpp:426
+#: dialogs/rc.cpp:327 reports/listtable.cpp:360 reports/listtable.cpp:364
+#: reports/listtable.cpp:556 reports/listtable.cpp:558
+#: reports/pivottable.cpp:1343 reports/pivottable.cpp:1445
+#: reports/pivottable.cpp:1505 reports/pivottable.cpp:1598
+#: reports/pivottable.cpp:1768 reports/pivottable.cpp:1845
+#: reports/pivottable.cpp:2165 reports/pivottable.cpp:2167
+#: reports/pivottable.cpp:2187 reports/pivottable.cpp:2189
+#: reports/querytabletest.cpp:134 reports/querytabletest.cpp:135
+#: reports/querytabletest.cpp:136 reports/querytabletest.cpp:137
+#: reports/querytabletest.cpp:162 reports/querytabletest.cpp:163
+#: reports/querytabletest.cpp:164 reports/querytabletest.cpp:197
+#: reports/querytabletest.cpp:198 reports/querytabletest.cpp:224
+#: reports/querytabletest.cpp:250 reports/querytabletest.cpp:251
+#: reports/querytabletest.cpp:252 reports/querytabletest.cpp:275
+#: reports/querytabletest.cpp:276 reports/querytabletest.cpp:277
+#: reports/querytabletest.cpp:366 reports/querytabletest.cpp:422
+#: reports/querytabletest.cpp:423 views/kforecastview.cpp:568 views/rc.cpp:18
+#: widgets/kmymoneyaccounttreeforecast.cpp:139 widgets/transaction.cpp:1643
+msgid "Total"
+msgstr "Total"
+
+#: reports/listtable.cpp:444
+msgid "Initial Market Value"
+msgstr "Valor Inicial de Mercado"
+
+#: reports/listtable.cpp:445
+msgid "Ending Market Value"
+msgstr "Valor Final de Mercado"
+
+#: reports/listtable.cpp:448 reports/querytabletest.cpp:651
+msgid "Opening Balance"
+msgstr "Saldo de Abertura"
+
+#: reports/listtable.cpp:449 reports/querytabletest.cpp:652
+#: reports/querytabletest.cpp:653
+msgid "Closing Balance"
+msgstr "Saldo de Fechamento"
+
+#: reports/listtable.cpp:490 reports/listtable.cpp:491
+msgid "Calculated"
+msgstr "Calculado"
+
+#: reports/listtable.cpp:572 reports/listtable.cpp:574
+#: reports/pivottable.cpp:1530 reports/pivottable.cpp:1886
+#: reports/querytabletest.cpp:138 reports/querytabletest.cpp:165
+#: reports/querytabletest.cpp:199 reports/querytabletest.cpp:225
+#: reports/querytabletest.cpp:253 reports/querytabletest.cpp:278
+#: reports/querytabletest.cpp:367 reports/querytabletest.cpp:402
+#: reports/querytabletest.cpp:424 reports/querytabletest.cpp:548
+#: reports/querytabletest.cpp:551 reports/querytabletest.cpp:586
+msgid "Grand Total"
+msgstr "Grande Total"
+
+#: dialogs/rc.cpp:233 reports/pivottable.cpp:339 views/kscheduledview.cpp:174
+#: views/kscheduledview.cpp:433 views/kscheduledview.cpp:449
+#: widgets/kmymoneyscheduledcalendar.cpp:48
+msgid "Transfers"
+msgstr "Transferências"
+
+#: reports/pivottable.cpp:1951
+msgid "Legend"
+msgstr "Legenda"
+
+#: reports/pivottable.cpp:2411 views/khomeview.cpp:1406
+#: views/khomeview.cpp:1443
+msgid "Actual"
+msgstr "Real"
+
+#: reports/pivottable.cpp:2421 views/khomeview.cpp:1409
+#: views/khomeview.cpp:1446
+msgid "Difference"
+msgstr "Diferença"
+
+#: reports/pivottable.cpp:2431
+msgid "Moving Average"
+msgstr "Média dos Movimentos"
+
+#: reports/pivottable.cpp:2436
+msgid "Moving Average Price"
+msgstr "Preço do Movimento Médio"
+
+#: reports/objectinfotable.cpp:214 reports/querytable.cpp:693
+#: reports/querytable.cpp:736 reports/querytable.cpp:1356
+#: reports/querytable.cpp:1375 views/kpayeesview.cpp:742
+#, c-format
+msgid "Transfer from %1"
+msgstr "Transferir de %1"
+
+#: reports/objectinfotable.cpp:215 reports/querytable.cpp:694
+#: reports/querytable.cpp:735 reports/querytable.cpp:1355
+#: reports/querytable.cpp:1374 views/kpayeesview.cpp:740
+#, c-format
+msgid "Transfer to %1"
+msgstr "Transferir para %1"
+
+#: reports/querytabletest.cpp:471 views/kreportsview.cpp:1144
+msgid "Investment Transactions"
+msgstr "Transações de Investimento"
+
+#: reports/querytabletest.cpp:472 reports/querytabletest.cpp:564
+msgid "Test Report"
+msgstr "Relatório de Teste"
+
+#: reports/querytabletest.cpp:547 reports/querytabletest.cpp:550
+msgid "Total Stock 1"
+msgstr "Total de Ações 1"
+
+#: reports/querytabletest.cpp:563 views/kreportsview.cpp:1174
+msgid "Investment Performance by Account"
+msgstr "Desempenho dos Investimentos por Conta"
+
+#: reports/querytable.cpp:431 reports/querytable.cpp:1200
+#, c-format
+msgid "Month of %1"
+msgstr "Mês de %1"
+
+#: reports/querytable.cpp:432 reports/querytable.cpp:1201
+#, c-format
+msgid "Week of %1"
+msgstr "Semana %1"
+
+#: reports/querytable.cpp:576 reports/querytable.cpp:739
+#: reports/querytable.cpp:858 reports/querytable.cpp:1325
+#: reports/querytable.cpp:1481
+msgid "No Institution"
+msgstr "Nenhuma Instituição"
+
+#: reports/querytable.cpp:580 reports/querytable.cpp:1329
+msgid "[Empty Payee]"
+msgstr "[Beneficiário Vazio]"
+
+#: reports/querytable.cpp:615 reports/querytable.cpp:1361
+msgid "[Split Transaction]"
+msgstr "[Dividir Transação]"
+
+#: reports/querytable.cpp:616 reports/querytable.cpp:617
+msgid "Split"
+msgstr "Parcelar"
+
+#: main.cpp:51
+msgid ""
+"\n"
+"KMyMoney, the Personal Finance Manager for KDE.\n"
+"\n"
+"Please consider contributing to this project with code and/or suggestions."
+msgstr ""
+"\n"
+"KMyMoney, o Gerenciador de Finanças Pessoais para o KDE.\n"
+"\n"
+"Por favor, considere a possibilidade de contribuir para este projeto\n"
+"com código e/ou sugestões."
+
+#: main.cpp:55
+msgid "language to be used"
+msgstr "língua a ser usada"
+
+#: main.cpp:56
+msgid "don't open last used file"
+msgstr "não abrir o último arquivo usado"
+
+#: main.cpp:57
+msgid "enable performance timers"
+msgstr "ativar cronômetros de desempenho"
+
+#: main.cpp:61
+msgid "turn on program traces"
+msgstr "ligar rastreio do programa"
+
+#: main.cpp:62
+msgid "dump the names of all defined KAction objects to stdout and quit"
+msgstr ""
+"direcionar os nomes de todos os objetos KAction definidos para a saída "
+"padrão e sair"
+
+#: main.cpp:66
+msgid "file to open"
+msgstr "arquivo a abrir"
+
+#: main.cpp:92
+msgid "Memory leakage detection"
+msgstr "Detecção de fuga de memória"
+
+#: main.cpp:96
+msgid "Compiled with the following settings:\n"
+msgstr "Compilado com as seguintes configurações:\n"
+
+#: dialogs/kmymoneysplittable.cpp:650 dialogs/ksplittransactiondlg.cpp:277
+#: main.cpp:98
+msgid "KMyMoney"
+msgstr "KMyMoney"
+
+#: main.cpp:104
+msgid "Initial idea, much initial source code, Project admin"
+msgstr "Idéia inicial, boa parte do código inicial, administrador do Projeto"
+
+#: main.cpp:105
+msgid "Core engine, Release Manager, Project admin"
+msgstr "Motor do Núcleo, Gerenciador de Versões, Administrador do Projeto"
+
+#: main.cpp:106
+msgid "Reporting logic, OFX Import"
+msgstr "Relatório lógico, Importador OFX"
+
+#: main.cpp:107
+msgid "Database backend, maintainer stable branch"
+msgstr "Infraestrutura de banco de dados, mantenedor do ramo estável"
+
+#: main.cpp:108
+msgid "Forecast, Reports"
+msgstr "Previsão, Relatórios"
+
+#: main.cpp:109
+msgid "Project Admin"
+msgstr "Administrador de Projeto"
+
+#: main.cpp:110
+msgid "Developer"
+msgstr "Desenvolvedor"
+
+#: main.cpp:111
+msgid "Database backend"
+msgstr "Infraestrutura de Banco de Dados"
+
+#: main.cpp:113
+msgid "Initial investment support"
+msgstr "Suporte inicial a investimentos"
+
+#: main.cpp:114
+msgid "Developer & Artist"
+msgstr "Desenvolvedor & Artista"
+
+#: main.cpp:115
+msgid "Icons & splash screen"
+msgstr "Ícones & tela de apresentação"
+
+#: main.cpp:116 main.cpp:117
+msgid "Patches"
+msgstr "Correções"
+
+#: main.cpp:136
+msgid ""
+"The monetary decimal symbol is not correctly set in the KDE Control Center's "
+"Country/Region & Language settings. Please set it to a reasonable value and "
+"start KMyMoney again."
+msgstr ""
+"O símbolo decimal monetário não está corretamente configurado nas "
+"configurações de País/Região e Idioma do Centro de Controle do KDE. Por "
+"favor, configure-o com um valor adequado e reinicie o KMyMoney."
+
+#: main.cpp:136
+msgid "Invalid settings"
+msgstr "Configurações inválidas"
+
+#: main.cpp:228
+msgid "Another instance of KMyMoney is already running. Do you want to quit?"
+msgstr "Outra instância do KMyMoney já está rodando. Você deseja sair?"
+
+#: main.cpp:289
+msgid "Uncaught error. Please report the details to the developers"
+msgstr "Erro não previsto. Por favor relate os detalhes aos desenvolvedores"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Marcus Gama (Tradutor Atual), Rogério Guerra Borin"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "marcus.gama@gmail.com,rogerioborin@yahoo.com.br"
+
+#: dialogs/kcsvprogressdlg.cpp:62 dialogs/kimportdlg.cpp:66 rc.cpp:1
+msgid "&Import"
+msgstr "&Importar"
+
+#: rc.cpp:2
+msgid "E&xport"
+msgstr "E&xportar"
+
+#: rc.cpp:3
+msgid "&Institution"
+msgstr "&Instituição"
+
+#: rc.cpp:4
+msgid "&Account"
+msgstr "&Conta"
+
+#: rc.cpp:5
+msgid "&Category"
+msgstr "&Categoria"
+
+#: rc.cpp:6
+msgid "&Transaction"
+msgstr "&Transação"
+
+#: rc.cpp:7 rc.cpp:20
+msgid "Mark transaction as..."
+msgstr "Marcar transação como..."
+
+#: rc.cpp:8 rc.cpp:21
+msgid "Mark transaction"
+msgstr "Marcar transação"
+
+#: rc.cpp:9
+msgid "T&ools"
+msgstr "Ferramen&tas"
+
+#: rc.cpp:10
+msgid "Account options"
+msgstr "Opções de Conta"
+
+#: rc.cpp:11
+msgid "Category options"
+msgstr "Opções da Categoria"
+
+#: rc.cpp:12
+msgid "Institution options"
+msgstr "Opções da Instituição"
+
+#: rc.cpp:13
+msgid "Payee options"
+msgstr "Opções de Beneficiário"
+
+#: rc.cpp:14
+msgid "Budget options"
+msgstr "Opções de Orçamento"
+
+#: rc.cpp:15
+msgid "Investment options"
+msgstr "Opções de Investimento"
+
+#: rc.cpp:16
+msgid "Scheduled transactions options"
+msgstr "Opções de transações agendadas"
+
+#: rc.cpp:17
+msgid "Transaction options"
+msgstr "Opções de Transação"
+
+#: rc.cpp:18
+msgid "Move transaction to..."
+msgstr "Mover transação para..."
+
+#: rc.cpp:19
+msgid "Select account"
+msgstr "Selecionar conta"
+
+#: rc.cpp:22
+msgid "Currency options"
+msgstr "Opções de Moeda"
+
+#: rc.cpp:24
+msgid "Always show a No. field in transaction form"
+msgstr "Sempre mostrar um campo Nr. no formulário da transação"
+
+#: rc.cpp:25
+msgid "Auto fill with previous transaction data"
+msgstr "Preencher automaticamente com os dados da transação anterior"
+
+#: rc.cpp:26
+msgid "Treat two transactions as identical, if amount differs less than"
+msgstr "Tratar duas transações como idênticas se o valor diferir menos de"
+
+#: dialogs/settings/rc.cpp:144 rc.cpp:27
+msgid "Auto increment check number"
+msgstr "Incrementar automaticamente o número do cheque"
+
+#: rc.cpp:28
+msgid "Autosave file periodically"
+msgstr "Salvar periodicamente o arquivo"
+
+#: rc.cpp:29
+msgid "Autosave interval in minutes"
+msgstr "Intervalo de salvamento em minutos"
+
+#: rc.cpp:30
+msgid "Check schedules upon startup"
+msgstr "Checar agendamentos na inicialização"
+
+#: dialogs/settings/rc.cpp:171 rc.cpp:31
+msgid "Enter transactions this number of days in advance"
+msgstr "Inserir transações esta quantidade de dias antecipadamente"
+
+#: dialogs/settings/rc.cpp:172 rc.cpp:32
+msgid "Number of days to preview schedules in ledger"
+msgstr "Dias antes dos agendamentos para antecipar no registro"
+
+#: dialogs/settings/rc.cpp:143 rc.cpp:33
+msgid "Insert transaction type into No. field for new transactions"
+msgstr "Inserir o tipo da transação no campo Nr. para novas transações"
+
+#: dialogs/settings/rc.cpp:145 rc.cpp:34
+msgid "Keep changes when selecting a different transaction/split"
+msgstr "Manter mudanças ao selecionar uma diferente transação/parcela"
+
+#: rc.cpp:35
+msgid "Using the Enter key moves between the fields"
+msgstr "Usar a tecla Enter move entre os campos"
+
+#: dialogs/settings/rc.cpp:130 rc.cpp:36
+msgid "Use the ledger lens"
+msgstr "Usar as lentes do livro de registros"
+
+#: rc.cpp:37
+msgid "Price Precision"
+msgstr "Precisão do Preço"
+
+#: dialogs/rc.cpp:65 rc.cpp:38
+msgid "Update price history"
+msgstr "Atualizar histórico de preços"
+
+#: dialogs/settings/rc.cpp:132 rc.cpp:39
+msgid "Show transaction form"
+msgstr "Mostrar o formulário da transação"
+
+#: rc.cpp:40
+msgid "Start with last selected view or homepage"
+msgstr "Iniciar com a última visão selecionada ou página inicial"
+
+#: rc.cpp:41
+msgid "Use GPG to encrypt data file"
+msgstr "Usar GPG para criptografar arquivo de dados"
+
+#: rc.cpp:42
+msgid "Also encrypt against recover key"
+msgstr "Também criptografar com a chave de recuperação"
+
+#: rc.cpp:43
+msgid "GPG User ID (deprecated)"
+msgstr "ID do Usuário no GPG (desaconselhável)"
+
+#: rc.cpp:44
+msgid "GPG User ID"
+msgstr "ID do Usuário no GPG"
+
+#: rc.cpp:45
+msgid "Run in expert (accountant) mode"
+msgstr "Executar em modo especialista (contador)"
+
+#: rc.cpp:46
+msgid "Show splash screen during startup"
+msgstr "Mostrar tela de apresentação ao iniciar"
+
+#: rc.cpp:47
+msgid "Synchronize account in ledger and investment view"
+msgstr "Sincronizar conta nas visões do livro de registro e de investimento"
+
+#: rc.cpp:48
+msgid "Icon size for view selection"
+msgstr "Tamanho do ícone para a seleção de visão"
+
+#: rc.cpp:49
+msgid "list of hidden views"
+msgstr "lista de visões ocultas"
+
+#: rc.cpp:50
+msgid "Firsttime switch to start new user wizard"
+msgstr "Na primeira vez alternar para o assistente de novo usuário"
+
+#: rc.cpp:51
+msgid "Show title bar on each view"
+msgstr "Mostrar a barra de título em cada visão"
+
+#: rc.cpp:52
+msgid "Start string matches for e.g. payees at start of string"
+msgstr "Texto inicial correspondente para beneficiários no início do texto"
+
+#: rc.cpp:53
+msgid "Order of items on homepage"
+msgstr "Ordem dos itens na página inicial"
+
+#: rc.cpp:54
+msgid "Percentage of default font size used for home view HTML page"
+msgstr ""
+"Percentagem padrão de tamanho de fonte usada para a visão inicial da página "
+"HTML"
+
+#: rc.cpp:55
+msgid "Remember (manually adjusted) font size in home view on program end."
+msgstr ""
+"Recordar (ajustado manualmente) o tamanho da fonte na visão inicial ao "
+"encerrar o programa."
+
+#: rc.cpp:56
+msgid "Show account limit information on the Homepage"
+msgstr "Mostrar os limites das contas na página inicial"
+
+#: rc.cpp:58
+msgid "Hide closed accounts"
+msgstr "Ocultar contas ocultas"
+
+#: rc.cpp:59
+msgid "Hide finished schedules"
+msgstr "Ocultar agendamentos terminados"
+
+#: rc.cpp:61
+msgid "Show all register entries in full detail"
+msgstr "Mostrar todos as entradas registradas com todos os detalhes"
+
+#: dialogs/settings/rc.cpp:129 rc.cpp:62
+msgid "Show a grid in the register"
+msgstr "Mostrar uma grade no livro de registro"
+
+#: rc.cpp:63
+msgid "Show fancy group markers"
+msgstr "Mostrar marcadores de grupos fantasia"
+
+#: rc.cpp:64
+msgid "Show fancy markers for previous and current fiscal year"
+msgstr "Mostrar marcadores fantasia para o ano fiscal atual e anterior"
+
+#: rc.cpp:65
+msgid "Starting month of the fiscal year"
+msgstr "Mês inicial do ano fiscal"
+
+#: rc.cpp:66
+msgid "Starting day of the fiscal year"
+msgstr "Dia inicial do ano fiscal"
+
+#: rc.cpp:67
+msgid "Start date"
+msgstr "Data inicial"
+
+#: dialogs/settings/rc.cpp:9 rc.cpp:68
+msgid "Use system colors"
+msgstr "Usar as cores do sistema"
+
+#: rc.cpp:69
+msgid "List color"
+msgstr "Cor da lista"
+
+#: rc.cpp:70
+msgid "List background color"
+msgstr "Cor do fundo da lista"
+
+#: rc.cpp:71
+msgid "List grid color"
+msgstr "Cor da grade"
+
+#: rc.cpp:72
+msgid "Background color for imported transactions"
+msgstr "Cor de fundo para transações importadas"
+
+#: rc.cpp:73
+msgid "Background color for matched transactions"
+msgstr "Cor de fundo para transações correspondentes"
+
+#: rc.cpp:74
+msgid "List color for erronous transactions"
+msgstr "Cor da lista para transações erradas"
+
+#: rc.cpp:75
+msgid "List color for missing conversion rate"
+msgstr "Cor da lista para taxas de conversão faltando"
+
+#: rc.cpp:76
+msgid "List color for negative values"
+msgstr "Cor da lista para valores negativos"
+
+#: rc.cpp:77
+msgid "Background color for group marker"
+msgstr "Cor de fundo para o marcador de grupo"
+
+#: rc.cpp:78
+msgid "Background color for required fields"
+msgstr "Cor de fundo para campos obrigatórios"
+
+#: rc.cpp:79
+msgid "Use system font"
+msgstr "Usar fonte de sistema"
+
+#: dialogs/settings/rc.cpp:21 rc.cpp:80
+msgid "Cell font"
+msgstr "Fonte da célula"
+
+#: dialogs/settings/rc.cpp:22 rc.cpp:81
+msgid "Header font"
+msgstr "Fonte de cabeçalho"
+
+#: rc.cpp:82 rc.cpp:83
+msgid "Sort order of register in normal view"
+msgstr "Ordenação do registro na visão normal"
+
+#: rc.cpp:84
+msgid "Sort order of register in search dialog"
+msgstr "Ordenação do registro na janela de busca"
+
+#: rc.cpp:85
+msgid "Default reconciliation state for transactions entered during reconciliation"
+msgstr ""
+"Estado de reconciliação padrão para transações inseridas durante a "
+"reconciliação"
+
+#: rc.cpp:86
+msgid "Number of days (plus/minus) to search for matching transactions"
+msgstr "Número de dias (mais/menos) a buscar por transações correspondentes"
+
+#: rc.cpp:87
+msgid "During import, ask for a new payee's default category"
+msgstr ""
+"Durante a importação, questionar por uma nova categoria padrão de "
+"beneficiários"
+
+#: rc.cpp:88
+msgid "Method to calculate forecast"
+msgstr "Método para calcular a previsão"
+
+#: rc.cpp:89
+msgid "Days to forecast"
+msgstr "Dias a prever"
+
+#: rc.cpp:90
+msgid "Days of normal account cycle"
+msgstr "Dias de ciclo normal da conta"
+
+#: rc.cpp:91
+msgid "Number of historic cycles to use in forecast"
+msgstr "Número de ciclos do histórico a usar na previsão"
+
+#: rc.cpp:92
+msgid "Day of month to start forecast"
+msgstr "Dia do mês onde começar a previsão"
+
+#: rc.cpp:93
+msgid "Method to calculate history-based forecast"
+msgstr "Método para calcular previsão baseada no histórico"
+
+#: rc.cpp:94
+msgid "Skip opening date when fetching transactions"
+msgstr "Pular data de abertura ao obter transações"
+
+#: rc.cpp:95
+msgid "Include future transaction when using Schedule Forecast"
+msgstr "Incluir as transações futuras na Previsão de Agendamentos"
+
+#: rc.cpp:96
+msgid "Include scheduled transactions when using Schedule Forecast"
+msgstr "Incluir transações agendadas na Previsão de Agendamentos"
+
+#: rc.cpp:97
+msgid "additional names for cash account"
+msgstr "nomes adicionais para a conta de dinheiro"
+
+#: rc.cpp:98
+msgid "additional names for checking account"
+msgstr "nomes adicionais para a contas de cheques"
+
+#: rc.cpp:99
+msgid "additional names for credit card account"
+msgstr "nomes adicionais para a conta de cartão de crédito"
+
+#: rc.cpp:100
+msgid "additional names for asset account"
+msgstr "nomes adicionais para conta de ativos"
+
+#: rc.cpp:101
+msgid "additional names for opening balance payee"
+msgstr "nomes adicionais para o beneficiário do saldo inicial"
+
+#: rc.cpp:102
+msgid "additional names for invoice accounts"
+msgstr "nomes adicionais para as contas de recibos"
+
+#: rc.cpp:103 widgets/rc.cpp:161 widgets/rc.cpp:163
+msgid "..."
+msgstr "..."
+
+#: views/kcategoriesview.cpp:276
+msgid "Profit: "
+msgstr "Rendimento: "
+
+#: views/kcategoriesview.cpp:278
+msgid "Loss: "
+msgstr "Perdas: "
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:54
+#: dialogs/transactioneditor.cpp:605 views/kpayeesview.cpp:365
+#: widgets/kmymoneyonlinequoteconfig.cpp:54
+msgid "Accepts the entered data and stores it"
+msgstr "Aceita os dados introduzidos e os armazena"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:55 views/kpayeesview.cpp:366
+#: widgets/kmymoneyonlinequoteconfig.cpp:55
+msgid "Use this to accept the modified data."
+msgstr "Use isto para aceitar os dados modificados."
+
+#: views/kpayeesview.cpp:491
+msgid ""
+"A payee with the name '%1' already exists. It is not advisable to have "
+"multiple payees with the same identification name. Are you sure you would "
+"like to rename the payee?"
+msgstr ""
+"Um beneficiário com o nome '%1' já existe. Não é aconselhável ter vários "
+"beneficiários com o mesmo nome de identificação. Você tem certeza que deseja "
+"renomear o beneficiário?"
+
+#: views/kpayeesview.cpp:518 views/kpayeesview.cpp:869
+msgid "Unable to modify payee"
+msgstr "Incapaz de modificar beneficiário"
+
+#: views/kpayeesview.cpp:564
+msgid "Do you want to save the changes for <b>%1</b>?"
+msgstr "Você deseja salvar as alterações para <b>%1</b>?"
+
+#: views/kbudgetview.cpp:490 views/kpayeesview.cpp:565
+msgid "Save changes"
+msgstr "Salvar alterações"
+
+#: views/kgloballedgerview.cpp:737 views/kpayeesview.cpp:662
+#: views/kpayeesview.cpp:753
+#, c-format
+msgid "Balance: %1"
+msgstr "Saldo: %1"
+
+#: views/kpayeesview.cpp:725 views/kpayeesview.cpp:731
+#, c-format
+msgid "Amortization of %1"
+msgstr "Amortização de %1"
+
+#: views/kpayeesview.cpp:727 views/kpayeesview.cpp:733
+#, c-format
+msgid "Payment to %1"
+msgstr "Pagamento para %1"
+
+#: views/kpayeesview.cpp:736
+#, c-format
+msgid "Loan payment from %1"
+msgstr "Pagamento de financiamento de %1"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:123
+#: dialogs/kconfirmmanualenterdlg.cpp:133 views/kpayeesview.cpp:745
+#: widgets/kmymoneycategory.cpp:160 widgets/kmymoneycategory.cpp:166
+#: widgets/transaction.cpp:851 widgets/transaction.cpp:1397
+#: widgets/transaction.cpp:1411
+msgid ""
+"_: Split transaction (category replacement)\n"
+"Split transaction"
+msgstr "Dividir transação"
+
+#: views/kreportsview.cpp:262
+msgid ""
+"There was an error creating your report: \"%1\".\n"
+"Please report this error to the developer's list: kmymoney2-developer@lists."
+"sourceforge.net"
+msgstr ""
+"Ocorreu um erro ao criar o seu relatório: \"%1\".\n"
+"Por favor relate este erro na lista de desenvolvedores: kmymoney2-"
+"developer@lists.sourceforge.net"
+
+#: views/kreportsview.cpp:264
+msgid "Critical Error"
+msgstr "Erro Crítico"
+
+#: views/kreportsview.cpp:268
+msgid "Unable to generate report"
+msgstr "Não foi possível gerar o relatório"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:125 views/kreportsview.cpp:286
+#: views/rc.cpp:53 widgets/rc.cpp:146
+msgid "Chart"
+msgstr "Gráfico"
+
+#: views/kreportsview.cpp:287 widgets/rc.cpp:147
+msgid "Show the chart version of this report"
+msgstr "Mostrar a versão do gráfico deste relatório"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:112 views/khomeview.cpp:900
+#: views/kreportsview.cpp:294 views/kreportsview.cpp:328
+msgid "Report"
+msgstr "Relatório"
+
+#: views/kreportsview.cpp:295
+msgid "Show the report version of this chart"
+msgstr "Mostrar a versão do relatório deste gráfico"
+
+#: views/kmymoneyview.cpp:236 views/kreportsview.cpp:314
+#: views/kreportsview.cpp:326
+msgid "Reports"
+msgstr "Relatórios"
+
+#: views/khomeview.cpp:902 views/kreportsview.cpp:329 widgets/rc.cpp:56
+msgid "Comment"
+msgstr "Comentário"
+
+#: views/kreportsview.cpp:432
+msgid "Charts"
+msgstr "Gráficos"
+
+#: views/khomeview.cpp:897 views/kreportsview.cpp:470
+msgid "Favorite Reports"
+msgstr "Relatórios Favoritos"
+
+#: views/kreportsview.cpp:486
+msgid "Old Customized Reports"
+msgstr "Relatóricos Personalizados Antigos"
+
+#: views/kreportsview.cpp:579
+msgid "Include Stylesheet"
+msgstr "Incluir Folha de Estilo"
+
+#: views/kreportsview.cpp:585
+msgid ""
+"_: CSV (Filefilter)\n"
+"CSV files"
+msgstr "Arquivos CSV"
+
+#: views/kreportsview.cpp:586
+msgid ""
+"_: HTML (Filefilter)\n"
+"HTML files"
+msgstr "Arquivos HTML"
+
+#: views/kreportsview.cpp:591
+msgid "Export as"
+msgstr "Exportar como"
+
+#: views/kreportsview.cpp:619 views/kreportsview.cpp:660
+#: views/kreportsview.cpp:942 views/kreportsview.cpp:950
+#: views/kreportsview.cpp:958 views/kreportsview.cpp:968
+#: views/kreportsview.cpp:980 views/kreportsview.cpp:998
+#: views/kreportsview.cpp:1006 views/kreportsview.cpp:1014
+#: views/kreportsview.cpp:1022 views/kreportsview.cpp:1034
+#: views/kreportsview.cpp:1046 views/kreportsview.cpp:1056
+#: views/kreportsview.cpp:1070 views/kreportsview.cpp:1079
+#: views/kreportsview.cpp:1087 views/kreportsview.cpp:1095
+#: views/kreportsview.cpp:1103 views/kreportsview.cpp:1111
+#: views/kreportsview.cpp:1120 views/kreportsview.cpp:1132
+#: views/kreportsview.cpp:1145 views/kreportsview.cpp:1155
+#: views/kreportsview.cpp:1165 views/kreportsview.cpp:1175
+#: views/kreportsview.cpp:1185 views/kreportsview.cpp:1195
+#: views/kreportsview.cpp:1208 views/kreportsview.cpp:1222
+#: views/kreportsview.cpp:1239 views/kreportsview.cpp:1257
+#: views/kreportsview.cpp:1273 views/kreportsview.cpp:1295
+#: views/kreportsview.cpp:1304 views/kreportsview.cpp:1313
+#: views/kreportsview.cpp:1322 views/kreportsview.cpp:1336
+#: views/kreportsview.cpp:1347 views/kreportsview.cpp:1362
+#: views/kreportsview.cpp:1372 views/kreportsview.cpp:1383
+#: views/kreportsview.cpp:1393 views/kreportsview.cpp:1404
+#: views/kreportsview.cpp:1423 views/kreportsview.cpp:1432
+#: views/kreportsview.cpp:1444 views/kreportsview.cpp:1463
+#: views/kreportsview.cpp:1472 views/kreportsview.cpp:1481
+#: views/kreportsview.cpp:1490
+msgid "Default Report"
+msgstr "Relatório Padrão"
+
+#: views/kreportsview.cpp:621 views/kreportsview.cpp:661
+msgid "Custom Report"
+msgstr "Relatório Personalizado"
+
+#: views/kreportsview.cpp:622
+msgid " (Customized)"
+msgstr " (Personalizado)"
+
+#: views/kreportsview.cpp:690
+msgid ""
+"Are you sure you want to delete report <b>%1</b>? There is no way to "
+"recover it!"
+msgstr ""
+"Você tem certeza que deseja apagar o relatório <b>%1</b>? Não será possível "
+"recuperá-lo!"
+
+#: views/kreportsview.cpp:690 views/kreportsview.cpp:702
+msgid "Delete Report?"
+msgstr "Excluir Relatório?"
+
+#: views/kreportsview.cpp:702
+msgid "Sorry, <b>%1</b> is a default report. You may not delete it."
+msgstr "Desculpe, o <b>%1</b> é um relatório padrão. Você não pode apagá-lo."
+
+#: views/kreportsview.cpp:882
+msgid "&Open"
+msgstr "&Abrir"
+
+#: views/kreportsview.cpp:884
+msgid "&New report"
+msgstr "&Novo relatório"
+
+#: views/kreportsview.cpp:934
+msgid "Income and Expenses"
+msgstr "Receitas e Despesas"
+
+#: views/kreportsview.cpp:941
+msgid "Income and Expenses This Month"
+msgstr "Receitas e Despesas Deste Mês"
+
+#: views/kreportsview.cpp:949
+msgid "Income and Expenses This Year"
+msgstr "Receitas e Despesas Deste Ano"
+
+#: views/kreportsview.cpp:957
+msgid "Income and Expenses By Year"
+msgstr "Receitas e Despesas Por Ano"
+
+#: views/kreportsview.cpp:967
+msgid "Income and Expenses Graph"
+msgstr "Gráfico de Receitas e Despesas"
+
+#: views/kreportsview.cpp:979
+msgid "Income and Expenses Pie Chart"
+msgstr "Gráfico Circular de Receitas e Despesas"
+
+#: views/khomeview.cpp:1361 views/kreportsview.cpp:990
+msgid "Net Worth"
+msgstr "Valor Líquido"
+
+#: views/kreportsview.cpp:997
+msgid "Net Worth By Month"
+msgstr "Valor Líquido Por Mês"
+
+#: views/kreportsview.cpp:1005
+msgid "Net Worth Today"
+msgstr "Valor Líquido Hoje"
+
+#: views/kreportsview.cpp:1013
+msgid "Net Worth By Year"
+msgstr "Valor Líquido Por Ano"
+
+#: views/kreportsview.cpp:1021
+msgid "7-day Cash Flow Forecast"
+msgstr "Previsão do Fluxo de Dinheiro de 7 dias"
+
+#: views/kreportsview.cpp:1033
+msgid "Net Worth Graph"
+msgstr "Gráfico de Patrimônio Líquido"
+
+#: views/kreportsview.cpp:1045
+msgid "Account Balances by Institution"
+msgstr "Saldo de Contas por Instituição"
+
+#: views/kreportsview.cpp:1055
+msgid "Account Balances by Type"
+msgstr "Saldo de Contas por Tipo"
+
+#: views/kreportsview.cpp:1069
+msgid "Transactions by Account"
+msgstr "Transações por Conta"
+
+#: views/kreportsview.cpp:1078
+msgid "Transactions by Category"
+msgstr "Transações por Categoria"
+
+#: views/kreportsview.cpp:1086
+msgid "Transactions by Payee"
+msgstr "Transações por Beneficiários"
+
+#: views/kreportsview.cpp:1094
+msgid "Transactions by Month"
+msgstr "Transações por Mês"
+
+#: views/kreportsview.cpp:1102
+msgid "Transactions by Week"
+msgstr "Transações por Semana"
+
+#: views/kreportsview.cpp:1110
+msgid "Loan Transactions"
+msgstr "Transações de Financiamentos"
+
+#: views/kreportsview.cpp:1119
+msgid "Transactions by Reconciliation Status"
+msgstr "Transações por Estado de Reconciliação"
+
+#: views/kreportsview.cpp:1125
+msgid "Cash Flow"
+msgstr "Dinheiro"
+
+#: views/kreportsview.cpp:1131
+msgid "Cash Flow Transactions This Month"
+msgstr "Transações de Dinheiro neste Mês"
+
+#: views/kmymoneyview.cpp:226 views/kmymoneyview.cpp:228
+#: views/kreportsview.cpp:1137
+msgid "Investments"
+msgstr "Investimentos"
+
+#: views/kreportsview.cpp:1154
+msgid "Investment Holdings by Account"
+msgstr "Investimentos por Conta"
+
+#: views/kreportsview.cpp:1164
+msgid "Investment Holdings by Type"
+msgstr "Investimentos por Tipo"
+
+#: views/kreportsview.cpp:1184
+msgid "Investment Performance by Type"
+msgstr "Desempenho dos Investimentos por Tipo"
+
+#: views/kreportsview.cpp:1194
+msgid "Investment Holdings Pie"
+msgstr "Gráfico Circular de Investimentos"
+
+#: views/kreportsview.cpp:1207
+msgid "Investment Worth Graph"
+msgstr "Gráfico de Investimento Líquido"
+
+#: views/kreportsview.cpp:1221
+msgid "Investment Price Graph"
+msgstr "Gráfico do Preço do Investimento"
+
+#: views/kreportsview.cpp:1238
+msgid "Investment Moving Average Price Graph"
+msgstr "Gráfico de Investimento do Movimento Médio de Preço"
+
+#: views/kreportsview.cpp:1256
+msgid "Investment Moving Average"
+msgstr "Média Movente do Investimento"
+
+#: views/kreportsview.cpp:1272
+msgid "Investment Moving Average vs Actual"
+msgstr "Média Movente do Investimento contra o Real"
+
+#: views/kreportsview.cpp:1287
+msgid "Taxes"
+msgstr "Impostos"
+
+#: views/kreportsview.cpp:1294
+msgid "Tax Transactions by Category"
+msgstr "Transações de Impostos por Categoria"
+
+#: views/kreportsview.cpp:1303
+msgid "Tax Transactions by Payee"
+msgstr "Transações de Impostos por Beneficiários"
+
+#: views/kreportsview.cpp:1312
+msgid "Tax Transactions by Category Last Fiscal Year"
+msgstr "Transações de Impostos por Categoria do Último Ano Fiscal"
+
+#: views/kreportsview.cpp:1321
+msgid "Tax Transactions by Payee Last Fiscal Year"
+msgstr "Transações de Impostos por Beneficiários do Último Ano Fiscal"
+
+#: views/kreportsview.cpp:1328
+msgid "Budgeting"
+msgstr "Orçamento"
+
+#: views/kreportsview.cpp:1335
+msgid "Budgeted vs. Actual This Year"
+msgstr "Orçamento x Real Neste Ano"
+
+#: views/kreportsview.cpp:1346
+msgid "Budgeted vs. Actual This Year (YTM)"
+msgstr "Orçamento x Real Neste Ano (TIR)"
+
+#: views/khomeview.cpp:1383 views/kreportsview.cpp:1361
+msgid "Monthly Budgeted vs. Actual"
+msgstr "Orçamento Mensal x Real"
+
+#: views/kreportsview.cpp:1371
+msgid "Yearly Budgeted vs. Actual"
+msgstr "Orçamento Anual x Real"
+
+#: views/kreportsview.cpp:1382
+msgid "Monthly Budget"
+msgstr "Orçamento Mensal"
+
+#: views/kreportsview.cpp:1392
+msgid "Yearly Budget"
+msgstr "Orçamento Anual"
+
+#: views/kreportsview.cpp:1403
+msgid "Yearly Budgeted vs Actual Graph"
+msgstr "Orçamento Anual x Gráfico Real"
+
+#: views/kreportsview.cpp:1422
+msgid "Forecast By Month"
+msgstr "Previsão Por Mês"
+
+#: views/kreportsview.cpp:1431
+msgid "Forecast Next Quarter"
+msgstr "Previsão para o Próximo Trimestre"
+
+#: views/kreportsview.cpp:1443
+msgid "Net Worth Forecast Graph"
+msgstr "Gráfico de Previsão do Patrimônio Líquido"
+
+#: dialogs/rc.cpp:126 dialogs/rc.cpp:128 dialogs/rc.cpp:466
+#: views/kreportsview.cpp:1455
+msgid "General Information"
+msgstr "Informações Gerais"
+
+#: views/kreportsview.cpp:1462
+msgid "Schedule Information"
+msgstr "Informações do Agendamento"
+
+#: views/kreportsview.cpp:1471
+msgid "Schedule Summary Information"
+msgstr "Informações do Resumo do Agendamento"
+
+#: views/kreportsview.cpp:1480
+msgid "Account Information"
+msgstr "Informações da Conta"
+
+#: views/kreportsview.cpp:1489
+msgid "Loan Information"
+msgstr "Informações do Empréstimo"
+
+#: dialogs/rc.cpp:323 views/kmymoneyview.cpp:148 views/kmymoneyview.cpp:150
+msgid "Institutions"
+msgstr "Instituições"
+
+#: dialogs/knewaccountdlg.cpp:98 views/kmymoneyview.cpp:162
+#: views/kmymoneyview.cpp:164 widgets/rc.cpp:4 widgets/rc.cpp:94
+msgid "Accounts"
+msgstr "Contas"
+
+#: views/kmymoneyview.cpp:176
+msgid "Bills & Reminders"
+msgstr "Contas a Pagar & Lembretes"
+
+#: views/kmymoneyview.cpp:178
+msgid "Scheduled transactions"
+msgstr "Transações agendadas"
+
+#: dialogs/knewaccountdlg.cpp:98 dialogs/rc.cpp:193 views/kmymoneyview.cpp:188
+#: views/kmymoneyview.cpp:190 widgets/rc.cpp:91
+msgid "Categories"
+msgstr "Categorias"
+
+#: dialogs/kfindtransactiondlg.cpp:212 dialogs/rc.cpp:318
+#: views/kmymoneyview.cpp:199 views/kmymoneyview.cpp:201 widgets/rc.cpp:93
+msgid "Payees"
+msgstr "Beneficiários"
+
+#: views/kgloballedgerview.cpp:149 views/kmymoneyview.cpp:211
+msgid "Ledgers"
+msgstr "Livro de registros"
+
+#: views/kmymoneyview.cpp:353
+msgid "Creating transactions can only be performed in the ledger view"
+msgstr "A criação de transações só pode ser executada na visão do livro de registros"
+
+#: views/kmymoneyview.cpp:367
+msgid "Modifying transactions can only be performed in the ledger view"
+msgstr ""
+"A modificação de transações só pode ser executada na visão do livro de "
+"registros"
+
+#: views/kmymoneyview.cpp:382
+msgid "Duplicating transactions can only be performed in the ledger view"
+msgstr ""
+"A duplicação de transações só pode ser executada na visão do livro de "
+"registros"
+
+#: views/kmymoneyview.cpp:394
+msgid "Edit the current selected transactions"
+msgstr "Editar as transações selecionadas"
+
+#: views/kmymoneyview.cpp:602
+msgid "<b>%1</b> is not a KMyMoney file."
+msgstr "<b>%1</b> não é uma arquivo do KMyMoney."
+
+#: views/kmymoneyview.cpp:643
+msgid "GPG is not available for decryption of file <b>%1</b>"
+msgstr "GPG não está disponível para decriptografar o arquivo<b>%1</b>"
+
+#: views/kmymoneyview.cpp:721
+msgid ""
+"File <b>%1</b> contains the old binary format used by KMyMoney. Please use "
+"an older version of KMyMoney (0.8.x) that still supports this format to "
+"convert it to the new XML based format."
+msgstr ""
+"Arquivo<b>%1</b> contém um formato binário antigo usado pelo KMyMoney. Por "
+"favor, use uma versão antida do KMyMoney (0.8.x) que ainda suporte este "
+"formato para convertê-lo para o novo formato baseado em XML."
+
+#: views/kmymoneyview.cpp:723
+msgid "File <b>%1</b> contains an unknown file format!"
+msgstr "Arquivo<b>%1</b> contém um formato de arquivo desconhecido!"
+
+#: views/kmymoneyview.cpp:728
+msgid "Cannot read from file <b>%1</b>!"
+msgstr "Não foi possível ler o arquivo<b>%1</b>!"
+
+#: views/kmymoneyview.cpp:732
+msgid "Cannot load file <b>%1</b>. Reason: %2"
+msgstr "Não foi possível carregar o arquivo<b>%1</b>. Razão: %2"
+
+#: views/kmymoneyview.cpp:742 views/kmymoneyview.cpp:748
+msgid "File <b>%1</b> not found!"
+msgstr "Arquivo <b>%1</b> não encontrado!"
+
+#: views/kmymoneyview.cpp:812
+msgid "Can't open database %1\n"
+msgstr "Não foi possível abrir o banco de dados %1\n"
+
+#: views/kmymoneyview.cpp:844
+msgid "An unrecoverable error occurred while reading the database"
+msgstr "Um erro irrecuperável ocorreu durante a leitura do banco de dados"
+
+#: views/kmymoneyview.cpp:846 views/kmymoneyview.cpp:1208
+msgid "Database malfunction"
+msgstr "Mau funcionamento do banco de dados"
+
+#: views/kmymoneyview.cpp:938
+msgid "Unknown fix level in input file"
+msgstr "Nível de correção desconhecido no arquivo de entrada"
+
+#: views/kmymoneyview.cpp:984
+msgid ""
+"GPG does not seem to be installed on your system. Please make sure, that GPG "
+"can be found using the standard search path. This time, encryption is "
+"disabled."
+msgstr ""
+"O GPG não parece estar instalado em seu sistema. Por favor, certifique-se de "
+"que o GPG pode ser encontrado usando o caminho de busca padrão. Por "
+"enquanto, a criptografia está desabilitada."
+
+#: views/kmymoneyview.cpp:984
+msgid "GPG not found"
+msgstr "GPG não encontrado"
+
+#: views/kmymoneyview.cpp:991
+msgid ""
+"You have selected to encrypt your data also with the KMyMoney recover key, "
+"but the key with id</p><p><center><b>%1</b></center></p>has not been found "
+"in your keyring at this time. Please make sure to import this key into your "
+"keyring. You can find it on the <a href=\"http://kmymoney2.sourceforge.net/"
+"\">KMyMoney web-site</a>. This time your data will not be encrypted with the "
+"KMyMoney recover key."
+msgstr ""
+"Você optou por criptografar seus dados também com a chave de recuperação do "
+"KMyMoney, mas a chave com id</p><p><center>%1<b></b></center></p>não foi "
+"encontrada em seu chaveiro atual. Você pode encontrá-la na <a href=\"http://"
+"kmymoney2.sourceforge.net/\">Página Web do KMyMoney</a>. Por enquanto, seus "
+"dados não serão criptografados com a chave de recuperação do KMyMoney."
+
+#: views/kmymoneyview.cpp:991 views/kmymoneyview.cpp:1000
+msgid "GPG-Key not found"
+msgstr "Chave GPG não encontrada"
+
+#: views/kmymoneyview.cpp:1000
+msgid ""
+"You have specified to encrypt your data for the user-id</p><p><center><b>%1</"
+"b>.</center></p>Unfortunately, a valid key for this user-id was not found in "
+"your keyring. Please make sure to import a valid key for this user-id. This "
+"time, encryption is disabled."
+msgstr ""
+"Você optou por criptografar seus dados para a id de usuário</p><p><center><b>"
+"%1</b>.</center></p>Infelizmente não foi encontrada uma chave válida para "
+"esta id de usuário em seu chaveiro. Por favor, certifique-se de que importou "
+"uma chave válida para esta id de usuário. Por enquanto, a criptografia está "
+"desabilitada."
+
+#: views/kmymoneyview.cpp:1006
+msgid ""
+"You have configured to save your data in encrypted form using GPG. Please be "
+"aware, that this is a brand new feature which is yet untested. Make sure, "
+"you have the necessary understanding that you might loose all your data if "
+"you store it encrypted and cannot decrypt it later on! If unsure, answer "
+"<b>No</b>."
+msgstr ""
+"Você optou por salvar seus dados criptografando-os usando o GPG. Por favor, "
+"esteja ciente que este recurso é novo e não foi ainda exaustivamente "
+"testado. Saiba que você pode perder todos os seus dados se você armazená-los "
+"criptografados e não puder decriptografá-los depois! Se não tiver certeza, "
+"responda <b>Não</b>."
+
+#: views/kmymoneyview.cpp:1008
+msgid "Store GPG encrypted"
+msgstr "Armazenar criptografado pelo GPG"
+
+#: views/kmymoneyview.cpp:1038 views/kmymoneyview.cpp:1052
+msgid "Unable to open file '%1' for writing."
+msgstr "Incapaz de abrir arquivo '%1' para escrita."
+
+#: views/kmymoneyview.cpp:1065 views/kmymoneyview.cpp:1074
+msgid "Failure while writing to '%1'"
+msgstr "Falha escrevendo em '%1'"
+
+#: views/kmymoneyview.cpp:1086 views/kmymoneyview.cpp:1181
+msgid "Tried to access a file when it's not open"
+msgstr "Tentou acessar um arquivo enquanto o mesmo não estava aberto"
+
+#: views/kmymoneyview.cpp:1092
+msgid ""
+"Since this version of KMyMoney only writes data files in its new format, "
+"files written with this version cannot be read by KMyMoney version 0.4. If "
+"you still want to use older versions of KMyMoney with your data files, "
+"please make sure you keep a backup-file of your finance data. If you want to "
+"abort this operation, please press Cancel now"
+msgstr ""
+"A partir desta versão do KMyMoney os arquivos de dados serão salvos somente "
+"em seu novo formato. Arquivos criados neste novo formato não podem ser lidos "
+"pelo versão 0.4 do KMyMoney. Se você ainda deseja usar versões antigas do "
+"KMyMoney com seus arquivos de dados, por favor, certifique-se de manter uma "
+"cópia de segurança de seus dados financeiros. Se você deseja cancelar esta "
+"operação, por favor pressione 'Cancelar' agora"
+
+#: views/kmymoneyview.cpp:1122
+msgid "Malformed URL '%1'"
+msgstr "URL mal formada '%1'"
+
+#: views/kmymoneyview.cpp:1192
+msgid ""
+"Database contains data which must be removed before using SaveAs.\n"
+"Do you wish to continue?"
+msgstr ""
+"O Banco de Dados contém dados que devem ser removidos antes de se usar o "
+"'Salvar Como'.\n"
+"Você deseja continuar?"
+
+#: views/kmymoneyview.cpp:1205
+msgid ""
+"An unrecoverable error occurred while writing to the database.\n"
+"It may well be corrupt."
+msgstr ""
+"Um erro irrecuperável ocorreu ao salvar o banco de dados.\n"
+"Ele poderá estar corrompido."
+
+#: views/kmymoneyview.cpp:1215
+msgid ""
+"Can't open or create database %1\n"
+"Retry SaveAsDatabase and click Help for further info"
+msgstr ""
+"Não foi possível abrir ou criar o banco de dados %1\n"
+"Tente novamente o 'Salvar Como Banco de Dados' e clique em 'Ajuda' para mais "
+"informações"
+
+#: views/kmymoneyview.cpp:1354
+msgid "Afghanistan Afghani"
+msgstr "Afeganistão (Afegani)"
+
+#: views/kmymoneyview.cpp:1355
+msgid "Albanian Lek"
+msgstr "Albânia (Lek)"
+
+#: views/kmymoneyview.cpp:1356
+msgid "Netherland Antillian Guilder"
+msgstr "Antilhas Holandesas (Florim)"
+
+#: views/kmymoneyview.cpp:1357
+msgid "Algerian Dinar"
+msgstr "Argélia (Dinar Algeriano)"
+
+#: views/kmymoneyview.cpp:1358
+msgid "Andorran Franc"
+msgstr "Andorra (Franco Francês)"
+
+#: views/kmymoneyview.cpp:1359
+msgid "Andorran Peseta"
+msgstr "Andorra (Peseta Espanhola)"
+
+#: views/kmymoneyview.cpp:1360
+msgid "Angolan New Kwanza"
+msgstr "Angola (Kuanza Novo)"
+
+#: views/kmymoneyview.cpp:1361
+msgid "Argentine Peso"
+msgstr "Argentina (Peso)"
+
+#: views/kmymoneyview.cpp:1362
+msgid "Aruban Florin"
+msgstr "Aruba (Florim de Aruba)"
+
+#: views/kmymoneyview.cpp:1363
+msgid "Australian Dollar"
+msgstr "Austrália (Dólar Australiano)"
+
+#: views/kmymoneyview.cpp:1364
+msgid "Azerbaijani Manat"
+msgstr "Azerbaidjão (Manat Azerbaidjano)"
+
+#: views/kmymoneyview.cpp:1365
+msgid "Bahamian Dollar"
+msgstr "Bahamas (Dólar das Bahamas)"
+
+#: views/kmymoneyview.cpp:1366
+msgid "Bahraini Dinar"
+msgstr "Barein (Dinar de Barein)"
+
+#: views/kmymoneyview.cpp:1367
+msgid "Bangladeshi Taka"
+msgstr "Bangladesh (Taka)"
+
+#: views/kmymoneyview.cpp:1368
+msgid "Barbados Dollar"
+msgstr "Barbados (Dólar de Barbados)"
+
+#: views/kmymoneyview.cpp:1369
+msgid "Belarussian Ruble"
+msgstr "Bielorrússia (Rublo Bielorrusso)"
+
+#: views/kmymoneyview.cpp:1370
+msgid "Belize Dollar"
+msgstr "Belize (Dólar de Belize)"
+
+#: views/kmymoneyview.cpp:1371
+msgid "Bermudian Dollar"
+msgstr "Bermudas (Dólar de Bermudas)"
+
+#: views/kmymoneyview.cpp:1372
+msgid "Bhutan Ngultrum"
+msgstr "Butão (Ngultrum)"
+
+#: views/kmymoneyview.cpp:1373
+msgid "Bolivian Boliviano"
+msgstr "Bolívia (Boliviano)"
+
+#: views/kmymoneyview.cpp:1374
+msgid "Bosnian Convertible Mark"
+msgstr "Bósnia (Marco Conversível)"
+
+#: views/kmymoneyview.cpp:1375
+msgid "Botswana Pula"
+msgstr "Botsuana (Pula)"
+
+#: views/kmymoneyview.cpp:1376
+msgid "Brazilian Real"
+msgstr "Brasil (Real)"
+
+#: views/kmymoneyview.cpp:1377
+msgid "British Pound"
+msgstr "Inglaterra (Libra)"
+
+#: views/kmymoneyview.cpp:1378
+msgid "Brunei Dollar"
+msgstr "Brunei (Dólar do Brunei)"
+
+#: views/kmymoneyview.cpp:1379
+msgid "Bulgarian Lev"
+msgstr "Bulgária (Lev)"
+
+#: views/kmymoneyview.cpp:1380
+msgid "Burundi Franc"
+msgstr "Burundi (Franco do Burundi)"
+
+#: views/kmymoneyview.cpp:1381
+msgid "CFA Franc BEAC"
+msgstr "BEAC - Banco dos Estados da África Central (Franco CFA)"
+
+#: views/kmymoneyview.cpp:1382
+msgid "CFA Franc BCEAO"
+msgstr "BCEAO - Banco Central dos Estados da África Oriental (Franco CFA)"
+
+#: views/kmymoneyview.cpp:1383
+msgid "CFP Franc Pacifique"
+msgstr "Franco CFP do Pacífico"
+
+#: views/kmymoneyview.cpp:1384
+msgid "Cambodia Riel"
+msgstr "Camboja (Riel)"
+
+#: views/kmymoneyview.cpp:1385
+msgid "Canadian Dollar"
+msgstr "Canadá (Dólar Canadense)"
+
+#: views/kmymoneyview.cpp:1386
+msgid "Cape Verde Escudo"
+msgstr "Cabo Verde (Escudo do Cabo Verde)"
+
+#: views/kmymoneyview.cpp:1387
+msgid "Cayman Islands Dollar"
+msgstr "Ilhas Cayman (Dólar das Ilhas Cayman)"
+
+#: views/kmymoneyview.cpp:1388
+msgid "Chilean Peso"
+msgstr "Chile (Peso Chileno)"
+
+#: views/kmymoneyview.cpp:1389
+msgid "Chinese Yuan Renminbi"
+msgstr "China (Yuan)"
+
+#: views/kmymoneyview.cpp:1390
+msgid "Colombian Peso"
+msgstr "Colômbia (Peso Colombiano)"
+
+#: views/kmymoneyview.cpp:1391
+msgid "Comoros Franc"
+msgstr "Camarões (Franco de Camarões)"
+
+#: views/kmymoneyview.cpp:1392
+msgid "Costa Rican Colon"
+msgstr "Costa Rica (Colón da Costa Rica)"
+
+#: views/kmymoneyview.cpp:1393
+msgid "Croatian Kuna"
+msgstr "Croácia (Kuna)"
+
+#: views/kmymoneyview.cpp:1394
+msgid "Cuban Peso"
+msgstr "Cuba (Peso Cubano)"
+
+#: views/kmymoneyview.cpp:1395
+msgid "Czech Koruna"
+msgstr "República Tcheca (Corada Tcheca)"
+
+#: views/kmymoneyview.cpp:1396
+msgid "Danish Krone"
+msgstr "Dinamarca (Coroa Dinamarquesa)"
+
+#: views/kmymoneyview.cpp:1397
+msgid "Djibouti Franc"
+msgstr "Djibuti (Franco do Djibuti)"
+
+#: views/kmymoneyview.cpp:1398
+msgid "Dominican Peso"
+msgstr "República Dominicana (Peso Dominicano)"
+
+#: views/kmymoneyview.cpp:1399
+msgid "East Caribbean Dollar"
+msgstr "Caribe do Leste (Dólar do Caribe do Leste)"
+
+#: views/kmymoneyview.cpp:1400
+msgid "Egyptian Pound"
+msgstr "Egito (Libra Egípcia)"
+
+#: views/kmymoneyview.cpp:1401
+msgid "El Salvador Colon"
+msgstr "El Salvador (Colón Salvadorenho)"
+
+#: views/kmymoneyview.cpp:1402
+msgid "Eritrean Nakfa"
+msgstr "Eritréia (Nafka)"
+
+#: views/kmymoneyview.cpp:1403
+msgid "Estonian Kroon"
+msgstr "Estônia (Coroa Estoniana)"
+
+#: views/kmymoneyview.cpp:1404
+msgid "Ethiopian Birr"
+msgstr "Etiópia (Birr)"
+
+#: views/kmymoneyview.cpp:1405
+msgid "Euro"
+msgstr "Europa (Euro)"
+
+#: views/kmymoneyview.cpp:1406
+msgid "Falkland Islands Pound"
+msgstr "Ilhas Falkland (Libra)"
+
+#: views/kmymoneyview.cpp:1407
+msgid "Fiji Dollar"
+msgstr "Fiji (Dólar de Fiji)"
+
+#: views/kmymoneyview.cpp:1408
+msgid "Gambian Dalasi"
+msgstr "Gâmbia (Dalasi)"
+
+#: views/kmymoneyview.cpp:1409
+msgid "Georgian Lari"
+msgstr "Geórgia (Lari)"
+
+#: views/kmymoneyview.cpp:1410
+msgid "Ghanaian Cedi"
+msgstr "Gana (Cedi)"
+
+#: views/kmymoneyview.cpp:1411
+msgid "Gibraltar Pound"
+msgstr "Gibraltar (Libra de Gibraltar)"
+
+#: views/kmymoneyview.cpp:1412
+msgid "Guatemalan Quetzal"
+msgstr "Guatemala (Quetzal)"
+
+#: views/kmymoneyview.cpp:1413
+msgid "Guinea-Bissau Peso"
+msgstr "Guiné-Bissau (Peso de Guiné-Bissau)"
+
+#: views/kmymoneyview.cpp:1414
+msgid "Guyanan Dollar"
+msgstr "Guiana (Dólar Guianense)"
+
+#: views/kmymoneyview.cpp:1415
+msgid "Haitian Gourde"
+msgstr "Haiti (Gourde)"
+
+#: views/kmymoneyview.cpp:1416
+msgid "Honduran Lempira"
+msgstr "Honduras (Lempira)"
+
+#: views/kmymoneyview.cpp:1417
+msgid "Hong Kong Dollar"
+msgstr "Hong Kong (Dólar de Hong Kong)"
+
+#: views/kmymoneyview.cpp:1418
+msgid "Hungarian Forint"
+msgstr "Hungria (Forint)"
+
+#: views/kmymoneyview.cpp:1419
+msgid "Iceland Krona"
+msgstr "Islândia (Coroa Islandesa)"
+
+#: views/kmymoneyview.cpp:1420
+msgid "Indian Rupee"
+msgstr "Índia (Rúpia Indiana)"
+
+#: views/kmymoneyview.cpp:1421
+msgid "Indonesian Rupiah"
+msgstr "Indonésia (Rúpia da Indonésia)"
+
+#: views/kmymoneyview.cpp:1422
+msgid "Iranian Rial"
+msgstr "Irã (Rial Iraniano)"
+
+#: views/kmymoneyview.cpp:1423
+msgid "Iraqi Dinar"
+msgstr "Iraque (Dinar Iraquiano)"
+
+#: views/kmymoneyview.cpp:1424
+msgid "Israeli New Shekel"
+msgstr "Israel (Shekel Novo)"
+
+#: views/kmymoneyview.cpp:1425
+msgid "Jamaican Dollar"
+msgstr "Jamaica (Dólar Jamaicano)"
+
+#: views/kmymoneyview.cpp:1426
+msgid "Japanese Yen"
+msgstr "Japão (Iene)"
+
+#: views/kmymoneyview.cpp:1427
+msgid "Jordanian Dinar"
+msgstr "Jordânia (Dinar Jordaniano)"
+
+#: views/kmymoneyview.cpp:1428
+msgid "Kazakhstan Tenge"
+msgstr "Cazaquistão (Tenge)"
+
+#: views/kmymoneyview.cpp:1429
+msgid "Kenyan Shilling"
+msgstr "Quênia (Xelim Queniano)"
+
+#: views/kmymoneyview.cpp:1430
+msgid "Kuwaiti Dinar"
+msgstr "Kuwait (Dinar Kuwaitiano)"
+
+#: views/kmymoneyview.cpp:1431
+msgid "Kyrgyzstan Som"
+msgstr "Quirguistão (Som)"
+
+#: views/kmymoneyview.cpp:1432
+msgid "Laos Kip"
+msgstr "Laos (Quipe)"
+
+#: views/kmymoneyview.cpp:1433
+msgid "Latvian Lats"
+msgstr "Letônia (Lats)"
+
+#: views/kmymoneyview.cpp:1434
+msgid "Lebanese Pound"
+msgstr "Líbano (Libra Libanesa)"
+
+#: views/kmymoneyview.cpp:1435
+msgid "Lesotho Loti"
+msgstr "Lesoto (Loti)"
+
+#: views/kmymoneyview.cpp:1436
+msgid "Liberian Dollar"
+msgstr "Libéria (Dólar Liberiano)"
+
+#: views/kmymoneyview.cpp:1437
+msgid "Libyan Dinar"
+msgstr "Líbia (Dinar Líbio)"
+
+#: views/kmymoneyview.cpp:1438
+msgid "Lithuanian Litas"
+msgstr "Lituânia (Litas)"
+
+#: views/kmymoneyview.cpp:1439
+msgid "Macau Pataca"
+msgstr "Macau (Pataca)"
+
+#: views/kmymoneyview.cpp:1440
+msgid "Macedonian Denar"
+msgstr "Macedônia (Dinar Macedônio)"
+
+#: views/kmymoneyview.cpp:1441
+msgid "Malagasy Franc"
+msgstr "Madagascar (Franco Malagaxe)"
+
+#: views/kmymoneyview.cpp:1442
+msgid "Malawi Kwacha"
+msgstr "Malauí (Quacha Malauiana)"
+
+#: views/kmymoneyview.cpp:1443
+msgid "Malaysian Ringgit"
+msgstr "Malásia (Ringgit malaio)"
+
+#: views/kmymoneyview.cpp:1444
+msgid "Maldive Rufiyaa"
+msgstr "Maldivas (Rúfia)"
+
+#: views/kmymoneyview.cpp:1445
+msgid "Mali Republic Franc"
+msgstr "Mali (Franco CFA)"
+
+#: views/kmymoneyview.cpp:1446
+msgid "Mauritanian Ouguiya"
+msgstr "Mauritânia (Ouguiya)"
+
+#: views/kmymoneyview.cpp:1447
+msgid "Mauritius Rupee"
+msgstr "Maurício (Rúpia de Maurício)"
+
+#: views/kmymoneyview.cpp:1448
+msgid "Mexican Peso"
+msgstr "México (Peso Mexicano)"
+
+#: views/kmymoneyview.cpp:1449
+msgid "Moldavian Leu"
+msgstr "Moldávia (Moldavian Leu)"
+
+#: views/kmymoneyview.cpp:1450
+msgid "Mongolian Tugrik"
+msgstr "Mongólia (Tugrik)"
+
+#: views/kmymoneyview.cpp:1451
+msgid "Moroccan Dirham"
+msgstr "Marrocos (Dirrã Marroquino)"
+
+#: views/kmymoneyview.cpp:1452
+msgid "Mozambique Metical"
+msgstr "Moçambique (Metical)"
+
+#: views/kmymoneyview.cpp:1453
+msgid "Myanmar Kyat"
+msgstr "Mianmar (Kiat)"
+
+#: views/kmymoneyview.cpp:1454
+msgid "Namibian Dollar"
+msgstr "Namíbia (Dólar Namibiano)"
+
+#: views/kmymoneyview.cpp:1455
+msgid "Nepalese Rupee"
+msgstr "Nepal (Rúpia Nepalesa)"
+
+#: views/kmymoneyview.cpp:1456
+msgid "New Zealand Dollar"
+msgstr "Nova Zelândia (Dólar da Nova Zelândia)"
+
+#: views/kmymoneyview.cpp:1457
+msgid "Nicaraguan Cordoba Oro"
+msgstr "Nicarágua (Córdoba Ouro)"
+
+#: views/kmymoneyview.cpp:1458
+msgid "Nigerian Naira"
+msgstr "Nigéria (Naira)"
+
+#: views/kmymoneyview.cpp:1459
+msgid "North Korean Won"
+msgstr "Coréia do Norte (Won Norte-Coreano)"
+
+#: views/kmymoneyview.cpp:1460
+msgid "Norwegian Kroner"
+msgstr "Noruega (Coroa Norueguesa)"
+
+#: views/kmymoneyview.cpp:1461
+msgid "Omani Rial"
+msgstr "Omã (Rial Omani)"
+
+#: views/kmymoneyview.cpp:1462
+msgid "Pakistan Rupee"
+msgstr "Paquistão (Rúpia Paquistanesa)"
+
+#: views/kmymoneyview.cpp:1463
+msgid "Panamanian Balboa"
+msgstr "Panamá (Balboa)"
+
+#: views/kmymoneyview.cpp:1464
+msgid "Papua New Guinea Kina"
+msgstr "Papua Nova Guiné (Kina)"
+
+#: views/kmymoneyview.cpp:1465
+msgid "Paraguay Guarani"
+msgstr "Paraguai (Guarani)"
+
+#: views/kmymoneyview.cpp:1466
+msgid "Peruvian Nuevo Sol"
+msgstr "Peru (Sol Novo)"
+
+#: views/kmymoneyview.cpp:1467
+msgid "Philippine Peso"
+msgstr "Filipinas (Peso Filipino)"
+
+#: views/kmymoneyview.cpp:1468
+msgid "Polish Zloty"
+msgstr "Polônia (Zloty)"
+
+#: views/kmymoneyview.cpp:1469
+msgid "Qatari Rial"
+msgstr "Qatar (Rial de Qatar)"
+
+#: views/kmymoneyview.cpp:1470
+msgid "Romanian Leu (new)"
+msgstr "Romênia (Leu Romeno)"
+
+#: views/kmymoneyview.cpp:1471
+msgid "Russian Ruble"
+msgstr "Federação Russa (Rublo)"
+
+#: views/kmymoneyview.cpp:1472
+msgid "Rwanda Franc"
+msgstr "Ruanda (Franco da Ruanda)"
+
+#: views/kmymoneyview.cpp:1473
+msgid "Samoan Tala"
+msgstr "Samoa (Tala)"
+
+#: views/kmymoneyview.cpp:1474
+msgid "Sao Tome and Principe Dobra"
+msgstr "São Tomé e Príncipe (Dobra)"
+
+#: views/kmymoneyview.cpp:1475
+msgid "Saudi Riyal"
+msgstr "Arábia Saudita (Rial Saudita)"
+
+#: views/kmymoneyview.cpp:1476
+msgid "Seychelles Rupee"
+msgstr "Seicheles (Rúpia de Seicheles)"
+
+#: views/kmymoneyview.cpp:1477
+msgid "Sierra Leone Leone"
+msgstr "Serra Leoa (Leone)"
+
+#: views/kmymoneyview.cpp:1478
+msgid "Singapore Dollar"
+msgstr "Singapura (Dólar de Singapura)"
+
+#: views/kmymoneyview.cpp:1481
+msgid "Solomon Islands Dollar"
+msgstr "Ilhas Salomão (Dólar das Ilhas Salomão)"
+
+#: views/kmymoneyview.cpp:1482
+msgid "Somali Shilling"
+msgstr "Somália (Xelim Somaliano)"
+
+#: views/kmymoneyview.cpp:1483
+msgid "South African Rand"
+msgstr "África do Sul (Rand)"
+
+#: views/kmymoneyview.cpp:1484
+msgid "South Korean Won"
+msgstr "Coréia do Sul (Won Sul-Coreano)"
+
+#: views/kmymoneyview.cpp:1485
+msgid "Sri Lanka Rupee"
+msgstr "Sri Lanka (Rúpia Cingalesa)"
+
+#: views/kmymoneyview.cpp:1486
+msgid "St. Helena Pound"
+msgstr "Santa Helena (Libra de Santa Helena)"
+
+#: views/kmymoneyview.cpp:1487
+msgid "Sudanese Dinar"
+msgstr "Sudão (Dinar Sudanês)"
+
+#: views/kmymoneyview.cpp:1488
+msgid "Suriname Guilder"
+msgstr "Suriname (Florim do Suriname)"
+
+#: views/kmymoneyview.cpp:1489
+msgid "Swaziland Lilangeni"
+msgstr "Suazilândia (Lilangeni)"
+
+#: views/kmymoneyview.cpp:1490
+msgid "Swedish Krona"
+msgstr "Suécia (Coroa Sueca)"
+
+#: views/kmymoneyview.cpp:1491
+msgid "Swiss Franc"
+msgstr "Suíça (Franco Suíço)"
+
+#: views/kmymoneyview.cpp:1492
+msgid "Syrian Pound"
+msgstr "Síria (Libra Síria)"
+
+#: views/kmymoneyview.cpp:1493
+msgid "Taiwan Dollar"
+msgstr "Taiwan (Dólar de Taiwan)"
+
+#: views/kmymoneyview.cpp:1494
+msgid "Tajikistan Somani"
+msgstr "Tadjiquistão (Somoni)"
+
+#: views/kmymoneyview.cpp:1495
+msgid "Tanzanian Shilling"
+msgstr "Tanzânia (Xelim Tanzaniano)"
+
+#: views/kmymoneyview.cpp:1496
+msgid "Thai Baht"
+msgstr "Tailândia (Baht)"
+
+#: views/kmymoneyview.cpp:1497
+msgid "Tongan Pa'anga"
+msgstr "Tonga (Pa'anga)"
+
+#: views/kmymoneyview.cpp:1498
+msgid "Trinidad and Tobago Dollar"
+msgstr "Trinidad e Tobago (Dólar de Trinidad e Tobago)"
+
+#: views/kmymoneyview.cpp:1499
+msgid "Tunisian Dinar"
+msgstr "Tunísia (Dinar Tunisiano)"
+
+#: views/kmymoneyview.cpp:1500
+msgid "Turkish Lira (new)"
+msgstr "Turquia (Lira Turca Nova)"
+
+#: views/kmymoneyview.cpp:1501
+msgid "Turkmenistan Manat"
+msgstr "Turcomenistão (Manat Turcomano)"
+
+#: views/kmymoneyview.cpp:1502
+msgid "US Dollar"
+msgstr "Estados Unidos (Dólar)"
+
+#: views/kmymoneyview.cpp:1503
+msgid "Uganda Shilling"
+msgstr "Uganda (Xelim Ugandense)"
+
+#: views/kmymoneyview.cpp:1504
+msgid "Ukraine Hryvnia"
+msgstr "Ucrânia (Hryvnia)"
+
+#: views/kmymoneyview.cpp:1505
+msgid "United Arab Emirates Dirham"
+msgstr "Emirados Árabes Unidos (Dirrã)"
+
+#: views/kmymoneyview.cpp:1506
+msgid "Uruguayan Peso"
+msgstr "Uruguai (Peso Uruguaio)"
+
+#: views/kmymoneyview.cpp:1507
+msgid "Uzbekistani Sum"
+msgstr "Uzbequistão (Sum)"
+
+#: views/kmymoneyview.cpp:1508
+msgid "Vanuatu Vatu"
+msgstr "Vanuatu (Vatu)"
+
+#: views/kmymoneyview.cpp:1509
+msgid "Venezuelan Bolivar"
+msgstr "Venezuela (Bolívar)"
+
+#: views/kmymoneyview.cpp:1510
+msgid "Vietnamese Dong"
+msgstr "Vietnã (Dongue)"
+
+#: views/kmymoneyview.cpp:1511
+msgid "Yugoslav Dinar"
+msgstr "Iugoslávia (Dinar Iugoslavo)"
+
+#: views/kmymoneyview.cpp:1512
+msgid "Zambian Kwacha"
+msgstr "Zâmbia (Quacha Zambiana)"
+
+#: views/kmymoneyview.cpp:1513
+msgid "Zimbabwe Dollar"
+msgstr "Zimbábue (Dólar Zimbabuano)"
+
+#: views/kmymoneyview.cpp:1515
+msgid "Gold"
+msgstr "Ouro"
+
+#: views/kmymoneyview.cpp:1516
+msgid "Palladium"
+msgstr "Paládio"
+
+#: views/kmymoneyview.cpp:1517
+msgid "Platinum"
+msgstr "Platina"
+
+#: views/kmymoneyview.cpp:1518
+msgid "Silver"
+msgstr "Prata"
+
+#: views/kmymoneyview.cpp:1551
+msgid "Austrian Schilling"
+msgstr "Áustria (Xelim Austríaco)"
+
+#: views/kmymoneyview.cpp:1552
+msgid "German Mark"
+msgstr "Alemanha (Marco Alemão)"
+
+#: views/kmymoneyview.cpp:1553
+msgid "French Franc"
+msgstr "França (Franco Francês)"
+
+#: views/kmymoneyview.cpp:1554
+msgid "Italian Lira"
+msgstr "Itália (Lira Italiana)"
+
+#: views/kmymoneyview.cpp:1555
+msgid "Spanish Peseta"
+msgstr "Espanha (Peseta)"
+
+#: views/kmymoneyview.cpp:1556
+msgid "Dutch Guilder"
+msgstr "Holanda (Florim)"
+
+#: views/kmymoneyview.cpp:1557
+msgid "Belgian Franc"
+msgstr "Bélgica (Franco Belga)"
+
+#: views/kmymoneyview.cpp:1558
+msgid "Luxembourg Franc"
+msgstr "Luxemburgo (Franco Luxemburguês)"
+
+#: views/kmymoneyview.cpp:1559
+msgid "Portuguese Escudo"
+msgstr "Portugal (Escudo Português)"
+
+#: views/kmymoneyview.cpp:1560
+msgid "Irish Pound"
+msgstr "Irlanda (Libra Irlandesa)"
+
+#: views/kmymoneyview.cpp:1561
+msgid "Finnish Markka"
+msgstr "Finlândia (Marco Finlandês)"
+
+#: views/kmymoneyview.cpp:1562
+msgid "Greek Drachma"
+msgstr "Grécia (Dacma)"
+
+#: views/kmymoneyview.cpp:1564
+msgid "Romanian Leu"
+msgstr "Romênia (Leu Romeno)"
+
+#: views/kmymoneyview.cpp:1566
+msgid "Russian Ruble (old)"
+msgstr "Rússia (Rublo - Antigo)"
+
+#: views/kmymoneyview.cpp:1568
+msgid "Slovenian Tolar"
+msgstr "Eslovênia (Tolar)"
+
+#: views/kmymoneyview.cpp:1571
+msgid "Turkish Lira"
+msgstr "Turquia (Lira Turca)"
+
+#: views/kmymoneyview.cpp:1574
+msgid "Maltese Lira"
+msgstr "Malta (Lira Maltesa)"
+
+#: views/kmymoneyview.cpp:1575
+msgid "Cyprus Pound"
+msgstr "Chipre (Libra Cipriota)"
+
+#: views/kmymoneyview.cpp:1578
+msgid "Slovak Koruna"
+msgstr "Eslováquia (Coroa Eslovaca)"
+
+#: views/kmymoneyview.cpp:1888
+msgid ""
+"The account \"%1\" was previously created as loan account but some "
+"information is missing. The new loan wizard will be started to collect all "
+"relevant information. Please use a KMyMoney version >= 0.8.7 and < 0.9 to "
+"correct the problem."
+msgstr ""
+"A conta \"%1\" foi previamente criada como uma conta de empréstimo, mas "
+"algumas informações estão faltando. O assistente de novo empréstimo será "
+"iniciado para coletar todas as informações relevantes. Por favor, use o "
+"KMyMoney de versão >= 0.8.7 e < 0.9 para corrigir o problema."
+
+#: views/kmymoneyview.cpp:1892
+msgid "Account problem"
+msgstr "Problema na conta"
+
+#: views/kmymoneyview.cpp:1941
+msgid "Unable to add schedule: "
+msgstr "Incapaz de adicionar agendamento"
+
+#: views/kmymoneyview.cpp:1970
+msgid "Fix transactions"
+msgstr "Corrigir transações"
+
+#: views/kaccountsview.cpp:522 views/kinstitutionsview.cpp:300
+msgid "Net Worth: "
+msgstr "Valor Líquido: "
+
+#: dialogs/rc.cpp:108 dialogs/rc.cpp:163 dialogs/rc.cpp:250 dialogs/rc.cpp:755
+#: dialogs/rc.cpp:830 views/kinvestmentview.cpp:77 widgets/register.cpp:572
+msgid "Quantity"
+msgstr "Quantidade"
+
+#: views/kscheduledlistitem.cpp:137
+msgid "Finished"
+msgstr "Finalizado"
+
+#: views/kbudgetview.cpp:109
+msgid "Creates a new budget"
+msgstr "Criar um novo orçamento"
+
+#: views/kbudgetview.cpp:110
+msgid "Use this to create a new empty budget."
+msgstr "Use isto para criar um novo orçamento vazio."
+
+#: views/kbudgetview.cpp:116
+msgid "Rename the current selected budget"
+msgstr "Renomear o orçamento atualmente selecionado"
+
+#: views/kbudgetview.cpp:117
+msgid "Use this to start renaming the selected budget."
+msgstr "Use isto para renomear o orçamento selecionado."
+
+#: views/kbudgetview.cpp:123
+msgid "Delete the current selected budget"
+msgstr "Remover o orçamento atualmente selecionado"
+
+#: views/kbudgetview.cpp:124
+msgid "Use this to delete the selected budget."
+msgstr "Use isto para remover o orçamento selecionado."
+
+#: views/kbudgetview.cpp:130
+msgid "Accepts the entered values and stores the budget"
+msgstr "Aceitar os valores inseridos e armazenar o orçamento"
+
+#: views/kbudgetview.cpp:131
+msgid "Use this to store the modified data."
+msgstr "Use isto para armazenar os dados modificados."
+
+#: views/kbudgetview.cpp:137
+msgid "Revert budget to last saved state"
+msgstr "Reverter o orçamento para o último salvo"
+
+#: views/kbudgetview.cpp:138
+msgid "Use this to discard the modified data."
+msgstr "Use isto para descartar os dados modificados."
+
+#: views/kbudgetview.cpp:489
+msgid "Do you want to save the changes for <b>%1</b>"
+msgstr "Você deseja salvar as modificações para <b>%1</b>"
+
+#: views/kbudgetview.cpp:610
+msgid ""
+"A budget with the name '%1' already exists. It is not advisable to have "
+"multiple budgets with the same identification name. Are you sure you would "
+"like to rename the budget?"
+msgstr ""
+"Um orçamento com o nome '%1' já existe. Não é aconselhável possuir vários "
+"orçamentos com o mesmo nome de identificação. Você tem certeza que deseja "
+"renomear o orçamento?"
+
+#: views/kbudgetview.cpp:635 views/kbudgetview.cpp:750
+msgid "Unable to modify budget"
+msgstr "Não foi possível modificar o orçamento"
+
+#: views/kbudgetview.cpp:736
+msgid "Unable to reset budget"
+msgstr "Não foi possível reiniciar o orçamento"
+
+#: views/rc.cpp:1
+msgid "List"
+msgstr "Lista"
+
+#: views/rc.cpp:2 views/rc.cpp:20
+msgid "Collapse all accounts in the list"
+msgstr "Recolher todas as contas na lista"
+
+#: views/rc.cpp:3 views/rc.cpp:21
+msgid "Expand all accounts in the list"
+msgstr "Expandir todas as contas na lista"
+
+#: views/rc.cpp:4
+msgid "Icons"
+msgstr "Ícones"
+
+#: views/rc.cpp:5 views/rc.cpp:22
+msgid "Note: Unused categories are not shown as selected by settings."
+msgstr ""
+"Nota: Categorias não usadas não são mostradas como selecionadas pelas "
+"configurações."
+
+#: views/rc.cpp:6 views/rc.cpp:23 views/rc.cpp:54
+msgid "Total Profits:"
+msgstr "Total de Rendimentos:"
+
+#: views/rc.cpp:7
+msgid "Your budgets"
+msgstr "Seus orçamentos"
+
+#: dialogs/rc.cpp:340 dialogs/rc.cpp:841 dialogs/settings/rc.cpp:124
+#: views/rc.cpp:8 widgets/rc.cpp:48 widgets/rc.cpp:150
+msgid "New"
+msgstr "Novo"
+
+#: views/rc.cpp:9
+msgid "Ren"
+msgstr "Ren"
+
+#: views/rc.cpp:10
+msgid "Del"
+msgstr "Remover"
+
+#: views/rc.cpp:11
+msgid "Res"
+msgstr "Reiniciar"
+
+#: views/rc.cpp:12
+msgid "Upd"
+msgstr "Atualizar"
+
+#: views/rc.cpp:15
+msgid "Hide unused budget categories"
+msgstr "Ocultar as categorias de orçamento não utilizadas"
+
+#: views/rc.cpp:16
+msgid "Assignments"
+msgstr "Atribuições"
+
+#: views/rc.cpp:19
+msgid "Include subaccounts"
+msgstr "Incluir sub-contas"
+
+#: dialogs/settings/rc.cpp:23 views/rc.cpp:24
+msgid "Forecast Settings"
+msgstr "Configurações da Previsão"
+
+#: views/rc.cpp:25
+msgid "Days to Forecast:"
+msgstr "Dias a Prever:"
+
+#: views/rc.cpp:26
+msgid "Days of Accounts Cycle:"
+msgstr "Dias do Ciclo das Contas:"
+
+#: dialogs/settings/rc.cpp:25 views/rc.cpp:27
+msgid "Day of Month to start Forecast:"
+msgstr "Dia do Mês onde começar a Previsão:"
+
+#: views/rc.cpp:28
+msgid "Historic Cycles:"
+msgstr "Ciclos Históricos:"
+
+#: views/rc.cpp:29
+msgid "Chart Detail:"
+msgstr "Detalhe do Gráfico:"
+
+#: views/rc.cpp:30 widgets/kmymoneyaccountselector.cpp:64 widgets/rc.cpp:65
+msgid "All"
+msgstr "Todos"
+
+#: views/rc.cpp:31 widgets/rc.cpp:66
+msgid "Top-Level"
+msgstr "Nível de Topo"
+
+#: views/rc.cpp:32 widgets/rc.cpp:67
+msgid "Groups"
+msgstr "Grupos"
+
+#: views/rc.cpp:33 widgets/rc.cpp:68
+msgid "Totals"
+msgstr "Totais"
+
+#: views/rc.cpp:34
+msgid "<p>Choose what level of detail to show on the chart.</p>"
+msgstr "<p>Selecione que nível de detalhes exibir neste gráfico.</p>"
+
+#: views/rc.cpp:35
+msgid "Current Forecast Method:"
+msgstr "Método Atual de Previsão:"
+
+#: views/rc.cpp:36
+msgid "method"
+msgstr "método"
+
+#: dialogs/settings/rc.cpp:32 views/rc.cpp:37
+msgid "History Forecast Method"
+msgstr "Método de Previsão no Histórico"
+
+#: dialogs/settings/rc.cpp:33 views/rc.cpp:38
+msgid "Simple Moving Average"
+msgstr "Média Simples das Movimentações"
+
+#: dialogs/settings/rc.cpp:34 views/rc.cpp:39
+msgid "Weighted Moving Average"
+msgstr "Média Ponderada das Movimentações"
+
+#: dialogs/settings/rc.cpp:35 views/rc.cpp:40
+msgid "Linear Regression"
+msgstr "Regressão Linear"
+
+#: dialogs/keditloanwizard.cpp:315 dialogs/rc.cpp:628 dialogs/rc.cpp:647
+#: views/rc.cpp:43
+msgid "Summary"
+msgstr "Resumo"
+
+#: views/rc.cpp:45
+msgid "0 days"
+msgstr "0 dias"
+
+#: views/rc.cpp:46
+msgid "30 days"
+msgstr "30 dias"
+
+#: views/rc.cpp:47
+msgid "60 days"
+msgstr "60 dias"
+
+#: views/rc.cpp:48
+msgid "90 days"
+msgstr "90 dias"
+
+#: views/rc.cpp:49
+msgid "New Item"
+msgstr "Novo Item"
+
+#: views/rc.cpp:50 widgets/rc.cpp:64
+msgid "Detail"
+msgstr "Detalhe"
+
+#: views/rc.cpp:51
+msgid "Advanced"
+msgstr "Avançado"
+
+#: views/rc.cpp:52
+msgid "Budget Forecast"
+msgstr "Previsão de Orçamento"
+
+#: views/rc.cpp:55
+msgid "Investment Summary"
+msgstr "Resumo do Investimento"
+
+#: views/rc.cpp:56
+msgid "Select Account:"
+msgstr "Selecionar Conta:"
+
+#: views/rc.cpp:57
+msgid ""
+"Summary of the equities contained in this account, showing your holdings and "
+"their most recent price."
+msgstr ""
+"Resumo dos títulos contidos nesta conta, mostrando suas posses e os preços "
+"mais recentes dos títulos."
+
+#: views/rc.cpp:60 widgets/register.cpp:564
+msgid "No."
+msgstr "Nr."
+
+#: views/rc.cpp:64
+msgid "Balance: "
+msgstr "Saldo: "
+
+#: views/rc.cpp:65
+msgid "Address"
+msgstr "Endereço"
+
+#: views/rc.cpp:66
+msgid "Payee Information"
+msgstr "Informações de Beneficiário"
+
+#: views/rc.cpp:67
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#: dialogs/rc.cpp:393 views/rc.cpp:69
+msgid "Telephone/Fax:"
+msgstr "Telefone/Fax:"
+
+#: views/rc.cpp:70
+msgid "Notes"
+msgstr "Notas"
+
+#: views/rc.cpp:71
+msgid "Address:"
+msgstr "Endereço:"
+
+#: views/rc.cpp:72
+msgid "Matching"
+msgstr "Correspondência"
+
+#: views/rc.cpp:73
+msgid "Transaction Matching"
+msgstr "Correspondência de Transação"
+
+#: views/rc.cpp:74
+msgid "No matching"
+msgstr "Sem correspondência"
+
+#: views/rc.cpp:75
+msgid "Match on Payee name"
+msgstr "Corresponder nome de Beneficiário"
+
+#: views/rc.cpp:76
+msgid "Match on a name listed below"
+msgstr "Corresponder a um nome listado abaixo"
+
+#: views/rc.cpp:77
+msgid "List of matching names"
+msgstr "Lista de nomes correspondentes"
+
+#: views/rc.cpp:78
+msgid ""
+"This list contains the names that will match this payee if a transaction is "
+"imported from an external source. Keep in mind, that you can specify regular "
+"expressions here."
+msgstr ""
+"Esta lista contém os nomes que corresponderão a este beneficiário se uma "
+"transação for importada de uma fonte externa. Tenha em mente que vocẽ pode "
+"inserir expressões regulares aqui."
+
+#: views/rc.cpp:79
+msgid "Ignore Case"
+msgstr "Ignorar Capitalização"
+
+#: views/rc.cpp:80
+msgid "Default Account"
+msgstr "Conta Padrão"
+
+#: views/rc.cpp:81
+msgid ""
+"Use the default account for\n"
+"new transactions with this payee"
+msgstr ""
+"Usar a conta padrão para novas\n"
+"transações com este beneficiário"
+
+#: views/rc.cpp:82
+msgid "Default category:"
+msgstr "Categoria padrão:"
+
+#: views/rc.cpp:83
+msgid "Suggest a category"
+msgstr "Sugerir uma categoria"
+
+#: views/rc.cpp:85
+msgid "New Scheduled transaction..."
+msgstr "Nova transação agendada..."
+
+#: views/rc.cpp:86
+msgid "Filter Accounts"
+msgstr "Filtrar Contas"
+
+#: views/rc.cpp:87
+msgid "List View"
+msgstr "Visão de Lista"
+
+#: views/rc.cpp:88
+msgid "Calendar View"
+msgstr "Visão de Calendário"
+
+#: views/kinstitutionsview.cpp:43
+msgid "Institution/Account"
+msgstr "Instituição/Conta"
+
+#: views/kinstitutionsview.cpp:157
+msgid "Accounts with no institution assigned"
+msgstr "Conta sem atribuição de instituição"
+
+#: views/kscheduledview.cpp:70
+msgid "Type/Name"
+msgstr "Tipo/Nome"
+
+#: views/kscheduledview.cpp:75
+msgid "Frequency"
+msgstr "Frequência"
+
+#: views/kscheduledview.cpp:157
+msgid "Unable to load accounts: "
+msgstr "Incapaz de carregar contas: "
+
+#: views/kscheduledview.cpp:171 views/kscheduledview.cpp:429
+#: views/kscheduledview.cpp:445 widgets/kmymoneyscheduledcalendar.cpp:46
+msgid "Bills"
+msgstr "Contas a Pagar"
+
+#: dialogs/rc.cpp:232 dialogs/rc.cpp:706 views/kscheduledview.cpp:172
+#: views/kscheduledview.cpp:431 views/kscheduledview.cpp:447
+#: widgets/kmymoneyscheduledcalendar.cpp:47
+msgid "Deposits"
+msgstr "Depósitos"
+
+#: views/kscheduledview.cpp:173 views/kscheduledview.cpp:435
+#: views/kscheduledview.cpp:451
+msgid "Loans"
+msgstr "Financiamentos"
+
+#: views/kscheduledview.cpp:357
+msgid "Error activating context menu"
+msgstr "Erro ao ativar o menu de contexto"
+
+#: views/kscheduledview.cpp:385
+msgid "Error executing item"
+msgstr "Erro executando item"
+
+#: views/kscheduledview.cpp:419
+msgid "Unable to filter account"
+msgstr "Incapaz de filtrar conta"
+
+#: views/kgloballedgerview.cpp:508
+msgid "Statement Details"
+msgstr "Detalhes do Extrato"
+
+#: views/kgloballedgerview.cpp:512
+msgid "Statement Deposit Details"
+msgstr "Detalhes do Extrato de Depósitos"
+
+#: views/kgloballedgerview.cpp:513
+msgid "Statement Payment Details"
+msgstr "Detalhes do Extrato de Pagamentos"
+
+#: views/kgloballedgerview.cpp:642
+msgid "%1 deposits (%3), %2 payments (%4)"
+msgstr "%1 depósitos (%3), %2 pagamentos (%4)"
+
+#: views/kgloballedgerview.cpp:649
+msgid "%1 payments (%2)"
+msgstr "%1 pagamentos (%2)"
+
+#: views/kgloballedgerview.cpp:653
+msgid "%1 deposits (%2)"
+msgstr "%1 depósitos (%2)"
+
+#: views/kgloballedgerview.cpp:721
+#, c-format
+msgid "Statement: %1"
+msgstr "Extrato: %1"
+
+#: views/kgloballedgerview.cpp:722 views/kgloballedgerview.cpp:736
+#, c-format
+msgid "Cleared: %1"
+msgstr "Compensada: %1"
+
+#: views/kgloballedgerview.cpp:723
+#, c-format
+msgid "Difference: %1"
+msgstr "Diferença: %1"
+
+#: views/kgloballedgerview.cpp:730
+#, c-format
+msgid "Last reconciled: %1"
+msgstr "Último reconcílio: %1"
+
+#: views/kgloballedgerview.cpp:732
+msgid "Never reconciled"
+msgstr "Nunca reconciliada"
+
+#: views/kgloballedgerview.cpp:772
+msgid "Investment value: %1%2"
+msgstr "Valor do investimento: %1%2"
+
+#: views/kgloballedgerview.cpp:1040
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to continue to edit the transactions anyway?"
+msgstr ""
+"Pelos menos uma parcela das transações selecionadas foi reconciliado. Você "
+"ainda deseja continuar e editar as transações?"
+
+#: views/kgloballedgerview.cpp:1051
+msgid ""
+"At least one split of the selected transactions has been frozen. Editing the "
+"transactions is therefore prohibited."
+msgstr ""
+"Pelos menos uma parcela das transações selecionadas foi congelada. A edição "
+"das transações é por isso proibida."
+
+#: views/kgloballedgerview.cpp:1053
+msgid "Transaction already frozen"
+msgstr "Transação já congelada"
+
+#: views/kgloballedgerview.cpp:1058
+msgid ""
+"At least one split of the selected transaction references an account that "
+"has been closed. Editing the transactions is therefore prohibited."
+msgstr ""
+"Pelos menos uma parcela das transações selecionadas refere-se a uma conta "
+"que foi fechada. A edição das transações é por isso proibida."
+
+#: views/kgloballedgerview.cpp:1060
+msgid "Account closed"
+msgstr "Conta fechada"
+
+#: views/kgloballedgerview.cpp:1349
+msgid "Cannot create transactions when no account is selected."
+msgstr "Não é possível criar transacções sem conta selecionada."
+
+#: views/kgloballedgerview.cpp:1354
+msgid "Cannot create transactions in the context of a category."
+msgstr "Não é possível criar transações no contexto de uma categoria."
+
+#: views/kgloballedgerview.cpp:1358
+msgid "Cannot create transactions in a closed account."
+msgstr "Não é possível criar transações em uma conta fechada."
+
+#: views/kgloballedgerview.cpp:1370
+msgid "Cannot process transaction with focus if it is not selected."
+msgstr "Não é possível processar transações com foco se ela não estiver selecionada."
+
+#: views/kgloballedgerview.cpp:1400
+msgid "Cannot edit transactions with frozen splits."
+msgstr "Não é possível editar transações com parcelas congeladas."
+
+#: views/kgloballedgerview.cpp:1411
+msgid "Cannot edit transactions in the context of a category."
+msgstr "Não é possível editar transações no contexto de uma categoria."
+
+#: views/kgloballedgerview.cpp:1430
+msgid "Cannot edit investment transactions and non-investment transactions together."
+msgstr ""
+"Não é possível editar transações de investimento e de não-investimento ao "
+"mesmo tempo."
+
+#: views/kgloballedgerview.cpp:1438
+msgid "Cannot edit multiple split transactions at once."
+msgstr "Não é possível editar parcelas de transações ao mesmo tempo."
+
+#: views/kgloballedgerview.cpp:1448
+msgid "Cannot edit investment transactions in the context of this account."
+msgstr "Não é possível editar transações de investimentos no contexto desta conta."
+
+#: views/kforecastview.cpp:164
+msgid "Scheduled"
+msgstr "Agendado"
+
+#: views/kforecastview.cpp:169
+msgid "History"
+msgstr "Histórico"
+
+#: views/kforecastview.cpp:296
+msgid "The balance of %2 is below the minimum balance %3 today."
+msgstr "Hoje, o saldo de %2 está abaixo do saldo mínimo de %3."
+
+#: views/kforecastview.cpp:301 views/khomeview.cpp:1043
+msgid "The balance of %1 will drop below the minimum balance %2 in %3 days."
+msgstr "O saldo de %1 estará abaixo do saldo mínimo de %2 em %3 dias."
+
+#: views/kforecastview.cpp:318 views/khomeview.cpp:1059
+msgid "The balance of %1 is below %2 today."
+msgstr "Hoje, o saldo de %1 está abaixo de %2."
+
+#: views/kforecastview.cpp:323 views/khomeview.cpp:1064
+msgid "The balance of %1 is above %2 today."
+msgstr "Hoje, o saldo de %1 está acima de %2."
+
+#: views/kforecastview.cpp:330 views/khomeview.cpp:1070
+msgid "The balance of %1 will drop below %2 in %3 days."
+msgstr "O saldo de %1 estará abaixo de %2 em %3 dias."
+
+#: views/kforecastview.cpp:335 views/khomeview.cpp:1075
+msgid "The balance of %1 will raise above %2 in %3 days."
+msgstr "O saldo de %1 estará acima de %2 em %3 dias."
+
+#: views/kforecastview.cpp:348
+msgid "The account %1 is decreasing %2 per cycle."
+msgstr "A conta %1 está diminuindo %2 por ciclo."
+
+#: views/kforecastview.cpp:404 widgets/kmymoneyaccounttreeforecast.cpp:114
+#, c-format
+msgid "Min Bal %1"
+msgstr "Saldo Min %1"
+
+#: views/kforecastview.cpp:406 widgets/kmymoneyaccounttreeforecast.cpp:116
+#, c-format
+msgid "Min Date %1"
+msgstr "Data Min %1"
+
+#: views/kforecastview.cpp:409 widgets/kmymoneyaccounttreeforecast.cpp:119
+#, c-format
+msgid "Max Bal %1"
+msgstr "Saldo Max %1"
+
+#: views/kforecastview.cpp:411 widgets/kmymoneyaccounttreeforecast.cpp:121
+#, c-format
+msgid "Max Date %1"
+msgstr "Data Max %1"
+
+#: views/kforecastview.cpp:413 widgets/kmymoneyaccounttreeforecast.cpp:123
+msgid "Average"
+msgstr "Média"
+
+#: views/kforecastview.cpp:649 views/khomeview.cpp:268 views/khomeview.cpp:275
+msgid "Networth Forecast"
+msgstr "Previsão do Patrimônio Líquido"
+
+#: views/khomeview.cpp:203
+msgid "Your Financial Summary"
+msgstr "Seu Resumo Financeiro"
+
+#: views/khomeview.cpp:218
+msgid "Preferred Accounts"
+msgstr "Contas Preferidas"
+
+#: views/khomeview.cpp:225 views/khomeview.cpp:227
+msgid "Payment Accounts"
+msgstr "Contas de Pagamento"
+
+#: views/khomeview.cpp:256
+msgid "Show KMyMoney welcome page"
+msgstr "Mostrar a página de boas vindas do KMyMoney"
+
+#: views/khomeview.cpp:409
+msgid "Overdue payments"
+msgstr "Pagamentos atrasados"
+
+#: views/khomeview.cpp:424 views/khomeview.cpp:497 views/khomeview.cpp:531
+msgid "Balance after"
+msgstr "Saldo depois"
+
+#: views/khomeview.cpp:482
+msgid "Today's payments"
+msgstr "Pagamentos de hoje"
+
+#: views/khomeview.cpp:516
+msgid "Future payments"
+msgstr "Pagamentos futuros"
+
+#: views/khomeview.cpp:585
+msgid "Less..."
+msgstr "Menos..."
+
+#: views/khomeview.cpp:587
+msgid "More..."
+msgstr "Mais..."
+
+#: views/khomeview.cpp:622
+msgid "Enter schedule"
+msgstr "Inserir agendamento"
+
+#: views/khomeview.cpp:624
+msgid "Skip schedule"
+msgstr "Ignorar agendamento"
+
+#: views/khomeview.cpp:627
+msgid "Edit schedule"
+msgstr "Editar agendamento"
+
+#: views/khomeview.cpp:631
+msgid " (%1 payments)"
+msgstr " (%1 pagamentos)"
+
+#: views/khomeview.cpp:771
+msgid "To Minimum Balance / Maximum Credit"
+msgstr "Para Saldo Mínimo / Crédito Máximo"
+
+#: views/khomeview.cpp:964
+msgid "%1 Day Forecast"
+msgstr "%1 Dias de Previsão"
+
+#: views/khomeview.cpp:973 widgets/kmymoneyaccounttreeforecast.cpp:67
+msgid "%1 days"
+msgstr "%1 dias"
+
+#: views/khomeview.cpp:1039
+msgid "The balance of %1 is below the minimum balance %2 today."
+msgstr "Hoje, o saldo de %1 está abaixo do saldo mínimo de %2."
+
+#: views/khomeview.cpp:1175
+msgid ""
+"Before KMyMoney can give you detailed information about your financial "
+"status, you need to create at least one account. Until then, KMyMoney shows "
+"the welcome page instead."
+msgstr ""
+"Antes que o KMyMoney possa lhe fornecer informações financeiras, você deve "
+"criar pelo menos uma conta. Até isto ser feito, o KMyMoney exibe a página de "
+"boas vindas."
+
+#: views/khomeview.cpp:1258
+msgid "Assets and Liabilities Summary"
+msgstr "Resumo de Ativos e Passivos"
+
+#: views/khomeview.cpp:1262
+msgid "Asset Accounts"
+msgstr "Contas de Ativos"
+
+#: views/khomeview.cpp:1270
+msgid "Liability Accounts"
+msgstr "Contas de Passivo"
+
+#: views/khomeview.cpp:1348
+msgid "Total Assets"
+msgstr "Ativos Totais"
+
+#: views/khomeview.cpp:1354
+msgid "Total Liabilities"
+msgstr "Ativos & Passivos"
+
+#: views/khomeview.cpp:1399
+msgid "Current Month Summary"
+msgstr "Resumo do Mês Atual"
+
+#: views/khomeview.cpp:1403 views/khomeview.cpp:1440
+msgid "Budgeted"
+msgstr "No Orçamento"
+
+#: views/khomeview.cpp:1433
+msgid "Budget Overruns"
+msgstr "Além do Orçamento"
+
+#: views/khomeview.cpp:1502
+msgid "No Budget Categories have been overrun"
+msgstr "Nenhuma das categorias do Orçamento estourou"
+
+#: views/khomeview.cpp:1801
+msgid "Cash Flow Summary"
+msgstr "Resumo do Dinheiro"
+
+#: views/khomeview.cpp:1808
+msgid "Income and Expenses of Current Month"
+msgstr "Receitas e Despesas Deste Mês"
+
+#: views/khomeview.cpp:1816
+msgid "Scheduled Income"
+msgstr "Receitas Agendadas"
+
+#: views/khomeview.cpp:1819
+msgid "Expenses"
+msgstr "Despesas"
+
+#: views/khomeview.cpp:1822
+msgid "Scheduled Expenses"
+msgstr "Despesas Agendadas"
+
+#: views/khomeview.cpp:1850
+msgid "Liquid Assets and Liabilities"
+msgstr "Ativos e Passivos Líquidos"
+
+#: views/khomeview.cpp:1855
+msgid "Liquid Assets"
+msgstr "Ativos Líquidos"
+
+#: views/khomeview.cpp:1858
+msgid "Transfers to Liquid Liabilities"
+msgstr "Transferências para Passivos Líquidos"
+
+#: views/khomeview.cpp:1861
+msgid "Liquid Liabilities"
+msgstr "Passivos Líquidos"
+
+#: views/khomeview.cpp:1864
+msgid "Other Transfers"
+msgstr "Outras Transferências"
+
+#: views/khomeview.cpp:1908
+msgid "Cash Flow Status"
+msgstr "Estado do Dinheiro"
+
+#: views/khomeview.cpp:1914
+msgid "Expected Liquid Assets"
+msgstr "Previsão de Ativos Líquidos"
+
+#: views/khomeview.cpp:1917
+msgid "Expected Liquid Liabilities"
+msgstr "Previsão de Passivos Líquidos"
+
+#: views/khomeview.cpp:1920
+msgid "Expected Profit/Loss"
+msgstr "Previsão de Rendimentos/Perdas"
+
+#: plugins/ofximport/ofximporterplugin.cpp:64
+msgid "OFX..."
+msgstr "OFX..."
+
+#: plugins/ofximport/ofximporterplugin.cpp:69
+msgid "OFX import file selection"
+msgstr "Seleção de arquivo OFX para importar"
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid ""
+"Unable to import %1 using the OFX importer plugin. This file is not the "
+"correct format."
+msgstr ""
+"Não foi possível importar %1 usando o plugin de importação do OFX. Este "
+"arquivo não está no formato correto."
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid "Incorrect format"
+msgstr "Formato incorreto"
+
+#: plugins/ofximport/ofximporterplugin.cpp:122
+msgid "Unable to parse file"
+msgstr "Não foi possível analisar arquivo"
+
+#: plugins/ofximport/ofximporterplugin.cpp:576
+msgid "Online settings"
+msgstr "Configurações online"
+
+#: plugins/ofximport/ofximporterplugin.cpp:635
+#, c-format
+msgid "Error connecting to bank: %1"
+msgstr "Erro ao conectar-se ao banco: %1"
+
+#: plugins/ofximport/ofximporterplugin.cpp:646
+msgid ""
+"Unable to import %1 using the OFX importer plugin. The plugin returned the "
+"following error:<p>%2"
+msgstr ""
+"Não foi possível importar %1 usando o plugin de importação OFX. O plugin "
+"retornou o seguinte erro: <p>%3"
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Importing process terminated unexpectedly."
+msgstr "Processo de importação terminou de maneira inesperada."
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Failed to import all statements."
+msgstr "Falha ao importar todas as transações."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "The HTTP request failed."
+msgstr "A requisição HTTP falhou."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "Failed"
+msgstr "Falhou"
+
+#: plugins/ofximport/ofxpartner.cpp:410
+msgid "Cannot open file %1 for writing"
+msgstr "Não foi possível abrir o arquivo %1 para escrita"
+
+#: plugins/ofximport/ofxpartner.cpp:414
+msgid "OFX setup error"
+msgstr "Erro de configuração do OFX"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid "Loading banklist"
+msgstr "Carregando lista de bancos"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid ""
+"Getting list of banks from http://moneycentral.msn.com/\n"
+"This may take some time depending on the available bandwidth."
+msgstr ""
+"Obtendo a lista de bancos de http://moneycentral.msn.com/\n"
+"Isto pode levar algum tempo dependendo da largura de banda disponível."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:155
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:199
+msgid "Supports online statements<br>"
+msgstr "Suporta extratos online<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:157
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:201
+msgid "Supports investments<br>"
+msgstr "Suporta investimentos<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:159
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:203
+msgid "Supports bill payment (but not supported by KMyMoney yet)<br>"
+msgstr "Suporta pagamentos de contas (ainda não suportado pelo KMyMoney)<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:163
+msgid "Does not support online banking</p>"
+msgstr "Não suporta banco online</p>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:173
+msgid "Please choose a bank."
+msgstr "Por favor, selecione um banco."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:179
+msgid "Please fill all fields with values."
+msgstr "Por favor, preencha todos os campos com valores."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:271
+msgid "No suitable accounts were found at this bank."
+msgstr "Não foram encontradas contas apropriadas neste banco."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:283
+msgid "Please choose an account"
+msgstr "Por favor, selecione uma conta"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:386
+msgid "Server message: %1\n"
+msgstr "Mensagem do servidor: %1\n"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+msgid "Your bank returned warnings when signing on"
+msgstr "O seu banco retornou um alerta na conexão"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+#, c-format
+msgid "WARNING %1"
+msgstr "ATENÇÃO %1"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+msgid "Error signing onto your bank"
+msgstr "Erro ao conectar-se ao seu banco"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, c-format
+msgid "ERROR %1"
+msgstr "ERRO %1"
+
+#: plugins/ofximport/dialogs/konlinebankingstatus.cpp:59
+msgid "Enabled & configured"
+msgstr "Ativo & configurado"
+
+#: plugins/ofximport/dialogs/rc.cpp:1
+msgid "OFX Direct Connect"
+msgstr "Conexão Direta OFX"
+
+#: plugins/ofximport/dialogs/rc.cpp:2
+msgid "Contacting bank..."
+msgstr "Contactando o banco..."
+
+#: plugins/ofximport/dialogs/rc.cpp:4
+msgid "Online Banking Account Setup"
+msgstr "Configuração de Conta de Banco Online"
+
+#: plugins/ofximport/dialogs/rc.cpp:5
+msgid "Select Financial Institution"
+msgstr "Selecionar Instituição Financeira"
+
+#: plugins/ofximport/dialogs/rc.cpp:6
+msgid "Please select your financial institution from the list below..."
+msgstr "Por favor, selecione a instituição financeira na lista abaixo..."
+
+#: plugins/ofximport/dialogs/rc.cpp:7
+msgid "Automatic"
+msgstr "Automático"
+
+#: plugins/ofximport/dialogs/rc.cpp:8
+msgid "Financial Institution"
+msgstr "Instituição Financeira"
+
+#: plugins/ofximport/dialogs/rc.cpp:9
+msgid "Manual"
+msgstr "Manual"
+
+#: plugins/ofximport/dialogs/rc.cpp:10
+msgid "Org"
+msgstr "Org"
+
+#: plugins/ofximport/dialogs/rc.cpp:11
+msgid "FID"
+msgstr "FID"
+
+#: dialogs/settings/rc.cpp:120 plugins/ofximport/dialogs/rc.cpp:12
+#: widgets/rc.cpp:46
+msgid "URL"
+msgstr "URL"
+
+#: plugins/ofximport/dialogs/rc.cpp:13
+msgid "Enter Login Details"
+msgstr "Insira os Detalhes de Identificação"
+
+#: plugins/ofximport/dialogs/rc.cpp:14
+msgid ""
+"Please enter the username and password you use to log into this bank for "
+"online banking. Please note that many banks require a separate signup, and "
+"assign a separate PIN or password just for online banking from home."
+msgstr ""
+"Por favor insira o nome de usuário e senha a serem usados para conectar-se "
+"ao banco para uso online. Por favor, observe que muitos bancos exigem uma "
+"conexão separada, e atribuem logins e senhas diferentes e exclusivas para "
+"acesso do banco online a partir de sua casa."
+
+#: plugins/ofximport/dialogs/rc.cpp:15
+msgid "Connection Details"
+msgstr "Detalhes da Conexão"
+
+#: plugins/ofximport/dialogs/rc.cpp:16
+msgid "Username"
+msgstr "Nome do usuário"
+
+#: plugins/ofximport/dialogs/rc.cpp:17 plugins/ofximport/dialogs/rc.cpp:36
+msgid "Header Version"
+msgstr "Versão de cabeçalho"
+
+#: plugins/ofximport/dialogs/rc.cpp:18 plugins/ofximport/dialogs/rc.cpp:37
+msgid "Identify as"
+msgstr "Identificar como"
+
+#: dialogs/rc.cpp:742 plugins/ofximport/dialogs/rc.cpp:19
+msgid "Password"
+msgstr "Senha"
+
+#: plugins/ofximport/dialogs/rc.cpp:20
+msgid "Select Account"
+msgstr "Selecione a Conta"
+
+#: plugins/ofximport/dialogs/rc.cpp:21
+msgid ""
+"Please select the account from your financial institution from the list "
+"below which matches this account."
+msgstr ""
+"Por favor, selecione a conta de sua instituição financeira a partir da lista "
+"abaixo que corresponde a esta conta."
+
+#: plugins/ofximport/dialogs/rc.cpp:24
+msgid "Bank"
+msgstr "Banco"
+
+#: plugins/ofximport/dialogs/rc.cpp:25
+msgid "Branch"
+msgstr "Agência"
+
+#: plugins/ofximport/dialogs/rc.cpp:26
+msgid "WizardPage"
+msgstr "Assistente"
+
+#: plugins/ofximport/dialogs/rc.cpp:27
+msgid ""
+"Congratulations! You have successfully set up your bank for online banking "
+"via OFX."
+msgstr ""
+"Parabéns! Você configurou com sucesso o seu banco para uso online através "
+"de OFX."
+
+#: plugins/ofximport/dialogs/rc.cpp:28
+msgid "Account Details"
+msgstr "Detalhes da Conta"
+
+#: plugins/ofximport/dialogs/rc.cpp:29 plugins/ofximport/dialogs/rc.cpp:31
+msgid "&lt;Not configured&gt;"
+msgstr "&lt;Não configurada&gt;"
+
+#: plugins/ofximport/dialogs/rc.cpp:30
+msgid "BANK/BROKER:"
+msgstr "BANCO/CORRETOR:"
+
+#: plugins/ofximport/dialogs/rc.cpp:32
+msgid "Unavailable"
+msgstr "Indisponível"
+
+#: plugins/ofximport/dialogs/rc.cpp:33
+msgid "ACCOUNT:"
+msgstr "CONTA:"
+
+#: plugins/ofximport/dialogs/rc.cpp:34
+msgid "STATUS:"
+msgstr "ESTADO:"
+
+#: plugins/ofximport/dialogs/rc.cpp:35
+msgid "OFX Details"
+msgstr "Detalhes OFX"
+
+#: plugins/ofximport/dialogs/rc.cpp:38
+msgid "Start date of import"
+msgstr "Data inicial da importação"
+
+#: plugins/ofximport/dialogs/rc.cpp:39
+msgid "To&day minus"
+msgstr "Ho&je menos"
+
+#: plugins/ofximport/dialogs/rc.cpp:40
+msgid "days"
+msgstr "dias"
+
+#: plugins/ofximport/dialogs/rc.cpp:41
+msgid "Last &update"
+msgstr "Última at&ualização"
+
+#: plugins/ofximport/dialogs/rc.cpp:42
+msgid "Pi&ck date"
+msgstr "Es&colha a data"
+
+#: plugins/ofximport/dialogs/rc.cpp:43
+msgid "Name is derived from"
+msgstr "O nome é derivado de"
+
+#: plugins/ofximport/dialogs/rc.cpp:44
+msgid "P&AYEEID"
+msgstr "P&AYEEID"
+
+#: plugins/ofximport/dialogs/rc.cpp:45
+msgid "&NAME"
+msgstr "&NOME"
+
+#: plugins/ofximport/dialogs/rc.cpp:46
+msgid "field if both are present in download"
+msgstr "campo se ambos estiverem presentes ao baixar"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:81
+msgid "Quicken Windows 2003"
+msgstr "Quicken Windows 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:82
+msgid "Quicken Windows 2004"
+msgstr "Quicken Windows 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:83
+msgid "Quicken Windows 2005"
+msgstr "Quicken Windows 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:84
+msgid "Quicken Windows 2006"
+msgstr "Quicken Windows 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:85
+msgid "Quicken Windows 2007"
+msgstr "Quicken Windows 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:86
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:111
+msgid "Quicken Windows 2008"
+msgstr "Quicken Windows 2008"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:89
+msgid "MS-Money 2003"
+msgstr "MS-Money 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:90
+msgid "MS-Money 2004"
+msgstr "MS-Money 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:91
+msgid "MS-Money 2005"
+msgstr "MS-Money 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:92
+msgid "MS-Money 2006"
+msgstr "MS-Money 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:93
+msgid "MS-Money 2007"
+msgstr "MS-Money 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:94
+msgid "MS-Money Plus"
+msgstr "MS-Money Plus"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:91
+msgid "Report Configuration"
+msgstr "Configuração do Relatório"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:117
+#: dialogs/kreportconfigurationfilterdlg.cpp:135
+msgid "Rows/Columns"
+msgstr "Linhas/Colunas"
+
+#: dialogs/investtransactioneditor.cpp:203
+#: dialogs/investtransactioneditor.cpp:537
+#: dialogs/investtransactioneditor.cpp:579 dialogs/rc.cpp:103
+#: dialogs/rc.cpp:158 dialogs/rc.cpp:245 dialogs/rc.cpp:750 dialogs/rc.cpp:794
+#: widgets/kmymoneyaccountselector.cpp:182 widgets/register.cpp:64
+#: widgets/register.cpp:567 widgets/transaction.cpp:1500
+msgid "Security"
+msgstr "Título"
+
+#: dialogs/investtransactioneditor.cpp:211
+msgid "Asset account"
+msgstr "Conta de ativos"
+
+#: dialogs/investtransactioneditor.cpp:1073
+msgid "Price/Share"
+msgstr "Preço/Ação"
+
+#: dialogs/kmergetransactionsdlg.cpp:39
+msgid "Merge Transactions"
+msgstr "Mesclar Transações"
+
+#: dialogs/kmergetransactionsdlg.cpp:40
+msgid "Are you sure you wish to merge these transactions?"
+msgstr "Você tem certeza que deseja mesclar estas transações?"
+
+#: dialogs/kstartdlg.cpp:59
+msgid "Start Dialog"
+msgstr "Início"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Templates"
+msgstr "Modelos"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Select templates"
+msgstr "Selecionar modelos"
+
+#: dialogs/kstartdlg.cpp:80 dialogs/kstartdlg.cpp:119
+msgid "New KMyMoney document"
+msgstr "Novo documento do KMyMoney"
+
+#: dialogs/kstartdlg.cpp:90
+msgid "Open a KMyMoney document"
+msgstr "Abrir um documento do KMyMoney"
+
+#: dialogs/kstartdlg.cpp:96
+msgid ""
+"%1|KMyMoney files (*.kmy)\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Arquivos KMyMoney (*.kmy)\n"
+"%2|Todos arquivos (*.*)"
+
+#: dialogs/kstartdlg.cpp:102
+msgid "Recent Files"
+msgstr "Arquivos Recentes"
+
+#: dialogs/kstartdlg.cpp:217
+msgid "Blank Document"
+msgstr "Documento em Branco"
+
+#: dialogs/knewbudgetdlg.cpp:71
+msgid "Please specify a budget name"
+msgstr "Por favor, especifique um nome para o orçamento"
+
+#: dialogs/kgncpricesourcedlg.cpp:48
+#, c-format
+msgid "Investment: %1"
+msgstr "Investimento: %1"
+
+#: dialogs/kgncpricesourcedlg.cpp:49
+#, c-format
+msgid "Quote source: %1"
+msgstr "Fonte de cotação: %1"
+
+#: dialogs/kmymoneypricedlg.cpp:62 dialogs/ksecuritylisteditor.cpp:69
+msgid "Delete this entry"
+msgstr "Remover esta entrada"
+
+#: dialogs/ksecuritylisteditor.cpp:70
+msgid "Remove this security item from the file"
+msgstr "Remover este ítem de título do arquivo"
+
+#: dialogs/ksecuritylisteditor.cpp:73
+msgid "&Add"
+msgstr "&Adicionar"
+
+#: dialogs/kmymoneypricedlg.cpp:68 dialogs/ksecuritylisteditor.cpp:75
+msgid "Add a new entry"
+msgstr "Adicionar uma nova entrada"
+
+#: dialogs/ksecuritylisteditor.cpp:76
+msgid "Create a new security entry."
+msgstr "Criar uma nova entrada de título."
+
+#: dialogs/keditequityentrydlg.cpp:77 dialogs/kmymoneypricedlg.cpp:74
+#: dialogs/ksecuritylisteditor.cpp:81
+msgid "Modify the selected entry"
+msgstr "Modificar a entrada selecionada"
+
+#: dialogs/ksecuritylisteditor.cpp:82
+msgid "Change the security information of the selected entry."
+msgstr "Mudar as informações do título da entrada selecionada."
+
+#: dialogs/kmymoneypricedlg.cpp:80 dialogs/ksecuritylisteditor.cpp:87
+msgid "Close the dialog"
+msgstr "Fechar o diálogo"
+
+#: dialogs/kmymoneypricedlg.cpp:81 dialogs/ksecuritylisteditor.cpp:88
+msgid "Use this to close the dialog and return to the application."
+msgstr "Use isto para fechar a janela e retornar para a aplicação."
+
+#: dialogs/ksecuritylisteditor.cpp:184
+msgid ""
+"Do you really want to remove the currency <b>%1</b> from the file?</"
+"p><i>Note: It is currently not supported to add currencies.</i>"
+msgstr ""
+"Você deseja realmente remover a moeda <b>%1</b> do arquivo?</p><i>Nota: "
+"Atualmente não é possível adicionar novas moedas.</i>"
+
+#: dialogs/ksecuritylisteditor.cpp:187
+msgid "Do you really want to remove the %1 <b>%2</b> from the file?"
+msgstr "Você deseja realmente remover o(a) %1 <b>%2</b> do arquivo?"
+
+#: dialogs/ksecuritylisteditor.cpp:190
+msgid "Delete security"
+msgstr "Remover título"
+
+#: dialogs/kmymoneypricedlg.cpp:63
+msgid "Remove this price item from the file"
+msgstr "Remover este ítem de preço do arquivo"
+
+#: dialogs/kmymoneypricedlg.cpp:66 dialogs/mymoneyqifprofileeditor.cpp:94
+msgid "&New"
+msgstr "&Novo"
+
+#: dialogs/kmymoneypricedlg.cpp:69
+msgid "Create a new price entry."
+msgstr "Criar uma nova entrada de preço."
+
+#: dialogs/kmymoneypricedlg.cpp:75
+msgid "Change the details of selected price information."
+msgstr "Mudar os detalhes das informações do preço selecionado."
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Do you really want to delete the selected price entry?"
+msgstr "Você realmente deseja apagar a entrada de preço selecionada?"
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Delete price information"
+msgstr "Apagar informações de preço"
+
+#: dialogs/kchooseimportexportdlg.cpp:46
+msgid ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Por favor selecione o tipo de importação que você deseja realizar. Um "
+"explicação simples\n"
+"sobre tipos de importação está disponível na base da janela e é atualizada "
+"quando você\n"
+"seleciona um ítem na caixa de opção.\n"
+"\n"
+"Uma vez que tenha escolhido um tipo de importação, por favor pressione o "
+"botão OK."
+
+#: dialogs/kchooseimportexportdlg.cpp:50 dialogs/rc.cpp:22
+msgid "Choose import type:"
+msgstr "Escolher tipo de importação:"
+
+#: dialogs/kchooseimportexportdlg.cpp:51 dialogs/rc.cpp:20
+msgid "Choose Import Type Dialog"
+msgstr "Escolher Tipo de Importação"
+
+#: dialogs/kchooseimportexportdlg.cpp:53
+msgid ""
+"Please choose the type of export you wish to perform. A simple explanation\n"
+"of the export type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an export type please press the OK button."
+msgstr ""
+"Por favor selecione o tipo de exportação que você deseja realizar. Um "
+"explicação simples\n"
+"sobre tipos de exportação está disponível na base da janela e é atualizada "
+"quando você\n"
+"seleciona um ítem na caixa de opção.\n"
+"\n"
+"Uma vez que tenha escolhido um tipo de exportação, por favor pressione o "
+"botão OK."
+
+#: dialogs/kchooseimportexportdlg.cpp:57
+msgid "Choose export type:"
+msgstr "Escolher tipo de exportação:"
+
+#: dialogs/kchooseimportexportdlg.cpp:58
+msgid "Choose Export Type Dialog"
+msgstr "Escolher Tipo de Exportação"
+
+#: dialogs/kchooseimportexportdlg.cpp:78
+msgid ""
+"QIF files are created by the popular accounting program Quicken.\n"
+"Another dialog will appear, if you choose this type, asking for further\n"
+"information relevant to the Quicken format."
+msgstr ""
+"Arquivos QIF são criados pelo popular programa de contabilidade Quicken.\n"
+"Se você escolher este tipo, outro diálogo irá aparecer pedindo mais "
+"informações relevantes ao formato Quicken."
+
+#: dialogs/kchooseimportexportdlg.cpp:82
+msgid ""
+"The CSV type uses a comma delimeted text file that can be used by\n"
+"most popular spreadsheet programs available for Linux and other operating\n"
+"systems."
+msgstr ""
+"O tipo CSV usa um arquivo de texto delimitado por vírgulas que pode ser "
+"usado pela maioria de programas de planilha disponíveis para Linux e outros "
+"sistemas operacionais."
+
+#: dialogs/kequitypriceupdatedlg.cpp:222
+msgid "%1 units in %2"
+msgstr "%1 unidades em %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid ""
+"Failed to retrieve an exchange rate for %1 from %2. It will be skipped this "
+"time."
+msgstr ""
+"Ocorreu uma falha ao obter a cotação de %1 a partir de %2. Ela será ignorada "
+"desta vez."
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid "Price Update Failed"
+msgstr "Atualização de Preço Falhou"
+
+#: dialogs/kequitypriceupdatedlg.cpp:427
+msgid ""
+"Failed to retrieve a quote for %1 from %2. Press <b>No</b> to remove the "
+"online price source from this security permanently, <b>Yes</b> to continue "
+"updating this security during future price updates or <b>Cancel</b> to stop "
+"the current update operation."
+msgstr ""
+"Ocorreu uma falha ao obter uma cotação para %1 de %2. Pressione <b>Não</b> "
+"para remover a fonte de preço online desta ação permanentemente. <b>Sim</b> "
+"para continuar atualizando esta ação nas próximas atualizações de preço ou "
+"<b>Cancelar</b> para interromper a operação de atualização atual."
+
+#: dialogs/kequitypriceupdatedlg.cpp:427 dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Price Update Failed"
+msgstr "Atualização de Preço Falhou"
+
+#: dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Cannot update security <b>%1</b>: %2"
+msgstr "Não foi possível atualizar o título <b>%1</b>: %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:528
+msgid "Price for %1 updated (id %2)"
+msgstr "Preço para %1 atualizado (id %2)"
+
+#: dialogs/kequitypriceupdatedlg.cpp:534
+msgid "Received an invalid price for %1, unable to update."
+msgstr "Valor inválido recebido para %1, não foi possível atualizar."
+
+#: dialogs/kequitypriceupdatedlg.cpp:554
+msgid ""
+"Received a price for %1 (id %2), but this symbol is not on the list! "
+"Aborting entire update."
+msgstr ""
+"Recebido um preço para %1 (id %2), mas o símbolo não está na lista! Toda a "
+"atualização foi cancelada."
+
+#: dialogs/transactioneditor.cpp:222
+msgid ""
+"The number <b>%1</b> has already been used in account <b>%2</b>. Do you want "
+"to replace it with the next available number?"
+msgstr ""
+"O número <b>%1</b> já está sendo usado na conta <b>%2</b>. Você deseja "
+"substituí-lo com o próximo número disponível?"
+
+#: dialogs/transactioneditor.cpp:222
+msgid "Duplicate number"
+msgstr "Número duplicado"
+
+#: dialogs/transactioneditor.cpp:303
+msgid ""
+"This transaction has more than two splits and is based on a different "
+"currency (%1). Using this account to modify the transaction is currently not "
+"very well supported by KMyMoney and may result in false results."
+msgstr ""
+"Esta transação possui mais de duas parcelas e é baseada em uma moeda "
+"diferente (%1). Usa esta conta para modificar a transação não é atualmente "
+"bem suportado pelo KMyMoney e pode resultar em resultados falsos."
+
+#: dialogs/transactioneditor.cpp:305
+msgid ""
+"KMyMoney was not able to find a more appropriate account to edit this "
+"transaction. Nevertheless, you are allowed to modify the transaction. If you "
+"don't want to edit this transaction, please cancel from editing next."
+msgstr ""
+"O KMyMoney não foi capaz de encontra uma conta mais apropriada para editar "
+"esta transação. Independente disto, você pode modificar a transação. Se você "
+"não deseja editar esta transação, por favor cancele editando a seguinte."
+
+#: dialogs/transactioneditor.cpp:307
+msgid ""
+"Using e.g. <b>%1</b> to edit this transaction is a better choice. "
+"Nevertheless, you are allowed to modify the transaction. If you want to use "
+"the suggested account instead, please cancel from editing next and change "
+"the view to the suggested account."
+msgstr ""
+"Usar neste caso <b>%1</b> para editar esta transação é a melhor opção. "
+"Independente disto, você pode modificar a transação. Se você deseja usar a "
+"conta sugerida, por favor cancele editando a próxima transação e mudando a "
+"visão para a conta sugerida."
+
+#: dialogs/transactioneditor.cpp:410
+msgid ""
+"This transaction has more than two splits and is originally based on a "
+"different currency (%1). Using this account to modify the transaction may "
+"result in rounding errors. Do you want to continue?"
+msgstr ""
+"Esta transação possui mais de duas parcelas e é baseada em uma moeda "
+"diferente (%1). Usar esta conta para modificar a transação pode resultar em "
+"erros de arredondamento. Você deseja continuar?"
+
+#: dialogs/transactioneditor.cpp:412
+msgid ""
+"At least one of the selected transactions has more than two splits and is "
+"originally based on a different currency (%1). Using this account to modify "
+"the transactions may result in rounding errors. Do you want to continue?"
+msgstr ""
+"Pelo menos uma das transações selecionadas possui mais de duas parcelas e é "
+"baseada em uma moeda diferente (%1). Usar esta conta para modificar as "
+"transações pode resultar em erros de arredondamento. Você deseja continuar?"
+
+#: dialogs/transactioneditor.cpp:557
+msgid "Storing transactions"
+msgstr "Armazenando transações"
+
+#: dialogs/transactioneditor.cpp:603 widgets/kmymoneybriefschedule.cpp:65
+msgid "&Enter"
+msgstr "&Entrar"
+
+#: dialogs/transactioneditor.cpp:606
+msgid "Use this to enter the transaction into the ledger."
+msgstr "Use isto para inserir a transação no livro de registros."
+
+#: dialogs/transactioneditor.cpp:607
+msgid "&Schedule"
+msgstr "A&gendar"
+
+#: dialogs/transactioneditor.cpp:609
+msgid "Accepts the entered data and stores it as schedule"
+msgstr "Aceita os dados inseridos e salva-os como um agendamento"
+
+#: dialogs/transactioneditor.cpp:610
+msgid "Use this to schedule the transaction for later entry into the ledger."
+msgstr ""
+"Use isto para agendar a transação para ser inserida mais tarde no livro de "
+"registros."
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"The transaction you are about to enter has a post date in the future.<br/"
+"><br/>Do you want to enter it in the ledger or add it to the schedules?"
+msgstr ""
+"A transação que você está prestes a inserir possui uma data futura.<br/><br/"
+">Você deseja inserí-la no livro de registros ou adicioná-la aos agendamentos?"
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"_: Dialog caption for 'Enter or schedule' dialog\n"
+"Enter or schedule?"
+msgstr "Inserir ou agendar?"
+
+#: dialogs/transactioneditor.cpp:671
+msgid "The balance of account <b>%1</b> dropped below the warning balance of %2."
+msgstr "O balanço da conta <b>%1</b> ultrapassou o nível de alerta de %2."
+
+#: dialogs/transactioneditor.cpp:677
+msgid "The balance of account <b>%1</b> dropped below the minimum balance of %2."
+msgstr "O balanço da conta <b>%1</b> ultrapassou o nível mínimo de %2."
+
+#: dialogs/transactioneditor.cpp:683
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit warning "
+"limit of %2."
+msgstr "O balanço da conta <b>%1</b> está abaixo do limite máximo de crédito de %2."
+
+#: dialogs/transactioneditor.cpp:689
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit limit of %"
+"2."
+msgstr "O balanço da conta <b>%1</b> está abaixo do limite máximo de crédito de %2."
+
+#: dialogs/transactioneditor.cpp:740
+msgid "Payer/Receiver"
+msgstr "Beneficiário/Recebedor"
+
+#: dialogs/transactioneditor.cpp:748
+msgid "Category/Account"
+msgstr "Categoria/Conta"
+
+#: dialogs/transactioneditor.cpp:980 dialogs/transactioneditor.cpp:1016
+#: dialogs/transactioneditor.cpp:1378 dialogs/transactioneditor.cpp:1399
+#: dialogs/transactioneditor.cpp:1422 dialogs/transactioneditor.cpp:1443
+#: dialogs/transactioneditor.cpp:1505 dialogs/transactioneditor.cpp:1509
+#: widgets/transaction.cpp:902
+msgid "Transfer from"
+msgstr "Transferir de"
+
+#: dialogs/transactioneditor.cpp:982 dialogs/transactioneditor.cpp:1018
+#: dialogs/transactioneditor.cpp:1401 dialogs/transactioneditor.cpp:1445
+#: dialogs/transactioneditor.cpp:1506 widgets/transaction.cpp:902
+msgid "Transfer to"
+msgstr "Transferir para"
+
+#: dialogs/transactioneditor.cpp:1259
+msgid "Select autofill transaction"
+msgstr "Selecionar transação auto-preenchida"
+
+#: dialogs/transactionmatcher.cpp:77
+msgid "First transaction does not match requirement for matching"
+msgstr "A primeira transação não atende aos requisitos para correspondência"
+
+#: dialogs/transactionmatcher.cpp:79
+msgid "Second transaction does not match requirement for matching"
+msgstr "A segunda transação não atende aos requisitos para correspondência"
+
+#: dialogs/transactionmatcher.cpp:83 dialogs/transactionmatcher.cpp:133
+msgid "Splits for %1 have conflicting values (%2,%3)"
+msgstr "Parcelar para %1 possuem valores conflitantes (%2, %3)"
+
+#: dialogs/transactionmatcher.cpp:96 dialogs/transactionmatcher.cpp:149
+msgid ""
+"Both of these transactions have been imported into %1. Therefore they "
+"cannot be matched. Matching works with one imported transaction and one non-"
+"imported transaction."
+msgstr ""
+"Ambas as transações foram importadas para %1. Portanto, elas não podem "
+"corresponder. A correspondência funciona entre uma transação importada e "
+"outra não-importada."
+
+#: dialogs/transactionmatcher.cpp:101 dialogs/transactionmatcher.cpp:156
+msgid "Unable to match all splits (%1)"
+msgstr "Não foi possível corresponder todas as parcelas (%1)"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:65
+msgid "Account and transfer account are the same. Please change one."
+msgstr "Contas origem e destino são iguais. Por favor, mude uma delas."
+
+#: dialogs/kconfirmmanualenterdlg.cpp:84
+msgid "Payee changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Beneficiário modificado.<br>&nbsp;&nbsp;&nbsp; Antes<b>%1</b>, Depois: <b>%"
+"2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:92
+#: dialogs/kconfirmmanualenterdlg.cpp:100
+msgid "Account changed. Old: \"%1\", New: \"%2\""
+msgstr "Conta modificada. Antiga: \"%1\", Nova: \"%2\""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:107
+msgid "Account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "Conta modificada<br>&nbsp;&nbsp;&nbsp; Antiga: <b>%1</b> Nova: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:115
+msgid ""
+"Transfer account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</"
+"b><p>"
+msgstr ""
+"Conta de transferência modificada.<br>&nbsp;&nbsp;&nbsp; Antes: <b>%1</b>, "
+"Depois:<b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:143
+msgid "Category changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "Categoria modificada<br>&nbsp;&nbsp;&nbsp;Antiga <b>%1</b>; Nova<b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:151
+#: dialogs/kconfirmmanualenterdlg.cpp:153
+msgid "empty"
+msgstr "vazio"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:157
+msgid "Memo changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "Memo modificado<br>&nbsp;&nbsp;&nbsp; Antes: <b>%1</b> Depois: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:166
+msgid "Amount changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "Valor modificado<br>&nbsp;&nbsp;&nbsp; Antes: <b>%1</b>, Depois: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:175
+msgid ""
+"Reconciliation flag changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%"
+"2</b><p>"
+msgstr ""
+"Marca de reconciliação modificada.<br>&nbsp;&nbsp;&nbsp;Antes: <b>%1</b>, "
+"Depois: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:182
+msgid "Fatal error in determining data: "
+msgstr "Erro fatal determinando dados: "
+
+#: dialogs/kselectdatabasedlg.cpp:56
+msgid ""
+"There are no Qt SQL drivers installed in your system.\n"
+"Please consult documentation for your distro, or visit the Qt web site (www."
+"trolltech.com) and search for SQL drivers."
+msgstr ""
+"Não há driver Qt para SQL no seu sistema.\n"
+"Por favor consulte a documentação da sua distribuição, ou visite a página "
+"internet do Qt (www.trolltech.com) e procure os drivers SQL."
+
+#: dialogs/kselectdatabasedlg.cpp:100
+msgid "Qt SQL driver %1 is no longer installed on your system"
+msgstr "O driver Qt SQL %1 não está instalado no seu sistema"
+
+#: dialogs/kselectdatabasedlg.cpp:107
+msgid "Qt SQL driver %1 is not suported"
+msgstr "O driver Qt SQL %1 não é suportado"
+
+#: dialogs/kselectdatabasedlg.cpp:164
+msgid "SQLite files (*.sql);; All files (*.*)"
+msgstr "Arquivos SQLite (*.sql);;Todos os arquivos (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:167
+msgid "Select SQLite file"
+msgstr "Selecionar arquivo SQLite"
+
+#: dialogs/kselectdatabasedlg.cpp:188
+msgid "All files (*.*)"
+msgstr "Todos os arquivos (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:191
+msgid "Select output file"
+msgstr "Selecionar o arquivo de saída"
+
+#: dialogs/investactivities.cpp:168
+msgid "%1 (Brokerage)"
+msgstr "%1 (Corretagem)"
+
+#: dialogs/investactivities.cpp:200 dialogs/investactivities.cpp:288
+#: dialogs/investactivities.cpp:425 widgets/transaction.cpp:1548
+msgid "Price/share"
+msgstr "Preço por cota"
+
+#: dialogs/investactivities.cpp:586
+msgid "Ratio 1/"
+msgstr "Razão 1/"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid ""
+"<p>Please check that all the details in the following dialog are correct and "
+"press OK.</p><p>Editable data can be changed and can either be applied to "
+"just this occurence or for all subsequent occurences for this schedule. "
+"(You will be asked what you intend after pressing OK in the following dialog)"
+"</p>"
+msgstr ""
+"<p>Por favor certifique-se de que todos os detalhes na janela a seguir estão "
+"corretos e pressione OK.</p><p>Os dados podem ser mudados seja para esta "
+"ocorrência ou para todas as ocorrências futuras deste agendamento. (Você "
+"será questionado quanto a sua escolha ao pressionar OK na janela seguinte)</"
+"p>"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid "Enter scheduled transaction"
+msgstr "Inserir transação agendada"
+
+#: dialogs/kcsvprogressdlg.cpp:65 dialogs/kexportdlg.cpp:65
+msgid "&Export"
+msgstr "&Exportar"
+
+#: dialogs/kexportdlg.cpp:67 dialogs/kimportdlg.cpp:68
+msgid "Start operation"
+msgstr "Iniciar operação"
+
+#: dialogs/kexportdlg.cpp:68
+msgid "Use this to start the export operation"
+msgstr "Use isto para iniciar a operação de exportação"
+
+#: dialogs/kexportdlg.cpp:71 dialogs/kimportdlg.cpp:72
+msgid "&Browse..."
+msgstr "&Navegar..."
+
+#: dialogs/kexportdlg.cpp:73 dialogs/kimportdlg.cpp:74
+msgid "Select filename"
+msgstr "Selecionar nome do arquivo"
+
+#: dialogs/kexportdlg.cpp:74 dialogs/kimportdlg.cpp:75
+msgid "Use this to select a filename to export to"
+msgstr "Use isto para selecionar o nome do arquivo para onde exportar"
+
+#: dialogs/kexportdlg.cpp:77 dialogs/kimportdlg.cpp:78
+#: dialogs/settings/ksettingsonlinequotes.cpp:64
+#: widgets/kmymoneyonlinequoteconfig.cpp:64
+msgid "&New..."
+msgstr "&Novo..."
+
+#: dialogs/kexportdlg.cpp:79 dialogs/kimportdlg.cpp:80
+#: dialogs/mymoneyqifprofileeditor.cpp:96
+msgid "Create a new profile"
+msgstr "Criar um novo perfil"
+
+#: dialogs/kexportdlg.cpp:80 dialogs/kimportdlg.cpp:81
+msgid "Use this to open the profile editor"
+msgstr "Use isto para abrir o editor de perfil"
+
+#: dialogs/keditloanwizard.cpp:56
+msgid "Edit loan wizard"
+msgstr "Assistente para edição de financiamento"
+
+#: dialogs/keditloanwizard.cpp:58
+msgid ""
+"Please enter the date from which on the following changes will be effective. "
+"The date entered must be later than the opening date of this account (%1), "
+"but must not be in the future. The default will be today."
+msgstr ""
+"Por favor, entre com a data a partir da qual as seguintes mudanças serão "
+"efetivas. A data introduzida deve ser posterior à data de abertura desta "
+"conta (%1), mas não pode ser no futuro. O padrão será hoje."
+
+#: dialogs/keditloanwizard.cpp:76
+msgid ""
+"Note: you will not be able to modify this account today, because the opening "
+"date \"%1\" is in the future. Please revisit this dialog when the time has "
+"come."
+msgstr ""
+"Nota: Você não poderá modificar esta conta hoje, porque a data de abertura "
+"\"%1\" está no futuro. Por favor, visite novamente este diálogo quando a "
+"data chegar."
+
+#: dialogs/keditloanwizard.cpp:244
+msgid ""
+"Your previous selection was \"%1\". If you select another option, KMyMoney "
+"will dismiss the changes you have just entered. Do you wish to proceed?"
+msgstr ""
+"Sua seleção anterior foi \"%1\". Se você selecionar outra opção, o KMyMoney "
+"irá descartar as mudanças que você acabou de entrar. Você deseja prosseguir?"
+
+#: dialogs/kcategoryreassigndlg.cpp:81
+msgid ""
+"At least one transaction/schedule still references the category <b>%1</b>. "
+"However, at least one category with the same currency must exist so that the "
+"transactions/schedules can be reassigned."
+msgstr ""
+"Pelo menos uma das transações/agendamentos ainda se refere à categoria <b>%"
+"1</b>. No entanto, pelo menos uma categoria com a mesma moeda deve existir "
+"de modo que as transações/agendamentos possam ser re-atribuídos."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid ""
+"This dialog does not allow to create new categories. Please pick a category "
+"from the list."
+msgstr ""
+"Esta janela não permite criar novas categorias. Por favor, selecione uma "
+"categoria na lista."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid "Category creation"
+msgstr "Criação de categoria"
+
+#: dialogs/kbackupdlg.cpp:61
+msgid "C&hoose..."
+msgstr "E&scolher..."
+
+#: dialogs/kbackupdlg.cpp:63
+msgid "Select mount point"
+msgstr "Seleciona o ponto de montagem"
+
+#: dialogs/kbackupdlg.cpp:64
+msgid "Use this to browse to the mount point."
+msgstr "Use isto para navegar ao ponto de montagem."
+
+#: dialogs/keditscheduledlg.cpp:293
+msgid "Next due date"
+msgstr "Próxima data de vencimento"
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid ""
+"You have turned on the GPG encryption support. This means, that new files "
+"will be stored encrypted. Existing files will not be encrypted "
+"automatically. To achieve encryption of existing files, please use the "
+"<b>File/Save as...</b> feature and store the file under a different name. "
+"Once confident with the result, feel free to delete the old file and rename "
+"the encrypted one to the old name."
+msgstr ""
+"Você ativou o suporte à criptografia GPG. Isto significa que os novos "
+"arquivos serão salvos criptografados. Arquivos existentes não serão "
+"criptografados automaticamente. Para criptografar arquivos existentes, por "
+"favor use o recurso <b>Arquivo/Salvar como...</b> e salve o arquivo com um "
+"nome diferente. Uma vez que esteja satisfeito com o resultado, sinta-se à "
+"vontade para excluir o arquivo antigo e renomear o criptografado com o nome "
+"antigo."
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid "GPG encryption activated"
+msgstr "Criptografia GPG ativada"
+
+#: dialogs/settings/ksettingshome.cpp:51
+msgid "&Up"
+msgstr "&Subir"
+
+#: dialogs/settings/ksettingshome.cpp:53
+msgid "Move selected item up"
+msgstr "Mover o item selecionado para cima"
+
+# TODO: Verify acima??
+#: dialogs/settings/ksettingshome.cpp:54
+msgid "Use this to move the selected item up by one position in the list."
+msgstr "Use isto para mover o item selecionado uma posição acima na lista."
+
+#: dialogs/settings/ksettingshome.cpp:55
+msgid "&Down"
+msgstr "&Descer"
+
+#: dialogs/settings/ksettingshome.cpp:57
+msgid "Move selected item down"
+msgstr "Mover o item selecionado para baixo"
+
+#: dialogs/settings/ksettingshome.cpp:58
+msgid "Use this to move the selected item down by one position in the list."
+msgstr "Use isto para mover o item selecionado uma posição abaixo na lista."
+
+#: dialogs/settings/rc.cpp:1
+msgid "Color settings"
+msgstr "Configurações de Cores"
+
+#: dialogs/settings/rc.cpp:2
+msgid "Foreground"
+msgstr "Principal"
+
+#: dialogs/settings/rc.cpp:3
+msgid "Text colors"
+msgstr "Cor do texto"
+
+#: dialogs/settings/rc.cpp:4
+msgid "Grid color"
+msgstr "Cor da grade"
+
+#: dialogs/settings/rc.cpp:5
+msgid "Erronous transaction"
+msgstr "Transação incorreta"
+
+#: dialogs/settings/rc.cpp:6
+msgid "Value with missing conversion rate"
+msgstr "Valor sem taxa de conversão"
+
+#: dialogs/settings/rc.cpp:7
+msgid "Negative value"
+msgstr "Valor negativo"
+
+#: dialogs/settings/rc.cpp:8
+msgid "Background"
+msgstr "Fundo"
+
+#: dialogs/settings/rc.cpp:10
+msgid "List background colors"
+msgstr "Lista as cores do fundo"
+
+#: dialogs/settings/rc.cpp:11
+msgid "Normal"
+msgstr "Normal"
+
+#: dialogs/settings/rc.cpp:12
+msgid "Alternate"
+msgstr "Alternar"
+
+#: dialogs/settings/rc.cpp:13
+msgid "Special background colors"
+msgstr "Cores de fundo especiais"
+
+#: dialogs/settings/rc.cpp:14
+msgid "Ledger group separator"
+msgstr "Separador de grupo do livro de registro"
+
+#: dialogs/settings/rc.cpp:15
+msgid "Required field"
+msgstr "Campo obrigatório"
+
+#: dialogs/settings/rc.cpp:16
+msgid "Imported transaction"
+msgstr "Transação importada"
+
+#: dialogs/settings/rc.cpp:17
+msgid "Matched transaction"
+msgstr "Transação correspondente"
+
+#: dialogs/settings/rc.cpp:18
+msgid "Font settings"
+msgstr "Configurações de fonte"
+
+#: dialogs/settings/rc.cpp:19
+msgid "Use system fonts"
+msgstr "Usar fontes do sistema"
+
+#: dialogs/settings/rc.cpp:20
+msgid "Individual font settings"
+msgstr "Configurações de fonte individuais"
+
+#: dialogs/settings/rc.cpp:24
+msgid "Number of Days of Account Cycle:"
+msgstr "Número de Dias do Ciclo da Conta:"
+
+#: dialogs/settings/rc.cpp:26
+msgid "Number of Days to Forecast:"
+msgstr "Número de Dias a Prever:"
+
+#: dialogs/settings/rc.cpp:27
+msgid "Forecast Method"
+msgstr "Método de Previsão"
+
+#: dialogs/settings/rc.cpp:28
+msgid "Scheduled and Future Transactions"
+msgstr "Transações Agendadas e Futuras"
+
+#: dialogs/settings/rc.cpp:29
+msgid "History-based"
+msgstr "Baseado no Histórico"
+
+#: dialogs/settings/rc.cpp:30
+msgid "History-based settings"
+msgstr "Configurações de Baseado no Histórico"
+
+#: dialogs/settings/rc.cpp:31
+msgid "Number of Cycles to use in Forecast:"
+msgstr "Número de Ciclos a usar na Previsão:"
+
+#: dialogs/settings/rc.cpp:36
+msgid "General Settings"
+msgstr "Configurações Gerais"
+
+#: dialogs/settings/rc.cpp:37
+msgid "Global"
+msgstr "Global"
+
+#: dialogs/settings/rc.cpp:38
+msgid "Startup page options"
+msgstr "Opções da página inicial"
+
+# TODO: Verify 'home'
+#: dialogs/settings/rc.cpp:39
+msgid "Start with homepage"
+msgstr "Iniciar com a página de inicio"
+
+#: dialogs/settings/rc.cpp:40
+msgid "Start with last selected view"
+msgstr "Iniciar com a última visão aberta"
+
+#: dialogs/settings/rc.cpp:41
+msgid "Precision settings"
+msgstr "Configurações de precisão"
+
+#: dialogs/settings/rc.cpp:42
+msgid "Price precision"
+msgstr "Precisão do preço"
+
+#: dialogs/settings/rc.cpp:43
+msgid "digits"
+msgstr "dígitos"
+
+#: dialogs/settings/rc.cpp:44
+msgid "Autosave options"
+msgstr "Opções de Salvamento Automático"
+
+#: dialogs/settings/rc.cpp:45
+msgid "Autosave periodically"
+msgstr "Auto-salvar periodicamente"
+
+#: dialogs/settings/rc.cpp:46
+msgid "minutes"
+msgstr "minutos"
+
+#: dialogs/settings/rc.cpp:47
+msgid "Fiscal Year"
+msgstr "Ano Fiscal"
+
+#: dialogs/settings/rc.cpp:48
+msgid "Your fiscal year starts on"
+msgstr "O ano fiscal começa em"
+
+#: dialogs/settings/rc.cpp:49
+msgid "January"
+msgstr "Janeiro"
+
+#: dialogs/settings/rc.cpp:50
+msgid "February"
+msgstr "Fevereiro"
+
+#: dialogs/settings/rc.cpp:51
+msgid "March"
+msgstr "Março"
+
+#: dialogs/settings/rc.cpp:52
+msgid "April"
+msgstr "Abril"
+
+#: dialogs/settings/rc.cpp:53
+msgid "May"
+msgstr "Maio"
+
+#: dialogs/settings/rc.cpp:54
+msgid "June"
+msgstr "Junho"
+
+#: dialogs/settings/rc.cpp:55
+msgid "July"
+msgstr "Julho"
+
+#: dialogs/settings/rc.cpp:56
+msgid "August"
+msgstr "Agosto"
+
+#: dialogs/settings/rc.cpp:57
+msgid "September"
+msgstr "Setembro"
+
+#: dialogs/settings/rc.cpp:58
+msgid "October"
+msgstr "Outubro"
+
+#: dialogs/settings/rc.cpp:59
+msgid "November"
+msgstr "Novembro"
+
+#: dialogs/settings/rc.cpp:60
+msgid "December"
+msgstr "Dezembro"
+
+#: dialogs/settings/rc.cpp:61
+msgid "Views"
+msgstr "Visões"
+
+#: dialogs/settings/rc.cpp:62
+msgid "Synchronize account selection of ledger and investment view"
+msgstr "Sincronizar seleção de conta do livro de registro e a visão de investimento"
+
+#: dialogs/settings/rc.cpp:63
+msgid ""
+"Check the views you want to enable, uncheck those you want to hide, because "
+"you don't need the functionality."
+msgstr ""
+"Selecione as visões que deseja ativar, desative as que deseja ocultar, "
+"porque você não precisa desta funcionalidade."
+
+#: dialogs/settings/rc.cpp:64
+msgid "Icon size of navigation bar"
+msgstr "Tamanho do ícone da barra de navegação"
+
+#: dialogs/settings/rc.cpp:65
+msgid "Micro (16px)"
+msgstr "Micro (16px)"
+
+#: dialogs/settings/rc.cpp:66
+msgid "Small (32px)"
+msgstr "Pequeno (32px)"
+
+#: dialogs/settings/rc.cpp:67
+msgid "Normal (48px)"
+msgstr "Normal (48px)"
+
+#: dialogs/settings/rc.cpp:68
+msgid "Large (64px)"
+msgstr "Grande (64px)"
+
+#: dialogs/settings/rc.cpp:69
+msgid "Show title bar on each page"
+msgstr "Mostrar a barra de título em cada página"
+
+#: dialogs/rc.cpp:835 dialogs/settings/rc.cpp:70
+msgid "Filter"
+msgstr "Filtro"
+
+#: dialogs/settings/rc.cpp:71
+msgid "Accounts / Categories"
+msgstr "Contas / Categorias"
+
+#: dialogs/settings/rc.cpp:72
+msgid "Don't show unused categories"
+msgstr "Não mostrar categorias não usadas"
+
+#: dialogs/settings/rc.cpp:73
+msgid ""
+"This option hides all categories in the categories view that are not used in "
+"at least a single transaction. They are still shown in the category "
+"selection lists."
+msgstr ""
+"Esta opção oculta todas as categorias na visão de categorias que não são "
+"usadas em pelo menos uma transação simples. Elas ainda serão mostradas nas "
+"listas de seleção de categorias."
+
+#: dialogs/settings/rc.cpp:74
+msgid "Don't show closed accounts"
+msgstr "Não exibir contas fechadas"
+
+#: dialogs/settings/rc.cpp:75
+msgid ""
+"This option hides all accounts that have been closed by the user in views "
+"and selection lists.\n"
+"\n"
+"You can use <b>View/Show all accounts</b> to temporarily show hidden "
+"accounts in the views."
+msgstr ""
+"Esta opção oculta todas as contas que foram fechadas pelo usuário nas visões "
+"e listas de seleção.\n"
+"\n"
+"Você pode usar <b>Ver/Mostrar todas as contas</b> para mostrar "
+"temporariamente todas as contas ocultas nas visões."
+
+#: dialogs/settings/rc.cpp:76
+msgid "Show equity accounts"
+msgstr "Mostras contas de ação ordinária"
+
+#: dialogs/rc.cpp:332 dialogs/settings/rc.cpp:77 widgets/rc.cpp:160
+msgid "Schedules"
+msgstr "Agendamentos"
+
+#: dialogs/settings/rc.cpp:78
+msgid "Don't show finished schedules"
+msgstr "Não mostrar agendamentos encerrados"
+
+#: dialogs/settings/rc.cpp:79
+msgid "This option hides all finished schedules in the schedules view."
+msgstr "Esta opção oculta todos os agendamentos encerrados na visão de agendamentos."
+
+#: dialogs/settings/rc.cpp:81
+msgid "Don't show transactions prior to"
+msgstr "Não mostrar transações anteriores a"
+
+#: dialogs/settings/rc.cpp:82
+msgid "Don't show reconciled transactions"
+msgstr "Não mostrar transações reconciliadas"
+
+#: dialogs/settings/rc.cpp:83
+msgid "This option hides all reconciled transactions in the ledger view."
+msgstr "Esta opção oculta todas as transações reconciliadas no livro de registos."
+
+#: dialogs/settings/rc.cpp:84 widgets/rc.cpp:22
+msgid "GPG encryption settings"
+msgstr "Configurações de criptografia GPG"
+
+#: dialogs/settings/rc.cpp:85
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Access to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>additional recovery encryption</i> is only accessible, if the "
+"necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id "
+"0x8AFDDC8E is found in your keyring."
+msgstr ""
+"Esta página permite configurar os parâmetros para criptografia de arquivo "
+"dos seus dados do <b>KMyMoney</b> baseada no <b>GPG</b>.<p>\n"
+"O acesso a estas configurações está desabilitado se o <b>GPG</b> não puder "
+"ser detectado em seu sistema. Neste caso, certifique-se de que o <b>GPG</b> "
+"está funcionando corretamente para o usuário atual.<p>\n"
+"O <i>criptografia de recuperação adicional</i> só está acessível se a chave "
+"necessária para o <b>kmymoney-recover@users.sourceforge.net</b> com ID "
+"0x8AFDDC8E for encontrada em seu chaveiro."
+
+#: dialogs/settings/rc.cpp:86 widgets/rc.cpp:24
+msgid "Use GPG encryption"
+msgstr "Usar criptografia GPG"
+
+#: dialogs/settings/rc.cpp:87
+msgid "GPG encryption"
+msgstr "Criptografia GPG"
+
+#: dialogs/settings/rc.cpp:88
+msgid "Your key"
+msgstr "Sua chave"
+
+#: dialogs/settings/rc.cpp:89
+msgid ""
+"This combo box lists all the secret keys you have in your keyring. Select "
+"the one you want to use for encryption when saving to a file."
+msgstr ""
+"Esta caixa lista todas as chaves secretas que você possui em seu chaveiro. "
+"Seleciona a que você deseja usar para criptografia ao salvar para um arquivo."
+
+#: dialogs/settings/rc.cpp:90
+msgid "Additonal keys"
+msgstr "Chaves adicionais"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:50 dialogs/settings/rc.cpp:91
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading 0x."
+msgstr ""
+"Insira o ID da chave que deseja usar para criptografia de dados. Isto pode "
+"ser tanto um endereço de e-mail ou uma chave hexadecimal da ID. No caso da "
+"chave da ID, não esqueça de precedê-la com o 0x."
+
+#: dialogs/settings/rc.cpp:92 widgets/rc.cpp:28
+msgid ""
+"This symbol denotes, if the key for the given user id has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"Este símbolo indica se a chave para a id de usuário fornecida foi encontrada "
+"em seu chaveiro. Está verde quando foi encontrada e preto no caso contrário."
+
+#: dialogs/kgpgkeyselectiondlg.cpp:61 dialogs/settings/rc.cpp:93
+msgid "Keys for all of the above user ids found"
+msgstr "Chaves encontradas para todas as IDs de usuário acima"
+
+#: dialogs/settings/rc.cpp:94 widgets/rc.cpp:31
+msgid ""
+"This symbol denotes, if the KMyMoney recovery key has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"Este símbolo indica se a chave de recuperação do KMyMoney foi encontrada em "
+"seu chaveiro. Está verde quando foi encontrada e preto no caso contrário."
+
+#: dialogs/settings/rc.cpp:95
+msgid "Recover Key available in keyring"
+msgstr "Chave de Recuperação disponível no chaveiro"
+
+#: dialogs/settings/rc.cpp:96
+msgid "Also encrypt with KMyMoney's recover key"
+msgstr "Também criptografar com a chave de recuperação do KMyMoney"
+
+#: dialogs/settings/rc.cpp:97
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out.."
+msgstr ""
+"Você pode especificar para criptografar os dados com a chave de recuperação "
+"do KMyMoney. Somente os desenvolvedores do núcleo do KMyMoney possuem a "
+"respectiva chave privada necessária para decriptografar os referidos dados."
+"<p>\n"
+"\n"
+"Este mecanismo é fornecido para o caso de que você tenha perdido sua chave e "
+"não possa acessar mais seus dados. Com esta opção ativada, os "
+"desenvolvedores do KMyMoney podem decriptografar os dados e fornecê-los para "
+"você em uma forma legível. Por favor, esteja preparado para responder "
+"algumas questões referentes o conteúdo de seus dados antes que nós possamos "
+"enviá-los para você."
+
+# TODO: Verify
+#: dialogs/settings/rc.cpp:98
+msgid "Homepage Settings"
+msgstr "Configurações da Página Inicial"
+
+#: dialogs/settings/rc.cpp:99
+msgid "Up"
+msgstr "Subir"
+
+#: dialogs/settings/rc.cpp:100
+msgid "Down"
+msgstr "Descer"
+
+#: dialogs/settings/rc.cpp:101
+msgid ""
+"Selected entries are shown on the home page of the application.<p>\n"
+"Use the buttons and checkboxes to customize the layout of the home page."
+msgstr ""
+"Entradas selecionadas serão mostradas na página inicial do aplicativo.<p>\n"
+"Use os botões e caixas para personalizar a aparência da página inicial."
+
+#: dialogs/settings/rc.cpp:102
+msgid "Homepage/Summary page font scaling"
+msgstr "Escalonamento de fonte na Página Inicial/Resumo"
+
+#: dialogs/settings/rc.cpp:103
+msgid "Percentage of default font size:"
+msgstr "Percentagem do tamanho da fonte padrão:"
+
+#: dialogs/settings/rc.cpp:104
+msgid ""
+"Remember font size when leaving the program if manually changed with mouse-"
+"wheel"
+msgstr ""
+"Recordar tamanho de fonte ao sair do programa se ele for alterado "
+"manualmente com a roda do mouse"
+
+#: dialogs/settings/rc.cpp:105
+msgid "Information display"
+msgstr "Informações exibidas"
+
+#: dialogs/settings/rc.cpp:106
+msgid "Show Account Limit Information"
+msgstr "Mostrar o Limite da Conta"
+
+#: dialogs/settings/rc.cpp:110 widgets/rc.cpp:47
+msgid ""
+"<i>Enter regular expressions which can be used to parse the data returned "
+"from the URL entered above. The symbol, price, and date must be found in "
+"the quote data to be usable. You may also try the KMyMoney user's "
+"mailinglist at <a href=\"mailto:kmymoney2-user@lists.sourceforge.net"
+"\">kmymoney2-user@lists.sourceforge.net</a> to find what settings work for "
+"other users in your country.</i>"
+msgstr ""
+"<i>Insira expressões regulares que podem ser usadas para analisar os dados "
+"obtidos da URL inserida acima. O símbolo, preço e data devem ser "
+"encontrados nos dados de cotação para que els possam ser usados. Você pode "
+"também acessar a lista de usuários do KMyMoney em <a href=\"mailto:kmymoney2-"
+"user@lists.sourceforge.net\">kmymoney2-user@lists.sourceforge.net</a> para "
+"encontrar que configurações funcionam para outros usuários do seu país.</i>"
+
+#: dialogs/settings/rc.cpp:113 widgets/rc.cpp:38
+msgid "Regular Expression to extract the symbol from the downloaded data"
+msgstr "Expreção Regular para extrair o símbolo dos dados obtidos"
+
+#: dialogs/settings/rc.cpp:114 widgets/rc.cpp:39
+msgid "Regular Expression to extract the price from the downloaded data"
+msgstr "Expressão Regular para extrair o preço dos dados obtidos"
+
+#: dialogs/settings/rc.cpp:115 widgets/rc.cpp:41
+msgid "URL to be used to download the quote"
+msgstr "URL a ser usada para obter a cotação"
+
+#: dialogs/settings/rc.cpp:116 widgets/rc.cpp:42
+msgid ""
+"Enter the URL from which stock quotes will be fetched. <b>%1</b> will be "
+"replaced with the symbol for the security being quoted. For currency "
+"conversions, <b>%2</b> will be replaced with the currency to be quoted and "
+"<b>%1</b> with the currency the quote is based on."
+msgstr ""
+"Insira a URL a partir da qual as cotações das ações serão obtidas. <b>%1</"
+"b> será substituído com o símbolo para a ação sendo cotada. Para conversões "
+"de moeda, <b>%2</b> será substituído com a moeda a ser contada e <b>%1</b> "
+"com a moeda cuja cotação se baseia."
+
+#: dialogs/settings/rc.cpp:118 dialogs/settings/rc.cpp:121 widgets/rc.cpp:40
+#: widgets/rc.cpp:44
+msgid "Regular Expression to extract the date from the downloaded data"
+msgstr "Expressão Regular para extrair a data dos dados obtidos"
+
+#: dialogs/rc.cpp:807 dialogs/settings/rc.cpp:119 widgets/rc.cpp:45
+msgid "Date Format"
+msgstr "Formato de Data"
+
+#: dialogs/settings/rc.cpp:122
+msgid "Skip HTML stripping"
+msgstr "Pular filtro HTML"
+
+#: dialogs/settings/rc.cpp:123
+msgid ""
+"<p>For easier processing of the data returned by the online source, KMyMoney "
+"usually strips unused parts before it is parsed with the regular "
+"expressions. If matching of the fields relies on those items, then use this "
+"option to turn stripping off.</p>\n"
+"\n"
+"<p>The following items are usually removed by stripping:\n"
+"\n"
+"<ul>\n"
+"<li>HTML tags such as <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded characters such as <b>&amp;nbsp;</b></li>\n"
+"<li>duplicate whitespace</li>\n"
+"</ul>\n"
+"</p>"
+msgstr ""
+"<p>Para o fácil processamento dos dados retornados pela fonte on-line, o "
+"KMyMoney normalmente filtra as partes sem uso antes de analisá-los com "
+"expressões regulares. Se a correspondência destes campos se baseia nestes "
+"itens, então use esta opção para desabilitar esta retirada.</p>\n"
+"\n"
+"<p>Os seguintes itens são normalmente removidos por este recurso:\n"
+"\n"
+"<ul>\n"
+"<li>Tags HTML como <b>&lt;tag&gt;</b></li>\n"
+"<li>caracteres & codificados como <b>&amp;nbsp;</b></li>\n"
+"<li>espaços em branco duplicados</li>\n"
+"</ul>\n"
+"</p>"
+
+#: dialogs/settings/rc.cpp:127
+msgid "Register settings"
+msgstr "Configurações do registro"
+
+#: dialogs/settings/rc.cpp:128
+msgid "Display"
+msgstr "Ver"
+
+#: dialogs/settings/rc.cpp:131
+msgid ""
+"Using the ledger lens shows the details for the transaction that has focus "
+"in the ledger. Usually, when using the transaction form, only a one line "
+"summary is displayed for each transaction as the details are shown in the "
+"form."
+msgstr ""
+"Usar a lupa do livro de registro mostra todos os detalhes para a transação "
+"que possui o foco no livro de registro. Normalmente, ao usar o formulário de "
+"transação, somente uma linha resumo é exibida para cada transação sendo os "
+"detalhes mostrados no formulário."
+
+#: dialogs/settings/rc.cpp:133
+msgid "Always show a No. field"
+msgstr "Sempre mostrar um campo Nr."
+
+#: dialogs/settings/rc.cpp:134
+msgid "Show group header between transactions"
+msgstr "Mostrar o cabeçalho de grupo entre as transações"
+
+#: dialogs/settings/rc.cpp:135
+msgid ""
+"Draws a larger header above each group of transaction. The grouping depends "
+"on the current sort order."
+msgstr ""
+"Desenha um grande cabeçalho acima de cada grupo da transação. O agrupamento "
+"depende da ordenação atual."
+
+#: dialogs/settings/rc.cpp:136
+msgid "Show header for the previous and current fiscal year"
+msgstr "Mostrar o cabeçalho para os anos fiscais atual e anterior"
+
+#: dialogs/settings/rc.cpp:137
+msgid "Sorting"
+msgstr "Ordenação"
+
+#: dialogs/settings/rc.cpp:138
+msgid "Normal view"
+msgstr "Visão normal"
+
+#: dialogs/settings/rc.cpp:139
+msgid "Reconciliation view"
+msgstr "Visão de reconciliação"
+
+#: dialogs/settings/rc.cpp:140
+msgid "Search view"
+msgstr "Visão de busca"
+
+#: dialogs/settings/rc.cpp:141
+msgid ""
+"Use the <i>left</i> and <i>right</i> buttons to add and remove sort options. "
+"Use the <i>up</i> and <i>down</i> buttons to modify the sort order. Double-"
+"Click a selected entry to toggle the sort order between <i>ascending</i> and "
+"<i>descending</i>."
+msgstr ""
+"Usar os botões <i> esquerda</i> e <i> direita</i> para adicionar e remover "
+"opções de ordenação. Usar os botões <i>acima</i> e <i>abaixo</i> para "
+"modificar o ordem de ordenação. Um clique-duplo em uma entrada selecionada "
+"alternará a ordenação entre <i>ascendente</i> e <i> descendente</i>."
+
+#: dialogs/settings/rc.cpp:142
+msgid "Data entry"
+msgstr "Entrada de dados"
+
+#: dialogs/settings/rc.cpp:146
+msgid "Use Enter to move between fields"
+msgstr "Use Enter para mover-se entre os campos"
+
+#: dialogs/settings/rc.cpp:147
+msgid "Match names from start"
+msgstr "Corresponder nomes do início"
+
+#: dialogs/settings/rc.cpp:148
+msgid ""
+"Mark this option, if you always want to match names e.g. for payees from the "
+"start. If unset, any substring is matched."
+msgstr ""
+"Marque esta opções se você deseja sempre corresponder nomes, por exemplo, "
+"dos beneficiários desde o início. Se desabilitado, qualquer sub-texto será "
+"correspondido."
+
+#: dialogs/settings/rc.cpp:149
+msgid "Default reconciliation state"
+msgstr "Estado de reconciliação padrão"
+
+#: dialogs/rc.cpp:227 dialogs/settings/rc.cpp:150
+#: widgets/kmymoneycombo.cpp:348 widgets/registersearchline.cpp:84
+msgid "Not reconciled"
+msgstr "Não reconciliado"
+
+#: dialogs/rc.cpp:228 dialogs/settings/rc.cpp:151
+#: widgets/kmymoneycombo.cpp:347 widgets/registersearchline.cpp:85
+msgid "Cleared"
+msgstr "Compensado"
+
+#: dialogs/settings/rc.cpp:153
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation "
+"of an account"
+msgstr ""
+"Estado de reconciliação padrão para transações inseridas durante a "
+"reconciliação de uma conta"
+
+#: dialogs/settings/rc.cpp:154
+msgid "Autofill"
+msgstr "Preencher automaticamente"
+
+#: dialogs/settings/rc.cpp:155
+msgid "No Autofill"
+msgstr "Não preencher automaticamente"
+
+#: dialogs/settings/rc.cpp:156
+msgid "Don't do autofill of transaction data at all."
+msgstr "Nunca preencher automaticamente os dados."
+
+#: dialogs/settings/rc.cpp:157
+msgid "Same transaction if amount differs less than"
+msgstr "Mesma transação se o valor diferir menos de"
+
+#: dialogs/settings/rc.cpp:158
+msgid ""
+"Collect all transactions for the given payee. Treat all transactions that "
+"refer to the same category and have an amount with +/- X % as identical. If "
+"more than one transaction is found, a list of them is presented to the "
+"user.\n"
+"\n"
+"Selecting 0% will list all transactions."
+msgstr ""
+"Coleta todas as transações para o beneficiário. Trata todas as transações "
+"que se referem à mesma categoria e de valor +/- X % como idênticas. Se mais "
+"de uma transação for encontrada, uma lista delas é proposta.\n"
+"\n"
+"Escolher 0% vai listar todas as transações."
+
+#: dialogs/settings/rc.cpp:159
+msgid ""
+"Two transactions are usually treated identical for autofill, if they refer "
+"the same accounts. They are treated as different transactions though, when "
+"their amount varies by more than the percentage given here."
+msgstr ""
+"Duas transações normalmente são consideradas idêntica para auto-"
+"preenchimento se elas referem-se à mesma conta. Elas são tratadas como "
+"transações diferentes quando seus valores variem mais do que a porcentagem "
+"fornecida aqui."
+
+#: dialogs/settings/rc.cpp:160
+msgid ""
+"_: Same transaction if amount differs less than percent.\n"
+"percent."
+msgstr "porcento."
+
+#: dialogs/settings/rc.cpp:161
+msgid "with previously most often used transaction for the payee"
+msgstr "com a transação anterior mais usada para o beneficiário"
+
+#: dialogs/settings/rc.cpp:162
+msgid ""
+"The data of the last transaction assigned to the category used most often "
+"for this payee is autofilled into the transaction editor."
+msgstr ""
+"Os dados da última transação atribuída à categoria mais utilizada para o "
+"beneficiário são preenchidos automaticamente no editor de transações."
+
+#: dialogs/settings/rc.cpp:164
+msgid "Match transactions within days"
+msgstr "Corresponder transações nos dias"
+
+#: dialogs/settings/rc.cpp:165
+msgid ""
+"Search for matching transactions within the range of the posting date of the "
+"imported transaction +/- the number of given days."
+msgstr ""
+"Procura para transações correspondentes dentro de um intervalo de data de "
+"postagem da transação importada +/- o número de dias fornecidos."
+
+#: dialogs/settings/rc.cpp:166
+msgid "Ask for a new payee's default category"
+msgstr "Solicite por uma nova categoria padrão do beneficiário"
+
+#: dialogs/settings/rc.cpp:167
+msgid ""
+"Whenever a new payee is detected during import of a statement, the user will "
+"be asked to assign a default category for this user when this option is "
+"selected."
+msgstr ""
+"Sempre que um novo beneficiário é detectado durante a importação de um "
+"extrato, o usuário será solicitado para atribuir uma categoria padrão para "
+"este usuário quando esta opção estiver selecionada."
+
+#: dialogs/settings/rc.cpp:168
+msgid "Schedule Settings"
+msgstr "Configurações de Agendamento"
+
+#: dialogs/settings/rc.cpp:169
+msgid "Startup options"
+msgstr "Opções de inicialização"
+
+#: dialogs/settings/rc.cpp:170
+msgid "Check schedules on startup"
+msgstr "Verificar agendamentos na inicialização"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:60
+#: widgets/kmymoneyonlinequoteconfig.cpp:60
+msgid "Delete the selected source entry"
+msgstr "Remover a entrada de fonte selecionada"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:61
+#: widgets/kmymoneyonlinequoteconfig.cpp:61
+msgid "Use this to delete the selected online source entry"
+msgstr "Use isto para remover a entrada de fonte de cotação online selecionada"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:66
+#: widgets/kmymoneyonlinequoteconfig.cpp:66
+msgid "Create a new source entry for online quotes"
+msgstr "Criar uma nova entrada de fonte para cotações online"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:67
+#: widgets/kmymoneyonlinequoteconfig.cpp:67
+msgid "Use this to create a new entry for online quotes"
+msgstr "Use isto para criar uma nova entrada para cotações onine"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:107
+#: dialogs/settings/ksettingsonlinequotes.cpp:190
+#: dialogs/settings/ksettingsonlinequotes.cpp:193
+#: dialogs/settings/ksettingsonlinequotes.cpp:216
+#: widgets/kmymoneyonlinequoteconfig.cpp:107
+#: widgets/kmymoneyonlinequoteconfig.cpp:185
+#: widgets/kmymoneyonlinequoteconfig.cpp:188
+#: widgets/kmymoneyonlinequoteconfig.cpp:211
+msgid "New Quote Source"
+msgstr "Nova Fonte de Cotação"
+
+# TODO: Verify
+#: dialogs/ksplittransactiondlg.cpp:77 dialogs/rc.cpp:788
+msgid "Clear &All"
+msgstr "Limpar &Tudo"
+
+#: dialogs/ksplittransactiondlg.cpp:79
+msgid "Clear all splits"
+msgstr "Limpar todas parcelas"
+
+#: dialogs/ksplittransactiondlg.cpp:80
+msgid "Use this to clear all splits of this transaction"
+msgstr "Use isto para limpar todas as parcelas desta transação"
+
+#: dialogs/ksplittransactiondlg.cpp:84
+msgid "&Merge"
+msgstr "&Mesclar"
+
+#: dialogs/ksplittransactiondlg.cpp:183
+msgid ""
+"The total amount of this transaction is %1 while the sum of the splits is %"
+"2. The remaining %3 are unassigned."
+msgstr ""
+"O montante total desta transação é %1 enquanto a soma das parcelas é %2. Os %"
+"3 restantes estão sem atribuição."
+
+#: dialogs/ksplittransactiondlg.cpp:191
+#, c-format
+msgid "Change &total amount of transaction to %1."
+msgstr "Modificar a quantia &total da transação para %1."
+
+#: dialogs/ksplittransactiondlg.cpp:194
+msgid "&Distribute difference of %1 among all splits."
+msgstr "&Distribuir a diferença de %1 entre todas as parcelas."
+
+#: dialogs/ksplittransactiondlg.cpp:203
+#, c-format
+msgid "&Leave total amount of transaction at %1."
+msgstr "Deixar o va&lor total da transação em %1."
+
+#: dialogs/ksplittransactiondlg.cpp:205
+msgid "&Leave %1 unassigned."
+msgstr "D&eixar %1 sem atribuição."
+
+#: dialogs/ksplittransactiondlg.cpp:275
+msgid ""
+"You are about to delete all splits of this transaction. Do you really want "
+"to continue?"
+msgstr ""
+"Você está para apagar todas as parcelas desta transação. Você realmente "
+"deseja continuar?"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:97
+msgid "Use this to create a new QIF import/export profile"
+msgstr "Use isto para criar um novo perfil de importação/exportação QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:148
+#: dialogs/mymoneyqifprofileeditor.cpp:403 dialogs/rc.cpp:797
+msgid "QIF Profile Editor"
+msgstr "Editor de Perfil QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:150
+msgid "QIF Profile Selector"
+msgstr "Seletor de Perfil QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:236
+msgid "The default QIF profile"
+msgstr "O perfil QIF padrão"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:404
+#: dialogs/mymoneyqifprofileeditor.cpp:417
+msgid "Enter new profile name"
+msgstr "Entre com o nome do novo perfil"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:436
+msgid "Do you really want to delete profile '%1'?"
+msgstr "Você deseja realmente apagar o perfil '%1'?"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:38
+msgid "Select additional keys"
+msgstr "Selecionar chaves adicionais"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:48 widgets/rc.cpp:25
+msgid "User identification"
+msgstr "Identificação do usuário"
+
+#: dialogs/kendingbalancedlg.cpp:71
+msgid ""
+"Please enter the following fields with the information as you find them on "
+"your statement. Make sure to enter all values in <b>%1</b>."
+msgstr ""
+"Por favos, preencha os campos a seguir com as informações que você encontrou "
+"em seu extrato. Certifique-se de inserir todos os valores em <b>%1</b>."
+
+#: dialogs/kendingbalancedlg.cpp:124
+#, c-format
+msgid "Last reconciled statement: %1"
+msgstr "Último extrato reconciliado: %1"
+
+#: dialogs/kendingbalancedlg.cpp:437 dialogs/kendingbalancedlg.cpp:577
+#: dialogs/rc.cpp:137
+msgid "Adjustment transaction"
+msgstr "Transação de ajuste"
+
+#: dialogs/kendingbalancedlg.cpp:510
+msgid ""
+"KMyMoney has calculated the following amounts for interest and amortization "
+"according to recorded payments between %1 and %2."
+msgstr ""
+"O KMyMoney calculou os seguintes montantes para juros e amortização de "
+"acordo com os pagamentos registrados entre %1 e %2."
+
+#: dialogs/kbalancechartdlg.cpp:59
+#, c-format
+msgid "Balance of %1"
+msgstr "Balanço de %1"
+
+#: dialogs/kbalancechartdlg.cpp:70
+msgid "%1 Balance History"
+msgstr "%1 Balanço Histórico"
+
+#: dialogs/kmymoneysplittable.cpp:98
+msgid "Split Options"
+msgstr "Opções de Parcela"
+
+#: dialogs/kmymoneysplittable.cpp:99 dialogs/rc.cpp:731
+#: widgets/kmymoneypriceview.cpp:149
+msgid "Edit..."
+msgstr "Editar..."
+
+#: dialogs/kmymoneysplittable.cpp:100
+msgid "Duplicate"
+msgstr "Duplicar"
+
+#: dialogs/kmymoneysplittable.cpp:102
+msgid "Delete ..."
+msgstr "Apagar ..."
+
+#: dialogs/kmymoneysplittable.cpp:275
+msgid ""
+"_: Duplicate split\n"
+"CTRL+c"
+msgstr "CTRL+c"
+
+# TODO: Verify (calculada?)
+#: dialogs/kmymoneysplittable.cpp:562
+msgid "will be calculated"
+msgstr "será calculado"
+
+#: dialogs/kmymoneysplittable.cpp:648
+msgid "You are about to delete the selected split. Do you really want to continue?"
+msgstr ""
+"Você está prestes a remover a parcela selecionada. Você realmente deseja "
+"continuar?"
+
+#: dialogs/rc.cpp:1
+msgid "Account selection"
+msgstr "Seleção de conta"
+
+# Verify: Conta destino seria melhor?
+#: dialogs/rc.cpp:3
+msgid "Account to import to"
+msgstr "Conta para a qual importar"
+
+#: dialogs/rc.cpp:6 dialogs/rc.cpp:170 widgets/rc.cpp:169
+msgid "Skip"
+msgstr "Saltar"
+
+# TODO: Verify
+#: dialogs/rc.cpp:8
+msgid ""
+"Use this dialog to backup your data. \n"
+"\n"
+"Please make sure you have a disk inserted and that the drive is ready. Then "
+"choose the mount point from either the Choose button or by entering the path "
+"in the available box.\n"
+"\n"
+"Click OK to perform the backup. If your system does not use an automounter, "
+"make sure you mark the checkbox below to \"mount this directory before "
+"backing up.\""
+msgstr ""
+"Use este diálogo para fazer uma cópia de segurança dos seus dados.\n"
+"\n"
+"Por favor, certifique-se de que você possui um disquete inserido e que o "
+"drive está pronto. Então, escolha o ponto de montagem através do botão "
+"Escolher ou inserindo o caminho na caixa disponível.\n"
+"\n"
+"Clique em OK para realizar a cópia de segurança. Se o seu sistema não usa um "
+"montador automático, habilite a opção \"montar este diretório antes de "
+"realizar a cópia de segurança.\""
+
+#: dialogs/rc.cpp:9
+msgid "Device options"
+msgstr "Opções de dispositivo"
+
+#: dialogs/rc.cpp:10
+msgid ""
+"_: This is the mount point\n"
+"Mount Point:"
+msgstr "Ponto de Montagem:"
+
+#: dialogs/rc.cpp:11
+msgid "Choose..."
+msgstr "Escolher..."
+
+#: dialogs/rc.cpp:12
+msgid "Mount this directory before backing up."
+msgstr "Montar este diretório antes de fazer a cópia de segurança."
+
+#: dialogs/rc.cpp:15
+msgid "Reassign categories"
+msgstr "Reatribuir categorias"
+
+#: dialogs/rc.cpp:16
+msgid ""
+"The transactions, schedules and budgets associated with the selected "
+"category need to be re-assigned to a different category before the selected "
+"category can be deleted. Please select a category from the list below."
+msgstr ""
+"As transações, agendamentos e orçamentos associados com categoria "
+"selecionada precisam ser re-atribuídas antes que a categoria selecionada "
+"possa ser removida. Por favor, selecione uma categoria na lista abaixo."
+
+#: dialogs/rc.cpp:17
+msgid "Available categories:"
+msgstr "Categorias disponíveis:"
+
+#: dialogs/rc.cpp:21
+msgid ""
+"Please choose the type of import you wish to perform. A simple "
+"explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Por favor, escolha o tipo de importação que você deseja fazer. Uma "
+"explicação simples sobre o tipo está disponível na parte inferior da tela e "
+"é atualizada quando você seleciona um item na caixa de escolha.\n"
+"\n"
+"Uma vez que você tenha escolhido o tipo, por favor pressione o botão OK."
+
+#: dialogs/rc.cpp:23
+msgid "QIF"
+msgstr "QIF"
+
+#: dialogs/rc.cpp:24
+msgid "CSV"
+msgstr "CSV"
+
+#: dialogs/rc.cpp:25
+msgid "Some descripton"
+msgstr "Alguma descrição"
+
+#: dialogs/rc.cpp:28
+msgid "Confirm Manual Enter"
+msgstr "Confirmar Entrada Manual"
+
+#: dialogs/rc.cpp:29
+msgid "The following changes have been made to the transaction data:"
+msgstr "As seguintes modificações foram feitas aos dados da transação:"
+
+#: dialogs/rc.cpp:30
+msgid "Please choose what you wish to do with the above changes"
+msgstr "Por favor, escolha o que você deseja fazer com as mudanças acima"
+
+#: dialogs/rc.cpp:31
+msgid "Discard the changes and enter the original transaction into the register."
+msgstr "Descartar as mudanças e inserir a transação original no registro."
+
+#: dialogs/rc.cpp:32
+msgid "Enter these new values this one time, for this occurence only."
+msgstr "Inserir estes novos valores desta vez, para esta ocorrência somente."
+
+#: dialogs/rc.cpp:33
+msgid "Set all further occurences in this schedule to be these values."
+msgstr "Usar estes valores para todas as demais ocorrências deste agendamento."
+
+#: dialogs/rc.cpp:36
+msgid "CSV Dialog"
+msgstr "CSV"
+
+#: dialogs/rc.cpp:37
+msgid ""
+"CSV Dialog. Choose a file and then click on Run. You can view your "
+"progress at\n"
+"the bottom of the screen.\n"
+"\n"
+"You can cancel the process at any time by clicking on the Cancel button."
+msgstr ""
+"Diálogo CSV. Escolha um arquivo e então clique em Proceder. Você pode "
+"visualizar o seu progresso na parte inferior da janela.\n"
+"\n"
+"Você pode cancelar o processo a qualquer momento clicando no botão Cancelar."
+
+#: dialogs/rc.cpp:38
+msgid "Choose the csv file:"
+msgstr "Escolha o arquivo csv:"
+
+#: dialogs/rc.cpp:39
+msgid "Browse"
+msgstr "Navegar"
+
+#: dialogs/rc.cpp:40
+msgid "Between These Dates"
+msgstr "Entre estas Datas"
+
+#: dialogs/rc.cpp:41 dialogs/rc.cpp:196
+msgid "Start on:"
+msgstr "Inicia em:"
+
+#: dialogs/rc.cpp:42 dialogs/rc.cpp:195
+msgid "End on:"
+msgstr "Finaliza em:"
+
+#: dialogs/rc.cpp:43
+msgid "Run"
+msgstr "Proceder"
+
+#: dialogs/rc.cpp:44
+msgid "Progress Info"
+msgstr "Informações do Progresso"
+
+#: dialogs/rc.cpp:45
+msgid "Processing Account:"
+msgstr "Conta Processada:"
+
+#: dialogs/rc.cpp:47
+msgid "Processing Transaction:"
+msgstr "Transação Processada:"
+
+#: dialogs/rc.cpp:48
+msgid "0 of 0"
+msgstr "0 de 0"
+
+#: dialogs/rc.cpp:50
+msgid "Exchange Rate/Price Editor"
+msgstr "Editor da Taxa de Câmbio/Preço"
+
+#: dialogs/rc.cpp:55
+msgid "Convert from"
+msgstr "Converter de"
+
+#: dialogs/rc.cpp:58
+msgid "Convert to"
+msgstr "Converter para"
+
+#: dialogs/rc.cpp:61
+msgid "To amount"
+msgstr "Para a quantia"
+
+#: dialogs/rc.cpp:62
+msgid "Exchange rate / Price"
+msgstr "Taxa de câmbio / Preço"
+
+#: dialogs/rc.cpp:64
+msgid ""
+"xx\n"
+"xx"
+msgstr ""
+"xx\n"
+"xx"
+
+#: dialogs/rc.cpp:68
+msgid "Currencies"
+msgstr "Moedas"
+
+#: dialogs/rc.cpp:72
+msgid "real ID"
+msgstr "ID real"
+
+#: dialogs/rc.cpp:73 dialogs/rc.cpp:722
+msgid "ID"
+msgstr "ID"
+
+#: dialogs/rc.cpp:74
+msgid "X"
+msgstr "X"
+
+#: dialogs/rc.cpp:76 dialogs/rc.cpp:459
+msgid "Online Source"
+msgstr "Fonte Online"
+
+#: dialogs/rc.cpp:78 dialogs/rc.cpp:278 dialogs/rc.cpp:312 dialogs/rc.cpp:684
+msgid "F1"
+msgstr "F1"
+
+#: dialogs/rc.cpp:80
+msgid "If this button is not activated, select the base currency first."
+msgstr "Se este botão não estiver ativado, seleciona a moeda base primeiro."
+
+#: dialogs/rc.cpp:81
+msgid ""
+"Press this button to close the dialog. If the button is not activated, "
+"select your base currency."
+msgstr ""
+"Pressione este botão para fechar o diálogo. Se o botão não estiver ativado, "
+"selecione sua moeda base."
+
+#: dialogs/rc.cpp:82
+msgid "Edit Equity"
+msgstr "Editar Ação Ordinária"
+
+#: dialogs/rc.cpp:86 dialogs/rc.cpp:410
+msgid "Smallest fraction:"
+msgstr "Menor fração:"
+
+#: dialogs/rc.cpp:87 dialogs/rc.cpp:408 dialogs/rc.cpp:440
+msgid "1 /"
+msgstr "1 /"
+
+#: dialogs/rc.cpp:88 dialogs/rc.cpp:405
+msgid "Investment Type:"
+msgstr "Tipo de Investimento:"
+
+# TODO: Verify
+#: dialogs/rc.cpp:89 dialogs/rc.cpp:404
+msgid "Equity Name:"
+msgstr "Nome da Ação:"
+
+# TODO: Verify
+#: dialogs/rc.cpp:90 dialogs/rc.cpp:409
+msgid "Market Symbol:"
+msgstr "Símbolo de Mercado:"
+
+#: dialogs/rc.cpp:91
+msgid "Price History"
+msgstr "Histórico de Preços"
+
+#: dialogs/rc.cpp:97
+msgid "Edit Scheduled transaction"
+msgstr "Editar transação agendada"
+
+#: dialogs/rc.cpp:98
+msgid "Schedule name:"
+msgstr "Nome do agendamento:"
+
+#: dialogs/rc.cpp:99
+msgid "Frequency:"
+msgstr "Frequência:"
+
+#: dialogs/rc.cpp:100
+msgid "Number of selected periods between entries"
+msgstr "Número de períodos selecionados entre as entradas"
+
+#: dialogs/rc.cpp:101
+msgid "Payment information"
+msgstr "Informação do pagamento"
+
+#: dialogs/rc.cpp:105 dialogs/rc.cpp:160 dialogs/rc.cpp:247 dialogs/rc.cpp:752
+#: widgets/register.cpp:569
+msgid "C"
+msgstr "C"
+
+#: dialogs/rc.cpp:113
+msgid "Do nothing"
+msgstr "Não fazer nada"
+
+#: dialogs/rc.cpp:116
+msgid "If this schedule occurs on the weekend:"
+msgstr "Se este agendamento ocorrer no final de semana:"
+
+#: dialogs/rc.cpp:117
+msgid "The amount is an estimate because it varies for each payment"
+msgstr "A quantia é uma estimativa porque varia a cada pagamento"
+
+# TODO: Verify
+#: dialogs/rc.cpp:118
+msgid "Enter this schedule into the register automatically when it is due"
+msgstr "Inserir este agendamento no registro automaticamente quando for devido"
+
+#: dialogs/rc.cpp:119
+msgid "This schedule will end at some time"
+msgstr "Este agendamento se encerrará algum dia"
+
+#: dialogs/rc.cpp:120
+msgid "Number of transactions remaining:"
+msgstr "Número de transações remanescentes:"
+
+#: dialogs/rc.cpp:121
+msgid "Date of final transaction:"
+msgstr "Data da transação final:"
+
+#: dialogs/rc.cpp:125
+msgid "Reconciliation Wizard"
+msgstr "Assistente de Reconciliação"
+
+#: dialogs/rc.cpp:127
+msgid ""
+"Reconciling your account assures, that your recordings match those of your "
+"institution and that there are no mistakes on either side. You should "
+"reconcile your account whenever you receive a statement from your "
+"institution.\n"
+"\n"
+"All relevant information necessary for this process is usually printed on "
+"your statement.\n"
+"\n"
+"On the next page you will verify, that the starting and ending balance are "
+"matching those on your statement. If not, please modify the figures."
+msgstr ""
+"Reconciliar sua conta garante que seus registros correspondem aos de sua "
+"instituição e que não existem erros em ambos os lados. Você deve reconciliar "
+"sua conta sempre que receber um extrato de sua instituição.\n"
+"\n"
+"Todas as informações relevantes necessárias para este processo são "
+"normalmente impressas no seu extrato.\n"
+"\n"
+"Na próxima página você verificará se o saldo inicial e final correspondem ao "
+"do seu extrato. Caso contrário, por favor ajuste os valores."
+
+#: dialogs/rc.cpp:129
+msgid ""
+"KMyMoney calculates your loan payments automatically. The amounts can "
+"deviate from those calculated by the creditor. Therefore, you possibly have "
+"to adjust amortization, interest and other costs according to your "
+"statement.\n"
+"\n"
+"Please enter the following information found on your statement:"
+msgstr ""
+"O KMyMoney calcula automaticamente os pagamentos do seu financiamento. Os "
+"montantes podem desviar daqueles calculados pelo seu credor. Portanto, você "
+"possivelmente terá que ajustar a amortização, os juros e outros custos, de "
+"acordo com o seu extrato.\n"
+"\n"
+"Por favor, entre com as seguintes informações encontradas no seu extrato:"
+
+#: dialogs/rc.cpp:130
+msgid "Ending date of statement"
+msgstr "Data final do extrato"
+
+#: dialogs/rc.cpp:131
+msgid "Starting date of statement"
+msgstr "Data inicial do extrato"
+
+#: dialogs/rc.cpp:132
+msgid "Verify payments"
+msgstr "Verificar pagamentos"
+
+#: dialogs/rc.cpp:133 dialogs/rc.cpp:148 dialogs/rc.cpp:476 dialogs/rc.cpp:477
+#: dialogs/rc.cpp:508 dialogs/rc.cpp:513 dialogs/rc.cpp:518 dialogs/rc.cpp:532
+#: dialogs/rc.cpp:539 dialogs/rc.cpp:540 dialogs/rc.cpp:541 dialogs/rc.cpp:542
+#: dialogs/rc.cpp:543 dialogs/rc.cpp:552 dialogs/rc.cpp:553 dialogs/rc.cpp:554
+#: dialogs/rc.cpp:555 dialogs/rc.cpp:556 dialogs/rc.cpp:565 dialogs/rc.cpp:566
+#: dialogs/rc.cpp:567 dialogs/rc.cpp:568 dialogs/rc.cpp:569 dialogs/rc.cpp:578
+#: dialogs/rc.cpp:579 dialogs/rc.cpp:580 dialogs/rc.cpp:581 dialogs/rc.cpp:582
+#: dialogs/rc.cpp:591 dialogs/rc.cpp:592 dialogs/rc.cpp:593 dialogs/rc.cpp:594
+#: dialogs/rc.cpp:595 dialogs/rc.cpp:603 dialogs/rc.cpp:604 dialogs/rc.cpp:605
+#: dialogs/rc.cpp:606 dialogs/rc.cpp:607 dialogs/rc.cpp:618 dialogs/rc.cpp:619
+#: dialogs/rc.cpp:621 dialogs/rc.cpp:636 dialogs/rc.cpp:637 dialogs/rc.cpp:638
+#: dialogs/rc.cpp:639 dialogs/rc.cpp:640 dialogs/rc.cpp:641 dialogs/rc.cpp:651
+#: dialogs/rc.cpp:652 dialogs/rc.cpp:654 dialogs/rc.cpp:657 dialogs/rc.cpp:658
+#: dialogs/rc.cpp:659 dialogs/rc.cpp:664 dialogs/rc.cpp:665 dialogs/rc.cpp:668
+#: dialogs/rc.cpp:670 dialogs/rc.cpp:672 dialogs/rc.cpp:674 dialogs/rc.cpp:676
+#: dialogs/rc.cpp:678 dialogs/rc.cpp:681 dialogs/rc.cpp:823 widgets/rc.cpp:167
+msgid "1"
+msgstr "1"
+
+#: dialogs/rc.cpp:136
+msgid ""
+"If your statement shows different amounts, please cancel this dialog and "
+"correct the false transactions or correct the values in this dialog. In the "
+"later case, KMyMoney will create an adjustment transaction and add it to the "
+"ledger."
+msgstr ""
+"Se o seu extrato mostra diferentes montantes, por favor cancele este diálogo "
+"e corrija as falsas transações ou então os valores neste diálogo. Em último "
+"caso, o KMyMoney irá criar uma transação de ajuste e adicioná-la ao livro de "
+"registros."
+
+#: dialogs/rc.cpp:138
+msgid ""
+"In order to create the adjustment transaction, KMyMoney requires an account "
+"and possibly an interest category to assign the differences to. Please "
+"select an account and - if necessary - a category."
+msgstr ""
+"Com o objetivo de criar a transação de ajuste, o KMyMoney requer uma conta e "
+"possivelmente uma categoria de juros para a qual atribuir as diferenças. Por "
+"favor, selecione uma conta e, se necessário, uma categoria."
+
+#: dialogs/rc.cpp:140
+msgid "Interest-Category"
+msgstr "Juros-Categoria"
+
+#: dialogs/rc.cpp:141
+msgid "Restarting postponed reconciliation"
+msgstr "Reiniciando reconciliação adiada"
+
+#: dialogs/rc.cpp:142
+msgid ""
+"You have previously postponed the reconciliation of this account. If you "
+"have entered charges or interests the last time you started reconciling this "
+"account you can modify these in the ledger later on.\n"
+"\n"
+"It is important, that you continue with the same statement you used when you "
+"postponed the reconciliation.\n"
+"\n"
+"All information you have entered into this wizard will be shown and all "
+"transactions that you already cleared are marked with a 'C'."
+msgstr ""
+"Anteriormente, você adiou a reconciliação desta conta. Se você introduziu "
+"taxas ou juros a última vez que iniciou a reconciliação desta conta, você "
+"pode modificá-los no livro de registros mais tarde.\n"
+"\n"
+"É importante que você continue com o mesmo extrato usado quando você adiou a "
+"reconciliação.\n"
+"\n"
+"Todas as informações que você introduziu neste assistente serão mostradas e "
+"todas as transações que você já marcou como compensadas estão marcadas com "
+"'C'."
+
+#: dialogs/rc.cpp:143
+msgid "Statement Information"
+msgstr "Informações do Extrato"
+
+#: dialogs/rc.cpp:144 dialogs/rc.cpp:315 dialogs/rc.cpp:317 dialogs/rc.cpp:320
+#: dialogs/rc.cpp:321 dialogs/rc.cpp:329 dialogs/rc.cpp:330 dialogs/rc.cpp:333
+#: dialogs/rc.cpp:334 dialogs/rc.cpp:335 dialogs/rc.cpp:336 dialogs/rc.cpp:366
+msgid "x"
+msgstr "x"
+
+#: dialogs/rc.cpp:145
+msgid "Statement date:"
+msgstr "Data do extrato:"
+
+#: dialogs/rc.cpp:146
+msgid "Starting balance of this statement:"
+msgstr "Saldo inicial deste extrato:"
+
+#: dialogs/rc.cpp:147
+msgid "Ending balance of this statement:"
+msgstr "Saldo final deste extrato:"
+
+#: dialogs/rc.cpp:149
+msgid "Interest / Charges"
+msgstr "Juros / Encargos"
+
+#: dialogs/rc.cpp:150
+msgid ""
+"If necessary, enter information about interest or charges here. KMyMoney "
+"will create transactions and clear them directly for you."
+msgstr ""
+"Se necessário, insira informações sobre juros e taxas aqui. O KMyMoney "
+"criará as transações e e as conciliará diretamente para você."
+
+#: dialogs/rc.cpp:153
+msgid "Charges"
+msgstr "Encargos"
+
+#: dialogs/rc.cpp:154
+msgid "Enter Schedule"
+msgstr "Inserir Agendamento"
+
+#: dialogs/rc.cpp:155
+msgid "Schedule Details"
+msgstr "Detalhes do Agendamento"
+
+#: dialogs/rc.cpp:156 dialogs/rc.cpp:348 dialogs/rc.cpp:389 widgets/rc.cpp:164
+msgid "Name:"
+msgstr "Nome:"
+
+#: dialogs/rc.cpp:157 dialogs/rc.cpp:351 widgets/rc.cpp:165
+msgid "Type:"
+msgstr "Tipo:"
+
+#: dialogs/rc.cpp:168
+msgid "Enter"
+msgstr "Aceitar"
+
+#: dialogs/rc.cpp:169
+msgid ""
+"Enter the transaction and advance the next due date of this schedule to the "
+"next payment date."
+msgstr "Inserir o agendamento e avançar a data do próximo pagamento para o seguinte."
+
+#: dialogs/rc.cpp:171
+msgid ""
+"Do not enter the transaction but advance the next due date of this schedule "
+"to the next payment date."
+msgstr ""
+"Não inserir os pagamentos deste agendamento e avançar a data do próximo "
+"pagamento para o seguinte."
+
+#: dialogs/rc.cpp:172
+msgid "Ignore"
+msgstr "Ignorar"
+
+#: dialogs/rc.cpp:173
+msgid ""
+"Do not enter or skip payments for this schedule but continue with the next "
+"schedule."
+msgstr ""
+"Não inserir ou saltar os pagamentos deste agendamento e continuar com o "
+"agendamento seguinte."
+
+#: dialogs/rc.cpp:175
+msgid "Cancel processing of schedule entry."
+msgstr "Cancelar o processamento deste agendamento."
+
+#: dialogs/rc.cpp:176
+msgid "Update Stock and Currency Prices"
+msgstr "Atualizar Preço e Moeda da Ação"
+
+#: dialogs/rc.cpp:177
+msgid "List of known Equities, and the date they were last updated on."
+msgstr "Lista de Ações conhecidas, e a data da última atualização de valor."
+
+#: dialogs/rc.cpp:179
+msgid "Update All"
+msgstr "Atualizar Tudo"
+
+#: dialogs/rc.cpp:180
+msgid "Update Selected"
+msgstr "Atualizar Selecionados"
+
+#: dialogs/rc.cpp:181
+msgid "Status:"
+msgstr "Estado:"
+
+#: dialogs/rc.cpp:184
+msgid "QIF Export"
+msgstr "Exportar QIF"
+
+#: dialogs/rc.cpp:185
+msgid ""
+"From this dialog you are able to export transactions to a quicken compatible "
+"file, (known as a QIF file, because of the extension). Please enter the "
+"path to the QIF file or select it by clicking on the Browse button.\n"
+"\n"
+"You can choose the file's path, the account and the format of the QIF file "
+"(profile). Choose Account to export all the transactions between the "
+"specified dates or just categories. You can also limit the transactions "
+"that are exported by start and ending date. Once you have pressed the "
+"Export button a message box will appear when the export has completed "
+"detailing how many transactions, categories and payees were exported."
+msgstr ""
+"A partir deste diálogo você será capaz de exportar transações para um "
+"arquivo compatível com Quicken (conhecido com arquivo QIF, por causa de sua "
+"extensão). Por favor, entre com o caminho para o arquivo QIF ou selecione-o "
+"clicando no botão Navegar.\n"
+"\n"
+"Você pode escolher o caminho do arquivo, a conta e o formato do arquivo QIF "
+"(perfil). Escolha a conta para exportar todas as transações entre as datas "
+"especificadas ou apenas as categorias. Você pode também limitar as "
+"transações que são exportadas pelas datas inicial e final. Pressionando o "
+"botão Exportar, quando a exportação estiver completa uma caixa de mensagem "
+"irá aparecer detalhando quantas transações, categorias e beneficiários foram "
+"exportados."
+
+#: dialogs/rc.cpp:186
+msgid "File to export to:"
+msgstr "Arquivo para o qual exporta:"
+
+#: dialogs/rc.cpp:188
+msgid "Account to export"
+msgstr "Conta a exportar"
+
+#: dialogs/rc.cpp:189 dialogs/rc.cpp:297
+msgid "QIF Profile"
+msgstr "Perfil QIF"
+
+# TODO: Verify (Novo/Nova)
+#: dialogs/rc.cpp:190 dialogs/rc.cpp:298 dialogs/rc.cpp:362
+#: widgets/kmymoneypriceview.cpp:145
+msgid "New..."
+msgstr "Novo..."
+
+#: dialogs/rc.cpp:191
+msgid "Contents to Export"
+msgstr "Conteúdo a Exportar"
+
+#: dialogs/rc.cpp:194
+msgid "Date Range"
+msgstr "Faixa de Datas"
+
+#: dialogs/rc.cpp:199
+msgid "Search transactions"
+msgstr "Procurar transações"
+
+#: dialogs/rc.cpp:200
+msgid "Criteria"
+msgstr "Critério"
+
+#: dialogs/rc.cpp:201
+msgid "Define your search criteria"
+msgstr "Definir seu critério de procura"
+
+#: dialogs/kfindtransactiondlg.cpp:169 dialogs/rc.cpp:202
+msgid "Text"
+msgstr "Texto"
+
+#: dialogs/rc.cpp:203
+msgid "Contains"
+msgstr "Contém"
+
+#: dialogs/rc.cpp:204
+msgid "Does not contain"
+msgstr "Não contém"
+
+#: dialogs/rc.cpp:205
+msgid "Treat text as regular expression"
+msgstr "Tratar texto como uma expressão regular"
+
+#: dialogs/rc.cpp:206
+msgid "Case sensitive"
+msgstr "Distinguir Maiúsculas"
+
+#: dialogs/rc.cpp:209
+msgid "Range"
+msgstr "Faixa"
+
+#: dialogs/rc.cpp:210
+msgid ""
+"_: To (Date)\n"
+"To"
+msgstr "Até"
+
+#: dialogs/rc.cpp:211
+msgid ""
+"_: From (Date)\n"
+"From"
+msgstr "De"
+
+#: dialogs/rc.cpp:213
+msgid "Search this amount"
+msgstr "Procurar por este montante"
+
+#: dialogs/rc.cpp:214
+msgid "Search amount in the range"
+msgstr "Procurar montante na faixa"
+
+#: dialogs/rc.cpp:215
+msgid ""
+"_: to (amount)\n"
+"to"
+msgstr "até"
+
+#: dialogs/rc.cpp:216
+msgid ""
+"_: from (amount)\n"
+"from"
+msgstr "de"
+
+#: dialogs/rc.cpp:220
+msgid "Select transactions without payees"
+msgstr "Selecionar transações sem beneficiários"
+
+#: dialogs/rc.cpp:221
+msgid "Select all"
+msgstr "Selecionar tudo"
+
+#: dialogs/rc.cpp:222
+msgid "Select none"
+msgstr "Limpar seleção"
+
+#: dialogs/rc.cpp:224
+msgid "Validity"
+msgstr "Validade"
+
+#: dialogs/rc.cpp:226
+msgid "All states"
+msgstr "Todos estados"
+
+#: dialogs/rc.cpp:230
+msgid "All types"
+msgstr "Todos os tipos"
+
+#: dialogs/rc.cpp:234
+msgid "Any transaction"
+msgstr "Qualquer transação"
+
+#: dialogs/rc.cpp:235
+msgid "Valid transaction"
+msgstr "Transação válida"
+
+#: dialogs/rc.cpp:236
+msgid "Invalid transaction"
+msgstr "Transação inválida"
+
+#: dialogs/rc.cpp:237
+msgid "State"
+msgstr "Estado"
+
+#: dialogs/rc.cpp:238
+msgid "Search this number"
+msgstr "Procurar este número"
+
+#: dialogs/rc.cpp:239
+msgid "Search number in range"
+msgstr "Procurar número na faixa"
+
+#: dialogs/rc.cpp:240
+msgid ""
+"_: to (number)\n"
+"to"
+msgstr "até"
+
+#: dialogs/rc.cpp:241
+msgid ""
+"_: from (number)\n"
+"from"
+msgstr "de"
+
+#: dialogs/rc.cpp:242
+msgid "text"
+msgstr "texto"
+
+#: dialogs/rc.cpp:243
+msgid "warning"
+msgstr "alerta"
+
+#: dialogs/rc.cpp:244
+msgid "Result"
+msgstr "Resultado"
+
+# TODO: Verify
+#: dialogs/rc.cpp:254
+msgid "F"
+msgstr "F"
+
+#: dialogs/rc.cpp:257 dialogs/rc.cpp:844
+msgid "&Reset"
+msgstr "&Reiniciar"
+
+#: dialogs/rc.cpp:258
+msgid "&Find"
+msgstr "&Procurar"
+
+#: dialogs/rc.cpp:259
+msgid "GnuCash Import Options"
+msgstr "Opções de Importação do GnuCash"
+
+#: dialogs/rc.cpp:260
+msgid "Use 'Help' for more information on these options"
+msgstr "Use 'Ajuda' para mais informações sobre estas opções"
+
+#: dialogs/rc.cpp:261
+msgid "Investment Handling"
+msgstr "Manipulação de Investimento"
+
+#: dialogs/rc.cpp:262
+msgid "One investment account for each stock"
+msgstr "Uma conta de investimento para cada ação"
+
+#: dialogs/rc.cpp:263
+msgid "One investment account for all stocks"
+msgstr "Uma conta de investimento para todas as ações"
+
+#: dialogs/rc.cpp:264
+msgid "Prompt for an investment account for each stock"
+msgstr "Perguntar por uma conta de investimento para cada ação"
+
+#: dialogs/rc.cpp:265
+msgid "Online price quotes"
+msgstr "Cotações de preços online"
+
+#: dialogs/rc.cpp:266
+msgid "Use Finance::Quote for share price quotes"
+msgstr "Usar Finance::Quote para cotações de preços de ações"
+
+#: dialogs/rc.cpp:267
+msgid "Scheduled Transactions"
+msgstr "Transações Agendadas"
+
+#: dialogs/rc.cpp:268
+msgid "Drop suspect scheduled transactions"
+msgstr "Descartar transações agendadas suspeitas"
+
+#: dialogs/rc.cpp:269
+msgid "Decoding option"
+msgstr "Opção de decodificação"
+
+#: dialogs/rc.cpp:270
+msgid "Decode using"
+msgstr "Uso de decodificação"
+
+#: dialogs/rc.cpp:271
+msgid "Transaction Notes option"
+msgstr "Opção de Notas de Transação"
+
+#: dialogs/rc.cpp:272
+msgid "Use transaction notes on non-split transactions"
+msgstr "Usar notas de transação nas transações não parceladas."
+
+#: dialogs/rc.cpp:273
+msgid "Debug Options"
+msgstr "Opções de Depuração"
+
+#: dialogs/rc.cpp:274
+msgid "General debug data"
+msgstr "Dados gerais de depuração"
+
+#: dialogs/rc.cpp:275
+msgid "Display XML data"
+msgstr "Exibir dados XML"
+
+#: dialogs/rc.cpp:276
+msgid "Anonymize data"
+msgstr "Tornar dados anônimos"
+
+#: dialogs/rc.cpp:281
+msgid "Online Quotes - Select price source"
+msgstr "Cotações Online - Selecione a fonte de valores"
+
+#: dialogs/rc.cpp:284
+msgid "This price source is not known to KMyMoney. Please select an option below."
+msgstr ""
+"Esta fonte de valores não é conhecida pelo KMyMoney. Por favor selecione uma "
+"opção abaixo."
+
+#: dialogs/rc.cpp:285
+msgid "Do not perform online quotes for this investment"
+msgstr "Não levantar cotações online para este investimento"
+
+#: dialogs/rc.cpp:286
+msgid "Select a known KMyMoney source from the list below"
+msgstr "Selecione uma fonte conhecida do KMyMoney a partir da lista abaixo"
+
+#: dialogs/rc.cpp:287
+msgid ""
+"Use the following name for the price source.\n"
+"(Click Help for further information.)"
+msgstr ""
+"Use o seguinte nome para a fonte de valores.\n"
+"(Clique em Ajuda para mais informações.)"
+
+#: dialogs/rc.cpp:288
+msgid "Always use this selection for this price source."
+msgstr "Sempre usar esta seleção para fonte de valores."
+
+#: dialogs/rc.cpp:289
+msgid "QIF Import"
+msgstr "Importar QIF"
+
+#: dialogs/rc.cpp:290
+msgid ""
+"From this dialog you are able to import transactions from a Quicken<b>&trade;"
+"</b> compatible file, (known as a QIF file, because of the extension).<p>\n"
+"\n"
+"Please enter the path to the QIF file or select it by clicking on the Browse "
+"button. Once you have the file's path press the Import button and KMyMoney "
+"will import all the transactions, categories and payees it finds."
+msgstr ""
+"A partir deste diálogo você será capaz de importar transações de um arquivo "
+"compatível com o Quicken<b>&trade;</b>, (conhecido como arquivo QIF, por "
+"causa da sua extensão).<p>\n"
+"\n"
+"Por favor, entre com o caminho do arquivo QIF ou selecione-o clicando no "
+"botão Navegar. Assim que você tenha introduzido o caminho do arquivo "
+"pressione o botão Importar e o KMyMoney irá importar todas as transações, "
+"categorias e beneficiários que ele encontrar."
+
+#: dialogs/rc.cpp:291
+msgid "QIF File to Import:"
+msgstr "Arquivo QIF a Importar:"
+
+#: dialogs/rc.cpp:292
+msgid "Import options"
+msgstr "Opções de importação"
+
+#: dialogs/rc.cpp:293
+msgid "Bank statement"
+msgstr "Extrato de Banco"
+
+#: dialogs/rc.cpp:294
+msgid "Other application"
+msgstr "Outro programa"
+
+#: dialogs/rc.cpp:295
+msgid ""
+"Select <b>Bank statement</b> turns on automatic category matching which is "
+"turned off in case of <b>Historic data</b>. Use the latter if you import "
+"files from other Personal Finance Management software."
+msgstr ""
+"Selecionar <b>Extrato de banco</b> liga automaticamente a correspondência de "
+"categorias que é desligada no caso de <b>Dados históricos</b>. Use a última "
+"opção se você importar arquivos de outros programas de Gerenciamento de "
+"Finanças Pessoais."
+
+#: dialogs/rc.cpp:296
+msgid "Source of QIF"
+msgstr "Origem do QIF"
+
+#: dialogs/rc.cpp:302
+msgid "Verify Import"
+msgstr "Verificar Importação"
+
+#: dialogs/rc.cpp:304
+msgid "Ok"
+msgstr "Ok"
+
+#: dialogs/rc.cpp:306
+msgid "MyDialog"
+msgstr "MinhaJanela"
+
+#: dialogs/rc.cpp:310
+msgid "File Information"
+msgstr "Informação do Arquivo"
+
+#: dialogs/rc.cpp:316
+msgid "Last modified on"
+msgstr "Última modificação"
+
+#: dialogs/rc.cpp:319
+msgid "Base currency"
+msgstr "Moeda base"
+
+#: dialogs/rc.cpp:322
+msgid "Created on"
+msgstr "Criado em"
+
+#: dialogs/rc.cpp:325
+msgid "Accounts/Categories"
+msgstr "Contas/Categorias"
+
+#: dialogs/rc.cpp:328
+msgid "Closed"
+msgstr "Fechada"
+
+#: dialogs/rc.cpp:331
+msgid "Prices"
+msgstr "Preços"
+
+#: dialogs/rc.cpp:337
+msgid "Splits"
+msgstr "Parcelas"
+
+#: dialogs/rc.cpp:338
+msgid "Price Editor"
+msgstr "Editor de Preço"
+
+#: dialogs/rc.cpp:339
+msgid "Show all stored prices"
+msgstr "Mostrar todos os preços armazenados"
+
+#: dialogs/rc.cpp:343
+msgid "Delete Range..."
+msgstr "Apagar Intervalo..."
+
+#: dialogs/rc.cpp:346
+msgid "New Account Dialog"
+msgstr "Janela de Nova Conta"
+
+#: dialogs/rc.cpp:349
+msgid "Opening information"
+msgstr "Informações de abertura"
+
+#: dialogs/rc.cpp:350
+msgid "Currency:"
+msgstr "Moeda:"
+
+#: dialogs/rc.cpp:352 dialogs/rc.cpp:793
+msgid "Date:"
+msgstr "Data:"
+
+#: dialogs/rc.cpp:353
+msgid "Balance:"
+msgstr "Saldo:"
+
+#: dialogs/rc.cpp:355
+msgid "Last check number:"
+msgstr "Último número de cheque:"
+
+#: dialogs/rc.cpp:356
+msgid "Notes:"
+msgstr "Notas:"
+
+#: dialogs/rc.cpp:357
+msgid "No auto-VAT-assignment"
+msgstr "Sem atribuição automática de VAT"
+
+# TODO: Verify
+#: dialogs/rc.cpp:358 dialogs/rc.cpp:441
+msgid "Price entry"
+msgstr "Preço inicial"
+
+#: dialogs/rc.cpp:359
+msgid "Preferred Account"
+msgstr "Conta Preferida"
+
+#: dialogs/rc.cpp:363
+msgid "Number:"
+msgstr "Número:"
+
+#: dialogs/rc.cpp:364 dialogs/rc.cpp:395
+msgid "BIC"
+msgstr "BIC"
+
+#: dialogs/rc.cpp:367
+msgid "Hierarchy"
+msgstr "Hierarquia"
+
+#: dialogs/rc.cpp:368
+msgid "Subaccount"
+msgstr "Sub-conta"
+
+#: dialogs/rc.cpp:369
+msgid "Limits"
+msgstr "Limites"
+
+#: dialogs/rc.cpp:370
+msgid ""
+"This page allows to setup certain limits. KMyMoney will warn you when the "
+"account balance reaches a limit."
+msgstr ""
+"Esta página permite configurar certos limites. O KMyMoney irá alertá-lo "
+"quando o saldo da conta atingir um limite."
+
+#: dialogs/rc.cpp:372
+msgid "Absolute limit"
+msgstr "Limite absoluto"
+
+#: dialogs/rc.cpp:373
+msgid "Maximum credit limit"
+msgstr "Limite de crédito máximo"
+
+#: dialogs/rc.cpp:374
+msgid "Minimum balance"
+msgstr "Saldo mínimo"
+
+#: dialogs/rc.cpp:375
+msgid "Early warning"
+msgstr "Aviso antecipado"
+
+#: dialogs/rc.cpp:377
+msgid "VAT details"
+msgstr "Detalhes VAT"
+
+#: dialogs/rc.cpp:378
+msgid "VAT category"
+msgstr "Categoria VAT"
+
+#: dialogs/rc.cpp:379
+msgid "VAT percentage"
+msgstr "Percentagem VAT"
+
+#: dialogs/rc.cpp:380
+msgid "Enable auto VAT assignment"
+msgstr "Ativar atribuição automática de VAT"
+
+#: dialogs/rc.cpp:381
+msgid "Amount entered"
+msgstr "Quantidade inserida"
+
+#: dialogs/rc.cpp:382
+msgid "Gross amount"
+msgstr "Montante bruto"
+
+#: dialogs/rc.cpp:383
+msgid "Net amount"
+msgstr "Montante líquido"
+
+#: dialogs/rc.cpp:384
+msgid "Include on Tax Reports"
+msgstr "Incluir nos Relatórios de Impostos"
+
+#: dialogs/rc.cpp:387
+msgid "New Institution Dialog"
+msgstr "Nova Instituição"
+
+#: dialogs/rc.cpp:388
+msgid "Institution Details"
+msgstr "Detalhes da Instituição"
+
+#: dialogs/rc.cpp:390
+msgid "City:"
+msgstr "Cidade:"
+
+#: dialogs/rc.cpp:394
+msgid "Routing Number:"
+msgstr "Número da Agência:"
+
+#: dialogs/rc.cpp:398
+msgid "New Budget"
+msgstr "Novo Orçamento"
+
+#: dialogs/rc.cpp:403
+msgid "New Equity"
+msgstr "Nova Ação Ordinária"
+
+#: dialogs/rc.cpp:406 dialogs/rc.cpp:407
+msgid "Trading Symbol of the stock or mutual fund, not required."
+msgstr "Símbolo Comercial da ação ou fundo comum de investimento, não requerido."
+
+#: dialogs/rc.cpp:414 dialogs/rc.cpp:415
+msgid "Name of the company, or mutual fund."
+msgstr "Nome da companhia, ou fundo comum de investimento."
+
+#: dialogs/rc.cpp:418
+msgid "New File Dialog"
+msgstr "Novo Arquivo"
+
+#: dialogs/rc.cpp:419
+msgid ""
+"Use this dialog to enter personal information about yourself.\n"
+"\n"
+"All information is optional and is provided to personalize\n"
+"your KMyMoney file."
+msgstr ""
+"Use este diálogo para inserir informações pessoais sobre você.\n"
+"\n"
+"Todas informações são opcionais e são oferecidas para personalizar o\n"
+"seu arquivo KMyMoney."
+
+#: dialogs/rc.cpp:430
+msgid "New Investment wizard"
+msgstr "Assistente de Novo Investimento"
+
+#: dialogs/rc.cpp:431
+msgid "Investment Type"
+msgstr "Tipo de Investimento"
+
+#: dialogs/rc.cpp:432
+msgid "This wizard allows you to create a new investment."
+msgstr "Este assistente permite que você crie um novo investimento."
+
+#: dialogs/rc.cpp:433
+msgid ""
+"The first step in this process requires to select the type of investment. "
+"The following steps collect more details about the investment from you."
+msgstr ""
+"O primeiro passo no processo requer que você selecione o tipo de "
+"investimento. Os passos seguintes coletam mais detalhes sobre o investimento "
+"fornecidos por você."
+
+#: dialogs/rc.cpp:434
+msgid "Type of investment"
+msgstr "Tipo de investimento"
+
+#: dialogs/rc.cpp:438
+msgid "Investment details"
+msgstr "Detalhes do Investimento"
+
+#: dialogs/rc.cpp:439
+msgid ""
+"Enter the details below and click <b>Next</b> to continue entering the "
+"online update details."
+msgstr ""
+"Insira os detalhes abaixo e clique <b>Próximo</b> para continuar inserindo "
+"os detalhes de atualização online."
+
+#: dialogs/rc.cpp:442 dialogs/rc.cpp:728
+msgid "Fraction"
+msgstr "Fração"
+
+#: dialogs/rc.cpp:443
+msgid "Trading Currency"
+msgstr "Moeda de Comercialização"
+
+#: dialogs/rc.cpp:444
+msgid "Full name"
+msgstr "Nome completo"
+
+#: dialogs/rc.cpp:445
+msgid "AMEX"
+msgstr "AMEX"
+
+#: dialogs/rc.cpp:446
+msgid "EUREX"
+msgstr "EUREX"
+
+#: dialogs/rc.cpp:447
+msgid "FUND"
+msgstr "FUND"
+
+#: dialogs/rc.cpp:448
+msgid "NASDAQ"
+msgstr "NASDAQ"
+
+#: dialogs/rc.cpp:449
+msgid "NYSE"
+msgstr "NYSE"
+
+#: dialogs/rc.cpp:450
+msgid "XETRA"
+msgstr "XETRA"
+
+#: dialogs/rc.cpp:451
+msgid "Trading symbol"
+msgstr "Símbolo de Comercialização"
+
+#: dialogs/rc.cpp:452
+msgid "Identification"
+msgstr "Identificação"
+
+#: dialogs/rc.cpp:453
+msgid "Enter the ticker symbol (e.g. RHAT)."
+msgstr "Insira o símbolo da ação (p.e. RHAT)."
+
+#: dialogs/rc.cpp:454
+msgid "Enter the CUSIP/ISIN/WKN identification number here"
+msgstr "Insira o número de identificação CUSIP/ISIN/WKN aqui"
+
+#: dialogs/rc.cpp:455
+msgid "Trading market"
+msgstr "Mercado"
+
+#: dialogs/rc.cpp:456
+msgid "Online Update"
+msgstr "Atualização Online"
+
+#: dialogs/rc.cpp:457
+msgid ""
+"Select an online source and click <b>Finish</b> to store the investment "
+"data. If you don't want to use online updates, just leave the data as is."
+msgstr ""
+"Selecione a fonte online e clique <b>Terminar</b> para armazenar os dados do "
+"investimento. Se você não deseja usar atualizações online, simplesmente "
+"deixe os dados como estão."
+
+#: dialogs/rc.cpp:458
+msgid "Use Finance::Quote"
+msgstr "Usar Finance::Quote"
+
+#: dialogs/rc.cpp:460
+msgid "Factor"
+msgstr "Fator"
+
+#: dialogs/rc.cpp:461
+msgid "New Loan Wizard"
+msgstr "Assistente para Novo Financiamento"
+
+#: dialogs/rc.cpp:462
+msgid "New Loan Account Wizard"
+msgstr "Assistente para Nova Conta de Financiamento"
+
+# TODO: Verify 'interest'
+#: dialogs/rc.cpp:463
+msgid ""
+"\n"
+"Welcome to the New Loan Account Wizard which will guide you through the "
+"creation of a new loan e.g. for your home, your car or any other loan that "
+"you pay or gain interest for.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Bem-vindo ao Assistente para Nova Conta de Financiamento, o qual irá guiá-lo "
+"através da criação de um novo financiamento, por exemplo, para sua casa, "
+"carro ou qualquer outro financiamento no qual você pague ou ganhe juros.\n"
+"\n"
+"Por favor, certifique-se de ter todas as informações relevantes em mãos. "
+"Você normalmente obtém estas informações no seu contrato e no seu último "
+"extrato."
+
+#: dialogs/rc.cpp:464
+msgid "Edit Loan Account Wizard"
+msgstr "Assistente para Edição de Conta de Financiamento"
+
+#: dialogs/rc.cpp:465
+msgid ""
+"\n"
+"Welcome to the Edit Loan Account Wizard. Please use this wizard to modify "
+"information about your loan account.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Bem-vindo ao Assistente para Edição de Conta de Financiamento. Por favor, "
+"use este assistente para modificar as informações sobre sua conta de "
+"financiamento.\n"
+"\n"
+"Por favor, certifique-se de ter todas as informações relevante em mãos. Você "
+"normalmente obtém estas informações no seu contrato e no seu último extrato."
+
+#: dialogs/rc.cpp:467
+msgid ""
+"\n"
+"In the first step, KMyMoney will ask you some general information about the "
+"loan account to be created."
+msgstr ""
+"\n"
+"No primeiro passo, O KMyMoney irá pedir algumas informações gerais sobre a "
+"conta de financiamento a ser criada."
+
+#: dialogs/rc.cpp:468 dialogs/rc.cpp:522 dialogs/rc.cpp:610
+msgid "1. General Information"
+msgstr "1. Informações Gerais"
+
+#: dialogs/rc.cpp:469
+msgid ""
+"\n"
+"2. Calculate Loan\n"
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"2. Calcular Financiamento\n"
+"\n"
+"3. Pagamentos"
+
+#: dialogs/rc.cpp:470
+msgid "Edit selection"
+msgstr "Editar seleção"
+
+#: dialogs/rc.cpp:471
+msgid ""
+"\n"
+"Please select, which data of the loan you want to modify."
+msgstr ""
+"\n"
+"Por favor, selecione quais dados do financiamento você deseja modificar."
+
+#: dialogs/rc.cpp:472
+msgid "Modify the interest rate"
+msgstr "Modificar a taxa de juros"
+
+#: dialogs/rc.cpp:473
+msgid "Modify additional fees"
+msgstr "Modificar taxas adicionais"
+
+#: dialogs/rc.cpp:474
+msgid "Modify other loan information"
+msgstr "Modificar outras informações do financiamento"
+
+#: dialogs/rc.cpp:475
+msgid "Effective date"
+msgstr "Data efetiva"
+
+#: dialogs/rc.cpp:478
+msgid "When should the changes become active?"
+msgstr "Quando as mudanças devem se tornar ativas?"
+
+#: dialogs/rc.cpp:479
+msgid "Lending or borrowing money"
+msgstr "Emprestando dinheiro"
+
+#: dialogs/rc.cpp:480
+msgid ""
+"\n"
+"Do you borrow or lend money?"
+msgstr ""
+"\n"
+"Você tomou dinheiro emprestado ou emprestou dinheiro a alguém?"
+
+#: dialogs/rc.cpp:483
+msgid "Name of the loan"
+msgstr "Nome do financiamento"
+
+# TODO: Verify
+# Compra de casa?
+#: dialogs/rc.cpp:484
+msgid ""
+"\n"
+"How do you want to call this loan? Examples for names are 'car loan', "
+"'school loan', 'home owner loan'."
+msgstr ""
+"\n"
+"Como você deseja chamar este financiamento? Exemplos de nomes seriam "
+"'financiamento de carro', 'financiamento de escola', 'financiamento para "
+"compra de casa'."
+
+#: dialogs/rc.cpp:486
+msgid "TextLabel6"
+msgstr "TextLabel6"
+
+#: dialogs/rc.cpp:487
+msgid "TextLabel7"
+msgstr "TextLabel7"
+
+#: dialogs/rc.cpp:488
+msgid "Type of interest"
+msgstr "Tipo de juros"
+
+#: dialogs/rc.cpp:489
+msgid ""
+"\n"
+"Is the interest of this loan fixed over a period of time or is it adapted "
+"from time to time? If the interest rate changes during the amortization "
+"phase of the loan you should choose the option 'variable interest rate'."
+msgstr ""
+"\n"
+"Os juros deste investimento são fixos sobre um período de tempo ou são "
+"adaptados de tempos em tempos? Se a taxa de juros muda durante a fase de "
+"amortização, você deveria escolher a opção 'taxa de juros variável'."
+
+#: dialogs/rc.cpp:490
+msgid "Fixed interest rate"
+msgstr "Taxa de juros fixa"
+
+#: dialogs/rc.cpp:491
+msgid "Variable interest rate"
+msgstr "Taxa de juros variável"
+
+#: dialogs/rc.cpp:492
+msgid "Payments?"
+msgstr "Pagamentos?"
+
+# TODO: Verify
+#: dialogs/rc.cpp:493
+msgid ""
+"\n"
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?"
+msgstr ""
+"\n"
+"Existiram quaisquer pagamentos para este financiamento quando da entrada "
+"deles no KMyMoney, ou não?"
+
+#: dialogs/rc.cpp:494
+msgid "No, no payments were made yet."
+msgstr "Não, nenhum pagamento foi feito ainda."
+
+#: dialogs/rc.cpp:495
+msgid "Yes, payments were made."
+msgstr "Sim, já foram feitos pagamentos."
+
+# TODO: Neste ou nesse?
+# TODO: Deságio?
+#: dialogs/rc.cpp:496
+msgid ""
+"Note: Payments made to obtain the loan (e.g. Dissagio) are not considered as "
+"payments in this context."
+msgstr ""
+"Nota: Pagamentos feitos para obter o financiamento (i.e. deságio) não são "
+"considerados como pagamentos neste contexto."
+
+#: dialogs/rc.cpp:497
+msgid "Recording payments?"
+msgstr "Registrando pagamentos?"
+
+#: dialogs/rc.cpp:498
+msgid ""
+"\n"
+"Do you want to record all payments of this loan with KMyMoney?"
+msgstr ""
+"\n"
+"Você que registrar todos os pagamentos deste financiamento com o KMyMoney?"
+
+#: dialogs/rc.cpp:499
+msgid "Yes, record all payments."
+msgstr "Sim, registrar todos os pagamentos."
+
+#: dialogs/rc.cpp:500
+msgid "No, only record payments since the beginning of this year."
+msgstr "Não, registrar somente os pagamentos feitos desde o início deste ano."
+
+#: dialogs/rc.cpp:501
+msgid "Date of next interest change"
+msgstr "Data da próxima mudança na taxa de juros"
+
+#: dialogs/rc.cpp:502
+msgid ""
+"\n"
+"Select the date when the interest rate for this loan will be modified and "
+"the frequency of the future changes."
+msgstr ""
+"\n"
+"Selecione a data na qual a taxa de juros para este financiamento será "
+"modificada e a frequência para mudanças futuras."
+
+#: dialogs/rc.cpp:503
+msgid "Next interest change on"
+msgstr "Próxima mudança de taxa de juros em"
+
+#: dialogs/rc.cpp:504
+msgid "Time until next change"
+msgstr "Intervalo até a próxima mudança"
+
+#: dialogs/rc.cpp:506 dialogs/rc.cpp:571
+msgid ""
+"\n"
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"\n"
+"Por favor insira o montante que você paga pelo principal da dívida e juros "
+"ou deixe este campo em branco para que o programa possa calculá-lo."
+
+#: dialogs/rc.cpp:507
+msgid "Current amount"
+msgstr "Montante atual"
+
+#: dialogs/rc.cpp:510
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the amount for principal and interest then enter "
+"it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"O KMyMoney calcula a nova taxa de juros ou o montante do principal da dívida "
+"e juros. Se você sabe o montante do principal da dívida e juros, então "
+"insira-o aqui.\n"
+"\n"
+"Se deseja que o KMyMoney calcule este valor para você, então deixe o campo "
+"em branco."
+
+#: dialogs/rc.cpp:512 dialogs/rc.cpp:545
+msgid ""
+"\n"
+"Please enter the interest rate or leave the field empty to calculate it."
+msgstr ""
+"\n"
+"Por favor, introduza a taxa de juros ou deixe este campo em branco para "
+"calculá-lo."
+
+#: dialogs/rc.cpp:514
+msgid "Current rate"
+msgstr "Taxa atual"
+
+#: dialogs/rc.cpp:516
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the interest rate then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"O KMyMoney calcula a nova taxa de juros ou o montante do principal da dívida "
+"e juros. Se você sabe a taxa de juros, então insira-a aqui.\n"
+"\n"
+"Se deseja que o KMyMoney calcule este valor para você, então deixe o campo "
+"em branco."
+
+#: dialogs/rc.cpp:517
+msgid "Date of first payment"
+msgstr "Data do primeiro pagamento"
+
+#: dialogs/rc.cpp:520
+msgid "Calculate Loan"
+msgstr "Calcular Financiamento"
+
+#: dialogs/rc.cpp:521
+msgid ""
+"\n"
+"You have successfully entered the general information about your loan. Next, "
+"KMyMoney needs some information about the calculation of the loan."
+msgstr ""
+"\n"
+"Você introduziu com sucesso as informações gerais sobre o seu financiamento. "
+"A seguir, o KMyMoney precisa de algumas informações gerais sobre o cálculo "
+"do financiamento."
+
+#: dialogs/rc.cpp:523 dialogs/rc.cpp:611
+msgid ""
+"\n"
+"2. Calculate Loan"
+msgstr ""
+"\n"
+"2. Calcular Financiamento"
+
+#: dialogs/rc.cpp:524 dialogs/rc.cpp:612
+msgid ""
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"3. Pagamentos"
+
+#: dialogs/rc.cpp:526
+msgid ""
+"\n"
+"How often will there be payments made to this loan?"
+msgstr ""
+"\n"
+"Com que frequência os pagamentos serão feitos para este financiamento?"
+
+#: dialogs/rc.cpp:527
+msgid "Interest calculation"
+msgstr "Cálculo de juros"
+
+#: dialogs/rc.cpp:528
+msgid ""
+"\n"
+"When does the actual interest rate get calculated?"
+msgstr ""
+"\n"
+"Quando a taxa real de juros é calculada?"
+
+#: dialogs/rc.cpp:529
+msgid "When the payment is received."
+msgstr "Quando o pagamento é recebido."
+
+#: dialogs/rc.cpp:530
+msgid "When the payment is due."
+msgstr "Quando o pagamento vence."
+
+#: dialogs/rc.cpp:534 dialogs/rc.cpp:547 dialogs/rc.cpp:560 dialogs/rc.cpp:573
+#: dialogs/rc.cpp:586 dialogs/rc.cpp:598 dialogs/rc.cpp:679
+msgid "Loan amount:"
+msgstr "Montante do financiamento:"
+
+#: dialogs/rc.cpp:535 dialogs/rc.cpp:548 dialogs/rc.cpp:561 dialogs/rc.cpp:574
+#: dialogs/rc.cpp:587 dialogs/rc.cpp:599 dialogs/rc.cpp:633 dialogs/rc.cpp:671
+msgid "Interest rate:"
+msgstr "Taxa de juros:"
+
+#: dialogs/rc.cpp:536 dialogs/rc.cpp:549 dialogs/rc.cpp:562 dialogs/rc.cpp:575
+#: dialogs/rc.cpp:588 dialogs/rc.cpp:600 dialogs/rc.cpp:669
+msgid "Term:"
+msgstr "Prazo:"
+
+#: dialogs/rc.cpp:537 dialogs/rc.cpp:550 dialogs/rc.cpp:563 dialogs/rc.cpp:576
+#: dialogs/rc.cpp:589 dialogs/rc.cpp:601 dialogs/rc.cpp:622 dialogs/rc.cpp:630
+#: dialogs/rc.cpp:677
+msgid "Principal + Interest:"
+msgstr "Principal + Juros:"
+
+#: dialogs/rc.cpp:538 dialogs/rc.cpp:551 dialogs/rc.cpp:564 dialogs/rc.cpp:577
+#: dialogs/rc.cpp:583 dialogs/rc.cpp:585 dialogs/rc.cpp:590 dialogs/rc.cpp:602
+msgid "Final amortization payment"
+msgstr "Pagamento final da amortização"
+
+#: dialogs/rc.cpp:557
+msgid "Duration"
+msgstr "Duração"
+
+# TODO: Verify
+# Para o qual?
+#: dialogs/rc.cpp:558
+msgid ""
+"\n"
+"Please enter the term of this loan or leave the field empty to calculate it. "
+"The term is the time that is required to fully repay the loan. This time "
+"might be different from the time your loan contract is signed for."
+msgstr ""
+"\n"
+"Por favor, indique o prazo deste financiamento ou deixe este campo vazio "
+"para calculá-lo. O prazo é o tempo necessário para pagar completamente o "
+"financiamento. Este tempo pode ser diferente do tempo para o qual seu "
+"contrato é assinado."
+
+#: dialogs/rc.cpp:584
+msgid ""
+"\n"
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"\n"
+"Por favor, introduza o montante de um pagamento de amortização final ou "
+"deixe este campo vazio para calculá-lo."
+
+#: dialogs/rc.cpp:596
+msgid "Calculation Overview"
+msgstr "Visão Geral do Cálculo"
+
+#: dialogs/rc.cpp:597
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown in the overview below. You can "
+"accept these values by selecting \"Next\" or change them by choosing \"Back"
+"\" to return to the input field for the information you want to change."
+msgstr ""
+"\n"
+"O KMyMoney calculou o financiamento conforme mostrado na visão geral abaixo. "
+"Você pode aceitar estes valores selecionando \"Próximo\" ou mudá-los "
+"escolhendo \"Voltar\" para retornar ao campo de entrada da informação que "
+"deseja modificar."
+
+#: dialogs/rc.cpp:609
+msgid ""
+"\n"
+"In the following steps, KMyMoney supports you in setting up categories and "
+"schedules for your loan payments."
+msgstr ""
+"\n"
+"Nos passos seguintes, o KMyMoney irá suportá-lo na configuração de "
+"categorias e de agendamentos para os seus pagamentos de financiamento."
+
+#: dialogs/rc.cpp:614
+msgid ""
+"\n"
+"Please select the category you want to assign the interest payments to or "
+"create a new category."
+msgstr ""
+"\n"
+"Por favor, selecione a categoria que você quer atribuir para os pagamentos "
+"de juros ou crie uma nova categoria."
+
+#: dialogs/rc.cpp:615
+msgid "Additional Fees"
+msgstr "Taxas Adicionais"
+
+#: dialogs/rc.cpp:616
+msgid ""
+"\n"
+"If your regular payment contains any additional fees, click on the button "
+"\"Additional fees\" to enter them."
+msgstr ""
+"\n"
+"Se o seu pagamento regular contém quaisquer taxas adicionais, clique no "
+"botão \"Taxas adicionais\" para introduzí-las."
+
+#: dialogs/rc.cpp:617
+msgid "= periodical payment:"
+msgstr "= pagamento periódico:"
+
+#: dialogs/rc.cpp:623
+msgid ""
+"If no additional fees are included in your periodical payment or you have "
+"entered all such fees, then click on \"Next\"."
+msgstr ""
+"Se não existirem taxas adicionais incluídas no seu pagamento periódico, ou "
+"você já introduziu todas essas taxas, então clique em \"Próximo\"."
+
+#: dialogs/rc.cpp:625
+msgid ""
+"KMyMoney will create a schedule for this payment and reminds you whenever a "
+"payment must be made.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"O KMyMoney criará um agendamento para este pagamento e lembrará você sempre "
+"que um pagamento tiver que ser fetio.<p>\n"
+"Se você optou por registrar todos os pagamentos esta data já foi fornecida. "
+"Se você optou por registrar somente os pagamentos anuais, então a "
+"<b>Primeira data de pagamento</b> é a data do primeiro pagamento feito neste "
+"ano."
+
+#: dialogs/rc.cpp:626
+msgid "First payment due on:"
+msgstr "Primeiro pagamento vence em:"
+
+#: dialogs/rc.cpp:627
+msgid "Make payment from/to:"
+msgstr "Fazer pagamento de/para:"
+
+#: dialogs/rc.cpp:629
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown below. If you want to accept these "
+"values use the \"Finish\" button to update your account, otherwise use the "
+"\"Back\" button to modify your settings."
+msgstr ""
+"\n"
+"O KMyMoney calculou o financiamento como mostrado abaixo. Se você quer "
+"aceitar estes valores use o botão \"Finalizar\" para atualizar a sua conta, "
+"caso contrário, use o botão \"Voltar\" para modificar suas configurações."
+
+#: dialogs/rc.cpp:631
+msgid "Additional fees:"
+msgstr "Taxas adicionais:"
+
+#: dialogs/rc.cpp:632
+msgid "Total payment:"
+msgstr "Pagamento total:"
+
+# TODO: Verify
+#: dialogs/rc.cpp:634
+msgid "Valid from:"
+msgstr "Válido a partir de:"
+
+#: dialogs/rc.cpp:635
+msgid "Affected payments:"
+msgstr "Pagamentos afetados:"
+
+#: dialogs/rc.cpp:645
+msgid "Press this to create a new asset account"
+msgstr "Pressione isto para criar uma nova conta de ativos"
+
+#: dialogs/rc.cpp:648
+msgid ""
+"\n"
+"This page summarizes the data you entered. If you need to modify anything, "
+"please use the \"Back\" button to go to respective page. Otherwise use the "
+"\"Finish\" button to create the account."
+msgstr ""
+"\n"
+"Esta página resume os dados que você entrou. Se você deseja modificar "
+"qualquer coisa, por favor use o botão \"Voltar\" e vá para a respectiva "
+"página. Caso contrário, use o botão \"Finalizar\" para criar a conta."
+
+#: dialogs/rc.cpp:650
+msgid "Payee:"
+msgstr "Beneficiário:"
+
+#: dialogs/rc.cpp:653
+msgid "First payment:"
+msgstr "Primeiro pagamento:"
+
+#: dialogs/rc.cpp:655
+msgid "Amount is:"
+msgstr "Montante é:"
+
+#: dialogs/rc.cpp:656
+msgid "Loan calculation"
+msgstr "Cálculo do financiamento"
+
+#: dialogs/rc.cpp:660
+msgid "Periodic Payment:"
+msgstr "Pagamento Periódico:"
+
+#: dialogs/rc.cpp:661
+msgid "Additional Fees:"
+msgstr "Taxas Adicionais:"
+
+#: dialogs/rc.cpp:662
+msgid "Interest category:"
+msgstr "Categoria de Juros:"
+
+# TODO: De/a partir de?
+#: dialogs/rc.cpp:663
+msgid "Payment from:"
+msgstr "Pagamento a partir de:"
+
+#: dialogs/rc.cpp:666
+msgid "Next due date:"
+msgstr "Próxima data de vencimento:"
+
+#: dialogs/rc.cpp:673
+msgid "Final Payment:"
+msgstr "Pagamento Final:"
+
+# TODO: Verify
+#: dialogs/rc.cpp:675
+msgid "Interest is due:"
+msgstr "Juro pagável:"
+
+#: dialogs/rc.cpp:680
+msgid "Payment frequency:"
+msgstr "Frequência de pagamento:"
+
+#: dialogs/rc.cpp:682
+msgid "Online Quote Configuration"
+msgstr "Configuração de Cotação Online"
+
+#: dialogs/rc.cpp:687
+msgid "Perl Location:"
+msgstr "Localização do Perl:"
+
+#: dialogs/rc.cpp:688
+msgid "Script:"
+msgstr "Script:"
+
+#: dialogs/rc.cpp:690
+msgid "Reassign payees"
+msgstr "Re-atribuir beneficiários"
+
+#: dialogs/rc.cpp:691
+msgid ""
+"The transactions associated with the selected payees need to be re-assigned "
+"to a different payee before the selected payees can be deleted. Please "
+"select a payee from the list below."
+msgstr ""
+"As transações associadas com os beneficiários selecionados precisam ser re-"
+"atribuídas antes que os beneficiários sejam removidos. Por favor, selecione "
+"um beneficiário na lista abaixo."
+
+#: dialogs/rc.cpp:692
+msgid "Available payees:"
+msgstr "Beneficiários disponíveis:"
+
+#: dialogs/rc.cpp:693
+msgid "Assign deleted names to the above selected payee's matching list"
+msgstr ""
+"Atribuir nomes excluídos ao beneficiário selecionado acima na lista de "
+"correspondência"
+
+#: dialogs/rc.cpp:696
+msgid "PluginDlg"
+msgstr "PluginDlg"
+
+#: dialogs/rc.cpp:697
+msgid "PlugIn"
+msgstr "PlugIn"
+
+#: dialogs/rc.cpp:698 widgets/transaction.cpp:1071
+#: widgets/transaction.cpp:1658
+msgid "Status"
+msgstr "Estado"
+
+#: dialogs/rc.cpp:699
+msgid "Feature"
+msgstr "Característica"
+
+#: dialogs/rc.cpp:703
+msgid "Reconciliation Dialog"
+msgstr "Reconciliação"
+
+#: dialogs/rc.cpp:704
+msgid ""
+"This dialog will assist in helping you to balance your account.\n"
+"\n"
+"Click on an appropriate transaction within one of the two list views to mark "
+"it as reconciled. To create a transaction or edit\n"
+"a transaction you can return to the register by clicking on the Edit "
+"Transactions button.\n"
+"\n"
+"Your account is balanced when the Difference is Zero. Click on the Finish "
+"button to save the reconciled transactions."
+msgstr ""
+"Este diálogo irá ajudá-lo a realizar o balanço da sua conta\n"
+"\n"
+"Clique na transação apropriada dentro de uma das duas listas visualizadas "
+"para marcá-la como reconciliada. Para criar uma transação ou editar uma já "
+"existente você pode retornar ao registro clicando no botão Editar "
+"Transações.\n"
+"\n"
+"Sua conta está balanceada quando a Diferença é Zero. Clique no botão "
+"Finalizar para salvar as transações reconciliadas."
+
+#: dialogs/rc.cpp:705
+msgid "Withdrawals"
+msgstr "Retiradas"
+
+#: dialogs/rc.cpp:707 dialogs/rc.cpp:708 dialogs/rc.cpp:822
+msgid "$"
+msgstr "$"
+
+#: dialogs/rc.cpp:710
+msgid "Previous Balance:"
+msgstr "Salto Anterior:"
+
+#: dialogs/rc.cpp:711 dialogs/rc.cpp:713 dialogs/rc.cpp:715 dialogs/rc.cpp:717
+#: dialogs/rc.cpp:820
+msgid "0"
+msgstr "0"
+
+#: dialogs/rc.cpp:712
+msgid "Ending Balance:"
+msgstr "Saldo Final:"
+
+# TODO: Verify Clear=Compensar?
+#: dialogs/rc.cpp:714
+msgid "Cleared Balance:"
+msgstr "Saldo Compensado:"
+
+#: dialogs/rc.cpp:716
+msgid "Difference:"
+msgstr "Diferença:"
+
+#: dialogs/rc.cpp:718
+msgid "Edit Transactions..."
+msgstr "Editar Transações..."
+
+#: dialogs/rc.cpp:721
+msgid "Security List Editor"
+msgstr "Editor de Lista de Títulos"
+
+#: dialogs/rc.cpp:726
+msgid "Market"
+msgstr "Mercado"
+
+#: dialogs/rc.cpp:729
+msgid "Cash Fraction"
+msgstr "Fração do Dinheiro"
+
+#: dialogs/rc.cpp:730
+msgid "Add..."
+msgstr "Adicionar..."
+
+#: dialogs/rc.cpp:732 widgets/kmymoneypriceview.cpp:157
+msgid "Delete..."
+msgstr "Apagar..."
+
+#: dialogs/rc.cpp:733
+msgid "Show national currencies"
+msgstr "Mostrar moedas nacionais"
+
+#: dialogs/rc.cpp:735
+msgid "KMyMoney - Select Database"
+msgstr "KMyMoney - Selecionar Banco de Dados"
+
+#: dialogs/rc.cpp:736
+msgid "CAUTION!"
+msgstr "ATENÇÃO!"
+
+#: dialogs/rc.cpp:737
+msgid ""
+"<font color=\"#ff2727\">This software is still in an experimental stage, and "
+"there are still some known response time problems. Please be patient; we are "
+"working on them.\n"
+"As always, please make sure you have adequate backups of your data.</font>"
+msgstr ""
+"<font color=\"#ff2727\"> Este programa ainda está em estágio experimental, e "
+"existem ainda alguns problemas conhecidos de tempo de resposta. Por favor, "
+"seja paciente. Nós estamos trabalhando neles.\n"
+"Com sempre, por favor mantenha uma cópia de segurança dos seus dados.</font>"
+
+#: dialogs/rc.cpp:738
+msgid "Database Type"
+msgstr "Tipo de Banco de Dados"
+
+#: dialogs/rc.cpp:739
+msgid "Database Name"
+msgstr "Nome do Banco de Dados"
+
+#: dialogs/rc.cpp:740
+msgid "Host Name"
+msgstr "Nome da Máquina"
+
+#: dialogs/rc.cpp:741
+msgid "User Name"
+msgstr "Nome do Usuário"
+
+#: dialogs/rc.cpp:743
+msgid "Preload &all data"
+msgstr "Pré-carregar todos os d&ados"
+
+#: dialogs/rc.cpp:745
+msgid "&Generate SQL"
+msgstr "&Gerar SQL"
+
+#: dialogs/rc.cpp:747
+msgid "Ca&ncel"
+msgstr "Ca&ncelar"
+
+#: dialogs/rc.cpp:762 widgets/rc.cpp:172
+msgid "Sort options"
+msgstr "Opções de ordenação"
+
+#: dialogs/rc.cpp:763
+msgid "Use default"
+msgstr "Usar padrão"
+
+#: dialogs/rc.cpp:767
+msgid "Correct splits"
+msgstr "Corrigir parcelas"
+
+#: dialogs/rc.cpp:769
+msgid "How do you want to proceed?"
+msgstr "Como você deseja proceder?"
+
+#: dialogs/rc.cpp:770
+msgid "Continue to edit splits"
+msgstr "Continuar a editar as parcelas"
+
+#: dialogs/rc.cpp:771
+#, c-format
+msgid "Change total amount of transaction to %1."
+msgstr "Modificar a quantia total da transação para %1."
+
+#: dialogs/rc.cpp:772
+msgid "Distribute difference of %1 among all splits."
+msgstr "Distribuir a diferença de %1 entre todas as parcelas."
+
+#: dialogs/rc.cpp:773
+msgid "Leave %1 unassigned."
+msgstr "Deixar %1 sem atribuição."
+
+#: dialogs/rc.cpp:776
+msgid "Split transaction"
+msgstr "Parcelar transação"
+
+#: dialogs/rc.cpp:777
+msgid "<b>11,00<b>"
+msgstr "<b>11,00<b>"
+
+#: dialogs/rc.cpp:778
+msgid "<b>111,00<b>"
+msgstr "<b>111,00<b>"
+
+#: dialogs/rc.cpp:779
+msgid "Unassigned"
+msgstr "Sem atribuição"
+
+# TODO: Verify
+#: dialogs/rc.cpp:780
+msgid "Sum of splits"
+msgstr "Soma das parcelas"
+
+#: dialogs/rc.cpp:781
+msgid "100,00"
+msgstr "100,00"
+
+#: dialogs/rc.cpp:782
+msgid "Transaction amount"
+msgstr "Montante da transação"
+
+#: dialogs/rc.cpp:783
+msgid "Merge"
+msgstr "Mesclar"
+
+#: dialogs/rc.cpp:784
+msgid "Merges splits with the same category to one split"
+msgstr "Mescla as parcelas com a mesma categoria em uma só"
+
+#: dialogs/rc.cpp:785
+msgid ""
+"In case you have multiple split entries to the same category and you like to "
+"keep them as a single split, press this button. The amount for identical "
+"categories will be added and stored in a single split for that category."
+msgstr ""
+"Caso você possua múltiplas entradas de parcela para a mesma categoria e você "
+"deseja mantê-las como uma parcela única, pressione este botão. A quantidade "
+"para categorias idênticas será adicionado e armazenado em uma parcela única "
+"para aquela categoria."
+
+#: dialogs/rc.cpp:786
+msgid "Clear &Zero"
+msgstr "Apagar os &Zeros"
+
+#: dialogs/rc.cpp:787
+msgid "Removes all splits that have a value of zero."
+msgstr "Apaga todas as parcelas que possuam um valor de zero."
+
+# TODO: Verify
+#: dialogs/rc.cpp:791
+msgid "New price entry"
+msgstr "Nova entrada de preço"
+
+#: dialogs/rc.cpp:799
+msgid "Void mark"
+msgstr "Marca de vazio"
+
+#: dialogs/rc.cpp:800
+msgid "Opening Balance text"
+msgstr "Texto de Saldo de Abertura"
+
+#: dialogs/rc.cpp:801
+msgid "Type field text"
+msgstr "Texto do campo de tipo"
+
+#: dialogs/rc.cpp:802
+msgid "Account delimiter"
+msgstr "Delimitador de conta"
+
+#: dialogs/rc.cpp:804
+msgid "Attempt to match similar transactions"
+msgstr "Tentar fazer corresponder as transações parecidas"
+
+#: dialogs/rc.cpp:806 dialogs/rc.cpp:808
+msgid "The format of the dates in the QIF file."
+msgstr "O formato de datas no arquivo QIF."
+
+#: dialogs/rc.cpp:809 dialogs/rc.cpp:811
+msgid ""
+"If a QIF file contains date entries with years represented with two digits "
+"then either an apostrophe or a slash may be used to delimit the year in the "
+"dates for certain centuries. This enables 1905 to be distinguished from "
+"2005. Specify here which range of years will have year delimited by an "
+"apostrophe (eg. for Quicken this is usually 1900-1949)."
+msgstr ""
+"Se um arquivo QIF contiver entradas de datas com os anos representados com "
+"dois dígitos então um apóstrofe ou um traço deve ser usado para delimitar o "
+"ano nas datas para determinados séculos. Isto possibilita que 1905 seja "
+"diferenciado de 2005. Especifique aqui o intervalo de anos que terá o ano "
+"delimitado por um apóstrofe (para o Quicken este intervalo normalmente é "
+"1900-1949)."
+
+#: dialogs/rc.cpp:810
+msgid "Apostrophe Handling"
+msgstr "Tratamento de Apóstrofos"
+
+#: dialogs/rc.cpp:812
+msgid "Amounts"
+msgstr "Montantes"
+
+#: dialogs/rc.cpp:813
+msgid "Field"
+msgstr "Campo"
+
+#: dialogs/rc.cpp:814
+msgid "QIF-Record"
+msgstr "Registro QIF"
+
+#: dialogs/rc.cpp:815 dialogs/rc.cpp:833
+msgid "Decimal Symbol"
+msgstr "Símbolo Decimal"
+
+#: dialogs/rc.cpp:816
+msgid "Thousand Delimiter"
+msgstr "Delimitador de Milhar"
+
+#: dialogs/rc.cpp:817
+msgid "SortColumnInvisible"
+msgstr "SortColumnInvisible"
+
+#: dialogs/rc.cpp:819
+msgid "T"
+msgstr "T"
+
+#: dialogs/rc.cpp:821
+msgid "Split-Value"
+msgstr "Valor-da-Parcela"
+
+#: dialogs/rc.cpp:824
+msgid "Commission"
+msgstr "Comissão"
+
+#: dialogs/rc.cpp:825
+msgid "O"
+msgstr "O"
+
+#: dialogs/rc.cpp:826
+msgid "2"
+msgstr "2"
+
+#: dialogs/rc.cpp:828
+msgid "I"
+msgstr "I"
+
+#: dialogs/rc.cpp:829
+msgid "3"
+msgstr "3"
+
+# TODO: Verify
+#: dialogs/rc.cpp:831
+msgid "Q"
+msgstr "Q"
+
+#: dialogs/rc.cpp:832
+msgid "4"
+msgstr "4"
+
+#: dialogs/rc.cpp:834
+msgid "Thousands Separator"
+msgstr "Separador de Milhares"
+
+#: dialogs/rc.cpp:836
+msgid "Output filter location"
+msgstr "Localização do filtro de saída"
+
+#: dialogs/rc.cpp:837
+msgid "Input filter file type"
+msgstr "Filtro de entrada de tipo de arquivo"
+
+#: dialogs/rc.cpp:838
+msgid "*.qif"
+msgstr "*.qif"
+
+#: dialogs/rc.cpp:839
+msgid "Input filter location"
+msgstr "Localização do filtro de entrada"
+
+#: dialogs/rc.cpp:843
+msgid "Rename"
+msgstr "Renomear"
+
+#: dialogs/kselecttransactionsdlg.cpp:44
+msgid "Select Transaction"
+msgstr "Selecionar Transação"
+
+#: dialogs/kselecttransactionsdlg.cpp:45
+msgid "Select a transaction and press the OK button or use Cancel to select none."
+msgstr ""
+"Selecione uma transação e pressione 'OK' ou use o 'Cancelar' para não "
+"selecionar nenhuma."
+
+#: dialogs/knewinvestmentwizard.cpp:62
+msgid "Investment detail wizard"
+msgstr "Assistente de detalhes do Investimento"
+
+#: dialogs/knewinvestmentwizard.cpp:82
+msgid "Security detail wizard"
+msgstr "Assistente de detalhes de título"
+
+#: dialogs/knewaccountdlg.cpp:121 dialogs/knewinvestmentwizard.cpp:109
+msgid ""
+"_: default price mode\n"
+"<default>"
+msgstr "<padrão>"
+
+#: dialogs/knewaccountdlg.cpp:122 dialogs/knewinvestmentwizard.cpp:110
+msgid "Price per share"
+msgstr "Preço por cota"
+
+#: dialogs/knewaccountdlg.cpp:123 dialogs/knewinvestmentwizard.cpp:111
+msgid "Total for all shares"
+msgstr "Total para todas as ações"
+
+#: dialogs/knewinvestmentwizard.cpp:129
+msgid "This wizard allows you to modify the selected investment."
+msgstr "Este assistente permite-lhe modificar o investimento selecionado."
+
+#: dialogs/knewinvestmentwizard.cpp:132
+msgid "This wizard allows you to modify the selected security."
+msgstr "Este assistente permite-lhe modificar o título selecionado."
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid ""
+"The selected symbol is already on file. Do you want to reuse the existing "
+"security?"
+msgstr ""
+"O símbolo seleciona já está no arquivo. Você deseja reutilizar o título "
+"existente?"
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid "Security found"
+msgstr "Título encontrado"
+
+#: dialogs/knewinvestmentwizard.cpp:309
+msgid "Unable to create all objects for the investment"
+msgstr "Não foi possível criar todos os objetos para o investimento"
+
+#: dialogs/keditequityentrydlg.cpp:78
+msgid "Change the price information of the selected entry."
+msgstr "Mudar a informação de preço da entrada selecionada."
+
+#: dialogs/kaccountselectdlg.cpp:64 widgets/kmymoneybriefschedule.cpp:59
+msgid "&Skip"
+msgstr "&Saltar"
+
+#: dialogs/kaccountselectdlg.cpp:66 widgets/kmymoneybriefschedule.cpp:61
+msgid "Skip this transaction"
+msgstr "Pular esta transação"
+
+#: dialogs/kaccountselectdlg.cpp:67
+msgid "Use this to skip importing this transaction and proceed with the next one."
+msgstr ""
+"Use isto para omitir a importação desta transação e prosseguir para a "
+"próxima."
+
+#: dialogs/kaccountselectdlg.cpp:72
+msgid "Create a new account/category"
+msgstr "Criar uma nova conta/categoria"
+
+#: dialogs/kaccountselectdlg.cpp:73
+msgid "Use this to add a new account/category to the file"
+msgstr "Use isto para adicionar uma nova conta/categoria ao arquivo"
+
+#: dialogs/kaccountselectdlg.cpp:77
+msgid "&Abort"
+msgstr "C&ancelar"
+
+#: dialogs/kaccountselectdlg.cpp:79
+msgid "Abort the import operation and dismiss all changes"
+msgstr "Cancelar a operação de importação e desfazer todas mudanças"
+
+#: dialogs/kaccountselectdlg.cpp:80
+msgid ""
+"Use this to abort the import. Your financial data will be in the state "
+"before you started the QIF import."
+msgstr ""
+"Use isto para abortar a importação. Seus dados financeiros irão estar no "
+"estado que se encontravam antes de você iniciar a importação de QIF."
+
+#: dialogs/knewaccountdlg.cpp:110
+msgid "Is a sub account"
+msgstr "É uma sub-conta"
+
+#: dialogs/knewaccountdlg.cpp:184
+msgid "VAT account"
+msgstr "Conta VAT"
+
+#: dialogs/knewaccountdlg.cpp:474
+msgid ""
+"You have not specified a name.\n"
+"Please fill in this field."
+msgstr ""
+"Você não especificou um nome.\n"
+"Por favor, preencha este campo."
+
+#: dialogs/knewaccountdlg.cpp:482
+msgid "Please select a parent account."
+msgstr "Por favor, selecione uma conta pai."
+
+#: dialogs/knewaccountdlg.cpp:489 dialogs/knewaccountdlg.cpp:1029
+msgid "<No Institution>"
+msgstr "<Nenhuma Instituição>"
+
+#: dialogs/knewaccountdlg.cpp:552
+msgid ""
+"An account named <b>%1</b> already exists. You cannot create a second "
+"account with the same name."
+msgstr ""
+"Uma conta chamada <b>%1</b> já existe. Você não pode criar uma segunda conta "
+"com o mesmo nome."
+
+#: dialogs/knewaccountdlg.cpp:567
+msgid ""
+"A category named <b>%1</b> already exists. You cannot create a second "
+"category with the same name."
+msgstr ""
+"Uma categoria chamada <b>%1</b> já existe. Você não pode criar uma segunda "
+"categoria com o mesmo nome."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid ""
+"You have selected to suppress the display of unused categories in the "
+"KMyMoney configuration dialog. The category you just created will therefore "
+"only be shown if it is used. Otherwise, it will be hidden in the accounts/"
+"categories view."
+msgstr ""
+"Você optou por suprimir a exibição de categorias não usadas no diálogo de "
+"configuração do KMyMoney. A categoria recém-criada só será exibida se ela "
+"for usada. Caso contrário, ela ficará oculta na visão de contas/categorias."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid "Hidden categories"
+msgstr "Categorias ocultas"
+
+#: dialogs/knewaccountdlg.cpp:927 dialogs/knewaccountdlg.cpp:979
+#, c-format
+msgid "Is a sub account of %1"
+msgstr "É uma sub-conta de %1"
+
+#: dialogs/knewaccountdlg.cpp:1082
+msgid "Cannot add institution"
+msgstr "Não foi possível adicionar instituição"
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid ""
+"This dialog does not allow to create new payees. Please pick a payee from "
+"the list."
+msgstr ""
+"Esta janela não permite criar novos beneficiários. Por favor indique um "
+"beneficiário na lista."
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid "Payee creation"
+msgstr "Criação de beneficiário"
+
+#: dialogs/kimportdlg.cpp:69
+msgid "Use this to start the import operation"
+msgstr "Use isto para iniciar a operação de importação"
+
+#: dialogs/kimportdlg.cpp:110
+msgid ""
+"%1|Import files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Arquivos de importação\n"
+"%2|Todos os arquivos (*.*)"
+
+#: dialogs/kimportdlg.cpp:111
+msgid "Import File..."
+msgstr "Importar Arquivo..."
+
+#: dialogs/knewloanwizard.cpp:124
+msgid "Create a new category"
+msgstr "Cria uma nova categoria"
+
+#: dialogs/knewloanwizard.cpp:125
+msgid "Use this to open the new account editor"
+msgstr "Use isto para abrir o editor de nova conta"
+
+#: dialogs/knewloanwizard.cpp:129
+msgid "&Additional fees..."
+msgstr "T&axas adicionais..."
+
+#: dialogs/knewloanwizard.cpp:131
+msgid "Enter additional fees"
+msgstr "Inserir taxas adicionais"
+
+#: dialogs/knewloanwizard.cpp:132
+msgid ""
+"Use this to add any additional fees other than principal and interest "
+"contained in your periodical payments."
+msgstr ""
+"Use isto para inserir qualquer taxa adicional além do principal e juros "
+"contidos em seus pagamentos periódicos."
+
+#: dialogs/knewloanwizard.cpp:139
+msgid "Use this to create a new account to which the initial payment should be made"
+msgstr ""
+"Use isto para criar uma nova conta para a qual o pagamento inicial deve ser "
+"feito"
+
+#: dialogs/knewloanwizard.cpp:208
+msgid "To whom do you make payments?"
+msgstr "Para quem você faz os pagamentos?"
+
+#: dialogs/knewloanwizard.cpp:209
+msgid "Payments to"
+msgstr "Pagamentos para"
+
+#: dialogs/knewloanwizard.cpp:214
+msgid "From whom do you expect payments?"
+msgstr "De quem você espera os pagamentos?"
+
+#: dialogs/knewloanwizard.cpp:215
+msgid "Payments from"
+msgstr "Pagamentos de"
+
+#: dialogs/knewloanwizard.cpp:233
+msgid "Please enter the date, the first payment for this loan was/is due."
+msgstr ""
+"Por favor, entre com a data na qual o primeiro pagamento para este "
+"financiamento venceu/vence."
+
+#: dialogs/knewloanwizard.cpp:235
+msgid ""
+"Note: Consult the loan contract for details of the first due date. Keep in "
+"mind, that the first due date usually differs from the date the contract was "
+"signed"
+msgstr ""
+"Nota: Consulte o contrato de financiamento para detalhes da primeira data de "
+"vencimento. Tenha em mente que a primeira data de vencimento normalmente "
+"difere da data no qual o contrato foi assinado"
+
+#: dialogs/knewloanwizard.cpp:240
+msgid ""
+"Please enter the original loan amount in the field below or leave it empty "
+"to be calculated."
+msgstr ""
+"Por favor, introduza o montante original do financiamento no campo abaixo ou "
+"deixe-o vazio para ser calculado."
+
+#: dialogs/knewloanwizard.cpp:248
+msgid "Please enter the date, the first payment for this loan was/is due this year."
+msgstr ""
+"Por favor, entre a data em que o primeiro pagamento para este financiamento "
+"venceu/vence neste ano."
+
+#: dialogs/knewloanwizard.cpp:250
+msgid ""
+"Note: You can easily figure out the date of the first payment if you consult "
+"the last statement of last year."
+msgstr ""
+"Nota: Você pode facilmente determinar a data do primeiro pagamento "
+"consultando o último extrato do ano passado."
+
+#: dialogs/knewloanwizard.cpp:254
+msgid ""
+"Please enter the remaining loan amount of last years final statement in the "
+"field below. You should not leave this field empty."
+msgstr ""
+"Por favor, entre com o montante remanescente do financiamento relativo ao "
+"extrato final do ano passado. Você não deveria deixar este campo vazio."
+
+#: dialogs/knewloanwizard.cpp:311 dialogs/knewloanwizard.cpp:326
+#: dialogs/knewloanwizard.cpp:341 dialogs/knewloanwizard.cpp:357
+#: dialogs/knewloanwizard.cpp:373
+msgid "calculate"
+msgstr "calcular"
+
+#: dialogs/knewloanwizard.cpp:417
+msgid "borrowed"
+msgstr "emprestado de"
+
+#: dialogs/knewloanwizard.cpp:419
+msgid "lend"
+msgstr "emprestado para"
+
+#: dialogs/knewloanwizard.cpp:423
+msgid "not assigned"
+msgstr "não atribuído"
+
+#: dialogs/knewloanwizard.cpp:430
+msgid "on reception"
+msgstr "no recebimento"
+
+#: dialogs/knewloanwizard.cpp:432
+msgid "on due date"
+msgstr "na data de vencimento"
+
+#: dialogs/knewloanwizard.cpp:471
+msgid ""
+"The loan wizard is unable to calculate two different values for your loan at "
+"the same time. Please enter a value for the %1 on this page or backup to the "
+"page where the current value to be calculated is defined and fill in a "
+"value."
+msgstr ""
+"O assistente de financiamento não é capaz de calcular dois valores "
+"diferentes para o seu financiamento ao mesmo tempo. Por favor, entre o valor "
+"para o %1 nesta página ou vá até a página onde o valor atual a ser calculado "
+"está definido e preencha um valor."
+
+#: dialogs/knewloanwizard.cpp:500
+msgid ""
+"You selected, that payments have already been made towards this loan. This "
+"requires you to enter the loan amount exactly as found on your last "
+"statement."
+msgstr ""
+"Você indicou que pagamentos já foram feitos relativos a este financiamento. "
+"Isto requer que você introduza o montante do financiamento exatamente como "
+"encontrado no seu último extrato."
+
+#: dialogs/knewloanwizard.cpp:513
+msgid "interest rate"
+msgstr "taxa de juros"
+
+#: dialogs/knewloanwizard.cpp:522
+msgid "term"
+msgstr "prazo"
+
+#: dialogs/knewloanwizard.cpp:532
+msgid "principal and interest"
+msgstr "principal e juros"
+
+#: dialogs/knewloanwizard.cpp:743
+#, c-format
+msgid ""
+"The number of payments has been decremented and the final payment has been "
+"modified to %1."
+msgstr ""
+"O número de pagamentos foi decrementado e o pagamento final foi modificado "
+"para %1."
+
+#: dialogs/knewloanwizard.cpp:751 dialogs/knewloanwizard.cpp:771
+#, c-format
+msgid "The final payment has been modified to %1."
+msgstr "O pagamento final foi modificado para %1."
+
+#: dialogs/knewloanwizard.cpp:802
+msgid "KMyMoney has calculated a final payment of %1 for this loan."
+msgstr "O KMyMoney calculou o pagamento final de %1 para este financiamento."
+
+#: dialogs/knewloanwizard.cpp:817
+msgid ""
+"You have entered mis-matching information. Please backup to the appropriate "
+"page and update your figures or leave one value empty to let KMyMoney "
+"calculate it for you"
+msgstr ""
+"Você introduziu informações discordantes. Por favor, volte à página "
+"apropriada e atualize suas quantias ou deixe um valor vazio para permitir "
+"que o KMyMoney calcule-o para você"
+
+#: dialogs/kfindtransactiondlg.cpp:230
+msgid "Warning: Filtering by Category will exclude all transfers from the results."
+msgstr ""
+"Aviso: A filtragem por Categoria excluirá todos as transferências dos "
+"resultados."
+
+#: dialogs/kfindtransactiondlg.cpp:239
+msgid "(None)"
+msgstr "(Nenhum)"
+
+#: dialogs/kfindtransactiondlg.cpp:241
+msgid "Current selections: "
+msgstr "Seleções Atuais: "
+
+#: dialogs/kfindtransactiondlg.cpp:716
+msgid "Found %1 matching transactions (D %2 / P %3 = %4)"
+msgstr "Encontradas %1 transações correspondentes (D %2 / P %3 = %4)"
+
+#: dialogs/kfindtransactiondlg.cpp:719
+msgid "Found %1 matching transactions"
+msgstr "%1 transações correspondentes encontradas"
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "The institution name field is empty. Please enter the name."
+msgstr "O campo de nome da instituição está vazio. Por favor, introduza o nome."
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "Adding New Institution"
+msgstr "Adicionando uma Nova Instituição"
+
+#: dialogs/kcsvprogressdlg.cpp:69
+msgid "C&lose"
+msgstr "F&echar"
+
+#: dialogs/kcsvprogressdlg.cpp:247
+msgid " of "
+msgstr " de "
+
+#: widgets/kmymoneypriceview.cpp:126
+msgid "Commodity"
+msgstr "Mercadoria"
+
+#: widgets/kmymoneypriceview.cpp:130
+msgid "Source"
+msgstr "Fonte"
+
+#: widgets/kmymoneypriceview.cpp:143
+msgid "Price Options"
+msgstr "Opções de Preço"
+
+#: widgets/kmymoneypriceview.cpp:153
+msgid "Online Price Update..."
+msgstr "Atualização Online de Preço..."
+
+#: widgets/kmymoneycombo.cpp:472 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+msgid "From"
+msgstr "De"
+
+#: widgets/transaction.cpp:668
+msgid "Transaction is missing a category assignment."
+msgstr "Está faltando atribuir uma categoria para a transação."
+
+#: widgets/transaction.cpp:671
+msgid "The transaction has a missing assignment of <b>%1</b>."
+msgstr "Está faltando atribuir <b>%1</b> para a transação."
+
+#: widgets/transaction.cpp:874
+msgid "Sell"
+msgstr "Vender"
+
+#: widgets/transaction.cpp:876
+msgid "Buy"
+msgstr "Comprar"
+
+#: widgets/kmymoneycombo.cpp:520 widgets/transaction.cpp:879
+#: widgets/transaction.cpp:1447
+msgid "Dividend"
+msgstr "Dividendos"
+
+#: widgets/kmymoneycombo.cpp:518 widgets/transaction.cpp:881
+#: widgets/transaction.cpp:1453
+msgid "Yield"
+msgstr "Lucros"
+
+#: widgets/transaction.cpp:886 widgets/transaction.cpp:1473
+msgid "Activity"
+msgstr "Atividade"
+
+#: widgets/transaction.cpp:887
+msgid "Investment transaction"
+msgstr "Transação de investimento"
+
+#: widgets/transaction.cpp:1021 widgets/transaction.cpp:1114
+#: widgets/transaction.cpp:1165
+msgid "*** UNASSIGNED ***"
+msgstr "*** NÃO ATTRIBUÍDA ***"
+
+#: widgets/kmymoneycombo.cpp:517 widgets/transaction.cpp:1435
+msgid "Add shares"
+msgstr "Adicionar ações"
+
+#: widgets/kmymoneycombo.cpp:516 widgets/transaction.cpp:1438
+msgid "Remove shares"
+msgstr "Remover ações"
+
+#: widgets/kmymoneycombo.cpp:522 widgets/transaction.cpp:1441
+msgid "Buy shares"
+msgstr "Comprar ações"
+
+#: widgets/kmymoneycombo.cpp:521 widgets/transaction.cpp:1444
+msgid "Sell shares"
+msgstr "Vender ações"
+
+#: widgets/transaction.cpp:1450
+msgid "Reinvest Dividend"
+msgstr "Reinvestir Dividendos"
+
+#: widgets/kmymoneycombo.cpp:515 widgets/transaction.cpp:1456
+msgid "Split shares"
+msgstr "Dividir ações"
+
+#: widgets/transaction.cpp:1515
+msgid "Ratio"
+msgstr "Taxa"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:241
+msgid "%1 Bills."
+msgstr "%1 Contas a pagar."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:257
+msgid "%1 Deposits."
+msgstr "%1 Depósitos."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:273
+msgid "%1 Transfers."
+msgstr "%1 Transferências."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:355
+msgid ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+msgstr ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:57
+#: widgets/kmymoneyaccounttreeforecast.cpp:84
+msgid "Current"
+msgstr "Atual"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:72
+#: widgets/kmymoneyaccounttreeforecast.cpp:93
+msgid "Total variation"
+msgstr "Variação total"
+
+#: widgets/stdtransactionmatched.cpp:130
+msgid ""
+"KMyMoney has matched a downloaded transaction with a manually entered one "
+"(result above)"
+msgstr ""
+"O KMyMoney correspondeu uma transação baixada com uma manualmente inserida "
+"(resultado acima)"
+
+#: widgets/stdtransactionmatched.cpp:138
+msgid "Bank entry:"
+msgstr "Entrada do banco:"
+
+#: widgets/stdtransactionmatched.cpp:166
+msgid "Your entry:"
+msgstr "Sua entrada:"
+
+#: widgets/kbudgetvalues.cpp:187
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a monthly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+"Você inseriu valores de orçamento usando uma base diferente que resultará em "
+"um orçamento mensal de <b>%1</b>. Este valor deve ser usado para preencher o "
+"orçamento mensal?"
+
+#: widgets/kbudgetvalues.cpp:187 widgets/kbudgetvalues.cpp:206
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"_: Auto assignment (caption)\n"
+"Auto assignment"
+msgstr "Attribuir automaticamente"
+
+#: widgets/kbudgetvalues.cpp:206
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a yearly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+"Você inseriu valores de orçamento usando uma base diferente que resultará em "
+"um orçamento anual de <b>%1</b>. Este valor deve ser usado para preencher o "
+"orçamento mensal?"
+
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"You have entered budget values using a different base which would result in "
+"an individual monthly budget of <b>%1</b>. Should this value be used to fill "
+"the monthly budgets?"
+msgstr ""
+"Você inseriu valores de orçamento usando uma base diferente que resultará em "
+"um orçamento mensal individual de <b>%1</b>. Este valor deve ser usado para "
+"preencher o orçamento mensal?"
+
+#: widgets/kmymoneybriefschedule.cpp:62
+msgid "Use this button to skip this transaction"
+msgstr "Use este botão para pular esta transação"
+
+#: widgets/kmymoneybriefschedule.cpp:67
+msgid "Record this transaction into the register"
+msgstr "Gravar esta transação no registro"
+
+#: widgets/kmymoneybriefschedule.cpp:68
+msgid "Use this button to record this transaction"
+msgstr "Use este botão para gravar esta transação"
+
+#: widgets/kmymoneybriefschedule.cpp:96
+msgid "%1 of %2"
+msgstr "%1 de %2"
+
+#: widgets/kmymoneybriefschedule.cpp:109
+msgid "Payment on %1 for %2 with %3 transactions remaining occuring %4."
+msgstr "Pagamento em %1 para %2 com %3 transações restantes ocorrendo %4."
+
+#: widgets/kmymoneybriefschedule.cpp:115
+msgid "Payment on %1 for %2 occuring %4."
+msgstr "Pagamento em %1 para %2 ocorrendo %4."
+
+#: widgets/kmymoneybriefschedule.cpp:136
+msgid "%1 days overdue (%2 occurences)."
+msgstr "%1 dias em atraso (%2 ocorrências)."
+
+#: widgets/register.cpp:55
+msgid "Post date"
+msgstr "Data da transação"
+
+#: widgets/register.cpp:56
+msgid "Date entered"
+msgstr "Data inserida"
+
+#: widgets/register.cpp:60
+msgid "Entry order"
+msgstr "Ordem de entrada"
+
+#: widgets/register.cpp:63
+msgid "Reconcile state"
+msgstr "Estado reconciliado"
+
+#: widgets/register.cpp:440
+msgid ""
+"_: Deposits onto account\n"
+"Deposits"
+msgstr "Depósitos"
+
+#: widgets/register.cpp:442
+msgid ""
+"_: Payments towards credit card\n"
+"Payments"
+msgstr "Pagamentos"
+
+# TODO: Verify
+#: widgets/register.cpp:446
+msgid ""
+"_: Payments made from account\n"
+"Payments"
+msgstr "Pagamentos"
+
+#: widgets/register.cpp:448
+msgid ""
+"_: Payments made with credit card\n"
+"Charges"
+msgstr "Encargos"
+
+# TODO: Verify
+#: widgets/register.cpp:736
+msgid ""
+"_: Payment made from account\n"
+"Payment"
+msgstr "Pagamento"
+
+#: widgets/register.cpp:737
+msgid ""
+"_: Deposit into account\n"
+"Deposit"
+msgstr "Depósito"
+
+#: widgets/register.cpp:813
+msgid ""
+"_: Payment made with credit card\n"
+"Charge"
+msgstr "Encargo"
+
+#: widgets/register.cpp:814
+msgid ""
+"_: Payment towards credit card\n"
+"Payment"
+msgstr "Pagamento"
+
+#: widgets/register.cpp:818 widgets/register.cpp:824
+msgid ""
+"_: Decrease of asset/liability value\n"
+"Decrease"
+msgstr "Diminuir"
+
+#: widgets/register.cpp:819 widgets/register.cpp:823
+msgid ""
+"_: Increase of asset/liability value\n"
+"Increase"
+msgstr "Aumentar"
+
+#: widgets/register.cpp:2280
+msgid "Prior transactions possibly filtered"
+msgstr "Transações anteriores provavelmente filtradas"
+
+#: widgets/register.cpp:2284
+msgid "Last reconciliation"
+msgstr "Última reconciliação"
+
+#: widgets/register.cpp:2291
+#, c-format
+msgid "Online Statement Balance: %1"
+msgstr "Saldo do Extrato: %1"
+
+#: widgets/register.cpp:2295
+msgid "This year"
+msgstr "Este ano"
+
+#: widgets/kmymoneycombo.cpp:674 widgets/register.cpp:2296
+msgid "Last month"
+msgstr "Último mês"
+
+#: widgets/register.cpp:2297
+msgid "This month"
+msgstr "Este mês"
+
+#: widgets/register.cpp:2298
+msgid "Last week"
+msgstr "Última semana"
+
+#: widgets/register.cpp:2299
+msgid "This week"
+msgstr "Nesta semana"
+
+#: widgets/register.cpp:2300
+msgid "Yesterday"
+msgstr "Ontem"
+
+#: widgets/kmymoneycombo.cpp:666 widgets/register.cpp:2301
+msgid "Today"
+msgstr "Hoje"
+
+#: widgets/register.cpp:2302 widgets/register.cpp:2307
+msgid "Future transactions"
+msgstr "Transações futuras"
+
+#: widgets/register.cpp:2303
+msgid "Next week"
+msgstr "Próxima semana"
+
+#: widgets/kmymoneycalendar.cpp:131 widgets/register.cpp:2304
+msgid "Next month"
+msgstr "Próximo mês"
+
+#: widgets/kmymoneycombo.cpp:670 widgets/register.cpp:2315
+msgid "Current fiscal year"
+msgstr "Ano fiscal atual"
+
+#: widgets/register.cpp:2316
+msgid "Previous fiscal year"
+msgstr "Ano fiscal anterior"
+
+#: widgets/register.cpp:2317
+msgid "Next fiscal year"
+msgstr "Próximo ano fiscal"
+
+#: widgets/register.cpp:2349
+msgid ""
+"_: Unknown payee\n"
+"Unknown"
+msgstr "Desconhecido"
+
+#: widgets/register.cpp:2368
+msgid ""
+"_: Unknown category\n"
+"Unknown"
+msgstr "Desconhecida"
+
+#: widgets/register.cpp:2387
+msgid ""
+"_: Unknown security\n"
+"Unknown"
+msgstr "Desconhecido"
+
+#: widgets/klistviewsearchline.cpp:249
+msgid "Search Columns"
+msgstr "Colunas de Procura"
+
+#: widgets/klistviewsearchline.cpp:251
+msgid "All Visible Columns"
+msgstr "Todas as Colunas Visíveis"
+
+#: widgets/klistviewsearchline.cpp:266
+msgid ""
+"_: Column number %1\n"
+"Column No. %1"
+msgstr "Coluna n° %1"
+
+#: widgets/klistviewsearchline.cpp:461 widgets/registersearchline.cpp:286
+msgid "S&earch:"
+msgstr "P&rocurar:"
+
+#: widgets/kmymoneyaccountselector.cpp:110
+#: widgets/kmymoneyaccountselector.cpp:371
+msgid "Income categories"
+msgstr "Categorias de receitas"
+
+#: widgets/kmymoneyaccountselector.cpp:349
+#: widgets/kmymoneyaccountselector.cpp:350
+msgid "Favorites"
+msgstr "Favoritos"
+
+#: widgets/kmymoneyaccountselector.cpp:357
+msgid "Asset accounts"
+msgstr "Contas de ativos"
+
+#: widgets/kmymoneyaccountselector.cpp:364
+msgid "Liability accounts"
+msgstr "Contas de passivo"
+
+#: widgets/kmymoneyaccountselector.cpp:381
+msgid "Expense categories"
+msgstr "Categorias de despesas"
+
+#: widgets/kmymoneyaccountselector.cpp:391
+msgid "Equity accounts"
+msgstr "Contas de ação ordinária"
+
+#: widgets/kmymoneyaccounttreebase.cpp:120
+msgid "Total Balance"
+msgstr "Saldo Total"
+
+#: widgets/kmymoneyaccounttreebase.cpp:124
+msgid "Total Value"
+msgstr "Valor Total"
+
+#: widgets/registersearchline.cpp:75
+msgid ""
+"_: label for status combo\n"
+"Stat&us"
+msgstr "Estad&o"
+
+#: widgets/registersearchline.cpp:79
+msgid "Any status"
+msgstr "Qualquer estado"
+
+#: widgets/registersearchline.cpp:80
+msgid "Imported"
+msgstr "Importada"
+
+#: widgets/registersearchline.cpp:81
+msgid "Matched"
+msgstr "Correspondeu"
+
+#: widgets/registersearchline.cpp:82
+msgid "Erroneous"
+msgstr "Errada"
+
+#: widgets/registersearchline.cpp:83
+msgid "Not marked"
+msgstr "Não marcada"
+
+#: widgets/kmymoneyaccounttree.cpp:54
+msgid ""
+"_: Column heading for category in tax report\n"
+"Tax"
+msgstr "Taxa"
+
+#: widgets/kmymoneyaccounttree.cpp:58
+msgid ""
+"_: Column heading for VAT category\n"
+"VAT"
+msgstr "VAT"
+
+#: widgets/kmymoneywizard.cpp:101
+msgid "Continue with next page"
+msgstr "Continuar com a próxima página"
+
+#: widgets/kmymoneywizard.cpp:103
+msgid "Finish wizard"
+msgstr "Terminar assistente"
+
+#: widgets/kmymoneywizard.cpp:121
+msgid "&Back"
+msgstr "&Recuar"
+
+#: widgets/kmymoneywizard.cpp:122
+msgid "&Next"
+msgstr "Próxi&ma"
+
+#: widgets/kmymoneywizard.cpp:123
+msgid "&Finish"
+msgstr "&Terminar"
+
+#: widgets/kmymoneywizard.cpp:274
+msgid "Step %1 of %2"
+msgstr "Passo %1 de %2"
+
+#: widgets/kmymoneydateinput.cpp:235
+msgid ""
+"_: Enter todays date into date input widget\n"
+"T"
+msgstr "H"
+
+#: widgets/transactionform.cpp:302
+msgid "&Deposit"
+msgstr "&Depósito"
+
+#: widgets/transactionform.cpp:304 widgets/transactionform.cpp:313
+#: widgets/transactionform.cpp:323 widgets/transactionform.cpp:333
+msgid "&Transfer"
+msgstr "&Transferência"
+
+#: widgets/transactionform.cpp:306
+msgid "&Withdrawal"
+msgstr "&Retirada"
+
+#: widgets/transactionform.cpp:311
+msgid "&Payment"
+msgstr "&Pagamento"
+
+#: widgets/transactionform.cpp:315
+msgid "&Charge"
+msgstr "En&cargos"
+
+#: widgets/transactionform.cpp:321 widgets/transactionform.cpp:335
+msgid "&Decrease"
+msgstr "&Diminuir"
+
+#: widgets/transactionform.cpp:325 widgets/transactionform.cpp:331
+msgid "&Increase"
+msgstr "&Aumentar"
+
+#: widgets/kmymoneyscheduledcalendar.cpp:42
+msgid "Select Schedules"
+msgstr "Selecionar Agendamentos"
+
+#: widgets/kmymoneycalendar.cpp:108
+msgid "Select Style"
+msgstr "Selecionar Estilo"
+
+#: widgets/kmymoneycalendar.cpp:128
+msgid "Choose Style"
+msgstr "Escolher Estilo"
+
+#: widgets/kmymoneycalendar.cpp:129
+msgid "Next year"
+msgstr "Próximo ano"
+
+#: widgets/kmymoneycalendar.cpp:130
+msgid "Previous year"
+msgstr "Ano anterior"
+
+#: widgets/kmymoneycalendar.cpp:132
+msgid "Previous month"
+msgstr "Mês anterior"
+
+#: widgets/kmymoneycalendar.cpp:133
+msgid "Select a week"
+msgstr "Selecionar uma semana"
+
+#: widgets/kmymoneycalendar.cpp:134
+msgid "Select a month"
+msgstr "Selecionar um mês"
+
+#: widgets/kmymoneycalendar.cpp:135
+msgid "Select a year"
+msgstr "Selecionar um ano"
+
+#: widgets/kmymoneycalendar.cpp:249
+msgid "Week XX"
+msgstr "Semana XX"
+
+#: widgets/kmymoneycalendar.cpp:264 widgets/kmymoneycalendar.cpp:300
+#, c-format
+msgid "Week %1"
+msgstr "Semana %1"
+
+#: widgets/rc.cpp:1
+msgid "Account Types"
+msgstr "Tipos de Conta"
+
+#: widgets/rc.cpp:3
+msgid "Detailed description"
+msgstr "Descrição detalhada"
+
+#: widgets/rc.cpp:18
+msgid "Period"
+msgstr "Período"
+
+#: widgets/rc.cpp:21
+msgid "Individual"
+msgstr "Individual"
+
+#: widgets/rc.cpp:23
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Acces to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>Recovery encryption</i> group is only accessible, if the necessary "
+"key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is "
+"found."
+msgstr ""
+"Esta página permite configurar os parâmetros para criptografia de arquivo "
+"dos seus dados do <b>KMyMoney</b> baseada no <b>GPG</b>.<p>\n"
+"O acesso a estas configurações está desabilitado se o <b>GPG</b> não puder "
+"ser detectado em seu sistema. Neste caso, certifique-se de que o <b>GPG</b> "
+"está funcionando corretamente para o usuário atual.<p>\n"
+"O grupo <i>Criptografia de segurança</i> só está acessível se a chave para o "
+"<b>kmymoney-recover@users.sourceforge.net</b> com ID 0x8AFDDC8E foi "
+"encontrada em seu chaveiro."
+
+#: widgets/rc.cpp:26
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading <i>0x</i>."
+msgstr ""
+"Insira a ID da chave que você deseja usar para a criptografia de dados. Isto "
+"pode ser tanto um endereço de e-mail ou a ID hexadecimal da chave. No caso "
+"da ID da chave, não esqueça o prefixo <i>0x</i>."
+
+#: widgets/rc.cpp:27
+msgid "User ID"
+msgstr "ID de Usuário"
+
+#: widgets/rc.cpp:29
+msgid "Recovery encryption"
+msgstr "Criptografia de segurança"
+
+#: widgets/rc.cpp:30
+msgid "Also encrypt with kmymoney-recover key"
+msgstr "Também criptografar com a chave de recuperação do KMyMoney"
+
+#: widgets/rc.cpp:32
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out."
+msgstr ""
+"Você pode configurar para que o KMyMoney criptografe os dados também com a "
+"chave de recuperação. Somente os desenvolvedores principais do KMyMoney "
+"possuem a respectiva chave privada necessária para descriptografar os dados."
+"<p>\n"
+"\n"
+"Este mecanismo é fornecido para o caso de você perder sua chave e não "
+"conseguir mais acessar seus dados. Com esta opção ativada, os "
+"desenvolvedores do KMyMoner podem decriptografar os dados e retorná-los para "
+"você em uma forma legível. Por favor, esteja preparado pois terá que "
+"responder questões detalhadas sobre o conteúdo dos seus dados antes que nós "
+"o enviemos de volta."
+
+#: widgets/rc.cpp:51
+msgid "PriceInfo"
+msgstr "Informações de Preço"
+
+#: widgets/rc.cpp:52
+msgid "Report Tab"
+msgstr "Página Relatório"
+
+#: widgets/rc.cpp:53
+msgid "<p>On this tab, you set the basic properties of this report.</p>"
+msgstr "<p>Nesta página, você configura as propriedades básicas deste relatório.</p>"
+
+#: widgets/rc.cpp:54
+msgid "Report Name"
+msgstr "Nome do Relatório"
+
+#: widgets/rc.cpp:55
+msgid "<p>Choose a name for this report.</p>"
+msgstr "<p>Selecione um nome para este relatório.</p>"
+
+#: widgets/rc.cpp:57
+msgid "<p>Enter a comment to help you remember the details of this report.</p>"
+msgstr ""
+"<p>Insira um comentário para ajudá-lo a lembrar-se dos detalhes deste "
+"relatório.</p>"
+
+#: widgets/rc.cpp:58
+msgid "Convert values to base currency"
+msgstr "Converter valores para moeda base"
+
+#: widgets/rc.cpp:59
+msgid ""
+"_: Convert 'em!!\n"
+"<p>Select this option to convert all values in the report to your base "
+"currency.</p><p>Leave it unchecked if you'd like to see values in their "
+"original currency.</p><p>If currencies are not converted, then subtotals "
+"will not be shown.</p>"
+msgstr ""
+"<p>Selecione esta opção para converter todos os valores do relatório para "
+"sua moeda de base.</p><p>Não a marque se quiser obter os valores na moeda de "
+"origem.</p><p>Se as moedas não forem convertidas, os sub-totais não serão "
+"exibidos.</p>"
+
+#: widgets/rc.cpp:60
+msgid "Mark as a favorite report"
+msgstr "Marcar como um relatório favorito"
+
+#: widgets/rc.cpp:61
+msgid ""
+"<p>Select this option to notate this report as one of your favorites.</"
+"p><p>All your favorite reports are grouped in one place on the report list "
+"for easy access.</p>"
+msgstr ""
+"<p>Selecione esta opção para anotar este relatório como um de seus favoritos."
+"</p><p>Todos os seus relatórios favoritos são agrupados em um local na lista "
+"de relatórios para fácil acesso.</p>"
+
+#: widgets/rc.cpp:62 widgets/rc.cpp:88
+msgid "Rows/Columns Tab"
+msgstr "Página Linhas/Colunas"
+
+#: widgets/rc.cpp:63 widgets/rc.cpp:89
+msgid ""
+"<p>On this tab, you configure how you'd like the rows and columns to be "
+"selected and organized.</p>"
+msgstr ""
+"<p>Nesta página, você configura como gostaria que as linhas e colunas sejam "
+"selecionadas e organizadas.</p>"
+
+#: widgets/rc.cpp:69 widgets/rc.cpp:81
+msgid "<p>Choose what kind of accounts to display as the rows of this report.</p>"
+msgstr "<p>Selecione que tipo de contas exibir como linhas neste relatório.</p>"
+
+#: widgets/rc.cpp:71
+msgid "Columns"
+msgstr "Colunas"
+
+#: widgets/rc.cpp:75
+msgid "Bi-Monthly"
+msgstr "Bi-Mensalmente"
+
+#: widgets/rc.cpp:78
+msgid "<p>Choose how large of a time period each column should encompass</p>"
+msgstr "<p>Selecione quão largo de um período de tempo cada coluna deve abranger</p>"
+
+#: widgets/rc.cpp:79
+msgid "Income & Expenses"
+msgstr "Receitas & Despesas"
+
+#: widgets/rc.cpp:80
+msgid "Assets & Liabilities"
+msgstr "Ativos & Passivos"
+
+#: widgets/rc.cpp:82
+msgid "Rows"
+msgstr "Linhas"
+
+#: widgets/rc.cpp:83
+msgid "Show totals column"
+msgstr "Mostrar a coluna dos totais"
+
+#: widgets/rc.cpp:84
+msgid "Average days"
+msgstr "Média de dias"
+
+#: widgets/rc.cpp:85
+msgid "Include scheduled transactions"
+msgstr "Incluir as transações agendadas"
+
+#: widgets/rc.cpp:86
+msgid "Include transfers"
+msgstr "Incluir as transferências"
+
+#: widgets/rc.cpp:87
+msgid "Include unused accounts/categories"
+msgstr "Incluir contas/categorias não usadas"
+
+#: widgets/rc.cpp:90
+msgid "Organize by:"
+msgstr "Organizadas por:"
+
+#: widgets/rc.cpp:92
+msgid "Top Categories"
+msgstr "Por Categorias"
+
+#: widgets/rc.cpp:95
+msgid "Top Accounts"
+msgstr "Por Contas"
+
+#: widgets/rc.cpp:98
+msgid "<p>Choose how to group the transactions in this report</p>"
+msgstr "<p>Selecione como agrupar as transações neste relatório</p>"
+
+#: widgets/rc.cpp:99
+msgid "Show Columns"
+msgstr "Mostrar Colunas"
+
+#: widgets/rc.cpp:100
+msgid ""
+"<p>Choose which columns should be shown in the report.</p><p>The date and "
+"transaction amount are always shown.</p>"
+msgstr ""
+"<p>Selecione quais colunas devem ser mostradas no relatório.</p><p>A data e "
+"o montante da transação são sempre mostrados.</p>"
+
+#: widgets/rc.cpp:102
+msgid "<p>Select this option to show the Memo column</p>"
+msgstr "<p>Selecione esta opção para mostrar a coluna Memo</p>"
+
+#: widgets/rc.cpp:104
+msgid "<p>Select this option to show the Shares column for investments</p>"
+msgstr "<p>Selecione esta opção para mostrar a coluna Cotas para investimentos</p>"
+
+#: widgets/rc.cpp:106
+msgid "<p>Select this option to show the Price column for investments</p>"
+msgstr "<p>Selecione esta opção para mostrar a coluna Preço para os investimentos</p>"
+
+#: widgets/rc.cpp:108
+msgid "<p>Select this option to show the Reconciled column</p>"
+msgstr "<p>Selecione esta opção para mostrar a coluna Reconciliado</p>"
+
+#: widgets/rc.cpp:110
+msgid "<p>Select this option to show the Account column</p>"
+msgstr "<p>Selecione esta opção para mostrar a coluna Conta</p>"
+
+#: widgets/rc.cpp:112
+msgid "<p>Select this option to show the Number column</p>"
+msgstr "<p>Selecione esta opção para mostrar a coluna Número</p>"
+
+#: widgets/rc.cpp:114
+msgid "<p>Select this option to show the Payee column</p>"
+msgstr "<p>Selecione esta opção para mostrar a coluna Beneficiário</p>"
+
+#: widgets/rc.cpp:116
+msgid "<p>Select this option to show the Category column</p>"
+msgstr "<p>Selecione esta opção para mostrar a coluna Categoria</p>"
+
+#: widgets/rc.cpp:118
+msgid "<p>Select this option to show the Action column</p>"
+msgstr "<p>Selecione esta opção para mostrar a coluna Ação</p>"
+
+#: widgets/rc.cpp:120
+msgid "<p>Select this option to show the Running balance column</p>"
+msgstr "<p>Selecione esta opção para mostrar a coluna de saldo em execução</p>"
+
+#: widgets/rc.cpp:121
+msgid "Include only Loan accounts"
+msgstr "Incluir apenas Contas de Empréstimo"
+
+#: widgets/rc.cpp:122
+msgid "Include only Investment accounts"
+msgstr "Incluir somente contas de investimento"
+
+#: widgets/rc.cpp:123 widgets/rc.cpp:127
+msgid ""
+"<p>Check this box to include only those categories which have been marked to "
+"\"Include on Tax Reports\"</p>"
+msgstr ""
+"<p>Ative esta caixa para incluir somente aquelas categorias marcadas para "
+"\"Incluir no Relatório de Taxas\"</p>"
+
+#: widgets/rc.cpp:124
+msgid "Hide Split Transaction Details"
+msgstr "Ocultar Detalhes da Parcela da Transação"
+
+#: widgets/rc.cpp:125
+msgid "Do not display the individual transactions that make up a split transaction"
+msgstr "Não exibir transações individuais que fazem parte de uma parcela de transação"
+
+#: widgets/rc.cpp:126
+msgid "Include only Tax categories"
+msgstr "Incluir somente categorias de Taxas"
+
+#: widgets/rc.cpp:128
+msgid "Chart Tab"
+msgstr "Página de Gráficos"
+
+#: widgets/rc.cpp:129
+msgid "<p>On this tab, you configure the chart drawn forthis report.</p>"
+msgstr ""
+"<p>Nesta página, você pode configurar os gráficos gerados para este "
+"relatório.</p>"
+
+#: widgets/rc.cpp:130
+msgid "Chart Type"
+msgstr "Tipo de Gráfico"
+
+#: widgets/rc.cpp:131
+msgid "<p>Select what form you would like the chart to be drawn as.</p>"
+msgstr "<p>Selecione a forma que você gostaria que o gráfico fosse desenhado.</p>"
+
+#: widgets/rc.cpp:132
+msgid "Line"
+msgstr "Linha"
+
+#: widgets/rc.cpp:133
+msgid "Bar"
+msgstr "Barra"
+
+#: widgets/rc.cpp:134
+msgid "Stacked Bar"
+msgstr "Barra Empilhada "
+
+#: widgets/rc.cpp:135
+msgid "Pie"
+msgstr "Circular"
+
+#: widgets/rc.cpp:136
+msgid "Ring"
+msgstr "Anel"
+
+#: widgets/rc.cpp:137
+msgid "Show grid lines"
+msgstr "Mostrar linhas de grade"
+
+#: widgets/rc.cpp:138
+msgid ""
+"<p>Select this option to show horizontal and vertical grid lines on the "
+"chart.</p>"
+msgstr ""
+"<p>Selecione esta opção para ver as linhas de grade horizontais e verticais "
+"no gráfico.</p>"
+
+#: widgets/rc.cpp:139
+msgid "Draw values on chart"
+msgstr "Mostrar valores no gráfico"
+
+#: widgets/rc.cpp:140
+msgid ""
+"<p>Select this option to draw the numeric values for data points next to "
+"their plot location.</p>"
+msgstr ""
+"<p>Selecione esta opção para exibir os valores numéricos próximos aos pontos "
+"de marcação do gráfico.</p>"
+
+#: widgets/rc.cpp:141
+msgid "Show as chart by default"
+msgstr "Mostrar como gráfico por padrão"
+
+#: widgets/rc.cpp:142
+msgid ""
+"<p>Select this option to cause the report to be shown as a chart when you "
+"first open the report. Otherwise, it will come up as a text report.</p>"
+msgstr ""
+"<p>Selecione esta opção para ver o gráfico do relatório ao acessá-lo "
+"inicialmente. Caso contrário, o relatório será exibido inicialmente como "
+"texto.</p>"
+
+#: widgets/rc.cpp:143
+msgid "Line width"
+msgstr "Largura da linha"
+
+#: widgets/rc.cpp:144
+msgid "<p>Select what width should be used to draw the line on the chart</p>"
+msgstr ""
+"<p>Selecione que largura deverá ser usada para desenhar a linha no gráfico</"
+"p>"
+
+#: widgets/rc.cpp:145
+msgid "ReportControl"
+msgstr "ReportControl"
+
+#: widgets/rc.cpp:149
+msgid "Configure this report"
+msgstr "Configurar este relatório"
+
+#: widgets/rc.cpp:151
+msgid "Create a new report based on this one"
+msgstr "Criar um novo relatório baseado neste"
+
+#: widgets/rc.cpp:153
+msgid "Copy this report to the clipboard"
+msgstr "Copiar este relatório para a área de transferência"
+
+#: widgets/rc.cpp:155
+msgid "Export this report as an HTML or CSV file"
+msgstr "Exportar este relatório como um arquivo HTML ou CSV"
+
+#: widgets/rc.cpp:157
+msgid "Permanently delete this report"
+msgstr "Excluir permanentemente este relatório"
+
+#: widgets/rc.cpp:159
+msgid "Close this window"
+msgstr "Fechar esta janela"
+
+#: widgets/rc.cpp:162
+msgid "n of n"
+msgstr "n de n"
+
+#: widgets/rc.cpp:166
+msgid "Account:"
+msgstr "Conta:"
+
+#: widgets/rc.cpp:168
+msgid "Enter..."
+msgstr "Entrar..."
+
+#: widgets/rc.cpp:171
+msgid "TransactionSortOptionDecl"
+msgstr "TransactionSortOptionDecl"
+
+#: widgets/rc.cpp:173
+msgid "Sort order"
+msgstr "Ordenação"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Sunday\n"
+"Sun"
+msgstr "Dom"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Saturday\n"
+"Sat"
+msgstr "Sáb"
+
+#: widgets/kmymoneydatetbl.cpp:171 widgets/kmymoneydatetbl.cpp:178
+msgid "Week %1 for year %2."
+msgstr "Semana %1 do ano %2."
+
+#: widgets/kmymoneycombo.cpp:417
+msgid "ATM"
+msgstr "ATM"
+
+#: widgets/kmymoneycombo.cpp:418
+msgid "Withdrawal"
+msgstr "Retirada"
+
+#: widgets/kmymoneycombo.cpp:421
+msgid "Cheque"
+msgstr "Cheque"
+
+#: widgets/kmymoneycombo.cpp:469
+msgid ""
+"_: Activity for expense categories\n"
+"Paid"
+msgstr "Pago"
+
+#: widgets/kmymoneycombo.cpp:470
+msgid ""
+"_: Activity for income categories\n"
+"Received"
+msgstr "Recebido"
+
+#: widgets/kmymoneycombo.cpp:519
+msgid "Reinvest dividend"
+msgstr "Reinvestir dividendos"
+
+#: widgets/kmymoneycombo.cpp:664
+msgid "All dates"
+msgstr "Todas datas"
+
+#: widgets/kmymoneycombo.cpp:665
+msgid "As of today"
+msgstr "Como a de hoje"
+
+#: widgets/kmymoneycombo.cpp:667
+msgid "Current month"
+msgstr "Mês atual"
+
+#: widgets/kmymoneycombo.cpp:668
+msgid "Current quarter"
+msgstr "Trimestre atual"
+
+#: widgets/kmymoneycombo.cpp:669
+msgid "Current year"
+msgstr "Ano atual"
+
+#: widgets/kmymoneycombo.cpp:671
+msgid "Month to date"
+msgstr "Início do mês até hoje"
+
+#: widgets/kmymoneycombo.cpp:672
+msgid "Year to date"
+msgstr "Início do ano até hoje"
+
+#: widgets/kmymoneycombo.cpp:673
+msgid "Year to month"
+msgstr "Ano até mês"
+
+#: widgets/kmymoneycombo.cpp:675
+msgid "Last year"
+msgstr "Último ano"
+
+#: widgets/kmymoneycombo.cpp:676
+msgid "Last fiscal year"
+msgstr "Último ano fiscal"
+
+#: widgets/kmymoneycombo.cpp:677
+msgid "Last 7 days"
+msgstr "Últimos 7 dias"
+
+#: widgets/kmymoneycombo.cpp:678
+msgid "Last 30 days"
+msgstr "Últimos 30 dias"
+
+#: widgets/kmymoneycombo.cpp:679
+msgid "Last 3 months"
+msgstr "Últimos 3 meses"
+
+#: widgets/kmymoneycombo.cpp:680
+msgid "Last quarter"
+msgstr "Último trimestre"
+
+#: widgets/kmymoneycombo.cpp:681
+msgid "Last 6 months"
+msgstr "Últimos 6 meses"
+
+#: widgets/kmymoneycombo.cpp:682
+msgid "Last 11 months"
+msgstr "Últimos 11 meses"
+
+#: widgets/kmymoneycombo.cpp:683
+msgid "Last 12 months"
+msgstr "Últimos 12 meses"
+
+#: widgets/kmymoneycombo.cpp:684
+msgid "Next 7 days"
+msgstr "Próximos 7 dias"
+
+#: widgets/kmymoneycombo.cpp:685
+msgid "Next 30 days"
+msgstr "Próximos 30 dias"
+
+#: widgets/kmymoneycombo.cpp:686
+msgid "Next 3 months"
+msgstr "Próximos 3 meses"
+
+#: widgets/kmymoneycombo.cpp:687
+msgid "Next quarter"
+msgstr "Próximo trimestre"
+
+#: widgets/kmymoneycombo.cpp:688
+msgid "Next 6 months"
+msgstr "Próximos 6 meses"
+
+#: widgets/kmymoneycombo.cpp:689
+msgid "Next 12 months"
+msgstr "Próximos 12 meses"
+
+#: widgets/kmymoneycombo.cpp:690
+msgid "Last 3 months to next 3 months"
+msgstr "Últimos 3 meses até próximos 3 meses"
+
+#: widgets/kmymoneycombo.cpp:691
+msgid "User defined"
+msgstr "Definido pelo usuário"
+
+#~ msgid "Reset"
+#~ msgstr "Reiniciar"
+
+#~ msgid "No plugins loaded"
+#~ msgstr "Nenhum plugin carregado"
+
+#~ msgid "Create schedule..."
+#~ msgstr "Criar agendamento..."
+
+#~ msgid "New schedule..."
+#~ msgstr "Novo agendamento..."
+
+#~ msgid "Edit schedule..."
+#~ msgstr "Editar agendamento..."
+
+#~ msgid "Delete schedule..."
+#~ msgstr "Apagar agendamento..."
+
+#~ msgid "Duplicate schedule"
+#~ msgstr "Duplicar agendamento"
+
+#~ msgid "Enter schedule..."
+#~ msgstr "Inserir agendamento..."
+
+#~ msgid "Skip schedule..."
+#~ msgstr "Ignorar agendamento..."
+
+#~ msgid "Adjusting schedules..."
+#~ msgstr "Ajustando agendamentos..."
+
+#~ msgid "Add schedule"
+#~ msgstr "Adicionar agendamento"
+
+#~ msgid "Unable to enter transaction for schedule '%1'"
+#~ msgstr "Não foi possível inserir a transação para o agendamento '%1'"
+
+#~ msgid "Loaded"
+#~ msgstr "Carregado"
+
+#~ msgid ""
+#~ "_: Plugin interface description\n"
+#~ "Online access"
+#~ msgstr "Acesso online"
+
+#~ msgid ""
+#~ "_: Plugin interface description\n"
+#~ "File import"
+#~ msgstr "Importar arquivo"
+
+#~ msgid "not loaded: %1"
+#~ msgstr "não carregado: %1"
+
+#~ msgid "Schedule options"
+#~ msgstr "Opções de Agendamento"
+
+#~ msgid "New Schedule"
+#~ msgstr "Novo Agendamento"
+
+#~ msgid "Edit Schedule"
+#~ msgstr "Editar Agendamento"
+
+#~ msgid "Search transactions containing the following text"
+#~ msgstr "Procurar transações contendo o seguinte texto"
+
+#~ msgid "Search"
+#~ msgstr "Procurar"
+
+#~ msgid "&Search"
+#~ msgstr "&Procurar"
+
+#~ msgid "Start the search"
+#~ msgstr "Iniciar a procura"
+
+#~ msgid "Takes the current criteria and searches for matching transactions."
+#~ msgstr ""
+#~ "Toma os critérios atuais e procurar por transações que casem com estes "
+#~ "critérios."
+
+#~ msgid "Reset all settings"
+#~ msgstr "Reiniciar todas configurações"
+
+#~ msgid ""
+#~ "Use this to reset all settings to the state they were when the dialog was "
+#~ "opened."
+#~ msgstr ""
+#~ "Use isto para retornar todas as configurações ao estado em que elas se "
+#~ "encontravam quando o diálogo foi aberto."
+
+#~ msgid "Use this button to close the window"
+#~ msgstr "Use este botão para fechar a janela"
+
+#~ msgid "Multi-user mode not yet implemented\n"
+#~ msgstr "O modo multi-usuário ainda não foi implementado\n"
+
+#~ msgid ""
+#~ "Reading the bank list failed with the following error: '%1'. The console "
+#~ "output may have more information."
+#~ msgstr ""
+#~ "A leitura da lista de bancos falhou com o seguinte erro: '%1'. A saída do "
+#~ "console pode ter mais informações."
+
+#~ msgid "XMLPP error"
+#~ msgstr "Erro de XMLPP"
+
+#~ msgid "Disabled. No online banking services are available"
+#~ msgstr "Desativado. Nenhum servico de banco online está disponível"
+
+#~ msgid "CHECKING"
+#~ msgstr "CHEQUES"
+
+#~ msgid "SAVINGS"
+#~ msgstr "POUPANÇAS"
+
+#~ msgid "MONEY MARKET"
+#~ msgstr "MERCADO DE MOEDA"
+
+#~ msgid "CREDIT LINE"
+#~ msgstr "LINHA DE CRÉDITO"
+
+#~ msgid "CMA"
+#~ msgstr "CMA"
+
+#~ msgid "CREDIT CARD"
+#~ msgstr "CARTÃO DE CRÉDITO"
+
+#~ msgid "INVESTMENT"
+#~ msgstr "INVESTIMENTO"
+
+#~ msgid "UNKNOWN"
+#~ msgstr "DESCONHECIDO"
+
+#~ msgid "SQLite requires a file name; try again?"
+#~ msgstr "O SQLite necessita de um nome de arquivo; tentar novamente?"
+
+#~ msgid ""
+#~ "<h3>Database Type</h3><p>This box lists all Qt SQL drivers installed on "
+#~ "your system. Select the driver for your database type. If the one you "
+#~ "want is not in the list, you need to install the appropriate driver. See "
+#~ "your distro documentation, or visit the Qt web Site (http://www.trolltech."
+#~ "com) and search for 'SQL drivers'.</p><h3>Database Name</h3><p>The "
+#~ "default database name is KMyMoney, but you may choose some other name if "
+#~ "you like. SQLite has one database per file; selecting this driver opens "
+#~ "the file dialog. For database types other than SQLite and MySql, the "
+#~ "database itself must be pre-created, though KMyMoney will create all "
+#~ "table structures where necessary.</p><h3>Host Name</h3><p>For the average "
+#~ "user, the default name of localhost, being the machine you are currently "
+#~ "using, is correct. For networked databases, enter the host name of the "
+#~ "system where the database is stored. You may need to contact your "
+#~ "database administrator for this information.</p><h3>User Name and "
+#~ "Password</h3><p>Check the permissions set up on your database, or contact "
+#~ "the database administrator, for the correct values to use here. The user "
+#~ "name must be capable of deleting, inserting and updating records. If the "
+#~ "user name is the same as your login name, a password is not normally "
+#~ "required.</p><h3>Generate SQL</h3><p>Click this button to create a text "
+#~ "file and write the commands needed to create the database tables and "
+#~ "other objects. With care, this may be edited if the in-built commands do "
+#~ "not work for your database system.</p><p>Please read the appropriate "
+#~ "chapter of the KMyMoney handbook for further information on database "
+#~ "usage.</p>"
+#~ msgstr ""
+#~ "<h3> Tipo de Banco de Dados</h3> <p>Esta caixa lista todos os drivers Qt "
+#~ "SQL instalados no seu sistema. Selecione o driver para o seu tipo de "
+#~ "banco de dados. Se o tipo que você deseja não estiver na lista, você terá "
+#~ "que instalar o driver apropriado. Verifique a documentação da sua "
+#~ "distribuição, ou visite a página internet do Qt (http://www.trolltech."
+#~ "com) e procure por 'drivers SQL'.</p> <h3>Nome do Banco de Dados</h3> "
+#~ "<p>O nome padrão do banco de dados é KMyMoney, mas você pode escolher "
+#~ "outro nome se quiser. O SQLite possui um único banco de dados por "
+#~ "arquivo, assim selecionando-o será aberta a janela de abertura de "
+#~ "arquivos. Para outros tipos de bancos de dados, que não sejam o SQLite e "
+#~ "o MySql, o banco de dados já deve existir, mesmo que este programa crie "
+#~ "todas as tabelas necessárias.</p> <h3>Nome da Máquina</h3> <p> Para o uso "
+#~ "corriqueiro, o nome padrão localhost, que se refere à máquina que você "
+#~ "está usando, é o mais adequado. Para bancos de dados em rede, insira o "
+#~ "nome da máquina a que vai se conectar. Você pode precisar contactar seu "
+#~ "administrador de banco de dados para obter esta informação.</p> <h3>Nome "
+#~ "do Usuário e Senha</h3> <p>Verifique as permissões no seu servidor, ou "
+#~ "contacte o administrador, para obter os valores a serem inseridos aqui. O "
+#~ "usuário deve poder apagar, inserir e atualizar linhas.Se o nome de "
+#~ "usuário é o seu nome de conexão, a senha normalmente não é necessária.</"
+#~ "p> <h3>Criar SQL</h3> <p>Clicar neste botão cria um arquivo texto e "
+#~ "escreve os comandos necessários para criar as tabelas do banco de dados e "
+#~ "outros objetos. Com cuidado, ele poderá ser editado se os comandos "
+#~ "gerados não funcionarem em seu sistema de banco de dados.</p><p>Por "
+#~ "favor, leia o capítulo apropriado do manual do KMyMoney para mais "
+#~ "informações sobre o uso de banco de dados.</p>"
+
+#~ msgid "Selecting a SQL database"
+#~ msgstr "Seleção de um banco de dados SQL"
+
+#~ msgid "Accept splits and return to transaction form"
+#~ msgstr "Aceitar parcelas e retornar ao formulário de transação"
+
+#~ msgid ""
+#~ "Use this to accept all changes to the splits and return to the transaction"
+#~ msgstr ""
+#~ "Use isto para aceitar todas as mudanças feitas às parcelas e retornar à "
+#~ "transação"
+
+#~ msgid ""
+#~ "This QIF file contains investment transactions. You are trying to import "
+#~ "this file into an account which is not an investment account. These "
+#~ "transactions will be ignored."
+#~ msgstr ""
+#~ "Este arquivo QIF contém transações de investimentos. Você está tentando "
+#~ "importar este arquivo para uma conta que não é uma conta de "
+#~ "investimento. Estas transações serão ignoradas."
+
+#~ msgid "Invalid account for investments"
+#~ msgstr "Conta inválida para investimentos"
+
+#~ msgid "Problem adding imported transaction: "
+#~ msgstr "Problema adicionando transação importada: "
+
+#~ msgid ""
+#~ "This file contains security entries. These are not currently supported "
+#~ "by the QIF importer."
+#~ msgstr ""
+#~ "Este arquivo contém entradas de títulos. Elas não são atualmente "
+#~ "suportadas pelo importador QIF."
+
+#~ msgid "Unable to import"
+#~ msgstr "Não foi possível importar"
+
+#~ msgid "Budget "
+#~ msgstr "Orçamento "
+
+#~ msgid "Forecast "
+#~ msgstr "Previsão "
+
+#~ msgid "Budget Total"
+#~ msgstr "Orçamento Total"
+
+#~ msgid "Forecast Total"
+#~ msgstr "Previsão Total"
+
+#~ msgid "pics/titlelabel_background.png"
+#~ msgstr "pics/titlelabel_background.png"
+
+#~ msgid "Incomes and Expenses This Month"
+#~ msgstr "Receitas e Despesas Deste Mês"
+
+#~ msgid "Incomes"
+#~ msgstr "Receitas"
+
+#~ msgid "Schedules This Month"
+#~ msgstr "Agendamentos Neste Mês"
+
+#~ msgid "&Ok"
+#~ msgstr "&Ok"
+
+#~ msgid "Accepts the value and stores them"
+#~ msgstr "Aceita os valores e armazena-os"
+
+#~ msgid "Use this to accept all values and close the dialog."
+#~ msgstr "Use isto para aceitar todos os valores e fechar o diálogo."
+
+#~ msgid "Cancel the operation"
+#~ msgstr "Cancelar a operação"
+
+#~ msgid "Use this to dismiss all the changes made in this dialog."
+#~ msgstr "Use isto para descartar todas as mudanças feitas nesta janela."
+
+#~ msgid "Abort operation"
+#~ msgstr "Cancelar operação"
+
+#~ msgid "Use this to abort the export operation"
+#~ msgstr "Use isto para cancelar a operação de exportação"
+
+#~ msgid "Start the backup operation"
+#~ msgstr "Iniciar a operação de cópia de segurança"
+
+#~ msgid "Pressing this button starts the backup operation."
+#~ msgstr ""
+#~ "Ao pressionar o botão será iniciada a operação de cópia de segurança."
+
+#~ msgid "Cancel the backup operation"
+#~ msgstr "Cancelar a operação de cópia de segurança"
+
+#~ msgid "Use this to abort the backup and to return to KMyMoney."
+#~ msgstr "Use isto para cancelar a cópia de segurança e retornar ao KMyMoney."
+
+#~ msgid "Reject all changes to the splits and return to transaction form"
+#~ msgstr ""
+#~ "Rejeitar todas as mudanças feitas às parcelas e retornar ao formulário de "
+#~ "transação"
+
+#~ msgid ""
+#~ "Use this to reject all changes to the splits and return to the transaction"
+#~ msgstr ""
+#~ "Use isto para rejeitar todas as mudanças feitas às parcelas e retornar à "
+#~ "transação"
+
+#~ msgid "Close dialog"
+#~ msgstr "Fechar diálogo"
+
+#~ msgid "Use this to close the dialog and abort the operation"
+#~ msgstr "Use isto para fechar o diálogo e abortar a operação"
+
+#~ msgid "Use this to accept and store data"
+#~ msgstr "Use isto para aceitar e armazenar os dados"
+
+#~ msgid "Delete the selected profile"
+#~ msgstr "Apagar o perfil selecionado"
+
+#~ msgid "Use this to delete the selected profile"
+#~ msgstr "Use isto para apagar o perfil selecionado"
+
+#~ msgid "Use this to accept the data."
+#~ msgstr "Use isto para aceitar os dados."
+
+#~ msgid "Reject all changes to the data and closes the dialog"
+#~ msgstr "Rejeita todas as mudanças nos dados e fecha o diálogo"
+
+#~ msgid "Use this to reject all changes."
+#~ msgstr "Use isto para rejeitar todas as mudanças."
+
+#~ msgid "Scan"
+#~ msgstr "Procurar"
+
+#~ msgid "Automatically create missing payees"
+#~ msgstr "Criar automaticamente beneficiários não encontrados"
+
+#~ msgid "Remove this price information from the price history"
+#~ msgstr "Remover esta informação de preço do histórico de preços"
+
+#~ msgid "Create a new price information entry."
+#~ msgstr "Criar uma nova entrada de informação de preço."
+
+#~ msgid "Accepts the selected action and continues"
+#~ msgstr "Aceita a ação selecionada e continua"
+
+#~ msgid ""
+#~ "Use this to accept the selection and continue processing the transaction"
+#~ msgstr ""
+#~ "Use isto para aceitar a seleção e continuar o processamento da transação"
+
+#~ msgid "Reject any changes"
+#~ msgstr "Rejeitar quaisquer mudanças"
+
+#~ msgid "Use this to abort the account/category dialog"
+#~ msgstr "Use isto para cancelar o diálogo de conta/categoria"
+
+#~ msgid "Accept modifications"
+#~ msgstr "Aceitar modificações"
+
+#~ msgid "Use this to accept the data and possibly create the account/category"
+#~ msgstr ""
+#~ "Use isto para aceitar os dados e possivelmente criar a conta/categoria"
+
+# TODO: Verify (Novo/Nova)
+#~ msgid "New ..."
+#~ msgstr "Novo..."
diff --git a/po/ro.po b/po/ro.po
new file mode 100644
index 0000000..dc1e809
--- /dev/null
+++ b/po/ro.po
@@ -0,0 +1,13848 @@
+# translation of ro.po to Română
+#
+# Cristian Onet <onet.cristian@gmail.com>, 2008, 2009.
+# Cristian Oneţ <onet.cristian@gmail.com>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: ro\n"
+"POT-Creation-Date: 2009-06-25 19:04+0200\n"
+"PO-Revision-Date: 2009-06-25 20:43+0300\n"
+"Last-Translator: Cristian Oneţ <onet.cristian@gmail.com>\n"
+"Language-Team: Romanian <kde-i18n-doc@kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 0.3\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
+"20)) ? 1 : 2;\n"
+
+#: wizards/wizardpages/rc.cpp:1
+msgid ""
+"Select groups of accounts that correspond to the ways that you will use "
+"KMyMoney. Each group you select will cause several accounts and categories "
+"to be created. Select the groups that are relevant to you. You can always "
+"create additional accounts manually later."
+msgstr ""
+"Alegeţi grupe de conturi care corespund modului în care veţi folosi "
+"KMyMoney. Fiecare grup ales va determina crearea a unor conturi şi "
+"categorii. Alegeţi grupul potrivit pentru nevoile dumneavoastră. După ce aţi "
+"ales grupul puteţi crea noi conturi."
+
+#: wizards/wizardpages/rc.cpp:2
+msgid ""
+"<p>KMyMoney supports multiple currencies, nevertheless one of them will be "
+"used as your base currency. The base currency is used as default for new "
+"accounts and reports. Please select the base currency from the following "
+"list."
+msgstr ""
+"<p>KMyMoney poate lucra cu mai multe monede, cu toate acestea una dintre ele "
+"va fi aleasă ca moneda de bază. Moneda de bază este folosită ca moneda "
+"implicită pentru conturi şi rapoarte noi. Vă rog să selectaţi moneda de bază "
+"din lista următoare."
+
+#: dialogs/kequitypriceupdatedlg.cpp:71 dialogs/rc.cpp:399 dialogs/rc.cpp:485
+#: dialogs/rc.cpp:724 dialogs/settings/rc.cpp:108 reports/listtable.cpp:226
+#: views/kinvestmentview.cpp:71 views/kpayeesview.cpp:351 views/rc.cpp:13
+#: widgets/rc.cpp:5 widgets/rc.cpp:34
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1599
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1629
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1673
+#: wizards/wizardpages/rc.cpp:3
+msgid "Name"
+msgstr "Nume"
+
+#: wizards/wizardpages/rc.cpp:4
+msgid "ISO Code"
+msgstr "Cod ISO"
+
+#: dialogs/kequitypriceupdatedlg.cpp:69 dialogs/kequitypriceupdatedlg.cpp:70
+#: dialogs/rc.cpp:71 dialogs/rc.cpp:725 dialogs/settings/rc.cpp:112
+#: views/kinvestmentview.cpp:72 widgets/rc.cpp:37 wizards/wizardpages/rc.cpp:5
+msgid "Symbol"
+msgstr "Simbol"
+
+#: wizards/wizardpages/rc.cpp:6
+msgid ""
+"<p>Use the fields below to enter some information about yourself.</p>\n"
+"\n"
+"<p>All information is optional and only used to personalize your KMyMoney "
+"file.</p>"
+msgstr ""
+"<p>Folosiţi câmpurile de mai jos pentru a introduce informaţii despre "
+"dumneavoastră.</p>\n"
+"\n"
+"<p>Toate informaţiile sunt opţionale şi sunt folosite doar pentru a vă "
+"personaliza fişierul KMyMoney.</p>"
+
+#: dialogs/rc.cpp:425 wizards/newuserwizard/rc.cpp:27
+#: wizards/wizardpages/rc.cpp:7
+msgid "Town:"
+msgstr "Oraş:"
+
+#: dialogs/rc.cpp:420 wizards/newuserwizard/rc.cpp:22
+#: wizards/wizardpages/rc.cpp:8
+msgid "County/State:"
+msgstr "Judeţ:"
+
+#: dialogs/rc.cpp:391 dialogs/rc.cpp:421 wizards/newuserwizard/rc.cpp:23
+#: wizards/wizardpages/rc.cpp:9
+msgid "Street:"
+msgstr "Stradă:"
+
+#: dialogs/rc.cpp:422 wizards/newuserwizard/rc.cpp:24
+#: wizards/wizardpages/rc.cpp:10
+msgid "Email:"
+msgstr "Poşta electronică:"
+
+#: dialogs/rc.cpp:424 wizards/newuserwizard/rc.cpp:26
+#: wizards/wizardpages/rc.cpp:11
+msgid "Telephone:"
+msgstr "Telefon:"
+
+#: dialogs/rc.cpp:423 wizards/newuserwizard/rc.cpp:25
+#: wizards/wizardpages/rc.cpp:12
+msgid "Your name:"
+msgstr "Numele dumneavoastră:"
+
+#: dialogs/rc.cpp:427 wizards/newuserwizard/rc.cpp:29
+#: wizards/wizardpages/rc.cpp:13
+msgid "Load from Addressbook"
+msgstr "Încărcaţi din cartea de adrese"
+
+#: dialogs/rc.cpp:392 dialogs/rc.cpp:426 views/rc.cpp:68
+#: wizards/wizardpages/rc.cpp:14
+msgid "Postal Code:"
+msgstr "Cod poştal:"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:82
+msgid "KMyMoney New Account Setup"
+msgstr "Creaţi un cont nou KMyMoney"
+
+#: dialogs/rc.cpp:360 dialogs/rc.cpp:361 reports/listtable.cpp:230
+#: wizards/newaccountwizard/knewaccountwizard.cpp:83
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1616
+#: wizards/newaccountwizard/rc.cpp:61
+msgid "Institution"
+msgstr "Instituţie"
+
+#: dialogs/investactivities.cpp:198 dialogs/investactivities.cpp:286
+#: dialogs/investactivities.cpp:367 dialogs/kfindtransactiondlg.cpp:181
+#: dialogs/rc.cpp:139 dialogs/rc.cpp:192 dialogs/rc.cpp:207
+#: dialogs/transactioneditor.cpp:734 reports/listtable.cpp:201
+#: reports/pivottable.cpp:1336 reports/pivottable.cpp:1586
+#: views/kforecastview.cpp:393 views/kgloballedgerview.cpp:175
+#: views/khomeview.cpp:418 views/khomeview.cpp:491 views/khomeview.cpp:525
+#: views/khomeview.cpp:764 views/khomeview.cpp:967 views/khomeview.cpp:1437
+#: views/kscheduledview.cpp:71 views/rc.cpp:17 views/rc.cpp:44
+#: widgets/kmymoneyaccounttreebase.cpp:58
+#: widgets/kmymoneyaccounttreeforecast.cpp:41 widgets/rc.cpp:109
+#: widgets/register.cpp:566 widgets/transaction.cpp:978
+#: widgets/transaction.cpp:1535
+#: wizards/newaccountwizard/knewaccountwizard.cpp:84
+msgid "Account"
+msgstr "Cont"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:85
+msgid "Broker"
+msgstr "Broker"
+
+#: dialogs/kfindtransactiondlg.cpp:225 dialogs/rc.cpp:70 dialogs/rc.cpp:104
+#: dialogs/rc.cpp:159 dialogs/rc.cpp:223 dialogs/rc.cpp:246 dialogs/rc.cpp:751
+#: dialogs/settings/rc.cpp:109 widgets/rc.cpp:35 widgets/register.cpp:568
+#: wizards/newaccountwizard/knewaccountwizard.cpp:86
+msgid "Details"
+msgstr "Detalii"
+
+#: dialogs/knewloanwizard.cpp:636 dialogs/rc.cpp:231 dialogs/rc.cpp:608
+#: kmymoneyutils.cpp:191 views/khomeview.cpp:399
+#: wizards/newaccountwizard/knewaccountwizard.cpp:87
+#: wizards/newaccountwizard/knewaccountwizard.cpp:880
+msgid "Payments"
+msgstr "Plăţi"
+
+#: dialogs/investactivities.cpp:195 dialogs/investactivities.cpp:283
+#: dialogs/investactivities.cpp:422 dialogs/investtransactioneditor.cpp:217
+#: reports/listtable.cpp:221 widgets/transaction.cpp:1565
+#: wizards/newaccountwizard/knewaccountwizard.cpp:88
+msgid "Fees"
+msgstr "Taxe"
+
+#: dialogs/rc.cpp:624 views/khomeview.cpp:415 views/khomeview.cpp:488
+#: views/khomeview.cpp:522 wizards/newaccountwizard/knewaccountwizard.cpp:89
+msgid "Schedule"
+msgstr "Programare"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:90
+msgid "Payout"
+msgstr "Plată"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:91
+msgid "Parent Account"
+msgstr "Cont părinte"
+
+#: dialogs/rc.cpp:719 wizards/newaccountwizard/knewaccountwizard.cpp:92
+#: wizards/newuserwizard/knewuserwizard.cpp:86
+msgid "Finish"
+msgstr "Termină"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:248
+msgid "Credit card payment"
+msgstr "Plată cu card de credit"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:264
+#, c-format
+msgid "Loan payment for %1"
+msgstr "Plata împrumut pentru %1"
+
+#: mymoney/mymoneyscheduled.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:279
+msgid "Loan payment"
+msgstr "Plata împrumut"
+
+#: dialogs/rc.cpp:134 wizards/newaccountwizard/knewaccountwizard.cpp:293
+msgid "Amortization"
+msgstr "Amortizare"
+
+#: dialogs/investactivities.cpp:196 dialogs/investactivities.cpp:284
+#: dialogs/investactivities.cpp:366 dialogs/investactivities.cpp:423
+#: dialogs/investtransactioneditor.cpp:227 dialogs/rc.cpp:135
+#: dialogs/rc.cpp:152 dialogs/rc.cpp:544 reports/listtable.cpp:222
+#: widgets/transaction.cpp:1597
+#: wizards/newaccountwizard/knewaccountwizard.cpp:302
+msgid "Interest"
+msgstr "Dobândă"
+
+#: dialogs/kcurrencycalculator.cpp:282
+#: wizards/newaccountwizard/knewaccountwizard.cpp:351
+#: wizards/newaccountwizard/knewaccountwizard.cpp:356
+msgid "User"
+msgstr "Utilizator"
+
+#: kmymoneyutils.cpp:64 mymoney/mymoneyaccount.cpp:711
+#: reports/querytabletest.cpp:422
+#: wizards/newaccountwizard/knewaccountwizard.cpp:451
+msgid "Checking"
+msgstr "Cont curent"
+
+#: kmymoneyutils.cpp:66 mymoney/mymoneyaccount.cpp:714
+#: wizards/newaccountwizard/knewaccountwizard.cpp:452
+msgid "Savings"
+msgstr "Economii"
+
+#: kmymoneyutils.cpp:68 mymoney/mymoneyaccount.cpp:717
+#: reports/querytabletest.cpp:423
+#: wizards/newaccountwizard/knewaccountwizard.cpp:453
+msgid "Credit Card"
+msgstr "Card de credit"
+
+#: kmymoneyutils.cpp:70 mymoney/mymoneyaccount.cpp:720
+#: wizards/newaccountwizard/knewaccountwizard.cpp:454
+msgid "Cash"
+msgstr "Numerar"
+
+#: kmymoneyutils.cpp:72 mymoney/mymoneyaccount.cpp:723
+#: wizards/newaccountwizard/knewaccountwizard.cpp:455
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+msgid "Loan"
+msgstr "Împrumut"
+
+#: kmymoneyutils.cpp:76 mymoney/mymoneyaccount.cpp:729
+#: wizards/newaccountwizard/knewaccountwizard.cpp:456
+msgid "Investment"
+msgstr "Investiţie"
+
+#: converter/mymoneytemplate.cpp:178 converter/mymoneytemplate.cpp:179
+#: dialogs/knewaccountdlg.cpp:1014 kmymoneyutils.cpp:80
+#: mymoney/mymoneyaccount.cpp:735 views/kaccountsview.cpp:352
+#: views/kmymoneyview.cpp:765 widgets/kmymoneyaccountselector.cpp:177
+#: widgets/kmymoneyaccountselector.cpp:356
+#: wizards/newaccountwizard/knewaccountwizard.cpp:457
+msgid "Asset"
+msgstr "Activ"
+
+#: converter/mymoneytemplate.cpp:182 converter/mymoneytemplate.cpp:183
+#: dialogs/knewaccountdlg.cpp:1016 kmymoneyutils.cpp:82
+#: mymoney/mymoneyaccount.cpp:738 views/kaccountsview.cpp:356
+#: views/kmymoneyview.cpp:766 widgets/kmymoneyaccountselector.cpp:178
+#: widgets/kmymoneyaccountselector.cpp:363
+#: wizards/newaccountwizard/knewaccountwizard.cpp:458
+msgid "Liability"
+msgstr "Pasiv"
+
+#: converter/mymoneytemplate.cpp:194 converter/mymoneytemplate.cpp:195
+#: kmymoneyutils.cpp:94 mymoney/mymoneyaccount.cpp:756
+#: views/kaccountsview.cpp:369 views/kmymoneyview.cpp:769
+#: widgets/kmymoneyaccountselector.cpp:181
+#: widgets/kmymoneyaccountselector.cpp:390
+#: wizards/newaccountwizard/knewaccountwizard.cpp:460
+msgid "Equity"
+msgstr "Capital"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid ""
+"Please make sure to enter the correct conversion for the selected opening "
+"date. If you requested an online quote it might be provided for a different "
+"date."
+msgstr ""
+"Introduceţi rata de conversie corectă pentru data de deschidere aleasă. Dacă "
+"realizaţi o actualizare online a cotaţiei s-ar putea să primiţi o cotaţie "
+"pentru o altă dată."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid "Check date"
+msgstr "Data"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:562
+msgid "1 %1 equals %2"
+msgstr "1 %1 este egal cu %2"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:577
+msgid "Conversion rate is not positive"
+msgstr "Rata de schimb nu este pozitivă"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:583
+msgid "No account name supplied"
+msgstr "Nu a fost dat un nume de cont"
+
+#: dialogs/keditscheduledlg.cpp:114 mymoney/mymoneyscheduled.cpp:1026
+#: wizards/newaccountwizard/knewaccountwizard.cpp:680
+msgid "Write check"
+msgstr "Scrie cec"
+
+#: dialogs/keditscheduledlg.cpp:111 mymoney/mymoneyscheduled.cpp:1014
+#: wizards/newaccountwizard/knewaccountwizard.cpp:682
+msgid "Direct debit"
+msgstr "Debit direct"
+
+#: dialogs/keditscheduledlg.cpp:113 mymoney/mymoneyscheduled.cpp:1032
+#: wizards/newaccountwizard/knewaccountwizard.cpp:683
+msgid "Bank transfer"
+msgstr "Transfer bancar"
+
+#: dialogs/keditscheduledlg.cpp:112 mymoney/mymoneyscheduled.cpp:1029
+#: wizards/newaccountwizard/knewaccountwizard.cpp:685
+msgid "Standing order"
+msgstr "Ordin de plată"
+
+#: dialogs/keditscheduledlg.cpp:110 mymoney/mymoneyscheduled.cpp:1020
+#: wizards/newaccountwizard/knewaccountwizard.cpp:686
+msgid "Manual deposit"
+msgstr "Depozit manual"
+
+#: dialogs/keditscheduledlg.cpp:109 mymoney/mymoneyscheduled.cpp:1017
+#: wizards/newaccountwizard/knewaccountwizard.cpp:687
+msgid "Direct deposit"
+msgstr "Depozit direct"
+
+#: dialogs/keditscheduledlg.cpp:115 mymoney/mymoneyscheduled.cpp:1023
+#: wizards/newaccountwizard/knewaccountwizard.cpp:688
+msgid "Other"
+msgstr "Altele"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:697
+msgid "CreditCard %1 monthly payment"
+msgstr "Plata lunară de %1 pentru cardul de credit"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:703
+msgid "Finish entry and create account"
+msgstr "Finalizează introducerea datelor şi creează contul"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:705
+msgid "Finish entry and create account and schedule"
+msgstr "Finalizează introducerea datelor şi creează contul şi programarea"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:708
+msgid "Next due date is prior to opening date"
+msgstr "Următoarea dată scadentă are loc înainte de data deschiderii"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:712
+msgid "No account selected"
+msgstr "Nu a fost alest niciun cont"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:716
+msgid "No amount for payment selected"
+msgstr "Nu a fost aleasă suma plăţii"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:720
+msgid "No payee for payment selected"
+msgstr "Nu a fost ales beneficiarul plăţii"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:724
+msgid "No name assigned for schedule"
+msgstr "Nu a fost ales numele programării"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:805
+msgid "No payee supplied"
+msgstr "Nu a fost ales plătitorul"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:819
+msgid "No opening balance supplied"
+msgstr "Nu a fost dat soldul iniţial"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:826
+msgid "An interest change can only happen after the first payment"
+msgstr "Rata dobânzii se poate schimba doar după ce prima plată a avut loc"
+
+#: dialogs/knewloanwizard.cpp:615 dialogs/knewloanwizard.cpp:634
+#: wizards/newaccountwizard/knewaccountwizard.cpp:884
+#: wizards/newaccountwizard/rc.cpp:55
+msgid "Months"
+msgstr "Luni"
+
+#: dialogs/knewloanwizard.cpp:616 dialogs/knewloanwizard.cpp:635
+#: wizards/newaccountwizard/knewaccountwizard.cpp:885
+#: wizards/newaccountwizard/knewaccountwizard.cpp:889
+#: wizards/newaccountwizard/rc.cpp:56
+msgid "Years"
+msgstr "Ani"
+
+#: dialogs/knewloanwizard.cpp:711
+#: wizards/newaccountwizard/knewaccountwizard.cpp:961
+#, c-format
+msgid "KMyMoney has calculated the amount of the loan as %1."
+msgstr "KMyMoney a calculat cuantumul împrumutului ca fiind %1."
+
+#: dialogs/knewloanwizard.cpp:718
+#: wizards/newaccountwizard/knewaccountwizard.cpp:968
+msgid "KMyMoney has calculated the interest rate to %1%."
+msgstr "KMyMoney a calculat rata dobânzii la %1%."
+
+#: dialogs/knewloanwizard.cpp:731
+#: wizards/newaccountwizard/knewaccountwizard.cpp:981
+msgid ""
+"KMyMoney has calculated a periodic payment of %1 to cover principal and "
+"interest."
+msgstr ""
+"KMyMoney a calculat o suma%1, plătită periodic, pentru a rambursa împrumutul "
+"şi dobânda aferentă."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:993
+#, c-format
+msgid ""
+"The number of payments has been decremented and the balloon payment has been "
+"modified to %1."
+msgstr ""
+"Numărul de plăţi restante a fost redus cu unu iar suma de plată la termen a "
+"împrumutului a fost modificată la %1."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1001
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1021
+#, c-format
+msgid "The balloon payment has been modified to %1."
+msgstr "Suma de plată la termen a împrumutului a fost modificată la %1."
+
+#: dialogs/knewloanwizard.cpp:763
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1013
+msgid "KMyMoney has calculated the term of your loan as %1. "
+msgstr ""
+"KMyMoney a calculat termenul de achitare a împrumutului dumneavoastră la "
+"data de %1. "
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1052
+msgid "KMyMoney has calculated a balloon payment of %1 for this loan."
+msgstr "KMyMoney a calculat la %1 suma de plată la termen a împrumutului."
+
+#: dialogs/knewloanwizard.cpp:809
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1059
+msgid "KMyMoney has successfully verified your loan information."
+msgstr ""
+"KMyMoney a verificat cu succes informaţiile legate de împrumutul "
+"dumneavoastră."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1067
+msgid ""
+"You have entered mis-matching information. Please modify your figures or "
+"leave one value empty to let KMyMoney calculate it for you"
+msgstr ""
+"Informaţiile introduse de către dumneavoastră nu se potrivesc. Vă rog să "
+"modificaţi valorile sau păstraţi o valoare necompletată pentru a permite "
+"KMyMoney să calculeze acea valoare pentru dumneavoastră"
+
+#: dialogs/knewloanwizard.cpp:504 dialogs/knewloanwizard.cpp:513
+#: dialogs/knewloanwizard.cpp:522 dialogs/knewloanwizard.cpp:532
+#: dialogs/knewloanwizard.cpp:820
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1070
+msgid "Calculation error"
+msgstr "Eroare de calcul"
+
+#: dialogs/knewloanwizard.cpp:824
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1074
+msgid ""
+"\n"
+"\n"
+"Accept this or modify the loan information and recalculate."
+msgstr ""
+"\n"
+"\n"
+"Acceptaţi sau modificaţi informaţiile legate de împrumut pentru a re-calcula."
+
+#: dialogs/knewloanwizard.cpp:826
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1076
+msgid "Calculation successful"
+msgstr "Calcul reuşit"
+
+#: dialogs/knewloanwizard.cpp:846
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1129
+#, c-format
+msgid ""
+"_n: one month\n"
+"%n months"
+msgstr ""
+"_n: o lună\n"
+"%n luni"
+
+#: dialogs/knewloanwizard.cpp:850
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1133
+#, c-format
+msgid ""
+"_n: one year\n"
+"%n years"
+msgstr ""
+"_n: un an\n"
+"%n ani"
+
+#: dialogs/knewloanwizard.cpp:854
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1137
+#, c-format
+msgid ""
+"_n: one payment\n"
+"%n payments"
+msgstr ""
+"_n: o plată\n"
+"%n plăţi"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1190
+msgid "Press Calculate to verify the values"
+msgstr "Apăsaţi Calculează pentru a verifica valorile"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1194
+msgid "Not all details supplied"
+msgstr "Nu au fost date toate detaliile"
+
+#: dialogs/kaccountselectdlg.cpp:70 dialogs/knewloanwizard.cpp:122
+#: dialogs/knewloanwizard.cpp:136
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1381
+msgid "&Create..."
+msgstr "&Creează..."
+
+#: dialogs/knewloanwizard.cpp:138
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1383
+msgid "Create a new asset account"
+msgstr "Creează un nou cont de active"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1384
+msgid ""
+"If the asset account does not yet exist, press this button to create it."
+msgstr "Dacă contul de active nu există apăsaţi acest buton pentru a-l crea"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1596
+msgid "Account information"
+msgstr "Informaţii despre cont"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1601
+#: wizards/newaccountwizard/rc.cpp:59
+msgid "Subaccount of"
+msgstr "Subcont al"
+
+#: dialogs/rc.cpp:225 dialogs/rc.cpp:326 dialogs/rc.cpp:371 dialogs/rc.cpp:723
+#: plugins/ofximport/dialogs/rc.cpp:23 reports/listtable.cpp:225
+#: widgets/kmymoneyaccounttreebase.cpp:113 widgets/register.cpp:61
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1606
+msgid "Type"
+msgstr "Tip"
+
+#: dialogs/kcurrencyeditdlg.cpp:62 dialogs/rc.cpp:56 dialogs/rc.cpp:59
+#: dialogs/rc.cpp:75 dialogs/rc.cpp:727 dialogs/rc.cpp:792
+#: kmymoneyutils.cpp:84 kmymoneyutils.cpp:111 mymoney/mymoneyaccount.cpp:741
+#: mymoney/mymoneysecurity.cpp:169 reports/listtable.cpp:233
+#: widgets/kmymoneypriceview.cpp:127
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1607
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1630
+#: wizards/newaccountwizard/rc.cpp:6 wizards/newaccountwizard/rc.cpp:24
+msgid "Currency"
+msgstr "Monedă"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1608
+#: wizards/newaccountwizard/rc.cpp:7 wizards/newuserwizard/rc.cpp:9
+msgid "Opening date"
+msgstr "Data deschiderii"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1610
+#: wizards/newaccountwizard/rc.cpp:9
+msgid "Conversion rate"
+msgstr "Rata de schimb"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1613
+#: wizards/newaccountwizard/rc.cpp:15 wizards/newuserwizard/rc.cpp:13
+msgid "Opening balance"
+msgstr "Soldul iniţial"
+
+#: dialogs/keditscheduledlg.cpp:507 dialogs/transactioneditor.cpp:784
+#: dialogs/transactioneditor.cpp:848 plugins/ofximport/dialogs/rc.cpp:22
+#: widgets/rc.cpp:111 widgets/register.cpp:59 widgets/transaction.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1618
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1632
+msgid "Number"
+msgstr "Număr"
+
+#: dialogs/rc.cpp:365 wizards/newaccountwizard/knewaccountwizard.cpp:1621
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1634
+#: wizards/newaccountwizard/rc.cpp:26 wizards/newaccountwizard/rc.cpp:66
+msgid "IBAN"
+msgstr "IBAN"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1627
+msgid "Brokerage Account"
+msgstr "Cont de brokeraj"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1640
+msgid "Loan information"
+msgstr "Informaţii despre împrumut"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1643
+msgid "Amount borrowed"
+msgstr "Suma luată cu împrumut"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1645
+msgid "Amount lent"
+msgstr "Suma dată cu împrumut"
+
+#: dialogs/rc.cpp:515 dialogs/rc.cpp:546
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1647
+#: wizards/newaccountwizard/rc.cpp:75
+msgid "Interest rate"
+msgstr "Rata dobânzii"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1648
+msgid "Interest rate is"
+msgstr "Rata dobânzii este"
+
+#: dialogs/rc.cpp:509 dialogs/rc.cpp:572
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1649
+msgid "Principal and interest"
+msgstr "Împrumutul şi dobânda"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1650
+#: wizards/newaccountwizard/rc.cpp:90
+msgid "Additional fees"
+msgstr "Comisioane"
+
+#: dialogs/rc.cpp:525 wizards/newaccountwizard/knewaccountwizard.cpp:1651
+#: wizards/newaccountwizard/rc.cpp:44
+msgid "Payment frequency"
+msgstr "Frecvenţa plăţii"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1652
+#: wizards/newaccountwizard/rc.cpp:105
+msgid "Payment account"
+msgstr "Cont de plată"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1655
+msgid "Payout information"
+msgstr "Informaţii despre plată"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1658
+msgid "Refinance"
+msgstr "Refinanţare"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1661
+msgid "Transfer amount to"
+msgstr "Transferă suma în"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1663
+msgid "Transfer amount from"
+msgstr "Transferă suma din"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1665
+msgid "Payment date"
+msgstr "Data plăţii"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1671
+msgid "Schedule information"
+msgstr "Informaţii despre transferuri programate"
+
+#: reports/listtable.cpp:228
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1684
+msgid "Occurence"
+msgstr "Ocurenţă"
+
+#: mymoney/mymoneyscheduled.cpp:891 mymoney/mymoneyscheduled.cpp:947
+#: mymoney/mymoneyscheduled.cpp:1283 mymoney/mymoneyscheduletest.cpp:1343
+#: widgets/rc.cpp:19 widgets/rc.cpp:74
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+msgid "Monthly"
+msgstr "Lunar"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1677
+msgid "Paid from"
+msgstr "Plătit din"
+
+#: widgets/kmymoneycombo.cpp:473 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1678
+msgid "Pay to"
+msgstr "Plătit către"
+
+#: dialogs/investactivities.cpp:197 dialogs/investactivities.cpp:285
+#: dialogs/investactivities.cpp:365 dialogs/kfindtransactiondlg.cpp:197
+#: dialogs/kmymoneysplittable.cpp:80 dialogs/rc.cpp:51 dialogs/rc.cpp:212
+#: reports/listtable.cpp:197 views/khomeview.cpp:421 views/khomeview.cpp:494
+#: views/khomeview.cpp:528 views/kscheduledview.cpp:73 views/rc.cpp:63
+#: widgets/register.cpp:58 widgets/transaction.cpp:1055
+#: widgets/transaction.cpp:1578 widgets/transaction.cpp:1610
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1679
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1685
+msgid "Amount"
+msgstr "Sumă"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1680
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1686
+msgid "First payment due"
+msgstr "Data primei plăţi"
+
+#: dialogs/rc.cpp:102 wizards/newaccountwizard/knewaccountwizard.cpp:1681
+#: wizards/newaccountwizard/rc.cpp:115
+msgid "Payment method"
+msgstr "Metoda de plată"
+
+#: wizards/newaccountwizard/rc.cpp:1
+msgid ""
+"This page summarizes the data you have entered. Press <b>Finish</b> to "
+"create the account, schedules, etc. or use <b>Back</b> to modify your "
+"entries."
+msgstr ""
+"Această pagină conţine un sumar cu datele pe care le-aţi introdus. Apăsaţi "
+"<b>Termină</b> pentru a crea contul, transferurile programate, etc. sau "
+"folosiţi <b>Înapoi</b> pentru a modifica datele introduse."
+
+#: wizards/newaccountwizard/rc.cpp:2
+msgid "Item"
+msgstr "Item"
+
+#: dialogs/rc.cpp:110 dialogs/rc.cpp:165 dialogs/rc.cpp:252 dialogs/rc.cpp:757
+#: dialogs/rc.cpp:818 views/kinvestmentview.cpp:74 widgets/register.cpp:574
+#: wizards/newaccountwizard/rc.cpp:3
+msgid "Value"
+msgstr "Valoare"
+
+#: wizards/newaccountwizard/rc.cpp:4
+msgid ""
+"Enter the name of the account under which it is known within KMyMoney.\n"
+"Select the type for the new account. Use the <b>What's this?</b> feature to "
+"see more details about the various account types.\n"
+"Enter the date the account was opened and its currency."
+msgstr ""
+"Introduceţi numele contului aşa cum va fi identificat acesta în cadrul "
+"aplicaţiei KMyMoney.\n"
+"Alegeţi tipul contului creat. Folosiţi unealta <b>Ce este asta?</b> pentru a "
+"afla mai multe detalii despre diferitele tipuri de cont.\n"
+"Introduceţi data şi moneda în care a fost deschis contul."
+
+#: wizards/newaccountwizard/rc.cpp:5
+msgid "Select the currency in which this account is denominated."
+msgstr "Selectaţi valuta acestui cont."
+
+#: wizards/newaccountwizard/rc.cpp:8
+msgid ""
+"The opening balance is the balance of the account when you start using it "
+"with KMyMoney. For new accounts this is usually 0 but for existing accounts "
+"this may well differ. Please consult the account statements to figure out "
+"this value. The opening balance is to be provided in the currency of the "
+"account as selected with the currency button."
+msgstr ""
+"Soldul de deschidere este soldul contului în momentul în care începeţi "
+"gestionarea acestuia cu ajutorul KMyMoney. Pentru conturi noi de obicei "
+"această valoare este 0 dar pentru conturi existente ea poate fi diferită. "
+"Consultaţi extrasele de cont pentru a afla această valoare. Soldul de "
+"deschidere se va da în valuta contului care a fost aleasă cu butonul pentru "
+"valute."
+
+#: wizards/newaccountwizard/rc.cpp:10
+msgid ""
+"The opening date would be the date of the last statement. In case you want "
+"to keep track of transactions prior to this date, enter the ending balance "
+"and statement date of a prior statement and add all following transactions "
+"into KMyMoney.\n"
+"<br>\n"
+"<i>Note</i>: If you do not know the exact amount of the opening balance, "
+"enter an estimate. You can change this value later before you reconcile this "
+"account for the first time."
+msgstr ""
+"Data deschiderii contului ar trebui să fie data ultimei declaraţii. În cazul "
+"în care doriţi să gestionaţi tranzacţii care au avut loc înainte de această "
+"dată introduceţi soldul şi data unei declaraţii precedente şi adăugaţi toate "
+"tranzacţiile începând cu acea dată.\n"
+"<br>\n"
+"<i>Observaţie</i>: Dacă nu cunoaşteţi soldul la deschiderea contului "
+"introduceţi o sumă estimată. Puteţi modifica această valoare mai târziu când "
+"veţi reconcilia acest cont cu ajutorul extraselor de cont bancare."
+
+#: dialogs/rc.cpp:52 dialogs/rc.cpp:54 dialogs/rc.cpp:57 dialogs/rc.cpp:60
+#: dialogs/rc.cpp:748 dialogs/rc.cpp:749 dialogs/rc.cpp:768 widgets/rc.cpp:6
+#: widgets/rc.cpp:7 widgets/rc.cpp:8 widgets/rc.cpp:9 widgets/rc.cpp:10
+#: widgets/rc.cpp:11 widgets/rc.cpp:12 widgets/rc.cpp:13 widgets/rc.cpp:14
+#: widgets/rc.cpp:15 widgets/rc.cpp:16 widgets/rc.cpp:17
+#: wizards/newaccountwizard/rc.cpp:11 wizards/newaccountwizard/rc.cpp:88
+#: wizards/newaccountwizard/rc.cpp:91 wizards/newaccountwizard/rc.cpp:93
+#: wizards/newuserwizard/rc.cpp:14
+msgid "xxx"
+msgstr "xxx"
+
+#: wizards/newaccountwizard/rc.cpp:12
+msgid "Account type"
+msgstr "Tipul contului"
+
+#: wizards/newaccountwizard/rc.cpp:13
+msgid ""
+"For foreign currencies an initial conversion rate needs to be provided. This "
+"should be the price of the foreign currency in the base currency on the "
+"opening date of the account."
+msgstr ""
+"Pentru valute străine o rată iniţială de conversie trebuie dată. Această "
+"rată ar trebui să fie preţul valutei străine în valuta de bază în data "
+"deschiderii contului. "
+
+#: wizards/newaccountwizard/rc.cpp:14
+msgid "Account name"
+msgstr "Numele contului"
+
+#: wizards/newaccountwizard/rc.cpp:16
+msgid ""
+"<p><b>Checking</b>\n"
+"Use the checking account type to manage activities on your checking account "
+"e.g. payments, checks and cash card purchases.</p>\n"
+"\n"
+"<p><b>Savings</b>\n"
+"Use the savings account type to manage activities on your savings account.</"
+"p>\n"
+"\n"
+"<p><b>Credit Card</b>\n"
+"Use the credit card account type to manage activities on your credit card.</"
+"p>\n"
+"\n"
+"<p><b>Cash</b>\n"
+"\n"
+"Use the cash account type to manage activities in your wallet.</p>\n"
+"\n"
+"<p><b>Loan</b>\n"
+"Use the loan account type to manage amortization loans (e.g. mortgages, car "
+"loan, money you lend, private loans etc.).</p>\n"
+"\n"
+"<p><b>Investment</b>\n"
+"Use the investment account to manage your stock, mutual fund and other "
+"investments.</p>\n"
+"\n"
+"<p><b>Asset</b>\n"
+"Use the asset account type to manage assets (e.g. your house, car or art "
+"collection).</p>\n"
+"\n"
+"<p><b>Liability</b>\n"
+"Use the liability account type to manage any type of liability except "
+"amortization loans. Use it for taxes you owe or money you borrowed from "
+"friends. For amortization loans like mortgages you should create a loan "
+"account.</p>"
+msgstr ""
+"<p><b>Cont curent</b>\n"
+"Folosiţi acest tip de cont pentru a gestiona operaţiile din contul "
+"dumneavoastră curent cum ar fi: plăţi, operaţii de plată cu cardul.</p>\n"
+"\n"
+"<p><b>Economii</b>\n"
+"Folosiţi acest tip de cont pentru a gestiona operaţiile din contul "
+"dumneavoastră de economii.</p>\n"
+"\n"
+"<p><b>Card de credit</b>\n"
+"Folosiţi acest tip de cont pentru a gestiona operaţiile din contul "
+"dumneavoastră de credit</p>\n"
+"\n"
+"<p><b>Numerar</b>\n"
+"\n"
+"Folosiţi contul de tip numerar pentru a gestiona operaţiile din portofelul "
+"dumneavoastră</p>\n"
+"\n"
+"<p><b>Împrumut</b>\n"
+"Folosiţi acest tip de cont pentru a gestiona amortizarea împrumuturilor (de "
+"exemplu credite ipotecare, împrumuturi auto, împrumuturi acordate de către "
+"dumneavoastră etc.).</p>\n"
+"\n"
+"<p><b>Investiţii</b>\n"
+"Folosiţi contul de tip investiţii pentru a vă gestiona investiţiile în "
+"acţiuni, obligaţiuni, fonduri de investiţii şi alte tipuri de investiţii.</"
+"p>\n"
+"\n"
+"<p><b>Active</b>\n"
+"Folosiţi acest tip de cont pentru a vă gestiona activele (de exemplu casa, "
+"maşina sau o colecţie de artă a dumneavoastră).</p>\n"
+"\n"
+"<p><b>Pasive</b>\n"
+"Folosiţi contul de pasive pentru a gestiona toate pasivele cu excepţia celor "
+"cu împrumuturi amortizate . Puteţi folosi acest tip de cont pentru taxe "
+"datorate sau bani împrumutaţi de la prieteni. Pentru împrumuturi amortizate "
+"ca de exemplu creditele ipotecare creaţi un cont de tip împrumut.</p>"
+
+#: wizards/newaccountwizard/rc.cpp:17
+msgid "Preferred account"
+msgstr "Cont preferat"
+
+#: wizards/newaccountwizard/rc.cpp:18
+msgid ""
+"Mark this checkbox if the account should be maintained as preferred account"
+msgstr ""
+"Bifaţi acestă căsuţă dacă doriţi ca acest cont să fie un cont preferat."
+
+#: wizards/newaccountwizard/rc.cpp:19
+msgid ""
+"Selecting the <b>Preferred Account</b> checkbox will allow preferred access "
+"in some dialogs and views of KMyMoney."
+msgstr ""
+"Bifând căsută <b>Cont preferat</b> va permite accesul mai uşor la acest cont "
+"din câteva ecrane ale aplicaţiei KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:20
+msgid "Enter a name under which this account is known within KMyMoney."
+msgstr ""
+"Introduceţi numele contului aşa cum va fi identificat acesta în cadrul "
+"aplicaţiei KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:21
+msgid "Online quote"
+msgstr "Cotaţie online"
+
+#: wizards/newaccountwizard/rc.cpp:22
+msgid ""
+"Does this investment account have a brokerage account?<p>\n"
+"\n"
+"<b>Check</b> the mark if this investment account has an associated account "
+"for money that is not invested.<br>\n"
+"\n"
+"<b>Uncheck</b> it if you don't use this account for active stock brokerage. "
+"You should also uncheck it if this account is not maintained by a bank or "
+"broker."
+msgstr ""
+"Acest cont de investiţii are ataşat un cont de brokeraj?<p>\n"
+"\n"
+"<b>Bifaţi</b> dacă acest cont de investiţii are asociat un cont pentru bani "
+"care nu sunt investiţi .<br>\n"
+"\n"
+"<b>Debifaţi</b> dacă nu folosiţi acest cont pentru activităţi de brokeraj. "
+"De asemenea debifaţi dacă acest cont nu este întreţinut de o bancă sau de "
+"către un broker."
+
+#: wizards/newaccountwizard/rc.cpp:23
+msgid "Create brokerage account"
+msgstr "Creează un cont de brokeraj"
+
+#: wizards/newaccountwizard/rc.cpp:25 wizards/newaccountwizard/rc.cpp:64
+msgid "Account number"
+msgstr "Numărul contului"
+
+#: wizards/newaccountwizard/rc.cpp:27
+msgid ""
+"Please select the required options. Please use the <b>What's this?</b> "
+"feature to see more information about the items."
+msgstr ""
+"Vă rog să alegeţi opţiunile necesare. Folosiţi unealta <b>Ce este asta?</b> "
+"pentru a afla mai multe detalii despre opţiuni."
+
+#: wizards/newaccountwizard/rc.cpp:28
+msgid "What is the type of the loan?"
+msgstr "Care este tipul împrumutului dat?"
+
+#: dialogs/rc.cpp:481 wizards/newaccountwizard/rc.cpp:29
+msgid "I am borrowing money"
+msgstr "Iau bani cu împrumut"
+
+#: dialogs/rc.cpp:482 wizards/newaccountwizard/rc.cpp:30
+msgid "I am lending money"
+msgstr "Dau bani cu împrumut"
+
+#: wizards/newaccountwizard/rc.cpp:31
+msgid "Who is the payee/payer of the loan?"
+msgstr "Cine este beneficiarul/plătitorul împrumutului?"
+
+#: wizards/newaccountwizard/rc.cpp:32
+msgid ""
+"Enter the name of the person or bank you owe money or who owes you money.\n"
+"\n"
+"If the name does not exist within KMyMoney's database, you are asked if you "
+"want to create it."
+msgstr ""
+"Introduceţi numele persoanei sau băncii căruia îi datoraţi bani sau care vă "
+"datorează bani.\n"
+"\n"
+"Dacă numele dat nu există în baza de date KMyMoney veţi fi întrebat dacă "
+"vreţi sa-l creaţi."
+
+#: wizards/newaccountwizard/rc.cpp:33
+msgid "Did you make/receive any payments yet?"
+msgstr "Aţi efectuat/încasat deja plăţi?"
+
+#: wizards/newaccountwizard/rc.cpp:36
+msgid ""
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?\n"
+"\n"
+"Note: Payments made to obtain the loan (e.g. Disagio) are not considered as "
+"payments in this context."
+msgstr ""
+"Au fost efectuate plăţi introduse în KMyMoney pentru acest împrumut?\n"
+"\n"
+"Observaţie: Plăţile efectuate pentru obţinerea acestui împrumut (de exemplu "
+"comisioane pentru schimb valutar) nu sunt considerate plăţi în acest context."
+
+#: wizards/newaccountwizard/rc.cpp:37
+msgid "Which payments do you want to record?"
+msgstr "Ce plăţi doriţi să înregistraţi?"
+
+#: wizards/newaccountwizard/rc.cpp:38
+msgid "All payments"
+msgstr "Toate plăţile"
+
+#: wizards/newaccountwizard/rc.cpp:39
+msgid "Start with this year's payments"
+msgstr "Plăţile începând cu anul acesta"
+
+#: wizards/newaccountwizard/rc.cpp:40
+msgid ""
+"<qt>Select which transactions should be recorded.\n"
+"\n"
+"<b>All payments</b> allows you to enter all payments made for this loan.\n"
+"\n"
+"The option to <b>start from the beginning of the current year</b> is meant "
+"for loans that are active for a longer period of time already and you don't "
+"want to enter all transactions of the past.\n"
+"</qt>"
+msgstr ""
+"<qt>Alegeţi plăţile care trebuiesc înregistrate.\n"
+"\n"
+"<b>Toate plăţile</b> vă permite să introduceţi toate plăţile efectuate "
+"pentru acest împrumut.\n"
+"\n"
+"Alegând <b>plăţile începând cu anul acesta</b> puteţi să evitaţi necesitatea "
+"introducerii tuturor tranzacţiilor unui împrumut care se derulează deja de o "
+"perioadă de timp mai lungă.\n"
+"</qt>"
+
+#: wizards/newaccountwizard/rc.cpp:41
+msgid "Balance before start of recording"
+msgstr "Soldul înaintea începerii înregistrărilor"
+
+#: wizards/newaccountwizard/rc.cpp:42
+msgid ""
+"Enter the ending balance found on the statement that is the last one before "
+"you want to start recording this loan in KMyMoney."
+msgstr ""
+"Introduceţi soldul de pe ultimul extras bancar dinaintea primei plăţi pe "
+"care o doriţi să o înregistraţi pentru acest împrumut în KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:43
+msgid ""
+"You have selected to record only payments from the beginning of this year. "
+"Since prior transactions will not be recorded, you need to supply the "
+"balance of the loan on January 1st of this year."
+msgstr ""
+"Aţi ales să înregistraţi plăţi de la începutul acestui an. Deoarece plăţile "
+"anterioare acestei dăţi nu vor fi înregistrate trebuie să daţi soldul "
+"împrumutului la data de 1 ianuarie a acestui an."
+
+#: wizards/newaccountwizard/rc.cpp:45
+msgid "Interest Compounding frequency"
+msgstr "Frecvenţa de capitalizare a dobânzii"
+
+#: wizards/newaccountwizard/rc.cpp:46
+msgid ""
+"Select the frequency with which the interest is compounded. If uncertain, "
+"select the same as the payment frequency. Consult your loan contract for "
+"details."
+msgstr ""
+"Alegeţi frecvenţa cu care donbânda este capitalizată. Dacă nu sunteţi siguri "
+"alegeţi aceeaşi frecvenţă ca cea a plăţilor. Consultaţi contractul de "
+"împrumut pentru detalii."
+
+#: wizards/newaccountwizard/rc.cpp:47
+msgid "Due date of first payment to be recorded"
+msgstr "Data scadentă a primei plăţi înregistrate."
+
+#: wizards/newaccountwizard/rc.cpp:48
+msgid ""
+"Depending on the answer to <b>What do you want to record?</b> this field "
+"means the following:<p>\n"
+"\n"
+"<b>All payments</b><br>\n"
+"Enter the due date of the very first payment<p>\n"
+"\n"
+"<b>Start with this year's payments</b><br>\n"
+"Enter the due date of the first payment in the current year"
+msgstr ""
+"Depinzând de răspunsul la întrebarea <b>Care dintre plăţi doriţi să le "
+"înregistraţi?</b> acest câmp are următoarele semnificaţii:<p>\n"
+"\n"
+"<b>Toate plăţile</b><br>\n"
+"Data de scadenţă a primei plăţi<p>\n"
+"\n"
+"<b>Plăţile începând cu anul acesta</b><br>\n"
+"Data de scadenţă a primei plăţi din anul acesta"
+
+#: wizards/newaccountwizard/rc.cpp:49
+msgid "Type of interest rate"
+msgstr "Tipul ratei dobânzii"
+
+#: wizards/newaccountwizard/rc.cpp:50
+msgid "Fixed"
+msgstr "Fixă"
+
+#: wizards/newaccountwizard/rc.cpp:51
+msgid "Variable"
+msgstr "Variabilă"
+
+#: wizards/newaccountwizard/rc.cpp:52
+msgid "Time between interest changes"
+msgstr ""
+"Intervalul de timp dintre momentele în care se recalculează rata dobânzii"
+
+#: dialogs/knewloanwizard.cpp:613 wizards/newaccountwizard/rc.cpp:53
+msgid "Days"
+msgstr "Zile"
+
+#: dialogs/knewloanwizard.cpp:614 wizards/newaccountwizard/rc.cpp:54
+msgid "Weeks"
+msgstr "Săptămâni"
+
+#: wizards/newaccountwizard/rc.cpp:57
+msgid "Next interest change is due"
+msgstr "Următoare recalculare a ratei dobânzii va avea loc"
+
+#: wizards/newaccountwizard/rc.cpp:58
+msgid "This page allows you to select the parent account."
+msgstr "Această pagină vă permite să alegeţi contul părinte."
+
+#: wizards/newaccountwizard/rc.cpp:60
+msgid ""
+"If this account is managed by an institution please select the institution "
+"from the list. If the institution does not exist yet, please choose the "
+"<b>New Institution</b> button to create it. Otherwise, leave this field "
+"empty.\n"
+"Enter the account number used by the institution to identify the account."
+msgstr ""
+"Dacă acest cont este gestionat de către o instituţie vă rog să o alegeţi din "
+"listă. Dacă instituţia nu există încă, vă rog să folosiţi butonul "
+"<b>Instituţie nouă</b> pentru a o crea, altfel lăsaţi acest câmp gol.\n"
+"Introduceţi numărul folosit de către instituţie pentru a indentifica contul."
+
+#: wizards/newaccountwizard/rc.cpp:62
+msgid "Select the institution which manages this account or leave empty"
+msgstr "Alegeţi instituţia care gestionează contul sau lăsaţi necompletat"
+
+#: wizards/newaccountwizard/rc.cpp:63
+msgid "New Institution"
+msgstr "Instituţie nouă"
+
+#: wizards/newaccountwizard/rc.cpp:65
+msgid ""
+"Accounts managed by an institution are usually referenced by a unique number "
+"the so called account number. Enter that number here.\n"
+"\n"
+"KMyMoney currently uses this number only for some online banking functions."
+msgstr ""
+"Conturile gestionate de către o instituţie sunt de obicei identificabile cu "
+"ajutorul unui număr unic care se mai numeşte şi numărul (codul) contului. "
+"Întroduceţi acest număr aici.\n"
+"\n"
+"KMyMoney foloseşte acest număr în acest moment doar în câteva dintre "
+"funcţiile de online banking."
+
+#: wizards/newaccountwizard/rc.cpp:67
+msgid "Enter the International Bank Account Number into this field"
+msgstr ""
+"Introduceţi un număr de cont IBAN (număr de cont bancar internaţional) în "
+"acest câmp"
+
+#: wizards/newaccountwizard/rc.cpp:68
+msgid ""
+"You can enter the IBAN (International Bank Account Number) into this field "
+"if you know it. Usually, people at your institution can tell you the number "
+"or it is printed on your statements.\n"
+"\n"
+"See also http://en.wikipedia.org/wiki/International_Bank_Account_Number for "
+"more information.\n"
+"\n"
+"KMyMoney keeps this field only for documentation purposes and does not use "
+"it otherwise."
+msgstr ""
+"Puteţi să introduceţi numărul de cont IBAN (International Bank Account "
+"Number) în acest câmp dacă îl cunoaşteţi. De obicei, cei de la instituţia "
+"care gestionează acest cont vă pot spune acest număr sau îl aveţi imprimat "
+"pe extrasele contului. \n"
+"Vedeţi de asemenea http://en.wikipedia.org/wiki/"
+"International_Bank_Account_Number pentru mai multe informaţii.\n"
+"\n"
+"KMyMoney păstrează acest câmp în scopuri de documentaţie şi nu îl foloseşte "
+"în alte moduri."
+
+#: wizards/newaccountwizard/rc.cpp:69
+msgid ""
+"Now enter the details for your loan. You can leave one of the fields empty "
+"and KMyMoney will calculate it when you press the <b>Calculate</b> button. "
+"Before you can continue with the next page you also need to press "
+"<b>Calculate</b> so that KMyMoney can check the logical correctness of the "
+"values you have supplied."
+msgstr ""
+"Acum introduceţi detaliile împrumutului dumneavoastră. Puteţi lăsa unul "
+"dintre câmpuri necompletat iar KMyMoney va calcula valoarea respectivă în "
+"momentul în care veţi folosi butonul <b>Calculează</b>. Înainte de a "
+"continua cu pagina următoare va fi necesar, de asemenea, să folosiţi butonul "
+"<b>Calculează</b> ca KMyMoney să poată verifica corectitudinea logică a "
+"valorilor pe care le-aţi introdus."
+
+#: wizards/newaccountwizard/rc.cpp:70
+msgid "The interest rate gets calculated"
+msgstr "Se calculează rata dobânzii"
+
+#: wizards/newaccountwizard/rc.cpp:71
+msgid "when the payment is received"
+msgstr "momentul în care se încasează plata"
+
+#: wizards/newaccountwizard/rc.cpp:72
+msgid "when the payment is due"
+msgstr "data de scadenţă a plăţii"
+
+#: dialogs/rc.cpp:531 dialogs/rc.cpp:533 wizards/newaccountwizard/rc.cpp:73
+msgid "Loan amount"
+msgstr "Suma împrumutată"
+
+#: wizards/newaccountwizard/rc.cpp:74
+msgid ""
+"Enter the amount of the loan in this field. If you want to calculate this "
+"field out of the other parameters, please leave it empty. If the field is "
+"marked as required (colored background) you have informed KMyMoney about the "
+"fact that there were already some payments towards the loan. In this case, "
+"please enter the ending balance of your last statement."
+msgstr ""
+"Introduceţi în acest câmp suma împrumutată. Dacă doriţi calcularea acestui "
+"câmp cu ajutorul celorlalţi parametrii va rugăm sa-l lăsaţi necompletat. "
+"Dacă câmpul este marcat ca obligatoriu (fundal colorat) aţi informat "
+"KMyMoney despre faptul că există deja plăti efectuate pentru acest împrumut. "
+"În acest caz, vă rog introduceţi soldul final al ultimului extras al "
+"împrumutului."
+
+#: wizards/newaccountwizard/rc.cpp:76
+msgid ""
+"Please enter the interest rate in percent or leave the field empty to "
+"calculate it."
+msgstr ""
+"Vă rog să introduceţi rata dobânzii sau lăsaţi câmpul necompletat petru a-l "
+"calcula."
+
+#: dialogs/rc.cpp:559 wizards/newaccountwizard/rc.cpp:77
+msgid "Term"
+msgstr "Termen"
+
+#: wizards/newaccountwizard/rc.cpp:78
+msgid ""
+"Please enter the term of this loan or enter 0 to calculate it. The term is "
+"the time that is required to fully repay the loan. This time might be "
+"different from the time your loan contract is signed for."
+msgstr ""
+"Vă rog să introduceţi termenul acestui împrumut sau 0 pentru a-l calcula. "
+"Termenul împrumutului este timpul necesar pentru plata completă a "
+"împrumutului. Acest timp poate să difere de cel din contractul de "
+"împrumutare."
+
+#: wizards/newaccountwizard/rc.cpp:79
+msgid "Payment (principal and interest)"
+msgstr "Suma de plată (parte din împrumut şi dobânda)"
+
+#: wizards/newaccountwizard/rc.cpp:80
+msgid ""
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"Vă rog să introduceţi suma pe care o plătiţi pentru restituirea împrumutului "
+"împreună cu dobânda sau lăsaţi valoarea necompletată pentru a fi calculată."
+
+#: wizards/newaccountwizard/rc.cpp:81
+msgid "Balloon payment"
+msgstr "Suma de plată la termen a împrumutului"
+
+#: wizards/newaccountwizard/rc.cpp:82
+msgid ""
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"Vă rog să introduceţi suma finală de plată a amortizării sau lăsaţi câmpul "
+"necompletat pentru a fi calculat."
+
+#: wizards/newaccountwizard/rc.cpp:83
+msgid "Calculate"
+msgstr "Calculează"
+
+#: wizards/newaccountwizard/rc.cpp:84
+msgid "Press this button to calculate/verify your loan details."
+msgstr ""
+"Utilizaţi acest buton pentru a calcula/verifica detaliile împrumutului "
+"dumneavoastră."
+
+#: wizards/newaccountwizard/rc.cpp:85
+msgid ""
+"Pressing this button calculates a possibly missing parameter for your loan "
+"or verifies that the values entered match. If something is not correct you "
+"will receive information about it."
+msgstr ""
+"Folosirea acestui buton determină calcularea unui parametru lăsat "
+"necompletat a împrumutului dumneavoastră sau verifică faptul că valorile "
+"introduse sunt coerente. Dacă ceva nu este corect veţi primi informaţii "
+"clarificatoare."
+
+#: wizards/newaccountwizard/rc.cpp:86
+msgid ""
+"Now enter the information required for the periodic loan payments. If your "
+"regular payments contains any additional fees, click on the <b>Additional "
+"fees</b> button to enter them."
+msgstr ""
+"Acum introduceţi informaţia necesară pentru plăţile periodice legate de "
+"împrumut. Dacă plăţile dumneavoastră periodice conţin comisioane adiţionale, "
+"folosiţi butonul <b>Comisioane adiţionale</b> pentru a le introduce."
+
+#: wizards/newaccountwizard/rc.cpp:87
+msgid "Principal + Interest"
+msgstr "Împrumutul + dobânda"
+
+#: dialogs/rc.cpp:620 wizards/newaccountwizard/rc.cpp:89
+msgid "+"
+msgstr "+"
+
+#: wizards/newaccountwizard/rc.cpp:92
+msgid "= periodical payments"
+msgstr "= plăţi periodice"
+
+#: dialogs/rc.cpp:643 wizards/newaccountwizard/rc.cpp:94
+msgid ""
+"If this loan is for an asset, such as a car or a house, you can create the "
+"asset account now. An asset account represents the total value of an asset. "
+"The money from this loan will be transfered into the asset account you "
+"create or select.\n"
+"If this loan is a 'consumer loan' (money to use however you want), you can "
+"use a checking account instead."
+msgstr ""
+"Dacă acest împrumut este pentru achiziţionarea unui activ, cum ar fi o "
+"maşină sau o casă, puteţi crea contul de active corespunzător acum. Un cont "
+"de active reprezintă valoare totală a activului dumneavoastră. Banii din "
+"acest împrumut vor fi transferaţi în contul dumneavoastră de active pe care "
+"îl creaţi sau îl alegeţi.\n"
+"Dacă, în schimb, acest împrumut este un împrumut de consum (bani folosiţi "
+"după cum doriţi dumneavoastră), puteţi folosi un cont curent."
+
+#: dialogs/rc.cpp:644 wizards/newaccountwizard/rc.cpp:95
+msgid "Don't create payout transaction"
+msgstr "Nu creaţi o tranzacţie de plată completă a împrumutului"
+
+#: wizards/newaccountwizard/rc.cpp:96
+msgid "Refinance existing loan"
+msgstr "Refinanţează un împrumut existent"
+
+#: wizards/newaccountwizard/rc.cpp:97
+msgid ""
+"Check this if you are refinancing a loan that already exists in KMyMoney"
+msgstr ""
+"Bifaţi această opţiune dacă refinanţaţi un împrumut care există deja în "
+"KMyMoney."
+
+#: dialogs/rc.cpp:642 wizards/newaccountwizard/rc.cpp:98
+msgid "Asset Account"
+msgstr "Cont de activ"
+
+#: dialogs/rc.cpp:2 wizards/newaccountwizard/rc.cpp:99
+msgid "Create"
+msgstr "Creează"
+
+#: wizards/newaccountwizard/rc.cpp:100
+msgid "Loan account"
+msgstr "Cont de împrumut"
+
+#: dialogs/rc.cpp:646 wizards/newaccountwizard/rc.cpp:101
+msgid "Date of payment"
+msgstr "Data plăţii"
+
+#: wizards/newaccountwizard/rc.cpp:102
+msgid ""
+"KMyMoney creates a schedule for this payment and reminds you whenever a "
+"payment must be made. Please select the account to/from which payments will "
+"be made and the category the interest will be assigned to.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"KMyMoney va crea un transfer programat pentru această plată şi vă va aduce "
+"la cunoştinţă fiecare dată la care va trebui efectuată plata. Vă rog să "
+"selectaţi contul din/în care se vor efectua plăţile şi categoria din care va "
+"face parte dobânda.<p>\n"
+"Dacă aţi ales să înregistraţi toate plăţile această dată a fost deja dată. "
+"Dacă aţi ales să înregistraţi doar plăţile începând cu acest an atunci <b> "
+"Data primei plăţi</b> va deveni data primei plăţi din acest an."
+
+#: dialogs/rc.cpp:613 wizards/newaccountwizard/rc.cpp:103
+msgid "Interest category"
+msgstr "Categoria dobânzii"
+
+#: wizards/newaccountwizard/rc.cpp:104
+msgid ""
+"The category the interest part of the payment will be assigned to. If you "
+"borrow money you usually have to pay interest, so this should be an expense "
+"category. If you lend the money, you receive the interest. In this case, "
+"select an income category here."
+msgstr ""
+"Categoria din care va face parte partea de dobândă a plăţilor pentru "
+"împrumut. Dacă împrumutaţi bani de obicei trebuie să plătiţi dobândă, deci "
+"ar trebui să facă parte dintr-o categorie de cheltuieli. Dacă aţi dat bani "
+"împrumut veţi primi dobândă. În acest caz alegeţi o categorie de venituri."
+
+#: wizards/newaccountwizard/rc.cpp:106
+msgid ""
+"Select the account from which you make your periodical payments or where you "
+"receive regular payments in case you lend the money. In most cases, this is "
+"a checking account."
+msgstr ""
+"Alegeţi contul din care veţi realiza plăţile periodice sau în care veţi "
+"depozita plăţile periodice încasate în cazul în care aţi dat un împrumut. În "
+"cele mai multe cazuri acesta este un cont curent."
+
+#: dialogs/rc.cpp:519 wizards/newaccountwizard/rc.cpp:107
+msgid "First payment due on"
+msgstr "Prima plată scadentă la"
+
+#: wizards/newaccountwizard/rc.cpp:108
+msgid ""
+"For credit card accounts you can create a monthly schedule which will "
+"automatically remind you about the payment. Please fill in the details about "
+"this payment here."
+msgstr ""
+"În cazul conturilor cardurilor de credit puteţi crea un transfer programat "
+"lunar care vă va reaminti în mod automat necesitatea efectuării plăţii. Vă "
+"rog să introduceţi detaliile acesteî plăţi."
+
+#: wizards/newaccountwizard/rc.cpp:109
+msgid "Yes, remind me when the payment is due"
+msgstr "Da, aminteşte-mi când plata e scadentă"
+
+#: wizards/newaccountwizard/rc.cpp:110
+msgid "Name of schedule"
+msgstr "Numele programării"
+
+#: dialogs/rc.cpp:151 dialogs/rc.cpp:218 dialogs/rc.cpp:219
+#: reports/listtable.cpp:199 views/kscheduledview.cpp:72 widgets/rc.cpp:113
+#: widgets/register.cpp:57 wizards/newaccountwizard/rc.cpp:111
+msgid "Payee"
+msgstr "Beneficiar/Plătitor"
+
+#: wizards/newaccountwizard/rc.cpp:112
+msgid "Estimated monthly payment"
+msgstr "Plata lunară estimată"
+
+#: wizards/newaccountwizard/rc.cpp:113
+msgid "Due date of next payment"
+msgstr "Data scadentă a următoarei plăţi"
+
+#: wizards/newaccountwizard/rc.cpp:114
+msgid ""
+"Payment should be made\n"
+"from account"
+msgstr ""
+"Plata trebuie efectuată\n"
+"din contul"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:79
+msgid "KMyMoney New File Setup"
+msgstr "Creează un fişier KMyMoney nou"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:81
+msgid "Introduction"
+msgstr "Introducere"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:82
+msgid "Personal Data"
+msgstr "Date personale"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:83
+msgid "Select Currency"
+msgstr "Alegeţi moneda"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:84
+msgid "Select Accounts"
+msgstr "Alegeţi conturi"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:85
+msgid "Set preferences"
+msgstr "Stabileşte preferinţele"
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid ""
+"Unable to load data, because no contact has been associated with the owner "
+"of the standard addressbook."
+msgstr ""
+"Nu s-au putut încărca datele, deoarece nici un contact nu a fost asociat cu "
+"deţinătorul cărţii de adrese standard."
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid "Addressbook import"
+msgstr "Importă din cartea de adrese"
+
+#: wizards/newuserwizard/rc.cpp:1
+msgid ""
+"A typical KMyMoney user maintains a checking a account with some institution "
+"and uses it to receive money or pay bills. If this is not the case, please "
+"deselect the checkbox below and continue on the next page."
+msgstr ""
+"Un utilizator normal a aplicaţiei KMyMoney are un cont curent la o anumită "
+"instituţie şi îl foloseşte pentru a încasa plăţi sau pentru a plăti facturi. "
+"Dacă însă nu e cazul vă rog să debifaţi căsuţa de mai jos şi continuaţi cu "
+"pagina următoare."
+
+#: wizards/newuserwizard/rc.cpp:2
+msgid "I have a checking account that I want to manage with KMyMoney"
+msgstr ""
+"Am un cont curent şi vreau să-l gestionez cu ajutorul aplicaţiei KMyMoney"
+
+#: wizards/newuserwizard/rc.cpp:3
+msgid "The name of the instititution that issued the account."
+msgstr "Numele instituţiei la care a fost creat contul curent."
+
+#: wizards/newuserwizard/rc.cpp:4
+msgid ""
+"Each institution has a routing number. Enter it here. If uncertain, leave "
+"the field blank. You can modify it later."
+msgstr ""
+"Fiecare instituţie are un număr de identificare. Daţi acest număr aici. Dacă "
+"nu sunteţi siguri lăsaţi-l necompletat deoarece îl puteţi schimba ulterior."
+
+#: wizards/newuserwizard/rc.cpp:5
+msgid "Name of the institution"
+msgstr "Numele instituţiei"
+
+#: wizards/newuserwizard/rc.cpp:6
+msgid "Routing number"
+msgstr "Număr de identificare"
+
+#: wizards/newuserwizard/rc.cpp:7
+msgid ""
+"In general the institution that issued the account also issued a number for "
+"it. Enter it here. If uncertain, you can modify this entry later."
+msgstr ""
+"În general instituţia care a creat contul i-a asociat şi un număr de "
+"identificare. Da-ţi acest număr aici. Dacă nu sunteţi siguri lăsaţi câmpul "
+"necompletat deoarece îl puteţi modifica ulterior."
+
+#: wizards/newuserwizard/rc.cpp:8
+msgid ""
+"Enter a descriptive name that will be used by KMyMoney to identify your "
+"checking account."
+msgstr ""
+"Introduceţi un nume sugestiv, care va fi folosit de KMyMoney pentru a "
+"identifica contul dumneavoastră curent."
+
+#: wizards/newuserwizard/rc.cpp:10
+msgid ""
+"Enter the date from when on you plan to keep track of the transactions in "
+"that account. This is usually the date of the last statement. If uncertain, "
+"leave as is."
+msgstr ""
+"Întroduceţi data din care intenţionaţi să gestionaţi tranzacţiile din acel "
+"cont. Această dată este de obicei data ultimului extras de cont. Dacă nu "
+"sunteţi siguri lăsaţi câmpul neschimbat."
+
+#: wizards/newuserwizard/rc.cpp:11
+msgid "Number of the account"
+msgstr "Numărul de cont"
+
+#: wizards/newuserwizard/rc.cpp:12
+msgid "Name of the account"
+msgstr "Numele contului"
+
+#: wizards/newuserwizard/rc.cpp:15
+msgid ""
+"Enter the opening balance of the account. This is usually the ending balance "
+"of the last statement. If uncertain, leave as is."
+msgstr ""
+"Introduceţi soldul de deschidere al contului. Acesta este, de obicei, soldul "
+"de pe ultimul extras de cont. Dacă nu sunteţi siguri lăsaţi câmpul "
+"neschimbat."
+
+#: wizards/newuserwizard/rc.cpp:16
+msgid ""
+"The fields below allow you to enter some information about your checking "
+"account. Once this wizard finishes, the account will be created for you "
+"within KMyMoney."
+msgstr ""
+"Câmpurile de mai jos vă permit introducerea unor informaţii despre contul "
+"dumneavoastră curent. Odată cu terminarea acestui formular contul curent va "
+"fi creat în KMyMoney."
+
+#: wizards/newuserwizard/rc.cpp:17
+msgid ""
+"KMyMoney supports multiple currencies. Your reports will be based on a "
+"default curreny which you can select here. The default for new accounts is "
+"also the currency you select here."
+msgstr ""
+"KMyMoney permite folosirea mai multor monede. Rapoartele dumneavoastră vor "
+"fi tipărite în moneda implicită pe care o puteţi alege aici. Moneda aleasă "
+"va fi, de asemenea, moneda implicită pentru conturile noi create."
+
+#: wizards/newuserwizard/rc.cpp:18
+msgid ""
+"KMyMoney will store your financial data in a file on the disk. A standard "
+"filename within your KDE user environment will be the default. This is just "
+"provided for convenience and you can choose any other location here."
+msgstr ""
+"KMyMoney va stoca datele dumneavoastră financiare într-un fişier de pe "
+"discul calculatorului. Un nume de fişier standard a utilizatorului din "
+"mediul dumneavoastră KDE va fi folosit implicit. Aceasta opţiune este "
+"furnizată doar pentru comoditate şi puteţi selecta orice altă locaţie aici."
+
+#: wizards/newuserwizard/rc.cpp:19
+msgid ""
+"Either the currently selected file exists or the selected directory does not "
+"exist. Please make sure, that\n"
+"\n"
+"<ul>\n"
+"<li>the selected directory exists and</li>\n"
+"<li>the filename is not currently used in this directory.</li>\n"
+"</ul>"
+msgstr ""
+"Fie că fişierul dat există sau directorul dat nu există. Asiguraţi-vă că\n"
+"\n"
+"<ul>\n"
+"<li>directorul ales există şi</li>\n"
+"<li>fişierul ales nu este folosit în acest moment în acest director</li>\n"
+"</ul>"
+
+#: wizards/newuserwizard/rc.cpp:20
+msgid ""
+"This finishes the setup of your KMyMoney environment. You can now press the "
+"Finish button and start using KMyMoney to record your financial transactions."
+msgstr ""
+"Acesta termină formularul de creere a mediului dumneavoastră KMyMoney. "
+"Puteţi să acţionaţi butonul Termină şi să începeţi să folosiţi KMyMoney "
+"pentru a înregistra tranzacţiile dumneavoastră."
+
+#: wizards/newuserwizard/rc.cpp:21
+msgid ""
+"Please enter some information about yourself.<br><br>\n"
+"\n"
+"This information will be seen and used only by you. The information is used "
+"to personalize KMyMoney, to encrypt your file, etc."
+msgstr ""
+"Vă rog să introduceţi câteva informaţii despre dumneavoastră.<br><br>\n"
+"\n"
+"Aceste informaţii vor fi văzute şi folosite doar de către dumneavoastră. "
+"Informaţie este folosită pentru a personaliza KMyMoney, pentru a vă codifica "
+"fişierul, etc."
+
+#: wizards/newuserwizard/rc.cpp:28
+msgid "Zip code"
+msgstr "Cod poştal"
+
+#: wizards/newuserwizard/rc.cpp:30
+msgid "Welcome to KMyMoney!"
+msgstr "Bine aţi venit în KMyMoney!"
+
+#: wizards/newuserwizard/rc.cpp:31
+msgid ""
+"You have started KMyMoney for the first time on this computer. Before this "
+"program can help you to manage your finances, it needs to collect some data "
+"from you.<p>\n"
+"\n"
+"On the next few pages you will be guided through the steps necessary to "
+"setup the program. This will happen only once."
+msgstr ""
+"Aţi pornit KMyMoney pentru prima oară pe acest calculator. Înainte ca "
+"această aplicaţie să vă poată ajuta să vă gestionaţi finanţele "
+"dumneavoastră, are nevoie să colecteze anumite date de la dumneavoastră.<p>\n"
+"\n"
+"În următoarele câteva pagini veţi fi îndrumat prin paşii necesari pentru a "
+"iniţializa aplicaţia. Această operaţie va trebui efectuată doar odată."
+
+#: wizards/newuserwizard/rc.cpp:32
+msgid ""
+"<p>KMyMoney can encrypt your datafile using GPG Encryption. GPG encryption "
+"is one of the most secure methods in the world for protecting data. All of "
+"your account numbers and other important financial information will be very "
+"secure.</p>"
+msgstr ""
+"<p>KMyMoney poate să codifice fişierul dumneavoastră de date folosind "
+"criptarea GPG. Codificarea GPG este una dintre cele mai sigure metode care "
+"există pentru a vă proteja datele. Toate informaţiile dumneavoastră legate "
+"de conturi cât şi celelalte informaţii financiare vor fi în siguranţă.</p>"
+
+#: wizards/newuserwizard/rc.cpp:33
+msgid ""
+"If you would like to review or change any preference settings for KMyMoney "
+"at this time, you can do so here. If not just click <b>Next</b>."
+msgstr ""
+"Dacă doriţi să revedeţi sau să schimbaţi opţiunile KMyMoney ale "
+"dumneavoastră o puteţi face în acest moment. Dacă nu folosiţi butonul "
+"<b>Următor<b>."
+
+#: wizards/newuserwizard/rc.cpp:34
+msgid "Configure preferences now"
+msgstr "Configurează preferinţele acum"
+
+#: wizards/newuserwizard/rc.cpp:35
+msgid ""
+"You can change the configuration options at any time using the configuration "
+"dialog. Just select the <b>Configure KMyMoney...</b> option in the "
+"<b>Settings</b> menu."
+msgstr ""
+"Puteţi să schimbaţi opţiunile de configurare oricând cu ajutorul dialogului "
+"de configurare. Alegeţi acţiunea <b>Personalizează KMyMoney...</b> din "
+"meniul de <b>Setări</b>."
+
+#: dialogs/rc.cpp:83 dialogs/rc.cpp:411 dialogs/rc.cpp:435
+#: kmymoneyutils.cpp:92 kmymoneyutils.cpp:105 mymoney/mymoneyaccount.cpp:753
+#: mymoney/mymoneysecurity.cpp:160
+msgid "Stock"
+msgstr "Acţiune"
+
+#: dialogs/rc.cpp:84 dialogs/rc.cpp:412 dialogs/rc.cpp:436
+#: kmymoneyutils.cpp:107 mymoney/mymoneysecurity.cpp:163
+msgid "Mutual Fund"
+msgstr "Fond deschis pentru investiţii"
+
+#: dialogs/rc.cpp:85 dialogs/rc.cpp:413 dialogs/rc.cpp:437
+#: kmymoneyutils.cpp:109 mymoney/mymoneysecurity.cpp:166
+msgid "Bond"
+msgstr "Obligaţiune"
+
+#: mymoney/mymoneysecurity.cpp:172 reports/querytable.cpp:1150
+#: widgets/kmymoneyaccountselector.cpp:76
+msgid "None"
+msgstr "Nici una"
+
+#: dialogs/rc.cpp:46 kmymoneyutils.cpp:402 mymoney/mymoneyaccount.cpp:759
+#: mymoney/mymoneyscheduled.cpp:1002 mymoney/mymoneysecurity.cpp:175
+#: views/kforecastview.cpp:174 widgets/register.cpp:54
+#: widgets/register.cpp:485 widgets/transaction.cpp:708
+#: widgets/transaction.cpp:1459
+msgid "Unknown"
+msgstr "Necunoscut(ă)"
+
+#: mymoney/storage/mymoneystoragesql.cpp:191
+msgid ""
+"Database apparently in use\n"
+"Opened by %1 on %2 at %3.\n"
+"Open anyway?"
+msgstr ""
+"Baza de date pare deschisă\n"
+"Deschisă de către %1 în %2 la %3.\n"
+"Deschideţi oricum?"
+
+#: mymoney/storage/mymoneystoragesql.cpp:229
+msgid "Cannot currently create database for driver %1; please create manually"
+msgstr "Nu se poate crea baza de date pentru %1; vă rog să o creaţi manual"
+
+#: mymoney/storage/mymoneystoragesql.cpp:244
+msgid "Error in create database %1; do you have create permissions?"
+msgstr "Eroare la crearea bazei de date %1; aveţi drepturi de creere?"
+
+#: converter/mymoneygncreader.cpp:1329
+#: mymoney/storage/mymoneystoragexml.cpp:166
+msgid "Loading transactions..."
+msgstr "Se încarcă tranzacţiile..."
+
+#: converter/mymoneygncreader.cpp:1190
+#: mymoney/storage/mymoneystoragexml.cpp:173
+msgid "Loading accounts..."
+msgstr "Se încarcă conturile..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:180
+msgid "Loading securities..."
+msgstr "Se încarcă titlurile de valoare..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:187
+msgid "Loading reports..."
+msgstr "Se încarcă rapoartele..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:268
+msgid "Unknown XML tag %1 found in line %2"
+msgstr "S-a găsit elementul XML necunoscut %1 la linia %2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:274
+msgid "Exception while creating a %1 element: %2"
+msgstr "A avut loc următoarea excepţie la crearea unui element %1: %2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:513
+msgid "Loading file information..."
+msgstr "Se încarcă informaţiile despre fişier..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:591
+msgid "Loading user information..."
+msgstr "Se încarcă informaţiile despre utilizator..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:655
+msgid "Saving accounts..."
+msgstr "Se salvează conturile..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:678
+msgid "Saving transactions..."
+msgstr "Se salvează tranzacţiile..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:747
+msgid "Saving reports..."
+msgstr "Se salvează rapoartele..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:762
+msgid "Saving budgets..."
+msgstr "Se salvează bugetele..."
+
+#: mymoney/storage/mymoneystoragedump.cpp:414
+msgid "not reconciled"
+msgstr "nereconciliate"
+
+#: mymoney/storage/mymoneystoragedump.cpp:417
+msgid "cleared"
+msgstr "verificate"
+
+#: mymoney/storage/mymoneystoragedump.cpp:420
+msgid "reconciled"
+msgstr "reconciliate"
+
+#: mymoney/storage/mymoneystoragedump.cpp:423
+msgid "frozen"
+msgstr "îngheţate"
+
+#: mymoney/storage/mymoneystoragedump.cpp:426
+msgid "unknown"
+msgstr "necunoscute"
+
+#: mymoney/mymoneyaccount.cpp:101
+msgid ""
+"Account %1 contains an opening balance. Please use a KMyMoney version >= 0.8 "
+"and < 0.9 to correct the problem."
+msgstr ""
+"Contul %1 are un sold de deschidere. Vă rog să folosiţi o versiune de "
+"KMymoney mai mare sau egală cu 0.8 şi mai mică de 0.9 pentru a corecta "
+"problema."
+
+#: mymoney/mymoneyaccount.cpp:597
+msgid ""
+"_: Brokerage (suffix for account names)\n"
+"Brokerage"
+msgstr "Brokeraj"
+
+#: kmymoneyutils.cpp:74 mymoney/mymoneyaccount.cpp:726
+msgid "Certificate of Deposit"
+msgstr "Certificat de depozit"
+
+#: kmymoneyutils.cpp:78 mymoney/mymoneyaccount.cpp:732
+msgid "Money Market"
+msgstr "Piaţa financiară"
+
+#: converter/mymoneytemplate.cpp:186 converter/mymoneytemplate.cpp:187
+#: dialogs/knewaccountdlg.cpp:1018 kmymoneyutils.cpp:86
+#: mymoney/mymoneyaccount.cpp:744 views/kaccountsview.cpp:360
+#: views/kbudgetview.cpp:372 views/kcategoriesview.cpp:178
+#: views/khomeview.cpp:1813 views/kmymoneyview.cpp:767
+#: widgets/kmymoneyaccountselector.cpp:68
+#: widgets/kmymoneyaccountselector.cpp:179
+#: widgets/kmymoneyaccountselector.cpp:370 widgets/register.cpp:828
+msgid "Income"
+msgstr "Venituri"
+
+#: converter/mymoneytemplate.cpp:190 converter/mymoneytemplate.cpp:191
+#: dialogs/knewaccountdlg.cpp:1020 kmymoneyutils.cpp:88
+#: mymoney/mymoneyaccount.cpp:747 views/kaccountsview.cpp:364
+#: views/kbudgetview.cpp:378 views/kcategoriesview.cpp:182
+#: views/kmymoneyview.cpp:768 widgets/kmymoneyaccountselector.cpp:72
+#: widgets/kmymoneyaccountselector.cpp:180
+#: widgets/kmymoneyaccountselector.cpp:380 widgets/register.cpp:829
+msgid "Expense"
+msgstr "Cheltuieli"
+
+#: kmymoneyutils.cpp:90 mymoney/mymoneyaccount.cpp:750
+msgid "Investment Loan"
+msgstr "Împrumut de investiţie"
+
+#: mymoney/mymoneyfile.cpp:47
+msgid "Opening Balances"
+msgstr "Solduri iniţiale"
+
+#: mymoney/mymoneyfile.cpp:398
+msgid "Cannot remove transaction that references a closed account."
+msgstr "Nu se poate şterge o tranzacţie care se referă la un cont închis."
+
+#: mymoney/mymoneyfile.cpp:1414 mymoney/mymoneyfile.cpp:1433
+#: mymoney/mymoneyfile.cpp:1447 mymoney/mymoneyfile.cpp:1469
+msgid "* Problem with account '%1'"
+msgstr "* Este o problemă cu contul '%1'"
+
+#: mymoney/mymoneyfile.cpp:1419
+msgid " * Parent account '%1' belongs to a different group."
+msgstr " * Contul părinte aparţine unui grup diferit."
+
+#: mymoney/mymoneyfile.cpp:1420 mymoney/mymoneyfile.cpp:1450
+msgid " New parent account is the top level account '%1'."
+msgstr " Noul cont părinte este contul rădăcină '%1'."
+
+#: mymoney/mymoneyfile.cpp:1436
+msgid " * Parent account '%1' does not contain '%2' as sub-account."
+msgstr " * Contul părinte '%1' nu conţine contul '%2' ca subcont."
+
+#: mymoney/mymoneyfile.cpp:1449
+msgid " * The parent with id %1 does not exist anymore."
+msgstr " * Părintele cu identificatorul %1 nu mai există."
+
+#: mymoney/mymoneyfile.cpp:1471
+msgid " * Child account with id %1 does not exist anymore."
+msgstr " * Subcontul cu identificatorul %1 nu mai există."
+
+#: mymoney/mymoneyfile.cpp:1472
+msgid " The child account list will be reconstructed."
+msgstr " Lista subconturilor va fi refăcută."
+
+#: mymoney/mymoneyfile.cpp:1492
+msgid " * Unable to update account data in engine."
+msgstr " * Nu s-a putut actualiza datele contului."
+
+#: mymoney/mymoneyfile.cpp:1499
+msgid "* Reconstructing the child lists for"
+msgstr "* Se reface lista subelementelor pentru"
+
+#: mymoney/mymoneyfile.cpp:1536
+msgid " * Unable to update account data for account %1 in engine"
+msgstr " * Nu s-a putut actualiza datele contului %1"
+
+#: mymoney/mymoneyfile.cpp:1554
+msgid " * Payee %1 recreated with fixed id"
+msgstr " * Beneficiarul %1 a fost recreat cu identificator fix"
+
+#: mymoney/mymoneyfile.cpp:1583
+msgid " * Payee id updated in split of transaction '%1'."
+msgstr ""
+" * Identificatorul beneficiarului a fost actualizat în tranzacţia '%1'."
+
+#: mymoney/mymoneyfile.cpp:1596
+msgid " * shares set to value in split of transaction '%1'."
+msgstr " * acţiunile a fost transformate în valoare în tranzacţia '%1'."
+
+#: mymoney/mymoneyfile.cpp:1599
+msgid " * value set to shares in split of transaction '%1'."
+msgstr " * valoarea a fost transformată în acţiuni în tranzacţia '%1'."
+
+#: mymoney/mymoneyfile.cpp:1605
+msgid ""
+" * Split %2 in transaction '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+" * Partea %2 din tranzacţia '%1' conţine o referinţă la contul invalid %3. "
+"Vă rog să corectaţi eroarea manual."
+
+#: mymoney/mymoneyfile.cpp:1616
+msgid " * action marked as interest in split of transaction '%1'."
+msgstr " * acţiune marcată ca dobândă în partea de tranzacţie '%1'."
+
+#: mymoney/mymoneyfile.cpp:1643
+msgid " * Payee id updated in split of schedule '%1'."
+msgstr ""
+" * Identificatorul beneficiarului a fost actualizat în plata programată '%"
+"1'."
+
+#: mymoney/mymoneyfile.cpp:1649
+msgid ""
+" * Split in scheduled transaction '%1' contained value != 0 and shares == 0."
+msgstr ""
+" * O parte din tranzacţia '%1' conţine o valoare nenulă iar acţiunile au "
+"valoare nulă."
+
+#: mymoney/mymoneyfile.cpp:1650
+msgid " Shares set to value."
+msgstr " Acţiunile transformate în valoare."
+
+#: mymoney/mymoneyfile.cpp:1658
+msgid " * Removed bankid from split in scheduled transaction '%1'."
+msgstr ""
+" * S-a şters identificatorul băncii dintr-o parte a tranzactiei programate "
+"'%1'."
+
+#: mymoney/mymoneyfile.cpp:1671
+msgid " * shares set to value in split in schedule '%1'."
+msgstr " * acţiunile a fost transformate în valoare în plata programată '%1'."
+
+#: mymoney/mymoneyfile.cpp:1674
+msgid " * value set to shares in split in schedule '%1'."
+msgstr " * valoarea a fost transformată în acţiuni în plata programată '%1'."
+
+#: mymoney/mymoneyfile.cpp:1680
+msgid ""
+" * Split %2 in schedule '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+" * Partea %2 din tranzacţia '%1' conţine o referinţă la contul invalid %3. "
+"Vă rog să corectaţi problema manual."
+
+#: mymoney/mymoneyfile.cpp:1706
+msgid " * Payee id updated in report '%1'."
+msgstr " * Identificatorul beneficiarului a fost actualizat în raportul '%1'."
+
+#: mymoney/mymoneyfile.cpp:1723
+msgid " * Payee '%1' removed."
+msgstr " * Beneficiarul '%1' a fost şters."
+
+#: mymoney/mymoneyfile.cpp:1730
+msgid "Finish! Data is consistent."
+msgstr "Gata! Datele sunt consistente."
+
+#: mymoney/mymoneyfile.cpp:1732
+msgid "Finish! %1 problem(s) corrected. %2 problem(s) still present."
+msgstr "Gata! %1 probleme corectate. %2 probleme au rămas necorectate."
+
+#: mymoney/mymoneyscheduled.cpp:873 mymoney/mymoneyscheduled.cpp:918
+#: mymoney/mymoneyscheduled.cpp:969 mymoney/mymoneyscheduled.cpp:1265
+#: mymoney/mymoneyscheduletest.cpp:1336
+msgid "Once"
+msgstr "O dată"
+
+#: mymoney/mymoneyscheduled.cpp:875 mymoney/mymoneyscheduled.cpp:924
+#: mymoney/mymoneyscheduled.cpp:1267 mymoney/mymoneyscheduletest.cpp:1337
+#: widgets/rc.cpp:72
+msgid "Daily"
+msgstr "Zilnic"
+
+#: mymoney/mymoneyscheduled.cpp:877 mymoney/mymoneyscheduled.cpp:931
+#: mymoney/mymoneyscheduled.cpp:1269 mymoney/mymoneyscheduletest.cpp:1338
+#: widgets/rc.cpp:73
+msgid "Weekly"
+msgstr "Săptămânal"
+
+#: mymoney/mymoneyscheduled.cpp:881 mymoney/mymoneyscheduled.cpp:932
+#: mymoney/mymoneyscheduled.cpp:1273 mymoney/mymoneyscheduletest.cpp:1339
+msgid "Every other week"
+msgstr "La fiecare două săptămâni"
+
+#: mymoney/mymoneyscheduled.cpp:879 mymoney/mymoneyscheduled.cpp:1271
+#: mymoney/mymoneyscheduletest.cpp:1340
+msgid "Fortnightly"
+msgstr "La fiecare paisprezece zile"
+
+#: mymoney/mymoneyscheduled.cpp:883 mymoney/mymoneyscheduled.cpp:941
+#: mymoney/mymoneyscheduled.cpp:1275 mymoney/mymoneyscheduletest.cpp:1341
+msgid "Every half month"
+msgstr "La fiecare jumătate de lună"
+
+#: mymoney/mymoneyscheduled.cpp:887 mymoney/mymoneyscheduled.cpp:934
+#: mymoney/mymoneyscheduled.cpp:1279 mymoney/mymoneyscheduletest.cpp:1342
+msgid "Every four weeks"
+msgstr "La fiecare patru săptămâni"
+
+#: mymoney/mymoneyscheduled.cpp:893 mymoney/mymoneyscheduled.cpp:935
+#: mymoney/mymoneyscheduled.cpp:1285 mymoney/mymoneyscheduletest.cpp:1344
+msgid "Every eight weeks"
+msgstr "La fiecare opt săptămâni"
+
+#: mymoney/mymoneyscheduled.cpp:895 mymoney/mymoneyscheduled.cpp:948
+#: mymoney/mymoneyscheduled.cpp:1287 mymoney/mymoneyscheduletest.cpp:1345
+msgid "Every two months"
+msgstr "La fiecare două luni"
+
+#: mymoney/mymoneyscheduled.cpp:897 mymoney/mymoneyscheduled.cpp:949
+#: mymoney/mymoneyscheduled.cpp:1289 mymoney/mymoneyscheduletest.cpp:1346
+msgid "Every three months"
+msgstr "La fiecare trei luni"
+
+#: mymoney/mymoneyscheduled.cpp:899 mymoney/mymoneyscheduled.cpp:1291
+#: mymoney/mymoneyscheduletest.cpp:1347 widgets/rc.cpp:76
+msgid "Quarterly"
+msgstr "Trimestrial"
+
+#: mymoney/mymoneyscheduled.cpp:901 mymoney/mymoneyscheduled.cpp:950
+#: mymoney/mymoneyscheduled.cpp:1293 mymoney/mymoneyscheduletest.cpp:1348
+msgid "Every four months"
+msgstr "La fiecare patru luni"
+
+#: mymoney/mymoneyscheduled.cpp:903 mymoney/mymoneyscheduled.cpp:951
+#: mymoney/mymoneyscheduled.cpp:1295 mymoney/mymoneyscheduletest.cpp:1349
+msgid "Twice yearly"
+msgstr "De două ori pe an"
+
+#: mymoney/mymoneyscheduled.cpp:905 mymoney/mymoneyscheduled.cpp:957
+#: mymoney/mymoneyscheduled.cpp:1297 mymoney/mymoneyscheduletest.cpp:1350
+#: widgets/rc.cpp:20 widgets/rc.cpp:77
+msgid "Yearly"
+msgstr "Anual"
+
+#: mymoney/mymoneyscheduled.cpp:907 mymoney/mymoneyscheduled.cpp:958
+#: mymoney/mymoneyscheduled.cpp:1299 mymoney/mymoneyscheduletest.cpp:1351
+msgid "Every other year"
+msgstr "La fiecare doi ani"
+
+#: mymoney/mymoneyscheduled.cpp:870 mymoney/mymoneyscheduled.cpp:913
+#: mymoney/mymoneyscheduled.cpp:966
+msgid "Any"
+msgstr "Oricare"
+
+#: mymoney/mymoneyscheduled.cpp:885 mymoney/mymoneyscheduled.cpp:933
+#: mymoney/mymoneyscheduled.cpp:1277
+msgid "Every three weeks"
+msgstr "La fiecare trei săptămâni"
+
+#: mymoney/mymoneyscheduled.cpp:889 mymoney/mymoneyscheduled.cpp:925
+#: mymoney/mymoneyscheduled.cpp:1281
+msgid "Every thirty days"
+msgstr "La fiecare treizeci de zile"
+
+#: mymoney/mymoneyscheduled.cpp:971
+msgid "Day"
+msgstr "Zi"
+
+#: mymoney/mymoneyscheduled.cpp:973 reports/listtable.cpp:206
+#: widgets/kmymoneycalendar.cpp:123 widgets/rc.cpp:97
+msgid "Week"
+msgstr "Săptămână"
+
+#: mymoney/mymoneyscheduled.cpp:975
+msgid "Half-month"
+msgstr "Jumătate de lună"
+
+#: mymoney/mymoneyscheduled.cpp:977 reports/listtable.cpp:205
+#: widgets/kmymoneycalendar.cpp:124 widgets/rc.cpp:96
+msgid "Month"
+msgstr "Lună"
+
+#: dialogs/rc.cpp:400 mymoney/mymoneyscheduled.cpp:979 views/rc.cpp:14
+msgid "Year"
+msgstr "An"
+
+#: mymoney/mymoneyscheduled.cpp:989
+msgid "Bill"
+msgstr "Factură"
+
+#: dialogs/rc.cpp:107 dialogs/rc.cpp:162 dialogs/rc.cpp:249 dialogs/rc.cpp:754
+#: mymoney/mymoneyscheduled.cpp:992 widgets/kmymoneycombo.cpp:420
+#: widgets/register.cpp:571
+msgid "Deposit"
+msgstr "Depozit"
+
+#: mymoney/mymoneyscheduled.cpp:995 reports/querytable.cpp:594
+#: reports/querytable.cpp:696 widgets/kmymoneycombo.cpp:419
+msgid "Transfer"
+msgstr "Transfer"
+
+#: mymoney/mymoneyscheduled.cpp:1035
+msgid "Any (Error)"
+msgstr "Oricare (Eroare)"
+
+#: dialogs/rc.cpp:114 mymoney/mymoneyscheduled.cpp:1047
+msgid "Change the date to the previous Friday"
+msgstr "Schimbă data pe vinerea precedentă"
+
+#: dialogs/rc.cpp:115 mymoney/mymoneyscheduled.cpp:1050
+msgid "Change the date to the next Monday"
+msgstr "Schimbă data pe lunea următoare"
+
+#: mymoney/mymoneyscheduled.cpp:1053
+msgid "Do Nothing"
+msgstr "Nu face nimic"
+
+#: kmymoney2.cpp:312
+msgid "Open database..."
+msgstr "Deschide baza de date..."
+
+#: kmymoney2.cpp:313
+msgid "Save as database..."
+msgstr "Salvează ca bază de date..."
+
+#: kmymoney2.cpp:314
+msgid "Backup..."
+msgstr "Copie de siguranţă..."
+
+#: kmymoney2.cpp:315 kmymoney2.cpp:321
+msgid "QIF..."
+msgstr "QIF..."
+
+#: kmymoney2.cpp:316
+msgid "Gnucash..."
+msgstr "Gnucash..."
+
+#: kmymoney2.cpp:317
+msgid "Statement file..."
+msgstr "Fişier extras de cont..."
+
+#: kmymoney2.cpp:319 kmymoney2.cpp:320
+msgid "Account Template..."
+msgstr "Cont şablon..."
+
+#: kmymoney2.cpp:322
+msgid "Personal Data..."
+msgstr "Date personale..."
+
+#: kmymoney2.cpp:325
+msgid "Dump Memory"
+msgstr "Copie a memoriei"
+
+#: kmymoney2.cpp:327
+msgid "File-Information..."
+msgstr "Informaţii despre fişier..."
+
+#: kmymoney2.cpp:332
+msgid "Find transaction..."
+msgstr "Caută tranzacţia..."
+
+#: kmymoney2.cpp:337
+msgid "Show Transaction Detail"
+msgstr "Afişează detaliile tranzacţiei"
+
+#: kmymoney2.cpp:338 rc.cpp:60
+msgid "Hide reconciled transactions"
+msgstr "Ascunde tranzacţiile reconciliate"
+
+#: kmymoney2.cpp:339 rc.cpp:57
+msgid "Hide unused categories"
+msgstr "Ascunde categoriile neutilizate"
+
+#: kmymoney2.cpp:340
+msgid "Show all accounts"
+msgstr "Afişează toate conturile"
+
+#: kmymoney2.cpp:345
+msgid "New institution..."
+msgstr "Instituţie nouă..."
+
+#: kmymoney2.cpp:346
+msgid "Edit institution..."
+msgstr "Modifică instituţia..."
+
+#: kmymoney2.cpp:347
+msgid "Delete institution..."
+msgstr "Şterge instituţia..."
+
+#: kmymoney2.cpp:352
+msgid "New account..."
+msgstr "Cont nou..."
+
+#: kmymoney2.cpp:354
+msgid "Open ledger"
+msgstr "Deschide registrul"
+
+#: kmymoney2.cpp:355
+msgid "Reconcile..."
+msgstr "Reconciliază..."
+
+#: kmymoney2.cpp:356
+msgid ""
+"_: Finish reconciliation\n"
+"Finish"
+msgstr "Termină"
+
+#: kmymoney2.cpp:357
+msgid ""
+"_: Postpone reconciliation\n"
+"Postpone"
+msgstr "Amână"
+
+#: kmymoney2.cpp:358
+msgid "Edit account..."
+msgstr "Modifică contul..."
+
+#: kmymoney2.cpp:359
+msgid "Delete account..."
+msgstr "Şterge contul..."
+
+#: kmymoney2.cpp:360
+msgid "Close account"
+msgstr "Închide contul"
+
+#: kmymoney2.cpp:361
+msgid "Reopen account"
+msgstr "Redeschide contul"
+
+#: kmymoney2.cpp:362
+msgid "Transaction report"
+msgstr "Raport al tranzacţiilor"
+
+#: kmymoney2.cpp:364
+msgid "Show balance chart..."
+msgstr "Vizualizează graficul soldului..."
+
+#: kmymoney2.cpp:366
+msgid "Map to online account"
+msgstr "Asociaţi la un cont online"
+
+#: kmymoney2.cpp:367
+msgid "Unmap account"
+msgstr "Disociaţi contul"
+
+#: dialogs/settings/rc.cpp:126 kmymoney2.cpp:368 views/kpayeesview.cpp:363
+#: widgets/rc.cpp:50
+msgid "Update"
+msgstr "Actualizează"
+
+#: kmymoney2.cpp:372
+msgid "Update account..."
+msgstr "Actualizează cont..."
+
+#: kmymoney2.cpp:373
+msgid "Update all accounts..."
+msgstr "Actualizează toate conturile..."
+
+#: kmymoney2.cpp:378
+msgid "New category..."
+msgstr "Categorie nouă..."
+
+#: kmymoney2.cpp:379
+msgid "Edit category..."
+msgstr "Modifică categoria..."
+
+#: kmymoney2.cpp:380
+msgid "Delete category..."
+msgstr "Şterge categoria..."
+
+#: kmymoney2.cpp:386
+msgid "QIF Profile Editor..."
+msgstr "Editor de profil QIF"
+
+#: kmymoney2.cpp:387
+msgid "Securities..."
+msgstr "Titluri de valoare..."
+
+#: kmymoney2.cpp:388
+msgid "Currencies..."
+msgstr "Monede..."
+
+#: kmymoney2.cpp:389
+msgid "Prices..."
+msgstr "Preţuri..."
+
+#: kmymoney2.cpp:390
+msgid "Update Stock and Currency Prices..."
+msgstr "Actualizaţi cotaţiile acţiunilor şi ale monedelor..."
+
+#: kmymoney2.cpp:391
+msgid "Consistency Check"
+msgstr "Verificarea consistenţei"
+
+#: kmymoney2.cpp:392
+msgid "Performance-Test"
+msgstr "Verificarea performanţei"
+
+#: kmymoney2.cpp:393
+msgid "KCalc..."
+msgstr "KCalc..."
+
+#: kmymoney2.cpp:399
+msgid "Enable all messages"
+msgstr "Activează toate mesajele"
+
+#: kmymoney2.cpp:400
+msgid "KDE language settings..."
+msgstr "Setări de limbă KDE..."
+
+#: kmymoney2.cpp:405
+msgid "&Show tip of the day"
+msgstr "&Afişează sfatul zilei"
+
+#: kmymoney2.cpp:410
+msgid ""
+"_: New transaction button\n"
+"New"
+msgstr "Creează"
+
+#: kmymoney2.cpp:415
+msgid ""
+"_: Edit transaction button\n"
+"Edit"
+msgstr "Modifică"
+
+#: kmymoney2.cpp:417
+msgid ""
+"_: Enter transaction\n"
+"Enter"
+msgstr "Salvează"
+
+#: kmymoney2.cpp:420
+msgid ""
+"_: Edit split button\n"
+"Edit splits"
+msgstr "Modifică părţi de tranzacţie"
+
+#: kmymoney2.cpp:421
+msgid ""
+"_: Cancel transaction edit\n"
+"Cancel"
+msgstr "Renunţă"
+
+#: kmymoney2.cpp:422
+msgid ""
+"_: Delete transaction\n"
+"Delete"
+msgstr "Şterge"
+
+#: kmymoney2.cpp:423
+msgid ""
+"_: Duplicate transaction\n"
+"Duplicate"
+msgstr "Creează un duplicat"
+
+#: kmymoney2.cpp:425 kmymoney2.cpp:4826 kmymoney2.cpp:5107
+msgid ""
+"_: Button text for match transaction\n"
+"Match"
+msgstr "Asociază"
+
+#: kmymoney2.cpp:426
+msgid ""
+"_: Accept 'imported' and 'matched' transaction\n"
+"Accept"
+msgstr "Acceptă"
+
+#: kmymoney2.cpp:428
+msgid ""
+"_: Toggle reconciliation flag\n"
+"Toggle"
+msgstr "Schimbă starea"
+
+#: kmymoney2.cpp:429
+msgid ""
+"_: Mark transaction cleared\n"
+"Cleared"
+msgstr "Verificate"
+
+#: kmymoney2.cpp:430
+msgid ""
+"_: Mark transaction reconciled\n"
+"Reconciled"
+msgstr "Reconciliate"
+
+#: kmymoney2.cpp:431
+msgid ""
+"_: Mark transaction not reconciled\n"
+"Not reconciled"
+msgstr "Nereconciliate"
+
+#: kmymoney2.cpp:432
+msgid ""
+"_: Select all transactions\n"
+"Select all"
+msgstr "Alege toate"
+
+#: kmymoney2.cpp:434 kmymoney2.cpp:5497
+msgid "Goto account"
+msgstr "Du-te la cont"
+
+#: kmymoney2.cpp:435 kmymoney2.cpp:5495
+msgid "Goto payee"
+msgstr "Du-te la beneficiar/plătitor"
+
+#: kmymoney2.cpp:436
+msgid "Create scheduled transaction..."
+msgstr "Creează o tranzacţie programată"
+
+#: kmymoney2.cpp:437
+msgid "Assign next number"
+msgstr "Alocă numărul următor"
+
+#: kmymoney2.cpp:438
+msgid ""
+"_: Combine transactions\n"
+"Combine"
+msgstr "Combină"
+
+#: kmymoney2.cpp:440
+msgid "New investment"
+msgstr "Investiţie nouă"
+
+#: kmymoney2.cpp:441
+msgid "Edit investment..."
+msgstr "Modifică investiţia..."
+
+#: kmymoney2.cpp:442
+msgid "Delete investment..."
+msgstr "Şterge investiţia..."
+
+#: kmymoney2.cpp:443
+msgid "Online price update..."
+msgstr "Actualizează preţul online..."
+
+#: kmymoney2.cpp:444
+msgid "Manual price update..."
+msgstr "Actualizează preţul manual..."
+
+#: kmymoney2.cpp:446
+msgid "New scheduled transaction..."
+msgstr "Tranzacţie programată nouă"
+
+#: kmymoney2.cpp:447
+msgid "Edit scheduled transaction..."
+msgstr "Modifică tranzacţia programată"
+
+#: kmymoney2.cpp:448
+msgid "Delete scheduled transaction..."
+msgstr "Șterge tranzacţia programată"
+
+#: kmymoney2.cpp:449
+msgid "Duplicate scheduled transaction"
+msgstr "Creează un duplicat al tranzacţiei programate"
+
+#: kmymoney2.cpp:450
+msgid "Enter next transaction..."
+msgstr "Introdu tranzacţia următoare"
+
+#: kmymoney2.cpp:451
+msgid "Skip next transaction..."
+msgstr "Omite tranzacţia următoare"
+
+#: kmymoney2.cpp:453
+msgid "New payee"
+msgstr "Beneficiar/plătitor nou"
+
+#: kmymoney2.cpp:454
+msgid "Rename payee"
+msgstr "Redenumeşte beneficiarul/plătitorul"
+
+#: kmymoney2.cpp:455
+msgid "Delete payee"
+msgstr "Şterge beneficiarul/plătitorul"
+
+#: kmymoney2.cpp:457
+msgid "New budget"
+msgstr "Buget nou"
+
+#: kmymoney2.cpp:458
+msgid "Rename budget"
+msgstr "Redenumeşte bugetul"
+
+#: kmymoney2.cpp:459
+msgid "Delete budget"
+msgstr "Şterge bugetul"
+
+#: kmymoney2.cpp:460
+msgid "Copy budget"
+msgstr "Copiază bugetul"
+
+#: kmymoney2.cpp:461
+msgid "Change budget year"
+msgstr "Schimbă anul bugetului"
+
+#: kmymoney2.cpp:462
+msgid ""
+"_: Budget based on forecast\n"
+"Forecast"
+msgstr "Estimare"
+
+#: kmymoney2.cpp:467 kmymoney2.cpp:3990 kmymoney2.cpp:3993 kmymoney2.cpp:3999
+msgid "New currency"
+msgstr "Monedă nouă"
+
+#: kmymoney2.cpp:468 kmymoney2.cpp:4021 kmymoney2.cpp:4026
+msgid "Rename currency"
+msgstr "Redenumeşte moneda"
+
+#: kmymoney2.cpp:469 kmymoney2.cpp:4039
+msgid "Delete currency"
+msgstr "Şterge moneda"
+
+#: dialogs/rc.cpp:69 kmymoney2.cpp:470
+msgid "Select as base currency"
+msgstr "Alege ca monedă de bază"
+
+#: kmymoney2.cpp:481
+msgid "View back"
+msgstr "Vizualizare înapoi"
+
+#: kmymoney2.cpp:482
+msgid "View forward"
+msgstr "Vizualizare înainte"
+
+#: kmymoney2.cpp:611
+msgid "KMyMoney file needs saving. Save ?"
+msgstr "Fişierul KMyMoney are nevoie de salvare. Salvaţi?"
+
+#: kmymoney2.cpp:757
+msgid "Creating new document..."
+msgstr "Se creează un document nou..."
+
+#: kmymoney2.cpp:869 kmymoney2.cpp:884
+msgid "Open a file."
+msgstr "Deschide un fişier."
+
+#: kmymoney2.cpp:872
+msgid ""
+"%1|KMyMoney files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Fişiere KMyMoney\n"
+"%2|Toate fişierele (*.*)"
+
+#: kmymoney2.cpp:873
+msgid "Open File..."
+msgstr "Deschide fişier..."
+
+#: kmymoney2.cpp:925 kstartuplogo.cpp:100
+msgid "Loading file..."
+msgstr "Se încarcă fişierul..."
+
+#: kmymoney2.cpp:986
+msgid ""
+"<b>%1</b> is either an invalid filename or the file does not exist. You can "
+"open another file or create a new one."
+msgstr ""
+"<b>%1</b> este un nume de fişier greşit sau fişierul nu există. Puteţi "
+"deschide un alt fişier sau creaţi un fişier nou."
+
+#: kmymoney2.cpp:986
+msgid "File not found"
+msgstr "Fişierul nu a fost găsit"
+
+#: kmymoney2.cpp:989
+msgid "File <b>%1</b> is already opened in another instance of KMyMoney"
+msgstr ""
+"Fişierul <b>%1</b> este deja deschis de către o altă instanţă a programului "
+"KMyMoney"
+
+#: kmymoney2.cpp:989
+msgid "Duplicate open"
+msgstr "Deschidere multiplă"
+
+#: kmymoney2.cpp:1001
+msgid "Saving file..."
+msgstr "Se salvează fişierul..."
+
+#: kmymoney2.cpp:1035 kmymoney2.cpp:1047 kmymoney2.cpp:1071
+#, c-format
+msgid "Additional encryption key(s) to be used: %1"
+msgstr "Chei adiţionale de criptare folosite: %1"
+
+#: kmymoney2.cpp:1056
+msgid "Saving file with a new filename..."
+msgstr "Se salvează fişierul cu un nume nou..."
+
+#: kmymoney2.cpp:1067
+msgid "Encryption key to be used"
+msgstr "Cheia de criptare folosită"
+
+#: kmymoney2.cpp:1072
+msgid "Manage additional keys"
+msgstr "Gestionează cheile de criptare"
+
+#: kmymoney2.cpp:1079
+msgid "No encryption"
+msgstr "Fără criptare"
+
+#: kmymoney2.cpp:1102
+msgid ""
+"_: KMyMoney (Filefilter)\n"
+"KMyMoney files"
+msgstr "Fişiere KMyMoney"
+
+#: kmymoney2.cpp:1103
+msgid ""
+"_: XML (Filefilter)\n"
+"XML files"
+msgstr "Fişiere XML"
+
+#: kmymoney2.cpp:1104
+msgid ""
+"_: Anonymous (Filefilter)\n"
+"Anonymous files"
+msgstr "Fişiere anonime"
+
+#: kmymoney2.cpp:1105
+msgid "All files"
+msgstr "Toate fişierele"
+
+#: kmymoney2.cpp:1193
+msgid "Saving file to database..."
+msgstr "Se salvează fişierul în baza de date..."
+
+#: kmymoney2.cpp:1207
+msgid "Cannot save to current database."
+msgstr "Nu s-a putut salva în baza de date curentă"
+
+#: kmymoney2.cpp:1225
+msgid "Closing window..."
+msgstr "Se închide fereastra..."
+
+#: kmymoney2.cpp:1228 kmymoney2.cpp:1249
+msgid "The file has been changed, save it ?"
+msgstr "Fişierul a fost modificat, Salvati?"
+
+#: kmymoney2.cpp:1339 kmymoney2.cpp:1352
+msgid "Ready."
+msgstr "Gata."
+
+#: kmymoney2.cpp:1397 kmymoney2.cpp:1433
+msgid "No KMyMoneyFile open"
+msgstr "Nu există fişier KMyMoney deschis"
+
+#: kmymoney2.cpp:1401
+msgid "Viewing personal data..."
+msgstr "Se vizualizează datele personale..."
+
+#: kmymoney2.cpp:1408
+msgid "Edit Personal Data"
+msgstr "Modifică Datele personale"
+
+#: kmymoney2.cpp:1424
+#, c-format
+msgid "Unable to store user information: %1"
+msgstr "Nu s-au putut salva datele utilizator: %1"
+
+#: kmymoney2.cpp:1447
+msgid "Importing account templates."
+msgstr "Se importă şabloane de cont"
+
+#: kmymoney2.cpp:1462
+msgid "Unable to import template(s): %1, thrown in %2:%3"
+msgstr "Nu s-au putut importa şabloanele de cont: %1, excepţie în %2:%3"
+
+#: kmymoney2.cpp:1471
+msgid "Exporting account templates."
+msgstr "Se exportă şabloanele de cont"
+
+#: kmymoney2.cpp:1474
+msgid ""
+"*.kmt|KMyMoney template files\n"
+"*.*|All files"
+msgstr ""
+"*.kmt|Fişiere şablon KMyMoney\n"
+"*.*|Toate fişierele"
+
+#: kmymoney2.cpp:1475
+msgid "Save as..."
+msgstr "Salvează ca..."
+
+#: kmymoney2.cpp:1517
+msgid "Importing file..."
+msgstr "Se importă fişierul..."
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "The statements have been processed with the following results:"
+msgstr "Bilanţul a fost procesat şi s-au obţinut următoarele rezultate:"
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:1754 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "Statement stats"
+msgstr "Statistici ale bilanţului"
+
+#: kmymoney2.cpp:1602
+msgid ""
+"You cannot import GnuCash data into an existing file. Do you wish to save "
+"this file?"
+msgstr ""
+"Nu puteţi importa fişiere GnuCash în fişiere existente. Doriţi să salvaţi "
+"acest fişier?"
+
+#: kmymoney2.cpp:1615
+msgid "Importing a Gnucash file."
+msgstr "Se importă un fişier GnuCash."
+
+#: kmymoney2.cpp:1618
+msgid ""
+"%1|Gnucash files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Fişiere Gnucash\n"
+"%2|Toate fişierele (*.*)"
+
+#: kmymoney2.cpp:1619
+msgid "Import Gnucash file..."
+msgstr "Importă un fişier GnuCash..."
+
+#: kmymoney2.cpp:1658
+msgid "Importing an XML Statement."
+msgstr "Se importă un bilanţ în format XML."
+
+#: kmymoney2.cpp:1661
+msgid ""
+"%1|XML files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Fişiere XML\n"
+"%2|Toate fişierele (*.*)"
+
+#: kmymoney2.cpp:1662
+msgid "Import XML Statement..."
+msgstr "Importă un bilanţ în format XML..."
+
+#: kmymoney2.cpp:1718
+msgid "Error importing %1: This file is not a valid KMM statement file."
+msgstr ""
+"Eroare la importul fişierului %1. Acest fişier nu conţine un bilanţ KMM "
+"valid."
+
+#: kmymoney2.cpp:1718
+msgid "Invalid Statement"
+msgstr "Bilanţ invalid."
+
+#: kmymoney2.cpp:1754
+msgid "The statement has been processed with the following results:"
+msgstr "Bilanţul a fost procesat şi s-au obţinut următoarele rezultate:"
+
+#: kmymoney2.cpp:1763
+msgid "Exporting file..."
+msgstr "Se exportă fişierul..."
+
+#: kmymoney2.cpp:1786
+msgid "The file <b>%1</b> already exists. Do you really want to override it?"
+msgstr "Fişierul <b>%1</b> deja există. Doriţi într-adevăr să-l suprascrieţi?"
+
+#: kmymoney2.cpp:1786
+msgid "File already exists"
+msgstr "Fişierul deja există"
+
+#: dialogs/rc.cpp:347 dialogs/rc.cpp:649 dialogs/rc.cpp:798 kmymoney2.cpp:1815
+msgid "General"
+msgstr "General"
+
+#: kmymoney2.cpp:1816
+msgid "Register"
+msgstr "Registru"
+
+#: kmymoney2.cpp:1817 views/khomeview.cpp:88 views/kmymoneyview.cpp:136
+msgid "Home"
+msgstr "Prima pagină"
+
+#: kmymoney2.cpp:1818 views/kmymoneyview.cpp:176
+msgid ""
+"Scheduled\n"
+"transactions"
+msgstr ""
+"Tranzacţii\n"
+" programate"
+
+#: kmymoney2.cpp:1819
+msgid "Encryption"
+msgstr "Codificare"
+
+#: kmymoney2.cpp:1820
+msgid "Colors"
+msgstr "Culori"
+
+#: dialogs/rc.cpp:344 dialogs/settings/rc.cpp:107 kmymoney2.cpp:1822
+#: widgets/rc.cpp:33
+msgid "Online Quotes"
+msgstr "Cotaţii online"
+
+#: kmymoney2.cpp:1823 reports/pivottable.cpp:2426 views/kmymoneyview.cpp:251
+#: views/kmymoneyview.cpp:253 views/kreportsview.cpp:1415 views/rc.cpp:41
+msgid "Forecast"
+msgstr "Estimare"
+
+#: kmymoney2.cpp:1824
+msgid "Plugins"
+msgstr "Funcţii suplimentare"
+
+#: kmymoney2.cpp:1893
+msgid ""
+"The file must be saved first before it can be backed up. Do you want to "
+"continue?"
+msgstr ""
+"Fişierul trebuie salvat înainte de a crea copia de siguranţă. Doriţi să "
+"continuaţi?"
+
+#: kmymoney2.cpp:1910
+msgid ""
+"The current implementation of the backup functionality only supports local "
+"files as source files! Your current source file is '%1'."
+msgstr ""
+"Implementarea curentă a funcţionalităţii de realizare de copii de siguranţă "
+"funcţionează doar cu fişiere sursă locale! Fişierul sursă curent este '%1'."
+
+#: kmymoney2.cpp:1913
+msgid "Local files only"
+msgstr "Doar fişiere locale"
+
+#: kmymoney2.cpp:1928
+#, c-format
+msgid "Mounting %1"
+msgstr "Se montează %1"
+
+#: kmymoney2.cpp:1967
+msgid "Backup file for today exists on that device. Replace ?"
+msgstr ""
+"Există deja o copie de siguranţă creată astăzi pe dispozitivul dat. Doriţi "
+"să înlocuiţi această copie?"
+
+#: dialogs/rc.cpp:7 kmymoney2.cpp:1967 kmymoney2.cpp:1994 kmymoney2.cpp:2024
+#: kmymoney2.cpp:2032 kmymoney2.cpp:2057 kmymoney2.cpp:2059
+msgid "Backup"
+msgstr "Copie de siguranţă"
+
+#: kmymoney2.cpp:1967
+msgid "&Replace"
+msgstr "Î&nlocuieşte"
+
+#: kmymoney2.cpp:1972 kmymoney2.cpp:1997 kmymoney2.cpp:2016 kmymoney2.cpp:2035
+#, c-format
+msgid "Unmounting %1"
+msgstr "Se demontează %1"
+
+#: kmymoney2.cpp:1987
+#, c-format
+msgid "Writing %1"
+msgstr "Se scrie %1"
+
+#: kmymoney2.cpp:1994
+msgid "Error mounting device"
+msgstr "Eroare la montarea dispozitivului"
+
+#: converter/mymoneygncreader.cpp:1995 kmymoney2.cpp:2023 kmymoney2.cpp:2055
+msgid "Done"
+msgstr "Gata"
+
+#: kmymoney2.cpp:2024 kmymoney2.cpp:2057
+msgid "File successfully backed up"
+msgstr "Copia de securitate a fişierului s-a salvat cu succes"
+
+#: kmymoney2.cpp:2032
+msgid "Error copying file to device"
+msgstr "Eroare la copierea fişierului pe dispozitiv"
+
+#: kmymoney2.cpp:2059
+msgid "Error unmounting device"
+msgstr "Eroare la demontarea dispozitivului"
+
+#: kmymoney2.cpp:2143
+#, c-format
+msgid "Cannot add institution: %1"
+msgstr "Nu se poate adăuga instituţia: %1"
+
+#: kmymoney2.cpp:2185
+#, c-format
+msgid "Unable to store institution: %1"
+msgstr "Nu se poate salva instituţia: %1"
+
+#: kmymoney2.cpp:2192
+#, c-format
+msgid "Unable to edit institution: %1"
+msgstr "Nu se poate modifica instituţia: %1"
+
+#: kmymoney2.cpp:2203
+msgid "Do you really want to delete institution <b>%1</b> ?"
+msgstr "Doriţi într-adevăr să ştergeţi înstituţia <b>%1</b> ?"
+
+#: kmymoney2.cpp:2211 kmymoney2.cpp:2215
+#, c-format
+msgid "Unable to delete institution: %1"
+msgstr "Nu s-a putut şterge instituţia: %1"
+
+#: kmymoney2.cpp:2268
+#, c-format
+msgid "Unable to find account: %1"
+msgstr "Nu s-a putut găsi contul: %1"
+
+#: kmymoney2.cpp:2309
+msgid ""
+"This account is a liability and if the opening balance represents money "
+"owed, then it should be negative. Negate the amount?\n"
+"\n"
+"Please click Yes to change the opening balance to %1,\n"
+"Please click No to leave the amount as %2,\n"
+"Please click Cancel to abort the account creation."
+msgstr ""
+"Acest cont este un cont de pasive iar dacă soldul iniţial reprezintă bani "
+"datoraţi, atunci ar trebui să fie negativ. Doriţi să negaţi suma?\n"
+"\n"
+"Vă rog să folosiţi Da pentru a schimba soldul iniţial în %1,\n"
+"Vă rog să folosiţi Nu pentru a lăsa soldul ca %2,\n"
+"Vă rog să folosiţi Renunţă pentru a întrerupe procesul de creere a contului."
+
+#: kmymoney2.cpp:2345 kmymoney2.cpp:2346
+msgid "Loan payout"
+msgstr "Achitarea împrumutului"
+
+#: dialogs/knewloanwizard.cpp:892 kmymoney2.cpp:2374
+#, c-format
+msgid "Unable to add account: %1"
+msgstr "Nu s-a putut adăuga contul: %1"
+
+#: kmymoney2.cpp:2392
+msgid ""
+"The category <b>%1</b> currently does not exist. Do you want to create it?"
+"<p><i>The parent account will default to <b>%2</b> but can be changed in the "
+"following dialog</i>."
+msgstr ""
+"Categoria <b>%1</b> nu există. Doriţi să o creaţi?<p><i>Contul părinte va "
+"lua valoare implicită <b>%2</b> dar se poate schimba în dialogul următor</i>."
+
+#: kmymoney2.cpp:2392
+msgid "Create category"
+msgstr "Creează o categorie"
+
+#: kmymoney2.cpp:2429
+msgid "Create a new Category"
+msgstr "Creează o categorie nouă"
+
+#: kmymoney2.cpp:2505
+#, c-format
+msgid "Unable to create account: %1"
+msgstr "Nu s-a putut crea contul: %1"
+
+#: kmymoney2.cpp:2516
+msgid ""
+"The security <b>%1</b> currently does not exist as sub-account of <b>%2</b>. "
+"Do you want to create it?"
+msgstr ""
+"Titlul de valoare <b>%1</b> nu există ca un subcont al contului <b>%2</b>. "
+"Doriţi sa îl creaţi acum?"
+
+#: kmymoney2.cpp:2517
+msgid "Create security"
+msgstr "Creează titlul de valoare"
+
+#: kmymoney2.cpp:2551
+msgid "Do you really want to delete the investment <b>%1</b>?"
+msgstr "Doriţi într-adevăr să ştergeţi investiţia <b>%1</b> ?"
+
+#: kmymoney2.cpp:2551
+msgid "Delete investment"
+msgstr "Şterge investiţia"
+
+#: kmymoney2.cpp:2558
+#, c-format
+msgid "Unable to delete investment: %1"
+msgstr "Nu s-a putut şterge investiţia: %1"
+
+#: kmymoney2.cpp:2640 kmymoney2.cpp:2646
+msgid "Unable to add scheduled transaction: "
+msgstr "Nu s-a putut adăuga tranzacţia programată:"
+
+#: kmymoney2.cpp:2722
+msgid "Adjusting transactions..."
+msgstr "Se ajustează tranzacţii..."
+
+#: kmymoney2.cpp:2747
+msgid "Adjusting scheduled transactions..."
+msgstr "Se ajustează tranzacţiile programate..."
+
+#: kmymoney2.cpp:2765
+msgid "Adjusting budgets..."
+msgstr "Se ajustează bugete..."
+
+#: kmymoney2.cpp:2783
+msgid ""
+"Unable to exchange category <b>%1</b> with category <b>%2</b>. Reason: %3"
+msgstr ""
+"Nu s-a putut schimba categoria <b>%1</b> cu categoria <b>%2</b>. Motivul: %3"
+
+#: kmymoney2.cpp:2804
+msgid "Do you really want to delete category <b>%1</b>?"
+msgstr "Doriţi într-adevăr să ştergeţi categoria <b>%1</b>?"
+
+#: kmymoney2.cpp:2811
+msgid "Unable to delete category <b>%1</b>. Cause: %2"
+msgstr "Nu s-a putut şterge categoria<b>%1</b>. Motivul: %2"
+
+#: kmymoney2.cpp:2823
+msgid ""
+"Do you want to delete category <b>%1</b> with all its sub-categories or only "
+"the category itself? If you only delete the category itself, all its sub-"
+"categories will be made sub-categories of <b>%2</b>."
+msgstr ""
+"Doriţi să ştergeţi categoria <b>%1</b> cu toate subcategoriile ei sau doriţi "
+"să ştergeţi doar categoria? Dacă ştergeţi doar categoria atunci toate "
+"subcategoriile ei vor deveni subcategorii al <b>%2</b>."
+
+#: kmymoney2.cpp:2827
+msgid "Delete all"
+msgstr "Şterge tot"
+
+#: kmymoney2.cpp:2828
+msgid "Just the category"
+msgstr "Doar categoria"
+
+#: kmymoney2.cpp:2858
+msgid ""
+"Some sub-categories of category <b>%1</b> cannot be deleted, because they "
+"are still used. They will be made sub-categories of <b>%2</b>. Proceed?"
+msgstr ""
+"Unele sub-categorii al categoriei <b>%1</b> nu se pot şterge deoarece sunt "
+"încă folosite. Ele vor deveni sub-categorii al categoriei <b>%2</b>. "
+"Continuaţi?"
+
+#: kmymoney2.cpp:2878
+msgid "Unable to delete a sub-category of category <b>%1</b>. Reason: %2"
+msgstr ""
+"Nu s-a putut şterge o sub-categorie a categoriei <b>%1</b>. Motivul: %2"
+
+#: kmymoney2.cpp:2889
+msgid "Do you really want to delete account <b>%1</b>?"
+msgstr "Doriţi într-adevăr să ştergeţi contul <b>%1</b>?"
+
+#: kmymoney2.cpp:2901
+msgid "Unable to delete account '%1'. Cause: %2"
+msgstr "Nu s-a putut şterge contul '%1'. Motivul: %2"
+
+#: kmymoney2.cpp:2917
+msgid "Edit account '%1'"
+msgstr "Modifică contul '%1'"
+
+#: kmymoney2.cpp:2922
+msgid "Edit category '%1'"
+msgstr "Modifică categoria '%1'"
+
+#: kmymoney2.cpp:3008
+msgid "Unable to modify account '%1'. Cause: %2"
+msgstr "Nu s-a putut modifica contul '%1'. Motivul: %2"
+
+#: kmymoney2.cpp:3065
+msgid ""
+"KMyMoney has detected some overdue scheduled transactions for this account. "
+"Do you want to enter those scheduled transactions now?"
+msgstr ""
+"KMyMoney a detectat existenţa unor tranzacții programate întârziate pentru "
+"acest cont. Doriţi să introduceţi acele tranzacţii acum?"
+
+#: kmymoney2.cpp:3065
+msgid "Scheduled transactions found"
+msgstr "Au fost găsite tranzacţii programate"
+
+#: kmymoney2.cpp:3163
+msgid ""
+"You are about to finish the reconciliation of this account with a difference "
+"between your bank statement and the transactions marked as cleared.\n"
+"Are you sure you want to finish the reconciliation ?"
+msgstr ""
+"Sunteţi pe punctul de a termina procesul de reconciliere pentru acest cont "
+"cu o diferenţă între extrasul bancar şi tranzacţiile marcate ca verificate.\n"
+"Sunteţi siguri că doriţi să terminaţi procesul de reconciliere?"
+
+#: kmymoney2.cpp:3165
+msgid "Confirm end of reconciliation"
+msgstr "Confirmaţi sfârşitul reconcilierii"
+
+#: kmymoney2.cpp:3339
+msgid ""
+"You have closed this account. It remains in the system because you have "
+"transactions which still refer to it, but is not shown in the views. You can "
+"make it visible again by going to the View menu and selecting <b>Show all "
+"accounts</b> or by unselecting the <b>Don't show closed accounts</b> setting."
+msgstr ""
+"Aţi închis acest cont. A rămas în sistem deoarece aveţi tranzacţii care încă "
+"se referă la acest cont, dar nu este afişată. Îl puteţi face vizibil din nou "
+"accesând meniul Vizualizează şi alegând opţiunea <b>Arată toate conturile</"
+"b> sau renunţând la opţiunea <b>Ascunde conturile închise</b>."
+
+#: kmymoney2.cpp:3379
+msgid "<b>%1</b> cannot be moved to institution <b>%2</b>. Reason: %3"
+msgstr "<b>%1</b> nu poate fi mutat la instituţia <b>%2</b>. Motivul: %3"
+
+#: kmymoney2.cpp:3393
+msgid "<b>%1</b> cannot be moved to <b>%2</b>. Reason: %3"
+msgstr "<b>%1</b> nu poate fi mutat în <b>%2</b>. Motivul: %3"
+
+#: kmymoney2.cpp:3408
+msgid "%1 YTD Account Transactions"
+msgstr "%1 Tranzacţii de cont YTD"
+
+#: dialogs/kbalancechartdlg.cpp:71 kmymoney2.cpp:3409
+#: views/kforecastview.cpp:650 views/khomeview.cpp:276
+#: views/khomeview.cpp:1384 views/kreportsview.cpp:619
+msgid "Generated Report"
+msgstr "Raport generat"
+
+#: dialogs/rc.cpp:324 dialogs/settings/rc.cpp:80 kmymoney2.cpp:3411
+#: views/kreportsview.cpp:1062 views/rc.cpp:58 views/rc.cpp:59
+msgid "Transactions"
+msgstr "Tranzacţii"
+
+#: kmymoney2.cpp:3449
+#, c-format
+msgid "Unable to add scheduled transaction: %1"
+msgstr "Nu s-a putut adăuga tranzacția programată: %1"
+
+#: kmymoney2.cpp:3449
+msgid "Add scheduled transaction"
+msgstr "Adăugați o tranzacţie programată"
+
+#: kmymoney2.cpp:3489
+msgid ""
+"You have entered a scheduled transaction date of <b>%1</b>. Because the "
+"scheduled transaction was last paid on <b>%2</b>, KMyMoney will "
+"automatically adjust the scheduled transaction date to the next date unless "
+"the last payment date is reset. Do you want to reset the last payment date?"
+msgstr ""
+"Aţi introdus data <b>%1</b> ca dată a tranzacției programate. Deoarece "
+"transzacția programată a fost efectuată ultima dată la <b>%2</b>, KMyMoney "
+"va actualiza automat data tranzacției programate la următoarea dată scadentă "
+"în cazul în care ultima dată a tranzacției nu este reactualizată. Doriţi să "
+"reactualizaţi data ultimului transfer?"
+
+#: kmymoney2.cpp:3489
+msgid "Reset Last Payment Date"
+msgstr "Resetează ultima dată de plată"
+
+#: kmymoney2.cpp:3499 kmymoney2.cpp:3519 kmymoney2.cpp:3531
+msgid "Unable to modify scheduled transaction '%1'"
+msgstr "Nu s-a putut modifica tranzacția programată '%1'"
+
+#: kmymoney2.cpp:3543
+msgid "Are you sure you want to delete the scheduled transaction <b>%1</b>?"
+msgstr "Sunteţi siguri că doriţi să ştergeţi tranzacția programată <b>%1</b>?"
+
+#: kmymoney2.cpp:3546
+msgid ""
+"In case of loan payments it is currently not possible to recreate the "
+"scheduled transaction."
+msgstr ""
+"În cazul plăţilor pentru împrumuturi, în acest moment, nu este posibilă "
+"recreerea programului."
+
+#: kmymoney2.cpp:3555
+msgid "Unable to remove scheduled transaction '%1'"
+msgstr "Tranzacția programată '%1' nu a putut fi ştearsă"
+
+#: kmymoney2.cpp:3569
+#, c-format
+msgid ""
+"_: Copy of scheduled transaction name\n"
+"Copy of %1"
+msgstr "Copie a tranzacției programate %1"
+
+#: kmymoney2.cpp:3581 kmymoney2.cpp:4352
+msgid "Unable to duplicate transaction(s): %1, thrown in %2:%3"
+msgstr "Nu s-a(u) putut duplica tranzacţia(iile): %1, excepţie în %2:%3"
+
+#: kmymoney2.cpp:3595
+msgid ""
+"Do you really want to skip the <b>%1</b> transaction scheduled for <b>%2</b>?"
+msgstr ""
+"Doriţi într-adevăr să omiteţi tranzacţia programată <b>%1</b> în data de <b>%"
+"2</b>?"
+
+#: kmymoney2.cpp:3605
+msgid "Unable to skip scheduled transaction <b>%1</b>."
+msgstr "Nu s-a putut omite tranzacţia programată <b>%1</b>."
+
+#: kmymoney2.cpp:3618
+msgid "Unknown scheduled transaction '%1'"
+msgstr "Tranzacție programată necunoscută '%1'"
+
+#: kmymoney2.cpp:3673
+msgid ""
+"Are you sure you wish to stop this scheduled transaction from being entered "
+"into the register?\n"
+"\n"
+"KMyMoney will prompt you again next time it starts unless you manually enter "
+"it later."
+msgstr ""
+"Sunteţi siguri că doriţi să opriţi înregistrarea acestei tranzacții "
+"programate în registru?\n"
+"\n"
+"KMyMoney vă va întreba din nou la următoarea pornire în cazul în care nu o "
+"veţi introduce manual mai târziu."
+
+#: kmymoney2.cpp:3725 kmymoney2.cpp:3732
+msgid "Unable to enter scheduled transaction '%1'"
+msgstr "Nu s-a putut introduce tranzacţia programată '%1'"
+
+#: kmymoney2.cpp:3743 kmymoney2.cpp:3783
+msgid "New Payee"
+msgstr "Beneficiar/plătitor nou"
+
+#: kmymoney2.cpp:3745
+msgid "Do you want to add <b>%1</b> as payer/receiver ?"
+msgstr "Doriţi să adăugaţi pe <b>%1</b> ca plătitor/beneficiar ?"
+
+#: converter/mymoneystatementreader.cpp:892 kmymoney2.cpp:3747
+msgid "New payee/receiver"
+msgstr "Plătitor/Beneficiar nou"
+
+#: kmymoney2.cpp:3773
+msgid "Unable to add payee"
+msgstr "Nu s-a putut adăuga beneficiarul"
+
+#: kmymoney2.cpp:3826
+msgid "Do you really want to remove the payee <b>%1</b>?"
+msgstr "Doriţi într-adevăr să ştergeţi beneficiarul/plătitorul <b>%1</b>?"
+
+#: kmymoney2.cpp:3828
+msgid "Do you really want to remove all selected payees?"
+msgstr "Doriţi într-adevăr să ştergeţi toţi beneficiarii/plătitorii selectaţi?"
+
+#: kmymoney2.cpp:3830
+msgid "Remove Payee"
+msgstr "Şterge beneficiar/plătitor"
+
+#: kmymoney2.cpp:3870
+msgid ""
+"At least one transaction/scheduled transaction is still referenced by a "
+"payee. Currently you have all payees selected. However, at least one payee "
+"must remain so that the transaction/scheduled transaction can be reassigned."
+msgstr ""
+"Cel puţin o tranzacţie programată este referită de către un beneficiar. În "
+"acest moment toţi beneficiarii sunt marcaţi. Dar cel puţin un beneficiar "
+"trebuie să rămână astfel încât tranzacţiile programate să poate fi "
+"reasignate."
+
+#: kmymoney2.cpp:3925
+msgid "Unable to reassign payee of transaction/split"
+msgstr "Nu s-a putut reasigna beneficiarul tranzacţiei/părţii de tranzacţie"
+
+#: converter/mymoneyqifreader.cpp:534 converter/mymoneystatementreader.cpp:959
+#: kmymoney2.cpp:3926 kmymoney2.cpp:3983 views/kbudgetview.cpp:636
+#: views/kbudgetview.cpp:737 views/kbudgetview.cpp:751
+#: views/kpayeesview.cpp:519 views/kpayeesview.cpp:870
+msgid "thrown in"
+msgstr "excepţie în"
+
+#: kmymoney2.cpp:3982
+msgid "Unable to remove payee(s)"
+msgstr "Nu s-a putut şterge beneficiarul(ii)"
+
+#: kmymoney2.cpp:3990
+msgid "Enter ISO 4217 code for the new currency"
+msgstr "Introduceţi codul ISO 4217 pentru moneda nouă"
+
+#: kmymoney2.cpp:3999
+#, c-format
+msgid "Cannot create new currency. %1"
+msgstr "Nu s-a putut crea moneda nouă. %1"
+
+#: kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, c-format
+msgid "Cannot rename currency. %1"
+msgstr "Nu s-a putut redenumi moneda. %1"
+
+#: kmymoney2.cpp:4039
+msgid "Cannot delete currency %1. %2"
+msgstr "Nu s-a putut şterge moneda %1. %2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Cannot set %1 as base currency: %2"
+msgstr "Nu s-a putut seta %1 ca moneda de bază. %2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Set base currency"
+msgstr "Alege moneda de bază"
+
+#: kmymoney2.cpp:4065
+#, c-format
+msgid "Budget %1"
+msgstr "Bugetul %1"
+
+#: kmymoney2.cpp:4075
+msgid "Budget %1 (%2)"
+msgstr "Bugetul %1 (%2)"
+
+#: kmymoney2.cpp:4090 kmymoney2.cpp:4139
+msgid "Unable to add budget: %1, thrown in %2:%3"
+msgstr "Nu s-a putut adăuga bugetul: %1, excepţie în %2:%3"
+
+#: kmymoney2.cpp:4105
+msgid "Do you really want to remove the budget <b>%1</b>?"
+msgstr "Doriţi într-adevăr să ştergeţi bugetul <b>%1</b>?"
+
+#: kmymoney2.cpp:4107
+msgid "Do you really want to remove all selected budgets?"
+msgstr "Doriţi într-adevăr să ştergeţi toate bugetele selectate?"
+
+#: kmymoney2.cpp:4109
+msgid "Remove Budget"
+msgstr "Şterge bugetul"
+
+#: kmymoney2.cpp:4122
+msgid "Unable to remove budget: %1, thrown in %2:%3"
+msgstr "Nu s-a putut şterge bugetul: %1, excepţie în %2:%3"
+
+#: kmymoney2.cpp:4134 views/kreportsview.cpp:659
+#, c-format
+msgid "Copy of %1"
+msgstr "Copie a %1"
+
+#: kmymoney2.cpp:4164
+msgid "Select year"
+msgstr "Alege anul"
+
+#: kmymoney2.cpp:4164
+msgid "Budget year"
+msgstr "Anul bugetului"
+
+#: kmymoney2.cpp:4176 kmymoney2.cpp:4214 kmymoney2.cpp:4274
+msgid "Unable to modify budget: %1, thrown in %2:%3"
+msgstr "Nu s-a putut modifica bugetul:%1, excepţie în %2:%3"
+
+#: kmymoney2.cpp:4192 kmymoney2.cpp:4250
+msgid ""
+"The current budget already contains data. Continuing will replace all "
+"current values of this budget."
+msgstr ""
+"Bugetul curent conţine deja date. Continuând veţi înlocui toate valorile din "
+"acest moment al bugetului."
+
+#: kmymoney2.cpp:4222
+msgid ""
+"Please be aware that changes made in the following dialog affect all KDE "
+"applications not only KMyMoney."
+msgstr ""
+"Vă rog să aveţi în vedere că modificările efectuate în acest dialog vor "
+"afecta toate aplicaţiile KDE nu doar KMyMoney."
+
+#: kmymoney2.cpp:4292
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to delete the transactions anyway?"
+msgstr ""
+"Cel puţin o parte de tranzacţie aparţinând tranzacţiilor marcate a fost "
+"reconciliată. Doriţi totuşi să ştergeţi aceste tranzacţii?"
+
+#: kmymoney2.cpp:4295 views/kgloballedgerview.cpp:1043
+msgid "Transaction already reconciled"
+msgstr "Tranzacţia a fost deja reconciliată"
+
+#: kmymoney2.cpp:4301
+msgid "Do you really want to delete the selected transaction?"
+msgstr "Doriţi într-adevăr să ştergeţi tranzacţia marcată?"
+
+#: kmymoney2.cpp:4303
+msgid "Do you really want to delete all %1 selected transactions?"
+msgstr "Doriţi într-adevăr să ştergeţi toate cele %1 tranzacţii marcate?"
+
+#: kmymoney2.cpp:4305
+msgid "Delete transaction"
+msgstr "Şterge tranzacţia"
+
+#: kmymoney2.cpp:4306
+msgid "Deleting transactions"
+msgstr "Se şterg tranzacţiile"
+
+#: kmymoney2.cpp:4321
+msgid "Duplicating transactions"
+msgstr "Se duplică tranzacţiile"
+
+#: kmymoney2.cpp:4378
+msgid "Unable to delete transaction(s): %1, thrown in %2:%3"
+msgstr "Nu s-a putut şterge tranzacţia(iile): %1, excepţie în %2:%3"
+
+#: kmymoney2.cpp:4452 kmymoney2.cpp:4622
+msgid "Unable to modify transaction: %1, thrown in %2:%3"
+msgstr "Nu s-a putut modifica tranzacţia: %1, excepţie în %2:%3"
+
+#: kmymoney2.cpp:4514
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling and<br>- <b>Cancel</b> returns to the "
+"transaction editor.<p>You can also select an option to save the transaction "
+"automatically when e.g. selecting another transaction."
+msgstr ""
+"Doriţi într-adevăr să renunţaţi la modificarea acestei tranzacţii fără a-l "
+"salva?<p>- <b>Da</b> anulează modificarea tranzactiei<br>- <b>Nu</b> "
+"salvează tranzacţia înainte de a opri procesul de modificare şi <b>Anulează</"
+"b> vă reîntoarce în procesul de modificare a tranzacţiei. <p> Puteţi de "
+"asemenea alege opţiunea de a salva în mod automat o tranzacţie în curs de "
+"modificare când de ex. se alege o altă tranzacţie."
+
+#: kmymoney2.cpp:4514 kmymoney2.cpp:4517
+msgid "Cancel transaction edit"
+msgstr "Renunţă la modificarea tranzacţiei"
+
+#: kmymoney2.cpp:4517
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling.<p>You can also select an option to save the "
+"transaction automatically when e.g. selecting another transaction."
+msgstr ""
+"Doriţi într-adevăr să renunţaţi la modificarea acestei tranzacţii fără a-l "
+"salva?<p>- <b>Da</b> anulează modificarea tranzactiei<br>- <b>Nu</b> "
+"salvează tranzacţia înainte de a opri procesul de modificare. <p> Puteţi de "
+"asemenea alege opţiunea de a salva în mod automat o tranzacţie în curs de "
+"modificare când de ex. se alege o altă tranzacţie."
+
+#: kmymoney2.cpp:4667
+msgid "Unable to accept transaction: %1, thrown in %2:%3"
+msgstr "Nu s-a putut accepta tranzacţia: %1, excepţie în %2:%3"
+
+#: kmymoney2.cpp:4846
+msgid "Unable to unmatch the selected transactions"
+msgstr "Nu s-au putut disocia tranzacţiile selectate"
+
+#: kmymoney2.cpp:4885
+msgid "No manually entered transaction selected for matching"
+msgstr "Nu sunt selectate tranzacţii introduse manual pentru asociere"
+
+#: kmymoney2.cpp:4887
+msgid "No imported transaction selected for matching"
+msgstr "Nu sunt selectate tranzacţii importate pentru asociere"
+
+#: kmymoney2.cpp:4895
+msgid "Unable to match the selected transactions"
+msgstr "Nu s-au putut asocia tranzacţiile selectate"
+
+#: kmymoney2.cpp:5097
+msgid "Create a new transaction"
+msgstr "Creează o tranzacţie nouă"
+
+#: kmymoney2.cpp:5163
+msgid "Duplicate the current selected transactions"
+msgstr "Creează duplicate pentru tranzacţiile marcate"
+
+#: kmymoney2.cpp:5223
+msgid ""
+"_: Button text for unmatch transaction\n"
+"Unmatch"
+msgstr "Disociază"
+
+#: kmymoney2.cpp:5451 kmymoney2.cpp:5473
+msgid "Goto '%1'"
+msgstr "Du-te la '%1'"
+
+#: kmymoney2.cpp:5582
+msgid "Running consistency check..."
+msgstr "Se execută o verificare de consistenţă..."
+
+#: kmymoney2.cpp:5590
+#, c-format
+msgid "Consistency check failed: %1"
+msgstr "Verificarea consistenţei a eşuat: %1"
+
+#: kmymoney2.cpp:5594
+msgid "Consistency check result"
+msgstr "Rezultatul verificării consistenţei"
+
+#: kmymoney2.cpp:5603
+msgid "Checking for overdue scheduled transactions..."
+msgstr "Se verifică existenţa unor tranzacții programate restante..."
+
+#: kmymoney2.cpp:5740
+msgid ""
+"You must first select a KMyMoney file before you can import a statement."
+msgstr ""
+"Înainte să puteţi importa un bilanţ trebuie să alegeţi un fişier KMyMoney."
+
+#: kmymoney2.cpp:5746
+msgid "Importing a statement via Web Connect"
+msgstr "Importă un bilanţ nou prin Web Connect"
+
+#: kmymoney2.cpp:5759
+msgid ""
+"Unable to import %1 using %2 plugin. The plugin returned the following "
+"error: %3"
+msgstr ""
+"Nu s-a putut importa %1 folosind modulul %2. Modulul a întors următoarea "
+"eroare: %3"
+
+#: kmymoney2.cpp:5759 plugins/ofximport/ofximporterplugin.cpp:646
+msgid "Importing error"
+msgstr "Eroare de import"
+
+#: kmymoney2.cpp:5780
+msgid "All messages have been enabled."
+msgstr "Toate mesajele au fost activate"
+
+#: kmymoney2.cpp:5780
+msgid "All messages"
+msgstr "Toate mesajele"
+
+#: kmymoney2.cpp:5855
+msgid "Auto saving..."
+msgstr "Se salvează automat..."
+
+#: kmymoney2.cpp:5913
+msgid "Unable to setup online parameters for account ''%1'"
+msgstr "Nu s-au putut configura parametrii online pentru contul '%1'"
+
+#: kmymoney2.cpp:5928
+msgid ""
+"Do you really want to remove the mapping of account <b>%1</b> to an online "
+"account? Depending on the details of the online banking method used, this "
+"action cannot be reverted."
+msgstr ""
+"Doriţi într-adevăr să ştergeţi asocierea contului <b>%1</b> cu un cont "
+"online? În funcţie de detaliile metodei de online banking folosită efectele "
+"aceastei acţiuni nu pot fi anulate."
+
+#: kmymoney2.cpp:5928
+msgid "Remove mapping to online account"
+msgstr "Şterge asocierea cu contul online"
+
+#: kmymoney2.cpp:5939
+#, c-format
+msgid "Unable to unmap account from online account: %1"
+msgstr "Nu s-a putut realiza dezasocierea de contul online: %1"
+
+#: kmymoney2.cpp:5956
+msgid " (Brokerage)"
+msgstr " (Brokeraj)"
+
+#: kmymoney2.cpp:5957
+msgid ""
+"You try to map a brokerage account to an online account. This is usually not "
+"advisable. In general, the investment account should be mapped to the online "
+"account. Please cancel if you intended to map the investment account, "
+"continue otherwise"
+msgstr ""
+"Aţi încercat să asociaţi un cont de brokeraj cu un cont online. Acest lucru "
+"nu este recomandat. În general contul de investiţii este cel care trebuie "
+"asociat cu contul online. Vă rugăm să renunţaţi la această operaţie dacă "
+"intenţionaţi să asociaţi contul de investiţii, continuaţi în caz contrar."
+
+#: kmymoney2.cpp:5957
+msgid "Mapping brokerage account"
+msgstr "Asociază un cont de brokeraj"
+
+#: kmymoney2.cpp:5964
+msgid "Select online banking plugin"
+msgstr "Alegeţi modulul de online banking"
+
+#: kmymoney2.cpp:6005
+#, c-format
+msgid "Unable to map account to online account: %1"
+msgstr "Nu s-a putut asocia contul cu contul online: %1"
+
+#: converter/mymoneyqifreader.cpp:407 converter/mymoneytemplate.cpp:73
+#: views/kmymoneyview.cpp:590
+msgid "Error while loading file '%1'!"
+msgstr "Eroare la încărcarea fişierului '%1'!"
+
+#: converter/mymoneyqifreader.cpp:409 converter/mymoneyqifreader.cpp:965
+#: converter/mymoneytemplate.cpp:75 views/kmymoneyview.cpp:592
+msgid "File access error"
+msgstr "Eroare la accesul fişierului"
+
+#: converter/mymoneytemplate.cpp:84
+msgid "<b>%1</b> is not a template file."
+msgstr "<b>%1</b> nu este un fişier şablon."
+
+#: converter/mymoneytemplate.cpp:85 views/kmymoneyview.cpp:603
+msgid "Filetype Error"
+msgstr "Eroare de tip de fişier"
+
+#: converter/mymoneytemplate.cpp:93
+msgid "Error while reading template file <b>%1</b> in line %2, column %3"
+msgstr ""
+"Eroare la citirea fişierului şablon <b>%1</b> în linia %2, la coloana %3s"
+
+#: converter/mymoneytemplate.cpp:94
+msgid "Template Error"
+msgstr "Eroare de şablon"
+
+#: converter/mymoneytemplate.cpp:101
+msgid "File '%1' not found!"
+msgstr "Fişierul '%1' nu a fost găsit!"
+
+#: converter/mymoneytemplate.cpp:142
+msgid "Invalid tag <b>%1</b> in template file <b>%2</b>!"
+msgstr "Identificatorul <b>%1</b> este invalid în fişierul <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:214
+#, c-format
+msgid "Loading template %1"
+msgstr "Se încarcă şablonul %1s"
+
+#: converter/mymoneytemplate.cpp:241
+msgid "Invalid top-level account type <b>%1</b> in template file <b>%2</b>!"
+msgstr ""
+"Tipul de cont rădăcină <b>%1</b> este invalid în fişierul şablon <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:309
+msgid ""
+"Invalid flag type <b>%1</b> for account <b>%3</b> in template file <b>%2</b>!"
+msgstr ""
+"Tipul de stare <b>%1</b> pentru contul <b>%3</b> este invalid în fişierul "
+"şablon <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:398 converter/mymoneytemplate.cpp:401
+#: views/kmymoneyview.cpp:1151 views/kmymoneyview.cpp:1154
+msgid "Unable to write changes to '%1'"
+msgstr "Nu s-au putut salva schimbările în '%1'"
+
+#: converter/mymoneytemplate.cpp:407 views/kmymoneyview.cpp:1162
+msgid "Unable to upload to '%1'"
+msgstr "Nu s-a putut încărca la '%1'"
+
+#: converter/mymoneyqifwriter.cpp:70
+msgid ""
+"Unexpected exception '%1' thrown in %2, line %3 caught in MyMoneyQifWriter::"
+"write()"
+msgstr ""
+"Excepţie neaşteptată '%1' aruncată în %2, linia %3 prinsă în "
+"MyMoneyQifWriter::write()"
+
+#: converter/mymoneyqifwriter.cpp:80
+msgid "Unable to open file '%1' for writing"
+msgstr "Nu s-a putut deschide fişierul '%1' pentru scriere"
+
+#: converter/webpricequote.cpp:340
+#, c-format
+msgid "Symbol found: %1"
+msgstr "Simbol găsit: %1"
+
+#: converter/webpricequote.cpp:368
+msgid "Price found: %1 (%2)"
+msgstr "Preţ găsit: %1 (%2)"
+
+#: converter/webpricequote.cpp:380
+#, c-format
+msgid "Date found: %1"
+msgstr "Data găsită: %1"
+
+#: converter/webpricequote.cpp:397 converter/webpricequote.cpp:403
+#, c-format
+msgid "Unable to update price for %1"
+msgstr "Nu s-a putut deschide preţul pentru %1"
+
+#: converter/mymoneyqifreader.cpp:170
+msgid ""
+"_: Category name\n"
+"Reinvested dividend"
+msgstr "Dividend reinvestit"
+
+#: converter/mymoneyqifreader.cpp:173
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (long term)"
+msgstr "Dividend reinvestit (termen lung)"
+
+#: converter/mymoneyqifreader.cpp:176
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (short term)"
+msgstr "Dividend reinvestit (termen scurt)"
+
+#: converter/mymoneyqifreader.cpp:179
+msgid ""
+"_: Category name\n"
+"Dividend"
+msgstr "Dividend"
+
+#: converter/mymoneyqifreader.cpp:182
+msgid ""
+"_: Category name\n"
+"Interest"
+msgstr "Dobândă"
+
+#: converter/mymoneyqifreader.cpp:185
+msgid ""
+"_: Category name\n"
+"Capital Gain (short term)"
+msgstr "Câştig din capital (termen scurt)"
+
+#: converter/mymoneyqifreader.cpp:188
+msgid ""
+"_: Category name\n"
+"Capital Gain (mid term)"
+msgstr "Câştig din capital (termen mediu)"
+
+#: converter/mymoneyqifreader.cpp:191
+msgid ""
+"_: Category name\n"
+"Capital Gain (long term)"
+msgstr "Câştig din capital (termen lung)"
+
+#: converter/mymoneyqifreader.cpp:194
+msgid ""
+"_: Category name\n"
+"Returned capital"
+msgstr "Capital revenit"
+
+#: converter/mymoneyqifreader.cpp:197
+msgid ""
+"_: Category name\n"
+"Miscellaneous income"
+msgstr "Alte venituri"
+
+#: converter/mymoneyqifreader.cpp:200
+msgid ""
+"_: Category name\n"
+"Miscellaneous expense"
+msgstr "Alte cheltuieli"
+
+#: converter/mymoneyqifreader.cpp:203
+msgid ""
+"_: Category name\n"
+"Investment fees"
+msgstr "Comisioane pe investiţie"
+
+#: converter/mymoneyqifreader.cpp:205
+#, c-format
+msgid "Unknown QIF type %1"
+msgstr "Tipul QIF %1 este necunoscut"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Date format selection"
+msgstr "Selectarea formatului de dată"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Pick the date format that suits your input file"
+msgstr "Alegeţi formatul de dată care corespunde fişierului dumneavoastră"
+
+#: converter/mymoneyqifreader.cpp:366
+msgid "Importing QIF ..."
+msgstr "Se importă QIF..."
+
+#: converter/mymoneyqifreader.cpp:442
+msgid "Reading QIF ..."
+msgstr "Se citeşte QIF..."
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Adding transactions"
+msgstr "Se adaugă tranzacţiile"
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Now adding the transactions to your ledger..."
+msgstr "Se adaugă tranzacţiile în registrul dumneavoastră..."
+
+#: converter/mymoneyqifreader.cpp:533
+msgid "Unable to add transactions"
+msgstr "Nu s-au putut adăuga tranzacţii"
+
+#: converter/mymoneyqifreader.cpp:567
+msgid ""
+"_: QIF tag for liability account\n"
+"Oth L"
+msgstr "Oth L"
+
+#: converter/mymoneyqifreader.cpp:572
+msgid ""
+"_: QIF tag for category\n"
+"Cat"
+msgstr "Cat"
+
+#: converter/mymoneyqifreader.cpp:575
+msgid ""
+"_: QIF tag for security\n"
+"Security"
+msgstr "Security"
+
+#: converter/mymoneyqifreader.cpp:578
+msgid ""
+"_: QIF tag for investment account\n"
+"Invst"
+msgstr "Invst"
+
+#: converter/mymoneyqifreader.cpp:581
+msgid ""
+"_: QIF tag for prices\n"
+"Prices"
+msgstr "Prices"
+
+#: converter/mymoneyqifreader.cpp:599
+msgid ""
+"_: QIF tag for a class\n"
+"Class"
+msgstr "Class"
+
+#: converter/mymoneyqifreader.cpp:753 converter/mymoneyqifreader.cpp:2203
+msgid ""
+"The %1 account currently has an opening balance of %2. This QIF file reports "
+"an opening balance of %3. Would you like to overwrite the current balance "
+"with the one from the QIF file?"
+msgstr ""
+"Contul %1 în acest moment are un sold de deschidere de %1. Acest fişier QIF "
+"raportează un sold de deschidere de %3. Doriţi să suprascrieţi soldul curent "
+"cu cel din fişierul QIF?"
+
+#: converter/mymoneyqifreader.cpp:754 converter/mymoneyqifreader.cpp:2204
+msgid "Overwrite opening balance"
+msgstr "Suprascrie soldul de deschidere"
+
+#: converter/mymoneyqifreader.cpp:879 converter/mymoneyqifreader.cpp:890
+#: converter/mymoneyqifreader.cpp:914
+msgid "Autogenerated by QIF importer"
+msgstr "Autogenerat de procesul de import QIF"
+
+#: converter/mymoneyqifreader.cpp:907
+msgid "QIF imported, no account name supplied"
+msgstr "QIF importat, nu a fost dat un nume de cont"
+
+#: converter/mymoneyqifreader.cpp:940
+msgid ""
+"KMyMoney has imported a second opening balance transaction into account <b>%"
+"1</b> which differs from the one found already on file. Please correct this "
+"manually once the import is done."
+msgstr ""
+"KMyMoney a importat un o al doilea tranzacţie de sold de deschidere în "
+"contul <b>%1</b> care diferă de cel găsit deja în fişier. Corectaţi această "
+"problemă manual odată ce importul se încheie."
+
+#: converter/mymoneyqifreader.cpp:940
+msgid "Opening balance problem"
+msgstr "Problemă cu soldul iniţial"
+
+#: converter/mymoneyqifreader.cpp:963
+msgid "Error while creating opening balance transaction"
+msgstr "Erroare la creerea tranzacţiei de sold iniţial"
+
+#: converter/mymoneyqifreader.cpp:1029 converter/mymoneyqifreader.cpp:1276
+msgid ""
+"The date entry \"%1\" read from the file cannot be interpreted through the "
+"current date profile setting of \"%2\".\n"
+"\n"
+"Pressing \"Continue\" will assign todays date to the transaction. Pressing "
+"\"Cancel\" will abort the import operation. You can then restart the import "
+"and select a different QIF profile or create a new one."
+msgstr ""
+"Data \"%1\" citită din fişier nu poate fi interpretată cu ajutorul "
+"profilului de dată curentă \"%2\".\n"
+"\n"
+"Alegând \"Continuă\" se va asigna tranzacţiei data de astăzi. Alegând "
+"\"Renunţă\" se va anula operaţia de import. Puteţi să reporniţi importul şi "
+"să alegeţi un alt profil QIF sau să creaţi unul nou."
+
+#: converter/mymoneyqifreader.cpp:1035 converter/mymoneyqifreader.cpp:1282
+msgid "Invalid date format"
+msgstr "Format de dată invalid"
+
+#: converter/mymoneyqifreader.cpp:1398
+#: converter/mymoneystatementreader.cpp:589
+#: converter/mymoneystatementreader.cpp:592
+msgid "Statement Importer"
+msgstr "Importator de extras"
+
+#: converter/mymoneyqifreader.cpp:1413
+#: converter/mymoneystatementreader.cpp:644
+msgid ""
+"This investment account does not contain the \"%1\" security. Transactions "
+"involving this security will be ignored."
+msgstr ""
+"Acest cont de investiţii nu conţine titlul de valoare \"%1\". Tranzacţiile "
+"care implică acest titlu de valoare vor fi ignorate."
+
+#: converter/mymoneyqifreader.cpp:1415
+#: converter/mymoneystatementreader.cpp:612
+#: converter/mymoneystatementreader.cpp:644
+msgid "Security not found"
+msgstr "Nu s-a găsit titlul de valoare"
+
+#: converter/mymoneyqifreader.cpp:2021
+msgid "%1 (Investment)"
+msgstr "%1 (Investiţie)"
+
+#: converter/mymoneyqifreader.cpp:2022
+msgid "Autogenerated by QIF importer from type Mutual account entry"
+msgstr "Autogenerat de procesul de import QIF din tipul de intrare Cont mutual"
+
+#: converter/mymoneyqifreader.cpp:2085 converter/mymoneyqifreader.cpp:2228
+msgid "account"
+msgstr "cont"
+
+#: converter/mymoneyqifreader.cpp:2086
+msgid "al"
+msgstr "al"
+
+#: converter/mymoneyqifreader.cpp:2093
+msgid "category"
+msgstr "categorie"
+
+#: converter/mymoneyqifreader.cpp:2094
+msgid "ei"
+msgstr "ei"
+
+#: converter/mymoneyqifreader.cpp:2095
+msgid "Category selection"
+msgstr "Selectare categorie"
+
+#: converter/mymoneyqifreader.cpp:2110
+msgid "Account \"%1\" disappeared: "
+msgstr "Contul \"%1\" a dispărut: "
+
+#: converter/mymoneyqifreader.cpp:2131
+msgid "The %1 '%2' does not exist. Do you want to create it?"
+msgstr "%1 '%2' nu există. Doriţi să fie creat?"
+
+#: converter/mymoneyqifreader.cpp:2140
+#, c-format
+msgid "Select %1"
+msgstr "Alege %1"
+
+#: converter/mymoneyqifreader.cpp:2142
+msgid ""
+"The %1 <b>%2</b> currently exists. Do you want to import transactions to "
+"this account?"
+msgstr ""
+"%1 <b>%2</b> deja există. Doriţi să importaţi tranzacţii în acest cont?"
+
+#: converter/mymoneyqifreader.cpp:2147
+msgid ""
+"The %1 <b>%2</b> currently does not exist. You can create a new %3 by "
+"pressing the <b>Create</b> button or select another %4 manually from the "
+"selection box."
+msgstr ""
+"%1 <b>%2</b> nu există. Puteţi crea un nou %3 folosind butonul <b>Creează</"
+"b> sau alegeţi un alt %4 manual dintre variante."
+
+#: converter/mymoneyqifreader.cpp:2154
+#, c-format
+msgid "Import transactions to %1"
+msgstr "Importă tranzacţia în %1"
+
+#: converter/mymoneyqifreader.cpp:2155
+msgid ""
+"No %1 information has been found in the selected QIF file. Please select an "
+"account using the selection box in the dialog or create a new %2 by pressing "
+"the <b>Create</b> button."
+msgstr ""
+"Nu a fost găsită informaţii legate de %1 în fişierul QIF ales. Vă rog să "
+"alegeţi un cont folosind opţiunile din dialog sau creaţi un nou %2 folosind "
+"butonul <b> Creează</b>."
+
+#: converter/mymoneyqifreader.cpp:2229
+msgid "You must select or create an account."
+msgstr "Trebuie să alegeţi sau să creaţi un cont."
+
+#: converter/mymoneyqifreader.cpp:2231
+msgid "You must select or create a category."
+msgstr "Trebuie să selectaţi sau să creaţi o categorie."
+
+#: converter/mymoneystatementreader.cpp:100
+msgid "_Fees"
+msgstr "Taxe"
+
+#: converter/mymoneystatementreader.cpp:106
+msgid "_Dividend"
+msgstr "Dividend"
+
+#: converter/mymoneystatementreader.cpp:289
+#, c-format
+msgid "Importing statement for account %1"
+msgstr "importă extrasul pentru contul %1"
+
+#: converter/mymoneystatementreader.cpp:291
+msgid "Importing statement without transactions"
+msgstr "Se importă extrasul fără tranzacţii"
+
+#: converter/mymoneystatementreader.cpp:385
+msgid " Statement balance is not contained in statement."
+msgstr " Soldul extrasului nu se găseşte în extras:"
+
+#: converter/mymoneystatementreader.cpp:387
+msgid " Statement balance on %1 is reported to be %2"
+msgstr " Extrasul de cont cu soldul pe %1 este reportat să fie %2"
+
+#: converter/mymoneystatementreader.cpp:389
+msgid " Transactions"
+msgstr " Tranzacţii"
+
+#: converter/mymoneystatementreader.cpp:390
+msgid " %1 processed"
+msgstr " %1 procesat"
+
+#: converter/mymoneystatementreader.cpp:391
+msgid " %1 added"
+msgstr " %1 adăugate"
+
+#: converter/mymoneystatementreader.cpp:392
+msgid " %1 matched"
+msgstr " %1 asociate"
+
+#: converter/mymoneystatementreader.cpp:393
+msgid " %1 duplicates"
+msgstr " %1 duplicate"
+
+#: converter/mymoneystatementreader.cpp:394
+msgid " Payees"
+msgstr " Beneficiari/Plătitori"
+
+#: converter/mymoneystatementreader.cpp:395
+msgid " %1 created"
+msgstr " %1 create"
+
+#: converter/mymoneystatementreader.cpp:483
+#, c-format
+msgid "Error creating security record: %1"
+msgstr "Eroare la crearea înregistrării titlului de valoare: %1"
+
+#: converter/mymoneystatementreader.cpp:612
+msgid ""
+"This imported statement contains investment transactions with no security. "
+"These transactions will be ignored."
+msgstr ""
+"Acest extras importat conţine tranzacţii de investiţii nesecurizate. Aceste "
+"tranzacţii vor fi ignorate."
+
+#: converter/mymoneystatementreader.cpp:803
+msgid "(Fees) "
+msgstr "(Taxe) "
+
+#: converter/mymoneystatementreader.cpp:880
+msgid ""
+"Do you want to add \"%1\" as payee/receiver?\n"
+"\n"
+msgstr ""
+"Doriţi să adaugaţi \"%1\" ca plătitor/beneficiar?\n"
+"\n"
+
+#: converter/mymoneystatementreader.cpp:881
+msgid ""
+"Selecting \"Yes\" will create the payee, \"No\" will skip creation of a "
+"payee record and remove the payee information from this transaction. "
+"Selecting \"Cancel\" aborts the import operation.\n"
+"\n"
+"If you select \"No\" here and mark the \"Don't ask again\" checkbox, the "
+"payee information for all following transactions referencing \"%1\" will be "
+"removed."
+msgstr ""
+"Alegând \"Da\" se va crea un nou beneficiar, \"Nu va omite crearea "
+"beneficiarului şi va şterge informaţiile legate de beneficiar din "
+"tranzacţie. Alegând \"Renunţă\" se anulează operaţia de import.\n"
+"\n"
+"Dacă alegeţi \"Nu\" aici şi bifaţi căsuţa \"Nu mă mai întreba în viitor\" "
+"atunci toate informaţiile despre beneficiar ale tuturor tranzacţiilor "
+"următoare ce se referă la \"%1\" vor fi şterse."
+
+#: converter/mymoneystatementreader.cpp:917
+msgid "Save Category"
+msgstr "Salvează categoria"
+
+#: converter/mymoneystatementreader.cpp:918
+msgid "No Category"
+msgstr "Fără categorie"
+
+#: converter/mymoneystatementreader.cpp:919 dialogs/rc.cpp:4
+msgid "Abort"
+msgstr "Renunţă"
+
+#: converter/mymoneystatementreader.cpp:926
+msgid "Please select a default category for payee '%1':"
+msgstr "Alegeți categoria implicită pentru beneficiarul/plătitorul '%1':"
+
+#: converter/mymoneystatementreader.cpp:958
+msgid "Unable to add payee/receiver"
+msgstr "Nu s-a putut adăuga plătitorul/beneficiarul"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid ""
+"KMyMoney has found a scheduled transaction named <b>%1</b> which matches an "
+"imported transaction. Do you want KMyMoney to enter this schedule now so "
+"that the transaction can be matched? "
+msgstr ""
+"KMyMoney a găsit o tranzacţie programată numită <b>%1</b> care e asociată cu "
+"o tranzacţie importată. Vrei ca programul KMyMoney să introducă această "
+"programare acum, în aşa fel încât tranzacţia să poată fi asociată?"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid "Schedule found"
+msgstr "A fost găsit un program"
+
+#: converter/mymoneystatementreader.cpp:1219
+msgid "Problem adding or matching imported transaction with id '%1': %2"
+msgstr ""
+"Problemă la adăugarea sau asocierea tranzacţiilor importate cu id '%1': %2"
+
+#: converter/mymoneystatementreader.cpp:1268
+msgid ""
+"<b>You have downloaded a statement for the following account:</b><br><br>"
+msgstr "<b>Aţi descărcat un extras pentru următorul cont:</b><br><br>"
+
+#: converter/mymoneystatementreader.cpp:1269
+#, c-format
+msgid " - Account Name: %1"
+msgstr " - Numele contului: %1"
+
+#: converter/mymoneystatementreader.cpp:1270
+#, c-format
+msgid " - Account Type: %1"
+msgstr " - Tipul contului: %1"
+
+#: converter/mymoneystatementreader.cpp:1271
+#, c-format
+msgid " - Account Number: %1"
+msgstr " - Numărul contului: %1"
+
+#: converter/mymoneystatementreader.cpp:1279
+msgid "Do you want to import transactions to this account?"
+msgstr "Doriţi să importaţi tranzacţii în acest cont?"
+
+#: converter/mymoneystatementreader.cpp:1281
+msgid ""
+"KMyMoney cannot determine which of your accounts to use. You can create a "
+"new account by pressing the <b>Create</b> button or select another one "
+"manually from the selection box below."
+msgstr ""
+"KMyMoney nu poate determina care dintre conturile dumneavoastră să-l "
+"folosească. Puteţi crea un cont nou folosind butonul <b> Creează</b> sau "
+"alegeţi unul dintre opţiunile de mai jos."
+
+#: converter/mymoneystatementreader.cpp:1287
+msgid ""
+"No account information has been found in the selected statement file. Please "
+"select an account using the selection box in the dialog or create a new "
+"account by pressing the <b>Create</b> button."
+msgstr ""
+"Nu au fost găsite informaţii despre cont în fişierul bilanţ ales. Vă rog să "
+"alegeţi un cont folosind opţiunile din dialog sau creaţi un cont nou "
+"folosind butonul <b> Creează</b>."
+
+#: converter/mymoneystatementreader.cpp:1294
+msgid "Import transactions"
+msgstr "Importă tranzacţii"
+
+#: converter/mymoneystatementreader.cpp:1330
+msgid ""
+"You must select an account, create a new one, or press the <b>Abort</b> "
+"button."
+msgstr ""
+"Trebuie să selectaţi un cont, să creaţi unul nou sau să apăsaţi butonul "
+"<b>Renunţă</b>."
+
+#: converter/mymoneygncreader.cpp:119
+msgid "%1: Sorry. This importer cannot handle version %2 of element %3"
+msgstr ""
+"%1: Îmi pare rău. Acest importator nu poate opera cu versiunea %2 a "
+"elementului %3"
+
+#: converter/mymoneygncreader.cpp:193
+#, c-format
+msgid "Account%1"
+msgstr "Contul%1"
+
+#: converter/mymoneygncreader.cpp:197
+#, c-format
+msgid "Stock%1"
+msgstr "Acţiunea%1"
+
+#: converter/mymoneygncreader.cpp:206
+#, c-format
+msgid "Payee%1"
+msgstr "Beneficiarul%1"
+
+#: converter/mymoneygncreader.cpp:212
+#, c-format
+msgid "Schedule%1"
+msgstr "Programarea%1"
+
+#: converter/mymoneygncreader.cpp:262
+msgid "This version of the importer cannot handle multi-book files."
+msgstr ""
+"Această versiune a importatorului nu poate lucra cu fişiere de registrul "
+"multiplu."
+
+#: converter/mymoneygncreader.cpp:912
+msgid "Invalid header for file. Should be 'gnc-v2'"
+msgstr "Antet de fişier invalid. Ar trebui să fie 'gnc-v2'"
+
+#: converter/mymoneygncreader.cpp:937 converter/mymoneygncreader.cpp:972
+#: converter/mymoneygncreader.cpp:1062
+#, c-format
+msgid ""
+"Import failed:\n"
+"\n"
+"%1"
+msgstr ""
+"Import eşuat:\n"
+"\n"
+"%1"
+
+#: converter/mymoneygncreader.cpp:1065
+msgid "Import complete"
+msgstr "Import complet"
+
+#: converter/mymoneygncreader.cpp:1120
+msgid "Disguise your wealth"
+msgstr "Ascundeţi-vă averea"
+
+#: converter/mymoneygncreader.cpp:1121
+msgid ""
+"Each monetary value on your file will be multiplied by a random number "
+"between 0.01 and 1.99\n"
+"with a different value used for each transaction. In addition, to further "
+"disguise the true\n"
+"values, you may enter a number between %1 and %2 which will be applied to "
+"all values.\n"
+"These numbers will not be stored in the file."
+msgstr ""
+"Fiecare valoare monetară a fişierului dumneavoastră va fi multiplicată "
+"printr-un număr aleator cuprins între 0,01 şi 1,99\n"
+" cu o valoare diferită folosită pentru fiecare tranzacţie. În plus, pentru "
+"ascunderi viitoare ale adevăratelor valori,\n"
+"puteţi introduce un număr cuprins între %1 şi %2, care va fi aplicat tuturor "
+"valorilor.\n"
+" Aceste numere nu vor fi memorate în fişier."
+
+#: converter/mymoneygncreader.cpp:1135
+msgid "Loading commodities..."
+msgstr "Încarcă mărfuri..."
+
+#: converter/mymoneygncreader.cpp:1160
+msgid "Loading prices..."
+msgstr "Încarcă preţuri..."
+
+#: converter/mymoneygncreader.cpp:1164 converter/mymoneygncreader.cpp:1171
+msgid "Imported History"
+msgstr "Istoria importurilor"
+
+#: converter/mymoneygncreader.cpp:1251
+#, c-format
+msgid "Current importer does not recognize GnuCash account type %1"
+msgstr "Importatorul curent nu recunoaşte tipul de contu GnuCash %1"
+
+#: converter/mymoneygncreader.cpp:1471
+msgid "Imported Transaction"
+msgstr "Tranzacţie importată"
+
+#: converter/mymoneygncreader.cpp:1519
+msgid "Loading templates..."
+msgstr "Încarcă şabloane..."
+
+#: converter/mymoneygncreader.cpp:1531
+msgid "Unknown payee"
+msgstr "Beneficiar necunoscut"
+
+#: converter/mymoneygncreader.cpp:1723
+msgid "Loading schedules..."
+msgstr "Încarcă programări..."
+
+#: converter/mymoneygncreader.cpp:1735
+#, c-format
+msgid "Can't find template transaction for schedule %1"
+msgstr "Nu pot găsi şablonul de tranzacţie pentru programarea %1"
+
+#: converter/mymoneygncreader.cpp:1910
+msgid "Reorganizing accounts..."
+msgstr "Se reorganizează conturile..."
+
+#: converter/mymoneygncreader.cpp:1972
+msgid ""
+"Your main currency seems to be %1 (%2); do you want to set this as your base "
+"currency?"
+msgstr ""
+"Principala dumneavoastră valută pare să fie %1 (%2); doriţi ca aceasta să "
+"devină valuta dumneavoastră de bază?"
+
+#: converter/mymoneygncreader.cpp:1993
+msgid "More"
+msgstr "Mai mult"
+
+#: converter/mymoneygncreader.cpp:1997
+msgid "Save Report"
+msgstr "Salvează raportul"
+
+#: converter/mymoneygncreader.cpp:2017
+msgid ""
+"Problems were encountered in converting schedule '%1'.\n"
+"Do you want to review or edit it now?"
+msgstr ""
+"Au fost întâlnite probleme la convertirea programării '%1'.\n"
+"Doriţi să o vedeţi sau să o modificaţi acum?"
+
+#: converter/mymoneygncreader.cpp:2039
+msgid ""
+"Found:\n"
+"\n"
+msgstr ""
+"Găsit:\n"
+"\n"
+
+#: converter/mymoneygncreader.cpp:2040
+msgid " commodities (equities)\n"
+msgstr " mărfuri (capitaluri)\n"
+
+#: converter/mymoneygncreader.cpp:2041
+msgid " prices\n"
+msgstr "preţuri\n"
+
+#: converter/mymoneygncreader.cpp:2042
+msgid " accounts\n"
+msgstr " conturi\n"
+
+#: converter/mymoneygncreader.cpp:2043
+msgid " transactions\n"
+msgstr " tranzacţii\n"
+
+#: converter/mymoneygncreader.cpp:2044
+msgid " schedules\n"
+msgstr "programări\n"
+
+#: converter/mymoneygncreader.cpp:2047
+msgid "No inconsistencies were detected"
+msgstr "Nu au fost detectate inconsistenţe"
+
+#: converter/mymoneygncreader.cpp:2049
+msgid " inconsistencies were detected and corrected\n"
+msgstr "inconsistenţe au fost detectate şi corectate\n"
+
+#: converter/mymoneygncreader.cpp:2054
+msgid " orphan accounts were created\n"
+msgstr " conturi orfane au fost create\n"
+
+#: converter/mymoneygncreader.cpp:2059
+msgid " possible schedule problems were noted\n"
+msgstr "au fost semnalate posibile probleme ale programării\n"
+
+#: converter/mymoneygncreader.cpp:2064
+msgid "Small Business Features (Customers, Invoices, etc.)"
+msgstr "Caracteristici pentru afacerile mici (clienţi, facturi etc.)"
+
+#: converter/mymoneygncreader.cpp:2065 views/kmymoneyview.cpp:241
+#: views/kmymoneyview.cpp:243
+msgid "Budgets"
+msgstr "Bugete"
+
+#: converter/mymoneygncreader.cpp:2066
+msgid "Lots"
+msgstr "Cantitate"
+
+#: converter/mymoneygncreader.cpp:2068
+msgid "The following features found in your file are not currently supported:"
+msgstr ""
+"Următoarele caracteristici găsite în fişierul dumneavoastră nu sunt "
+"suportate în mod curent:"
+
+#: converter/mymoneygncreader.cpp:2071
+msgid ""
+"\n"
+"\n"
+"Press More for further information"
+msgstr ""
+"\n"
+"\n"
+"Apăsaţi Mai mult pentru informaţii suplimentare"
+
+#: converter/mymoneygncreader.cpp:2139
+msgid "Orphan created from unknown gnucash account"
+msgstr "S-a creat un orfan dintr-un cont gnucash necunoscut"
+
+#: converter/mymoneygncreader.cpp:2170
+msgid "Internal error - invalid interval char in incrDate"
+msgstr "Eroare internă - caracter interval invalid în incrDate"
+
+#: converter/mymoneygncreader.cpp:2233
+msgid "Enter the investment account name "
+msgstr "Introduceţi numele contului de investiţii"
+
+#: converter/mymoneygncreader.cpp:2234
+msgid "My Investments"
+msgstr "Investiţiile mele"
+
+#: converter/mymoneygncreader.cpp:2269
+#, c-format
+msgid "Select parent investment account or enter new name. Stock %1"
+msgstr "Alegeţi contul de investiţii părinte sau daţi un nou nume. Acţiunea %1"
+
+#: converter/mymoneygncreader.cpp:2292 converter/mymoneygncreader.cpp:2307
+msgid "%1 is not an Investment Account. Do you wish to make it one?"
+msgstr ""
+"%1 nu este un cont de investiţii. Doriţi să-l transformaţi într-un astfel de "
+"cont?"
+
+#: converter/mymoneygncreader.cpp:2408
+msgid ""
+"An Investment account must be a child of an Asset account\n"
+"Account %1 will be stored under the main Asset account"
+msgstr ""
+"Un cont de investiţii trebuie să aibă ca părinte un cont de active\n"
+"Contul %1 va fi stocat sub contul principal de active"
+
+#: converter/mymoneygncreader.cpp:2410
+msgid ""
+"An Income account must be a child of an Income account\n"
+"Account %1 will be stored under the main Income account"
+msgstr ""
+"Un cont de venituri trebuie să aibă ca părinte un cont de venituri\n"
+"Contul %1 va fi stocat sub contul principal de venituri"
+
+#: converter/mymoneygncreader.cpp:2412
+msgid ""
+"An Expense account must be a child of an Expense account\n"
+"Account %1 will be stored under the main Expense account"
+msgstr ""
+"Un cont de cheltuieli trebuie să aibă ca părinte un cont de cheltuieli\n"
+"Contul %1 va fi stocat sub contul principal de cheltuieli"
+
+#: converter/mymoneygncreader.cpp:2414
+msgid ""
+"One or more transactions contain a reference to an otherwise unknown "
+"account\n"
+"An asset account with the name %1 has been created to hold the data"
+msgstr ""
+"Una sau mai multe tranzacţii conţin o referinţă la un cont necunoscut\n"
+"Un cont de active cu numele %1 a fost creat pentru a găzdui datele"
+
+#: converter/mymoneygncreader.cpp:2416
+msgid "Schedule %1 has interval of %2 which is not currently available"
+msgstr ""
+"Programul %1 are un interval de %2 care nu este disponibil în acest moment"
+
+#: converter/mymoneygncreader.cpp:2417
+msgid "Schedule %1 dropped at user request"
+msgstr "S-a renunţat la programul %1 la cererea utilizatorului"
+
+#: converter/mymoneygncreader.cpp:2418
+msgid "Schedule %1 contains unknown action (key = %2, type = %3)"
+msgstr "Programul %1 conţine o acţiune necunoscută (cheia = %2, tipul = %3)"
+
+#: converter/mymoneygncreader.cpp:2419
+msgid "Schedule %1 contains multiple actions; only one has been imported"
+msgstr "Programul %1 conţine acţiuni multiple; doar unul a fost importat"
+
+#: converter/mymoneygncreader.cpp:2420
+msgid "Schedule %1 contains no valid splits"
+msgstr "Programul %1 nu conţine părţi de tranzacţii valide"
+
+#: converter/mymoneygncreader.cpp:2421
+msgid ""
+"Schedule %1 appears to contain a formula. GnuCash formulae are not "
+"convertible"
+msgstr ""
+"Programul %1 pare să conţină o formulă. Formulele GnuCash nu sunt "
+"convertibile."
+
+#: converter/mymoneygncreader.cpp:2422
+msgid ""
+"Schedule %1 contains unknown interval specification; please check for "
+"correct operation"
+msgstr ""
+"Programul %1 conţine o specificaţie de interval necunoscută; vă rog să "
+"verificaţi pentru funcţionare corectă"
+
+#: converter/mymoneygncreader.cpp:2423
+msgid ""
+"Schedule %1 contains a deferred interval specification; please check for "
+"correct operation"
+msgstr ""
+"Programul %1 o specificaţie de interval amânat; vă rog să verificaţi "
+"funcţionarea corectă"
+
+#: converter/mymoneygncreader.cpp:2424
+msgid ""
+"Account or Category %1, transaction date %2; split contains invalid value; "
+"please check"
+msgstr ""
+"Contul sau Categoria %1, data de tranzacţie %2; partea de tranzacţie conţine "
+"o valoare invalidă; vă rog să verificaţi"
+
+#: kmymoneyutils.cpp:146
+msgid "&New Schedule..."
+msgstr "Programare &nouă..."
+
+#: kmymoneyutils.cpp:148
+msgid "Create a new schedule."
+msgstr "Creează o programare nouă."
+
+#: kmymoneyutils.cpp:149
+msgid "Use this to create a new schedule."
+msgstr "Folosiţi pentru a crea o nouă plată programată."
+
+#: kmymoneyutils.cpp:158
+msgid "&Filter"
+msgstr "&Filtrează"
+
+#: kmymoneyutils.cpp:160
+msgid "Filter out accounts"
+msgstr "Filtrează conturi"
+
+#: kmymoneyutils.cpp:161
+msgid "Use this to filter out accounts"
+msgstr "Folosiţi pentru a filtra conturi"
+
+#: kmymoneyutils.cpp:192
+msgid "Preferred accounts"
+msgstr "Conturi preferate"
+
+#: kmymoneyutils.cpp:193
+msgid "Payment accounts"
+msgstr "Conturi de plată"
+
+#: kmymoneyutils.cpp:194
+msgid "Favorite reports"
+msgstr "Rapoarte favorite"
+
+#: kmymoneyutils.cpp:195
+msgid "Forecast (schedule)"
+msgstr "Estimare (programare)"
+
+#: kmymoneyutils.cpp:196
+msgid "Networth forecast"
+msgstr "Estimare a valorii nete"
+
+#: kmymoneyutils.cpp:197
+msgid "Forecast (history)"
+msgstr "Estimare (istoric)"
+
+#: kmymoneyutils.cpp:198
+msgid "Assets and Liabilities"
+msgstr "Active şi pasive"
+
+#: kmymoneyutils.cpp:199 reports/pivottable.cpp:2416 views/khomeview.cpp:1393
+#: widgets/rc.cpp:70
+msgid "Budget"
+msgstr "Buget"
+
+#: kmymoneyutils.cpp:200
+msgid "CashFlow"
+msgstr "Fluxul de numerar"
+
+#: dialogs/kenterscheduledlg.cpp:153 kmymoneyutils.cpp:366
+msgid "Unable to load schedule details"
+msgstr "Nu s-au putut încărca detaliile plăţii programate"
+
+#: kmymoneyutils.cpp:390 widgets/register.cpp:473
+msgid ""
+"_: Reconcile state 'Not reconciled'\n"
+"Not reconciled"
+msgstr "Nereconciliate"
+
+#: kmymoneyutils.cpp:393 widgets/register.cpp:476
+msgid ""
+"_: Reconcile state 'Cleared'\n"
+"Cleared"
+msgstr "Verificate"
+
+#: kmymoneyutils.cpp:396 widgets/register.cpp:479
+msgid ""
+"_: Reconcile state 'Reconciled'\n"
+"Reconciled"
+msgstr "Reconciliate"
+
+#: kmymoneyutils.cpp:399 widgets/register.cpp:482
+msgid ""
+"_: Reconcile state 'Frozen'\n"
+"Frozen"
+msgstr "Îngheţate"
+
+#: kmymoneyutils.cpp:410
+msgid ""
+"_: Reconcile flag C\n"
+"C"
+msgstr "V"
+
+#: kmymoneyutils.cpp:413
+msgid ""
+"_: Reconcile flag R\n"
+"R"
+msgstr "R"
+
+#: kmymoneyutils.cpp:416
+msgid ""
+"_: Reconcile flag F\n"
+"F"
+msgstr "F"
+
+#: kmymoneyutils.cpp:419
+msgid ""
+"_: Flag for unknown reconciliation state\n"
+"?"
+msgstr "?"
+
+#: _tips.cpp:3
+msgid ""
+"<p>...that you can change the sort order of ledger entries by\n"
+"right-clicking the header of the ledger view?\n"
+msgstr ""
+"<p>...puteţi schimba ordinea de sortare a intrărilor din registru, dacă\n"
+"faceţi clic dreapta în antetul vizualizării registrului?\n"
+
+#: _tips.cpp:9
+msgid ""
+"<p>...that you can easily move to the other side of a transfer transaction\n"
+"by opening the context menu with the right mouse button and selecting one of "
+"the\n"
+"'Goto' functions?\n"
+msgstr ""
+"<p>...puteţi cu uşurinţă să vă mutaţi în cealaltă parte a unei tranzacţii de "
+"transfer\n"
+", dacă deschideţi meniul contextual cu butonul drept al mausului şi "
+"selectaţi\n"
+" funcţia 'Du-te la...'?\n"
+
+#: _tips.cpp:16
+msgid ""
+"<p>...that you can start editing a transaction by double-clicking on the\n"
+"transaction in the register?\n"
+msgstr ""
+"<p>...puteţi începe să editaţi o tranzacţie făcând dublu clic pe \n"
+" tranzacţie în registru?\n"
+
+#: _tips.cpp:22
+msgid ""
+"<p>...that you can show more details of the selected transaction in the\n"
+"register by selecting the 'ledger lens' feature in the settings dialog?\n"
+msgstr ""
+"<p>...puteţi vedea mai multe detalii ale tranzacţiei selectate în registru\n"
+" selectând facilitatea 'lupă pentru registru' în caseta de dialog pentru "
+"setări?\n"
+
+#: _tips.cpp:28
+msgid ""
+"<p>...that transactions with no category assigned or split\n"
+"transactions with unassigned values are marked with an exclamation mark \n"
+"on a yellow triangle in the register?\n"
+msgstr ""
+"<p>...tranzacţiile cărora nu li s-au atribuit categorii sau tranzacţiile\n"
+"necompuse cu valori neatribuite sunt marcate în registru cu un semn \n"
+"de exclamare pe un triunghi galben?\n"
+
+#: _tips.cpp:35
+msgid ""
+"<p>...that you can show all details of the transactions in the register\n"
+"by typing &lt;Ctrl-T&gt; or selecting the 'Settings/Show Transaction "
+"Detail'\n"
+"menu entry? You can turn this feature off the same way.\n"
+msgstr ""
+"<p>...puteţi vedea toate detaliile tranzacţiilor în registru tastând\n"
+"&lt;Ctrl-T&gt; sau selectând din meniu 'Setări/Afişează detaliile "
+"tranzacţiei'?\n"
+"Puteţi anula această facilitate în aceeaşi manieră.\n"
+
+#: _tips.cpp:42
+msgid ""
+"<p>...that you can switch between a listing of all accounts or\n"
+"an icon view of all asset and liability accounts with the tabs\n"
+"in the accounts view?\n"
+msgstr ""
+"<p>...puteţi schimba între fila cu o listă a tuturor conturilor şi\n"
+"cea cu o vizualizare cu iconiţe a tuturor conturilor de active şi pasive\n"
+" din fereastra de vizualizare a conturilor?\n"
+
+#: _tips.cpp:49
+msgid "<p>...that the KMyMoney development team wishes you a nice day?\n"
+msgstr ""
+"<p>...echipa de dezvoltare a programului KMyMoney vă urează o zi minunată?\n"
+
+#: _tips.cpp:54
+msgid ""
+"<p>...you can use your own external filter program to convert any\n"
+"import format to QIF on the fly? See the QIF profile editor for\n"
+"more details.\n"
+msgstr ""
+"<p>...puteţi folosi programul dumneavoastră extern de filtrare\n"
+" pentru a converti din zbor orice format de import în QIF? Pentru mai multe\n"
+"detalii, a se vedea editorul de profiluri QIF.\n"
+
+#: _tips.cpp:61
+msgid ""
+"<p>...that you can create a scheduled transaction from an existing\n"
+"one by selecting the context menu on a transaction in the ledger\n"
+"or the \"More...\"-menu in the transaction form?\n"
+msgstr ""
+"<p>...puteţi crea o tranzacţie programată din una existentă,\n"
+"selectând meniul contextual al tranzacţiei în registru\n"
+"sau meniul \"Mai mult...\" în formularul tranzacţiei?\n"
+
+#: _tips.cpp:68
+msgid ""
+"<p>...that you can switch to the payee of a transaction\n"
+"by selecting the context menu on a transaction in the ledger\n"
+"or in the transaction menu?\n"
+msgstr ""
+"<p>...puteţi ajunge la beneficiarul/plătitorul tranzacţiei\n"
+"selectând meniul contextual al tranzacţiei în registru\n"
+"sau în formularul tranzacţiei?\n"
+
+#: _tips.cpp:75
+msgid ""
+"<p>...that you can modify the colors and fonts used for the ledgers\n"
+"via <i>Configure/Register/...</i>?\n"
+msgstr ""
+"<p>...puteţi modifica culorile şi fonturile folosite în registre\n"
+"via <i>Configurare/Registru/...</i>?\n"
+
+#: _tips.cpp:81
+msgid ""
+"<p>...that you can hide transactions prior to a specific date?\n"
+"The date can be modified via <i>Configure/Register/Filter</i>.\n"
+msgstr ""
+"<p>...puteţi ascunde tranzacţiile până la o dată anterioară specificată?\n"
+"Data poate fi modificată via <i>Configurare/Registru/Filtru</i>.\n"
+
+#: _tips.cpp:87
+msgid ""
+"<p>...that you can customize the \"Home-Page\"\n"
+"via <i>Configure/Home</i>?\n"
+msgstr ""
+"<p>...puteţi personaliza \"Prima pagină\"\n"
+"via <i>Configurare/Acasă</i>?\n"
+
+#: _tips.cpp:93
+msgid ""
+"<p>...that you can enter new transactions even while reconciling\n"
+"an account? You can also make the transaction form visible.\n"
+msgstr ""
+"<p>...puteţi introduce tranzacţii noi chiar în timpul reconcilierii\n"
+"unui cont? Puteţi, de asemenea, face vizibil formularul tranzacţiei.\n"
+
+#: _tips.cpp:99
+msgid ""
+"<p>...that you can actively support the KMyMoney development team in\n"
+"cases that heavily depend on your data? You can save your data in an\n"
+"anonymized way for this support.<p>\n"
+"Just open your data file and immediately\n"
+"select <b>File/Save as...</b>. In the <b>Save As...</b> dialog\n"
+"select the filter <b>Anonymous Files</b> and make sure your file gets\n"
+"the extensions <b>.anon.xml</b>. <p>\n"
+"To verify, how the data looks like you are about to send away, you can open\n"
+"this file in KMyMoney and see how the developers see your data.\n"
+msgstr ""
+"<p>...puteţi în mod activ ajuta echipa de dezvoltare a KMyMoney\n"
+"cu datele dumneavoastră? Puteţi salva datele într-o manieră anonimă\n"
+"pentru acest ajutor.</p>\n"
+"Doar deschideţi fişierul dumneavoastră de date şi selectaţi\n"
+"<b>Fişier/Salvează ca...</b>. În dialogul <b>Salvează ca...</b>, \n"
+"selectaţi filtrul <b>Fişiere anonime</b> şi fiţi sigur că fişierul\n"
+"dumneavoastră primeşte extensia <b>.anon.xml</b>.<p>\n"
+"Pentru a verifica modul în care arată datele pe care tocmai sunteţi \n"
+"pe cale să le trimiteţi, puteţi deschide acest fişier în KMyMoney şi \n"
+"să vedeţi cum vor vedea dezvoltatorii datele dumneavoastră.\n"
+
+#: _tips.cpp:112
+msgid ""
+"<p>... that you can import your bank statements even without a network \n"
+"connection? Just select the file (OFX or QIF) from the File->Import menu.</"
+"p>\n"
+"<p>Provided by Jose Jorge</p>\n"
+msgstr ""
+"<p>...puteţi importa extrasele de cont goale chiar fără o conexiune \n"
+"la reţea? Selectaţi doar fişierul (OFX sau QIF) din meniul Fişier->Importă.</"
+"p>\n"
+"<p>Oferit de Jose Jorge</p>\n"
+
+#: reports/listtable.cpp:159 reports/listtable.cpp:163
+#: reports/pivottable.cpp:1564
+msgid ""
+"_: Report date range\n"
+"%1 through %2"
+msgstr "din %1 până în %2"
+
+#: reports/listtable.cpp:171 reports/pivottable.cpp:1571
+#, c-format
+msgid "All currencies converted to %1"
+msgstr "Toate monedele au fost convertite la %1"
+
+#: reports/listtable.cpp:172 reports/pivottable.cpp:1328
+msgid "All currencies converted to %1\n"
+msgstr "Toate monedele au fost convertite la %1\n"
+
+#: reports/listtable.cpp:176 reports/pivottable.cpp:1573
+msgid "All values shown in %1 unless otherwise noted"
+msgstr ""
+"Toate valorile sunt afişate în %1 excepţie cazurile în care se specifică "
+"altceva"
+
+#: reports/listtable.cpp:177 reports/pivottable.cpp:1330
+msgid "All values shown in %1 unless otherwise noted\n"
+msgstr ""
+"Toate valorile sunt afişate în %1 excepţie cazurile în care se specifică "
+"altceva\n"
+
+#: dialogs/kequitypriceupdatedlg.cpp:73 dialogs/kfindtransactiondlg.cpp:188
+#: dialogs/rc.cpp:53 dialogs/rc.cpp:63 dialogs/rc.cpp:208 dialogs/rc.cpp:805
+#: dialogs/settings/rc.cpp:111 dialogs/transactioneditor.cpp:844
+#: reports/listtable.cpp:196 views/khomeview.cpp:412 views/khomeview.cpp:485
+#: views/khomeview.cpp:519 views/rc.cpp:61 widgets/kmymoneypriceview.cpp:128
+#: widgets/rc.cpp:36 widgets/register.cpp:565 widgets/transaction.cpp:1027
+#: widgets/transaction.cpp:1484
+msgid "Date"
+msgstr "Data"
+
+#: reports/listtable.cpp:198
+msgid "Num"
+msgstr "Num"
+
+#: dialogs/kfindtransactiondlg.cpp:204 dialogs/kmymoneysplittable.cpp:78
+#: dialogs/kmymoneysplittable.cpp:831 dialogs/rc.cpp:217
+#: dialogs/transactioneditor.cpp:831 dialogs/transactioneditor.cpp:1374
+#: dialogs/transactioneditor.cpp:1382 dialogs/transactioneditor.cpp:1396
+#: dialogs/transactioneditor.cpp:1449 dialogs/transactioneditor.cpp:1456
+#: dialogs/transactioneditor.cpp:1504 reports/listtable.cpp:200
+#: views/kcategoriesview.cpp:76 views/rc.cpp:62 widgets/rc.cpp:115
+#: widgets/register.cpp:62 widgets/transaction.cpp:848
+#: widgets/transaction.cpp:906
+msgid "Category"
+msgstr "Categoria"
+
+#: dialogs/kmymoneysplittable.cpp:79 dialogs/kmymoneysplittable.cpp:837
+#: reports/listtable.cpp:202 widgets/rc.cpp:101 widgets/transaction.cpp:1042
+#: widgets/transaction.cpp:1628
+msgid "Memo"
+msgstr "Detalii"
+
+#: reports/listtable.cpp:203
+msgid "Top Category"
+msgstr "Categoria rădăcină"
+
+#: reports/listtable.cpp:204
+msgid "Category Type"
+msgstr "Tip de categorie"
+
+#: dialogs/rc.cpp:229 dialogs/settings/rc.cpp:152 reports/listtable.cpp:207
+#: widgets/kmymoneycombo.cpp:346 widgets/rc.cpp:107
+msgid "Reconciled"
+msgstr "Reconciliate"
+
+#: reports/listtable.cpp:208 widgets/rc.cpp:117
+msgid "Action"
+msgstr "Acţiune"
+
+#: dialogs/investactivities.cpp:199 dialogs/investactivities.cpp:287
+#: dialogs/investactivities.cpp:424 dialogs/investactivities.cpp:504
+#: dialogs/investactivities.cpp:544 dialogs/investtransactioneditor.cpp:241
+#: reports/listtable.cpp:209 widgets/rc.cpp:103 widgets/transaction.cpp:1513
+msgid "Shares"
+msgstr "Acţiuni"
+
+#: dialogs/investtransactioneditor.cpp:248
+#: dialogs/investtransactioneditor.cpp:1067
+#: dialogs/investtransactioneditor.cpp:1068
+#: dialogs/investtransactioneditor.cpp:1072
+#: dialogs/kequitypriceupdatedlg.cpp:72 dialogs/rc.cpp:109 dialogs/rc.cpp:164
+#: dialogs/rc.cpp:251 dialogs/rc.cpp:756 dialogs/rc.cpp:827
+#: dialogs/settings/rc.cpp:117 reports/listtable.cpp:210
+#: reports/listtable.cpp:211 reports/pivottable.cpp:2441
+#: views/kinvestmentview.cpp:80 widgets/kmymoneypriceview.cpp:129
+#: widgets/rc.cpp:43 widgets/rc.cpp:105 widgets/register.cpp:573
+msgid "Price"
+msgstr "Preţ"
+
+#: reports/listtable.cpp:212
+msgid "Net Value"
+msgstr "Valoare netă"
+
+#: reports/listtable.cpp:213
+msgid "Buys"
+msgstr "Achiziţii"
+
+#: reports/listtable.cpp:214
+msgid "Sells"
+msgstr "Vânzări"
+
+#: reports/listtable.cpp:215
+msgid "Dividends Reinvested"
+msgstr "Dividende reinvestite"
+
+#: reports/listtable.cpp:216
+msgid "Dividends Paid Out"
+msgstr "Dividende plătite"
+
+#: reports/listtable.cpp:217
+msgid "Starting Balance"
+msgstr "Sold iniţial"
+
+#: reports/listtable.cpp:218
+msgid "Ending Balance"
+msgstr "Sold final"
+
+#: reports/listtable.cpp:219
+msgid "Annualized Return"
+msgstr "Întoarcere anuală"
+
+#: reports/listtable.cpp:220
+msgid "Return On Investment"
+msgstr "Întoarcere pe investiţii"
+
+#: dialogs/rc.cpp:106 dialogs/rc.cpp:161 dialogs/rc.cpp:248 dialogs/rc.cpp:505
+#: dialogs/rc.cpp:570 dialogs/rc.cpp:667 dialogs/rc.cpp:753
+#: reports/listtable.cpp:223 widgets/register.cpp:570
+msgid "Payment"
+msgstr "Plată"
+
+#: dialogs/rc.cpp:111 dialogs/rc.cpp:166 dialogs/rc.cpp:253 dialogs/rc.cpp:709
+#: dialogs/rc.cpp:758 reports/listtable.cpp:224 widgets/rc.cpp:119
+#: widgets/register.cpp:575
+msgid "Balance"
+msgstr "Sold"
+
+#: reports/listtable.cpp:227 views/kscheduledview.cpp:74
+msgid "Next Due Date"
+msgstr "Următoarea dată scadentă"
+
+#: reports/listtable.cpp:229 views/kscheduledview.cpp:76
+msgid "Payment Method"
+msgstr "Metoda de plată"
+
+#: dialogs/rc.cpp:803 reports/listtable.cpp:231 widgets/rc.cpp:2
+msgid "Description"
+msgstr "Descriere"
+
+#: reports/listtable.cpp:232
+msgid "Opening Date"
+msgstr "Data de deschidere"
+
+#: reports/listtable.cpp:234
+msgid "Balance Early Warning"
+msgstr "Avertisment pentru soldul iniţial"
+
+#: reports/listtable.cpp:235
+msgid "Balance Max Limit"
+msgstr "Limita maximă a soldului"
+
+#: reports/listtable.cpp:236
+msgid "Credit Early Warning"
+msgstr "Avertisment pentru creditul iniţial"
+
+#: reports/listtable.cpp:237
+msgid "Credit Max Limit"
+msgstr "Limita maximă a creditului"
+
+#: dialogs/rc.cpp:376 reports/listtable.cpp:238
+msgid "Tax"
+msgstr "Impozit"
+
+#: reports/listtable.cpp:239
+msgid "Preferred"
+msgstr "Preferat"
+
+#: reports/listtable.cpp:240
+msgid "Loan Amount"
+msgstr "Suma împrumutată"
+
+#: dialogs/rc.cpp:511 reports/listtable.cpp:241
+msgid "Interest Rate"
+msgstr "Rata dobânzii"
+
+#: reports/listtable.cpp:242
+msgid "Next Interest Change"
+msgstr "Variaţia netă a dobânzii"
+
+#: reports/listtable.cpp:243
+msgid "Periodic Payment"
+msgstr "Plată periodică"
+
+#: reports/listtable.cpp:244
+msgid "Final Payment"
+msgstr "Plată finală"
+
+#: reports/listtable.cpp:245 views/khomeview.cpp:766 views/khomeview.cpp:1265
+#: views/khomeview.cpp:1273
+msgid "Current Balance"
+msgstr "Soldul curent"
+
+#: dialogs/investactivities.cpp:201 dialogs/investactivities.cpp:289
+#: dialogs/investactivities.cpp:368 dialogs/investactivities.cpp:426
+#: dialogs/rc.cpp:327 reports/listtable.cpp:360 reports/listtable.cpp:364
+#: reports/listtable.cpp:556 reports/listtable.cpp:558
+#: reports/pivottable.cpp:1343 reports/pivottable.cpp:1445
+#: reports/pivottable.cpp:1505 reports/pivottable.cpp:1598
+#: reports/pivottable.cpp:1768 reports/pivottable.cpp:1845
+#: reports/pivottable.cpp:2165 reports/pivottable.cpp:2167
+#: reports/pivottable.cpp:2187 reports/pivottable.cpp:2189
+#: reports/querytabletest.cpp:134 reports/querytabletest.cpp:135
+#: reports/querytabletest.cpp:136 reports/querytabletest.cpp:137
+#: reports/querytabletest.cpp:162 reports/querytabletest.cpp:163
+#: reports/querytabletest.cpp:164 reports/querytabletest.cpp:197
+#: reports/querytabletest.cpp:198 reports/querytabletest.cpp:224
+#: reports/querytabletest.cpp:250 reports/querytabletest.cpp:251
+#: reports/querytabletest.cpp:252 reports/querytabletest.cpp:275
+#: reports/querytabletest.cpp:276 reports/querytabletest.cpp:277
+#: reports/querytabletest.cpp:366 reports/querytabletest.cpp:422
+#: reports/querytabletest.cpp:423 views/kforecastview.cpp:568 views/rc.cpp:18
+#: widgets/kmymoneyaccounttreeforecast.cpp:139 widgets/transaction.cpp:1643
+msgid "Total"
+msgstr "Total"
+
+#: reports/listtable.cpp:444
+msgid "Initial Market Value"
+msgstr "Valoare iniţială pe piaţă"
+
+#: reports/listtable.cpp:445
+msgid "Ending Market Value"
+msgstr "Valoarea finală pe piaţă"
+
+#: reports/listtable.cpp:448 reports/querytabletest.cpp:651
+msgid "Opening Balance"
+msgstr "Soldul la deschidere"
+
+#: reports/listtable.cpp:449 reports/querytabletest.cpp:652
+#: reports/querytabletest.cpp:653
+msgid "Closing Balance"
+msgstr "Soldul la închidere"
+
+#: reports/listtable.cpp:490 reports/listtable.cpp:491
+msgid "Calculated"
+msgstr "Calculat"
+
+#: reports/listtable.cpp:572 reports/listtable.cpp:574
+#: reports/pivottable.cpp:1530 reports/pivottable.cpp:1886
+#: reports/querytabletest.cpp:138 reports/querytabletest.cpp:165
+#: reports/querytabletest.cpp:199 reports/querytabletest.cpp:225
+#: reports/querytabletest.cpp:253 reports/querytabletest.cpp:278
+#: reports/querytabletest.cpp:367 reports/querytabletest.cpp:402
+#: reports/querytabletest.cpp:424 reports/querytabletest.cpp:548
+#: reports/querytabletest.cpp:551 reports/querytabletest.cpp:586
+msgid "Grand Total"
+msgstr "Total mare"
+
+#: dialogs/rc.cpp:233 reports/pivottable.cpp:339 views/kscheduledview.cpp:174
+#: views/kscheduledview.cpp:433 views/kscheduledview.cpp:449
+#: widgets/kmymoneyscheduledcalendar.cpp:48
+msgid "Transfers"
+msgstr "Transferuri"
+
+#: reports/pivottable.cpp:1951
+msgid "Legend"
+msgstr "Legenda"
+
+#: reports/pivottable.cpp:2411 views/khomeview.cpp:1406
+#: views/khomeview.cpp:1443
+msgid "Actual"
+msgstr "Actual"
+
+#: reports/pivottable.cpp:2421 views/khomeview.cpp:1409
+#: views/khomeview.cpp:1446
+msgid "Difference"
+msgstr "Diferenţa"
+
+#: reports/pivottable.cpp:2431
+msgid "Moving Average"
+msgstr "Media glisantă"
+
+#: reports/pivottable.cpp:2436
+msgid "Moving Average Price"
+msgstr "Prețul mediu glisant"
+
+#: reports/objectinfotable.cpp:214 reports/querytable.cpp:693
+#: reports/querytable.cpp:736 reports/querytable.cpp:1356
+#: reports/querytable.cpp:1375 views/kpayeesview.cpp:742
+#, c-format
+msgid "Transfer from %1"
+msgstr "Transfer din %1"
+
+#: reports/objectinfotable.cpp:215 reports/querytable.cpp:694
+#: reports/querytable.cpp:735 reports/querytable.cpp:1355
+#: reports/querytable.cpp:1374 views/kpayeesview.cpp:740
+#, c-format
+msgid "Transfer to %1"
+msgstr "Transfer în %1"
+
+#: reports/querytabletest.cpp:471 views/kreportsview.cpp:1144
+msgid "Investment Transactions"
+msgstr "Tranzacţii de investiţie"
+
+#: reports/querytabletest.cpp:472 reports/querytabletest.cpp:564
+msgid "Test Report"
+msgstr "Raport de test"
+
+#: reports/querytabletest.cpp:547 reports/querytabletest.cpp:550
+msgid "Total Stock 1"
+msgstr "Total acţiune 1"
+
+#: reports/querytabletest.cpp:563 views/kreportsview.cpp:1174
+msgid "Investment Performance by Account"
+msgstr "Performanţă investiţiilor după cont"
+
+#: reports/querytable.cpp:431 reports/querytable.cpp:1200
+#, c-format
+msgid "Month of %1"
+msgstr "Luna din %1"
+
+#: reports/querytable.cpp:432 reports/querytable.cpp:1201
+#, c-format
+msgid "Week of %1"
+msgstr "Săptămăna din %1"
+
+#: reports/querytable.cpp:576 reports/querytable.cpp:739
+#: reports/querytable.cpp:858 reports/querytable.cpp:1325
+#: reports/querytable.cpp:1481
+msgid "No Institution"
+msgstr "Nu există instituţie"
+
+#: reports/querytable.cpp:580 reports/querytable.cpp:1329
+msgid "[Empty Payee]"
+msgstr "[Beneficiar lipsă]"
+
+#: reports/querytable.cpp:615 reports/querytable.cpp:1361
+msgid "[Split Transaction]"
+msgstr "[Parte de tranzacţie]"
+
+#: reports/querytable.cpp:616 reports/querytable.cpp:617
+msgid "Split"
+msgstr "Parte de tranzacţie"
+
+#: main.cpp:51
+msgid ""
+"\n"
+"KMyMoney, the Personal Finance Manager for KDE.\n"
+"\n"
+"Please consider contributing to this project with code and/or suggestions."
+msgstr ""
+"\n"
+"KMyMoney, programul de gestionare a finanţelor personale pentru KDE.\n"
+"\n"
+"Vă rog să luaţi în considerare o contribuţie la acest proiect cu cod sursă "
+"şi/sau sugestii."
+
+#: main.cpp:55
+msgid "language to be used"
+msgstr "limba folosită"
+
+#: main.cpp:56
+msgid "don't open last used file"
+msgstr "nu deschide ultimul fişier folosit"
+
+#: main.cpp:57
+msgid "enable performance timers"
+msgstr "activează măsurătorile de performanţă"
+
+#: main.cpp:61
+msgid "turn on program traces"
+msgstr "activează mesajele de programare a aplicaţiei"
+
+#: main.cpp:62
+msgid "dump the names of all defined KAction objects to stdout and quit"
+msgstr ""
+"trimite numele tuturor obiectelor KAction la ieşirea standard şi termină "
+"execuţia"
+
+#: main.cpp:66
+msgid "file to open"
+msgstr "fişier de deschis"
+
+#: main.cpp:92
+msgid "Memory leakage detection"
+msgstr "Detecţia pierderii de memorie"
+
+#: main.cpp:96
+msgid "Compiled with the following settings:\n"
+msgstr "Compilat cu următoarele opţiuni:\n"
+
+#: dialogs/kmymoneysplittable.cpp:650 dialogs/ksplittransactiondlg.cpp:277
+#: main.cpp:98
+msgid "KMyMoney"
+msgstr "KMyMoney"
+
+#: main.cpp:104
+msgid "Initial idea, much initial source code, Project admin"
+msgstr "Idee iniţială, cod sursă iniţial mai mult, administrare proiect"
+
+#: main.cpp:105
+msgid "Core engine, Release Manager, Project admin"
+msgstr "Motor de bază, manager de realizări, administrator de proiect"
+
+#: main.cpp:106
+msgid "Reporting logic, OFX Import"
+msgstr "Raport logic, Import QFX"
+
+#: main.cpp:107
+msgid "Database backend, maintainer stable branch"
+msgstr "Baza de date din fundal, menţinător versiune stabilă"
+
+#: main.cpp:108
+msgid "Forecast, Reports"
+msgstr "Estimare, Rapoarte"
+
+#: main.cpp:109
+msgid "Project Admin"
+msgstr "Administrator de proiect"
+
+#: main.cpp:110
+msgid "Developer"
+msgstr "Dezvoltator"
+
+#: main.cpp:111
+msgid "Database backend"
+msgstr "Baza de date din fundal"
+
+#: main.cpp:113
+msgid "Initial investment support"
+msgstr "Suport de investiţii iniţial"
+
+#: main.cpp:114
+msgid "Developer & Artist"
+msgstr "Dezvoltator & artist"
+
+#: main.cpp:115
+msgid "Icons & splash screen"
+msgstr "Iconiţe & ecran de pornire"
+
+#: main.cpp:116 main.cpp:117
+msgid "Patches"
+msgstr "Adaosuri"
+
+#: main.cpp:136
+msgid ""
+"The monetary decimal symbol is not correctly set in the KDE Control Center's "
+"Country/Region & Language settings. Please set it to a reasonable value and "
+"start KMyMoney again."
+msgstr ""
+"Simbolul zecimal monetar nu e stabilit corect în Centrul de Control KDE, "
+"setările pentru ţară/regiune & limbă. Vă rog setaţi-l la o valoare "
+"rezonabilă şi reporniţi din nou KMyMoney."
+
+#: main.cpp:136
+msgid "Invalid settings"
+msgstr "Setări invalide"
+
+#: main.cpp:228
+msgid "Another instance of KMyMoney is already running. Do you want to quit?"
+msgstr "O altă instanţă a programului KMyMoney rulează deja. Doriţi să ieşiţi?"
+
+#: main.cpp:289
+msgid "Uncaught error. Please report the details to the developers"
+msgstr "Eroare necunoscută. Vă rog să raportaţi detaliile dezvoltatorilor"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Cristian Oneţ, Nicolae Turcan"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "onet.cristian@gmail.com, nturcan@gmail.com"
+
+#: dialogs/kcsvprogressdlg.cpp:62 dialogs/kimportdlg.cpp:66 rc.cpp:1
+msgid "&Import"
+msgstr "&Importă"
+
+#: rc.cpp:2
+msgid "E&xport"
+msgstr "&Exportă"
+
+#: rc.cpp:3
+msgid "&Institution"
+msgstr "&Instituţie"
+
+#: rc.cpp:4
+msgid "&Account"
+msgstr "&Cont"
+
+#: rc.cpp:5
+msgid "&Category"
+msgstr "&Categorie"
+
+#: rc.cpp:6
+msgid "&Transaction"
+msgstr "&Tranzacţie"
+
+#: rc.cpp:7 rc.cpp:20
+msgid "Mark transaction as..."
+msgstr "Marchează tranzacţia ca..."
+
+#: rc.cpp:8 rc.cpp:21
+msgid "Mark transaction"
+msgstr "Marchează tranzacţia"
+
+#: rc.cpp:9
+msgid "T&ools"
+msgstr "&Unelte"
+
+#: rc.cpp:10
+msgid "Account options"
+msgstr "Opţiuni cont"
+
+#: rc.cpp:11
+msgid "Category options"
+msgstr "Opţiuni categorie"
+
+#: rc.cpp:12
+msgid "Institution options"
+msgstr "Opţiuni instituţie"
+
+#: rc.cpp:13
+msgid "Payee options"
+msgstr "Opţiuni beneficiar/plătitor"
+
+#: rc.cpp:14
+msgid "Budget options"
+msgstr "Opţiuni buget"
+
+#: rc.cpp:15
+msgid "Investment options"
+msgstr "Opţiuni investiţie"
+
+#: rc.cpp:16
+msgid "Scheduled transactions options"
+msgstr "Opțiuni tranzacţii programate"
+
+#: rc.cpp:17
+msgid "Transaction options"
+msgstr "Opţiuni tranzacţie"
+
+#: rc.cpp:18
+msgid "Move transaction to..."
+msgstr "Mută tranzacţia în..."
+
+#: rc.cpp:19
+msgid "Select account"
+msgstr "Alegeţi un cont"
+
+#: rc.cpp:22
+msgid "Currency options"
+msgstr "Opţiuni valută"
+
+#: rc.cpp:24
+msgid "Always show a No. field in transaction form"
+msgstr "Afişează întotdeauna un câmp Nr. în formularul tranzacţiei"
+
+#: rc.cpp:25
+msgid "Auto fill with previous transaction data"
+msgstr "Umple automat cu datele tranzacţiei precedente"
+
+#: rc.cpp:26
+msgid "Treat two transactions as identical, if amount differs less than"
+msgstr ""
+"Consideră doua tranzacţii ca fiind identice în cazul în care suma diferă cu "
+"mai puţin de"
+
+#: dialogs/settings/rc.cpp:144 rc.cpp:27
+msgid "Auto increment check number"
+msgstr "Incrementează automat numărul de cec."
+
+#: rc.cpp:28
+msgid "Autosave file periodically"
+msgstr "Salvează fişierul automat din când în când."
+
+#: rc.cpp:29
+msgid "Autosave interval in minutes"
+msgstr ""
+"Intervalul de timp în minute la care să se realizeze salvarea periodică "
+"automată"
+
+#: rc.cpp:30
+msgid "Check schedules upon startup"
+msgstr "Verifică plăţile programate la pornire"
+
+#: dialogs/settings/rc.cpp:171 rc.cpp:31
+msgid "Enter transactions this number of days in advance"
+msgstr "Tranzacţiile se introduc cu acest număr de zile în avans"
+
+#: dialogs/settings/rc.cpp:172 rc.cpp:32
+msgid "Number of days to preview schedules in ledger"
+msgstr "Numărul de zile pentru a previzualiza programările în registru"
+
+#: dialogs/settings/rc.cpp:143 rc.cpp:33
+msgid "Insert transaction type into No. field for new transactions"
+msgstr "Inserează tipul tranzacţiei în câmpul Nr. pentru tranzacţii noi."
+
+#: dialogs/settings/rc.cpp:145 rc.cpp:34
+msgid "Keep changes when selecting a different transaction/split"
+msgstr ""
+"Păstrează modificările când se alege o altă tranzacţie sau o parte de "
+"tranzacţie diferită."
+
+#: rc.cpp:35
+msgid "Using the Enter key moves between the fields"
+msgstr "Deplasarea între câmpuri se realizează cu ajutorul tastei Enter"
+
+#: dialogs/settings/rc.cpp:130 rc.cpp:36
+msgid "Use the ledger lens"
+msgstr "Foloseşte lupa pentru registru"
+
+#: rc.cpp:37
+msgid "Price Precision"
+msgstr "Precizia sumelor"
+
+#: dialogs/rc.cpp:65 rc.cpp:38
+msgid "Update price history"
+msgstr "Actualizează istoria preţurilor"
+
+#: dialogs/settings/rc.cpp:132 rc.cpp:39
+msgid "Show transaction form"
+msgstr "Afişează formularul pentru o tranzacţie"
+
+#: rc.cpp:40
+msgid "Start with last selected view or homepage"
+msgstr "Porneşte cu ultima vizualizare selectată sau cu prima pagină"
+
+#: rc.cpp:41
+msgid "Use GPG to encrypt data file"
+msgstr "Foloseşte GPG pentru a codifica fişierele de date"
+
+#: rc.cpp:42
+msgid "Also encrypt against recover key"
+msgstr "Codifică, de asemenea, cu cheia de recuperare"
+
+#: rc.cpp:43
+msgid "GPG User ID (deprecated)"
+msgstr "Identificatorul utilizatorului GPG (depăşit)"
+
+#: rc.cpp:44
+msgid "GPG User ID"
+msgstr "Identificatorul utilizatorului GPG"
+
+#: rc.cpp:45
+msgid "Run in expert (accountant) mode"
+msgstr "Rulează în modul expert (contabil)"
+
+#: rc.cpp:46
+msgid "Show splash screen during startup"
+msgstr "Afişează ecranul de pornire în timpul pornirii"
+
+#: rc.cpp:47
+msgid "Synchronize account in ledger and investment view"
+msgstr ""
+"Sincronizează conturile din vizualizarea în mod registru şi cea în mod "
+"investiţie"
+
+#: rc.cpp:48
+msgid "Icon size for view selection"
+msgstr "Alegerea mărimii iconiţelor pentru vizualizare"
+
+#: rc.cpp:49
+msgid "list of hidden views"
+msgstr "lista modurilor de vizualizare ascunse"
+
+#: rc.cpp:50
+msgid "Firsttime switch to start new user wizard"
+msgstr ""
+"Comutatorul de primă pornire pentru a declanşa procesul de configurare a "
+"unui nou utilizator"
+
+#: rc.cpp:51
+msgid "Show title bar on each view"
+msgstr "Arată bara de titlu în fiecare ecran"
+
+#: rc.cpp:52
+msgid "Start string matches for e.g. payees at start of string"
+msgstr ""
+"Începe asocierea șirurilor de la început de exemplu pentru beneficiari/"
+"plătitori de la începutul numelui."
+
+#: rc.cpp:53
+msgid "Order of items on homepage"
+msgstr "Ordinea elementelor pe prima pagină"
+
+#: rc.cpp:54
+msgid "Percentage of default font size used for home view HTML page"
+msgstr ""
+"Procentul din mărimea standard de fonturi folosit pentru pagina de start"
+
+#: rc.cpp:55
+msgid "Remember (manually adjusted) font size in home view on program end."
+msgstr ""
+"Ţine minte mărimea fontului (ajustată manual) în pagina de start la ieşirea "
+"programului."
+
+#: rc.cpp:56
+msgid "Show account limit information on the Homepage"
+msgstr "Arată informaţii despre limitele contului în pagina de start"
+
+#: rc.cpp:58
+msgid "Hide closed accounts"
+msgstr "Ascunde conturile închise"
+
+#: rc.cpp:59
+msgid "Hide finished schedules"
+msgstr "Ascunde plăţile programate terminate"
+
+#: rc.cpp:61
+msgid "Show all register entries in full detail"
+msgstr "Afişează toate intrările în registru cu toate detaliile"
+
+#: dialogs/settings/rc.cpp:129 rc.cpp:62
+msgid "Show a grid in the register"
+msgstr "Afişează o grilă în registru"
+
+#: rc.cpp:63
+msgid "Show fancy group markers"
+msgstr "Afişează delimitatori de grup"
+
+#: rc.cpp:64
+msgid "Show fancy markers for previous and current fiscal year"
+msgstr "Afişează delimitatori între anul fiscal precedent şi cel curent"
+
+#: rc.cpp:65
+msgid "Starting month of the fiscal year"
+msgstr "Prima lună a anului fiscal"
+
+#: rc.cpp:66
+msgid "Starting day of the fiscal year"
+msgstr "Prima zi a anului fiscal"
+
+#: rc.cpp:67
+msgid "Start date"
+msgstr "Data de început"
+
+#: dialogs/settings/rc.cpp:9 rc.cpp:68
+msgid "Use system colors"
+msgstr "Foloseşte culorile sistem"
+
+#: rc.cpp:69
+msgid "List color"
+msgstr "Culoarea listei"
+
+#: rc.cpp:70
+msgid "List background color"
+msgstr "Culoarea fundalului listei"
+
+#: rc.cpp:71
+msgid "List grid color"
+msgstr "Culoarea grilei listei"
+
+#: rc.cpp:72
+msgid "Background color for imported transactions"
+msgstr "Culoarea de fundal pentru tranzacţii importate"
+
+#: rc.cpp:73
+msgid "Background color for matched transactions"
+msgstr "Culoarea de fundal pentru tranzacţii asociate"
+
+#: rc.cpp:74
+msgid "List color for erronous transactions"
+msgstr "Culoarea listei pentru tranzacţii eronate"
+
+#: rc.cpp:75
+msgid "List color for missing conversion rate"
+msgstr "Culoare listei pentru rata de conversie lipsă"
+
+#: rc.cpp:76
+msgid "List color for negative values"
+msgstr "Culoare listei pentru valori negative"
+
+#: rc.cpp:77
+msgid "Background color for group marker"
+msgstr "Culoarea de fundal pentru delimitatorii de grup"
+
+#: rc.cpp:78
+msgid "Background color for required fields"
+msgstr "Culoarea de fundal pentru câmpuri obligatorii"
+
+#: rc.cpp:79
+msgid "Use system font"
+msgstr "Foloseşte fontul sistem"
+
+#: dialogs/settings/rc.cpp:21 rc.cpp:80
+msgid "Cell font"
+msgstr "Fontul celulei"
+
+#: dialogs/settings/rc.cpp:22 rc.cpp:81
+msgid "Header font"
+msgstr "Fontul antetului"
+
+#: rc.cpp:82 rc.cpp:83
+msgid "Sort order of register in normal view"
+msgstr "Ordinea de sortare a registrului în modul de vizualizare normal"
+
+#: rc.cpp:84
+msgid "Sort order of register in search dialog"
+msgstr "Ordinea de sortare a registrului în modul de căutare"
+
+#: rc.cpp:85
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation"
+msgstr ""
+"Starea implicită a reconcilierii pentru tranzacţiile introduse în timpul "
+"reconcilierii"
+
+#: rc.cpp:86
+msgid "Number of days (plus/minus) to search for matching transactions"
+msgstr ""
+"Numărul de zile (plus/minus) pentru căutarea tranzacţiilor care se asociază"
+
+#: rc.cpp:87
+msgid "During import, ask for a new payee's default category"
+msgstr ""
+"În cursul operației de import întreabă care este categoria împlicită a "
+"beneficiarului/plătitorului"
+
+#: rc.cpp:88
+msgid "Method to calculate forecast"
+msgstr "Metoda de calculare a estimării"
+
+#: rc.cpp:89
+msgid "Days to forecast"
+msgstr "Durata estimării în zile"
+
+#: rc.cpp:90
+msgid "Days of normal account cycle"
+msgstr "Numărul de zile ale unui ciclu normal de cont"
+
+#: rc.cpp:91
+msgid "Number of historic cycles to use in forecast"
+msgstr "Numărul de cicluri istorice folosite în estimare"
+
+#: rc.cpp:92
+msgid "Day of month to start forecast"
+msgstr "Ziua din lună care începe estimarea"
+
+#: rc.cpp:93
+msgid "Method to calculate history-based forecast"
+msgstr "Metoda de calcul a estimării bazate pe istoric"
+
+#: rc.cpp:94
+msgid "Skip opening date when fetching transactions"
+msgstr "Ignoră data deschiderii la preluarea tranzacţiilor"
+
+#: rc.cpp:95
+msgid "Include future transaction when using Schedule Forecast"
+msgstr "Include tranzacţii viitoare când se foloseşte estimarea programării"
+
+#: rc.cpp:96
+msgid "Include scheduled transactions when using Schedule Forecast"
+msgstr ""
+"Include tranzacţiile programate când se foloseşte estimarea programării"
+
+#: rc.cpp:97
+msgid "additional names for cash account"
+msgstr "nume adiţionale pentru contul de numerar"
+
+#: rc.cpp:98
+msgid "additional names for checking account"
+msgstr "nume adiţionale pentru contul curent"
+
+#: rc.cpp:99
+msgid "additional names for credit card account"
+msgstr "nume adiţionale pentru contul de card de credit"
+
+#: rc.cpp:100
+msgid "additional names for asset account"
+msgstr "nume adiţionale pentru contul de active"
+
+#: rc.cpp:101
+msgid "additional names for opening balance payee"
+msgstr "nume adiţionale pentru beneficiarul/plătitorul soldului de deschidere"
+
+#: rc.cpp:102
+msgid "additional names for invoice accounts"
+msgstr "nume adiţionale pentru contul de facturi"
+
+#: rc.cpp:103 widgets/rc.cpp:161 widgets/rc.cpp:163
+msgid "..."
+msgstr "..."
+
+#: views/kcategoriesview.cpp:276
+msgid "Profit: "
+msgstr "Profit: "
+
+#: views/kcategoriesview.cpp:278
+msgid "Loss: "
+msgstr "Pierdere: "
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:54
+#: dialogs/transactioneditor.cpp:605 views/kpayeesview.cpp:365
+#: widgets/kmymoneyonlinequoteconfig.cpp:54
+msgid "Accepts the entered data and stores it"
+msgstr "Acceptă datele introduse şi le salvează"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:55 views/kpayeesview.cpp:366
+#: widgets/kmymoneyonlinequoteconfig.cpp:55
+msgid "Use this to accept the modified data."
+msgstr "Foloseşte acesta pentru a accepta datele modificate."
+
+#: views/kpayeesview.cpp:491
+msgid ""
+"A payee with the name '%1' already exists. It is not advisable to have "
+"multiple payees with the same identification name. Are you sure you would "
+"like to rename the payee?"
+msgstr ""
+"Există deja un beneficiar cu numele '%1'. Nu este indicat să existe mai "
+"mulţi beneficiari cu acelaşi nume de indentificare. Sunteţi siguri că doriţi "
+"să redenumiţi beneficiarul?"
+
+#: views/kpayeesview.cpp:518 views/kpayeesview.cpp:869
+msgid "Unable to modify payee"
+msgstr "Nu se poate modifica beneficiarul"
+
+#: views/kpayeesview.cpp:564
+msgid "Do you want to save the changes for <b>%1</b>?"
+msgstr "Doriţi să salvaţi modificările pentru <b>%1</b>?"
+
+#: views/kbudgetview.cpp:490 views/kpayeesview.cpp:565
+msgid "Save changes"
+msgstr "Salvaţi modificările"
+
+#: views/kgloballedgerview.cpp:737 views/kpayeesview.cpp:662
+#: views/kpayeesview.cpp:753
+#, c-format
+msgid "Balance: %1"
+msgstr "Soldul: %1"
+
+#: views/kpayeesview.cpp:725 views/kpayeesview.cpp:731
+#, c-format
+msgid "Amortization of %1"
+msgstr "Amortizare de %1"
+
+#: views/kpayeesview.cpp:727 views/kpayeesview.cpp:733
+#, c-format
+msgid "Payment to %1"
+msgstr "Plată la %1"
+
+#: views/kpayeesview.cpp:736
+#, c-format
+msgid "Loan payment from %1"
+msgstr "Plata împrumutului de la %1"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:123
+#: dialogs/kconfirmmanualenterdlg.cpp:133 views/kpayeesview.cpp:745
+#: widgets/kmymoneycategory.cpp:160 widgets/kmymoneycategory.cpp:166
+#: widgets/transaction.cpp:851 widgets/transaction.cpp:1397
+#: widgets/transaction.cpp:1411
+msgid ""
+"_: Split transaction (category replacement)\n"
+"Split transaction"
+msgstr "Tranzacţie compusă"
+
+#: views/kreportsview.cpp:262
+msgid ""
+"There was an error creating your report: \"%1\".\n"
+"Please report this error to the developer's list: kmymoney2-developer@lists."
+"sourceforge.net"
+msgstr ""
+"S-a constatat o eroare în timpul creării raportului dumneavoastră: \"%1\".\n"
+"Vă rog să raportaţi această eroare listei de dezvoltatori ai aplicaţiei: "
+"kmymoney2-developer@lists.sourceforge.net"
+
+#: views/kreportsview.cpp:264
+msgid "Critical Error"
+msgstr "Eroare Critică"
+
+#: views/kreportsview.cpp:268
+msgid "Unable to generate report"
+msgstr "Nu s-a putut genera raportul"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:125 views/kreportsview.cpp:286
+#: views/rc.cpp:53 widgets/rc.cpp:146
+msgid "Chart"
+msgstr "Grafic"
+
+#: views/kreportsview.cpp:287 widgets/rc.cpp:147
+msgid "Show the chart version of this report"
+msgstr "Afişează versiunea graficului acestui raport"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:112 views/khomeview.cpp:900
+#: views/kreportsview.cpp:294 views/kreportsview.cpp:328
+msgid "Report"
+msgstr "Raport"
+
+#: views/kreportsview.cpp:295
+msgid "Show the report version of this chart"
+msgstr "Afişează versiunea raportului acestui grafic"
+
+#: views/kmymoneyview.cpp:236 views/kreportsview.cpp:314
+#: views/kreportsview.cpp:326
+msgid "Reports"
+msgstr "Rapoarte"
+
+#: views/khomeview.cpp:902 views/kreportsview.cpp:329 widgets/rc.cpp:56
+msgid "Comment"
+msgstr "Comentarii"
+
+#: views/kreportsview.cpp:432
+msgid "Charts"
+msgstr "Grafice"
+
+#: views/khomeview.cpp:897 views/kreportsview.cpp:470
+msgid "Favorite Reports"
+msgstr "Rapoarte favorite"
+
+#: views/kreportsview.cpp:486
+msgid "Old Customized Reports"
+msgstr "Rapoarte personalizate vechi"
+
+#: views/kreportsview.cpp:579
+msgid "Include Stylesheet"
+msgstr "Include foaia de stil"
+
+#: views/kreportsview.cpp:585
+msgid ""
+"_: CSV (Filefilter)\n"
+"CSV files"
+msgstr "Fişiere CSV"
+
+#: views/kreportsview.cpp:586
+msgid ""
+"_: HTML (Filefilter)\n"
+"HTML files"
+msgstr "Fişiere HTML"
+
+#: views/kreportsview.cpp:591
+msgid "Export as"
+msgstr "Exportă ca"
+
+#: views/kreportsview.cpp:619 views/kreportsview.cpp:660
+#: views/kreportsview.cpp:942 views/kreportsview.cpp:950
+#: views/kreportsview.cpp:958 views/kreportsview.cpp:968
+#: views/kreportsview.cpp:980 views/kreportsview.cpp:998
+#: views/kreportsview.cpp:1006 views/kreportsview.cpp:1014
+#: views/kreportsview.cpp:1022 views/kreportsview.cpp:1034
+#: views/kreportsview.cpp:1046 views/kreportsview.cpp:1056
+#: views/kreportsview.cpp:1070 views/kreportsview.cpp:1079
+#: views/kreportsview.cpp:1087 views/kreportsview.cpp:1095
+#: views/kreportsview.cpp:1103 views/kreportsview.cpp:1111
+#: views/kreportsview.cpp:1120 views/kreportsview.cpp:1132
+#: views/kreportsview.cpp:1145 views/kreportsview.cpp:1155
+#: views/kreportsview.cpp:1165 views/kreportsview.cpp:1175
+#: views/kreportsview.cpp:1185 views/kreportsview.cpp:1195
+#: views/kreportsview.cpp:1208 views/kreportsview.cpp:1222
+#: views/kreportsview.cpp:1239 views/kreportsview.cpp:1257
+#: views/kreportsview.cpp:1273 views/kreportsview.cpp:1295
+#: views/kreportsview.cpp:1304 views/kreportsview.cpp:1313
+#: views/kreportsview.cpp:1322 views/kreportsview.cpp:1336
+#: views/kreportsview.cpp:1347 views/kreportsview.cpp:1362
+#: views/kreportsview.cpp:1372 views/kreportsview.cpp:1383
+#: views/kreportsview.cpp:1393 views/kreportsview.cpp:1404
+#: views/kreportsview.cpp:1423 views/kreportsview.cpp:1432
+#: views/kreportsview.cpp:1444 views/kreportsview.cpp:1463
+#: views/kreportsview.cpp:1472 views/kreportsview.cpp:1481
+#: views/kreportsview.cpp:1490
+msgid "Default Report"
+msgstr "Raport implicit"
+
+#: views/kreportsview.cpp:621 views/kreportsview.cpp:661
+msgid "Custom Report"
+msgstr "Raport personalizat"
+
+#: views/kreportsview.cpp:622
+msgid " (Customized)"
+msgstr " (Personalizat)"
+
+#: views/kreportsview.cpp:690
+msgid ""
+"Are you sure you want to delete report <b>%1</b>? There is no way to "
+"recover it!"
+msgstr ""
+"Sunteţi siguri că doriţi să ştergeţi raportul <b>%1</b>? Odată şters "
+"raportul nu mai poate fi recuperat!"
+
+#: views/kreportsview.cpp:690 views/kreportsview.cpp:702
+msgid "Delete Report?"
+msgstr "Sterge Raportul?"
+
+#: views/kreportsview.cpp:702
+msgid "Sorry, <b>%1</b> is a default report. You may not delete it."
+msgstr "Ne pare rău, <b>%1</b> este un raport implicit. Nu îl puteţi şterge."
+
+#: views/kreportsview.cpp:882
+msgid "&Open"
+msgstr "&Deschide"
+
+#: views/kreportsview.cpp:884
+msgid "&New report"
+msgstr "Raport &nou"
+
+#: views/kreportsview.cpp:934
+msgid "Income and Expenses"
+msgstr "Venituri şi cheltuieli"
+
+#: views/kreportsview.cpp:941
+msgid "Income and Expenses This Month"
+msgstr "Venituri şi cheltuieli în această lună"
+
+#: views/kreportsview.cpp:949
+msgid "Income and Expenses This Year"
+msgstr "Venituri şi cheltuieli în acest an"
+
+#: views/kreportsview.cpp:957
+msgid "Income and Expenses By Year"
+msgstr "Venituri şi cheltuieli în funcţie de an"
+
+#: views/kreportsview.cpp:967
+msgid "Income and Expenses Graph"
+msgstr "Grafic cu venituri şi cheltuieli"
+
+#: views/kreportsview.cpp:979
+msgid "Income and Expenses Pie Chart"
+msgstr "Diagramă circulară cu venituri şi cheltuieli"
+
+#: views/khomeview.cpp:1361 views/kreportsview.cpp:990
+msgid "Net Worth"
+msgstr "Valoare netă"
+
+#: views/kreportsview.cpp:997
+msgid "Net Worth By Month"
+msgstr "Valoarea netă pe lună"
+
+#: views/kreportsview.cpp:1005
+msgid "Net Worth Today"
+msgstr "Valoarea netă astăzi"
+
+#: views/kreportsview.cpp:1013
+msgid "Net Worth By Year"
+msgstr "Valoarea netă pe an"
+
+#: views/kreportsview.cpp:1021
+msgid "7-day Cash Flow Forecast"
+msgstr "Estimare de flux financiar pe 7 zile"
+
+#: views/kreportsview.cpp:1033
+msgid "Net Worth Graph"
+msgstr "Grafic cu valoarea netă"
+
+#: views/kreportsview.cpp:1045
+msgid "Account Balances by Institution"
+msgstr "Solduri conturilor ordonate după înstituţie"
+
+#: views/kreportsview.cpp:1055
+msgid "Account Balances by Type"
+msgstr "Solduri conturilor ordonate după tip"
+
+#: views/kreportsview.cpp:1069
+msgid "Transactions by Account"
+msgstr "Tranzacţii ordonate după cont"
+
+#: views/kreportsview.cpp:1078
+msgid "Transactions by Category"
+msgstr "Tranzacţii ordonate după categorie"
+
+#: views/kreportsview.cpp:1086
+msgid "Transactions by Payee"
+msgstr "Tranzacţii ordonate după beneficiar/plătitor"
+
+#: views/kreportsview.cpp:1094
+msgid "Transactions by Month"
+msgstr "Tranzacţii ordonate după lună"
+
+#: views/kreportsview.cpp:1102
+msgid "Transactions by Week"
+msgstr "Tranzacţii ordonate după săptămână"
+
+#: views/kreportsview.cpp:1110
+msgid "Loan Transactions"
+msgstr "Tranzacţii de împrumut"
+
+#: views/kreportsview.cpp:1119
+msgid "Transactions by Reconciliation Status"
+msgstr "Tranzacţii după starea reconcilierii"
+
+#: views/kreportsview.cpp:1125
+msgid "Cash Flow"
+msgstr "Fluxul de numerar"
+
+#: views/kreportsview.cpp:1131
+msgid "Cash Flow Transactions This Month"
+msgstr "Tranzacţii de flux de numerar din această lună"
+
+#: views/kmymoneyview.cpp:226 views/kmymoneyview.cpp:228
+#: views/kreportsview.cpp:1137
+msgid "Investments"
+msgstr "Investiţii"
+
+#: views/kreportsview.cpp:1154
+msgid "Investment Holdings by Account"
+msgstr "Investiţii ordonate după cont"
+
+#: views/kreportsview.cpp:1164
+msgid "Investment Holdings by Type"
+msgstr "Investiţii ordonate după tip"
+
+#: views/kreportsview.cpp:1184
+msgid "Investment Performance by Type"
+msgstr "Performanţa investiţiilor ordonată după tip"
+
+#: views/kreportsview.cpp:1194
+msgid "Investment Holdings Pie"
+msgstr "Diagrama circulară pentru exploatarea investiţiilor"
+
+#: views/kreportsview.cpp:1207
+msgid "Investment Worth Graph"
+msgstr "Graficul valorii de investiţii"
+
+#: views/kreportsview.cpp:1221
+msgid "Investment Price Graph"
+msgstr "Graficul prețului investiţiei"
+
+#: views/kreportsview.cpp:1238
+msgid "Investment Moving Average Price Graph"
+msgstr "Graficul mediei glisante a prețului investiţiei"
+
+#: views/kreportsview.cpp:1256
+msgid "Investment Moving Average"
+msgstr "Media glisantă a investiţiei"
+
+#: views/kreportsview.cpp:1272
+msgid "Investment Moving Average vs Actual"
+msgstr "Media glisantă a investiţiei faţă de Actual"
+
+#: views/kreportsview.cpp:1287
+msgid "Taxes"
+msgstr "Impozite"
+
+#: views/kreportsview.cpp:1294
+msgid "Tax Transactions by Category"
+msgstr "Tranzacţii de impozite ordonate după categorie"
+
+#: views/kreportsview.cpp:1303
+msgid "Tax Transactions by Payee"
+msgstr "Tranzacţii de impozite ordonate după beneficiar/plătitor"
+
+#: views/kreportsview.cpp:1312
+msgid "Tax Transactions by Category Last Fiscal Year"
+msgstr "Tranzacţii de impozite ordonate după categorie în ultimul an fiscal"
+
+#: views/kreportsview.cpp:1321
+msgid "Tax Transactions by Payee Last Fiscal Year"
+msgstr ""
+"Tranzacţii de impozite ordonate după beneficiar/plătitor în ultimul an fiscal"
+
+#: views/kreportsview.cpp:1328
+msgid "Budgeting"
+msgstr "Buget"
+
+#: views/kreportsview.cpp:1335
+msgid "Budgeted vs. Actual This Year"
+msgstr "Bugetat vs. actual pentru acest an"
+
+#: views/kreportsview.cpp:1346
+msgid "Budgeted vs. Actual This Year (YTM)"
+msgstr ""
+"Bugetat vs. actual pentru acest an (considerând randamentul la maturitate)"
+
+#: views/khomeview.cpp:1383 views/kreportsview.cpp:1361
+msgid "Monthly Budgeted vs. Actual"
+msgstr "Bugetul lunar vs. starea actuală"
+
+#: views/kreportsview.cpp:1371
+msgid "Yearly Budgeted vs. Actual"
+msgstr "Bugetul anual vs. starea actuală"
+
+#: views/kreportsview.cpp:1382
+msgid "Monthly Budget"
+msgstr "Bugetul lunar"
+
+#: views/kreportsview.cpp:1392
+msgid "Yearly Budget"
+msgstr "Bugetul anual"
+
+#: views/kreportsview.cpp:1403
+msgid "Yearly Budgeted vs Actual Graph"
+msgstr "Grafic cu bugetul anual vs. starea actuală"
+
+#: views/kreportsview.cpp:1422
+msgid "Forecast By Month"
+msgstr "Estimare după lună"
+
+#: views/kreportsview.cpp:1431
+msgid "Forecast Next Quarter"
+msgstr "Estimare pe trimestrul următor"
+
+#: views/kreportsview.cpp:1443
+msgid "Net Worth Forecast Graph"
+msgstr "Graficul valorii nete estimate"
+
+#: dialogs/rc.cpp:126 dialogs/rc.cpp:128 dialogs/rc.cpp:466
+#: views/kreportsview.cpp:1455
+msgid "General Information"
+msgstr "Informaţii generale"
+
+#: views/kreportsview.cpp:1462
+msgid "Schedule Information"
+msgstr "Informaţii despre programări"
+
+#: views/kreportsview.cpp:1471
+msgid "Schedule Summary Information"
+msgstr "Informaţii despre programări rezumate"
+
+#: views/kreportsview.cpp:1480
+msgid "Account Information"
+msgstr "Informaţii despre cont"
+
+#: views/kreportsview.cpp:1489
+msgid "Loan Information"
+msgstr "Informaţii despre împrumut"
+
+#: dialogs/rc.cpp:323 views/kmymoneyview.cpp:148 views/kmymoneyview.cpp:150
+msgid "Institutions"
+msgstr "Instituţii"
+
+#: dialogs/knewaccountdlg.cpp:98 views/kmymoneyview.cpp:162
+#: views/kmymoneyview.cpp:164 widgets/rc.cpp:4 widgets/rc.cpp:94
+msgid "Accounts"
+msgstr "Conturi"
+
+#: views/kmymoneyview.cpp:176
+msgid "Bills & Reminders"
+msgstr "Facturi şi memoratori"
+
+#: views/kmymoneyview.cpp:178
+msgid "Scheduled transactions"
+msgstr "Tranzacţii programate"
+
+#: dialogs/knewaccountdlg.cpp:98 dialogs/rc.cpp:193 views/kmymoneyview.cpp:188
+#: views/kmymoneyview.cpp:190 widgets/rc.cpp:91
+msgid "Categories"
+msgstr "Categorii"
+
+#: dialogs/kfindtransactiondlg.cpp:212 dialogs/rc.cpp:318
+#: views/kmymoneyview.cpp:199 views/kmymoneyview.cpp:201 widgets/rc.cpp:93
+msgid "Payees"
+msgstr "Beneficiari/Plătitori"
+
+#: views/kgloballedgerview.cpp:149 views/kmymoneyview.cpp:211
+msgid "Ledgers"
+msgstr "Registre"
+
+#: views/kmymoneyview.cpp:353
+msgid "Creating transactions can only be performed in the ledger view"
+msgstr "Tranzacţiile se pot crea doar în modul de vizualizare registru"
+
+#: views/kmymoneyview.cpp:367
+msgid "Modifying transactions can only be performed in the ledger view"
+msgstr "Tranzacţiile se pot modifica doar în modul de vizualizare registru"
+
+#: views/kmymoneyview.cpp:382
+msgid "Duplicating transactions can only be performed in the ledger view"
+msgstr "Tranzacţiile se pot duplica doar în modul de vizualizare registru"
+
+#: views/kmymoneyview.cpp:394
+msgid "Edit the current selected transactions"
+msgstr "Modifică tranzacţiile marcate"
+
+#: views/kmymoneyview.cpp:602
+msgid "<b>%1</b> is not a KMyMoney file."
+msgstr "<b>%1</b> nu este un fişier KMyMoney."
+
+#: views/kmymoneyview.cpp:643
+msgid "GPG is not available for decryption of file <b>%1</b>"
+msgstr "GPG nu este disponibil pentru decriptarea fişierului <b>%1</b>"
+
+#: views/kmymoneyview.cpp:721
+msgid ""
+"File <b>%1</b> contains the old binary format used by KMyMoney. Please use "
+"an older version of KMyMoney (0.8.x) that still supports this format to "
+"convert it to the new XML based format."
+msgstr ""
+"Fişierul <b>%1</b> conţine vechiul format binar folosit de către KMyMoney. "
+"Vă rog să folosiţi o versiune mai veche de KMyMoney (0.8.x) care mai "
+"foloseşte acest format pentru a-l converti la noul format bazat pe XML."
+
+#: views/kmymoneyview.cpp:723
+msgid "File <b>%1</b> contains an unknown file format!"
+msgstr "Fişierul <b>%1</b> conţine datele într-un format necunoscut!"
+
+#: views/kmymoneyview.cpp:728
+msgid "Cannot read from file <b>%1</b>!"
+msgstr "Nu se poate citi fişierul <b>%1</b>!"
+
+#: views/kmymoneyview.cpp:732
+msgid "Cannot load file <b>%1</b>. Reason: %2"
+msgstr "Nu se poate încărca fişierul <b>%1</b>. Motivul: %2"
+
+#: views/kmymoneyview.cpp:742 views/kmymoneyview.cpp:748
+msgid "File <b>%1</b> not found!"
+msgstr "Fişierul <b>%1</b> nu a fost găsit!"
+
+#: views/kmymoneyview.cpp:812
+msgid "Can't open database %1\n"
+msgstr "Nu se poate deschide baza de date %1 \n"
+
+#: views/kmymoneyview.cpp:844
+msgid "An unrecoverable error occurred while reading the database"
+msgstr "O eroare ireparabilă a apărut în cursul citirii bazei de date"
+
+#: views/kmymoneyview.cpp:846 views/kmymoneyview.cpp:1208
+msgid "Database malfunction"
+msgstr "Funcţionare defectuoasă a bazei de date"
+
+#: views/kmymoneyview.cpp:938
+msgid "Unknown fix level in input file"
+msgstr "Nivel de reparare necunoscut pentru fişierul de intrare"
+
+#: views/kmymoneyview.cpp:984
+msgid ""
+"GPG does not seem to be installed on your system. Please make sure, that GPG "
+"can be found using the standard search path. This time, encryption is "
+"disabled."
+msgstr ""
+"GPG nu pare să fie instalat pe sistemul dumneavoastră. Vă rog, fiţi sigur că "
+"GPG poate fi găsit folosind calea de căutare standard. În acest timp, "
+"criptarea este dezactivată."
+
+#: views/kmymoneyview.cpp:984
+msgid "GPG not found"
+msgstr "GPG nu a fost găsit"
+
+#: views/kmymoneyview.cpp:991
+msgid ""
+"You have selected to encrypt your data also with the KMyMoney recover key, "
+"but the key with id</p><p><center><b>%1</b></center></p>has not been found "
+"in your keyring at this time. Please make sure to import this key into your "
+"keyring. You can find it on the <a href=\"http://kmymoney2.sourceforge.net/"
+"\">KMyMoney web-site</a>. This time your data will not be encrypted with the "
+"KMyMoney recover key."
+msgstr ""
+"Aţi ales să criptaţi datele şi cu cheia de siguranţă KMyMoney, dar cheia cu "
+"id-ul</p><p><center><b>%1</b></center></p>nu a fost găsită în acest moment. "
+"Vă rog să vă asiguraţi că importaţi această cheie. O puteţi găsi la <a href="
+"\"http://kmymoney2.sourceforge.net/\">KMyMoney web-site</a>. De data aceasta "
+"datele dumneavoastră nu vor fi criptate cu cheia de siguranţă KMyMoney."
+
+#: views/kmymoneyview.cpp:991 views/kmymoneyview.cpp:1000
+msgid "GPG-Key not found"
+msgstr "GPG-Key nu a fost găsit"
+
+#: views/kmymoneyview.cpp:1000
+msgid ""
+"You have specified to encrypt your data for the user-id</p><p><center><b>%1</"
+"b>.</center></p>Unfortunately, a valid key for this user-id was not found in "
+"your keyring. Please make sure to import a valid key for this user-id. This "
+"time, encryption is disabled."
+msgstr ""
+"Aţi specificat să criptaţi datele pentru id-ul utilizatorului</"
+"p><p><center><b>%1</b>.</center></p>Din păcate nu s-a găsit nicio cheie "
+"validă pentru acest id de utilizator. Vă rog să vă asiguraţi că importaţi o "
+"cheie validă pentru acest id de utilizator. În acest moment, criptarea e "
+"dezactivată."
+
+#: views/kmymoneyview.cpp:1006
+msgid ""
+"You have configured to save your data in encrypted form using GPG. Please be "
+"aware, that this is a brand new feature which is yet untested. Make sure, "
+"you have the necessary understanding that you might loose all your data if "
+"you store it encrypted and cannot decrypt it later on! If unsure, answer "
+"<b>No</b>."
+msgstr ""
+"Aţi configurat salvarea datelor dumneavoastră în formă criptată, folosind "
+"GPG. Vă rog fiţi atent că aceasta este o facilitate nouă care nu e încă "
+"testată. Fiţi sigur că aţi înţeles că aţi putea pierde toate datele dacă le "
+"salvaţi criptate şi că nu le-aţi mai putea decripta mai târziu! Dacă nu "
+"sunteţi sigur, răspundeţi <b>Nu</b>."
+
+#: views/kmymoneyview.cpp:1008
+msgid "Store GPG encrypted"
+msgstr "Memorează criptarea GPG"
+
+#: views/kmymoneyview.cpp:1038 views/kmymoneyview.cpp:1052
+msgid "Unable to open file '%1' for writing."
+msgstr "Nu s-a putut deschide pentru scriere fieşierul '%1'."
+
+#: views/kmymoneyview.cpp:1065 views/kmymoneyview.cpp:1074
+msgid "Failure while writing to '%1'"
+msgstr "Eroare în timpul scriereii în '%1'"
+
+#: views/kmymoneyview.cpp:1086 views/kmymoneyview.cpp:1181
+msgid "Tried to access a file when it's not open"
+msgstr "S-a încercat acesul la un fişier în timp ce acesta nu era deschis"
+
+#: views/kmymoneyview.cpp:1092
+msgid ""
+"Since this version of KMyMoney only writes data files in its new format, "
+"files written with this version cannot be read by KMyMoney version 0.4. If "
+"you still want to use older versions of KMyMoney with your data files, "
+"please make sure you keep a backup-file of your finance data. If you want to "
+"abort this operation, please press Cancel now"
+msgstr ""
+"De la această versiune de KMyMoney fişierele vor fi scrise doar cu formatul "
+"nou, care nu poate fi citit de KMyMoney versiunea 0.4. Dacă doriţi să "
+"folosiţi versiuni mai vechi de KMyMoney cu fişierele dumneavoastră de date, "
+"vă rog să vă asiguraţi că aveţi o copie de siguranţă a datelor dumneavoastră "
+"financiare. Dacă vreţi să anulaţi această operaţiune, vă rog să apăsaţi acum "
+"Renunţă."
+
+#: views/kmymoneyview.cpp:1122
+msgid "Malformed URL '%1'"
+msgstr "URL defect '%1'"
+
+#: views/kmymoneyview.cpp:1192
+msgid ""
+"Database contains data which must be removed before using SaveAs.\n"
+"Do you wish to continue?"
+msgstr ""
+"Baza de date conţine date care trebuie şterse înainte de folosirea comenzii "
+"Salvează ca.\n"
+"Doriţi să continui?"
+
+#: views/kmymoneyview.cpp:1205
+msgid ""
+"An unrecoverable error occurred while writing to the database.\n"
+"It may well be corrupt."
+msgstr ""
+"O eroare neaşteptată a apărut în timpul scrierii în baza de date.\n"
+"Ar putea foarte bine să fie coruptă."
+
+#: views/kmymoneyview.cpp:1215
+msgid ""
+"Can't open or create database %1\n"
+"Retry SaveAsDatabase and click Help for further info"
+msgstr ""
+"Nu am putut deschide sau crea baza de date %1\n"
+"Reîncercaţi SalveazăCaBazădedate şi faceţi clic pe Help pentru informaţii "
+"suplimentare"
+
+#: views/kmymoneyview.cpp:1354
+msgid "Afghanistan Afghani"
+msgstr "Afgan Afgan"
+
+#: views/kmymoneyview.cpp:1355
+msgid "Albanian Lek"
+msgstr "Lek albanez"
+
+#: views/kmymoneyview.cpp:1356
+msgid "Netherland Antillian Guilder"
+msgstr "Gulden antilean olandez"
+
+#: views/kmymoneyview.cpp:1357
+msgid "Algerian Dinar"
+msgstr "Dinar algerian"
+
+#: views/kmymoneyview.cpp:1358
+msgid "Andorran Franc"
+msgstr "Franc andorez"
+
+#: views/kmymoneyview.cpp:1359
+msgid "Andorran Peseta"
+msgstr "Peseta Andoreză"
+
+#: views/kmymoneyview.cpp:1360
+msgid "Angolan New Kwanza"
+msgstr "Kwanza nouă angoleză"
+
+#: views/kmymoneyview.cpp:1361
+msgid "Argentine Peso"
+msgstr "Peso argentinian"
+
+#: views/kmymoneyview.cpp:1362
+msgid "Aruban Florin"
+msgstr "Florin Aruba"
+
+#: views/kmymoneyview.cpp:1363
+msgid "Australian Dollar"
+msgstr "Dolar australian"
+
+#: views/kmymoneyview.cpp:1364
+msgid "Azerbaijani Manat"
+msgstr "Manat azer"
+
+#: views/kmymoneyview.cpp:1365
+msgid "Bahamian Dollar"
+msgstr "Dolar Bahamas"
+
+#: views/kmymoneyview.cpp:1366
+msgid "Bahraini Dinar"
+msgstr "Dinar Bahrein"
+
+#: views/kmymoneyview.cpp:1367
+msgid "Bangladeshi Taka"
+msgstr "Taka Bangladesh"
+
+#: views/kmymoneyview.cpp:1368
+msgid "Barbados Dollar"
+msgstr "Dolar Barbados"
+
+#: views/kmymoneyview.cpp:1369
+msgid "Belarussian Ruble"
+msgstr "Belarussian Ruble"
+
+#: views/kmymoneyview.cpp:1370
+msgid "Belize Dollar"
+msgstr "Rublă bielorusă"
+
+#: views/kmymoneyview.cpp:1371
+msgid "Bermudian Dollar"
+msgstr "Dolar Bermude"
+
+#: views/kmymoneyview.cpp:1372
+msgid "Bhutan Ngultrum"
+msgstr "Ngultrum Bhutan"
+
+#: views/kmymoneyview.cpp:1373
+msgid "Bolivian Boliviano"
+msgstr "Boliviano Bolivian"
+
+#: views/kmymoneyview.cpp:1374
+msgid "Bosnian Convertible Mark"
+msgstr "Marcă bosniacă"
+
+#: views/kmymoneyview.cpp:1375
+msgid "Botswana Pula"
+msgstr "Pula Botswana"
+
+#: views/kmymoneyview.cpp:1376
+msgid "Brazilian Real"
+msgstr "Real brazilian"
+
+#: views/kmymoneyview.cpp:1377
+msgid "British Pound"
+msgstr "Liră sterlină"
+
+#: views/kmymoneyview.cpp:1378
+msgid "Brunei Dollar"
+msgstr "Dolar Brunei"
+
+#: views/kmymoneyview.cpp:1379
+msgid "Bulgarian Lev"
+msgstr "Levă bulgară"
+
+#: views/kmymoneyview.cpp:1380
+msgid "Burundi Franc"
+msgstr "Franc Burundi"
+
+#: views/kmymoneyview.cpp:1381
+msgid "CFA Franc BEAC"
+msgstr "CFA Franc BEAC"
+
+#: views/kmymoneyview.cpp:1382
+msgid "CFA Franc BCEAO"
+msgstr "CFA Franc BCEAO"
+
+#: views/kmymoneyview.cpp:1383
+msgid "CFP Franc Pacifique"
+msgstr "CFP Franc Pacific"
+
+#: views/kmymoneyview.cpp:1384
+msgid "Cambodia Riel"
+msgstr "Riel cambodgian"
+
+#: views/kmymoneyview.cpp:1385
+msgid "Canadian Dollar"
+msgstr "Dolar canadian"
+
+#: views/kmymoneyview.cpp:1386
+msgid "Cape Verde Escudo"
+msgstr "Escudo Capul Verde"
+
+#: views/kmymoneyview.cpp:1387
+msgid "Cayman Islands Dollar"
+msgstr "Dolar Insulele Cayman"
+
+#: views/kmymoneyview.cpp:1388
+msgid "Chilean Peso"
+msgstr "Peso Chile"
+
+#: views/kmymoneyview.cpp:1389
+msgid "Chinese Yuan Renminbi"
+msgstr "Yuan China Renminbi"
+
+#: views/kmymoneyview.cpp:1390
+msgid "Colombian Peso"
+msgstr "Peso columbian"
+
+#: views/kmymoneyview.cpp:1391
+msgid "Comoros Franc"
+msgstr "Franc comorian"
+
+#: views/kmymoneyview.cpp:1392
+msgid "Costa Rican Colon"
+msgstr "Colón costarican"
+
+#: views/kmymoneyview.cpp:1393
+msgid "Croatian Kuna"
+msgstr "Kună croată"
+
+#: views/kmymoneyview.cpp:1394
+msgid "Cuban Peso"
+msgstr "Peso cubanez"
+
+#: views/kmymoneyview.cpp:1395
+msgid "Czech Koruna"
+msgstr "Coroană cehă"
+
+#: views/kmymoneyview.cpp:1396
+msgid "Danish Krone"
+msgstr "Coroană daneză"
+
+#: views/kmymoneyview.cpp:1397
+msgid "Djibouti Franc"
+msgstr "Franc Djibouti"
+
+#: views/kmymoneyview.cpp:1398
+msgid "Dominican Peso"
+msgstr "Peso dominican"
+
+#: views/kmymoneyview.cpp:1399
+msgid "East Caribbean Dollar"
+msgstr "Dolar Caraibele de est"
+
+#: views/kmymoneyview.cpp:1400
+msgid "Egyptian Pound"
+msgstr "Liră egiptieană"
+
+#: views/kmymoneyview.cpp:1401
+msgid "El Salvador Colon"
+msgstr "Colón salvadorian"
+
+#: views/kmymoneyview.cpp:1402
+msgid "Eritrean Nakfa"
+msgstr "Nakfa Eritreea"
+
+#: views/kmymoneyview.cpp:1403
+msgid "Estonian Kroon"
+msgstr "Coroană estoniană"
+
+#: views/kmymoneyview.cpp:1404
+msgid "Ethiopian Birr"
+msgstr "Birr Etiopia"
+
+#: views/kmymoneyview.cpp:1405
+msgid "Euro"
+msgstr "Euro"
+
+#: views/kmymoneyview.cpp:1406
+msgid "Falkland Islands Pound"
+msgstr "Liră Insulele Falkland"
+
+#: views/kmymoneyview.cpp:1407
+msgid "Fiji Dollar"
+msgstr "Dolar Fiji"
+
+#: views/kmymoneyview.cpp:1408
+msgid "Gambian Dalasi"
+msgstr "Dalasi Gambia"
+
+#: views/kmymoneyview.cpp:1409
+msgid "Georgian Lari"
+msgstr "Lari georgian"
+
+#: views/kmymoneyview.cpp:1410
+msgid "Ghanaian Cedi"
+msgstr "Cedi Ghana"
+
+#: views/kmymoneyview.cpp:1411
+msgid "Gibraltar Pound"
+msgstr "Liră Gibraltar"
+
+#: views/kmymoneyview.cpp:1412
+msgid "Guatemalan Quetzal"
+msgstr "Quetzal Guatemala "
+
+#: views/kmymoneyview.cpp:1413
+msgid "Guinea-Bissau Peso"
+msgstr "Peso Guinea-Bissau"
+
+#: views/kmymoneyview.cpp:1414
+msgid "Guyanan Dollar"
+msgstr "Dolar guyanez"
+
+#: views/kmymoneyview.cpp:1415
+msgid "Haitian Gourde"
+msgstr "Gourde Haiti"
+
+#: views/kmymoneyview.cpp:1416
+msgid "Honduran Lempira"
+msgstr "Lempira Honduras"
+
+#: views/kmymoneyview.cpp:1417
+msgid "Hong Kong Dollar"
+msgstr "Dolar Hong Kong"
+
+#: views/kmymoneyview.cpp:1418
+msgid "Hungarian Forint"
+msgstr "Forint"
+
+#: views/kmymoneyview.cpp:1419
+msgid "Iceland Krona"
+msgstr "Coroană islandeză"
+
+#: views/kmymoneyview.cpp:1420
+msgid "Indian Rupee"
+msgstr "Rupia indiană"
+
+#: views/kmymoneyview.cpp:1421
+msgid "Indonesian Rupiah"
+msgstr "Rupia indoneziană"
+
+#: views/kmymoneyview.cpp:1422
+msgid "Iranian Rial"
+msgstr "Rial iranian"
+
+#: views/kmymoneyview.cpp:1423
+msgid "Iraqi Dinar"
+msgstr "Dinar irakian"
+
+#: views/kmymoneyview.cpp:1424
+msgid "Israeli New Shekel"
+msgstr "Shekel nou israelian"
+
+#: views/kmymoneyview.cpp:1425
+msgid "Jamaican Dollar"
+msgstr "Dolar jamaican"
+
+#: views/kmymoneyview.cpp:1426
+msgid "Japanese Yen"
+msgstr "Yen japonez"
+
+#: views/kmymoneyview.cpp:1427
+msgid "Jordanian Dinar"
+msgstr "Dinar iordanian"
+
+#: views/kmymoneyview.cpp:1428
+msgid "Kazakhstan Tenge"
+msgstr "Tenge Kazah"
+
+#: views/kmymoneyview.cpp:1429
+msgid "Kenyan Shilling"
+msgstr "Shilling kenyan"
+
+#: views/kmymoneyview.cpp:1430
+msgid "Kuwaiti Dinar"
+msgstr "Dinar kuweitian"
+
+#: views/kmymoneyview.cpp:1431
+msgid "Kyrgyzstan Som"
+msgstr "Som Kârgâzstan"
+
+#: views/kmymoneyview.cpp:1432
+msgid "Laos Kip"
+msgstr "Kip Laos"
+
+#: views/kmymoneyview.cpp:1433
+msgid "Latvian Lats"
+msgstr "Lat leton"
+
+#: views/kmymoneyview.cpp:1434
+msgid "Lebanese Pound"
+msgstr "Lira libaneză"
+
+#: views/kmymoneyview.cpp:1435
+msgid "Lesotho Loti"
+msgstr "Lesotho loti"
+
+#: views/kmymoneyview.cpp:1436
+msgid "Liberian Dollar"
+msgstr "Dolar liberian"
+
+#: views/kmymoneyview.cpp:1437
+msgid "Libyan Dinar"
+msgstr "Dinar libian"
+
+#: views/kmymoneyview.cpp:1438
+msgid "Lithuanian Litas"
+msgstr "Litas lituan"
+
+#: views/kmymoneyview.cpp:1439
+msgid "Macau Pataca"
+msgstr "Pataca Macau"
+
+#: views/kmymoneyview.cpp:1440
+msgid "Macedonian Denar"
+msgstr "Denar macedonean"
+
+#: views/kmymoneyview.cpp:1441
+msgid "Malagasy Franc"
+msgstr "Franc Malagasy"
+
+#: views/kmymoneyview.cpp:1442
+msgid "Malawi Kwacha"
+msgstr "Kwacha Malawi"
+
+#: views/kmymoneyview.cpp:1443
+msgid "Malaysian Ringgit"
+msgstr "Ringgit Malaysian"
+
+#: views/kmymoneyview.cpp:1444
+msgid "Maldive Rufiyaa"
+msgstr "Rufiyaa Maldive"
+
+#: views/kmymoneyview.cpp:1445
+msgid "Mali Republic Franc"
+msgstr "Franc Republica Mali"
+
+#: views/kmymoneyview.cpp:1446
+msgid "Mauritanian Ouguiya"
+msgstr "Ouguiya Mauritania"
+
+#: views/kmymoneyview.cpp:1447
+msgid "Mauritius Rupee"
+msgstr "Rupee Mauritius"
+
+#: views/kmymoneyview.cpp:1448
+msgid "Mexican Peso"
+msgstr "Peso mexican"
+
+#: views/kmymoneyview.cpp:1449
+msgid "Moldavian Leu"
+msgstr "Leu Moldovenesc"
+
+#: views/kmymoneyview.cpp:1450
+msgid "Mongolian Tugrik"
+msgstr "Tugrik Mongol"
+
+#: views/kmymoneyview.cpp:1451
+msgid "Moroccan Dirham"
+msgstr "Dirham marocan"
+
+#: views/kmymoneyview.cpp:1452
+msgid "Mozambique Metical"
+msgstr "Metical Mozambique"
+
+#: views/kmymoneyview.cpp:1453
+msgid "Myanmar Kyat"
+msgstr "Kyat Myanmar"
+
+#: views/kmymoneyview.cpp:1454
+msgid "Namibian Dollar"
+msgstr "Dolar namibian"
+
+#: views/kmymoneyview.cpp:1455
+msgid "Nepalese Rupee"
+msgstr "Rupie nepaleză"
+
+#: views/kmymoneyview.cpp:1456
+msgid "New Zealand Dollar"
+msgstr "Dolar neo-zeelandez"
+
+#: views/kmymoneyview.cpp:1457
+msgid "Nicaraguan Cordoba Oro"
+msgstr "Córdoba nicaraguană"
+
+#: views/kmymoneyview.cpp:1458
+msgid "Nigerian Naira"
+msgstr "Naira Nigeria"
+
+#: views/kmymoneyview.cpp:1459
+msgid "North Korean Won"
+msgstr "Won Corea de Nord"
+
+#: views/kmymoneyview.cpp:1460
+msgid "Norwegian Kroner"
+msgstr "Coroană norvegiană"
+
+#: views/kmymoneyview.cpp:1461
+msgid "Omani Rial"
+msgstr "Rial Oman"
+
+#: views/kmymoneyview.cpp:1462
+msgid "Pakistan Rupee"
+msgstr "Rupie pakistaneză"
+
+#: views/kmymoneyview.cpp:1463
+msgid "Panamanian Balboa"
+msgstr "Balboa Panamanian"
+
+#: views/kmymoneyview.cpp:1464
+msgid "Papua New Guinea Kina"
+msgstr "Kina Papua Noua Guinee"
+
+#: views/kmymoneyview.cpp:1465
+msgid "Paraguay Guarani"
+msgstr "Guarani Paraguay"
+
+#: views/kmymoneyview.cpp:1466
+msgid "Peruvian Nuevo Sol"
+msgstr "Nuevo sol peruvian"
+
+#: views/kmymoneyview.cpp:1467
+msgid "Philippine Peso"
+msgstr "Peso filippinez"
+
+#: views/kmymoneyview.cpp:1468
+msgid "Polish Zloty"
+msgstr "Zlot polonez"
+
+#: views/kmymoneyview.cpp:1469
+msgid "Qatari Rial"
+msgstr "Rial Qatar"
+
+#: views/kmymoneyview.cpp:1470
+msgid "Romanian Leu (new)"
+msgstr "Leu românesc (nou)"
+
+#: views/kmymoneyview.cpp:1471
+msgid "Russian Ruble"
+msgstr "Rubla rusească"
+
+#: views/kmymoneyview.cpp:1472
+msgid "Rwanda Franc"
+msgstr "Franc ruandez"
+
+#: views/kmymoneyview.cpp:1473
+msgid "Samoan Tala"
+msgstr "Tala Samoa"
+
+#: views/kmymoneyview.cpp:1474
+msgid "Sao Tome and Principe Dobra"
+msgstr "Dobra Sao Tome and Principe"
+
+#: views/kmymoneyview.cpp:1475
+msgid "Saudi Riyal"
+msgstr "Riyal saudit"
+
+#: views/kmymoneyview.cpp:1476
+msgid "Seychelles Rupee"
+msgstr "Rupia Seychelles"
+
+#: views/kmymoneyview.cpp:1477
+msgid "Sierra Leone Leone"
+msgstr "Leone Sierra Leone"
+
+#: views/kmymoneyview.cpp:1478
+msgid "Singapore Dollar"
+msgstr "Dolar Singapore"
+
+#: views/kmymoneyview.cpp:1481
+msgid "Solomon Islands Dollar"
+msgstr "Dolar Insulele Solomon"
+
+#: views/kmymoneyview.cpp:1482
+msgid "Somali Shilling"
+msgstr "Şiling somalez"
+
+#: views/kmymoneyview.cpp:1483
+msgid "South African Rand"
+msgstr "Rand Africa de Sud"
+
+#: views/kmymoneyview.cpp:1484
+msgid "South Korean Won"
+msgstr "Won Coreea de Sud"
+
+#: views/kmymoneyview.cpp:1485
+msgid "Sri Lanka Rupee"
+msgstr "Rupia Sri Lanka"
+
+#: views/kmymoneyview.cpp:1486
+msgid "St. Helena Pound"
+msgstr "Liră Sfânta Elena"
+
+#: views/kmymoneyview.cpp:1487
+msgid "Sudanese Dinar"
+msgstr "Dinar sudanez"
+
+#: views/kmymoneyview.cpp:1488
+msgid "Suriname Guilder"
+msgstr "Guilder Suriname"
+
+#: views/kmymoneyview.cpp:1489
+msgid "Swaziland Lilangeni"
+msgstr "Lilangeni Swaziland"
+
+#: views/kmymoneyview.cpp:1490
+msgid "Swedish Krona"
+msgstr "Coroană suedeză"
+
+#: views/kmymoneyview.cpp:1491
+msgid "Swiss Franc"
+msgstr "Franc elveţian"
+
+#: views/kmymoneyview.cpp:1492
+msgid "Syrian Pound"
+msgstr "Lira siriană"
+
+#: views/kmymoneyview.cpp:1493
+msgid "Taiwan Dollar"
+msgstr "Dolar taiwanez"
+
+#: views/kmymoneyview.cpp:1494
+msgid "Tajikistan Somani"
+msgstr "Somani Tajikistan"
+
+#: views/kmymoneyview.cpp:1495
+msgid "Tanzanian Shilling"
+msgstr "Şiling tanzanian"
+
+#: views/kmymoneyview.cpp:1496
+msgid "Thai Baht"
+msgstr "Baht Thailanda"
+
+#: views/kmymoneyview.cpp:1497
+msgid "Tongan Pa'anga"
+msgstr "Pa'anga Tonga"
+
+#: views/kmymoneyview.cpp:1498
+msgid "Trinidad and Tobago Dollar"
+msgstr "Dolar Trinidad şi Tobago"
+
+#: views/kmymoneyview.cpp:1499
+msgid "Tunisian Dinar"
+msgstr "Dinar tunisian"
+
+#: views/kmymoneyview.cpp:1500
+msgid "Turkish Lira (new)"
+msgstr "Liră turcească (nouă)"
+
+#: views/kmymoneyview.cpp:1501
+msgid "Turkmenistan Manat"
+msgstr "Manat Turkmenistan"
+
+#: views/kmymoneyview.cpp:1502
+msgid "US Dollar"
+msgstr "Dolar american"
+
+#: views/kmymoneyview.cpp:1503
+msgid "Uganda Shilling"
+msgstr "Şiling ugandez"
+
+#: views/kmymoneyview.cpp:1504
+msgid "Ukraine Hryvnia"
+msgstr "Hryvnia Ukraine"
+
+#: views/kmymoneyview.cpp:1505
+msgid "United Arab Emirates Dirham"
+msgstr "Dirham United Arab Emirates"
+
+#: views/kmymoneyview.cpp:1506
+msgid "Uruguayan Peso"
+msgstr "Peso Uruguay"
+
+#: views/kmymoneyview.cpp:1507
+msgid "Uzbekistani Sum"
+msgstr "Sum Uzbekistan"
+
+#: views/kmymoneyview.cpp:1508
+msgid "Vanuatu Vatu"
+msgstr "Vatu Vanuatu"
+
+#: views/kmymoneyview.cpp:1509
+msgid "Venezuelan Bolivar"
+msgstr "Bolivar Venezuela"
+
+#: views/kmymoneyview.cpp:1510
+msgid "Vietnamese Dong"
+msgstr "Dong vietnamez"
+
+#: views/kmymoneyview.cpp:1511
+msgid "Yugoslav Dinar"
+msgstr "Dinar iugoslav"
+
+#: views/kmymoneyview.cpp:1512
+msgid "Zambian Kwacha"
+msgstr "Kwacha Zambia"
+
+#: views/kmymoneyview.cpp:1513
+msgid "Zimbabwe Dollar"
+msgstr "Dolar Zimbabwe"
+
+#: views/kmymoneyview.cpp:1515
+msgid "Gold"
+msgstr "Aur"
+
+#: views/kmymoneyview.cpp:1516
+msgid "Palladium"
+msgstr "Paladiu"
+
+#: views/kmymoneyview.cpp:1517
+msgid "Platinum"
+msgstr "Platină"
+
+#: views/kmymoneyview.cpp:1518
+msgid "Silver"
+msgstr "Argint"
+
+#: views/kmymoneyview.cpp:1551
+msgid "Austrian Schilling"
+msgstr "Şiling austriac"
+
+#: views/kmymoneyview.cpp:1552
+msgid "German Mark"
+msgstr "Marcă germană"
+
+#: views/kmymoneyview.cpp:1553
+msgid "French Franc"
+msgstr "Franc francez"
+
+#: views/kmymoneyview.cpp:1554
+msgid "Italian Lira"
+msgstr "Liră italiană"
+
+#: views/kmymoneyview.cpp:1555
+msgid "Spanish Peseta"
+msgstr "Peseta spaniolă"
+
+#: views/kmymoneyview.cpp:1556
+msgid "Dutch Guilder"
+msgstr "Gulden olandez"
+
+#: views/kmymoneyview.cpp:1557
+msgid "Belgian Franc"
+msgstr "Franc belgian"
+
+#: views/kmymoneyview.cpp:1558
+msgid "Luxembourg Franc"
+msgstr "Franc Luxembourg "
+
+#: views/kmymoneyview.cpp:1559
+msgid "Portuguese Escudo"
+msgstr "Escudo portughez"
+
+#: views/kmymoneyview.cpp:1560
+msgid "Irish Pound"
+msgstr "Liră irlandeză"
+
+#: views/kmymoneyview.cpp:1561
+msgid "Finnish Markka"
+msgstr "Marcă finlandeză"
+
+#: views/kmymoneyview.cpp:1562
+msgid "Greek Drachma"
+msgstr "Drachma grecească"
+
+#: views/kmymoneyview.cpp:1564
+msgid "Romanian Leu"
+msgstr "Leu românesc"
+
+#: views/kmymoneyview.cpp:1566
+msgid "Russian Ruble (old)"
+msgstr "Rubla rusească (veche)"
+
+#: views/kmymoneyview.cpp:1568
+msgid "Slovenian Tolar"
+msgstr "Taler sloven"
+
+#: views/kmymoneyview.cpp:1571
+msgid "Turkish Lira"
+msgstr "Liră turcească"
+
+#: views/kmymoneyview.cpp:1574
+msgid "Maltese Lira"
+msgstr "Liră malteză"
+
+#: views/kmymoneyview.cpp:1575
+msgid "Cyprus Pound"
+msgstr "Liră cipriotă"
+
+#: views/kmymoneyview.cpp:1578
+msgid "Slovak Koruna"
+msgstr "Coroană slovacă"
+
+#: views/kmymoneyview.cpp:1888
+msgid ""
+"The account \"%1\" was previously created as loan account but some "
+"information is missing. The new loan wizard will be started to collect all "
+"relevant information. Please use a KMyMoney version >= 0.8.7 and < 0.9 to "
+"correct the problem."
+msgstr ""
+"Contul \"%1\" a fost creat anterior drept cont debitor, dar anumite "
+"informaţii lipsesc. Vrăjitorul pentru debit nou va începe să colecteze toate "
+"informaţiile necesare. Vă rog să folosiţi o versiune de KMyMoney mai mare "
+"sau egală cu 0.8.7 şi mai mică de 0.9 pentru a corecta această problemă."
+
+#: views/kmymoneyview.cpp:1892
+msgid "Account problem"
+msgstr "Problemă de cont"
+
+#: views/kmymoneyview.cpp:1941
+msgid "Unable to add schedule: "
+msgstr "Nu s-a putut adăuga transferul programat: "
+
+#: views/kmymoneyview.cpp:1970
+msgid "Fix transactions"
+msgstr "Repară tranzacţiile"
+
+#: views/kaccountsview.cpp:522 views/kinstitutionsview.cpp:300
+msgid "Net Worth: "
+msgstr "Valoare netă: "
+
+#: dialogs/rc.cpp:108 dialogs/rc.cpp:163 dialogs/rc.cpp:250 dialogs/rc.cpp:755
+#: dialogs/rc.cpp:830 views/kinvestmentview.cpp:77 widgets/register.cpp:572
+msgid "Quantity"
+msgstr "Cantitate"
+
+#: views/kscheduledlistitem.cpp:137
+msgid "Finished"
+msgstr "Finalizate"
+
+#: views/kbudgetview.cpp:109
+msgid "Creates a new budget"
+msgstr "Creează un buget nou"
+
+#: views/kbudgetview.cpp:110
+msgid "Use this to create a new empty budget."
+msgstr "Foloseşte asta pentru a crea un buget nou şi gol."
+
+#: views/kbudgetview.cpp:116
+msgid "Rename the current selected budget"
+msgstr "Redenumeşte bugetul selectat curent."
+
+#: views/kbudgetview.cpp:117
+msgid "Use this to start renaming the selected budget."
+msgstr "Foloseşte asta pentru a începe redenumirea bugetului selectat."
+
+#: views/kbudgetview.cpp:123
+msgid "Delete the current selected budget"
+msgstr "Şterge bugetul selectat curent"
+
+#: views/kbudgetview.cpp:124
+msgid "Use this to delete the selected budget."
+msgstr "Foloseşte asta pentru a şterge bugetul selectat curent."
+
+#: views/kbudgetview.cpp:130
+msgid "Accepts the entered values and stores the budget"
+msgstr "Acceptă valorile introduse şi salvează bugetul"
+
+#: views/kbudgetview.cpp:131
+msgid "Use this to store the modified data."
+msgstr "Foloseşte asta pentru a salva datele modificate."
+
+#: views/kbudgetview.cpp:137
+msgid "Revert budget to last saved state"
+msgstr "Readu bugetul la ultima stare salvată"
+
+#: views/kbudgetview.cpp:138
+msgid "Use this to discard the modified data."
+msgstr "Foloseşte asta pentru a descărca datele modificate."
+
+#: views/kbudgetview.cpp:489
+msgid "Do you want to save the changes for <b>%1</b>"
+msgstr "Doriţi să slavaţi modificările pentru <b>%1</b>"
+
+#: views/kbudgetview.cpp:610
+msgid ""
+"A budget with the name '%1' already exists. It is not advisable to have "
+"multiple budgets with the same identification name. Are you sure you would "
+"like to rename the budget?"
+msgstr ""
+"Un buget cu numele '%1' deja există. Nu este recomandat să aveţi mai multe "
+"bugete cu acelaşi nume de identificare. Sunteţi sigur că doriţi să "
+"redenumiţi bugetul?"
+
+#: views/kbudgetview.cpp:635 views/kbudgetview.cpp:750
+msgid "Unable to modify budget"
+msgstr "Nu s-a putut modifica bugetul"
+
+#: views/kbudgetview.cpp:736
+msgid "Unable to reset budget"
+msgstr "Nu s-a putut reseta bugetul"
+
+#: views/rc.cpp:1
+msgid "List"
+msgstr "Listă"
+
+#: views/rc.cpp:2 views/rc.cpp:20
+msgid "Collapse all accounts in the list"
+msgstr "Restrânge toate conturile din listă"
+
+#: views/rc.cpp:3 views/rc.cpp:21
+msgid "Expand all accounts in the list"
+msgstr "Extinde toate conturile din listă"
+
+#: views/rc.cpp:4
+msgid "Icons"
+msgstr "Iconiţe"
+
+#: views/rc.cpp:5 views/rc.cpp:22
+msgid "Note: Unused categories are not shown as selected by settings."
+msgstr "Notă: Categoriile nefolosite nu sunt afişate ca selectate în setări."
+
+#: views/rc.cpp:6 views/rc.cpp:23 views/rc.cpp:54
+msgid "Total Profits:"
+msgstr "Total profituri:"
+
+#: views/rc.cpp:7
+msgid "Your budgets"
+msgstr "Bugetele dumneavoastră"
+
+#: dialogs/rc.cpp:340 dialogs/rc.cpp:841 dialogs/settings/rc.cpp:124
+#: views/rc.cpp:8 widgets/rc.cpp:48 widgets/rc.cpp:150
+msgid "New"
+msgstr "Nou"
+
+#: views/rc.cpp:9
+msgid "Ren"
+msgstr "Ren"
+
+#: views/rc.cpp:10
+msgid "Del"
+msgstr "Şters"
+
+#: views/rc.cpp:11
+msgid "Res"
+msgstr "Res"
+
+#: views/rc.cpp:12
+msgid "Upd"
+msgstr "Actualiz."
+
+#: views/rc.cpp:15
+msgid "Hide unused budget categories"
+msgstr "Ascunde cagetoriile de buget nefolosite"
+
+#: views/rc.cpp:16
+msgid "Assignments"
+msgstr "Atribuiri"
+
+#: views/rc.cpp:19
+msgid "Include subaccounts"
+msgstr "Include subconturi"
+
+#: dialogs/settings/rc.cpp:23 views/rc.cpp:24
+msgid "Forecast Settings"
+msgstr "Setări estimare"
+
+#: views/rc.cpp:25
+msgid "Days to Forecast:"
+msgstr "Zile de estimat:"
+
+#: views/rc.cpp:26
+msgid "Days of Accounts Cycle:"
+msgstr "Numărul de zile ale unui ciclu de conturi:"
+
+#: dialogs/settings/rc.cpp:25 views/rc.cpp:27
+msgid "Day of Month to start Forecast:"
+msgstr "Ziua din lună pentru începerea estimării:"
+
+#: views/rc.cpp:28
+msgid "Historic Cycles:"
+msgstr "Cicluri istorice:"
+
+#: views/rc.cpp:29
+msgid "Chart Detail:"
+msgstr "Detaliile graficului:"
+
+#: views/rc.cpp:30 widgets/kmymoneyaccountselector.cpp:64 widgets/rc.cpp:65
+msgid "All"
+msgstr "Tot"
+
+#: views/rc.cpp:31 widgets/rc.cpp:66
+msgid "Top-Level"
+msgstr "Nivelul superior"
+
+#: views/rc.cpp:32 widgets/rc.cpp:67
+msgid "Groups"
+msgstr "Grupuri"
+
+#: views/rc.cpp:33 widgets/rc.cpp:68
+msgid "Totals"
+msgstr "Totaluri"
+
+#: views/rc.cpp:34
+msgid "<p>Choose what level of detail to show on the chart.</p>"
+msgstr ""
+"<p>Alegeţi ce fel de conturi să fie afişate ca rânduri ale acestui raport.</"
+"p>"
+
+#: views/rc.cpp:35
+msgid "Current Forecast Method:"
+msgstr "Metoda curentă de estimare:"
+
+#: views/rc.cpp:36
+msgid "method"
+msgstr "metodă"
+
+#: dialogs/settings/rc.cpp:32 views/rc.cpp:37
+msgid "History Forecast Method"
+msgstr "Metoda de estimare bazată pe istoric"
+
+#: dialogs/settings/rc.cpp:33 views/rc.cpp:38
+msgid "Simple Moving Average"
+msgstr "Mutarea mediei simplă"
+
+#: dialogs/settings/rc.cpp:34 views/rc.cpp:39
+msgid "Weighted Moving Average"
+msgstr "Mutarea mediei extinsă"
+
+#: dialogs/settings/rc.cpp:35 views/rc.cpp:40
+msgid "Linear Regression"
+msgstr "Regresie liniară"
+
+#: dialogs/keditloanwizard.cpp:315 dialogs/rc.cpp:628 dialogs/rc.cpp:647
+#: views/rc.cpp:43
+msgid "Summary"
+msgstr "Conţinut"
+
+#: views/rc.cpp:45
+msgid "0 days"
+msgstr "0 zile"
+
+#: views/rc.cpp:46
+msgid "30 days"
+msgstr "30 de zile"
+
+#: views/rc.cpp:47
+msgid "60 days"
+msgstr "60 de zile"
+
+#: views/rc.cpp:48
+msgid "90 days"
+msgstr "90 de zile"
+
+#: views/rc.cpp:49
+msgid "New Item"
+msgstr "Înregistrare nouă"
+
+#: views/rc.cpp:50 widgets/rc.cpp:64
+msgid "Detail"
+msgstr "Detalii"
+
+#: views/rc.cpp:51
+msgid "Advanced"
+msgstr "Avansate"
+
+#: views/rc.cpp:52
+msgid "Budget Forecast"
+msgstr "Estimare a bugetului"
+
+#: views/rc.cpp:55
+msgid "Investment Summary"
+msgstr "Sumarul investiţiei"
+
+#: views/rc.cpp:56
+msgid "Select Account:"
+msgstr "Alegeti un cont:"
+
+#: views/rc.cpp:57
+msgid ""
+"Summary of the equities contained in this account, showing your holdings and "
+"their most recent price."
+msgstr ""
+"Sumarul activelor conţinute în acest cont, care vă afişează ceea ce deţineţi "
+"şi împreună cu preţul cel mai recent."
+
+#: views/rc.cpp:60 widgets/register.cpp:564
+msgid "No."
+msgstr "Nr."
+
+#: views/rc.cpp:64
+msgid "Balance: "
+msgstr "Soldul: "
+
+#: views/rc.cpp:65
+msgid "Address"
+msgstr "Adresă"
+
+#: views/rc.cpp:66
+msgid "Payee Information"
+msgstr "Informaţii beneficiar/plătitor"
+
+#: views/rc.cpp:67
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#: dialogs/rc.cpp:393 views/rc.cpp:69
+msgid "Telephone/Fax:"
+msgstr "Telefon/Fax:"
+
+#: views/rc.cpp:70
+msgid "Notes"
+msgstr "Note"
+
+#: views/rc.cpp:71
+msgid "Address:"
+msgstr "Adresă:"
+
+#: views/rc.cpp:72
+msgid "Matching"
+msgstr "Asociere"
+
+#: views/rc.cpp:73
+msgid "Transaction Matching"
+msgstr "Asociere tranzacţii"
+
+#: views/rc.cpp:74
+msgid "No matching"
+msgstr "Fără asociere"
+
+#: views/rc.cpp:75
+msgid "Match on Payee name"
+msgstr "Asociere cu numele de beneficiar/plătitor"
+
+#: views/rc.cpp:76
+msgid "Match on a name listed below"
+msgstr "Asociere cu un nume listat mai jos"
+
+#: views/rc.cpp:77
+msgid "List of matching names"
+msgstr "Lista asocierilor"
+
+#: views/rc.cpp:78
+msgid ""
+"This list contains the names that will match this payee if a transaction is "
+"imported from an external source. Keep in mind, that you can specify regular "
+"expressions here."
+msgstr ""
+"Această listă conţine nume care vor asocia acest beneficiar/plătitor dacă o "
+"tranzacţie este importată dintr-o sursă externă. Nu uitaţi că puteţi "
+"specifica aici şi expresii regulate."
+
+#: views/rc.cpp:79
+msgid "Ignore Case"
+msgstr "Ignoră diferenţa dintre majuscule şi minuscule"
+
+#: views/rc.cpp:80
+msgid "Default Account"
+msgstr "Cont implicit"
+
+#: views/rc.cpp:81
+msgid ""
+"Use the default account for\n"
+"new transactions with this payee"
+msgstr ""
+"Folosiţi contul implicit pentru\n"
+" tranzacții noi cu acest beneficiar/plătitor"
+
+#: views/rc.cpp:82
+msgid "Default category:"
+msgstr "Categorie implicită"
+
+#: views/rc.cpp:83
+msgid "Suggest a category"
+msgstr "Sugerează o categorie"
+
+#: views/rc.cpp:85
+msgid "New Scheduled transaction..."
+msgstr "Tranzacţie programată nouă"
+
+#: views/rc.cpp:86
+msgid "Filter Accounts"
+msgstr "Filtrează conturi"
+
+#: views/rc.cpp:87
+msgid "List View"
+msgstr "Vizualizare listă"
+
+#: views/rc.cpp:88
+msgid "Calendar View"
+msgstr "Vizualizare calendar"
+
+#: views/kinstitutionsview.cpp:43
+msgid "Institution/Account"
+msgstr "Instituţie/Cont"
+
+#: views/kinstitutionsview.cpp:157
+msgid "Accounts with no institution assigned"
+msgstr "Conturi pentru care nu s-a ales nicio instituţie"
+
+#: views/kscheduledview.cpp:70
+msgid "Type/Name"
+msgstr "Tip/Nume"
+
+#: views/kscheduledview.cpp:75
+msgid "Frequency"
+msgstr "Frecvenţă"
+
+#: views/kscheduledview.cpp:157
+msgid "Unable to load accounts: "
+msgstr "Conturile nu au putut fi încărcate: "
+
+#: views/kscheduledview.cpp:171 views/kscheduledview.cpp:429
+#: views/kscheduledview.cpp:445 widgets/kmymoneyscheduledcalendar.cpp:46
+msgid "Bills"
+msgstr "Facturi"
+
+#: dialogs/rc.cpp:232 dialogs/rc.cpp:706 views/kscheduledview.cpp:172
+#: views/kscheduledview.cpp:431 views/kscheduledview.cpp:447
+#: widgets/kmymoneyscheduledcalendar.cpp:47
+msgid "Deposits"
+msgstr "Depozite"
+
+#: views/kscheduledview.cpp:173 views/kscheduledview.cpp:435
+#: views/kscheduledview.cpp:451
+msgid "Loans"
+msgstr "Debite"
+
+#: views/kscheduledview.cpp:357
+msgid "Error activating context menu"
+msgstr "Eroare la activarea meniului contextual"
+
+#: views/kscheduledview.cpp:385
+msgid "Error executing item"
+msgstr "Eroare la executarea itemului"
+
+#: views/kscheduledview.cpp:419
+msgid "Unable to filter account"
+msgstr "Nu s-a putut filtra contul"
+
+#: views/kgloballedgerview.cpp:508
+msgid "Statement Details"
+msgstr "Detaliile bilanţului"
+
+#: views/kgloballedgerview.cpp:512
+msgid "Statement Deposit Details"
+msgstr "Detaliie depozitelor din bilanţ"
+
+#: views/kgloballedgerview.cpp:513
+msgid "Statement Payment Details"
+msgstr "Detaliile comenzii de plată"
+
+#: views/kgloballedgerview.cpp:642
+msgid "%1 deposits (%3), %2 payments (%4)"
+msgstr "%1 depozite (%3), %2 plăţi (%4)"
+
+#: views/kgloballedgerview.cpp:649
+msgid "%1 payments (%2)"
+msgstr "%1 plăţi (%2)"
+
+#: views/kgloballedgerview.cpp:653
+msgid "%1 deposits (%2)"
+msgstr "%1 depozite (%2)"
+
+#: views/kgloballedgerview.cpp:721
+#, c-format
+msgid "Statement: %1"
+msgstr "Extras: %1"
+
+#: views/kgloballedgerview.cpp:722 views/kgloballedgerview.cpp:736
+#, c-format
+msgid "Cleared: %1"
+msgstr "Verificate: %1"
+
+#: views/kgloballedgerview.cpp:723
+#, c-format
+msgid "Difference: %1"
+msgstr "Diferenţă: %1"
+
+#: views/kgloballedgerview.cpp:730
+#, c-format
+msgid "Last reconciled: %1"
+msgstr "Ultima reconciliere: %1"
+
+#: views/kgloballedgerview.cpp:732
+msgid "Never reconciled"
+msgstr "Nu s-a făcut nicio reconciliere până acum"
+
+#: views/kgloballedgerview.cpp:772
+msgid "Investment value: %1%2"
+msgstr "Valoarea investiţiilor: %1 %2s"
+
+#: views/kgloballedgerview.cpp:1040
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to continue to edit the transactions anyway?"
+msgstr ""
+"Cel puţin o parte a tranzacţiilor selectate a fost reconciliată. Vrei oricum "
+"să continui modificare tranzacţiilor?"
+
+#: views/kgloballedgerview.cpp:1051
+msgid ""
+"At least one split of the selected transactions has been frozen. Editing the "
+"transactions is therefore prohibited."
+msgstr ""
+"Cel puţin o parte a tranzacţiilor selectate a fost îngheţată. De aceea "
+"modificarea tranzacţiei e interzisă."
+
+#: views/kgloballedgerview.cpp:1053
+msgid "Transaction already frozen"
+msgstr "Tranzacţie deja îngheţată"
+
+#: views/kgloballedgerview.cpp:1058
+msgid ""
+"At least one split of the selected transaction references an account that "
+"has been closed. Editing the transactions is therefore prohibited."
+msgstr ""
+"Cel puţin o parte din tranzacţia selectată se referă la un cont care a fost "
+"închis. Modificarea tranzacţiei este de aceea interzisă."
+
+#: views/kgloballedgerview.cpp:1060
+msgid "Account closed"
+msgstr "Cont închis"
+
+#: views/kgloballedgerview.cpp:1349
+msgid "Cannot create transactions when no account is selected."
+msgstr "Nu pot fi create tranzacţii când nu e selectat niciun cont."
+
+#: views/kgloballedgerview.cpp:1354
+msgid "Cannot create transactions in the context of a category."
+msgstr "Nu pot fi create tranzacţii în contextul unei categorii."
+
+#: views/kgloballedgerview.cpp:1358
+msgid "Cannot create transactions in a closed account."
+msgstr "Nu pot fi create tranzacţii într-un cont închis."
+
+#: views/kgloballedgerview.cpp:1370
+msgid "Cannot process transaction with focus if it is not selected."
+msgstr ""
+"Nu poate fi procesată tranzacţia care deţine focusul, dacă nu e selectată."
+
+#: views/kgloballedgerview.cpp:1400
+msgid "Cannot edit transactions with frozen splits."
+msgstr "Nu pot fi modificate tranzacţii care au părţi îngheţate."
+
+#: views/kgloballedgerview.cpp:1411
+msgid "Cannot edit transactions in the context of a category."
+msgstr "Nu pot fi modificate tranzacţii în contextul unei categorii."
+
+#: views/kgloballedgerview.cpp:1430
+msgid ""
+"Cannot edit investment transactions and non-investment transactions together."
+msgstr ""
+"Nu pot fi modificate împreună tranzacţii de investiţii şi fără investiţi."
+
+#: views/kgloballedgerview.cpp:1438
+msgid "Cannot edit multiple split transactions at once."
+msgstr "Nu pot fi modificate deodată tranzacţii compuse din mai multe părţi."
+
+#: views/kgloballedgerview.cpp:1448
+msgid "Cannot edit investment transactions in the context of this account."
+msgstr "Nu pot fi modificate tranzacţii în contextul acestui cont."
+
+#: views/kforecastview.cpp:164
+msgid "Scheduled"
+msgstr "Programată"
+
+#: views/kforecastview.cpp:169
+msgid "History"
+msgstr "Istorie"
+
+#: views/kforecastview.cpp:296
+msgid "The balance of %2 is below the minimum balance %3 today."
+msgstr "Astăzi soldul pentru %2 este sub soldul minim %3."
+
+#: views/kforecastview.cpp:301 views/khomeview.cpp:1043
+msgid "The balance of %1 will drop below the minimum balance %2 in %3 days."
+msgstr "Soldul pentru %1 va cădea sub soldul minim %2 în %3 zile."
+
+#: views/kforecastview.cpp:318 views/khomeview.cpp:1059
+msgid "The balance of %1 is below %2 today."
+msgstr "Astăzi soldul pentru %1 este sub %2."
+
+#: views/kforecastview.cpp:323 views/khomeview.cpp:1064
+msgid "The balance of %1 is above %2 today."
+msgstr "Astăzi soldul pentru %1 este peste %2."
+
+#: views/kforecastview.cpp:330 views/khomeview.cpp:1070
+msgid "The balance of %1 will drop below %2 in %3 days."
+msgstr "Soldul pentru %1 va cădea sub %2 în %3 zile."
+
+#: views/kforecastview.cpp:335 views/khomeview.cpp:1075
+msgid "The balance of %1 will raise above %2 in %3 days."
+msgstr "Soldul pentru %1 va urca peste %2 în %3 zile."
+
+#: views/kforecastview.cpp:348
+msgid "The account %1 is decreasing %2 per cycle."
+msgstr "Contul %1 scade cu %2 pe ciclu."
+
+#: views/kforecastview.cpp:404 widgets/kmymoneyaccounttreeforecast.cpp:114
+#, c-format
+msgid "Min Bal %1"
+msgstr "Sold min. %1"
+
+#: views/kforecastview.cpp:406 widgets/kmymoneyaccounttreeforecast.cpp:116
+#, c-format
+msgid "Min Date %1"
+msgstr "Dată min. %1"
+
+#: views/kforecastview.cpp:409 widgets/kmymoneyaccounttreeforecast.cpp:119
+#, c-format
+msgid "Max Bal %1"
+msgstr "Sold max. %1"
+
+#: views/kforecastview.cpp:411 widgets/kmymoneyaccounttreeforecast.cpp:121
+#, c-format
+msgid "Max Date %1"
+msgstr "Dată max. %1"
+
+#: views/kforecastview.cpp:413 widgets/kmymoneyaccounttreeforecast.cpp:123
+msgid "Average"
+msgstr "Medie"
+
+#: views/kforecastview.cpp:649 views/khomeview.cpp:268 views/khomeview.cpp:275
+msgid "Networth Forecast"
+msgstr "Estimarea valorii nete"
+
+#: views/khomeview.cpp:203
+msgid "Your Financial Summary"
+msgstr "Sumarul dumneavoastră financiar"
+
+#: views/khomeview.cpp:218
+msgid "Preferred Accounts"
+msgstr "Conturi preferate"
+
+#: views/khomeview.cpp:225 views/khomeview.cpp:227
+msgid "Payment Accounts"
+msgstr "Conturi de plată"
+
+#: views/khomeview.cpp:256
+msgid "Show KMyMoney welcome page"
+msgstr "Afişează pagina de bun venit a programului KMyMoney"
+
+#: views/khomeview.cpp:409
+msgid "Overdue payments"
+msgstr "Plăţi cu termen depăşit"
+
+#: views/khomeview.cpp:424 views/khomeview.cpp:497 views/khomeview.cpp:531
+msgid "Balance after"
+msgstr "Soldul după"
+
+#: views/khomeview.cpp:482
+msgid "Today's payments"
+msgstr "Plăţile de astăzi"
+
+#: views/khomeview.cpp:516
+msgid "Future payments"
+msgstr "Plăţi viitoare"
+
+#: views/khomeview.cpp:585
+msgid "Less..."
+msgstr "Mai puţin..."
+
+#: views/khomeview.cpp:587
+msgid "More..."
+msgstr "Mai mult..."
+
+#: views/khomeview.cpp:622
+msgid "Enter schedule"
+msgstr "Introduce plata programată"
+
+#: views/khomeview.cpp:624
+msgid "Skip schedule"
+msgstr "Omite programarea"
+
+#: views/khomeview.cpp:627
+msgid "Edit schedule"
+msgstr "Modifică plata programată"
+
+#: views/khomeview.cpp:631
+msgid " (%1 payments)"
+msgstr "(%1 plăţi)"
+
+#: views/khomeview.cpp:771
+msgid "To Minimum Balance / Maximum Credit"
+msgstr "La soldul minim / Credit maxim"
+
+#: views/khomeview.cpp:964
+msgid "%1 Day Forecast"
+msgstr "Estimare pe %1 zile"
+
+#: views/khomeview.cpp:973 widgets/kmymoneyaccounttreeforecast.cpp:67
+msgid "%1 days"
+msgstr "%1 zile"
+
+#: views/khomeview.cpp:1039
+msgid "The balance of %1 is below the minimum balance %2 today."
+msgstr "Astăzi soldul pentru %1 este sub soldul minim %2."
+
+#: views/khomeview.cpp:1175
+msgid ""
+"Before KMyMoney can give you detailed information about your financial "
+"status, you need to create at least one account. Until then, KMyMoney shows "
+"the welcome page instead."
+msgstr ""
+"Înainte ca KMyMoney să vă poată da informaţii detaliate despre starea "
+"dumneavoastră financiară, trebuie să creaţi cel puţin un cont. Până atunci, "
+"KMyMoney vă arată pagina de bun venit."
+
+#: views/khomeview.cpp:1258
+msgid "Assets and Liabilities Summary"
+msgstr "Sumarul activelor şi pasivelor"
+
+#: views/khomeview.cpp:1262
+msgid "Asset Accounts"
+msgstr "Conturi de active"
+
+#: views/khomeview.cpp:1270
+msgid "Liability Accounts"
+msgstr "Conturi de pasive"
+
+#: views/khomeview.cpp:1348
+msgid "Total Assets"
+msgstr "Total active"
+
+#: views/khomeview.cpp:1354
+msgid "Total Liabilities"
+msgstr "Total pasive"
+
+#: views/khomeview.cpp:1399
+msgid "Current Month Summary"
+msgstr "Sumarul lunii curente"
+
+#: views/khomeview.cpp:1403 views/khomeview.cpp:1440
+msgid "Budgeted"
+msgstr "Bugetate"
+
+#: views/khomeview.cpp:1433
+msgid "Budget Overruns"
+msgstr "Depăşiri bugetare"
+
+#: views/khomeview.cpp:1502
+msgid "No Budget Categories have been overrun"
+msgstr "Nicio categorie de buget nu a avut depăşiri"
+
+#: views/khomeview.cpp:1801
+msgid "Cash Flow Summary"
+msgstr "Sumarul fluxului financiar"
+
+#: views/khomeview.cpp:1808
+msgid "Income and Expenses of Current Month"
+msgstr "Venituri şi cheltuieli în această lună"
+
+#: views/khomeview.cpp:1816
+msgid "Scheduled Income"
+msgstr "Venit programat"
+
+#: views/khomeview.cpp:1819
+msgid "Expenses"
+msgstr "Cheltuieli"
+
+#: views/khomeview.cpp:1822
+msgid "Scheduled Expenses"
+msgstr "Cheltuieli programate"
+
+#: views/khomeview.cpp:1850
+msgid "Liquid Assets and Liabilities"
+msgstr "Active şi pasive lichide"
+
+#: views/khomeview.cpp:1855
+msgid "Liquid Assets"
+msgstr "Active lichide"
+
+#: views/khomeview.cpp:1858
+msgid "Transfers to Liquid Liabilities"
+msgstr "Transferuri în pasive lichide"
+
+#: views/khomeview.cpp:1861
+msgid "Liquid Liabilities"
+msgstr "Pasive lichide"
+
+#: views/khomeview.cpp:1864
+msgid "Other Transfers"
+msgstr "Alte transferuri"
+
+#: views/khomeview.cpp:1908
+msgid "Cash Flow Status"
+msgstr "Starea fluxului financiar"
+
+#: views/khomeview.cpp:1914
+msgid "Expected Liquid Assets"
+msgstr "Active lichide estimate"
+
+#: views/khomeview.cpp:1917
+msgid "Expected Liquid Liabilities"
+msgstr "Pasive lichide estimate"
+
+#: views/khomeview.cpp:1920
+msgid "Expected Profit/Loss"
+msgstr "Profit estimat/Pierdere estimată"
+
+#: plugins/ofximport/ofximporterplugin.cpp:64
+msgid "OFX..."
+msgstr "OFX..."
+
+#: plugins/ofximport/ofximporterplugin.cpp:69
+msgid "OFX import file selection"
+msgstr "Selecţie pentru importul de fişier QFX"
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid ""
+"Unable to import %1 using the OFX importer plugin. This file is not the "
+"correct format."
+msgstr ""
+"Nu s-a putut importa %1 folosind plugin-ul de import OFX. Acest fişier nu "
+"are formatul corect."
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid "Incorrect format"
+msgstr "Format incorect"
+
+#: plugins/ofximport/ofximporterplugin.cpp:122
+msgid "Unable to parse file"
+msgstr "Fişierul nu a putut fi prelucrat"
+
+#: plugins/ofximport/ofximporterplugin.cpp:576
+msgid "Online settings"
+msgstr "Setări online"
+
+#: plugins/ofximport/ofximporterplugin.cpp:635
+#, c-format
+msgid "Error connecting to bank: %1"
+msgstr "Eroare la conectarea băncii: %1"
+
+#: plugins/ofximport/ofximporterplugin.cpp:646
+msgid ""
+"Unable to import %1 using the OFX importer plugin. The plugin returned the "
+"following error:<p>%2"
+msgstr ""
+"Nu s-a putut importa %1 folosind plugin-ul de import OFX. Plugin-ul a "
+"returnat următoarea eroare: <p>%2"
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Importing process terminated unexpectedly."
+msgstr "Procesul de import s-a terminat în mod neaşteptat."
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Failed to import all statements."
+msgstr "Nu au putut fi importate toate extrasele de cont."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "The HTTP request failed."
+msgstr "Cererea HTTP a eşuat"
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "Failed"
+msgstr "Greşit"
+
+#: plugins/ofximport/ofxpartner.cpp:410
+msgid "Cannot open file %1 for writing"
+msgstr "Nu s-a putut deschide fişierul %1 pentru scriere"
+
+#: plugins/ofximport/ofxpartner.cpp:414
+msgid "OFX setup error"
+msgstr "Eroare de configurare OFX"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid "Loading banklist"
+msgstr "Încarcă lista băncilor"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid ""
+"Getting list of banks from http://moneycentral.msn.com/\n"
+"This may take some time depending on the available bandwidth."
+msgstr ""
+"Obţinerea listei băncilor de la http://moneycentral.msn.com/\n"
+"Aceasta ar putea dura ceva vreme, în funcţie de lăţimea de bandă valabilă."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:155
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:199
+msgid "Supports online statements<br>"
+msgstr "Suportă extrase de cont online<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:157
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:201
+msgid "Supports investments<br>"
+msgstr "Suportă investiţii<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:159
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:203
+msgid "Supports bill payment (but not supported by KMyMoney yet)<br>"
+msgstr "Suportă plata facturii (dar încă nesuportat de KMyMoney)<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:163
+msgid "Does not support online banking</p>"
+msgstr "Nu există suport pentru serviciul bancar online</p>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:173
+msgid "Please choose a bank."
+msgstr "Vă rog, alegeţi o bancă."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:179
+msgid "Please fill all fields with values."
+msgstr "Introduceţi valori în toate câmpurile"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:271
+msgid "No suitable accounts were found at this bank."
+msgstr "Niciun asemenea cont nu s-a găsit la această bancă."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:283
+msgid "Please choose an account"
+msgstr "Vă rog, alegeţi un cont"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:386
+msgid "Server message: %1\n"
+msgstr "Mesajul serverului: %1\n"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+msgid "Your bank returned warnings when signing on"
+msgstr "Banca dumneavoastră a întors avertismente în timpul înregistrării"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+#, c-format
+msgid "WARNING %1"
+msgstr "AVERTISMENT %1"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+msgid "Error signing onto your bank"
+msgstr "Eroare la înregistrarea în banca dumneavoastră"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, c-format
+msgid "ERROR %1"
+msgstr "EROARE %1"
+
+#: plugins/ofximport/dialogs/konlinebankingstatus.cpp:59
+msgid "Enabled & configured"
+msgstr "Activat & configurat"
+
+#: plugins/ofximport/dialogs/rc.cpp:1
+msgid "OFX Direct Connect"
+msgstr "Conectare directă QFX"
+
+#: plugins/ofximport/dialogs/rc.cpp:2
+msgid "Contacting bank..."
+msgstr "Contactează banca..."
+
+#: plugins/ofximport/dialogs/rc.cpp:4
+msgid "Online Banking Account Setup"
+msgstr "Instalare a contului bancar online"
+
+#: plugins/ofximport/dialogs/rc.cpp:5
+msgid "Select Financial Institution"
+msgstr "Alege instituţia financiară"
+
+#: plugins/ofximport/dialogs/rc.cpp:6
+msgid "Please select your financial institution from the list below..."
+msgstr ""
+"Vă rog să selectaţi instituţia dumneavoastră financiară din lista de mai "
+"jos..."
+
+#: plugins/ofximport/dialogs/rc.cpp:7
+msgid "Automatic"
+msgstr "Automat"
+
+#: plugins/ofximport/dialogs/rc.cpp:8
+msgid "Financial Institution"
+msgstr "Instituţie financiară"
+
+#: plugins/ofximport/dialogs/rc.cpp:9
+msgid "Manual"
+msgstr "Manual"
+
+#: plugins/ofximport/dialogs/rc.cpp:10
+msgid "Org"
+msgstr "Org"
+
+#: plugins/ofximport/dialogs/rc.cpp:11
+msgid "FID"
+msgstr "FID"
+
+#: dialogs/settings/rc.cpp:120 plugins/ofximport/dialogs/rc.cpp:12
+#: widgets/rc.cpp:46
+msgid "URL"
+msgstr "URL"
+
+#: plugins/ofximport/dialogs/rc.cpp:13
+msgid "Enter Login Details"
+msgstr "Introduceţi detaliile de autentificare"
+
+#: plugins/ofximport/dialogs/rc.cpp:14
+msgid ""
+"Please enter the username and password you use to log into this bank for "
+"online banking. Please note that many banks require a separate signup, and "
+"assign a separate PIN or password just for online banking from home."
+msgstr ""
+"Vă rog să introduceţi numele de utilizator şi parola necesare pentru "
+"autentificarea la această bancă, pentru serviciul bancar online. Vă rog să "
+"ţineţi cont de faptul că multe bănci necesită o înregistrare separată şi "
+"acordă un PIN sau parolă separate pentru accesarea de acasă a serviciului "
+"bancar online."
+
+#: plugins/ofximport/dialogs/rc.cpp:15
+msgid "Connection Details"
+msgstr "Detalii ale conexiunii"
+
+#: plugins/ofximport/dialogs/rc.cpp:16
+msgid "Username"
+msgstr "Nume utilizator"
+
+#: plugins/ofximport/dialogs/rc.cpp:17 plugins/ofximport/dialogs/rc.cpp:36
+msgid "Header Version"
+msgstr "Versiunea antetului"
+
+#: plugins/ofximport/dialogs/rc.cpp:18 plugins/ofximport/dialogs/rc.cpp:37
+msgid "Identify as"
+msgstr "Identificat ca"
+
+#: dialogs/rc.cpp:742 plugins/ofximport/dialogs/rc.cpp:19
+msgid "Password"
+msgstr "Parolă"
+
+#: plugins/ofximport/dialogs/rc.cpp:20
+msgid "Select Account"
+msgstr "Alegeţi un cont"
+
+#: plugins/ofximport/dialogs/rc.cpp:21
+msgid ""
+"Please select the account from your financial institution from the list "
+"below which matches this account."
+msgstr ""
+"Vă rog să alegeţi din lista de mai jos contul din instituţia dumneavoastră "
+"financiară care se asociază cu acest cont."
+
+#: plugins/ofximport/dialogs/rc.cpp:24
+msgid "Bank"
+msgstr "Bancă"
+
+#: plugins/ofximport/dialogs/rc.cpp:25
+msgid "Branch"
+msgstr "Ramură"
+
+#: plugins/ofximport/dialogs/rc.cpp:26
+msgid "WizardPage"
+msgstr "PaginaExpertului"
+
+#: plugins/ofximport/dialogs/rc.cpp:27
+msgid ""
+"Congratulations! You have successfully set up your bank for online banking "
+"via OFX."
+msgstr ""
+"Felicitări! Aţi instalat cu succes setările pentru banca dumneavoastră "
+"pentru a folosi serviciile bancare online via OFX."
+
+#: plugins/ofximport/dialogs/rc.cpp:28
+msgid "Account Details"
+msgstr "Detalii cont"
+
+#: plugins/ofximport/dialogs/rc.cpp:29 plugins/ofximport/dialogs/rc.cpp:31
+msgid "&lt;Not configured&gt;"
+msgstr "&lt;Neconfigurat&gt;"
+
+#: plugins/ofximport/dialogs/rc.cpp:30
+msgid "BANK/BROKER:"
+msgstr "BANCA/BROKER:"
+
+#: plugins/ofximport/dialogs/rc.cpp:32
+msgid "Unavailable"
+msgstr "Indisponibil"
+
+#: plugins/ofximport/dialogs/rc.cpp:33
+msgid "ACCOUNT:"
+msgstr "CONT:"
+
+#: plugins/ofximport/dialogs/rc.cpp:34
+msgid "STATUS:"
+msgstr "STARE:"
+
+#: plugins/ofximport/dialogs/rc.cpp:35
+msgid "OFX Details"
+msgstr "Detalii OFX"
+
+#: plugins/ofximport/dialogs/rc.cpp:38
+msgid "Start date of import"
+msgstr "Importă de la data"
+
+#: plugins/ofximport/dialogs/rc.cpp:39
+msgid "To&day minus"
+msgstr "Minus de &azi"
+
+#: plugins/ofximport/dialogs/rc.cpp:40
+msgid "days"
+msgstr "zile"
+
+#: plugins/ofximport/dialogs/rc.cpp:41
+msgid "Last &update"
+msgstr "Ultima &actualizare"
+
+#: plugins/ofximport/dialogs/rc.cpp:42
+msgid "Pi&ck date"
+msgstr "Data a&legerii"
+
+#: plugins/ofximport/dialogs/rc.cpp:43
+msgid "Name is derived from"
+msgstr "Numele este derivat din"
+
+#: plugins/ofximport/dialogs/rc.cpp:44
+msgid "P&AYEEID"
+msgstr "INDETIFICATOR&BENEFICIAR"
+
+#: plugins/ofximport/dialogs/rc.cpp:45
+msgid "&NAME"
+msgstr "&NUME"
+
+#: plugins/ofximport/dialogs/rc.cpp:46
+msgid "field if both are present in download"
+msgstr "dacă ambele sunt prezente la descărcare"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:81
+msgid "Quicken Windows 2003"
+msgstr "Quicken Windows 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:82
+msgid "Quicken Windows 2004"
+msgstr "Quicken Windows 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:83
+msgid "Quicken Windows 2005"
+msgstr "Quicken Windows 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:84
+msgid "Quicken Windows 2006"
+msgstr "Quicken Windows 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:85
+msgid "Quicken Windows 2007"
+msgstr "Quicken Windows 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:86
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:111
+msgid "Quicken Windows 2008"
+msgstr "Quicken Windows 2008"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:89
+msgid "MS-Money 2003"
+msgstr "MS-Money 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:90
+msgid "MS-Money 2004"
+msgstr "MS-Money 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:91
+msgid "MS-Money 2005"
+msgstr "MS-Money 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:92
+msgid "MS-Money 2006"
+msgstr "MS-Money 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:93
+msgid "MS-Money 2007"
+msgstr "MS-Money 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:94
+msgid "MS-Money Plus"
+msgstr "MS-Money Plus"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:91
+msgid "Report Configuration"
+msgstr "Personalizarea raportului"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:117
+#: dialogs/kreportconfigurationfilterdlg.cpp:135
+msgid "Rows/Columns"
+msgstr "Rânduri/Coloane"
+
+#: dialogs/investtransactioneditor.cpp:203
+#: dialogs/investtransactioneditor.cpp:537
+#: dialogs/investtransactioneditor.cpp:579 dialogs/rc.cpp:103
+#: dialogs/rc.cpp:158 dialogs/rc.cpp:245 dialogs/rc.cpp:750 dialogs/rc.cpp:794
+#: widgets/kmymoneyaccountselector.cpp:182 widgets/register.cpp:64
+#: widgets/register.cpp:567 widgets/transaction.cpp:1500
+msgid "Security"
+msgstr "Titlu de valoare"
+
+#: dialogs/investtransactioneditor.cpp:211
+msgid "Asset account"
+msgstr "Cont de activ"
+
+#: dialogs/investtransactioneditor.cpp:1073
+msgid "Price/Share"
+msgstr "Preţ/acţiune"
+
+#: dialogs/kmergetransactionsdlg.cpp:39
+msgid "Merge Transactions"
+msgstr "Uneşte tranzacţiile"
+
+#: dialogs/kmergetransactionsdlg.cpp:40
+msgid "Are you sure you wish to merge these transactions?"
+msgstr "În mod sigur doriţi să uniţi aceste tranzacţii?"
+
+#: dialogs/kstartdlg.cpp:59
+msgid "Start Dialog"
+msgstr "Dialogul de start"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Templates"
+msgstr "Şabloane"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Select templates"
+msgstr "Selectează şabloane"
+
+#: dialogs/kstartdlg.cpp:80 dialogs/kstartdlg.cpp:119
+msgid "New KMyMoney document"
+msgstr "Document KMyMoney nou"
+
+#: dialogs/kstartdlg.cpp:90
+msgid "Open a KMyMoney document"
+msgstr "Deschide un document KMyMoney"
+
+#: dialogs/kstartdlg.cpp:96
+msgid ""
+"%1|KMyMoney files (*.kmy)\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|fişiere KMyMoney (*.kmy)\n"
+"%2|Toate fişierele (*.*)"
+
+#: dialogs/kstartdlg.cpp:102
+msgid "Recent Files"
+msgstr "Fişiere recente"
+
+#: dialogs/kstartdlg.cpp:217
+msgid "Blank Document"
+msgstr "Document gol"
+
+#: dialogs/knewbudgetdlg.cpp:71
+msgid "Please specify a budget name"
+msgstr "Vă rog să specificaţi numele bugetului"
+
+#: dialogs/kgncpricesourcedlg.cpp:48
+#, c-format
+msgid "Investment: %1"
+msgstr "Investiţie: %1"
+
+#: dialogs/kgncpricesourcedlg.cpp:49
+#, c-format
+msgid "Quote source: %1"
+msgstr "Sursa cotaţiei: %1"
+
+#: dialogs/kmymoneypricedlg.cpp:62 dialogs/ksecuritylisteditor.cpp:69
+msgid "Delete this entry"
+msgstr "Şterge această intrare"
+
+#: dialogs/ksecuritylisteditor.cpp:70
+msgid "Remove this security item from the file"
+msgstr "Şterge acest titlu de valoare din fişier"
+
+#: dialogs/ksecuritylisteditor.cpp:73
+msgid "&Add"
+msgstr "&Adaugă"
+
+#: dialogs/kmymoneypricedlg.cpp:68 dialogs/ksecuritylisteditor.cpp:75
+msgid "Add a new entry"
+msgstr "Adaugă o intrare nouă"
+
+#: dialogs/ksecuritylisteditor.cpp:76
+msgid "Create a new security entry."
+msgstr "Creează o nouă înregistrare de titlu de valoare."
+
+#: dialogs/keditequityentrydlg.cpp:77 dialogs/kmymoneypricedlg.cpp:74
+#: dialogs/ksecuritylisteditor.cpp:81
+msgid "Modify the selected entry"
+msgstr "Modifică intrarea selectată"
+
+#: dialogs/ksecuritylisteditor.cpp:82
+msgid "Change the security information of the selected entry."
+msgstr ""
+"Schimbă informaţiile titlului de valoare pentru înregistrarea selectată."
+
+#: dialogs/kmymoneypricedlg.cpp:80 dialogs/ksecuritylisteditor.cpp:87
+msgid "Close the dialog"
+msgstr "Închide dialogul"
+
+#: dialogs/kmymoneypricedlg.cpp:81 dialogs/ksecuritylisteditor.cpp:88
+msgid "Use this to close the dialog and return to the application."
+msgstr ""
+"Folosiţi aceasta pentru a închide dialogul şi a vă reîntoarce la aplicaţie."
+
+#: dialogs/ksecuritylisteditor.cpp:184
+msgid ""
+"Do you really want to remove the currency <b>%1</b> from the file?</"
+"p><i>Note: It is currently not supported to add currencies.</i>"
+msgstr ""
+"Doriţi într-adevăr să ştergeţi moneda <b>%1</b> din fişier?</p><i>Notă: în "
+"acest moment nu este implementată funcţionalitatea de adăugare a monedelor.</"
+"i>"
+
+#: dialogs/ksecuritylisteditor.cpp:187
+msgid "Do you really want to remove the %1 <b>%2</b> from the file?"
+msgstr "Doriţi într-adevăr să ştergeţi %1 <b>%2</b> din fişier?"
+
+#: dialogs/ksecuritylisteditor.cpp:190
+msgid "Delete security"
+msgstr "Şterge titlul de valoare"
+
+#: dialogs/kmymoneypricedlg.cpp:63
+msgid "Remove this price item from the file"
+msgstr "Şterge acest item de preţ din fişier"
+
+#: dialogs/kmymoneypricedlg.cpp:66 dialogs/mymoneyqifprofileeditor.cpp:94
+msgid "&New"
+msgstr "&Nou"
+
+#: dialogs/kmymoneypricedlg.cpp:69
+msgid "Create a new price entry."
+msgstr "Creează o nouă înregistrare de preţ."
+
+#: dialogs/kmymoneypricedlg.cpp:75
+msgid "Change the details of selected price information."
+msgstr "Modifică detaliile pentru informaţiile preţului selectat."
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Do you really want to delete the selected price entry?"
+msgstr "Doriţi într-adevăr să ştergeţi întrarea de preţ marcată?"
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Delete price information"
+msgstr "Şterge informaţiile despre preţ"
+
+#: dialogs/kchooseimportexportdlg.cpp:46
+msgid ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Vă rog să alegeţi tipul importului pe care doriţi să-l efectuaţi. O "
+"explicaţie simplă a tipului de import este disponibilă în partea de jos a "
+"ecranului şi este actualizată când alegeţi o opţiune din lista de opţiuni.\n"
+"\n"
+"Odată ce aţi ales un tip de import vă rog să apăsaţi pe butonul OK."
+
+#: dialogs/kchooseimportexportdlg.cpp:50 dialogs/rc.cpp:22
+msgid "Choose import type:"
+msgstr "Alege tipul de import:"
+
+#: dialogs/kchooseimportexportdlg.cpp:51 dialogs/rc.cpp:20
+msgid "Choose Import Type Dialog"
+msgstr "Alege caseta de dialog pentru tipul de import"
+
+#: dialogs/kchooseimportexportdlg.cpp:53
+msgid ""
+"Please choose the type of export you wish to perform. A simple explanation\n"
+"of the export type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an export type please press the OK button."
+msgstr ""
+"Vă rog să alegeţi tipul de export pe care-l preferaţi. O explicaţie simplă\n"
+" a tipului de export este valabilă la baza ecranului şi e actualizată când "
+"selectaţi \n"
+" un item din caseta cu alegeri.\n"
+"\n"
+"Odată ce aţi ales un tip pentru export, vă rog să apăsaţi butonul OK."
+
+#: dialogs/kchooseimportexportdlg.cpp:57
+msgid "Choose export type:"
+msgstr "Alege tipul de export:"
+
+#: dialogs/kchooseimportexportdlg.cpp:58
+msgid "Choose Export Type Dialog"
+msgstr "Alege caseta de dialog pentru tipul de export"
+
+#: dialogs/kchooseimportexportdlg.cpp:78
+msgid ""
+"QIF files are created by the popular accounting program Quicken.\n"
+"Another dialog will appear, if you choose this type, asking for further\n"
+"information relevant to the Quicken format."
+msgstr ""
+"Fişierele QIF sunt create cu răspânditul program financiar Quicken.\n"
+" Dacă alegeţi acest tip, va apărea o altă casetă de dialog unde veţi fi "
+"întrebat de\n"
+" viitoarele informaţii relevante pentru formatul Quicken."
+
+#: dialogs/kchooseimportexportdlg.cpp:82
+msgid ""
+"The CSV type uses a comma delimeted text file that can be used by\n"
+"most popular spreadsheet programs available for Linux and other operating\n"
+"systems."
+msgstr ""
+"Tipul CSV foloseşte o delimitare prin virgulă a fişierului de text, care "
+"poate fi\n"
+" folosită de cele mai populare programe de calcul tabelar valabile pentru "
+"Linux\n"
+" şi alte sisteme de operare."
+
+#: dialogs/kequitypriceupdatedlg.cpp:222
+msgid "%1 units in %2"
+msgstr "%1 unităţi în %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid ""
+"Failed to retrieve an exchange rate for %1 from %2. It will be skipped this "
+"time."
+msgstr ""
+"Nu s-a putut obţine o rată de schimb pentru %1 de la %2. Va fi ignorată în "
+"acest moment."
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid "Price Update Failed"
+msgstr "Actualizarea preţului a eşuat"
+
+#: dialogs/kequitypriceupdatedlg.cpp:427
+msgid ""
+"Failed to retrieve a quote for %1 from %2. Press <b>No</b> to remove the "
+"online price source from this security permanently, <b>Yes</b> to continue "
+"updating this security during future price updates or <b>Cancel</b> to stop "
+"the current update operation."
+msgstr ""
+"Nu s-a putut obţine o cotaţie pentru %1 de la %2. Apăsaţi <b>Nu</b> pentru a "
+"şterge pentru totdeauna sursa online a acestui preţ de la acest titlu de "
+"valoare, <b>Da</b> pentru a continua actualizarea acestui titlu de valoare "
+"în timpul actualizărilor viitoare de preţ sau <b>Renunţă</b> pentru a opri "
+"actualizarea curentă."
+
+#: dialogs/kequitypriceupdatedlg.cpp:427 dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Price Update Failed"
+msgstr "Actualizarea preţului a eşuat"
+
+#: dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Cannot update security <b>%1</b>: %2"
+msgstr "Nu s-a putut actualiza titlul de valoare <b>%1</b>: %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:528
+msgid "Price for %1 updated (id %2)"
+msgstr "Preţ pentru %1 actualizat (id %2)"
+
+#: dialogs/kequitypriceupdatedlg.cpp:534
+msgid "Received an invalid price for %1, unable to update."
+msgstr ""
+"S-a primit un preţ invalid pentru %1 şi nu s-a putut face actualizarea."
+
+#: dialogs/kequitypriceupdatedlg.cpp:554
+msgid ""
+"Received a price for %1 (id %2), but this symbol is not on the list! "
+"Aborting entire update."
+msgstr ""
+"S-a primit un preţ pentru %1 (id %2), dar acest simbol nu este pe listă! "
+"Anulează întreaga actualizare."
+
+#: dialogs/transactioneditor.cpp:222
+msgid ""
+"The number <b>%1</b> has already been used in account <b>%2</b>. Do you want "
+"to replace it with the next available number?"
+msgstr ""
+"Numărul <b>%1</b> a fost deja folosit în contul <b>%2</b>. Vreţi să-l "
+"înlocuiţi cu următorul număr valabil?"
+
+#: dialogs/transactioneditor.cpp:222
+msgid "Duplicate number"
+msgstr "Creează un duplicat pentru număr"
+
+#: dialogs/transactioneditor.cpp:303
+msgid ""
+"This transaction has more than two splits and is based on a different "
+"currency (%1). Using this account to modify the transaction is currently not "
+"very well supported by KMyMoney and may result in false results."
+msgstr ""
+"Această tranzacţie are mai mult de două părţi şi se bazează pe o monedă "
+"diferită (%1). Folosirea acestui cont pentru modificarea tranzacţiei nu este "
+"în acest moment foarte bine suportată de KMyMoney şi pot apărea rezultate "
+"false."
+
+#: dialogs/transactioneditor.cpp:305
+msgid ""
+"KMyMoney was not able to find a more appropriate account to edit this "
+"transaction. Nevertheless, you are allowed to modify the transaction. If you "
+"don't want to edit this transaction, please cancel from editing next."
+msgstr ""
+"KMyMoney nu a putut găsi un cont potrivit pentru a modifica această "
+"tranzacţie. Totuşi puteţi modifica tranzacţia. Dacă nu doriţi să modificaţi "
+"această tranzacţie, vă rog să renunţaţi la modificări."
+
+#: dialogs/transactioneditor.cpp:307
+msgid ""
+"Using e.g. <b>%1</b> to edit this transaction is a better choice. "
+"Nevertheless, you are allowed to modify the transaction. If you want to use "
+"the suggested account instead, please cancel from editing next and change "
+"the view to the suggested account."
+msgstr ""
+"Folosire, de exemplu, a <b>%1</b> pentru editarea acestei tranzacţii este o "
+"alegere mai bună. Totuşi, puteţi modifica tranzacţia. Dacă, în schimb, "
+"doriţi să folosiţi contul sugerat, vă rog anulaţi modificările şi schimbaţi "
+"vizualizarea la contul sugerat."
+
+#: dialogs/transactioneditor.cpp:410
+msgid ""
+"This transaction has more than two splits and is originally based on a "
+"different currency (%1). Using this account to modify the transaction may "
+"result in rounding errors. Do you want to continue?"
+msgstr ""
+"Această tranzacţie are mai mult de două părţi şi se bazează pe o monedă "
+"diferită (%1). Folosirea acestui cont pentru modificarea tranzacţiei poate "
+"genera o serie de erori. Vreţi să continuaţi?"
+
+#: dialogs/transactioneditor.cpp:412
+msgid ""
+"At least one of the selected transactions has more than two splits and is "
+"originally based on a different currency (%1). Using this account to modify "
+"the transactions may result in rounding errors. Do you want to continue?"
+msgstr ""
+"Cel puţin una dintre tranzacţiile selectate are mai multe decât două părţi "
+"şi se bazează pe o monedă diferită (%1). Folosirrea acestui cont pentru "
+"modificarea tranzacţiilor poate avea ca rezultat diferite erori. Vreţi să "
+"continuaţi?"
+
+#: dialogs/transactioneditor.cpp:557
+msgid "Storing transactions"
+msgstr "Memorează tranzacţii"
+
+#: dialogs/transactioneditor.cpp:603 widgets/kmymoneybriefschedule.cpp:65
+msgid "&Enter"
+msgstr "&Introdu"
+
+#: dialogs/transactioneditor.cpp:606
+msgid "Use this to enter the transaction into the ledger."
+msgstr "Folosiţi aceasta pentru a introduce tranzacţia în registru."
+
+#: dialogs/transactioneditor.cpp:607
+msgid "&Schedule"
+msgstr "&Plată programată"
+
+#: dialogs/transactioneditor.cpp:609
+msgid "Accepts the entered data and stores it as schedule"
+msgstr "Accetă datele introduse şi le memorează ca programare"
+
+#: dialogs/transactioneditor.cpp:610
+msgid "Use this to schedule the transaction for later entry into the ledger."
+msgstr ""
+"Folosiţi aceasta pentru a programa tranzacţia pentru o înregistrare "
+"ulterioară în registru."
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"The transaction you are about to enter has a post date in the future.<br/"
+"><br/>Do you want to enter it in the ledger or add it to the schedules?"
+msgstr ""
+"Tranzacţia pe care sunteţi pe cale să o introduceţi are o amânare în viitor."
+"<br/><br/>Doriţi s-o introduceţi în registru sau să o adăugaţi printre "
+"programări?"
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"_: Dialog caption for 'Enter or schedule' dialog\n"
+"Enter or schedule?"
+msgstr "Introducere sau programare?"
+
+#: dialogs/transactioneditor.cpp:671
+msgid ""
+"The balance of account <b>%1</b> dropped below the warning balance of %2."
+msgstr "Soldul contului <b>%1</b> a căzut sub soldul de avertisment al %2."
+
+#: dialogs/transactioneditor.cpp:677
+msgid ""
+"The balance of account <b>%1</b> dropped below the minimum balance of %2."
+msgstr "Soldul contului <b>%1</b> a căzut sub soldul minim al %2."
+
+#: dialogs/transactioneditor.cpp:683
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit warning "
+"limit of %2."
+msgstr ""
+"Soldul contului <b>%1</b> a căzut sub limita de avertisment a creditului "
+"maxim %2."
+
+#: dialogs/transactioneditor.cpp:689
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit limit of %"
+"2."
+msgstr "Soldul contului <b>%1</b> a căzut sub limita maximă a creditului %2."
+
+#: dialogs/transactioneditor.cpp:740
+msgid "Payer/Receiver"
+msgstr "Plătitor/Beneficiar"
+
+#: dialogs/transactioneditor.cpp:748
+msgid "Category/Account"
+msgstr "Categorie/Cont"
+
+#: dialogs/transactioneditor.cpp:980 dialogs/transactioneditor.cpp:1016
+#: dialogs/transactioneditor.cpp:1378 dialogs/transactioneditor.cpp:1399
+#: dialogs/transactioneditor.cpp:1422 dialogs/transactioneditor.cpp:1443
+#: dialogs/transactioneditor.cpp:1505 dialogs/transactioneditor.cpp:1509
+#: widgets/transaction.cpp:902
+msgid "Transfer from"
+msgstr "Transferă din"
+
+#: dialogs/transactioneditor.cpp:982 dialogs/transactioneditor.cpp:1018
+#: dialogs/transactioneditor.cpp:1401 dialogs/transactioneditor.cpp:1445
+#: dialogs/transactioneditor.cpp:1506 widgets/transaction.cpp:902
+msgid "Transfer to"
+msgstr "Transferă în"
+
+#: dialogs/transactioneditor.cpp:1259
+msgid "Select autofill transaction"
+msgstr "Selectare tranzacţie pentru autocompletare"
+
+#: dialogs/transactionmatcher.cpp:77
+msgid "First transaction does not match requirement for matching"
+msgstr "Prima tranzacţie nu îndeplineşte cerinţele pentru asociere"
+
+#: dialogs/transactionmatcher.cpp:79
+msgid "Second transaction does not match requirement for matching"
+msgstr "Cea de-a doua tranzacţie nu îndeplineşte cerinţele pentru asociere"
+
+#: dialogs/transactionmatcher.cpp:83 dialogs/transactionmatcher.cpp:133
+msgid "Splits for %1 have conflicting values (%2,%3)"
+msgstr "Părţile pentru %1 are valori conflictuale (%2, %3)"
+
+#: dialogs/transactionmatcher.cpp:96 dialogs/transactionmatcher.cpp:149
+msgid ""
+"Both of these transactions have been imported into %1. Therefore they "
+"cannot be matched. Matching works with one imported transaction and one non-"
+"imported transaction."
+msgstr ""
+"Ambele aceste tranzacţii au fost importate în %1. Totuşi ele nu pot fi "
+"asociate. Asocierea funcţionează între o tranzacţie importată şi una "
+"neimportată."
+
+#: dialogs/transactionmatcher.cpp:101 dialogs/transactionmatcher.cpp:156
+msgid "Unable to match all splits (%1)"
+msgstr "Nu s-au putut asocia niciuna dintre părţi (%1)"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:65
+msgid "Account and transfer account are the same. Please change one."
+msgstr ""
+"Contul destinaţie şi contul sursă al transferului coincid. Vă rog să "
+"schimbaţi unul dintre ele."
+
+#: dialogs/kconfirmmanualenterdlg.cpp:84
+msgid "Payee changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Beneficiarul a fost schimbat.<br>&nbsp;&nbsp;&nbsp;Vechiul beneficiar: <b>%"
+"1</b> Noul beneficiar: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:92
+#: dialogs/kconfirmmanualenterdlg.cpp:100
+msgid "Account changed. Old: \"%1\", New: \"%2\""
+msgstr "Contul a fost schimbat. Vechiul cont: \"%1\", Noul cont: \"%2\"s"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:107
+msgid "Account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Contul a fost schimbat.<br>&nbsp;&nbsp;&nbsp;Vechiul cont: <b>%1</b> Noul "
+"cont: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:115
+msgid ""
+"Transfer account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</"
+"b><p>"
+msgstr ""
+"Contul de transfer a fost schimbat.<br>&nbsp;&nbsp;&nbsp;Vechiul cont: <b>%"
+"1</b> Noul cont: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:143
+msgid ""
+"Category changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Categoria a fost schimbată.<br>&nbsp;&nbsp;&nbsp;Vechia categorie: <b>%1</b> "
+"Noua categorie: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:151
+#: dialogs/kconfirmmanualenterdlg.cpp:153
+msgid "empty"
+msgstr "gol"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:157
+msgid "Memo changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Detaliile au fost schimbate.<br>&nbsp;&nbsp;&nbsp;Vechiul detaliu: <b>%1</b> "
+"Noul detaliu: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:166
+msgid "Amount changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Suma a fost schimbată.<br>&nbsp;&nbsp;&nbsp;Vechia sumă: <b>%1</b> Noua "
+"sumă: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:175
+msgid ""
+"Reconciliation flag changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%"
+"2</b><p>"
+msgstr ""
+"Indicatorul de reconciliere a fost schimbat.<br>&nbsp;&nbsp;&nbsp;Vechiul "
+"indicator: <b>%1</b> Noul indicator: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:182
+msgid "Fatal error in determining data: "
+msgstr "Eroare fatală la determinarea datelor: "
+
+#: dialogs/kselectdatabasedlg.cpp:56
+msgid ""
+"There are no Qt SQL drivers installed in your system.\n"
+"Please consult documentation for your distro, or visit the Qt web site (www."
+"trolltech.com) and search for SQL drivers."
+msgstr ""
+"Nu există drivere Qt SQL instalate pe sistemul dumneavoastră.\n"
+" Vă rog să consultaţi documentaţia pentru distribuţia dumneavoastră sau să "
+"vizitaţi site-ul web (www.trolltech.com) pentru a căuta driverele SQL."
+
+#: dialogs/kselectdatabasedlg.cpp:100
+msgid "Qt SQL driver %1 is no longer installed on your system"
+msgstr "Driverul SQL Qt %1 nu mai este instalat pe sistemul dumneavoastră"
+
+#: dialogs/kselectdatabasedlg.cpp:107
+msgid "Qt SQL driver %1 is not suported"
+msgstr "Driverul SQL Qt %1 nu este compatibil"
+
+#: dialogs/kselectdatabasedlg.cpp:164
+msgid "SQLite files (*.sql);; All files (*.*)"
+msgstr "fişiere SQLLite (*.sql);; Toate fişierele (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:167
+msgid "Select SQLite file"
+msgstr "Alege fişierul SQLite"
+
+#: dialogs/kselectdatabasedlg.cpp:188
+msgid "All files (*.*)"
+msgstr "Toate fişierele (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:191
+msgid "Select output file"
+msgstr "Selectează numele fişierului de ieşire"
+
+#: dialogs/investactivities.cpp:168
+msgid "%1 (Brokerage)"
+msgstr "%1 (Brokeraj)"
+
+#: dialogs/investactivities.cpp:200 dialogs/investactivities.cpp:288
+#: dialogs/investactivities.cpp:425 widgets/transaction.cpp:1548
+msgid "Price/share"
+msgstr "Preţ/acţiune"
+
+#: dialogs/investactivities.cpp:586
+msgid "Ratio 1/"
+msgstr "Fracţia 1/"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid ""
+"<p>Please check that all the details in the following dialog are correct and "
+"press OK.</p><p>Editable data can be changed and can either be applied to "
+"just this occurence or for all subsequent occurences for this schedule. "
+"(You will be asked what you intend after pressing OK in the following dialog)"
+"</p>"
+msgstr ""
+"<p>Vă rog să verificaţi dacă toate detaliile din următoarea casetă de dialog "
+"sunt corecte şi să apăsaţi OK.</p><p>Datele editabile pot fi schimbate şi "
+"aplicate fie pentru această ocurenţă, fie pentru toate ocurenţelele acestei "
+"programări. (După ce veţi apăsa OK, veţi fi întrebat, în următoarea casetă "
+"de dialog, care e alegerea dumneavoastră.)</p>"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid "Enter scheduled transaction"
+msgstr "Introduceţi tranzacţia programată"
+
+#: dialogs/kcsvprogressdlg.cpp:65 dialogs/kexportdlg.cpp:65
+msgid "&Export"
+msgstr "&Exportă"
+
+#: dialogs/kexportdlg.cpp:67 dialogs/kimportdlg.cpp:68
+msgid "Start operation"
+msgstr "Start operaţie"
+
+#: dialogs/kexportdlg.cpp:68
+msgid "Use this to start the export operation"
+msgstr "Folosiţi aceasta pentru a porni operaţiunea de exportare"
+
+#: dialogs/kexportdlg.cpp:71 dialogs/kimportdlg.cpp:72
+msgid "&Browse..."
+msgstr "&Răsfoieşte..."
+
+#: dialogs/kexportdlg.cpp:73 dialogs/kimportdlg.cpp:74
+msgid "Select filename"
+msgstr "Selectează numele de fişier"
+
+#: dialogs/kexportdlg.cpp:74 dialogs/kimportdlg.cpp:75
+msgid "Use this to select a filename to export to"
+msgstr ""
+"Folosiţi aceasta pentru a selecta numele fişierului în care trebuie exportat"
+
+#: dialogs/kexportdlg.cpp:77 dialogs/kimportdlg.cpp:78
+#: dialogs/settings/ksettingsonlinequotes.cpp:64
+#: widgets/kmymoneyonlinequoteconfig.cpp:64
+msgid "&New..."
+msgstr "&Nou..."
+
+#: dialogs/kexportdlg.cpp:79 dialogs/kimportdlg.cpp:80
+#: dialogs/mymoneyqifprofileeditor.cpp:96
+msgid "Create a new profile"
+msgstr "Creează un profil nou"
+
+#: dialogs/kexportdlg.cpp:80 dialogs/kimportdlg.cpp:81
+msgid "Use this to open the profile editor"
+msgstr "Folosiţi aceasta pentru a deschide editorul de profiluri"
+
+#: dialogs/keditloanwizard.cpp:56
+msgid "Edit loan wizard"
+msgstr "Expertul de modificare a împrumuturilor"
+
+#: dialogs/keditloanwizard.cpp:58
+msgid ""
+"Please enter the date from which on the following changes will be effective. "
+"The date entered must be later than the opening date of this account (%1), "
+"but must not be in the future. The default will be today."
+msgstr ""
+"Introduceţi, vă rog, data de la care se vor aplica următoarele schimbări. "
+"Data de intrare trebuie să fie după data deschiderii acestui cont (%1), dar "
+"nu trebuie să fie în viitor. Data implicită va fi data de astăzi."
+
+#: dialogs/keditloanwizard.cpp:76
+msgid ""
+"Note: you will not be able to modify this account today, because the opening "
+"date \"%1\" is in the future. Please revisit this dialog when the time has "
+"come."
+msgstr ""
+"Notă: nu veţi putea modifica acest cont astăzi, pentru că data deschiderii "
+"\"%1\" este în viitor. Vă rog să revedeţi această casetă de dialog atunci "
+"când timpul va corespunde."
+
+#: dialogs/keditloanwizard.cpp:244
+msgid ""
+"Your previous selection was \"%1\". If you select another option, KMyMoney "
+"will dismiss the changes you have just entered. Do you wish to proceed?"
+msgstr ""
+"Alegerea dumneavoastră anterioară a fost \"%1\". Dacă alegeţi altceva, "
+"KMyMoney va anula schimbările pe care tocmai le-aţi introdus. Doriţi să "
+"continuaţi?"
+
+#: dialogs/kcategoryreassigndlg.cpp:81
+msgid ""
+"At least one transaction/schedule still references the category <b>%1</b>. "
+"However, at least one category with the same currency must exist so that the "
+"transactions/schedules can be reassigned."
+msgstr ""
+"Cel puţin o tranzacţie/programare se referă încă la categoria <b>%1</b>. "
+"Oricum, cel puţin o categorie cu aceeaşi valută trebuie să existe astfel "
+"încât tranzacţiile/programările să poată fi reasignate."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid ""
+"This dialog does not allow to create new categories. Please pick a category "
+"from the list."
+msgstr ""
+"Această casetă de dialog nu permite crearea de noi categorii. Vă rog să "
+"selectaţi o categorie din listă."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid "Category creation"
+msgstr "Creare categorie"
+
+#: dialogs/kbackupdlg.cpp:61
+msgid "C&hoose..."
+msgstr "&Alege..."
+
+#: dialogs/kbackupdlg.cpp:63
+msgid "Select mount point"
+msgstr "Alegeţi locul de montare"
+
+#: dialogs/kbackupdlg.cpp:64
+msgid "Use this to browse to the mount point."
+msgstr "Folosiţi acest buton pentru a naviga până la locul de montare"
+
+#: dialogs/keditscheduledlg.cpp:293
+msgid "Next due date"
+msgstr "Următoarea dată scadentă"
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid ""
+"You have turned on the GPG encryption support. This means, that new files "
+"will be stored encrypted. Existing files will not be encrypted "
+"automatically. To achieve encryption of existing files, please use the "
+"<b>File/Save as...</b> feature and store the file under a different name. "
+"Once confident with the result, feel free to delete the old file and rename "
+"the encrypted one to the old name."
+msgstr ""
+"Aţi activat criptarea GPG. Acesta înseamnă că fişierele noi vor fi salvare "
+"criptate. Fişierele existente nu vor fi criptate în mod automat. Pentru a "
+"obţine criptarea fişierelor existente folosiţi meniul <b>Fişier/Salvează "
+"ca...</b> şi salvaţi fişierul sub alt nume. Odată ce aţi salvat fişierul sub "
+"alt nume şi sunteţi mulţumţi de rezultat puteţi şterge fişierul vechi şi "
+"puteţi redenumi fişierul criptat astfel încât acesta să aibă numele "
+"vechiului fişier."
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid "GPG encryption activated"
+msgstr "Criptarea GPG activată"
+
+#: dialogs/settings/ksettingshome.cpp:51
+msgid "&Up"
+msgstr "&Sus"
+
+#: dialogs/settings/ksettingshome.cpp:53
+msgid "Move selected item up"
+msgstr "Mută obiectul selectat în sus"
+
+#: dialogs/settings/ksettingshome.cpp:54
+msgid "Use this to move the selected item up by one position in the list."
+msgstr ""
+"Foloseşte acest buton pentru a muta obiectul selectat în sus cu o poziţie în "
+"listă"
+
+#: dialogs/settings/ksettingshome.cpp:55
+msgid "&Down"
+msgstr "&Jos"
+
+#: dialogs/settings/ksettingshome.cpp:57
+msgid "Move selected item down"
+msgstr "Mută obiectul selectat în jos"
+
+#: dialogs/settings/ksettingshome.cpp:58
+msgid "Use this to move the selected item down by one position in the list."
+msgstr ""
+"Foloseşte acest buton pentru a muta obiectul selectat în jos cu o poziţie în "
+"listă"
+
+#: dialogs/settings/rc.cpp:1
+msgid "Color settings"
+msgstr "Setări de culoare"
+
+#: dialogs/settings/rc.cpp:2
+msgid "Foreground"
+msgstr "Culoare faţadă"
+
+#: dialogs/settings/rc.cpp:3
+msgid "Text colors"
+msgstr "Culori text"
+
+#: dialogs/settings/rc.cpp:4
+msgid "Grid color"
+msgstr "Grilă culoare"
+
+#: dialogs/settings/rc.cpp:5
+msgid "Erronous transaction"
+msgstr "Tranzacţie eronată"
+
+#: dialogs/settings/rc.cpp:6
+msgid "Value with missing conversion rate"
+msgstr "Valoare cu rata de conversie lipsă"
+
+#: dialogs/settings/rc.cpp:7
+msgid "Negative value"
+msgstr "Valoare negativă"
+
+#: dialogs/settings/rc.cpp:8
+msgid "Background"
+msgstr "Fundal"
+
+#: dialogs/settings/rc.cpp:10
+msgid "List background colors"
+msgstr "Listează culorile de fundal"
+
+#: dialogs/settings/rc.cpp:11
+msgid "Normal"
+msgstr "Normal"
+
+#: dialogs/settings/rc.cpp:12
+msgid "Alternate"
+msgstr "Alternează"
+
+#: dialogs/settings/rc.cpp:13
+msgid "Special background colors"
+msgstr "Culori speciale pentru fundal"
+
+#: dialogs/settings/rc.cpp:14
+msgid "Ledger group separator"
+msgstr "Separator pentru grupul de registre"
+
+#: dialogs/settings/rc.cpp:15
+msgid "Required field"
+msgstr "Câmp cerut"
+
+#: dialogs/settings/rc.cpp:16
+msgid "Imported transaction"
+msgstr "Tranzacţie importată"
+
+#: dialogs/settings/rc.cpp:17
+msgid "Matched transaction"
+msgstr "Tranzacţie asociată"
+
+#: dialogs/settings/rc.cpp:18
+msgid "Font settings"
+msgstr "Setări pentru font"
+
+#: dialogs/settings/rc.cpp:19
+msgid "Use system fonts"
+msgstr "Foloseşte fonturile sistemului"
+
+#: dialogs/settings/rc.cpp:20
+msgid "Individual font settings"
+msgstr "Setări individuale pentru font"
+
+#: dialogs/settings/rc.cpp:24
+msgid "Number of Days of Account Cycle:"
+msgstr "Număr de zile ale ciclului de cont:"
+
+#: dialogs/settings/rc.cpp:26
+msgid "Number of Days to Forecast:"
+msgstr "Număr de zile de estimat:"
+
+#: dialogs/settings/rc.cpp:27
+msgid "Forecast Method"
+msgstr "Metoda de estimare"
+
+#: dialogs/settings/rc.cpp:28
+msgid "Scheduled and Future Transactions"
+msgstr "Tranzacţii viitoare şi programate"
+
+#: dialogs/settings/rc.cpp:29
+msgid "History-based"
+msgstr "Bazate pe istoric"
+
+#: dialogs/settings/rc.cpp:30
+msgid "History-based settings"
+msgstr "Setări bazate pe istorie"
+
+#: dialogs/settings/rc.cpp:31
+msgid "Number of Cycles to use in Forecast:"
+msgstr "Numărul de cicluri de folosit la estimare:"
+
+#: dialogs/settings/rc.cpp:36
+msgid "General Settings"
+msgstr "Optiuni generales"
+
+#: dialogs/settings/rc.cpp:37
+msgid "Global"
+msgstr "Global"
+
+#: dialogs/settings/rc.cpp:38
+msgid "Startup page options"
+msgstr "Opţiuni pentru pagina de pornire"
+
+#: dialogs/settings/rc.cpp:39
+msgid "Start with homepage"
+msgstr "Porneşte cu prima pagină"
+
+#: dialogs/settings/rc.cpp:40
+msgid "Start with last selected view"
+msgstr "Porneşte cu ultima vizualizare selectată"
+
+#: dialogs/settings/rc.cpp:41
+msgid "Precision settings"
+msgstr "Setări precizie"
+
+#: dialogs/settings/rc.cpp:42
+msgid "Price precision"
+msgstr "Precizie preţ"
+
+#: dialogs/settings/rc.cpp:43
+msgid "digits"
+msgstr "zecimale"
+
+#: dialogs/settings/rc.cpp:44
+msgid "Autosave options"
+msgstr "Opţiuni pentru salvarea automată"
+
+#: dialogs/settings/rc.cpp:45
+msgid "Autosave periodically"
+msgstr "Salvare automată periodică"
+
+#: dialogs/settings/rc.cpp:46
+msgid "minutes"
+msgstr "minute"
+
+#: dialogs/settings/rc.cpp:47
+msgid "Fiscal Year"
+msgstr "An fiscal"
+
+#: dialogs/settings/rc.cpp:48
+msgid "Your fiscal year starts on"
+msgstr "Anul dumneavoastră fiscal începe în"
+
+#: dialogs/settings/rc.cpp:49
+msgid "January"
+msgstr "ianuarie"
+
+#: dialogs/settings/rc.cpp:50
+msgid "February"
+msgstr "februarie"
+
+#: dialogs/settings/rc.cpp:51
+msgid "March"
+msgstr "martie"
+
+#: dialogs/settings/rc.cpp:52
+msgid "April"
+msgstr "aprilie"
+
+#: dialogs/settings/rc.cpp:53
+msgid "May"
+msgstr "mai"
+
+#: dialogs/settings/rc.cpp:54
+msgid "June"
+msgstr "iunie"
+
+#: dialogs/settings/rc.cpp:55
+msgid "July"
+msgstr "iulie"
+
+#: dialogs/settings/rc.cpp:56
+msgid "August"
+msgstr "august"
+
+#: dialogs/settings/rc.cpp:57
+msgid "September"
+msgstr "septembrie"
+
+#: dialogs/settings/rc.cpp:58
+msgid "October"
+msgstr "octombrie"
+
+#: dialogs/settings/rc.cpp:59
+msgid "November"
+msgstr "noiembrie"
+
+#: dialogs/settings/rc.cpp:60
+msgid "December"
+msgstr "decembrie"
+
+#: dialogs/settings/rc.cpp:61
+msgid "Views"
+msgstr "Vizualizări"
+
+#: dialogs/settings/rc.cpp:62
+msgid "Synchronize account selection of ledger and investment view"
+msgstr ""
+"Sincronizează selecţia de cont a registrului cu vizualizarea investiţiei"
+
+#: dialogs/settings/rc.cpp:63
+msgid ""
+"Check the views you want to enable, uncheck those you want to hide, because "
+"you don't need the functionality."
+msgstr ""
+"Bifaţi vizualizările pe care doriţi să le actualizaţi, debifaţi-le pe cele "
+"pe care vreţi să le ascundeţi dacă nu aveţi nevoie de această "
+"funcţionalitate."
+
+#: dialogs/settings/rc.cpp:64
+msgid "Icon size of navigation bar"
+msgstr "Mărimea iconiţei de pe bara de navigare"
+
+#: dialogs/settings/rc.cpp:65
+msgid "Micro (16px)"
+msgstr "Micro (16px)"
+
+#: dialogs/settings/rc.cpp:66
+msgid "Small (32px)"
+msgstr "Mic (32px)"
+
+#: dialogs/settings/rc.cpp:67
+msgid "Normal (48px)"
+msgstr "Normal (48px)"
+
+#: dialogs/settings/rc.cpp:68
+msgid "Large (64px)"
+msgstr "Mare (64px)"
+
+#: dialogs/settings/rc.cpp:69
+msgid "Show title bar on each page"
+msgstr "Arată bara de titlu în fiecare ecran"
+
+#: dialogs/rc.cpp:835 dialogs/settings/rc.cpp:70
+msgid "Filter"
+msgstr "Filtru"
+
+#: dialogs/settings/rc.cpp:71
+msgid "Accounts / Categories"
+msgstr "Conturi / Categorii"
+
+#: dialogs/settings/rc.cpp:72
+msgid "Don't show unused categories"
+msgstr "Ascunde categoriile nefolosite"
+
+#: dialogs/settings/rc.cpp:73
+msgid ""
+"This option hides all categories in the categories view that are not used in "
+"at least a single transaction. They are still shown in the category "
+"selection lists."
+msgstr ""
+"Această opţiune ascunde toate categoriile, în modul de vizualizare a "
+"categoriilor, care nu sunt folosite măcar într-o tranzacţie. Aceste "
+"categorii vor apărea totuşi în listele de alegere a categoriilor."
+
+#: dialogs/settings/rc.cpp:74
+msgid "Don't show closed accounts"
+msgstr "Ascunde conturile închise"
+
+#: dialogs/settings/rc.cpp:75
+msgid ""
+"This option hides all accounts that have been closed by the user in views "
+"and selection lists.\n"
+"\n"
+"You can use <b>View/Show all accounts</b> to temporarily show hidden "
+"accounts in the views."
+msgstr ""
+"Această opţiune ascunde toate conturile care au fost închise de către "
+"utilizator din toate modurile de vizualizare şi din toate listele de "
+"selecţie\n"
+"\n"
+"Puteţi folosi <b>Vizualizează/Afişează toate conturile<b> pentru a afişa "
+"temporar conturrile ascunse în toate modurile de vizualizare."
+
+#: dialogs/settings/rc.cpp:76
+msgid "Show equity accounts"
+msgstr "Afișează conturi de capital"
+
+#: dialogs/rc.cpp:332 dialogs/settings/rc.cpp:77 widgets/rc.cpp:160
+msgid "Schedules"
+msgstr "Programări"
+
+#: dialogs/settings/rc.cpp:78
+msgid "Don't show finished schedules"
+msgstr "Nu afişa programările terminate"
+
+#: dialogs/settings/rc.cpp:79
+msgid "This option hides all finished schedules in the schedules view."
+msgstr ""
+"Această opţiune ascunde toate plăţile programate încheiate din modul de "
+"vizualizare a programelor."
+
+#: dialogs/settings/rc.cpp:81
+msgid "Don't show transactions prior to"
+msgstr "Acunde tranzacţii înainte de"
+
+#: dialogs/settings/rc.cpp:82
+msgid "Don't show reconciled transactions"
+msgstr "Ascunde tranzacţiile reconciliate"
+
+#: dialogs/settings/rc.cpp:83
+msgid "This option hides all reconciled transactions in the ledger view."
+msgstr ""
+"Această opţiune ascunde toate tranzacţiile reconciliate în modul de "
+"vizualizare registru."
+
+#: dialogs/settings/rc.cpp:84 widgets/rc.cpp:22
+msgid "GPG encryption settings"
+msgstr "Ssetări de criptare GPG"
+
+#: dialogs/settings/rc.cpp:85
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Access to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>additional recovery encryption</i> is only accessible, if the "
+"necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id "
+"0x8AFDDC8E is found in your keyring."
+msgstr ""
+"Această pagină vă permite să configuraţi parametrii pentru criptarea "
+"fişierului dumneavoastră <b>KMyMoney</b> cu ajutorul sistemului <b>GPG</b>."
+"<p>\n"
+"Accesul la aceste setări este dezactivat dacă sistemul <b>GPG</b> nu a putut "
+"fi detectat pe sistemul dumneavoastră. În acest caz vă rog să vă asiguraţi "
+"că sistemul <b>GPG</b> funcţionează corect pentru utilizatorul curent.<p>\n"
+"Grupul de <i>criptare de recuperare</i> este accesibil doar în cazul în care "
+"cheia necesară, emisă pentru <b>kmymoney-recover@users.sourceforge.net</b> "
+"cu identificatorul 0x8AFDDC8E a fost găsită."
+
+#: dialogs/settings/rc.cpp:86 widgets/rc.cpp:24
+msgid "Use GPG encryption"
+msgstr "Foloseşte criptarea GPGs"
+
+#: dialogs/settings/rc.cpp:87
+msgid "GPG encryption"
+msgstr "Criptarea GPG"
+
+#: dialogs/settings/rc.cpp:88
+msgid "Your key"
+msgstr "Cheia dumneavoastră"
+
+#: dialogs/settings/rc.cpp:89
+msgid ""
+"This combo box lists all the secret keys you have in your keyring. Select "
+"the one you want to use for encryption when saving to a file."
+msgstr ""
+"Această lista conţine toate cheile secrete pe care le aveţi în inelul de "
+"chei. Alegeţi cheia pe care doriţi să o utilizaţi pentru criptare la "
+"salvarea fişierului."
+
+#: dialogs/settings/rc.cpp:90
+msgid "Additonal keys"
+msgstr "Chei adiţionale"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:50 dialogs/settings/rc.cpp:91
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading 0x."
+msgstr ""
+"Introduceţi identificatorul cheii pe care o doriţi să o folosiţi pentru "
+"criptare. Acesta poate fi fie o adresă de poştă electronică fie "
+"identificatorul hexazecimal al cheii. În cazul identificatorului hexazecimal "
+"nu uitaţi prefixul 0x."
+
+#: dialogs/settings/rc.cpp:92 widgets/rc.cpp:28
+msgid ""
+"This symbol denotes, if the key for the given user id has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"Acest simbol indică dacă cheia pentru identificatorul de utilizator dat a "
+"fost găsită în inelul de chei. Este verde dacă s-a găsit cheia, opac în caz "
+"contrar."
+
+#: dialogs/kgpgkeyselectiondlg.cpp:61 dialogs/settings/rc.cpp:93
+msgid "Keys for all of the above user ids found"
+msgstr "Chei găsite pentru toţi identificatorii de utilizatori daţi mai sus."
+
+#: dialogs/settings/rc.cpp:94 widgets/rc.cpp:31
+msgid ""
+"This symbol denotes, if the KMyMoney recovery key has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"Acest simbol indică dacă cheia de recuperare KMyMoney a fost găsită în "
+"inelul de chei. Este verde dacă s-a găsit cheia, opac în caz contrar."
+
+#: dialogs/settings/rc.cpp:95
+msgid "Recover Key available in keyring"
+msgstr "Cheia de recupeare este disponibilă în inelul de chei"
+
+#: dialogs/settings/rc.cpp:96
+msgid "Also encrypt with KMyMoney's recover key"
+msgstr "Criptează de asemenea cu cheia de recuperare KMyMoney."
+
+#: dialogs/settings/rc.cpp:97
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out.."
+msgstr ""
+"Puteţi alege să criptaţi datele de asemenea cu cheia de recuperare KMyMoney. "
+"Doar dezvoltatorii cheie a aplicaţiei KMyMoney sunt în posesia cheii private "
+"respective necesară pentru a reciti datele criptate. <p>\n"
+"\n"
+"Acest mecanism este pus la dispozitia utilizatorului pentru cazul în care "
+"acesta îsi pierde cheia şi nu îşi mai poate accesa datele. Cu aceasta "
+"opţiune activată, dezvoltatorii KMyMoney pot decripta datele şi le pot pune "
+"la dispoziţia utilizatorului. Utilizatorul trebuie să fie pregătit să "
+"răspundă la unele înrebări detaliate despre conţinutul datelor înainte să "
+"poată intra în posesia acestora."
+
+#: dialogs/settings/rc.cpp:98
+msgid "Homepage Settings"
+msgstr "Setări prima pagină"
+
+#: dialogs/settings/rc.cpp:99
+msgid "Up"
+msgstr "Sus"
+
+#: dialogs/settings/rc.cpp:100
+msgid "Down"
+msgstr "Jos"
+
+#: dialogs/settings/rc.cpp:101
+msgid ""
+"Selected entries are shown on the home page of the application.<p>\n"
+"Use the buttons and checkboxes to customize the layout of the home page."
+msgstr ""
+"Alegeţi intrările care sunt afişate în pagina de start a aplicaţiei.<p>\n"
+"Folosiţi acest buton şi căsuţele de bifat pentru a personaliza modul de "
+"aşezare a paginii de start a dumneavoastră."
+
+#: dialogs/settings/rc.cpp:102
+msgid "Homepage/Summary page font scaling"
+msgstr "Scalarea fonturilor de pe pagina de start."
+
+#: dialogs/settings/rc.cpp:103
+msgid "Percentage of default font size:"
+msgstr "Procent din mărimea implicită de font:"
+
+#: dialogs/settings/rc.cpp:104
+msgid ""
+"Remember font size when leaving the program if manually changed with mouse-"
+"wheel"
+msgstr ""
+"Reţine-mi mărime fontului la închiderea programului dacă aceasta a fost "
+"modificată manual cu ajutorul rotiţei de la mouse"
+
+#: dialogs/settings/rc.cpp:105
+msgid "Information display"
+msgstr "Afişează informaţii"
+
+#: dialogs/settings/rc.cpp:106
+msgid "Show Account Limit Information"
+msgstr "Afişează informaţii despre limitele conturilor"
+
+#: dialogs/settings/rc.cpp:110 widgets/rc.cpp:47
+msgid ""
+"<i>Enter regular expressions which can be used to parse the data returned "
+"from the URL entered above. The symbol, price, and date must be found in "
+"the quote data to be usable. You may also try the KMyMoney user's "
+"mailinglist at <a href=\"mailto:kmymoney2-user@lists.sourceforge.net"
+"\">kmymoney2-user@lists.sourceforge.net</a> to find what settings work for "
+"other users in your country.</i>"
+msgstr ""
+"<i>Introduceţi expresii regulate care port fi folosite pentru a prelucra "
+"datele descărcate de la adresa dată mai sus. Simbolul, preţul şi data "
+"trebuie să se regăsească în datele despre cotaţie ca acestea să poată fi "
+"utilizabile. Puteţi de asemenea încerca să scrieţi un mesaj listei de "
+"utilizatori KMyMoney la <a href=\"mailto:kmymoney2-user@lists.sourceforge.net"
+"\">kmymoney2-user@lists.sourceforge.net</a> pentru a afla ce fel de setări "
+"funcţionează pentru alţi utilizatori din ţara dumneavoastră.</i>"
+
+#: dialogs/settings/rc.cpp:113 widgets/rc.cpp:38
+msgid "Regular Expression to extract the symbol from the downloaded data"
+msgstr "Expresia regulată pentru extragerea simbolului din datele descărcate"
+
+#: dialogs/settings/rc.cpp:114 widgets/rc.cpp:39
+msgid "Regular Expression to extract the price from the downloaded data"
+msgstr "Expresia regulată pentru extragerea preţului din datele descărcate"
+
+#: dialogs/settings/rc.cpp:115 widgets/rc.cpp:41
+msgid "URL to be used to download the quote"
+msgstr "Adresa folosită pentru a descărca cotaţia"
+
+#: dialogs/settings/rc.cpp:116 widgets/rc.cpp:42
+msgid ""
+"Enter the URL from which stock quotes will be fetched. <b>%1</b> will be "
+"replaced with the symbol for the security being quoted. For currency "
+"conversions, <b>%2</b> will be replaced with the currency to be quoted and "
+"<b>%1</b> with the currency the quote is based on."
+msgstr ""
+"Introduceţi adresa de la care se vor descărca datele cotaţiei online. <b>%1</"
+"b> va fi înlocuit cu simbolul titlului de valoare a cărui cotatie se "
+"actualizează. Pentru a realiza conversii valutare, <b>%2</b> va fi înlocuit "
+"cu valuta în care se doreşte cotaţia iar <b>%1</b> cu valuta pe care se "
+"bazează cotaţia."
+
+#: dialogs/settings/rc.cpp:118 dialogs/settings/rc.cpp:121 widgets/rc.cpp:40
+#: widgets/rc.cpp:44
+msgid "Regular Expression to extract the date from the downloaded data"
+msgstr "Expresia regulată pentru extragerea datei din datele descărcate"
+
+#: dialogs/rc.cpp:807 dialogs/settings/rc.cpp:119 widgets/rc.cpp:45
+msgid "Date Format"
+msgstr "Format dată"
+
+#: dialogs/settings/rc.cpp:122
+msgid "Skip HTML stripping"
+msgstr "Omite curățirea marcajelor HTML"
+
+#: dialogs/settings/rc.cpp:123
+msgid ""
+"<p>For easier processing of the data returned by the online source, KMyMoney "
+"usually strips unused parts before it is parsed with the regular "
+"expressions. If matching of the fields relies on those items, then use this "
+"option to turn stripping off.</p>\n"
+"\n"
+"<p>The following items are usually removed by stripping:\n"
+"\n"
+"<ul>\n"
+"<li>HTML tags such as <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded characters such as <b>&amp;nbsp;</b></li>\n"
+"<li>duplicate whitespace</li>\n"
+"</ul>\n"
+"</p>"
+msgstr ""
+"<p>Pentru o procesare mai ușoară a datelor obținute de la sursa online "
+"KMyMoney curăță marcajele HTML înainte de a prelucra datele cu o expresie "
+"regulată. Dacă găsirea câmpurilor cu ajutorul expresiei regulate se bazează "
+"be acele marcaje atunci folosiți această opțiune pentru a dezactiva "
+"curățirea marcajelor HTML</p>\n"
+"\n"
+"<p>Următoarele marcaje sunt de obicei șterse:\n"
+"\n"
+"<ul>\n"
+"<li>marcaje HTML ca <b>&lt;tag&gt;</b></li>\n"
+"<li>caractere codate cu & ca <b>&amp;nbsp;</b></li>\n"
+"<li>spații multiple</li>\n"
+"</ul>\n"
+"</p>"
+
+#: dialogs/settings/rc.cpp:127
+msgid "Register settings"
+msgstr "Opţiuni de registru"
+
+#: dialogs/settings/rc.cpp:128
+msgid "Display"
+msgstr "Afişează"
+
+#: dialogs/settings/rc.cpp:131
+msgid ""
+"Using the ledger lens shows the details for the transaction that has focus "
+"in the ledger. Usually, when using the transaction form, only a one line "
+"summary is displayed for each transaction as the details are shown in the "
+"form."
+msgstr ""
+"Folosirea lupei pentru registru va afişa detaliile tranzacţiei curente din "
+"registru. De obicei la folosirea formularului de tranzacţie doar o linie "
+"conţinând sumarul tranzacţiei este afişat pentru tranzacţia curentă deoarece "
+"detaliile tranzacţiei sunt afişate în formularul tranzacţiei."
+
+#: dialogs/settings/rc.cpp:133
+msgid "Always show a No. field"
+msgstr "Întotdeauna afişează un câmp pentru nr."
+
+#: dialogs/settings/rc.cpp:134
+msgid "Show group header between transactions"
+msgstr "Afişează antetul de grup între tranzacţii"
+
+#: dialogs/settings/rc.cpp:135
+msgid ""
+"Draws a larger header above each group of transaction. The grouping depends "
+"on the current sort order."
+msgstr ""
+"Desenează un antet gros de asupra fiecărui grup de tranzacţii. Modul de "
+"grupare depinde de ordinea de sortare curentă."
+
+#: dialogs/settings/rc.cpp:136
+msgid "Show header for the previous and current fiscal year"
+msgstr "Afişează antetul pentru anul fiscal curent şi anul fiscal precendent."
+
+#: dialogs/settings/rc.cpp:137
+msgid "Sorting"
+msgstr "Sortează"
+
+#: dialogs/settings/rc.cpp:138
+msgid "Normal view"
+msgstr "Vizualizare normală"
+
+#: dialogs/settings/rc.cpp:139
+msgid "Reconciliation view"
+msgstr "Vizualizarea reconcilierii"
+
+#: dialogs/settings/rc.cpp:140
+msgid "Search view"
+msgstr "Modul de vizualizare pentru căutare"
+
+#: dialogs/settings/rc.cpp:141
+msgid ""
+"Use the <i>left</i> and <i>right</i> buttons to add and remove sort options. "
+"Use the <i>up</i> and <i>down</i> buttons to modify the sort order. Double-"
+"Click a selected entry to toggle the sort order between <i>ascending</i> and "
+"<i>descending</i>."
+msgstr ""
+"Folosiţi butoanele <i>stânga</i> şi <i>dreapta</i> pentru a adăuga şi a "
+"retrage opţiuni de sortare. Folosiţi butoanele <i>sus</i> şi <i>jos</i> "
+"pentru a modifica ordinea de sortare. Faceţi dublu click pe intrarea "
+"selectată pentru a schimba ordinea de sordate între <i>crescătoare</i> şi "
+"<i>descrescătoare</i>."
+
+#: dialogs/settings/rc.cpp:142
+msgid "Data entry"
+msgstr "Introducere date"
+
+#: dialogs/settings/rc.cpp:146
+msgid "Use Enter to move between fields"
+msgstr "Folosiţi Enter pentru a muta între câmpuri"
+
+#: dialogs/settings/rc.cpp:147
+msgid "Match names from start"
+msgstr "Asociază numele de la început"
+
+#: dialogs/settings/rc.cpp:148
+msgid ""
+"Mark this option, if you always want to match names e.g. for payees from the "
+"start. If unset, any substring is matched."
+msgstr ""
+"Folosiți această opțiune dacă doriți ca asocierea numelui de exemplu pentru "
+"beneficiari/plătitori să se facă de la începutul șiruluii. Dacă nu este "
+"aleasă opțiunea orice subșir poate fi asociat."
+
+#: dialogs/settings/rc.cpp:149
+msgid "Default reconciliation state"
+msgstr "Starea implicită a reconcilierii"
+
+#: dialogs/rc.cpp:227 dialogs/settings/rc.cpp:150
+#: widgets/kmymoneycombo.cpp:348 widgets/registersearchline.cpp:84
+msgid "Not reconciled"
+msgstr "Nereconciliate"
+
+#: dialogs/rc.cpp:228 dialogs/settings/rc.cpp:151
+#: widgets/kmymoneycombo.cpp:347 widgets/registersearchline.cpp:85
+msgid "Cleared"
+msgstr "Verificate"
+
+#: dialogs/settings/rc.cpp:153
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation "
+"of an account"
+msgstr ""
+"Starea implicită a reconcilierii pentru tranzacţiile introduse în timpul "
+"reconcilierii unui cont"
+
+#: dialogs/settings/rc.cpp:154
+msgid "Autofill"
+msgstr "Introducere automată"
+
+#: dialogs/settings/rc.cpp:155
+msgid "No Autofill"
+msgstr "Introducere automată oprită"
+
+#: dialogs/settings/rc.cpp:156
+msgid "Don't do autofill of transaction data at all."
+msgstr "Nu umple automat cu datele tranzacţiei precedente"
+
+#: dialogs/settings/rc.cpp:157
+msgid "Same transaction if amount differs less than"
+msgstr "Consideră tranzacţia ca acceaşi da suma diferă cu mai puţin de"
+
+#: dialogs/settings/rc.cpp:158
+msgid ""
+"Collect all transactions for the given payee. Treat all transactions that "
+"refer to the same category and have an amount with +/- X % as identical. If "
+"more than one transaction is found, a list of them is presented to the "
+"user.\n"
+"\n"
+"Selecting 0% will list all transactions."
+msgstr ""
+"Pentru toate tranzacţiile unui beneficiar/plătitor tratează toate "
+"tranzacţiile care se referă la aceeaşi categorie şi au suma cu +- X % ca "
+"identice. Dacă mai mult de o tranzacţie este găsită conform acestor criterii "
+"o listă a acestor tranzacţii este prezentată utilizatorului.\n"
+"\n"
+"Alegând 0% se vor afişa toate tranzacţiile."
+
+#: dialogs/settings/rc.cpp:159
+msgid ""
+"Two transactions are usually treated identical for autofill, if they refer "
+"the same accounts. They are treated as different transactions though, when "
+"their amount varies by more than the percentage given here."
+msgstr ""
+"Două tranzacţii sunt de obicei considerate identice la autocompletare dacă "
+"se referă la aceleaşi conturi. Ele sunt totuşi tratate ca tranzacţii "
+"diferite când suma lor diferă cu procentul dat aici."
+
+#: dialogs/settings/rc.cpp:160
+msgid ""
+"_: Same transaction if amount differs less than percent.\n"
+"percent."
+msgstr "procent."
+
+#: dialogs/settings/rc.cpp:161
+msgid "with previously most often used transaction for the payee"
+msgstr "cu tranzacţia cea ma des utilizată anterior pentru beneficiar/plătitor"
+
+#: dialogs/settings/rc.cpp:162
+msgid ""
+"The data of the last transaction assigned to the category used most often "
+"for this payee is autofilled into the transaction editor."
+msgstr ""
+"Datele ultime tranzacţii asignate categoriei folosite cel mai des pentru "
+"acest beneficiar/plătitor sunt introduse automat în editorul de tranzacţii."
+
+#: dialogs/settings/rc.cpp:164
+msgid "Match transactions within days"
+msgstr "Asociază tranzacţii în numărul de zile"
+
+#: dialogs/settings/rc.cpp:165
+msgid ""
+"Search for matching transactions within the range of the posting date of the "
+"imported transaction +/- the number of given days."
+msgstr ""
+"Căutați tranzacții potrivite în intervalul de timp al datei publicării "
+"tranzacției importate dat de +/- numărul de zile date."
+
+#: dialogs/settings/rc.cpp:166
+msgid "Ask for a new payee's default category"
+msgstr ""
+"Întreabă care este categoria împlicită pentru un beneficiar/plătitor nou."
+
+#: dialogs/settings/rc.cpp:167
+msgid ""
+"Whenever a new payee is detected during import of a statement, the user will "
+"be asked to assign a default category for this user when this option is "
+"selected."
+msgstr ""
+"De fiecare dată când un bebeficiar/plătitor nou va fi găsit în timpul "
+"operației de import utilizatorul va fi rugat să aleagă o categorie împlicită "
+"pentru acel bebeficiar/plătitor dacă această opțiune este activă."
+
+#: dialogs/settings/rc.cpp:168
+msgid "Schedule Settings"
+msgstr "Opţiuni de plăţi programate"
+
+#: dialogs/settings/rc.cpp:169
+msgid "Startup options"
+msgstr "Opţiuni de pornire"
+
+#: dialogs/settings/rc.cpp:170
+msgid "Check schedules on startup"
+msgstr "Verifică plăţile programate la pornire"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:60
+#: widgets/kmymoneyonlinequoteconfig.cpp:60
+msgid "Delete the selected source entry"
+msgstr "Şterge intarea de sursă selectată"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:61
+#: widgets/kmymoneyonlinequoteconfig.cpp:61
+msgid "Use this to delete the selected online source entry"
+msgstr "Foloseşte această funcţie pentru a şterge sursa online selectată"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:66
+#: widgets/kmymoneyonlinequoteconfig.cpp:66
+msgid "Create a new source entry for online quotes"
+msgstr "Creează o nouă sursă online de cotaţii"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:67
+#: widgets/kmymoneyonlinequoteconfig.cpp:67
+msgid "Use this to create a new entry for online quotes"
+msgstr ""
+"Folosiţi această funcţie pentru a creea o nouă de sursă de cotaţii online"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:107
+#: dialogs/settings/ksettingsonlinequotes.cpp:190
+#: dialogs/settings/ksettingsonlinequotes.cpp:193
+#: dialogs/settings/ksettingsonlinequotes.cpp:216
+#: widgets/kmymoneyonlinequoteconfig.cpp:107
+#: widgets/kmymoneyonlinequoteconfig.cpp:185
+#: widgets/kmymoneyonlinequoteconfig.cpp:188
+#: widgets/kmymoneyonlinequoteconfig.cpp:211
+msgid "New Quote Source"
+msgstr "Sursă de cotaţii nouă"
+
+#: dialogs/ksplittransactiondlg.cpp:77 dialogs/rc.cpp:788
+msgid "Clear &All"
+msgstr "Şterge &tot"
+
+#: dialogs/ksplittransactiondlg.cpp:79
+msgid "Clear all splits"
+msgstr "Şterge toate părţile"
+
+#: dialogs/ksplittransactiondlg.cpp:80
+msgid "Use this to clear all splits of this transaction"
+msgstr "Foloseşte aceasta pentru a şterge toate părţile acestei tranzacţii"
+
+#: dialogs/ksplittransactiondlg.cpp:84
+msgid "&Merge"
+msgstr "&Combină"
+
+#: dialogs/ksplittransactiondlg.cpp:183
+msgid ""
+"The total amount of this transaction is %1 while the sum of the splits is %"
+"2. The remaining %3 are unassigned."
+msgstr ""
+"Suma totală a acestei tranzacţii este %1 iar suma părţilor de tranzacţie "
+"este %2. Suma %3 a rămas neasignată."
+
+#: dialogs/ksplittransactiondlg.cpp:191
+#, c-format
+msgid "Change &total amount of transaction to %1."
+msgstr "Schimbă suma &totală a tranzacţiei în %1."
+
+#: dialogs/ksplittransactiondlg.cpp:194
+msgid "&Distribute difference of %1 among all splits."
+msgstr "&Distribuie diferenţa de %1 între celelalte părţi de tranzacţie."
+
+#: dialogs/ksplittransactiondlg.cpp:203
+#, c-format
+msgid "&Leave total amount of transaction at %1."
+msgstr "&Păstrează suma totală a tranzacţiei la valoare %1."
+
+#: dialogs/ksplittransactiondlg.cpp:205
+msgid "&Leave %1 unassigned."
+msgstr "&Păstrează suma %1 neasignată."
+
+#: dialogs/ksplittransactiondlg.cpp:275
+msgid ""
+"You are about to delete all splits of this transaction. Do you really want "
+"to continue?"
+msgstr ""
+"Sunteţi pe cale de a şterge toate părţile acestei tranzacţii. Doriţi "
+"întradevăr să continuaţi?"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:97
+msgid "Use this to create a new QIF import/export profile"
+msgstr ""
+"Folosiţi această funcţie pentru a creea un nou profil de import/export QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:148
+#: dialogs/mymoneyqifprofileeditor.cpp:403 dialogs/rc.cpp:797
+msgid "QIF Profile Editor"
+msgstr "Editor de profil QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:150
+msgid "QIF Profile Selector"
+msgstr "Alegeţi profilul QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:236
+msgid "The default QIF profile"
+msgstr "Profilul QIF implicit"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:404
+#: dialogs/mymoneyqifprofileeditor.cpp:417
+msgid "Enter new profile name"
+msgstr "Introduce un nume de profil nou"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:436
+msgid "Do you really want to delete profile '%1'?"
+msgstr "Doriţi într-adevăr să ştergeţi profilul '%1'?"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:38
+msgid "Select additional keys"
+msgstr "Alegeţi chei adiţionale"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:48 widgets/rc.cpp:25
+msgid "User identification"
+msgstr "Identificarea utilizatorului"
+
+#: dialogs/kendingbalancedlg.cpp:71
+msgid ""
+"Please enter the following fields with the information as you find them on "
+"your statement. Make sure to enter all values in <b>%1</b>."
+msgstr ""
+"Vă rog să introduceţi în următoarele câmpuri informaţiile de pe extrasul "
+"dumneavoastră de cont. Aveţi grijă să introduceţi toate valorile în <b>%1</"
+"b>."
+
+#: dialogs/kendingbalancedlg.cpp:124
+#, c-format
+msgid "Last reconciled statement: %1"
+msgstr "Extrasul de cont folosit pentru ultima reconciliere: %1"
+
+#: dialogs/kendingbalancedlg.cpp:437 dialogs/kendingbalancedlg.cpp:577
+#: dialogs/rc.cpp:137
+msgid "Adjustment transaction"
+msgstr "Tranzacţie de ajustare"
+
+#: dialogs/kendingbalancedlg.cpp:510
+msgid ""
+"KMyMoney has calculated the following amounts for interest and amortization "
+"according to recorded payments between %1 and %2."
+msgstr ""
+"KMyMoney a calculat următoarele valori ale dobânzii şi ale amortizării în "
+"concordanţă cu plăţile înregistrate între %1 şi %2."
+
+#: dialogs/kbalancechartdlg.cpp:59
+#, c-format
+msgid "Balance of %1"
+msgstr "Soldul %1"
+
+#: dialogs/kbalancechartdlg.cpp:70
+msgid "%1 Balance History"
+msgstr "%1 istoricul soldului"
+
+#: dialogs/kmymoneysplittable.cpp:98
+msgid "Split Options"
+msgstr "Opţiuni împărţire"
+
+#: dialogs/kmymoneysplittable.cpp:99 dialogs/rc.cpp:731
+#: widgets/kmymoneypriceview.cpp:149
+msgid "Edit..."
+msgstr "Modifică..."
+
+#: dialogs/kmymoneysplittable.cpp:100
+msgid "Duplicate"
+msgstr "Creează un duplicat"
+
+#: dialogs/kmymoneysplittable.cpp:102
+msgid "Delete ..."
+msgstr "Şterge..."
+
+#: dialogs/kmymoneysplittable.cpp:275
+msgid ""
+"_: Duplicate split\n"
+"CTRL+c"
+msgstr "CTRL+c"
+
+#: dialogs/kmymoneysplittable.cpp:562
+msgid "will be calculated"
+msgstr "va fi calculat"
+
+#: dialogs/kmymoneysplittable.cpp:648
+msgid ""
+"You are about to delete the selected split. Do you really want to continue?"
+msgstr ""
+"Urmează să stegeţi partea de tranzacţie marcată. Doriţi într-adevăr să "
+"continuaţi?"
+
+#: dialogs/rc.cpp:1
+msgid "Account selection"
+msgstr "Alegere cont"
+
+#: dialogs/rc.cpp:3
+msgid "Account to import to"
+msgstr "Contul în care se importă"
+
+#: dialogs/rc.cpp:6 dialogs/rc.cpp:170 widgets/rc.cpp:169
+msgid "Skip"
+msgstr "Omite"
+
+#: dialogs/rc.cpp:8
+msgid ""
+"Use this dialog to backup your data. \n"
+"\n"
+"Please make sure you have a disk inserted and that the drive is ready. Then "
+"choose the mount point from either the Choose button or by entering the path "
+"in the available box.\n"
+"\n"
+"Click OK to perform the backup. If your system does not use an automounter, "
+"make sure you mark the checkbox below to \"mount this directory before "
+"backing up.\""
+msgstr ""
+"Folosiţi acest dialog pentru a realiza o copie de siguranţă a datelor "
+"dumneavoastră.\n"
+"\n"
+"Vă rog să vă asiguraţi de faptul că aveţi un disk inserat şi de faptul că "
+"dispozitivul este pregătit. Apoi alegeţi punctul de montare fie din butonul "
+"Alege fie introducând calea în căsuţă disponibilă pentru aceasta.\n"
+"\n"
+"Faceţi click pe OK pentru a realiza copia dumneavoastră de siguranţă. Dacă "
+"sistemul dumneavoastră nu poate monta calea automat asiguraţi-vă că aţi "
+"bifat căsuţa de mai \"montează acest director înainte de a efectua copia de "
+"siguranţă.\"."
+
+#: dialogs/rc.cpp:9
+msgid "Device options"
+msgstr "Opţiuni de dispozitiv"
+
+#: dialogs/rc.cpp:10
+msgid ""
+"_: This is the mount point\n"
+"Mount Point:"
+msgstr "Punct de montare:"
+
+#: dialogs/rc.cpp:11
+msgid "Choose..."
+msgstr "Alege..."
+
+#: dialogs/rc.cpp:12
+msgid "Mount this directory before backing up."
+msgstr "Montează acest director înainte de a efectua copia de siguranţă."
+
+#: dialogs/rc.cpp:15
+msgid "Reassign categories"
+msgstr "Reasignează categoriile"
+
+#: dialogs/rc.cpp:16
+msgid ""
+"The transactions, schedules and budgets associated with the selected "
+"category need to be re-assigned to a different category before the selected "
+"category can be deleted. Please select a category from the list below."
+msgstr ""
+"Tranzacţiile, plăţile programate şi bugetele asociate cu categoria aleasă "
+"trebuiesc reasignate altor categorii înainte ca categoria aleasă să poată fi "
+"ştearsă. Vă rog să alegeţi o categorie din lista de mai jos."
+
+#: dialogs/rc.cpp:17
+msgid "Available categories:"
+msgstr "Categorii disponibile:"
+
+#: dialogs/rc.cpp:21
+msgid ""
+"Please choose the type of import you wish to perform. A simple "
+"explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Vă rog să alegeţi tipul importului pe care doriţi să-l efectuaţi. O "
+"explicaţie simplă a tipului de import este disponibilă în partea de jos a "
+"ecranului şi este actualizată când alegeţi o opţiune din lista de opţiuni.\n"
+"\n"
+"Odată ce aţi ales un tip de import vă rog să acţionaţi butonul OK."
+
+#: dialogs/rc.cpp:23
+msgid "QIF"
+msgstr "QIF"
+
+#: dialogs/rc.cpp:24
+msgid "CSV"
+msgstr "CSV"
+
+#: dialogs/rc.cpp:25
+msgid "Some descripton"
+msgstr "Descriere"
+
+#: dialogs/rc.cpp:28
+msgid "Confirm Manual Enter"
+msgstr "Confirmaţi introducerea manuală"
+
+#: dialogs/rc.cpp:29
+msgid "The following changes have been made to the transaction data:"
+msgstr "Următoarele schimbări au fost efectuate asupra datelor tranzacţiei:"
+
+#: dialogs/rc.cpp:30
+msgid "Please choose what you wish to do with the above changes"
+msgstr "Vă rog să alegeţi ce doriţi să faceţi cu schimbările de mai sus."
+
+#: dialogs/rc.cpp:31
+msgid ""
+"Discard the changes and enter the original transaction into the register."
+msgstr "Renunţă la modificări şi introdu tranzacţia originală în registru."
+
+#: dialogs/rc.cpp:32
+msgid "Enter these new values this one time, for this occurence only."
+msgstr ""
+"Introduce aceste valori noi de această dată, doar pentru această apariţie."
+
+#: dialogs/rc.cpp:33
+msgid "Set all further occurences in this schedule to be these values."
+msgstr ""
+"Setează toate apariţiile viitoare ale acestei plăţi programate la aceste "
+"valori."
+
+#: dialogs/rc.cpp:36
+msgid "CSV Dialog"
+msgstr "Dialog CSV"
+
+#: dialogs/rc.cpp:37
+msgid ""
+"CSV Dialog. Choose a file and then click on Run. You can view your "
+"progress at\n"
+"the bottom of the screen.\n"
+"\n"
+"You can cancel the process at any time by clicking on the Cancel button."
+msgstr ""
+"Dialogul CSV. Alegeţi un fişier şi folosiţi butonul Execută. Puteţi să "
+"urmăriţi progresul în partea de jos a ecranului.\n"
+"\n"
+"Puteţi să întrerupeţi procesul în orice moment acţionând butonul Renunţă."
+
+#: dialogs/rc.cpp:38
+msgid "Choose the csv file:"
+msgstr "Alege fişierul csv:"
+
+#: dialogs/rc.cpp:39
+msgid "Browse"
+msgstr "Răsfoieşte"
+
+#: dialogs/rc.cpp:40
+msgid "Between These Dates"
+msgstr "Între aceste date"
+
+#: dialogs/rc.cpp:41 dialogs/rc.cpp:196
+msgid "Start on:"
+msgstr "Începe în:"
+
+#: dialogs/rc.cpp:42 dialogs/rc.cpp:195
+msgid "End on:"
+msgstr "Sfârşeşte în"
+
+#: dialogs/rc.cpp:43
+msgid "Run"
+msgstr "Rulează"
+
+#: dialogs/rc.cpp:44
+msgid "Progress Info"
+msgstr "Informaţii progres"
+
+#: dialogs/rc.cpp:45
+msgid "Processing Account:"
+msgstr "Se procesează contul:"
+
+#: dialogs/rc.cpp:47
+msgid "Processing Transaction:"
+msgstr "Procesează tranzacţia:"
+
+#: dialogs/rc.cpp:48
+msgid "0 of 0"
+msgstr "0 din 0"
+
+#: dialogs/rc.cpp:50
+msgid "Exchange Rate/Price Editor"
+msgstr "Editor de preţ/rată de schimb"
+
+#: dialogs/rc.cpp:55
+msgid "Convert from"
+msgstr "Converteşte din"
+
+#: dialogs/rc.cpp:58
+msgid "Convert to"
+msgstr "Converteşte în"
+
+#: dialogs/rc.cpp:61
+msgid "To amount"
+msgstr "La suma"
+
+#: dialogs/rc.cpp:62
+msgid "Exchange rate / Price"
+msgstr "Rata de schimb / Preţ"
+
+#: dialogs/rc.cpp:64
+msgid ""
+"xx\n"
+"xx"
+msgstr ""
+"xx\n"
+"xx"
+
+#: dialogs/rc.cpp:68
+msgid "Currencies"
+msgstr "Valute"
+
+#: dialogs/rc.cpp:72
+msgid "real ID"
+msgstr "ID real"
+
+#: dialogs/rc.cpp:73 dialogs/rc.cpp:722
+msgid "ID"
+msgstr "ID"
+
+#: dialogs/rc.cpp:74
+msgid "X"
+msgstr "X"
+
+#: dialogs/rc.cpp:76 dialogs/rc.cpp:459
+msgid "Online Source"
+msgstr "Sursă online"
+
+#: dialogs/rc.cpp:78 dialogs/rc.cpp:278 dialogs/rc.cpp:312 dialogs/rc.cpp:684
+msgid "F1"
+msgstr "F1"
+
+#: dialogs/rc.cpp:80
+msgid "If this button is not activated, select the base currency first."
+msgstr "Dacă acest buton nu este activat, alegeţi moneda întâi."
+
+#: dialogs/rc.cpp:81
+msgid ""
+"Press this button to close the dialog. If the button is not activated, "
+"select your base currency."
+msgstr ""
+"Folosiţi acest buton pentru a închide dialogul. Dacă butonul nu este "
+"activat, alegeţi moneda de bază."
+
+#: dialogs/rc.cpp:82
+msgid "Edit Equity"
+msgstr "Editează capital"
+
+#: dialogs/rc.cpp:86 dialogs/rc.cpp:410
+msgid "Smallest fraction:"
+msgstr "Cea mai mică fracţie:"
+
+#: dialogs/rc.cpp:87 dialogs/rc.cpp:408 dialogs/rc.cpp:440
+msgid "1 /"
+msgstr "1 /"
+
+#: dialogs/rc.cpp:88 dialogs/rc.cpp:405
+msgid "Investment Type:"
+msgstr "Tip de investiţie:"
+
+#: dialogs/rc.cpp:89 dialogs/rc.cpp:404
+msgid "Equity Name:"
+msgstr "Nume capital:"
+
+#: dialogs/rc.cpp:90 dialogs/rc.cpp:409
+msgid "Market Symbol:"
+msgstr "Simbol:"
+
+#: dialogs/rc.cpp:91
+msgid "Price History"
+msgstr "Istoricul preţului"
+
+#: dialogs/rc.cpp:97
+msgid "Edit Scheduled transaction"
+msgstr "Modifică tranzacţia programată"
+
+#: dialogs/rc.cpp:98
+msgid "Schedule name:"
+msgstr "Numele plăţii programate:"
+
+#: dialogs/rc.cpp:99
+msgid "Frequency:"
+msgstr "Frecvenţă:"
+
+#: dialogs/rc.cpp:100
+msgid "Number of selected periods between entries"
+msgstr "Numărul de perioade alese între intrări"
+
+#: dialogs/rc.cpp:101
+msgid "Payment information"
+msgstr "Informaţii de plată"
+
+#: dialogs/rc.cpp:105 dialogs/rc.cpp:160 dialogs/rc.cpp:247 dialogs/rc.cpp:752
+#: widgets/register.cpp:569
+msgid "C"
+msgstr "V"
+
+#: dialogs/rc.cpp:113
+msgid "Do nothing"
+msgstr "Nu face nimic"
+
+#: dialogs/rc.cpp:116
+msgid "If this schedule occurs on the weekend:"
+msgstr "Dacă plata programată ar trebui să aibă loc la sfârşit de săptămână:"
+
+#: dialogs/rc.cpp:117
+msgid "The amount is an estimate because it varies for each payment"
+msgstr ""
+"Această sumă este una aproximativă deoarece ea variază la fiecare plată"
+
+#: dialogs/rc.cpp:118
+msgid "Enter this schedule into the register automatically when it is due"
+msgstr "Introdu această plată programată automat în registru în data scadentă"
+
+#: dialogs/rc.cpp:119
+msgid "This schedule will end at some time"
+msgstr "Această plată programată se va termina cândva în viitor"
+
+#: dialogs/rc.cpp:120
+msgid "Number of transactions remaining:"
+msgstr "Numărul de tranzacţii rămase:"
+
+#: dialogs/rc.cpp:121
+msgid "Date of final transaction:"
+msgstr "Data tranzacţiei finale:"
+
+#: dialogs/rc.cpp:125
+msgid "Reconciliation Wizard"
+msgstr "Expertul de reconciliere"
+
+#: dialogs/rc.cpp:127
+msgid ""
+"Reconciling your account assures, that your recordings match those of your "
+"institution and that there are no mistakes on either side. You should "
+"reconcile your account whenever you receive a statement from your "
+"institution.\n"
+"\n"
+"All relevant information necessary for this process is usually printed on "
+"your statement.\n"
+"\n"
+"On the next page you will verify, that the starting and ending balance are "
+"matching those on your statement. If not, please modify the figures."
+msgstr ""
+"Reconcilierea conturilor dumneavoastră asigură faptul că înregistrările "
+"dumneavoastră corespund cu înregistrările instituţiei dumneavoastră "
+"eliminând astfel greşelile de ambele părţi. Ar trebui să efectuaţi o "
+"reconciliere de fiecare dată când primiţi un extras de cont de la instituţia "
+"dumneavoastră.\n"
+"\n"
+"Toate informaţiile relevante necesare pentru acest proces se pot găsi de "
+"obicei pe extrasul de cont al dumneavoastră.\n"
+"\n"
+"Pe pagina următoare veţi verifica faptul că soldul iniţial şi soldul final "
+"corespund cu datele de pe extrasul dumneavoastră de cont. În caz contrar vă "
+"rog să modificaţi valorile."
+
+#: dialogs/rc.cpp:129
+msgid ""
+"KMyMoney calculates your loan payments automatically. The amounts can "
+"deviate from those calculated by the creditor. Therefore, you possibly have "
+"to adjust amortization, interest and other costs according to your "
+"statement.\n"
+"\n"
+"Please enter the following information found on your statement:"
+msgstr ""
+"KMyMoney vă calculează plăţile pentru împrumuturi automat. Sumele pot diferi "
+"de cele calculate de către creditorul dumneavoastră. Astfel este posibil să "
+"fiţi nevoiţi să ajustaţi amortizarea, dobânda şi alte costuri conform "
+"extrasului de cont al dumneavoastră.\n"
+"\n"
+"Vă rog să introduceţi următoarele informaţii de pe extrasul dumneavoastră:"
+
+#: dialogs/rc.cpp:130
+msgid "Ending date of statement"
+msgstr "Până la data"
+
+#: dialogs/rc.cpp:131
+msgid "Starting date of statement"
+msgstr "De la data"
+
+#: dialogs/rc.cpp:132
+msgid "Verify payments"
+msgstr "Verifică plăţi"
+
+#: dialogs/rc.cpp:133 dialogs/rc.cpp:148 dialogs/rc.cpp:476 dialogs/rc.cpp:477
+#: dialogs/rc.cpp:508 dialogs/rc.cpp:513 dialogs/rc.cpp:518 dialogs/rc.cpp:532
+#: dialogs/rc.cpp:539 dialogs/rc.cpp:540 dialogs/rc.cpp:541 dialogs/rc.cpp:542
+#: dialogs/rc.cpp:543 dialogs/rc.cpp:552 dialogs/rc.cpp:553 dialogs/rc.cpp:554
+#: dialogs/rc.cpp:555 dialogs/rc.cpp:556 dialogs/rc.cpp:565 dialogs/rc.cpp:566
+#: dialogs/rc.cpp:567 dialogs/rc.cpp:568 dialogs/rc.cpp:569 dialogs/rc.cpp:578
+#: dialogs/rc.cpp:579 dialogs/rc.cpp:580 dialogs/rc.cpp:581 dialogs/rc.cpp:582
+#: dialogs/rc.cpp:591 dialogs/rc.cpp:592 dialogs/rc.cpp:593 dialogs/rc.cpp:594
+#: dialogs/rc.cpp:595 dialogs/rc.cpp:603 dialogs/rc.cpp:604 dialogs/rc.cpp:605
+#: dialogs/rc.cpp:606 dialogs/rc.cpp:607 dialogs/rc.cpp:618 dialogs/rc.cpp:619
+#: dialogs/rc.cpp:621 dialogs/rc.cpp:636 dialogs/rc.cpp:637 dialogs/rc.cpp:638
+#: dialogs/rc.cpp:639 dialogs/rc.cpp:640 dialogs/rc.cpp:641 dialogs/rc.cpp:651
+#: dialogs/rc.cpp:652 dialogs/rc.cpp:654 dialogs/rc.cpp:657 dialogs/rc.cpp:658
+#: dialogs/rc.cpp:659 dialogs/rc.cpp:664 dialogs/rc.cpp:665 dialogs/rc.cpp:668
+#: dialogs/rc.cpp:670 dialogs/rc.cpp:672 dialogs/rc.cpp:674 dialogs/rc.cpp:676
+#: dialogs/rc.cpp:678 dialogs/rc.cpp:681 dialogs/rc.cpp:823 widgets/rc.cpp:167
+msgid "1"
+msgstr "1"
+
+#: dialogs/rc.cpp:136
+msgid ""
+"If your statement shows different amounts, please cancel this dialog and "
+"correct the false transactions or correct the values in this dialog. In the "
+"later case, KMyMoney will create an adjustment transaction and add it to the "
+"ledger."
+msgstr ""
+"Dacă pe extrasul dumneavoastră de cont sunt trecute alte valori vă rog să "
+"anulaţi acest dialog şi corectaţi tranzacţiile false sau corectaţi valorile "
+"în acest dialog. În cazul al doilea KMyMoney va creea o tranzacţie de "
+"ajustare şi o va adăuga în registru."
+
+#: dialogs/rc.cpp:138
+msgid ""
+"In order to create the adjustment transaction, KMyMoney requires an account "
+"and possibly an interest category to assign the differences to. Please "
+"select an account and - if necessary - a category."
+msgstr ""
+"Pentru a creea tranzacţia de ajustare KMyMoney are nevoie de un cont şi "
+"poate şi de o categorie căreia să îi asigneze diferenţele. Vă rog să alegeţi "
+"un cont şi, dacă este necesar, o categorie."
+
+#: dialogs/rc.cpp:140
+msgid "Interest-Category"
+msgstr "Categoria dobânzii"
+
+#: dialogs/rc.cpp:141
+msgid "Restarting postponed reconciliation"
+msgstr "Reporneşte reconcilierea amânată"
+
+#: dialogs/rc.cpp:142
+msgid ""
+"You have previously postponed the reconciliation of this account. If you "
+"have entered charges or interests the last time you started reconciling this "
+"account you can modify these in the ledger later on.\n"
+"\n"
+"It is important, that you continue with the same statement you used when you "
+"postponed the reconciliation.\n"
+"\n"
+"All information you have entered into this wizard will be shown and all "
+"transactions that you already cleared are marked with a 'C'."
+msgstr ""
+"Anterior aţi amânat reconcilierea acestui cont. Dacă aţi introdus comisioane "
+"sau dobânzi ultima dată când aţi început reconcilierea acestui cont puteţi "
+"să le modificaţi în registru mai târziu.\n"
+"\n"
+"Este important să continuaţi să utilizaţi acelaşi extras de cont pe care l-"
+"aţi folosit în momentul în care aţi anulat reconcilierea.\n"
+"\n"
+"Toate informaţiile pe care le-aţi introdus în acest expert vor fi afişate "
+"iar toate tranzacţiile pe care deja le-aţi verificat vor fi marcate cu un "
+"'V'."
+
+#: dialogs/rc.cpp:143
+msgid "Statement Information"
+msgstr "Informaţii despre extrasul de cont"
+
+#: dialogs/rc.cpp:144 dialogs/rc.cpp:315 dialogs/rc.cpp:317 dialogs/rc.cpp:320
+#: dialogs/rc.cpp:321 dialogs/rc.cpp:329 dialogs/rc.cpp:330 dialogs/rc.cpp:333
+#: dialogs/rc.cpp:334 dialogs/rc.cpp:335 dialogs/rc.cpp:336 dialogs/rc.cpp:366
+msgid "x"
+msgstr "x"
+
+#: dialogs/rc.cpp:145
+msgid "Statement date:"
+msgstr "Data extrasului:"
+
+#: dialogs/rc.cpp:146
+msgid "Starting balance of this statement:"
+msgstr "Soldul iniţial al acestui extras:"
+
+#: dialogs/rc.cpp:147
+msgid "Ending balance of this statement:"
+msgstr "Soldul final al acestui extras:"
+
+#: dialogs/rc.cpp:149
+msgid "Interest / Charges"
+msgstr "Dobânda / Comisioane"
+
+#: dialogs/rc.cpp:150
+msgid ""
+"If necessary, enter information about interest or charges here. KMyMoney "
+"will create transactions and clear them directly for you."
+msgstr ""
+"Dacă este cazul introduceţi informaţii despre dobânzi şi comisioane aici. "
+"KMyMoney va crea tranzacţii şi le va marca ca verificate automat pentru "
+"dumneavoastră."
+
+#: dialogs/rc.cpp:153
+msgid "Charges"
+msgstr "Comisioane"
+
+#: dialogs/rc.cpp:154
+msgid "Enter Schedule"
+msgstr "Introduce plata programată"
+
+#: dialogs/rc.cpp:155
+msgid "Schedule Details"
+msgstr "Detaliile plăţii programate"
+
+#: dialogs/rc.cpp:156 dialogs/rc.cpp:348 dialogs/rc.cpp:389 widgets/rc.cpp:164
+msgid "Name:"
+msgstr "Nume:"
+
+#: dialogs/rc.cpp:157 dialogs/rc.cpp:351 widgets/rc.cpp:165
+msgid "Type:"
+msgstr "Tip:"
+
+#: dialogs/rc.cpp:168
+msgid "Enter"
+msgstr "Introdu"
+
+#: dialogs/rc.cpp:169
+msgid ""
+"Enter the transaction and advance the next due date of this schedule to the "
+"next payment date."
+msgstr ""
+"Introdu tranzacţia şi mută următoarea scadenţă a programării la următoare "
+"dată programată."
+
+#: dialogs/rc.cpp:171
+msgid ""
+"Do not enter the transaction but advance the next due date of this schedule "
+"to the next payment date."
+msgstr ""
+"Nu introdu tranzacţia ci mută următoarea scadenţă a programării la următoare "
+"dată programată."
+
+#: dialogs/rc.cpp:172
+msgid "Ignore"
+msgstr "Ignoră"
+
+#: dialogs/rc.cpp:173
+msgid ""
+"Do not enter or skip payments for this schedule but continue with the next "
+"schedule."
+msgstr ""
+"Nu introdu sau omite plăţi pentru această programare ci continuă cu "
+"programarea următoare."
+
+#: dialogs/rc.cpp:175
+msgid "Cancel processing of schedule entry."
+msgstr "Renunţă la procesarea programării."
+
+#: dialogs/rc.cpp:176
+msgid "Update Stock and Currency Prices"
+msgstr "Actualizează cotaţiile acţiunilor şi a monedelor"
+
+#: dialogs/rc.cpp:177
+msgid "List of known Equities, and the date they were last updated on."
+msgstr ""
+"Lista capitalurilor cunoscute şi data ultimei actualizări ale acestora."
+
+#: dialogs/rc.cpp:179
+msgid "Update All"
+msgstr "Actualizează tot"
+
+#: dialogs/rc.cpp:180
+msgid "Update Selected"
+msgstr "Actualizează selecţia"
+
+#: dialogs/rc.cpp:181
+msgid "Status:"
+msgstr "Stare:"
+
+#: dialogs/rc.cpp:184
+msgid "QIF Export"
+msgstr "Exportă QIF"
+
+#: dialogs/rc.cpp:185
+msgid ""
+"From this dialog you are able to export transactions to a quicken compatible "
+"file, (known as a QIF file, because of the extension). Please enter the "
+"path to the QIF file or select it by clicking on the Browse button.\n"
+"\n"
+"You can choose the file's path, the account and the format of the QIF file "
+"(profile). Choose Account to export all the transactions between the "
+"specified dates or just categories. You can also limit the transactions "
+"that are exported by start and ending date. Once you have pressed the "
+"Export button a message box will appear when the export has completed "
+"detailing how many transactions, categories and payees were exported."
+msgstr ""
+"Din acest dialog puteţi să exportaţi tranzacţii într-un fişier compatibil "
+"Quicken (cunoscut ca fişier QIF datorită extensiei). Vă rog să introduceţi "
+"calea către fişierul QIF sau alegeţi-o cu ajutorul butonului Răsfoieşte.\n"
+"\n"
+"Puteţi să alegeţi calea fişierului, contul şi formatul fişierului QIF "
+"(profil). Alegeţi contul pentru a exporta toate tranzacţiile din perioada "
+"specificată sau doar categoriile. Aveţi posibilitatea, de asemenea, să "
+"filtraţi tranzacţiile exportate specificând o dată de început şi o dată de "
+"sfârşit. Odată ce aţi apăsat butonul Exportă un mesaj vă va notifica la "
+"terminarea operaţiei de export detaliând numărul de tranzacţii, categoriile "
+"şi beneficiarii/plătitorii exportaţi."
+
+#: dialogs/rc.cpp:186
+msgid "File to export to:"
+msgstr "Fişier de export:"
+
+#: dialogs/rc.cpp:188
+msgid "Account to export"
+msgstr "Cont de exportat"
+
+#: dialogs/rc.cpp:189 dialogs/rc.cpp:297
+msgid "QIF Profile"
+msgstr "Profil QIF"
+
+#: dialogs/rc.cpp:190 dialogs/rc.cpp:298 dialogs/rc.cpp:362
+#: widgets/kmymoneypriceview.cpp:145
+msgid "New..."
+msgstr "Nou..."
+
+#: dialogs/rc.cpp:191
+msgid "Contents to Export"
+msgstr "Conţinutul exportat"
+
+#: dialogs/rc.cpp:194
+msgid "Date Range"
+msgstr "Perioadă de timp"
+
+#: dialogs/rc.cpp:199
+msgid "Search transactions"
+msgstr "Caută tranzacţii"
+
+#: dialogs/rc.cpp:200
+msgid "Criteria"
+msgstr "Criterii"
+
+#: dialogs/rc.cpp:201
+msgid "Define your search criteria"
+msgstr "Definiţi criteriul de căutare al dumneavoastră"
+
+#: dialogs/kfindtransactiondlg.cpp:169 dialogs/rc.cpp:202
+msgid "Text"
+msgstr "Text"
+
+#: dialogs/rc.cpp:203
+msgid "Contains"
+msgstr "Conține"
+
+#: dialogs/rc.cpp:204
+msgid "Does not contain"
+msgstr "Nu conține"
+
+#: dialogs/rc.cpp:205
+msgid "Treat text as regular expression"
+msgstr "Tratează textul ca expresie regulată"
+
+#: dialogs/rc.cpp:206
+msgid "Case sensitive"
+msgstr "Sensibil la majuscule"
+
+#: dialogs/rc.cpp:209
+msgid "Range"
+msgstr "Interval"
+
+#: dialogs/rc.cpp:210
+msgid ""
+"_: To (Date)\n"
+"To"
+msgstr "Până la"
+
+#: dialogs/rc.cpp:211
+msgid ""
+"_: From (Date)\n"
+"From"
+msgstr "De la"
+
+#: dialogs/rc.cpp:213
+msgid "Search this amount"
+msgstr "Caută după această sumă"
+
+#: dialogs/rc.cpp:214
+msgid "Search amount in the range"
+msgstr "Caută după suma în intervalul"
+
+#: dialogs/rc.cpp:215
+msgid ""
+"_: to (amount)\n"
+"to"
+msgstr "până la"
+
+#: dialogs/rc.cpp:216
+msgid ""
+"_: from (amount)\n"
+"from"
+msgstr "de la"
+
+#: dialogs/rc.cpp:220
+msgid "Select transactions without payees"
+msgstr "Alege tranzacţii fără beneficiari/plătitori"
+
+#: dialogs/rc.cpp:221
+msgid "Select all"
+msgstr "Selectează tot"
+
+#: dialogs/rc.cpp:222
+msgid "Select none"
+msgstr "Nu selecta nimic"
+
+#: dialogs/rc.cpp:224
+msgid "Validity"
+msgstr "Validitate"
+
+#: dialogs/rc.cpp:226
+msgid "All states"
+msgstr "Toate stările"
+
+#: dialogs/rc.cpp:230
+msgid "All types"
+msgstr "Toate tipurile"
+
+#: dialogs/rc.cpp:234
+msgid "Any transaction"
+msgstr "Oricare tranzacţie"
+
+#: dialogs/rc.cpp:235
+msgid "Valid transaction"
+msgstr "Tranzacţii valide"
+
+#: dialogs/rc.cpp:236
+msgid "Invalid transaction"
+msgstr "Tranzacţii invalide"
+
+#: dialogs/rc.cpp:237
+msgid "State"
+msgstr "Stare"
+
+#: dialogs/rc.cpp:238
+msgid "Search this number"
+msgstr "Caută acest număr"
+
+#: dialogs/rc.cpp:239
+msgid "Search number in range"
+msgstr "Caută după număr în intervalul"
+
+#: dialogs/rc.cpp:240
+msgid ""
+"_: to (number)\n"
+"to"
+msgstr "până la"
+
+#: dialogs/rc.cpp:241
+msgid ""
+"_: from (number)\n"
+"from"
+msgstr "de la"
+
+#: dialogs/rc.cpp:242
+msgid "text"
+msgstr "text"
+
+#: dialogs/rc.cpp:243
+msgid "warning"
+msgstr "avertisment"
+
+#: dialogs/rc.cpp:244
+msgid "Result"
+msgstr "Rezultat"
+
+#: dialogs/rc.cpp:254
+msgid "F"
+msgstr "F"
+
+#: dialogs/rc.cpp:257 dialogs/rc.cpp:844
+msgid "&Reset"
+msgstr "&Resetează"
+
+#: dialogs/rc.cpp:258
+msgid "&Find"
+msgstr "&Caută"
+
+#: dialogs/rc.cpp:259
+msgid "GnuCash Import Options"
+msgstr "Opţiuni de import GnuCash"
+
+#: dialogs/rc.cpp:260
+msgid "Use 'Help' for more information on these options"
+msgstr "Folosiţi 'Ajutor' pentru mai multe informaţii despre aceste opţiuni"
+
+#: dialogs/rc.cpp:261
+msgid "Investment Handling"
+msgstr "Tratarea investiţiilor"
+
+#: dialogs/rc.cpp:262
+msgid "One investment account for each stock"
+msgstr "Un cont de investiţii pentru fiecare tip de acţiune"
+
+#: dialogs/rc.cpp:263
+msgid "One investment account for all stocks"
+msgstr "Un cont de investiţii pentru toate acţiunile"
+
+#: dialogs/rc.cpp:264
+msgid "Prompt for an investment account for each stock"
+msgstr ""
+"Întreabă-mă pentru a indica un cont de investiţii pentru fiecare tip de "
+"acţiune"
+
+#: dialogs/rc.cpp:265
+msgid "Online price quotes"
+msgstr "Cotaţii online de preţuri"
+
+#: dialogs/rc.cpp:266
+msgid "Use Finance::Quote for share price quotes"
+msgstr "Foloseşte Finance::Quote pentru cotaţiile acţiunilor"
+
+#: dialogs/rc.cpp:267
+msgid "Scheduled Transactions"
+msgstr "Tranzacţii programate"
+
+#: dialogs/rc.cpp:268
+msgid "Drop suspect scheduled transactions"
+msgstr "Renunţă la tranzacţii programate suspecte"
+
+#: dialogs/rc.cpp:269
+msgid "Decoding option"
+msgstr "Opţiune de decodificare"
+
+#: dialogs/rc.cpp:270
+msgid "Decode using"
+msgstr "Decodifică folosind"
+
+#: dialogs/rc.cpp:271
+msgid "Transaction Notes option"
+msgstr "Opţiuni note de tranzacţie"
+
+#: dialogs/rc.cpp:272
+msgid "Use transaction notes on non-split transactions"
+msgstr "Foloseşte note de tranzacţie pentru tranzacţii care nu sunt compuse"
+
+#: dialogs/rc.cpp:273
+msgid "Debug Options"
+msgstr "Opţiuni de depanare"
+
+#: dialogs/rc.cpp:274
+msgid "General debug data"
+msgstr "Date generale de depanare"
+
+#: dialogs/rc.cpp:275
+msgid "Display XML data"
+msgstr "Afisează datele XML"
+
+#: dialogs/rc.cpp:276
+msgid "Anonymize data"
+msgstr "Anonimizează datele"
+
+#: dialogs/rc.cpp:281
+msgid "Online Quotes - Select price source"
+msgstr "Cotaţii online - Alegeţi sursa preţului"
+
+#: dialogs/rc.cpp:284
+msgid ""
+"This price source is not known to KMyMoney. Please select an option below."
+msgstr ""
+"Această sursă nu este cunoscută de către KMyMoney. Vă rog să alegeţi o "
+"opţiune din lista de mai jos."
+
+#: dialogs/rc.cpp:285
+msgid "Do not perform online quotes for this investment"
+msgstr "Nu efectua actualizarea online a cotaţiilor pentru această investiţie"
+
+#: dialogs/rc.cpp:286
+msgid "Select a known KMyMoney source from the list below"
+msgstr "Alegeţi o sursă cunoscută de către KMyMoney din lista de mai jos"
+
+#: dialogs/rc.cpp:287
+msgid ""
+"Use the following name for the price source.\n"
+"(Click Help for further information.)"
+msgstr ""
+"Foloseşte următorul nume pentru sursa de preţ.\n"
+"(Folosiţi 'Ajutor' pentru mai multe informaţii)"
+
+#: dialogs/rc.cpp:288
+msgid "Always use this selection for this price source."
+msgstr ""
+"Foloseşte întotdeauna această selecţie pentru această sursă de preţuri."
+
+#: dialogs/rc.cpp:289
+msgid "QIF Import"
+msgstr "Importă QIF"
+
+#: dialogs/rc.cpp:290
+msgid ""
+"From this dialog you are able to import transactions from a Quicken<b>&trade;"
+"</b> compatible file, (known as a QIF file, because of the extension).<p>\n"
+"\n"
+"Please enter the path to the QIF file or select it by clicking on the Browse "
+"button. Once you have the file's path press the Import button and KMyMoney "
+"will import all the transactions, categories and payees it finds."
+msgstr ""
+"Din acest dialog puteţi importa tranzacţii dintr-un fişier compatibil cu "
+"aplicaţia Quicken<b>&trade;</b> (cunoscut ca fişier QIF din cauza extensiei)"
+"<p>\n"
+"\n"
+"Vă rog să introduceţi calea către fişierul QIF sau localizaţi-l făcând click "
+"pe butonul Răsfoieşte. Odată ce aţi introdus calea fişierului acţionând "
+"butonul Importă KMyMoney vă va importa toate tranzacţiile, categoriile şi "
+"beneficiarii/plătitorii pe care îi găseşte."
+
+#: dialogs/rc.cpp:291
+msgid "QIF File to Import:"
+msgstr "Fişier QIF de importat"
+
+#: dialogs/rc.cpp:292
+msgid "Import options"
+msgstr "Opţiuni de import"
+
+#: dialogs/rc.cpp:293
+msgid "Bank statement"
+msgstr "Extras bancar"
+
+#: dialogs/rc.cpp:294
+msgid "Other application"
+msgstr "Altă aplicaţie"
+
+#: dialogs/rc.cpp:295
+msgid ""
+"Select <b>Bank statement</b> turns on automatic category matching which is "
+"turned off in case of <b>Historic data</b>. Use the latter if you import "
+"files from other Personal Finance Management software."
+msgstr ""
+"opţiunii Alegerea <b>Extras bancar</b> activează asocierea automată a "
+"categoriilor care este oprită în cazul folosirii opţiunii <b>Date istorice</"
+"b>. Folosiţi-o pe cea din urmă dacă importaţi fişiere din ale aplicaţii de "
+"gestionare a finanţelor personale."
+
+#: dialogs/rc.cpp:296
+msgid "Source of QIF"
+msgstr "Sursa QIF"
+
+#: dialogs/rc.cpp:302
+msgid "Verify Import"
+msgstr "Verifică importul"
+
+#: dialogs/rc.cpp:304
+msgid "Ok"
+msgstr "Ok"
+
+#: dialogs/rc.cpp:306
+msgid "MyDialog"
+msgstr "Dialogul meu"
+
+#: dialogs/rc.cpp:310
+msgid "File Information"
+msgstr "Informaţii despre fişier"
+
+#: dialogs/rc.cpp:316
+msgid "Last modified on"
+msgstr "Ultima modificare la"
+
+#: dialogs/rc.cpp:319
+msgid "Base currency"
+msgstr "Moneda de bază"
+
+#: dialogs/rc.cpp:322
+msgid "Created on"
+msgstr "Creat la"
+
+#: dialogs/rc.cpp:325
+msgid "Accounts/Categories"
+msgstr "Conturi/Categorii"
+
+#: dialogs/rc.cpp:328
+msgid "Closed"
+msgstr "Închis"
+
+#: dialogs/rc.cpp:331
+msgid "Prices"
+msgstr "Preţuri"
+
+#: dialogs/rc.cpp:337
+msgid "Splits"
+msgstr "Părţi de tranzacţie"
+
+#: dialogs/rc.cpp:338
+msgid "Price Editor"
+msgstr "Editor de preţuri"
+
+#: dialogs/rc.cpp:339
+msgid "Show all stored prices"
+msgstr "Arată toate preţurile stocate"
+
+#: dialogs/rc.cpp:343
+msgid "Delete Range..."
+msgstr "Şterge intervalul..."
+
+#: dialogs/rc.cpp:346
+msgid "New Account Dialog"
+msgstr "Cont nou"
+
+#: dialogs/rc.cpp:349
+msgid "Opening information"
+msgstr "Informaţii despre deschidere"
+
+#: dialogs/rc.cpp:350
+msgid "Currency:"
+msgstr "Moneda:"
+
+#: dialogs/rc.cpp:352 dialogs/rc.cpp:793
+msgid "Date:"
+msgstr "Dată:"
+
+#: dialogs/rc.cpp:353
+msgid "Balance:"
+msgstr "Sold:"
+
+#: dialogs/rc.cpp:355
+msgid "Last check number:"
+msgstr "Ultimul număr de cec"
+
+#: dialogs/rc.cpp:356
+msgid "Notes:"
+msgstr "Note:"
+
+#: dialogs/rc.cpp:357
+msgid "No auto-VAT-assignment"
+msgstr "Nu efectua asignare automată de TVA"
+
+#: dialogs/rc.cpp:358 dialogs/rc.cpp:441
+msgid "Price entry"
+msgstr "Intrare preţ"
+
+#: dialogs/rc.cpp:359
+msgid "Preferred Account"
+msgstr "Cont preferat"
+
+#: dialogs/rc.cpp:363
+msgid "Number:"
+msgstr "Număr:"
+
+#: dialogs/rc.cpp:364 dialogs/rc.cpp:395
+msgid "BIC"
+msgstr "CIB (cod de identificare a băncii)"
+
+#: dialogs/rc.cpp:367
+msgid "Hierarchy"
+msgstr "Ierarhie"
+
+#: dialogs/rc.cpp:368
+msgid "Subaccount"
+msgstr "Subcont"
+
+#: dialogs/rc.cpp:369
+msgid "Limits"
+msgstr "Limite"
+
+#: dialogs/rc.cpp:370
+msgid ""
+"This page allows to setup certain limits. KMyMoney will warn you when the "
+"account balance reaches a limit."
+msgstr ""
+"Această pagină vă permite configurarea unor limite. KMyMoney vă va avertiza "
+"în momentul în care soldul contului va atinge una dintre limite."
+
+#: dialogs/rc.cpp:372
+msgid "Absolute limit"
+msgstr "Limită absolută"
+
+#: dialogs/rc.cpp:373
+msgid "Maximum credit limit"
+msgstr "Limita maximă de credit"
+
+#: dialogs/rc.cpp:374
+msgid "Minimum balance"
+msgstr "Soldul minim"
+
+#: dialogs/rc.cpp:375
+msgid "Early warning"
+msgstr "Avertizare din timp"
+
+#: dialogs/rc.cpp:377
+msgid "VAT details"
+msgstr "Detalii TVA"
+
+#: dialogs/rc.cpp:378
+msgid "VAT category"
+msgstr "Categorie TVA"
+
+#: dialogs/rc.cpp:379
+msgid "VAT percentage"
+msgstr "Procent TVA"
+
+#: dialogs/rc.cpp:380
+msgid "Enable auto VAT assignment"
+msgstr "Activează asignarea TVA automată"
+
+#: dialogs/rc.cpp:381
+msgid "Amount entered"
+msgstr "Suma introdusă"
+
+#: dialogs/rc.cpp:382
+msgid "Gross amount"
+msgstr "Suma brută"
+
+#: dialogs/rc.cpp:383
+msgid "Net amount"
+msgstr "Suma netă"
+
+#: dialogs/rc.cpp:384
+msgid "Include on Tax Reports"
+msgstr "Include în raporturile de impozite"
+
+#: dialogs/rc.cpp:387
+msgid "New Institution Dialog"
+msgstr "Instituţie nouă"
+
+#: dialogs/rc.cpp:388
+msgid "Institution Details"
+msgstr "Detalii ale instituţiei"
+
+#: dialogs/rc.cpp:390
+msgid "City:"
+msgstr "Oraş:"
+
+#: dialogs/rc.cpp:394
+msgid "Routing Number:"
+msgstr "Cod de identifcare bancă:"
+
+#: dialogs/rc.cpp:398
+msgid "New Budget"
+msgstr "Buget nou"
+
+#: dialogs/rc.cpp:403
+msgid "New Equity"
+msgstr "Capital nou"
+
+#: dialogs/rc.cpp:406 dialogs/rc.cpp:407
+msgid "Trading Symbol of the stock or mutual fund, not required."
+msgstr "Simbolul acţiunii sau a fondului mutual, nu este obligatoriu"
+
+#: dialogs/rc.cpp:414 dialogs/rc.cpp:415
+msgid "Name of the company, or mutual fund."
+msgstr "Numele companiei sau a fondului mutual"
+
+#: dialogs/rc.cpp:418
+msgid "New File Dialog"
+msgstr "Fişier nou"
+
+#: dialogs/rc.cpp:419
+msgid ""
+"Use this dialog to enter personal information about yourself.\n"
+"\n"
+"All information is optional and is provided to personalize\n"
+"your KMyMoney file."
+msgstr ""
+"Folosiţi acest dialog pentru a introduce informaţii personale despre "
+"dumneavoastră.\n"
+"\n"
+"Toate informaţiile sunt opţionale şi sunt date doar pentru a vă personaliza "
+"fişierul KMyMoney."
+
+#: dialogs/rc.cpp:430
+msgid "New Investment wizard"
+msgstr "Expertul de configurare pentru o investiţie nouă"
+
+#: dialogs/rc.cpp:431
+msgid "Investment Type"
+msgstr "Tip de investiţie"
+
+#: dialogs/rc.cpp:432
+msgid "This wizard allows you to create a new investment."
+msgstr "Acest expert vă permite crearea unei investiţii noi."
+
+#: dialogs/rc.cpp:433
+msgid ""
+"The first step in this process requires to select the type of investment. "
+"The following steps collect more details about the investment from you."
+msgstr ""
+"Primul pas al acestui proces constă în alegerea tipului de investiţie. Paşii "
+"următori vor colecta detalii suplimentare despre investiţie de la "
+"dumneavoastră."
+
+#: dialogs/rc.cpp:434
+msgid "Type of investment"
+msgstr "Tipul investiţiei"
+
+#: dialogs/rc.cpp:438
+msgid "Investment details"
+msgstr "Detalii ale investiţiei"
+
+#: dialogs/rc.cpp:439
+msgid ""
+"Enter the details below and click <b>Next</b> to continue entering the "
+"online update details."
+msgstr ""
+"Introduceţi detaliile mai jos şi faceţi clic pe <b>Următor</b> pentru a "
+"continua introducerea detaliilor actualizării online."
+
+#: dialogs/rc.cpp:442 dialogs/rc.cpp:728
+msgid "Fraction"
+msgstr "Fracţie"
+
+#: dialogs/rc.cpp:443
+msgid "Trading Currency"
+msgstr "Moneda de tranzacţionare"
+
+#: dialogs/rc.cpp:444
+msgid "Full name"
+msgstr "Nume complet"
+
+#: dialogs/rc.cpp:445
+msgid "AMEX"
+msgstr "AMEX"
+
+#: dialogs/rc.cpp:446
+msgid "EUREX"
+msgstr "EUREX"
+
+#: dialogs/rc.cpp:447
+msgid "FUND"
+msgstr "FUND"
+
+#: dialogs/rc.cpp:448
+msgid "NASDAQ"
+msgstr "NASDAQ"
+
+#: dialogs/rc.cpp:449
+msgid "NYSE"
+msgstr "NYSE"
+
+#: dialogs/rc.cpp:450
+msgid "XETRA"
+msgstr "XETRA"
+
+#: dialogs/rc.cpp:451
+msgid "Trading symbol"
+msgstr "Simbol"
+
+#: dialogs/rc.cpp:452
+msgid "Identification"
+msgstr "Identificare"
+
+#: dialogs/rc.cpp:453
+msgid "Enter the ticker symbol (e.g. RHAT)."
+msgstr "Introduceţi simbolul de pe piaţa de capital (de exemplu RHAT)"
+
+#: dialogs/rc.cpp:454
+msgid "Enter the CUSIP/ISIN/WKN identification number here"
+msgstr "Introduceţi numărul de identificare CUSIP/ISIN/WKN aici"
+
+#: dialogs/rc.cpp:455
+msgid "Trading market"
+msgstr "Piaţa de tranzacţionare"
+
+#: dialogs/rc.cpp:456
+msgid "Online Update"
+msgstr "Actualizare online"
+
+#: dialogs/rc.cpp:457
+msgid ""
+"Select an online source and click <b>Finish</b> to store the investment "
+"data. If you don't want to use online updates, just leave the data as is."
+msgstr ""
+"Alegeţi o sursă online şi faceţi clic pe <b>Termină</b> pentru a salva "
+"datele investiţiei. Dacă nu doriţi să folosiţi actualizarea online lăsaţi "
+"datele nemodificate."
+
+#: dialogs/rc.cpp:458
+msgid "Use Finance::Quote"
+msgstr "Folosiţi Finance::Quote"
+
+#: dialogs/rc.cpp:460
+msgid "Factor"
+msgstr "Factor"
+
+#: dialogs/rc.cpp:461
+msgid "New Loan Wizard"
+msgstr "Expert de creare a unui împrumut nou"
+
+#: dialogs/rc.cpp:462
+msgid "New Loan Account Wizard"
+msgstr "Expert de creare a unui cont de împrumut nou"
+
+#: dialogs/rc.cpp:463
+msgid ""
+"\n"
+"Welcome to the New Loan Account Wizard which will guide you through the "
+"creation of a new loan e.g. for your home, your car or any other loan that "
+"you pay or gain interest for.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Bine aţi venit în Expertul de creare a unui împrumut nou ce vă va îndruma în "
+"procesul de creere a unui împrumut nou ca de exemplu a unui împrumut pentru "
+"o locuinţă, pentru un automobil sau orice alt tip de împrumut dat sau luat.\n"
+"\n"
+"Vă rog să vă asiguraţi că aveţi toate informaţiile necesare la îndemână. În "
+"cele mai multe cazuri puteţi obţine toate informaţiile necesare din "
+"contractul de credit şi din ultimul extras de cont."
+
+#: dialogs/rc.cpp:464
+msgid "Edit Loan Account Wizard"
+msgstr "Expert de modificare a unui cont de împrumut"
+
+#: dialogs/rc.cpp:465
+msgid ""
+"\n"
+"Welcome to the Edit Loan Account Wizard. Please use this wizard to modify "
+"information about your loan account.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Bine aţi venit în Expertul de modificare a unui cont de împrumut. Vă rog să "
+"folosiţi acest expert pentru a modifica informaţiile legate de contul "
+"dumneavoastră de împrumut.\n"
+"\n"
+"Vă rog să vă asiguraţi că aveţi toate informaţiile necesare la îndemână. În "
+"cele mai multe cazuri puteţi obţine toate informaţiile necesare din "
+"contractul de credit şi din ultimul extras de cont."
+
+#: dialogs/rc.cpp:467
+msgid ""
+"\n"
+"In the first step, KMyMoney will ask you some general information about the "
+"loan account to be created."
+msgstr ""
+"\n"
+"În acest prim pas KMyMoney vă va cere câteva informaţii generale despre "
+"contul de împrumut care va fi creat."
+
+#: dialogs/rc.cpp:468 dialogs/rc.cpp:522 dialogs/rc.cpp:610
+msgid "1. General Information"
+msgstr "1. Informaţii generale"
+
+#: dialogs/rc.cpp:469
+msgid ""
+"\n"
+"2. Calculate Loan\n"
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"2. Calculează împrumutul\n"
+"\n"
+"3. Plăţi"
+
+#: dialogs/rc.cpp:470
+msgid "Edit selection"
+msgstr "Modifică selecţia"
+
+#: dialogs/rc.cpp:471
+msgid ""
+"\n"
+"Please select, which data of the loan you want to modify."
+msgstr ""
+"\n"
+"Vă rog să alegeţi parametrii împrumutului pe care doriţi să-i modificaţi."
+
+#: dialogs/rc.cpp:472
+msgid "Modify the interest rate"
+msgstr "Modifică rata dobânzii"
+
+#: dialogs/rc.cpp:473
+msgid "Modify additional fees"
+msgstr "Modifică comisioanele"
+
+#: dialogs/rc.cpp:474
+msgid "Modify other loan information"
+msgstr "Modifică alte informaţii despre debit"
+
+#: dialogs/rc.cpp:475
+msgid "Effective date"
+msgstr "Data efectivă"
+
+#: dialogs/rc.cpp:478
+msgid "When should the changes become active?"
+msgstr "De când ar trebui să între în vigoare schimbările efectuate?"
+
+#: dialogs/rc.cpp:479
+msgid "Lending or borrowing money"
+msgstr "Daţi sau luaţi împrumut"
+
+#: dialogs/rc.cpp:480
+msgid ""
+"\n"
+"Do you borrow or lend money?"
+msgstr ""
+"\n"
+"Daţi bani împrumut sau luaţi bani cu împrumutul?"
+
+#: dialogs/rc.cpp:483
+msgid "Name of the loan"
+msgstr "Numele împrumutului"
+
+#: dialogs/rc.cpp:484
+msgid ""
+"\n"
+"How do you want to call this loan? Examples for names are 'car loan', "
+"'school loan', 'home owner loan'."
+msgstr ""
+"\n"
+"Cum doriţi să denumiţi acest împrumut? Exemple de nume pot fi 'Împrumut "
+"auto', 'Împrumut de studii', 'Împrumut pentru locuinţă'."
+
+#: dialogs/rc.cpp:486
+msgid "TextLabel6"
+msgstr "TextLabel6"
+
+#: dialogs/rc.cpp:487
+msgid "TextLabel7"
+msgstr "TextLabel7"
+
+#: dialogs/rc.cpp:488
+msgid "Type of interest"
+msgstr "Tipul de dobândă"
+
+#: dialogs/rc.cpp:489
+msgid ""
+"\n"
+"Is the interest of this loan fixed over a period of time or is it adapted "
+"from time to time? If the interest rate changes during the amortization "
+"phase of the loan you should choose the option 'variable interest rate'."
+msgstr ""
+"\n"
+"Rata dobânzii este fixă pe durata împrumutului sau este modificată din când "
+"în când? Dacă rata dobânzii se schimbă în faza amortizării împrumutului ar "
+"trebui să alegeţi varianta 'Rată variabilă'"
+
+#: dialogs/rc.cpp:490
+msgid "Fixed interest rate"
+msgstr "Rată fixă"
+
+#: dialogs/rc.cpp:491
+msgid "Variable interest rate"
+msgstr "Rată variabilă"
+
+#: dialogs/rc.cpp:492
+msgid "Payments?"
+msgstr "Plăţi?"
+
+#: dialogs/rc.cpp:493
+msgid ""
+"\n"
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?"
+msgstr ""
+"\n"
+"Există plăţi deja efectuate pentru acest împrumut indiferent dacă ele au "
+"fost introduse sau nu în KMyMoney?"
+
+#: dialogs/rc.cpp:494
+msgid "No, no payments were made yet."
+msgstr "Nu, nu a fost încă efectuate plăţi."
+
+#: dialogs/rc.cpp:495
+msgid "Yes, payments were made."
+msgstr "Da, există plăţi efectuate."
+
+#: dialogs/rc.cpp:496
+msgid ""
+"Note: Payments made to obtain the loan (e.g. Dissagio) are not considered as "
+"payments in this context."
+msgstr ""
+"Notă: Plăţile efectuate pentru obţinerea împrumutului (de exemplu comisionul "
+"de acordare) nu sunt considerate plăţi în acest context."
+
+#: dialogs/rc.cpp:497
+msgid "Recording payments?"
+msgstr "Înregistraţi plăţi?"
+
+#: dialogs/rc.cpp:498
+msgid ""
+"\n"
+"Do you want to record all payments of this loan with KMyMoney?"
+msgstr ""
+"\n"
+"Doriţi să înregistraţi toate plăţile pentru acest împrumut în KMyMoney?"
+
+#: dialogs/rc.cpp:499
+msgid "Yes, record all payments."
+msgstr "Da, înregistrează toate plăţile."
+
+#: dialogs/rc.cpp:500
+msgid "No, only record payments since the beginning of this year."
+msgstr "Nu, înregistrează numai plăţile efectuate începând cu acest an."
+
+#: dialogs/rc.cpp:501
+msgid "Date of next interest change"
+msgstr "Data următoarei recalculări a ratei dobânzii"
+
+#: dialogs/rc.cpp:502
+msgid ""
+"\n"
+"Select the date when the interest rate for this loan will be modified and "
+"the frequency of the future changes."
+msgstr ""
+"\n"
+"Alegeţi data în care rata dobânzii va fi modificată şi frecvenţa "
+"modificărilor viitoare."
+
+#: dialogs/rc.cpp:503
+msgid "Next interest change on"
+msgstr "Următoarea schimbare a ratei dobânzii va avea loc la"
+
+#: dialogs/rc.cpp:504
+msgid "Time until next change"
+msgstr "Durata până la următoarea recalculare"
+
+#: dialogs/rc.cpp:506 dialogs/rc.cpp:571
+msgid ""
+"\n"
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"\n"
+"Vă rog să introduceţi suma plătită pentru împrumut şi dobânda aferentă sau "
+"lăsaţi câmpul gol pentru a fi calculat."
+
+#: dialogs/rc.cpp:507
+msgid "Current amount"
+msgstr "Suma curentă"
+
+#: dialogs/rc.cpp:510
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the amount for principal and interest then enter "
+"it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"KMyMoney calculează fie o nouă rată a dobânzii fie suma împrumutului şi "
+"dobânda. Dacă cunoaşteţi suma împrumutului şi dobânda introduceţi-le aici.\n"
+"\n"
+"Dacă KMyMoney ar trebui să calculeze această valoare pentru dumneavoastră, "
+"lăsaţi acest câmp gol."
+
+#: dialogs/rc.cpp:512 dialogs/rc.cpp:545
+msgid ""
+"\n"
+"Please enter the interest rate or leave the field empty to calculate it."
+msgstr ""
+"\n"
+"Vă rog să daţi rata dobânzii sau lăsaţi câmpul gol pentru a fi calculat "
+"pentru dumneavoastră."
+
+#: dialogs/rc.cpp:514
+msgid "Current rate"
+msgstr "Rata actuală"
+
+#: dialogs/rc.cpp:516
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the interest rate then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"KMyMoney calculează fie o nouă rată a dobânzii fie suma împrumutului şi "
+"dobânda. Dacă cunoaşteţi rata dobânzii introduceţi-o aici.\n"
+"\n"
+"Dacă KMyMoney ar trebui să calculeze această valoare pentru dumneavoastră, "
+"lăsaţi acest câmp gol."
+
+#: dialogs/rc.cpp:517
+msgid "Date of first payment"
+msgstr "Data primei plăţi"
+
+#: dialogs/rc.cpp:520
+msgid "Calculate Loan"
+msgstr "Calculează împrumutul"
+
+#: dialogs/rc.cpp:521
+msgid ""
+"\n"
+"You have successfully entered the general information about your loan. Next, "
+"KMyMoney needs some information about the calculation of the loan."
+msgstr ""
+"\n"
+"Aţi introdus cu succes informaţiile generale despre împrumutul "
+"dumneavoastră. În pasul următor KMyMoney are nevoie de unele informaţii "
+"despre calcularea împrumutului."
+
+#: dialogs/rc.cpp:523 dialogs/rc.cpp:611
+msgid ""
+"\n"
+"2. Calculate Loan"
+msgstr ""
+"\n"
+"2. Calculează împrumutul"
+
+#: dialogs/rc.cpp:524 dialogs/rc.cpp:612
+msgid ""
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"3. Plăţi"
+
+#: dialogs/rc.cpp:526
+msgid ""
+"\n"
+"How often will there be payments made to this loan?"
+msgstr ""
+"\n"
+"Cât de dese vor fi plăţile pentru acest împrumut?"
+
+#: dialogs/rc.cpp:527
+msgid "Interest calculation"
+msgstr "Calculul dobânzii"
+
+#: dialogs/rc.cpp:528
+msgid ""
+"\n"
+"When does the actual interest rate get calculated?"
+msgstr ""
+"\n"
+"Când va fi calculată rata actuală a dobânzii?"
+
+#: dialogs/rc.cpp:529
+msgid "When the payment is received."
+msgstr "Când plata este recepţionată."
+
+#: dialogs/rc.cpp:530
+msgid "When the payment is due."
+msgstr "Când plata este scadentă."
+
+#: dialogs/rc.cpp:534 dialogs/rc.cpp:547 dialogs/rc.cpp:560 dialogs/rc.cpp:573
+#: dialogs/rc.cpp:586 dialogs/rc.cpp:598 dialogs/rc.cpp:679
+msgid "Loan amount:"
+msgstr "Suma împrumutată:"
+
+#: dialogs/rc.cpp:535 dialogs/rc.cpp:548 dialogs/rc.cpp:561 dialogs/rc.cpp:574
+#: dialogs/rc.cpp:587 dialogs/rc.cpp:599 dialogs/rc.cpp:633 dialogs/rc.cpp:671
+msgid "Interest rate:"
+msgstr "Rata dobânzii:"
+
+#: dialogs/rc.cpp:536 dialogs/rc.cpp:549 dialogs/rc.cpp:562 dialogs/rc.cpp:575
+#: dialogs/rc.cpp:588 dialogs/rc.cpp:600 dialogs/rc.cpp:669
+msgid "Term:"
+msgstr "Termenul:"
+
+#: dialogs/rc.cpp:537 dialogs/rc.cpp:550 dialogs/rc.cpp:563 dialogs/rc.cpp:576
+#: dialogs/rc.cpp:589 dialogs/rc.cpp:601 dialogs/rc.cpp:622 dialogs/rc.cpp:630
+#: dialogs/rc.cpp:677
+msgid "Principal + Interest:"
+msgstr "Împrumut + Dobândă:"
+
+#: dialogs/rc.cpp:538 dialogs/rc.cpp:551 dialogs/rc.cpp:564 dialogs/rc.cpp:577
+#: dialogs/rc.cpp:583 dialogs/rc.cpp:585 dialogs/rc.cpp:590 dialogs/rc.cpp:602
+msgid "Final amortization payment"
+msgstr "Plata finală de amortizare"
+
+#: dialogs/rc.cpp:557
+msgid "Duration"
+msgstr "Durata"
+
+#: dialogs/rc.cpp:558
+msgid ""
+"\n"
+"Please enter the term of this loan or leave the field empty to calculate it. "
+"The term is the time that is required to fully repay the loan. This time "
+"might be different from the time your loan contract is signed for."
+msgstr ""
+"\n"
+"Vă rog să daţi termenul acestui împrumut sau lăsaţi acest câmp gol pentru a-"
+"l calcula. Termenul împrumutului este periada necesară pentru plata "
+"integrală a împrumutului. Acestă perioadă poate fi diferită de cea din "
+"contractul dumneavoastră de împrumut."
+
+#: dialogs/rc.cpp:584
+msgid ""
+"\n"
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"\n"
+"Vă rog să introduceţi suma plătii de amortizare finale sau lăsaţi câmpul gol "
+"pentru a-l calcula."
+
+#: dialogs/rc.cpp:596
+msgid "Calculation Overview"
+msgstr "Prezentare de ansamblu a calculului"
+
+#: dialogs/rc.cpp:597
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown in the overview below. You can "
+"accept these values by selecting \"Next\" or change them by choosing \"Back"
+"\" to return to the input field for the information you want to change."
+msgstr ""
+"\n"
+"KMyMoney a calculat împrumutul după cum este afişat în prezentarea de "
+"ansamblu de mai jos. Puteţi să acceptaţi aceste valori alegând \"Următor\" "
+"sau schimbaţi valorile alegând \"Înapoi\" pentru a vă întoarce în ecranul de "
+"introducere a datelor pe care doriţi să le modificaţi."
+
+#: dialogs/rc.cpp:609
+msgid ""
+"\n"
+"In the following steps, KMyMoney supports you in setting up categories and "
+"schedules for your loan payments."
+msgstr ""
+"\n"
+"În paşii următori, KMyMoney vă va asista în crearea catagoriilor şi a "
+"plăţilor programate pentru plăţile împrumutului dumneavoastră."
+
+#: dialogs/rc.cpp:614
+msgid ""
+"\n"
+"Please select the category you want to assign the interest payments to or "
+"create a new category."
+msgstr ""
+"\n"
+"Vă rog să alegeţi categoria pe care doriţi să o asignaţi plăţilor dobânzii "
+"sau creaţi o categorie nouă."
+
+#: dialogs/rc.cpp:615
+msgid "Additional Fees"
+msgstr "Comisioane"
+
+#: dialogs/rc.cpp:616
+msgid ""
+"\n"
+"If your regular payment contains any additional fees, click on the button "
+"\"Additional fees\" to enter them."
+msgstr ""
+"\n"
+"Dacă plăţile dumneavoastră periodice conţin comisioane, faceţi click pe "
+"butonul \"Comisioane\" pentru a le introduce."
+
+#: dialogs/rc.cpp:617
+msgid "= periodical payment:"
+msgstr "= plată periodică:"
+
+#: dialogs/rc.cpp:623
+msgid ""
+"If no additional fees are included in your periodical payment or you have "
+"entered all such fees, then click on \"Next\"."
+msgstr ""
+"Dacă plătile dumneavoastră periodice nu conţin comisioane sau dacă aţi "
+"introdus deja toate aceste comisioane atunci faceţi click pe \"Următor\"."
+
+#: dialogs/rc.cpp:625
+msgid ""
+"KMyMoney will create a schedule for this payment and reminds you whenever a "
+"payment must be made.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"KMyMoney va crea o plată programată pentru această plată şi vă va reaminti "
+"de fiecare dată când o plată va trebui efectuată.<p>\n"
+"Dacă aţi ales să înregistraţi toate plăţile această dată a fost deja dată. "
+"Dacă aţi ales să înregistraţi doar plăţile începând cu acest an, atunci data "
+"<b>Data primei plăţi</b> va fi data primei plăţi efectuate în acest an."
+
+#: dialogs/rc.cpp:626
+msgid "First payment due on:"
+msgstr "Prima plată scadentă în:"
+
+#: dialogs/rc.cpp:627
+msgid "Make payment from/to:"
+msgstr "Efectuează plata din/în:"
+
+#: dialogs/rc.cpp:629
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown below. If you want to accept these "
+"values use the \"Finish\" button to update your account, otherwise use the "
+"\"Back\" button to modify your settings."
+msgstr ""
+"\n"
+"KMyMoney a calculat împrumutul după cum este afişat mai jos. Dacă doriţi să "
+"acceptaţi aceste valori folosiţi butonul \"Termină\" pentru a vă actualiza "
+"contul, altfel folosiţi butonul \"Înapoi\" pentru a vă modifica schimbările."
+
+#: dialogs/rc.cpp:631
+msgid "Additional fees:"
+msgstr "Comisioane:"
+
+#: dialogs/rc.cpp:632
+msgid "Total payment:"
+msgstr "Plata totală:"
+
+#: dialogs/rc.cpp:634
+msgid "Valid from:"
+msgstr "Valid din:"
+
+#: dialogs/rc.cpp:635
+msgid "Affected payments:"
+msgstr "Plăţi afectate:"
+
+#: dialogs/rc.cpp:645
+msgid "Press this to create a new asset account"
+msgstr "Apăsaţi acest buton pentru a crea un nou cont de active"
+
+#: dialogs/rc.cpp:648
+msgid ""
+"\n"
+"This page summarizes the data you entered. If you need to modify anything, "
+"please use the \"Back\" button to go to respective page. Otherwise use the "
+"\"Finish\" button to create the account."
+msgstr ""
+"\n"
+"Această pagină prezintă sumarul datelor introduse de către dumneavoastră. "
+"Dacă doriţi să modificaţi ceva vă rog să folosiţi butonul \"Înapoi\" pentru "
+"a naviga la pagina corespunzătoare. Altfel folosiţi butonul \"Termină\" "
+"pentru a crea contul."
+
+#: dialogs/rc.cpp:650
+msgid "Payee:"
+msgstr "Beneficiar:"
+
+#: dialogs/rc.cpp:653
+msgid "First payment:"
+msgstr "Prima plată:"
+
+#: dialogs/rc.cpp:655
+msgid "Amount is:"
+msgstr "Suma este:"
+
+#: dialogs/rc.cpp:656
+msgid "Loan calculation"
+msgstr "Calculul împrumutului"
+
+#: dialogs/rc.cpp:660
+msgid "Periodic Payment:"
+msgstr "Plată periodică:"
+
+#: dialogs/rc.cpp:661
+msgid "Additional Fees:"
+msgstr "Comisioane:"
+
+#: dialogs/rc.cpp:662
+msgid "Interest category:"
+msgstr "Categoria împrumutului:"
+
+#: dialogs/rc.cpp:663
+msgid "Payment from:"
+msgstr "Plată din:"
+
+#: dialogs/rc.cpp:666
+msgid "Next due date:"
+msgstr "Următoarea dată scadentă:"
+
+#: dialogs/rc.cpp:673
+msgid "Final Payment:"
+msgstr "Plată finală:"
+
+#: dialogs/rc.cpp:675
+msgid "Interest is due:"
+msgstr "Dobânda este scadentă la:"
+
+#: dialogs/rc.cpp:680
+msgid "Payment frequency:"
+msgstr "Frecvenţă de plată:"
+
+#: dialogs/rc.cpp:682
+msgid "Online Quote Configuration"
+msgstr "Configurarea actualizării online a cotaţiilor"
+
+#: dialogs/rc.cpp:687
+msgid "Perl Location:"
+msgstr "Locaţia executabilului Perl"
+
+#: dialogs/rc.cpp:688
+msgid "Script:"
+msgstr "Script-ul:"
+
+#: dialogs/rc.cpp:690
+msgid "Reassign payees"
+msgstr "Reasignează plătitorul/beneficiarul"
+
+#: dialogs/rc.cpp:691
+msgid ""
+"The transactions associated with the selected payees need to be re-assigned "
+"to a different payee before the selected payees can be deleted. Please "
+"select a payee from the list below."
+msgstr ""
+"Tranzacţiile asociate cu plătitorii/beneficiarii selectaţi trebuie să fie "
+"reasociate la alt plătitor/beneficiar înainte ca plătitorii/beneficiarii "
+"selectaţi să poată fi şterşi. Vă rog alegeţi un plătitor/beneficiar din "
+"lista de mai jos."
+
+#: dialogs/rc.cpp:692
+msgid "Available payees:"
+msgstr "Beneficiari/plătitori disponibili:"
+
+#: dialogs/rc.cpp:693
+msgid "Assign deleted names to the above selected payee's matching list"
+msgstr ""
+"Asigneaza numele şterse listei de asociere a plătitorului/beneficiarului "
+"ales mai sus"
+
+#: dialogs/rc.cpp:696
+msgid "PluginDlg"
+msgstr "Funcţii suplimentare"
+
+#: dialogs/rc.cpp:697
+msgid "PlugIn"
+msgstr "Funcţia suplimentară"
+
+#: dialogs/rc.cpp:698 widgets/transaction.cpp:1071
+#: widgets/transaction.cpp:1658
+msgid "Status"
+msgstr "Stare"
+
+#: dialogs/rc.cpp:699
+msgid "Feature"
+msgstr "Funcţionalitate implementată"
+
+#: dialogs/rc.cpp:703
+msgid "Reconciliation Dialog"
+msgstr "Dialogul de reconciliere"
+
+#: dialogs/rc.cpp:704
+msgid ""
+"This dialog will assist in helping you to balance your account.\n"
+"\n"
+"Click on an appropriate transaction within one of the two list views to mark "
+"it as reconciled. To create a transaction or edit\n"
+"a transaction you can return to the register by clicking on the Edit "
+"Transactions button.\n"
+"\n"
+"Your account is balanced when the Difference is Zero. Click on the Finish "
+"button to save the reconciled transactions."
+msgstr ""
+"Acest dialog vă va asista în procesul de echilibrare a contului "
+"dumneavoastră.\n"
+"\n"
+"Faceţi clic pe o tranzacţie din una din cele două moduri de vizualizare "
+"listă pentru a o marca ca reconciliată. Pentru a crea sau a modifica\n"
+" o tranzacţie puteţi să vă întoarceţi la registru facând clic pe butonul "
+"Modifică tranzacţii.\n"
+"\n"
+"Contul dumneavoastră este echilibrat când diferenţa este egală cu zero. "
+"Faceţi clic pe butonul Termină pentru a salva tranzacţiile reconciliate."
+
+#: dialogs/rc.cpp:705
+msgid "Withdrawals"
+msgstr "Retrageri"
+
+#: dialogs/rc.cpp:707 dialogs/rc.cpp:708 dialogs/rc.cpp:822
+msgid "$"
+msgstr "$"
+
+#: dialogs/rc.cpp:710
+msgid "Previous Balance:"
+msgstr "Soldul anterior:"
+
+#: dialogs/rc.cpp:711 dialogs/rc.cpp:713 dialogs/rc.cpp:715 dialogs/rc.cpp:717
+#: dialogs/rc.cpp:820
+msgid "0"
+msgstr "0"
+
+#: dialogs/rc.cpp:712
+msgid "Ending Balance:"
+msgstr "Soldul final:"
+
+#: dialogs/rc.cpp:714
+msgid "Cleared Balance:"
+msgstr "Soldul tranzacţiilor verificate:"
+
+#: dialogs/rc.cpp:716
+msgid "Difference:"
+msgstr "Diferenţă:"
+
+#: dialogs/rc.cpp:718
+msgid "Edit Transactions..."
+msgstr "Modifică tranzacţiile..."
+
+#: dialogs/rc.cpp:721
+msgid "Security List Editor"
+msgstr "Editor pentru lista titlurilor de valoare"
+
+#: dialogs/rc.cpp:726
+msgid "Market"
+msgstr "Piaţa"
+
+#: dialogs/rc.cpp:729
+msgid "Cash Fraction"
+msgstr "Precizia"
+
+#: dialogs/rc.cpp:730
+msgid "Add..."
+msgstr "Adaugă..."
+
+#: dialogs/rc.cpp:732 widgets/kmymoneypriceview.cpp:157
+msgid "Delete..."
+msgstr "Şterge..."
+
+#: dialogs/rc.cpp:733
+msgid "Show national currencies"
+msgstr "Afişează monedele naţionale"
+
+#: dialogs/rc.cpp:735
+msgid "KMyMoney - Select Database"
+msgstr "KMyMoney - Alegeţi o bază de date"
+
+#: dialogs/rc.cpp:736
+msgid "CAUTION!"
+msgstr "ATENŢIE!"
+
+#: dialogs/rc.cpp:737
+msgid ""
+"<font color=\"#ff2727\">This software is still in an experimental stage, and "
+"there are still some known response time problems. Please be patient; we are "
+"working on them.\n"
+"As always, please make sure you have adequate backups of your data.</font>"
+msgstr ""
+"<font color=\"#ff2727\">Această aplicație este încă în stare experimentală "
+"şi există anumite probleme de timp de răspuns cunoscute. Vă rugăm să aveți "
+"răbdare, lucrăm la rezolvarea lor.\n"
+" Ca de obicei, vă rugăm să vă asiguraţi că aveţi o copie de siguranţă a "
+"datelor dumneavoastră.</font>"
+
+#: dialogs/rc.cpp:738
+msgid "Database Type"
+msgstr "Tipul bazei de date"
+
+#: dialogs/rc.cpp:739
+msgid "Database Name"
+msgstr "Numele bazei de date"
+
+#: dialogs/rc.cpp:740
+msgid "Host Name"
+msgstr "Nume gazdă"
+
+#: dialogs/rc.cpp:741
+msgid "User Name"
+msgstr "Numele utilizatorului"
+
+#: dialogs/rc.cpp:743
+msgid "Preload &all data"
+msgstr "Preîncarcă &toate datele"
+
+#: dialogs/rc.cpp:745
+msgid "&Generate SQL"
+msgstr "&Generează instrucţiuni SQL"
+
+#: dialogs/rc.cpp:747
+msgid "Ca&ncel"
+msgstr "&Renunţă"
+
+#: dialogs/rc.cpp:762 widgets/rc.cpp:172
+msgid "Sort options"
+msgstr "Opţiuni de sortare"
+
+#: dialogs/rc.cpp:763
+msgid "Use default"
+msgstr "Foloseşte valoare implicită"
+
+#: dialogs/rc.cpp:767
+msgid "Correct splits"
+msgstr "Corecteză părţi de tranzacţie"
+
+#: dialogs/rc.cpp:769
+msgid "How do you want to proceed?"
+msgstr "În ce mod doriţi să continuaţi?"
+
+#: dialogs/rc.cpp:770
+msgid "Continue to edit splits"
+msgstr "Continuă să modifici părţlei de tranzacţie"
+
+#: dialogs/rc.cpp:771
+#, c-format
+msgid "Change total amount of transaction to %1."
+msgstr "Schimbă suma totală a tranzacţiei în %1."
+
+#: dialogs/rc.cpp:772
+msgid "Distribute difference of %1 among all splits."
+msgstr "Distribuie diferenţa de %1 între celelalte părţi de tranzacţie."
+
+#: dialogs/rc.cpp:773
+msgid "Leave %1 unassigned."
+msgstr "Păstrează suma %1 neasignată."
+
+#: dialogs/rc.cpp:776
+msgid "Split transaction"
+msgstr "Împarte tranzacţia"
+
+#: dialogs/rc.cpp:777
+msgid "<b>11,00<b>"
+msgstr "<b>11,00<b>"
+
+#: dialogs/rc.cpp:778
+msgid "<b>111,00<b>"
+msgstr "<b>111,00<b>"
+
+#: dialogs/rc.cpp:779
+msgid "Unassigned"
+msgstr "Neasignat"
+
+#: dialogs/rc.cpp:780
+msgid "Sum of splits"
+msgstr "Suma părţilor de tranzacţie"
+
+#: dialogs/rc.cpp:781
+msgid "100,00"
+msgstr "100,00"
+
+#: dialogs/rc.cpp:782
+msgid "Transaction amount"
+msgstr "Suma tranzacţiei"
+
+#: dialogs/rc.cpp:783
+msgid "Merge"
+msgstr "Combină"
+
+#: dialogs/rc.cpp:784
+msgid "Merges splits with the same category to one split"
+msgstr ""
+"Combină părţile de tranzacţie din aceeaşi categorie într-o singură parte de "
+"tranzacţie"
+
+#: dialogs/rc.cpp:785
+msgid ""
+"In case you have multiple split entries to the same category and you like to "
+"keep them as a single split, press this button. The amount for identical "
+"categories will be added and stored in a single split for that category."
+msgstr ""
+"În cazul în care aveţi mai multe părţi de tranzacţie din aceeaşi categorie "
+"şi aţi dori să le păstraţi ca o singură parte, folosiţi acest buton. Sumele "
+"pentru categoriile identice vor fi însumate şi stocate într-o singură parte "
+"de tranzacţie pentru acea categorie."
+
+#: dialogs/rc.cpp:786
+msgid "Clear &Zero"
+msgstr "Curăţă valorile nule"
+
+#: dialogs/rc.cpp:787
+msgid "Removes all splits that have a value of zero."
+msgstr "Şterge toate părţile de tranzacţie care au valoarea zero."
+
+#: dialogs/rc.cpp:791
+msgid "New price entry"
+msgstr "Înregistrare de preţ nouă"
+
+#: dialogs/rc.cpp:799
+msgid "Void mark"
+msgstr "Semn null"
+
+#: dialogs/rc.cpp:800
+msgid "Opening Balance text"
+msgstr "Text pentru soldul de deschidere"
+
+#: dialogs/rc.cpp:801
+msgid "Type field text"
+msgstr "Text pentru tipuri câmp"
+
+#: dialogs/rc.cpp:802
+msgid "Account delimiter"
+msgstr "Delimitator de cont"
+
+#: dialogs/rc.cpp:804
+msgid "Attempt to match similar transactions"
+msgstr "Încercare de a asocia tranzacţii similare"
+
+#: dialogs/rc.cpp:806 dialogs/rc.cpp:808
+msgid "The format of the dates in the QIF file."
+msgstr "Formatul datelor în fişierul QIF."
+
+#: dialogs/rc.cpp:809 dialogs/rc.cpp:811
+msgid ""
+"If a QIF file contains date entries with years represented with two digits "
+"then either an apostrophe or a slash may be used to delimit the year in the "
+"dates for certain centuries. This enables 1905 to be distinguished from "
+"2005. Specify here which range of years will have year delimited by an "
+"apostrophe (eg. for Quicken this is usually 1900-1949)."
+msgstr ""
+"Dacă un fişier QIF conţine intrări de date cu anii reprezentaţi cu două "
+"cifre atunci se poate folosi sau un apostrof sau caracterul '/' pentru a "
+"delimita anul în reprezentarea datelor pentru anumite secole. Astfel 1905 se "
+"poate diferenţia faţă de 2005. Specificaţi ce interval de ani au anul "
+"delimitat de către un apostrof (de exemplu în Quicken acesta este de obicei "
+"1900-1949)."
+
+#: dialogs/rc.cpp:810
+msgid "Apostrophe Handling"
+msgstr "Tratarea apostrofului"
+
+#: dialogs/rc.cpp:812
+msgid "Amounts"
+msgstr "Sume"
+
+#: dialogs/rc.cpp:813
+msgid "Field"
+msgstr "Câmp"
+
+#: dialogs/rc.cpp:814
+msgid "QIF-Record"
+msgstr "Intrare QIF"
+
+#: dialogs/rc.cpp:815 dialogs/rc.cpp:833
+msgid "Decimal Symbol"
+msgstr "Simbol decimal"
+
+#: dialogs/rc.cpp:816
+msgid "Thousand Delimiter"
+msgstr "Delimitatorul miilor"
+
+#: dialogs/rc.cpp:817
+msgid "SortColumnInvisible"
+msgstr "SortColumnInvisible"
+
+#: dialogs/rc.cpp:819
+msgid "T"
+msgstr "T"
+
+#: dialogs/rc.cpp:821
+msgid "Split-Value"
+msgstr "Valoarea părţii de tranzacţie"
+
+#: dialogs/rc.cpp:824
+msgid "Commission"
+msgstr "Comision"
+
+#: dialogs/rc.cpp:825
+msgid "O"
+msgstr "O"
+
+#: dialogs/rc.cpp:826
+msgid "2"
+msgstr "2"
+
+#: dialogs/rc.cpp:828
+msgid "I"
+msgstr "I"
+
+#: dialogs/rc.cpp:829
+msgid "3"
+msgstr "3"
+
+#: dialogs/rc.cpp:831
+msgid "Q"
+msgstr "Q"
+
+#: dialogs/rc.cpp:832
+msgid "4"
+msgstr "4"
+
+#: dialogs/rc.cpp:834
+msgid "Thousands Separator"
+msgstr "Separatorul miilor"
+
+#: dialogs/rc.cpp:836
+msgid "Output filter location"
+msgstr "Locaţia filtrului de ieşire"
+
+#: dialogs/rc.cpp:837
+msgid "Input filter file type"
+msgstr "Tipul filtrului de intrare"
+
+#: dialogs/rc.cpp:838
+msgid "*.qif"
+msgstr "*.qif"
+
+#: dialogs/rc.cpp:839
+msgid "Input filter location"
+msgstr "Locaţia filtrului de intrare"
+
+#: dialogs/rc.cpp:843
+msgid "Rename"
+msgstr "Redenumeşte"
+
+#: dialogs/kselecttransactionsdlg.cpp:44
+msgid "Select Transaction"
+msgstr "Alege o tranzacţie"
+
+#: dialogs/kselecttransactionsdlg.cpp:45
+msgid ""
+"Select a transaction and press the OK button or use Cancel to select none."
+msgstr ""
+"Alegeţi o tranzacţie şi apăsaţi butonul OK sau folosiţi butonul Renunţă "
+"pentru a nu alege nicio tranzacţie."
+
+#: dialogs/knewinvestmentwizard.cpp:62
+msgid "Investment detail wizard"
+msgstr "Expertul de definire a detaliilor investiţiilor"
+
+#: dialogs/knewinvestmentwizard.cpp:82
+msgid "Security detail wizard"
+msgstr "Expertul de definire a titlurilor de valoare"
+
+#: dialogs/knewaccountdlg.cpp:121 dialogs/knewinvestmentwizard.cpp:109
+msgid ""
+"_: default price mode\n"
+"<default>"
+msgstr "<implicit>"
+
+#: dialogs/knewaccountdlg.cpp:122 dialogs/knewinvestmentwizard.cpp:110
+msgid "Price per share"
+msgstr "Preţ pe actiune"
+
+#: dialogs/knewaccountdlg.cpp:123 dialogs/knewinvestmentwizard.cpp:111
+msgid "Total for all shares"
+msgstr "Totalul tuturor acţiunilor"
+
+#: dialogs/knewinvestmentwizard.cpp:129
+msgid "This wizard allows you to modify the selected investment."
+msgstr "Acest expert vă permite modificare investiţiei alese."
+
+#: dialogs/knewinvestmentwizard.cpp:132
+msgid "This wizard allows you to modify the selected security."
+msgstr "Acest expert vă permite modificarea titlului de valoare ales."
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid ""
+"The selected symbol is already on file. Do you want to reuse the existing "
+"security?"
+msgstr ""
+"Simbolul dat este deja utilizat. Doriţi să reutilizaţi titlul de valoare "
+"existent?"
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid "Security found"
+msgstr "S-a găsit titlul de valoare"
+
+#: dialogs/knewinvestmentwizard.cpp:309
+msgid "Unable to create all objects for the investment"
+msgstr "Nu s-au putut crea toate obiectele aparţinând investiţiei"
+
+#: dialogs/keditequityentrydlg.cpp:78
+msgid "Change the price information of the selected entry."
+msgstr "Scimbă informaţia de preţ a intrării selectate."
+
+#: dialogs/kaccountselectdlg.cpp:64 widgets/kmymoneybriefschedule.cpp:59
+msgid "&Skip"
+msgstr "&Omite"
+
+#: dialogs/kaccountselectdlg.cpp:66 widgets/kmymoneybriefschedule.cpp:61
+msgid "Skip this transaction"
+msgstr "Omite această tranzacţie"
+
+#: dialogs/kaccountselectdlg.cpp:67
+msgid ""
+"Use this to skip importing this transaction and proceed with the next one."
+msgstr ""
+"Folosiţi funcţia aceasta pentru a omite importarea acestei tranzacţii şi să "
+"continuaţi cu tranzacţia următoare."
+
+#: dialogs/kaccountselectdlg.cpp:72
+msgid "Create a new account/category"
+msgstr "Creează o categorie nouă / cont nou"
+
+#: dialogs/kaccountselectdlg.cpp:73
+msgid "Use this to add a new account/category to the file"
+msgstr ""
+"Folosiţi această funcţie pentru a adăuga un cont/o categorie nouă la fişier"
+
+#: dialogs/kaccountselectdlg.cpp:77
+msgid "&Abort"
+msgstr "&Renunţă"
+
+#: dialogs/kaccountselectdlg.cpp:79
+msgid "Abort the import operation and dismiss all changes"
+msgstr "Anulează operaţia de import şi renunţă la toate modificările făcute"
+
+#: dialogs/kaccountselectdlg.cpp:80
+msgid ""
+"Use this to abort the import. Your financial data will be in the state "
+"before you started the QIF import."
+msgstr ""
+"Folosiţi această funcţie pentru a anula importul. Datele dumneavoastră "
+"financiare vor fi în starea de dinaintea începerii importului QIF."
+
+#: dialogs/knewaccountdlg.cpp:110
+msgid "Is a sub account"
+msgstr "Este un subcont"
+
+#: dialogs/knewaccountdlg.cpp:184
+msgid "VAT account"
+msgstr "Cont TVA"
+
+#: dialogs/knewaccountdlg.cpp:474
+msgid ""
+"You have not specified a name.\n"
+"Please fill in this field."
+msgstr ""
+"Nu aţi specificat un nume.\n"
+"Vă rog să completaţi acest câmp."
+
+#: dialogs/knewaccountdlg.cpp:482
+msgid "Please select a parent account."
+msgstr "Vă rog să alegeţi un cont părinte."
+
+#: dialogs/knewaccountdlg.cpp:489 dialogs/knewaccountdlg.cpp:1029
+msgid "<No Institution>"
+msgstr "<Fără instituţie>"
+
+#: dialogs/knewaccountdlg.cpp:552
+msgid ""
+"An account named <b>%1</b> already exists. You cannot create a second "
+"account with the same name."
+msgstr ""
+"Un cont numit <b>%1</b> există deja. Nu puteţi crea un al doilea cont cu "
+"acelaşi nume."
+
+#: dialogs/knewaccountdlg.cpp:567
+msgid ""
+"A category named <b>%1</b> already exists. You cannot create a second "
+"category with the same name."
+msgstr ""
+"O categorie numită <b>%1</b> există deja. Nu puteţi crea o a doua categorie "
+"cu acelaşi nume."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid ""
+"You have selected to suppress the display of unused categories in the "
+"KMyMoney configuration dialog. The category you just created will therefore "
+"only be shown if it is used. Otherwise, it will be hidden in the accounts/"
+"categories view."
+msgstr ""
+"Aţi ales să ascundeţi categoriile nefolosite în dialogul de configurare "
+"KMyMoney. Categoria pe care tocmai aţi creat-o va fi astfel afişată doar "
+"după ce va fi folosită. Altfel ea va fi ascunsă în modul de vizualizare a "
+"conturilor/categoriilor."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid "Hidden categories"
+msgstr "Categorii ascunse"
+
+#: dialogs/knewaccountdlg.cpp:927 dialogs/knewaccountdlg.cpp:979
+#, c-format
+msgid "Is a sub account of %1"
+msgstr "Este un subcont al contului %1"
+
+#: dialogs/knewaccountdlg.cpp:1082
+msgid "Cannot add institution"
+msgstr "Nu s-a putut adăuga instituţia"
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid ""
+"This dialog does not allow to create new payees. Please pick a payee from "
+"the list."
+msgstr ""
+"Acest dialog nu permite crearea unui plătitor/beneficiar nou. Vă rog să "
+"alegeţi un beneficiar/plătitor din listă."
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid "Payee creation"
+msgstr "Creare beneficiar/plătitor"
+
+#: dialogs/kimportdlg.cpp:69
+msgid "Use this to start the import operation"
+msgstr "Foloseşte această funcţie pentru a declanşa operaţia de import"
+
+#: dialogs/kimportdlg.cpp:110
+msgid ""
+"%1|Import files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|fişiere import\n"
+"%2|Toate fişierele (*.*)"
+
+#: dialogs/kimportdlg.cpp:111
+msgid "Import File..."
+msgstr "Importă fişier..."
+
+#: dialogs/knewloanwizard.cpp:124
+msgid "Create a new category"
+msgstr "Creează o categorie nouă"
+
+#: dialogs/knewloanwizard.cpp:125
+msgid "Use this to open the new account editor"
+msgstr ""
+"Foloseşte această funcţie pentru a deschide editorul pentru un cont nou"
+
+#: dialogs/knewloanwizard.cpp:129
+msgid "&Additional fees..."
+msgstr "Taxe &adiţionale..."
+
+#: dialogs/knewloanwizard.cpp:131
+msgid "Enter additional fees"
+msgstr "Introdu taxe adiţionale"
+
+#: dialogs/knewloanwizard.cpp:132
+msgid ""
+"Use this to add any additional fees other than principal and interest "
+"contained in your periodical payments."
+msgstr ""
+"Foloseşte această funcţie pentru a adăuga comisioane, alte sume decât "
+"împrumutul şi dobânda conţinute în plăţile dumneavoastră periodice."
+
+#: dialogs/knewloanwizard.cpp:139
+msgid ""
+"Use this to create a new account to which the initial payment should be made"
+msgstr ""
+"Folosiţi această funcţie pentru a crea un cont nou în care se va efectua "
+"plata iniţială"
+
+#: dialogs/knewloanwizard.cpp:208
+msgid "To whom do you make payments?"
+msgstr "Cine este beneficiarul acestor plăţi?"
+
+#: dialogs/knewloanwizard.cpp:209
+msgid "Payments to"
+msgstr "Plăţi în"
+
+#: dialogs/knewloanwizard.cpp:214
+msgid "From whom do you expect payments?"
+msgstr "Cine este plătitorul acestor plăţi?"
+
+#: dialogs/knewloanwizard.cpp:215
+msgid "Payments from"
+msgstr "Plăţi de la"
+
+#: dialogs/knewloanwizard.cpp:233
+msgid "Please enter the date, the first payment for this loan was/is due."
+msgstr ""
+"Vă rog să introduceţi data în care prima plată pentru acest împrumut a fost/"
+"este scadentă."
+
+#: dialogs/knewloanwizard.cpp:235
+msgid ""
+"Note: Consult the loan contract for details of the first due date. Keep in "
+"mind, that the first due date usually differs from the date the contract was "
+"signed"
+msgstr ""
+"Notă: Consultaţi contractul de împrumut pentru detalii a datei primei "
+"scadenţe. Aveţi în vedere faptul că prima scadenţă diferă de obicei de data "
+"la care a fost semnat contractul"
+
+#: dialogs/knewloanwizard.cpp:240
+msgid ""
+"Please enter the original loan amount in the field below or leave it empty "
+"to be calculated."
+msgstr ""
+"Vă rog să introduceţi valoare iniţială a împrumutului în câmpul de mai jos "
+"sau lăsaţi câmpul gol pentru a fi calculat."
+
+#: dialogs/knewloanwizard.cpp:248
+msgid ""
+"Please enter the date, the first payment for this loan was/is due this year."
+msgstr ""
+"Vă rog să introduceţi data în care prima plată pentru acest împrumut a fost/"
+"este scadentă în din acest an."
+
+#: dialogs/knewloanwizard.cpp:250
+msgid ""
+"Note: You can easily figure out the date of the first payment if you consult "
+"the last statement of last year."
+msgstr ""
+"Notă: Puteti afla cu uşurinţă data primei plăţi dacă consultaţi ultimul "
+"extras al anului trecut."
+
+#: dialogs/knewloanwizard.cpp:254
+msgid ""
+"Please enter the remaining loan amount of last years final statement in the "
+"field below. You should not leave this field empty."
+msgstr ""
+"Vă rog să introduceţi suma rămasă din împrumut de pe ultimul eztras al "
+"anului trecut în câmpul de mai jos. Nu ar trebui să lăsaţi acest câmp gol.s"
+
+#: dialogs/knewloanwizard.cpp:311 dialogs/knewloanwizard.cpp:326
+#: dialogs/knewloanwizard.cpp:341 dialogs/knewloanwizard.cpp:357
+#: dialogs/knewloanwizard.cpp:373
+msgid "calculate"
+msgstr "calculează"
+
+#: dialogs/knewloanwizard.cpp:417
+msgid "borrowed"
+msgstr "luat cu împrumutul"
+
+#: dialogs/knewloanwizard.cpp:419
+msgid "lend"
+msgstr "dat cu împrumutul"
+
+#: dialogs/knewloanwizard.cpp:423
+msgid "not assigned"
+msgstr "neasignat"
+
+#: dialogs/knewloanwizard.cpp:430
+msgid "on reception"
+msgstr "la recepţie"
+
+#: dialogs/knewloanwizard.cpp:432
+msgid "on due date"
+msgstr "la data scadentă"
+
+#: dialogs/knewloanwizard.cpp:471
+msgid ""
+"The loan wizard is unable to calculate two different values for your loan at "
+"the same time. Please enter a value for the %1 on this page or backup to the "
+"page where the current value to be calculated is defined and fill in a "
+"value."
+msgstr ""
+"Expertul de creere a împrumutului nu poate calcula două valori diferite ale "
+"împrumutului dumneavoastră în acelaşi timp. Vă rog să introduceţi o valoare "
+"pentru %1 în această pagină sau reveniţi la pagina în care valoarea curentă "
+"care trebuie calculată este definită şi introduceţi o valoare."
+
+#: dialogs/knewloanwizard.cpp:500
+msgid ""
+"You selected, that payments have already been made towards this loan. This "
+"requires you to enter the loan amount exactly as found on your last "
+"statement."
+msgstr ""
+"Aţi ales că există plăţi efectuate pentru acest împrumut. Această alegere "
+"necesită ca dumneavoastră să introduceţi suma împrumutului aşa cum apare ea "
+"pe ultimul extras de cont al dumneavoastră."
+
+#: dialogs/knewloanwizard.cpp:513
+msgid "interest rate"
+msgstr "rata dobânzii"
+
+#: dialogs/knewloanwizard.cpp:522
+msgid "term"
+msgstr "termen"
+
+#: dialogs/knewloanwizard.cpp:532
+msgid "principal and interest"
+msgstr "împrumutul şi dobânda"
+
+#: dialogs/knewloanwizard.cpp:743
+#, c-format
+msgid ""
+"The number of payments has been decremented and the final payment has been "
+"modified to %1."
+msgstr ""
+"Numărul de plăţi a fost decrementat iar plata finală a fost modificată la %1."
+
+#: dialogs/knewloanwizard.cpp:751 dialogs/knewloanwizard.cpp:771
+#, c-format
+msgid "The final payment has been modified to %1."
+msgstr "Plata finală a fost modificată la %1."
+
+#: dialogs/knewloanwizard.cpp:802
+msgid "KMyMoney has calculated a final payment of %1 for this loan."
+msgstr "KMyMoney a calculat o plată finală de %1 pentru acest împrumut."
+
+#: dialogs/knewloanwizard.cpp:817
+msgid ""
+"You have entered mis-matching information. Please backup to the appropriate "
+"page and update your figures or leave one value empty to let KMyMoney "
+"calculate it for you"
+msgstr ""
+"Aţi introdus informaţii care nu se potrivesc. Vă rog să reveniţi la pagina "
+"corespunzătoare pentru a actualiza valorile sau lăsaţi un câmp gol pentru a "
+"permite KMyMoney calcularea ei pentru dumneavoastră."
+
+#: dialogs/kfindtransactiondlg.cpp:230
+msgid ""
+"Warning: Filtering by Category will exclude all transfers from the results."
+msgstr ""
+"Atenţie: Filtrarea după categorie va exclude toate transferurile din "
+"rezultatul căutării."
+
+#: dialogs/kfindtransactiondlg.cpp:239
+msgid "(None)"
+msgstr "(Nici una)"
+
+#: dialogs/kfindtransactiondlg.cpp:241
+msgid "Current selections: "
+msgstr "Selecţii curente: "
+
+#: dialogs/kfindtransactiondlg.cpp:716
+msgid "Found %1 matching transactions (D %2 / P %3 = %4)"
+msgstr "S-au găsit %1 tranzacţii potrivite (D %2 / P %3 = %4)"
+
+#: dialogs/kfindtransactiondlg.cpp:719
+msgid "Found %1 matching transactions"
+msgstr "S-au găsit %1 tranzacţii potrivite"
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "The institution name field is empty. Please enter the name."
+msgstr "Numele instituţiei nu a fost dat. Vă rog să daţi numele instituţiei."
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "Adding New Institution"
+msgstr "Se adddaugă instituţia nouă"
+
+#: dialogs/kcsvprogressdlg.cpp:69
+msgid "C&lose"
+msgstr "În&chide"
+
+#: dialogs/kcsvprogressdlg.cpp:247
+msgid " of "
+msgstr " din "
+
+#: widgets/kmymoneypriceview.cpp:126
+msgid "Commodity"
+msgstr "Marfă"
+
+#: widgets/kmymoneypriceview.cpp:130
+msgid "Source"
+msgstr "Sursa"
+
+#: widgets/kmymoneypriceview.cpp:143
+msgid "Price Options"
+msgstr "Opţiuni de preţ"
+
+#: widgets/kmymoneypriceview.cpp:153
+msgid "Online Price Update..."
+msgstr "Actualizarea preţului online..."
+
+#: widgets/kmymoneycombo.cpp:472 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+msgid "From"
+msgstr "Din"
+
+#: widgets/transaction.cpp:668
+msgid "Transaction is missing a category assignment."
+msgstr "Tranzacţiei îi lipseşte o asignare de categorie."
+
+#: widgets/transaction.cpp:671
+msgid "The transaction has a missing assignment of <b>%1</b>."
+msgstr "Tranzacţia are lipsă o asignare de <b>%1</b>."
+
+#: widgets/transaction.cpp:874
+msgid "Sell"
+msgstr "Vinde"
+
+#: widgets/transaction.cpp:876
+msgid "Buy"
+msgstr "Cumpără"
+
+#: widgets/kmymoneycombo.cpp:520 widgets/transaction.cpp:879
+#: widgets/transaction.cpp:1447
+msgid "Dividend"
+msgstr "Dividend"
+
+#: widgets/kmymoneycombo.cpp:518 widgets/transaction.cpp:881
+#: widgets/transaction.cpp:1453
+msgid "Yield"
+msgstr "Rentabilitate"
+
+#: widgets/transaction.cpp:886 widgets/transaction.cpp:1473
+msgid "Activity"
+msgstr "Activitate"
+
+#: widgets/transaction.cpp:887
+msgid "Investment transaction"
+msgstr "Tranzacţie de investiţie"
+
+#: widgets/transaction.cpp:1021 widgets/transaction.cpp:1114
+#: widgets/transaction.cpp:1165
+msgid "*** UNASSIGNED ***"
+msgstr "*** NEASIGNAT ***"
+
+#: widgets/kmymoneycombo.cpp:517 widgets/transaction.cpp:1435
+msgid "Add shares"
+msgstr "Adaugă acţiuni"
+
+#: widgets/kmymoneycombo.cpp:516 widgets/transaction.cpp:1438
+msgid "Remove shares"
+msgstr "Retrage acţiuni"
+
+#: widgets/kmymoneycombo.cpp:522 widgets/transaction.cpp:1441
+msgid "Buy shares"
+msgstr "Cumpără acţiuni"
+
+#: widgets/kmymoneycombo.cpp:521 widgets/transaction.cpp:1444
+msgid "Sell shares"
+msgstr "Vinde acţiuni"
+
+#: widgets/transaction.cpp:1450
+msgid "Reinvest Dividend"
+msgstr "Reinvesteşte dividendul"
+
+#: widgets/kmymoneycombo.cpp:515 widgets/transaction.cpp:1456
+msgid "Split shares"
+msgstr "Împarte acţiunile"
+
+#: widgets/transaction.cpp:1515
+msgid "Ratio"
+msgstr "Rata"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:241
+msgid "%1 Bills."
+msgstr "%1 facturi."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:257
+msgid "%1 Deposits."
+msgstr "%1 depozite."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:273
+msgid "%1 Transfers."
+msgstr "%1 transferuri."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:355
+msgid ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+msgstr "------------------------------"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:57
+#: widgets/kmymoneyaccounttreeforecast.cpp:84
+msgid "Current"
+msgstr "Curent"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:72
+#: widgets/kmymoneyaccounttreeforecast.cpp:93
+msgid "Total variation"
+msgstr "Variaţia totală"
+
+#: widgets/stdtransactionmatched.cpp:130
+msgid ""
+"KMyMoney has matched a downloaded transaction with a manually entered one "
+"(result above)"
+msgstr ""
+"KMyMoney a asociat o tranzacţie descărcată cu una introdusă manual "
+"(rezultatul este mai sus)"
+
+#: widgets/stdtransactionmatched.cpp:138
+msgid "Bank entry:"
+msgstr "Intrarea băncii:"
+
+#: widgets/stdtransactionmatched.cpp:166
+msgid "Your entry:"
+msgstr "Intrarea dumneavoastră:"
+
+#: widgets/kbudgetvalues.cpp:187
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a monthly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+"Aţi introdus valori ale bugetului folosind o bază diferită ceea ce ar duce "
+"la un buget lunar de <b>%1</b>. Să se folosească aceste valori pentru a "
+"calcula bugetul lunar?"
+
+#: widgets/kbudgetvalues.cpp:187 widgets/kbudgetvalues.cpp:206
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"_: Auto assignment (caption)\n"
+"Auto assignment"
+msgstr "Asignare automată"
+
+#: widgets/kbudgetvalues.cpp:206
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a yearly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+"Aţi introdus valori ale bugetului folosind o bază diferită ceea ce ar duce "
+"la un buget anual de <b>%1</b>. Să se folosească aceste valori pentru a "
+"calcula bugetul lunar?"
+
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"You have entered budget values using a different base which would result in "
+"an individual monthly budget of <b>%1</b>. Should this value be used to fill "
+"the monthly budgets?"
+msgstr ""
+"Aţi introdus valori ale bugetului folosind o bază diferită ceea ce ar duce "
+"la un buget individual lunar de <b>%1</b>. Să se folosească aceste valori "
+"pentru a calcula bugetele lunare?"
+
+#: widgets/kmymoneybriefschedule.cpp:62
+msgid "Use this button to skip this transaction"
+msgstr "Foloseşte acest buton pentru a omite această tranzacţie"
+
+#: widgets/kmymoneybriefschedule.cpp:67
+msgid "Record this transaction into the register"
+msgstr "Înregistrează această tranzacţie în registru"
+
+#: widgets/kmymoneybriefschedule.cpp:68
+msgid "Use this button to record this transaction"
+msgstr ""
+"Foloseşte acest buton pentru a înregistra această tranzacţie în registru"
+
+#: widgets/kmymoneybriefschedule.cpp:96
+msgid "%1 of %2"
+msgstr "%1 din %2"
+
+#: widgets/kmymoneybriefschedule.cpp:109
+msgid "Payment on %1 for %2 with %3 transactions remaining occuring %4."
+msgstr "Plată în %1 pentru %2 cu %3 tranzacţii rămase ce au loc în %4."
+
+#: widgets/kmymoneybriefschedule.cpp:115
+msgid "Payment on %1 for %2 occuring %4."
+msgstr "Plată în %1 pentru %2 ce are loc în %4."
+
+#: widgets/kmymoneybriefschedule.cpp:136
+msgid "%1 days overdue (%2 occurences)."
+msgstr "%1 zile întărziere (%2 scadenţe)."
+
+#: widgets/register.cpp:55
+msgid "Post date"
+msgstr "Data efectuării"
+
+#: widgets/register.cpp:56
+msgid "Date entered"
+msgstr "Data introdusă"
+
+#: widgets/register.cpp:60
+msgid "Entry order"
+msgstr "Ordinea intrării"
+
+#: widgets/register.cpp:63
+msgid "Reconcile state"
+msgstr "Starea reconcilierii"
+
+#: widgets/register.cpp:440
+msgid ""
+"_: Deposits onto account\n"
+"Deposits"
+msgstr "Depozite"
+
+#: widgets/register.cpp:442
+msgid ""
+"_: Payments towards credit card\n"
+"Payments"
+msgstr "Plăţi"
+
+#: widgets/register.cpp:446
+msgid ""
+"_: Payments made from account\n"
+"Payments"
+msgstr "Plăţi"
+
+#: widgets/register.cpp:448
+msgid ""
+"_: Payments made with credit card\n"
+"Charges"
+msgstr "Plăţi"
+
+#: widgets/register.cpp:736
+msgid ""
+"_: Payment made from account\n"
+"Payment"
+msgstr "Plată"
+
+#: widgets/register.cpp:737
+msgid ""
+"_: Deposit into account\n"
+"Deposit"
+msgstr "Depozit"
+
+#: widgets/register.cpp:813
+msgid ""
+"_: Payment made with credit card\n"
+"Charge"
+msgstr "Plată"
+
+#: widgets/register.cpp:814
+msgid ""
+"_: Payment towards credit card\n"
+"Payment"
+msgstr "Plată"
+
+#: widgets/register.cpp:818 widgets/register.cpp:824
+msgid ""
+"_: Decrease of asset/liability value\n"
+"Decrease"
+msgstr "Scade"
+
+#: widgets/register.cpp:819 widgets/register.cpp:823
+msgid ""
+"_: Increase of asset/liability value\n"
+"Increase"
+msgstr "Creşte"
+
+#: widgets/register.cpp:2280
+msgid "Prior transactions possibly filtered"
+msgstr "Tranzacţii anterioare au posibil filtrate"
+
+#: widgets/register.cpp:2284
+msgid "Last reconciliation"
+msgstr "Ultima reconciliere"
+
+#: widgets/register.cpp:2291
+#, c-format
+msgid "Online Statement Balance: %1"
+msgstr "Soldul extrasului online: %1"
+
+#: widgets/register.cpp:2295
+msgid "This year"
+msgstr "Anul acesta"
+
+#: widgets/kmymoneycombo.cpp:674 widgets/register.cpp:2296
+msgid "Last month"
+msgstr "Luna trecută"
+
+#: widgets/register.cpp:2297
+msgid "This month"
+msgstr "Luna aceasta"
+
+#: widgets/register.cpp:2298
+msgid "Last week"
+msgstr "Săptămâna trecută"
+
+#: widgets/register.cpp:2299
+msgid "This week"
+msgstr "Săptămâna aceasta"
+
+#: widgets/register.cpp:2300
+msgid "Yesterday"
+msgstr "Ieri"
+
+#: widgets/kmymoneycombo.cpp:666 widgets/register.cpp:2301
+msgid "Today"
+msgstr "Astăzi"
+
+#: widgets/register.cpp:2302 widgets/register.cpp:2307
+msgid "Future transactions"
+msgstr "Tranzacţii viitoare"
+
+#: widgets/register.cpp:2303
+msgid "Next week"
+msgstr "Săptămâna viitoare"
+
+#: widgets/kmymoneycalendar.cpp:131 widgets/register.cpp:2304
+msgid "Next month"
+msgstr "Luna viitoare"
+
+#: widgets/kmymoneycombo.cpp:670 widgets/register.cpp:2315
+msgid "Current fiscal year"
+msgstr "Anul fiscal curent"
+
+#: widgets/register.cpp:2316
+msgid "Previous fiscal year"
+msgstr "Anul fiscal trecut"
+
+#: widgets/register.cpp:2317
+msgid "Next fiscal year"
+msgstr "Anul fiscal următor"
+
+#: widgets/register.cpp:2349
+msgid ""
+"_: Unknown payee\n"
+"Unknown"
+msgstr "Necunoscut"
+
+#: widgets/register.cpp:2368
+msgid ""
+"_: Unknown category\n"
+"Unknown"
+msgstr "Necunoscută"
+
+#: widgets/register.cpp:2387
+msgid ""
+"_: Unknown security\n"
+"Unknown"
+msgstr "Necunoscută"
+
+#: widgets/klistviewsearchline.cpp:249
+msgid "Search Columns"
+msgstr "Caută coloane"
+
+#: widgets/klistviewsearchline.cpp:251
+msgid "All Visible Columns"
+msgstr "Toate coloanele vizibile"
+
+#: widgets/klistviewsearchline.cpp:266
+msgid ""
+"_: Column number %1\n"
+"Column No. %1"
+msgstr "Coloana nr. %1"
+
+#: widgets/klistviewsearchline.cpp:461 widgets/registersearchline.cpp:286
+msgid "S&earch:"
+msgstr "Ca&ută:"
+
+#: widgets/kmymoneyaccountselector.cpp:110
+#: widgets/kmymoneyaccountselector.cpp:371
+msgid "Income categories"
+msgstr "Categorii de venituri"
+
+#: widgets/kmymoneyaccountselector.cpp:349
+#: widgets/kmymoneyaccountselector.cpp:350
+msgid "Favorites"
+msgstr "Favorite"
+
+#: widgets/kmymoneyaccountselector.cpp:357
+msgid "Asset accounts"
+msgstr "Conturi de activ"
+
+#: widgets/kmymoneyaccountselector.cpp:364
+msgid "Liability accounts"
+msgstr "Conturi de pasiv"
+
+#: widgets/kmymoneyaccountselector.cpp:381
+msgid "Expense categories"
+msgstr "Categorii de cheltuieli"
+
+#: widgets/kmymoneyaccountselector.cpp:391
+msgid "Equity accounts"
+msgstr "Conturi de capital"
+
+#: widgets/kmymoneyaccounttreebase.cpp:120
+msgid "Total Balance"
+msgstr "Soldul total"
+
+#: widgets/kmymoneyaccounttreebase.cpp:124
+msgid "Total Value"
+msgstr "Valoare totală"
+
+#: widgets/registersearchline.cpp:75
+msgid ""
+"_: label for status combo\n"
+"Stat&us"
+msgstr "Sta&re"
+
+#: widgets/registersearchline.cpp:79
+msgid "Any status"
+msgstr "Orice stare"
+
+#: widgets/registersearchline.cpp:80
+msgid "Imported"
+msgstr "Importate"
+
+#: widgets/registersearchline.cpp:81
+msgid "Matched"
+msgstr "Asociate"
+
+#: widgets/registersearchline.cpp:82
+msgid "Erroneous"
+msgstr "Eronate"
+
+#: widgets/registersearchline.cpp:83
+msgid "Not marked"
+msgstr "Neverificate"
+
+#: widgets/kmymoneyaccounttree.cpp:54
+msgid ""
+"_: Column heading for category in tax report\n"
+"Tax"
+msgstr "Impozit"
+
+#: widgets/kmymoneyaccounttree.cpp:58
+msgid ""
+"_: Column heading for VAT category\n"
+"VAT"
+msgstr "TVA"
+
+#: widgets/kmymoneywizard.cpp:101
+msgid "Continue with next page"
+msgstr "Continuă cu pagina următoare"
+
+#: widgets/kmymoneywizard.cpp:103
+msgid "Finish wizard"
+msgstr "Termină"
+
+#: widgets/kmymoneywizard.cpp:121
+msgid "&Back"
+msgstr "Înap&oi"
+
+#: widgets/kmymoneywizard.cpp:122
+msgid "&Next"
+msgstr "Î&nainte"
+
+#: widgets/kmymoneywizard.cpp:123
+msgid "&Finish"
+msgstr "&Termină"
+
+#: widgets/kmymoneywizard.cpp:274
+msgid "Step %1 of %2"
+msgstr "Pasul %1 din %2"
+
+#: widgets/kmymoneydateinput.cpp:235
+msgid ""
+"_: Enter todays date into date input widget\n"
+"T"
+msgstr "T"
+
+#: widgets/transactionform.cpp:302
+msgid "&Deposit"
+msgstr "&Depozit"
+
+#: widgets/transactionform.cpp:304 widgets/transactionform.cpp:313
+#: widgets/transactionform.cpp:323 widgets/transactionform.cpp:333
+msgid "&Transfer"
+msgstr "&Transfer"
+
+#: widgets/transactionform.cpp:306
+msgid "&Withdrawal"
+msgstr "&Retragere"
+
+#: widgets/transactionform.cpp:311
+msgid "&Payment"
+msgstr "&Plată"
+
+#: widgets/transactionform.cpp:315
+msgid "&Charge"
+msgstr "&Modifică"
+
+#: widgets/transactionform.cpp:321 widgets/transactionform.cpp:335
+msgid "&Decrease"
+msgstr "&Descreşte"
+
+#: widgets/transactionform.cpp:325 widgets/transactionform.cpp:331
+msgid "&Increase"
+msgstr "&Creşte"
+
+#: widgets/kmymoneyscheduledcalendar.cpp:42
+msgid "Select Schedules"
+msgstr "Alege programări"
+
+#: widgets/kmymoneycalendar.cpp:108
+msgid "Select Style"
+msgstr "Alege stil"
+
+#: widgets/kmymoneycalendar.cpp:128
+msgid "Choose Style"
+msgstr "Alege stil"
+
+#: widgets/kmymoneycalendar.cpp:129
+msgid "Next year"
+msgstr "Anul viitor"
+
+#: widgets/kmymoneycalendar.cpp:130
+msgid "Previous year"
+msgstr "Anul trecut"
+
+#: widgets/kmymoneycalendar.cpp:132
+msgid "Previous month"
+msgstr "Luna trecută"
+
+#: widgets/kmymoneycalendar.cpp:133
+msgid "Select a week"
+msgstr "Selectează o săptămână"
+
+#: widgets/kmymoneycalendar.cpp:134
+msgid "Select a month"
+msgstr "Selectează o lună"
+
+#: widgets/kmymoneycalendar.cpp:135
+msgid "Select a year"
+msgstr "Selectează un an"
+
+#: widgets/kmymoneycalendar.cpp:249
+msgid "Week XX"
+msgstr "Săptămâna XX"
+
+#: widgets/kmymoneycalendar.cpp:264 widgets/kmymoneycalendar.cpp:300
+#, c-format
+msgid "Week %1"
+msgstr "Săptămâna %1"
+
+#: widgets/rc.cpp:1
+msgid "Account Types"
+msgstr "Tipuri de cont"
+
+#: widgets/rc.cpp:3
+msgid "Detailed description"
+msgstr "Descriere detaliată"
+
+#: widgets/rc.cpp:18
+msgid "Period"
+msgstr "Perioadă"
+
+#: widgets/rc.cpp:21
+msgid "Individual"
+msgstr "Individual"
+
+#: widgets/rc.cpp:23
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Acces to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>Recovery encryption</i> group is only accessible, if the necessary "
+"key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is "
+"found."
+msgstr ""
+"Această pagină vă permite să configuraţi parametrii stocării datelor "
+"dumneavoastră <b>KMyMoney</b> într-un fişier criptat bazat pe sistemul "
+"<b>GPG</b>.<p>\n"
+"Accesul la aceste setări este dezactivat dacă sistemul <b>GPG</b> nu a putut "
+"fi detectat pe sistemul dumneavoastră. În acest caz vă rog să vă asiguraţi "
+"că sistemul <b>GPG</b> funcţionează corect pentru utilizatorul curent.<p>\n"
+"Grupul de <i>criptare de recuperare</i> este accesibil doar în cazul în care "
+"cheia necesară, emisă pentru <b>kmymoney-recover@users.sourceforge.net</b> "
+"cu identificatorul 0x8AFDDC8E a fost găsită."
+
+#: widgets/rc.cpp:26
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading <i>0x</i>."
+msgstr ""
+"Introduceţi identificatorul cheii pe care o doriţi să o folosiţi pentru "
+"criptare. Acesta poate fi fie o adresă de poştă electronică fie "
+"identificatorul hexazecimal al cheii. În cazul identificatorului hexazecimal "
+"nu uitaţi prefixul <i>0x</i>."
+
+#: widgets/rc.cpp:27
+msgid "User ID"
+msgstr "ID utilizator"
+
+#: widgets/rc.cpp:29
+msgid "Recovery encryption"
+msgstr "Criptare de recuperare"
+
+#: widgets/rc.cpp:30
+msgid "Also encrypt with kmymoney-recover key"
+msgstr "Criptează de asemenea cu cheia de recuperare KMyMoney"
+
+#: widgets/rc.cpp:32
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out."
+msgstr ""
+"Puteţi alege să criptaţi datele de asemenea cu cheia de recuperare KMyMoney. "
+"Doar dezvoltatorii cheie a aplicaţiei KMyMoney sunt în posesia cheii private "
+"respective necesară pentru a reciti datele criptate. <p>\n"
+"\n"
+"Acest mecanism este pus la dispozitia utilizatorului pentru cazul în care "
+"acesta îsi pierde cheia şi nu îşi mai poate accesa datele. Cu aceasta "
+"opţiune activată, dezvoltatorii KMyMoney pot decripta datele şi le pot pune "
+"la dispoziţia utilizatorului. Utilizatorul trebuie să fie pregătit să "
+"răspundă la unele înrebări detaliate despre conţinutul datelor înainte să "
+"poată intra în posesia acestora."
+
+#: widgets/rc.cpp:51
+msgid "PriceInfo"
+msgstr "Informaţie de preţ"
+
+#: widgets/rc.cpp:52
+msgid "Report Tab"
+msgstr "Fila raporturilor"
+
+#: widgets/rc.cpp:53
+msgid "<p>On this tab, you set the basic properties of this report.</p>"
+msgstr ""
+"<p>În aceasta filă puteţi alege parametrii de bază a acestui raport.</p>"
+
+#: widgets/rc.cpp:54
+msgid "Report Name"
+msgstr "Numele raportului"
+
+#: widgets/rc.cpp:55
+msgid "<p>Choose a name for this report.</p>"
+msgstr "<p>Alegeţi un nume pentru acest raport.</p>"
+
+#: widgets/rc.cpp:57
+msgid "<p>Enter a comment to help you remember the details of this report.</p>"
+msgstr ""
+"<p>Introduceţi un comentariu pentru a va ajuta să vă reamintiţi detaliile "
+"acestui raport.</p>"
+
+#: widgets/rc.cpp:58
+msgid "Convert values to base currency"
+msgstr "Coverteşte valorile la moneda de bază"
+
+#: widgets/rc.cpp:59
+msgid ""
+"_: Convert 'em!!\n"
+"<p>Select this option to convert all values in the report to your base "
+"currency.</p><p>Leave it unchecked if you'd like to see values in their "
+"original currency.</p><p>If currencies are not converted, then subtotals "
+"will not be shown.</p>"
+msgstr ""
+"<p>Alegeţi această opţiune pentru a converti toate valorile din raport la "
+"moneda de bază.</p><p>Lăsaţi opţiunea debifată dacă doriţi să vedeţi "
+"valorile în valuta originală.</p><p>Dacă valorile nu sunt convertite atunci "
+"nu se vor afişa subtotaluri.</p>"
+
+#: widgets/rc.cpp:60
+msgid "Mark as a favorite report"
+msgstr "Marchează ca raport favorit"
+
+#: widgets/rc.cpp:61
+msgid ""
+"<p>Select this option to notate this report as one of your favorites.</"
+"p><p>All your favorite reports are grouped in one place on the report list "
+"for easy access.</p>"
+msgstr ""
+"<p>Alegeţi această opţiune pentru a declara acest raport un raport favorit.</"
+"p><p>Toate rapoartele favorite ale dumneavoastră sunt grupate la un loc în "
+"lista de raporturi favorite pentru a facilita accesul la ele.</p>"
+
+#: widgets/rc.cpp:62 widgets/rc.cpp:88
+msgid "Rows/Columns Tab"
+msgstr "Fila rândurilor/coloanelor"
+
+#: widgets/rc.cpp:63 widgets/rc.cpp:89
+msgid ""
+"<p>On this tab, you configure how you'd like the rows and columns to be "
+"selected and organized.</p>"
+msgstr ""
+"<p> În această filă puteţi configura modul în care doriţi selectate şi "
+"organizate rândurile şi coloanele.</p>"
+
+#: widgets/rc.cpp:69 widgets/rc.cpp:81
+msgid ""
+"<p>Choose what kind of accounts to display as the rows of this report.</p>"
+msgstr ""
+"<p>Alegeţi ce fel de conturi să fie afişate ca rânduri ale acestui raport.</"
+"p>"
+
+#: widgets/rc.cpp:71
+msgid "Columns"
+msgstr "Coloane"
+
+#: widgets/rc.cpp:75
+msgid "Bi-Monthly"
+msgstr "Bilunar"
+
+#: widgets/rc.cpp:78
+msgid "<p>Choose how large of a time period each column should encompass</p>"
+msgstr ""
+"<p>Alegeţi perioada de timp care ar trebui să fie cuprinsă într-o coloană</p>"
+
+#: widgets/rc.cpp:79
+msgid "Income & Expenses"
+msgstr "Venituri şi cheltuieli"
+
+#: widgets/rc.cpp:80
+msgid "Assets & Liabilities"
+msgstr "Active şi pasive"
+
+#: widgets/rc.cpp:82
+msgid "Rows"
+msgstr "Rânduri"
+
+#: widgets/rc.cpp:83
+msgid "Show totals column"
+msgstr "Afişează coloana totalurilor"
+
+#: widgets/rc.cpp:84
+msgid "Average days"
+msgstr "Număr mediu de zile"
+
+#: widgets/rc.cpp:85
+msgid "Include scheduled transactions"
+msgstr "Include tranzacţiile programate"
+
+#: widgets/rc.cpp:86
+msgid "Include transfers"
+msgstr "Include transferuri"
+
+#: widgets/rc.cpp:87
+msgid "Include unused accounts/categories"
+msgstr "Include conturile şi categoriile nefolosite"
+
+#: widgets/rc.cpp:90
+msgid "Organize by:"
+msgstr "Organizează după:"
+
+#: widgets/rc.cpp:92
+msgid "Top Categories"
+msgstr "Categorii rădăcină"
+
+#: widgets/rc.cpp:95
+msgid "Top Accounts"
+msgstr "Conturi rădăcină"
+
+#: widgets/rc.cpp:98
+msgid "<p>Choose how to group the transactions in this report</p>"
+msgstr "<p>Alegeţi cum să grupez tranzacţiile în acest raport</p>"
+
+#: widgets/rc.cpp:99
+msgid "Show Columns"
+msgstr "Afişează coloane"
+
+#: widgets/rc.cpp:100
+msgid ""
+"<p>Choose which columns should be shown in the report.</p><p>The date and "
+"transaction amount are always shown.</p>"
+msgstr ""
+"<p>Alege care coloane ar trebui să fie afişate în raport.</p><p>Data şi suma "
+"tranzacţiei sunt întotdeauna afişate.</p>"
+
+#: widgets/rc.cpp:102
+msgid "<p>Select this option to show the Memo column</p>"
+msgstr "<p>Alege această opţiune pentru a afişa coloana Memo</p>"
+
+#: widgets/rc.cpp:104
+msgid "<p>Select this option to show the Shares column for investments</p>"
+msgstr ""
+"<p>Alegeţi această opţiune pentru a afişa coloana Acţiuni pentru investiţii</"
+"p>"
+
+#: widgets/rc.cpp:106
+msgid "<p>Select this option to show the Price column for investments</p>"
+msgstr "<p>Alege această opţiune pentru a afişa coloana Preţ</p>"
+
+#: widgets/rc.cpp:108
+msgid "<p>Select this option to show the Reconciled column</p>"
+msgstr "<p>Alege această opţiune pentru a afişa coloana Reconciliate</p>"
+
+#: widgets/rc.cpp:110
+msgid "<p>Select this option to show the Account column</p>"
+msgstr "<p>Alege această opţiune pentru a afişa coloana Cont</p>"
+
+#: widgets/rc.cpp:112
+msgid "<p>Select this option to show the Number column</p>"
+msgstr "<p>Alege această opţiune pentru a afişa coloana Număr</p>"
+
+#: widgets/rc.cpp:114
+msgid "<p>Select this option to show the Payee column</p>"
+msgstr ""
+"<p>Alege această opţiune pentru a afişa coloana Beneficiar/Plătitor</p>"
+
+#: widgets/rc.cpp:116
+msgid "<p>Select this option to show the Category column</p>"
+msgstr "<p>Alege această opţiune pentru a afişa coloana Categorie</p>"
+
+#: widgets/rc.cpp:118
+msgid "<p>Select this option to show the Action column</p>"
+msgstr "<p>Alege această opţiune pentru a afişa coloana Acţiune</p>"
+
+#: widgets/rc.cpp:120
+msgid "<p>Select this option to show the Running balance column</p>"
+msgstr "<p>Alegeţi această opţiune pentru a afişa coloana Soldul curent</p>"
+
+#: widgets/rc.cpp:121
+msgid "Include only Loan accounts"
+msgstr "Include doar conturi de împrumut"
+
+#: widgets/rc.cpp:122
+msgid "Include only Investment accounts"
+msgstr "Include doar conturi de investiţii"
+
+#: widgets/rc.cpp:123 widgets/rc.cpp:127
+msgid ""
+"<p>Check this box to include only those categories which have been marked to "
+"\"Include on Tax Reports\"</p>"
+msgstr ""
+"<p> Bifaţi aceasta căsută pentru a include doar categoriile care au fost "
+"marcate ca \"Include în raporturile de impozite\"</p>"
+
+#: widgets/rc.cpp:124
+msgid "Hide Split Transaction Details"
+msgstr "Ascunde detaliile tranzacţiei împărţite"
+
+#: widgets/rc.cpp:125
+msgid ""
+"Do not display the individual transactions that make up a split transaction"
+msgstr ""
+"Nu afişa tranzacţiile individuale care foarmează o tranzacţie împărţită"
+
+#: widgets/rc.cpp:126
+msgid "Include only Tax categories"
+msgstr "Include doar categoriile de impozite"
+
+#: widgets/rc.cpp:128
+msgid "Chart Tab"
+msgstr "Fila de grafice"
+
+#: widgets/rc.cpp:129
+msgid "<p>On this tab, you configure the chart drawn forthis report.</p>"
+msgstr ""
+"<p> Pe această filă puteţi configura graficul desenat pentru acest raport.</"
+"p>"
+
+#: widgets/rc.cpp:130
+msgid "Chart Type"
+msgstr "Tipul graficului"
+
+#: widgets/rc.cpp:131
+msgid "<p>Select what form you would like the chart to be drawn as.</p>"
+msgstr "<p>Alegeţi forma in care aţi dori să fie reprezentat graficul.</p>"
+
+#: widgets/rc.cpp:132
+msgid "Line"
+msgstr "Linie"
+
+#: widgets/rc.cpp:133
+msgid "Bar"
+msgstr "Bară"
+
+#: widgets/rc.cpp:134
+msgid "Stacked Bar"
+msgstr "Bare suprapuse"
+
+#: widgets/rc.cpp:135
+msgid "Pie"
+msgstr "Diagramă circulară"
+
+#: widgets/rc.cpp:136
+msgid "Ring"
+msgstr "Inel"
+
+#: widgets/rc.cpp:137
+msgid "Show grid lines"
+msgstr "Afişează linii de marcaj"
+
+#: widgets/rc.cpp:138
+msgid ""
+"<p>Select this option to show horizontal and vertical grid lines on the "
+"chart.</p>"
+msgstr ""
+"<p>Alegeţi această opţiune pentru a afişa linii orizontale şi verticale de "
+"marcaj pe grafic.</p>"
+
+#: widgets/rc.cpp:139
+msgid "Draw values on chart"
+msgstr "Reprezintă valorile pe grafic"
+
+#: widgets/rc.cpp:140
+msgid ""
+"<p>Select this option to draw the numeric values for data points next to "
+"their plot location.</p>"
+msgstr ""
+"<p>Alegeţi această opţiune pentru a reprezenta valorile numerice ale "
+"punctelor de pe grafic</p>"
+
+#: widgets/rc.cpp:141
+msgid "Show as chart by default"
+msgstr "Afişează implicit ca grafic "
+
+#: widgets/rc.cpp:142
+msgid ""
+"<p>Select this option to cause the report to be shown as a chart when you "
+"first open the report. Otherwise, it will come up as a text report.</p>"
+msgstr ""
+"<p>Alegeţi această opţiune în cazul în care doriţi afişarea raportului ca "
+"grafic la prima deschidere a raportului. Altfel se va deschide ca un raport "
+"text.</p>"
+
+#: widgets/rc.cpp:143
+msgid "Line width"
+msgstr "Grosimea liniei"
+
+#: widgets/rc.cpp:144
+msgid "<p>Select what width should be used to draw the line on the chart</p>"
+msgstr ""
+"<p>Alegeţi grosimea liniei cu ajutorul căruia se desenează graficul.</p>"
+
+#: widgets/rc.cpp:145
+msgid "ReportControl"
+msgstr "Controlul raportului"
+
+#: widgets/rc.cpp:149
+msgid "Configure this report"
+msgstr "Personalizează acest raport"
+
+#: widgets/rc.cpp:151
+msgid "Create a new report based on this one"
+msgstr "Creează un raport nou pe baza acestuia"
+
+#: widgets/rc.cpp:153
+msgid "Copy this report to the clipboard"
+msgstr "Copiază acest raport în memorie"
+
+#: widgets/rc.cpp:155
+msgid "Export this report as an HTML or CSV file"
+msgstr "Exportă acest raport ca fişier HTML sau CSV"
+
+#: widgets/rc.cpp:157
+msgid "Permanently delete this report"
+msgstr "Şterge pentru totdeauna acest raport"
+
+#: widgets/rc.cpp:159
+msgid "Close this window"
+msgstr "Închide această fereastră"
+
+#: widgets/rc.cpp:162
+msgid "n of n"
+msgstr "n din n"
+
+#: widgets/rc.cpp:166
+msgid "Account:"
+msgstr "Cont:"
+
+#: widgets/rc.cpp:168
+msgid "Enter..."
+msgstr "Introdu..."
+
+#: widgets/rc.cpp:171
+msgid "TransactionSortOptionDecl"
+msgstr "TransactionSortOptionDecl"
+
+#: widgets/rc.cpp:173
+msgid "Sort order"
+msgstr "Ordinea de sortare"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Sunday\n"
+"Sun"
+msgstr "Dum"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Saturday\n"
+"Sat"
+msgstr "Sâm"
+
+#: widgets/kmymoneydatetbl.cpp:171 widgets/kmymoneydatetbl.cpp:178
+msgid "Week %1 for year %2."
+msgstr "Săptămâna %1 pentru anul %2."
+
+#: widgets/kmymoneycombo.cpp:417
+msgid "ATM"
+msgstr "Bancomat"
+
+#: widgets/kmymoneycombo.cpp:418
+msgid "Withdrawal"
+msgstr "Retragere"
+
+#: widgets/kmymoneycombo.cpp:421
+msgid "Cheque"
+msgstr "Cec"
+
+#: widgets/kmymoneycombo.cpp:469
+msgid ""
+"_: Activity for expense categories\n"
+"Paid"
+msgstr "Plătit"
+
+#: widgets/kmymoneycombo.cpp:470
+msgid ""
+"_: Activity for income categories\n"
+"Received"
+msgstr ""
+"_: Operaţie pentru categorii de venituri\n"
+"Încasat"
+
+#: widgets/kmymoneycombo.cpp:519
+msgid "Reinvest dividend"
+msgstr "Dividend reinvestit"
+
+#: widgets/kmymoneycombo.cpp:664
+msgid "All dates"
+msgstr "Toate datele"
+
+#: widgets/kmymoneycombo.cpp:665
+msgid "As of today"
+msgstr "De astăzi"
+
+#: widgets/kmymoneycombo.cpp:667
+msgid "Current month"
+msgstr "Luna curentă"
+
+#: widgets/kmymoneycombo.cpp:668
+msgid "Current quarter"
+msgstr "Trimestrul curent"
+
+#: widgets/kmymoneycombo.cpp:669
+msgid "Current year"
+msgstr "Anul curent"
+
+#: widgets/kmymoneycombo.cpp:671
+msgid "Month to date"
+msgstr "De la începutul lunii până azi"
+
+#: widgets/kmymoneycombo.cpp:672
+msgid "Year to date"
+msgstr "De la începutul anului până azi"
+
+#: widgets/kmymoneycombo.cpp:673
+msgid "Year to month"
+msgstr "De la începutul anului până la începutul lunii"
+
+#: widgets/kmymoneycombo.cpp:675
+msgid "Last year"
+msgstr "Anul trecut"
+
+#: widgets/kmymoneycombo.cpp:676
+msgid "Last fiscal year"
+msgstr "Anul fiscal trecut"
+
+#: widgets/kmymoneycombo.cpp:677
+msgid "Last 7 days"
+msgstr "Ultimele 7 zile"
+
+#: widgets/kmymoneycombo.cpp:678
+msgid "Last 30 days"
+msgstr "Ultimele 30 de zile"
+
+#: widgets/kmymoneycombo.cpp:679
+msgid "Last 3 months"
+msgstr "Ultimele 3 luni"
+
+#: widgets/kmymoneycombo.cpp:680
+msgid "Last quarter"
+msgstr "Ultimul trimestru"
+
+#: widgets/kmymoneycombo.cpp:681
+msgid "Last 6 months"
+msgstr "Ultimele 6 luni"
+
+#: widgets/kmymoneycombo.cpp:682
+msgid "Last 11 months"
+msgstr "Ultimele 11 luni"
+
+#: widgets/kmymoneycombo.cpp:683
+msgid "Last 12 months"
+msgstr "Ultimele 12 luni"
+
+#: widgets/kmymoneycombo.cpp:684
+msgid "Next 7 days"
+msgstr "Următoarele 7 zile"
+
+#: widgets/kmymoneycombo.cpp:685
+msgid "Next 30 days"
+msgstr "Următoarele 30 zile"
+
+#: widgets/kmymoneycombo.cpp:686
+msgid "Next 3 months"
+msgstr "Următoarele 3 zile"
+
+#: widgets/kmymoneycombo.cpp:687
+msgid "Next quarter"
+msgstr "Trimestrul următor"
+
+#: widgets/kmymoneycombo.cpp:688
+msgid "Next 6 months"
+msgstr "Următoarele 6 luni"
+
+#: widgets/kmymoneycombo.cpp:689
+msgid "Next 12 months"
+msgstr "Următoarele 12 luni"
+
+#: widgets/kmymoneycombo.cpp:690
+msgid "Last 3 months to next 3 months"
+msgstr "Ultimele 3 luni şi următoarele 3 luni"
+
+#: widgets/kmymoneycombo.cpp:691
+msgid "User defined"
+msgstr "Definit de către utilizator"
+
+#~ msgid "Reset"
+#~ msgstr "Reiniţializează"
+
+#~ msgid "No plugins loaded"
+#~ msgstr "Nu au fost încărcate funcţii suplimentare"
+
+#~ msgid "Create schedule..."
+#~ msgstr "Creează programare..."
+
+#~ msgid "New schedule..."
+#~ msgstr "Programare nouă..."
+
+#~ msgid "Edit schedule..."
+#~ msgstr "Modifică programarea..."
+
+#~ msgid "Delete schedule..."
+#~ msgstr "Şterge programarea..."
+
+#~ msgid "Duplicate schedule"
+#~ msgstr "Creează un duplicat al programării"
+
+#~ msgid "Enter schedule..."
+#~ msgstr "Introdu programarea..."
+
+#~ msgid "Skip schedule..."
+#~ msgstr "Omite programarea..."
+
+#~ msgid "Adjusting schedules..."
+#~ msgstr "Se ajustează programările... "
+
+#~ msgid "Add schedule"
+#~ msgstr "Adaugă programare"
+
+#~ msgid "Unable to enter transaction for schedule '%1'"
+#~ msgstr ""
+#~ "Nu s-a putut introduce tranzacţia aparţinând plăţii programate '%1'."
+
+#~ msgid "Loaded"
+#~ msgstr "Încărcată"
+
+#~ msgid ""
+#~ "_: Plugin interface description\n"
+#~ "Online access"
+#~ msgstr "Acces online"
+
+#~ msgid ""
+#~ "_: Plugin interface description\n"
+#~ "File import"
+#~ msgstr "Importă fişier"
+
+#~ msgid "not loaded: %1"
+#~ msgstr "neîncărcată: %1"
+
+#~ msgid "Schedule options"
+#~ msgstr "Opţiuni programare"
+
+#~ msgid "New Schedule"
+#~ msgstr "Plată programată noua"
+
+#~ msgid "Edit Schedule"
+#~ msgstr "Modifică plata programată"
+
+#~ msgid "Search transactions containing the following text"
+#~ msgstr "Caută după tranzacţii care conţin următorul text"
+
+#~ msgid "Search"
+#~ msgstr "Caută"
+
+#~ msgid "&Search"
+#~ msgstr "&Caută"
+
+#~ msgid "Start the search"
+#~ msgstr "Începe căutarea"
+
+#~ msgid "Takes the current criteria and searches for matching transactions."
+#~ msgstr "Caută după tranzacţii potrivite în funcţie de criteriul de căutare."
+
+#~ msgid "Reset all settings"
+#~ msgstr "Reveniţi la setările iniţiale"
+
+#~ msgid ""
+#~ "Use this to reset all settings to the state they were when the dialog was "
+#~ "opened."
+#~ msgstr ""
+#~ "Folosiţi această funcţie pentru a readuce toate opţiunile la valoarea pe "
+#~ "care au avut-o în momentul pornirii acestui dialog."
+
+#~ msgid "Use this button to close the window"
+#~ msgstr "Foloseşte acest buton pentru a închide fereastra"
diff --git a/po/ru.po b/po/ru.po
new file mode 100644
index 0000000..327bdf2
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,14848 @@
+# Translation of KMyMoney.po to Russian
+# This file is distributed under the same license as the KMYMoney.
+# Copyright (C) Michael Edwardes.
+#
+# Nick Shafff <linux@l10n.org.ua>, 2004.
+# Andrey Cherepanov <skull@kde.ru>, 2006-2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: ru_new\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-25 19:04+0200\n"
+"PO-Revision-Date: 2009-09-18 12:50+0400\n"
+"Last-Translator: Andrey Cherepanov <skull@kde.ru>\n"
+"Language-Team: Russian <kde-russian@lists.kde.ru>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: wizards/wizardpages/rc.cpp:1
+msgid ""
+"Select groups of accounts that correspond to the ways that you will use "
+"KMyMoney. Each group you select will cause several accounts and categories "
+"to be created. Select the groups that are relevant to you. You can always "
+"create additional accounts manually later."
+msgstr ""
+"Выберите профиль, который планируете использовать в KMyMoney. Каждый профиль "
+"содержит набор предопределённых счетов и категорий. Вы можете добавить "
+"другие счета и категории самостоятельно."
+
+#: wizards/wizardpages/rc.cpp:2
+msgid ""
+"<p>KMyMoney supports multiple currencies, nevertheless one of them will be "
+"used as your base currency. The base currency is used as default for new "
+"accounts and reports. Please select the base currency from the following "
+"list."
+msgstr ""
+"<p>KMyMoney поддерживает учёт в нескольких валютах, одна из которых должна "
+"быть базовой. Базовая валюта используется по умолчанию для новых счетов и "
+"отчётов. Выберите базовую валюту из списка."
+
+#: dialogs/kequitypriceupdatedlg.cpp:71 dialogs/rc.cpp:399 dialogs/rc.cpp:485
+#: dialogs/rc.cpp:724 dialogs/settings/rc.cpp:108 reports/listtable.cpp:226
+#: views/kinvestmentview.cpp:71 views/kpayeesview.cpp:351 views/rc.cpp:13
+#: widgets/rc.cpp:5 widgets/rc.cpp:34
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1599
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1629
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1673
+#: wizards/wizardpages/rc.cpp:3
+msgid "Name"
+msgstr "Название"
+
+#: wizards/wizardpages/rc.cpp:4
+msgid "ISO Code"
+msgstr "Код ISO"
+
+#: dialogs/kequitypriceupdatedlg.cpp:69 dialogs/kequitypriceupdatedlg.cpp:70
+#: dialogs/rc.cpp:71 dialogs/rc.cpp:725 dialogs/settings/rc.cpp:112
+#: views/kinvestmentview.cpp:72 widgets/rc.cpp:37 wizards/wizardpages/rc.cpp:5
+msgid "Symbol"
+msgstr "Код"
+
+#: wizards/wizardpages/rc.cpp:6
+msgid ""
+"<p>Use the fields below to enter some information about yourself.</p>\n"
+"\n"
+"<p>All information is optional and only used to personalize your KMyMoney "
+"file.</p>"
+msgstr ""
+"<p>Введите здесь информацию о себе.</p>\n"
+"\n"
+"<p>Все поля необязательны и предназначены для персонализации этого файла "
+"KMyMoney.</p>"
+
+#: dialogs/rc.cpp:425 wizards/newuserwizard/rc.cpp:27
+#: wizards/wizardpages/rc.cpp:7
+msgid "Town:"
+msgstr "Город:"
+
+#: dialogs/rc.cpp:420 wizards/newuserwizard/rc.cpp:22
+#: wizards/wizardpages/rc.cpp:8
+msgid "County/State:"
+msgstr "Область:"
+
+#: dialogs/rc.cpp:391 dialogs/rc.cpp:421 wizards/newuserwizard/rc.cpp:23
+#: wizards/wizardpages/rc.cpp:9
+msgid "Street:"
+msgstr "Улица:"
+
+#: dialogs/rc.cpp:422 wizards/newuserwizard/rc.cpp:24
+#: wizards/wizardpages/rc.cpp:10
+msgid "Email:"
+msgstr "E-mail:"
+
+#: dialogs/rc.cpp:424 wizards/newuserwizard/rc.cpp:26
+#: wizards/wizardpages/rc.cpp:11
+msgid "Telephone:"
+msgstr "Телефон:"
+
+#: dialogs/rc.cpp:423 wizards/newuserwizard/rc.cpp:25
+#: wizards/wizardpages/rc.cpp:12
+msgid "Your name:"
+msgstr "Ваше имя:"
+
+#: dialogs/rc.cpp:427 wizards/newuserwizard/rc.cpp:29
+#: wizards/wizardpages/rc.cpp:13
+msgid "Load from Addressbook"
+msgstr "Загрузить из адресной книги"
+
+#: dialogs/rc.cpp:392 dialogs/rc.cpp:426 views/rc.cpp:68
+#: wizards/wizardpages/rc.cpp:14
+msgid "Postal Code:"
+msgstr "Почтовый индекс:"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:82
+msgid "KMyMoney New Account Setup"
+msgstr "Создание нового счёта"
+
+#: dialogs/rc.cpp:360 dialogs/rc.cpp:361 reports/listtable.cpp:230
+#: wizards/newaccountwizard/knewaccountwizard.cpp:83
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1616
+#: wizards/newaccountwizard/rc.cpp:61
+msgid "Institution"
+msgstr "Учреждение"
+
+#: dialogs/investactivities.cpp:198 dialogs/investactivities.cpp:286
+#: dialogs/investactivities.cpp:367 dialogs/kfindtransactiondlg.cpp:181
+#: dialogs/rc.cpp:139 dialogs/rc.cpp:192 dialogs/rc.cpp:207
+#: dialogs/transactioneditor.cpp:734 reports/listtable.cpp:201
+#: reports/pivottable.cpp:1336 reports/pivottable.cpp:1586
+#: views/kforecastview.cpp:393 views/kgloballedgerview.cpp:175
+#: views/khomeview.cpp:418 views/khomeview.cpp:491 views/khomeview.cpp:525
+#: views/khomeview.cpp:764 views/khomeview.cpp:967 views/khomeview.cpp:1437
+#: views/kscheduledview.cpp:71 views/rc.cpp:17 views/rc.cpp:44
+#: widgets/kmymoneyaccounttreebase.cpp:58
+#: widgets/kmymoneyaccounttreeforecast.cpp:41 widgets/rc.cpp:109
+#: widgets/register.cpp:566 widgets/transaction.cpp:978
+#: widgets/transaction.cpp:1535
+#: wizards/newaccountwizard/knewaccountwizard.cpp:84
+msgid "Account"
+msgstr "Счёт"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:85
+msgid "Broker"
+msgstr "Брокер"
+
+#: dialogs/kfindtransactiondlg.cpp:225 dialogs/rc.cpp:70 dialogs/rc.cpp:104
+#: dialogs/rc.cpp:159 dialogs/rc.cpp:223 dialogs/rc.cpp:246 dialogs/rc.cpp:751
+#: dialogs/settings/rc.cpp:109 widgets/rc.cpp:35 widgets/register.cpp:568
+#: wizards/newaccountwizard/knewaccountwizard.cpp:86
+msgid "Details"
+msgstr "Прочее"
+
+#: dialogs/knewloanwizard.cpp:636 dialogs/rc.cpp:231 dialogs/rc.cpp:608
+#: kmymoneyutils.cpp:191 views/khomeview.cpp:399
+#: wizards/newaccountwizard/knewaccountwizard.cpp:87
+#: wizards/newaccountwizard/knewaccountwizard.cpp:880
+msgid "Payments"
+msgstr "Платежи"
+
+#: dialogs/investactivities.cpp:195 dialogs/investactivities.cpp:283
+#: dialogs/investactivities.cpp:422 dialogs/investtransactioneditor.cpp:217
+#: reports/listtable.cpp:221 widgets/transaction.cpp:1565
+#: wizards/newaccountwizard/knewaccountwizard.cpp:88
+msgid "Fees"
+msgstr "Комиссия"
+
+#: dialogs/rc.cpp:624 views/khomeview.cpp:415 views/khomeview.cpp:488
+#: views/khomeview.cpp:522 wizards/newaccountwizard/knewaccountwizard.cpp:89
+msgid "Schedule"
+msgstr "Платежи"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:90
+msgid "Payout"
+msgstr "Платёж"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:91
+msgid "Parent Account"
+msgstr "Вышестоящий счёт"
+
+#: dialogs/rc.cpp:719 wizards/newaccountwizard/knewaccountwizard.cpp:92
+#: wizards/newuserwizard/knewuserwizard.cpp:86
+msgid "Finish"
+msgstr "Готово"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:248
+msgid "Credit card payment"
+msgstr "Платёж на кредитную карту"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:264
+#, c-format
+msgid "Loan payment for %1"
+msgstr "Платёж по кредиту %1"
+
+#: mymoney/mymoneyscheduled.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:279
+msgid "Loan payment"
+msgstr "Платёж по кредиту"
+
+#: dialogs/rc.cpp:134 wizards/newaccountwizard/knewaccountwizard.cpp:293
+msgid "Amortization"
+msgstr "Размер выплат"
+
+#: dialogs/investactivities.cpp:196 dialogs/investactivities.cpp:284
+#: dialogs/investactivities.cpp:366 dialogs/investactivities.cpp:423
+#: dialogs/investtransactioneditor.cpp:227 dialogs/rc.cpp:135
+#: dialogs/rc.cpp:152 dialogs/rc.cpp:544 reports/listtable.cpp:222
+#: widgets/transaction.cpp:1597
+#: wizards/newaccountwizard/knewaccountwizard.cpp:302
+msgid "Interest"
+msgstr "Процент"
+
+#: dialogs/kcurrencycalculator.cpp:282
+#: wizards/newaccountwizard/knewaccountwizard.cpp:351
+#: wizards/newaccountwizard/knewaccountwizard.cpp:356
+msgid "User"
+msgstr "Пользователь"
+
+#: kmymoneyutils.cpp:64 mymoney/mymoneyaccount.cpp:711
+#: reports/querytabletest.cpp:422
+#: wizards/newaccountwizard/knewaccountwizard.cpp:451
+msgid "Checking"
+msgstr "Пластиковая карта"
+
+#: kmymoneyutils.cpp:66 mymoney/mymoneyaccount.cpp:714
+#: wizards/newaccountwizard/knewaccountwizard.cpp:452
+msgid "Savings"
+msgstr "Банковский вклад"
+
+#: kmymoneyutils.cpp:68 mymoney/mymoneyaccount.cpp:717
+#: reports/querytabletest.cpp:423
+#: wizards/newaccountwizard/knewaccountwizard.cpp:453
+msgid "Credit Card"
+msgstr "Кредитная карта"
+
+#: kmymoneyutils.cpp:70 mymoney/mymoneyaccount.cpp:720
+#: wizards/newaccountwizard/knewaccountwizard.cpp:454
+msgid "Cash"
+msgstr "Наличные"
+
+#: kmymoneyutils.cpp:72 mymoney/mymoneyaccount.cpp:723
+#: wizards/newaccountwizard/knewaccountwizard.cpp:455
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+msgid "Loan"
+msgstr "Кредит"
+
+#: kmymoneyutils.cpp:76 mymoney/mymoneyaccount.cpp:729
+#: wizards/newaccountwizard/knewaccountwizard.cpp:456
+msgid "Investment"
+msgstr "Инвестиции"
+
+#: converter/mymoneytemplate.cpp:178 converter/mymoneytemplate.cpp:179
+#: dialogs/knewaccountdlg.cpp:1014 kmymoneyutils.cpp:80
+#: mymoney/mymoneyaccount.cpp:735 views/kaccountsview.cpp:352
+#: views/kmymoneyview.cpp:765 widgets/kmymoneyaccountselector.cpp:177
+#: widgets/kmymoneyaccountselector.cpp:356
+#: wizards/newaccountwizard/knewaccountwizard.cpp:457
+msgid "Asset"
+msgstr "Активы"
+
+#: converter/mymoneytemplate.cpp:182 converter/mymoneytemplate.cpp:183
+#: dialogs/knewaccountdlg.cpp:1016 kmymoneyutils.cpp:82
+#: mymoney/mymoneyaccount.cpp:738 views/kaccountsview.cpp:356
+#: views/kmymoneyview.cpp:766 widgets/kmymoneyaccountselector.cpp:178
+#: widgets/kmymoneyaccountselector.cpp:363
+#: wizards/newaccountwizard/knewaccountwizard.cpp:458
+msgid "Liability"
+msgstr "Пассивы"
+
+#: converter/mymoneytemplate.cpp:194 converter/mymoneytemplate.cpp:195
+#: kmymoneyutils.cpp:94 mymoney/mymoneyaccount.cpp:756
+#: views/kaccountsview.cpp:369 views/kmymoneyview.cpp:769
+#: widgets/kmymoneyaccountselector.cpp:181
+#: widgets/kmymoneyaccountselector.cpp:390
+#: wizards/newaccountwizard/knewaccountwizard.cpp:460
+msgid "Equity"
+msgstr "Финансовый инструмент"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid ""
+"Please make sure to enter the correct conversion for the selected opening "
+"date. If you requested an online quote it might be provided for a different "
+"date."
+msgstr ""
+"Убедитесь, что вы ввели курс на дату создания. Если вы будете обновлять курс "
+"из онлайновых источников, то указанной даты в этих источниках может не быть."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid "Check date"
+msgstr "Проверка даты"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:562
+msgid "1 %1 equals %2"
+msgstr "1 %1 = %2"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:577
+msgid "Conversion rate is not positive"
+msgstr "Указан неверный курс"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:583
+msgid "No account name supplied"
+msgstr "Не указано название счёта"
+
+#: dialogs/keditscheduledlg.cpp:114 mymoney/mymoneyscheduled.cpp:1026
+#: wizards/newaccountwizard/knewaccountwizard.cpp:680
+msgid "Write check"
+msgstr "чек"
+
+#: dialogs/keditscheduledlg.cpp:111 mymoney/mymoneyscheduled.cpp:1014
+#: wizards/newaccountwizard/knewaccountwizard.cpp:682
+msgid "Direct debit"
+msgstr "автоматическое списание"
+
+#: dialogs/keditscheduledlg.cpp:113 mymoney/mymoneyscheduled.cpp:1032
+#: wizards/newaccountwizard/knewaccountwizard.cpp:683
+msgid "Bank transfer"
+msgstr "перевод"
+
+#: dialogs/keditscheduledlg.cpp:112 mymoney/mymoneyscheduled.cpp:1029
+#: wizards/newaccountwizard/knewaccountwizard.cpp:685
+msgid "Standing order"
+msgstr "оплата счёта"
+
+#: dialogs/keditscheduledlg.cpp:110 mymoney/mymoneyscheduled.cpp:1020
+#: wizards/newaccountwizard/knewaccountwizard.cpp:686
+msgid "Manual deposit"
+msgstr "зачисление вручную"
+
+#: dialogs/keditscheduledlg.cpp:109 mymoney/mymoneyscheduled.cpp:1017
+#: wizards/newaccountwizard/knewaccountwizard.cpp:687
+msgid "Direct deposit"
+msgstr "автоматическое зачисление"
+
+#: dialogs/keditscheduledlg.cpp:115 mymoney/mymoneyscheduled.cpp:1023
+#: wizards/newaccountwizard/knewaccountwizard.cpp:688
+msgid "Other"
+msgstr "платёж вручную"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:697
+msgid "CreditCard %1 monthly payment"
+msgstr "Величина платежей на кредитную карту %1 в месяц"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:703
+msgid "Finish entry and create account"
+msgstr "Создать счёт"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:705
+msgid "Finish entry and create account and schedule"
+msgstr "Создать счёт и добавить новый график платежей."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:708
+msgid "Next due date is prior to opening date"
+msgstr "Дата следующего платежа ранее даты открытия счёта"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:712
+msgid "No account selected"
+msgstr "Не указан счёт платежей"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:716
+msgid "No amount for payment selected"
+msgstr "Не указанна сумма платежа"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:720
+msgid "No payee for payment selected"
+msgstr "Не указан получатель"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:724
+msgid "No name assigned for schedule"
+msgstr "Не задано название выплаты"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:805
+msgid "No payee supplied"
+msgstr "Не указан получатель"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:819
+msgid "No opening balance supplied"
+msgstr "Не указан остаток на начало"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:826
+msgid "An interest change can only happen after the first payment"
+msgstr "Процентная ставка может быть изменена только после первого платежа"
+
+#: dialogs/knewloanwizard.cpp:615 dialogs/knewloanwizard.cpp:634
+#: wizards/newaccountwizard/knewaccountwizard.cpp:884
+#: wizards/newaccountwizard/rc.cpp:55
+msgid "Months"
+msgstr "Месяцы"
+
+#: dialogs/knewloanwizard.cpp:616 dialogs/knewloanwizard.cpp:635
+#: wizards/newaccountwizard/knewaccountwizard.cpp:885
+#: wizards/newaccountwizard/knewaccountwizard.cpp:889
+#: wizards/newaccountwizard/rc.cpp:56
+msgid "Years"
+msgstr "Годы"
+
+#: dialogs/knewloanwizard.cpp:711
+#: wizards/newaccountwizard/knewaccountwizard.cpp:961
+#, c-format
+msgid "KMyMoney has calculated the amount of the loan as %1."
+msgstr "Рассчитана сумма кредита: %1."
+
+#: dialogs/knewloanwizard.cpp:718
+#: wizards/newaccountwizard/knewaccountwizard.cpp:968
+msgid "KMyMoney has calculated the interest rate to %1%."
+msgstr "Рассчитана процентная ставка по кредиту: %1%."
+
+#: dialogs/knewloanwizard.cpp:731
+#: wizards/newaccountwizard/knewaccountwizard.cpp:981
+msgid ""
+"KMyMoney has calculated a periodic payment of %1 to cover principal and "
+"interest."
+msgstr "Рассчитаны периодические выплаты по кредиту: %1."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:993
+#, c-format
+msgid ""
+"The number of payments has been decremented and the balloon payment has been "
+"modified to %1."
+msgstr "Количество платежей уменьшено и последний платёж установлен в %1."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1001
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1021
+#, c-format
+msgid "The balloon payment has been modified to %1."
+msgstr "Последний платёж установлен в %1."
+
+#: dialogs/knewloanwizard.cpp:763
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1013
+msgid "KMyMoney has calculated the term of your loan as %1. "
+msgstr "Рассчитан срок кредита: %1. "
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1052
+msgid "KMyMoney has calculated a balloon payment of %1 for this loan."
+msgstr "Последний платёж составляет %1."
+
+#: dialogs/knewloanwizard.cpp:809
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1059
+msgid "KMyMoney has successfully verified your loan information."
+msgstr "Информация по кредиту проверена."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1067
+msgid ""
+"You have entered mis-matching information. Please modify your figures or "
+"leave one value empty to let KMyMoney calculate it for you"
+msgstr ""
+"Вы ввели ошибочные данные: измените числа или оставьте один параметр пустым "
+"для его автоматического расчёта"
+
+#: dialogs/knewloanwizard.cpp:504 dialogs/knewloanwizard.cpp:513
+#: dialogs/knewloanwizard.cpp:522 dialogs/knewloanwizard.cpp:532
+#: dialogs/knewloanwizard.cpp:820
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1070
+msgid "Calculation error"
+msgstr "Ошибка расчёта"
+
+#: dialogs/knewloanwizard.cpp:824
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1074
+msgid ""
+"\n"
+"\n"
+"Accept this or modify the loan information and recalculate."
+msgstr ""
+"\n"
+"\n"
+"Если нужно, вернитесь и измените ведённые вами данные."
+
+#: dialogs/knewloanwizard.cpp:826
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1076
+msgid "Calculation successful"
+msgstr "Расчёт завершён"
+
+#: dialogs/knewloanwizard.cpp:846
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1129
+#, c-format
+msgid ""
+"_n: one month\n"
+"%n months"
+msgstr ""
+"%n месяц\n"
+"%n месяца\n"
+"%n месяцев"
+
+#: dialogs/knewloanwizard.cpp:850
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1133
+#, c-format
+msgid ""
+"_n: one year\n"
+"%n years"
+msgstr ""
+"%n год\n"
+"%n года\n"
+"%n лет"
+
+#: dialogs/knewloanwizard.cpp:854
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1137
+#, c-format
+msgid ""
+"_n: one payment\n"
+"%n payments"
+msgstr ""
+"%n выплата\n"
+"%n выплаты\n"
+"%n выплат"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1190
+msgid "Press Calculate to verify the values"
+msgstr "Нажмите кнопку «Рассчитать» для проверки введённых данных"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1194
+msgid "Not all details supplied"
+msgstr "Указаны не все необходимые данные"
+
+#: dialogs/kaccountselectdlg.cpp:70 dialogs/knewloanwizard.cpp:122
+#: dialogs/knewloanwizard.cpp:136
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1381
+msgid "&Create..."
+msgstr "&Создать..."
+
+#: dialogs/knewloanwizard.cpp:138
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1383
+msgid "Create a new asset account"
+msgstr "Создать активный счёт"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1384
+msgid ""
+"If the asset account does not yet exist, press this button to create it."
+msgstr ""
+"Если активный счёт не существует, нажмите эту кнопку чтобы создать его."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1596
+msgid "Account information"
+msgstr "Сведения о счёте"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1601
+#: wizards/newaccountwizard/rc.cpp:59
+msgid "Subaccount of"
+msgstr "Субсчёт"
+
+#: dialogs/rc.cpp:225 dialogs/rc.cpp:326 dialogs/rc.cpp:371 dialogs/rc.cpp:723
+#: plugins/ofximport/dialogs/rc.cpp:23 reports/listtable.cpp:225
+#: widgets/kmymoneyaccounttreebase.cpp:113 widgets/register.cpp:61
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1606
+msgid "Type"
+msgstr "Тип"
+
+#: dialogs/kcurrencyeditdlg.cpp:62 dialogs/rc.cpp:56 dialogs/rc.cpp:59
+#: dialogs/rc.cpp:75 dialogs/rc.cpp:727 dialogs/rc.cpp:792
+#: kmymoneyutils.cpp:84 kmymoneyutils.cpp:111 mymoney/mymoneyaccount.cpp:741
+#: mymoney/mymoneysecurity.cpp:169 reports/listtable.cpp:233
+#: widgets/kmymoneypriceview.cpp:127
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1607
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1630
+#: wizards/newaccountwizard/rc.cpp:6 wizards/newaccountwizard/rc.cpp:24
+msgid "Currency"
+msgstr "Валюта"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1608
+#: wizards/newaccountwizard/rc.cpp:7 wizards/newuserwizard/rc.cpp:9
+msgid "Opening date"
+msgstr "Дата создания"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1610
+#: wizards/newaccountwizard/rc.cpp:9
+msgid "Conversion rate"
+msgstr "Курс"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1613
+#: wizards/newaccountwizard/rc.cpp:15 wizards/newuserwizard/rc.cpp:13
+msgid "Opening balance"
+msgstr "Остаток на начало"
+
+#: dialogs/keditscheduledlg.cpp:507 dialogs/transactioneditor.cpp:784
+#: dialogs/transactioneditor.cpp:848 plugins/ofximport/dialogs/rc.cpp:22
+#: widgets/rc.cpp:111 widgets/register.cpp:59 widgets/transaction.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1618
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1632
+msgid "Number"
+msgstr "Номер"
+
+#: dialogs/rc.cpp:365 wizards/newaccountwizard/knewaccountwizard.cpp:1621
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1634
+#: wizards/newaccountwizard/rc.cpp:26 wizards/newaccountwizard/rc.cpp:66
+msgid "IBAN"
+msgstr "IBAN"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1627
+msgid "Brokerage Account"
+msgstr "Счёт комиссии"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1640
+msgid "Loan information"
+msgstr "Сведения о кредите"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1643
+msgid "Amount borrowed"
+msgstr "Сумма кредита"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1645
+msgid "Amount lent"
+msgstr "Сумма кредите с процентами"
+
+#: dialogs/rc.cpp:515 dialogs/rc.cpp:546
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1647
+#: wizards/newaccountwizard/rc.cpp:75
+msgid "Interest rate"
+msgstr "Процентная ставка"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1648
+msgid "Interest rate is"
+msgstr "Процентная ставка"
+
+#: dialogs/rc.cpp:509 dialogs/rc.cpp:572
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1649
+msgid "Principal and interest"
+msgstr "Основная сумма долга с процентами"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1650
+#: wizards/newaccountwizard/rc.cpp:90
+msgid "Additional fees"
+msgstr "Дополнительные сборы"
+
+#: dialogs/rc.cpp:525 wizards/newaccountwizard/knewaccountwizard.cpp:1651
+#: wizards/newaccountwizard/rc.cpp:44
+msgid "Payment frequency"
+msgstr "Периодичность выплат"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1652
+#: wizards/newaccountwizard/rc.cpp:105
+msgid "Payment account"
+msgstr "Счёт платежей"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1655
+msgid "Payout information"
+msgstr "Сведения о выплатах"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1658
+msgid "Refinance"
+msgstr "Рефинансирование"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1661
+msgid "Transfer amount to"
+msgstr "Перевести на"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1663
+msgid "Transfer amount from"
+msgstr "Перевести с"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1665
+msgid "Payment date"
+msgstr "Дата выплаты"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1671
+msgid "Schedule information"
+msgstr "Расписание"
+
+#: reports/listtable.cpp:228
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1684
+msgid "Occurence"
+msgstr "Повторение"
+
+#: mymoney/mymoneyscheduled.cpp:891 mymoney/mymoneyscheduled.cpp:947
+#: mymoney/mymoneyscheduled.cpp:1283 mymoney/mymoneyscheduletest.cpp:1343
+#: widgets/rc.cpp:19 widgets/rc.cpp:74
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+msgid "Monthly"
+msgstr "ежемесячно"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1677
+msgid "Paid from"
+msgstr "Со счёта"
+
+#: widgets/kmymoneycombo.cpp:473 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1678
+msgid "Pay to"
+msgstr "Получатель"
+
+#: dialogs/investactivities.cpp:197 dialogs/investactivities.cpp:285
+#: dialogs/investactivities.cpp:365 dialogs/kfindtransactiondlg.cpp:197
+#: dialogs/kmymoneysplittable.cpp:80 dialogs/rc.cpp:51 dialogs/rc.cpp:212
+#: reports/listtable.cpp:197 views/khomeview.cpp:421 views/khomeview.cpp:494
+#: views/khomeview.cpp:528 views/kscheduledview.cpp:73 views/rc.cpp:63
+#: widgets/register.cpp:58 widgets/transaction.cpp:1055
+#: widgets/transaction.cpp:1578 widgets/transaction.cpp:1610
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1679
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1685
+msgid "Amount"
+msgstr "Сумма"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1680
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1686
+msgid "First payment due"
+msgstr "Первый платёж"
+
+#: dialogs/rc.cpp:102 wizards/newaccountwizard/knewaccountwizard.cpp:1681
+#: wizards/newaccountwizard/rc.cpp:115
+msgid "Payment method"
+msgstr "Тип выплаты"
+
+#: wizards/newaccountwizard/rc.cpp:1
+msgid ""
+"This page summarizes the data you have entered. Press <b>Finish</b> to "
+"create the account, schedules, etc. or use <b>Back</b> to modify your "
+"entries."
+msgstr ""
+"Здесь представлены данные, которые вы ввели. Нажмите кнопку <b>Готово</b>, "
+"чтобы создать счёт или кнопку <b>Назад</b> для возврата на предыдущие шаги "
+"для исправления значений."
+
+#: wizards/newaccountwizard/rc.cpp:2
+msgid "Item"
+msgstr "Параметр"
+
+#: dialogs/rc.cpp:110 dialogs/rc.cpp:165 dialogs/rc.cpp:252 dialogs/rc.cpp:757
+#: dialogs/rc.cpp:818 views/kinvestmentview.cpp:74 widgets/register.cpp:574
+#: wizards/newaccountwizard/rc.cpp:3
+msgid "Value"
+msgstr "Значение"
+
+#: wizards/newaccountwizard/rc.cpp:4
+msgid ""
+"Enter the name of the account under which it is known within KMyMoney.\n"
+"Select the type for the new account. Use the <b>What's this?</b> feature to "
+"see more details about the various account types.\n"
+"Enter the date the account was opened and its currency."
+msgstr ""
+"Введите название счёта, которое будет использовано в KMyMoney.\n"
+"Выберите тип счёта. Вы можете использовать подсказку <b>Что это?</b> на типе "
+"счёта, чтобы узнать что означает каждый тип.\n"
+"Также проверьте дату создания счёта и валюту учёта на нём."
+
+#: wizards/newaccountwizard/rc.cpp:5
+msgid "Select the currency in which this account is denominated."
+msgstr "Выберите валюту, в которой будут учитываться средства на этом счету"
+
+#: wizards/newaccountwizard/rc.cpp:8
+msgid ""
+"The opening balance is the balance of the account when you start using it "
+"with KMyMoney. For new accounts this is usually 0 but for existing accounts "
+"this may well differ. Please consult the account statements to figure out "
+"this value. The opening balance is to be provided in the currency of the "
+"account as selected with the currency button."
+msgstr ""
+"Остаток на начало означает остаток на счету в момент, когда вы начали "
+"учитывать его в программе. Для новых счетов это, как правило, 0. Для "
+"существующих счетов остаток может быть другим. Проверьте выписку по счёту "
+"для того, чтобы узнать остаток. Остаток должен быть указан в валюте счёта."
+
+#: wizards/newaccountwizard/rc.cpp:10
+msgid ""
+"The opening date would be the date of the last statement. In case you want "
+"to keep track of transactions prior to this date, enter the ending balance "
+"and statement date of a prior statement and add all following transactions "
+"into KMyMoney.\n"
+"<br>\n"
+"<i>Note</i>: If you do not know the exact amount of the opening balance, "
+"enter an estimate. You can change this value later before you reconcile this "
+"account for the first time."
+msgstr ""
+"В качестве даты создания укажите дату последней операции на этом счету. Если "
+"вы хотите следить за операциями до этого дня, введите конечный баланс "
+"предыдущей выписки и добавьте все последующие операции.\n"
+"<br>\n"
+"<i>Примечание</i>: если вы будете вести всю историю этого счёта с самого "
+"начала, введите 0. Если вы не знаете точной суммы первоначального баланса, "
+"введите оценочную. Вы можете изменить эту сумму позднее, перед сверкой счёта."
+
+#: dialogs/rc.cpp:52 dialogs/rc.cpp:54 dialogs/rc.cpp:57 dialogs/rc.cpp:60
+#: dialogs/rc.cpp:748 dialogs/rc.cpp:749 dialogs/rc.cpp:768 widgets/rc.cpp:6
+#: widgets/rc.cpp:7 widgets/rc.cpp:8 widgets/rc.cpp:9 widgets/rc.cpp:10
+#: widgets/rc.cpp:11 widgets/rc.cpp:12 widgets/rc.cpp:13 widgets/rc.cpp:14
+#: widgets/rc.cpp:15 widgets/rc.cpp:16 widgets/rc.cpp:17
+#: wizards/newaccountwizard/rc.cpp:11 wizards/newaccountwizard/rc.cpp:88
+#: wizards/newaccountwizard/rc.cpp:91 wizards/newaccountwizard/rc.cpp:93
+#: wizards/newuserwizard/rc.cpp:14
+msgid "xxx"
+msgstr "xxx"
+
+#: wizards/newaccountwizard/rc.cpp:12
+msgid "Account type"
+msgstr "Тип счёта"
+
+#: wizards/newaccountwizard/rc.cpp:13
+msgid ""
+"For foreign currencies an initial conversion rate needs to be provided. This "
+"should be the price of the foreign currency in the base currency on the "
+"opening date of the account."
+msgstr ""
+"Для иностранных валют необходимо указать курс на дату создания счёта. Курсом "
+"является цена иностранной денежной единицы в базовой валюте на дату создания "
+"счёта."
+
+#: wizards/newaccountwizard/rc.cpp:14
+msgid "Account name"
+msgstr "Название счёта"
+
+#: wizards/newaccountwizard/rc.cpp:16
+msgid ""
+"<p><b>Checking</b>\n"
+"Use the checking account type to manage activities on your checking account "
+"e.g. payments, checks and cash card purchases.</p>\n"
+"\n"
+"<p><b>Savings</b>\n"
+"Use the savings account type to manage activities on your savings account.</"
+"p>\n"
+"\n"
+"<p><b>Credit Card</b>\n"
+"Use the credit card account type to manage activities on your credit card.</"
+"p>\n"
+"\n"
+"<p><b>Cash</b>\n"
+"\n"
+"Use the cash account type to manage activities in your wallet.</p>\n"
+"\n"
+"<p><b>Loan</b>\n"
+"Use the loan account type to manage amortization loans (e.g. mortgages, car "
+"loan, money you lend, private loans etc.).</p>\n"
+"\n"
+"<p><b>Investment</b>\n"
+"Use the investment account to manage your stock, mutual fund and other "
+"investments.</p>\n"
+"\n"
+"<p><b>Asset</b>\n"
+"Use the asset account type to manage assets (e.g. your house, car or art "
+"collection).</p>\n"
+"\n"
+"<p><b>Liability</b>\n"
+"Use the liability account type to manage any type of liability except "
+"amortization loans. Use it for taxes you owe or money you borrowed from "
+"friends. For amortization loans like mortgages you should create a loan "
+"account.</p>"
+msgstr ""
+"<p><b>Пластиковая карта</b>\n"
+"Тип «Пластиковая карта» предназначен для учёта средств на чековой книжке или "
+"пластиковой карте.</p>\n"
+"\n"
+"<p><b>Банковский вклад</b>\n"
+"Тип «Банковский вклад» предназначен для учёта сбережений на банковских "
+"депозитах.</p>\n"
+"\n"
+"<p><b>Кредитная карта</b>\n"
+"Тип «Кредитная карта» предназначен для учёта средств на вашей кредитной карте."
+"</p>\n"
+"\n"
+"<p><b>Наличные</b>\n"
+"\n"
+"Тип «Наличные» предназначен для учёта наличных средств.</p>\n"
+"\n"
+"<p><b>Кредит</b>\n"
+"Тип «Кредит» предназначен для учёта средств в виде займов под проценты "
+"(например, кредит на покупку автомобиля, недвижимости и т.п.).</p>\n"
+"\n"
+"<p><b>Инвестиции</b>\n"
+"Тип «Инвестиции» предназначен для учёта средств в виде акций, паёв и прочих "
+"инвестиционных вложений.</p>\n"
+"\n"
+"<p><b>Активы</b>\n"
+"Тип «Активы» предназначен для учёта вашего имущества: дома, автомобиля или "
+"коллекции картин.</p>\n"
+"\n"
+"<p><b>Пассивы</b>\n"
+"Тип «Пассивы» предназначен для учёта ваших обязательств (кроме кредитов). "
+"Например, налоги или взятие в долг.</p>"
+
+#: wizards/newaccountwizard/rc.cpp:17
+msgid "Preferred account"
+msgstr "Предпочтительный счёт"
+
+#: wizards/newaccountwizard/rc.cpp:18
+msgid ""
+"Mark this checkbox if the account should be maintained as preferred account"
+msgstr "Включите параметр чтобы занести счёт в список предпочтительных"
+
+#: wizards/newaccountwizard/rc.cpp:19
+msgid ""
+"Selecting the <b>Preferred Account</b> checkbox will allow preferred access "
+"in some dialogs and views of KMyMoney."
+msgstr ""
+"Включение параметра <b>Предпочтительный счёт</b> позволяет быстрее выбирать "
+"этот счёт в некоторых диалогах."
+
+#: wizards/newaccountwizard/rc.cpp:20
+msgid "Enter a name under which this account is known within KMyMoney."
+msgstr "Введите название счёта, которое будет использовано в KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:21
+msgid "Online quote"
+msgstr "Источники курсов"
+
+#: wizards/newaccountwizard/rc.cpp:22
+msgid ""
+"Does this investment account have a brokerage account?<p>\n"
+"\n"
+"<b>Check</b> the mark if this investment account has an associated account "
+"for money that is not invested.<br>\n"
+"\n"
+"<b>Uncheck</b> it if you don't use this account for active stock brokerage. "
+"You should also uncheck it if this account is not maintained by a bank or "
+"broker."
+msgstr ""
+"<b>Включите<b> флажок, если инвестиционный счёт должен иметь связанный счёт "
+"для учёта комиссионных.<br>\n"
+"\n"
+"<b>Выключите</b> флажок, если по инвестиционному счёту не совершается "
+"активных операций, требующих отчисления комиссионных брокеру. Также "
+"выключите, если инвестиционный счёт не находится в управлении банка или "
+"брокера."
+
+#: wizards/newaccountwizard/rc.cpp:23
+msgid "Create brokerage account"
+msgstr "Счёт комиссии"
+
+#: wizards/newaccountwizard/rc.cpp:25 wizards/newaccountwizard/rc.cpp:64
+msgid "Account number"
+msgstr "Номер счёта"
+
+#: wizards/newaccountwizard/rc.cpp:27
+msgid ""
+"Please select the required options. Please use the <b>What's this?</b> "
+"feature to see more information about the items."
+msgstr ""
+"Выберите правильный вариант. Используйте подсказку <b>Что это?</b> для "
+"просмотра информации о вариантах."
+
+#: wizards/newaccountwizard/rc.cpp:28
+msgid "What is the type of the loan?"
+msgstr "Какой тип займа используется?"
+
+#: dialogs/rc.cpp:481 wizards/newaccountwizard/rc.cpp:29
+msgid "I am borrowing money"
+msgstr "Я беру кредит"
+
+#: dialogs/rc.cpp:482 wizards/newaccountwizard/rc.cpp:30
+msgid "I am lending money"
+msgstr "Я даю в долг"
+
+#: wizards/newaccountwizard/rc.cpp:31
+msgid "Who is the payee/payer of the loan?"
+msgstr "Кто является кредитором или плательщиком по займу?"
+
+#: wizards/newaccountwizard/rc.cpp:32
+msgid ""
+"Enter the name of the person or bank you owe money or who owes you money.\n"
+"\n"
+"If the name does not exist within KMyMoney's database, you are asked if you "
+"want to create it."
+msgstr ""
+"Введите имя человека или название банка, которому вы должны или кто вам "
+"должен деньги.\n"
+"\n"
+"Если указанного имени нет а базе данных KMyMoney, вам будет предложено "
+"создать новую запись."
+
+#: wizards/newaccountwizard/rc.cpp:33
+msgid "Did you make/receive any payments yet?"
+msgstr "Вы уже производили выплаты?"
+
+#: wizards/newaccountwizard/rc.cpp:36
+msgid ""
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?\n"
+"\n"
+"Note: Payments made to obtain the loan (e.g. Disagio) are not considered as "
+"payments in this context."
+msgstr ""
+"Вы уже вводили информацию о выплатах по этому кредиту в KMyMoney?\n"
+"\n"
+"Примечание: комиссия банка за выдачу кредита не рассматривается как выплаты."
+
+#: wizards/newaccountwizard/rc.cpp:37
+msgid "Which payments do you want to record?"
+msgstr "Какие выплаты вы хотите ввести?"
+
+#: wizards/newaccountwizard/rc.cpp:38
+msgid "All payments"
+msgstr "Все платежи"
+
+#: wizards/newaccountwizard/rc.cpp:39
+msgid "Start with this year's payments"
+msgstr "Платежи с начала года"
+
+#: wizards/newaccountwizard/rc.cpp:40
+msgid ""
+"<qt>Select which transactions should be recorded.\n"
+"\n"
+"<b>All payments</b> allows you to enter all payments made for this loan.\n"
+"\n"
+"The option to <b>start from the beginning of the current year</b> is meant "
+"for loans that are active for a longer period of time already and you don't "
+"want to enter all transactions of the past.\n"
+"</qt>"
+msgstr ""
+"<qt>Выберите какие платежи по кредиту вы будете вводить.\n"
+"\n"
+"Пункт <b>Все платежи</b> позволит ввести все платежи по кредиту.\n"
+"\n"
+"Пункт <b>Платежи с начала года</b> позволит ввести только платежи с начала "
+"года, если кредит вами взят давно и вы не хотите вводить все платежи по "
+"этому кредиту, сделанные в прошлом.\n"
+"</qt>"
+
+#: wizards/newaccountwizard/rc.cpp:41
+msgid "Balance before start of recording"
+msgstr "Остаток перед началом учёта"
+
+#: wizards/newaccountwizard/rc.cpp:42
+msgid ""
+"Enter the ending balance found on the statement that is the last one before "
+"you want to start recording this loan in KMyMoney."
+msgstr ""
+"Введите остаток на счёте перед началом учёта операций по этому кредиту в "
+"KMyMoney."
+
+#: wizards/newaccountwizard/rc.cpp:43
+msgid ""
+"You have selected to record only payments from the beginning of this year. "
+"Since prior transactions will not be recorded, you need to supply the "
+"balance of the loan on January 1st of this year."
+msgstr ""
+"Вы выбрали ввод выплат только с начала этого года. Так как предыдущие "
+"выплаты не будут вводиться, вам необходимо указать остаток по кредитному "
+"счёту на 1 января этого года."
+
+#: wizards/newaccountwizard/rc.cpp:45
+msgid "Interest Compounding frequency"
+msgstr "Частота начисления процентов"
+
+#: wizards/newaccountwizard/rc.cpp:46
+msgid ""
+"Select the frequency with which the interest is compounded. If uncertain, "
+"select the same as the payment frequency. Consult your loan contract for "
+"details."
+msgstr ""
+"Укажите частоту начисления процентов. Если не уверены, укажите частоту "
+"платежей. Обратитесь к кредитному инспектору за этой информацией."
+
+#: wizards/newaccountwizard/rc.cpp:47
+msgid "Due date of first payment to be recorded"
+msgstr "Дата первой выплаты"
+
+#: wizards/newaccountwizard/rc.cpp:48
+msgid ""
+"Depending on the answer to <b>What do you want to record?</b> this field "
+"means the following:<p>\n"
+"\n"
+"<b>All payments</b><br>\n"
+"Enter the due date of the very first payment<p>\n"
+"\n"
+"<b>Start with this year's payments</b><br>\n"
+"Enter the due date of the first payment in the current year"
+msgstr ""
+"Значение этого поля зависит от выбранного типа.\n"
+"\n"
+"<b>Все платежи</b><br>\n"
+"Дата самого первого платежа.\n"
+"\n"
+"<b>Платежи с начала года</b><br>\n"
+"Дата первого платежа в этом году.\n"
+"</qt>"
+
+#: wizards/newaccountwizard/rc.cpp:49
+msgid "Type of interest rate"
+msgstr "Тип ставки"
+
+#: wizards/newaccountwizard/rc.cpp:50
+msgid "Fixed"
+msgstr "Фиксированная"
+
+#: wizards/newaccountwizard/rc.cpp:51
+msgid "Variable"
+msgstr "Плавающая"
+
+#: wizards/newaccountwizard/rc.cpp:52
+msgid "Time between interest changes"
+msgstr "Период пересмотра процентной ставки"
+
+#: dialogs/knewloanwizard.cpp:613 wizards/newaccountwizard/rc.cpp:53
+msgid "Days"
+msgstr "В днях"
+
+#: dialogs/knewloanwizard.cpp:614 wizards/newaccountwizard/rc.cpp:54
+msgid "Weeks"
+msgstr "В неделях"
+
+#: wizards/newaccountwizard/rc.cpp:57
+msgid "Next interest change is due"
+msgstr "Следующее изменение процентной ставки"
+
+#: wizards/newaccountwizard/rc.cpp:58
+msgid "This page allows you to select the parent account."
+msgstr "Выберите вышестоящий счёт."
+
+#: wizards/newaccountwizard/rc.cpp:60
+msgid ""
+"If this account is managed by an institution please select the institution "
+"from the list. If the institution does not exist yet, please choose the "
+"<b>New Institution</b> button to create it. Otherwise, leave this field "
+"empty.\n"
+"Enter the account number used by the institution to identify the account."
+msgstr ""
+"Если этот счёт управляется учреждением, выберите учреждение из списка. Если "
+"нужного учреждения нет в списке, нажмите на кнопку <b>Добавить учреждение</"
+"b> для добавления записи. В противном случае оставьте этот параметр пустым.\n"
+"В случае указания учреждения, введите номер счёта, используемый в этом "
+"учреждении."
+
+#: wizards/newaccountwizard/rc.cpp:62
+msgid "Select the institution which manages this account or leave empty"
+msgstr ""
+"Выберите учреждение, которое управляет счётом, или оставьте параметр пустым."
+
+#: wizards/newaccountwizard/rc.cpp:63
+msgid "New Institution"
+msgstr "Добавить учреждение"
+
+#: wizards/newaccountwizard/rc.cpp:65
+msgid ""
+"Accounts managed by an institution are usually referenced by a unique number "
+"the so called account number. Enter that number here.\n"
+"\n"
+"KMyMoney currently uses this number only for some online banking functions."
+msgstr ""
+"Если учреждение управляет счётом, то обычно оно присваивает ему уникальный "
+"номер, так называемый номер счёта. Введите здесь номер счёта в учреждении.\n"
+"\n"
+"Этот номер счёта будет использован только в некоторых операциях в режиме "
+"банк-клиент."
+
+#: wizards/newaccountwizard/rc.cpp:67
+msgid "Enter the International Bank Account Number into this field"
+msgstr "Введите здесь международный номер банковского счёта (IBAN)"
+
+#: wizards/newaccountwizard/rc.cpp:68
+msgid ""
+"You can enter the IBAN (International Bank Account Number) into this field "
+"if you know it. Usually, people at your institution can tell you the number "
+"or it is printed on your statements.\n"
+"\n"
+"See also http://en.wikipedia.org/wiki/International_Bank_Account_Number for "
+"more information.\n"
+"\n"
+"KMyMoney keeps this field only for documentation purposes and does not use "
+"it otherwise."
+msgstr ""
+"Вы можете указать международный номер банковского счёта (IBAN) в этом поле "
+"если знаете его. Этот номер можно обычно найти в выписках или спросить в "
+"финансовом учреждении.\n"
+"\n"
+"Подробную информацию по этой теме вы можете найти на http://ru.wikipedia.org/"
+"wiki/IBAN.\n"
+"\n"
+"Этот номер будет сохранён только для сведений и не будет использоваться ни в "
+"каких операциях."
+
+#: wizards/newaccountwizard/rc.cpp:69
+msgid ""
+"Now enter the details for your loan. You can leave one of the fields empty "
+"and KMyMoney will calculate it when you press the <b>Calculate</b> button. "
+"Before you can continue with the next page you also need to press "
+"<b>Calculate</b> so that KMyMoney can check the logical correctness of the "
+"values you have supplied."
+msgstr ""
+"Теперь укажите условия кредита. Вы можете не заполнять одно из полей и его "
+"значение будет вычислено при нажатии на кнопку <b>Рассчитать</b>. Перед тем, "
+"как перейти на следующий шаг, нажмите кнопку <b>Рассчитать</b> для проверки "
+"правильности введённых данных."
+
+#: wizards/newaccountwizard/rc.cpp:70
+msgid "The interest rate gets calculated"
+msgstr "Проценты подсчитываются"
+
+#: wizards/newaccountwizard/rc.cpp:71
+msgid "when the payment is received"
+msgstr "По получении выплаты"
+
+#: wizards/newaccountwizard/rc.cpp:72
+msgid "when the payment is due"
+msgstr "По дате выплаты"
+
+#: dialogs/rc.cpp:531 dialogs/rc.cpp:533 wizards/newaccountwizard/rc.cpp:73
+msgid "Loan amount"
+msgstr "Сумма кредита"
+
+#: wizards/newaccountwizard/rc.cpp:74
+msgid ""
+"Enter the amount of the loan in this field. If you want to calculate this "
+"field out of the other parameters, please leave it empty. If the field is "
+"marked as required (colored background) you have informed KMyMoney about the "
+"fact that there were already some payments towards the loan. In this case, "
+"please enter the ending balance of your last statement."
+msgstr ""
+"Введите в это поле сумму кредита. Если вы хотите вычислить значение этого "
+"поля на основании других параметров, оставьте его пустым. Если это поле "
+"отмечено как обязательное (фон поля выделен цветом), по этому кредиту уже "
+"осуществлялись выплаты. В этом случае введите в это поле остаток по вашей "
+"последней выписке."
+
+#: wizards/newaccountwizard/rc.cpp:76
+msgid ""
+"Please enter the interest rate in percent or leave the field empty to "
+"calculate it."
+msgstr ""
+"Введите процентную ставку или оставьте это поле пустым для автоматического "
+"расчёта."
+
+#: dialogs/rc.cpp:559 wizards/newaccountwizard/rc.cpp:77
+msgid "Term"
+msgstr "Срок"
+
+#: wizards/newaccountwizard/rc.cpp:78
+msgid ""
+"Please enter the term of this loan or enter 0 to calculate it. The term is "
+"the time that is required to fully repay the loan. This time might be "
+"different from the time your loan contract is signed for."
+msgstr ""
+"Введите срок кредита или введите 0 для его расчёта. Срок — это период, в "
+"течение которого нужно полностью погасить кредит. Он может не совпадать с "
+"периодом, указанным в кредитном договоре."
+
+#: wizards/newaccountwizard/rc.cpp:79
+msgid "Payment (principal and interest)"
+msgstr "Основная сумма долга с процентами"
+
+#: wizards/newaccountwizard/rc.cpp:80
+msgid ""
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"Введите основную сумму долга с процентами или оставьте это поле пустым для "
+"автоматического расчёта."
+
+#: wizards/newaccountwizard/rc.cpp:81
+msgid "Balloon payment"
+msgstr "Последняя выплата"
+
+#: wizards/newaccountwizard/rc.cpp:82
+msgid ""
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"Введите сумму последней выплаты или оставьте это поле пустым для "
+"автоматического расчёта."
+
+#: wizards/newaccountwizard/rc.cpp:83
+msgid "Calculate"
+msgstr "Рассчитать"
+
+#: wizards/newaccountwizard/rc.cpp:84
+msgid "Press this button to calculate/verify your loan details."
+msgstr ""
+"Нажмите на эту кнопку, чтобы проверить введённые данные или заполнить "
+"недостающее значение."
+
+#: wizards/newaccountwizard/rc.cpp:85
+msgid ""
+"Pressing this button calculates a possibly missing parameter for your loan "
+"or verifies that the values entered match. If something is not correct you "
+"will receive information about it."
+msgstr ""
+"При нажатии на эту кнопку будут проверены введённые данные, а в случае "
+"отсутствия значение в каком-либо поле — оно будет заполнено. Если что-то "
+"введено неправильно, вы будете уведомлены об этом."
+
+#: wizards/newaccountwizard/rc.cpp:86
+msgid ""
+"Now enter the information required for the periodic loan payments. If your "
+"regular payments contains any additional fees, click on the <b>Additional "
+"fees</b> button to enter them."
+msgstr ""
+"Теперь введите данные о регулярных платежах. Если эти платежи "
+"предусматривают также дополнительные сборы, нажмите на кнопу "
+"<b>Дополнительные сборы</b> и введите их сумму."
+
+#: wizards/newaccountwizard/rc.cpp:87
+msgid "Principal + Interest"
+msgstr "Платежи"
+
+#: dialogs/rc.cpp:620 wizards/newaccountwizard/rc.cpp:89
+msgid "+"
+msgstr "+"
+
+#: wizards/newaccountwizard/rc.cpp:92
+msgid "= periodical payments"
+msgstr "= периодические платежи"
+
+#: dialogs/rc.cpp:643 wizards/newaccountwizard/rc.cpp:94
+msgid ""
+"If this loan is for an asset, such as a car or a house, you can create the "
+"asset account now. An asset account represents the total value of an asset. "
+"The money from this loan will be transfered into the asset account you "
+"create or select.\n"
+"If this loan is a 'consumer loan' (money to use however you want), you can "
+"use a checking account instead."
+msgstr ""
+"Если кредит предназначен для приобретения актива (например, автомобиля или "
+"недвижимости), вы можете создать счёт для учёта этого актива прямо сейчас. "
+"Средства кредита будут зачислены на этот счёт.\n"
+"Если кредит является потребительским (средства на любые цели), вы можете "
+"использовать любой счёт для учёта полученных денежных средств."
+
+#: dialogs/rc.cpp:644 wizards/newaccountwizard/rc.cpp:95
+msgid "Don't create payout transaction"
+msgstr "Не зачислять сумму кредита на счёт"
+
+#: wizards/newaccountwizard/rc.cpp:96
+msgid "Refinance existing loan"
+msgstr "Рефинансирование кредита"
+
+#: wizards/newaccountwizard/rc.cpp:97
+msgid ""
+"Check this if you are refinancing a loan that already exists in KMyMoney"
+msgstr ""
+"Установите флажок если новый кредит является рефинансированием кредита, уже "
+"заведённого в KMyMoney"
+
+#: dialogs/rc.cpp:642 wizards/newaccountwizard/rc.cpp:98
+msgid "Asset Account"
+msgstr "Активный счёт"
+
+#: dialogs/rc.cpp:2 wizards/newaccountwizard/rc.cpp:99
+msgid "Create"
+msgstr "Создать"
+
+#: wizards/newaccountwizard/rc.cpp:100
+msgid "Loan account"
+msgstr "Кредитный счёт"
+
+#: dialogs/rc.cpp:646 wizards/newaccountwizard/rc.cpp:101
+msgid "Date of payment"
+msgstr "Дата зачисления"
+
+#: wizards/newaccountwizard/rc.cpp:102
+msgid ""
+"KMyMoney creates a schedule for this payment and reminds you whenever a "
+"payment must be made. Please select the account to/from which payments will "
+"be made and the category the interest will be assigned to.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"Сейчас будет создан график платежей для уведомления вас о наступлении срока "
+"платежа по кредиту.<p>\n"
+"Если вы выбрали ввод всех платежей, это поле должно быть заполнено. Если вы "
+"выбрали ввод платежей только этого года, укажите в поле <b>Первый платёж</b> "
+"дату первого платежа в этом году."
+
+#: dialogs/rc.cpp:613 wizards/newaccountwizard/rc.cpp:103
+msgid "Interest category"
+msgstr "Статья процентов"
+
+#: wizards/newaccountwizard/rc.cpp:104
+msgid ""
+"The category the interest part of the payment will be assigned to. If you "
+"borrow money you usually have to pay interest, so this should be an expense "
+"category. If you lend the money, you receive the interest. In this case, "
+"select an income category here."
+msgstr ""
+"Укажите статью, которая будет использоваться для учёта процентов, "
+"выплачиваемых по кредиту. Обычно, когда вы занимаете деньги, вы платите "
+"проценты за их использование и выплачиваемые деньги должны учитываться как "
+"статья расходов. Если вы одолжили деньги, то проценты должны учитываться как "
+"статья доходов."
+
+#: wizards/newaccountwizard/rc.cpp:106
+msgid ""
+"Select the account from which you make your periodical payments or where you "
+"receive regular payments in case you lend the money. In most cases, this is "
+"a checking account."
+msgstr ""
+"Выберите счёт, с которого будут осуществляться периодические платежи или на "
+"который вы будете получать проценты за ссуженные вами деньги."
+
+#: dialogs/rc.cpp:519 wizards/newaccountwizard/rc.cpp:107
+msgid "First payment due on"
+msgstr "Первый платёж"
+
+#: wizards/newaccountwizard/rc.cpp:108
+msgid ""
+"For credit card accounts you can create a monthly schedule which will "
+"automatically remind you about the payment. Please fill in the details about "
+"this payment here."
+msgstr ""
+"Для счета кредитной карты вы можете создать график платежей, который "
+"напомнит вам о платеже. "
+
+#: wizards/newaccountwizard/rc.cpp:109
+msgid "Yes, remind me when the payment is due"
+msgstr "Да. И напоминать мне о приближении срока платежа"
+
+#: wizards/newaccountwizard/rc.cpp:110
+msgid "Name of schedule"
+msgstr "Название графика"
+
+#: dialogs/rc.cpp:151 dialogs/rc.cpp:218 dialogs/rc.cpp:219
+#: reports/listtable.cpp:199 views/kscheduledview.cpp:72 widgets/rc.cpp:113
+#: widgets/register.cpp:57 wizards/newaccountwizard/rc.cpp:111
+msgid "Payee"
+msgstr "Получатель"
+
+#: wizards/newaccountwizard/rc.cpp:112
+msgid "Estimated monthly payment"
+msgstr "Ожидаемая величина выплат в месяц"
+
+#: wizards/newaccountwizard/rc.cpp:113
+msgid "Due date of next payment"
+msgstr "Дата следующей выплаты"
+
+#: wizards/newaccountwizard/rc.cpp:114
+msgid ""
+"Payment should be made\n"
+"from account"
+msgstr ""
+"Выплата должна быть\n"
+"списана со счёта"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:79
+msgid "KMyMoney New File Setup"
+msgstr "Новый файл KMyMoney"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:81
+msgid "Introduction"
+msgstr "Введение"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:82
+msgid "Personal Data"
+msgstr "Данные владельца"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:83
+msgid "Select Currency"
+msgstr "Выбор валюты"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:84
+msgid "Select Accounts"
+msgstr "Выбор плана счетов"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:85
+msgid "Set preferences"
+msgstr "Предпочтения"
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid ""
+"Unable to load data, because no contact has been associated with the owner "
+"of the standard addressbook."
+msgstr ""
+"Невозможно загрузить данные, поскольку в адресной книге ни один контакт не "
+"назначен как владелец."
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid "Addressbook import"
+msgstr "Импорт адресной книги"
+
+#: wizards/newuserwizard/rc.cpp:1
+msgid ""
+"A typical KMyMoney user maintains a checking a account with some institution "
+"and uses it to receive money or pay bills. If this is not the case, please "
+"deselect the checkbox below and continue on the next page."
+msgstr ""
+"Вы можете сразу указать данные вашего расчётного счёта, на который получаете "
+"деньги и с которого делаете платежи. Если не хотите у вас нет такого счёта "
+"или не хотите указывать данные счёта сейчас, снимите флажок «Указать данные "
+"расчётного счёта»."
+
+#: wizards/newuserwizard/rc.cpp:2
+msgid "I have a checking account that I want to manage with KMyMoney"
+msgstr "Указать данные расчётного счёта"
+
+#: wizards/newuserwizard/rc.cpp:3
+msgid "The name of the instititution that issued the account."
+msgstr "Название учреждения, в котором находится этот счёт"
+
+#: wizards/newuserwizard/rc.cpp:4
+msgid ""
+"Each institution has a routing number. Enter it here. If uncertain, leave "
+"the field blank. You can modify it later."
+msgstr ""
+"Каждое финансовое учреждение в США имеет 9-значный банковский код (RTN, "
+"ABA). Введите его в это поле. Если этот код вам неизвестен, не заполняйте "
+"это поле."
+
+#: wizards/newuserwizard/rc.cpp:5
+msgid "Name of the institution"
+msgstr "Название учреждения"
+
+#: wizards/newuserwizard/rc.cpp:6
+msgid "Routing number"
+msgstr "Код RTN"
+
+#: wizards/newuserwizard/rc.cpp:7
+msgid ""
+"In general the institution that issued the account also issued a number for "
+"it. Enter it here. If uncertain, you can modify this entry later."
+msgstr ""
+"Обычно при открытии счёта в финансовом учреждении ему присваивается номер. "
+"Введите его в это поле. Если номер счёта вам неизвестен, не заполняйте это "
+"поле, вы можете изменить его позднее."
+
+#: wizards/newuserwizard/rc.cpp:8
+msgid ""
+"Enter a descriptive name that will be used by KMyMoney to identify your "
+"checking account."
+msgstr ""
+"Введите название, под которым расчётный счёт будет учитываться в KMyMoney."
+
+#: wizards/newuserwizard/rc.cpp:10
+msgid ""
+"Enter the date from when on you plan to keep track of the transactions in "
+"that account. This is usually the date of the last statement. If uncertain, "
+"leave as is."
+msgstr ""
+"Введите дату, с которой вы планируете учитывать операции на этом счёте. "
+"Обычно это дата последней выписки. Если не знаете, оставьте это поле пустым."
+
+#: wizards/newuserwizard/rc.cpp:11
+msgid "Number of the account"
+msgstr "Номер счёта"
+
+#: wizards/newuserwizard/rc.cpp:12
+msgid "Name of the account"
+msgstr "Название счёта"
+
+#: wizards/newuserwizard/rc.cpp:15
+msgid ""
+"Enter the opening balance of the account. This is usually the ending balance "
+"of the last statement. If uncertain, leave as is."
+msgstr ""
+"Введите начальный баланс счёта. Обычно это конечный баланс из последней "
+"выписки по нему. Если не знаете, оставьте это поле пустым."
+
+#: wizards/newuserwizard/rc.cpp:16
+msgid ""
+"The fields below allow you to enter some information about your checking "
+"account. Once this wizard finishes, the account will be created for you "
+"within KMyMoney."
+msgstr ""
+"В этих полях указывается информация о расчётном счёте. Мастер создаст новый "
+"счёт в KMyMoney."
+
+#: wizards/newuserwizard/rc.cpp:17
+msgid ""
+"KMyMoney supports multiple currencies. Your reports will be based on a "
+"default curreny which you can select here. The default for new accounts is "
+"also the currency you select here."
+msgstr ""
+"В программе поддерживаются учёт в нескольких валютах. Отчёты по умолчанию "
+"выводят данные в одной валюте, называемой базовой. Также базовая валюта "
+"используется по умолчанию для создаваемых счетов. Эту валюту вам нужно "
+"выбрать из списка."
+
+#: wizards/newuserwizard/rc.cpp:18
+msgid ""
+"KMyMoney will store your financial data in a file on the disk. A standard "
+"filename within your KDE user environment will be the default. This is just "
+"provided for convenience and you can choose any other location here."
+msgstr ""
+"Ваши финансовые данные будут сохранены в файл на диске. Имя этого файла "
+"будет создано на базе имени пользователя, однако вы можете указать и другое "
+"имя и расположение файла на диске."
+
+#: wizards/newuserwizard/rc.cpp:19
+msgid ""
+"Either the currently selected file exists or the selected directory does not "
+"exist. Please make sure, that\n"
+"\n"
+"<ul>\n"
+"<li>the selected directory exists and</li>\n"
+"<li>the filename is not currently used in this directory.</li>\n"
+"</ul>"
+msgstr ""
+"Выбранный файл существует или папка расположения файла не существует. "
+"Проверьте:\n"
+"\n"
+"<ul>\n"
+"<li>папка размещения файла существует;</li>\n"
+"<li>файла с указанным именем нет в этой папке.</li>\n"
+"</ul>"
+
+#: wizards/newuserwizard/rc.cpp:20
+msgid ""
+"This finishes the setup of your KMyMoney environment. You can now press the "
+"Finish button and start using KMyMoney to record your financial transactions."
+msgstr ""
+"Все необходимые параметры KMyMoney были указаны. Нажмите на кнопку "
+"«Завершить» для начала ввода операций."
+
+#: wizards/newuserwizard/rc.cpp:21
+msgid ""
+"Please enter some information about yourself.<br><br>\n"
+"\n"
+"This information will be seen and used only by you. The information is used "
+"to personalize KMyMoney, to encrypt your file, etc."
+msgstr ""
+"Введите здесь информацию о себе.<br><br>\n"
+"\n"
+"Все поля необязательны и предназначены для персонализации этого файла "
+"KMyMoney."
+
+#: wizards/newuserwizard/rc.cpp:28
+msgid "Zip code"
+msgstr "Почтовый индекс"
+
+#: wizards/newuserwizard/rc.cpp:30
+msgid "Welcome to KMyMoney!"
+msgstr "Добро пожаловать в KMyMoney!"
+
+#: wizards/newuserwizard/rc.cpp:31
+msgid ""
+"You have started KMyMoney for the first time on this computer. Before this "
+"program can help you to manage your finances, it needs to collect some data "
+"from you.<p>\n"
+"\n"
+"On the next few pages you will be guided through the steps necessary to "
+"setup the program. This will happen only once."
+msgstr ""
+"На это компьютере вы запускаете KMyMoney первый раз. Перед тем как оно "
+"поможет вам учитывать ваши финансы, необходимо указать некоторые данные.<p>\n"
+"\n"
+"На следующих нескольких шагах вы настроите программу. Это необходимо сделать "
+"только один раз."
+
+#: wizards/newuserwizard/rc.cpp:32
+msgid ""
+"<p>KMyMoney can encrypt your datafile using GPG Encryption. GPG encryption "
+"is one of the most secure methods in the world for protecting data. All of "
+"your account numbers and other important financial information will be very "
+"secure.</p>"
+msgstr ""
+"<p>Ваши данные могут быть зашифрованы с помощью GPG. Шифрование GPG — один "
+"из наиболее безопасных методов защиты данных в мире. Все номера счетов и "
+"другая важная финансовая информация будут максимально защищены."
+
+#: wizards/newuserwizard/rc.cpp:33
+msgid ""
+"If you would like to review or change any preference settings for KMyMoney "
+"at this time, you can do so here. If not just click <b>Next</b>."
+msgstr ""
+"Если вы хотите более тонко настроить поведение программы, вы можете сделать "
+"это прямо сейчас, нажав на кнопку «Настроить программу». Если не хотите, "
+"перейдите на следующий шаг, нажав на кнопку «Далее»."
+
+#: wizards/newuserwizard/rc.cpp:34
+msgid "Configure preferences now"
+msgstr "Настроить программу"
+
+#: wizards/newuserwizard/rc.cpp:35
+msgid ""
+"You can change the configuration options at any time using the configuration "
+"dialog. Just select the <b>Configure KMyMoney...</b> option in the "
+"<b>Settings</b> menu."
+msgstr ""
+"Вы можете настроить программу в любое время, вызвав диалог настройки в меню "
+"<b>Настройка</b> -> <b>Настроить KMyMoney ...</b>."
+
+#: dialogs/rc.cpp:83 dialogs/rc.cpp:411 dialogs/rc.cpp:435
+#: kmymoneyutils.cpp:92 kmymoneyutils.cpp:105 mymoney/mymoneyaccount.cpp:753
+#: mymoney/mymoneysecurity.cpp:160
+msgid "Stock"
+msgstr "Акции"
+
+#: dialogs/rc.cpp:84 dialogs/rc.cpp:412 dialogs/rc.cpp:436
+#: kmymoneyutils.cpp:107 mymoney/mymoneysecurity.cpp:163
+msgid "Mutual Fund"
+msgstr "Паи"
+
+#: dialogs/rc.cpp:85 dialogs/rc.cpp:413 dialogs/rc.cpp:437
+#: kmymoneyutils.cpp:109 mymoney/mymoneysecurity.cpp:166
+msgid "Bond"
+msgstr "Облигации"
+
+#: mymoney/mymoneysecurity.cpp:172 reports/querytable.cpp:1150
+#: widgets/kmymoneyaccountselector.cpp:76
+msgid "None"
+msgstr "Ничего"
+
+#: dialogs/rc.cpp:46 kmymoneyutils.cpp:402 mymoney/mymoneyaccount.cpp:759
+#: mymoney/mymoneyscheduled.cpp:1002 mymoney/mymoneysecurity.cpp:175
+#: views/kforecastview.cpp:174 widgets/register.cpp:54
+#: widgets/register.cpp:485 widgets/transaction.cpp:708
+#: widgets/transaction.cpp:1459
+msgid "Unknown"
+msgstr "нет данных"
+
+#: mymoney/storage/mymoneystoragesql.cpp:191
+msgid ""
+"Database apparently in use\n"
+"Opened by %1 on %2 at %3.\n"
+"Open anyway?"
+msgstr ""
+"Похоже, база данных используется другой программой.\n"
+"Открыта в %1 на %2 в %3.\n"
+"Открыть всё равно?"
+
+#: mymoney/storage/mymoneystoragesql.cpp:229
+msgid "Cannot currently create database for driver %1; please create manually"
+msgstr ""
+"Невозможно создать базу данных, используя драйвер %1. Создайте базу данных "
+"вручную. "
+
+#: mymoney/storage/mymoneystoragesql.cpp:244
+msgid "Error in create database %1; do you have create permissions?"
+msgstr "Ошибка создании базы данных %1. Проверьте права доступа."
+
+#: converter/mymoneygncreader.cpp:1329
+#: mymoney/storage/mymoneystoragexml.cpp:166
+msgid "Loading transactions..."
+msgstr "Загрузка операций..."
+
+#: converter/mymoneygncreader.cpp:1190
+#: mymoney/storage/mymoneystoragexml.cpp:173
+msgid "Loading accounts..."
+msgstr "Загрузка счетов..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:180
+msgid "Loading securities..."
+msgstr "Загрузка ценных бумаг..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:187
+msgid "Loading reports..."
+msgstr "Загрузка отчётов..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:268
+msgid "Unknown XML tag %1 found in line %2"
+msgstr "В строке %2 обнаружен неизвестный тег XML %1"
+
+#: mymoney/storage/mymoneystoragexml.cpp:274
+msgid "Exception while creating a %1 element: %2"
+msgstr "Ошибка создания элемента %1: %2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:513
+msgid "Loading file information..."
+msgstr "Загрузка данных из файла..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:591
+msgid "Loading user information..."
+msgstr "Загрузка данных о пользователе..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:655
+msgid "Saving accounts..."
+msgstr "Сохранение счетов..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:678
+msgid "Saving transactions..."
+msgstr "Сохранение операций..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:747
+msgid "Saving reports..."
+msgstr "Сохранение отчётов..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:762
+msgid "Saving budgets..."
+msgstr "Сохранение бюджетов..."
+
+#: mymoney/storage/mymoneystoragedump.cpp:414
+msgid "not reconciled"
+msgstr "не сверено"
+
+#: mymoney/storage/mymoneystoragedump.cpp:417
+msgid "cleared"
+msgstr "проверено"
+
+#: mymoney/storage/mymoneystoragedump.cpp:420
+msgid "reconciled"
+msgstr "сверено"
+
+#: mymoney/storage/mymoneystoragedump.cpp:423
+msgid "frozen"
+msgstr "заблокировано"
+
+#: mymoney/storage/mymoneystoragedump.cpp:426
+msgid "unknown"
+msgstr "неизвестно"
+
+#: mymoney/mymoneyaccount.cpp:101
+msgid ""
+"Account %1 contains an opening balance. Please use a KMyMoney version >= 0.8 "
+"and < 0.9 to correct the problem."
+msgstr ""
+"Счёт %1 содержит начальный баланс. Используйте для работы версию KMyMoney >= "
+"0.8 и < 0.9."
+
+#: mymoney/mymoneyaccount.cpp:597
+msgid ""
+"_: Brokerage (suffix for account names)\n"
+"Brokerage"
+msgstr "Комиссионные"
+
+#: kmymoneyutils.cpp:74 mymoney/mymoneyaccount.cpp:726
+msgid "Certificate of Deposit"
+msgstr "Банковский вклад"
+
+#: kmymoneyutils.cpp:78 mymoney/mymoneyaccount.cpp:732
+msgid "Money Market"
+msgstr "Валютный рынок"
+
+#: converter/mymoneytemplate.cpp:186 converter/mymoneytemplate.cpp:187
+#: dialogs/knewaccountdlg.cpp:1018 kmymoneyutils.cpp:86
+#: mymoney/mymoneyaccount.cpp:744 views/kaccountsview.cpp:360
+#: views/kbudgetview.cpp:372 views/kcategoriesview.cpp:178
+#: views/khomeview.cpp:1813 views/kmymoneyview.cpp:767
+#: widgets/kmymoneyaccountselector.cpp:68
+#: widgets/kmymoneyaccountselector.cpp:179
+#: widgets/kmymoneyaccountselector.cpp:370 widgets/register.cpp:828
+msgid "Income"
+msgstr "Доходы"
+
+#: converter/mymoneytemplate.cpp:190 converter/mymoneytemplate.cpp:191
+#: dialogs/knewaccountdlg.cpp:1020 kmymoneyutils.cpp:88
+#: mymoney/mymoneyaccount.cpp:747 views/kaccountsview.cpp:364
+#: views/kbudgetview.cpp:378 views/kcategoriesview.cpp:182
+#: views/kmymoneyview.cpp:768 widgets/kmymoneyaccountselector.cpp:72
+#: widgets/kmymoneyaccountselector.cpp:180
+#: widgets/kmymoneyaccountselector.cpp:380 widgets/register.cpp:829
+msgid "Expense"
+msgstr "Расходы"
+
+#: kmymoneyutils.cpp:90 mymoney/mymoneyaccount.cpp:750
+msgid "Investment Loan"
+msgstr "Инвестиции"
+
+#: mymoney/mymoneyfile.cpp:47
+msgid "Opening Balances"
+msgstr "Остаток на начало"
+
+#: mymoney/mymoneyfile.cpp:398
+msgid "Cannot remove transaction that references a closed account."
+msgstr "Невозможно удалить операцию, которая использует закрытый счёт."
+
+#: mymoney/mymoneyfile.cpp:1414 mymoney/mymoneyfile.cpp:1433
+#: mymoney/mymoneyfile.cpp:1447 mymoney/mymoneyfile.cpp:1469
+msgid "* Problem with account '%1'"
+msgstr "* Проблема со счётом «%1» "
+
+#: mymoney/mymoneyfile.cpp:1419
+msgid " * Parent account '%1' belongs to a different group."
+msgstr " * Родительский счёт «%1» принадлежит другой группе."
+
+#: mymoney/mymoneyfile.cpp:1420 mymoney/mymoneyfile.cpp:1450
+msgid " New parent account is the top level account '%1'."
+msgstr " Новый родительский счёт верхнего уровня — «%1»."
+
+#: mymoney/mymoneyfile.cpp:1436
+msgid " * Parent account '%1' does not contain '%2' as sub-account."
+msgstr " * Родительский счёт «%1» не содержит «%2» как субсчёт."
+
+#: mymoney/mymoneyfile.cpp:1449
+msgid " * The parent with id %1 does not exist anymore."
+msgstr " * Родительский элемент с номером %1 больше не существует."
+
+#: mymoney/mymoneyfile.cpp:1471
+msgid " * Child account with id %1 does not exist anymore."
+msgstr " * Дочерний элемент с номером %1 больше не существует. "
+
+#: mymoney/mymoneyfile.cpp:1472
+msgid " The child account list will be reconstructed."
+msgstr " Список субсчетов будет реконструирован."
+
+#: mymoney/mymoneyfile.cpp:1492
+msgid " * Unable to update account data in engine."
+msgstr " * Невозможно обновить данные о счёте."
+
+#: mymoney/mymoneyfile.cpp:1499
+msgid "* Reconstructing the child lists for"
+msgstr "* Реконструкция списка субсчетов"
+
+#: mymoney/mymoneyfile.cpp:1536
+msgid " * Unable to update account data for account %1 in engine"
+msgstr " * Невозможно обновить данные о счёте %1"
+
+#: mymoney/mymoneyfile.cpp:1554
+msgid " * Payee %1 recreated with fixed id"
+msgstr " * Получатель %1 восстановлен с фиксированным идентификатором"
+
+#: mymoney/mymoneyfile.cpp:1583
+msgid " * Payee id updated in split of transaction '%1'."
+msgstr " * В разделённой операции «%1» обновлён идентификатор получателя."
+
+#: mymoney/mymoneyfile.cpp:1596
+msgid " * shares set to value in split of transaction '%1'."
+msgstr ""
+" * В разделённой операции «%1» сумма операций приведена в соответствие с "
+"общей суммой."
+
+#: mymoney/mymoneyfile.cpp:1599
+msgid " * value set to shares in split of transaction '%1'."
+msgstr ""
+" * В разделённой операции «%1» общая сумма приведена в соответствие сумме "
+"операций."
+
+#: mymoney/mymoneyfile.cpp:1605
+msgid ""
+" * Split %2 in transaction '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+" * Одна из разделённых операций %2 в «%1» ссылается на неверный счёт %3. "
+"Исправьте вручную."
+
+#: mymoney/mymoneyfile.cpp:1616
+msgid " * action marked as interest in split of transaction '%1'."
+msgstr " * В разделённой операции «%1» одна из операций — снятие процентов."
+
+#: mymoney/mymoneyfile.cpp:1643
+msgid " * Payee id updated in split of schedule '%1'."
+msgstr " * В графике «%1» обновлён идентификатор получателя."
+
+#: mymoney/mymoneyfile.cpp:1649
+msgid ""
+" * Split in scheduled transaction '%1' contained value != 0 and shares == 0."
+msgstr ""
+" * В разделённой операции графика «%1» общая сумма не равна 0, а сумма "
+"операций равна 0."
+
+#: mymoney/mymoneyfile.cpp:1650
+msgid " Shares set to value."
+msgstr " Общая сумма установлена как сумма операций."
+
+#: mymoney/mymoneyfile.cpp:1658
+msgid " * Removed bankid from split in scheduled transaction '%1'."
+msgstr " * В разделённой операции графика «%1» удалён идентификатор банка."
+
+#: mymoney/mymoneyfile.cpp:1671
+msgid " * shares set to value in split in schedule '%1'."
+msgstr ""
+" * В разделённой операции графика «%1» сумма операций приведена в "
+"соответствие с общей суммой."
+
+#: mymoney/mymoneyfile.cpp:1674
+msgid " * value set to shares in split in schedule '%1'."
+msgstr ""
+" * В разделённой операции графика «%1» общая сумма приведена в соответствие "
+"сумме операций."
+
+#: mymoney/mymoneyfile.cpp:1680
+msgid ""
+" * Split %2 in schedule '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+" * В разделённой операции «%2» графика «%1» обнаружена ссылка на неверный "
+"счёт %3. Укажите счёт вручную."
+
+#: mymoney/mymoneyfile.cpp:1706
+msgid " * Payee id updated in report '%1'."
+msgstr " * В отчёте «%1» обновлён идентификатор получателя."
+
+#: mymoney/mymoneyfile.cpp:1723
+msgid " * Payee '%1' removed."
+msgstr " * Получатель «%1» удалён."
+
+#: mymoney/mymoneyfile.cpp:1730
+msgid "Finish! Data is consistent."
+msgstr "Проверка закончена. Структура данных правильная."
+
+#: mymoney/mymoneyfile.cpp:1732
+msgid "Finish! %1 problem(s) corrected. %2 problem(s) still present."
+msgstr "Проверка закончена. Исправлено: %1, осталось проблем: %2."
+
+#: mymoney/mymoneyscheduled.cpp:873 mymoney/mymoneyscheduled.cpp:918
+#: mymoney/mymoneyscheduled.cpp:969 mymoney/mymoneyscheduled.cpp:1265
+#: mymoney/mymoneyscheduletest.cpp:1336
+msgid "Once"
+msgstr "Один раз"
+
+#: mymoney/mymoneyscheduled.cpp:875 mymoney/mymoneyscheduled.cpp:924
+#: mymoney/mymoneyscheduled.cpp:1267 mymoney/mymoneyscheduletest.cpp:1337
+#: widgets/rc.cpp:72
+msgid "Daily"
+msgstr "ежедневно"
+
+#: mymoney/mymoneyscheduled.cpp:877 mymoney/mymoneyscheduled.cpp:931
+#: mymoney/mymoneyscheduled.cpp:1269 mymoney/mymoneyscheduletest.cpp:1338
+#: widgets/rc.cpp:73
+msgid "Weekly"
+msgstr "еженедельно"
+
+#: mymoney/mymoneyscheduled.cpp:881 mymoney/mymoneyscheduled.cpp:932
+#: mymoney/mymoneyscheduled.cpp:1273 mymoney/mymoneyscheduletest.cpp:1339
+msgid "Every other week"
+msgstr "каждую вторую неделю"
+
+#: mymoney/mymoneyscheduled.cpp:879 mymoney/mymoneyscheduled.cpp:1271
+#: mymoney/mymoneyscheduletest.cpp:1340
+msgid "Fortnightly"
+msgstr "каждые две недели"
+
+#: mymoney/mymoneyscheduled.cpp:883 mymoney/mymoneyscheduled.cpp:941
+#: mymoney/mymoneyscheduled.cpp:1275 mymoney/mymoneyscheduletest.cpp:1341
+msgid "Every half month"
+msgstr "каждую половину месяца"
+
+#: mymoney/mymoneyscheduled.cpp:887 mymoney/mymoneyscheduled.cpp:934
+#: mymoney/mymoneyscheduled.cpp:1279 mymoney/mymoneyscheduletest.cpp:1342
+msgid "Every four weeks"
+msgstr "каждые четыре недели"
+
+#: mymoney/mymoneyscheduled.cpp:893 mymoney/mymoneyscheduled.cpp:935
+#: mymoney/mymoneyscheduled.cpp:1285 mymoney/mymoneyscheduletest.cpp:1344
+msgid "Every eight weeks"
+msgstr "каждые восемь недель"
+
+#: mymoney/mymoneyscheduled.cpp:895 mymoney/mymoneyscheduled.cpp:948
+#: mymoney/mymoneyscheduled.cpp:1287 mymoney/mymoneyscheduletest.cpp:1345
+msgid "Every two months"
+msgstr "каждые два месяца"
+
+#: mymoney/mymoneyscheduled.cpp:897 mymoney/mymoneyscheduled.cpp:949
+#: mymoney/mymoneyscheduled.cpp:1289 mymoney/mymoneyscheduletest.cpp:1346
+msgid "Every three months"
+msgstr "каждые три месяца"
+
+#: mymoney/mymoneyscheduled.cpp:899 mymoney/mymoneyscheduled.cpp:1291
+#: mymoney/mymoneyscheduletest.cpp:1347 widgets/rc.cpp:76
+msgid "Quarterly"
+msgstr "ежеквартально"
+
+#: mymoney/mymoneyscheduled.cpp:901 mymoney/mymoneyscheduled.cpp:950
+#: mymoney/mymoneyscheduled.cpp:1293 mymoney/mymoneyscheduletest.cpp:1348
+msgid "Every four months"
+msgstr "каждые четыре месяца"
+
+#: mymoney/mymoneyscheduled.cpp:903 mymoney/mymoneyscheduled.cpp:951
+#: mymoney/mymoneyscheduled.cpp:1295 mymoney/mymoneyscheduletest.cpp:1349
+msgid "Twice yearly"
+msgstr "дважды в год"
+
+#: mymoney/mymoneyscheduled.cpp:905 mymoney/mymoneyscheduled.cpp:957
+#: mymoney/mymoneyscheduled.cpp:1297 mymoney/mymoneyscheduletest.cpp:1350
+#: widgets/rc.cpp:20 widgets/rc.cpp:77
+msgid "Yearly"
+msgstr "ежегодно"
+
+#: mymoney/mymoneyscheduled.cpp:907 mymoney/mymoneyscheduled.cpp:958
+#: mymoney/mymoneyscheduled.cpp:1299 mymoney/mymoneyscheduletest.cpp:1351
+msgid "Every other year"
+msgstr "через год"
+
+#: mymoney/mymoneyscheduled.cpp:870 mymoney/mymoneyscheduled.cpp:913
+#: mymoney/mymoneyscheduled.cpp:966
+msgid "Any"
+msgstr "Один раз"
+
+#: mymoney/mymoneyscheduled.cpp:885 mymoney/mymoneyscheduled.cpp:933
+#: mymoney/mymoneyscheduled.cpp:1277
+msgid "Every three weeks"
+msgstr "каждую третью неделю"
+
+#: mymoney/mymoneyscheduled.cpp:889 mymoney/mymoneyscheduled.cpp:925
+#: mymoney/mymoneyscheduled.cpp:1281
+msgid "Every thirty days"
+msgstr "каждые 30 дней"
+
+#: mymoney/mymoneyscheduled.cpp:971
+msgid "Day"
+msgstr "День"
+
+#: mymoney/mymoneyscheduled.cpp:973 reports/listtable.cpp:206
+#: widgets/kmymoneycalendar.cpp:123 widgets/rc.cpp:97
+msgid "Week"
+msgstr "Неделя"
+
+#: mymoney/mymoneyscheduled.cpp:975
+msgid "Half-month"
+msgstr "Половина месяца"
+
+#: mymoney/mymoneyscheduled.cpp:977 reports/listtable.cpp:205
+#: widgets/kmymoneycalendar.cpp:124 widgets/rc.cpp:96
+msgid "Month"
+msgstr "Месяц"
+
+#: dialogs/rc.cpp:400 mymoney/mymoneyscheduled.cpp:979 views/rc.cpp:14
+msgid "Year"
+msgstr "Год"
+
+#: mymoney/mymoneyscheduled.cpp:989
+msgid "Bill"
+msgstr "Счёт на оплату"
+
+#: dialogs/rc.cpp:107 dialogs/rc.cpp:162 dialogs/rc.cpp:249 dialogs/rc.cpp:754
+#: mymoney/mymoneyscheduled.cpp:992 widgets/kmymoneycombo.cpp:420
+#: widgets/register.cpp:571
+msgid "Deposit"
+msgstr "Зачисление"
+
+#: mymoney/mymoneyscheduled.cpp:995 reports/querytable.cpp:594
+#: reports/querytable.cpp:696 widgets/kmymoneycombo.cpp:419
+msgid "Transfer"
+msgstr "Перевод"
+
+#: mymoney/mymoneyscheduled.cpp:1035
+msgid "Any (Error)"
+msgstr "любой (ошибка)"
+
+#: dialogs/rc.cpp:114 mymoney/mymoneyscheduled.cpp:1047
+msgid "Change the date to the previous Friday"
+msgstr "перенести на пятницу"
+
+#: dialogs/rc.cpp:115 mymoney/mymoneyscheduled.cpp:1050
+msgid "Change the date to the next Monday"
+msgstr "перенести на понедельник"
+
+#: mymoney/mymoneyscheduled.cpp:1053
+msgid "Do Nothing"
+msgstr "ничего не делать"
+
+#: kmymoney2.cpp:312
+msgid "Open database..."
+msgstr "Открыть базу данных..."
+
+#: kmymoney2.cpp:313
+msgid "Save as database..."
+msgstr "Сохранить как базу данных..."
+
+#: kmymoney2.cpp:314
+msgid "Backup..."
+msgstr "Резервная копия..."
+
+#: kmymoney2.cpp:315 kmymoney2.cpp:321
+msgid "QIF..."
+msgstr "QIF..."
+
+#: kmymoney2.cpp:316
+msgid "Gnucash..."
+msgstr "GnuCash..."
+
+#: kmymoney2.cpp:317
+msgid "Statement file..."
+msgstr "Выписка банка..."
+
+#: kmymoney2.cpp:319 kmymoney2.cpp:320
+msgid "Account Template..."
+msgstr "План счетов..."
+
+#: kmymoney2.cpp:322
+msgid "Personal Data..."
+msgstr "Данные владельца..."
+
+#: kmymoney2.cpp:325
+msgid "Dump Memory"
+msgstr "Содержимое памяти..."
+
+#: kmymoney2.cpp:327
+msgid "File-Information..."
+msgstr "Информация о файле..."
+
+#: kmymoney2.cpp:332
+msgid "Find transaction..."
+msgstr "Найти операцию..."
+
+#: kmymoney2.cpp:337
+msgid "Show Transaction Detail"
+msgstr "Показывать данные операций"
+
+#: kmymoney2.cpp:338 rc.cpp:60
+msgid "Hide reconciled transactions"
+msgstr "Скрыть сверенные операции"
+
+#: kmymoney2.cpp:339 rc.cpp:57
+msgid "Hide unused categories"
+msgstr "Скрыть неиспользуемые статьи"
+
+#: kmymoney2.cpp:340
+msgid "Show all accounts"
+msgstr "Показать все счета"
+
+#: kmymoney2.cpp:345
+msgid "New institution..."
+msgstr "Новое учреждение..."
+
+#: kmymoney2.cpp:346
+msgid "Edit institution..."
+msgstr "Изменить учреждение..."
+
+#: kmymoney2.cpp:347
+msgid "Delete institution..."
+msgstr "Удалить учреждение..."
+
+#: kmymoney2.cpp:352
+msgid "New account..."
+msgstr "Новый счёт..."
+
+#: kmymoney2.cpp:354
+msgid "Open ledger"
+msgstr "Перейти к операциям"
+
+#: kmymoney2.cpp:355
+msgid "Reconcile..."
+msgstr "Сверить..."
+
+#: kmymoney2.cpp:356
+msgid ""
+"_: Finish reconciliation\n"
+"Finish"
+msgstr "Завершить сверку"
+
+#: kmymoney2.cpp:357
+msgid ""
+"_: Postpone reconciliation\n"
+"Postpone"
+msgstr "Отложить"
+
+#: kmymoney2.cpp:358
+msgid "Edit account..."
+msgstr "Изменить счёт..."
+
+#: kmymoney2.cpp:359
+msgid "Delete account..."
+msgstr "Удалить счёт..."
+
+#: kmymoney2.cpp:360
+msgid "Close account"
+msgstr "Заблокировать счёт"
+
+#: kmymoney2.cpp:361
+msgid "Reopen account"
+msgstr "Разблокировать счёт"
+
+#: kmymoney2.cpp:362
+msgid "Transaction report"
+msgstr "Отчёт об операциях"
+
+#: kmymoney2.cpp:364
+msgid "Show balance chart..."
+msgstr "Показать диаграмму баланса..."
+
+#: kmymoney2.cpp:366
+msgid "Map to online account"
+msgstr "Связать с онлайновым счётом"
+
+#: kmymoney2.cpp:367
+msgid "Unmap account"
+msgstr "Не онлайновый счёт"
+
+#: dialogs/settings/rc.cpp:126 kmymoney2.cpp:368 views/kpayeesview.cpp:363
+#: widgets/rc.cpp:50
+msgid "Update"
+msgstr "Обновить"
+
+#: kmymoney2.cpp:372
+msgid "Update account..."
+msgstr "Обновить счёт..."
+
+#: kmymoney2.cpp:373
+msgid "Update all accounts..."
+msgstr "Обновить все счета..."
+
+#: kmymoney2.cpp:378
+msgid "New category..."
+msgstr "Новая статья..."
+
+#: kmymoney2.cpp:379
+msgid "Edit category..."
+msgstr "Изменить статью..."
+
+#: kmymoney2.cpp:380
+msgid "Delete category..."
+msgstr "Удалить статью..."
+
+#: kmymoney2.cpp:386
+msgid "QIF Profile Editor..."
+msgstr "Профили QIF..."
+
+#: kmymoney2.cpp:387
+msgid "Securities..."
+msgstr "Ценные бумаги..."
+
+#: kmymoney2.cpp:388
+msgid "Currencies..."
+msgstr "Валюты..."
+
+#: kmymoney2.cpp:389
+msgid "Prices..."
+msgstr "Курсы..."
+
+#: kmymoney2.cpp:390
+msgid "Update Stock and Currency Prices..."
+msgstr "Обновить курсы..."
+
+#: kmymoney2.cpp:391
+msgid "Consistency Check"
+msgstr "Проверка целостности"
+
+#: kmymoney2.cpp:392
+msgid "Performance-Test"
+msgstr "Тест на производительность"
+
+#: kmymoney2.cpp:393
+msgid "KCalc..."
+msgstr "Калькулятор..."
+
+#: kmymoney2.cpp:399
+msgid "Enable all messages"
+msgstr "Показывать все сообщения"
+
+#: kmymoney2.cpp:400
+msgid "KDE language settings..."
+msgstr "Языковые настройки KDE..."
+
+#: kmymoney2.cpp:405
+msgid "&Show tip of the day"
+msgstr "Показывать совет &дня"
+
+#: kmymoney2.cpp:410
+msgid ""
+"_: New transaction button\n"
+"New"
+msgstr "Добавить"
+
+#: kmymoney2.cpp:415
+msgid ""
+"_: Edit transaction button\n"
+"Edit"
+msgstr "Изменить"
+
+#: kmymoney2.cpp:417
+msgid ""
+"_: Enter transaction\n"
+"Enter"
+msgstr "Сохранить"
+
+#: kmymoney2.cpp:420
+msgid ""
+"_: Edit split button\n"
+"Edit splits"
+msgstr "Разделить операцию"
+
+#: kmymoney2.cpp:421
+msgid ""
+"_: Cancel transaction edit\n"
+"Cancel"
+msgstr "Отменить"
+
+#: kmymoney2.cpp:422
+msgid ""
+"_: Delete transaction\n"
+"Delete"
+msgstr "Удалить"
+
+#: kmymoney2.cpp:423
+msgid ""
+"_: Duplicate transaction\n"
+"Duplicate"
+msgstr "Дублировать"
+
+#: kmymoney2.cpp:425 kmymoney2.cpp:4826 kmymoney2.cpp:5107
+msgid ""
+"_: Button text for match transaction\n"
+"Match"
+msgstr "Связать"
+
+#: kmymoney2.cpp:426
+msgid ""
+"_: Accept 'imported' and 'matched' transaction\n"
+"Accept"
+msgstr "Принять"
+
+#: kmymoney2.cpp:428
+msgid ""
+"_: Toggle reconciliation flag\n"
+"Toggle"
+msgstr "Флаг сверки"
+
+#: kmymoney2.cpp:429
+msgid ""
+"_: Mark transaction cleared\n"
+"Cleared"
+msgstr "Проверено"
+
+#: kmymoney2.cpp:430
+msgid ""
+"_: Mark transaction reconciled\n"
+"Reconciled"
+msgstr "Сверено"
+
+#: kmymoney2.cpp:431
+msgid ""
+"_: Mark transaction not reconciled\n"
+"Not reconciled"
+msgstr "Не сверено"
+
+#: kmymoney2.cpp:432
+msgid ""
+"_: Select all transactions\n"
+"Select all"
+msgstr "Выбрать все"
+
+#: kmymoney2.cpp:434 kmymoney2.cpp:5497
+msgid "Goto account"
+msgstr "Перейти к счёту"
+
+#: kmymoney2.cpp:435 kmymoney2.cpp:5495
+msgid "Goto payee"
+msgstr "Перейти к получателю"
+
+#: kmymoney2.cpp:436
+msgid "Create scheduled transaction..."
+msgstr "Создать запланированную операцию..."
+
+#: kmymoney2.cpp:437
+msgid "Assign next number"
+msgstr "Присвоить следующий номер"
+
+#: kmymoney2.cpp:438
+msgid ""
+"_: Combine transactions\n"
+"Combine"
+msgstr "Объединение операций"
+
+#: kmymoney2.cpp:440
+msgid "New investment"
+msgstr "Добавить инвестицию"
+
+#: kmymoney2.cpp:441
+msgid "Edit investment..."
+msgstr "Изменить инвестицию..."
+
+#: kmymoney2.cpp:442
+msgid "Delete investment..."
+msgstr "Удалить инвестицию..."
+
+#: kmymoney2.cpp:443
+msgid "Online price update..."
+msgstr "Обновление курсов..."
+
+#: kmymoney2.cpp:444
+msgid "Manual price update..."
+msgstr "Указать курс вручную..."
+
+#: kmymoney2.cpp:446
+msgid "New scheduled transaction..."
+msgstr "Создать запланированную операцию..."
+
+#: kmymoney2.cpp:447
+msgid "Edit scheduled transaction..."
+msgstr "Изменить запланированную операцию..."
+
+#: kmymoney2.cpp:448
+msgid "Delete scheduled transaction..."
+msgstr "Удалить запланированную операцию..."
+
+#: kmymoney2.cpp:449
+msgid "Duplicate scheduled transaction"
+msgstr "Дублировать запланированную операцию"
+
+#: kmymoney2.cpp:450
+msgid "Enter next transaction..."
+msgstr "Ввести следующую операцию..."
+
+#: kmymoney2.cpp:451
+msgid "Skip next transaction..."
+msgstr "Пропустить следующую операцию..."
+
+#: kmymoney2.cpp:453
+msgid "New payee"
+msgstr "Новый получатель"
+
+#: kmymoney2.cpp:454
+msgid "Rename payee"
+msgstr "Переименовать получателя"
+
+#: kmymoney2.cpp:455
+msgid "Delete payee"
+msgstr "Удалить получателя"
+
+#: kmymoney2.cpp:457
+msgid "New budget"
+msgstr "Создать бюджет"
+
+#: kmymoney2.cpp:458
+msgid "Rename budget"
+msgstr "Переименовать бюджет"
+
+#: kmymoney2.cpp:459
+msgid "Delete budget"
+msgstr "Удалить бюджет?"
+
+#: kmymoney2.cpp:460
+msgid "Copy budget"
+msgstr "Копировать бюджет"
+
+#: kmymoney2.cpp:461
+msgid "Change budget year"
+msgstr "Изменить год бюджета"
+
+#: kmymoney2.cpp:462
+msgid ""
+"_: Budget based on forecast\n"
+"Forecast"
+msgstr "Прогноз"
+
+#: kmymoney2.cpp:467 kmymoney2.cpp:3990 kmymoney2.cpp:3993 kmymoney2.cpp:3999
+msgid "New currency"
+msgstr "Новая валюта"
+
+#: kmymoney2.cpp:468 kmymoney2.cpp:4021 kmymoney2.cpp:4026
+msgid "Rename currency"
+msgstr "Переименовать валюту"
+
+#: kmymoney2.cpp:469 kmymoney2.cpp:4039
+msgid "Delete currency"
+msgstr "Удалить валюту"
+
+#: dialogs/rc.cpp:69 kmymoney2.cpp:470
+msgid "Select as base currency"
+msgstr "Использовать как основную валюту"
+
+#: kmymoney2.cpp:481
+msgid "View back"
+msgstr "Назад"
+
+#: kmymoney2.cpp:482
+msgid "View forward"
+msgstr "Вперёд"
+
+#: kmymoney2.cpp:611
+msgid "KMyMoney file needs saving. Save ?"
+msgstr "Сохранить файл?"
+
+#: kmymoney2.cpp:757
+msgid "Creating new document..."
+msgstr "Создание файла..."
+
+#: kmymoney2.cpp:869 kmymoney2.cpp:884
+msgid "Open a file."
+msgstr "Открыть файл."
+
+#: kmymoney2.cpp:872
+msgid ""
+"%1|KMyMoney files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Файлы KMyMoney (*.kmy)\n"
+"%2|Все файлы (*.*)"
+
+#: kmymoney2.cpp:873
+msgid "Open File..."
+msgstr "Открыть файл..."
+
+#: kmymoney2.cpp:925 kstartuplogo.cpp:100
+msgid "Loading file..."
+msgstr "Идёт загрузка..."
+
+#: kmymoney2.cpp:986
+msgid ""
+"<b>%1</b> is either an invalid filename or the file does not exist. You can "
+"open another file or create a new one."
+msgstr ""
+"Файл <b>%1</b> имеет неверное имя или не существует. Выберите другой файл."
+
+#: kmymoney2.cpp:986
+msgid "File not found"
+msgstr "Файл не найден"
+
+#: kmymoney2.cpp:989
+msgid "File <b>%1</b> is already opened in another instance of KMyMoney"
+msgstr "Файл <b>%1</b> открыт в другом экземпляре KMyMoney"
+
+#: kmymoney2.cpp:989
+msgid "Duplicate open"
+msgstr "Файл заблокирован"
+
+#: kmymoney2.cpp:1001
+msgid "Saving file..."
+msgstr "Идёт сохранение..."
+
+#: kmymoney2.cpp:1035 kmymoney2.cpp:1047 kmymoney2.cpp:1071
+#, c-format
+msgid "Additional encryption key(s) to be used: %1"
+msgstr "Используются дополнительные ключи шифрования: %1"
+
+#: kmymoney2.cpp:1056
+msgid "Saving file with a new filename..."
+msgstr "Сохранение с новым именем..."
+
+#: kmymoney2.cpp:1067
+msgid "Encryption key to be used"
+msgstr "Используется ключ шифрования"
+
+#: kmymoney2.cpp:1072
+msgid "Manage additional keys"
+msgstr "Дополнительные ключи"
+
+#: kmymoney2.cpp:1079
+msgid "No encryption"
+msgstr "Без шифрования"
+
+#: kmymoney2.cpp:1102
+msgid ""
+"_: KMyMoney (Filefilter)\n"
+"KMyMoney files"
+msgstr "Файлы KMyMoney (*.kmy)"
+
+#: kmymoney2.cpp:1103
+msgid ""
+"_: XML (Filefilter)\n"
+"XML files"
+msgstr "Файлы XML (*.xml)"
+
+#: kmymoney2.cpp:1104
+msgid ""
+"_: Anonymous (Filefilter)\n"
+"Anonymous files"
+msgstr "Анонимные файлы (*.anon.xml)"
+
+#: kmymoney2.cpp:1105
+msgid "All files"
+msgstr "Все файлы"
+
+#: kmymoney2.cpp:1193
+msgid "Saving file to database..."
+msgstr "Сохранение в базу данных..."
+
+#: kmymoney2.cpp:1207
+msgid "Cannot save to current database."
+msgstr "Невозможно сохранить в базу данных."
+
+#: kmymoney2.cpp:1225
+msgid "Closing window..."
+msgstr "Закрытие окна..."
+
+#: kmymoney2.cpp:1228 kmymoney2.cpp:1249
+msgid "The file has been changed, save it ?"
+msgstr "Файл изменён. Сохранить его?"
+
+#: kmymoney2.cpp:1339 kmymoney2.cpp:1352
+msgid "Ready."
+msgstr "Готово."
+
+#: kmymoney2.cpp:1397 kmymoney2.cpp:1433
+msgid "No KMyMoneyFile open"
+msgstr "Нет открытого файла KMyMoney"
+
+#: kmymoney2.cpp:1401
+msgid "Viewing personal data..."
+msgstr "Показ данных владельца..."
+
+#: kmymoney2.cpp:1408
+msgid "Edit Personal Data"
+msgstr "Изменение данных владельца"
+
+#: kmymoney2.cpp:1424
+#, c-format
+msgid "Unable to store user information: %1"
+msgstr "Невозможно сохранить данные владельца: %1"
+
+#: kmymoney2.cpp:1447
+msgid "Importing account templates."
+msgstr "Импорт плана счетов."
+
+#: kmymoney2.cpp:1462
+msgid "Unable to import template(s): %1, thrown in %2:%3"
+msgstr "Невозможно импортировать шаблоны: %1 (ошибка в %2:%3)"
+
+#: kmymoney2.cpp:1471
+msgid "Exporting account templates."
+msgstr "Экспорт плана счетов."
+
+#: kmymoney2.cpp:1474
+msgid ""
+"*.kmt|KMyMoney template files\n"
+"*.*|All files"
+msgstr ""
+"*.kmt|Планы счетов KMyMoney (*.kmt)\n"
+"*.*|Все файлы (*.*)"
+
+#: kmymoney2.cpp:1475
+msgid "Save as..."
+msgstr "Сохранить как..."
+
+#: kmymoney2.cpp:1517
+msgid "Importing file..."
+msgstr "Импорт файла..."
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "The statements have been processed with the following results:"
+msgstr "Результат обработки выписки:"
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:1754 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "Statement stats"
+msgstr "Обработка выписки"
+
+#: kmymoney2.cpp:1602
+msgid ""
+"You cannot import GnuCash data into an existing file. Do you wish to save "
+"this file?"
+msgstr "Сохранить файл перед импортом данных из GnuCash?"
+
+#: kmymoney2.cpp:1615
+msgid "Importing a Gnucash file."
+msgstr "Импорт данных GnuCash."
+
+#: kmymoney2.cpp:1618
+msgid ""
+"%1|Gnucash files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Файлы GnuCash (%1)\n"
+"%2|Все файлы (*.*)"
+
+#: kmymoney2.cpp:1619
+msgid "Import Gnucash file..."
+msgstr "Импорт данных GnuCash..."
+
+#: kmymoney2.cpp:1658
+msgid "Importing an XML Statement."
+msgstr "Импорт выписки в формате XML."
+
+#: kmymoney2.cpp:1661
+msgid ""
+"%1|XML files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Файлы XML (%1)\n"
+"%2|Все файлы (*.*)"
+
+#: kmymoney2.cpp:1662
+msgid "Import XML Statement..."
+msgstr "Импорт выписки в формате XML..."
+
+#: kmymoney2.cpp:1718
+msgid "Error importing %1: This file is not a valid KMM statement file."
+msgstr "Ошибка импорта %1: ошибка формата выписки."
+
+#: kmymoney2.cpp:1718
+msgid "Invalid Statement"
+msgstr "Неверный формат выписки"
+
+#: kmymoney2.cpp:1754
+msgid "The statement has been processed with the following results:"
+msgstr "Результат обработки выписки:"
+
+#: kmymoney2.cpp:1763
+msgid "Exporting file..."
+msgstr "Экспорт в файл..."
+
+#: kmymoney2.cpp:1786
+msgid "The file <b>%1</b> already exists. Do you really want to override it?"
+msgstr "Файл с именем <b>%1</b> уже существует. Заменить его?"
+
+#: kmymoney2.cpp:1786
+msgid "File already exists"
+msgstr "Существующий файл"
+
+#: dialogs/rc.cpp:347 dialogs/rc.cpp:649 dialogs/rc.cpp:798 kmymoney2.cpp:1815
+msgid "General"
+msgstr "Основное"
+
+#: kmymoney2.cpp:1816
+msgid "Register"
+msgstr "Операции"
+
+#: kmymoney2.cpp:1817 views/khomeview.cpp:88 views/kmymoneyview.cpp:136
+msgid "Home"
+msgstr "Сводка"
+
+#: kmymoney2.cpp:1818 views/kmymoneyview.cpp:176
+msgid ""
+"Scheduled\n"
+"transactions"
+msgstr "Платежи"
+
+#: kmymoney2.cpp:1819
+msgid "Encryption"
+msgstr "Шифрование"
+
+#: kmymoney2.cpp:1820
+msgid "Colors"
+msgstr "Цвета"
+
+#: dialogs/rc.cpp:344 dialogs/settings/rc.cpp:107 kmymoney2.cpp:1822
+#: widgets/rc.cpp:33
+msgid "Online Quotes"
+msgstr "Источники"
+
+#: kmymoney2.cpp:1823 reports/pivottable.cpp:2426 views/kmymoneyview.cpp:251
+#: views/kmymoneyview.cpp:253 views/kreportsview.cpp:1415 views/rc.cpp:41
+msgid "Forecast"
+msgstr "Прогноз"
+
+#: kmymoney2.cpp:1824
+msgid "Plugins"
+msgstr "Модули"
+
+#: kmymoney2.cpp:1893
+msgid ""
+"The file must be saved first before it can be backed up. Do you want to "
+"continue?"
+msgstr ""
+"Файл должен быть сохранён перед его резервным копированием. Продолжить?"
+
+#: kmymoney2.cpp:1910
+msgid ""
+"The current implementation of the backup functionality only supports local "
+"files as source files! Your current source file is '%1'."
+msgstr ""
+"В текущей версии программы поддерживается резервное копирование только в "
+"локальные файлы. Резервная копия будет сохранена в файл «%1»."
+
+#: kmymoney2.cpp:1913
+msgid "Local files only"
+msgstr "Только локальные файлы"
+
+#: kmymoney2.cpp:1928
+#, c-format
+msgid "Mounting %1"
+msgstr "Монтирование %1"
+
+#: kmymoney2.cpp:1967
+msgid "Backup file for today exists on that device. Replace ?"
+msgstr "На диске обнаружена старая резервная копия файла. Заменить?"
+
+#: dialogs/rc.cpp:7 kmymoney2.cpp:1967 kmymoney2.cpp:1994 kmymoney2.cpp:2024
+#: kmymoney2.cpp:2032 kmymoney2.cpp:2057 kmymoney2.cpp:2059
+msgid "Backup"
+msgstr "Резервное копирование"
+
+#: kmymoney2.cpp:1967
+msgid "&Replace"
+msgstr "&Заменить"
+
+#: kmymoney2.cpp:1972 kmymoney2.cpp:1997 kmymoney2.cpp:2016 kmymoney2.cpp:2035
+#, c-format
+msgid "Unmounting %1"
+msgstr "Отключение %1"
+
+#: kmymoney2.cpp:1987
+#, c-format
+msgid "Writing %1"
+msgstr "Запись в %1"
+
+#: kmymoney2.cpp:1994
+msgid "Error mounting device"
+msgstr "Ошибка монтирования диска"
+
+#: converter/mymoneygncreader.cpp:1995 kmymoney2.cpp:2023 kmymoney2.cpp:2055
+msgid "Done"
+msgstr "Готово"
+
+#: kmymoney2.cpp:2024 kmymoney2.cpp:2057
+msgid "File successfully backed up"
+msgstr "Резервное копирование завершено"
+
+#: kmymoney2.cpp:2032
+msgid "Error copying file to device"
+msgstr "Ошибка копирования файла на диск"
+
+#: kmymoney2.cpp:2059
+msgid "Error unmounting device"
+msgstr "Ошибка отключения диска"
+
+#: kmymoney2.cpp:2143
+#, c-format
+msgid "Cannot add institution: %1"
+msgstr "Невозможно добавить учреждение: %1"
+
+#: kmymoney2.cpp:2185
+#, c-format
+msgid "Unable to store institution: %1"
+msgstr "Невозможно сохранить учреждение: %1"
+
+#: kmymoney2.cpp:2192
+#, c-format
+msgid "Unable to edit institution: %1"
+msgstr "Невозможно изменить учреждение: %1"
+
+#: kmymoney2.cpp:2203
+msgid "Do you really want to delete institution <b>%1</b> ?"
+msgstr "Удалить учреждение <b>%1</b> ?"
+
+#: kmymoney2.cpp:2211 kmymoney2.cpp:2215
+#, c-format
+msgid "Unable to delete institution: %1"
+msgstr "Невозможно удалить учреждение: %1"
+
+#: kmymoney2.cpp:2268
+#, c-format
+msgid "Unable to find account: %1"
+msgstr "Невозможно найти счёт: %1"
+
+#: kmymoney2.cpp:2309
+msgid ""
+"This account is a liability and if the opening balance represents money "
+"owed, then it should be negative. Negate the amount?\n"
+"\n"
+"Please click Yes to change the opening balance to %1,\n"
+"Please click No to leave the amount as %2,\n"
+"Please click Cancel to abort the account creation."
+msgstr ""
+"Это пассивный счёт и поэтому его начальный остаток должен быть "
+"отрицательным. Изменить знак суммы?\n"
+"\n"
+"Нажатие на кнопку «Да» установит начальный остаток как %1,\n"
+"Нажатие на кнопку «Нет» оставит начальный остаток как %2,\n"
+"Нажатие на кнопку «Отмена» отменит создание счёта."
+
+#: kmymoney2.cpp:2345 kmymoney2.cpp:2346
+msgid "Loan payout"
+msgstr "Зачисление суммы кредита"
+
+#: dialogs/knewloanwizard.cpp:892 kmymoney2.cpp:2374
+#, c-format
+msgid "Unable to add account: %1"
+msgstr "Невозможно добавить счёт: %1"
+
+#: kmymoney2.cpp:2392
+msgid ""
+"The category <b>%1</b> currently does not exist. Do you want to create it?"
+"<p><i>The parent account will default to <b>%2</b> but can be changed in the "
+"following dialog</i>."
+msgstr ""
+"Статья <b>%1</b> не существует. Создать её? <p><i>В качестве вышестоящей "
+"статьи будет использована <b>%2</b>, которую можно изменить в следующем "
+"диалоге.</i>"
+
+#: kmymoney2.cpp:2392
+msgid "Create category"
+msgstr "Неизвестная статья"
+
+#: kmymoney2.cpp:2429
+msgid "Create a new Category"
+msgstr "Создать статью"
+
+#: kmymoney2.cpp:2505
+#, c-format
+msgid "Unable to create account: %1"
+msgstr "Невозможно создать счёт: %1"
+
+#: kmymoney2.cpp:2516
+msgid ""
+"The security <b>%1</b> currently does not exist as sub-account of <b>%2</b>. "
+"Do you want to create it?"
+msgstr ""
+"Ценные бумаги <b>%1</b> не являются субсчётом <b>%2</b>. Создать счёт для "
+"учёта этих ценных бумаг?"
+
+#: kmymoney2.cpp:2517
+msgid "Create security"
+msgstr "Добавить ценную бумагу"
+
+#: kmymoney2.cpp:2551
+msgid "Do you really want to delete the investment <b>%1</b>?"
+msgstr "Удалить инвестицию <b>%1</b>?"
+
+#: kmymoney2.cpp:2551
+msgid "Delete investment"
+msgstr "Удаление инвестиции"
+
+#: kmymoney2.cpp:2558
+#, c-format
+msgid "Unable to delete investment: %1"
+msgstr "Невозможно удалить инвестицию: %1"
+
+#: kmymoney2.cpp:2640 kmymoney2.cpp:2646
+msgid "Unable to add scheduled transaction: "
+msgstr "Невозможно добавить запланированную операцию: "
+
+#: kmymoney2.cpp:2722
+msgid "Adjusting transactions..."
+msgstr "Загрузка операций..."
+
+#: kmymoney2.cpp:2747
+msgid "Adjusting scheduled transactions..."
+msgstr "Загрузка запланированных операций..."
+
+#: kmymoney2.cpp:2765
+msgid "Adjusting budgets..."
+msgstr "Загрузка бюджетов..."
+
+#: kmymoney2.cpp:2783
+msgid ""
+"Unable to exchange category <b>%1</b> with category <b>%2</b>. Reason: %3"
+msgstr "Невозможно заменить статью <b>%1</b> на статью <b>%2</b>: %2"
+
+#: kmymoney2.cpp:2804
+msgid "Do you really want to delete category <b>%1</b>?"
+msgstr "Удалить статью <b>%1</b>?"
+
+#: kmymoney2.cpp:2811
+msgid "Unable to delete category <b>%1</b>. Cause: %2"
+msgstr "Невозможно удалить статью <b>%1</b>: %2"
+
+#: kmymoney2.cpp:2823
+msgid ""
+"Do you want to delete category <b>%1</b> with all its sub-categories or only "
+"the category itself? If you only delete the category itself, all its sub-"
+"categories will be made sub-categories of <b>%2</b>."
+msgstr ""
+"Удалить статью <b>%1</b> со всеми вложенными статьями или только одну эту "
+"статью. Если вы удалите только одну статью, все вложенные статьи будут "
+"перемещены в <b>%2</b>."
+
+#: kmymoney2.cpp:2827
+msgid "Delete all"
+msgstr "Удалить все"
+
+#: kmymoney2.cpp:2828
+msgid "Just the category"
+msgstr "Только одну статью"
+
+#: kmymoney2.cpp:2858
+msgid ""
+"Some sub-categories of category <b>%1</b> cannot be deleted, because they "
+"are still used. They will be made sub-categories of <b>%2</b>. Proceed?"
+msgstr ""
+"Некоторые вложенные статьи в <b>%1</b> не могут быть удалены, так как "
+"используются в операциях. Они будут перемещены в <b>%2</b>. Продолжить?"
+
+#: kmymoney2.cpp:2878
+msgid "Unable to delete a sub-category of category <b>%1</b>. Reason: %2"
+msgstr "Невозможно удалить вложенную статью в <b>%1</b>: %2"
+
+#: kmymoney2.cpp:2889
+msgid "Do you really want to delete account <b>%1</b>?"
+msgstr "Удалить счёт <b>%1</b>?"
+
+#: kmymoney2.cpp:2901
+msgid "Unable to delete account '%1'. Cause: %2"
+msgstr "Невозможно удалить счёт «%1»: %2"
+
+#: kmymoney2.cpp:2917
+msgid "Edit account '%1'"
+msgstr "Свойства счёта «%1»"
+
+#: kmymoney2.cpp:2922
+msgid "Edit category '%1'"
+msgstr "Свойства статьи «%1»"
+
+#: kmymoney2.cpp:3008
+msgid "Unable to modify account '%1'. Cause: %2"
+msgstr "Невозможно изменить счёт «%1»: %2"
+
+#: kmymoney2.cpp:3065
+msgid ""
+"KMyMoney has detected some overdue scheduled transactions for this account. "
+"Do you want to enter those scheduled transactions now?"
+msgstr ""
+"Обнаружены просроченные платежи с этого счёта. Ввести эти платежи сейчас?"
+
+#: kmymoney2.cpp:3065
+msgid "Scheduled transactions found"
+msgstr "Обнаружены просроченные платежи"
+
+#: kmymoney2.cpp:3163
+msgid ""
+"You are about to finish the reconciliation of this account with a difference "
+"between your bank statement and the transactions marked as cleared.\n"
+"Are you sure you want to finish the reconciliation ?"
+msgstr ""
+"Будет закончена сверка операций по счёту и операции по выписке. Все "
+"отличающиеся операции будут отмечены как проверенные, а совпадающие — как "
+"сверенные. Закончить сверку операций?"
+
+#: kmymoney2.cpp:3165
+msgid "Confirm end of reconciliation"
+msgstr "Закончить сверку счёта"
+
+#: kmymoney2.cpp:3339
+msgid ""
+"You have closed this account. It remains in the system because you have "
+"transactions which still refer to it, but is not shown in the views. You can "
+"make it visible again by going to the View menu and selecting <b>Show all "
+"accounts</b> or by unselecting the <b>Don't show closed accounts</b> setting."
+msgstr ""
+"Вы закрыли счёт. Операции по нему остаются в базе данных, однако данные по "
+"нему не показываются в формах. Вы можете сделать видимыми закрытые счета, "
+"выбрав в меню «Вид» пункт <b>Показать все счета</b> или <b>Не показывать "
+"закрытые счета</b>."
+
+#: kmymoney2.cpp:3379
+msgid "<b>%1</b> cannot be moved to institution <b>%2</b>. Reason: %3"
+msgstr "Счёт <b>%1</b> не может быть прикреплён к учреждению <b>%2</b>: %3"
+
+#: kmymoney2.cpp:3393
+msgid "<b>%1</b> cannot be moved to <b>%2</b>. Reason: %3"
+msgstr "Счёт <b>%1</b> не может быть перемещён в <b>%2</b>: %3"
+
+#: kmymoney2.cpp:3408
+msgid "%1 YTD Account Transactions"
+msgstr "Операции по счёту «%1»"
+
+#: dialogs/kbalancechartdlg.cpp:71 kmymoney2.cpp:3409
+#: views/kforecastview.cpp:650 views/khomeview.cpp:276
+#: views/khomeview.cpp:1384 views/kreportsview.cpp:619
+msgid "Generated Report"
+msgstr "Отчёт"
+
+#: dialogs/rc.cpp:324 dialogs/settings/rc.cpp:80 kmymoney2.cpp:3411
+#: views/kreportsview.cpp:1062 views/rc.cpp:58 views/rc.cpp:59
+msgid "Transactions"
+msgstr "Операции"
+
+#: kmymoney2.cpp:3449
+#, c-format
+msgid "Unable to add scheduled transaction: %1"
+msgstr "Невозможно добавить запланированную операцию: %1"
+
+#: kmymoney2.cpp:3449
+msgid "Add scheduled transaction"
+msgstr "Добавить запланированную операцию"
+
+#: kmymoney2.cpp:3489
+msgid ""
+"You have entered a scheduled transaction date of <b>%1</b>. Because the "
+"scheduled transaction was last paid on <b>%2</b>, KMyMoney will "
+"automatically adjust the scheduled transaction date to the next date unless "
+"the last payment date is reset. Do you want to reset the last payment date?"
+msgstr ""
+"Вы указали дату платежа <b>%1</b>. Последний платёж по этому графику был <b>%"
+"2</b>. Дата платежа по графику будет автоматически скорректирована, если не "
+"будет сброшен последний платёж. Сбросить последний платёж?"
+
+#: kmymoney2.cpp:3489
+msgid "Reset Last Payment Date"
+msgstr "Сбросить последний платёж"
+
+#: kmymoney2.cpp:3499 kmymoney2.cpp:3519 kmymoney2.cpp:3531
+msgid "Unable to modify scheduled transaction '%1'"
+msgstr "Невозможно изменить запланированную операцию «%1»"
+
+#: kmymoney2.cpp:3543
+msgid "Are you sure you want to delete the scheduled transaction <b>%1</b>?"
+msgstr "Удалить запланированную операцию <b>%1</b>?"
+
+#: kmymoney2.cpp:3546
+msgid ""
+"In case of loan payments it is currently not possible to recreate the "
+"scheduled transaction."
+msgstr "Невозможно изменить график платежей по кредиту."
+
+#: kmymoney2.cpp:3555
+msgid "Unable to remove scheduled transaction '%1'"
+msgstr "Невозможно удалить график платежей «%1»"
+
+#: kmymoney2.cpp:3569
+#, c-format
+msgid ""
+"_: Copy of scheduled transaction name\n"
+"Copy of %1"
+msgstr "Копия графика %1"
+
+#: kmymoney2.cpp:3581 kmymoney2.cpp:4352
+msgid "Unable to duplicate transaction(s): %1, thrown in %2:%3"
+msgstr "Невозможно дублировать операцию: %1, ошибка в %2:%3"
+
+#: kmymoney2.cpp:3595
+msgid ""
+"Do you really want to skip the <b>%1</b> transaction scheduled for <b>%2</b>?"
+msgstr "Пропустить платёж по графику <b>%1</b> на <b>%2</b>?"
+
+#: kmymoney2.cpp:3605
+msgid "Unable to skip scheduled transaction <b>%1</b>."
+msgstr "Невозможно пропустить платёж по графику <b>%1</b>."
+
+#: kmymoney2.cpp:3618
+msgid "Unknown scheduled transaction '%1'"
+msgstr "Неизвестный график «%1»"
+
+#: kmymoney2.cpp:3673
+msgid ""
+"Are you sure you wish to stop this scheduled transaction from being entered "
+"into the register?\n"
+"\n"
+"KMyMoney will prompt you again next time it starts unless you manually enter "
+"it later."
+msgstr ""
+"Не создавать операции по этому графику платежей?\n"
+"Это предупреждение будет показано каждый раз при попытке создания операции."
+
+#: kmymoney2.cpp:3725 kmymoney2.cpp:3732
+msgid "Unable to enter scheduled transaction '%1'"
+msgstr "Невозможно ввести запланированную операцию «%1»"
+
+#: kmymoney2.cpp:3743 kmymoney2.cpp:3783
+msgid "New Payee"
+msgstr "Новый получатель"
+
+#: kmymoney2.cpp:3745
+msgid "Do you want to add <b>%1</b> as payer/receiver ?"
+msgstr "Добавить <b>%1</b> как получателя?"
+
+#: converter/mymoneystatementreader.cpp:892 kmymoney2.cpp:3747
+msgid "New payee/receiver"
+msgstr "Новый получатель"
+
+#: kmymoney2.cpp:3773
+msgid "Unable to add payee"
+msgstr "Невозможно добавить получателя"
+
+#: kmymoney2.cpp:3826
+msgid "Do you really want to remove the payee <b>%1</b>?"
+msgstr "Удалить получателя <b>%1</b>?"
+
+#: kmymoney2.cpp:3828
+msgid "Do you really want to remove all selected payees?"
+msgstr "Удалить всех выбранных получателей?"
+
+#: kmymoney2.cpp:3830
+msgid "Remove Payee"
+msgstr "Удаление получателя"
+
+#: kmymoney2.cpp:3870
+msgid ""
+"At least one transaction/scheduled transaction is still referenced by a "
+"payee. Currently you have all payees selected. However, at least one payee "
+"must remain so that the transaction/scheduled transaction can be reassigned."
+msgstr ""
+"Этот получатель указан в как минимум одной операции. Для переназначения "
+"получателя по операции необходимо выбрать другого получателя."
+
+#: kmymoney2.cpp:3925
+msgid "Unable to reassign payee of transaction/split"
+msgstr "Невозможно переназначить получателя"
+
+#: converter/mymoneyqifreader.cpp:534 converter/mymoneystatementreader.cpp:959
+#: kmymoney2.cpp:3926 kmymoney2.cpp:3983 views/kbudgetview.cpp:636
+#: views/kbudgetview.cpp:737 views/kbudgetview.cpp:751
+#: views/kpayeesview.cpp:519 views/kpayeesview.cpp:870
+msgid "thrown in"
+msgstr "добавлено"
+
+#: kmymoney2.cpp:3982
+msgid "Unable to remove payee(s)"
+msgstr "Невозможно удалить получателя"
+
+#: kmymoney2.cpp:3990
+msgid "Enter ISO 4217 code for the new currency"
+msgstr "Введите код валюты по ISO 4217"
+
+#: kmymoney2.cpp:3999
+#, c-format
+msgid "Cannot create new currency. %1"
+msgstr "Невозможно добавить валюту: %1"
+
+#: kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, c-format
+msgid "Cannot rename currency. %1"
+msgstr "Невозможно переименовать валюту: %1"
+
+#: kmymoney2.cpp:4039
+msgid "Cannot delete currency %1. %2"
+msgstr "Невозможно удалить валюту «%1»: %2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Cannot set %1 as base currency: %2"
+msgstr "Невозможно использовать «%1» как основную валюту: %2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Set base currency"
+msgstr "Основная валюта"
+
+#: kmymoney2.cpp:4065
+#, c-format
+msgid "Budget %1"
+msgstr "Бюджет %1"
+
+#: kmymoney2.cpp:4075
+msgid "Budget %1 (%2)"
+msgstr "Бюджет %1 (%2)"
+
+#: kmymoney2.cpp:4090 kmymoney2.cpp:4139
+msgid "Unable to add budget: %1, thrown in %2:%3"
+msgstr "Невозможно добавить бюджет: %1, ошибка в %2:%3"
+
+#: kmymoney2.cpp:4105
+msgid "Do you really want to remove the budget <b>%1</b>?"
+msgstr "Удалить бюджет <b>%1</b>?"
+
+#: kmymoney2.cpp:4107
+msgid "Do you really want to remove all selected budgets?"
+msgstr "Удалить все выбранные бюджеты?"
+
+#: kmymoney2.cpp:4109
+msgid "Remove Budget"
+msgstr "Удаление бюджета"
+
+#: kmymoney2.cpp:4122
+msgid "Unable to remove budget: %1, thrown in %2:%3"
+msgstr "Невозможно удалить бюджет: %1, ошибка в %2:%3"
+
+#: kmymoney2.cpp:4134 views/kreportsview.cpp:659
+#, c-format
+msgid "Copy of %1"
+msgstr "Копия %1"
+
+#: kmymoney2.cpp:4164
+msgid "Select year"
+msgstr "Выбор года"
+
+#: kmymoney2.cpp:4164
+msgid "Budget year"
+msgstr "Бюджетный год"
+
+#: kmymoney2.cpp:4176 kmymoney2.cpp:4214 kmymoney2.cpp:4274
+msgid "Unable to modify budget: %1, thrown in %2:%3"
+msgstr "Невозможно изменить бюджет: %1, ошибка в %2:%3"
+
+#: kmymoney2.cpp:4192 kmymoney2.cpp:4250
+msgid ""
+"The current budget already contains data. Continuing will replace all "
+"current values of this budget."
+msgstr ""
+"Текущий бюджет уже содержит данные. Если продолжите, все данные бюджета "
+"будут заменены."
+
+#: kmymoney2.cpp:4222
+msgid ""
+"Please be aware that changes made in the following dialog affect all KDE "
+"applications not only KMyMoney."
+msgstr ""
+"Внимание! Изменения, сделанные в следующем диалоге будут применяться для "
+"всех приложений KDE, а не только для KMyMoney."
+
+#: kmymoney2.cpp:4292
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to delete the transactions anyway?"
+msgstr ""
+"Как минимум одна из статей в разделении операции была сверена. Удалить эту "
+"операцию?"
+
+#: kmymoney2.cpp:4295 views/kgloballedgerview.cpp:1043
+msgid "Transaction already reconciled"
+msgstr "Операция уже сверена"
+
+#: kmymoney2.cpp:4301
+msgid "Do you really want to delete the selected transaction?"
+msgstr "Удалить выбранную операцию?"
+
+#: kmymoney2.cpp:4303
+msgid "Do you really want to delete all %1 selected transactions?"
+msgstr "Удалить %1 выбранных операций?"
+
+#: kmymoney2.cpp:4305
+msgid "Delete transaction"
+msgstr "Удаление операции"
+
+#: kmymoney2.cpp:4306
+msgid "Deleting transactions"
+msgstr "Удаление операций"
+
+#: kmymoney2.cpp:4321
+msgid "Duplicating transactions"
+msgstr "Дублирование операции"
+
+#: kmymoney2.cpp:4378
+msgid "Unable to delete transaction(s): %1, thrown in %2:%3"
+msgstr "Невозможно удалить операцию: %1, ошибка в %2:%3 "
+
+#: kmymoney2.cpp:4452 kmymoney2.cpp:4622
+msgid "Unable to modify transaction: %1, thrown in %2:%3"
+msgstr "Невозможно изменить операцию: %1, ошибка в %2:%3 "
+
+#: kmymoney2.cpp:4514
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling and<br>- <b>Cancel</b> returns to the "
+"transaction editor.<p>You can also select an option to save the transaction "
+"automatically when e.g. selecting another transaction."
+msgstr ""
+"Отменить сделанные изменения в операции? <p>- <b>Да</b> — отменить изменения;"
+"<br>- <b>Нет</b> — сохранить изменения; <br>- <b>Отмена</b> — вернуться к "
+"редактированию операции. <p>Вы можете установить автоматическое сохранение "
+"операций, например, при переходе на следующую операцию."
+
+#: kmymoney2.cpp:4514 kmymoney2.cpp:4517
+msgid "Cancel transaction edit"
+msgstr "Отмена редактирования"
+
+#: kmymoney2.cpp:4517
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling.<p>You can also select an option to save the "
+"transaction automatically when e.g. selecting another transaction."
+msgstr ""
+"Отменить сделанные изменения в операции? <p>- <b>Да</b> — отменить изменения;"
+"<br>- <b>Нет</b> — сохранить изменения. <p>Вы можете установить "
+"автоматическое сохранение операций, например, при переходе на следующую "
+"операцию."
+
+#: kmymoney2.cpp:4667
+msgid "Unable to accept transaction: %1, thrown in %2:%3"
+msgstr "Невозможно принять операцию: %1, ошибка в %2:%3"
+
+#: kmymoney2.cpp:4846
+msgid "Unable to unmatch the selected transactions"
+msgstr "Невозможно отменить привязку выбранных операций"
+
+#: kmymoney2.cpp:4885
+msgid "No manually entered transaction selected for matching"
+msgstr "Для привязки не указана введённая вручную операция"
+
+#: kmymoney2.cpp:4887
+msgid "No imported transaction selected for matching"
+msgstr "Для привязки не указана импортированная операция"
+
+#: kmymoney2.cpp:4895
+msgid "Unable to match the selected transactions"
+msgstr "Невозможно связать выбранные операции"
+
+#: kmymoney2.cpp:5097
+msgid "Create a new transaction"
+msgstr "Создать операцию"
+
+#: kmymoney2.cpp:5163
+msgid "Duplicate the current selected transactions"
+msgstr "Дублировать операцию"
+
+#: kmymoney2.cpp:5223
+msgid ""
+"_: Button text for unmatch transaction\n"
+"Unmatch"
+msgstr "Отменить привязку"
+
+#: kmymoney2.cpp:5451 kmymoney2.cpp:5473
+msgid "Goto '%1'"
+msgstr "Перейти к «%1»"
+
+#: kmymoney2.cpp:5582
+msgid "Running consistency check..."
+msgstr "Проверка целостности..."
+
+#: kmymoney2.cpp:5590
+#, c-format
+msgid "Consistency check failed: %1"
+msgstr "Ошибка проверки целостности: %1"
+
+#: kmymoney2.cpp:5594
+msgid "Consistency check result"
+msgstr "Результат проверки целостности"
+
+#: kmymoney2.cpp:5603
+msgid "Checking for overdue scheduled transactions..."
+msgstr "Проверка просроченных платежей..."
+
+#: kmymoney2.cpp:5740
+msgid ""
+"You must first select a KMyMoney file before you can import a statement."
+msgstr "Вы должны выбрать файл KMyMoney для импорта выписки."
+
+#: kmymoney2.cpp:5746
+msgid "Importing a statement via Web Connect"
+msgstr "Импорт выписки через Web Connect"
+
+#: kmymoney2.cpp:5759
+msgid ""
+"Unable to import %1 using %2 plugin. The plugin returned the following "
+"error: %3"
+msgstr "Невозможно импортировать %1 через модуль %2. Ошибка: %3"
+
+#: kmymoney2.cpp:5759 plugins/ofximport/ofximporterplugin.cpp:646
+msgid "Importing error"
+msgstr "Ошибка импорта"
+
+#: kmymoney2.cpp:5780
+msgid "All messages have been enabled."
+msgstr "Будут показываться все сообщения."
+
+#: kmymoney2.cpp:5780
+msgid "All messages"
+msgstr "Все сообщения"
+
+#: kmymoney2.cpp:5855
+msgid "Auto saving..."
+msgstr "Автоматическое сохранение..."
+
+#: kmymoney2.cpp:5913
+msgid "Unable to setup online parameters for account ''%1'"
+msgstr "Невозможно установить параметры онлайнового доступа для счёта «%1»: "
+
+#: kmymoney2.cpp:5928
+msgid ""
+"Do you really want to remove the mapping of account <b>%1</b> to an online "
+"account? Depending on the details of the online banking method used, this "
+"action cannot be reverted."
+msgstr ""
+"Удалить привязку счёта <b>%1</b> к онлайновому счёту? Иногда, в зависимости "
+"от особенностей связи банк-клиент, эта операция не может быть отменена."
+
+#: kmymoney2.cpp:5928
+msgid "Remove mapping to online account"
+msgstr "Удаление привязки к онлайновому счёту"
+
+#: kmymoney2.cpp:5939
+#, c-format
+msgid "Unable to unmap account from online account: %1"
+msgstr "Невозможно отменить привязку к онлайновому счёту: %1"
+
+#: kmymoney2.cpp:5956
+msgid " (Brokerage)"
+msgstr " (комиссия)"
+
+#: kmymoney2.cpp:5957
+msgid ""
+"You try to map a brokerage account to an online account. This is usually not "
+"advisable. In general, the investment account should be mapped to the online "
+"account. Please cancel if you intended to map the investment account, "
+"continue otherwise"
+msgstr ""
+"Вы пытаетесь привязать счёт комиссии брокеру к онлайновому счёту. Это не "
+"рекомендуется делать. Обычно к онлайновому счёту привязывается "
+"инвестиционный счёт. Отмените, если намереваетесь привязать инвестиционный "
+"счёт, или продолжите."
+
+#: kmymoney2.cpp:5957
+msgid "Mapping brokerage account"
+msgstr "Счёт комиссии"
+
+#: kmymoney2.cpp:5964
+msgid "Select online banking plugin"
+msgstr "Выбор модуля подключения банк-клиент"
+
+#: kmymoney2.cpp:6005
+#, c-format
+msgid "Unable to map account to online account: %1"
+msgstr "Невозможно осуществить привязку к онлайновому счёту: %1"
+
+#: converter/mymoneyqifreader.cpp:407 converter/mymoneytemplate.cpp:73
+#: views/kmymoneyview.cpp:590
+msgid "Error while loading file '%1'!"
+msgstr "Ошибка загрузки файла «%1»!"
+
+#: converter/mymoneyqifreader.cpp:409 converter/mymoneyqifreader.cpp:965
+#: converter/mymoneytemplate.cpp:75 views/kmymoneyview.cpp:592
+msgid "File access error"
+msgstr "Ошибка открытия файла"
+
+#: converter/mymoneytemplate.cpp:84
+msgid "<b>%1</b> is not a template file."
+msgstr "Файл <b>%1</b> не является планом счетов."
+
+#: converter/mymoneytemplate.cpp:85 views/kmymoneyview.cpp:603
+msgid "Filetype Error"
+msgstr "Ошибка формата"
+
+#: converter/mymoneytemplate.cpp:93
+msgid "Error while reading template file <b>%1</b> in line %2, column %3"
+msgstr "Ошибка обработки плана счетов <b>%1</b> на строке %2, позиции %3"
+
+#: converter/mymoneytemplate.cpp:94
+msgid "Template Error"
+msgstr "Ошибка плана счетов"
+
+#: converter/mymoneytemplate.cpp:101
+msgid "File '%1' not found!"
+msgstr "Файл «%1» не найден!"
+
+#: converter/mymoneytemplate.cpp:142
+msgid "Invalid tag <b>%1</b> in template file <b>%2</b>!"
+msgstr "Неверный тег <b>%1</b> в файле плана счетов <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:214
+#, c-format
+msgid "Loading template %1"
+msgstr "Загрузка плана счетов %1"
+
+#: converter/mymoneytemplate.cpp:241
+msgid "Invalid top-level account type <b>%1</b> in template file <b>%2</b>!"
+msgstr ""
+"Неверный тип счёта верхнего уровня <b>%1</b> в файле плана счетов <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:309
+msgid ""
+"Invalid flag type <b>%1</b> for account <b>%3</b> in template file <b>%2</b>!"
+msgstr "Неверный тип <b>%1</b> счёта <b>%3</b> в файле плана счетов <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:398 converter/mymoneytemplate.cpp:401
+#: views/kmymoneyview.cpp:1151 views/kmymoneyview.cpp:1154
+msgid "Unable to write changes to '%1'"
+msgstr "Невозможно сохранить изменения в «%1»"
+
+#: converter/mymoneytemplate.cpp:407 views/kmymoneyview.cpp:1162
+msgid "Unable to upload to '%1'"
+msgstr "Невозможно разместить «%1»"
+
+#: converter/mymoneyqifwriter.cpp:70
+msgid ""
+"Unexpected exception '%1' thrown in %2, line %3 caught in MyMoneyQifWriter::"
+"write()"
+msgstr ""
+"Ошибка «%1» в %2 (строка %3) при вызове функции MyMoneyQifWriter::write()"
+
+#: converter/mymoneyqifwriter.cpp:80
+msgid "Unable to open file '%1' for writing"
+msgstr "Невозможно записать в файл «%1»"
+
+#: converter/webpricequote.cpp:340
+#, c-format
+msgid "Symbol found: %1"
+msgstr "Найден код: %1"
+
+#: converter/webpricequote.cpp:368
+msgid "Price found: %1 (%2)"
+msgstr "Найден курс: %1 (%2)"
+
+#: converter/webpricequote.cpp:380
+#, c-format
+msgid "Date found: %1"
+msgstr "Найдена дата: %1"
+
+#: converter/webpricequote.cpp:397 converter/webpricequote.cpp:403
+#, c-format
+msgid "Unable to update price for %1"
+msgstr "Невозможно обновить курс финансового инструмента %1"
+
+#: converter/mymoneyqifreader.cpp:170
+msgid ""
+"_: Category name\n"
+"Reinvested dividend"
+msgstr "Реинвестирование дохода"
+
+#: converter/mymoneyqifreader.cpp:173
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (long term)"
+msgstr "Реинвестирование дохода (долгосрочное)"
+
+#: converter/mymoneyqifreader.cpp:176
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (short term)"
+msgstr "Реинвестирование дохода (краткосрочное)"
+
+#: converter/mymoneyqifreader.cpp:179
+msgid ""
+"_: Category name\n"
+"Dividend"
+msgstr "Дивиденды"
+
+#: converter/mymoneyqifreader.cpp:182
+msgid ""
+"_: Category name\n"
+"Interest"
+msgstr "Проценты"
+
+#: converter/mymoneyqifreader.cpp:185
+msgid ""
+"_: Category name\n"
+"Capital Gain (short term)"
+msgstr "Доход от инвестиций (краткосрочный)"
+
+#: converter/mymoneyqifreader.cpp:188
+msgid ""
+"_: Category name\n"
+"Capital Gain (mid term)"
+msgstr "Доход от инвестиций (среднесрочный)"
+
+#: converter/mymoneyqifreader.cpp:191
+msgid ""
+"_: Category name\n"
+"Capital Gain (long term)"
+msgstr "Доход от инвестиций (долгосрочный)"
+
+#: converter/mymoneyqifreader.cpp:194
+msgid ""
+"_: Category name\n"
+"Returned capital"
+msgstr "Возврат инвестиций"
+
+#: converter/mymoneyqifreader.cpp:197
+msgid ""
+"_: Category name\n"
+"Miscellaneous income"
+msgstr "Прочие доходы"
+
+#: converter/mymoneyqifreader.cpp:200
+msgid ""
+"_: Category name\n"
+"Miscellaneous expense"
+msgstr "Прочие расходы"
+
+#: converter/mymoneyqifreader.cpp:203
+msgid ""
+"_: Category name\n"
+"Investment fees"
+msgstr "Комиссия брокеру"
+
+#: converter/mymoneyqifreader.cpp:205
+#, c-format
+msgid "Unknown QIF type %1"
+msgstr "Неизвестный тип QIF %1"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Date format selection"
+msgstr "Выбор формата даты"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Pick the date format that suits your input file"
+msgstr "Укажите формат даты, используемый в файле"
+
+#: converter/mymoneyqifreader.cpp:366
+msgid "Importing QIF ..."
+msgstr "Импорт QIF..."
+
+#: converter/mymoneyqifreader.cpp:442
+msgid "Reading QIF ..."
+msgstr "Чтение QIF..."
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Adding transactions"
+msgstr "Добавление операций"
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Now adding the transactions to your ledger..."
+msgstr "Добавление операций в журнал..."
+
+#: converter/mymoneyqifreader.cpp:533
+msgid "Unable to add transactions"
+msgstr "Невозможно добавить операции"
+
+#: converter/mymoneyqifreader.cpp:567
+msgid ""
+"_: QIF tag for liability account\n"
+"Oth L"
+msgstr "Oth L"
+
+#: converter/mymoneyqifreader.cpp:572
+msgid ""
+"_: QIF tag for category\n"
+"Cat"
+msgstr "Cat"
+
+#: converter/mymoneyqifreader.cpp:575
+msgid ""
+"_: QIF tag for security\n"
+"Security"
+msgstr "Security"
+
+#: converter/mymoneyqifreader.cpp:578
+msgid ""
+"_: QIF tag for investment account\n"
+"Invst"
+msgstr "Invst"
+
+#: converter/mymoneyqifreader.cpp:581
+msgid ""
+"_: QIF tag for prices\n"
+"Prices"
+msgstr "Prices"
+
+#: converter/mymoneyqifreader.cpp:599
+msgid ""
+"_: QIF tag for a class\n"
+"Class"
+msgstr "Class"
+
+#: converter/mymoneyqifreader.cpp:753 converter/mymoneyqifreader.cpp:2203
+msgid ""
+"The %1 account currently has an opening balance of %2. This QIF file reports "
+"an opening balance of %3. Would you like to overwrite the current balance "
+"with the one from the QIF file?"
+msgstr ""
+"Остаток на начало по счёту %1 составляет %2. В файле QIF остаток на начало — "
+"%3. Использовать остаток из файла QIF?"
+
+#: converter/mymoneyqifreader.cpp:754 converter/mymoneyqifreader.cpp:2204
+msgid "Overwrite opening balance"
+msgstr "Остаток на начало"
+
+#: converter/mymoneyqifreader.cpp:879 converter/mymoneyqifreader.cpp:890
+#: converter/mymoneyqifreader.cpp:914
+msgid "Autogenerated by QIF importer"
+msgstr "Создано при импорте из QIF"
+
+#: converter/mymoneyqifreader.cpp:907
+msgid "QIF imported, no account name supplied"
+msgstr "Не указано название счёта при импорте из QIF"
+
+#: converter/mymoneyqifreader.cpp:940
+msgid ""
+"KMyMoney has imported a second opening balance transaction into account <b>%"
+"1</b> which differs from the one found already on file. Please correct this "
+"manually once the import is done."
+msgstr ""
+"Была импортирована вторая операция открытия баланса на счёт <b>%1</b>, "
+"который отличается от счёта, найденного в файле. Исправьте операцию вручную "
+"после окончания импорта."
+
+#: converter/mymoneyqifreader.cpp:940
+msgid "Opening balance problem"
+msgstr "Остатке на начало"
+
+#: converter/mymoneyqifreader.cpp:963
+msgid "Error while creating opening balance transaction"
+msgstr "Ошибка создания операции начального остатка"
+
+#: converter/mymoneyqifreader.cpp:1029 converter/mymoneyqifreader.cpp:1276
+msgid ""
+"The date entry \"%1\" read from the file cannot be interpreted through the "
+"current date profile setting of \"%2\".\n"
+"\n"
+"Pressing \"Continue\" will assign todays date to the transaction. Pressing "
+"\"Cancel\" will abort the import operation. You can then restart the import "
+"and select a different QIF profile or create a new one."
+msgstr ""
+"Дата «%1» из файла не может быть обработана через профиль «%2».\n"
+"\n"
+"Нажмите «Продолжить» для установки сегодняшней даты для этой операции или "
+"«Отмена» для прерывания операции импорта. Вы можете изменить профиль QIF и "
+"повторить импорт данных."
+
+#: converter/mymoneyqifreader.cpp:1035 converter/mymoneyqifreader.cpp:1282
+msgid "Invalid date format"
+msgstr "Неверный формат даты"
+
+#: converter/mymoneyqifreader.cpp:1398
+#: converter/mymoneystatementreader.cpp:589
+#: converter/mymoneystatementreader.cpp:592
+msgid "Statement Importer"
+msgstr "Импорт выписки"
+
+#: converter/mymoneyqifreader.cpp:1413
+#: converter/mymoneystatementreader.cpp:644
+msgid ""
+"This investment account does not contain the \"%1\" security. Transactions "
+"involving this security will be ignored."
+msgstr ""
+"На инвестиционном счёте не учитывается ценная бумага «%1». Все операции по "
+"ней будут проигнорированы."
+
+#: converter/mymoneyqifreader.cpp:1415
+#: converter/mymoneystatementreader.cpp:612
+#: converter/mymoneystatementreader.cpp:644
+msgid "Security not found"
+msgstr "Ценная бумага не найдена"
+
+#: converter/mymoneyqifreader.cpp:2021
+msgid "%1 (Investment)"
+msgstr "%1 (инвестиции)"
+
+#: converter/mymoneyqifreader.cpp:2022
+msgid "Autogenerated by QIF importer from type Mutual account entry"
+msgstr "Создано при импорте из QIF (счёт взаимного фонда)"
+
+#: converter/mymoneyqifreader.cpp:2085 converter/mymoneyqifreader.cpp:2228
+msgid "account"
+msgstr "счёт"
+
+#: converter/mymoneyqifreader.cpp:2086
+msgid "al"
+msgstr "al"
+
+#: converter/mymoneyqifreader.cpp:2093
+msgid "category"
+msgstr "статья"
+
+#: converter/mymoneyqifreader.cpp:2094
+msgid "ei"
+msgstr "ei"
+
+#: converter/mymoneyqifreader.cpp:2095
+msgid "Category selection"
+msgstr "Выбор статьи"
+
+#: converter/mymoneyqifreader.cpp:2110
+msgid "Account \"%1\" disappeared: "
+msgstr "Исчез счёт «%1»: "
+
+#: converter/mymoneyqifreader.cpp:2131
+msgid "The %1 '%2' does not exist. Do you want to create it?"
+msgstr "Счёт «%2» не существует. Создать счёт?"
+
+#: converter/mymoneyqifreader.cpp:2140
+#, c-format
+msgid "Select %1"
+msgstr "Выбор счёта"
+
+#: converter/mymoneyqifreader.cpp:2142
+msgid ""
+"The %1 <b>%2</b> currently exists. Do you want to import transactions to "
+"this account?"
+msgstr "Счёт <b>%2</b> уже существует. Импортировать операции на этот счёт?"
+
+#: converter/mymoneyqifreader.cpp:2147
+msgid ""
+"The %1 <b>%2</b> currently does not exist. You can create a new %3 by "
+"pressing the <b>Create</b> button or select another %4 manually from the "
+"selection box."
+msgstr ""
+"Счёт <b>%2</b> не существует. Вы можете создать новый счёт, нажав на кнопку "
+"<b>Создать</b> или выбрать другой счёт из списка."
+
+#: converter/mymoneyqifreader.cpp:2154
+#, c-format
+msgid "Import transactions to %1"
+msgstr "Импорт операций на %1"
+
+#: converter/mymoneyqifreader.cpp:2155
+msgid ""
+"No %1 information has been found in the selected QIF file. Please select an "
+"account using the selection box in the dialog or create a new %2 by pressing "
+"the <b>Create</b> button."
+msgstr ""
+"Нет сведений о %1 в файле QIF. Выберите счёт из списка или создайте новый "
+"счёт, нажав кнопку <b>Создать</b>."
+
+#: converter/mymoneyqifreader.cpp:2229
+msgid "You must select or create an account."
+msgstr "Выберите или создайте счёт."
+
+#: converter/mymoneyqifreader.cpp:2231
+msgid "You must select or create a category."
+msgstr "Выберите или создайте статью."
+
+#: converter/mymoneystatementreader.cpp:100
+msgid "_Fees"
+msgstr "_Комиссия"
+
+#: converter/mymoneystatementreader.cpp:106
+msgid "_Dividend"
+msgstr "_Дивиденды"
+
+#: converter/mymoneystatementreader.cpp:289
+#, c-format
+msgid "Importing statement for account %1"
+msgstr "Импорт выписки по счёту %1"
+
+#: converter/mymoneystatementreader.cpp:291
+msgid "Importing statement without transactions"
+msgstr "Импорт выписки без операций"
+
+#: converter/mymoneystatementreader.cpp:385
+msgid " Statement balance is not contained in statement."
+msgstr " Выписка не содержит остатка."
+
+#: converter/mymoneystatementreader.cpp:387
+msgid " Statement balance on %1 is reported to be %2"
+msgstr " Остаток по выписке на %1 — %2"
+
+#: converter/mymoneystatementreader.cpp:389
+msgid " Transactions"
+msgstr " Операции"
+
+#: converter/mymoneystatementreader.cpp:390
+msgid " %1 processed"
+msgstr " обработано: %1"
+
+#: converter/mymoneystatementreader.cpp:391
+msgid " %1 added"
+msgstr " добавлено: %1"
+
+#: converter/mymoneystatementreader.cpp:392
+msgid " %1 matched"
+msgstr " уже введённых: %1"
+
+#: converter/mymoneystatementreader.cpp:393
+msgid " %1 duplicates"
+msgstr " дубликатов: %1"
+
+#: converter/mymoneystatementreader.cpp:394
+msgid " Payees"
+msgstr " Получатели"
+
+#: converter/mymoneystatementreader.cpp:395
+msgid " %1 created"
+msgstr " новых: %1"
+
+#: converter/mymoneystatementreader.cpp:483
+#, c-format
+msgid "Error creating security record: %1"
+msgstr "Ошибка создания защищённой записи: %1"
+
+#: converter/mymoneystatementreader.cpp:612
+msgid ""
+"This imported statement contains investment transactions with no security. "
+"These transactions will be ignored."
+msgstr ""
+"В импортированной выписке в инвестиционном счёте не указана ценная бумага. "
+"Все операции по этому счёту будут проигнорированы."
+
+#: converter/mymoneystatementreader.cpp:803
+msgid "(Fees) "
+msgstr "(комиссия)"
+
+#: converter/mymoneystatementreader.cpp:880
+msgid ""
+"Do you want to add \"%1\" as payee/receiver?\n"
+"\n"
+msgstr ""
+"Добавить «%1» в список получателей?\n"
+"\n"
+
+#: converter/mymoneystatementreader.cpp:881
+msgid ""
+"Selecting \"Yes\" will create the payee, \"No\" will skip creation of a "
+"payee record and remove the payee information from this transaction. "
+"Selecting \"Cancel\" aborts the import operation.\n"
+"\n"
+"If you select \"No\" here and mark the \"Don't ask again\" checkbox, the "
+"payee information for all following transactions referencing \"%1\" will be "
+"removed."
+msgstr ""
+"Нажмите «Да» для добавления получателя, «Нет» для пропуска добавления "
+"получателя и удаления получателя из операции. При нажатии «Отмена» импорт "
+"будет прерван.\n"
+"\n"
+"Если вы нажмёте на «Нет» и включите флажок «Не спрашивать снова» получатель "
+"будет удалён из всех следующих операций."
+
+#: converter/mymoneystatementreader.cpp:917
+msgid "Save Category"
+msgstr "Сохранить статью"
+
+#: converter/mymoneystatementreader.cpp:918
+msgid "No Category"
+msgstr "Статья не указана"
+
+#: converter/mymoneystatementreader.cpp:919 dialogs/rc.cpp:4
+msgid "Abort"
+msgstr "Отменить"
+
+#: converter/mymoneystatementreader.cpp:926
+msgid "Please select a default category for payee '%1':"
+msgstr "Выберите статью по умолчанию для получателя «%1»:"
+
+#: converter/mymoneystatementreader.cpp:958
+msgid "Unable to add payee/receiver"
+msgstr "Невозможно добавить получателя"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid ""
+"KMyMoney has found a scheduled transaction named <b>%1</b> which matches an "
+"imported transaction. Do you want KMyMoney to enter this schedule now so "
+"that the transaction can be matched? "
+msgstr ""
+"Обнаружена операция по графику платежей <b>%1</b>, которая соответствует "
+"импортируемой операции. Ввести импортируемую операцию и пометить её как уже "
+"введённую?"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid "Schedule found"
+msgstr "График платежей"
+
+#: converter/mymoneystatementreader.cpp:1219
+msgid "Problem adding or matching imported transaction with id '%1': %2"
+msgstr "Ошибка добавления или связи с импортируемой операцией «%1»: %2"
+
+#: converter/mymoneystatementreader.cpp:1268
+msgid ""
+"<b>You have downloaded a statement for the following account:</b><br><br>"
+msgstr "<b>Вы загрузили выписку для следующего счёта:</b><br><br>"
+
+#: converter/mymoneystatementreader.cpp:1269
+#, c-format
+msgid " - Account Name: %1"
+msgstr " - Название: %1"
+
+#: converter/mymoneystatementreader.cpp:1270
+#, c-format
+msgid " - Account Type: %1"
+msgstr " - Тип: %1"
+
+#: converter/mymoneystatementreader.cpp:1271
+#, c-format
+msgid " - Account Number: %1"
+msgstr " - Номер: %1"
+
+#: converter/mymoneystatementreader.cpp:1279
+msgid "Do you want to import transactions to this account?"
+msgstr "Импортировать операции по этому счёту?"
+
+#: converter/mymoneystatementreader.cpp:1281
+msgid ""
+"KMyMoney cannot determine which of your accounts to use. You can create a "
+"new account by pressing the <b>Create</b> button or select another one "
+"manually from the selection box below."
+msgstr ""
+"Невозможно найти счёт, соответствующий выписке. Вы можете создать новый "
+"счёт, нажав кнопку <b>Создать</b> или выбрать соответствующий счёт из списка."
+
+#: converter/mymoneystatementreader.cpp:1287
+msgid ""
+"No account information has been found in the selected statement file. Please "
+"select an account using the selection box in the dialog or create a new "
+"account by pressing the <b>Create</b> button."
+msgstr ""
+"В выписке не содержится информация о счёте. Вы можете создать новый счёт, "
+"нажав кнопку <b>Создать</b> или выбрать соответствующий счёт из списка."
+
+#: converter/mymoneystatementreader.cpp:1294
+msgid "Import transactions"
+msgstr "Импорт операций"
+
+#: converter/mymoneystatementreader.cpp:1330
+msgid ""
+"You must select an account, create a new one, or press the <b>Abort</b> "
+"button."
+msgstr ""
+"Вы должны выбрать существующий счёт, создать новый или нажать кнопку "
+"<b>Отменить</b>."
+
+#: converter/mymoneygncreader.cpp:119
+msgid "%1: Sorry. This importer cannot handle version %2 of element %3"
+msgstr "%1: не поддерживается импорт версии %2 элемента %3."
+
+#: converter/mymoneygncreader.cpp:193
+#, c-format
+msgid "Account%1"
+msgstr "Счёт%1"
+
+#: converter/mymoneygncreader.cpp:197
+#, c-format
+msgid "Stock%1"
+msgstr "Ценные бумаги%1"
+
+#: converter/mymoneygncreader.cpp:206
+#, c-format
+msgid "Payee%1"
+msgstr "Получатель%1"
+
+#: converter/mymoneygncreader.cpp:212
+#, c-format
+msgid "Schedule%1"
+msgstr "График%1"
+
+#: converter/mymoneygncreader.cpp:262
+msgid "This version of the importer cannot handle multi-book files."
+msgstr "Импорт из нескольких файлов пока не поддерживается."
+
+#: converter/mymoneygncreader.cpp:912
+msgid "Invalid header for file. Should be 'gnc-v2'"
+msgstr "Неверный заголовок файла. Файл должен начинаться с «gnc-v2»"
+
+#: converter/mymoneygncreader.cpp:937 converter/mymoneygncreader.cpp:972
+#: converter/mymoneygncreader.cpp:1062
+#, c-format
+msgid ""
+"Import failed:\n"
+"\n"
+"%1"
+msgstr ""
+"Ошибка импорта\n"
+"\n"
+"%1"
+
+#: converter/mymoneygncreader.cpp:1065
+msgid "Import complete"
+msgstr "Импорт завершён"
+
+#: converter/mymoneygncreader.cpp:1120
+msgid "Disguise your wealth"
+msgstr "Сокрытие финансового состояния"
+
+#: converter/mymoneygncreader.cpp:1121
+msgid ""
+"Each monetary value on your file will be multiplied by a random number "
+"between 0.01 and 1.99\n"
+"with a different value used for each transaction. In addition, to further "
+"disguise the true\n"
+"values, you may enter a number between %1 and %2 which will be applied to "
+"all values.\n"
+"These numbers will not be stored in the file."
+msgstr ""
+"Каждая сумма в файле будет умножено на случайное число от 0,01 до 1.99\n"
+"Кроме того, вы можете сами указать множитель между %1 и %2 для всех сумм.\n"
+"Эти числа не сохраняются в файле."
+
+#: converter/mymoneygncreader.cpp:1135
+msgid "Loading commodities..."
+msgstr "Загрузка финансовых инструментов..."
+
+#: converter/mymoneygncreader.cpp:1160
+msgid "Loading prices..."
+msgstr "Загрузка курсов..."
+
+#: converter/mymoneygncreader.cpp:1164 converter/mymoneygncreader.cpp:1171
+msgid "Imported History"
+msgstr "История курсов"
+
+#: converter/mymoneygncreader.cpp:1251
+#, c-format
+msgid "Current importer does not recognize GnuCash account type %1"
+msgstr "Невозможно определить тип счёта %1 в файле GnuCash"
+
+#: converter/mymoneygncreader.cpp:1471
+msgid "Imported Transaction"
+msgstr "Операции"
+
+#: converter/mymoneygncreader.cpp:1519
+msgid "Loading templates..."
+msgstr "Загрузка планов счетов..."
+
+#: converter/mymoneygncreader.cpp:1531
+msgid "Unknown payee"
+msgstr "Неизвестный получатель"
+
+#: converter/mymoneygncreader.cpp:1723
+msgid "Loading schedules..."
+msgstr "Загрузка графиков платежей..."
+
+#: converter/mymoneygncreader.cpp:1735
+#, c-format
+msgid "Can't find template transaction for schedule %1"
+msgstr "Невозможно найти шаблон операции для графика платежей %1"
+
+#: converter/mymoneygncreader.cpp:1910
+msgid "Reorganizing accounts..."
+msgstr "Реорганизация счетов..."
+
+#: converter/mymoneygncreader.cpp:1972
+msgid ""
+"Your main currency seems to be %1 (%2); do you want to set this as your base "
+"currency?"
+msgstr ""
+"Основная валюта определена как %1 (%2). Установить эту валюту как основную в "
+"вашем файле?"
+
+#: converter/mymoneygncreader.cpp:1993
+msgid "More"
+msgstr "Дополнительно"
+
+#: converter/mymoneygncreader.cpp:1997
+msgid "Save Report"
+msgstr "Сохранить отчёт"
+
+#: converter/mymoneygncreader.cpp:2017
+msgid ""
+"Problems were encountered in converting schedule '%1'.\n"
+"Do you want to review or edit it now?"
+msgstr ""
+"Ошибка преобразования графика платежей «%1».\n"
+"Изменить график?"
+
+#: converter/mymoneygncreader.cpp:2039
+msgid ""
+"Found:\n"
+"\n"
+msgstr ""
+"Найдено:\n"
+"\n"
+
+#: converter/mymoneygncreader.cpp:2040
+msgid " commodities (equities)\n"
+msgstr " финансовых инструментов\n"
+
+#: converter/mymoneygncreader.cpp:2041
+msgid " prices\n"
+msgstr " курсов\n"
+
+#: converter/mymoneygncreader.cpp:2042
+msgid " accounts\n"
+msgstr " счетов\n"
+
+#: converter/mymoneygncreader.cpp:2043
+msgid " transactions\n"
+msgstr " операций\n"
+
+#: converter/mymoneygncreader.cpp:2044
+msgid " schedules\n"
+msgstr " графиков платежей\n"
+
+#: converter/mymoneygncreader.cpp:2047
+msgid "No inconsistencies were detected"
+msgstr "Противоречий не найдено"
+
+#: converter/mymoneygncreader.cpp:2049
+msgid " inconsistencies were detected and corrected\n"
+msgstr " противоречий было обнаружено и исправлено\n"
+
+#: converter/mymoneygncreader.cpp:2054
+msgid " orphan accounts were created\n"
+msgstr " недостающих счетов создано\n"
+
+#: converter/mymoneygncreader.cpp:2059
+msgid " possible schedule problems were noted\n"
+msgstr " возможно проблемных графиков платежей\n"
+
+#: converter/mymoneygncreader.cpp:2064
+msgid "Small Business Features (Customers, Invoices, etc.)"
+msgstr "Возможности для бизнеса (клиенты, накладные и т.п.)"
+
+#: converter/mymoneygncreader.cpp:2065 views/kmymoneyview.cpp:241
+#: views/kmymoneyview.cpp:243
+msgid "Budgets"
+msgstr "Бюджеты"
+
+#: converter/mymoneygncreader.cpp:2066
+msgid "Lots"
+msgstr "Поддержка партий"
+
+#: converter/mymoneygncreader.cpp:2068
+msgid "The following features found in your file are not currently supported:"
+msgstr "Обнаружены следующие данные, которые не поддерживаются в KMyMoney:"
+
+#: converter/mymoneygncreader.cpp:2071
+msgid ""
+"\n"
+"\n"
+"Press More for further information"
+msgstr ""
+"\n"
+"\n"
+"Нажмите «Дополнительно» для получения дополнительной информации"
+
+#: converter/mymoneygncreader.cpp:2139
+msgid "Orphan created from unknown gnucash account"
+msgstr "Создан счёт на базе неизвестного счёта GnuCash"
+
+#: converter/mymoneygncreader.cpp:2170
+msgid "Internal error - invalid interval char in incrDate"
+msgstr "Внутренняя ошибка - неизвестный символ периода в incrDate"
+
+#: converter/mymoneygncreader.cpp:2233
+msgid "Enter the investment account name "
+msgstr "Введите название инвестиционного счёта"
+
+#: converter/mymoneygncreader.cpp:2234
+msgid "My Investments"
+msgstr "Мои инвестиции"
+
+#: converter/mymoneygncreader.cpp:2269
+#, c-format
+msgid "Select parent investment account or enter new name. Stock %1"
+msgstr ""
+"Укажите вышестоящий инвестиционный счёт или введите другое название. Ценные "
+"бумаги %1"
+
+#: converter/mymoneygncreader.cpp:2292 converter/mymoneygncreader.cpp:2307
+msgid "%1 is not an Investment Account. Do you wish to make it one?"
+msgstr "%1 не является инвестиционным счётом. Сделать его таковым?"
+
+#: converter/mymoneygncreader.cpp:2408
+msgid ""
+"An Investment account must be a child of an Asset account\n"
+"Account %1 will be stored under the main Asset account"
+msgstr ""
+"Инвестиционный счёт должен быть активным счётом.\n"
+"Счёт %1 перенесён в Активы"
+
+#: converter/mymoneygncreader.cpp:2410
+msgid ""
+"An Income account must be a child of an Income account\n"
+"Account %1 will be stored under the main Income account"
+msgstr ""
+"Счёт доходов должен быть статьёй доходов.\n"
+"Счёт %1 преобразован в статью доходов"
+
+#: converter/mymoneygncreader.cpp:2412
+msgid ""
+"An Expense account must be a child of an Expense account\n"
+"Account %1 will be stored under the main Expense account"
+msgstr ""
+"Счёт расходов должен быть статьёй расходов.\n"
+"Счёт %1 преобразован в статью расходов"
+
+#: converter/mymoneygncreader.cpp:2414
+msgid ""
+"One or more transactions contain a reference to an otherwise unknown "
+"account\n"
+"An asset account with the name %1 has been created to hold the data"
+msgstr ""
+"Одна или более операций используют неизвестный счёт.\n"
+"Для учёта этих операций создан активный счёт %1"
+
+#: converter/mymoneygncreader.cpp:2416
+msgid "Schedule %1 has interval of %2 which is not currently available"
+msgstr "График платежей %1 использует неизвестный интервал %2"
+
+#: converter/mymoneygncreader.cpp:2417
+msgid "Schedule %1 dropped at user request"
+msgstr "График платежей %1 удалён пользователем"
+
+#: converter/mymoneygncreader.cpp:2418
+msgid "Schedule %1 contains unknown action (key = %2, type = %3)"
+msgstr "График платежей %1 содержит неизвестную операцию (ключ = %2, тип = %3)"
+
+#: converter/mymoneygncreader.cpp:2419
+msgid "Schedule %1 contains multiple actions; only one has been imported"
+msgstr ""
+"График платежей %1 содержит несколько операций. Будет импортирована только "
+"одна"
+
+#: converter/mymoneygncreader.cpp:2420
+msgid "Schedule %1 contains no valid splits"
+msgstr "График платежей %1 содержит неверную разделённую операцию"
+
+#: converter/mymoneygncreader.cpp:2421
+msgid ""
+"Schedule %1 appears to contain a formula. GnuCash formulae are not "
+"convertible"
+msgstr "График платежей %1 содержит формулу. Формулы GnuCash не поддерживаются"
+
+#: converter/mymoneygncreader.cpp:2422
+msgid ""
+"Schedule %1 contains unknown interval specification; please check for "
+"correct operation"
+msgstr ""
+"График платежей %1 содержит неизвестное определение периода: проверьте "
+"правильность операции"
+
+#: converter/mymoneygncreader.cpp:2423
+msgid ""
+"Schedule %1 contains a deferred interval specification; please check for "
+"correct operation"
+msgstr ""
+"График платежей %1 содержит отложенное определение периода: проверьте "
+"правильность операции"
+
+#: converter/mymoneygncreader.cpp:2424
+msgid ""
+"Account or Category %1, transaction date %2; split contains invalid value; "
+"please check"
+msgstr ""
+"Проверьте правильность значения в разделённой операции %2 по счёту или "
+"статье %1"
+
+#: kmymoneyutils.cpp:146
+msgid "&New Schedule..."
+msgstr "&Новый график платежей..."
+
+#: kmymoneyutils.cpp:148
+msgid "Create a new schedule."
+msgstr "Добавить график платежей."
+
+#: kmymoneyutils.cpp:149
+msgid "Use this to create a new schedule."
+msgstr "Добавить новый график платежей."
+
+#: kmymoneyutils.cpp:158
+msgid "&Filter"
+msgstr "&Фильтр"
+
+#: kmymoneyutils.cpp:160
+msgid "Filter out accounts"
+msgstr "Показывать счета"
+
+#: kmymoneyutils.cpp:161
+msgid "Use this to filter out accounts"
+msgstr "Показывать только выбранные счета"
+
+#: kmymoneyutils.cpp:192
+msgid "Preferred accounts"
+msgstr "Предпочтительные счета"
+
+#: kmymoneyutils.cpp:193
+msgid "Payment accounts"
+msgstr "Счета платежей"
+
+#: kmymoneyutils.cpp:194
+msgid "Favorite reports"
+msgstr "Избранные отчёты"
+
+#: kmymoneyutils.cpp:195
+msgid "Forecast (schedule)"
+msgstr "Прогноз (по графику платежей)"
+
+#: kmymoneyutils.cpp:196
+msgid "Networth forecast"
+msgstr "Прогноз остатков"
+
+#: kmymoneyutils.cpp:197
+msgid "Forecast (history)"
+msgstr "Прогноз (по прошлым данным)"
+
+#: kmymoneyutils.cpp:198
+msgid "Assets and Liabilities"
+msgstr "Активные и пассивные счета"
+
+#: kmymoneyutils.cpp:199 reports/pivottable.cpp:2416 views/khomeview.cpp:1393
+#: widgets/rc.cpp:70
+msgid "Budget"
+msgstr "Бюджет"
+
+#: kmymoneyutils.cpp:200
+msgid "CashFlow"
+msgstr "Денежный поток"
+
+#: dialogs/kenterscheduledlg.cpp:153 kmymoneyutils.cpp:366
+msgid "Unable to load schedule details"
+msgstr "Невозможно получить данные для платежа"
+
+#: kmymoneyutils.cpp:390 widgets/register.cpp:473
+msgid ""
+"_: Reconcile state 'Not reconciled'\n"
+"Not reconciled"
+msgstr "Не сверенные"
+
+#: kmymoneyutils.cpp:393 widgets/register.cpp:476
+msgid ""
+"_: Reconcile state 'Cleared'\n"
+"Cleared"
+msgstr "Проверенные"
+
+#: kmymoneyutils.cpp:396 widgets/register.cpp:479
+msgid ""
+"_: Reconcile state 'Reconciled'\n"
+"Reconciled"
+msgstr "Сверенные"
+
+#: kmymoneyutils.cpp:399 widgets/register.cpp:482
+msgid ""
+"_: Reconcile state 'Frozen'\n"
+"Frozen"
+msgstr "Заблокированные"
+
+#: kmymoneyutils.cpp:410
+msgid ""
+"_: Reconcile flag C\n"
+"C"
+msgstr "П"
+
+#: kmymoneyutils.cpp:413
+msgid ""
+"_: Reconcile flag R\n"
+"R"
+msgstr "С"
+
+#: kmymoneyutils.cpp:416
+msgid ""
+"_: Reconcile flag F\n"
+"F"
+msgstr "З"
+
+#: kmymoneyutils.cpp:419
+msgid ""
+"_: Flag for unknown reconciliation state\n"
+"?"
+msgstr "?"
+
+#: _tips.cpp:3
+msgid ""
+"<p>...that you can change the sort order of ledger entries by\n"
+"right-clicking the header of the ledger view?\n"
+msgstr ""
+"<p>...что вы можете изменить порядок сортировки в списке операций,\n"
+"нажав правой кнопкой мыши на заголовке столбцов?\n"
+
+#: _tips.cpp:9
+msgid ""
+"<p>...that you can easily move to the other side of a transfer transaction\n"
+"by opening the context menu with the right mouse button and selecting one of "
+"the\n"
+"'Goto' functions?\n"
+msgstr ""
+"<p>...что вы можете быстро перейти на операции корреспондирующего счёта,\n"
+"выбрав в контекстном меню по правой кнопке мыши пункт «Перейти к ...»?\n"
+
+#: _tips.cpp:16
+msgid ""
+"<p>...that you can start editing a transaction by double-clicking on the\n"
+"transaction in the register?\n"
+msgstr ""
+"<p>...что вы можете изменить операцию, дважды щёлкнув по ней мышью в \n"
+"списке операций?\n"
+
+#: _tips.cpp:22
+msgid ""
+"<p>...that you can show more details of the selected transaction in the\n"
+"register by selecting the 'ledger lens' feature in the settings dialog?\n"
+msgstr ""
+"<p>...что вы можете просматривать подробности операции, \n"
+"включив флажок «Показывать подробности в выделенной строке таблицы»\n"
+"в диалоге настройки?\n"
+
+#: _tips.cpp:28
+msgid ""
+"<p>...that transactions with no category assigned or split\n"
+"transactions with unassigned values are marked with an exclamation mark \n"
+"on a yellow triangle in the register?\n"
+msgstr ""
+"<p>...что операции без статьи и разделённые операции \n"
+"с не распределённым остатком отмечаются восклицательным \n"
+"знаком в жёлтом треугольнике в списке операций?\n"
+
+#: _tips.cpp:35
+msgid ""
+"<p>...that you can show all details of the transactions in the register\n"
+"by typing &lt;Ctrl-T&gt; or selecting the 'Settings/Show Transaction "
+"Detail'\n"
+"menu entry? You can turn this feature off the same way.\n"
+msgstr ""
+"<p>...что вы можете посмотреть подробности всех операций в списке, нажав \n"
+"&lt;Ctrl+T&gt; или выбрав в меню пункт «Настройка &gt; Показывать данные "
+"операций»?\n"
+
+#: _tips.cpp:42
+msgid ""
+"<p>...that you can switch between a listing of all accounts or\n"
+"an icon view of all asset and liability accounts with the tabs\n"
+"in the accounts view?\n"
+msgstr ""
+"<p>...что вы можете переключиться между показом счетов в виде списка \n"
+"и значками, выбирая вкладку в разделе «Счета»?\n"
+
+#: _tips.cpp:49
+msgid "<p>...that the KMyMoney development team wishes you a nice day?\n"
+msgstr "<p>...что команда разработчиков KMyMoney желает вам успешного дня?\n"
+
+#: _tips.cpp:54
+msgid ""
+"<p>...you can use your own external filter program to convert any\n"
+"import format to QIF on the fly? See the QIF profile editor for\n"
+"more details.\n"
+msgstr ""
+"<p>...что вы можете указать внешнюю программу\n"
+"для импорта данных в формате QIF? Изучите редактор \n"
+"профилей QIF.\n"
+
+#: _tips.cpp:61
+msgid ""
+"<p>...that you can create a scheduled transaction from an existing\n"
+"one by selecting the context menu on a transaction in the ledger\n"
+"or the \"More...\"-menu in the transaction form?\n"
+msgstr ""
+"<p>...что вы можете создать график платежей на основании операции \n"
+"через контекстное меню списка операций или меню «Дополнительно» \n"
+"формы ввода операции?\n"
+
+#: _tips.cpp:68
+msgid ""
+"<p>...that you can switch to the payee of a transaction\n"
+"by selecting the context menu on a transaction in the ledger\n"
+"or in the transaction menu?\n"
+msgstr ""
+"<p>...что вы можете перейти к информации о получателе по операции\n"
+"через контекстное меню списка операций или меню «Дополнительно» \n"
+"формы ввода операции?\n"
+
+#: _tips.cpp:75
+msgid ""
+"<p>...that you can modify the colors and fonts used for the ledgers\n"
+"via <i>Configure/Register/...</i>?\n"
+msgstr ""
+"<p>...что вы можете настроить цвета и шрифты списка операций\n"
+"в диалоге настройки программы?\n"
+
+#: _tips.cpp:81
+msgid ""
+"<p>...that you can hide transactions prior to a specific date?\n"
+"The date can be modified via <i>Configure/Register/Filter</i>.\n"
+msgstr ""
+"<p>...что вы можете скрыть операции до определённой даты?\n"
+"Эта дата указывается на вкладке «Фильтры» раздела «Операции»\n"
+"диалога настройки программы.\n"
+
+#: _tips.cpp:87
+msgid ""
+"<p>...that you can customize the \"Home-Page\"\n"
+"via <i>Configure/Home</i>?\n"
+msgstr ""
+"<p>...что вы можете настроить содержимое сводки\n"
+"в разделе «Сводка» диалога настройки программы.\n"
+
+#: _tips.cpp:93
+msgid ""
+"<p>...that you can enter new transactions even while reconciling\n"
+"an account? You can also make the transaction form visible.\n"
+msgstr ""
+"<p>...что вы можете вводить новые операции даже во время сверки счёта?\n"
+
+#: _tips.cpp:99
+msgid ""
+"<p>...that you can actively support the KMyMoney development team in\n"
+"cases that heavily depend on your data? You can save your data in an\n"
+"anonymized way for this support.<p>\n"
+"Just open your data file and immediately\n"
+"select <b>File/Save as...</b>. In the <b>Save As...</b> dialog\n"
+"select the filter <b>Anonymous Files</b> and make sure your file gets\n"
+"the extensions <b>.anon.xml</b>. <p>\n"
+"To verify, how the data looks like you are about to send away, you can open\n"
+"this file in KMyMoney and see how the developers see your data.\n"
+msgstr ""
+"<p>...что вы в случае возникновения ошибки можете отправить \n"
+"команде разработчиков KMyMoney финансовые данные без информации\n"
+"о владельце.<p>\n"
+"Выберите <b>Файл/Сохранить как...</b> и укажите в поле фильтра\n"
+"<b>Анонимные файлы</b> (файлы с расширением <b>.anon.xml</b>). <p>\n"
+"Чтобы посмотреть как увидят эти данные разработчики, \n"
+"откройте этот файл в KMyMoney.\n"
+
+#: _tips.cpp:112
+msgid ""
+"<p>... that you can import your bank statements even without a network \n"
+"connection? Just select the file (OFX or QIF) from the File->Import menu.</"
+"p>\n"
+"<p>Provided by Jose Jorge</p>\n"
+msgstr ""
+"<p>...что вы можете импортировать данные банковских выписок даже \n"
+"без подключения к сети? Выберите нужный файл в формате OFX или QIF \n"
+"из меню «Файл &gt; Импорт».</p>\n"
+"<p>Совет дал Jose Jorge</p>\n"
+
+#: reports/listtable.cpp:159 reports/listtable.cpp:163
+#: reports/pivottable.cpp:1564
+msgid ""
+"_: Report date range\n"
+"%1 through %2"
+msgstr "%1 — %2"
+
+#: reports/listtable.cpp:171 reports/pivottable.cpp:1571
+#, c-format
+msgid "All currencies converted to %1"
+msgstr "Валюта: %1"
+
+#: reports/listtable.cpp:172 reports/pivottable.cpp:1328
+msgid "All currencies converted to %1\n"
+msgstr "Валюта: %1\n"
+
+#: reports/listtable.cpp:176 reports/pivottable.cpp:1573
+msgid "All values shown in %1 unless otherwise noted"
+msgstr "Все суммы указаны в валюте «%1», если не иное не указано явно"
+
+#: reports/listtable.cpp:177 reports/pivottable.cpp:1330
+msgid "All values shown in %1 unless otherwise noted\n"
+msgstr "Все суммы указаны в валюте «%1», если не иное не указано явно\n"
+
+#: dialogs/kequitypriceupdatedlg.cpp:73 dialogs/kfindtransactiondlg.cpp:188
+#: dialogs/rc.cpp:53 dialogs/rc.cpp:63 dialogs/rc.cpp:208 dialogs/rc.cpp:805
+#: dialogs/settings/rc.cpp:111 dialogs/transactioneditor.cpp:844
+#: reports/listtable.cpp:196 views/khomeview.cpp:412 views/khomeview.cpp:485
+#: views/khomeview.cpp:519 views/rc.cpp:61 widgets/kmymoneypriceview.cpp:128
+#: widgets/rc.cpp:36 widgets/register.cpp:565 widgets/transaction.cpp:1027
+#: widgets/transaction.cpp:1484
+msgid "Date"
+msgstr "Дата"
+
+#: reports/listtable.cpp:198
+msgid "Num"
+msgstr "Номер"
+
+#: dialogs/kfindtransactiondlg.cpp:204 dialogs/kmymoneysplittable.cpp:78
+#: dialogs/kmymoneysplittable.cpp:831 dialogs/rc.cpp:217
+#: dialogs/transactioneditor.cpp:831 dialogs/transactioneditor.cpp:1374
+#: dialogs/transactioneditor.cpp:1382 dialogs/transactioneditor.cpp:1396
+#: dialogs/transactioneditor.cpp:1449 dialogs/transactioneditor.cpp:1456
+#: dialogs/transactioneditor.cpp:1504 reports/listtable.cpp:200
+#: views/kcategoriesview.cpp:76 views/rc.cpp:62 widgets/rc.cpp:115
+#: widgets/register.cpp:62 widgets/transaction.cpp:848
+#: widgets/transaction.cpp:906
+msgid "Category"
+msgstr "Статья"
+
+#: dialogs/kmymoneysplittable.cpp:79 dialogs/kmymoneysplittable.cpp:837
+#: reports/listtable.cpp:202 widgets/rc.cpp:101 widgets/transaction.cpp:1042
+#: widgets/transaction.cpp:1628
+msgid "Memo"
+msgstr "Примечание"
+
+#: reports/listtable.cpp:203
+msgid "Top Category"
+msgstr "Статья верхнего уровня"
+
+#: reports/listtable.cpp:204
+msgid "Category Type"
+msgstr "Тип статьи"
+
+#: dialogs/rc.cpp:229 dialogs/settings/rc.cpp:152 reports/listtable.cpp:207
+#: widgets/kmymoneycombo.cpp:346 widgets/rc.cpp:107
+msgid "Reconciled"
+msgstr "Сверено"
+
+#: reports/listtable.cpp:208 widgets/rc.cpp:117
+msgid "Action"
+msgstr "Действие"
+
+#: dialogs/investactivities.cpp:199 dialogs/investactivities.cpp:287
+#: dialogs/investactivities.cpp:424 dialogs/investactivities.cpp:504
+#: dialogs/investactivities.cpp:544 dialogs/investtransactioneditor.cpp:241
+#: reports/listtable.cpp:209 widgets/rc.cpp:103 widgets/transaction.cpp:1513
+msgid "Shares"
+msgstr "Количество"
+
+#: dialogs/investtransactioneditor.cpp:248
+#: dialogs/investtransactioneditor.cpp:1067
+#: dialogs/investtransactioneditor.cpp:1068
+#: dialogs/investtransactioneditor.cpp:1072
+#: dialogs/kequitypriceupdatedlg.cpp:72 dialogs/rc.cpp:109 dialogs/rc.cpp:164
+#: dialogs/rc.cpp:251 dialogs/rc.cpp:756 dialogs/rc.cpp:827
+#: dialogs/settings/rc.cpp:117 reports/listtable.cpp:210
+#: reports/listtable.cpp:211 reports/pivottable.cpp:2441
+#: views/kinvestmentview.cpp:80 widgets/kmymoneypriceview.cpp:129
+#: widgets/rc.cpp:43 widgets/rc.cpp:105 widgets/register.cpp:573
+msgid "Price"
+msgstr "Цена"
+
+#: reports/listtable.cpp:212
+msgid "Net Value"
+msgstr "Сумма"
+
+#: reports/listtable.cpp:213
+msgid "Buys"
+msgstr "покупка"
+
+#: reports/listtable.cpp:214
+msgid "Sells"
+msgstr "продажа"
+
+#: reports/listtable.cpp:215
+msgid "Dividends Reinvested"
+msgstr "реинвестированный доход"
+
+#: reports/listtable.cpp:216
+msgid "Dividends Paid Out"
+msgstr "выплаченные дивиденды"
+
+#: reports/listtable.cpp:217
+msgid "Starting Balance"
+msgstr "Остаток на начало"
+
+#: reports/listtable.cpp:218
+msgid "Ending Balance"
+msgstr "Остаток на конец"
+
+#: reports/listtable.cpp:219
+msgid "Annualized Return"
+msgstr "Среднегодовой доход"
+
+#: reports/listtable.cpp:220
+msgid "Return On Investment"
+msgstr "Возврат инвестиций (ROI)"
+
+#: dialogs/rc.cpp:106 dialogs/rc.cpp:161 dialogs/rc.cpp:248 dialogs/rc.cpp:505
+#: dialogs/rc.cpp:570 dialogs/rc.cpp:667 dialogs/rc.cpp:753
+#: reports/listtable.cpp:223 widgets/register.cpp:570
+msgid "Payment"
+msgstr "Списание"
+
+#: dialogs/rc.cpp:111 dialogs/rc.cpp:166 dialogs/rc.cpp:253 dialogs/rc.cpp:709
+#: dialogs/rc.cpp:758 reports/listtable.cpp:224 widgets/rc.cpp:119
+#: widgets/register.cpp:575
+msgid "Balance"
+msgstr "Остаток"
+
+#: reports/listtable.cpp:227 views/kscheduledview.cpp:74
+msgid "Next Due Date"
+msgstr "Следующий платёж"
+
+#: reports/listtable.cpp:229 views/kscheduledview.cpp:76
+msgid "Payment Method"
+msgstr "Операция"
+
+#: dialogs/rc.cpp:803 reports/listtable.cpp:231 widgets/rc.cpp:2
+msgid "Description"
+msgstr "Описание"
+
+#: reports/listtable.cpp:232
+msgid "Opening Date"
+msgstr "С даты"
+
+#: reports/listtable.cpp:234
+msgid "Balance Early Warning"
+msgstr "Предупреждение по остатку"
+
+#: reports/listtable.cpp:235
+msgid "Balance Max Limit"
+msgstr "Лимит по остатку"
+
+#: reports/listtable.cpp:236
+msgid "Credit Early Warning"
+msgstr "Предупреждение по кредиту"
+
+#: reports/listtable.cpp:237
+msgid "Credit Max Limit"
+msgstr "Лимит по кредиту"
+
+#: dialogs/rc.cpp:376 reports/listtable.cpp:238
+msgid "Tax"
+msgstr "Налог"
+
+#: reports/listtable.cpp:239
+msgid "Preferred"
+msgstr "Предпочитаемый счёт"
+
+#: reports/listtable.cpp:240
+msgid "Loan Amount"
+msgstr "Сумма кредита"
+
+#: dialogs/rc.cpp:511 reports/listtable.cpp:241
+msgid "Interest Rate"
+msgstr "Процентная ставка"
+
+#: reports/listtable.cpp:242
+msgid "Next Interest Change"
+msgstr "Следующее изменение процентной ставки"
+
+#: reports/listtable.cpp:243
+msgid "Periodic Payment"
+msgstr "Сумма платежа"
+
+#: reports/listtable.cpp:244
+msgid "Final Payment"
+msgstr "Последний платёж"
+
+#: reports/listtable.cpp:245 views/khomeview.cpp:766 views/khomeview.cpp:1265
+#: views/khomeview.cpp:1273
+msgid "Current Balance"
+msgstr "Текущий остаток"
+
+#: dialogs/investactivities.cpp:201 dialogs/investactivities.cpp:289
+#: dialogs/investactivities.cpp:368 dialogs/investactivities.cpp:426
+#: dialogs/rc.cpp:327 reports/listtable.cpp:360 reports/listtable.cpp:364
+#: reports/listtable.cpp:556 reports/listtable.cpp:558
+#: reports/pivottable.cpp:1343 reports/pivottable.cpp:1445
+#: reports/pivottable.cpp:1505 reports/pivottable.cpp:1598
+#: reports/pivottable.cpp:1768 reports/pivottable.cpp:1845
+#: reports/pivottable.cpp:2165 reports/pivottable.cpp:2167
+#: reports/pivottable.cpp:2187 reports/pivottable.cpp:2189
+#: reports/querytabletest.cpp:134 reports/querytabletest.cpp:135
+#: reports/querytabletest.cpp:136 reports/querytabletest.cpp:137
+#: reports/querytabletest.cpp:162 reports/querytabletest.cpp:163
+#: reports/querytabletest.cpp:164 reports/querytabletest.cpp:197
+#: reports/querytabletest.cpp:198 reports/querytabletest.cpp:224
+#: reports/querytabletest.cpp:250 reports/querytabletest.cpp:251
+#: reports/querytabletest.cpp:252 reports/querytabletest.cpp:275
+#: reports/querytabletest.cpp:276 reports/querytabletest.cpp:277
+#: reports/querytabletest.cpp:366 reports/querytabletest.cpp:422
+#: reports/querytabletest.cpp:423 views/kforecastview.cpp:568 views/rc.cpp:18
+#: widgets/kmymoneyaccounttreeforecast.cpp:139 widgets/transaction.cpp:1643
+msgid "Total"
+msgstr "Итого"
+
+#: reports/listtable.cpp:444
+msgid "Initial Market Value"
+msgstr "Рыночная стоимость на начало периода"
+
+#: reports/listtable.cpp:445
+msgid "Ending Market Value"
+msgstr "Рыночная стоимость на конец периода"
+
+#: reports/listtable.cpp:448 reports/querytabletest.cpp:651
+msgid "Opening Balance"
+msgstr "Остаток на начало"
+
+#: reports/listtable.cpp:449 reports/querytabletest.cpp:652
+#: reports/querytabletest.cpp:653
+msgid "Closing Balance"
+msgstr "Остаток на конец"
+
+#: reports/listtable.cpp:490 reports/listtable.cpp:491
+msgid "Calculated"
+msgstr "Вычислено"
+
+#: reports/listtable.cpp:572 reports/listtable.cpp:574
+#: reports/pivottable.cpp:1530 reports/pivottable.cpp:1886
+#: reports/querytabletest.cpp:138 reports/querytabletest.cpp:165
+#: reports/querytabletest.cpp:199 reports/querytabletest.cpp:225
+#: reports/querytabletest.cpp:253 reports/querytabletest.cpp:278
+#: reports/querytabletest.cpp:367 reports/querytabletest.cpp:402
+#: reports/querytabletest.cpp:424 reports/querytabletest.cpp:548
+#: reports/querytabletest.cpp:551 reports/querytabletest.cpp:586
+msgid "Grand Total"
+msgstr "Всего"
+
+#: dialogs/rc.cpp:233 reports/pivottable.cpp:339 views/kscheduledview.cpp:174
+#: views/kscheduledview.cpp:433 views/kscheduledview.cpp:449
+#: widgets/kmymoneyscheduledcalendar.cpp:48
+msgid "Transfers"
+msgstr "Переводы"
+
+#: reports/pivottable.cpp:1951
+msgid "Legend"
+msgstr "Легенда"
+
+#: reports/pivottable.cpp:2411 views/khomeview.cpp:1406
+#: views/khomeview.cpp:1443
+msgid "Actual"
+msgstr "Действительно"
+
+#: reports/pivottable.cpp:2421 views/khomeview.cpp:1409
+#: views/khomeview.cpp:1446
+msgid "Difference"
+msgstr "Разница"
+
+#: reports/pivottable.cpp:2431
+msgid "Moving Average"
+msgstr "Скользящая средняя"
+
+#: reports/pivottable.cpp:2436
+msgid "Moving Average Price"
+msgstr "Скользящая средняя цена"
+
+#: reports/objectinfotable.cpp:214 reports/querytable.cpp:693
+#: reports/querytable.cpp:736 reports/querytable.cpp:1356
+#: reports/querytable.cpp:1375 views/kpayeesview.cpp:742
+#, c-format
+msgid "Transfer from %1"
+msgstr "Перевод с %1"
+
+#: reports/objectinfotable.cpp:215 reports/querytable.cpp:694
+#: reports/querytable.cpp:735 reports/querytable.cpp:1355
+#: reports/querytable.cpp:1374 views/kpayeesview.cpp:740
+#, c-format
+msgid "Transfer to %1"
+msgstr "Перевод на %1"
+
+#: reports/querytabletest.cpp:471 views/kreportsview.cpp:1144
+msgid "Investment Transactions"
+msgstr "Инвестиционные операции"
+
+#: reports/querytabletest.cpp:472 reports/querytabletest.cpp:564
+msgid "Test Report"
+msgstr "Тестовый отчёт"
+
+#: reports/querytabletest.cpp:547 reports/querytabletest.cpp:550
+msgid "Total Stock 1"
+msgstr "Всего по акциям"
+
+#: reports/querytabletest.cpp:563 views/kreportsview.cpp:1174
+msgid "Investment Performance by Account"
+msgstr "Результат инвестирования по счетам"
+
+#: reports/querytable.cpp:431 reports/querytable.cpp:1200
+#, c-format
+msgid "Month of %1"
+msgstr "Месяц с %1"
+
+#: reports/querytable.cpp:432 reports/querytable.cpp:1201
+#, c-format
+msgid "Week of %1"
+msgstr "Неделя с %1"
+
+#: reports/querytable.cpp:576 reports/querytable.cpp:739
+#: reports/querytable.cpp:858 reports/querytable.cpp:1325
+#: reports/querytable.cpp:1481
+msgid "No Institution"
+msgstr "Учреждение не указано"
+
+#: reports/querytable.cpp:580 reports/querytable.cpp:1329
+msgid "[Empty Payee]"
+msgstr "[Получатель не указан] "
+
+#: reports/querytable.cpp:615 reports/querytable.cpp:1361
+msgid "[Split Transaction]"
+msgstr "[Разделённая операция]"
+
+#: reports/querytable.cpp:616 reports/querytable.cpp:617
+msgid "Split"
+msgstr "Разделить"
+
+#: main.cpp:51
+msgid ""
+"\n"
+"KMyMoney, the Personal Finance Manager for KDE.\n"
+"\n"
+"Please consider contributing to this project with code and/or suggestions."
+msgstr ""
+"\n"
+"KMyMoney — Программа учёта финансов под KDE.\n"
+"\n"
+"Замечания и предложения приветствуются."
+
+#: main.cpp:55
+msgid "language to be used"
+msgstr "использовать язык"
+
+#: main.cpp:56
+msgid "don't open last used file"
+msgstr "не открывать последний файл"
+
+#: main.cpp:57
+msgid "enable performance timers"
+msgstr "разрешить таймеры производительности"
+
+#: main.cpp:61
+msgid "turn on program traces"
+msgstr "включить отладку программы"
+
+#: main.cpp:62
+msgid "dump the names of all defined KAction objects to stdout and quit"
+msgstr ""
+"вывести имена всех объектов KAction на стандартный поток вывода и завершить "
+"работу"
+
+#: main.cpp:66
+msgid "file to open"
+msgstr "открыть файл"
+
+#: main.cpp:92
+msgid "Memory leakage detection"
+msgstr "Отслеживание утечки памяти"
+
+#: main.cpp:96
+msgid "Compiled with the following settings:\n"
+msgstr "Собрано со следующими ключами:\n"
+
+#: dialogs/kmymoneysplittable.cpp:650 dialogs/ksplittransactiondlg.cpp:277
+#: main.cpp:98
+msgid "KMyMoney"
+msgstr "KMyMoney"
+
+#: main.cpp:104
+msgid "Initial idea, much initial source code, Project admin"
+msgstr "Автор идеи, первоначальный разработчик и администратор проекта"
+
+#: main.cpp:105
+msgid "Core engine, Release Manager, Project admin"
+msgstr "Разработка ядра, выпуск версий и администратор проекта"
+
+#: main.cpp:106
+msgid "Reporting logic, OFX Import"
+msgstr "Отчёты и импорт данных в формате OFX"
+
+#: main.cpp:107
+msgid "Database backend, maintainer stable branch"
+msgstr "Модуль работы с базой данных, сопровождение стабильной версии"
+
+#: main.cpp:108
+msgid "Forecast, Reports"
+msgstr "Построение прогнозов и отчётов"
+
+#: main.cpp:109
+msgid "Project Admin"
+msgstr "Администратор проекта"
+
+#: main.cpp:110
+msgid "Developer"
+msgstr "Разработчик"
+
+#: main.cpp:111
+msgid "Database backend"
+msgstr "Модуль работы с базой данных"
+
+#: main.cpp:113
+msgid "Initial investment support"
+msgstr "Поддержка инвестиций"
+
+#: main.cpp:114
+msgid "Developer & Artist"
+msgstr "Разработчик и художник"
+
+#: main.cpp:115
+msgid "Icons & splash screen"
+msgstr "Автор значков и заставки"
+
+#: main.cpp:116 main.cpp:117
+msgid "Patches"
+msgstr "Исправления кода"
+
+#: main.cpp:136
+msgid ""
+"The monetary decimal symbol is not correctly set in the KDE Control Center's "
+"Country/Region & Language settings. Please set it to a reasonable value and "
+"start KMyMoney again."
+msgstr ""
+"Неверно указан разделитель дробной части или тысячных разрядов в разделе "
+"«Язык и стандарты» в Центре управления KDE. Установите правильные значения и "
+"перезапустите KMyMoney."
+
+#: main.cpp:136
+msgid "Invalid settings"
+msgstr "Ошибка в параметрах"
+
+#: main.cpp:228
+msgid "Another instance of KMyMoney is already running. Do you want to quit?"
+msgstr "Запущен ещё один экземпляр программы. Выйти из этой программы?"
+
+#: main.cpp:289
+msgid "Uncaught error. Please report the details to the developers"
+msgstr "Неизвестная ошибка. Сообщите разработчикам о причине её появления."
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Николай Шафоростов,Андрей Черепанов"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "linux@l10n.org.ua,skull@kde.ru"
+
+#: dialogs/kcsvprogressdlg.cpp:62 dialogs/kimportdlg.cpp:66 rc.cpp:1
+msgid "&Import"
+msgstr "&Импорт"
+
+#: rc.cpp:2
+msgid "E&xport"
+msgstr "&Экспорт"
+
+#: rc.cpp:3
+msgid "&Institution"
+msgstr "&Учреждение"
+
+#: rc.cpp:4
+msgid "&Account"
+msgstr "С&чёт"
+
+#: rc.cpp:5
+msgid "&Category"
+msgstr "Ст&атьи"
+
+#: rc.cpp:6
+msgid "&Transaction"
+msgstr "&Операции"
+
+#: rc.cpp:7 rc.cpp:20
+msgid "Mark transaction as..."
+msgstr "Отметить как..."
+
+#: rc.cpp:8 rc.cpp:21
+msgid "Mark transaction"
+msgstr "Отметить операцию"
+
+#: rc.cpp:9
+msgid "T&ools"
+msgstr "С&ервис"
+
+#: rc.cpp:10
+msgid "Account options"
+msgstr "Счёт"
+
+#: rc.cpp:11
+msgid "Category options"
+msgstr "Статья"
+
+#: rc.cpp:12
+msgid "Institution options"
+msgstr "Учреждение"
+
+#: rc.cpp:13
+msgid "Payee options"
+msgstr "Получатель"
+
+#: rc.cpp:14
+msgid "Budget options"
+msgstr "Бюджет"
+
+#: rc.cpp:15
+msgid "Investment options"
+msgstr "Инвестиции"
+
+#: rc.cpp:16
+msgid "Scheduled transactions options"
+msgstr "Параметры запланированных операций"
+
+#: rc.cpp:17
+msgid "Transaction options"
+msgstr "Операция"
+
+#: rc.cpp:18
+msgid "Move transaction to..."
+msgstr "Переместить операцию на счёт..."
+
+#: rc.cpp:19
+msgid "Select account"
+msgstr "Выбор счёта"
+
+#: rc.cpp:22
+msgid "Currency options"
+msgstr "Валюта"
+
+#: rc.cpp:24
+msgid "Always show a No. field in transaction form"
+msgstr "Показывать поле с номером операции"
+
+#: rc.cpp:25
+msgid "Auto fill with previous transaction data"
+msgstr "Заполнить форму ввода данными предыдущей операции "
+
+#: rc.cpp:26
+msgid "Treat two transactions as identical, if amount differs less than"
+msgstr ""
+"Считать две операции одинаковыми, если их суммы отличаются не более, чем на "
+
+#: dialogs/settings/rc.cpp:144 rc.cpp:27
+msgid "Auto increment check number"
+msgstr "Автоматическая генерация номеров чеков"
+
+#: rc.cpp:28
+msgid "Autosave file periodically"
+msgstr "Автоматическое сохранение файла"
+
+#: rc.cpp:29
+msgid "Autosave interval in minutes"
+msgstr "Интервал автоматического сохранения"
+
+#: rc.cpp:30
+msgid "Check schedules upon startup"
+msgstr "Проверять сроки по графикам платежей"
+
+#: dialogs/settings/rc.cpp:171 rc.cpp:31
+msgid "Enter transactions this number of days in advance"
+msgstr "Создавать операции, до начала которых осталось (в днях)"
+
+#: dialogs/settings/rc.cpp:172 rc.cpp:32
+msgid "Number of days to preview schedules in ledger"
+msgstr "Количество дней показа платежей в операциях"
+
+#: dialogs/settings/rc.cpp:143 rc.cpp:33
+msgid "Insert transaction type into No. field for new transactions"
+msgstr "Показывать тип операции в поле номера для новых операций"
+
+#: dialogs/settings/rc.cpp:145 rc.cpp:34
+msgid "Keep changes when selecting a different transaction/split"
+msgstr "Сохранить изменения при выборе другой операции"
+
+#: rc.cpp:35
+msgid "Using the Enter key moves between the fields"
+msgstr "Перемещение между полями клавишей Enter"
+
+#: dialogs/settings/rc.cpp:130 rc.cpp:36
+msgid "Use the ledger lens"
+msgstr "Показывать подробности в выделенной строке таблицы "
+
+#: rc.cpp:37
+msgid "Price Precision"
+msgstr "Точность курса"
+
+#: dialogs/rc.cpp:65 rc.cpp:38
+msgid "Update price history"
+msgstr "Обновить историю курсов"
+
+#: dialogs/settings/rc.cpp:132 rc.cpp:39
+msgid "Show transaction form"
+msgstr "Показывать форму ввода операции"
+
+#: rc.cpp:40
+msgid "Start with last selected view or homepage"
+msgstr "Последний раздел или сводка"
+
+#: rc.cpp:41
+msgid "Use GPG to encrypt data file"
+msgstr "Использовать шифрование GPG"
+
+#: rc.cpp:42
+msgid "Also encrypt against recover key"
+msgstr "Также шифровать ключом восстановления"
+
+#: rc.cpp:43
+msgid "GPG User ID (deprecated)"
+msgstr "Идентификатор пользователя GPG (устарело)"
+
+#: rc.cpp:44
+msgid "GPG User ID"
+msgstr "Идентификатор пользователя GPG"
+
+#: rc.cpp:45
+msgid "Run in expert (accountant) mode"
+msgstr "Режим эксперта (бухгалтерский)"
+
+#: rc.cpp:46
+msgid "Show splash screen during startup"
+msgstr "Показывать окно заставки при запуске"
+
+#: rc.cpp:47
+msgid "Synchronize account in ledger and investment view"
+msgstr ""
+"Использовать один и тот же счёт в режиме просмотра операций и инвестиций"
+
+#: rc.cpp:48
+msgid "Icon size for view selection"
+msgstr "Размер значков разделов"
+
+#: rc.cpp:49
+msgid "list of hidden views"
+msgstr "Список скрытых разделов"
+
+#: rc.cpp:50
+msgid "Firsttime switch to start new user wizard"
+msgstr "Запускать мастер заведения владельца при первом запуске"
+
+#: rc.cpp:51
+msgid "Show title bar on each view"
+msgstr "Показывать заголовок раздела"
+
+#: rc.cpp:52
+msgid "Start string matches for e.g. payees at start of string"
+msgstr "Поиск совпадения с начала слова"
+
+#: rc.cpp:53
+msgid "Order of items on homepage"
+msgstr "Порядок элементов в сводке"
+
+#: rc.cpp:54
+msgid "Percentage of default font size used for home view HTML page"
+msgstr "Размер шрифта в процентах от базового размера"
+
+#: rc.cpp:55
+msgid "Remember (manually adjusted) font size in home view on program end."
+msgstr "Запоминать размер шрифта при выходе из программы"
+
+#: rc.cpp:56
+msgid "Show account limit information on the Homepage"
+msgstr "Показывать в сводке информацию о лимитах"
+
+#: rc.cpp:58
+msgid "Hide closed accounts"
+msgstr "Не показывать закрытые счета"
+
+#: rc.cpp:59
+msgid "Hide finished schedules"
+msgstr "Не показывать завершённые графики платежей"
+
+#: rc.cpp:61
+msgid "Show all register entries in full detail"
+msgstr "Развёрнутые данные о счёте"
+
+#: dialogs/settings/rc.cpp:129 rc.cpp:62
+msgid "Show a grid in the register"
+msgstr "Показывать сетку в таблице"
+
+#: rc.cpp:63
+msgid "Show fancy group markers"
+msgstr "Показывать маркеры групп"
+
+#: rc.cpp:64
+msgid "Show fancy markers for previous and current fiscal year"
+msgstr "Показывать маркеры предыдущего и текущего финансового года"
+
+#: rc.cpp:65
+msgid "Starting month of the fiscal year"
+msgstr "Месяц начала финансового года"
+
+#: rc.cpp:66
+msgid "Starting day of the fiscal year"
+msgstr "День начала финансового года"
+
+#: rc.cpp:67
+msgid "Start date"
+msgstr "Дата начала"
+
+#: dialogs/settings/rc.cpp:9 rc.cpp:68
+msgid "Use system colors"
+msgstr "Использовать стандартные шрифты"
+
+#: rc.cpp:69
+msgid "List color"
+msgstr "Цвет текста в списке"
+
+#: rc.cpp:70
+msgid "List background color"
+msgstr "Цвет фона списка"
+
+#: rc.cpp:71
+msgid "List grid color"
+msgstr "Цвет линий в списке"
+
+#: rc.cpp:72
+msgid "Background color for imported transactions"
+msgstr "Цвет фона импортированных операций"
+
+#: rc.cpp:73
+msgid "Background color for matched transactions"
+msgstr "Цвет фона связанных операций"
+
+#: rc.cpp:74
+msgid "List color for erronous transactions"
+msgstr "Цвет фона операций с ошибкой"
+
+#: rc.cpp:75
+msgid "List color for missing conversion rate"
+msgstr "Суммы без курсов конвертации"
+
+#: rc.cpp:76
+msgid "List color for negative values"
+msgstr "Отрицательные суммы"
+
+#: rc.cpp:77
+msgid "Background color for group marker"
+msgstr "Цвет фона групп"
+
+#: rc.cpp:78
+msgid "Background color for required fields"
+msgstr "Цвет фона обязательных полей"
+
+#: rc.cpp:79
+msgid "Use system font"
+msgstr "Использовать стандартный шрифт"
+
+#: dialogs/settings/rc.cpp:21 rc.cpp:80
+msgid "Cell font"
+msgstr "Шрифт ячеек"
+
+#: dialogs/settings/rc.cpp:22 rc.cpp:81
+msgid "Header font"
+msgstr "Шрифт заголовков столбцов"
+
+#: rc.cpp:82 rc.cpp:83
+msgid "Sort order of register in normal view"
+msgstr "Порядок сортировки операций в обычном режиме"
+
+#: rc.cpp:84
+msgid "Sort order of register in search dialog"
+msgstr "Порядок сортировки операций в обычном режиме"
+
+#: rc.cpp:85
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation"
+msgstr "Состояние по умолчанию для операций при сверке"
+
+#: rc.cpp:86
+msgid "Number of days (plus/minus) to search for matching transactions"
+msgstr "Период в днях (до и после) для поиска связанных операций"
+
+#: rc.cpp:87
+msgid "During import, ask for a new payee's default category"
+msgstr "При импорте спрашивать о статье по умолчанию для получателя"
+
+#: rc.cpp:88
+msgid "Method to calculate forecast"
+msgstr "Метод вычисления прогноза"
+
+#: rc.cpp:89
+msgid "Days to forecast"
+msgstr "Срок прогнозирования"
+
+#: rc.cpp:90
+msgid "Days of normal account cycle"
+msgstr "Количество дней в учётном периоде"
+
+#: rc.cpp:91
+msgid "Number of historic cycles to use in forecast"
+msgstr "Количество прогнозируемых учётных периодов"
+
+#: rc.cpp:92
+msgid "Day of month to start forecast"
+msgstr "Начинать с дня месяца"
+
+#: rc.cpp:93
+msgid "Method to calculate history-based forecast"
+msgstr "Метод ретроспективного анализа"
+
+#: rc.cpp:94
+msgid "Skip opening date when fetching transactions"
+msgstr "Игнорировать дату начала при получении операций"
+
+#: rc.cpp:95
+msgid "Include future transaction when using Schedule Forecast"
+msgstr "Включать будущие операции в прогноз платежей"
+
+#: rc.cpp:96
+msgid "Include scheduled transactions when using Schedule Forecast"
+msgstr "Включать запланированные операции в прогноз платежей"
+
+#: rc.cpp:97
+msgid "additional names for cash account"
+msgstr "дополнительные названия для счёта учёта наличных"
+
+#: rc.cpp:98
+msgid "additional names for checking account"
+msgstr "дополнительные названия для счёта пластиковой карты"
+
+#: rc.cpp:99
+msgid "additional names for credit card account"
+msgstr "дополнительные названия для счёта кредитной карты"
+
+#: rc.cpp:100
+msgid "additional names for asset account"
+msgstr "дополнительные названия для счёта активов"
+
+#: rc.cpp:101
+msgid "additional names for opening balance payee"
+msgstr "дополнительные названия для получателя"
+
+#: rc.cpp:102
+msgid "additional names for invoice accounts"
+msgstr "дополнительные названия для счетов учёта счетов-фактур"
+
+#: rc.cpp:103 widgets/rc.cpp:161 widgets/rc.cpp:163
+msgid "..."
+msgstr "..."
+
+#: views/kcategoriesview.cpp:276
+msgid "Profit: "
+msgstr "Прибыль: "
+
+#: views/kcategoriesview.cpp:278
+msgid "Loss: "
+msgstr "Убыток: "
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:54
+#: dialogs/transactioneditor.cpp:605 views/kpayeesview.cpp:365
+#: widgets/kmymoneyonlinequoteconfig.cpp:54
+msgid "Accepts the entered data and stores it"
+msgstr "Сохранить данные"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:55 views/kpayeesview.cpp:366
+#: widgets/kmymoneyonlinequoteconfig.cpp:55
+msgid "Use this to accept the modified data."
+msgstr "Сохранить изменённые данные."
+
+#: views/kpayeesview.cpp:491
+msgid ""
+"A payee with the name '%1' already exists. It is not advisable to have "
+"multiple payees with the same identification name. Are you sure you would "
+"like to rename the payee?"
+msgstr ""
+"Получатель в именем «%1» уже существует. Не рекомендуется учитывать несколько "
+"разных получателей с одним и тем же именем. Переименовать получателя?"
+
+#: views/kpayeesview.cpp:518 views/kpayeesview.cpp:869
+msgid "Unable to modify payee"
+msgstr "Невозможно изменить данные получателя"
+
+#: views/kpayeesview.cpp:564
+msgid "Do you want to save the changes for <b>%1</b>?"
+msgstr "Сохранить изменение получателя <b>%1</b>?"
+
+#: views/kbudgetview.cpp:490 views/kpayeesview.cpp:565
+msgid "Save changes"
+msgstr "Сохранить изменения"
+
+#: views/kgloballedgerview.cpp:737 views/kpayeesview.cpp:662
+#: views/kpayeesview.cpp:753
+#, c-format
+msgid "Balance: %1"
+msgstr "Остаток: %1"
+
+#: views/kpayeesview.cpp:725 views/kpayeesview.cpp:731
+#, c-format
+msgid "Amortization of %1"
+msgstr "Погашение %1"
+
+#: views/kpayeesview.cpp:727 views/kpayeesview.cpp:733
+#, c-format
+msgid "Payment to %1"
+msgstr "Выплата %1"
+
+#: views/kpayeesview.cpp:736
+#, c-format
+msgid "Loan payment from %1"
+msgstr "Выплата по кредиту с %1"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:123
+#: dialogs/kconfirmmanualenterdlg.cpp:133 views/kpayeesview.cpp:745
+#: widgets/kmymoneycategory.cpp:160 widgets/kmymoneycategory.cpp:166
+#: widgets/transaction.cpp:851 widgets/transaction.cpp:1397
+#: widgets/transaction.cpp:1411
+msgid ""
+"_: Split transaction (category replacement)\n"
+"Split transaction"
+msgstr "Разделить операцию"
+
+#: views/kreportsview.cpp:262
+msgid ""
+"There was an error creating your report: \"%1\".\n"
+"Please report this error to the developer's list: kmymoney2-developer@lists."
+"sourceforge.net"
+msgstr ""
+"Ошибка создания отчёта: %1.\n"
+"Сообщите об ошибке разработчикам в список рассылки\n"
+"kmymoney2-developer@lists.sourceforge.net"
+
+#: views/kreportsview.cpp:264
+msgid "Critical Error"
+msgstr "Критическая ошибка"
+
+#: views/kreportsview.cpp:268
+msgid "Unable to generate report"
+msgstr "Невозможно создать отчёт"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:125 views/kreportsview.cpp:286
+#: views/rc.cpp:53 widgets/rc.cpp:146
+msgid "Chart"
+msgstr "Диаграмма"
+
+#: views/kreportsview.cpp:287 widgets/rc.cpp:147
+msgid "Show the chart version of this report"
+msgstr "Показать отчёт в виде диаграммы"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:112 views/khomeview.cpp:900
+#: views/kreportsview.cpp:294 views/kreportsview.cpp:328
+msgid "Report"
+msgstr "Отчёт"
+
+#: views/kreportsview.cpp:295
+msgid "Show the report version of this chart"
+msgstr "Показать отчёт в виде таблицы"
+
+#: views/kmymoneyview.cpp:236 views/kreportsview.cpp:314
+#: views/kreportsview.cpp:326
+msgid "Reports"
+msgstr "Отчёты"
+
+#: views/khomeview.cpp:902 views/kreportsview.cpp:329 widgets/rc.cpp:56
+msgid "Comment"
+msgstr "Примечание"
+
+#: views/kreportsview.cpp:432
+msgid "Charts"
+msgstr "Диаграммы"
+
+#: views/khomeview.cpp:897 views/kreportsview.cpp:470
+msgid "Favorite Reports"
+msgstr "Избранные отчёты"
+
+#: views/kreportsview.cpp:486
+msgid "Old Customized Reports"
+msgstr "Устаревшие настроенные отчёты"
+
+#: views/kreportsview.cpp:579
+msgid "Include Stylesheet"
+msgstr "Включить таблицу стилей"
+
+#: views/kreportsview.cpp:585
+msgid ""
+"_: CSV (Filefilter)\n"
+"CSV files"
+msgstr "Файлы CSV (*.csv)"
+
+#: views/kreportsview.cpp:586
+msgid ""
+"_: HTML (Filefilter)\n"
+"HTML files"
+msgstr "Страницы HTML (.html)"
+
+#: views/kreportsview.cpp:591
+msgid "Export as"
+msgstr "Экспорт"
+
+#: views/kreportsview.cpp:619 views/kreportsview.cpp:660
+#: views/kreportsview.cpp:942 views/kreportsview.cpp:950
+#: views/kreportsview.cpp:958 views/kreportsview.cpp:968
+#: views/kreportsview.cpp:980 views/kreportsview.cpp:998
+#: views/kreportsview.cpp:1006 views/kreportsview.cpp:1014
+#: views/kreportsview.cpp:1022 views/kreportsview.cpp:1034
+#: views/kreportsview.cpp:1046 views/kreportsview.cpp:1056
+#: views/kreportsview.cpp:1070 views/kreportsview.cpp:1079
+#: views/kreportsview.cpp:1087 views/kreportsview.cpp:1095
+#: views/kreportsview.cpp:1103 views/kreportsview.cpp:1111
+#: views/kreportsview.cpp:1120 views/kreportsview.cpp:1132
+#: views/kreportsview.cpp:1145 views/kreportsview.cpp:1155
+#: views/kreportsview.cpp:1165 views/kreportsview.cpp:1175
+#: views/kreportsview.cpp:1185 views/kreportsview.cpp:1195
+#: views/kreportsview.cpp:1208 views/kreportsview.cpp:1222
+#: views/kreportsview.cpp:1239 views/kreportsview.cpp:1257
+#: views/kreportsview.cpp:1273 views/kreportsview.cpp:1295
+#: views/kreportsview.cpp:1304 views/kreportsview.cpp:1313
+#: views/kreportsview.cpp:1322 views/kreportsview.cpp:1336
+#: views/kreportsview.cpp:1347 views/kreportsview.cpp:1362
+#: views/kreportsview.cpp:1372 views/kreportsview.cpp:1383
+#: views/kreportsview.cpp:1393 views/kreportsview.cpp:1404
+#: views/kreportsview.cpp:1423 views/kreportsview.cpp:1432
+#: views/kreportsview.cpp:1444 views/kreportsview.cpp:1463
+#: views/kreportsview.cpp:1472 views/kreportsview.cpp:1481
+#: views/kreportsview.cpp:1490
+msgid "Default Report"
+msgstr "Стандартный отчёт"
+
+#: views/kreportsview.cpp:621 views/kreportsview.cpp:661
+msgid "Custom Report"
+msgstr "Отчёт пользователя"
+
+#: views/kreportsview.cpp:622
+msgid " (Customized)"
+msgstr " (настроенный отчёт)"
+
+#: views/kreportsview.cpp:690
+msgid ""
+"Are you sure you want to delete report <b>%1</b>? There is no way to "
+"recover it!"
+msgstr ""
+"Удалить отчёт <b>%1?</b>\n"
+"После этого его будет невозможно восстановить!"
+
+#: views/kreportsview.cpp:690 views/kreportsview.cpp:702
+msgid "Delete Report?"
+msgstr "Удалить отчёт?"
+
+#: views/kreportsview.cpp:702
+msgid "Sorry, <b>%1</b> is a default report. You may not delete it."
+msgstr ""
+"Отчёт <b>%1</b> является отчётом по умолчанию. Вы не можете удалить его."
+
+#: views/kreportsview.cpp:882
+msgid "&Open"
+msgstr "&Открыть"
+
+#: views/kreportsview.cpp:884
+msgid "&New report"
+msgstr "&Создать"
+
+#: views/kreportsview.cpp:934
+msgid "Income and Expenses"
+msgstr "Доходы и расходы"
+
+#: views/kreportsview.cpp:941
+msgid "Income and Expenses This Month"
+msgstr "Доходы и расходы в этом месяце"
+
+#: views/kreportsview.cpp:949
+msgid "Income and Expenses This Year"
+msgstr "Доходы и расходы в этом году"
+
+#: views/kreportsview.cpp:957
+msgid "Income and Expenses By Year"
+msgstr "Доходы и расходы по годам"
+
+#: views/kreportsview.cpp:967
+msgid "Income and Expenses Graph"
+msgstr "График доходов и расходов"
+
+#: views/kreportsview.cpp:979
+msgid "Income and Expenses Pie Chart"
+msgstr "Круговая диаграмма доходов и расходов"
+
+#: views/khomeview.cpp:1361 views/kreportsview.cpp:990
+msgid "Net Worth"
+msgstr "Остатки"
+
+#: views/kreportsview.cpp:997
+msgid "Net Worth By Month"
+msgstr "Остатки по месяцам"
+
+#: views/kreportsview.cpp:1005
+msgid "Net Worth Today"
+msgstr "Остатки на сегодня"
+
+#: views/kreportsview.cpp:1013
+msgid "Net Worth By Year"
+msgstr "Остатки по году"
+
+#: views/kreportsview.cpp:1021
+msgid "7-day Cash Flow Forecast"
+msgstr "Прогноз денежного потока на неделю"
+
+#: views/kreportsview.cpp:1033
+msgid "Net Worth Graph"
+msgstr "График остатков"
+
+#: views/kreportsview.cpp:1045
+msgid "Account Balances by Institution"
+msgstr "Остатки по счетам по учреждениям"
+
+#: views/kreportsview.cpp:1055
+msgid "Account Balances by Type"
+msgstr "Остатки по счетам по типам"
+
+#: views/kreportsview.cpp:1069
+msgid "Transactions by Account"
+msgstr "Операции по счетам"
+
+#: views/kreportsview.cpp:1078
+msgid "Transactions by Category"
+msgstr "Операции по статьям"
+
+#: views/kreportsview.cpp:1086
+msgid "Transactions by Payee"
+msgstr "Операции по получателям"
+
+#: views/kreportsview.cpp:1094
+msgid "Transactions by Month"
+msgstr "Операции по месяцам"
+
+#: views/kreportsview.cpp:1102
+msgid "Transactions by Week"
+msgstr "Операции по неделям"
+
+#: views/kreportsview.cpp:1110
+msgid "Loan Transactions"
+msgstr "Операции по кредитам"
+
+#: views/kreportsview.cpp:1119
+msgid "Transactions by Reconciliation Status"
+msgstr "Операции по статусу сверки"
+
+#: views/kreportsview.cpp:1125
+msgid "Cash Flow"
+msgstr "Денежный поток"
+
+#: views/kreportsview.cpp:1131
+msgid "Cash Flow Transactions This Month"
+msgstr "Операции с наличными в этом месяце"
+
+#: views/kmymoneyview.cpp:226 views/kmymoneyview.cpp:228
+#: views/kreportsview.cpp:1137
+msgid "Investments"
+msgstr "Инвестиции"
+
+#: views/kreportsview.cpp:1154
+msgid "Investment Holdings by Account"
+msgstr "Инвестиции по счетам"
+
+#: views/kreportsview.cpp:1164
+msgid "Investment Holdings by Type"
+msgstr "Инвестиции по типам"
+
+#: views/kreportsview.cpp:1184
+msgid "Investment Performance by Type"
+msgstr "Результат инвестиций по типам"
+
+#: views/kreportsview.cpp:1194
+msgid "Investment Holdings Pie"
+msgstr "Круговая диаграмма инвестиций"
+
+#: views/kreportsview.cpp:1207
+msgid "Investment Worth Graph"
+msgstr "График стоимости инвестиций"
+
+#: views/kreportsview.cpp:1221
+msgid "Investment Price Graph"
+msgstr "График стоимости инвестиций"
+
+#: views/kreportsview.cpp:1238
+msgid "Investment Moving Average Price Graph"
+msgstr "График скользящей средней стоимости инвестиций"
+
+#: views/kreportsview.cpp:1256
+msgid "Investment Moving Average"
+msgstr "Скользящая средняя стоимости инвестиций"
+
+#: views/kreportsview.cpp:1272
+msgid "Investment Moving Average vs Actual"
+msgstr "График скользящей средней и реальной стоимости инвестиций"
+
+#: views/kreportsview.cpp:1287
+msgid "Taxes"
+msgstr "Налоги"
+
+#: views/kreportsview.cpp:1294
+msgid "Tax Transactions by Category"
+msgstr "Выплаченные налоги по статьям"
+
+#: views/kreportsview.cpp:1303
+msgid "Tax Transactions by Payee"
+msgstr "Выплаченные налоги по получателям"
+
+#: views/kreportsview.cpp:1312
+msgid "Tax Transactions by Category Last Fiscal Year"
+msgstr "Выплаченные налоги по статьям за прошлый финансовый год"
+
+#: views/kreportsview.cpp:1321
+msgid "Tax Transactions by Payee Last Fiscal Year"
+msgstr "Выплаченные налоги по получателям за прошлый финансовый год"
+
+#: views/kreportsview.cpp:1328
+msgid "Budgeting"
+msgstr "Бюджетирование"
+
+#: views/kreportsview.cpp:1335
+msgid "Budgeted vs. Actual This Year"
+msgstr "Запланированные и действительные суммы в этом году"
+
+#: views/kreportsview.cpp:1346
+msgid "Budgeted vs. Actual This Year (YTM)"
+msgstr ""
+"Запланированные и действительные суммы в этом году (с планируемыми "
+"поступлениями)"
+
+#: views/khomeview.cpp:1383 views/kreportsview.cpp:1361
+msgid "Monthly Budgeted vs. Actual"
+msgstr "Запланированные и действительные суммы по месяцам"
+
+#: views/kreportsview.cpp:1371
+msgid "Yearly Budgeted vs. Actual"
+msgstr "Запланированные и действительные суммы по годам"
+
+#: views/kreportsview.cpp:1382
+msgid "Monthly Budget"
+msgstr "Бюджет помесячно"
+
+#: views/kreportsview.cpp:1392
+msgid "Yearly Budget"
+msgstr "Бюджет по годам"
+
+#: views/kreportsview.cpp:1403
+msgid "Yearly Budgeted vs Actual Graph"
+msgstr "График исполнения бюджета по годам"
+
+#: views/kreportsview.cpp:1422
+msgid "Forecast By Month"
+msgstr "Прогноз по месяцам"
+
+#: views/kreportsview.cpp:1431
+msgid "Forecast Next Quarter"
+msgstr "Прогноз на следующий квартал"
+
+#: views/kreportsview.cpp:1443
+msgid "Net Worth Forecast Graph"
+msgstr "График прогноза остатков"
+
+#: dialogs/rc.cpp:126 dialogs/rc.cpp:128 dialogs/rc.cpp:466
+#: views/kreportsview.cpp:1455
+msgid "General Information"
+msgstr "Общая информация"
+
+#: views/kreportsview.cpp:1462
+msgid "Schedule Information"
+msgstr "Графики платежей"
+
+#: views/kreportsview.cpp:1471
+msgid "Schedule Summary Information"
+msgstr "Сводка по графикам платежей"
+
+#: views/kreportsview.cpp:1480
+msgid "Account Information"
+msgstr "Список счетов"
+
+#: views/kreportsview.cpp:1489
+msgid "Loan Information"
+msgstr "Кредиты"
+
+#: dialogs/rc.cpp:323 views/kmymoneyview.cpp:148 views/kmymoneyview.cpp:150
+msgid "Institutions"
+msgstr "Учреждения"
+
+#: dialogs/knewaccountdlg.cpp:98 views/kmymoneyview.cpp:162
+#: views/kmymoneyview.cpp:164 widgets/rc.cpp:4 widgets/rc.cpp:94
+msgid "Accounts"
+msgstr "Счета"
+
+#: views/kmymoneyview.cpp:176
+msgid "Bills & Reminders"
+msgstr "Счета и напоминания"
+
+#: views/kmymoneyview.cpp:178
+msgid "Scheduled transactions"
+msgstr "Платежи"
+
+#: dialogs/knewaccountdlg.cpp:98 dialogs/rc.cpp:193 views/kmymoneyview.cpp:188
+#: views/kmymoneyview.cpp:190 widgets/rc.cpp:91
+msgid "Categories"
+msgstr "Статьи"
+
+#: dialogs/kfindtransactiondlg.cpp:212 dialogs/rc.cpp:318
+#: views/kmymoneyview.cpp:199 views/kmymoneyview.cpp:201 widgets/rc.cpp:93
+msgid "Payees"
+msgstr "Получатели"
+
+#: views/kgloballedgerview.cpp:149 views/kmymoneyview.cpp:211
+msgid "Ledgers"
+msgstr "Операции"
+
+#: views/kmymoneyview.cpp:353
+msgid "Creating transactions can only be performed in the ledger view"
+msgstr "Операции можно создавать только в разделе операций"
+
+#: views/kmymoneyview.cpp:367
+msgid "Modifying transactions can only be performed in the ledger view"
+msgstr "Операции можно изменять только в разделе операций"
+
+#: views/kmymoneyview.cpp:382
+msgid "Duplicating transactions can only be performed in the ledger view"
+msgstr "Дублировать операции можно только в разделе операций"
+
+#: views/kmymoneyview.cpp:394
+msgid "Edit the current selected transactions"
+msgstr "Изменить выбранные операции"
+
+#: views/kmymoneyview.cpp:602
+msgid "<b>%1</b> is not a KMyMoney file."
+msgstr "Файл <b>%1</b> не является файлом KMyMoney."
+
+#: views/kmymoneyview.cpp:643
+msgid "GPG is not available for decryption of file <b>%1</b>"
+msgstr "Недоступна система GPG для расшифровки файла <b>%1</b>"
+
+#: views/kmymoneyview.cpp:721
+msgid ""
+"File <b>%1</b> contains the old binary format used by KMyMoney. Please use "
+"an older version of KMyMoney (0.8.x) that still supports this format to "
+"convert it to the new XML based format."
+msgstr ""
+"Файл <b>%1</b> содержит сохранён в устаревшем двоичном формате. Используйте "
+"старую версию KMyMoney (0.8.x) чтобы работать с этим файлом и сохранить этот "
+"файл в новом формате на базе XML."
+
+#: views/kmymoneyview.cpp:723
+msgid "File <b>%1</b> contains an unknown file format!"
+msgstr "Неизвестный формат файла <b>%1</b>!"
+
+#: views/kmymoneyview.cpp:728
+msgid "Cannot read from file <b>%1</b>!"
+msgstr "Невозможно прочитать из файла <b>%1</b>!"
+
+#: views/kmymoneyview.cpp:732
+msgid "Cannot load file <b>%1</b>. Reason: %2"
+msgstr "Невозможно загрузить файл <b>%1</b>. Причина: %2"
+
+#: views/kmymoneyview.cpp:742 views/kmymoneyview.cpp:748
+msgid "File <b>%1</b> not found!"
+msgstr "Файл <b>%1</b> не найден!"
+
+#: views/kmymoneyview.cpp:812
+msgid "Can't open database %1\n"
+msgstr "Невозможно открыть базу данных %1\n"
+
+#: views/kmymoneyview.cpp:844
+msgid "An unrecoverable error occurred while reading the database"
+msgstr "Фатальная ошибка во время чтения базы данных"
+
+#: views/kmymoneyview.cpp:846 views/kmymoneyview.cpp:1208
+msgid "Database malfunction"
+msgstr "База данных не работоспособна"
+
+#: views/kmymoneyview.cpp:938
+msgid "Unknown fix level in input file"
+msgstr "Неизвестный номер подверсии формата файла"
+
+#: views/kmymoneyview.cpp:984
+msgid ""
+"GPG does not seem to be installed on your system. Please make sure, that GPG "
+"can be found using the standard search path. This time, encryption is "
+"disabled."
+msgstr ""
+"Похоже, система GPG не установлена на этом компьютере. Проверьте доступность "
+"GPG на вашей системе. Пока шифрование будет отключено. "
+
+#: views/kmymoneyview.cpp:984
+msgid "GPG not found"
+msgstr "Не найдена система GPG"
+
+#: views/kmymoneyview.cpp:991
+msgid ""
+"You have selected to encrypt your data also with the KMyMoney recover key, "
+"but the key with id</p><p><center><b>%1</b></center></p>has not been found "
+"in your keyring at this time. Please make sure to import this key into your "
+"keyring. You can find it on the <a href=\"http://kmymoney2.sourceforge.net/"
+"\">KMyMoney web-site</a>. This time your data will not be encrypted with the "
+"KMyMoney recover key."
+msgstr ""
+"Ключ GPG с идентификатором </p><p><center><b>%1</b></center></p> для "
+"шифрования не найден в вашей системе. Импортируйте этот ключ, как это "
+"описано на <a href=\"http://kmymoney2.sourceforge.net/\">веб-сайте KMyMoney</"
+"a>. Данные не будут зашифрованы."
+
+#: views/kmymoneyview.cpp:991 views/kmymoneyview.cpp:1000
+msgid "GPG-Key not found"
+msgstr "Ключ GPG не найден"
+
+#: views/kmymoneyview.cpp:1000
+msgid ""
+"You have specified to encrypt your data for the user-id</p><p><center><b>%1</"
+"b>.</center></p>Unfortunately, a valid key for this user-id was not found in "
+"your keyring. Please make sure to import a valid key for this user-id. This "
+"time, encryption is disabled."
+msgstr ""
+"При попытке шифрования данных под пользователем </p><p><center><b>%1</b></"
+"center></p> обнаружено, что для данного пользователя нет подходящего ключа. "
+"Данные не будут зашифрованы."
+
+#: views/kmymoneyview.cpp:1006
+msgid ""
+"You have configured to save your data in encrypted form using GPG. Please be "
+"aware, that this is a brand new feature which is yet untested. Make sure, "
+"you have the necessary understanding that you might loose all your data if "
+"you store it encrypted and cannot decrypt it later on! If unsure, answer "
+"<b>No</b>."
+msgstr ""
+"Вы настроили шифрование сохраняемых данных посредством GPG. Эта возможность "
+"появилась недавно и ещё не проверена должным образом. Поэтому предупреждаем "
+"вас о том, что данные могут быть повреждены. Если вы не уверены, выберите "
+"<b>Нет</b>."
+
+#: views/kmymoneyview.cpp:1008
+msgid "Store GPG encrypted"
+msgstr "Зашифровать GPG"
+
+#: views/kmymoneyview.cpp:1038 views/kmymoneyview.cpp:1052
+msgid "Unable to open file '%1' for writing."
+msgstr "Невозможно сохранить файл «%1»."
+
+#: views/kmymoneyview.cpp:1065 views/kmymoneyview.cpp:1074
+msgid "Failure while writing to '%1'"
+msgstr "Ошибка записи в файл «%1»"
+
+#: views/kmymoneyview.cpp:1086 views/kmymoneyview.cpp:1181
+msgid "Tried to access a file when it's not open"
+msgstr "Попытка доступа к данным без открытия файла"
+
+#: views/kmymoneyview.cpp:1092
+msgid ""
+"Since this version of KMyMoney only writes data files in its new format, "
+"files written with this version cannot be read by KMyMoney version 0.4. If "
+"you still want to use older versions of KMyMoney with your data files, "
+"please make sure you keep a backup-file of your finance data. If you want to "
+"abort this operation, please press Cancel now"
+msgstr ""
+"С этой версии KMyMoney сохраняет данные только в новом формате, который не "
+"может быть прочитан в KMyMoney 0.4. Если вы хотите использовать программу "
+"старой версии с этими данными, создайте резервную копию данных. Если вы "
+"хотите прервать операцию, нажмите кнопку «Отмена»."
+
+#: views/kmymoneyview.cpp:1122
+msgid "Malformed URL '%1'"
+msgstr "Неправильный адрес «%1»"
+
+#: views/kmymoneyview.cpp:1192
+msgid ""
+"Database contains data which must be removed before using SaveAs.\n"
+"Do you wish to continue?"
+msgstr ""
+"База данных содержит данные, которые должны быть удалены перед сохранением с "
+"новым именем. Продолжить?"
+
+#: views/kmymoneyview.cpp:1205
+msgid ""
+"An unrecoverable error occurred while writing to the database.\n"
+"It may well be corrupt."
+msgstr ""
+"Критическая ошибка при записи в базу данных.\n"
+"Данные могут быть повреждены."
+
+#: views/kmymoneyview.cpp:1215
+msgid ""
+"Can't open or create database %1\n"
+"Retry SaveAsDatabase and click Help for further info"
+msgstr ""
+"Невозможно открыть или создать базу данных %1\n"
+"Повторите сохранение как базы данных и обратитесь к справке по программе"
+
+#: views/kmymoneyview.cpp:1354
+msgid "Afghanistan Afghani"
+msgstr "Афганский афгани"
+
+#: views/kmymoneyview.cpp:1355
+msgid "Albanian Lek"
+msgstr "Албанский лек"
+
+#: views/kmymoneyview.cpp:1356
+msgid "Netherland Antillian Guilder"
+msgstr "Нидерландский антильский гульден"
+
+#: views/kmymoneyview.cpp:1357
+msgid "Algerian Dinar"
+msgstr "Алжирский динар"
+
+#: views/kmymoneyview.cpp:1358
+msgid "Andorran Franc"
+msgstr "Андоррский франк"
+
+#: views/kmymoneyview.cpp:1359
+msgid "Andorran Peseta"
+msgstr "Андоррская песета"
+
+#: views/kmymoneyview.cpp:1360
+msgid "Angolan New Kwanza"
+msgstr "Ангольская новая кванза"
+
+#: views/kmymoneyview.cpp:1361
+msgid "Argentine Peso"
+msgstr "Аргентинское песо"
+
+#: views/kmymoneyview.cpp:1362
+msgid "Aruban Florin"
+msgstr "Арубанский флорин"
+
+#: views/kmymoneyview.cpp:1363
+msgid "Australian Dollar"
+msgstr "Австралийский доллар"
+
+#: views/kmymoneyview.cpp:1364
+msgid "Azerbaijani Manat"
+msgstr "Азербайджанский манат"
+
+#: views/kmymoneyview.cpp:1365
+msgid "Bahamian Dollar"
+msgstr "Багамский доллар"
+
+#: views/kmymoneyview.cpp:1366
+msgid "Bahraini Dinar"
+msgstr "Бахрейнский динар"
+
+#: views/kmymoneyview.cpp:1367
+msgid "Bangladeshi Taka"
+msgstr "Бангладешская така"
+
+#: views/kmymoneyview.cpp:1368
+msgid "Barbados Dollar"
+msgstr "Барбадосский доллар"
+
+#: views/kmymoneyview.cpp:1369
+msgid "Belarussian Ruble"
+msgstr "Белорусский рубль"
+
+#: views/kmymoneyview.cpp:1370
+msgid "Belize Dollar"
+msgstr "Белизский доллар"
+
+#: views/kmymoneyview.cpp:1371
+msgid "Bermudian Dollar"
+msgstr "Бермудский доллар"
+
+#: views/kmymoneyview.cpp:1372
+msgid "Bhutan Ngultrum"
+msgstr "Бутанский нгультрум"
+
+#: views/kmymoneyview.cpp:1373
+msgid "Bolivian Boliviano"
+msgstr "Боливийское боливиано"
+
+#: views/kmymoneyview.cpp:1374
+msgid "Bosnian Convertible Mark"
+msgstr "Боснийская конвертируемая марка"
+
+#: views/kmymoneyview.cpp:1375
+msgid "Botswana Pula"
+msgstr "Ботсванская пула"
+
+#: views/kmymoneyview.cpp:1376
+msgid "Brazilian Real"
+msgstr "Бразильский реал"
+
+#: views/kmymoneyview.cpp:1377
+msgid "British Pound"
+msgstr "Английский фунт"
+
+#: views/kmymoneyview.cpp:1378
+msgid "Brunei Dollar"
+msgstr "Брунейский доллар"
+
+#: views/kmymoneyview.cpp:1379
+msgid "Bulgarian Lev"
+msgstr "Болгарский лев"
+
+#: views/kmymoneyview.cpp:1380
+msgid "Burundi Franc"
+msgstr "Бурундийский франк"
+
+#: views/kmymoneyview.cpp:1381
+msgid "CFA Franc BEAC"
+msgstr "Франк КФА ВЕАС"
+
+#: views/kmymoneyview.cpp:1382
+msgid "CFA Franc BCEAO"
+msgstr "Франк КФА ВСЕАО"
+
+#: views/kmymoneyview.cpp:1383
+msgid "CFP Franc Pacifique"
+msgstr "Франк КФП"
+
+#: views/kmymoneyview.cpp:1384
+msgid "Cambodia Riel"
+msgstr "Камбоджийский реал"
+
+#: views/kmymoneyview.cpp:1385
+msgid "Canadian Dollar"
+msgstr "Канадский доллар"
+
+#: views/kmymoneyview.cpp:1386
+msgid "Cape Verde Escudo"
+msgstr "Эскудо Кабо-Верде"
+
+#: views/kmymoneyview.cpp:1387
+msgid "Cayman Islands Dollar"
+msgstr "Доллар Каймановых островов"
+
+#: views/kmymoneyview.cpp:1388
+msgid "Chilean Peso"
+msgstr "Чилийское песо"
+
+#: views/kmymoneyview.cpp:1389
+msgid "Chinese Yuan Renminbi"
+msgstr "Китайский юань"
+
+#: views/kmymoneyview.cpp:1390
+msgid "Colombian Peso"
+msgstr "Колумбийское песо"
+
+#: views/kmymoneyview.cpp:1391
+msgid "Comoros Franc"
+msgstr "Франк Коморских островов"
+
+#: views/kmymoneyview.cpp:1392
+msgid "Costa Rican Colon"
+msgstr "Костариканский колон"
+
+#: views/kmymoneyview.cpp:1393
+msgid "Croatian Kuna"
+msgstr "Хорватская куна"
+
+#: views/kmymoneyview.cpp:1394
+msgid "Cuban Peso"
+msgstr "Кубинское песо"
+
+#: views/kmymoneyview.cpp:1395
+msgid "Czech Koruna"
+msgstr "Чешская крона"
+
+#: views/kmymoneyview.cpp:1396
+msgid "Danish Krone"
+msgstr "Датская крона"
+
+#: views/kmymoneyview.cpp:1397
+msgid "Djibouti Franc"
+msgstr "Франк Джибути"
+
+#: views/kmymoneyview.cpp:1398
+msgid "Dominican Peso"
+msgstr "Доминиканское песо"
+
+#: views/kmymoneyview.cpp:1399
+msgid "East Caribbean Dollar"
+msgstr "Восточно-карибский доллар"
+
+#: views/kmymoneyview.cpp:1400
+msgid "Egyptian Pound"
+msgstr "Египетский фунт"
+
+#: views/kmymoneyview.cpp:1401
+msgid "El Salvador Colon"
+msgstr "Сальвадорский колон"
+
+#: views/kmymoneyview.cpp:1402
+msgid "Eritrean Nakfa"
+msgstr "Эритрейская накфа"
+
+#: views/kmymoneyview.cpp:1403
+msgid "Estonian Kroon"
+msgstr "Эстонская крона"
+
+#: views/kmymoneyview.cpp:1404
+msgid "Ethiopian Birr"
+msgstr "Эфиопский быр"
+
+#: views/kmymoneyview.cpp:1405
+msgid "Euro"
+msgstr "Евро"
+
+#: views/kmymoneyview.cpp:1406
+msgid "Falkland Islands Pound"
+msgstr "Фунт Фолклендских островов"
+
+#: views/kmymoneyview.cpp:1407
+msgid "Fiji Dollar"
+msgstr "Доллар Фиджи"
+
+#: views/kmymoneyview.cpp:1408
+msgid "Gambian Dalasi"
+msgstr "Гамбийский даласи"
+
+#: views/kmymoneyview.cpp:1409
+msgid "Georgian Lari"
+msgstr "Грузинский лари"
+
+#: views/kmymoneyview.cpp:1410
+msgid "Ghanaian Cedi"
+msgstr "Ганский седи"
+
+#: views/kmymoneyview.cpp:1411
+msgid "Gibraltar Pound"
+msgstr "Гибралтарский фунт"
+
+#: views/kmymoneyview.cpp:1412
+msgid "Guatemalan Quetzal"
+msgstr "Гватемальский кетсаль"
+
+#: views/kmymoneyview.cpp:1413
+msgid "Guinea-Bissau Peso"
+msgstr "Песо Гвинеи-Бисау"
+
+#: views/kmymoneyview.cpp:1414
+msgid "Guyanan Dollar"
+msgstr "Гайанский доллар"
+
+#: views/kmymoneyview.cpp:1415
+msgid "Haitian Gourde"
+msgstr "Гаитянский гурд"
+
+#: views/kmymoneyview.cpp:1416
+msgid "Honduran Lempira"
+msgstr "Гондурасская лемпира"
+
+#: views/kmymoneyview.cpp:1417
+msgid "Hong Kong Dollar"
+msgstr "Гонконгский доллар"
+
+#: views/kmymoneyview.cpp:1418
+msgid "Hungarian Forint"
+msgstr "Венгерский форинт"
+
+#: views/kmymoneyview.cpp:1419
+msgid "Iceland Krona"
+msgstr "Исландская крона"
+
+#: views/kmymoneyview.cpp:1420
+msgid "Indian Rupee"
+msgstr "Индийская рупия"
+
+#: views/kmymoneyview.cpp:1421
+msgid "Indonesian Rupiah"
+msgstr "Индонезийская рупия"
+
+#: views/kmymoneyview.cpp:1422
+msgid "Iranian Rial"
+msgstr "Иранский риал"
+
+#: views/kmymoneyview.cpp:1423
+msgid "Iraqi Dinar"
+msgstr "Иракский динар"
+
+#: views/kmymoneyview.cpp:1424
+msgid "Israeli New Shekel"
+msgstr "Израильский шекель"
+
+#: views/kmymoneyview.cpp:1425
+msgid "Jamaican Dollar"
+msgstr "Ямайский доллар"
+
+#: views/kmymoneyview.cpp:1426
+msgid "Japanese Yen"
+msgstr "Японская йена"
+
+#: views/kmymoneyview.cpp:1427
+msgid "Jordanian Dinar"
+msgstr "Иорданский динар"
+
+#: views/kmymoneyview.cpp:1428
+msgid "Kazakhstan Tenge"
+msgstr "Казахский тенге"
+
+#: views/kmymoneyview.cpp:1429
+msgid "Kenyan Shilling"
+msgstr "Кенийский шиллинг"
+
+#: views/kmymoneyview.cpp:1430
+msgid "Kuwaiti Dinar"
+msgstr "Кувейтский динар"
+
+#: views/kmymoneyview.cpp:1431
+msgid "Kyrgyzstan Som"
+msgstr "Киргизский сом"
+
+#: views/kmymoneyview.cpp:1432
+msgid "Laos Kip"
+msgstr "Лаосский кип"
+
+#: views/kmymoneyview.cpp:1433
+msgid "Latvian Lats"
+msgstr "Латвийский лат"
+
+#: views/kmymoneyview.cpp:1434
+msgid "Lebanese Pound"
+msgstr "Ливанский фунт"
+
+#: views/kmymoneyview.cpp:1435
+msgid "Lesotho Loti"
+msgstr "Лоти Лесото"
+
+#: views/kmymoneyview.cpp:1436
+msgid "Liberian Dollar"
+msgstr "Либерийский доллар"
+
+#: views/kmymoneyview.cpp:1437
+msgid "Libyan Dinar"
+msgstr "Ливийский динар"
+
+#: views/kmymoneyview.cpp:1438
+msgid "Lithuanian Litas"
+msgstr "Литовский лит"
+
+#: views/kmymoneyview.cpp:1439
+msgid "Macau Pataca"
+msgstr "Патака Макао"
+
+#: views/kmymoneyview.cpp:1440
+msgid "Macedonian Denar"
+msgstr "Македонский динар"
+
+#: views/kmymoneyview.cpp:1441
+msgid "Malagasy Franc"
+msgstr "Малагасийский франк"
+
+#: views/kmymoneyview.cpp:1442
+msgid "Malawi Kwacha"
+msgstr "Малавийская квача"
+
+#: views/kmymoneyview.cpp:1443
+msgid "Malaysian Ringgit"
+msgstr "Малайзийский ринггит"
+
+#: views/kmymoneyview.cpp:1444
+msgid "Maldive Rufiyaa"
+msgstr "Мальдивская руфия"
+
+#: views/kmymoneyview.cpp:1445
+msgid "Mali Republic Franc"
+msgstr "Франк Мали"
+
+#: views/kmymoneyview.cpp:1446
+msgid "Mauritanian Ouguiya"
+msgstr "Мавританская угия"
+
+#: views/kmymoneyview.cpp:1447
+msgid "Mauritius Rupee"
+msgstr "Маврикийская рупия"
+
+#: views/kmymoneyview.cpp:1448
+msgid "Mexican Peso"
+msgstr "Мексиканское песо"
+
+#: views/kmymoneyview.cpp:1449
+msgid "Moldavian Leu"
+msgstr "Молдавский лей"
+
+#: views/kmymoneyview.cpp:1450
+msgid "Mongolian Tugrik"
+msgstr "Монгольский тугрик"
+
+#: views/kmymoneyview.cpp:1451
+msgid "Moroccan Dirham"
+msgstr "Марокканский дирхам"
+
+#: views/kmymoneyview.cpp:1452
+msgid "Mozambique Metical"
+msgstr "Мозамбикский метикал"
+
+#: views/kmymoneyview.cpp:1453
+msgid "Myanmar Kyat"
+msgstr "Мьянмарский кьят"
+
+#: views/kmymoneyview.cpp:1454
+msgid "Namibian Dollar"
+msgstr "Намибийский доллар"
+
+#: views/kmymoneyview.cpp:1455
+msgid "Nepalese Rupee"
+msgstr "Непальская рупия"
+
+#: views/kmymoneyview.cpp:1456
+msgid "New Zealand Dollar"
+msgstr "Новозеландский доллар"
+
+#: views/kmymoneyview.cpp:1457
+msgid "Nicaraguan Cordoba Oro"
+msgstr "Никарагуанская золотая кордоба"
+
+#: views/kmymoneyview.cpp:1458
+msgid "Nigerian Naira"
+msgstr "Нигерийская найра"
+
+#: views/kmymoneyview.cpp:1459
+msgid "North Korean Won"
+msgstr "Вона КНДР"
+
+#: views/kmymoneyview.cpp:1460
+msgid "Norwegian Kroner"
+msgstr "Норвежская крона"
+
+#: views/kmymoneyview.cpp:1461
+msgid "Omani Rial"
+msgstr "Оманский риал"
+
+#: views/kmymoneyview.cpp:1462
+msgid "Pakistan Rupee"
+msgstr "Пакистанская рупия"
+
+#: views/kmymoneyview.cpp:1463
+msgid "Panamanian Balboa"
+msgstr "Панамские бальбоа"
+
+#: views/kmymoneyview.cpp:1464
+msgid "Papua New Guinea Kina"
+msgstr "Кина Папуа-Новой Гвинеи"
+
+#: views/kmymoneyview.cpp:1465
+msgid "Paraguay Guarani"
+msgstr "Парагвайские гуарани"
+
+#: views/kmymoneyview.cpp:1466
+msgid "Peruvian Nuevo Sol"
+msgstr "Перуанский соль"
+
+#: views/kmymoneyview.cpp:1467
+msgid "Philippine Peso"
+msgstr "Филиппинское песо"
+
+#: views/kmymoneyview.cpp:1468
+msgid "Polish Zloty"
+msgstr "Польский злотый"
+
+#: views/kmymoneyview.cpp:1469
+msgid "Qatari Rial"
+msgstr "Катарский риал"
+
+#: views/kmymoneyview.cpp:1470
+msgid "Romanian Leu (new)"
+msgstr "Румынский лей (новый)"
+
+#: views/kmymoneyview.cpp:1471
+msgid "Russian Ruble"
+msgstr "Российский рубль"
+
+#: views/kmymoneyview.cpp:1472
+msgid "Rwanda Franc"
+msgstr "Франк Руанды"
+
+#: views/kmymoneyview.cpp:1473
+msgid "Samoan Tala"
+msgstr "Тала Самоа"
+
+#: views/kmymoneyview.cpp:1474
+msgid "Sao Tome and Principe Dobra"
+msgstr "Добра Сан-Томе и Принсипи"
+
+#: views/kmymoneyview.cpp:1475
+msgid "Saudi Riyal"
+msgstr "Саудовский риал"
+
+#: views/kmymoneyview.cpp:1476
+msgid "Seychelles Rupee"
+msgstr "Сейшельская рупия"
+
+#: views/kmymoneyview.cpp:1477
+msgid "Sierra Leone Leone"
+msgstr "Леоне Сьерра-Леоне"
+
+#: views/kmymoneyview.cpp:1478
+msgid "Singapore Dollar"
+msgstr "Сингапурский доллар"
+
+#: views/kmymoneyview.cpp:1481
+msgid "Solomon Islands Dollar"
+msgstr "Доллар Соломоновых островов"
+
+#: views/kmymoneyview.cpp:1482
+msgid "Somali Shilling"
+msgstr "Сомалийский шиллинг"
+
+#: views/kmymoneyview.cpp:1483
+msgid "South African Rand"
+msgstr "Южноафриканский рэнд"
+
+#: views/kmymoneyview.cpp:1484
+msgid "South Korean Won"
+msgstr "Вон Республики Корея"
+
+#: views/kmymoneyview.cpp:1485
+msgid "Sri Lanka Rupee"
+msgstr "Шри-Ланкийская рупия"
+
+#: views/kmymoneyview.cpp:1486
+msgid "St. Helena Pound"
+msgstr "Фунт острова Святой Елены"
+
+#: views/kmymoneyview.cpp:1487
+msgid "Sudanese Dinar"
+msgstr "Суданский динар"
+
+#: views/kmymoneyview.cpp:1488
+msgid "Suriname Guilder"
+msgstr "Суринамский гульден"
+
+#: views/kmymoneyview.cpp:1489
+msgid "Swaziland Lilangeni"
+msgstr "Лилангени Свазиленда"
+
+#: views/kmymoneyview.cpp:1490
+msgid "Swedish Krona"
+msgstr "Шведская крона"
+
+#: views/kmymoneyview.cpp:1491
+msgid "Swiss Franc"
+msgstr "Швейцарский франк"
+
+#: views/kmymoneyview.cpp:1492
+msgid "Syrian Pound"
+msgstr "Сирийский фунт"
+
+#: views/kmymoneyview.cpp:1493
+msgid "Taiwan Dollar"
+msgstr "Тайваньский доллар"
+
+#: views/kmymoneyview.cpp:1494
+msgid "Tajikistan Somani"
+msgstr "Таджикский сомони"
+
+#: views/kmymoneyview.cpp:1495
+msgid "Tanzanian Shilling"
+msgstr "Танзанийский шиллинг"
+
+#: views/kmymoneyview.cpp:1496
+msgid "Thai Baht"
+msgstr "Таиландский бат"
+
+#: views/kmymoneyview.cpp:1497
+msgid "Tongan Pa'anga"
+msgstr "Тонганская паанга"
+
+#: views/kmymoneyview.cpp:1498
+msgid "Trinidad and Tobago Dollar"
+msgstr "Доллар Тринидада и Тобаго"
+
+#: views/kmymoneyview.cpp:1499
+msgid "Tunisian Dinar"
+msgstr "Тунисский динар"
+
+#: views/kmymoneyview.cpp:1500
+msgid "Turkish Lira (new)"
+msgstr "Турецкая лира (новая)"
+
+#: views/kmymoneyview.cpp:1501
+msgid "Turkmenistan Manat"
+msgstr "Туркменский манат"
+
+#: views/kmymoneyview.cpp:1502
+msgid "US Dollar"
+msgstr "Доллар США"
+
+#: views/kmymoneyview.cpp:1503
+msgid "Uganda Shilling"
+msgstr "Угандийский шиллинг"
+
+#: views/kmymoneyview.cpp:1504
+msgid "Ukraine Hryvnia"
+msgstr "Украинская гривна"
+
+#: views/kmymoneyview.cpp:1505
+msgid "United Arab Emirates Dirham"
+msgstr "Дирхам ОАЭ"
+
+#: views/kmymoneyview.cpp:1506
+msgid "Uruguayan Peso"
+msgstr "Уругвайское песо"
+
+#: views/kmymoneyview.cpp:1507
+msgid "Uzbekistani Sum"
+msgstr "Узбекский сум"
+
+#: views/kmymoneyview.cpp:1508
+msgid "Vanuatu Vatu"
+msgstr "Вату Вануату"
+
+#: views/kmymoneyview.cpp:1509
+msgid "Venezuelan Bolivar"
+msgstr "Венесуэльский боливар"
+
+#: views/kmymoneyview.cpp:1510
+msgid "Vietnamese Dong"
+msgstr "Вьетнамский донг"
+
+#: views/kmymoneyview.cpp:1511
+msgid "Yugoslav Dinar"
+msgstr "Югославский динар"
+
+#: views/kmymoneyview.cpp:1512
+msgid "Zambian Kwacha"
+msgstr "Замбийская квача"
+
+#: views/kmymoneyview.cpp:1513
+msgid "Zimbabwe Dollar"
+msgstr "Доллар Зимбабве"
+
+#: views/kmymoneyview.cpp:1515
+msgid "Gold"
+msgstr "Золото"
+
+#: views/kmymoneyview.cpp:1516
+msgid "Palladium"
+msgstr "Палладий"
+
+#: views/kmymoneyview.cpp:1517
+msgid "Platinum"
+msgstr "Платина"
+
+#: views/kmymoneyview.cpp:1518
+msgid "Silver"
+msgstr "Серебро"
+
+#: views/kmymoneyview.cpp:1551
+msgid "Austrian Schilling"
+msgstr "Австрийский шиллинг"
+
+#: views/kmymoneyview.cpp:1552
+msgid "German Mark"
+msgstr "Немецкая марка"
+
+#: views/kmymoneyview.cpp:1553
+msgid "French Franc"
+msgstr "Французский франк"
+
+#: views/kmymoneyview.cpp:1554
+msgid "Italian Lira"
+msgstr "Итальянская лира"
+
+#: views/kmymoneyview.cpp:1555
+msgid "Spanish Peseta"
+msgstr "Испанская песета"
+
+#: views/kmymoneyview.cpp:1556
+msgid "Dutch Guilder"
+msgstr "Голландский гульден"
+
+#: views/kmymoneyview.cpp:1557
+msgid "Belgian Franc"
+msgstr "Бельгийский франк"
+
+#: views/kmymoneyview.cpp:1558
+msgid "Luxembourg Franc"
+msgstr "Люксембургский франк"
+
+#: views/kmymoneyview.cpp:1559
+msgid "Portuguese Escudo"
+msgstr "Португальский эскудо"
+
+#: views/kmymoneyview.cpp:1560
+msgid "Irish Pound"
+msgstr "Ирландский фунт"
+
+#: views/kmymoneyview.cpp:1561
+msgid "Finnish Markka"
+msgstr "Финляндская марка"
+
+#: views/kmymoneyview.cpp:1562
+msgid "Greek Drachma"
+msgstr "Греческая драхма"
+
+#: views/kmymoneyview.cpp:1564
+msgid "Romanian Leu"
+msgstr "Румынский лей"
+
+#: views/kmymoneyview.cpp:1566
+msgid "Russian Ruble (old)"
+msgstr "Российский рубль (неденоминированный)"
+
+#: views/kmymoneyview.cpp:1568
+msgid "Slovenian Tolar"
+msgstr "Словенский толар"
+
+#: views/kmymoneyview.cpp:1571
+msgid "Turkish Lira"
+msgstr "Турецкая лира"
+
+#: views/kmymoneyview.cpp:1574
+msgid "Maltese Lira"
+msgstr "Мальтийская лира"
+
+#: views/kmymoneyview.cpp:1575
+msgid "Cyprus Pound"
+msgstr "Кипрский фунт"
+
+#: views/kmymoneyview.cpp:1578
+msgid "Slovak Koruna"
+msgstr "Словацкая крона"
+
+#: views/kmymoneyview.cpp:1888
+msgid ""
+"The account \"%1\" was previously created as loan account but some "
+"information is missing. The new loan wizard will be started to collect all "
+"relevant information. Please use a KMyMoney version >= 0.8.7 and < 0.9 to "
+"correct the problem."
+msgstr ""
+"Счёт «%1» был создан как кредитный счёт, но некоторая необходимая информация "
+"по нему отсутствует. Будет запущен мастер кредита для сбора необходимой "
+"информации. Используйте версию программы >= 0.8.7 и < 0.9 для исправления "
+"проблемы."
+
+#: views/kmymoneyview.cpp:1892
+msgid "Account problem"
+msgstr "Проблема со счётом"
+
+#: views/kmymoneyview.cpp:1941
+msgid "Unable to add schedule: "
+msgstr "Невозможно добавить график платежей: "
+
+#: views/kmymoneyview.cpp:1970
+msgid "Fix transactions"
+msgstr "Восстановление испорченных операций"
+
+#: views/kaccountsview.cpp:522 views/kinstitutionsview.cpp:300
+msgid "Net Worth: "
+msgstr "Остаток: "
+
+#: dialogs/rc.cpp:108 dialogs/rc.cpp:163 dialogs/rc.cpp:250 dialogs/rc.cpp:755
+#: dialogs/rc.cpp:830 views/kinvestmentview.cpp:77 widgets/register.cpp:572
+msgid "Quantity"
+msgstr "Количество"
+
+#: views/kscheduledlistitem.cpp:137
+msgid "Finished"
+msgstr "Готово"
+
+#: views/kbudgetview.cpp:109
+msgid "Creates a new budget"
+msgstr "Создать бюджет"
+
+#: views/kbudgetview.cpp:110
+msgid "Use this to create a new empty budget."
+msgstr "Создать новый пустой бюджет."
+
+#: views/kbudgetview.cpp:116
+msgid "Rename the current selected budget"
+msgstr "Переименовать выбранный бюджет"
+
+#: views/kbudgetview.cpp:117
+msgid "Use this to start renaming the selected budget."
+msgstr "Переименовать выбранный бюджет."
+
+#: views/kbudgetview.cpp:123
+msgid "Delete the current selected budget"
+msgstr "Удалить выбранный бюджет"
+
+#: views/kbudgetview.cpp:124
+msgid "Use this to delete the selected budget."
+msgstr "Удалить выбранный бюджет."
+
+#: views/kbudgetview.cpp:130
+msgid "Accepts the entered values and stores the budget"
+msgstr "Сохранить данные бюджета."
+
+#: views/kbudgetview.cpp:131
+msgid "Use this to store the modified data."
+msgstr "Сохранить изменённые данные бюджета."
+
+#: views/kbudgetview.cpp:137
+msgid "Revert budget to last saved state"
+msgstr "Вернуться к прежней версии бюджета"
+
+#: views/kbudgetview.cpp:138
+msgid "Use this to discard the modified data."
+msgstr "Не сохранять изменённые данные бюджета."
+
+#: views/kbudgetview.cpp:489
+msgid "Do you want to save the changes for <b>%1</b>"
+msgstr "Сохранить изменения в <b>%1</b>?"
+
+#: views/kbudgetview.cpp:610
+msgid ""
+"A budget with the name '%1' already exists. It is not advisable to have "
+"multiple budgets with the same identification name. Are you sure you would "
+"like to rename the budget?"
+msgstr ""
+"Бюджет с названием «%1» уже существует. Не рекомендуется иметь несколько "
+"разных бюджетов с одним и тем же названием. Переименовать бюджет?"
+
+#: views/kbudgetview.cpp:635 views/kbudgetview.cpp:750
+msgid "Unable to modify budget"
+msgstr "Невозможно изменить бюджет"
+
+#: views/kbudgetview.cpp:736
+msgid "Unable to reset budget"
+msgstr "Невозможно вернуть прежнюю версию бюджета"
+
+#: views/rc.cpp:1
+msgid "List"
+msgstr "Список"
+
+#: views/rc.cpp:2 views/rc.cpp:20
+msgid "Collapse all accounts in the list"
+msgstr "Свернуть все счета в списке"
+
+#: views/rc.cpp:3 views/rc.cpp:21
+msgid "Expand all accounts in the list"
+msgstr "Развернуть все счета в списке"
+
+#: views/rc.cpp:4
+msgid "Icons"
+msgstr "Значки"
+
+#: views/rc.cpp:5 views/rc.cpp:22
+msgid "Note: Unused categories are not shown as selected by settings."
+msgstr "Примечание: неиспользованные статьи не показываются."
+
+#: views/rc.cpp:6 views/rc.cpp:23 views/rc.cpp:54
+msgid "Total Profits:"
+msgstr "Общий доход:"
+
+#: views/rc.cpp:7
+msgid "Your budgets"
+msgstr "Бюджеты"
+
+#: dialogs/rc.cpp:340 dialogs/rc.cpp:841 dialogs/settings/rc.cpp:124
+#: views/rc.cpp:8 widgets/rc.cpp:48 widgets/rc.cpp:150
+msgid "New"
+msgstr "Создать"
+
+#: views/rc.cpp:9
+msgid "Ren"
+msgstr "Переименовать"
+
+#: views/rc.cpp:10
+msgid "Del"
+msgstr "Удалить"
+
+#: views/rc.cpp:11
+msgid "Res"
+msgstr "Вернуть"
+
+#: views/rc.cpp:12
+msgid "Upd"
+msgstr "Обновить"
+
+#: views/rc.cpp:15
+msgid "Hide unused budget categories"
+msgstr "Скрыть неиспользуемые статьи бюджета"
+
+#: views/rc.cpp:16
+msgid "Assignments"
+msgstr "Назначения"
+
+#: views/rc.cpp:19
+msgid "Include subaccounts"
+msgstr "&Включая субсчета"
+
+#: dialogs/settings/rc.cpp:23 views/rc.cpp:24
+msgid "Forecast Settings"
+msgstr "Параметры прогноза"
+
+#: views/rc.cpp:25
+msgid "Days to Forecast:"
+msgstr "Срок прогноза в днях:"
+
+#: views/rc.cpp:26
+msgid "Days of Accounts Cycle:"
+msgstr "Дней в учётном периоде"
+
+#: dialogs/settings/rc.cpp:25 views/rc.cpp:27
+msgid "Day of Month to start Forecast:"
+msgstr "Начинать с дня месяца:"
+
+#: views/rc.cpp:28
+msgid "Historic Cycles:"
+msgstr "Количество учётных периодов для анализа:"
+
+#: views/rc.cpp:29
+msgid "Chart Detail:"
+msgstr "Диаграмма:"
+
+#: views/rc.cpp:30 widgets/kmymoneyaccountselector.cpp:64 widgets/rc.cpp:65
+msgid "All"
+msgstr "Все"
+
+#: views/rc.cpp:31 widgets/rc.cpp:66
+msgid "Top-Level"
+msgstr "Только верхний уровень"
+
+#: views/rc.cpp:32 widgets/rc.cpp:67
+msgid "Groups"
+msgstr "По группам"
+
+#: views/rc.cpp:33 widgets/rc.cpp:68
+msgid "Totals"
+msgstr "Итоги"
+
+#: views/rc.cpp:34
+msgid "<p>Choose what level of detail to show on the chart.</p>"
+msgstr "<p>Какой уровень детализации должен быть показан на диаграмме.</p>"
+
+#: views/rc.cpp:35
+msgid "Current Forecast Method:"
+msgstr "Метод:"
+
+#: views/rc.cpp:36
+msgid "method"
+msgstr "Метод:"
+
+#: dialogs/settings/rc.cpp:32 views/rc.cpp:37
+msgid "History Forecast Method"
+msgstr "Метод ретроспективного анализа"
+
+#: dialogs/settings/rc.cpp:33 views/rc.cpp:38
+msgid "Simple Moving Average"
+msgstr "Простая скользящая средняя"
+
+#: dialogs/settings/rc.cpp:34 views/rc.cpp:39
+msgid "Weighted Moving Average"
+msgstr "Взвешенная скользящая средняя"
+
+#: dialogs/settings/rc.cpp:35 views/rc.cpp:40
+msgid "Linear Regression"
+msgstr "Регрессионный анализ"
+
+#: dialogs/keditloanwizard.cpp:315 dialogs/rc.cpp:628 dialogs/rc.cpp:647
+#: views/rc.cpp:43
+msgid "Summary"
+msgstr "Сводка"
+
+#: views/rc.cpp:45
+msgid "0 days"
+msgstr "последние 0 дней"
+
+#: views/rc.cpp:46
+msgid "30 days"
+msgstr "последние 30 дней"
+
+#: views/rc.cpp:47
+msgid "60 days"
+msgstr "последние 30 дней"
+
+#: views/rc.cpp:48
+msgid "90 days"
+msgstr "последние 90 дней"
+
+#: views/rc.cpp:49
+msgid "New Item"
+msgstr "Новый элемент"
+
+#: views/rc.cpp:50 widgets/rc.cpp:64
+msgid "Detail"
+msgstr "Подробности"
+
+#: views/rc.cpp:51
+msgid "Advanced"
+msgstr "Дополнительно"
+
+#: views/rc.cpp:52
+msgid "Budget Forecast"
+msgstr "Прогноз исполнения бюджета"
+
+#: views/rc.cpp:55
+msgid "Investment Summary"
+msgstr "Ценные бумаги"
+
+#: views/rc.cpp:56
+msgid "Select Account:"
+msgstr "Счёт:"
+
+#: views/rc.cpp:57
+msgid ""
+"Summary of the equities contained in this account, showing your holdings and "
+"their most recent price."
+msgstr ""
+"Ценные бумаги, учитываемые на этом счёте, включая количество и последние "
+"цены."
+
+#: views/rc.cpp:60 widgets/register.cpp:564
+msgid "No."
+msgstr "Номер"
+
+#: views/rc.cpp:64
+msgid "Balance: "
+msgstr "Остаток: "
+
+#: views/rc.cpp:65
+msgid "Address"
+msgstr "Адрес"
+
+#: views/rc.cpp:66
+msgid "Payee Information"
+msgstr "Информация о получателе"
+
+#: views/rc.cpp:67
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#: dialogs/rc.cpp:393 views/rc.cpp:69
+msgid "Telephone/Fax:"
+msgstr "Телефон и факс:"
+
+#: views/rc.cpp:70
+msgid "Notes"
+msgstr "Примечания"
+
+#: views/rc.cpp:71
+msgid "Address:"
+msgstr "Адрес:"
+
+#: views/rc.cpp:72
+msgid "Matching"
+msgstr "Привязка"
+
+#: views/rc.cpp:73
+msgid "Transaction Matching"
+msgstr "Связь операций"
+
+#: views/rc.cpp:74
+msgid "No matching"
+msgstr "Не связывать операции"
+
+#: views/rc.cpp:75
+msgid "Match on Payee name"
+msgstr "Связывать по получателю"
+
+#: views/rc.cpp:76
+msgid "Match on a name listed below"
+msgstr "Связывать по указанному имени"
+
+#: views/rc.cpp:77
+msgid "List of matching names"
+msgstr "Список имён"
+
+#: views/rc.cpp:78
+msgid ""
+"This list contains the names that will match this payee if a transaction is "
+"imported from an external source. Keep in mind, that you can specify regular "
+"expressions here."
+msgstr ""
+"Этот список содержит имена, которые могут соответствовать получателю в "
+"импортируемой выписке. Вы можете указать регулярное выражение."
+
+#: views/rc.cpp:79
+msgid "Ignore Case"
+msgstr "Без учёта регистра"
+
+#: views/rc.cpp:80
+msgid "Default Account"
+msgstr "Счёт по умолчанию"
+
+#: views/rc.cpp:81
+msgid ""
+"Use the default account for\n"
+"new transactions with this payee"
+msgstr "Использовать счёт по умолчанию для новых операций с этим получателем."
+
+#: views/rc.cpp:82
+msgid "Default category:"
+msgstr "Статья по умолчанию:"
+
+#: views/rc.cpp:83
+msgid "Suggest a category"
+msgstr "Назначить статью"
+
+#: views/rc.cpp:85
+msgid "New Scheduled transaction..."
+msgstr "Создать запланированную операцию..."
+
+#: views/rc.cpp:86
+msgid "Filter Accounts"
+msgstr "Показывать счета"
+
+#: views/rc.cpp:87
+msgid "List View"
+msgstr "Список"
+
+#: views/rc.cpp:88
+msgid "Calendar View"
+msgstr "Календарь"
+
+#: views/kinstitutionsview.cpp:43
+msgid "Institution/Account"
+msgstr "Учреждение"
+
+#: views/kinstitutionsview.cpp:157
+msgid "Accounts with no institution assigned"
+msgstr "(учреждение не указано)"
+
+#: views/kscheduledview.cpp:70
+msgid "Type/Name"
+msgstr "Тип/Имя"
+
+#: views/kscheduledview.cpp:75
+msgid "Frequency"
+msgstr "Периодичность"
+
+#: views/kscheduledview.cpp:157
+msgid "Unable to load accounts: "
+msgstr "Невозможно загрузить счета: "
+
+#: views/kscheduledview.cpp:171 views/kscheduledview.cpp:429
+#: views/kscheduledview.cpp:445 widgets/kmymoneyscheduledcalendar.cpp:46
+msgid "Bills"
+msgstr "Счета на оплату"
+
+#: dialogs/rc.cpp:232 dialogs/rc.cpp:706 views/kscheduledview.cpp:172
+#: views/kscheduledview.cpp:431 views/kscheduledview.cpp:447
+#: widgets/kmymoneyscheduledcalendar.cpp:47
+msgid "Deposits"
+msgstr "Зачисления"
+
+#: views/kscheduledview.cpp:173 views/kscheduledview.cpp:435
+#: views/kscheduledview.cpp:451
+msgid "Loans"
+msgstr "Кредиты"
+
+#: views/kscheduledview.cpp:357
+msgid "Error activating context menu"
+msgstr "Ошибка создания контекстного меню"
+
+#: views/kscheduledview.cpp:385
+msgid "Error executing item"
+msgstr "Ошибка выполнения"
+
+#: views/kscheduledview.cpp:419
+msgid "Unable to filter account"
+msgstr "Невозможно применить фильтр"
+
+#: views/kgloballedgerview.cpp:508
+msgid "Statement Details"
+msgstr "Выписка"
+
+#: views/kgloballedgerview.cpp:512
+msgid "Statement Deposit Details"
+msgstr "Зачисление"
+
+#: views/kgloballedgerview.cpp:513
+msgid "Statement Payment Details"
+msgstr "Списание"
+
+#: views/kgloballedgerview.cpp:642
+msgid "%1 deposits (%3), %2 payments (%4)"
+msgstr "Зачислений: %1 (%3), списаний: %2 (%4)"
+
+#: views/kgloballedgerview.cpp:649
+msgid "%1 payments (%2)"
+msgstr "Списаний: %1 (%2)"
+
+#: views/kgloballedgerview.cpp:653
+msgid "%1 deposits (%2)"
+msgstr "Зачислений: %1 (%2)"
+
+#: views/kgloballedgerview.cpp:721
+#, c-format
+msgid "Statement: %1"
+msgstr "Выписка: %1"
+
+#: views/kgloballedgerview.cpp:722 views/kgloballedgerview.cpp:736
+#, c-format
+msgid "Cleared: %1"
+msgstr "Проверено: %1"
+
+#: views/kgloballedgerview.cpp:723
+#, c-format
+msgid "Difference: %1"
+msgstr "Разница: %1"
+
+#: views/kgloballedgerview.cpp:730
+#, c-format
+msgid "Last reconciled: %1"
+msgstr "Последняя сверенная операция: %1"
+
+#: views/kgloballedgerview.cpp:732
+msgid "Never reconciled"
+msgstr "Не сверенные"
+
+#: views/kgloballedgerview.cpp:772
+msgid "Investment value: %1%2"
+msgstr "Стоимость инвестиции: %1%2"
+
+#: views/kgloballedgerview.cpp:1040
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to continue to edit the transactions anyway?"
+msgstr ""
+"Как минимум одна из разделяемых операций была сверена. Продолжить изменение "
+"операции?"
+
+#: views/kgloballedgerview.cpp:1051
+msgid ""
+"At least one split of the selected transactions has been frozen. Editing the "
+"transactions is therefore prohibited."
+msgstr ""
+"Как минимум одна из разделяемых операций была заблокирована. Изменение "
+"операции запрещено."
+
+#: views/kgloballedgerview.cpp:1053
+msgid "Transaction already frozen"
+msgstr "Операция заблокирована"
+
+#: views/kgloballedgerview.cpp:1058
+msgid ""
+"At least one split of the selected transaction references an account that "
+"has been closed. Editing the transactions is therefore prohibited."
+msgstr ""
+"Как минимум одна из разделяемых операций использует уже закрытый счёт. "
+"Изменение операции запрещено."
+
+#: views/kgloballedgerview.cpp:1060
+msgid "Account closed"
+msgstr "Используется закрытый счет"
+
+#: views/kgloballedgerview.cpp:1349
+msgid "Cannot create transactions when no account is selected."
+msgstr "Невозможно создавать операции без указания счёта."
+
+#: views/kgloballedgerview.cpp:1354
+msgid "Cannot create transactions in the context of a category."
+msgstr "Невозможно создавать операции без указания счёта."
+
+#: views/kgloballedgerview.cpp:1358
+msgid "Cannot create transactions in a closed account."
+msgstr "Невозможно создавать операции с закрытым счётом."
+
+#: views/kgloballedgerview.cpp:1370
+msgid "Cannot process transaction with focus if it is not selected."
+msgstr "Невозможно обработать операцию, если она не выбрана."
+
+#: views/kgloballedgerview.cpp:1400
+msgid "Cannot edit transactions with frozen splits."
+msgstr ""
+"Невозможно изменять операции с заблокированными разделёнными операциями."
+
+#: views/kgloballedgerview.cpp:1411
+msgid "Cannot edit transactions in the context of a category."
+msgstr "Невозможно изменять операции без указания счёта."
+
+#: views/kgloballedgerview.cpp:1430
+msgid ""
+"Cannot edit investment transactions and non-investment transactions together."
+msgstr "Невозможно одновременно изменять инвестиционные и обычные операции."
+
+#: views/kgloballedgerview.cpp:1438
+msgid "Cannot edit multiple split transactions at once."
+msgstr "Невозможно одновременно изменять несколько разделяемых операций."
+
+#: views/kgloballedgerview.cpp:1448
+msgid "Cannot edit investment transactions in the context of this account."
+msgstr "Невозможно изменять инвестиционные операции, использующие этот счёт."
+
+#: views/kforecastview.cpp:164
+msgid "Scheduled"
+msgstr "На базе будущих платежей"
+
+#: views/kforecastview.cpp:169
+msgid "History"
+msgstr "На базе предыдущих операций"
+
+#: views/kforecastview.cpp:296
+msgid "The balance of %2 is below the minimum balance %3 today."
+msgstr "Остаток на счету <b>%2</b> ниже минимального остатка %3."
+
+#: views/kforecastview.cpp:301 views/khomeview.cpp:1043
+msgid "The balance of %1 will drop below the minimum balance %2 in %3 days."
+msgstr ""
+"Остаток на счету <b>%1</b> будет ниже минимального остатка %2 через %3 дней."
+
+#: views/kforecastview.cpp:318 views/khomeview.cpp:1059
+msgid "The balance of %1 is below %2 today."
+msgstr "Остаток на счету <b>%1</b> будет меньше %2 уже сегодня."
+
+#: views/kforecastview.cpp:323 views/khomeview.cpp:1064
+msgid "The balance of %1 is above %2 today."
+msgstr "Остаток на счету <b>%1</b> будет больше %2 уже сегодня."
+
+#: views/kforecastview.cpp:330 views/khomeview.cpp:1070
+msgid "The balance of %1 will drop below %2 in %3 days."
+msgstr "Остаток на счету <b>%1</b> будет меньше %2 через %3 дней."
+
+#: views/kforecastview.cpp:335 views/khomeview.cpp:1075
+msgid "The balance of %1 will raise above %2 in %3 days."
+msgstr "Остаток на счету <b>%1</b> будет больше %2 через %3 дней."
+
+#: views/kforecastview.cpp:348
+msgid "The account %1 is decreasing %2 per cycle."
+msgstr "Счёт %1 уменьшается на %2 каждый учётный период."
+
+#: views/kforecastview.cpp:404 widgets/kmymoneyaccounttreeforecast.cpp:114
+#, c-format
+msgid "Min Bal %1"
+msgstr "Остаток %1 (мин.)"
+
+#: views/kforecastview.cpp:406 widgets/kmymoneyaccounttreeforecast.cpp:116
+#, c-format
+msgid "Min Date %1"
+msgstr "Дата %1 (мин.)"
+
+#: views/kforecastview.cpp:409 widgets/kmymoneyaccounttreeforecast.cpp:119
+#, c-format
+msgid "Max Bal %1"
+msgstr "Остаток %1 (макс.)"
+
+#: views/kforecastview.cpp:411 widgets/kmymoneyaccounttreeforecast.cpp:121
+#, c-format
+msgid "Max Date %1"
+msgstr "Дата %1 (макс.)"
+
+#: views/kforecastview.cpp:413 widgets/kmymoneyaccounttreeforecast.cpp:123
+msgid "Average"
+msgstr "Среднее"
+
+#: views/kforecastview.cpp:649 views/khomeview.cpp:268 views/khomeview.cpp:275
+msgid "Networth Forecast"
+msgstr "Прогноз остатков"
+
+#: views/khomeview.cpp:203
+msgid "Your Financial Summary"
+msgstr "Сводное финансовое состояние"
+
+#: views/khomeview.cpp:218
+msgid "Preferred Accounts"
+msgstr "Предпочтительные счета"
+
+#: views/khomeview.cpp:225 views/khomeview.cpp:227
+msgid "Payment Accounts"
+msgstr "Счета выплат"
+
+#: views/khomeview.cpp:256
+msgid "Show KMyMoney welcome page"
+msgstr "Страница приветствия"
+
+#: views/khomeview.cpp:409
+msgid "Overdue payments"
+msgstr "Просроченные платежи"
+
+#: views/khomeview.cpp:424 views/khomeview.cpp:497 views/khomeview.cpp:531
+msgid "Balance after"
+msgstr "Остаток после"
+
+#: views/khomeview.cpp:482
+msgid "Today's payments"
+msgstr "Сегодняшние платежи"
+
+#: views/khomeview.cpp:516
+msgid "Future payments"
+msgstr "Ожидаемые платежи"
+
+#: views/khomeview.cpp:585
+msgid "Less..."
+msgstr "Меньше..."
+
+#: views/khomeview.cpp:587
+msgid "More..."
+msgstr "Больше..."
+
+#: views/khomeview.cpp:622
+msgid "Enter schedule"
+msgstr "Ввести платёж"
+
+#: views/khomeview.cpp:624
+msgid "Skip schedule"
+msgstr "Пропустить платёж"
+
+#: views/khomeview.cpp:627
+msgid "Edit schedule"
+msgstr "Изменить платёж"
+
+#: views/khomeview.cpp:631
+msgid " (%1 payments)"
+msgstr " (платежей: %1)"
+
+#: views/khomeview.cpp:771
+msgid "To Minimum Balance / Maximum Credit"
+msgstr "Минимальный остаток"
+
+#: views/khomeview.cpp:964
+msgid "%1 Day Forecast"
+msgstr "Прогноз на %1 дней"
+
+#: views/khomeview.cpp:973 widgets/kmymoneyaccounttreeforecast.cpp:67
+msgid "%1 days"
+msgstr "через %1 дней"
+
+#: views/khomeview.cpp:1039
+msgid "The balance of %1 is below the minimum balance %2 today."
+msgstr "Остаток на счету %1 сегодня ниже минимального остатка %2."
+
+#: views/khomeview.cpp:1175
+msgid ""
+"Before KMyMoney can give you detailed information about your financial "
+"status, you need to create at least one account. Until then, KMyMoney shows "
+"the welcome page instead."
+msgstr ""
+"Перед тем, как получить сводное финансовое состояние, вам необходимо создать "
+"хотя бы один счёт. До тех пор пока счёт не создан, будет показываться "
+"страница приветствия."
+
+#: views/khomeview.cpp:1258
+msgid "Assets and Liabilities Summary"
+msgstr "Активные и пассивные счета"
+
+#: views/khomeview.cpp:1262
+msgid "Asset Accounts"
+msgstr "Активные счёта"
+
+#: views/khomeview.cpp:1270
+msgid "Liability Accounts"
+msgstr "Пассивные счета"
+
+#: views/khomeview.cpp:1348
+msgid "Total Assets"
+msgstr "Всего активов"
+
+#: views/khomeview.cpp:1354
+msgid "Total Liabilities"
+msgstr "Всего пассивов"
+
+#: views/khomeview.cpp:1399
+msgid "Current Month Summary"
+msgstr "Текущий месяц"
+
+#: views/khomeview.cpp:1403 views/khomeview.cpp:1440
+msgid "Budgeted"
+msgstr "Бюджет"
+
+#: views/khomeview.cpp:1433
+msgid "Budget Overruns"
+msgstr "Перерасход бюджета"
+
+#: views/khomeview.cpp:1502
+msgid "No Budget Categories have been overrun"
+msgstr "Нет перерасхода бюджета"
+
+#: views/khomeview.cpp:1801
+msgid "Cash Flow Summary"
+msgstr "Дайджест денежного потока"
+
+#: views/khomeview.cpp:1808
+msgid "Income and Expenses of Current Month"
+msgstr "Доходы и расходы в этом месяце"
+
+#: views/khomeview.cpp:1816
+msgid "Scheduled Income"
+msgstr "Планируемые доходы"
+
+#: views/khomeview.cpp:1819
+msgid "Expenses"
+msgstr "Расходы"
+
+#: views/khomeview.cpp:1822
+msgid "Scheduled Expenses"
+msgstr "Планируемые расходы"
+
+#: views/khomeview.cpp:1850
+msgid "Liquid Assets and Liabilities"
+msgstr "Ликвидные активы и пассивы"
+
+#: views/khomeview.cpp:1855
+msgid "Liquid Assets"
+msgstr "Ликвидные активы"
+
+#: views/khomeview.cpp:1858
+msgid "Transfers to Liquid Liabilities"
+msgstr "Переводы на ликвидные пассивы"
+
+#: views/khomeview.cpp:1861
+msgid "Liquid Liabilities"
+msgstr "Ликвидные пассивы"
+
+#: views/khomeview.cpp:1864
+msgid "Other Transfers"
+msgstr "Другие переводы"
+
+#: views/khomeview.cpp:1908
+msgid "Cash Flow Status"
+msgstr "Состояние денежного потока"
+
+#: views/khomeview.cpp:1914
+msgid "Expected Liquid Assets"
+msgstr "Ожидаемые ликвидные активы"
+
+#: views/khomeview.cpp:1917
+msgid "Expected Liquid Liabilities"
+msgstr "Ожидаемые ликвидные пассивы"
+
+#: views/khomeview.cpp:1920
+msgid "Expected Profit/Loss"
+msgstr "Ожидаемая прибыль/убыток"
+
+#: plugins/ofximport/ofximporterplugin.cpp:64
+msgid "OFX..."
+msgstr "OFX..."
+
+#: plugins/ofximport/ofximporterplugin.cpp:69
+msgid "OFX import file selection"
+msgstr "Выбор файла OFX для импорта"
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid ""
+"Unable to import %1 using the OFX importer plugin. This file is not the "
+"correct format."
+msgstr "Невозможно импортировать %1 через модуль OFX. Неверный формат файла."
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid "Incorrect format"
+msgstr "Неверный формат"
+
+#: plugins/ofximport/ofximporterplugin.cpp:122
+msgid "Unable to parse file"
+msgstr "Невозможно обработать файл"
+
+#: plugins/ofximport/ofximporterplugin.cpp:576
+msgid "Online settings"
+msgstr "Параметры связи банк-клиент"
+
+#: plugins/ofximport/ofximporterplugin.cpp:635
+#, c-format
+msgid "Error connecting to bank: %1"
+msgstr "Ошибка подключения к банку: %1"
+
+#: plugins/ofximport/ofximporterplugin.cpp:646
+msgid ""
+"Unable to import %1 using the OFX importer plugin. The plugin returned the "
+"following error:<p>%2"
+msgstr "Невозможно импортировать %1 через модуль OFX. Ошибка: %2"
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Importing process terminated unexpectedly."
+msgstr "Аварийное завершение процесса импорта."
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Failed to import all statements."
+msgstr "Ошибка импорта всех выписок."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "The HTTP request failed."
+msgstr "Ошибка подключения."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "Failed"
+msgstr "Ошибка"
+
+#: plugins/ofximport/ofxpartner.cpp:410
+msgid "Cannot open file %1 for writing"
+msgstr "Невозможно записать в файл «%1»"
+
+#: plugins/ofximport/ofxpartner.cpp:414
+msgid "OFX setup error"
+msgstr "Ошибка настройки импорта из OFX"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid "Loading banklist"
+msgstr "Загрузка списка банков..."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid ""
+"Getting list of banks from http://moneycentral.msn.com/\n"
+"This may take some time depending on the available bandwidth."
+msgstr ""
+"Загружается список банков с адреса http://moneycentral.msn.com/\n"
+"Эта операция может занять некоторое время, в зависимости от\n"
+"скорости доступа к сети."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:155
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:199
+msgid "Supports online statements<br>"
+msgstr "Поддерживает онлайновые выписки со счета<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:157
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:201
+msgid "Supports investments<br>"
+msgstr "Поддерживает инвестиции<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:159
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:203
+msgid "Supports bill payment (but not supported by KMyMoney yet)<br>"
+msgstr "Поддерживает оплату счетов (пока не поддерживается KMyMoney)<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:163
+msgid "Does not support online banking</p>"
+msgstr "Не поддерживает работу через Интернет</p>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:173
+msgid "Please choose a bank."
+msgstr "Выберите банк."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:179
+msgid "Please fill all fields with values."
+msgstr "Заполните поля."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:271
+msgid "No suitable accounts were found at this bank."
+msgstr "Не было найдено подходящих счетов в данном банке."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:283
+msgid "Please choose an account"
+msgstr "Выберите счёт."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:386
+msgid "Server message: %1\n"
+msgstr "Сообщение сервера: %1\n"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+msgid "Your bank returned warnings when signing on"
+msgstr "Банк выдал предупреждения при подключении"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+#, c-format
+msgid "WARNING %1"
+msgstr "ПРЕДУПРЕЖДЕНИЕ %1"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+msgid "Error signing onto your bank"
+msgstr "Ошибка подключения к банку"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, c-format
+msgid "ERROR %1"
+msgstr "ОШИБКА %1"
+
+#: plugins/ofximport/dialogs/konlinebankingstatus.cpp:59
+msgid "Enabled & configured"
+msgstr "Включено и настроено"
+
+#: plugins/ofximport/dialogs/rc.cpp:1
+msgid "OFX Direct Connect"
+msgstr "Прямое подключение по OFX"
+
+#: plugins/ofximport/dialogs/rc.cpp:2
+msgid "Contacting bank..."
+msgstr "Подключение к банку..."
+
+#: plugins/ofximport/dialogs/rc.cpp:4
+msgid "Online Banking Account Setup"
+msgstr "Настройка счета банк-клиент."
+
+#: plugins/ofximport/dialogs/rc.cpp:5
+msgid "Select Financial Institution"
+msgstr "Выберите учреждение"
+
+#: plugins/ofximport/dialogs/rc.cpp:6
+msgid "Please select your financial institution from the list below..."
+msgstr "Выберите ваш банк или финансовое учреждение из списка..."
+
+#: plugins/ofximport/dialogs/rc.cpp:7
+msgid "Automatic"
+msgstr "Автоматически"
+
+#: plugins/ofximport/dialogs/rc.cpp:8
+msgid "Financial Institution"
+msgstr "Банк или учреждение"
+
+#: plugins/ofximport/dialogs/rc.cpp:9
+msgid "Manual"
+msgstr "Вручную"
+
+#: plugins/ofximport/dialogs/rc.cpp:10
+msgid "Org"
+msgstr "Org"
+
+#: plugins/ofximport/dialogs/rc.cpp:11
+msgid "FID"
+msgstr "FID"
+
+#: dialogs/settings/rc.cpp:120 plugins/ofximport/dialogs/rc.cpp:12
+#: widgets/rc.cpp:46
+msgid "URL"
+msgstr "Адрес"
+
+#: plugins/ofximport/dialogs/rc.cpp:13
+msgid "Enter Login Details"
+msgstr "Введите имя и пароль для входа"
+
+#: plugins/ofximport/dialogs/rc.cpp:14
+msgid ""
+"Please enter the username and password you use to log into this bank for "
+"online banking. Please note that many banks require a separate signup, and "
+"assign a separate PIN or password just for online banking from home."
+msgstr ""
+"Введите имя и пароль для подключения к банку по системе банк-клиент. "
+"Некоторые банки предоставляют отдельный PIN или пароль для доступа из дома."
+
+#: plugins/ofximport/dialogs/rc.cpp:15
+msgid "Connection Details"
+msgstr "Информация о подключении"
+
+#: plugins/ofximport/dialogs/rc.cpp:16
+msgid "Username"
+msgstr "Имя пользователя"
+
+#: plugins/ofximport/dialogs/rc.cpp:17 plugins/ofximport/dialogs/rc.cpp:36
+msgid "Header Version"
+msgstr "Версия"
+
+#: plugins/ofximport/dialogs/rc.cpp:18 plugins/ofximport/dialogs/rc.cpp:37
+msgid "Identify as"
+msgstr "Имя"
+
+#: dialogs/rc.cpp:742 plugins/ofximport/dialogs/rc.cpp:19
+msgid "Password"
+msgstr "Пароль"
+
+#: plugins/ofximport/dialogs/rc.cpp:20
+msgid "Select Account"
+msgstr "Выберите счёт"
+
+#: plugins/ofximport/dialogs/rc.cpp:21
+msgid ""
+"Please select the account from your financial institution from the list "
+"below which matches this account."
+msgstr "Выберите из списка ваш счёт в финансовом учреждении."
+
+#: plugins/ofximport/dialogs/rc.cpp:24
+msgid "Bank"
+msgstr "Банк"
+
+#: plugins/ofximport/dialogs/rc.cpp:25
+msgid "Branch"
+msgstr "Отделение"
+
+#: plugins/ofximport/dialogs/rc.cpp:26
+msgid "WizardPage"
+msgstr "WizardPage"
+
+#: plugins/ofximport/dialogs/rc.cpp:27
+msgid ""
+"Congratulations! You have successfully set up your bank for online banking "
+"via OFX."
+msgstr ""
+"Поздравляем! Вы успешно настроили подключение банк-клиент через OFX для "
+"онлайновых банковских операций."
+
+#: plugins/ofximport/dialogs/rc.cpp:28
+msgid "Account Details"
+msgstr "Данные счёта"
+
+#: plugins/ofximport/dialogs/rc.cpp:29 plugins/ofximport/dialogs/rc.cpp:31
+msgid "&lt;Not configured&gt;"
+msgstr "&lt;Не настроен&gt;"
+
+#: plugins/ofximport/dialogs/rc.cpp:30
+msgid "BANK/BROKER:"
+msgstr "Банк/брокер:"
+
+#: plugins/ofximport/dialogs/rc.cpp:32
+msgid "Unavailable"
+msgstr "Недоступно"
+
+#: plugins/ofximport/dialogs/rc.cpp:33
+msgid "ACCOUNT:"
+msgstr "Счёт:"
+
+#: plugins/ofximport/dialogs/rc.cpp:34
+msgid "STATUS:"
+msgstr "Статус:"
+
+#: plugins/ofximport/dialogs/rc.cpp:35
+msgid "OFX Details"
+msgstr "Подробности OFX:"
+
+#: plugins/ofximport/dialogs/rc.cpp:38
+msgid "Start date of import"
+msgstr "Импорт с даты"
+
+#: plugins/ofximport/dialogs/rc.cpp:39
+msgid "To&day minus"
+msgstr "С сегодня &минус"
+
+#: plugins/ofximport/dialogs/rc.cpp:40
+msgid "days"
+msgstr "дней"
+
+#: plugins/ofximport/dialogs/rc.cpp:41
+msgid "Last &update"
+msgstr "Последнее &обновление"
+
+#: plugins/ofximport/dialogs/rc.cpp:42
+msgid "Pi&ck date"
+msgstr "&Дата"
+
+#: plugins/ofximport/dialogs/rc.cpp:43
+msgid "Name is derived from"
+msgstr "Название получено из"
+
+#: plugins/ofximport/dialogs/rc.cpp:44
+msgid "P&AYEEID"
+msgstr "P&AYEEID"
+
+#: plugins/ofximport/dialogs/rc.cpp:45
+msgid "&NAME"
+msgstr "&NAME"
+
+#: plugins/ofximport/dialogs/rc.cpp:46
+msgid "field if both are present in download"
+msgstr "значение указанного поля, если есть оба значения"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:81
+msgid "Quicken Windows 2003"
+msgstr "Quicken Windows 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:82
+msgid "Quicken Windows 2004"
+msgstr "Quicken Windows 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:83
+msgid "Quicken Windows 2005"
+msgstr "Quicken Windows 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:84
+msgid "Quicken Windows 2006"
+msgstr "Quicken Windows 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:85
+msgid "Quicken Windows 2007"
+msgstr "Quicken Windows 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:86
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:111
+msgid "Quicken Windows 2008"
+msgstr "Quicken Windows 2008"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:89
+msgid "MS-Money 2003"
+msgstr "MS-Money 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:90
+msgid "MS-Money 2004"
+msgstr "MS-Money 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:91
+msgid "MS-Money 2005"
+msgstr "MS-Money 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:92
+msgid "MS-Money 2006"
+msgstr "MS-Money 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:93
+msgid "MS-Money 2007"
+msgstr "MS-Money 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:94
+msgid "MS-Money Plus"
+msgstr "MS-Money Plus"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:91
+msgid "Report Configuration"
+msgstr "Настройка отчёта"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:117
+#: dialogs/kreportconfigurationfilterdlg.cpp:135
+msgid "Rows/Columns"
+msgstr "Структура"
+
+#: dialogs/investtransactioneditor.cpp:203
+#: dialogs/investtransactioneditor.cpp:537
+#: dialogs/investtransactioneditor.cpp:579 dialogs/rc.cpp:103
+#: dialogs/rc.cpp:158 dialogs/rc.cpp:245 dialogs/rc.cpp:750 dialogs/rc.cpp:794
+#: widgets/kmymoneyaccountselector.cpp:182 widgets/register.cpp:64
+#: widgets/register.cpp:567 widgets/transaction.cpp:1500
+msgid "Security"
+msgstr "Ценные бумаги"
+
+#: dialogs/investtransactioneditor.cpp:211
+msgid "Asset account"
+msgstr "Активный счёт"
+
+#: dialogs/investtransactioneditor.cpp:1073
+msgid "Price/Share"
+msgstr "Цена за штуку"
+
+#: dialogs/kmergetransactionsdlg.cpp:39
+msgid "Merge Transactions"
+msgstr "Объединить операции"
+
+#: dialogs/kmergetransactionsdlg.cpp:40
+msgid "Are you sure you wish to merge these transactions?"
+msgstr "Объединить выбранные операции?"
+
+#: dialogs/kstartdlg.cpp:59
+msgid "Start Dialog"
+msgstr "Начало"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Templates"
+msgstr "Шаблоны"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Select templates"
+msgstr "Выберите один из шаблонов"
+
+#: dialogs/kstartdlg.cpp:80 dialogs/kstartdlg.cpp:119
+msgid "New KMyMoney document"
+msgstr "Новый файл KMyMoney"
+
+#: dialogs/kstartdlg.cpp:90
+msgid "Open a KMyMoney document"
+msgstr "Выберите существующий файл KMyMoney"
+
+#: dialogs/kstartdlg.cpp:96
+msgid ""
+"%1|KMyMoney files (*.kmy)\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Файлы KMyMoney (*.kmy)\n"
+"%2|Все файлы (*.*)"
+
+#: dialogs/kstartdlg.cpp:102
+msgid "Recent Files"
+msgstr "Последние файлы"
+
+#: dialogs/kstartdlg.cpp:217
+msgid "Blank Document"
+msgstr "Пустой файл"
+
+#: dialogs/knewbudgetdlg.cpp:71
+msgid "Please specify a budget name"
+msgstr "Укажите название бюджета"
+
+#: dialogs/kgncpricesourcedlg.cpp:48
+#, c-format
+msgid "Investment: %1"
+msgstr "Инструмент: %1"
+
+#: dialogs/kgncpricesourcedlg.cpp:49
+#, c-format
+msgid "Quote source: %1"
+msgstr "Источник курсов: %1"
+
+#: dialogs/kmymoneypricedlg.cpp:62 dialogs/ksecuritylisteditor.cpp:69
+msgid "Delete this entry"
+msgstr "Удалить"
+
+#: dialogs/ksecuritylisteditor.cpp:70
+msgid "Remove this security item from the file"
+msgstr "Удалить ценные бумаги"
+
+#: dialogs/ksecuritylisteditor.cpp:73
+msgid "&Add"
+msgstr "&Добавить"
+
+#: dialogs/kmymoneypricedlg.cpp:68 dialogs/ksecuritylisteditor.cpp:75
+msgid "Add a new entry"
+msgstr "Добавить"
+
+#: dialogs/ksecuritylisteditor.cpp:76
+msgid "Create a new security entry."
+msgstr "Добавить ценные бумаги"
+
+#: dialogs/keditequityentrydlg.cpp:77 dialogs/kmymoneypricedlg.cpp:74
+#: dialogs/ksecuritylisteditor.cpp:81
+msgid "Modify the selected entry"
+msgstr "Изменить"
+
+#: dialogs/ksecuritylisteditor.cpp:82
+msgid "Change the security information of the selected entry."
+msgstr "Изменить ценные бумаги"
+
+#: dialogs/kmymoneypricedlg.cpp:80 dialogs/ksecuritylisteditor.cpp:87
+msgid "Close the dialog"
+msgstr "Закрыть диалог"
+
+#: dialogs/kmymoneypricedlg.cpp:81 dialogs/ksecuritylisteditor.cpp:88
+msgid "Use this to close the dialog and return to the application."
+msgstr "Закрыть диалог и вернуться в главное окно."
+
+#: dialogs/ksecuritylisteditor.cpp:184
+msgid ""
+"Do you really want to remove the currency <b>%1</b> from the file?</"
+"p><i>Note: It is currently not supported to add currencies.</i>"
+msgstr ""
+"Удалить валюту <b>%1</b>?</p> <i>Примечание: можно удалить не всякую валюту."
+"</i>"
+
+#: dialogs/ksecuritylisteditor.cpp:187
+msgid "Do you really want to remove the %1 <b>%2</b> from the file?"
+msgstr "Удалить %1 <b>%2</b>?"
+
+#: dialogs/ksecuritylisteditor.cpp:190
+msgid "Delete security"
+msgstr "Удалить ценные бумаги"
+
+#: dialogs/kmymoneypricedlg.cpp:63
+msgid "Remove this price item from the file"
+msgstr "Удалить курс."
+
+#: dialogs/kmymoneypricedlg.cpp:66 dialogs/mymoneyqifprofileeditor.cpp:94
+msgid "&New"
+msgstr "&Добавить"
+
+#: dialogs/kmymoneypricedlg.cpp:69
+msgid "Create a new price entry."
+msgstr "Добавить курс."
+
+#: dialogs/kmymoneypricedlg.cpp:75
+msgid "Change the details of selected price information."
+msgstr "Изменить курс."
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Do you really want to delete the selected price entry?"
+msgstr "Удалить выбранный курс?"
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Delete price information"
+msgstr "Удалить курс"
+
+#: dialogs/kchooseimportexportdlg.cpp:46
+msgid ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Выберите тип импорта. Описание каждого типа отображается внизу окна.\n"
+"\n"
+"Далее нажмите OK."
+
+#: dialogs/kchooseimportexportdlg.cpp:50 dialogs/rc.cpp:22
+msgid "Choose import type:"
+msgstr "Тип импорта:"
+
+#: dialogs/kchooseimportexportdlg.cpp:51 dialogs/rc.cpp:20
+msgid "Choose Import Type Dialog"
+msgstr "Тип импорта"
+
+#: dialogs/kchooseimportexportdlg.cpp:53
+msgid ""
+"Please choose the type of export you wish to perform. A simple explanation\n"
+"of the export type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an export type please press the OK button."
+msgstr ""
+"Выберите тип экспорта. Описание каждого типа отображается внизу окна.\n"
+"\n"
+"Далее нажмите OK."
+
+#: dialogs/kchooseimportexportdlg.cpp:57
+msgid "Choose export type:"
+msgstr "Тип экспорта:"
+
+#: dialogs/kchooseimportexportdlg.cpp:58
+msgid "Choose Export Type Dialog"
+msgstr "Тип экспорта"
+
+#: dialogs/kchooseimportexportdlg.cpp:78
+msgid ""
+"QIF files are created by the popular accounting program Quicken.\n"
+"Another dialog will appear, if you choose this type, asking for further\n"
+"information relevant to the Quicken format."
+msgstr ""
+"Файлы QIF создаются в популярной программе учёта финансов Quicken.\n"
+"Если вы выберите этот тип, появиться диалог с дополнительными параметрами, \n"
+"связанными с этим форматом."
+
+#: dialogs/kchooseimportexportdlg.cpp:82
+msgid ""
+"The CSV type uses a comma delimeted text file that can be used by\n"
+"most popular spreadsheet programs available for Linux and other operating\n"
+"systems."
+msgstr ""
+"Формат CSV использует запятые для разделения значений в текстовом виде.\n"
+"Этот формат широко используется в приложениях электронных таблиц под Linux\n"
+"и других операционных систем."
+
+#: dialogs/kequitypriceupdatedlg.cpp:222
+msgid "%1 units in %2"
+msgstr "%1 -> %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid ""
+"Failed to retrieve an exchange rate for %1 from %2. It will be skipped this "
+"time."
+msgstr "Ошибка получения курса %1 из %2. Курс не будет обновлён."
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid "Price Update Failed"
+msgstr "Ошибка обновления курса"
+
+#: dialogs/kequitypriceupdatedlg.cpp:427
+msgid ""
+"Failed to retrieve a quote for %1 from %2. Press <b>No</b> to remove the "
+"online price source from this security permanently, <b>Yes</b> to continue "
+"updating this security during future price updates or <b>Cancel</b> to stop "
+"the current update operation."
+msgstr ""
+"Ошибка получения курса %1 из %2. Нажмите <b>Нет</b> для удаления этого "
+"источника курсов навсегда из списка, <b>Да</b> для обновления из этого "
+"источника в будущем или <b>Отмена</b> для остановки текущего обновления."
+
+#: dialogs/kequitypriceupdatedlg.cpp:427 dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Price Update Failed"
+msgstr "Ошибка обновления курса"
+
+#: dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Cannot update security <b>%1</b>: %2"
+msgstr "Не удалось обновить информацию о ценной бумаге <b>%1</b>: %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:528
+msgid "Price for %1 updated (id %2)"
+msgstr "Обновлён курс для %1 (идентификатор %2)"
+
+#: dialogs/kequitypriceupdatedlg.cpp:534
+msgid "Received an invalid price for %1, unable to update."
+msgstr "Получен неверный ответ для %1, обновление невозможно."
+
+#: dialogs/kequitypriceupdatedlg.cpp:554
+msgid ""
+"Received a price for %1 (id %2), but this symbol is not on the list! "
+"Aborting entire update."
+msgstr ""
+"Получен курс для %1 (код %2), но этого кода нет в списке. Обновление "
+"невозможно."
+
+#: dialogs/transactioneditor.cpp:222
+msgid ""
+"The number <b>%1</b> has already been used in account <b>%2</b>. Do you want "
+"to replace it with the next available number?"
+msgstr ""
+"В счёте <b>%2</b> уже используется операция с номером <b>%1</b> . Установить "
+"доступный номер?"
+
+#: dialogs/transactioneditor.cpp:222
+msgid "Duplicate number"
+msgstr "Повтор номера"
+
+#: dialogs/transactioneditor.cpp:303
+msgid ""
+"This transaction has more than two splits and is based on a different "
+"currency (%1). Using this account to modify the transaction is currently not "
+"very well supported by KMyMoney and may result in false results."
+msgstr ""
+"Некоторые статьи при разделении суммы операции используют другую валюту (%"
+"1). Если вы продолжите изменение операции, это может привести к неверным "
+"результатам."
+
+#: dialogs/transactioneditor.cpp:305
+msgid ""
+"KMyMoney was not able to find a more appropriate account to edit this "
+"transaction. Nevertheless, you are allowed to modify the transaction. If you "
+"don't want to edit this transaction, please cancel from editing next."
+msgstr "Невозможно найти счёт этой операции."
+
+#: dialogs/transactioneditor.cpp:307
+msgid ""
+"Using e.g. <b>%1</b> to edit this transaction is a better choice. "
+"Nevertheless, you are allowed to modify the transaction. If you want to use "
+"the suggested account instead, please cancel from editing next and change "
+"the view to the suggested account."
+msgstr ""
+"При изменении операции рекомендуем использовать счёт <b>%1</b>. Если вы "
+"хотите использовать рекомендуемый счёт, отмените редактирование и перейдите "
+"к рекомендованному счёту."
+
+#: dialogs/transactioneditor.cpp:410
+msgid ""
+"This transaction has more than two splits and is originally based on a "
+"different currency (%1). Using this account to modify the transaction may "
+"result in rounding errors. Do you want to continue?"
+msgstr ""
+"Некоторые статьи при разделении суммы операции используют другую валюту (%"
+"1). Если вы продолжите изменение операции, это может привести к неверным "
+"результатам округления. Продолжить?"
+
+#: dialogs/transactioneditor.cpp:412
+msgid ""
+"At least one of the selected transactions has more than two splits and is "
+"originally based on a different currency (%1). Using this account to modify "
+"the transactions may result in rounding errors. Do you want to continue?"
+msgstr ""
+"Некоторые статьи при разделении суммы операции используют другую валюту (%"
+"1). Если вы продолжите изменение операции, это может привести к неверным "
+"результатам округления. Продолжить?"
+
+#: dialogs/transactioneditor.cpp:557
+msgid "Storing transactions"
+msgstr "Сохранение операций"
+
+#: dialogs/transactioneditor.cpp:603 widgets/kmymoneybriefschedule.cpp:65
+msgid "&Enter"
+msgstr "&Произвести платёж"
+
+#: dialogs/transactioneditor.cpp:606
+msgid "Use this to enter the transaction into the ledger."
+msgstr "Сохранить операцию в журнале"
+
+#: dialogs/transactioneditor.cpp:607
+msgid "&Schedule"
+msgstr "&Платежи"
+
+#: dialogs/transactioneditor.cpp:609
+msgid "Accepts the entered data and stores it as schedule"
+msgstr "Сохранить данные"
+
+#: dialogs/transactioneditor.cpp:610
+msgid "Use this to schedule the transaction for later entry into the ledger."
+msgstr "Используйте для внесения операции в список операций по графику."
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"The transaction you are about to enter has a post date in the future.<br/"
+"><br/>Do you want to enter it in the ledger or add it to the schedules?"
+msgstr ""
+"Дата совершения новой операции приходится на дату в будущем.<br/><br/>Вы "
+"хотите добавить ее в таблицу или в график платежей?"
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"_: Dialog caption for 'Enter or schedule' dialog\n"
+"Enter or schedule?"
+msgstr "Ввести или запланировать?"
+
+#: dialogs/transactioneditor.cpp:671
+msgid ""
+"The balance of account <b>%1</b> dropped below the warning balance of %2."
+msgstr "Остаток на счету <b>%1</b> ниже порога предупреждения %2."
+
+#: dialogs/transactioneditor.cpp:677
+msgid ""
+"The balance of account <b>%1</b> dropped below the minimum balance of %2."
+msgstr "Остаток на счету <b>%1</b> ниже минимального остатка %2."
+
+#: dialogs/transactioneditor.cpp:683
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit warning "
+"limit of %2."
+msgstr ""
+"Остаток на счету <b>%1</b> ниже уровня предупреждения о максимальном кредите "
+"%2."
+
+#: dialogs/transactioneditor.cpp:689
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit limit of %"
+"2."
+msgstr "Остаток на счету <b>%1</b> ниже ограничения на максимальный кредит %2."
+
+#: dialogs/transactioneditor.cpp:740
+msgid "Payer/Receiver"
+msgstr "Отправитель/получатель"
+
+#: dialogs/transactioneditor.cpp:748
+msgid "Category/Account"
+msgstr "Статья/счёт"
+
+#: dialogs/transactioneditor.cpp:980 dialogs/transactioneditor.cpp:1016
+#: dialogs/transactioneditor.cpp:1378 dialogs/transactioneditor.cpp:1399
+#: dialogs/transactioneditor.cpp:1422 dialogs/transactioneditor.cpp:1443
+#: dialogs/transactioneditor.cpp:1505 dialogs/transactioneditor.cpp:1509
+#: widgets/transaction.cpp:902
+msgid "Transfer from"
+msgstr "Списание"
+
+#: dialogs/transactioneditor.cpp:982 dialogs/transactioneditor.cpp:1018
+#: dialogs/transactioneditor.cpp:1401 dialogs/transactioneditor.cpp:1445
+#: dialogs/transactioneditor.cpp:1506 widgets/transaction.cpp:902
+msgid "Transfer to"
+msgstr "Счёт"
+
+#: dialogs/transactioneditor.cpp:1259
+msgid "Select autofill transaction"
+msgstr "Выберите автозаполняемую операцию"
+
+#: dialogs/transactionmatcher.cpp:77
+msgid "First transaction does not match requirement for matching"
+msgstr "Первая операция не соответствует требованиям по привязке"
+
+#: dialogs/transactionmatcher.cpp:79
+msgid "Second transaction does not match requirement for matching"
+msgstr "Вторая операция не соответствует требованиям по привязке"
+
+#: dialogs/transactionmatcher.cpp:83 dialogs/transactionmatcher.cpp:133
+msgid "Splits for %1 have conflicting values (%2,%3)"
+msgstr "Разделение по %1 содержит конфликтующие значения (%2,%3)"
+
+#: dialogs/transactionmatcher.cpp:96 dialogs/transactionmatcher.cpp:149
+msgid ""
+"Both of these transactions have been imported into %1. Therefore they "
+"cannot be matched. Matching works with one imported transaction and one non-"
+"imported transaction."
+msgstr ""
+"Обе операции импортированы в %1, поэтому они не могут быть связаны. Привязка "
+"операций работает только между одной импортированной и одной введённой "
+"вручную операцией."
+
+#: dialogs/transactionmatcher.cpp:101 dialogs/transactionmatcher.cpp:156
+msgid "Unable to match all splits (%1)"
+msgstr "Невозможно привязать все разделённые операции (%1)"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:65
+msgid "Account and transfer account are the same. Please change one."
+msgstr ""
+"Для зачисления и списания указан один и тот же счёт. Укажите другой счёт."
+
+#: dialogs/kconfirmmanualenterdlg.cpp:84
+msgid "Payee changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Изменен получатель.<br>&nbsp;&nbsp;&nbsp;С<b>%1</b> изменен на <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:92
+#: dialogs/kconfirmmanualenterdlg.cpp:100
+msgid "Account changed. Old: \"%1\", New: \"%2\""
+msgstr "Изменён счёт списания. «%1» изменён на «%2»"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:107
+msgid "Account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "Изменен счет.<br>&nbsp;&nbsp;&nbsp;<b>%1</b> изменен на <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:115
+msgid ""
+"Transfer account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</"
+"b><p>"
+msgstr ""
+"Изменен счет перевода.<br>&nbsp;&nbsp;&nbsp;<b>%1</b> изменен на <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:143
+msgid ""
+"Category changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Изменена статья.<br>&nbsp;&nbsp;&nbsp;<b>%1</b> изменена на <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:151
+#: dialogs/kconfirmmanualenterdlg.cpp:153
+msgid "empty"
+msgstr "пусто"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:157
+msgid "Memo changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Изменён комментарий.<br>&nbsp;&nbsp;&nbsp;<b>%1</b> изменен на <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:166
+msgid "Amount changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Изменена сумма.<br>&nbsp;&nbsp;&nbsp;<b>%1</b> изменена на <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:175
+msgid ""
+"Reconciliation flag changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%"
+"2</b><p>"
+msgstr ""
+"Изменено состояние сверки.<br>&nbsp;&nbsp;&nbsp;<b>%1</b> изменено на <b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:182
+msgid "Fatal error in determining data: "
+msgstr "Ошибка обработки данных: "
+
+#: dialogs/kselectdatabasedlg.cpp:56
+msgid ""
+"There are no Qt SQL drivers installed in your system.\n"
+"Please consult documentation for your distro, or visit the Qt web site (www."
+"trolltech.com) and search for SQL drivers."
+msgstr ""
+"В системе не установлены драйверы SQL для Qt.\n"
+"Поищите информацию об их установке в документации к вашему дистрибутиву или "
+"на сайте Qt (www.trolltech.com)"
+
+#: dialogs/kselectdatabasedlg.cpp:100
+msgid "Qt SQL driver %1 is no longer installed on your system"
+msgstr "Драйвер Qt SQL %1 больше не установлен в системе"
+
+#: dialogs/kselectdatabasedlg.cpp:107
+msgid "Qt SQL driver %1 is not suported"
+msgstr "Драйвер Qt SQL %1 не поддерживается"
+
+#: dialogs/kselectdatabasedlg.cpp:164
+msgid "SQLite files (*.sql);; All files (*.*)"
+msgstr "Файлы SQLite (*.sql);;Все файлы (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:167
+msgid "Select SQLite file"
+msgstr "Выберите файл SQLite"
+
+#: dialogs/kselectdatabasedlg.cpp:188
+msgid "All files (*.*)"
+msgstr "Все файлы (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:191
+msgid "Select output file"
+msgstr "Выберите имя файла"
+
+#: dialogs/investactivities.cpp:168
+msgid "%1 (Brokerage)"
+msgstr "%1 (комиссия)"
+
+#: dialogs/investactivities.cpp:200 dialogs/investactivities.cpp:288
+#: dialogs/investactivities.cpp:425 widgets/transaction.cpp:1548
+msgid "Price/share"
+msgstr "Цена за штуку"
+
+#: dialogs/investactivities.cpp:586
+msgid "Ratio 1/"
+msgstr "Соотношение 1/"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid ""
+"<p>Please check that all the details in the following dialog are correct and "
+"press OK.</p><p>Editable data can be changed and can either be applied to "
+"just this occurence or for all subsequent occurences for this schedule. "
+"(You will be asked what you intend after pressing OK in the following dialog)"
+"</p>"
+msgstr ""
+"<p>Проверьте все введённые данные и нажмите OK.</p><p>Изменения могут быть "
+"применены как к одному отдельному платежу, так и ко всем последующим "
+"платежам.</p>"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid "Enter scheduled transaction"
+msgstr "Создать запланированную операцию"
+
+#: dialogs/kcsvprogressdlg.cpp:65 dialogs/kexportdlg.cpp:65
+msgid "&Export"
+msgstr "&Экспорт"
+
+#: dialogs/kexportdlg.cpp:67 dialogs/kimportdlg.cpp:68
+msgid "Start operation"
+msgstr "Запуск"
+
+#: dialogs/kexportdlg.cpp:68
+msgid "Use this to start the export operation"
+msgstr "Запуск экспорта данных"
+
+#: dialogs/kexportdlg.cpp:71 dialogs/kimportdlg.cpp:72
+msgid "&Browse..."
+msgstr "О&бзор..."
+
+#: dialogs/kexportdlg.cpp:73 dialogs/kimportdlg.cpp:74
+msgid "Select filename"
+msgstr "Выберите имя файла"
+
+#: dialogs/kexportdlg.cpp:74 dialogs/kimportdlg.cpp:75
+msgid "Use this to select a filename to export to"
+msgstr "Выберите имя файла, в который будут экспортированы данные"
+
+#: dialogs/kexportdlg.cpp:77 dialogs/kimportdlg.cpp:78
+#: dialogs/settings/ksettingsonlinequotes.cpp:64
+#: widgets/kmymoneyonlinequoteconfig.cpp:64
+msgid "&New..."
+msgstr "&Создать..."
+
+#: dialogs/kexportdlg.cpp:79 dialogs/kimportdlg.cpp:80
+#: dialogs/mymoneyqifprofileeditor.cpp:96
+msgid "Create a new profile"
+msgstr "Создать новый профиль"
+
+#: dialogs/kexportdlg.cpp:80 dialogs/kimportdlg.cpp:81
+msgid "Use this to open the profile editor"
+msgstr "Создать новый профиль"
+
+#: dialogs/keditloanwizard.cpp:56
+msgid "Edit loan wizard"
+msgstr "Мастер изменения кредита"
+
+#: dialogs/keditloanwizard.cpp:58
+msgid ""
+"Please enter the date from which on the following changes will be effective. "
+"The date entered must be later than the opening date of this account (%1), "
+"but must not be in the future. The default will be today."
+msgstr ""
+"Введите дату вступления изменений в силу. Она должна быть после даты "
+"открытия счёта (%1), но не в будущем. По умолчанию - сегодня."
+
+#: dialogs/keditloanwizard.cpp:76
+msgid ""
+"Note: you will not be able to modify this account today, because the opening "
+"date \"%1\" is in the future. Please revisit this dialog when the time has "
+"come."
+msgstr ""
+"Примечание: невозможно изменить параметры этого счёта сегодня, так как дата "
+"открытия счёта «%1» приходится на будущее. Откройте этот диалог когда эта "
+"дата наступит."
+
+#: dialogs/keditloanwizard.cpp:244
+msgid ""
+"Your previous selection was \"%1\". If you select another option, KMyMoney "
+"will dismiss the changes you have just entered. Do you wish to proceed?"
+msgstr ""
+"Ранее вы указывали \"%1\". Если выберите иное, сделанные изменения будут "
+"утеряны. Продолжить?"
+
+#: dialogs/kcategoryreassigndlg.cpp:81
+msgid ""
+"At least one transaction/schedule still references the category <b>%1</b>. "
+"However, at least one category with the same currency must exist so that the "
+"transactions/schedules can be reassigned."
+msgstr ""
+"Существует как минимум одна операция или график платежей, в котором всё ещё "
+"используется статья <b>%1</b>. Однако должна существовать хотя бы одна "
+"статья с той же валютой, чтобы переназначить старую статью в операциях и "
+"графиках платежей."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid ""
+"This dialog does not allow to create new categories. Please pick a category "
+"from the list."
+msgstr ""
+"В этом диалоге нельзя создавать новые статьи. Выберите существующую статью "
+"из списка."
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid "Category creation"
+msgstr "Создание статьи"
+
+#: dialogs/kbackupdlg.cpp:61
+msgid "C&hoose..."
+msgstr "О&бзор..."
+
+#: dialogs/kbackupdlg.cpp:63
+msgid "Select mount point"
+msgstr "Выбор точки монтирования"
+
+#: dialogs/kbackupdlg.cpp:64
+msgid "Use this to browse to the mount point."
+msgstr "Нажмите на эту кнопку для выбора точки монтирования. "
+
+#: dialogs/keditscheduledlg.cpp:293
+msgid "Next due date"
+msgstr "Следующая выплата"
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid ""
+"You have turned on the GPG encryption support. This means, that new files "
+"will be stored encrypted. Existing files will not be encrypted "
+"automatically. To achieve encryption of existing files, please use the "
+"<b>File/Save as...</b> feature and store the file under a different name. "
+"Once confident with the result, feel free to delete the old file and rename "
+"the encrypted one to the old name."
+msgstr ""
+"Вы включили шифрование GPG. Это означает, что новые файлы будут сохраняться "
+"в зашифрованном виде. Существующие файлы не шифруются автоматически. Для "
+"шифрования существующих файлов используйте пункт меню <b>Файл &gt; Сохранить "
+"как...</b> для сохранения файла под другим именем. После этого откройте этот "
+"файл. Если всё открывается, удалите старый файл и переименуйте новый файл."
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid "GPG encryption activated"
+msgstr "Зашифровано GPG"
+
+#: dialogs/settings/ksettingshome.cpp:51
+msgid "&Up"
+msgstr "&Выше"
+
+#: dialogs/settings/ksettingshome.cpp:53
+msgid "Move selected item up"
+msgstr "Переместить выше по списку на одну позицию"
+
+#: dialogs/settings/ksettingshome.cpp:54
+msgid "Use this to move the selected item up by one position in the list."
+msgstr "Переместить выше по списку на одну позицию."
+
+#: dialogs/settings/ksettingshome.cpp:55
+msgid "&Down"
+msgstr "&Ниже"
+
+#: dialogs/settings/ksettingshome.cpp:57
+msgid "Move selected item down"
+msgstr "Переместить ниже по списку на одну позицию"
+
+#: dialogs/settings/ksettingshome.cpp:58
+msgid "Use this to move the selected item down by one position in the list."
+msgstr "Переместить ниже по списку на одну позицию."
+
+#: dialogs/settings/rc.cpp:1
+msgid "Color settings"
+msgstr "Используемые цвета"
+
+#: dialogs/settings/rc.cpp:2
+msgid "Foreground"
+msgstr "Текст и сетка"
+
+#: dialogs/settings/rc.cpp:3
+msgid "Text colors"
+msgstr "Цвета текста и сетки"
+
+#: dialogs/settings/rc.cpp:4
+msgid "Grid color"
+msgstr "Линии сетки"
+
+#: dialogs/settings/rc.cpp:5
+msgid "Erronous transaction"
+msgstr "Операции с ошибкой"
+
+#: dialogs/settings/rc.cpp:6
+msgid "Value with missing conversion rate"
+msgstr "Суммы без курсов конвертации"
+
+#: dialogs/settings/rc.cpp:7
+msgid "Negative value"
+msgstr "Отрицательные суммы"
+
+#: dialogs/settings/rc.cpp:8
+msgid "Background"
+msgstr "Фон"
+
+#: dialogs/settings/rc.cpp:10
+msgid "List background colors"
+msgstr "Цвета фона в списках"
+
+#: dialogs/settings/rc.cpp:11
+msgid "Normal"
+msgstr "Обычный фон"
+
+#: dialogs/settings/rc.cpp:12
+msgid "Alternate"
+msgstr "Альтернативный фон"
+
+#: dialogs/settings/rc.cpp:13
+msgid "Special background colors"
+msgstr "Специальные цвета фона"
+
+#: dialogs/settings/rc.cpp:14
+msgid "Ledger group separator"
+msgstr "Разделитель групп операций"
+
+#: dialogs/settings/rc.cpp:15
+msgid "Required field"
+msgstr "Обязательное поле"
+
+#: dialogs/settings/rc.cpp:16
+msgid "Imported transaction"
+msgstr "Импортированные операции"
+
+#: dialogs/settings/rc.cpp:17
+msgid "Matched transaction"
+msgstr "Связанные операции"
+
+#: dialogs/settings/rc.cpp:18
+msgid "Font settings"
+msgstr "Шрифты"
+
+#: dialogs/settings/rc.cpp:19
+msgid "Use system fonts"
+msgstr "Использовать стандартные шрифты"
+
+#: dialogs/settings/rc.cpp:20
+msgid "Individual font settings"
+msgstr "Другие шрифты"
+
+#: dialogs/settings/rc.cpp:24
+msgid "Number of Days of Account Cycle:"
+msgstr "Количество дней в учётном периоде:"
+
+#: dialogs/settings/rc.cpp:26
+msgid "Number of Days to Forecast:"
+msgstr "Срок прогнозирования:"
+
+#: dialogs/settings/rc.cpp:27
+msgid "Forecast Method"
+msgstr "Метод прогнозирования"
+
+#: dialogs/settings/rc.cpp:28
+msgid "Scheduled and Future Transactions"
+msgstr "По графикам платежей"
+
+#: dialogs/settings/rc.cpp:29
+msgid "History-based"
+msgstr "Ретроспективный анализ"
+
+#: dialogs/settings/rc.cpp:30
+msgid "History-based settings"
+msgstr "Параметры ретроспективного анализа"
+
+#: dialogs/settings/rc.cpp:31
+msgid "Number of Cycles to use in Forecast:"
+msgstr "Количество прогнозируемых учётных периодов:"
+
+#: dialogs/settings/rc.cpp:36
+msgid "General Settings"
+msgstr "Основные параметры"
+
+#: dialogs/settings/rc.cpp:37
+msgid "Global"
+msgstr "Главное"
+
+#: dialogs/settings/rc.cpp:38
+msgid "Startup page options"
+msgstr "Открывать при запуске программы"
+
+#: dialogs/settings/rc.cpp:39
+msgid "Start with homepage"
+msgstr "Сводку или страницу приветствия"
+
+#: dialogs/settings/rc.cpp:40
+msgid "Start with last selected view"
+msgstr "Последний раздел"
+
+#: dialogs/settings/rc.cpp:41
+msgid "Precision settings"
+msgstr "Точность"
+
+#: dialogs/settings/rc.cpp:42
+msgid "Price precision"
+msgstr "Точность курсов:"
+
+#: dialogs/settings/rc.cpp:43
+msgid "digits"
+msgstr "знаков после запятой"
+
+#: dialogs/settings/rc.cpp:44
+msgid "Autosave options"
+msgstr "Автоматическое сохранение"
+
+#: dialogs/settings/rc.cpp:45
+msgid "Autosave periodically"
+msgstr "Сохранять автоматически каждые"
+
+#: dialogs/settings/rc.cpp:46
+msgid "minutes"
+msgstr "мин."
+
+#: dialogs/settings/rc.cpp:47
+msgid "Fiscal Year"
+msgstr "Финансовый год"
+
+#: dialogs/settings/rc.cpp:48
+msgid "Your fiscal year starts on"
+msgstr "Финансовый год начинается"
+
+#: dialogs/settings/rc.cpp:49
+msgid "January"
+msgstr "января"
+
+#: dialogs/settings/rc.cpp:50
+msgid "February"
+msgstr "февраля"
+
+#: dialogs/settings/rc.cpp:51
+msgid "March"
+msgstr "марта"
+
+#: dialogs/settings/rc.cpp:52
+msgid "April"
+msgstr "апреля"
+
+#: dialogs/settings/rc.cpp:53
+msgid "May"
+msgstr "мая"
+
+#: dialogs/settings/rc.cpp:54
+msgid "June"
+msgstr "июня"
+
+#: dialogs/settings/rc.cpp:55
+msgid "July"
+msgstr "июля"
+
+#: dialogs/settings/rc.cpp:56
+msgid "August"
+msgstr "августа"
+
+#: dialogs/settings/rc.cpp:57
+msgid "September"
+msgstr "сентября"
+
+#: dialogs/settings/rc.cpp:58
+msgid "October"
+msgstr "октября"
+
+#: dialogs/settings/rc.cpp:59
+msgid "November"
+msgstr "ноября"
+
+#: dialogs/settings/rc.cpp:60
+msgid "December"
+msgstr "декабря"
+
+#: dialogs/settings/rc.cpp:61
+msgid "Views"
+msgstr "Разделы"
+
+#: dialogs/settings/rc.cpp:62
+msgid "Synchronize account selection of ledger and investment view"
+msgstr ""
+"Использовать один и тот же счёт в режиме просмотра операций и инвестиций"
+
+#: dialogs/settings/rc.cpp:63
+msgid ""
+"Check the views you want to enable, uncheck those you want to hide, because "
+"you don't need the functionality."
+msgstr ""
+"Установите флажки у разделов, которые хотите использовать. Разделы, у "
+"которых флажки не установлены, показаны не будут."
+
+#: dialogs/settings/rc.cpp:64
+msgid "Icon size of navigation bar"
+msgstr "Размер значков панели разделов"
+
+#: dialogs/settings/rc.cpp:65
+msgid "Micro (16px)"
+msgstr "Маленькие (16 пикселей)"
+
+#: dialogs/settings/rc.cpp:66
+msgid "Small (32px)"
+msgstr "Небольшие (32 пикселя)"
+
+#: dialogs/settings/rc.cpp:67
+msgid "Normal (48px)"
+msgstr "Обычные (48 пикселей)"
+
+#: dialogs/settings/rc.cpp:68
+msgid "Large (64px)"
+msgstr "Большие (64 пикселя)"
+
+#: dialogs/settings/rc.cpp:69
+msgid "Show title bar on each page"
+msgstr "Показывать заголовок раздела"
+
+#: dialogs/rc.cpp:835 dialogs/settings/rc.cpp:70
+msgid "Filter"
+msgstr "Фильтры"
+
+#: dialogs/settings/rc.cpp:71
+msgid "Accounts / Categories"
+msgstr "Счета и статьи"
+
+#: dialogs/settings/rc.cpp:72
+msgid "Don't show unused categories"
+msgstr "Не показывать не используемые статьи"
+
+#: dialogs/settings/rc.cpp:73
+msgid ""
+"This option hides all categories in the categories view that are not used in "
+"at least a single transaction. They are still shown in the category "
+"selection lists."
+msgstr ""
+"Этот флажок позволяет скрыть в разделе «Статьи» те статьи, которые не "
+"использовались ни в одной операции. Однако в списке выбора статей будут "
+"показываться все статьи."
+
+#: dialogs/settings/rc.cpp:74
+msgid "Don't show closed accounts"
+msgstr "Не показывать закрытые счета"
+
+#: dialogs/settings/rc.cpp:75
+msgid ""
+"This option hides all accounts that have been closed by the user in views "
+"and selection lists.\n"
+"\n"
+"You can use <b>View/Show all accounts</b> to temporarily show hidden "
+"accounts in the views."
+msgstr ""
+"Этот флажок позволяет скрыть все счета, которые были закрыты пользователем.\n"
+"\n"
+"Вы можете использовать пункт меню <b>Вид &gt; Показать все счета</b> чтобы "
+"временно включить показ закрытых счетов."
+
+#: dialogs/settings/rc.cpp:76
+msgid "Show equity accounts"
+msgstr "Показывать активные счета"
+
+#: dialogs/rc.cpp:332 dialogs/settings/rc.cpp:77 widgets/rc.cpp:160
+msgid "Schedules"
+msgstr "Платежи"
+
+#: dialogs/settings/rc.cpp:78
+msgid "Don't show finished schedules"
+msgstr "Не показывать завершённые графики платежей"
+
+#: dialogs/settings/rc.cpp:79
+msgid "This option hides all finished schedules in the schedules view."
+msgstr ""
+"Этот флажок скрывает все завершённые графики платежей в разделе «Платежи»."
+
+#: dialogs/settings/rc.cpp:81
+msgid "Don't show transactions prior to"
+msgstr "Не показывать операции до"
+
+#: dialogs/settings/rc.cpp:82
+msgid "Don't show reconciled transactions"
+msgstr "Не показывать сверенные операции"
+
+#: dialogs/settings/rc.cpp:83
+msgid "This option hides all reconciled transactions in the ledger view."
+msgstr "Этот флажок скроет все сверенные операции в разделе «Операции»."
+
+#: dialogs/settings/rc.cpp:84 widgets/rc.cpp:22
+msgid "GPG encryption settings"
+msgstr "Параметры шифрования GPG"
+
+#: dialogs/settings/rc.cpp:85
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Access to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>additional recovery encryption</i> is only accessible, if the "
+"necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id "
+"0x8AFDDC8E is found in your keyring."
+msgstr ""
+"На этой вкладке вы можете настроить параметры шифрования содержимого файла "
+"<b>KMyMoney</b> посредством <b>GPG</b>.<p>\n"
+"Если <b>GPG</b> недоступна в вашей системе, параметры будут неактивны. В "
+"этом случае проверьте правильность работы <b>GPG</b> для текущего "
+"пользователя.<p>\n"
+"Возможность <i>дополнительного шифрования</i> доступна если для пользователя "
+"есть ключ <b>kmymoney-recover@users.sourceforge.net</b> с id 0x8AFDDC8E."
+
+#: dialogs/settings/rc.cpp:86 widgets/rc.cpp:24
+msgid "Use GPG encryption"
+msgstr "Шифровать содержимое файла ключом GPG"
+
+#: dialogs/settings/rc.cpp:87
+msgid "GPG encryption"
+msgstr "Шифрование ключом GPG"
+
+#: dialogs/settings/rc.cpp:88
+msgid "Your key"
+msgstr "Ключ"
+
+#: dialogs/settings/rc.cpp:89
+msgid ""
+"This combo box lists all the secret keys you have in your keyring. Select "
+"the one you want to use for encryption when saving to a file."
+msgstr ""
+"В этом списке показаны все закрытые ключи, которые есть у текущего "
+"пользователя. Выберите один из этих ключей для шифрования содержимого файла "
+"при его сохранении."
+
+#: dialogs/settings/rc.cpp:90
+msgid "Additonal keys"
+msgstr "Дополнительные ключи"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:50 dialogs/settings/rc.cpp:91
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading 0x."
+msgstr ""
+"Введите идентификатор дополнительного ключа, которым вы хотите дополнительно "
+"шифровать данные. Это может быть как адрес электронной почты, так и "
+"идентификатор в шестнадцатеричном виде, начинающийся с <i>0x</i>."
+
+#: dialogs/settings/rc.cpp:92 widgets/rc.cpp:28
+msgid ""
+"This symbol denotes, if the key for the given user id has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"Если указанный ключ найден, индикатор показывается ярко-зелёным. Если нет — "
+"тёмно-зелёным."
+
+#: dialogs/kgpgkeyselectiondlg.cpp:61 dialogs/settings/rc.cpp:93
+msgid "Keys for all of the above user ids found"
+msgstr "Найдены ключи с указанным идентификатором"
+
+#: dialogs/settings/rc.cpp:94 widgets/rc.cpp:31
+msgid ""
+"This symbol denotes, if the KMyMoney recovery key has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"Если ключ для восстановления найден, показывается ярко-зелёным. Если нет — "
+"тёмно-зелёным."
+
+#: dialogs/settings/rc.cpp:95
+msgid "Recover Key available in keyring"
+msgstr "Доступно шифрование ключом восстановления KMyMoney"
+
+#: dialogs/settings/rc.cpp:96
+msgid "Also encrypt with KMyMoney's recover key"
+msgstr "Также шифровать ключом восстановления KMyMoney"
+
+#: dialogs/settings/rc.cpp:97
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out.."
+msgstr ""
+"Вы можете дополнительно шифровать данные ключом kmymoney-recover. Только "
+"основные разработчики KMyMoney имеют закрытую часть этого ключа для чтения "
+"зашифрованных данных.<p>\n"
+"\n"
+"Этот механизм предназначен для случаев потери вашего ключа и, как следствие, "
+"невозможности использования данных. При включении этого параметра "
+"разработчики KMyMoney могут расшифровать данные и отправить их вам. Перед "
+"восстановлением данных вам будут заданы несколько вопросов о содержимом "
+"файла."
+
+#: dialogs/settings/rc.cpp:98
+msgid "Homepage Settings"
+msgstr "Параметры сводки"
+
+#: dialogs/settings/rc.cpp:99
+msgid "Up"
+msgstr "&Выше"
+
+#: dialogs/settings/rc.cpp:100
+msgid "Down"
+msgstr "&Ниже"
+
+#: dialogs/settings/rc.cpp:101
+msgid ""
+"Selected entries are shown on the home page of the application.<p>\n"
+"Use the buttons and checkboxes to customize the layout of the home page."
+msgstr ""
+"Выбранные элементы будут показаны в сводке.\n"
+"\n"
+"Используйте кнопки и флажки для настройки содержимого сводки."
+
+#: dialogs/settings/rc.cpp:102
+msgid "Homepage/Summary page font scaling"
+msgstr "Размер шрифта в сводке"
+
+#: dialogs/settings/rc.cpp:103
+msgid "Percentage of default font size:"
+msgstr "Размер шрифта по сравнению с базовым (в процентах):"
+
+#: dialogs/settings/rc.cpp:104
+msgid ""
+"Remember font size when leaving the program if manually changed with mouse-"
+"wheel"
+msgstr ""
+"Запоминать размер шрифта при выходе из программы, если он изменяется колесом "
+"мыши"
+
+#: dialogs/settings/rc.cpp:105
+msgid "Information display"
+msgstr "Показ сведений"
+
+#: dialogs/settings/rc.cpp:106
+msgid "Show Account Limit Information"
+msgstr "Показывать лимиты счетов"
+
+#: dialogs/settings/rc.cpp:110 widgets/rc.cpp:47
+msgid ""
+"<i>Enter regular expressions which can be used to parse the data returned "
+"from the URL entered above. The symbol, price, and date must be found in "
+"the quote data to be usable. You may also try the KMyMoney user's "
+"mailinglist at <a href=\"mailto:kmymoney2-user@lists.sourceforge.net"
+"\">kmymoney2-user@lists.sourceforge.net</a> to find what settings work for "
+"other users in your country.</i>"
+msgstr ""
+"<i>Введите регулярное выражение для разбора данных из источника курсов. В "
+"данных должны находится код финансового инструмента, цена и дата. В архиве "
+"рассылки <a href=\"mailto:kmymoney2-user@lists.sourceforge.net\">kmymoney2-"
+"user@lists.sourceforge.net</a> можно попробовать найти работающие параметры "
+"источников для пользователей в вашей стране.</i>"
+
+#: dialogs/settings/rc.cpp:113 widgets/rc.cpp:38
+msgid "Regular Expression to extract the symbol from the downloaded data"
+msgstr ""
+"Регулярное выражение для получения кода финансового инструмента из "
+"полученных данных"
+
+#: dialogs/settings/rc.cpp:114 widgets/rc.cpp:39
+msgid "Regular Expression to extract the price from the downloaded data"
+msgstr "Регулярное выражение для получения цены из полученных данных"
+
+#: dialogs/settings/rc.cpp:115 widgets/rc.cpp:41
+msgid "URL to be used to download the quote"
+msgstr "URL для скачивания курсов"
+
+#: dialogs/settings/rc.cpp:116 widgets/rc.cpp:42
+msgid ""
+"Enter the URL from which stock quotes will be fetched. <b>%1</b> will be "
+"replaced with the symbol for the security being quoted. For currency "
+"conversions, <b>%2</b> will be replaced with the currency to be quoted and "
+"<b>%1</b> with the currency the quote is based on."
+msgstr ""
+"Введите URL для скачивания курсов. Вместо <b>%1</b> будет подставлен код "
+"финансового инструмента, вместо <b>%2</b> - валюта."
+
+#: dialogs/settings/rc.cpp:118 dialogs/settings/rc.cpp:121 widgets/rc.cpp:40
+#: widgets/rc.cpp:44
+msgid "Regular Expression to extract the date from the downloaded data"
+msgstr "Регулярное выражение для получения даты из полученных данных"
+
+#: dialogs/rc.cpp:807 dialogs/settings/rc.cpp:119 widgets/rc.cpp:45
+msgid "Date Format"
+msgstr "Формат дат"
+
+#: dialogs/settings/rc.cpp:122
+msgid "Skip HTML stripping"
+msgstr "Не удалять фрагменты HTML"
+
+#: dialogs/settings/rc.cpp:123
+msgid ""
+"<p>For easier processing of the data returned by the online source, KMyMoney "
+"usually strips unused parts before it is parsed with the regular "
+"expressions. If matching of the fields relies on those items, then use this "
+"option to turn stripping off.</p>\n"
+"\n"
+"<p>The following items are usually removed by stripping:\n"
+"\n"
+"<ul>\n"
+"<li>HTML tags such as <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded characters such as <b>&amp;nbsp;</b></li>\n"
+"<li>duplicate whitespace</li>\n"
+"</ul>\n"
+"</p>"
+msgstr ""
+"<p>При обработке данных из онлайновых источников некоторые части удаляются "
+"посредством регулярных выражений. Если вам необходимы данные из удалённых "
+"фрагментов, включите этот флажок.</p>\n"
+"\n"
+"<p>Следующие фрагменты удаляются по умолчанию:\n"
+"\n"
+"<ul>\n"
+"<li>Теги HTML, такие как <b>&lt;tag&gt;</b></li>\n"
+"<li>Коды символов в виде b>&amp;nbsp;</b></li>\n"
+"<li>Повторяющиеся пробелы и знаки табуляции</li>\n"
+"</ul>\n"
+"</p>"
+
+#: dialogs/settings/rc.cpp:127
+msgid "Register settings"
+msgstr "Параметры списка операций"
+
+#: dialogs/settings/rc.cpp:128
+msgid "Display"
+msgstr "Показ"
+
+#: dialogs/settings/rc.cpp:131
+msgid ""
+"Using the ledger lens shows the details for the transaction that has focus "
+"in the ledger. Usually, when using the transaction form, only a one line "
+"summary is displayed for each transaction as the details are shown in the "
+"form."
+msgstr ""
+"При включении этого параметра, при выделении операции в таблице в строке "
+"будут показаны дополнительные данные об этой операции."
+
+#: dialogs/settings/rc.cpp:133
+msgid "Always show a No. field"
+msgstr "Показывать &номер операции"
+
+#: dialogs/settings/rc.cpp:134
+msgid "Show group header between transactions"
+msgstr "Показывать разделитель &групп операций"
+
+#: dialogs/settings/rc.cpp:135
+msgid ""
+"Draws a larger header above each group of transaction. The grouping depends "
+"on the current sort order."
+msgstr ""
+"При включении этого параметра показывать широкую полосу над каждой группой "
+"операций. Группировка зависит от выбранного порядка сортировки."
+
+#: dialogs/settings/rc.cpp:136
+msgid "Show header for the previous and current fiscal year"
+msgstr "Показывать маркеры предыдущего и текущего финансового года"
+
+#: dialogs/settings/rc.cpp:137
+msgid "Sorting"
+msgstr "&Сортировка"
+
+#: dialogs/settings/rc.cpp:138
+msgid "Normal view"
+msgstr "&Обычный вид"
+
+#: dialogs/settings/rc.cpp:139
+msgid "Reconciliation view"
+msgstr "&Сверка"
+
+#: dialogs/settings/rc.cpp:140
+msgid "Search view"
+msgstr "&Поиск"
+
+#: dialogs/settings/rc.cpp:141
+msgid ""
+"Use the <i>left</i> and <i>right</i> buttons to add and remove sort options. "
+"Use the <i>up</i> and <i>down</i> buttons to modify the sort order. Double-"
+"Click a selected entry to toggle the sort order between <i>ascending</i> and "
+"<i>descending</i>."
+msgstr ""
+"Используйте кнопки со стрелками <i>влево</i> и <i>вправо</i> для добавления "
+"и удаления полей сортировки. Кнопки со стрелками <i>вверх</i>и <i>вниз</i> "
+"устанавливают приоритет сортировки. Двойной щелчок на поле в списке справа "
+"переключает режим сортировки <i>по возрастанию</i> и <i>по убыванию</i>."
+
+#: dialogs/settings/rc.cpp:142
+msgid "Data entry"
+msgstr "Ввод данных"
+
+#: dialogs/settings/rc.cpp:146
+msgid "Use Enter to move between fields"
+msgstr "Перемещение между полями клавишей Enter"
+
+#: dialogs/settings/rc.cpp:147
+msgid "Match names from start"
+msgstr "Поиск вхождений с начала строки"
+
+#: dialogs/settings/rc.cpp:148
+msgid ""
+"Mark this option, if you always want to match names e.g. for payees from the "
+"start. If unset, any substring is matched."
+msgstr ""
+"При включении этого параметра при вводе текста будет осуществлён поиск "
+"получателя, названия статьи или другой сущности с начала текста. Если этот "
+"параметр выключен, поиск будет вестись по подстроке в любом месте имени или "
+"названия."
+
+#: dialogs/settings/rc.cpp:149
+msgid "Default reconciliation state"
+msgstr "Состояние по умолчанию для операций при сверке"
+
+#: dialogs/rc.cpp:227 dialogs/settings/rc.cpp:150
+#: widgets/kmymoneycombo.cpp:348 widgets/registersearchline.cpp:84
+msgid "Not reconciled"
+msgstr "Не сверено"
+
+#: dialogs/rc.cpp:228 dialogs/settings/rc.cpp:151
+#: widgets/kmymoneycombo.cpp:347 widgets/registersearchline.cpp:85
+msgid "Cleared"
+msgstr "Проверено"
+
+#: dialogs/settings/rc.cpp:153
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation "
+"of an account"
+msgstr "Состояние по умолчанию для операций, введённых во время сверки счёта"
+
+#: dialogs/settings/rc.cpp:154
+msgid "Autofill"
+msgstr "Автозаполнение"
+
+#: dialogs/settings/rc.cpp:155
+msgid "No Autofill"
+msgstr "Без автозаполнения"
+
+#: dialogs/settings/rc.cpp:156
+msgid "Don't do autofill of transaction data at all."
+msgstr "Не заполнять форму ввода данными предыдущей операции "
+
+#: dialogs/settings/rc.cpp:157
+msgid "Same transaction if amount differs less than"
+msgstr "Операции одинаковы, если их суммы отличаются не более, чем на"
+
+#: dialogs/settings/rc.cpp:158
+msgid ""
+"Collect all transactions for the given payee. Treat all transactions that "
+"refer to the same category and have an amount with +/- X % as identical. If "
+"more than one transaction is found, a list of them is presented to the "
+"user.\n"
+"\n"
+"Selecting 0% will list all transactions."
+msgstr ""
+"Выбор всех операций с указанным получателем. Далее эти операции считаются "
+"одинаковыми, если используют одну и ту же статью и их сумма различается не "
+"более чем на указанное количество процентов. Пользователю показывается "
+"список найденных «одинаковых» операций.\n"
+"\n"
+"При указании 0% показываются все операции."
+
+#: dialogs/settings/rc.cpp:159
+msgid ""
+"Two transactions are usually treated identical for autofill, if they refer "
+"the same accounts. They are treated as different transactions though, when "
+"their amount varies by more than the percentage given here."
+msgstr ""
+"Две операции обычно считаются одинаковыми при автозаполнении если они "
+"используют один и тот же счёт. Если их суммы отличаются более, чем на "
+"указанное число процентов, операции считаются не одинаковыми."
+
+#: dialogs/settings/rc.cpp:160
+msgid ""
+"_: Same transaction if amount differs less than percent.\n"
+"percent."
+msgstr "процентов"
+
+#: dialogs/settings/rc.cpp:161
+msgid "with previously most often used transaction for the payee"
+msgstr "наиболее часто используемые операции с этим получателем"
+
+#: dialogs/settings/rc.cpp:162
+msgid ""
+"The data of the last transaction assigned to the category used most often "
+"for this payee is autofilled into the transaction editor."
+msgstr ""
+"Данные операции будут использовать статью, наиболее часто используемую для "
+"указанного получателя."
+
+#: dialogs/settings/rc.cpp:164
+msgid "Match transactions within days"
+msgstr "Максимальный период между связанными операциями (в днях)"
+
+#: dialogs/settings/rc.cpp:165
+msgid ""
+"Search for matching transactions within the range of the posting date of the "
+"imported transaction +/- the number of given days."
+msgstr "Период в днях (до и после) для поиска связанных операций."
+
+#: dialogs/settings/rc.cpp:166
+msgid "Ask for a new payee's default category"
+msgstr "Запрос статьи по умолчанию для нового получателя"
+
+#: dialogs/settings/rc.cpp:167
+msgid ""
+"Whenever a new payee is detected during import of a statement, the user will "
+"be asked to assign a default category for this user when this option is "
+"selected."
+msgstr ""
+"При обнаружении нового получателя при импорте выписки появится диалог выбора "
+"статьи по умолчанию для этого получателя."
+
+#: dialogs/settings/rc.cpp:168
+msgid "Schedule Settings"
+msgstr "Параметры графиков платежей"
+
+#: dialogs/settings/rc.cpp:169
+msgid "Startup options"
+msgstr "При запуске программы"
+
+#: dialogs/settings/rc.cpp:170
+msgid "Check schedules on startup"
+msgstr "Проверять сроки по графикам платежей"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:60
+#: widgets/kmymoneyonlinequoteconfig.cpp:60
+msgid "Delete the selected source entry"
+msgstr "Удалить источник курсов"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:61
+#: widgets/kmymoneyonlinequoteconfig.cpp:61
+msgid "Use this to delete the selected online source entry"
+msgstr "Удалить выбранный источник курсов из списка"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:66
+#: widgets/kmymoneyonlinequoteconfig.cpp:66
+msgid "Create a new source entry for online quotes"
+msgstr "Добавить новый источник курсов"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:67
+#: widgets/kmymoneyonlinequoteconfig.cpp:67
+msgid "Use this to create a new entry for online quotes"
+msgstr "Добавить новый источник курсов"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:107
+#: dialogs/settings/ksettingsonlinequotes.cpp:190
+#: dialogs/settings/ksettingsonlinequotes.cpp:193
+#: dialogs/settings/ksettingsonlinequotes.cpp:216
+#: widgets/kmymoneyonlinequoteconfig.cpp:107
+#: widgets/kmymoneyonlinequoteconfig.cpp:185
+#: widgets/kmymoneyonlinequoteconfig.cpp:188
+#: widgets/kmymoneyonlinequoteconfig.cpp:211
+msgid "New Quote Source"
+msgstr "Новый источник курсов"
+
+#: dialogs/ksplittransactiondlg.cpp:77 dialogs/rc.cpp:788
+msgid "Clear &All"
+msgstr "Удалить &все"
+
+#: dialogs/ksplittransactiondlg.cpp:79
+msgid "Clear all splits"
+msgstr "Удалить все разделы"
+
+#: dialogs/ksplittransactiondlg.cpp:80
+msgid "Use this to clear all splits of this transaction"
+msgstr "Удалить все разделы операции"
+
+#: dialogs/ksplittransactiondlg.cpp:84
+msgid "&Merge"
+msgstr "&Объединить"
+
+#: dialogs/ksplittransactiondlg.cpp:183
+msgid ""
+"The total amount of this transaction is %1 while the sum of the splits is %"
+"2. The remaining %3 are unassigned."
+msgstr ""
+"Общая сумма операции - %1, однако сумма всех разделов - %2. Остаток %3 не "
+"распределён."
+
+#: dialogs/ksplittransactiondlg.cpp:191
+#, c-format
+msgid "Change &total amount of transaction to %1."
+msgstr "&Установить общую сумму операции в %1."
+
+#: dialogs/ksplittransactiondlg.cpp:194
+msgid "&Distribute difference of %1 among all splits."
+msgstr "&Распределить остаток %1 по всем разделам."
+
+#: dialogs/ksplittransactiondlg.cpp:203
+#, c-format
+msgid "&Leave total amount of transaction at %1."
+msgstr "&Оставить общую сумму операции как %1."
+
+#: dialogs/ksplittransactiondlg.cpp:205
+msgid "&Leave %1 unassigned."
+msgstr "&Оставить остаток %1 не распределённым."
+
+#: dialogs/ksplittransactiondlg.cpp:275
+msgid ""
+"You are about to delete all splits of this transaction. Do you really want "
+"to continue?"
+msgstr "Удалить все разделы операции?"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:97
+msgid "Use this to create a new QIF import/export profile"
+msgstr "Создать новый профиль импорта и экспорта в формате QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:148
+#: dialogs/mymoneyqifprofileeditor.cpp:403 dialogs/rc.cpp:797
+msgid "QIF Profile Editor"
+msgstr "Профиль QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:150
+msgid "QIF Profile Selector"
+msgstr "Выбор профиля QIF"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:236
+msgid "The default QIF profile"
+msgstr "Профиль QIF по умолчанию"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:404
+#: dialogs/mymoneyqifprofileeditor.cpp:417
+msgid "Enter new profile name"
+msgstr "Имя нового профиля"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:436
+msgid "Do you really want to delete profile '%1'?"
+msgstr "Удалить профиль «%1»?"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:38
+msgid "Select additional keys"
+msgstr "Выбор дополнительных ключей"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:48 widgets/rc.cpp:25
+msgid "User identification"
+msgstr "Ключ пользователя"
+
+#: dialogs/kendingbalancedlg.cpp:71
+msgid ""
+"Please enter the following fields with the information as you find them on "
+"your statement. Make sure to enter all values in <b>%1</b>."
+msgstr ""
+"Заполните поля в соответствии с вашей выпиской. Проверьте, что все введённые "
+"значения указаны в валюте «%1»."
+
+#: dialogs/kendingbalancedlg.cpp:124
+#, c-format
+msgid "Last reconciled statement: %1"
+msgstr "Последняя сверенная операция: %1"
+
+#: dialogs/kendingbalancedlg.cpp:437 dialogs/kendingbalancedlg.cpp:577
+#: dialogs/rc.cpp:137
+msgid "Adjustment transaction"
+msgstr "Корректировочная операция"
+
+#: dialogs/kendingbalancedlg.cpp:510
+msgid ""
+"KMyMoney has calculated the following amounts for interest and amortization "
+"according to recorded payments between %1 and %2."
+msgstr ""
+"Суммы процентов и погашения основной части рассчитаны в соответствии с "
+"выплатами между %1 и %2."
+
+#: dialogs/kbalancechartdlg.cpp:59
+#, c-format
+msgid "Balance of %1"
+msgstr "Остаток счета %1"
+
+#: dialogs/kbalancechartdlg.cpp:70
+msgid "%1 Balance History"
+msgstr "Изменение остатка %1"
+
+#: dialogs/kmymoneysplittable.cpp:98
+msgid "Split Options"
+msgstr "Разделение"
+
+#: dialogs/kmymoneysplittable.cpp:99 dialogs/rc.cpp:731
+#: widgets/kmymoneypriceview.cpp:149
+msgid "Edit..."
+msgstr "Изменить..."
+
+#: dialogs/kmymoneysplittable.cpp:100
+msgid "Duplicate"
+msgstr "Дубликат"
+
+#: dialogs/kmymoneysplittable.cpp:102
+msgid "Delete ..."
+msgstr "Удалить..."
+
+#: dialogs/kmymoneysplittable.cpp:275
+msgid ""
+"_: Duplicate split\n"
+"CTRL+c"
+msgstr "Ctrl+C"
+
+#: dialogs/kmymoneysplittable.cpp:562
+msgid "will be calculated"
+msgstr "будет рассчитано"
+
+#: dialogs/kmymoneysplittable.cpp:648
+msgid ""
+"You are about to delete the selected split. Do you really want to continue?"
+msgstr "Удалить выделенные операции?"
+
+#: dialogs/rc.cpp:1
+msgid "Account selection"
+msgstr "Выбор счёта"
+
+#: dialogs/rc.cpp:3
+msgid "Account to import to"
+msgstr "Импорт на счёт"
+
+#: dialogs/rc.cpp:6 dialogs/rc.cpp:170 widgets/rc.cpp:169
+msgid "Skip"
+msgstr "Пропустить"
+
+#: dialogs/rc.cpp:8
+msgid ""
+"Use this dialog to backup your data. \n"
+"\n"
+"Please make sure you have a disk inserted and that the drive is ready. Then "
+"choose the mount point from either the Choose button or by entering the path "
+"in the available box.\n"
+"\n"
+"Click OK to perform the backup. If your system does not use an automounter, "
+"make sure you mark the checkbox below to \"mount this directory before "
+"backing up.\""
+msgstr ""
+"В этом окне вы можете сделать резервное копирование ваших данных.\n"
+"\n"
+"Вставьте диск, укажите точку монтирования вручную или нажмите кнопку «Обзор» "
+"для выбора.\n"
+"\n"
+"После этого нажмите «ОК» для копирования. Если ваша система не поддерживает "
+"автоподключение устройств, включите параметр «Подключить диск перед резервным "
+"копированием»."
+
+#: dialogs/rc.cpp:9
+msgid "Device options"
+msgstr "Параметры устройства"
+
+#: dialogs/rc.cpp:10
+msgid ""
+"_: This is the mount point\n"
+"Mount Point:"
+msgstr "Точка монтирования:"
+
+#: dialogs/rc.cpp:11
+msgid "Choose..."
+msgstr "Обзор..."
+
+#: dialogs/rc.cpp:12
+msgid "Mount this directory before backing up."
+msgstr "Подключить диск перед резервным копированием"
+
+#: dialogs/rc.cpp:15
+msgid "Reassign categories"
+msgstr "Переназначение статей"
+
+#: dialogs/rc.cpp:16
+msgid ""
+"The transactions, schedules and budgets associated with the selected "
+"category need to be re-assigned to a different category before the selected "
+"category can be deleted. Please select a category from the list below."
+msgstr ""
+"Во всех операциях, графиках платежей и бюджетах, которые используют "
+"удаляемую статью, необходимо заменить её на другую статью. Выберите "
+"замещающую статью из списка."
+
+#: dialogs/rc.cpp:17
+msgid "Available categories:"
+msgstr "Доступные статьи:"
+
+#: dialogs/rc.cpp:21
+msgid ""
+"Please choose the type of import you wish to perform. A simple "
+"explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"Выберите тип импорта. Краткое описание каждого типа при его выборе "
+"показывается внизу.\n"
+"\n"
+"После этого нажмите OK."
+
+#: dialogs/rc.cpp:23
+msgid "QIF"
+msgstr "QIF"
+
+#: dialogs/rc.cpp:24
+msgid "CSV"
+msgstr "CSV"
+
+#: dialogs/rc.cpp:25
+msgid "Some descripton"
+msgstr "Описание"
+
+#: dialogs/rc.cpp:28
+msgid "Confirm Manual Enter"
+msgstr "Подтверждение ввода вручную"
+
+#: dialogs/rc.cpp:29
+msgid "The following changes have been made to the transaction data:"
+msgstr "В данных операции произошли следующие изменения:"
+
+#: dialogs/rc.cpp:30
+msgid "Please choose what you wish to do with the above changes"
+msgstr "Что нужно сделать с изменениями"
+
+#: dialogs/rc.cpp:31
+msgid ""
+"Discard the changes and enter the original transaction into the register."
+msgstr "Отменить изменения и оставить первоначальную операцию."
+
+#: dialogs/rc.cpp:32
+msgid "Enter these new values this one time, for this occurence only."
+msgstr "Изменить только эту выплату."
+
+#: dialogs/rc.cpp:33
+msgid "Set all further occurences in this schedule to be these values."
+msgstr "Изменить во всех будущих выплатах."
+
+#: dialogs/rc.cpp:36
+msgid "CSV Dialog"
+msgstr "Диалог CSV"
+
+#: dialogs/rc.cpp:37
+msgid ""
+"CSV Dialog. Choose a file and then click on Run. You can view your "
+"progress at\n"
+"the bottom of the screen.\n"
+"\n"
+"You can cancel the process at any time by clicking on the Cancel button."
+msgstr ""
+"Диалог CSV. Выберите файл и нажмите «Выполнить». Внизу окна будет показан "
+"ход выполнения операции.\n"
+"\n"
+"Вы можете прервать процесс в любое время, нажав кнопку «Отмена»."
+
+#: dialogs/rc.cpp:38
+msgid "Choose the csv file:"
+msgstr "Файл CSV:"
+
+#: dialogs/rc.cpp:39
+msgid "Browse"
+msgstr "Обзор"
+
+#: dialogs/rc.cpp:40
+msgid "Between These Dates"
+msgstr "Период"
+
+#: dialogs/rc.cpp:41 dialogs/rc.cpp:196
+msgid "Start on:"
+msgstr "Начало:"
+
+#: dialogs/rc.cpp:42 dialogs/rc.cpp:195
+msgid "End on:"
+msgstr "Окончание:"
+
+#: dialogs/rc.cpp:43
+msgid "Run"
+msgstr "Выполнить"
+
+#: dialogs/rc.cpp:44
+msgid "Progress Info"
+msgstr "Ход выполнения"
+
+#: dialogs/rc.cpp:45
+msgid "Processing Account:"
+msgstr "Обработка счёта:"
+
+#: dialogs/rc.cpp:47
+msgid "Processing Transaction:"
+msgstr "Обработка операции:"
+
+#: dialogs/rc.cpp:48
+msgid "0 of 0"
+msgstr "0 из 0"
+
+#: dialogs/rc.cpp:50
+msgid "Exchange Rate/Price Editor"
+msgstr "Редактор курсов"
+
+#: dialogs/rc.cpp:55
+msgid "Convert from"
+msgstr "Финансовый инструмент"
+
+#: dialogs/rc.cpp:58
+msgid "Convert to"
+msgstr "Стоимость"
+
+#: dialogs/rc.cpp:61
+msgid "To amount"
+msgstr "Сумма"
+
+#: dialogs/rc.cpp:62
+msgid "Exchange rate / Price"
+msgstr "По курсу"
+
+#: dialogs/rc.cpp:64
+msgid ""
+"xx\n"
+"xx"
+msgstr ""
+"xx\n"
+"xx"
+
+#: dialogs/rc.cpp:68
+msgid "Currencies"
+msgstr "Валюты"
+
+#: dialogs/rc.cpp:72
+msgid "real ID"
+msgstr "Действительный ID"
+
+#: dialogs/rc.cpp:73 dialogs/rc.cpp:722
+msgid "ID"
+msgstr "ID"
+
+#: dialogs/rc.cpp:74
+msgid "X"
+msgstr "X"
+
+#: dialogs/rc.cpp:76 dialogs/rc.cpp:459
+msgid "Online Source"
+msgstr "Онлайновый источник"
+
+#: dialogs/rc.cpp:78 dialogs/rc.cpp:278 dialogs/rc.cpp:312 dialogs/rc.cpp:684
+msgid "F1"
+msgstr "F1"
+
+#: dialogs/rc.cpp:80
+msgid "If this button is not activated, select the base currency first."
+msgstr "Если эта кнопка не активна, выберите основную валюту."
+
+#: dialogs/rc.cpp:81
+msgid ""
+"Press this button to close the dialog. If the button is not activated, "
+"select your base currency."
+msgstr ""
+"Нажмите на эту кнопку для закрытия диалога. Если эта кнопка не активна, "
+"выберите основную валюту."
+
+#: dialogs/rc.cpp:82
+msgid "Edit Equity"
+msgstr "Курс"
+
+#: dialogs/rc.cpp:86 dialogs/rc.cpp:410
+msgid "Smallest fraction:"
+msgstr "Точность:"
+
+#: dialogs/rc.cpp:87 dialogs/rc.cpp:408 dialogs/rc.cpp:440
+msgid "1 /"
+msgstr "1 /"
+
+#: dialogs/rc.cpp:88 dialogs/rc.cpp:405
+msgid "Investment Type:"
+msgstr "Вид:"
+
+#: dialogs/rc.cpp:89 dialogs/rc.cpp:404
+msgid "Equity Name:"
+msgstr "Название:"
+
+#: dialogs/rc.cpp:90 dialogs/rc.cpp:409
+msgid "Market Symbol:"
+msgstr "Биржевой код:"
+
+#: dialogs/rc.cpp:91
+msgid "Price History"
+msgstr "Изменение курса"
+
+#: dialogs/rc.cpp:97
+msgid "Edit Scheduled transaction"
+msgstr "Изменить запланированную операцию"
+
+#: dialogs/rc.cpp:98
+msgid "Schedule name:"
+msgstr "Название платежа:"
+
+#: dialogs/rc.cpp:99
+msgid "Frequency:"
+msgstr "Периодичность:"
+
+#: dialogs/rc.cpp:100
+msgid "Number of selected periods between entries"
+msgstr "Количество выбранных периодов между платежами"
+
+#: dialogs/rc.cpp:101
+msgid "Payment information"
+msgstr "Информация о платеже"
+
+#: dialogs/rc.cpp:105 dialogs/rc.cpp:160 dialogs/rc.cpp:247 dialogs/rc.cpp:752
+#: widgets/register.cpp:569
+msgid "C"
+msgstr "П"
+
+#: dialogs/rc.cpp:113
+msgid "Do nothing"
+msgstr "ничего не делать"
+
+#: dialogs/rc.cpp:116
+msgid "If this schedule occurs on the weekend:"
+msgstr "Если дата приходится на выходные:"
+
+#: dialogs/rc.cpp:117
+msgid "The amount is an estimate because it varies for each payment"
+msgstr "Сумма может меняться"
+
+#: dialogs/rc.cpp:118
+msgid "Enter this schedule into the register automatically when it is due"
+msgstr "Автоматически создавать операцию"
+
+#: dialogs/rc.cpp:119
+msgid "This schedule will end at some time"
+msgstr "Фиксированное окончание платежей"
+
+#: dialogs/rc.cpp:120
+msgid "Number of transactions remaining:"
+msgstr "Осталось операций:"
+
+#: dialogs/rc.cpp:121
+msgid "Date of final transaction:"
+msgstr "Дата последней операции:"
+
+#: dialogs/rc.cpp:125
+msgid "Reconciliation Wizard"
+msgstr "Мастер сверки"
+
+#: dialogs/rc.cpp:127
+msgid ""
+"Reconciling your account assures, that your recordings match those of your "
+"institution and that there are no mistakes on either side. You should "
+"reconcile your account whenever you receive a statement from your "
+"institution.\n"
+"\n"
+"All relevant information necessary for this process is usually printed on "
+"your statement.\n"
+"\n"
+"On the next page you will verify, that the starting and ending balance are "
+"matching those on your statement. If not, please modify the figures."
+msgstr ""
+"Мастер сверяет данные ваших счетов с выписками финансовых учреждений для "
+"предотвращения возникновения ошибок. Каждый раз, когда вы получаете выписку, "
+"производите сверку.\n"
+"\n"
+"Все необходимые данные для сверки обычно содержатся в выписке.\n"
+"\n"
+"Далее будет выполнена проверка соответствия начального и конечного балансов "
+"вашего счёта и выписки. Если необходимо, подкорректируйте данные."
+
+#: dialogs/rc.cpp:129
+msgid ""
+"KMyMoney calculates your loan payments automatically. The amounts can "
+"deviate from those calculated by the creditor. Therefore, you possibly have "
+"to adjust amortization, interest and other costs according to your "
+"statement.\n"
+"\n"
+"Please enter the following information found on your statement:"
+msgstr ""
+"KMyMoney подсчитывает ваши выплаты по кредиту автоматически. Итоговые суммы "
+"могут отличаться от предъявляемых кредитором. Если это случилось, нужно "
+"проверить условия погашения, размер процентов и другие затраты, оговорённые "
+"в договоре.\n"
+"\n"
+"Пожалуйста, введите следующую информацию из вашего договора:"
+
+#: dialogs/rc.cpp:130
+msgid "Ending date of statement"
+msgstr "Дата окончания выплат"
+
+#: dialogs/rc.cpp:131
+msgid "Starting date of statement"
+msgstr "Дата начала выплат"
+
+#: dialogs/rc.cpp:132
+msgid "Verify payments"
+msgstr "Проверка выплат"
+
+#: dialogs/rc.cpp:133 dialogs/rc.cpp:148 dialogs/rc.cpp:476 dialogs/rc.cpp:477
+#: dialogs/rc.cpp:508 dialogs/rc.cpp:513 dialogs/rc.cpp:518 dialogs/rc.cpp:532
+#: dialogs/rc.cpp:539 dialogs/rc.cpp:540 dialogs/rc.cpp:541 dialogs/rc.cpp:542
+#: dialogs/rc.cpp:543 dialogs/rc.cpp:552 dialogs/rc.cpp:553 dialogs/rc.cpp:554
+#: dialogs/rc.cpp:555 dialogs/rc.cpp:556 dialogs/rc.cpp:565 dialogs/rc.cpp:566
+#: dialogs/rc.cpp:567 dialogs/rc.cpp:568 dialogs/rc.cpp:569 dialogs/rc.cpp:578
+#: dialogs/rc.cpp:579 dialogs/rc.cpp:580 dialogs/rc.cpp:581 dialogs/rc.cpp:582
+#: dialogs/rc.cpp:591 dialogs/rc.cpp:592 dialogs/rc.cpp:593 dialogs/rc.cpp:594
+#: dialogs/rc.cpp:595 dialogs/rc.cpp:603 dialogs/rc.cpp:604 dialogs/rc.cpp:605
+#: dialogs/rc.cpp:606 dialogs/rc.cpp:607 dialogs/rc.cpp:618 dialogs/rc.cpp:619
+#: dialogs/rc.cpp:621 dialogs/rc.cpp:636 dialogs/rc.cpp:637 dialogs/rc.cpp:638
+#: dialogs/rc.cpp:639 dialogs/rc.cpp:640 dialogs/rc.cpp:641 dialogs/rc.cpp:651
+#: dialogs/rc.cpp:652 dialogs/rc.cpp:654 dialogs/rc.cpp:657 dialogs/rc.cpp:658
+#: dialogs/rc.cpp:659 dialogs/rc.cpp:664 dialogs/rc.cpp:665 dialogs/rc.cpp:668
+#: dialogs/rc.cpp:670 dialogs/rc.cpp:672 dialogs/rc.cpp:674 dialogs/rc.cpp:676
+#: dialogs/rc.cpp:678 dialogs/rc.cpp:681 dialogs/rc.cpp:823 widgets/rc.cpp:167
+msgid "1"
+msgstr "1"
+
+#: dialogs/rc.cpp:136
+msgid ""
+"If your statement shows different amounts, please cancel this dialog and "
+"correct the false transactions or correct the values in this dialog. In the "
+"later case, KMyMoney will create an adjustment transaction and add it to the "
+"ledger."
+msgstr ""
+"Если ваш договор содержит другие суммы, выйдите из этого диалога и исправьте "
+"неправильные операции, или же исправьте значения в этом диалоге. В последнем "
+"случае будет создана корректировочная операция по счёту."
+
+#: dialogs/rc.cpp:138
+msgid ""
+"In order to create the adjustment transaction, KMyMoney requires an account "
+"and possibly an interest category to assign the differences to. Please "
+"select an account and - if necessary - a category."
+msgstr ""
+"Чтобы создать корректировочную операцию, укажите счёт и, возможно, статью "
+"доходов, на которую будет отнесено расхождение."
+
+#: dialogs/rc.cpp:140
+msgid "Interest-Category"
+msgstr "Статья доходов"
+
+#: dialogs/rc.cpp:141
+msgid "Restarting postponed reconciliation"
+msgstr "Запуск отложенной сверки"
+
+#: dialogs/rc.cpp:142
+msgid ""
+"You have previously postponed the reconciliation of this account. If you "
+"have entered charges or interests the last time you started reconciling this "
+"account you can modify these in the ledger later on.\n"
+"\n"
+"It is important, that you continue with the same statement you used when you "
+"postponed the reconciliation.\n"
+"\n"
+"All information you have entered into this wizard will be shown and all "
+"transactions that you already cleared are marked with a 'C'."
+msgstr ""
+"Вы открыли окно сверки. Введённые здесь данные можно изменить позднее.\n"
+"\n"
+"Все проверенные операции будут отмечены в списке буквой «П»."
+
+#: dialogs/rc.cpp:143
+msgid "Statement Information"
+msgstr "Данные выписки"
+
+#: dialogs/rc.cpp:144 dialogs/rc.cpp:315 dialogs/rc.cpp:317 dialogs/rc.cpp:320
+#: dialogs/rc.cpp:321 dialogs/rc.cpp:329 dialogs/rc.cpp:330 dialogs/rc.cpp:333
+#: dialogs/rc.cpp:334 dialogs/rc.cpp:335 dialogs/rc.cpp:336 dialogs/rc.cpp:366
+msgid "x"
+msgstr "x"
+
+#: dialogs/rc.cpp:145
+msgid "Statement date:"
+msgstr "Дата:"
+
+#: dialogs/rc.cpp:146
+msgid "Starting balance of this statement:"
+msgstr "Начальный баланс:"
+
+#: dialogs/rc.cpp:147
+msgid "Ending balance of this statement:"
+msgstr "Конечный баланс:"
+
+#: dialogs/rc.cpp:149
+msgid "Interest / Charges"
+msgstr "Зачисление и списание"
+
+#: dialogs/rc.cpp:150
+msgid ""
+"If necessary, enter information about interest or charges here. KMyMoney "
+"will create transactions and clear them directly for you."
+msgstr ""
+"Введите здесь данные о зачислении и списании. На основании их будут созданы "
+"необходимые операции."
+
+#: dialogs/rc.cpp:153
+msgid "Charges"
+msgstr "Списание"
+
+#: dialogs/rc.cpp:154
+msgid "Enter Schedule"
+msgstr "Новый график платежей"
+
+#: dialogs/rc.cpp:155
+msgid "Schedule Details"
+msgstr "Данные платежа"
+
+#: dialogs/rc.cpp:156 dialogs/rc.cpp:348 dialogs/rc.cpp:389 widgets/rc.cpp:164
+msgid "Name:"
+msgstr "Название:"
+
+#: dialogs/rc.cpp:157 dialogs/rc.cpp:351 widgets/rc.cpp:165
+msgid "Type:"
+msgstr "Вид:"
+
+#: dialogs/rc.cpp:168
+msgid "Enter"
+msgstr "Сохранить"
+
+#: dialogs/rc.cpp:169
+msgid ""
+"Enter the transaction and advance the next due date of this schedule to the "
+"next payment date."
+msgstr "Ввести операцию и перейдите на следующую запланированную дату платежа."
+
+#: dialogs/rc.cpp:171
+msgid ""
+"Do not enter the transaction but advance the next due date of this schedule "
+"to the next payment date."
+msgstr ""
+"Не вводить операцию и перейдите на следующую запланированную дату платежа."
+
+#: dialogs/rc.cpp:172
+msgid "Ignore"
+msgstr "Игнорировать"
+
+#: dialogs/rc.cpp:173
+msgid ""
+"Do not enter or skip payments for this schedule but continue with the next "
+"schedule."
+msgstr "Игнорировать платежи по этому графику и перейти к другому графику."
+
+#: dialogs/rc.cpp:175
+msgid "Cancel processing of schedule entry."
+msgstr "Отменить работу с графиком платежей."
+
+#: dialogs/rc.cpp:176
+msgid "Update Stock and Currency Prices"
+msgstr "Обновить курсы"
+
+#: dialogs/rc.cpp:177
+msgid "List of known Equities, and the date they were last updated on."
+msgstr "Список финансовых инструментов и даты из последнего обновления."
+
+#: dialogs/rc.cpp:179
+msgid "Update All"
+msgstr "&Обновить все"
+
+#: dialogs/rc.cpp:180
+msgid "Update Selected"
+msgstr "Обновить в&ыбранные"
+
+#: dialogs/rc.cpp:181
+msgid "Status:"
+msgstr "Состояние:"
+
+#: dialogs/rc.cpp:184
+msgid "QIF Export"
+msgstr "Экспорт QIF"
+
+#: dialogs/rc.cpp:185
+msgid ""
+"From this dialog you are able to export transactions to a quicken compatible "
+"file, (known as a QIF file, because of the extension). Please enter the "
+"path to the QIF file or select it by clicking on the Browse button.\n"
+"\n"
+"You can choose the file's path, the account and the format of the QIF file "
+"(profile). Choose Account to export all the transactions between the "
+"specified dates or just categories. You can also limit the transactions "
+"that are exported by start and ending date. Once you have pressed the "
+"Export button a message box will appear when the export has completed "
+"detailing how many transactions, categories and payees were exported."
+msgstr ""
+"В этом диалоге вы можете экспортировать операции в формат, поддерживаемый "
+"программой Quicken (так называемый QIF). Укажите имя файла QIF.\n"
+"\n"
+"Кроме имени файла вам необходимо выбрать счёт и профиль файла QIF. Вы можете "
+"ограничить период операций и экспортировать данные о счёте и статьях. После "
+"того, как вы нажмёте на кнопку «Экспорт» появиться окно с ходом выполнения "
+"операции."
+
+#: dialogs/rc.cpp:186
+msgid "File to export to:"
+msgstr "Экспортировать в файл:"
+
+#: dialogs/rc.cpp:188
+msgid "Account to export"
+msgstr "Счёт"
+
+#: dialogs/rc.cpp:189 dialogs/rc.cpp:297
+msgid "QIF Profile"
+msgstr "Профиль QIF"
+
+#: dialogs/rc.cpp:190 dialogs/rc.cpp:298 dialogs/rc.cpp:362
+#: widgets/kmymoneypriceview.cpp:145
+msgid "New..."
+msgstr "Создать..."
+
+#: dialogs/rc.cpp:191
+msgid "Contents to Export"
+msgstr "Экспортировать данные"
+
+#: dialogs/rc.cpp:194
+msgid "Date Range"
+msgstr "Период"
+
+#: dialogs/rc.cpp:199
+msgid "Search transactions"
+msgstr "Поиск операций"
+
+#: dialogs/rc.cpp:200
+msgid "Criteria"
+msgstr "Критерии поиска"
+
+#: dialogs/rc.cpp:201
+msgid "Define your search criteria"
+msgstr "Укажите критерий поиска"
+
+#: dialogs/kfindtransactiondlg.cpp:169 dialogs/rc.cpp:202
+msgid "Text"
+msgstr "Текст"
+
+#: dialogs/rc.cpp:203
+msgid "Contains"
+msgstr "Содержит"
+
+#: dialogs/rc.cpp:204
+msgid "Does not contain"
+msgstr "Не содержит"
+
+#: dialogs/rc.cpp:205
+msgid "Treat text as regular expression"
+msgstr "Регулярное выражение"
+
+#: dialogs/rc.cpp:206
+msgid "Case sensitive"
+msgstr "С учётом регистра"
+
+#: dialogs/rc.cpp:209
+msgid "Range"
+msgstr "Период"
+
+#: dialogs/rc.cpp:210
+msgid ""
+"_: To (Date)\n"
+"To"
+msgstr "По"
+
+#: dialogs/rc.cpp:211
+msgid ""
+"_: From (Date)\n"
+"From"
+msgstr "С"
+
+#: dialogs/rc.cpp:213
+msgid "Search this amount"
+msgstr "Точная сумма"
+
+#: dialogs/rc.cpp:214
+msgid "Search amount in the range"
+msgstr "Диапазон сумм"
+
+#: dialogs/rc.cpp:215
+msgid ""
+"_: to (amount)\n"
+"to"
+msgstr "до"
+
+#: dialogs/rc.cpp:216
+msgid ""
+"_: from (amount)\n"
+"from"
+msgstr "от"
+
+#: dialogs/rc.cpp:220
+msgid "Select transactions without payees"
+msgstr "Только операции без получателей"
+
+#: dialogs/rc.cpp:221
+msgid "Select all"
+msgstr "Выбрать все"
+
+#: dialogs/rc.cpp:222
+msgid "Select none"
+msgstr "Снять выделение"
+
+#: dialogs/rc.cpp:224
+msgid "Validity"
+msgstr "Правильность"
+
+#: dialogs/rc.cpp:226
+msgid "All states"
+msgstr "Все состояния"
+
+#: dialogs/rc.cpp:230
+msgid "All types"
+msgstr "Все типы"
+
+#: dialogs/rc.cpp:234
+msgid "Any transaction"
+msgstr "Все операции"
+
+#: dialogs/rc.cpp:235
+msgid "Valid transaction"
+msgstr "Правильная операция"
+
+#: dialogs/rc.cpp:236
+msgid "Invalid transaction"
+msgstr "Ошибочная операция"
+
+#: dialogs/rc.cpp:237
+msgid "State"
+msgstr "Состояние"
+
+#: dialogs/rc.cpp:238
+msgid "Search this number"
+msgstr "Искать номер"
+
+#: dialogs/rc.cpp:239
+msgid "Search number in range"
+msgstr "Искать номер в диапазоне"
+
+#: dialogs/rc.cpp:240
+msgid ""
+"_: to (number)\n"
+"to"
+msgstr "до"
+
+#: dialogs/rc.cpp:241
+msgid ""
+"_: from (number)\n"
+"from"
+msgstr "от"
+
+#: dialogs/rc.cpp:242
+msgid "text"
+msgstr "текст"
+
+#: dialogs/rc.cpp:243
+msgid "warning"
+msgstr "предупреждение"
+
+#: dialogs/rc.cpp:244
+msgid "Result"
+msgstr "Результат"
+
+#: dialogs/rc.cpp:254
+msgid "F"
+msgstr "F"
+
+#: dialogs/rc.cpp:257 dialogs/rc.cpp:844
+msgid "&Reset"
+msgstr "С&бросить"
+
+#: dialogs/rc.cpp:258
+msgid "&Find"
+msgstr "&Поиск"
+
+#: dialogs/rc.cpp:259
+msgid "GnuCash Import Options"
+msgstr "Импорт из GnuCash"
+
+#: dialogs/rc.cpp:260
+msgid "Use 'Help' for more information on these options"
+msgstr "Используйте справку для получения информации о параметрах"
+
+#: dialogs/rc.cpp:261
+msgid "Investment Handling"
+msgstr "Инвестиции"
+
+#: dialogs/rc.cpp:262
+msgid "One investment account for each stock"
+msgstr "Отдельный счёт для каждого инструмента"
+
+#: dialogs/rc.cpp:263
+msgid "One investment account for all stocks"
+msgstr "Один счёт для всех инструментов"
+
+#: dialogs/rc.cpp:264
+msgid "Prompt for an investment account for each stock"
+msgstr "Спрашивать о счёте для каждого инструмента"
+
+#: dialogs/rc.cpp:265
+msgid "Online price quotes"
+msgstr "Источники курсов"
+
+#: dialogs/rc.cpp:266
+msgid "Use Finance::Quote for share price quotes"
+msgstr "Используйте модуль Finance::Quote для получения курсов"
+
+#: dialogs/rc.cpp:267
+msgid "Scheduled Transactions"
+msgstr "Платежи"
+
+#: dialogs/rc.cpp:268
+msgid "Drop suspect scheduled transactions"
+msgstr "Удалить подозрительные операции"
+
+#: dialogs/rc.cpp:269
+msgid "Decoding option"
+msgstr "Кодировка"
+
+#: dialogs/rc.cpp:270
+msgid "Decode using"
+msgstr "Кодировка"
+
+#: dialogs/rc.cpp:271
+msgid "Transaction Notes option"
+msgstr "Примечание к операции"
+
+#: dialogs/rc.cpp:272
+msgid "Use transaction notes on non-split transactions"
+msgstr "Использовать примечания к неразделённым операциям"
+
+#: dialogs/rc.cpp:273
+msgid "Debug Options"
+msgstr "Отладка"
+
+#: dialogs/rc.cpp:274
+msgid "General debug data"
+msgstr "Общие отладочные данные"
+
+#: dialogs/rc.cpp:275
+msgid "Display XML data"
+msgstr "Показать данные XML"
+
+#: dialogs/rc.cpp:276
+msgid "Anonymize data"
+msgstr "Скрыть конфиденциальные сведения"
+
+#: dialogs/rc.cpp:281
+msgid "Online Quotes - Select price source"
+msgstr "Онлайновое обновление - выберите источник курса"
+
+#: dialogs/rc.cpp:284
+msgid ""
+"This price source is not known to KMyMoney. Please select an option below."
+msgstr "Указанный источник курса неизвестен. Выберите другой."
+
+#: dialogs/rc.cpp:285
+msgid "Do not perform online quotes for this investment"
+msgstr "Не использовать онлайновое обновление"
+
+#: dialogs/rc.cpp:286
+msgid "Select a known KMyMoney source from the list below"
+msgstr "Выберите источник обновлений из списка"
+
+#: dialogs/rc.cpp:287
+msgid ""
+"Use the following name for the price source.\n"
+"(Click Help for further information.)"
+msgstr ""
+"Название для источника обновлений.\n"
+"Нажмите кнопку «Справка» для дополнительной информации."
+
+#: dialogs/rc.cpp:288
+msgid "Always use this selection for this price source."
+msgstr "Использовать этот источник по умолчанию."
+
+#: dialogs/rc.cpp:289
+msgid "QIF Import"
+msgstr "Импорт QIF"
+
+#: dialogs/rc.cpp:290
+msgid ""
+"From this dialog you are able to import transactions from a Quicken<b>&trade;"
+"</b> compatible file, (known as a QIF file, because of the extension).<p>\n"
+"\n"
+"Please enter the path to the QIF file or select it by clicking on the Browse "
+"button. Once you have the file's path press the Import button and KMyMoney "
+"will import all the transactions, categories and payees it finds."
+msgstr ""
+"Здесь вы можете импортировать операции из файлов Quicken<b>&trade;</b> с "
+"расширением qif.<p>\n"
+"\n"
+"Введите путь к файлу QIF или нажмите на кнопку «Обзор» для его выбора, затем "
+"нажмите кнопку «Импорт» для переноса операций, статей и получателей из этого "
+"файла."
+
+#: dialogs/rc.cpp:291
+msgid "QIF File to Import:"
+msgstr "Файл QIF:"
+
+#: dialogs/rc.cpp:292
+msgid "Import options"
+msgstr "Параметры"
+
+#: dialogs/rc.cpp:293
+msgid "Bank statement"
+msgstr "Выписка"
+
+#: dialogs/rc.cpp:294
+msgid "Other application"
+msgstr "Внешнее приложение"
+
+#: dialogs/rc.cpp:295
+msgid ""
+"Select <b>Bank statement</b> turns on automatic category matching which is "
+"turned off in case of <b>Historic data</b>. Use the latter if you import "
+"files from other Personal Finance Management software."
+msgstr ""
+"При выборе <b>Банковская выписка</b> будет включен автоматический поиск "
+"связанных операций по статье. Используйте его при импорте данных ил другого "
+"программ учёта личных финансов."
+
+#: dialogs/rc.cpp:296
+msgid "Source of QIF"
+msgstr "Источник QIF"
+
+#: dialogs/rc.cpp:302
+msgid "Verify Import"
+msgstr "Проверка импорта"
+
+#: dialogs/rc.cpp:304
+msgid "Ok"
+msgstr "&OK"
+
+#: dialogs/rc.cpp:306
+msgid "MyDialog"
+msgstr "MyDialog"
+
+#: dialogs/rc.cpp:310
+msgid "File Information"
+msgstr "Информация о файле"
+
+#: dialogs/rc.cpp:316
+msgid "Last modified on"
+msgstr "Дата последнего изменения"
+
+#: dialogs/rc.cpp:319
+msgid "Base currency"
+msgstr "Основная валюта"
+
+#: dialogs/rc.cpp:322
+msgid "Created on"
+msgstr "Создано"
+
+#: dialogs/rc.cpp:325
+msgid "Accounts/Categories"
+msgstr "Счета и статьи"
+
+#: dialogs/rc.cpp:328
+msgid "Closed"
+msgstr "Закрытый"
+
+#: dialogs/rc.cpp:331
+msgid "Prices"
+msgstr "Курсы"
+
+#: dialogs/rc.cpp:337
+msgid "Splits"
+msgstr "Разделить"
+
+#: dialogs/rc.cpp:338
+msgid "Price Editor"
+msgstr "Курсы"
+
+#: dialogs/rc.cpp:339
+msgid "Show all stored prices"
+msgstr "Показывать все курсы"
+
+#: dialogs/rc.cpp:343
+msgid "Delete Range..."
+msgstr "&Удалить период..."
+
+#: dialogs/rc.cpp:346
+msgid "New Account Dialog"
+msgstr "Новый счёт"
+
+#: dialogs/rc.cpp:349
+msgid "Opening information"
+msgstr "Открытие счёта"
+
+#: dialogs/rc.cpp:350
+msgid "Currency:"
+msgstr "Валюта:"
+
+#: dialogs/rc.cpp:352 dialogs/rc.cpp:793
+msgid "Date:"
+msgstr "Дата:"
+
+#: dialogs/rc.cpp:353
+msgid "Balance:"
+msgstr "Остаток: "
+
+#: dialogs/rc.cpp:355
+msgid "Last check number:"
+msgstr "Последний номер чека:"
+
+#: dialogs/rc.cpp:356
+msgid "Notes:"
+msgstr "Примечания:"
+
+#: dialogs/rc.cpp:357
+msgid "No auto-VAT-assignment"
+msgstr "Не облагается НДС"
+
+#: dialogs/rc.cpp:358 dialogs/rc.cpp:441
+msgid "Price entry"
+msgstr "Код курса"
+
+#: dialogs/rc.cpp:359
+msgid "Preferred Account"
+msgstr "Предпочитаемый счёт"
+
+#: dialogs/rc.cpp:363
+msgid "Number:"
+msgstr "Номер:"
+
+#: dialogs/rc.cpp:364 dialogs/rc.cpp:395
+msgid "BIC"
+msgstr "BIC"
+
+#: dialogs/rc.cpp:367
+msgid "Hierarchy"
+msgstr "Иерархия"
+
+#: dialogs/rc.cpp:368
+msgid "Subaccount"
+msgstr "Субсчёт"
+
+#: dialogs/rc.cpp:369
+msgid "Limits"
+msgstr "Ограничения"
+
+#: dialogs/rc.cpp:370
+msgid ""
+"This page allows to setup certain limits. KMyMoney will warn you when the "
+"account balance reaches a limit."
+msgstr ""
+"На данной странице можно настроить ограничения. KMyMoney будет выдавать "
+"предупреждение при достижении остатком на счету установленного ограничения."
+
+#: dialogs/rc.cpp:372
+msgid "Absolute limit"
+msgstr "Абсолютное ограничение"
+
+#: dialogs/rc.cpp:373
+msgid "Maximum credit limit"
+msgstr "Максимальное ограничение кредита"
+
+#: dialogs/rc.cpp:374
+msgid "Minimum balance"
+msgstr "Минимальный остаток"
+
+#: dialogs/rc.cpp:375
+msgid "Early warning"
+msgstr "Раннее предупреждение"
+
+#: dialogs/rc.cpp:377
+msgid "VAT details"
+msgstr "Налог на добавленную стоимость"
+
+#: dialogs/rc.cpp:378
+msgid "VAT category"
+msgstr "Статья списания НДС"
+
+#: dialogs/rc.cpp:379
+msgid "VAT percentage"
+msgstr "Процент НДС"
+
+#: dialogs/rc.cpp:380
+msgid "Enable auto VAT assignment"
+msgstr "Автоматически облагается НДС"
+
+#: dialogs/rc.cpp:381
+msgid "Amount entered"
+msgstr "Включение НДС в сумму"
+
+#: dialogs/rc.cpp:382
+msgid "Gross amount"
+msgstr "Сумма с НДС"
+
+#: dialogs/rc.cpp:383
+msgid "Net amount"
+msgstr "Сумма без НДС"
+
+#: dialogs/rc.cpp:384
+msgid "Include on Tax Reports"
+msgstr "Включать в налоговые отчёты"
+
+#: dialogs/rc.cpp:387
+msgid "New Institution Dialog"
+msgstr "Добавление учреждения"
+
+#: dialogs/rc.cpp:388
+msgid "Institution Details"
+msgstr "Данные об учреждении"
+
+#: dialogs/rc.cpp:390
+msgid "City:"
+msgstr "Город:"
+
+#: dialogs/rc.cpp:394
+msgid "Routing Number:"
+msgstr "Внутренний номер:"
+
+#: dialogs/rc.cpp:398
+msgid "New Budget"
+msgstr "Создать бюджет"
+
+#: dialogs/rc.cpp:403
+msgid "New Equity"
+msgstr "Финансовый инструмент"
+
+#: dialogs/rc.cpp:406 dialogs/rc.cpp:407
+msgid "Trading Symbol of the stock or mutual fund, not required."
+msgstr "Необязательный биржевой код акции или другого финансового инструмента."
+
+#: dialogs/rc.cpp:414 dialogs/rc.cpp:415
+msgid "Name of the company, or mutual fund."
+msgstr "Название эмитента."
+
+#: dialogs/rc.cpp:418
+msgid "New File Dialog"
+msgstr "Создание файла"
+
+#: dialogs/rc.cpp:419
+msgid ""
+"Use this dialog to enter personal information about yourself.\n"
+"\n"
+"All information is optional and is provided to personalize\n"
+"your KMyMoney file."
+msgstr ""
+"Введите здесь информацию о себе.\n"
+"\n"
+"Все поля необязательны и предназначены для персонализации этого файла "
+"KMyMoney."
+
+#: dialogs/rc.cpp:430
+msgid "New Investment wizard"
+msgstr "Мастер добавления инвестиций"
+
+#: dialogs/rc.cpp:431
+msgid "Investment Type"
+msgstr "Тип инвестиции"
+
+#: dialogs/rc.cpp:432
+msgid "This wizard allows you to create a new investment."
+msgstr "Этот мастер позволит вам добавить информацию об инвестиции."
+
+#: dialogs/rc.cpp:433
+msgid ""
+"The first step in this process requires to select the type of investment. "
+"The following steps collect more details about the investment from you."
+msgstr ""
+"Первым делом вам нужно выбрать тип инвестиции. В дальнейшем будет собрана "
+"информация об инвестиции."
+
+#: dialogs/rc.cpp:434
+msgid "Type of investment"
+msgstr "Тип инвестиции"
+
+#: dialogs/rc.cpp:438
+msgid "Investment details"
+msgstr "Сведения об инвестиции"
+
+#: dialogs/rc.cpp:439
+msgid ""
+"Enter the details below and click <b>Next</b> to continue entering the "
+"online update details."
+msgstr ""
+"Заполните поля и нажмите <b>Далее</b> для ввода информации об источнике "
+"онлайнового обновления."
+
+#: dialogs/rc.cpp:442 dialogs/rc.cpp:728
+msgid "Fraction"
+msgstr "Точность"
+
+#: dialogs/rc.cpp:443
+msgid "Trading Currency"
+msgstr "Валюта"
+
+#: dialogs/rc.cpp:444
+msgid "Full name"
+msgstr "Полное название"
+
+#: dialogs/rc.cpp:445
+msgid "AMEX"
+msgstr "AMEX"
+
+#: dialogs/rc.cpp:446
+msgid "EUREX"
+msgstr "EUREX"
+
+#: dialogs/rc.cpp:447
+msgid "FUND"
+msgstr "FUND"
+
+#: dialogs/rc.cpp:448
+msgid "NASDAQ"
+msgstr "NASDAQ"
+
+#: dialogs/rc.cpp:449
+msgid "NYSE"
+msgstr "NYSE"
+
+#: dialogs/rc.cpp:450
+msgid "XETRA"
+msgstr "XETRA"
+
+#: dialogs/rc.cpp:451
+msgid "Trading symbol"
+msgstr "Код (тикер)"
+
+#: dialogs/rc.cpp:452
+msgid "Identification"
+msgstr "Идентификатор"
+
+#: dialogs/rc.cpp:453
+msgid "Enter the ticker symbol (e.g. RHAT)."
+msgstr "Введите код (тикер). Например: RHAT."
+
+#: dialogs/rc.cpp:454
+msgid "Enter the CUSIP/ISIN/WKN identification number here"
+msgstr "Введите идентификационный номер CUSIP/ISIN/WKN"
+
+#: dialogs/rc.cpp:455
+msgid "Trading market"
+msgstr "Рынок"
+
+#: dialogs/rc.cpp:456
+msgid "Online Update"
+msgstr "Онлайновое обновление"
+
+#: dialogs/rc.cpp:457
+msgid ""
+"Select an online source and click <b>Finish</b> to store the investment "
+"data. If you don't want to use online updates, just leave the data as is."
+msgstr ""
+"Выберите источник обновлений курса и нажмите на кнопку <b>Готово</b> для "
+"сохранения введённых данных. Если вы не хотите использовать онлайновое "
+"обновление, оставьте значения по умолчанию."
+
+#: dialogs/rc.cpp:458
+msgid "Use Finance::Quote"
+msgstr "Используйте модуль Finance::Quote"
+
+#: dialogs/rc.cpp:460
+msgid "Factor"
+msgstr "Точность"
+
+#: dialogs/rc.cpp:461
+msgid "New Loan Wizard"
+msgstr "Мастер добавления кредита"
+
+#: dialogs/rc.cpp:462
+msgid "New Loan Account Wizard"
+msgstr "Мастер добавления кредита"
+
+#: dialogs/rc.cpp:463
+msgid ""
+"\n"
+"Welcome to the New Loan Account Wizard which will guide you through the "
+"creation of a new loan e.g. for your home, your car or any other loan that "
+"you pay or gain interest for.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Добро пожаловать в мастер добавления кредита.\n"
+"\n"
+"Убедитесь, что вас есть все необходимые документы. Вам потребуется ввести "
+"данные из кредитного договора."
+
+#: dialogs/rc.cpp:464
+msgid "Edit Loan Account Wizard"
+msgstr "Мастер изменения кредита"
+
+#: dialogs/rc.cpp:465
+msgid ""
+"\n"
+"Welcome to the Edit Loan Account Wizard. Please use this wizard to modify "
+"information about your loan account.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"Добро пожаловать в мастер изменения кредита.\n"
+"\n"
+"Убедитесь, что вас есть все необходимые документы. Вам потребуется ввести "
+"данные из кредитного договора."
+
+#: dialogs/rc.cpp:467
+msgid ""
+"\n"
+"In the first step, KMyMoney will ask you some general information about the "
+"loan account to be created."
+msgstr ""
+"\n"
+"Сначала будет предложено ввести общую информацию о кредите."
+
+#: dialogs/rc.cpp:468 dialogs/rc.cpp:522 dialogs/rc.cpp:610
+msgid "1. General Information"
+msgstr "1. Общая информация"
+
+#: dialogs/rc.cpp:469
+msgid ""
+"\n"
+"2. Calculate Loan\n"
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"2. Расчёт процентов\n"
+"\n"
+"3. Выплаты"
+
+#: dialogs/rc.cpp:470
+msgid "Edit selection"
+msgstr "Изменить выбранное"
+
+#: dialogs/rc.cpp:471
+msgid ""
+"\n"
+"Please select, which data of the loan you want to modify."
+msgstr ""
+"\n"
+"Выберите, что вы хотите изменить."
+
+#: dialogs/rc.cpp:472
+msgid "Modify the interest rate"
+msgstr "Изменить процентную ставку"
+
+#: dialogs/rc.cpp:473
+msgid "Modify additional fees"
+msgstr "Изменить дополнительные сборы"
+
+#: dialogs/rc.cpp:474
+msgid "Modify other loan information"
+msgstr "Изменить другую информацию по кредиту"
+
+#: dialogs/rc.cpp:475
+msgid "Effective date"
+msgstr "Срок вступления в силу"
+
+#: dialogs/rc.cpp:478
+msgid "When should the changes become active?"
+msgstr "Когда ввести изменения в силу?"
+
+#: dialogs/rc.cpp:479
+msgid "Lending or borrowing money"
+msgstr "Определение стороны по кредиту"
+
+#: dialogs/rc.cpp:480
+msgid ""
+"\n"
+"Do you borrow or lend money?"
+msgstr ""
+"\n"
+"Вы берёте кредит или даёте в долг?"
+
+#: dialogs/rc.cpp:483
+msgid "Name of the loan"
+msgstr "Название кредита"
+
+#: dialogs/rc.cpp:484
+msgid ""
+"\n"
+"How do you want to call this loan? Examples for names are 'car loan', "
+"'school loan', 'home owner loan'."
+msgstr ""
+"\n"
+"Как вы называете этот кредит? Например «Кредит на покупку машины», «Кредит на "
+"образование», «Кредит на покупку телевизора»."
+
+#: dialogs/rc.cpp:486
+msgid "TextLabel6"
+msgstr "TextLabel6"
+
+#: dialogs/rc.cpp:487
+msgid "TextLabel7"
+msgstr "TextLabel7"
+
+#: dialogs/rc.cpp:488
+msgid "Type of interest"
+msgstr "Тип ставки"
+
+#: dialogs/rc.cpp:489
+msgid ""
+"\n"
+"Is the interest of this loan fixed over a period of time or is it adapted "
+"from time to time? If the interest rate changes during the amortization "
+"phase of the loan you should choose the option 'variable interest rate'."
+msgstr ""
+"\n"
+"Процентные выплаты фиксированы на весь период или изменяются? Если "
+"процентная ставка изменяется в процессе выплаты основной суммы кредита, "
+"выберите «Переменная процентная ставка»."
+
+#: dialogs/rc.cpp:490
+msgid "Fixed interest rate"
+msgstr "Фиксированная процентная ставка"
+
+#: dialogs/rc.cpp:491
+msgid "Variable interest rate"
+msgstr "Переменная процентная ставка"
+
+#: dialogs/rc.cpp:492
+msgid "Payments?"
+msgstr "Выплаты"
+
+#: dialogs/rc.cpp:493
+msgid ""
+"\n"
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?"
+msgstr ""
+"\n"
+"Производились ли уже какие-либо выплаты по этому кредиту?"
+
+#: dialogs/rc.cpp:494
+msgid "No, no payments were made yet."
+msgstr "Нет, выплаты ещё не совершались."
+
+#: dialogs/rc.cpp:495
+msgid "Yes, payments were made."
+msgstr "Да, выплаты совершались."
+
+#: dialogs/rc.cpp:496
+msgid ""
+"Note: Payments made to obtain the loan (e.g. Dissagio) are not considered as "
+"payments in this context."
+msgstr ""
+"Примечание: комиссия банка за выдачу кредита не рассматривается как выплаты."
+
+#: dialogs/rc.cpp:497
+msgid "Recording payments?"
+msgstr "Занесение выплат"
+
+#: dialogs/rc.cpp:498
+msgid ""
+"\n"
+"Do you want to record all payments of this loan with KMyMoney?"
+msgstr ""
+"\n"
+"Вы желаете занести все выплаты по этому кредиту?"
+
+#: dialogs/rc.cpp:499
+msgid "Yes, record all payments."
+msgstr "Да"
+
+#: dialogs/rc.cpp:500
+msgid "No, only record payments since the beginning of this year."
+msgstr "Нет, занести только с начала этого года"
+
+#: dialogs/rc.cpp:501
+msgid "Date of next interest change"
+msgstr "Дата следующего изменения процентной ставки"
+
+#: dialogs/rc.cpp:502
+msgid ""
+"\n"
+"Select the date when the interest rate for this loan will be modified and "
+"the frequency of the future changes."
+msgstr ""
+"\n"
+"Когда процентная ставка будет изменена, и как часто это будет происходить."
+
+#: dialogs/rc.cpp:503
+msgid "Next interest change on"
+msgstr "Следующее изменение процентной ставки"
+
+#: dialogs/rc.cpp:504
+msgid "Time until next change"
+msgstr "Время до следующего изменения"
+
+#: dialogs/rc.cpp:506 dialogs/rc.cpp:571
+msgid ""
+"\n"
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"\n"
+"Введите сумму выплаты или оставьте это поле пустым для автоматического "
+"расчёта."
+
+#: dialogs/rc.cpp:507
+msgid "Current amount"
+msgstr "Текущая сумма"
+
+#: dialogs/rc.cpp:510
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the amount for principal and interest then enter "
+"it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"Будет вычислена новая процентная ставка или основная сумма долга с "
+"процентами. Если вам известна основная сумма долга с процентами, укажите её "
+"здесь.\n"
+"\n"
+"Если хотите, чтобы эта сумма была вычислена автоматически, оставьте поле "
+"пустым."
+
+#: dialogs/rc.cpp:512 dialogs/rc.cpp:545
+msgid ""
+"\n"
+"Please enter the interest rate or leave the field empty to calculate it."
+msgstr ""
+"\n"
+"Введите процентную ставку или оставьте это поле пустым для автоматического "
+"расчёта."
+
+#: dialogs/rc.cpp:514
+msgid "Current rate"
+msgstr "Текущая ставка"
+
+#: dialogs/rc.cpp:516
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the interest rate then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"Будет вычислена новая процентная ставка или основная сумма долга с "
+"процентами. Если вам известна новая процентная ставка, укажите её здесь.\n"
+"\n"
+"Если хотите, чтобы новая процентная ставка была вычислена автоматически, "
+"оставьте поле пустым."
+
+#: dialogs/rc.cpp:517
+msgid "Date of first payment"
+msgstr "Дата первой выплаты"
+
+#: dialogs/rc.cpp:520
+msgid "Calculate Loan"
+msgstr "Расчёт процентов"
+
+#: dialogs/rc.cpp:521
+msgid ""
+"\n"
+"You have successfully entered the general information about your loan. Next, "
+"KMyMoney needs some information about the calculation of the loan."
+msgstr ""
+"\n"
+"Вы указали общую информацию о кредите. Далее будет предложено ввести "
+"информацию по расчёту процентов."
+
+#: dialogs/rc.cpp:523 dialogs/rc.cpp:611
+msgid ""
+"\n"
+"2. Calculate Loan"
+msgstr ""
+"\n"
+"2. Расчёт процентов"
+
+#: dialogs/rc.cpp:524 dialogs/rc.cpp:612
+msgid ""
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"3. Выплаты"
+
+#: dialogs/rc.cpp:526
+msgid ""
+"\n"
+"How often will there be payments made to this loan?"
+msgstr ""
+"\n"
+"Как часто будут производиться выплаты по кредиту?"
+
+#: dialogs/rc.cpp:527
+msgid "Interest calculation"
+msgstr "Расчёт процентов"
+
+#: dialogs/rc.cpp:528
+msgid ""
+"\n"
+"When does the actual interest rate get calculated?"
+msgstr ""
+"\n"
+"Когда подсчитываются проценты?"
+
+#: dialogs/rc.cpp:529
+msgid "When the payment is received."
+msgstr "По получении выплаты"
+
+#: dialogs/rc.cpp:530
+msgid "When the payment is due."
+msgstr "По дате выплаты"
+
+#: dialogs/rc.cpp:534 dialogs/rc.cpp:547 dialogs/rc.cpp:560 dialogs/rc.cpp:573
+#: dialogs/rc.cpp:586 dialogs/rc.cpp:598 dialogs/rc.cpp:679
+msgid "Loan amount:"
+msgstr "Сумма кредита:"
+
+#: dialogs/rc.cpp:535 dialogs/rc.cpp:548 dialogs/rc.cpp:561 dialogs/rc.cpp:574
+#: dialogs/rc.cpp:587 dialogs/rc.cpp:599 dialogs/rc.cpp:633 dialogs/rc.cpp:671
+msgid "Interest rate:"
+msgstr "Процентная ставка:"
+
+#: dialogs/rc.cpp:536 dialogs/rc.cpp:549 dialogs/rc.cpp:562 dialogs/rc.cpp:575
+#: dialogs/rc.cpp:588 dialogs/rc.cpp:600 dialogs/rc.cpp:669
+msgid "Term:"
+msgstr "Срок:"
+
+#: dialogs/rc.cpp:537 dialogs/rc.cpp:550 dialogs/rc.cpp:563 dialogs/rc.cpp:576
+#: dialogs/rc.cpp:589 dialogs/rc.cpp:601 dialogs/rc.cpp:622 dialogs/rc.cpp:630
+#: dialogs/rc.cpp:677
+msgid "Principal + Interest:"
+msgstr "Платёж:"
+
+#: dialogs/rc.cpp:538 dialogs/rc.cpp:551 dialogs/rc.cpp:564 dialogs/rc.cpp:577
+#: dialogs/rc.cpp:583 dialogs/rc.cpp:585 dialogs/rc.cpp:590 dialogs/rc.cpp:602
+msgid "Final amortization payment"
+msgstr "Последняя выплата"
+
+#: dialogs/rc.cpp:557
+msgid "Duration"
+msgstr "Длительность"
+
+#: dialogs/rc.cpp:558
+msgid ""
+"\n"
+"Please enter the term of this loan or leave the field empty to calculate it. "
+"The term is the time that is required to fully repay the loan. This time "
+"might be different from the time your loan contract is signed for."
+msgstr ""
+"\n"
+"Введите срок кредита любо оставьте это поле пустым для его расчёта. Срок - "
+"это период, в течение которого нужно полностью погасить кредит. Он может не "
+"совпадать с датой заключения кредитного договора."
+
+#: dialogs/rc.cpp:584
+msgid ""
+"\n"
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"\n"
+"Введите сумму последней выплаты или оставьте это поле пустым для "
+"автоматического расчёта."
+
+#: dialogs/rc.cpp:596
+msgid "Calculation Overview"
+msgstr "Расчёт"
+
+#: dialogs/rc.cpp:597
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown in the overview below. You can "
+"accept these values by selecting \"Next\" or change them by choosing \"Back"
+"\" to return to the input field for the information you want to change."
+msgstr ""
+"\n"
+"Проценты по кредиту рассчитаны. Если все данные указаны верно, нажмите "
+"«Далее» для перехода к следующему шагу. Чтобы изменить введённые данные "
+"нажмите «Назад»."
+
+#: dialogs/rc.cpp:609
+msgid ""
+"\n"
+"In the following steps, KMyMoney supports you in setting up categories and "
+"schedules for your loan payments."
+msgstr ""
+"\n"
+"Далее вам будет предложено настроить статьи и график платежей по кредиту."
+
+#: dialogs/rc.cpp:614
+msgid ""
+"\n"
+"Please select the category you want to assign the interest payments to or "
+"create a new category."
+msgstr ""
+"\n"
+"Выберите статью для выплат или создайте новую."
+
+#: dialogs/rc.cpp:615
+msgid "Additional Fees"
+msgstr "Дополнительные сборы"
+
+#: dialogs/rc.cpp:616
+msgid ""
+"\n"
+"If your regular payment contains any additional fees, click on the button "
+"\"Additional fees\" to enter them."
+msgstr ""
+"\n"
+"Если ваши регулярные выплаты предусматривают также дополнительные сборы, "
+"нажмите на кнопу «Дополнительные сборы» и введите их."
+
+#: dialogs/rc.cpp:617
+msgid "= periodical payment:"
+msgstr "= периодические платежи:"
+
+#: dialogs/rc.cpp:623
+msgid ""
+"If no additional fees are included in your periodical payment or you have "
+"entered all such fees, then click on \"Next\"."
+msgstr ""
+"Если периодические платежи не включают в себя дополнительные сборы или вы "
+"уже указали сумму этих сборов, нажмите кнопку «Далее»."
+
+#: dialogs/rc.cpp:625
+msgid ""
+"KMyMoney will create a schedule for this payment and reminds you whenever a "
+"payment must be made.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"Сейчас будет создан график платежей для уведомления вас о наступлении срока "
+"платежей по кредиту.<p>\n"
+"Если вы выбрали ввод всех платежей, это поле должно быть заполнено. Если вы "
+"выбрали ввод платежей только этого года, укажите в поле <b>Первый платёж</b> "
+"дату первого платежа в этом году."
+
+#: dialogs/rc.cpp:626
+msgid "First payment due on:"
+msgstr "Первый платёж:"
+
+#: dialogs/rc.cpp:627
+msgid "Make payment from/to:"
+msgstr "Оплатить с/на:"
+
+#: dialogs/rc.cpp:629
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown below. If you want to accept these "
+"values use the \"Finish\" button to update your account, otherwise use the "
+"\"Back\" button to modify your settings."
+msgstr ""
+"\n"
+"Кредит рассчитан. Если вы согласны с указанными значениями, нажмите кнопку "
+"«Готово», иначе — кнопку «Назад» и измените параметры."
+
+#: dialogs/rc.cpp:631
+msgid "Additional fees:"
+msgstr "Дополнительные сборы:"
+
+#: dialogs/rc.cpp:632
+msgid "Total payment:"
+msgstr "Сумма платежа:"
+
+#: dialogs/rc.cpp:634
+msgid "Valid from:"
+msgstr "Действительно с:"
+
+#: dialogs/rc.cpp:635
+msgid "Affected payments:"
+msgstr "Влияет на платежи:"
+
+#: dialogs/rc.cpp:645
+msgid "Press this to create a new asset account"
+msgstr "Создать новый счёт для учёта актива"
+
+#: dialogs/rc.cpp:648
+msgid ""
+"\n"
+"This page summarizes the data you entered. If you need to modify anything, "
+"please use the \"Back\" button to go to respective page. Otherwise use the "
+"\"Finish\" button to create the account."
+msgstr ""
+"\n"
+"Эта страница подытоживает введённые вами данные. Если вы захотите что-нибудь "
+"изменить, нажмите кнопку «Назад» чтобы перейти к соответствующей странице. "
+"Если всё указано верно, нажмите кнопку «Готово»."
+
+#: dialogs/rc.cpp:650
+msgid "Payee:"
+msgstr "Получатель:"
+
+#: dialogs/rc.cpp:653
+msgid "First payment:"
+msgstr "Первый платёж:"
+
+#: dialogs/rc.cpp:655
+msgid "Amount is:"
+msgstr "Сумма:"
+
+#: dialogs/rc.cpp:656
+msgid "Loan calculation"
+msgstr "Расчёт кредита"
+
+#: dialogs/rc.cpp:660
+msgid "Periodic Payment:"
+msgstr "Сумма платежа:"
+
+#: dialogs/rc.cpp:661
+msgid "Additional Fees:"
+msgstr "Дополнительные сборы:"
+
+#: dialogs/rc.cpp:662
+msgid "Interest category:"
+msgstr "Статья процентов:"
+
+#: dialogs/rc.cpp:663
+msgid "Payment from:"
+msgstr "Списание с:"
+
+#: dialogs/rc.cpp:666
+msgid "Next due date:"
+msgstr "Следующая выплата:"
+
+#: dialogs/rc.cpp:673
+msgid "Final Payment:"
+msgstr "Последняя выплата:"
+
+#: dialogs/rc.cpp:675
+msgid "Interest is due:"
+msgstr "Выплата процентов:"
+
+#: dialogs/rc.cpp:680
+msgid "Payment frequency:"
+msgstr "Периодичность выплат:"
+
+#: dialogs/rc.cpp:682
+msgid "Online Quote Configuration"
+msgstr "Настройка онлайнового обновления курсов"
+
+#: dialogs/rc.cpp:687
+msgid "Perl Location:"
+msgstr "Расположение Perl:"
+
+#: dialogs/rc.cpp:688
+msgid "Script:"
+msgstr "Скрипт:"
+
+#: dialogs/rc.cpp:690
+msgid "Reassign payees"
+msgstr "Переназначение получателей"
+
+#: dialogs/rc.cpp:691
+msgid ""
+"The transactions associated with the selected payees need to be re-assigned "
+"to a different payee before the selected payees can be deleted. Please "
+"select a payee from the list below."
+msgstr ""
+"В операциях, в которых был указан удаляемый получатель платежей, необходимо "
+"указать другого получателя. Выберите получателя из списка."
+
+#: dialogs/rc.cpp:692
+msgid "Available payees:"
+msgstr "Получатели:"
+
+#: dialogs/rc.cpp:693
+msgid "Assign deleted names to the above selected payee's matching list"
+msgstr "Переназначить получателя платежей"
+
+#: dialogs/rc.cpp:696
+msgid "PluginDlg"
+msgstr "Модули"
+
+#: dialogs/rc.cpp:697
+msgid "PlugIn"
+msgstr "Модуль"
+
+#: dialogs/rc.cpp:698 widgets/transaction.cpp:1071
+#: widgets/transaction.cpp:1658
+msgid "Status"
+msgstr "Состояние"
+
+#: dialogs/rc.cpp:699
+msgid "Feature"
+msgstr "Дополнительно"
+
+#: dialogs/rc.cpp:703
+msgid "Reconciliation Dialog"
+msgstr "Сверка"
+
+#: dialogs/rc.cpp:704
+msgid ""
+"This dialog will assist in helping you to balance your account.\n"
+"\n"
+"Click on an appropriate transaction within one of the two list views to mark "
+"it as reconciled. To create a transaction or edit\n"
+"a transaction you can return to the register by clicking on the Edit "
+"Transactions button.\n"
+"\n"
+"Your account is balanced when the Difference is Zero. Click on the Finish "
+"button to save the reconciled transactions."
+msgstr ""
+"Этот диалог поможет вам свести дебет с кредитом вашего счёта.\n"
+"Нажмите на операции, которую нужно сверить. Для добавления или изменения "
+"операции вы можете вернуться в список операций, нажав на кнопку "
+"«Редактировать операции».\n"
+"\n"
+"Ваш счёт сведён, если разница равна нулю. Нажмите на кнопку «Готово» для "
+"сохранения корректировочных операций."
+
+#: dialogs/rc.cpp:705
+msgid "Withdrawals"
+msgstr "Списание"
+
+#: dialogs/rc.cpp:707 dialogs/rc.cpp:708 dialogs/rc.cpp:822
+msgid "$"
+msgstr "$"
+
+#: dialogs/rc.cpp:710
+msgid "Previous Balance:"
+msgstr "Начальный остаток:"
+
+#: dialogs/rc.cpp:711 dialogs/rc.cpp:713 dialogs/rc.cpp:715 dialogs/rc.cpp:717
+#: dialogs/rc.cpp:820
+msgid "0"
+msgstr "0"
+
+#: dialogs/rc.cpp:712
+msgid "Ending Balance:"
+msgstr "Конечный баланс:"
+
+#: dialogs/rc.cpp:714
+msgid "Cleared Balance:"
+msgstr "Проверенный остаток:"
+
+#: dialogs/rc.cpp:716
+msgid "Difference:"
+msgstr "Разница:"
+
+#: dialogs/rc.cpp:718
+msgid "Edit Transactions..."
+msgstr "&Редактировать операции..."
+
+#: dialogs/rc.cpp:721
+msgid "Security List Editor"
+msgstr "Список финансовых инструментов"
+
+#: dialogs/rc.cpp:726
+msgid "Market"
+msgstr "Биржевой рынок"
+
+#: dialogs/rc.cpp:729
+msgid "Cash Fraction"
+msgstr "Точность"
+
+#: dialogs/rc.cpp:730
+msgid "Add..."
+msgstr "&Добавить..."
+
+#: dialogs/rc.cpp:732 widgets/kmymoneypriceview.cpp:157
+msgid "Delete..."
+msgstr "&Удалить..."
+
+#: dialogs/rc.cpp:733
+msgid "Show national currencies"
+msgstr "Показывать национальные валюты"
+
+#: dialogs/rc.cpp:735
+msgid "KMyMoney - Select Database"
+msgstr "Выбор базы данных"
+
+#: dialogs/rc.cpp:736
+msgid "CAUTION!"
+msgstr "Внимание!"
+
+#: dialogs/rc.cpp:737
+msgid ""
+"<font color=\"#ff2727\">This software is still in an experimental stage, and "
+"there are still some known response time problems. Please be patient; we are "
+"working on them.\n"
+"As always, please make sure you have adequate backups of your data.</font>"
+msgstr ""
+"<font color=\"#ff2727\">Это программное обеспечение находится в процессе "
+"тестирования, поэтому возможна потеря данных. Осуществляйте резервное "
+"копирование перед вводом операций.</font>"
+
+#: dialogs/rc.cpp:738
+msgid "Database Type"
+msgstr "Тип базы данных"
+
+#: dialogs/rc.cpp:739
+msgid "Database Name"
+msgstr "Имя базы данных"
+
+#: dialogs/rc.cpp:740
+msgid "Host Name"
+msgstr "Имя узла"
+
+#: dialogs/rc.cpp:741
+msgid "User Name"
+msgstr "Имя пользователя"
+
+#: dialogs/rc.cpp:743
+msgid "Preload &all data"
+msgstr "&Заполнить базу данных"
+
+#: dialogs/rc.cpp:745
+msgid "&Generate SQL"
+msgstr "&Создать сценарий SQL"
+
+#: dialogs/rc.cpp:747
+msgid "Ca&ncel"
+msgstr "О&тмена"
+
+#: dialogs/rc.cpp:762 widgets/rc.cpp:172
+msgid "Sort options"
+msgstr "Доступные поля"
+
+#: dialogs/rc.cpp:763
+msgid "Use default"
+msgstr "Использовать по умолчанию"
+
+#: dialogs/rc.cpp:767
+msgid "Correct splits"
+msgstr "Правильное разделение"
+
+#: dialogs/rc.cpp:769
+msgid "How do you want to proceed?"
+msgstr "Что сделать?"
+
+#: dialogs/rc.cpp:770
+msgid "Continue to edit splits"
+msgstr "&Вернуться к изменению разделов"
+
+#: dialogs/rc.cpp:771
+#, c-format
+msgid "Change total amount of transaction to %1."
+msgstr "&Установить общую сумму операции в %1."
+
+#: dialogs/rc.cpp:772
+msgid "Distribute difference of %1 among all splits."
+msgstr "&Распределить остаток %1 по всем разделам."
+
+#: dialogs/rc.cpp:773
+msgid "Leave %1 unassigned."
+msgstr "&Оставить остаток %1 не распределённым."
+
+#: dialogs/rc.cpp:776
+msgid "Split transaction"
+msgstr "Разделённая операция"
+
+#: dialogs/rc.cpp:777
+msgid "<b>11,00<b>"
+msgstr "<b>11,00<b>"
+
+#: dialogs/rc.cpp:778
+msgid "<b>111,00<b>"
+msgstr "<b>111,00<b>"
+
+#: dialogs/rc.cpp:779
+msgid "Unassigned"
+msgstr "Не распределено"
+
+#: dialogs/rc.cpp:780
+msgid "Sum of splits"
+msgstr "Итого"
+
+#: dialogs/rc.cpp:781
+msgid "100,00"
+msgstr "100,00"
+
+#: dialogs/rc.cpp:782
+msgid "Transaction amount"
+msgstr "Сумма операции"
+
+#: dialogs/rc.cpp:783
+msgid "Merge"
+msgstr "Слияние"
+
+#: dialogs/rc.cpp:784
+msgid "Merges splits with the same category to one split"
+msgstr "Слить разделённые операции по одной статье в одну запись"
+
+#: dialogs/rc.cpp:785
+msgid ""
+"In case you have multiple split entries to the same category and you like to "
+"keep them as a single split, press this button. The amount for identical "
+"categories will be added and stored in a single split for that category."
+msgstr ""
+"Если обнаружено несколько разделённых операций с одинаковой статьёй, при "
+"нажатии на эту кнопку они будут объединены в одну операцию с общей суммой."
+
+#: dialogs/rc.cpp:786
+msgid "Clear &Zero"
+msgstr "Очистить п&устые"
+
+#: dialogs/rc.cpp:787
+msgid "Removes all splits that have a value of zero."
+msgstr "Удалить все разделённые операции с нулевой суммой."
+
+#: dialogs/rc.cpp:791
+msgid "New price entry"
+msgstr "Новый курс"
+
+#: dialogs/rc.cpp:799
+msgid "Void mark"
+msgstr "Метка VOID"
+
+#: dialogs/rc.cpp:800
+msgid "Opening Balance text"
+msgstr "Открытие баланса"
+
+#: dialogs/rc.cpp:801
+msgid "Type field text"
+msgstr "Тип"
+
+#: dialogs/rc.cpp:802
+msgid "Account delimiter"
+msgstr "Разделитель счетов"
+
+#: dialogs/rc.cpp:804
+msgid "Attempt to match similar transactions"
+msgstr "Автоматическое определение связанных операций"
+
+#: dialogs/rc.cpp:806 dialogs/rc.cpp:808
+msgid "The format of the dates in the QIF file."
+msgstr "Формат дат в файле QIF."
+
+#: dialogs/rc.cpp:809 dialogs/rc.cpp:811
+msgid ""
+"If a QIF file contains date entries with years represented with two digits "
+"then either an apostrophe or a slash may be used to delimit the year in the "
+"dates for certain centuries. This enables 1905 to be distinguished from "
+"2005. Specify here which range of years will have year delimited by an "
+"apostrophe (eg. for Quicken this is usually 1900-1949)."
+msgstr ""
+"Если файл QIF содержит даты с годом, заданным двумя цифрами (с апострофом "
+"или косой чертой), то требуется определить, к какому веку относится этот "
+"год. Например, 05 может означать как 1905 год, так и 2005 год. Здесь вы "
+"можете выбрать период, на который приходятся года, заданные двумя знаками "
+"(для Quicken этот период обычно 1900-1949)."
+
+#: dialogs/rc.cpp:810
+msgid "Apostrophe Handling"
+msgstr "Двузначный год"
+
+#: dialogs/rc.cpp:812
+msgid "Amounts"
+msgstr "Суммы"
+
+#: dialogs/rc.cpp:813
+msgid "Field"
+msgstr "Поле"
+
+#: dialogs/rc.cpp:814
+msgid "QIF-Record"
+msgstr "Запись QIF"
+
+#: dialogs/rc.cpp:815 dialogs/rc.cpp:833
+msgid "Decimal Symbol"
+msgstr "Десятичный разделитель"
+
+#: dialogs/rc.cpp:816
+msgid "Thousand Delimiter"
+msgstr "Тысячный разделитель"
+
+#: dialogs/rc.cpp:817
+msgid "SortColumnInvisible"
+msgstr "SortColumnInvisible"
+
+#: dialogs/rc.cpp:819
+msgid "T"
+msgstr "T"
+
+#: dialogs/rc.cpp:821
+msgid "Split-Value"
+msgstr "Разделённое значение"
+
+#: dialogs/rc.cpp:824
+msgid "Commission"
+msgstr "Комиссия"
+
+#: dialogs/rc.cpp:825
+msgid "O"
+msgstr "O"
+
+#: dialogs/rc.cpp:826
+msgid "2"
+msgstr "2"
+
+#: dialogs/rc.cpp:828
+msgid "I"
+msgstr "I"
+
+#: dialogs/rc.cpp:829
+msgid "3"
+msgstr "3"
+
+#: dialogs/rc.cpp:831
+msgid "Q"
+msgstr "Q"
+
+#: dialogs/rc.cpp:832
+msgid "4"
+msgstr "4"
+
+#: dialogs/rc.cpp:834
+msgid "Thousands Separator"
+msgstr "Тысячный разделитель"
+
+#: dialogs/rc.cpp:836
+msgid "Output filter location"
+msgstr "Программа экспорта"
+
+#: dialogs/rc.cpp:837
+msgid "Input filter file type"
+msgstr "Расширение файлов QIF"
+
+#: dialogs/rc.cpp:838
+msgid "*.qif"
+msgstr "*.qif"
+
+#: dialogs/rc.cpp:839
+msgid "Input filter location"
+msgstr "Программа импорта"
+
+#: dialogs/rc.cpp:843
+msgid "Rename"
+msgstr "Переименовать"
+
+#: dialogs/kselecttransactionsdlg.cpp:44
+msgid "Select Transaction"
+msgstr "Выбор операции"
+
+#: dialogs/kselecttransactionsdlg.cpp:45
+msgid ""
+"Select a transaction and press the OK button or use Cancel to select none."
+msgstr ""
+"Выберите операцию и нажмите на кнопку «OK» или нажмите кнопку «Отмена», чтобы "
+"не выбирать операцию."
+
+#: dialogs/knewinvestmentwizard.cpp:62
+msgid "Investment detail wizard"
+msgstr "Мастер инвестиций"
+
+#: dialogs/knewinvestmentwizard.cpp:82
+msgid "Security detail wizard"
+msgstr "Мастер ценных бумаг"
+
+#: dialogs/knewaccountdlg.cpp:121 dialogs/knewinvestmentwizard.cpp:109
+msgid ""
+"_: default price mode\n"
+"<default>"
+msgstr "<по умолчанию>"
+
+#: dialogs/knewaccountdlg.cpp:122 dialogs/knewinvestmentwizard.cpp:110
+msgid "Price per share"
+msgstr "Цена за штуку"
+
+#: dialogs/knewaccountdlg.cpp:123 dialogs/knewinvestmentwizard.cpp:111
+msgid "Total for all shares"
+msgstr "Итого за всё количество"
+
+#: dialogs/knewinvestmentwizard.cpp:129
+msgid "This wizard allows you to modify the selected investment."
+msgstr "Этот мастер позволит вам изменить информацию об инвестиции."
+
+#: dialogs/knewinvestmentwizard.cpp:132
+msgid "This wizard allows you to modify the selected security."
+msgstr "Этот мастер позволит вам изменить информацию о ценной бумаге."
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid ""
+"The selected symbol is already on file. Do you want to reuse the existing "
+"security?"
+msgstr "Выбранный код уже есть в файле. Использовать эту ценную бумагу?"
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid "Security found"
+msgstr "Найдена ценная бумага"
+
+#: dialogs/knewinvestmentwizard.cpp:309
+msgid "Unable to create all objects for the investment"
+msgstr "Невозможно создать все объекты для финансового инструмента"
+
+#: dialogs/keditequityentrydlg.cpp:78
+msgid "Change the price information of the selected entry."
+msgstr "Изменить курс."
+
+#: dialogs/kaccountselectdlg.cpp:64 widgets/kmymoneybriefschedule.cpp:59
+msgid "&Skip"
+msgstr "&Пропустить"
+
+#: dialogs/kaccountselectdlg.cpp:66 widgets/kmymoneybriefschedule.cpp:61
+msgid "Skip this transaction"
+msgstr "Пропустить операцию"
+
+#: dialogs/kaccountselectdlg.cpp:67
+msgid ""
+"Use this to skip importing this transaction and proceed with the next one."
+msgstr "Пропустить эту операцию при импорте и перейти к следующей."
+
+#: dialogs/kaccountselectdlg.cpp:72
+msgid "Create a new account/category"
+msgstr "Создать счёт или статью"
+
+#: dialogs/kaccountselectdlg.cpp:73
+msgid "Use this to add a new account/category to the file"
+msgstr "Создать новый счёт или статью"
+
+#: dialogs/kaccountselectdlg.cpp:77
+msgid "&Abort"
+msgstr "&Отменить"
+
+#: dialogs/kaccountselectdlg.cpp:79
+msgid "Abort the import operation and dismiss all changes"
+msgstr "Прервать операцию импорта и отменить все изменения"
+
+#: dialogs/kaccountselectdlg.cpp:80
+msgid ""
+"Use this to abort the import. Your financial data will be in the state "
+"before you started the QIF import."
+msgstr ""
+"Отменить импорт. Ваши данные будут восстановлены в состояние до начала "
+"импорта."
+
+#: dialogs/knewaccountdlg.cpp:110
+msgid "Is a sub account"
+msgstr "Принадлежит:"
+
+#: dialogs/knewaccountdlg.cpp:184
+msgid "VAT account"
+msgstr "Счёт, облагаемый НДС"
+
+#: dialogs/knewaccountdlg.cpp:474
+msgid ""
+"You have not specified a name.\n"
+"Please fill in this field."
+msgstr ""
+"Вы не указали название.\n"
+"Заполните это поле."
+
+#: dialogs/knewaccountdlg.cpp:482
+msgid "Please select a parent account."
+msgstr "Выберите родительский счёт."
+
+#: dialogs/knewaccountdlg.cpp:489 dialogs/knewaccountdlg.cpp:1029
+msgid "<No Institution>"
+msgstr "<учреждение не указано>"
+
+#: dialogs/knewaccountdlg.cpp:552
+msgid ""
+"An account named <b>%1</b> already exists. You cannot create a second "
+"account with the same name."
+msgstr ""
+"Счёт с названием <b>%1</b> уже существует. Вы не можете создать два счёта с "
+"одинаковыми названиями."
+
+#: dialogs/knewaccountdlg.cpp:567
+msgid ""
+"A category named <b>%1</b> already exists. You cannot create a second "
+"category with the same name."
+msgstr ""
+"Статья с названием <b>%1</b> уже существует. Вы не можете создать две статьи "
+"с одинаковыми названиями."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid ""
+"You have selected to suppress the display of unused categories in the "
+"KMyMoney configuration dialog. The category you just created will therefore "
+"only be shown if it is used. Otherwise, it will be hidden in the accounts/"
+"categories view."
+msgstr ""
+"Вы отменили показ неиспользуемых статей в диалоге настройки KMyMoney. "
+"Созданная статья будет показана в списках только если она будет использована "
+"хотя бы в одной операции."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid "Hidden categories"
+msgstr "Скрытие статей"
+
+#: dialogs/knewaccountdlg.cpp:927 dialogs/knewaccountdlg.cpp:979
+#, c-format
+msgid "Is a sub account of %1"
+msgstr "Принадлежит: %1"
+
+#: dialogs/knewaccountdlg.cpp:1082
+msgid "Cannot add institution"
+msgstr "Невозможно добавить учреждение"
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid ""
+"This dialog does not allow to create new payees. Please pick a payee from "
+"the list."
+msgstr ""
+"Данное окно не позволяет создавать новых получателей. Выберите получателя из "
+"списка."
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid "Payee creation"
+msgstr "Создание нового получателя"
+
+#: dialogs/kimportdlg.cpp:69
+msgid "Use this to start the import operation"
+msgstr "Начать импорт данных"
+
+#: dialogs/kimportdlg.cpp:110
+msgid ""
+"%1|Import files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Файлы для импорта (%1)\n"
+"%2|Все файлы (*.*)"
+
+#: dialogs/kimportdlg.cpp:111
+msgid "Import File..."
+msgstr "Импорт файла..."
+
+#: dialogs/knewloanwizard.cpp:124
+msgid "Create a new category"
+msgstr "Добавить новую статью"
+
+#: dialogs/knewloanwizard.cpp:125
+msgid "Use this to open the new account editor"
+msgstr "Добавить новую статью"
+
+#: dialogs/knewloanwizard.cpp:129
+msgid "&Additional fees..."
+msgstr "&Дополнительные сборы..."
+
+#: dialogs/knewloanwizard.cpp:131
+msgid "Enter additional fees"
+msgstr "Введите дополнительные сборы"
+
+#: dialogs/knewloanwizard.cpp:132
+msgid ""
+"Use this to add any additional fees other than principal and interest "
+"contained in your periodical payments."
+msgstr "Выплаты, отличные от процентов и погашения основной части долга."
+
+#: dialogs/knewloanwizard.cpp:139
+msgid ""
+"Use this to create a new account to which the initial payment should be made"
+msgstr "Создать новый счёт для зачисления суммы кредита"
+
+#: dialogs/knewloanwizard.cpp:208
+msgid "To whom do you make payments?"
+msgstr "Кому вы совершаете выплаты?"
+
+#: dialogs/knewloanwizard.cpp:209
+msgid "Payments to"
+msgstr "Получатель выплат"
+
+#: dialogs/knewloanwizard.cpp:214
+msgid "From whom do you expect payments?"
+msgstr "От кого будут поступать выплаты?"
+
+#: dialogs/knewloanwizard.cpp:215
+msgid "Payments from"
+msgstr "Выплаты от"
+
+#: dialogs/knewloanwizard.cpp:233
+msgid "Please enter the date, the first payment for this loan was/is due."
+msgstr "Введите дату первой выплаты."
+
+#: dialogs/knewloanwizard.cpp:235
+msgid ""
+"Note: Consult the loan contract for details of the first due date. Keep in "
+"mind, that the first due date usually differs from the date the contract was "
+"signed"
+msgstr ""
+"Примечание: дату первой выплаты вы можете найти в кредитном договоре. "
+"Обратите внимание, что эта дата обычно отличается от даты подписания "
+"договора. "
+
+#: dialogs/knewloanwizard.cpp:240
+msgid ""
+"Please enter the original loan amount in the field below or leave it empty "
+"to be calculated."
+msgstr ""
+"Укажите сумму кредита или оставьте это поле пустым чтобы рассчитать сумму "
+"автоматически."
+
+#: dialogs/knewloanwizard.cpp:248
+msgid ""
+"Please enter the date, the first payment for this loan was/is due this year."
+msgstr "Введите дату первой выплаты в этом году."
+
+#: dialogs/knewloanwizard.cpp:250
+msgid ""
+"Note: You can easily figure out the date of the first payment if you consult "
+"the last statement of last year."
+msgstr ""
+"Примечание: дату первой выплаты в этом году вы можете найти в последней "
+"выписке прошлого года."
+
+#: dialogs/knewloanwizard.cpp:254
+msgid ""
+"Please enter the remaining loan amount of last years final statement in the "
+"field below. You should not leave this field empty."
+msgstr ""
+"Введите оставшуюся сумму выплат по кредиту из последней выписки прошлого "
+"года. Вы должны заполнить это поле."
+
+#: dialogs/knewloanwizard.cpp:311 dialogs/knewloanwizard.cpp:326
+#: dialogs/knewloanwizard.cpp:341 dialogs/knewloanwizard.cpp:357
+#: dialogs/knewloanwizard.cpp:373
+msgid "calculate"
+msgstr "расчёт"
+
+#: dialogs/knewloanwizard.cpp:417
+msgid "borrowed"
+msgstr "одолжено"
+
+#: dialogs/knewloanwizard.cpp:419
+msgid "lend"
+msgstr "отдано взаймы"
+
+#: dialogs/knewloanwizard.cpp:423
+msgid "not assigned"
+msgstr "не определено"
+
+#: dialogs/knewloanwizard.cpp:430
+msgid "on reception"
+msgstr "по получению"
+
+#: dialogs/knewloanwizard.cpp:432
+msgid "on due date"
+msgstr "по дате"
+
+#: dialogs/knewloanwizard.cpp:471
+msgid ""
+"The loan wizard is unable to calculate two different values for your loan at "
+"the same time. Please enter a value for the %1 on this page or backup to the "
+"page where the current value to be calculated is defined and fill in a "
+"value."
+msgstr "Введите значение параметров %1 на этом шаге."
+
+#: dialogs/knewloanwizard.cpp:500
+msgid ""
+"You selected, that payments have already been made towards this loan. This "
+"requires you to enter the loan amount exactly as found on your last "
+"statement."
+msgstr ""
+"По этому кредиту были выплаты. Вам необходимо ввести оставшуюся часть выплат "
+"по кредиту которая указана в последней выписке."
+
+#: dialogs/knewloanwizard.cpp:513
+msgid "interest rate"
+msgstr "процентная ставка"
+
+#: dialogs/knewloanwizard.cpp:522
+msgid "term"
+msgstr "срок"
+
+#: dialogs/knewloanwizard.cpp:532
+msgid "principal and interest"
+msgstr "основная сумма долга с процентами"
+
+#: dialogs/knewloanwizard.cpp:743
+#, c-format
+msgid ""
+"The number of payments has been decremented and the final payment has been "
+"modified to %1."
+msgstr "Количество выплат уменьшено и последняя выплата установлена в %1."
+
+#: dialogs/knewloanwizard.cpp:751 dialogs/knewloanwizard.cpp:771
+#, c-format
+msgid "The final payment has been modified to %1."
+msgstr "Последняя выплата установлена в %1."
+
+#: dialogs/knewloanwizard.cpp:802
+msgid "KMyMoney has calculated a final payment of %1 for this loan."
+msgstr "Последняя выплата составляет %1."
+
+#: dialogs/knewloanwizard.cpp:817
+msgid ""
+"You have entered mis-matching information. Please backup to the appropriate "
+"page and update your figures or leave one value empty to let KMyMoney "
+"calculate it for you"
+msgstr "Вы ввели ошибочные данные: оставьте один параметр пустым"
+
+#: dialogs/kfindtransactiondlg.cpp:230
+msgid ""
+"Warning: Filtering by Category will exclude all transfers from the results."
+msgstr ""
+"Внимание! При фильтрации по статье все переводы будут скрыты из операций."
+
+#: dialogs/kfindtransactiondlg.cpp:239
+msgid "(None)"
+msgstr "(нет)"
+
+#: dialogs/kfindtransactiondlg.cpp:241
+msgid "Current selections: "
+msgstr "Текущие условия поиска: "
+
+#: dialogs/kfindtransactiondlg.cpp:716
+msgid "Found %1 matching transactions (D %2 / P %3 = %4)"
+msgstr "Найдено связанных операций: %1 (Д %2 / К %3 = %4)"
+
+#: dialogs/kfindtransactiondlg.cpp:719
+msgid "Found %1 matching transactions"
+msgstr "Найдено связанных операций: %1"
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "The institution name field is empty. Please enter the name."
+msgstr "Пропущено название учреждения. Заполните это поле."
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "Adding New Institution"
+msgstr "Добавление учреждения"
+
+#: dialogs/kcsvprogressdlg.cpp:69
+msgid "C&lose"
+msgstr "&Закрыть"
+
+#: dialogs/kcsvprogressdlg.cpp:247
+msgid " of "
+msgstr " из "
+
+#: widgets/kmymoneypriceview.cpp:126
+msgid "Commodity"
+msgstr "Финансовый инструмент"
+
+#: widgets/kmymoneypriceview.cpp:130
+msgid "Source"
+msgstr "Источник"
+
+#: widgets/kmymoneypriceview.cpp:143
+msgid "Price Options"
+msgstr "Параметры курса"
+
+#: widgets/kmymoneypriceview.cpp:153
+msgid "Online Price Update..."
+msgstr "Обновление курсов..."
+
+#: widgets/kmymoneycombo.cpp:472 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+msgid "From"
+msgstr "Отправитель"
+
+#: widgets/transaction.cpp:668
+msgid "Transaction is missing a category assignment."
+msgstr "В операции не указана статья."
+
+#: widgets/transaction.cpp:671
+msgid "The transaction has a missing assignment of <b>%1</b>."
+msgstr "Пропущена сумма <b>%1</b> в операции."
+
+#: widgets/transaction.cpp:874
+msgid "Sell"
+msgstr "Продажа"
+
+#: widgets/transaction.cpp:876
+msgid "Buy"
+msgstr "Покупка"
+
+#: widgets/kmymoneycombo.cpp:520 widgets/transaction.cpp:879
+#: widgets/transaction.cpp:1447
+msgid "Dividend"
+msgstr "Выплата дивидендов"
+
+#: widgets/kmymoneycombo.cpp:518 widgets/transaction.cpp:881
+#: widgets/transaction.cpp:1453
+msgid "Yield"
+msgstr "Выплата купонного дохода"
+
+#: widgets/transaction.cpp:886 widgets/transaction.cpp:1473
+msgid "Activity"
+msgstr "Операция"
+
+#: widgets/transaction.cpp:887
+msgid "Investment transaction"
+msgstr "Инвестиционная операция"
+
+#: widgets/transaction.cpp:1021 widgets/transaction.cpp:1114
+#: widgets/transaction.cpp:1165
+msgid "*** UNASSIGNED ***"
+msgstr "Не распределено"
+
+#: widgets/kmymoneycombo.cpp:517 widgets/transaction.cpp:1435
+msgid "Add shares"
+msgstr "Зачисление ценных бумаг"
+
+#: widgets/kmymoneycombo.cpp:516 widgets/transaction.cpp:1438
+msgid "Remove shares"
+msgstr "Списание ценных бумаг"
+
+#: widgets/kmymoneycombo.cpp:522 widgets/transaction.cpp:1441
+msgid "Buy shares"
+msgstr "Покупка ценных бумаг"
+
+#: widgets/kmymoneycombo.cpp:521 widgets/transaction.cpp:1444
+msgid "Sell shares"
+msgstr "Продажа ценных бумаг"
+
+#: widgets/transaction.cpp:1450
+msgid "Reinvest Dividend"
+msgstr "Реинвестирование дохода"
+
+#: widgets/kmymoneycombo.cpp:515 widgets/transaction.cpp:1456
+msgid "Split shares"
+msgstr "Разделение ценных бумаг"
+
+#: widgets/transaction.cpp:1515
+msgid "Ratio"
+msgstr "Соотношение"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:241
+msgid "%1 Bills."
+msgstr "Счетов на оплату: %1."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:257
+msgid "%1 Deposits."
+msgstr "Поступлений: %1."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:273
+msgid "%1 Transfers."
+msgstr "Переводов: %1."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:355
+msgid ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+msgstr " "
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:57
+#: widgets/kmymoneyaccounttreeforecast.cpp:84
+msgid "Current"
+msgstr "Сегодня"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:72
+#: widgets/kmymoneyaccounttreeforecast.cpp:93
+msgid "Total variation"
+msgstr "Сумма изменений"
+
+#: widgets/stdtransactionmatched.cpp:130
+msgid ""
+"KMyMoney has matched a downloaded transaction with a manually entered one "
+"(result above)"
+msgstr "Обнаружена связанная операция, введённая вручную"
+
+#: widgets/stdtransactionmatched.cpp:138
+msgid "Bank entry:"
+msgstr "Данные банка:"
+
+#: widgets/stdtransactionmatched.cpp:166
+msgid "Your entry:"
+msgstr "Введённая операция:"
+
+#: widgets/kbudgetvalues.cpp:187
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a monthly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+"Вы указали значения для бюджета, используя другую базу. В месячном бюджете "
+"это будет учтено как <b>%1</b>. Использовать это значение для заполнения "
+"месячного бюджета?"
+
+#: widgets/kbudgetvalues.cpp:187 widgets/kbudgetvalues.cpp:206
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"_: Auto assignment (caption)\n"
+"Auto assignment"
+msgstr "Заполнение бюджета"
+
+#: widgets/kbudgetvalues.cpp:206
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a yearly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+"Вы указали значения для бюджета, используя другую базу. В годовом бюджете "
+"это будет учтено как <b>%1</b>. Использовать это значение для заполнения "
+"месячного бюджета?"
+
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"You have entered budget values using a different base which would result in "
+"an individual monthly budget of <b>%1</b>. Should this value be used to fill "
+"the monthly budgets?"
+msgstr ""
+"Вы указали значения для бюджета, используя другую базу. В индивидуальном "
+"месячном бюджете это будет учтено как <b>%1</b>. Использовать это значение "
+"для заполнения месячного бюджета?"
+
+#: widgets/kmymoneybriefschedule.cpp:62
+msgid "Use this button to skip this transaction"
+msgstr "Пропустить операцию"
+
+#: widgets/kmymoneybriefschedule.cpp:67
+msgid "Record this transaction into the register"
+msgstr "Сохранить операцию в журнале"
+
+#: widgets/kmymoneybriefschedule.cpp:68
+msgid "Use this button to record this transaction"
+msgstr "Сохранить операцию в журнале"
+
+#: widgets/kmymoneybriefschedule.cpp:96
+msgid "%1 of %2"
+msgstr "%1 из %2"
+
+#: widgets/kmymoneybriefschedule.cpp:109
+msgid "Payment on %1 for %2 with %3 transactions remaining occuring %4."
+msgstr "Платёж на дату %1 на сумму %2 с %3 операциями повторяется %4."
+
+#: widgets/kmymoneybriefschedule.cpp:115
+msgid "Payment on %1 for %2 occuring %4."
+msgstr "Платёж на дату %1 на сумму %2 повторяется %4."
+
+#: widgets/kmymoneybriefschedule.cpp:136
+msgid "%1 days overdue (%2 occurences)."
+msgstr "Задержка, дней: %1 (выплат: %2)."
+
+#: widgets/register.cpp:55
+msgid "Post date"
+msgstr "Дата"
+
+#: widgets/register.cpp:56
+msgid "Date entered"
+msgstr "Дата операции"
+
+#: widgets/register.cpp:60
+msgid "Entry order"
+msgstr "Порядок"
+
+#: widgets/register.cpp:63
+msgid "Reconcile state"
+msgstr "Состояние сверки"
+
+#: widgets/register.cpp:440
+msgid ""
+"_: Deposits onto account\n"
+"Deposits"
+msgstr "Зачисления"
+
+#: widgets/register.cpp:442
+msgid ""
+"_: Payments towards credit card\n"
+"Payments"
+msgstr "Платежи"
+
+#: widgets/register.cpp:446
+msgid ""
+"_: Payments made from account\n"
+"Payments"
+msgstr "Платежи"
+
+#: widgets/register.cpp:448
+msgid ""
+"_: Payments made with credit card\n"
+"Charges"
+msgstr "Платежи"
+
+#: widgets/register.cpp:736
+msgid ""
+"_: Payment made from account\n"
+"Payment"
+msgstr "Платёж"
+
+#: widgets/register.cpp:737
+msgid ""
+"_: Deposit into account\n"
+"Deposit"
+msgstr "Зачисление"
+
+#: widgets/register.cpp:813
+msgid ""
+"_: Payment made with credit card\n"
+"Charge"
+msgstr "Платёж"
+
+#: widgets/register.cpp:814
+msgid ""
+"_: Payment towards credit card\n"
+"Payment"
+msgstr "Платёж"
+
+#: widgets/register.cpp:818 widgets/register.cpp:824
+msgid ""
+"_: Decrease of asset/liability value\n"
+"Decrease"
+msgstr "Уменьшение стоимости"
+
+#: widgets/register.cpp:819 widgets/register.cpp:823
+msgid ""
+"_: Increase of asset/liability value\n"
+"Increase"
+msgstr "Увеличение стоимости"
+
+#: widgets/register.cpp:2280
+msgid "Prior transactions possibly filtered"
+msgstr "Операции (возможно отфильтрованные)"
+
+#: widgets/register.cpp:2284
+msgid "Last reconciliation"
+msgstr "Последняя сверка"
+
+#: widgets/register.cpp:2291
+#, c-format
+msgid "Online Statement Balance: %1"
+msgstr "Остаток онлайновой выписки: %1"
+
+#: widgets/register.cpp:2295
+msgid "This year"
+msgstr "Текущий год"
+
+#: widgets/kmymoneycombo.cpp:674 widgets/register.cpp:2296
+msgid "Last month"
+msgstr "Прошлый месяц"
+
+#: widgets/register.cpp:2297
+msgid "This month"
+msgstr "Текущий месяц"
+
+#: widgets/register.cpp:2298
+msgid "Last week"
+msgstr "Прошлая неделя"
+
+#: widgets/register.cpp:2299
+msgid "This week"
+msgstr "Текущая неделя"
+
+#: widgets/register.cpp:2300
+msgid "Yesterday"
+msgstr "Вчера"
+
+#: widgets/kmymoneycombo.cpp:666 widgets/register.cpp:2301
+msgid "Today"
+msgstr "Сегодня"
+
+#: widgets/register.cpp:2302 widgets/register.cpp:2307
+msgid "Future transactions"
+msgstr "Будущие операции"
+
+#: widgets/register.cpp:2303
+msgid "Next week"
+msgstr "Следующая неделя"
+
+#: widgets/kmymoneycalendar.cpp:131 widgets/register.cpp:2304
+msgid "Next month"
+msgstr "Следующий месяц"
+
+#: widgets/kmymoneycombo.cpp:670 widgets/register.cpp:2315
+msgid "Current fiscal year"
+msgstr "Текущий финансовый год"
+
+#: widgets/register.cpp:2316
+msgid "Previous fiscal year"
+msgstr "Предыдущий финансовый год"
+
+#: widgets/register.cpp:2317
+msgid "Next fiscal year"
+msgstr "Следующий финансовый год"
+
+#: widgets/register.cpp:2349
+msgid ""
+"_: Unknown payee\n"
+"Unknown"
+msgstr "Неизвестный"
+
+#: widgets/register.cpp:2368
+msgid ""
+"_: Unknown category\n"
+"Unknown"
+msgstr "Неизвестная"
+
+#: widgets/register.cpp:2387
+msgid ""
+"_: Unknown security\n"
+"Unknown"
+msgstr "Неизвестная"
+
+#: widgets/klistviewsearchline.cpp:249
+msgid "Search Columns"
+msgstr "Поиск по столбцам"
+
+#: widgets/klistviewsearchline.cpp:251
+msgid "All Visible Columns"
+msgstr "По всем видимым"
+
+#: widgets/klistviewsearchline.cpp:266
+msgid ""
+"_: Column number %1\n"
+"Column No. %1"
+msgstr "Столбец %1"
+
+#: widgets/klistviewsearchline.cpp:461 widgets/registersearchline.cpp:286
+msgid "S&earch:"
+msgstr "&Поиск:"
+
+#: widgets/kmymoneyaccountselector.cpp:110
+#: widgets/kmymoneyaccountselector.cpp:371
+msgid "Income categories"
+msgstr "Статьи дохода"
+
+#: widgets/kmymoneyaccountselector.cpp:349
+#: widgets/kmymoneyaccountselector.cpp:350
+msgid "Favorites"
+msgstr "Предпочтительные счета"
+
+#: widgets/kmymoneyaccountselector.cpp:357
+msgid "Asset accounts"
+msgstr "Активы"
+
+#: widgets/kmymoneyaccountselector.cpp:364
+msgid "Liability accounts"
+msgstr "Пассивы"
+
+#: widgets/kmymoneyaccountselector.cpp:381
+msgid "Expense categories"
+msgstr "Статьи расхода"
+
+#: widgets/kmymoneyaccountselector.cpp:391
+msgid "Equity accounts"
+msgstr "Инвестиционные счёта"
+
+#: widgets/kmymoneyaccounttreebase.cpp:120
+msgid "Total Balance"
+msgstr "Общий баланс"
+
+#: widgets/kmymoneyaccounttreebase.cpp:124
+msgid "Total Value"
+msgstr "Итого"
+
+#: widgets/registersearchline.cpp:75
+msgid ""
+"_: label for status combo\n"
+"Stat&us"
+msgstr "С&остояние"
+
+#: widgets/registersearchline.cpp:79
+msgid "Any status"
+msgstr "Все состояния"
+
+#: widgets/registersearchline.cpp:80
+msgid "Imported"
+msgstr "Импортированные"
+
+#: widgets/registersearchline.cpp:81
+msgid "Matched"
+msgstr "Связанные"
+
+#: widgets/registersearchline.cpp:82
+msgid "Erroneous"
+msgstr "Ошибочные"
+
+#: widgets/registersearchline.cpp:83
+msgid "Not marked"
+msgstr "Не отмеченные"
+
+#: widgets/kmymoneyaccounttree.cpp:54
+msgid ""
+"_: Column heading for category in tax report\n"
+"Tax"
+msgstr "Налог"
+
+#: widgets/kmymoneyaccounttree.cpp:58
+msgid ""
+"_: Column heading for VAT category\n"
+"VAT"
+msgstr "НДС"
+
+#: widgets/kmymoneywizard.cpp:101
+msgid "Continue with next page"
+msgstr "Продолжить на следующем шаге"
+
+#: widgets/kmymoneywizard.cpp:103
+msgid "Finish wizard"
+msgstr "&Готово"
+
+#: widgets/kmymoneywizard.cpp:121
+msgid "&Back"
+msgstr "&Назад"
+
+#: widgets/kmymoneywizard.cpp:122
+msgid "&Next"
+msgstr "&Далее"
+
+#: widgets/kmymoneywizard.cpp:123
+msgid "&Finish"
+msgstr "&Готово"
+
+#: widgets/kmymoneywizard.cpp:274
+msgid "Step %1 of %2"
+msgstr "Шаг %1 из %2"
+
+#: widgets/kmymoneydateinput.cpp:235
+msgid ""
+"_: Enter todays date into date input widget\n"
+"T"
+msgstr "С"
+
+#: widgets/transactionform.cpp:302
+msgid "&Deposit"
+msgstr "&Зачисление"
+
+#: widgets/transactionform.cpp:304 widgets/transactionform.cpp:313
+#: widgets/transactionform.cpp:323 widgets/transactionform.cpp:333
+msgid "&Transfer"
+msgstr "&Перевод"
+
+#: widgets/transactionform.cpp:306
+msgid "&Withdrawal"
+msgstr "&Списание"
+
+#: widgets/transactionform.cpp:311
+msgid "&Payment"
+msgstr "П&латёж"
+
+#: widgets/transactionform.cpp:315
+msgid "&Charge"
+msgstr "П&латёж"
+
+#: widgets/transactionform.cpp:321 widgets/transactionform.cpp:335
+msgid "&Decrease"
+msgstr "&Уменьшение"
+
+#: widgets/transactionform.cpp:325 widgets/transactionform.cpp:331
+msgid "&Increase"
+msgstr "У&величение"
+
+#: widgets/kmymoneyscheduledcalendar.cpp:42
+msgid "Select Schedules"
+msgstr "Тип платежей"
+
+#: widgets/kmymoneycalendar.cpp:108
+msgid "Select Style"
+msgstr "Период"
+
+#: widgets/kmymoneycalendar.cpp:128
+msgid "Choose Style"
+msgstr "Период"
+
+#: widgets/kmymoneycalendar.cpp:129
+msgid "Next year"
+msgstr "Следующий год"
+
+#: widgets/kmymoneycalendar.cpp:130
+msgid "Previous year"
+msgstr "Предыдущий год"
+
+#: widgets/kmymoneycalendar.cpp:132
+msgid "Previous month"
+msgstr "Предыдущий месяц"
+
+#: widgets/kmymoneycalendar.cpp:133
+msgid "Select a week"
+msgstr "Неделя"
+
+#: widgets/kmymoneycalendar.cpp:134
+msgid "Select a month"
+msgstr "Месяц"
+
+#: widgets/kmymoneycalendar.cpp:135
+msgid "Select a year"
+msgstr "Год"
+
+#: widgets/kmymoneycalendar.cpp:249
+msgid "Week XX"
+msgstr "Неделя XX"
+
+#: widgets/kmymoneycalendar.cpp:264 widgets/kmymoneycalendar.cpp:300
+#, c-format
+msgid "Week %1"
+msgstr "Неделя %1"
+
+#: widgets/rc.cpp:1
+msgid "Account Types"
+msgstr "Типы счетов"
+
+#: widgets/rc.cpp:3
+msgid "Detailed description"
+msgstr "Описание"
+
+#: widgets/rc.cpp:18
+msgid "Period"
+msgstr "Периодичность"
+
+#: widgets/rc.cpp:21
+msgid "Individual"
+msgstr "единоразово"
+
+#: widgets/rc.cpp:23
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Acces to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>Recovery encryption</i> group is only accessible, if the necessary "
+"key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is "
+"found."
+msgstr ""
+"На этой вкладке вы можете настроить параметры шифрования содержимого файла "
+"<b>KMyMoney</b> посредством <b>GPG</b>.<p>\n"
+"Если <b>GPG</b> недоступна в вашей системе, параметры будут неактивны.<p>\n"
+"Раздел <i>Восстановление зашифрованных данных</i> доступен только если "
+"доступен ключ для <b>kmymoney-recover@users.sourceforge.net</b> с id "
+"0x8AFDDC8E."
+
+#: widgets/rc.cpp:26
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading <i>0x</i>."
+msgstr ""
+"Введите ключ, которым вы хотите шифровать данные. Это может быть как адрес "
+"электронной почты, так и id в шестнадцатеричном виде, начинающийся с <i>0x</"
+"i>."
+
+#: widgets/rc.cpp:27
+msgid "User ID"
+msgstr "Ключ"
+
+#: widgets/rc.cpp:29
+msgid "Recovery encryption"
+msgstr "Восстановление зашифрованных данных"
+
+#: widgets/rc.cpp:30
+msgid "Also encrypt with kmymoney-recover key"
+msgstr "Также шифровать ключом kmymoney-recover"
+
+#: widgets/rc.cpp:32
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out."
+msgstr ""
+"Вы можете дополнительно шифровать данные ключом kmymoney-recover. Только "
+"основные разработчики KMyMoney имеют закрытую часть этого ключа для чтения "
+"зашифрованных данных.<p>\n"
+"\n"
+"Этот механизм предназначен для случаев потери вашего ключа и, как следствие, "
+"невозможности использования данных. При включении этого параметра "
+"разработчики KMyMoney могут расшифровать данные и отправить их вам. Перед "
+"восстановлением данных вам будут заданы несколько вопросов о содержимом "
+"файла."
+
+#: widgets/rc.cpp:51
+msgid "PriceInfo"
+msgstr "PriceInfo"
+
+#: widgets/rc.cpp:52
+msgid "Report Tab"
+msgstr "Отчёт"
+
+#: widgets/rc.cpp:53
+msgid "<p>On this tab, you set the basic properties of this report.</p>"
+msgstr "<p>На этой вкладке устанавливаются основные параметры отчёта.</p>"
+
+#: widgets/rc.cpp:54
+msgid "Report Name"
+msgstr "Название"
+
+#: widgets/rc.cpp:55
+msgid "<p>Choose a name for this report.</p>"
+msgstr "<p>Название отчёта.</p>"
+
+#: widgets/rc.cpp:57
+msgid "<p>Enter a comment to help you remember the details of this report.</p>"
+msgstr "<p>Примечание с краткими сведениями об отчёте.</p>"
+
+#: widgets/rc.cpp:58
+msgid "Convert values to base currency"
+msgstr "Указывать суммы в основной валюте"
+
+#: widgets/rc.cpp:59
+msgid ""
+"_: Convert 'em!!\n"
+"<p>Select this option to convert all values in the report to your base "
+"currency.</p><p>Leave it unchecked if you'd like to see values in their "
+"original currency.</p><p>If currencies are not converted, then subtotals "
+"will not be shown.</p>"
+msgstr ""
+"<p>Указывать все суммы в отчёте в основной валюте.</p><p>Выключите флажок "
+"чтобы показывать суммы в валюте учёта.</p><p>Если для валюты учёта нет "
+"курса, подитоги не показываются.</p>"
+
+#: widgets/rc.cpp:60
+msgid "Mark as a favorite report"
+msgstr "Отметить как избранный отчёт"
+
+#: widgets/rc.cpp:61
+msgid ""
+"<p>Select this option to notate this report as one of your favorites.</"
+"p><p>All your favorite reports are grouped in one place on the report list "
+"for easy access.</p>"
+msgstr ""
+"<p>Включите флажок для занесения отчёта в избранные.</p> <p>Все избранные "
+"отчёты показываются в отдельной группе.</p>"
+
+#: widgets/rc.cpp:62 widgets/rc.cpp:88
+msgid "Rows/Columns Tab"
+msgstr "Структура"
+
+#: widgets/rc.cpp:63 widgets/rc.cpp:89
+msgid ""
+"<p>On this tab, you configure how you'd like the rows and columns to be "
+"selected and organized.</p>"
+msgstr ""
+"<p>На этой вкладке вы можете выбрать какие данные будут расположены по "
+"строкам и столбцам.</p>"
+
+#: widgets/rc.cpp:69 widgets/rc.cpp:81
+msgid ""
+"<p>Choose what kind of accounts to display as the rows of this report.</p>"
+msgstr "<p>Тип счетов или статей, которые будут показаны в строках отчёта.</p>"
+
+#: widgets/rc.cpp:71
+msgid "Columns"
+msgstr "Столбцы"
+
+#: widgets/rc.cpp:75
+msgid "Bi-Monthly"
+msgstr "по два месяца"
+
+#: widgets/rc.cpp:78
+msgid "<p>Choose how large of a time period each column should encompass</p>"
+msgstr "<p>Выберите период для столбца</p>"
+
+#: widgets/rc.cpp:79
+msgid "Income & Expenses"
+msgstr "Статьи дохода и расхода"
+
+#: widgets/rc.cpp:80
+msgid "Assets & Liabilities"
+msgstr "Активные и пассивные счета"
+
+#: widgets/rc.cpp:82
+msgid "Rows"
+msgstr "Строки"
+
+#: widgets/rc.cpp:83
+msgid "Show totals column"
+msgstr "Показывать итоговый столбец"
+
+#: widgets/rc.cpp:84
+msgid "Average days"
+msgstr "Среднее количество дней"
+
+#: widgets/rc.cpp:85
+msgid "Include scheduled transactions"
+msgstr "Включить операции по графикам платежей"
+
+#: widgets/rc.cpp:86
+msgid "Include transfers"
+msgstr "Включить переводы"
+
+#: widgets/rc.cpp:87
+msgid "Include unused accounts/categories"
+msgstr "Включить неиспользованные счета и статьи"
+
+#: widgets/rc.cpp:90
+msgid "Organize by:"
+msgstr "Группировка:"
+
+#: widgets/rc.cpp:92
+msgid "Top Categories"
+msgstr "Статьи верхнего уровня"
+
+#: widgets/rc.cpp:95
+msgid "Top Accounts"
+msgstr "Счета верхнего уровня"
+
+#: widgets/rc.cpp:98
+msgid "<p>Choose how to group the transactions in this report</p>"
+msgstr "<p>Выберите группировку операций в отчёте</p>"
+
+#: widgets/rc.cpp:99
+msgid "Show Columns"
+msgstr "Показывать столбцы"
+
+#: widgets/rc.cpp:100
+msgid ""
+"<p>Choose which columns should be shown in the report.</p><p>The date and "
+"transaction amount are always shown.</p>"
+msgstr ""
+"<p>Выбор столбцов отчёта</p><p>Даты и суммы операций показываются всегда.</p>"
+
+#: widgets/rc.cpp:102
+msgid "<p>Select this option to show the Memo column</p>"
+msgstr "<p>Показывать примечания</p>"
+
+#: widgets/rc.cpp:104
+msgid "<p>Select this option to show the Shares column for investments</p>"
+msgstr "<p>Показывать количество ценных бумаг для инвестиционных операций</p>"
+
+#: widgets/rc.cpp:106
+msgid "<p>Select this option to show the Price column for investments</p>"
+msgstr "<p>Показывать цены ценных бумаг для инвестиционных операций</p>"
+
+#: widgets/rc.cpp:108
+msgid "<p>Select this option to show the Reconciled column</p>"
+msgstr "<p>Показывать информацию о сверке</p>"
+
+#: widgets/rc.cpp:110
+msgid "<p>Select this option to show the Account column</p>"
+msgstr "<p>Показывать счета</p>"
+
+#: widgets/rc.cpp:112
+msgid "<p>Select this option to show the Number column</p>"
+msgstr "<p>Показывать номер</p>"
+
+#: widgets/rc.cpp:114
+msgid "<p>Select this option to show the Payee column</p>"
+msgstr "<p>Показывать получателей</p>"
+
+#: widgets/rc.cpp:116
+msgid "<p>Select this option to show the Category column</p>"
+msgstr "<p>Показывать статьи</p>"
+
+#: widgets/rc.cpp:118
+msgid "<p>Select this option to show the Action column</p>"
+msgstr "<p>Показывать тип операции</p>"
+
+#: widgets/rc.cpp:120
+msgid "<p>Select this option to show the Running balance column</p>"
+msgstr "<p>Показывать столбец с текущим остатком</p>"
+
+#: widgets/rc.cpp:121
+msgid "Include only Loan accounts"
+msgstr "Показывать только счета кредитов"
+
+#: widgets/rc.cpp:122
+msgid "Include only Investment accounts"
+msgstr "Показывать только инвестиционные счета"
+
+#: widgets/rc.cpp:123 widgets/rc.cpp:127
+msgid ""
+"<p>Check this box to include only those categories which have been marked to "
+"\"Include on Tax Reports\"</p>"
+msgstr ""
+"<p>Показывать только статьи, у которых указано «Включать в налоговые отчёты»."
+"</p>"
+
+#: widgets/rc.cpp:124
+msgid "Hide Split Transaction Details"
+msgstr "Скрыть подробности разделённых операций"
+
+#: widgets/rc.cpp:125
+msgid ""
+"Do not display the individual transactions that make up a split transaction"
+msgstr "Не показывать отдельные разделённые операции"
+
+#: widgets/rc.cpp:126
+msgid "Include only Tax categories"
+msgstr "Показывать только налоговые статьи"
+
+#: widgets/rc.cpp:128
+msgid "Chart Tab"
+msgstr "Диаграмма"
+
+#: widgets/rc.cpp:129
+msgid "<p>On this tab, you configure the chart drawn forthis report.</p>"
+msgstr ""
+"<p>На этой вкладке устанавливаются настраивается вывод отчёта в виде "
+"диаграммы.</p>"
+
+#: widgets/rc.cpp:130
+msgid "Chart Type"
+msgstr "Тип диаграммы"
+
+#: widgets/rc.cpp:131
+msgid "<p>Select what form you would like the chart to be drawn as.</p>"
+msgstr "<p>Выберите тип диаграммы, которая должна быть построена.</p>"
+
+#: widgets/rc.cpp:132
+msgid "Line"
+msgstr "Линии"
+
+#: widgets/rc.cpp:133
+msgid "Bar"
+msgstr "Гистограмма"
+
+#: widgets/rc.cpp:134
+msgid "Stacked Bar"
+msgstr "Линейчатая"
+
+#: widgets/rc.cpp:135
+msgid "Pie"
+msgstr "Круговая"
+
+#: widgets/rc.cpp:136
+msgid "Ring"
+msgstr "Кольцевая"
+
+#: widgets/rc.cpp:137
+msgid "Show grid lines"
+msgstr "Показывать сетку"
+
+#: widgets/rc.cpp:138
+msgid ""
+"<p>Select this option to show horizontal and vertical grid lines on the "
+"chart.</p>"
+msgstr ""
+"<p>Показывать в диаграмме горизонтальные и вертикальные линии сетки.</p>"
+
+#: widgets/rc.cpp:139
+msgid "Draw values on chart"
+msgstr "Показывать значения"
+
+#: widgets/rc.cpp:140
+msgid ""
+"<p>Select this option to draw the numeric values for data points next to "
+"their plot location.</p>"
+msgstr "<p>Показывать числовые значения на узловых точках графика.</p>"
+
+#: widgets/rc.cpp:141
+msgid "Show as chart by default"
+msgstr "Показывать по умолчанию в виде диаграммы"
+
+#: widgets/rc.cpp:142
+msgid ""
+"<p>Select this option to cause the report to be shown as a chart when you "
+"first open the report. Otherwise, it will come up as a text report.</p>"
+msgstr ""
+"<p>При включении этого параметра при показе отчёта он будет показан в виде "
+"диаграммы, а не таблицы.</p>"
+
+#: widgets/rc.cpp:143
+msgid "Line width"
+msgstr "Толщина"
+
+#: widgets/rc.cpp:144
+msgid "<p>Select what width should be used to draw the line on the chart</p>"
+msgstr "<p>Толщина линий в диаграмме</p>"
+
+#: widgets/rc.cpp:145
+msgid "ReportControl"
+msgstr "ReportControl"
+
+#: widgets/rc.cpp:149
+msgid "Configure this report"
+msgstr "Настроить отчёт"
+
+#: widgets/rc.cpp:151
+msgid "Create a new report based on this one"
+msgstr "Создать новый отчёт на базе этого"
+
+#: widgets/rc.cpp:153
+msgid "Copy this report to the clipboard"
+msgstr "Скопировать отчёт в буфер обмена"
+
+#: widgets/rc.cpp:155
+msgid "Export this report as an HTML or CSV file"
+msgstr "Экспорт отчёта в HTML или CSV"
+
+#: widgets/rc.cpp:157
+msgid "Permanently delete this report"
+msgstr "Удалить отчёт"
+
+#: widgets/rc.cpp:159
+msgid "Close this window"
+msgstr "Закрыть окно"
+
+#: widgets/rc.cpp:162
+msgid "n of n"
+msgstr "n из n"
+
+#: widgets/rc.cpp:166
+msgid "Account:"
+msgstr "Счёт:"
+
+#: widgets/rc.cpp:168
+msgid "Enter..."
+msgstr "Ввести платёж..."
+
+#: widgets/rc.cpp:171
+msgid "TransactionSortOptionDecl"
+msgstr "TransactionSortOptionDecl"
+
+#: widgets/rc.cpp:173
+msgid "Sort order"
+msgstr "Сортировка"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Sunday\n"
+"Sun"
+msgstr "Вс"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Saturday\n"
+"Sat"
+msgstr "Сб"
+
+#: widgets/kmymoneydatetbl.cpp:171 widgets/kmymoneydatetbl.cpp:178
+msgid "Week %1 for year %2."
+msgstr "Неделя %1 %2 года."
+
+#: widgets/kmymoneycombo.cpp:417
+msgid "ATM"
+msgstr "ATM"
+
+#: widgets/kmymoneycombo.cpp:418
+msgid "Withdrawal"
+msgstr "Списание"
+
+#: widgets/kmymoneycombo.cpp:421
+msgid "Cheque"
+msgstr "Чек"
+
+#: widgets/kmymoneycombo.cpp:469
+msgid ""
+"_: Activity for expense categories\n"
+"Paid"
+msgstr "Оплачено"
+
+#: widgets/kmymoneycombo.cpp:470
+msgid ""
+"_: Activity for income categories\n"
+"Received"
+msgstr "Получено"
+
+#: widgets/kmymoneycombo.cpp:519
+msgid "Reinvest dividend"
+msgstr "Реинвестирование дохода"
+
+#: widgets/kmymoneycombo.cpp:664
+msgid "All dates"
+msgstr "Все даты"
+
+#: widgets/kmymoneycombo.cpp:665
+msgid "As of today"
+msgstr "До сегодня"
+
+#: widgets/kmymoneycombo.cpp:667
+msgid "Current month"
+msgstr "Текущий месяц"
+
+#: widgets/kmymoneycombo.cpp:668
+msgid "Current quarter"
+msgstr "Текущий квартал"
+
+#: widgets/kmymoneycombo.cpp:669
+msgid "Current year"
+msgstr "Текущий год"
+
+#: widgets/kmymoneycombo.cpp:671
+msgid "Month to date"
+msgstr "С начала месяца"
+
+#: widgets/kmymoneycombo.cpp:672
+msgid "Year to date"
+msgstr "С начала года"
+
+#: widgets/kmymoneycombo.cpp:673
+msgid "Year to month"
+msgstr "С начала года до начала месяца"
+
+#: widgets/kmymoneycombo.cpp:675
+msgid "Last year"
+msgstr "Прошлый год"
+
+#: widgets/kmymoneycombo.cpp:676
+msgid "Last fiscal year"
+msgstr "Прошлый финансовый год"
+
+#: widgets/kmymoneycombo.cpp:677
+msgid "Last 7 days"
+msgstr "Последние 7 дней"
+
+#: widgets/kmymoneycombo.cpp:678
+msgid "Last 30 days"
+msgstr "Последние 30 дней"
+
+#: widgets/kmymoneycombo.cpp:679
+msgid "Last 3 months"
+msgstr "Последние 3 месяца"
+
+#: widgets/kmymoneycombo.cpp:680
+msgid "Last quarter"
+msgstr "Прошлый квартал"
+
+#: widgets/kmymoneycombo.cpp:681
+msgid "Last 6 months"
+msgstr "Последние 6 месяцев"
+
+#: widgets/kmymoneycombo.cpp:682
+msgid "Last 11 months"
+msgstr "Последние 11 месяцев"
+
+#: widgets/kmymoneycombo.cpp:683
+msgid "Last 12 months"
+msgstr "Последние 12 месяцев"
+
+#: widgets/kmymoneycombo.cpp:684
+msgid "Next 7 days"
+msgstr "Следующие 7 дней"
+
+#: widgets/kmymoneycombo.cpp:685
+msgid "Next 30 days"
+msgstr "Следующие 30 дней"
+
+#: widgets/kmymoneycombo.cpp:686
+msgid "Next 3 months"
+msgstr "Следующие 3 месяца"
+
+#: widgets/kmymoneycombo.cpp:687
+msgid "Next quarter"
+msgstr "Следующий квартал"
+
+#: widgets/kmymoneycombo.cpp:688
+msgid "Next 6 months"
+msgstr "Следующие 6 месяцев"
+
+#: widgets/kmymoneycombo.cpp:689
+msgid "Next 12 months"
+msgstr "Следующие 12 месяцев"
+
+#: widgets/kmymoneycombo.cpp:690
+msgid "Last 3 months to next 3 months"
+msgstr "Последние 3 месяца и следующие 3 месяца"
+
+#: widgets/kmymoneycombo.cpp:691
+msgid "User defined"
+msgstr "Определяется пользователем"
+
+#~ msgid "No plugins loaded"
+#~ msgstr "Нет загруженных модулей"
+
+#~ msgid "Create schedule..."
+#~ msgstr "Создать график платежей..."
+
+#~ msgid "New schedule..."
+#~ msgstr "Новый график платежей..."
+
+#~ msgid "Edit schedule..."
+#~ msgstr "Изменить график платежей..."
+
+#~ msgid "Delete schedule..."
+#~ msgstr "Удалить график платежей..."
+
+#~ msgid "Duplicate schedule"
+#~ msgstr "Дублировать график платежей"
+
+#~ msgid "Enter schedule..."
+#~ msgstr "Создать график платежей..."
+
+#~ msgid "Adjusting schedules ..."
+#~ msgstr "Загрузка графиков платежей..."
+
+#~ msgid "Add schedule"
+#~ msgstr "Добавить график платежей"
+
+#~ msgid "Unable to enter transaction for schedule '%1'"
+#~ msgstr "Невозможно добавить операцию по графику платежей «%1»"
+
+#~ msgid "Loaded"
+#~ msgstr "Загружено"
+
+#~ msgid ""
+#~ "_: Plugin interface description\n"
+#~ "Online access"
+#~ msgstr "Онлайновый доступ"
+
+#~ msgid ""
+#~ "_: Plugin interface description\n"
+#~ "File import"
+#~ msgstr "Импорт из файла"
+
+#~ msgid "not loaded: %1"
+#~ msgstr "не загружено: %1"
+
+#~ msgid ""
+#~ "This QIF file contains investment transactions. You are trying to import "
+#~ "this file into an account which is not an investment account. These "
+#~ "transactions will be ignored."
+#~ msgstr ""
+#~ "Файл QIF содержит операции с инвестициями. При импорте данных эти "
+#~ "операции используют не инвестиционный счёт. Операции не будут "
+#~ "импортированы."
+
+#~ msgid "Invalid account for investments"
+#~ msgstr "Неверный счёт учёта инвестиций"
+
+#~ msgid "Problem adding imported transaction: "
+#~ msgstr "Ошибка добавления операций: "
+
+#~ msgid ""
+#~ "This file contains security entries. These are not currently supported "
+#~ "by the QIF importer."
+#~ msgstr ""
+#~ "Файл содержит информацию о ценных бумагах. Информация такого типа не "
+#~ "поддерживается модулем импорта QIF."
+
+#~ msgid "Unable to import"
+#~ msgstr "Невозможно импортировать"
+
+#~ msgid "Budget "
+#~ msgstr "Бюджет"
+
+#~ msgid "Forecast "
+#~ msgstr "Прогноз"
+
+#~ msgid "Budget Total"
+#~ msgstr "Общий бюджет"
+
+#~ msgid "Forecast Total"
+#~ msgstr "Общий прогноз"
+
+#~ msgid "Schedule options"
+#~ msgstr "График платежей"
+
+#~ msgid "Multi-user mode not yet implemented\n"
+#~ msgstr ""
+#~ "Одновременная работа нескольких пользователей пока не поддерживается\n"
+
+#~ msgid "pics/titlelabel_background.png"
+#~ msgstr "pics/titlelabel_background.png"
+
+#~ msgid "S&ummary"
+#~ msgstr "&Сводка"
+
+#~ msgid "Det&ail"
+#~ msgstr "&Подробности"
+
+#~ msgid "New Schedule"
+#~ msgstr "Новый график платежей"
+
+#~ msgid "Total Incomes This Month"
+#~ msgstr "Общие доходы в этом месяце"
+
+#~ msgid "Total Expenses This Month"
+#~ msgstr "Общие расходы в этом месяце"
+
+#~ msgid "Scheduled Incomes This Month"
+#~ msgstr "Планируемые доходы в этом месяце"
+
+#~ msgid "Scheduled Transfers This Month"
+#~ msgstr "Планируемые переводы в этом месяце"
+
+#~ msgid ""
+#~ "Reading the bank list failed with the following error: '%1'. The console "
+#~ "output may have more information."
+#~ msgstr ""
+#~ "При чтении списка банков возникла следующая ошибка: «%1». Вывод в\n"
+#~ "консоли может содержать дополнительную информацию."
+
+#~ msgid "XMLPP error"
+#~ msgstr "Ошибка XMLPP"
+
+#~ msgid "Disabled. No online banking services are available"
+#~ msgstr "Отключено. Связь банк-клиент недоступна"
+
+#~ msgid "CHECKING"
+#~ msgstr "ПЛАСТИКОВАЯ КАРТА"
+
+#~ msgid "SAVINGS"
+#~ msgstr "БАНКОВСКИЙ ВКЛАД"
+
+#~ msgid "MONEY MARKET"
+#~ msgstr "ВАЛЮТНЫЙ РЫНОК"
+
+#~ msgid "CREDIT LINE"
+#~ msgstr "КРЕДИТНАЯ ЛИНИЯ"
+
+#~ msgid "CMA"
+#~ msgstr "CMA"
+
+#~ msgid "CREDIT CARD"
+#~ msgstr "КРЕДИТНАЯ КАРТА"
+
+#~ msgid "INVESTMENT"
+#~ msgstr "ИНВЕСТИЦИИ"
+
+#~ msgid "UNKNOWN"
+#~ msgstr "НЕИЗВЕСТНЫЙ"
+
+#~ msgid "SQLite requires a file name; try again?"
+#~ msgstr "Для SQLite требуется указать имя файла. Повторить?"
+
+#~ msgid ""
+#~ "<h3>Database Type</h3><p>This box lists all Qt SQL drivers installed on "
+#~ "your system. Select the driver for your database type. If the one you "
+#~ "want is not in the list, you need to install the appropriate driver. See "
+#~ "your distro documentation, or visit the Qt web Site (http://www.trolltech."
+#~ "com) and search for 'SQL drivers'.</p><h3>Database Name</h3><p>The "
+#~ "default database name is KMyMoney, but you may choose some other name if "
+#~ "you like. SQLite has one database per file; selecting this driver opens "
+#~ "the file dialog. For database types other than SQLite and MySql, the "
+#~ "database itself must be pre-created, though KMyMoney will create all "
+#~ "table structures where necessary.</p><h3>Host Name</h3><p>For the average "
+#~ "user, the default name of localhost, being the machine you are currently "
+#~ "using, is correct. For networked databases, enter the host name of the "
+#~ "system where the database is stored. You may need to contact your "
+#~ "database administrator for this information.</p><h3>User Name and "
+#~ "Password</h3><p>Check the permissions set up on your database, or contact "
+#~ "the database administrator, for the correct values to use here. The user "
+#~ "name must be capable of deleting, inserting and updating records. If the "
+#~ "user name is the same as your login name, a password is not normally "
+#~ "required.</p><h3>Generate SQL</h3><p>Click this button to create a text "
+#~ "file and write the commands needed to create the database tables and "
+#~ "other objects. With care, this may be edited if the in-built commands do "
+#~ "not work for your database system.</p><p>Please read the appropriate "
+#~ "chapter of the KMyMoney handbook for further information on database "
+#~ "usage.</p>"
+#~ msgstr ""
+#~ "<h3>Тип базы данных</h3><p>Вы должны выбрать из списка драйвер Qt работы "
+#~ "с базой данных, доступной в вашей системе. Если необходимого драйвера нет "
+#~ "в списке, установите соответствующий драйвер. Установка описана в "
+#~ "документации по вашему дистрибутиву и на веб-сайте Qt (http://www."
+#~ "trolltech.com, раздел «SQL drivers»).</p> <h3>Имя базы данных</h3><p>По "
+#~ "умолчанию используется база данных KMyMoney, но вы можете указать другое "
+#~ "имя. SQLite хранит каждую базу данных в отдельном файле, поэтому при "
+#~ "выборе этого типа базы данных появится диалог выбора файла. База данных "
+#~ "другого типа, отличного от SQLite и MySql, должна быть создана до запуска "
+#~ "этого диалога. Программа создаст все необходимые таблицы.</p> <h3>Имя "
+#~ "узла</h3><p>В большинстве случаев это «localhost» (то есть сервер баз "
+#~ "данных расположен на том же компьютере). Для сетевого сервера баз данных "
+#~ "укажите имя узла. Возможно, значение этого параметра можно узнать у "
+#~ "системного администратора.</p> <h3>Имя пользователя и пароль</"
+#~ "h3><p>Проверьте права доступа у базе данных или обратитесь у "
+#~ "администратору баз данных за правильными значениями указанных параметров. "
+#~ "Пользователь базы данных должен иметь права на удаление, вставку и "
+#~ "обновление записей. Если имя пользователя такое же, как имя для "
+#~ "регистрации в системе, обычно пароль указывать не требуется.</p> "
+#~ "<h3>Создать сценарий SQL</h3><p>Нажмите на эту кнопку для создания "
+#~ "текстового файла, содержащего команды SQL для создания таблиц и других "
+#~ "объектов базы данных. Этот файл можно изменить, если запуск сценария "
+#~ "произошёл с ошибками.</p> <p>Обратитесь к главе работы с базой данных "
+#~ "руководства пользователя KMyMoney.</p>"
+
+#~ msgid "Selecting a SQL database"
+#~ msgstr "Выбор базы данных SQL"
+
+#~ msgid "Accepts the value and stores them"
+#~ msgstr "Сохранить данные"
+
+#~ msgid "Use this to accept all values and close the dialog."
+#~ msgstr "Сохранить все изменения и выйти."
+
+#~ msgid "Cancel the operation"
+#~ msgstr "Отменить"
+
+#~ msgid "Use this to dismiss all the changes made in this dialog."
+#~ msgstr "Отменить все изменения."
+
+#~ msgid "Abort operation"
+#~ msgstr "Отменить"
+
+#~ msgid "Use this to abort the export operation"
+#~ msgstr "Отменить операцию экспорта"
+
+#~ msgid "Start the backup operation"
+#~ msgstr "Начать"
+
+#~ msgid "Pressing this button starts the backup operation."
+#~ msgstr "При нажатии на эту кнопку начинается резервное копирование данных. "
+
+#~ msgid "Cancel the backup operation"
+#~ msgstr "Отменить"
+
+#~ msgid "Use this to abort the backup and to return to KMyMoney."
+#~ msgstr "Отменить резервное копирование и вернуться в главное окно."
+
+#~ msgid "&Use the ledger lens"
+#~ msgstr "&Показывать подробности в выделенной строке таблицы "
+
+#~ msgid ""
+#~ "_: Same transaction if amount differs less than percent.\n"
+#~ "Same transaction if amount differs less than"
+#~ msgstr "Операции одинаковы, если их суммы отличаются не более, чем на"
+
+#~ msgid "Accept splits and return to transaction form"
+#~ msgstr "Сохранить разделение и вернуться в изменение операции"
+
+#~ msgid ""
+#~ "Use this to accept all changes to the splits and return to the transaction"
+#~ msgstr "Сохранить разделение и вернуться в изменение операции"
+
+#~ msgid "Reject all changes to the splits and return to transaction form"
+#~ msgstr "Отменить изменения и вернуться в изменение операции"
+
+#~ msgid ""
+#~ "Use this to reject all changes to the splits and return to the transaction"
+#~ msgstr "Отменить изменения и вернуться в изменение операции"
+
+#~ msgid "Reset all settings"
+#~ msgstr "Сбросить все параметры"
+
+#~ msgid ""
+#~ "Use this to reset all settings to the state they were when the dialog was "
+#~ "opened."
+#~ msgstr ""
+#~ "Сбросить все значения параметров до состояния когда вы только открыли "
+#~ "диалог."
+
+#~ msgid "Close dialog"
+#~ msgstr "Закрыть диалог"
+
+#~ msgid "Use this to close the dialog and abort the operation"
+#~ msgstr "Закрыть диалог и отклонить изменения"
+
+#~ msgid "Use this to accept and store data"
+#~ msgstr "Сохранить изменения"
+
+#~ msgid "Delete the selected profile"
+#~ msgstr "Удалить профиль"
+
+#~ msgid "Use this to delete the selected profile"
+#~ msgstr "Удалить выбранный профиль"
+
+#~ msgid "Use this to accept the data."
+#~ msgstr "Сохранить данные."
+
+#~ msgid "Reject all changes to the data and closes the dialog"
+#~ msgstr "Отклонить все изменения и закрыть диалог"
+
+#~ msgid "Use this to reject all changes."
+#~ msgstr "Отклонить все изменения."
+
+#~ msgid "&Create"
+#~ msgstr "&Создать"
+
+#~ msgid "Co&nfigure"
+#~ msgstr "&Настроить"
+
+#~ msgid "Te&xt"
+#~ msgstr "Те&кст"
+
+#~ msgid "Search transactions containing the following text"
+#~ msgstr "Искать операции, содержащие следующий текст"
+
+#~ msgid "Reset"
+#~ msgstr "Очистить"
+
+#~ msgid "Search"
+#~ msgstr "Поиск"
+
+#~ msgid "&Scan"
+#~ msgstr "&Сканировать"
+
+#~ msgid "Automatically create missing payees"
+#~ msgstr "Автоматически добавлять пропущенных получателей"
+
+#~ msgid "Online &Quotes"
+#~ msgstr "Обновить курсы из &Интернета"
+
+#~ msgid "O&K"
+#~ msgstr "O&K"
+
+#~ msgid "&Edit ..."
+#~ msgstr "&Изменить..."
+
+#~ msgid "&Delete ..."
+#~ msgstr "&Удалить..."
+
+#~ msgid "Remove this price information from the price history"
+#~ msgstr "Удалить курс из списка"
+
+#~ msgid "Create a new price information entry."
+#~ msgstr "Добавить курс."
+
+#~ msgid "Accepts the selected action and continues"
+#~ msgstr "Сохранить и продолжить"
+
+#~ msgid ""
+#~ "Use this to accept the selection and continue processing the transaction"
+#~ msgstr "Принять и продолжить обработку"
+
+#~ msgid "Reject any changes"
+#~ msgstr "Отменить все изменения"
+
+#~ msgid "Use this to abort the account/category dialog"
+#~ msgstr "Закрыть диалог изменения счёта или статьи"
+
+#~ msgid "Accept modifications"
+#~ msgstr "Принять изменения"
+
+#~ msgid "Use this to accept the data and possibly create the account/category"
+#~ msgstr "Сохранить данные счёта или статьи"
+
+#~ msgid "&Search"
+#~ msgstr "&Поиск"
+
+#~ msgid "Start the search"
+#~ msgstr "Начать поиск"
+
+#~ msgid "Takes the current criteria and searches for matching transactions."
+#~ msgstr "Найти операции, удовлетворяющие заданным условиям."
+
+#~ msgid "New ..."
+#~ msgstr "Добавить..."
+
+#~ msgid "Use this button to close the window"
+#~ msgstr "Закрыть окно"
+
+#~ msgid "&Yearly"
+#~ msgstr "&ежегодно"
+
+#~ msgid "Advanced Institution Settings"
+#~ msgstr "Дополнительные параметры"
+
+#~ msgid "OFX Direct Connect Settings"
+#~ msgstr "Параметры прямого подключения по OFX"
+
+#~ msgid "Enable OFX Direct Connect"
+#~ msgstr "Использовать прямое подключение по OFX"
+
+#~ msgid "FIORG"
+#~ msgstr "FIORG"
+
+#~ msgid ""
+#~ "Failed to retrieve a quote for %1 from %2. Would you like to disable "
+#~ "online price updates for this security?"
+#~ msgstr ""
+#~ "Ошибка получения курса %1 из %2. Отключить онлайновое обновление курса "
+#~ "этого финансового инструмента?"
+
+#, fuzzy
+#~ msgid "Commodity Editor"
+#~ msgstr "Финансовый инструмент"
+
+#, fuzzy
+#~ msgid "1/"
+#~ msgstr "1 /"
+
+#~ msgid "Code"
+#~ msgstr "Код"
+
+#, fuzzy
+#~ msgid "Account Fraction"
+#~ msgstr "Выбор счёта"
+
+#~ msgid "Alt+O"
+#~ msgstr "Alt+O"
+
+#~ msgid "Alt+C"
+#~ msgstr "Alt+C"
+
+#, fuzzy
+#~ msgid "Online Banking"
+#~ msgstr "Настроить систему &банк-клиент..."
+
+#~ msgid "Checkings"
+#~ msgstr "Чековая книжка"
+
+#~ msgid "R"
+#~ msgstr "С"
+
+#, fuzzy
+#~ msgid "Column 1"
+#~ msgstr "Столбец 1"
+
+#~ msgid "Transaction History"
+#~ msgstr "Операции"
+
+#~ msgid "Personal Information"
+#~ msgstr "Контакт"
+
+#~ msgid "TextLabel2"
+#~ msgstr "TextLabel2"
+
+#~ msgid "YTD:"
+#~ msgstr "За год:"
+
+#~ msgid "TextLabel4"
+#~ msgstr "TextLabel4"
+
+#~ msgid "Online update using OFX..."
+#~ msgstr "Обновить по протоколу OFX..."
+
+#, fuzzy
+#~ msgid "Match Transaction..."
+#~ msgstr "&Редактировать операции..."
+
+#, fuzzy
+#~ msgid "Match With This Transaction"
+#~ msgstr "Пропустить операцию"
+
+#~ msgid "Import %1 Statement..."
+#~ msgstr "Импорт %1..."
+
+#, fuzzy
+#~ msgid "Imported Data Warnings"
+#~ msgstr "Импорт операций"
+
+#~ msgid "Unable to import <b>%1</b> file. There is no such plugin loaded."
+#~ msgstr ""
+#~ "Невозможно импортировать файл <b>%1</b>. Нет модуля для обработки этого "
+#~ "формата."
+
+#~ msgid "Function not available"
+#~ msgstr "Функция недоступна"
+
+#~ msgid "Edit an account"
+#~ msgstr "Свойства счёта"
+
+#~ msgid ""
+#~ "The currently opened KMyMoney document does not contain a single asset "
+#~ "account. In order to maintain your finances you need at least one asset "
+#~ "account (e.g. your checkings account). KMyMoney will start the \"New "
+#~ "Account Wizard\" now which allows you to create your first asset account."
+#~ msgstr ""
+#~ "Не создано ни одного активного счёта. Для учёта ваших финансов необходимо "
+#~ "создание хотя бы одного счёта. Сейчас будет запущен мастер создания счёта."
+
+#~ msgid "No asset account"
+#~ msgstr "Нет активного счёта"
+
+#~ msgid "%1 (Plugin)..."
+#~ msgstr "%1 (модуль)..."
+
+#~ msgid "GnuCash Importer"
+#~ msgstr "Импорт из GnuCash"
+
+#, fuzzy
+#~ msgid "Open Configuration Dialog"
+#~ msgstr "Настройка OFX"
+
+#, fuzzy
+#~ msgid "Forcecast"
+#~ msgstr "Прогноз"
+
+#, fuzzy
+#~ msgid "Importing templates..."
+#~ msgstr "Загрузка планов счетов..."
+
+#~ msgid "Until today"
+#~ msgstr "до сегодня"
+
+#~ msgid "Tax Transactions"
+#~ msgstr "Выплата налогов"
+
+#~ msgid "Unable to parse date %1 using format %2: %3"
+#~ msgstr "Невозможно обработать дату %1. Используется формат %2: %3"
+
+#, fuzzy
+#~ msgid "Pa&yee"
+#~ msgstr "Получатель"
+
+#, fuzzy
+#~ msgid "Return"
+#~ msgstr "&Выполнить"
+
+#, fuzzy
+#~ msgid "Summar&y"
+#~ msgstr "Завершение"
+
+#, fuzzy
+#~ msgid "one month"
+#~ msgstr "Следующий месяц"
+
+#, fuzzy
+#~ msgid "one year"
+#~ msgstr "Следующий год"
+
+#, fuzzy
+#~ msgid "one payment"
+#~ msgstr "Выплата по кредиту"
+
+#~ msgid "Every four week"
+#~ msgstr "каждую четвёртую неделю"
+
+#, fuzzy
+#~ msgid "Total Forecast"
+#~ msgstr "Остаток"
+
+#, fuzzy
+#~ msgid "E&dit"
+#~ msgstr "Изменить..."
+
+#, fuzzy
+#~ msgid "De&lete"
+#~ msgstr "Удалить..."
+
+#, fuzzy
+#~ msgid "Ne&w"
+#~ msgstr "Создать"
+
+#~ msgid "Change into one of the directories and select the desired file."
+#~ msgstr "Выберите необходимый файл."
+
+#~ msgid "*.kmt|Account templates"
+#~ msgstr "*.kmt|Планы счетов (*.kmt)"
+
+#~ msgid "Select account template(s)"
+#~ msgstr "Выбор плана счетов"
+
+#, fuzzy
+#~ msgid "Duplicate split"
+#~ msgstr "Файл заблокирован"
+
+#, fuzzy
+#~ msgid "Convert 'em!!"
+#~ msgstr "Финансовый инструмент"
+
+#~ msgid "Outbox"
+#~ msgstr "Исходящие"
+
+#~ msgid "AqBanking importer ..."
+#~ msgstr "Модуль AqBanking..."
+
+#~ msgid "Online update using HBCI..."
+#~ msgstr "Получение выписок HBCI..."
+
+#~ msgid ""
+#~ "In order to map this account to an HBCI account, the account's "
+#~ "institution must have a bank code assigned. Please assign one before "
+#~ "continuing."
+#~ msgstr ""
+#~ "Чтобы получать выписки по счёту HBCI, для этого счёте необходимо указать "
+#~ "учреждение с заданным банковским кодом."
+
+#~ msgid ""
+#~ "In order to map this account to an HBCI account, this account must have "
+#~ "an account number assigned."
+#~ msgstr ""
+#~ "Чтобы получать выписки по счёту HBCI, для этого счёте необходимо указать "
+#~ "номер."
+
+#~ msgid "Error importing statement."
+#~ msgstr "Ошибка получения выписки."
+
+#~ msgid "&Split"
+#~ msgstr "&Разделить"
+
+#~ msgid "Split the amount into different categories."
+#~ msgstr "Разделить сумму по разным статьям."
+
+#~ msgid "&Bills/Deposits"
+#~ msgstr "Счета на оплату и &вклады"
+
+#~ msgid "&Reports"
+#~ msgstr "&Отчёты"
+
+#~ msgid "Add new account..."
+#~ msgstr "Добавить счёт..."
+
+#~ msgid "Reconcile ..."
+#~ msgstr "Сверить..."
+
+#~ msgid "Add new transaction"
+#~ msgstr "Добавить операцию"
+
+#~ msgid ""
+#~ "The next dialog allows you to add predefined account/category templates "
+#~ "to the new file. Different languages are available to select from. You "
+#~ "can skip loading any template now by selecting <b>Cancel</b> from the "
+#~ "next dialog. If you wish to add more templates later, you can restart "
+#~ "this operation by selecting <b>File/Import/Account Templates</b>."
+#~ msgstr ""
+#~ "На следующем этапе вам будет предложено выбрать план счетов для вашего "
+#~ "файла. Планы счетов сгруппированы по языкам. Вы можете пропустить этап "
+#~ "выбора плана счетов и добавить позднее через <b>Файл/Импорт/План счетов</"
+#~ "b>."
+
+#~ msgid ""
+#~ "*.kmy|KMyMoney files\n"
+#~ "*.xml|XML Files\n"
+#~ "*.ANON.xml|Anonymous Files\n"
+#~ "*.*|All files"
+#~ msgstr ""
+#~ "*.kmy|Файлы KMyMoney (*.kmy)\n"
+#~ "*.xml|Файлы XML (*.xml)\n"
+#~ "*.ANON.xml|Анонимные файлы (*.ANON.xml)\n"
+#~ "*.*|Все файлы (*.*)"
+
+#~ msgid "Toggling toolbar..."
+#~ msgstr "Включение панели инструментов..."
+
+#~ msgid "Toggle the statusbar..."
+#~ msgstr "Включение строки состояния..."
+
+#~ msgid ""
+#~ "This function is used by the developers to\n"
+#~ "\n"
+#~ "perform a dump of the engine's data in memory."
+#~ msgstr ""
+#~ "Эта возможность предназначена для разработчиков\n"
+#~ "для показа содержимого памяти приложения."
+
+#~ msgid ""
+#~ "Unable to autoEnter schedule %1. Please check manually!\n"
+#~ "Debug data has been copied to clipboard; please paste into an\n"
+#~ "email and send to kmymoney2-developer@lists.sourceforge.net"
+#~ msgstr ""
+#~ "Невозможно создать операцию по графику платежей %1.\n"
+#~ "Детали ошибки скопированы в буфер обмена. Вставьте их\n"
+#~ "в сообщение и отправьте на kmymoney2-developer@lists.sourceforge.net"
+
+#~ msgid "%1 caught in %2 at line %3"
+#~ msgstr "Ошибка %1 в %2 (строка %3)"
+
+#~ msgid "Cannot remove account from institution"
+#~ msgstr "Невозможно удалить счёт из учреждения"
+
+#~ msgid "Moving account"
+#~ msgstr "Перемещение счёта"
+
+#~ msgid "Cannot move account"
+#~ msgstr "Невозможно переместить счёт"
+
+#~ msgid "Cannot move account to institution"
+#~ msgstr "Невозможно переместить счёт в другое учреждение"
+
+#~ msgid "Show Top Categories Only"
+#~ msgstr "Показывать только статьи верхнего уровня"
+
+#~ msgid ""
+#~ "<p>Select this option to summarize all sub-categories into a single line "
+#~ "for each Top Category.</p><p>(e.g. Values for Computers:Hardware and "
+#~ "Computers:Software will all be shown on the Computers line)</p>"
+#~ msgstr "<p>Показывать сводные суммы по статьям верхнего уровня.</p>"
+
+#~ msgid "Transfer to/from %1"
+#~ msgstr "Перевод с/на %1"
+
+#~ msgid "Unable to add category"
+#~ msgstr "Невозможно создать статью"
+
+#~ msgid "Securities"
+#~ msgstr "Ценные бумаги"
+
+#~ msgid "Reconciled: %1"
+#~ msgstr "Сверено: %1"
+
+#~ msgid "You currently owe: "
+#~ msgstr "Вы владеете: "
+
+#~ msgid "There is no user manual yet"
+#~ msgstr "Руководство пользователя пока недоступно"
+
+#~ msgid "Unable to setup payee/receiver"
+#~ msgstr "Невозможно назначить получателя"
+
+#~ msgid "Unable to modify split"
+#~ msgstr "Невозможно разделить сумму"
+
+#~ msgid "Unable to modify category"
+#~ msgstr "Невозможно изменить статью"
+
+#~ msgid "Unable to modify number"
+#~ msgstr "Невозможно изменить номер"
+
+#~ msgid "Unable to modify type"
+#~ msgstr "Невозможно изменить тип"
+
+#~ msgid "&Check"
+#~ msgstr "&Чек"
+
+#~ msgid "AT&M"
+#~ msgstr "AT&M"
+
+#~ msgid ""
+#~ "An investment transaction can only be modified in the investment view. Do "
+#~ "you want to change to the investment view?"
+#~ msgstr ""
+#~ "Инвестиционная операция может быть изменена только в разделе \"Инвестиции"
+#~ "\". Перейти в этот раздел?"
+
+#~ msgid "Account Options"
+#~ msgstr "Действия"
+
+#~ msgid "Account Details ..."
+#~ msgstr "Свойства счёта..."
+
+#~ msgid "Mark as ..."
+#~ msgstr "Отметить как..."
+
+#~ msgid "Move to account ..."
+#~ msgstr "Переместить на счёт..."
+
+#~ msgid "Moving a split to a different account is not yet implemented"
+#~ msgstr "Невозможно переместить разделённую операцию на другой счёт"
+
+#~ msgid ""
+#~ "You are about to delete the selected transaction. Do you really want to "
+#~ "continue?"
+#~ msgstr "Удалить выбранные операции?"
+
+#~ msgid "New Account..."
+#~ msgstr "Новый счёт..."
+
+#~ msgid "KMyMoney Options"
+#~ msgstr "Действия"
+
+#~ msgid "Really delete this institution: "
+#~ msgstr "Удалить учреждение: "
+
+#~ msgid "Cannot delete institution: "
+#~ msgstr "Невозможно удалить учреждение: "
+
+#~ msgid "Cannot delete account: "
+#~ msgstr "Невозможно удалить счёт: "
+
+#~ msgid ""
+#~ "You have specified to encrypt your data but you have not provided a user-"
+#~ "id. Please make sure to setup a valid user id. This time, encryption is "
+#~ "disabled."
+#~ msgstr ""
+#~ "Вы не указали пользователя при шифровании данных. Укажите действительный "
+#~ "идентификатор пользователя. Данные не будут зашифрованы."
+
+#~ msgid "Cannot add bank"
+#~ msgstr "Невозможно добавить банк"
+
+#~ msgid "Create new KMyMoney file"
+#~ msgstr "Создать файл KMyMoney"
+
+#~ msgid "Cannot edit personal data"
+#~ msgstr "Невозможно изменить данные владельца"
+
+#~ msgid "*.dat|Account templates"
+#~ msgstr "*.dat|Планы счетов (*.dat)"
+
+#~ msgid "Select account template"
+#~ msgstr "Выберите план счетов"
+
+#~ msgid "Cannot find the data file containing the default categories"
+#~ msgstr "Невозможно найти файл с данными плана счетов"
+
+#~ msgid "Loading default accounts"
+#~ msgstr "Загрузка плана счетов"
+
+#~ msgid "Ready"
+#~ msgstr "Готово"
+
+#~ msgid "Show transactionform"
+#~ msgstr "Показывать форму ввода операции"
+
+#~ msgid ""
+#~ "Use this to finish reconciling your account against the bank statement."
+#~ msgstr "Закончить сверку счёта с выпиской банка."
+
+#~ msgid "&Postpone"
+#~ msgstr "&Отложить"
+
+#~ msgid ""
+#~ "Use this to postpone reconciling your account against the bank statement "
+#~ "to a later point in time."
+#~ msgstr "Отложить сверку счёта с выпиской банка на более поздний срок."
+
+#~ msgid "&Account Details"
+#~ msgstr "&Изменить счёт"
+
+#~ msgid "Open the account dialog"
+#~ msgstr "Открыть свойства счёта"
+
+#~ msgid "Use this view and modify the account details."
+#~ msgstr "Изменить данные счёта."
+
+#~ msgid "&Reconcile ..."
+#~ msgstr "&Сверка..."
+
+#~ msgid "Start the account reconciliation"
+#~ msgstr "Начать сверку счёта"
+
+#~ msgid "Use this to reconcile your account against the bank statement."
+#~ msgstr "Сверка данных счёта и выписки банка."
+
+#~ msgid ""
+#~ "<center><b>Reconcile account</b></center><hr>\n"
+#~ "<b>1.</b> Click on column 'C' to clear the transactions appearing on your "
+#~ "bank statement."
+#~ msgstr ""
+#~ "<center><b>Сверка счёта</b></center><hr>\n"
+#~ "<b>1.</b> Поставьте 'П' у операций, совпадающих с операциями из выписки "
+#~ "банка."
+
+#~ msgid ""
+#~ "<b>2.</b> Match the cleared transactions with the amount noted on your "
+#~ "bank statement.<br>"
+#~ msgstr ""
+#~ "<b>2.</b> Сравните сумму проверенных операций и сумму операций из выписки."
+#~ "<br>"
+
+#~ msgid "Cleared:"
+#~ msgstr "Проверено:"
+
+#~ msgid "<p><b>3.</b> Hit the Finish button when you're done."
+#~ msgstr "<p><b>3.</b> Нажмите на кнопку \"Готово\" для окончания сверки."
+
+#~ msgid "Loan Payment"
+#~ msgstr "Выплата по кредиту"
+
+#~ msgid "Goto payer/receiver"
+#~ msgstr "Перейти к получателю"
+
+#~ msgid ""
+#~ "*.csv|CSV files\n"
+#~ "*.html|HTML files\n"
+#~ "*.*|All files"
+#~ msgstr ""
+#~ "*.csv|Файлы CSV (*.csv)\n"
+#~ "*.html|Страницы HTML (*.html)\n"
+#~ "*.*|Все файлы (*.*)"
+
+#~ msgid "Account register"
+#~ msgstr "Операции по счёту"
+
+#~ msgid "Cannot edit category: "
+#~ msgstr "Невозможно изменить статью: "
+
+#~ msgid "Symbol Name"
+#~ msgstr "Код"
+
+#~ msgid "Modify the loan details for this loan"
+#~ msgstr "Изменить данные кредита"
+
+#~ msgid ""
+#~ "Use this to start a wizard that allows changing the details for this loan."
+#~ msgstr "Запуск мастера изменения кредита."
+
+#~ msgid "To"
+#~ msgstr "Получатель"
+
+#~ msgid ""
+#~ "The price history for <b>%1</b> does not contain an entry for <b>%2</b>. "
+#~ "Do you want to add a new entry in the history based on the price of this "
+#~ "transaction?"
+#~ msgstr ""
+#~ "Список курсов для <b>%1</b> не содержит записи о <b>%2</b>. Добавить "
+#~ "новый курс на базе цены по этой операции?"
+
+#~ msgid "Add price info"
+#~ msgstr "Добавление курса"
+
+#~ msgid ""
+#~ "The price history for <b>%1</b> contains a different price for <b>%2</"
+#~ "b>. Do you want to update the price in the history to the one of this "
+#~ "transaction?"
+#~ msgstr ""
+#~ "Список курсов для <b>%1</b> содержит запись об ином курсе <b>%2</b>. "
+#~ "Обновить курс на базе цены по этой операции?"
+
+#~ msgid "Update price info"
+#~ msgstr "Обновление курса"
+
+#~ msgid "Unable to add/modify security"
+#~ msgstr "Невозможно добавить или изменить информацию о ценных бумагах"
+
+#~ msgid ""
+#~ "The %1 <b>%2</b> uses a different currency than the selected investment. "
+#~ "Please make sure to enter all values for this transaction in <b>%2</b>. "
+#~ "When you save this transaction you will have the chance to enter the "
+#~ "necessary conversion rates."
+#~ msgstr ""
+#~ "%1 <b>%2</b> использует другую валюту для учёта ценных бумаг. Проверьте "
+#~ "чтобы все значения операций были указаны в валюте <b>%2</b>. При "
+#~ "сохранении этой операции вам нужно указать курс конвертации валюты."
+
+#~ msgid "Stock security"
+#~ msgstr "Ценные бумаги"
+
+#~ msgid "C&harge"
+#~ msgstr "&Списание"
+
+#~ msgid "$ Gain"
+#~ msgstr "Доход"
+
+#~ msgid "1 Week %"
+#~ msgstr "за неделю, %"
+
+#~ msgid "4 Weeks %"
+#~ msgstr "за 4 недели, %"
+
+#~ msgid "3 Months %"
+#~ msgstr "за 3 месяца, %"
+
+#~ msgid "YTD %"
+#~ msgstr "за год, %"
+
+#~ msgid "On-line Price Update ..."
+#~ msgstr "Обновить курс из Интернета..."
+
+#~ msgid "New payee..."
+#~ msgstr "Добавить получателя..."
+
+#~ msgid "Bill Options"
+#~ msgstr "Параметры счёта к отплате"
+
+#~ msgid "New Bill..."
+#~ msgstr "Добавить счёт на оплату..."
+
+#~ msgid "Deposit Options"
+#~ msgstr "Параметры зачисления"
+
+#~ msgid "New Deposit..."
+#~ msgstr "Добавить зачисление..."
+
+#~ msgid "Transfer Options"
+#~ msgstr "Параметры списания"
+
+#~ msgid "New Transfer..."
+#~ msgstr "Добавить списание..."
+
+#~ msgid "Personal Equity"
+#~ msgstr "Персональные данные"
+
+#~ msgid "Transfer %1 %2"
+#~ msgstr "Перевод %1 %2"
+
+#~ msgid "Edit Transfer Schedule"
+#~ msgstr "Перевод"
+
+#~ msgid "Edit Loan Payment Schedule"
+#~ msgstr "Изменить выплату по кредиту"
+
+#~ msgid "Edit Deposit Schedule"
+#~ msgstr "Зачисление"
+
+#~ msgid "Direct Debit"
+#~ msgstr "автоматическое списание"
+
+#~ msgid "Direct Deposit"
+#~ msgstr "автоматическое зачисление"
+
+#~ msgid "Manual Deposit"
+#~ msgstr "зачисление вручную"
+
+#~ msgid "Write Check"
+#~ msgstr "выписать чек"
+
+#~ msgid "Please specify the account first before you assign splits."
+#~ msgstr "Укажите счёт перед разделением."
+
+#~ msgid "Exception in slot split clicked"
+#~ msgstr "Ошибка"
+
+#~ msgid ""
+#~ "The frequency of this schedule must be set to something other than Once"
+#~ msgstr "Выберите другую периодичность"
+
+#~ msgid "Please fill in the name field."
+#~ msgstr "Укажите название."
+
+#~ msgid "Please fill in the From account field."
+#~ msgstr "Укажите счёт для списания."
+
+#~ msgid "Please fill in the To account field."
+#~ msgstr "Укажите счёт для зачисления."
+
+#~ msgid "Please fill in the payee field."
+#~ msgstr "Укажите получателя."
+
+#~ msgid "Please fill in the category field."
+#~ msgstr "Укажите статью."
+
+#~ msgid "Please fill in ending date"
+#~ msgstr "Укажите дату последней операции"
+
+#~ msgid "Account from and account to are the same"
+#~ msgstr "Указан один и тот же счёт для списания и зачисления"
+
+#~ msgid "Exception in loadWidgetsFromSchedule(1)"
+#~ msgstr "Ошибка в loadWidgetsFromSchedule(1)"
+
+#~ msgid "Exception in loadWidgetsFromSchedule(2)"
+#~ msgstr "Ошибка в loadWidgetsFromSchedule(2)"
+
+#~ msgid "All split data lost. Please re-enter splits"
+#~ msgstr "Все данные разделения утеряны. Выполните разделение снова"
+
+#~ msgid "Error in slotAmountChanged?"
+#~ msgstr "Ошибка в параметре slotAmountChanged?"
+
+#~ msgid ""
+#~ "The schedule can not be automatically entered when the start date is on "
+#~ "or before todays date."
+#~ msgstr ""
+#~ "Невозможно автоматически ввести график платежей поскольку дата его начала "
+#~ "приходится на сегодня или раннюю дату."
+
+#~ msgid "The end date can not be set for occurences set to Once"
+#~ msgstr ""
+#~ "Невозможно установить дату последней операции, если периодичность "
+#~ "установлена в \"один раз\""
+
+#~ msgid ""
+#~ "The start date must be greater than today, to automatically enter this "
+#~ "schedule."
+#~ msgstr "Дата начала должна быть позднее чем сегодня."
+
+#~ msgid "Withdrawal or Transfer"
+#~ msgstr "Списание или платёж"
+
+#~ msgid ""
+#~ "You have specified an %1 category for a %2 schedule. Do you want to keep "
+#~ "it that way?"
+#~ msgstr "Вы указали статью %1 для графика платежей %2. Оставить статью?"
+
+#~ msgid "Verify category type"
+#~ msgstr "Проверка типа статьи"
+
+#~ msgid "Bill or Transfer"
+#~ msgstr "Оплата счёта или платёж"
+
+#~ msgid "Cancel the import operation"
+#~ msgstr "Отменить импорт"
+
+#~ msgid ""
+#~ "Use this to abort the import and undo all changes made during import."
+#~ msgstr "Отменить импорт данных."
+
+#~ msgid ""
+#~ "You are about to cancel the entire import. Any changes you have made in "
+#~ "this dialog will be lost. Are you sure you want to cancel?"
+#~ msgstr ""
+#~ "Вы отменили импорт данных. Все изменения, сделанные в этом диалоге, будут "
+#~ "утеряны. Отменить импорт?"
+
+#~ msgid "Verify cancel"
+#~ msgstr "Подтверждение отмены"
+
+#~ msgid ""
+#~ "The imported data is displayed together with the data already stored in "
+#~ "the file. Imported transactions are shown with a yellow background. "
+#~ "Pressing \"OK\" will accept all transactions, \"Cancel\" will remove all "
+#~ "imported transactions.\n"
+#~ "You may modify the transactions - if need to - before you press \"OK\" or "
+#~ "even delete transactions that have been imported incorrectly (e.g. "
+#~ "duplicate transactions)."
+#~ msgstr ""
+#~ "Импортированные операции показываются вместе с существующими операциями в "
+#~ "файле, но на жёлтом фоне. Нажмите \"OK\" для подтверждения слияния или "
+#~ "\"Отмена\" для удаления всех импортированных операций.\n"
+#~ "Если необходимо, вы можете изменять и даже удалять операции (например, "
+#~ "дубликаты) до того, как нажмёте кнопку \"OK\"."
+
+#~ msgid "General settings"
+#~ msgstr "Основные параметры"
+
+#~ msgid "Equity/Currency/Value options"
+#~ msgstr "Параметры цены"
+
+#~ msgid "Accounts View"
+#~ msgstr "Счета"
+
+#~ msgid "Accounts view settings"
+#~ msgstr "Параметры показа счетов"
+
+#~ msgid "Use the normal institution view"
+#~ msgstr "По учреждениям"
+
+#~ msgid "Use the new accounts view"
+#~ msgstr "По счетам"
+
+#~ msgid "Restrict by date"
+#~ msgstr "Период"
+
+#~ msgid "Restrict by transaction state"
+#~ msgstr "Состояние операции"
+
+#~ msgid "Data Encryption Settings"
+#~ msgstr "Параметры шифрования данных"
+
+#~ msgid "List view colour :"
+#~ msgstr "Новая операция:"
+
+#~ msgid "Mount Point:"
+#~ msgstr "Точка монтирования:"
+
+#~ msgid "textLabel2"
+#~ msgstr "textLabel2"
+
+#~ msgid "Edit Scheduled Transfer"
+#~ msgstr "Изменение перевода"
+
+#~ msgid "Pay to:"
+#~ msgstr "Получатель:"
+
+#~ msgid "From:"
+#~ msgstr "Со счёта:"
+
+#~ msgid "To:"
+#~ msgstr "На счёт:"
+
+#~ msgid "Amount:"
+#~ msgstr "Сумма:"
+
+#~ msgid "Category:"
+#~ msgstr "Статья:"
+
+#~ msgid "Memo:"
+#~ msgstr "Примечание:"
+
+#~ msgid "<b>Name:</b>"
+#~ msgstr "<b>Название:</b>"
+
+#~ msgid "<b>Type:</b>"
+#~ msgstr "<b>Вид:</b>"
+
+#~ msgid "<b>Payee:</b>"
+#~ msgstr "<b>Получатель:</b>"
+
+#~ msgid "<b>Category:</b>"
+#~ msgstr "<b>Статья:</b>"
+
+#, fuzzy
+#~ msgid "<b>From (account):</b>"
+#~ msgstr "<b>Со счёта:</b>"
+
+#~ msgid "<b>Memo:</b>"
+#~ msgstr "<b>Примечание:</b>"
+
+#, fuzzy
+#~ msgid "<b>To (account):</b>"
+#~ msgstr "<b>На счёт:</b>"
+
+#~ msgid "<b>Date:</b>"
+#~ msgstr "<b>Дата:</b>"
+
+#~ msgid "<b>Amount:</b>"
+#~ msgstr "<b>Сумма:</b>"
+
+#~ msgid "to"
+#~ msgstr "до"
+
+#~ msgid "from"
+#~ msgstr "от"
+
+#~ msgid "Equity-Symbol:"
+#~ msgstr "Код:"
+
+#~ msgid "New Account"
+#~ msgstr "Новый счёт"
+
+#~ msgid "Institution Selection"
+#~ msgstr "Выбор учреждения"
+
+#~ msgid "<u>I</u>nstitution"
+#~ msgstr "<u>У</u>чреждение"
+
+#~ msgid "Account Type Selection"
+#~ msgstr "Выбор типа счёта"
+
+#~ msgid "What is the account number?"
+#~ msgstr "Номер счёта"
+
+#~ msgid ""
+#~ "If you do not know the account number, please leave this field empty. You "
+#~ "can add the account number at any later time in the account details "
+#~ "dialog. The account number is only used by KMyMoney for online banking."
+#~ msgstr ""
+#~ "Если вы не знаете номер, оставьте поле пустым. Вы сможете ввести его "
+#~ "позже. Номер счёта используется только для системы банк-клиент."
+
+#~ msgid "Does this investment account has a brokerage account?"
+#~ msgstr "Создать отдельный счёт для учёта комиссионных по инвестициям?"
+
+#~ msgid "What is the opening balance and date of this account?"
+#~ msgstr "Начальный остаток и дата открытия"
+
+#~ msgid "What is the currency of this account?"
+#~ msgstr "Валюта счёта"
+
+#~ msgid "&Price"
+#~ msgstr "&Курс"
+
+#~ msgid "Account Payment"
+#~ msgstr "Выплаты по счёту"
+
+#~ msgid ""
+#~ "Do you wish to add a payment for this credit card account to the list of "
+#~ "monthly payments?"
+#~ msgstr "Добавить выплаты по кредитной карте в список месячных платежей?"
+
+#~ msgid ""
+#~ "The information to create the account has now been collected. Press the "
+#~ "<b>Finish</b> button to actually create the account or the <b>Back</b> "
+#~ "button to modify the settings. The <b>Cancel</b> button will dismiss all "
+#~ "data and leave this wizard.<br>\n"
+#~ "Once the account is successfully created you can enter your transactions "
+#~ "on this account."
+#~ msgstr ""
+#~ "Вся необходимая информация для создания счёта собрана. Нажмите на кнопку "
+#~ "<b>Готово</b> для окончательного создания счёта или кнопку <b>Назад</b> "
+#~ "для возврата к изменению параметров. При нажатии на кнопку <b>Отмена</b> "
+#~ "счёт не будет создан и мастер закрыт.\n"
+#~ "После успешного создания счёта вы можете начать вводить операции по нему."
+
+#~ msgid ""
+#~ "Adding a new institution.\n"
+#~ "\n"
+#~ "The only required field is the name, which can be the name of a bank like "
+#~ "Woolwhich, or a descriptive name like Family Cash Accounts."
+#~ msgstr ""
+#~ "Добавление учреждения.\n"
+#~ "\n"
+#~ "Единственное обязательное поле - \"Название\". В нём вы можете указать "
+#~ "название банка (например, \"СуперБанк\") или описание типа \"Семейные "
+#~ "счета\"."
+
+#~ msgid "What should happen with the difference?"
+#~ msgstr "Что сделать с остатком?"
+
+#~ msgid "&Change transaction amount into %2"
+#~ msgstr "&Изменить сумму на %2"
+
+#~ msgid "&Distribute difference among all splits"
+#~ msgstr "&Распределить остаток по всем разделам"
+
+#~ msgid "&Leave unassigned"
+#~ msgstr "&Оставить не распределённым"
+
+#~ msgid ""
+#~ "The schedule %1 caused an internal problem. Please contact the developers "
+#~ "via e-mail on kmymoney2-developer@lists.sourceforge.net for further "
+#~ "instructions mentioning this problem."
+#~ msgstr ""
+#~ "Периодический платёж %1 привёл к ошибке в программе. Обратитесь к "
+#~ "разработчикам по электронной почте kmymoney2-developer@lists.sourceforge."
+#~ "net для исправления этой ошибки."
+
+#~ msgid "Payee changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Изменён получатель. \"%1\" изменён на \"%2\""
+
+#~ msgid "Category changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Изменена статья. \"%1\" изменена на \"%2\""
+
+#~ msgid "Memo changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Изменён комментарий. \"%1\" изменён на \"%2\""
+
+#~ msgid "Amount changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Изменена сумма. \"%1\" изменена на \"%2\""
+
+#~ msgid "%1 items of the details for the transaction have changed."
+#~ msgstr "Изменено полей платежа: %1."
+
+#~ msgid ""
+#~ "Some occurences that are older than '%1' have not been entered yet.\n"
+#~ "\n"
+#~ "Delete all occurences that have not been entered before this date?"
+#~ msgstr ""
+#~ "Некоторые выплаты до \"%1\" не были произведены.\n"
+#~ "\n"
+#~ "Удалить все неоплаченные выплаты?"
+
+#~ msgid ""
+#~ "Are you sure you want to enter this occurence which is %1 days after "
+#~ "today?"
+#~ msgstr "Произвести платёж, хотя он должен состояться через %1 дней?"
+
+#~ msgid "The date must lie in the range %1 to %2"
+#~ msgstr "Дата должна быть между %1 и %2"
+
+#~ msgid "1 %2 costs <i>price</i<> %1"
+#~ msgstr "1 %2 = %1"
+
+#~ msgid ""
+#~ "Do you really want to select %1 as your base currency? This selection can "
+#~ "currently not be modified! If unsure, press 'No' now."
+#~ msgstr ""
+#~ "Использовать \"%1\" как основную валюту? Этот выбор для файла нельзя "
+#~ "изменить в дальнейшем. Если вы не уверены, выберите \"Нет\"."
+
+#~ msgid "This feature needs to be implemented."
+#~ msgstr "Эта возможность пока не реализована."
+
+#~ msgid "Implementation missing"
+#~ msgstr "Реализация"
+
+#~ msgid "Use this to abort the dialog"
+#~ msgstr "Закрыть диалог без сохранения изменений"
+
+#~ msgid "Use this to accept the data and possibly update the exchange rate"
+#~ msgstr "Принять изменения и при необходимости обновить курс"
+
+#~ msgid "Use this to accept the action and perform it"
+#~ msgstr "Сохранить и продолжить"
+
+#~ msgid "Use this to continue editing the splits"
+#~ msgstr "Продолжить изменение разделов"
+
+#~ msgid "Leave the dialog and return to where you came from."
+#~ msgstr "Оставить диалог и вернуться в основное окно."
+
+#~ msgid "Open online help"
+#~ msgstr "Открыть справку"
+
+#~ msgid ""
+#~ "Opens the online help and shows detailed information about transaction "
+#~ "searching."
+#~ msgstr ""
+#~ "Открыть справку с детальными инструкциями по использованию поиска "
+#~ "операций."
+
+#~ msgid "What is the opening balance and date of this brokerage account?"
+#~ msgstr "Дата открытия и первоначальный остаток на счёте с учётом комиссии"
+
+#~ msgid "Please enter the payment amount."
+#~ msgstr "Введите сумму платежа."
+
+#~ msgid "Please enter the schedule name."
+#~ msgstr "Введите название планового платежа."
+
+#~ msgid "Please enter the payee name."
+#~ msgstr "Введите имя получателя."
+
+#~ msgid "Please select the account."
+#~ msgstr "Выберите счёт."
+
+#~ msgid ""
+#~ "Use the checking account type to manage activities on your checking "
+#~ "account e.g. payments, checks and cash card purchases."
+#~ msgstr ""
+#~ "Тип \"Пластиковая карта\" предназначен для учёта средств на чековой "
+#~ "книжке или пластиковой карте."
+
+#~ msgid ""
+#~ "Use the savings account type to manage activities on your savings account."
+#~ msgstr ""
+#~ "Тип \"Банковский вклад\" предназначен для учёта средств на банковском "
+#~ "вкладе."
+
+#~ msgid ""
+#~ "Use the credit card account type to manage activities on your credit card."
+#~ msgstr ""
+#~ "Тип \"Кредитная карта\" предназначен для учёта средств на вашей кредитной "
+#~ "карте."
+
+#~ msgid "Use the cash account type to manage activities in your wallet."
+#~ msgstr "Тип \"Наличные\" предназначен для учёта наличных средств."
+
+#~ msgid ""
+#~ "Use the asset account type to manage assets (e.g. your house, car or art "
+#~ "collection)."
+#~ msgstr ""
+#~ "Тип \"Активы\" предназначен для учёта вашего имущества: дома, автомобиля "
+#~ "или коллекции картин."
+
+#~ msgid ""
+#~ "Use the liability account type to manage any type of liability except "
+#~ "amortization loans. Use it for taxes you owe or money you borrowed from "
+#~ "friends. For amortization loans like mortgages you should create a loan "
+#~ "account."
+#~ msgstr ""
+#~ "Тип \"Пассивы\" предназначен для учёта ваших обязательств (кроме "
+#~ "кредитов). Например, налоги или взятие в долг."
+
+#~ msgid ""
+#~ "Use the loan account type to manage amortization loans (e.g. mortgages, "
+#~ "car loan, money you lend, private loans etc.)."
+#~ msgstr ""
+#~ "Тип \"Кредит\" предназначен для учёта средств в виде займов под проценты "
+#~ "(например, кредит на покупку автомобиля, недвижимости и т.п.)."
+
+#~ msgid ""
+#~ "Use the investment account to manage your stock, mutual fund and other "
+#~ "investments."
+#~ msgstr ""
+#~ "Тип \"Инвестиции\" предназначен для учёта средств в виде акций, паёв и т."
+#~ "п."
+
+#~ msgid "Explanation is not yet available! UnknownAccountType will be set"
+#~ msgstr ""
+#~ "Нет подсказки по этому виду. Будет установлен вид UnknownAccountType"
+
+#~ msgid "Account with that name already exists."
+#~ msgstr "Счёт с таким названием уже существует."
+
+#~ msgid "Category with that name already exists."
+#~ msgstr "Статья с таким названием уже существует."
+
+#~ msgid "chkVersion: Element %1 must have version %2"
+#~ msgstr "chkVersion: тег %1 должен иметь версию %2"
diff --git a/po/sk.po b/po/sk.po
new file mode 100644
index 0000000..2d47fde
--- /dev/null
+++ b/po/sk.po
@@ -0,0 +1,15179 @@
+# translation of kmymoney2.po to slovenský
+# This file is put in the public domain.
+#
+# Juraj Búš <juraj@zapisnicek.info>, 2006.
+# Juraj Búš <juraj@bitbait.sk>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmymoney2\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-25 19:04+0200\n"
+"PO-Revision-Date: 2006-10-18 19:56+0200\n"
+"Last-Translator: Juraj Búš <juraj@bitbait.sk>\n"
+"Language-Team: slovenský <sk@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: wizards/wizardpages/rc.cpp:1
+msgid ""
+"Select groups of accounts that correspond to the ways that you will use "
+"KMyMoney. Each group you select will cause several accounts and categories "
+"to be created. Select the groups that are relevant to you. You can always "
+"create additional accounts manually later."
+msgstr ""
+
+#: wizards/wizardpages/rc.cpp:2
+msgid ""
+"<p>KMyMoney supports multiple currencies, nevertheless one of them will be "
+"used as your base currency. The base currency is used as default for new "
+"accounts and reports. Please select the base currency from the following "
+"list."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:71 dialogs/rc.cpp:399 dialogs/rc.cpp:485
+#: dialogs/rc.cpp:724 dialogs/settings/rc.cpp:108 reports/listtable.cpp:226
+#: views/kinvestmentview.cpp:71 views/kpayeesview.cpp:351 views/rc.cpp:13
+#: widgets/rc.cpp:5 widgets/rc.cpp:34
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1599
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1629
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1673
+#: wizards/wizardpages/rc.cpp:3
+msgid "Name"
+msgstr "Meno"
+
+#: wizards/wizardpages/rc.cpp:4
+msgid "ISO Code"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:69 dialogs/kequitypriceupdatedlg.cpp:70
+#: dialogs/rc.cpp:71 dialogs/rc.cpp:725 dialogs/settings/rc.cpp:112
+#: views/kinvestmentview.cpp:72 widgets/rc.cpp:37 wizards/wizardpages/rc.cpp:5
+msgid "Symbol"
+msgstr "Symbol"
+
+#: wizards/wizardpages/rc.cpp:6
+#, fuzzy
+msgid ""
+"<p>Use the fields below to enter some information about yourself.</p>\n"
+"\n"
+"<p>All information is optional and only used to personalize your KMyMoney "
+"file.</p>"
+msgstr "Použiť do informácie n informácie je a je do súbor."
+
+#: dialogs/rc.cpp:425 wizards/newuserwizard/rc.cpp:27
+#: wizards/wizardpages/rc.cpp:7
+msgid "Town:"
+msgstr ""
+
+#: dialogs/rc.cpp:420 wizards/newuserwizard/rc.cpp:22
+#: wizards/wizardpages/rc.cpp:8
+msgid "County/State:"
+msgstr "Krajina/Štát:"
+
+#: dialogs/rc.cpp:391 dialogs/rc.cpp:421 wizards/newuserwizard/rc.cpp:23
+#: wizards/wizardpages/rc.cpp:9
+msgid "Street:"
+msgstr "Ulica:"
+
+#: dialogs/rc.cpp:422 wizards/newuserwizard/rc.cpp:24
+#: wizards/wizardpages/rc.cpp:10
+msgid "Email:"
+msgstr "E-mail:"
+
+#: dialogs/rc.cpp:424 wizards/newuserwizard/rc.cpp:26
+#: wizards/wizardpages/rc.cpp:11
+msgid "Telephone:"
+msgstr "Telefón:"
+
+#: dialogs/rc.cpp:423 wizards/newuserwizard/rc.cpp:25
+#: wizards/wizardpages/rc.cpp:12
+msgid "Your name:"
+msgstr "Vaše meno:"
+
+#: dialogs/rc.cpp:427 wizards/newuserwizard/rc.cpp:29
+#: wizards/wizardpages/rc.cpp:13
+msgid "Load from Addressbook"
+msgstr "Načítať z Adresára"
+
+#: dialogs/rc.cpp:392 dialogs/rc.cpp:426 views/rc.cpp:68
+#: wizards/wizardpages/rc.cpp:14
+msgid "Postal Code:"
+msgstr "PSČ:"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:82
+msgid "KMyMoney New Account Setup"
+msgstr ""
+
+#: dialogs/rc.cpp:360 dialogs/rc.cpp:361 reports/listtable.cpp:230
+#: wizards/newaccountwizard/knewaccountwizard.cpp:83
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1616
+#: wizards/newaccountwizard/rc.cpp:61
+msgid "Institution"
+msgstr "Inštitúcia"
+
+#: dialogs/investactivities.cpp:198 dialogs/investactivities.cpp:286
+#: dialogs/investactivities.cpp:367 dialogs/kfindtransactiondlg.cpp:181
+#: dialogs/rc.cpp:139 dialogs/rc.cpp:192 dialogs/rc.cpp:207
+#: dialogs/transactioneditor.cpp:734 reports/listtable.cpp:201
+#: reports/pivottable.cpp:1336 reports/pivottable.cpp:1586
+#: views/kforecastview.cpp:393 views/kgloballedgerview.cpp:175
+#: views/khomeview.cpp:418 views/khomeview.cpp:491 views/khomeview.cpp:525
+#: views/khomeview.cpp:764 views/khomeview.cpp:967 views/khomeview.cpp:1437
+#: views/kscheduledview.cpp:71 views/rc.cpp:17 views/rc.cpp:44
+#: widgets/kmymoneyaccounttreebase.cpp:58
+#: widgets/kmymoneyaccounttreeforecast.cpp:41 widgets/rc.cpp:109
+#: widgets/register.cpp:566 widgets/transaction.cpp:978
+#: widgets/transaction.cpp:1535
+#: wizards/newaccountwizard/knewaccountwizard.cpp:84
+msgid "Account"
+msgstr "Účet"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:85
+#, fuzzy
+msgid "Broker"
+msgstr "(sprostredkovateľský)"
+
+#: dialogs/kfindtransactiondlg.cpp:225 dialogs/rc.cpp:70 dialogs/rc.cpp:104
+#: dialogs/rc.cpp:159 dialogs/rc.cpp:223 dialogs/rc.cpp:246 dialogs/rc.cpp:751
+#: dialogs/settings/rc.cpp:109 widgets/rc.cpp:35 widgets/register.cpp:568
+#: wizards/newaccountwizard/knewaccountwizard.cpp:86
+msgid "Details"
+msgstr "Detaily"
+
+#: dialogs/knewloanwizard.cpp:636 dialogs/rc.cpp:231 dialogs/rc.cpp:608
+#: kmymoneyutils.cpp:191 views/khomeview.cpp:399
+#: wizards/newaccountwizard/knewaccountwizard.cpp:87
+#: wizards/newaccountwizard/knewaccountwizard.cpp:880
+msgid "Payments"
+msgstr "Platby"
+
+#: dialogs/investactivities.cpp:195 dialogs/investactivities.cpp:283
+#: dialogs/investactivities.cpp:422 dialogs/investtransactioneditor.cpp:217
+#: reports/listtable.cpp:221 widgets/transaction.cpp:1565
+#: wizards/newaccountwizard/knewaccountwizard.cpp:88
+msgid "Fees"
+msgstr "Poplatky"
+
+#: dialogs/rc.cpp:624 views/khomeview.cpp:415 views/khomeview.cpp:488
+#: views/khomeview.cpp:522 wizards/newaccountwizard/knewaccountwizard.cpp:89
+msgid "Schedule"
+msgstr "Plánovanie"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:90
+#, fuzzy
+msgid "Payout"
+msgstr "Zaplatiť do"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:91
+#, fuzzy
+msgid "Parent Account"
+msgstr "Platby účtov"
+
+#: dialogs/rc.cpp:719 wizards/newaccountwizard/knewaccountwizard.cpp:92
+#: wizards/newuserwizard/knewuserwizard.cpp:86
+#, fuzzy
+msgid "Finish"
+msgstr "&Dokončiť"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:248
+#, fuzzy
+msgid "Credit card payment"
+msgstr "Platobná karta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:264
+#, fuzzy, c-format
+msgid "Loan payment for %1"
+msgstr "Pôžička z 1"
+
+#: mymoney/mymoneyscheduled.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:279
+msgid "Loan payment"
+msgstr "Splátka pôžičky"
+
+#: dialogs/rc.cpp:134 wizards/newaccountwizard/knewaccountwizard.cpp:293
+#, fuzzy
+msgid "Amortization"
+msgstr "Amortizácia"
+
+#: dialogs/investactivities.cpp:196 dialogs/investactivities.cpp:284
+#: dialogs/investactivities.cpp:366 dialogs/investactivities.cpp:423
+#: dialogs/investtransactioneditor.cpp:227 dialogs/rc.cpp:135
+#: dialogs/rc.cpp:152 dialogs/rc.cpp:544 reports/listtable.cpp:222
+#: widgets/transaction.cpp:1597
+#: wizards/newaccountwizard/knewaccountwizard.cpp:302
+msgid "Interest"
+msgstr "Úrok"
+
+#: dialogs/kcurrencycalculator.cpp:282
+#: wizards/newaccountwizard/knewaccountwizard.cpp:351
+#: wizards/newaccountwizard/knewaccountwizard.cpp:356
+msgid "User"
+msgstr "Používateľ"
+
+#: kmymoneyutils.cpp:64 mymoney/mymoneyaccount.cpp:711
+#: reports/querytabletest.cpp:422
+#: wizards/newaccountwizard/knewaccountwizard.cpp:451
+msgid "Checking"
+msgstr "Šek"
+
+#: kmymoneyutils.cpp:66 mymoney/mymoneyaccount.cpp:714
+#: wizards/newaccountwizard/knewaccountwizard.cpp:452
+msgid "Savings"
+msgstr "Úspory"
+
+#: kmymoneyutils.cpp:68 mymoney/mymoneyaccount.cpp:717
+#: reports/querytabletest.cpp:423
+#: wizards/newaccountwizard/knewaccountwizard.cpp:453
+msgid "Credit Card"
+msgstr "Platobná karta"
+
+#: kmymoneyutils.cpp:70 mymoney/mymoneyaccount.cpp:720
+#: wizards/newaccountwizard/knewaccountwizard.cpp:454
+msgid "Cash"
+msgstr "Hotovosť"
+
+#: kmymoneyutils.cpp:72 mymoney/mymoneyaccount.cpp:723
+#: wizards/newaccountwizard/knewaccountwizard.cpp:455
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+msgid "Loan"
+msgstr "Pôžička"
+
+#: kmymoneyutils.cpp:76 mymoney/mymoneyaccount.cpp:729
+#: wizards/newaccountwizard/knewaccountwizard.cpp:456
+msgid "Investment"
+msgstr "Investícia"
+
+#: converter/mymoneytemplate.cpp:178 converter/mymoneytemplate.cpp:179
+#: dialogs/knewaccountdlg.cpp:1014 kmymoneyutils.cpp:80
+#: mymoney/mymoneyaccount.cpp:735 views/kaccountsview.cpp:352
+#: views/kmymoneyview.cpp:765 widgets/kmymoneyaccountselector.cpp:177
+#: widgets/kmymoneyaccountselector.cpp:356
+#: wizards/newaccountwizard/knewaccountwizard.cpp:457
+msgid "Asset"
+msgstr "Aktíva"
+
+#: converter/mymoneytemplate.cpp:182 converter/mymoneytemplate.cpp:183
+#: dialogs/knewaccountdlg.cpp:1016 kmymoneyutils.cpp:82
+#: mymoney/mymoneyaccount.cpp:738 views/kaccountsview.cpp:356
+#: views/kmymoneyview.cpp:766 widgets/kmymoneyaccountselector.cpp:178
+#: widgets/kmymoneyaccountselector.cpp:363
+#: wizards/newaccountwizard/knewaccountwizard.cpp:458
+msgid "Liability"
+msgstr "Pasíva"
+
+#: converter/mymoneytemplate.cpp:194 converter/mymoneytemplate.cpp:195
+#: kmymoneyutils.cpp:94 mymoney/mymoneyaccount.cpp:756
+#: views/kaccountsview.cpp:369 views/kmymoneyview.cpp:769
+#: widgets/kmymoneyaccountselector.cpp:181
+#: widgets/kmymoneyaccountselector.cpp:390
+#: wizards/newaccountwizard/knewaccountwizard.cpp:460
+msgid "Equity"
+msgstr "Majetok"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid ""
+"Please make sure to enter the correct conversion for the selected opening "
+"date. If you requested an online quote it might be provided for a different "
+"date."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+#, fuzzy
+msgid "Check date"
+msgstr "Šek"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:562
+msgid "1 %1 equals %2"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:577
+msgid "Conversion rate is not positive"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:583
+msgid "No account name supplied"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:114 mymoney/mymoneyscheduled.cpp:1026
+#: wizards/newaccountwizard/knewaccountwizard.cpp:680
+msgid "Write check"
+msgstr "Zapísať šek"
+
+#: dialogs/keditscheduledlg.cpp:111 mymoney/mymoneyscheduled.cpp:1014
+#: wizards/newaccountwizard/knewaccountwizard.cpp:682
+msgid "Direct debit"
+msgstr "Priamy dlh"
+
+#: dialogs/keditscheduledlg.cpp:113 mymoney/mymoneyscheduled.cpp:1032
+#: wizards/newaccountwizard/knewaccountwizard.cpp:683
+#, fuzzy
+msgid "Bank transfer"
+msgstr "Prevod"
+
+#: dialogs/keditscheduledlg.cpp:112 mymoney/mymoneyscheduled.cpp:1029
+#: wizards/newaccountwizard/knewaccountwizard.cpp:685
+msgid "Standing order"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:110 mymoney/mymoneyscheduled.cpp:1020
+#: wizards/newaccountwizard/knewaccountwizard.cpp:686
+msgid "Manual deposit"
+msgstr "Ručný vklad"
+
+#: dialogs/keditscheduledlg.cpp:109 mymoney/mymoneyscheduled.cpp:1017
+#: wizards/newaccountwizard/knewaccountwizard.cpp:687
+msgid "Direct deposit"
+msgstr "Priamy vklad"
+
+#: dialogs/keditscheduledlg.cpp:115 mymoney/mymoneyscheduled.cpp:1023
+#: wizards/newaccountwizard/knewaccountwizard.cpp:688
+#, fuzzy
+msgid "Other"
+msgstr "Iné"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:697
+msgid "CreditCard %1 monthly payment"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:703
+msgid "Finish entry and create account"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:705
+#, fuzzy
+msgid "Finish entry and create account and schedule"
+msgstr "Použiť do a nové."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:708
+msgid "Next due date is prior to opening date"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:712
+#, fuzzy
+msgid "No account selected"
+msgstr "Výber účtu"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:716
+msgid "No amount for payment selected"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:720
+msgid "No payee for payment selected"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:724
+msgid "No name assigned for schedule"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:805
+msgid "No payee supplied"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:819
+#, fuzzy
+msgid "No opening balance supplied"
+msgstr "Počiatočný stav"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:826
+msgid "An interest change can only happen after the first payment"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:615 dialogs/knewloanwizard.cpp:634
+#: wizards/newaccountwizard/knewaccountwizard.cpp:884
+#: wizards/newaccountwizard/rc.cpp:55
+msgid "Months"
+msgstr "Mesiace"
+
+#: dialogs/knewloanwizard.cpp:616 dialogs/knewloanwizard.cpp:635
+#: wizards/newaccountwizard/knewaccountwizard.cpp:885
+#: wizards/newaccountwizard/knewaccountwizard.cpp:889
+#: wizards/newaccountwizard/rc.cpp:56
+msgid "Years"
+msgstr "Roky"
+
+#: dialogs/knewloanwizard.cpp:711
+#: wizards/newaccountwizard/knewaccountwizard.cpp:961
+#, fuzzy, c-format
+msgid "KMyMoney has calculated the amount of the loan as %1."
+msgstr "z."
+
+#: dialogs/knewloanwizard.cpp:718
+#: wizards/newaccountwizard/knewaccountwizard.cpp:968
+#, fuzzy
+msgid "KMyMoney has calculated the interest rate to %1%."
+msgstr "do."
+
+#: dialogs/knewloanwizard.cpp:731
+#: wizards/newaccountwizard/knewaccountwizard.cpp:981
+#, fuzzy
+msgid ""
+"KMyMoney has calculated a periodic payment of %1 to cover principal and "
+"interest."
+msgstr "a z do Obal a."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:993
+#, fuzzy, c-format
+msgid ""
+"The number of payments has been decremented and the balloon payment has been "
+"modified to %1."
+msgstr "číslo z a zmenené do."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1001
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1021
+#, fuzzy, c-format
+msgid "The balloon payment has been modified to %1."
+msgstr "zmenené do."
+
+#: dialogs/knewloanwizard.cpp:763
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1013
+#, fuzzy
+msgid "KMyMoney has calculated the term of your loan as %1. "
+msgstr "pojem z "
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1052
+#, fuzzy
+msgid "KMyMoney has calculated a balloon payment of %1 for this loan."
+msgstr "a z pre."
+
+#: dialogs/knewloanwizard.cpp:809
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1059
+#, fuzzy
+msgid "KMyMoney has successfully verified your loan information."
+msgstr "informácie."
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1067
+#, fuzzy
+msgid ""
+"You have entered mis-matching information. Please modify your figures or "
+"leave one value empty to let KMyMoney calculate it for you"
+msgstr "Vy informácie do strana a alebo jeden prázdna do pre"
+
+#: dialogs/knewloanwizard.cpp:504 dialogs/knewloanwizard.cpp:513
+#: dialogs/knewloanwizard.cpp:522 dialogs/knewloanwizard.cpp:532
+#: dialogs/knewloanwizard.cpp:820
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1070
+msgid "Calculation error"
+msgstr "Výpočet chyby"
+
+#: dialogs/knewloanwizard.cpp:824
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1074
+#, fuzzy
+msgid ""
+"\n"
+"\n"
+"Accept this or modify the loan information and recalculate."
+msgstr "n alebo informácie a."
+
+#: dialogs/knewloanwizard.cpp:826
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1076
+msgid "Calculation successful"
+msgstr "Výpočet úspešný"
+
+#: dialogs/knewloanwizard.cpp:846
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1129
+#, c-format
+msgid ""
+"_n: one month\n"
+"%n months"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:850
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1133
+#, c-format
+msgid ""
+"_n: one year\n"
+"%n years"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:854
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1137
+#, c-format
+msgid ""
+"_n: one payment\n"
+"%n payments"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1190
+msgid "Press Calculate to verify the values"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1194
+msgid "Not all details supplied"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:70 dialogs/knewloanwizard.cpp:122
+#: dialogs/knewloanwizard.cpp:136
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1381
+msgid "&Create..."
+msgstr "&Vytvoriť..."
+
+#: dialogs/knewloanwizard.cpp:138
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1383
+#, fuzzy
+msgid "Create a new asset account"
+msgstr "Vytvoriť a nové account"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1384
+#, fuzzy
+msgid ""
+"If the asset account does not yet exist, press this button to create it."
+msgstr "do?"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1596
+#, fuzzy
+msgid "Account information"
+msgstr "Nastavenia účtu"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1601
+#: wizards/newaccountwizard/rc.cpp:59
+#, fuzzy
+msgid "Subaccount of"
+msgstr "Podúčet"
+
+#: dialogs/rc.cpp:225 dialogs/rc.cpp:326 dialogs/rc.cpp:371 dialogs/rc.cpp:723
+#: plugins/ofximport/dialogs/rc.cpp:23 reports/listtable.cpp:225
+#: widgets/kmymoneyaccounttreebase.cpp:113 widgets/register.cpp:61
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1606
+msgid "Type"
+msgstr "Typ"
+
+#: dialogs/kcurrencyeditdlg.cpp:62 dialogs/rc.cpp:56 dialogs/rc.cpp:59
+#: dialogs/rc.cpp:75 dialogs/rc.cpp:727 dialogs/rc.cpp:792
+#: kmymoneyutils.cpp:84 kmymoneyutils.cpp:111 mymoney/mymoneyaccount.cpp:741
+#: mymoney/mymoneysecurity.cpp:169 reports/listtable.cpp:233
+#: widgets/kmymoneypriceview.cpp:127
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1607
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1630
+#: wizards/newaccountwizard/rc.cpp:6 wizards/newaccountwizard/rc.cpp:24
+msgid "Currency"
+msgstr "Mena"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1608
+#: wizards/newaccountwizard/rc.cpp:7 wizards/newuserwizard/rc.cpp:9
+#, fuzzy
+msgid "Opening date"
+msgstr "Online aktualizácia"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1610
+#: wizards/newaccountwizard/rc.cpp:9
+#, fuzzy
+msgid "Conversion rate"
+msgstr "Úroková miera"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1613
+#: wizards/newaccountwizard/rc.cpp:15 wizards/newuserwizard/rc.cpp:13
+#, fuzzy
+msgid "Opening balance"
+msgstr "Počiatočný stav"
+
+#: dialogs/keditscheduledlg.cpp:507 dialogs/transactioneditor.cpp:784
+#: dialogs/transactioneditor.cpp:848 plugins/ofximport/dialogs/rc.cpp:22
+#: widgets/rc.cpp:111 widgets/register.cpp:59 widgets/transaction.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1618
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1632
+msgid "Number"
+msgstr "Číslo"
+
+#: dialogs/rc.cpp:365 wizards/newaccountwizard/knewaccountwizard.cpp:1621
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1634
+#: wizards/newaccountwizard/rc.cpp:26 wizards/newaccountwizard/rc.cpp:66
+msgid "IBAN"
+msgstr "IBAN"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1627
+#, fuzzy
+msgid "Brokerage Account"
+msgstr "Účet"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1640
+#, fuzzy
+msgid "Loan information"
+msgstr "Informácie o platbách"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1643
+#, fuzzy
+msgid "Amount borrowed"
+msgstr "požičané"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1645
+#, fuzzy
+msgid "Amount lent"
+msgstr "Množstvo"
+
+#: dialogs/rc.cpp:515 dialogs/rc.cpp:546
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1647
+#: wizards/newaccountwizard/rc.cpp:75
+msgid "Interest rate"
+msgstr "Úroková miera"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1648
+#, fuzzy
+msgid "Interest rate is"
+msgstr "Úroková miera"
+
+#: dialogs/rc.cpp:509 dialogs/rc.cpp:572
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1649
+#, fuzzy
+msgid "Principal and interest"
+msgstr "Kapitál a"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1650
+#: wizards/newaccountwizard/rc.cpp:90
+#, fuzzy
+msgid "Additional fees"
+msgstr "Ďalšie príspevky:"
+
+#: dialogs/rc.cpp:525 wizards/newaccountwizard/knewaccountwizard.cpp:1651
+#: wizards/newaccountwizard/rc.cpp:44
+msgid "Payment frequency"
+msgstr "Frekvencia splátky"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1652
+#: wizards/newaccountwizard/rc.cpp:105
+#, fuzzy
+msgid "Payment account"
+msgstr "Platby účtov"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1655
+#, fuzzy
+msgid "Payout information"
+msgstr "Informácie o platbách"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1658
+#, fuzzy
+msgid "Refinance"
+msgstr "Preme&novať"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1661
+#, fuzzy
+msgid "Transfer amount to"
+msgstr "Prevod do"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1663
+#, fuzzy
+msgid "Transfer amount from"
+msgstr "Prevod z"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1665
+#, fuzzy
+msgid "Payment date"
+msgstr "Platby do"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1671
+#, fuzzy
+msgid "Schedule information"
+msgstr "Plánované prevody"
+
+#: reports/listtable.cpp:228
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1684
+#, fuzzy
+msgid "Occurence"
+msgstr "Meny"
+
+#: mymoney/mymoneyscheduled.cpp:891 mymoney/mymoneyscheduled.cpp:947
+#: mymoney/mymoneyscheduled.cpp:1283 mymoney/mymoneyscheduletest.cpp:1343
+#: widgets/rc.cpp:19 widgets/rc.cpp:74
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+msgid "Monthly"
+msgstr "Mesačne"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1677
+#, fuzzy
+msgid "Paid from"
+msgstr "Platné od:"
+
+#: widgets/kmymoneycombo.cpp:473 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1678
+msgid "Pay to"
+msgstr "Zaplatiť do"
+
+#: dialogs/investactivities.cpp:197 dialogs/investactivities.cpp:285
+#: dialogs/investactivities.cpp:365 dialogs/kfindtransactiondlg.cpp:197
+#: dialogs/kmymoneysplittable.cpp:80 dialogs/rc.cpp:51 dialogs/rc.cpp:212
+#: reports/listtable.cpp:197 views/khomeview.cpp:421 views/khomeview.cpp:494
+#: views/khomeview.cpp:528 views/kscheduledview.cpp:73 views/rc.cpp:63
+#: widgets/register.cpp:58 widgets/transaction.cpp:1055
+#: widgets/transaction.cpp:1578 widgets/transaction.cpp:1610
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1679
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1685
+msgid "Amount"
+msgstr "Suma"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1680
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1686
+#, fuzzy
+msgid "First payment due"
+msgstr "Prvý zapnuté"
+
+#: dialogs/rc.cpp:102 wizards/newaccountwizard/knewaccountwizard.cpp:1681
+#: wizards/newaccountwizard/rc.cpp:115
+msgid "Payment method"
+msgstr "Spôsob platby"
+
+#: wizards/newaccountwizard/rc.cpp:1
+msgid ""
+"This page summarizes the data you have entered. Press <b>Finish</b> to "
+"create the account, schedules, etc. or use <b>Back</b> to modify your "
+"entries."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:2
+#, fuzzy
+msgid "Item"
+msgstr "pojem"
+
+#: dialogs/rc.cpp:110 dialogs/rc.cpp:165 dialogs/rc.cpp:252 dialogs/rc.cpp:757
+#: dialogs/rc.cpp:818 views/kinvestmentview.cpp:74 widgets/register.cpp:574
+#: wizards/newaccountwizard/rc.cpp:3
+msgid "Value"
+msgstr "Hodnota"
+
+#: wizards/newaccountwizard/rc.cpp:4
+msgid ""
+"Enter the name of the account under which it is known within KMyMoney.\n"
+"Select the type for the new account. Use the <b>What's this?</b> feature to "
+"see more details about the various account types.\n"
+"Enter the date the account was opened and its currency."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:5
+msgid "Select the currency in which this account is denominated."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:8
+msgid ""
+"The opening balance is the balance of the account when you start using it "
+"with KMyMoney. For new accounts this is usually 0 but for existing accounts "
+"this may well differ. Please consult the account statements to figure out "
+"this value. The opening balance is to be provided in the currency of the "
+"account as selected with the currency button."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:10
+#, fuzzy
+msgid ""
+"The opening date would be the date of the last statement. In case you want "
+"to keep track of transactions prior to this date, enter the ending balance "
+"and statement date of a prior statement and add all following transactions "
+"into KMyMoney.\n"
+"<br>\n"
+"<i>Note</i>: If you do not know the exact amount of the opening balance, "
+"enter an estimate. You can change this value later before you reconcile this "
+"account for the first time."
+msgstr ""
+"Zadať z do z do dátum z a a všetky\n"
+"<br> do account z dátum z otvára sa Vy account."
+
+#: dialogs/rc.cpp:52 dialogs/rc.cpp:54 dialogs/rc.cpp:57 dialogs/rc.cpp:60
+#: dialogs/rc.cpp:748 dialogs/rc.cpp:749 dialogs/rc.cpp:768 widgets/rc.cpp:6
+#: widgets/rc.cpp:7 widgets/rc.cpp:8 widgets/rc.cpp:9 widgets/rc.cpp:10
+#: widgets/rc.cpp:11 widgets/rc.cpp:12 widgets/rc.cpp:13 widgets/rc.cpp:14
+#: widgets/rc.cpp:15 widgets/rc.cpp:16 widgets/rc.cpp:17
+#: wizards/newaccountwizard/rc.cpp:11 wizards/newaccountwizard/rc.cpp:88
+#: wizards/newaccountwizard/rc.cpp:91 wizards/newaccountwizard/rc.cpp:93
+#: wizards/newuserwizard/rc.cpp:14
+msgid "xxx"
+msgstr "xxx"
+
+#: wizards/newaccountwizard/rc.cpp:12
+#, fuzzy
+msgid "Account type"
+msgstr "Názov účtu"
+
+#: wizards/newaccountwizard/rc.cpp:13
+msgid ""
+"For foreign currencies an initial conversion rate needs to be provided. This "
+"should be the price of the foreign currency in the base currency on the "
+"opening date of the account."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:14
+#, fuzzy
+msgid "Account name"
+msgstr "Názov účtu"
+
+#: wizards/newaccountwizard/rc.cpp:16
+msgid ""
+"<p><b>Checking</b>\n"
+"Use the checking account type to manage activities on your checking account "
+"e.g. payments, checks and cash card purchases.</p>\n"
+"\n"
+"<p><b>Savings</b>\n"
+"Use the savings account type to manage activities on your savings account.</"
+"p>\n"
+"\n"
+"<p><b>Credit Card</b>\n"
+"Use the credit card account type to manage activities on your credit card.</"
+"p>\n"
+"\n"
+"<p><b>Cash</b>\n"
+"\n"
+"Use the cash account type to manage activities in your wallet.</p>\n"
+"\n"
+"<p><b>Loan</b>\n"
+"Use the loan account type to manage amortization loans (e.g. mortgages, car "
+"loan, money you lend, private loans etc.).</p>\n"
+"\n"
+"<p><b>Investment</b>\n"
+"Use the investment account to manage your stock, mutual fund and other "
+"investments.</p>\n"
+"\n"
+"<p><b>Asset</b>\n"
+"Use the asset account type to manage assets (e.g. your house, car or art "
+"collection).</p>\n"
+"\n"
+"<p><b>Liability</b>\n"
+"Use the liability account type to manage any type of liability except "
+"amortization loans. Use it for taxes you owe or money you borrowed from "
+"friends. For amortization loans like mortgages you should create a loan "
+"account.</p>"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:17
+msgid "Preferred account"
+msgstr "Preferovaný účet"
+
+#: wizards/newaccountwizard/rc.cpp:18
+#, fuzzy
+msgid ""
+"Mark this checkbox if the account should be maintained as preferred account"
+msgstr "Označ account preferované account"
+
+#: wizards/newaccountwizard/rc.cpp:19
+#, fuzzy
+msgid ""
+"Selecting the <b>Preferred Account</b> checkbox will allow preferred access "
+"in some dialogs and views of KMyMoney."
+msgstr "<b> Preferovaný Účet</b> preferované v niečo."
+
+#: wizards/newaccountwizard/rc.cpp:20
+msgid "Enter a name under which this account is known within KMyMoney."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:21
+#, fuzzy
+msgid "Online quote"
+msgstr "Úvodzovky"
+
+#: wizards/newaccountwizard/rc.cpp:22
+#, fuzzy
+msgid ""
+"Does this investment account have a brokerage account?<p>\n"
+"\n"
+"<b>Check</b> the mark if this investment account has an associated account "
+"for money that is not invested.<br>\n"
+"\n"
+"<b>Uncheck</b> it if you don't use this account for active stock brokerage. "
+"You should also uncheck it if this account is not maintained by a bank or "
+"broker."
+msgstr ""
+"Vybrať<b> Áno</b> account account pre je<br> n<b> Nie</b> account pre "
+"aktívny Vy<b> Nie</b> account je a alebo."
+
+#: wizards/newaccountwizard/rc.cpp:23
+#, fuzzy
+msgid "Create brokerage account"
+msgstr "Účet"
+
+#: wizards/newaccountwizard/rc.cpp:25 wizards/newaccountwizard/rc.cpp:64
+#, fuzzy
+msgid "Account number"
+msgstr "Číslo účtu"
+
+#: wizards/newaccountwizard/rc.cpp:27
+msgid ""
+"Please select the required options. Please use the <b>What's this?</b> "
+"feature to see more information about the items."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:28
+#, fuzzy
+msgid "What is the type of the loan?"
+msgstr "je meno z account?"
+
+#: dialogs/rc.cpp:481 wizards/newaccountwizard/rc.cpp:29
+#, fuzzy
+msgid "I am borrowing money"
+msgstr "I dopoludnia"
+
+#: dialogs/rc.cpp:482 wizards/newaccountwizard/rc.cpp:30
+#, fuzzy
+msgid "I am lending money"
+msgstr "I dopoludnia"
+
+#: wizards/newaccountwizard/rc.cpp:31
+#, fuzzy
+msgid "Who is the payee/payer of the loan?"
+msgstr "je meno z account?"
+
+#: wizards/newaccountwizard/rc.cpp:32
+msgid ""
+"Enter the name of the person or bank you owe money or who owes you money.\n"
+"\n"
+"If the name does not exist within KMyMoney's database, you are asked if you "
+"want to create it."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:33
+msgid "Did you make/receive any payments yet?"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:36
+#, fuzzy
+msgid ""
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?\n"
+"\n"
+"Note: Payments made to obtain the loan (e.g. Disagio) are not considered as "
+"payments in this context."
+msgstr "Poznámka Platby do e g v."
+
+#: wizards/newaccountwizard/rc.cpp:37
+#, fuzzy
+msgid "Which payments do you want to record?"
+msgstr "typ z account do?"
+
+#: wizards/newaccountwizard/rc.cpp:38
+#, fuzzy
+msgid "All payments"
+msgstr "Platby"
+
+#: wizards/newaccountwizard/rc.cpp:39
+#, fuzzy
+msgid "Start with this year's payments"
+msgstr "Štart strana"
+
+#: wizards/newaccountwizard/rc.cpp:40
+msgid ""
+"<qt>Select which transactions should be recorded.\n"
+"\n"
+"<b>All payments</b> allows you to enter all payments made for this loan.\n"
+"\n"
+"The option to <b>start from the beginning of the current year</b> is meant "
+"for loans that are active for a longer period of time already and you don't "
+"want to enter all transactions of the past.\n"
+"</qt>"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:41
+msgid "Balance before start of recording"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:42
+msgid ""
+"Enter the ending balance found on the statement that is the last one before "
+"you want to start recording this loan in KMyMoney."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:43
+msgid ""
+"You have selected to record only payments from the beginning of this year. "
+"Since prior transactions will not be recorded, you need to supply the "
+"balance of the loan on January 1st of this year."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:45
+msgid "Interest Compounding frequency"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:46
+msgid ""
+"Select the frequency with which the interest is compounded. If uncertain, "
+"select the same as the payment frequency. Consult your loan contract for "
+"details."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:47
+#, fuzzy
+msgid "Due date of first payment to be recorded"
+msgstr "Dátum prvej splátky"
+
+#: wizards/newaccountwizard/rc.cpp:48
+msgid ""
+"Depending on the answer to <b>What do you want to record?</b> this field "
+"means the following:<p>\n"
+"\n"
+"<b>All payments</b><br>\n"
+"Enter the due date of the very first payment<p>\n"
+"\n"
+"<b>Start with this year's payments</b><br>\n"
+"Enter the due date of the first payment in the current year"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:49
+#, fuzzy
+msgid "Type of interest rate"
+msgstr "Typ úroku"
+
+#: wizards/newaccountwizard/rc.cpp:50
+#, fuzzy
+msgid "Fixed"
+msgstr "Pole"
+
+#: wizards/newaccountwizard/rc.cpp:51
+#, fuzzy
+msgid "Variable"
+msgstr "Hodnota"
+
+#: wizards/newaccountwizard/rc.cpp:52
+#, fuzzy
+msgid "Time between interest changes"
+msgstr "Dátum z"
+
+#: dialogs/knewloanwizard.cpp:613 wizards/newaccountwizard/rc.cpp:53
+msgid "Days"
+msgstr "Dni"
+
+#: dialogs/knewloanwizard.cpp:614 wizards/newaccountwizard/rc.cpp:54
+msgid "Weeks"
+msgstr "Týždne"
+
+#: wizards/newaccountwizard/rc.cpp:57
+#, fuzzy
+msgid "Next interest change is due"
+msgstr "Ďalší zapnuté"
+
+#: wizards/newaccountwizard/rc.cpp:58
+#, fuzzy
+msgid "This page allows you to select the parent account."
+msgstr "a account."
+
+#: wizards/newaccountwizard/rc.cpp:60
+#, fuzzy
+msgid ""
+"If this account is managed by an institution please select the institution "
+"from the list. If the institution does not exist yet, please choose the "
+"<b>New Institution</b> button to create it. Otherwise, leave this field "
+"empty.\n"
+"Enter the account number used by the institution to identify the account."
+msgstr ""
+"account je z zoznam<b> Nový Institúcia</b> do\n"
+"<br> pole prázdna."
+
+#: wizards/newaccountwizard/rc.cpp:62
+msgid "Select the institution which manages this account or leave empty"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:63
+#, fuzzy
+msgid "New Institution"
+msgstr "Nová inštitúcia"
+
+#: wizards/newaccountwizard/rc.cpp:65
+msgid ""
+"Accounts managed by an institution are usually referenced by a unique number "
+"the so called account number. Enter that number here.\n"
+"\n"
+"KMyMoney currently uses this number only for some online banking functions."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:67
+msgid "Enter the International Bank Account Number into this field"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:68
+msgid ""
+"You can enter the IBAN (International Bank Account Number) into this field "
+"if you know it. Usually, people at your institution can tell you the number "
+"or it is printed on your statements.\n"
+"\n"
+"See also http://en.wikipedia.org/wiki/International_Bank_Account_Number for "
+"more information.\n"
+"\n"
+"KMyMoney keeps this field only for documentation purposes and does not use "
+"it otherwise."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:69
+msgid ""
+"Now enter the details for your loan. You can leave one of the fields empty "
+"and KMyMoney will calculate it when you press the <b>Calculate</b> button. "
+"Before you can continue with the next page you also need to press "
+"<b>Calculate</b> so that KMyMoney can check the logical correctness of the "
+"values you have supplied."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:70
+#, fuzzy
+msgid "The interest rate gets calculated"
+msgstr "Výpočet úroku"
+
+#: wizards/newaccountwizard/rc.cpp:71
+#, fuzzy
+msgid "when the payment is received"
+msgstr "je."
+
+#: wizards/newaccountwizard/rc.cpp:72
+#, fuzzy
+msgid "when the payment is due"
+msgstr "je."
+
+#: dialogs/rc.cpp:531 dialogs/rc.cpp:533 wizards/newaccountwizard/rc.cpp:73
+msgid "Loan amount"
+msgstr "Suma pôžičky"
+
+#: wizards/newaccountwizard/rc.cpp:74
+msgid ""
+"Enter the amount of the loan in this field. If you want to calculate this "
+"field out of the other parameters, please leave it empty. If the field is "
+"marked as required (colored background) you have informed KMyMoney about the "
+"fact that there were already some payments towards the loan. In this case, "
+"please enter the ending balance of your last statement."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:76
+#, fuzzy
+msgid ""
+"Please enter the interest rate in percent or leave the field empty to "
+"calculate it."
+msgstr "alebo pole prázdna do."
+
+#: dialogs/rc.cpp:559 wizards/newaccountwizard/rc.cpp:77
+msgid "Term"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:78
+#, fuzzy
+msgid ""
+"Please enter the term of this loan or enter 0 to calculate it. The term is "
+"the time that is required to fully repay the loan. This time might be "
+"different from the time your loan contract is signed for."
+msgstr "pojem z alebo pole prázdna do pojem je čas je do čas z čas je pre."
+
+#: wizards/newaccountwizard/rc.cpp:79
+#, fuzzy
+msgid "Payment (principal and interest)"
+msgstr "istina a zisk"
+
+#: wizards/newaccountwizard/rc.cpp:80
+#, fuzzy
+msgid ""
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr "pre a alebo pole prázdna do."
+
+#: wizards/newaccountwizard/rc.cpp:81
+#, fuzzy
+msgid "Balloon payment"
+msgstr "jeden úrok"
+
+#: wizards/newaccountwizard/rc.cpp:82
+#, fuzzy
+msgid ""
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr "z a alebo pole prázdna do."
+
+#: wizards/newaccountwizard/rc.cpp:83
+#, fuzzy
+msgid "Calculate"
+msgstr "Vypočítať"
+
+#: wizards/newaccountwizard/rc.cpp:84
+msgid "Press this button to calculate/verify your loan details."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:85
+msgid ""
+"Pressing this button calculates a possibly missing parameter for your loan "
+"or verifies that the values entered match. If something is not correct you "
+"will receive information about it."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:86
+#, fuzzy
+msgid ""
+"Now enter the information required for the periodic loan payments. If your "
+"regular payments contains any additional fees, click on the <b>Additional "
+"fees</b> button to enter them."
+msgstr "previdelný obsahuje akýkoľvek zapnuté do."
+
+#: wizards/newaccountwizard/rc.cpp:87
+#, fuzzy
+msgid "Principal + Interest"
+msgstr "Kapitál + úrok:"
+
+#: dialogs/rc.cpp:620 wizards/newaccountwizard/rc.cpp:89
+msgid "+"
+msgstr "+"
+
+#: wizards/newaccountwizard/rc.cpp:92
+#, fuzzy
+msgid "= periodical payments"
+msgstr "Pravidelná splátka:"
+
+#: dialogs/rc.cpp:643 wizards/newaccountwizard/rc.cpp:94
+#, fuzzy
+msgid ""
+"If this loan is for an asset, such as a car or a house, you can create the "
+"asset account now. An asset account represents the total value of an asset. "
+"The money from this loan will be transfered into the asset account you "
+"create or select.\n"
+"If this loan is a 'consumer loan' (money to use however you want), you can "
+"use a checking account instead."
+msgstr ""
+"je pre a alebo a account teraz account celkovom z z account alebo je a do a "
+"kontrolujem account."
+
+#: dialogs/rc.cpp:644 wizards/newaccountwizard/rc.cpp:95
+msgid "Don't create payout transaction"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:96
+msgid "Refinance existing loan"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:97
+msgid ""
+"Check this if you are refinancing a loan that already exists in KMyMoney"
+msgstr ""
+
+#: dialogs/rc.cpp:642 wizards/newaccountwizard/rc.cpp:98
+msgid "Asset Account"
+msgstr "Aktíva účtu"
+
+#: dialogs/rc.cpp:2 wizards/newaccountwizard/rc.cpp:99
+#, fuzzy
+msgid "Create"
+msgstr "Vytvoriť"
+
+#: wizards/newaccountwizard/rc.cpp:100
+#, fuzzy
+msgid "Loan account"
+msgstr "Suma pôžičky"
+
+#: dialogs/rc.cpp:646 wizards/newaccountwizard/rc.cpp:101
+msgid "Date of payment"
+msgstr "Dátum platby"
+
+#: wizards/newaccountwizard/rc.cpp:102
+#, fuzzy
+msgid ""
+"KMyMoney creates a schedule for this payment and reminds you whenever a "
+"payment must be made. Please select the account to/from which payments will "
+"be made and the category the interest will be assigned to.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"a pre a a<p> do záznam všetky dátum do záznam roky<b> Prvý dátum</b> je "
+"dátum z prvý v rok."
+
+#: dialogs/rc.cpp:613 wizards/newaccountwizard/rc.cpp:103
+msgid "Interest category"
+msgstr "Kategória úroku"
+
+#: wizards/newaccountwizard/rc.cpp:104
+msgid ""
+"The category the interest part of the payment will be assigned to. If you "
+"borrow money you usually have to pay interest, so this should be an expense "
+"category. If you lend the money, you receive the interest. In this case, "
+"select an income category here."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:106
+msgid ""
+"Select the account from which you make your periodical payments or where you "
+"receive regular payments in case you lend the money. In most cases, this is "
+"a checking account."
+msgstr ""
+
+#: dialogs/rc.cpp:519 wizards/newaccountwizard/rc.cpp:107
+#, fuzzy
+msgid "First payment due on"
+msgstr "Prvý zapnuté"
+
+#: wizards/newaccountwizard/rc.cpp:108
+msgid ""
+"For credit card accounts you can create a monthly schedule which will "
+"automatically remind you about the payment. Please fill in the details about "
+"this payment here."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:109
+#, fuzzy
+msgid "Yes, remind me when the payment is due"
+msgstr "Áno je"
+
+#: wizards/newaccountwizard/rc.cpp:110
+#, fuzzy
+msgid "Name of schedule"
+msgstr "Nový plán"
+
+#: dialogs/rc.cpp:151 dialogs/rc.cpp:218 dialogs/rc.cpp:219
+#: reports/listtable.cpp:199 views/kscheduledview.cpp:72 widgets/rc.cpp:113
+#: widgets/register.cpp:57 wizards/newaccountwizard/rc.cpp:111
+msgid "Payee"
+msgstr "Príjemca"
+
+#: wizards/newaccountwizard/rc.cpp:112
+msgid "Estimated monthly payment"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:113
+#, fuzzy
+msgid "Due date of next payment"
+msgstr "Daň dátum z"
+
+#: wizards/newaccountwizard/rc.cpp:114
+#, fuzzy
+msgid ""
+"Payment should be made\n"
+"from account"
+msgstr "Platba account"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:79
+#, fuzzy
+msgid "KMyMoney New File Setup"
+msgstr "Nie súbor"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:81
+#, fuzzy
+msgid "Introduction"
+msgstr "Inštitúcia"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:82
+#, fuzzy
+msgid "Personal Data"
+msgstr "Osobné Dáta."
+
+#: wizards/newuserwizard/knewuserwizard.cpp:83
+#, fuzzy
+msgid "Select Currency"
+msgstr "Vybrať základnú menu"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:84
+#, fuzzy
+msgid "Select Accounts"
+msgstr "Zvoliť účet:"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:85
+msgid "Set preferences"
+msgstr ""
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+#, fuzzy
+msgid ""
+"Unable to load data, because no contact has been associated with the owner "
+"of the standard addressbook."
+msgstr "do nie z adresár."
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+#, fuzzy
+msgid "Addressbook import"
+msgstr "Import adresára"
+
+#: wizards/newuserwizard/rc.cpp:1
+msgid ""
+"A typical KMyMoney user maintains a checking a account with some institution "
+"and uses it to receive money or pay bills. If this is not the case, please "
+"deselect the checkbox below and continue on the next page."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:2
+msgid "I have a checking account that I want to manage with KMyMoney"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:3
+msgid "The name of the instititution that issued the account."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:4
+msgid ""
+"Each institution has a routing number. Enter it here. If uncertain, leave "
+"the field blank. You can modify it later."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:5
+#, fuzzy
+msgid "Name of the institution"
+msgstr "Názov pôžičky"
+
+#: wizards/newuserwizard/rc.cpp:6
+#, fuzzy
+msgid "Routing number"
+msgstr "Číslo:"
+
+#: wizards/newuserwizard/rc.cpp:7
+msgid ""
+"In general the institution that issued the account also issued a number for "
+"it. Enter it here. If uncertain, you can modify this entry later."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:8
+msgid ""
+"Enter a descriptive name that will be used by KMyMoney to identify your "
+"checking account."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:10
+msgid ""
+"Enter the date from when on you plan to keep track of the transactions in "
+"that account. This is usually the date of the last statement. If uncertain, "
+"leave as is."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:11
+#, fuzzy
+msgid "Number of the account"
+msgstr "Názov pôžičky"
+
+#: wizards/newuserwizard/rc.cpp:12
+#, fuzzy
+msgid "Name of the account"
+msgstr "Názov pôžičky"
+
+#: wizards/newuserwizard/rc.cpp:15
+msgid ""
+"Enter the opening balance of the account. This is usually the ending balance "
+"of the last statement. If uncertain, leave as is."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:16
+msgid ""
+"The fields below allow you to enter some information about your checking "
+"account. Once this wizard finishes, the account will be created for you "
+"within KMyMoney."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:17
+msgid ""
+"KMyMoney supports multiple currencies. Your reports will be based on a "
+"default curreny which you can select here. The default for new accounts is "
+"also the currency you select here."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:18
+msgid ""
+"KMyMoney will store your financial data in a file on the disk. A standard "
+"filename within your KDE user environment will be the default. This is just "
+"provided for convenience and you can choose any other location here."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:19
+msgid ""
+"Either the currently selected file exists or the selected directory does not "
+"exist. Please make sure, that\n"
+"\n"
+"<ul>\n"
+"<li>the selected directory exists and</li>\n"
+"<li>the filename is not currently used in this directory.</li>\n"
+"</ul>"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:20
+msgid ""
+"This finishes the setup of your KMyMoney environment. You can now press the "
+"Finish button and start using KMyMoney to record your financial transactions."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:21
+#, fuzzy
+msgid ""
+"Please enter some information about yourself.<br><br>\n"
+"\n"
+"This information will be seen and used only by you. The information is used "
+"to personalize KMyMoney, to encrypt your file, etc."
+msgstr "Použiť do informácie n informácie je a je do súbor."
+
+#: wizards/newuserwizard/rc.cpp:28
+msgid "Zip code"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:30
+msgid "Welcome to KMyMoney!"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:31
+msgid ""
+"You have started KMyMoney for the first time on this computer. Before this "
+"program can help you to manage your finances, it needs to collect some data "
+"from you.<p>\n"
+"\n"
+"On the next few pages you will be guided through the steps necessary to "
+"setup the program. This will happen only once."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:32
+msgid ""
+"<p>KMyMoney can encrypt your datafile using GPG Encryption. GPG encryption "
+"is one of the most secure methods in the world for protecting data. All of "
+"your account numbers and other important financial information will be very "
+"secure.</p>"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:33
+msgid ""
+"If you would like to review or change any preference settings for KMyMoney "
+"at this time, you can do so here. If not just click <b>Next</b>."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:34
+msgid "Configure preferences now"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:35
+msgid ""
+"You can change the configuration options at any time using the configuration "
+"dialog. Just select the <b>Configure KMyMoney...</b> option in the "
+"<b>Settings</b> menu."
+msgstr ""
+
+#: dialogs/rc.cpp:83 dialogs/rc.cpp:411 dialogs/rc.cpp:435
+#: kmymoneyutils.cpp:92 kmymoneyutils.cpp:105 mymoney/mymoneyaccount.cpp:753
+#: mymoney/mymoneysecurity.cpp:160
+#, fuzzy
+msgid "Stock"
+msgstr "Zásoba"
+
+#: dialogs/rc.cpp:84 dialogs/rc.cpp:412 dialogs/rc.cpp:436
+#: kmymoneyutils.cpp:107 mymoney/mymoneysecurity.cpp:163
+#, fuzzy
+msgid "Mutual Fund"
+msgstr "Investičný fond"
+
+#: dialogs/rc.cpp:85 dialogs/rc.cpp:413 dialogs/rc.cpp:437
+#: kmymoneyutils.cpp:109 mymoney/mymoneysecurity.cpp:166
+#, fuzzy
+msgid "Bond"
+msgstr "Bond"
+
+#: mymoney/mymoneysecurity.cpp:172 reports/querytable.cpp:1150
+#: widgets/kmymoneyaccountselector.cpp:76
+msgid "None"
+msgstr "Nič"
+
+#: dialogs/rc.cpp:46 kmymoneyutils.cpp:402 mymoney/mymoneyaccount.cpp:759
+#: mymoney/mymoneyscheduled.cpp:1002 mymoney/mymoneysecurity.cpp:175
+#: views/kforecastview.cpp:174 widgets/register.cpp:54
+#: widgets/register.cpp:485 widgets/transaction.cpp:708
+#: widgets/transaction.cpp:1459
+msgid "Unknown"
+msgstr "Neznámy"
+
+#: mymoney/storage/mymoneystoragesql.cpp:191
+msgid ""
+"Database apparently in use\n"
+"Opened by %1 on %2 at %3.\n"
+"Open anyway?"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragesql.cpp:229
+msgid "Cannot currently create database for driver %1; please create manually"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragesql.cpp:244
+msgid "Error in create database %1; do you have create permissions?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1329
+#: mymoney/storage/mymoneystoragexml.cpp:166
+msgid "Loading transactions..."
+msgstr "Načítavam.prevody"
+
+#: converter/mymoneygncreader.cpp:1190
+#: mymoney/storage/mymoneystoragexml.cpp:173
+msgid "Loading accounts..."
+msgstr "Načítavam.účty"
+
+#: mymoney/storage/mymoneystoragexml.cpp:180
+#, fuzzy
+msgid "Loading securities..."
+msgstr "Načítavam komodity..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:187
+#, fuzzy
+msgid "Loading reports..."
+msgstr "Načítavam ceny..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:268
+msgid "Unknown XML tag %1 found in line %2"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:274
+msgid "Exception while creating a %1 element: %2"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:513
+#, fuzzy
+msgid "Loading file information..."
+msgstr "Načítavam súbor..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:591
+#, fuzzy
+msgid "Loading user information..."
+msgstr "Načítavam.prevody"
+
+#: mymoney/storage/mymoneystoragexml.cpp:655
+#, fuzzy
+msgid "Saving accounts..."
+msgstr "Načítavam.účty"
+
+#: mymoney/storage/mymoneystoragexml.cpp:678
+#, fuzzy
+msgid "Saving transactions..."
+msgstr "Načítavam.prevody"
+
+#: mymoney/storage/mymoneystoragexml.cpp:747
+#, fuzzy
+msgid "Saving reports..."
+msgstr "Ukladanie súboru..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:762
+#, fuzzy
+msgid "Saving budgets..."
+msgstr "Ukladanie súboru..."
+
+#: mymoney/storage/mymoneystoragedump.cpp:414
+msgid "not reconciled"
+msgstr "nevysporiadané"
+
+#: mymoney/storage/mymoneystoragedump.cpp:417
+msgid "cleared"
+msgstr "očistené"
+
+#: mymoney/storage/mymoneystoragedump.cpp:420
+msgid "reconciled"
+msgstr "vysporiadané"
+
+#: mymoney/storage/mymoneystoragedump.cpp:423
+msgid "frozen"
+msgstr "zmrazený"
+
+#: mymoney/storage/mymoneystoragedump.cpp:426
+msgid "unknown"
+msgstr "neznámy"
+
+#: mymoney/mymoneyaccount.cpp:101
+msgid ""
+"Account %1 contains an opening balance. Please use a KMyMoney version >= 0.8 "
+"and < 0.9 to correct the problem."
+msgstr ""
+
+#: mymoney/mymoneyaccount.cpp:597
+msgid ""
+"_: Brokerage (suffix for account names)\n"
+"Brokerage"
+msgstr ""
+
+#: kmymoneyutils.cpp:74 mymoney/mymoneyaccount.cpp:726
+msgid "Certificate of Deposit"
+msgstr "Depozitný certifikát"
+
+#: kmymoneyutils.cpp:78 mymoney/mymoneyaccount.cpp:732
+msgid "Money Market"
+msgstr "Peňažný trh"
+
+#: converter/mymoneytemplate.cpp:186 converter/mymoneytemplate.cpp:187
+#: dialogs/knewaccountdlg.cpp:1018 kmymoneyutils.cpp:86
+#: mymoney/mymoneyaccount.cpp:744 views/kaccountsview.cpp:360
+#: views/kbudgetview.cpp:372 views/kcategoriesview.cpp:178
+#: views/khomeview.cpp:1813 views/kmymoneyview.cpp:767
+#: widgets/kmymoneyaccountselector.cpp:68
+#: widgets/kmymoneyaccountselector.cpp:179
+#: widgets/kmymoneyaccountselector.cpp:370 widgets/register.cpp:828
+msgid "Income"
+msgstr "Príjem"
+
+#: converter/mymoneytemplate.cpp:190 converter/mymoneytemplate.cpp:191
+#: dialogs/knewaccountdlg.cpp:1020 kmymoneyutils.cpp:88
+#: mymoney/mymoneyaccount.cpp:747 views/kaccountsview.cpp:364
+#: views/kbudgetview.cpp:378 views/kcategoriesview.cpp:182
+#: views/kmymoneyview.cpp:768 widgets/kmymoneyaccountselector.cpp:72
+#: widgets/kmymoneyaccountselector.cpp:180
+#: widgets/kmymoneyaccountselector.cpp:380 widgets/register.cpp:829
+msgid "Expense"
+msgstr "Výdaj"
+
+#: kmymoneyutils.cpp:90 mymoney/mymoneyaccount.cpp:750
+msgid "Investment Loan"
+msgstr "Investičná pôžička"
+
+#: mymoney/mymoneyfile.cpp:47
+msgid "Opening Balances"
+msgstr "Počiatočný stav"
+
+#: mymoney/mymoneyfile.cpp:398
+#, fuzzy
+msgid "Cannot remove transaction that references a closed account."
+msgstr "do import do account?"
+
+#: mymoney/mymoneyfile.cpp:1414 mymoney/mymoneyfile.cpp:1433
+#: mymoney/mymoneyfile.cpp:1447 mymoney/mymoneyfile.cpp:1469
+#, fuzzy
+msgid "* Problem with account '%1'"
+msgstr "do "
+
+#: mymoney/mymoneyfile.cpp:1419
+msgid " * Parent account '%1' belongs to a different group."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1420 mymoney/mymoneyfile.cpp:1450
+msgid " New parent account is the top level account '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1436
+msgid " * Parent account '%1' does not contain '%2' as sub-account."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1449
+msgid " * The parent with id %1 does not exist anymore."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1471
+msgid " * Child account with id %1 does not exist anymore."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1472
+msgid " The child account list will be reconstructed."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1492
+#, fuzzy
+msgid " * Unable to update account data in engine."
+msgstr "do account "
+
+#: mymoney/mymoneyfile.cpp:1499
+msgid "* Reconstructing the child lists for"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1536
+msgid " * Unable to update account data for account %1 in engine"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1554
+msgid " * Payee %1 recreated with fixed id"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1583
+msgid " * Payee id updated in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1596
+#, fuzzy
+msgid " * shares set to value in split of transaction '%1'."
+msgstr "Použiť do všetky z"
+
+#: mymoney/mymoneyfile.cpp:1599
+#, fuzzy
+msgid " * value set to shares in split of transaction '%1'."
+msgstr "Použiť do všetky z"
+
+#: mymoney/mymoneyfile.cpp:1605
+msgid ""
+" * Split %2 in transaction '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1616
+#, fuzzy
+msgid " * action marked as interest in split of transaction '%1'."
+msgstr "Použiť do všetky z"
+
+#: mymoney/mymoneyfile.cpp:1643
+msgid " * Payee id updated in split of schedule '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1649
+msgid ""
+" * Split in scheduled transaction '%1' contained value != 0 and shares == 0."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1650
+msgid " Shares set to value."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1658
+#, fuzzy
+msgid " * Removed bankid from split in scheduled transaction '%1'."
+msgstr "Použiť do všetky z"
+
+#: mymoney/mymoneyfile.cpp:1671
+#, fuzzy
+msgid " * shares set to value in split in schedule '%1'."
+msgstr "Použiť do všetky z"
+
+#: mymoney/mymoneyfile.cpp:1674
+#, fuzzy
+msgid " * value set to shares in split in schedule '%1'."
+msgstr "Použiť do všetky z"
+
+#: mymoney/mymoneyfile.cpp:1680
+msgid ""
+" * Split %2 in schedule '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1706
+msgid " * Payee id updated in report '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1723
+msgid " * Payee '%1' removed."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1730
+msgid "Finish! Data is consistent."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1732
+msgid "Finish! %1 problem(s) corrected. %2 problem(s) still present."
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:873 mymoney/mymoneyscheduled.cpp:918
+#: mymoney/mymoneyscheduled.cpp:969 mymoney/mymoneyscheduled.cpp:1265
+#: mymoney/mymoneyscheduletest.cpp:1336
+msgid "Once"
+msgstr "Raz"
+
+#: mymoney/mymoneyscheduled.cpp:875 mymoney/mymoneyscheduled.cpp:924
+#: mymoney/mymoneyscheduled.cpp:1267 mymoney/mymoneyscheduletest.cpp:1337
+#: widgets/rc.cpp:72
+msgid "Daily"
+msgstr "Denne"
+
+#: mymoney/mymoneyscheduled.cpp:877 mymoney/mymoneyscheduled.cpp:931
+#: mymoney/mymoneyscheduled.cpp:1269 mymoney/mymoneyscheduletest.cpp:1338
+#: widgets/rc.cpp:73
+msgid "Weekly"
+msgstr "Týždenne"
+
+#: mymoney/mymoneyscheduled.cpp:881 mymoney/mymoneyscheduled.cpp:932
+#: mymoney/mymoneyscheduled.cpp:1273 mymoney/mymoneyscheduletest.cpp:1339
+msgid "Every other week"
+msgstr "Každý týždeň"
+
+#: mymoney/mymoneyscheduled.cpp:879 mymoney/mymoneyscheduled.cpp:1271
+#: mymoney/mymoneyscheduletest.cpp:1340
+msgid "Fortnightly"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:883 mymoney/mymoneyscheduled.cpp:941
+#: mymoney/mymoneyscheduled.cpp:1275 mymoney/mymoneyscheduletest.cpp:1341
+#, fuzzy
+msgid "Every half month"
+msgstr "Každé štyri mesiace"
+
+#: mymoney/mymoneyscheduled.cpp:887 mymoney/mymoneyscheduled.cpp:934
+#: mymoney/mymoneyscheduled.cpp:1279 mymoney/mymoneyscheduletest.cpp:1342
+msgid "Every four weeks"
+msgstr "Každé štyri týždne"
+
+#: mymoney/mymoneyscheduled.cpp:893 mymoney/mymoneyscheduled.cpp:935
+#: mymoney/mymoneyscheduled.cpp:1285 mymoney/mymoneyscheduletest.cpp:1344
+#, fuzzy
+msgid "Every eight weeks"
+msgstr "Každý týždeň"
+
+#: mymoney/mymoneyscheduled.cpp:895 mymoney/mymoneyscheduled.cpp:948
+#: mymoney/mymoneyscheduled.cpp:1287 mymoney/mymoneyscheduletest.cpp:1345
+msgid "Every two months"
+msgstr "Každé dva mesiace"
+
+#: mymoney/mymoneyscheduled.cpp:897 mymoney/mymoneyscheduled.cpp:949
+#: mymoney/mymoneyscheduled.cpp:1289 mymoney/mymoneyscheduletest.cpp:1346
+msgid "Every three months"
+msgstr "Každé tri mesiace"
+
+#: mymoney/mymoneyscheduled.cpp:899 mymoney/mymoneyscheduled.cpp:1291
+#: mymoney/mymoneyscheduletest.cpp:1347 widgets/rc.cpp:76
+msgid "Quarterly"
+msgstr "Kvartálne"
+
+#: mymoney/mymoneyscheduled.cpp:901 mymoney/mymoneyscheduled.cpp:950
+#: mymoney/mymoneyscheduled.cpp:1293 mymoney/mymoneyscheduletest.cpp:1348
+msgid "Every four months"
+msgstr "Každé štyri mesiace"
+
+#: mymoney/mymoneyscheduled.cpp:903 mymoney/mymoneyscheduled.cpp:951
+#: mymoney/mymoneyscheduled.cpp:1295 mymoney/mymoneyscheduletest.cpp:1349
+msgid "Twice yearly"
+msgstr "Dvakrát za rok"
+
+#: mymoney/mymoneyscheduled.cpp:905 mymoney/mymoneyscheduled.cpp:957
+#: mymoney/mymoneyscheduled.cpp:1297 mymoney/mymoneyscheduletest.cpp:1350
+#: widgets/rc.cpp:20 widgets/rc.cpp:77
+msgid "Yearly"
+msgstr "Ročne"
+
+#: mymoney/mymoneyscheduled.cpp:907 mymoney/mymoneyscheduled.cpp:958
+#: mymoney/mymoneyscheduled.cpp:1299 mymoney/mymoneyscheduletest.cpp:1351
+msgid "Every other year"
+msgstr "Každý rok"
+
+#: mymoney/mymoneyscheduled.cpp:870 mymoney/mymoneyscheduled.cpp:913
+#: mymoney/mymoneyscheduled.cpp:966
+msgid "Any"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:885 mymoney/mymoneyscheduled.cpp:933
+#: mymoney/mymoneyscheduled.cpp:1277
+#, fuzzy
+msgid "Every three weeks"
+msgstr "Každý týždeň"
+
+#: mymoney/mymoneyscheduled.cpp:889 mymoney/mymoneyscheduled.cpp:925
+#: mymoney/mymoneyscheduled.cpp:1281
+#, fuzzy
+msgid "Every thirty days"
+msgstr "Každý rok"
+
+#: mymoney/mymoneyscheduled.cpp:971
+#, fuzzy
+msgid "Day"
+msgstr "Dni"
+
+#: mymoney/mymoneyscheduled.cpp:973 reports/listtable.cpp:206
+#: widgets/kmymoneycalendar.cpp:123 widgets/rc.cpp:97
+msgid "Week"
+msgstr "Týždeň"
+
+#: mymoney/mymoneyscheduled.cpp:975
+#, fuzzy
+msgid "Half-month"
+msgstr "Každé štyri mesiace"
+
+#: mymoney/mymoneyscheduled.cpp:977 reports/listtable.cpp:205
+#: widgets/kmymoneycalendar.cpp:124 widgets/rc.cpp:96
+msgid "Month"
+msgstr "Mesiac"
+
+#: dialogs/rc.cpp:400 mymoney/mymoneyscheduled.cpp:979 views/rc.cpp:14
+#, fuzzy
+msgid "Year"
+msgstr "Roky"
+
+#: mymoney/mymoneyscheduled.cpp:989
+msgid "Bill"
+msgstr "Účtenka"
+
+#: dialogs/rc.cpp:107 dialogs/rc.cpp:162 dialogs/rc.cpp:249 dialogs/rc.cpp:754
+#: mymoney/mymoneyscheduled.cpp:992 widgets/kmymoneycombo.cpp:420
+#: widgets/register.cpp:571
+msgid "Deposit"
+msgstr "Vklad"
+
+#: mymoney/mymoneyscheduled.cpp:995 reports/querytable.cpp:594
+#: reports/querytable.cpp:696 widgets/kmymoneycombo.cpp:419
+msgid "Transfer"
+msgstr "Prevod"
+
+#: mymoney/mymoneyscheduled.cpp:1035
+msgid "Any (Error)"
+msgstr "Ľubovoľná (chyba)"
+
+#: dialogs/rc.cpp:114 mymoney/mymoneyscheduled.cpp:1047
+msgid "Change the date to the previous Friday"
+msgstr "Zmeniť dátum do minulého piatku"
+
+#: dialogs/rc.cpp:115 mymoney/mymoneyscheduled.cpp:1050
+msgid "Change the date to the next Monday"
+msgstr "Zmeniť dátum do nasledujúceho pondelka"
+
+#: mymoney/mymoneyscheduled.cpp:1053
+msgid "Do Nothing"
+msgstr "Nerobiť nič"
+
+#: kmymoney2.cpp:312
+#, fuzzy
+msgid "Open database..."
+msgstr "Otvoriť súbor..."
+
+#: kmymoney2.cpp:313
+#, fuzzy
+msgid "Save as database..."
+msgstr "Uložiť ako..."
+
+#: kmymoney2.cpp:314
+msgid "Backup..."
+msgstr "Zálohovať..."
+
+#: kmymoney2.cpp:315 kmymoney2.cpp:321
+#, fuzzy
+msgid "QIF..."
+msgstr "QIF..."
+
+#: kmymoney2.cpp:316
+#, fuzzy
+msgid "Gnucash..."
+msgstr "Gnucash ..."
+
+#: kmymoney2.cpp:317
+#, fuzzy
+msgid "Statement file..."
+msgstr "Informačný súbor."
+
+#: kmymoney2.cpp:319 kmymoney2.cpp:320
+#, fuzzy
+msgid "Account Template..."
+msgstr "Šablóna.účtu"
+
+#: kmymoney2.cpp:322
+msgid "Personal Data..."
+msgstr "Osobné Dáta."
+
+#: kmymoney2.cpp:325
+#, fuzzy
+msgid "Dump Memory"
+msgstr "Dump Memory..."
+
+#: kmymoney2.cpp:327
+#, fuzzy
+msgid "File-Information..."
+msgstr "Informácie o príjemcovi"
+
+#: kmymoney2.cpp:332
+msgid "Find transaction..."
+msgstr "Nájsť.transakciu..."
+
+#: kmymoney2.cpp:337
+msgid "Show Transaction Detail"
+msgstr "Zobraziť podrobnosti transakcie"
+
+#: kmymoney2.cpp:338 rc.cpp:60
+#, fuzzy
+msgid "Hide reconciled transactions"
+msgstr "Skryť"
+
+#: kmymoney2.cpp:339 rc.cpp:57
+#, fuzzy
+msgid "Hide unused categories"
+msgstr "Skryté kategórie"
+
+#: kmymoney2.cpp:340
+#, fuzzy
+msgid "Show all accounts"
+msgstr "Záporný účet"
+
+#: kmymoney2.cpp:345
+#, fuzzy
+msgid "New institution..."
+msgstr "Nová Inštitúcia..."
+
+#: kmymoney2.cpp:346
+#, fuzzy
+msgid "Edit institution..."
+msgstr "Pridať novú inštitúciu..."
+
+#: kmymoney2.cpp:347
+#, fuzzy
+msgid "Delete institution..."
+msgstr "Nová Inštitúcia..."
+
+#: kmymoney2.cpp:352
+msgid "New account..."
+msgstr "Nový účet..."
+
+#: kmymoney2.cpp:354
+#, fuzzy
+msgid "Open ledger"
+msgstr "Otvoriť súbor."
+
+#: kmymoney2.cpp:355
+msgid "Reconcile..."
+msgstr "Vysporiadať..."
+
+#: kmymoney2.cpp:356
+#, fuzzy
+msgid ""
+"_: Finish reconciliation\n"
+"Finish"
+msgstr "Konečné vysporiadanie"
+
+#: kmymoney2.cpp:357
+#, fuzzy
+msgid ""
+"_: Postpone reconciliation\n"
+"Postpone"
+msgstr "Odložiť vysporiadanie"
+
+#: kmymoney2.cpp:358
+#, fuzzy
+msgid "Edit account..."
+msgstr "Upraviť Účet"
+
+#: kmymoney2.cpp:359
+#, fuzzy
+msgid "Delete account..."
+msgstr "Nový účet..."
+
+#: kmymoney2.cpp:360
+#, fuzzy
+msgid "Close account"
+msgstr "Záporný účet"
+
+#: kmymoney2.cpp:361
+#, fuzzy
+msgid "Reopen account"
+msgstr "Opačný účet"
+
+#: kmymoney2.cpp:362
+#, fuzzy
+msgid "Transaction report"
+msgstr "Výška transakcie"
+
+#: kmymoney2.cpp:364
+msgid "Show balance chart..."
+msgstr ""
+
+#: kmymoney2.cpp:366
+#, fuzzy
+msgid "Map to online account"
+msgstr "do account."
+
+#: kmymoney2.cpp:367
+#, fuzzy
+msgid "Unmap account"
+msgstr "Suma pôžičky"
+
+#: dialogs/settings/rc.cpp:126 kmymoney2.cpp:368 views/kpayeesview.cpp:363
+#: widgets/rc.cpp:50
+#, fuzzy
+msgid "Update"
+msgstr "&Aktualizovať všetko"
+
+#: kmymoney2.cpp:372
+#, fuzzy
+msgid "Update account..."
+msgstr "Upraviť Účet"
+
+#: kmymoney2.cpp:373
+#, fuzzy
+msgid "Update all accounts..."
+msgstr "Upraviť Účet"
+
+#: kmymoney2.cpp:378
+msgid "New category..."
+msgstr "Nová kategória..."
+
+#: kmymoney2.cpp:379
+#, fuzzy
+msgid "Edit category..."
+msgstr "Upraviť kategóriu"
+
+#: kmymoney2.cpp:380
+#, fuzzy
+msgid "Delete category..."
+msgstr "Nová kategória..."
+
+#: kmymoney2.cpp:386
+msgid "QIF Profile Editor..."
+msgstr "QIF Editor..."
+
+#: kmymoney2.cpp:387
+#, fuzzy
+msgid "Securities..."
+msgstr "Cenné papiere..."
+
+#: kmymoney2.cpp:388
+#, fuzzy
+msgid "Currencies..."
+msgstr "Meny..."
+
+#: kmymoney2.cpp:389
+#, fuzzy
+msgid "Prices..."
+msgstr "Ceny..."
+
+#: kmymoney2.cpp:390
+#, fuzzy
+msgid "Update Stock and Currency Prices..."
+msgstr "Aktualizovať Zásoba a Mena."
+
+#: kmymoney2.cpp:391
+msgid "Consistency Check"
+msgstr "Kontrolovať účet"
+
+#: kmymoney2.cpp:392
+msgid "Performance-Test"
+msgstr ""
+
+#: kmymoney2.cpp:393
+msgid "KCalc..."
+msgstr ""
+
+#: kmymoney2.cpp:399
+msgid "Enable all messages"
+msgstr "Povoliť všetky správy"
+
+#: kmymoney2.cpp:400
+msgid "KDE language settings..."
+msgstr ""
+
+#: kmymoney2.cpp:405
+msgid "&Show tip of the day"
+msgstr "Zobraziť tip dňa"
+
+#: kmymoney2.cpp:410
+#, fuzzy
+msgid ""
+"_: New transaction button\n"
+"New"
+msgstr "Zobraziť"
+
+#: kmymoney2.cpp:415
+#, fuzzy
+msgid ""
+"_: Edit transaction button\n"
+"Edit"
+msgstr "Rozdeliť transakciu"
+
+#: kmymoney2.cpp:417
+#, fuzzy
+msgid ""
+"_: Enter transaction\n"
+"Enter"
+msgstr "Ľubovoľné prevody"
+
+#: kmymoney2.cpp:420
+#, fuzzy
+msgid ""
+"_: Edit split button\n"
+"Edit splits"
+msgstr "Upraviť.rozdelenia..."
+
+#: kmymoney2.cpp:421
+#, fuzzy
+msgid ""
+"_: Cancel transaction edit\n"
+"Cancel"
+msgstr "Platný prevod"
+
+#: kmymoney2.cpp:422
+#, fuzzy
+msgid ""
+"_: Delete transaction\n"
+"Delete"
+msgstr "Odstrániť transakciu"
+
+#: kmymoney2.cpp:423
+#, fuzzy
+msgid ""
+"_: Duplicate transaction\n"
+"Duplicate"
+msgstr "Rozdeliť transakciu"
+
+#: kmymoney2.cpp:425 kmymoney2.cpp:4826 kmymoney2.cpp:5107
+#, fuzzy
+msgid ""
+"_: Button text for match transaction\n"
+"Match"
+msgstr "Použiť do záznam"
+
+#: kmymoney2.cpp:426
+#, fuzzy
+msgid ""
+"_: Accept 'imported' and 'matched' transaction\n"
+"Accept"
+msgstr "Import prevodu"
+
+#: kmymoney2.cpp:428
+#, fuzzy
+msgid ""
+"_: Toggle reconciliation flag\n"
+"Toggle"
+msgstr "Odložiť vysporiadanie"
+
+#: kmymoney2.cpp:429
+#, fuzzy
+msgid ""
+"_: Mark transaction cleared\n"
+"Cleared"
+msgstr "Hľadať prevody"
+
+#: kmymoney2.cpp:430
+#, fuzzy
+msgid ""
+"_: Mark transaction reconciled\n"
+"Reconciled"
+msgstr "nevysporiadané"
+
+#: kmymoney2.cpp:431
+#, fuzzy
+msgid ""
+"_: Mark transaction not reconciled\n"
+"Not reconciled"
+msgstr "nevysporiadané"
+
+#: kmymoney2.cpp:432
+#, fuzzy
+msgid ""
+"_: Select all transactions\n"
+"Select all"
+msgstr "Odstrániť transakciu"
+
+#: kmymoney2.cpp:434 kmymoney2.cpp:5497
+#, fuzzy
+msgid "Goto account"
+msgstr "účet"
+
+#: kmymoney2.cpp:435 kmymoney2.cpp:5495
+#, fuzzy
+msgid "Goto payee"
+msgstr "Neznámy príjemca"
+
+#: kmymoney2.cpp:436
+#, fuzzy
+msgid "Create scheduled transaction..."
+msgstr "Zadať plánovanú transakciu"
+
+#: kmymoney2.cpp:437
+msgid "Assign next number"
+msgstr ""
+
+#: kmymoney2.cpp:438
+#, fuzzy
+msgid ""
+"_: Combine transactions\n"
+"Combine"
+msgstr "Opraviť transakcie"
+
+#: kmymoney2.cpp:440
+#, fuzzy
+msgid "New investment"
+msgstr "Odstrániť investíciu"
+
+#: kmymoney2.cpp:441
+#, fuzzy
+msgid "Edit investment..."
+msgstr "Odstrániť investíciu"
+
+#: kmymoney2.cpp:442
+#, fuzzy
+msgid "Delete investment..."
+msgstr "Odstrániť investíciu"
+
+#: kmymoney2.cpp:443
+#, fuzzy
+msgid "Online price update..."
+msgstr "Aktualizovať cenu online"
+
+#: kmymoney2.cpp:444
+#, fuzzy
+msgid "Manual price update..."
+msgstr "Manuálna aktualizácia ceny..."
+
+#: kmymoney2.cpp:446
+#, fuzzy
+msgid "New scheduled transaction..."
+msgstr "Zadať plánovanú transakciu"
+
+#: kmymoney2.cpp:447
+#, fuzzy
+msgid "Edit scheduled transaction..."
+msgstr "Zadať plánovanú transakciu"
+
+#: kmymoney2.cpp:448
+#, fuzzy
+msgid "Delete scheduled transaction..."
+msgstr "Zadať plánovanú transakciu"
+
+#: kmymoney2.cpp:449
+#, fuzzy
+msgid "Duplicate scheduled transaction"
+msgstr "Zadať plánovanú transakciu"
+
+#: kmymoney2.cpp:450
+#, fuzzy
+msgid "Enter next transaction..."
+msgstr "Odstrániť transakciu..."
+
+#: kmymoney2.cpp:451
+#, fuzzy
+msgid "Skip next transaction..."
+msgstr "Preskočiť tento prevod"
+
+#: kmymoney2.cpp:453
+#, fuzzy
+msgid "New payee"
+msgstr "Nový Príjemca"
+
+#: kmymoney2.cpp:454
+#, fuzzy
+msgid "Rename payee"
+msgstr "Odstrániť príjemcu"
+
+#: kmymoney2.cpp:455
+#, fuzzy
+msgid "Delete payee"
+msgstr "Odstrániť príjemcu..."
+
+#: kmymoney2.cpp:457
+msgid "New budget"
+msgstr ""
+
+#: kmymoney2.cpp:458
+#, fuzzy
+msgid "Rename budget"
+msgstr "Premenovať..."
+
+#: kmymoney2.cpp:459
+#, fuzzy
+msgid "Delete budget"
+msgstr "Zmazať výkaz?"
+
+#: kmymoney2.cpp:460
+#, fuzzy
+msgid "Copy budget"
+msgstr "Rozpočty"
+
+#: kmymoney2.cpp:461
+msgid "Change budget year"
+msgstr ""
+
+#: kmymoney2.cpp:462
+msgid ""
+"_: Budget based on forecast\n"
+"Forecast"
+msgstr ""
+
+#: kmymoney2.cpp:467 kmymoney2.cpp:3990 kmymoney2.cpp:3993 kmymoney2.cpp:3999
+msgid "New currency"
+msgstr "Nová mena"
+
+#: kmymoney2.cpp:468 kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, fuzzy
+msgid "Rename currency"
+msgstr "Nová mena"
+
+#: kmymoney2.cpp:469 kmymoney2.cpp:4039
+#, fuzzy
+msgid "Delete currency"
+msgstr "Vybrať základnú menu"
+
+#: dialogs/rc.cpp:69 kmymoney2.cpp:470
+#, fuzzy
+msgid "Select as base currency"
+msgstr "Vybrať základnú menu"
+
+#: kmymoney2.cpp:481
+msgid "View back"
+msgstr "Spätný pohľad"
+
+#: kmymoney2.cpp:482
+msgid "View forward"
+msgstr "Pohľad vpred"
+
+#: kmymoney2.cpp:611
+#, fuzzy
+msgid "KMyMoney file needs saving. Save ?"
+msgstr "súbor Uložiť?"
+
+#: kmymoney2.cpp:757
+msgid "Creating new document..."
+msgstr "Vytvorenie nového dokumentu..."
+
+#: kmymoney2.cpp:869 kmymoney2.cpp:884
+msgid "Open a file."
+msgstr "Otvoriť súbor."
+
+#: kmymoney2.cpp:872
+#, fuzzy
+msgid ""
+"%1|KMyMoney files\n"
+"%2|All files (*.*)"
+msgstr "n Všetky"
+
+#: kmymoney2.cpp:873
+msgid "Open File..."
+msgstr "Otvoriť súbor..."
+
+#: kmymoney2.cpp:925 kstartuplogo.cpp:100
+msgid "Loading file..."
+msgstr "Načítavam súbor..."
+
+#: kmymoney2.cpp:986
+#, fuzzy
+msgid ""
+"<b>%1</b> is either an invalid filename or the file does not exist. You can "
+"open another file or create a new one."
+msgstr "<b></b> je meno súboru alebo súbor Vy súbor alebo a nové jeden."
+
+#: kmymoney2.cpp:986
+#, fuzzy
+msgid "File not found"
+msgstr "Súbor nenájdený"
+
+#: kmymoney2.cpp:989
+#, fuzzy
+msgid "File <b>%1</b> is already opened in another instance of KMyMoney"
+msgstr "Súbor<b></b> je v z"
+
+#: kmymoney2.cpp:989
+msgid "Duplicate open"
+msgstr "Duplikovať otvorené"
+
+#: kmymoney2.cpp:1001
+msgid "Saving file..."
+msgstr "Ukladanie súboru..."
+
+#: kmymoney2.cpp:1035 kmymoney2.cpp:1047 kmymoney2.cpp:1071
+#, c-format
+msgid "Additional encryption key(s) to be used: %1"
+msgstr ""
+
+#: kmymoney2.cpp:1056
+msgid "Saving file with a new filename..."
+msgstr "Ukladanie súboru s novým menom..."
+
+#: kmymoney2.cpp:1067
+msgid "Encryption key to be used"
+msgstr ""
+
+#: kmymoney2.cpp:1072
+#, fuzzy
+msgid "Manage additional keys"
+msgstr "Zadať"
+
+#: kmymoney2.cpp:1079
+#, fuzzy
+msgid "No encryption"
+msgstr "Šifrovanie"
+
+#: kmymoney2.cpp:1102
+#, fuzzy
+msgid ""
+"_: KMyMoney (Filefilter)\n"
+"KMyMoney files"
+msgstr "Nie súbor"
+
+#: kmymoney2.cpp:1103
+msgid ""
+"_: XML (Filefilter)\n"
+"XML files"
+msgstr ""
+
+#: kmymoney2.cpp:1104
+msgid ""
+"_: Anonymous (Filefilter)\n"
+"Anonymous files"
+msgstr ""
+
+#: kmymoney2.cpp:1105
+#, fuzzy
+msgid "All files"
+msgstr "Všetky dátumy"
+
+#: kmymoney2.cpp:1193
+#, fuzzy
+msgid "Saving file to database..."
+msgstr "Ukladanie súboru..."
+
+#: kmymoney2.cpp:1207
+msgid "Cannot save to current database."
+msgstr ""
+
+#: kmymoney2.cpp:1225
+msgid "Closing window..."
+msgstr "Zatváram okno..."
+
+#: kmymoney2.cpp:1228 kmymoney2.cpp:1249
+#, fuzzy
+msgid "The file has been changed, save it ?"
+msgstr "súbor zmenené?"
+
+#: kmymoney2.cpp:1339 kmymoney2.cpp:1352
+msgid "Ready."
+msgstr "Pripravený."
+
+#: kmymoney2.cpp:1397 kmymoney2.cpp:1433
+#, fuzzy
+msgid "No KMyMoneyFile open"
+msgstr "Nie súbor"
+
+#: kmymoney2.cpp:1401
+msgid "Viewing personal data..."
+msgstr "Pozrieť osobné dáta..."
+
+#: kmymoney2.cpp:1408
+msgid "Edit Personal Data"
+msgstr "Upraviť osobné dáta"
+
+#: kmymoney2.cpp:1424
+#, fuzzy, c-format
+msgid "Unable to store user information: %1"
+msgstr "do account informácie"
+
+#: kmymoney2.cpp:1447
+msgid "Importing account templates."
+msgstr "Import šablóny konta"
+
+#: kmymoney2.cpp:1462
+#, fuzzy
+msgid "Unable to import template(s): %1, thrown in %2:%3"
+msgstr "do dátum 3"
+
+#: kmymoney2.cpp:1471
+#, fuzzy
+msgid "Exporting account templates."
+msgstr "Import šablóny konta"
+
+#: kmymoney2.cpp:1474
+#, fuzzy
+msgid ""
+"*.kmt|KMyMoney template files\n"
+"*.*|All files"
+msgstr "n Všetky"
+
+#: kmymoney2.cpp:1475
+msgid "Save as..."
+msgstr "Uložiť ako..."
+
+#: kmymoney2.cpp:1517
+msgid "Importing file..."
+msgstr "Importuje sa súbor..."
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "The statements have been processed with the following results:"
+msgstr ""
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:1754 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+#, fuzzy
+msgid "Statement stats"
+msgstr "Dátum vyuúčtovania:"
+
+#: kmymoney2.cpp:1602
+#, fuzzy
+msgid ""
+"You cannot import GnuCash data into an existing file. Do you wish to save "
+"this file?"
+msgstr "Vy import súbor do súbor?"
+
+#: kmymoney2.cpp:1615
+msgid "Importing a Gnucash file."
+msgstr "Importuje sa a Gnucash súbor."
+
+#: kmymoney2.cpp:1618
+#, fuzzy
+msgid ""
+"%1|Gnucash files\n"
+"%2|All files (*.*)"
+msgstr "n Všetky"
+
+#: kmymoney2.cpp:1619
+msgid "Import Gnucash file..."
+msgstr "Import Gnucash súboru..."
+
+#: kmymoney2.cpp:1658
+msgid "Importing an XML Statement."
+msgstr "Importujú sa XML informácie."
+
+#: kmymoney2.cpp:1661
+#, fuzzy
+msgid ""
+"%1|XML files\n"
+"%2|All files (*.*)"
+msgstr "XML n Všetky"
+
+#: kmymoney2.cpp:1662
+msgid "Import XML Statement..."
+msgstr "Import XML informácií."
+
+#: kmymoney2.cpp:1718
+#, fuzzy
+msgid "Error importing %1: This file is not a valid KMM statement file."
+msgstr "Chyba súbor je a súbor."
+
+#: kmymoney2.cpp:1718
+msgid "Invalid Statement"
+msgstr "Neplatné informácie"
+
+#: kmymoney2.cpp:1754
+msgid "The statement has been processed with the following results:"
+msgstr ""
+
+#: kmymoney2.cpp:1763
+msgid "Exporting file..."
+msgstr "Exportovanie súboru..."
+
+#: kmymoney2.cpp:1786
+#, fuzzy
+msgid "The file <b>%1</b> already exists. Do you really want to override it?"
+msgstr "<b></b> do?"
+
+#: kmymoney2.cpp:1786
+msgid "File already exists"
+msgstr ""
+
+#: dialogs/rc.cpp:347 dialogs/rc.cpp:649 dialogs/rc.cpp:798 kmymoney2.cpp:1815
+msgid "General"
+msgstr "Všeobecné"
+
+#: kmymoney2.cpp:1816
+msgid "Register"
+msgstr "Register"
+
+#: kmymoney2.cpp:1817 views/khomeview.cpp:88 views/kmymoneyview.cpp:136
+msgid "Home"
+msgstr "Domov"
+
+#: kmymoney2.cpp:1818 views/kmymoneyview.cpp:176
+#, fuzzy
+msgid ""
+"Scheduled\n"
+"transactions"
+msgstr "Plánované prevody"
+
+#: kmymoney2.cpp:1819
+msgid "Encryption"
+msgstr "Šifrovanie"
+
+#: kmymoney2.cpp:1820
+#, fuzzy
+msgid "Colors"
+msgstr "Farby"
+
+#: dialogs/rc.cpp:344 dialogs/settings/rc.cpp:107 kmymoney2.cpp:1822
+#: widgets/rc.cpp:33
+msgid "Online Quotes"
+msgstr "Úvodzovky"
+
+#: kmymoney2.cpp:1823 reports/pivottable.cpp:2426 views/kmymoneyview.cpp:251
+#: views/kmymoneyview.cpp:253 views/kreportsview.cpp:1415 views/rc.cpp:41
+msgid "Forecast"
+msgstr ""
+
+#: kmymoney2.cpp:1824
+#, fuzzy
+msgid "Plugins"
+msgstr "&Moduly"
+
+#: kmymoney2.cpp:1893
+#, fuzzy
+msgid ""
+"The file must be saved first before it can be backed up. Do you want to "
+"continue?"
+msgstr "súbor prvý do?"
+
+#: kmymoney2.cpp:1910
+#, fuzzy
+msgid ""
+"The current implementation of the backup functionality only supports local "
+"files as source files! Your current source file is '%1'."
+msgstr "z lokálny zdroj zdroj súbor je."
+
+#: kmymoney2.cpp:1913
+msgid "Local files only"
+msgstr "Iba lokálne súbory"
+
+#: kmymoney2.cpp:1928
+#, c-format
+msgid "Mounting %1"
+msgstr "Pripájam %1"
+
+#: kmymoney2.cpp:1967
+#, fuzzy
+msgid "Backup file for today exists on that device. Replace ?"
+msgstr "Zálohovať súbor pre dnes zapnuté zariadenie Nahradiť?"
+
+#: dialogs/rc.cpp:7 kmymoney2.cpp:1967 kmymoney2.cpp:1994 kmymoney2.cpp:2024
+#: kmymoney2.cpp:2032 kmymoney2.cpp:2057 kmymoney2.cpp:2059
+msgid "Backup"
+msgstr "Zálohovať"
+
+#: kmymoney2.cpp:1967
+msgid "&Replace"
+msgstr "&Nahradiť"
+
+#: kmymoney2.cpp:1972 kmymoney2.cpp:1997 kmymoney2.cpp:2016 kmymoney2.cpp:2035
+#, c-format
+msgid "Unmounting %1"
+msgstr "Odpájam %1"
+
+#: kmymoney2.cpp:1987
+#, c-format
+msgid "Writing %1"
+msgstr "Zapisuje sa %1"
+
+#: kmymoney2.cpp:1994
+msgid "Error mounting device"
+msgstr "Chyba zariadenia"
+
+#: converter/mymoneygncreader.cpp:1995 kmymoney2.cpp:2023 kmymoney2.cpp:2055
+msgid "Done"
+msgstr "Hotovo"
+
+#: kmymoney2.cpp:2024 kmymoney2.cpp:2057
+#, fuzzy
+msgid "File successfully backed up"
+msgstr "Súbor"
+
+#: kmymoney2.cpp:2032
+#, fuzzy
+msgid "Error copying file to device"
+msgstr "Chyba súbor do zariadenie"
+
+#: kmymoney2.cpp:2059
+msgid "Error unmounting device"
+msgstr "Chyba zariadenie"
+
+#: kmymoney2.cpp:2143
+#, fuzzy, c-format
+msgid "Cannot add institution: %1"
+msgstr "Nemôžem odstrániť inštitúciu:"
+
+#: kmymoney2.cpp:2185
+#, fuzzy, c-format
+msgid "Unable to store institution: %1"
+msgstr "do úprava "
+
+#: kmymoney2.cpp:2192
+#, fuzzy, c-format
+msgid "Unable to edit institution: %1"
+msgstr "do úprava "
+
+#: kmymoney2.cpp:2203
+#, fuzzy
+msgid "Do you really want to delete institution <b>%1</b> ?"
+msgstr "do odstrániť profile?"
+
+#: kmymoney2.cpp:2211 kmymoney2.cpp:2215
+#, fuzzy, c-format
+msgid "Unable to delete institution: %1"
+msgstr "do úprava "
+
+#: kmymoney2.cpp:2268
+#, fuzzy, c-format
+msgid "Unable to find account: %1"
+msgstr "do "
+
+#: kmymoney2.cpp:2309
+#, fuzzy
+msgid ""
+"This account is a liability and if the opening balance represents money "
+"owed, then it should be negative. Negate the amount?\n"
+"\n"
+"Please click Yes to change the opening balance to %1,\n"
+"Please click No to leave the amount as %2,\n"
+"Please click Cancel to abort the account creation."
+msgstr ""
+"account je a a otvára sa n Áno do otvára sa do Nie do Zrušiť do account."
+
+#: kmymoney2.cpp:2345 kmymoney2.cpp:2346
+msgid "Loan payout"
+msgstr "Splátka pôžičky"
+
+#: dialogs/knewloanwizard.cpp:892 kmymoney2.cpp:2374
+#, fuzzy, c-format
+msgid "Unable to add account: %1"
+msgstr "do "
+
+#: kmymoney2.cpp:2392
+#, fuzzy
+msgid ""
+"The category <b>%1</b> currently does not exist. Do you want to create it?"
+"<p><i>The parent account will default to <b>%2</b> but can be changed in the "
+"following dialog</i>."
+msgstr "<b></b> do?"
+
+#: kmymoney2.cpp:2392
+msgid "Create category"
+msgstr "Vytvoriť kategóriu"
+
+#: kmymoney2.cpp:2429
+msgid "Create a new Category"
+msgstr "Vytvoriť a novú kategóriu"
+
+#: kmymoney2.cpp:2505
+#, fuzzy, c-format
+msgid "Unable to create account: %1"
+msgstr "do account "
+
+#: kmymoney2.cpp:2516
+#, fuzzy
+msgid ""
+"The security <b>%1</b> currently does not exist as sub-account of <b>%2</b>. "
+"Do you want to create it?"
+msgstr "<b></b> do?"
+
+#: kmymoney2.cpp:2517
+#, fuzzy
+msgid "Create security"
+msgstr "Zmazať cenný papier"
+
+#: kmymoney2.cpp:2551
+#, fuzzy
+msgid "Do you really want to delete the investment <b>%1</b>?"
+msgstr "do odstrániť?"
+
+#: kmymoney2.cpp:2551
+msgid "Delete investment"
+msgstr "Odstrániť investíciu"
+
+#: kmymoney2.cpp:2558
+#, fuzzy, c-format
+msgid "Unable to delete investment: %1"
+msgstr "do úprava "
+
+#: kmymoney2.cpp:2640 kmymoney2.cpp:2646
+#, fuzzy
+msgid "Unable to add scheduled transaction: "
+msgstr "do "
+
+#: kmymoney2.cpp:2722
+#, fuzzy
+msgid "Adjusting transactions..."
+msgstr "Načítavam.prevody"
+
+#: kmymoney2.cpp:2747
+#, fuzzy
+msgid "Adjusting scheduled transactions..."
+msgstr "Načítavam.prevody"
+
+#: kmymoney2.cpp:2765
+#, fuzzy
+msgid "Adjusting budgets..."
+msgstr "Načítavam.úlohy"
+
+#: kmymoney2.cpp:2783
+msgid ""
+"Unable to exchange category <b>%1</b> with category <b>%2</b>. Reason: %3"
+msgstr ""
+
+#: kmymoney2.cpp:2804
+#, fuzzy
+msgid "Do you really want to delete category <b>%1</b>?"
+msgstr "do odstrániť"
+
+#: kmymoney2.cpp:2811
+#, fuzzy
+msgid "Unable to delete category <b>%1</b>. Cause: %2"
+msgstr "do "
+
+#: kmymoney2.cpp:2823
+msgid ""
+"Do you want to delete category <b>%1</b> with all its sub-categories or only "
+"the category itself? If you only delete the category itself, all its sub-"
+"categories will be made sub-categories of <b>%2</b>."
+msgstr ""
+
+#: kmymoney2.cpp:2827
+#, fuzzy
+msgid "Delete all"
+msgstr "Vybrať všetko"
+
+#: kmymoney2.cpp:2828
+#, fuzzy
+msgid "Just the category"
+msgstr "Vytvoriť kategóriu"
+
+#: kmymoney2.cpp:2858
+msgid ""
+"Some sub-categories of category <b>%1</b> cannot be deleted, because they "
+"are still used. They will be made sub-categories of <b>%2</b>. Proceed?"
+msgstr ""
+
+#: kmymoney2.cpp:2878
+msgid "Unable to delete a sub-category of category <b>%1</b>. Reason: %2"
+msgstr ""
+
+#: kmymoney2.cpp:2889
+#, fuzzy
+msgid "Do you really want to delete account <b>%1</b>?"
+msgstr "do odstrániť account"
+
+#: kmymoney2.cpp:2901
+#, fuzzy
+msgid "Unable to delete account '%1'. Cause: %2"
+msgstr "do "
+
+#: kmymoney2.cpp:2917
+#, fuzzy
+msgid "Edit account '%1'"
+msgstr "Upraviť Účet"
+
+#: kmymoney2.cpp:2922
+#, fuzzy
+msgid "Edit category '%1'"
+msgstr "Upraviť kategóriu"
+
+#: kmymoney2.cpp:3008
+#, fuzzy
+msgid "Unable to modify account '%1'. Cause: %2"
+msgstr "do "
+
+#: kmymoney2.cpp:3065
+#, fuzzy
+msgid ""
+"KMyMoney has detected some overdue scheduled transactions for this account. "
+"Do you want to enter those scheduled transactions now?"
+msgstr "jeden z do do úprava?"
+
+#: kmymoney2.cpp:3065
+#, fuzzy
+msgid "Scheduled transactions found"
+msgstr "Plánované prevody"
+
+#: kmymoney2.cpp:3163
+msgid ""
+"You are about to finish the reconciliation of this account with a difference "
+"between your bank statement and the transactions marked as cleared.\n"
+"Are you sure you want to finish the reconciliation ?"
+msgstr ""
+
+#: kmymoney2.cpp:3165
+#, fuzzy
+msgid "Confirm end of reconciliation"
+msgstr "Odložiť vysporiadanie"
+
+#: kmymoney2.cpp:3339
+msgid ""
+"You have closed this account. It remains in the system because you have "
+"transactions which still refer to it, but is not shown in the views. You can "
+"make it visible again by going to the View menu and selecting <b>Show all "
+"accounts</b> or by unselecting the <b>Don't show closed accounts</b> setting."
+msgstr ""
+
+#: kmymoney2.cpp:3379
+msgid "<b>%1</b> cannot be moved to institution <b>%2</b>. Reason: %3"
+msgstr ""
+
+#: kmymoney2.cpp:3393
+msgid "<b>%1</b> cannot be moved to <b>%2</b>. Reason: %3"
+msgstr ""
+
+#: kmymoney2.cpp:3408
+#, fuzzy
+msgid "%1 YTD Account Transactions"
+msgstr "Daň z prevodu"
+
+#: dialogs/kbalancechartdlg.cpp:71 kmymoney2.cpp:3409
+#: views/kforecastview.cpp:650 views/khomeview.cpp:276
+#: views/khomeview.cpp:1384 views/kreportsview.cpp:619
+#, fuzzy
+msgid "Generated Report"
+msgstr "Zmazať výkaz?"
+
+#: dialogs/rc.cpp:324 dialogs/settings/rc.cpp:80 kmymoney2.cpp:3411
+#: views/kreportsview.cpp:1062 views/rc.cpp:58 views/rc.cpp:59
+msgid "Transactions"
+msgstr "Transakcie"
+
+#: kmymoney2.cpp:3449
+#, fuzzy, c-format
+msgid "Unable to add scheduled transaction: %1"
+msgstr "do "
+
+#: kmymoney2.cpp:3449
+#, fuzzy
+msgid "Add scheduled transaction"
+msgstr "Zadať plánovanú transakciu"
+
+#: kmymoney2.cpp:3489
+msgid ""
+"You have entered a scheduled transaction date of <b>%1</b>. Because the "
+"scheduled transaction was last paid on <b>%2</b>, KMyMoney will "
+"automatically adjust the scheduled transaction date to the next date unless "
+"the last payment date is reset. Do you want to reset the last payment date?"
+msgstr ""
+
+#: kmymoney2.cpp:3489
+#, fuzzy
+msgid "Reset Last Payment Date"
+msgstr "Platby do"
+
+#: kmymoney2.cpp:3499 kmymoney2.cpp:3519 kmymoney2.cpp:3531
+#, fuzzy
+msgid "Unable to modify scheduled transaction '%1'"
+msgstr "do "
+
+#: kmymoney2.cpp:3543
+#, fuzzy
+msgid "Are you sure you want to delete the scheduled transaction <b>%1</b>?"
+msgstr "do odstrániť?"
+
+#: kmymoney2.cpp:3546
+#, fuzzy
+msgid ""
+"In case of loan payments it is currently not possible to recreate the "
+"scheduled transaction."
+msgstr "z je do"
+
+#: kmymoney2.cpp:3555
+#, fuzzy
+msgid "Unable to remove scheduled transaction '%1'"
+msgstr "do"
+
+#: kmymoney2.cpp:3569
+#, fuzzy, c-format
+msgid ""
+"_: Copy of scheduled transaction name\n"
+"Copy of %1"
+msgstr "Pustiť"
+
+#: kmymoney2.cpp:3581 kmymoney2.cpp:4352
+#, fuzzy
+msgid "Unable to duplicate transaction(s): %1, thrown in %2:%3"
+msgstr "do "
+
+#: kmymoney2.cpp:3595
+#, fuzzy
+msgid ""
+"Do you really want to skip the <b>%1</b> transaction scheduled for <b>%2</b>?"
+msgstr "do<b></b> do a account z<b></b>?"
+
+#: kmymoney2.cpp:3605
+#, fuzzy
+msgid "Unable to skip scheduled transaction <b>%1</b>."
+msgstr "do úprava"
+
+#: kmymoney2.cpp:3618
+#, fuzzy
+msgid "Unknown scheduled transaction '%1'"
+msgstr "Zadať plánovanú transakciu"
+
+#: kmymoney2.cpp:3673
+#, fuzzy
+msgid ""
+"Are you sure you wish to stop this scheduled transaction from being entered "
+"into the register?\n"
+"\n"
+"KMyMoney will prompt you again next time it starts unless you manually enter "
+"it later."
+msgstr "do z n prompt čas."
+
+#: kmymoney2.cpp:3725 kmymoney2.cpp:3732
+#, fuzzy
+msgid "Unable to enter scheduled transaction '%1'"
+msgstr "Zadať plánovanú transakciu"
+
+#: kmymoney2.cpp:3743 kmymoney2.cpp:3783
+msgid "New Payee"
+msgstr "Nový Príjemca"
+
+#: kmymoney2.cpp:3745
+#, fuzzy
+msgid "Do you want to add <b>%1</b> as payer/receiver ?"
+msgstr "do?"
+
+#: converter/mymoneystatementreader.cpp:892 kmymoney2.cpp:3747
+#, fuzzy
+msgid "New payee/receiver"
+msgstr "Nový"
+
+#: kmymoney2.cpp:3773
+#, fuzzy
+msgid "Unable to add payee"
+msgstr "do"
+
+#: kmymoney2.cpp:3826
+#, fuzzy
+msgid "Do you really want to remove the payee <b>%1</b>?"
+msgstr "do "
+
+#: kmymoney2.cpp:3828
+#, fuzzy
+msgid "Do you really want to remove all selected payees?"
+msgstr "do "
+
+#: kmymoney2.cpp:3830
+msgid "Remove Payee"
+msgstr "Odstrániť príjemcu"
+
+#: kmymoney2.cpp:3870
+msgid ""
+"At least one transaction/scheduled transaction is still referenced by a "
+"payee. Currently you have all payees selected. However, at least one payee "
+"must remain so that the transaction/scheduled transaction can be reassigned."
+msgstr ""
+
+#: kmymoney2.cpp:3925
+#, fuzzy
+msgid "Unable to reassign payee of transaction/split"
+msgstr "do"
+
+#: converter/mymoneyqifreader.cpp:534 converter/mymoneystatementreader.cpp:959
+#: kmymoney2.cpp:3926 kmymoney2.cpp:3983 views/kbudgetview.cpp:636
+#: views/kbudgetview.cpp:737 views/kbudgetview.cpp:751
+#: views/kpayeesview.cpp:519 views/kpayeesview.cpp:870
+msgid "thrown in"
+msgstr "vhodiť"
+
+#: kmymoney2.cpp:3982
+#, fuzzy
+msgid "Unable to remove payee(s)"
+msgstr "do"
+
+#: kmymoney2.cpp:3990
+#, fuzzy
+msgid "Enter ISO 4217 code for the new currency"
+msgstr "Zadať ISO pre nové"
+
+#: kmymoney2.cpp:3999
+#, fuzzy, c-format
+msgid "Cannot create new currency. %1"
+msgstr "nové."
+
+#: kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, fuzzy, c-format
+msgid "Cannot rename currency. %1"
+msgstr "nové."
+
+#: kmymoney2.cpp:4039
+#, fuzzy
+msgid "Cannot delete currency %1. %2"
+msgstr "nové."
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+#, fuzzy
+msgid "Cannot set %1 as base currency: %2"
+msgstr "Vybrať základnú menu"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+#, fuzzy
+msgid "Set base currency"
+msgstr "Vybrať základnú menu"
+
+#: kmymoney2.cpp:4065
+#, fuzzy, c-format
+msgid "Budget %1"
+msgstr "Rozpočty"
+
+#: kmymoney2.cpp:4075
+msgid "Budget %1 (%2)"
+msgstr ""
+
+#: kmymoney2.cpp:4090 kmymoney2.cpp:4139
+#, fuzzy
+msgid "Unable to add budget: %1, thrown in %2:%3"
+msgstr "do dátum 3"
+
+#: kmymoney2.cpp:4105
+#, fuzzy
+msgid "Do you really want to remove the budget <b>%1</b>?"
+msgstr "do<b></b> z súbor?"
+
+#: kmymoney2.cpp:4107
+#, fuzzy
+msgid "Do you really want to remove all selected budgets?"
+msgstr "do odstrániť?"
+
+#: kmymoney2.cpp:4109
+#, fuzzy
+msgid "Remove Budget"
+msgstr "Odstrániť príjemcu"
+
+#: kmymoney2.cpp:4122
+#, fuzzy
+msgid "Unable to remove budget: %1, thrown in %2:%3"
+msgstr "do dátum 3"
+
+#: kmymoney2.cpp:4134 views/kreportsview.cpp:659
+#, c-format
+msgid "Copy of %1"
+msgstr "Kopírovať z %1"
+
+#: kmymoney2.cpp:4164
+#, fuzzy
+msgid "Select year"
+msgstr "Vyberte rok"
+
+#: kmymoney2.cpp:4164
+#, fuzzy
+msgid "Budget year"
+msgstr "Nasledujúci rok"
+
+#: kmymoney2.cpp:4176 kmymoney2.cpp:4214 kmymoney2.cpp:4274
+msgid "Unable to modify budget: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4192 kmymoney2.cpp:4250
+msgid ""
+"The current budget already contains data. Continuing will replace all "
+"current values of this budget."
+msgstr ""
+
+#: kmymoney2.cpp:4222
+msgid ""
+"Please be aware that changes made in the following dialog affect all KDE "
+"applications not only KMyMoney."
+msgstr ""
+
+#: kmymoney2.cpp:4292
+#, fuzzy
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to delete the transactions anyway?"
+msgstr "jeden z do do úprava?"
+
+#: kmymoney2.cpp:4295 views/kgloballedgerview.cpp:1043
+msgid "Transaction already reconciled"
+msgstr ""
+
+#: kmymoney2.cpp:4301
+#, fuzzy
+msgid "Do you really want to delete the selected transaction?"
+msgstr "do odstrániť?"
+
+#: kmymoney2.cpp:4303
+#, fuzzy
+msgid "Do you really want to delete all %1 selected transactions?"
+msgstr "do odstrániť?"
+
+#: kmymoney2.cpp:4305
+msgid "Delete transaction"
+msgstr "Odstrániť transakciu"
+
+#: kmymoney2.cpp:4306
+#, fuzzy
+msgid "Deleting transactions"
+msgstr "Odstrániť transakciu"
+
+#: kmymoney2.cpp:4321
+#, fuzzy
+msgid "Duplicating transactions"
+msgstr "Rozdeliť transakciu"
+
+#: kmymoney2.cpp:4378
+#, fuzzy
+msgid "Unable to delete transaction(s): %1, thrown in %2:%3"
+msgstr "do "
+
+#: kmymoney2.cpp:4452 kmymoney2.cpp:4622
+#, fuzzy
+msgid "Unable to modify transaction: %1, thrown in %2:%3"
+msgstr "do"
+
+#: kmymoney2.cpp:4514
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling and<br>- <b>Cancel</b> returns to the "
+"transaction editor.<p>You can also select an option to save the transaction "
+"automatically when e.g. selecting another transaction."
+msgstr ""
+
+#: kmymoney2.cpp:4514 kmymoney2.cpp:4517
+#, fuzzy
+msgid "Cancel transaction edit"
+msgstr "Platný prevod"
+
+#: kmymoney2.cpp:4517
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling.<p>You can also select an option to save the "
+"transaction automatically when e.g. selecting another transaction."
+msgstr ""
+
+#: kmymoney2.cpp:4667
+#, fuzzy
+msgid "Unable to accept transaction: %1, thrown in %2:%3"
+msgstr "do "
+
+#: kmymoney2.cpp:4846
+#, fuzzy
+msgid "Unable to unmatch the selected transactions"
+msgstr "do"
+
+#: kmymoney2.cpp:4885
+msgid "No manually entered transaction selected for matching"
+msgstr ""
+
+#: kmymoney2.cpp:4887
+#, fuzzy
+msgid "No imported transaction selected for matching"
+msgstr "a"
+
+#: kmymoney2.cpp:4895
+#, fuzzy
+msgid "Unable to match the selected transactions"
+msgstr "do"
+
+#: kmymoney2.cpp:5097
+#, fuzzy
+msgid "Create a new transaction"
+msgstr "Vytvoriť a nové account"
+
+#: kmymoney2.cpp:5163
+#, fuzzy
+msgid "Duplicate the current selected transactions"
+msgstr "Odstrániť vybraný profil"
+
+#: kmymoney2.cpp:5223
+#, fuzzy
+msgid ""
+"_: Button text for unmatch transaction\n"
+"Unmatch"
+msgstr "Použiť do záznam"
+
+#: kmymoney2.cpp:5451 kmymoney2.cpp:5473
+msgid "Goto '%1'"
+msgstr ""
+
+#: kmymoney2.cpp:5582
+#, fuzzy
+msgid "Running consistency check..."
+msgstr "Bežiace kontrola."
+
+#: kmymoney2.cpp:5590
+#, fuzzy, c-format
+msgid "Consistency check failed: %1"
+msgstr "kontrola"
+
+#: kmymoney2.cpp:5594
+#, fuzzy
+msgid "Consistency check result"
+msgstr "kontrola"
+
+#: kmymoney2.cpp:5603
+#, fuzzy
+msgid "Checking for overdue scheduled transactions..."
+msgstr "Kontrolovať pre po termíne."
+
+#: kmymoney2.cpp:5740
+#, fuzzy
+msgid ""
+"You must first select a KMyMoney file before you can import a statement."
+msgstr "Vy prvý a súbor import a."
+
+#: kmymoney2.cpp:5746
+#, fuzzy
+msgid "Importing a statement via Web Connect"
+msgstr "Importuje sa a Pavučina Pripojiť"
+
+#: kmymoney2.cpp:5759
+#, fuzzy
+msgid ""
+"Unable to import %1 using %2 plugin. The plugin returned the following "
+"error: %3"
+msgstr "do import modul modul chyby 3"
+
+#: kmymoney2.cpp:5759 plugins/ofximport/ofximporterplugin.cpp:646
+msgid "Importing error"
+msgstr "Chyba importu"
+
+#: kmymoney2.cpp:5780
+#, fuzzy
+msgid "All messages have been enabled."
+msgstr "Všetky aktivované."
+
+#: kmymoney2.cpp:5780
+msgid "All messages"
+msgstr "Všetky správy"
+
+#: kmymoney2.cpp:5855
+#, fuzzy
+msgid "Auto saving..."
+msgstr "Ukladanie súboru..."
+
+#: kmymoney2.cpp:5913
+#, fuzzy
+msgid "Unable to setup online parameters for account ''%1'"
+msgstr "do account "
+
+#: kmymoney2.cpp:5928
+msgid ""
+"Do you really want to remove the mapping of account <b>%1</b> to an online "
+"account? Depending on the details of the online banking method used, this "
+"action cannot be reverted."
+msgstr ""
+
+#: kmymoney2.cpp:5928
+#, fuzzy
+msgid "Remove mapping to online account"
+msgstr "do account."
+
+#: kmymoney2.cpp:5939
+#, fuzzy, c-format
+msgid "Unable to unmap account from online account: %1"
+msgstr "do account "
+
+#: kmymoney2.cpp:5956
+#, fuzzy
+msgid " (Brokerage)"
+msgstr "(sprostredkovateľský)"
+
+#: kmymoney2.cpp:5957
+msgid ""
+"You try to map a brokerage account to an online account. This is usually not "
+"advisable. In general, the investment account should be mapped to the online "
+"account. Please cancel if you intended to map the investment account, "
+"continue otherwise"
+msgstr ""
+
+#: kmymoney2.cpp:5957
+#, fuzzy
+msgid "Mapping brokerage account"
+msgstr "Účet"
+
+#: kmymoney2.cpp:5964
+msgid "Select online banking plugin"
+msgstr ""
+
+#: kmymoney2.cpp:6005
+#, fuzzy, c-format
+msgid "Unable to map account to online account: %1"
+msgstr "do account "
+
+#: converter/mymoneyqifreader.cpp:407 converter/mymoneytemplate.cpp:73
+#: views/kmymoneyview.cpp:590
+#, fuzzy
+msgid "Error while loading file '%1'!"
+msgstr "Chyba súbor!"
+
+#: converter/mymoneyqifreader.cpp:409 converter/mymoneyqifreader.cpp:965
+#: converter/mymoneytemplate.cpp:75 views/kmymoneyview.cpp:592
+msgid "File access error"
+msgstr "Chyba pri prístupe k súboru"
+
+#: converter/mymoneytemplate.cpp:84
+msgid "<b>%1</b> is not a template file."
+msgstr "<b>%1</b> nie je súbor so šablónou."
+
+#: converter/mymoneytemplate.cpp:85 views/kmymoneyview.cpp:603
+msgid "Filetype Error"
+msgstr "Chyba typu súboru"
+
+#: converter/mymoneytemplate.cpp:93
+#, fuzzy
+msgid "Error while reading template file <b>%1</b> in line %2, column %3"
+msgstr "Chyba súbor<b></b> v riadok 3"
+
+#: converter/mymoneytemplate.cpp:94
+msgid "Template Error"
+msgstr "Cbyba šablóny "
+
+#: converter/mymoneytemplate.cpp:101
+msgid "File '%1' not found!"
+msgstr "Súbor %1 nebol nájdený!"
+
+#: converter/mymoneytemplate.cpp:142
+msgid "Invalid tag <b>%1</b> in template file <b>%2</b>!"
+msgstr "Neplatný tag <b>%1</b> v súbore so šablónou <b>%2</b>!"
+
+#: converter/mymoneytemplate.cpp:214
+#, c-format
+msgid "Loading template %1"
+msgstr "Načítavam šablónu %1"
+
+#: converter/mymoneytemplate.cpp:241
+#, fuzzy
+msgid "Invalid top-level account type <b>%1</b> in template file <b>%2</b>!"
+msgstr "Neplatný hore úroveň account typ<b></b> v súbor<b></b>!"
+
+#: converter/mymoneytemplate.cpp:309
+#, fuzzy
+msgid ""
+"Invalid flag type <b>%1</b> for account <b>%3</b> in template file <b>%2</b>!"
+msgstr "Neplatný typ<b></b> pre account<b></b> v súbor<b></b>!"
+
+#: converter/mymoneytemplate.cpp:398 converter/mymoneytemplate.cpp:401
+#: views/kmymoneyview.cpp:1151 views/kmymoneyview.cpp:1154
+#, fuzzy
+msgid "Unable to write changes to '%1'"
+msgstr "do do"
+
+#: converter/mymoneytemplate.cpp:407 views/kmymoneyview.cpp:1162
+msgid "Unable to upload to '%1'"
+msgstr "Nemôžem poslať súbor '%1'"
+
+#: converter/mymoneyqifwriter.cpp:70
+#, fuzzy
+msgid ""
+"Unexpected exception '%1' thrown in %2, line %3 caught in MyMoneyQifWriter::"
+"write()"
+msgstr "v riadok v"
+
+#: converter/mymoneyqifwriter.cpp:80
+msgid "Unable to open file '%1' for writing"
+msgstr "Nepodarilo sa otvoriť súbor '%1' pre zápis"
+
+#: converter/webpricequote.cpp:340
+#, c-format
+msgid "Symbol found: %1"
+msgstr "Nájdený symbol: %1"
+
+#: converter/webpricequote.cpp:368
+msgid "Price found: %1 (%2)"
+msgstr "Nájdená cena: %1"
+
+#: converter/webpricequote.cpp:380
+#, c-format
+msgid "Date found: %1"
+msgstr "Nájdený dátum: %1"
+
+#: converter/webpricequote.cpp:397 converter/webpricequote.cpp:403
+#, fuzzy, c-format
+msgid "Unable to update price for %1"
+msgstr "do pre 1"
+
+#: converter/mymoneyqifreader.cpp:170
+#, fuzzy
+msgid ""
+"_: Category name\n"
+"Reinvested dividend"
+msgstr "Reinvestícia dividend"
+
+#: converter/mymoneyqifreader.cpp:173
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (long term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:176
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (short term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:179
+msgid ""
+"_: Category name\n"
+"Dividend"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:182
+msgid ""
+"_: Category name\n"
+"Interest"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:185
+msgid ""
+"_: Category name\n"
+"Capital Gain (short term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:188
+msgid ""
+"_: Category name\n"
+"Capital Gain (mid term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:191
+msgid ""
+"_: Category name\n"
+"Capital Gain (long term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:194
+msgid ""
+"_: Category name\n"
+"Returned capital"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:197
+msgid ""
+"_: Category name\n"
+"Miscellaneous income"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:200
+msgid ""
+"_: Category name\n"
+"Miscellaneous expense"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:203
+msgid ""
+"_: Category name\n"
+"Investment fees"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:205
+#, fuzzy, c-format
+msgid "Unknown QIF type %1"
+msgstr "Neznámy príjemca"
+
+#: converter/mymoneyqifreader.cpp:355
+#, fuzzy
+msgid "Date format selection"
+msgstr "Výber kategórie"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Pick the date format that suits your input file"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:366
+#, fuzzy
+msgid "Importing QIF ..."
+msgstr "Importuje sa súbor..."
+
+#: converter/mymoneyqifreader.cpp:442
+#, fuzzy
+msgid "Reading QIF ..."
+msgstr "QIF..."
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Adding transactions"
+msgstr "Pridanie prevodov"
+
+#: converter/mymoneyqifreader.cpp:507
+#, fuzzy
+msgid "Now adding the transactions to your ledger..."
+msgstr "Teraz do."
+
+#: converter/mymoneyqifreader.cpp:533
+#, fuzzy
+msgid "Unable to add transactions"
+msgstr "do "
+
+#: converter/mymoneyqifreader.cpp:567
+msgid ""
+"_: QIF tag for liability account\n"
+"Oth L"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:572
+msgid ""
+"_: QIF tag for category\n"
+"Cat"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:575
+msgid ""
+"_: QIF tag for security\n"
+"Security"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:578
+#, fuzzy
+msgid ""
+"_: QIF tag for investment account\n"
+"Invst"
+msgstr "Investícia"
+
+#: converter/mymoneyqifreader.cpp:581
+msgid ""
+"_: QIF tag for prices\n"
+"Prices"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:599
+msgid ""
+"_: QIF tag for a class\n"
+"Class"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:753 converter/mymoneyqifreader.cpp:2203
+#, fuzzy
+msgid ""
+"The %1 account currently has an opening balance of %2. This QIF file reports "
+"an opening balance of %3. Would you like to overwrite the current balance "
+"with the one from the QIF file?"
+msgstr ""
+"account otvára sa z QIF súbor otvára sa z podobný do prepísať jeden z QIF "
+"súbor?"
+
+#: converter/mymoneyqifreader.cpp:754 converter/mymoneyqifreader.cpp:2204
+#, fuzzy
+msgid "Overwrite opening balance"
+msgstr "Prepísať otvára sa"
+
+#: converter/mymoneyqifreader.cpp:879 converter/mymoneyqifreader.cpp:890
+#: converter/mymoneyqifreader.cpp:914
+msgid "Autogenerated by QIF importer"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:907
+#, fuzzy
+msgid "QIF imported, no account name supplied"
+msgstr "Import šablóny konta"
+
+#: converter/mymoneyqifreader.cpp:940
+msgid ""
+"KMyMoney has imported a second opening balance transaction into account <b>%"
+"1</b> which differs from the one found already on file. Please correct this "
+"manually once the import is done."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:940
+#, fuzzy
+msgid "Opening balance problem"
+msgstr "Počiatočný stav"
+
+#: converter/mymoneyqifreader.cpp:963
+#, fuzzy
+msgid "Error while creating opening balance transaction"
+msgstr "Skryť"
+
+#: converter/mymoneyqifreader.cpp:1029 converter/mymoneyqifreader.cpp:1276
+#, fuzzy
+msgid ""
+"The date entry \"%1\" read from the file cannot be interpreted through the "
+"current date profile setting of \"%2\".\n"
+"\n"
+"Pressing \"Continue\" will assign todays date to the transaction. Pressing "
+"\"Cancel\" will abort the import operation. You can then restart the import "
+"and select a different QIF profile or create a new one."
+msgstr ""
+"dátum položka z súbor dátum profile z n Pokračovať dátum do Zrušiť import Vy "
+"import a a QIF profile alebo a nové jeden."
+
+#: converter/mymoneyqifreader.cpp:1035 converter/mymoneyqifreader.cpp:1282
+msgid "Invalid date format"
+msgstr "Neplatný formát dátumu"
+
+#: converter/mymoneyqifreader.cpp:1398
+#: converter/mymoneystatementreader.cpp:589
+#: converter/mymoneystatementreader.cpp:592
+msgid "Statement Importer"
+msgstr "Importer informácií"
+
+#: converter/mymoneyqifreader.cpp:1413
+#: converter/mymoneystatementreader.cpp:644
+#, fuzzy
+msgid ""
+"This investment account does not contain the \"%1\" security. Transactions "
+"involving this security will be ignored."
+msgstr "account obsahuje."
+
+#: converter/mymoneyqifreader.cpp:1415
+#: converter/mymoneystatementreader.cpp:612
+#: converter/mymoneystatementreader.cpp:644
+msgid "Security not found"
+msgstr "Bezpečnosť nenájdená"
+
+#: converter/mymoneyqifreader.cpp:2021
+#, fuzzy
+msgid "%1 (Investment)"
+msgstr "Investícia"
+
+#: converter/mymoneyqifreader.cpp:2022
+msgid "Autogenerated by QIF importer from type Mutual account entry"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2085 converter/mymoneyqifreader.cpp:2228
+msgid "account"
+msgstr "účet"
+
+#: converter/mymoneyqifreader.cpp:2086
+msgid "al"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2093
+msgid "category"
+msgstr "kategória"
+
+#: converter/mymoneyqifreader.cpp:2094
+msgid "ei"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2095
+msgid "Category selection"
+msgstr "Výber kategórie"
+
+#: converter/mymoneyqifreader.cpp:2110
+#, fuzzy
+msgid "Account \"%1\" disappeared: "
+msgstr "Účet "
+
+#: converter/mymoneyqifreader.cpp:2131
+#, fuzzy
+msgid "The %1 '%2' does not exist. Do you want to create it?"
+msgstr "do?"
+
+#: converter/mymoneyqifreader.cpp:2140
+#, c-format
+msgid "Select %1"
+msgstr "Vybrať %1"
+
+#: converter/mymoneyqifreader.cpp:2142
+#, fuzzy
+msgid ""
+"The %1 <b>%2</b> currently exists. Do you want to import transactions to "
+"this account?"
+msgstr "<b></b> do import do account?"
+
+#: converter/mymoneyqifreader.cpp:2147
+#, fuzzy
+msgid ""
+"The %1 <b>%2</b> currently does not exist. You can create a new %3 by "
+"pressing the <b>Create</b> button or select another %4 manually from the "
+"selection box."
+msgstr "<b></b> Vy a nové<b> Vytvoriť</b> alebo z box."
+
+#: converter/mymoneyqifreader.cpp:2154
+#, fuzzy, c-format
+msgid "Import transactions to %1"
+msgstr "Import do 1"
+
+#: converter/mymoneyqifreader.cpp:2155
+#, fuzzy
+msgid ""
+"No %1 information has been found in the selected QIF file. Please select an "
+"account using the selection box in the dialog or create a new %2 by pressing "
+"the <b>Create</b> button."
+msgstr "Nie informácie v QIF súbor account box v alebo a nové<b> Vytvoriť</b>."
+
+#: converter/mymoneyqifreader.cpp:2229
+msgid "You must select or create an account."
+msgstr "Musíte vybrať alebo vytvoriť účet."
+
+#: converter/mymoneyqifreader.cpp:2231
+msgid "You must select or create a category."
+msgstr "Musíte vybrať alebo vytvoriť kategóriu."
+
+#: converter/mymoneystatementreader.cpp:100
+#, fuzzy
+msgid "_Fees"
+msgstr "Poplatky"
+
+#: converter/mymoneystatementreader.cpp:106
+#, fuzzy
+msgid "_Dividend"
+msgstr "Dividendy"
+
+#: converter/mymoneystatementreader.cpp:289
+#, fuzzy, c-format
+msgid "Importing statement for account %1"
+msgstr "Importuje sa a modul"
+
+#: converter/mymoneystatementreader.cpp:291
+#, fuzzy
+msgid "Importing statement without transactions"
+msgstr "Importuje sa a modul"
+
+#: converter/mymoneystatementreader.cpp:385
+#, fuzzy
+msgid " Statement balance is not contained in statement."
+msgstr "Začiatočná bilancia z tohoto vúčtovania:"
+
+#: converter/mymoneystatementreader.cpp:387
+msgid " Statement balance on %1 is reported to be %2"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:389
+#, fuzzy
+msgid " Transactions"
+msgstr "Transakcie"
+
+#: converter/mymoneystatementreader.cpp:390
+msgid " %1 processed"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:391
+msgid " %1 added"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:392
+msgid " %1 matched"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:393
+#, fuzzy
+msgid " %1 duplicates"
+msgstr "Duplikovať"
+
+#: converter/mymoneystatementreader.cpp:394
+#, fuzzy
+msgid " Payees"
+msgstr "Príjemcovia"
+
+#: converter/mymoneystatementreader.cpp:395
+msgid " %1 created"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:483
+#, fuzzy, c-format
+msgid "Error creating security record: %1"
+msgstr "Chyba do 1"
+
+#: converter/mymoneystatementreader.cpp:612
+#, fuzzy
+msgid ""
+"This imported statement contains investment transactions with no security. "
+"These transactions will be ignored."
+msgstr "account obsahuje."
+
+#: converter/mymoneystatementreader.cpp:803
+msgid "(Fees) "
+msgstr "(Poplatky)"
+
+#: converter/mymoneystatementreader.cpp:880
+#, fuzzy
+msgid ""
+"Do you want to add \"%1\" as payee/receiver?\n"
+"\n"
+msgstr "do n n"
+
+#: converter/mymoneystatementreader.cpp:881
+#, fuzzy
+msgid ""
+"Selecting \"Yes\" will create the payee, \"No\" will skip creation of a "
+"payee record and remove the payee information from this transaction. "
+"Selecting \"Cancel\" aborts the import operation.\n"
+"\n"
+"If you select \"No\" here and mark the \"Don't ask again\" checkbox, the "
+"payee information for all following transactions referencing \"%1\" will be "
+"removed."
+msgstr ""
+"Áno Nie z a záznam a informácie z Zrušiť import n Nie a pýtať sa informácie "
+"pre všetky."
+
+#: converter/mymoneystatementreader.cpp:917
+#, fuzzy
+msgid "Save Category"
+msgstr "Kategória poplatku"
+
+#: converter/mymoneystatementreader.cpp:918
+#, fuzzy
+msgid "No Category"
+msgstr "Horná kategória"
+
+#: converter/mymoneystatementreader.cpp:919 dialogs/rc.cpp:4
+msgid "Abort"
+msgstr "Zrušiť"
+
+#: converter/mymoneystatementreader.cpp:926
+msgid "Please select a default category for payee '%1':"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:958
+#, fuzzy
+msgid "Unable to add payee/receiver"
+msgstr "do"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid ""
+"KMyMoney has found a scheduled transaction named <b>%1</b> which matches an "
+"imported transaction. Do you want KMyMoney to enter this schedule now so "
+"that the transaction can be matched? "
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1162
+#, fuzzy
+msgid "Schedule found"
+msgstr "Plánovanie"
+
+#: converter/mymoneystatementreader.cpp:1219
+#, fuzzy
+msgid "Problem adding or matching imported transaction with id '%1': %2"
+msgstr "Problém "
+
+#: converter/mymoneystatementreader.cpp:1268
+#, fuzzy
+msgid ""
+"<b>You have downloaded a statement for the following account:</b><br><br>"
+msgstr "<b> Vy a pre account</b><br><br>"
+
+#: converter/mymoneystatementreader.cpp:1269
+#, fuzzy, c-format
+msgid " - Account Name: %1"
+msgstr "- Meno účtu: %1<br>"
+
+#: converter/mymoneystatementreader.cpp:1270
+#, fuzzy, c-format
+msgid " - Account Type: %1"
+msgstr "- Typ účtu: %1<br>"
+
+#: converter/mymoneystatementreader.cpp:1271
+#, fuzzy, c-format
+msgid " - Account Number: %1"
+msgstr "- Číslo účtu: %1<br>"
+
+#: converter/mymoneystatementreader.cpp:1279
+#, fuzzy
+msgid "Do you want to import transactions to this account?"
+msgstr "do import do account?"
+
+#: converter/mymoneystatementreader.cpp:1281
+#, fuzzy
+msgid ""
+"KMyMoney cannot determine which of your accounts to use. You can create a "
+"new account by pressing the <b>Create</b> button or select another one "
+"manually from the selection box below."
+msgstr "z do Vy a nové account<b> Vytvoriť</b> alebo jeden z box."
+
+#: converter/mymoneystatementreader.cpp:1287
+#, fuzzy
+msgid ""
+"No account information has been found in the selected statement file. Please "
+"select an account using the selection box in the dialog or create a new "
+"account by pressing the <b>Create</b> button."
+msgstr ""
+"Nie account informácie v súbor account box v alebo a nové account<b> "
+"Vytvoriť</b>."
+
+#: converter/mymoneystatementreader.cpp:1294
+msgid "Import transactions"
+msgstr "Import prevodu"
+
+#: converter/mymoneystatementreader.cpp:1330
+#, fuzzy
+msgid ""
+"You must select an account, create a new one, or press the <b>Abort</b> "
+"button."
+msgstr "Vy account a nové jeden alebo<b> Zrušiť</b>."
+
+#: converter/mymoneygncreader.cpp:119
+#, fuzzy
+msgid "%1: Sorry. This importer cannot handle version %2 of element %3"
+msgstr "verzia z."
+
+#: converter/mymoneygncreader.cpp:193
+#, c-format
+msgid "Account%1"
+msgstr "Účet%1"
+
+#: converter/mymoneygncreader.cpp:197
+#, c-format
+msgid "Stock%1"
+msgstr "Zásoba%1"
+
+#: converter/mymoneygncreader.cpp:206
+#, c-format
+msgid "Payee%1"
+msgstr "Príjemca%1"
+
+#: converter/mymoneygncreader.cpp:212
+#, c-format
+msgid "Schedule%1"
+msgstr "Plán%1"
+
+#: converter/mymoneygncreader.cpp:262
+#, fuzzy
+msgid "This version of the importer cannot handle multi-book files."
+msgstr "verzia z."
+
+#: converter/mymoneygncreader.cpp:912
+#, fuzzy
+msgid "Invalid header for file. Should be 'gnc-v2'"
+msgstr "Neplatný hlavička pre súbor"
+
+#: converter/mymoneygncreader.cpp:937 converter/mymoneygncreader.cpp:972
+#: converter/mymoneygncreader.cpp:1062
+#, fuzzy, c-format
+msgid ""
+"Import failed:\n"
+"\n"
+"%1"
+msgstr "Import zlyhanie n n"
+
+#: converter/mymoneygncreader.cpp:1065
+#, fuzzy
+msgid "Import complete"
+msgstr "Možnosti importu"
+
+#: converter/mymoneygncreader.cpp:1120
+msgid "Disguise your wealth"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1121
+#, fuzzy
+msgid ""
+"Each monetary value on your file will be multiplied by a random number "
+"between 0.01 and 1.99\n"
+"with a different value used for each transaction. In addition, to further "
+"disguise the true\n"
+"values, you may enter a number between %1 and %2 which will be applied to "
+"all values.\n"
+"These numbers will not be stored in the file."
+msgstr ""
+"zapnuté súbor a číslo medzi a a pre do pravda a číslo medzi a do všetky v "
+"súbor."
+
+#: converter/mymoneygncreader.cpp:1135
+msgid "Loading commodities..."
+msgstr "Načítavam komodity..."
+
+#: converter/mymoneygncreader.cpp:1160
+msgid "Loading prices..."
+msgstr "Načítavam ceny..."
+
+#: converter/mymoneygncreader.cpp:1164 converter/mymoneygncreader.cpp:1171
+msgid "Imported History"
+msgstr "Importovaná História"
+
+#: converter/mymoneygncreader.cpp:1251
+#, fuzzy, c-format
+msgid "Current importer does not recognize GnuCash account type %1"
+msgstr "Aktuálne account typ 1"
+
+#: converter/mymoneygncreader.cpp:1471
+msgid "Imported Transaction"
+msgstr "Importované prevody"
+
+#: converter/mymoneygncreader.cpp:1519
+msgid "Loading templates..."
+msgstr "Načítavam.šablóny..."
+
+#: converter/mymoneygncreader.cpp:1531
+msgid "Unknown payee"
+msgstr "Neznámy príjemca"
+
+#: converter/mymoneygncreader.cpp:1723
+msgid "Loading schedules..."
+msgstr "Načítavam.úlohy"
+
+#: converter/mymoneygncreader.cpp:1735
+#, fuzzy, c-format
+msgid "Can't find template transaction for schedule %1"
+msgstr "Hľadať súbory pre 1"
+
+#: converter/mymoneygncreader.cpp:1910
+msgid "Reorganizing accounts..."
+msgstr "Reorganizovať účty..."
+
+#: converter/mymoneygncreader.cpp:1972
+#, fuzzy
+msgid ""
+"Your main currency seems to be %1 (%2); do you want to set this as your base "
+"currency?"
+msgstr "do do množina základ?"
+
+#: converter/mymoneygncreader.cpp:1993
+msgid "More"
+msgstr "Viac"
+
+#: converter/mymoneygncreader.cpp:1997
+#, fuzzy
+msgid "Save Report"
+msgstr "Obľúbené výkazy"
+
+#: converter/mymoneygncreader.cpp:2017
+msgid ""
+"Problems were encountered in converting schedule '%1'.\n"
+"Do you want to review or edit it now?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2039
+#, fuzzy
+msgid ""
+"Found:\n"
+"\n"
+msgstr "n n"
+
+#: converter/mymoneygncreader.cpp:2040
+#, fuzzy
+msgid " commodities (equities)\n"
+msgstr "n"
+
+#: converter/mymoneygncreader.cpp:2041
+msgid " prices\n"
+msgstr "ceny\n"
+
+#: converter/mymoneygncreader.cpp:2042
+msgid " accounts\n"
+msgstr "účty\n"
+
+#: converter/mymoneygncreader.cpp:2043
+msgid " transactions\n"
+msgstr "prevody\n"
+
+#: converter/mymoneygncreader.cpp:2044
+msgid " schedules\n"
+msgstr "úlohy\n"
+
+#: converter/mymoneygncreader.cpp:2047
+#, fuzzy
+msgid "No inconsistencies were detected"
+msgstr "Nie"
+
+#: converter/mymoneygncreader.cpp:2049
+#, fuzzy
+msgid " inconsistencies were detected and corrected\n"
+msgstr "a n"
+
+#: converter/mymoneygncreader.cpp:2054
+#, fuzzy
+msgid " orphan accounts were created\n"
+msgstr "n"
+
+#: converter/mymoneygncreader.cpp:2059
+#, fuzzy
+msgid " possible schedule problems were noted\n"
+msgstr "n"
+
+#: converter/mymoneygncreader.cpp:2064
+#, fuzzy
+msgid "Small Business Features (Customers, Invoices, etc.)"
+msgstr "Malé Obchodné Možnosti Faktúry"
+
+#: converter/mymoneygncreader.cpp:2065 views/kmymoneyview.cpp:241
+#: views/kmymoneyview.cpp:243
+msgid "Budgets"
+msgstr "Rozpočty"
+
+#: converter/mymoneygncreader.cpp:2066
+msgid "Lots"
+msgstr "Veľa"
+
+#: converter/mymoneygncreader.cpp:2068
+#, fuzzy
+msgid "The following features found in your file are not currently supported:"
+msgstr "v súbor:"
+
+#: converter/mymoneygncreader.cpp:2071
+#, fuzzy
+msgid ""
+"\n"
+"\n"
+"Press More for further information"
+msgstr "n Viac pre informácie"
+
+#: converter/mymoneygncreader.cpp:2139
+#, fuzzy
+msgid "Orphan created from unknown gnucash account"
+msgstr "Sirota z neznámy account"
+
+#: converter/mymoneygncreader.cpp:2170
+#, fuzzy
+msgid "Internal error - invalid interval char in incrDate"
+msgstr "chyby znak v"
+
+#: converter/mymoneygncreader.cpp:2233
+#, fuzzy
+msgid "Enter the investment account name "
+msgstr "Zadať account meno "
+
+#: converter/mymoneygncreader.cpp:2234
+msgid "My Investments"
+msgstr "Moje investície"
+
+#: converter/mymoneygncreader.cpp:2269
+#, fuzzy, c-format
+msgid "Select parent investment account or enter new name. Stock %1"
+msgstr "Vybrať account alebo nové meno Zásoba 1"
+
+#: converter/mymoneygncreader.cpp:2292 converter/mymoneygncreader.cpp:2307
+#, fuzzy
+msgid "%1 is not an Investment Account. Do you wish to make it one?"
+msgstr "je Investícia Účet do jeden?"
+
+#: converter/mymoneygncreader.cpp:2408
+#, fuzzy
+msgid ""
+"An Investment account must be a child of an Asset account\n"
+"Account %1 will be stored under the main Asset account"
+msgstr "Investícia account a z Aktíva account Aktíva account"
+
+#: converter/mymoneygncreader.cpp:2410
+#, fuzzy
+msgid ""
+"An Income account must be a child of an Income account\n"
+"Account %1 will be stored under the main Income account"
+msgstr "Príjem account a z Príjem account Príjem account"
+
+#: converter/mymoneygncreader.cpp:2412
+#, fuzzy
+msgid ""
+"An Expense account must be a child of an Expense account\n"
+"Account %1 will be stored under the main Expense account"
+msgstr "Výdaj account a z Výdaj account Výdaj account"
+
+#: converter/mymoneygncreader.cpp:2414
+#, fuzzy
+msgid ""
+"One or more transactions contain a reference to an otherwise unknown "
+"account\n"
+"An asset account with the name %1 has been created to hold the data"
+msgstr "Jeden alebo viac obsahuje a do neznámy account account meno do"
+
+#: converter/mymoneygncreader.cpp:2416
+#, fuzzy
+msgid "Schedule %1 has interval of %2 which is not currently available"
+msgstr "Plánovať z je"
+
+#: converter/mymoneygncreader.cpp:2417
+#, fuzzy
+msgid "Schedule %1 dropped at user request"
+msgstr "Plánovať na používateľská"
+
+#: converter/mymoneygncreader.cpp:2418
+#, fuzzy
+msgid "Schedule %1 contains unknown action (key = %2, type = %3)"
+msgstr "Plánovať obsahuje neznámy akcia kľúč typ"
+
+#: converter/mymoneygncreader.cpp:2419
+#, fuzzy
+msgid "Schedule %1 contains multiple actions; only one has been imported"
+msgstr "Plánovať obsahuje jeden"
+
+#: converter/mymoneygncreader.cpp:2420
+#, fuzzy
+msgid "Schedule %1 contains no valid splits"
+msgstr "Plánovať obsahuje nie"
+
+#: converter/mymoneygncreader.cpp:2421
+#, fuzzy
+msgid ""
+"Schedule %1 appears to contain a formula. GnuCash formulae are not "
+"convertible"
+msgstr "Plánovať do obsahuje a"
+
+#: converter/mymoneygncreader.cpp:2422
+#, fuzzy
+msgid ""
+"Schedule %1 contains unknown interval specification; please check for "
+"correct operation"
+msgstr "Plánovať obsahuje a kontrola pre"
+
+#: converter/mymoneygncreader.cpp:2423
+#, fuzzy
+msgid ""
+"Schedule %1 contains a deferred interval specification; please check for "
+"correct operation"
+msgstr "Plánovať obsahuje a kontrola pre"
+
+#: converter/mymoneygncreader.cpp:2424
+#, fuzzy
+msgid ""
+"Account or Category %1, transaction date %2; split contains invalid value; "
+"please check"
+msgstr "Účet alebo Kategória dátum obsahuje kontrola"
+
+#: kmymoneyutils.cpp:146
+msgid "&New Schedule..."
+msgstr "&Nový plán"
+
+#: kmymoneyutils.cpp:148
+msgid "Create a new schedule."
+msgstr "Vytvoriť nový plán."
+
+#: kmymoneyutils.cpp:149
+#, fuzzy
+msgid "Use this to create a new schedule."
+msgstr "Použiť do a nové."
+
+#: kmymoneyutils.cpp:158
+msgid "&Filter"
+msgstr "&Filter"
+
+#: kmymoneyutils.cpp:160
+msgid "Filter out accounts"
+msgstr "Odfiltrovať účty"
+
+#: kmymoneyutils.cpp:161
+#, fuzzy
+msgid "Use this to filter out accounts"
+msgstr "Použiť do filter"
+
+#: kmymoneyutils.cpp:192
+msgid "Preferred accounts"
+msgstr "Preferovaný účet"
+
+#: kmymoneyutils.cpp:193
+msgid "Payment accounts"
+msgstr "Platby účtov"
+
+#: kmymoneyutils.cpp:194
+msgid "Favorite reports"
+msgstr "Obľúbené výkazy"
+
+#: kmymoneyutils.cpp:195
+#, fuzzy
+msgid "Forecast (schedule)"
+msgstr "Vytvoriť.plán"
+
+#: kmymoneyutils.cpp:196
+#, fuzzy
+msgid "Networth forecast"
+msgstr "Čistá hodnota dnes"
+
+#: kmymoneyutils.cpp:197
+msgid "Forecast (history)"
+msgstr ""
+
+#: kmymoneyutils.cpp:198
+#, fuzzy
+msgid "Assets and Liabilities"
+msgstr "Aktíva a pasíva"
+
+#: kmymoneyutils.cpp:199 reports/pivottable.cpp:2416 views/khomeview.cpp:1393
+#: widgets/rc.cpp:70
+#, fuzzy
+msgid "Budget"
+msgstr "Rozpočty"
+
+#: kmymoneyutils.cpp:200
+#, fuzzy
+msgid "CashFlow"
+msgstr "Hotovosť"
+
+#: dialogs/kenterscheduledlg.cpp:153 kmymoneyutils.cpp:366
+#, fuzzy
+msgid "Unable to load schedule details"
+msgstr "do"
+
+#: kmymoneyutils.cpp:390 widgets/register.cpp:473
+#, fuzzy
+msgid ""
+"_: Reconcile state 'Not reconciled'\n"
+"Not reconciled"
+msgstr "nevysporiadané"
+
+#: kmymoneyutils.cpp:393 widgets/register.cpp:476
+#, fuzzy
+msgid ""
+"_: Reconcile state 'Cleared'\n"
+"Cleared"
+msgstr "Sprievodca kontrolou dát"
+
+#: kmymoneyutils.cpp:396 widgets/register.cpp:479
+#, fuzzy
+msgid ""
+"_: Reconcile state 'Reconciled'\n"
+"Reconciled"
+msgstr "nevysporiadané"
+
+#: kmymoneyutils.cpp:399 widgets/register.cpp:482
+#, fuzzy
+msgid ""
+"_: Reconcile state 'Frozen'\n"
+"Frozen"
+msgstr "Posledný 1"
+
+#: kmymoneyutils.cpp:410
+#, fuzzy
+msgid ""
+"_: Reconcile flag C\n"
+"C"
+msgstr "Vysporiadané"
+
+#: kmymoneyutils.cpp:413
+#, fuzzy
+msgid ""
+"_: Reconcile flag R\n"
+"R"
+msgstr "Vysporiadané"
+
+#: kmymoneyutils.cpp:416
+#, fuzzy
+msgid ""
+"_: Reconcile flag F\n"
+"F"
+msgstr "Vysporiadané"
+
+#: kmymoneyutils.cpp:419
+msgid ""
+"_: Flag for unknown reconciliation state\n"
+"?"
+msgstr ""
+
+#: _tips.cpp:3
+#, fuzzy
+msgid ""
+"<p>...that you can change the sort order of ledger entries by\n"
+"right-clicking the header of the ledger view?\n"
+msgstr "<p> z hlavička z n"
+
+#: _tips.cpp:9
+#, fuzzy
+msgid ""
+"<p>...that you can easily move to the other side of a transfer transaction\n"
+"by opening the context menu with the right mouse button and selecting one of "
+"the\n"
+"'Goto' functions?\n"
+msgstr "<p> do z a otvára sa menu vpravo myš a n funkcia n"
+
+#: _tips.cpp:16
+#, fuzzy
+msgid ""
+"<p>...that you can start editing a transaction by double-clicking on the\n"
+"transaction in the register?\n"
+msgstr "<p> štart a double zapnuté v n"
+
+#: _tips.cpp:22
+#, fuzzy
+msgid ""
+"<p>...that you can show more details of the selected transaction in the\n"
+"register by selecting the 'ledger lens' feature in the settings dialog?\n"
+msgstr "<p> viac z v feature v nastavenie n"
+
+#: _tips.cpp:28
+#, fuzzy
+msgid ""
+"<p>...that transactions with no category assigned or split\n"
+"transactions with unassigned values are marked with an exclamation mark \n"
+"on a yellow triangle in the register?\n"
+msgstr ""
+"<p> nie alebo v\n"
+"<font color=\"red\"></font> v n"
+
+#: _tips.cpp:35
+#, fuzzy
+msgid ""
+"<p>...that you can show all details of the transactions in the register\n"
+"by typing &lt;Ctrl-T&gt; or selecting the 'Settings/Show Transaction "
+"Detail'\n"
+"menu entry? You can turn this feature off the same way.\n"
+msgstr ""
+"<p> všetky z v&lt; Ctrl T&gt; alebo Nastavenia Zobraziť Detailné položka Vy "
+"feature vypnuté n"
+
+#: _tips.cpp:42
+#, fuzzy
+msgid ""
+"<p>...that you can switch between a listing of all accounts or\n"
+"an icon view of all asset and liability accounts with the tabs\n"
+"in the accounts view?\n"
+msgstr "<p> medzi a z všetky alebo ikona z všetky a n"
+
+#: _tips.cpp:49
+#, fuzzy
+msgid "<p>...that the KMyMoney development team wishes you a nice day?\n"
+msgstr "<p> a deň n"
+
+#: _tips.cpp:54
+#, fuzzy
+msgid ""
+"<p>...you can use your own external filter program to convert any\n"
+"import format to QIF on the fly? See the QIF profile editor for\n"
+"more details.\n"
+msgstr ""
+"<p> filter program do akýkoľvek do QIF zapnuté QIF profile editor pre n"
+
+#: _tips.cpp:61
+#, fuzzy
+msgid ""
+"<p>...that you can create a scheduled transaction from an existing\n"
+"one by selecting the context menu on a transaction in the ledger\n"
+"or the \"More...\"-menu in the transaction form?\n"
+msgstr "<p> a z nič menu zapnuté a v Viac menu v n"
+
+#: _tips.cpp:68
+#, fuzzy
+msgid ""
+"<p>...that you can switch to the payee of a transaction\n"
+"by selecting the context menu on a transaction in the ledger\n"
+"or in the transaction menu?\n"
+msgstr "<p> do z a menu zapnuté a v Viac menu v n"
+
+#: _tips.cpp:75
+#, fuzzy
+msgid ""
+"<p>...that you can modify the colors and fonts used for the ledgers\n"
+"via <i>Configure/Register/...</i>?\n"
+msgstr "<p> a písma pre<i> Nastaviť Register</i> n"
+
+#: _tips.cpp:81
+#, fuzzy
+msgid ""
+"<p>...that you can hide transactions prior to a specific date?\n"
+"The date can be modified via <i>Configure/Register/Filter</i>.\n"
+msgstr "<p> do a dátum dátum zmenené<i> Nastaviť Register Filter</i> n"
+
+#: _tips.cpp:87
+#, fuzzy
+msgid ""
+"<p>...that you can customize the \"Home-Page\"\n"
+"via <i>Configure/Home</i>?\n"
+msgstr "<p> Domov Strana<i> Nastaviť Domov</i> n"
+
+#: _tips.cpp:93
+#, fuzzy
+msgid ""
+"<p>...that you can enter new transactions even while reconciling\n"
+"an account? You can also make the transaction form visible.\n"
+msgstr "<p> nové account Vy viditeľné n"
+
+#: _tips.cpp:99
+#, fuzzy
+msgid ""
+"<p>...that you can actively support the KMyMoney development team in\n"
+"cases that heavily depend on your data? You can save your data in an\n"
+"anonymized way for this support.<p>\n"
+"Just open your data file and immediately\n"
+"select <b>File/Save as...</b>. In the <b>Save As...</b> dialog\n"
+"select the filter <b>Anonymous Files</b> and make sure your file gets\n"
+"the extensions <b>.anon.xml</b>. <p>\n"
+"To verify, how the data looks like you are about to send away, you can open\n"
+"this file in KMyMoney and see how the developers see your data.\n"
+msgstr ""
+"<p> v zapnuté Vy v pre<p> súbor a<b> Súbor Uložiť</b><b> Uložiť</b> "
+"filter<b> Anonymne Súbory</b> a súbor<b></b><p> podobný do neprítomný súbor "
+"v a n"
+
+#: _tips.cpp:112
+msgid ""
+"<p>... that you can import your bank statements even without a network \n"
+"connection? Just select the file (OFX or QIF) from the File->Import menu.</"
+"p>\n"
+"<p>Provided by Jose Jorge</p>\n"
+msgstr ""
+
+#: reports/listtable.cpp:159 reports/listtable.cpp:163
+#: reports/pivottable.cpp:1564
+msgid ""
+"_: Report date range\n"
+"%1 through %2"
+msgstr ""
+
+#: reports/listtable.cpp:171 reports/pivottable.cpp:1571
+#, fuzzy, c-format
+msgid "All currencies converted to %1"
+msgstr "Všetky do 1"
+
+#: reports/listtable.cpp:172 reports/pivottable.cpp:1328
+#, fuzzy
+msgid "All currencies converted to %1\n"
+msgstr "Všetky do n"
+
+#: reports/listtable.cpp:176 reports/pivottable.cpp:1573
+#, fuzzy
+msgid "All values shown in %1 unless otherwise noted"
+msgstr "Všetky v"
+
+#: reports/listtable.cpp:177 reports/pivottable.cpp:1330
+#, fuzzy
+msgid "All values shown in %1 unless otherwise noted\n"
+msgstr "Všetky v n"
+
+#: dialogs/kequitypriceupdatedlg.cpp:73 dialogs/kfindtransactiondlg.cpp:188
+#: dialogs/rc.cpp:53 dialogs/rc.cpp:63 dialogs/rc.cpp:208 dialogs/rc.cpp:805
+#: dialogs/settings/rc.cpp:111 dialogs/transactioneditor.cpp:844
+#: reports/listtable.cpp:196 views/khomeview.cpp:412 views/khomeview.cpp:485
+#: views/khomeview.cpp:519 views/rc.cpp:61 widgets/kmymoneypriceview.cpp:128
+#: widgets/rc.cpp:36 widgets/register.cpp:565 widgets/transaction.cpp:1027
+#: widgets/transaction.cpp:1484
+msgid "Date"
+msgstr "Dátum"
+
+#: reports/listtable.cpp:198
+msgid "Num"
+msgstr "Číslo"
+
+#: dialogs/kfindtransactiondlg.cpp:204 dialogs/kmymoneysplittable.cpp:78
+#: dialogs/kmymoneysplittable.cpp:831 dialogs/rc.cpp:217
+#: dialogs/transactioneditor.cpp:831 dialogs/transactioneditor.cpp:1374
+#: dialogs/transactioneditor.cpp:1382 dialogs/transactioneditor.cpp:1396
+#: dialogs/transactioneditor.cpp:1449 dialogs/transactioneditor.cpp:1456
+#: dialogs/transactioneditor.cpp:1504 reports/listtable.cpp:200
+#: views/kcategoriesview.cpp:76 views/rc.cpp:62 widgets/rc.cpp:115
+#: widgets/register.cpp:62 widgets/transaction.cpp:848
+#: widgets/transaction.cpp:906
+msgid "Category"
+msgstr "Kategória"
+
+#: dialogs/kmymoneysplittable.cpp:79 dialogs/kmymoneysplittable.cpp:837
+#: reports/listtable.cpp:202 widgets/rc.cpp:101 widgets/transaction.cpp:1042
+#: widgets/transaction.cpp:1628
+msgid "Memo"
+msgstr "Poznámka"
+
+#: reports/listtable.cpp:203
+msgid "Top Category"
+msgstr "Horná kategória"
+
+#: reports/listtable.cpp:204
+msgid "Category Type"
+msgstr "Typ kategórie"
+
+#: dialogs/rc.cpp:229 dialogs/settings/rc.cpp:152 reports/listtable.cpp:207
+#: widgets/kmymoneycombo.cpp:346 widgets/rc.cpp:107
+msgid "Reconciled"
+msgstr "Vysporiadané"
+
+#: reports/listtable.cpp:208 widgets/rc.cpp:117
+msgid "Action"
+msgstr "Akcia"
+
+#: dialogs/investactivities.cpp:199 dialogs/investactivities.cpp:287
+#: dialogs/investactivities.cpp:424 dialogs/investactivities.cpp:504
+#: dialogs/investactivities.cpp:544 dialogs/investtransactioneditor.cpp:241
+#: reports/listtable.cpp:209 widgets/rc.cpp:103 widgets/transaction.cpp:1513
+msgid "Shares"
+msgstr "Podiely"
+
+#: dialogs/investtransactioneditor.cpp:248
+#: dialogs/investtransactioneditor.cpp:1067
+#: dialogs/investtransactioneditor.cpp:1068
+#: dialogs/investtransactioneditor.cpp:1072
+#: dialogs/kequitypriceupdatedlg.cpp:72 dialogs/rc.cpp:109 dialogs/rc.cpp:164
+#: dialogs/rc.cpp:251 dialogs/rc.cpp:756 dialogs/rc.cpp:827
+#: dialogs/settings/rc.cpp:117 reports/listtable.cpp:210
+#: reports/listtable.cpp:211 reports/pivottable.cpp:2441
+#: views/kinvestmentview.cpp:80 widgets/kmymoneypriceview.cpp:129
+#: widgets/rc.cpp:43 widgets/rc.cpp:105 widgets/register.cpp:573
+msgid "Price"
+msgstr "Cena"
+
+#: reports/listtable.cpp:212
+msgid "Net Value"
+msgstr "Čistá hodnota"
+
+#: reports/listtable.cpp:213
+msgid "Buys"
+msgstr "Kúpa"
+
+#: reports/listtable.cpp:214
+msgid "Sells"
+msgstr "Predaj"
+
+#: reports/listtable.cpp:215
+msgid "Dividends Reinvested"
+msgstr "Reinvestované dividendy"
+
+#: reports/listtable.cpp:216
+#, fuzzy
+msgid "Dividends Paid Out"
+msgstr "Dividendy Zaplatené Von"
+
+#: reports/listtable.cpp:217
+msgid "Starting Balance"
+msgstr "Počiatočný stav"
+
+#: reports/listtable.cpp:218
+msgid "Ending Balance"
+msgstr "Koncový stav"
+
+#: reports/listtable.cpp:219
+#, fuzzy
+msgid "Annualized Return"
+msgstr "Return"
+
+#: reports/listtable.cpp:220
+#, fuzzy
+msgid "Return On Investment"
+msgstr "Investícia"
+
+#: dialogs/rc.cpp:106 dialogs/rc.cpp:161 dialogs/rc.cpp:248 dialogs/rc.cpp:505
+#: dialogs/rc.cpp:570 dialogs/rc.cpp:667 dialogs/rc.cpp:753
+#: reports/listtable.cpp:223 widgets/register.cpp:570
+msgid "Payment"
+msgstr "Platba"
+
+#: dialogs/rc.cpp:111 dialogs/rc.cpp:166 dialogs/rc.cpp:253 dialogs/rc.cpp:709
+#: dialogs/rc.cpp:758 reports/listtable.cpp:224 widgets/rc.cpp:119
+#: widgets/register.cpp:575
+msgid "Balance"
+msgstr "Saldo"
+
+#: reports/listtable.cpp:227 views/kscheduledview.cpp:74
+msgid "Next Due Date"
+msgstr "Ďalší dátum splatnosti"
+
+#: reports/listtable.cpp:229 views/kscheduledview.cpp:76
+msgid "Payment Method"
+msgstr "Spôsob platby"
+
+#: dialogs/rc.cpp:803 reports/listtable.cpp:231 widgets/rc.cpp:2
+msgid "Description"
+msgstr "Popis"
+
+#: reports/listtable.cpp:232
+#, fuzzy
+msgid "Opening Date"
+msgstr "Online aktualizácia"
+
+#: reports/listtable.cpp:234
+msgid "Balance Early Warning"
+msgstr ""
+
+#: reports/listtable.cpp:235
+#, fuzzy
+msgid "Balance Max Limit"
+msgstr "Bilancia:"
+
+#: reports/listtable.cpp:236
+#, fuzzy
+msgid "Credit Early Warning"
+msgstr "Import prevodu"
+
+#: reports/listtable.cpp:237
+#, fuzzy
+msgid "Credit Max Limit"
+msgstr "Platobná karta"
+
+#: dialogs/rc.cpp:376 reports/listtable.cpp:238
+msgid "Tax"
+msgstr "Daň"
+
+#: reports/listtable.cpp:239
+#, fuzzy
+msgid "Preferred"
+msgstr "Preferovaný Účet"
+
+#: reports/listtable.cpp:240
+#, fuzzy
+msgid "Loan Amount"
+msgstr "Suma pôžičky"
+
+#: dialogs/rc.cpp:511 reports/listtable.cpp:241
+msgid "Interest Rate"
+msgstr "Úroková miera"
+
+#: reports/listtable.cpp:242
+#, fuzzy
+msgid "Next Interest Change"
+msgstr "Ďalší zapnuté"
+
+#: reports/listtable.cpp:243
+#, fuzzy
+msgid "Periodic Payment"
+msgstr "Pravidelná splátka:"
+
+#: reports/listtable.cpp:244
+#, fuzzy
+msgid "Final Payment"
+msgstr "Konečná platba:"
+
+#: reports/listtable.cpp:245 views/khomeview.cpp:766 views/khomeview.cpp:1265
+#: views/khomeview.cpp:1273
+#, fuzzy
+msgid "Current Balance"
+msgstr "Súčasná bilancia:"
+
+#: dialogs/investactivities.cpp:201 dialogs/investactivities.cpp:289
+#: dialogs/investactivities.cpp:368 dialogs/investactivities.cpp:426
+#: dialogs/rc.cpp:327 reports/listtable.cpp:360 reports/listtable.cpp:364
+#: reports/listtable.cpp:556 reports/listtable.cpp:558
+#: reports/pivottable.cpp:1343 reports/pivottable.cpp:1445
+#: reports/pivottable.cpp:1505 reports/pivottable.cpp:1598
+#: reports/pivottable.cpp:1768 reports/pivottable.cpp:1845
+#: reports/pivottable.cpp:2165 reports/pivottable.cpp:2167
+#: reports/pivottable.cpp:2187 reports/pivottable.cpp:2189
+#: reports/querytabletest.cpp:134 reports/querytabletest.cpp:135
+#: reports/querytabletest.cpp:136 reports/querytabletest.cpp:137
+#: reports/querytabletest.cpp:162 reports/querytabletest.cpp:163
+#: reports/querytabletest.cpp:164 reports/querytabletest.cpp:197
+#: reports/querytabletest.cpp:198 reports/querytabletest.cpp:224
+#: reports/querytabletest.cpp:250 reports/querytabletest.cpp:251
+#: reports/querytabletest.cpp:252 reports/querytabletest.cpp:275
+#: reports/querytabletest.cpp:276 reports/querytabletest.cpp:277
+#: reports/querytabletest.cpp:366 reports/querytabletest.cpp:422
+#: reports/querytabletest.cpp:423 views/kforecastview.cpp:568 views/rc.cpp:18
+#: widgets/kmymoneyaccounttreeforecast.cpp:139 widgets/transaction.cpp:1643
+msgid "Total"
+msgstr "Celkom"
+
+#: reports/listtable.cpp:444
+msgid "Initial Market Value"
+msgstr ""
+
+#: reports/listtable.cpp:445
+#, fuzzy
+msgid "Ending Market Value"
+msgstr "Koncový stav"
+
+#: reports/listtable.cpp:448 reports/querytabletest.cpp:651
+#, fuzzy
+msgid "Opening Balance"
+msgstr "Počiatočný stav"
+
+#: reports/listtable.cpp:449 reports/querytabletest.cpp:652
+#: reports/querytabletest.cpp:653
+#, fuzzy
+msgid "Closing Balance"
+msgstr "Koncový stav"
+
+#: reports/listtable.cpp:490 reports/listtable.cpp:491
+#, fuzzy
+msgid "Calculated"
+msgstr "Vypočítať"
+
+#: reports/listtable.cpp:572 reports/listtable.cpp:574
+#: reports/pivottable.cpp:1530 reports/pivottable.cpp:1886
+#: reports/querytabletest.cpp:138 reports/querytabletest.cpp:165
+#: reports/querytabletest.cpp:199 reports/querytabletest.cpp:225
+#: reports/querytabletest.cpp:253 reports/querytabletest.cpp:278
+#: reports/querytabletest.cpp:367 reports/querytabletest.cpp:402
+#: reports/querytabletest.cpp:424 reports/querytabletest.cpp:548
+#: reports/querytabletest.cpp:551 reports/querytabletest.cpp:586
+msgid "Grand Total"
+msgstr "Celkový súčet"
+
+#: dialogs/rc.cpp:233 reports/pivottable.cpp:339 views/kscheduledview.cpp:174
+#: views/kscheduledview.cpp:433 views/kscheduledview.cpp:449
+#: widgets/kmymoneyscheduledcalendar.cpp:48
+msgid "Transfers"
+msgstr "Prevody"
+
+#: reports/pivottable.cpp:1951
+#, fuzzy
+msgid "Legend"
+msgstr "Účtovné knihy"
+
+#: reports/pivottable.cpp:2411 views/khomeview.cpp:1406
+#: views/khomeview.cpp:1443
+msgid "Actual"
+msgstr ""
+
+#: reports/pivottable.cpp:2421 views/khomeview.cpp:1409
+#: views/khomeview.cpp:1446
+#, fuzzy
+msgid "Difference"
+msgstr "Rozdiel:"
+
+#: reports/pivottable.cpp:2431
+#, fuzzy
+msgid "Moving Average"
+msgstr "Všetky stavy"
+
+#: reports/pivottable.cpp:2436
+#, fuzzy
+msgid "Moving Average Price"
+msgstr "Všetky stavy"
+
+#: reports/objectinfotable.cpp:214 reports/querytable.cpp:693
+#: reports/querytable.cpp:736 reports/querytable.cpp:1356
+#: reports/querytable.cpp:1375 views/kpayeesview.cpp:742
+#, c-format
+msgid "Transfer from %1"
+msgstr "Preniesť z %1"
+
+#: reports/objectinfotable.cpp:215 reports/querytable.cpp:694
+#: reports/querytable.cpp:735 reports/querytable.cpp:1355
+#: reports/querytable.cpp:1374 views/kpayeesview.cpp:740
+#, c-format
+msgid "Transfer to %1"
+msgstr "Preniesť do %1"
+
+#: reports/querytabletest.cpp:471 views/kreportsview.cpp:1144
+msgid "Investment Transactions"
+msgstr "Investičné transakcie"
+
+#: reports/querytabletest.cpp:472 reports/querytabletest.cpp:564
+msgid "Test Report"
+msgstr "Testovací výkaz"
+
+#: reports/querytabletest.cpp:547 reports/querytabletest.cpp:550
+msgid "Total Stock 1"
+msgstr "Celková zásoba 1"
+
+#: reports/querytabletest.cpp:563 views/kreportsview.cpp:1174
+#, fuzzy
+msgid "Investment Performance by Account"
+msgstr "Investícia Výkon Účet"
+
+#: reports/querytable.cpp:431 reports/querytable.cpp:1200
+#, c-format
+msgid "Month of %1"
+msgstr "Mesiac z %1"
+
+#: reports/querytable.cpp:432 reports/querytable.cpp:1201
+#, c-format
+msgid "Week of %1"
+msgstr "Týždeň z %1."
+
+#: reports/querytable.cpp:576 reports/querytable.cpp:739
+#: reports/querytable.cpp:858 reports/querytable.cpp:1325
+#: reports/querytable.cpp:1481
+#, fuzzy
+msgid "No Institution"
+msgstr "<žiadna inštitúcia>"
+
+#: reports/querytable.cpp:580 reports/querytable.cpp:1329
+msgid "[Empty Payee]"
+msgstr "[Prázdny príjemca]"
+
+#: reports/querytable.cpp:615 reports/querytable.cpp:1361
+#, fuzzy
+msgid "[Split Transaction]"
+msgstr "Rozdeliť transakciu"
+
+#: reports/querytable.cpp:616 reports/querytable.cpp:617
+msgid "Split"
+msgstr "Rozdeliť"
+
+#: main.cpp:51
+#, fuzzy
+msgid ""
+"\n"
+"KMyMoney, the Personal Finance Manager for KDE.\n"
+"\n"
+"Please consider contributing to this project with code and/or suggestions."
+msgstr "Osobné Správca pre KDE n do a alebo."
+
+#: main.cpp:55
+msgid "language to be used"
+msgstr "Použitý jazyk"
+
+#: main.cpp:56
+#, fuzzy
+msgid "don't open last used file"
+msgstr "súbor"
+
+#: main.cpp:57
+msgid "enable performance timers"
+msgstr ""
+
+#: main.cpp:61
+#, fuzzy
+msgid "turn on program traces"
+msgstr "zapnuté program"
+
+#: main.cpp:62
+msgid "dump the names of all defined KAction objects to stdout and quit"
+msgstr ""
+
+#: main.cpp:66
+msgid "file to open"
+msgstr "súbor na otvorenie"
+
+#: main.cpp:92
+#, fuzzy
+msgid "Memory leakage detection"
+msgstr "Pamäť"
+
+#: main.cpp:96
+#, fuzzy
+msgid "Compiled with the following settings:\n"
+msgstr "nastavenie n"
+
+#: dialogs/kmymoneysplittable.cpp:650 dialogs/ksplittransactiondlg.cpp:277
+#: main.cpp:98
+msgid "KMyMoney"
+msgstr "KMyMoney"
+
+#: main.cpp:104
+#, fuzzy
+msgid "Initial idea, much initial source code, Project admin"
+msgstr "zdroj Projekt"
+
+#: main.cpp:105
+#, fuzzy
+msgid "Core engine, Release Manager, Project admin"
+msgstr "Odovzdanie Správca Projekt"
+
+#: main.cpp:106
+#, fuzzy
+msgid "Reporting logic, OFX Import"
+msgstr "Import"
+
+#: main.cpp:107
+msgid "Database backend, maintainer stable branch"
+msgstr ""
+
+#: main.cpp:108
+#, fuzzy
+msgid "Forecast, Reports"
+msgstr "Obľúbené výkazy"
+
+#: main.cpp:109
+msgid "Project Admin"
+msgstr "Administrátor projektu"
+
+#: main.cpp:110
+msgid "Developer"
+msgstr "Vývojár"
+
+#: main.cpp:111
+#, fuzzy
+msgid "Database backend"
+msgstr "Rozsah dátumov"
+
+#: main.cpp:113
+msgid "Initial investment support"
+msgstr ""
+
+#: main.cpp:114
+msgid "Developer & Artist"
+msgstr "Vývojár a autor"
+
+#: main.cpp:115
+msgid "Icons & splash screen"
+msgstr "Ikony a úvodná obrazovka"
+
+#: main.cpp:116 main.cpp:117
+msgid "Patches"
+msgstr "Záplaty"
+
+#: main.cpp:136
+#, fuzzy
+msgid ""
+"The monetary decimal symbol is not correctly set in the KDE Control Center's "
+"Country/Region & Language settings. Please set it to a reasonable value and "
+"start KMyMoney again."
+msgstr ""
+"alebo množina v KDE Ctrl V strede s Krajina Oblasť Jazyk nastavenie množina "
+"do a štart."
+
+#: main.cpp:136
+msgid "Invalid settings"
+msgstr "Neplatné nastavenie"
+
+#: main.cpp:228
+#, fuzzy
+msgid "Another instance of KMyMoney is already running. Do you want to quit?"
+msgstr "z je bežiaci do?"
+
+#: main.cpp:289
+msgid "Uncaught error. Please report the details to the developers"
+msgstr ""
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Juraj Búš"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "juraj@bitbait.sk"
+
+#: dialogs/kcsvprogressdlg.cpp:62 dialogs/kimportdlg.cpp:66 rc.cpp:1
+msgid "&Import"
+msgstr "&Importovať"
+
+#: rc.cpp:2
+msgid "E&xport"
+msgstr "E&xportovať"
+
+#: rc.cpp:3
+msgid "&Institution"
+msgstr "&Inštitúcia"
+
+#: rc.cpp:4
+msgid "&Account"
+msgstr "Úče&t"
+
+#: rc.cpp:5
+#, fuzzy
+msgid "&Category"
+msgstr "Kategória"
+
+#: rc.cpp:6
+#, fuzzy
+msgid "&Transaction"
+msgstr "Transakcie"
+
+#: rc.cpp:7 rc.cpp:20
+#, fuzzy
+msgid "Mark transaction as..."
+msgstr "Zlúčenie prevodov"
+
+#: rc.cpp:8 rc.cpp:21
+#, fuzzy
+msgid "Mark transaction"
+msgstr "prevody\n"
+
+#: rc.cpp:9
+#, fuzzy
+msgid "T&ools"
+msgstr "Celkom"
+
+#: rc.cpp:10
+msgid "Account options"
+msgstr "Nastavenia účtu"
+
+#: rc.cpp:11
+#, fuzzy
+msgid "Category options"
+msgstr "Výber kategórie"
+
+#: rc.cpp:12
+#, fuzzy
+msgid "Institution options"
+msgstr "Nastavenia inštitúcie"
+
+#: rc.cpp:13
+#, fuzzy
+msgid "Payee options"
+msgstr "Nastavenia príjemcu"
+
+#: rc.cpp:14
+#, fuzzy
+msgid "Budget options"
+msgstr "Nastavenia účtu"
+
+#: rc.cpp:15
+#, fuzzy
+msgid "Investment options"
+msgstr "Nastavenia investície"
+
+#: rc.cpp:16
+#, fuzzy
+msgid "Scheduled transactions options"
+msgstr "Plánované prevody"
+
+#: rc.cpp:17
+#, fuzzy
+msgid "Transaction options"
+msgstr "Nastavenia transakcie"
+
+#: rc.cpp:18
+#, fuzzy
+msgid "Move transaction to..."
+msgstr "Zlúčenie prevodov"
+
+#: rc.cpp:19
+#, fuzzy
+msgid "Select account"
+msgstr "Zvoliť účet:"
+
+#: rc.cpp:22
+#, fuzzy
+msgid "Currency options"
+msgstr "Nastavenia meny"
+
+#: rc.cpp:24
+#, fuzzy
+msgid "Always show a No. field in transaction form"
+msgstr "Vždy a Nie pole v"
+
+#: rc.cpp:25
+#, fuzzy
+msgid "Auto fill with previous transaction data"
+msgstr "Auto"
+
+#: rc.cpp:26
+msgid "Treat two transactions as identical, if amount differs less than"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:144 rc.cpp:27
+#, fuzzy
+msgid "Auto increment check number"
+msgstr "Auto kontrola číslo"
+
+#: rc.cpp:28
+msgid "Autosave file periodically"
+msgstr ""
+
+#: rc.cpp:29
+msgid "Autosave interval in minutes"
+msgstr ""
+
+#: rc.cpp:30
+#, fuzzy
+msgid "Check schedules upon startup"
+msgstr "Kontrolovať"
+
+#: dialogs/settings/rc.cpp:171 rc.cpp:31
+#, fuzzy
+msgid "Enter transactions this number of days in advance"
+msgstr "Zadať číslo z dní v"
+
+#: dialogs/settings/rc.cpp:172 rc.cpp:32
+msgid "Number of days to preview schedules in ledger"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:143 rc.cpp:33
+#, fuzzy
+msgid "Insert transaction type into No. field for new transactions"
+msgstr "Insert typ Nie pole pre nové"
+
+#: dialogs/settings/rc.cpp:145 rc.cpp:34
+#, fuzzy
+msgid "Keep changes when selecting a different transaction/split"
+msgstr "Ponechať a"
+
+#: rc.cpp:35
+msgid "Using the Enter key moves between the fields"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:130 rc.cpp:36
+#, fuzzy
+msgid "Use the ledger lens"
+msgstr "Použiť"
+
+#: rc.cpp:37
+#, fuzzy
+msgid "Price Precision"
+msgstr "Presná cena: "
+
+#: dialogs/rc.cpp:65 rc.cpp:38
+#, fuzzy
+msgid "Update price history"
+msgstr "Aktualizovať históriu ceny"
+
+#: dialogs/settings/rc.cpp:132 rc.cpp:39
+#, fuzzy
+msgid "Show transaction form"
+msgstr "Zobraziť"
+
+#: rc.cpp:40
+#, fuzzy
+msgid "Start with last selected view or homepage"
+msgstr "Štart strana"
+
+#: rc.cpp:41
+#, fuzzy
+msgid "Use GPG to encrypt data file"
+msgstr "Použiť GPG šifrovanie"
+
+#: rc.cpp:42
+#, fuzzy
+msgid "Also encrypt against recover key"
+msgstr "kľúč"
+
+#: rc.cpp:43
+#, fuzzy
+msgid "GPG User ID (deprecated)"
+msgstr "ID užívateľa"
+
+#: rc.cpp:44
+#, fuzzy
+msgid "GPG User ID"
+msgstr "ID užívateľa"
+
+#: rc.cpp:45
+msgid "Run in expert (accountant) mode"
+msgstr ""
+
+#: rc.cpp:46
+msgid "Show splash screen during startup"
+msgstr ""
+
+#: rc.cpp:47
+msgid "Synchronize account in ledger and investment view"
+msgstr ""
+
+#: rc.cpp:48
+msgid "Icon size for view selection"
+msgstr ""
+
+#: rc.cpp:49
+msgid "list of hidden views"
+msgstr ""
+
+#: rc.cpp:50
+msgid "Firsttime switch to start new user wizard"
+msgstr ""
+
+#: rc.cpp:51
+msgid "Show title bar on each view"
+msgstr ""
+
+#: rc.cpp:52
+msgid "Start string matches for e.g. payees at start of string"
+msgstr ""
+
+#: rc.cpp:53
+msgid "Order of items on homepage"
+msgstr ""
+
+#: rc.cpp:54
+msgid "Percentage of default font size used for home view HTML page"
+msgstr ""
+
+#: rc.cpp:55
+msgid "Remember (manually adjusted) font size in home view on program end."
+msgstr ""
+
+#: rc.cpp:56
+msgid "Show account limit information on the Homepage"
+msgstr ""
+
+#: rc.cpp:58
+#, fuzzy
+msgid "Hide closed accounts"
+msgstr "Odfiltrovať účty"
+
+#: rc.cpp:59
+#, fuzzy
+msgid "Hide finished schedules"
+msgstr "Načítavam.úlohy"
+
+#: rc.cpp:61
+msgid "Show all register entries in full detail"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:129 rc.cpp:62
+#, fuzzy
+msgid "Show a grid in the register"
+msgstr "Zobraziť a v."
+
+#: rc.cpp:63
+msgid "Show fancy group markers"
+msgstr ""
+
+#: rc.cpp:64
+msgid "Show fancy markers for previous and current fiscal year"
+msgstr ""
+
+#: rc.cpp:65
+msgid "Starting month of the fiscal year"
+msgstr ""
+
+#: rc.cpp:66
+#, fuzzy
+msgid "Starting day of the fiscal year"
+msgstr "Počiatočný dátum oznámenia"
+
+#: rc.cpp:67
+#, fuzzy
+msgid "Start date"
+msgstr "Dátum od: "
+
+#: dialogs/settings/rc.cpp:9 rc.cpp:68
+#, fuzzy
+msgid "Use system colors"
+msgstr "Použiť systémové písmo"
+
+#: rc.cpp:69
+#, fuzzy
+msgid "List color"
+msgstr "Farby zoznamu"
+
+#: rc.cpp:70
+#, fuzzy
+msgid "List background color"
+msgstr "Farba pozadia zoznamu:"
+
+#: rc.cpp:71
+#, fuzzy
+msgid "List grid color"
+msgstr "Zoznam:"
+
+#: rc.cpp:72
+#, fuzzy
+msgid "Background color for imported transactions"
+msgstr "Problém "
+
+#: rc.cpp:73
+msgid "Background color for matched transactions"
+msgstr ""
+
+#: rc.cpp:74
+msgid "List color for erronous transactions"
+msgstr ""
+
+#: rc.cpp:75
+#, fuzzy
+msgid "List color for missing conversion rate"
+msgstr "Hodnota:"
+
+#: rc.cpp:76
+msgid "List color for negative values"
+msgstr ""
+
+#: rc.cpp:77
+msgid "Background color for group marker"
+msgstr ""
+
+#: rc.cpp:78
+msgid "Background color for required fields"
+msgstr ""
+
+#: rc.cpp:79
+#, fuzzy
+msgid "Use system font"
+msgstr "Použiť systémové písmo"
+
+#: dialogs/settings/rc.cpp:21 rc.cpp:80
+#, fuzzy
+msgid "Cell font"
+msgstr "Veľkosť písma"
+
+#: dialogs/settings/rc.cpp:22 rc.cpp:81
+#, fuzzy
+msgid "Header font"
+msgstr "Písmo hlavičky"
+
+#: rc.cpp:82 rc.cpp:83
+msgid "Sort order of register in normal view"
+msgstr ""
+
+#: rc.cpp:84
+msgid "Sort order of register in search dialog"
+msgstr ""
+
+#: rc.cpp:85
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation"
+msgstr ""
+
+#: rc.cpp:86
+#, fuzzy
+msgid "Number of days (plus/minus) to search for matching transactions"
+msgstr "a pre."
+
+#: rc.cpp:87
+msgid "During import, ask for a new payee's default category"
+msgstr ""
+
+#: rc.cpp:88
+msgid "Method to calculate forecast"
+msgstr ""
+
+#: rc.cpp:89
+msgid "Days to forecast"
+msgstr ""
+
+#: rc.cpp:90
+msgid "Days of normal account cycle"
+msgstr ""
+
+#: rc.cpp:91
+msgid "Number of historic cycles to use in forecast"
+msgstr ""
+
+#: rc.cpp:92
+msgid "Day of month to start forecast"
+msgstr ""
+
+#: rc.cpp:93
+msgid "Method to calculate history-based forecast"
+msgstr ""
+
+#: rc.cpp:94
+#, fuzzy
+msgid "Skip opening date when fetching transactions"
+msgstr "Preskočiť tento prevod"
+
+#: rc.cpp:95
+msgid "Include future transaction when using Schedule Forecast"
+msgstr ""
+
+#: rc.cpp:96
+#, fuzzy
+msgid "Include scheduled transactions when using Schedule Forecast"
+msgstr "Plánované prevody"
+
+#: rc.cpp:97
+msgid "additional names for cash account"
+msgstr ""
+
+#: rc.cpp:98
+msgid "additional names for checking account"
+msgstr ""
+
+#: rc.cpp:99
+msgid "additional names for credit card account"
+msgstr ""
+
+#: rc.cpp:100
+#, fuzzy
+msgid "additional names for asset account"
+msgstr "Vytvoriť a nové account"
+
+#: rc.cpp:101
+msgid "additional names for opening balance payee"
+msgstr ""
+
+#: rc.cpp:102
+msgid "additional names for invoice accounts"
+msgstr ""
+
+#: rc.cpp:103 widgets/rc.cpp:161 widgets/rc.cpp:163
+msgid "..."
+msgstr "..."
+
+#: views/kcategoriesview.cpp:276
+#, fuzzy
+msgid "Profit: "
+msgstr "Zisk: %1"
+
+#: views/kcategoriesview.cpp:278
+#, fuzzy
+msgid "Loss: "
+msgstr "Strata: %1"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:54
+#: dialogs/transactioneditor.cpp:605 views/kpayeesview.cpp:365
+#: widgets/kmymoneyonlinequoteconfig.cpp:54
+#, fuzzy
+msgid "Accepts the entered data and stores it"
+msgstr "a"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:55 views/kpayeesview.cpp:366
+#: widgets/kmymoneyonlinequoteconfig.cpp:55
+#, fuzzy
+msgid "Use this to accept the modified data."
+msgstr "Použiť do zmenené."
+
+#: views/kpayeesview.cpp:491
+msgid ""
+"A payee with the name '%1' already exists. It is not advisable to have "
+"multiple payees with the same identification name. Are you sure you would "
+"like to rename the payee?"
+msgstr ""
+
+#: views/kpayeesview.cpp:518 views/kpayeesview.cpp:869
+#, fuzzy
+msgid "Unable to modify payee"
+msgstr "do"
+
+#: views/kpayeesview.cpp:564
+#, fuzzy
+msgid "Do you want to save the changes for <b>%1</b>?"
+msgstr "do pre"
+
+#: views/kbudgetview.cpp:490 views/kpayeesview.cpp:565
+#, fuzzy
+msgid "Save changes"
+msgstr "Zahodiť zmeny"
+
+#: views/kgloballedgerview.cpp:737 views/kpayeesview.cpp:662
+#: views/kpayeesview.cpp:753
+#, c-format
+msgid "Balance: %1"
+msgstr "Bilancia: %1"
+
+#: views/kpayeesview.cpp:725 views/kpayeesview.cpp:731
+#, c-format
+msgid "Amortization of %1"
+msgstr "Amortizácia z %1"
+
+#: views/kpayeesview.cpp:727 views/kpayeesview.cpp:733
+#, c-format
+msgid "Payment to %1"
+msgstr "Platba do %1"
+
+#: views/kpayeesview.cpp:736
+#, fuzzy, c-format
+msgid "Loan payment from %1"
+msgstr "Pôžička z 1"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:123
+#: dialogs/kconfirmmanualenterdlg.cpp:133 views/kpayeesview.cpp:745
+#: widgets/kmymoneycategory.cpp:160 widgets/kmymoneycategory.cpp:166
+#: widgets/transaction.cpp:851 widgets/transaction.cpp:1397
+#: widgets/transaction.cpp:1411
+#, fuzzy
+msgid ""
+"_: Split transaction (category replacement)\n"
+"Split transaction"
+msgstr "Vybrať prevody bez príjemcov"
+
+#: views/kreportsview.cpp:262
+#, fuzzy
+msgid ""
+"There was an error creating your report: \"%1\".\n"
+"Please report this error to the developer's list: kmymoney2-developer@lists."
+"sourceforge.net"
+msgstr ""
+"chyby chyby do vývojár s zoznamkmymoney2-developer@lists.sourceforge.net"
+
+#: views/kreportsview.cpp:264
+msgid "Critical Error"
+msgstr "Kritické Chyba"
+
+#: views/kreportsview.cpp:268
+#, fuzzy
+msgid "Unable to generate report"
+msgstr "do"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:125 views/kreportsview.cpp:286
+#: views/rc.cpp:53 widgets/rc.cpp:146
+msgid "Chart"
+msgstr "Graf"
+
+#: views/kreportsview.cpp:287 widgets/rc.cpp:147
+#, fuzzy
+msgid "Show the chart version of this report"
+msgstr "Zobraziť verzia z"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:112 views/khomeview.cpp:900
+#: views/kreportsview.cpp:294 views/kreportsview.cpp:328
+msgid "Report"
+msgstr "Výkaz"
+
+#: views/kreportsview.cpp:295
+#, fuzzy
+msgid "Show the report version of this chart"
+msgstr "Zobraziť verzia z"
+
+#: views/kmymoneyview.cpp:236 views/kreportsview.cpp:314
+#: views/kreportsview.cpp:326
+msgid "Reports"
+msgstr "Výkazy"
+
+#: views/khomeview.cpp:902 views/kreportsview.cpp:329 widgets/rc.cpp:56
+msgid "Comment"
+msgstr "Komentár"
+
+#: views/kreportsview.cpp:432
+#, fuzzy
+msgid "Charts"
+msgstr "Graf"
+
+#: views/khomeview.cpp:897 views/kreportsview.cpp:470
+msgid "Favorite Reports"
+msgstr "Obľúbené výkazy"
+
+#: views/kreportsview.cpp:486
+msgid "Old Customized Reports"
+msgstr "Staré Výkazy"
+
+#: views/kreportsview.cpp:579
+msgid "Include Stylesheet"
+msgstr ""
+
+#: views/kreportsview.cpp:585
+#, fuzzy
+msgid ""
+"_: CSV (Filefilter)\n"
+"CSV files"
+msgstr "Nie súbor"
+
+#: views/kreportsview.cpp:586
+msgid ""
+"_: HTML (Filefilter)\n"
+"HTML files"
+msgstr ""
+
+#: views/kreportsview.cpp:591
+#, fuzzy
+msgid "Export as"
+msgstr "E&xportovať"
+
+#: views/kreportsview.cpp:619 views/kreportsview.cpp:660
+#: views/kreportsview.cpp:942 views/kreportsview.cpp:950
+#: views/kreportsview.cpp:958 views/kreportsview.cpp:968
+#: views/kreportsview.cpp:980 views/kreportsview.cpp:998
+#: views/kreportsview.cpp:1006 views/kreportsview.cpp:1014
+#: views/kreportsview.cpp:1022 views/kreportsview.cpp:1034
+#: views/kreportsview.cpp:1046 views/kreportsview.cpp:1056
+#: views/kreportsview.cpp:1070 views/kreportsview.cpp:1079
+#: views/kreportsview.cpp:1087 views/kreportsview.cpp:1095
+#: views/kreportsview.cpp:1103 views/kreportsview.cpp:1111
+#: views/kreportsview.cpp:1120 views/kreportsview.cpp:1132
+#: views/kreportsview.cpp:1145 views/kreportsview.cpp:1155
+#: views/kreportsview.cpp:1165 views/kreportsview.cpp:1175
+#: views/kreportsview.cpp:1185 views/kreportsview.cpp:1195
+#: views/kreportsview.cpp:1208 views/kreportsview.cpp:1222
+#: views/kreportsview.cpp:1239 views/kreportsview.cpp:1257
+#: views/kreportsview.cpp:1273 views/kreportsview.cpp:1295
+#: views/kreportsview.cpp:1304 views/kreportsview.cpp:1313
+#: views/kreportsview.cpp:1322 views/kreportsview.cpp:1336
+#: views/kreportsview.cpp:1347 views/kreportsview.cpp:1362
+#: views/kreportsview.cpp:1372 views/kreportsview.cpp:1383
+#: views/kreportsview.cpp:1393 views/kreportsview.cpp:1404
+#: views/kreportsview.cpp:1423 views/kreportsview.cpp:1432
+#: views/kreportsview.cpp:1444 views/kreportsview.cpp:1463
+#: views/kreportsview.cpp:1472 views/kreportsview.cpp:1481
+#: views/kreportsview.cpp:1490
+msgid "Default Report"
+msgstr "Štandardný výkaz"
+
+#: views/kreportsview.cpp:621 views/kreportsview.cpp:661
+msgid "Custom Report"
+msgstr "Vlastný výkaz"
+
+#: views/kreportsview.cpp:622
+msgid " (Customized)"
+msgstr ""
+
+#: views/kreportsview.cpp:690
+#, fuzzy
+msgid ""
+"Are you sure you want to delete report <b>%1</b>? There is no way to "
+"recover it!"
+msgstr "do odstrániť je nie do!"
+
+#: views/kreportsview.cpp:690 views/kreportsview.cpp:702
+msgid "Delete Report?"
+msgstr "Zmazať výkaz?"
+
+#: views/kreportsview.cpp:702
+#, fuzzy
+msgid "Sorry, <b>%1</b> is a default report. You may not delete it."
+msgstr "Je mi ľúto je a štandardné Vy odstrániť."
+
+#: views/kreportsview.cpp:882
+msgid "&Open"
+msgstr "&Otvoriť"
+
+#: views/kreportsview.cpp:884
+msgid "&New report"
+msgstr "&Nový výkaz"
+
+#: views/kreportsview.cpp:934
+msgid "Income and Expenses"
+msgstr "Príjem a výdaj"
+
+#: views/kreportsview.cpp:941
+msgid "Income and Expenses This Month"
+msgstr "Príjem a výdaj pre tento mesiac"
+
+#: views/kreportsview.cpp:949
+msgid "Income and Expenses This Year"
+msgstr "Príjem a výdaj pre tento rok"
+
+#: views/kreportsview.cpp:957
+#, fuzzy
+msgid "Income and Expenses By Year"
+msgstr "Príjem a výdaj pre tento rok"
+
+#: views/kreportsview.cpp:967
+#, fuzzy
+msgid "Income and Expenses Graph"
+msgstr "Príjem a výdaj"
+
+#: views/kreportsview.cpp:979
+#, fuzzy
+msgid "Income and Expenses Pie Chart"
+msgstr "Príjem a výdaj pre tento rok"
+
+#: views/khomeview.cpp:1361 views/kreportsview.cpp:990
+msgid "Net Worth"
+msgstr "Čistá hodnota"
+
+#: views/kreportsview.cpp:997
+msgid "Net Worth By Month"
+msgstr "Čistá hodnota za mesiac"
+
+#: views/kreportsview.cpp:1005
+msgid "Net Worth Today"
+msgstr "Čistá hodnota dnes"
+
+#: views/kreportsview.cpp:1013
+msgid "Net Worth By Year"
+msgstr "Čistá hodnota za rok"
+
+#: views/kreportsview.cpp:1021
+msgid "7-day Cash Flow Forecast"
+msgstr ""
+
+#: views/kreportsview.cpp:1033
+#, fuzzy
+msgid "Net Worth Graph"
+msgstr "Čistá hodnota"
+
+#: views/kreportsview.cpp:1045
+msgid "Account Balances by Institution"
+msgstr "Bilancia účtu podľa inštitúcie"
+
+#: views/kreportsview.cpp:1055
+msgid "Account Balances by Type"
+msgstr "Bilancia účtu podľa typu"
+
+#: views/kreportsview.cpp:1069
+msgid "Transactions by Account"
+msgstr "Transakcie podľa účtu"
+
+#: views/kreportsview.cpp:1078
+msgid "Transactions by Category"
+msgstr "Transakcie podľa kategórie"
+
+#: views/kreportsview.cpp:1086
+msgid "Transactions by Payee"
+msgstr "Transakcie podľa príjemcu"
+
+#: views/kreportsview.cpp:1094
+msgid "Transactions by Month"
+msgstr "Transakcie za mesiac"
+
+#: views/kreportsview.cpp:1102
+msgid "Transactions by Week"
+msgstr "Transakcie za týždeň"
+
+#: views/kreportsview.cpp:1110
+#, fuzzy
+msgid "Loan Transactions"
+msgstr "Daň z prevodu"
+
+#: views/kreportsview.cpp:1119
+#, fuzzy
+msgid "Transactions by Reconciliation Status"
+msgstr "Transakcie podľa účtu"
+
+#: views/kreportsview.cpp:1125
+#, fuzzy
+msgid "Cash Flow"
+msgstr "Hotovosť"
+
+#: views/kreportsview.cpp:1131
+#, fuzzy
+msgid "Cash Flow Transactions This Month"
+msgstr "Transakcie za mesiac"
+
+#: views/kmymoneyview.cpp:226 views/kmymoneyview.cpp:228
+#: views/kreportsview.cpp:1137
+msgid "Investments"
+msgstr "Investície"
+
+#: views/kreportsview.cpp:1154
+#, fuzzy
+msgid "Investment Holdings by Account"
+msgstr "Investícia Účet"
+
+#: views/kreportsview.cpp:1164
+#, fuzzy
+msgid "Investment Holdings by Type"
+msgstr "Investícia Typ"
+
+#: views/kreportsview.cpp:1184
+#, fuzzy
+msgid "Investment Performance by Type"
+msgstr "Investícia Výkon Typ"
+
+#: views/kreportsview.cpp:1194
+#, fuzzy
+msgid "Investment Holdings Pie"
+msgstr "Investícia Typ"
+
+#: views/kreportsview.cpp:1207
+#, fuzzy
+msgid "Investment Worth Graph"
+msgstr "Čistá hodnota"
+
+#: views/kreportsview.cpp:1221
+#, fuzzy
+msgid "Investment Price Graph"
+msgstr "Čistá hodnota"
+
+#: views/kreportsview.cpp:1238
+#, fuzzy
+msgid "Investment Moving Average Price Graph"
+msgstr "Investícia Typ"
+
+#: views/kreportsview.cpp:1256
+#, fuzzy
+msgid "Investment Moving Average"
+msgstr "Investícia Typ"
+
+#: views/kreportsview.cpp:1272
+#, fuzzy
+msgid "Investment Moving Average vs Actual"
+msgstr "Investícia Účet"
+
+#: views/kreportsview.cpp:1287
+msgid "Taxes"
+msgstr "Dane"
+
+#: views/kreportsview.cpp:1294
+#, fuzzy
+msgid "Tax Transactions by Category"
+msgstr "Transakcie podľa kategórie"
+
+#: views/kreportsview.cpp:1303
+#, fuzzy
+msgid "Tax Transactions by Payee"
+msgstr "Transakcie podľa príjemcu"
+
+#: views/kreportsview.cpp:1312
+#, fuzzy
+msgid "Tax Transactions by Category Last Fiscal Year"
+msgstr "Transakcie podľa kategórie"
+
+#: views/kreportsview.cpp:1321
+#, fuzzy
+msgid "Tax Transactions by Payee Last Fiscal Year"
+msgstr "Transakcie podľa príjemcu"
+
+#: views/kreportsview.cpp:1328
+#, fuzzy
+msgid "Budgeting"
+msgstr "Rozpočty"
+
+#: views/kreportsview.cpp:1335
+msgid "Budgeted vs. Actual This Year"
+msgstr ""
+
+#: views/kreportsview.cpp:1346
+msgid "Budgeted vs. Actual This Year (YTM)"
+msgstr ""
+
+#: views/khomeview.cpp:1383 views/kreportsview.cpp:1361
+msgid "Monthly Budgeted vs. Actual"
+msgstr ""
+
+#: views/kreportsview.cpp:1371
+msgid "Yearly Budgeted vs. Actual"
+msgstr ""
+
+#: views/kreportsview.cpp:1382
+#, fuzzy
+msgid "Monthly Budget"
+msgstr "Mesačne"
+
+#: views/kreportsview.cpp:1392
+#, fuzzy
+msgid "Yearly Budget"
+msgstr "Rozpočty"
+
+#: views/kreportsview.cpp:1403
+msgid "Yearly Budgeted vs Actual Graph"
+msgstr ""
+
+#: views/kreportsview.cpp:1422
+#, fuzzy
+msgid "Forecast By Month"
+msgstr "Spôsob platby"
+
+#: views/kreportsview.cpp:1431
+#, fuzzy
+msgid "Forecast Next Quarter"
+msgstr "Ďalší dátum splatnosti"
+
+#: views/kreportsview.cpp:1443
+#, fuzzy
+msgid "Net Worth Forecast Graph"
+msgstr "Čistá hodnota dnes"
+
+#: dialogs/rc.cpp:126 dialogs/rc.cpp:128 dialogs/rc.cpp:466
+#: views/kreportsview.cpp:1455
+msgid "General Information"
+msgstr "Všeobecné informácie"
+
+#: views/kreportsview.cpp:1462
+#, fuzzy
+msgid "Schedule Information"
+msgstr "Plánované prevody"
+
+#: views/kreportsview.cpp:1471
+#, fuzzy
+msgid "Schedule Summary Information"
+msgstr "Plánované prevody"
+
+#: views/kreportsview.cpp:1480
+#, fuzzy
+msgid "Account Information"
+msgstr "Nastavenia účtu"
+
+#: views/kreportsview.cpp:1489
+#, fuzzy
+msgid "Loan Information"
+msgstr "Informácie o platbách"
+
+#: dialogs/rc.cpp:323 views/kmymoneyview.cpp:148 views/kmymoneyview.cpp:150
+msgid "Institutions"
+msgstr "Inštitúcie"
+
+#: dialogs/knewaccountdlg.cpp:98 views/kmymoneyview.cpp:162
+#: views/kmymoneyview.cpp:164 widgets/rc.cpp:4 widgets/rc.cpp:94
+msgid "Accounts"
+msgstr "Účty"
+
+#: views/kmymoneyview.cpp:176
+msgid "Bills & Reminders"
+msgstr "Účtenky a pripomienky"
+
+#: views/kmymoneyview.cpp:178
+#, fuzzy
+msgid "Scheduled transactions"
+msgstr "Plánované prevody"
+
+#: dialogs/knewaccountdlg.cpp:98 dialogs/rc.cpp:193 views/kmymoneyview.cpp:188
+#: views/kmymoneyview.cpp:190 widgets/rc.cpp:91
+msgid "Categories"
+msgstr "Kategórie"
+
+#: dialogs/kfindtransactiondlg.cpp:212 dialogs/rc.cpp:318
+#: views/kmymoneyview.cpp:199 views/kmymoneyview.cpp:201 widgets/rc.cpp:93
+msgid "Payees"
+msgstr "Príjemcovia"
+
+#: views/kgloballedgerview.cpp:149 views/kmymoneyview.cpp:211
+msgid "Ledgers"
+msgstr "Účtovné knihy"
+
+#: views/kmymoneyview.cpp:353
+msgid "Creating transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:367
+msgid "Modifying transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:382
+msgid "Duplicating transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:394
+#, fuzzy
+msgid "Edit the current selected transactions"
+msgstr "Skryť"
+
+#: views/kmymoneyview.cpp:602
+msgid "<b>%1</b> is not a KMyMoney file."
+msgstr "<b>%1</b> nie je kMyMoney súbor."
+
+#: views/kmymoneyview.cpp:643
+#, fuzzy
+msgid "GPG is not available for decryption of file <b>%1</b>"
+msgstr "GPG je pre z súbor"
+
+#: views/kmymoneyview.cpp:721
+msgid ""
+"File <b>%1</b> contains the old binary format used by KMyMoney. Please use "
+"an older version of KMyMoney (0.8.x) that still supports this format to "
+"convert it to the new XML based format."
+msgstr ""
+
+#: views/kmymoneyview.cpp:723
+#, fuzzy
+msgid "File <b>%1</b> contains an unknown file format!"
+msgstr "Súbor %1 obsahuje neznámy formát súboru!"
+
+#: views/kmymoneyview.cpp:728
+#, fuzzy
+msgid "Cannot read from file <b>%1</b>!"
+msgstr "z súbor!"
+
+#: views/kmymoneyview.cpp:732
+msgid "Cannot load file <b>%1</b>. Reason: %2"
+msgstr ""
+
+#: views/kmymoneyview.cpp:742 views/kmymoneyview.cpp:748
+#, fuzzy
+msgid "File <b>%1</b> not found!"
+msgstr "Súbor %1 nebol nájdený!"
+
+#: views/kmymoneyview.cpp:812
+msgid "Can't open database %1\n"
+msgstr ""
+
+#: views/kmymoneyview.cpp:844
+msgid "An unrecoverable error occurred while reading the database"
+msgstr ""
+
+#: views/kmymoneyview.cpp:846 views/kmymoneyview.cpp:1208
+msgid "Database malfunction"
+msgstr ""
+
+#: views/kmymoneyview.cpp:938
+msgid "Unknown fix level in input file"
+msgstr ""
+
+#: views/kmymoneyview.cpp:984
+#, fuzzy
+msgid ""
+"GPG does not seem to be installed on your system. Please make sure, that GPG "
+"can be found using the standard search path. This time, encryption is "
+"disabled."
+msgstr "GPG do zapnuté systém GPG cesta čas šifrovanie je deaktivované."
+
+#: views/kmymoneyview.cpp:984
+msgid "GPG not found"
+msgstr "GPG nenájdený"
+
+#: views/kmymoneyview.cpp:991
+#, fuzzy
+msgid ""
+"You have selected to encrypt your data also with the KMyMoney recover key, "
+"but the key with id</p><p><center><b>%1</b></center></p>has not been found "
+"in your keyring at this time. Please make sure to import this key into your "
+"keyring. You can find it on the <a href=\"http://kmymoney2.sourceforge.net/"
+"\">KMyMoney web-site</a>. This time your data will not be encrypted with the "
+"KMyMoney recover key."
+msgstr ""
+"Vy do kľúč kľúč</p><p><center><b></b></center></p> v na čas do import kľúč "
+"Vy Hľadať súbory zapnuté<a href=\"http://kmymoney2.sourceforge.net/\"></a> "
+"čas kľúč."
+
+#: views/kmymoneyview.cpp:991 views/kmymoneyview.cpp:1000
+msgid "GPG-Key not found"
+msgstr "GPG-kľúč neexistuje"
+
+#: views/kmymoneyview.cpp:1000
+#, fuzzy
+msgid ""
+"You have specified to encrypt your data for the user-id</p><p><center><b>%1</"
+"b>.</center></p>Unfortunately, a valid key for this user-id was not found in "
+"your keyring. Please make sure to import a valid key for this user-id. This "
+"time, encryption is disabled."
+msgstr ""
+"Vy do pre používateľská</p><p><center><b></b></center></p> a kľúč pre "
+"používateľská v do import a kľúč pre používateľská čas šifrovanie je "
+"deaktivované."
+
+#: views/kmymoneyview.cpp:1006
+#, fuzzy
+msgid ""
+"You have configured to save your data in encrypted form using GPG. Please be "
+"aware, that this is a brand new feature which is yet untested. Make sure, "
+"you have the necessary understanding that you might loose all your data if "
+"you store it encrypted and cannot decrypt it later on! If unsure, answer "
+"<b>No</b>."
+msgstr ""
+"Vy do v GPG je a nové feature je Make všetky a zapnuté odpoveď<b> Nie</b>."
+
+#: views/kmymoneyview.cpp:1008
+#, fuzzy
+msgid "Store GPG encrypted"
+msgstr "Ukladať GPG"
+
+#: views/kmymoneyview.cpp:1038 views/kmymoneyview.cpp:1052
+msgid "Unable to open file '%1' for writing."
+msgstr "Nepodarilo sa otvoriť súbor %1."
+
+#: views/kmymoneyview.cpp:1065 views/kmymoneyview.cpp:1074
+#, fuzzy
+msgid "Failure while writing to '%1'"
+msgstr "Zlyhanie do"
+
+#: views/kmymoneyview.cpp:1086 views/kmymoneyview.cpp:1181
+#, fuzzy
+msgid "Tried to access a file when it's not open"
+msgstr "do a súbor s"
+
+#: views/kmymoneyview.cpp:1092
+#, fuzzy
+msgid ""
+"Since this version of KMyMoney only writes data files in its new format, "
+"files written with this version cannot be read by KMyMoney version 0.4. If "
+"you still want to use older versions of KMyMoney with your data files, "
+"please make sure you keep a backup-file of your finance data. If you want to "
+"abort this operation, please press Cancel now"
+msgstr "verzia z v s nové verzia verzia do z a súbor z do Zrušiť teraz"
+
+#: views/kmymoneyview.cpp:1122
+msgid "Malformed URL '%1'"
+msgstr "Zle zadané URL '%1' "
+
+#: views/kmymoneyview.cpp:1192
+msgid ""
+"Database contains data which must be removed before using SaveAs.\n"
+"Do you wish to continue?"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1205
+msgid ""
+"An unrecoverable error occurred while writing to the database.\n"
+"It may well be corrupt."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1215
+msgid ""
+"Can't open or create database %1\n"
+"Retry SaveAsDatabase and click Help for further info"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1354
+msgid "Afghanistan Afghani"
+msgstr "Avgánsky afghani"
+
+#: views/kmymoneyview.cpp:1355
+msgid "Albanian Lek"
+msgstr "Albánsky lek"
+
+#: views/kmymoneyview.cpp:1356
+msgid "Netherland Antillian Guilder"
+msgstr "Holanské Antili guilder"
+
+#: views/kmymoneyview.cpp:1357
+msgid "Algerian Dinar"
+msgstr "Alžírsky dinár"
+
+#: views/kmymoneyview.cpp:1358
+msgid "Andorran Franc"
+msgstr "Andorský frank"
+
+#: views/kmymoneyview.cpp:1359
+msgid "Andorran Peseta"
+msgstr "Andorská peseta"
+
+#: views/kmymoneyview.cpp:1360
+msgid "Angolan New Kwanza"
+msgstr "Angolská kwanza"
+
+#: views/kmymoneyview.cpp:1361
+msgid "Argentine Peso"
+msgstr "Argentinske peso"
+
+#: views/kmymoneyview.cpp:1362
+msgid "Aruban Florin"
+msgstr "Arubanský florin"
+
+#: views/kmymoneyview.cpp:1363
+msgid "Australian Dollar"
+msgstr "Austrálsky dolar"
+
+#: views/kmymoneyview.cpp:1364
+msgid "Azerbaijani Manat"
+msgstr "Ázerbajdžánsky manat"
+
+#: views/kmymoneyview.cpp:1365
+msgid "Bahamian Dollar"
+msgstr "Bahamský dolar"
+
+#: views/kmymoneyview.cpp:1366
+msgid "Bahraini Dinar"
+msgstr "Bahrajnský dinar"
+
+#: views/kmymoneyview.cpp:1367
+msgid "Bangladeshi Taka"
+msgstr "Bangladéžska taka"
+
+#: views/kmymoneyview.cpp:1368
+msgid "Barbados Dollar"
+msgstr "Barbados dolar"
+
+#: views/kmymoneyview.cpp:1369
+msgid "Belarussian Ruble"
+msgstr "Bieloruský rubeľ"
+
+#: views/kmymoneyview.cpp:1370
+msgid "Belize Dollar"
+msgstr "Belize dolar"
+
+#: views/kmymoneyview.cpp:1371
+msgid "Bermudian Dollar"
+msgstr "Bermudský dolar"
+
+#: views/kmymoneyview.cpp:1372
+#, fuzzy
+msgid "Bhutan Ngultrum"
+msgstr "Bhután Ngultrum"
+
+#: views/kmymoneyview.cpp:1373
+msgid "Bolivian Boliviano"
+msgstr "Bolívijské boliviano"
+
+#: views/kmymoneyview.cpp:1374
+msgid "Bosnian Convertible Mark"
+msgstr "Bosnianska konvertibilná marka"
+
+#: views/kmymoneyview.cpp:1375
+msgid "Botswana Pula"
+msgstr "Botswana Pula"
+
+#: views/kmymoneyview.cpp:1376
+msgid "Brazilian Real"
+msgstr "Brazílsky real"
+
+#: views/kmymoneyview.cpp:1377
+msgid "British Pound"
+msgstr "Britská libra"
+
+#: views/kmymoneyview.cpp:1378
+msgid "Brunei Dollar"
+msgstr "Brunei dolar"
+
+#: views/kmymoneyview.cpp:1379
+msgid "Bulgarian Lev"
+msgstr "Bulharský leva"
+
+#: views/kmymoneyview.cpp:1380
+msgid "Burundi Franc"
+msgstr "Burundský frank"
+
+#: views/kmymoneyview.cpp:1381
+msgid "CFA Franc BEAC"
+msgstr "CFA Franc BEAC"
+
+#: views/kmymoneyview.cpp:1382
+msgid "CFA Franc BCEAO"
+msgstr "CFA Franc BCEAO"
+
+#: views/kmymoneyview.cpp:1383
+msgid "CFP Franc Pacifique"
+msgstr "CFP Franc Pacifique"
+
+#: views/kmymoneyview.cpp:1384
+msgid "Cambodia Riel"
+msgstr "Kambodža Riel"
+
+#: views/kmymoneyview.cpp:1385
+msgid "Canadian Dollar"
+msgstr "Kanadský dolar"
+
+#: views/kmymoneyview.cpp:1386
+msgid "Cape Verde Escudo"
+msgstr "Cape Verde Escudo"
+
+#: views/kmymoneyview.cpp:1387
+msgid "Cayman Islands Dollar"
+msgstr "Kajmanský dolar"
+
+#: views/kmymoneyview.cpp:1388
+msgid "Chilean Peso"
+msgstr "Čilské peso"
+
+#: views/kmymoneyview.cpp:1389
+msgid "Chinese Yuan Renminbi"
+msgstr "Čínsky yuan"
+
+#: views/kmymoneyview.cpp:1390
+msgid "Colombian Peso"
+msgstr "Kolumbijské peso"
+
+#: views/kmymoneyview.cpp:1391
+msgid "Comoros Franc"
+msgstr "Komorský Frank"
+
+#: views/kmymoneyview.cpp:1392
+msgid "Costa Rican Colon"
+msgstr "Kostarický colon"
+
+#: views/kmymoneyview.cpp:1393
+msgid "Croatian Kuna"
+msgstr "Chorvátska kuna"
+
+#: views/kmymoneyview.cpp:1394
+msgid "Cuban Peso"
+msgstr "Kubánske peso"
+
+#: views/kmymoneyview.cpp:1395
+msgid "Czech Koruna"
+msgstr "Česká koruna"
+
+#: views/kmymoneyview.cpp:1396
+msgid "Danish Krone"
+msgstr "Dánska koruna"
+
+#: views/kmymoneyview.cpp:1397
+msgid "Djibouti Franc"
+msgstr "Djibouti frank"
+
+#: views/kmymoneyview.cpp:1398
+msgid "Dominican Peso"
+msgstr "Dominikánske peso"
+
+#: views/kmymoneyview.cpp:1399
+msgid "East Caribbean Dollar"
+msgstr "Východo-karibský dolar"
+
+#: views/kmymoneyview.cpp:1400
+msgid "Egyptian Pound"
+msgstr "Egyptská libra"
+
+#: views/kmymoneyview.cpp:1401
+msgid "El Salvador Colon"
+msgstr "El Salvador colon"
+
+#: views/kmymoneyview.cpp:1402
+msgid "Eritrean Nakfa"
+msgstr "Eritrejská nakfa"
+
+#: views/kmymoneyview.cpp:1403
+msgid "Estonian Kroon"
+msgstr "Estónska Kroon"
+
+#: views/kmymoneyview.cpp:1404
+msgid "Ethiopian Birr"
+msgstr "Etiopsky birr"
+
+#: views/kmymoneyview.cpp:1405
+msgid "Euro"
+msgstr "Euro"
+
+#: views/kmymoneyview.cpp:1406
+msgid "Falkland Islands Pound"
+msgstr "Falklandská libra"
+
+#: views/kmymoneyview.cpp:1407
+msgid "Fiji Dollar"
+msgstr "Fidži dolar"
+
+#: views/kmymoneyview.cpp:1408
+msgid "Gambian Dalasi"
+msgstr "Gambijský dalasi"
+
+#: views/kmymoneyview.cpp:1409
+msgid "Georgian Lari"
+msgstr "Gruzínsky lari"
+
+#: views/kmymoneyview.cpp:1410
+msgid "Ghanaian Cedi"
+msgstr "Ghanský cedi"
+
+#: views/kmymoneyview.cpp:1411
+msgid "Gibraltar Pound"
+msgstr "Gibraltar libra"
+
+#: views/kmymoneyview.cpp:1412
+msgid "Guatemalan Quetzal"
+msgstr "Guatemalský quetzal"
+
+#: views/kmymoneyview.cpp:1413
+msgid "Guinea-Bissau Peso"
+msgstr "Guinea-Bissau peso"
+
+#: views/kmymoneyview.cpp:1414
+msgid "Guyanan Dollar"
+msgstr "Guyana dolar"
+
+#: views/kmymoneyview.cpp:1415
+msgid "Haitian Gourde"
+msgstr "Haitský gourde"
+
+#: views/kmymoneyview.cpp:1416
+msgid "Honduran Lempira"
+msgstr "Honduraská lempira"
+
+#: views/kmymoneyview.cpp:1417
+msgid "Hong Kong Dollar"
+msgstr "HongKongský dolar"
+
+#: views/kmymoneyview.cpp:1418
+msgid "Hungarian Forint"
+msgstr "Maďarský forint"
+
+#: views/kmymoneyview.cpp:1419
+msgid "Iceland Krona"
+msgstr "Islandská koruna"
+
+#: views/kmymoneyview.cpp:1420
+msgid "Indian Rupee"
+msgstr "Indická rupia"
+
+#: views/kmymoneyview.cpp:1421
+msgid "Indonesian Rupiah"
+msgstr "Indonézska rupia"
+
+#: views/kmymoneyview.cpp:1422
+msgid "Iranian Rial"
+msgstr "Iránsky rial"
+
+#: views/kmymoneyview.cpp:1423
+msgid "Iraqi Dinar"
+msgstr "Irácky dinar"
+
+#: views/kmymoneyview.cpp:1424
+msgid "Israeli New Shekel"
+msgstr "Izraelský nový šekel"
+
+#: views/kmymoneyview.cpp:1425
+msgid "Jamaican Dollar"
+msgstr "Jamajský dolar"
+
+#: views/kmymoneyview.cpp:1426
+msgid "Japanese Yen"
+msgstr "Japonský yen"
+
+#: views/kmymoneyview.cpp:1427
+msgid "Jordanian Dinar"
+msgstr "Jordánsky dinar"
+
+#: views/kmymoneyview.cpp:1428
+msgid "Kazakhstan Tenge"
+msgstr "Kazachstan Tenge"
+
+#: views/kmymoneyview.cpp:1429
+msgid "Kenyan Shilling"
+msgstr "Keňský šiling"
+
+#: views/kmymoneyview.cpp:1430
+msgid "Kuwaiti Dinar"
+msgstr "Kuwaitský dinar"
+
+#: views/kmymoneyview.cpp:1431
+msgid "Kyrgyzstan Som"
+msgstr "Kirgistán Som"
+
+#: views/kmymoneyview.cpp:1432
+msgid "Laos Kip"
+msgstr "Laos Kip"
+
+#: views/kmymoneyview.cpp:1433
+msgid "Latvian Lats"
+msgstr "Lotyšský lat"
+
+#: views/kmymoneyview.cpp:1434
+msgid "Lebanese Pound"
+msgstr "Libanonská libra"
+
+#: views/kmymoneyview.cpp:1435
+msgid "Lesotho Loti"
+msgstr "Lesotho Loti"
+
+#: views/kmymoneyview.cpp:1436
+msgid "Liberian Dollar"
+msgstr "Libérijský dolar"
+
+#: views/kmymoneyview.cpp:1437
+msgid "Libyan Dinar"
+msgstr "Líbyjský dinar"
+
+#: views/kmymoneyview.cpp:1438
+msgid "Lithuanian Litas"
+msgstr "Litovská litas"
+
+#: views/kmymoneyview.cpp:1439
+msgid "Macau Pataca"
+msgstr "Macao Pataca"
+
+#: views/kmymoneyview.cpp:1440
+msgid "Macedonian Denar"
+msgstr "Macedónsky denár"
+
+#: views/kmymoneyview.cpp:1441
+msgid "Malagasy Franc"
+msgstr "Malagaský frank"
+
+#: views/kmymoneyview.cpp:1442
+msgid "Malawi Kwacha"
+msgstr "Malawi kwacha"
+
+#: views/kmymoneyview.cpp:1443
+msgid "Malaysian Ringgit"
+msgstr "Malajský ringgit"
+
+#: views/kmymoneyview.cpp:1444
+msgid "Maldive Rufiyaa"
+msgstr "Maledivská rufiyaa"
+
+#: views/kmymoneyview.cpp:1445
+msgid "Mali Republic Franc"
+msgstr "Mali frank"
+
+#: views/kmymoneyview.cpp:1446
+msgid "Mauritanian Ouguiya"
+msgstr "Maurícijský ouguiya"
+
+#: views/kmymoneyview.cpp:1447
+msgid "Mauritius Rupee"
+msgstr "Mauricijská rupia"
+
+#: views/kmymoneyview.cpp:1448
+msgid "Mexican Peso"
+msgstr "Mexické peso"
+
+#: views/kmymoneyview.cpp:1449
+#, fuzzy
+msgid "Moldavian Leu"
+msgstr "Rumunské leu"
+
+#: views/kmymoneyview.cpp:1450
+msgid "Mongolian Tugrik"
+msgstr "Mongolský tugrik"
+
+#: views/kmymoneyview.cpp:1451
+msgid "Moroccan Dirham"
+msgstr "Marcoký dirham"
+
+#: views/kmymoneyview.cpp:1452
+msgid "Mozambique Metical"
+msgstr "Mozambik metical"
+
+#: views/kmymoneyview.cpp:1453
+msgid "Myanmar Kyat"
+msgstr "Myanmar (Barma) kyat"
+
+#: views/kmymoneyview.cpp:1454
+msgid "Namibian Dollar"
+msgstr "Namíbijský dolar"
+
+#: views/kmymoneyview.cpp:1455
+msgid "Nepalese Rupee"
+msgstr "Nepálska rupia"
+
+#: views/kmymoneyview.cpp:1456
+msgid "New Zealand Dollar"
+msgstr "Novo Zélandsky dolar"
+
+#: views/kmymoneyview.cpp:1457
+msgid "Nicaraguan Cordoba Oro"
+msgstr "Nicaraguan Cordoba Oro"
+
+#: views/kmymoneyview.cpp:1458
+msgid "Nigerian Naira"
+msgstr "Nigérijská naira"
+
+#: views/kmymoneyview.cpp:1459
+msgid "North Korean Won"
+msgstr "Severo-kórejský won"
+
+#: views/kmymoneyview.cpp:1460
+msgid "Norwegian Kroner"
+msgstr "Nórska koruna"
+
+#: views/kmymoneyview.cpp:1461
+msgid "Omani Rial"
+msgstr "Ománsky rial"
+
+#: views/kmymoneyview.cpp:1462
+msgid "Pakistan Rupee"
+msgstr "Pakistanská rupija"
+
+#: views/kmymoneyview.cpp:1463
+msgid "Panamanian Balboa"
+msgstr "Panama balboa"
+
+#: views/kmymoneyview.cpp:1464
+msgid "Papua New Guinea Kina"
+msgstr "Nová Guinea Kina"
+
+#: views/kmymoneyview.cpp:1465
+msgid "Paraguay Guarani"
+msgstr "Paraguajské guarani"
+
+#: views/kmymoneyview.cpp:1466
+msgid "Peruvian Nuevo Sol"
+msgstr "Peruánsky nový sol"
+
+#: views/kmymoneyview.cpp:1467
+msgid "Philippine Peso"
+msgstr "Filipínske peso"
+
+#: views/kmymoneyview.cpp:1468
+msgid "Polish Zloty"
+msgstr "Poľský zlotý"
+
+#: views/kmymoneyview.cpp:1469
+msgid "Qatari Rial"
+msgstr "Katarský rial"
+
+#: views/kmymoneyview.cpp:1470
+msgid "Romanian Leu (new)"
+msgstr "Rumunské leu (nové)"
+
+#: views/kmymoneyview.cpp:1471
+msgid "Russian Ruble"
+msgstr "Ruský rubeľ"
+
+#: views/kmymoneyview.cpp:1472
+msgid "Rwanda Franc"
+msgstr "Rwandský frank"
+
+#: views/kmymoneyview.cpp:1473
+msgid "Samoan Tala"
+msgstr "Samojský tala"
+
+#: views/kmymoneyview.cpp:1474
+msgid "Sao Tome and Principe Dobra"
+msgstr "Sao Tome and Principe Dobra"
+
+#: views/kmymoneyview.cpp:1475
+msgid "Saudi Riyal"
+msgstr "Suadský rial"
+
+#: views/kmymoneyview.cpp:1476
+msgid "Seychelles Rupee"
+msgstr "Seyšelská rupia"
+
+#: views/kmymoneyview.cpp:1477
+msgid "Sierra Leone Leone"
+msgstr "Sierra Leone leone"
+
+#: views/kmymoneyview.cpp:1478
+msgid "Singapore Dollar"
+msgstr "Singapúrsky dolar"
+
+#: views/kmymoneyview.cpp:1481
+msgid "Solomon Islands Dollar"
+msgstr "Šalamúnove Ostrovy dolar"
+
+#: views/kmymoneyview.cpp:1482
+msgid "Somali Shilling"
+msgstr "Somálsky šiling"
+
+#: views/kmymoneyview.cpp:1483
+msgid "South African Rand"
+msgstr "Juhoafrický rand"
+
+#: views/kmymoneyview.cpp:1484
+msgid "South Korean Won"
+msgstr "Juhokórejský won"
+
+#: views/kmymoneyview.cpp:1485
+msgid "Sri Lanka Rupee"
+msgstr "Sri Lanka rupia"
+
+#: views/kmymoneyview.cpp:1486
+msgid "St. Helena Pound"
+msgstr "St. Helena pound"
+
+#: views/kmymoneyview.cpp:1487
+msgid "Sudanese Dinar"
+msgstr "Sudánsky dolar"
+
+#: views/kmymoneyview.cpp:1488
+msgid "Suriname Guilder"
+msgstr "Surinamský guilder"
+
+#: views/kmymoneyview.cpp:1489
+msgid "Swaziland Lilangeni"
+msgstr "Svazijsko lilangeni"
+
+#: views/kmymoneyview.cpp:1490
+msgid "Swedish Krona"
+msgstr "Švédska koruna"
+
+#: views/kmymoneyview.cpp:1491
+msgid "Swiss Franc"
+msgstr "Švajčiarsky frank"
+
+#: views/kmymoneyview.cpp:1492
+msgid "Syrian Pound"
+msgstr "Sýrska libra"
+
+#: views/kmymoneyview.cpp:1493
+msgid "Taiwan Dollar"
+msgstr "Taiwanský dolar"
+
+#: views/kmymoneyview.cpp:1494
+msgid "Tajikistan Somani"
+msgstr "Tadžikistanský somani"
+
+#: views/kmymoneyview.cpp:1495
+msgid "Tanzanian Shilling"
+msgstr "Tanzánsky šiling"
+
+#: views/kmymoneyview.cpp:1496
+msgid "Thai Baht"
+msgstr "Thajský baht"
+
+#: views/kmymoneyview.cpp:1497
+msgid "Tongan Pa'anga"
+msgstr "Tongan Pa'anga"
+
+#: views/kmymoneyview.cpp:1498
+msgid "Trinidad and Tobago Dollar"
+msgstr "Trinidad a Tobago dolar"
+
+#: views/kmymoneyview.cpp:1499
+msgid "Tunisian Dinar"
+msgstr "Tuniský dinar"
+
+#: views/kmymoneyview.cpp:1500
+msgid "Turkish Lira (new)"
+msgstr "Turecká Lira (nová)"
+
+#: views/kmymoneyview.cpp:1501
+msgid "Turkmenistan Manat"
+msgstr "Turkmenistán manat"
+
+#: views/kmymoneyview.cpp:1502
+msgid "US Dollar"
+msgstr "US dolar"
+
+#: views/kmymoneyview.cpp:1503
+msgid "Uganda Shilling"
+msgstr "Ugandský šiling"
+
+#: views/kmymoneyview.cpp:1504
+msgid "Ukraine Hryvnia"
+msgstr "Ukrajinská hryvna"
+
+#: views/kmymoneyview.cpp:1505
+msgid "United Arab Emirates Dirham"
+msgstr "Spojené Arabské Emiráty dirham"
+
+#: views/kmymoneyview.cpp:1506
+msgid "Uruguayan Peso"
+msgstr "Uruguajské peso"
+
+#: views/kmymoneyview.cpp:1507
+msgid "Uzbekistani Sum"
+msgstr "Uzbekistan sum"
+
+#: views/kmymoneyview.cpp:1508
+msgid "Vanuatu Vatu"
+msgstr "Vanuatu vatu"
+
+#: views/kmymoneyview.cpp:1509
+msgid "Venezuelan Bolivar"
+msgstr "Venezuelský bolivar"
+
+#: views/kmymoneyview.cpp:1510
+msgid "Vietnamese Dong"
+msgstr "Vietnamský dong"
+
+#: views/kmymoneyview.cpp:1511
+msgid "Yugoslav Dinar"
+msgstr "Juhoslovanský dinar"
+
+#: views/kmymoneyview.cpp:1512
+msgid "Zambian Kwacha"
+msgstr "Zambia kwacha"
+
+#: views/kmymoneyview.cpp:1513
+msgid "Zimbabwe Dollar"
+msgstr "Zimbabsky dolar"
+
+#: views/kmymoneyview.cpp:1515
+msgid "Gold"
+msgstr "Zlato"
+
+#: views/kmymoneyview.cpp:1516
+msgid "Palladium"
+msgstr "Paládium"
+
+#: views/kmymoneyview.cpp:1517
+msgid "Platinum"
+msgstr "Platina"
+
+#: views/kmymoneyview.cpp:1518
+msgid "Silver"
+msgstr "Striebro"
+
+#: views/kmymoneyview.cpp:1551
+msgid "Austrian Schilling"
+msgstr "Austrálsky šiling"
+
+#: views/kmymoneyview.cpp:1552
+msgid "German Mark"
+msgstr "Nemecká marka"
+
+#: views/kmymoneyview.cpp:1553
+msgid "French Franc"
+msgstr "Francúzsky frank"
+
+#: views/kmymoneyview.cpp:1554
+msgid "Italian Lira"
+msgstr "Talianska lira"
+
+#: views/kmymoneyview.cpp:1555
+msgid "Spanish Peseta"
+msgstr "Španielske peseta"
+
+#: views/kmymoneyview.cpp:1556
+msgid "Dutch Guilder"
+msgstr "Holandský guilder"
+
+#: views/kmymoneyview.cpp:1557
+msgid "Belgian Franc"
+msgstr "Belgický frank"
+
+#: views/kmymoneyview.cpp:1558
+msgid "Luxembourg Franc"
+msgstr "Luxemburský frank"
+
+#: views/kmymoneyview.cpp:1559
+msgid "Portuguese Escudo"
+msgstr "Portugalské escudo"
+
+#: views/kmymoneyview.cpp:1560
+msgid "Irish Pound"
+msgstr "Írska libra"
+
+#: views/kmymoneyview.cpp:1561
+msgid "Finnish Markka"
+msgstr "Fínska marka"
+
+#: views/kmymoneyview.cpp:1562
+msgid "Greek Drachma"
+msgstr "Grécka drachma"
+
+#: views/kmymoneyview.cpp:1564
+msgid "Romanian Leu"
+msgstr "Rumunské leu"
+
+#: views/kmymoneyview.cpp:1566
+msgid "Russian Ruble (old)"
+msgstr "Ruský rubeľ (starý)"
+
+#: views/kmymoneyview.cpp:1568
+msgid "Slovenian Tolar"
+msgstr "Slovinský tolar"
+
+#: views/kmymoneyview.cpp:1571
+msgid "Turkish Lira"
+msgstr "Turecká lira"
+
+#: views/kmymoneyview.cpp:1574
+msgid "Maltese Lira"
+msgstr "Maltská lira"
+
+#: views/kmymoneyview.cpp:1575
+msgid "Cyprus Pound"
+msgstr "Cyperská libra"
+
+#: views/kmymoneyview.cpp:1578
+msgid "Slovak Koruna"
+msgstr "Slovenská koruna"
+
+#: views/kmymoneyview.cpp:1888
+#, fuzzy
+msgid ""
+"The account \"%1\" was previously created as loan account but some "
+"information is missing. The new loan wizard will be started to collect all "
+"relevant information. Please use a KMyMoney version >= 0.8.7 and < 0.9 to "
+"correct the problem."
+msgstr "account account niečo informácie je nové do všetky informácie súbor."
+
+#: views/kmymoneyview.cpp:1892
+msgid "Account problem"
+msgstr "Chyba účtu"
+
+#: views/kmymoneyview.cpp:1941
+#, fuzzy
+msgid "Unable to add schedule: "
+msgstr "do "
+
+#: views/kmymoneyview.cpp:1970
+msgid "Fix transactions"
+msgstr "Opraviť transakcie"
+
+#: views/kaccountsview.cpp:522 views/kinstitutionsview.cpp:300
+msgid "Net Worth: "
+msgstr ""
+
+#: dialogs/rc.cpp:108 dialogs/rc.cpp:163 dialogs/rc.cpp:250 dialogs/rc.cpp:755
+#: dialogs/rc.cpp:830 views/kinvestmentview.cpp:77 widgets/register.cpp:572
+msgid "Quantity"
+msgstr "Množstvo"
+
+#: views/kscheduledlistitem.cpp:137
+msgid "Finished"
+msgstr "Ukončený"
+
+#: views/kbudgetview.cpp:109
+#, fuzzy
+msgid "Creates a new budget"
+msgstr "Vytvoriť nový účet"
+
+#: views/kbudgetview.cpp:110
+#, fuzzy
+msgid "Use this to create a new empty budget."
+msgstr "Použiť do a nové."
+
+#: views/kbudgetview.cpp:116
+#, fuzzy
+msgid "Rename the current selected budget"
+msgstr "Odstrániť vybraný profil"
+
+#: views/kbudgetview.cpp:117
+#, fuzzy
+msgid "Use this to start renaming the selected budget."
+msgstr "Použiť do odstrániť profile"
+
+#: views/kbudgetview.cpp:123
+#, fuzzy
+msgid "Delete the current selected budget"
+msgstr "Odstrániť vybraný profil"
+
+#: views/kbudgetview.cpp:124
+#, fuzzy
+msgid "Use this to delete the selected budget."
+msgstr "Použiť do odstrániť profile"
+
+#: views/kbudgetview.cpp:130
+#, fuzzy
+msgid "Accepts the entered values and stores the budget"
+msgstr "a"
+
+#: views/kbudgetview.cpp:131
+#, fuzzy
+msgid "Use this to store the modified data."
+msgstr "Použiť do zmenené."
+
+#: views/kbudgetview.cpp:137
+msgid "Revert budget to last saved state"
+msgstr ""
+
+#: views/kbudgetview.cpp:138
+#, fuzzy
+msgid "Use this to discard the modified data."
+msgstr "Použiť do zmenené."
+
+#: views/kbudgetview.cpp:489
+#, fuzzy
+msgid "Do you want to save the changes for <b>%1</b>"
+msgstr "do pre"
+
+#: views/kbudgetview.cpp:610
+msgid ""
+"A budget with the name '%1' already exists. It is not advisable to have "
+"multiple budgets with the same identification name. Are you sure you would "
+"like to rename the budget?"
+msgstr ""
+
+#: views/kbudgetview.cpp:635 views/kbudgetview.cpp:750
+#, fuzzy
+msgid "Unable to modify budget"
+msgstr "do"
+
+#: views/kbudgetview.cpp:736
+#, fuzzy
+msgid "Unable to reset budget"
+msgstr "do"
+
+#: views/rc.cpp:1
+msgid "List"
+msgstr "Zoznam"
+
+#: views/rc.cpp:2 views/rc.cpp:20
+msgid "Collapse all accounts in the list"
+msgstr ""
+
+#: views/rc.cpp:3 views/rc.cpp:21
+msgid "Expand all accounts in the list"
+msgstr ""
+
+#: views/rc.cpp:4
+msgid "Icons"
+msgstr "Ikony"
+
+#: views/rc.cpp:5 views/rc.cpp:22
+#, fuzzy
+msgid "Note: Unused categories are not shown as selected by settings."
+msgstr "Poznámka Nepoužité nastavenie."
+
+#: views/rc.cpp:6 views/rc.cpp:23 views/rc.cpp:54
+msgid "Total Profits:"
+msgstr "Celkový zisk:"
+
+#: views/rc.cpp:7
+#, fuzzy
+msgid "Your budgets"
+msgstr "Rozpočty"
+
+#: dialogs/rc.cpp:340 dialogs/rc.cpp:841 dialogs/settings/rc.cpp:124
+#: views/rc.cpp:8 widgets/rc.cpp:48 widgets/rc.cpp:150
+msgid "New"
+msgstr "Nová"
+
+#: views/rc.cpp:9
+#, fuzzy
+msgid "Ren"
+msgstr "S&pustiť"
+
+#: views/rc.cpp:10
+#, fuzzy
+msgid "Del"
+msgstr "Detaily"
+
+#: views/rc.cpp:11
+#, fuzzy
+msgid "Res"
+msgstr "Obnoviť"
+
+#: views/rc.cpp:12
+#, fuzzy
+msgid "Upd"
+msgstr "&Nahor"
+
+#: views/rc.cpp:15
+#, fuzzy
+msgid "Hide unused budget categories"
+msgstr "Skryté kategórie"
+
+#: views/rc.cpp:16
+#, fuzzy
+msgid "Assignments"
+msgstr "Aktíva"
+
+#: views/rc.cpp:19
+#, fuzzy
+msgid "Include subaccounts"
+msgstr "Je podúčet"
+
+#: dialogs/settings/rc.cpp:23 views/rc.cpp:24
+#, fuzzy
+msgid "Forecast Settings"
+msgstr "Nastavenie písma"
+
+#: views/rc.cpp:25
+#, fuzzy
+msgid "Days to Forecast:"
+msgstr "Číslo z:"
+
+#: views/rc.cpp:26
+msgid "Days of Accounts Cycle:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:25 views/rc.cpp:27
+msgid "Day of Month to start Forecast:"
+msgstr ""
+
+#: views/rc.cpp:28
+msgid "Historic Cycles:"
+msgstr ""
+
+#: views/rc.cpp:29
+#, fuzzy
+msgid "Chart Detail:"
+msgstr "Graf"
+
+#: views/rc.cpp:30 widgets/kmymoneyaccountselector.cpp:64 widgets/rc.cpp:65
+msgid "All"
+msgstr "Všetky"
+
+#: views/rc.cpp:31 widgets/rc.cpp:66
+msgid "Top-Level"
+msgstr ""
+
+#: views/rc.cpp:32 widgets/rc.cpp:67
+msgid "Groups"
+msgstr ""
+
+#: views/rc.cpp:33 widgets/rc.cpp:68
+#, fuzzy
+msgid "Totals"
+msgstr "Celkom"
+
+#: views/rc.cpp:34
+#, fuzzy
+msgid "<p>Choose what level of detail to show on the chart.</p>"
+msgstr "<p> z do z</p>"
+
+#: views/rc.cpp:35
+#, fuzzy
+msgid "Current Forecast Method:"
+msgstr "Spôsob platby"
+
+#: views/rc.cpp:36
+#, fuzzy
+msgid "method"
+msgstr "Metóda:"
+
+#: dialogs/settings/rc.cpp:32 views/rc.cpp:37
+#, fuzzy
+msgid "History Forecast Method"
+msgstr "Spôsob platby"
+
+#: dialogs/settings/rc.cpp:33 views/rc.cpp:38
+msgid "Simple Moving Average"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:34 views/rc.cpp:39
+msgid "Weighted Moving Average"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:35 views/rc.cpp:40
+msgid "Linear Regression"
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:315 dialogs/rc.cpp:628 dialogs/rc.cpp:647
+#: views/rc.cpp:43
+msgid "Summary"
+msgstr "Súhrn"
+
+#: views/rc.cpp:45
+#, fuzzy
+msgid "0 days"
+msgstr "Posledných 30 dní"
+
+#: views/rc.cpp:46
+#, fuzzy
+msgid "30 days"
+msgstr "Posledných 30 dní"
+
+#: views/rc.cpp:47
+#, fuzzy
+msgid "60 days"
+msgstr "Posledných 30 dní"
+
+#: views/rc.cpp:48
+#, fuzzy
+msgid "90 days"
+msgstr "Posledných 30 dní"
+
+#: views/rc.cpp:49
+msgid "New Item"
+msgstr ""
+
+#: views/rc.cpp:50 widgets/rc.cpp:64
+#, fuzzy
+msgid "Detail"
+msgstr "Detaily"
+
+#: views/rc.cpp:51
+#, fuzzy
+msgid "Advanced"
+msgstr "Pokročilé."
+
+#: views/rc.cpp:52
+#, fuzzy
+msgid "Budget Forecast"
+msgstr "Nasledujúci rok"
+
+#: views/rc.cpp:55
+msgid "Investment Summary"
+msgstr "Investičný súhrn"
+
+#: views/rc.cpp:56
+msgid "Select Account:"
+msgstr "Zvoliť účet:"
+
+#: views/rc.cpp:57
+#, fuzzy
+msgid ""
+"Summary of the equities contained in this account, showing your holdings and "
+"their most recent price."
+msgstr "Súhrn z v account a."
+
+#: views/rc.cpp:60 widgets/register.cpp:564
+msgid "No."
+msgstr "Č."
+
+#: views/rc.cpp:64
+msgid "Balance: "
+msgstr "Bilancia:"
+
+#: views/rc.cpp:65
+#, fuzzy
+msgid "Address"
+msgstr "Adresa:"
+
+#: views/rc.cpp:66
+msgid "Payee Information"
+msgstr "Informácie o príjemcovi"
+
+#: views/rc.cpp:67
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#: dialogs/rc.cpp:393 views/rc.cpp:69
+msgid "Telephone/Fax:"
+msgstr "Telefón/Fax:"
+
+#: views/rc.cpp:70
+#, fuzzy
+msgid "Notes"
+msgstr "Poznámky:"
+
+#: views/rc.cpp:71
+msgid "Address:"
+msgstr "Adresa:"
+
+#: views/rc.cpp:72
+#, fuzzy
+msgid "Matching"
+msgstr "Nerobiť nič"
+
+#: views/rc.cpp:73
+#, fuzzy
+msgid "Transaction Matching"
+msgstr "Nastavenia transakcie"
+
+#: views/rc.cpp:74
+#, fuzzy
+msgid "No matching"
+msgstr "Nerobiť nič"
+
+#: views/rc.cpp:75
+#, fuzzy
+msgid "Match on Payee name"
+msgstr "meno:"
+
+#: views/rc.cpp:76
+#, fuzzy
+msgid "Match on a name listed below"
+msgstr "meno:"
+
+#: views/rc.cpp:77
+#, fuzzy
+msgid "List of matching names"
+msgstr "Nerobiť nič"
+
+#: views/rc.cpp:78
+msgid ""
+"This list contains the names that will match this payee if a transaction is "
+"imported from an external source. Keep in mind, that you can specify regular "
+"expressions here."
+msgstr ""
+
+#: views/rc.cpp:79
+#, fuzzy
+msgid "Ignore Case"
+msgstr "Nárast"
+
+#: views/rc.cpp:80
+#, fuzzy
+msgid "Default Account"
+msgstr "Zvoliť účet:"
+
+#: views/rc.cpp:81
+#, fuzzy
+msgid ""
+"Use the default account for\n"
+"new transactions with this payee"
+msgstr "Nahrávanie"
+
+#: views/rc.cpp:82
+#, fuzzy
+msgid "Default category:"
+msgstr "Vytvoriť kategóriu"
+
+#: views/rc.cpp:83
+#, fuzzy
+msgid "Suggest a category"
+msgstr "Vytvoriť kategóriu"
+
+#: views/rc.cpp:85
+#, fuzzy
+msgid "New Scheduled transaction..."
+msgstr "Zadať plánovanú transakciu"
+
+#: views/rc.cpp:86
+msgid "Filter Accounts"
+msgstr "Filter účtov"
+
+#: views/rc.cpp:87
+msgid "List View"
+msgstr "Zoznam"
+
+#: views/rc.cpp:88
+msgid "Calendar View"
+msgstr "Kalendár"
+
+#: views/kinstitutionsview.cpp:43
+#, fuzzy
+msgid "Institution/Account"
+msgstr "Inštitúcia"
+
+#: views/kinstitutionsview.cpp:157
+#, fuzzy
+msgid "Accounts with no institution assigned"
+msgstr "Účty nie"
+
+#: views/kscheduledview.cpp:70
+msgid "Type/Name"
+msgstr "Typ/Meno"
+
+#: views/kscheduledview.cpp:75
+msgid "Frequency"
+msgstr "Frekvencia"
+
+#: views/kscheduledview.cpp:157
+#, fuzzy
+msgid "Unable to load accounts: "
+msgstr "do "
+
+#: views/kscheduledview.cpp:171 views/kscheduledview.cpp:429
+#: views/kscheduledview.cpp:445 widgets/kmymoneyscheduledcalendar.cpp:46
+msgid "Bills"
+msgstr "Účtenky"
+
+#: dialogs/rc.cpp:232 dialogs/rc.cpp:706 views/kscheduledview.cpp:172
+#: views/kscheduledview.cpp:431 views/kscheduledview.cpp:447
+#: widgets/kmymoneyscheduledcalendar.cpp:47
+msgid "Deposits"
+msgstr "Vklady"
+
+#: views/kscheduledview.cpp:173 views/kscheduledview.cpp:435
+#: views/kscheduledview.cpp:451
+msgid "Loans"
+msgstr "Pôžičky"
+
+#: views/kscheduledview.cpp:357
+#, fuzzy
+msgid "Error activating context menu"
+msgstr "Chyba menu"
+
+#: views/kscheduledview.cpp:385
+#, fuzzy
+msgid "Error executing item"
+msgstr "Chyba položka"
+
+#: views/kscheduledview.cpp:419
+#, fuzzy
+msgid "Unable to filter account"
+msgstr "do filter account"
+
+#: views/kgloballedgerview.cpp:508
+#, fuzzy
+msgid "Statement Details"
+msgstr "Dátum vyuúčtovania:"
+
+#: views/kgloballedgerview.cpp:512
+#, fuzzy
+msgid "Statement Deposit Details"
+msgstr "Importer informácií"
+
+#: views/kgloballedgerview.cpp:513
+#, fuzzy
+msgid "Statement Payment Details"
+msgstr "Dátum vyuúčtovania:"
+
+#: views/kgloballedgerview.cpp:642
+msgid "%1 deposits (%3), %2 payments (%4)"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:649
+#, fuzzy
+msgid "%1 payments (%2)"
+msgstr "jeden úrok"
+
+#: views/kgloballedgerview.cpp:653
+#, fuzzy
+msgid "%1 deposits (%2)"
+msgstr "%1 Vklady."
+
+#: views/kgloballedgerview.cpp:721
+#, c-format
+msgid "Statement: %1"
+msgstr "Informácie: %1"
+
+#: views/kgloballedgerview.cpp:722 views/kgloballedgerview.cpp:736
+#, c-format
+msgid "Cleared: %1"
+msgstr "Zmazané: %1"
+
+#: views/kgloballedgerview.cpp:723
+#, c-format
+msgid "Difference: %1"
+msgstr "Rozdiel: %1"
+
+#: views/kgloballedgerview.cpp:730
+#, fuzzy, c-format
+msgid "Last reconciled: %1"
+msgstr "Posledný 1"
+
+#: views/kgloballedgerview.cpp:732
+#, fuzzy
+msgid "Never reconciled"
+msgstr "Nie"
+
+#: views/kgloballedgerview.cpp:772
+#, fuzzy
+msgid "Investment value: %1%2"
+msgstr "Investícia: %1"
+
+#: views/kgloballedgerview.cpp:1040
+#, fuzzy
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to continue to edit the transactions anyway?"
+msgstr "jeden z do do úprava?"
+
+#: views/kgloballedgerview.cpp:1051
+#, fuzzy
+msgid ""
+"At least one split of the selected transactions has been frozen. Editing the "
+"transactions is therefore prohibited."
+msgstr "jeden z Úprava je."
+
+#: views/kgloballedgerview.cpp:1053
+msgid "Transaction already frozen"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1058
+#, fuzzy
+msgid ""
+"At least one split of the selected transaction references an account that "
+"has been closed. Editing the transactions is therefore prohibited."
+msgstr "jeden z Úprava je."
+
+#: views/kgloballedgerview.cpp:1060
+#, fuzzy
+msgid "Account closed"
+msgstr "Účty"
+
+#: views/kgloballedgerview.cpp:1349
+#, fuzzy
+msgid "Cannot create transactions when no account is selected."
+msgstr "Vybrať prevody bez príjemcov"
+
+#: views/kgloballedgerview.cpp:1354
+msgid "Cannot create transactions in the context of a category."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1358
+#, fuzzy
+msgid "Cannot create transactions in a closed account."
+msgstr "do import do account?"
+
+#: views/kgloballedgerview.cpp:1370
+#, fuzzy
+msgid "Cannot process transaction with focus if it is not selected."
+msgstr "Vybrať prevody bez príjemcov"
+
+#: views/kgloballedgerview.cpp:1400
+#, fuzzy
+msgid "Cannot edit transactions with frozen splits."
+msgstr "Vybrať prevody bez príjemcov"
+
+#: views/kgloballedgerview.cpp:1411
+#, fuzzy
+msgid "Cannot edit transactions in the context of a category."
+msgstr "Nemôžem upraviť účet/kategóriu:"
+
+#: views/kgloballedgerview.cpp:1430
+msgid ""
+"Cannot edit investment transactions and non-investment transactions together."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1438
+#, fuzzy
+msgid "Cannot edit multiple split transactions at once."
+msgstr "Return do"
+
+#: views/kgloballedgerview.cpp:1448
+#, fuzzy
+msgid "Cannot edit investment transactions in the context of this account."
+msgstr "do import do account?"
+
+#: views/kforecastview.cpp:164
+#, fuzzy
+msgid "Scheduled"
+msgstr "Plánovanie"
+
+#: views/kforecastview.cpp:169
+#, fuzzy
+msgid "History"
+msgstr "História ceny"
+
+#: views/kforecastview.cpp:296
+msgid "The balance of %2 is below the minimum balance %3 today."
+msgstr ""
+
+#: views/kforecastview.cpp:301 views/khomeview.cpp:1043
+msgid "The balance of %1 will drop below the minimum balance %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:318 views/khomeview.cpp:1059
+msgid "The balance of %1 is below %2 today."
+msgstr ""
+
+#: views/kforecastview.cpp:323 views/khomeview.cpp:1064
+msgid "The balance of %1 is above %2 today."
+msgstr ""
+
+#: views/kforecastview.cpp:330 views/khomeview.cpp:1070
+msgid "The balance of %1 will drop below %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:335 views/khomeview.cpp:1075
+msgid "The balance of %1 will raise above %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:348
+msgid "The account %1 is decreasing %2 per cycle."
+msgstr ""
+
+#: views/kforecastview.cpp:404 widgets/kmymoneyaccounttreeforecast.cpp:114
+#, c-format
+msgid "Min Bal %1"
+msgstr ""
+
+#: views/kforecastview.cpp:406 widgets/kmymoneyaccounttreeforecast.cpp:116
+#, fuzzy, c-format
+msgid "Min Date %1"
+msgstr "Načítavam šablónu %1"
+
+#: views/kforecastview.cpp:409 widgets/kmymoneyaccounttreeforecast.cpp:119
+#, c-format
+msgid "Max Bal %1"
+msgstr ""
+
+#: views/kforecastview.cpp:411 widgets/kmymoneyaccounttreeforecast.cpp:121
+#, c-format
+msgid "Max Date %1"
+msgstr ""
+
+#: views/kforecastview.cpp:413 widgets/kmymoneyaccounttreeforecast.cpp:123
+#, fuzzy
+msgid "Average"
+msgstr "Všetky stavy"
+
+#: views/kforecastview.cpp:649 views/khomeview.cpp:268 views/khomeview.cpp:275
+#, fuzzy
+msgid "Networth Forecast"
+msgstr "Čistá hodnota dnes"
+
+#: views/khomeview.cpp:203
+msgid "Your Financial Summary"
+msgstr "Váš finančný súhrn"
+
+#: views/khomeview.cpp:218
+msgid "Preferred Accounts"
+msgstr "Preferované účty"
+
+#: views/khomeview.cpp:225 views/khomeview.cpp:227
+msgid "Payment Accounts"
+msgstr "Platby účtov"
+
+#: views/khomeview.cpp:256
+msgid "Show KMyMoney welcome page"
+msgstr "Zobraziť uvítaciu stranu KMyMoney"
+
+#: views/khomeview.cpp:409
+msgid "Overdue payments"
+msgstr ""
+
+#: views/khomeview.cpp:424 views/khomeview.cpp:497 views/khomeview.cpp:531
+#, fuzzy
+msgid "Balance after"
+msgstr "Bilancia:"
+
+#: views/khomeview.cpp:482
+#, fuzzy
+msgid "Today's payments"
+msgstr "Dnešné platby"
+
+#: views/khomeview.cpp:516
+msgid "Future payments"
+msgstr "Budúce platby"
+
+#: views/khomeview.cpp:585
+#, fuzzy
+msgid "Less..."
+msgstr "Menej.,,"
+
+#: views/khomeview.cpp:587
+#, fuzzy
+msgid "More..."
+msgstr "Viac..."
+
+#: views/khomeview.cpp:622
+#, fuzzy
+msgid "Enter schedule"
+msgstr "Nový plán"
+
+#: views/khomeview.cpp:624
+#, fuzzy
+msgid "Skip schedule"
+msgstr "Načítavam.úlohy"
+
+#: views/khomeview.cpp:627
+#, fuzzy
+msgid "Edit schedule"
+msgstr "Upraviť plán účtenky"
+
+#: views/khomeview.cpp:631
+#, fuzzy
+msgid " (%1 payments)"
+msgstr "jeden úrok"
+
+#: views/khomeview.cpp:771
+#, fuzzy
+msgid "To Minimum Balance / Maximum Credit"
+msgstr "Koncový stav"
+
+#: views/khomeview.cpp:964
+#, fuzzy
+msgid "%1 Day Forecast"
+msgstr "Číslo z:"
+
+#: views/khomeview.cpp:973 widgets/kmymoneyaccounttreeforecast.cpp:67
+msgid "%1 days"
+msgstr ""
+
+#: views/khomeview.cpp:1039
+msgid "The balance of %1 is below the minimum balance %2 today."
+msgstr ""
+
+#: views/khomeview.cpp:1175
+msgid ""
+"Before KMyMoney can give you detailed information about your financial "
+"status, you need to create at least one account. Until then, KMyMoney shows "
+"the welcome page instead."
+msgstr ""
+
+#: views/khomeview.cpp:1258
+#, fuzzy
+msgid "Assets and Liabilities Summary"
+msgstr "Aktíva a pasíva"
+
+#: views/khomeview.cpp:1262
+#, fuzzy
+msgid "Asset Accounts"
+msgstr "Aktíva účtu"
+
+#: views/khomeview.cpp:1270
+#, fuzzy
+msgid "Liability Accounts"
+msgstr "Pasíva"
+
+#: views/khomeview.cpp:1348
+#, fuzzy
+msgid "Total Assets"
+msgstr "Celkom"
+
+#: views/khomeview.cpp:1354
+#, fuzzy
+msgid "Total Liabilities"
+msgstr "Aktíva a pasíva"
+
+#: views/khomeview.cpp:1399
+#, fuzzy
+msgid "Current Month Summary"
+msgstr "Aktuálny mesiac"
+
+#: views/khomeview.cpp:1403 views/khomeview.cpp:1440
+#, fuzzy
+msgid "Budgeted"
+msgstr "Rozpočty"
+
+#: views/khomeview.cpp:1433
+#, fuzzy
+msgid "Budget Overruns"
+msgstr "Nasledujúci rok"
+
+#: views/khomeview.cpp:1502
+msgid "No Budget Categories have been overrun"
+msgstr ""
+
+#: views/khomeview.cpp:1801
+msgid "Cash Flow Summary"
+msgstr ""
+
+#: views/khomeview.cpp:1808
+#, fuzzy
+msgid "Income and Expenses of Current Month"
+msgstr "Príjem a výdaj pre tento mesiac"
+
+#: views/khomeview.cpp:1816
+#, fuzzy
+msgid "Scheduled Income"
+msgstr "Názov časového plánu:"
+
+#: views/khomeview.cpp:1819
+#, fuzzy
+msgid "Expenses"
+msgstr "Výdaj"
+
+#: views/khomeview.cpp:1822
+#, fuzzy
+msgid "Scheduled Expenses"
+msgstr "Príjem a výdaj pre tento mesiac"
+
+#: views/khomeview.cpp:1850
+#, fuzzy
+msgid "Liquid Assets and Liabilities"
+msgstr "Aktíva a pasíva"
+
+#: views/khomeview.cpp:1855
+#, fuzzy
+msgid "Liquid Assets"
+msgstr "Aktíva"
+
+#: views/khomeview.cpp:1858
+#, fuzzy
+msgid "Transfers to Liquid Liabilities"
+msgstr "Aktíva a pasíva"
+
+#: views/khomeview.cpp:1861
+#, fuzzy
+msgid "Liquid Liabilities"
+msgstr "Pasíva"
+
+#: views/khomeview.cpp:1864
+#, fuzzy
+msgid "Other Transfers"
+msgstr "Prevody"
+
+#: views/khomeview.cpp:1908
+msgid "Cash Flow Status"
+msgstr ""
+
+#: views/khomeview.cpp:1914
+msgid "Expected Liquid Assets"
+msgstr ""
+
+#: views/khomeview.cpp:1917
+#, fuzzy
+msgid "Expected Liquid Liabilities"
+msgstr "Aktíva a pasíva"
+
+#: views/khomeview.cpp:1920
+#, fuzzy
+msgid "Expected Profit/Loss"
+msgstr "Celkový zisk:"
+
+#: plugins/ofximport/ofximporterplugin.cpp:64
+#, fuzzy
+msgid "OFX..."
+msgstr "QIF..."
+
+#: plugins/ofximport/ofximporterplugin.cpp:69
+#, fuzzy
+msgid "OFX import file selection"
+msgstr "Výstup filter"
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+#, fuzzy
+msgid ""
+"Unable to import %1 using the OFX importer plugin. This file is not the "
+"correct format."
+msgstr "do import modul súbor je."
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid "Incorrect format"
+msgstr "Nekorektný formát"
+
+#: plugins/ofximport/ofximporterplugin.cpp:122
+#, fuzzy
+msgid "Unable to parse file"
+msgstr "do"
+
+#: plugins/ofximport/ofximporterplugin.cpp:576
+#, fuzzy
+msgid "Online settings"
+msgstr "Pripojený Nastavenia"
+
+#: plugins/ofximport/ofximporterplugin.cpp:635
+#, fuzzy, c-format
+msgid "Error connecting to bank: %1"
+msgstr "Chyba do 1"
+
+#: plugins/ofximport/ofximporterplugin.cpp:646
+#, fuzzy
+msgid ""
+"Unable to import %1 using the OFX importer plugin. The plugin returned the "
+"following error:<p>%2"
+msgstr "do import modul modul chyby 3"
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+#, fuzzy
+msgid "Importing process terminated unexpectedly."
+msgstr "Importuje sa."
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+#, fuzzy
+msgid "Failed to import all statements."
+msgstr "Zlyhanie do import všetky."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "The HTTP request failed."
+msgstr "HTTP požiadavka zlyhala"
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "Failed"
+msgstr "Zlyhanie"
+
+#: plugins/ofximport/ofxpartner.cpp:410
+#, fuzzy
+msgid "Cannot open file %1 for writing"
+msgstr "Nepodarilo sa otvoriť súbor '%1' pre zápis"
+
+#: plugins/ofximport/ofxpartner.cpp:414
+#, fuzzy
+msgid "OFX setup error"
+msgstr "Chyba typu súboru"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+#, fuzzy
+msgid "Loading banklist"
+msgstr "Načítavam.účty"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid ""
+"Getting list of banks from http://moneycentral.msn.com/\n"
+"This may take some time depending on the available bandwidth."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:155
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:199
+msgid "Supports online statements<br>"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:157
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:201
+#, fuzzy
+msgid "Supports investments<br>"
+msgstr "Typ investície"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:159
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:203
+msgid "Supports bill payment (but not supported by KMyMoney yet)<br>"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:163
+msgid "Does not support online banking</p>"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:173
+msgid "Please choose a bank."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:179
+#, fuzzy
+msgid "Please fill all fields with values."
+msgstr "v pole."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:271
+msgid "No suitable accounts were found at this bank."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:283
+#, fuzzy
+msgid "Please choose an account"
+msgstr "a account."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:386
+msgid "Server message: %1\n"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+msgid "Your bank returned warnings when signing on"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+#, c-format
+msgid "WARNING %1"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, fuzzy
+msgid "Error signing onto your bank"
+msgstr "Chyba do 1"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, c-format
+msgid "ERROR %1"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingstatus.cpp:59
+msgid "Enabled & configured"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:1
+#, fuzzy
+msgid "OFX Direct Connect"
+msgstr "Pripojiť"
+
+#: plugins/ofximport/dialogs/rc.cpp:2
+msgid "Contacting bank..."
+msgstr "Kontaktovať banku"
+
+#: plugins/ofximport/dialogs/rc.cpp:4
+msgid "Online Banking Account Setup"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:5
+#, fuzzy
+msgid "Select Financial Institution"
+msgstr "Bilancia účtu podľa inštitúcie"
+
+#: plugins/ofximport/dialogs/rc.cpp:6
+msgid "Please select your financial institution from the list below..."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:7
+msgid "Automatic"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:8
+#, fuzzy
+msgid "Financial Institution"
+msgstr "Inštitúcia"
+
+#: plugins/ofximport/dialogs/rc.cpp:9
+#, fuzzy
+msgid "Manual"
+msgstr "Ručný vklad"
+
+#: plugins/ofximport/dialogs/rc.cpp:10
+msgid "Org"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:11
+#, fuzzy
+msgid "FID"
+msgstr "FIID"
+
+#: dialogs/settings/rc.cpp:120 plugins/ofximport/dialogs/rc.cpp:12
+#: widgets/rc.cpp:46
+#, fuzzy
+msgid "URL"
+msgstr "URL"
+
+#: plugins/ofximport/dialogs/rc.cpp:13
+#, fuzzy
+msgid "Enter Login Details"
+msgstr "Detaily prevodu"
+
+#: plugins/ofximport/dialogs/rc.cpp:14
+msgid ""
+"Please enter the username and password you use to log into this bank for "
+"online banking. Please note that many banks require a separate signup, and "
+"assign a separate PIN or password just for online banking from home."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:15
+#, fuzzy
+msgid "Connection Details"
+msgstr "Detaily prevodu"
+
+#: plugins/ofximport/dialogs/rc.cpp:16
+msgid "Username"
+msgstr "Užívateľské meno"
+
+#: plugins/ofximport/dialogs/rc.cpp:17 plugins/ofximport/dialogs/rc.cpp:36
+#, fuzzy
+msgid "Header Version"
+msgstr "Písmo hlavičky"
+
+#: plugins/ofximport/dialogs/rc.cpp:18 plugins/ofximport/dialogs/rc.cpp:37
+#, fuzzy
+msgid "Identify as"
+msgstr "Identifikácia"
+
+#: dialogs/rc.cpp:742 plugins/ofximport/dialogs/rc.cpp:19
+msgid "Password"
+msgstr "Heslo"
+
+#: plugins/ofximport/dialogs/rc.cpp:20
+#, fuzzy
+msgid "Select Account"
+msgstr "Zvoliť účet:"
+
+#: plugins/ofximport/dialogs/rc.cpp:21
+msgid ""
+"Please select the account from your financial institution from the list "
+"below which matches this account."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:24
+msgid "Bank"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:25
+#, fuzzy
+msgid "Branch"
+msgstr "Saldo"
+
+#: plugins/ofximport/dialogs/rc.cpp:26
+msgid "WizardPage"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:27
+msgid ""
+"Congratulations! You have successfully set up your bank for online banking "
+"via OFX."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:28
+msgid "Account Details"
+msgstr "Detaily účtu"
+
+#: plugins/ofximport/dialogs/rc.cpp:29 plugins/ofximport/dialogs/rc.cpp:31
+msgid "&lt;Not configured&gt;"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:30
+msgid "BANK/BROKER:"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:32
+#, fuzzy
+msgid "Unavailable"
+msgstr "Hodnota"
+
+#: plugins/ofximport/dialogs/rc.cpp:33
+msgid "ACCOUNT:"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:34
+msgid "STATUS:"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:35
+#, fuzzy
+msgid "OFX Details"
+msgstr "Detaily"
+
+#: plugins/ofximport/dialogs/rc.cpp:38
+#, fuzzy
+msgid "Start date of import"
+msgstr "Počiatočný dátum oznámenia"
+
+#: plugins/ofximport/dialogs/rc.cpp:39
+#, fuzzy
+msgid "To&day minus"
+msgstr "Dnešné platby"
+
+#: plugins/ofximport/dialogs/rc.cpp:40
+#, fuzzy
+msgid "days"
+msgstr "Posledných 30 dní"
+
+#: plugins/ofximport/dialogs/rc.cpp:41
+#, fuzzy
+msgid "Last &update"
+msgstr "Posledný rok"
+
+#: plugins/ofximport/dialogs/rc.cpp:42
+#, fuzzy
+msgid "Pi&ck date"
+msgstr "Dátum odoslania"
+
+#: plugins/ofximport/dialogs/rc.cpp:43
+msgid "Name is derived from"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:44
+msgid "P&AYEEID"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:45
+#, fuzzy
+msgid "&NAME"
+msgstr "AMEX"
+
+#: plugins/ofximport/dialogs/rc.cpp:46
+msgid "field if both are present in download"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:81
+msgid "Quicken Windows 2003"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:82
+msgid "Quicken Windows 2004"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:83
+msgid "Quicken Windows 2005"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:84
+msgid "Quicken Windows 2006"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:85
+msgid "Quicken Windows 2007"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:86
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:111
+msgid "Quicken Windows 2008"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:89
+msgid "MS-Money 2003"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:90
+msgid "MS-Money 2004"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:91
+msgid "MS-Money 2005"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:92
+msgid "MS-Money 2006"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:93
+msgid "MS-Money 2007"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:94
+msgid "MS-Money Plus"
+msgstr ""
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:91
+msgid "Report Configuration"
+msgstr "Konfigurácia výkazu"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:117
+#: dialogs/kreportconfigurationfilterdlg.cpp:135
+msgid "Rows/Columns"
+msgstr "Riadky/Stĺpce"
+
+#: dialogs/investtransactioneditor.cpp:203
+#: dialogs/investtransactioneditor.cpp:537
+#: dialogs/investtransactioneditor.cpp:579 dialogs/rc.cpp:103
+#: dialogs/rc.cpp:158 dialogs/rc.cpp:245 dialogs/rc.cpp:750 dialogs/rc.cpp:794
+#: widgets/kmymoneyaccountselector.cpp:182 widgets/register.cpp:64
+#: widgets/register.cpp:567 widgets/transaction.cpp:1500
+msgid "Security"
+msgstr "Bezpečnosť"
+
+#: dialogs/investtransactioneditor.cpp:211
+#, fuzzy
+msgid "Asset account"
+msgstr "Aktíva"
+
+#: dialogs/investtransactioneditor.cpp:1073
+#, fuzzy
+msgid "Price/Share"
+msgstr "Cena za podiely"
+
+#: dialogs/kmergetransactionsdlg.cpp:39
+#, fuzzy
+msgid "Merge Transactions"
+msgstr "Transakcie"
+
+#: dialogs/kmergetransactionsdlg.cpp:40
+#, fuzzy
+msgid "Are you sure you wish to merge these transactions?"
+msgstr "do odstrániť?"
+
+#: dialogs/kstartdlg.cpp:59
+msgid "Start Dialog"
+msgstr "Štartovacie okno"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Templates"
+msgstr "Šablóny"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Select templates"
+msgstr "Vybrať šablonu"
+
+#: dialogs/kstartdlg.cpp:80 dialogs/kstartdlg.cpp:119
+msgid "New KMyMoney document"
+msgstr "Nový KMyMoney dokument"
+
+#: dialogs/kstartdlg.cpp:90
+msgid "Open a KMyMoney document"
+msgstr "Otvoriť KMyMoney dokument"
+
+#: dialogs/kstartdlg.cpp:96
+#, fuzzy
+msgid ""
+"%1|KMyMoney files (*.kmy)\n"
+"%2|All files (*.*)"
+msgstr "n Všetky"
+
+#: dialogs/kstartdlg.cpp:102
+msgid "Recent Files"
+msgstr "Nedávne súbory"
+
+#: dialogs/kstartdlg.cpp:217
+msgid "Blank Document"
+msgstr "Prázdny dokument"
+
+#: dialogs/knewbudgetdlg.cpp:71
+msgid "Please specify a budget name"
+msgstr ""
+
+#: dialogs/kgncpricesourcedlg.cpp:48
+#, c-format
+msgid "Investment: %1"
+msgstr "Investícia: %1"
+
+#: dialogs/kgncpricesourcedlg.cpp:49
+#, c-format
+msgid "Quote source: %1"
+msgstr "Uviesť zdroj: %1"
+
+#: dialogs/kmymoneypricedlg.cpp:62 dialogs/ksecuritylisteditor.cpp:69
+msgid "Delete this entry"
+msgstr "Odstrániť túto položku"
+
+#: dialogs/ksecuritylisteditor.cpp:70
+#, fuzzy
+msgid "Remove this security item from the file"
+msgstr "Odstrániť položka z súbor"
+
+#: dialogs/ksecuritylisteditor.cpp:73
+msgid "&Add"
+msgstr "&Pridať"
+
+#: dialogs/kmymoneypricedlg.cpp:68 dialogs/ksecuritylisteditor.cpp:75
+msgid "Add a new entry"
+msgstr "Pridať novú položku"
+
+#: dialogs/ksecuritylisteditor.cpp:76
+msgid "Create a new security entry."
+msgstr "Vytvorenie novej položky.cenného papiera."
+
+#: dialogs/keditequityentrydlg.cpp:77 dialogs/kmymoneypricedlg.cpp:74
+#: dialogs/ksecuritylisteditor.cpp:81
+msgid "Modify the selected entry"
+msgstr "Upraviť vybranú položku"
+
+#: dialogs/ksecuritylisteditor.cpp:82
+#, fuzzy
+msgid "Change the security information of the selected entry."
+msgstr "Zmeniť informácie z položka."
+
+#: dialogs/kmymoneypricedlg.cpp:80 dialogs/ksecuritylisteditor.cpp:87
+msgid "Close the dialog"
+msgstr "Zavrieť toto okno"
+
+#: dialogs/kmymoneypricedlg.cpp:81 dialogs/ksecuritylisteditor.cpp:88
+#, fuzzy
+msgid "Use this to close the dialog and return to the application."
+msgstr "Použiť do a do aplikácia."
+
+#: dialogs/ksecuritylisteditor.cpp:184
+#, fuzzy
+msgid ""
+"Do you really want to remove the currency <b>%1</b> from the file?</"
+"p><i>Note: It is currently not supported to add currencies.</i>"
+msgstr "do<b></b> z súbor</p><i> Poznámka je do</i>"
+
+#: dialogs/ksecuritylisteditor.cpp:187
+#, fuzzy
+msgid "Do you really want to remove the %1 <b>%2</b> from the file?"
+msgstr "do<b></b> z súbor?"
+
+#: dialogs/ksecuritylisteditor.cpp:190
+msgid "Delete security"
+msgstr "Zmazať cenný papier"
+
+#: dialogs/kmymoneypricedlg.cpp:63
+msgid "Remove this price item from the file"
+msgstr "Odstrániť túto cenu aj zo súboru"
+
+#: dialogs/kmymoneypricedlg.cpp:66 dialogs/mymoneyqifprofileeditor.cpp:94
+msgid "&New"
+msgstr "&Nový"
+
+#: dialogs/kmymoneypricedlg.cpp:69
+msgid "Create a new price entry."
+msgstr "Vytvoriť novú položku ceny."
+
+#: dialogs/kmymoneypricedlg.cpp:75
+#, fuzzy
+msgid "Change the details of selected price information."
+msgstr "Zmeniť detaily v informáciách o vybranej cene."
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+#, fuzzy
+msgid "Do you really want to delete the selected price entry?"
+msgstr "do odstrániť položka?"
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+#, fuzzy
+msgid "Delete price information"
+msgstr "Delete informácie"
+
+#: dialogs/kchooseimportexportdlg.cpp:46
+#, fuzzy
+msgid ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"typ z import do A import typ je na dolu z a je položka z výber box n import "
+"typ OK."
+
+#: dialogs/kchooseimportexportdlg.cpp:50 dialogs/rc.cpp:22
+msgid "Choose import type:"
+msgstr "Vybrať typ importu:"
+
+#: dialogs/kchooseimportexportdlg.cpp:51 dialogs/rc.cpp:20
+msgid "Choose Import Type Dialog"
+msgstr "Dialóg výberu typu importu"
+
+#: dialogs/kchooseimportexportdlg.cpp:53
+#, fuzzy
+msgid ""
+"Please choose the type of export you wish to perform. A simple explanation\n"
+"of the export type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an export type please press the OK button."
+msgstr "typ z do A typ je na dolu z a je položka z výber box n typ OK."
+
+#: dialogs/kchooseimportexportdlg.cpp:57
+msgid "Choose export type:"
+msgstr "Vybrať typ exportu:"
+
+#: dialogs/kchooseimportexportdlg.cpp:58
+msgid "Choose Export Type Dialog"
+msgstr "Dialóg výberu typu exportu"
+
+#: dialogs/kchooseimportexportdlg.cpp:78
+#, fuzzy
+msgid ""
+"QIF files are created by the popular accounting program Quicken.\n"
+"Another dialog will appear, if you choose this type, asking for further\n"
+"information relevant to the Quicken format."
+msgstr "QIF program typ pre do."
+
+#: dialogs/kchooseimportexportdlg.cpp:82
+#, fuzzy
+msgid ""
+"The CSV type uses a comma delimeted text file that can be used by\n"
+"most popular spreadsheet programs available for Linux and other operating\n"
+"systems."
+msgstr "CSV typ a text súbor programy pre Linux a."
+
+#: dialogs/kequitypriceupdatedlg.cpp:222
+#, fuzzy
+msgid "%1 units in %2"
+msgstr "v 2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+#, fuzzy
+msgid ""
+"Failed to retrieve an exchange rate for %1 from %2. It will be skipped this "
+"time."
+msgstr "Zlyhanie do a pre z podobný do zakázať pripojený pre?"
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+#, fuzzy
+msgid "Price Update Failed"
+msgstr "Aktualizácia ceny zlyhala"
+
+#: dialogs/kequitypriceupdatedlg.cpp:427
+msgid ""
+"Failed to retrieve a quote for %1 from %2. Press <b>No</b> to remove the "
+"online price source from this security permanently, <b>Yes</b> to continue "
+"updating this security during future price updates or <b>Cancel</b> to stop "
+"the current update operation."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:427 dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Price Update Failed"
+msgstr "Aktualizácia ceny zlyhala"
+
+#: dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Cannot update security <b>%1</b>: %2"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:528
+#, fuzzy
+msgid "Price for %1 updated (id %2)"
+msgstr "Cena pre %1 aktualizovaná"
+
+#: dialogs/kequitypriceupdatedlg.cpp:534
+#, fuzzy
+msgid "Received an invalid price for %1, unable to update."
+msgstr "pre do."
+
+#: dialogs/kequitypriceupdatedlg.cpp:554
+#, fuzzy
+msgid ""
+"Received a price for %1 (id %2), but this symbol is not on the list! "
+"Aborting entire update."
+msgstr "a pre je zapnuté zoznam."
+
+#: dialogs/transactioneditor.cpp:222
+#, fuzzy
+msgid ""
+"The number <b>%1</b> has already been used in account <b>%2</b>. Do you want "
+"to replace it with the next available number?"
+msgstr "číslo<b></b> v account<b></b> do číslo?"
+
+#: dialogs/transactioneditor.cpp:222
+msgid "Duplicate number"
+msgstr "Zdvojené číslo"
+
+#: dialogs/transactioneditor.cpp:303
+#, fuzzy
+msgid ""
+"This transaction has more than two splits and is based on a different "
+"currency (%1). Using this account to modify the transaction is currently not "
+"very well supported by KMyMoney and may result in false results."
+msgstr "viac dva a je zapnuté a account do je a v nepravda."
+
+#: dialogs/transactioneditor.cpp:305
+#, fuzzy
+msgid ""
+"KMyMoney was not able to find a more appropriate account to edit this "
+"transaction. Nevertheless, you are allowed to modify the transaction. If you "
+"don't want to edit this transaction, please cancel from editing next."
+msgstr "do Hľadať súbory a viac account do úprava do do úprava z."
+
+#: dialogs/transactioneditor.cpp:307
+#, fuzzy
+msgid ""
+"Using e.g. <b>%1</b> to edit this transaction is a better choice. "
+"Nevertheless, you are allowed to modify the transaction. If you want to use "
+"the suggested account instead, please cancel from editing next and change "
+"the view to the suggested account."
+msgstr "e g<b></b> do úprava je a výber do do account z a do account."
+
+#: dialogs/transactioneditor.cpp:410
+#, fuzzy
+msgid ""
+"This transaction has more than two splits and is originally based on a "
+"different currency (%1). Using this account to modify the transaction may "
+"result in rounding errors. Do you want to continue?"
+msgstr "viac dva a je zapnuté a account do je a v nepravda."
+
+#: dialogs/transactioneditor.cpp:412
+#, fuzzy
+msgid ""
+"At least one of the selected transactions has more than two splits and is "
+"originally based on a different currency (%1). Using this account to modify "
+"the transactions may result in rounding errors. Do you want to continue?"
+msgstr "viac dva a je zapnuté a account do je a v nepravda."
+
+#: dialogs/transactioneditor.cpp:557
+#, fuzzy
+msgid "Storing transactions"
+msgstr "Pridanie prevodov"
+
+#: dialogs/transactioneditor.cpp:603 widgets/kmymoneybriefschedule.cpp:65
+msgid "&Enter"
+msgstr "Vložiť"
+
+#: dialogs/transactioneditor.cpp:606
+#, fuzzy
+msgid "Use this to enter the transaction into the ledger."
+msgstr "Nahrávanie"
+
+#: dialogs/transactioneditor.cpp:607
+#, fuzzy
+msgid "&Schedule"
+msgstr "Plánovanie"
+
+#: dialogs/transactioneditor.cpp:609
+#, fuzzy
+msgid "Accepts the entered data and stores it as schedule"
+msgstr "a"
+
+#: dialogs/transactioneditor.cpp:610
+#, fuzzy
+msgid "Use this to schedule the transaction for later entry into the ledger."
+msgstr "Použiť do všetky a import súbor."
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"The transaction you are about to enter has a post date in the future.<br/"
+"><br/>Do you want to enter it in the ledger or add it to the schedules?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"_: Dialog caption for 'Enter or schedule' dialog\n"
+"Enter or schedule?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:671
+msgid ""
+"The balance of account <b>%1</b> dropped below the warning balance of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:677
+msgid ""
+"The balance of account <b>%1</b> dropped below the minimum balance of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:683
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit warning "
+"limit of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:689
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit limit of %"
+"2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:740
+#, fuzzy
+msgid "Payer/Receiver"
+msgstr "Príjemca"
+
+#: dialogs/transactioneditor.cpp:748
+msgid "Category/Account"
+msgstr "Kategória/účet"
+
+#: dialogs/transactioneditor.cpp:980 dialogs/transactioneditor.cpp:1016
+#: dialogs/transactioneditor.cpp:1378 dialogs/transactioneditor.cpp:1399
+#: dialogs/transactioneditor.cpp:1422 dialogs/transactioneditor.cpp:1443
+#: dialogs/transactioneditor.cpp:1505 dialogs/transactioneditor.cpp:1509
+#: widgets/transaction.cpp:902
+msgid "Transfer from"
+msgstr "Prevod z"
+
+#: dialogs/transactioneditor.cpp:982 dialogs/transactioneditor.cpp:1018
+#: dialogs/transactioneditor.cpp:1401 dialogs/transactioneditor.cpp:1445
+#: dialogs/transactioneditor.cpp:1506 widgets/transaction.cpp:902
+msgid "Transfer to"
+msgstr "Prevod do"
+
+#: dialogs/transactioneditor.cpp:1259
+#, fuzzy
+msgid "Select autofill transaction"
+msgstr "Odstrániť transakciu"
+
+#: dialogs/transactionmatcher.cpp:77
+msgid "First transaction does not match requirement for matching"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:79
+msgid "Second transaction does not match requirement for matching"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:83 dialogs/transactionmatcher.cpp:133
+msgid "Splits for %1 have conflicting values (%2,%3)"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:96 dialogs/transactionmatcher.cpp:149
+msgid ""
+"Both of these transactions have been imported into %1. Therefore they "
+"cannot be matched. Matching works with one imported transaction and one non-"
+"imported transaction."
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:101 dialogs/transactionmatcher.cpp:156
+#, fuzzy
+msgid "Unable to match all splits (%1)"
+msgstr "do"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:65
+msgid "Account and transfer account are the same. Please change one."
+msgstr "Oba účty sú totožné. Prosím zmeňte jeden z nich."
+
+#: dialogs/kconfirmmanualenterdlg.cpp:84
+msgid "Payee changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:92
+#: dialogs/kconfirmmanualenterdlg.cpp:100
+msgid "Account changed. Old: \"%1\", New: \"%2\""
+msgstr "Zmena účtu. Starý: \"%1\", Nový: \"%2\""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:107
+msgid "Account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:115
+#, fuzzy
+msgid ""
+"Transfer account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</"
+"b><p>"
+msgstr "Zmena prevodu učtu. Starý: \"%1\", Nový: \"%2\""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:143
+msgid ""
+"Category changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:151
+#: dialogs/kconfirmmanualenterdlg.cpp:153
+msgid "empty"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:157
+msgid "Memo changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:166
+msgid "Amount changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:175
+msgid ""
+"Reconciliation flag changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%"
+"2</b><p>"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:182
+msgid "Fatal error in determining data: "
+msgstr "Kritická chyba v určujúcich dátach:"
+
+#: dialogs/kselectdatabasedlg.cpp:56
+msgid ""
+"There are no Qt SQL drivers installed in your system.\n"
+"Please consult documentation for your distro, or visit the Qt web site (www."
+"trolltech.com) and search for SQL drivers."
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:100
+msgid "Qt SQL driver %1 is no longer installed on your system"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:107
+msgid "Qt SQL driver %1 is not suported"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:164
+#, fuzzy
+msgid "SQLite files (*.sql);; All files (*.*)"
+msgstr "n Všetky"
+
+#: dialogs/kselectdatabasedlg.cpp:167
+#, fuzzy
+msgid "Select SQLite file"
+msgstr "Vyberte štýl"
+
+#: dialogs/kselectdatabasedlg.cpp:188
+#, fuzzy
+msgid "All files (*.*)"
+msgstr "Všetky dátumy"
+
+#: dialogs/kselectdatabasedlg.cpp:191
+#, fuzzy
+msgid "Select output file"
+msgstr "Vyberte meno súboru"
+
+#: dialogs/investactivities.cpp:168
+#, fuzzy
+msgid "%1 (Brokerage)"
+msgstr "(sprostredkovateľský)"
+
+#: dialogs/investactivities.cpp:200 dialogs/investactivities.cpp:288
+#: dialogs/investactivities.cpp:425 widgets/transaction.cpp:1548
+#, fuzzy
+msgid "Price/share"
+msgstr "Cena za podiely"
+
+#: dialogs/investactivities.cpp:586
+msgid "Ratio 1/"
+msgstr ""
+
+#: dialogs/kenterscheduledlg.cpp:201
+#, fuzzy
+msgid ""
+"<p>Please check that all the details in the following dialog are correct and "
+"press OK.</p><p>Editable data can be changed and can either be applied to "
+"just this occurence or for all subsequent occurences for this schedule. "
+"(You will be asked what you intend after pressing OK in the following dialog)"
+"</p>"
+msgstr ""
+"<b><p> kontrola všetky a OK</p><p> Upraviteľná zmenené a do alebo pre všetky "
+"pre Vy zapnuté OK</p></b>"
+
+#: dialogs/kenterscheduledlg.cpp:201
+#, fuzzy
+msgid "Enter scheduled transaction"
+msgstr "Zadať plánovanú transakciu"
+
+#: dialogs/kcsvprogressdlg.cpp:65 dialogs/kexportdlg.cpp:65
+msgid "&Export"
+msgstr "&Export"
+
+#: dialogs/kexportdlg.cpp:67 dialogs/kimportdlg.cpp:68
+msgid "Start operation"
+msgstr "Začať operáciu"
+
+#: dialogs/kexportdlg.cpp:68
+#, fuzzy
+msgid "Use this to start the export operation"
+msgstr "Použiť do štart"
+
+#: dialogs/kexportdlg.cpp:71 dialogs/kimportdlg.cpp:72
+msgid "&Browse..."
+msgstr "&Prechádzať..."
+
+#: dialogs/kexportdlg.cpp:73 dialogs/kimportdlg.cpp:74
+msgid "Select filename"
+msgstr "Vyberte meno súboru"
+
+#: dialogs/kexportdlg.cpp:74 dialogs/kimportdlg.cpp:75
+#, fuzzy
+msgid "Use this to select a filename to export to"
+msgstr "Použiť do a meno súboru do do"
+
+#: dialogs/kexportdlg.cpp:77 dialogs/kimportdlg.cpp:78
+#: dialogs/settings/ksettingsonlinequotes.cpp:64
+#: widgets/kmymoneyonlinequoteconfig.cpp:64
+msgid "&New..."
+msgstr "&Nový..."
+
+#: dialogs/kexportdlg.cpp:79 dialogs/kimportdlg.cpp:80
+#: dialogs/mymoneyqifprofileeditor.cpp:96
+msgid "Create a new profile"
+msgstr "Vytvoriť nový profil"
+
+#: dialogs/kexportdlg.cpp:80 dialogs/kimportdlg.cpp:81
+#, fuzzy
+msgid "Use this to open the profile editor"
+msgstr "Použiť do profile editor"
+
+#: dialogs/keditloanwizard.cpp:56
+#, fuzzy
+msgid "Edit loan wizard"
+msgstr "Upraviť"
+
+#: dialogs/keditloanwizard.cpp:58
+#, fuzzy
+msgid ""
+"Please enter the date from which on the following changes will be effective. "
+"The date entered must be later than the opening date of this account (%1), "
+"but must not be in the future. The default will be today."
+msgstr ""
+"dátum z zapnuté dátum otvára sa dátum z account v budúci čas štandardné dnes."
+
+#: dialogs/keditloanwizard.cpp:76
+#, fuzzy
+msgid ""
+"Note: you will not be able to modify this account today, because the opening "
+"date \"%1\" is in the future. Please revisit this dialog when the time has "
+"come."
+msgstr "Poznámka do account dnes otvára sa dátum je v budúci čas čas."
+
+#: dialogs/keditloanwizard.cpp:244
+#, fuzzy
+msgid ""
+"Your previous selection was \"%1\". If you select another option, KMyMoney "
+"will dismiss the changes you have just entered. Do you wish to proceed?"
+msgstr "do?"
+
+#: dialogs/kcategoryreassigndlg.cpp:81
+msgid ""
+"At least one transaction/schedule still references the category <b>%1</b>. "
+"However, at least one category with the same currency must exist so that the "
+"transactions/schedules can be reassigned."
+msgstr ""
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid ""
+"This dialog does not allow to create new categories. Please pick a category "
+"from the list."
+msgstr ""
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+#, fuzzy
+msgid "Category creation"
+msgstr "Výber kategórie"
+
+#: dialogs/kbackupdlg.cpp:61
+msgid "C&hoose..."
+msgstr "&Vybrať..."
+
+#: dialogs/kbackupdlg.cpp:63
+msgid "Select mount point"
+msgstr "Vybrať prípojný bod"
+
+#: dialogs/kbackupdlg.cpp:64
+#, fuzzy
+msgid "Use this to browse to the mount point."
+msgstr "Použiť do do pripojiť bod."
+
+#: dialogs/keditscheduledlg.cpp:293
+#, fuzzy
+msgid "Next due date"
+msgstr "Ďalší dátum splatnosti:"
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid ""
+"You have turned on the GPG encryption support. This means, that new files "
+"will be stored encrypted. Existing files will not be encrypted "
+"automatically. To achieve encryption of existing files, please use the "
+"<b>File/Save as...</b> feature and store the file under a different name. "
+"Once confident with the result, feel free to delete the old file and rename "
+"the encrypted one to the old name."
+msgstr ""
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+#, fuzzy
+msgid "GPG encryption activated"
+msgstr "Použiť GPG šifrovanie"
+
+#: dialogs/settings/ksettingshome.cpp:51
+msgid "&Up"
+msgstr "&Nahor"
+
+#: dialogs/settings/ksettingshome.cpp:53
+msgid "Move selected item up"
+msgstr "Presunúť vybranú položku nahor"
+
+#: dialogs/settings/ksettingshome.cpp:54
+#, fuzzy
+msgid "Use this to move the selected item up by one position in the list."
+msgstr "Použiť do položka jeden v zoznam."
+
+#: dialogs/settings/ksettingshome.cpp:55
+msgid "&Down"
+msgstr "&Dolu"
+
+#: dialogs/settings/ksettingshome.cpp:57
+#, fuzzy
+msgid "Move selected item down"
+msgstr "Presunúť vybranú položku dole"
+
+#: dialogs/settings/ksettingshome.cpp:58
+#, fuzzy
+msgid "Use this to move the selected item down by one position in the list."
+msgstr "Použiť do položka jeden v zoznam."
+
+#: dialogs/settings/rc.cpp:1
+#, fuzzy
+msgid "Color settings"
+msgstr "Nastavenia farieb"
+
+#: dialogs/settings/rc.cpp:2
+msgid "Foreground"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:3
+#, fuzzy
+msgid "Text colors"
+msgstr "Použiť systémové písmo"
+
+#: dialogs/settings/rc.cpp:4
+#, fuzzy
+msgid "Grid color"
+msgstr "Zoznam:"
+
+#: dialogs/settings/rc.cpp:5
+#, fuzzy
+msgid "Erronous transaction"
+msgstr "Ľubovoľné prevody"
+
+#: dialogs/settings/rc.cpp:6
+#, fuzzy
+msgid "Value with missing conversion rate"
+msgstr "Hodnota:"
+
+#: dialogs/settings/rc.cpp:7
+#, fuzzy
+msgid "Negative value"
+msgstr "Čistá hodnota"
+
+#: dialogs/settings/rc.cpp:8
+#, fuzzy
+msgid "Background"
+msgstr "Zálohovať"
+
+#: dialogs/settings/rc.cpp:10
+#, fuzzy
+msgid "List background colors"
+msgstr "Farba pozadia zoznamu:"
+
+#: dialogs/settings/rc.cpp:11
+#, fuzzy
+msgid "Normal"
+msgstr "Bez manuálu"
+
+#: dialogs/settings/rc.cpp:12
+#, fuzzy
+msgid "Alternate"
+msgstr "Všetky stavy"
+
+#: dialogs/settings/rc.cpp:13
+#, fuzzy
+msgid "Special background colors"
+msgstr "Farba pozadia zoznamu:"
+
+#: dialogs/settings/rc.cpp:14
+msgid "Ledger group separator"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:15
+msgid "Required field"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:16
+#, fuzzy
+msgid "Imported transaction"
+msgstr "Importované prevody"
+
+#: dialogs/settings/rc.cpp:17
+#, fuzzy
+msgid "Matched transaction"
+msgstr "Hľadať prevody"
+
+#: dialogs/settings/rc.cpp:18
+msgid "Font settings"
+msgstr "Nastavenie písma"
+
+#: dialogs/settings/rc.cpp:19
+msgid "Use system fonts"
+msgstr "Použiť systémové písmo"
+
+#: dialogs/settings/rc.cpp:20
+#, fuzzy
+msgid "Individual font settings"
+msgstr "Neplatné nastavenie"
+
+#: dialogs/settings/rc.cpp:24
+msgid "Number of Days of Account Cycle:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:26
+#, fuzzy
+msgid "Number of Days to Forecast:"
+msgstr "Číslo z:"
+
+#: dialogs/settings/rc.cpp:27
+#, fuzzy
+msgid "Forecast Method"
+msgstr "Spôsob platby"
+
+#: dialogs/settings/rc.cpp:28
+#, fuzzy
+msgid "Scheduled and Future Transactions"
+msgstr "Plánované prevody"
+
+#: dialogs/settings/rc.cpp:29
+#, fuzzy
+msgid "History-based"
+msgstr "Nastavenia registra"
+
+#: dialogs/settings/rc.cpp:30
+#, fuzzy
+msgid "History-based settings"
+msgstr "Nastavenia registra"
+
+#: dialogs/settings/rc.cpp:31
+msgid "Number of Cycles to use in Forecast:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:36
+msgid "General Settings"
+msgstr "Všeobecné nastavenia"
+
+#: dialogs/settings/rc.cpp:37
+msgid "Global"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:38
+msgid "Startup page options"
+msgstr "Voľby štartovacej strany"
+
+#: dialogs/settings/rc.cpp:39
+#, fuzzy
+msgid "Start with homepage"
+msgstr "Štart strana"
+
+#: dialogs/settings/rc.cpp:40
+#, fuzzy
+msgid "Start with last selected view"
+msgstr "Štart strana"
+
+#: dialogs/settings/rc.cpp:41
+#, fuzzy
+msgid "Precision settings"
+msgstr "Nastavenia GPG šifrovania"
+
+#: dialogs/settings/rc.cpp:42
+#, fuzzy
+msgid "Price precision"
+msgstr "Presná cena: "
+
+#: dialogs/settings/rc.cpp:43
+msgid "digits"
+msgstr "číslice"
+
+#: dialogs/settings/rc.cpp:44
+#, fuzzy
+msgid "Autosave options"
+msgstr "Nastavenia účtu"
+
+#: dialogs/settings/rc.cpp:45
+msgid "Autosave periodically"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:46
+msgid "minutes"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:47
+msgid "Fiscal Year"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:48
+#, fuzzy
+msgid "Your fiscal year starts on"
+msgstr "Aktuálny rok"
+
+#: dialogs/settings/rc.cpp:49
+msgid "January"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:50
+msgid "February"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:51
+#, fuzzy
+msgid "March"
+msgstr "Hľadať"
+
+#: dialogs/settings/rc.cpp:52
+msgid "April"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:53
+msgid "May"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:54
+msgid "June"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:55
+msgid "July"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:56
+msgid "August"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:57
+msgid "September"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:58
+#, fuzzy
+msgid "October"
+msgstr "Iné"
+
+#: dialogs/settings/rc.cpp:59
+#, fuzzy
+msgid "November"
+msgstr "Číslo"
+
+#: dialogs/settings/rc.cpp:60
+#, fuzzy
+msgid "December"
+msgstr "Zníženie"
+
+#: dialogs/settings/rc.cpp:61
+msgid "Views"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:62
+msgid "Synchronize account selection of ledger and investment view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:63
+msgid ""
+"Check the views you want to enable, uncheck those you want to hide, because "
+"you don't need the functionality."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:64
+msgid "Icon size of navigation bar"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:65
+msgid "Micro (16px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:66
+msgid "Small (32px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:67
+msgid "Normal (48px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:68
+msgid "Large (64px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:69
+msgid "Show title bar on each page"
+msgstr ""
+
+#: dialogs/rc.cpp:835 dialogs/settings/rc.cpp:70
+msgid "Filter"
+msgstr "Filter"
+
+#: dialogs/settings/rc.cpp:71
+#, fuzzy
+msgid "Accounts / Categories"
+msgstr "Kategórie hore"
+
+#: dialogs/settings/rc.cpp:72
+#, fuzzy
+msgid "Don't show unused categories"
+msgstr "nepoužité"
+
+#: dialogs/settings/rc.cpp:73
+msgid ""
+"This option hides all categories in the categories view that are not used in "
+"at least a single transaction. They are still shown in the category "
+"selection lists."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:74
+#, fuzzy
+msgid "Don't show closed accounts"
+msgstr "nepoužité"
+
+#: dialogs/settings/rc.cpp:75
+msgid ""
+"This option hides all accounts that have been closed by the user in views "
+"and selection lists.\n"
+"\n"
+"You can use <b>View/Show all accounts</b> to temporarily show hidden "
+"accounts in the views."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:76
+#, fuzzy
+msgid "Show equity accounts"
+msgstr "Upraviť Účet"
+
+#: dialogs/rc.cpp:332 dialogs/settings/rc.cpp:77 widgets/rc.cpp:160
+msgid "Schedules"
+msgstr "Rozvrhy"
+
+#: dialogs/settings/rc.cpp:78
+#, fuzzy
+msgid "Don't show finished schedules"
+msgstr "nepoužité"
+
+#: dialogs/settings/rc.cpp:79
+msgid "This option hides all finished schedules in the schedules view."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:81
+#, fuzzy
+msgid "Don't show transactions prior to"
+msgstr "Skryť"
+
+#: dialogs/settings/rc.cpp:82
+#, fuzzy
+msgid "Don't show reconciled transactions"
+msgstr "Skryť"
+
+#: dialogs/settings/rc.cpp:83
+msgid "This option hides all reconciled transactions in the ledger view."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:84 widgets/rc.cpp:22
+msgid "GPG encryption settings"
+msgstr "Nastavenia GPG šifrovania"
+
+#: dialogs/settings/rc.cpp:85
+#, fuzzy
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Access to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>additional recovery encryption</i> is only accessible, if the "
+"necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id "
+"0x8AFDDC8E is found in your keyring."
+msgstr ""
+"strana do množina pre súbor z<b></b> zapnuté<b> GPG</b><p> do nastavenie je "
+"deaktivované<b> GPG</b> zapnuté systém<b> GPG</b> je funkcia pre "
+"používateľská<p><i> šifrovanie</i> skupina je kľúč pre<b>kmymoney-"
+"recover@users.sourceforge.net</b> je."
+
+#: dialogs/settings/rc.cpp:86 widgets/rc.cpp:24
+msgid "Use GPG encryption"
+msgstr "Použiť GPG šifrovanie"
+
+#: dialogs/settings/rc.cpp:87
+#, fuzzy
+msgid "GPG encryption"
+msgstr "Použiť GPG šifrovanie"
+
+#: dialogs/settings/rc.cpp:88
+#, fuzzy
+msgid "Your key"
+msgstr "Vaše meno:"
+
+#: dialogs/settings/rc.cpp:89
+msgid ""
+"This combo box lists all the secret keys you have in your keyring. Select "
+"the one you want to use for encryption when saving to a file."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:90
+#, fuzzy
+msgid "Additonal keys"
+msgstr "Ďalšie príspevky"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:50 dialogs/settings/rc.cpp:91
+#, fuzzy
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading 0x."
+msgstr "Zadať z kľúč do pre šifrovanie e Adresa alebo kľúč z kľúč<i></i>."
+
+#: dialogs/settings/rc.cpp:92 widgets/rc.cpp:28
+#, fuzzy
+msgid ""
+"This symbol denotes, if the key for the given user id has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr "kľúč pre používateľská v je."
+
+#: dialogs/kgpgkeyselectiondlg.cpp:61 dialogs/settings/rc.cpp:93
+msgid "Keys for all of the above user ids found"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:94 widgets/rc.cpp:31
+#, fuzzy
+msgid ""
+"This symbol denotes, if the KMyMoney recovery key has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr "kľúč v je."
+
+#: dialogs/settings/rc.cpp:95
+msgid "Recover Key available in keyring"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:96
+#, fuzzy
+msgid "Also encrypt with KMyMoney's recover key"
+msgstr "kľúč"
+
+#: dialogs/settings/rc.cpp:97
+#, fuzzy
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out.."
+msgstr ""
+"Vy do kľúč Len v z private kľúč do dozadu<p> n je pre kľúč a a v a do "
+"odpoveď a menej z."
+
+#: dialogs/settings/rc.cpp:98
+#, fuzzy
+msgid "Homepage Settings"
+msgstr "Nastavenia domovskej stránky"
+
+#: dialogs/settings/rc.cpp:99
+#, fuzzy
+msgid "Up"
+msgstr "&Nahor"
+
+#: dialogs/settings/rc.cpp:100
+#, fuzzy
+msgid "Down"
+msgstr "&Dolu"
+
+#: dialogs/settings/rc.cpp:101
+#, fuzzy
+msgid ""
+"Selected entries are shown on the home page of the application.<p>\n"
+"Use the buttons and checkboxes to customize the layout of the home page."
+msgstr "Vybrané zapnuté strana z aplikácia n a do z strana."
+
+#: dialogs/settings/rc.cpp:102
+msgid "Homepage/Summary page font scaling"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:103
+msgid "Percentage of default font size:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:104
+msgid ""
+"Remember font size when leaving the program if manually changed with mouse-"
+"wheel"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:105
+#, fuzzy
+msgid "Information display"
+msgstr "Informácie o platbách"
+
+#: dialogs/settings/rc.cpp:106
+#, fuzzy
+msgid "Show Account Limit Information"
+msgstr "Nastavenia účtu"
+
+#: dialogs/settings/rc.cpp:110 widgets/rc.cpp:47
+#, fuzzy
+msgid ""
+"<i>Enter regular expressions which can be used to parse the data returned "
+"from the URL entered above. The symbol, price, and date must be found in "
+"the quote data to be usable. You may also try the KMyMoney user's "
+"mailinglist at <a href=\"mailto:kmymoney2-user@lists.sourceforge.net"
+"\">kmymoney2-user@lists.sourceforge.net</a> to find what settings work for "
+"other users in your country.</i>"
+msgstr ""
+"<i> Zadať previdelný do z URL a dátum v do Vy používateľská s na<a href="
+"\"mailto:kmymoney2-user@lists.sourceforge.net\">kmymoney2-user@lists."
+"sourceforge.net</a> do Hľadať súbory nastavenie pre v</i>"
+
+#: dialogs/settings/rc.cpp:113 widgets/rc.cpp:38
+#, fuzzy
+msgid "Regular Expression to extract the symbol from the downloaded data"
+msgstr "Normálne Výraz do z"
+
+#: dialogs/settings/rc.cpp:114 widgets/rc.cpp:39
+#, fuzzy
+msgid "Regular Expression to extract the price from the downloaded data"
+msgstr "Normálne Výraz do z"
+
+#: dialogs/settings/rc.cpp:115 widgets/rc.cpp:41
+#, fuzzy
+msgid "URL to be used to download the quote"
+msgstr "URL do do"
+
+#: dialogs/settings/rc.cpp:116 widgets/rc.cpp:42
+#, fuzzy
+msgid ""
+"Enter the URL from which stock quotes will be fetched. <b>%1</b> will be "
+"replaced with the symbol for the security being quoted. For currency "
+"conversions, <b>%2</b> will be replaced with the currency to be quoted and "
+"<b>%1</b> with the currency the quote is based on."
+msgstr "Zadať URL z<b></b> pre Pre<b></b> do a<b></b> je zapnuté."
+
+#: dialogs/settings/rc.cpp:118 dialogs/settings/rc.cpp:121 widgets/rc.cpp:40
+#: widgets/rc.cpp:44
+#, fuzzy
+msgid "Regular Expression to extract the date from the downloaded data"
+msgstr "Normálne Výraz do dátum z"
+
+#: dialogs/rc.cpp:807 dialogs/settings/rc.cpp:119 widgets/rc.cpp:45
+msgid "Date Format"
+msgstr "Formát dátumu"
+
+#: dialogs/settings/rc.cpp:122
+msgid "Skip HTML stripping"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:123
+msgid ""
+"<p>For easier processing of the data returned by the online source, KMyMoney "
+"usually strips unused parts before it is parsed with the regular "
+"expressions. If matching of the fields relies on those items, then use this "
+"option to turn stripping off.</p>\n"
+"\n"
+"<p>The following items are usually removed by stripping:\n"
+"\n"
+"<ul>\n"
+"<li>HTML tags such as <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded characters such as <b>&amp;nbsp;</b></li>\n"
+"<li>duplicate whitespace</li>\n"
+"</ul>\n"
+"</p>"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:127
+msgid "Register settings"
+msgstr "Nastavenia registra"
+
+#: dialogs/settings/rc.cpp:128
+#, fuzzy
+msgid "Display"
+msgstr "Denne"
+
+#: dialogs/settings/rc.cpp:131
+msgid ""
+"Using the ledger lens shows the details for the transaction that has focus "
+"in the ledger. Usually, when using the transaction form, only a one line "
+"summary is displayed for each transaction as the details are shown in the "
+"form."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:133
+#, fuzzy
+msgid "Always show a No. field"
+msgstr "Vždy a Nie pole v"
+
+#: dialogs/settings/rc.cpp:134
+#, fuzzy
+msgid "Show group header between transactions"
+msgstr "Vytvoriť a nové account"
+
+#: dialogs/settings/rc.cpp:135
+msgid ""
+"Draws a larger header above each group of transaction. The grouping depends "
+"on the current sort order."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:136
+msgid "Show header for the previous and current fiscal year"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:137
+msgid "Sorting"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:138
+msgid "Normal view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:139
+#, fuzzy
+msgid "Reconciliation view"
+msgstr "Sprievodca kontrolou dát"
+
+#: dialogs/settings/rc.cpp:140
+#, fuzzy
+msgid "Search view"
+msgstr "Hľadať"
+
+#: dialogs/settings/rc.cpp:141
+msgid ""
+"Use the <i>left</i> and <i>right</i> buttons to add and remove sort options. "
+"Use the <i>up</i> and <i>down</i> buttons to modify the sort order. Double-"
+"Click a selected entry to toggle the sort order between <i>ascending</i> and "
+"<i>descending</i>."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:142
+#, fuzzy
+msgid "Data entry"
+msgstr "Množstvo"
+
+#: dialogs/settings/rc.cpp:146
+msgid "Use Enter to move between fields"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:147
+msgid "Match names from start"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:148
+msgid ""
+"Mark this option, if you always want to match names e.g. for payees from the "
+"start. If unset, any substring is matched."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:149
+#, fuzzy
+msgid "Default reconciliation state"
+msgstr "Odložiť vysporiadanie"
+
+#: dialogs/rc.cpp:227 dialogs/settings/rc.cpp:150
+#: widgets/kmymoneycombo.cpp:348 widgets/registersearchline.cpp:84
+#, fuzzy
+msgid "Not reconciled"
+msgstr "Nie"
+
+#: dialogs/rc.cpp:228 dialogs/settings/rc.cpp:151
+#: widgets/kmymoneycombo.cpp:347 widgets/registersearchline.cpp:85
+msgid "Cleared"
+msgstr "Očistené"
+
+#: dialogs/settings/rc.cpp:153
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation "
+"of an account"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:154
+msgid "Autofill"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:155
+msgid "No Autofill"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:156
+#, fuzzy
+msgid "Don't do autofill of transaction data at all."
+msgstr "Auto"
+
+#: dialogs/settings/rc.cpp:157
+#, fuzzy
+msgid "Same transaction if amount differs less than"
+msgstr "Zmeniť 2"
+
+#: dialogs/settings/rc.cpp:158
+msgid ""
+"Collect all transactions for the given payee. Treat all transactions that "
+"refer to the same category and have an amount with +/- X % as identical. If "
+"more than one transaction is found, a list of them is presented to the "
+"user.\n"
+"\n"
+"Selecting 0% will list all transactions."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:159
+msgid ""
+"Two transactions are usually treated identical for autofill, if they refer "
+"the same accounts. They are treated as different transactions though, when "
+"their amount varies by more than the percentage given here."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:160
+msgid ""
+"_: Same transaction if amount differs less than percent.\n"
+"percent."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:161
+msgid "with previously most often used transaction for the payee"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:162
+msgid ""
+"The data of the last transaction assigned to the category used most often "
+"for this payee is autofilled into the transaction editor."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:164
+#, fuzzy
+msgid "Match transactions within days"
+msgstr "Vybrať prevody bez príjemcov"
+
+#: dialogs/settings/rc.cpp:165
+msgid ""
+"Search for matching transactions within the range of the posting date of the "
+"imported transaction +/- the number of given days."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:166
+msgid "Ask for a new payee's default category"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:167
+msgid ""
+"Whenever a new payee is detected during import of a statement, the user will "
+"be asked to assign a default category for this user when this option is "
+"selected."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:168
+#, fuzzy
+msgid "Schedule Settings"
+msgstr "Nastavenia časových plánov"
+
+#: dialogs/settings/rc.cpp:169
+#, fuzzy
+msgid "Startup options"
+msgstr "Voľby štartovacej strany"
+
+#: dialogs/settings/rc.cpp:170
+#, fuzzy
+msgid "Check schedules on startup"
+msgstr "Kontrolovať"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:60
+#: widgets/kmymoneyonlinequoteconfig.cpp:60
+#, fuzzy
+msgid "Delete the selected source entry"
+msgstr "Delete zdroj položka"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:61
+#: widgets/kmymoneyonlinequoteconfig.cpp:61
+#, fuzzy
+msgid "Use this to delete the selected online source entry"
+msgstr "Použiť do odstrániť pripojený zdroj položka"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:66
+#: widgets/kmymoneyonlinequoteconfig.cpp:66
+#, fuzzy
+msgid "Create a new source entry for online quotes"
+msgstr "Vytvoriť a nové zdroj položka pre pripojený"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:67
+#: widgets/kmymoneyonlinequoteconfig.cpp:67
+#, fuzzy
+msgid "Use this to create a new entry for online quotes"
+msgstr "Použiť do a nové položka pre pripojený"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:107
+#: dialogs/settings/ksettingsonlinequotes.cpp:190
+#: dialogs/settings/ksettingsonlinequotes.cpp:193
+#: dialogs/settings/ksettingsonlinequotes.cpp:216
+#: widgets/kmymoneyonlinequoteconfig.cpp:107
+#: widgets/kmymoneyonlinequoteconfig.cpp:185
+#: widgets/kmymoneyonlinequoteconfig.cpp:188
+#: widgets/kmymoneyonlinequoteconfig.cpp:211
+#, fuzzy
+msgid "New Quote Source"
+msgstr "Nový Zdroj"
+
+#: dialogs/ksplittransactiondlg.cpp:77 dialogs/rc.cpp:788
+msgid "Clear &All"
+msgstr "Vyčistiť &všetko"
+
+#: dialogs/ksplittransactiondlg.cpp:79
+#, fuzzy
+msgid "Clear all splits"
+msgstr "Vyčistiť všetky"
+
+#: dialogs/ksplittransactiondlg.cpp:80
+#, fuzzy
+msgid "Use this to clear all splits of this transaction"
+msgstr "Použiť do všetky z"
+
+#: dialogs/ksplittransactiondlg.cpp:84
+#, fuzzy
+msgid "&Merge"
+msgstr "Všetky stavy"
+
+#: dialogs/ksplittransactiondlg.cpp:183
+#, fuzzy
+msgid ""
+"The total amount of this transaction is %1 while the sum of the splits is %"
+"2. The remaining %3 are unassigned."
+msgstr "celkovom z je z je."
+
+#: dialogs/ksplittransactiondlg.cpp:191
+#, fuzzy, c-format
+msgid "Change &total amount of transaction to %1."
+msgstr "Zmeniť &celkovom z do."
+
+#: dialogs/ksplittransactiondlg.cpp:194
+#, fuzzy
+msgid "&Distribute difference of %1 among all splits."
+msgstr "roz&diel z všetky."
+
+#: dialogs/ksplittransactiondlg.cpp:203
+#, fuzzy, c-format
+msgid "&Leave total amount of transaction at %1."
+msgstr "Zmeniť &celkovom z do."
+
+#: dialogs/ksplittransactiondlg.cpp:205
+#, fuzzy
+msgid "&Leave %1 unassigned."
+msgstr "Opustiť."
+
+#: dialogs/ksplittransactiondlg.cpp:275
+#, fuzzy
+msgid ""
+"You are about to delete all splits of this transaction. Do you really want "
+"to continue?"
+msgstr "Vy do odstrániť všetky z do?"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:97
+#, fuzzy
+msgid "Use this to create a new QIF import/export profile"
+msgstr "Použiť do a nové QIF import profile"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:148
+#: dialogs/mymoneyqifprofileeditor.cpp:403 dialogs/rc.cpp:797
+#, fuzzy
+msgid "QIF Profile Editor"
+msgstr "QIF Editor"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:150
+#, fuzzy
+msgid "QIF Profile Selector"
+msgstr "QIF Selektor"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:236
+msgid "The default QIF profile"
+msgstr "Štandardný QIF profil"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:404
+#: dialogs/mymoneyqifprofileeditor.cpp:417
+msgid "Enter new profile name"
+msgstr "Zadajte názov nového profilu"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:436
+#, fuzzy
+msgid "Do you really want to delete profile '%1'?"
+msgstr "do odstrániť profile?"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:38
+#, fuzzy
+msgid "Select additional keys"
+msgstr "Zadať"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:48 widgets/rc.cpp:25
+msgid "User identification"
+msgstr "Identifikácia užívateľa"
+
+#: dialogs/kendingbalancedlg.cpp:71
+#, fuzzy
+msgid ""
+"Please enter the following fields with the information as you find them on "
+"your statement. Make sure to enter all values in <b>%1</b>."
+msgstr "informácie Hľadať súbory zapnuté."
+
+#: dialogs/kendingbalancedlg.cpp:124
+#, fuzzy, c-format
+msgid "Last reconciled statement: %1"
+msgstr "Posledný 1"
+
+#: dialogs/kendingbalancedlg.cpp:437 dialogs/kendingbalancedlg.cpp:577
+#: dialogs/rc.cpp:137
+msgid "Adjustment transaction"
+msgstr ""
+
+#: dialogs/kendingbalancedlg.cpp:510
+#, fuzzy
+msgid ""
+"KMyMoney has calculated the following amounts for interest and amortization "
+"according to recorded payments between %1 and %2."
+msgstr "pre a do medzi a."
+
+#: dialogs/kbalancechartdlg.cpp:59
+#, fuzzy, c-format
+msgid "Balance of %1"
+msgstr "Bilancia: %1"
+
+#: dialogs/kbalancechartdlg.cpp:70
+#, fuzzy
+msgid "%1 Balance History"
+msgstr "História ceny"
+
+#: dialogs/kmymoneysplittable.cpp:98
+msgid "Split Options"
+msgstr "Nastavenia rozdelenia"
+
+#: dialogs/kmymoneysplittable.cpp:99 dialogs/rc.cpp:731
+#: widgets/kmymoneypriceview.cpp:149
+#, fuzzy
+msgid "Edit..."
+msgstr "Upraviť..."
+
+#: dialogs/kmymoneysplittable.cpp:100
+msgid "Duplicate"
+msgstr "Duplikovať"
+
+#: dialogs/kmymoneysplittable.cpp:102
+msgid "Delete ..."
+msgstr "Zmazať"
+
+#: dialogs/kmymoneysplittable.cpp:275
+#, fuzzy
+msgid ""
+"_: Duplicate split\n"
+"CTRL+c"
+msgstr "Duplikovať rozdelenie"
+
+#: dialogs/kmymoneysplittable.cpp:562
+msgid "will be calculated"
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:648
+#, fuzzy
+msgid ""
+"You are about to delete the selected split. Do you really want to continue?"
+msgstr "Vy do odstrániť do?"
+
+#: dialogs/rc.cpp:1
+msgid "Account selection"
+msgstr "Výber účtu"
+
+#: dialogs/rc.cpp:3
+msgid "Account to import to"
+msgstr "Importovat účet"
+
+#: dialogs/rc.cpp:6 dialogs/rc.cpp:170 widgets/rc.cpp:169
+#, fuzzy
+msgid "Skip"
+msgstr "P&reskočiť"
+
+#: dialogs/rc.cpp:8
+#, fuzzy
+msgid ""
+"Use this dialog to backup your data. \n"
+"\n"
+"Please make sure you have a disk inserted and that the drive is ready. Then "
+"choose the mount point from either the Choose button or by entering the path "
+"in the available box.\n"
+"\n"
+"Click OK to perform the backup. If your system does not use an automounter, "
+"make sure you mark the checkbox below to \"mount this directory before "
+"backing up.\""
+msgstr ""
+"Použiť do n a disk a je pripojiť bod z alebo cesta v box n OK do systém do "
+"pripojiť"
+
+#: dialogs/rc.cpp:9
+msgid "Device options"
+msgstr "Možnosti zariadenia"
+
+#: dialogs/rc.cpp:10
+#, fuzzy
+msgid ""
+"_: This is the mount point\n"
+"Mount Point:"
+msgstr "Použiť do do pripojiť bod."
+
+#: dialogs/rc.cpp:11
+#, fuzzy
+msgid "Choose..."
+msgstr "&Vybrať..."
+
+#: dialogs/rc.cpp:12
+#, fuzzy
+msgid "Mount this directory before backing up."
+msgstr "Pripojiť."
+
+#: dialogs/rc.cpp:15
+#, fuzzy
+msgid "Reassign categories"
+msgstr "Skryté kategórie"
+
+#: dialogs/rc.cpp:16
+msgid ""
+"The transactions, schedules and budgets associated with the selected "
+"category need to be re-assigned to a different category before the selected "
+"category can be deleted. Please select a category from the list below."
+msgstr ""
+
+#: dialogs/rc.cpp:17
+#, fuzzy
+msgid "Available categories:"
+msgstr "Skryté kategórie"
+
+#: dialogs/rc.cpp:21
+#, fuzzy
+msgid ""
+"Please choose the type of import you wish to perform. A simple "
+"explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"typ z import do A import typ je na dolu z a je položka z výber box n import "
+"typ OK."
+
+#: dialogs/rc.cpp:23
+msgid "QIF"
+msgstr "QIF"
+
+#: dialogs/rc.cpp:24
+#, fuzzy
+msgid "CSV"
+msgstr "CSV"
+
+#: dialogs/rc.cpp:25
+msgid "Some descripton"
+msgstr "Nejaký popis"
+
+#: dialogs/rc.cpp:28
+msgid "Confirm Manual Enter"
+msgstr "Potvrdiť ručné zadanie"
+
+#: dialogs/rc.cpp:29
+#, fuzzy
+msgid "The following changes have been made to the transaction data:"
+msgstr "do."
+
+#: dialogs/rc.cpp:30
+#, fuzzy
+msgid "Please choose what you wish to do with the above changes"
+msgstr "do"
+
+#: dialogs/rc.cpp:31
+#, fuzzy
+msgid ""
+"Discard the changes and enter the original transaction into the register."
+msgstr "Zahodiť a."
+
+#: dialogs/rc.cpp:32
+#, fuzzy
+msgid "Enter these new values this one time, for this occurence only."
+msgstr "Zadať nové jeden čas pre."
+
+#: dialogs/rc.cpp:33
+#, fuzzy
+msgid "Set all further occurences in this schedule to be these values."
+msgstr "Nastaviť všetky v do."
+
+#: dialogs/rc.cpp:36
+msgid "CSV Dialog"
+msgstr "Dialóg pre CSV"
+
+#: dialogs/rc.cpp:37
+#, fuzzy
+msgid ""
+"CSV Dialog. Choose a file and then click on Run. You can view your "
+"progress at\n"
+"the bottom of the screen.\n"
+"\n"
+"You can cancel the process at any time by clicking on the Cancel button."
+msgstr ""
+"CSV Dialóg a súbor a zapnuté Spustiť Vy na dolu z n na akýkoľvek čas zapnuté "
+"Zrušiť."
+
+#: dialogs/rc.cpp:38
+msgid "Choose the csv file:"
+msgstr "Vybrať CSV súbor:"
+
+#: dialogs/rc.cpp:39
+#, fuzzy
+msgid "Browse"
+msgstr "Prechádzať"
+
+#: dialogs/rc.cpp:40
+#, fuzzy
+msgid "Between These Dates"
+msgstr "Dátumy"
+
+#: dialogs/rc.cpp:41 dialogs/rc.cpp:196
+msgid "Start on:"
+msgstr "Začať ku:"
+
+#: dialogs/rc.cpp:42 dialogs/rc.cpp:195
+msgid "End on:"
+msgstr "Ukončiť ku:"
+
+#: dialogs/rc.cpp:43
+#, fuzzy
+msgid "Run"
+msgstr "S&pustiť"
+
+#: dialogs/rc.cpp:44
+msgid "Progress Info"
+msgstr "Info o priebehu "
+
+#: dialogs/rc.cpp:45
+msgid "Processing Account:"
+msgstr "Spracovanie účtu:"
+
+#: dialogs/rc.cpp:47
+msgid "Processing Transaction:"
+msgstr "Spracovanie transakcie:"
+
+#: dialogs/rc.cpp:48
+msgid "0 of 0"
+msgstr "0 z 0"
+
+#: dialogs/rc.cpp:50
+#, fuzzy
+msgid "Exchange Rate/Price Editor"
+msgstr "Modul Exchange Rýchlosť Editor"
+
+#: dialogs/rc.cpp:55
+msgid "Convert from"
+msgstr "Previesť z"
+
+#: dialogs/rc.cpp:58
+msgid "Convert to"
+msgstr "Previesť na"
+
+#: dialogs/rc.cpp:61
+#, fuzzy
+msgid "To amount"
+msgstr "Na sumu:"
+
+#: dialogs/rc.cpp:62
+#, fuzzy
+msgid "Exchange rate / Price"
+msgstr "Modul Exchange Cena"
+
+#: dialogs/rc.cpp:64
+#, fuzzy
+msgid ""
+"xx\n"
+"xx"
+msgstr ""
+"xx\n"
+"xx"
+
+#: dialogs/rc.cpp:68
+#, fuzzy
+msgid "Currencies"
+msgstr "Meny"
+
+#: dialogs/rc.cpp:72
+#, fuzzy
+msgid "real ID"
+msgstr "real ID"
+
+#: dialogs/rc.cpp:73 dialogs/rc.cpp:722
+#, fuzzy
+msgid "ID"
+msgstr "ID"
+
+#: dialogs/rc.cpp:74
+#, fuzzy
+msgid "X"
+msgstr "X"
+
+#: dialogs/rc.cpp:76 dialogs/rc.cpp:459
+#, fuzzy
+msgid "Online Source"
+msgstr "Pripojený zdroj"
+
+#: dialogs/rc.cpp:78 dialogs/rc.cpp:278 dialogs/rc.cpp:312 dialogs/rc.cpp:684
+msgid "F1"
+msgstr "F1"
+
+#: dialogs/rc.cpp:80
+#, fuzzy
+msgid "If this button is not activated, select the base currency first."
+msgstr "je základ prvý."
+
+#: dialogs/rc.cpp:81
+#, fuzzy
+msgid ""
+"Press this button to close the dialog. If the button is not activated, "
+"select your base currency."
+msgstr "do je základ."
+
+#: dialogs/rc.cpp:82
+#, fuzzy
+msgid "Edit Equity"
+msgstr "Upraviť majetok"
+
+#: dialogs/rc.cpp:86 dialogs/rc.cpp:410
+msgid "Smallest fraction:"
+msgstr ""
+
+#: dialogs/rc.cpp:87 dialogs/rc.cpp:408 dialogs/rc.cpp:440
+msgid "1 /"
+msgstr "1 /"
+
+#: dialogs/rc.cpp:88 dialogs/rc.cpp:405
+msgid "Investment Type:"
+msgstr "Typ investície:"
+
+#: dialogs/rc.cpp:89 dialogs/rc.cpp:404
+msgid "Equity Name:"
+msgstr "Meno majetku:"
+
+#: dialogs/rc.cpp:90 dialogs/rc.cpp:409
+msgid "Market Symbol:"
+msgstr "Symbol obchodu:"
+
+#: dialogs/rc.cpp:91
+msgid "Price History"
+msgstr "História ceny"
+
+#: dialogs/rc.cpp:97
+#, fuzzy
+msgid "Edit Scheduled transaction"
+msgstr "Zadať plánovanú transakciu"
+
+#: dialogs/rc.cpp:98
+#, fuzzy
+msgid "Schedule name:"
+msgstr "Názov časového plánu:"
+
+#: dialogs/rc.cpp:99
+msgid "Frequency:"
+msgstr "Frekvencia:"
+
+#: dialogs/rc.cpp:100
+msgid "Number of selected periods between entries"
+msgstr ""
+
+#: dialogs/rc.cpp:101
+#, fuzzy
+msgid "Payment information"
+msgstr "Informácie o platbách"
+
+#: dialogs/rc.cpp:105 dialogs/rc.cpp:160 dialogs/rc.cpp:247 dialogs/rc.cpp:752
+#: widgets/register.cpp:569
+msgid "C"
+msgstr "C"
+
+#: dialogs/rc.cpp:113
+#, fuzzy
+msgid "Do nothing"
+msgstr "Nerobiť nič"
+
+#: dialogs/rc.cpp:116
+#, fuzzy
+msgid "If this schedule occurs on the weekend:"
+msgstr "zapnuté:"
+
+#: dialogs/rc.cpp:117
+#, fuzzy
+msgid "The amount is an estimate because it varies for each payment"
+msgstr "je"
+
+#: dialogs/rc.cpp:118
+#, fuzzy
+msgid "Enter this schedule into the register automatically when it is due"
+msgstr "Zadať"
+
+#: dialogs/rc.cpp:119
+#, fuzzy
+msgid "This schedule will end at some time"
+msgstr "na niečo čas"
+
+#: dialogs/rc.cpp:120
+#, fuzzy
+msgid "Number of transactions remaining:"
+msgstr "Číslo z:"
+
+#: dialogs/rc.cpp:121
+msgid "Date of final transaction:"
+msgstr "Dátum ukončenia transakcie:"
+
+#: dialogs/rc.cpp:125
+msgid "Reconciliation Wizard"
+msgstr "Sprievodca kontrolou dát"
+
+#: dialogs/rc.cpp:127
+#, fuzzy
+msgid ""
+"Reconciling your account assures, that your recordings match those of your "
+"institution and that there are no mistakes on either side. You should "
+"reconcile your account whenever you receive a statement from your "
+"institution.\n"
+"\n"
+"All relevant information necessary for this process is usually printed on "
+"your statement.\n"
+"\n"
+"On the next page you will verify, that the starting and ending balance are "
+"matching those on your statement. If not, please modify the figures."
+msgstr ""
+"account zodpovedajú z a nie zapnuté Vy account a z n informácie pre je "
+"zapnuté n strana a zapnuté."
+
+#: dialogs/rc.cpp:129
+#, fuzzy
+msgid ""
+"KMyMoney calculates your loan payments automatically. The amounts can "
+"deviate from those calculated by the creditor. Therefore, you possibly have "
+"to adjust amortization, interest and other costs according to your "
+"statement.\n"
+"\n"
+"Please enter the following information found on your statement:"
+msgstr "z do a do n informácie zapnuté:"
+
+#: dialogs/rc.cpp:130
+msgid "Ending date of statement"
+msgstr "Dátum ukončenia oznámenia"
+
+#: dialogs/rc.cpp:131
+msgid "Starting date of statement"
+msgstr "Počiatočný dátum oznámenia"
+
+#: dialogs/rc.cpp:132
+msgid "Verify payments"
+msgstr "Kontrola platby"
+
+#: dialogs/rc.cpp:133 dialogs/rc.cpp:148 dialogs/rc.cpp:476 dialogs/rc.cpp:477
+#: dialogs/rc.cpp:508 dialogs/rc.cpp:513 dialogs/rc.cpp:518 dialogs/rc.cpp:532
+#: dialogs/rc.cpp:539 dialogs/rc.cpp:540 dialogs/rc.cpp:541 dialogs/rc.cpp:542
+#: dialogs/rc.cpp:543 dialogs/rc.cpp:552 dialogs/rc.cpp:553 dialogs/rc.cpp:554
+#: dialogs/rc.cpp:555 dialogs/rc.cpp:556 dialogs/rc.cpp:565 dialogs/rc.cpp:566
+#: dialogs/rc.cpp:567 dialogs/rc.cpp:568 dialogs/rc.cpp:569 dialogs/rc.cpp:578
+#: dialogs/rc.cpp:579 dialogs/rc.cpp:580 dialogs/rc.cpp:581 dialogs/rc.cpp:582
+#: dialogs/rc.cpp:591 dialogs/rc.cpp:592 dialogs/rc.cpp:593 dialogs/rc.cpp:594
+#: dialogs/rc.cpp:595 dialogs/rc.cpp:603 dialogs/rc.cpp:604 dialogs/rc.cpp:605
+#: dialogs/rc.cpp:606 dialogs/rc.cpp:607 dialogs/rc.cpp:618 dialogs/rc.cpp:619
+#: dialogs/rc.cpp:621 dialogs/rc.cpp:636 dialogs/rc.cpp:637 dialogs/rc.cpp:638
+#: dialogs/rc.cpp:639 dialogs/rc.cpp:640 dialogs/rc.cpp:641 dialogs/rc.cpp:651
+#: dialogs/rc.cpp:652 dialogs/rc.cpp:654 dialogs/rc.cpp:657 dialogs/rc.cpp:658
+#: dialogs/rc.cpp:659 dialogs/rc.cpp:664 dialogs/rc.cpp:665 dialogs/rc.cpp:668
+#: dialogs/rc.cpp:670 dialogs/rc.cpp:672 dialogs/rc.cpp:674 dialogs/rc.cpp:676
+#: dialogs/rc.cpp:678 dialogs/rc.cpp:681 dialogs/rc.cpp:823 widgets/rc.cpp:167
+msgid "1"
+msgstr "1"
+
+#: dialogs/rc.cpp:136
+#, fuzzy
+msgid ""
+"If your statement shows different amounts, please cancel this dialog and "
+"correct the false transactions or correct the values in this dialog. In the "
+"later case, KMyMoney will create an adjustment transaction and add it to the "
+"ledger."
+msgstr "a false alebo v a do."
+
+#: dialogs/rc.cpp:138
+#, fuzzy
+msgid ""
+"In order to create the adjustment transaction, KMyMoney requires an account "
+"and possibly an interest category to assign the differences to. Please "
+"select an account and - if necessary - a category."
+msgstr "do account a do do account a a."
+
+#: dialogs/rc.cpp:140
+msgid "Interest-Category"
+msgstr "Úrok-kategória"
+
+#: dialogs/rc.cpp:141
+msgid "Restarting postponed reconciliation"
+msgstr ""
+
+#: dialogs/rc.cpp:142
+#, fuzzy
+msgid ""
+"You have previously postponed the reconciliation of this account. If you "
+"have entered charges or interests the last time you started reconciling this "
+"account you can modify these in the ledger later on.\n"
+"\n"
+"It is important, that you continue with the same statement you used when you "
+"postponed the reconciliation.\n"
+"\n"
+"All information you have entered into this wizard will be shown and all "
+"transactions that you already cleared are marked with a 'C'."
+msgstr ""
+"Vy z account alebo čas account v zapnuté n je dôležité n informácie a všetky "
+"a C."
+
+#: dialogs/rc.cpp:143
+msgid "Statement Information"
+msgstr "Informácie o príkaze"
+
+#: dialogs/rc.cpp:144 dialogs/rc.cpp:315 dialogs/rc.cpp:317 dialogs/rc.cpp:320
+#: dialogs/rc.cpp:321 dialogs/rc.cpp:329 dialogs/rc.cpp:330 dialogs/rc.cpp:333
+#: dialogs/rc.cpp:334 dialogs/rc.cpp:335 dialogs/rc.cpp:336 dialogs/rc.cpp:366
+msgid "x"
+msgstr ""
+
+#: dialogs/rc.cpp:145
+msgid "Statement date:"
+msgstr "Dátum vyuúčtovania:"
+
+#: dialogs/rc.cpp:146
+msgid "Starting balance of this statement:"
+msgstr "Začiatočná bilancia z tohoto vúčtovania:"
+
+#: dialogs/rc.cpp:147
+msgid "Ending balance of this statement:"
+msgstr "Konečná bilancia z tohoto vyúčtovania:"
+
+#: dialogs/rc.cpp:149
+msgid "Interest / Charges"
+msgstr "Príjmy / Výdavky"
+
+#: dialogs/rc.cpp:150
+#, fuzzy
+msgid ""
+"If necessary, enter information about interest or charges here. KMyMoney "
+"will create transactions and clear them directly for you."
+msgstr "informácie alebo a pre."
+
+#: dialogs/rc.cpp:153
+msgid "Charges"
+msgstr "Výdavky"
+
+#: dialogs/rc.cpp:154
+#, fuzzy
+msgid "Enter Schedule"
+msgstr "Nový plán"
+
+#: dialogs/rc.cpp:155
+msgid "Schedule Details"
+msgstr "Detaily časového plánu"
+
+#: dialogs/rc.cpp:156 dialogs/rc.cpp:348 dialogs/rc.cpp:389 widgets/rc.cpp:164
+msgid "Name:"
+msgstr "Meno:"
+
+#: dialogs/rc.cpp:157 dialogs/rc.cpp:351 widgets/rc.cpp:165
+msgid "Type:"
+msgstr "Typ:"
+
+#: dialogs/rc.cpp:168
+msgid "Enter"
+msgstr "Vložiť"
+
+#: dialogs/rc.cpp:169
+msgid ""
+"Enter the transaction and advance the next due date of this schedule to the "
+"next payment date."
+msgstr ""
+
+#: dialogs/rc.cpp:171
+msgid ""
+"Do not enter the transaction but advance the next due date of this schedule "
+"to the next payment date."
+msgstr ""
+
+#: dialogs/rc.cpp:172
+#, fuzzy
+msgid "Ignore"
+msgstr "Nárast"
+
+#: dialogs/rc.cpp:173
+msgid ""
+"Do not enter or skip payments for this schedule but continue with the next "
+"schedule."
+msgstr ""
+
+#: dialogs/rc.cpp:175
+msgid "Cancel processing of schedule entry."
+msgstr ""
+
+#: dialogs/rc.cpp:176
+#, fuzzy
+msgid "Update Stock and Currency Prices"
+msgstr "Aktualizovať Zásoba a Mena"
+
+#: dialogs/rc.cpp:177
+#, fuzzy
+msgid "List of known Equities, and the date they were last updated on."
+msgstr "Zoznam z Cenné papiere a dátum zapnuté."
+
+#: dialogs/rc.cpp:179
+#, fuzzy
+msgid "Update All"
+msgstr "&Aktualizovať všetko"
+
+#: dialogs/rc.cpp:180
+#, fuzzy
+msgid "Update Selected"
+msgstr "Akt&ualizovať vybrané"
+
+#: dialogs/rc.cpp:181
+msgid "Status:"
+msgstr "Stav:"
+
+#: dialogs/rc.cpp:184
+msgid "QIF Export"
+msgstr "QIF Export"
+
+#: dialogs/rc.cpp:185
+#, fuzzy
+msgid ""
+"From this dialog you are able to export transactions to a quicken compatible "
+"file, (known as a QIF file, because of the extension). Please enter the "
+"path to the QIF file or select it by clicking on the Browse button.\n"
+"\n"
+"You can choose the file's path, the account and the format of the QIF file "
+"(profile). Choose Account to export all the transactions between the "
+"specified dates or just categories. You can also limit the transactions "
+"that are exported by start and ending date. Once you have pressed the "
+"Export button a message box will appear when the export has completed "
+"detailing how many transactions, categories and payees were exported."
+msgstr ""
+"Od do do a súbor a QIF súbor z rozšírenie cesta do QIF súbor alebo zapnuté "
+"Prehliadať n súbor s cesta account a z QIF súbor profile Účet do všetky "
+"medzi alebo Vy štart a dátum Raz Exportovať a box dokončené a."
+
+#: dialogs/rc.cpp:186
+#, fuzzy
+msgid "File to export to:"
+msgstr "Súbor do do:"
+
+#: dialogs/rc.cpp:188
+msgid "Account to export"
+msgstr "Exportovať účet"
+
+#: dialogs/rc.cpp:189 dialogs/rc.cpp:297
+msgid "QIF Profile"
+msgstr "QIF Profil"
+
+#: dialogs/rc.cpp:190 dialogs/rc.cpp:298 dialogs/rc.cpp:362
+#: widgets/kmymoneypriceview.cpp:145
+msgid "New..."
+msgstr "Nový..."
+
+#: dialogs/rc.cpp:191
+msgid "Contents to Export"
+msgstr "Exportovať obsah"
+
+#: dialogs/rc.cpp:194
+msgid "Date Range"
+msgstr "Rozsah dátumov"
+
+#: dialogs/rc.cpp:199
+msgid "Search transactions"
+msgstr "Hľadať prevody"
+
+#: dialogs/rc.cpp:200
+msgid "Criteria"
+msgstr ""
+
+#: dialogs/rc.cpp:201
+msgid "Define your search criteria"
+msgstr "Definujte kritériá hľadania"
+
+#: dialogs/kfindtransactiondlg.cpp:169 dialogs/rc.cpp:202
+msgid "Text"
+msgstr "Text"
+
+#: dialogs/rc.cpp:203
+#, fuzzy
+msgid "Contains"
+msgstr "Základná cena"
+
+#: dialogs/rc.cpp:204
+#, fuzzy
+msgid "Does not contain"
+msgstr "Nerobiť nič"
+
+#: dialogs/rc.cpp:205
+#, fuzzy
+msgid "Treat text as regular expression"
+msgstr "text previdelný"
+
+#: dialogs/rc.cpp:206
+msgid "Case sensitive"
+msgstr "Rozlišovať veľkosť písmen"
+
+#: dialogs/rc.cpp:209
+msgid "Range"
+msgstr "Rozsah"
+
+#: dialogs/rc.cpp:210
+#, fuzzy
+msgid ""
+"_: To (Date)\n"
+"To"
+msgstr "Do (dátumu)"
+
+#: dialogs/rc.cpp:211
+#, fuzzy
+msgid ""
+"_: From (Date)\n"
+"From"
+msgstr "Od (dátumu)"
+
+#: dialogs/rc.cpp:213
+msgid "Search this amount"
+msgstr "Hľadať sumu"
+
+#: dialogs/rc.cpp:214
+msgid "Search amount in the range"
+msgstr "Hľadať sumu v rozsahu"
+
+#: dialogs/rc.cpp:215
+#, fuzzy
+msgid ""
+"_: to (amount)\n"
+"to"
+msgstr "Na sumu:"
+
+#: dialogs/rc.cpp:216
+#, fuzzy
+msgid ""
+"_: from (amount)\n"
+"from"
+msgstr "Na sumu:"
+
+#: dialogs/rc.cpp:220
+msgid "Select transactions without payees"
+msgstr "Vybrať prevody bez príjemcov"
+
+#: dialogs/rc.cpp:221
+msgid "Select all"
+msgstr "Vybrať všetko"
+
+#: dialogs/rc.cpp:222
+msgid "Select none"
+msgstr "Nevybrať nič"
+
+#: dialogs/rc.cpp:224
+msgid "Validity"
+msgstr "Platnosť"
+
+#: dialogs/rc.cpp:226
+msgid "All states"
+msgstr "Všetky stavy"
+
+#: dialogs/rc.cpp:230
+#, fuzzy
+msgid "All types"
+msgstr "Všetky typy"
+
+#: dialogs/rc.cpp:234
+msgid "Any transaction"
+msgstr "Ľubovoľné prevody"
+
+#: dialogs/rc.cpp:235
+msgid "Valid transaction"
+msgstr "Platný prevod"
+
+#: dialogs/rc.cpp:236
+msgid "Invalid transaction"
+msgstr "Neplatný prevod"
+
+#: dialogs/rc.cpp:237
+msgid "State"
+msgstr "Stav"
+
+#: dialogs/rc.cpp:238
+msgid "Search this number"
+msgstr " Hadať číslo"
+
+#: dialogs/rc.cpp:239
+msgid "Search number in range"
+msgstr "Hľadať číslo v rozsahu"
+
+#: dialogs/rc.cpp:240
+#, fuzzy
+msgid ""
+"_: to (number)\n"
+"to"
+msgstr "Typ, číslo"
+
+#: dialogs/rc.cpp:241
+#, fuzzy
+msgid ""
+"_: from (number)\n"
+"from"
+msgstr "Typ, číslo"
+
+#: dialogs/rc.cpp:242
+msgid "text"
+msgstr "text"
+
+#: dialogs/rc.cpp:243
+msgid "warning"
+msgstr ""
+
+#: dialogs/rc.cpp:244
+#, fuzzy
+msgid "Result"
+msgstr "Obnoviť"
+
+#: dialogs/rc.cpp:254
+msgid "F"
+msgstr "F"
+
+#: dialogs/rc.cpp:257 dialogs/rc.cpp:844
+msgid "&Reset"
+msgstr "&Obnoviť"
+
+#: dialogs/rc.cpp:258
+#, fuzzy
+msgid "&Find"
+msgstr "&Dokončiť"
+
+#: dialogs/rc.cpp:259
+msgid "GnuCash Import Options"
+msgstr "Nastavenia GnuCash importu"
+
+#: dialogs/rc.cpp:260
+msgid "Use 'Help' for more information on these options"
+msgstr "Použite Pomocníka pre viac informácií o nastaveniach"
+
+#: dialogs/rc.cpp:261
+msgid "Investment Handling"
+msgstr "Kontrola investície"
+
+#: dialogs/rc.cpp:262
+#, fuzzy
+msgid "One investment account for each stock"
+msgstr "Jeden account pre"
+
+#: dialogs/rc.cpp:263
+#, fuzzy
+msgid "One investment account for all stocks"
+msgstr "Jeden account pre všetky"
+
+#: dialogs/rc.cpp:264
+#, fuzzy
+msgid "Prompt for an investment account for each stock"
+msgstr "Výzva pre account pre"
+
+#: dialogs/rc.cpp:265
+#, fuzzy
+msgid "Online price quotes"
+msgstr "Úvodzovky"
+
+#: dialogs/rc.cpp:266
+msgid "Use Finance::Quote for share price quotes"
+msgstr ""
+
+#: dialogs/rc.cpp:267
+msgid "Scheduled Transactions"
+msgstr "Plánované prevody"
+
+#: dialogs/rc.cpp:268
+#, fuzzy
+msgid "Drop suspect scheduled transactions"
+msgstr "Pustiť"
+
+#: dialogs/rc.cpp:269
+msgid "Decoding option"
+msgstr "Voľby dekódovania"
+
+#: dialogs/rc.cpp:270
+msgid "Decode using"
+msgstr "Použiť dekódovanie"
+
+#: dialogs/rc.cpp:271
+#, fuzzy
+msgid "Transaction Notes option"
+msgstr "Nastavenia transakcie"
+
+#: dialogs/rc.cpp:272
+#, fuzzy
+msgid "Use transaction notes on non-split transactions"
+msgstr "Insert typ Nie pole pre nové"
+
+#: dialogs/rc.cpp:273
+msgid "Debug Options"
+msgstr "Možnosti ladenia"
+
+#: dialogs/rc.cpp:274
+msgid "General debug data"
+msgstr "Všeobecné ladiace informácie"
+
+#: dialogs/rc.cpp:275
+msgid "Display XML data"
+msgstr "Zobrazenie XML dát"
+
+#: dialogs/rc.cpp:276
+msgid "Anonymize data"
+msgstr "Anonymné dáta"
+
+#: dialogs/rc.cpp:281
+#, fuzzy
+msgid "Online Quotes - Select price source"
+msgstr "Pripojený Vybrať zdroj"
+
+#: dialogs/rc.cpp:284
+#, fuzzy
+msgid ""
+"This price source is not known to KMyMoney. Please select an option below."
+msgstr "zdroj je do."
+
+#: dialogs/rc.cpp:285
+#, fuzzy
+msgid "Do not perform online quotes for this investment"
+msgstr "pripoje&ný pre"
+
+#: dialogs/rc.cpp:286
+#, fuzzy
+msgid "Select a known KMyMoney source from the list below"
+msgstr "Vy&brať a zdroj z zoznam"
+
+#: dialogs/rc.cpp:287
+#, fuzzy
+msgid ""
+"Use the following name for the price source.\n"
+"(Click Help for further information.)"
+msgstr "Po&užiť meno pre zdroj n Kliknutie Pomocník pre informácie"
+
+#: dialogs/rc.cpp:288
+#, fuzzy
+msgid "Always use this selection for this price source."
+msgstr "Vždy pre zdroj."
+
+#: dialogs/rc.cpp:289
+msgid "QIF Import"
+msgstr "QIF Import"
+
+#: dialogs/rc.cpp:290
+#, fuzzy
+msgid ""
+"From this dialog you are able to import transactions from a Quicken<b>&trade;"
+"</b> compatible file, (known as a QIF file, because of the extension).<p>\n"
+"\n"
+"Please enter the path to the QIF file or select it by clicking on the Browse "
+"button. Once you have the file's path press the Import button and KMyMoney "
+"will import all the transactions, categories and payees it finds."
+msgstr ""
+"Od do import z a<b>&trade;</b> súbor a súbor z rozšírenie<p> n cesta do "
+"súbor alebo zapnuté Prehliadať Raz súbor s cesta Import a import všetky a."
+
+#: dialogs/rc.cpp:291
+msgid "QIF File to Import:"
+msgstr "QIF súbor pre import:"
+
+#: dialogs/rc.cpp:292
+msgid "Import options"
+msgstr "Možnosti importu"
+
+#: dialogs/rc.cpp:293
+#, fuzzy
+msgid "Bank statement"
+msgstr "Informácie:"
+
+#: dialogs/rc.cpp:294
+#, fuzzy
+msgid "Other application"
+msgstr "Výpočet úroku"
+
+#: dialogs/rc.cpp:295
+msgid ""
+"Select <b>Bank statement</b> turns on automatic category matching which is "
+"turned off in case of <b>Historic data</b>. Use the latter if you import "
+"files from other Personal Finance Management software."
+msgstr ""
+
+#: dialogs/rc.cpp:296
+#, fuzzy
+msgid "Source of QIF"
+msgstr "Zdroj"
+
+#: dialogs/rc.cpp:302
+msgid "Verify Import"
+msgstr "Overiť Import"
+
+#: dialogs/rc.cpp:304
+#, fuzzy
+msgid "Ok"
+msgstr "&OK"
+
+#: dialogs/rc.cpp:306
+#, fuzzy
+msgid "MyDialog"
+msgstr "Dialóg pre CSV"
+
+#: dialogs/rc.cpp:310
+#, fuzzy
+msgid "File Information"
+msgstr "Informácie o príjemcovi"
+
+#: dialogs/rc.cpp:316
+#, fuzzy
+msgid "Last modified on"
+msgstr "Posledný mesiac"
+
+#: dialogs/rc.cpp:319
+#, fuzzy
+msgid "Base currency"
+msgstr "Nová mena"
+
+#: dialogs/rc.cpp:322
+#, fuzzy
+msgid "Created on"
+msgstr "Vytvoriť"
+
+#: dialogs/rc.cpp:325
+#, fuzzy
+msgid "Accounts/Categories"
+msgstr "Kategórie"
+
+#: dialogs/rc.cpp:328
+#, fuzzy
+msgid "Closed"
+msgstr "&Zavrieť"
+
+#: dialogs/rc.cpp:331
+#, fuzzy
+msgid "Prices"
+msgstr "Cena"
+
+#: dialogs/rc.cpp:337
+#, fuzzy
+msgid "Splits"
+msgstr "Rozdeliť"
+
+#: dialogs/rc.cpp:338
+msgid "Price Editor"
+msgstr "Editor cien"
+
+#: dialogs/rc.cpp:339
+msgid "Show all stored prices"
+msgstr "Zobraziť všetky uložené ceny"
+
+#: dialogs/rc.cpp:343
+#, fuzzy
+msgid "Delete Range..."
+msgstr "Zmazať &rozsah."
+
+#: dialogs/rc.cpp:346
+msgid "New Account Dialog"
+msgstr "Okno nového účtu"
+
+#: dialogs/rc.cpp:349
+#, fuzzy
+msgid "Opening information"
+msgstr "Informácie o platbách"
+
+#: dialogs/rc.cpp:350
+msgid "Currency:"
+msgstr "Mena:"
+
+#: dialogs/rc.cpp:352 dialogs/rc.cpp:793
+msgid "Date:"
+msgstr "Dátum:"
+
+#: dialogs/rc.cpp:353
+#, fuzzy
+msgid "Balance:"
+msgstr "Bilancia:"
+
+#: dialogs/rc.cpp:355
+#, fuzzy
+msgid "Last check number:"
+msgstr "Auto kontrola číslo"
+
+#: dialogs/rc.cpp:356
+msgid "Notes:"
+msgstr "Poznámky:"
+
+#: dialogs/rc.cpp:357
+#, fuzzy
+msgid "No auto-VAT-assignment"
+msgstr "Nie"
+
+#: dialogs/rc.cpp:358 dialogs/rc.cpp:441
+#, fuzzy
+msgid "Price entry"
+msgstr "Nový cenový údaj"
+
+#: dialogs/rc.cpp:359
+msgid "Preferred Account"
+msgstr "Preferovaný Účet"
+
+#: dialogs/rc.cpp:363
+msgid "Number:"
+msgstr "Číslo:"
+
+#: dialogs/rc.cpp:364 dialogs/rc.cpp:395
+msgid "BIC"
+msgstr ""
+
+#: dialogs/rc.cpp:367
+#, fuzzy
+msgid "Hierarchy"
+msgstr "Hľadať"
+
+#: dialogs/rc.cpp:368
+msgid "Subaccount"
+msgstr "Podúčet"
+
+#: dialogs/rc.cpp:369
+#, fuzzy
+msgid "Limits"
+msgstr "číslice"
+
+#: dialogs/rc.cpp:370
+msgid ""
+"This page allows to setup certain limits. KMyMoney will warn you when the "
+"account balance reaches a limit."
+msgstr ""
+
+#: dialogs/rc.cpp:372
+#, fuzzy
+msgid "Absolute limit"
+msgstr "Oddelený účet"
+
+#: dialogs/rc.cpp:373
+msgid "Maximum credit limit"
+msgstr ""
+
+#: dialogs/rc.cpp:374
+#, fuzzy
+msgid "Minimum balance"
+msgstr "Koncový stav"
+
+#: dialogs/rc.cpp:375
+msgid "Early warning"
+msgstr ""
+
+#: dialogs/rc.cpp:377
+msgid "VAT details"
+msgstr "VAT detaily"
+
+#: dialogs/rc.cpp:378
+msgid "VAT category"
+msgstr "VAT kategória"
+
+#: dialogs/rc.cpp:379
+msgid "VAT percentage"
+msgstr "VAT percentá"
+
+#: dialogs/rc.cpp:380
+#, fuzzy
+msgid "Enable auto VAT assignment"
+msgstr "Povoliť"
+
+#: dialogs/rc.cpp:381
+#, fuzzy
+msgid "Amount entered"
+msgstr "Množstvo"
+
+#: dialogs/rc.cpp:382
+msgid "Gross amount"
+msgstr ""
+
+#: dialogs/rc.cpp:383
+msgid "Net amount"
+msgstr ""
+
+#: dialogs/rc.cpp:384
+#, fuzzy
+msgid "Include on Tax Reports"
+msgstr "zapnuté Daň Výkazy"
+
+#: dialogs/rc.cpp:387
+msgid "New Institution Dialog"
+msgstr "Okno Nová inštítúcia"
+
+#: dialogs/rc.cpp:388
+msgid "Institution Details"
+msgstr "Detaily inštitúcie"
+
+#: dialogs/rc.cpp:390
+msgid "City:"
+msgstr "Mesto:"
+
+#: dialogs/rc.cpp:394
+#, fuzzy
+msgid "Routing Number:"
+msgstr "Číslo:"
+
+#: dialogs/rc.cpp:398
+#, fuzzy
+msgid "New Budget"
+msgstr "Rozpočty"
+
+#: dialogs/rc.cpp:403
+msgid "New Equity"
+msgstr "Nový majetok"
+
+#: dialogs/rc.cpp:406 dialogs/rc.cpp:407
+#, fuzzy
+msgid "Trading Symbol of the stock or mutual fund, not required."
+msgstr "Symbol z alebo."
+
+#: dialogs/rc.cpp:414 dialogs/rc.cpp:415
+#, fuzzy
+msgid "Name of the company, or mutual fund."
+msgstr "Meno z alebo."
+
+#: dialogs/rc.cpp:418
+msgid "New File Dialog"
+msgstr "Okno Nový súbor "
+
+#: dialogs/rc.cpp:419
+#, fuzzy
+msgid ""
+"Use this dialog to enter personal information about yourself.\n"
+"\n"
+"All information is optional and is provided to personalize\n"
+"your KMyMoney file."
+msgstr "Použiť do informácie n informácie je a je do súbor."
+
+#: dialogs/rc.cpp:430
+msgid "New Investment wizard"
+msgstr "Asistent Nová investícia"
+
+#: dialogs/rc.cpp:431
+msgid "Investment Type"
+msgstr "Typ Investície"
+
+#: dialogs/rc.cpp:432
+#, fuzzy
+msgid "This wizard allows you to create a new investment."
+msgstr "a account."
+
+#: dialogs/rc.cpp:433
+#, fuzzy
+msgid ""
+"The first step in this process requires to select the type of investment. "
+"The following steps collect more details about the investment from you."
+msgstr "do a nové n prvý krok v do typ z viac z."
+
+#: dialogs/rc.cpp:434
+msgid "Type of investment"
+msgstr "Typ investície"
+
+#: dialogs/rc.cpp:438
+msgid "Investment details"
+msgstr "Detaily investície"
+
+#: dialogs/rc.cpp:439
+#, fuzzy
+msgid ""
+"Enter the details below and click <b>Next</b> to continue entering the "
+"online update details."
+msgstr "Zadať a<b> Ďalší</b> do pripojený."
+
+#: dialogs/rc.cpp:442 dialogs/rc.cpp:728
+msgid "Fraction"
+msgstr "Podiel"
+
+#: dialogs/rc.cpp:443
+msgid "Trading Currency"
+msgstr "Obchodná mena"
+
+#: dialogs/rc.cpp:444
+msgid "Full name"
+msgstr "Celé meno"
+
+#: dialogs/rc.cpp:445
+msgid "AMEX"
+msgstr "AMEX"
+
+#: dialogs/rc.cpp:446
+msgid "EUREX"
+msgstr "EUREX"
+
+#: dialogs/rc.cpp:447
+msgid "FUND"
+msgstr "FUND"
+
+#: dialogs/rc.cpp:448
+msgid "NASDAQ"
+msgstr "NASDAQ"
+
+#: dialogs/rc.cpp:449
+msgid "NYSE"
+msgstr "NYSE"
+
+#: dialogs/rc.cpp:450
+msgid "XETRA"
+msgstr "XETRA"
+
+#: dialogs/rc.cpp:451
+msgid "Trading symbol"
+msgstr "Symbol obchodu"
+
+#: dialogs/rc.cpp:452
+msgid "Identification"
+msgstr "Identifikácia"
+
+#: dialogs/rc.cpp:453
+#, fuzzy
+msgid "Enter the ticker symbol (e.g. RHAT)."
+msgstr "e g."
+
+#: dialogs/rc.cpp:454
+#, fuzzy
+msgid "Enter the CUSIP/ISIN/WKN identification number here"
+msgstr "Zadať identifikácia číslo"
+
+#: dialogs/rc.cpp:455
+msgid "Trading market"
+msgstr ""
+
+#: dialogs/rc.cpp:456
+msgid "Online Update"
+msgstr "Online aktualizácia"
+
+#: dialogs/rc.cpp:457
+#, fuzzy
+msgid ""
+"Select an online source and click <b>Finish</b> to store the investment "
+"data. If you don't want to use online updates, just leave the data as is."
+msgstr "Vybrať pripojený zdroj a<b> Dokončiť</b> do do pripojený je."
+
+#: dialogs/rc.cpp:458
+msgid "Use Finance::Quote"
+msgstr ""
+
+#: dialogs/rc.cpp:460
+msgid "Factor"
+msgstr "Faktor"
+
+#: dialogs/rc.cpp:461
+msgid "New Loan Wizard"
+msgstr "Sprievodca Nová pôžička"
+
+#: dialogs/rc.cpp:462
+msgid "New Loan Account Wizard"
+msgstr "Sprievodca účtom Nová pôžička"
+
+#: dialogs/rc.cpp:463
+#, fuzzy
+msgid ""
+"\n"
+"Welcome to the New Loan Account Wizard which will guide you through the "
+"creation of a new loan e.g. for your home, your car or any other loan that "
+"you pay or gain interest for.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"do Nový Pôžička Účet Sprievodca z a nové e g pre alebo akýkoľvek alebo "
+"zosilnenie pre n informácie Vy informácie z a."
+
+#: dialogs/rc.cpp:464
+msgid "Edit Loan Account Wizard"
+msgstr "Sprievodca účtom Upraviť pôžičku"
+
+#: dialogs/rc.cpp:465
+#, fuzzy
+msgid ""
+"\n"
+"Welcome to the Edit Loan Account Wizard. Please use this wizard to modify "
+"information about your loan account.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"do Upraviť Pôžička Účet Sprievodca do informácie account n informácie Vy "
+"informácie z a."
+
+#: dialogs/rc.cpp:467
+#, fuzzy
+msgid ""
+"\n"
+"In the first step, KMyMoney will ask you some general information about the "
+"loan account to be created."
+msgstr "prvý krok pýtať sa niečo všeobecné informácie account do."
+
+#: dialogs/rc.cpp:468 dialogs/rc.cpp:522 dialogs/rc.cpp:610
+msgid "1. General Information"
+msgstr "1. Všeobecné Informácie"
+
+#: dialogs/rc.cpp:469
+#, fuzzy
+msgid ""
+"\n"
+"2. Calculate Loan\n"
+"\n"
+"3. Payments"
+msgstr "Počítať Pôžička n Platby"
+
+#: dialogs/rc.cpp:470
+msgid "Edit selection"
+msgstr "Upraviť výber"
+
+#: dialogs/rc.cpp:471
+#, fuzzy
+msgid ""
+"\n"
+"Please select, which data of the loan you want to modify."
+msgstr "z do."
+
+#: dialogs/rc.cpp:472
+#, fuzzy
+msgid "Modify the interest rate"
+msgstr "Upraviť"
+
+#: dialogs/rc.cpp:473
+#, fuzzy
+msgid "Modify additional fees"
+msgstr "Upraviť"
+
+#: dialogs/rc.cpp:474
+#, fuzzy
+msgid "Modify other loan information"
+msgstr "Upraviť informácie"
+
+#: dialogs/rc.cpp:475
+#, fuzzy
+msgid "Effective date"
+msgstr "V platnosti dátum"
+
+#: dialogs/rc.cpp:478
+#, fuzzy
+msgid "When should the changes become active?"
+msgstr "aktívny?"
+
+#: dialogs/rc.cpp:479
+#, fuzzy
+msgid "Lending or borrowing money"
+msgstr "alebo"
+
+#: dialogs/rc.cpp:480
+#, fuzzy
+msgid ""
+"\n"
+"Do you borrow or lend money?"
+msgstr "alebo?"
+
+#: dialogs/rc.cpp:483
+msgid "Name of the loan"
+msgstr "Názov pôžičky"
+
+#: dialogs/rc.cpp:484
+#, fuzzy
+msgid ""
+"\n"
+"How do you want to call this loan? Examples for names are 'car loan', "
+"'school loan', 'home owner loan'."
+msgstr "do Príklady pre."
+
+#: dialogs/rc.cpp:486
+msgid "TextLabel6"
+msgstr "TextLabel6"
+
+#: dialogs/rc.cpp:487
+msgid "TextLabel7"
+msgstr "TextLabel7"
+
+#: dialogs/rc.cpp:488
+msgid "Type of interest"
+msgstr "Typ úroku"
+
+#: dialogs/rc.cpp:489
+#, fuzzy
+msgid ""
+"\n"
+"Is the interest of this loan fixed over a period of time or is it adapted "
+"from time to time? If the interest rate changes during the amortization "
+"phase of the loan you should choose the option 'variable interest rate'."
+msgstr "z opravené a z čas alebo je z čas do čas z premenná."
+
+#: dialogs/rc.cpp:490
+msgid "Fixed interest rate"
+msgstr "Fixná úroková miera"
+
+#: dialogs/rc.cpp:491
+msgid "Variable interest rate"
+msgstr "Premenná úroková miera"
+
+#: dialogs/rc.cpp:492
+msgid "Payments?"
+msgstr "Platby?"
+
+#: dialogs/rc.cpp:493
+#, fuzzy
+msgid ""
+"\n"
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?"
+msgstr "akýkoľvek pre alebo?"
+
+#: dialogs/rc.cpp:494
+#, fuzzy
+msgid "No, no payments were made yet."
+msgstr "Nie nie."
+
+#: dialogs/rc.cpp:495
+#, fuzzy
+msgid "Yes, payments were made."
+msgstr "Áno."
+
+#: dialogs/rc.cpp:496
+#, fuzzy
+msgid ""
+"Note: Payments made to obtain the loan (e.g. Dissagio) are not considered as "
+"payments in this context."
+msgstr "Poznámka Platby do e g v."
+
+#: dialogs/rc.cpp:497
+msgid "Recording payments?"
+msgstr "Zaznamenať platby?"
+
+#: dialogs/rc.cpp:498
+#, fuzzy
+msgid ""
+"\n"
+"Do you want to record all payments of this loan with KMyMoney?"
+msgstr "do záznam všetky z?"
+
+#: dialogs/rc.cpp:499
+msgid "Yes, record all payments."
+msgstr "Áno, zaznamenať všetky platby."
+
+#: dialogs/rc.cpp:500
+#, fuzzy
+msgid "No, only record payments since the beginning of this year."
+msgstr "Nie záznam z rok."
+
+#: dialogs/rc.cpp:501
+#, fuzzy
+msgid "Date of next interest change"
+msgstr "Dátum z"
+
+#: dialogs/rc.cpp:502
+#, fuzzy
+msgid ""
+"\n"
+"Select the date when the interest rate for this loan will be modified and "
+"the frequency of the future changes."
+msgstr "dátum pre zmenené a frekvencia z budúci čas."
+
+#: dialogs/rc.cpp:503
+#, fuzzy
+msgid "Next interest change on"
+msgstr "Ďalší zapnuté"
+
+#: dialogs/rc.cpp:504
+#, fuzzy
+msgid "Time until next change"
+msgstr "Čas"
+
+#: dialogs/rc.cpp:506 dialogs/rc.cpp:571
+#, fuzzy
+msgid ""
+"\n"
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr "pre a alebo pole prázdna do."
+
+#: dialogs/rc.cpp:507
+msgid "Current amount"
+msgstr "Aktuálna suma"
+
+#: dialogs/rc.cpp:510
+#, fuzzy
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the amount for principal and interest then enter "
+"it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr "nové alebo pre a pre a n pre pole."
+
+#: dialogs/rc.cpp:512 dialogs/rc.cpp:545
+#, fuzzy
+msgid ""
+"\n"
+"Please enter the interest rate or leave the field empty to calculate it."
+msgstr "alebo pole prázdna do."
+
+#: dialogs/rc.cpp:514
+msgid "Current rate"
+msgstr "Aktuálna miera"
+
+#: dialogs/rc.cpp:516
+#, fuzzy
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the interest rate then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr "nové alebo pre a n pre pole."
+
+#: dialogs/rc.cpp:517
+msgid "Date of first payment"
+msgstr "Dátum prvej splátky"
+
+#: dialogs/rc.cpp:520
+msgid "Calculate Loan"
+msgstr "Vypočítať pôžičku"
+
+#: dialogs/rc.cpp:521
+#, fuzzy
+msgid ""
+"\n"
+"You have successfully entered the general information about your loan. Next, "
+"KMyMoney needs some information about the calculation of the loan."
+msgstr "všeobecné informácie Ďalší niečo informácie z."
+
+#: dialogs/rc.cpp:523 dialogs/rc.cpp:611
+msgid ""
+"\n"
+"2. Calculate Loan"
+msgstr ""
+"\n"
+"2. Vypočítať pôžičku"
+
+#: dialogs/rc.cpp:524 dialogs/rc.cpp:612
+msgid ""
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"3. Platby"
+
+#: dialogs/rc.cpp:526
+#, fuzzy
+msgid ""
+"\n"
+"How often will there be payments made to this loan?"
+msgstr "často do?"
+
+#: dialogs/rc.cpp:527
+msgid "Interest calculation"
+msgstr "Výpočet úroku"
+
+#: dialogs/rc.cpp:528
+msgid ""
+"\n"
+"When does the actual interest rate get calculated?"
+msgstr ""
+
+#: dialogs/rc.cpp:529
+#, fuzzy
+msgid "When the payment is received."
+msgstr "je."
+
+#: dialogs/rc.cpp:530
+#, fuzzy
+msgid "When the payment is due."
+msgstr "je."
+
+#: dialogs/rc.cpp:534 dialogs/rc.cpp:547 dialogs/rc.cpp:560 dialogs/rc.cpp:573
+#: dialogs/rc.cpp:586 dialogs/rc.cpp:598 dialogs/rc.cpp:679
+msgid "Loan amount:"
+msgstr "Suma pôžičky:"
+
+#: dialogs/rc.cpp:535 dialogs/rc.cpp:548 dialogs/rc.cpp:561 dialogs/rc.cpp:574
+#: dialogs/rc.cpp:587 dialogs/rc.cpp:599 dialogs/rc.cpp:633 dialogs/rc.cpp:671
+msgid "Interest rate:"
+msgstr "Úroková miera:"
+
+#: dialogs/rc.cpp:536 dialogs/rc.cpp:549 dialogs/rc.cpp:562 dialogs/rc.cpp:575
+#: dialogs/rc.cpp:588 dialogs/rc.cpp:600 dialogs/rc.cpp:669
+msgid "Term:"
+msgstr ""
+
+#: dialogs/rc.cpp:537 dialogs/rc.cpp:550 dialogs/rc.cpp:563 dialogs/rc.cpp:576
+#: dialogs/rc.cpp:589 dialogs/rc.cpp:601 dialogs/rc.cpp:622 dialogs/rc.cpp:630
+#: dialogs/rc.cpp:677
+msgid "Principal + Interest:"
+msgstr "Kapitál + úrok:"
+
+#: dialogs/rc.cpp:538 dialogs/rc.cpp:551 dialogs/rc.cpp:564 dialogs/rc.cpp:577
+#: dialogs/rc.cpp:583 dialogs/rc.cpp:585 dialogs/rc.cpp:590 dialogs/rc.cpp:602
+#, fuzzy
+msgid "Final amortization payment"
+msgstr "Finálne"
+
+#: dialogs/rc.cpp:557
+#, fuzzy
+msgid "Duration"
+msgstr "Trvanie"
+
+#: dialogs/rc.cpp:558
+#, fuzzy
+msgid ""
+"\n"
+"Please enter the term of this loan or leave the field empty to calculate it. "
+"The term is the time that is required to fully repay the loan. This time "
+"might be different from the time your loan contract is signed for."
+msgstr "pojem z alebo pole prázdna do pojem je čas je do čas z čas je pre."
+
+#: dialogs/rc.cpp:584
+#, fuzzy
+msgid ""
+"\n"
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr "z a alebo pole prázdna do."
+
+#: dialogs/rc.cpp:596
+msgid "Calculation Overview"
+msgstr "Prehľad výpočtu"
+
+#: dialogs/rc.cpp:597
+#, fuzzy
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown in the overview below. You can "
+"accept these values by selecting \"Next\" or change them by choosing \"Back"
+"\" to return to the input field for the information you want to change."
+msgstr "v prehľad Vy Ďalší alebo Dozadu do do pole pre informácie do."
+
+#: dialogs/rc.cpp:609
+#, fuzzy
+msgid ""
+"\n"
+"In the following steps, KMyMoney supports you in setting up categories and "
+"schedules for your loan payments."
+msgstr "v a pre."
+
+#: dialogs/rc.cpp:614
+#, fuzzy
+msgid ""
+"\n"
+"Please select the category you want to assign the interest payments to or "
+"create a new category."
+msgstr "do do alebo a nové."
+
+#: dialogs/rc.cpp:615
+msgid "Additional Fees"
+msgstr "Ďalšie príspevky"
+
+#: dialogs/rc.cpp:616
+#, fuzzy
+msgid ""
+"\n"
+"If your regular payment contains any additional fees, click on the button "
+"\"Additional fees\" to enter them."
+msgstr "previdelný obsahuje akýkoľvek zapnuté do."
+
+#: dialogs/rc.cpp:617
+msgid "= periodical payment:"
+msgstr ""
+
+#: dialogs/rc.cpp:623
+#, fuzzy
+msgid ""
+"If no additional fees are included in your periodical payment or you have "
+"entered all such fees, then click on \"Next\"."
+msgstr "nie v alebo všetky zapnuté Ďalší."
+
+#: dialogs/rc.cpp:625
+#, fuzzy
+msgid ""
+"KMyMoney will create a schedule for this payment and reminds you whenever a "
+"payment must be made.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"a pre a a<p> do záznam všetky dátum do záznam roky<b> Prvý dátum</b> je "
+"dátum z prvý v rok."
+
+#: dialogs/rc.cpp:626
+#, fuzzy
+msgid "First payment due on:"
+msgstr "Prvý zapnuté:"
+
+#: dialogs/rc.cpp:627
+#, fuzzy
+msgid "Make payment from/to:"
+msgstr "Make z do:"
+
+#: dialogs/rc.cpp:629
+#, fuzzy
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown below. If you want to accept these "
+"values use the \"Finish\" button to update your account, otherwise use the "
+"\"Back\" button to modify your settings."
+msgstr "do Dokončiť do account Dozadu do nastavenie."
+
+#: dialogs/rc.cpp:631
+msgid "Additional fees:"
+msgstr "Ďalšie príspevky:"
+
+#: dialogs/rc.cpp:632
+msgid "Total payment:"
+msgstr "Celkový úrok:"
+
+#: dialogs/rc.cpp:634
+msgid "Valid from:"
+msgstr "Platné od:"
+
+#: dialogs/rc.cpp:635
+msgid "Affected payments:"
+msgstr ""
+
+#: dialogs/rc.cpp:645
+#, fuzzy
+msgid "Press this to create a new asset account"
+msgstr "do a nové account"
+
+#: dialogs/rc.cpp:648
+#, fuzzy
+msgid ""
+"\n"
+"This page summarizes the data you entered. If you need to modify anything, "
+"please use the \"Back\" button to go to respective page. Otherwise use the "
+"\"Finish\" button to create the account."
+msgstr "strana do čokoľvek Dozadu do do strana Dokončiť do account."
+
+#: dialogs/rc.cpp:650
+msgid "Payee:"
+msgstr "Príjemca:"
+
+#: dialogs/rc.cpp:653
+msgid "First payment:"
+msgstr "Prvá splátka:"
+
+#: dialogs/rc.cpp:655
+#, fuzzy
+msgid "Amount is:"
+msgstr "Množstvo je:"
+
+#: dialogs/rc.cpp:656
+msgid "Loan calculation"
+msgstr "Výpočet pôžičky"
+
+#: dialogs/rc.cpp:660
+msgid "Periodic Payment:"
+msgstr "Pravidelná splátka:"
+
+#: dialogs/rc.cpp:661
+msgid "Additional Fees:"
+msgstr "Ďalšie príspevky:"
+
+#: dialogs/rc.cpp:662
+msgid "Interest category:"
+msgstr "Kategória úroku:"
+
+#: dialogs/rc.cpp:663
+msgid "Payment from:"
+msgstr "Platba z:"
+
+#: dialogs/rc.cpp:666
+msgid "Next due date:"
+msgstr "Ďalší dátum splatnosti:"
+
+#: dialogs/rc.cpp:673
+msgid "Final Payment:"
+msgstr "Konečná platba:"
+
+#: dialogs/rc.cpp:675
+#, fuzzy
+msgid "Interest is due:"
+msgstr "Príjem je:"
+
+#: dialogs/rc.cpp:680
+msgid "Payment frequency:"
+msgstr "Frekvencia splátky:"
+
+#: dialogs/rc.cpp:682
+#, fuzzy
+msgid "Online Quote Configuration"
+msgstr "Pripojený Nastavenie"
+
+#: dialogs/rc.cpp:687
+#, fuzzy
+msgid "Perl Location:"
+msgstr "Perl Umiestnenie:"
+
+#: dialogs/rc.cpp:688
+msgid "Script:"
+msgstr "Skript:"
+
+#: dialogs/rc.cpp:690
+msgid "Reassign payees"
+msgstr ""
+
+#: dialogs/rc.cpp:691
+msgid ""
+"The transactions associated with the selected payees need to be re-assigned "
+"to a different payee before the selected payees can be deleted. Please "
+"select a payee from the list below."
+msgstr ""
+
+#: dialogs/rc.cpp:692
+msgid "Available payees:"
+msgstr ""
+
+#: dialogs/rc.cpp:693
+msgid "Assign deleted names to the above selected payee's matching list"
+msgstr ""
+
+#: dialogs/rc.cpp:696
+#, fuzzy
+msgid "PluginDlg"
+msgstr "&Moduly"
+
+#: dialogs/rc.cpp:697
+#, fuzzy
+msgid "PlugIn"
+msgstr "&Moduly"
+
+#: dialogs/rc.cpp:698 widgets/transaction.cpp:1071
+#: widgets/transaction.cpp:1658
+#, fuzzy
+msgid "Status"
+msgstr "Stav:"
+
+#: dialogs/rc.cpp:699
+#, fuzzy
+msgid "Feature"
+msgstr "Vytvoriť"
+
+#: dialogs/rc.cpp:703
+msgid "Reconciliation Dialog"
+msgstr "Dialóg Kontroly dát"
+
+#: dialogs/rc.cpp:704
+#, fuzzy
+msgid ""
+"This dialog will assist in helping you to balance your account.\n"
+"\n"
+"Click on an appropriate transaction within one of the two list views to mark "
+"it as reconciled. To create a transaction or edit\n"
+"a transaction you can return to the register by clicking on the Edit "
+"Transactions button.\n"
+"\n"
+"Your account is balanced when the Difference is Zero. Click on the Finish "
+"button to save the reconciled transactions."
+msgstr ""
+"v do account n zapnuté jeden z dva zoznam do Do a alebo úprava do zapnuté "
+"Upraviť n account je Rozdiel je Nula Kliknutie zapnuté Dokončiť do."
+
+#: dialogs/rc.cpp:705
+msgid "Withdrawals"
+msgstr "Výbery"
+
+#: dialogs/rc.cpp:707 dialogs/rc.cpp:708 dialogs/rc.cpp:822
+msgid "$"
+msgstr "$"
+
+#: dialogs/rc.cpp:710
+msgid "Previous Balance:"
+msgstr "Predchádzajúci stav:"
+
+#: dialogs/rc.cpp:711 dialogs/rc.cpp:713 dialogs/rc.cpp:715 dialogs/rc.cpp:717
+#: dialogs/rc.cpp:820
+msgid "0"
+msgstr "0"
+
+#: dialogs/rc.cpp:712
+msgid "Ending Balance:"
+msgstr "Koncový stav:"
+
+#: dialogs/rc.cpp:714
+msgid "Cleared Balance:"
+msgstr "Zmazanie salda:"
+
+#: dialogs/rc.cpp:716
+msgid "Difference:"
+msgstr "Rozdiel:"
+
+#: dialogs/rc.cpp:718
+#, fuzzy
+msgid "Edit Transactions..."
+msgstr "Upraviť.prevody"
+
+#: dialogs/rc.cpp:721
+msgid "Security List Editor"
+msgstr "Editor pre bezpečnostný zoznam"
+
+#: dialogs/rc.cpp:726
+msgid "Market"
+msgstr "Obchod"
+
+#: dialogs/rc.cpp:729
+msgid "Cash Fraction"
+msgstr "Časť Hotovosť"
+
+#: dialogs/rc.cpp:730
+#, fuzzy
+msgid "Add..."
+msgstr "Prid&ať."
+
+#: dialogs/rc.cpp:732 widgets/kmymoneypriceview.cpp:157
+#, fuzzy
+msgid "Delete..."
+msgstr "Zmazať"
+
+#: dialogs/rc.cpp:733
+msgid "Show national currencies"
+msgstr "Zobraziť národné meny"
+
+#: dialogs/rc.cpp:735
+msgid "KMyMoney - Select Database"
+msgstr ""
+
+#: dialogs/rc.cpp:736
+msgid "CAUTION!"
+msgstr ""
+
+#: dialogs/rc.cpp:737
+msgid ""
+"<font color=\"#ff2727\">This software is still in an experimental stage, and "
+"there are still some known response time problems. Please be patient; we are "
+"working on them.\n"
+"As always, please make sure you have adequate backups of your data.</font>"
+msgstr ""
+
+#: dialogs/rc.cpp:738
+#, fuzzy
+msgid "Database Type"
+msgstr "Typ kategórie"
+
+#: dialogs/rc.cpp:739
+#, fuzzy
+msgid "Database Name"
+msgstr "Rozsah dátumov"
+
+#: dialogs/rc.cpp:740
+#, fuzzy
+msgid "Host Name"
+msgstr "Meno výkazu"
+
+#: dialogs/rc.cpp:741
+#, fuzzy
+msgid "User Name"
+msgstr "Užívateľské meno"
+
+#: dialogs/rc.cpp:743
+#, fuzzy
+msgid "Preload &all data"
+msgstr "Osobné Dáta."
+
+#: dialogs/rc.cpp:745
+#, fuzzy
+msgid "&Generate SQL"
+msgstr "Všeobecné"
+
+#: dialogs/rc.cpp:747
+msgid "Ca&ncel"
+msgstr ""
+
+#: dialogs/rc.cpp:762 widgets/rc.cpp:172
+#, fuzzy
+msgid "Sort options"
+msgstr "Možnosti importu"
+
+#: dialogs/rc.cpp:763
+#, fuzzy
+msgid "Use default"
+msgstr "Užívateľom definované"
+
+#: dialogs/rc.cpp:767
+#, fuzzy
+msgid "Correct splits"
+msgstr "Správne"
+
+#: dialogs/rc.cpp:769
+msgid "How do you want to proceed?"
+msgstr ""
+
+#: dialogs/rc.cpp:770
+#, fuzzy
+msgid "Continue to edit splits"
+msgstr "Pokračovať do úprava"
+
+#: dialogs/rc.cpp:771
+#, fuzzy, c-format
+msgid "Change total amount of transaction to %1."
+msgstr "Zmeniť &celkovom z do."
+
+#: dialogs/rc.cpp:772
+#, fuzzy
+msgid "Distribute difference of %1 among all splits."
+msgstr "roz&diel z všetky."
+
+#: dialogs/rc.cpp:773
+#, fuzzy
+msgid "Leave %1 unassigned."
+msgstr "Opustiť."
+
+#: dialogs/rc.cpp:776
+msgid "Split transaction"
+msgstr "Rozdeliť transakciu"
+
+#: dialogs/rc.cpp:777
+msgid "<b>11,00<b>"
+msgstr "<b>11,00<b>"
+
+#: dialogs/rc.cpp:778
+msgid "<b>111,00<b>"
+msgstr "<b>111,00<b>"
+
+#: dialogs/rc.cpp:779
+msgid "Unassigned"
+msgstr "Nepriradené"
+
+#: dialogs/rc.cpp:780
+#, fuzzy
+msgid "Sum of splits"
+msgstr "Suma z"
+
+#: dialogs/rc.cpp:781
+msgid "100,00"
+msgstr "100,00"
+
+#: dialogs/rc.cpp:782
+msgid "Transaction amount"
+msgstr "Výška transakcie"
+
+#: dialogs/rc.cpp:783
+#, fuzzy
+msgid "Merge"
+msgstr "Viac"
+
+#: dialogs/rc.cpp:784
+msgid "Merges splits with the same category to one split"
+msgstr ""
+
+#: dialogs/rc.cpp:785
+msgid ""
+"In case you have multiple split entries to the same category and you like to "
+"keep them as a single split, press this button. The amount for identical "
+"categories will be added and stored in a single split for that category."
+msgstr ""
+
+#: dialogs/rc.cpp:786
+#, fuzzy
+msgid "Clear &Zero"
+msgstr "Očistené"
+
+#: dialogs/rc.cpp:787
+msgid "Removes all splits that have a value of zero."
+msgstr ""
+
+#: dialogs/rc.cpp:791
+msgid "New price entry"
+msgstr "Nový cenový údaj"
+
+#: dialogs/rc.cpp:799
+msgid "Void mark"
+msgstr "Zrušenie značky"
+
+#: dialogs/rc.cpp:800
+#, fuzzy
+msgid "Opening Balance text"
+msgstr "Vyváženosť text"
+
+#: dialogs/rc.cpp:801
+#, fuzzy
+msgid "Type field text"
+msgstr "Typ pole text"
+
+#: dialogs/rc.cpp:802
+msgid "Account delimiter"
+msgstr "Oddelený účet"
+
+#: dialogs/rc.cpp:804
+#, fuzzy
+msgid "Attempt to match similar transactions"
+msgstr "do zodpovedajú"
+
+#: dialogs/rc.cpp:806 dialogs/rc.cpp:808
+#, fuzzy
+msgid "The format of the dates in the QIF file."
+msgstr "z v QIF súbor."
+
+#: dialogs/rc.cpp:809 dialogs/rc.cpp:811
+#, fuzzy
+msgid ""
+"If a QIF file contains date entries with years represented with two digits "
+"then either an apostrophe or a slash may be used to delimit the year in the "
+"dates for certain centuries. This enables 1905 to be distinguished from "
+"2005. Specify here which range of years will have year delimited by an "
+"apostrophe (eg. for Quicken this is usually 1900-1949)."
+msgstr ""
+"a QIF súbor obsahuje dátum roky dva alebo a do rok v pre do z z roky rok pre "
+"je."
+
+#: dialogs/rc.cpp:810
+msgid "Apostrophe Handling"
+msgstr ""
+
+#: dialogs/rc.cpp:812
+msgid "Amounts"
+msgstr "Množstvo"
+
+#: dialogs/rc.cpp:813
+msgid "Field"
+msgstr "Pole"
+
+#: dialogs/rc.cpp:814
+msgid "QIF-Record"
+msgstr "QIF nahrávanie"
+
+#: dialogs/rc.cpp:815 dialogs/rc.cpp:833
+msgid "Decimal Symbol"
+msgstr "Desatinné znamienko"
+
+#: dialogs/rc.cpp:816
+#, fuzzy
+msgid "Thousand Delimiter"
+msgstr "Oddeľovač"
+
+#: dialogs/rc.cpp:817
+msgid "SortColumnInvisible"
+msgstr ""
+
+#: dialogs/rc.cpp:819
+msgid "T"
+msgstr "T"
+
+#: dialogs/rc.cpp:821
+msgid "Split-Value"
+msgstr "Rozdiel-Hodnota"
+
+#: dialogs/rc.cpp:824
+msgid "Commission"
+msgstr "Komisia"
+
+#: dialogs/rc.cpp:825
+msgid "O"
+msgstr "O"
+
+#: dialogs/rc.cpp:826
+msgid "2"
+msgstr "2"
+
+#: dialogs/rc.cpp:828
+msgid "I"
+msgstr "I"
+
+#: dialogs/rc.cpp:829
+msgid "3"
+msgstr "3"
+
+#: dialogs/rc.cpp:831
+msgid "Q"
+msgstr "Q"
+
+#: dialogs/rc.cpp:832
+msgid "4"
+msgstr "4"
+
+#: dialogs/rc.cpp:834
+msgid "Thousands Separator"
+msgstr "Oddeľovač tisícok"
+
+#: dialogs/rc.cpp:836
+#, fuzzy
+msgid "Output filter location"
+msgstr "Výstup filter"
+
+#: dialogs/rc.cpp:837
+#, fuzzy
+msgid "Input filter file type"
+msgstr "Vstup filter súbor typ"
+
+#: dialogs/rc.cpp:838
+msgid "*.qif"
+msgstr "*.qif"
+
+#: dialogs/rc.cpp:839
+#, fuzzy
+msgid "Input filter location"
+msgstr "Vstup filter"
+
+#: dialogs/rc.cpp:843
+#, fuzzy
+msgid "Rename"
+msgstr "Preme&novať"
+
+#: dialogs/kselecttransactionsdlg.cpp:44
+#, fuzzy
+msgid "Select Transaction"
+msgstr "Rozdeliť transakciu"
+
+#: dialogs/kselecttransactionsdlg.cpp:45
+msgid ""
+"Select a transaction and press the OK button or use Cancel to select none."
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:62
+#, fuzzy
+msgid "Investment detail wizard"
+msgstr "Investícia"
+
+#: dialogs/knewinvestmentwizard.cpp:82
+#, fuzzy
+msgid "Security detail wizard"
+msgstr "Bezpečnosť"
+
+#: dialogs/knewaccountdlg.cpp:121 dialogs/knewinvestmentwizard.cpp:109
+msgid ""
+"_: default price mode\n"
+"<default>"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:122 dialogs/knewinvestmentwizard.cpp:110
+#, fuzzy
+msgid "Price per share"
+msgstr "Cena za podiely"
+
+#: dialogs/knewaccountdlg.cpp:123 dialogs/knewinvestmentwizard.cpp:111
+msgid "Total for all shares"
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:129
+#, fuzzy
+msgid "This wizard allows you to modify the selected investment."
+msgstr "a account."
+
+#: dialogs/knewinvestmentwizard.cpp:132
+#, fuzzy
+msgid "This wizard allows you to modify the selected security."
+msgstr "a account."
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid ""
+"The selected symbol is already on file. Do you want to reuse the existing "
+"security?"
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:186
+#, fuzzy
+msgid "Security found"
+msgstr "Bezpečnosť nenájdená"
+
+#: dialogs/knewinvestmentwizard.cpp:309
+msgid "Unable to create all objects for the investment"
+msgstr ""
+
+#: dialogs/keditequityentrydlg.cpp:78
+#, fuzzy
+msgid "Change the price information of the selected entry."
+msgstr "Zmeniť informácie z položka."
+
+#: dialogs/kaccountselectdlg.cpp:64 widgets/kmymoneybriefschedule.cpp:59
+msgid "&Skip"
+msgstr "P&reskočiť"
+
+#: dialogs/kaccountselectdlg.cpp:66 widgets/kmymoneybriefschedule.cpp:61
+msgid "Skip this transaction"
+msgstr "Preskočiť tento prevod"
+
+#: dialogs/kaccountselectdlg.cpp:67
+#, fuzzy
+msgid ""
+"Use this to skip importing this transaction and proceed with the next one."
+msgstr "Použiť do a jeden."
+
+#: dialogs/kaccountselectdlg.cpp:72
+msgid "Create a new account/category"
+msgstr "Vytvoriť nové konto/kategóriu"
+
+#: dialogs/kaccountselectdlg.cpp:73
+#, fuzzy
+msgid "Use this to add a new account/category to the file"
+msgstr "Použiť do a nové account do súbor"
+
+#: dialogs/kaccountselectdlg.cpp:77
+msgid "&Abort"
+msgstr "&Prerušiť"
+
+#: dialogs/kaccountselectdlg.cpp:79
+#, fuzzy
+msgid "Abort the import operation and dismiss all changes"
+msgstr "Zrušiť import a všetky"
+
+#: dialogs/kaccountselectdlg.cpp:80
+#, fuzzy
+msgid ""
+"Use this to abort the import. Your financial data will be in the state "
+"before you started the QIF import."
+msgstr "Použiť do import v QIF import."
+
+#: dialogs/knewaccountdlg.cpp:110
+msgid "Is a sub account"
+msgstr "Je podúčet"
+
+#: dialogs/knewaccountdlg.cpp:184
+#, fuzzy
+msgid "VAT account"
+msgstr "Účet"
+
+#: dialogs/knewaccountdlg.cpp:474
+#, fuzzy
+msgid ""
+"You have not specified a name.\n"
+"Please fill in this field."
+msgstr "Vy a meno v pole."
+
+#: dialogs/knewaccountdlg.cpp:482
+#, fuzzy
+msgid "Please select a parent account."
+msgstr "a account."
+
+#: dialogs/knewaccountdlg.cpp:489 dialogs/knewaccountdlg.cpp:1029
+msgid "<No Institution>"
+msgstr "<žiadna inštitúcia>"
+
+#: dialogs/knewaccountdlg.cpp:552
+msgid ""
+"An account named <b>%1</b> already exists. You cannot create a second "
+"account with the same name."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:567
+msgid ""
+"A category named <b>%1</b> already exists. You cannot create a second "
+"category with the same name."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:596
+#, fuzzy
+msgid ""
+"You have selected to suppress the display of unused categories in the "
+"KMyMoney configuration dialog. The category you just created will therefore "
+"only be shown if it is used. Otherwise, it will be hidden in the accounts/"
+"categories view."
+msgstr "Vy do z nepoužité v konfigurácia je skryté v."
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid "Hidden categories"
+msgstr "Skryté kategórie"
+
+#: dialogs/knewaccountdlg.cpp:927 dialogs/knewaccountdlg.cpp:979
+#, fuzzy, c-format
+msgid "Is a sub account of %1"
+msgstr "Je a account z 1"
+
+#: dialogs/knewaccountdlg.cpp:1082
+msgid "Cannot add institution"
+msgstr ""
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid ""
+"This dialog does not allow to create new payees. Please pick a payee from "
+"the list."
+msgstr ""
+
+#: dialogs/kpayeereassigndlg.cpp:75
+#, fuzzy
+msgid "Payee creation"
+msgstr "Informácie o príjemcovi"
+
+#: dialogs/kimportdlg.cpp:69
+#, fuzzy
+msgid "Use this to start the import operation"
+msgstr "Použiť do štart import"
+
+#: dialogs/kimportdlg.cpp:110
+#, fuzzy
+msgid ""
+"%1|Import files\n"
+"%2|All files (*.*)"
+msgstr "XML n Všetky"
+
+#: dialogs/kimportdlg.cpp:111
+#, fuzzy
+msgid "Import File..."
+msgstr "Importuje sa súbor..."
+
+#: dialogs/knewloanwizard.cpp:124
+msgid "Create a new category"
+msgstr "Vytvoriť novú kategóriu"
+
+#: dialogs/knewloanwizard.cpp:125
+#, fuzzy
+msgid "Use this to open the new account editor"
+msgstr "Použiť do nové account editor"
+
+#: dialogs/knewloanwizard.cpp:129
+msgid "&Additional fees..."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:131
+#, fuzzy
+msgid "Enter additional fees"
+msgstr "Zadať"
+
+#: dialogs/knewloanwizard.cpp:132
+#, fuzzy
+msgid ""
+"Use this to add any additional fees other than principal and interest "
+"contained in your periodical payments."
+msgstr "Použiť do akýkoľvek a v."
+
+#: dialogs/knewloanwizard.cpp:139
+#, fuzzy
+msgid ""
+"Use this to create a new account to which the initial payment should be made"
+msgstr "Použiť do a nové account do"
+
+#: dialogs/knewloanwizard.cpp:208
+#, fuzzy
+msgid "To whom do you make payments?"
+msgstr "Do?"
+
+#: dialogs/knewloanwizard.cpp:209
+msgid "Payments to"
+msgstr "Platby do"
+
+#: dialogs/knewloanwizard.cpp:214
+#, fuzzy
+msgid "From whom do you expect payments?"
+msgstr "Od?"
+
+#: dialogs/knewloanwizard.cpp:215
+msgid "Payments from"
+msgstr "Platby z"
+
+#: dialogs/knewloanwizard.cpp:233
+#, fuzzy
+msgid "Please enter the date, the first payment for this loan was/is due."
+msgstr "dátum prvý pre je."
+
+#: dialogs/knewloanwizard.cpp:235
+#, fuzzy
+msgid ""
+"Note: Consult the loan contract for details of the first due date. Keep in "
+"mind, that the first due date usually differs from the date the contract was "
+"signed"
+msgstr "Poznámka pre z prvý dátum Ponechať v prvý dátum z dátum"
+
+#: dialogs/knewloanwizard.cpp:240
+#, fuzzy
+msgid ""
+"Please enter the original loan amount in the field below or leave it empty "
+"to be calculated."
+msgstr "v pole alebo prázdna do."
+
+#: dialogs/knewloanwizard.cpp:248
+#, fuzzy
+msgid ""
+"Please enter the date, the first payment for this loan was/is due this year."
+msgstr "dátum prvý pre je rok."
+
+#: dialogs/knewloanwizard.cpp:250
+#, fuzzy
+msgid ""
+"Note: You can easily figure out the date of the first payment if you consult "
+"the last statement of last year."
+msgstr "Poznámka Vy dátum z prvý z rok."
+
+#: dialogs/knewloanwizard.cpp:254
+#, fuzzy
+msgid ""
+"Please enter the remaining loan amount of last years final statement in the "
+"field below. You should not leave this field empty."
+msgstr "z roky v pole Vy pole prázdna."
+
+#: dialogs/knewloanwizard.cpp:311 dialogs/knewloanwizard.cpp:326
+#: dialogs/knewloanwizard.cpp:341 dialogs/knewloanwizard.cpp:357
+#: dialogs/knewloanwizard.cpp:373
+msgid "calculate"
+msgstr "Vypočítať"
+
+#: dialogs/knewloanwizard.cpp:417
+msgid "borrowed"
+msgstr "požičané"
+
+#: dialogs/knewloanwizard.cpp:419
+msgid "lend"
+msgstr "požičať"
+
+#: dialogs/knewloanwizard.cpp:423
+msgid "not assigned"
+msgstr "Nepriradené"
+
+#: dialogs/knewloanwizard.cpp:430
+#, fuzzy
+msgid "on reception"
+msgstr "zapnuté"
+
+#: dialogs/knewloanwizard.cpp:432
+msgid "on due date"
+msgstr "Dátum splatnosti"
+
+#: dialogs/knewloanwizard.cpp:471
+#, fuzzy
+msgid ""
+"The loan wizard is unable to calculate two different values for your loan at "
+"the same time. Please enter a value for the %1 on this page or backup to the "
+"page where the current value to be calculated is defined and fill in a "
+"value."
+msgstr "je do dva pre na čas a pre zapnuté strana alebo do strana do je a v a."
+
+#: dialogs/knewloanwizard.cpp:500
+#, fuzzy
+msgid ""
+"You selected, that payments have already been made towards this loan. This "
+"requires you to enter the loan amount exactly as found on your last "
+"statement."
+msgstr "Vy do zapnuté."
+
+#: dialogs/knewloanwizard.cpp:513
+msgid "interest rate"
+msgstr "Úroková miera"
+
+#: dialogs/knewloanwizard.cpp:522
+msgid "term"
+msgstr "pojem"
+
+#: dialogs/knewloanwizard.cpp:532
+msgid "principal and interest"
+msgstr "istina a zisk"
+
+#: dialogs/knewloanwizard.cpp:743
+#, fuzzy, c-format
+msgid ""
+"The number of payments has been decremented and the final payment has been "
+"modified to %1."
+msgstr "číslo z a zmenené do."
+
+#: dialogs/knewloanwizard.cpp:751 dialogs/knewloanwizard.cpp:771
+#, fuzzy, c-format
+msgid "The final payment has been modified to %1."
+msgstr "zmenené do."
+
+#: dialogs/knewloanwizard.cpp:802
+#, fuzzy
+msgid "KMyMoney has calculated a final payment of %1 for this loan."
+msgstr "a z pre."
+
+#: dialogs/knewloanwizard.cpp:817
+#, fuzzy
+msgid ""
+"You have entered mis-matching information. Please backup to the appropriate "
+"page and update your figures or leave one value empty to let KMyMoney "
+"calculate it for you"
+msgstr "Vy informácie do strana a alebo jeden prázdna do pre"
+
+#: dialogs/kfindtransactiondlg.cpp:230
+msgid ""
+"Warning: Filtering by Category will exclude all transfers from the results."
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:239
+msgid "(None)"
+msgstr "(Žiadne)"
+
+#: dialogs/kfindtransactiondlg.cpp:241
+msgid "Current selections: "
+msgstr "Aktuálne výbery: "
+
+#: dialogs/kfindtransactiondlg.cpp:716
+msgid "Found %1 matching transactions (D %2 / P %3 = %4)"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:719
+#, fuzzy
+msgid "Found %1 matching transactions"
+msgstr "Rozdeliť transakciu"
+
+#: dialogs/knewbankdlg.cpp:83
+#, fuzzy
+msgid "The institution name field is empty. Please enter the name."
+msgstr "meno pole je prázdna meno."
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "Adding New Institution"
+msgstr "Pridávam novú Inštitúciu"
+
+#: dialogs/kcsvprogressdlg.cpp:69
+msgid "C&lose"
+msgstr "&Zavrieť"
+
+#: dialogs/kcsvprogressdlg.cpp:247
+msgid " of "
+msgstr "z "
+
+#: widgets/kmymoneypriceview.cpp:126
+msgid "Commodity"
+msgstr "Komodita"
+
+#: widgets/kmymoneypriceview.cpp:130
+msgid "Source"
+msgstr "Zdroj"
+
+#: widgets/kmymoneypriceview.cpp:143
+msgid "Price Options"
+msgstr "Nastavenia ceny"
+
+#: widgets/kmymoneypriceview.cpp:153
+#, fuzzy
+msgid "Online Price Update..."
+msgstr "Aktualizovať cenu online"
+
+#: widgets/kmymoneycombo.cpp:472 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+msgid "From"
+msgstr "Od"
+
+#: widgets/transaction.cpp:668
+#, fuzzy
+msgid "Transaction is missing a category assignment."
+msgstr "Transakcie podľa kategórie"
+
+#: widgets/transaction.cpp:671
+msgid "The transaction has a missing assignment of <b>%1</b>."
+msgstr ""
+
+#: widgets/transaction.cpp:874
+msgid "Sell"
+msgstr "Predaj"
+
+#: widgets/transaction.cpp:876
+msgid "Buy"
+msgstr "Nákup"
+
+#: widgets/kmymoneycombo.cpp:520 widgets/transaction.cpp:879
+#: widgets/transaction.cpp:1447
+msgid "Dividend"
+msgstr "Dividendy"
+
+#: widgets/kmymoneycombo.cpp:518 widgets/transaction.cpp:881
+#: widgets/transaction.cpp:1453
+msgid "Yield"
+msgstr "Výnos"
+
+#: widgets/transaction.cpp:886 widgets/transaction.cpp:1473
+msgid "Activity"
+msgstr "Aktivita"
+
+#: widgets/transaction.cpp:887
+#, fuzzy
+msgid "Investment transaction"
+msgstr "Investičné transakcie"
+
+#: widgets/transaction.cpp:1021 widgets/transaction.cpp:1114
+#: widgets/transaction.cpp:1165
+msgid "*** UNASSIGNED ***"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:517 widgets/transaction.cpp:1435
+#, fuzzy
+msgid "Add shares"
+msgstr "Pridať podiely"
+
+#: widgets/kmymoneycombo.cpp:516 widgets/transaction.cpp:1438
+#, fuzzy
+msgid "Remove shares"
+msgstr "Odstrániť podiely"
+
+#: widgets/kmymoneycombo.cpp:522 widgets/transaction.cpp:1441
+#, fuzzy
+msgid "Buy shares"
+msgstr "Nákup podielov"
+
+#: widgets/kmymoneycombo.cpp:521 widgets/transaction.cpp:1444
+#, fuzzy
+msgid "Sell shares"
+msgstr "Predaj podielov"
+
+#: widgets/transaction.cpp:1450
+msgid "Reinvest Dividend"
+msgstr "Reinvestícia dividend"
+
+#: widgets/kmymoneycombo.cpp:515 widgets/transaction.cpp:1456
+#, fuzzy
+msgid "Split shares"
+msgstr "Predaj podielov"
+
+#: widgets/transaction.cpp:1515
+#, fuzzy
+msgid "Ratio"
+msgstr "Podiel"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:241
+msgid "%1 Bills."
+msgstr "%1 Účtenky"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:257
+msgid "%1 Deposits."
+msgstr "%1 Vklady."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:273
+msgid "%1 Transfers."
+msgstr "%1 Prevody."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:355
+msgid ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+msgstr ""
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:57
+#: widgets/kmymoneyaccounttreeforecast.cpp:84
+#, fuzzy
+msgid "Current"
+msgstr "Mena"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:72
+#: widgets/kmymoneyaccounttreeforecast.cpp:93
+#, fuzzy
+msgid "Total variation"
+msgstr "Importovať overenie"
+
+#: widgets/stdtransactionmatched.cpp:130
+msgid ""
+"KMyMoney has matched a downloaded transaction with a manually entered one "
+"(result above)"
+msgstr ""
+
+#: widgets/stdtransactionmatched.cpp:138
+#, fuzzy
+msgid "Bank entry:"
+msgstr "Prázdny dokument"
+
+#: widgets/stdtransactionmatched.cpp:166
+#, fuzzy
+msgid "Your entry:"
+msgstr "Vaše meno:"
+
+#: widgets/kbudgetvalues.cpp:187
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a monthly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:187 widgets/kbudgetvalues.cpp:206
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"_: Auto assignment (caption)\n"
+"Auto assignment"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:206
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a yearly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"You have entered budget values using a different base which would result in "
+"an individual monthly budget of <b>%1</b>. Should this value be used to fill "
+"the monthly budgets?"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:62
+#, fuzzy
+msgid "Use this button to skip this transaction"
+msgstr "Použiť do záznam"
+
+#: widgets/kmymoneybriefschedule.cpp:67
+#, fuzzy
+msgid "Record this transaction into the register"
+msgstr "Nahrávanie"
+
+#: widgets/kmymoneybriefschedule.cpp:68
+#, fuzzy
+msgid "Use this button to record this transaction"
+msgstr "Použiť do záznam"
+
+#: widgets/kmymoneybriefschedule.cpp:96
+msgid "%1 of %2"
+msgstr "%1 z %2"
+
+#: widgets/kmymoneybriefschedule.cpp:109
+#, fuzzy
+msgid "Payment on %1 for %2 with %3 transactions remaining occuring %4."
+msgstr "Platba zapnuté pre."
+
+#: widgets/kmymoneybriefschedule.cpp:115
+#, fuzzy
+msgid "Payment on %1 for %2 occuring %4."
+msgstr "Platba zapnuté pre."
+
+#: widgets/kmymoneybriefschedule.cpp:136
+#, fuzzy
+msgid "%1 days overdue (%2 occurences)."
+msgstr "dní po termíne."
+
+#: widgets/register.cpp:55
+msgid "Post date"
+msgstr "Dátum odoslania"
+
+#: widgets/register.cpp:56
+#, fuzzy
+msgid "Date entered"
+msgstr "Množstvo"
+
+#: widgets/register.cpp:60
+#, fuzzy
+msgid "Entry order"
+msgstr "Položka dátumu"
+
+#: widgets/register.cpp:63
+#, fuzzy
+msgid "Reconcile state"
+msgstr "Vysporiadané"
+
+#: widgets/register.cpp:440
+#, fuzzy
+msgid ""
+"_: Deposits onto account\n"
+"Deposits"
+msgstr "Opačný účet"
+
+#: widgets/register.cpp:442
+#, fuzzy
+msgid ""
+"_: Payments towards credit card\n"
+"Payments"
+msgstr "Spôsob platby"
+
+#: widgets/register.cpp:446
+#, fuzzy
+msgid ""
+"_: Payments made from account\n"
+"Payments"
+msgstr "Platba account"
+
+#: widgets/register.cpp:448
+#, fuzzy
+msgid ""
+"_: Payments made with credit card\n"
+"Charges"
+msgstr "Spôsob platby"
+
+#: widgets/register.cpp:736
+#, fuzzy
+msgid ""
+"_: Payment made from account\n"
+"Payment"
+msgstr "Platba account"
+
+#: widgets/register.cpp:737
+#, fuzzy
+msgid ""
+"_: Deposit into account\n"
+"Deposit"
+msgstr "Opačný účet"
+
+#: widgets/register.cpp:813
+#, fuzzy
+msgid ""
+"_: Payment made with credit card\n"
+"Charge"
+msgstr "Spôsob platby"
+
+#: widgets/register.cpp:814
+#, fuzzy
+msgid ""
+"_: Payment towards credit card\n"
+"Payment"
+msgstr "Spôsob platby"
+
+#: widgets/register.cpp:818 widgets/register.cpp:824
+msgid ""
+"_: Decrease of asset/liability value\n"
+"Decrease"
+msgstr ""
+
+#: widgets/register.cpp:819 widgets/register.cpp:823
+msgid ""
+"_: Increase of asset/liability value\n"
+"Increase"
+msgstr ""
+
+#: widgets/register.cpp:2280
+#, fuzzy
+msgid "Prior transactions possibly filtered"
+msgstr "Hľadať prevody"
+
+#: widgets/register.cpp:2284
+#, fuzzy
+msgid "Last reconciliation"
+msgstr "Odložiť vysporiadanie"
+
+#: widgets/register.cpp:2291
+#, fuzzy, c-format
+msgid "Online Statement Balance: %1"
+msgstr "Informácie: %1"
+
+#: widgets/register.cpp:2295
+#, fuzzy
+msgid "This year"
+msgstr "Dvakrát za rok"
+
+#: widgets/kmymoneycombo.cpp:674 widgets/register.cpp:2296
+msgid "Last month"
+msgstr "Posledný mesiac"
+
+#: widgets/register.cpp:2297
+#, fuzzy
+msgid "This month"
+msgstr "Posledný mesiac"
+
+#: widgets/register.cpp:2298
+#, fuzzy
+msgid "Last week"
+msgstr "Posledný rok"
+
+#: widgets/register.cpp:2299
+msgid "This week"
+msgstr ""
+
+#: widgets/register.cpp:2300
+msgid "Yesterday"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:666 widgets/register.cpp:2301
+msgid "Today"
+msgstr ""
+
+#: widgets/register.cpp:2302 widgets/register.cpp:2307
+#, fuzzy
+msgid "Future transactions"
+msgstr "Opraviť transakcie"
+
+#: widgets/register.cpp:2303
+#, fuzzy
+msgid "Next week"
+msgstr "Posledný rok"
+
+#: widgets/kmymoneycalendar.cpp:131 widgets/register.cpp:2304
+msgid "Next month"
+msgstr "Nasledujúci mesiac"
+
+#: widgets/kmymoneycombo.cpp:670 widgets/register.cpp:2315
+#, fuzzy
+msgid "Current fiscal year"
+msgstr "Aktuálny rok"
+
+#: widgets/register.cpp:2316
+#, fuzzy
+msgid "Previous fiscal year"
+msgstr "Predchádzajúci rok"
+
+#: widgets/register.cpp:2317
+#, fuzzy
+msgid "Next fiscal year"
+msgstr "Posledný rok"
+
+#: widgets/register.cpp:2349
+#, fuzzy
+msgid ""
+"_: Unknown payee\n"
+"Unknown"
+msgstr "Neznámy príjemca"
+
+#: widgets/register.cpp:2368
+#, fuzzy
+msgid ""
+"_: Unknown category\n"
+"Unknown"
+msgstr "Neznámy príjemca"
+
+#: widgets/register.cpp:2387
+#, fuzzy
+msgid ""
+"_: Unknown security\n"
+"Unknown"
+msgstr "Neznámy Účet"
+
+#: widgets/klistviewsearchline.cpp:249
+#, fuzzy
+msgid "Search Columns"
+msgstr "Zobraziť stĺpce"
+
+#: widgets/klistviewsearchline.cpp:251
+msgid "All Visible Columns"
+msgstr ""
+
+#: widgets/klistviewsearchline.cpp:266
+msgid ""
+"_: Column number %1\n"
+"Column No. %1"
+msgstr ""
+
+#: widgets/klistviewsearchline.cpp:461 widgets/registersearchline.cpp:286
+#, fuzzy
+msgid "S&earch:"
+msgstr "Hľadať"
+
+#: widgets/kmymoneyaccountselector.cpp:110
+#: widgets/kmymoneyaccountselector.cpp:371
+msgid "Income categories"
+msgstr "Príjem"
+
+#: widgets/kmymoneyaccountselector.cpp:349
+#: widgets/kmymoneyaccountselector.cpp:350
+#, fuzzy
+msgid "Favorites"
+msgstr "Obľúbené výkazy"
+
+#: widgets/kmymoneyaccountselector.cpp:357
+msgid "Asset accounts"
+msgstr "Aktíva"
+
+#: widgets/kmymoneyaccountselector.cpp:364
+msgid "Liability accounts"
+msgstr "Pasíva"
+
+#: widgets/kmymoneyaccountselector.cpp:381
+msgid "Expense categories"
+msgstr "Výdaj"
+
+#: widgets/kmymoneyaccountselector.cpp:391
+#, fuzzy
+msgid "Equity accounts"
+msgstr "Upraviť Účet"
+
+#: widgets/kmymoneyaccounttreebase.cpp:120
+#, fuzzy
+msgid "Total Balance"
+msgstr "Saldo"
+
+#: widgets/kmymoneyaccounttreebase.cpp:124
+#, fuzzy
+msgid "Total Value"
+msgstr "Čistá hodnota"
+
+#: widgets/registersearchline.cpp:75
+msgid ""
+"_: label for status combo\n"
+"Stat&us"
+msgstr ""
+
+#: widgets/registersearchline.cpp:79
+#, fuzzy
+msgid "Any status"
+msgstr "Všetky stavy"
+
+#: widgets/registersearchline.cpp:80
+#, fuzzy
+msgid "Imported"
+msgstr "&Importovať"
+
+#: widgets/registersearchline.cpp:81
+#, fuzzy
+msgid "Matched"
+msgstr "Záplaty"
+
+#: widgets/registersearchline.cpp:82
+msgid "Erroneous"
+msgstr ""
+
+#: widgets/registersearchline.cpp:83
+#, fuzzy
+msgid "Not marked"
+msgstr "Neočistené"
+
+#: widgets/kmymoneyaccounttree.cpp:54
+msgid ""
+"_: Column heading for category in tax report\n"
+"Tax"
+msgstr ""
+
+#: widgets/kmymoneyaccounttree.cpp:58
+msgid ""
+"_: Column heading for VAT category\n"
+"VAT"
+msgstr ""
+
+#: widgets/kmymoneywizard.cpp:101
+#, fuzzy
+msgid "Continue with next page"
+msgstr "Pokračovať do úprava"
+
+#: widgets/kmymoneywizard.cpp:103
+#, fuzzy
+msgid "Finish wizard"
+msgstr "Fínska marka"
+
+#: widgets/kmymoneywizard.cpp:121
+#, fuzzy
+msgid "&Back"
+msgstr "Zálohovať"
+
+#: widgets/kmymoneywizard.cpp:122
+#, fuzzy
+msgid "&Next"
+msgstr "&Nový"
+
+#: widgets/kmymoneywizard.cpp:123
+msgid "&Finish"
+msgstr "&Dokončiť"
+
+#: widgets/kmymoneywizard.cpp:274
+#, fuzzy
+msgid "Step %1 of %2"
+msgstr "%1 z %2"
+
+#: widgets/kmymoneydateinput.cpp:235
+#, fuzzy
+msgid ""
+"_: Enter todays date into date input widget\n"
+"T"
+msgstr "Zadať dátum dátum"
+
+#: widgets/transactionform.cpp:302
+msgid "&Deposit"
+msgstr "Vkla&d"
+
+#: widgets/transactionform.cpp:304 widgets/transactionform.cpp:313
+#: widgets/transactionform.cpp:323 widgets/transactionform.cpp:333
+msgid "&Transfer"
+msgstr "&Prenos"
+
+#: widgets/transactionform.cpp:306
+msgid "&Withdrawal"
+msgstr "Výber"
+
+#: widgets/transactionform.cpp:311
+msgid "&Payment"
+msgstr "&Platba"
+
+#: widgets/transactionform.cpp:315
+#, fuzzy
+msgid "&Charge"
+msgstr "Výdavok"
+
+#: widgets/transactionform.cpp:321 widgets/transactionform.cpp:335
+#, fuzzy
+msgid "&Decrease"
+msgstr "Zníženie"
+
+#: widgets/transactionform.cpp:325 widgets/transactionform.cpp:331
+#, fuzzy
+msgid "&Increase"
+msgstr "Nárast"
+
+#: widgets/kmymoneyscheduledcalendar.cpp:42
+msgid "Select Schedules"
+msgstr "Vybrať úlohy"
+
+#: widgets/kmymoneycalendar.cpp:108
+msgid "Select Style"
+msgstr "Vyberte štýl"
+
+#: widgets/kmymoneycalendar.cpp:128
+msgid "Choose Style"
+msgstr "Vyberte štýl"
+
+#: widgets/kmymoneycalendar.cpp:129
+msgid "Next year"
+msgstr "Nasledujúci rok"
+
+#: widgets/kmymoneycalendar.cpp:130
+msgid "Previous year"
+msgstr "Predchádzajúci rok"
+
+#: widgets/kmymoneycalendar.cpp:132
+msgid "Previous month"
+msgstr "Predchádzajúci mesiac"
+
+#: widgets/kmymoneycalendar.cpp:133
+msgid "Select a week"
+msgstr "Vyberte týždeň"
+
+#: widgets/kmymoneycalendar.cpp:134
+msgid "Select a month"
+msgstr "Vyberte mesiac"
+
+#: widgets/kmymoneycalendar.cpp:135
+msgid "Select a year"
+msgstr "Vyberte rok"
+
+#: widgets/kmymoneycalendar.cpp:249
+msgid "Week XX"
+msgstr "Týždeň XX"
+
+#: widgets/kmymoneycalendar.cpp:264 widgets/kmymoneycalendar.cpp:300
+#, c-format
+msgid "Week %1"
+msgstr "Týždeň %1"
+
+#: widgets/rc.cpp:1
+#, fuzzy
+msgid "Account Types"
+msgstr "Účty"
+
+#: widgets/rc.cpp:3
+#, fuzzy
+msgid "Detailed description"
+msgstr "Popis"
+
+#: widgets/rc.cpp:18
+msgid "Period"
+msgstr ""
+
+#: widgets/rc.cpp:21
+msgid "Individual"
+msgstr ""
+
+#: widgets/rc.cpp:23
+#, fuzzy
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Acces to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>Recovery encryption</i> group is only accessible, if the necessary "
+"key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is "
+"found."
+msgstr ""
+"strana do množina pre súbor z<b></b> zapnuté<b> GPG</b><p> do nastavenie je "
+"deaktivované<b> GPG</b> zapnuté systém<b> GPG</b> je funkcia pre "
+"používateľská<p><i> šifrovanie</i> skupina je kľúč pre<b>kmymoney-"
+"recover@users.sourceforge.net</b> je."
+
+#: widgets/rc.cpp:26
+#, fuzzy
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading <i>0x</i>."
+msgstr "Zadať z kľúč do pre šifrovanie e Adresa alebo kľúč z kľúč<i></i>."
+
+#: widgets/rc.cpp:27
+msgid "User ID"
+msgstr "ID užívateľa"
+
+#: widgets/rc.cpp:29
+msgid "Recovery encryption"
+msgstr "Obnoviť šifrovanie"
+
+#: widgets/rc.cpp:30
+#, fuzzy
+msgid "Also encrypt with kmymoney-recover key"
+msgstr "kľúč"
+
+#: widgets/rc.cpp:32
+#, fuzzy
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out."
+msgstr ""
+"Vy do kľúč Len v z private kľúč do dozadu<p> n je pre kľúč a a v a do "
+"odpoveď a menej z."
+
+#: widgets/rc.cpp:51
+msgid "PriceInfo"
+msgstr ""
+
+#: widgets/rc.cpp:52
+msgid "Report Tab"
+msgstr "Karta výkazu"
+
+#: widgets/rc.cpp:53
+#, fuzzy
+msgid "<p>On this tab, you set the basic properties of this report.</p>"
+msgstr "<p> Zapnúť množina z</p>"
+
+#: widgets/rc.cpp:54
+msgid "Report Name"
+msgstr "Meno výkazu"
+
+#: widgets/rc.cpp:55
+#, fuzzy
+msgid "<p>Choose a name for this report.</p>"
+msgstr "<p> a meno pre</p>"
+
+#: widgets/rc.cpp:57
+#, fuzzy
+msgid "<p>Enter a comment to help you remember the details of this report.</p>"
+msgstr "<p> Zadať a komentár do pomocník z</p>"
+
+#: widgets/rc.cpp:58
+#, fuzzy
+msgid "Convert values to base currency"
+msgstr "Previesť do základ"
+
+#: widgets/rc.cpp:59
+msgid ""
+"_: Convert 'em!!\n"
+"<p>Select this option to convert all values in the report to your base "
+"currency.</p><p>Leave it unchecked if you'd like to see values in their "
+"original currency.</p><p>If currencies are not converted, then subtotals "
+"will not be shown.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:60
+#, fuzzy
+msgid "Mark as a favorite report"
+msgstr "Označ a"
+
+#: widgets/rc.cpp:61
+#, fuzzy
+msgid ""
+"<p>Select this option to notate this report as one of your favorites.</"
+"p><p>All your favorite reports are grouped in one place on the report list "
+"for easy access.</p>"
+msgstr "<p> Vybrať do jeden z</p><p> Všetky v jeden zapnuté zoznam pre</p>"
+
+#: widgets/rc.cpp:62 widgets/rc.cpp:88
+msgid "Rows/Columns Tab"
+msgstr "Riadky/stĺpce tab"
+
+#: widgets/rc.cpp:63 widgets/rc.cpp:89
+#, fuzzy
+msgid ""
+"<p>On this tab, you configure how you'd like the rows and columns to be "
+"selected and organized.</p>"
+msgstr "<p> Zapnúť nastavenie d podobný a do a</p>"
+
+#: widgets/rc.cpp:69 widgets/rc.cpp:81
+#, fuzzy
+msgid ""
+"<p>Choose what kind of accounts to display as the rows of this report.</p>"
+msgstr "<p> z do z</p>"
+
+#: widgets/rc.cpp:71
+msgid "Columns"
+msgstr "Stĺpce"
+
+#: widgets/rc.cpp:75
+msgid "Bi-Monthly"
+msgstr "Dvojmesačne"
+
+#: widgets/rc.cpp:78
+#, fuzzy
+msgid "<p>Choose how large of a time period each column should encompass</p>"
+msgstr "<p> z a čas</p>"
+
+#: widgets/rc.cpp:79
+msgid "Income & Expenses"
+msgstr "Príjmy a výdavky"
+
+#: widgets/rc.cpp:80
+msgid "Assets & Liabilities"
+msgstr "Aktíva a pasíva"
+
+#: widgets/rc.cpp:82
+msgid "Rows"
+msgstr "Riadky"
+
+#: widgets/rc.cpp:83
+#, fuzzy
+msgid "Show totals column"
+msgstr "Záporný účet"
+
+#: widgets/rc.cpp:84
+#, fuzzy
+msgid "Average days"
+msgstr "Všetky stavy"
+
+#: widgets/rc.cpp:85
+#, fuzzy
+msgid "Include scheduled transactions"
+msgstr "Plánované prevody"
+
+#: widgets/rc.cpp:86
+#, fuzzy
+msgid "Include transfers"
+msgstr "Prevody"
+
+#: widgets/rc.cpp:87
+#, fuzzy
+msgid "Include unused accounts/categories"
+msgstr "Načítať"
+
+#: widgets/rc.cpp:90
+msgid "Organize by:"
+msgstr "Organizovať podľa:"
+
+#: widgets/rc.cpp:92
+msgid "Top Categories"
+msgstr "Kategórie hore"
+
+#: widgets/rc.cpp:95
+msgid "Top Accounts"
+msgstr "Účty hore"
+
+#: widgets/rc.cpp:98
+#, fuzzy
+msgid "<p>Choose how to group the transactions in this report</p>"
+msgstr "<p> do skupina v</p>"
+
+#: widgets/rc.cpp:99
+msgid "Show Columns"
+msgstr "Zobraziť stĺpce"
+
+#: widgets/rc.cpp:100
+#, fuzzy
+msgid ""
+"<p>Choose which columns should be shown in the report.</p><p>The date and "
+"transaction amount are always shown.</p>"
+msgstr "<p> v</p><p> dátum a</p>"
+
+#: widgets/rc.cpp:102
+#, fuzzy
+msgid "<p>Select this option to show the Memo column</p>"
+msgstr "<p> Vybrať do Poznámka</p>"
+
+#: widgets/rc.cpp:104
+#, fuzzy
+msgid "<p>Select this option to show the Shares column for investments</p>"
+msgstr "<p> Vybrať do Podiely pre</p>"
+
+#: widgets/rc.cpp:106
+#, fuzzy
+msgid "<p>Select this option to show the Price column for investments</p>"
+msgstr "<p> Vybrať do Cena pre</p>"
+
+#: widgets/rc.cpp:108
+#, fuzzy
+msgid "<p>Select this option to show the Reconciled column</p>"
+msgstr "<p> Vybrať do Vysporiadané</p>"
+
+#: widgets/rc.cpp:110
+#, fuzzy
+msgid "<p>Select this option to show the Account column</p>"
+msgstr "<p> Vybrať do Účet</p>"
+
+#: widgets/rc.cpp:112
+#, fuzzy
+msgid "<p>Select this option to show the Number column</p>"
+msgstr "<p> Vybrať do Číslo</p>"
+
+#: widgets/rc.cpp:114
+#, fuzzy
+msgid "<p>Select this option to show the Payee column</p>"
+msgstr "<p> Vybrať do Príjemca</p>"
+
+#: widgets/rc.cpp:116
+#, fuzzy
+msgid "<p>Select this option to show the Category column</p>"
+msgstr "<p> Vybrať do Kategória</p>"
+
+#: widgets/rc.cpp:118
+#, fuzzy
+msgid "<p>Select this option to show the Action column</p>"
+msgstr "<p> Vybrať do Akcia</p>"
+
+#: widgets/rc.cpp:120
+#, fuzzy
+msgid "<p>Select this option to show the Running balance column</p>"
+msgstr "<p> Vybrať do Vysporiadané</p>"
+
+#: widgets/rc.cpp:121
+#, fuzzy
+msgid "Include only Loan accounts"
+msgstr "Investícia"
+
+#: widgets/rc.cpp:122
+#, fuzzy
+msgid "Include only Investment accounts"
+msgstr "Investícia"
+
+#: widgets/rc.cpp:123 widgets/rc.cpp:127
+#, fuzzy
+msgid ""
+"<p>Check this box to include only those categories which have been marked to "
+"\"Include on Tax Reports\"</p>"
+msgstr "<p> Kontrolovať box do include do zapnuté Daň Výkazy</p>"
+
+#: widgets/rc.cpp:124
+#, fuzzy
+msgid "Hide Split Transaction Details"
+msgstr "Detaily prevodu"
+
+#: widgets/rc.cpp:125
+msgid ""
+"Do not display the individual transactions that make up a split transaction"
+msgstr ""
+
+#: widgets/rc.cpp:126
+#, fuzzy
+msgid "Include only Tax categories"
+msgstr "Daň"
+
+#: widgets/rc.cpp:128
+#, fuzzy
+msgid "Chart Tab"
+msgstr "Graf"
+
+#: widgets/rc.cpp:129
+#, fuzzy
+msgid "<p>On this tab, you configure the chart drawn forthis report.</p>"
+msgstr "<p> Zapnúť množina z</p>"
+
+#: widgets/rc.cpp:130
+#, fuzzy
+msgid "Chart Type"
+msgstr "Typ kategórie"
+
+#: widgets/rc.cpp:131
+msgid "<p>Select what form you would like the chart to be drawn as.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:132
+msgid "Line"
+msgstr ""
+
+#: widgets/rc.cpp:133
+msgid "Bar"
+msgstr ""
+
+#: widgets/rc.cpp:134
+msgid "Stacked Bar"
+msgstr ""
+
+#: widgets/rc.cpp:135
+#, fuzzy
+msgid "Pie"
+msgstr "Cena"
+
+#: widgets/rc.cpp:136
+#, fuzzy
+msgid "Ring"
+msgstr "Rozsah"
+
+#: widgets/rc.cpp:137
+#, fuzzy
+msgid "Show grid lines"
+msgstr "Zobraziť a v."
+
+#: widgets/rc.cpp:138
+#, fuzzy
+msgid ""
+"<p>Select this option to show horizontal and vertical grid lines on the "
+"chart.</p>"
+msgstr "<p> Vybrať do Cena pre</p>"
+
+#: widgets/rc.cpp:139
+msgid "Draw values on chart"
+msgstr ""
+
+#: widgets/rc.cpp:140
+#, fuzzy
+msgid ""
+"<p>Select this option to draw the numeric values for data points next to "
+"their plot location.</p>"
+msgstr "<p> Vybrať do Cena pre</p>"
+
+#: widgets/rc.cpp:141
+msgid "Show as chart by default"
+msgstr ""
+
+#: widgets/rc.cpp:142
+msgid ""
+"<p>Select this option to cause the report to be shown as a chart when you "
+"first open the report. Otherwise, it will come up as a text report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:143
+msgid "Line width"
+msgstr ""
+
+#: widgets/rc.cpp:144
+#, fuzzy
+msgid "<p>Select what width should be used to draw the line on the chart</p>"
+msgstr "<p> Vybrať do Cena pre</p>"
+
+#: widgets/rc.cpp:145
+msgid "ReportControl"
+msgstr ""
+
+#: widgets/rc.cpp:149
+msgid "Configure this report"
+msgstr "Nastaviť tento výkaz"
+
+#: widgets/rc.cpp:151
+#, fuzzy
+msgid "Create a new report based on this one"
+msgstr "Vytvoriť a nové zapnuté jeden"
+
+#: widgets/rc.cpp:153
+msgid "Copy this report to the clipboard"
+msgstr "Kopírovať tento výkaz do schránky"
+
+#: widgets/rc.cpp:155
+msgid "Export this report as an HTML or CSV file"
+msgstr "Exportovať tento výkaz do HTML alebo CSV súboru"
+
+#: widgets/rc.cpp:157
+msgid "Permanently delete this report"
+msgstr "Trvalo zmazať tento výkaz"
+
+#: widgets/rc.cpp:159
+msgid "Close this window"
+msgstr "Zavrieť toto okno"
+
+#: widgets/rc.cpp:162
+msgid "n of n"
+msgstr "n z n"
+
+#: widgets/rc.cpp:166
+msgid "Account:"
+msgstr "Účet:"
+
+#: widgets/rc.cpp:168
+msgid "Enter..."
+msgstr "Vložiť..."
+
+#: widgets/rc.cpp:171
+#, fuzzy
+msgid "TransactionSortOptionDecl"
+msgstr "Nastavenia transakcie"
+
+#: widgets/rc.cpp:173
+#, fuzzy
+msgid "Sort order"
+msgstr "Triediť"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Sunday\n"
+"Sun"
+msgstr ""
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Saturday\n"
+"Sat"
+msgstr ""
+
+#: widgets/kmymoneydatetbl.cpp:171 widgets/kmymoneydatetbl.cpp:178
+msgid "Week %1 for year %2."
+msgstr "Týždeň %1 pre rok %2."
+
+#: widgets/kmymoneycombo.cpp:417
+msgid "ATM"
+msgstr "ATM"
+
+#: widgets/kmymoneycombo.cpp:418
+msgid "Withdrawal"
+msgstr "Výber"
+
+#: widgets/kmymoneycombo.cpp:421
+msgid "Cheque"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:469
+#, fuzzy
+msgid ""
+"_: Activity for expense categories\n"
+"Paid"
+msgstr "Výdaj"
+
+#: widgets/kmymoneycombo.cpp:470
+#, fuzzy
+msgid ""
+"_: Activity for income categories\n"
+"Received"
+msgstr "Príjem"
+
+#: widgets/kmymoneycombo.cpp:519
+#, fuzzy
+msgid "Reinvest dividend"
+msgstr "Reinvestícia dividend"
+
+#: widgets/kmymoneycombo.cpp:664
+msgid "All dates"
+msgstr "Všetky dátumy"
+
+#: widgets/kmymoneycombo.cpp:665
+msgid "As of today"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:667
+msgid "Current month"
+msgstr "Aktuálny mesiac"
+
+#: widgets/kmymoneycombo.cpp:668
+#, fuzzy
+msgid "Current quarter"
+msgstr "Aktuálna miera"
+
+#: widgets/kmymoneycombo.cpp:669
+#, fuzzy
+msgid "Current year"
+msgstr "Aktuálny rok"
+
+#: widgets/kmymoneycombo.cpp:671
+msgid "Month to date"
+msgstr "Do mesiaca"
+
+#: widgets/kmymoneycombo.cpp:672
+msgid "Year to date"
+msgstr "Do roka"
+
+#: widgets/kmymoneycombo.cpp:673
+#, fuzzy
+msgid "Year to month"
+msgstr "Každé dva mesiace"
+
+#: widgets/kmymoneycombo.cpp:675
+#, fuzzy
+msgid "Last year"
+msgstr "Posledný rok"
+
+#: widgets/kmymoneycombo.cpp:676
+#, fuzzy
+msgid "Last fiscal year"
+msgstr "Posledný rok"
+
+#: widgets/kmymoneycombo.cpp:677
+#, fuzzy
+msgid "Last 7 days"
+msgstr "Posledných 30 dní"
+
+#: widgets/kmymoneycombo.cpp:678
+msgid "Last 30 days"
+msgstr "Posledných 30 dní"
+
+#: widgets/kmymoneycombo.cpp:679
+msgid "Last 3 months"
+msgstr "Posledné 3 mesiace"
+
+#: widgets/kmymoneycombo.cpp:680
+#, fuzzy
+msgid "Last quarter"
+msgstr "Posledný rok"
+
+#: widgets/kmymoneycombo.cpp:681
+msgid "Last 6 months"
+msgstr "Posledných 6 mesiacov"
+
+#: widgets/kmymoneycombo.cpp:682
+#, fuzzy
+msgid "Last 11 months"
+msgstr "Posledných 12 mesiacov"
+
+#: widgets/kmymoneycombo.cpp:683
+msgid "Last 12 months"
+msgstr "Posledných 12 mesiacov"
+
+#: widgets/kmymoneycombo.cpp:684
+#, fuzzy
+msgid "Next 7 days"
+msgstr "Ďalších 30 dní"
+
+#: widgets/kmymoneycombo.cpp:685
+msgid "Next 30 days"
+msgstr "Ďalších 30 dní"
+
+#: widgets/kmymoneycombo.cpp:686
+msgid "Next 3 months"
+msgstr "Ďalšie 3 mesiace"
+
+#: widgets/kmymoneycombo.cpp:687
+#, fuzzy
+msgid "Next quarter"
+msgstr "Ďalší dátum splatnosti"
+
+#: widgets/kmymoneycombo.cpp:688
+msgid "Next 6 months"
+msgstr "Ďalších 6 mesiacov"
+
+#: widgets/kmymoneycombo.cpp:689
+msgid "Next 12 months"
+msgstr "Ďalších 12 mesiacov"
+
+#: widgets/kmymoneycombo.cpp:690
+#, fuzzy
+msgid "Last 3 months to next 3 months"
+msgstr "Posledné 3 mesiace"
+
+#: widgets/kmymoneycombo.cpp:691
+msgid "User defined"
+msgstr "Užívateľom definované"
+
+#~ msgid "Reset"
+#~ msgstr "Obnoviť"
+
+#~ msgid "Create schedule..."
+#~ msgstr "Vytvoriť.plán"
+
+#, fuzzy
+#~ msgid "New schedule..."
+#~ msgstr "&Nový plán"
+
+#, fuzzy
+#~ msgid "Edit schedule..."
+#~ msgstr "Načítavam.úlohy"
+
+#, fuzzy
+#~ msgid "Delete schedule..."
+#~ msgstr "Vytvoriť.plán"
+
+#, fuzzy
+#~ msgid "Duplicate schedule"
+#~ msgstr "Duplikovať otvorené"
+
+#, fuzzy
+#~ msgid "Enter schedule..."
+#~ msgstr "Vytvoriť.plán"
+
+#, fuzzy
+#~ msgid "Skip schedule..."
+#~ msgstr "Načítavam.úlohy"
+
+#, fuzzy
+#~ msgid "Adjusting schedules..."
+#~ msgstr "Načítavam.úlohy"
+
+#, fuzzy
+#~ msgid "Add schedule"
+#~ msgstr "úlohy\n"
+
+#, fuzzy
+#~ msgid "Unable to enter transaction for schedule '%1'"
+#~ msgstr "do"
+
+#, fuzzy
+#~ msgid "Loaded"
+#~ msgstr "Pôžička"
+
+#, fuzzy
+#~ msgid "not loaded: %1"
+#~ msgstr "Zmazané: %1"
+
+#, fuzzy
+#~ msgid "Schedule options"
+#~ msgstr "Plánovať"
+
+#~ msgid "New Schedule"
+#~ msgstr "Nový plán"
+
+#, fuzzy
+#~ msgid "Edit Schedule"
+#~ msgstr "Upraviť plán účtenky"
+
+#~ msgid "Search transactions containing the following text"
+#~ msgstr "Hľadať text"
+
+#~ msgid "Search"
+#~ msgstr "Hľadať"
+
+#~ msgid "&Search"
+#~ msgstr "&Hľadať"
+
+#~ msgid "Start the search"
+#~ msgstr "Spustí hľadanie"
+
+#, fuzzy
+#~ msgid "Takes the current criteria and searches for matching transactions."
+#~ msgstr "a pre."
+
+#~ msgid "Reset all settings"
+#~ msgstr "Obnoviť všetky nastavenia"
+
+#, fuzzy
+#~ msgid ""
+#~ "Use this to reset all settings to the state they were when the dialog was "
+#~ "opened."
+#~ msgstr "Použiť do všetky nastavenie do."
+
+#, fuzzy
+#~ msgid "Use this button to close the window"
+#~ msgstr "Použiť do okno"
+
+#, fuzzy
+#~ msgid "Multi-user mode not yet implemented\n"
+#~ msgstr "Funkcia nie je dostupná"
+
+#, fuzzy
+#~ msgid "Accept splits and return to transaction form"
+#~ msgstr "Akceptovať a do"
+
+#, fuzzy
+#~ msgid ""
+#~ "Use this to accept all changes to the splits and return to the transaction"
+#~ msgstr "Použiť do všetky do a do"
+
+#, fuzzy
+#~ msgid ""
+#~ "This QIF file contains investment transactions. You are trying to import "
+#~ "this file into an account which is not an investment account. These "
+#~ "transactions will be ignored."
+#~ msgstr "QIF súbor obsahuje Vy do import súbor account je account."
+
+#~ msgid "Invalid account for investments"
+#~ msgstr "Neplatný účet pre investície"
+
+#, fuzzy
+#~ msgid "Problem adding imported transaction: "
+#~ msgstr "Problém "
+
+#, fuzzy
+#~ msgid ""
+#~ "This file contains security entries. These are not currently supported "
+#~ "by the QIF importer."
+#~ msgstr "súbor obsahuje QIF."
+
+#, fuzzy
+#~ msgid "Unable to import"
+#~ msgstr "do import"
+
+#, fuzzy
+#~ msgid "Budget "
+#~ msgstr "Rozpočty"
+
+#, fuzzy
+#~ msgid "Forecast "
+#~ msgstr "Celková výška"
+
+#, fuzzy
+#~ msgid "Budget Total"
+#~ msgstr "Nasledujúci rok"
+
+#, fuzzy
+#~ msgid "Forecast Total"
+#~ msgstr "Celková výška"
+
+#, fuzzy
+#~ msgid "Incomes and Expenses This Month"
+#~ msgstr "Príjem a výdaj pre tento mesiac"
+
+#, fuzzy
+#~ msgid "Incomes"
+#~ msgstr "Príjem"
+
+#, fuzzy
+#~ msgid "Schedules This Month"
+#~ msgstr "Plánované prevody"
+
+#~ msgid "&Ok"
+#~ msgstr "&OK"
+
+#, fuzzy
+#~ msgid "Accepts the value and stores them"
+#~ msgstr "a"
+
+#, fuzzy
+#~ msgid "Use this to accept all values and close the dialog."
+#~ msgstr "Použiť do všetky a."
+
+#~ msgid "Cancel the operation"
+#~ msgstr "Zruší operáciu"
+
+#, fuzzy
+#~ msgid "Use this to dismiss all the changes made in this dialog."
+#~ msgstr "Použiť do všetky v."
+
+#~ msgid "Abort operation"
+#~ msgstr "Ukončiť operáciu"
+
+#, fuzzy
+#~ msgid "Use this to abort the export operation"
+#~ msgstr "Použiť do"
+
+#~ msgid "Start the backup operation"
+#~ msgstr "Začať zálohovanie"
+
+#, fuzzy
+#~ msgid "Cancel the backup operation"
+#~ msgstr "Zrušiť"
+
+#, fuzzy
+#~ msgid "Use this to abort the backup and to return to KMyMoney."
+#~ msgstr "Použiť do a do do."
+
+#, fuzzy
+#~ msgid "Reject all changes to the splits and return to transaction form"
+#~ msgstr "Odmietnuť všetky do a do"
+
+#, fuzzy
+#~ msgid ""
+#~ "Use this to reject all changes to the splits and return to the transaction"
+#~ msgstr "Použiť do všetky do a do"
+
+#~ msgid "Close dialog"
+#~ msgstr "Zavrieť okno"
+
+#, fuzzy
+#~ msgid "Use this to close the dialog and abort the operation"
+#~ msgstr "Použiť do a"
+
+#, fuzzy
+#~ msgid "Use this to accept and store data"
+#~ msgstr "Použiť do a"
+
+#~ msgid "Delete the selected profile"
+#~ msgstr "Odstrániť vybraný profil"
+
+#, fuzzy
+#~ msgid "Use this to delete the selected profile"
+#~ msgstr "Použiť do odstrániť profile"
+
+#, fuzzy
+#~ msgid "Use this to accept the data."
+#~ msgstr "Použiť do."
+
+#~ msgid "Reject all changes to the data and closes the dialog"
+#~ msgstr "Odmietnuť všetky zmeny a zavrieť okno"
+
+#~ msgid "Use this to reject all changes."
+#~ msgstr "Použiť pre odmietnutie všetkých zmien."
+
+#, fuzzy
+#~ msgid "Scan"
+#~ msgstr "&Skenovať"
+
+#, fuzzy
+#~ msgid "Automatically create missing payees"
+#~ msgstr "Automaticky"
+
+#, fuzzy
+#~ msgid "Remove this price information from the price history"
+#~ msgstr "Odstrániť informácie z"
+
+#, fuzzy
+#~ msgid "Create a new price information entry."
+#~ msgstr "Vytvoriť a nové informácie položka."
+
+#, fuzzy
+#~ msgid "Accepts the selected action and continues"
+#~ msgstr "akcia a"
+
+#, fuzzy
+#~ msgid ""
+#~ "Use this to accept the selection and continue processing the transaction"
+#~ msgstr "Použiť do a"
+
+#~ msgid "Reject any changes"
+#~ msgstr "Odmietnuť zmeny"
+
+#, fuzzy
+#~ msgid "Use this to abort the account/category dialog"
+#~ msgstr "Použiť do account"
+
+#~ msgid "Accept modifications"
+#~ msgstr "Akceptovať zmeny"
+
+#, fuzzy
+#~ msgid "Use this to accept the data and possibly create the account/category"
+#~ msgstr "Použiť do a account"
+
+#~ msgid "New ..."
+#~ msgstr "Nový."
+
+#, fuzzy
+#~ msgid "S&ummary"
+#~ msgstr "Súhrn"
+
+#, fuzzy
+#~ msgid "Det&ail"
+#~ msgstr "Detaily"
+
+#, fuzzy
+#~ msgid "Total Incomes This Month"
+#~ msgstr "Príjem a výdaj pre tento mesiac"
+
+#, fuzzy
+#~ msgid "Total Expenses This Month"
+#~ msgstr "Príjem a výdaj pre tento mesiac"
+
+#, fuzzy
+#~ msgid "Scheduled Transfers This Month"
+#~ msgstr "Príjem a výdaj pre tento mesiac"
+
+#, fuzzy
+#~ msgid "&Use the ledger lens"
+#~ msgstr "Použiť"
+
+#~ msgid "&Create"
+#~ msgstr "Vytvoriť"
+
+#, fuzzy
+#~ msgid "Co&nfigure"
+#~ msgstr "Nastaviť"
+
+#, fuzzy
+#~ msgid "Te&xt"
+#~ msgstr "Text"
+
+#~ msgid "Online &Quotes"
+#~ msgstr "Pripojené úvodzovky"
+
+#~ msgid "&Edit ..."
+#~ msgstr "Upraviť."
+
+#~ msgid "&Delete ..."
+#~ msgstr "&Zmazať"
+
+#, fuzzy
+#~ msgid "&Yearly"
+#~ msgstr "Ročne"
+
+#~ msgid "Advanced Institution Settings"
+#~ msgstr "Pokročilé nastavenia inštitúcie"
+
+#~ msgid "OFX Direct Connect Settings"
+#~ msgstr "Nastavenia OFX pripojenia"
+
+#~ msgid "Enable OFX Direct Connect"
+#~ msgstr "Povoliť OFX pripojenie"
+
+#~ msgid "FIORG"
+#~ msgstr "FIORG"
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to retrieve a quote for %1 from %2. Would you like to disable "
+#~ "online price updates for this security?"
+#~ msgstr "Zlyhanie do a pre z podobný do zakázať pripojený pre?"
+
+#, fuzzy
+#~ msgid "Commodity Editor"
+#~ msgstr "Komodita"
+
+#, fuzzy
+#~ msgid "1/"
+#~ msgstr "1 /"
+
+#, fuzzy
+#~ msgid "Account Fraction"
+#~ msgstr "Výber účtu"
+
+#, fuzzy
+#~ msgid "Online Banking"
+#~ msgstr "Nastaviť iBanking"
+
+#~ msgid "R"
+#~ msgstr "R"
+
+#, fuzzy
+#~ msgid "Column 1"
+#~ msgstr "Stĺpce"
+
+#~ msgid "Transaction History"
+#~ msgstr "História transakcií"
+
+#~ msgid "Personal Information"
+#~ msgstr "Osobné informácie"
+
+#~ msgid "TextLabel2"
+#~ msgstr "TextLabel2"
+
+#~ msgid "YTD:"
+#~ msgstr "YTD:"
+
+#~ msgid "TextLabel4"
+#~ msgstr "TextLabel4"
+
+#, fuzzy
+#~ msgid "Online update using OFX..."
+#~ msgstr "Pripojený."
+
+#, fuzzy
+#~ msgid "Match Transaction..."
+#~ msgstr "Upraviť.prevody"
+
+#, fuzzy
+#~ msgid "Match With This Transaction"
+#~ msgstr "Preskočiť tento prevod"
+
+#~ msgid "Import %1 Statement..."
+#~ msgstr "Import %1 informácie."
+
+#, fuzzy
+#~ msgid "Unable to import <b>%1</b> file. There is no such plugin loaded."
+#~ msgstr "do import<b></b> súbor je nie modul načítané."
+
+#~ msgid "Function not available"
+#~ msgstr "Funkcia nie je dostupná"
+
+#~ msgid "Edit an account"
+#~ msgstr "Upraviť účet"
+
+#, fuzzy
+#~ msgid ""
+#~ "The currently opened KMyMoney document does not contain a single asset "
+#~ "account. In order to maintain your finances you need at least one asset "
+#~ "account (e.g. your checkings account). KMyMoney will start the \"New "
+#~ "Account Wizard\" now which allows you to create your first asset account."
+#~ msgstr ""
+#~ "obsahuje a singel account do na jeden account e g account štart Nový Účet "
+#~ "Sprievodca teraz do prvý account."
+
+#~ msgid "No asset account"
+#~ msgstr "Záporný účet"
+
+#~ msgid "%1 (Plugin)..."
+#~ msgstr "%1 (Plugin)..."
+
+#~ msgid "GnuCash Importer"
+#~ msgstr "GnuCash Importer"
+
+#, fuzzy
+#~ msgid "Open Configuration Dialog"
+#~ msgstr "Nastavenie pomocníka"
+
+#, fuzzy
+#~ msgid "Importing templates..."
+#~ msgstr "Načítavam.šablóny..."
+
+#~ msgid "Until today"
+#~ msgstr "Do dnes"
+
+#~ msgid "Tax Transactions"
+#~ msgstr "Daň z prevodu"
+
+#, fuzzy
+#~ msgid "Unable to parse date %1 using format %2: %3"
+#~ msgstr "do dátum 3"
+
+#, fuzzy
+#~ msgid "Pa&yee"
+#~ msgstr "Príjemca"
+
+#, fuzzy
+#~ msgid "Return"
+#~ msgstr "S&pustiť"
+
+#, fuzzy
+#~ msgid "Summar&y"
+#~ msgstr "Súhrn"
+
+#~ msgid "one month"
+#~ msgstr "jeden mesiac"
+
+#~ msgid "one year"
+#~ msgstr "jeden rok"
+
+#~ msgid "one payment"
+#~ msgstr "jeden úrok"
+
+#~ msgid "Every four week"
+#~ msgstr "Každý štvrtý týždeň"
+
+#, fuzzy
+#~ msgid "E&dit"
+#~ msgstr "Upraviť..."
+
+#, fuzzy
+#~ msgid "De&lete"
+#~ msgstr "Vymazať..."
+
+#, fuzzy
+#~ msgid "Ne&w"
+#~ msgstr "Nová"
+
+#, fuzzy
+#~ msgid "Change into one of the directories and select the desired file."
+#~ msgstr "Zmeniť jeden z a súbor."
+
+#, fuzzy
+#~ msgid "*.kmt|Account templates"
+#~ msgstr "Účet"
+
+#, fuzzy
+#~ msgid "Select account template(s)"
+#~ msgstr "Vybrať account s"
+
+#, fuzzy
+#~ msgid ""
+#~ "Input file cannot be parsed; may be corrupt\n"
+#~ "%s"
+#~ msgstr "Vstup súbor n s"
+
+#, fuzzy
+#~ msgid "Duplicate split"
+#~ msgstr "Duplikovať otvorené"
+
+#, fuzzy
+#~ msgid "Convert 'em!!"
+#~ msgstr "Previesť!"
+
+#~ msgid "Outbox"
+#~ msgstr "Pošta na odoslanie"
+
+#~ msgid "AqBanking importer ..."
+#~ msgstr "AqBanking importer ..."
+
+#, fuzzy
+#~ msgid "Online update using HBCI..."
+#~ msgstr "Pripojený."
+
+#, fuzzy
+#~ msgid ""
+#~ "In order to map this account to an HBCI account, the account's "
+#~ "institution must have a bank code assigned. Please assign one before "
+#~ "continuing."
+#~ msgstr "do account do account account s a jeden."
+
+#, fuzzy
+#~ msgid ""
+#~ "In order to map this account to an HBCI account, this account must have "
+#~ "an account number assigned."
+#~ msgstr "do account do account account account číslo."
+
+#, fuzzy
+#~ msgid "Error importing statement."
+#~ msgstr "Chyba."
+
+#~ msgid "&Split"
+#~ msgstr "Rozdelenia"
+
+#, fuzzy
+#~ msgid "Split the amount into different categories."
+#~ msgstr "Rozdeliť."
+
+#~ msgid "&Bills/Deposits"
+#~ msgstr "Zmenky/vklady"
+
+#~ msgid "&Reports"
+#~ msgstr "Výkazy"
+
+#~ msgid "Add new account..."
+#~ msgstr "Pridať nový účet..."
+
+#~ msgid "Reconcile ..."
+#~ msgstr "Vysporiadať..."
+
+#~ msgid "Add new transaction"
+#~ msgstr "Pridať novú transakciu"
+
+#, fuzzy
+#~ msgid ""
+#~ "The next dialog allows you to add predefined account/category templates "
+#~ "to the new file. Different languages are available to select from. You "
+#~ "can skip loading any template now by selecting <b>Cancel</b> from the "
+#~ "next dialog. If you wish to add more templates later, you can restart "
+#~ "this operation by selecting <b>File/Import/Account Templates</b>."
+#~ msgstr ""
+#~ "do account do nové súbor do z Vy akýkoľvek teraz<b> Zrušiť</b> z do "
+#~ "viac<b> Súbor Import Účet Šablóny</b>."
+
+#, fuzzy
+#~ msgid ""
+#~ "*.kmy|KMyMoney files\n"
+#~ "*.xml|XML Files\n"
+#~ "*.ANON.xml|Anonymous Files\n"
+#~ "*.*|All files"
+#~ msgstr "n XML Súbory n Anonymne Súbory n Všetky"
+
+#~ msgid "Toggling toolbar..."
+#~ msgstr "Prepínam panel nástrojov..."
+
+#~ msgid "Toggle the statusbar..."
+#~ msgstr "Prepínam stavový riadok..."
+
+#, fuzzy
+#~ msgid ""
+#~ "This function is used by the developers to\n"
+#~ "\n"
+#~ "perform a dump of the engine's data in memory."
+#~ msgstr "funkcia je do n a z s v pamäť."
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to autoEnter schedule %1. Please check manually!\n"
+#~ "Debug data has been copied to clipboard; please paste into an\n"
+#~ "email and send to kmymoney2-developer@lists.sourceforge.net"
+#~ msgstr ""
+#~ "do kontrola do schránka a dokmymoney2-developer@lists.sourceforge.net"
+
+#, fuzzy
+#~ msgid "%1 caught in %2 at line %3"
+#~ msgstr "v na riadok 3"
+
+#~ msgid "Cannot remove account from institution"
+#~ msgstr "Nemôžete odstrániť účet v tejto inštitúcii"
+
+#~ msgid "Moving account"
+#~ msgstr "Presun účtu"
+
+#~ msgid "Cannot move account"
+#~ msgstr "Nemôžete presunúť účet"
+
+#~ msgid "Cannot move account to institution"
+#~ msgstr "Nemôžete presunúť účet do tejto inštitúcie"
+
+#~ msgid "Show Top Categories Only"
+#~ msgstr "Zobraziť len vrchné kategórie"
+
+#, fuzzy
+#~ msgid ""
+#~ "<p>Select this option to summarize all sub-categories into a single line "
+#~ "for each Top Category.</p><p>(e.g. Values for Computers:Hardware and "
+#~ "Computers:Software will all be shown on the Computers line)</p>"
+#~ msgstr ""
+#~ "<p> Vybrať do všetky a singel riadok pre Hore Kategória</p><p> e g "
+#~ "Hodnoty pre Počítače a Počítače Software všetky zapnuté Počítače riadok</"
+#~ "p>"
+
+#~ msgid "Transfer to/from %1"
+#~ msgstr "Preniesť do/z %1"
+
+#, fuzzy
+#~ msgid "Unable to add category"
+#~ msgstr "do"
+
+#~ msgid "Securities"
+#~ msgstr "Cenné papiere"
+
+#~ msgid "Reconciled: %1"
+#~ msgstr "Vysporiadané: %1"
+
+#~ msgid "You currently owe: "
+#~ msgstr "Vaše aktuálne dlhy"
+
+#, fuzzy
+#~ msgid "There is no user manual yet"
+#~ msgstr "je nie používateľská príručka"
+
+#, fuzzy
+#~ msgid "Unable to setup payee/receiver"
+#~ msgstr "do"
+
+#, fuzzy
+#~ msgid "Unable to modify split"
+#~ msgstr "do"
+
+#, fuzzy
+#~ msgid "Unable to modify category"
+#~ msgstr "do"
+
+#, fuzzy
+#~ msgid "Unable to modify number"
+#~ msgstr "do číslo"
+
+#, fuzzy
+#~ msgid "Unable to modify type"
+#~ msgstr "do typ"
+
+#~ msgid "&Check"
+#~ msgstr "Šek"
+
+#~ msgid "AT&M"
+#~ msgstr "AT&M"
+
+#, fuzzy
+#~ msgid ""
+#~ "An investment transaction can only be modified in the investment view. Do "
+#~ "you want to change to the investment view?"
+#~ msgstr "zmenené v do do?"
+
+#~ msgid "Account Options"
+#~ msgstr "Nastavenia účtu"
+
+#~ msgid "Account Details ..."
+#~ msgstr "Detaily.účtu"
+
+#~ msgid "Mark as ..."
+#~ msgstr "Označ ako..."
+
+#~ msgid "Move to account ..."
+#~ msgstr "Presunúť na účet... "
+
+#, fuzzy
+#~ msgid "Moving a split to a different account is not yet implemented"
+#~ msgstr "Premiestňujem a do a account je"
+
+#, fuzzy
+#~ msgid ""
+#~ "You are about to delete the selected transaction. Do you really want to "
+#~ "continue?"
+#~ msgstr "Vy do odstrániť do?"
+
+#~ msgid "New Account..."
+#~ msgstr "Nový účet..."
+
+#~ msgid "KMyMoney Options"
+#~ msgstr "Nastavenia KMyMoney"
+
+#~ msgid "Really delete this institution: "
+#~ msgstr "Naozaj odstrániť inštitúciu:"
+
+#~ msgid "Cannot delete account: "
+#~ msgstr "Nemôžem odstrániť účet:"
+
+#, fuzzy
+#~ msgid ""
+#~ "You have specified to encrypt your data but you have not provided a user-"
+#~ "id. Please make sure to setup a valid user id. This time, encryption is "
+#~ "disabled."
+#~ msgstr ""
+#~ "Vy do a používateľská do a používateľská čas šifrovanie je deaktivované."
+
+#~ msgid "Cannot add bank"
+#~ msgstr "Nepodarilo sa pridať banku"
+
+#~ msgid "Create new KMyMoney file"
+#~ msgstr "Vytvoriť nový kMyMoney súbor"
+
+#~ msgid "Cannot edit personal data"
+#~ msgstr "Nemôžem upraviť osobné dáta"
+
+#, fuzzy
+#~ msgid "*.dat|Account templates"
+#~ msgstr "Účet"
+
+#~ msgid "Select account template"
+#~ msgstr "Vybrať šablonu konta"
+
+#, fuzzy
+#~ msgid "Cannot find the data file containing the default categories"
+#~ msgstr "Hľadať súbory súbor štandardné"
+
+#~ msgid "Loading default accounts"
+#~ msgstr "Načítavam štandardné kontá"
+
+#~ msgid "Ready"
+#~ msgstr "Pripravený"
+
+#~ msgid "Show transactionform"
+#~ msgstr "Zobraziť transakcie"
+
+#, fuzzy
+#~ msgid ""
+#~ "Use this to finish reconciling your account against the bank statement."
+#~ msgstr "Použiť do dokončiť account."
+
+#~ msgid "&Postpone"
+#~ msgstr "Odložiť"
+
+#, fuzzy
+#~ msgid ""
+#~ "Use this to postpone reconciling your account against the bank statement "
+#~ "to a later point in time."
+#~ msgstr "Použiť do account do a bod v čas."
+
+#~ msgid "&Account Details"
+#~ msgstr "Det&aily účtu"
+
+#~ msgid "Open the account dialog"
+#~ msgstr "Otvoriť okno s účtom"
+
+#, fuzzy
+#~ msgid "Use this view and modify the account details."
+#~ msgstr "Použiť a account."
+
+#~ msgid "&Reconcile ..."
+#~ msgstr "Vyspo&riadať..."
+
+#~ msgid "Start the account reconciliation"
+#~ msgstr "Začiatok vysporiadania účtu"
+
+#, fuzzy
+#~ msgid "Use this to reconcile your account against the bank statement."
+#~ msgstr "Použiť do account."
+
+#, fuzzy
+#~ msgid ""
+#~ "<center><b>Reconcile account</b></center><hr>\n"
+#~ "<b>1.</b> Click on column 'C' to clear the transactions appearing on your "
+#~ "bank statement."
+#~ msgstr ""
+#~ "<center><b> Vysporiadať account</b></center><hr>\n"
+#~ "<b></b> Kliknutie zapnuté C do zapnuté."
+
+#, fuzzy
+#~ msgid ""
+#~ "<b>2.</b> Match the cleared transactions with the amount noted on your "
+#~ "bank statement.<br>"
+#~ msgstr "<b></b> Zhoda zapnuté<br>"
+
+#~ msgid "Cleared:"
+#~ msgstr "Očistené:"
+
+#, fuzzy
+#~ msgid "<p><b>3.</b> Hit the Finish button when you're done."
+#~ msgstr "<p><b></b> Dokončiť."
+
+#~ msgid "Loan Payment"
+#~ msgstr "Splátka pôžičky"
+
+#, fuzzy
+#~ msgid ""
+#~ "*.csv|CSV files\n"
+#~ "*.html|HTML files\n"
+#~ "*.*|All files"
+#~ msgstr "CSV n html HTML n Všetky"
+
+#~ msgid "Account register"
+#~ msgstr "Registrácia účtu"
+
+#, fuzzy
+#~ msgid "Cannot edit category: "
+#~ msgstr "úprava "
+
+#~ msgid "Symbol Name"
+#~ msgstr "Meno symbolu"
+
+#, fuzzy
+#~ msgid "Modify the loan details for this loan"
+#~ msgstr "Upraviť pre"
+
+#, fuzzy
+#~ msgid ""
+#~ "Use this to start a wizard that allows changing the details for this loan."
+#~ msgstr "Použiť do štart a pre."
+
+#~ msgid "To"
+#~ msgstr "Do"
+
+#, fuzzy
+#~ msgid ""
+#~ "The price history for <b>%1</b> does not contain an entry for <b>%2</b>. "
+#~ "Do you want to add a new entry in the history based on the price of this "
+#~ "transaction?"
+#~ msgstr ""
+#~ "pre<b></b> obsahuje položka pre<b></b> do a nové položka v zapnuté z?"
+
+#~ msgid "Add price info"
+#~ msgstr "Pridať informácie o cene"
+
+#, fuzzy
+#~ msgid ""
+#~ "The price history for <b>%1</b> contains a different price for <b>%2</"
+#~ "b>. Do you want to update the price in the history to the one of this "
+#~ "transaction?"
+#~ msgstr "pre<b></b> obsahuje a pre<b></b> do v do jeden z?"
+
+#~ msgid "Update price info"
+#~ msgstr "Aktualizovať informácie o cene"
+
+#, fuzzy
+#~ msgid "Unable to add/modify security"
+#~ msgstr "do"
+
+#, fuzzy
+#~ msgid ""
+#~ "The %1 <b>%2</b> uses a different currency than the selected investment. "
+#~ "Please make sure to enter all values for this transaction in <b>%2</b>. "
+#~ "When you save this transaction you will have the chance to enter the "
+#~ "necessary conversion rates."
+#~ msgstr "<b></b> a do všetky pre v<b></b> do."
+
+#~ msgid "Stock security"
+#~ msgstr "Cenné papiere"
+
+#~ msgid "C&harge"
+#~ msgstr "Výdavok"
+
+#~ msgid "$ Gain"
+#~ msgstr "$ Zisk"
+
+#~ msgid "1 Week %"
+#~ msgstr "1 týždeň %"
+
+#~ msgid "4 Weeks %"
+#~ msgstr "4 týždne %"
+
+#~ msgid "3 Months %"
+#~ msgstr "3 mesiace %"
+
+#~ msgid "YTD %"
+#~ msgstr "YTD %"
+
+#~ msgid "On-line Price Update ..."
+#~ msgstr "On-line aktualizácia ceny..."
+
+#~ msgid "New payee..."
+#~ msgstr "Nový.príjemca..."
+
+#~ msgid "Bill Options"
+#~ msgstr "Nastavenia účtenky"
+
+#~ msgid "New Bill..."
+#~ msgstr "Nová účtenka..."
+
+#~ msgid "Deposit Options"
+#~ msgstr "Nastavenia vkladu"
+
+#~ msgid "New Deposit..."
+#~ msgstr "Nový vklad..."
+
+#~ msgid "Transfer Options"
+#~ msgstr "Nastavenia prevodu"
+
+#~ msgid "New Transfer..."
+#~ msgstr "Nový prevod"
+
+#~ msgid "Personal Equity"
+#~ msgstr "Osobný majetok"
+
+#, fuzzy
+#~ msgid "Transfer %1 %2"
+#~ msgstr "Preniesť 2"
+
+#~ msgid "Edit Transfer Schedule"
+#~ msgstr "Upraviť plán prevodu"
+
+#~ msgid "Edit Loan Payment Schedule"
+#~ msgstr "Upraviť plán splácania pôžičky"
+
+#~ msgid "Edit Deposit Schedule"
+#~ msgstr "Upraviť plán prevodu"
+
+#~ msgid "Direct Debit"
+#~ msgstr "Priamy dlh"
+
+#~ msgid "Direct Deposit"
+#~ msgstr "Priamy vklad"
+
+#, fuzzy
+#~ msgid "Manual Deposit"
+#~ msgstr "Ručný vklad"
+
+#~ msgid "Write Check"
+#~ msgstr "Zapísať šek"
+
+#, fuzzy
+#~ msgid "Please specify the account first before you assign splits."
+#~ msgstr "account prvý."
+
+#, fuzzy
+#~ msgid "Exception in slot split clicked"
+#~ msgstr "v slot"
+
+#, fuzzy
+#~ msgid ""
+#~ "The frequency of this schedule must be set to something other than Once"
+#~ msgstr "frekvencia z množina do niečo Raz"
+
+#, fuzzy
+#~ msgid "Please fill in the name field."
+#~ msgstr "v meno pole."
+
+#, fuzzy
+#~ msgid "Please fill in the From account field."
+#~ msgstr "v Od account pole."
+
+#, fuzzy
+#~ msgid "Please fill in the To account field."
+#~ msgstr "v Do account pole."
+
+#, fuzzy
+#~ msgid "Please fill in the payee field."
+#~ msgstr "v pole."
+
+#, fuzzy
+#~ msgid "Please fill in the category field."
+#~ msgstr "v pole."
+
+#, fuzzy
+#~ msgid "Please fill in ending date"
+#~ msgstr "v dátum"
+
+#, fuzzy
+#~ msgid "Account from and account to are the same"
+#~ msgstr "Účet z a account do"
+
+#, fuzzy
+#~ msgid "Exception in loadWidgetsFromSchedule(1)"
+#~ msgstr "v"
+
+#, fuzzy
+#~ msgid "Exception in loadWidgetsFromSchedule(2)"
+#~ msgstr "v"
+
+#, fuzzy
+#~ msgid "All split data lost. Please re-enter splits"
+#~ msgstr "Všetky"
+
+#, fuzzy
+#~ msgid "Error in slotAmountChanged?"
+#~ msgstr "Chyba v?"
+
+#, fuzzy
+#~ msgid ""
+#~ "The schedule can not be automatically entered when the start date is on "
+#~ "or before todays date."
+#~ msgstr "štart dátum je zapnuté alebo dátum."
+
+#, fuzzy
+#~ msgid "The end date can not be set for occurences set to Once"
+#~ msgstr "dátum množina pre množina do Raz"
+
+#, fuzzy
+#~ msgid ""
+#~ "The start date must be greater than today, to automatically enter this "
+#~ "schedule."
+#~ msgstr "štart dátum väčší dnes do."
+
+#~ msgid "Withdrawal or Transfer"
+#~ msgstr "Výber alebo transfer"
+
+#, fuzzy
+#~ msgid ""
+#~ "You have specified an %1 category for a %2 schedule. Do you want to keep "
+#~ "it that way?"
+#~ msgstr "Vy pre a do?"
+
+#~ msgid "Verify category type"
+#~ msgstr "Overiť typ kategórie"
+
+#~ msgid "Bill or Transfer"
+#~ msgstr "Účtenka alebo transfer"
+
+#~ msgid "Cancel the import operation"
+#~ msgstr "Zrušiť operáciu"
+
+#, fuzzy
+#~ msgid ""
+#~ "Use this to abort the import and undo all changes made during import."
+#~ msgstr "Použiť do import a všetky import."
+
+#, fuzzy
+#~ msgid ""
+#~ "You are about to cancel the entire import. Any changes you have made in "
+#~ "this dialog will be lost. Are you sure you want to cancel?"
+#~ msgstr "Vy do import Ľubovoľné v do?"
+
+#~ msgid "Verify cancel"
+#~ msgstr "Overiť odvolanie"
+
+#, fuzzy
+#~ msgid ""
+#~ "The imported data is displayed together with the data already stored in "
+#~ "the file. Imported transactions are shown with a yellow background. "
+#~ "Pressing \"OK\" will accept all transactions, \"Cancel\" will remove all "
+#~ "imported transactions.\n"
+#~ "You may modify the transactions - if need to - before you press \"OK\" or "
+#~ "even delete transactions that have been imported incorrectly (e.g. "
+#~ "duplicate transactions)."
+#~ msgstr ""
+#~ "je v súbor Importované a pozadie OK všetky Zrušiť všetky do OK alebo "
+#~ "odstrániť e g."
+
+#~ msgid "General settings"
+#~ msgstr "Všeobecné nastavenia"
+
+#, fuzzy
+#~ msgid "Equity/Currency/Value options"
+#~ msgstr "Majetok Mena Hodnota"
+
+#~ msgid "Accounts View"
+#~ msgstr "Pohľad kônt"
+
+#~ msgid "Accounts view settings"
+#~ msgstr "Nastavenia pohľadu kônt"
+
+#, fuzzy
+#~ msgid "Use the normal institution view"
+#~ msgstr "Použiť normálna"
+
+#, fuzzy
+#~ msgid "Use the new accounts view"
+#~ msgstr "Použiť nové"
+
+#, fuzzy
+#~ msgid "Restrict by date"
+#~ msgstr "dátum"
+
+#~ msgid "Data Encryption Settings"
+#~ msgstr "Nastavenia šifrovacích dát"
+
+#~ msgid "List view colour :"
+#~ msgstr "Farba zoznamu:"
+
+#~ msgid "Mount Point:"
+#~ msgstr "Bod pripojenia:"
+
+#~ msgid "textLabel2"
+#~ msgstr "textLabel2"
+
+#~ msgid "Edit Scheduled Transfer"
+#~ msgstr "Upraviť plánovaný prevod"
+
+#, fuzzy
+#~ msgid "Pay to:"
+#~ msgstr "Zaplatiť do:"
+
+#~ msgid "From:"
+#~ msgstr "Od:"
+
+#~ msgid "To:"
+#~ msgstr "Do:"
+
+#~ msgid "Amount:"
+#~ msgstr "Suma:"
+
+#~ msgid "Category:"
+#~ msgstr "Kategória:"
+
+#~ msgid "Memo:"
+#~ msgstr "Poznámka:"
+
+#~ msgid "<b>Name:</b>"
+#~ msgstr "<b>Meno:</b>"
+
+#~ msgid "<b>Type:</b>"
+#~ msgstr "<b>Typ:</b>"
+
+#~ msgid "<b>Payee:</b>"
+#~ msgstr "<b>Príjemca:</b>"
+
+#~ msgid "<b>Category:</b>"
+#~ msgstr "<b>Kategória:</b>"
+
+#, fuzzy
+#~ msgid "<b>From (account):</b>"
+#~ msgstr "<b>Z (účtu):</b>"
+
+#~ msgid "<b>Memo:</b>"
+#~ msgstr "<b>Poznámka:</b>"
+
+#, fuzzy
+#~ msgid "<b>To (account):</b>"
+#~ msgstr "<b>Na (účet):</b>"
+
+#~ msgid "<b>Date:</b>"
+#~ msgstr "<b>Dátum:</b>"
+
+#~ msgid "<b>Amount:</b>"
+#~ msgstr "<b>Suma:</b>"
+
+#~ msgid "to"
+#~ msgstr "do"
+
+#~ msgid "from"
+#~ msgstr "z"
+
+#~ msgid "Equity-Symbol:"
+#~ msgstr "Symbol majetku:"
+
+#~ msgid "New Account"
+#~ msgstr "Nový účet"
+
+#~ msgid "Institution Selection"
+#~ msgstr "Výber inštitúcie"
+
+#~ msgid "<u>I</u>nstitution"
+#~ msgstr "<u>I</u>nštitúcia"
+
+#~ msgid "Account Type Selection"
+#~ msgstr "Výber typu účtu"
+
+#, fuzzy
+#~ msgid "What is the account number?"
+#~ msgstr "je account číslo?"
+
+#, fuzzy
+#~ msgid ""
+#~ "If you do not know the account number, please leave this field empty. You "
+#~ "can add the account number at any later time in the account details "
+#~ "dialog. The account number is only used by KMyMoney for online banking."
+#~ msgstr ""
+#~ "account číslo pole prázdna Vy account číslo na akýkoľvek čas v account "
+#~ "account číslo je pre pripojený."
+
+#, fuzzy
+#~ msgid "Does this investment account has a brokerage account?"
+#~ msgstr "account a account?"
+
+#~ msgid "What is the opening balance and date of this account?"
+#~ msgstr "Aká je počiatočná bilancia a dátum tohoto účtu?"
+
+#, fuzzy
+#~ msgid "What is the currency of this account?"
+#~ msgstr "je z account?"
+
+#~ msgid "&Price"
+#~ msgstr "Cena"
+
+#~ msgid "Account Payment"
+#~ msgstr "Platba účtu"
+
+#, fuzzy
+#~ msgid ""
+#~ "Do you wish to add a payment for this credit card account to the list of "
+#~ "monthly payments?"
+#~ msgstr "do a pre account do zoznam z?"
+
+#, fuzzy
+#~ msgid ""
+#~ "The information to create the account has now been collected. Press the "
+#~ "<b>Finish</b> button to actually create the account or the <b>Back</b> "
+#~ "button to modify the settings. The <b>Cancel</b> button will dismiss all "
+#~ "data and leave this wizard.<br>\n"
+#~ "Once the account is successfully created you can enter your transactions "
+#~ "on this account."
+#~ msgstr ""
+#~ "informácie do account teraz<b> Dokončiť</b> do account alebo<b> Dozadu</"
+#~ "b> do nastavenie<b> Zrušiť</b> všetky a<br> account je zapnuté account."
+
+#, fuzzy
+#~ msgid ""
+#~ "Adding a new institution.\n"
+#~ "\n"
+#~ "The only required field is the name, which can be the name of a bank like "
+#~ "Woolwhich, or a descriptive name like Family Cash Accounts."
+#~ msgstr ""
+#~ "a nové n pole je meno meno z a podobný alebo a meno podobný Rodina "
+#~ "Hotovosť Účty."
+
+#, fuzzy
+#~ msgid "What should happen with the difference?"
+#~ msgstr "rozdiel?"
+
+#, fuzzy
+#~ msgid "&Distribute difference among all splits"
+#~ msgstr "roz&diel všetky"
+
+#, fuzzy
+#~ msgid "&Leave unassigned"
+#~ msgstr "Opustiť"
+
+#, fuzzy
+#~ msgid ""
+#~ "The schedule %1 caused an internal problem. Please contact the developers "
+#~ "via e-mail on kmymoney2-developer@lists.sourceforge.net for further "
+#~ "instructions mentioning this problem."
+#~ msgstr "e zapnutékmymoney2-developer@lists.sourceforge.net pre."
+
+#~ msgid "Payee changed. Old: \"%1\", New: \"%2\""
+#~ msgstr " Zmena príjemcu. Starý: \"%1\", Nový: \"%2\""
+
+#~ msgid "Category changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Zmena kategórie. Stará: \"%1\", Nová: \"%2\""
+
+#~ msgid "Memo changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Zmena poznámky. Stará: \"%1\", Nová: \"%2\""
+
+#~ msgid "Amount changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Zmena sumy. Stará: \"%1\", Nová: \"%2\""
+
+#, fuzzy
+#~ msgid "%1 items of the details for the transaction have changed."
+#~ msgstr "z pre zmenené."
+
+#, fuzzy
+#~ msgid ""
+#~ "Some occurences that are older than '%1' have not been entered yet.\n"
+#~ "\n"
+#~ "Delete all occurences that have not been entered before this date?"
+#~ msgstr "n všetky dátum?"
+
+#, fuzzy
+#~ msgid ""
+#~ "Are you sure you want to enter this occurence which is %1 days after "
+#~ "today?"
+#~ msgstr "do je dní dnes?"
+
+#~ msgid "The date must lie in the range %1 to %2"
+#~ msgstr "Dátum musí byť v rozsahu od %1 do %2"
+
+#, fuzzy
+#~ msgid "1 %2 costs <i>price</i<> %1"
+#~ msgstr "<i> i 1"
+
+#, fuzzy
+#~ msgid ""
+#~ "Do you really want to select %1 as your base currency? This selection can "
+#~ "currently not be modified! If unsure, press 'No' now."
+#~ msgstr "do základ zmenené Nie teraz."
+
+#, fuzzy
+#~ msgid "This feature needs to be implemented."
+#~ msgstr "feature do."
+
+#~ msgid "Implementation missing"
+#~ msgstr "Chýbajúca implementácia"
+
+#~ msgid "Use this to abort the dialog"
+#~ msgstr "Použite na zrušenie okna"
+
+#~ msgid "Use this to accept the data and possibly update the exchange rate"
+#~ msgstr "Použite túto možnosť pre potvrdenie zmeny hodnôt"
+
+#, fuzzy
+#~ msgid "Use this to accept the action and perform it"
+#~ msgstr "Použiť do akcia a"
+
+#, fuzzy
+#~ msgid "Use this to continue editing the splits"
+#~ msgstr "Použiť do"
+
+#, fuzzy
+#~ msgid "Leave the dialog and return to where you came from."
+#~ msgstr "Opustiť a do z."
+
+#~ msgid "Open online help"
+#~ msgstr "Otvoriť online pomocníka"
+
+#, fuzzy
+#~ msgid ""
+#~ "Opens the online help and shows detailed information about transaction "
+#~ "searching."
+#~ msgstr "pripojený pomocník a informácie."
+
+#~ msgid "What is the opening balance and date of this brokerage account?"
+#~ msgstr "je otvára sa a dátum z account?"
+
+#~ msgid "Please enter the payment amount."
+#~ msgstr "Vložte prosím sumu platby"
+
+#~ msgid "Please enter the schedule name."
+#~ msgstr "Vložte prosím názov úlohy."
+
+#~ msgid "Please enter the payee name."
+#~ msgstr "Vložte prosím názov platby."
+
+#~ msgid "Please select the account."
+#~ msgstr "Prosím vyberte účet."
+
+#, fuzzy
+#~ msgid ""
+#~ "Use the checking account type to manage activities on your checking "
+#~ "account e.g. payments, checks and cash card purchases."
+#~ msgstr ""
+#~ "Použiť overenie typu účtu k správe aktivít na vašom kontrolovanom účte, "
+#~ "napr. platby šekom a debetnou kartou."
+
+#, fuzzy
+#~ msgid ""
+#~ "Use the savings account type to manage activities on your savings account."
+#~ msgstr "Použiť "
+
+#, fuzzy
+#~ msgid ""
+#~ "Use the credit card account type to manage activities on your credit card."
+#~ msgstr "Použiť account typ do zapnuté."
+
+#, fuzzy
+#~ msgid "Use the cash account type to manage activities in your wallet."
+#~ msgstr "Použiť account typ do v."
+
+#, fuzzy
+#~ msgid ""
+#~ "Use the asset account type to manage assets (e.g. your house, car or art "
+#~ "collection)."
+#~ msgstr "Použiť account typ do e g alebo."
+
+#, fuzzy
+#~ msgid ""
+#~ "Use the liability account type to manage any type of liability except "
+#~ "amortization loans. Use it for taxes you owe or money you borrowed from "
+#~ "friends. For amortization loans like mortgages you should create a loan "
+#~ "account."
+#~ msgstr ""
+#~ "Použiť account typ do akýkoľvek typ z Použiť pre alebo z Pre podobný a "
+#~ "account."
+
+#, fuzzy
+#~ msgid ""
+#~ "Use the loan account type to manage amortization loans (e.g. mortgages, "
+#~ "car loan, money you lend, private loans etc.)."
+#~ msgstr "Použiť account typ do e g private."
+
+#, fuzzy
+#~ msgid ""
+#~ "Use the investment account to manage your stock, mutual fund and other "
+#~ "investments."
+#~ msgstr "Použiť account do a."
+
+#, fuzzy
+#~ msgid "Explanation is not yet available! UnknownAccountType will be set"
+#~ msgstr "je množina"
+
+#~ msgid "Account with that name already exists."
+#~ msgstr "Účet s týmto menom už existuje."
+
+#~ msgid "Category with that name already exists."
+#~ msgstr "Kategória s týmto menom už existuje."
+
+#, fuzzy
+#~ msgid "chkVersion: Element %1 must have version %2"
+#~ msgstr "Časť verzia 2"
diff --git a/po/stats.pl b/po/stats.pl
new file mode 100755
index 0000000..e080296
--- /dev/null
+++ b/po/stats.pl
@@ -0,0 +1,218 @@
+#!/usr/bin/perl
+#
+# This script reads the xx.po file and generates some statistics
+# information in form of XML output. This output is parsed by
+# the translate.php file found on the KMyMoney web-site.
+#
+# (C) 2007 by Thomas Baumgart
+#
+# Syntax:
+# stats.pl <path-to-po-file>
+#
+# The script requires to find the kmymoney2.pot file in the same
+# directory in order to check if the po file is based on the current
+# pot file.
+#
+#***************************************************************************
+#* 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. *
+#***************************************************************************
+
+# total message counter
+my $msgs = 0;
+
+# fuzzy message counter
+my $fuzzy = 0;
+
+# translated message counter
+my $translated = 0;
+
+# untranslated message counter
+my $untranslated = 0;
+
+# state machine
+# possible states:
+#
+# 0 - idle
+# 1 - in message
+# 2 - in msgid
+# 3 - in empty msgstr
+# 4 - in msgstr
+my $state = 0;
+
+# line counter
+my $linecnt = 0;
+
+# filename of file to process
+my $fname;
+
+# pot version information
+my $potVersion;
+
+# "po file matches current pot file" flag
+my $poVersionOk = 0;
+
+if($#ARGV == -1) {
+ $fname = "-";
+} elsif($#ARGV == 0) {
+ $fname = $ARGV[0];
+ $fname =~ /^(.*\/)?(.*)\.po$/;
+ $basedir = $1;
+ $langcode = $2;
+} else {
+ print STDERR "Can only process one file at a time\n";
+ exit 1;
+}
+
+
+$country{"ca"} = "Catalan";
+$country{"cs"} = "Czech";
+$country{"da"} = "Denmark";
+$country{"de"} = "Germany";
+$country{"en_GB"} = "Great Britain";
+$country{"es"} = "Spain";
+$country{"es_AR"} = "Argentina";
+$country{"fi"} = "Finnland";
+$country{"fr"} = "France";
+$country{"gl"} = "Galicia";
+$country{"it"} = "Italy";
+$country{"lt"} = "Lithuania";
+$country{"nl"} = "Netherlands";
+$country{"pl"} = "Poland";
+$country{"pt_BR"} = "Brazil";
+$country{"pt"} = "Portugal";
+$country{"ro"} = "Romania";
+$country{"ru"} = "Russia";
+$country{"sk"} = "Slovakia";
+$country{"sl"} = "Slovenia";
+$country{"sv"} = "Sweden";
+$country{"tr"} = "Turkey";
+$country{"zh_CN"} = "China";
+
+$language{"ca"} = "Catalan";
+$language{"cs"} = "Czech";
+$language{"da"} = "Danish";
+$language{"de"} = "German";
+$language{"en_GB"} = "British";
+$language{"es"} = "Spanish (Spain)";
+$language{"es_AR"} = "Spanish (Argentina)";
+$language{"fi"} = "Suomi";
+$language{"fr"} = "French";
+$language{"gl"} = "Galician";
+$language{"it"} = "Italian";
+$language{"lt"} = "Lithuanian";
+$language{"nl"} = "Dutch";
+$language{"pl"} = "Polish";
+$language{"pt_BR"} = "Portuguese (Brazil)";
+$language{"pt"} = "Portuguese (Portugal)";
+$language{"ro"} = "Romanian";
+$language{"ru"} = "Russian";
+$language{"sk"} = "Slovak";
+$language{"sl"} = "Slovenian";
+$language{"sv"} = "Swedish";
+$language{"tr"} = "Turkish";
+$language{"zh_CN"} = "Simplified Chinese";
+
+$flags{"es_AR"} = "ar";
+$flags{"en_GB"} = "gb";
+$flags{"pt_BR"} = "br";
+$flags{"pt"} = "pt";
+$flags{"da"} = "dk";
+$flags{"gl"} = "Galicia";
+$flags{"zh_CN"} = "cn";
+
+open(IN, "< $basedir/kmymoney2.pot") or die("POT file not found.");
+while(<IN>) {
+ if($_ =~ /POT-Creation-Date/) {
+ chomp($_);
+ $potVersion = $_;
+ last;
+ }
+}
+close IN;
+
+$potVersionOk="0";
+
+open(IN, "< $fname") or die("Cannot open $fname for reading");
+while(<IN>) {
+ $linecnt++;
+ if($_ =~ /Language-Team: (.*) <.*>/) {
+ $language = $1;
+ next;
+ }
+ if($_ =~ /Last-Translator: (.*) <.*>/) {
+ $author = $1;
+ next;
+ }
+ if($_ =~ /POT-Creation-Date/) {
+ chomp($_);
+ $potVersionOk = "1" if($_ eq $potVersion);
+ next;
+ }
+ # "PO-Revision-Date: 2007-02-21 21:57+0100\n"
+ if($_ =~ /PO-Revision-Date: (\d+-\d+-\d+) /) {
+ $poRevision = $1;
+ }
+
+ if($state == 0) {
+ if($_ =~ /^\#:/) {
+ $state = 1;
+ }
+ } elsif($state == 1) {
+ if($_ =~ /^msgid /) {
+ $msgs++;
+ $state = 2;
+
+ } elsif($_ =~ /^#, fuzzy/) {
+ $fuzzy++;
+ }
+
+ } elsif($state == 2) {
+ if($_ =~ /^msgstr ""$/) {
+ # we have detected an emtpy msgstr. this can have two reasons
+ # a) the message is untranslated, then the next line is empty
+ # b) the message is too long and starts on the next line
+ $state = 3;
+ } elsif($_ =~ /^msgstr "[^"]/) {
+ $translated++;
+ $state = 4;
+ }
+ } elsif($state == 3) {
+ if($_ =~ /^"[^"]/) {
+ $translated++;
+ $state = 4;
+ } else {
+ $untranslated++;
+ $state = 0;
+ }
+ } elsif($state == 4) {
+ chomp($_);
+ if($_ =~ /^$/) {
+ $state = 0;
+ }
+ }
+}
+close IN;
+
+my $flag = $flags{$langcode};
+$flag = $langcode if(length($flag) == 0);
+
+$ptransdisp = (int (($translated - $fuzzy) * 10000 / $msgs)) / 100;
+;
+$pfuzzy = int (($fuzzy * 100) / $msgs);
+$puntrans = int (($untranslated * 100) / $msgs);
+
+print "<translation>\n";
+print " <flag>$flag</flag>\n";
+print " <language>$language{$langcode}</language>\n";
+print " <country>$country{$langcode}</country>\n";
+print " <translator>$author</translator>\n";
+print " <translated>$ptransdisp</translated>\n";
+print " <fuzzy>$pfuzzy</fuzzy>\n";
+print " <untranslated>$puntrans</untranslated>\n";
+print " <potcurrent>$potVersionOk</potcurrent>\n";
+print " <porevision>$poRevision</porevision>\n";
+print "</translation>\n";
+
diff --git a/po/sv.po b/po/sv.po
new file mode 100644
index 0000000..9383968
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,13076 @@
+# translation of sv.po to
+# Swedish translation for KMyMoney.
+# This file is put in the public domain.
+#
+# Stefan Nilsen <stefan.nilsen@millnet.se>, 2007.
+# Konrad Skeri <konrad@skeri.com>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: sv\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-25 19:04+0200\n"
+"PO-Revision-Date: 2008-06-13 11:59+0200\n"
+"Last-Translator: Konrad Skeri <konrad@skeri.com>\n"
+"Language-Team: <sv@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: wizards/wizardpages/rc.cpp:1
+msgid ""
+"Select groups of accounts that correspond to the ways that you will use "
+"KMyMoney. Each group you select will cause several accounts and categories "
+"to be created. Select the groups that are relevant to you. You can always "
+"create additional accounts manually later."
+msgstr ""
+
+#: wizards/wizardpages/rc.cpp:2
+msgid ""
+"<p>KMyMoney supports multiple currencies, nevertheless one of them will be "
+"used as your base currency. The base currency is used as default for new "
+"accounts and reports. Please select the base currency from the following "
+"list."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:71 dialogs/rc.cpp:399 dialogs/rc.cpp:485
+#: dialogs/rc.cpp:724 dialogs/settings/rc.cpp:108 reports/listtable.cpp:226
+#: views/kinvestmentview.cpp:71 views/kpayeesview.cpp:351 views/rc.cpp:13
+#: widgets/rc.cpp:5 widgets/rc.cpp:34
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1599
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1629
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1673
+#: wizards/wizardpages/rc.cpp:3
+msgid "Name"
+msgstr "Namn"
+
+#: wizards/wizardpages/rc.cpp:4
+msgid "ISO Code"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:69 dialogs/kequitypriceupdatedlg.cpp:70
+#: dialogs/rc.cpp:71 dialogs/rc.cpp:725 dialogs/settings/rc.cpp:112
+#: views/kinvestmentview.cpp:72 widgets/rc.cpp:37 wizards/wizardpages/rc.cpp:5
+msgid "Symbol"
+msgstr "Symbol"
+
+#: wizards/wizardpages/rc.cpp:6
+msgid ""
+"<p>Use the fields below to enter some information about yourself.</p>\n"
+"\n"
+"<p>All information is optional and only used to personalize your KMyMoney "
+"file.</p>"
+msgstr ""
+
+#: dialogs/rc.cpp:425 wizards/newuserwizard/rc.cpp:27
+#: wizards/wizardpages/rc.cpp:7
+msgid "Town:"
+msgstr "Ort:"
+
+#: dialogs/rc.cpp:420 wizards/newuserwizard/rc.cpp:22
+#: wizards/wizardpages/rc.cpp:8
+msgid "County/State:"
+msgstr "Län:"
+
+#: dialogs/rc.cpp:391 dialogs/rc.cpp:421 wizards/newuserwizard/rc.cpp:23
+#: wizards/wizardpages/rc.cpp:9
+msgid "Street:"
+msgstr ""
+
+#: dialogs/rc.cpp:422 wizards/newuserwizard/rc.cpp:24
+#: wizards/wizardpages/rc.cpp:10
+msgid "Email:"
+msgstr ""
+
+#: dialogs/rc.cpp:424 wizards/newuserwizard/rc.cpp:26
+#: wizards/wizardpages/rc.cpp:11
+msgid "Telephone:"
+msgstr ""
+
+#: dialogs/rc.cpp:423 wizards/newuserwizard/rc.cpp:25
+#: wizards/wizardpages/rc.cpp:12
+msgid "Your name:"
+msgstr ""
+
+#: dialogs/rc.cpp:427 wizards/newuserwizard/rc.cpp:29
+#: wizards/wizardpages/rc.cpp:13
+msgid "Load from Addressbook"
+msgstr ""
+
+#: dialogs/rc.cpp:392 dialogs/rc.cpp:426 views/rc.cpp:68
+#: wizards/wizardpages/rc.cpp:14
+msgid "Postal Code:"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:82
+msgid "KMyMoney New Account Setup"
+msgstr ""
+
+#: dialogs/rc.cpp:360 dialogs/rc.cpp:361 reports/listtable.cpp:230
+#: wizards/newaccountwizard/knewaccountwizard.cpp:83
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1616
+#: wizards/newaccountwizard/rc.cpp:61
+msgid "Institution"
+msgstr "Institution"
+
+#: dialogs/investactivities.cpp:198 dialogs/investactivities.cpp:286
+#: dialogs/investactivities.cpp:367 dialogs/kfindtransactiondlg.cpp:181
+#: dialogs/rc.cpp:139 dialogs/rc.cpp:192 dialogs/rc.cpp:207
+#: dialogs/transactioneditor.cpp:734 reports/listtable.cpp:201
+#: reports/pivottable.cpp:1336 reports/pivottable.cpp:1586
+#: views/kforecastview.cpp:393 views/kgloballedgerview.cpp:175
+#: views/khomeview.cpp:418 views/khomeview.cpp:491 views/khomeview.cpp:525
+#: views/khomeview.cpp:764 views/khomeview.cpp:967 views/khomeview.cpp:1437
+#: views/kscheduledview.cpp:71 views/rc.cpp:17 views/rc.cpp:44
+#: widgets/kmymoneyaccounttreebase.cpp:58
+#: widgets/kmymoneyaccounttreeforecast.cpp:41 widgets/rc.cpp:109
+#: widgets/register.cpp:566 widgets/transaction.cpp:978
+#: widgets/transaction.cpp:1535
+#: wizards/newaccountwizard/knewaccountwizard.cpp:84
+msgid "Account"
+msgstr "Konto"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:85
+msgid "Broker"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:225 dialogs/rc.cpp:70 dialogs/rc.cpp:104
+#: dialogs/rc.cpp:159 dialogs/rc.cpp:223 dialogs/rc.cpp:246 dialogs/rc.cpp:751
+#: dialogs/settings/rc.cpp:109 widgets/rc.cpp:35 widgets/register.cpp:568
+#: wizards/newaccountwizard/knewaccountwizard.cpp:86
+msgid "Details"
+msgstr "Detaljer"
+
+#: dialogs/knewloanwizard.cpp:636 dialogs/rc.cpp:231 dialogs/rc.cpp:608
+#: kmymoneyutils.cpp:191 views/khomeview.cpp:399
+#: wizards/newaccountwizard/knewaccountwizard.cpp:87
+#: wizards/newaccountwizard/knewaccountwizard.cpp:880
+msgid "Payments"
+msgstr ""
+
+#: dialogs/investactivities.cpp:195 dialogs/investactivities.cpp:283
+#: dialogs/investactivities.cpp:422 dialogs/investtransactioneditor.cpp:217
+#: reports/listtable.cpp:221 widgets/transaction.cpp:1565
+#: wizards/newaccountwizard/knewaccountwizard.cpp:88
+msgid "Fees"
+msgstr "Avgifter"
+
+#: dialogs/rc.cpp:624 views/khomeview.cpp:415 views/khomeview.cpp:488
+#: views/khomeview.cpp:522 wizards/newaccountwizard/knewaccountwizard.cpp:89
+msgid "Schedule"
+msgstr "Schema"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:90
+#, fuzzy
+msgid "Payout"
+msgstr "Betala till"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:91
+#, fuzzy
+msgid "Parent Account"
+msgstr "Betalningsinformation"
+
+#: dialogs/rc.cpp:719 wizards/newaccountwizard/knewaccountwizard.cpp:92
+#: wizards/newuserwizard/knewuserwizard.cpp:86
+#, fuzzy
+msgid "Finish"
+msgstr "Slutför"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:248
+#, fuzzy
+msgid "Credit card payment"
+msgstr "Kreditkort"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:264
+#, fuzzy, c-format
+msgid "Loan payment for %1"
+msgstr "Låneinbetalning"
+
+#: mymoney/mymoneyscheduled.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:279
+msgid "Loan payment"
+msgstr "Låneinbetalning"
+
+#: dialogs/rc.cpp:134 wizards/newaccountwizard/knewaccountwizard.cpp:293
+msgid "Amortization"
+msgstr "Amortering"
+
+#: dialogs/investactivities.cpp:196 dialogs/investactivities.cpp:284
+#: dialogs/investactivities.cpp:366 dialogs/investactivities.cpp:423
+#: dialogs/investtransactioneditor.cpp:227 dialogs/rc.cpp:135
+#: dialogs/rc.cpp:152 dialogs/rc.cpp:544 reports/listtable.cpp:222
+#: widgets/transaction.cpp:1597
+#: wizards/newaccountwizard/knewaccountwizard.cpp:302
+msgid "Interest"
+msgstr "Ränta"
+
+#: dialogs/kcurrencycalculator.cpp:282
+#: wizards/newaccountwizard/knewaccountwizard.cpp:351
+#: wizards/newaccountwizard/knewaccountwizard.cpp:356
+msgid "User"
+msgstr "Användare"
+
+#: kmymoneyutils.cpp:64 mymoney/mymoneyaccount.cpp:711
+#: reports/querytabletest.cpp:422
+#: wizards/newaccountwizard/knewaccountwizard.cpp:451
+msgid "Checking"
+msgstr ""
+
+#: kmymoneyutils.cpp:66 mymoney/mymoneyaccount.cpp:714
+#: wizards/newaccountwizard/knewaccountwizard.cpp:452
+msgid "Savings"
+msgstr "Besparingar"
+
+#: kmymoneyutils.cpp:68 mymoney/mymoneyaccount.cpp:717
+#: reports/querytabletest.cpp:423
+#: wizards/newaccountwizard/knewaccountwizard.cpp:453
+msgid "Credit Card"
+msgstr "Kreditkort"
+
+#: kmymoneyutils.cpp:70 mymoney/mymoneyaccount.cpp:720
+#: wizards/newaccountwizard/knewaccountwizard.cpp:454
+msgid "Cash"
+msgstr "Kontanter"
+
+#: kmymoneyutils.cpp:72 mymoney/mymoneyaccount.cpp:723
+#: wizards/newaccountwizard/knewaccountwizard.cpp:455
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+msgid "Loan"
+msgstr "Lån"
+
+#: kmymoneyutils.cpp:76 mymoney/mymoneyaccount.cpp:729
+#: wizards/newaccountwizard/knewaccountwizard.cpp:456
+msgid "Investment"
+msgstr "Investering"
+
+#: converter/mymoneytemplate.cpp:178 converter/mymoneytemplate.cpp:179
+#: dialogs/knewaccountdlg.cpp:1014 kmymoneyutils.cpp:80
+#: mymoney/mymoneyaccount.cpp:735 views/kaccountsview.cpp:352
+#: views/kmymoneyview.cpp:765 widgets/kmymoneyaccountselector.cpp:177
+#: widgets/kmymoneyaccountselector.cpp:356
+#: wizards/newaccountwizard/knewaccountwizard.cpp:457
+msgid "Asset"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:182 converter/mymoneytemplate.cpp:183
+#: dialogs/knewaccountdlg.cpp:1016 kmymoneyutils.cpp:82
+#: mymoney/mymoneyaccount.cpp:738 views/kaccountsview.cpp:356
+#: views/kmymoneyview.cpp:766 widgets/kmymoneyaccountselector.cpp:178
+#: widgets/kmymoneyaccountselector.cpp:363
+#: wizards/newaccountwizard/knewaccountwizard.cpp:458
+msgid "Liability"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:194 converter/mymoneytemplate.cpp:195
+#: kmymoneyutils.cpp:94 mymoney/mymoneyaccount.cpp:756
+#: views/kaccountsview.cpp:369 views/kmymoneyview.cpp:769
+#: widgets/kmymoneyaccountselector.cpp:181
+#: widgets/kmymoneyaccountselector.cpp:390
+#: wizards/newaccountwizard/knewaccountwizard.cpp:460
+msgid "Equity"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid ""
+"Please make sure to enter the correct conversion for the selected opening "
+"date. If you requested an online quote it might be provided for a different "
+"date."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+#, fuzzy
+msgid "Check date"
+msgstr "&Skapa"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:562
+msgid "1 %1 equals %2"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:577
+msgid "Conversion rate is not positive"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:583
+msgid "No account name supplied"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:114 mymoney/mymoneyscheduled.cpp:1026
+#: wizards/newaccountwizard/knewaccountwizard.cpp:680
+msgid "Write check"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:111 mymoney/mymoneyscheduled.cpp:1014
+#: wizards/newaccountwizard/knewaccountwizard.cpp:682
+msgid "Direct debit"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:113 mymoney/mymoneyscheduled.cpp:1032
+#: wizards/newaccountwizard/knewaccountwizard.cpp:683
+msgid "Bank transfer"
+msgstr "Banköverföring"
+
+#: dialogs/keditscheduledlg.cpp:112 mymoney/mymoneyscheduled.cpp:1029
+#: wizards/newaccountwizard/knewaccountwizard.cpp:685
+msgid "Standing order"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:110 mymoney/mymoneyscheduled.cpp:1020
+#: wizards/newaccountwizard/knewaccountwizard.cpp:686
+msgid "Manual deposit"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:109 mymoney/mymoneyscheduled.cpp:1017
+#: wizards/newaccountwizard/knewaccountwizard.cpp:687
+msgid "Direct deposit"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:115 mymoney/mymoneyscheduled.cpp:1023
+#: wizards/newaccountwizard/knewaccountwizard.cpp:688
+msgid "Other"
+msgstr "Annan"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:697
+#, fuzzy
+msgid "CreditCard %1 monthly payment"
+msgstr "Uppskattat månadsbelopp"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:703
+msgid "Finish entry and create account"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:705
+msgid "Finish entry and create account and schedule"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:708
+msgid "Next due date is prior to opening date"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:712
+#, fuzzy
+msgid "No account selected"
+msgstr "Val av konto"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:716
+msgid "No amount for payment selected"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:720
+msgid "No payee for payment selected"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:724
+msgid "No name assigned for schedule"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:805
+msgid "No payee supplied"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:819
+#, fuzzy
+msgid "No opening balance supplied"
+msgstr "Öppningsbalanser"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:826
+msgid "An interest change can only happen after the first payment"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:615 dialogs/knewloanwizard.cpp:634
+#: wizards/newaccountwizard/knewaccountwizard.cpp:884
+#: wizards/newaccountwizard/rc.cpp:55
+msgid "Months"
+msgstr "Månader"
+
+#: dialogs/knewloanwizard.cpp:616 dialogs/knewloanwizard.cpp:635
+#: wizards/newaccountwizard/knewaccountwizard.cpp:885
+#: wizards/newaccountwizard/knewaccountwizard.cpp:889
+#: wizards/newaccountwizard/rc.cpp:56
+msgid "Years"
+msgstr "År"
+
+#: dialogs/knewloanwizard.cpp:711
+#: wizards/newaccountwizard/knewaccountwizard.cpp:961
+#, c-format
+msgid "KMyMoney has calculated the amount of the loan as %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:718
+#: wizards/newaccountwizard/knewaccountwizard.cpp:968
+msgid "KMyMoney has calculated the interest rate to %1%."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:731
+#: wizards/newaccountwizard/knewaccountwizard.cpp:981
+msgid ""
+"KMyMoney has calculated a periodic payment of %1 to cover principal and "
+"interest."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:993
+#, c-format
+msgid ""
+"The number of payments has been decremented and the balloon payment has been "
+"modified to %1."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1001
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1021
+#, c-format
+msgid "The balloon payment has been modified to %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:763
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1013
+msgid "KMyMoney has calculated the term of your loan as %1. "
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1052
+msgid "KMyMoney has calculated a balloon payment of %1 for this loan."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:809
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1059
+msgid "KMyMoney has successfully verified your loan information."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1067
+msgid ""
+"You have entered mis-matching information. Please modify your figures or "
+"leave one value empty to let KMyMoney calculate it for you"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:504 dialogs/knewloanwizard.cpp:513
+#: dialogs/knewloanwizard.cpp:522 dialogs/knewloanwizard.cpp:532
+#: dialogs/knewloanwizard.cpp:820
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1070
+msgid "Calculation error"
+msgstr "Beräkningsfel"
+
+#: dialogs/knewloanwizard.cpp:824
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1074
+msgid ""
+"\n"
+"\n"
+"Accept this or modify the loan information and recalculate."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:826
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1076
+msgid "Calculation successful"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:846
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1129
+#, c-format
+msgid ""
+"_n: one month\n"
+"%n months"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:850
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1133
+#, c-format
+msgid ""
+"_n: one year\n"
+"%n years"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:854
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1137
+#, c-format
+msgid ""
+"_n: one payment\n"
+"%n payments"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1190
+msgid "Press Calculate to verify the values"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1194
+msgid "Not all details supplied"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:70 dialogs/knewloanwizard.cpp:122
+#: dialogs/knewloanwizard.cpp:136
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1381
+msgid "&Create..."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:138
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1383
+msgid "Create a new asset account"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1384
+msgid ""
+"If the asset account does not yet exist, press this button to create it."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1596
+#, fuzzy
+msgid "Account information"
+msgstr "Betalningsinformation"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1601
+#: wizards/newaccountwizard/rc.cpp:59
+#, fuzzy
+msgid "Subaccount of"
+msgstr "Underkonto"
+
+#: dialogs/rc.cpp:225 dialogs/rc.cpp:326 dialogs/rc.cpp:371 dialogs/rc.cpp:723
+#: plugins/ofximport/dialogs/rc.cpp:23 reports/listtable.cpp:225
+#: widgets/kmymoneyaccounttreebase.cpp:113 widgets/register.cpp:61
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1606
+msgid "Type"
+msgstr "Typ"
+
+#: dialogs/kcurrencyeditdlg.cpp:62 dialogs/rc.cpp:56 dialogs/rc.cpp:59
+#: dialogs/rc.cpp:75 dialogs/rc.cpp:727 dialogs/rc.cpp:792
+#: kmymoneyutils.cpp:84 kmymoneyutils.cpp:111 mymoney/mymoneyaccount.cpp:741
+#: mymoney/mymoneysecurity.cpp:169 reports/listtable.cpp:233
+#: widgets/kmymoneypriceview.cpp:127
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1607
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1630
+#: wizards/newaccountwizard/rc.cpp:6 wizards/newaccountwizard/rc.cpp:24
+msgid "Currency"
+msgstr "Valuta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1608
+#: wizards/newaccountwizard/rc.cpp:7 wizards/newuserwizard/rc.cpp:9
+#, fuzzy
+msgid "Opening date"
+msgstr "Öppningsbalanser"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1610
+#: wizards/newaccountwizard/rc.cpp:9
+#, fuzzy
+msgid "Conversion rate"
+msgstr "Ränta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1613
+#: wizards/newaccountwizard/rc.cpp:15 wizards/newuserwizard/rc.cpp:13
+#, fuzzy
+msgid "Opening balance"
+msgstr "Öppningsbalanser"
+
+#: dialogs/keditscheduledlg.cpp:507 dialogs/transactioneditor.cpp:784
+#: dialogs/transactioneditor.cpp:848 plugins/ofximport/dialogs/rc.cpp:22
+#: widgets/rc.cpp:111 widgets/register.cpp:59 widgets/transaction.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1618
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1632
+msgid "Number"
+msgstr ""
+
+#: dialogs/rc.cpp:365 wizards/newaccountwizard/knewaccountwizard.cpp:1621
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1634
+#: wizards/newaccountwizard/rc.cpp:26 wizards/newaccountwizard/rc.cpp:66
+msgid "IBAN"
+msgstr "IBAN"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1627
+#, fuzzy
+msgid "Brokerage Account"
+msgstr "Välj konto:"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1640
+#, fuzzy
+msgid "Loan information"
+msgstr "Betalningsinformation"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1643
+#, fuzzy
+msgid "Amount borrowed"
+msgstr "lånat"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1645
+#, fuzzy
+msgid "Amount lent"
+msgstr "Angivet belopp"
+
+#: dialogs/rc.cpp:515 dialogs/rc.cpp:546
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1647
+#: wizards/newaccountwizard/rc.cpp:75
+msgid "Interest rate"
+msgstr "Ränta"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1648
+#, fuzzy
+msgid "Interest rate is"
+msgstr "Ränta"
+
+#: dialogs/rc.cpp:509 dialogs/rc.cpp:572
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1649
+msgid "Principal and interest"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1650
+#: wizards/newaccountwizard/rc.cpp:90
+#, fuzzy
+msgid "Additional fees"
+msgstr "Tilläggsavgifter:"
+
+#: dialogs/rc.cpp:525 wizards/newaccountwizard/knewaccountwizard.cpp:1651
+#: wizards/newaccountwizard/rc.cpp:44
+msgid "Payment frequency"
+msgstr "Betalningsfrekvens"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1652
+#: wizards/newaccountwizard/rc.cpp:105
+#, fuzzy
+msgid "Payment account"
+msgstr "Betalningsinformation"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1655
+#, fuzzy
+msgid "Payout information"
+msgstr "Betalningsinformation"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1658
+#, fuzzy
+msgid "Refinance"
+msgstr "Döp om"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1661
+#, fuzzy
+msgid "Transfer amount to"
+msgstr "Överför till"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1663
+#, fuzzy
+msgid "Transfer amount from"
+msgstr "Överför från"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1665
+#, fuzzy
+msgid "Payment date"
+msgstr "Betalning"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1671
+#, fuzzy
+msgid "Schedule information"
+msgstr "Generell information"
+
+#: reports/listtable.cpp:228
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1684
+#, fuzzy
+msgid "Occurence"
+msgstr "Valutor"
+
+#: mymoney/mymoneyscheduled.cpp:891 mymoney/mymoneyscheduled.cpp:947
+#: mymoney/mymoneyscheduled.cpp:1283 mymoney/mymoneyscheduletest.cpp:1343
+#: widgets/rc.cpp:19 widgets/rc.cpp:74
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+msgid "Monthly"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1677
+#, fuzzy
+msgid "Paid from"
+msgstr "Betalning från:"
+
+#: widgets/kmymoneycombo.cpp:473 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1678
+msgid "Pay to"
+msgstr "Betala till"
+
+#: dialogs/investactivities.cpp:197 dialogs/investactivities.cpp:285
+#: dialogs/investactivities.cpp:365 dialogs/kfindtransactiondlg.cpp:197
+#: dialogs/kmymoneysplittable.cpp:80 dialogs/rc.cpp:51 dialogs/rc.cpp:212
+#: reports/listtable.cpp:197 views/khomeview.cpp:421 views/khomeview.cpp:494
+#: views/khomeview.cpp:528 views/kscheduledview.cpp:73 views/rc.cpp:63
+#: widgets/register.cpp:58 widgets/transaction.cpp:1055
+#: widgets/transaction.cpp:1578 widgets/transaction.cpp:1610
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1679
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1685
+msgid "Amount"
+msgstr "Belopp"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1680
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1686
+#, fuzzy
+msgid "First payment due"
+msgstr "Första betalning:"
+
+#: dialogs/rc.cpp:102 wizards/newaccountwizard/knewaccountwizard.cpp:1681
+#: wizards/newaccountwizard/rc.cpp:115
+msgid "Payment method"
+msgstr "Betalningsmetod"
+
+#: wizards/newaccountwizard/rc.cpp:1
+msgid ""
+"This page summarizes the data you have entered. Press <b>Finish</b> to "
+"create the account, schedules, etc. or use <b>Back</b> to modify your "
+"entries."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:2
+msgid "Item"
+msgstr ""
+
+#: dialogs/rc.cpp:110 dialogs/rc.cpp:165 dialogs/rc.cpp:252 dialogs/rc.cpp:757
+#: dialogs/rc.cpp:818 views/kinvestmentview.cpp:74 widgets/register.cpp:574
+#: wizards/newaccountwizard/rc.cpp:3
+msgid "Value"
+msgstr "Saldo"
+
+#: wizards/newaccountwizard/rc.cpp:4
+msgid ""
+"Enter the name of the account under which it is known within KMyMoney.\n"
+"Select the type for the new account. Use the <b>What's this?</b> feature to "
+"see more details about the various account types.\n"
+"Enter the date the account was opened and its currency."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:5
+msgid "Select the currency in which this account is denominated."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:8
+msgid ""
+"The opening balance is the balance of the account when you start using it "
+"with KMyMoney. For new accounts this is usually 0 but for existing accounts "
+"this may well differ. Please consult the account statements to figure out "
+"this value. The opening balance is to be provided in the currency of the "
+"account as selected with the currency button."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:10
+msgid ""
+"The opening date would be the date of the last statement. In case you want "
+"to keep track of transactions prior to this date, enter the ending balance "
+"and statement date of a prior statement and add all following transactions "
+"into KMyMoney.\n"
+"<br>\n"
+"<i>Note</i>: If you do not know the exact amount of the opening balance, "
+"enter an estimate. You can change this value later before you reconcile this "
+"account for the first time."
+msgstr ""
+
+#: dialogs/rc.cpp:52 dialogs/rc.cpp:54 dialogs/rc.cpp:57 dialogs/rc.cpp:60
+#: dialogs/rc.cpp:748 dialogs/rc.cpp:749 dialogs/rc.cpp:768 widgets/rc.cpp:6
+#: widgets/rc.cpp:7 widgets/rc.cpp:8 widgets/rc.cpp:9 widgets/rc.cpp:10
+#: widgets/rc.cpp:11 widgets/rc.cpp:12 widgets/rc.cpp:13 widgets/rc.cpp:14
+#: widgets/rc.cpp:15 widgets/rc.cpp:16 widgets/rc.cpp:17
+#: wizards/newaccountwizard/rc.cpp:11 wizards/newaccountwizard/rc.cpp:88
+#: wizards/newaccountwizard/rc.cpp:91 wizards/newaccountwizard/rc.cpp:93
+#: wizards/newuserwizard/rc.cpp:14
+msgid "xxx"
+msgstr "xxx"
+
+#: wizards/newaccountwizard/rc.cpp:12
+#, fuzzy
+msgid "Account type"
+msgstr "Kontonamn"
+
+#: wizards/newaccountwizard/rc.cpp:13
+msgid ""
+"For foreign currencies an initial conversion rate needs to be provided. This "
+"should be the price of the foreign currency in the base currency on the "
+"opening date of the account."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:14
+#, fuzzy
+msgid "Account name"
+msgstr "Kontonamn"
+
+#: wizards/newaccountwizard/rc.cpp:16
+msgid ""
+"<p><b>Checking</b>\n"
+"Use the checking account type to manage activities on your checking account "
+"e.g. payments, checks and cash card purchases.</p>\n"
+"\n"
+"<p><b>Savings</b>\n"
+"Use the savings account type to manage activities on your savings account.</"
+"p>\n"
+"\n"
+"<p><b>Credit Card</b>\n"
+"Use the credit card account type to manage activities on your credit card.</"
+"p>\n"
+"\n"
+"<p><b>Cash</b>\n"
+"\n"
+"Use the cash account type to manage activities in your wallet.</p>\n"
+"\n"
+"<p><b>Loan</b>\n"
+"Use the loan account type to manage amortization loans (e.g. mortgages, car "
+"loan, money you lend, private loans etc.).</p>\n"
+"\n"
+"<p><b>Investment</b>\n"
+"Use the investment account to manage your stock, mutual fund and other "
+"investments.</p>\n"
+"\n"
+"<p><b>Asset</b>\n"
+"Use the asset account type to manage assets (e.g. your house, car or art "
+"collection).</p>\n"
+"\n"
+"<p><b>Liability</b>\n"
+"Use the liability account type to manage any type of liability except "
+"amortization loans. Use it for taxes you owe or money you borrowed from "
+"friends. For amortization loans like mortgages you should create a loan "
+"account.</p>"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:17
+msgid "Preferred account"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:18
+msgid ""
+"Mark this checkbox if the account should be maintained as preferred account"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:19
+msgid ""
+"Selecting the <b>Preferred Account</b> checkbox will allow preferred access "
+"in some dialogs and views of KMyMoney."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:20
+msgid "Enter a name under which this account is known within KMyMoney."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:21
+#, fuzzy
+msgid "Online quote"
+msgstr "Onlineuppdatering av kurser"
+
+#: wizards/newaccountwizard/rc.cpp:22
+msgid ""
+"Does this investment account have a brokerage account?<p>\n"
+"\n"
+"<b>Check</b> the mark if this investment account has an associated account "
+"for money that is not invested.<br>\n"
+"\n"
+"<b>Uncheck</b> it if you don't use this account for active stock brokerage. "
+"You should also uncheck it if this account is not maintained by a bank or "
+"broker."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:23
+#, fuzzy
+msgid "Create brokerage account"
+msgstr "Välj ett föräldrakonto."
+
+#: wizards/newaccountwizard/rc.cpp:25 wizards/newaccountwizard/rc.cpp:64
+#, fuzzy
+msgid "Account number"
+msgstr "Kontonummer"
+
+#: wizards/newaccountwizard/rc.cpp:27
+msgid ""
+"Please select the required options. Please use the <b>What's this?</b> "
+"feature to see more information about the items."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:28
+#, fuzzy
+msgid "What is the type of the loan?"
+msgstr "Namn på lånet"
+
+#: dialogs/rc.cpp:481 wizards/newaccountwizard/rc.cpp:29
+msgid "I am borrowing money"
+msgstr "Jag lånar pengar"
+
+#: dialogs/rc.cpp:482 wizards/newaccountwizard/rc.cpp:30
+msgid "I am lending money"
+msgstr "Jag lånar ut pengar"
+
+#: wizards/newaccountwizard/rc.cpp:31
+msgid "Who is the payee/payer of the loan?"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:32
+msgid ""
+"Enter the name of the person or bank you owe money or who owes you money.\n"
+"\n"
+"If the name does not exist within KMyMoney's database, you are asked if you "
+"want to create it."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:33
+msgid "Did you make/receive any payments yet?"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:36
+msgid ""
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?\n"
+"\n"
+"Note: Payments made to obtain the loan (e.g. Disagio) are not considered as "
+"payments in this context."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:37
+msgid "Which payments do you want to record?"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:38
+#, fuzzy
+msgid "All payments"
+msgstr "en betalning"
+
+#: wizards/newaccountwizard/rc.cpp:39
+#, fuzzy
+msgid "Start with this year's payments"
+msgstr "Börja med hemsida"
+
+#: wizards/newaccountwizard/rc.cpp:40
+msgid ""
+"<qt>Select which transactions should be recorded.\n"
+"\n"
+"<b>All payments</b> allows you to enter all payments made for this loan.\n"
+"\n"
+"The option to <b>start from the beginning of the current year</b> is meant "
+"for loans that are active for a longer period of time already and you don't "
+"want to enter all transactions of the past.\n"
+"</qt>"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:41
+msgid "Balance before start of recording"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:42
+msgid ""
+"Enter the ending balance found on the statement that is the last one before "
+"you want to start recording this loan in KMyMoney."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:43
+msgid ""
+"You have selected to record only payments from the beginning of this year. "
+"Since prior transactions will not be recorded, you need to supply the "
+"balance of the loan on January 1st of this year."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:45
+msgid "Interest Compounding frequency"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:46
+msgid ""
+"Select the frequency with which the interest is compounded. If uncertain, "
+"select the same as the payment frequency. Consult your loan contract for "
+"details."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:47
+msgid "Due date of first payment to be recorded"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:48
+msgid ""
+"Depending on the answer to <b>What do you want to record?</b> this field "
+"means the following:<p>\n"
+"\n"
+"<b>All payments</b><br>\n"
+"Enter the due date of the very first payment<p>\n"
+"\n"
+"<b>Start with this year's payments</b><br>\n"
+"Enter the due date of the first payment in the current year"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:49
+#, fuzzy
+msgid "Type of interest rate"
+msgstr "Typ av ränta"
+
+#: wizards/newaccountwizard/rc.cpp:50
+#, fuzzy
+msgid "Fixed"
+msgstr "Fält"
+
+#: wizards/newaccountwizard/rc.cpp:51
+#, fuzzy
+msgid "Variable"
+msgstr "Saldo"
+
+#: wizards/newaccountwizard/rc.cpp:52
+msgid "Time between interest changes"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:613 wizards/newaccountwizard/rc.cpp:53
+msgid "Days"
+msgstr "Dagar"
+
+#: dialogs/knewloanwizard.cpp:614 wizards/newaccountwizard/rc.cpp:54
+msgid "Weeks"
+msgstr "Veckor"
+
+#: wizards/newaccountwizard/rc.cpp:57
+#, fuzzy
+msgid "Next interest change is due"
+msgstr "Räntan förfaller:"
+
+#: wizards/newaccountwizard/rc.cpp:58
+#, fuzzy
+msgid "This page allows you to select the parent account."
+msgstr "Välj ett föräldrakonto."
+
+#: wizards/newaccountwizard/rc.cpp:60
+msgid ""
+"If this account is managed by an institution please select the institution "
+"from the list. If the institution does not exist yet, please choose the "
+"<b>New Institution</b> button to create it. Otherwise, leave this field "
+"empty.\n"
+"Enter the account number used by the institution to identify the account."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:62
+msgid "Select the institution which manages this account or leave empty"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:63
+#, fuzzy
+msgid "New Institution"
+msgstr "<Ingen institution>"
+
+#: wizards/newaccountwizard/rc.cpp:65
+msgid ""
+"Accounts managed by an institution are usually referenced by a unique number "
+"the so called account number. Enter that number here.\n"
+"\n"
+"KMyMoney currently uses this number only for some online banking functions."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:67
+msgid "Enter the International Bank Account Number into this field"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:68
+msgid ""
+"You can enter the IBAN (International Bank Account Number) into this field "
+"if you know it. Usually, people at your institution can tell you the number "
+"or it is printed on your statements.\n"
+"\n"
+"See also http://en.wikipedia.org/wiki/International_Bank_Account_Number for "
+"more information.\n"
+"\n"
+"KMyMoney keeps this field only for documentation purposes and does not use "
+"it otherwise."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:69
+msgid ""
+"Now enter the details for your loan. You can leave one of the fields empty "
+"and KMyMoney will calculate it when you press the <b>Calculate</b> button. "
+"Before you can continue with the next page you also need to press "
+"<b>Calculate</b> so that KMyMoney can check the logical correctness of the "
+"values you have supplied."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:70
+msgid "The interest rate gets calculated"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:71
+msgid "when the payment is received"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:72
+#, fuzzy
+msgid "when the payment is due"
+msgstr "Räntan förfaller:"
+
+#: dialogs/rc.cpp:531 dialogs/rc.cpp:533 wizards/newaccountwizard/rc.cpp:73
+msgid "Loan amount"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:74
+msgid ""
+"Enter the amount of the loan in this field. If you want to calculate this "
+"field out of the other parameters, please leave it empty. If the field is "
+"marked as required (colored background) you have informed KMyMoney about the "
+"fact that there were already some payments towards the loan. In this case, "
+"please enter the ending balance of your last statement."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:76
+msgid ""
+"Please enter the interest rate in percent or leave the field empty to "
+"calculate it."
+msgstr ""
+
+#: dialogs/rc.cpp:559 wizards/newaccountwizard/rc.cpp:77
+msgid "Term"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:78
+msgid ""
+"Please enter the term of this loan or enter 0 to calculate it. The term is "
+"the time that is required to fully repay the loan. This time might be "
+"different from the time your loan contract is signed for."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:79
+msgid "Payment (principal and interest)"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:80
+msgid ""
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:81
+#, fuzzy
+msgid "Balloon payment"
+msgstr "en betalning"
+
+#: wizards/newaccountwizard/rc.cpp:82
+msgid ""
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:83
+#, fuzzy
+msgid "Calculate"
+msgstr "beräkna"
+
+#: wizards/newaccountwizard/rc.cpp:84
+msgid "Press this button to calculate/verify your loan details."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:85
+msgid ""
+"Pressing this button calculates a possibly missing parameter for your loan "
+"or verifies that the values entered match. If something is not correct you "
+"will receive information about it."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:86
+msgid ""
+"Now enter the information required for the periodic loan payments. If your "
+"regular payments contains any additional fees, click on the <b>Additional "
+"fees</b> button to enter them."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:87
+msgid "Principal + Interest"
+msgstr ""
+
+#: dialogs/rc.cpp:620 wizards/newaccountwizard/rc.cpp:89
+msgid "+"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:92
+#, fuzzy
+msgid "= periodical payments"
+msgstr "Periodisk betalning:"
+
+#: dialogs/rc.cpp:643 wizards/newaccountwizard/rc.cpp:94
+msgid ""
+"If this loan is for an asset, such as a car or a house, you can create the "
+"asset account now. An asset account represents the total value of an asset. "
+"The money from this loan will be transfered into the asset account you "
+"create or select.\n"
+"If this loan is a 'consumer loan' (money to use however you want), you can "
+"use a checking account instead."
+msgstr ""
+
+#: dialogs/rc.cpp:644 wizards/newaccountwizard/rc.cpp:95
+msgid "Don't create payout transaction"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:96
+msgid "Refinance existing loan"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:97
+msgid ""
+"Check this if you are refinancing a loan that already exists in KMyMoney"
+msgstr ""
+
+#: dialogs/rc.cpp:642 wizards/newaccountwizard/rc.cpp:98
+msgid "Asset Account"
+msgstr "Tillgångar"
+
+#: dialogs/rc.cpp:2 wizards/newaccountwizard/rc.cpp:99
+#, fuzzy
+msgid "Create"
+msgstr "&Skapa"
+
+#: wizards/newaccountwizard/rc.cpp:100
+#, fuzzy
+msgid "Loan account"
+msgstr "Låneutbetalning"
+
+#: dialogs/rc.cpp:646 wizards/newaccountwizard/rc.cpp:101
+msgid "Date of payment"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:102
+msgid ""
+"KMyMoney creates a schedule for this payment and reminds you whenever a "
+"payment must be made. Please select the account to/from which payments will "
+"be made and the category the interest will be assigned to.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+
+#: dialogs/rc.cpp:613 wizards/newaccountwizard/rc.cpp:103
+msgid "Interest category"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:104
+msgid ""
+"The category the interest part of the payment will be assigned to. If you "
+"borrow money you usually have to pay interest, so this should be an expense "
+"category. If you lend the money, you receive the interest. In this case, "
+"select an income category here."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:106
+msgid ""
+"Select the account from which you make your periodical payments or where you "
+"receive regular payments in case you lend the money. In most cases, this is "
+"a checking account."
+msgstr ""
+
+#: dialogs/rc.cpp:519 wizards/newaccountwizard/rc.cpp:107
+msgid "First payment due on"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:108
+msgid ""
+"For credit card accounts you can create a monthly schedule which will "
+"automatically remind you about the payment. Please fill in the details about "
+"this payment here."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:109
+msgid "Yes, remind me when the payment is due"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:110
+#, fuzzy
+msgid "Name of schedule"
+msgstr "Nytt schema"
+
+#: dialogs/rc.cpp:151 dialogs/rc.cpp:218 dialogs/rc.cpp:219
+#: reports/listtable.cpp:199 views/kscheduledview.cpp:72 widgets/rc.cpp:113
+#: widgets/register.cpp:57 wizards/newaccountwizard/rc.cpp:111
+msgid "Payee"
+msgstr "Betalningsmottagare"
+
+#: wizards/newaccountwizard/rc.cpp:112
+msgid "Estimated monthly payment"
+msgstr "Uppskattat månadsbelopp"
+
+#: wizards/newaccountwizard/rc.cpp:113
+msgid "Due date of next payment"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:114
+msgid ""
+"Payment should be made\n"
+"from account"
+msgstr ""
+
+#: wizards/newuserwizard/knewuserwizard.cpp:79
+msgid "KMyMoney New File Setup"
+msgstr ""
+
+#: wizards/newuserwizard/knewuserwizard.cpp:81
+#, fuzzy
+msgid "Introduction"
+msgstr "Institution"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:82
+msgid "Personal Data"
+msgstr ""
+
+#: wizards/newuserwizard/knewuserwizard.cpp:83
+#, fuzzy
+msgid "Select Currency"
+msgstr "Välj som basvaluta"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:84
+#, fuzzy
+msgid "Select Accounts"
+msgstr "Välj konto:"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:85
+msgid "Set preferences"
+msgstr ""
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid ""
+"Unable to load data, because no contact has been associated with the owner "
+"of the standard addressbook."
+msgstr ""
+"Kan ej ladda data då ingen kontakt associerats med ägaren till "
+"standardadressboken."
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid "Addressbook import"
+msgstr "Import av adressbok"
+
+#: wizards/newuserwizard/rc.cpp:1
+msgid ""
+"A typical KMyMoney user maintains a checking a account with some institution "
+"and uses it to receive money or pay bills. If this is not the case, please "
+"deselect the checkbox below and continue on the next page."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:2
+msgid "I have a checking account that I want to manage with KMyMoney"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:3
+msgid "The name of the instititution that issued the account."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:4
+msgid ""
+"Each institution has a routing number. Enter it here. If uncertain, leave "
+"the field blank. You can modify it later."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:5
+#, fuzzy
+msgid "Name of the institution"
+msgstr "Namn på lånet"
+
+#: wizards/newuserwizard/rc.cpp:6
+#, fuzzy
+msgid "Routing number"
+msgstr "Kontonummer"
+
+#: wizards/newuserwizard/rc.cpp:7
+msgid ""
+"In general the institution that issued the account also issued a number for "
+"it. Enter it here. If uncertain, you can modify this entry later."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:8
+msgid ""
+"Enter a descriptive name that will be used by KMyMoney to identify your "
+"checking account."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:10
+msgid ""
+"Enter the date from when on you plan to keep track of the transactions in "
+"that account. This is usually the date of the last statement. If uncertain, "
+"leave as is."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:11
+#, fuzzy
+msgid "Number of the account"
+msgstr "Namn på lånet"
+
+#: wizards/newuserwizard/rc.cpp:12
+#, fuzzy
+msgid "Name of the account"
+msgstr "Namn på lånet"
+
+#: wizards/newuserwizard/rc.cpp:15
+msgid ""
+"Enter the opening balance of the account. This is usually the ending balance "
+"of the last statement. If uncertain, leave as is."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:16
+msgid ""
+"The fields below allow you to enter some information about your checking "
+"account. Once this wizard finishes, the account will be created for you "
+"within KMyMoney."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:17
+msgid ""
+"KMyMoney supports multiple currencies. Your reports will be based on a "
+"default curreny which you can select here. The default for new accounts is "
+"also the currency you select here."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:18
+msgid ""
+"KMyMoney will store your financial data in a file on the disk. A standard "
+"filename within your KDE user environment will be the default. This is just "
+"provided for convenience and you can choose any other location here."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:19
+msgid ""
+"Either the currently selected file exists or the selected directory does not "
+"exist. Please make sure, that\n"
+"\n"
+"<ul>\n"
+"<li>the selected directory exists and</li>\n"
+"<li>the filename is not currently used in this directory.</li>\n"
+"</ul>"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:20
+msgid ""
+"This finishes the setup of your KMyMoney environment. You can now press the "
+"Finish button and start using KMyMoney to record your financial transactions."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:21
+msgid ""
+"Please enter some information about yourself.<br><br>\n"
+"\n"
+"This information will be seen and used only by you. The information is used "
+"to personalize KMyMoney, to encrypt your file, etc."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:28
+msgid "Zip code"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:30
+msgid "Welcome to KMyMoney!"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:31
+msgid ""
+"You have started KMyMoney for the first time on this computer. Before this "
+"program can help you to manage your finances, it needs to collect some data "
+"from you.<p>\n"
+"\n"
+"On the next few pages you will be guided through the steps necessary to "
+"setup the program. This will happen only once."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:32
+msgid ""
+"<p>KMyMoney can encrypt your datafile using GPG Encryption. GPG encryption "
+"is one of the most secure methods in the world for protecting data. All of "
+"your account numbers and other important financial information will be very "
+"secure.</p>"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:33
+msgid ""
+"If you would like to review or change any preference settings for KMyMoney "
+"at this time, you can do so here. If not just click <b>Next</b>."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:34
+msgid "Configure preferences now"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:35
+msgid ""
+"You can change the configuration options at any time using the configuration "
+"dialog. Just select the <b>Configure KMyMoney...</b> option in the "
+"<b>Settings</b> menu."
+msgstr ""
+
+#: dialogs/rc.cpp:83 dialogs/rc.cpp:411 dialogs/rc.cpp:435
+#: kmymoneyutils.cpp:92 kmymoneyutils.cpp:105 mymoney/mymoneyaccount.cpp:753
+#: mymoney/mymoneysecurity.cpp:160
+msgid "Stock"
+msgstr "Aktie"
+
+#: dialogs/rc.cpp:84 dialogs/rc.cpp:412 dialogs/rc.cpp:436
+#: kmymoneyutils.cpp:107 mymoney/mymoneysecurity.cpp:163
+msgid "Mutual Fund"
+msgstr "Fond"
+
+#: dialogs/rc.cpp:85 dialogs/rc.cpp:413 dialogs/rc.cpp:437
+#: kmymoneyutils.cpp:109 mymoney/mymoneysecurity.cpp:166
+msgid "Bond"
+msgstr ""
+
+#: mymoney/mymoneysecurity.cpp:172 reports/querytable.cpp:1150
+#: widgets/kmymoneyaccountselector.cpp:76
+msgid "None"
+msgstr ""
+
+#: dialogs/rc.cpp:46 kmymoneyutils.cpp:402 mymoney/mymoneyaccount.cpp:759
+#: mymoney/mymoneyscheduled.cpp:1002 mymoney/mymoneysecurity.cpp:175
+#: views/kforecastview.cpp:174 widgets/register.cpp:54
+#: widgets/register.cpp:485 widgets/transaction.cpp:708
+#: widgets/transaction.cpp:1459
+msgid "Unknown"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragesql.cpp:191
+msgid ""
+"Database apparently in use\n"
+"Opened by %1 on %2 at %3.\n"
+"Open anyway?"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragesql.cpp:229
+msgid "Cannot currently create database for driver %1; please create manually"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragesql.cpp:244
+msgid "Error in create database %1; do you have create permissions?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1329
+#: mymoney/storage/mymoneystoragexml.cpp:166
+msgid "Loading transactions..."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1190
+#: mymoney/storage/mymoneystoragexml.cpp:173
+msgid "Loading accounts..."
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:180
+msgid "Loading securities..."
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:187
+msgid "Loading reports..."
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:268
+msgid "Unknown XML tag %1 found in line %2"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:274
+msgid "Exception while creating a %1 element: %2"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:513
+msgid "Loading file information..."
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:591
+#, fuzzy
+msgid "Loading user information..."
+msgstr "Generell information"
+
+#: mymoney/storage/mymoneystoragexml.cpp:655
+msgid "Saving accounts..."
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:678
+#, fuzzy
+msgid "Saving transactions..."
+msgstr "Redigera transaktioner..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:747
+#, fuzzy
+msgid "Saving reports..."
+msgstr "Rapporter"
+
+#: mymoney/storage/mymoneystoragexml.cpp:762
+msgid "Saving budgets..."
+msgstr ""
+
+#: mymoney/storage/mymoneystoragedump.cpp:414
+msgid "not reconciled"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragedump.cpp:417
+msgid "cleared"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragedump.cpp:420
+msgid "reconciled"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragedump.cpp:423
+msgid "frozen"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragedump.cpp:426
+msgid "unknown"
+msgstr ""
+
+#: mymoney/mymoneyaccount.cpp:101
+msgid ""
+"Account %1 contains an opening balance. Please use a KMyMoney version >= 0.8 "
+"and < 0.9 to correct the problem."
+msgstr ""
+
+#: mymoney/mymoneyaccount.cpp:597
+msgid ""
+"_: Brokerage (suffix for account names)\n"
+"Brokerage"
+msgstr ""
+
+#: kmymoneyutils.cpp:74 mymoney/mymoneyaccount.cpp:726
+msgid "Certificate of Deposit"
+msgstr ""
+
+#: kmymoneyutils.cpp:78 mymoney/mymoneyaccount.cpp:732
+msgid "Money Market"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:186 converter/mymoneytemplate.cpp:187
+#: dialogs/knewaccountdlg.cpp:1018 kmymoneyutils.cpp:86
+#: mymoney/mymoneyaccount.cpp:744 views/kaccountsview.cpp:360
+#: views/kbudgetview.cpp:372 views/kcategoriesview.cpp:178
+#: views/khomeview.cpp:1813 views/kmymoneyview.cpp:767
+#: widgets/kmymoneyaccountselector.cpp:68
+#: widgets/kmymoneyaccountselector.cpp:179
+#: widgets/kmymoneyaccountselector.cpp:370 widgets/register.cpp:828
+msgid "Income"
+msgstr "Inkomst"
+
+#: converter/mymoneytemplate.cpp:190 converter/mymoneytemplate.cpp:191
+#: dialogs/knewaccountdlg.cpp:1020 kmymoneyutils.cpp:88
+#: mymoney/mymoneyaccount.cpp:747 views/kaccountsview.cpp:364
+#: views/kbudgetview.cpp:378 views/kcategoriesview.cpp:182
+#: views/kmymoneyview.cpp:768 widgets/kmymoneyaccountselector.cpp:72
+#: widgets/kmymoneyaccountselector.cpp:180
+#: widgets/kmymoneyaccountselector.cpp:380 widgets/register.cpp:829
+msgid "Expense"
+msgstr "Utgift"
+
+#: kmymoneyutils.cpp:90 mymoney/mymoneyaccount.cpp:750
+msgid "Investment Loan"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:47
+msgid "Opening Balances"
+msgstr "Öppningsbalanser"
+
+#: mymoney/mymoneyfile.cpp:398
+msgid "Cannot remove transaction that references a closed account."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1414 mymoney/mymoneyfile.cpp:1433
+#: mymoney/mymoneyfile.cpp:1447 mymoney/mymoneyfile.cpp:1469
+#, fuzzy
+msgid "* Problem with account '%1'"
+msgstr "Kunde inte justera schema: "
+
+#: mymoney/mymoneyfile.cpp:1419
+msgid " * Parent account '%1' belongs to a different group."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1420 mymoney/mymoneyfile.cpp:1450
+msgid " New parent account is the top level account '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1436
+msgid " * Parent account '%1' does not contain '%2' as sub-account."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1449
+msgid " * The parent with id %1 does not exist anymore."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1471
+msgid " * Child account with id %1 does not exist anymore."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1472
+msgid " The child account list will be reconstructed."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1492
+msgid " * Unable to update account data in engine."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1499
+msgid "* Reconstructing the child lists for"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1536
+msgid " * Unable to update account data for account %1 in engine"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1554
+msgid " * Payee %1 recreated with fixed id"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1583
+msgid " * Payee id updated in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1596
+msgid " * shares set to value in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1599
+msgid " * value set to shares in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1605
+msgid ""
+" * Split %2 in transaction '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1616
+msgid " * action marked as interest in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1643
+msgid " * Payee id updated in split of schedule '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1649
+msgid ""
+" * Split in scheduled transaction '%1' contained value != 0 and shares == 0."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1650
+msgid " Shares set to value."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1658
+msgid " * Removed bankid from split in scheduled transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1671
+msgid " * shares set to value in split in schedule '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1674
+msgid " * value set to shares in split in schedule '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1680
+msgid ""
+" * Split %2 in schedule '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1706
+msgid " * Payee id updated in report '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1723
+msgid " * Payee '%1' removed."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1730
+msgid "Finish! Data is consistent."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1732
+msgid "Finish! %1 problem(s) corrected. %2 problem(s) still present."
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:873 mymoney/mymoneyscheduled.cpp:918
+#: mymoney/mymoneyscheduled.cpp:969 mymoney/mymoneyscheduled.cpp:1265
+#: mymoney/mymoneyscheduletest.cpp:1336
+msgid "Once"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:875 mymoney/mymoneyscheduled.cpp:924
+#: mymoney/mymoneyscheduled.cpp:1267 mymoney/mymoneyscheduletest.cpp:1337
+#: widgets/rc.cpp:72
+msgid "Daily"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:877 mymoney/mymoneyscheduled.cpp:931
+#: mymoney/mymoneyscheduled.cpp:1269 mymoney/mymoneyscheduletest.cpp:1338
+#: widgets/rc.cpp:73
+msgid "Weekly"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:881 mymoney/mymoneyscheduled.cpp:932
+#: mymoney/mymoneyscheduled.cpp:1273 mymoney/mymoneyscheduletest.cpp:1339
+msgid "Every other week"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:879 mymoney/mymoneyscheduled.cpp:1271
+#: mymoney/mymoneyscheduletest.cpp:1340
+msgid "Fortnightly"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:883 mymoney/mymoneyscheduled.cpp:941
+#: mymoney/mymoneyscheduled.cpp:1275 mymoney/mymoneyscheduletest.cpp:1341
+#, fuzzy
+msgid "Every half month"
+msgstr "en månad"
+
+#: mymoney/mymoneyscheduled.cpp:887 mymoney/mymoneyscheduled.cpp:934
+#: mymoney/mymoneyscheduled.cpp:1279 mymoney/mymoneyscheduletest.cpp:1342
+msgid "Every four weeks"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:893 mymoney/mymoneyscheduled.cpp:935
+#: mymoney/mymoneyscheduled.cpp:1285 mymoney/mymoneyscheduletest.cpp:1344
+msgid "Every eight weeks"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:895 mymoney/mymoneyscheduled.cpp:948
+#: mymoney/mymoneyscheduled.cpp:1287 mymoney/mymoneyscheduletest.cpp:1345
+msgid "Every two months"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:897 mymoney/mymoneyscheduled.cpp:949
+#: mymoney/mymoneyscheduled.cpp:1289 mymoney/mymoneyscheduletest.cpp:1346
+msgid "Every three months"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:899 mymoney/mymoneyscheduled.cpp:1291
+#: mymoney/mymoneyscheduletest.cpp:1347 widgets/rc.cpp:76
+msgid "Quarterly"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:901 mymoney/mymoneyscheduled.cpp:950
+#: mymoney/mymoneyscheduled.cpp:1293 mymoney/mymoneyscheduletest.cpp:1348
+msgid "Every four months"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:903 mymoney/mymoneyscheduled.cpp:951
+#: mymoney/mymoneyscheduled.cpp:1295 mymoney/mymoneyscheduletest.cpp:1349
+msgid "Twice yearly"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:905 mymoney/mymoneyscheduled.cpp:957
+#: mymoney/mymoneyscheduled.cpp:1297 mymoney/mymoneyscheduletest.cpp:1350
+#: widgets/rc.cpp:20 widgets/rc.cpp:77
+msgid "Yearly"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:907 mymoney/mymoneyscheduled.cpp:958
+#: mymoney/mymoneyscheduled.cpp:1299 mymoney/mymoneyscheduletest.cpp:1351
+msgid "Every other year"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:870 mymoney/mymoneyscheduled.cpp:913
+#: mymoney/mymoneyscheduled.cpp:966
+msgid "Any"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:885 mymoney/mymoneyscheduled.cpp:933
+#: mymoney/mymoneyscheduled.cpp:1277
+msgid "Every three weeks"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:889 mymoney/mymoneyscheduled.cpp:925
+#: mymoney/mymoneyscheduled.cpp:1281
+msgid "Every thirty days"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:971
+#, fuzzy
+msgid "Day"
+msgstr "Dagar"
+
+#: mymoney/mymoneyscheduled.cpp:973 reports/listtable.cpp:206
+#: widgets/kmymoneycalendar.cpp:123 widgets/rc.cpp:97
+msgid "Week"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:975
+#, fuzzy
+msgid "Half-month"
+msgstr "en månad"
+
+#: mymoney/mymoneyscheduled.cpp:977 reports/listtable.cpp:205
+#: widgets/kmymoneycalendar.cpp:124 widgets/rc.cpp:96
+msgid "Month"
+msgstr ""
+
+#: dialogs/rc.cpp:400 mymoney/mymoneyscheduled.cpp:979 views/rc.cpp:14
+msgid "Year"
+msgstr "År"
+
+#: mymoney/mymoneyscheduled.cpp:989
+msgid "Bill"
+msgstr ""
+
+#: dialogs/rc.cpp:107 dialogs/rc.cpp:162 dialogs/rc.cpp:249 dialogs/rc.cpp:754
+#: mymoney/mymoneyscheduled.cpp:992 widgets/kmymoneycombo.cpp:420
+#: widgets/register.cpp:571
+msgid "Deposit"
+msgstr "Insättning"
+
+#: mymoney/mymoneyscheduled.cpp:995 reports/querytable.cpp:594
+#: reports/querytable.cpp:696 widgets/kmymoneycombo.cpp:419
+msgid "Transfer"
+msgstr "Överföring"
+
+#: mymoney/mymoneyscheduled.cpp:1035
+msgid "Any (Error)"
+msgstr ""
+
+#: dialogs/rc.cpp:114 mymoney/mymoneyscheduled.cpp:1047
+msgid "Change the date to the previous Friday"
+msgstr "Ändra datumet till föregående fredag"
+
+#: dialogs/rc.cpp:115 mymoney/mymoneyscheduled.cpp:1050
+msgid "Change the date to the next Monday"
+msgstr "Ändra till nästkommande måndag"
+
+#: mymoney/mymoneyscheduled.cpp:1053
+msgid "Do Nothing"
+msgstr "Gör ingenting"
+
+#: kmymoney2.cpp:312
+#, fuzzy
+msgid "Open database..."
+msgstr "Öppningsbalanser"
+
+#: kmymoney2.cpp:313
+msgid "Save as database..."
+msgstr ""
+
+#: kmymoney2.cpp:314
+msgid "Backup..."
+msgstr ""
+
+#: kmymoney2.cpp:315 kmymoney2.cpp:321
+#, fuzzy
+msgid "QIF..."
+msgstr "QIF"
+
+#: kmymoney2.cpp:316
+msgid "Gnucash..."
+msgstr ""
+
+#: kmymoney2.cpp:317
+#, fuzzy
+msgid "Statement file..."
+msgstr "Schemainformation"
+
+#: kmymoney2.cpp:319 kmymoney2.cpp:320
+#, fuzzy
+msgid "Account Template..."
+msgstr "Konton"
+
+#: kmymoney2.cpp:322
+msgid "Personal Data..."
+msgstr ""
+
+#: kmymoney2.cpp:325
+msgid "Dump Memory"
+msgstr ""
+
+#: kmymoney2.cpp:327
+msgid "File-Information..."
+msgstr ""
+
+#: kmymoney2.cpp:332
+msgid "Find transaction..."
+msgstr ""
+
+#: kmymoney2.cpp:337
+msgid "Show Transaction Detail"
+msgstr ""
+
+#: kmymoney2.cpp:338 rc.cpp:60
+msgid "Hide reconciled transactions"
+msgstr "Dölj avstämda transaktioner"
+
+#: kmymoney2.cpp:339 rc.cpp:57
+msgid "Hide unused categories"
+msgstr "Dölj oanvända kategorier"
+
+#: kmymoney2.cpp:340
+msgid "Show all accounts"
+msgstr "Visa alla konton"
+
+#: kmymoney2.cpp:345
+msgid "New institution..."
+msgstr "Ny institution..."
+
+#: kmymoney2.cpp:346
+msgid "Edit institution..."
+msgstr "Redigera institution..."
+
+#: kmymoney2.cpp:347
+msgid "Delete institution..."
+msgstr "Radera institution..."
+
+#: kmymoney2.cpp:352
+msgid "New account..."
+msgstr ""
+
+#: kmymoney2.cpp:354
+msgid "Open ledger"
+msgstr ""
+
+#: kmymoney2.cpp:355
+msgid "Reconcile..."
+msgstr ""
+
+#: kmymoney2.cpp:356
+#, fuzzy
+msgid ""
+"_: Finish reconciliation\n"
+"Finish"
+msgstr "Avsluta avstämning"
+
+#: kmymoney2.cpp:357
+#, fuzzy
+msgid ""
+"_: Postpone reconciliation\n"
+"Postpone"
+msgstr "Uppskjut avstämning"
+
+#: kmymoney2.cpp:358
+msgid "Edit account..."
+msgstr "Redigera konto..."
+
+#: kmymoney2.cpp:359
+msgid "Delete account..."
+msgstr "Radera konto..."
+
+#: kmymoney2.cpp:360
+msgid "Close account"
+msgstr "Avsluta konto"
+
+#: kmymoney2.cpp:361
+msgid "Reopen account"
+msgstr "Återöppna konto"
+
+#: kmymoney2.cpp:362
+msgid "Transaction report"
+msgstr "Transaktionsrapport"
+
+#: kmymoney2.cpp:364
+msgid "Show balance chart..."
+msgstr ""
+
+#: kmymoney2.cpp:366
+#, fuzzy
+msgid "Map to online account"
+msgstr "Namn på lånet"
+
+#: kmymoney2.cpp:367
+#, fuzzy
+msgid "Unmap account"
+msgstr "Låneutbetalning"
+
+#: dialogs/settings/rc.cpp:126 kmymoney2.cpp:368 views/kpayeesview.cpp:363
+#: widgets/rc.cpp:50
+#, fuzzy
+msgid "Update"
+msgstr "Uppdat."
+
+#: kmymoney2.cpp:372
+#, fuzzy
+msgid "Update account..."
+msgstr "Redigera konto..."
+
+#: kmymoney2.cpp:373
+#, fuzzy
+msgid "Update all accounts..."
+msgstr "Redigera konto..."
+
+#: kmymoney2.cpp:378
+msgid "New category..."
+msgstr ""
+
+#: kmymoney2.cpp:379
+msgid "Edit category..."
+msgstr "Redigera kategori..."
+
+#: kmymoney2.cpp:380
+msgid "Delete category..."
+msgstr "Radera kategori..."
+
+#: kmymoney2.cpp:386
+msgid "QIF Profile Editor..."
+msgstr ""
+
+#: kmymoney2.cpp:387
+msgid "Securities..."
+msgstr ""
+
+#: kmymoney2.cpp:388
+#, fuzzy
+msgid "Currencies..."
+msgstr "Valutor"
+
+#: kmymoney2.cpp:389
+#, fuzzy
+msgid "Prices..."
+msgstr "Kurser"
+
+#: kmymoney2.cpp:390
+msgid "Update Stock and Currency Prices..."
+msgstr ""
+
+#: kmymoney2.cpp:391
+msgid "Consistency Check"
+msgstr ""
+
+#: kmymoney2.cpp:392
+msgid "Performance-Test"
+msgstr ""
+
+#: kmymoney2.cpp:393
+msgid "KCalc..."
+msgstr ""
+
+#: kmymoney2.cpp:399
+msgid "Enable all messages"
+msgstr ""
+
+#: kmymoney2.cpp:400
+msgid "KDE language settings..."
+msgstr ""
+
+#: kmymoney2.cpp:405
+msgid "&Show tip of the day"
+msgstr ""
+
+#: kmymoney2.cpp:410
+#, fuzzy
+msgid ""
+"_: New transaction button\n"
+"New"
+msgstr "Redigera transaktioner..."
+
+#: kmymoney2.cpp:415
+#, fuzzy
+msgid ""
+"_: Edit transaction button\n"
+"Edit"
+msgstr "Redigera transaktioner..."
+
+#: kmymoney2.cpp:417
+#, fuzzy
+msgid ""
+"_: Enter transaction\n"
+"Enter"
+msgstr "Registrera schemalagd transaktion"
+
+#: kmymoney2.cpp:420
+msgid ""
+"_: Edit split button\n"
+"Edit splits"
+msgstr ""
+
+#: kmymoney2.cpp:421
+#, fuzzy
+msgid ""
+"_: Cancel transaction edit\n"
+"Cancel"
+msgstr "Transaktionsdetaljer"
+
+#: kmymoney2.cpp:422
+#, fuzzy
+msgid ""
+"_: Delete transaction\n"
+"Delete"
+msgstr "Uppdelad transaktion"
+
+#: kmymoney2.cpp:423
+#, fuzzy
+msgid ""
+"_: Duplicate transaction\n"
+"Duplicate"
+msgstr "Uppdelad transaktion"
+
+#: kmymoney2.cpp:425 kmymoney2.cpp:4826 kmymoney2.cpp:5107
+#, fuzzy
+msgid ""
+"_: Button text for match transaction\n"
+"Match"
+msgstr "Registrera schemalagd transaktion"
+
+#: kmymoney2.cpp:426
+msgid ""
+"_: Accept 'imported' and 'matched' transaction\n"
+"Accept"
+msgstr ""
+
+#: kmymoney2.cpp:428
+msgid ""
+"_: Toggle reconciliation flag\n"
+"Toggle"
+msgstr ""
+
+#: kmymoney2.cpp:429
+#, fuzzy
+msgid ""
+"_: Mark transaction cleared\n"
+"Cleared"
+msgstr "Transaktionsdetaljer"
+
+#: kmymoney2.cpp:430
+#, fuzzy
+msgid ""
+"_: Mark transaction reconciled\n"
+"Reconciled"
+msgstr "Transaktionsdetaljer"
+
+#: kmymoney2.cpp:431
+#, fuzzy
+msgid ""
+"_: Mark transaction not reconciled\n"
+"Not reconciled"
+msgstr "Transaktionsdetaljer"
+
+#: kmymoney2.cpp:432
+#, fuzzy
+msgid ""
+"_: Select all transactions\n"
+"Select all"
+msgstr "Uppdelad transaktion"
+
+#: kmymoney2.cpp:434 kmymoney2.cpp:5497
+#, fuzzy
+msgid "Goto account"
+msgstr "konto"
+
+#: kmymoney2.cpp:435 kmymoney2.cpp:5495
+msgid "Goto payee"
+msgstr ""
+
+#: kmymoney2.cpp:436
+#, fuzzy
+msgid "Create scheduled transaction..."
+msgstr "Registrera schemalagd transaktion"
+
+#: kmymoney2.cpp:437
+msgid "Assign next number"
+msgstr ""
+
+#: kmymoney2.cpp:438
+#, fuzzy
+msgid ""
+"_: Combine transactions\n"
+"Combine"
+msgstr "Justeringstransaktion"
+
+#: kmymoney2.cpp:440
+#, fuzzy
+msgid "New investment"
+msgstr "Investering"
+
+#: kmymoney2.cpp:441
+#, fuzzy
+msgid "Edit investment..."
+msgstr "Investering"
+
+#: kmymoney2.cpp:442
+#, fuzzy
+msgid "Delete investment..."
+msgstr "Ta bort denna posten"
+
+#: kmymoney2.cpp:443
+#, fuzzy
+msgid "Online price update..."
+msgstr "\"Online\"-kursuppdatering ..."
+
+#: kmymoney2.cpp:444
+#, fuzzy
+msgid "Manual price update..."
+msgstr "Manuell kursuppdatering..."
+
+#: kmymoney2.cpp:446
+#, fuzzy
+msgid "New scheduled transaction..."
+msgstr "Registrera schemalagd transaktion"
+
+#: kmymoney2.cpp:447
+#, fuzzy
+msgid "Edit scheduled transaction..."
+msgstr "Registrera schemalagd transaktion"
+
+#: kmymoney2.cpp:448
+#, fuzzy
+msgid "Delete scheduled transaction..."
+msgstr "Registrera schemalagd transaktion"
+
+#: kmymoney2.cpp:449
+#, fuzzy
+msgid "Duplicate scheduled transaction"
+msgstr "Registrera schemalagd transaktion"
+
+#: kmymoney2.cpp:450
+#, fuzzy
+msgid "Enter next transaction..."
+msgstr "Registrera schemalagd transaktion"
+
+#: kmymoney2.cpp:451
+#, fuzzy
+msgid "Skip next transaction..."
+msgstr "Redigera transaktioner..."
+
+#: kmymoney2.cpp:453
+msgid "New payee"
+msgstr ""
+
+#: kmymoney2.cpp:454
+#, fuzzy
+msgid "Rename payee"
+msgstr "Döp om"
+
+#: kmymoney2.cpp:455
+#, fuzzy
+msgid "Delete payee"
+msgstr "Radera rapport?"
+
+#: kmymoney2.cpp:457
+msgid "New budget"
+msgstr ""
+
+#: kmymoney2.cpp:458
+msgid "Rename budget"
+msgstr ""
+
+#: kmymoney2.cpp:459
+msgid "Delete budget"
+msgstr "Radera budget?"
+
+#: kmymoney2.cpp:460
+#, fuzzy
+msgid "Copy budget"
+msgstr "siffror"
+
+#: kmymoney2.cpp:461
+msgid "Change budget year"
+msgstr ""
+
+#: kmymoney2.cpp:462
+msgid ""
+"_: Budget based on forecast\n"
+"Forecast"
+msgstr ""
+
+#: kmymoney2.cpp:467 kmymoney2.cpp:3990 kmymoney2.cpp:3993 kmymoney2.cpp:3999
+#, fuzzy
+msgid "New currency"
+msgstr "Valuta"
+
+#: kmymoney2.cpp:468 kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, fuzzy
+msgid "Rename currency"
+msgstr "Valuta"
+
+#: kmymoney2.cpp:469 kmymoney2.cpp:4039
+#, fuzzy
+msgid "Delete currency"
+msgstr "Valuta"
+
+#: dialogs/rc.cpp:69 kmymoney2.cpp:470
+msgid "Select as base currency"
+msgstr "Välj som basvaluta"
+
+#: kmymoney2.cpp:481
+msgid "View back"
+msgstr ""
+
+#: kmymoney2.cpp:482
+msgid "View forward"
+msgstr ""
+
+#: kmymoney2.cpp:611
+msgid "KMyMoney file needs saving. Save ?"
+msgstr ""
+
+#: kmymoney2.cpp:757
+msgid "Creating new document..."
+msgstr ""
+
+#: kmymoney2.cpp:869 kmymoney2.cpp:884
+msgid "Open a file."
+msgstr ""
+
+#: kmymoney2.cpp:872
+msgid ""
+"%1|KMyMoney files\n"
+"%2|All files (*.*)"
+msgstr ""
+
+#: kmymoney2.cpp:873
+msgid "Open File..."
+msgstr ""
+
+#: kmymoney2.cpp:925 kstartuplogo.cpp:100
+msgid "Loading file..."
+msgstr ""
+
+#: kmymoney2.cpp:986
+msgid ""
+"<b>%1</b> is either an invalid filename or the file does not exist. You can "
+"open another file or create a new one."
+msgstr ""
+
+#: kmymoney2.cpp:986
+msgid "File not found"
+msgstr ""
+
+#: kmymoney2.cpp:989
+msgid "File <b>%1</b> is already opened in another instance of KMyMoney"
+msgstr ""
+
+#: kmymoney2.cpp:989
+msgid "Duplicate open"
+msgstr ""
+
+#: kmymoney2.cpp:1001
+msgid "Saving file..."
+msgstr ""
+
+#: kmymoney2.cpp:1035 kmymoney2.cpp:1047 kmymoney2.cpp:1071
+#, c-format
+msgid "Additional encryption key(s) to be used: %1"
+msgstr ""
+
+#: kmymoney2.cpp:1056
+msgid "Saving file with a new filename..."
+msgstr ""
+
+#: kmymoney2.cpp:1067
+msgid "Encryption key to be used"
+msgstr ""
+
+#: kmymoney2.cpp:1072
+#, fuzzy
+msgid "Manage additional keys"
+msgstr "Tilläggsavgifter:"
+
+#: kmymoney2.cpp:1079
+#, fuzzy
+msgid "No encryption"
+msgstr "Beskrivning"
+
+#: kmymoney2.cpp:1102
+msgid ""
+"_: KMyMoney (Filefilter)\n"
+"KMyMoney files"
+msgstr ""
+
+#: kmymoney2.cpp:1103
+msgid ""
+"_: XML (Filefilter)\n"
+"XML files"
+msgstr ""
+
+#: kmymoney2.cpp:1104
+msgid ""
+"_: Anonymous (Filefilter)\n"
+"Anonymous files"
+msgstr ""
+
+#: kmymoney2.cpp:1105
+msgid "All files"
+msgstr ""
+
+#: kmymoney2.cpp:1193
+msgid "Saving file to database..."
+msgstr ""
+
+#: kmymoney2.cpp:1207
+msgid "Cannot save to current database."
+msgstr ""
+
+#: kmymoney2.cpp:1225
+msgid "Closing window..."
+msgstr "Stänger fönster..."
+
+#: kmymoney2.cpp:1228 kmymoney2.cpp:1249
+msgid "The file has been changed, save it ?"
+msgstr ""
+
+#: kmymoney2.cpp:1339 kmymoney2.cpp:1352
+msgid "Ready."
+msgstr ""
+
+#: kmymoney2.cpp:1397 kmymoney2.cpp:1433
+msgid "No KMyMoneyFile open"
+msgstr ""
+
+#: kmymoney2.cpp:1401
+msgid "Viewing personal data..."
+msgstr ""
+
+#: kmymoney2.cpp:1408
+msgid "Edit Personal Data"
+msgstr ""
+
+#: kmymoney2.cpp:1424
+#, c-format
+msgid "Unable to store user information: %1"
+msgstr ""
+
+#: kmymoney2.cpp:1447
+msgid "Importing account templates."
+msgstr ""
+
+#: kmymoney2.cpp:1462
+msgid "Unable to import template(s): %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:1471
+msgid "Exporting account templates."
+msgstr ""
+
+#: kmymoney2.cpp:1474
+msgid ""
+"*.kmt|KMyMoney template files\n"
+"*.*|All files"
+msgstr ""
+
+#: kmymoney2.cpp:1475
+msgid "Save as..."
+msgstr ""
+
+#: kmymoney2.cpp:1517
+msgid "Importing file..."
+msgstr ""
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "The statements have been processed with the following results:"
+msgstr ""
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:1754 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+#, fuzzy
+msgid "Statement stats"
+msgstr "Schemainformation"
+
+#: kmymoney2.cpp:1602
+msgid ""
+"You cannot import GnuCash data into an existing file. Do you wish to save "
+"this file?"
+msgstr ""
+
+#: kmymoney2.cpp:1615
+msgid "Importing a Gnucash file."
+msgstr ""
+
+#: kmymoney2.cpp:1618
+msgid ""
+"%1|Gnucash files\n"
+"%2|All files (*.*)"
+msgstr ""
+
+#: kmymoney2.cpp:1619
+msgid "Import Gnucash file..."
+msgstr ""
+
+#: kmymoney2.cpp:1658
+msgid "Importing an XML Statement."
+msgstr ""
+
+#: kmymoney2.cpp:1661
+msgid ""
+"%1|XML files\n"
+"%2|All files (*.*)"
+msgstr ""
+
+#: kmymoney2.cpp:1662
+msgid "Import XML Statement..."
+msgstr ""
+
+#: kmymoney2.cpp:1718
+msgid "Error importing %1: This file is not a valid KMM statement file."
+msgstr ""
+
+#: kmymoney2.cpp:1718
+msgid "Invalid Statement"
+msgstr ""
+
+#: kmymoney2.cpp:1754
+msgid "The statement has been processed with the following results:"
+msgstr ""
+
+#: kmymoney2.cpp:1763
+msgid "Exporting file..."
+msgstr ""
+
+#: kmymoney2.cpp:1786
+msgid "The file <b>%1</b> already exists. Do you really want to override it?"
+msgstr ""
+
+#: kmymoney2.cpp:1786
+msgid "File already exists"
+msgstr ""
+
+#: dialogs/rc.cpp:347 dialogs/rc.cpp:649 dialogs/rc.cpp:798 kmymoney2.cpp:1815
+msgid "General"
+msgstr "Generellt"
+
+#: kmymoney2.cpp:1816
+msgid "Register"
+msgstr ""
+
+#: kmymoney2.cpp:1817 views/khomeview.cpp:88 views/kmymoneyview.cpp:136
+msgid "Home"
+msgstr "Hem"
+
+#: kmymoney2.cpp:1818 views/kmymoneyview.cpp:176
+#, fuzzy
+msgid ""
+"Scheduled\n"
+"transactions"
+msgstr "Registrera schemalagd transaktion"
+
+#: kmymoney2.cpp:1819
+#, fuzzy
+msgid "Encryption"
+msgstr "Beskrivning"
+
+#: kmymoney2.cpp:1820
+#, fuzzy
+msgid "Colors"
+msgstr "Färger"
+
+#: dialogs/rc.cpp:344 dialogs/settings/rc.cpp:107 kmymoney2.cpp:1822
+#: widgets/rc.cpp:33
+msgid "Online Quotes"
+msgstr ""
+
+#: kmymoney2.cpp:1823 reports/pivottable.cpp:2426 views/kmymoneyview.cpp:251
+#: views/kmymoneyview.cpp:253 views/kreportsview.cpp:1415 views/rc.cpp:41
+msgid "Forecast"
+msgstr ""
+
+#: kmymoney2.cpp:1824
+msgid "Plugins"
+msgstr ""
+
+#: kmymoney2.cpp:1893
+msgid ""
+"The file must be saved first before it can be backed up. Do you want to "
+"continue?"
+msgstr ""
+
+#: kmymoney2.cpp:1910
+msgid ""
+"The current implementation of the backup functionality only supports local "
+"files as source files! Your current source file is '%1'."
+msgstr ""
+
+#: kmymoney2.cpp:1913
+msgid "Local files only"
+msgstr ""
+
+#: kmymoney2.cpp:1928
+#, c-format
+msgid "Mounting %1"
+msgstr ""
+
+#: kmymoney2.cpp:1967
+msgid "Backup file for today exists on that device. Replace ?"
+msgstr ""
+
+#: dialogs/rc.cpp:7 kmymoney2.cpp:1967 kmymoney2.cpp:1994 kmymoney2.cpp:2024
+#: kmymoney2.cpp:2032 kmymoney2.cpp:2057 kmymoney2.cpp:2059
+msgid "Backup"
+msgstr "Säkerhetskopia"
+
+#: kmymoney2.cpp:1967
+msgid "&Replace"
+msgstr ""
+
+#: kmymoney2.cpp:1972 kmymoney2.cpp:1997 kmymoney2.cpp:2016 kmymoney2.cpp:2035
+#, c-format
+msgid "Unmounting %1"
+msgstr ""
+
+#: kmymoney2.cpp:1987
+#, c-format
+msgid "Writing %1"
+msgstr ""
+
+#: kmymoney2.cpp:1994
+msgid "Error mounting device"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1995 kmymoney2.cpp:2023 kmymoney2.cpp:2055
+msgid "Done"
+msgstr ""
+
+#: kmymoney2.cpp:2024 kmymoney2.cpp:2057
+msgid "File successfully backed up"
+msgstr ""
+
+#: kmymoney2.cpp:2032
+msgid "Error copying file to device"
+msgstr ""
+
+#: kmymoney2.cpp:2059
+msgid "Error unmounting device"
+msgstr ""
+
+#: kmymoney2.cpp:2143
+#, fuzzy, c-format
+msgid "Cannot add institution: %1"
+msgstr "Kan inte lägga till institution: "
+
+#: kmymoney2.cpp:2185
+#, fuzzy, c-format
+msgid "Unable to store institution: %1"
+msgstr "Kan inte lägga till institution: "
+
+#: kmymoney2.cpp:2192
+#, fuzzy, c-format
+msgid "Unable to edit institution: %1"
+msgstr "Kan inte lägga till institution: "
+
+#: kmymoney2.cpp:2203
+msgid "Do you really want to delete institution <b>%1</b> ?"
+msgstr ""
+
+#: kmymoney2.cpp:2211 kmymoney2.cpp:2215
+#, fuzzy, c-format
+msgid "Unable to delete institution: %1"
+msgstr "Kan inte lägga till institution: "
+
+#: kmymoney2.cpp:2268
+#, fuzzy, c-format
+msgid "Unable to find account: %1"
+msgstr "Kunde inte skapa konto: %1"
+
+#: kmymoney2.cpp:2309
+msgid ""
+"This account is a liability and if the opening balance represents money "
+"owed, then it should be negative. Negate the amount?\n"
+"\n"
+"Please click Yes to change the opening balance to %1,\n"
+"Please click No to leave the amount as %2,\n"
+"Please click Cancel to abort the account creation."
+msgstr ""
+
+#: kmymoney2.cpp:2345 kmymoney2.cpp:2346
+msgid "Loan payout"
+msgstr "Låneutbetalning"
+
+#: dialogs/knewloanwizard.cpp:892 kmymoney2.cpp:2374
+#, c-format
+msgid "Unable to add account: %1"
+msgstr "Kunde inte skapa konto: %1"
+
+#: kmymoney2.cpp:2392
+msgid ""
+"The category <b>%1</b> currently does not exist. Do you want to create it?"
+"<p><i>The parent account will default to <b>%2</b> but can be changed in the "
+"following dialog</i>."
+msgstr ""
+
+#: kmymoney2.cpp:2392
+msgid "Create category"
+msgstr ""
+
+#: kmymoney2.cpp:2429
+msgid "Create a new Category"
+msgstr ""
+
+#: kmymoney2.cpp:2505
+#, c-format
+msgid "Unable to create account: %1"
+msgstr ""
+
+#: kmymoney2.cpp:2516
+msgid ""
+"The security <b>%1</b> currently does not exist as sub-account of <b>%2</b>. "
+"Do you want to create it?"
+msgstr ""
+
+#: kmymoney2.cpp:2517
+#, fuzzy
+msgid "Create security"
+msgstr "Skapa schema..."
+
+#: kmymoney2.cpp:2551
+msgid "Do you really want to delete the investment <b>%1</b>?"
+msgstr ""
+
+#: kmymoney2.cpp:2551
+msgid "Delete investment"
+msgstr ""
+
+#: kmymoney2.cpp:2558
+#, c-format
+msgid "Unable to delete investment: %1"
+msgstr ""
+
+#: kmymoney2.cpp:2640 kmymoney2.cpp:2646
+#, fuzzy
+msgid "Unable to add scheduled transaction: "
+msgstr "Datum för sista betalning:"
+
+#: kmymoney2.cpp:2722
+#, fuzzy
+msgid "Adjusting transactions..."
+msgstr "Justeringstransaktion"
+
+#: kmymoney2.cpp:2747
+#, fuzzy
+msgid "Adjusting scheduled transactions..."
+msgstr "Justeringstransaktion"
+
+#: kmymoney2.cpp:2765
+#, fuzzy
+msgid "Adjusting budgets..."
+msgstr "Skapa schema..."
+
+#: kmymoney2.cpp:2783
+msgid ""
+"Unable to exchange category <b>%1</b> with category <b>%2</b>. Reason: %3"
+msgstr ""
+
+#: kmymoney2.cpp:2804
+msgid "Do you really want to delete category <b>%1</b>?"
+msgstr ""
+
+#: kmymoney2.cpp:2811
+msgid "Unable to delete category <b>%1</b>. Cause: %2"
+msgstr ""
+
+#: kmymoney2.cpp:2823
+msgid ""
+"Do you want to delete category <b>%1</b> with all its sub-categories or only "
+"the category itself? If you only delete the category itself, all its sub-"
+"categories will be made sub-categories of <b>%2</b>."
+msgstr ""
+
+#: kmymoney2.cpp:2827
+msgid "Delete all"
+msgstr ""
+
+#: kmymoney2.cpp:2828
+#, fuzzy
+msgid "Just the category"
+msgstr "Räntekategori:"
+
+#: kmymoney2.cpp:2858
+msgid ""
+"Some sub-categories of category <b>%1</b> cannot be deleted, because they "
+"are still used. They will be made sub-categories of <b>%2</b>. Proceed?"
+msgstr ""
+
+#: kmymoney2.cpp:2878
+msgid "Unable to delete a sub-category of category <b>%1</b>. Reason: %2"
+msgstr ""
+
+#: kmymoney2.cpp:2889
+msgid "Do you really want to delete account <b>%1</b>?"
+msgstr ""
+
+#: kmymoney2.cpp:2901
+msgid "Unable to delete account '%1'. Cause: %2"
+msgstr ""
+
+#: kmymoney2.cpp:2917
+#, fuzzy
+msgid "Edit account '%1'"
+msgstr "Redigera konto..."
+
+#: kmymoney2.cpp:2922
+#, fuzzy
+msgid "Edit category '%1'"
+msgstr "Redigera kategori..."
+
+#: kmymoney2.cpp:3008
+#, fuzzy
+msgid "Unable to modify account '%1'. Cause: %2"
+msgstr "Kunde inte justera schema: "
+
+#: kmymoney2.cpp:3065
+msgid ""
+"KMyMoney has detected some overdue scheduled transactions for this account. "
+"Do you want to enter those scheduled transactions now?"
+msgstr ""
+
+#: kmymoney2.cpp:3065
+#, fuzzy
+msgid "Scheduled transactions found"
+msgstr "Registrera schemalagd transaktion"
+
+#: kmymoney2.cpp:3163
+msgid ""
+"You are about to finish the reconciliation of this account with a difference "
+"between your bank statement and the transactions marked as cleared.\n"
+"Are you sure you want to finish the reconciliation ?"
+msgstr ""
+
+#: kmymoney2.cpp:3165
+msgid "Confirm end of reconciliation"
+msgstr ""
+
+#: kmymoney2.cpp:3339
+msgid ""
+"You have closed this account. It remains in the system because you have "
+"transactions which still refer to it, but is not shown in the views. You can "
+"make it visible again by going to the View menu and selecting <b>Show all "
+"accounts</b> or by unselecting the <b>Don't show closed accounts</b> setting."
+msgstr ""
+
+#: kmymoney2.cpp:3379
+msgid "<b>%1</b> cannot be moved to institution <b>%2</b>. Reason: %3"
+msgstr ""
+
+#: kmymoney2.cpp:3393
+msgid "<b>%1</b> cannot be moved to <b>%2</b>. Reason: %3"
+msgstr ""
+
+#: kmymoney2.cpp:3408
+#, fuzzy
+msgid "%1 YTD Account Transactions"
+msgstr "Val av konto"
+
+#: dialogs/kbalancechartdlg.cpp:71 kmymoney2.cpp:3409
+#: views/kforecastview.cpp:650 views/khomeview.cpp:276
+#: views/khomeview.cpp:1384 views/kreportsview.cpp:619
+msgid "Generated Report"
+msgstr "Genererad rapport"
+
+#: dialogs/rc.cpp:324 dialogs/settings/rc.cpp:80 kmymoney2.cpp:3411
+#: views/kreportsview.cpp:1062 views/rc.cpp:58 views/rc.cpp:59
+msgid "Transactions"
+msgstr ""
+
+#: kmymoney2.cpp:3449
+#, fuzzy, c-format
+msgid "Unable to add scheduled transaction: %1"
+msgstr "Kunde inte justera schema: "
+
+#: kmymoney2.cpp:3449
+#, fuzzy
+msgid "Add scheduled transaction"
+msgstr "Registrera schemalagd transaktion"
+
+#: kmymoney2.cpp:3489
+msgid ""
+"You have entered a scheduled transaction date of <b>%1</b>. Because the "
+"scheduled transaction was last paid on <b>%2</b>, KMyMoney will "
+"automatically adjust the scheduled transaction date to the next date unless "
+"the last payment date is reset. Do you want to reset the last payment date?"
+msgstr ""
+
+#: kmymoney2.cpp:3489
+#, fuzzy
+msgid "Reset Last Payment Date"
+msgstr "Betalning"
+
+#: kmymoney2.cpp:3499 kmymoney2.cpp:3519 kmymoney2.cpp:3531
+#, fuzzy
+msgid "Unable to modify scheduled transaction '%1'"
+msgstr "Kunde inte justera schema: "
+
+#: kmymoney2.cpp:3543
+msgid "Are you sure you want to delete the scheduled transaction <b>%1</b>?"
+msgstr ""
+
+#: kmymoney2.cpp:3546
+msgid ""
+"In case of loan payments it is currently not possible to recreate the "
+"scheduled transaction."
+msgstr ""
+
+#: kmymoney2.cpp:3555
+#, fuzzy
+msgid "Unable to remove scheduled transaction '%1'"
+msgstr "Kunde inte justera schema: "
+
+#: kmymoney2.cpp:3569
+#, c-format
+msgid ""
+"_: Copy of scheduled transaction name\n"
+"Copy of %1"
+msgstr ""
+
+#: kmymoney2.cpp:3581 kmymoney2.cpp:4352
+msgid "Unable to duplicate transaction(s): %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:3595
+msgid ""
+"Do you really want to skip the <b>%1</b> transaction scheduled for <b>%2</b>?"
+msgstr ""
+
+#: kmymoney2.cpp:3605
+#, fuzzy
+msgid "Unable to skip scheduled transaction <b>%1</b>."
+msgstr "Kunde inte justera schema: "
+
+#: kmymoney2.cpp:3618
+#, fuzzy
+msgid "Unknown scheduled transaction '%1'"
+msgstr "Registrera schemalagd transaktion"
+
+#: kmymoney2.cpp:3673
+msgid ""
+"Are you sure you wish to stop this scheduled transaction from being entered "
+"into the register?\n"
+"\n"
+"KMyMoney will prompt you again next time it starts unless you manually enter "
+"it later."
+msgstr ""
+
+#: kmymoney2.cpp:3725 kmymoney2.cpp:3732
+#, fuzzy
+msgid "Unable to enter scheduled transaction '%1'"
+msgstr "Registrera schemalagd transaktion"
+
+#: kmymoney2.cpp:3743 kmymoney2.cpp:3783
+msgid "New Payee"
+msgstr ""
+
+#: kmymoney2.cpp:3745
+msgid "Do you want to add <b>%1</b> as payer/receiver ?"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:892 kmymoney2.cpp:3747
+msgid "New payee/receiver"
+msgstr ""
+
+#: kmymoney2.cpp:3773
+msgid "Unable to add payee"
+msgstr ""
+
+#: kmymoney2.cpp:3826
+msgid "Do you really want to remove the payee <b>%1</b>?"
+msgstr ""
+
+#: kmymoney2.cpp:3828
+msgid "Do you really want to remove all selected payees?"
+msgstr ""
+
+#: kmymoney2.cpp:3830
+msgid "Remove Payee"
+msgstr ""
+
+#: kmymoney2.cpp:3870
+msgid ""
+"At least one transaction/scheduled transaction is still referenced by a "
+"payee. Currently you have all payees selected. However, at least one payee "
+"must remain so that the transaction/scheduled transaction can be reassigned."
+msgstr ""
+
+#: kmymoney2.cpp:3925
+msgid "Unable to reassign payee of transaction/split"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:534 converter/mymoneystatementreader.cpp:959
+#: kmymoney2.cpp:3926 kmymoney2.cpp:3983 views/kbudgetview.cpp:636
+#: views/kbudgetview.cpp:737 views/kbudgetview.cpp:751
+#: views/kpayeesview.cpp:519 views/kpayeesview.cpp:870
+msgid "thrown in"
+msgstr ""
+
+#: kmymoney2.cpp:3982
+msgid "Unable to remove payee(s)"
+msgstr ""
+
+#: kmymoney2.cpp:3990
+msgid "Enter ISO 4217 code for the new currency"
+msgstr ""
+
+#: kmymoney2.cpp:3999
+#, c-format
+msgid "Cannot create new currency. %1"
+msgstr ""
+
+#: kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, c-format
+msgid "Cannot rename currency. %1"
+msgstr ""
+
+#: kmymoney2.cpp:4039
+msgid "Cannot delete currency %1. %2"
+msgstr ""
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Cannot set %1 as base currency: %2"
+msgstr "Kan inte välja %1 som basvaluta: %2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Set base currency"
+msgstr "Välj som basvaluta"
+
+#: kmymoney2.cpp:4065
+#, fuzzy, c-format
+msgid "Budget %1"
+msgstr "siffror"
+
+#: kmymoney2.cpp:4075
+msgid "Budget %1 (%2)"
+msgstr ""
+
+#: kmymoney2.cpp:4090 kmymoney2.cpp:4139
+msgid "Unable to add budget: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4105
+msgid "Do you really want to remove the budget <b>%1</b>?"
+msgstr ""
+
+#: kmymoney2.cpp:4107
+msgid "Do you really want to remove all selected budgets?"
+msgstr ""
+
+#: kmymoney2.cpp:4109
+#, fuzzy
+msgid "Remove Budget"
+msgstr "Ta bort andelar"
+
+#: kmymoney2.cpp:4122
+msgid "Unable to remove budget: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4134 views/kreportsview.cpp:659
+#, c-format
+msgid "Copy of %1"
+msgstr "Kopia av %1"
+
+#: kmymoney2.cpp:4164
+#, fuzzy
+msgid "Select year"
+msgstr "ett år"
+
+#: kmymoney2.cpp:4164
+#, fuzzy
+msgid "Budget year"
+msgstr "siffror"
+
+#: kmymoney2.cpp:4176 kmymoney2.cpp:4214 kmymoney2.cpp:4274
+msgid "Unable to modify budget: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4192 kmymoney2.cpp:4250
+msgid ""
+"The current budget already contains data. Continuing will replace all "
+"current values of this budget."
+msgstr ""
+
+#: kmymoney2.cpp:4222
+msgid ""
+"Please be aware that changes made in the following dialog affect all KDE "
+"applications not only KMyMoney."
+msgstr ""
+
+#: kmymoney2.cpp:4292
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to delete the transactions anyway?"
+msgstr ""
+
+#: kmymoney2.cpp:4295 views/kgloballedgerview.cpp:1043
+msgid "Transaction already reconciled"
+msgstr ""
+
+#: kmymoney2.cpp:4301
+msgid "Do you really want to delete the selected transaction?"
+msgstr ""
+
+#: kmymoney2.cpp:4303
+msgid "Do you really want to delete all %1 selected transactions?"
+msgstr ""
+
+#: kmymoney2.cpp:4305
+msgid "Delete transaction"
+msgstr ""
+
+#: kmymoney2.cpp:4306
+#, fuzzy
+msgid "Deleting transactions"
+msgstr "Uppdelad transaktion"
+
+#: kmymoney2.cpp:4321
+#, fuzzy
+msgid "Duplicating transactions"
+msgstr "Uppdelad transaktion"
+
+#: kmymoney2.cpp:4378
+msgid "Unable to delete transaction(s): %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4452 kmymoney2.cpp:4622
+msgid "Unable to modify transaction: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4514
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling and<br>- <b>Cancel</b> returns to the "
+"transaction editor.<p>You can also select an option to save the transaction "
+"automatically when e.g. selecting another transaction."
+msgstr ""
+
+#: kmymoney2.cpp:4514 kmymoney2.cpp:4517
+#, fuzzy
+msgid "Cancel transaction edit"
+msgstr "Transaktionsdetaljer"
+
+#: kmymoney2.cpp:4517
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling.<p>You can also select an option to save the "
+"transaction automatically when e.g. selecting another transaction."
+msgstr ""
+
+#: kmymoney2.cpp:4667
+msgid "Unable to accept transaction: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4846
+#, fuzzy
+msgid "Unable to unmatch the selected transactions"
+msgstr "Försök matcha liknande transaktioner"
+
+#: kmymoney2.cpp:4885
+msgid "No manually entered transaction selected for matching"
+msgstr ""
+
+#: kmymoney2.cpp:4887
+msgid "No imported transaction selected for matching"
+msgstr ""
+
+#: kmymoney2.cpp:4895
+#, fuzzy
+msgid "Unable to match the selected transactions"
+msgstr "Försök matcha liknande transaktioner"
+
+#: kmymoney2.cpp:5097
+#, fuzzy
+msgid "Create a new transaction"
+msgstr "Skapa ett nytt konto"
+
+#: kmymoney2.cpp:5163
+#, fuzzy
+msgid "Duplicate the current selected transactions"
+msgstr "Datum för sista betalning:"
+
+#: kmymoney2.cpp:5223
+#, fuzzy
+msgid ""
+"_: Button text for unmatch transaction\n"
+"Unmatch"
+msgstr "Registrera schemalagd transaktion"
+
+#: kmymoney2.cpp:5451 kmymoney2.cpp:5473
+msgid "Goto '%1'"
+msgstr ""
+
+#: kmymoney2.cpp:5582
+msgid "Running consistency check..."
+msgstr ""
+
+#: kmymoney2.cpp:5590
+#, c-format
+msgid "Consistency check failed: %1"
+msgstr ""
+
+#: kmymoney2.cpp:5594
+msgid "Consistency check result"
+msgstr ""
+
+#: kmymoney2.cpp:5603
+#, fuzzy
+msgid "Checking for overdue scheduled transactions..."
+msgstr "Registrera schemalagd transaktion"
+
+#: kmymoney2.cpp:5740
+msgid ""
+"You must first select a KMyMoney file before you can import a statement."
+msgstr ""
+
+#: kmymoney2.cpp:5746
+msgid "Importing a statement via Web Connect"
+msgstr ""
+
+#: kmymoney2.cpp:5759
+msgid ""
+"Unable to import %1 using %2 plugin. The plugin returned the following "
+"error: %3"
+msgstr ""
+
+#: kmymoney2.cpp:5759 plugins/ofximport/ofximporterplugin.cpp:646
+msgid "Importing error"
+msgstr ""
+
+#: kmymoney2.cpp:5780
+msgid "All messages have been enabled."
+msgstr ""
+
+#: kmymoney2.cpp:5780
+msgid "All messages"
+msgstr ""
+
+#: kmymoney2.cpp:5855
+msgid "Auto saving..."
+msgstr ""
+
+#: kmymoney2.cpp:5913
+#, fuzzy
+msgid "Unable to setup online parameters for account ''%1'"
+msgstr "Kunde inte justera schema: "
+
+#: kmymoney2.cpp:5928
+msgid ""
+"Do you really want to remove the mapping of account <b>%1</b> to an online "
+"account? Depending on the details of the online banking method used, this "
+"action cannot be reverted."
+msgstr ""
+
+#: kmymoney2.cpp:5928
+#, fuzzy
+msgid "Remove mapping to online account"
+msgstr "Namn på lånet"
+
+#: kmymoney2.cpp:5939
+#, fuzzy, c-format
+msgid "Unable to unmap account from online account: %1"
+msgstr "Kunde inte skapa konto: %1"
+
+#: kmymoney2.cpp:5956
+#, fuzzy
+msgid " (Brokerage)"
+msgstr "%1 (Kontantdepå)"
+
+#: kmymoney2.cpp:5957
+msgid ""
+"You try to map a brokerage account to an online account. This is usually not "
+"advisable. In general, the investment account should be mapped to the online "
+"account. Please cancel if you intended to map the investment account, "
+"continue otherwise"
+msgstr ""
+
+#: kmymoney2.cpp:5957
+#, fuzzy
+msgid "Mapping brokerage account"
+msgstr "Välj ett föräldrakonto."
+
+#: kmymoney2.cpp:5964
+msgid "Select online banking plugin"
+msgstr ""
+
+#: kmymoney2.cpp:6005
+#, fuzzy, c-format
+msgid "Unable to map account to online account: %1"
+msgstr "Kunde inte skapa konto: %1"
+
+#: converter/mymoneyqifreader.cpp:407 converter/mymoneytemplate.cpp:73
+#: views/kmymoneyview.cpp:590
+msgid "Error while loading file '%1'!"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:409 converter/mymoneyqifreader.cpp:965
+#: converter/mymoneytemplate.cpp:75 views/kmymoneyview.cpp:592
+msgid "File access error"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:84
+msgid "<b>%1</b> is not a template file."
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:85 views/kmymoneyview.cpp:603
+msgid "Filetype Error"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:93
+msgid "Error while reading template file <b>%1</b> in line %2, column %3"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:94
+msgid "Template Error"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:101
+msgid "File '%1' not found!"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:142
+msgid "Invalid tag <b>%1</b> in template file <b>%2</b>!"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:214
+#, c-format
+msgid "Loading template %1"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:241
+msgid "Invalid top-level account type <b>%1</b> in template file <b>%2</b>!"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:309
+msgid ""
+"Invalid flag type <b>%1</b> for account <b>%3</b> in template file <b>%2</b>!"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:398 converter/mymoneytemplate.cpp:401
+#: views/kmymoneyview.cpp:1151 views/kmymoneyview.cpp:1154
+msgid "Unable to write changes to '%1'"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:407 views/kmymoneyview.cpp:1162
+msgid "Unable to upload to '%1'"
+msgstr ""
+
+#: converter/mymoneyqifwriter.cpp:70
+msgid ""
+"Unexpected exception '%1' thrown in %2, line %3 caught in MyMoneyQifWriter::"
+"write()"
+msgstr ""
+
+#: converter/mymoneyqifwriter.cpp:80
+msgid "Unable to open file '%1' for writing"
+msgstr ""
+
+#: converter/webpricequote.cpp:340
+#, c-format
+msgid "Symbol found: %1"
+msgstr ""
+
+#: converter/webpricequote.cpp:368
+msgid "Price found: %1 (%2)"
+msgstr ""
+
+#: converter/webpricequote.cpp:380
+#, c-format
+msgid "Date found: %1"
+msgstr ""
+
+#: converter/webpricequote.cpp:397 converter/webpricequote.cpp:403
+#, c-format
+msgid "Unable to update price for %1"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:170
+#, fuzzy
+msgid ""
+"_: Category name\n"
+"Reinvested dividend"
+msgstr "Återinvestera utdelning"
+
+#: converter/mymoneyqifreader.cpp:173
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (long term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:176
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (short term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:179
+msgid ""
+"_: Category name\n"
+"Dividend"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:182
+msgid ""
+"_: Category name\n"
+"Interest"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:185
+msgid ""
+"_: Category name\n"
+"Capital Gain (short term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:188
+msgid ""
+"_: Category name\n"
+"Capital Gain (mid term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:191
+msgid ""
+"_: Category name\n"
+"Capital Gain (long term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:194
+msgid ""
+"_: Category name\n"
+"Returned capital"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:197
+msgid ""
+"_: Category name\n"
+"Miscellaneous income"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:200
+msgid ""
+"_: Category name\n"
+"Miscellaneous expense"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:203
+msgid ""
+"_: Category name\n"
+"Investment fees"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:205
+#, c-format
+msgid "Unknown QIF type %1"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:355
+#, fuzzy
+msgid "Date format selection"
+msgstr "Val av konto"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Pick the date format that suits your input file"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:366
+msgid "Importing QIF ..."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:442
+msgid "Reading QIF ..."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Adding transactions"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Now adding the transactions to your ledger..."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:533
+#, fuzzy
+msgid "Unable to add transactions"
+msgstr "Datum för sista betalning:"
+
+#: converter/mymoneyqifreader.cpp:567
+msgid ""
+"_: QIF tag for liability account\n"
+"Oth L"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:572
+msgid ""
+"_: QIF tag for category\n"
+"Cat"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:575
+msgid ""
+"_: QIF tag for security\n"
+"Security"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:578
+msgid ""
+"_: QIF tag for investment account\n"
+"Invst"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:581
+msgid ""
+"_: QIF tag for prices\n"
+"Prices"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:599
+msgid ""
+"_: QIF tag for a class\n"
+"Class"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:753 converter/mymoneyqifreader.cpp:2203
+msgid ""
+"The %1 account currently has an opening balance of %2. This QIF file reports "
+"an opening balance of %3. Would you like to overwrite the current balance "
+"with the one from the QIF file?"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:754 converter/mymoneyqifreader.cpp:2204
+msgid "Overwrite opening balance"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:879 converter/mymoneyqifreader.cpp:890
+#: converter/mymoneyqifreader.cpp:914
+msgid "Autogenerated by QIF importer"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:907
+msgid "QIF imported, no account name supplied"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:940
+msgid ""
+"KMyMoney has imported a second opening balance transaction into account <b>%"
+"1</b> which differs from the one found already on file. Please correct this "
+"manually once the import is done."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:940
+#, fuzzy
+msgid "Opening balance problem"
+msgstr "Öppningsbalanser"
+
+#: converter/mymoneyqifreader.cpp:963
+#, fuzzy
+msgid "Error while creating opening balance transaction"
+msgstr "Redigera markerade transaktioner"
+
+#: converter/mymoneyqifreader.cpp:1029 converter/mymoneyqifreader.cpp:1276
+msgid ""
+"The date entry \"%1\" read from the file cannot be interpreted through the "
+"current date profile setting of \"%2\".\n"
+"\n"
+"Pressing \"Continue\" will assign todays date to the transaction. Pressing "
+"\"Cancel\" will abort the import operation. You can then restart the import "
+"and select a different QIF profile or create a new one."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1035 converter/mymoneyqifreader.cpp:1282
+msgid "Invalid date format"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1398
+#: converter/mymoneystatementreader.cpp:589
+#: converter/mymoneystatementreader.cpp:592
+msgid "Statement Importer"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1413
+#: converter/mymoneystatementreader.cpp:644
+msgid ""
+"This investment account does not contain the \"%1\" security. Transactions "
+"involving this security will be ignored."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1415
+#: converter/mymoneystatementreader.cpp:612
+#: converter/mymoneystatementreader.cpp:644
+msgid "Security not found"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2021
+#, fuzzy
+msgid "%1 (Investment)"
+msgstr "Investering"
+
+#: converter/mymoneyqifreader.cpp:2022
+msgid "Autogenerated by QIF importer from type Mutual account entry"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2085 converter/mymoneyqifreader.cpp:2228
+msgid "account"
+msgstr "konto"
+
+#: converter/mymoneyqifreader.cpp:2086
+msgid "al"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2093
+msgid "category"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2094
+msgid "ei"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2095
+msgid "Category selection"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2110
+msgid "Account \"%1\" disappeared: "
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2131
+msgid "The %1 '%2' does not exist. Do you want to create it?"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2140
+#, c-format
+msgid "Select %1"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2142
+msgid ""
+"The %1 <b>%2</b> currently exists. Do you want to import transactions to "
+"this account?"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2147
+msgid ""
+"The %1 <b>%2</b> currently does not exist. You can create a new %3 by "
+"pressing the <b>Create</b> button or select another %4 manually from the "
+"selection box."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2154
+#, c-format
+msgid "Import transactions to %1"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2155
+msgid ""
+"No %1 information has been found in the selected QIF file. Please select an "
+"account using the selection box in the dialog or create a new %2 by pressing "
+"the <b>Create</b> button."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2229
+msgid "You must select or create an account."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2231
+msgid "You must select or create a category."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:100
+#, fuzzy
+msgid "_Fees"
+msgstr "Avgifter"
+
+#: converter/mymoneystatementreader.cpp:106
+#, fuzzy
+msgid "_Dividend"
+msgstr "Utdelning"
+
+#: converter/mymoneystatementreader.cpp:289
+#, c-format
+msgid "Importing statement for account %1"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:291
+#, fuzzy
+msgid "Importing statement without transactions"
+msgstr "Justeringstransaktion"
+
+#: converter/mymoneystatementreader.cpp:385
+msgid " Statement balance is not contained in statement."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:387
+msgid " Statement balance on %1 is reported to be %2"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:389
+#, fuzzy
+msgid " Transactions"
+msgstr "Uppdelad transaktion"
+
+#: converter/mymoneystatementreader.cpp:390
+msgid " %1 processed"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:391
+msgid " %1 added"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:392
+msgid " %1 matched"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:393
+#, fuzzy
+msgid " %1 duplicates"
+msgstr "Duplicera"
+
+#: converter/mymoneystatementreader.cpp:394
+#, fuzzy
+msgid " Payees"
+msgstr "Betalningsmottagare"
+
+#: converter/mymoneystatementreader.cpp:395
+msgid " %1 created"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:483
+#, c-format
+msgid "Error creating security record: %1"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:612
+msgid ""
+"This imported statement contains investment transactions with no security. "
+"These transactions will be ignored."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:803
+msgid "(Fees) "
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:880
+msgid ""
+"Do you want to add \"%1\" as payee/receiver?\n"
+"\n"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:881
+msgid ""
+"Selecting \"Yes\" will create the payee, \"No\" will skip creation of a "
+"payee record and remove the payee information from this transaction. "
+"Selecting \"Cancel\" aborts the import operation.\n"
+"\n"
+"If you select \"No\" here and mark the \"Don't ask again\" checkbox, the "
+"payee information for all following transactions referencing \"%1\" will be "
+"removed."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:917
+#, fuzzy
+msgid "Save Category"
+msgstr "Kategori"
+
+#: converter/mymoneystatementreader.cpp:918
+#, fuzzy
+msgid "No Category"
+msgstr "Kategori"
+
+#: converter/mymoneystatementreader.cpp:919 dialogs/rc.cpp:4
+#, fuzzy
+msgid "Abort"
+msgstr "&Avbryt"
+
+#: converter/mymoneystatementreader.cpp:926
+msgid "Please select a default category for payee '%1':"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:958
+msgid "Unable to add payee/receiver"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid ""
+"KMyMoney has found a scheduled transaction named <b>%1</b> which matches an "
+"imported transaction. Do you want KMyMoney to enter this schedule now so "
+"that the transaction can be matched? "
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1162
+#, fuzzy
+msgid "Schedule found"
+msgstr "Schemalagda"
+
+#: converter/mymoneystatementreader.cpp:1219
+msgid "Problem adding or matching imported transaction with id '%1': %2"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1268
+msgid ""
+"<b>You have downloaded a statement for the following account:</b><br><br>"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1269
+#, fuzzy, c-format
+msgid " - Account Name: %1"
+msgstr "Kontonamn"
+
+#: converter/mymoneystatementreader.cpp:1270
+#, fuzzy, c-format
+msgid " - Account Type: %1"
+msgstr "Konton"
+
+#: converter/mymoneystatementreader.cpp:1271
+#, fuzzy, c-format
+msgid " - Account Number: %1"
+msgstr "Kontonummer"
+
+#: converter/mymoneystatementreader.cpp:1279
+msgid "Do you want to import transactions to this account?"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1281
+msgid ""
+"KMyMoney cannot determine which of your accounts to use. You can create a "
+"new account by pressing the <b>Create</b> button or select another one "
+"manually from the selection box below."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1287
+msgid ""
+"No account information has been found in the selected statement file. Please "
+"select an account using the selection box in the dialog or create a new "
+"account by pressing the <b>Create</b> button."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1294
+msgid "Import transactions"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1330
+msgid ""
+"You must select an account, create a new one, or press the <b>Abort</b> "
+"button."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:119
+msgid "%1: Sorry. This importer cannot handle version %2 of element %3"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:193
+#, c-format
+msgid "Account%1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:197
+#, c-format
+msgid "Stock%1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:206
+#, c-format
+msgid "Payee%1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:212
+#, c-format
+msgid "Schedule%1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:262
+msgid "This version of the importer cannot handle multi-book files."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:912
+msgid "Invalid header for file. Should be 'gnc-v2'"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:937 converter/mymoneygncreader.cpp:972
+#: converter/mymoneygncreader.cpp:1062
+#, fuzzy, c-format
+msgid ""
+"Import failed:\n"
+"\n"
+"%1"
+msgstr "QIF-import"
+
+#: converter/mymoneygncreader.cpp:1065
+msgid "Import complete"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1120
+msgid "Disguise your wealth"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1121
+msgid ""
+"Each monetary value on your file will be multiplied by a random number "
+"between 0.01 and 1.99\n"
+"with a different value used for each transaction. In addition, to further "
+"disguise the true\n"
+"values, you may enter a number between %1 and %2 which will be applied to "
+"all values.\n"
+"These numbers will not be stored in the file."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1135
+msgid "Loading commodities..."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1160
+msgid "Loading prices..."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1164 converter/mymoneygncreader.cpp:1171
+msgid "Imported History"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1251
+#, c-format
+msgid "Current importer does not recognize GnuCash account type %1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1471
+msgid "Imported Transaction"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1519
+msgid "Loading templates..."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1531
+msgid "Unknown payee"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1723
+msgid "Loading schedules..."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1735
+#, c-format
+msgid "Can't find template transaction for schedule %1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1910
+msgid "Reorganizing accounts..."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1972
+msgid ""
+"Your main currency seems to be %1 (%2); do you want to set this as your base "
+"currency?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1993
+msgid "More"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1997
+#, fuzzy
+msgid "Save Report"
+msgstr "Rapporter"
+
+#: converter/mymoneygncreader.cpp:2017
+msgid ""
+"Problems were encountered in converting schedule '%1'.\n"
+"Do you want to review or edit it now?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2039
+msgid ""
+"Found:\n"
+"\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2040
+msgid " commodities (equities)\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2041
+msgid " prices\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2042
+msgid " accounts\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2043
+msgid " transactions\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2044
+msgid " schedules\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2047
+msgid "No inconsistencies were detected"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2049
+msgid " inconsistencies were detected and corrected\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2054
+msgid " orphan accounts were created\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2059
+msgid " possible schedule problems were noted\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2064
+msgid "Small Business Features (Customers, Invoices, etc.)"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2065 views/kmymoneyview.cpp:241
+#: views/kmymoneyview.cpp:243
+msgid "Budgets"
+msgstr "Budget"
+
+#: converter/mymoneygncreader.cpp:2066
+#, fuzzy
+msgid "Lots"
+msgstr "Lån"
+
+#: converter/mymoneygncreader.cpp:2068
+msgid "The following features found in your file are not currently supported:"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2071
+msgid ""
+"\n"
+"\n"
+"Press More for further information"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2139
+msgid "Orphan created from unknown gnucash account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2170
+msgid "Internal error - invalid interval char in incrDate"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2233
+msgid "Enter the investment account name "
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2234
+msgid "My Investments"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2269
+#, c-format
+msgid "Select parent investment account or enter new name. Stock %1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2292 converter/mymoneygncreader.cpp:2307
+msgid "%1 is not an Investment Account. Do you wish to make it one?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2408
+msgid ""
+"An Investment account must be a child of an Asset account\n"
+"Account %1 will be stored under the main Asset account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2410
+msgid ""
+"An Income account must be a child of an Income account\n"
+"Account %1 will be stored under the main Income account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2412
+msgid ""
+"An Expense account must be a child of an Expense account\n"
+"Account %1 will be stored under the main Expense account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2414
+msgid ""
+"One or more transactions contain a reference to an otherwise unknown "
+"account\n"
+"An asset account with the name %1 has been created to hold the data"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2416
+msgid "Schedule %1 has interval of %2 which is not currently available"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2417
+msgid "Schedule %1 dropped at user request"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2418
+msgid "Schedule %1 contains unknown action (key = %2, type = %3)"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2419
+msgid "Schedule %1 contains multiple actions; only one has been imported"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2420
+msgid "Schedule %1 contains no valid splits"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2421
+msgid ""
+"Schedule %1 appears to contain a formula. GnuCash formulae are not "
+"convertible"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2422
+msgid ""
+"Schedule %1 contains unknown interval specification; please check for "
+"correct operation"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2423
+msgid ""
+"Schedule %1 contains a deferred interval specification; please check for "
+"correct operation"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2424
+msgid ""
+"Account or Category %1, transaction date %2; split contains invalid value; "
+"please check"
+msgstr ""
+
+#: kmymoneyutils.cpp:146
+msgid "&New Schedule..."
+msgstr ""
+
+#: kmymoneyutils.cpp:148
+msgid "Create a new schedule."
+msgstr ""
+
+#: kmymoneyutils.cpp:149
+msgid "Use this to create a new schedule."
+msgstr ""
+
+#: kmymoneyutils.cpp:158
+msgid "&Filter"
+msgstr ""
+
+#: kmymoneyutils.cpp:160
+msgid "Filter out accounts"
+msgstr ""
+
+#: kmymoneyutils.cpp:161
+msgid "Use this to filter out accounts"
+msgstr ""
+
+#: kmymoneyutils.cpp:192
+msgid "Preferred accounts"
+msgstr ""
+
+#: kmymoneyutils.cpp:193
+msgid "Payment accounts"
+msgstr ""
+
+#: kmymoneyutils.cpp:194
+msgid "Favorite reports"
+msgstr ""
+
+#: kmymoneyutils.cpp:195
+msgid "Forecast (schedule)"
+msgstr "Förutsägelse (schema)"
+
+#: kmymoneyutils.cpp:196
+msgid "Networth forecast"
+msgstr ""
+
+#: kmymoneyutils.cpp:197
+msgid "Forecast (history)"
+msgstr ""
+
+#: kmymoneyutils.cpp:198
+#, fuzzy
+msgid "Assets and Liabilities"
+msgstr "Tillgångar & skulder"
+
+#: kmymoneyutils.cpp:199 reports/pivottable.cpp:2416 views/khomeview.cpp:1393
+#: widgets/rc.cpp:70
+msgid "Budget"
+msgstr "Budget"
+
+#: kmymoneyutils.cpp:200
+#, fuzzy
+msgid "CashFlow"
+msgstr "Kontanter"
+
+#: dialogs/kenterscheduledlg.cpp:153 kmymoneyutils.cpp:366
+msgid "Unable to load schedule details"
+msgstr "Kunde inte ladda schemadetaljer"
+
+#: kmymoneyutils.cpp:390 widgets/register.cpp:473
+msgid ""
+"_: Reconcile state 'Not reconciled'\n"
+"Not reconciled"
+msgstr ""
+
+#: kmymoneyutils.cpp:393 widgets/register.cpp:476
+msgid ""
+"_: Reconcile state 'Cleared'\n"
+"Cleared"
+msgstr ""
+
+#: kmymoneyutils.cpp:396 widgets/register.cpp:479
+msgid ""
+"_: Reconcile state 'Reconciled'\n"
+"Reconciled"
+msgstr ""
+
+#: kmymoneyutils.cpp:399 widgets/register.cpp:482
+msgid ""
+"_: Reconcile state 'Frozen'\n"
+"Frozen"
+msgstr ""
+
+#: kmymoneyutils.cpp:410
+msgid ""
+"_: Reconcile flag C\n"
+"C"
+msgstr ""
+
+#: kmymoneyutils.cpp:413
+msgid ""
+"_: Reconcile flag R\n"
+"R"
+msgstr ""
+
+#: kmymoneyutils.cpp:416
+msgid ""
+"_: Reconcile flag F\n"
+"F"
+msgstr ""
+
+#: kmymoneyutils.cpp:419
+msgid ""
+"_: Flag for unknown reconciliation state\n"
+"?"
+msgstr ""
+
+#: _tips.cpp:3
+msgid ""
+"<p>...that you can change the sort order of ledger entries by\n"
+"right-clicking the header of the ledger view?\n"
+msgstr ""
+
+#: _tips.cpp:9
+msgid ""
+"<p>...that you can easily move to the other side of a transfer transaction\n"
+"by opening the context menu with the right mouse button and selecting one of "
+"the\n"
+"'Goto' functions?\n"
+msgstr ""
+
+#: _tips.cpp:16
+msgid ""
+"<p>...that you can start editing a transaction by double-clicking on the\n"
+"transaction in the register?\n"
+msgstr ""
+
+#: _tips.cpp:22
+msgid ""
+"<p>...that you can show more details of the selected transaction in the\n"
+"register by selecting the 'ledger lens' feature in the settings dialog?\n"
+msgstr ""
+
+#: _tips.cpp:28
+msgid ""
+"<p>...that transactions with no category assigned or split\n"
+"transactions with unassigned values are marked with an exclamation mark \n"
+"on a yellow triangle in the register?\n"
+msgstr ""
+
+#: _tips.cpp:35
+msgid ""
+"<p>...that you can show all details of the transactions in the register\n"
+"by typing &lt;Ctrl-T&gt; or selecting the 'Settings/Show Transaction "
+"Detail'\n"
+"menu entry? You can turn this feature off the same way.\n"
+msgstr ""
+
+#: _tips.cpp:42
+msgid ""
+"<p>...that you can switch between a listing of all accounts or\n"
+"an icon view of all asset and liability accounts with the tabs\n"
+"in the accounts view?\n"
+msgstr ""
+
+#: _tips.cpp:49
+msgid "<p>...that the KMyMoney development team wishes you a nice day?\n"
+msgstr ""
+
+#: _tips.cpp:54
+msgid ""
+"<p>...you can use your own external filter program to convert any\n"
+"import format to QIF on the fly? See the QIF profile editor for\n"
+"more details.\n"
+msgstr ""
+
+#: _tips.cpp:61
+msgid ""
+"<p>...that you can create a scheduled transaction from an existing\n"
+"one by selecting the context menu on a transaction in the ledger\n"
+"or the \"More...\"-menu in the transaction form?\n"
+msgstr ""
+
+#: _tips.cpp:68
+msgid ""
+"<p>...that you can switch to the payee of a transaction\n"
+"by selecting the context menu on a transaction in the ledger\n"
+"or in the transaction menu?\n"
+msgstr ""
+
+#: _tips.cpp:75
+msgid ""
+"<p>...that you can modify the colors and fonts used for the ledgers\n"
+"via <i>Configure/Register/...</i>?\n"
+msgstr ""
+
+#: _tips.cpp:81
+msgid ""
+"<p>...that you can hide transactions prior to a specific date?\n"
+"The date can be modified via <i>Configure/Register/Filter</i>.\n"
+msgstr ""
+
+#: _tips.cpp:87
+msgid ""
+"<p>...that you can customize the \"Home-Page\"\n"
+"via <i>Configure/Home</i>?\n"
+msgstr ""
+
+#: _tips.cpp:93
+msgid ""
+"<p>...that you can enter new transactions even while reconciling\n"
+"an account? You can also make the transaction form visible.\n"
+msgstr ""
+
+#: _tips.cpp:99
+msgid ""
+"<p>...that you can actively support the KMyMoney development team in\n"
+"cases that heavily depend on your data? You can save your data in an\n"
+"anonymized way for this support.<p>\n"
+"Just open your data file and immediately\n"
+"select <b>File/Save as...</b>. In the <b>Save As...</b> dialog\n"
+"select the filter <b>Anonymous Files</b> and make sure your file gets\n"
+"the extensions <b>.anon.xml</b>. <p>\n"
+"To verify, how the data looks like you are about to send away, you can open\n"
+"this file in KMyMoney and see how the developers see your data.\n"
+msgstr ""
+
+#: _tips.cpp:112
+msgid ""
+"<p>... that you can import your bank statements even without a network \n"
+"connection? Just select the file (OFX or QIF) from the File->Import menu.</"
+"p>\n"
+"<p>Provided by Jose Jorge</p>\n"
+msgstr ""
+
+#: reports/listtable.cpp:159 reports/listtable.cpp:163
+#: reports/pivottable.cpp:1564
+msgid ""
+"_: Report date range\n"
+"%1 through %2"
+msgstr ""
+
+#: reports/listtable.cpp:171 reports/pivottable.cpp:1571
+#, c-format
+msgid "All currencies converted to %1"
+msgstr ""
+
+#: reports/listtable.cpp:172 reports/pivottable.cpp:1328
+msgid "All currencies converted to %1\n"
+msgstr ""
+
+#: reports/listtable.cpp:176 reports/pivottable.cpp:1573
+msgid "All values shown in %1 unless otherwise noted"
+msgstr ""
+
+#: reports/listtable.cpp:177 reports/pivottable.cpp:1330
+msgid "All values shown in %1 unless otherwise noted\n"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:73 dialogs/kfindtransactiondlg.cpp:188
+#: dialogs/rc.cpp:53 dialogs/rc.cpp:63 dialogs/rc.cpp:208 dialogs/rc.cpp:805
+#: dialogs/settings/rc.cpp:111 dialogs/transactioneditor.cpp:844
+#: reports/listtable.cpp:196 views/khomeview.cpp:412 views/khomeview.cpp:485
+#: views/khomeview.cpp:519 views/rc.cpp:61 widgets/kmymoneypriceview.cpp:128
+#: widgets/rc.cpp:36 widgets/register.cpp:565 widgets/transaction.cpp:1027
+#: widgets/transaction.cpp:1484
+msgid "Date"
+msgstr "Datum"
+
+#: reports/listtable.cpp:198
+msgid "Num"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:204 dialogs/kmymoneysplittable.cpp:78
+#: dialogs/kmymoneysplittable.cpp:831 dialogs/rc.cpp:217
+#: dialogs/transactioneditor.cpp:831 dialogs/transactioneditor.cpp:1374
+#: dialogs/transactioneditor.cpp:1382 dialogs/transactioneditor.cpp:1396
+#: dialogs/transactioneditor.cpp:1449 dialogs/transactioneditor.cpp:1456
+#: dialogs/transactioneditor.cpp:1504 reports/listtable.cpp:200
+#: views/kcategoriesview.cpp:76 views/rc.cpp:62 widgets/rc.cpp:115
+#: widgets/register.cpp:62 widgets/transaction.cpp:848
+#: widgets/transaction.cpp:906
+msgid "Category"
+msgstr "Kategori"
+
+#: dialogs/kmymoneysplittable.cpp:79 dialogs/kmymoneysplittable.cpp:837
+#: reports/listtable.cpp:202 widgets/rc.cpp:101 widgets/transaction.cpp:1042
+#: widgets/transaction.cpp:1628
+msgid "Memo"
+msgstr "Anteckning"
+
+#: reports/listtable.cpp:203
+msgid "Top Category"
+msgstr ""
+
+#: reports/listtable.cpp:204
+msgid "Category Type"
+msgstr ""
+
+#: dialogs/rc.cpp:229 dialogs/settings/rc.cpp:152 reports/listtable.cpp:207
+#: widgets/kmymoneycombo.cpp:346 widgets/rc.cpp:107
+msgid "Reconciled"
+msgstr ""
+
+#: reports/listtable.cpp:208 widgets/rc.cpp:117
+msgid "Action"
+msgstr ""
+
+#: dialogs/investactivities.cpp:199 dialogs/investactivities.cpp:287
+#: dialogs/investactivities.cpp:424 dialogs/investactivities.cpp:504
+#: dialogs/investactivities.cpp:544 dialogs/investtransactioneditor.cpp:241
+#: reports/listtable.cpp:209 widgets/rc.cpp:103 widgets/transaction.cpp:1513
+msgid "Shares"
+msgstr "Andelar"
+
+#: dialogs/investtransactioneditor.cpp:248
+#: dialogs/investtransactioneditor.cpp:1067
+#: dialogs/investtransactioneditor.cpp:1068
+#: dialogs/investtransactioneditor.cpp:1072
+#: dialogs/kequitypriceupdatedlg.cpp:72 dialogs/rc.cpp:109 dialogs/rc.cpp:164
+#: dialogs/rc.cpp:251 dialogs/rc.cpp:756 dialogs/rc.cpp:827
+#: dialogs/settings/rc.cpp:117 reports/listtable.cpp:210
+#: reports/listtable.cpp:211 reports/pivottable.cpp:2441
+#: views/kinvestmentview.cpp:80 widgets/kmymoneypriceview.cpp:129
+#: widgets/rc.cpp:43 widgets/rc.cpp:105 widgets/register.cpp:573
+msgid "Price"
+msgstr "Kurs"
+
+#: reports/listtable.cpp:212
+msgid "Net Value"
+msgstr ""
+
+#: reports/listtable.cpp:213
+msgid "Buys"
+msgstr ""
+
+#: reports/listtable.cpp:214
+msgid "Sells"
+msgstr ""
+
+#: reports/listtable.cpp:215
+msgid "Dividends Reinvested"
+msgstr ""
+
+#: reports/listtable.cpp:216
+msgid "Dividends Paid Out"
+msgstr ""
+
+#: reports/listtable.cpp:217
+msgid "Starting Balance"
+msgstr ""
+
+#: reports/listtable.cpp:218
+msgid "Ending Balance"
+msgstr ""
+
+#: reports/listtable.cpp:219
+msgid "Annualized Return"
+msgstr ""
+
+#: reports/listtable.cpp:220
+msgid "Return On Investment"
+msgstr "Avkastning"
+
+#: dialogs/rc.cpp:106 dialogs/rc.cpp:161 dialogs/rc.cpp:248 dialogs/rc.cpp:505
+#: dialogs/rc.cpp:570 dialogs/rc.cpp:667 dialogs/rc.cpp:753
+#: reports/listtable.cpp:223 widgets/register.cpp:570
+msgid "Payment"
+msgstr "Betalning"
+
+#: dialogs/rc.cpp:111 dialogs/rc.cpp:166 dialogs/rc.cpp:253 dialogs/rc.cpp:709
+#: dialogs/rc.cpp:758 reports/listtable.cpp:224 widgets/rc.cpp:119
+#: widgets/register.cpp:575
+msgid "Balance"
+msgstr "Balans"
+
+#: reports/listtable.cpp:227 views/kscheduledview.cpp:74
+msgid "Next Due Date"
+msgstr "Nästa förfallodatum"
+
+#: reports/listtable.cpp:229 views/kscheduledview.cpp:76
+msgid "Payment Method"
+msgstr "Betalningsmetod"
+
+#: dialogs/rc.cpp:803 reports/listtable.cpp:231 widgets/rc.cpp:2
+msgid "Description"
+msgstr "Beskrivning"
+
+#: reports/listtable.cpp:232
+#, fuzzy
+msgid "Opening Date"
+msgstr "Öppningsbalanser"
+
+#: reports/listtable.cpp:234
+msgid "Balance Early Warning"
+msgstr ""
+
+#: reports/listtable.cpp:235
+#, fuzzy
+msgid "Balance Max Limit"
+msgstr "Balans för %1"
+
+#: reports/listtable.cpp:236
+#, fuzzy
+msgid "Credit Early Warning"
+msgstr "Kreditkort"
+
+#: reports/listtable.cpp:237
+#, fuzzy
+msgid "Credit Max Limit"
+msgstr "Kreditkort"
+
+#: dialogs/rc.cpp:376 reports/listtable.cpp:238
+msgid "Tax"
+msgstr "Skatt"
+
+#: reports/listtable.cpp:239
+msgid "Preferred"
+msgstr ""
+
+#: reports/listtable.cpp:240
+#, fuzzy
+msgid "Loan Amount"
+msgstr "Låneutbetalning"
+
+#: dialogs/rc.cpp:511 reports/listtable.cpp:241
+msgid "Interest Rate"
+msgstr "Ränta"
+
+#: reports/listtable.cpp:242
+#, fuzzy
+msgid "Next Interest Change"
+msgstr "Räntan förfaller:"
+
+#: reports/listtable.cpp:243
+#, fuzzy
+msgid "Periodic Payment"
+msgstr "Periodisk betalning:"
+
+#: reports/listtable.cpp:244
+#, fuzzy
+msgid "Final Payment"
+msgstr "Slutlig betalning:"
+
+#: reports/listtable.cpp:245 views/khomeview.cpp:766 views/khomeview.cpp:1265
+#: views/khomeview.cpp:1273
+#, fuzzy
+msgid "Current Balance"
+msgstr "Aktuell ränta"
+
+#: dialogs/investactivities.cpp:201 dialogs/investactivities.cpp:289
+#: dialogs/investactivities.cpp:368 dialogs/investactivities.cpp:426
+#: dialogs/rc.cpp:327 reports/listtable.cpp:360 reports/listtable.cpp:364
+#: reports/listtable.cpp:556 reports/listtable.cpp:558
+#: reports/pivottable.cpp:1343 reports/pivottable.cpp:1445
+#: reports/pivottable.cpp:1505 reports/pivottable.cpp:1598
+#: reports/pivottable.cpp:1768 reports/pivottable.cpp:1845
+#: reports/pivottable.cpp:2165 reports/pivottable.cpp:2167
+#: reports/pivottable.cpp:2187 reports/pivottable.cpp:2189
+#: reports/querytabletest.cpp:134 reports/querytabletest.cpp:135
+#: reports/querytabletest.cpp:136 reports/querytabletest.cpp:137
+#: reports/querytabletest.cpp:162 reports/querytabletest.cpp:163
+#: reports/querytabletest.cpp:164 reports/querytabletest.cpp:197
+#: reports/querytabletest.cpp:198 reports/querytabletest.cpp:224
+#: reports/querytabletest.cpp:250 reports/querytabletest.cpp:251
+#: reports/querytabletest.cpp:252 reports/querytabletest.cpp:275
+#: reports/querytabletest.cpp:276 reports/querytabletest.cpp:277
+#: reports/querytabletest.cpp:366 reports/querytabletest.cpp:422
+#: reports/querytabletest.cpp:423 views/kforecastview.cpp:568 views/rc.cpp:18
+#: widgets/kmymoneyaccounttreeforecast.cpp:139 widgets/transaction.cpp:1643
+msgid "Total"
+msgstr "Total"
+
+#: reports/listtable.cpp:444
+msgid "Initial Market Value"
+msgstr ""
+
+#: reports/listtable.cpp:445
+msgid "Ending Market Value"
+msgstr ""
+
+#: reports/listtable.cpp:448 reports/querytabletest.cpp:651
+msgid "Opening Balance"
+msgstr "Öppningsbalans"
+
+#: reports/listtable.cpp:449 reports/querytabletest.cpp:652
+#: reports/querytabletest.cpp:653
+msgid "Closing Balance"
+msgstr "Slutbalans"
+
+#: reports/listtable.cpp:490 reports/listtable.cpp:491
+#, fuzzy
+msgid "Calculated"
+msgstr "beräkna"
+
+#: reports/listtable.cpp:572 reports/listtable.cpp:574
+#: reports/pivottable.cpp:1530 reports/pivottable.cpp:1886
+#: reports/querytabletest.cpp:138 reports/querytabletest.cpp:165
+#: reports/querytabletest.cpp:199 reports/querytabletest.cpp:225
+#: reports/querytabletest.cpp:253 reports/querytabletest.cpp:278
+#: reports/querytabletest.cpp:367 reports/querytabletest.cpp:402
+#: reports/querytabletest.cpp:424 reports/querytabletest.cpp:548
+#: reports/querytabletest.cpp:551 reports/querytabletest.cpp:586
+msgid "Grand Total"
+msgstr ""
+
+#: dialogs/rc.cpp:233 reports/pivottable.cpp:339 views/kscheduledview.cpp:174
+#: views/kscheduledview.cpp:433 views/kscheduledview.cpp:449
+#: widgets/kmymoneyscheduledcalendar.cpp:48
+msgid "Transfers"
+msgstr ""
+
+#: reports/pivottable.cpp:1951
+#, fuzzy
+msgid "Legend"
+msgstr "utlånat"
+
+#: reports/pivottable.cpp:2411 views/khomeview.cpp:1406
+#: views/khomeview.cpp:1443
+msgid "Actual"
+msgstr ""
+
+#: reports/pivottable.cpp:2421 views/khomeview.cpp:1409
+#: views/khomeview.cpp:1446
+msgid "Difference"
+msgstr "Skillnad"
+
+#: reports/pivottable.cpp:2431
+msgid "Moving Average"
+msgstr ""
+
+#: reports/pivottable.cpp:2436
+#, fuzzy
+msgid "Moving Average Price"
+msgstr "Investeringstyp"
+
+#: reports/objectinfotable.cpp:214 reports/querytable.cpp:693
+#: reports/querytable.cpp:736 reports/querytable.cpp:1356
+#: reports/querytable.cpp:1375 views/kpayeesview.cpp:742
+#, c-format
+msgid "Transfer from %1"
+msgstr ""
+
+#: reports/objectinfotable.cpp:215 reports/querytable.cpp:694
+#: reports/querytable.cpp:735 reports/querytable.cpp:1355
+#: reports/querytable.cpp:1374 views/kpayeesview.cpp:740
+#, c-format
+msgid "Transfer to %1"
+msgstr ""
+
+#: reports/querytabletest.cpp:471 views/kreportsview.cpp:1144
+msgid "Investment Transactions"
+msgstr ""
+
+#: reports/querytabletest.cpp:472 reports/querytabletest.cpp:564
+msgid "Test Report"
+msgstr ""
+
+#: reports/querytabletest.cpp:547 reports/querytabletest.cpp:550
+msgid "Total Stock 1"
+msgstr ""
+
+#: reports/querytabletest.cpp:563 views/kreportsview.cpp:1174
+msgid "Investment Performance by Account"
+msgstr ""
+
+#: reports/querytable.cpp:431 reports/querytable.cpp:1200
+#, c-format
+msgid "Month of %1"
+msgstr ""
+
+#: reports/querytable.cpp:432 reports/querytable.cpp:1201
+#, c-format
+msgid "Week of %1"
+msgstr ""
+
+#: reports/querytable.cpp:576 reports/querytable.cpp:739
+#: reports/querytable.cpp:858 reports/querytable.cpp:1325
+#: reports/querytable.cpp:1481
+msgid "No Institution"
+msgstr "<Ingen institution>"
+
+#: reports/querytable.cpp:580 reports/querytable.cpp:1329
+msgid "[Empty Payee]"
+msgstr ""
+
+#: reports/querytable.cpp:615 reports/querytable.cpp:1361
+msgid "[Split Transaction]"
+msgstr "[Uppdelad transaktion]"
+
+#: reports/querytable.cpp:616 reports/querytable.cpp:617
+msgid "Split"
+msgstr ""
+
+#: main.cpp:51
+msgid ""
+"\n"
+"KMyMoney, the Personal Finance Manager for KDE.\n"
+"\n"
+"Please consider contributing to this project with code and/or suggestions."
+msgstr ""
+
+#: main.cpp:55
+msgid "language to be used"
+msgstr ""
+
+#: main.cpp:56
+msgid "don't open last used file"
+msgstr ""
+
+#: main.cpp:57
+msgid "enable performance timers"
+msgstr ""
+
+#: main.cpp:61
+msgid "turn on program traces"
+msgstr ""
+
+#: main.cpp:62
+msgid "dump the names of all defined KAction objects to stdout and quit"
+msgstr ""
+
+#: main.cpp:66
+msgid "file to open"
+msgstr ""
+
+#: main.cpp:92
+msgid "Memory leakage detection"
+msgstr ""
+
+#: main.cpp:96
+msgid "Compiled with the following settings:\n"
+msgstr ""
+
+#: dialogs/kmymoneysplittable.cpp:650 dialogs/ksplittransactiondlg.cpp:277
+#: main.cpp:98
+msgid "KMyMoney"
+msgstr "KMyMoney"
+
+#: main.cpp:104
+msgid "Initial idea, much initial source code, Project admin"
+msgstr ""
+
+#: main.cpp:105
+msgid "Core engine, Release Manager, Project admin"
+msgstr ""
+
+#: main.cpp:106
+msgid "Reporting logic, OFX Import"
+msgstr ""
+
+#: main.cpp:107
+msgid "Database backend, maintainer stable branch"
+msgstr ""
+
+#: main.cpp:108
+#, fuzzy
+msgid "Forecast, Reports"
+msgstr "Beräkningsmetod"
+
+#: main.cpp:109
+msgid "Project Admin"
+msgstr ""
+
+#: main.cpp:110
+msgid "Developer"
+msgstr ""
+
+#: main.cpp:111
+msgid "Database backend"
+msgstr ""
+
+#: main.cpp:113
+msgid "Initial investment support"
+msgstr ""
+
+#: main.cpp:114
+msgid "Developer & Artist"
+msgstr ""
+
+#: main.cpp:115
+msgid "Icons & splash screen"
+msgstr ""
+
+#: main.cpp:116 main.cpp:117
+msgid "Patches"
+msgstr ""
+
+#: main.cpp:136
+msgid ""
+"The monetary decimal symbol is not correctly set in the KDE Control Center's "
+"Country/Region & Language settings. Please set it to a reasonable value and "
+"start KMyMoney again."
+msgstr ""
+
+#: main.cpp:136
+msgid "Invalid settings"
+msgstr ""
+
+#: main.cpp:228
+msgid "Another instance of KMyMoney is already running. Do you want to quit?"
+msgstr ""
+
+#: main.cpp:289
+msgid "Uncaught error. Please report the details to the developers"
+msgstr ""
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Stefan Nilsen"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "stefan.nilsen@millnet.se"
+
+#: dialogs/kcsvprogressdlg.cpp:62 dialogs/kimportdlg.cpp:66 rc.cpp:1
+msgid "&Import"
+msgstr ""
+
+#: rc.cpp:2
+msgid "E&xport"
+msgstr ""
+
+#: rc.cpp:3
+msgid "&Institution"
+msgstr ""
+
+#: rc.cpp:4
+msgid "&Account"
+msgstr ""
+
+#: rc.cpp:5
+#, fuzzy
+msgid "&Category"
+msgstr "Kategori"
+
+#: rc.cpp:6
+#, fuzzy
+msgid "&Transaction"
+msgstr "Uppdelad transaktion"
+
+#: rc.cpp:7 rc.cpp:20
+#, fuzzy
+msgid "Mark transaction as..."
+msgstr "Redigera transaktioner..."
+
+#: rc.cpp:8 rc.cpp:21
+#, fuzzy
+msgid "Mark transaction"
+msgstr "Uppdelad transaktion"
+
+#: rc.cpp:9
+#, fuzzy
+msgid "T&ools"
+msgstr "Detaljer"
+
+#: rc.cpp:10
+msgid "Account options"
+msgstr ""
+
+#: rc.cpp:11
+#, fuzzy
+msgid "Category options"
+msgstr "Kategorier"
+
+#: rc.cpp:12
+#, fuzzy
+msgid "Institution options"
+msgstr "Institution"
+
+#: rc.cpp:13
+#, fuzzy
+msgid "Payee options"
+msgstr "Betalningsmottagare"
+
+#: rc.cpp:14
+#, fuzzy
+msgid "Budget options"
+msgstr "siffror"
+
+#: rc.cpp:15
+#, fuzzy
+msgid "Investment options"
+msgstr "Investeringstyp"
+
+#: rc.cpp:16
+#, fuzzy
+msgid "Scheduled transactions options"
+msgstr "Registrera schemalagd transaktion"
+
+#: rc.cpp:17
+#, fuzzy
+msgid "Transaction options"
+msgstr "Transaktionsdetaljer"
+
+#: rc.cpp:18
+#, fuzzy
+msgid "Move transaction to..."
+msgstr "Redigera transaktioner..."
+
+#: rc.cpp:19
+#, fuzzy
+msgid "Select account"
+msgstr "Välj konto:"
+
+#: rc.cpp:22
+#, fuzzy
+msgid "Currency options"
+msgstr "Valutor"
+
+#: rc.cpp:24
+msgid "Always show a No. field in transaction form"
+msgstr ""
+
+#: rc.cpp:25
+msgid "Auto fill with previous transaction data"
+msgstr ""
+
+#: rc.cpp:26
+msgid "Treat two transactions as identical, if amount differs less than"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:144 rc.cpp:27
+msgid "Auto increment check number"
+msgstr ""
+
+#: rc.cpp:28
+msgid "Autosave file periodically"
+msgstr ""
+
+#: rc.cpp:29
+msgid "Autosave interval in minutes"
+msgstr ""
+
+#: rc.cpp:30
+msgid "Check schedules upon startup"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:171 rc.cpp:31
+msgid "Enter transactions this number of days in advance"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:172 rc.cpp:32
+msgid "Number of days to preview schedules in ledger"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:143 rc.cpp:33
+msgid "Insert transaction type into No. field for new transactions"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:145 rc.cpp:34
+msgid "Keep changes when selecting a different transaction/split"
+msgstr ""
+
+#: rc.cpp:35
+msgid "Using the Enter key moves between the fields"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:130 rc.cpp:36
+msgid "Use the ledger lens"
+msgstr ""
+
+#: rc.cpp:37
+msgid "Price Precision"
+msgstr ""
+
+#: dialogs/rc.cpp:65 rc.cpp:38
+msgid "Update price history"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:132 rc.cpp:39
+msgid "Show transaction form"
+msgstr ""
+
+#: rc.cpp:40
+#, fuzzy
+msgid "Start with last selected view or homepage"
+msgstr "Börja med hemsida"
+
+#: rc.cpp:41
+msgid "Use GPG to encrypt data file"
+msgstr ""
+
+#: rc.cpp:42
+msgid "Also encrypt against recover key"
+msgstr ""
+
+#: rc.cpp:43
+msgid "GPG User ID (deprecated)"
+msgstr ""
+
+#: rc.cpp:44
+msgid "GPG User ID"
+msgstr ""
+
+#: rc.cpp:45
+msgid "Run in expert (accountant) mode"
+msgstr ""
+
+#: rc.cpp:46
+msgid "Show splash screen during startup"
+msgstr ""
+
+#: rc.cpp:47
+msgid "Synchronize account in ledger and investment view"
+msgstr ""
+
+#: rc.cpp:48
+msgid "Icon size for view selection"
+msgstr ""
+
+#: rc.cpp:49
+msgid "list of hidden views"
+msgstr ""
+
+#: rc.cpp:50
+msgid "Firsttime switch to start new user wizard"
+msgstr ""
+
+#: rc.cpp:51
+msgid "Show title bar on each view"
+msgstr ""
+
+#: rc.cpp:52
+msgid "Start string matches for e.g. payees at start of string"
+msgstr ""
+
+#: rc.cpp:53
+msgid "Order of items on homepage"
+msgstr ""
+
+#: rc.cpp:54
+msgid "Percentage of default font size used for home view HTML page"
+msgstr ""
+
+#: rc.cpp:55
+msgid "Remember (manually adjusted) font size in home view on program end."
+msgstr ""
+
+#: rc.cpp:56
+msgid "Show account limit information on the Homepage"
+msgstr ""
+
+#: rc.cpp:58
+#, fuzzy
+msgid "Hide closed accounts"
+msgstr "Kontofilter"
+
+#: rc.cpp:59
+msgid "Hide finished schedules"
+msgstr ""
+
+#: rc.cpp:61
+msgid "Show all register entries in full detail"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:129 rc.cpp:62
+msgid "Show a grid in the register"
+msgstr ""
+
+#: rc.cpp:63
+msgid "Show fancy group markers"
+msgstr ""
+
+#: rc.cpp:64
+msgid "Show fancy markers for previous and current fiscal year"
+msgstr ""
+
+#: rc.cpp:65
+msgid "Starting month of the fiscal year"
+msgstr ""
+
+#: rc.cpp:66
+#, fuzzy
+msgid "Starting day of the fiscal year"
+msgstr "Startdatum på utdraget"
+
+#: rc.cpp:67
+#, fuzzy
+msgid "Start date"
+msgstr "ränta"
+
+#: dialogs/settings/rc.cpp:9 rc.cpp:68
+msgid "Use system colors"
+msgstr "Använd systemfärger"
+
+#: rc.cpp:69
+msgid "List color"
+msgstr ""
+
+#: rc.cpp:70
+msgid "List background color"
+msgstr ""
+
+#: rc.cpp:71
+msgid "List grid color"
+msgstr ""
+
+#: rc.cpp:72
+msgid "Background color for imported transactions"
+msgstr ""
+
+#: rc.cpp:73
+msgid "Background color for matched transactions"
+msgstr ""
+
+#: rc.cpp:74
+msgid "List color for erronous transactions"
+msgstr ""
+
+#: rc.cpp:75
+msgid "List color for missing conversion rate"
+msgstr ""
+
+#: rc.cpp:76
+msgid "List color for negative values"
+msgstr ""
+
+#: rc.cpp:77
+msgid "Background color for group marker"
+msgstr ""
+
+#: rc.cpp:78
+msgid "Background color for required fields"
+msgstr ""
+
+#: rc.cpp:79
+#, fuzzy
+msgid "Use system font"
+msgstr "Använd systemfonter"
+
+#: dialogs/settings/rc.cpp:21 rc.cpp:80
+msgid "Cell font"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:22 rc.cpp:81
+msgid "Header font"
+msgstr ""
+
+#: rc.cpp:82 rc.cpp:83
+msgid "Sort order of register in normal view"
+msgstr ""
+
+#: rc.cpp:84
+msgid "Sort order of register in search dialog"
+msgstr ""
+
+#: rc.cpp:85
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation"
+msgstr ""
+
+#: rc.cpp:86
+msgid "Number of days (plus/minus) to search for matching transactions"
+msgstr ""
+
+#: rc.cpp:87
+msgid "During import, ask for a new payee's default category"
+msgstr ""
+
+#: rc.cpp:88
+msgid "Method to calculate forecast"
+msgstr ""
+
+#: rc.cpp:89
+msgid "Days to forecast"
+msgstr ""
+
+#: rc.cpp:90
+msgid "Days of normal account cycle"
+msgstr ""
+
+#: rc.cpp:91
+msgid "Number of historic cycles to use in forecast"
+msgstr ""
+
+#: rc.cpp:92
+msgid "Day of month to start forecast"
+msgstr ""
+
+#: rc.cpp:93
+msgid "Method to calculate history-based forecast"
+msgstr ""
+
+#: rc.cpp:94
+msgid "Skip opening date when fetching transactions"
+msgstr ""
+
+#: rc.cpp:95
+msgid "Include future transaction when using Schedule Forecast"
+msgstr ""
+
+#: rc.cpp:96
+#, fuzzy
+msgid "Include scheduled transactions when using Schedule Forecast"
+msgstr "Registrera schemalagd transaktion"
+
+#: rc.cpp:97
+msgid "additional names for cash account"
+msgstr ""
+
+#: rc.cpp:98
+msgid "additional names for checking account"
+msgstr ""
+
+#: rc.cpp:99
+msgid "additional names for credit card account"
+msgstr ""
+
+#: rc.cpp:100
+msgid "additional names for asset account"
+msgstr ""
+
+#: rc.cpp:101
+msgid "additional names for opening balance payee"
+msgstr ""
+
+#: rc.cpp:102
+msgid "additional names for invoice accounts"
+msgstr ""
+
+#: rc.cpp:103 widgets/rc.cpp:161 widgets/rc.cpp:163
+msgid "..."
+msgstr ""
+
+#: views/kcategoriesview.cpp:276
+msgid "Profit: "
+msgstr ""
+
+#: views/kcategoriesview.cpp:278
+msgid "Loss: "
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:54
+#: dialogs/transactioneditor.cpp:605 views/kpayeesview.cpp:365
+#: widgets/kmymoneyonlinequoteconfig.cpp:54
+msgid "Accepts the entered data and stores it"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:55 views/kpayeesview.cpp:366
+#: widgets/kmymoneyonlinequoteconfig.cpp:55
+msgid "Use this to accept the modified data."
+msgstr ""
+
+#: views/kpayeesview.cpp:491
+msgid ""
+"A payee with the name '%1' already exists. It is not advisable to have "
+"multiple payees with the same identification name. Are you sure you would "
+"like to rename the payee?"
+msgstr ""
+
+#: views/kpayeesview.cpp:518 views/kpayeesview.cpp:869
+msgid "Unable to modify payee"
+msgstr ""
+
+#: views/kpayeesview.cpp:564
+msgid "Do you want to save the changes for <b>%1</b>?"
+msgstr ""
+
+#: views/kbudgetview.cpp:490 views/kpayeesview.cpp:565
+msgid "Save changes"
+msgstr "Spara ändringar"
+
+#: views/kgloballedgerview.cpp:737 views/kpayeesview.cpp:662
+#: views/kpayeesview.cpp:753
+#, c-format
+msgid "Balance: %1"
+msgstr ""
+
+#: views/kpayeesview.cpp:725 views/kpayeesview.cpp:731
+#, c-format
+msgid "Amortization of %1"
+msgstr ""
+
+#: views/kpayeesview.cpp:727 views/kpayeesview.cpp:733
+#, c-format
+msgid "Payment to %1"
+msgstr ""
+
+#: views/kpayeesview.cpp:736
+#, c-format
+msgid "Loan payment from %1"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:123
+#: dialogs/kconfirmmanualenterdlg.cpp:133 views/kpayeesview.cpp:745
+#: widgets/kmymoneycategory.cpp:160 widgets/kmymoneycategory.cpp:166
+#: widgets/transaction.cpp:851 widgets/transaction.cpp:1397
+#: widgets/transaction.cpp:1411
+msgid ""
+"_: Split transaction (category replacement)\n"
+"Split transaction"
+msgstr ""
+"_: Split-transaktion (kategoribyte)\n"
+"Split-transaktion"
+
+#: views/kreportsview.cpp:262
+msgid ""
+"There was an error creating your report: \"%1\".\n"
+"Please report this error to the developer's list: kmymoney2-developer@lists."
+"sourceforge.net"
+msgstr ""
+
+#: views/kreportsview.cpp:264
+msgid "Critical Error"
+msgstr ""
+
+#: views/kreportsview.cpp:268
+msgid "Unable to generate report"
+msgstr ""
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:125 views/kreportsview.cpp:286
+#: views/rc.cpp:53 widgets/rc.cpp:146
+msgid "Chart"
+msgstr ""
+
+#: views/kreportsview.cpp:287 widgets/rc.cpp:147
+msgid "Show the chart version of this report"
+msgstr ""
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:112 views/khomeview.cpp:900
+#: views/kreportsview.cpp:294 views/kreportsview.cpp:328
+msgid "Report"
+msgstr ""
+
+#: views/kreportsview.cpp:295
+msgid "Show the report version of this chart"
+msgstr ""
+
+#: views/kmymoneyview.cpp:236 views/kreportsview.cpp:314
+#: views/kreportsview.cpp:326
+msgid "Reports"
+msgstr "Rapporter"
+
+#: views/khomeview.cpp:902 views/kreportsview.cpp:329 widgets/rc.cpp:56
+msgid "Comment"
+msgstr ""
+
+#: views/kreportsview.cpp:432
+msgid "Charts"
+msgstr "Diagram"
+
+#: views/khomeview.cpp:897 views/kreportsview.cpp:470
+msgid "Favorite Reports"
+msgstr ""
+
+#: views/kreportsview.cpp:486
+msgid "Old Customized Reports"
+msgstr ""
+
+#: views/kreportsview.cpp:579
+msgid "Include Stylesheet"
+msgstr ""
+
+#: views/kreportsview.cpp:585
+msgid ""
+"_: CSV (Filefilter)\n"
+"CSV files"
+msgstr ""
+
+#: views/kreportsview.cpp:586
+msgid ""
+"_: HTML (Filefilter)\n"
+"HTML files"
+msgstr ""
+
+#: views/kreportsview.cpp:591
+msgid "Export as"
+msgstr "Exportera som"
+
+#: views/kreportsview.cpp:619 views/kreportsview.cpp:660
+#: views/kreportsview.cpp:942 views/kreportsview.cpp:950
+#: views/kreportsview.cpp:958 views/kreportsview.cpp:968
+#: views/kreportsview.cpp:980 views/kreportsview.cpp:998
+#: views/kreportsview.cpp:1006 views/kreportsview.cpp:1014
+#: views/kreportsview.cpp:1022 views/kreportsview.cpp:1034
+#: views/kreportsview.cpp:1046 views/kreportsview.cpp:1056
+#: views/kreportsview.cpp:1070 views/kreportsview.cpp:1079
+#: views/kreportsview.cpp:1087 views/kreportsview.cpp:1095
+#: views/kreportsview.cpp:1103 views/kreportsview.cpp:1111
+#: views/kreportsview.cpp:1120 views/kreportsview.cpp:1132
+#: views/kreportsview.cpp:1145 views/kreportsview.cpp:1155
+#: views/kreportsview.cpp:1165 views/kreportsview.cpp:1175
+#: views/kreportsview.cpp:1185 views/kreportsview.cpp:1195
+#: views/kreportsview.cpp:1208 views/kreportsview.cpp:1222
+#: views/kreportsview.cpp:1239 views/kreportsview.cpp:1257
+#: views/kreportsview.cpp:1273 views/kreportsview.cpp:1295
+#: views/kreportsview.cpp:1304 views/kreportsview.cpp:1313
+#: views/kreportsview.cpp:1322 views/kreportsview.cpp:1336
+#: views/kreportsview.cpp:1347 views/kreportsview.cpp:1362
+#: views/kreportsview.cpp:1372 views/kreportsview.cpp:1383
+#: views/kreportsview.cpp:1393 views/kreportsview.cpp:1404
+#: views/kreportsview.cpp:1423 views/kreportsview.cpp:1432
+#: views/kreportsview.cpp:1444 views/kreportsview.cpp:1463
+#: views/kreportsview.cpp:1472 views/kreportsview.cpp:1481
+#: views/kreportsview.cpp:1490
+msgid "Default Report"
+msgstr ""
+
+#: views/kreportsview.cpp:621 views/kreportsview.cpp:661
+msgid "Custom Report"
+msgstr "Anpassad rapport"
+
+#: views/kreportsview.cpp:622
+msgid " (Customized)"
+msgstr " (Anpassad)"
+
+#: views/kreportsview.cpp:690
+msgid ""
+"Are you sure you want to delete report <b>%1</b>? There is no way to "
+"recover it!"
+msgstr ""
+
+#: views/kreportsview.cpp:690 views/kreportsview.cpp:702
+msgid "Delete Report?"
+msgstr "Radera rapport?"
+
+#: views/kreportsview.cpp:702
+msgid "Sorry, <b>%1</b> is a default report. You may not delete it."
+msgstr ""
+
+#: views/kreportsview.cpp:882
+msgid "&Open"
+msgstr "Öppna"
+
+#: views/kreportsview.cpp:884
+msgid "&New report"
+msgstr "Ny rapport"
+
+#: views/kreportsview.cpp:934
+msgid "Income and Expenses"
+msgstr "Inkomster och utgifter"
+
+#: views/kreportsview.cpp:941
+msgid "Income and Expenses This Month"
+msgstr "Inkomster och utgifter aktuell månad"
+
+#: views/kreportsview.cpp:949
+msgid "Income and Expenses This Year"
+msgstr "Inkomster och utgifter aktuellt år"
+
+#: views/kreportsview.cpp:957
+#, fuzzy
+msgid "Income and Expenses By Year"
+msgstr "Inkomster och utgifter aktuellt år"
+
+#: views/kreportsview.cpp:967
+msgid "Income and Expenses Graph"
+msgstr "Inkomst och utgiftsgraf"
+
+#: views/kreportsview.cpp:979
+msgid "Income and Expenses Pie Chart"
+msgstr "Inkomst och utgifts-tårtdiagram"
+
+#: views/khomeview.cpp:1361 views/kreportsview.cpp:990
+msgid "Net Worth"
+msgstr ""
+
+#: views/kreportsview.cpp:997
+msgid "Net Worth By Month"
+msgstr ""
+
+#: views/kreportsview.cpp:1005
+msgid "Net Worth Today"
+msgstr ""
+
+#: views/kreportsview.cpp:1013
+msgid "Net Worth By Year"
+msgstr ""
+
+#: views/kreportsview.cpp:1021
+msgid "7-day Cash Flow Forecast"
+msgstr ""
+
+#: views/kreportsview.cpp:1033
+msgid "Net Worth Graph"
+msgstr ""
+
+#: views/kreportsview.cpp:1045
+msgid "Account Balances by Institution"
+msgstr ""
+
+#: views/kreportsview.cpp:1055
+msgid "Account Balances by Type"
+msgstr ""
+
+#: views/kreportsview.cpp:1069
+msgid "Transactions by Account"
+msgstr ""
+
+#: views/kreportsview.cpp:1078
+msgid "Transactions by Category"
+msgstr ""
+
+#: views/kreportsview.cpp:1086
+msgid "Transactions by Payee"
+msgstr ""
+
+#: views/kreportsview.cpp:1094
+msgid "Transactions by Month"
+msgstr ""
+
+#: views/kreportsview.cpp:1102
+msgid "Transactions by Week"
+msgstr ""
+
+#: views/kreportsview.cpp:1110
+msgid "Loan Transactions"
+msgstr "Låntransaktioner"
+
+#: views/kreportsview.cpp:1119
+#, fuzzy
+msgid "Transactions by Reconciliation Status"
+msgstr "Transaktionsdetaljer"
+
+#: views/kreportsview.cpp:1125
+#, fuzzy
+msgid "Cash Flow"
+msgstr "Kontanter"
+
+#: views/kreportsview.cpp:1131
+#, fuzzy
+msgid "Cash Flow Transactions This Month"
+msgstr "Inkomster och utgifter aktuell månad"
+
+#: views/kmymoneyview.cpp:226 views/kmymoneyview.cpp:228
+#: views/kreportsview.cpp:1137
+msgid "Investments"
+msgstr ""
+
+#: views/kreportsview.cpp:1154
+msgid "Investment Holdings by Account"
+msgstr ""
+
+#: views/kreportsview.cpp:1164
+msgid "Investment Holdings by Type"
+msgstr ""
+
+#: views/kreportsview.cpp:1184
+msgid "Investment Performance by Type"
+msgstr ""
+
+#: views/kreportsview.cpp:1194
+msgid "Investment Holdings Pie"
+msgstr ""
+
+#: views/kreportsview.cpp:1207
+msgid "Investment Worth Graph"
+msgstr ""
+
+#: views/kreportsview.cpp:1221
+#, fuzzy
+msgid "Investment Price Graph"
+msgstr "Investeringstyp"
+
+#: views/kreportsview.cpp:1238
+#, fuzzy
+msgid "Investment Moving Average Price Graph"
+msgstr "Investeringstyp"
+
+#: views/kreportsview.cpp:1256
+#, fuzzy
+msgid "Investment Moving Average"
+msgstr "Investeringstyp"
+
+#: views/kreportsview.cpp:1272
+msgid "Investment Moving Average vs Actual"
+msgstr ""
+
+#: views/kreportsview.cpp:1287
+msgid "Taxes"
+msgstr "Skatter"
+
+#: views/kreportsview.cpp:1294
+msgid "Tax Transactions by Category"
+msgstr "Skattetransaktioner per kategori"
+
+#: views/kreportsview.cpp:1303
+msgid "Tax Transactions by Payee"
+msgstr "Skattetransaktioner per mottagare"
+
+#: views/kreportsview.cpp:1312
+msgid "Tax Transactions by Category Last Fiscal Year"
+msgstr ""
+
+#: views/kreportsview.cpp:1321
+msgid "Tax Transactions by Payee Last Fiscal Year"
+msgstr ""
+
+#: views/kreportsview.cpp:1328
+msgid "Budgeting"
+msgstr "Budget"
+
+#: views/kreportsview.cpp:1335
+msgid "Budgeted vs. Actual This Year"
+msgstr ""
+
+#: views/kreportsview.cpp:1346
+msgid "Budgeted vs. Actual This Year (YTM)"
+msgstr ""
+
+#: views/khomeview.cpp:1383 views/kreportsview.cpp:1361
+msgid "Monthly Budgeted vs. Actual"
+msgstr ""
+
+#: views/kreportsview.cpp:1371
+msgid "Yearly Budgeted vs. Actual"
+msgstr ""
+
+#: views/kreportsview.cpp:1382
+msgid "Monthly Budget"
+msgstr "Månaktlig budget"
+
+#: views/kreportsview.cpp:1392
+msgid "Yearly Budget"
+msgstr "Årlig budget"
+
+#: views/kreportsview.cpp:1403
+msgid "Yearly Budgeted vs Actual Graph"
+msgstr ""
+
+#: views/kreportsview.cpp:1422
+#, fuzzy
+msgid "Forecast By Month"
+msgstr "Beräkningsmetod"
+
+#: views/kreportsview.cpp:1431
+#, fuzzy
+msgid "Forecast Next Quarter"
+msgstr "Nästa förfallodatum"
+
+#: views/kreportsview.cpp:1443
+msgid "Net Worth Forecast Graph"
+msgstr ""
+
+#: dialogs/rc.cpp:126 dialogs/rc.cpp:128 dialogs/rc.cpp:466
+#: views/kreportsview.cpp:1455
+msgid "General Information"
+msgstr "Generell information"
+
+#: views/kreportsview.cpp:1462
+#, fuzzy
+msgid "Schedule Information"
+msgstr "Generell information"
+
+#: views/kreportsview.cpp:1471
+#, fuzzy
+msgid "Schedule Summary Information"
+msgstr "Generell information"
+
+#: views/kreportsview.cpp:1480
+#, fuzzy
+msgid "Account Information"
+msgstr "Betalningsinformation"
+
+#: views/kreportsview.cpp:1489
+#, fuzzy
+msgid "Loan Information"
+msgstr "Betalningsinformation"
+
+#: dialogs/rc.cpp:323 views/kmymoneyview.cpp:148 views/kmymoneyview.cpp:150
+msgid "Institutions"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:98 views/kmymoneyview.cpp:162
+#: views/kmymoneyview.cpp:164 widgets/rc.cpp:4 widgets/rc.cpp:94
+msgid "Accounts"
+msgstr "Konton"
+
+#: views/kmymoneyview.cpp:176
+msgid "Bills & Reminders"
+msgstr ""
+
+#: views/kmymoneyview.cpp:178
+#, fuzzy
+msgid "Scheduled transactions"
+msgstr "Registrera schemalagd transaktion"
+
+#: dialogs/knewaccountdlg.cpp:98 dialogs/rc.cpp:193 views/kmymoneyview.cpp:188
+#: views/kmymoneyview.cpp:190 widgets/rc.cpp:91
+msgid "Categories"
+msgstr "Kategorier"
+
+#: dialogs/kfindtransactiondlg.cpp:212 dialogs/rc.cpp:318
+#: views/kmymoneyview.cpp:199 views/kmymoneyview.cpp:201 widgets/rc.cpp:93
+msgid "Payees"
+msgstr "Betalningsmottagare"
+
+#: views/kgloballedgerview.cpp:149 views/kmymoneyview.cpp:211
+msgid "Ledgers"
+msgstr ""
+
+#: views/kmymoneyview.cpp:353
+msgid "Creating transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:367
+msgid "Modifying transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:382
+msgid "Duplicating transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:394
+msgid "Edit the current selected transactions"
+msgstr "Redigera markerade transaktioner"
+
+#: views/kmymoneyview.cpp:602
+msgid "<b>%1</b> is not a KMyMoney file."
+msgstr ""
+
+#: views/kmymoneyview.cpp:643
+msgid "GPG is not available for decryption of file <b>%1</b>"
+msgstr ""
+
+#: views/kmymoneyview.cpp:721
+msgid ""
+"File <b>%1</b> contains the old binary format used by KMyMoney. Please use "
+"an older version of KMyMoney (0.8.x) that still supports this format to "
+"convert it to the new XML based format."
+msgstr ""
+
+#: views/kmymoneyview.cpp:723
+msgid "File <b>%1</b> contains an unknown file format!"
+msgstr ""
+
+#: views/kmymoneyview.cpp:728
+msgid "Cannot read from file <b>%1</b>!"
+msgstr ""
+
+#: views/kmymoneyview.cpp:732
+msgid "Cannot load file <b>%1</b>. Reason: %2"
+msgstr ""
+
+#: views/kmymoneyview.cpp:742 views/kmymoneyview.cpp:748
+msgid "File <b>%1</b> not found!"
+msgstr ""
+
+#: views/kmymoneyview.cpp:812
+msgid "Can't open database %1\n"
+msgstr ""
+
+#: views/kmymoneyview.cpp:844
+msgid "An unrecoverable error occurred while reading the database"
+msgstr ""
+
+#: views/kmymoneyview.cpp:846 views/kmymoneyview.cpp:1208
+msgid "Database malfunction"
+msgstr ""
+
+#: views/kmymoneyview.cpp:938
+msgid "Unknown fix level in input file"
+msgstr ""
+
+#: views/kmymoneyview.cpp:984
+msgid ""
+"GPG does not seem to be installed on your system. Please make sure, that GPG "
+"can be found using the standard search path. This time, encryption is "
+"disabled."
+msgstr ""
+
+#: views/kmymoneyview.cpp:984
+msgid "GPG not found"
+msgstr ""
+
+#: views/kmymoneyview.cpp:991
+msgid ""
+"You have selected to encrypt your data also with the KMyMoney recover key, "
+"but the key with id</p><p><center><b>%1</b></center></p>has not been found "
+"in your keyring at this time. Please make sure to import this key into your "
+"keyring. You can find it on the <a href=\"http://kmymoney2.sourceforge.net/"
+"\">KMyMoney web-site</a>. This time your data will not be encrypted with the "
+"KMyMoney recover key."
+msgstr ""
+
+#: views/kmymoneyview.cpp:991 views/kmymoneyview.cpp:1000
+msgid "GPG-Key not found"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1000
+msgid ""
+"You have specified to encrypt your data for the user-id</p><p><center><b>%1</"
+"b>.</center></p>Unfortunately, a valid key for this user-id was not found in "
+"your keyring. Please make sure to import a valid key for this user-id. This "
+"time, encryption is disabled."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1006
+msgid ""
+"You have configured to save your data in encrypted form using GPG. Please be "
+"aware, that this is a brand new feature which is yet untested. Make sure, "
+"you have the necessary understanding that you might loose all your data if "
+"you store it encrypted and cannot decrypt it later on! If unsure, answer "
+"<b>No</b>."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1008
+msgid "Store GPG encrypted"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1038 views/kmymoneyview.cpp:1052
+msgid "Unable to open file '%1' for writing."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1065 views/kmymoneyview.cpp:1074
+msgid "Failure while writing to '%1'"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1086 views/kmymoneyview.cpp:1181
+msgid "Tried to access a file when it's not open"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1092
+msgid ""
+"Since this version of KMyMoney only writes data files in its new format, "
+"files written with this version cannot be read by KMyMoney version 0.4. If "
+"you still want to use older versions of KMyMoney with your data files, "
+"please make sure you keep a backup-file of your finance data. If you want to "
+"abort this operation, please press Cancel now"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1122
+msgid "Malformed URL '%1'"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1192
+msgid ""
+"Database contains data which must be removed before using SaveAs.\n"
+"Do you wish to continue?"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1205
+msgid ""
+"An unrecoverable error occurred while writing to the database.\n"
+"It may well be corrupt."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1215
+msgid ""
+"Can't open or create database %1\n"
+"Retry SaveAsDatabase and click Help for further info"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1354
+msgid "Afghanistan Afghani"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1355
+msgid "Albanian Lek"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1356
+msgid "Netherland Antillian Guilder"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1357
+msgid "Algerian Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1358
+msgid "Andorran Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1359
+msgid "Andorran Peseta"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1360
+msgid "Angolan New Kwanza"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1361
+msgid "Argentine Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1362
+msgid "Aruban Florin"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1363
+msgid "Australian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1364
+msgid "Azerbaijani Manat"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1365
+msgid "Bahamian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1366
+msgid "Bahraini Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1367
+msgid "Bangladeshi Taka"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1368
+msgid "Barbados Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1369
+msgid "Belarussian Ruble"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1370
+msgid "Belize Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1371
+msgid "Bermudian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1372
+msgid "Bhutan Ngultrum"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1373
+msgid "Bolivian Boliviano"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1374
+msgid "Bosnian Convertible Mark"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1375
+msgid "Botswana Pula"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1376
+msgid "Brazilian Real"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1377
+msgid "British Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1378
+msgid "Brunei Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1379
+msgid "Bulgarian Lev"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1380
+msgid "Burundi Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1381
+msgid "CFA Franc BEAC"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1382
+msgid "CFA Franc BCEAO"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1383
+msgid "CFP Franc Pacifique"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1384
+msgid "Cambodia Riel"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1385
+msgid "Canadian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1386
+msgid "Cape Verde Escudo"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1387
+msgid "Cayman Islands Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1388
+msgid "Chilean Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1389
+msgid "Chinese Yuan Renminbi"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1390
+msgid "Colombian Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1391
+msgid "Comoros Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1392
+msgid "Costa Rican Colon"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1393
+msgid "Croatian Kuna"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1394
+msgid "Cuban Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1395
+msgid "Czech Koruna"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1396
+msgid "Danish Krone"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1397
+msgid "Djibouti Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1398
+msgid "Dominican Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1399
+msgid "East Caribbean Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1400
+msgid "Egyptian Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1401
+msgid "El Salvador Colon"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1402
+msgid "Eritrean Nakfa"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1403
+msgid "Estonian Kroon"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1404
+msgid "Ethiopian Birr"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1405
+msgid "Euro"
+msgstr "Euro"
+
+#: views/kmymoneyview.cpp:1406
+msgid "Falkland Islands Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1407
+msgid "Fiji Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1408
+msgid "Gambian Dalasi"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1409
+msgid "Georgian Lari"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1410
+msgid "Ghanaian Cedi"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1411
+msgid "Gibraltar Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1412
+msgid "Guatemalan Quetzal"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1413
+msgid "Guinea-Bissau Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1414
+msgid "Guyanan Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1415
+msgid "Haitian Gourde"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1416
+msgid "Honduran Lempira"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1417
+msgid "Hong Kong Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1418
+msgid "Hungarian Forint"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1419
+msgid "Iceland Krona"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1420
+msgid "Indian Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1421
+msgid "Indonesian Rupiah"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1422
+msgid "Iranian Rial"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1423
+msgid "Iraqi Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1424
+msgid "Israeli New Shekel"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1425
+msgid "Jamaican Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1426
+msgid "Japanese Yen"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1427
+msgid "Jordanian Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1428
+msgid "Kazakhstan Tenge"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1429
+msgid "Kenyan Shilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1430
+msgid "Kuwaiti Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1431
+msgid "Kyrgyzstan Som"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1432
+msgid "Laos Kip"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1433
+msgid "Latvian Lats"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1434
+msgid "Lebanese Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1435
+msgid "Lesotho Loti"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1436
+msgid "Liberian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1437
+msgid "Libyan Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1438
+msgid "Lithuanian Litas"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1439
+msgid "Macau Pataca"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1440
+msgid "Macedonian Denar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1441
+msgid "Malagasy Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1442
+msgid "Malawi Kwacha"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1443
+msgid "Malaysian Ringgit"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1444
+msgid "Maldive Rufiyaa"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1445
+msgid "Mali Republic Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1446
+msgid "Mauritanian Ouguiya"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1447
+msgid "Mauritius Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1448
+msgid "Mexican Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1449
+msgid "Moldavian Leu"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1450
+msgid "Mongolian Tugrik"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1451
+msgid "Moroccan Dirham"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1452
+msgid "Mozambique Metical"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1453
+msgid "Myanmar Kyat"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1454
+msgid "Namibian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1455
+msgid "Nepalese Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1456
+msgid "New Zealand Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1457
+msgid "Nicaraguan Cordoba Oro"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1458
+msgid "Nigerian Naira"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1459
+msgid "North Korean Won"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1460
+msgid "Norwegian Kroner"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1461
+msgid "Omani Rial"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1462
+msgid "Pakistan Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1463
+msgid "Panamanian Balboa"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1464
+msgid "Papua New Guinea Kina"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1465
+msgid "Paraguay Guarani"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1466
+msgid "Peruvian Nuevo Sol"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1467
+msgid "Philippine Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1468
+msgid "Polish Zloty"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1469
+msgid "Qatari Rial"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1470
+msgid "Romanian Leu (new)"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1471
+msgid "Russian Ruble"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1472
+msgid "Rwanda Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1473
+msgid "Samoan Tala"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1474
+msgid "Sao Tome and Principe Dobra"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1475
+msgid "Saudi Riyal"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1476
+msgid "Seychelles Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1477
+msgid "Sierra Leone Leone"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1478
+msgid "Singapore Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1481
+msgid "Solomon Islands Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1482
+msgid "Somali Shilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1483
+msgid "South African Rand"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1484
+msgid "South Korean Won"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1485
+msgid "Sri Lanka Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1486
+msgid "St. Helena Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1487
+msgid "Sudanese Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1488
+msgid "Suriname Guilder"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1489
+msgid "Swaziland Lilangeni"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1490
+msgid "Swedish Krona"
+msgstr "Svenska kronor"
+
+#: views/kmymoneyview.cpp:1491
+msgid "Swiss Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1492
+msgid "Syrian Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1493
+msgid "Taiwan Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1494
+msgid "Tajikistan Somani"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1495
+msgid "Tanzanian Shilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1496
+msgid "Thai Baht"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1497
+msgid "Tongan Pa'anga"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1498
+msgid "Trinidad and Tobago Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1499
+msgid "Tunisian Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1500
+msgid "Turkish Lira (new)"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1501
+msgid "Turkmenistan Manat"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1502
+msgid "US Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1503
+msgid "Uganda Shilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1504
+msgid "Ukraine Hryvnia"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1505
+msgid "United Arab Emirates Dirham"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1506
+msgid "Uruguayan Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1507
+msgid "Uzbekistani Sum"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1508
+msgid "Vanuatu Vatu"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1509
+msgid "Venezuelan Bolivar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1510
+msgid "Vietnamese Dong"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1511
+msgid "Yugoslav Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1512
+msgid "Zambian Kwacha"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1513
+msgid "Zimbabwe Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1515
+msgid "Gold"
+msgstr "Guld"
+
+#: views/kmymoneyview.cpp:1516
+msgid "Palladium"
+msgstr "Palladium"
+
+#: views/kmymoneyview.cpp:1517
+msgid "Platinum"
+msgstr "Platina"
+
+#: views/kmymoneyview.cpp:1518
+msgid "Silver"
+msgstr "Silver"
+
+#: views/kmymoneyview.cpp:1551
+msgid "Austrian Schilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1552
+msgid "German Mark"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1553
+msgid "French Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1554
+msgid "Italian Lira"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1555
+msgid "Spanish Peseta"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1556
+msgid "Dutch Guilder"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1557
+msgid "Belgian Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1558
+msgid "Luxembourg Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1559
+msgid "Portuguese Escudo"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1560
+msgid "Irish Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1561
+msgid "Finnish Markka"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1562
+msgid "Greek Drachma"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1564
+msgid "Romanian Leu"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1566
+msgid "Russian Ruble (old)"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1568
+msgid "Slovenian Tolar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1571
+msgid "Turkish Lira"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1574
+msgid "Maltese Lira"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1575
+msgid "Cyprus Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1578
+msgid "Slovak Koruna"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1888
+msgid ""
+"The account \"%1\" was previously created as loan account but some "
+"information is missing. The new loan wizard will be started to collect all "
+"relevant information. Please use a KMyMoney version >= 0.8.7 and < 0.9 to "
+"correct the problem."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1892
+msgid "Account problem"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1941
+msgid "Unable to add schedule: "
+msgstr ""
+
+#: views/kmymoneyview.cpp:1970
+msgid "Fix transactions"
+msgstr ""
+
+#: views/kaccountsview.cpp:522 views/kinstitutionsview.cpp:300
+msgid "Net Worth: "
+msgstr ""
+
+#: dialogs/rc.cpp:108 dialogs/rc.cpp:163 dialogs/rc.cpp:250 dialogs/rc.cpp:755
+#: dialogs/rc.cpp:830 views/kinvestmentview.cpp:77 widgets/register.cpp:572
+msgid "Quantity"
+msgstr "Antal"
+
+#: views/kscheduledlistitem.cpp:137
+msgid "Finished"
+msgstr ""
+
+#: views/kbudgetview.cpp:109
+msgid "Creates a new budget"
+msgstr "Skapa en ny budget"
+
+#: views/kbudgetview.cpp:110
+#, fuzzy
+msgid "Use this to create a new empty budget."
+msgstr "Skapa en ny budget"
+
+#: views/kbudgetview.cpp:116
+msgid "Rename the current selected budget"
+msgstr "Döp om markerad budget"
+
+#: views/kbudgetview.cpp:117
+msgid "Use this to start renaming the selected budget."
+msgstr ""
+
+#: views/kbudgetview.cpp:123
+msgid "Delete the current selected budget"
+msgstr "Radera markerad budget"
+
+#: views/kbudgetview.cpp:124
+msgid "Use this to delete the selected budget."
+msgstr ""
+
+#: views/kbudgetview.cpp:130
+msgid "Accepts the entered values and stores the budget"
+msgstr ""
+
+#: views/kbudgetview.cpp:131
+msgid "Use this to store the modified data."
+msgstr ""
+
+#: views/kbudgetview.cpp:137
+msgid "Revert budget to last saved state"
+msgstr ""
+
+#: views/kbudgetview.cpp:138
+msgid "Use this to discard the modified data."
+msgstr ""
+
+#: views/kbudgetview.cpp:489
+msgid "Do you want to save the changes for <b>%1</b>"
+msgstr ""
+
+#: views/kbudgetview.cpp:610
+msgid ""
+"A budget with the name '%1' already exists. It is not advisable to have "
+"multiple budgets with the same identification name. Are you sure you would "
+"like to rename the budget?"
+msgstr ""
+
+#: views/kbudgetview.cpp:635 views/kbudgetview.cpp:750
+msgid "Unable to modify budget"
+msgstr "Kunde inte ändra budget"
+
+#: views/kbudgetview.cpp:736
+msgid "Unable to reset budget"
+msgstr "Kunde inte nollställa budget"
+
+#: views/rc.cpp:1
+msgid "List"
+msgstr "Lista"
+
+#: views/rc.cpp:2 views/rc.cpp:20
+msgid "Collapse all accounts in the list"
+msgstr ""
+
+#: views/rc.cpp:3 views/rc.cpp:21
+msgid "Expand all accounts in the list"
+msgstr ""
+
+#: views/rc.cpp:4
+msgid "Icons"
+msgstr "Ikoner"
+
+#: views/rc.cpp:5 views/rc.cpp:22
+msgid "Note: Unused categories are not shown as selected by settings."
+msgstr ""
+
+#: views/rc.cpp:6 views/rc.cpp:23 views/rc.cpp:54
+msgid "Total Profits:"
+msgstr ""
+
+#: views/rc.cpp:7
+msgid "Your budgets"
+msgstr "Din budget"
+
+#: dialogs/rc.cpp:340 dialogs/rc.cpp:841 dialogs/settings/rc.cpp:124
+#: views/rc.cpp:8 widgets/rc.cpp:48 widgets/rc.cpp:150
+msgid "New"
+msgstr ""
+
+#: views/rc.cpp:9
+#, fuzzy
+msgid "Ren"
+msgstr "Namn"
+
+#: views/rc.cpp:10
+msgid "Del"
+msgstr "Radera"
+
+#: views/rc.cpp:11
+msgid "Res"
+msgstr "Återställ"
+
+#: views/rc.cpp:12
+msgid "Upd"
+msgstr "Uppdat."
+
+#: views/rc.cpp:15
+msgid "Hide unused budget categories"
+msgstr "Dölj oanvända budgetkategorier"
+
+#: views/rc.cpp:16
+msgid "Assignments"
+msgstr ""
+
+#: views/rc.cpp:19
+#, fuzzy
+msgid "Include subaccounts"
+msgstr "Inkludera underkonton"
+
+#: dialogs/settings/rc.cpp:23 views/rc.cpp:24
+msgid "Forecast Settings"
+msgstr ""
+
+#: views/rc.cpp:25
+msgid "Days to Forecast:"
+msgstr "Dagar att förutspå:"
+
+#: views/rc.cpp:26
+msgid "Days of Accounts Cycle:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:25 views/rc.cpp:27
+msgid "Day of Month to start Forecast:"
+msgstr ""
+
+#: views/rc.cpp:28
+msgid "Historic Cycles:"
+msgstr ""
+
+#: views/rc.cpp:29
+#, fuzzy
+msgid "Chart Detail:"
+msgstr "Detaljer"
+
+#: views/rc.cpp:30 widgets/kmymoneyaccountselector.cpp:64 widgets/rc.cpp:65
+msgid "All"
+msgstr ""
+
+#: views/rc.cpp:31 widgets/rc.cpp:66
+msgid "Top-Level"
+msgstr ""
+
+#: views/rc.cpp:32 widgets/rc.cpp:67
+msgid "Groups"
+msgstr ""
+
+#: views/rc.cpp:33 widgets/rc.cpp:68
+#, fuzzy
+msgid "Totals"
+msgstr "Detaljer"
+
+#: views/rc.cpp:34
+msgid "<p>Choose what level of detail to show on the chart.</p>"
+msgstr ""
+
+#: views/rc.cpp:35
+msgid "Current Forecast Method:"
+msgstr "Nuvarande förutsägningsmetod:"
+
+#: views/rc.cpp:36
+msgid "method"
+msgstr "metod"
+
+#: dialogs/settings/rc.cpp:32 views/rc.cpp:37
+msgid "History Forecast Method"
+msgstr "Historikbaserad förutsägelse"
+
+#: dialogs/settings/rc.cpp:33 views/rc.cpp:38
+msgid "Simple Moving Average"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:34 views/rc.cpp:39
+msgid "Weighted Moving Average"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:35 views/rc.cpp:40
+msgid "Linear Regression"
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:315 dialogs/rc.cpp:628 dialogs/rc.cpp:647
+#: views/rc.cpp:43
+msgid "Summary"
+msgstr "Summering"
+
+#: views/rc.cpp:45
+msgid "0 days"
+msgstr ""
+
+#: views/rc.cpp:46
+msgid "30 days"
+msgstr ""
+
+#: views/rc.cpp:47
+msgid "60 days"
+msgstr ""
+
+#: views/rc.cpp:48
+msgid "90 days"
+msgstr ""
+
+#: views/rc.cpp:49
+msgid "New Item"
+msgstr ""
+
+#: views/rc.cpp:50 widgets/rc.cpp:64
+#, fuzzy
+msgid "Detail"
+msgstr "Detaljer"
+
+#: views/rc.cpp:51
+msgid "Advanced"
+msgstr ""
+
+#: views/rc.cpp:52
+msgid "Budget Forecast"
+msgstr ""
+
+#: views/rc.cpp:55
+msgid "Investment Summary"
+msgstr "Investeringssammanfattning"
+
+#: views/rc.cpp:56
+msgid "Select Account:"
+msgstr "Välj konto:"
+
+#: views/rc.cpp:57
+msgid ""
+"Summary of the equities contained in this account, showing your holdings and "
+"their most recent price."
+msgstr ""
+
+#: views/rc.cpp:60 widgets/register.cpp:564
+msgid "No."
+msgstr ""
+
+#: views/rc.cpp:64
+msgid "Balance: "
+msgstr ""
+
+#: views/rc.cpp:65
+#, fuzzy
+msgid "Address"
+msgstr "Lägg till andelar"
+
+#: views/rc.cpp:66
+msgid "Payee Information"
+msgstr ""
+
+#: views/rc.cpp:67
+msgid "E-Mail:"
+msgstr ""
+
+#: dialogs/rc.cpp:393 views/rc.cpp:69
+msgid "Telephone/Fax:"
+msgstr ""
+
+#: views/rc.cpp:70
+#, fuzzy
+msgid "Notes"
+msgstr "Lån"
+
+#: views/rc.cpp:71
+msgid "Address:"
+msgstr ""
+
+#: views/rc.cpp:72
+#, fuzzy
+msgid "Matching"
+msgstr "Inga matchningar"
+
+#: views/rc.cpp:73
+msgid "Transaction Matching"
+msgstr "Transaktionsmatchning"
+
+#: views/rc.cpp:74
+msgid "No matching"
+msgstr "Inga matchningar"
+
+#: views/rc.cpp:75
+msgid "Match on Payee name"
+msgstr ""
+
+#: views/rc.cpp:76
+msgid "Match on a name listed below"
+msgstr ""
+
+#: views/rc.cpp:77
+#, fuzzy
+msgid "List of matching names"
+msgstr "Inga matchningar"
+
+#: views/rc.cpp:78
+msgid ""
+"This list contains the names that will match this payee if a transaction is "
+"imported from an external source. Keep in mind, that you can specify regular "
+"expressions here."
+msgstr ""
+
+#: views/rc.cpp:79
+msgid "Ignore Case"
+msgstr "Ignorera"
+
+#: views/rc.cpp:80
+#, fuzzy
+msgid "Default Account"
+msgstr "Välj konto"
+
+#: views/rc.cpp:81
+msgid ""
+"Use the default account for\n"
+"new transactions with this payee"
+msgstr ""
+
+#: views/rc.cpp:82
+#, fuzzy
+msgid "Default category:"
+msgstr "Radera kategori..."
+
+#: views/rc.cpp:83
+#, fuzzy
+msgid "Suggest a category"
+msgstr "Räntekategori:"
+
+#: views/rc.cpp:85
+#, fuzzy
+msgid "New Scheduled transaction..."
+msgstr "Registrera schemalagd transaktion"
+
+#: views/rc.cpp:86
+msgid "Filter Accounts"
+msgstr "Kontofilter"
+
+#: views/rc.cpp:87
+msgid "List View"
+msgstr "Listvy"
+
+#: views/rc.cpp:88
+msgid "Calendar View"
+msgstr "Kalendervy"
+
+#: views/kinstitutionsview.cpp:43
+msgid "Institution/Account"
+msgstr "Institution/Konto"
+
+#: views/kinstitutionsview.cpp:157
+msgid "Accounts with no institution assigned"
+msgstr ""
+
+#: views/kscheduledview.cpp:70
+msgid "Type/Name"
+msgstr ""
+
+#: views/kscheduledview.cpp:75
+msgid "Frequency"
+msgstr "Frekvens"
+
+#: views/kscheduledview.cpp:157
+msgid "Unable to load accounts: "
+msgstr ""
+
+#: views/kscheduledview.cpp:171 views/kscheduledview.cpp:429
+#: views/kscheduledview.cpp:445 widgets/kmymoneyscheduledcalendar.cpp:46
+msgid "Bills"
+msgstr "Räkningar"
+
+#: dialogs/rc.cpp:232 dialogs/rc.cpp:706 views/kscheduledview.cpp:172
+#: views/kscheduledview.cpp:431 views/kscheduledview.cpp:447
+#: widgets/kmymoneyscheduledcalendar.cpp:47
+msgid "Deposits"
+msgstr "Insättningar"
+
+#: views/kscheduledview.cpp:173 views/kscheduledview.cpp:435
+#: views/kscheduledview.cpp:451
+msgid "Loans"
+msgstr "Lån"
+
+#: views/kscheduledview.cpp:357
+msgid "Error activating context menu"
+msgstr ""
+
+#: views/kscheduledview.cpp:385
+msgid "Error executing item"
+msgstr ""
+
+#: views/kscheduledview.cpp:419
+msgid "Unable to filter account"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:508
+#, fuzzy
+msgid "Statement Details"
+msgstr "Schemainformation"
+
+#: views/kgloballedgerview.cpp:512
+msgid "Statement Deposit Details"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:513
+msgid "Statement Payment Details"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:642
+msgid "%1 deposits (%3), %2 payments (%4)"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:649
+#, fuzzy
+msgid "%1 payments (%2)"
+msgstr " (%1 betalningar)"
+
+#: views/kgloballedgerview.cpp:653
+msgid "%1 deposits (%2)"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:721
+#, c-format
+msgid "Statement: %1"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:722 views/kgloballedgerview.cpp:736
+#, c-format
+msgid "Cleared: %1"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:723
+#, c-format
+msgid "Difference: %1"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:730
+#, c-format
+msgid "Last reconciled: %1"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:732
+msgid "Never reconciled"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:772
+msgid "Investment value: %1%2"
+msgstr "Värde: %1%2"
+
+#: views/kgloballedgerview.cpp:1040
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to continue to edit the transactions anyway?"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1051
+msgid ""
+"At least one split of the selected transactions has been frozen. Editing the "
+"transactions is therefore prohibited."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1053
+msgid "Transaction already frozen"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1058
+msgid ""
+"At least one split of the selected transaction references an account that "
+"has been closed. Editing the transactions is therefore prohibited."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1060
+#, fuzzy
+msgid "Account closed"
+msgstr "Konton"
+
+#: views/kgloballedgerview.cpp:1349
+msgid "Cannot create transactions when no account is selected."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1354
+msgid "Cannot create transactions in the context of a category."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1358
+#, fuzzy
+msgid "Cannot create transactions in a closed account."
+msgstr "Transaktionsdetaljer"
+
+#: views/kgloballedgerview.cpp:1370
+msgid "Cannot process transaction with focus if it is not selected."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1400
+msgid "Cannot edit transactions with frozen splits."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1411
+msgid "Cannot edit transactions in the context of a category."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1430
+msgid ""
+"Cannot edit investment transactions and non-investment transactions together."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1438
+msgid "Cannot edit multiple split transactions at once."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1448
+msgid "Cannot edit investment transactions in the context of this account."
+msgstr ""
+
+#: views/kforecastview.cpp:164
+msgid "Scheduled"
+msgstr "Schemalagda"
+
+#: views/kforecastview.cpp:169
+msgid "History"
+msgstr ""
+
+#: views/kforecastview.cpp:296
+msgid "The balance of %2 is below the minimum balance %3 today."
+msgstr ""
+
+#: views/kforecastview.cpp:301 views/khomeview.cpp:1043
+msgid "The balance of %1 will drop below the minimum balance %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:318 views/khomeview.cpp:1059
+msgid "The balance of %1 is below %2 today."
+msgstr ""
+
+#: views/kforecastview.cpp:323 views/khomeview.cpp:1064
+msgid "The balance of %1 is above %2 today."
+msgstr ""
+
+#: views/kforecastview.cpp:330 views/khomeview.cpp:1070
+msgid "The balance of %1 will drop below %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:335 views/khomeview.cpp:1075
+msgid "The balance of %1 will raise above %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:348
+msgid "The account %1 is decreasing %2 per cycle."
+msgstr ""
+
+#: views/kforecastview.cpp:404 widgets/kmymoneyaccounttreeforecast.cpp:114
+#, c-format
+msgid "Min Bal %1"
+msgstr ""
+
+#: views/kforecastview.cpp:406 widgets/kmymoneyaccounttreeforecast.cpp:116
+#, c-format
+msgid "Min Date %1"
+msgstr ""
+
+#: views/kforecastview.cpp:409 widgets/kmymoneyaccounttreeforecast.cpp:119
+#, c-format
+msgid "Max Bal %1"
+msgstr ""
+
+#: views/kforecastview.cpp:411 widgets/kmymoneyaccounttreeforecast.cpp:121
+#, c-format
+msgid "Max Date %1"
+msgstr ""
+
+#: views/kforecastview.cpp:413 widgets/kmymoneyaccounttreeforecast.cpp:123
+msgid "Average"
+msgstr ""
+
+#: views/kforecastview.cpp:649 views/khomeview.cpp:268 views/khomeview.cpp:275
+msgid "Networth Forecast"
+msgstr ""
+
+#: views/khomeview.cpp:203
+msgid "Your Financial Summary"
+msgstr ""
+
+#: views/khomeview.cpp:218
+msgid "Preferred Accounts"
+msgstr ""
+
+#: views/khomeview.cpp:225 views/khomeview.cpp:227
+msgid "Payment Accounts"
+msgstr ""
+
+#: views/khomeview.cpp:256
+msgid "Show KMyMoney welcome page"
+msgstr ""
+
+#: views/khomeview.cpp:409
+msgid "Overdue payments"
+msgstr ""
+
+#: views/khomeview.cpp:424 views/khomeview.cpp:497 views/khomeview.cpp:531
+#, fuzzy
+msgid "Balance after"
+msgstr "Balans"
+
+#: views/khomeview.cpp:482
+#, fuzzy
+msgid "Today's payments"
+msgstr "Låneinbetalning"
+
+#: views/khomeview.cpp:516
+msgid "Future payments"
+msgstr ""
+
+#: views/khomeview.cpp:585
+#, fuzzy
+msgid "Less..."
+msgstr "Mindre ..."
+
+#: views/khomeview.cpp:587
+#, fuzzy
+msgid "More..."
+msgstr "Mera ..."
+
+#: views/khomeview.cpp:622
+#, fuzzy
+msgid "Enter schedule"
+msgstr "Registrera schema"
+
+#: views/khomeview.cpp:624
+#, fuzzy
+msgid "Skip schedule"
+msgstr "Skapa schema..."
+
+#: views/khomeview.cpp:627
+#, fuzzy
+msgid "Edit schedule"
+msgstr "Redigera schema"
+
+#: views/khomeview.cpp:631
+msgid " (%1 payments)"
+msgstr " (%1 betalningar)"
+
+#: views/khomeview.cpp:771
+#, fuzzy
+msgid "To Minimum Balance / Maximum Credit"
+msgstr "Till minsta balans"
+
+#: views/khomeview.cpp:964
+#, fuzzy
+msgid "%1 Day Forecast"
+msgstr "Dagar att förutspå:"
+
+#: views/khomeview.cpp:973 widgets/kmymoneyaccounttreeforecast.cpp:67
+msgid "%1 days"
+msgstr ""
+
+#: views/khomeview.cpp:1039
+msgid "The balance of %1 is below the minimum balance %2 today."
+msgstr ""
+
+#: views/khomeview.cpp:1175
+msgid ""
+"Before KMyMoney can give you detailed information about your financial "
+"status, you need to create at least one account. Until then, KMyMoney shows "
+"the welcome page instead."
+msgstr ""
+
+#: views/khomeview.cpp:1258
+#, fuzzy
+msgid "Assets and Liabilities Summary"
+msgstr "Tillgångar & skulder"
+
+#: views/khomeview.cpp:1262
+#, fuzzy
+msgid "Asset Accounts"
+msgstr "Tillgångar"
+
+#: views/khomeview.cpp:1270
+#, fuzzy
+msgid "Liability Accounts"
+msgstr "Kontofilter"
+
+#: views/khomeview.cpp:1348
+#, fuzzy
+msgid "Total Assets"
+msgstr "Detaljer"
+
+#: views/khomeview.cpp:1354
+#, fuzzy
+msgid "Total Liabilities"
+msgstr "Tillgångar & skulder"
+
+#: views/khomeview.cpp:1399
+#, fuzzy
+msgid "Current Month Summary"
+msgstr "Investeringssammanfattning"
+
+#: views/khomeview.cpp:1403 views/khomeview.cpp:1440
+#, fuzzy
+msgid "Budgeted"
+msgstr "Budget"
+
+#: views/khomeview.cpp:1433
+#, fuzzy
+msgid "Budget Overruns"
+msgstr "siffror"
+
+#: views/khomeview.cpp:1502
+msgid "No Budget Categories have been overrun"
+msgstr ""
+
+#: views/khomeview.cpp:1801
+msgid "Cash Flow Summary"
+msgstr ""
+
+#: views/khomeview.cpp:1808
+#, fuzzy
+msgid "Income and Expenses of Current Month"
+msgstr "Inkomster och utgifter aktuell månad"
+
+#: views/khomeview.cpp:1816
+#, fuzzy
+msgid "Scheduled Income"
+msgstr "Namn på schema:"
+
+#: views/khomeview.cpp:1819
+#, fuzzy
+msgid "Expenses"
+msgstr "Utgift"
+
+#: views/khomeview.cpp:1822
+#, fuzzy
+msgid "Scheduled Expenses"
+msgstr "Inkomster och utgifter aktuell månad"
+
+#: views/khomeview.cpp:1850
+#, fuzzy
+msgid "Liquid Assets and Liabilities"
+msgstr "Tillgångar & skulder"
+
+#: views/khomeview.cpp:1855
+msgid "Liquid Assets"
+msgstr ""
+
+#: views/khomeview.cpp:1858
+#, fuzzy
+msgid "Transfers to Liquid Liabilities"
+msgstr "Tillgångar & skulder"
+
+#: views/khomeview.cpp:1861
+#, fuzzy
+msgid "Liquid Liabilities"
+msgstr "Tillgångar & skulder"
+
+#: views/khomeview.cpp:1864
+#, fuzzy
+msgid "Other Transfers"
+msgstr "Överföring"
+
+#: views/khomeview.cpp:1908
+msgid "Cash Flow Status"
+msgstr ""
+
+#: views/khomeview.cpp:1914
+msgid "Expected Liquid Assets"
+msgstr ""
+
+#: views/khomeview.cpp:1917
+#, fuzzy
+msgid "Expected Liquid Liabilities"
+msgstr "Tillgångar & skulder"
+
+#: views/khomeview.cpp:1920
+msgid "Expected Profit/Loss"
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:64
+msgid "OFX..."
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:69
+msgid "OFX import file selection"
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid ""
+"Unable to import %1 using the OFX importer plugin. This file is not the "
+"correct format."
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid "Incorrect format"
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:122
+#, fuzzy
+msgid "Unable to parse file"
+msgstr "Kunde inte nollställa budget"
+
+#: plugins/ofximport/ofximporterplugin.cpp:576
+#, fuzzy
+msgid "Online settings"
+msgstr "Schemainställningar"
+
+#: plugins/ofximport/ofximporterplugin.cpp:635
+#, c-format
+msgid "Error connecting to bank: %1"
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:646
+msgid ""
+"Unable to import %1 using the OFX importer plugin. The plugin returned the "
+"following error:<p>%2"
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Importing process terminated unexpectedly."
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Failed to import all statements."
+msgstr ""
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "The HTTP request failed."
+msgstr "HTTP-anropet misslyckades."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "Failed"
+msgstr "Misslyckades"
+
+#: plugins/ofximport/ofxpartner.cpp:410
+msgid "Cannot open file %1 for writing"
+msgstr ""
+
+#: plugins/ofximport/ofxpartner.cpp:414
+msgid "OFX setup error"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid "Loading banklist"
+msgstr "Laddar banklista"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid ""
+"Getting list of banks from http://moneycentral.msn.com/\n"
+"This may take some time depending on the available bandwidth."
+msgstr ""
+"Laddar lista på banker från http://moneycentral.msn.com/\n"
+"Detta kan ta lite tid beroende på internetanslutningens hastighet."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:155
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:199
+msgid "Supports online statements<br>"
+msgstr "Stöder online kontoutdrag<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:157
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:201
+msgid "Supports investments<br>"
+msgstr "Stöder värdepapper<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:159
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:203
+msgid "Supports bill payment (but not supported by KMyMoney yet)<br>"
+msgstr "Stöder betalning av räkningar (stöds dock inte av KMyMoney än)<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:163
+msgid "Does not support online banking</p>"
+msgstr "Saknar bank-onlinefunktioner</p>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:173
+msgid "Please choose a bank."
+msgstr "Vänligen välj en bank."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:179
+msgid "Please fill all fields with values."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:271
+msgid "No suitable accounts were found at this bank."
+msgstr "Inga lämpliga konton hittades för denna bank."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:283
+msgid "Please choose an account"
+msgstr "Välj ett konto"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:386
+msgid "Server message: %1\n"
+msgstr "Servermeddelande: %1\n"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+msgid "Your bank returned warnings when signing on"
+msgstr "Din bank returnerade varningar vid inloggning"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+#, c-format
+msgid "WARNING %1"
+msgstr "VARNING %1"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+msgid "Error signing onto your bank"
+msgstr "Fel vid inloggning till din bank"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, c-format
+msgid "ERROR %1"
+msgstr "FEL %1"
+
+#: plugins/ofximport/dialogs/konlinebankingstatus.cpp:59
+msgid "Enabled & configured"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:1
+msgid "OFX Direct Connect"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:2
+msgid "Contacting bank..."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:4
+msgid "Online Banking Account Setup"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:5
+msgid "Select Financial Institution"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:6
+msgid "Please select your financial institution from the list below..."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:7
+msgid "Automatic"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:8
+msgid "Financial Institution"
+msgstr "Institution"
+
+#: plugins/ofximport/dialogs/rc.cpp:9
+msgid "Manual"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:10
+msgid "Org"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:11
+#, fuzzy
+msgid "FID"
+msgstr "FIID"
+
+#: dialogs/settings/rc.cpp:120 plugins/ofximport/dialogs/rc.cpp:12
+#: widgets/rc.cpp:46
+msgid "URL"
+msgstr "URL"
+
+#: plugins/ofximport/dialogs/rc.cpp:13
+msgid "Enter Login Details"
+msgstr "Ange inloggningsinformation"
+
+#: plugins/ofximport/dialogs/rc.cpp:14
+msgid ""
+"Please enter the username and password you use to log into this bank for "
+"online banking. Please note that many banks require a separate signup, and "
+"assign a separate PIN or password just for online banking from home."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:15
+msgid "Connection Details"
+msgstr "Anslutningsdetaljer"
+
+#: plugins/ofximport/dialogs/rc.cpp:16
+msgid "Username"
+msgstr "Användarnamn"
+
+#: plugins/ofximport/dialogs/rc.cpp:17 plugins/ofximport/dialogs/rc.cpp:36
+msgid "Header Version"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:18 plugins/ofximport/dialogs/rc.cpp:37
+msgid "Identify as"
+msgstr ""
+
+#: dialogs/rc.cpp:742 plugins/ofximport/dialogs/rc.cpp:19
+msgid "Password"
+msgstr "Lösenord"
+
+#: plugins/ofximport/dialogs/rc.cpp:20
+msgid "Select Account"
+msgstr "Välj konto"
+
+#: plugins/ofximport/dialogs/rc.cpp:21
+msgid ""
+"Please select the account from your financial institution from the list "
+"below which matches this account."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:24
+msgid "Bank"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:25
+msgid "Branch"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:26
+msgid "WizardPage"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:27
+msgid ""
+"Congratulations! You have successfully set up your bank for online banking "
+"via OFX."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:28
+#, fuzzy
+msgid "Account Details"
+msgstr "Konton"
+
+#: plugins/ofximport/dialogs/rc.cpp:29 plugins/ofximport/dialogs/rc.cpp:31
+msgid "&lt;Not configured&gt;"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:30
+msgid "BANK/BROKER:"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:32
+#, fuzzy
+msgid "Unavailable"
+msgstr "Saldo"
+
+#: plugins/ofximport/dialogs/rc.cpp:33
+msgid "ACCOUNT:"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:34
+msgid "STATUS:"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:35
+#, fuzzy
+msgid "OFX Details"
+msgstr "Detaljer"
+
+#: plugins/ofximport/dialogs/rc.cpp:38
+#, fuzzy
+msgid "Start date of import"
+msgstr "Startdatum på utdraget"
+
+#: plugins/ofximport/dialogs/rc.cpp:39
+#, fuzzy
+msgid "To&day minus"
+msgstr "Låneinbetalning"
+
+#: plugins/ofximport/dialogs/rc.cpp:40
+#, fuzzy
+msgid "days"
+msgstr "Dagar"
+
+#: plugins/ofximport/dialogs/rc.cpp:41
+#, fuzzy
+msgid "Last &update"
+msgstr "ränta"
+
+#: plugins/ofximport/dialogs/rc.cpp:42
+msgid "Pi&ck date"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:43
+msgid "Name is derived from"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:44
+msgid "P&AYEEID"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:45
+#, fuzzy
+msgid "&NAME"
+msgstr "AMEX"
+
+#: plugins/ofximport/dialogs/rc.cpp:46
+msgid "field if both are present in download"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:81
+msgid "Quicken Windows 2003"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:82
+msgid "Quicken Windows 2004"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:83
+msgid "Quicken Windows 2005"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:84
+msgid "Quicken Windows 2006"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:85
+msgid "Quicken Windows 2007"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:86
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:111
+msgid "Quicken Windows 2008"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:89
+msgid "MS-Money 2003"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:90
+msgid "MS-Money 2004"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:91
+msgid "MS-Money 2005"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:92
+msgid "MS-Money 2006"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:93
+msgid "MS-Money 2007"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:94
+msgid "MS-Money Plus"
+msgstr ""
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:91
+msgid "Report Configuration"
+msgstr ""
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:117
+#: dialogs/kreportconfigurationfilterdlg.cpp:135
+msgid "Rows/Columns"
+msgstr ""
+
+#: dialogs/investtransactioneditor.cpp:203
+#: dialogs/investtransactioneditor.cpp:537
+#: dialogs/investtransactioneditor.cpp:579 dialogs/rc.cpp:103
+#: dialogs/rc.cpp:158 dialogs/rc.cpp:245 dialogs/rc.cpp:750 dialogs/rc.cpp:794
+#: widgets/kmymoneyaccountselector.cpp:182 widgets/register.cpp:64
+#: widgets/register.cpp:567 widgets/transaction.cpp:1500
+msgid "Security"
+msgstr ""
+
+#: dialogs/investtransactioneditor.cpp:211
+msgid "Asset account"
+msgstr "Tillgångar"
+
+#: dialogs/investtransactioneditor.cpp:1073
+msgid "Price/Share"
+msgstr "Kurs"
+
+#: dialogs/kmergetransactionsdlg.cpp:39
+msgid "Merge Transactions"
+msgstr "Slå ihop transaktioner"
+
+#: dialogs/kmergetransactionsdlg.cpp:40
+msgid "Are you sure you wish to merge these transactions?"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:59
+msgid "Start Dialog"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Templates"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Select templates"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:80 dialogs/kstartdlg.cpp:119
+msgid "New KMyMoney document"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:90
+msgid "Open a KMyMoney document"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:96
+msgid ""
+"%1|KMyMoney files (*.kmy)\n"
+"%2|All files (*.*)"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:102
+msgid "Recent Files"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:217
+msgid "Blank Document"
+msgstr ""
+
+#: dialogs/knewbudgetdlg.cpp:71
+msgid "Please specify a budget name"
+msgstr ""
+
+#: dialogs/kgncpricesourcedlg.cpp:48
+#, c-format
+msgid "Investment: %1"
+msgstr "Värdepapper: %1"
+
+#: dialogs/kgncpricesourcedlg.cpp:49
+#, c-format
+msgid "Quote source: %1"
+msgstr "Kurs-källa: %1"
+
+#: dialogs/kmymoneypricedlg.cpp:62 dialogs/ksecuritylisteditor.cpp:69
+msgid "Delete this entry"
+msgstr "Ta bort post"
+
+#: dialogs/ksecuritylisteditor.cpp:70
+msgid "Remove this security item from the file"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:73
+msgid "&Add"
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:68 dialogs/ksecuritylisteditor.cpp:75
+msgid "Add a new entry"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:76
+msgid "Create a new security entry."
+msgstr ""
+
+#: dialogs/keditequityentrydlg.cpp:77 dialogs/kmymoneypricedlg.cpp:74
+#: dialogs/ksecuritylisteditor.cpp:81
+msgid "Modify the selected entry"
+msgstr "Ändra markerad post"
+
+#: dialogs/ksecuritylisteditor.cpp:82
+msgid "Change the security information of the selected entry."
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:80 dialogs/ksecuritylisteditor.cpp:87
+msgid "Close the dialog"
+msgstr "Stäng dialogrutan"
+
+#: dialogs/kmymoneypricedlg.cpp:81 dialogs/ksecuritylisteditor.cpp:88
+msgid "Use this to close the dialog and return to the application."
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:184
+msgid ""
+"Do you really want to remove the currency <b>%1</b> from the file?</"
+"p><i>Note: It is currently not supported to add currencies.</i>"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:187
+msgid "Do you really want to remove the %1 <b>%2</b> from the file?"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:190
+msgid "Delete security"
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:63
+msgid "Remove this price item from the file"
+msgstr "Ta bort denna kurs från filen"
+
+#: dialogs/kmymoneypricedlg.cpp:66 dialogs/mymoneyqifprofileeditor.cpp:94
+msgid "&New"
+msgstr "&Nytt"
+
+#: dialogs/kmymoneypricedlg.cpp:69
+msgid "Create a new price entry."
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:75
+msgid "Change the details of selected price information."
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Do you really want to delete the selected price entry?"
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Delete price information"
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:46
+msgid ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:50 dialogs/rc.cpp:22
+msgid "Choose import type:"
+msgstr "Välj typ av import:"
+
+#: dialogs/kchooseimportexportdlg.cpp:51 dialogs/rc.cpp:20
+msgid "Choose Import Type Dialog"
+msgstr "Välj typ av import"
+
+#: dialogs/kchooseimportexportdlg.cpp:53
+msgid ""
+"Please choose the type of export you wish to perform. A simple explanation\n"
+"of the export type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an export type please press the OK button."
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:57
+msgid "Choose export type:"
+msgstr "Välj typ av export:"
+
+#: dialogs/kchooseimportexportdlg.cpp:58
+msgid "Choose Export Type Dialog"
+msgstr "Välj typ av export"
+
+#: dialogs/kchooseimportexportdlg.cpp:78
+msgid ""
+"QIF files are created by the popular accounting program Quicken.\n"
+"Another dialog will appear, if you choose this type, asking for further\n"
+"information relevant to the Quicken format."
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:82
+msgid ""
+"The CSV type uses a comma delimeted text file that can be used by\n"
+"most popular spreadsheet programs available for Linux and other operating\n"
+"systems."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:222
+msgid "%1 units in %2"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid ""
+"Failed to retrieve an exchange rate for %1 from %2. It will be skipped this "
+"time."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid "Price Update Failed"
+msgstr "Kursuppdatering misslyckades"
+
+#: dialogs/kequitypriceupdatedlg.cpp:427
+msgid ""
+"Failed to retrieve a quote for %1 from %2. Press <b>No</b> to remove the "
+"online price source from this security permanently, <b>Yes</b> to continue "
+"updating this security during future price updates or <b>Cancel</b> to stop "
+"the current update operation."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:427 dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Price Update Failed"
+msgstr "Kursuppdatering misslyckades"
+
+#: dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Cannot update security <b>%1</b>: %2"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:528
+msgid "Price for %1 updated (id %2)"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:534
+msgid "Received an invalid price for %1, unable to update."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:554
+msgid ""
+"Received a price for %1 (id %2), but this symbol is not on the list! "
+"Aborting entire update."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:222
+msgid ""
+"The number <b>%1</b> has already been used in account <b>%2</b>. Do you want "
+"to replace it with the next available number?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:222
+msgid "Duplicate number"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:303
+msgid ""
+"This transaction has more than two splits and is based on a different "
+"currency (%1). Using this account to modify the transaction is currently not "
+"very well supported by KMyMoney and may result in false results."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:305
+msgid ""
+"KMyMoney was not able to find a more appropriate account to edit this "
+"transaction. Nevertheless, you are allowed to modify the transaction. If you "
+"don't want to edit this transaction, please cancel from editing next."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:307
+msgid ""
+"Using e.g. <b>%1</b> to edit this transaction is a better choice. "
+"Nevertheless, you are allowed to modify the transaction. If you want to use "
+"the suggested account instead, please cancel from editing next and change "
+"the view to the suggested account."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:410
+msgid ""
+"This transaction has more than two splits and is originally based on a "
+"different currency (%1). Using this account to modify the transaction may "
+"result in rounding errors. Do you want to continue?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:412
+msgid ""
+"At least one of the selected transactions has more than two splits and is "
+"originally based on a different currency (%1). Using this account to modify "
+"the transactions may result in rounding errors. Do you want to continue?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:557
+msgid "Storing transactions"
+msgstr "Sparar transaktioner"
+
+#: dialogs/transactioneditor.cpp:603 widgets/kmymoneybriefschedule.cpp:65
+msgid "&Enter"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:606
+msgid "Use this to enter the transaction into the ledger."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:607
+msgid "&Schedule"
+msgstr "&Schema"
+
+#: dialogs/transactioneditor.cpp:609
+msgid "Accepts the entered data and stores it as schedule"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:610
+msgid "Use this to schedule the transaction for later entry into the ledger."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"The transaction you are about to enter has a post date in the future.<br/"
+"><br/>Do you want to enter it in the ledger or add it to the schedules?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"_: Dialog caption for 'Enter or schedule' dialog\n"
+"Enter or schedule?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:671
+msgid ""
+"The balance of account <b>%1</b> dropped below the warning balance of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:677
+msgid ""
+"The balance of account <b>%1</b> dropped below the minimum balance of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:683
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit warning "
+"limit of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:689
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit limit of %"
+"2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:740
+msgid "Payer/Receiver"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:748
+msgid "Category/Account"
+msgstr "Kategori/Konto"
+
+#: dialogs/transactioneditor.cpp:980 dialogs/transactioneditor.cpp:1016
+#: dialogs/transactioneditor.cpp:1378 dialogs/transactioneditor.cpp:1399
+#: dialogs/transactioneditor.cpp:1422 dialogs/transactioneditor.cpp:1443
+#: dialogs/transactioneditor.cpp:1505 dialogs/transactioneditor.cpp:1509
+#: widgets/transaction.cpp:902
+msgid "Transfer from"
+msgstr "Överför från"
+
+#: dialogs/transactioneditor.cpp:982 dialogs/transactioneditor.cpp:1018
+#: dialogs/transactioneditor.cpp:1401 dialogs/transactioneditor.cpp:1445
+#: dialogs/transactioneditor.cpp:1506 widgets/transaction.cpp:902
+msgid "Transfer to"
+msgstr "Överför till"
+
+#: dialogs/transactioneditor.cpp:1259
+msgid "Select autofill transaction"
+msgstr "Välj autofyllnadstransaktion"
+
+#: dialogs/transactionmatcher.cpp:77
+msgid "First transaction does not match requirement for matching"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:79
+msgid "Second transaction does not match requirement for matching"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:83 dialogs/transactionmatcher.cpp:133
+msgid "Splits for %1 have conflicting values (%2,%3)"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:96 dialogs/transactionmatcher.cpp:149
+msgid ""
+"Both of these transactions have been imported into %1. Therefore they "
+"cannot be matched. Matching works with one imported transaction and one non-"
+"imported transaction."
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:101 dialogs/transactionmatcher.cpp:156
+msgid "Unable to match all splits (%1)"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:65
+msgid "Account and transfer account are the same. Please change one."
+msgstr "Till- och frånkonto är detsamma. Vänligen ändra en av dem."
+
+#: dialogs/kconfirmmanualenterdlg.cpp:84
+msgid "Payee changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Betalningsmottagare ändrad.<br>&nbsp;&nbsp;&nbsp;Gammal: <b>%1</b>, Ny: <b>%"
+"2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:92
+#: dialogs/kconfirmmanualenterdlg.cpp:100
+msgid "Account changed. Old: \"%1\", New: \"%2\""
+msgstr "Konto ändrat. Gammalt: \"%1\", Nytt: \"%2\""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:107
+msgid "Account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Konto ändrat.<br>&nbsp;&nbsp;&nbsp;Gammalt: <b>%1</b>, Nytt: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:115
+msgid ""
+"Transfer account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</"
+"b><p>"
+msgstr ""
+"Konto för överföring ändrat.<br>&nbsp;&nbsp;&nbsp;Gammalt: <b>%1</b>, Nytt: "
+"<b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:143
+msgid ""
+"Category changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Kategori bytt.<br>&nbsp;&nbsp;&nbsp;Gammal: <b>%1</b>, Ny: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:151
+#: dialogs/kconfirmmanualenterdlg.cpp:153
+msgid "empty"
+msgstr "tom"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:157
+msgid "Memo changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Anteckning ändrad.<br>&nbsp;&nbsp;&nbsp;Gammal: <b>%1</b>, Ny: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:166
+msgid "Amount changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Belopp ändrat.<br>&nbsp;&nbsp;&nbsp;Gammalt: <b>%1</b>, Nytt: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:175
+msgid ""
+"Reconciliation flag changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%"
+"2</b><p>"
+msgstr ""
+"Avstämningsflagga ändrad.<br>&nbsp;&nbsp;&nbsp;Gammal: <b>%1</b>, Ny: <b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:182
+msgid "Fatal error in determining data: "
+msgstr "Fatalt fel vid bestämmande av data: "
+
+#: dialogs/kselectdatabasedlg.cpp:56
+msgid ""
+"There are no Qt SQL drivers installed in your system.\n"
+"Please consult documentation for your distro, or visit the Qt web site (www."
+"trolltech.com) and search for SQL drivers."
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:100
+msgid "Qt SQL driver %1 is no longer installed on your system"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:107
+msgid "Qt SQL driver %1 is not suported"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:164
+msgid "SQLite files (*.sql);; All files (*.*)"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:167
+#, fuzzy
+msgid "Select SQLite file"
+msgstr "Tilläggsavgifter:"
+
+#: dialogs/kselectdatabasedlg.cpp:188
+msgid "All files (*.*)"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:191
+#, fuzzy
+msgid "Select output file"
+msgstr "Välj konto:"
+
+#: dialogs/investactivities.cpp:168
+msgid "%1 (Brokerage)"
+msgstr "%1 (Kontantdepå)"
+
+#: dialogs/investactivities.cpp:200 dialogs/investactivities.cpp:288
+#: dialogs/investactivities.cpp:425 widgets/transaction.cpp:1548
+msgid "Price/share"
+msgstr "Kurs"
+
+#: dialogs/investactivities.cpp:586
+msgid "Ratio 1/"
+msgstr "Förhållande 1/"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid ""
+"<p>Please check that all the details in the following dialog are correct and "
+"press OK.</p><p>Editable data can be changed and can either be applied to "
+"just this occurence or for all subsequent occurences for this schedule. "
+"(You will be asked what you intend after pressing OK in the following dialog)"
+"</p>"
+msgstr ""
+"<p>Vänligen kontroller att alla detaljer i följande dialogruta är korrekta "
+"och klicka sedan på OK.</p><p>Redigerbar data kan ändras och kan antingen "
+"användas på bara detta tillfälle eller på alla kommande händelser för denna "
+"schemapost. (Du kommer att tillfrågas vilket du avser efter att du klickar "
+"på OK i följande dialogruta.)</p>"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid "Enter scheduled transaction"
+msgstr "Registrera schemalagd transaktion"
+
+#: dialogs/kcsvprogressdlg.cpp:65 dialogs/kexportdlg.cpp:65
+msgid "&Export"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:67 dialogs/kimportdlg.cpp:68
+msgid "Start operation"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:68
+msgid "Use this to start the export operation"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:71 dialogs/kimportdlg.cpp:72
+msgid "&Browse..."
+msgstr "&Bläddra"
+
+#: dialogs/kexportdlg.cpp:73 dialogs/kimportdlg.cpp:74
+msgid "Select filename"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:74 dialogs/kimportdlg.cpp:75
+msgid "Use this to select a filename to export to"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:77 dialogs/kimportdlg.cpp:78
+#: dialogs/settings/ksettingsonlinequotes.cpp:64
+#: widgets/kmymoneyonlinequoteconfig.cpp:64
+msgid "&New..."
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:79 dialogs/kimportdlg.cpp:80
+#: dialogs/mymoneyqifprofileeditor.cpp:96
+msgid "Create a new profile"
+msgstr ""
+
+#: dialogs/kexportdlg.cpp:80 dialogs/kimportdlg.cpp:81
+msgid "Use this to open the profile editor"
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:56
+msgid "Edit loan wizard"
+msgstr "Redigera lån-guide"
+
+#: dialogs/keditloanwizard.cpp:58
+msgid ""
+"Please enter the date from which on the following changes will be effective. "
+"The date entered must be later than the opening date of this account (%1), "
+"but must not be in the future. The default will be today."
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:76
+msgid ""
+"Note: you will not be able to modify this account today, because the opening "
+"date \"%1\" is in the future. Please revisit this dialog when the time has "
+"come."
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:244
+msgid ""
+"Your previous selection was \"%1\". If you select another option, KMyMoney "
+"will dismiss the changes you have just entered. Do you wish to proceed?"
+msgstr ""
+
+#: dialogs/kcategoryreassigndlg.cpp:81
+msgid ""
+"At least one transaction/schedule still references the category <b>%1</b>. "
+"However, at least one category with the same currency must exist so that the "
+"transactions/schedules can be reassigned."
+msgstr ""
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid ""
+"This dialog does not allow to create new categories. Please pick a category "
+"from the list."
+msgstr ""
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid "Category creation"
+msgstr "Kategoriskapande"
+
+#: dialogs/kbackupdlg.cpp:61
+msgid "C&hoose..."
+msgstr ""
+
+#: dialogs/kbackupdlg.cpp:63
+msgid "Select mount point"
+msgstr ""
+
+#: dialogs/kbackupdlg.cpp:64
+msgid "Use this to browse to the mount point."
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:293
+msgid "Next due date"
+msgstr "Nästa förfallodatum"
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid ""
+"You have turned on the GPG encryption support. This means, that new files "
+"will be stored encrypted. Existing files will not be encrypted "
+"automatically. To achieve encryption of existing files, please use the "
+"<b>File/Save as...</b> feature and store the file under a different name. "
+"Once confident with the result, feel free to delete the old file and rename "
+"the encrypted one to the old name."
+msgstr ""
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+#, fuzzy
+msgid "GPG encryption activated"
+msgstr "Beskrivning"
+
+#: dialogs/settings/ksettingshome.cpp:51
+msgid "&Up"
+msgstr "&Upp"
+
+#: dialogs/settings/ksettingshome.cpp:53
+msgid "Move selected item up"
+msgstr ""
+
+#: dialogs/settings/ksettingshome.cpp:54
+msgid "Use this to move the selected item up by one position in the list."
+msgstr ""
+
+#: dialogs/settings/ksettingshome.cpp:55
+msgid "&Down"
+msgstr "&Ner"
+
+#: dialogs/settings/ksettingshome.cpp:57
+msgid "Move selected item down"
+msgstr ""
+
+#: dialogs/settings/ksettingshome.cpp:58
+msgid "Use this to move the selected item down by one position in the list."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:1
+msgid "Color settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:2
+msgid "Foreground"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:3
+msgid "Text colors"
+msgstr "Textfärger"
+
+#: dialogs/settings/rc.cpp:4
+msgid "Grid color"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:5
+msgid "Erronous transaction"
+msgstr "Felaktig transaktion"
+
+#: dialogs/settings/rc.cpp:6
+msgid "Value with missing conversion rate"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:7
+msgid "Negative value"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:8
+msgid "Background"
+msgstr "Bakgrund"
+
+#: dialogs/settings/rc.cpp:10
+msgid "List background colors"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:11
+msgid "Normal"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:12
+msgid "Alternate"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:13
+msgid "Special background colors"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:14
+msgid "Ledger group separator"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:15
+msgid "Required field"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:16
+msgid "Imported transaction"
+msgstr "Importerad transaktion"
+
+#: dialogs/settings/rc.cpp:17
+msgid "Matched transaction"
+msgstr "Matchad transaktion"
+
+#: dialogs/settings/rc.cpp:18
+msgid "Font settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:19
+msgid "Use system fonts"
+msgstr "Använd systemfonter"
+
+#: dialogs/settings/rc.cpp:20
+msgid "Individual font settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:24
+msgid "Number of Days of Account Cycle:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:26
+msgid "Number of Days to Forecast:"
+msgstr "Antal dagar att förutspå:"
+
+#: dialogs/settings/rc.cpp:27
+msgid "Forecast Method"
+msgstr "Beräkningsmetod"
+
+#: dialogs/settings/rc.cpp:28
+#, fuzzy
+msgid "Scheduled and Future Transactions"
+msgstr "Schemalagda och framtida transaktioner"
+
+#: dialogs/settings/rc.cpp:29
+#, fuzzy
+msgid "History-based"
+msgstr "Historikbaserad förutsägelse"
+
+#: dialogs/settings/rc.cpp:30
+msgid "History-based settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:31
+msgid "Number of Cycles to use in Forecast:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:36
+msgid "General Settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:37
+msgid "Global"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:38
+msgid "Startup page options"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:39
+msgid "Start with homepage"
+msgstr "Börja med hemsida"
+
+#: dialogs/settings/rc.cpp:40
+msgid "Start with last selected view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:41
+msgid "Precision settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:42
+msgid "Price precision"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:43
+msgid "digits"
+msgstr "siffror"
+
+#: dialogs/settings/rc.cpp:44
+msgid "Autosave options"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:45
+msgid "Autosave periodically"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:46
+msgid "minutes"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:47
+msgid "Fiscal Year"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:48
+msgid "Your fiscal year starts on"
+msgstr "Ditt räkenskapsår börjar"
+
+#: dialogs/settings/rc.cpp:49
+msgid "January"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:50
+msgid "February"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:51
+msgid "March"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:52
+msgid "April"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:53
+msgid "May"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:54
+msgid "June"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:55
+msgid "July"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:56
+msgid "August"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:57
+msgid "September"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:58
+msgid "October"
+msgstr "Oktober"
+
+#: dialogs/settings/rc.cpp:59
+msgid "November"
+msgstr "November"
+
+#: dialogs/settings/rc.cpp:60
+msgid "December"
+msgstr "December"
+
+#: dialogs/settings/rc.cpp:61
+msgid "Views"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:62
+msgid "Synchronize account selection of ledger and investment view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:63
+msgid ""
+"Check the views you want to enable, uncheck those you want to hide, because "
+"you don't need the functionality."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:64
+msgid "Icon size of navigation bar"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:65
+msgid "Micro (16px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:66
+msgid "Small (32px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:67
+msgid "Normal (48px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:68
+msgid "Large (64px)"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:69
+msgid "Show title bar on each page"
+msgstr ""
+
+#: dialogs/rc.cpp:835 dialogs/settings/rc.cpp:70
+msgid "Filter"
+msgstr "Filter"
+
+#: dialogs/settings/rc.cpp:71
+msgid "Accounts / Categories"
+msgstr "Konton / Kategorier"
+
+#: dialogs/settings/rc.cpp:72
+msgid "Don't show unused categories"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:73
+msgid ""
+"This option hides all categories in the categories view that are not used in "
+"at least a single transaction. They are still shown in the category "
+"selection lists."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:74
+msgid "Don't show closed accounts"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:75
+msgid ""
+"This option hides all accounts that have been closed by the user in views "
+"and selection lists.\n"
+"\n"
+"You can use <b>View/Show all accounts</b> to temporarily show hidden "
+"accounts in the views."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:76
+#, fuzzy
+msgid "Show equity accounts"
+msgstr "Kontofilter"
+
+#: dialogs/rc.cpp:332 dialogs/settings/rc.cpp:77 widgets/rc.cpp:160
+msgid "Schedules"
+msgstr "Scheman"
+
+#: dialogs/settings/rc.cpp:78
+msgid "Don't show finished schedules"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:79
+msgid "This option hides all finished schedules in the schedules view."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:81
+msgid "Don't show transactions prior to"
+msgstr "Visa inte transaktioner före"
+
+#: dialogs/settings/rc.cpp:82
+msgid "Don't show reconciled transactions"
+msgstr "Visa inte avstämda transaktioner"
+
+#: dialogs/settings/rc.cpp:83
+msgid "This option hides all reconciled transactions in the ledger view."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:84 widgets/rc.cpp:22
+msgid "GPG encryption settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:85
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Access to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>additional recovery encryption</i> is only accessible, if the "
+"necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id "
+"0x8AFDDC8E is found in your keyring."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:86 widgets/rc.cpp:24
+msgid "Use GPG encryption"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:87
+#, fuzzy
+msgid "GPG encryption"
+msgstr "Beskrivning"
+
+#: dialogs/settings/rc.cpp:88
+#, fuzzy
+msgid "Your key"
+msgstr "Din budget"
+
+#: dialogs/settings/rc.cpp:89
+msgid ""
+"This combo box lists all the secret keys you have in your keyring. Select "
+"the one you want to use for encryption when saving to a file."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:90
+#, fuzzy
+msgid "Additonal keys"
+msgstr "Tilläggsavgifter:"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:50 dialogs/settings/rc.cpp:91
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading 0x."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:92 widgets/rc.cpp:28
+msgid ""
+"This symbol denotes, if the key for the given user id has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+
+#: dialogs/kgpgkeyselectiondlg.cpp:61 dialogs/settings/rc.cpp:93
+msgid "Keys for all of the above user ids found"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:94 widgets/rc.cpp:31
+msgid ""
+"This symbol denotes, if the KMyMoney recovery key has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:95
+msgid "Recover Key available in keyring"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:96
+msgid "Also encrypt with KMyMoney's recover key"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:97
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out.."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:98
+msgid "Homepage Settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:99
+msgid "Up"
+msgstr "Upp"
+
+#: dialogs/settings/rc.cpp:100
+msgid "Down"
+msgstr "Ner"
+
+#: dialogs/settings/rc.cpp:101
+msgid ""
+"Selected entries are shown on the home page of the application.<p>\n"
+"Use the buttons and checkboxes to customize the layout of the home page."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:102
+msgid "Homepage/Summary page font scaling"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:103
+msgid "Percentage of default font size:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:104
+msgid ""
+"Remember font size when leaving the program if manually changed with mouse-"
+"wheel"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:105
+#, fuzzy
+msgid "Information display"
+msgstr "Betalningsinformation"
+
+#: dialogs/settings/rc.cpp:106
+#, fuzzy
+msgid "Show Account Limit Information"
+msgstr "Betalningsinformation"
+
+#: dialogs/settings/rc.cpp:110 widgets/rc.cpp:47
+msgid ""
+"<i>Enter regular expressions which can be used to parse the data returned "
+"from the URL entered above. The symbol, price, and date must be found in "
+"the quote data to be usable. You may also try the KMyMoney user's "
+"mailinglist at <a href=\"mailto:kmymoney2-user@lists.sourceforge.net"
+"\">kmymoney2-user@lists.sourceforge.net</a> to find what settings work for "
+"other users in your country.</i>"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:113 widgets/rc.cpp:38
+msgid "Regular Expression to extract the symbol from the downloaded data"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:114 widgets/rc.cpp:39
+msgid "Regular Expression to extract the price from the downloaded data"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:115 widgets/rc.cpp:41
+msgid "URL to be used to download the quote"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:116 widgets/rc.cpp:42
+msgid ""
+"Enter the URL from which stock quotes will be fetched. <b>%1</b> will be "
+"replaced with the symbol for the security being quoted. For currency "
+"conversions, <b>%2</b> will be replaced with the currency to be quoted and "
+"<b>%1</b> with the currency the quote is based on."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:118 dialogs/settings/rc.cpp:121 widgets/rc.cpp:40
+#: widgets/rc.cpp:44
+msgid "Regular Expression to extract the date from the downloaded data"
+msgstr ""
+
+#: dialogs/rc.cpp:807 dialogs/settings/rc.cpp:119 widgets/rc.cpp:45
+msgid "Date Format"
+msgstr "Datumformat"
+
+#: dialogs/settings/rc.cpp:122
+msgid "Skip HTML stripping"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:123
+msgid ""
+"<p>For easier processing of the data returned by the online source, KMyMoney "
+"usually strips unused parts before it is parsed with the regular "
+"expressions. If matching of the fields relies on those items, then use this "
+"option to turn stripping off.</p>\n"
+"\n"
+"<p>The following items are usually removed by stripping:\n"
+"\n"
+"<ul>\n"
+"<li>HTML tags such as <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded characters such as <b>&amp;nbsp;</b></li>\n"
+"<li>duplicate whitespace</li>\n"
+"</ul>\n"
+"</p>"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:127
+msgid "Register settings"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:128
+msgid "Display"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:131
+msgid ""
+"Using the ledger lens shows the details for the transaction that has focus "
+"in the ledger. Usually, when using the transaction form, only a one line "
+"summary is displayed for each transaction as the details are shown in the "
+"form."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:133
+msgid "Always show a No. field"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:134
+#, fuzzy
+msgid "Show group header between transactions"
+msgstr "Skapa ett nytt konto"
+
+#: dialogs/settings/rc.cpp:135
+msgid ""
+"Draws a larger header above each group of transaction. The grouping depends "
+"on the current sort order."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:136
+msgid "Show header for the previous and current fiscal year"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:137
+msgid "Sorting"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:138
+msgid "Normal view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:139
+msgid "Reconciliation view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:140
+msgid "Search view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:141
+msgid ""
+"Use the <i>left</i> and <i>right</i> buttons to add and remove sort options. "
+"Use the <i>up</i> and <i>down</i> buttons to modify the sort order. Double-"
+"Click a selected entry to toggle the sort order between <i>ascending</i> and "
+"<i>descending</i>."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:142
+#, fuzzy
+msgid "Data entry"
+msgstr "Angivet belopp"
+
+#: dialogs/settings/rc.cpp:146
+msgid "Use Enter to move between fields"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:147
+msgid "Match names from start"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:148
+msgid ""
+"Mark this option, if you always want to match names e.g. for payees from the "
+"start. If unset, any substring is matched."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:149
+#, fuzzy
+msgid "Default reconciliation state"
+msgstr "Datum för sista betalning:"
+
+#: dialogs/rc.cpp:227 dialogs/settings/rc.cpp:150
+#: widgets/kmymoneycombo.cpp:348 widgets/registersearchline.cpp:84
+msgid "Not reconciled"
+msgstr ""
+
+#: dialogs/rc.cpp:228 dialogs/settings/rc.cpp:151
+#: widgets/kmymoneycombo.cpp:347 widgets/registersearchline.cpp:85
+msgid "Cleared"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:153
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation "
+"of an account"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:154
+msgid "Autofill"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:155
+msgid "No Autofill"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:156
+#, fuzzy
+msgid "Don't do autofill of transaction data at all."
+msgstr "Välj autofyllnadstransaktion"
+
+#: dialogs/settings/rc.cpp:157
+msgid "Same transaction if amount differs less than"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:158
+msgid ""
+"Collect all transactions for the given payee. Treat all transactions that "
+"refer to the same category and have an amount with +/- X % as identical. If "
+"more than one transaction is found, a list of them is presented to the "
+"user.\n"
+"\n"
+"Selecting 0% will list all transactions."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:159
+msgid ""
+"Two transactions are usually treated identical for autofill, if they refer "
+"the same accounts. They are treated as different transactions though, when "
+"their amount varies by more than the percentage given here."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:160
+msgid ""
+"_: Same transaction if amount differs less than percent.\n"
+"percent."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:161
+msgid "with previously most often used transaction for the payee"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:162
+msgid ""
+"The data of the last transaction assigned to the category used most often "
+"for this payee is autofilled into the transaction editor."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:164
+#, fuzzy
+msgid "Match transactions within days"
+msgstr "Matchad transaktion"
+
+#: dialogs/settings/rc.cpp:165
+msgid ""
+"Search for matching transactions within the range of the posting date of the "
+"imported transaction +/- the number of given days."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:166
+msgid "Ask for a new payee's default category"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:167
+msgid ""
+"Whenever a new payee is detected during import of a statement, the user will "
+"be asked to assign a default category for this user when this option is "
+"selected."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:168
+msgid "Schedule Settings"
+msgstr "Schemainställningar"
+
+#: dialogs/settings/rc.cpp:169
+msgid "Startup options"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:170
+msgid "Check schedules on startup"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:60
+#: widgets/kmymoneyonlinequoteconfig.cpp:60
+msgid "Delete the selected source entry"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:61
+#: widgets/kmymoneyonlinequoteconfig.cpp:61
+msgid "Use this to delete the selected online source entry"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:66
+#: widgets/kmymoneyonlinequoteconfig.cpp:66
+msgid "Create a new source entry for online quotes"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:67
+#: widgets/kmymoneyonlinequoteconfig.cpp:67
+msgid "Use this to create a new entry for online quotes"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:107
+#: dialogs/settings/ksettingsonlinequotes.cpp:190
+#: dialogs/settings/ksettingsonlinequotes.cpp:193
+#: dialogs/settings/ksettingsonlinequotes.cpp:216
+#: widgets/kmymoneyonlinequoteconfig.cpp:107
+#: widgets/kmymoneyonlinequoteconfig.cpp:185
+#: widgets/kmymoneyonlinequoteconfig.cpp:188
+#: widgets/kmymoneyonlinequoteconfig.cpp:211
+msgid "New Quote Source"
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:77 dialogs/rc.cpp:788
+msgid "Clear &All"
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:79
+msgid "Clear all splits"
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:80
+msgid "Use this to clear all splits of this transaction"
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:84
+#, fuzzy
+msgid "&Merge"
+msgstr "Avgifter"
+
+#: dialogs/ksplittransactiondlg.cpp:183
+msgid ""
+"The total amount of this transaction is %1 while the sum of the splits is %"
+"2. The remaining %3 are unassigned."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:191
+#, c-format
+msgid "Change &total amount of transaction to %1."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:194
+msgid "&Distribute difference of %1 among all splits."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:203
+#, c-format
+msgid "&Leave total amount of transaction at %1."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:205
+msgid "&Leave %1 unassigned."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:275
+msgid ""
+"You are about to delete all splits of this transaction. Do you really want "
+"to continue?"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:97
+msgid "Use this to create a new QIF import/export profile"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:148
+#: dialogs/mymoneyqifprofileeditor.cpp:403 dialogs/rc.cpp:797
+msgid "QIF Profile Editor"
+msgstr "QIF-profil redigerare"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:150
+msgid "QIF Profile Selector"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:236
+msgid "The default QIF profile"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:404
+#: dialogs/mymoneyqifprofileeditor.cpp:417
+msgid "Enter new profile name"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:436
+msgid "Do you really want to delete profile '%1'?"
+msgstr ""
+
+#: dialogs/kgpgkeyselectiondlg.cpp:38
+#, fuzzy
+msgid "Select additional keys"
+msgstr "Tilläggsavgifter:"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:48 widgets/rc.cpp:25
+msgid "User identification"
+msgstr ""
+
+#: dialogs/kendingbalancedlg.cpp:71
+msgid ""
+"Please enter the following fields with the information as you find them on "
+"your statement. Make sure to enter all values in <b>%1</b>."
+msgstr ""
+
+#: dialogs/kendingbalancedlg.cpp:124
+#, c-format
+msgid "Last reconciled statement: %1"
+msgstr ""
+
+#: dialogs/kendingbalancedlg.cpp:437 dialogs/kendingbalancedlg.cpp:577
+#: dialogs/rc.cpp:137
+msgid "Adjustment transaction"
+msgstr "Justeringstransaktion"
+
+#: dialogs/kendingbalancedlg.cpp:510
+msgid ""
+"KMyMoney has calculated the following amounts for interest and amortization "
+"according to recorded payments between %1 and %2."
+msgstr ""
+
+#: dialogs/kbalancechartdlg.cpp:59
+#, c-format
+msgid "Balance of %1"
+msgstr "Balans för %1"
+
+#: dialogs/kbalancechartdlg.cpp:70
+msgid "%1 Balance History"
+msgstr "Balanshistorik för %1"
+
+#: dialogs/kmymoneysplittable.cpp:98
+msgid "Split Options"
+msgstr "Split-alternativ"
+
+#: dialogs/kmymoneysplittable.cpp:99 dialogs/rc.cpp:731
+#: widgets/kmymoneypriceview.cpp:149
+#, fuzzy
+msgid "Edit..."
+msgstr "Ändra ..."
+
+#: dialogs/kmymoneysplittable.cpp:100
+msgid "Duplicate"
+msgstr "Duplicera"
+
+#: dialogs/kmymoneysplittable.cpp:102
+msgid "Delete ..."
+msgstr "Ta bort ..."
+
+#: dialogs/kmymoneysplittable.cpp:275
+msgid ""
+"_: Duplicate split\n"
+"CTRL+c"
+msgstr ""
+"_: Duplicera split\n"
+"CTRL+c"
+
+#: dialogs/kmymoneysplittable.cpp:562
+msgid "will be calculated"
+msgstr "kommer att beräknas"
+
+#: dialogs/kmymoneysplittable.cpp:648
+msgid ""
+"You are about to delete the selected split. Do you really want to continue?"
+msgstr ""
+"Du är på väg att radera den markerade spliten. Vill du verkligen fortsätta?"
+
+#: dialogs/rc.cpp:1
+msgid "Account selection"
+msgstr "Val av konto"
+
+#: dialogs/rc.cpp:3
+msgid "Account to import to"
+msgstr "Konto att importera till"
+
+#: dialogs/rc.cpp:6 dialogs/rc.cpp:170 widgets/rc.cpp:169
+#, fuzzy
+msgid "Skip"
+msgstr "&Hoppa över"
+
+#: dialogs/rc.cpp:8
+msgid ""
+"Use this dialog to backup your data. \n"
+"\n"
+"Please make sure you have a disk inserted and that the drive is ready. Then "
+"choose the mount point from either the Choose button or by entering the path "
+"in the available box.\n"
+"\n"
+"Click OK to perform the backup. If your system does not use an automounter, "
+"make sure you mark the checkbox below to \"mount this directory before "
+"backing up.\""
+msgstr ""
+
+#: dialogs/rc.cpp:9
+msgid "Device options"
+msgstr ""
+
+#: dialogs/rc.cpp:10
+msgid ""
+"_: This is the mount point\n"
+"Mount Point:"
+msgstr ""
+
+#: dialogs/rc.cpp:11
+#, fuzzy
+msgid "Choose..."
+msgstr "&Bläddra"
+
+#: dialogs/rc.cpp:12
+msgid "Mount this directory before backing up."
+msgstr ""
+
+#: dialogs/rc.cpp:15
+msgid "Reassign categories"
+msgstr "Omfördela kategorier"
+
+#: dialogs/rc.cpp:16
+msgid ""
+"The transactions, schedules and budgets associated with the selected "
+"category need to be re-assigned to a different category before the selected "
+"category can be deleted. Please select a category from the list below."
+msgstr ""
+
+#: dialogs/rc.cpp:17
+msgid "Available categories:"
+msgstr "Tillgängliga kategorier:"
+
+#: dialogs/rc.cpp:21
+msgid ""
+"Please choose the type of import you wish to perform. A simple "
+"explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+
+#: dialogs/rc.cpp:23
+msgid "QIF"
+msgstr "QIF"
+
+#: dialogs/rc.cpp:24
+msgid "CSV"
+msgstr "CSV"
+
+#: dialogs/rc.cpp:25
+msgid "Some descripton"
+msgstr "En beskrivning"
+
+#: dialogs/rc.cpp:28
+msgid "Confirm Manual Enter"
+msgstr ""
+
+#: dialogs/rc.cpp:29
+msgid "The following changes have been made to the transaction data:"
+msgstr ""
+
+#: dialogs/rc.cpp:30
+msgid "Please choose what you wish to do with the above changes"
+msgstr ""
+
+#: dialogs/rc.cpp:31
+msgid ""
+"Discard the changes and enter the original transaction into the register."
+msgstr ""
+
+#: dialogs/rc.cpp:32
+msgid "Enter these new values this one time, for this occurence only."
+msgstr ""
+
+#: dialogs/rc.cpp:33
+msgid "Set all further occurences in this schedule to be these values."
+msgstr ""
+
+#: dialogs/rc.cpp:36
+msgid "CSV Dialog"
+msgstr ""
+
+#: dialogs/rc.cpp:37
+msgid ""
+"CSV Dialog. Choose a file and then click on Run. You can view your "
+"progress at\n"
+"the bottom of the screen.\n"
+"\n"
+"You can cancel the process at any time by clicking on the Cancel button."
+msgstr ""
+
+#: dialogs/rc.cpp:38
+msgid "Choose the csv file:"
+msgstr ""
+
+#: dialogs/rc.cpp:39
+#, fuzzy
+msgid "Browse"
+msgstr "&Bläddra"
+
+#: dialogs/rc.cpp:40
+msgid "Between These Dates"
+msgstr ""
+
+#: dialogs/rc.cpp:41 dialogs/rc.cpp:196
+msgid "Start on:"
+msgstr ""
+
+#: dialogs/rc.cpp:42 dialogs/rc.cpp:195
+msgid "End on:"
+msgstr ""
+
+#: dialogs/rc.cpp:43
+msgid "Run"
+msgstr ""
+
+#: dialogs/rc.cpp:44
+msgid "Progress Info"
+msgstr ""
+
+#: dialogs/rc.cpp:45
+msgid "Processing Account:"
+msgstr ""
+
+#: dialogs/rc.cpp:47
+msgid "Processing Transaction:"
+msgstr ""
+
+#: dialogs/rc.cpp:48
+msgid "0 of 0"
+msgstr ""
+
+#: dialogs/rc.cpp:50
+msgid "Exchange Rate/Price Editor"
+msgstr "Växlingskursredigerare"
+
+#: dialogs/rc.cpp:55
+msgid "Convert from"
+msgstr "Konvertera från"
+
+#: dialogs/rc.cpp:58
+msgid "Convert to"
+msgstr ""
+
+#: dialogs/rc.cpp:61
+#, fuzzy
+msgid "To amount"
+msgstr "Till belopp"
+
+#: dialogs/rc.cpp:62
+msgid "Exchange rate / Price"
+msgstr "Växlingskurs / kurs"
+
+#: dialogs/rc.cpp:64
+msgid ""
+"xx\n"
+"xx"
+msgstr ""
+"xx\n"
+"xx"
+
+#: dialogs/rc.cpp:68
+msgid "Currencies"
+msgstr "Valutor"
+
+#: dialogs/rc.cpp:72
+msgid "real ID"
+msgstr "riktigt ID"
+
+#: dialogs/rc.cpp:73 dialogs/rc.cpp:722
+msgid "ID"
+msgstr "ID"
+
+#: dialogs/rc.cpp:74
+msgid "X"
+msgstr "X"
+
+#: dialogs/rc.cpp:76 dialogs/rc.cpp:459
+msgid "Online Source"
+msgstr "\"Online\"-källa"
+
+#: dialogs/rc.cpp:78 dialogs/rc.cpp:278 dialogs/rc.cpp:312 dialogs/rc.cpp:684
+msgid "F1"
+msgstr "F1"
+
+#: dialogs/rc.cpp:80
+msgid "If this button is not activated, select the base currency first."
+msgstr ""
+
+#: dialogs/rc.cpp:81
+msgid ""
+"Press this button to close the dialog. If the button is not activated, "
+"select your base currency."
+msgstr ""
+
+#: dialogs/rc.cpp:82
+msgid "Edit Equity"
+msgstr ""
+
+#: dialogs/rc.cpp:86 dialogs/rc.cpp:410
+msgid "Smallest fraction:"
+msgstr ""
+
+#: dialogs/rc.cpp:87 dialogs/rc.cpp:408 dialogs/rc.cpp:440
+msgid "1 /"
+msgstr "1 /"
+
+#: dialogs/rc.cpp:88 dialogs/rc.cpp:405
+msgid "Investment Type:"
+msgstr ""
+
+#: dialogs/rc.cpp:89 dialogs/rc.cpp:404
+msgid "Equity Name:"
+msgstr ""
+
+#: dialogs/rc.cpp:90 dialogs/rc.cpp:409
+msgid "Market Symbol:"
+msgstr ""
+
+#: dialogs/rc.cpp:91
+msgid "Price History"
+msgstr ""
+
+#: dialogs/rc.cpp:97
+#, fuzzy
+msgid "Edit Scheduled transaction"
+msgstr "Registrera schemalagd transaktion"
+
+#: dialogs/rc.cpp:98
+msgid "Schedule name:"
+msgstr "Namn på schema:"
+
+#: dialogs/rc.cpp:99
+msgid "Frequency:"
+msgstr "Betalningsfrekvens:"
+
+#: dialogs/rc.cpp:100
+msgid "Number of selected periods between entries"
+msgstr ""
+
+#: dialogs/rc.cpp:101
+msgid "Payment information"
+msgstr "Betalningsinformation"
+
+#: dialogs/rc.cpp:105 dialogs/rc.cpp:160 dialogs/rc.cpp:247 dialogs/rc.cpp:752
+#: widgets/register.cpp:569
+msgid "C"
+msgstr ""
+
+#: dialogs/rc.cpp:113
+msgid "Do nothing"
+msgstr "Gör ingenting"
+
+#: dialogs/rc.cpp:116
+msgid "If this schedule occurs on the weekend:"
+msgstr "Om denna betalning infaller på ett veckoslut:"
+
+#: dialogs/rc.cpp:117
+msgid "The amount is an estimate because it varies for each payment"
+msgstr ""
+"Beloppet är en uppskattning då det varierar mellan olika betalningstillfällen"
+
+#: dialogs/rc.cpp:118
+msgid "Enter this schedule into the register automatically when it is due"
+msgstr "Registrera denna betalning automatiskt på förfallodagen"
+
+#: dialogs/rc.cpp:119
+msgid "This schedule will end at some time"
+msgstr "Antalet betalningar är begränsat"
+
+#: dialogs/rc.cpp:120
+msgid "Number of transactions remaining:"
+msgstr "Antal kvarvarande betalningar:"
+
+#: dialogs/rc.cpp:121
+msgid "Date of final transaction:"
+msgstr "Datum för sista betalning:"
+
+#: dialogs/rc.cpp:125
+msgid "Reconciliation Wizard"
+msgstr ""
+
+#: dialogs/rc.cpp:127
+msgid ""
+"Reconciling your account assures, that your recordings match those of your "
+"institution and that there are no mistakes on either side. You should "
+"reconcile your account whenever you receive a statement from your "
+"institution.\n"
+"\n"
+"All relevant information necessary for this process is usually printed on "
+"your statement.\n"
+"\n"
+"On the next page you will verify, that the starting and ending balance are "
+"matching those on your statement. If not, please modify the figures."
+msgstr ""
+
+#: dialogs/rc.cpp:129
+msgid ""
+"KMyMoney calculates your loan payments automatically. The amounts can "
+"deviate from those calculated by the creditor. Therefore, you possibly have "
+"to adjust amortization, interest and other costs according to your "
+"statement.\n"
+"\n"
+"Please enter the following information found on your statement:"
+msgstr ""
+
+#: dialogs/rc.cpp:130
+msgid "Ending date of statement"
+msgstr "Slutdatum på utdraget"
+
+#: dialogs/rc.cpp:131
+msgid "Starting date of statement"
+msgstr "Startdatum på utdraget"
+
+#: dialogs/rc.cpp:132
+msgid "Verify payments"
+msgstr "Kontrollera betalningar"
+
+#: dialogs/rc.cpp:133 dialogs/rc.cpp:148 dialogs/rc.cpp:476 dialogs/rc.cpp:477
+#: dialogs/rc.cpp:508 dialogs/rc.cpp:513 dialogs/rc.cpp:518 dialogs/rc.cpp:532
+#: dialogs/rc.cpp:539 dialogs/rc.cpp:540 dialogs/rc.cpp:541 dialogs/rc.cpp:542
+#: dialogs/rc.cpp:543 dialogs/rc.cpp:552 dialogs/rc.cpp:553 dialogs/rc.cpp:554
+#: dialogs/rc.cpp:555 dialogs/rc.cpp:556 dialogs/rc.cpp:565 dialogs/rc.cpp:566
+#: dialogs/rc.cpp:567 dialogs/rc.cpp:568 dialogs/rc.cpp:569 dialogs/rc.cpp:578
+#: dialogs/rc.cpp:579 dialogs/rc.cpp:580 dialogs/rc.cpp:581 dialogs/rc.cpp:582
+#: dialogs/rc.cpp:591 dialogs/rc.cpp:592 dialogs/rc.cpp:593 dialogs/rc.cpp:594
+#: dialogs/rc.cpp:595 dialogs/rc.cpp:603 dialogs/rc.cpp:604 dialogs/rc.cpp:605
+#: dialogs/rc.cpp:606 dialogs/rc.cpp:607 dialogs/rc.cpp:618 dialogs/rc.cpp:619
+#: dialogs/rc.cpp:621 dialogs/rc.cpp:636 dialogs/rc.cpp:637 dialogs/rc.cpp:638
+#: dialogs/rc.cpp:639 dialogs/rc.cpp:640 dialogs/rc.cpp:641 dialogs/rc.cpp:651
+#: dialogs/rc.cpp:652 dialogs/rc.cpp:654 dialogs/rc.cpp:657 dialogs/rc.cpp:658
+#: dialogs/rc.cpp:659 dialogs/rc.cpp:664 dialogs/rc.cpp:665 dialogs/rc.cpp:668
+#: dialogs/rc.cpp:670 dialogs/rc.cpp:672 dialogs/rc.cpp:674 dialogs/rc.cpp:676
+#: dialogs/rc.cpp:678 dialogs/rc.cpp:681 dialogs/rc.cpp:823 widgets/rc.cpp:167
+msgid "1"
+msgstr "1"
+
+#: dialogs/rc.cpp:136
+msgid ""
+"If your statement shows different amounts, please cancel this dialog and "
+"correct the false transactions or correct the values in this dialog. In the "
+"later case, KMyMoney will create an adjustment transaction and add it to the "
+"ledger."
+msgstr ""
+"Om ditt utdrag visar andra belopp så skall du avbryta denna dialogen och "
+"korrigera \n"
+"det felaktiga transaktionerna eller justera beloppen i denna dialogen. Ifall "
+"du \n"
+"väljer det senare så kommer KMyMoney att skapa en justeringstransaktion och "
+"lägga \n"
+"till den i liggaren."
+
+#: dialogs/rc.cpp:138
+msgid ""
+"In order to create the adjustment transaction, KMyMoney requires an account "
+"and possibly an interest category to assign the differences to. Please "
+"select an account and - if necessary - a category."
+msgstr ""
+
+#: dialogs/rc.cpp:140
+msgid "Interest-Category"
+msgstr "Räntekategori"
+
+#: dialogs/rc.cpp:141
+msgid "Restarting postponed reconciliation"
+msgstr ""
+
+#: dialogs/rc.cpp:142
+msgid ""
+"You have previously postponed the reconciliation of this account. If you "
+"have entered charges or interests the last time you started reconciling this "
+"account you can modify these in the ledger later on.\n"
+"\n"
+"It is important, that you continue with the same statement you used when you "
+"postponed the reconciliation.\n"
+"\n"
+"All information you have entered into this wizard will be shown and all "
+"transactions that you already cleared are marked with a 'C'."
+msgstr ""
+
+#: dialogs/rc.cpp:143
+msgid "Statement Information"
+msgstr ""
+
+#: dialogs/rc.cpp:144 dialogs/rc.cpp:315 dialogs/rc.cpp:317 dialogs/rc.cpp:320
+#: dialogs/rc.cpp:321 dialogs/rc.cpp:329 dialogs/rc.cpp:330 dialogs/rc.cpp:333
+#: dialogs/rc.cpp:334 dialogs/rc.cpp:335 dialogs/rc.cpp:336 dialogs/rc.cpp:366
+msgid "x"
+msgstr ""
+
+#: dialogs/rc.cpp:145
+msgid "Statement date:"
+msgstr ""
+
+#: dialogs/rc.cpp:146
+msgid "Starting balance of this statement:"
+msgstr ""
+
+#: dialogs/rc.cpp:147
+msgid "Ending balance of this statement:"
+msgstr ""
+
+#: dialogs/rc.cpp:149
+msgid "Interest / Charges"
+msgstr "Räntor / Avgifter"
+
+#: dialogs/rc.cpp:150
+msgid ""
+"If necessary, enter information about interest or charges here. KMyMoney "
+"will create transactions and clear them directly for you."
+msgstr ""
+
+#: dialogs/rc.cpp:153
+msgid "Charges"
+msgstr "Avgifter"
+
+#: dialogs/rc.cpp:154
+msgid "Enter Schedule"
+msgstr "Registrera schema"
+
+#: dialogs/rc.cpp:155
+msgid "Schedule Details"
+msgstr "Schemainformation"
+
+#: dialogs/rc.cpp:156 dialogs/rc.cpp:348 dialogs/rc.cpp:389 widgets/rc.cpp:164
+msgid "Name:"
+msgstr ""
+
+#: dialogs/rc.cpp:157 dialogs/rc.cpp:351 widgets/rc.cpp:165
+msgid "Type:"
+msgstr ""
+
+#: dialogs/rc.cpp:168
+#, fuzzy
+msgid "Enter"
+msgstr "Ränta"
+
+#: dialogs/rc.cpp:169
+msgid ""
+"Enter the transaction and advance the next due date of this schedule to the "
+"next payment date."
+msgstr ""
+
+#: dialogs/rc.cpp:171
+msgid ""
+"Do not enter the transaction but advance the next due date of this schedule "
+"to the next payment date."
+msgstr ""
+
+#: dialogs/rc.cpp:172
+#, fuzzy
+msgid "Ignore"
+msgstr "Ignorera"
+
+#: dialogs/rc.cpp:173
+msgid ""
+"Do not enter or skip payments for this schedule but continue with the next "
+"schedule."
+msgstr ""
+
+#: dialogs/rc.cpp:175
+msgid "Cancel processing of schedule entry."
+msgstr ""
+
+#: dialogs/rc.cpp:176
+msgid "Update Stock and Currency Prices"
+msgstr ""
+
+#: dialogs/rc.cpp:177
+msgid "List of known Equities, and the date they were last updated on."
+msgstr ""
+
+#: dialogs/rc.cpp:179
+#, fuzzy
+msgid "Update All"
+msgstr "Uppdat."
+
+#: dialogs/rc.cpp:180
+msgid "Update Selected"
+msgstr ""
+
+#: dialogs/rc.cpp:181
+msgid "Status:"
+msgstr ""
+
+#: dialogs/rc.cpp:184
+msgid "QIF Export"
+msgstr ""
+
+#: dialogs/rc.cpp:185
+msgid ""
+"From this dialog you are able to export transactions to a quicken compatible "
+"file, (known as a QIF file, because of the extension). Please enter the "
+"path to the QIF file or select it by clicking on the Browse button.\n"
+"\n"
+"You can choose the file's path, the account and the format of the QIF file "
+"(profile). Choose Account to export all the transactions between the "
+"specified dates or just categories. You can also limit the transactions "
+"that are exported by start and ending date. Once you have pressed the "
+"Export button a message box will appear when the export has completed "
+"detailing how many transactions, categories and payees were exported."
+msgstr ""
+
+#: dialogs/rc.cpp:186
+msgid "File to export to:"
+msgstr ""
+
+#: dialogs/rc.cpp:188
+msgid "Account to export"
+msgstr ""
+
+#: dialogs/rc.cpp:189 dialogs/rc.cpp:297
+msgid "QIF Profile"
+msgstr "QIF-profil"
+
+#: dialogs/rc.cpp:190 dialogs/rc.cpp:298 dialogs/rc.cpp:362
+#: widgets/kmymoneypriceview.cpp:145
+msgid "New..."
+msgstr "Nytt..."
+
+#: dialogs/rc.cpp:191
+msgid "Contents to Export"
+msgstr ""
+
+#: dialogs/rc.cpp:194
+msgid "Date Range"
+msgstr ""
+
+#: dialogs/rc.cpp:199
+msgid "Search transactions"
+msgstr ""
+
+#: dialogs/rc.cpp:200
+msgid "Criteria"
+msgstr ""
+
+#: dialogs/rc.cpp:201
+msgid "Define your search criteria"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:169 dialogs/rc.cpp:202
+msgid "Text"
+msgstr "Text"
+
+#: dialogs/rc.cpp:203
+#, fuzzy
+msgid "Contains"
+msgstr "Lån"
+
+#: dialogs/rc.cpp:204
+#, fuzzy
+msgid "Does not contain"
+msgstr "Gör ingenting"
+
+#: dialogs/rc.cpp:205
+msgid "Treat text as regular expression"
+msgstr ""
+
+#: dialogs/rc.cpp:206
+msgid "Case sensitive"
+msgstr ""
+
+#: dialogs/rc.cpp:209
+msgid "Range"
+msgstr ""
+
+#: dialogs/rc.cpp:210
+msgid ""
+"_: To (Date)\n"
+"To"
+msgstr ""
+"_: Till (datum)\n"
+"Till"
+
+#: dialogs/rc.cpp:211
+msgid ""
+"_: From (Date)\n"
+"From"
+msgstr ""
+
+#: dialogs/rc.cpp:213
+msgid "Search this amount"
+msgstr ""
+
+#: dialogs/rc.cpp:214
+msgid "Search amount in the range"
+msgstr ""
+
+#: dialogs/rc.cpp:215
+msgid ""
+"_: to (amount)\n"
+"to"
+msgstr ""
+"_: till (belopp)\n"
+"till"
+
+#: dialogs/rc.cpp:216
+msgid ""
+"_: from (amount)\n"
+"from"
+msgstr ""
+"_: från (belopp)\n"
+"från"
+
+#: dialogs/rc.cpp:220
+msgid "Select transactions without payees"
+msgstr ""
+
+#: dialogs/rc.cpp:221
+msgid "Select all"
+msgstr ""
+
+#: dialogs/rc.cpp:222
+msgid "Select none"
+msgstr ""
+
+#: dialogs/rc.cpp:224
+msgid "Validity"
+msgstr ""
+
+#: dialogs/rc.cpp:226
+msgid "All states"
+msgstr ""
+
+#: dialogs/rc.cpp:230
+msgid "All types"
+msgstr ""
+
+#: dialogs/rc.cpp:234
+msgid "Any transaction"
+msgstr ""
+
+#: dialogs/rc.cpp:235
+msgid "Valid transaction"
+msgstr ""
+
+#: dialogs/rc.cpp:236
+msgid "Invalid transaction"
+msgstr ""
+
+#: dialogs/rc.cpp:237
+msgid "State"
+msgstr ""
+
+#: dialogs/rc.cpp:238
+msgid "Search this number"
+msgstr ""
+
+#: dialogs/rc.cpp:239
+msgid "Search number in range"
+msgstr ""
+
+#: dialogs/rc.cpp:240
+msgid ""
+"_: to (number)\n"
+"to"
+msgstr ""
+
+#: dialogs/rc.cpp:241
+msgid ""
+"_: from (number)\n"
+"from"
+msgstr ""
+
+#: dialogs/rc.cpp:242
+msgid "text"
+msgstr ""
+
+#: dialogs/rc.cpp:243
+msgid "warning"
+msgstr ""
+
+#: dialogs/rc.cpp:244
+msgid "Result"
+msgstr "Resultat"
+
+#: dialogs/rc.cpp:254
+msgid "F"
+msgstr ""
+
+#: dialogs/rc.cpp:257 dialogs/rc.cpp:844
+msgid "&Reset"
+msgstr "Återställ"
+
+#: dialogs/rc.cpp:258
+#, fuzzy
+msgid "&Find"
+msgstr "Slutför"
+
+#: dialogs/rc.cpp:259
+msgid "GnuCash Import Options"
+msgstr ""
+
+#: dialogs/rc.cpp:260
+msgid "Use 'Help' for more information on these options"
+msgstr ""
+
+#: dialogs/rc.cpp:261
+msgid "Investment Handling"
+msgstr ""
+
+#: dialogs/rc.cpp:262
+msgid "One investment account for each stock"
+msgstr ""
+
+#: dialogs/rc.cpp:263
+msgid "One investment account for all stocks"
+msgstr ""
+
+#: dialogs/rc.cpp:264
+msgid "Prompt for an investment account for each stock"
+msgstr ""
+
+#: dialogs/rc.cpp:265
+msgid "Online price quotes"
+msgstr "Onlineuppdatering av kurser"
+
+#: dialogs/rc.cpp:266
+msgid "Use Finance::Quote for share price quotes"
+msgstr ""
+
+#: dialogs/rc.cpp:267
+msgid "Scheduled Transactions"
+msgstr ""
+
+#: dialogs/rc.cpp:268
+msgid "Drop suspect scheduled transactions"
+msgstr ""
+
+#: dialogs/rc.cpp:269
+msgid "Decoding option"
+msgstr "Avkodningsinställning"
+
+#: dialogs/rc.cpp:270
+msgid "Decode using"
+msgstr ""
+
+#: dialogs/rc.cpp:271
+#, fuzzy
+msgid "Transaction Notes option"
+msgstr "Transaktionsdetaljer"
+
+#: dialogs/rc.cpp:272
+#, fuzzy
+msgid "Use transaction notes on non-split transactions"
+msgstr ""
+"_: Split-transaktion (kategoribyte)\n"
+"Split-transaktion"
+
+#: dialogs/rc.cpp:273
+msgid "Debug Options"
+msgstr ""
+
+#: dialogs/rc.cpp:274
+msgid "General debug data"
+msgstr ""
+
+#: dialogs/rc.cpp:275
+msgid "Display XML data"
+msgstr ""
+
+#: dialogs/rc.cpp:276
+msgid "Anonymize data"
+msgstr ""
+
+#: dialogs/rc.cpp:281
+msgid "Online Quotes - Select price source"
+msgstr ""
+
+#: dialogs/rc.cpp:284
+msgid ""
+"This price source is not known to KMyMoney. Please select an option below."
+msgstr ""
+
+#: dialogs/rc.cpp:285
+msgid "Do not perform online quotes for this investment"
+msgstr ""
+
+#: dialogs/rc.cpp:286
+msgid "Select a known KMyMoney source from the list below"
+msgstr ""
+
+#: dialogs/rc.cpp:287
+msgid ""
+"Use the following name for the price source.\n"
+"(Click Help for further information.)"
+msgstr ""
+
+#: dialogs/rc.cpp:288
+msgid "Always use this selection for this price source."
+msgstr ""
+
+#: dialogs/rc.cpp:289
+msgid "QIF Import"
+msgstr "QIF-import"
+
+#: dialogs/rc.cpp:290
+msgid ""
+"From this dialog you are able to import transactions from a Quicken<b>&trade;"
+"</b> compatible file, (known as a QIF file, because of the extension).<p>\n"
+"\n"
+"Please enter the path to the QIF file or select it by clicking on the Browse "
+"button. Once you have the file's path press the Import button and KMyMoney "
+"will import all the transactions, categories and payees it finds."
+msgstr ""
+
+#: dialogs/rc.cpp:291
+msgid "QIF File to Import:"
+msgstr "QIF-fil att importera:"
+
+#: dialogs/rc.cpp:292
+msgid "Import options"
+msgstr ""
+
+#: dialogs/rc.cpp:293
+#, fuzzy
+msgid "Bank statement"
+msgstr "en betalning"
+
+#: dialogs/rc.cpp:294
+msgid "Other application"
+msgstr ""
+
+#: dialogs/rc.cpp:295
+msgid ""
+"Select <b>Bank statement</b> turns on automatic category matching which is "
+"turned off in case of <b>Historic data</b>. Use the latter if you import "
+"files from other Personal Finance Management software."
+msgstr ""
+
+#: dialogs/rc.cpp:296
+msgid "Source of QIF"
+msgstr ""
+
+#: dialogs/rc.cpp:302
+msgid "Verify Import"
+msgstr ""
+
+#: dialogs/rc.cpp:304
+#, fuzzy
+msgid "Ok"
+msgstr "&OK"
+
+#: dialogs/rc.cpp:306
+msgid "MyDialog"
+msgstr ""
+
+#: dialogs/rc.cpp:310
+msgid "File Information"
+msgstr "Filinformation"
+
+#: dialogs/rc.cpp:316
+msgid "Last modified on"
+msgstr ""
+
+#: dialogs/rc.cpp:319
+msgid "Base currency"
+msgstr "Basvaluta"
+
+#: dialogs/rc.cpp:322
+msgid "Created on"
+msgstr "Skapad"
+
+#: dialogs/rc.cpp:325
+msgid "Accounts/Categories"
+msgstr "Konton/Kategorier"
+
+#: dialogs/rc.cpp:328
+msgid "Closed"
+msgstr "Stängd"
+
+#: dialogs/rc.cpp:331
+msgid "Prices"
+msgstr "Kurser"
+
+#: dialogs/rc.cpp:337
+#, fuzzy
+msgid "Splits"
+msgstr "Sälj andelar"
+
+#: dialogs/rc.cpp:338
+msgid "Price Editor"
+msgstr "Kursredigerare"
+
+#: dialogs/rc.cpp:339
+msgid "Show all stored prices"
+msgstr "Visa alla lagrade kurser"
+
+#: dialogs/rc.cpp:343
+#, fuzzy
+msgid "Delete Range..."
+msgstr "Ta bort ..."
+
+#: dialogs/rc.cpp:346
+msgid "New Account Dialog"
+msgstr ""
+
+#: dialogs/rc.cpp:349
+msgid "Opening information"
+msgstr "Öppningsinformation"
+
+#: dialogs/rc.cpp:350
+msgid "Currency:"
+msgstr "Valuta:"
+
+#: dialogs/rc.cpp:352 dialogs/rc.cpp:793
+msgid "Date:"
+msgstr "Datum:"
+
+#: dialogs/rc.cpp:353
+msgid "Balance:"
+msgstr "Balans:"
+
+#: dialogs/rc.cpp:355
+msgid "Last check number:"
+msgstr ""
+
+#: dialogs/rc.cpp:356
+msgid "Notes:"
+msgstr ""
+
+#: dialogs/rc.cpp:357
+msgid "No auto-VAT-assignment"
+msgstr ""
+
+#: dialogs/rc.cpp:358 dialogs/rc.cpp:441
+msgid "Price entry"
+msgstr "Kursredigerare"
+
+#: dialogs/rc.cpp:359
+msgid "Preferred Account"
+msgstr ""
+
+#: dialogs/rc.cpp:363
+msgid "Number:"
+msgstr "Nummer:"
+
+#: dialogs/rc.cpp:364 dialogs/rc.cpp:395
+msgid "BIC"
+msgstr ""
+
+#: dialogs/rc.cpp:367
+msgid "Hierarchy"
+msgstr ""
+
+#: dialogs/rc.cpp:368
+msgid "Subaccount"
+msgstr "Underkonto"
+
+#: dialogs/rc.cpp:369
+msgid "Limits"
+msgstr "Gränser"
+
+#: dialogs/rc.cpp:370
+msgid ""
+"This page allows to setup certain limits. KMyMoney will warn you when the "
+"account balance reaches a limit."
+msgstr ""
+
+#: dialogs/rc.cpp:372
+msgid "Absolute limit"
+msgstr "Absolut gräns"
+
+#: dialogs/rc.cpp:373
+msgid "Maximum credit limit"
+msgstr ""
+
+#: dialogs/rc.cpp:374
+msgid "Minimum balance"
+msgstr ""
+
+#: dialogs/rc.cpp:375
+msgid "Early warning"
+msgstr ""
+
+#: dialogs/rc.cpp:377
+msgid "VAT details"
+msgstr "Momsdetaljer"
+
+#: dialogs/rc.cpp:378
+msgid "VAT category"
+msgstr "Momskategori"
+
+#: dialogs/rc.cpp:379
+msgid "VAT percentage"
+msgstr "Momsprocent"
+
+#: dialogs/rc.cpp:380
+msgid "Enable auto VAT assignment"
+msgstr "Aktivera automatisk momstilldelning"
+
+#: dialogs/rc.cpp:381
+msgid "Amount entered"
+msgstr "Angivet belopp"
+
+#: dialogs/rc.cpp:382
+msgid "Gross amount"
+msgstr "Brutto"
+
+#: dialogs/rc.cpp:383
+msgid "Net amount"
+msgstr "Netto"
+
+#: dialogs/rc.cpp:384
+msgid "Include on Tax Reports"
+msgstr "Ta med på skatterapport"
+
+#: dialogs/rc.cpp:387
+msgid "New Institution Dialog"
+msgstr "Ny institution"
+
+#: dialogs/rc.cpp:388
+msgid "Institution Details"
+msgstr ""
+
+#: dialogs/rc.cpp:390
+msgid "City:"
+msgstr "Ort:"
+
+#: dialogs/rc.cpp:394
+msgid "Routing Number:"
+msgstr ""
+
+#: dialogs/rc.cpp:398
+msgid "New Budget"
+msgstr "Ny budget"
+
+#: dialogs/rc.cpp:403
+msgid "New Equity"
+msgstr ""
+
+#: dialogs/rc.cpp:406 dialogs/rc.cpp:407
+msgid "Trading Symbol of the stock or mutual fund, not required."
+msgstr ""
+
+#: dialogs/rc.cpp:414 dialogs/rc.cpp:415
+msgid "Name of the company, or mutual fund."
+msgstr ""
+
+#: dialogs/rc.cpp:418
+msgid "New File Dialog"
+msgstr "Ny fil"
+
+#: dialogs/rc.cpp:419
+msgid ""
+"Use this dialog to enter personal information about yourself.\n"
+"\n"
+"All information is optional and is provided to personalize\n"
+"your KMyMoney file."
+msgstr ""
+
+#: dialogs/rc.cpp:430
+msgid "New Investment wizard"
+msgstr "Ny investerings-\"wizard\""
+
+#: dialogs/rc.cpp:431
+msgid "Investment Type"
+msgstr "Investeringstyp"
+
+#: dialogs/rc.cpp:432
+#, fuzzy
+msgid "This wizard allows you to create a new investment."
+msgstr "Välj ett föräldrakonto."
+
+#: dialogs/rc.cpp:433
+msgid ""
+"The first step in this process requires to select the type of investment. "
+"The following steps collect more details about the investment from you."
+msgstr ""
+
+#: dialogs/rc.cpp:434
+msgid "Type of investment"
+msgstr "Typ av investering"
+
+#: dialogs/rc.cpp:438
+msgid "Investment details"
+msgstr ""
+
+#: dialogs/rc.cpp:439
+msgid ""
+"Enter the details below and click <b>Next</b> to continue entering the "
+"online update details."
+msgstr ""
+
+#: dialogs/rc.cpp:442 dialogs/rc.cpp:728
+msgid "Fraction"
+msgstr ""
+
+#: dialogs/rc.cpp:443
+msgid "Trading Currency"
+msgstr ""
+
+#: dialogs/rc.cpp:444
+msgid "Full name"
+msgstr ""
+
+#: dialogs/rc.cpp:445
+msgid "AMEX"
+msgstr "AMEX"
+
+#: dialogs/rc.cpp:446
+msgid "EUREX"
+msgstr "EUREX"
+
+#: dialogs/rc.cpp:447
+msgid "FUND"
+msgstr "FOND"
+
+#: dialogs/rc.cpp:448
+msgid "NASDAQ"
+msgstr "NASDAQ"
+
+#: dialogs/rc.cpp:449
+msgid "NYSE"
+msgstr "NYSE"
+
+#: dialogs/rc.cpp:450
+msgid "XETRA"
+msgstr "XETRA"
+
+#: dialogs/rc.cpp:451
+msgid "Trading symbol"
+msgstr ""
+
+#: dialogs/rc.cpp:452
+msgid "Identification"
+msgstr ""
+
+#: dialogs/rc.cpp:453
+msgid "Enter the ticker symbol (e.g. RHAT)."
+msgstr ""
+
+#: dialogs/rc.cpp:454
+msgid "Enter the CUSIP/ISIN/WKN identification number here"
+msgstr ""
+
+#: dialogs/rc.cpp:455
+msgid "Trading market"
+msgstr ""
+
+#: dialogs/rc.cpp:456
+msgid "Online Update"
+msgstr ""
+
+#: dialogs/rc.cpp:457
+msgid ""
+"Select an online source and click <b>Finish</b> to store the investment "
+"data. If you don't want to use online updates, just leave the data as is."
+msgstr ""
+
+#: dialogs/rc.cpp:458
+msgid "Use Finance::Quote"
+msgstr ""
+
+#: dialogs/rc.cpp:460
+msgid "Factor"
+msgstr "Faktor"
+
+#: dialogs/rc.cpp:461
+msgid "New Loan Wizard"
+msgstr ""
+
+#: dialogs/rc.cpp:462
+msgid "New Loan Account Wizard"
+msgstr ""
+
+#: dialogs/rc.cpp:463
+msgid ""
+"\n"
+"Welcome to the New Loan Account Wizard which will guide you through the "
+"creation of a new loan e.g. for your home, your car or any other loan that "
+"you pay or gain interest for.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+
+#: dialogs/rc.cpp:464
+msgid "Edit Loan Account Wizard"
+msgstr ""
+
+#: dialogs/rc.cpp:465
+msgid ""
+"\n"
+"Welcome to the Edit Loan Account Wizard. Please use this wizard to modify "
+"information about your loan account.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+
+#: dialogs/rc.cpp:467
+msgid ""
+"\n"
+"In the first step, KMyMoney will ask you some general information about the "
+"loan account to be created."
+msgstr ""
+
+#: dialogs/rc.cpp:468 dialogs/rc.cpp:522 dialogs/rc.cpp:610
+msgid "1. General Information"
+msgstr ""
+
+#: dialogs/rc.cpp:469
+msgid ""
+"\n"
+"2. Calculate Loan\n"
+"\n"
+"3. Payments"
+msgstr ""
+
+#: dialogs/rc.cpp:470
+msgid "Edit selection"
+msgstr ""
+
+#: dialogs/rc.cpp:471
+msgid ""
+"\n"
+"Please select, which data of the loan you want to modify."
+msgstr ""
+
+#: dialogs/rc.cpp:472
+msgid "Modify the interest rate"
+msgstr ""
+
+#: dialogs/rc.cpp:473
+msgid "Modify additional fees"
+msgstr ""
+
+#: dialogs/rc.cpp:474
+msgid "Modify other loan information"
+msgstr ""
+
+#: dialogs/rc.cpp:475
+msgid "Effective date"
+msgstr "Effektivt datum"
+
+#: dialogs/rc.cpp:478
+msgid "When should the changes become active?"
+msgstr ""
+
+#: dialogs/rc.cpp:479
+msgid "Lending or borrowing money"
+msgstr "Låna/låna ut pengar"
+
+#: dialogs/rc.cpp:480
+msgid ""
+"\n"
+"Do you borrow or lend money?"
+msgstr ""
+"\n"
+"Lånar du eller lånar du ut pengar?"
+
+#: dialogs/rc.cpp:483
+msgid "Name of the loan"
+msgstr "Namn på lånet"
+
+#: dialogs/rc.cpp:484
+msgid ""
+"\n"
+"How do you want to call this loan? Examples for names are 'car loan', "
+"'school loan', 'home owner loan'."
+msgstr ""
+"\n"
+"Vad vill du kalla detta lånet? Exempel på namn är 'billån', \n"
+"'studielån' eller 'huslån'."
+
+#: dialogs/rc.cpp:486
+msgid "TextLabel6"
+msgstr "TextLabel6"
+
+#: dialogs/rc.cpp:487
+msgid "TextLabel7"
+msgstr "TextLabel7"
+
+#: dialogs/rc.cpp:488
+msgid "Type of interest"
+msgstr "Typ av ränta"
+
+#: dialogs/rc.cpp:489
+msgid ""
+"\n"
+"Is the interest of this loan fixed over a period of time or is it adapted "
+"from time to time? If the interest rate changes during the amortization "
+"phase of the loan you should choose the option 'variable interest rate'."
+msgstr ""
+
+#: dialogs/rc.cpp:490
+msgid "Fixed interest rate"
+msgstr "Fast ränta"
+
+#: dialogs/rc.cpp:491
+msgid "Variable interest rate"
+msgstr "Rörlig ränta"
+
+#: dialogs/rc.cpp:492
+msgid "Payments?"
+msgstr "Betalningar?"
+
+#: dialogs/rc.cpp:493
+msgid ""
+"\n"
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?"
+msgstr ""
+
+#: dialogs/rc.cpp:494
+msgid "No, no payments were made yet."
+msgstr ""
+
+#: dialogs/rc.cpp:495
+msgid "Yes, payments were made."
+msgstr ""
+
+#: dialogs/rc.cpp:496
+msgid ""
+"Note: Payments made to obtain the loan (e.g. Dissagio) are not considered as "
+"payments in this context."
+msgstr ""
+
+#: dialogs/rc.cpp:497
+msgid "Recording payments?"
+msgstr ""
+
+#: dialogs/rc.cpp:498
+msgid ""
+"\n"
+"Do you want to record all payments of this loan with KMyMoney?"
+msgstr ""
+
+#: dialogs/rc.cpp:499
+msgid "Yes, record all payments."
+msgstr ""
+
+#: dialogs/rc.cpp:500
+msgid "No, only record payments since the beginning of this year."
+msgstr ""
+
+#: dialogs/rc.cpp:501
+msgid "Date of next interest change"
+msgstr ""
+
+#: dialogs/rc.cpp:502
+msgid ""
+"\n"
+"Select the date when the interest rate for this loan will be modified and "
+"the frequency of the future changes."
+msgstr ""
+
+#: dialogs/rc.cpp:503
+msgid "Next interest change on"
+msgstr ""
+
+#: dialogs/rc.cpp:504
+msgid "Time until next change"
+msgstr ""
+
+#: dialogs/rc.cpp:506 dialogs/rc.cpp:571
+msgid ""
+"\n"
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+
+#: dialogs/rc.cpp:507
+msgid "Current amount"
+msgstr ""
+
+#: dialogs/rc.cpp:510
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the amount for principal and interest then enter "
+"it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+
+#: dialogs/rc.cpp:512 dialogs/rc.cpp:545
+msgid ""
+"\n"
+"Please enter the interest rate or leave the field empty to calculate it."
+msgstr ""
+
+#: dialogs/rc.cpp:514
+msgid "Current rate"
+msgstr "Aktuell ränta"
+
+#: dialogs/rc.cpp:516
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the interest rate then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+
+#: dialogs/rc.cpp:517
+msgid "Date of first payment"
+msgstr ""
+
+#: dialogs/rc.cpp:520
+msgid "Calculate Loan"
+msgstr "Beräkna lån"
+
+#: dialogs/rc.cpp:521
+msgid ""
+"\n"
+"You have successfully entered the general information about your loan. Next, "
+"KMyMoney needs some information about the calculation of the loan."
+msgstr ""
+
+#: dialogs/rc.cpp:523 dialogs/rc.cpp:611
+msgid ""
+"\n"
+"2. Calculate Loan"
+msgstr ""
+"\n"
+"2. Beräkna lånet"
+
+#: dialogs/rc.cpp:524 dialogs/rc.cpp:612
+msgid ""
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"3. Betalningar"
+
+#: dialogs/rc.cpp:526
+msgid ""
+"\n"
+"How often will there be payments made to this loan?"
+msgstr ""
+
+#: dialogs/rc.cpp:527
+msgid "Interest calculation"
+msgstr ""
+
+#: dialogs/rc.cpp:528
+msgid ""
+"\n"
+"When does the actual interest rate get calculated?"
+msgstr ""
+
+#: dialogs/rc.cpp:529
+msgid "When the payment is received."
+msgstr ""
+
+#: dialogs/rc.cpp:530
+msgid "When the payment is due."
+msgstr ""
+
+#: dialogs/rc.cpp:534 dialogs/rc.cpp:547 dialogs/rc.cpp:560 dialogs/rc.cpp:573
+#: dialogs/rc.cpp:586 dialogs/rc.cpp:598 dialogs/rc.cpp:679
+msgid "Loan amount:"
+msgstr ""
+
+#: dialogs/rc.cpp:535 dialogs/rc.cpp:548 dialogs/rc.cpp:561 dialogs/rc.cpp:574
+#: dialogs/rc.cpp:587 dialogs/rc.cpp:599 dialogs/rc.cpp:633 dialogs/rc.cpp:671
+msgid "Interest rate:"
+msgstr ""
+
+#: dialogs/rc.cpp:536 dialogs/rc.cpp:549 dialogs/rc.cpp:562 dialogs/rc.cpp:575
+#: dialogs/rc.cpp:588 dialogs/rc.cpp:600 dialogs/rc.cpp:669
+msgid "Term:"
+msgstr ""
+
+#: dialogs/rc.cpp:537 dialogs/rc.cpp:550 dialogs/rc.cpp:563 dialogs/rc.cpp:576
+#: dialogs/rc.cpp:589 dialogs/rc.cpp:601 dialogs/rc.cpp:622 dialogs/rc.cpp:630
+#: dialogs/rc.cpp:677
+msgid "Principal + Interest:"
+msgstr ""
+
+#: dialogs/rc.cpp:538 dialogs/rc.cpp:551 dialogs/rc.cpp:564 dialogs/rc.cpp:577
+#: dialogs/rc.cpp:583 dialogs/rc.cpp:585 dialogs/rc.cpp:590 dialogs/rc.cpp:602
+msgid "Final amortization payment"
+msgstr ""
+
+#: dialogs/rc.cpp:557
+msgid "Duration"
+msgstr ""
+
+#: dialogs/rc.cpp:558
+msgid ""
+"\n"
+"Please enter the term of this loan or leave the field empty to calculate it. "
+"The term is the time that is required to fully repay the loan. This time "
+"might be different from the time your loan contract is signed for."
+msgstr ""
+
+#: dialogs/rc.cpp:584
+msgid ""
+"\n"
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+
+#: dialogs/rc.cpp:596
+msgid "Calculation Overview"
+msgstr ""
+
+#: dialogs/rc.cpp:597
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown in the overview below. You can "
+"accept these values by selecting \"Next\" or change them by choosing \"Back"
+"\" to return to the input field for the information you want to change."
+msgstr ""
+
+#: dialogs/rc.cpp:609
+msgid ""
+"\n"
+"In the following steps, KMyMoney supports you in setting up categories and "
+"schedules for your loan payments."
+msgstr ""
+
+#: dialogs/rc.cpp:614
+msgid ""
+"\n"
+"Please select the category you want to assign the interest payments to or "
+"create a new category."
+msgstr ""
+
+#: dialogs/rc.cpp:615
+msgid "Additional Fees"
+msgstr ""
+
+#: dialogs/rc.cpp:616
+msgid ""
+"\n"
+"If your regular payment contains any additional fees, click on the button "
+"\"Additional fees\" to enter them."
+msgstr ""
+
+#: dialogs/rc.cpp:617
+msgid "= periodical payment:"
+msgstr ""
+
+#: dialogs/rc.cpp:623
+msgid ""
+"If no additional fees are included in your periodical payment or you have "
+"entered all such fees, then click on \"Next\"."
+msgstr ""
+
+#: dialogs/rc.cpp:625
+msgid ""
+"KMyMoney will create a schedule for this payment and reminds you whenever a "
+"payment must be made.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+
+#: dialogs/rc.cpp:626
+msgid "First payment due on:"
+msgstr ""
+
+#: dialogs/rc.cpp:627
+msgid "Make payment from/to:"
+msgstr ""
+
+#: dialogs/rc.cpp:629
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown below. If you want to accept these "
+"values use the \"Finish\" button to update your account, otherwise use the "
+"\"Back\" button to modify your settings."
+msgstr ""
+
+#: dialogs/rc.cpp:631
+msgid "Additional fees:"
+msgstr ""
+
+#: dialogs/rc.cpp:632
+msgid "Total payment:"
+msgstr ""
+
+#: dialogs/rc.cpp:634
+msgid "Valid from:"
+msgstr ""
+
+#: dialogs/rc.cpp:635
+msgid "Affected payments:"
+msgstr ""
+
+#: dialogs/rc.cpp:645
+msgid "Press this to create a new asset account"
+msgstr ""
+
+#: dialogs/rc.cpp:648
+msgid ""
+"\n"
+"This page summarizes the data you entered. If you need to modify anything, "
+"please use the \"Back\" button to go to respective page. Otherwise use the "
+"\"Finish\" button to create the account."
+msgstr ""
+
+#: dialogs/rc.cpp:650
+msgid "Payee:"
+msgstr "Betalningsmottagare:"
+
+#: dialogs/rc.cpp:653
+msgid "First payment:"
+msgstr "Första betalning:"
+
+#: dialogs/rc.cpp:655
+msgid "Amount is:"
+msgstr "Beloppet är:"
+
+#: dialogs/rc.cpp:656
+msgid "Loan calculation"
+msgstr "Låneberäkning"
+
+#: dialogs/rc.cpp:660
+msgid "Periodic Payment:"
+msgstr "Periodisk betalning:"
+
+#: dialogs/rc.cpp:661
+msgid "Additional Fees:"
+msgstr "Tilläggsavgifter:"
+
+#: dialogs/rc.cpp:662
+msgid "Interest category:"
+msgstr "Räntekategori:"
+
+#: dialogs/rc.cpp:663
+msgid "Payment from:"
+msgstr "Betalning från:"
+
+#: dialogs/rc.cpp:666
+msgid "Next due date:"
+msgstr "Nästa förfallodatum:"
+
+#: dialogs/rc.cpp:673
+msgid "Final Payment:"
+msgstr "Slutlig betalning:"
+
+#: dialogs/rc.cpp:675
+msgid "Interest is due:"
+msgstr "Räntan förfaller:"
+
+#: dialogs/rc.cpp:680
+msgid "Payment frequency:"
+msgstr "Betalningsfrekvens:"
+
+#: dialogs/rc.cpp:682
+msgid "Online Quote Configuration"
+msgstr ""
+
+#: dialogs/rc.cpp:687
+msgid "Perl Location:"
+msgstr ""
+
+#: dialogs/rc.cpp:688
+msgid "Script:"
+msgstr ""
+
+#: dialogs/rc.cpp:690
+msgid "Reassign payees"
+msgstr ""
+
+#: dialogs/rc.cpp:691
+msgid ""
+"The transactions associated with the selected payees need to be re-assigned "
+"to a different payee before the selected payees can be deleted. Please "
+"select a payee from the list below."
+msgstr ""
+
+#: dialogs/rc.cpp:692
+msgid "Available payees:"
+msgstr ""
+
+#: dialogs/rc.cpp:693
+msgid "Assign deleted names to the above selected payee's matching list"
+msgstr ""
+
+#: dialogs/rc.cpp:696
+msgid "PluginDlg"
+msgstr ""
+
+#: dialogs/rc.cpp:697
+msgid "PlugIn"
+msgstr ""
+
+#: dialogs/rc.cpp:698 widgets/transaction.cpp:1071
+#: widgets/transaction.cpp:1658
+msgid "Status"
+msgstr ""
+
+#: dialogs/rc.cpp:699
+msgid "Feature"
+msgstr ""
+
+#: dialogs/rc.cpp:703
+msgid "Reconciliation Dialog"
+msgstr ""
+
+#: dialogs/rc.cpp:704
+msgid ""
+"This dialog will assist in helping you to balance your account.\n"
+"\n"
+"Click on an appropriate transaction within one of the two list views to mark "
+"it as reconciled. To create a transaction or edit\n"
+"a transaction you can return to the register by clicking on the Edit "
+"Transactions button.\n"
+"\n"
+"Your account is balanced when the Difference is Zero. Click on the Finish "
+"button to save the reconciled transactions."
+msgstr ""
+
+#: dialogs/rc.cpp:705
+msgid "Withdrawals"
+msgstr "Uttag"
+
+#: dialogs/rc.cpp:707 dialogs/rc.cpp:708 dialogs/rc.cpp:822
+msgid "$"
+msgstr "SEK"
+
+#: dialogs/rc.cpp:710
+msgid "Previous Balance:"
+msgstr "Föregående balans:"
+
+#: dialogs/rc.cpp:711 dialogs/rc.cpp:713 dialogs/rc.cpp:715 dialogs/rc.cpp:717
+#: dialogs/rc.cpp:820
+msgid "0"
+msgstr "0"
+
+#: dialogs/rc.cpp:712
+msgid "Ending Balance:"
+msgstr "Slutbalans:"
+
+#: dialogs/rc.cpp:714
+msgid "Cleared Balance:"
+msgstr "Kontrollerad balans:"
+
+#: dialogs/rc.cpp:716
+msgid "Difference:"
+msgstr "Skillnad:"
+
+#: dialogs/rc.cpp:718
+#, fuzzy
+msgid "Edit Transactions..."
+msgstr "Redigera transaktioner..."
+
+#: dialogs/rc.cpp:721
+msgid "Security List Editor"
+msgstr ""
+
+#: dialogs/rc.cpp:726
+msgid "Market"
+msgstr "Marknad"
+
+#: dialogs/rc.cpp:729
+msgid "Cash Fraction"
+msgstr ""
+
+#: dialogs/rc.cpp:730
+#, fuzzy
+msgid "Add..."
+msgstr "Ändra ..."
+
+#: dialogs/rc.cpp:732 widgets/kmymoneypriceview.cpp:157
+#, fuzzy
+msgid "Delete..."
+msgstr "Ta bort ..."
+
+#: dialogs/rc.cpp:733
+msgid "Show national currencies"
+msgstr ""
+
+#: dialogs/rc.cpp:735
+msgid "KMyMoney - Select Database"
+msgstr ""
+
+#: dialogs/rc.cpp:736
+msgid "CAUTION!"
+msgstr ""
+
+#: dialogs/rc.cpp:737
+msgid ""
+"<font color=\"#ff2727\">This software is still in an experimental stage, and "
+"there are still some known response time problems. Please be patient; we are "
+"working on them.\n"
+"As always, please make sure you have adequate backups of your data.</font>"
+msgstr ""
+
+#: dialogs/rc.cpp:738
+msgid "Database Type"
+msgstr ""
+
+#: dialogs/rc.cpp:739
+msgid "Database Name"
+msgstr ""
+
+#: dialogs/rc.cpp:740
+msgid "Host Name"
+msgstr "Värdnamn"
+
+#: dialogs/rc.cpp:741
+msgid "User Name"
+msgstr "Användarnamn"
+
+#: dialogs/rc.cpp:743
+msgid "Preload &all data"
+msgstr ""
+
+#: dialogs/rc.cpp:745
+#, fuzzy
+msgid "&Generate SQL"
+msgstr "Generera SQL"
+
+#: dialogs/rc.cpp:747
+msgid "Ca&ncel"
+msgstr ""
+
+#: dialogs/rc.cpp:762 widgets/rc.cpp:172
+msgid "Sort options"
+msgstr ""
+
+#: dialogs/rc.cpp:763
+msgid "Use default"
+msgstr ""
+
+#: dialogs/rc.cpp:767
+msgid "Correct splits"
+msgstr ""
+
+#: dialogs/rc.cpp:769
+msgid "How do you want to proceed?"
+msgstr ""
+
+#: dialogs/rc.cpp:770
+#, fuzzy
+msgid "Continue to edit splits"
+msgstr "Börja med hemsida"
+
+#: dialogs/rc.cpp:771
+#, c-format
+msgid "Change total amount of transaction to %1."
+msgstr ""
+
+#: dialogs/rc.cpp:772
+msgid "Distribute difference of %1 among all splits."
+msgstr ""
+
+#: dialogs/rc.cpp:773
+msgid "Leave %1 unassigned."
+msgstr ""
+
+#: dialogs/rc.cpp:776
+msgid "Split transaction"
+msgstr ""
+
+#: dialogs/rc.cpp:777
+msgid "<b>11,00<b>"
+msgstr ""
+
+#: dialogs/rc.cpp:778
+msgid "<b>111,00<b>"
+msgstr ""
+
+#: dialogs/rc.cpp:779
+msgid "Unassigned"
+msgstr ""
+
+#: dialogs/rc.cpp:780
+msgid "Sum of splits"
+msgstr ""
+
+#: dialogs/rc.cpp:781
+msgid "100,00"
+msgstr ""
+
+#: dialogs/rc.cpp:782
+msgid "Transaction amount"
+msgstr ""
+
+#: dialogs/rc.cpp:783
+msgid "Merge"
+msgstr ""
+
+#: dialogs/rc.cpp:784
+msgid "Merges splits with the same category to one split"
+msgstr ""
+
+#: dialogs/rc.cpp:785
+msgid ""
+"In case you have multiple split entries to the same category and you like to "
+"keep them as a single split, press this button. The amount for identical "
+"categories will be added and stored in a single split for that category."
+msgstr ""
+
+#: dialogs/rc.cpp:786
+msgid "Clear &Zero"
+msgstr ""
+
+#: dialogs/rc.cpp:787
+msgid "Removes all splits that have a value of zero."
+msgstr ""
+
+#: dialogs/rc.cpp:791
+msgid "New price entry"
+msgstr ""
+
+#: dialogs/rc.cpp:799
+msgid "Void mark"
+msgstr "Tom-markering"
+
+#: dialogs/rc.cpp:800
+msgid "Opening Balance text"
+msgstr "Text på öppningsbalans"
+
+#: dialogs/rc.cpp:801
+msgid "Type field text"
+msgstr ""
+
+#: dialogs/rc.cpp:802
+msgid "Account delimiter"
+msgstr "Kontoavgränsare"
+
+#: dialogs/rc.cpp:804
+msgid "Attempt to match similar transactions"
+msgstr "Försök matcha liknande transaktioner"
+
+#: dialogs/rc.cpp:806 dialogs/rc.cpp:808
+msgid "The format of the dates in the QIF file."
+msgstr "Datumformatet i QIF-filen."
+
+#: dialogs/rc.cpp:809 dialogs/rc.cpp:811
+msgid ""
+"If a QIF file contains date entries with years represented with two digits "
+"then either an apostrophe or a slash may be used to delimit the year in the "
+"dates for certain centuries. This enables 1905 to be distinguished from "
+"2005. Specify here which range of years will have year delimited by an "
+"apostrophe (eg. for Quicken this is usually 1900-1949)."
+msgstr ""
+
+#: dialogs/rc.cpp:810
+msgid "Apostrophe Handling"
+msgstr "Apostrofhantering"
+
+#: dialogs/rc.cpp:812
+msgid "Amounts"
+msgstr "Belopp"
+
+#: dialogs/rc.cpp:813
+msgid "Field"
+msgstr "Fält"
+
+#: dialogs/rc.cpp:814
+msgid "QIF-Record"
+msgstr "QIF-post"
+
+#: dialogs/rc.cpp:815 dialogs/rc.cpp:833
+msgid "Decimal Symbol"
+msgstr "Decimalsymbol"
+
+#: dialogs/rc.cpp:816
+msgid "Thousand Delimiter"
+msgstr "Tusentalsavgränsare"
+
+#: dialogs/rc.cpp:817
+msgid "SortColumnInvisible"
+msgstr "SortColumnInvisible"
+
+#: dialogs/rc.cpp:819
+msgid "T"
+msgstr "T"
+
+#: dialogs/rc.cpp:821
+msgid "Split-Value"
+msgstr "Delbelopp"
+
+#: dialogs/rc.cpp:824
+msgid "Commission"
+msgstr "Kommision"
+
+#: dialogs/rc.cpp:825
+msgid "O"
+msgstr "O"
+
+#: dialogs/rc.cpp:826
+msgid "2"
+msgstr "2"
+
+#: dialogs/rc.cpp:828
+msgid "I"
+msgstr "I"
+
+#: dialogs/rc.cpp:829
+msgid "3"
+msgstr "3"
+
+#: dialogs/rc.cpp:831
+msgid "Q"
+msgstr "Q"
+
+#: dialogs/rc.cpp:832
+msgid "4"
+msgstr "4"
+
+#: dialogs/rc.cpp:834
+msgid "Thousands Separator"
+msgstr "Tusentalsavgränsare"
+
+#: dialogs/rc.cpp:836
+msgid "Output filter location"
+msgstr ""
+
+#: dialogs/rc.cpp:837
+msgid "Input filter file type"
+msgstr ""
+
+#: dialogs/rc.cpp:838
+msgid "*.qif"
+msgstr ""
+
+#: dialogs/rc.cpp:839
+msgid "Input filter location"
+msgstr ""
+
+#: dialogs/rc.cpp:843
+#, fuzzy
+msgid "Rename"
+msgstr "Döp om"
+
+#: dialogs/kselecttransactionsdlg.cpp:44
+msgid "Select Transaction"
+msgstr "Välj transaktion"
+
+#: dialogs/kselecttransactionsdlg.cpp:45
+msgid ""
+"Select a transaction and press the OK button or use Cancel to select none."
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:62
+msgid "Investment detail wizard"
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:82
+msgid "Security detail wizard"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:121 dialogs/knewinvestmentwizard.cpp:109
+msgid ""
+"_: default price mode\n"
+"<default>"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:122 dialogs/knewinvestmentwizard.cpp:110
+msgid "Price per share"
+msgstr "Kurs"
+
+#: dialogs/knewaccountdlg.cpp:123 dialogs/knewinvestmentwizard.cpp:111
+msgid "Total for all shares"
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:129
+#, fuzzy
+msgid "This wizard allows you to modify the selected investment."
+msgstr "Välj ett föräldrakonto."
+
+#: dialogs/knewinvestmentwizard.cpp:132
+#, fuzzy
+msgid "This wizard allows you to modify the selected security."
+msgstr "Välj ett föräldrakonto."
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid ""
+"The selected symbol is already on file. Do you want to reuse the existing "
+"security?"
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:186
+#, fuzzy
+msgid "Security found"
+msgstr "Schemalagda"
+
+#: dialogs/knewinvestmentwizard.cpp:309
+msgid "Unable to create all objects for the investment"
+msgstr ""
+
+#: dialogs/keditequityentrydlg.cpp:78
+msgid "Change the price information of the selected entry."
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:64 widgets/kmymoneybriefschedule.cpp:59
+msgid "&Skip"
+msgstr "&Hoppa över"
+
+#: dialogs/kaccountselectdlg.cpp:66 widgets/kmymoneybriefschedule.cpp:61
+msgid "Skip this transaction"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:67
+msgid ""
+"Use this to skip importing this transaction and proceed with the next one."
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:72
+msgid "Create a new account/category"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:73
+msgid "Use this to add a new account/category to the file"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:77
+msgid "&Abort"
+msgstr "&Avbryt"
+
+#: dialogs/kaccountselectdlg.cpp:79
+msgid "Abort the import operation and dismiss all changes"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:80
+msgid ""
+"Use this to abort the import. Your financial data will be in the state "
+"before you started the QIF import."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:110
+msgid "Is a sub account"
+msgstr "Är ett underkonto"
+
+#: dialogs/knewaccountdlg.cpp:184
+#, fuzzy
+msgid "VAT account"
+msgstr "Konto"
+
+#: dialogs/knewaccountdlg.cpp:474
+msgid ""
+"You have not specified a name.\n"
+"Please fill in this field."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:482
+msgid "Please select a parent account."
+msgstr "Välj ett föräldrakonto."
+
+#: dialogs/knewaccountdlg.cpp:489 dialogs/knewaccountdlg.cpp:1029
+msgid "<No Institution>"
+msgstr "<Ingen institution>"
+
+#: dialogs/knewaccountdlg.cpp:552
+msgid ""
+"An account named <b>%1</b> already exists. You cannot create a second "
+"account with the same name."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:567
+msgid ""
+"A category named <b>%1</b> already exists. You cannot create a second "
+"category with the same name."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid ""
+"You have selected to suppress the display of unused categories in the "
+"KMyMoney configuration dialog. The category you just created will therefore "
+"only be shown if it is used. Otherwise, it will be hidden in the accounts/"
+"categories view."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid "Hidden categories"
+msgstr "Dolda kategorier"
+
+#: dialogs/knewaccountdlg.cpp:927 dialogs/knewaccountdlg.cpp:979
+#, c-format
+msgid "Is a sub account of %1"
+msgstr "Är ett underkonto till %1"
+
+#: dialogs/knewaccountdlg.cpp:1082
+msgid "Cannot add institution"
+msgstr ""
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid ""
+"This dialog does not allow to create new payees. Please pick a payee from "
+"the list."
+msgstr ""
+"Denna dialogruta tillåter ej skapandet av nya betalningsmottagare. Vänligen "
+"välj en betalningsmottagare från listan."
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid "Payee creation"
+msgstr "Skapa betalningsmottagare"
+
+#: dialogs/kimportdlg.cpp:69
+msgid "Use this to start the import operation"
+msgstr ""
+
+#: dialogs/kimportdlg.cpp:110
+msgid ""
+"%1|Import files\n"
+"%2|All files (*.*)"
+msgstr ""
+
+#: dialogs/kimportdlg.cpp:111
+msgid "Import File..."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:124
+msgid "Create a new category"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:125
+msgid "Use this to open the new account editor"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:129
+msgid "&Additional fees..."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:131
+msgid "Enter additional fees"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:132
+msgid ""
+"Use this to add any additional fees other than principal and interest "
+"contained in your periodical payments."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:139
+msgid ""
+"Use this to create a new account to which the initial payment should be made"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:208
+msgid "To whom do you make payments?"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:209
+msgid "Payments to"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:214
+msgid "From whom do you expect payments?"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:215
+msgid "Payments from"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:233
+msgid "Please enter the date, the first payment for this loan was/is due."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:235
+msgid ""
+"Note: Consult the loan contract for details of the first due date. Keep in "
+"mind, that the first due date usually differs from the date the contract was "
+"signed"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:240
+msgid ""
+"Please enter the original loan amount in the field below or leave it empty "
+"to be calculated."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:248
+msgid ""
+"Please enter the date, the first payment for this loan was/is due this year."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:250
+msgid ""
+"Note: You can easily figure out the date of the first payment if you consult "
+"the last statement of last year."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:254
+msgid ""
+"Please enter the remaining loan amount of last years final statement in the "
+"field below. You should not leave this field empty."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:311 dialogs/knewloanwizard.cpp:326
+#: dialogs/knewloanwizard.cpp:341 dialogs/knewloanwizard.cpp:357
+#: dialogs/knewloanwizard.cpp:373
+msgid "calculate"
+msgstr "beräkna"
+
+#: dialogs/knewloanwizard.cpp:417
+msgid "borrowed"
+msgstr "lånat"
+
+#: dialogs/knewloanwizard.cpp:419
+msgid "lend"
+msgstr "utlånat"
+
+#: dialogs/knewloanwizard.cpp:423
+msgid "not assigned"
+msgstr "ej tilldelad"
+
+#: dialogs/knewloanwizard.cpp:430
+msgid "on reception"
+msgstr "vid mottagning"
+
+#: dialogs/knewloanwizard.cpp:432
+msgid "on due date"
+msgstr "på förfallodatumet"
+
+#: dialogs/knewloanwizard.cpp:471
+msgid ""
+"The loan wizard is unable to calculate two different values for your loan at "
+"the same time. Please enter a value for the %1 on this page or backup to the "
+"page where the current value to be calculated is defined and fill in a "
+"value."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:500
+msgid ""
+"You selected, that payments have already been made towards this loan. This "
+"requires you to enter the loan amount exactly as found on your last "
+"statement."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:513
+msgid "interest rate"
+msgstr "ränta"
+
+#: dialogs/knewloanwizard.cpp:522
+msgid "term"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:532
+msgid "principal and interest"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:743
+#, c-format
+msgid ""
+"The number of payments has been decremented and the final payment has been "
+"modified to %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:751 dialogs/knewloanwizard.cpp:771
+#, c-format
+msgid "The final payment has been modified to %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:802
+msgid "KMyMoney has calculated a final payment of %1 for this loan."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:817
+msgid ""
+"You have entered mis-matching information. Please backup to the appropriate "
+"page and update your figures or leave one value empty to let KMyMoney "
+"calculate it for you"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:230
+msgid ""
+"Warning: Filtering by Category will exclude all transfers from the results."
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:239
+msgid "(None)"
+msgstr "(Ingen)"
+
+#: dialogs/kfindtransactiondlg.cpp:241
+msgid "Current selections: "
+msgstr "Aktuella val: "
+
+#: dialogs/kfindtransactiondlg.cpp:716
+msgid "Found %1 matching transactions (D %2 / P %3 = %4)"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:719
+msgid "Found %1 matching transactions"
+msgstr "Hittade %1 matchande transaktioner"
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "The institution name field is empty. Please enter the name."
+msgstr ""
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "Adding New Institution"
+msgstr ""
+
+#: dialogs/kcsvprogressdlg.cpp:69
+msgid "C&lose"
+msgstr ""
+
+#: dialogs/kcsvprogressdlg.cpp:247
+msgid " of "
+msgstr ""
+
+#: widgets/kmymoneypriceview.cpp:126
+msgid "Commodity"
+msgstr ""
+
+#: widgets/kmymoneypriceview.cpp:130
+msgid "Source"
+msgstr ""
+
+#: widgets/kmymoneypriceview.cpp:143
+msgid "Price Options"
+msgstr ""
+
+#: widgets/kmymoneypriceview.cpp:153
+#, fuzzy
+msgid "Online Price Update..."
+msgstr "\"Online\"-kursuppdatering ..."
+
+#: widgets/kmymoneycombo.cpp:472 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+msgid "From"
+msgstr ""
+
+#: widgets/transaction.cpp:668
+msgid "Transaction is missing a category assignment."
+msgstr ""
+
+#: widgets/transaction.cpp:671
+msgid "The transaction has a missing assignment of <b>%1</b>."
+msgstr ""
+
+#: widgets/transaction.cpp:874
+msgid "Sell"
+msgstr "Sälj"
+
+#: widgets/transaction.cpp:876
+msgid "Buy"
+msgstr "Köp"
+
+#: widgets/kmymoneycombo.cpp:520 widgets/transaction.cpp:879
+#: widgets/transaction.cpp:1447
+msgid "Dividend"
+msgstr "Utdelning"
+
+#: widgets/kmymoneycombo.cpp:518 widgets/transaction.cpp:881
+#: widgets/transaction.cpp:1453
+msgid "Yield"
+msgstr "Förändring"
+
+#: widgets/transaction.cpp:886 widgets/transaction.cpp:1473
+msgid "Activity"
+msgstr "Aktivitet"
+
+#: widgets/transaction.cpp:887
+#, fuzzy
+msgid "Investment transaction"
+msgstr "Justeringstransaktion"
+
+#: widgets/transaction.cpp:1021 widgets/transaction.cpp:1114
+#: widgets/transaction.cpp:1165
+msgid "*** UNASSIGNED ***"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:517 widgets/transaction.cpp:1435
+#, fuzzy
+msgid "Add shares"
+msgstr "Lägg till andelar"
+
+#: widgets/kmymoneycombo.cpp:516 widgets/transaction.cpp:1438
+#, fuzzy
+msgid "Remove shares"
+msgstr "Ta bort andelar"
+
+#: widgets/kmymoneycombo.cpp:522 widgets/transaction.cpp:1441
+#, fuzzy
+msgid "Buy shares"
+msgstr "Köp andelar"
+
+#: widgets/kmymoneycombo.cpp:521 widgets/transaction.cpp:1444
+#, fuzzy
+msgid "Sell shares"
+msgstr "Sälj andelar"
+
+#: widgets/transaction.cpp:1450
+msgid "Reinvest Dividend"
+msgstr "Återinvestera utdelning"
+
+#: widgets/kmymoneycombo.cpp:515 widgets/transaction.cpp:1456
+#, fuzzy
+msgid "Split shares"
+msgstr "Sälj andelar"
+
+#: widgets/transaction.cpp:1515
+msgid "Ratio"
+msgstr ""
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:241
+msgid "%1 Bills."
+msgstr ""
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:257
+msgid "%1 Deposits."
+msgstr ""
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:273
+msgid "%1 Transfers."
+msgstr ""
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:355
+msgid ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+msgstr ""
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:57
+#: widgets/kmymoneyaccounttreeforecast.cpp:84
+msgid "Current"
+msgstr "Nuvarande"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:72
+#: widgets/kmymoneyaccounttreeforecast.cpp:93
+msgid "Total variation"
+msgstr ""
+
+#: widgets/stdtransactionmatched.cpp:130
+msgid ""
+"KMyMoney has matched a downloaded transaction with a manually entered one "
+"(result above)"
+msgstr ""
+
+#: widgets/stdtransactionmatched.cpp:138
+msgid "Bank entry:"
+msgstr ""
+
+#: widgets/stdtransactionmatched.cpp:166
+#, fuzzy
+msgid "Your entry:"
+msgstr "Kursredigerare"
+
+#: widgets/kbudgetvalues.cpp:187
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a monthly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:187 widgets/kbudgetvalues.cpp:206
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"_: Auto assignment (caption)\n"
+"Auto assignment"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:206
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a yearly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"You have entered budget values using a different base which would result in "
+"an individual monthly budget of <b>%1</b>. Should this value be used to fill "
+"the monthly budgets?"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:62
+#, fuzzy
+msgid "Use this button to skip this transaction"
+msgstr ""
+"_: Split-transaktion (kategoribyte)\n"
+"Split-transaktion"
+
+#: widgets/kmymoneybriefschedule.cpp:67
+msgid "Record this transaction into the register"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:68
+msgid "Use this button to record this transaction"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:96
+msgid "%1 of %2"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:109
+msgid "Payment on %1 for %2 with %3 transactions remaining occuring %4."
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:115
+msgid "Payment on %1 for %2 occuring %4."
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:136
+msgid "%1 days overdue (%2 occurences)."
+msgstr ""
+
+#: widgets/register.cpp:55
+msgid "Post date"
+msgstr ""
+
+#: widgets/register.cpp:56
+#, fuzzy
+msgid "Date entered"
+msgstr "Angivet belopp"
+
+#: widgets/register.cpp:60
+msgid "Entry order"
+msgstr ""
+
+#: widgets/register.cpp:63
+msgid "Reconcile state"
+msgstr ""
+
+#: widgets/register.cpp:440
+#, fuzzy
+msgid ""
+"_: Deposits onto account\n"
+"Deposits"
+msgstr "motkonto"
+
+#: widgets/register.cpp:442
+#, fuzzy
+msgid ""
+"_: Payments towards credit card\n"
+"Payments"
+msgstr "Betalningsmetod"
+
+#: widgets/register.cpp:446
+#, fuzzy
+msgid ""
+"_: Payments made from account\n"
+"Payments"
+msgstr "Betalningsinformation"
+
+#: widgets/register.cpp:448
+#, fuzzy
+msgid ""
+"_: Payments made with credit card\n"
+"Charges"
+msgstr "Betalningsmetod"
+
+#: widgets/register.cpp:736
+#, fuzzy
+msgid ""
+"_: Payment made from account\n"
+"Payment"
+msgstr "Betalningsinformation"
+
+#: widgets/register.cpp:737
+#, fuzzy
+msgid ""
+"_: Deposit into account\n"
+"Deposit"
+msgstr "motkonto"
+
+#: widgets/register.cpp:813
+#, fuzzy
+msgid ""
+"_: Payment made with credit card\n"
+"Charge"
+msgstr "Betalningsmetod"
+
+#: widgets/register.cpp:814
+#, fuzzy
+msgid ""
+"_: Payment towards credit card\n"
+"Payment"
+msgstr "Betalningsmetod"
+
+#: widgets/register.cpp:818 widgets/register.cpp:824
+msgid ""
+"_: Decrease of asset/liability value\n"
+"Decrease"
+msgstr ""
+
+#: widgets/register.cpp:819 widgets/register.cpp:823
+msgid ""
+"_: Increase of asset/liability value\n"
+"Increase"
+msgstr ""
+
+#: widgets/register.cpp:2280
+#, fuzzy
+msgid "Prior transactions possibly filtered"
+msgstr "Transaktionsdetaljer"
+
+#: widgets/register.cpp:2284
+#, fuzzy
+msgid "Last reconciliation"
+msgstr "Datum för sista betalning:"
+
+#: widgets/register.cpp:2291
+#, fuzzy, c-format
+msgid "Online Statement Balance: %1"
+msgstr "Värde: %1%2"
+
+#: widgets/register.cpp:2295
+msgid "This year"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:674 widgets/register.cpp:2296
+msgid "Last month"
+msgstr ""
+
+#: widgets/register.cpp:2297
+#, fuzzy
+msgid "This month"
+msgstr "en månad"
+
+#: widgets/register.cpp:2298
+msgid "Last week"
+msgstr ""
+
+#: widgets/register.cpp:2299
+msgid "This week"
+msgstr ""
+
+#: widgets/register.cpp:2300
+msgid "Yesterday"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:666 widgets/register.cpp:2301
+msgid "Today"
+msgstr ""
+
+#: widgets/register.cpp:2302 widgets/register.cpp:2307
+#, fuzzy
+msgid "Future transactions"
+msgstr "Justeringstransaktion"
+
+#: widgets/register.cpp:2303
+#, fuzzy
+msgid "Next week"
+msgstr "Nästa förfallodatum"
+
+#: widgets/kmymoneycalendar.cpp:131 widgets/register.cpp:2304
+msgid "Next month"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:670 widgets/register.cpp:2315
+#, fuzzy
+msgid "Current fiscal year"
+msgstr "Aktuell ränta"
+
+#: widgets/register.cpp:2316
+#, fuzzy
+msgid "Previous fiscal year"
+msgstr "Föregående balans:"
+
+#: widgets/register.cpp:2317
+#, fuzzy
+msgid "Next fiscal year"
+msgstr "Aktuell ränta"
+
+#: widgets/register.cpp:2349
+msgid ""
+"_: Unknown payee\n"
+"Unknown"
+msgstr ""
+
+#: widgets/register.cpp:2368
+#, fuzzy
+msgid ""
+"_: Unknown category\n"
+"Unknown"
+msgstr "Okänt konto"
+
+#: widgets/register.cpp:2387
+#, fuzzy
+msgid ""
+"_: Unknown security\n"
+"Unknown"
+msgstr "Okänt konto"
+
+#: widgets/klistviewsearchline.cpp:249
+msgid "Search Columns"
+msgstr ""
+
+#: widgets/klistviewsearchline.cpp:251
+msgid "All Visible Columns"
+msgstr ""
+
+#: widgets/klistviewsearchline.cpp:266
+msgid ""
+"_: Column number %1\n"
+"Column No. %1"
+msgstr ""
+
+#: widgets/klistviewsearchline.cpp:461 widgets/registersearchline.cpp:286
+msgid "S&earch:"
+msgstr ""
+
+#: widgets/kmymoneyaccountselector.cpp:110
+#: widgets/kmymoneyaccountselector.cpp:371
+msgid "Income categories"
+msgstr ""
+
+#: widgets/kmymoneyaccountselector.cpp:349
+#: widgets/kmymoneyaccountselector.cpp:350
+#, fuzzy
+msgid "Favorites"
+msgstr "Kategorier"
+
+#: widgets/kmymoneyaccountselector.cpp:357
+msgid "Asset accounts"
+msgstr ""
+
+#: widgets/kmymoneyaccountselector.cpp:364
+msgid "Liability accounts"
+msgstr ""
+
+#: widgets/kmymoneyaccountselector.cpp:381
+msgid "Expense categories"
+msgstr ""
+
+#: widgets/kmymoneyaccountselector.cpp:391
+#, fuzzy
+msgid "Equity accounts"
+msgstr "Kontofilter"
+
+#: widgets/kmymoneyaccounttreebase.cpp:120
+#, fuzzy
+msgid "Total Balance"
+msgstr "Balans"
+
+#: widgets/kmymoneyaccounttreebase.cpp:124
+#, fuzzy
+msgid "Total Value"
+msgstr "Tillgångar & skulder"
+
+#: widgets/registersearchline.cpp:75
+msgid ""
+"_: label for status combo\n"
+"Stat&us"
+msgstr ""
+
+#: widgets/registersearchline.cpp:79
+msgid "Any status"
+msgstr ""
+
+#: widgets/registersearchline.cpp:80
+#, fuzzy
+msgid "Imported"
+msgstr "QIF-import"
+
+#: widgets/registersearchline.cpp:81
+msgid "Matched"
+msgstr ""
+
+#: widgets/registersearchline.cpp:82
+msgid "Erroneous"
+msgstr ""
+
+#: widgets/registersearchline.cpp:83
+#, fuzzy
+msgid "Not marked"
+msgstr "Tom-markering"
+
+#: widgets/kmymoneyaccounttree.cpp:54
+msgid ""
+"_: Column heading for category in tax report\n"
+"Tax"
+msgstr ""
+
+#: widgets/kmymoneyaccounttree.cpp:58
+msgid ""
+"_: Column heading for VAT category\n"
+"VAT"
+msgstr ""
+
+#: widgets/kmymoneywizard.cpp:101
+#, fuzzy
+msgid "Continue with next page"
+msgstr "Börja med hemsida"
+
+#: widgets/kmymoneywizard.cpp:103
+#, fuzzy
+msgid "Finish wizard"
+msgstr "Redigera lån-\"wizard\""
+
+#: widgets/kmymoneywizard.cpp:121
+#, fuzzy
+msgid "&Back"
+msgstr "Säkerhetskopia"
+
+#: widgets/kmymoneywizard.cpp:122
+#, fuzzy
+msgid "&Next"
+msgstr "&Nytt"
+
+#: widgets/kmymoneywizard.cpp:123
+msgid "&Finish"
+msgstr "Slutför"
+
+#: widgets/kmymoneywizard.cpp:274
+msgid "Step %1 of %2"
+msgstr ""
+
+#: widgets/kmymoneydateinput.cpp:235
+msgid ""
+"_: Enter todays date into date input widget\n"
+"T"
+msgstr ""
+
+#: widgets/transactionform.cpp:302
+msgid "&Deposit"
+msgstr ""
+
+#: widgets/transactionform.cpp:304 widgets/transactionform.cpp:313
+#: widgets/transactionform.cpp:323 widgets/transactionform.cpp:333
+msgid "&Transfer"
+msgstr ""
+
+#: widgets/transactionform.cpp:306
+msgid "&Withdrawal"
+msgstr ""
+
+#: widgets/transactionform.cpp:311
+msgid "&Payment"
+msgstr ""
+
+#: widgets/transactionform.cpp:315
+#, fuzzy
+msgid "&Charge"
+msgstr "Avgifter"
+
+#: widgets/transactionform.cpp:321 widgets/transactionform.cpp:335
+#, fuzzy
+msgid "&Decrease"
+msgstr "Minska"
+
+#: widgets/transactionform.cpp:325 widgets/transactionform.cpp:331
+#, fuzzy
+msgid "&Increase"
+msgstr "Öka"
+
+#: widgets/kmymoneyscheduledcalendar.cpp:42
+msgid "Select Schedules"
+msgstr ""
+
+#: widgets/kmymoneycalendar.cpp:108
+msgid "Select Style"
+msgstr ""
+
+#: widgets/kmymoneycalendar.cpp:128
+msgid "Choose Style"
+msgstr ""
+
+#: widgets/kmymoneycalendar.cpp:129
+msgid "Next year"
+msgstr ""
+
+#: widgets/kmymoneycalendar.cpp:130
+msgid "Previous year"
+msgstr ""
+
+#: widgets/kmymoneycalendar.cpp:132
+msgid "Previous month"
+msgstr ""
+
+#: widgets/kmymoneycalendar.cpp:133
+msgid "Select a week"
+msgstr ""
+
+#: widgets/kmymoneycalendar.cpp:134
+msgid "Select a month"
+msgstr ""
+
+#: widgets/kmymoneycalendar.cpp:135
+msgid "Select a year"
+msgstr ""
+
+#: widgets/kmymoneycalendar.cpp:249
+msgid "Week XX"
+msgstr ""
+
+#: widgets/kmymoneycalendar.cpp:264 widgets/kmymoneycalendar.cpp:300
+#, c-format
+msgid "Week %1"
+msgstr ""
+
+#: widgets/rc.cpp:1
+#, fuzzy
+msgid "Account Types"
+msgstr "Konton"
+
+#: widgets/rc.cpp:3
+#, fuzzy
+msgid "Detailed description"
+msgstr "Beskrivning"
+
+#: widgets/rc.cpp:18
+msgid "Period"
+msgstr ""
+
+#: widgets/rc.cpp:21
+msgid "Individual"
+msgstr ""
+
+#: widgets/rc.cpp:23
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Acces to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>Recovery encryption</i> group is only accessible, if the necessary "
+"key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is "
+"found."
+msgstr ""
+
+#: widgets/rc.cpp:26
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading <i>0x</i>."
+msgstr ""
+
+#: widgets/rc.cpp:27
+msgid "User ID"
+msgstr ""
+
+#: widgets/rc.cpp:29
+msgid "Recovery encryption"
+msgstr ""
+
+#: widgets/rc.cpp:30
+msgid "Also encrypt with kmymoney-recover key"
+msgstr ""
+
+#: widgets/rc.cpp:32
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out."
+msgstr ""
+
+#: widgets/rc.cpp:51
+msgid "PriceInfo"
+msgstr ""
+
+#: widgets/rc.cpp:52
+msgid "Report Tab"
+msgstr ""
+
+#: widgets/rc.cpp:53
+msgid "<p>On this tab, you set the basic properties of this report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:54
+msgid "Report Name"
+msgstr ""
+
+#: widgets/rc.cpp:55
+msgid "<p>Choose a name for this report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:57
+msgid "<p>Enter a comment to help you remember the details of this report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:58
+msgid "Convert values to base currency"
+msgstr ""
+
+#: widgets/rc.cpp:59
+msgid ""
+"_: Convert 'em!!\n"
+"<p>Select this option to convert all values in the report to your base "
+"currency.</p><p>Leave it unchecked if you'd like to see values in their "
+"original currency.</p><p>If currencies are not converted, then subtotals "
+"will not be shown.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:60
+msgid "Mark as a favorite report"
+msgstr ""
+
+#: widgets/rc.cpp:61
+msgid ""
+"<p>Select this option to notate this report as one of your favorites.</"
+"p><p>All your favorite reports are grouped in one place on the report list "
+"for easy access.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:62 widgets/rc.cpp:88
+msgid "Rows/Columns Tab"
+msgstr ""
+
+#: widgets/rc.cpp:63 widgets/rc.cpp:89
+msgid ""
+"<p>On this tab, you configure how you'd like the rows and columns to be "
+"selected and organized.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:69 widgets/rc.cpp:81
+msgid ""
+"<p>Choose what kind of accounts to display as the rows of this report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:71
+msgid "Columns"
+msgstr ""
+
+#: widgets/rc.cpp:75
+msgid "Bi-Monthly"
+msgstr ""
+
+#: widgets/rc.cpp:78
+msgid "<p>Choose how large of a time period each column should encompass</p>"
+msgstr ""
+
+#: widgets/rc.cpp:79
+msgid "Income & Expenses"
+msgstr "Inkomster & utgifter"
+
+#: widgets/rc.cpp:80
+msgid "Assets & Liabilities"
+msgstr "Tillgångar & skulder"
+
+#: widgets/rc.cpp:82
+msgid "Rows"
+msgstr "Rader"
+
+#: widgets/rc.cpp:83
+#, fuzzy
+msgid "Show totals column"
+msgstr "Är ett underkonto"
+
+#: widgets/rc.cpp:84
+msgid "Average days"
+msgstr ""
+
+#: widgets/rc.cpp:85
+#, fuzzy
+msgid "Include scheduled transactions"
+msgstr "Registrera schemalagd transaktion"
+
+#: widgets/rc.cpp:86
+#, fuzzy
+msgid "Include transfers"
+msgstr "Ta med på skatterapport"
+
+#: widgets/rc.cpp:87
+msgid "Include unused accounts/categories"
+msgstr ""
+
+#: widgets/rc.cpp:90
+msgid "Organize by:"
+msgstr ""
+
+#: widgets/rc.cpp:92
+msgid "Top Categories"
+msgstr ""
+
+#: widgets/rc.cpp:95
+msgid "Top Accounts"
+msgstr ""
+
+#: widgets/rc.cpp:98
+msgid "<p>Choose how to group the transactions in this report</p>"
+msgstr ""
+
+#: widgets/rc.cpp:99
+msgid "Show Columns"
+msgstr ""
+
+#: widgets/rc.cpp:100
+msgid ""
+"<p>Choose which columns should be shown in the report.</p><p>The date and "
+"transaction amount are always shown.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:102
+msgid "<p>Select this option to show the Memo column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:104
+msgid "<p>Select this option to show the Shares column for investments</p>"
+msgstr ""
+
+#: widgets/rc.cpp:106
+msgid "<p>Select this option to show the Price column for investments</p>"
+msgstr ""
+
+#: widgets/rc.cpp:108
+msgid "<p>Select this option to show the Reconciled column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:110
+msgid "<p>Select this option to show the Account column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:112
+msgid "<p>Select this option to show the Number column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:114
+msgid "<p>Select this option to show the Payee column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:116
+msgid "<p>Select this option to show the Category column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:118
+msgid "<p>Select this option to show the Action column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:120
+msgid "<p>Select this option to show the Running balance column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:121
+#, fuzzy
+msgid "Include only Loan accounts"
+msgstr "Ta med på skatterapport"
+
+#: widgets/rc.cpp:122
+msgid "Include only Investment accounts"
+msgstr ""
+
+#: widgets/rc.cpp:123 widgets/rc.cpp:127
+msgid ""
+"<p>Check this box to include only those categories which have been marked to "
+"\"Include on Tax Reports\"</p>"
+msgstr ""
+
+#: widgets/rc.cpp:124
+#, fuzzy
+msgid "Hide Split Transaction Details"
+msgstr "Transaktionsdetaljer"
+
+#: widgets/rc.cpp:125
+msgid ""
+"Do not display the individual transactions that make up a split transaction"
+msgstr ""
+
+#: widgets/rc.cpp:126
+msgid "Include only Tax categories"
+msgstr ""
+
+#: widgets/rc.cpp:128
+msgid "Chart Tab"
+msgstr ""
+
+#: widgets/rc.cpp:129
+msgid "<p>On this tab, you configure the chart drawn forthis report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:130
+msgid "Chart Type"
+msgstr ""
+
+#: widgets/rc.cpp:131
+msgid "<p>Select what form you would like the chart to be drawn as.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:132
+msgid "Line"
+msgstr ""
+
+#: widgets/rc.cpp:133
+msgid "Bar"
+msgstr ""
+
+#: widgets/rc.cpp:134
+msgid "Stacked Bar"
+msgstr ""
+
+#: widgets/rc.cpp:135
+#, fuzzy
+msgid "Pie"
+msgstr "Kurs"
+
+#: widgets/rc.cpp:136
+msgid "Ring"
+msgstr ""
+
+#: widgets/rc.cpp:137
+msgid "Show grid lines"
+msgstr ""
+
+#: widgets/rc.cpp:138
+msgid ""
+"<p>Select this option to show horizontal and vertical grid lines on the "
+"chart.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:139
+msgid "Draw values on chart"
+msgstr ""
+
+#: widgets/rc.cpp:140
+msgid ""
+"<p>Select this option to draw the numeric values for data points next to "
+"their plot location.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:141
+msgid "Show as chart by default"
+msgstr ""
+
+#: widgets/rc.cpp:142
+msgid ""
+"<p>Select this option to cause the report to be shown as a chart when you "
+"first open the report. Otherwise, it will come up as a text report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:143
+msgid "Line width"
+msgstr ""
+
+#: widgets/rc.cpp:144
+msgid "<p>Select what width should be used to draw the line on the chart</p>"
+msgstr ""
+
+#: widgets/rc.cpp:145
+msgid "ReportControl"
+msgstr ""
+
+#: widgets/rc.cpp:149
+msgid "Configure this report"
+msgstr ""
+
+#: widgets/rc.cpp:151
+msgid "Create a new report based on this one"
+msgstr ""
+
+#: widgets/rc.cpp:153
+msgid "Copy this report to the clipboard"
+msgstr ""
+
+#: widgets/rc.cpp:155
+msgid "Export this report as an HTML or CSV file"
+msgstr ""
+
+#: widgets/rc.cpp:157
+msgid "Permanently delete this report"
+msgstr ""
+
+#: widgets/rc.cpp:159
+msgid "Close this window"
+msgstr ""
+
+#: widgets/rc.cpp:162
+msgid "n of n"
+msgstr ""
+
+#: widgets/rc.cpp:166
+msgid "Account:"
+msgstr ""
+
+#: widgets/rc.cpp:168
+msgid "Enter..."
+msgstr ""
+
+#: widgets/rc.cpp:171
+#, fuzzy
+msgid "TransactionSortOptionDecl"
+msgstr "Transaktionsdetaljer"
+
+#: widgets/rc.cpp:173
+msgid "Sort order"
+msgstr ""
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Sunday\n"
+"Sun"
+msgstr ""
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Saturday\n"
+"Sat"
+msgstr ""
+
+#: widgets/kmymoneydatetbl.cpp:171 widgets/kmymoneydatetbl.cpp:178
+msgid "Week %1 for year %2."
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:417
+msgid "ATM"
+msgstr "Bankautomat"
+
+#: widgets/kmymoneycombo.cpp:418
+msgid "Withdrawal"
+msgstr "Uttag"
+
+#: widgets/kmymoneycombo.cpp:421
+msgid "Cheque"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:469
+msgid ""
+"_: Activity for expense categories\n"
+"Paid"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:470
+msgid ""
+"_: Activity for income categories\n"
+"Received"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:519
+#, fuzzy
+msgid "Reinvest dividend"
+msgstr "Återinvestera utdelning"
+
+#: widgets/kmymoneycombo.cpp:664
+msgid "All dates"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:665
+msgid "As of today"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:667
+msgid "Current month"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:668
+#, fuzzy
+msgid "Current quarter"
+msgstr "Aktuell ränta"
+
+#: widgets/kmymoneycombo.cpp:669
+#, fuzzy
+msgid "Current year"
+msgstr "Aktuell ränta"
+
+#: widgets/kmymoneycombo.cpp:671
+msgid "Month to date"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:672
+msgid "Year to date"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:673
+#, fuzzy
+msgid "Year to month"
+msgstr "en månad"
+
+#: widgets/kmymoneycombo.cpp:675
+msgid "Last year"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:676
+msgid "Last fiscal year"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:677
+msgid "Last 7 days"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:678
+msgid "Last 30 days"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:679
+msgid "Last 3 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:680
+msgid "Last quarter"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:681
+msgid "Last 6 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:682
+msgid "Last 11 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:683
+msgid "Last 12 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:684
+#, fuzzy
+msgid "Next 7 days"
+msgstr "Nästa förfallodatum:"
+
+#: widgets/kmymoneycombo.cpp:685
+msgid "Next 30 days"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:686
+msgid "Next 3 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:687
+#, fuzzy
+msgid "Next quarter"
+msgstr "Nästa förfallodatum"
+
+#: widgets/kmymoneycombo.cpp:688
+msgid "Next 6 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:689
+msgid "Next 12 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:690
+msgid "Last 3 months to next 3 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:691
+msgid "User defined"
+msgstr ""
+
+#~ msgid "Create schedule..."
+#~ msgstr "Skapa schema..."
+
+#, fuzzy
+#~ msgid "New schedule..."
+#~ msgstr "Nytt schema"
+
+#, fuzzy
+#~ msgid "Edit schedule..."
+#~ msgstr "Skapa schema..."
+
+#, fuzzy
+#~ msgid "Delete schedule..."
+#~ msgstr "Skapa schema..."
+
+#, fuzzy
+#~ msgid "Duplicate schedule"
+#~ msgstr "Skapa schema..."
+
+#, fuzzy
+#~ msgid "Enter schedule..."
+#~ msgstr "Skapa schema..."
+
+#, fuzzy
+#~ msgid "Skip schedule..."
+#~ msgstr "Skapa schema..."
+
+#, fuzzy
+#~ msgid "Adjusting schedules..."
+#~ msgstr "Skapa schema..."
+
+#, fuzzy
+#~ msgid "Add schedule"
+#~ msgstr "Schema"
+
+#, fuzzy
+#~ msgid "Unable to enter transaction for schedule '%1'"
+#~ msgstr "Kunde inte justera schema: "
+
+#, fuzzy
+#~ msgid "Loaded"
+#~ msgstr "Lån"
+
+#, fuzzy
+#~ msgid "not loaded: %1"
+#~ msgstr "Kurs-källa: %1"
+
+#, fuzzy
+#~ msgid "Schedule options"
+#~ msgstr "Schemainformation"
+
+#~ msgid "New Schedule"
+#~ msgstr "Nytt schema"
+
+#~ msgid "Edit Schedule"
+#~ msgstr "Redigera schema"
+
+#~ msgid ""
+#~ "Reading the bank list failed with the following error: '%1'. The console "
+#~ "output may have more information."
+#~ msgstr ""
+#~ "Försöket att läsa banklistan returnerade följande fel: '%1'. "
+#~ "Konsollutskriften kan innehålla ytterligare information."
+
+#~ msgid "XMLPP error"
+#~ msgstr "XMLPP error"
+
+#~ msgid "CHECKING"
+#~ msgstr "LÖNE/TRANSAKTIONSKONTO"
+
+#~ msgid "SAVINGS"
+#~ msgstr "SPARKONTO"
+
+#~ msgid "CREDIT LINE"
+#~ msgstr "KREDIT"
+
+#~ msgid "CREDIT CARD"
+#~ msgstr "KREDITKORT"
+
+#~ msgid "INVESTMENT"
+#~ msgstr "VÄRDEPAPPER"
+
+#~ msgid "UNKNOWN"
+#~ msgstr "OKÄNT"
+
+#, fuzzy
+#~ msgid "Budget "
+#~ msgstr "Budget"
+
+#, fuzzy
+#~ msgid "Forecast "
+#~ msgstr "Beräkningsmetod"
+
+#, fuzzy
+#~ msgid "Budget Total"
+#~ msgstr "siffror"
+
+#, fuzzy
+#~ msgid "Forecast Total"
+#~ msgstr "Beräkningsmetod"
+
+#, fuzzy
+#~ msgid "Incomes and Expenses This Month"
+#~ msgstr "Inkomster och utgifter aktuell månad"
+
+#, fuzzy
+#~ msgid "Incomes"
+#~ msgstr "Inkomst"
+
+#, fuzzy
+#~ msgid "Schedules This Month"
+#~ msgstr "Generell information"
+
+#~ msgid "&Ok"
+#~ msgstr "&OK"
+
+#~ msgid "Accepts the value and stores them"
+#~ msgstr "Godkänn och spara värdet"
+
+#~ msgid "Use this to accept all values and close the dialog."
+#~ msgstr "Använd detta för att acceptera alla värden och stäng dialogrutan."
+
+#~ msgid "Cancel the operation"
+#~ msgstr "Avbryt"
+
+#~ msgid "Use this to dismiss all the changes made in this dialog."
+#~ msgstr ""
+#~ "Använd denna för att ångra alla ändringar gjorda i denna dialogruta."
+
+#~ msgid "Accept modifications"
+#~ msgstr "Acceptera ändringar"
+
+#~ msgid "New ..."
+#~ msgstr "Nytt ..."
+
+#~ msgid "S&ummary"
+#~ msgstr "S&ummering"
+
+#~ msgid "Det&ail"
+#~ msgstr "Det&aljer"
+
+#, fuzzy
+#~ msgid "Total Incomes This Month"
+#~ msgstr "Inkomster och utgifter aktuell månad"
+
+#, fuzzy
+#~ msgid "Total Expenses This Month"
+#~ msgstr "Inkomster och utgifter aktuell månad"
+
+#~ msgid "&Create"
+#~ msgstr "&Skapa"
+
+#~ msgid "Te&xt"
+#~ msgstr "Te&xt"
+
+#, fuzzy
+#~ msgid "&Yearly"
+#~ msgstr "År"
+
+#~ msgid "Advanced Institution Settings"
+#~ msgstr "Avancerade institutionsinställningar"
+
+#~ msgid "OFX Direct Connect Settings"
+#~ msgstr "OFX direktanslutningsinställningar"
+
+#~ msgid "Enable OFX Direct Connect"
+#~ msgstr "Aktivera OFX direktanslutning"
+
+#~ msgid "FIORG"
+#~ msgstr "FIORG"
+
+#~ msgid "1/"
+#~ msgstr "1/"
+
+#~ msgid "Account Fraction"
+#~ msgstr "Kontoandel"
+
+#, fuzzy
+#~ msgid "Match Transaction..."
+#~ msgstr "Redigera transaktioner..."
+
+#, fuzzy
+#~ msgid "Match With This Transaction"
+#~ msgstr "Uppdelad transaktion"
+
+#, fuzzy
+#~ msgid "Open Configuration Dialog"
+#~ msgstr "Hjälp för OFX inställningar"
diff --git a/po/tr.po b/po/tr.po
new file mode 100644
index 0000000..39f671f
--- /dev/null
+++ b/po/tr.po
@@ -0,0 +1,13441 @@
+# translation of kmymoney2.po to
+#
+# Serdar Soytetir <tulliana@gmail.com>, 2007, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmymoney2\n"
+"POT-Creation-Date: 2009-06-25 19:04+0200\n"
+"PO-Revision-Date: 2008-07-05 22:56+0300\n"
+"Last-Translator: Serdar Soytetir <tulliana@gmail.com>\n"
+"Language-Team: Turkish <kde-i18n-doc@lists.kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 0.2\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: wizards/wizardpages/rc.cpp:1
+msgid ""
+"Select groups of accounts that correspond to the ways that you will use "
+"KMyMoney. Each group you select will cause several accounts and categories "
+"to be created. Select the groups that are relevant to you. You can always "
+"create additional accounts manually later."
+msgstr ""
+
+#: wizards/wizardpages/rc.cpp:2
+msgid ""
+"<p>KMyMoney supports multiple currencies, nevertheless one of them will be "
+"used as your base currency. The base currency is used as default for new "
+"accounts and reports. Please select the base currency from the following "
+"list."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:71 dialogs/rc.cpp:399 dialogs/rc.cpp:485
+#: dialogs/rc.cpp:724 dialogs/settings/rc.cpp:108 reports/listtable.cpp:226
+#: views/kinvestmentview.cpp:71 views/kpayeesview.cpp:351 views/rc.cpp:13
+#: widgets/rc.cpp:5 widgets/rc.cpp:34
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1599
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1629
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1673
+#: wizards/wizardpages/rc.cpp:3
+msgid "Name"
+msgstr "İsim"
+
+#: wizards/wizardpages/rc.cpp:4
+msgid "ISO Code"
+msgstr "ISO Kodu"
+
+#: dialogs/kequitypriceupdatedlg.cpp:69 dialogs/kequitypriceupdatedlg.cpp:70
+#: dialogs/rc.cpp:71 dialogs/rc.cpp:725 dialogs/settings/rc.cpp:112
+#: views/kinvestmentview.cpp:72 widgets/rc.cpp:37 wizards/wizardpages/rc.cpp:5
+msgid "Symbol"
+msgstr "Sembol"
+
+#: wizards/wizardpages/rc.cpp:6
+msgid ""
+"<p>Use the fields below to enter some information about yourself.</p>\n"
+"\n"
+"<p>All information is optional and only used to personalize your KMyMoney "
+"file.</p>"
+msgstr ""
+"<p>Kişisel bilgilerinizi girmek için bu pencereyi kullanın.</p>\n"
+"\n"
+"<p>Tüm bilgiler isteğe bağlıdır ve KMyMoney dosyanızı kişiselleştimeye yarar."
+"</p>"
+
+#: dialogs/rc.cpp:425 wizards/newuserwizard/rc.cpp:27
+#: wizards/wizardpages/rc.cpp:7
+msgid "Town:"
+msgstr "Şehir:"
+
+#: dialogs/rc.cpp:420 wizards/newuserwizard/rc.cpp:22
+#: wizards/wizardpages/rc.cpp:8
+msgid "County/State:"
+msgstr "Ülke/Bölge:"
+
+#: dialogs/rc.cpp:391 dialogs/rc.cpp:421 wizards/newuserwizard/rc.cpp:23
+#: wizards/wizardpages/rc.cpp:9
+msgid "Street:"
+msgstr "Cadde:"
+
+#: dialogs/rc.cpp:422 wizards/newuserwizard/rc.cpp:24
+#: wizards/wizardpages/rc.cpp:10
+msgid "Email:"
+msgstr "E-Posta:"
+
+#: dialogs/rc.cpp:424 wizards/newuserwizard/rc.cpp:26
+#: wizards/wizardpages/rc.cpp:11
+msgid "Telephone:"
+msgstr "Telefon:"
+
+#: dialogs/rc.cpp:423 wizards/newuserwizard/rc.cpp:25
+#: wizards/wizardpages/rc.cpp:12
+msgid "Your name:"
+msgstr "Adınız Soyadınız:"
+
+#: dialogs/rc.cpp:427 wizards/newuserwizard/rc.cpp:29
+#: wizards/wizardpages/rc.cpp:13
+msgid "Load from Addressbook"
+msgstr "Adres Defterinden Yükle"
+
+#: dialogs/rc.cpp:392 dialogs/rc.cpp:426 views/rc.cpp:68
+#: wizards/wizardpages/rc.cpp:14
+msgid "Postal Code:"
+msgstr "Posta Kodu:"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:82
+msgid "KMyMoney New Account Setup"
+msgstr "KMyMoney Yeni Hesap Ayarları"
+
+#: dialogs/rc.cpp:360 dialogs/rc.cpp:361 reports/listtable.cpp:230
+#: wizards/newaccountwizard/knewaccountwizard.cpp:83
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1616
+#: wizards/newaccountwizard/rc.cpp:61
+msgid "Institution"
+msgstr "Şirket"
+
+#: dialogs/investactivities.cpp:198 dialogs/investactivities.cpp:286
+#: dialogs/investactivities.cpp:367 dialogs/kfindtransactiondlg.cpp:181
+#: dialogs/rc.cpp:139 dialogs/rc.cpp:192 dialogs/rc.cpp:207
+#: dialogs/transactioneditor.cpp:734 reports/listtable.cpp:201
+#: reports/pivottable.cpp:1336 reports/pivottable.cpp:1586
+#: views/kforecastview.cpp:393 views/kgloballedgerview.cpp:175
+#: views/khomeview.cpp:418 views/khomeview.cpp:491 views/khomeview.cpp:525
+#: views/khomeview.cpp:764 views/khomeview.cpp:967 views/khomeview.cpp:1437
+#: views/kscheduledview.cpp:71 views/rc.cpp:17 views/rc.cpp:44
+#: widgets/kmymoneyaccounttreebase.cpp:58
+#: widgets/kmymoneyaccounttreeforecast.cpp:41 widgets/rc.cpp:109
+#: widgets/register.cpp:566 widgets/transaction.cpp:978
+#: widgets/transaction.cpp:1535
+#: wizards/newaccountwizard/knewaccountwizard.cpp:84
+msgid "Account"
+msgstr "Hesap"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:85
+msgid "Broker"
+msgstr "Komisyoncu"
+
+#: dialogs/kfindtransactiondlg.cpp:225 dialogs/rc.cpp:70 dialogs/rc.cpp:104
+#: dialogs/rc.cpp:159 dialogs/rc.cpp:223 dialogs/rc.cpp:246 dialogs/rc.cpp:751
+#: dialogs/settings/rc.cpp:109 widgets/rc.cpp:35 widgets/register.cpp:568
+#: wizards/newaccountwizard/knewaccountwizard.cpp:86
+msgid "Details"
+msgstr "Ayrıntılar"
+
+#: dialogs/knewloanwizard.cpp:636 dialogs/rc.cpp:231 dialogs/rc.cpp:608
+#: kmymoneyutils.cpp:191 views/khomeview.cpp:399
+#: wizards/newaccountwizard/knewaccountwizard.cpp:87
+#: wizards/newaccountwizard/knewaccountwizard.cpp:880
+msgid "Payments"
+msgstr "Ödemeler"
+
+#: dialogs/investactivities.cpp:195 dialogs/investactivities.cpp:283
+#: dialogs/investactivities.cpp:422 dialogs/investtransactioneditor.cpp:217
+#: reports/listtable.cpp:221 widgets/transaction.cpp:1565
+#: wizards/newaccountwizard/knewaccountwizard.cpp:88
+msgid "Fees"
+msgstr "Ödemeler"
+
+#: dialogs/rc.cpp:624 views/khomeview.cpp:415 views/khomeview.cpp:488
+#: views/khomeview.cpp:522 wizards/newaccountwizard/knewaccountwizard.cpp:89
+msgid "Schedule"
+msgstr "Zamanla"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:90
+msgid "Payout"
+msgstr "Öde"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:91
+#, fuzzy
+msgid "Parent Account"
+msgstr "Ödeme Hesapları"
+
+#: dialogs/rc.cpp:719 wizards/newaccountwizard/knewaccountwizard.cpp:92
+#: wizards/newuserwizard/knewuserwizard.cpp:86
+msgid "Finish"
+msgstr "Bitir"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:248
+msgid "Credit card payment"
+msgstr "Kredi kartı ödemesi"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:264
+#, c-format
+msgid "Loan payment for %1"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:279
+msgid "Loan payment"
+msgstr ""
+
+#: dialogs/rc.cpp:134 wizards/newaccountwizard/knewaccountwizard.cpp:293
+msgid "Amortization"
+msgstr "Amortisman"
+
+#: dialogs/investactivities.cpp:196 dialogs/investactivities.cpp:284
+#: dialogs/investactivities.cpp:366 dialogs/investactivities.cpp:423
+#: dialogs/investtransactioneditor.cpp:227 dialogs/rc.cpp:135
+#: dialogs/rc.cpp:152 dialogs/rc.cpp:544 reports/listtable.cpp:222
+#: widgets/transaction.cpp:1597
+#: wizards/newaccountwizard/knewaccountwizard.cpp:302
+msgid "Interest"
+msgstr "Faiz"
+
+#: dialogs/kcurrencycalculator.cpp:282
+#: wizards/newaccountwizard/knewaccountwizard.cpp:351
+#: wizards/newaccountwizard/knewaccountwizard.cpp:356
+msgid "User"
+msgstr "Kullanıcı"
+
+#: kmymoneyutils.cpp:64 mymoney/mymoneyaccount.cpp:711
+#: reports/querytabletest.cpp:422
+#: wizards/newaccountwizard/knewaccountwizard.cpp:451
+msgid "Checking"
+msgstr ""
+
+#: kmymoneyutils.cpp:66 mymoney/mymoneyaccount.cpp:714
+#: wizards/newaccountwizard/knewaccountwizard.cpp:452
+msgid "Savings"
+msgstr "Tasarruflar"
+
+#: kmymoneyutils.cpp:68 mymoney/mymoneyaccount.cpp:717
+#: reports/querytabletest.cpp:423
+#: wizards/newaccountwizard/knewaccountwizard.cpp:453
+msgid "Credit Card"
+msgstr "Kredi Kartı"
+
+#: kmymoneyutils.cpp:70 mymoney/mymoneyaccount.cpp:720
+#: wizards/newaccountwizard/knewaccountwizard.cpp:454
+msgid "Cash"
+msgstr "Nakit"
+
+#: kmymoneyutils.cpp:72 mymoney/mymoneyaccount.cpp:723
+#: wizards/newaccountwizard/knewaccountwizard.cpp:455
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+msgid "Loan"
+msgstr ""
+
+#: kmymoneyutils.cpp:76 mymoney/mymoneyaccount.cpp:729
+#: wizards/newaccountwizard/knewaccountwizard.cpp:456
+msgid "Investment"
+msgstr "Yatırım"
+
+#: converter/mymoneytemplate.cpp:178 converter/mymoneytemplate.cpp:179
+#: dialogs/knewaccountdlg.cpp:1014 kmymoneyutils.cpp:80
+#: mymoney/mymoneyaccount.cpp:735 views/kaccountsview.cpp:352
+#: views/kmymoneyview.cpp:765 widgets/kmymoneyaccountselector.cpp:177
+#: widgets/kmymoneyaccountselector.cpp:356
+#: wizards/newaccountwizard/knewaccountwizard.cpp:457
+msgid "Asset"
+msgstr "Varlık"
+
+#: converter/mymoneytemplate.cpp:182 converter/mymoneytemplate.cpp:183
+#: dialogs/knewaccountdlg.cpp:1016 kmymoneyutils.cpp:82
+#: mymoney/mymoneyaccount.cpp:738 views/kaccountsview.cpp:356
+#: views/kmymoneyview.cpp:766 widgets/kmymoneyaccountselector.cpp:178
+#: widgets/kmymoneyaccountselector.cpp:363
+#: wizards/newaccountwizard/knewaccountwizard.cpp:458
+msgid "Liability"
+msgstr "Borç"
+
+#: converter/mymoneytemplate.cpp:194 converter/mymoneytemplate.cpp:195
+#: kmymoneyutils.cpp:94 mymoney/mymoneyaccount.cpp:756
+#: views/kaccountsview.cpp:369 views/kmymoneyview.cpp:769
+#: widgets/kmymoneyaccountselector.cpp:181
+#: widgets/kmymoneyaccountselector.cpp:390
+#: wizards/newaccountwizard/knewaccountwizard.cpp:460
+msgid "Equity"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid ""
+"Please make sure to enter the correct conversion for the selected opening "
+"date. If you requested an online quote it might be provided for a different "
+"date."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+#, fuzzy
+msgid "Check date"
+msgstr "Çek"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:562
+msgid "1 %1 equals %2"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:577
+msgid "Conversion rate is not positive"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:583
+msgid "No account name supplied"
+msgstr "Hesap ismi girilmedi"
+
+#: dialogs/keditscheduledlg.cpp:114 mymoney/mymoneyscheduled.cpp:1026
+#: wizards/newaccountwizard/knewaccountwizard.cpp:680
+msgid "Write check"
+msgstr "Çek yaz"
+
+#: dialogs/keditscheduledlg.cpp:111 mymoney/mymoneyscheduled.cpp:1014
+#: wizards/newaccountwizard/knewaccountwizard.cpp:682
+msgid "Direct debit"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:113 mymoney/mymoneyscheduled.cpp:1032
+#: wizards/newaccountwizard/knewaccountwizard.cpp:683
+msgid "Bank transfer"
+msgstr "Banka aktarımı"
+
+#: dialogs/keditscheduledlg.cpp:112 mymoney/mymoneyscheduled.cpp:1029
+#: wizards/newaccountwizard/knewaccountwizard.cpp:685
+msgid "Standing order"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:110 mymoney/mymoneyscheduled.cpp:1020
+#: wizards/newaccountwizard/knewaccountwizard.cpp:686
+msgid "Manual deposit"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:109 mymoney/mymoneyscheduled.cpp:1017
+#: wizards/newaccountwizard/knewaccountwizard.cpp:687
+msgid "Direct deposit"
+msgstr "Doğrudan depozit"
+
+#: dialogs/keditscheduledlg.cpp:115 mymoney/mymoneyscheduled.cpp:1023
+#: wizards/newaccountwizard/knewaccountwizard.cpp:688
+msgid "Other"
+msgstr "Diğer"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:697
+msgid "CreditCard %1 monthly payment"
+msgstr "%1 Kredi Kartı aylık ödemesi"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:703
+msgid "Finish entry and create account"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:705
+msgid "Finish entry and create account and schedule"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:708
+msgid "Next due date is prior to opening date"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:712
+msgid "No account selected"
+msgstr "Bir hesap seçilmedi"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:716
+msgid "No amount for payment selected"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:720
+msgid "No payee for payment selected"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:724
+msgid "No name assigned for schedule"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:805
+msgid "No payee supplied"
+msgstr "Hiç alacaklı girilmedi"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:819
+msgid "No opening balance supplied"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:826
+msgid "An interest change can only happen after the first payment"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:615 dialogs/knewloanwizard.cpp:634
+#: wizards/newaccountwizard/knewaccountwizard.cpp:884
+#: wizards/newaccountwizard/rc.cpp:55
+msgid "Months"
+msgstr "Aylar"
+
+#: dialogs/knewloanwizard.cpp:616 dialogs/knewloanwizard.cpp:635
+#: wizards/newaccountwizard/knewaccountwizard.cpp:885
+#: wizards/newaccountwizard/knewaccountwizard.cpp:889
+#: wizards/newaccountwizard/rc.cpp:56
+msgid "Years"
+msgstr "Yıllar"
+
+#: dialogs/knewloanwizard.cpp:711
+#: wizards/newaccountwizard/knewaccountwizard.cpp:961
+#, c-format
+msgid "KMyMoney has calculated the amount of the loan as %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:718
+#: wizards/newaccountwizard/knewaccountwizard.cpp:968
+msgid "KMyMoney has calculated the interest rate to %1%."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:731
+#: wizards/newaccountwizard/knewaccountwizard.cpp:981
+msgid ""
+"KMyMoney has calculated a periodic payment of %1 to cover principal and "
+"interest."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:993
+#, c-format
+msgid ""
+"The number of payments has been decremented and the balloon payment has been "
+"modified to %1."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1001
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1021
+#, c-format
+msgid "The balloon payment has been modified to %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:763
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1013
+msgid "KMyMoney has calculated the term of your loan as %1. "
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1052
+msgid "KMyMoney has calculated a balloon payment of %1 for this loan."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:809
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1059
+msgid "KMyMoney has successfully verified your loan information."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1067
+msgid ""
+"You have entered mis-matching information. Please modify your figures or "
+"leave one value empty to let KMyMoney calculate it for you"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:504 dialogs/knewloanwizard.cpp:513
+#: dialogs/knewloanwizard.cpp:522 dialogs/knewloanwizard.cpp:532
+#: dialogs/knewloanwizard.cpp:820
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1070
+msgid "Calculation error"
+msgstr "Hesaplama hatası"
+
+#: dialogs/knewloanwizard.cpp:824
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1074
+msgid ""
+"\n"
+"\n"
+"Accept this or modify the loan information and recalculate."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:826
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1076
+msgid "Calculation successful"
+msgstr "Hesaplama başarılı"
+
+#: dialogs/knewloanwizard.cpp:846
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1129
+#, c-format
+msgid ""
+"_n: one month\n"
+"%n months"
+msgstr "%n ay"
+
+#: dialogs/knewloanwizard.cpp:850
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1133
+#, c-format
+msgid ""
+"_n: one year\n"
+"%n years"
+msgstr "%n yıl"
+
+#: dialogs/knewloanwizard.cpp:854
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1137
+#, c-format
+msgid ""
+"_n: one payment\n"
+"%n payments"
+msgstr "%n ödeme"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1190
+msgid "Press Calculate to verify the values"
+msgstr "Değerleri doğrulamak için Hesapla düğmesine basın"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1194
+msgid "Not all details supplied"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:70 dialogs/knewloanwizard.cpp:122
+#: dialogs/knewloanwizard.cpp:136
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1381
+msgid "&Create..."
+msgstr "&Oluştur..."
+
+#: dialogs/knewloanwizard.cpp:138
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1383
+msgid "Create a new asset account"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1384
+msgid ""
+"If the asset account does not yet exist, press this button to create it."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1596
+msgid "Account information"
+msgstr "Hesap bilgileri"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1601
+#: wizards/newaccountwizard/rc.cpp:59
+#, fuzzy
+msgid "Subaccount of"
+msgstr "Alt-hesap:"
+
+#: dialogs/rc.cpp:225 dialogs/rc.cpp:326 dialogs/rc.cpp:371 dialogs/rc.cpp:723
+#: plugins/ofximport/dialogs/rc.cpp:23 reports/listtable.cpp:225
+#: widgets/kmymoneyaccounttreebase.cpp:113 widgets/register.cpp:61
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1606
+msgid "Type"
+msgstr "Tip"
+
+#: dialogs/kcurrencyeditdlg.cpp:62 dialogs/rc.cpp:56 dialogs/rc.cpp:59
+#: dialogs/rc.cpp:75 dialogs/rc.cpp:727 dialogs/rc.cpp:792
+#: kmymoneyutils.cpp:84 kmymoneyutils.cpp:111 mymoney/mymoneyaccount.cpp:741
+#: mymoney/mymoneysecurity.cpp:169 reports/listtable.cpp:233
+#: widgets/kmymoneypriceview.cpp:127
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1607
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1630
+#: wizards/newaccountwizard/rc.cpp:6 wizards/newaccountwizard/rc.cpp:24
+msgid "Currency"
+msgstr "Para birimi"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1608
+#: wizards/newaccountwizard/rc.cpp:7 wizards/newuserwizard/rc.cpp:9
+msgid "Opening date"
+msgstr "Açılış tarihi"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1610
+#: wizards/newaccountwizard/rc.cpp:9
+#, fuzzy
+msgid "Conversion rate"
+msgstr "Faiz oranı"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1613
+#: wizards/newaccountwizard/rc.cpp:15 wizards/newuserwizard/rc.cpp:13
+msgid "Opening balance"
+msgstr ""
+
+#: dialogs/keditscheduledlg.cpp:507 dialogs/transactioneditor.cpp:784
+#: dialogs/transactioneditor.cpp:848 plugins/ofximport/dialogs/rc.cpp:22
+#: widgets/rc.cpp:111 widgets/register.cpp:59 widgets/transaction.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1618
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1632
+msgid "Number"
+msgstr "Numara"
+
+#: dialogs/rc.cpp:365 wizards/newaccountwizard/knewaccountwizard.cpp:1621
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1634
+#: wizards/newaccountwizard/rc.cpp:26 wizards/newaccountwizard/rc.cpp:66
+msgid "IBAN"
+msgstr "IBAN"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1627
+msgid "Brokerage Account"
+msgstr "Komisyon Hesabı"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1640
+msgid "Loan information"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1643
+msgid "Amount borrowed"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1645
+msgid "Amount lent"
+msgstr ""
+
+#: dialogs/rc.cpp:515 dialogs/rc.cpp:546
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1647
+#: wizards/newaccountwizard/rc.cpp:75
+msgid "Interest rate"
+msgstr "Faiz oranı"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1648
+msgid "Interest rate is"
+msgstr "Faiz oranı"
+
+#: dialogs/rc.cpp:509 dialogs/rc.cpp:572
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1649
+msgid "Principal and interest"
+msgstr "Anapara ve faiz"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1650
+#: wizards/newaccountwizard/rc.cpp:90
+msgid "Additional fees"
+msgstr "Ek ödemeler"
+
+#: dialogs/rc.cpp:525 wizards/newaccountwizard/knewaccountwizard.cpp:1651
+#: wizards/newaccountwizard/rc.cpp:44
+msgid "Payment frequency"
+msgstr "Ödeme sıklığı"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1652
+#: wizards/newaccountwizard/rc.cpp:105
+msgid "Payment account"
+msgstr "Ödeme hesapları"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1655
+msgid "Payout information"
+msgstr "Ödeme bilgileri"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1658
+msgid "Refinance"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1661
+msgid "Transfer amount to"
+msgstr "Giden aktarım tutarı"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1663
+msgid "Transfer amount from"
+msgstr "Gelen aktarım tutarı"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1665
+msgid "Payment date"
+msgstr "Ödeme tarihi"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1671
+msgid "Schedule information"
+msgstr "Zamanlama Bilgileri"
+
+#: reports/listtable.cpp:228
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1684
+msgid "Occurence"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:891 mymoney/mymoneyscheduled.cpp:947
+#: mymoney/mymoneyscheduled.cpp:1283 mymoney/mymoneyscheduletest.cpp:1343
+#: widgets/rc.cpp:19 widgets/rc.cpp:74
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+msgid "Monthly"
+msgstr "Aylık"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1677
+msgid "Paid from"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:473 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1678
+msgid "Pay to"
+msgstr ""
+
+#: dialogs/investactivities.cpp:197 dialogs/investactivities.cpp:285
+#: dialogs/investactivities.cpp:365 dialogs/kfindtransactiondlg.cpp:197
+#: dialogs/kmymoneysplittable.cpp:80 dialogs/rc.cpp:51 dialogs/rc.cpp:212
+#: reports/listtable.cpp:197 views/khomeview.cpp:421 views/khomeview.cpp:494
+#: views/khomeview.cpp:528 views/kscheduledview.cpp:73 views/rc.cpp:63
+#: widgets/register.cpp:58 widgets/transaction.cpp:1055
+#: widgets/transaction.cpp:1578 widgets/transaction.cpp:1610
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1679
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1685
+msgid "Amount"
+msgstr "Tutar"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1680
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1686
+msgid "First payment due"
+msgstr "İlk ödeme zamanı"
+
+#: dialogs/rc.cpp:102 wizards/newaccountwizard/knewaccountwizard.cpp:1681
+#: wizards/newaccountwizard/rc.cpp:115
+msgid "Payment method"
+msgstr "Ödeme şekli"
+
+#: wizards/newaccountwizard/rc.cpp:1
+msgid ""
+"This page summarizes the data you have entered. Press <b>Finish</b> to "
+"create the account, schedules, etc. or use <b>Back</b> to modify your "
+"entries."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:2
+msgid "Item"
+msgstr "Öge"
+
+#: dialogs/rc.cpp:110 dialogs/rc.cpp:165 dialogs/rc.cpp:252 dialogs/rc.cpp:757
+#: dialogs/rc.cpp:818 views/kinvestmentview.cpp:74 widgets/register.cpp:574
+#: wizards/newaccountwizard/rc.cpp:3
+msgid "Value"
+msgstr "Değer"
+
+#: wizards/newaccountwizard/rc.cpp:4
+msgid ""
+"Enter the name of the account under which it is known within KMyMoney.\n"
+"Select the type for the new account. Use the <b>What's this?</b> feature to "
+"see more details about the various account types.\n"
+"Enter the date the account was opened and its currency."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:5
+msgid "Select the currency in which this account is denominated."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:8
+msgid ""
+"The opening balance is the balance of the account when you start using it "
+"with KMyMoney. For new accounts this is usually 0 but for existing accounts "
+"this may well differ. Please consult the account statements to figure out "
+"this value. The opening balance is to be provided in the currency of the "
+"account as selected with the currency button."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:10
+msgid ""
+"The opening date would be the date of the last statement. In case you want "
+"to keep track of transactions prior to this date, enter the ending balance "
+"and statement date of a prior statement and add all following transactions "
+"into KMyMoney.\n"
+"<br>\n"
+"<i>Note</i>: If you do not know the exact amount of the opening balance, "
+"enter an estimate. You can change this value later before you reconcile this "
+"account for the first time."
+msgstr ""
+
+#: dialogs/rc.cpp:52 dialogs/rc.cpp:54 dialogs/rc.cpp:57 dialogs/rc.cpp:60
+#: dialogs/rc.cpp:748 dialogs/rc.cpp:749 dialogs/rc.cpp:768 widgets/rc.cpp:6
+#: widgets/rc.cpp:7 widgets/rc.cpp:8 widgets/rc.cpp:9 widgets/rc.cpp:10
+#: widgets/rc.cpp:11 widgets/rc.cpp:12 widgets/rc.cpp:13 widgets/rc.cpp:14
+#: widgets/rc.cpp:15 widgets/rc.cpp:16 widgets/rc.cpp:17
+#: wizards/newaccountwizard/rc.cpp:11 wizards/newaccountwizard/rc.cpp:88
+#: wizards/newaccountwizard/rc.cpp:91 wizards/newaccountwizard/rc.cpp:93
+#: wizards/newuserwizard/rc.cpp:14
+msgid "xxx"
+msgstr "xxx"
+
+#: wizards/newaccountwizard/rc.cpp:12
+msgid "Account type"
+msgstr "Hesap tipi"
+
+#: wizards/newaccountwizard/rc.cpp:13
+msgid ""
+"For foreign currencies an initial conversion rate needs to be provided. This "
+"should be the price of the foreign currency in the base currency on the "
+"opening date of the account."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:14
+msgid "Account name"
+msgstr "Hesap adı"
+
+#: wizards/newaccountwizard/rc.cpp:16
+msgid ""
+"<p><b>Checking</b>\n"
+"Use the checking account type to manage activities on your checking account "
+"e.g. payments, checks and cash card purchases.</p>\n"
+"\n"
+"<p><b>Savings</b>\n"
+"Use the savings account type to manage activities on your savings account.</"
+"p>\n"
+"\n"
+"<p><b>Credit Card</b>\n"
+"Use the credit card account type to manage activities on your credit card.</"
+"p>\n"
+"\n"
+"<p><b>Cash</b>\n"
+"\n"
+"Use the cash account type to manage activities in your wallet.</p>\n"
+"\n"
+"<p><b>Loan</b>\n"
+"Use the loan account type to manage amortization loans (e.g. mortgages, car "
+"loan, money you lend, private loans etc.).</p>\n"
+"\n"
+"<p><b>Investment</b>\n"
+"Use the investment account to manage your stock, mutual fund and other "
+"investments.</p>\n"
+"\n"
+"<p><b>Asset</b>\n"
+"Use the asset account type to manage assets (e.g. your house, car or art "
+"collection).</p>\n"
+"\n"
+"<p><b>Liability</b>\n"
+"Use the liability account type to manage any type of liability except "
+"amortization loans. Use it for taxes you owe or money you borrowed from "
+"friends. For amortization loans like mortgages you should create a loan "
+"account.</p>"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:17
+msgid "Preferred account"
+msgstr "Tercih edilen hesap"
+
+#: wizards/newaccountwizard/rc.cpp:18
+msgid ""
+"Mark this checkbox if the account should be maintained as preferred account"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:19
+msgid ""
+"Selecting the <b>Preferred Account</b> checkbox will allow preferred access "
+"in some dialogs and views of KMyMoney."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:20
+msgid "Enter a name under which this account is known within KMyMoney."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:21
+#, fuzzy
+msgid "Online quote"
+msgstr "Çevrimiçi Aktarımlar"
+
+#: wizards/newaccountwizard/rc.cpp:22
+msgid ""
+"Does this investment account have a brokerage account?<p>\n"
+"\n"
+"<b>Check</b> the mark if this investment account has an associated account "
+"for money that is not invested.<br>\n"
+"\n"
+"<b>Uncheck</b> it if you don't use this account for active stock brokerage. "
+"You should also uncheck it if this account is not maintained by a bank or "
+"broker."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:23
+msgid "Create brokerage account"
+msgstr "Komisyon hesabı oluştur"
+
+#: wizards/newaccountwizard/rc.cpp:25 wizards/newaccountwizard/rc.cpp:64
+msgid "Account number"
+msgstr "Hesap numarası"
+
+#: wizards/newaccountwizard/rc.cpp:27
+msgid ""
+"Please select the required options. Please use the <b>What's this?</b> "
+"feature to see more information about the items."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:28
+msgid "What is the type of the loan?"
+msgstr ""
+
+#: dialogs/rc.cpp:481 wizards/newaccountwizard/rc.cpp:29
+msgid "I am borrowing money"
+msgstr "Borç alıyorum"
+
+#: dialogs/rc.cpp:482 wizards/newaccountwizard/rc.cpp:30
+msgid "I am lending money"
+msgstr "Borç veriyorum"
+
+#: wizards/newaccountwizard/rc.cpp:31
+msgid "Who is the payee/payer of the loan?"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:32
+msgid ""
+"Enter the name of the person or bank you owe money or who owes you money.\n"
+"\n"
+"If the name does not exist within KMyMoney's database, you are asked if you "
+"want to create it."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:33
+msgid "Did you make/receive any payments yet?"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:36
+msgid ""
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?\n"
+"\n"
+"Note: Payments made to obtain the loan (e.g. Disagio) are not considered as "
+"payments in this context."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:37
+msgid "Which payments do you want to record?"
+msgstr "Hangi ödemeleri kaydetmek istiyorsunuz?"
+
+#: wizards/newaccountwizard/rc.cpp:38
+msgid "All payments"
+msgstr "Tüm ödemeler"
+
+#: wizards/newaccountwizard/rc.cpp:39
+msgid "Start with this year's payments"
+msgstr "Bu yılın ödemeleri ile başla"
+
+#: wizards/newaccountwizard/rc.cpp:40
+msgid ""
+"<qt>Select which transactions should be recorded.\n"
+"\n"
+"<b>All payments</b> allows you to enter all payments made for this loan.\n"
+"\n"
+"The option to <b>start from the beginning of the current year</b> is meant "
+"for loans that are active for a longer period of time already and you don't "
+"want to enter all transactions of the past.\n"
+"</qt>"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:41
+msgid "Balance before start of recording"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:42
+msgid ""
+"Enter the ending balance found on the statement that is the last one before "
+"you want to start recording this loan in KMyMoney."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:43
+msgid ""
+"You have selected to record only payments from the beginning of this year. "
+"Since prior transactions will not be recorded, you need to supply the "
+"balance of the loan on January 1st of this year."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:45
+msgid "Interest Compounding frequency"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:46
+msgid ""
+"Select the frequency with which the interest is compounded. If uncertain, "
+"select the same as the payment frequency. Consult your loan contract for "
+"details."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:47
+msgid "Due date of first payment to be recorded"
+msgstr "Kaydedilecek ilk ödemenin tarihi"
+
+#: wizards/newaccountwizard/rc.cpp:48
+msgid ""
+"Depending on the answer to <b>What do you want to record?</b> this field "
+"means the following:<p>\n"
+"\n"
+"<b>All payments</b><br>\n"
+"Enter the due date of the very first payment<p>\n"
+"\n"
+"<b>Start with this year's payments</b><br>\n"
+"Enter the due date of the first payment in the current year"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:49
+msgid "Type of interest rate"
+msgstr "Faiz oranının tipi"
+
+#: wizards/newaccountwizard/rc.cpp:50
+msgid "Fixed"
+msgstr "Sabit"
+
+#: wizards/newaccountwizard/rc.cpp:51
+msgid "Variable"
+msgstr "Değişken"
+
+#: wizards/newaccountwizard/rc.cpp:52
+msgid "Time between interest changes"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:613 wizards/newaccountwizard/rc.cpp:53
+msgid "Days"
+msgstr "Günler"
+
+#: dialogs/knewloanwizard.cpp:614 wizards/newaccountwizard/rc.cpp:54
+msgid "Weeks"
+msgstr "Haftalar"
+
+#: wizards/newaccountwizard/rc.cpp:57
+msgid "Next interest change is due"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:58
+#, fuzzy
+msgid "This page allows you to select the parent account."
+msgstr "Lütfen bir üst hesap seçin."
+
+#: wizards/newaccountwizard/rc.cpp:60
+msgid ""
+"If this account is managed by an institution please select the institution "
+"from the list. If the institution does not exist yet, please choose the "
+"<b>New Institution</b> button to create it. Otherwise, leave this field "
+"empty.\n"
+"Enter the account number used by the institution to identify the account."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:62
+msgid "Select the institution which manages this account or leave empty"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:63
+#, fuzzy
+msgid "New Institution"
+msgstr "&Yeni Şirket"
+
+#: wizards/newaccountwizard/rc.cpp:65
+msgid ""
+"Accounts managed by an institution are usually referenced by a unique number "
+"the so called account number. Enter that number here.\n"
+"\n"
+"KMyMoney currently uses this number only for some online banking functions."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:67
+msgid "Enter the International Bank Account Number into this field"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:68
+msgid ""
+"You can enter the IBAN (International Bank Account Number) into this field "
+"if you know it. Usually, people at your institution can tell you the number "
+"or it is printed on your statements.\n"
+"\n"
+"See also http://en.wikipedia.org/wiki/International_Bank_Account_Number for "
+"more information.\n"
+"\n"
+"KMyMoney keeps this field only for documentation purposes and does not use "
+"it otherwise."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:69
+msgid ""
+"Now enter the details for your loan. You can leave one of the fields empty "
+"and KMyMoney will calculate it when you press the <b>Calculate</b> button. "
+"Before you can continue with the next page you also need to press "
+"<b>Calculate</b> so that KMyMoney can check the logical correctness of the "
+"values you have supplied."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:70
+msgid "The interest rate gets calculated"
+msgstr "Faiz oranları hesaplanır"
+
+#: wizards/newaccountwizard/rc.cpp:71
+msgid "when the payment is received"
+msgstr "ödeme alındığında"
+
+#: wizards/newaccountwizard/rc.cpp:72
+msgid "when the payment is due"
+msgstr "ödeme yapıldığında"
+
+#: dialogs/rc.cpp:531 dialogs/rc.cpp:533 wizards/newaccountwizard/rc.cpp:73
+msgid "Loan amount"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:74
+msgid ""
+"Enter the amount of the loan in this field. If you want to calculate this "
+"field out of the other parameters, please leave it empty. If the field is "
+"marked as required (colored background) you have informed KMyMoney about the "
+"fact that there were already some payments towards the loan. In this case, "
+"please enter the ending balance of your last statement."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:76
+msgid ""
+"Please enter the interest rate in percent or leave the field empty to "
+"calculate it."
+msgstr ""
+
+#: dialogs/rc.cpp:559 wizards/newaccountwizard/rc.cpp:77
+msgid "Term"
+msgstr "Dönem"
+
+#: wizards/newaccountwizard/rc.cpp:78
+msgid ""
+"Please enter the term of this loan or enter 0 to calculate it. The term is "
+"the time that is required to fully repay the loan. This time might be "
+"different from the time your loan contract is signed for."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:79
+msgid "Payment (principal and interest)"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:80
+msgid ""
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:81
+msgid "Balloon payment"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:82
+msgid ""
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:83
+msgid "Calculate"
+msgstr "Hesapla"
+
+#: wizards/newaccountwizard/rc.cpp:84
+msgid "Press this button to calculate/verify your loan details."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:85
+msgid ""
+"Pressing this button calculates a possibly missing parameter for your loan "
+"or verifies that the values entered match. If something is not correct you "
+"will receive information about it."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:86
+msgid ""
+"Now enter the information required for the periodic loan payments. If your "
+"regular payments contains any additional fees, click on the <b>Additional "
+"fees</b> button to enter them."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:87
+msgid "Principal + Interest"
+msgstr "Anapara + Faiz"
+
+#: dialogs/rc.cpp:620 wizards/newaccountwizard/rc.cpp:89
+msgid "+"
+msgstr "+"
+
+#: wizards/newaccountwizard/rc.cpp:92
+msgid "= periodical payments"
+msgstr "= periyodik ödemeler"
+
+#: dialogs/rc.cpp:643 wizards/newaccountwizard/rc.cpp:94
+msgid ""
+"If this loan is for an asset, such as a car or a house, you can create the "
+"asset account now. An asset account represents the total value of an asset. "
+"The money from this loan will be transfered into the asset account you "
+"create or select.\n"
+"If this loan is a 'consumer loan' (money to use however you want), you can "
+"use a checking account instead."
+msgstr ""
+
+#: dialogs/rc.cpp:644 wizards/newaccountwizard/rc.cpp:95
+msgid "Don't create payout transaction"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:96
+msgid "Refinance existing loan"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:97
+msgid ""
+"Check this if you are refinancing a loan that already exists in KMyMoney"
+msgstr ""
+
+#: dialogs/rc.cpp:642 wizards/newaccountwizard/rc.cpp:98
+msgid "Asset Account"
+msgstr "Varlık Hesabı"
+
+#: dialogs/rc.cpp:2 wizards/newaccountwizard/rc.cpp:99
+msgid "Create"
+msgstr "Oluştur"
+
+#: wizards/newaccountwizard/rc.cpp:100
+msgid "Loan account"
+msgstr ""
+
+#: dialogs/rc.cpp:646 wizards/newaccountwizard/rc.cpp:101
+msgid "Date of payment"
+msgstr "Ödeme günü"
+
+#: wizards/newaccountwizard/rc.cpp:102
+msgid ""
+"KMyMoney creates a schedule for this payment and reminds you whenever a "
+"payment must be made. Please select the account to/from which payments will "
+"be made and the category the interest will be assigned to.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+
+#: dialogs/rc.cpp:613 wizards/newaccountwizard/rc.cpp:103
+msgid "Interest category"
+msgstr "Faiz kategorisi"
+
+#: wizards/newaccountwizard/rc.cpp:104
+msgid ""
+"The category the interest part of the payment will be assigned to. If you "
+"borrow money you usually have to pay interest, so this should be an expense "
+"category. If you lend the money, you receive the interest. In this case, "
+"select an income category here."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:106
+msgid ""
+"Select the account from which you make your periodical payments or where you "
+"receive regular payments in case you lend the money. In most cases, this is "
+"a checking account."
+msgstr ""
+
+#: dialogs/rc.cpp:519 wizards/newaccountwizard/rc.cpp:107
+msgid "First payment due on"
+msgstr "İlk ödeme zamanı"
+
+#: wizards/newaccountwizard/rc.cpp:108
+msgid ""
+"For credit card accounts you can create a monthly schedule which will "
+"automatically remind you about the payment. Please fill in the details about "
+"this payment here."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:109
+msgid "Yes, remind me when the payment is due"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:110
+msgid "Name of schedule"
+msgstr "Zamanlamanın adı"
+
+#: dialogs/rc.cpp:151 dialogs/rc.cpp:218 dialogs/rc.cpp:219
+#: reports/listtable.cpp:199 views/kscheduledview.cpp:72 widgets/rc.cpp:113
+#: widgets/register.cpp:57 wizards/newaccountwizard/rc.cpp:111
+msgid "Payee"
+msgstr "Alacaklı"
+
+#: wizards/newaccountwizard/rc.cpp:112
+msgid "Estimated monthly payment"
+msgstr "Tahmini aylık ödeme"
+
+#: wizards/newaccountwizard/rc.cpp:113
+msgid "Due date of next payment"
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:114
+msgid ""
+"Payment should be made\n"
+"from account"
+msgstr ""
+
+#: wizards/newuserwizard/knewuserwizard.cpp:79
+msgid "KMyMoney New File Setup"
+msgstr "KMyMoney Yeni Dosya Ayarları"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:81
+msgid "Introduction"
+msgstr "Giriş"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:82
+msgid "Personal Data"
+msgstr "Kişisel Veriler"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:83
+msgid "Select Currency"
+msgstr "Para Birimini Seç"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:84
+msgid "Select Accounts"
+msgstr "Hesapları Seç"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:85
+msgid "Set preferences"
+msgstr "Tercihleri Ayarla"
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid ""
+"Unable to load data, because no contact has been associated with the owner "
+"of the standard addressbook."
+msgstr ""
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid "Addressbook import"
+msgstr "Adres defterini içeri aktar"
+
+#: wizards/newuserwizard/rc.cpp:1
+msgid ""
+"A typical KMyMoney user maintains a checking a account with some institution "
+"and uses it to receive money or pay bills. If this is not the case, please "
+"deselect the checkbox below and continue on the next page."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:2
+msgid "I have a checking account that I want to manage with KMyMoney"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:3
+msgid "The name of the instititution that issued the account."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:4
+msgid ""
+"Each institution has a routing number. Enter it here. If uncertain, leave "
+"the field blank. You can modify it later."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:5
+msgid "Name of the institution"
+msgstr "Şirketin adı"
+
+#: wizards/newuserwizard/rc.cpp:6
+msgid "Routing number"
+msgstr "Yönlendirme numarası"
+
+#: wizards/newuserwizard/rc.cpp:7
+msgid ""
+"In general the institution that issued the account also issued a number for "
+"it. Enter it here. If uncertain, you can modify this entry later."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:8
+msgid ""
+"Enter a descriptive name that will be used by KMyMoney to identify your "
+"checking account."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:10
+msgid ""
+"Enter the date from when on you plan to keep track of the transactions in "
+"that account. This is usually the date of the last statement. If uncertain, "
+"leave as is."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:11
+msgid "Number of the account"
+msgstr "Hesap numarası"
+
+#: wizards/newuserwizard/rc.cpp:12
+msgid "Name of the account"
+msgstr "Hesabın adı"
+
+#: wizards/newuserwizard/rc.cpp:15
+msgid ""
+"Enter the opening balance of the account. This is usually the ending balance "
+"of the last statement. If uncertain, leave as is."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:16
+msgid ""
+"The fields below allow you to enter some information about your checking "
+"account. Once this wizard finishes, the account will be created for you "
+"within KMyMoney."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:17
+msgid ""
+"KMyMoney supports multiple currencies. Your reports will be based on a "
+"default curreny which you can select here. The default for new accounts is "
+"also the currency you select here."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:18
+msgid ""
+"KMyMoney will store your financial data in a file on the disk. A standard "
+"filename within your KDE user environment will be the default. This is just "
+"provided for convenience and you can choose any other location here."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:19
+msgid ""
+"Either the currently selected file exists or the selected directory does not "
+"exist. Please make sure, that\n"
+"\n"
+"<ul>\n"
+"<li>the selected directory exists and</li>\n"
+"<li>the filename is not currently used in this directory.</li>\n"
+"</ul>"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:20
+msgid ""
+"This finishes the setup of your KMyMoney environment. You can now press the "
+"Finish button and start using KMyMoney to record your financial transactions."
+msgstr ""
+"Bu KMyMoney uygulamasının yapılandırılması işlemini bitirir. Şimdi Bitir "
+"düğmesine basın ve KMyMoney uygulamasını kullanarak aktarımlarınızı "
+"kaydetmeye başlayın."
+
+#: wizards/newuserwizard/rc.cpp:21
+msgid ""
+"Please enter some information about yourself.<br><br>\n"
+"\n"
+"This information will be seen and used only by you. The information is used "
+"to personalize KMyMoney, to encrypt your file, etc."
+msgstr ""
+"Lütfen kendi hakkınızda bazı bilgileri girin.<br><br>\n"
+"\n"
+"Bu bilgiler sadece sizin tarafınızdan görülebilecek ve kullanılabilecektir. "
+"Tüm bilgiler isteğe bağlıdır ve KMyMoney dosyanızı kişiselleştimeye yarar."
+
+#: wizards/newuserwizard/rc.cpp:28
+msgid "Zip code"
+msgstr "Posta kodu"
+
+#: wizards/newuserwizard/rc.cpp:30
+msgid "Welcome to KMyMoney!"
+msgstr "KMyMoney Uygulamasına Hoşgeldiniz!"
+
+#: wizards/newuserwizard/rc.cpp:31
+msgid ""
+"You have started KMyMoney for the first time on this computer. Before this "
+"program can help you to manage your finances, it needs to collect some data "
+"from you.<p>\n"
+"\n"
+"On the next few pages you will be guided through the steps necessary to "
+"setup the program. This will happen only once."
+msgstr ""
+"KMyMoney uygulamasını bu bilgisayarda ilk kez çalıştırıyorsunuz. Finansal "
+"durumunuzu yönetmenize yardımcı olacak olan bu uygulamanın öncelikle sizden "
+"bazı bilgiler alması gerekiyor.<p>\n"
+"\n"
+"Sonraki birkaç sayfada uygulamayı yapılandırmanız için size yol "
+"gösterilecek. Bu sihirbaz sadece bir kez çalıştırılır."
+
+#: wizards/newuserwizard/rc.cpp:32
+msgid ""
+"<p>KMyMoney can encrypt your datafile using GPG Encryption. GPG encryption "
+"is one of the most secure methods in the world for protecting data. All of "
+"your account numbers and other important financial information will be very "
+"secure.</p>"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:33
+msgid ""
+"If you would like to review or change any preference settings for KMyMoney "
+"at this time, you can do so here. If not just click <b>Next</b>."
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:34
+#, fuzzy
+msgid "Configure preferences now"
+msgstr "Tercihleri Ayarla"
+
+#: wizards/newuserwizard/rc.cpp:35
+msgid ""
+"You can change the configuration options at any time using the configuration "
+"dialog. Just select the <b>Configure KMyMoney...</b> option in the "
+"<b>Settings</b> menu."
+msgstr ""
+
+#: dialogs/rc.cpp:83 dialogs/rc.cpp:411 dialogs/rc.cpp:435
+#: kmymoneyutils.cpp:92 kmymoneyutils.cpp:105 mymoney/mymoneyaccount.cpp:753
+#: mymoney/mymoneysecurity.cpp:160
+msgid "Stock"
+msgstr "Stok"
+
+#: dialogs/rc.cpp:84 dialogs/rc.cpp:412 dialogs/rc.cpp:436
+#: kmymoneyutils.cpp:107 mymoney/mymoneysecurity.cpp:163
+msgid "Mutual Fund"
+msgstr "Müşterek Sermaye"
+
+#: dialogs/rc.cpp:85 dialogs/rc.cpp:413 dialogs/rc.cpp:437
+#: kmymoneyutils.cpp:109 mymoney/mymoneysecurity.cpp:166
+msgid "Bond"
+msgstr "Bono"
+
+#: mymoney/mymoneysecurity.cpp:172 reports/querytable.cpp:1150
+#: widgets/kmymoneyaccountselector.cpp:76
+msgid "None"
+msgstr "Hiçbiri"
+
+#: dialogs/rc.cpp:46 kmymoneyutils.cpp:402 mymoney/mymoneyaccount.cpp:759
+#: mymoney/mymoneyscheduled.cpp:1002 mymoney/mymoneysecurity.cpp:175
+#: views/kforecastview.cpp:174 widgets/register.cpp:54
+#: widgets/register.cpp:485 widgets/transaction.cpp:708
+#: widgets/transaction.cpp:1459
+msgid "Unknown"
+msgstr "Bilinmeyen"
+
+#: mymoney/storage/mymoneystoragesql.cpp:191
+msgid ""
+"Database apparently in use\n"
+"Opened by %1 on %2 at %3.\n"
+"Open anyway?"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragesql.cpp:229
+msgid "Cannot currently create database for driver %1; please create manually"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragesql.cpp:244
+msgid "Error in create database %1; do you have create permissions?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1329
+#: mymoney/storage/mymoneystoragexml.cpp:166
+msgid "Loading transactions..."
+msgstr "Aktarımlar yükleniyor..."
+
+#: converter/mymoneygncreader.cpp:1190
+#: mymoney/storage/mymoneystoragexml.cpp:173
+msgid "Loading accounts..."
+msgstr "Hesaplar yükleniyor..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:180
+msgid "Loading securities..."
+msgstr "Senetler yükleniyor..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:187
+msgid "Loading reports..."
+msgstr "Raporlar yükleniyor..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:268
+msgid "Unknown XML tag %1 found in line %2"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:274
+msgid "Exception while creating a %1 element: %2"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragexml.cpp:513
+msgid "Loading file information..."
+msgstr "Dosya bilgileri yükleniyor..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:591
+msgid "Loading user information..."
+msgstr "Kullanıcı bilgileri yükleniyor..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:655
+msgid "Saving accounts..."
+msgstr "Hesaplar kaydediliyor..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:678
+msgid "Saving transactions..."
+msgstr "Aktarımlar kaydediliyor..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:747
+msgid "Saving reports..."
+msgstr "Raporlar kaydediliyor..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:762
+msgid "Saving budgets..."
+msgstr "Bütçeler kaydediliyor..."
+
+#: mymoney/storage/mymoneystoragedump.cpp:414
+msgid "not reconciled"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragedump.cpp:417
+msgid "cleared"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragedump.cpp:420
+msgid "reconciled"
+msgstr ""
+
+#: mymoney/storage/mymoneystoragedump.cpp:423
+msgid "frozen"
+msgstr "dondurulmuş"
+
+#: mymoney/storage/mymoneystoragedump.cpp:426
+msgid "unknown"
+msgstr "bilinmeyen"
+
+#: mymoney/mymoneyaccount.cpp:101
+msgid ""
+"Account %1 contains an opening balance. Please use a KMyMoney version >= 0.8 "
+"and < 0.9 to correct the problem."
+msgstr ""
+
+#: mymoney/mymoneyaccount.cpp:597
+msgid ""
+"_: Brokerage (suffix for account names)\n"
+"Brokerage"
+msgstr "Komisyon"
+
+#: kmymoneyutils.cpp:74 mymoney/mymoneyaccount.cpp:726
+msgid "Certificate of Deposit"
+msgstr ""
+
+#: kmymoneyutils.cpp:78 mymoney/mymoneyaccount.cpp:732
+msgid "Money Market"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:186 converter/mymoneytemplate.cpp:187
+#: dialogs/knewaccountdlg.cpp:1018 kmymoneyutils.cpp:86
+#: mymoney/mymoneyaccount.cpp:744 views/kaccountsview.cpp:360
+#: views/kbudgetview.cpp:372 views/kcategoriesview.cpp:178
+#: views/khomeview.cpp:1813 views/kmymoneyview.cpp:767
+#: widgets/kmymoneyaccountselector.cpp:68
+#: widgets/kmymoneyaccountselector.cpp:179
+#: widgets/kmymoneyaccountselector.cpp:370 widgets/register.cpp:828
+msgid "Income"
+msgstr "Gelir"
+
+#: converter/mymoneytemplate.cpp:190 converter/mymoneytemplate.cpp:191
+#: dialogs/knewaccountdlg.cpp:1020 kmymoneyutils.cpp:88
+#: mymoney/mymoneyaccount.cpp:747 views/kaccountsview.cpp:364
+#: views/kbudgetview.cpp:378 views/kcategoriesview.cpp:182
+#: views/kmymoneyview.cpp:768 widgets/kmymoneyaccountselector.cpp:72
+#: widgets/kmymoneyaccountselector.cpp:180
+#: widgets/kmymoneyaccountselector.cpp:380 widgets/register.cpp:829
+msgid "Expense"
+msgstr "Gider"
+
+#: kmymoneyutils.cpp:90 mymoney/mymoneyaccount.cpp:750
+msgid "Investment Loan"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:47
+msgid "Opening Balances"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:398
+msgid "Cannot remove transaction that references a closed account."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1414 mymoney/mymoneyfile.cpp:1433
+#: mymoney/mymoneyfile.cpp:1447 mymoney/mymoneyfile.cpp:1469
+msgid "* Problem with account '%1'"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1419
+msgid " * Parent account '%1' belongs to a different group."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1420 mymoney/mymoneyfile.cpp:1450
+msgid " New parent account is the top level account '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1436
+msgid " * Parent account '%1' does not contain '%2' as sub-account."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1449
+msgid " * The parent with id %1 does not exist anymore."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1471
+msgid " * Child account with id %1 does not exist anymore."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1472
+msgid " The child account list will be reconstructed."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1492
+msgid " * Unable to update account data in engine."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1499
+msgid "* Reconstructing the child lists for"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1536
+msgid " * Unable to update account data for account %1 in engine"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1554
+msgid " * Payee %1 recreated with fixed id"
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1583
+msgid " * Payee id updated in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1596
+msgid " * shares set to value in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1599
+msgid " * value set to shares in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1605
+msgid ""
+" * Split %2 in transaction '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1616
+msgid " * action marked as interest in split of transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1643
+msgid " * Payee id updated in split of schedule '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1649
+msgid ""
+" * Split in scheduled transaction '%1' contained value != 0 and shares == 0."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1650
+msgid " Shares set to value."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1658
+msgid " * Removed bankid from split in scheduled transaction '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1671
+msgid " * shares set to value in split in schedule '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1674
+msgid " * value set to shares in split in schedule '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1680
+msgid ""
+" * Split %2 in schedule '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1706
+msgid " * Payee id updated in report '%1'."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1723
+msgid " * Payee '%1' removed."
+msgstr ""
+
+#: mymoney/mymoneyfile.cpp:1730
+msgid "Finish! Data is consistent."
+msgstr "Bitir! Veriler tutarlı."
+
+#: mymoney/mymoneyfile.cpp:1732
+msgid "Finish! %1 problem(s) corrected. %2 problem(s) still present."
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:873 mymoney/mymoneyscheduled.cpp:918
+#: mymoney/mymoneyscheduled.cpp:969 mymoney/mymoneyscheduled.cpp:1265
+#: mymoney/mymoneyscheduletest.cpp:1336
+msgid "Once"
+msgstr "Bir kez"
+
+#: mymoney/mymoneyscheduled.cpp:875 mymoney/mymoneyscheduled.cpp:924
+#: mymoney/mymoneyscheduled.cpp:1267 mymoney/mymoneyscheduletest.cpp:1337
+#: widgets/rc.cpp:72
+msgid "Daily"
+msgstr "Günlük"
+
+#: mymoney/mymoneyscheduled.cpp:877 mymoney/mymoneyscheduled.cpp:931
+#: mymoney/mymoneyscheduled.cpp:1269 mymoney/mymoneyscheduletest.cpp:1338
+#: widgets/rc.cpp:73
+msgid "Weekly"
+msgstr "Haftalık"
+
+#: mymoney/mymoneyscheduled.cpp:881 mymoney/mymoneyscheduled.cpp:932
+#: mymoney/mymoneyscheduled.cpp:1273 mymoney/mymoneyscheduletest.cpp:1339
+msgid "Every other week"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:879 mymoney/mymoneyscheduled.cpp:1271
+#: mymoney/mymoneyscheduletest.cpp:1340
+msgid "Fortnightly"
+msgstr "İki haftada bir"
+
+#: mymoney/mymoneyscheduled.cpp:883 mymoney/mymoneyscheduled.cpp:941
+#: mymoney/mymoneyscheduled.cpp:1275 mymoney/mymoneyscheduletest.cpp:1341
+#, fuzzy
+msgid "Every half month"
+msgstr "Dört aylık"
+
+#: mymoney/mymoneyscheduled.cpp:887 mymoney/mymoneyscheduled.cpp:934
+#: mymoney/mymoneyscheduled.cpp:1279 mymoney/mymoneyscheduletest.cpp:1342
+msgid "Every four weeks"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:893 mymoney/mymoneyscheduled.cpp:935
+#: mymoney/mymoneyscheduled.cpp:1285 mymoney/mymoneyscheduletest.cpp:1344
+msgid "Every eight weeks"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:895 mymoney/mymoneyscheduled.cpp:948
+#: mymoney/mymoneyscheduled.cpp:1287 mymoney/mymoneyscheduletest.cpp:1345
+msgid "Every two months"
+msgstr "Her iki ayda bir"
+
+#: mymoney/mymoneyscheduled.cpp:897 mymoney/mymoneyscheduled.cpp:949
+#: mymoney/mymoneyscheduled.cpp:1289 mymoney/mymoneyscheduletest.cpp:1346
+msgid "Every three months"
+msgstr "Her üç ayda bir"
+
+#: mymoney/mymoneyscheduled.cpp:899 mymoney/mymoneyscheduled.cpp:1291
+#: mymoney/mymoneyscheduletest.cpp:1347 widgets/rc.cpp:76
+msgid "Quarterly"
+msgstr "Her dört ayda bir"
+
+#: mymoney/mymoneyscheduled.cpp:901 mymoney/mymoneyscheduled.cpp:950
+#: mymoney/mymoneyscheduled.cpp:1293 mymoney/mymoneyscheduletest.cpp:1348
+msgid "Every four months"
+msgstr "Dört aylık"
+
+#: mymoney/mymoneyscheduled.cpp:903 mymoney/mymoneyscheduled.cpp:951
+#: mymoney/mymoneyscheduled.cpp:1295 mymoney/mymoneyscheduletest.cpp:1349
+msgid "Twice yearly"
+msgstr "İki Yıllık"
+
+#: mymoney/mymoneyscheduled.cpp:905 mymoney/mymoneyscheduled.cpp:957
+#: mymoney/mymoneyscheduled.cpp:1297 mymoney/mymoneyscheduletest.cpp:1350
+#: widgets/rc.cpp:20 widgets/rc.cpp:77
+msgid "Yearly"
+msgstr "Yıllık"
+
+#: mymoney/mymoneyscheduled.cpp:907 mymoney/mymoneyscheduled.cpp:958
+#: mymoney/mymoneyscheduled.cpp:1299 mymoney/mymoneyscheduletest.cpp:1351
+msgid "Every other year"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:870 mymoney/mymoneyscheduled.cpp:913
+#: mymoney/mymoneyscheduled.cpp:966
+msgid "Any"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:885 mymoney/mymoneyscheduled.cpp:933
+#: mymoney/mymoneyscheduled.cpp:1277
+msgid "Every three weeks"
+msgstr "Her üç haftada"
+
+#: mymoney/mymoneyscheduled.cpp:889 mymoney/mymoneyscheduled.cpp:925
+#: mymoney/mymoneyscheduled.cpp:1281
+msgid "Every thirty days"
+msgstr "Her otuz günde"
+
+#: mymoney/mymoneyscheduled.cpp:971
+#, fuzzy
+msgid "Day"
+msgstr "Günler"
+
+#: mymoney/mymoneyscheduled.cpp:973 reports/listtable.cpp:206
+#: widgets/kmymoneycalendar.cpp:123 widgets/rc.cpp:97
+msgid "Week"
+msgstr "Hafta"
+
+#: mymoney/mymoneyscheduled.cpp:975
+#, fuzzy
+msgid "Half-month"
+msgstr "Dört aylık"
+
+#: mymoney/mymoneyscheduled.cpp:977 reports/listtable.cpp:205
+#: widgets/kmymoneycalendar.cpp:124 widgets/rc.cpp:96
+msgid "Month"
+msgstr "Ay"
+
+#: dialogs/rc.cpp:400 mymoney/mymoneyscheduled.cpp:979 views/rc.cpp:14
+msgid "Year"
+msgstr "Yıl"
+
+#: mymoney/mymoneyscheduled.cpp:989
+msgid "Bill"
+msgstr "Fatura"
+
+#: dialogs/rc.cpp:107 dialogs/rc.cpp:162 dialogs/rc.cpp:249 dialogs/rc.cpp:754
+#: mymoney/mymoneyscheduled.cpp:992 widgets/kmymoneycombo.cpp:420
+#: widgets/register.cpp:571
+msgid "Deposit"
+msgstr "Depozit"
+
+#: mymoney/mymoneyscheduled.cpp:995 reports/querytable.cpp:594
+#: reports/querytable.cpp:696 widgets/kmymoneycombo.cpp:419
+msgid "Transfer"
+msgstr "Aktarım"
+
+#: mymoney/mymoneyscheduled.cpp:1035
+msgid "Any (Error)"
+msgstr ""
+
+#: dialogs/rc.cpp:114 mymoney/mymoneyscheduled.cpp:1047
+msgid "Change the date to the previous Friday"
+msgstr ""
+
+#: dialogs/rc.cpp:115 mymoney/mymoneyscheduled.cpp:1050
+msgid "Change the date to the next Monday"
+msgstr ""
+
+#: mymoney/mymoneyscheduled.cpp:1053
+msgid "Do Nothing"
+msgstr "Hiçbir şey Yapma"
+
+#: kmymoney2.cpp:312
+#, fuzzy
+msgid "Open database..."
+msgstr "Veritabanı aç ..."
+
+#: kmymoney2.cpp:313
+#, fuzzy
+msgid "Save as database..."
+msgstr "Veritabanı olarak kaydet ..."
+
+#: kmymoney2.cpp:314
+msgid "Backup..."
+msgstr "Yedekle..."
+
+#: kmymoney2.cpp:315 kmymoney2.cpp:321
+#, fuzzy
+msgid "QIF..."
+msgstr "QIF ..."
+
+#: kmymoney2.cpp:316
+#, fuzzy
+msgid "Gnucash..."
+msgstr "Gnucash ..."
+
+#: kmymoney2.cpp:317
+#, fuzzy
+msgid "Statement file..."
+msgstr "Dosya kaydediliyor..."
+
+#: kmymoney2.cpp:319 kmymoney2.cpp:320
+#, fuzzy
+msgid "Account Template..."
+msgstr "Hesap Şablonu ..."
+
+#: kmymoney2.cpp:322
+msgid "Personal Data..."
+msgstr "Kişisel Veriler..."
+
+#: kmymoney2.cpp:325
+msgid "Dump Memory"
+msgstr ""
+
+#: kmymoney2.cpp:327
+msgid "File-Information..."
+msgstr "Dosya-Bilgileri..."
+
+#: kmymoney2.cpp:332
+msgid "Find transaction..."
+msgstr "Aktarım bul..."
+
+#: kmymoney2.cpp:337
+msgid "Show Transaction Detail"
+msgstr "Aktarım Detayını Göster"
+
+#: kmymoney2.cpp:338 rc.cpp:60
+msgid "Hide reconciled transactions"
+msgstr "Uzlaştırılmış aktarımları gizle"
+
+#: kmymoney2.cpp:339 rc.cpp:57
+msgid "Hide unused categories"
+msgstr "Kullanılmayan kategorileri gizle"
+
+#: kmymoney2.cpp:340
+msgid "Show all accounts"
+msgstr "Tüm hesapları göster"
+
+#: kmymoney2.cpp:345
+msgid "New institution..."
+msgstr "Yeni şirket..."
+
+#: kmymoney2.cpp:346
+msgid "Edit institution..."
+msgstr "Şirketi düzenle..."
+
+#: kmymoney2.cpp:347
+msgid "Delete institution..."
+msgstr "Şirketi sil..."
+
+#: kmymoney2.cpp:352
+msgid "New account..."
+msgstr "Yeni hesap..."
+
+#: kmymoney2.cpp:354
+msgid "Open ledger"
+msgstr "Ana hesap defterini aç"
+
+#: kmymoney2.cpp:355
+msgid "Reconcile..."
+msgstr "Uzlaştır..."
+
+#: kmymoney2.cpp:356
+#, fuzzy
+msgid ""
+"_: Finish reconciliation\n"
+"Finish"
+msgstr "Uzlaştırmayı bitir"
+
+#: kmymoney2.cpp:357
+#, fuzzy
+msgid ""
+"_: Postpone reconciliation\n"
+"Postpone"
+msgstr "Uzlaştırmayı ertele"
+
+#: kmymoney2.cpp:358
+msgid "Edit account..."
+msgstr "Hesabı düzenle..."
+
+#: kmymoney2.cpp:359
+msgid "Delete account..."
+msgstr "Hesabı sil..."
+
+#: kmymoney2.cpp:360
+msgid "Close account"
+msgstr "Hesabı kapat"
+
+#: kmymoney2.cpp:361
+msgid "Reopen account"
+msgstr "Hesabı yeniden aç"
+
+#: kmymoney2.cpp:362
+msgid "Transaction report"
+msgstr "Aktarım raporu"
+
+#: kmymoney2.cpp:364
+msgid "Show balance chart..."
+msgstr ""
+
+#: kmymoney2.cpp:366
+#, fuzzy
+msgid "Map to online account"
+msgstr "Hesap filtrelenemedi"
+
+#: kmymoney2.cpp:367
+#, fuzzy
+msgid "Unmap account"
+msgstr "hesap"
+
+#: dialogs/settings/rc.cpp:126 kmymoney2.cpp:368 views/kpayeesview.cpp:363
+#: widgets/rc.cpp:50
+#, fuzzy
+msgid "Update"
+msgstr "&Tümünü Güncelle"
+
+#: kmymoney2.cpp:372
+#, fuzzy
+msgid "Update account..."
+msgstr "Hesabı düzenle..."
+
+#: kmymoney2.cpp:373
+#, fuzzy
+msgid "Update all accounts..."
+msgstr "Hesabı düzenle..."
+
+#: kmymoney2.cpp:378
+msgid "New category..."
+msgstr "Yeni kategori..."
+
+#: kmymoney2.cpp:379
+msgid "Edit category..."
+msgstr "Kategoriyi düzenle..."
+
+#: kmymoney2.cpp:380
+msgid "Delete category..."
+msgstr "Kategoriyi sil..."
+
+#: kmymoney2.cpp:386
+msgid "QIF Profile Editor..."
+msgstr "QIF Profil Düzenleyici..."
+
+#: kmymoney2.cpp:387
+#, fuzzy
+msgid "Securities..."
+msgstr "Senetler ..."
+
+#: kmymoney2.cpp:388
+#, fuzzy
+msgid "Currencies..."
+msgstr "Para birimleri..."
+
+#: kmymoney2.cpp:389
+#, fuzzy
+msgid "Prices..."
+msgstr "Fiyatlar ..."
+
+#: kmymoney2.cpp:390
+msgid "Update Stock and Currency Prices..."
+msgstr "Stok ve Para Birimi Değerlerini Güncelle..."
+
+#: kmymoney2.cpp:391
+msgid "Consistency Check"
+msgstr "Tutarlılık Kontrolü"
+
+#: kmymoney2.cpp:392
+msgid "Performance-Test"
+msgstr "Başarım-Testi"
+
+#: kmymoney2.cpp:393
+msgid "KCalc..."
+msgstr "KCalc..."
+
+#: kmymoney2.cpp:399
+msgid "Enable all messages"
+msgstr "Tüm Uyarıları Etkinleştir"
+
+#: kmymoney2.cpp:400
+msgid "KDE language settings..."
+msgstr "KDE dil ayarları.."
+
+#: kmymoney2.cpp:405
+msgid "&Show tip of the day"
+msgstr "&Günün ipucunu göster"
+
+#: kmymoney2.cpp:410
+msgid ""
+"_: New transaction button\n"
+"New"
+msgstr "Yeni"
+
+#: kmymoney2.cpp:415
+msgid ""
+"_: Edit transaction button\n"
+"Edit"
+msgstr "Düzenle"
+
+#: kmymoney2.cpp:417
+msgid ""
+"_: Enter transaction\n"
+"Enter"
+msgstr "Gir"
+
+#: kmymoney2.cpp:420
+msgid ""
+"_: Edit split button\n"
+"Edit splits"
+msgstr ""
+
+#: kmymoney2.cpp:421
+msgid ""
+"_: Cancel transaction edit\n"
+"Cancel"
+msgstr "İptal"
+
+#: kmymoney2.cpp:422
+msgid ""
+"_: Delete transaction\n"
+"Delete"
+msgstr "Sil"
+
+#: kmymoney2.cpp:423
+msgid ""
+"_: Duplicate transaction\n"
+"Duplicate"
+msgstr "İkile"
+
+#: kmymoney2.cpp:425 kmymoney2.cpp:4826 kmymoney2.cpp:5107
+#, fuzzy
+msgid ""
+"_: Button text for match transaction\n"
+"Match"
+msgstr "Gir"
+
+#: kmymoney2.cpp:426
+#, fuzzy
+msgid ""
+"_: Accept 'imported' and 'matched' transaction\n"
+"Accept"
+msgstr "Kabul et"
+
+#: kmymoney2.cpp:428
+msgid ""
+"_: Toggle reconciliation flag\n"
+"Toggle"
+msgstr "Değiştir"
+
+#: kmymoney2.cpp:429
+msgid ""
+"_: Mark transaction cleared\n"
+"Cleared"
+msgstr ""
+
+#: kmymoney2.cpp:430
+msgid ""
+"_: Mark transaction reconciled\n"
+"Reconciled"
+msgstr ""
+
+#: kmymoney2.cpp:431
+msgid ""
+"_: Mark transaction not reconciled\n"
+"Not reconciled"
+msgstr ""
+
+#: kmymoney2.cpp:432
+msgid ""
+"_: Select all transactions\n"
+"Select all"
+msgstr "Tümünü seç"
+
+#: kmymoney2.cpp:434 kmymoney2.cpp:5497
+msgid "Goto account"
+msgstr "Hesaba git"
+
+#: kmymoney2.cpp:435 kmymoney2.cpp:5495
+msgid "Goto payee"
+msgstr "Alacaklıya git"
+
+#: kmymoney2.cpp:436
+#, fuzzy
+msgid "Create scheduled transaction..."
+msgstr "Zamanlanmış aktarım gir"
+
+#: kmymoney2.cpp:437
+msgid "Assign next number"
+msgstr ""
+
+#: kmymoney2.cpp:438
+msgid ""
+"_: Combine transactions\n"
+"Combine"
+msgstr "Birleştir"
+
+#: kmymoney2.cpp:440
+msgid "New investment"
+msgstr "Yeni yatırım"
+
+#: kmymoney2.cpp:441
+msgid "Edit investment..."
+msgstr "Yatırımı düzenle..."
+
+#: kmymoney2.cpp:442
+msgid "Delete investment..."
+msgstr "Yatırımı sil..."
+
+#: kmymoney2.cpp:443
+msgid "Online price update..."
+msgstr "Çevrimiçi fiyat güncelleme..."
+
+#: kmymoney2.cpp:444
+msgid "Manual price update..."
+msgstr "El ile fiyat güncelleme..."
+
+#: kmymoney2.cpp:446
+#, fuzzy
+msgid "New scheduled transaction..."
+msgstr "Zamanlanmış aktarım gir"
+
+#: kmymoney2.cpp:447
+#, fuzzy
+msgid "Edit scheduled transaction..."
+msgstr "Zamanlanmış aktarım gir"
+
+#: kmymoney2.cpp:448
+#, fuzzy
+msgid "Delete scheduled transaction..."
+msgstr "Zamanlanmış aktarım gir"
+
+#: kmymoney2.cpp:449
+#, fuzzy
+msgid "Duplicate scheduled transaction"
+msgstr "Zamanlanmış aktarım gir"
+
+#: kmymoney2.cpp:450
+#, fuzzy
+msgid "Enter next transaction..."
+msgstr "Aktarımı sil ..."
+
+#: kmymoney2.cpp:451
+#, fuzzy
+msgid "Skip next transaction..."
+msgstr "Bu aktarımı atla"
+
+#: kmymoney2.cpp:453
+msgid "New payee"
+msgstr "Yeni alacaklı"
+
+#: kmymoney2.cpp:454
+msgid "Rename payee"
+msgstr "Alacaklıyı yeniden adlandır"
+
+#: kmymoney2.cpp:455
+msgid "Delete payee"
+msgstr "Alacaklıyı sil"
+
+#: kmymoney2.cpp:457
+msgid "New budget"
+msgstr "Yeni Bütçe"
+
+#: kmymoney2.cpp:458
+msgid "Rename budget"
+msgstr "Bütçeyi yeniden adlandır"
+
+#: kmymoney2.cpp:459
+msgid "Delete budget"
+msgstr "Bütçeyi sil"
+
+#: kmymoney2.cpp:460
+msgid "Copy budget"
+msgstr "Bütçeyi kopyala"
+
+#: kmymoney2.cpp:461
+msgid "Change budget year"
+msgstr "Bütçe yılını değiştir"
+
+#: kmymoney2.cpp:462
+msgid ""
+"_: Budget based on forecast\n"
+"Forecast"
+msgstr "Tahmin"
+
+#: kmymoney2.cpp:467 kmymoney2.cpp:3990 kmymoney2.cpp:3993 kmymoney2.cpp:3999
+msgid "New currency"
+msgstr "Yeni para birimi"
+
+#: kmymoney2.cpp:468 kmymoney2.cpp:4021 kmymoney2.cpp:4026
+msgid "Rename currency"
+msgstr "Para birimini yeniden adlandır"
+
+#: kmymoney2.cpp:469 kmymoney2.cpp:4039
+msgid "Delete currency"
+msgstr "Para birimini sil"
+
+#: dialogs/rc.cpp:69 kmymoney2.cpp:470
+msgid "Select as base currency"
+msgstr "Temel para birimi olarak seç"
+
+#: kmymoney2.cpp:481
+msgid "View back"
+msgstr "Önceki"
+
+#: kmymoney2.cpp:482
+msgid "View forward"
+msgstr "Sonraki"
+
+#: kmymoney2.cpp:611
+msgid "KMyMoney file needs saving. Save ?"
+msgstr "KMyMoney dosyasının kaydedilmesi gerekiyor, Kaydedilsin mi?"
+
+#: kmymoney2.cpp:757
+msgid "Creating new document..."
+msgstr "Yeni belge oluşturuluyor..."
+
+#: kmymoney2.cpp:869 kmymoney2.cpp:884
+msgid "Open a file."
+msgstr "Bir dosya aç."
+
+#: kmymoney2.cpp:872
+msgid ""
+"%1|KMyMoney files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|KMyMoney dosyaları\n"
+"%2|Tüm Dosyalar (*.*)"
+
+#: kmymoney2.cpp:873
+msgid "Open File..."
+msgstr "Dosya Aç..."
+
+#: kmymoney2.cpp:925 kstartuplogo.cpp:100
+msgid "Loading file..."
+msgstr "Dosya yükleniyor..."
+
+#: kmymoney2.cpp:986
+msgid ""
+"<b>%1</b> is either an invalid filename or the file does not exist. You can "
+"open another file or create a new one."
+msgstr ""
+
+#: kmymoney2.cpp:986
+msgid "File not found"
+msgstr "Dosya bulunamadı"
+
+#: kmymoney2.cpp:989
+msgid "File <b>%1</b> is already opened in another instance of KMyMoney"
+msgstr ""
+
+#: kmymoney2.cpp:989
+msgid "Duplicate open"
+msgstr "Üstüste açma"
+
+#: kmymoney2.cpp:1001
+msgid "Saving file..."
+msgstr "Dosya kaydediliyor..."
+
+#: kmymoney2.cpp:1035 kmymoney2.cpp:1047 kmymoney2.cpp:1071
+#, fuzzy, c-format
+msgid "Additional encryption key(s) to be used: %1"
+msgstr "Kullanılacak şifreleme anahtarı"
+
+#: kmymoney2.cpp:1056
+msgid "Saving file with a new filename..."
+msgstr "Dosya yeni bir dosya ismi ile kaydediliyor..."
+
+#: kmymoney2.cpp:1067
+msgid "Encryption key to be used"
+msgstr "Kullanılacak şifreleme anahtarı"
+
+#: kmymoney2.cpp:1072
+#, fuzzy
+msgid "Manage additional keys"
+msgstr "Ek ödeme gir"
+
+#: kmymoney2.cpp:1079
+msgid "No encryption"
+msgstr "Şifreleme yok"
+
+#: kmymoney2.cpp:1102
+msgid ""
+"_: KMyMoney (Filefilter)\n"
+"KMyMoney files"
+msgstr "KMyMoney dosyaları"
+
+#: kmymoney2.cpp:1103
+msgid ""
+"_: XML (Filefilter)\n"
+"XML files"
+msgstr "XML dosyaları"
+
+#: kmymoney2.cpp:1104
+msgid ""
+"_: Anonymous (Filefilter)\n"
+"Anonymous files"
+msgstr "Anonim dosyalar"
+
+#: kmymoney2.cpp:1105
+msgid "All files"
+msgstr "Tüm dosyalar"
+
+#: kmymoney2.cpp:1193
+msgid "Saving file to database..."
+msgstr "Dosya veritabanına kaydediliyor..."
+
+#: kmymoney2.cpp:1207
+#, fuzzy
+msgid "Cannot save to current database."
+msgstr "%1 veritabanı açılamadı\n"
+
+#: kmymoney2.cpp:1225
+msgid "Closing window..."
+msgstr "Pencere kapatılıyor..."
+
+#: kmymoney2.cpp:1228 kmymoney2.cpp:1249
+msgid "The file has been changed, save it ?"
+msgstr "Dosya değiştirildi, kaydedilsin mi?"
+
+#: kmymoney2.cpp:1339 kmymoney2.cpp:1352
+msgid "Ready."
+msgstr "Hazır."
+
+#: kmymoney2.cpp:1397 kmymoney2.cpp:1433
+msgid "No KMyMoneyFile open"
+msgstr "Açılacak KMyMoney dosyası yok"
+
+#: kmymoney2.cpp:1401
+msgid "Viewing personal data..."
+msgstr "Kişisel veriler gösteriliyor..."
+
+#: kmymoney2.cpp:1408
+msgid "Edit Personal Data"
+msgstr "Kişisel Bilgileri Düzenle"
+
+#: kmymoney2.cpp:1424
+#, c-format
+msgid "Unable to store user information: %1"
+msgstr "Kullanıcı bilgileri kaydedilemedi: %1"
+
+#: kmymoney2.cpp:1447
+msgid "Importing account templates."
+msgstr "Hesap şablonları içeri aktarılıyor."
+
+#: kmymoney2.cpp:1462
+msgid "Unable to import template(s): %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:1471
+msgid "Exporting account templates."
+msgstr "Hesap şablonları dışarıya aktarılıyor."
+
+#: kmymoney2.cpp:1474
+msgid ""
+"*.kmt|KMyMoney template files\n"
+"*.*|All files"
+msgstr ""
+"*.kmt|KMyMoney şablon dosyaları\n"
+"*.*|Tüm dosyalar"
+
+#: kmymoney2.cpp:1475
+msgid "Save as..."
+msgstr "Farklı kaydet..."
+
+#: kmymoney2.cpp:1517
+msgid "Importing file..."
+msgstr "Dosya içeri aktarılıyor..."
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "The statements have been processed with the following results:"
+msgstr ""
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:1754 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+#, fuzzy
+msgid "Statement stats"
+msgstr "Yatırım detayları"
+
+#: kmymoney2.cpp:1602
+msgid ""
+"You cannot import GnuCash data into an existing file. Do you wish to save "
+"this file?"
+msgstr ""
+
+#: kmymoney2.cpp:1615
+msgid "Importing a Gnucash file."
+msgstr "Bir Gnucash dosyası içeri aktarılıyor."
+
+#: kmymoney2.cpp:1618
+msgid ""
+"%1|Gnucash files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Gnucash dosyaları\n"
+"%2|Tüm Dosyalar (*.*)"
+
+#: kmymoney2.cpp:1619
+msgid "Import Gnucash file..."
+msgstr "Gnucash dosyası içeri aktar ..."
+
+#: kmymoney2.cpp:1658
+msgid "Importing an XML Statement."
+msgstr "XML dosyası içeri aktarılıyor."
+
+#: kmymoney2.cpp:1661
+msgid ""
+"%1|XML files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|XML Dosyaları\n"
+"%2|All Dosyalar (*.*)"
+
+#: kmymoney2.cpp:1662
+msgid "Import XML Statement..."
+msgstr "İçeri XML Dosyası aktar..."
+
+#: kmymoney2.cpp:1718
+msgid "Error importing %1: This file is not a valid KMM statement file."
+msgstr ""
+
+#: kmymoney2.cpp:1718
+msgid "Invalid Statement"
+msgstr "Geçersiz Dosya"
+
+#: kmymoney2.cpp:1754
+msgid "The statement has been processed with the following results:"
+msgstr ""
+
+#: kmymoney2.cpp:1763
+msgid "Exporting file..."
+msgstr "Dosya dışarı aktarılıyor..."
+
+#: kmymoney2.cpp:1786
+msgid "The file <b>%1</b> already exists. Do you really want to override it?"
+msgstr "<b>%1</b> dosyası zaten var. Üzerine yazmak ister misiniz?"
+
+#: kmymoney2.cpp:1786
+msgid "File already exists"
+msgstr "Bu dosya zaten var"
+
+#: dialogs/rc.cpp:347 dialogs/rc.cpp:649 dialogs/rc.cpp:798 kmymoney2.cpp:1815
+msgid "General"
+msgstr "Genel"
+
+#: kmymoney2.cpp:1816
+msgid "Register"
+msgstr "Kaydet"
+
+#: kmymoney2.cpp:1817 views/khomeview.cpp:88 views/kmymoneyview.cpp:136
+msgid "Home"
+msgstr "Başlangıç"
+
+#: kmymoney2.cpp:1818 views/kmymoneyview.cpp:176
+#, fuzzy
+msgid ""
+"Scheduled\n"
+"transactions"
+msgstr "Zamanlanmış Aktarımlar"
+
+#: kmymoney2.cpp:1819
+msgid "Encryption"
+msgstr "Şifreleme"
+
+#: kmymoney2.cpp:1820
+msgid "Colors"
+msgstr "Renkler"
+
+#: dialogs/rc.cpp:344 dialogs/settings/rc.cpp:107 kmymoney2.cpp:1822
+#: widgets/rc.cpp:33
+msgid "Online Quotes"
+msgstr "Çevrimiçi Aktarımlar"
+
+#: kmymoney2.cpp:1823 reports/pivottable.cpp:2426 views/kmymoneyview.cpp:251
+#: views/kmymoneyview.cpp:253 views/kreportsview.cpp:1415 views/rc.cpp:41
+msgid "Forecast"
+msgstr "Tahmin"
+
+#: kmymoney2.cpp:1824
+msgid "Plugins"
+msgstr "Eklentiler"
+
+#: kmymoney2.cpp:1893
+msgid ""
+"The file must be saved first before it can be backed up. Do you want to "
+"continue?"
+msgstr ""
+
+#: kmymoney2.cpp:1910
+msgid ""
+"The current implementation of the backup functionality only supports local "
+"files as source files! Your current source file is '%1'."
+msgstr ""
+
+#: kmymoney2.cpp:1913
+msgid "Local files only"
+msgstr "Sadece yerel dosyalar"
+
+#: kmymoney2.cpp:1928
+#, c-format
+msgid "Mounting %1"
+msgstr "Bağlanıyor %1"
+
+#: kmymoney2.cpp:1967
+msgid "Backup file for today exists on that device. Replace ?"
+msgstr ""
+
+#: dialogs/rc.cpp:7 kmymoney2.cpp:1967 kmymoney2.cpp:1994 kmymoney2.cpp:2024
+#: kmymoney2.cpp:2032 kmymoney2.cpp:2057 kmymoney2.cpp:2059
+msgid "Backup"
+msgstr "Yedekle"
+
+#: kmymoney2.cpp:1967
+msgid "&Replace"
+msgstr "&Değiştir"
+
+#: kmymoney2.cpp:1972 kmymoney2.cpp:1997 kmymoney2.cpp:2016 kmymoney2.cpp:2035
+#, c-format
+msgid "Unmounting %1"
+msgstr "Ayrılıyor %1"
+
+#: kmymoney2.cpp:1987
+#, c-format
+msgid "Writing %1"
+msgstr "Yazılıyor %1"
+
+#: kmymoney2.cpp:1994
+msgid "Error mounting device"
+msgstr "Aygıt bağlanırken hata"
+
+#: converter/mymoneygncreader.cpp:1995 kmymoney2.cpp:2023 kmymoney2.cpp:2055
+msgid "Done"
+msgstr "Tamam"
+
+#: kmymoney2.cpp:2024 kmymoney2.cpp:2057
+msgid "File successfully backed up"
+msgstr "Dosya başarılı şekilde yedeklendi"
+
+#: kmymoney2.cpp:2032
+msgid "Error copying file to device"
+msgstr "Dosya aygıta kopyalanırken hata"
+
+#: kmymoney2.cpp:2059
+msgid "Error unmounting device"
+msgstr "Aygıt ayrılırken hata"
+
+#: kmymoney2.cpp:2143
+#, c-format
+msgid "Cannot add institution: %1"
+msgstr "Şirket eklenemedi: %1"
+
+#: kmymoney2.cpp:2185
+#, c-format
+msgid "Unable to store institution: %1"
+msgstr "Şirket kaydedilemedi: %1"
+
+#: kmymoney2.cpp:2192
+#, c-format
+msgid "Unable to edit institution: %1"
+msgstr "Şirket düzenlenemedi: %1"
+
+#: kmymoney2.cpp:2203
+msgid "Do you really want to delete institution <b>%1</b> ?"
+msgstr "<b>%1</b> şirketini gerçekten silmek istiyor musunuz?"
+
+#: kmymoney2.cpp:2211 kmymoney2.cpp:2215
+#, c-format
+msgid "Unable to delete institution: %1"
+msgstr "Şirket silinemedi: %1"
+
+#: kmymoney2.cpp:2268
+#, fuzzy, c-format
+msgid "Unable to find account: %1"
+msgstr "Hesap eklenemedi: %1 "
+
+#: kmymoney2.cpp:2309
+msgid ""
+"This account is a liability and if the opening balance represents money "
+"owed, then it should be negative. Negate the amount?\n"
+"\n"
+"Please click Yes to change the opening balance to %1,\n"
+"Please click No to leave the amount as %2,\n"
+"Please click Cancel to abort the account creation."
+msgstr ""
+
+#: kmymoney2.cpp:2345 kmymoney2.cpp:2346
+msgid "Loan payout"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:892 kmymoney2.cpp:2374
+#, c-format
+msgid "Unable to add account: %1"
+msgstr "Hesap eklenemedi: %1 "
+
+#: kmymoney2.cpp:2392
+msgid ""
+"The category <b>%1</b> currently does not exist. Do you want to create it?"
+"<p><i>The parent account will default to <b>%2</b> but can be changed in the "
+"following dialog</i>."
+msgstr ""
+
+#: kmymoney2.cpp:2392
+msgid "Create category"
+msgstr "Kategori oluştur"
+
+#: kmymoney2.cpp:2429
+msgid "Create a new Category"
+msgstr "Yeni bir Kategori Oluştur"
+
+#: kmymoney2.cpp:2505
+#, c-format
+msgid "Unable to create account: %1"
+msgstr "Hesap oluşturulamadı: %1"
+
+#: kmymoney2.cpp:2516
+msgid ""
+"The security <b>%1</b> currently does not exist as sub-account of <b>%2</b>. "
+"Do you want to create it?"
+msgstr ""
+
+#: kmymoney2.cpp:2517
+#, fuzzy
+msgid "Create security"
+msgstr "Senedi sil"
+
+#: kmymoney2.cpp:2551
+msgid "Do you really want to delete the investment <b>%1</b>?"
+msgstr "<b>%1</b> yatırımını gerçekten silmek istiyor musunuz?"
+
+#: kmymoney2.cpp:2551
+msgid "Delete investment"
+msgstr "Yatırımı sil"
+
+#: kmymoney2.cpp:2558
+#, c-format
+msgid "Unable to delete investment: %1"
+msgstr "Yatırım silinemedi: %1"
+
+#: kmymoney2.cpp:2640 kmymoney2.cpp:2646
+#, fuzzy
+msgid "Unable to add scheduled transaction: "
+msgstr "Aktarımlar eklenemedi"
+
+#: kmymoney2.cpp:2722
+#, fuzzy
+msgid "Adjusting transactions..."
+msgstr "Aktarımlar ayarlanıyor ..."
+
+#: kmymoney2.cpp:2747
+#, fuzzy
+msgid "Adjusting scheduled transactions..."
+msgstr "Aktarımlar ayarlanıyor ..."
+
+#: kmymoney2.cpp:2765
+#, fuzzy
+msgid "Adjusting budgets..."
+msgstr "Zamanlamalar ayarlanıyor ..."
+
+#: kmymoney2.cpp:2783
+msgid ""
+"Unable to exchange category <b>%1</b> with category <b>%2</b>. Reason: %3"
+msgstr ""
+"<b>%1</b> kategorisi <b>%2</b> kategorisi ile değiştirilemedi. Sebep: %3"
+
+#: kmymoney2.cpp:2804
+msgid "Do you really want to delete category <b>%1</b>?"
+msgstr "<b>%1</b> kategorisini gerçekten silmek istiyor musunuz?"
+
+#: kmymoney2.cpp:2811
+msgid "Unable to delete category <b>%1</b>. Cause: %2"
+msgstr "<b>%1</b> kategorisi silinemedi. Sebep: %2"
+
+#: kmymoney2.cpp:2823
+msgid ""
+"Do you want to delete category <b>%1</b> with all its sub-categories or only "
+"the category itself? If you only delete the category itself, all its sub-"
+"categories will be made sub-categories of <b>%2</b>."
+msgstr ""
+
+#: kmymoney2.cpp:2827
+msgid "Delete all"
+msgstr "Tümünü sil"
+
+#: kmymoney2.cpp:2828
+msgid "Just the category"
+msgstr "Sadece kategoriyi"
+
+#: kmymoney2.cpp:2858
+msgid ""
+"Some sub-categories of category <b>%1</b> cannot be deleted, because they "
+"are still used. They will be made sub-categories of <b>%2</b>. Proceed?"
+msgstr ""
+
+#: kmymoney2.cpp:2878
+msgid "Unable to delete a sub-category of category <b>%1</b>. Reason: %2"
+msgstr ""
+
+#: kmymoney2.cpp:2889
+msgid "Do you really want to delete account <b>%1</b>?"
+msgstr "<b>%1</b> hesabını gerçekten silmek istiyor musunuz?"
+
+#: kmymoney2.cpp:2901
+msgid "Unable to delete account '%1'. Cause: %2"
+msgstr "'%1' hesabı silinemedi. Sebep: %2"
+
+#: kmymoney2.cpp:2917
+#, fuzzy
+msgid "Edit account '%1'"
+msgstr "Hesabı düzenle..."
+
+#: kmymoney2.cpp:2922
+#, fuzzy
+msgid "Edit category '%1'"
+msgstr "Bir kategori düzenle"
+
+#: kmymoney2.cpp:3008
+msgid "Unable to modify account '%1'. Cause: %2"
+msgstr "'%1' hesabı düzenlenemedi. Sebep: %2"
+
+#: kmymoney2.cpp:3065
+msgid ""
+"KMyMoney has detected some overdue scheduled transactions for this account. "
+"Do you want to enter those scheduled transactions now?"
+msgstr ""
+
+#: kmymoney2.cpp:3065
+#, fuzzy
+msgid "Scheduled transactions found"
+msgstr "Zamanlanmış Aktarımlar"
+
+#: kmymoney2.cpp:3163
+msgid ""
+"You are about to finish the reconciliation of this account with a difference "
+"between your bank statement and the transactions marked as cleared.\n"
+"Are you sure you want to finish the reconciliation ?"
+msgstr ""
+
+#: kmymoney2.cpp:3165
+msgid "Confirm end of reconciliation"
+msgstr ""
+
+#: kmymoney2.cpp:3339
+msgid ""
+"You have closed this account. It remains in the system because you have "
+"transactions which still refer to it, but is not shown in the views. You can "
+"make it visible again by going to the View menu and selecting <b>Show all "
+"accounts</b> or by unselecting the <b>Don't show closed accounts</b> setting."
+msgstr ""
+
+#: kmymoney2.cpp:3379
+msgid "<b>%1</b> cannot be moved to institution <b>%2</b>. Reason: %3"
+msgstr ""
+
+#: kmymoney2.cpp:3393
+msgid "<b>%1</b> cannot be moved to <b>%2</b>. Reason: %3"
+msgstr ""
+
+#: kmymoney2.cpp:3408
+msgid "%1 YTD Account Transactions"
+msgstr ""
+
+#: dialogs/kbalancechartdlg.cpp:71 kmymoney2.cpp:3409
+#: views/kforecastview.cpp:650 views/khomeview.cpp:276
+#: views/khomeview.cpp:1384 views/kreportsview.cpp:619
+msgid "Generated Report"
+msgstr "Oluşturulmuş Rapor"
+
+#: dialogs/rc.cpp:324 dialogs/settings/rc.cpp:80 kmymoney2.cpp:3411
+#: views/kreportsview.cpp:1062 views/rc.cpp:58 views/rc.cpp:59
+msgid "Transactions"
+msgstr "Aktarımlar"
+
+#: kmymoney2.cpp:3449
+#, fuzzy, c-format
+msgid "Unable to add scheduled transaction: %1"
+msgstr "Zamanlama eklenemedi: %1"
+
+#: kmymoney2.cpp:3449
+#, fuzzy
+msgid "Add scheduled transaction"
+msgstr "Zamanlanmış aktarım gir"
+
+#: kmymoney2.cpp:3489
+msgid ""
+"You have entered a scheduled transaction date of <b>%1</b>. Because the "
+"scheduled transaction was last paid on <b>%2</b>, KMyMoney will "
+"automatically adjust the scheduled transaction date to the next date unless "
+"the last payment date is reset. Do you want to reset the last payment date?"
+msgstr ""
+
+#: kmymoney2.cpp:3489
+msgid "Reset Last Payment Date"
+msgstr "Son Ödeme Tarihini Sıfırla"
+
+#: kmymoney2.cpp:3499 kmymoney2.cpp:3519 kmymoney2.cpp:3531
+#, fuzzy
+msgid "Unable to modify scheduled transaction '%1'"
+msgstr "'%1' zamanlaması düzenlenemedi"
+
+#: kmymoney2.cpp:3543
+#, fuzzy
+msgid "Are you sure you want to delete the scheduled transaction <b>%1</b>?"
+msgstr "<b>%1</b> zamanlamasını gerçekten silmek istiyor musunuz?"
+
+#: kmymoney2.cpp:3546
+msgid ""
+"In case of loan payments it is currently not possible to recreate the "
+"scheduled transaction."
+msgstr ""
+
+#: kmymoney2.cpp:3555
+#, fuzzy
+msgid "Unable to remove scheduled transaction '%1'"
+msgstr "'%1' zamanlaması silinemedi"
+
+#: kmymoney2.cpp:3569
+#, fuzzy, c-format
+msgid ""
+"_: Copy of scheduled transaction name\n"
+"Copy of %1"
+msgstr "%1 ögesinin kopyası"
+
+#: kmymoney2.cpp:3581 kmymoney2.cpp:4352
+msgid "Unable to duplicate transaction(s): %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:3595
+#, fuzzy
+msgid ""
+"Do you really want to skip the <b>%1</b> transaction scheduled for <b>%2</b>?"
+msgstr "<b>%1</b> kategorisini gerçekten silmek istiyor musunuz?"
+
+#: kmymoney2.cpp:3605
+#, fuzzy
+msgid "Unable to skip scheduled transaction <b>%1</b>."
+msgstr "<b>%1</b> zamanlanamadı."
+
+#: kmymoney2.cpp:3618
+#, fuzzy
+msgid "Unknown scheduled transaction '%1'"
+msgstr "Bilinmeyen zamanlama '%1'"
+
+#: kmymoney2.cpp:3673
+msgid ""
+"Are you sure you wish to stop this scheduled transaction from being entered "
+"into the register?\n"
+"\n"
+"KMyMoney will prompt you again next time it starts unless you manually enter "
+"it later."
+msgstr ""
+
+#: kmymoney2.cpp:3725 kmymoney2.cpp:3732
+#, fuzzy
+msgid "Unable to enter scheduled transaction '%1'"
+msgstr "Zamanlanmış aktarım gir"
+
+#: kmymoney2.cpp:3743 kmymoney2.cpp:3783
+msgid "New Payee"
+msgstr "Yeni Alacaklı"
+
+#: kmymoney2.cpp:3745
+msgid "Do you want to add <b>%1</b> as payer/receiver ?"
+msgstr "<b>%1</b> ögesini alacaklı/alıcı olarak eklemek istiyor musunuz?"
+
+#: converter/mymoneystatementreader.cpp:892 kmymoney2.cpp:3747
+msgid "New payee/receiver"
+msgstr "Yeni alacaklı/alıcı"
+
+#: kmymoney2.cpp:3773
+msgid "Unable to add payee"
+msgstr "Alacaklı eklenemedi"
+
+#: kmymoney2.cpp:3826
+msgid "Do you really want to remove the payee <b>%1</b>?"
+msgstr "<b>%1</b> alacaklısını gerçekten silmek istiyor musunuz?"
+
+#: kmymoney2.cpp:3828
+msgid "Do you really want to remove all selected payees?"
+msgstr "Seçilen tüm alacaklıları gerçekten silmek istiyor musunuz?"
+
+#: kmymoney2.cpp:3830
+msgid "Remove Payee"
+msgstr "Alacaklı sil"
+
+#: kmymoney2.cpp:3870
+msgid ""
+"At least one transaction/scheduled transaction is still referenced by a "
+"payee. Currently you have all payees selected. However, at least one payee "
+"must remain so that the transaction/scheduled transaction can be reassigned."
+msgstr ""
+
+#: kmymoney2.cpp:3925
+msgid "Unable to reassign payee of transaction/split"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:534 converter/mymoneystatementreader.cpp:959
+#: kmymoney2.cpp:3926 kmymoney2.cpp:3983 views/kbudgetview.cpp:636
+#: views/kbudgetview.cpp:737 views/kbudgetview.cpp:751
+#: views/kpayeesview.cpp:519 views/kpayeesview.cpp:870
+msgid "thrown in"
+msgstr ""
+
+#: kmymoney2.cpp:3982
+msgid "Unable to remove payee(s)"
+msgstr "Alacaklı(lar) silinemedi"
+
+#: kmymoney2.cpp:3990
+msgid "Enter ISO 4217 code for the new currency"
+msgstr ""
+
+#: kmymoney2.cpp:3999
+#, c-format
+msgid "Cannot create new currency. %1"
+msgstr "Yeni para birimi oluşturulamadı. %1"
+
+#: kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, c-format
+msgid "Cannot rename currency. %1"
+msgstr "Para birimi yeniden adlandırılamadı. %1"
+
+#: kmymoney2.cpp:4039
+msgid "Cannot delete currency %1. %2"
+msgstr "%1 para birimi silinemedi. %2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Cannot set %1 as base currency: %2"
+msgstr "%1 temel para birimi olarak ayarlanamadı: %2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Set base currency"
+msgstr "Temel para birimini ayarla"
+
+#: kmymoney2.cpp:4065
+#, c-format
+msgid "Budget %1"
+msgstr "Bütçe %1"
+
+#: kmymoney2.cpp:4075
+msgid "Budget %1 (%2)"
+msgstr "Bütçe %1 (%2)"
+
+#: kmymoney2.cpp:4090 kmymoney2.cpp:4139
+msgid "Unable to add budget: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4105
+msgid "Do you really want to remove the budget <b>%1</b>?"
+msgstr "<b>%1</b> bütçesini gerçekten silmek istiyor musunuz?"
+
+#: kmymoney2.cpp:4107
+msgid "Do you really want to remove all selected budgets?"
+msgstr "Seçilen tüm bütçeleri gerçekten silmek istiyor musunuz?"
+
+#: kmymoney2.cpp:4109
+msgid "Remove Budget"
+msgstr "Bütçeyi Kaldır"
+
+#: kmymoney2.cpp:4122
+msgid "Unable to remove budget: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4134 views/kreportsview.cpp:659
+#, c-format
+msgid "Copy of %1"
+msgstr "%1 ögesinin kopyası"
+
+#: kmymoney2.cpp:4164
+msgid "Select year"
+msgstr "Yılı seçin"
+
+#: kmymoney2.cpp:4164
+msgid "Budget year"
+msgstr "Bütçe yılı"
+
+#: kmymoney2.cpp:4176 kmymoney2.cpp:4214 kmymoney2.cpp:4274
+msgid "Unable to modify budget: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4192 kmymoney2.cpp:4250
+msgid ""
+"The current budget already contains data. Continuing will replace all "
+"current values of this budget."
+msgstr ""
+
+#: kmymoney2.cpp:4222
+msgid ""
+"Please be aware that changes made in the following dialog affect all KDE "
+"applications not only KMyMoney."
+msgstr ""
+
+#: kmymoney2.cpp:4292
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to delete the transactions anyway?"
+msgstr ""
+
+#: kmymoney2.cpp:4295 views/kgloballedgerview.cpp:1043
+msgid "Transaction already reconciled"
+msgstr ""
+
+#: kmymoney2.cpp:4301
+msgid "Do you really want to delete the selected transaction?"
+msgstr "Seçilen aktarımı gerçekten silmek istiyor musunuz?"
+
+#: kmymoney2.cpp:4303
+msgid "Do you really want to delete all %1 selected transactions?"
+msgstr "Seçilen %1 aktarımı gerçekten silmek istiyor musunuz?"
+
+#: kmymoney2.cpp:4305
+msgid "Delete transaction"
+msgstr "Aktarımı sil"
+
+#: kmymoney2.cpp:4306
+msgid "Deleting transactions"
+msgstr "Aktarımlar siliniyor"
+
+#: kmymoney2.cpp:4321
+msgid "Duplicating transactions"
+msgstr "Aktarımlar ikileniyor"
+
+#: kmymoney2.cpp:4378
+msgid "Unable to delete transaction(s): %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4452 kmymoney2.cpp:4622
+msgid "Unable to modify transaction: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4514
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling and<br>- <b>Cancel</b> returns to the "
+"transaction editor.<p>You can also select an option to save the transaction "
+"automatically when e.g. selecting another transaction."
+msgstr ""
+
+#: kmymoney2.cpp:4514 kmymoney2.cpp:4517
+msgid "Cancel transaction edit"
+msgstr "Aktarım düzenlemeyi iptal et"
+
+#: kmymoney2.cpp:4517
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling.<p>You can also select an option to save the "
+"transaction automatically when e.g. selecting another transaction."
+msgstr ""
+
+#: kmymoney2.cpp:4667
+msgid "Unable to accept transaction: %1, thrown in %2:%3"
+msgstr ""
+
+#: kmymoney2.cpp:4846
+#, fuzzy
+msgid "Unable to unmatch the selected transactions"
+msgstr "Bu aktarımlar eşlenemedi"
+
+#: kmymoney2.cpp:4885
+msgid "No manually entered transaction selected for matching"
+msgstr ""
+
+#: kmymoney2.cpp:4887
+msgid "No imported transaction selected for matching"
+msgstr ""
+
+#: kmymoney2.cpp:4895
+#, fuzzy
+msgid "Unable to match the selected transactions"
+msgstr "Bu aktarımlar eşlenemedi"
+
+#: kmymoney2.cpp:5097
+msgid "Create a new transaction"
+msgstr "Yeni bir aktarım oluştur"
+
+#: kmymoney2.cpp:5163
+#, fuzzy
+msgid "Duplicate the current selected transactions"
+msgstr "Seçili aktarımları sil"
+
+#: kmymoney2.cpp:5223
+#, fuzzy
+msgid ""
+"_: Button text for unmatch transaction\n"
+"Unmatch"
+msgstr "Gir"
+
+#: kmymoney2.cpp:5451 kmymoney2.cpp:5473
+msgid "Goto '%1'"
+msgstr ""
+
+#: kmymoney2.cpp:5582
+msgid "Running consistency check..."
+msgstr "Tutarlılık kontolü çalıştırılıyor..."
+
+#: kmymoney2.cpp:5590
+#, c-format
+msgid "Consistency check failed: %1"
+msgstr "Tutarlılık kontrolü başarısız oldu: %1"
+
+#: kmymoney2.cpp:5594
+msgid "Consistency check result"
+msgstr "Tutarlılık kontolü sonucu"
+
+#: kmymoney2.cpp:5603
+#, fuzzy
+msgid "Checking for overdue scheduled transactions..."
+msgstr "Zamanlanmış aktarım gir"
+
+#: kmymoney2.cpp:5740
+msgid ""
+"You must first select a KMyMoney file before you can import a statement."
+msgstr ""
+
+#: kmymoney2.cpp:5746
+msgid "Importing a statement via Web Connect"
+msgstr ""
+
+#: kmymoney2.cpp:5759
+msgid ""
+"Unable to import %1 using %2 plugin. The plugin returned the following "
+"error: %3"
+msgstr ""
+
+#: kmymoney2.cpp:5759 plugins/ofximport/ofximporterplugin.cpp:646
+msgid "Importing error"
+msgstr "İçeri aktarma hatası"
+
+#: kmymoney2.cpp:5780
+msgid "All messages have been enabled."
+msgstr "Tüm uyarılar etkinleştirildi."
+
+#: kmymoney2.cpp:5780
+msgid "All messages"
+msgstr "Tüm İletiler"
+
+#: kmymoney2.cpp:5855
+#, fuzzy
+msgid "Auto saving..."
+msgstr "Otomatik olarak kaydediliyor ..."
+
+#: kmymoney2.cpp:5913
+#, fuzzy
+msgid "Unable to setup online parameters for account ''%1'"
+msgstr "Hesap oluşturulamadı: %1"
+
+#: kmymoney2.cpp:5928
+msgid ""
+"Do you really want to remove the mapping of account <b>%1</b> to an online "
+"account? Depending on the details of the online banking method used, this "
+"action cannot be reverted."
+msgstr ""
+
+#: kmymoney2.cpp:5928
+#, fuzzy
+msgid "Remove mapping to online account"
+msgstr "Hesap filtrelenemedi"
+
+#: kmymoney2.cpp:5939
+#, fuzzy, c-format
+msgid "Unable to unmap account from online account: %1"
+msgstr "Hesap oluşturulamadı: %1"
+
+#: kmymoney2.cpp:5956
+#, fuzzy
+msgid " (Brokerage)"
+msgstr "%1 (Komisyon)"
+
+#: kmymoney2.cpp:5957
+msgid ""
+"You try to map a brokerage account to an online account. This is usually not "
+"advisable. In general, the investment account should be mapped to the online "
+"account. Please cancel if you intended to map the investment account, "
+"continue otherwise"
+msgstr ""
+
+#: kmymoney2.cpp:5957
+#, fuzzy
+msgid "Mapping brokerage account"
+msgstr "Komisyon hesabı oluştur"
+
+#: kmymoney2.cpp:5964
+msgid "Select online banking plugin"
+msgstr ""
+
+#: kmymoney2.cpp:6005
+#, fuzzy, c-format
+msgid "Unable to map account to online account: %1"
+msgstr "Hesap oluşturulamadı: %1"
+
+#: converter/mymoneyqifreader.cpp:407 converter/mymoneytemplate.cpp:73
+#: views/kmymoneyview.cpp:590
+msgid "Error while loading file '%1'!"
+msgstr "Dosya yüklenirken hata '%1'!"
+
+#: converter/mymoneyqifreader.cpp:409 converter/mymoneyqifreader.cpp:965
+#: converter/mymoneytemplate.cpp:75 views/kmymoneyview.cpp:592
+msgid "File access error"
+msgstr "Dosya erişim hatası"
+
+#: converter/mymoneytemplate.cpp:84
+msgid "<b>%1</b> is not a template file."
+msgstr "<b>%1</b> bir şablon dosyası değil."
+
+#: converter/mymoneytemplate.cpp:85 views/kmymoneyview.cpp:603
+msgid "Filetype Error"
+msgstr "Dosya Tipi Hatası"
+
+#: converter/mymoneytemplate.cpp:93
+msgid "Error while reading template file <b>%1</b> in line %2, column %3"
+msgstr ""
+"<b>%1</b> şablon dosyası okunurken dosyanın %2.satırının %3.sütununda hata "
+"oluştu"
+
+#: converter/mymoneytemplate.cpp:94
+msgid "Template Error"
+msgstr "Şablon Hatası"
+
+#: converter/mymoneytemplate.cpp:101
+msgid "File '%1' not found!"
+msgstr "%1 dosyası bulunamadı!"
+
+#: converter/mymoneytemplate.cpp:142
+msgid "Invalid tag <b>%1</b> in template file <b>%2</b>!"
+msgstr "<b>%2</b> şablon dosyasında geçersiz etiket <b>%1</b>!"
+
+#: converter/mymoneytemplate.cpp:214
+#, c-format
+msgid "Loading template %1"
+msgstr "Şablon yükleniyor %1"
+
+#: converter/mymoneytemplate.cpp:241
+msgid "Invalid top-level account type <b>%1</b> in template file <b>%2</b>!"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:309
+msgid ""
+"Invalid flag type <b>%1</b> for account <b>%3</b> in template file <b>%2</b>!"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:398 converter/mymoneytemplate.cpp:401
+#: views/kmymoneyview.cpp:1151 views/kmymoneyview.cpp:1154
+msgid "Unable to write changes to '%1'"
+msgstr ""
+
+#: converter/mymoneytemplate.cpp:407 views/kmymoneyview.cpp:1162
+msgid "Unable to upload to '%1'"
+msgstr ""
+
+#: converter/mymoneyqifwriter.cpp:70
+msgid ""
+"Unexpected exception '%1' thrown in %2, line %3 caught in MyMoneyQifWriter::"
+"write()"
+msgstr ""
+
+#: converter/mymoneyqifwriter.cpp:80
+msgid "Unable to open file '%1' for writing"
+msgstr "'%1' dosyası yazmak için açılamadı"
+
+#: converter/webpricequote.cpp:340
+#, c-format
+msgid "Symbol found: %1"
+msgstr "Sembol bulundu: %1"
+
+#: converter/webpricequote.cpp:368
+msgid "Price found: %1 (%2)"
+msgstr "Fiyat bulundu: %1 (%2)"
+
+#: converter/webpricequote.cpp:380
+#, c-format
+msgid "Date found: %1"
+msgstr "Tarih bulundu: %1"
+
+#: converter/webpricequote.cpp:397 converter/webpricequote.cpp:403
+#, c-format
+msgid "Unable to update price for %1"
+msgstr "%1 için fiyat güncellenemedi"
+
+#: converter/mymoneyqifreader.cpp:170
+msgid ""
+"_: Category name\n"
+"Reinvested dividend"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:173
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (long term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:176
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (short term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:179
+msgid ""
+"_: Category name\n"
+"Dividend"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:182
+msgid ""
+"_: Category name\n"
+"Interest"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:185
+msgid ""
+"_: Category name\n"
+"Capital Gain (short term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:188
+msgid ""
+"_: Category name\n"
+"Capital Gain (mid term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:191
+msgid ""
+"_: Category name\n"
+"Capital Gain (long term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:194
+msgid ""
+"_: Category name\n"
+"Returned capital"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:197
+msgid ""
+"_: Category name\n"
+"Miscellaneous income"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:200
+msgid ""
+"_: Category name\n"
+"Miscellaneous expense"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:203
+msgid ""
+"_: Category name\n"
+"Investment fees"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:205
+#, fuzzy, c-format
+msgid "Unknown QIF type %1"
+msgstr "Bilinmeyen alacaklı"
+
+#: converter/mymoneyqifreader.cpp:355
+#, fuzzy
+msgid "Date format selection"
+msgstr "Kategori seçimi"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Pick the date format that suits your input file"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:366
+#, fuzzy
+msgid "Importing QIF ..."
+msgstr "Dosya içeri aktarılıyor..."
+
+#: converter/mymoneyqifreader.cpp:442
+#, fuzzy
+msgid "Reading QIF ..."
+msgstr "QIF ..."
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Adding transactions"
+msgstr "Aktarımlar eklleniyor"
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Now adding the transactions to your ledger..."
+msgstr "Aktarımlar şimdi ana hesap defterinize ekleniyor..."
+
+#: converter/mymoneyqifreader.cpp:533
+msgid "Unable to add transactions"
+msgstr "Aktarımlar eklenemedi"
+
+#: converter/mymoneyqifreader.cpp:567
+msgid ""
+"_: QIF tag for liability account\n"
+"Oth L"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:572
+#, fuzzy
+msgid ""
+"_: QIF tag for category\n"
+"Cat"
+msgstr "VAT"
+
+#: converter/mymoneyqifreader.cpp:575
+msgid ""
+"_: QIF tag for security\n"
+"Security"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:578
+#, fuzzy
+msgid ""
+"_: QIF tag for investment account\n"
+"Invst"
+msgstr "Sadece Yatırım hesaplarını içer"
+
+#: converter/mymoneyqifreader.cpp:581
+msgid ""
+"_: QIF tag for prices\n"
+"Prices"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:599
+msgid ""
+"_: QIF tag for a class\n"
+"Class"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:753 converter/mymoneyqifreader.cpp:2203
+msgid ""
+"The %1 account currently has an opening balance of %2. This QIF file reports "
+"an opening balance of %3. Would you like to overwrite the current balance "
+"with the one from the QIF file?"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:754 converter/mymoneyqifreader.cpp:2204
+msgid "Overwrite opening balance"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:879 converter/mymoneyqifreader.cpp:890
+#: converter/mymoneyqifreader.cpp:914
+msgid "Autogenerated by QIF importer"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:907
+#, fuzzy
+msgid "QIF imported, no account name supplied"
+msgstr "Hesap ismi girilmedi"
+
+#: converter/mymoneyqifreader.cpp:940
+msgid ""
+"KMyMoney has imported a second opening balance transaction into account <b>%"
+"1</b> which differs from the one found already on file. Please correct this "
+"manually once the import is done."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:940
+msgid "Opening balance problem"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:963
+#, fuzzy
+msgid "Error while creating opening balance transaction"
+msgstr "Seçili aktarımları düzenle"
+
+#: converter/mymoneyqifreader.cpp:1029 converter/mymoneyqifreader.cpp:1276
+msgid ""
+"The date entry \"%1\" read from the file cannot be interpreted through the "
+"current date profile setting of \"%2\".\n"
+"\n"
+"Pressing \"Continue\" will assign todays date to the transaction. Pressing "
+"\"Cancel\" will abort the import operation. You can then restart the import "
+"and select a different QIF profile or create a new one."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1035 converter/mymoneyqifreader.cpp:1282
+msgid "Invalid date format"
+msgstr "Geçersiz tarih biçemi"
+
+#: converter/mymoneyqifreader.cpp:1398
+#: converter/mymoneystatementreader.cpp:589
+#: converter/mymoneystatementreader.cpp:592
+msgid "Statement Importer"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1413
+#: converter/mymoneystatementreader.cpp:644
+msgid ""
+"This investment account does not contain the \"%1\" security. Transactions "
+"involving this security will be ignored."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:1415
+#: converter/mymoneystatementreader.cpp:612
+#: converter/mymoneystatementreader.cpp:644
+msgid "Security not found"
+msgstr "Senet bulunamadı"
+
+#: converter/mymoneyqifreader.cpp:2021
+#, fuzzy
+msgid "%1 (Investment)"
+msgstr "Yatırım"
+
+#: converter/mymoneyqifreader.cpp:2022
+msgid "Autogenerated by QIF importer from type Mutual account entry"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2085 converter/mymoneyqifreader.cpp:2228
+msgid "account"
+msgstr "hesap"
+
+#: converter/mymoneyqifreader.cpp:2086
+msgid "al"
+msgstr "al"
+
+#: converter/mymoneyqifreader.cpp:2093
+msgid "category"
+msgstr "kategori"
+
+#: converter/mymoneyqifreader.cpp:2094
+msgid "ei"
+msgstr "ei"
+
+#: converter/mymoneyqifreader.cpp:2095
+msgid "Category selection"
+msgstr "Kategori seçimi"
+
+#: converter/mymoneyqifreader.cpp:2110
+msgid "Account \"%1\" disappeared: "
+msgstr "\"%1\" Hesabı kayboldu: "
+
+#: converter/mymoneyqifreader.cpp:2131
+msgid "The %1 '%2' does not exist. Do you want to create it?"
+msgstr "%1 '%2' yok. Oluşturmak ister misiniz?"
+
+#: converter/mymoneyqifreader.cpp:2140
+#, c-format
+msgid "Select %1"
+msgstr "Seç %1"
+
+#: converter/mymoneyqifreader.cpp:2142
+msgid ""
+"The %1 <b>%2</b> currently exists. Do you want to import transactions to "
+"this account?"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2147
+msgid ""
+"The %1 <b>%2</b> currently does not exist. You can create a new %3 by "
+"pressing the <b>Create</b> button or select another %4 manually from the "
+"selection box."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2154
+#, c-format
+msgid "Import transactions to %1"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2155
+msgid ""
+"No %1 information has been found in the selected QIF file. Please select an "
+"account using the selection box in the dialog or create a new %2 by pressing "
+"the <b>Create</b> button."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2229
+msgid "You must select or create an account."
+msgstr "Bir hesap seçmelisiniz ya da oluşturmalısınız."
+
+#: converter/mymoneyqifreader.cpp:2231
+msgid "You must select or create a category."
+msgstr "Bir kategori seçmelisiniz ya da oluşturmalısınız."
+
+#: converter/mymoneystatementreader.cpp:100
+#, fuzzy
+msgid "_Fees"
+msgstr "Ödemeler"
+
+#: converter/mymoneystatementreader.cpp:106
+msgid "_Dividend"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:289
+#, c-format
+msgid "Importing statement for account %1"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:291
+#, fuzzy
+msgid "Importing statement without transactions"
+msgstr "Yatırım aktarımı"
+
+#: converter/mymoneystatementreader.cpp:385
+msgid " Statement balance is not contained in statement."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:387
+msgid " Statement balance on %1 is reported to be %2"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:389
+#, fuzzy
+msgid " Transactions"
+msgstr "Aktarımlar"
+
+#: converter/mymoneystatementreader.cpp:390
+msgid " %1 processed"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:391
+msgid " %1 added"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:392
+msgid " %1 matched"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:393
+#, fuzzy
+msgid " %1 duplicates"
+msgstr "İkile"
+
+#: converter/mymoneystatementreader.cpp:394
+#, fuzzy
+msgid " Payees"
+msgstr "Alacaklılar"
+
+#: converter/mymoneystatementreader.cpp:395
+msgid " %1 created"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:483
+#, c-format
+msgid "Error creating security record: %1"
+msgstr "Senet kaydı oluşturulurken bir hata oluştu: %1"
+
+#: converter/mymoneystatementreader.cpp:612
+msgid ""
+"This imported statement contains investment transactions with no security. "
+"These transactions will be ignored."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:803
+msgid "(Fees) "
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:880
+msgid ""
+"Do you want to add \"%1\" as payee/receiver?\n"
+"\n"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:881
+msgid ""
+"Selecting \"Yes\" will create the payee, \"No\" will skip creation of a "
+"payee record and remove the payee information from this transaction. "
+"Selecting \"Cancel\" aborts the import operation.\n"
+"\n"
+"If you select \"No\" here and mark the \"Don't ask again\" checkbox, the "
+"payee information for all following transactions referencing \"%1\" will be "
+"removed."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:917
+#, fuzzy
+msgid "Save Category"
+msgstr "Kategori"
+
+#: converter/mymoneystatementreader.cpp:918
+#, fuzzy
+msgid "No Category"
+msgstr "Üst Kategori"
+
+#: converter/mymoneystatementreader.cpp:919 dialogs/rc.cpp:4
+msgid "Abort"
+msgstr "İptal"
+
+#: converter/mymoneystatementreader.cpp:926
+msgid "Please select a default category for payee '%1':"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:958
+msgid "Unable to add payee/receiver"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid ""
+"KMyMoney has found a scheduled transaction named <b>%1</b> which matches an "
+"imported transaction. Do you want KMyMoney to enter this schedule now so "
+"that the transaction can be matched? "
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1162
+#, fuzzy
+msgid "Schedule found"
+msgstr "Zamanlanmış"
+
+#: converter/mymoneystatementreader.cpp:1219
+msgid "Problem adding or matching imported transaction with id '%1': %2"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1268
+msgid ""
+"<b>You have downloaded a statement for the following account:</b><br><br>"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1269
+#, fuzzy, c-format
+msgid " - Account Name: %1"
+msgstr " - Hesap Adı: %1<br>"
+
+#: converter/mymoneystatementreader.cpp:1270
+#, fuzzy, c-format
+msgid " - Account Type: %1"
+msgstr " - Hesap Tipi: %1<br>"
+
+#: converter/mymoneystatementreader.cpp:1271
+#, fuzzy, c-format
+msgid " - Account Number: %1"
+msgstr " - Hesap Numarası: %1<br>"
+
+#: converter/mymoneystatementreader.cpp:1279
+msgid "Do you want to import transactions to this account?"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1281
+msgid ""
+"KMyMoney cannot determine which of your accounts to use. You can create a "
+"new account by pressing the <b>Create</b> button or select another one "
+"manually from the selection box below."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1287
+msgid ""
+"No account information has been found in the selected statement file. Please "
+"select an account using the selection box in the dialog or create a new "
+"account by pressing the <b>Create</b> button."
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:1294
+msgid "Import transactions"
+msgstr "Aktarımları içeri aktar"
+
+#: converter/mymoneystatementreader.cpp:1330
+msgid ""
+"You must select an account, create a new one, or press the <b>Abort</b> "
+"button."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:119
+msgid "%1: Sorry. This importer cannot handle version %2 of element %3"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:193
+#, c-format
+msgid "Account%1"
+msgstr "Hesap%1"
+
+#: converter/mymoneygncreader.cpp:197
+#, c-format
+msgid "Stock%1"
+msgstr "Stok%1"
+
+#: converter/mymoneygncreader.cpp:206
+#, c-format
+msgid "Payee%1"
+msgstr "Alacaklı%1"
+
+#: converter/mymoneygncreader.cpp:212
+#, c-format
+msgid "Schedule%1"
+msgstr "Zamanlama%1"
+
+#: converter/mymoneygncreader.cpp:262
+msgid "This version of the importer cannot handle multi-book files."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:912
+msgid "Invalid header for file. Should be 'gnc-v2'"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:937 converter/mymoneygncreader.cpp:972
+#: converter/mymoneygncreader.cpp:1062
+#, c-format
+msgid ""
+"Import failed:\n"
+"\n"
+"%1"
+msgstr ""
+"İçeriye aktarma işlemi başarısız oldu:\n"
+"\n"
+"%1"
+
+#: converter/mymoneygncreader.cpp:1065
+msgid "Import complete"
+msgstr "İçeri aktarma işlemi tamamlandı"
+
+#: converter/mymoneygncreader.cpp:1120
+msgid "Disguise your wealth"
+msgstr "Servetinizi Gizleyin"
+
+#: converter/mymoneygncreader.cpp:1121
+msgid ""
+"Each monetary value on your file will be multiplied by a random number "
+"between 0.01 and 1.99\n"
+"with a different value used for each transaction. In addition, to further "
+"disguise the true\n"
+"values, you may enter a number between %1 and %2 which will be applied to "
+"all values.\n"
+"These numbers will not be stored in the file."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1135
+msgid "Loading commodities..."
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1160
+msgid "Loading prices..."
+msgstr "Fiyatlar yükleniyor..."
+
+#: converter/mymoneygncreader.cpp:1164 converter/mymoneygncreader.cpp:1171
+msgid "Imported History"
+msgstr "İçeri Aktarılan Geçmiş"
+
+#: converter/mymoneygncreader.cpp:1251
+#, c-format
+msgid "Current importer does not recognize GnuCash account type %1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1471
+msgid "Imported Transaction"
+msgstr "İçeriye Aktarılmış Aktarım"
+
+#: converter/mymoneygncreader.cpp:1519
+msgid "Loading templates..."
+msgstr "Şabolanlar yükleniyor..."
+
+#: converter/mymoneygncreader.cpp:1531
+msgid "Unknown payee"
+msgstr "Bilinmeyen alacaklı"
+
+#: converter/mymoneygncreader.cpp:1723
+msgid "Loading schedules..."
+msgstr "Zamanlamalar yükleniyor..."
+
+#: converter/mymoneygncreader.cpp:1735
+#, c-format
+msgid "Can't find template transaction for schedule %1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1910
+msgid "Reorganizing accounts..."
+msgstr "Hesaplar yeniden düzenleniyor..."
+
+#: converter/mymoneygncreader.cpp:1972
+msgid ""
+"Your main currency seems to be %1 (%2); do you want to set this as your base "
+"currency?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:1993
+msgid "More"
+msgstr "Daha fazla"
+
+#: converter/mymoneygncreader.cpp:1997
+msgid "Save Report"
+msgstr "Raporu Kaydet"
+
+#: converter/mymoneygncreader.cpp:2017
+msgid ""
+"Problems were encountered in converting schedule '%1'.\n"
+"Do you want to review or edit it now?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2039
+msgid ""
+"Found:\n"
+"\n"
+msgstr ""
+"Bulundu:\n"
+"\n"
+
+#: converter/mymoneygncreader.cpp:2040
+msgid " commodities (equities)\n"
+msgstr " mallar (özkaynaklar)\n"
+
+#: converter/mymoneygncreader.cpp:2041
+msgid " prices\n"
+msgstr " fiyatlar\n"
+
+#: converter/mymoneygncreader.cpp:2042
+msgid " accounts\n"
+msgstr " hesaplar\n"
+
+#: converter/mymoneygncreader.cpp:2043
+msgid " transactions\n"
+msgstr " aktarımlar\n"
+
+#: converter/mymoneygncreader.cpp:2044
+msgid " schedules\n"
+msgstr " zamanlamalar\n"
+
+#: converter/mymoneygncreader.cpp:2047
+msgid "No inconsistencies were detected"
+msgstr "Hiç tutarsızlık tespit edilmedi"
+
+#: converter/mymoneygncreader.cpp:2049
+msgid " inconsistencies were detected and corrected\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2054
+msgid " orphan accounts were created\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2059
+msgid " possible schedule problems were noted\n"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2064
+msgid "Small Business Features (Customers, Invoices, etc.)"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2065 views/kmymoneyview.cpp:241
+#: views/kmymoneyview.cpp:243
+msgid "Budgets"
+msgstr "Bütçeler"
+
+#: converter/mymoneygncreader.cpp:2066
+msgid "Lots"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2068
+msgid "The following features found in your file are not currently supported:"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2071
+msgid ""
+"\n"
+"\n"
+"Press More for further information"
+msgstr ""
+"\n"
+"\n"
+"Daha çok bilgi edinmek için Daha Fazla düğmesine basın"
+
+#: converter/mymoneygncreader.cpp:2139
+msgid "Orphan created from unknown gnucash account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2170
+msgid "Internal error - invalid interval char in incrDate"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2233
+msgid "Enter the investment account name "
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2234
+msgid "My Investments"
+msgstr "Yatırımlarım"
+
+#: converter/mymoneygncreader.cpp:2269
+#, c-format
+msgid "Select parent investment account or enter new name. Stock %1"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2292 converter/mymoneygncreader.cpp:2307
+msgid "%1 is not an Investment Account. Do you wish to make it one?"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2408
+msgid ""
+"An Investment account must be a child of an Asset account\n"
+"Account %1 will be stored under the main Asset account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2410
+msgid ""
+"An Income account must be a child of an Income account\n"
+"Account %1 will be stored under the main Income account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2412
+msgid ""
+"An Expense account must be a child of an Expense account\n"
+"Account %1 will be stored under the main Expense account"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2414
+msgid ""
+"One or more transactions contain a reference to an otherwise unknown "
+"account\n"
+"An asset account with the name %1 has been created to hold the data"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2416
+msgid "Schedule %1 has interval of %2 which is not currently available"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2417
+msgid "Schedule %1 dropped at user request"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2418
+msgid "Schedule %1 contains unknown action (key = %2, type = %3)"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2419
+msgid "Schedule %1 contains multiple actions; only one has been imported"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2420
+msgid "Schedule %1 contains no valid splits"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2421
+msgid ""
+"Schedule %1 appears to contain a formula. GnuCash formulae are not "
+"convertible"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2422
+msgid ""
+"Schedule %1 contains unknown interval specification; please check for "
+"correct operation"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2423
+msgid ""
+"Schedule %1 contains a deferred interval specification; please check for "
+"correct operation"
+msgstr ""
+
+#: converter/mymoneygncreader.cpp:2424
+msgid ""
+"Account or Category %1, transaction date %2; split contains invalid value; "
+"please check"
+msgstr ""
+
+#: kmymoneyutils.cpp:146
+msgid "&New Schedule..."
+msgstr "&Yeni Zamanlama..."
+
+#: kmymoneyutils.cpp:148
+msgid "Create a new schedule."
+msgstr "Yeni bir zamanlama oluştur."
+
+#: kmymoneyutils.cpp:149
+msgid "Use this to create a new schedule."
+msgstr "Yeni bir zamanlama oluşturmak için bunu kullan."
+
+#: kmymoneyutils.cpp:158
+msgid "&Filter"
+msgstr "&Filtre"
+
+#: kmymoneyutils.cpp:160
+msgid "Filter out accounts"
+msgstr "Hesapları filtrele"
+
+#: kmymoneyutils.cpp:161
+msgid "Use this to filter out accounts"
+msgstr "Hesapları filtrelemek için bunu kullan"
+
+#: kmymoneyutils.cpp:192
+msgid "Preferred accounts"
+msgstr "Tercih edilen hesaplar"
+
+#: kmymoneyutils.cpp:193
+msgid "Payment accounts"
+msgstr "Ödeme hesapları"
+
+#: kmymoneyutils.cpp:194
+msgid "Favorite reports"
+msgstr "Beğenilen raporlar"
+
+#: kmymoneyutils.cpp:195
+msgid "Forecast (schedule)"
+msgstr "Tahmin (zamanlama)"
+
+#: kmymoneyutils.cpp:196
+msgid "Networth forecast"
+msgstr ""
+
+#: kmymoneyutils.cpp:197
+msgid "Forecast (history)"
+msgstr ""
+
+#: kmymoneyutils.cpp:198
+#, fuzzy
+msgid "Assets and Liabilities"
+msgstr "Varlıklar & Borçlar"
+
+#: kmymoneyutils.cpp:199 reports/pivottable.cpp:2416 views/khomeview.cpp:1393
+#: widgets/rc.cpp:70
+msgid "Budget"
+msgstr "Bütçe"
+
+#: kmymoneyutils.cpp:200
+#, fuzzy
+msgid "CashFlow"
+msgstr "Nakit"
+
+#: dialogs/kenterscheduledlg.cpp:153 kmymoneyutils.cpp:366
+msgid "Unable to load schedule details"
+msgstr "Zamanlama ayrıntıları yüklenemedi"
+
+#: kmymoneyutils.cpp:390 widgets/register.cpp:473
+msgid ""
+"_: Reconcile state 'Not reconciled'\n"
+"Not reconciled"
+msgstr ""
+
+#: kmymoneyutils.cpp:393 widgets/register.cpp:476
+msgid ""
+"_: Reconcile state 'Cleared'\n"
+"Cleared"
+msgstr ""
+
+#: kmymoneyutils.cpp:396 widgets/register.cpp:479
+msgid ""
+"_: Reconcile state 'Reconciled'\n"
+"Reconciled"
+msgstr ""
+
+#: kmymoneyutils.cpp:399 widgets/register.cpp:482
+msgid ""
+"_: Reconcile state 'Frozen'\n"
+"Frozen"
+msgstr ""
+
+#: kmymoneyutils.cpp:410
+msgid ""
+"_: Reconcile flag C\n"
+"C"
+msgstr "C"
+
+#: kmymoneyutils.cpp:413
+msgid ""
+"_: Reconcile flag R\n"
+"R"
+msgstr "R"
+
+#: kmymoneyutils.cpp:416
+msgid ""
+"_: Reconcile flag F\n"
+"F"
+msgstr "F"
+
+#: kmymoneyutils.cpp:419
+msgid ""
+"_: Flag for unknown reconciliation state\n"
+"?"
+msgstr "?"
+
+#: _tips.cpp:3
+msgid ""
+"<p>...that you can change the sort order of ledger entries by\n"
+"right-clicking the header of the ledger view?\n"
+msgstr ""
+
+#: _tips.cpp:9
+msgid ""
+"<p>...that you can easily move to the other side of a transfer transaction\n"
+"by opening the context menu with the right mouse button and selecting one of "
+"the\n"
+"'Goto' functions?\n"
+msgstr ""
+
+#: _tips.cpp:16
+msgid ""
+"<p>...that you can start editing a transaction by double-clicking on the\n"
+"transaction in the register?\n"
+msgstr ""
+
+#: _tips.cpp:22
+msgid ""
+"<p>...that you can show more details of the selected transaction in the\n"
+"register by selecting the 'ledger lens' feature in the settings dialog?\n"
+msgstr ""
+
+#: _tips.cpp:28
+msgid ""
+"<p>...that transactions with no category assigned or split\n"
+"transactions with unassigned values are marked with an exclamation mark \n"
+"on a yellow triangle in the register?\n"
+msgstr ""
+
+#: _tips.cpp:35
+msgid ""
+"<p>...that you can show all details of the transactions in the register\n"
+"by typing &lt;Ctrl-T&gt; or selecting the 'Settings/Show Transaction "
+"Detail'\n"
+"menu entry? You can turn this feature off the same way.\n"
+msgstr ""
+
+#: _tips.cpp:42
+msgid ""
+"<p>...that you can switch between a listing of all accounts or\n"
+"an icon view of all asset and liability accounts with the tabs\n"
+"in the accounts view?\n"
+msgstr ""
+
+#: _tips.cpp:49
+msgid "<p>...that the KMyMoney development team wishes you a nice day?\n"
+msgstr ""
+
+#: _tips.cpp:54
+msgid ""
+"<p>...you can use your own external filter program to convert any\n"
+"import format to QIF on the fly? See the QIF profile editor for\n"
+"more details.\n"
+msgstr ""
+
+#: _tips.cpp:61
+msgid ""
+"<p>...that you can create a scheduled transaction from an existing\n"
+"one by selecting the context menu on a transaction in the ledger\n"
+"or the \"More...\"-menu in the transaction form?\n"
+msgstr ""
+
+#: _tips.cpp:68
+msgid ""
+"<p>...that you can switch to the payee of a transaction\n"
+"by selecting the context menu on a transaction in the ledger\n"
+"or in the transaction menu?\n"
+msgstr ""
+
+#: _tips.cpp:75
+msgid ""
+"<p>...that you can modify the colors and fonts used for the ledgers\n"
+"via <i>Configure/Register/...</i>?\n"
+msgstr ""
+
+#: _tips.cpp:81
+msgid ""
+"<p>...that you can hide transactions prior to a specific date?\n"
+"The date can be modified via <i>Configure/Register/Filter</i>.\n"
+msgstr ""
+
+#: _tips.cpp:87
+msgid ""
+"<p>...that you can customize the \"Home-Page\"\n"
+"via <i>Configure/Home</i>?\n"
+msgstr ""
+
+#: _tips.cpp:93
+msgid ""
+"<p>...that you can enter new transactions even while reconciling\n"
+"an account? You can also make the transaction form visible.\n"
+msgstr ""
+
+#: _tips.cpp:99
+msgid ""
+"<p>...that you can actively support the KMyMoney development team in\n"
+"cases that heavily depend on your data? You can save your data in an\n"
+"anonymized way for this support.<p>\n"
+"Just open your data file and immediately\n"
+"select <b>File/Save as...</b>. In the <b>Save As...</b> dialog\n"
+"select the filter <b>Anonymous Files</b> and make sure your file gets\n"
+"the extensions <b>.anon.xml</b>. <p>\n"
+"To verify, how the data looks like you are about to send away, you can open\n"
+"this file in KMyMoney and see how the developers see your data.\n"
+msgstr ""
+
+#: _tips.cpp:112
+msgid ""
+"<p>... that you can import your bank statements even without a network \n"
+"connection? Just select the file (OFX or QIF) from the File->Import menu.</"
+"p>\n"
+"<p>Provided by Jose Jorge</p>\n"
+msgstr ""
+
+#: reports/listtable.cpp:159 reports/listtable.cpp:163
+#: reports/pivottable.cpp:1564
+msgid ""
+"_: Report date range\n"
+"%1 through %2"
+msgstr ""
+
+#: reports/listtable.cpp:171 reports/pivottable.cpp:1571
+#, c-format
+msgid "All currencies converted to %1"
+msgstr ""
+
+#: reports/listtable.cpp:172 reports/pivottable.cpp:1328
+msgid "All currencies converted to %1\n"
+msgstr ""
+
+#: reports/listtable.cpp:176 reports/pivottable.cpp:1573
+msgid "All values shown in %1 unless otherwise noted"
+msgstr ""
+
+#: reports/listtable.cpp:177 reports/pivottable.cpp:1330
+msgid "All values shown in %1 unless otherwise noted\n"
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:73 dialogs/kfindtransactiondlg.cpp:188
+#: dialogs/rc.cpp:53 dialogs/rc.cpp:63 dialogs/rc.cpp:208 dialogs/rc.cpp:805
+#: dialogs/settings/rc.cpp:111 dialogs/transactioneditor.cpp:844
+#: reports/listtable.cpp:196 views/khomeview.cpp:412 views/khomeview.cpp:485
+#: views/khomeview.cpp:519 views/rc.cpp:61 widgets/kmymoneypriceview.cpp:128
+#: widgets/rc.cpp:36 widgets/register.cpp:565 widgets/transaction.cpp:1027
+#: widgets/transaction.cpp:1484
+msgid "Date"
+msgstr "Tarih"
+
+#: reports/listtable.cpp:198
+msgid "Num"
+msgstr "Numara"
+
+#: dialogs/kfindtransactiondlg.cpp:204 dialogs/kmymoneysplittable.cpp:78
+#: dialogs/kmymoneysplittable.cpp:831 dialogs/rc.cpp:217
+#: dialogs/transactioneditor.cpp:831 dialogs/transactioneditor.cpp:1374
+#: dialogs/transactioneditor.cpp:1382 dialogs/transactioneditor.cpp:1396
+#: dialogs/transactioneditor.cpp:1449 dialogs/transactioneditor.cpp:1456
+#: dialogs/transactioneditor.cpp:1504 reports/listtable.cpp:200
+#: views/kcategoriesview.cpp:76 views/rc.cpp:62 widgets/rc.cpp:115
+#: widgets/register.cpp:62 widgets/transaction.cpp:848
+#: widgets/transaction.cpp:906
+msgid "Category"
+msgstr "Kategori"
+
+#: dialogs/kmymoneysplittable.cpp:79 dialogs/kmymoneysplittable.cpp:837
+#: reports/listtable.cpp:202 widgets/rc.cpp:101 widgets/transaction.cpp:1042
+#: widgets/transaction.cpp:1628
+msgid "Memo"
+msgstr "Hatırlatma"
+
+#: reports/listtable.cpp:203
+msgid "Top Category"
+msgstr "Üst Kategori"
+
+#: reports/listtable.cpp:204
+msgid "Category Type"
+msgstr "Kategori Tipi"
+
+#: dialogs/rc.cpp:229 dialogs/settings/rc.cpp:152 reports/listtable.cpp:207
+#: widgets/kmymoneycombo.cpp:346 widgets/rc.cpp:107
+msgid "Reconciled"
+msgstr "Uzlaştırılmış"
+
+#: reports/listtable.cpp:208 widgets/rc.cpp:117
+msgid "Action"
+msgstr "Hareket"
+
+#: dialogs/investactivities.cpp:199 dialogs/investactivities.cpp:287
+#: dialogs/investactivities.cpp:424 dialogs/investactivities.cpp:504
+#: dialogs/investactivities.cpp:544 dialogs/investtransactioneditor.cpp:241
+#: reports/listtable.cpp:209 widgets/rc.cpp:103 widgets/transaction.cpp:1513
+msgid "Shares"
+msgstr "Paylaşımlar"
+
+#: dialogs/investtransactioneditor.cpp:248
+#: dialogs/investtransactioneditor.cpp:1067
+#: dialogs/investtransactioneditor.cpp:1068
+#: dialogs/investtransactioneditor.cpp:1072
+#: dialogs/kequitypriceupdatedlg.cpp:72 dialogs/rc.cpp:109 dialogs/rc.cpp:164
+#: dialogs/rc.cpp:251 dialogs/rc.cpp:756 dialogs/rc.cpp:827
+#: dialogs/settings/rc.cpp:117 reports/listtable.cpp:210
+#: reports/listtable.cpp:211 reports/pivottable.cpp:2441
+#: views/kinvestmentview.cpp:80 widgets/kmymoneypriceview.cpp:129
+#: widgets/rc.cpp:43 widgets/rc.cpp:105 widgets/register.cpp:573
+msgid "Price"
+msgstr "Fiyat"
+
+#: reports/listtable.cpp:212
+msgid "Net Value"
+msgstr "Net Değer"
+
+#: reports/listtable.cpp:213
+msgid "Buys"
+msgstr "Alır"
+
+#: reports/listtable.cpp:214
+msgid "Sells"
+msgstr "Satar"
+
+#: reports/listtable.cpp:215
+msgid "Dividends Reinvested"
+msgstr ""
+
+#: reports/listtable.cpp:216
+msgid "Dividends Paid Out"
+msgstr ""
+
+#: reports/listtable.cpp:217
+msgid "Starting Balance"
+msgstr ""
+
+#: reports/listtable.cpp:218
+msgid "Ending Balance"
+msgstr ""
+
+#: reports/listtable.cpp:219
+msgid "Annualized Return"
+msgstr ""
+
+#: reports/listtable.cpp:220
+msgid "Return On Investment"
+msgstr ""
+
+#: dialogs/rc.cpp:106 dialogs/rc.cpp:161 dialogs/rc.cpp:248 dialogs/rc.cpp:505
+#: dialogs/rc.cpp:570 dialogs/rc.cpp:667 dialogs/rc.cpp:753
+#: reports/listtable.cpp:223 widgets/register.cpp:570
+msgid "Payment"
+msgstr "Ödeme"
+
+#: dialogs/rc.cpp:111 dialogs/rc.cpp:166 dialogs/rc.cpp:253 dialogs/rc.cpp:709
+#: dialogs/rc.cpp:758 reports/listtable.cpp:224 widgets/rc.cpp:119
+#: widgets/register.cpp:575
+msgid "Balance"
+msgstr "Bilanço"
+
+#: reports/listtable.cpp:227 views/kscheduledview.cpp:74
+msgid "Next Due Date"
+msgstr "Sonraki Ödeme Tarihi"
+
+#: reports/listtable.cpp:229 views/kscheduledview.cpp:76
+msgid "Payment Method"
+msgstr "Ödeme Şekli"
+
+#: dialogs/rc.cpp:803 reports/listtable.cpp:231 widgets/rc.cpp:2
+msgid "Description"
+msgstr "Tanım"
+
+#: reports/listtable.cpp:232
+#, fuzzy
+msgid "Opening Date"
+msgstr "Açılış tarihi"
+
+#: reports/listtable.cpp:234
+#, fuzzy
+msgid "Balance Early Warning"
+msgstr "Erken uyarı"
+
+#: reports/listtable.cpp:235
+#, fuzzy
+msgid "Balance Max Limit"
+msgstr "%1 Bilançosu"
+
+#: reports/listtable.cpp:236
+#, fuzzy
+msgid "Credit Early Warning"
+msgstr "Erken uyarı"
+
+#: reports/listtable.cpp:237
+#, fuzzy
+msgid "Credit Max Limit"
+msgstr "Kredi kartı ödemesi"
+
+#: dialogs/rc.cpp:376 reports/listtable.cpp:238
+msgid "Tax"
+msgstr "Vergi"
+
+#: reports/listtable.cpp:239
+#, fuzzy
+msgid "Preferred"
+msgstr "Tercih Edilen Hesap"
+
+#: reports/listtable.cpp:240
+#, fuzzy
+msgid "Loan Amount"
+msgstr "Tutar"
+
+#: dialogs/rc.cpp:511 reports/listtable.cpp:241
+msgid "Interest Rate"
+msgstr "Faiz Oranı"
+
+#: reports/listtable.cpp:242
+#, fuzzy
+msgid "Next Interest Change"
+msgstr "Faiz oranın değiştiği son tarih"
+
+#: reports/listtable.cpp:243
+#, fuzzy
+msgid "Periodic Payment"
+msgstr "Periyodik Ödeme:"
+
+#: reports/listtable.cpp:244
+#, fuzzy
+msgid "Final Payment"
+msgstr "Nihai Ödeme:"
+
+#: reports/listtable.cpp:245 views/khomeview.cpp:766 views/khomeview.cpp:1265
+#: views/khomeview.cpp:1273
+#, fuzzy
+msgid "Current Balance"
+msgstr "Şimdiki oran"
+
+#: dialogs/investactivities.cpp:201 dialogs/investactivities.cpp:289
+#: dialogs/investactivities.cpp:368 dialogs/investactivities.cpp:426
+#: dialogs/rc.cpp:327 reports/listtable.cpp:360 reports/listtable.cpp:364
+#: reports/listtable.cpp:556 reports/listtable.cpp:558
+#: reports/pivottable.cpp:1343 reports/pivottable.cpp:1445
+#: reports/pivottable.cpp:1505 reports/pivottable.cpp:1598
+#: reports/pivottable.cpp:1768 reports/pivottable.cpp:1845
+#: reports/pivottable.cpp:2165 reports/pivottable.cpp:2167
+#: reports/pivottable.cpp:2187 reports/pivottable.cpp:2189
+#: reports/querytabletest.cpp:134 reports/querytabletest.cpp:135
+#: reports/querytabletest.cpp:136 reports/querytabletest.cpp:137
+#: reports/querytabletest.cpp:162 reports/querytabletest.cpp:163
+#: reports/querytabletest.cpp:164 reports/querytabletest.cpp:197
+#: reports/querytabletest.cpp:198 reports/querytabletest.cpp:224
+#: reports/querytabletest.cpp:250 reports/querytabletest.cpp:251
+#: reports/querytabletest.cpp:252 reports/querytabletest.cpp:275
+#: reports/querytabletest.cpp:276 reports/querytabletest.cpp:277
+#: reports/querytabletest.cpp:366 reports/querytabletest.cpp:422
+#: reports/querytabletest.cpp:423 views/kforecastview.cpp:568 views/rc.cpp:18
+#: widgets/kmymoneyaccounttreeforecast.cpp:139 widgets/transaction.cpp:1643
+msgid "Total"
+msgstr "Toplam"
+
+#: reports/listtable.cpp:444
+msgid "Initial Market Value"
+msgstr ""
+
+#: reports/listtable.cpp:445
+msgid "Ending Market Value"
+msgstr ""
+
+#: reports/listtable.cpp:448 reports/querytabletest.cpp:651
+msgid "Opening Balance"
+msgstr ""
+
+#: reports/listtable.cpp:449 reports/querytabletest.cpp:652
+#: reports/querytabletest.cpp:653
+msgid "Closing Balance"
+msgstr ""
+
+#: reports/listtable.cpp:490 reports/listtable.cpp:491
+#, fuzzy
+msgid "Calculated"
+msgstr "Hesapla"
+
+#: reports/listtable.cpp:572 reports/listtable.cpp:574
+#: reports/pivottable.cpp:1530 reports/pivottable.cpp:1886
+#: reports/querytabletest.cpp:138 reports/querytabletest.cpp:165
+#: reports/querytabletest.cpp:199 reports/querytabletest.cpp:225
+#: reports/querytabletest.cpp:253 reports/querytabletest.cpp:278
+#: reports/querytabletest.cpp:367 reports/querytabletest.cpp:402
+#: reports/querytabletest.cpp:424 reports/querytabletest.cpp:548
+#: reports/querytabletest.cpp:551 reports/querytabletest.cpp:586
+msgid "Grand Total"
+msgstr "Genel Toplam"
+
+#: dialogs/rc.cpp:233 reports/pivottable.cpp:339 views/kscheduledview.cpp:174
+#: views/kscheduledview.cpp:433 views/kscheduledview.cpp:449
+#: widgets/kmymoneyscheduledcalendar.cpp:48
+msgid "Transfers"
+msgstr "Aktarımlar"
+
+#: reports/pivottable.cpp:1951
+#, fuzzy
+msgid "Legend"
+msgstr "Ana Hesap Defterleri"
+
+#: reports/pivottable.cpp:2411 views/khomeview.cpp:1406
+#: views/khomeview.cpp:1443
+msgid "Actual"
+msgstr "Güncel"
+
+#: reports/pivottable.cpp:2421 views/khomeview.cpp:1409
+#: views/khomeview.cpp:1446
+msgid "Difference"
+msgstr "Fark"
+
+#: reports/pivottable.cpp:2431
+msgid "Moving Average"
+msgstr ""
+
+#: reports/pivottable.cpp:2436
+#, fuzzy
+msgid "Moving Average Price"
+msgstr "Yatırım seçenekleri"
+
+#: reports/objectinfotable.cpp:214 reports/querytable.cpp:693
+#: reports/querytable.cpp:736 reports/querytable.cpp:1356
+#: reports/querytable.cpp:1375 views/kpayeesview.cpp:742
+#, c-format
+msgid "Transfer from %1"
+msgstr ""
+
+#: reports/objectinfotable.cpp:215 reports/querytable.cpp:694
+#: reports/querytable.cpp:735 reports/querytable.cpp:1355
+#: reports/querytable.cpp:1374 views/kpayeesview.cpp:740
+#, c-format
+msgid "Transfer to %1"
+msgstr ""
+
+#: reports/querytabletest.cpp:471 views/kreportsview.cpp:1144
+msgid "Investment Transactions"
+msgstr "Yatırım Aktarımları"
+
+#: reports/querytabletest.cpp:472 reports/querytabletest.cpp:564
+msgid "Test Report"
+msgstr ""
+
+#: reports/querytabletest.cpp:547 reports/querytabletest.cpp:550
+msgid "Total Stock 1"
+msgstr ""
+
+#: reports/querytabletest.cpp:563 views/kreportsview.cpp:1174
+msgid "Investment Performance by Account"
+msgstr ""
+
+#: reports/querytable.cpp:431 reports/querytable.cpp:1200
+#, c-format
+msgid "Month of %1"
+msgstr ""
+
+#: reports/querytable.cpp:432 reports/querytable.cpp:1201
+#, c-format
+msgid "Week of %1"
+msgstr ""
+
+#: reports/querytable.cpp:576 reports/querytable.cpp:739
+#: reports/querytable.cpp:858 reports/querytable.cpp:1325
+#: reports/querytable.cpp:1481
+msgid "No Institution"
+msgstr "Şirket Yok"
+
+#: reports/querytable.cpp:580 reports/querytable.cpp:1329
+msgid "[Empty Payee]"
+msgstr "[Boş Alacaklı]"
+
+#: reports/querytable.cpp:615 reports/querytable.cpp:1361
+msgid "[Split Transaction]"
+msgstr ""
+
+#: reports/querytable.cpp:616 reports/querytable.cpp:617
+msgid "Split"
+msgstr "Ayır"
+
+#: main.cpp:51
+msgid ""
+"\n"
+"KMyMoney, the Personal Finance Manager for KDE.\n"
+"\n"
+"Please consider contributing to this project with code and/or suggestions."
+msgstr ""
+
+#: main.cpp:55
+msgid "language to be used"
+msgstr "kullanılacak dil"
+
+#: main.cpp:56
+msgid "don't open last used file"
+msgstr "son kullanılan dosyayı açma"
+
+#: main.cpp:57
+msgid "enable performance timers"
+msgstr ""
+
+#: main.cpp:61
+msgid "turn on program traces"
+msgstr "program izlerini aç"
+
+#: main.cpp:62
+msgid "dump the names of all defined KAction objects to stdout and quit"
+msgstr ""
+
+#: main.cpp:66
+msgid "file to open"
+msgstr "açılacak dosya"
+
+#: main.cpp:92
+msgid "Memory leakage detection"
+msgstr "Bellek kaçakları kontrolü"
+
+#: main.cpp:96
+msgid "Compiled with the following settings:\n"
+msgstr "Şu ayarlarla derlendi:\n"
+
+#: dialogs/kmymoneysplittable.cpp:650 dialogs/ksplittransactiondlg.cpp:277
+#: main.cpp:98
+msgid "KMyMoney"
+msgstr "KMyMoney"
+
+#: main.cpp:104
+msgid "Initial idea, much initial source code, Project admin"
+msgstr "İlk fikir, ilk kaynak kodlar, Proje yöneticisi"
+
+#: main.cpp:105
+msgid "Core engine, Release Manager, Project admin"
+msgstr "Temel motor, Sürüm Yöneticisi, Proje yöneticisi"
+
+#: main.cpp:106
+msgid "Reporting logic, OFX Import"
+msgstr "Raporlama, OFX içeri aktarıcısı"
+
+#: main.cpp:107
+msgid "Database backend, maintainer stable branch"
+msgstr ""
+
+#: main.cpp:108
+#, fuzzy
+msgid "Forecast, Reports"
+msgstr "Beğenilen Raporlar"
+
+#: main.cpp:109
+msgid "Project Admin"
+msgstr "Proje Yöneticisi"
+
+#: main.cpp:110
+msgid "Developer"
+msgstr "Geliştirici"
+
+#: main.cpp:111
+#, fuzzy
+msgid "Database backend"
+msgstr "Veritabanı Adı"
+
+#: main.cpp:113
+msgid "Initial investment support"
+msgstr "Yatırım desteği"
+
+#: main.cpp:114
+msgid "Developer & Artist"
+msgstr "Geliştirici & Sanatçı"
+
+#: main.cpp:115
+msgid "Icons & splash screen"
+msgstr "Simgeler ve açılış resmi"
+
+#: main.cpp:116 main.cpp:117
+msgid "Patches"
+msgstr "Yamalar"
+
+#: main.cpp:136
+msgid ""
+"The monetary decimal symbol is not correctly set in the KDE Control Center's "
+"Country/Region & Language settings. Please set it to a reasonable value and "
+"start KMyMoney again."
+msgstr ""
+
+#: main.cpp:136
+msgid "Invalid settings"
+msgstr "Geçersiz ayarlar"
+
+#: main.cpp:228
+msgid "Another instance of KMyMoney is already running. Do you want to quit?"
+msgstr "Başka bir KMyMoney süreci halen çalışıyor. Çıkmak ister misiniz?"
+
+#: main.cpp:289
+msgid "Uncaught error. Please report the details to the developers"
+msgstr ""
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Serdar Soytetir"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "tulliana@gmail.com"
+
+#: dialogs/kcsvprogressdlg.cpp:62 dialogs/kimportdlg.cpp:66 rc.cpp:1
+msgid "&Import"
+msgstr "&İçeri Aktar"
+
+#: rc.cpp:2
+msgid "E&xport"
+msgstr "D&ışarı Aktar"
+
+#: rc.cpp:3
+msgid "&Institution"
+msgstr "&Şirket"
+
+#: rc.cpp:4
+msgid "&Account"
+msgstr "&Hesaplar"
+
+#: rc.cpp:5
+msgid "&Category"
+msgstr "&Kategori"
+
+#: rc.cpp:6
+msgid "&Transaction"
+msgstr "&Aktarım"
+
+#: rc.cpp:7 rc.cpp:20
+msgid "Mark transaction as..."
+msgstr "Aktarımı farklı işaretle..."
+
+#: rc.cpp:8 rc.cpp:21
+msgid "Mark transaction"
+msgstr "Aktarımı işaretle"
+
+#: rc.cpp:9
+#, fuzzy
+msgid "T&ools"
+msgstr "Toplamlar"
+
+#: rc.cpp:10
+msgid "Account options"
+msgstr "Hesap seçenekleri"
+
+#: rc.cpp:11
+msgid "Category options"
+msgstr "Kategori seçenekleri"
+
+#: rc.cpp:12
+msgid "Institution options"
+msgstr "Şirket seçenekleri"
+
+#: rc.cpp:13
+msgid "Payee options"
+msgstr "Alacaklı seçenekleri"
+
+#: rc.cpp:14
+msgid "Budget options"
+msgstr "Bütçe seçenekleri"
+
+#: rc.cpp:15
+msgid "Investment options"
+msgstr "Yatırım seçenekleri"
+
+#: rc.cpp:16
+#, fuzzy
+msgid "Scheduled transactions options"
+msgstr "Zamanlanmış Aktarımlar"
+
+#: rc.cpp:17
+msgid "Transaction options"
+msgstr "Aktarım seçenekleri"
+
+#: rc.cpp:18
+msgid "Move transaction to..."
+msgstr "Aktarımı buraya taşı..."
+
+#: rc.cpp:19
+msgid "Select account"
+msgstr "Hesap seç"
+
+#: rc.cpp:22
+msgid "Currency options"
+msgstr "Para birimi seçenekleri"
+
+#: rc.cpp:24
+msgid "Always show a No. field in transaction form"
+msgstr ""
+
+#: rc.cpp:25
+msgid "Auto fill with previous transaction data"
+msgstr ""
+
+#: rc.cpp:26
+msgid "Treat two transactions as identical, if amount differs less than"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:144 rc.cpp:27
+msgid "Auto increment check number"
+msgstr "Otomatik artan çek numarası"
+
+#: rc.cpp:28
+msgid "Autosave file periodically"
+msgstr ""
+
+#: rc.cpp:29
+msgid "Autosave interval in minutes"
+msgstr ""
+
+#: rc.cpp:30
+msgid "Check schedules upon startup"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:171 rc.cpp:31
+msgid "Enter transactions this number of days in advance"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:172 rc.cpp:32
+msgid "Number of days to preview schedules in ledger"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:143 rc.cpp:33
+msgid "Insert transaction type into No. field for new transactions"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:145 rc.cpp:34
+msgid "Keep changes when selecting a different transaction/split"
+msgstr ""
+
+#: rc.cpp:35
+msgid "Using the Enter key moves between the fields"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:130 rc.cpp:36
+msgid "Use the ledger lens"
+msgstr ""
+
+#: rc.cpp:37
+msgid "Price Precision"
+msgstr "Fiyat Hassasiyeti"
+
+#: dialogs/rc.cpp:65 rc.cpp:38
+msgid "Update price history"
+msgstr "Fiyat geçmişini güncelle"
+
+#: dialogs/settings/rc.cpp:132 rc.cpp:39
+msgid "Show transaction form"
+msgstr "Aktarım formunu göster"
+
+#: rc.cpp:40
+msgid "Start with last selected view or homepage"
+msgstr "Seçilen son görünüm ya da başlangıç sayfası ile başla"
+
+#: rc.cpp:41
+msgid "Use GPG to encrypt data file"
+msgstr "Veri dosyasını şifrelemek için GPG kullan"
+
+#: rc.cpp:42
+msgid "Also encrypt against recover key"
+msgstr ""
+
+#: rc.cpp:43
+#, fuzzy
+msgid "GPG User ID (deprecated)"
+msgstr "GPG Kullanıcı Kimliği"
+
+#: rc.cpp:44
+msgid "GPG User ID"
+msgstr "GPG Kullanıcı Kimliği"
+
+#: rc.cpp:45
+msgid "Run in expert (accountant) mode"
+msgstr ""
+
+#: rc.cpp:46
+msgid "Show splash screen during startup"
+msgstr ""
+
+#: rc.cpp:47
+msgid "Synchronize account in ledger and investment view"
+msgstr ""
+
+#: rc.cpp:48
+msgid "Icon size for view selection"
+msgstr ""
+
+#: rc.cpp:49
+msgid "list of hidden views"
+msgstr ""
+
+#: rc.cpp:50
+msgid "Firsttime switch to start new user wizard"
+msgstr ""
+
+#: rc.cpp:51
+msgid "Show title bar on each view"
+msgstr ""
+
+#: rc.cpp:52
+msgid "Start string matches for e.g. payees at start of string"
+msgstr ""
+
+#: rc.cpp:53
+msgid "Order of items on homepage"
+msgstr ""
+
+#: rc.cpp:54
+msgid "Percentage of default font size used for home view HTML page"
+msgstr ""
+
+#: rc.cpp:55
+msgid "Remember (manually adjusted) font size in home view on program end."
+msgstr ""
+
+#: rc.cpp:56
+msgid "Show account limit information on the Homepage"
+msgstr ""
+
+#: rc.cpp:58
+msgid "Hide closed accounts"
+msgstr "Kapatılmış hesapları gizle"
+
+#: rc.cpp:59
+msgid "Hide finished schedules"
+msgstr "Tamamlanmış zamanlamaları gizle"
+
+#: rc.cpp:61
+msgid "Show all register entries in full detail"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:129 rc.cpp:62
+msgid "Show a grid in the register"
+msgstr ""
+
+#: rc.cpp:63
+msgid "Show fancy group markers"
+msgstr ""
+
+#: rc.cpp:64
+msgid "Show fancy markers for previous and current fiscal year"
+msgstr ""
+
+#: rc.cpp:65
+msgid "Starting month of the fiscal year"
+msgstr "Mali yılın başlangıç ayı"
+
+#: rc.cpp:66
+msgid "Starting day of the fiscal year"
+msgstr "Mali yılın başlangıç günü"
+
+#: rc.cpp:67
+msgid "Start date"
+msgstr "Başlangıç tarihi"
+
+#: dialogs/settings/rc.cpp:9 rc.cpp:68
+msgid "Use system colors"
+msgstr "Sistem renklerini kullan"
+
+#: rc.cpp:69
+msgid "List color"
+msgstr "Liste rengi"
+
+#: rc.cpp:70
+msgid "List background color"
+msgstr "Liste arkaplanı rengi"
+
+#: rc.cpp:71
+msgid "List grid color"
+msgstr "Liste ızgara rengi"
+
+#: rc.cpp:72
+msgid "Background color for imported transactions"
+msgstr ""
+
+#: rc.cpp:73
+msgid "Background color for matched transactions"
+msgstr ""
+
+#: rc.cpp:74
+msgid "List color for erronous transactions"
+msgstr ""
+
+#: rc.cpp:75
+msgid "List color for missing conversion rate"
+msgstr ""
+
+#: rc.cpp:76
+msgid "List color for negative values"
+msgstr ""
+
+#: rc.cpp:77
+msgid "Background color for group marker"
+msgstr ""
+
+#: rc.cpp:78
+msgid "Background color for required fields"
+msgstr ""
+
+#: rc.cpp:79
+msgid "Use system font"
+msgstr "Sistem yazı tipini kullan"
+
+#: dialogs/settings/rc.cpp:21 rc.cpp:80
+msgid "Cell font"
+msgstr "Hücre yazı tipi"
+
+#: dialogs/settings/rc.cpp:22 rc.cpp:81
+msgid "Header font"
+msgstr "Başlık yazı tipi"
+
+#: rc.cpp:82 rc.cpp:83
+msgid "Sort order of register in normal view"
+msgstr ""
+
+#: rc.cpp:84
+msgid "Sort order of register in search dialog"
+msgstr ""
+
+#: rc.cpp:85
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation"
+msgstr ""
+
+#: rc.cpp:86
+msgid "Number of days (plus/minus) to search for matching transactions"
+msgstr ""
+
+#: rc.cpp:87
+msgid "During import, ask for a new payee's default category"
+msgstr ""
+
+#: rc.cpp:88
+msgid "Method to calculate forecast"
+msgstr ""
+
+#: rc.cpp:89
+msgid "Days to forecast"
+msgstr ""
+
+#: rc.cpp:90
+msgid "Days of normal account cycle"
+msgstr ""
+
+#: rc.cpp:91
+msgid "Number of historic cycles to use in forecast"
+msgstr ""
+
+#: rc.cpp:92
+msgid "Day of month to start forecast"
+msgstr ""
+
+#: rc.cpp:93
+msgid "Method to calculate history-based forecast"
+msgstr ""
+
+#: rc.cpp:94
+msgid "Skip opening date when fetching transactions"
+msgstr ""
+
+#: rc.cpp:95
+msgid "Include future transaction when using Schedule Forecast"
+msgstr ""
+
+#: rc.cpp:96
+#, fuzzy
+msgid "Include scheduled transactions when using Schedule Forecast"
+msgstr "Zamanlanmış Aktarımları İçer"
+
+#: rc.cpp:97
+msgid "additional names for cash account"
+msgstr ""
+
+#: rc.cpp:98
+msgid "additional names for checking account"
+msgstr ""
+
+#: rc.cpp:99
+msgid "additional names for credit card account"
+msgstr ""
+
+#: rc.cpp:100
+#, fuzzy
+msgid "additional names for asset account"
+msgstr "Varlık hesabı yok"
+
+#: rc.cpp:101
+msgid "additional names for opening balance payee"
+msgstr ""
+
+#: rc.cpp:102
+msgid "additional names for invoice accounts"
+msgstr ""
+
+#: rc.cpp:103 widgets/rc.cpp:161 widgets/rc.cpp:163
+msgid "..."
+msgstr "..."
+
+#: views/kcategoriesview.cpp:276
+msgid "Profit: "
+msgstr "Kâr:"
+
+#: views/kcategoriesview.cpp:278
+msgid "Loss: "
+msgstr "Zarar:"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:54
+#: dialogs/transactioneditor.cpp:605 views/kpayeesview.cpp:365
+#: widgets/kmymoneyonlinequoteconfig.cpp:54
+msgid "Accepts the entered data and stores it"
+msgstr "Girilen verileri kabul eder ve kaydeder"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:55 views/kpayeesview.cpp:366
+#: widgets/kmymoneyonlinequoteconfig.cpp:55
+msgid "Use this to accept the modified data."
+msgstr ""
+
+#: views/kpayeesview.cpp:491
+msgid ""
+"A payee with the name '%1' already exists. It is not advisable to have "
+"multiple payees with the same identification name. Are you sure you would "
+"like to rename the payee?"
+msgstr ""
+
+#: views/kpayeesview.cpp:518 views/kpayeesview.cpp:869
+msgid "Unable to modify payee"
+msgstr "Alacaklı düzenlenemedi"
+
+#: views/kpayeesview.cpp:564
+msgid "Do you want to save the changes for <b>%1</b>?"
+msgstr "<b>%1</b> için değişiklikleri kaydetmek istiyor musunuz?"
+
+#: views/kbudgetview.cpp:490 views/kpayeesview.cpp:565
+msgid "Save changes"
+msgstr "Değişiklikleri kaydet"
+
+#: views/kgloballedgerview.cpp:737 views/kpayeesview.cpp:662
+#: views/kpayeesview.cpp:753
+#, c-format
+msgid "Balance: %1"
+msgstr ""
+
+#: views/kpayeesview.cpp:725 views/kpayeesview.cpp:731
+#, c-format
+msgid "Amortization of %1"
+msgstr ""
+
+#: views/kpayeesview.cpp:727 views/kpayeesview.cpp:733
+#, c-format
+msgid "Payment to %1"
+msgstr ""
+
+#: views/kpayeesview.cpp:736
+#, c-format
+msgid "Loan payment from %1"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:123
+#: dialogs/kconfirmmanualenterdlg.cpp:133 views/kpayeesview.cpp:745
+#: widgets/kmymoneycategory.cpp:160 widgets/kmymoneycategory.cpp:166
+#: widgets/transaction.cpp:851 widgets/transaction.cpp:1397
+#: widgets/transaction.cpp:1411
+msgid ""
+"_: Split transaction (category replacement)\n"
+"Split transaction"
+msgstr "Aktarımı ayır"
+
+#: views/kreportsview.cpp:262
+msgid ""
+"There was an error creating your report: \"%1\".\n"
+"Please report this error to the developer's list: kmymoney2-developer@lists."
+"sourceforge.net"
+msgstr ""
+
+#: views/kreportsview.cpp:264
+msgid "Critical Error"
+msgstr "Kritik Hata"
+
+#: views/kreportsview.cpp:268
+msgid "Unable to generate report"
+msgstr ""
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:125 views/kreportsview.cpp:286
+#: views/rc.cpp:53 widgets/rc.cpp:146
+msgid "Chart"
+msgstr "Grafik"
+
+#: views/kreportsview.cpp:287 widgets/rc.cpp:147
+msgid "Show the chart version of this report"
+msgstr ""
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:112 views/khomeview.cpp:900
+#: views/kreportsview.cpp:294 views/kreportsview.cpp:328
+msgid "Report"
+msgstr "Raporla"
+
+#: views/kreportsview.cpp:295
+msgid "Show the report version of this chart"
+msgstr ""
+
+#: views/kmymoneyview.cpp:236 views/kreportsview.cpp:314
+#: views/kreportsview.cpp:326
+msgid "Reports"
+msgstr "Raporlar"
+
+#: views/khomeview.cpp:902 views/kreportsview.cpp:329 widgets/rc.cpp:56
+msgid "Comment"
+msgstr "Yorum"
+
+#: views/kreportsview.cpp:432
+msgid "Charts"
+msgstr "Grafikler"
+
+#: views/khomeview.cpp:897 views/kreportsview.cpp:470
+msgid "Favorite Reports"
+msgstr "Beğenilen Raporlar"
+
+#: views/kreportsview.cpp:486
+msgid "Old Customized Reports"
+msgstr "Eski Özelleştirilmiş Raporlar"
+
+#: views/kreportsview.cpp:579
+msgid "Include Stylesheet"
+msgstr "Biçim Dosyalarını İçer"
+
+#: views/kreportsview.cpp:585
+msgid ""
+"_: CSV (Filefilter)\n"
+"CSV files"
+msgstr "CSV dosyaları"
+
+#: views/kreportsview.cpp:586
+msgid ""
+"_: HTML (Filefilter)\n"
+"HTML files"
+msgstr "HTML dosyaları"
+
+#: views/kreportsview.cpp:591
+msgid "Export as"
+msgstr "Dışarıya farklı aktar"
+
+#: views/kreportsview.cpp:619 views/kreportsview.cpp:660
+#: views/kreportsview.cpp:942 views/kreportsview.cpp:950
+#: views/kreportsview.cpp:958 views/kreportsview.cpp:968
+#: views/kreportsview.cpp:980 views/kreportsview.cpp:998
+#: views/kreportsview.cpp:1006 views/kreportsview.cpp:1014
+#: views/kreportsview.cpp:1022 views/kreportsview.cpp:1034
+#: views/kreportsview.cpp:1046 views/kreportsview.cpp:1056
+#: views/kreportsview.cpp:1070 views/kreportsview.cpp:1079
+#: views/kreportsview.cpp:1087 views/kreportsview.cpp:1095
+#: views/kreportsview.cpp:1103 views/kreportsview.cpp:1111
+#: views/kreportsview.cpp:1120 views/kreportsview.cpp:1132
+#: views/kreportsview.cpp:1145 views/kreportsview.cpp:1155
+#: views/kreportsview.cpp:1165 views/kreportsview.cpp:1175
+#: views/kreportsview.cpp:1185 views/kreportsview.cpp:1195
+#: views/kreportsview.cpp:1208 views/kreportsview.cpp:1222
+#: views/kreportsview.cpp:1239 views/kreportsview.cpp:1257
+#: views/kreportsview.cpp:1273 views/kreportsview.cpp:1295
+#: views/kreportsview.cpp:1304 views/kreportsview.cpp:1313
+#: views/kreportsview.cpp:1322 views/kreportsview.cpp:1336
+#: views/kreportsview.cpp:1347 views/kreportsview.cpp:1362
+#: views/kreportsview.cpp:1372 views/kreportsview.cpp:1383
+#: views/kreportsview.cpp:1393 views/kreportsview.cpp:1404
+#: views/kreportsview.cpp:1423 views/kreportsview.cpp:1432
+#: views/kreportsview.cpp:1444 views/kreportsview.cpp:1463
+#: views/kreportsview.cpp:1472 views/kreportsview.cpp:1481
+#: views/kreportsview.cpp:1490
+msgid "Default Report"
+msgstr "Öntanımlı Rapor"
+
+#: views/kreportsview.cpp:621 views/kreportsview.cpp:661
+msgid "Custom Report"
+msgstr "Özel Rapor"
+
+#: views/kreportsview.cpp:622
+msgid " (Customized)"
+msgstr "(Özelleştirilmiş)"
+
+#: views/kreportsview.cpp:690
+msgid ""
+"Are you sure you want to delete report <b>%1</b>? There is no way to "
+"recover it!"
+msgstr ""
+
+#: views/kreportsview.cpp:690 views/kreportsview.cpp:702
+msgid "Delete Report?"
+msgstr "Rapor Silinsin mi?"
+
+#: views/kreportsview.cpp:702
+msgid "Sorry, <b>%1</b> is a default report. You may not delete it."
+msgstr ""
+
+#: views/kreportsview.cpp:882
+msgid "&Open"
+msgstr "&Aç"
+
+#: views/kreportsview.cpp:884
+msgid "&New report"
+msgstr "&Yeni rapor"
+
+#: views/kreportsview.cpp:934
+msgid "Income and Expenses"
+msgstr "Gelir ve Giderler"
+
+#: views/kreportsview.cpp:941
+msgid "Income and Expenses This Month"
+msgstr "Bu ayın gelir - giderleri"
+
+#: views/kreportsview.cpp:949
+msgid "Income and Expenses This Year"
+msgstr "Bu yılın gelir - giderleri"
+
+#: views/kreportsview.cpp:957
+#, fuzzy
+msgid "Income and Expenses By Year"
+msgstr "Bu yılın gelir - giderleri"
+
+#: views/kreportsview.cpp:967
+msgid "Income and Expenses Graph"
+msgstr "Gelir ve Giderler Çizelgesi"
+
+#: views/kreportsview.cpp:979
+msgid "Income and Expenses Pie Chart"
+msgstr ""
+
+#: views/khomeview.cpp:1361 views/kreportsview.cpp:990
+msgid "Net Worth"
+msgstr ""
+
+#: views/kreportsview.cpp:997
+msgid "Net Worth By Month"
+msgstr ""
+
+#: views/kreportsview.cpp:1005
+msgid "Net Worth Today"
+msgstr ""
+
+#: views/kreportsview.cpp:1013
+msgid "Net Worth By Year"
+msgstr ""
+
+#: views/kreportsview.cpp:1021
+msgid "7-day Cash Flow Forecast"
+msgstr ""
+
+#: views/kreportsview.cpp:1033
+msgid "Net Worth Graph"
+msgstr ""
+
+#: views/kreportsview.cpp:1045
+msgid "Account Balances by Institution"
+msgstr ""
+
+#: views/kreportsview.cpp:1055
+msgid "Account Balances by Type"
+msgstr ""
+
+#: views/kreportsview.cpp:1069
+msgid "Transactions by Account"
+msgstr ""
+
+#: views/kreportsview.cpp:1078
+msgid "Transactions by Category"
+msgstr ""
+
+#: views/kreportsview.cpp:1086
+msgid "Transactions by Payee"
+msgstr ""
+
+#: views/kreportsview.cpp:1094
+msgid "Transactions by Month"
+msgstr ""
+
+#: views/kreportsview.cpp:1102
+msgid "Transactions by Week"
+msgstr ""
+
+#: views/kreportsview.cpp:1110
+msgid "Loan Transactions"
+msgstr ""
+
+#: views/kreportsview.cpp:1119
+#, fuzzy
+msgid "Transactions by Reconciliation Status"
+msgstr "Aktarım seçenekleri"
+
+#: views/kreportsview.cpp:1125
+#, fuzzy
+msgid "Cash Flow"
+msgstr "Nakit"
+
+#: views/kreportsview.cpp:1131
+#, fuzzy
+msgid "Cash Flow Transactions This Month"
+msgstr "Bu ayın gelir - giderleri"
+
+#: views/kmymoneyview.cpp:226 views/kmymoneyview.cpp:228
+#: views/kreportsview.cpp:1137
+msgid "Investments"
+msgstr "Yatırımlar"
+
+#: views/kreportsview.cpp:1154
+msgid "Investment Holdings by Account"
+msgstr ""
+
+#: views/kreportsview.cpp:1164
+msgid "Investment Holdings by Type"
+msgstr ""
+
+#: views/kreportsview.cpp:1184
+msgid "Investment Performance by Type"
+msgstr ""
+
+#: views/kreportsview.cpp:1194
+msgid "Investment Holdings Pie"
+msgstr ""
+
+#: views/kreportsview.cpp:1207
+msgid "Investment Worth Graph"
+msgstr ""
+
+#: views/kreportsview.cpp:1221
+#, fuzzy
+msgid "Investment Price Graph"
+msgstr "Yatırım detayları"
+
+#: views/kreportsview.cpp:1238
+#, fuzzy
+msgid "Investment Moving Average Price Graph"
+msgstr "Yatırım seçenekleri"
+
+#: views/kreportsview.cpp:1256
+#, fuzzy
+msgid "Investment Moving Average"
+msgstr "Yatırım seçenekleri"
+
+#: views/kreportsview.cpp:1272
+msgid "Investment Moving Average vs Actual"
+msgstr ""
+
+#: views/kreportsview.cpp:1287
+msgid "Taxes"
+msgstr "Vergiler"
+
+#: views/kreportsview.cpp:1294
+msgid "Tax Transactions by Category"
+msgstr "Kategorilere göre Vergi Aktarımları"
+
+#: views/kreportsview.cpp:1303
+msgid "Tax Transactions by Payee"
+msgstr "Alacaklıya göre Vergi Aktarımları"
+
+#: views/kreportsview.cpp:1312
+msgid "Tax Transactions by Category Last Fiscal Year"
+msgstr ""
+
+#: views/kreportsview.cpp:1321
+msgid "Tax Transactions by Payee Last Fiscal Year"
+msgstr ""
+
+#: views/kreportsview.cpp:1328
+msgid "Budgeting"
+msgstr "Bütçeleme"
+
+#: views/kreportsview.cpp:1335
+msgid "Budgeted vs. Actual This Year"
+msgstr ""
+
+#: views/kreportsview.cpp:1346
+msgid "Budgeted vs. Actual This Year (YTM)"
+msgstr ""
+
+#: views/khomeview.cpp:1383 views/kreportsview.cpp:1361
+msgid "Monthly Budgeted vs. Actual"
+msgstr ""
+
+#: views/kreportsview.cpp:1371
+msgid "Yearly Budgeted vs. Actual"
+msgstr ""
+
+#: views/kreportsview.cpp:1382
+msgid "Monthly Budget"
+msgstr "Aylık Bütçe"
+
+#: views/kreportsview.cpp:1392
+msgid "Yearly Budget"
+msgstr "Yıllık Bütçe"
+
+#: views/kreportsview.cpp:1403
+msgid "Yearly Budgeted vs Actual Graph"
+msgstr ""
+
+#: views/kreportsview.cpp:1422
+#, fuzzy
+msgid "Forecast By Month"
+msgstr "Tahmin Yöntemi"
+
+#: views/kreportsview.cpp:1431
+#, fuzzy
+msgid "Forecast Next Quarter"
+msgstr "Tahmin Ayarları"
+
+#: views/kreportsview.cpp:1443
+msgid "Net Worth Forecast Graph"
+msgstr ""
+
+#: dialogs/rc.cpp:126 dialogs/rc.cpp:128 dialogs/rc.cpp:466
+#: views/kreportsview.cpp:1455
+msgid "General Information"
+msgstr "Genel Bilgiler"
+
+#: views/kreportsview.cpp:1462
+#, fuzzy
+msgid "Schedule Information"
+msgstr "Zamanlama Bilgileri"
+
+#: views/kreportsview.cpp:1471
+#, fuzzy
+msgid "Schedule Summary Information"
+msgstr "Zamanlama Bilgileri"
+
+#: views/kreportsview.cpp:1480
+#, fuzzy
+msgid "Account Information"
+msgstr "Hesap bilgileri"
+
+#: views/kreportsview.cpp:1489
+#, fuzzy
+msgid "Loan Information"
+msgstr "Alıcı Bilgisi"
+
+#: dialogs/rc.cpp:323 views/kmymoneyview.cpp:148 views/kmymoneyview.cpp:150
+msgid "Institutions"
+msgstr "Şirketler"
+
+#: dialogs/knewaccountdlg.cpp:98 views/kmymoneyview.cpp:162
+#: views/kmymoneyview.cpp:164 widgets/rc.cpp:4 widgets/rc.cpp:94
+msgid "Accounts"
+msgstr "Hesaplar"
+
+#: views/kmymoneyview.cpp:176
+msgid "Bills & Reminders"
+msgstr "Faturalar & Hatırlatıcılar"
+
+#: views/kmymoneyview.cpp:178
+#, fuzzy
+msgid "Scheduled transactions"
+msgstr "Zamanlanmış Aktarımlar"
+
+#: dialogs/knewaccountdlg.cpp:98 dialogs/rc.cpp:193 views/kmymoneyview.cpp:188
+#: views/kmymoneyview.cpp:190 widgets/rc.cpp:91
+msgid "Categories"
+msgstr "Kategoriler"
+
+#: dialogs/kfindtransactiondlg.cpp:212 dialogs/rc.cpp:318
+#: views/kmymoneyview.cpp:199 views/kmymoneyview.cpp:201 widgets/rc.cpp:93
+msgid "Payees"
+msgstr "Alacaklılar"
+
+#: views/kgloballedgerview.cpp:149 views/kmymoneyview.cpp:211
+msgid "Ledgers"
+msgstr "Ana Hesap Defterleri"
+
+#: views/kmymoneyview.cpp:353
+msgid "Creating transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:367
+msgid "Modifying transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:382
+msgid "Duplicating transactions can only be performed in the ledger view"
+msgstr ""
+
+#: views/kmymoneyview.cpp:394
+msgid "Edit the current selected transactions"
+msgstr "Seçili aktarımları düzenle"
+
+#: views/kmymoneyview.cpp:602
+msgid "<b>%1</b> is not a KMyMoney file."
+msgstr "<b>%1</b> bir KMyMoney dosyası değil."
+
+#: views/kmymoneyview.cpp:643
+msgid "GPG is not available for decryption of file <b>%1</b>"
+msgstr ""
+"<b>%1</b> dosyasının şifrelemesini çözmek için GPG kullanılabilir durumda "
+"değil"
+
+#: views/kmymoneyview.cpp:721
+msgid ""
+"File <b>%1</b> contains the old binary format used by KMyMoney. Please use "
+"an older version of KMyMoney (0.8.x) that still supports this format to "
+"convert it to the new XML based format."
+msgstr ""
+
+#: views/kmymoneyview.cpp:723
+msgid "File <b>%1</b> contains an unknown file format!"
+msgstr "<b>%1</b> dosyası bilinmeyen dosya biçimi içeriyor!"
+
+#: views/kmymoneyview.cpp:728
+msgid "Cannot read from file <b>%1</b>!"
+msgstr "<b>%1</b> dosyasından okunamadı!"
+
+#: views/kmymoneyview.cpp:732
+msgid "Cannot load file <b>%1</b>. Reason: %2"
+msgstr "<b>%1</b> dosyası yüklenemedi. Sebep: %2"
+
+#: views/kmymoneyview.cpp:742 views/kmymoneyview.cpp:748
+msgid "File <b>%1</b> not found!"
+msgstr "<b>%1</b> dosyası bulunamadı!"
+
+#: views/kmymoneyview.cpp:812
+msgid "Can't open database %1\n"
+msgstr "%1 veritabanı açılamadı\n"
+
+#: views/kmymoneyview.cpp:844
+msgid "An unrecoverable error occurred while reading the database"
+msgstr ""
+
+#: views/kmymoneyview.cpp:846 views/kmymoneyview.cpp:1208
+msgid "Database malfunction"
+msgstr "Veritabanı bozukluğu"
+
+#: views/kmymoneyview.cpp:938
+msgid "Unknown fix level in input file"
+msgstr ""
+
+#: views/kmymoneyview.cpp:984
+msgid ""
+"GPG does not seem to be installed on your system. Please make sure, that GPG "
+"can be found using the standard search path. This time, encryption is "
+"disabled."
+msgstr ""
+
+#: views/kmymoneyview.cpp:984
+msgid "GPG not found"
+msgstr "GPG bulunamadı"
+
+#: views/kmymoneyview.cpp:991
+msgid ""
+"You have selected to encrypt your data also with the KMyMoney recover key, "
+"but the key with id</p><p><center><b>%1</b></center></p>has not been found "
+"in your keyring at this time. Please make sure to import this key into your "
+"keyring. You can find it on the <a href=\"http://kmymoney2.sourceforge.net/"
+"\">KMyMoney web-site</a>. This time your data will not be encrypted with the "
+"KMyMoney recover key."
+msgstr ""
+
+#: views/kmymoneyview.cpp:991 views/kmymoneyview.cpp:1000
+msgid "GPG-Key not found"
+msgstr "GPG-Key bulunamadı"
+
+#: views/kmymoneyview.cpp:1000
+msgid ""
+"You have specified to encrypt your data for the user-id</p><p><center><b>%1</"
+"b>.</center></p>Unfortunately, a valid key for this user-id was not found in "
+"your keyring. Please make sure to import a valid key for this user-id. This "
+"time, encryption is disabled."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1006
+msgid ""
+"You have configured to save your data in encrypted form using GPG. Please be "
+"aware, that this is a brand new feature which is yet untested. Make sure, "
+"you have the necessary understanding that you might loose all your data if "
+"you store it encrypted and cannot decrypt it later on! If unsure, answer "
+"<b>No</b>."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1008
+msgid "Store GPG encrypted"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1038 views/kmymoneyview.cpp:1052
+msgid "Unable to open file '%1' for writing."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1065 views/kmymoneyview.cpp:1074
+msgid "Failure while writing to '%1'"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1086 views/kmymoneyview.cpp:1181
+msgid "Tried to access a file when it's not open"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1092
+msgid ""
+"Since this version of KMyMoney only writes data files in its new format, "
+"files written with this version cannot be read by KMyMoney version 0.4. If "
+"you still want to use older versions of KMyMoney with your data files, "
+"please make sure you keep a backup-file of your finance data. If you want to "
+"abort this operation, please press Cancel now"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1122
+msgid "Malformed URL '%1'"
+msgstr "Bozuk Adres '%1'"
+
+#: views/kmymoneyview.cpp:1192
+msgid ""
+"Database contains data which must be removed before using SaveAs.\n"
+"Do you wish to continue?"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1205
+msgid ""
+"An unrecoverable error occurred while writing to the database.\n"
+"It may well be corrupt."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1215
+msgid ""
+"Can't open or create database %1\n"
+"Retry SaveAsDatabase and click Help for further info"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1354
+msgid "Afghanistan Afghani"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1355
+msgid "Albanian Lek"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1356
+msgid "Netherland Antillian Guilder"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1357
+msgid "Algerian Dinar"
+msgstr "Cezayir Dinarı"
+
+#: views/kmymoneyview.cpp:1358
+msgid "Andorran Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1359
+msgid "Andorran Peseta"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1360
+msgid "Angolan New Kwanza"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1361
+msgid "Argentine Peso"
+msgstr "Arjantin Pesosu"
+
+#: views/kmymoneyview.cpp:1362
+msgid "Aruban Florin"
+msgstr "Aruba Florini"
+
+#: views/kmymoneyview.cpp:1363
+msgid "Australian Dollar"
+msgstr "Avustralya Doları"
+
+#: views/kmymoneyview.cpp:1364
+msgid "Azerbaijani Manat"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1365
+msgid "Bahamian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1366
+msgid "Bahraini Dinar"
+msgstr "Bahreyn Dinarı"
+
+#: views/kmymoneyview.cpp:1367
+msgid "Bangladeshi Taka"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1368
+msgid "Barbados Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1369
+msgid "Belarussian Ruble"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1370
+msgid "Belize Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1371
+msgid "Bermudian Dollar"
+msgstr "Bermuda Doları"
+
+#: views/kmymoneyview.cpp:1372
+msgid "Bhutan Ngultrum"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1373
+msgid "Bolivian Boliviano"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1374
+msgid "Bosnian Convertible Mark"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1375
+msgid "Botswana Pula"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1376
+msgid "Brazilian Real"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1377
+msgid "British Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1378
+msgid "Brunei Dollar"
+msgstr "Brunei Doları"
+
+#: views/kmymoneyview.cpp:1379
+msgid "Bulgarian Lev"
+msgstr "Bulgar Levası"
+
+#: views/kmymoneyview.cpp:1380
+msgid "Burundi Franc"
+msgstr "Burundi Frankı"
+
+#: views/kmymoneyview.cpp:1381
+msgid "CFA Franc BEAC"
+msgstr "CFA Franc BEAC"
+
+#: views/kmymoneyview.cpp:1382
+msgid "CFA Franc BCEAO"
+msgstr "CFA Franc BCEAO"
+
+#: views/kmymoneyview.cpp:1383
+msgid "CFP Franc Pacifique"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1384
+msgid "Cambodia Riel"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1385
+msgid "Canadian Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1386
+msgid "Cape Verde Escudo"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1387
+msgid "Cayman Islands Dollar"
+msgstr "Cayman Adaları Doları"
+
+#: views/kmymoneyview.cpp:1388
+msgid "Chilean Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1389
+msgid "Chinese Yuan Renminbi"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1390
+msgid "Colombian Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1391
+msgid "Comoros Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1392
+msgid "Costa Rican Colon"
+msgstr "Kosta Rika Kolonu"
+
+#: views/kmymoneyview.cpp:1393
+msgid "Croatian Kuna"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1394
+msgid "Cuban Peso"
+msgstr "Küba Pezosu"
+
+#: views/kmymoneyview.cpp:1395
+msgid "Czech Koruna"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1396
+msgid "Danish Krone"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1397
+msgid "Djibouti Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1398
+msgid "Dominican Peso"
+msgstr "Dominik Pezosu"
+
+#: views/kmymoneyview.cpp:1399
+msgid "East Caribbean Dollar"
+msgstr "Doğu Karayip Doları"
+
+#: views/kmymoneyview.cpp:1400
+msgid "Egyptian Pound"
+msgstr "Mısır Paundu"
+
+#: views/kmymoneyview.cpp:1401
+msgid "El Salvador Colon"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1402
+msgid "Eritrean Nakfa"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1403
+msgid "Estonian Kroon"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1404
+msgid "Ethiopian Birr"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1405
+msgid "Euro"
+msgstr "Avro"
+
+#: views/kmymoneyview.cpp:1406
+msgid "Falkland Islands Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1407
+msgid "Fiji Dollar"
+msgstr "Fiji Doları"
+
+#: views/kmymoneyview.cpp:1408
+msgid "Gambian Dalasi"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1409
+msgid "Georgian Lari"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1410
+msgid "Ghanaian Cedi"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1411
+msgid "Gibraltar Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1412
+msgid "Guatemalan Quetzal"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1413
+msgid "Guinea-Bissau Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1414
+msgid "Guyanan Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1415
+msgid "Haitian Gourde"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1416
+msgid "Honduran Lempira"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1417
+msgid "Hong Kong Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1418
+msgid "Hungarian Forint"
+msgstr "Macar Forini"
+
+#: views/kmymoneyview.cpp:1419
+msgid "Iceland Krona"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1420
+msgid "Indian Rupee"
+msgstr "Hindistan Rupisi"
+
+#: views/kmymoneyview.cpp:1421
+msgid "Indonesian Rupiah"
+msgstr "Endonezya Rupisi"
+
+#: views/kmymoneyview.cpp:1422
+msgid "Iranian Rial"
+msgstr "İran Riyali"
+
+#: views/kmymoneyview.cpp:1423
+msgid "Iraqi Dinar"
+msgstr "Irak Dinarı"
+
+#: views/kmymoneyview.cpp:1424
+msgid "Israeli New Shekel"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1425
+msgid "Jamaican Dollar"
+msgstr "Jamaika Doları"
+
+#: views/kmymoneyview.cpp:1426
+msgid "Japanese Yen"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1427
+msgid "Jordanian Dinar"
+msgstr "Ürdün Dinarı"
+
+#: views/kmymoneyview.cpp:1428
+msgid "Kazakhstan Tenge"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1429
+msgid "Kenyan Shilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1430
+msgid "Kuwaiti Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1431
+msgid "Kyrgyzstan Som"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1432
+msgid "Laos Kip"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1433
+msgid "Latvian Lats"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1434
+msgid "Lebanese Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1435
+msgid "Lesotho Loti"
+msgstr "Lesotho Lotisi"
+
+#: views/kmymoneyview.cpp:1436
+msgid "Liberian Dollar"
+msgstr "Liberya Doları"
+
+#: views/kmymoneyview.cpp:1437
+msgid "Libyan Dinar"
+msgstr "Libya Dinarı"
+
+#: views/kmymoneyview.cpp:1438
+msgid "Lithuanian Litas"
+msgstr "Litvanya Litası"
+
+#: views/kmymoneyview.cpp:1439
+msgid "Macau Pataca"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1440
+msgid "Macedonian Denar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1441
+msgid "Malagasy Franc"
+msgstr "Madagaskar Frankı"
+
+#: views/kmymoneyview.cpp:1442
+msgid "Malawi Kwacha"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1443
+msgid "Malaysian Ringgit"
+msgstr "Malezya Ringiti"
+
+#: views/kmymoneyview.cpp:1444
+msgid "Maldive Rufiyaa"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1445
+msgid "Mali Republic Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1446
+msgid "Mauritanian Ouguiya"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1447
+msgid "Mauritius Rupee"
+msgstr "Mauritius Rupisi"
+
+#: views/kmymoneyview.cpp:1448
+msgid "Mexican Peso"
+msgstr "Meksika Pezosu"
+
+#: views/kmymoneyview.cpp:1449
+msgid "Moldavian Leu"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1450
+msgid "Mongolian Tugrik"
+msgstr "Moğolistan Tugriki"
+
+#: views/kmymoneyview.cpp:1451
+msgid "Moroccan Dirham"
+msgstr "Fas Dirhamı"
+
+#: views/kmymoneyview.cpp:1452
+msgid "Mozambique Metical"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1453
+msgid "Myanmar Kyat"
+msgstr "Myanmar Kyatı"
+
+#: views/kmymoneyview.cpp:1454
+msgid "Namibian Dollar"
+msgstr "Namibya Doları"
+
+#: views/kmymoneyview.cpp:1455
+msgid "Nepalese Rupee"
+msgstr "Nepal Rupisi"
+
+#: views/kmymoneyview.cpp:1456
+msgid "New Zealand Dollar"
+msgstr "Yeni Zelanda Doları"
+
+#: views/kmymoneyview.cpp:1457
+msgid "Nicaraguan Cordoba Oro"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1458
+msgid "Nigerian Naira"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1459
+msgid "North Korean Won"
+msgstr "Kuzey Kore Wonu"
+
+#: views/kmymoneyview.cpp:1460
+msgid "Norwegian Kroner"
+msgstr "Norveç Kronu"
+
+#: views/kmymoneyview.cpp:1461
+msgid "Omani Rial"
+msgstr "Umman Riyali"
+
+#: views/kmymoneyview.cpp:1462
+msgid "Pakistan Rupee"
+msgstr "Pakistan Rupisi"
+
+#: views/kmymoneyview.cpp:1463
+msgid "Panamanian Balboa"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1464
+msgid "Papua New Guinea Kina"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1465
+msgid "Paraguay Guarani"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1466
+msgid "Peruvian Nuevo Sol"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1467
+msgid "Philippine Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1468
+msgid "Polish Zloty"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1469
+msgid "Qatari Rial"
+msgstr "Katar Riyali"
+
+#: views/kmymoneyview.cpp:1470
+msgid "Romanian Leu (new)"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1471
+msgid "Russian Ruble"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1472
+msgid "Rwanda Franc"
+msgstr "Ruanda Frankı"
+
+#: views/kmymoneyview.cpp:1473
+msgid "Samoan Tala"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1474
+msgid "Sao Tome and Principe Dobra"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1475
+msgid "Saudi Riyal"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1476
+msgid "Seychelles Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1477
+msgid "Sierra Leone Leone"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1478
+msgid "Singapore Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1481
+msgid "Solomon Islands Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1482
+msgid "Somali Shilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1483
+msgid "South African Rand"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1484
+msgid "South Korean Won"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1485
+msgid "Sri Lanka Rupee"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1486
+msgid "St. Helena Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1487
+msgid "Sudanese Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1488
+msgid "Suriname Guilder"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1489
+msgid "Swaziland Lilangeni"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1490
+msgid "Swedish Krona"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1491
+msgid "Swiss Franc"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1492
+msgid "Syrian Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1493
+msgid "Taiwan Dollar"
+msgstr "Tayvan Doları"
+
+#: views/kmymoneyview.cpp:1494
+msgid "Tajikistan Somani"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1495
+msgid "Tanzanian Shilling"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1496
+msgid "Thai Baht"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1497
+msgid "Tongan Pa'anga"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1498
+msgid "Trinidad and Tobago Dollar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1499
+msgid "Tunisian Dinar"
+msgstr "Tunus Dinarı"
+
+#: views/kmymoneyview.cpp:1500
+msgid "Turkish Lira (new)"
+msgstr "Türk Lirası (YTL)"
+
+#: views/kmymoneyview.cpp:1501
+msgid "Turkmenistan Manat"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1502
+msgid "US Dollar"
+msgstr "ABD Doları"
+
+#: views/kmymoneyview.cpp:1503
+msgid "Uganda Shilling"
+msgstr "Uganda Şilini"
+
+#: views/kmymoneyview.cpp:1504
+msgid "Ukraine Hryvnia"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1505
+msgid "United Arab Emirates Dirham"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1506
+msgid "Uruguayan Peso"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1507
+msgid "Uzbekistani Sum"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1508
+msgid "Vanuatu Vatu"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1509
+msgid "Venezuelan Bolivar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1510
+msgid "Vietnamese Dong"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1511
+msgid "Yugoslav Dinar"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1512
+msgid "Zambian Kwacha"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1513
+msgid "Zimbabwe Dollar"
+msgstr "Zimbabve Doları"
+
+#: views/kmymoneyview.cpp:1515
+msgid "Gold"
+msgstr "Altın"
+
+#: views/kmymoneyview.cpp:1516
+msgid "Palladium"
+msgstr "Palladium"
+
+#: views/kmymoneyview.cpp:1517
+msgid "Platinum"
+msgstr "Platin"
+
+#: views/kmymoneyview.cpp:1518
+msgid "Silver"
+msgstr "Gümüş"
+
+#: views/kmymoneyview.cpp:1551
+msgid "Austrian Schilling"
+msgstr "Avusturya Şilini"
+
+#: views/kmymoneyview.cpp:1552
+msgid "German Mark"
+msgstr "Alman Markı"
+
+#: views/kmymoneyview.cpp:1553
+msgid "French Franc"
+msgstr "Fransız Frankı"
+
+#: views/kmymoneyview.cpp:1554
+msgid "Italian Lira"
+msgstr "İtalyan Lireti"
+
+#: views/kmymoneyview.cpp:1555
+msgid "Spanish Peseta"
+msgstr "İspanyol Pezetası"
+
+#: views/kmymoneyview.cpp:1556
+msgid "Dutch Guilder"
+msgstr "Hollanda Guldeni"
+
+#: views/kmymoneyview.cpp:1557
+msgid "Belgian Franc"
+msgstr "Belçika Frankı"
+
+#: views/kmymoneyview.cpp:1558
+msgid "Luxembourg Franc"
+msgstr "Lüksemburg Frankı"
+
+#: views/kmymoneyview.cpp:1559
+msgid "Portuguese Escudo"
+msgstr "Portekiz Eskudosu"
+
+#: views/kmymoneyview.cpp:1560
+msgid "Irish Pound"
+msgstr "İrlanda Paundu"
+
+#: views/kmymoneyview.cpp:1561
+msgid "Finnish Markka"
+msgstr "Fin Markkası"
+
+#: views/kmymoneyview.cpp:1562
+msgid "Greek Drachma"
+msgstr "Yunan Drahmisi"
+
+#: views/kmymoneyview.cpp:1564
+msgid "Romanian Leu"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1566
+msgid "Russian Ruble (old)"
+msgstr "Rus Rublesi (eski)"
+
+#: views/kmymoneyview.cpp:1568
+msgid "Slovenian Tolar"
+msgstr "Slovenya Toları"
+
+#: views/kmymoneyview.cpp:1571
+msgid "Turkish Lira"
+msgstr "Türk Lirası"
+
+#: views/kmymoneyview.cpp:1574
+msgid "Maltese Lira"
+msgstr "Malta Lirası"
+
+#: views/kmymoneyview.cpp:1575
+msgid "Cyprus Pound"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1578
+msgid "Slovak Koruna"
+msgstr ""
+
+#: views/kmymoneyview.cpp:1888
+msgid ""
+"The account \"%1\" was previously created as loan account but some "
+"information is missing. The new loan wizard will be started to collect all "
+"relevant information. Please use a KMyMoney version >= 0.8.7 and < 0.9 to "
+"correct the problem."
+msgstr ""
+
+#: views/kmymoneyview.cpp:1892
+msgid "Account problem"
+msgstr "Hesap sorunu"
+
+#: views/kmymoneyview.cpp:1941
+msgid "Unable to add schedule: "
+msgstr "Zamanlama eklenemedi:"
+
+#: views/kmymoneyview.cpp:1970
+msgid "Fix transactions"
+msgstr "Aktarımları düzelt"
+
+#: views/kaccountsview.cpp:522 views/kinstitutionsview.cpp:300
+msgid "Net Worth: "
+msgstr ""
+
+#: dialogs/rc.cpp:108 dialogs/rc.cpp:163 dialogs/rc.cpp:250 dialogs/rc.cpp:755
+#: dialogs/rc.cpp:830 views/kinvestmentview.cpp:77 widgets/register.cpp:572
+msgid "Quantity"
+msgstr "Miktar"
+
+#: views/kscheduledlistitem.cpp:137
+msgid "Finished"
+msgstr "Bitti"
+
+#: views/kbudgetview.cpp:109
+msgid "Creates a new budget"
+msgstr "Yeni bir bütçe oluşturur"
+
+#: views/kbudgetview.cpp:110
+#, fuzzy
+msgid "Use this to create a new empty budget."
+msgstr "Yeni boş bir bütçe oluşturmak için bunu kullanın."
+
+#: views/kbudgetview.cpp:116
+msgid "Rename the current selected budget"
+msgstr ""
+
+#: views/kbudgetview.cpp:117
+msgid "Use this to start renaming the selected budget."
+msgstr ""
+
+#: views/kbudgetview.cpp:123
+msgid "Delete the current selected budget"
+msgstr ""
+
+#: views/kbudgetview.cpp:124
+msgid "Use this to delete the selected budget."
+msgstr "Seçilen bütçeyi silmek için bunu kullanın."
+
+#: views/kbudgetview.cpp:130
+msgid "Accepts the entered values and stores the budget"
+msgstr ""
+
+#: views/kbudgetview.cpp:131
+msgid "Use this to store the modified data."
+msgstr "Değiştirilen verileri kaydetmek için bunu kullanın."
+
+#: views/kbudgetview.cpp:137
+msgid "Revert budget to last saved state"
+msgstr ""
+
+#: views/kbudgetview.cpp:138
+msgid "Use this to discard the modified data."
+msgstr "Değiştirilen verileri yoksaymak için bunu kullanın."
+
+#: views/kbudgetview.cpp:489
+msgid "Do you want to save the changes for <b>%1</b>"
+msgstr "<b>%1</b> için değişiklikleri kaydetmek istiyor musunuz"
+
+#: views/kbudgetview.cpp:610
+msgid ""
+"A budget with the name '%1' already exists. It is not advisable to have "
+"multiple budgets with the same identification name. Are you sure you would "
+"like to rename the budget?"
+msgstr ""
+
+#: views/kbudgetview.cpp:635 views/kbudgetview.cpp:750
+msgid "Unable to modify budget"
+msgstr "Bütçe değiştirilemedi"
+
+#: views/kbudgetview.cpp:736
+msgid "Unable to reset budget"
+msgstr "Bütçe sıfırlanamadı"
+
+#: views/rc.cpp:1
+msgid "List"
+msgstr "Liste"
+
+#: views/rc.cpp:2 views/rc.cpp:20
+msgid "Collapse all accounts in the list"
+msgstr ""
+
+#: views/rc.cpp:3 views/rc.cpp:21
+msgid "Expand all accounts in the list"
+msgstr ""
+
+#: views/rc.cpp:4
+msgid "Icons"
+msgstr "Simgeler"
+
+#: views/rc.cpp:5 views/rc.cpp:22
+msgid "Note: Unused categories are not shown as selected by settings."
+msgstr ""
+
+#: views/rc.cpp:6 views/rc.cpp:23 views/rc.cpp:54
+msgid "Total Profits:"
+msgstr "Toplam Kâr:"
+
+#: views/rc.cpp:7
+msgid "Your budgets"
+msgstr "Bütçeleriniz"
+
+#: dialogs/rc.cpp:340 dialogs/rc.cpp:841 dialogs/settings/rc.cpp:124
+#: views/rc.cpp:8 widgets/rc.cpp:48 widgets/rc.cpp:150
+msgid "New"
+msgstr "Yeni"
+
+#: views/rc.cpp:9
+#, fuzzy
+msgid "Ren"
+msgstr "&Ren"
+
+#: views/rc.cpp:10
+msgid "Del"
+msgstr "Del"
+
+#: views/rc.cpp:11
+msgid "Res"
+msgstr "Res"
+
+#: views/rc.cpp:12
+msgid "Upd"
+msgstr "Upd"
+
+#: views/rc.cpp:15
+msgid "Hide unused budget categories"
+msgstr "Kullanılmayan bütçe kategorilerini gizle"
+
+#: views/rc.cpp:16
+msgid "Assignments"
+msgstr "Atamalar"
+
+#: views/rc.cpp:19
+#, fuzzy
+msgid "Include subaccounts"
+msgstr "Alt hesapları &içer"
+
+#: dialogs/settings/rc.cpp:23 views/rc.cpp:24
+msgid "Forecast Settings"
+msgstr "Tahmin Ayarları"
+
+#: views/rc.cpp:25
+msgid "Days to Forecast:"
+msgstr "Tahmine kalan Süre:"
+
+#: views/rc.cpp:26
+msgid "Days of Accounts Cycle:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:25 views/rc.cpp:27
+msgid "Day of Month to start Forecast:"
+msgstr ""
+
+#: views/rc.cpp:28
+msgid "Historic Cycles:"
+msgstr ""
+
+#: views/rc.cpp:29
+#, fuzzy
+msgid "Chart Detail:"
+msgstr "Ayrıntı"
+
+#: views/rc.cpp:30 widgets/kmymoneyaccountselector.cpp:64 widgets/rc.cpp:65
+msgid "All"
+msgstr "Tümü"
+
+#: views/rc.cpp:31 widgets/rc.cpp:66
+msgid "Top-Level"
+msgstr "Üst Seviye"
+
+#: views/rc.cpp:32 widgets/rc.cpp:67
+msgid "Groups"
+msgstr "Gruplar"
+
+#: views/rc.cpp:33 widgets/rc.cpp:68
+msgid "Totals"
+msgstr "Toplamlar"
+
+#: views/rc.cpp:34
+#, fuzzy
+msgid "<p>Choose what level of detail to show on the chart.</p>"
+msgstr "<p>Bu rapor için bir isim seçin.</p>"
+
+#: views/rc.cpp:35
+msgid "Current Forecast Method:"
+msgstr "Geçerli Tahmin Yöntemi:"
+
+#: views/rc.cpp:36
+msgid "method"
+msgstr "yöntem"
+
+#: dialogs/settings/rc.cpp:32 views/rc.cpp:37
+msgid "History Forecast Method"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:33 views/rc.cpp:38
+msgid "Simple Moving Average"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:34 views/rc.cpp:39
+msgid "Weighted Moving Average"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:35 views/rc.cpp:40
+msgid "Linear Regression"
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:315 dialogs/rc.cpp:628 dialogs/rc.cpp:647
+#: views/rc.cpp:43
+msgid "Summary"
+msgstr "Özet"
+
+#: views/rc.cpp:45
+msgid "0 days"
+msgstr "0 gün"
+
+#: views/rc.cpp:46
+msgid "30 days"
+msgstr "30 gün"
+
+#: views/rc.cpp:47
+msgid "60 days"
+msgstr "60 gün"
+
+#: views/rc.cpp:48
+msgid "90 days"
+msgstr "90 gün"
+
+#: views/rc.cpp:49
+msgid "New Item"
+msgstr "Yeni Öge"
+
+#: views/rc.cpp:50 widgets/rc.cpp:64
+msgid "Detail"
+msgstr "Ayrıntı"
+
+#: views/rc.cpp:51
+#, fuzzy
+msgid "Advanced"
+msgstr "&Gelişmiş"
+
+#: views/rc.cpp:52
+msgid "Budget Forecast"
+msgstr "Bütçe Tahmini"
+
+#: views/rc.cpp:55
+msgid "Investment Summary"
+msgstr "Yatırım Özeti"
+
+#: views/rc.cpp:56
+msgid "Select Account:"
+msgstr "Hesap Seç:"
+
+#: views/rc.cpp:57
+msgid ""
+"Summary of the equities contained in this account, showing your holdings and "
+"their most recent price."
+msgstr ""
+
+#: views/rc.cpp:60 widgets/register.cpp:564
+msgid "No."
+msgstr "No."
+
+#: views/rc.cpp:64
+msgid "Balance: "
+msgstr ""
+
+#: views/rc.cpp:65
+#, fuzzy
+msgid "Address"
+msgstr "Adres:"
+
+#: views/rc.cpp:66
+msgid "Payee Information"
+msgstr "Alıcı Bilgisi"
+
+#: views/rc.cpp:67
+msgid "E-Mail:"
+msgstr "E-Posta:"
+
+#: dialogs/rc.cpp:393 views/rc.cpp:69
+msgid "Telephone/Fax:"
+msgstr "Telefon/Faks:"
+
+#: views/rc.cpp:70
+#, fuzzy
+msgid "Notes"
+msgstr "Notlar:"
+
+#: views/rc.cpp:71
+msgid "Address:"
+msgstr "Adres:"
+
+#: views/rc.cpp:72
+#, fuzzy
+msgid "Matching"
+msgstr "Eşleşme yok"
+
+#: views/rc.cpp:73
+msgid "Transaction Matching"
+msgstr ""
+
+#: views/rc.cpp:74
+msgid "No matching"
+msgstr "Eşleşme yok"
+
+#: views/rc.cpp:75
+msgid "Match on Payee name"
+msgstr ""
+
+#: views/rc.cpp:76
+msgid "Match on a name listed below"
+msgstr ""
+
+#: views/rc.cpp:77
+#, fuzzy
+msgid "List of matching names"
+msgstr "Eşleşme yok"
+
+#: views/rc.cpp:78
+msgid ""
+"This list contains the names that will match this payee if a transaction is "
+"imported from an external source. Keep in mind, that you can specify regular "
+"expressions here."
+msgstr ""
+
+#: views/rc.cpp:79
+msgid "Ignore Case"
+msgstr ""
+
+#: views/rc.cpp:80
+#, fuzzy
+msgid "Default Account"
+msgstr "Hesap Seç"
+
+#: views/rc.cpp:81
+#, fuzzy
+msgid ""
+"Use the default account for\n"
+"new transactions with this payee"
+msgstr "Aktarımları ana hesap defterine eklemek için bunu kullan."
+
+#: views/rc.cpp:82
+#, fuzzy
+msgid "Default category:"
+msgstr "Kategori oluştur"
+
+#: views/rc.cpp:83
+#, fuzzy
+msgid "Suggest a category"
+msgstr "Sadece kategoriyi"
+
+#: views/rc.cpp:85
+#, fuzzy
+msgid "New Scheduled transaction..."
+msgstr "Zamanlanmış aktarım gir"
+
+#: views/rc.cpp:86
+msgid "Filter Accounts"
+msgstr "Hesapları Filtrele"
+
+#: views/rc.cpp:87
+msgid "List View"
+msgstr "Liste Görünümü"
+
+#: views/rc.cpp:88
+msgid "Calendar View"
+msgstr "Takvim Görünümü"
+
+#: views/kinstitutionsview.cpp:43
+msgid "Institution/Account"
+msgstr "Şirket/Hesap"
+
+#: views/kinstitutionsview.cpp:157
+msgid "Accounts with no institution assigned"
+msgstr "Bir şirkete atanmayan hesaplar"
+
+#: views/kscheduledview.cpp:70
+msgid "Type/Name"
+msgstr "Tip/İsim"
+
+#: views/kscheduledview.cpp:75
+msgid "Frequency"
+msgstr "Sıklık"
+
+#: views/kscheduledview.cpp:157
+msgid "Unable to load accounts: "
+msgstr "Hesaplar yüklenemedi:"
+
+#: views/kscheduledview.cpp:171 views/kscheduledview.cpp:429
+#: views/kscheduledview.cpp:445 widgets/kmymoneyscheduledcalendar.cpp:46
+msgid "Bills"
+msgstr "Faturalar"
+
+#: dialogs/rc.cpp:232 dialogs/rc.cpp:706 views/kscheduledview.cpp:172
+#: views/kscheduledview.cpp:431 views/kscheduledview.cpp:447
+#: widgets/kmymoneyscheduledcalendar.cpp:47
+msgid "Deposits"
+msgstr "Depozitler"
+
+#: views/kscheduledview.cpp:173 views/kscheduledview.cpp:435
+#: views/kscheduledview.cpp:451
+msgid "Loans"
+msgstr ""
+
+#: views/kscheduledview.cpp:357
+msgid "Error activating context menu"
+msgstr "Sağ tıklama menüsü etkinleştirilirken hata oluştu"
+
+#: views/kscheduledview.cpp:385
+msgid "Error executing item"
+msgstr "Öge çalıştırılırken bir hata oluştu"
+
+#: views/kscheduledview.cpp:419
+msgid "Unable to filter account"
+msgstr "Hesap filtrelenemedi"
+
+#: views/kgloballedgerview.cpp:508
+#, fuzzy
+msgid "Statement Details"
+msgstr "Yatırım detayları"
+
+#: views/kgloballedgerview.cpp:512
+msgid "Statement Deposit Details"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:513
+#, fuzzy
+msgid "Statement Payment Details"
+msgstr "Yatırım detayları"
+
+#: views/kgloballedgerview.cpp:642
+msgid "%1 deposits (%3), %2 payments (%4)"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:649
+#, fuzzy
+msgid "%1 payments (%2)"
+msgstr " (%1 ödeme)"
+
+#: views/kgloballedgerview.cpp:653
+#, fuzzy
+msgid "%1 deposits (%2)"
+msgstr "%1 Depozit."
+
+#: views/kgloballedgerview.cpp:721
+#, c-format
+msgid "Statement: %1"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:722 views/kgloballedgerview.cpp:736
+#, c-format
+msgid "Cleared: %1"
+msgstr "Temizlenmiş: %1"
+
+#: views/kgloballedgerview.cpp:723
+#, c-format
+msgid "Difference: %1"
+msgstr "Fark: %1"
+
+#: views/kgloballedgerview.cpp:730
+#, c-format
+msgid "Last reconciled: %1"
+msgstr "Son uzlaştırma: %1"
+
+#: views/kgloballedgerview.cpp:732
+msgid "Never reconciled"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:772
+msgid "Investment value: %1%2"
+msgstr "Yatırım değeri: %1%2"
+
+#: views/kgloballedgerview.cpp:1040
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to continue to edit the transactions anyway?"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1051
+msgid ""
+"At least one split of the selected transactions has been frozen. Editing the "
+"transactions is therefore prohibited."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1053
+msgid "Transaction already frozen"
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1058
+msgid ""
+"At least one split of the selected transaction references an account that "
+"has been closed. Editing the transactions is therefore prohibited."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1060
+#, fuzzy
+msgid "Account closed"
+msgstr "Hesaplar"
+
+#: views/kgloballedgerview.cpp:1349
+msgid "Cannot create transactions when no account is selected."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1354
+msgid "Cannot create transactions in the context of a category."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1358
+#, fuzzy
+msgid "Cannot create transactions in a closed account."
+msgstr "Aktarım düzenlemeyi iptal et"
+
+#: views/kgloballedgerview.cpp:1370
+msgid "Cannot process transaction with focus if it is not selected."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1400
+msgid "Cannot edit transactions with frozen splits."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1411
+msgid "Cannot edit transactions in the context of a category."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1430
+msgid ""
+"Cannot edit investment transactions and non-investment transactions together."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1438
+msgid "Cannot edit multiple split transactions at once."
+msgstr ""
+
+#: views/kgloballedgerview.cpp:1448
+msgid "Cannot edit investment transactions in the context of this account."
+msgstr ""
+
+#: views/kforecastview.cpp:164
+msgid "Scheduled"
+msgstr "Zamanlanmış"
+
+#: views/kforecastview.cpp:169
+msgid "History"
+msgstr "Geçmiş"
+
+#: views/kforecastview.cpp:296
+msgid "The balance of %2 is below the minimum balance %3 today."
+msgstr ""
+
+#: views/kforecastview.cpp:301 views/khomeview.cpp:1043
+msgid "The balance of %1 will drop below the minimum balance %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:318 views/khomeview.cpp:1059
+msgid "The balance of %1 is below %2 today."
+msgstr ""
+
+#: views/kforecastview.cpp:323 views/khomeview.cpp:1064
+msgid "The balance of %1 is above %2 today."
+msgstr ""
+
+#: views/kforecastview.cpp:330 views/khomeview.cpp:1070
+msgid "The balance of %1 will drop below %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:335 views/khomeview.cpp:1075
+msgid "The balance of %1 will raise above %2 in %3 days."
+msgstr ""
+
+#: views/kforecastview.cpp:348
+msgid "The account %1 is decreasing %2 per cycle."
+msgstr ""
+
+#: views/kforecastview.cpp:404 widgets/kmymoneyaccounttreeforecast.cpp:114
+#, c-format
+msgid "Min Bal %1"
+msgstr ""
+
+#: views/kforecastview.cpp:406 widgets/kmymoneyaccounttreeforecast.cpp:116
+#, c-format
+msgid "Min Date %1"
+msgstr ""
+
+#: views/kforecastview.cpp:409 widgets/kmymoneyaccounttreeforecast.cpp:119
+#, c-format
+msgid "Max Bal %1"
+msgstr ""
+
+#: views/kforecastview.cpp:411 widgets/kmymoneyaccounttreeforecast.cpp:121
+#, c-format
+msgid "Max Date %1"
+msgstr ""
+
+#: views/kforecastview.cpp:413 widgets/kmymoneyaccounttreeforecast.cpp:123
+msgid "Average"
+msgstr ""
+
+#: views/kforecastview.cpp:649 views/khomeview.cpp:268 views/khomeview.cpp:275
+msgid "Networth Forecast"
+msgstr ""
+
+#: views/khomeview.cpp:203
+msgid "Your Financial Summary"
+msgstr "Finansal Özetiniz"
+
+#: views/khomeview.cpp:218
+msgid "Preferred Accounts"
+msgstr "Tercih Edilen Hesaplar"
+
+#: views/khomeview.cpp:225 views/khomeview.cpp:227
+msgid "Payment Accounts"
+msgstr "Ödeme Hesapları"
+
+#: views/khomeview.cpp:256
+msgid "Show KMyMoney welcome page"
+msgstr "KMyMoney hoşgeldin sayfasını göster"
+
+#: views/khomeview.cpp:409
+msgid "Overdue payments"
+msgstr "Gecikmiş ödemeler"
+
+#: views/khomeview.cpp:424 views/khomeview.cpp:497 views/khomeview.cpp:531
+#, fuzzy
+msgid "Balance after"
+msgstr "Bilanço"
+
+#: views/khomeview.cpp:482
+#, fuzzy
+msgid "Today's payments"
+msgstr "Bugünün ödemeleri"
+
+#: views/khomeview.cpp:516
+msgid "Future payments"
+msgstr "Gelecek ödemeler"
+
+#: views/khomeview.cpp:585
+#, fuzzy
+msgid "Less..."
+msgstr "Daha az..."
+
+#: views/khomeview.cpp:587
+#, fuzzy
+msgid "More..."
+msgstr "Daha fazla..."
+
+#: views/khomeview.cpp:622
+#, fuzzy
+msgid "Enter schedule"
+msgstr "Zamanlama Gir"
+
+#: views/khomeview.cpp:624
+#, fuzzy
+msgid "Skip schedule"
+msgstr "Zamanlamayı atla..."
+
+#: views/khomeview.cpp:627
+#, fuzzy
+msgid "Edit schedule"
+msgstr "Zamanlamayı Düzenle"
+
+#: views/khomeview.cpp:631
+msgid " (%1 payments)"
+msgstr " (%1 ödeme)"
+
+#: views/khomeview.cpp:771
+msgid "To Minimum Balance / Maximum Credit"
+msgstr ""
+
+#: views/khomeview.cpp:964
+#, fuzzy
+msgid "%1 Day Forecast"
+msgstr "Tahmine kalan Süre:"
+
+#: views/khomeview.cpp:973 widgets/kmymoneyaccounttreeforecast.cpp:67
+msgid "%1 days"
+msgstr "%1 gün"
+
+#: views/khomeview.cpp:1039
+msgid "The balance of %1 is below the minimum balance %2 today."
+msgstr ""
+
+#: views/khomeview.cpp:1175
+msgid ""
+"Before KMyMoney can give you detailed information about your financial "
+"status, you need to create at least one account. Until then, KMyMoney shows "
+"the welcome page instead."
+msgstr ""
+
+#: views/khomeview.cpp:1258
+#, fuzzy
+msgid "Assets and Liabilities Summary"
+msgstr "Varlıklar & Borçlar"
+
+#: views/khomeview.cpp:1262
+#, fuzzy
+msgid "Asset Accounts"
+msgstr "Varlık Hesabı"
+
+#: views/khomeview.cpp:1270
+#, fuzzy
+msgid "Liability Accounts"
+msgstr "Borç hesapları"
+
+#: views/khomeview.cpp:1348
+#, fuzzy
+msgid "Total Assets"
+msgstr "Toplamlar"
+
+#: views/khomeview.cpp:1354
+#, fuzzy
+msgid "Total Liabilities"
+msgstr "Varlıklar & Borçlar"
+
+#: views/khomeview.cpp:1399
+#, fuzzy
+msgid "Current Month Summary"
+msgstr "Bu ay"
+
+#: views/khomeview.cpp:1403 views/khomeview.cpp:1440
+#, fuzzy
+msgid "Budgeted"
+msgstr "Bütçe"
+
+#: views/khomeview.cpp:1433
+#, fuzzy
+msgid "Budget Overruns"
+msgstr "Bütçe yılı"
+
+#: views/khomeview.cpp:1502
+msgid "No Budget Categories have been overrun"
+msgstr ""
+
+#: views/khomeview.cpp:1801
+msgid "Cash Flow Summary"
+msgstr ""
+
+#: views/khomeview.cpp:1808
+#, fuzzy
+msgid "Income and Expenses of Current Month"
+msgstr "Bu ayın gelir - giderleri"
+
+#: views/khomeview.cpp:1816
+#, fuzzy
+msgid "Scheduled Income"
+msgstr "Zamanlama adı:"
+
+#: views/khomeview.cpp:1819
+#, fuzzy
+msgid "Expenses"
+msgstr "Gider"
+
+#: views/khomeview.cpp:1822
+#, fuzzy
+msgid "Scheduled Expenses"
+msgstr "Bu ayın gelir - giderleri"
+
+#: views/khomeview.cpp:1850
+#, fuzzy
+msgid "Liquid Assets and Liabilities"
+msgstr "Varlıklar & Borçlar"
+
+#: views/khomeview.cpp:1855
+#, fuzzy
+msgid "Liquid Assets"
+msgstr "Varlık"
+
+#: views/khomeview.cpp:1858
+#, fuzzy
+msgid "Transfers to Liquid Liabilities"
+msgstr "Varlıklar & Borçlar"
+
+#: views/khomeview.cpp:1861
+#, fuzzy
+msgid "Liquid Liabilities"
+msgstr "Borç"
+
+#: views/khomeview.cpp:1864
+#, fuzzy
+msgid "Other Transfers"
+msgstr "Aktarımlar"
+
+#: views/khomeview.cpp:1908
+msgid "Cash Flow Status"
+msgstr ""
+
+#: views/khomeview.cpp:1914
+msgid "Expected Liquid Assets"
+msgstr ""
+
+#: views/khomeview.cpp:1917
+#, fuzzy
+msgid "Expected Liquid Liabilities"
+msgstr "Varlıklar & Borçlar"
+
+#: views/khomeview.cpp:1920
+#, fuzzy
+msgid "Expected Profit/Loss"
+msgstr "Toplam Kâr:"
+
+#: plugins/ofximport/ofximporterplugin.cpp:64
+#, fuzzy
+msgid "OFX..."
+msgstr "QIF ..."
+
+#: plugins/ofximport/ofximporterplugin.cpp:69
+#, fuzzy
+msgid "OFX import file selection"
+msgstr "Çıktı filtresi konumu"
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid ""
+"Unable to import %1 using the OFX importer plugin. This file is not the "
+"correct format."
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid "Incorrect format"
+msgstr "Geçersiz biçem"
+
+#: plugins/ofximport/ofximporterplugin.cpp:122
+#, fuzzy
+msgid "Unable to parse file"
+msgstr "Alacaklı eklenemedi"
+
+#: plugins/ofximport/ofximporterplugin.cpp:576
+#, fuzzy
+msgid "Online settings"
+msgstr "Çevrimiçi Aktarım Ayarları"
+
+#: plugins/ofximport/ofximporterplugin.cpp:635
+#, c-format
+msgid "Error connecting to bank: %1"
+msgstr "Bankaya bağlanırken hata: %1"
+
+#: plugins/ofximport/ofximporterplugin.cpp:646
+msgid ""
+"Unable to import %1 using the OFX importer plugin. The plugin returned the "
+"following error:<p>%2"
+msgstr ""
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Importing process terminated unexpectedly."
+msgstr "İçeri aktarma süreci beklenmedik bir şekilde sonlandı."
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Failed to import all statements."
+msgstr "Tüm ifadelerin içeri aktarılması başarısız oldu."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "The HTTP request failed."
+msgstr "HTTP isteği başarısız oldu."
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "Failed"
+msgstr "Başarısız oldu"
+
+#: plugins/ofximport/ofxpartner.cpp:410
+#, fuzzy
+msgid "Cannot open file %1 for writing"
+msgstr "'%1' dosyası yazmak için açılamadı"
+
+#: plugins/ofximport/ofxpartner.cpp:414
+#, fuzzy
+msgid "OFX setup error"
+msgstr "Dosya Tipi Hatası"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid "Loading banklist"
+msgstr "Banka listesi yükleniyor"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid ""
+"Getting list of banks from http://moneycentral.msn.com/\n"
+"This may take some time depending on the available bandwidth."
+msgstr ""
+"Bankalar listesi http://moneycentral.msn.com/ adresinden alınıyor.\n"
+"İnternet hızınıza bağlı olarak bu işlem biraz zaman alabilir."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:155
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:199
+msgid "Supports online statements<br>"
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:157
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:201
+msgid "Supports investments<br>"
+msgstr "Yatırımları destekliyor<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:159
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:203
+msgid "Supports bill payment (but not supported by KMyMoney yet)<br>"
+msgstr ""
+"Fatura ödemeyi destekliyor (ancak henüz KMyMoney tarafından desteklenmiyor)"
+"<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:163
+msgid "Does not support online banking</p>"
+msgstr "Çevrimiçi bankacılığı desteklemiyor</p>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:173
+msgid "Please choose a bank."
+msgstr "Lütfen bir banka seçin."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:179
+msgid "Please fill all fields with values."
+msgstr ""
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:271
+msgid "No suitable accounts were found at this bank."
+msgstr "Bu bankada uygun hesap bulunamadı."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:283
+msgid "Please choose an account"
+msgstr "Lütfen bir hesap seçin"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:386
+msgid "Server message: %1\n"
+msgstr "Sunucu iletisi: %1\n"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+msgid "Your bank returned warnings when signing on"
+msgstr "Giriş yapılırken bankanızdan uyarılar alındı"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+#, c-format
+msgid "WARNING %1"
+msgstr "UYARI %1"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+msgid "Error signing onto your bank"
+msgstr "Banka ile iletişim hatası"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, c-format
+msgid "ERROR %1"
+msgstr "HATA %1"
+
+#: plugins/ofximport/dialogs/konlinebankingstatus.cpp:59
+#, fuzzy
+msgid "Enabled & configured"
+msgstr "DURUM: Etkin & Yapılandırılmış (%1)"
+
+#: plugins/ofximport/dialogs/rc.cpp:1
+msgid "OFX Direct Connect"
+msgstr "OFX Direkt Bağlantı"
+
+#: plugins/ofximport/dialogs/rc.cpp:2
+msgid "Contacting bank..."
+msgstr "Bankaya bağlanılıyor..."
+
+#: plugins/ofximport/dialogs/rc.cpp:4
+msgid "Online Banking Account Setup"
+msgstr "Çevrimiçi Bankacılık Hesap Ayarları"
+
+#: plugins/ofximport/dialogs/rc.cpp:5
+msgid "Select Financial Institution"
+msgstr "Finansal Kurumu Seç"
+
+#: plugins/ofximport/dialogs/rc.cpp:6
+msgid "Please select your financial institution from the list below..."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:7
+msgid "Automatic"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:8
+msgid "Financial Institution"
+msgstr "Finansal Kurum"
+
+#: plugins/ofximport/dialogs/rc.cpp:9
+#, fuzzy
+msgid "Manual"
+msgstr "Ocak"
+
+#: plugins/ofximport/dialogs/rc.cpp:10
+msgid "Org"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:11
+#, fuzzy
+msgid "FID"
+msgstr "FIID"
+
+#: dialogs/settings/rc.cpp:120 plugins/ofximport/dialogs/rc.cpp:12
+#: widgets/rc.cpp:46
+msgid "URL"
+msgstr "URL"
+
+#: plugins/ofximport/dialogs/rc.cpp:13
+msgid "Enter Login Details"
+msgstr "Giriş Ayrıntılarını Girin"
+
+#: plugins/ofximport/dialogs/rc.cpp:14
+msgid ""
+"Please enter the username and password you use to log into this bank for "
+"online banking. Please note that many banks require a separate signup, and "
+"assign a separate PIN or password just for online banking from home."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:15
+msgid "Connection Details"
+msgstr "Bağlantı Ayrıntıları"
+
+#: plugins/ofximport/dialogs/rc.cpp:16
+msgid "Username"
+msgstr "Kullanıcı adı"
+
+#: plugins/ofximport/dialogs/rc.cpp:17 plugins/ofximport/dialogs/rc.cpp:36
+#, fuzzy
+msgid "Header Version"
+msgstr "Başlık yazı tipi"
+
+#: plugins/ofximport/dialogs/rc.cpp:18 plugins/ofximport/dialogs/rc.cpp:37
+#, fuzzy
+msgid "Identify as"
+msgstr "Kimlik"
+
+#: dialogs/rc.cpp:742 plugins/ofximport/dialogs/rc.cpp:19
+msgid "Password"
+msgstr "Parola"
+
+#: plugins/ofximport/dialogs/rc.cpp:20
+msgid "Select Account"
+msgstr "Hesap Seç"
+
+#: plugins/ofximport/dialogs/rc.cpp:21
+msgid ""
+"Please select the account from your financial institution from the list "
+"below which matches this account."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:24
+msgid "Bank"
+msgstr "Banka"
+
+#: plugins/ofximport/dialogs/rc.cpp:25
+msgid "Branch"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:26
+msgid "WizardPage"
+msgstr "Sihirbaz Sayfası"
+
+#: plugins/ofximport/dialogs/rc.cpp:27
+msgid ""
+"Congratulations! You have successfully set up your bank for online banking "
+"via OFX."
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:28
+msgid "Account Details"
+msgstr "Hesap Detayları"
+
+#: plugins/ofximport/dialogs/rc.cpp:29 plugins/ofximport/dialogs/rc.cpp:31
+#, fuzzy
+msgid "&lt;Not configured&gt;"
+msgstr "HESAP: &lt;Yapılandırılmamış&gt;"
+
+#: plugins/ofximport/dialogs/rc.cpp:30
+#, fuzzy
+msgid "BANK/BROKER:"
+msgstr "BANKA/KOMİSYONCU: %1"
+
+#: plugins/ofximport/dialogs/rc.cpp:32
+#, fuzzy
+msgid "Unavailable"
+msgstr "DURUM: Kullanılabilir değil"
+
+#: plugins/ofximport/dialogs/rc.cpp:33
+#, fuzzy
+msgid "ACCOUNT:"
+msgstr "HESAP: %1"
+
+#: plugins/ofximport/dialogs/rc.cpp:34
+msgid "STATUS:"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:35
+#, fuzzy
+msgid "OFX Details"
+msgstr "Ayrıntılar"
+
+#: plugins/ofximport/dialogs/rc.cpp:38
+#, fuzzy
+msgid "Start date of import"
+msgstr "Başlangıç tarihi"
+
+#: plugins/ofximport/dialogs/rc.cpp:39
+#, fuzzy
+msgid "To&day minus"
+msgstr "Bugünün ödemeleri"
+
+#: plugins/ofximport/dialogs/rc.cpp:40
+#, fuzzy
+msgid "days"
+msgstr "0 gün"
+
+#: plugins/ofximport/dialogs/rc.cpp:41
+#, fuzzy
+msgid "Last &update"
+msgstr "Gönderme tarihi"
+
+#: plugins/ofximport/dialogs/rc.cpp:42
+#, fuzzy
+msgid "Pi&ck date"
+msgstr "Gönderme tarihi"
+
+#: plugins/ofximport/dialogs/rc.cpp:43
+msgid "Name is derived from"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:44
+msgid "P&AYEEID"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:45
+#, fuzzy
+msgid "&NAME"
+msgstr "AMEX"
+
+#: plugins/ofximport/dialogs/rc.cpp:46
+msgid "field if both are present in download"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:81
+msgid "Quicken Windows 2003"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:82
+msgid "Quicken Windows 2004"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:83
+msgid "Quicken Windows 2005"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:84
+msgid "Quicken Windows 2006"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:85
+msgid "Quicken Windows 2007"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:86
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:111
+msgid "Quicken Windows 2008"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:89
+msgid "MS-Money 2003"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:90
+msgid "MS-Money 2004"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:91
+msgid "MS-Money 2005"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:92
+msgid "MS-Money 2006"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:93
+msgid "MS-Money 2007"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:94
+msgid "MS-Money Plus"
+msgstr ""
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:91
+msgid "Report Configuration"
+msgstr "Rapor Yapılandırması"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:117
+#: dialogs/kreportconfigurationfilterdlg.cpp:135
+msgid "Rows/Columns"
+msgstr "Satırlar/Sütunlar"
+
+#: dialogs/investtransactioneditor.cpp:203
+#: dialogs/investtransactioneditor.cpp:537
+#: dialogs/investtransactioneditor.cpp:579 dialogs/rc.cpp:103
+#: dialogs/rc.cpp:158 dialogs/rc.cpp:245 dialogs/rc.cpp:750 dialogs/rc.cpp:794
+#: widgets/kmymoneyaccountselector.cpp:182 widgets/register.cpp:64
+#: widgets/register.cpp:567 widgets/transaction.cpp:1500
+msgid "Security"
+msgstr "Senet"
+
+#: dialogs/investtransactioneditor.cpp:211
+msgid "Asset account"
+msgstr "Varlık hesabı"
+
+#: dialogs/investtransactioneditor.cpp:1073
+msgid "Price/Share"
+msgstr "Fiyat/Paylaşım"
+
+#: dialogs/kmergetransactionsdlg.cpp:39
+msgid "Merge Transactions"
+msgstr "Aktarımları Birleştir"
+
+#: dialogs/kmergetransactionsdlg.cpp:40
+msgid "Are you sure you wish to merge these transactions?"
+msgstr ""
+
+#: dialogs/kstartdlg.cpp:59
+msgid "Start Dialog"
+msgstr "Başlangıç Penceresi"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Templates"
+msgstr "Şablonlar"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Select templates"
+msgstr "Şablonları seç"
+
+#: dialogs/kstartdlg.cpp:80 dialogs/kstartdlg.cpp:119
+msgid "New KMyMoney document"
+msgstr "Yeni KMyMoney belgesi"
+
+#: dialogs/kstartdlg.cpp:90
+msgid "Open a KMyMoney document"
+msgstr "Bir KMyMoney belgesi aç"
+
+#: dialogs/kstartdlg.cpp:96
+msgid ""
+"%1|KMyMoney files (*.kmy)\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|KMyMoney dosyası (*.kmy)\n"
+"%2|Tüm dosyalar (*.*)"
+
+#: dialogs/kstartdlg.cpp:102
+msgid "Recent Files"
+msgstr "Son Dosyalar"
+
+#: dialogs/kstartdlg.cpp:217
+msgid "Blank Document"
+msgstr "Boş Belge"
+
+#: dialogs/knewbudgetdlg.cpp:71
+msgid "Please specify a budget name"
+msgstr ""
+
+#: dialogs/kgncpricesourcedlg.cpp:48
+#, c-format
+msgid "Investment: %1"
+msgstr "Yatırım: %1"
+
+#: dialogs/kgncpricesourcedlg.cpp:49
+#, c-format
+msgid "Quote source: %1"
+msgstr "Aktarım kaynağı: %1"
+
+#: dialogs/kmymoneypricedlg.cpp:62 dialogs/ksecuritylisteditor.cpp:69
+msgid "Delete this entry"
+msgstr "Bu girdiyi sil"
+
+#: dialogs/ksecuritylisteditor.cpp:70
+msgid "Remove this security item from the file"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:73
+msgid "&Add"
+msgstr "&Ekle"
+
+#: dialogs/kmymoneypricedlg.cpp:68 dialogs/ksecuritylisteditor.cpp:75
+msgid "Add a new entry"
+msgstr "Yeni gir girdi ekle"
+
+#: dialogs/ksecuritylisteditor.cpp:76
+msgid "Create a new security entry."
+msgstr "Yeni bir senet girdisi oluştur."
+
+#: dialogs/keditequityentrydlg.cpp:77 dialogs/kmymoneypricedlg.cpp:74
+#: dialogs/ksecuritylisteditor.cpp:81
+msgid "Modify the selected entry"
+msgstr "Seçilen girdiyi düzenle"
+
+#: dialogs/ksecuritylisteditor.cpp:82
+msgid "Change the security information of the selected entry."
+msgstr ""
+
+#: dialogs/kmymoneypricedlg.cpp:80 dialogs/ksecuritylisteditor.cpp:87
+msgid "Close the dialog"
+msgstr "Pencereyi kapat"
+
+#: dialogs/kmymoneypricedlg.cpp:81 dialogs/ksecuritylisteditor.cpp:88
+msgid "Use this to close the dialog and return to the application."
+msgstr "Bu pencereyi kapatarak uygulamaya geri dönmek için bunu kullanın."
+
+#: dialogs/ksecuritylisteditor.cpp:184
+msgid ""
+"Do you really want to remove the currency <b>%1</b> from the file?</"
+"p><i>Note: It is currently not supported to add currencies.</i>"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:187
+msgid "Do you really want to remove the %1 <b>%2</b> from the file?"
+msgstr ""
+
+#: dialogs/ksecuritylisteditor.cpp:190
+msgid "Delete security"
+msgstr "Senedi sil"
+
+#: dialogs/kmymoneypricedlg.cpp:63
+msgid "Remove this price item from the file"
+msgstr "Bu fiyat ögesini dosyadan sil"
+
+#: dialogs/kmymoneypricedlg.cpp:66 dialogs/mymoneyqifprofileeditor.cpp:94
+msgid "&New"
+msgstr "&Yeni"
+
+#: dialogs/kmymoneypricedlg.cpp:69
+msgid "Create a new price entry."
+msgstr "Yeni bir fiyat girdisi ekle."
+
+#: dialogs/kmymoneypricedlg.cpp:75
+msgid "Change the details of selected price information."
+msgstr "Seçilen fiyat bilgilerinin ayrıntılarını değiştir."
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Do you really want to delete the selected price entry?"
+msgstr "Seçilen fiyat girdisini gerçekten silmek istiyor musunuz?"
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Delete price information"
+msgstr "Fiyat bilgisini sil"
+
+#: dialogs/kchooseimportexportdlg.cpp:46
+msgid ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:50 dialogs/rc.cpp:22
+msgid "Choose import type:"
+msgstr "İçeri aktarım tipi:"
+
+#: dialogs/kchooseimportexportdlg.cpp:51 dialogs/rc.cpp:20
+msgid "Choose Import Type Dialog"
+msgstr "İçeri Aktarım Tipi Seçme Penceresi"
+
+#: dialogs/kchooseimportexportdlg.cpp:53
+msgid ""
+"Please choose the type of export you wish to perform. A simple explanation\n"
+"of the export type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an export type please press the OK button."
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:57
+msgid "Choose export type:"
+msgstr "Dışarı aktarım tipi:"
+
+#: dialogs/kchooseimportexportdlg.cpp:58
+msgid "Choose Export Type Dialog"
+msgstr "Dışarı Aktarım Tipini Seçme Penceresi"
+
+#: dialogs/kchooseimportexportdlg.cpp:78
+msgid ""
+"QIF files are created by the popular accounting program Quicken.\n"
+"Another dialog will appear, if you choose this type, asking for further\n"
+"information relevant to the Quicken format."
+msgstr ""
+
+#: dialogs/kchooseimportexportdlg.cpp:82
+msgid ""
+"The CSV type uses a comma delimeted text file that can be used by\n"
+"most popular spreadsheet programs available for Linux and other operating\n"
+"systems."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:222
+msgid "%1 units in %2"
+msgstr "%2 içerisinde %1 birim"
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid ""
+"Failed to retrieve an exchange rate for %1 from %2. It will be skipped this "
+"time."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid "Price Update Failed"
+msgstr "Fiyat Güncelleme İşlemi Başarısız Oldu"
+
+#: dialogs/kequitypriceupdatedlg.cpp:427
+msgid ""
+"Failed to retrieve a quote for %1 from %2. Press <b>No</b> to remove the "
+"online price source from this security permanently, <b>Yes</b> to continue "
+"updating this security during future price updates or <b>Cancel</b> to stop "
+"the current update operation."
+msgstr ""
+
+#: dialogs/kequitypriceupdatedlg.cpp:427 dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Price Update Failed"
+msgstr "Fiyat Güncelleme Başarısız Oldu"
+
+#: dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Cannot update security <b>%1</b>: %2"
+msgstr "Senet güncellenemedi <b>%1</b>: %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:528
+msgid "Price for %1 updated (id %2)"
+msgstr "%1 ögesinin fiyatı güncellendi (no %2)"
+
+#: dialogs/kequitypriceupdatedlg.cpp:534
+msgid "Received an invalid price for %1, unable to update."
+msgstr "%1 için geçersiz bir fiyat alındı, güncellenemedi."
+
+#: dialogs/kequitypriceupdatedlg.cpp:554
+msgid ""
+"Received a price for %1 (id %2), but this symbol is not on the list! "
+"Aborting entire update."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:222
+msgid ""
+"The number <b>%1</b> has already been used in account <b>%2</b>. Do you want "
+"to replace it with the next available number?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:222
+msgid "Duplicate number"
+msgstr "Numarayı ikile"
+
+#: dialogs/transactioneditor.cpp:303
+msgid ""
+"This transaction has more than two splits and is based on a different "
+"currency (%1). Using this account to modify the transaction is currently not "
+"very well supported by KMyMoney and may result in false results."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:305
+msgid ""
+"KMyMoney was not able to find a more appropriate account to edit this "
+"transaction. Nevertheless, you are allowed to modify the transaction. If you "
+"don't want to edit this transaction, please cancel from editing next."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:307
+msgid ""
+"Using e.g. <b>%1</b> to edit this transaction is a better choice. "
+"Nevertheless, you are allowed to modify the transaction. If you want to use "
+"the suggested account instead, please cancel from editing next and change "
+"the view to the suggested account."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:410
+msgid ""
+"This transaction has more than two splits and is originally based on a "
+"different currency (%1). Using this account to modify the transaction may "
+"result in rounding errors. Do you want to continue?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:412
+msgid ""
+"At least one of the selected transactions has more than two splits and is "
+"originally based on a different currency (%1). Using this account to modify "
+"the transactions may result in rounding errors. Do you want to continue?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:557
+msgid "Storing transactions"
+msgstr "Aktarımlar kaydediliyor"
+
+#: dialogs/transactioneditor.cpp:603 widgets/kmymoneybriefschedule.cpp:65
+msgid "&Enter"
+msgstr "&Gir"
+
+#: dialogs/transactioneditor.cpp:606
+msgid "Use this to enter the transaction into the ledger."
+msgstr "Aktarımları ana hesap defterine eklemek için bunu kullan."
+
+#: dialogs/transactioneditor.cpp:607
+msgid "&Schedule"
+msgstr "&Zamanla"
+
+#: dialogs/transactioneditor.cpp:609
+msgid "Accepts the entered data and stores it as schedule"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:610
+msgid "Use this to schedule the transaction for later entry into the ledger."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"The transaction you are about to enter has a post date in the future.<br/"
+"><br/>Do you want to enter it in the ledger or add it to the schedules?"
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"_: Dialog caption for 'Enter or schedule' dialog\n"
+"Enter or schedule?"
+msgstr "Gir ya da zamanla?"
+
+#: dialogs/transactioneditor.cpp:671
+msgid ""
+"The balance of account <b>%1</b> dropped below the warning balance of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:677
+msgid ""
+"The balance of account <b>%1</b> dropped below the minimum balance of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:683
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit warning "
+"limit of %2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:689
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit limit of %"
+"2."
+msgstr ""
+
+#: dialogs/transactioneditor.cpp:740
+msgid "Payer/Receiver"
+msgstr "Ödeyen/Alıcı"
+
+#: dialogs/transactioneditor.cpp:748
+msgid "Category/Account"
+msgstr "Kategori/Hesap"
+
+#: dialogs/transactioneditor.cpp:980 dialogs/transactioneditor.cpp:1016
+#: dialogs/transactioneditor.cpp:1378 dialogs/transactioneditor.cpp:1399
+#: dialogs/transactioneditor.cpp:1422 dialogs/transactioneditor.cpp:1443
+#: dialogs/transactioneditor.cpp:1505 dialogs/transactioneditor.cpp:1509
+#: widgets/transaction.cpp:902
+msgid "Transfer from"
+msgstr "Gelen aktarım"
+
+#: dialogs/transactioneditor.cpp:982 dialogs/transactioneditor.cpp:1018
+#: dialogs/transactioneditor.cpp:1401 dialogs/transactioneditor.cpp:1445
+#: dialogs/transactioneditor.cpp:1506 widgets/transaction.cpp:902
+msgid "Transfer to"
+msgstr "Giden aktarım"
+
+#: dialogs/transactioneditor.cpp:1259
+msgid "Select autofill transaction"
+msgstr "Otomatik doldurulan aktarımı seç"
+
+#: dialogs/transactionmatcher.cpp:77
+msgid "First transaction does not match requirement for matching"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:79
+msgid "Second transaction does not match requirement for matching"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:83 dialogs/transactionmatcher.cpp:133
+msgid "Splits for %1 have conflicting values (%2,%3)"
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:96 dialogs/transactionmatcher.cpp:149
+msgid ""
+"Both of these transactions have been imported into %1. Therefore they "
+"cannot be matched. Matching works with one imported transaction and one non-"
+"imported transaction."
+msgstr ""
+
+#: dialogs/transactionmatcher.cpp:101 dialogs/transactionmatcher.cpp:156
+msgid "Unable to match all splits (%1)"
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:65
+msgid "Account and transfer account are the same. Please change one."
+msgstr ""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:84
+msgid "Payee changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Ödeme değiştirildi.<br>&nbsp;&nbsp;&nbsp;Eski: <b>%1</b>, Yeni: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:92
+#: dialogs/kconfirmmanualenterdlg.cpp:100
+msgid "Account changed. Old: \"%1\", New: \"%2\""
+msgstr "Hesap değiştirildi. Eski: \"%1\", Yeni: \"%2\""
+
+#: dialogs/kconfirmmanualenterdlg.cpp:107
+msgid "Account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Hesap değiştirildi.<br>&nbsp;&nbsp;&nbsp;Eski: <b>%1</b>, Yeni: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:115
+msgid ""
+"Transfer account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</"
+"b><p>"
+msgstr ""
+"Aktarım hesabı değiştirildi. <br>&nbsp;&nbsp;&nbsp;Eski: <b>%1</b>, Yeni: <b>"
+"%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:143
+msgid ""
+"Category changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Kategori değiştirildi.<br>&nbsp;&nbsp;&nbsp;Eski: <b>%1</b>, Yeni: <b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:151
+#: dialogs/kconfirmmanualenterdlg.cpp:153
+msgid "empty"
+msgstr "boş"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:157
+msgid "Memo changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Hatırlatma değiştirildi.<br>&nbsp;&nbsp;&nbsp;Eski: <b>%1</b>, Yeni: <b>%2</"
+"b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:166
+msgid "Amount changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"Toplam değiştirildi.<br>&nbsp;&nbsp;&nbsp;Eski: <b>%1</b>, Yeni: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:175
+msgid ""
+"Reconciliation flag changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%"
+"2</b><p>"
+msgstr ""
+"Uzlaştırma bayrağı değiştirildi.<br>&nbsp;&nbsp;&nbsp;Eski: <b>%1</b>, Yeni: "
+"<b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:182
+msgid "Fatal error in determining data: "
+msgstr "Veriler belirlenirken bir sonlandırıcı hata oluştu:"
+
+#: dialogs/kselectdatabasedlg.cpp:56
+msgid ""
+"There are no Qt SQL drivers installed in your system.\n"
+"Please consult documentation for your distro, or visit the Qt web site (www."
+"trolltech.com) and search for SQL drivers."
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:100
+msgid "Qt SQL driver %1 is no longer installed on your system"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:107
+msgid "Qt SQL driver %1 is not suported"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:164
+#, fuzzy
+msgid "SQLite files (*.sql);; All files (*.*)"
+msgstr ""
+"%1|%2 dosyaları (%3)\n"
+"*.*|Tüm dosyalar (*.*)"
+
+#: dialogs/kselectdatabasedlg.cpp:167
+#, fuzzy
+msgid "Select SQLite file"
+msgstr "Biçem Seç"
+
+#: dialogs/kselectdatabasedlg.cpp:188
+#, fuzzy
+msgid "All files (*.*)"
+msgstr "Tüm dosyalar"
+
+#: dialogs/kselectdatabasedlg.cpp:191
+#, fuzzy
+msgid "Select output file"
+msgstr "Dosya adı seç"
+
+#: dialogs/investactivities.cpp:168
+msgid "%1 (Brokerage)"
+msgstr "%1 (Komisyon)"
+
+#: dialogs/investactivities.cpp:200 dialogs/investactivities.cpp:288
+#: dialogs/investactivities.cpp:425 widgets/transaction.cpp:1548
+msgid "Price/share"
+msgstr "Fiyat/paylaşım"
+
+#: dialogs/investactivities.cpp:586
+msgid "Ratio 1/"
+msgstr "Oran 1/"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid ""
+"<p>Please check that all the details in the following dialog are correct and "
+"press OK.</p><p>Editable data can be changed and can either be applied to "
+"just this occurence or for all subsequent occurences for this schedule. "
+"(You will be asked what you intend after pressing OK in the following dialog)"
+"</p>"
+msgstr ""
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid "Enter scheduled transaction"
+msgstr "Zamanlanmış aktarım gir"
+
+#: dialogs/kcsvprogressdlg.cpp:65 dialogs/kexportdlg.cpp:65
+msgid "&Export"
+msgstr "&Dışarı Aktar"
+
+#: dialogs/kexportdlg.cpp:67 dialogs/kimportdlg.cpp:68
+msgid "Start operation"
+msgstr "İşleme başla"
+
+#: dialogs/kexportdlg.cpp:68
+msgid "Use this to start the export operation"
+msgstr "Dışa aktarımı başlatmak için bunu kullanın"
+
+#: dialogs/kexportdlg.cpp:71 dialogs/kimportdlg.cpp:72
+msgid "&Browse..."
+msgstr "&Gözat..."
+
+#: dialogs/kexportdlg.cpp:73 dialogs/kimportdlg.cpp:74
+msgid "Select filename"
+msgstr "Dosya adı seç"
+
+#: dialogs/kexportdlg.cpp:74 dialogs/kimportdlg.cpp:75
+msgid "Use this to select a filename to export to"
+msgstr "Dışarı aktarılacak dosya adını seçmek için bunu kullann"
+
+#: dialogs/kexportdlg.cpp:77 dialogs/kimportdlg.cpp:78
+#: dialogs/settings/ksettingsonlinequotes.cpp:64
+#: widgets/kmymoneyonlinequoteconfig.cpp:64
+msgid "&New..."
+msgstr "&Yeni..."
+
+#: dialogs/kexportdlg.cpp:79 dialogs/kimportdlg.cpp:80
+#: dialogs/mymoneyqifprofileeditor.cpp:96
+msgid "Create a new profile"
+msgstr "Yeni bir profil oluştur"
+
+#: dialogs/kexportdlg.cpp:80 dialogs/kimportdlg.cpp:81
+msgid "Use this to open the profile editor"
+msgstr "Profil düzenleyiciyi açmak için bunu kullanın"
+
+#: dialogs/keditloanwizard.cpp:56
+msgid "Edit loan wizard"
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:58
+msgid ""
+"Please enter the date from which on the following changes will be effective. "
+"The date entered must be later than the opening date of this account (%1), "
+"but must not be in the future. The default will be today."
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:76
+msgid ""
+"Note: you will not be able to modify this account today, because the opening "
+"date \"%1\" is in the future. Please revisit this dialog when the time has "
+"come."
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:244
+msgid ""
+"Your previous selection was \"%1\". If you select another option, KMyMoney "
+"will dismiss the changes you have just entered. Do you wish to proceed?"
+msgstr ""
+
+#: dialogs/kcategoryreassigndlg.cpp:81
+msgid ""
+"At least one transaction/schedule still references the category <b>%1</b>. "
+"However, at least one category with the same currency must exist so that the "
+"transactions/schedules can be reassigned."
+msgstr ""
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid ""
+"This dialog does not allow to create new categories. Please pick a category "
+"from the list."
+msgstr ""
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid "Category creation"
+msgstr "Kategori oluşturma"
+
+#: dialogs/kbackupdlg.cpp:61
+msgid "C&hoose..."
+msgstr "Se&ç..."
+
+#: dialogs/kbackupdlg.cpp:63
+msgid "Select mount point"
+msgstr "Bağlanma noktasını seç"
+
+#: dialogs/kbackupdlg.cpp:64
+msgid "Use this to browse to the mount point."
+msgstr "Bağlanma noktasına gözatmak için bunu kullanın."
+
+#: dialogs/keditscheduledlg.cpp:293
+msgid "Next due date"
+msgstr "Sonraki ödeme günü"
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid ""
+"You have turned on the GPG encryption support. This means, that new files "
+"will be stored encrypted. Existing files will not be encrypted "
+"automatically. To achieve encryption of existing files, please use the "
+"<b>File/Save as...</b> feature and store the file under a different name. "
+"Once confident with the result, feel free to delete the old file and rename "
+"the encrypted one to the old name."
+msgstr ""
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+#, fuzzy
+msgid "GPG encryption activated"
+msgstr "GPG şifrelemesi kullan"
+
+#: dialogs/settings/ksettingshome.cpp:51
+msgid "&Up"
+msgstr "&Yukarı"
+
+#: dialogs/settings/ksettingshome.cpp:53
+msgid "Move selected item up"
+msgstr "Seçilen ögeyi yukarı taşı"
+
+#: dialogs/settings/ksettingshome.cpp:54
+msgid "Use this to move the selected item up by one position in the list."
+msgstr ""
+
+#: dialogs/settings/ksettingshome.cpp:55
+msgid "&Down"
+msgstr "&Aşağı"
+
+#: dialogs/settings/ksettingshome.cpp:57
+msgid "Move selected item down"
+msgstr "Seçilen ögeyi aşağı taşı"
+
+#: dialogs/settings/ksettingshome.cpp:58
+msgid "Use this to move the selected item down by one position in the list."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:1
+msgid "Color settings"
+msgstr "Renk ayarları"
+
+#: dialogs/settings/rc.cpp:2
+msgid "Foreground"
+msgstr "Önplan"
+
+#: dialogs/settings/rc.cpp:3
+msgid "Text colors"
+msgstr "Metin renkleri"
+
+#: dialogs/settings/rc.cpp:4
+msgid "Grid color"
+msgstr "Izgara rengi"
+
+#: dialogs/settings/rc.cpp:5
+msgid "Erronous transaction"
+msgstr "Hatalı aktarımlar"
+
+#: dialogs/settings/rc.cpp:6
+msgid "Value with missing conversion rate"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:7
+msgid "Negative value"
+msgstr "Negatif değer"
+
+#: dialogs/settings/rc.cpp:8
+msgid "Background"
+msgstr "Arkaplan"
+
+#: dialogs/settings/rc.cpp:10
+msgid "List background colors"
+msgstr "Liste arkaplanı rengi"
+
+#: dialogs/settings/rc.cpp:11
+msgid "Normal"
+msgstr "Normal"
+
+#: dialogs/settings/rc.cpp:12
+msgid "Alternate"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:13
+msgid "Special background colors"
+msgstr "Özel arkaplan renkleri"
+
+#: dialogs/settings/rc.cpp:14
+msgid "Ledger group separator"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:15
+msgid "Required field"
+msgstr "Zorunlu alan"
+
+#: dialogs/settings/rc.cpp:16
+msgid "Imported transaction"
+msgstr "İçeriye aktarılmış aktarım"
+
+#: dialogs/settings/rc.cpp:17
+msgid "Matched transaction"
+msgstr "Eşleşen aktarım"
+
+#: dialogs/settings/rc.cpp:18
+msgid "Font settings"
+msgstr "Yazıtipi ayarları"
+
+#: dialogs/settings/rc.cpp:19
+msgid "Use system fonts"
+msgstr "Sistem yazıtiplerini kullan"
+
+#: dialogs/settings/rc.cpp:20
+msgid "Individual font settings"
+msgstr "Kişisel yatı tipi ayarları"
+
+#: dialogs/settings/rc.cpp:24
+msgid "Number of Days of Account Cycle:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:26
+msgid "Number of Days to Forecast:"
+msgstr "Tahmine kalan Günlerin Sayısı:"
+
+#: dialogs/settings/rc.cpp:27
+msgid "Forecast Method"
+msgstr "Tahmin Yöntemi"
+
+#: dialogs/settings/rc.cpp:28
+#, fuzzy
+msgid "Scheduled and Future Transactions"
+msgstr "Zamanlanmış &ve Geleckte Yapılacak Aktarımlar"
+
+#: dialogs/settings/rc.cpp:29
+#, fuzzy
+msgid "History-based"
+msgstr "Geçmiş-&temelli"
+
+#: dialogs/settings/rc.cpp:30
+msgid "History-based settings"
+msgstr "Geçmiş-temelli ayarlar"
+
+#: dialogs/settings/rc.cpp:31
+msgid "Number of Cycles to use in Forecast:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:36
+msgid "General Settings"
+msgstr "Genel Ayarlar"
+
+#: dialogs/settings/rc.cpp:37
+msgid "Global"
+msgstr "Genel"
+
+#: dialogs/settings/rc.cpp:38
+msgid "Startup page options"
+msgstr "Başlangıç sayfası seçenekleri"
+
+#: dialogs/settings/rc.cpp:39
+msgid "Start with homepage"
+msgstr "Başlangıç sayfası ile başla"
+
+#: dialogs/settings/rc.cpp:40
+msgid "Start with last selected view"
+msgstr "Seçilen son sayfa ile başla"
+
+#: dialogs/settings/rc.cpp:41
+msgid "Precision settings"
+msgstr "Hassasiyet ayarları"
+
+#: dialogs/settings/rc.cpp:42
+msgid "Price precision"
+msgstr "Fiyat hassasiyeti"
+
+#: dialogs/settings/rc.cpp:43
+msgid "digits"
+msgstr "rakam"
+
+#: dialogs/settings/rc.cpp:44
+msgid "Autosave options"
+msgstr "Otomatik kaydetme seçenekleri"
+
+#: dialogs/settings/rc.cpp:45
+msgid "Autosave periodically"
+msgstr "Belirli aralıklarla otomatik olarak kaydet"
+
+#: dialogs/settings/rc.cpp:46
+msgid "minutes"
+msgstr "dakika"
+
+#: dialogs/settings/rc.cpp:47
+msgid "Fiscal Year"
+msgstr "Mali Yıl"
+
+#: dialogs/settings/rc.cpp:48
+msgid "Your fiscal year starts on"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:49
+msgid "January"
+msgstr "Ocak"
+
+#: dialogs/settings/rc.cpp:50
+msgid "February"
+msgstr "Şubat"
+
+#: dialogs/settings/rc.cpp:51
+msgid "March"
+msgstr "Mart"
+
+#: dialogs/settings/rc.cpp:52
+msgid "April"
+msgstr "Nisan"
+
+#: dialogs/settings/rc.cpp:53
+msgid "May"
+msgstr "Mayıs"
+
+#: dialogs/settings/rc.cpp:54
+msgid "June"
+msgstr "Haziran"
+
+#: dialogs/settings/rc.cpp:55
+msgid "July"
+msgstr "Temmuz"
+
+#: dialogs/settings/rc.cpp:56
+msgid "August"
+msgstr "Ağustos"
+
+#: dialogs/settings/rc.cpp:57
+msgid "September"
+msgstr "Eylül"
+
+#: dialogs/settings/rc.cpp:58
+msgid "October"
+msgstr "Ekim"
+
+#: dialogs/settings/rc.cpp:59
+msgid "November"
+msgstr "Kasım"
+
+#: dialogs/settings/rc.cpp:60
+msgid "December"
+msgstr "Aralık"
+
+#: dialogs/settings/rc.cpp:61
+msgid "Views"
+msgstr "Görünümler"
+
+#: dialogs/settings/rc.cpp:62
+msgid "Synchronize account selection of ledger and investment view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:63
+msgid ""
+"Check the views you want to enable, uncheck those you want to hide, because "
+"you don't need the functionality."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:64
+msgid "Icon size of navigation bar"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:65
+msgid "Micro (16px)"
+msgstr "Çok küçük (16px)"
+
+#: dialogs/settings/rc.cpp:66
+msgid "Small (32px)"
+msgstr "Küçük (32px)"
+
+#: dialogs/settings/rc.cpp:67
+msgid "Normal (48px)"
+msgstr "Normal (48px)"
+
+#: dialogs/settings/rc.cpp:68
+msgid "Large (64px)"
+msgstr "Büyük (64px)"
+
+#: dialogs/settings/rc.cpp:69
+msgid "Show title bar on each page"
+msgstr ""
+
+#: dialogs/rc.cpp:835 dialogs/settings/rc.cpp:70
+msgid "Filter"
+msgstr "Filtre"
+
+#: dialogs/settings/rc.cpp:71
+msgid "Accounts / Categories"
+msgstr "Hesaplar / Kategoriler"
+
+#: dialogs/settings/rc.cpp:72
+msgid "Don't show unused categories"
+msgstr "Kullanılmayan kategorileri gösterme"
+
+#: dialogs/settings/rc.cpp:73
+msgid ""
+"This option hides all categories in the categories view that are not used in "
+"at least a single transaction. They are still shown in the category "
+"selection lists."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:74
+msgid "Don't show closed accounts"
+msgstr "Kapatılmış hesapları gösterme"
+
+#: dialogs/settings/rc.cpp:75
+msgid ""
+"This option hides all accounts that have been closed by the user in views "
+"and selection lists.\n"
+"\n"
+"You can use <b>View/Show all accounts</b> to temporarily show hidden "
+"accounts in the views."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:76
+#, fuzzy
+msgid "Show equity accounts"
+msgstr "Özkaynak hesapları"
+
+#: dialogs/rc.cpp:332 dialogs/settings/rc.cpp:77 widgets/rc.cpp:160
+msgid "Schedules"
+msgstr "Zamanlamalar"
+
+#: dialogs/settings/rc.cpp:78
+msgid "Don't show finished schedules"
+msgstr "Tamamlanmış zamanlamaları gösterme"
+
+#: dialogs/settings/rc.cpp:79
+msgid "This option hides all finished schedules in the schedules view."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:81
+msgid "Don't show transactions prior to"
+msgstr "Bundan daha önceki aktarımları gösterme"
+
+#: dialogs/settings/rc.cpp:82
+msgid "Don't show reconciled transactions"
+msgstr "Uzlaştırılmış aktarımları gösterme"
+
+#: dialogs/settings/rc.cpp:83
+msgid "This option hides all reconciled transactions in the ledger view."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:84 widgets/rc.cpp:22
+msgid "GPG encryption settings"
+msgstr "GPG şifreleme ayarları"
+
+#: dialogs/settings/rc.cpp:85
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Access to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>additional recovery encryption</i> is only accessible, if the "
+"necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id "
+"0x8AFDDC8E is found in your keyring."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:86 widgets/rc.cpp:24
+msgid "Use GPG encryption"
+msgstr "GPG şifrelemesi kullan"
+
+#: dialogs/settings/rc.cpp:87
+#, fuzzy
+msgid "GPG encryption"
+msgstr "GPG şifrelemesi kullan"
+
+#: dialogs/settings/rc.cpp:88
+#, fuzzy
+msgid "Your key"
+msgstr "Adınız Soyadınız:"
+
+#: dialogs/settings/rc.cpp:89
+msgid ""
+"This combo box lists all the secret keys you have in your keyring. Select "
+"the one you want to use for encryption when saving to a file."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:90
+#, fuzzy
+msgid "Additonal keys"
+msgstr "Ek Ödemeler"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:50 dialogs/settings/rc.cpp:91
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading 0x."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:92 widgets/rc.cpp:28
+msgid ""
+"This symbol denotes, if the key for the given user id has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+
+#: dialogs/kgpgkeyselectiondlg.cpp:61 dialogs/settings/rc.cpp:93
+msgid "Keys for all of the above user ids found"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:94 widgets/rc.cpp:31
+msgid ""
+"This symbol denotes, if the KMyMoney recovery key has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:95
+msgid "Recover Key available in keyring"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:96
+msgid "Also encrypt with KMyMoney's recover key"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:97
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out.."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:98
+msgid "Homepage Settings"
+msgstr "Başlangıç Sayfası Ayarları"
+
+#: dialogs/settings/rc.cpp:99
+msgid "Up"
+msgstr "Yukarı"
+
+#: dialogs/settings/rc.cpp:100
+msgid "Down"
+msgstr "Aşağı"
+
+#: dialogs/settings/rc.cpp:101
+msgid ""
+"Selected entries are shown on the home page of the application.<p>\n"
+"Use the buttons and checkboxes to customize the layout of the home page."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:102
+msgid "Homepage/Summary page font scaling"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:103
+msgid "Percentage of default font size:"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:104
+msgid ""
+"Remember font size when leaving the program if manually changed with mouse-"
+"wheel"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:105
+#, fuzzy
+msgid "Information display"
+msgstr "Alıcı Bilgisi"
+
+#: dialogs/settings/rc.cpp:106
+#, fuzzy
+msgid "Show Account Limit Information"
+msgstr "Hesap bilgileri"
+
+#: dialogs/settings/rc.cpp:110 widgets/rc.cpp:47
+msgid ""
+"<i>Enter regular expressions which can be used to parse the data returned "
+"from the URL entered above. The symbol, price, and date must be found in "
+"the quote data to be usable. You may also try the KMyMoney user's "
+"mailinglist at <a href=\"mailto:kmymoney2-user@lists.sourceforge.net"
+"\">kmymoney2-user@lists.sourceforge.net</a> to find what settings work for "
+"other users in your country.</i>"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:113 widgets/rc.cpp:38
+msgid "Regular Expression to extract the symbol from the downloaded data"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:114 widgets/rc.cpp:39
+msgid "Regular Expression to extract the price from the downloaded data"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:115 widgets/rc.cpp:41
+msgid "URL to be used to download the quote"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:116 widgets/rc.cpp:42
+msgid ""
+"Enter the URL from which stock quotes will be fetched. <b>%1</b> will be "
+"replaced with the symbol for the security being quoted. For currency "
+"conversions, <b>%2</b> will be replaced with the currency to be quoted and "
+"<b>%1</b> with the currency the quote is based on."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:118 dialogs/settings/rc.cpp:121 widgets/rc.cpp:40
+#: widgets/rc.cpp:44
+msgid "Regular Expression to extract the date from the downloaded data"
+msgstr ""
+
+#: dialogs/rc.cpp:807 dialogs/settings/rc.cpp:119 widgets/rc.cpp:45
+msgid "Date Format"
+msgstr "Tarih Biçemi"
+
+#: dialogs/settings/rc.cpp:122
+msgid "Skip HTML stripping"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:123
+msgid ""
+"<p>For easier processing of the data returned by the online source, KMyMoney "
+"usually strips unused parts before it is parsed with the regular "
+"expressions. If matching of the fields relies on those items, then use this "
+"option to turn stripping off.</p>\n"
+"\n"
+"<p>The following items are usually removed by stripping:\n"
+"\n"
+"<ul>\n"
+"<li>HTML tags such as <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded characters such as <b>&amp;nbsp;</b></li>\n"
+"<li>duplicate whitespace</li>\n"
+"</ul>\n"
+"</p>"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:127
+msgid "Register settings"
+msgstr "Kaydetme ayarları"
+
+#: dialogs/settings/rc.cpp:128
+#, fuzzy
+msgid "Display"
+msgstr "&Göster"
+
+#: dialogs/settings/rc.cpp:131
+msgid ""
+"Using the ledger lens shows the details for the transaction that has focus "
+"in the ledger. Usually, when using the transaction form, only a one line "
+"summary is displayed for each transaction as the details are shown in the "
+"form."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:133
+msgid "Always show a No. field"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:134
+#, fuzzy
+msgid "Show group header between transactions"
+msgstr "Yeni bir aktarım oluştur"
+
+#: dialogs/settings/rc.cpp:135
+msgid ""
+"Draws a larger header above each group of transaction. The grouping depends "
+"on the current sort order."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:136
+msgid "Show header for the previous and current fiscal year"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:137
+msgid "Sorting"
+msgstr "Sıralama"
+
+#: dialogs/settings/rc.cpp:138
+msgid "Normal view"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:139
+msgid "Reconciliation view"
+msgstr "Uzlaştırma görünümü"
+
+#: dialogs/settings/rc.cpp:140
+msgid "Search view"
+msgstr "Arama görünümü"
+
+#: dialogs/settings/rc.cpp:141
+msgid ""
+"Use the <i>left</i> and <i>right</i> buttons to add and remove sort options. "
+"Use the <i>up</i> and <i>down</i> buttons to modify the sort order. Double-"
+"Click a selected entry to toggle the sort order between <i>ascending</i> and "
+"<i>descending</i>."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:142
+#, fuzzy
+msgid "Data entry"
+msgstr "Boş Belge"
+
+#: dialogs/settings/rc.cpp:146
+msgid "Use Enter to move between fields"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:147
+msgid "Match names from start"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:148
+msgid ""
+"Mark this option, if you always want to match names e.g. for payees from the "
+"start. If unset, any substring is matched."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:149
+#, fuzzy
+msgid "Default reconciliation state"
+msgstr "Son uzlaştırma"
+
+#: dialogs/rc.cpp:227 dialogs/settings/rc.cpp:150
+#: widgets/kmymoneycombo.cpp:348 widgets/registersearchline.cpp:84
+msgid "Not reconciled"
+msgstr "Uzlaştırılmamış"
+
+#: dialogs/rc.cpp:228 dialogs/settings/rc.cpp:151
+#: widgets/kmymoneycombo.cpp:347 widgets/registersearchline.cpp:85
+msgid "Cleared"
+msgstr "Temizlenmiş"
+
+#: dialogs/settings/rc.cpp:153
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation "
+"of an account"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:154
+msgid "Autofill"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:155
+msgid "No Autofill"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:156
+#, fuzzy
+msgid "Don't do autofill of transaction data at all."
+msgstr "Otomatik doldurulan aktarımı seç"
+
+#: dialogs/settings/rc.cpp:157
+#, fuzzy
+msgid "Same transaction if amount differs less than"
+msgstr "yüzde."
+
+#: dialogs/settings/rc.cpp:158
+msgid ""
+"Collect all transactions for the given payee. Treat all transactions that "
+"refer to the same category and have an amount with +/- X % as identical. If "
+"more than one transaction is found, a list of them is presented to the "
+"user.\n"
+"\n"
+"Selecting 0% will list all transactions."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:159
+msgid ""
+"Two transactions are usually treated identical for autofill, if they refer "
+"the same accounts. They are treated as different transactions though, when "
+"their amount varies by more than the percentage given here."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:160
+msgid ""
+"_: Same transaction if amount differs less than percent.\n"
+"percent."
+msgstr "yüzde."
+
+#: dialogs/settings/rc.cpp:161
+msgid "with previously most often used transaction for the payee"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:162
+msgid ""
+"The data of the last transaction assigned to the category used most often "
+"for this payee is autofilled into the transaction editor."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:164
+#, fuzzy
+msgid "Match transactions within days"
+msgstr "Alacaklısı olmayan aktarımları ara"
+
+#: dialogs/settings/rc.cpp:165
+msgid ""
+"Search for matching transactions within the range of the posting date of the "
+"imported transaction +/- the number of given days."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:166
+msgid "Ask for a new payee's default category"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:167
+msgid ""
+"Whenever a new payee is detected during import of a statement, the user will "
+"be asked to assign a default category for this user when this option is "
+"selected."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:168
+msgid "Schedule Settings"
+msgstr "Zamanlama Ayarları"
+
+#: dialogs/settings/rc.cpp:169
+msgid "Startup options"
+msgstr "Başlangıç seçenekleri"
+
+#: dialogs/settings/rc.cpp:170
+msgid "Check schedules on startup"
+msgstr "Zamanlamaları başlangıçta kontrol et"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:60
+#: widgets/kmymoneyonlinequoteconfig.cpp:60
+msgid "Delete the selected source entry"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:61
+#: widgets/kmymoneyonlinequoteconfig.cpp:61
+msgid "Use this to delete the selected online source entry"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:66
+#: widgets/kmymoneyonlinequoteconfig.cpp:66
+msgid "Create a new source entry for online quotes"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:67
+#: widgets/kmymoneyonlinequoteconfig.cpp:67
+msgid "Use this to create a new entry for online quotes"
+msgstr ""
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:107
+#: dialogs/settings/ksettingsonlinequotes.cpp:190
+#: dialogs/settings/ksettingsonlinequotes.cpp:193
+#: dialogs/settings/ksettingsonlinequotes.cpp:216
+#: widgets/kmymoneyonlinequoteconfig.cpp:107
+#: widgets/kmymoneyonlinequoteconfig.cpp:185
+#: widgets/kmymoneyonlinequoteconfig.cpp:188
+#: widgets/kmymoneyonlinequoteconfig.cpp:211
+msgid "New Quote Source"
+msgstr "Yeni Aktarım Kaynağı"
+
+#: dialogs/ksplittransactiondlg.cpp:77 dialogs/rc.cpp:788
+msgid "Clear &All"
+msgstr "Tümünü &Temizle"
+
+#: dialogs/ksplittransactiondlg.cpp:79
+msgid "Clear all splits"
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:80
+msgid "Use this to clear all splits of this transaction"
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:84
+#, fuzzy
+msgid "&Merge"
+msgstr "Daha fazla"
+
+#: dialogs/ksplittransactiondlg.cpp:183
+msgid ""
+"The total amount of this transaction is %1 while the sum of the splits is %"
+"2. The remaining %3 are unassigned."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:191
+#, c-format
+msgid "Change &total amount of transaction to %1."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:194
+msgid "&Distribute difference of %1 among all splits."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:203
+#, c-format
+msgid "&Leave total amount of transaction at %1."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:205
+msgid "&Leave %1 unassigned."
+msgstr ""
+
+#: dialogs/ksplittransactiondlg.cpp:275
+msgid ""
+"You are about to delete all splits of this transaction. Do you really want "
+"to continue?"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:97
+msgid "Use this to create a new QIF import/export profile"
+msgstr ""
+
+#: dialogs/mymoneyqifprofileeditor.cpp:148
+#: dialogs/mymoneyqifprofileeditor.cpp:403 dialogs/rc.cpp:797
+msgid "QIF Profile Editor"
+msgstr "QIF Profil Düzenleyici"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:150
+msgid "QIF Profile Selector"
+msgstr "QIF Profil Seçici"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:236
+msgid "The default QIF profile"
+msgstr "Öntanımlı QIF profili"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:404
+#: dialogs/mymoneyqifprofileeditor.cpp:417
+msgid "Enter new profile name"
+msgstr "Yeni profil adı girin"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:436
+msgid "Do you really want to delete profile '%1'?"
+msgstr ""
+
+#: dialogs/kgpgkeyselectiondlg.cpp:38
+#, fuzzy
+msgid "Select additional keys"
+msgstr "Ek ödeme gir"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:48 widgets/rc.cpp:25
+msgid "User identification"
+msgstr "Kullanıcı Kimliği"
+
+#: dialogs/kendingbalancedlg.cpp:71
+msgid ""
+"Please enter the following fields with the information as you find them on "
+"your statement. Make sure to enter all values in <b>%1</b>."
+msgstr ""
+
+#: dialogs/kendingbalancedlg.cpp:124
+#, c-format
+msgid "Last reconciled statement: %1"
+msgstr ""
+
+#: dialogs/kendingbalancedlg.cpp:437 dialogs/kendingbalancedlg.cpp:577
+#: dialogs/rc.cpp:137
+msgid "Adjustment transaction"
+msgstr ""
+
+#: dialogs/kendingbalancedlg.cpp:510
+msgid ""
+"KMyMoney has calculated the following amounts for interest and amortization "
+"according to recorded payments between %1 and %2."
+msgstr ""
+
+#: dialogs/kbalancechartdlg.cpp:59
+#, c-format
+msgid "Balance of %1"
+msgstr "%1 Bilançosu"
+
+#: dialogs/kbalancechartdlg.cpp:70
+msgid "%1 Balance History"
+msgstr "%1 Bilanço Geçmişi"
+
+#: dialogs/kmymoneysplittable.cpp:98
+msgid "Split Options"
+msgstr "Ayırma Seçenekleri"
+
+#: dialogs/kmymoneysplittable.cpp:99 dialogs/rc.cpp:731
+#: widgets/kmymoneypriceview.cpp:149
+msgid "Edit..."
+msgstr "Düzenle..."
+
+#: dialogs/kmymoneysplittable.cpp:100
+msgid "Duplicate"
+msgstr "İkile"
+
+#: dialogs/kmymoneysplittable.cpp:102
+msgid "Delete ..."
+msgstr "Sil..."
+
+#: dialogs/kmymoneysplittable.cpp:275
+msgid ""
+"_: Duplicate split\n"
+"CTRL+c"
+msgstr "CTRL+c"
+
+#: dialogs/kmymoneysplittable.cpp:562
+msgid "will be calculated"
+msgstr "hesaplanacak"
+
+#: dialogs/kmymoneysplittable.cpp:648
+msgid ""
+"You are about to delete the selected split. Do you really want to continue?"
+msgstr ""
+"Seçili bölümü silmek üzeresiniz. Devam etmek istedğinizden emin misiniz?"
+
+#: dialogs/rc.cpp:1
+msgid "Account selection"
+msgstr "Hesap seçimi"
+
+#: dialogs/rc.cpp:3
+msgid "Account to import to"
+msgstr "İçerisine aktarılacak hesap"
+
+#: dialogs/rc.cpp:6 dialogs/rc.cpp:170 widgets/rc.cpp:169
+#, fuzzy
+msgid "Skip"
+msgstr "&Atla"
+
+#: dialogs/rc.cpp:8
+msgid ""
+"Use this dialog to backup your data. \n"
+"\n"
+"Please make sure you have a disk inserted and that the drive is ready. Then "
+"choose the mount point from either the Choose button or by entering the path "
+"in the available box.\n"
+"\n"
+"Click OK to perform the backup. If your system does not use an automounter, "
+"make sure you mark the checkbox below to \"mount this directory before "
+"backing up.\""
+msgstr ""
+
+#: dialogs/rc.cpp:9
+msgid "Device options"
+msgstr "Aygıt seçenekleri"
+
+#: dialogs/rc.cpp:10
+msgid ""
+"_: This is the mount point\n"
+"Mount Point:"
+msgstr "Bağlanma Noktası:"
+
+#: dialogs/rc.cpp:11
+#, fuzzy
+msgid "Choose..."
+msgstr "Se&ç..."
+
+#: dialogs/rc.cpp:12
+msgid "Mount this directory before backing up."
+msgstr "Yedeklemeden önce bu dizini bağlayın."
+
+#: dialogs/rc.cpp:15
+msgid "Reassign categories"
+msgstr "Kategorileri yeniden ata"
+
+#: dialogs/rc.cpp:16
+msgid ""
+"The transactions, schedules and budgets associated with the selected "
+"category need to be re-assigned to a different category before the selected "
+"category can be deleted. Please select a category from the list below."
+msgstr ""
+
+#: dialogs/rc.cpp:17
+msgid "Available categories:"
+msgstr "Kullanılabilir kategoriler:"
+
+#: dialogs/rc.cpp:21
+msgid ""
+"Please choose the type of import you wish to perform. A simple "
+"explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+
+#: dialogs/rc.cpp:23
+msgid "QIF"
+msgstr "QIF"
+
+#: dialogs/rc.cpp:24
+msgid "CSV"
+msgstr "CSV"
+
+#: dialogs/rc.cpp:25
+msgid "Some descripton"
+msgstr "Açıklamalar"
+
+#: dialogs/rc.cpp:28
+msgid "Confirm Manual Enter"
+msgstr "Elle Girişi Onayla"
+
+#: dialogs/rc.cpp:29
+msgid "The following changes have been made to the transaction data:"
+msgstr ""
+
+#: dialogs/rc.cpp:30
+msgid "Please choose what you wish to do with the above changes"
+msgstr ""
+
+#: dialogs/rc.cpp:31
+msgid ""
+"Discard the changes and enter the original transaction into the register."
+msgstr ""
+
+#: dialogs/rc.cpp:32
+msgid "Enter these new values this one time, for this occurence only."
+msgstr ""
+
+#: dialogs/rc.cpp:33
+msgid "Set all further occurences in this schedule to be these values."
+msgstr ""
+
+#: dialogs/rc.cpp:36
+msgid "CSV Dialog"
+msgstr "CSV Penceresi"
+
+#: dialogs/rc.cpp:37
+msgid ""
+"CSV Dialog. Choose a file and then click on Run. You can view your "
+"progress at\n"
+"the bottom of the screen.\n"
+"\n"
+"You can cancel the process at any time by clicking on the Cancel button."
+msgstr ""
+
+#: dialogs/rc.cpp:38
+msgid "Choose the csv file:"
+msgstr "CSV dosyasını seç:"
+
+#: dialogs/rc.cpp:39
+#, fuzzy
+msgid "Browse"
+msgstr "&Gözat"
+
+#: dialogs/rc.cpp:40
+msgid "Between These Dates"
+msgstr "Bu Tarihler Arasında"
+
+#: dialogs/rc.cpp:41 dialogs/rc.cpp:196
+msgid "Start on:"
+msgstr "Başla:"
+
+#: dialogs/rc.cpp:42 dialogs/rc.cpp:195
+msgid "End on:"
+msgstr "Bitir:"
+
+#: dialogs/rc.cpp:43
+#, fuzzy
+msgid "Run"
+msgstr "&Çalıştır"
+
+#: dialogs/rc.cpp:44
+msgid "Progress Info"
+msgstr "İşlem Bilgisi"
+
+#: dialogs/rc.cpp:45
+msgid "Processing Account:"
+msgstr "İşlem Yapılan Hesap:"
+
+#: dialogs/rc.cpp:47
+msgid "Processing Transaction:"
+msgstr "Yapılan Aktarım:"
+
+#: dialogs/rc.cpp:48
+msgid "0 of 0"
+msgstr "0 da 0"
+
+#: dialogs/rc.cpp:50
+msgid "Exchange Rate/Price Editor"
+msgstr "Dönüşüm Oranı /Fiyat Düzenleyici"
+
+#: dialogs/rc.cpp:55
+msgid "Convert from"
+msgstr "Şu para biriminden"
+
+#: dialogs/rc.cpp:58
+msgid "Convert to"
+msgstr "Şuna dönüştür"
+
+#: dialogs/rc.cpp:61
+#, fuzzy
+msgid "To amount"
+msgstr "Net toplam"
+
+#: dialogs/rc.cpp:62
+msgid "Exchange rate / Price"
+msgstr "Dönüşüm oranı /Fiyat"
+
+#: dialogs/rc.cpp:64
+msgid ""
+"xx\n"
+"xx"
+msgstr ""
+"xx\n"
+"xx"
+
+#: dialogs/rc.cpp:68
+msgid "Currencies"
+msgstr "Para birimleri"
+
+#: dialogs/rc.cpp:72
+msgid "real ID"
+msgstr "Gerçek Kimlik"
+
+#: dialogs/rc.cpp:73 dialogs/rc.cpp:722
+msgid "ID"
+msgstr "Kimlik"
+
+#: dialogs/rc.cpp:74
+msgid "X"
+msgstr "X"
+
+#: dialogs/rc.cpp:76 dialogs/rc.cpp:459
+msgid "Online Source"
+msgstr "Çevirimiçi Kaynak"
+
+#: dialogs/rc.cpp:78 dialogs/rc.cpp:278 dialogs/rc.cpp:312 dialogs/rc.cpp:684
+msgid "F1"
+msgstr "F1"
+
+#: dialogs/rc.cpp:80
+msgid "If this button is not activated, select the base currency first."
+msgstr ""
+
+#: dialogs/rc.cpp:81
+msgid ""
+"Press this button to close the dialog. If the button is not activated, "
+"select your base currency."
+msgstr ""
+
+#: dialogs/rc.cpp:82
+msgid "Edit Equity"
+msgstr "Özkaynağı Düzenle"
+
+#: dialogs/rc.cpp:86 dialogs/rc.cpp:410
+msgid "Smallest fraction:"
+msgstr "En küçük bölüm:"
+
+#: dialogs/rc.cpp:87 dialogs/rc.cpp:408 dialogs/rc.cpp:440
+msgid "1 /"
+msgstr "1 /"
+
+#: dialogs/rc.cpp:88 dialogs/rc.cpp:405
+msgid "Investment Type:"
+msgstr "Yatırım Tipi:"
+
+#: dialogs/rc.cpp:89 dialogs/rc.cpp:404
+msgid "Equity Name:"
+msgstr "Özkaynağın Adı:"
+
+#: dialogs/rc.cpp:90 dialogs/rc.cpp:409
+msgid "Market Symbol:"
+msgstr "Pazar Sembolü:"
+
+#: dialogs/rc.cpp:91
+msgid "Price History"
+msgstr "Fiyat geçmişi"
+
+#: dialogs/rc.cpp:97
+#, fuzzy
+msgid "Edit Scheduled transaction"
+msgstr "Zamanlanmış aktarım gir"
+
+#: dialogs/rc.cpp:98
+msgid "Schedule name:"
+msgstr "Zamanlama adı:"
+
+#: dialogs/rc.cpp:99
+msgid "Frequency:"
+msgstr "Sıklık:"
+
+#: dialogs/rc.cpp:100
+msgid "Number of selected periods between entries"
+msgstr ""
+
+#: dialogs/rc.cpp:101
+msgid "Payment information"
+msgstr "Ödeme bilgileri"
+
+#: dialogs/rc.cpp:105 dialogs/rc.cpp:160 dialogs/rc.cpp:247 dialogs/rc.cpp:752
+#: widgets/register.cpp:569
+msgid "C"
+msgstr "C"
+
+#: dialogs/rc.cpp:113
+msgid "Do nothing"
+msgstr "Hiçbir şey yapma"
+
+#: dialogs/rc.cpp:116
+msgid "If this schedule occurs on the weekend:"
+msgstr "Eğer bu zamanlama hafta sonuna rastlıyorsa:"
+
+#: dialogs/rc.cpp:117
+msgid "The amount is an estimate because it varies for each payment"
+msgstr ""
+
+#: dialogs/rc.cpp:118
+msgid "Enter this schedule into the register automatically when it is due"
+msgstr ""
+
+#: dialogs/rc.cpp:119
+msgid "This schedule will end at some time"
+msgstr ""
+
+#: dialogs/rc.cpp:120
+msgid "Number of transactions remaining:"
+msgstr "Bekleyen aktarım sayısı:"
+
+#: dialogs/rc.cpp:121
+msgid "Date of final transaction:"
+msgstr "Son aktarımın tarihi:"
+
+#: dialogs/rc.cpp:125
+msgid "Reconciliation Wizard"
+msgstr "Uzlaştırma Sihirbazı"
+
+#: dialogs/rc.cpp:127
+msgid ""
+"Reconciling your account assures, that your recordings match those of your "
+"institution and that there are no mistakes on either side. You should "
+"reconcile your account whenever you receive a statement from your "
+"institution.\n"
+"\n"
+"All relevant information necessary for this process is usually printed on "
+"your statement.\n"
+"\n"
+"On the next page you will verify, that the starting and ending balance are "
+"matching those on your statement. If not, please modify the figures."
+msgstr ""
+
+#: dialogs/rc.cpp:129
+msgid ""
+"KMyMoney calculates your loan payments automatically. The amounts can "
+"deviate from those calculated by the creditor. Therefore, you possibly have "
+"to adjust amortization, interest and other costs according to your "
+"statement.\n"
+"\n"
+"Please enter the following information found on your statement:"
+msgstr ""
+
+#: dialogs/rc.cpp:130
+msgid "Ending date of statement"
+msgstr ""
+
+#: dialogs/rc.cpp:131
+msgid "Starting date of statement"
+msgstr ""
+
+#: dialogs/rc.cpp:132
+msgid "Verify payments"
+msgstr "Ödemeleri doğrula"
+
+#: dialogs/rc.cpp:133 dialogs/rc.cpp:148 dialogs/rc.cpp:476 dialogs/rc.cpp:477
+#: dialogs/rc.cpp:508 dialogs/rc.cpp:513 dialogs/rc.cpp:518 dialogs/rc.cpp:532
+#: dialogs/rc.cpp:539 dialogs/rc.cpp:540 dialogs/rc.cpp:541 dialogs/rc.cpp:542
+#: dialogs/rc.cpp:543 dialogs/rc.cpp:552 dialogs/rc.cpp:553 dialogs/rc.cpp:554
+#: dialogs/rc.cpp:555 dialogs/rc.cpp:556 dialogs/rc.cpp:565 dialogs/rc.cpp:566
+#: dialogs/rc.cpp:567 dialogs/rc.cpp:568 dialogs/rc.cpp:569 dialogs/rc.cpp:578
+#: dialogs/rc.cpp:579 dialogs/rc.cpp:580 dialogs/rc.cpp:581 dialogs/rc.cpp:582
+#: dialogs/rc.cpp:591 dialogs/rc.cpp:592 dialogs/rc.cpp:593 dialogs/rc.cpp:594
+#: dialogs/rc.cpp:595 dialogs/rc.cpp:603 dialogs/rc.cpp:604 dialogs/rc.cpp:605
+#: dialogs/rc.cpp:606 dialogs/rc.cpp:607 dialogs/rc.cpp:618 dialogs/rc.cpp:619
+#: dialogs/rc.cpp:621 dialogs/rc.cpp:636 dialogs/rc.cpp:637 dialogs/rc.cpp:638
+#: dialogs/rc.cpp:639 dialogs/rc.cpp:640 dialogs/rc.cpp:641 dialogs/rc.cpp:651
+#: dialogs/rc.cpp:652 dialogs/rc.cpp:654 dialogs/rc.cpp:657 dialogs/rc.cpp:658
+#: dialogs/rc.cpp:659 dialogs/rc.cpp:664 dialogs/rc.cpp:665 dialogs/rc.cpp:668
+#: dialogs/rc.cpp:670 dialogs/rc.cpp:672 dialogs/rc.cpp:674 dialogs/rc.cpp:676
+#: dialogs/rc.cpp:678 dialogs/rc.cpp:681 dialogs/rc.cpp:823 widgets/rc.cpp:167
+msgid "1"
+msgstr "1"
+
+#: dialogs/rc.cpp:136
+msgid ""
+"If your statement shows different amounts, please cancel this dialog and "
+"correct the false transactions or correct the values in this dialog. In the "
+"later case, KMyMoney will create an adjustment transaction and add it to the "
+"ledger."
+msgstr ""
+
+#: dialogs/rc.cpp:138
+msgid ""
+"In order to create the adjustment transaction, KMyMoney requires an account "
+"and possibly an interest category to assign the differences to. Please "
+"select an account and - if necessary - a category."
+msgstr ""
+
+#: dialogs/rc.cpp:140
+msgid "Interest-Category"
+msgstr "Faiz-Kategori"
+
+#: dialogs/rc.cpp:141
+msgid "Restarting postponed reconciliation"
+msgstr ""
+
+#: dialogs/rc.cpp:142
+msgid ""
+"You have previously postponed the reconciliation of this account. If you "
+"have entered charges or interests the last time you started reconciling this "
+"account you can modify these in the ledger later on.\n"
+"\n"
+"It is important, that you continue with the same statement you used when you "
+"postponed the reconciliation.\n"
+"\n"
+"All information you have entered into this wizard will be shown and all "
+"transactions that you already cleared are marked with a 'C'."
+msgstr ""
+
+#: dialogs/rc.cpp:143
+msgid "Statement Information"
+msgstr ""
+
+#: dialogs/rc.cpp:144 dialogs/rc.cpp:315 dialogs/rc.cpp:317 dialogs/rc.cpp:320
+#: dialogs/rc.cpp:321 dialogs/rc.cpp:329 dialogs/rc.cpp:330 dialogs/rc.cpp:333
+#: dialogs/rc.cpp:334 dialogs/rc.cpp:335 dialogs/rc.cpp:336 dialogs/rc.cpp:366
+msgid "x"
+msgstr "x"
+
+#: dialogs/rc.cpp:145
+msgid "Statement date:"
+msgstr ""
+
+#: dialogs/rc.cpp:146
+msgid "Starting balance of this statement:"
+msgstr ""
+
+#: dialogs/rc.cpp:147
+msgid "Ending balance of this statement:"
+msgstr ""
+
+#: dialogs/rc.cpp:149
+msgid "Interest / Charges"
+msgstr ""
+
+#: dialogs/rc.cpp:150
+msgid ""
+"If necessary, enter information about interest or charges here. KMyMoney "
+"will create transactions and clear them directly for you."
+msgstr ""
+
+#: dialogs/rc.cpp:153
+msgid "Charges"
+msgstr ""
+
+#: dialogs/rc.cpp:154
+msgid "Enter Schedule"
+msgstr "Zamanlama Gir"
+
+#: dialogs/rc.cpp:155
+msgid "Schedule Details"
+msgstr "Zamanlama Ayrıntıları"
+
+#: dialogs/rc.cpp:156 dialogs/rc.cpp:348 dialogs/rc.cpp:389 widgets/rc.cpp:164
+msgid "Name:"
+msgstr "İsim:"
+
+#: dialogs/rc.cpp:157 dialogs/rc.cpp:351 widgets/rc.cpp:165
+msgid "Type:"
+msgstr "Tip:"
+
+#: dialogs/rc.cpp:168
+#, fuzzy
+msgid "Enter"
+msgstr "&Gir"
+
+#: dialogs/rc.cpp:169
+msgid ""
+"Enter the transaction and advance the next due date of this schedule to the "
+"next payment date."
+msgstr ""
+
+#: dialogs/rc.cpp:171
+msgid ""
+"Do not enter the transaction but advance the next due date of this schedule "
+"to the next payment date."
+msgstr ""
+
+#: dialogs/rc.cpp:172
+#, fuzzy
+msgid "Ignore"
+msgstr "Gelir"
+
+#: dialogs/rc.cpp:173
+msgid ""
+"Do not enter or skip payments for this schedule but continue with the next "
+"schedule."
+msgstr ""
+
+#: dialogs/rc.cpp:175
+msgid "Cancel processing of schedule entry."
+msgstr ""
+
+#: dialogs/rc.cpp:176
+msgid "Update Stock and Currency Prices"
+msgstr "Stok ve Para Birimi Fiyatlarını Güncelle"
+
+#: dialogs/rc.cpp:177
+msgid "List of known Equities, and the date they were last updated on."
+msgstr ""
+
+#: dialogs/rc.cpp:179
+#, fuzzy
+msgid "Update All"
+msgstr "&Tümünü Güncelle"
+
+#: dialogs/rc.cpp:180
+#, fuzzy
+msgid "Update Selected"
+msgstr "&Seçileni Güncelle"
+
+#: dialogs/rc.cpp:181
+msgid "Status:"
+msgstr "Durum:"
+
+#: dialogs/rc.cpp:184
+msgid "QIF Export"
+msgstr "QIF Dışarı Aktarımı"
+
+#: dialogs/rc.cpp:185
+msgid ""
+"From this dialog you are able to export transactions to a quicken compatible "
+"file, (known as a QIF file, because of the extension). Please enter the "
+"path to the QIF file or select it by clicking on the Browse button.\n"
+"\n"
+"You can choose the file's path, the account and the format of the QIF file "
+"(profile). Choose Account to export all the transactions between the "
+"specified dates or just categories. You can also limit the transactions "
+"that are exported by start and ending date. Once you have pressed the "
+"Export button a message box will appear when the export has completed "
+"detailing how many transactions, categories and payees were exported."
+msgstr ""
+
+#: dialogs/rc.cpp:186
+msgid "File to export to:"
+msgstr "Dışarıya aktarılacak dosya:"
+
+#: dialogs/rc.cpp:188
+msgid "Account to export"
+msgstr "Dışarıya aktarılacak hesap"
+
+#: dialogs/rc.cpp:189 dialogs/rc.cpp:297
+msgid "QIF Profile"
+msgstr "QIF Profili"
+
+#: dialogs/rc.cpp:190 dialogs/rc.cpp:298 dialogs/rc.cpp:362
+#: widgets/kmymoneypriceview.cpp:145
+msgid "New..."
+msgstr "Yeni..."
+
+#: dialogs/rc.cpp:191
+msgid "Contents to Export"
+msgstr "Dışarıya Aktarılacak İçerik"
+
+#: dialogs/rc.cpp:194
+msgid "Date Range"
+msgstr "Tarih Aralığı"
+
+#: dialogs/rc.cpp:199
+msgid "Search transactions"
+msgstr "Aktarımları ara"
+
+#: dialogs/rc.cpp:200
+msgid "Criteria"
+msgstr "Ölçüt"
+
+#: dialogs/rc.cpp:201
+msgid "Define your search criteria"
+msgstr "Arama kriterinizi belirleyin"
+
+#: dialogs/kfindtransactiondlg.cpp:169 dialogs/rc.cpp:202
+msgid "Text"
+msgstr "Metin"
+
+#: dialogs/rc.cpp:203
+msgid "Contains"
+msgstr ""
+
+#: dialogs/rc.cpp:204
+#, fuzzy
+msgid "Does not contain"
+msgstr "Hiçbir şey yapma"
+
+#: dialogs/rc.cpp:205
+msgid "Treat text as regular expression"
+msgstr "Metine düzenli ifade gibi davran"
+
+#: dialogs/rc.cpp:206
+msgid "Case sensitive"
+msgstr "Büyük/küçük harf duyarlı"
+
+#: dialogs/rc.cpp:209
+msgid "Range"
+msgstr "Aralık"
+
+#: dialogs/rc.cpp:210
+msgid ""
+"_: To (Date)\n"
+"To"
+msgstr "Tarihine"
+
+#: dialogs/rc.cpp:211
+msgid ""
+"_: From (Date)\n"
+"From"
+msgstr "Tarihinden"
+
+#: dialogs/rc.cpp:213
+msgid "Search this amount"
+msgstr "Bu tutarı ara"
+
+#: dialogs/rc.cpp:214
+msgid "Search amount in the range"
+msgstr ""
+
+#: dialogs/rc.cpp:215
+msgid ""
+"_: to (amount)\n"
+"to"
+msgstr "bu toplama"
+
+#: dialogs/rc.cpp:216
+msgid ""
+"_: from (amount)\n"
+"from"
+msgstr "bu toplamdan"
+
+#: dialogs/rc.cpp:220
+msgid "Select transactions without payees"
+msgstr "Alacaklısı olmayan aktarımları ara"
+
+#: dialogs/rc.cpp:221
+msgid "Select all"
+msgstr "Tümünü seç"
+
+#: dialogs/rc.cpp:222
+msgid "Select none"
+msgstr "Hiçbirini seçme"
+
+#: dialogs/rc.cpp:224
+msgid "Validity"
+msgstr "Geçerlilik"
+
+#: dialogs/rc.cpp:226
+msgid "All states"
+msgstr ""
+
+#: dialogs/rc.cpp:230
+msgid "All types"
+msgstr "Tüm tipler"
+
+#: dialogs/rc.cpp:234
+msgid "Any transaction"
+msgstr "Tüm aktarımlar"
+
+#: dialogs/rc.cpp:235
+msgid "Valid transaction"
+msgstr "Geçerli aktarımlar"
+
+#: dialogs/rc.cpp:236
+msgid "Invalid transaction"
+msgstr "Geçersiz aktarımlar"
+
+#: dialogs/rc.cpp:237
+msgid "State"
+msgstr ""
+
+#: dialogs/rc.cpp:238
+msgid "Search this number"
+msgstr "Bu numarayı ara"
+
+#: dialogs/rc.cpp:239
+msgid "Search number in range"
+msgstr ""
+
+#: dialogs/rc.cpp:240
+msgid ""
+"_: to (number)\n"
+"to"
+msgstr ""
+
+#: dialogs/rc.cpp:241
+msgid ""
+"_: from (number)\n"
+"from"
+msgstr ""
+
+#: dialogs/rc.cpp:242
+msgid "text"
+msgstr "metin"
+
+#: dialogs/rc.cpp:243
+msgid "warning"
+msgstr "uyarı"
+
+#: dialogs/rc.cpp:244
+msgid "Result"
+msgstr "Sonuç"
+
+#: dialogs/rc.cpp:254
+msgid "F"
+msgstr "F"
+
+#: dialogs/rc.cpp:257 dialogs/rc.cpp:844
+msgid "&Reset"
+msgstr "Sıfı&rla"
+
+#: dialogs/rc.cpp:258
+#, fuzzy
+msgid "&Find"
+msgstr "&Bitir"
+
+#: dialogs/rc.cpp:259
+msgid "GnuCash Import Options"
+msgstr "GnuCash İçeriye Aktarma Seçenekleri"
+
+#: dialogs/rc.cpp:260
+msgid "Use 'Help' for more information on these options"
+msgstr ""
+
+#: dialogs/rc.cpp:261
+msgid "Investment Handling"
+msgstr ""
+
+#: dialogs/rc.cpp:262
+msgid "One investment account for each stock"
+msgstr ""
+
+#: dialogs/rc.cpp:263
+msgid "One investment account for all stocks"
+msgstr ""
+
+#: dialogs/rc.cpp:264
+msgid "Prompt for an investment account for each stock"
+msgstr ""
+
+#: dialogs/rc.cpp:265
+msgid "Online price quotes"
+msgstr "Çevrimiçi fiyatlar"
+
+#: dialogs/rc.cpp:266
+msgid "Use Finance::Quote for share price quotes"
+msgstr ""
+
+#: dialogs/rc.cpp:267
+msgid "Scheduled Transactions"
+msgstr "Zamanlanmış Aktarımlar"
+
+#: dialogs/rc.cpp:268
+msgid "Drop suspect scheduled transactions"
+msgstr ""
+
+#: dialogs/rc.cpp:269
+msgid "Decoding option"
+msgstr "Şifreleme açma seçenekleri"
+
+#: dialogs/rc.cpp:270
+msgid "Decode using"
+msgstr "Bunu kullanarak şifrelemeyi aç"
+
+#: dialogs/rc.cpp:271
+#, fuzzy
+msgid "Transaction Notes option"
+msgstr "Aktarım seçenekleri"
+
+#: dialogs/rc.cpp:272
+#, fuzzy
+msgid "Use transaction notes on non-split transactions"
+msgstr "Aktarımı ayır"
+
+#: dialogs/rc.cpp:273
+msgid "Debug Options"
+msgstr "Hata Ayıklama Seçenekleri"
+
+#: dialogs/rc.cpp:274
+msgid "General debug data"
+msgstr "Genel hata ayıklama verisi"
+
+#: dialogs/rc.cpp:275
+msgid "Display XML data"
+msgstr "XML verilerini göster"
+
+#: dialogs/rc.cpp:276
+msgid "Anonymize data"
+msgstr ""
+
+#: dialogs/rc.cpp:281
+msgid "Online Quotes - Select price source"
+msgstr ""
+
+#: dialogs/rc.cpp:284
+msgid ""
+"This price source is not known to KMyMoney. Please select an option below."
+msgstr ""
+
+#: dialogs/rc.cpp:285
+msgid "Do not perform online quotes for this investment"
+msgstr ""
+
+#: dialogs/rc.cpp:286
+msgid "Select a known KMyMoney source from the list below"
+msgstr ""
+
+#: dialogs/rc.cpp:287
+msgid ""
+"Use the following name for the price source.\n"
+"(Click Help for further information.)"
+msgstr ""
+
+#: dialogs/rc.cpp:288
+msgid "Always use this selection for this price source."
+msgstr ""
+
+#: dialogs/rc.cpp:289
+msgid "QIF Import"
+msgstr "QIF İçeriye Aktarımı"
+
+#: dialogs/rc.cpp:290
+msgid ""
+"From this dialog you are able to import transactions from a Quicken<b>&trade;"
+"</b> compatible file, (known as a QIF file, because of the extension).<p>\n"
+"\n"
+"Please enter the path to the QIF file or select it by clicking on the Browse "
+"button. Once you have the file's path press the Import button and KMyMoney "
+"will import all the transactions, categories and payees it finds."
+msgstr ""
+
+#: dialogs/rc.cpp:291
+msgid "QIF File to Import:"
+msgstr "İçeri aktarılacak QIF dosyası:"
+
+#: dialogs/rc.cpp:292
+msgid "Import options"
+msgstr "İçeri aktarma ayarları"
+
+#: dialogs/rc.cpp:293
+#, fuzzy
+msgid "Bank statement"
+msgstr "Geçersiz Dosya"
+
+#: dialogs/rc.cpp:294
+#, fuzzy
+msgid "Other application"
+msgstr "Faiz hesaplama"
+
+#: dialogs/rc.cpp:295
+msgid ""
+"Select <b>Bank statement</b> turns on automatic category matching which is "
+"turned off in case of <b>Historic data</b>. Use the latter if you import "
+"files from other Personal Finance Management software."
+msgstr ""
+
+#: dialogs/rc.cpp:296
+#, fuzzy
+msgid "Source of QIF"
+msgstr "Kaynak"
+
+#: dialogs/rc.cpp:302
+msgid "Verify Import"
+msgstr "Aktarımı Doğrula"
+
+#: dialogs/rc.cpp:304
+#, fuzzy
+msgid "Ok"
+msgstr "&Tamam"
+
+#: dialogs/rc.cpp:306
+msgid "MyDialog"
+msgstr "BenimDiyaloğum"
+
+#: dialogs/rc.cpp:310
+msgid "File Information"
+msgstr "Dosya Bilgileri"
+
+#: dialogs/rc.cpp:316
+msgid "Last modified on"
+msgstr "Son düzenlenme zamanı"
+
+#: dialogs/rc.cpp:319
+msgid "Base currency"
+msgstr "Temel para birimi"
+
+#: dialogs/rc.cpp:322
+msgid "Created on"
+msgstr "Oluşturulma zamanı"
+
+#: dialogs/rc.cpp:325
+msgid "Accounts/Categories"
+msgstr "Hesaplar/Kategoriler"
+
+#: dialogs/rc.cpp:328
+msgid "Closed"
+msgstr "Kapalı"
+
+#: dialogs/rc.cpp:331
+msgid "Prices"
+msgstr "Fiyatlar"
+
+#: dialogs/rc.cpp:337
+#, fuzzy
+msgid "Splits"
+msgstr "Ayır"
+
+#: dialogs/rc.cpp:338
+msgid "Price Editor"
+msgstr "Fiyat Düzenleyici"
+
+#: dialogs/rc.cpp:339
+msgid "Show all stored prices"
+msgstr "Kaydedilen tüm fiyatları göster"
+
+#: dialogs/rc.cpp:343
+#, fuzzy
+msgid "Delete Range..."
+msgstr "&Oranı Sil ..."
+
+#: dialogs/rc.cpp:346
+msgid "New Account Dialog"
+msgstr "Yeni Hesap Penceresi"
+
+#: dialogs/rc.cpp:349
+msgid "Opening information"
+msgstr "Bilgiler açılıyor"
+
+#: dialogs/rc.cpp:350
+msgid "Currency:"
+msgstr "Para birimi:"
+
+#: dialogs/rc.cpp:352 dialogs/rc.cpp:793
+msgid "Date:"
+msgstr "Tarih:"
+
+#: dialogs/rc.cpp:353
+msgid "Balance:"
+msgstr ""
+
+#: dialogs/rc.cpp:355
+msgid "Last check number:"
+msgstr "Son çek numarası:"
+
+#: dialogs/rc.cpp:356
+msgid "Notes:"
+msgstr "Notlar:"
+
+#: dialogs/rc.cpp:357
+msgid "No auto-VAT-assignment"
+msgstr "Otomatik VAT ataması yapma"
+
+#: dialogs/rc.cpp:358 dialogs/rc.cpp:441
+msgid "Price entry"
+msgstr "Fiyat girişi"
+
+#: dialogs/rc.cpp:359
+msgid "Preferred Account"
+msgstr "Tercih Edilen Hesap"
+
+#: dialogs/rc.cpp:363
+msgid "Number:"
+msgstr "Numara:"
+
+#: dialogs/rc.cpp:364 dialogs/rc.cpp:395
+msgid "BIC"
+msgstr "BIC"
+
+#: dialogs/rc.cpp:367
+msgid "Hierarchy"
+msgstr "Hiyerarşi"
+
+#: dialogs/rc.cpp:368
+msgid "Subaccount"
+msgstr "Alt-hesap:"
+
+#: dialogs/rc.cpp:369
+msgid "Limits"
+msgstr "Sınırlar"
+
+#: dialogs/rc.cpp:370
+msgid ""
+"This page allows to setup certain limits. KMyMoney will warn you when the "
+"account balance reaches a limit."
+msgstr ""
+
+#: dialogs/rc.cpp:372
+msgid "Absolute limit"
+msgstr "Mutlak sınır"
+
+#: dialogs/rc.cpp:373
+msgid "Maximum credit limit"
+msgstr "En yüksek kredi sınırı"
+
+#: dialogs/rc.cpp:374
+msgid "Minimum balance"
+msgstr ""
+
+#: dialogs/rc.cpp:375
+msgid "Early warning"
+msgstr "Erken uyarı"
+
+#: dialogs/rc.cpp:377
+msgid "VAT details"
+msgstr "VAT detayları"
+
+#: dialogs/rc.cpp:378
+msgid "VAT category"
+msgstr "VAT kategorisi"
+
+#: dialogs/rc.cpp:379
+msgid "VAT percentage"
+msgstr "VAT yüzdesi"
+
+#: dialogs/rc.cpp:380
+msgid "Enable auto VAT assignment"
+msgstr "Otomatik VAT atamasını etkinleştir"
+
+#: dialogs/rc.cpp:381
+msgid "Amount entered"
+msgstr ""
+
+#: dialogs/rc.cpp:382
+msgid "Gross amount"
+msgstr ""
+
+#: dialogs/rc.cpp:383
+msgid "Net amount"
+msgstr "Net toplam"
+
+#: dialogs/rc.cpp:384
+msgid "Include on Tax Reports"
+msgstr ""
+
+#: dialogs/rc.cpp:387
+msgid "New Institution Dialog"
+msgstr "Yeni Şirket Penceresi"
+
+#: dialogs/rc.cpp:388
+msgid "Institution Details"
+msgstr "Şirket Detayları"
+
+#: dialogs/rc.cpp:390
+msgid "City:"
+msgstr "Şehir:"
+
+#: dialogs/rc.cpp:394
+msgid "Routing Number:"
+msgstr "Yönlendirme Numarası:"
+
+#: dialogs/rc.cpp:398
+msgid "New Budget"
+msgstr "Yeni Bütçe"
+
+#: dialogs/rc.cpp:403
+msgid "New Equity"
+msgstr "Yeni Eşitlik"
+
+#: dialogs/rc.cpp:406 dialogs/rc.cpp:407
+msgid "Trading Symbol of the stock or mutual fund, not required."
+msgstr ""
+
+#: dialogs/rc.cpp:414 dialogs/rc.cpp:415
+msgid "Name of the company, or mutual fund."
+msgstr ""
+
+#: dialogs/rc.cpp:418
+msgid "New File Dialog"
+msgstr "Yeni Dosya Penceresi"
+
+#: dialogs/rc.cpp:419
+msgid ""
+"Use this dialog to enter personal information about yourself.\n"
+"\n"
+"All information is optional and is provided to personalize\n"
+"your KMyMoney file."
+msgstr ""
+"Kişisel bilgilerinizi girmek için bu pencereyi kullanın.\n"
+"\n"
+"Tüm bilgiler isteğe bağlıdır ve KMyMoney dosyanızı kişiselleştimeye yarar."
+
+#: dialogs/rc.cpp:430
+msgid "New Investment wizard"
+msgstr "Yeni Yatırım Sihirbazı"
+
+#: dialogs/rc.cpp:431
+msgid "Investment Type"
+msgstr "Yatırım Tipi"
+
+#: dialogs/rc.cpp:432
+#, fuzzy
+msgid "This wizard allows you to create a new investment."
+msgstr "Lütfen bir üst hesap seçin."
+
+#: dialogs/rc.cpp:433
+msgid ""
+"The first step in this process requires to select the type of investment. "
+"The following steps collect more details about the investment from you."
+msgstr ""
+
+#: dialogs/rc.cpp:434
+msgid "Type of investment"
+msgstr "Yatırımın tipi"
+
+#: dialogs/rc.cpp:438
+msgid "Investment details"
+msgstr "Yatırım detayları"
+
+#: dialogs/rc.cpp:439
+msgid ""
+"Enter the details below and click <b>Next</b> to continue entering the "
+"online update details."
+msgstr ""
+"Aşağıya detayları girerek <b>İleri</b> düğmesine tıklayarak çevrimiçi "
+"güncelleme detaylarına girin."
+
+#: dialogs/rc.cpp:442 dialogs/rc.cpp:728
+msgid "Fraction"
+msgstr "Bölüm"
+
+#: dialogs/rc.cpp:443
+msgid "Trading Currency"
+msgstr "Alışveriş Para Birimi"
+
+#: dialogs/rc.cpp:444
+msgid "Full name"
+msgstr "Tam isim"
+
+#: dialogs/rc.cpp:445
+msgid "AMEX"
+msgstr "AMEX"
+
+#: dialogs/rc.cpp:446
+msgid "EUREX"
+msgstr "EUREX"
+
+#: dialogs/rc.cpp:447
+msgid "FUND"
+msgstr "FUND"
+
+#: dialogs/rc.cpp:448
+msgid "NASDAQ"
+msgstr "NASDAQ"
+
+#: dialogs/rc.cpp:449
+msgid "NYSE"
+msgstr "NYSE"
+
+#: dialogs/rc.cpp:450
+msgid "XETRA"
+msgstr "XETRA"
+
+#: dialogs/rc.cpp:451
+msgid "Trading symbol"
+msgstr "Alışveriş simgesi"
+
+#: dialogs/rc.cpp:452
+msgid "Identification"
+msgstr "Kimlik"
+
+#: dialogs/rc.cpp:453
+msgid "Enter the ticker symbol (e.g. RHAT)."
+msgstr "Ticker sembolünü girin (RHAT gibi.)"
+
+#: dialogs/rc.cpp:454
+msgid "Enter the CUSIP/ISIN/WKN identification number here"
+msgstr ""
+
+#: dialogs/rc.cpp:455
+msgid "Trading market"
+msgstr ""
+
+#: dialogs/rc.cpp:456
+msgid "Online Update"
+msgstr "Çevrimiçi Güncelleme"
+
+#: dialogs/rc.cpp:457
+msgid ""
+"Select an online source and click <b>Finish</b> to store the investment "
+"data. If you don't want to use online updates, just leave the data as is."
+msgstr ""
+
+#: dialogs/rc.cpp:458
+msgid "Use Finance::Quote"
+msgstr ""
+
+#: dialogs/rc.cpp:460
+msgid "Factor"
+msgstr "Çarpan"
+
+#: dialogs/rc.cpp:461
+msgid "New Loan Wizard"
+msgstr ""
+
+#: dialogs/rc.cpp:462
+msgid "New Loan Account Wizard"
+msgstr ""
+
+#: dialogs/rc.cpp:463
+msgid ""
+"\n"
+"Welcome to the New Loan Account Wizard which will guide you through the "
+"creation of a new loan e.g. for your home, your car or any other loan that "
+"you pay or gain interest for.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+
+#: dialogs/rc.cpp:464
+msgid "Edit Loan Account Wizard"
+msgstr ""
+
+#: dialogs/rc.cpp:465
+msgid ""
+"\n"
+"Welcome to the Edit Loan Account Wizard. Please use this wizard to modify "
+"information about your loan account.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+
+#: dialogs/rc.cpp:467
+msgid ""
+"\n"
+"In the first step, KMyMoney will ask you some general information about the "
+"loan account to be created."
+msgstr ""
+
+#: dialogs/rc.cpp:468 dialogs/rc.cpp:522 dialogs/rc.cpp:610
+msgid "1. General Information"
+msgstr "1. Genel Bilgiler"
+
+#: dialogs/rc.cpp:469
+msgid ""
+"\n"
+"2. Calculate Loan\n"
+"\n"
+"3. Payments"
+msgstr ""
+
+#: dialogs/rc.cpp:470
+msgid "Edit selection"
+msgstr "Seçimi Düzenle"
+
+#: dialogs/rc.cpp:471
+msgid ""
+"\n"
+"Please select, which data of the loan you want to modify."
+msgstr ""
+
+#: dialogs/rc.cpp:472
+msgid "Modify the interest rate"
+msgstr "Faiz oranını düzenle"
+
+#: dialogs/rc.cpp:473
+msgid "Modify additional fees"
+msgstr "Ek ödemeleri düzenle"
+
+#: dialogs/rc.cpp:474
+msgid "Modify other loan information"
+msgstr ""
+
+#: dialogs/rc.cpp:475
+msgid "Effective date"
+msgstr ""
+
+#: dialogs/rc.cpp:478
+msgid "When should the changes become active?"
+msgstr ""
+
+#: dialogs/rc.cpp:479
+msgid "Lending or borrowing money"
+msgstr ""
+
+#: dialogs/rc.cpp:480
+msgid ""
+"\n"
+"Do you borrow or lend money?"
+msgstr ""
+
+#: dialogs/rc.cpp:483
+msgid "Name of the loan"
+msgstr ""
+
+#: dialogs/rc.cpp:484
+msgid ""
+"\n"
+"How do you want to call this loan? Examples for names are 'car loan', "
+"'school loan', 'home owner loan'."
+msgstr ""
+
+#: dialogs/rc.cpp:486
+msgid "TextLabel6"
+msgstr "MetinEtiketi6"
+
+#: dialogs/rc.cpp:487
+msgid "TextLabel7"
+msgstr "MetinEtiketi7"
+
+#: dialogs/rc.cpp:488
+msgid "Type of interest"
+msgstr "Faiz Tipi"
+
+#: dialogs/rc.cpp:489
+msgid ""
+"\n"
+"Is the interest of this loan fixed over a period of time or is it adapted "
+"from time to time? If the interest rate changes during the amortization "
+"phase of the loan you should choose the option 'variable interest rate'."
+msgstr ""
+
+#: dialogs/rc.cpp:490
+msgid "Fixed interest rate"
+msgstr "Belirli faiz oranı"
+
+#: dialogs/rc.cpp:491
+msgid "Variable interest rate"
+msgstr "Değişken faiz oranı"
+
+#: dialogs/rc.cpp:492
+msgid "Payments?"
+msgstr "Ödemeler?"
+
+#: dialogs/rc.cpp:493
+msgid ""
+"\n"
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?"
+msgstr ""
+
+#: dialogs/rc.cpp:494
+msgid "No, no payments were made yet."
+msgstr "Hayır, hiç ödeme yapılmadı."
+
+#: dialogs/rc.cpp:495
+msgid "Yes, payments were made."
+msgstr "Evet, ödemeler yapıldı."
+
+#: dialogs/rc.cpp:496
+msgid ""
+"Note: Payments made to obtain the loan (e.g. Dissagio) are not considered as "
+"payments in this context."
+msgstr ""
+
+#: dialogs/rc.cpp:497
+msgid "Recording payments?"
+msgstr "Ödemeler kaydedilsin mi?"
+
+#: dialogs/rc.cpp:498
+msgid ""
+"\n"
+"Do you want to record all payments of this loan with KMyMoney?"
+msgstr ""
+
+#: dialogs/rc.cpp:499
+msgid "Yes, record all payments."
+msgstr "Evet, tüm ödemeleri kaydet."
+
+#: dialogs/rc.cpp:500
+msgid "No, only record payments since the beginning of this year."
+msgstr ""
+
+#: dialogs/rc.cpp:501
+msgid "Date of next interest change"
+msgstr "Faiz oranın değiştiği son tarih"
+
+#: dialogs/rc.cpp:502
+msgid ""
+"\n"
+"Select the date when the interest rate for this loan will be modified and "
+"the frequency of the future changes."
+msgstr ""
+
+#: dialogs/rc.cpp:503
+msgid "Next interest change on"
+msgstr ""
+
+#: dialogs/rc.cpp:504
+msgid "Time until next change"
+msgstr ""
+
+#: dialogs/rc.cpp:506 dialogs/rc.cpp:571
+msgid ""
+"\n"
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+
+#: dialogs/rc.cpp:507
+msgid "Current amount"
+msgstr "Geçerli tutar"
+
+#: dialogs/rc.cpp:510
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the amount for principal and interest then enter "
+"it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+
+#: dialogs/rc.cpp:512 dialogs/rc.cpp:545
+msgid ""
+"\n"
+"Please enter the interest rate or leave the field empty to calculate it."
+msgstr ""
+
+#: dialogs/rc.cpp:514
+msgid "Current rate"
+msgstr "Şimdiki oran"
+
+#: dialogs/rc.cpp:516
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the interest rate then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+
+#: dialogs/rc.cpp:517
+msgid "Date of first payment"
+msgstr "İlk ödeme tarihi"
+
+#: dialogs/rc.cpp:520
+msgid "Calculate Loan"
+msgstr ""
+
+#: dialogs/rc.cpp:521
+msgid ""
+"\n"
+"You have successfully entered the general information about your loan. Next, "
+"KMyMoney needs some information about the calculation of the loan."
+msgstr ""
+
+#: dialogs/rc.cpp:523 dialogs/rc.cpp:611
+msgid ""
+"\n"
+"2. Calculate Loan"
+msgstr ""
+
+#: dialogs/rc.cpp:524 dialogs/rc.cpp:612
+msgid ""
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"3. Ödemeler"
+
+#: dialogs/rc.cpp:526
+msgid ""
+"\n"
+"How often will there be payments made to this loan?"
+msgstr ""
+
+#: dialogs/rc.cpp:527
+msgid "Interest calculation"
+msgstr "Faiz hesaplama"
+
+#: dialogs/rc.cpp:528
+msgid ""
+"\n"
+"When does the actual interest rate get calculated?"
+msgstr ""
+
+#: dialogs/rc.cpp:529
+msgid "When the payment is received."
+msgstr "Ödemenin alındığı zaman."
+
+#: dialogs/rc.cpp:530
+msgid "When the payment is due."
+msgstr "Ödemenin yapıldığı zaman."
+
+#: dialogs/rc.cpp:534 dialogs/rc.cpp:547 dialogs/rc.cpp:560 dialogs/rc.cpp:573
+#: dialogs/rc.cpp:586 dialogs/rc.cpp:598 dialogs/rc.cpp:679
+msgid "Loan amount:"
+msgstr ""
+
+#: dialogs/rc.cpp:535 dialogs/rc.cpp:548 dialogs/rc.cpp:561 dialogs/rc.cpp:574
+#: dialogs/rc.cpp:587 dialogs/rc.cpp:599 dialogs/rc.cpp:633 dialogs/rc.cpp:671
+msgid "Interest rate:"
+msgstr "Faiz oranı:"
+
+#: dialogs/rc.cpp:536 dialogs/rc.cpp:549 dialogs/rc.cpp:562 dialogs/rc.cpp:575
+#: dialogs/rc.cpp:588 dialogs/rc.cpp:600 dialogs/rc.cpp:669
+msgid "Term:"
+msgstr "Dönem:"
+
+#: dialogs/rc.cpp:537 dialogs/rc.cpp:550 dialogs/rc.cpp:563 dialogs/rc.cpp:576
+#: dialogs/rc.cpp:589 dialogs/rc.cpp:601 dialogs/rc.cpp:622 dialogs/rc.cpp:630
+#: dialogs/rc.cpp:677
+msgid "Principal + Interest:"
+msgstr "Anapara + Faiz:"
+
+#: dialogs/rc.cpp:538 dialogs/rc.cpp:551 dialogs/rc.cpp:564 dialogs/rc.cpp:577
+#: dialogs/rc.cpp:583 dialogs/rc.cpp:585 dialogs/rc.cpp:590 dialogs/rc.cpp:602
+msgid "Final amortization payment"
+msgstr "Nihai amortisman ödemesi"
+
+#: dialogs/rc.cpp:557
+msgid "Duration"
+msgstr "Süre"
+
+#: dialogs/rc.cpp:558
+msgid ""
+"\n"
+"Please enter the term of this loan or leave the field empty to calculate it. "
+"The term is the time that is required to fully repay the loan. This time "
+"might be different from the time your loan contract is signed for."
+msgstr ""
+
+#: dialogs/rc.cpp:584
+msgid ""
+"\n"
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+
+#: dialogs/rc.cpp:596
+msgid "Calculation Overview"
+msgstr "Hesaplama Gözden Geçirmesi"
+
+#: dialogs/rc.cpp:597
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown in the overview below. You can "
+"accept these values by selecting \"Next\" or change them by choosing \"Back"
+"\" to return to the input field for the information you want to change."
+msgstr ""
+
+#: dialogs/rc.cpp:609
+msgid ""
+"\n"
+"In the following steps, KMyMoney supports you in setting up categories and "
+"schedules for your loan payments."
+msgstr ""
+
+#: dialogs/rc.cpp:614
+msgid ""
+"\n"
+"Please select the category you want to assign the interest payments to or "
+"create a new category."
+msgstr ""
+
+#: dialogs/rc.cpp:615
+msgid "Additional Fees"
+msgstr "Ek Ödemeler"
+
+#: dialogs/rc.cpp:616
+msgid ""
+"\n"
+"If your regular payment contains any additional fees, click on the button "
+"\"Additional fees\" to enter them."
+msgstr ""
+
+#: dialogs/rc.cpp:617
+msgid "= periodical payment:"
+msgstr "= periyodik ödeme:"
+
+#: dialogs/rc.cpp:623
+msgid ""
+"If no additional fees are included in your periodical payment or you have "
+"entered all such fees, then click on \"Next\"."
+msgstr ""
+
+#: dialogs/rc.cpp:625
+msgid ""
+"KMyMoney will create a schedule for this payment and reminds you whenever a "
+"payment must be made.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+
+#: dialogs/rc.cpp:626
+msgid "First payment due on:"
+msgstr "İlk ödeme zamanı:"
+
+#: dialogs/rc.cpp:627
+msgid "Make payment from/to:"
+msgstr ""
+
+#: dialogs/rc.cpp:629
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown below. If you want to accept these "
+"values use the \"Finish\" button to update your account, otherwise use the "
+"\"Back\" button to modify your settings."
+msgstr ""
+
+#: dialogs/rc.cpp:631
+msgid "Additional fees:"
+msgstr "Ek ödemeler:"
+
+#: dialogs/rc.cpp:632
+msgid "Total payment:"
+msgstr "Toplam ödeme:"
+
+#: dialogs/rc.cpp:634
+msgid "Valid from:"
+msgstr "Geçerlilik süresi başlangıcı:"
+
+#: dialogs/rc.cpp:635
+msgid "Affected payments:"
+msgstr "Etkilenen ödemeler:"
+
+#: dialogs/rc.cpp:645
+msgid "Press this to create a new asset account"
+msgstr ""
+
+#: dialogs/rc.cpp:648
+msgid ""
+"\n"
+"This page summarizes the data you entered. If you need to modify anything, "
+"please use the \"Back\" button to go to respective page. Otherwise use the "
+"\"Finish\" button to create the account."
+msgstr ""
+
+#: dialogs/rc.cpp:650
+msgid "Payee:"
+msgstr "Alacaklı:"
+
+#: dialogs/rc.cpp:653
+msgid "First payment:"
+msgstr "İlk Ödeme:"
+
+#: dialogs/rc.cpp:655
+msgid "Amount is:"
+msgstr "Tutar:"
+
+#: dialogs/rc.cpp:656
+msgid "Loan calculation"
+msgstr ""
+
+#: dialogs/rc.cpp:660
+msgid "Periodic Payment:"
+msgstr "Periyodik Ödeme:"
+
+#: dialogs/rc.cpp:661
+msgid "Additional Fees:"
+msgstr "Ek Ödemeler:"
+
+#: dialogs/rc.cpp:662
+msgid "Interest category:"
+msgstr "Faiz kategorisi:"
+
+#: dialogs/rc.cpp:663
+msgid "Payment from:"
+msgstr ""
+
+#: dialogs/rc.cpp:666
+msgid "Next due date:"
+msgstr "Sonraki ödeme tarihi:"
+
+#: dialogs/rc.cpp:673
+msgid "Final Payment:"
+msgstr "Nihai Ödeme:"
+
+#: dialogs/rc.cpp:675
+msgid "Interest is due:"
+msgstr ""
+
+#: dialogs/rc.cpp:680
+msgid "Payment frequency:"
+msgstr "Ödeme sıklığı:"
+
+#: dialogs/rc.cpp:682
+msgid "Online Quote Configuration"
+msgstr "Çevrimiçi aktarım Yapılandırması"
+
+#: dialogs/rc.cpp:687
+msgid "Perl Location:"
+msgstr "Perl Konumu:"
+
+#: dialogs/rc.cpp:688
+msgid "Script:"
+msgstr "Betik:"
+
+#: dialogs/rc.cpp:690
+msgid "Reassign payees"
+msgstr "Ödemeleri yeniden ata"
+
+#: dialogs/rc.cpp:691
+msgid ""
+"The transactions associated with the selected payees need to be re-assigned "
+"to a different payee before the selected payees can be deleted. Please "
+"select a payee from the list below."
+msgstr ""
+
+#: dialogs/rc.cpp:692
+msgid "Available payees:"
+msgstr "Kullanılabilir ödemeler:"
+
+#: dialogs/rc.cpp:693
+msgid "Assign deleted names to the above selected payee's matching list"
+msgstr ""
+
+#: dialogs/rc.cpp:696
+msgid "PluginDlg"
+msgstr "EklentilerPenceresi"
+
+#: dialogs/rc.cpp:697
+msgid "PlugIn"
+msgstr "Eklenti"
+
+#: dialogs/rc.cpp:698 widgets/transaction.cpp:1071
+#: widgets/transaction.cpp:1658
+msgid "Status"
+msgstr "Durum"
+
+#: dialogs/rc.cpp:699
+msgid "Feature"
+msgstr "Özellik"
+
+#: dialogs/rc.cpp:703
+msgid "Reconciliation Dialog"
+msgstr "Uzlaştırma Penceresi"
+
+#: dialogs/rc.cpp:704
+msgid ""
+"This dialog will assist in helping you to balance your account.\n"
+"\n"
+"Click on an appropriate transaction within one of the two list views to mark "
+"it as reconciled. To create a transaction or edit\n"
+"a transaction you can return to the register by clicking on the Edit "
+"Transactions button.\n"
+"\n"
+"Your account is balanced when the Difference is Zero. Click on the Finish "
+"button to save the reconciled transactions."
+msgstr ""
+
+#: dialogs/rc.cpp:705
+msgid "Withdrawals"
+msgstr ""
+
+#: dialogs/rc.cpp:707 dialogs/rc.cpp:708 dialogs/rc.cpp:822
+msgid "$"
+msgstr "$"
+
+#: dialogs/rc.cpp:710
+msgid "Previous Balance:"
+msgstr ""
+
+#: dialogs/rc.cpp:711 dialogs/rc.cpp:713 dialogs/rc.cpp:715 dialogs/rc.cpp:717
+#: dialogs/rc.cpp:820
+msgid "0"
+msgstr "0"
+
+#: dialogs/rc.cpp:712
+msgid "Ending Balance:"
+msgstr ""
+
+#: dialogs/rc.cpp:714
+msgid "Cleared Balance:"
+msgstr ""
+
+#: dialogs/rc.cpp:716
+msgid "Difference:"
+msgstr "Fark:"
+
+#: dialogs/rc.cpp:718
+#, fuzzy
+msgid "Edit Transactions..."
+msgstr "&Aktarımları Düzenle..."
+
+#: dialogs/rc.cpp:721
+msgid "Security List Editor"
+msgstr "Senet Listesi Düzenleyici"
+
+#: dialogs/rc.cpp:726
+msgid "Market"
+msgstr "Pazar"
+
+#: dialogs/rc.cpp:729
+msgid "Cash Fraction"
+msgstr "Nakit Para Bölümü"
+
+#: dialogs/rc.cpp:730
+#, fuzzy
+msgid "Add..."
+msgstr "&Ekle..."
+
+#: dialogs/rc.cpp:732 widgets/kmymoneypriceview.cpp:157
+msgid "Delete..."
+msgstr "Sil..."
+
+#: dialogs/rc.cpp:733
+msgid "Show national currencies"
+msgstr "Ulusal para birimlerini göster"
+
+#: dialogs/rc.cpp:735
+msgid "KMyMoney - Select Database"
+msgstr "KMyMoney - Veritabanı Seç"
+
+#: dialogs/rc.cpp:736
+msgid "CAUTION!"
+msgstr "UYARI!"
+
+#: dialogs/rc.cpp:737
+msgid ""
+"<font color=\"#ff2727\">This software is still in an experimental stage, and "
+"there are still some known response time problems. Please be patient; we are "
+"working on them.\n"
+"As always, please make sure you have adequate backups of your data.</font>"
+msgstr ""
+
+#: dialogs/rc.cpp:738
+msgid "Database Type"
+msgstr "Veritabanı Tipi"
+
+#: dialogs/rc.cpp:739
+msgid "Database Name"
+msgstr "Veritabanı Adı"
+
+#: dialogs/rc.cpp:740
+msgid "Host Name"
+msgstr "Makine Adı"
+
+#: dialogs/rc.cpp:741
+msgid "User Name"
+msgstr "Kullanıcı Adı"
+
+#: dialogs/rc.cpp:743
+#, fuzzy
+msgid "Preload &all data"
+msgstr "Tüm verileri önceden yükle"
+
+#: dialogs/rc.cpp:745
+#, fuzzy
+msgid "&Generate SQL"
+msgstr "SQL Oluştur"
+
+#: dialogs/rc.cpp:747
+msgid "Ca&ncel"
+msgstr "İ&ptal"
+
+#: dialogs/rc.cpp:762 widgets/rc.cpp:172
+msgid "Sort options"
+msgstr "Sıralama seçenekleri"
+
+#: dialogs/rc.cpp:763
+msgid "Use default"
+msgstr "Öntanımlı Kullan"
+
+#: dialogs/rc.cpp:767
+msgid "Correct splits"
+msgstr ""
+
+#: dialogs/rc.cpp:769
+msgid "How do you want to proceed?"
+msgstr ""
+
+#: dialogs/rc.cpp:770
+#, fuzzy
+msgid "Continue to edit splits"
+msgstr "Sonraki sayfa ile devam et"
+
+#: dialogs/rc.cpp:771
+#, c-format
+msgid "Change total amount of transaction to %1."
+msgstr ""
+
+#: dialogs/rc.cpp:772
+msgid "Distribute difference of %1 among all splits."
+msgstr ""
+
+#: dialogs/rc.cpp:773
+#, fuzzy
+msgid "Leave %1 unassigned."
+msgstr "Atanmamış"
+
+#: dialogs/rc.cpp:776
+msgid "Split transaction"
+msgstr ""
+
+#: dialogs/rc.cpp:777
+msgid "<b>11,00<b>"
+msgstr "<b>11,00<b>"
+
+#: dialogs/rc.cpp:778
+msgid "<b>111,00<b>"
+msgstr "<b>111,00<b>"
+
+#: dialogs/rc.cpp:779
+msgid "Unassigned"
+msgstr "Atanmamış"
+
+#: dialogs/rc.cpp:780
+msgid "Sum of splits"
+msgstr ""
+
+#: dialogs/rc.cpp:781
+msgid "100,00"
+msgstr "100,00"
+
+#: dialogs/rc.cpp:782
+msgid "Transaction amount"
+msgstr "Aktarım tutarı"
+
+#: dialogs/rc.cpp:783
+#, fuzzy
+msgid "Merge"
+msgstr "Daha fazla"
+
+#: dialogs/rc.cpp:784
+msgid "Merges splits with the same category to one split"
+msgstr ""
+
+#: dialogs/rc.cpp:785
+msgid ""
+"In case you have multiple split entries to the same category and you like to "
+"keep them as a single split, press this button. The amount for identical "
+"categories will be added and stored in a single split for that category."
+msgstr ""
+
+#: dialogs/rc.cpp:786
+#, fuzzy
+msgid "Clear &Zero"
+msgstr "Temizlenmiş"
+
+#: dialogs/rc.cpp:787
+msgid "Removes all splits that have a value of zero."
+msgstr ""
+
+#: dialogs/rc.cpp:791
+msgid "New price entry"
+msgstr "Yeni fiyatgirişi"
+
+#: dialogs/rc.cpp:799
+msgid "Void mark"
+msgstr ""
+
+#: dialogs/rc.cpp:800
+msgid "Opening Balance text"
+msgstr ""
+
+#: dialogs/rc.cpp:801
+msgid "Type field text"
+msgstr ""
+
+#: dialogs/rc.cpp:802
+msgid "Account delimiter"
+msgstr "Hesap Sınırlandırıcı"
+
+#: dialogs/rc.cpp:804
+msgid "Attempt to match similar transactions"
+msgstr "Benzer aktarımları eşlemeye çalış"
+
+#: dialogs/rc.cpp:806 dialogs/rc.cpp:808
+msgid "The format of the dates in the QIF file."
+msgstr ""
+
+#: dialogs/rc.cpp:809 dialogs/rc.cpp:811
+msgid ""
+"If a QIF file contains date entries with years represented with two digits "
+"then either an apostrophe or a slash may be used to delimit the year in the "
+"dates for certain centuries. This enables 1905 to be distinguished from "
+"2005. Specify here which range of years will have year delimited by an "
+"apostrophe (eg. for Quicken this is usually 1900-1949)."
+msgstr ""
+
+#: dialogs/rc.cpp:810
+msgid "Apostrophe Handling"
+msgstr "Kesme İşareti Kullanımı"
+
+#: dialogs/rc.cpp:812
+msgid "Amounts"
+msgstr "Tutarlar"
+
+#: dialogs/rc.cpp:813
+msgid "Field"
+msgstr "Alan"
+
+#: dialogs/rc.cpp:814
+msgid "QIF-Record"
+msgstr "QIF-Kaydı"
+
+#: dialogs/rc.cpp:815 dialogs/rc.cpp:833
+msgid "Decimal Symbol"
+msgstr "Ondalık Simgesi"
+
+#: dialogs/rc.cpp:816
+msgid "Thousand Delimiter"
+msgstr ""
+
+#: dialogs/rc.cpp:817
+msgid "SortColumnInvisible"
+msgstr ""
+
+#: dialogs/rc.cpp:819
+msgid "T"
+msgstr "T"
+
+#: dialogs/rc.cpp:821
+msgid "Split-Value"
+msgstr ""
+
+#: dialogs/rc.cpp:824
+msgid "Commission"
+msgstr "Komisyon"
+
+#: dialogs/rc.cpp:825
+msgid "O"
+msgstr "O"
+
+#: dialogs/rc.cpp:826
+msgid "2"
+msgstr "2"
+
+#: dialogs/rc.cpp:828
+msgid "I"
+msgstr "I"
+
+#: dialogs/rc.cpp:829
+msgid "3"
+msgstr "3"
+
+#: dialogs/rc.cpp:831
+msgid "Q"
+msgstr "Q"
+
+#: dialogs/rc.cpp:832
+msgid "4"
+msgstr "4"
+
+#: dialogs/rc.cpp:834
+msgid "Thousands Separator"
+msgstr "Binler Basamağı Ayırıcısı"
+
+#: dialogs/rc.cpp:836
+msgid "Output filter location"
+msgstr "Çıktı filtresi konumu"
+
+#: dialogs/rc.cpp:837
+msgid "Input filter file type"
+msgstr "Girdi filtresi dosya tipi"
+
+#: dialogs/rc.cpp:838
+msgid "*.qif"
+msgstr "*.qif"
+
+#: dialogs/rc.cpp:839
+msgid "Input filter location"
+msgstr "Girdi filtresi konumu"
+
+#: dialogs/rc.cpp:843
+#, fuzzy
+msgid "Rename"
+msgstr "&Yeniden Adlandır"
+
+#: dialogs/kselecttransactionsdlg.cpp:44
+msgid "Select Transaction"
+msgstr "Aktarım Seç"
+
+#: dialogs/kselecttransactionsdlg.cpp:45
+msgid ""
+"Select a transaction and press the OK button or use Cancel to select none."
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:62
+msgid "Investment detail wizard"
+msgstr "Yatırım detayları sihirbazı"
+
+#: dialogs/knewinvestmentwizard.cpp:82
+msgid "Security detail wizard"
+msgstr "Senet ayrıntıları sihirbazı"
+
+#: dialogs/knewaccountdlg.cpp:121 dialogs/knewinvestmentwizard.cpp:109
+msgid ""
+"_: default price mode\n"
+"<default>"
+msgstr "<öntanımlı>"
+
+#: dialogs/knewaccountdlg.cpp:122 dialogs/knewinvestmentwizard.cpp:110
+msgid "Price per share"
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:123 dialogs/knewinvestmentwizard.cpp:111
+msgid "Total for all shares"
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:129
+#, fuzzy
+msgid "This wizard allows you to modify the selected investment."
+msgstr "Lütfen bir üst hesap seçin."
+
+#: dialogs/knewinvestmentwizard.cpp:132
+#, fuzzy
+msgid "This wizard allows you to modify the selected security."
+msgstr "Lütfen bir üst hesap seçin."
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid ""
+"The selected symbol is already on file. Do you want to reuse the existing "
+"security?"
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:186
+#, fuzzy
+msgid "Security found"
+msgstr "Senet bulunamadı"
+
+#: dialogs/knewinvestmentwizard.cpp:309
+msgid "Unable to create all objects for the investment"
+msgstr ""
+
+#: dialogs/keditequityentrydlg.cpp:78
+msgid "Change the price information of the selected entry."
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:64 widgets/kmymoneybriefschedule.cpp:59
+msgid "&Skip"
+msgstr "&Atla"
+
+#: dialogs/kaccountselectdlg.cpp:66 widgets/kmymoneybriefschedule.cpp:61
+msgid "Skip this transaction"
+msgstr "Bu aktarımı atla"
+
+#: dialogs/kaccountselectdlg.cpp:67
+msgid ""
+"Use this to skip importing this transaction and proceed with the next one."
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:72
+msgid "Create a new account/category"
+msgstr "Yeni bir hesap/kategori oluştur"
+
+#: dialogs/kaccountselectdlg.cpp:73
+msgid "Use this to add a new account/category to the file"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:77
+msgid "&Abort"
+msgstr "&Kaldır"
+
+#: dialogs/kaccountselectdlg.cpp:79
+msgid "Abort the import operation and dismiss all changes"
+msgstr ""
+
+#: dialogs/kaccountselectdlg.cpp:80
+msgid ""
+"Use this to abort the import. Your financial data will be in the state "
+"before you started the QIF import."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:110
+msgid "Is a sub account"
+msgstr "Bir alt hesaptır"
+
+#: dialogs/knewaccountdlg.cpp:184
+#, fuzzy
+msgid "VAT account"
+msgstr "Hesap"
+
+#: dialogs/knewaccountdlg.cpp:474
+msgid ""
+"You have not specified a name.\n"
+"Please fill in this field."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:482
+msgid "Please select a parent account."
+msgstr "Lütfen bir üst hesap seçin."
+
+#: dialogs/knewaccountdlg.cpp:489 dialogs/knewaccountdlg.cpp:1029
+msgid "<No Institution>"
+msgstr "<Şirket yok>"
+
+#: dialogs/knewaccountdlg.cpp:552
+msgid ""
+"An account named <b>%1</b> already exists. You cannot create a second "
+"account with the same name."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:567
+msgid ""
+"A category named <b>%1</b> already exists. You cannot create a second "
+"category with the same name."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid ""
+"You have selected to suppress the display of unused categories in the "
+"KMyMoney configuration dialog. The category you just created will therefore "
+"only be shown if it is used. Otherwise, it will be hidden in the accounts/"
+"categories view."
+msgstr ""
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid "Hidden categories"
+msgstr "Gizli kategoriler"
+
+#: dialogs/knewaccountdlg.cpp:927 dialogs/knewaccountdlg.cpp:979
+#, c-format
+msgid "Is a sub account of %1"
+msgstr "%1 hesabının bir alt hesabı"
+
+#: dialogs/knewaccountdlg.cpp:1082
+msgid "Cannot add institution"
+msgstr "Şirket eklenemedi"
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid ""
+"This dialog does not allow to create new payees. Please pick a payee from "
+"the list."
+msgstr ""
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid "Payee creation"
+msgstr "Alacaklı oluşturma"
+
+#: dialogs/kimportdlg.cpp:69
+msgid "Use this to start the import operation"
+msgstr ""
+
+#: dialogs/kimportdlg.cpp:110
+msgid ""
+"%1|Import files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1| İçeriye aktarılan dosyalar\n"
+"%2|Tüm Dosyalar (*.*)"
+
+#: dialogs/kimportdlg.cpp:111
+msgid "Import File..."
+msgstr "İçeriye Dosya Aktar..."
+
+#: dialogs/knewloanwizard.cpp:124
+msgid "Create a new category"
+msgstr "Yeni bir kategori oluştur"
+
+#: dialogs/knewloanwizard.cpp:125
+msgid "Use this to open the new account editor"
+msgstr "Yeni hesap düzenleyiciyi açmak için bunu kullanın"
+
+#: dialogs/knewloanwizard.cpp:129
+msgid "&Additional fees..."
+msgstr "&Ek ödemeler"
+
+#: dialogs/knewloanwizard.cpp:131
+msgid "Enter additional fees"
+msgstr "Ek ödeme gir"
+
+#: dialogs/knewloanwizard.cpp:132
+msgid ""
+"Use this to add any additional fees other than principal and interest "
+"contained in your periodical payments."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:139
+msgid ""
+"Use this to create a new account to which the initial payment should be made"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:208
+msgid "To whom do you make payments?"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:209
+msgid "Payments to"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:214
+msgid "From whom do you expect payments?"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:215
+msgid "Payments from"
+msgstr "Ödemeler formu"
+
+#: dialogs/knewloanwizard.cpp:233
+msgid "Please enter the date, the first payment for this loan was/is due."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:235
+msgid ""
+"Note: Consult the loan contract for details of the first due date. Keep in "
+"mind, that the first due date usually differs from the date the contract was "
+"signed"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:240
+msgid ""
+"Please enter the original loan amount in the field below or leave it empty "
+"to be calculated."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:248
+msgid ""
+"Please enter the date, the first payment for this loan was/is due this year."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:250
+msgid ""
+"Note: You can easily figure out the date of the first payment if you consult "
+"the last statement of last year."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:254
+msgid ""
+"Please enter the remaining loan amount of last years final statement in the "
+"field below. You should not leave this field empty."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:311 dialogs/knewloanwizard.cpp:326
+#: dialogs/knewloanwizard.cpp:341 dialogs/knewloanwizard.cpp:357
+#: dialogs/knewloanwizard.cpp:373
+msgid "calculate"
+msgstr "hesapla"
+
+#: dialogs/knewloanwizard.cpp:417
+msgid "borrowed"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:419
+msgid "lend"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:423
+msgid "not assigned"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:430
+msgid "on reception"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:432
+msgid "on due date"
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:471
+msgid ""
+"The loan wizard is unable to calculate two different values for your loan at "
+"the same time. Please enter a value for the %1 on this page or backup to the "
+"page where the current value to be calculated is defined and fill in a "
+"value."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:500
+msgid ""
+"You selected, that payments have already been made towards this loan. This "
+"requires you to enter the loan amount exactly as found on your last "
+"statement."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:513
+msgid "interest rate"
+msgstr "faiz oranı"
+
+#: dialogs/knewloanwizard.cpp:522
+msgid "term"
+msgstr "dönem"
+
+#: dialogs/knewloanwizard.cpp:532
+msgid "principal and interest"
+msgstr "anapara ve faiz"
+
+#: dialogs/knewloanwizard.cpp:743
+#, c-format
+msgid ""
+"The number of payments has been decremented and the final payment has been "
+"modified to %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:751 dialogs/knewloanwizard.cpp:771
+#, c-format
+msgid "The final payment has been modified to %1."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:802
+msgid "KMyMoney has calculated a final payment of %1 for this loan."
+msgstr ""
+
+#: dialogs/knewloanwizard.cpp:817
+msgid ""
+"You have entered mis-matching information. Please backup to the appropriate "
+"page and update your figures or leave one value empty to let KMyMoney "
+"calculate it for you"
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:230
+msgid ""
+"Warning: Filtering by Category will exclude all transfers from the results."
+msgstr ""
+
+#: dialogs/kfindtransactiondlg.cpp:239
+msgid "(None)"
+msgstr "(Hiçbiri)"
+
+#: dialogs/kfindtransactiondlg.cpp:241
+msgid "Current selections: "
+msgstr "Şimdiki seçimler: "
+
+#: dialogs/kfindtransactiondlg.cpp:716
+msgid "Found %1 matching transactions (D %2 / P %3 = %4)"
+msgstr "Eşleşen %1aktarım bulundu (D %2 / P %3 = %4)"
+
+#: dialogs/kfindtransactiondlg.cpp:719
+msgid "Found %1 matching transactions"
+msgstr "Eşleşen %1aktarım bulundu"
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "The institution name field is empty. Please enter the name."
+msgstr ""
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "Adding New Institution"
+msgstr "Yeni Şirket Ekleniyor"
+
+#: dialogs/kcsvprogressdlg.cpp:69
+msgid "C&lose"
+msgstr "&Kapat"
+
+#: dialogs/kcsvprogressdlg.cpp:247
+msgid " of "
+msgstr ""
+
+#: widgets/kmymoneypriceview.cpp:126
+msgid "Commodity"
+msgstr "Mal"
+
+#: widgets/kmymoneypriceview.cpp:130
+msgid "Source"
+msgstr "Kaynak"
+
+#: widgets/kmymoneypriceview.cpp:143
+msgid "Price Options"
+msgstr "Fiyat Seçenekleri"
+
+#: widgets/kmymoneypriceview.cpp:153
+#, fuzzy
+msgid "Online Price Update..."
+msgstr "Çevrimiçi Fiyat Güncelle ..."
+
+#: widgets/kmymoneycombo.cpp:472 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+msgid "From"
+msgstr "Kimden:"
+
+#: widgets/transaction.cpp:668
+msgid "Transaction is missing a category assignment."
+msgstr ""
+
+#: widgets/transaction.cpp:671
+msgid "The transaction has a missing assignment of <b>%1</b>."
+msgstr ""
+
+#: widgets/transaction.cpp:874
+msgid "Sell"
+msgstr "Sat"
+
+#: widgets/transaction.cpp:876
+msgid "Buy"
+msgstr "Satın Al"
+
+#: widgets/kmymoneycombo.cpp:520 widgets/transaction.cpp:879
+#: widgets/transaction.cpp:1447
+msgid "Dividend"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:518 widgets/transaction.cpp:881
+#: widgets/transaction.cpp:1453
+msgid "Yield"
+msgstr ""
+
+#: widgets/transaction.cpp:886 widgets/transaction.cpp:1473
+msgid "Activity"
+msgstr "Hareketlilik"
+
+#: widgets/transaction.cpp:887
+msgid "Investment transaction"
+msgstr "Yatırım aktarımı"
+
+#: widgets/transaction.cpp:1021 widgets/transaction.cpp:1114
+#: widgets/transaction.cpp:1165
+msgid "*** UNASSIGNED ***"
+msgstr "*** ATANMAMIŞ ***"
+
+#: widgets/kmymoneycombo.cpp:517 widgets/transaction.cpp:1435
+msgid "Add shares"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:516 widgets/transaction.cpp:1438
+msgid "Remove shares"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:522 widgets/transaction.cpp:1441
+msgid "Buy shares"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:521 widgets/transaction.cpp:1444
+msgid "Sell shares"
+msgstr ""
+
+#: widgets/transaction.cpp:1450
+msgid "Reinvest Dividend"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:515 widgets/transaction.cpp:1456
+msgid "Split shares"
+msgstr ""
+
+#: widgets/transaction.cpp:1515
+msgid "Ratio"
+msgstr "Oran"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:241
+msgid "%1 Bills."
+msgstr "%1 Fatura."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:257
+msgid "%1 Deposits."
+msgstr "%1 Depozit."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:273
+msgid "%1 Transfers."
+msgstr "%1 Aktarım."
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:355
+msgid ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+msgstr ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:57
+#: widgets/kmymoneyaccounttreeforecast.cpp:84
+msgid "Current"
+msgstr "Şimdiki"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:72
+#: widgets/kmymoneyaccounttreeforecast.cpp:93
+msgid "Total variation"
+msgstr "Toplam değişim"
+
+#: widgets/stdtransactionmatched.cpp:130
+msgid ""
+"KMyMoney has matched a downloaded transaction with a manually entered one "
+"(result above)"
+msgstr ""
+
+#: widgets/stdtransactionmatched.cpp:138
+#, fuzzy
+msgid "Bank entry:"
+msgstr "Boş Belge"
+
+#: widgets/stdtransactionmatched.cpp:166
+#, fuzzy
+msgid "Your entry:"
+msgstr "Adınız Soyadınız:"
+
+#: widgets/kbudgetvalues.cpp:187
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a monthly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:187 widgets/kbudgetvalues.cpp:206
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"_: Auto assignment (caption)\n"
+"Auto assignment"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:206
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a yearly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"You have entered budget values using a different base which would result in "
+"an individual monthly budget of <b>%1</b>. Should this value be used to fill "
+"the monthly budgets?"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:62
+#, fuzzy
+msgid "Use this button to skip this transaction"
+msgstr "Pencereyi kapatmak için bu düğmeyi kullanın"
+
+#: widgets/kmymoneybriefschedule.cpp:67
+msgid "Record this transaction into the register"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:68
+msgid "Use this button to record this transaction"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:96
+msgid "%1 of %2"
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:109
+msgid "Payment on %1 for %2 with %3 transactions remaining occuring %4."
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:115
+msgid "Payment on %1 for %2 occuring %4."
+msgstr ""
+
+#: widgets/kmymoneybriefschedule.cpp:136
+msgid "%1 days overdue (%2 occurences)."
+msgstr ""
+
+#: widgets/register.cpp:55
+msgid "Post date"
+msgstr "Gönderme tarihi"
+
+#: widgets/register.cpp:56
+msgid "Date entered"
+msgstr ""
+
+#: widgets/register.cpp:60
+msgid "Entry order"
+msgstr "Girdi sıralaması"
+
+#: widgets/register.cpp:63
+msgid "Reconcile state"
+msgstr ""
+
+#: widgets/register.cpp:440
+msgid ""
+"_: Deposits onto account\n"
+"Deposits"
+msgstr "Depozitler"
+
+#: widgets/register.cpp:442
+msgid ""
+"_: Payments towards credit card\n"
+"Payments"
+msgstr "Ödemeler"
+
+#: widgets/register.cpp:446
+msgid ""
+"_: Payments made from account\n"
+"Payments"
+msgstr "Ödemeler"
+
+#: widgets/register.cpp:448
+msgid ""
+"_: Payments made with credit card\n"
+"Charges"
+msgstr ""
+
+#: widgets/register.cpp:736
+msgid ""
+"_: Payment made from account\n"
+"Payment"
+msgstr "Ödeme"
+
+#: widgets/register.cpp:737
+msgid ""
+"_: Deposit into account\n"
+"Deposit"
+msgstr "Depozit"
+
+#: widgets/register.cpp:813
+msgid ""
+"_: Payment made with credit card\n"
+"Charge"
+msgstr ""
+
+#: widgets/register.cpp:814
+msgid ""
+"_: Payment towards credit card\n"
+"Payment"
+msgstr "Ödeme"
+
+#: widgets/register.cpp:818 widgets/register.cpp:824
+msgid ""
+"_: Decrease of asset/liability value\n"
+"Decrease"
+msgstr "Azalt"
+
+#: widgets/register.cpp:819 widgets/register.cpp:823
+msgid ""
+"_: Increase of asset/liability value\n"
+"Increase"
+msgstr "Arttır"
+
+#: widgets/register.cpp:2280
+msgid "Prior transactions possibly filtered"
+msgstr ""
+
+#: widgets/register.cpp:2284
+msgid "Last reconciliation"
+msgstr "Son uzlaştırma"
+
+#: widgets/register.cpp:2291
+#, fuzzy, c-format
+msgid "Online Statement Balance: %1"
+msgstr "Yatırım değeri: %1%2"
+
+#: widgets/register.cpp:2295
+msgid "This year"
+msgstr "Bu yıl"
+
+#: widgets/kmymoneycombo.cpp:674 widgets/register.cpp:2296
+msgid "Last month"
+msgstr "Geçen ay"
+
+#: widgets/register.cpp:2297
+msgid "This month"
+msgstr "Bu ay"
+
+#: widgets/register.cpp:2298
+msgid "Last week"
+msgstr "Geçen hafta"
+
+#: widgets/register.cpp:2299
+msgid "This week"
+msgstr "Bu hafta"
+
+#: widgets/register.cpp:2300
+msgid "Yesterday"
+msgstr "Dün"
+
+#: widgets/kmymoneycombo.cpp:666 widgets/register.cpp:2301
+msgid "Today"
+msgstr "Bugün"
+
+#: widgets/register.cpp:2302 widgets/register.cpp:2307
+msgid "Future transactions"
+msgstr "Gelecekte yapılacak aktarımlar"
+
+#: widgets/register.cpp:2303
+#, fuzzy
+msgid "Next week"
+msgstr "Geçen hafta"
+
+#: widgets/kmymoneycalendar.cpp:131 widgets/register.cpp:2304
+msgid "Next month"
+msgstr "Sonraki ay"
+
+#: widgets/kmymoneycombo.cpp:670 widgets/register.cpp:2315
+msgid "Current fiscal year"
+msgstr "Bu mali yıl"
+
+#: widgets/register.cpp:2316
+msgid "Previous fiscal year"
+msgstr "Önceki mali yıl"
+
+#: widgets/register.cpp:2317
+#, fuzzy
+msgid "Next fiscal year"
+msgstr "Geçen mali yıl"
+
+#: widgets/register.cpp:2349
+msgid ""
+"_: Unknown payee\n"
+"Unknown"
+msgstr "Bilinmeyen"
+
+#: widgets/register.cpp:2368
+msgid ""
+"_: Unknown category\n"
+"Unknown"
+msgstr "Bilinmeyen"
+
+#: widgets/register.cpp:2387
+msgid ""
+"_: Unknown security\n"
+"Unknown"
+msgstr "Bilinmeyen"
+
+#: widgets/klistviewsearchline.cpp:249
+msgid "Search Columns"
+msgstr "Arama Sütunları"
+
+#: widgets/klistviewsearchline.cpp:251
+msgid "All Visible Columns"
+msgstr "Tüm Görünebilir Sütunlar"
+
+#: widgets/klistviewsearchline.cpp:266
+msgid ""
+"_: Column number %1\n"
+"Column No. %1"
+msgstr "Sütun No. %1"
+
+#: widgets/klistviewsearchline.cpp:461 widgets/registersearchline.cpp:286
+msgid "S&earch:"
+msgstr "&Ara:"
+
+#: widgets/kmymoneyaccountselector.cpp:110
+#: widgets/kmymoneyaccountselector.cpp:371
+msgid "Income categories"
+msgstr "Gelir kategorileri"
+
+#: widgets/kmymoneyaccountselector.cpp:349
+#: widgets/kmymoneyaccountselector.cpp:350
+msgid "Favorites"
+msgstr "Yer İmleri"
+
+#: widgets/kmymoneyaccountselector.cpp:357
+msgid "Asset accounts"
+msgstr "Varlık hesapları"
+
+#: widgets/kmymoneyaccountselector.cpp:364
+msgid "Liability accounts"
+msgstr "Borç hesapları"
+
+#: widgets/kmymoneyaccountselector.cpp:381
+msgid "Expense categories"
+msgstr "Gider kategorileri"
+
+#: widgets/kmymoneyaccountselector.cpp:391
+msgid "Equity accounts"
+msgstr "Özkaynak hesapları"
+
+#: widgets/kmymoneyaccounttreebase.cpp:120
+#, fuzzy
+msgid "Total Balance"
+msgstr "Bilanço"
+
+#: widgets/kmymoneyaccounttreebase.cpp:124
+#, fuzzy
+msgid "Total Value"
+msgstr "Net Değer"
+
+#: widgets/registersearchline.cpp:75
+msgid ""
+"_: label for status combo\n"
+"Stat&us"
+msgstr "&Durum"
+
+#: widgets/registersearchline.cpp:79
+msgid "Any status"
+msgstr "Herhangi bir durum"
+
+#: widgets/registersearchline.cpp:80
+msgid "Imported"
+msgstr "İçeriye aktarılmış"
+
+#: widgets/registersearchline.cpp:81
+#, fuzzy
+msgid "Matched"
+msgstr "Yamalar"
+
+#: widgets/registersearchline.cpp:82
+msgid "Erroneous"
+msgstr "Hatalı"
+
+#: widgets/registersearchline.cpp:83
+msgid "Not marked"
+msgstr "İşaretlenmemiş"
+
+#: widgets/kmymoneyaccounttree.cpp:54
+msgid ""
+"_: Column heading for category in tax report\n"
+"Tax"
+msgstr "Vergi"
+
+#: widgets/kmymoneyaccounttree.cpp:58
+msgid ""
+"_: Column heading for VAT category\n"
+"VAT"
+msgstr "VAT"
+
+#: widgets/kmymoneywizard.cpp:101
+msgid "Continue with next page"
+msgstr "Sonraki sayfa ile devam et"
+
+#: widgets/kmymoneywizard.cpp:103
+msgid "Finish wizard"
+msgstr "Sihirbazı bitir"
+
+#: widgets/kmymoneywizard.cpp:121
+msgid "&Back"
+msgstr "&Geri"
+
+#: widgets/kmymoneywizard.cpp:122
+msgid "&Next"
+msgstr "İ&leri"
+
+#: widgets/kmymoneywizard.cpp:123
+msgid "&Finish"
+msgstr "&Bitir"
+
+#: widgets/kmymoneywizard.cpp:274
+msgid "Step %1 of %2"
+msgstr "%2 adımın %1. adımı"
+
+#: widgets/kmymoneydateinput.cpp:235
+msgid ""
+"_: Enter todays date into date input widget\n"
+"T"
+msgstr "T"
+
+#: widgets/transactionform.cpp:302
+msgid "&Deposit"
+msgstr "&Depozit"
+
+#: widgets/transactionform.cpp:304 widgets/transactionform.cpp:313
+#: widgets/transactionform.cpp:323 widgets/transactionform.cpp:333
+msgid "&Transfer"
+msgstr "&Aktarım"
+
+#: widgets/transactionform.cpp:306
+msgid "&Withdrawal"
+msgstr ""
+
+#: widgets/transactionform.cpp:311
+msgid "&Payment"
+msgstr "&Ödeme"
+
+#: widgets/transactionform.cpp:315
+msgid "&Charge"
+msgstr ""
+
+#: widgets/transactionform.cpp:321 widgets/transactionform.cpp:335
+msgid "&Decrease"
+msgstr "&Azalt"
+
+#: widgets/transactionform.cpp:325 widgets/transactionform.cpp:331
+msgid "&Increase"
+msgstr "Ar&tır"
+
+#: widgets/kmymoneyscheduledcalendar.cpp:42
+msgid "Select Schedules"
+msgstr "Zamanlama Seç"
+
+#: widgets/kmymoneycalendar.cpp:108
+msgid "Select Style"
+msgstr "Biçem Seç"
+
+#: widgets/kmymoneycalendar.cpp:128
+msgid "Choose Style"
+msgstr "Biçemi Seç"
+
+#: widgets/kmymoneycalendar.cpp:129
+msgid "Next year"
+msgstr "Sonraki sene"
+
+#: widgets/kmymoneycalendar.cpp:130
+msgid "Previous year"
+msgstr "Önceki sene"
+
+#: widgets/kmymoneycalendar.cpp:132
+msgid "Previous month"
+msgstr "Önceki ay"
+
+#: widgets/kmymoneycalendar.cpp:133
+msgid "Select a week"
+msgstr "Bir hafta seçin"
+
+#: widgets/kmymoneycalendar.cpp:134
+msgid "Select a month"
+msgstr "Bir ay seçin"
+
+#: widgets/kmymoneycalendar.cpp:135
+msgid "Select a year"
+msgstr "Bir yıl seçin"
+
+#: widgets/kmymoneycalendar.cpp:249
+msgid "Week XX"
+msgstr "Hafta XX"
+
+#: widgets/kmymoneycalendar.cpp:264 widgets/kmymoneycalendar.cpp:300
+#, c-format
+msgid "Week %1"
+msgstr "Hafta %1"
+
+#: widgets/rc.cpp:1
+msgid "Account Types"
+msgstr "Hesap Tipleri"
+
+#: widgets/rc.cpp:3
+msgid "Detailed description"
+msgstr "Ayrıntılı açıklama"
+
+#: widgets/rc.cpp:18
+msgid "Period"
+msgstr "Dönem"
+
+#: widgets/rc.cpp:21
+#, fuzzy
+msgid "Individual"
+msgstr "&Kişisel"
+
+#: widgets/rc.cpp:23
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Acces to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>Recovery encryption</i> group is only accessible, if the necessary "
+"key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is "
+"found."
+msgstr ""
+
+#: widgets/rc.cpp:26
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading <i>0x</i>."
+msgstr ""
+
+#: widgets/rc.cpp:27
+msgid "User ID"
+msgstr "Kullanıcı Kimliği"
+
+#: widgets/rc.cpp:29
+msgid "Recovery encryption"
+msgstr ""
+
+#: widgets/rc.cpp:30
+msgid "Also encrypt with kmymoney-recover key"
+msgstr ""
+
+#: widgets/rc.cpp:32
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out."
+msgstr ""
+
+#: widgets/rc.cpp:51
+msgid "PriceInfo"
+msgstr "FiyatBilgisi"
+
+#: widgets/rc.cpp:52
+msgid "Report Tab"
+msgstr "Rapor Sekmesi"
+
+#: widgets/rc.cpp:53
+msgid "<p>On this tab, you set the basic properties of this report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:54
+msgid "Report Name"
+msgstr "Rapor Adı"
+
+#: widgets/rc.cpp:55
+msgid "<p>Choose a name for this report.</p>"
+msgstr "<p>Bu rapor için bir isim seçin.</p>"
+
+#: widgets/rc.cpp:57
+msgid "<p>Enter a comment to help you remember the details of this report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:58
+msgid "Convert values to base currency"
+msgstr "Değerleri temel para birimine dönüştür"
+
+#: widgets/rc.cpp:59
+msgid ""
+"_: Convert 'em!!\n"
+"<p>Select this option to convert all values in the report to your base "
+"currency.</p><p>Leave it unchecked if you'd like to see values in their "
+"original currency.</p><p>If currencies are not converted, then subtotals "
+"will not be shown.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:60
+msgid "Mark as a favorite report"
+msgstr "beğenilen rapor olarak işaretle"
+
+#: widgets/rc.cpp:61
+msgid ""
+"<p>Select this option to notate this report as one of your favorites.</"
+"p><p>All your favorite reports are grouped in one place on the report list "
+"for easy access.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:62 widgets/rc.cpp:88
+msgid "Rows/Columns Tab"
+msgstr "Satır/Sütun Sekmesi"
+
+#: widgets/rc.cpp:63 widgets/rc.cpp:89
+msgid ""
+"<p>On this tab, you configure how you'd like the rows and columns to be "
+"selected and organized.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:69 widgets/rc.cpp:81
+msgid ""
+"<p>Choose what kind of accounts to display as the rows of this report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:71
+msgid "Columns"
+msgstr "Sütunlar"
+
+#: widgets/rc.cpp:75
+msgid "Bi-Monthly"
+msgstr "İki-Aylık"
+
+#: widgets/rc.cpp:78
+msgid "<p>Choose how large of a time period each column should encompass</p>"
+msgstr ""
+
+#: widgets/rc.cpp:79
+msgid "Income & Expenses"
+msgstr "Gelir & Gider"
+
+#: widgets/rc.cpp:80
+msgid "Assets & Liabilities"
+msgstr "Varlıklar & Borçlar"
+
+#: widgets/rc.cpp:82
+msgid "Rows"
+msgstr "Satırlar"
+
+#: widgets/rc.cpp:83
+msgid "Show totals column"
+msgstr "Toplamlar sütununu göster"
+
+#: widgets/rc.cpp:84
+msgid "Average days"
+msgstr ""
+
+#: widgets/rc.cpp:85
+#, fuzzy
+msgid "Include scheduled transactions"
+msgstr "Zamanlanmış Aktarımları İçer"
+
+#: widgets/rc.cpp:86
+#, fuzzy
+msgid "Include transfers"
+msgstr "Aktarımları İçer"
+
+#: widgets/rc.cpp:87
+msgid "Include unused accounts/categories"
+msgstr "Kullanılmayan hesapları/kategorileri içer"
+
+#: widgets/rc.cpp:90
+msgid "Organize by:"
+msgstr "Buna göre düzenle:"
+
+#: widgets/rc.cpp:92
+msgid "Top Categories"
+msgstr "Üst Kategoriler"
+
+#: widgets/rc.cpp:95
+msgid "Top Accounts"
+msgstr "Üst Hesaplar"
+
+#: widgets/rc.cpp:98
+msgid "<p>Choose how to group the transactions in this report</p>"
+msgstr ""
+
+#: widgets/rc.cpp:99
+msgid "Show Columns"
+msgstr "Sütunları Göster"
+
+#: widgets/rc.cpp:100
+msgid ""
+"<p>Choose which columns should be shown in the report.</p><p>The date and "
+"transaction amount are always shown.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:102
+msgid "<p>Select this option to show the Memo column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:104
+msgid "<p>Select this option to show the Shares column for investments</p>"
+msgstr ""
+
+#: widgets/rc.cpp:106
+msgid "<p>Select this option to show the Price column for investments</p>"
+msgstr ""
+
+#: widgets/rc.cpp:108
+msgid "<p>Select this option to show the Reconciled column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:110
+msgid "<p>Select this option to show the Account column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:112
+msgid "<p>Select this option to show the Number column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:114
+msgid "<p>Select this option to show the Payee column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:116
+msgid "<p>Select this option to show the Category column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:118
+msgid "<p>Select this option to show the Action column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:120
+msgid "<p>Select this option to show the Running balance column</p>"
+msgstr ""
+
+#: widgets/rc.cpp:121
+msgid "Include only Loan accounts"
+msgstr ""
+
+#: widgets/rc.cpp:122
+msgid "Include only Investment accounts"
+msgstr "Sadece Yatırım hesaplarını içer"
+
+#: widgets/rc.cpp:123 widgets/rc.cpp:127
+msgid ""
+"<p>Check this box to include only those categories which have been marked to "
+"\"Include on Tax Reports\"</p>"
+msgstr ""
+
+#: widgets/rc.cpp:124
+msgid "Hide Split Transaction Details"
+msgstr "Ayrılmış Aktarım Ayrıntılarını Gizle"
+
+#: widgets/rc.cpp:125
+msgid ""
+"Do not display the individual transactions that make up a split transaction"
+msgstr ""
+
+#: widgets/rc.cpp:126
+msgid "Include only Tax categories"
+msgstr ""
+
+#: widgets/rc.cpp:128
+msgid "Chart Tab"
+msgstr ""
+
+#: widgets/rc.cpp:129
+msgid "<p>On this tab, you configure the chart drawn forthis report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:130
+msgid "Chart Type"
+msgstr "Çizelge Tipi"
+
+#: widgets/rc.cpp:131
+msgid "<p>Select what form you would like the chart to be drawn as.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:132
+msgid "Line"
+msgstr "Çizgi"
+
+#: widgets/rc.cpp:133
+msgid "Bar"
+msgstr "Çubuk"
+
+#: widgets/rc.cpp:134
+msgid "Stacked Bar"
+msgstr "Küme Çubukları"
+
+#: widgets/rc.cpp:135
+msgid "Pie"
+msgstr ""
+
+#: widgets/rc.cpp:136
+msgid "Ring"
+msgstr "Yuvarlak"
+
+#: widgets/rc.cpp:137
+msgid "Show grid lines"
+msgstr "Izgara çizgilerini göster"
+
+#: widgets/rc.cpp:138
+msgid ""
+"<p>Select this option to show horizontal and vertical grid lines on the "
+"chart.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:139
+msgid "Draw values on chart"
+msgstr "Çizelgeler üzerinde değerleri göster"
+
+#: widgets/rc.cpp:140
+msgid ""
+"<p>Select this option to draw the numeric values for data points next to "
+"their plot location.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:141
+msgid "Show as chart by default"
+msgstr "Öntanımlı olarak çizelge şeklinde göster"
+
+#: widgets/rc.cpp:142
+msgid ""
+"<p>Select this option to cause the report to be shown as a chart when you "
+"first open the report. Otherwise, it will come up as a text report.</p>"
+msgstr ""
+
+#: widgets/rc.cpp:143
+msgid "Line width"
+msgstr ""
+
+#: widgets/rc.cpp:144
+#, fuzzy
+msgid "<p>Select what width should be used to draw the line on the chart</p>"
+msgstr "<p>Bu rapor için bir isim seçin.</p>"
+
+#: widgets/rc.cpp:145
+msgid "ReportControl"
+msgstr "Rapor Kontrolü"
+
+#: widgets/rc.cpp:149
+msgid "Configure this report"
+msgstr "Bu raporu yapılandır"
+
+#: widgets/rc.cpp:151
+msgid "Create a new report based on this one"
+msgstr "Bu raporu temel alan yeni bir rapor oluştur"
+
+#: widgets/rc.cpp:153
+msgid "Copy this report to the clipboard"
+msgstr "Bu raporu panoya kopyala"
+
+#: widgets/rc.cpp:155
+msgid "Export this report as an HTML or CSV file"
+msgstr "Bu raporu HTML ya da CSV dosyası olarak aktar"
+
+#: widgets/rc.cpp:157
+msgid "Permanently delete this report"
+msgstr "Bu raporu kalıcı olarak sil"
+
+#: widgets/rc.cpp:159
+msgid "Close this window"
+msgstr "Pencereyi kapat"
+
+#: widgets/rc.cpp:162
+msgid "n of n"
+msgstr ""
+
+#: widgets/rc.cpp:166
+msgid "Account:"
+msgstr "Hesap:"
+
+#: widgets/rc.cpp:168
+msgid "Enter..."
+msgstr "Gir..."
+
+#: widgets/rc.cpp:171
+msgid "TransactionSortOptionDecl"
+msgstr ""
+
+#: widgets/rc.cpp:173
+msgid "Sort order"
+msgstr "Sıralama düzeni"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Sunday\n"
+"Sun"
+msgstr "Paz"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Saturday\n"
+"Sat"
+msgstr "Cts"
+
+#: widgets/kmymoneydatetbl.cpp:171 widgets/kmymoneydatetbl.cpp:178
+msgid "Week %1 for year %2."
+msgstr "%2 yılının %1. haftası."
+
+#: widgets/kmymoneycombo.cpp:417
+msgid "ATM"
+msgstr "ATM"
+
+#: widgets/kmymoneycombo.cpp:418
+msgid "Withdrawal"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:421
+msgid "Cheque"
+msgstr "Çek"
+
+#: widgets/kmymoneycombo.cpp:469
+msgid ""
+"_: Activity for expense categories\n"
+"Paid"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:470
+msgid ""
+"_: Activity for income categories\n"
+"Received"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:519
+msgid "Reinvest dividend"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:664
+msgid "All dates"
+msgstr "Tüm tarihler"
+
+#: widgets/kmymoneycombo.cpp:665
+msgid "As of today"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:667
+msgid "Current month"
+msgstr "Bu ay"
+
+#: widgets/kmymoneycombo.cpp:668
+msgid "Current quarter"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:669
+msgid "Current year"
+msgstr "Bu yıl"
+
+#: widgets/kmymoneycombo.cpp:671
+msgid "Month to date"
+msgstr "Aydan güne"
+
+#: widgets/kmymoneycombo.cpp:672
+msgid "Year to date"
+msgstr "Yıldan güne"
+
+#: widgets/kmymoneycombo.cpp:673
+msgid "Year to month"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:675
+msgid "Last year"
+msgstr "Geçen yıl"
+
+#: widgets/kmymoneycombo.cpp:676
+msgid "Last fiscal year"
+msgstr "Geçen mali yıl"
+
+#: widgets/kmymoneycombo.cpp:677
+msgid "Last 7 days"
+msgstr "Son 7 gün"
+
+#: widgets/kmymoneycombo.cpp:678
+msgid "Last 30 days"
+msgstr "Geçen 30 gün"
+
+#: widgets/kmymoneycombo.cpp:679
+msgid "Last 3 months"
+msgstr "Geçen 3 ay"
+
+#: widgets/kmymoneycombo.cpp:680
+msgid "Last quarter"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:681
+msgid "Last 6 months"
+msgstr "Geçen 6 ay"
+
+#: widgets/kmymoneycombo.cpp:682
+msgid "Last 11 months"
+msgstr "Son 11 ay"
+
+#: widgets/kmymoneycombo.cpp:683
+msgid "Last 12 months"
+msgstr "Geçen 12 ay"
+
+#: widgets/kmymoneycombo.cpp:684
+msgid "Next 7 days"
+msgstr "Sonraki 7 gün"
+
+#: widgets/kmymoneycombo.cpp:685
+msgid "Next 30 days"
+msgstr "Sonraki 30 gün"
+
+#: widgets/kmymoneycombo.cpp:686
+msgid "Next 3 months"
+msgstr "Sonraki 3 ay"
+
+#: widgets/kmymoneycombo.cpp:687
+msgid "Next quarter"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:688
+msgid "Next 6 months"
+msgstr "Sonraki 6 ay"
+
+#: widgets/kmymoneycombo.cpp:689
+msgid "Next 12 months"
+msgstr "Sonraki 12 ay"
+
+#: widgets/kmymoneycombo.cpp:690
+msgid "Last 3 months to next 3 months"
+msgstr ""
+
+#: widgets/kmymoneycombo.cpp:691
+msgid "User defined"
+msgstr "Kullanıcı tanımlı"
+
+#~ msgid "Reset"
+#~ msgstr "Sıfırla"
+
+#~ msgid "No plugins loaded"
+#~ msgstr "Hiç eklenti yüklenmedi"
+
+#~ msgid "Create schedule..."
+#~ msgstr "Zamanlama oluştur..."
+
+#~ msgid "New schedule..."
+#~ msgstr "Yeni zamanlama..."
+
+#~ msgid "Edit schedule..."
+#~ msgstr "Zamanlamayı düzenle..."
+
+#~ msgid "Delete schedule..."
+#~ msgstr "Zamanlamayı sil..."
+
+#~ msgid "Duplicate schedule"
+#~ msgstr "Zamanlamayı ikile"
+
+#~ msgid "Enter schedule..."
+#~ msgstr "Zamanlama gir..."
+
+#~ msgid "Skip schedule..."
+#~ msgstr "Zamanlamayı atla..."
+
+#, fuzzy
+#~ msgid "Adjusting schedules..."
+#~ msgstr "Zamanlamalar ayarlanıyor ..."
+
+#~ msgid "Add schedule"
+#~ msgstr "Zamanlama ekle"
+
+#~ msgid "Unable to enter transaction for schedule '%1'"
+#~ msgstr "'%1' zamanlaması için aktarım girilemedi"
+
+#~ msgid "Loaded"
+#~ msgstr "Yüklendi"
+
+#~ msgid "not loaded: %1"
+#~ msgstr "yüklenmemiş: %1"
+
+#~ msgid "Schedule options"
+#~ msgstr "Zamanlama seçenekleri"
+
+#~ msgid "New Schedule"
+#~ msgstr "Yeni Zamanlama"
+
+#~ msgid "Edit Schedule"
+#~ msgstr "Zamanlamayı Düzenle"
+
+#~ msgid "Search transactions containing the following text"
+#~ msgstr "Aşağıdaki metni içeren aktarımları ara"
+
+#~ msgid "Search"
+#~ msgstr "Ara"
+
+#~ msgid "&Search"
+#~ msgstr "&Ara"
+
+#~ msgid "Start the search"
+#~ msgstr "Aramaya başla"
+
+#~ msgid "Reset all settings"
+#~ msgstr "Tüm ayarları öntanımlı hale getir"
+
+#~ msgid ""
+#~ "Reading the bank list failed with the following error: '%1'. The console "
+#~ "output may have more information."
+#~ msgstr ""
+#~ "Banka listesini okuma işlemi şu hatayı vererek başarısız oldu: '%1'. "
+#~ "Uçbirim çıktısı daha fazla bilgi verebilir."
+
+#~ msgid "XMLPP error"
+#~ msgstr "XMLPP hatası"
+
+#, fuzzy
+#~ msgid "Disabled. No online banking services are available"
+#~ msgstr "DURUM: Pasif. Kullanılabilir çevrimiçi bankacılık servisi yok"
+
+#~ msgid "SAVINGS"
+#~ msgstr "TASARRUFLAR"
+
+#~ msgid "MONEY MARKET"
+#~ msgstr "PARA PİYASASI"
+
+#~ msgid "CREDIT CARD"
+#~ msgstr "KREDİ KARTI"
+
+#~ msgid "INVESTMENT"
+#~ msgstr "YATIRIM"
+
+#~ msgid "UNKNOWN"
+#~ msgstr "BİLİNMEYEN"
+
+#~ msgid "Selecting a SQL database"
+#~ msgstr "SQL veritabanı seçiliyor"
+
+#~ msgid "Invalid account for investments"
+#~ msgstr "Yatırımlar için geçersiz hesap"
+
+#~ msgid "Unable to import"
+#~ msgstr "İçeri aktarlamadı"
+
+#, fuzzy
+#~ msgid "Budget "
+#~ msgstr "Bütçe"
+
+#, fuzzy
+#~ msgid "Forecast "
+#~ msgstr "Tahmin"
+
+#, fuzzy
+#~ msgid "Budget Total"
+#~ msgstr "Bütçe yılı"
+
+#, fuzzy
+#~ msgid "Forecast Total"
+#~ msgstr "Tahmin"
+
+#, fuzzy
+#~ msgid "Incomes and Expenses This Month"
+#~ msgstr "Bu ayın gelir - giderleri"
+
+#, fuzzy
+#~ msgid "Incomes"
+#~ msgstr "Gelir"
+
+#, fuzzy
+#~ msgid "Schedules This Month"
+#~ msgstr "Zamanlama Bilgileri"
+
+#~ msgid "&Ok"
+#~ msgstr "&Tamam"
+
+#~ msgid "Cancel the operation"
+#~ msgstr "İşlemi iptal et"
+
+#~ msgid "Abort operation"
+#~ msgstr "İşlemi sonlandır"
+
+#~ msgid "Use this to abort the export operation"
+#~ msgstr "Dışa aktarımı iptal etmek için bunu kullanın"
+
+#~ msgid "Start the backup operation"
+#~ msgstr "Yedekleme işlemine başla"
+
+#~ msgid "Pressing this button starts the backup operation."
+#~ msgstr "Bu düğmeye basmak yedekleme işlemini başlatır."
+
+#~ msgid "Cancel the backup operation"
+#~ msgstr "Yedekleme işlemini iptal et"
+
+#~ msgid "Use this to abort the backup and to return to KMyMoney."
+#~ msgstr ""
+#~ "Yedeklemeyi iptal etmek ve KMyMoney uygulamasna dönmek için bunu kullanın."
+
+#~ msgid "Close dialog"
+#~ msgstr "Pencereyi kapat"
+
+#~ msgid "Edit ..."
+#~ msgstr "Düzenle ..."
+
+#~ msgid "Use this to accept the data."
+#~ msgstr "Verileri kabul etmek için bunu kullanın."
+
+#~ msgid "Reject all changes to the data and closes the dialog"
+#~ msgstr ""
+#~ "Verilerde yapılan tüm değişiklikleri yoksayar ve bu pencereyi kapatır"
+
+#~ msgid "Use this to reject all changes."
+#~ msgstr "Tüm değişiklikleri yoksaymak için bunu kullanın."
+
+#, fuzzy
+#~ msgid "Scan"
+#~ msgstr "T&ara"
+
+#~ msgid "Automatically create missing payees"
+#~ msgstr "Olmayan alacaklıları otomatik oluştur"
+
+#~ msgid "Create a new price information entry."
+#~ msgstr "Yeni fiyat bilgisi girdisi oluştur."
+
+#~ msgid "Reject any changes"
+#~ msgstr "Tüm değişiklikleri iptal et"
+
+#~ msgid "Accept modifications"
+#~ msgstr "Düzenlemeleri kabul et"
+
+#~ msgid "New ..."
+#~ msgstr "Yeni..."
+
+#~ msgid "S&ummary"
+#~ msgstr "&Özet"
+
+#~ msgid "Det&ail"
+#~ msgstr "&Ayrıntı"
+
+#, fuzzy
+#~ msgid "Total Incomes This Month"
+#~ msgstr "Bu ayın gelir - giderleri"
+
+#, fuzzy
+#~ msgid "Total Expenses This Month"
+#~ msgstr "Bu ayın gelir - giderleri"
+
+#~ msgid "&Create"
+#~ msgstr "&Oluştur"
+
+#, fuzzy
+#~ msgid "Co&nfigure"
+#~ msgstr "Ya&pılandır"
+
+#~ msgid "Te&xt"
+#~ msgstr "&Metin"
+
+#~ msgid "Online &Quotes"
+#~ msgstr "Çevrimiçi A&ktarımlar"
+
+#~ msgid "O&K"
+#~ msgstr "&TAMAM"
+
+#~ msgid "&Edit ..."
+#~ msgstr "&Düzenle..."
+
+#~ msgid "&Delete ..."
+#~ msgstr "&Sil..."
+
+#~ msgid "&Yearly"
+#~ msgstr "&Yıllık"
+
+#~ msgid "Advanced Institution Settings"
+#~ msgstr "Gelişmiş Şirket Ayarları"
+
+#~ msgid "OFX Direct Connect Settings"
+#~ msgstr "OFX Direkt Bağlantı Ayarları"
+
+#~ msgid "Enable OFX Direct Connect"
+#~ msgstr "OFX Direkt Bağlantısını Etkineştir"
+
+#~ msgid "FIORG"
+#~ msgstr "FIORG"
+
+#~ msgid "Commodity Editor"
+#~ msgstr "Mal Düzenleyici"
+
+#~ msgid "1/"
+#~ msgstr "1/"
+
+#~ msgid "Code"
+#~ msgstr "Kod"
+
+#~ msgid "Account Fraction"
+#~ msgstr "Hesap Bölümü"
+
+#~ msgid "Alt+O"
+#~ msgstr "Alt+O"
+
+#~ msgid "Alt+C"
+#~ msgstr "Alt+C"
+
+#~ msgid "Online Banking"
+#~ msgstr "Çevrimiçi Bankacılık"
+
+#~ msgid "Setup..."
+#~ msgstr "Ayarla..."
+
+#~ msgid "BANK/BROKER: &lt;Not configured&gt;"
+#~ msgstr "BANKA/KOMİSYONCU:&lt;Yapılandırılmamış&gt;"
+
+#~ msgid "STATUS: Account not configured"
+#~ msgstr "DURUM: Hesap yapılandırılmamış"
+
+#~ msgid "R"
+#~ msgstr "R"
+
+#~ msgid "Column 1"
+#~ msgstr "Sütun 1"
+
+#~ msgid "Transaction History"
+#~ msgstr "Aktarım Geçmişi"
+
+#~ msgid "Personal Information"
+#~ msgstr "Kişisel Bilgiler"
+
+#~ msgid "TextLabel2"
+#~ msgstr "MetinEtiketi2"
+
+#~ msgid "YTD:"
+#~ msgstr "YTD:"
+
+#~ msgid "TextLabel4"
+#~ msgstr "MetinEtiketi4"
+
+#~ msgid "Online update using OFX..."
+#~ msgstr "OFX kullanarak çevrimiçi güncelleme..."
+
+#~ msgid "Match Transaction..."
+#~ msgstr "Aktarım Eşle..."
+
+#~ msgid "Match With This Transaction"
+#~ msgstr "Bu Aktarım ile Eşle"
+
+#~ msgid "Imported Data Warnings"
+#~ msgstr "İçeriye Aktarılmış Veri Uyarısı"
+
+#~ msgid "Unable to import <b>%1</b> file. There is no such plugin loaded."
+#~ msgstr ""
+#~ "<b>%1</b> dosyası içeri aktarılamadı. Bu dosyaya göre bir eklenti yok."
+
+#~ msgid "Function not available"
+#~ msgstr "İşlev kullanılamaz durumda"
+
+#~ msgid "Edit an account"
+#~ msgstr "Bir hesap düzenle"
+
+#~ msgid "%1 (Plugin)..."
+#~ msgstr "%1 (Eklenti)..."
+
+#~ msgid "GnuCash Importer"
+#~ msgstr "GnuCash İçeri Aktarıcısı"
+
+#~ msgid "Forecast view"
+#~ msgstr "Tahmin görünümü"
+
+#~ msgid "AppTest"
+#~ msgstr "UygulamaTesti"
+
+#~ msgid "Open Configuration Dialog"
+#~ msgstr "Yapılandırma Penceresini Aç"
+
+#~ msgid "Use this to accept the data and possibly update the exchange rate"
+#~ msgstr ""
+#~ "Veriyi kabul etmek ve dönüşüm oranını güncellemek için bunu kullanın."
+
+#~ msgid "Please enter the payment amount."
+#~ msgstr "Lütfen ödeme miktarını girin."
+
+#~ msgid "Please enter the schedule name."
+#~ msgstr "Lütfen çizelge adını girin."
+
+#~ msgid "Please enter the payee name."
+#~ msgstr "Lütfen alıcı adını girin."
+
+#~ msgid "Please select the account."
+#~ msgstr "Lütfen hesabı seçin."
+
+#~ msgid "Write Check"
+#~ msgstr "Çek yaz"
+
+#~ msgid "Payee changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Alacaklı değiştirildi. Eskisi: \"%1\", Yenisi: \"%2\""
+
+#~ msgid "Category changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Kategori değiştirildi. Eskisi: \"%1\", Yenisi: \"%2\""
+
+#~ msgid "Memo changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Not değiştirildi. Eskisi: \"%1\", Yenisi: \"%2\""
+
+#~ msgid "Amount changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "Tutar değiştirildi. Eskisi: \"%1\", Yenisi: \"%2\""
+
+#~ msgid "Open online help"
+#~ msgstr "Çevrimiçi yardımı aç"
+
+#~ msgid "Cancel the import operation"
+#~ msgstr "İçeri aktarma işlemini iptal et"
+
+#~ msgid "Verify cancel"
+#~ msgstr "İptal İşlemini Onayla"
+
+#~ msgid "Mount Point:"
+#~ msgstr "Bağlanma Noktası:"
+
+#~ msgid "textLabel2"
+#~ msgstr "metinEtiketi2"
+
+#~ msgid "Edit Scheduled Transfer"
+#~ msgstr "Planlanmış Aktarımı Düzenle"
+
+#~ msgid "From:"
+#~ msgstr "Kimden:"
+
+#~ msgid "To:"
+#~ msgstr "Kime:"
+
+#~ msgid "Amount:"
+#~ msgstr "Tutar:"
+
+#~ msgid "Category:"
+#~ msgstr "Kategori:"
+
+#~ msgid "Memo:"
+#~ msgstr "Not:"
+
+#~ msgid "<b>Name:</b>"
+#~ msgstr "<b>İsim:</b>"
+
+#~ msgid "<b>Type:</b>"
+#~ msgstr "<b>Tip:</b>"
+
+#~ msgid "<b>Payee:</b>"
+#~ msgstr "<b>Alacaklı:</b>"
+
+#~ msgid "<b>Category:</b>"
+#~ msgstr "<b>Kategori:</b>"
+
+#~ msgid "<b>Memo:</b>"
+#~ msgstr "<b>Not:</b>"
+
+#~ msgid ""
+#~ "_: <b>To (account):</b>\n"
+#~ "<b>To:</b>"
+#~ msgstr "<b>Kime:</b>"
+
+#~ msgid "<b>Date:</b>"
+#~ msgstr "<b>Tarih:</b>"
+
+#~ msgid "<b>Amount:</b>"
+#~ msgstr "<b>Tutar:</b>"
+
+#~ msgid "Until today"
+#~ msgstr "Bugüne kadar"
+
+#~ msgid "Equity-Symbol:"
+#~ msgstr "Eşitlik-Simgesi:"
+
+#~ msgid "New Account"
+#~ msgstr "Yeni Hesap"
+
+#~ msgid "Institution Selection"
+#~ msgstr "Şirket Seçimi"
+
+#~ msgid "<u>I</u>nstitution"
+#~ msgstr "<u>Ş</u>irket"
+
+#~ msgid "Account Type Selection"
+#~ msgstr "Hesap Tipi Seçimi"
+
+#~ msgid "What is the account number?"
+#~ msgstr "Hesap numarası nedir?"
+
+#~ msgid "What is the currency of this account?"
+#~ msgstr "Bu hesabın para birimi nedir?"
+
+#~ msgid "&Price"
+#~ msgstr "&Fiyat"
+
+#~ msgid "Account Payment"
+#~ msgstr "Hesap Ödemesi"
+
+#~ msgid "Account with that name already exists."
+#~ msgstr "Bu ismi kullanan bir hesap zaten var."
+
+#~ msgid "Category with that name already exists."
+#~ msgstr "Bu ismi kullanan bir kategori zaten var."
+
+#~ msgid "Edit Transfer Schedule"
+#~ msgstr "Aktarım Çizelgesini Düzenle"
+
+#~ msgid "Verify category type"
+#~ msgstr "Kategori tipini doğrula"
+
+#~ msgid "Bill or Transfer"
+#~ msgstr "Fatura ya da Aktarım"
+
+#~ msgid "General settings"
+#~ msgstr "Genel ayarlar"
+
+#~ msgid "Equity/Currency/Value options"
+#~ msgstr "Eşitlik/Para Birimi/Değer Seçenekleri"
+
+#~ msgid "Use the normal institution view"
+#~ msgstr "Normal şirket görünümünü kullan"
+
+#~ msgid "Use the new accounts view"
+#~ msgstr "Yeni hesap görünümünü kullan"
+
+#~ msgid "Restrict by date"
+#~ msgstr "Tarihe göre sınırla"
+
+#~ msgid "Restrict by transaction state"
+#~ msgstr "Aktarım durumuna göre sınırla"
+
+#~ msgid "Data Encryption Settings"
+#~ msgstr "Veri Şifreleme Ayarları"
+
+#~ msgid "List view colour :"
+#~ msgstr "Liste görünümü renleri :"
+
+#~ msgid ""
+#~ "Do you really want to select %1 as your base currency? This selection can "
+#~ "currently not be modified! If unsure, press 'No' now."
+#~ msgstr ""
+#~ "Temel para birimi olarak %1 seçmek istediğinizden emin misiniz? Bu seçim "
+#~ "şimdilik değiştirilemez! Emin değilseniz 'Hayır' düğmesine tıklayın."
+
+#~ msgid "There is no user manual yet"
+#~ msgstr "Henüz bir kullanıcı yardım dosyası yok"
+
+#~ msgid "Bill Options"
+#~ msgstr "Fatura Seçenekleri"
+
+#~ msgid "New Bill..."
+#~ msgstr "Yeni Fatura..."
+
+#~ msgid "New Deposit..."
+#~ msgstr "Yeni Depozit..."
+
+#~ msgid "Unable to modify type"
+#~ msgstr "Tip değiştirilemedi"
+
+#~ msgid "&Check"
+#~ msgstr "&Çek"
+
+#~ msgid "AT&M"
+#~ msgstr "A&TM"
+
+#~ msgid "Account Options"
+#~ msgstr "Hesap Seçeekleri"
+
+#~ msgid "Account Details ..."
+#~ msgstr "Hesap Detayları ..."
+
+#~ msgid "Mark as ..."
+#~ msgstr "Farklı işaretle ..."
+
+#~ msgid "Move to account ..."
+#~ msgstr "Hesaba taşı ..."
+
+#~ msgid "Type, number"
+#~ msgstr "Tip, numara"
+
+#~ msgid "New Account..."
+#~ msgstr "Yeni Hesap..."
+
+#~ msgid "KMyMoney Options"
+#~ msgstr "KMyMoney Seçenekleri"
+
+#~ msgid "Really delete this institution: "
+#~ msgstr "Şirket gerçekten silinsin mi: "
+
+#~ msgid "Cannot delete institution: "
+#~ msgstr "Şirket silinemedi: "
+
+#~ msgid "Cannot delete account: "
+#~ msgstr "Hesap silinemedi: "
+
+#~ msgid "Create new KMyMoney file"
+#~ msgstr "Yeni bir KMyMoney dosyası oluştur"
+
+#~ msgid "Cannot edit personal data"
+#~ msgstr "Kişisel bilgiler düzenlenemedi"
+
+#~ msgid "*.dat|Account templates"
+#~ msgstr "*.dat|Hesap Şablonları"
+
+#~ msgid "Loading default accounts"
+#~ msgstr "Öntanımlı hesaplar yükleniyor"
+
+#~ msgid "Ready"
+#~ msgstr "Hazır"
+
+#~ msgid "Unknown Account"
+#~ msgstr "Bilinmeyen Hesap"
+
+#~ msgid "1 Week %"
+#~ msgstr "1 Hafta %"
+
+#~ msgid "4 Weeks %"
+#~ msgstr "4 Hafta %"
+
+#~ msgid "3 Months %"
+#~ msgstr "3 Ay %"
+
+#~ msgid "YTD %"
+#~ msgstr "YTD %"
+
+#~ msgid "On-line Price Update ..."
+#~ msgstr "Çevrimiçi Fiyat Güncelleme ..."
+
+#~ msgid "Symbol Name"
+#~ msgstr "Sembol Adı"
+
+#~ msgid "&Account Details"
+#~ msgstr "&Hesap Detayları"
+
+#~ msgid "&Reconcile ..."
+#~ msgstr "&Uyumlaştır ..."
+
+#~ msgid "Add price info"
+#~ msgstr "Fiyat bilgisi ekle"
+
+#~ msgid "Update price info"
+#~ msgstr "Fiyat bilgisi güncelle"
+
+#~ msgid "Stock security"
+#~ msgstr "Stok güvenliği"
+
+#~ msgid "&Postpone"
+#~ msgstr "&Erteleme"
+
+#~ msgid "Open the account dialog"
+#~ msgstr "Hesap penceresini aç"
+
+#~ msgid "New payee..."
+#~ msgstr "Yeni alacaklı..."
+
+#~ msgid "Cannot edit category: "
+#~ msgstr "Kategori düzenlenemedi: "
+
+#~ msgid "Add new account..."
+#~ msgstr "Yeni hesap ekle..."
+
+#~ msgid ""
+#~ "The next dialog allows you to add predefined account/category templates "
+#~ "to the new file. Different languages are available to select from. You "
+#~ "can skip loading any template now by selecting <b>Cancel</b> from the "
+#~ "next dialog. If you wish to add more templates later, you can restart "
+#~ "this operation by selecting <b>File/Import/Account Templates</b>."
+#~ msgstr ""
+#~ "Sonraki pencere oluşturacağınız dosyaya önceden belirlenen hesap /"
+#~ "kategori şablonlarını eklemenizi sağlayacak. Seçmek için farklı dillerde "
+#~ "şablonlar var. Bu aşamayı <b>Atla</b> düğmesine tıklayarak sonraki "
+#~ "aşamaya geçebilirsiniz. Daha sonra şablon eklemek isterseniz <b>Dosya/"
+#~ "İçeri Aktar/Hesap Şablonları</b> yolunu takip edebilirsiniz."
+
+#~ msgid ""
+#~ "*.kmy|KMyMoney files\n"
+#~ "*.xml|XML Files\n"
+#~ "*.ANON.xml|Anonymous Files\n"
+#~ "*.*|All files"
+#~ msgstr ""
+#~ "*.kmy|KMyMoney dosyası\n"
+#~ "*.xml|XML Dosyası\n"
+#~ "*.ANON.xml|Anonim Dosyalar\n"
+#~ "*.*|Tüm Dosyalar"
+
+#~ msgid "*.kmt|Account templates"
+#~ msgstr "*.kmt|Hesap şablonları"
+
+#~ msgid "Select account template(s)"
+#~ msgstr "Hesap şablonu seç"
+
+#~ msgid "&Bills/Deposits"
+#~ msgstr "&Faturalar/Depozitler"
+
+#~ msgid "&Reports"
+#~ msgstr "&Raporlar"
+
+#~ msgid "Cannot move account"
+#~ msgstr "Hesap taşınamaz"
+
+#~ msgid "Unable to add category"
+#~ msgstr "Kategori eklenemedi"
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644
index 0000000..8413c76
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,14637 @@
+# translation of kmymoney2.po to Simplified Chinese
+# translation of kmymoney2.po to
+#
+# Roy Qu <quh@thunis.com>, 2007.
+# Roy Qu <royqh1979@gmail.com>, 2007, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmymoney2\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-25 19:04+0200\n"
+"PO-Revision-Date: 2008-11-12 09:14+0800\n"
+"Last-Translator: Roy Qu <royqh1979@gmail.com>\n"
+"Language-Team: Chinese Simplified <kde-i18n-doc@lists.kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 0.3\n"
+"X-Poedit-Language: Chinese\n"
+"X-Poedit-Country: CHINA\n"
+"X-Poedit-SourceCharset: utf-8\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: wizards/wizardpages/rc.cpp:1
+msgid ""
+"Select groups of accounts that correspond to the ways that you will use "
+"KMyMoney. Each group you select will cause several accounts and categories "
+"to be created. Select the groups that are relevant to you. You can always "
+"create additional accounts manually later."
+msgstr ""
+"选择与你要使用KMyMoeny的方式对应的账户组。你选择的每个组都会导致一些账户和交"
+"易类别被创建。选择对你有用的组。你之后可以随时创建额外的账户。"
+
+#: wizards/wizardpages/rc.cpp:2
+msgid ""
+"<p>KMyMoney supports multiple currencies, nevertheless one of them will be "
+"used as your base currency. The base currency is used as default for new "
+"accounts and reports. Please select the base currency from the following "
+"list."
+msgstr ""
+"<p>KMyMoney支持多项货币单位,但其中需要有一项作为基本货币单位。基本货币单位将"
+"被用作新账户和报表的缺省单位。请从下面的列表中选择基本货币。"
+
+#: dialogs/kequitypriceupdatedlg.cpp:71 dialogs/rc.cpp:399 dialogs/rc.cpp:485
+#: dialogs/rc.cpp:724 dialogs/settings/rc.cpp:108 reports/listtable.cpp:226
+#: views/kinvestmentview.cpp:71 views/kpayeesview.cpp:351 views/rc.cpp:13
+#: widgets/rc.cpp:5 widgets/rc.cpp:34
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1599
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1629
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1673
+#: wizards/wizardpages/rc.cpp:3
+msgid "Name"
+msgstr "名称"
+
+#: wizards/wizardpages/rc.cpp:4
+msgid "ISO Code"
+msgstr "ISO编号"
+
+#: dialogs/kequitypriceupdatedlg.cpp:69 dialogs/kequitypriceupdatedlg.cpp:70
+#: dialogs/rc.cpp:71 dialogs/rc.cpp:725 dialogs/settings/rc.cpp:112
+#: views/kinvestmentview.cpp:72 widgets/rc.cpp:37 wizards/wizardpages/rc.cpp:5
+msgid "Symbol"
+msgstr "代号"
+
+#: wizards/wizardpages/rc.cpp:6
+msgid ""
+"<p>Use the fields below to enter some information about yourself.</p>\n"
+"\n"
+"<p>All information is optional and only used to personalize your KMyMoney "
+"file.</p>"
+msgstr ""
+"<p>使用下面的各项来输入关于您本人的信息。</p>\n"
+"\n"
+"<p>所有的信息都可以不填,它们仅用来个性化您自己的KMyMoney文件。</p>"
+
+#: dialogs/rc.cpp:425 wizards/newuserwizard/rc.cpp:27
+#: wizards/wizardpages/rc.cpp:7
+msgid "Town:"
+msgstr "所在城市:"
+
+#: dialogs/rc.cpp:420 wizards/newuserwizard/rc.cpp:22
+#: wizards/wizardpages/rc.cpp:8
+msgid "County/State:"
+msgstr "省/直辖市:"
+
+#: dialogs/rc.cpp:391 dialogs/rc.cpp:421 wizards/newuserwizard/rc.cpp:23
+#: wizards/wizardpages/rc.cpp:9
+msgid "Street:"
+msgstr "街道:"
+
+#: dialogs/rc.cpp:422 wizards/newuserwizard/rc.cpp:24
+#: wizards/wizardpages/rc.cpp:10
+msgid "Email:"
+msgstr "电子邮件:"
+
+#: dialogs/rc.cpp:424 wizards/newuserwizard/rc.cpp:26
+#: wizards/wizardpages/rc.cpp:11
+msgid "Telephone:"
+msgstr "电话:"
+
+#: dialogs/rc.cpp:423 wizards/newuserwizard/rc.cpp:25
+#: wizards/wizardpages/rc.cpp:12
+msgid "Your name:"
+msgstr "您的姓名:"
+
+#: dialogs/rc.cpp:427 wizards/newuserwizard/rc.cpp:29
+#: wizards/wizardpages/rc.cpp:13
+msgid "Load from Addressbook"
+msgstr "从地址簿中载入"
+
+#: dialogs/rc.cpp:392 dialogs/rc.cpp:426 views/rc.cpp:68
+#: wizards/wizardpages/rc.cpp:14
+msgid "Postal Code:"
+msgstr "邮政编码:"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:82
+msgid "KMyMoney New Account Setup"
+msgstr "KMYMoney新账户设置"
+
+#: dialogs/rc.cpp:360 dialogs/rc.cpp:361 reports/listtable.cpp:230
+#: wizards/newaccountwizard/knewaccountwizard.cpp:83
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1616
+#: wizards/newaccountwizard/rc.cpp:61
+msgid "Institution"
+msgstr "金融机构"
+
+#: dialogs/investactivities.cpp:198 dialogs/investactivities.cpp:286
+#: dialogs/investactivities.cpp:367 dialogs/kfindtransactiondlg.cpp:181
+#: dialogs/rc.cpp:139 dialogs/rc.cpp:192 dialogs/rc.cpp:207
+#: dialogs/transactioneditor.cpp:734 reports/listtable.cpp:201
+#: reports/pivottable.cpp:1336 reports/pivottable.cpp:1586
+#: views/kforecastview.cpp:393 views/kgloballedgerview.cpp:175
+#: views/khomeview.cpp:418 views/khomeview.cpp:491 views/khomeview.cpp:525
+#: views/khomeview.cpp:764 views/khomeview.cpp:967 views/khomeview.cpp:1437
+#: views/kscheduledview.cpp:71 views/rc.cpp:17 views/rc.cpp:44
+#: widgets/kmymoneyaccounttreebase.cpp:58
+#: widgets/kmymoneyaccounttreeforecast.cpp:41 widgets/rc.cpp:109
+#: widgets/register.cpp:566 widgets/transaction.cpp:978
+#: widgets/transaction.cpp:1535
+#: wizards/newaccountwizard/knewaccountwizard.cpp:84
+msgid "Account"
+msgstr "账户"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:85
+msgid "Broker"
+msgstr "经纪人"
+
+#: dialogs/kfindtransactiondlg.cpp:225 dialogs/rc.cpp:70 dialogs/rc.cpp:104
+#: dialogs/rc.cpp:159 dialogs/rc.cpp:223 dialogs/rc.cpp:246 dialogs/rc.cpp:751
+#: dialogs/settings/rc.cpp:109 widgets/rc.cpp:35 widgets/register.cpp:568
+#: wizards/newaccountwizard/knewaccountwizard.cpp:86
+msgid "Details"
+msgstr "详细信息"
+
+#: dialogs/knewloanwizard.cpp:636 dialogs/rc.cpp:231 dialogs/rc.cpp:608
+#: kmymoneyutils.cpp:191 views/khomeview.cpp:399
+#: wizards/newaccountwizard/knewaccountwizard.cpp:87
+#: wizards/newaccountwizard/knewaccountwizard.cpp:880
+msgid "Payments"
+msgstr "支付"
+
+#: dialogs/investactivities.cpp:195 dialogs/investactivities.cpp:283
+#: dialogs/investactivities.cpp:422 dialogs/investtransactioneditor.cpp:217
+#: reports/listtable.cpp:221 widgets/transaction.cpp:1565
+#: wizards/newaccountwizard/knewaccountwizard.cpp:88
+msgid "Fees"
+msgstr "费用"
+
+#: dialogs/rc.cpp:624 views/khomeview.cpp:415 views/khomeview.cpp:488
+#: views/khomeview.cpp:522 wizards/newaccountwizard/knewaccountwizard.cpp:89
+msgid "Schedule"
+msgstr "时间表"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:90
+msgid "Payout"
+msgstr "支出"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:91
+msgid "Parent Account"
+msgstr "父账户"
+
+#: dialogs/rc.cpp:719 wizards/newaccountwizard/knewaccountwizard.cpp:92
+#: wizards/newuserwizard/knewuserwizard.cpp:86
+msgid "Finish"
+msgstr "完成"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:248
+msgid "Credit card payment"
+msgstr "信用卡偿还"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:264
+#, c-format
+msgid "Loan payment for %1"
+msgstr "来自%1的贷款支付"
+
+#: mymoney/mymoneyscheduled.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:279
+msgid "Loan payment"
+msgstr "还贷"
+
+#: dialogs/rc.cpp:134 wizards/newaccountwizard/knewaccountwizard.cpp:293
+msgid "Amortization"
+msgstr "分期付款额"
+
+#: dialogs/investactivities.cpp:196 dialogs/investactivities.cpp:284
+#: dialogs/investactivities.cpp:366 dialogs/investactivities.cpp:423
+#: dialogs/investtransactioneditor.cpp:227 dialogs/rc.cpp:135
+#: dialogs/rc.cpp:152 dialogs/rc.cpp:544 reports/listtable.cpp:222
+#: widgets/transaction.cpp:1597
+#: wizards/newaccountwizard/knewaccountwizard.cpp:302
+msgid "Interest"
+msgstr "利息"
+
+#: dialogs/kcurrencycalculator.cpp:282
+#: wizards/newaccountwizard/knewaccountwizard.cpp:351
+#: wizards/newaccountwizard/knewaccountwizard.cpp:356
+msgid "User"
+msgstr "用户"
+
+#: kmymoneyutils.cpp:64 mymoney/mymoneyaccount.cpp:711
+#: reports/querytabletest.cpp:422
+#: wizards/newaccountwizard/knewaccountwizard.cpp:451
+msgid "Checking"
+msgstr "活期账户"
+
+#: kmymoneyutils.cpp:66 mymoney/mymoneyaccount.cpp:714
+#: wizards/newaccountwizard/knewaccountwizard.cpp:452
+msgid "Savings"
+msgstr "储蓄账户"
+
+#: kmymoneyutils.cpp:68 mymoney/mymoneyaccount.cpp:717
+#: reports/querytabletest.cpp:423
+#: wizards/newaccountwizard/knewaccountwizard.cpp:453
+msgid "Credit Card"
+msgstr "信用卡账户"
+
+#: kmymoneyutils.cpp:70 mymoney/mymoneyaccount.cpp:720
+#: wizards/newaccountwizard/knewaccountwizard.cpp:454
+msgid "Cash"
+msgstr "现金账户"
+
+#: kmymoneyutils.cpp:72 mymoney/mymoneyaccount.cpp:723
+#: wizards/newaccountwizard/knewaccountwizard.cpp:455
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+msgid "Loan"
+msgstr "贷款账户"
+
+#: kmymoneyutils.cpp:76 mymoney/mymoneyaccount.cpp:729
+#: wizards/newaccountwizard/knewaccountwizard.cpp:456
+msgid "Investment"
+msgstr "投资账户"
+
+#: converter/mymoneytemplate.cpp:178 converter/mymoneytemplate.cpp:179
+#: dialogs/knewaccountdlg.cpp:1014 kmymoneyutils.cpp:80
+#: mymoney/mymoneyaccount.cpp:735 views/kaccountsview.cpp:352
+#: views/kmymoneyview.cpp:765 widgets/kmymoneyaccountselector.cpp:177
+#: widgets/kmymoneyaccountselector.cpp:356
+#: wizards/newaccountwizard/knewaccountwizard.cpp:457
+msgid "Asset"
+msgstr "资产"
+
+#: converter/mymoneytemplate.cpp:182 converter/mymoneytemplate.cpp:183
+#: dialogs/knewaccountdlg.cpp:1016 kmymoneyutils.cpp:82
+#: mymoney/mymoneyaccount.cpp:738 views/kaccountsview.cpp:356
+#: views/kmymoneyview.cpp:766 widgets/kmymoneyaccountselector.cpp:178
+#: widgets/kmymoneyaccountselector.cpp:363
+#: wizards/newaccountwizard/knewaccountwizard.cpp:458
+msgid "Liability"
+msgstr "负债"
+
+#: converter/mymoneytemplate.cpp:194 converter/mymoneytemplate.cpp:195
+#: kmymoneyutils.cpp:94 mymoney/mymoneyaccount.cpp:756
+#: views/kaccountsview.cpp:369 views/kmymoneyview.cpp:769
+#: widgets/kmymoneyaccountselector.cpp:181
+#: widgets/kmymoneyaccountselector.cpp:390
+#: wizards/newaccountwizard/knewaccountwizard.cpp:460
+msgid "Equity"
+msgstr "权益"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+msgid ""
+"Please make sure to enter the correct conversion for the selected opening "
+"date. If you requested an online quote it might be provided for a different "
+"date."
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:555
+#, fuzzy
+msgid "Check date"
+msgstr "活期账户"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:562
+msgid "1 %1 equals %2"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:577
+msgid "Conversion rate is not positive"
+msgstr ""
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:583
+msgid "No account name supplied"
+msgstr "未提供账户名"
+
+#: dialogs/keditscheduledlg.cpp:114 mymoney/mymoneyscheduled.cpp:1026
+#: wizards/newaccountwizard/knewaccountwizard.cpp:680
+msgid "Write check"
+msgstr "手写支票"
+
+#: dialogs/keditscheduledlg.cpp:111 mymoney/mymoneyscheduled.cpp:1014
+#: wizards/newaccountwizard/knewaccountwizard.cpp:682
+msgid "Direct debit"
+msgstr "直接提款"
+
+#: dialogs/keditscheduledlg.cpp:113 mymoney/mymoneyscheduled.cpp:1032
+#: wizards/newaccountwizard/knewaccountwizard.cpp:683
+msgid "Bank transfer"
+msgstr "银行转账"
+
+#: dialogs/keditscheduledlg.cpp:112 mymoney/mymoneyscheduled.cpp:1029
+#: wizards/newaccountwizard/knewaccountwizard.cpp:685
+msgid "Standing order"
+msgstr "定期支付指示"
+
+#: dialogs/keditscheduledlg.cpp:110 mymoney/mymoneyscheduled.cpp:1020
+#: wizards/newaccountwizard/knewaccountwizard.cpp:686
+msgid "Manual deposit"
+msgstr "手工存款"
+
+#: dialogs/keditscheduledlg.cpp:109 mymoney/mymoneyscheduled.cpp:1017
+#: wizards/newaccountwizard/knewaccountwizard.cpp:687
+msgid "Direct deposit"
+msgstr "直接存款"
+
+#: dialogs/keditscheduledlg.cpp:115 mymoney/mymoneyscheduled.cpp:1023
+#: wizards/newaccountwizard/knewaccountwizard.cpp:688
+msgid "Other"
+msgstr "其它"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:697
+msgid "CreditCard %1 monthly payment"
+msgstr "信用卡%1的月度偿还"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:703
+msgid "Finish entry and create account"
+msgstr "完成条目并创建账户"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:705
+msgid "Finish entry and create account and schedule"
+msgstr "完成条目并创建账户和交易计划"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:708
+msgid "Next due date is prior to opening date"
+msgstr "下次到期日早于开户日"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:712
+msgid "No account selected"
+msgstr "未选择账户"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:716
+msgid "No amount for payment selected"
+msgstr "未选择支付账户"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:720
+msgid "No payee for payment selected"
+msgstr "未选择收/付款人"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:724
+msgid "No name assigned for schedule"
+msgstr "未提供交易计划名"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:805
+msgid "No payee supplied"
+msgstr "未提供收/付款人"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:819
+msgid "No opening balance supplied"
+msgstr "未提供开户余额"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:826
+msgid "An interest change can only happen after the first payment"
+msgstr "只能在首次偿还后修改利息"
+
+#: dialogs/knewloanwizard.cpp:615 dialogs/knewloanwizard.cpp:634
+#: wizards/newaccountwizard/knewaccountwizard.cpp:884
+#: wizards/newaccountwizard/rc.cpp:55
+msgid "Months"
+msgstr "年"
+
+#: dialogs/knewloanwizard.cpp:616 dialogs/knewloanwizard.cpp:635
+#: wizards/newaccountwizard/knewaccountwizard.cpp:885
+#: wizards/newaccountwizard/knewaccountwizard.cpp:889
+#: wizards/newaccountwizard/rc.cpp:56
+msgid "Years"
+msgstr "年"
+
+#: dialogs/knewloanwizard.cpp:711
+#: wizards/newaccountwizard/knewaccountwizard.cpp:961
+#, c-format
+msgid "KMyMoney has calculated the amount of the loan as %1."
+msgstr "KMyMoney计算出此贷款的金额为%1。"
+
+#: dialogs/knewloanwizard.cpp:718
+#: wizards/newaccountwizard/knewaccountwizard.cpp:968
+msgid "KMyMoney has calculated the interest rate to %1%."
+msgstr "KMyMoney计算出利率为%1%。"
+
+#: dialogs/knewloanwizard.cpp:731
+#: wizards/newaccountwizard/knewaccountwizard.cpp:981
+msgid ""
+"KMyMoney has calculated a periodic payment of %1 to cover principal and "
+"interest."
+msgstr "KMyMoney计算出每期本金和利息合计需要偿还%1。"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:993
+#, c-format
+msgid ""
+"The number of payments has been decremented and the balloon payment has been "
+"modified to %1."
+msgstr "偿还次数已经减少,因此尾款(最后一期偿还)金额相应修改为%1。"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1001
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1021
+#, c-format
+msgid "The balloon payment has been modified to %1."
+msgstr "尾款(最后一期偿还)金额已修改为%1。"
+
+#: dialogs/knewloanwizard.cpp:763
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1013
+msgid "KMyMoney has calculated the term of your loan as %1. "
+msgstr "KMyMoney计算出您贷款的帐期为%1。"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1052
+msgid "KMyMoney has calculated a balloon payment of %1 for this loan."
+msgstr "KMyMoney算出此贷款尾款(最后一期偿还)额为%1。"
+
+#: dialogs/knewloanwizard.cpp:809
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1059
+msgid "KMyMoney has successfully verified your loan information."
+msgstr "您的贷款信息已通过KMyMoney验证。"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1067
+msgid ""
+"You have entered mis-matching information. Please modify your figures or "
+"leave one value empty to let KMyMoney calculate it for you"
+msgstr ""
+"您输入了不一致的信息。请返回并修改对应的数字或者将其留空,让KMyMoney自动为您"
+"计算。"
+
+#: dialogs/knewloanwizard.cpp:504 dialogs/knewloanwizard.cpp:513
+#: dialogs/knewloanwizard.cpp:522 dialogs/knewloanwizard.cpp:532
+#: dialogs/knewloanwizard.cpp:820
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1070
+msgid "Calculation error"
+msgstr "计算错误"
+
+#: dialogs/knewloanwizard.cpp:824
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1074
+msgid ""
+"\n"
+"\n"
+"Accept this or modify the loan information and recalculate."
+msgstr ""
+"\n"
+"\n"
+"接受此输入或者修改贷款信息,并重新计算。"
+
+#: dialogs/knewloanwizard.cpp:826
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1076
+msgid "Calculation successful"
+msgstr "计算成功"
+
+#: dialogs/knewloanwizard.cpp:846
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1129
+#, c-format
+msgid ""
+"_n: one month\n"
+"%n months"
+msgstr ""
+"_n: 一个月\n"
+"%n 个月"
+
+#: dialogs/knewloanwizard.cpp:850
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1133
+#, c-format
+msgid ""
+"_n: one year\n"
+"%n years"
+msgstr ""
+"_n: 一年\n"
+"%n 年"
+
+#: dialogs/knewloanwizard.cpp:854
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1137
+#, c-format
+msgid ""
+"_n: one payment\n"
+"%n payments"
+msgstr ""
+"_n: 一次支付\n"
+"%n 次支付"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1190
+msgid "Press Calculate to verify the values"
+msgstr "按“计算”来验证这些值"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1194
+msgid "Not all details supplied"
+msgstr "未提供全部详细信息"
+
+#: dialogs/kaccountselectdlg.cpp:70 dialogs/knewloanwizard.cpp:122
+#: dialogs/knewloanwizard.cpp:136
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1381
+msgid "&Create..."
+msgstr "新建(&C)..."
+
+#: dialogs/knewloanwizard.cpp:138
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1383
+msgid "Create a new asset account"
+msgstr "创建一个新资产账户"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1384
+msgid ""
+"If the asset account does not yet exist, press this button to create it."
+msgstr "如果固定资产账户尚未存在,按此按钮可以创建它。"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1596
+msgid "Account information"
+msgstr "账户信息"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1601
+#: wizards/newaccountwizard/rc.cpp:59
+msgid "Subaccount of"
+msgstr "...的子账户"
+
+#: dialogs/rc.cpp:225 dialogs/rc.cpp:326 dialogs/rc.cpp:371 dialogs/rc.cpp:723
+#: plugins/ofximport/dialogs/rc.cpp:23 reports/listtable.cpp:225
+#: widgets/kmymoneyaccounttreebase.cpp:113 widgets/register.cpp:61
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1604
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1606
+msgid "Type"
+msgstr "类型"
+
+#: dialogs/kcurrencyeditdlg.cpp:62 dialogs/rc.cpp:56 dialogs/rc.cpp:59
+#: dialogs/rc.cpp:75 dialogs/rc.cpp:727 dialogs/rc.cpp:792
+#: kmymoneyutils.cpp:84 kmymoneyutils.cpp:111 mymoney/mymoneyaccount.cpp:741
+#: mymoney/mymoneysecurity.cpp:169 reports/listtable.cpp:233
+#: widgets/kmymoneypriceview.cpp:127
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1607
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1630
+#: wizards/newaccountwizard/rc.cpp:6 wizards/newaccountwizard/rc.cpp:24
+msgid "Currency"
+msgstr "货币"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1608
+#: wizards/newaccountwizard/rc.cpp:7 wizards/newuserwizard/rc.cpp:9
+msgid "Opening date"
+msgstr "开户日期"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1610
+#: wizards/newaccountwizard/rc.cpp:9
+#, fuzzy
+msgid "Conversion rate"
+msgstr "利率"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1613
+#: wizards/newaccountwizard/rc.cpp:15 wizards/newuserwizard/rc.cpp:13
+msgid "Opening balance"
+msgstr "开户余额"
+
+#: dialogs/keditscheduledlg.cpp:507 dialogs/transactioneditor.cpp:784
+#: dialogs/transactioneditor.cpp:848 plugins/ofximport/dialogs/rc.cpp:22
+#: widgets/rc.cpp:111 widgets/register.cpp:59 widgets/transaction.cpp:998
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1618
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1632
+msgid "Number"
+msgstr "编号"
+
+#: dialogs/rc.cpp:365 wizards/newaccountwizard/knewaccountwizard.cpp:1621
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1634
+#: wizards/newaccountwizard/rc.cpp:26 wizards/newaccountwizard/rc.cpp:66
+msgid "IBAN"
+msgstr "IBAN"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1627
+msgid "Brokerage Account"
+msgstr "托管账户"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1640
+msgid "Loan information"
+msgstr "贷款信息"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1643
+msgid "Amount borrowed"
+msgstr "借入金额"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1645
+msgid "Amount lent"
+msgstr "借出金额"
+
+#: dialogs/rc.cpp:515 dialogs/rc.cpp:546
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1647
+#: wizards/newaccountwizard/rc.cpp:75
+msgid "Interest rate"
+msgstr "利率"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1648
+msgid "Interest rate is"
+msgstr "利率是"
+
+#: dialogs/rc.cpp:509 dialogs/rc.cpp:572
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1649
+msgid "Principal and interest"
+msgstr "本金和利息"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1650
+#: wizards/newaccountwizard/rc.cpp:90
+msgid "Additional fees"
+msgstr "附加费用"
+
+#: dialogs/rc.cpp:525 wizards/newaccountwizard/knewaccountwizard.cpp:1651
+#: wizards/newaccountwizard/rc.cpp:44
+msgid "Payment frequency"
+msgstr "支付频率"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1652
+#: wizards/newaccountwizard/rc.cpp:105
+msgid "Payment account"
+msgstr "偿还账户"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1655
+msgid "Payout information"
+msgstr "支出信息"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1658
+msgid "Refinance"
+msgstr "再筹款"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1661
+msgid "Transfer amount to"
+msgstr "转账到"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1663
+msgid "Transfer amount from"
+msgstr "转账来源"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1665
+msgid "Payment date"
+msgstr "支付日期"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1671
+msgid "Schedule information"
+msgstr "交易计划信息"
+
+#: reports/listtable.cpp:228
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1684
+msgid "Occurence"
+msgstr "发生"
+
+#: mymoney/mymoneyscheduled.cpp:891 mymoney/mymoneyscheduled.cpp:947
+#: mymoney/mymoneyscheduled.cpp:1283 mymoney/mymoneyscheduletest.cpp:1343
+#: widgets/rc.cpp:19 widgets/rc.cpp:74
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1676
+msgid "Monthly"
+msgstr "每月"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1677
+msgid "Paid from"
+msgstr "支付来源"
+
+#: widgets/kmymoneycombo.cpp:473 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1678
+msgid "Pay to"
+msgstr "付给"
+
+#: dialogs/investactivities.cpp:197 dialogs/investactivities.cpp:285
+#: dialogs/investactivities.cpp:365 dialogs/kfindtransactiondlg.cpp:197
+#: dialogs/kmymoneysplittable.cpp:80 dialogs/rc.cpp:51 dialogs/rc.cpp:212
+#: reports/listtable.cpp:197 views/khomeview.cpp:421 views/khomeview.cpp:494
+#: views/khomeview.cpp:528 views/kscheduledview.cpp:73 views/rc.cpp:63
+#: widgets/register.cpp:58 widgets/transaction.cpp:1055
+#: widgets/transaction.cpp:1578 widgets/transaction.cpp:1610
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1679
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1685
+msgid "Amount"
+msgstr "金额"
+
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1680
+#: wizards/newaccountwizard/knewaccountwizard.cpp:1686
+msgid "First payment due"
+msgstr "第一次支付到期日:"
+
+#: dialogs/rc.cpp:102 wizards/newaccountwizard/knewaccountwizard.cpp:1681
+#: wizards/newaccountwizard/rc.cpp:115
+msgid "Payment method"
+msgstr "偿还方式"
+
+#: wizards/newaccountwizard/rc.cpp:1
+msgid ""
+"This page summarizes the data you have entered. Press <b>Finish</b> to "
+"create the account, schedules, etc. or use <b>Back</b> to modify your "
+"entries."
+msgstr ""
+"本页摘要报告了你输入的数据。按<b>完成</b>来创建账户,交易计划等等。或者按<b>"
+"返回</b>以修改之前的输入。"
+
+#: wizards/newaccountwizard/rc.cpp:2
+msgid "Item"
+msgstr "项目"
+
+#: dialogs/rc.cpp:110 dialogs/rc.cpp:165 dialogs/rc.cpp:252 dialogs/rc.cpp:757
+#: dialogs/rc.cpp:818 views/kinvestmentview.cpp:74 widgets/register.cpp:574
+#: wizards/newaccountwizard/rc.cpp:3
+msgid "Value"
+msgstr "价值"
+
+#: wizards/newaccountwizard/rc.cpp:4
+msgid ""
+"Enter the name of the account under which it is known within KMyMoney.\n"
+"Select the type for the new account. Use the <b>What's this?</b> feature to "
+"see more details about the various account types.\n"
+"Enter the date the account was opened and its currency."
+msgstr ""
+"输入此账户的名称。在KMyMoney中将用该名称来称呼此账户。 \n"
+"为新账户选择类型。使用<b>这是什么</b>特性来查看各种账户类型的详细 信息。\n"
+"输入账户开户的日期及其货币种类。"
+
+#: wizards/newaccountwizard/rc.cpp:5
+msgid "Select the currency in which this account is denominated."
+msgstr "选择此账户使用的货币类型"
+
+#: wizards/newaccountwizard/rc.cpp:8
+msgid ""
+"The opening balance is the balance of the account when you start using it "
+"with KMyMoney. For new accounts this is usually 0 but for existing accounts "
+"this may well differ. Please consult the account statements to figure out "
+"this value. The opening balance is to be provided in the currency of the "
+"account as selected with the currency button."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:10
+msgid ""
+"The opening date would be the date of the last statement. In case you want "
+"to keep track of transactions prior to this date, enter the ending balance "
+"and statement date of a prior statement and add all following transactions "
+"into KMyMoney.\n"
+"<br>\n"
+"<i>Note</i>: If you do not know the exact amount of the opening balance, "
+"enter an estimate. You can change this value later before you reconcile this "
+"account for the first time."
+msgstr ""
+"开户日期应是上期对帐单的日期。如果您需要对此次对帐前的交易进行管理,则需要输"
+"入之前某次对帐的期末余额,并输入之后的全部交易。\n"
+"<br>\n"
+"<i>注意</i>:如果您不清楚开户余额的确切数值,可以输入一个预测值。您可以在首次"
+"对帐前对此金额进行调整。"
+
+#: dialogs/rc.cpp:52 dialogs/rc.cpp:54 dialogs/rc.cpp:57 dialogs/rc.cpp:60
+#: dialogs/rc.cpp:748 dialogs/rc.cpp:749 dialogs/rc.cpp:768 widgets/rc.cpp:6
+#: widgets/rc.cpp:7 widgets/rc.cpp:8 widgets/rc.cpp:9 widgets/rc.cpp:10
+#: widgets/rc.cpp:11 widgets/rc.cpp:12 widgets/rc.cpp:13 widgets/rc.cpp:14
+#: widgets/rc.cpp:15 widgets/rc.cpp:16 widgets/rc.cpp:17
+#: wizards/newaccountwizard/rc.cpp:11 wizards/newaccountwizard/rc.cpp:88
+#: wizards/newaccountwizard/rc.cpp:91 wizards/newaccountwizard/rc.cpp:93
+#: wizards/newuserwizard/rc.cpp:14
+msgid "xxx"
+msgstr "xxx"
+
+#: wizards/newaccountwizard/rc.cpp:12
+msgid "Account type"
+msgstr "账户类型"
+
+#: wizards/newaccountwizard/rc.cpp:13
+msgid ""
+"For foreign currencies an initial conversion rate needs to be provided. This "
+"should be the price of the foreign currency in the base currency on the "
+"opening date of the account."
+msgstr ""
+
+#: wizards/newaccountwizard/rc.cpp:14
+msgid "Account name"
+msgstr "账户名称"
+
+#: wizards/newaccountwizard/rc.cpp:16
+msgid ""
+"<p><b>Checking</b>\n"
+"Use the checking account type to manage activities on your checking account "
+"e.g. payments, checks and cash card purchases.</p>\n"
+"\n"
+"<p><b>Savings</b>\n"
+"Use the savings account type to manage activities on your savings account.</"
+"p>\n"
+"\n"
+"<p><b>Credit Card</b>\n"
+"Use the credit card account type to manage activities on your credit card.</"
+"p>\n"
+"\n"
+"<p><b>Cash</b>\n"
+"\n"
+"Use the cash account type to manage activities in your wallet.</p>\n"
+"\n"
+"<p><b>Loan</b>\n"
+"Use the loan account type to manage amortization loans (e.g. mortgages, car "
+"loan, money you lend, private loans etc.).</p>\n"
+"\n"
+"<p><b>Investment</b>\n"
+"Use the investment account to manage your stock, mutual fund and other "
+"investments.</p>\n"
+"\n"
+"<p><b>Asset</b>\n"
+"Use the asset account type to manage assets (e.g. your house, car or art "
+"collection).</p>\n"
+"\n"
+"<p><b>Liability</b>\n"
+"Use the liability account type to manage any type of liability except "
+"amortization loans. Use it for taxes you owe or money you borrowed from "
+"friends. For amortization loans like mortgages you should create a loan "
+"account.</p>"
+msgstr ""
+"<p><b>活期</b>\n"
+"使用活期账户类型来管理您的活期账户中的活动,如支票、现金卡购买等。</p>\n"
+"\n"
+"<p><b>储蓄</b>\n"
+"使用储蓄账户类型来管理您的储蓄账户中的活动。</p>\n"
+"\n"
+"<p><b>信用卡</b>\n"
+"使用信用卡账户类型来管理您的信用卡活动。</p>\n"
+"\n"
+"<p><b>现金</b>\n"
+"\n"
+"使用现金账户类型来管理您钱包里的活动。</p>\n"
+"\n"
+"<p><b>贷款</b>\n"
+"使用贷款账户类型来管理分期贷款(如抵押贷款,房款,私人贷款等)。</p>\n"
+"\n"
+"<p><b>投资</b>\n"
+"使用投资账户类型来管理您的股票,共同基金及其他投资。</p>\n"
+"\n"
+"<p><b>固定资产</b>\n"
+"使用固定资产账户类型来管理固定资产(如您的房产,汽车或艺术品收藏等)。</p>\n"
+"\n"
+"<p><b>负债</b>\n"
+"使用负债账户类型来管理除分期贷款外的任何债务。用它来处理你欠的税或者你向朋友"
+"借的钱。 对于房贷之类的分期贷款,您应该使用贷款账户来管理。</p>"
+
+#: wizards/newaccountwizard/rc.cpp:17
+msgid "Preferred account"
+msgstr "设为偏好账户"
+
+#: wizards/newaccountwizard/rc.cpp:18
+msgid ""
+"Mark this checkbox if the account should be maintained as preferred account"
+msgstr "如果想将此账户设为偏好账户,请选中此复选框"
+
+#: wizards/newaccountwizard/rc.cpp:19
+msgid ""
+"Selecting the <b>Preferred Account</b> checkbox will allow preferred access "
+"in some dialogs and views of KMyMoney."
+msgstr ""
+"选中<b>“设为偏好账户”</b>复选框,将允许在某些对话框和视图中对该账户进行偏好访"
+"问。"
+
+#: wizards/newaccountwizard/rc.cpp:20
+msgid "Enter a name under which this account is known within KMyMoney."
+msgstr "输入该交易的名称"
+
+#: wizards/newaccountwizard/rc.cpp:21
+#, fuzzy
+msgid "Online quote"
+msgstr "在线报价"
+
+#: wizards/newaccountwizard/rc.cpp:22
+msgid ""
+"Does this investment account have a brokerage account?<p>\n"
+"\n"
+"<b>Check</b> the mark if this investment account has an associated account "
+"for money that is not invested.<br>\n"
+"\n"
+"<b>Uncheck</b> it if you don't use this account for active stock brokerage. "
+"You should also uncheck it if this account is not maintained by a bank or "
+"broker."
+msgstr ""
+"此投资账户是否有一个对应的托管账户?<p>\n"
+"<b>选中</b>该项,如果此投资账户有一个对应的账户用于保存未投资资金。<br>\n"
+"\n"
+"<b>不选</b>该项,如果您不用此账户来管理活跃的股票投资代理。 如果此账户并未被"
+"银行或者经纪人托管,也不选该选。"
+
+#: wizards/newaccountwizard/rc.cpp:23
+msgid "Create brokerage account"
+msgstr "创建托管账户"
+
+#: wizards/newaccountwizard/rc.cpp:25 wizards/newaccountwizard/rc.cpp:64
+msgid "Account number"
+msgstr "账户号码"
+
+#: wizards/newaccountwizard/rc.cpp:27
+msgid ""
+"Please select the required options. Please use the <b>What's this?</b> "
+"feature to see more information about the items."
+msgstr ""
+"请选择必须的选项。请使用<b>这是什么</b>特性来查看关于这些项目的详细信息。"
+
+#: wizards/newaccountwizard/rc.cpp:28
+msgid "What is the type of the loan?"
+msgstr "此贷款的类型是什么?"
+
+#: dialogs/rc.cpp:481 wizards/newaccountwizard/rc.cpp:29
+msgid "I am borrowing money"
+msgstr "我从外面借入金钱"
+
+#: dialogs/rc.cpp:482 wizards/newaccountwizard/rc.cpp:30
+msgid "I am lending money"
+msgstr "我向外借出金额 "
+
+#: wizards/newaccountwizard/rc.cpp:31
+msgid "Who is the payee/payer of the loan?"
+msgstr "此贷款的付款人/收款人是谁?"
+
+#: wizards/newaccountwizard/rc.cpp:32
+msgid ""
+"Enter the name of the person or bank you owe money or who owes you money.\n"
+"\n"
+"If the name does not exist within KMyMoney's database, you are asked if you "
+"want to create it."
+msgstr ""
+"输入您欠钱或者欠您钱的银行或人名。\n"
+"\n"
+"如果在KMyMoney的数据库中尚不存在该名称,将会询问您是否要创建它。"
+
+#: wizards/newaccountwizard/rc.cpp:33
+msgid "Did you make/receive any payments yet?"
+msgstr "你是否已收到/付出了任何偿还支付?"
+
+#: wizards/newaccountwizard/rc.cpp:36
+msgid ""
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?\n"
+"\n"
+"Note: Payments made to obtain the loan (e.g. Disagio) are not considered as "
+"payments in this context."
+msgstr ""
+"不管是否已输入KMyMoney,此贷款之前是否已经偿还了一部分?\n"
+"\n"
+"说明:这里不考虑为了获取该贷款而发生的交易。"
+
+#: wizards/newaccountwizard/rc.cpp:37
+msgid "Which payments do you want to record?"
+msgstr "你想要记录那些支付交易?"
+
+#: wizards/newaccountwizard/rc.cpp:38
+msgid "All payments"
+msgstr "群不支付"
+
+#: wizards/newaccountwizard/rc.cpp:39
+msgid "Start with this year's payments"
+msgstr "以本年的支付开始"
+
+#: wizards/newaccountwizard/rc.cpp:40
+msgid ""
+"<qt>Select which transactions should be recorded.\n"
+"\n"
+"<b>All payments</b> allows you to enter all payments made for this loan.\n"
+"\n"
+"The option to <b>start from the beginning of the current year</b> is meant "
+"for loans that are active for a longer period of time already and you don't "
+"want to enter all transactions of the past.\n"
+"</qt>"
+msgstr ""
+"<qt>选择哪些交易将被记录。\n"
+"\n"
+"<b>全部偿还</b> 允许你输入此贷款的全部偿还支付交易。\n"
+"\n"
+"选项“<b>从今年年初开始</b>”用于已经持续了一段比较长的时间,并且你不想输入过去"
+"全部交易记录的贷款。\n"
+"</qt>"
+
+#: wizards/newaccountwizard/rc.cpp:41
+msgid "Balance before start of recording"
+msgstr "在记录开始前的余额"
+
+#: wizards/newaccountwizard/rc.cpp:42
+msgid ""
+"Enter the ending balance found on the statement that is the last one before "
+"you want to start recording this loan in KMyMoney."
+msgstr ""
+"输入此贷款在你想要开始在KMyMoney中记录的日期前,最后一张对账单上的期末余额。"
+
+#: wizards/newaccountwizard/rc.cpp:43
+msgid ""
+"You have selected to record only payments from the beginning of this year. "
+"Since prior transactions will not be recorded, you need to supply the "
+"balance of the loan on January 1st of this year."
+msgstr ""
+"您已经选择只记录从今年开始的偿还支付。既然过去的交易将不会被记录,你需要提供"
+"今年1月1日时此贷款的余额"
+
+#: wizards/newaccountwizard/rc.cpp:45
+msgid "Interest Compounding frequency"
+msgstr "利息复合频率"
+
+#: wizards/newaccountwizard/rc.cpp:46
+msgid ""
+"Select the frequency with which the interest is compounded. If uncertain, "
+"select the same as the payment frequency. Consult your loan contract for "
+"details."
+msgstr ""
+"选择利息复合的频率。如果不清楚,就选择与偿还同样的频率。详细信息请参考您的贷"
+"款合同。"
+
+#: wizards/newaccountwizard/rc.cpp:47
+msgid "Due date of first payment to be recorded"
+msgstr "第一次要记录的偿还支付到期日。"
+
+#: wizards/newaccountwizard/rc.cpp:48
+msgid ""
+"Depending on the answer to <b>What do you want to record?</b> this field "
+"means the following:<p>\n"
+"\n"
+"<b>All payments</b><br>\n"
+"Enter the due date of the very first payment<p>\n"
+"\n"
+"<b>Start with this year's payments</b><br>\n"
+"Enter the due date of the first payment in the current year"
+msgstr ""
+"根据对问题“您希望记录什么”的回答不同,此项的含义如下:<p>\n"
+"\n"
+"<b>所有支付</b><br>\n"
+"输入第一次偿还支付的到期日<p>\n"
+"\n"
+"<b>从今年的支付开始</b><br>\n"
+"输入今年第一偿还支付的到期日"
+
+#: wizards/newaccountwizard/rc.cpp:49
+msgid "Type of interest rate"
+msgstr "利息类型"
+
+#: wizards/newaccountwizard/rc.cpp:50
+msgid "Fixed"
+msgstr "固定部分"
+
+#: wizards/newaccountwizard/rc.cpp:51
+msgid "Variable"
+msgstr "可变部分"
+
+#: wizards/newaccountwizard/rc.cpp:52
+msgid "Time between interest changes"
+msgstr "利率变化时间间隔"
+
+#: dialogs/knewloanwizard.cpp:613 wizards/newaccountwizard/rc.cpp:53
+msgid "Days"
+msgstr "天"
+
+#: dialogs/knewloanwizard.cpp:614 wizards/newaccountwizard/rc.cpp:54
+msgid "Weeks"
+msgstr "周"
+
+#: wizards/newaccountwizard/rc.cpp:57
+msgid "Next interest change is due"
+msgstr "下次利率变化到期"
+
+#: wizards/newaccountwizard/rc.cpp:58
+msgid "This page allows you to select the parent account."
+msgstr "在本页可以选择一个父账户。"
+
+#: wizards/newaccountwizard/rc.cpp:60
+msgid ""
+"If this account is managed by an institution please select the institution "
+"from the list. If the institution does not exist yet, please choose the "
+"<b>New Institution</b> button to create it. Otherwise, leave this field "
+"empty.\n"
+"Enter the account number used by the institution to identify the account."
+msgstr ""
+"如果这个账户被某金融机构管理,请从列表中选择该金融机构。 如果此金融机构尚不存"
+"在,请使用<b>新建金融机构</b>按钮来创建它。 否则,请保持此项为空白。 \n"
+"输入金融机构用来标识该账户的账号。"
+
+#: wizards/newaccountwizard/rc.cpp:62
+msgid "Select the institution which manages this account or leave empty"
+msgstr "选择管理此帐户的金融机构,或者留为空白。"
+
+#: wizards/newaccountwizard/rc.cpp:63
+msgid "New Institution"
+msgstr "新建金融机构"
+
+#: wizards/newaccountwizard/rc.cpp:65
+msgid ""
+"Accounts managed by an institution are usually referenced by a unique number "
+"the so called account number. Enter that number here.\n"
+"\n"
+"KMyMoney currently uses this number only for some online banking functions."
+msgstr ""
+"金融机构管理的帐户通常使用一个称为帐户号码(账号)的唯一的号码来标识。在这里"
+"输入那个号码。\n"
+"\n"
+"目前KMyMoney只用这个号码来实现一些网银功能。"
+
+#: wizards/newaccountwizard/rc.cpp:67
+msgid "Enter the International Bank Account Number into this field"
+msgstr "在本项填入国际银行帐号(IBAN)"
+
+#: wizards/newaccountwizard/rc.cpp:68
+msgid ""
+"You can enter the IBAN (International Bank Account Number) into this field "
+"if you know it. Usually, people at your institution can tell you the number "
+"or it is printed on your statements.\n"
+"\n"
+"See also http://en.wikipedia.org/wiki/International_Bank_Account_Number for "
+"more information.\n"
+"\n"
+"KMyMoney keeps this field only for documentation purposes and does not use "
+"it otherwise."
+msgstr ""
+"如果你知道此帐户的国际银行帐号(IBAN),请在此项输入。一般,可以询问银行的柜"
+"员,或者从对账单中找到。\n"
+"\n"
+"详细信息参见 http://en.wikipedia.org/wiki/"
+"International_Bank_Account_Number 。\n"
+"\n"
+"KMyMoney只将此项用于文档用途。"
+
+#: wizards/newaccountwizard/rc.cpp:69
+msgid ""
+"Now enter the details for your loan. You can leave one of the fields empty "
+"and KMyMoney will calculate it when you press the <b>Calculate</b> button. "
+"Before you can continue with the next page you also need to press "
+"<b>Calculate</b> so that KMyMoney can check the logical correctness of the "
+"values you have supplied."
+msgstr ""
+"现在输入你的贷款的详细信息。你可以将这些项目中的其中一项留空,让KMyMoney在你"
+"按<b>计算</b>按钮后自动计算。在继续下一页前,你也需要按<b>计算</b>钮,让"
+"KMyMoney检验你输入的各项数值是否逻辑正确。"
+
+#: wizards/newaccountwizard/rc.cpp:70
+msgid "The interest rate gets calculated"
+msgstr "利率已被计算"
+
+#: wizards/newaccountwizard/rc.cpp:71
+msgid "when the payment is received"
+msgstr "当收到此笔支付时"
+
+#: wizards/newaccountwizard/rc.cpp:72
+msgid "when the payment is due"
+msgstr "此支付到期时"
+
+#: dialogs/rc.cpp:531 dialogs/rc.cpp:533 wizards/newaccountwizard/rc.cpp:73
+msgid "Loan amount"
+msgstr "贷款金额"
+
+#: wizards/newaccountwizard/rc.cpp:74
+msgid ""
+"Enter the amount of the loan in this field. If you want to calculate this "
+"field out of the other parameters, please leave it empty. If the field is "
+"marked as required (colored background) you have informed KMyMoney about the "
+"fact that there were already some payments towards the loan. In this case, "
+"please enter the ending balance of your last statement."
+msgstr ""
+"在此项中输入贷款金额。如果你想要通过其它参数计算该项,那么就将它留空。如果该"
+"项目被标为必须(彩色背景),那么说明你已经在KMyMoeny中输入过关于该贷款的偿还"
+"交易。在那种情况下,请输入你最后一期对帐单的期末余额。"
+
+#: wizards/newaccountwizard/rc.cpp:76
+msgid ""
+"Please enter the interest rate in percent or leave the field empty to "
+"calculate it."
+msgstr "请输入利率(百分比),或者留空让KMymoney自动计算。"
+
+#: dialogs/rc.cpp:559 wizards/newaccountwizard/rc.cpp:77
+msgid "Term"
+msgstr "期限"
+
+#: wizards/newaccountwizard/rc.cpp:78
+msgid ""
+"Please enter the term of this loan or enter 0 to calculate it. The term is "
+"the time that is required to fully repay the loan. This time might be "
+"different from the time your loan contract is signed for."
+msgstr ""
+"请输入此贷款的期限,或者输入0以自动计算。所谓“贷款的期限”,是指彻底还清此贷款"
+"所需的时间。这个时间可能与您的贷款合同中所签署的日期有所差异。"
+
+#: wizards/newaccountwizard/rc.cpp:79
+msgid "Payment (principal and interest)"
+msgstr "偿还额(本金和利息)"
+
+#: wizards/newaccountwizard/rc.cpp:80
+msgid ""
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"请输入您需要偿还的本金和利息金额,或者留为空白以让KMymoney自动计算它们。"
+
+#: wizards/newaccountwizard/rc.cpp:81
+msgid "Balloon payment"
+msgstr "尾款"
+
+#: wizards/newaccountwizard/rc.cpp:82
+msgid ""
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr "请输入最后一笔分期偿还的金额,或者留空以自动计算它。"
+
+#: wizards/newaccountwizard/rc.cpp:83
+msgid "Calculate"
+msgstr "计算"
+
+#: wizards/newaccountwizard/rc.cpp:84
+msgid "Press this button to calculate/verify your loan details."
+msgstr "按此按钮以计算/检验你的贷款详细信息。"
+
+#: wizards/newaccountwizard/rc.cpp:85
+msgid ""
+"Pressing this button calculates a possibly missing parameter for your loan "
+"or verifies that the values entered match. If something is not correct you "
+"will receive information about it."
+msgstr ""
+"按此按钮计算你的贷款信息中缺少的参数,或者验证输入的参数彼此匹配。如果输入中"
+"有错,你将会收到关于它的信息。"
+
+#: wizards/newaccountwizard/rc.cpp:86
+msgid ""
+"Now enter the information required for the periodic loan payments. If your "
+"regular payments contains any additional fees, click on the <b>Additional "
+"fees</b> button to enter them."
+msgstr ""
+"现在输入分期偿还需要的信息。。 如果您的定期支付中包含任何附加费用,按<b>附加"
+"费用</b>钮以输入它们。"
+
+#: wizards/newaccountwizard/rc.cpp:87
+msgid "Principal + Interest"
+msgstr "本金+利息"
+
+#: dialogs/rc.cpp:620 wizards/newaccountwizard/rc.cpp:89
+msgid "+"
+msgstr "+"
+
+#: wizards/newaccountwizard/rc.cpp:92
+msgid "= periodical payments"
+msgstr "= 定期支付"
+
+#: dialogs/rc.cpp:643 wizards/newaccountwizard/rc.cpp:94
+msgid ""
+"If this loan is for an asset, such as a car or a house, you can create the "
+"asset account now. An asset account represents the total value of an asset. "
+"The money from this loan will be transfered into the asset account you "
+"create or select.\n"
+"If this loan is a 'consumer loan' (money to use however you want), you can "
+"use a checking account instead."
+msgstr ""
+"如果此贷款是用于购买固定资产,如汽车或者房屋等,您现在可以同时创建相应的资产"
+"账户。 \n"
+"资产账户代表某项资产的总值。此次贷款的金额将会转入您新建或指定的资产账户中。"
+"如果此次贷款是消费性贷款(提取现金或购买消费品),您应该使用活期账户来记录此"
+"次贷款。"
+
+#: dialogs/rc.cpp:644 wizards/newaccountwizard/rc.cpp:95
+msgid "Don't create payout transaction"
+msgstr "不为支出建立交易记录。"
+
+#: wizards/newaccountwizard/rc.cpp:96
+msgid "Refinance existing loan"
+msgstr "为现有的贷款再筹钱"
+
+#: wizards/newaccountwizard/rc.cpp:97
+msgid ""
+"Check this if you are refinancing a loan that already exists in KMyMoney"
+msgstr "选中此项,如果你为一项已在KMyMoney中存在的贷款再筹款。"
+
+#: dialogs/rc.cpp:642 wizards/newaccountwizard/rc.cpp:98
+msgid "Asset Account"
+msgstr "资产账户"
+
+#: dialogs/rc.cpp:2 wizards/newaccountwizard/rc.cpp:99
+msgid "Create"
+msgstr "新建"
+
+#: wizards/newaccountwizard/rc.cpp:100
+msgid "Loan account"
+msgstr "贷款账户"
+
+#: dialogs/rc.cpp:646 wizards/newaccountwizard/rc.cpp:101
+msgid "Date of payment"
+msgstr "支付日期"
+
+#: wizards/newaccountwizard/rc.cpp:102
+msgid ""
+"KMyMoney creates a schedule for this payment and reminds you whenever a "
+"payment must be made. Please select the account to/from which payments will "
+"be made and the category the interest will be assigned to.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"KMyMoney将会为此偿还支付建立一个交易计划项,并当支付到期时提醒您处理。 请选择"
+"此支付的来源/目的账户,以及利息所属的交易类别。<p>\n"
+"如果你选择记录所有交易,那么直接使用自动填入的日期即可。 如果你选择只记录今年"
+"开始的交易,那么<b>首次支付到期日</b>中应该填写 今年第一次支付的日期。"
+
+#: dialogs/rc.cpp:613 wizards/newaccountwizard/rc.cpp:103
+msgid "Interest category"
+msgstr "利息类别"
+
+#: wizards/newaccountwizard/rc.cpp:104
+msgid ""
+"The category the interest part of the payment will be assigned to. If you "
+"borrow money you usually have to pay interest, so this should be an expense "
+"category. If you lend the money, you receive the interest. In this case, "
+"select an income category here."
+msgstr ""
+"偿还支付中的利息部分将被指定的交易类别。如果你借钱,那么通常需要支付利息,所"
+"以这应该是一项消费的类别。如果你借出钱,即收到利息,那么这应该是一项收入的类"
+"别。"
+
+#: wizards/newaccountwizard/rc.cpp:106
+msgid ""
+"Select the account from which you make your periodical payments or where you "
+"receive regular payments in case you lend the money. In most cases, this is "
+"a checking account."
+msgstr ""
+"选择你定期偿还支付的来源帐户;或者在你借给别人钱时,接收他人支付的目的帐户。"
+"大多数情况下,这应该是一个活期帐户。"
+
+#: dialogs/rc.cpp:519 wizards/newaccountwizard/rc.cpp:107
+msgid "First payment due on"
+msgstr "第一次支付到期日:"
+
+#: wizards/newaccountwizard/rc.cpp:108
+msgid ""
+"For credit card accounts you can create a monthly schedule which will "
+"automatically remind you about the payment. Please fill in the details about "
+"this payment here."
+msgstr ""
+"对于信用卡帐户,你可以创建一个每月的交易计划来自动提醒你偿还。请在这里输入关"
+"于偿还的详细信息。"
+
+#: wizards/newaccountwizard/rc.cpp:109
+msgid "Yes, remind me when the payment is due"
+msgstr "是的,当支付到期时提醒我。"
+
+#: wizards/newaccountwizard/rc.cpp:110
+msgid "Name of schedule"
+msgstr "交易计划名称"
+
+#: dialogs/rc.cpp:151 dialogs/rc.cpp:218 dialogs/rc.cpp:219
+#: reports/listtable.cpp:199 views/kscheduledview.cpp:72 widgets/rc.cpp:113
+#: widgets/register.cpp:57 wizards/newaccountwizard/rc.cpp:111
+msgid "Payee"
+msgstr "收款人"
+
+#: wizards/newaccountwizard/rc.cpp:112
+msgid "Estimated monthly payment"
+msgstr "预计月度偿还额"
+
+#: wizards/newaccountwizard/rc.cpp:113
+msgid "Due date of next payment"
+msgstr "下次偿还到期日"
+
+#: wizards/newaccountwizard/rc.cpp:114
+msgid ""
+"Payment should be made\n"
+"from account"
+msgstr "偿还应该从账户中产生"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:79
+msgid "KMyMoney New File Setup"
+msgstr "KMyMoney新文件设置"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:81
+msgid "Introduction"
+msgstr "介绍"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:82
+msgid "Personal Data"
+msgstr "个人信息"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:83
+msgid "Select Currency"
+msgstr "选择货币"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:84
+msgid "Select Accounts"
+msgstr "选择账户"
+
+#: wizards/newuserwizard/knewuserwizard.cpp:85
+msgid "Set preferences"
+msgstr "设置偏好"
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid ""
+"Unable to load data, because no contact has been associated with the owner "
+"of the standard addressbook."
+msgstr "无法载入数据,因为标准地址簿是空的。"
+
+#: dialogs/knewfiledlg.cpp:120 wizards/newuserwizard/knewuserwizard.cpp:197
+msgid "Addressbook import"
+msgstr "导入地址簿"
+
+#: wizards/newuserwizard/rc.cpp:1
+msgid ""
+"A typical KMyMoney user maintains a checking a account with some institution "
+"and uses it to receive money or pay bills. If this is not the case, please "
+"deselect the checkbox below and continue on the next page."
+msgstr ""
+"典型的KMyMoney用户维护一个活期帐户,用它来收入或者付账。如果你不想要这样,请"
+"取消下面的选择项,并继续下一页。"
+
+#: wizards/newuserwizard/rc.cpp:2
+msgid "I have a checking account that I want to manage with KMyMoney"
+msgstr "我有一个想要用KMyMoney管理的活期帐户"
+
+#: wizards/newuserwizard/rc.cpp:3
+msgid "The name of the instititution that issued the account."
+msgstr "此帐户开户的金融机构名称"
+
+#: wizards/newuserwizard/rc.cpp:4
+msgid ""
+"Each institution has a routing number. Enter it here. If uncertain, leave "
+"the field blank. You can modify it later."
+msgstr ""
+"每个机构都有一个routing号码。请在这里输入。如果不清楚,请将它留空。您以后可以"
+"随时修改。"
+
+#: wizards/newuserwizard/rc.cpp:5
+msgid "Name of the institution"
+msgstr "金融机构名称"
+
+#: wizards/newuserwizard/rc.cpp:6
+msgid "Routing number"
+msgstr "区号"
+
+#: wizards/newuserwizard/rc.cpp:7
+msgid ""
+"In general the institution that issued the account also issued a number for "
+"it. Enter it here. If uncertain, you can modify this entry later."
+msgstr ""
+"一般开户的金融机构会为此帐户分配一个帐号。请在这里输入。如果不清楚,可以留"
+"空,待以后修改。"
+
+#: wizards/newuserwizard/rc.cpp:8
+msgid ""
+"Enter a descriptive name that will be used by KMyMoney to identify your "
+"checking account."
+msgstr "输入一个描述性的名称,KMyMoney将用它来标识您的活期帐户。"
+
+#: wizards/newuserwizard/rc.cpp:10
+msgid ""
+"Enter the date from when on you plan to keep track of the transactions in "
+"that account. This is usually the date of the last statement. If uncertain, "
+"leave as is."
+msgstr ""
+"输入您计划要跟踪该账户内交易的起始日期。这通常是最后一期对账单的日期。如果不"
+"清楚,请留下不填。"
+
+#: wizards/newuserwizard/rc.cpp:11
+msgid "Number of the account"
+msgstr "账户号码"
+
+#: wizards/newuserwizard/rc.cpp:12
+msgid "Name of the account"
+msgstr "账户名称"
+
+#: wizards/newuserwizard/rc.cpp:15
+msgid ""
+"Enter the opening balance of the account. This is usually the ending balance "
+"of the last statement. If uncertain, leave as is."
+msgstr "输入该账户的期初余额。这通常是上次对账的期末余额。如果不清楚,请留空。"
+
+#: wizards/newuserwizard/rc.cpp:16
+msgid ""
+"The fields below allow you to enter some information about your checking "
+"account. Once this wizard finishes, the account will be created for you "
+"within KMyMoney."
+msgstr ""
+"下面的选项允许您输入一些关于您的活期帐户的信息。当向导完成时,就会在KMyMoney"
+"中为您建立该账户。"
+
+#: wizards/newuserwizard/rc.cpp:17
+msgid ""
+"KMyMoney supports multiple currencies. Your reports will be based on a "
+"default curreny which you can select here. The default for new accounts is "
+"also the currency you select here."
+msgstr ""
+"KMyMoney支持多种货币。您的报表将会基于这里选择的缺省货币单位。新账户的缺省货"
+"币单位也将使用您这里的选择。"
+
+#: wizards/newuserwizard/rc.cpp:18
+msgid ""
+"KMyMoney will store your financial data in a file on the disk. A standard "
+"filename within your KDE user environment will be the default. This is just "
+"provided for convenience and you can choose any other location here."
+msgstr ""
+"KMyMoney将要将您的财务数据保存在磁盘上的文件中。缺省将使用您的KDE用户环境里的"
+"标准文件名。这只是作为方便提供,您在这里可以任意选择其它位置。"
+
+#: wizards/newuserwizard/rc.cpp:19
+msgid ""
+"Either the currently selected file exists or the selected directory does not "
+"exist. Please make sure, that\n"
+"\n"
+"<ul>\n"
+"<li>the selected directory exists and</li>\n"
+"<li>the filename is not currently used in this directory.</li>\n"
+"</ul>"
+msgstr ""
+
+#: wizards/newuserwizard/rc.cpp:20
+msgid ""
+"This finishes the setup of your KMyMoney environment. You can now press the "
+"Finish button and start using KMyMoney to record your financial transactions."
+msgstr ""
+"对您的KMyMoney环境设置已结束。您现在可以按“结束”按钮,并且开始使用KMyMoney来"
+"记录您的财务交易。"
+
+#: wizards/newuserwizard/rc.cpp:21
+msgid ""
+"Please enter some information about yourself.<br><br>\n"
+"\n"
+"This information will be seen and used only by you. The information is used "
+"to personalize KMyMoney, to encrypt your file, etc."
+msgstr ""
+"请输入关于您本人的信息。<br><br>\n"
+"\n"
+"此信息将只会被您自己使用。这些信息会被用来个性化KMyMoney,加密数据文件,等"
+"等。"
+
+#: wizards/newuserwizard/rc.cpp:28
+msgid "Zip code"
+msgstr "邮政编码"
+
+#: wizards/newuserwizard/rc.cpp:30
+msgid "Welcome to KMyMoney!"
+msgstr "欢迎使用KMyMoney!"
+
+#: wizards/newuserwizard/rc.cpp:31
+msgid ""
+"You have started KMyMoney for the first time on this computer. Before this "
+"program can help you to manage your finances, it needs to collect some data "
+"from you.<p>\n"
+"\n"
+"On the next few pages you will be guided through the steps necessary to "
+"setup the program. This will happen only once."
+msgstr ""
+"您第一次在这台计算机上启动KMyMoney。在该程序帮助您进行财务管理前,它需要收集"
+"一些信息。<p>\n"
+"\n"
+"在接下来的几页中,将会导引您通过必要的步骤来设置该程序。这只会进行一次。"
+
+#: wizards/newuserwizard/rc.cpp:32
+msgid ""
+"<p>KMyMoney can encrypt your datafile using GPG Encryption. GPG encryption "
+"is one of the most secure methods in the world for protecting data. All of "
+"your account numbers and other important financial information will be very "
+"secure.</p>"
+msgstr ""
+"<p>KMyMoney可以使用GPG加密来加密您的数据文件。GPG加密是世界上最安全的数据保护"
+"方法之一。您的账号和其它所有的重要财务信息都会非常安全。</p>"
+
+#: wizards/newuserwizard/rc.cpp:33
+msgid ""
+"If you would like to review or change any preference settings for KMyMoney "
+"at this time, you can do so here. If not just click <b>Next</b>."
+msgstr ""
+"如果您现在要检查或修改KMyMoney的偏好设置,可以在这里进行。否则,请按<b>继续</"
+"b>。"
+
+#: wizards/newuserwizard/rc.cpp:34
+msgid "Configure preferences now"
+msgstr "设置当前偏好"
+
+#: wizards/newuserwizard/rc.cpp:35
+#, fuzzy
+msgid ""
+"You can change the configuration options at any time using the configuration "
+"dialog. Just select the <b>Configure KMyMoney...</b> option in the "
+"<b>Settings</b> menu."
+msgstr ""
+"您可以随时使用配置对话框来修改配置选项。这只需在<b>设置</b>菜单中选择<b>配置"
+"KMyMoney ...</b>项。"
+
+#: dialogs/rc.cpp:83 dialogs/rc.cpp:411 dialogs/rc.cpp:435
+#: kmymoneyutils.cpp:92 kmymoneyutils.cpp:105 mymoney/mymoneyaccount.cpp:753
+#: mymoney/mymoneysecurity.cpp:160
+msgid "Stock"
+msgstr "股票"
+
+#: dialogs/rc.cpp:84 dialogs/rc.cpp:412 dialogs/rc.cpp:436
+#: kmymoneyutils.cpp:107 mymoney/mymoneysecurity.cpp:163
+msgid "Mutual Fund"
+msgstr "共同基金"
+
+#: dialogs/rc.cpp:85 dialogs/rc.cpp:413 dialogs/rc.cpp:437
+#: kmymoneyutils.cpp:109 mymoney/mymoneysecurity.cpp:166
+msgid "Bond"
+msgstr "债券"
+
+#: mymoney/mymoneysecurity.cpp:172 reports/querytable.cpp:1150
+#: widgets/kmymoneyaccountselector.cpp:76
+msgid "None"
+msgstr "无"
+
+#: dialogs/rc.cpp:46 kmymoneyutils.cpp:402 mymoney/mymoneyaccount.cpp:759
+#: mymoney/mymoneyscheduled.cpp:1002 mymoney/mymoneysecurity.cpp:175
+#: views/kforecastview.cpp:174 widgets/register.cpp:54
+#: widgets/register.cpp:485 widgets/transaction.cpp:708
+#: widgets/transaction.cpp:1459
+msgid "Unknown"
+msgstr "未知"
+
+#: mymoney/storage/mymoneystoragesql.cpp:191
+msgid ""
+"Database apparently in use\n"
+"Opened by %1 on %2 at %3.\n"
+"Open anyway?"
+msgstr ""
+"数据库似乎正在被使用\n"
+"被%2上的%1于%3打开。\n"
+"仍要打开吗?"
+
+#: mymoney/storage/mymoneystoragesql.cpp:229
+msgid "Cannot currently create database for driver %1; please create manually"
+msgstr "目前无法用驱动%1创建数据库;请手工创建"
+
+#: mymoney/storage/mymoneystoragesql.cpp:244
+msgid "Error in create database %1; do you have create permissions?"
+msgstr "创建数据库 %1 时出错;你是否有创建权限?"
+
+#: converter/mymoneygncreader.cpp:1329
+#: mymoney/storage/mymoneystoragexml.cpp:166
+msgid "Loading transactions..."
+msgstr "正在载入交易..."
+
+#: converter/mymoneygncreader.cpp:1190
+#: mymoney/storage/mymoneystoragexml.cpp:173
+msgid "Loading accounts..."
+msgstr "正在载入账户..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:180
+msgid "Loading securities..."
+msgstr "正在载入证券..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:187
+msgid "Loading reports..."
+msgstr "正在载入报表..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:268
+msgid "Unknown XML tag %1 found in line %2"
+msgstr "在行%1发现了未知的XML标签%1"
+
+#: mymoney/storage/mymoneystoragexml.cpp:274
+msgid "Exception while creating a %1 element: %2"
+msgstr "在创建%1元素时出错:%2"
+
+#: mymoney/storage/mymoneystoragexml.cpp:513
+msgid "Loading file information..."
+msgstr "正在载入文件信息..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:591
+msgid "Loading user information..."
+msgstr "正在载入用户信息..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:655
+msgid "Saving accounts..."
+msgstr "正在保存账户..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:678
+msgid "Saving transactions..."
+msgstr "正在保存交易..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:747
+msgid "Saving reports..."
+msgstr "正在保存报表..."
+
+#: mymoney/storage/mymoneystoragexml.cpp:762
+msgid "Saving budgets..."
+msgstr "正在保存预算..."
+
+#: mymoney/storage/mymoneystoragedump.cpp:414
+msgid "not reconciled"
+msgstr "未对帐的"
+
+#: mymoney/storage/mymoneystoragedump.cpp:417
+msgid "cleared"
+msgstr "已清算的"
+
+#: mymoney/storage/mymoneystoragedump.cpp:420
+msgid "reconciled"
+msgstr "已对帐的"
+
+#: mymoney/storage/mymoneystoragedump.cpp:423
+msgid "frozen"
+msgstr "冻结的"
+
+#: mymoney/storage/mymoneystoragedump.cpp:426
+msgid "unknown"
+msgstr "未知"
+
+#: mymoney/mymoneyaccount.cpp:101
+msgid ""
+"Account %1 contains an opening balance. Please use a KMyMoney version >= 0.8 "
+"and < 0.9 to correct the problem."
+msgstr ""
+"帐户%1中包含一个开盘余额。请使用版本>=0.8并且<0.9的KMyMoney来修正该问题。"
+
+#: mymoney/mymoneyaccount.cpp:597
+msgid ""
+"_: Brokerage (suffix for account names)\n"
+"Brokerage"
+msgstr "托管"
+
+#: kmymoneyutils.cpp:74 mymoney/mymoneyaccount.cpp:726
+msgid "Certificate of Deposit"
+msgstr "存款证明"
+
+#: kmymoneyutils.cpp:78 mymoney/mymoneyaccount.cpp:732
+msgid "Money Market"
+msgstr "金融市场"
+
+#: converter/mymoneytemplate.cpp:186 converter/mymoneytemplate.cpp:187
+#: dialogs/knewaccountdlg.cpp:1018 kmymoneyutils.cpp:86
+#: mymoney/mymoneyaccount.cpp:744 views/kaccountsview.cpp:360
+#: views/kbudgetview.cpp:372 views/kcategoriesview.cpp:178
+#: views/khomeview.cpp:1813 views/kmymoneyview.cpp:767
+#: widgets/kmymoneyaccountselector.cpp:68
+#: widgets/kmymoneyaccountselector.cpp:179
+#: widgets/kmymoneyaccountselector.cpp:370 widgets/register.cpp:828
+msgid "Income"
+msgstr "收入"
+
+#: converter/mymoneytemplate.cpp:190 converter/mymoneytemplate.cpp:191
+#: dialogs/knewaccountdlg.cpp:1020 kmymoneyutils.cpp:88
+#: mymoney/mymoneyaccount.cpp:747 views/kaccountsview.cpp:364
+#: views/kbudgetview.cpp:378 views/kcategoriesview.cpp:182
+#: views/kmymoneyview.cpp:768 widgets/kmymoneyaccountselector.cpp:72
+#: widgets/kmymoneyaccountselector.cpp:180
+#: widgets/kmymoneyaccountselector.cpp:380 widgets/register.cpp:829
+msgid "Expense"
+msgstr "支出"
+
+#: kmymoneyutils.cpp:90 mymoney/mymoneyaccount.cpp:750
+msgid "Investment Loan"
+msgstr "投资贷款"
+
+#: mymoney/mymoneyfile.cpp:47
+msgid "Opening Balances"
+msgstr "开户"
+
+#: mymoney/mymoneyfile.cpp:398
+msgid "Cannot remove transaction that references a closed account."
+msgstr "无法删除引用了已关闭账户的交易。"
+
+#: mymoney/mymoneyfile.cpp:1414 mymoney/mymoneyfile.cpp:1433
+#: mymoney/mymoneyfile.cpp:1447 mymoney/mymoneyfile.cpp:1469
+msgid "* Problem with account '%1'"
+msgstr "* 账户“%1”有问题"
+
+#: mymoney/mymoneyfile.cpp:1419
+msgid " * Parent account '%1' belongs to a different group."
+msgstr " * 父账户“%1”属于不同的组。"
+
+#: mymoney/mymoneyfile.cpp:1420 mymoney/mymoneyfile.cpp:1450
+msgid " New parent account is the top level account '%1'."
+msgstr " 新的父账户是顶层账户“%1”。"
+
+#: mymoney/mymoneyfile.cpp:1436
+msgid " * Parent account '%1' does not contain '%2' as sub-account."
+msgstr " * 父账户“%1”里并未包含子账户“%2”。"
+
+#: mymoney/mymoneyfile.cpp:1449
+msgid " * The parent with id %1 does not exist anymore."
+msgstr " * id为%1的父账户不存在。"
+
+#: mymoney/mymoneyfile.cpp:1471
+msgid " * Child account with id %1 does not exist anymore."
+msgstr " * id为%1的子账户不存在。"
+
+#: mymoney/mymoneyfile.cpp:1472
+msgid " The child account list will be reconstructed."
+msgstr " 将要重建子账户列表。"
+
+#: mymoney/mymoneyfile.cpp:1492
+msgid " * Unable to update account data in engine."
+msgstr " * 无法在引擎中更新账户数据。"
+
+#: mymoney/mymoneyfile.cpp:1499
+msgid "* Reconstructing the child lists for"
+msgstr "* 正在重新更新子账户列表,父账户是:"
+
+#: mymoney/mymoneyfile.cpp:1536
+msgid " * Unable to update account data for account %1 in engine"
+msgstr " * 无法在引擎中为账户“%1”更新账户数据"
+
+#: mymoney/mymoneyfile.cpp:1554
+msgid " * Payee %1 recreated with fixed id"
+msgstr " * 用固定id重新创建了收/付款人“%1”"
+
+#: mymoney/mymoneyfile.cpp:1583
+msgid " * Payee id updated in split of transaction '%1'."
+msgstr " * 已更新了交易“%1”的划分里的收/付款人id。"
+
+#: mymoney/mymoneyfile.cpp:1596
+msgid " * shares set to value in split of transaction '%1'."
+msgstr " * 用交易“%1”的划分里的数额设定了股份。"
+
+#: mymoney/mymoneyfile.cpp:1599
+msgid " * value set to shares in split of transaction '%1'."
+msgstr " * 在交易“%1”的划分里用股份设定了数额。"
+
+#: mymoney/mymoneyfile.cpp:1605
+msgid ""
+" * Split %2 in transaction '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+" * 交易“%1”的划分%2里包含一个指向非法账户“%3”的引用。请手工修正此问题。"
+
+#: mymoney/mymoneyfile.cpp:1616
+msgid " * action marked as interest in split of transaction '%1'."
+msgstr " * 在交易“%1”的划分将动作标记成了利息。"
+
+#: mymoney/mymoneyfile.cpp:1643
+msgid " * Payee id updated in split of schedule '%1'."
+msgstr " * 已更新了交易计划“%1”的划分中的收/付款人id。"
+
+#: mymoney/mymoneyfile.cpp:1649
+msgid ""
+" * Split in scheduled transaction '%1' contained value != 0 and shares == 0."
+msgstr " * 交易计划“%1”的划分中包含不等于0的值和等于0的股份。"
+
+#: mymoney/mymoneyfile.cpp:1650
+msgid " Shares set to value."
+msgstr " 用值设定了股份。"
+
+#: mymoney/mymoneyfile.cpp:1658
+msgid " * Removed bankid from split in scheduled transaction '%1'."
+msgstr " * 从计划交易“%1”的划分里删除了银行id。"
+
+#: mymoney/mymoneyfile.cpp:1671
+msgid " * shares set to value in split in schedule '%1'."
+msgstr " * 用交易计划“%1”的划分中的数额设定了股份。"
+
+#: mymoney/mymoneyfile.cpp:1674
+msgid " * value set to shares in split in schedule '%1'."
+msgstr " * 用交易计划“%1”的划分中的股份值设定了数额。"
+
+#: mymoney/mymoneyfile.cpp:1680
+msgid ""
+" * Split %2 in schedule '%1' contains a reference to invalid account %3. "
+"Please fix manually."
+msgstr ""
+" * 交易计划“%1”中的划分%2里包含一个指向非法账户“%3”的引用。请手工修正此问"
+"题。"
+
+#: mymoney/mymoneyfile.cpp:1706
+msgid " * Payee id updated in report '%1'."
+msgstr " * 已更新了报表“%1”中的收/付款人id。"
+
+#: mymoney/mymoneyfile.cpp:1723
+msgid " * Payee '%1' removed."
+msgstr " * 收/付款人“%1”已删除。"
+
+#: mymoney/mymoneyfile.cpp:1730
+msgid "Finish! Data is consistent."
+msgstr "完成!数据是一致的。"
+
+#: mymoney/mymoneyfile.cpp:1732
+msgid "Finish! %1 problem(s) corrected. %2 problem(s) still present."
+msgstr "完成了!修正了%1个问题。还存在%2个问题。"
+
+#: mymoney/mymoneyscheduled.cpp:873 mymoney/mymoneyscheduled.cpp:918
+#: mymoney/mymoneyscheduled.cpp:969 mymoney/mymoneyscheduled.cpp:1265
+#: mymoney/mymoneyscheduletest.cpp:1336
+msgid "Once"
+msgstr "一次"
+
+#: mymoney/mymoneyscheduled.cpp:875 mymoney/mymoneyscheduled.cpp:924
+#: mymoney/mymoneyscheduled.cpp:1267 mymoney/mymoneyscheduletest.cpp:1337
+#: widgets/rc.cpp:72
+msgid "Daily"
+msgstr "每天"
+
+#: mymoney/mymoneyscheduled.cpp:877 mymoney/mymoneyscheduled.cpp:931
+#: mymoney/mymoneyscheduled.cpp:1269 mymoney/mymoneyscheduletest.cpp:1338
+#: widgets/rc.cpp:73
+msgid "Weekly"
+msgstr "每周"
+
+#: mymoney/mymoneyscheduled.cpp:881 mymoney/mymoneyscheduled.cpp:932
+#: mymoney/mymoneyscheduled.cpp:1273 mymoney/mymoneyscheduletest.cpp:1339
+msgid "Every other week"
+msgstr "每隔一周"
+
+#: mymoney/mymoneyscheduled.cpp:879 mymoney/mymoneyscheduled.cpp:1271
+#: mymoney/mymoneyscheduletest.cpp:1340
+msgid "Fortnightly"
+msgstr "每双周"
+
+#: mymoney/mymoneyscheduled.cpp:883 mymoney/mymoneyscheduled.cpp:941
+#: mymoney/mymoneyscheduled.cpp:1275 mymoney/mymoneyscheduletest.cpp:1341
+#, fuzzy
+msgid "Every half month"
+msgstr "每四个月"
+
+#: mymoney/mymoneyscheduled.cpp:887 mymoney/mymoneyscheduled.cpp:934
+#: mymoney/mymoneyscheduled.cpp:1279 mymoney/mymoneyscheduletest.cpp:1342
+msgid "Every four weeks"
+msgstr "每四周"
+
+#: mymoney/mymoneyscheduled.cpp:893 mymoney/mymoneyscheduled.cpp:935
+#: mymoney/mymoneyscheduled.cpp:1285 mymoney/mymoneyscheduletest.cpp:1344
+msgid "Every eight weeks"
+msgstr "每隔八周"
+
+#: mymoney/mymoneyscheduled.cpp:895 mymoney/mymoneyscheduled.cpp:948
+#: mymoney/mymoneyscheduled.cpp:1287 mymoney/mymoneyscheduletest.cpp:1345
+msgid "Every two months"
+msgstr "每两个月"
+
+#: mymoney/mymoneyscheduled.cpp:897 mymoney/mymoneyscheduled.cpp:949
+#: mymoney/mymoneyscheduled.cpp:1289 mymoney/mymoneyscheduletest.cpp:1346
+msgid "Every three months"
+msgstr "每三个月"
+
+#: mymoney/mymoneyscheduled.cpp:899 mymoney/mymoneyscheduled.cpp:1291
+#: mymoney/mymoneyscheduletest.cpp:1347 widgets/rc.cpp:76
+msgid "Quarterly"
+msgstr "每季度"
+
+#: mymoney/mymoneyscheduled.cpp:901 mymoney/mymoneyscheduled.cpp:950
+#: mymoney/mymoneyscheduled.cpp:1293 mymoney/mymoneyscheduletest.cpp:1348
+msgid "Every four months"
+msgstr "每四个月"
+
+#: mymoney/mymoneyscheduled.cpp:903 mymoney/mymoneyscheduled.cpp:951
+#: mymoney/mymoneyscheduled.cpp:1295 mymoney/mymoneyscheduletest.cpp:1349
+msgid "Twice yearly"
+msgstr "每半年"
+
+#: mymoney/mymoneyscheduled.cpp:905 mymoney/mymoneyscheduled.cpp:957
+#: mymoney/mymoneyscheduled.cpp:1297 mymoney/mymoneyscheduletest.cpp:1350
+#: widgets/rc.cpp:20 widgets/rc.cpp:77
+msgid "Yearly"
+msgstr "每年"
+
+#: mymoney/mymoneyscheduled.cpp:907 mymoney/mymoneyscheduled.cpp:958
+#: mymoney/mymoneyscheduled.cpp:1299 mymoney/mymoneyscheduletest.cpp:1351
+msgid "Every other year"
+msgstr "每隔一年"
+
+#: mymoney/mymoneyscheduled.cpp:870 mymoney/mymoneyscheduled.cpp:913
+#: mymoney/mymoneyscheduled.cpp:966
+msgid "Any"
+msgstr "任意"
+
+#: mymoney/mymoneyscheduled.cpp:885 mymoney/mymoneyscheduled.cpp:933
+#: mymoney/mymoneyscheduled.cpp:1277
+msgid "Every three weeks"
+msgstr "每隔三周"
+
+#: mymoney/mymoneyscheduled.cpp:889 mymoney/mymoneyscheduled.cpp:925
+#: mymoney/mymoneyscheduled.cpp:1281
+msgid "Every thirty days"
+msgstr "每30天"
+
+#: mymoney/mymoneyscheduled.cpp:971
+#, fuzzy
+msgid "Day"
+msgstr "天"
+
+#: mymoney/mymoneyscheduled.cpp:973 reports/listtable.cpp:206
+#: widgets/kmymoneycalendar.cpp:123 widgets/rc.cpp:97
+msgid "Week"
+msgstr "周"
+
+#: mymoney/mymoneyscheduled.cpp:975
+#, fuzzy
+msgid "Half-month"
+msgstr "每四个月"
+
+#: mymoney/mymoneyscheduled.cpp:977 reports/listtable.cpp:205
+#: widgets/kmymoneycalendar.cpp:124 widgets/rc.cpp:96
+msgid "Month"
+msgstr "月份"
+
+#: dialogs/rc.cpp:400 mymoney/mymoneyscheduled.cpp:979 views/rc.cpp:14
+msgid "Year"
+msgstr "年"
+
+#: mymoney/mymoneyscheduled.cpp:989
+msgid "Bill"
+msgstr "账单"
+
+#: dialogs/rc.cpp:107 dialogs/rc.cpp:162 dialogs/rc.cpp:249 dialogs/rc.cpp:754
+#: mymoney/mymoneyscheduled.cpp:992 widgets/kmymoneycombo.cpp:420
+#: widgets/register.cpp:571
+msgid "Deposit"
+msgstr "存款"
+
+#: mymoney/mymoneyscheduled.cpp:995 reports/querytable.cpp:594
+#: reports/querytable.cpp:696 widgets/kmymoneycombo.cpp:419
+msgid "Transfer"
+msgstr "转账"
+
+#: mymoney/mymoneyscheduled.cpp:1035
+msgid "Any (Error)"
+msgstr "任意(错误)"
+
+#: dialogs/rc.cpp:114 mymoney/mymoneyscheduled.cpp:1047
+msgid "Change the date to the previous Friday"
+msgstr "将日期改为上一个周五"
+
+#: dialogs/rc.cpp:115 mymoney/mymoneyscheduled.cpp:1050
+msgid "Change the date to the next Monday"
+msgstr "将日期改为下一个周一"
+
+#: mymoney/mymoneyscheduled.cpp:1053
+msgid "Do Nothing"
+msgstr "不做任何事"
+
+#: kmymoney2.cpp:312
+#, fuzzy
+msgid "Open database..."
+msgstr "打开数据库..."
+
+#: kmymoney2.cpp:313
+#, fuzzy
+msgid "Save as database..."
+msgstr "另存为数据库..."
+
+#: kmymoney2.cpp:314
+msgid "Backup..."
+msgstr "备份..."
+
+#: kmymoney2.cpp:315 kmymoney2.cpp:321
+#, fuzzy
+msgid "QIF..."
+msgstr "QIF..."
+
+#: kmymoney2.cpp:316
+#, fuzzy
+msgid "Gnucash..."
+msgstr "Gnucash..."
+
+#: kmymoney2.cpp:317
+#, fuzzy
+msgid "Statement file..."
+msgstr "对帐单文件..."
+
+#: kmymoney2.cpp:319 kmymoney2.cpp:320
+#, fuzzy
+msgid "Account Template..."
+msgstr "账户/交易类别模板..."
+
+#: kmymoney2.cpp:322
+msgid "Personal Data..."
+msgstr "个人信息..."
+
+#: kmymoney2.cpp:325
+msgid "Dump Memory"
+msgstr "转储内存"
+
+#: kmymoney2.cpp:327
+msgid "File-Information..."
+msgstr "文件信息..."
+
+#: kmymoney2.cpp:332
+msgid "Find transaction..."
+msgstr "查找交易..."
+
+#: kmymoney2.cpp:337
+msgid "Show Transaction Detail"
+msgstr "显示交易详细信息"
+
+#: kmymoney2.cpp:338 rc.cpp:60
+msgid "Hide reconciled transactions"
+msgstr "隐藏已对帐交易"
+
+#: kmymoney2.cpp:339 rc.cpp:57
+msgid "Hide unused categories"
+msgstr "隐藏未使用的交易类别"
+
+#: kmymoney2.cpp:340
+msgid "Show all accounts"
+msgstr "显示全部账户"
+
+#: kmymoney2.cpp:345
+msgid "New institution..."
+msgstr "新建金融机构..."
+
+#: kmymoney2.cpp:346
+msgid "Edit institution..."
+msgstr "编辑金融机构..."
+
+#: kmymoney2.cpp:347
+msgid "Delete institution..."
+msgstr "删除金融机构..."
+
+#: kmymoney2.cpp:352
+msgid "New account..."
+msgstr "新建账户..."
+
+#: kmymoney2.cpp:354
+msgid "Open ledger"
+msgstr "打开账簿"
+
+#: kmymoney2.cpp:355
+msgid "Reconcile..."
+msgstr "对帐..."
+
+#: kmymoney2.cpp:356
+msgid ""
+"_: Finish reconciliation\n"
+"Finish"
+msgstr "完成"
+
+#: kmymoney2.cpp:357
+msgid ""
+"_: Postpone reconciliation\n"
+"Postpone"
+msgstr "推迟"
+
+#: kmymoney2.cpp:358
+msgid "Edit account..."
+msgstr "编辑账户..."
+
+#: kmymoney2.cpp:359
+msgid "Delete account..."
+msgstr "删除账户..."
+
+#: kmymoney2.cpp:360
+msgid "Close account"
+msgstr "关闭账户"
+
+#: kmymoney2.cpp:361
+msgid "Reopen account"
+msgstr "重新打开账户"
+
+#: kmymoney2.cpp:362
+msgid "Transaction report"
+msgstr "交易报表"
+
+#: kmymoney2.cpp:364
+msgid "Show balance chart..."
+msgstr "显示平衡表..."
+
+#: kmymoney2.cpp:366
+msgid "Map to online account"
+msgstr "映射到网上账户"
+
+#: kmymoney2.cpp:367
+msgid "Unmap account"
+msgstr "取消账户映射"
+
+#: dialogs/settings/rc.cpp:126 kmymoney2.cpp:368 views/kpayeesview.cpp:363
+#: widgets/rc.cpp:50
+msgid "Update"
+msgstr "更新"
+
+#: kmymoney2.cpp:372
+msgid "Update account..."
+msgstr "更新账户..."
+
+#: kmymoney2.cpp:373
+#, fuzzy
+msgid "Update all accounts..."
+msgstr "更新账户..."
+
+#: kmymoney2.cpp:378
+msgid "New category..."
+msgstr "新建交易类型..."
+
+#: kmymoney2.cpp:379
+msgid "Edit category..."
+msgstr "编辑交易类别..."
+
+#: kmymoney2.cpp:380
+msgid "Delete category..."
+msgstr "删除交易类型..."
+
+#: kmymoney2.cpp:386
+msgid "QIF Profile Editor..."
+msgstr "QIF配置文件编辑器..."
+
+#: kmymoney2.cpp:387
+#, fuzzy
+msgid "Securities..."
+msgstr "证券..."
+
+#: kmymoney2.cpp:388
+#, fuzzy
+msgid "Currencies..."
+msgstr "货币..."
+
+#: kmymoney2.cpp:389
+#, fuzzy
+msgid "Prices..."
+msgstr "价格..."
+
+#: kmymoney2.cpp:390
+msgid "Update Stock and Currency Prices..."
+msgstr "更新股票和货币价格..."
+
+#: kmymoney2.cpp:391
+msgid "Consistency Check"
+msgstr "一致性检查"
+
+#: kmymoney2.cpp:392
+msgid "Performance-Test"
+msgstr "性能测试"
+
+#: kmymoney2.cpp:393
+msgid "KCalc..."
+msgstr "KCalc..."
+
+#: kmymoney2.cpp:399
+msgid "Enable all messages"
+msgstr "打开所有信息显示"
+
+#: kmymoney2.cpp:400
+msgid "KDE language settings..."
+msgstr "KDE语言设置..."
+
+#: kmymoney2.cpp:405
+msgid "&Show tip of the day"
+msgstr "显示每日一帖(&S)"
+
+#: kmymoney2.cpp:410
+msgid ""
+"_: New transaction button\n"
+"New"
+msgstr "新建"
+
+#: kmymoney2.cpp:415
+msgid ""
+"_: Edit transaction button\n"
+"Edit"
+msgstr "编辑"
+
+#: kmymoney2.cpp:417
+msgid ""
+"_: Enter transaction\n"
+"Enter"
+msgstr "输入"
+
+#: kmymoney2.cpp:420
+msgid ""
+"_: Edit split button\n"
+"Edit splits"
+msgstr "编辑切分"
+
+#: kmymoney2.cpp:421
+msgid ""
+"_: Cancel transaction edit\n"
+"Cancel"
+msgstr "取消"
+
+#: kmymoney2.cpp:422
+msgid ""
+"_: Delete transaction\n"
+"Delete"
+msgstr "删除"
+
+#: kmymoney2.cpp:423
+msgid ""
+"_: Duplicate transaction\n"
+"Duplicate"
+msgstr "复制"
+
+#: kmymoney2.cpp:425 kmymoney2.cpp:4826 kmymoney2.cpp:5107
+msgid ""
+"_: Button text for match transaction\n"
+"Match"
+msgstr "匹配"
+
+#: kmymoney2.cpp:426
+msgid ""
+"_: Accept 'imported' and 'matched' transaction\n"
+"Accept"
+msgstr "接受"
+
+#: kmymoney2.cpp:428
+msgid ""
+"_: Toggle reconciliation flag\n"
+"Toggle"
+msgstr "切换"
+
+#: kmymoney2.cpp:429
+msgid ""
+"_: Mark transaction cleared\n"
+"Cleared"
+msgstr "已清算"
+
+#: kmymoney2.cpp:430
+msgid ""
+"_: Mark transaction reconciled\n"
+"Reconciled"
+msgstr "已对帐"
+
+#: kmymoney2.cpp:431
+msgid ""
+"_: Mark transaction not reconciled\n"
+"Not reconciled"
+msgstr "未对账"
+
+#: kmymoney2.cpp:432
+msgid ""
+"_: Select all transactions\n"
+"Select all"
+msgstr "选择全部"
+
+#: kmymoney2.cpp:434 kmymoney2.cpp:5497
+msgid "Goto account"
+msgstr "转到账户"
+
+#: kmymoney2.cpp:435 kmymoney2.cpp:5495
+msgid "Goto payee"
+msgstr "转到收款人"
+
+#: kmymoney2.cpp:436
+#, fuzzy
+msgid "Create scheduled transaction..."
+msgstr "输入预定交易"
+
+#: kmymoney2.cpp:437
+msgid "Assign next number"
+msgstr "分配下一个编号"
+
+#: kmymoney2.cpp:438
+msgid ""
+"_: Combine transactions\n"
+"Combine"
+msgstr "合并"
+
+#: kmymoney2.cpp:440
+msgid "New investment"
+msgstr "新建投资"
+
+#: kmymoney2.cpp:441
+msgid "Edit investment..."
+msgstr "编辑投资..."
+
+#: kmymoney2.cpp:442
+msgid "Delete investment..."
+msgstr "删除投资..."
+
+#: kmymoney2.cpp:443
+msgid "Online price update..."
+msgstr "在线更新价格..."
+
+#: kmymoney2.cpp:444
+msgid "Manual price update..."
+msgstr "手动更新价格..."
+
+#: kmymoney2.cpp:446
+#, fuzzy
+msgid "New scheduled transaction..."
+msgstr "输入预定交易"
+
+#: kmymoney2.cpp:447
+#, fuzzy
+msgid "Edit scheduled transaction..."
+msgstr "输入预定交易"
+
+#: kmymoney2.cpp:448
+#, fuzzy
+msgid "Delete scheduled transaction..."
+msgstr "输入预定交易"
+
+#: kmymoney2.cpp:449
+#, fuzzy
+msgid "Duplicate scheduled transaction"
+msgstr "输入预定交易"
+
+#: kmymoney2.cpp:450
+#, fuzzy
+msgid "Enter next transaction..."
+msgstr "删除交易..."
+
+#: kmymoney2.cpp:451
+#, fuzzy
+msgid "Skip next transaction..."
+msgstr "跳过此交易"
+
+#: kmymoney2.cpp:453
+msgid "New payee"
+msgstr "新建收款人"
+
+#: kmymoney2.cpp:454
+msgid "Rename payee"
+msgstr "重命名收款人"
+
+#: kmymoney2.cpp:455
+msgid "Delete payee"
+msgstr "删除收款人"
+
+#: kmymoney2.cpp:457
+msgid "New budget"
+msgstr "新建预算"
+
+#: kmymoney2.cpp:458
+msgid "Rename budget"
+msgstr "重命名预算"
+
+#: kmymoney2.cpp:459
+msgid "Delete budget"
+msgstr "删除预算"
+
+#: kmymoney2.cpp:460
+msgid "Copy budget"
+msgstr "拷贝预算"
+
+#: kmymoney2.cpp:461
+msgid "Change budget year"
+msgstr "更改预算年份"
+
+#: kmymoney2.cpp:462
+msgid ""
+"_: Budget based on forecast\n"
+"Forecast"
+msgstr "预测"
+
+#: kmymoney2.cpp:467 kmymoney2.cpp:3990 kmymoney2.cpp:3993 kmymoney2.cpp:3999
+msgid "New currency"
+msgstr "新建货币"
+
+#: kmymoney2.cpp:468 kmymoney2.cpp:4021 kmymoney2.cpp:4026
+msgid "Rename currency"
+msgstr "重命名货币"
+
+#: kmymoney2.cpp:469 kmymoney2.cpp:4039
+msgid "Delete currency"
+msgstr "删除货币"
+
+#: dialogs/rc.cpp:69 kmymoney2.cpp:470
+msgid "Select as base currency"
+msgstr "选择为基准货币"
+
+#: kmymoney2.cpp:481
+msgid "View back"
+msgstr "前一个视图"
+
+#: kmymoney2.cpp:482
+msgid "View forward"
+msgstr "后一个视图"
+
+#: kmymoney2.cpp:611
+msgid "KMyMoney file needs saving. Save ?"
+msgstr "需要保存KMyMoney数据文件。是否保存?"
+
+#: kmymoney2.cpp:757
+msgid "Creating new document..."
+msgstr "创建新文档..."
+
+#: kmymoney2.cpp:869 kmymoney2.cpp:884
+msgid "Open a file."
+msgstr "打开文件。"
+
+#: kmymoney2.cpp:872
+msgid ""
+"%1|KMyMoney files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|KMyMoney文件\n"
+"%2|所有文件(*.*)"
+
+#: kmymoney2.cpp:873
+msgid "Open File..."
+msgstr "打开文件..."
+
+#: kmymoney2.cpp:925 kstartuplogo.cpp:100
+msgid "Loading file..."
+msgstr "载入文件..."
+
+#: kmymoney2.cpp:986
+msgid ""
+"<b>%1</b> is either an invalid filename or the file does not exist. You can "
+"open another file or create a new one."
+msgstr ""
+"文件名<b>%1</b>非法,或者该文件不存在。请您选择打开其它文件或者创建一个新文"
+"件。"
+
+#: kmymoney2.cpp:986
+msgid "File not found"
+msgstr "找不到文件"
+
+#: kmymoney2.cpp:989
+msgid "File <b>%1</b> is already opened in another instance of KMyMoney"
+msgstr "文件<b>%1</b>已经被另一个KMyMoney进程打开。"
+
+#: kmymoney2.cpp:989
+msgid "Duplicate open"
+msgstr "重复打开文件"
+
+#: kmymoney2.cpp:1001
+msgid "Saving file..."
+msgstr "保存文件..."
+
+#: kmymoney2.cpp:1035 kmymoney2.cpp:1047 kmymoney2.cpp:1071
+#, c-format
+msgid "Additional encryption key(s) to be used: %1"
+msgstr "额外要用的加密密钥:%1"
+
+#: kmymoney2.cpp:1056
+msgid "Saving file with a new filename..."
+msgstr "文件另存为..."
+
+#: kmymoney2.cpp:1067
+msgid "Encryption key to be used"
+msgstr "要使用的加密密钥"
+
+#: kmymoney2.cpp:1072
+msgid "Manage additional keys"
+msgstr "管理额外密钥"
+
+#: kmymoney2.cpp:1079
+msgid "No encryption"
+msgstr "未加密"
+
+#: kmymoney2.cpp:1102
+msgid ""
+"_: KMyMoney (Filefilter)\n"
+"KMyMoney files"
+msgstr "KMyMoney文件"
+
+#: kmymoney2.cpp:1103
+msgid ""
+"_: XML (Filefilter)\n"
+"XML files"
+msgstr "XML文件"
+
+#: kmymoney2.cpp:1104
+msgid ""
+"_: Anonymous (Filefilter)\n"
+"Anonymous files"
+msgstr "匿名文件"
+
+#: kmymoney2.cpp:1105
+msgid "All files"
+msgstr "所有文件"
+
+#: kmymoney2.cpp:1193
+msgid "Saving file to database..."
+msgstr "保存文件到数据库..."
+
+#: kmymoney2.cpp:1207
+msgid "Cannot save to current database."
+msgstr "无法保存到当前数据库。"
+
+#: kmymoney2.cpp:1225
+msgid "Closing window..."
+msgstr "关闭窗口..."
+
+#: kmymoney2.cpp:1228 kmymoney2.cpp:1249
+msgid "The file has been changed, save it ?"
+msgstr "此文件已经被修改过,是否需要保存?"
+
+#: kmymoney2.cpp:1339 kmymoney2.cpp:1352
+msgid "Ready."
+msgstr "就绪。"
+
+#: kmymoney2.cpp:1397 kmymoney2.cpp:1433
+msgid "No KMyMoneyFile open"
+msgstr "未打开任何KMyMoney文件"
+
+#: kmymoney2.cpp:1401
+msgid "Viewing personal data..."
+msgstr "查看个人信息..."
+
+#: kmymoney2.cpp:1408
+msgid "Edit Personal Data"
+msgstr "编辑个人信息"
+
+#: kmymoney2.cpp:1424
+#, c-format
+msgid "Unable to store user information: %1"
+msgstr "无法保存账户信息:%1"
+
+#: kmymoney2.cpp:1447
+msgid "Importing account templates."
+msgstr "导入账户模板。"
+
+#: kmymoney2.cpp:1462
+msgid "Unable to import template(s): %1, thrown in %2:%3"
+msgstr "无法导入模板:%1,发生于%2:%3"
+
+#: kmymoney2.cpp:1471
+msgid "Exporting account templates."
+msgstr "导出账户模板"
+
+#: kmymoney2.cpp:1474
+msgid ""
+"*.kmt|KMyMoney template files\n"
+"*.*|All files"
+msgstr ""
+"*.kmt|KMyMoney模板文件\n"
+"*.*|所有文件"
+
+#: kmymoney2.cpp:1475
+msgid "Save as..."
+msgstr "另存为..."
+
+#: kmymoney2.cpp:1517
+msgid "Importing file..."
+msgstr "导入文件..."
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+#, fuzzy
+msgid "The statements have been processed with the following results:"
+msgstr "该对帐单已经被处理,结果如下:"
+
+#: kmymoney2.cpp:1552 kmymoney2.cpp:1754 kmymoney2.cpp:6040 kmymoney2.cpp:6062
+msgid "Statement stats"
+msgstr "对帐单状态"
+
+#: kmymoney2.cpp:1602
+msgid ""
+"You cannot import GnuCash data into an existing file. Do you wish to save "
+"this file?"
+msgstr "您不能将GnuCash程序数据导入已存在的文件中。您要保存此文件吗?"
+
+#: kmymoney2.cpp:1615
+msgid "Importing a Gnucash file."
+msgstr "导入GnuCash文件。"
+
+#: kmymoney2.cpp:1618
+msgid ""
+"%1|Gnucash files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|Gnucash文件\n"
+"%2|所有文件(*.*)"
+
+#: kmymoney2.cpp:1619
+msgid "Import Gnucash file..."
+msgstr "导入GnuCash文件"
+
+#: kmymoney2.cpp:1658
+msgid "Importing an XML Statement."
+msgstr "导入XML格式对帐单。"
+
+#: kmymoney2.cpp:1661
+msgid ""
+"%1|XML files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|XML文件\n"
+"%2|所有文件(*.*)"
+
+#: kmymoney2.cpp:1662
+msgid "Import XML Statement..."
+msgstr "导入XML对帐单..."
+
+#: kmymoney2.cpp:1718
+msgid "Error importing %1: This file is not a valid KMM statement file."
+msgstr "文件%1导入失败:此文件不是一个合法的KMM对帐单文件"
+
+#: kmymoney2.cpp:1718
+msgid "Invalid Statement"
+msgstr "错误的对帐单"
+
+#: kmymoney2.cpp:1754
+msgid "The statement has been processed with the following results:"
+msgstr "该对帐单已经被处理,结果如下:"
+
+#: kmymoney2.cpp:1763
+msgid "Exporting file..."
+msgstr "导出文件"
+
+#: kmymoney2.cpp:1786
+msgid "The file <b>%1</b> already exists. Do you really want to override it?"
+msgstr "文件<b>%1</b>已存在。要覆盖它吗?"
+
+#: kmymoney2.cpp:1786
+msgid "File already exists"
+msgstr "文件已存在"
+
+#: dialogs/rc.cpp:347 dialogs/rc.cpp:649 dialogs/rc.cpp:798 kmymoney2.cpp:1815
+msgid "General"
+msgstr "总体信息"
+
+#: kmymoney2.cpp:1816
+msgid "Register"
+msgstr "账簿"
+
+#: kmymoney2.cpp:1817 views/khomeview.cpp:88 views/kmymoneyview.cpp:136
+msgid "Home"
+msgstr "主界面"
+
+#: kmymoney2.cpp:1818 views/kmymoneyview.cpp:176
+#, fuzzy
+msgid ""
+"Scheduled\n"
+"transactions"
+msgstr "定期交易"
+
+#: kmymoney2.cpp:1819
+msgid "Encryption"
+msgstr "加密"
+
+#: kmymoney2.cpp:1820
+msgid "Colors"
+msgstr "配色"
+
+#: dialogs/rc.cpp:344 dialogs/settings/rc.cpp:107 kmymoney2.cpp:1822
+#: widgets/rc.cpp:33
+msgid "Online Quotes"
+msgstr "在线报价"
+
+#: kmymoney2.cpp:1823 reports/pivottable.cpp:2426 views/kmymoneyview.cpp:251
+#: views/kmymoneyview.cpp:253 views/kreportsview.cpp:1415 views/rc.cpp:41
+msgid "Forecast"
+msgstr "预测"
+
+#: kmymoney2.cpp:1824
+msgid "Plugins"
+msgstr "插件"
+
+#: kmymoney2.cpp:1893
+msgid ""
+"The file must be saved first before it can be backed up. Do you want to "
+"continue?"
+msgstr "此文件在备份前必须先进行保存。您要继续吗?"
+
+#: kmymoney2.cpp:1910
+msgid ""
+"The current implementation of the backup functionality only supports local "
+"files as source files! Your current source file is '%1'."
+msgstr "目前备份功能仅支持使用本地文件作为源文件进行备份。当前的源文件为“%1”。"
+
+#: kmymoney2.cpp:1913
+msgid "Local files only"
+msgstr "仅支持本地文件"
+
+#: kmymoney2.cpp:1928
+#, c-format
+msgid "Mounting %1"
+msgstr "正在加载%1"
+
+#: kmymoney2.cpp:1967
+msgid "Backup file for today exists on that device. Replace ?"
+msgstr "在移动设备上已存在今天的备份文件。是否替换?"
+
+#: dialogs/rc.cpp:7 kmymoney2.cpp:1967 kmymoney2.cpp:1994 kmymoney2.cpp:2024
+#: kmymoney2.cpp:2032 kmymoney2.cpp:2057 kmymoney2.cpp:2059
+msgid "Backup"
+msgstr "备份"
+
+#: kmymoney2.cpp:1967
+msgid "&Replace"
+msgstr "替换(&R)"
+
+#: kmymoney2.cpp:1972 kmymoney2.cpp:1997 kmymoney2.cpp:2016 kmymoney2.cpp:2035
+#, c-format
+msgid "Unmounting %1"
+msgstr "正在卸载%1"
+
+#: kmymoney2.cpp:1987
+#, c-format
+msgid "Writing %1"
+msgstr "正在写入%1"
+
+#: kmymoney2.cpp:1994
+msgid "Error mounting device"
+msgstr "加载设备失败"
+
+#: converter/mymoneygncreader.cpp:1995 kmymoney2.cpp:2023 kmymoney2.cpp:2055
+msgid "Done"
+msgstr "已完成"
+
+#: kmymoney2.cpp:2024 kmymoney2.cpp:2057
+msgid "File successfully backed up"
+msgstr "文件已经被成功备份"
+
+#: kmymoney2.cpp:2032
+msgid "Error copying file to device"
+msgstr "拷贝文件到设备时出错"
+
+#: kmymoney2.cpp:2059
+msgid "Error unmounting device"
+msgstr "卸载设备出错"
+
+#: kmymoney2.cpp:2143
+#, c-format
+msgid "Cannot add institution: %1"
+msgstr "无法添加金融机构:%1"
+
+#: kmymoney2.cpp:2185
+#, c-format
+msgid "Unable to store institution: %1"
+msgstr "无法保存金融机构:%1"
+
+#: kmymoney2.cpp:2192
+#, c-format
+msgid "Unable to edit institution: %1"
+msgstr "无法编辑金融机构:%1"
+
+#: kmymoney2.cpp:2203
+msgid "Do you really want to delete institution <b>%1</b> ?"
+msgstr "您真的想删除金融机构<b>%1</b>吗?"
+
+#: kmymoney2.cpp:2211 kmymoney2.cpp:2215
+#, c-format
+msgid "Unable to delete institution: %1"
+msgstr "无法删除金融机构:%1"
+
+#: kmymoney2.cpp:2268
+#, fuzzy, c-format
+msgid "Unable to find account: %1"
+msgstr "无法加入账户:%1"
+
+#: kmymoney2.cpp:2309
+msgid ""
+"This account is a liability and if the opening balance represents money "
+"owed, then it should be negative. Negate the amount?\n"
+"\n"
+"Please click Yes to change the opening balance to %1,\n"
+"Please click No to leave the amount as %2,\n"
+"Please click Cancel to abort the account creation."
+msgstr ""
+"这是一个负债账户,如果想用它的余额代表您的欠款,则它应该为负。使该账户为"
+"负?\n"
+"\n"
+"如果想让该账户的余额变为%1,按“是”;\n"
+" 如果想让金额保持%2不变,按“否”;\n"
+"如果想终止创建当前账户,请按“取消”键"
+
+#: kmymoney2.cpp:2345 kmymoney2.cpp:2346
+msgid "Loan payout"
+msgstr "贷款支出"
+
+#: dialogs/knewloanwizard.cpp:892 kmymoney2.cpp:2374
+#, c-format
+msgid "Unable to add account: %1"
+msgstr "无法加入账户:%1"
+
+#: kmymoney2.cpp:2392
+msgid ""
+"The category <b>%1</b> currently does not exist. Do you want to create it?"
+"<p><i>The parent account will default to <b>%2</b> but can be changed in the "
+"following dialog</i>."
+msgstr ""
+"交易类别<b>%1</b>目前不存在。你要创建它吗? <p><i>父账户缺省将被设为<b>%2</"
+"b>,但在之后的对话框中可以修改</i>。"
+
+#: kmymoney2.cpp:2392
+msgid "Create category"
+msgstr "创建交易类别"
+
+#: kmymoney2.cpp:2429
+msgid "Create a new Category"
+msgstr "创建一个新的交易类型"
+
+#: kmymoney2.cpp:2505
+#, c-format
+msgid "Unable to create account: %1"
+msgstr "无法创建账户:%1"
+
+#: kmymoney2.cpp:2516
+msgid ""
+"The security <b>%1</b> currently does not exist as sub-account of <b>%2</b>. "
+"Do you want to create it?"
+msgstr "当前证券<b>%1</b>不作为<b>%2</b>的子账户而存在。你要创建它吗?"
+
+#: kmymoney2.cpp:2517
+#, fuzzy
+msgid "Create security"
+msgstr "删除证券"
+
+#: kmymoney2.cpp:2551
+msgid "Do you really want to delete the investment <b>%1</b>?"
+msgstr "您真的要删除投资<b>%1</b>吗?"
+
+#: kmymoney2.cpp:2551
+msgid "Delete investment"
+msgstr "删除投资"
+
+#: kmymoney2.cpp:2558
+#, c-format
+msgid "Unable to delete investment: %1"
+msgstr "无法删除投资:%1"
+
+#: kmymoney2.cpp:2640 kmymoney2.cpp:2646
+#, fuzzy
+msgid "Unable to add scheduled transaction: "
+msgstr "无法添加交易"
+
+#: kmymoney2.cpp:2722
+#, fuzzy
+msgid "Adjusting transactions..."
+msgstr "正在调整交易..."
+
+#: kmymoney2.cpp:2747
+#, fuzzy
+msgid "Adjusting scheduled transactions..."
+msgstr "正在调整交易..."
+
+#: kmymoney2.cpp:2765
+#, fuzzy
+msgid "Adjusting budgets..."
+msgstr "正在调整预算..."
+
+#: kmymoney2.cpp:2783
+msgid ""
+"Unable to exchange category <b>%1</b> with category <b>%2</b>. Reason: %3"
+msgstr "无法交换类别<b>%1</b>和<b>%2</b>。原因是:%3"
+
+#: kmymoney2.cpp:2804
+msgid "Do you really want to delete category <b>%1</b>?"
+msgstr "您真的要删除交易类别<b>%1</b>吗?"
+
+#: kmymoney2.cpp:2811
+msgid "Unable to delete category <b>%1</b>. Cause: %2"
+msgstr "无法删除交易类别<b>%1</b>。原因:%2"
+
+#: kmymoney2.cpp:2823
+msgid ""
+"Do you want to delete category <b>%1</b> with all its sub-categories or only "
+"the category itself? If you only delete the category itself, all its sub-"
+"categories will be made sub-categories of <b>%2</b>."
+msgstr ""
+"你希望只删除交易类别<b>%1</b>本身,还是连同它的子类别一起删除?如果你只删除它"
+"本身, 那么它的全部子类别都会成为<b>%2</b>的子类别。"
+
+#: kmymoney2.cpp:2827
+msgid "Delete all"
+msgstr "全部删除"
+
+#: kmymoney2.cpp:2828
+msgid "Just the category"
+msgstr "只是该类别"
+
+#: kmymoney2.cpp:2858
+msgid ""
+"Some sub-categories of category <b>%1</b> cannot be deleted, because they "
+"are still used. They will be made sub-categories of <b>%2</b>. Proceed?"
+msgstr ""
+"交易类别<b>%1</b>的部分子类别无法被删除,因为它们还在被使用。它们将会 成为<b>"
+"%2</b>的子类别。是否继续?"
+
+#: kmymoney2.cpp:2878
+msgid "Unable to delete a sub-category of category <b>%1</b>. Reason: %2"
+msgstr "无法删除交易类别<b>%1</b>的一个子类别。原因:%2"
+
+#: kmymoney2.cpp:2889
+msgid "Do you really want to delete account <b>%1</b>?"
+msgstr "您真的要删除账户<b>%1</b>吗?"
+
+#: kmymoney2.cpp:2901
+msgid "Unable to delete account '%1'. Cause: %2"
+msgstr "无法删除账户“%1”。原因:%2"
+
+#: kmymoney2.cpp:2917
+msgid "Edit account '%1'"
+msgstr "编辑账户“%1”"
+
+#: kmymoney2.cpp:2922
+msgid "Edit category '%1'"
+msgstr "编辑交易类别“%1”"
+
+#: kmymoney2.cpp:3008
+msgid "Unable to modify account '%1'. Cause: %2"
+msgstr "无法修改账户“%1”。原因:%2"
+
+#: kmymoney2.cpp:3065
+#, fuzzy
+msgid ""
+"KMyMoney has detected some overdue scheduled transactions for this account. "
+"Do you want to enter those scheduled transactions now?"
+msgstr "KMyMoney检测到此账户存在过期计划。现在是否应该输入这些计划的交易?"
+
+#: kmymoney2.cpp:3065
+msgid "Scheduled transactions found"
+msgstr "发现计划交易"
+
+#: kmymoney2.cpp:3163
+msgid ""
+"You are about to finish the reconciliation of this account with a difference "
+"between your bank statement and the transactions marked as cleared.\n"
+"Are you sure you want to finish the reconciliation ?"
+msgstr ""
+"你将要完成此账户的对账,而在银行的对账单和已清算的账户交易之间还存在差额。\n"
+"您确认要完成此次对账吗?"
+
+#: kmymoney2.cpp:3165
+msgid "Confirm end of reconciliation"
+msgstr "确认对账结束"
+
+#: kmymoney2.cpp:3339
+msgid ""
+"You have closed this account. It remains in the system because you have "
+"transactions which still refer to it, but is not shown in the views. You can "
+"make it visible again by going to the View menu and selecting <b>Show all "
+"accounts</b> or by unselecting the <b>Don't show closed accounts</b> setting."
+msgstr ""
+"你已经关闭此账户。由于仍有交易指向该账户,因此它仍然留在系统中,只是不显示在 "
+"视图里。你可以通过选择“视图”菜单里的“显示所有账户”项,或者在设置中取消“不显"
+"示 关闭的账户”选项,来让它重新可见。"
+
+#: kmymoney2.cpp:3379
+msgid "<b>%1</b> cannot be moved to institution <b>%2</b>. Reason: %3"
+msgstr "<b>%1</b>无法被移动到金融机构<b>%2</b>。原因: %3"
+
+#: kmymoney2.cpp:3393
+msgid "<b>%1</b> cannot be moved to <b>%2</b>. Reason: %3"
+msgstr "<b>%1</b>无法被移动到<b>%2</b>. 原因: %3"
+
+#: kmymoney2.cpp:3408
+msgid "%1 YTD Account Transactions"
+msgstr "%1 YTD账户交易"
+
+#: dialogs/kbalancechartdlg.cpp:71 kmymoney2.cpp:3409
+#: views/kforecastview.cpp:650 views/khomeview.cpp:276
+#: views/khomeview.cpp:1384 views/kreportsview.cpp:619
+msgid "Generated Report"
+msgstr "生成报表?"
+
+#: dialogs/rc.cpp:324 dialogs/settings/rc.cpp:80 kmymoney2.cpp:3411
+#: views/kreportsview.cpp:1062 views/rc.cpp:58 views/rc.cpp:59
+msgid "Transactions"
+msgstr "交易数目"
+
+#: kmymoney2.cpp:3449
+#, fuzzy, c-format
+msgid "Unable to add scheduled transaction: %1"
+msgstr "无法添加交易计划:%1"
+
+#: kmymoney2.cpp:3449
+#, fuzzy
+msgid "Add scheduled transaction"
+msgstr "输入预定交易"
+
+#: kmymoney2.cpp:3489
+#, fuzzy
+msgid ""
+"You have entered a scheduled transaction date of <b>%1</b>. Because the "
+"scheduled transaction was last paid on <b>%2</b>, KMyMoney will "
+"automatically adjust the scheduled transaction date to the next date unless "
+"the last payment date is reset. Do you want to reset the last payment date?"
+msgstr ""
+"你输入的计划日期为<b>%1</b>。由于本交易计划已在<b>%2</b>发生了上一期支付,"
+"KMyMoney会自动按下期支付日期来调整计划日期,除非对上期支付的日期进行重置。是"
+"否要重置上期支付日期?"
+
+#: kmymoney2.cpp:3489
+msgid "Reset Last Payment Date"
+msgstr "重置上次支付日期"
+
+#: kmymoney2.cpp:3499 kmymoney2.cpp:3519 kmymoney2.cpp:3531
+#, fuzzy
+msgid "Unable to modify scheduled transaction '%1'"
+msgstr "无法修改交易计划“%1”"
+
+#: kmymoney2.cpp:3543
+#, fuzzy
+msgid "Are you sure you want to delete the scheduled transaction <b>%1</b>?"
+msgstr "您确定要删除选中的计划<b>%1</b>?"
+
+#: kmymoney2.cpp:3546
+#, fuzzy
+msgid ""
+"In case of loan payments it is currently not possible to recreate the "
+"scheduled transaction."
+msgstr "目前尚无法重新创建贷款分期偿还的计划"
+
+#: kmymoney2.cpp:3555
+#, fuzzy
+msgid "Unable to remove scheduled transaction '%1'"
+msgstr "无法删除交易计划“%1”"
+
+#: kmymoney2.cpp:3569
+#, fuzzy, c-format
+msgid ""
+"_: Copy of scheduled transaction name\n"
+"Copy of %1"
+msgstr "%1的副本"
+
+#: kmymoney2.cpp:3581 kmymoney2.cpp:4352
+msgid "Unable to duplicate transaction(s): %1, thrown in %2:%3"
+msgstr "无法复制交易:%1,发生于%2:%3"
+
+#: kmymoney2.cpp:3595
+#, fuzzy
+msgid ""
+"Do you really want to skip the <b>%1</b> transaction scheduled for <b>%2</b>?"
+msgstr "您真的要跳过计划<b>%1</b>在<b>%2</b>的交易吗?"
+
+#: kmymoney2.cpp:3605
+#, fuzzy
+msgid "Unable to skip scheduled transaction <b>%1</b>."
+msgstr "无法跳过交易计划<b>%1</b>。"
+
+#: kmymoney2.cpp:3618
+#, fuzzy
+msgid "Unknown scheduled transaction '%1'"
+msgstr "未知交易计划“%1”"
+
+#: kmymoney2.cpp:3673
+#, fuzzy
+msgid ""
+"Are you sure you wish to stop this scheduled transaction from being entered "
+"into the register?\n"
+"\n"
+"KMyMoney will prompt you again next time it starts unless you manually enter "
+"it later."
+msgstr ""
+"您确定要停止将此计划录入账簿吗?除非您执行了手工录入,否则下次KMyMoney启动时"
+"还会再次提醒您。"
+
+#: kmymoney2.cpp:3725 kmymoney2.cpp:3732
+#, fuzzy
+msgid "Unable to enter scheduled transaction '%1'"
+msgstr "输入预定交易"
+
+#: kmymoney2.cpp:3743 kmymoney2.cpp:3783
+msgid "New Payee"
+msgstr "新建收款人"
+
+#: kmymoney2.cpp:3745
+msgid "Do you want to add <b>%1</b> as payer/receiver ?"
+msgstr "你要将“<b>%1</b>”加为付/收款人吗?"
+
+#: converter/mymoneystatementreader.cpp:892 kmymoney2.cpp:3747
+msgid "New payee/receiver"
+msgstr "新建收款人"
+
+#: kmymoney2.cpp:3773
+msgid "Unable to add payee"
+msgstr "无法创建收款人"
+
+#: kmymoney2.cpp:3826
+msgid "Do you really want to remove the payee <b>%1</b>?"
+msgstr "您真的要删除收款人<b>%1</b>吗?"
+
+#: kmymoney2.cpp:3828
+msgid "Do you really want to remove all selected payees?"
+msgstr "您真的要删除所有选中的付款人吗?"
+
+#: kmymoney2.cpp:3830
+msgid "Remove Payee"
+msgstr "删除收款人"
+
+#: kmymoney2.cpp:3870
+#, fuzzy
+msgid ""
+"At least one transaction/scheduled transaction is still referenced by a "
+"payee. Currently you have all payees selected. However, at least one payee "
+"must remain so that the transaction/scheduled transaction can be reassigned."
+msgstr ""
+"至少一项交易/交易计划还在被一个付款人所引用。目前你选中了全部付款人,但必须还"
+"剩下至少一个收款人,以使这些交易/交易计划能够被重新指定。"
+
+#: kmymoney2.cpp:3925
+msgid "Unable to reassign payee of transaction/split"
+msgstr "无法重新指定交易/划分的收/付款人"
+
+#: converter/mymoneyqifreader.cpp:534 converter/mymoneystatementreader.cpp:959
+#: kmymoney2.cpp:3926 kmymoney2.cpp:3983 views/kbudgetview.cpp:636
+#: views/kbudgetview.cpp:737 views/kbudgetview.cpp:751
+#: views/kpayeesview.cpp:519 views/kpayeesview.cpp:870
+msgid "thrown in"
+msgstr "thrown in"
+
+#: kmymoney2.cpp:3982
+msgid "Unable to remove payee(s)"
+msgstr "无法删除收/付款人"
+
+#: kmymoney2.cpp:3990
+msgid "Enter ISO 4217 code for the new currency"
+msgstr "输入新货币的ISO4217代码"
+
+#: kmymoney2.cpp:3999
+#, c-format
+msgid "Cannot create new currency. %1"
+msgstr "无法创建新货币。%1"
+
+#: kmymoney2.cpp:4021 kmymoney2.cpp:4026
+#, c-format
+msgid "Cannot rename currency. %1"
+msgstr "无法重命名货币。%1"
+
+#: kmymoney2.cpp:4039
+msgid "Cannot delete currency %1. %2"
+msgstr "无法删除货币%1。%2"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Cannot set %1 as base currency: %2"
+msgstr "无法将%1选择为基准货币:%2。"
+
+#: kmymoney2.cpp:4054 views/kmymoneyview.cpp:1275
+msgid "Set base currency"
+msgstr "选择基准货币"
+
+#: kmymoney2.cpp:4065
+#, c-format
+msgid "Budget %1"
+msgstr "预算%1"
+
+#: kmymoney2.cpp:4075
+msgid "Budget %1 (%2)"
+msgstr "预算%1(%2)"
+
+#: kmymoney2.cpp:4090 kmymoney2.cpp:4139
+msgid "Unable to add budget: %1, thrown in %2:%3"
+msgstr "无法新建预算:%1,发生于%2:%3"
+
+#: kmymoney2.cpp:4105
+msgid "Do you really want to remove the budget <b>%1</b>?"
+msgstr "您真的要删除预算<b>%1</b>?"
+
+#: kmymoney2.cpp:4107
+msgid "Do you really want to remove all selected budgets?"
+msgstr "您真的要删除所有选中的预算吗?"
+
+#: kmymoney2.cpp:4109
+msgid "Remove Budget"
+msgstr "删除预算"
+
+#: kmymoney2.cpp:4122
+msgid "Unable to remove budget: %1, thrown in %2:%3"
+msgstr "无法删除预算:%1,发生于%2:%3"
+
+#: kmymoney2.cpp:4134 views/kreportsview.cpp:659
+#, c-format
+msgid "Copy of %1"
+msgstr "%1的副本"
+
+#: kmymoney2.cpp:4164
+msgid "Select year"
+msgstr "选择年份"
+
+#: kmymoney2.cpp:4164
+msgid "Budget year"
+msgstr "预算年份"
+
+#: kmymoney2.cpp:4176 kmymoney2.cpp:4214 kmymoney2.cpp:4274
+msgid "Unable to modify budget: %1, thrown in %2:%3"
+msgstr "无法编辑预算:%1,发生于%2:%3"
+
+#: kmymoney2.cpp:4192 kmymoney2.cpp:4250
+msgid ""
+"The current budget already contains data. Continuing will replace all "
+"current values of this budget."
+msgstr "当前预算中已经包含数据。继续的话,将会替换该预算的所有现有值。"
+
+#: kmymoney2.cpp:4222
+msgid ""
+"Please be aware that changes made in the following dialog affect all KDE "
+"applications not only KMyMoney."
+msgstr ""
+"请注意,在随后的对话框中做出的修改,将会影响包括KMyMoney在内的所有KDE应用程"
+"序。"
+
+#: kmymoney2.cpp:4292
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to delete the transactions anyway?"
+msgstr "选中交易里的至少一项拆分已经完成了对帐。您确定还是要删除这些交易吗?"
+
+#: kmymoney2.cpp:4295 views/kgloballedgerview.cpp:1043
+msgid "Transaction already reconciled"
+msgstr "已对帐交易"
+
+#: kmymoney2.cpp:4301
+msgid "Do you really want to delete the selected transaction?"
+msgstr "您真的要删除选中的交易吗?"
+
+#: kmymoney2.cpp:4303
+msgid "Do you really want to delete all %1 selected transactions?"
+msgstr "您真的要删除所有%1选中的交易吗?"
+
+#: kmymoney2.cpp:4305
+msgid "Delete transaction"
+msgstr "删除交易"
+
+#: kmymoney2.cpp:4306
+msgid "Deleting transactions"
+msgstr "正在删除交易"
+
+#: kmymoney2.cpp:4321
+msgid "Duplicating transactions"
+msgstr "正在复制交易"
+
+#: kmymoney2.cpp:4378
+msgid "Unable to delete transaction(s): %1, thrown in %2:%3"
+msgstr "无法删除交易:%1,发生于%2:%3"
+
+#: kmymoney2.cpp:4452 kmymoney2.cpp:4622
+msgid "Unable to modify transaction: %1, thrown in %2:%3"
+msgstr "无法修改交易:%1,发生于%2:%3"
+
+#: kmymoney2.cpp:4514
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling and<br>- <b>Cancel</b> returns to the "
+"transaction editor.<p>You can also select an option to save the transaction "
+"automatically when e.g. selecting another transaction."
+msgstr ""
+"你对本交易的修改尚未保存,是否取消?<p>- <b>是</b>取消对交易的修改并退出"
+"<br>- <b>否</b>在保存对交易的修改并退出<br>- <b>Cancel</b>返回交易编辑器<p>您"
+"可以通过选项的设置来在诸如选择其他交易等情况时,自动保存交易修改。"
+
+#: kmymoney2.cpp:4514 kmymoney2.cpp:4517
+msgid "Cancel transaction edit"
+msgstr "取消交易编辑"
+
+#: kmymoney2.cpp:4517
+msgid ""
+"Do you really want to cancel editing this transaction without saving it?<p>- "
+"<b>Yes</b> cancels editing the transaction<br>- <b>No</b> saves the "
+"transaction prior to cancelling.<p>You can also select an option to save the "
+"transaction automatically when e.g. selecting another transaction."
+msgstr ""
+"你对本交易的修改尚未保存,是否取消?<p>- <b>是</b>取消对交易的修改并退出"
+"<br>- <b>否</b>在保存对交易的修改并退出。<p>您可以通过选项的设置来在诸如选择"
+"其他交易等情况时,自动保存交易修改。"
+
+#: kmymoney2.cpp:4667
+msgid "Unable to accept transaction: %1, thrown in %2:%3"
+msgstr "无法接受交易:%1,发生于%2:%3"
+
+#: kmymoney2.cpp:4846
+msgid "Unable to unmatch the selected transactions"
+msgstr "无法取消选中交易的匹配"
+
+#: kmymoney2.cpp:4885
+msgid "No manually entered transaction selected for matching"
+msgstr "未选择要进行匹配的手工输入交易"
+
+#: kmymoney2.cpp:4887
+msgid "No imported transaction selected for matching"
+msgstr "未选中要匹配的导入交易"
+
+#: kmymoney2.cpp:4895
+msgid "Unable to match the selected transactions"
+msgstr "无法匹配选中的交易"
+
+#: kmymoney2.cpp:5097
+msgid "Create a new transaction"
+msgstr "新建交易"
+
+#: kmymoney2.cpp:5163
+msgid "Duplicate the current selected transactions"
+msgstr "复制当前选中的交易"
+
+#: kmymoney2.cpp:5223
+#, fuzzy
+msgid ""
+"_: Button text for unmatch transaction\n"
+"Unmatch"
+msgstr "匹配"
+
+#: kmymoney2.cpp:5451 kmymoney2.cpp:5473
+msgid "Goto '%1'"
+msgstr "跳转到“%1”"
+
+#: kmymoney2.cpp:5582
+msgid "Running consistency check..."
+msgstr "正在执行一致性检查..."
+
+#: kmymoney2.cpp:5590
+#, c-format
+msgid "Consistency check failed: %1"
+msgstr "一致性检查失败:%1"
+
+#: kmymoney2.cpp:5594
+msgid "Consistency check result"
+msgstr "一致性检查结果"
+
+#: kmymoney2.cpp:5603
+#, fuzzy
+msgid "Checking for overdue scheduled transactions..."
+msgstr "正在检查过期计划..."
+
+#: kmymoney2.cpp:5740
+msgid ""
+"You must first select a KMyMoney file before you can import a statement."
+msgstr "在导入对帐单前,您首先必须选择一个KMyMoney文件。"
+
+#: kmymoney2.cpp:5746
+msgid "Importing a statement via Web Connect"
+msgstr "通过互联网导入对帐单"
+
+#: kmymoney2.cpp:5759
+msgid ""
+"Unable to import %1 using %2 plugin. The plugin returned the following "
+"error: %3"
+msgstr "使用%2插件导入%1出错:%3。导入失败。"
+
+#: kmymoney2.cpp:5759 plugins/ofximport/ofximporterplugin.cpp:646
+msgid "Importing error"
+msgstr "导入出错"
+
+#: kmymoney2.cpp:5780
+msgid "All messages have been enabled."
+msgstr "已打开全部信息提示。"
+
+#: kmymoney2.cpp:5780
+msgid "All messages"
+msgstr "全部信息"
+
+#: kmymoney2.cpp:5855
+#, fuzzy
+msgid "Auto saving..."
+msgstr "正在自动保存..."
+
+#: kmymoney2.cpp:5913
+msgid "Unable to setup online parameters for account ''%1'"
+msgstr "无法为账户“%1”设立网银参数"
+
+#: kmymoney2.cpp:5928
+msgid ""
+"Do you really want to remove the mapping of account <b>%1</b> to an online "
+"account? Depending on the details of the online banking method used, this "
+"action cannot be reverted."
+msgstr ""
+"你真的要删除账户<b>%1</b>到网上银行的映射吗?因为某些网上银行的限制,这项操作"
+"是不可撤销的。"
+
+#: kmymoney2.cpp:5928
+msgid "Remove mapping to online account"
+msgstr "删除到网上账户的映射"
+
+#: kmymoney2.cpp:5939
+#, c-format
+msgid "Unable to unmap account from online account: %1"
+msgstr "无法将取消到到网银账户的映射:%1"
+
+#: kmymoney2.cpp:5956
+#, fuzzy
+msgid " (Brokerage)"
+msgstr "%1(托管)"
+
+#: kmymoney2.cpp:5957
+msgid ""
+"You try to map a brokerage account to an online account. This is usually not "
+"advisable. In general, the investment account should be mapped to the online "
+"account. Please cancel if you intended to map the investment account, "
+"continue otherwise"
+msgstr ""
+
+#: kmymoney2.cpp:5957
+#, fuzzy
+msgid "Mapping brokerage account"
+msgstr "创建托管账户"
+
+#: kmymoney2.cpp:5964
+msgid "Select online banking plugin"
+msgstr "选择网银插件"
+
+#: kmymoney2.cpp:6005
+#, c-format
+msgid "Unable to map account to online account: %1"
+msgstr "无法将账户映射到网银账户:%1"
+
+#: converter/mymoneyqifreader.cpp:407 converter/mymoneytemplate.cpp:73
+#: views/kmymoneyview.cpp:590
+msgid "Error while loading file '%1'!"
+msgstr "载入文件“%1”时出错!"
+
+#: converter/mymoneyqifreader.cpp:409 converter/mymoneyqifreader.cpp:965
+#: converter/mymoneytemplate.cpp:75 views/kmymoneyview.cpp:592
+msgid "File access error"
+msgstr "文件访问出错"
+
+#: converter/mymoneytemplate.cpp:84
+msgid "<b>%1</b> is not a template file."
+msgstr "<b>%1</b>不是一个模板文件。"
+
+#: converter/mymoneytemplate.cpp:85 views/kmymoneyview.cpp:603
+msgid "Filetype Error"
+msgstr "文件类型错误"
+
+#: converter/mymoneytemplate.cpp:93
+msgid "Error while reading template file <b>%1</b> in line %2, column %3"
+msgstr "在读取模板文件%1第%2行第%3列时出错"
+
+#: converter/mymoneytemplate.cpp:94
+msgid "Template Error"
+msgstr "模板出错"
+
+#: converter/mymoneytemplate.cpp:101
+msgid "File '%1' not found!"
+msgstr "找不到文件“%1”"
+
+#: converter/mymoneytemplate.cpp:142
+msgid "Invalid tag <b>%1</b> in template file <b>%2</b>!"
+msgstr "模板文件<b>%2</b>中包含错误的标签<b>%1</b>!"
+
+#: converter/mymoneytemplate.cpp:214
+#, c-format
+msgid "Loading template %1"
+msgstr "正在载入模板%1"
+
+#: converter/mymoneytemplate.cpp:241
+msgid "Invalid top-level account type <b>%1</b> in template file <b>%2</b>!"
+msgstr "在模板文件 <b>%2</b>中出现非法的顶层账户类型<b>%1</b>"
+
+#: converter/mymoneytemplate.cpp:309
+msgid ""
+"Invalid flag type <b>%1</b> for account <b>%3</b> in template file <b>%2</b>!"
+msgstr "在模板文件 <b>%2</b>的账户<b>%3</b>出现非法标志类型<b>%1</b>!"
+
+#: converter/mymoneytemplate.cpp:398 converter/mymoneytemplate.cpp:401
+#: views/kmymoneyview.cpp:1151 views/kmymoneyview.cpp:1154
+msgid "Unable to write changes to '%1'"
+msgstr "无法将修改写入“%1”"
+
+#: converter/mymoneytemplate.cpp:407 views/kmymoneyview.cpp:1162
+msgid "Unable to upload to '%1'"
+msgstr "无法上传到“%1”"
+
+#: converter/mymoneyqifwriter.cpp:70
+msgid ""
+"Unexpected exception '%1' thrown in %2, line %3 caught in MyMoneyQifWriter::"
+"write()"
+msgstr ""
+"Unexpected exception '%1' thrown in %2, line %3 caught in MyMoneyQifWriter::"
+"write()"
+
+#: converter/mymoneyqifwriter.cpp:80
+msgid "Unable to open file '%1' for writing"
+msgstr "无法为写入操作打开文件“%1”。"
+
+#: converter/webpricequote.cpp:340
+#, c-format
+msgid "Symbol found: %1"
+msgstr "找到代号:%1"
+
+#: converter/webpricequote.cpp:368
+msgid "Price found: %1 (%2)"
+msgstr "找到价格:%1(%2)"
+
+#: converter/webpricequote.cpp:380
+#, c-format
+msgid "Date found: %1"
+msgstr "找到日期:%1"
+
+#: converter/webpricequote.cpp:397 converter/webpricequote.cpp:403
+#, c-format
+msgid "Unable to update price for %1"
+msgstr "无法更新%1的价格"
+
+#: converter/mymoneyqifreader.cpp:170
+#, fuzzy
+msgid ""
+"_: Category name\n"
+"Reinvested dividend"
+msgstr "将红利继续用于投资"
+
+#: converter/mymoneyqifreader.cpp:173
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (long term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:176
+msgid ""
+"_: Category name\n"
+"Reinvested dividend (short term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:179
+msgid ""
+"_: Category name\n"
+"Dividend"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:182
+msgid ""
+"_: Category name\n"
+"Interest"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:185
+msgid ""
+"_: Category name\n"
+"Capital Gain (short term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:188
+msgid ""
+"_: Category name\n"
+"Capital Gain (mid term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:191
+msgid ""
+"_: Category name\n"
+"Capital Gain (long term)"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:194
+msgid ""
+"_: Category name\n"
+"Returned capital"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:197
+msgid ""
+"_: Category name\n"
+"Miscellaneous income"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:200
+msgid ""
+"_: Category name\n"
+"Miscellaneous expense"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:203
+msgid ""
+"_: Category name\n"
+"Investment fees"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:205
+#, fuzzy, c-format
+msgid "Unknown QIF type %1"
+msgstr "未知收款人"
+
+#: converter/mymoneyqifreader.cpp:355
+#, fuzzy
+msgid "Date format selection"
+msgstr "选择交易类别"
+
+#: converter/mymoneyqifreader.cpp:355
+msgid "Pick the date format that suits your input file"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:366
+#, fuzzy
+msgid "Importing QIF ..."
+msgstr "导入文件..."
+
+#: converter/mymoneyqifreader.cpp:442
+#, fuzzy
+msgid "Reading QIF ..."
+msgstr "QIF..."
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Adding transactions"
+msgstr "添加交易"
+
+#: converter/mymoneyqifreader.cpp:507
+msgid "Now adding the transactions to your ledger..."
+msgstr "现在正在向您的分类账簿中添加交易..."
+
+#: converter/mymoneyqifreader.cpp:533
+msgid "Unable to add transactions"
+msgstr "无法添加交易"
+
+#: converter/mymoneyqifreader.cpp:567
+msgid ""
+"_: QIF tag for liability account\n"
+"Oth L"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:572
+#, fuzzy
+msgid ""
+"_: QIF tag for category\n"
+"Cat"
+msgstr "增值税"
+
+#: converter/mymoneyqifreader.cpp:575
+msgid ""
+"_: QIF tag for security\n"
+"Security"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:578
+#, fuzzy
+msgid ""
+"_: QIF tag for investment account\n"
+"Invst"
+msgstr "仅包含投资账户"
+
+#: converter/mymoneyqifreader.cpp:581
+msgid ""
+"_: QIF tag for prices\n"
+"Prices"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:599
+msgid ""
+"_: QIF tag for a class\n"
+"Class"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:753 converter/mymoneyqifreader.cpp:2203
+msgid ""
+"The %1 account currently has an opening balance of %2. This QIF file reports "
+"an opening balance of %3. Would you like to overwrite the current balance "
+"with the one from the QIF file?"
+msgstr ""
+"账户%1当前余额为%2。而此QIF文件中的余额为%3.您想用QIF中的金额覆盖当前账户余额"
+"吗?"
+
+#: converter/mymoneyqifreader.cpp:754 converter/mymoneyqifreader.cpp:2204
+msgid "Overwrite opening balance"
+msgstr "覆盖账户余额"
+
+#: converter/mymoneyqifreader.cpp:879 converter/mymoneyqifreader.cpp:890
+#: converter/mymoneyqifreader.cpp:914
+msgid "Autogenerated by QIF importer"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:907
+#, fuzzy
+msgid "QIF imported, no account name supplied"
+msgstr "未提供账户名"
+
+#: converter/mymoneyqifreader.cpp:940
+msgid ""
+"KMyMoney has imported a second opening balance transaction into account <b>%"
+"1</b> which differs from the one found already on file. Please correct this "
+"manually once the import is done."
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:940
+#, fuzzy
+msgid "Opening balance problem"
+msgstr "开户余额"
+
+#: converter/mymoneyqifreader.cpp:963
+#, fuzzy
+msgid "Error while creating opening balance transaction"
+msgstr "编辑当前选择的交易"
+
+#: converter/mymoneyqifreader.cpp:1029 converter/mymoneyqifreader.cpp:1276
+msgid ""
+"The date entry \"%1\" read from the file cannot be interpreted through the "
+"current date profile setting of \"%2\".\n"
+"\n"
+"Pressing \"Continue\" will assign todays date to the transaction. Pressing "
+"\"Cancel\" will abort the import operation. You can then restart the import "
+"and select a different QIF profile or create a new one."
+msgstr ""
+"从文件中读取的日期项“%1”无法被当前日期设置“%2”处理。\n"
+"\n"
+"按“继续”键,将交易日期修改为今天的日期;\n"
+"按“取消”键会终止导入操作。 您可以用其它QIF配置或者新建一个配置来重新导入。"
+
+#: converter/mymoneyqifreader.cpp:1035 converter/mymoneyqifreader.cpp:1282
+msgid "Invalid date format"
+msgstr "非法日期格式"
+
+#: converter/mymoneyqifreader.cpp:1398
+#: converter/mymoneystatementreader.cpp:589
+#: converter/mymoneystatementreader.cpp:592
+msgid "Statement Importer"
+msgstr "对帐单导入器"
+
+#: converter/mymoneyqifreader.cpp:1413
+#: converter/mymoneystatementreader.cpp:644
+msgid ""
+"This investment account does not contain the \"%1\" security. Transactions "
+"involving this security will be ignored."
+msgstr "此投资账户内未包含证券“%1”。关于此证券的交易将被忽略。"
+
+#: converter/mymoneyqifreader.cpp:1415
+#: converter/mymoneystatementreader.cpp:612
+#: converter/mymoneystatementreader.cpp:644
+msgid "Security not found"
+msgstr "未找到证券。"
+
+#: converter/mymoneyqifreader.cpp:2021
+#, fuzzy
+msgid "%1 (Investment)"
+msgstr "投资账户"
+
+#: converter/mymoneyqifreader.cpp:2022
+msgid "Autogenerated by QIF importer from type Mutual account entry"
+msgstr ""
+
+#: converter/mymoneyqifreader.cpp:2085 converter/mymoneyqifreader.cpp:2228
+msgid "account"
+msgstr "账户"
+
+#: converter/mymoneyqifreader.cpp:2086
+msgid "al"
+msgstr "al"
+
+#: converter/mymoneyqifreader.cpp:2093
+msgid "category"
+msgstr "交易类别"
+
+#: converter/mymoneyqifreader.cpp:2094
+msgid "ei"
+msgstr "ei"
+
+#: converter/mymoneyqifreader.cpp:2095
+msgid "Category selection"
+msgstr "选择交易类别"
+
+#: converter/mymoneyqifreader.cpp:2110
+msgid "Account \"%1\" disappeared: "
+msgstr "账户“%1”已消失:"
+
+#: converter/mymoneyqifreader.cpp:2131
+msgid "The %1 '%2' does not exist. Do you want to create it?"
+msgstr "%1\"%2\"不存在。是否需要创建它?"
+
+#: converter/mymoneyqifreader.cpp:2140
+#, c-format
+msgid "Select %1"
+msgstr "选择%1"
+
+#: converter/mymoneyqifreader.cpp:2142
+msgid ""
+"The %1 <b>%2</b> currently exists. Do you want to import transactions to "
+"this account?"
+msgstr "%1<b>%2</b>存在。您想要将交易导入此账户吗?"
+
+#: converter/mymoneyqifreader.cpp:2147
+msgid ""
+"The %1 <b>%2</b> currently does not exist. You can create a new %3 by "
+"pressing the <b>Create</b> button or select another %4 manually from the "
+"selection box."
+msgstr ""
+"%1 <b>%2</b>目前不存在。您可以点击<b>“新建”</b> 按钮以创建一个新的%3,或者从"
+"下面的选择框中手工选择一个。"
+
+#: converter/mymoneyqifreader.cpp:2154
+#, c-format
+msgid "Import transactions to %1"
+msgstr "将交易导入%1"
+
+#: converter/mymoneyqifreader.cpp:2155
+msgid ""
+"No %1 information has been found in the selected QIF file. Please select an "
+"account using the selection box in the dialog or create a new %2 by pressing "
+"the <b>Create</b> button."
+msgstr ""
+"在选中的QIF文件中找不到%1的信息。请在对话框里的选择框中选择一个账户,或者点击"
+"<b>“新建”</b>按钮新建一个。"
+
+#: converter/mymoneyqifreader.cpp:2229
+msgid "You must select or create an account."
+msgstr "您必须选择或者创建一个账户。"
+
+#: converter/mymoneyqifreader.cpp:2231
+msgid "You must select or create a category."
+msgstr "您必须选择或者创建一个交易类别。"
+
+#: converter/mymoneystatementreader.cpp:100
+msgid "_Fees"
+msgstr "费用"
+
+#: converter/mymoneystatementreader.cpp:106
+msgid "_Dividend"
+msgstr "红利"
+
+#: converter/mymoneystatementreader.cpp:289
+#, c-format
+msgid "Importing statement for account %1"
+msgstr "导入账户%1的对帐单"
+
+#: converter/mymoneystatementreader.cpp:291
+#, fuzzy
+msgid "Importing statement without transactions"
+msgstr "导入账户%1的对帐单"
+
+#: converter/mymoneystatementreader.cpp:385
+msgid " Statement balance is not contained in statement."
+msgstr "在对帐单中未包含期末余额。"
+
+#: converter/mymoneystatementreader.cpp:387
+msgid " Statement balance on %1 is reported to be %2"
+msgstr "对帐单报告账户%1的余额是%2"
+
+#: converter/mymoneystatementreader.cpp:389
+msgid " Transactions"
+msgstr "交易"
+
+#: converter/mymoneystatementreader.cpp:390
+msgid " %1 processed"
+msgstr "%1项已处理"
+
+#: converter/mymoneystatementreader.cpp:391
+msgid " %1 added"
+msgstr "%1项已添加"
+
+#: converter/mymoneystatementreader.cpp:392
+msgid " %1 matched"
+msgstr "%1项匹配"
+
+#: converter/mymoneystatementreader.cpp:393
+msgid " %1 duplicates"
+msgstr "%1项重复"
+
+#: converter/mymoneystatementreader.cpp:394
+msgid " Payees"
+msgstr "收/付款人"
+
+#: converter/mymoneystatementreader.cpp:395
+msgid " %1 created"
+msgstr "%1项已创建"
+
+#: converter/mymoneystatementreader.cpp:483
+#, c-format
+msgid "Error creating security record: %1"
+msgstr "创建证券记录时出错:%1"
+
+#: converter/mymoneystatementreader.cpp:612
+msgid ""
+"This imported statement contains investment transactions with no security. "
+"These transactions will be ignored."
+msgstr "导入的报表中包含没有证券的投资交易。这些交易将被忽略。"
+
+#: converter/mymoneystatementreader.cpp:803
+msgid "(Fees) "
+msgstr "(费用)"
+
+#: converter/mymoneystatementreader.cpp:880
+msgid ""
+"Do you want to add \"%1\" as payee/receiver?\n"
+"\n"
+msgstr "您想将“%1”添加为收款人吗?\n"
+
+#: converter/mymoneystatementreader.cpp:881
+msgid ""
+"Selecting \"Yes\" will create the payee, \"No\" will skip creation of a "
+"payee record and remove the payee information from this transaction. "
+"Selecting \"Cancel\" aborts the import operation.\n"
+"\n"
+"If you select \"No\" here and mark the \"Don't ask again\" checkbox, the "
+"payee information for all following transactions referencing \"%1\" will be "
+"removed."
+msgstr ""
+"选择“是”将会创建收款人;选择“否”将会跳过收款人创建,并且删除当前的收款人信"
+"息; \n"
+"选择“取消”中止导入操作。\n"
+"\n"
+"如果您选择“否”并且选中了“不再提问”复选框,接下来所有使用“%1”作为收款人的交易"
+"记录,它们的收款人信息都会被删除。"
+
+#: converter/mymoneystatementreader.cpp:917
+#, fuzzy
+msgid "Save Category"
+msgstr "费用交易类别"
+
+#: converter/mymoneystatementreader.cpp:918
+#, fuzzy
+msgid "No Category"
+msgstr "顶级交易类别"
+
+#: converter/mymoneystatementreader.cpp:919 dialogs/rc.cpp:4
+msgid "Abort"
+msgstr "中止"
+
+#: converter/mymoneystatementreader.cpp:926
+msgid "Please select a default category for payee '%1':"
+msgstr ""
+
+#: converter/mymoneystatementreader.cpp:958
+msgid "Unable to add payee/receiver"
+msgstr "无法添加收款人"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid ""
+"KMyMoney has found a scheduled transaction named <b>%1</b> which matches an "
+"imported transaction. Do you want KMyMoney to enter this schedule now so "
+"that the transaction can be matched? "
+msgstr ""
+"KMyMoney已经找到一个名为<b>%1</b>的计划交易,它与导入交易中的一项相匹配。 "
+"KMyMoney现在是否可以输入该计划交易,以使导入的交易能够被匹配?"
+
+#: converter/mymoneystatementreader.cpp:1162
+msgid "Schedule found"
+msgstr "已找到交易计划"
+
+#: converter/mymoneystatementreader.cpp:1219
+msgid "Problem adding or matching imported transaction with id '%1': %2"
+msgstr "添加或匹配导入的id为“%1”的交易时出错:%2"
+
+#: converter/mymoneystatementreader.cpp:1268
+msgid ""
+"<b>You have downloaded a statement for the following account:</b><br><br>"
+msgstr "<b> 您为下列账户下载了对帐单:</b><br><br>"
+
+#: converter/mymoneystatementreader.cpp:1269
+#, fuzzy, c-format
+msgid " - Account Name: %1"
+msgstr " - 账户名称: %1<br>"
+
+#: converter/mymoneystatementreader.cpp:1270
+#, fuzzy, c-format
+msgid " - Account Type: %1"
+msgstr " - 账户类型: %1<br>"
+
+#: converter/mymoneystatementreader.cpp:1271
+#, fuzzy, c-format
+msgid " - Account Number: %1"
+msgstr " - 账户帐号: %1<br>"
+
+#: converter/mymoneystatementreader.cpp:1279
+msgid "Do you want to import transactions to this account?"
+msgstr "您要将交易导入此账户吗?"
+
+#: converter/mymoneystatementreader.cpp:1281
+msgid ""
+"KMyMoney cannot determine which of your accounts to use. You can create a "
+"new account by pressing the <b>Create</b> button or select another one "
+"manually from the selection box below."
+msgstr ""
+"KMyMoney无法判断应该使用哪个账户。您可以点击“新建”按钮创建一个新账户,或者从"
+"下面的选择框中手工选择要用的账户。"
+
+#: converter/mymoneystatementreader.cpp:1287
+msgid ""
+"No account information has been found in the selected statement file. Please "
+"select an account using the selection box in the dialog or create a new "
+"account by pressing the <b>Create</b> button."
+msgstr ""
+"在选中的对帐单文件中找不到账户信息。请从下面的选择框中手工选择要用的账户,或"
+"者点击“新建”按钮创建一个新账户。"
+
+#: converter/mymoneystatementreader.cpp:1294
+msgid "Import transactions"
+msgstr "导入交易"
+
+#: converter/mymoneystatementreader.cpp:1330
+msgid ""
+"You must select an account, create a new one, or press the <b>Abort</b> "
+"button."
+msgstr "您必须选中一个账户,或者新建一个账户,或者点击“终止”键终止操作。"
+
+#: converter/mymoneygncreader.cpp:119
+msgid "%1: Sorry. This importer cannot handle version %2 of element %3"
+msgstr "%1:很抱歉。该导入器无法处理%2版本的%3元素。"
+
+#: converter/mymoneygncreader.cpp:193
+#, c-format
+msgid "Account%1"
+msgstr "账户%1"
+
+#: converter/mymoneygncreader.cpp:197
+#, c-format
+msgid "Stock%1"
+msgstr "股票%1"
+
+#: converter/mymoneygncreader.cpp:206
+#, c-format
+msgid "Payee%1"
+msgstr "付款人%1"
+
+#: converter/mymoneygncreader.cpp:212
+#, c-format
+msgid "Schedule%1"
+msgstr "计划%1"
+
+#: converter/mymoneygncreader.cpp:262
+msgid "This version of the importer cannot handle multi-book files."
+msgstr "此版本的导入器无法处理多账簿文件。"
+
+#: converter/mymoneygncreader.cpp:912
+msgid "Invalid header for file. Should be 'gnc-v2'"
+msgstr "非法文件头。应该为“gnc-v2”。"
+
+#: converter/mymoneygncreader.cpp:937 converter/mymoneygncreader.cpp:972
+#: converter/mymoneygncreader.cpp:1062
+#, c-format
+msgid ""
+"Import failed:\n"
+"\n"
+"%1"
+msgstr ""
+"导入失败:\n"
+"\n"
+"%1"
+
+#: converter/mymoneygncreader.cpp:1065
+msgid "Import complete"
+msgstr "导入已完成"
+
+#: converter/mymoneygncreader.cpp:1120
+msgid "Disguise your wealth"
+msgstr "隐藏您的财富"
+
+#: converter/mymoneygncreader.cpp:1121
+msgid ""
+"Each monetary value on your file will be multiplied by a random number "
+"between 0.01 and 1.99\n"
+"with a different value used for each transaction. In addition, to further "
+"disguise the true\n"
+"values, you may enter a number between %1 and %2 which will be applied to "
+"all values.\n"
+"These numbers will not be stored in the file."
+msgstr ""
+"您文件中所有的货币数值都会被乘以一个介于0.01和1.99之间的随机数(每条记录使用"
+"不同的随机数)。为了进一步的隐藏 真实数值,您还可以输入一个介于%1和%2之间的"
+"数,它会被加到所有的金额中。这些数字不会被保存在文件中。"
+
+#: converter/mymoneygncreader.cpp:1135
+msgid "Loading commodities..."
+msgstr "正在载入商品信息..."
+
+#: converter/mymoneygncreader.cpp:1160
+msgid "Loading prices..."
+msgstr "正在载入价格..."
+
+#: converter/mymoneygncreader.cpp:1164 converter/mymoneygncreader.cpp:1171
+msgid "Imported History"
+msgstr "导入历史"
+
+#: converter/mymoneygncreader.cpp:1251
+#, c-format
+msgid "Current importer does not recognize GnuCash account type %1"
+msgstr "目前导入器尚无法识别GnuCcash账户类型%1。"
+
+#: converter/mymoneygncreader.cpp:1471
+msgid "Imported Transaction"
+msgstr "已倒入的交易"
+
+#: converter/mymoneygncreader.cpp:1519
+msgid "Loading templates..."
+msgstr "正在载入模板..."
+
+#: converter/mymoneygncreader.cpp:1531
+msgid "Unknown payee"
+msgstr "未知收款人"
+
+#: converter/mymoneygncreader.cpp:1723
+msgid "Loading schedules..."
+msgstr "正在载入计划..."
+
+#: converter/mymoneygncreader.cpp:1735
+#, c-format
+msgid "Can't find template transaction for schedule %1"
+msgstr "无法找到计划%1的交易模板"
+
+#: converter/mymoneygncreader.cpp:1910
+msgid "Reorganizing accounts..."
+msgstr "正在识别账户..."
+
+#: converter/mymoneygncreader.cpp:1972
+msgid ""
+"Your main currency seems to be %1 (%2); do you want to set this as your base "
+"currency?"
+msgstr "您的首选货币似乎是%1(%2)。您想将它设为基准货币吗?"
+
+#: converter/mymoneygncreader.cpp:1993
+msgid "More"
+msgstr "更多"
+
+#: converter/mymoneygncreader.cpp:1997
+msgid "Save Report"
+msgstr "保存报表"
+
+#: converter/mymoneygncreader.cpp:2017
+msgid ""
+"Problems were encountered in converting schedule '%1'.\n"
+"Do you want to review or edit it now?"
+msgstr ""
+"在转换交易计划“%1”时出错。\n"
+"你现在是要预览还是编辑它?"
+
+#: converter/mymoneygncreader.cpp:2039
+msgid ""
+"Found:\n"
+"\n"
+msgstr ""
+"找到:\n"
+"\n"
+
+#: converter/mymoneygncreader.cpp:2040
+msgid " commodities (equities)\n"
+msgstr "商品(产权)\n"
+
+#: converter/mymoneygncreader.cpp:2041
+msgid " prices\n"
+msgstr "价格\n"
+
+#: converter/mymoneygncreader.cpp:2042
+msgid " accounts\n"
+msgstr "账户\n"
+
+#: converter/mymoneygncreader.cpp:2043
+msgid " transactions\n"
+msgstr "交易\n"
+
+#: converter/mymoneygncreader.cpp:2044
+msgid " schedules\n"
+msgstr "计划\n"
+
+#: converter/mymoneygncreader.cpp:2047
+msgid "No inconsistencies were detected"
+msgstr "未发现不一致的地方"
+
+#: converter/mymoneygncreader.cpp:2049
+msgid " inconsistencies were detected and corrected\n"
+msgstr "发现不一致的地方,已改正\n"
+
+#: converter/mymoneygncreader.cpp:2054
+msgid " orphan accounts were created\n"
+msgstr "孤立账户已创建\n"
+
+#: converter/mymoneygncreader.cpp:2059
+msgid " possible schedule problems were noted\n"
+msgstr "发现计划中可能存在错误\n"
+
+#: converter/mymoneygncreader.cpp:2064
+msgid "Small Business Features (Customers, Invoices, etc.)"
+msgstr "为小型公司准备的功能(顾客,发票等等)"
+
+#: converter/mymoneygncreader.cpp:2065 views/kmymoneyview.cpp:241
+#: views/kmymoneyview.cpp:243
+msgid "Budgets"
+msgstr "预算"
+
+#: converter/mymoneygncreader.cpp:2066
+msgid "Lots"
+msgstr "批发"
+
+#: converter/mymoneygncreader.cpp:2068
+msgid "The following features found in your file are not currently supported:"
+msgstr "在您的文件中发现目前还不支持的功能:"
+
+#: converter/mymoneygncreader.cpp:2071
+msgid ""
+"\n"
+"\n"
+"Press More for further information"
+msgstr ""
+"\n"
+"\n"
+"点击“更多”以获取更多信息"
+
+#: converter/mymoneygncreader.cpp:2139
+msgid "Orphan created from unknown gnucash account"
+msgstr "已为未知的GnuCash账户建立孤立账户"
+
+#: converter/mymoneygncreader.cpp:2170
+msgid "Internal error - invalid interval char in incrDate"
+msgstr "内部错误 - 在incrDate中存在非法的间隔字符"
+
+#: converter/mymoneygncreader.cpp:2233
+msgid "Enter the investment account name "
+msgstr "输入投资账户名称"
+
+#: converter/mymoneygncreader.cpp:2234
+msgid "My Investments"
+msgstr "我的投资"
+
+#: converter/mymoneygncreader.cpp:2269
+#, c-format
+msgid "Select parent investment account or enter new name. Stock %1"
+msgstr "选择父投资账户或者输入新名称。股票%1"
+
+#: converter/mymoneygncreader.cpp:2292 converter/mymoneygncreader.cpp:2307
+msgid "%1 is not an Investment Account. Do you wish to make it one?"
+msgstr "%1不是一个投资账户。您想为它建立一个账户吗?"
+
+#: converter/mymoneygncreader.cpp:2408
+msgid ""
+"An Investment account must be a child of an Asset account\n"
+"Account %1 will be stored under the main Asset account"
+msgstr ""
+"投资账户<b>必须</b>是资产账户的子账户。 账户%1将会被存储在主资产账户下。"
+
+#: converter/mymoneygncreader.cpp:2410
+msgid ""
+"An Income account must be a child of an Income account\n"
+"Account %1 will be stored under the main Income account"
+msgstr ""
+"收入账户必须是主收入账户的子账户。\n"
+"账户%1将被保存在主收入账户下。"
+
+#: converter/mymoneygncreader.cpp:2412
+msgid ""
+"An Expense account must be a child of an Expense account\n"
+"Account %1 will be stored under the main Expense account"
+msgstr ""
+"支出账户必须是主支出账户的子账户。\n"
+"账户%1将被保存在主支出账户下。"
+
+#: converter/mymoneygncreader.cpp:2414
+msgid ""
+"One or more transactions contain a reference to an otherwise unknown "
+"account\n"
+"An asset account with the name %1 has been created to hold the data"
+msgstr ""
+"一个或多个交易内含有对未知账户的引用。 为保存这些交易,已自动建立一个名为%1的"
+"资产账户。"
+
+#: converter/mymoneygncreader.cpp:2416
+msgid "Schedule %1 has interval of %2 which is not currently available"
+msgstr "计划%1使用了当前不存在的时间间隔%2"
+
+#: converter/mymoneygncreader.cpp:2417
+msgid "Schedule %1 dropped at user request"
+msgstr "根据用户的请求,计划%1已删除"
+
+#: converter/mymoneygncreader.cpp:2418
+msgid "Schedule %1 contains unknown action (key = %2, type = %3)"
+msgstr "计划%1中包含未知动作(关键字(key)为%2,类型(type)为%3)"
+
+#: converter/mymoneygncreader.cpp:2419
+msgid "Schedule %1 contains multiple actions; only one has been imported"
+msgstr "计划%1中包含多个动作。只导入了其中之一"
+
+#: converter/mymoneygncreader.cpp:2420
+msgid "Schedule %1 contains no valid splits"
+msgstr "计划1中未包含合法的拆分"
+
+#: converter/mymoneygncreader.cpp:2421
+msgid ""
+"Schedule %1 appears to contain a formula. GnuCash formulae are not "
+"convertible"
+msgstr "计划%1中似乎包含一个公司。无法转换GnuCash公式"
+
+#: converter/mymoneygncreader.cpp:2422
+msgid ""
+"Schedule %1 contains unknown interval specification; please check for "
+"correct operation"
+msgstr "计划%1中包含未知的时间间隔定义。请检查正确的操作。"
+
+#: converter/mymoneygncreader.cpp:2423
+msgid ""
+"Schedule %1 contains a deferred interval specification; please check for "
+"correct operation"
+msgstr "计划%1包含一个被推迟的时间定义。请检查正确的操作。"
+
+#: converter/mymoneygncreader.cpp:2424
+msgid ""
+"Account or Category %1, transaction date %2; split contains invalid value; "
+"please check"
+msgstr "账户或交易类型%1,交易日期%2;拆分包含非法数值;请检查"
+
+#: kmymoneyutils.cpp:146
+msgid "&New Schedule..."
+msgstr "新计划(&N)..."
+
+#: kmymoneyutils.cpp:148
+msgid "Create a new schedule."
+msgstr "创建新的计划。"
+
+#: kmymoneyutils.cpp:149
+msgid "Use this to create a new schedule."
+msgstr "用它来创建新的定期计划。"
+
+#: kmymoneyutils.cpp:158
+msgid "&Filter"
+msgstr "过滤器(&F)"
+
+#: kmymoneyutils.cpp:160
+msgid "Filter out accounts"
+msgstr "滤出账户"
+
+#: kmymoneyutils.cpp:161
+msgid "Use this to filter out accounts"
+msgstr "用它来滤出账户"
+
+#: kmymoneyutils.cpp:192
+msgid "Preferred accounts"
+msgstr "偏好账户"
+
+#: kmymoneyutils.cpp:193
+msgid "Payment accounts"
+msgstr "支付账户"
+
+#: kmymoneyutils.cpp:194
+msgid "Favorite reports"
+msgstr "常用报表"
+
+#: kmymoneyutils.cpp:195
+msgid "Forecast (schedule)"
+msgstr "预报(交易计划)"
+
+#: kmymoneyutils.cpp:196
+msgid "Networth forecast"
+msgstr "资产净值预报"
+
+#: kmymoneyutils.cpp:197
+msgid "Forecast (history)"
+msgstr "预报(历史)"
+
+#: kmymoneyutils.cpp:198
+msgid "Assets and Liabilities"
+msgstr "资产与负债"
+
+#: kmymoneyutils.cpp:199 reports/pivottable.cpp:2416 views/khomeview.cpp:1393
+#: widgets/rc.cpp:70
+msgid "Budget"
+msgstr "预算"
+
+#: kmymoneyutils.cpp:200
+#, fuzzy
+msgid "CashFlow"
+msgstr "现金账户"
+
+#: dialogs/kenterscheduledlg.cpp:153 kmymoneyutils.cpp:366
+msgid "Unable to load schedule details"
+msgstr "无法载入时间表数据。"
+
+#: kmymoneyutils.cpp:390 widgets/register.cpp:473
+msgid ""
+"_: Reconcile state 'Not reconciled'\n"
+"Not reconciled"
+msgstr "未对账"
+
+#: kmymoneyutils.cpp:393 widgets/register.cpp:476
+msgid ""
+"_: Reconcile state 'Cleared'\n"
+"Cleared"
+msgstr "已清算"
+
+#: kmymoneyutils.cpp:396 widgets/register.cpp:479
+msgid ""
+"_: Reconcile state 'Reconciled'\n"
+"Reconciled"
+msgstr "已对账"
+
+#: kmymoneyutils.cpp:399 widgets/register.cpp:482
+msgid ""
+"_: Reconcile state 'Frozen'\n"
+"Frozen"
+msgstr "已冻结"
+
+#: kmymoneyutils.cpp:410
+msgid ""
+"_: Reconcile flag C\n"
+"C"
+msgstr "C"
+
+#: kmymoneyutils.cpp:413
+msgid ""
+"_: Reconcile flag R\n"
+"R"
+msgstr "R"
+
+#: kmymoneyutils.cpp:416
+msgid ""
+"_: Reconcile flag F\n"
+"F"
+msgstr "F"
+
+#: kmymoneyutils.cpp:419
+msgid ""
+"_: Flag for unknown reconciliation state\n"
+"?"
+msgstr "?"
+
+#: _tips.cpp:3
+msgid ""
+"<p>...that you can change the sort order of ledger entries by\n"
+"right-clicking the header of the ledger view?\n"
+msgstr ""
+"<p>...通过右击分类帐试图的表头,您可以对分类帐目的排序顺序进行修改?</p>\n"
+
+#: _tips.cpp:9
+#, fuzzy
+msgid ""
+"<p>...that you can easily move to the other side of a transfer transaction\n"
+"by opening the context menu with the right mouse button and selecting one of "
+"the\n"
+"'Goto' functions?\n"
+msgstr ""
+"<p>...通过右击打开上下文菜单,选择“跳转...”功能,您可以方便的移动到转账交易的"
+"另一方账户?</p>\n"
+
+#: _tips.cpp:16
+msgid ""
+"<p>...that you can start editing a transaction by double-clicking on the\n"
+"transaction in the register?\n"
+msgstr "<p>...通过双击账簿中的交易,您可以对它进行编辑?</p>\n"
+
+#: _tips.cpp:22
+msgid ""
+"<p>...that you can show more details of the selected transaction in the\n"
+"register by selecting the 'ledger lens' feature in the settings dialog?\n"
+msgstr ""
+"<p>...通过在设置对话框中选中“在分类账中显示选中交易详细信息”复选框,您可以在"
+"分类账中显示关于选中交易的详细信息?</p>\n"
+
+#: _tips.cpp:28
+msgid ""
+"<p>...that transactions with no category assigned or split\n"
+"transactions with unassigned values are marked with an exclamation mark \n"
+"on a yellow triangle in the register?\n"
+msgstr ""
+"<p>...未指定类别的交易,或者被拆分但还存在未指派金额的交易,在账簿中用黄色三"
+"角标记标出?</p>\n"
+
+#: _tips.cpp:35
+msgid ""
+"<p>...that you can show all details of the transactions in the register\n"
+"by typing &lt;Ctrl-T&gt; or selecting the 'Settings/Show Transaction "
+"Detail'\n"
+"menu entry? You can turn this feature off the same way.\n"
+msgstr ""
+"<p>...通过按下&lt;Ctrl-T&gt;或者选中“设置/显示交易详细信息”菜单项,您可以让账"
+"簿显示全部交易的详细信息?通过同样的方法您也可以关闭此功能。</p>\n"
+
+#: _tips.cpp:42
+msgid ""
+"<p>...that you can switch between a listing of all accounts or\n"
+"an icon view of all asset and liability accounts with the tabs\n"
+"in the accounts view?\n"
+msgstr "<p>...您可以通过账户视图中的标签来切换账户列表和账户图标视图?</p>\n"
+
+#: _tips.cpp:49
+msgid "<p>...that the KMyMoney development team wishes you a nice day?\n"
+msgstr "<p>...KMyMoney开发小组祝您身体健康,万事如意!</p>\n"
+
+#: _tips.cpp:54
+msgid ""
+"<p>...you can use your own external filter program to convert any\n"
+"import format to QIF on the fly? See the QIF profile editor for\n"
+"more details.\n"
+msgstr ""
+"<p>...您可以使用您自己的外部过滤程序来将任何格式的数据动态转换成QIF格式?打开"
+"QIF配置编辑器以获得更多信息。</p>\n"
+
+#: _tips.cpp:61
+msgid ""
+"<p>...that you can create a scheduled transaction from an existing\n"
+"one by selecting the context menu on a transaction in the ledger\n"
+"or the \"More...\"-menu in the transaction form?\n"
+msgstr ""
+"<p>...通过在分类账中右击交易项,或者在交易输入界面中点击“More...”打开上下文菜"
+"单,您可以通过现有交易创建计划交易?</p>\n"
+
+#: _tips.cpp:68
+#, fuzzy
+msgid ""
+"<p>...that you can switch to the payee of a transaction\n"
+"by selecting the context menu on a transaction in the ledger\n"
+"or in the transaction menu?\n"
+msgstr ""
+"<p>...通过在分类账中右击交易项,或者在交易输入界面中点击“More...”打开上下文菜"
+"单,您可以切换到到交易的收款人视图?</p>\n"
+
+#: _tips.cpp:75
+msgid ""
+"<p>...that you can modify the colors and fonts used for the ledgers\n"
+"via <i>Configure/Register/...</i>?\n"
+msgstr ""
+"<p>...通过配置对话框中的“字体”和“颜色”您可以修改分类账目所用的颜色和字体?</"
+"p>\n"
+
+#: _tips.cpp:81
+msgid ""
+"<p>...that you can hide transactions prior to a specific date?\n"
+"The date can be modified via <i>Configure/Register/Filter</i>.\n"
+msgstr ""
+"<p>...您可以隐藏发生在特定日期前的交易?\n"
+"通过配置对话框中的“账簿/过滤器”可以设置该日期。\n"
+
+#: _tips.cpp:87
+msgid ""
+"<p>...that you can customize the \"Home-Page\"\n"
+"via <i>Configure/Home</i>?\n"
+msgstr "<p>...您可以通过配置对话框中的“主界面”来自定义主界面?</p>\n"
+
+#: _tips.cpp:93
+msgid ""
+"<p>...that you can enter new transactions even while reconciling\n"
+"an account? You can also make the transaction form visible.\n"
+msgstr ""
+"<p>...即使在对帐时您也可以输入新的交易?您也可以让KMyMoney显示交易输入窗口。"
+"</p>\n"
+
+#: _tips.cpp:99
+#, fuzzy
+msgid ""
+"<p>...that you can actively support the KMyMoney development team in\n"
+"cases that heavily depend on your data? You can save your data in an\n"
+"anonymized way for this support.<p>\n"
+"Just open your data file and immediately\n"
+"select <b>File/Save as...</b>. In the <b>Save As...</b> dialog\n"
+"select the filter <b>Anonymous Files</b> and make sure your file gets\n"
+"the extensions <b>.anon.xml</b>. <p>\n"
+"To verify, how the data looks like you are about to send away, you can open\n"
+"this file in KMyMoney and see how the developers see your data.\n"
+msgstr ""
+"...您可以通过将自己的财务数据发送给KMyMoney开发小组来支持KMyMoney的开发? \n"
+"为了保证您的信息安全,您可以将您的数据以匿名方式保存之后再发送。\n"
+"打开您的数据文件,选择<b>“文件/另存为...”</b>菜单项。在<b>“另存为...”</b>对话"
+"框中, 选择文件类型为<b>“匿名文件”</b>,并确认文件的后缀名是.anon.xml。\n"
+"如果还不放心,您在发送该文件前可以先用KMyMoney打开它,看看它已经变成了什么样"
+"子^_^\n"
+
+#: _tips.cpp:112
+msgid ""
+"<p>... that you can import your bank statements even without a network \n"
+"connection? Just select the file (OFX or QIF) from the File->Import menu.</"
+"p>\n"
+"<p>Provided by Jose Jorge</p>\n"
+msgstr ""
+"<p>... 即使没有连接到网络,你也可以导入银行对帐信息?只需要从菜单访问文件->导"
+"入文件(OFX或QIF格式)。</p>\n"
+"<p>由Jose Jorge提供</p>\n"
+
+#: reports/listtable.cpp:159 reports/listtable.cpp:163
+#: reports/pivottable.cpp:1564
+msgid ""
+"_: Report date range\n"
+"%1 through %2"
+msgstr ""
+
+#: reports/listtable.cpp:171 reports/pivottable.cpp:1571
+#, c-format
+msgid "All currencies converted to %1"
+msgstr "全部货币都已转换成%1"
+
+#: reports/listtable.cpp:172 reports/pivottable.cpp:1328
+msgid "All currencies converted to %1\n"
+msgstr "全部货币都已转换成%1\n"
+
+#: reports/listtable.cpp:176 reports/pivottable.cpp:1573
+msgid "All values shown in %1 unless otherwise noted"
+msgstr "除非特别说明,所有的数值都在%1中显示"
+
+#: reports/listtable.cpp:177 reports/pivottable.cpp:1330
+msgid "All values shown in %1 unless otherwise noted\n"
+msgstr "除非特别说明,所有的数值都在%1中显示\n"
+
+#: dialogs/kequitypriceupdatedlg.cpp:73 dialogs/kfindtransactiondlg.cpp:188
+#: dialogs/rc.cpp:53 dialogs/rc.cpp:63 dialogs/rc.cpp:208 dialogs/rc.cpp:805
+#: dialogs/settings/rc.cpp:111 dialogs/transactioneditor.cpp:844
+#: reports/listtable.cpp:196 views/khomeview.cpp:412 views/khomeview.cpp:485
+#: views/khomeview.cpp:519 views/rc.cpp:61 widgets/kmymoneypriceview.cpp:128
+#: widgets/rc.cpp:36 widgets/register.cpp:565 widgets/transaction.cpp:1027
+#: widgets/transaction.cpp:1484
+msgid "Date"
+msgstr "日期"
+
+#: reports/listtable.cpp:198
+msgid "Num"
+msgstr "编号"
+
+#: dialogs/kfindtransactiondlg.cpp:204 dialogs/kmymoneysplittable.cpp:78
+#: dialogs/kmymoneysplittable.cpp:831 dialogs/rc.cpp:217
+#: dialogs/transactioneditor.cpp:831 dialogs/transactioneditor.cpp:1374
+#: dialogs/transactioneditor.cpp:1382 dialogs/transactioneditor.cpp:1396
+#: dialogs/transactioneditor.cpp:1449 dialogs/transactioneditor.cpp:1456
+#: dialogs/transactioneditor.cpp:1504 reports/listtable.cpp:200
+#: views/kcategoriesview.cpp:76 views/rc.cpp:62 widgets/rc.cpp:115
+#: widgets/register.cpp:62 widgets/transaction.cpp:848
+#: widgets/transaction.cpp:906
+msgid "Category"
+msgstr "交易类别"
+
+#: dialogs/kmymoneysplittable.cpp:79 dialogs/kmymoneysplittable.cpp:837
+#: reports/listtable.cpp:202 widgets/rc.cpp:101 widgets/transaction.cpp:1042
+#: widgets/transaction.cpp:1628
+msgid "Memo"
+msgstr "备忘"
+
+#: reports/listtable.cpp:203
+msgid "Top Category"
+msgstr "顶级交易类别"
+
+#: reports/listtable.cpp:204
+msgid "Category Type"
+msgstr "交易类别类型"
+
+#: dialogs/rc.cpp:229 dialogs/settings/rc.cpp:152 reports/listtable.cpp:207
+#: widgets/kmymoneycombo.cpp:346 widgets/rc.cpp:107
+msgid "Reconciled"
+msgstr "已调整"
+
+#: reports/listtable.cpp:208 widgets/rc.cpp:117
+msgid "Action"
+msgstr "动作"
+
+#: dialogs/investactivities.cpp:199 dialogs/investactivities.cpp:287
+#: dialogs/investactivities.cpp:424 dialogs/investactivities.cpp:504
+#: dialogs/investactivities.cpp:544 dialogs/investtransactioneditor.cpp:241
+#: reports/listtable.cpp:209 widgets/rc.cpp:103 widgets/transaction.cpp:1513
+msgid "Shares"
+msgstr "股"
+
+#: dialogs/investtransactioneditor.cpp:248
+#: dialogs/investtransactioneditor.cpp:1067
+#: dialogs/investtransactioneditor.cpp:1068
+#: dialogs/investtransactioneditor.cpp:1072
+#: dialogs/kequitypriceupdatedlg.cpp:72 dialogs/rc.cpp:109 dialogs/rc.cpp:164
+#: dialogs/rc.cpp:251 dialogs/rc.cpp:756 dialogs/rc.cpp:827
+#: dialogs/settings/rc.cpp:117 reports/listtable.cpp:210
+#: reports/listtable.cpp:211 reports/pivottable.cpp:2441
+#: views/kinvestmentview.cpp:80 widgets/kmymoneypriceview.cpp:129
+#: widgets/rc.cpp:43 widgets/rc.cpp:105 widgets/register.cpp:573
+msgid "Price"
+msgstr "价格"
+
+#: reports/listtable.cpp:212
+msgid "Net Value"
+msgstr "净值"
+
+#: reports/listtable.cpp:213
+msgid "Buys"
+msgstr "买"
+
+#: reports/listtable.cpp:214
+msgid "Sells"
+msgstr "卖"
+
+#: reports/listtable.cpp:215
+msgid "Dividends Reinvested"
+msgstr "重新用于投资的红利"
+
+#: reports/listtable.cpp:216
+msgid "Dividends Paid Out"
+msgstr "用于支出的红利"
+
+#: reports/listtable.cpp:217
+msgid "Starting Balance"
+msgstr "期初余额"
+
+#: reports/listtable.cpp:218
+msgid "Ending Balance"
+msgstr "期末余额"
+
+#: reports/listtable.cpp:219
+msgid "Annualized Return"
+msgstr "年度分红"
+
+#: reports/listtable.cpp:220
+msgid "Return On Investment"
+msgstr "投资回报(ROI)"
+
+#: dialogs/rc.cpp:106 dialogs/rc.cpp:161 dialogs/rc.cpp:248 dialogs/rc.cpp:505
+#: dialogs/rc.cpp:570 dialogs/rc.cpp:667 dialogs/rc.cpp:753
+#: reports/listtable.cpp:223 widgets/register.cpp:570
+msgid "Payment"
+msgstr "支付"
+
+#: dialogs/rc.cpp:111 dialogs/rc.cpp:166 dialogs/rc.cpp:253 dialogs/rc.cpp:709
+#: dialogs/rc.cpp:758 reports/listtable.cpp:224 widgets/rc.cpp:119
+#: widgets/register.cpp:575
+msgid "Balance"
+msgstr "余额"
+
+#: reports/listtable.cpp:227 views/kscheduledview.cpp:74
+msgid "Next Due Date"
+msgstr "下次到期日"
+
+#: reports/listtable.cpp:229 views/kscheduledview.cpp:76
+msgid "Payment Method"
+msgstr "支付方式"
+
+#: dialogs/rc.cpp:803 reports/listtable.cpp:231 widgets/rc.cpp:2
+msgid "Description"
+msgstr "描述"
+
+#: reports/listtable.cpp:232
+msgid "Opening Date"
+msgstr "开户日期"
+
+#: reports/listtable.cpp:234
+msgid "Balance Early Warning"
+msgstr "余额早期预警"
+
+#: reports/listtable.cpp:235
+msgid "Balance Max Limit"
+msgstr "余额上限:"
+
+#: reports/listtable.cpp:236
+msgid "Credit Early Warning"
+msgstr "信用额早期预警"
+
+#: reports/listtable.cpp:237
+msgid "Credit Max Limit"
+msgstr "信用额上线"
+
+#: dialogs/rc.cpp:376 reports/listtable.cpp:238
+msgid "Tax"
+msgstr "税"
+
+#: reports/listtable.cpp:239
+msgid "Preferred"
+msgstr "偏好的"
+
+#: reports/listtable.cpp:240
+msgid "Loan Amount"
+msgstr "贷款金额"
+
+#: dialogs/rc.cpp:511 reports/listtable.cpp:241
+msgid "Interest Rate"
+msgstr "利率"
+
+#: reports/listtable.cpp:242
+msgid "Next Interest Change"
+msgstr "下次利率变化"
+
+#: reports/listtable.cpp:243
+msgid "Periodic Payment"
+msgstr "周期性支付"
+
+#: reports/listtable.cpp:244
+msgid "Final Payment"
+msgstr "最后一次支付"
+
+#: reports/listtable.cpp:245 views/khomeview.cpp:766 views/khomeview.cpp:1265
+#: views/khomeview.cpp:1273
+msgid "Current Balance"
+msgstr "当前余额"
+
+#: dialogs/investactivities.cpp:201 dialogs/investactivities.cpp:289
+#: dialogs/investactivities.cpp:368 dialogs/investactivities.cpp:426
+#: dialogs/rc.cpp:327 reports/listtable.cpp:360 reports/listtable.cpp:364
+#: reports/listtable.cpp:556 reports/listtable.cpp:558
+#: reports/pivottable.cpp:1343 reports/pivottable.cpp:1445
+#: reports/pivottable.cpp:1505 reports/pivottable.cpp:1598
+#: reports/pivottable.cpp:1768 reports/pivottable.cpp:1845
+#: reports/pivottable.cpp:2165 reports/pivottable.cpp:2167
+#: reports/pivottable.cpp:2187 reports/pivottable.cpp:2189
+#: reports/querytabletest.cpp:134 reports/querytabletest.cpp:135
+#: reports/querytabletest.cpp:136 reports/querytabletest.cpp:137
+#: reports/querytabletest.cpp:162 reports/querytabletest.cpp:163
+#: reports/querytabletest.cpp:164 reports/querytabletest.cpp:197
+#: reports/querytabletest.cpp:198 reports/querytabletest.cpp:224
+#: reports/querytabletest.cpp:250 reports/querytabletest.cpp:251
+#: reports/querytabletest.cpp:252 reports/querytabletest.cpp:275
+#: reports/querytabletest.cpp:276 reports/querytabletest.cpp:277
+#: reports/querytabletest.cpp:366 reports/querytabletest.cpp:422
+#: reports/querytabletest.cpp:423 views/kforecastview.cpp:568 views/rc.cpp:18
+#: widgets/kmymoneyaccounttreeforecast.cpp:139 widgets/transaction.cpp:1643
+msgid "Total"
+msgstr "总额"
+
+#: reports/listtable.cpp:444
+msgid "Initial Market Value"
+msgstr "期初市值"
+
+#: reports/listtable.cpp:445
+msgid "Ending Market Value"
+msgstr "期末市值"
+
+#: reports/listtable.cpp:448 reports/querytabletest.cpp:651
+msgid "Opening Balance"
+msgstr "开盘余额"
+
+#: reports/listtable.cpp:449 reports/querytabletest.cpp:652
+#: reports/querytabletest.cpp:653
+msgid "Closing Balance"
+msgstr "收盘余额"
+
+#: reports/listtable.cpp:490 reports/listtable.cpp:491
+msgid "Calculated"
+msgstr "已计算"
+
+#: reports/listtable.cpp:572 reports/listtable.cpp:574
+#: reports/pivottable.cpp:1530 reports/pivottable.cpp:1886
+#: reports/querytabletest.cpp:138 reports/querytabletest.cpp:165
+#: reports/querytabletest.cpp:199 reports/querytabletest.cpp:225
+#: reports/querytabletest.cpp:253 reports/querytabletest.cpp:278
+#: reports/querytabletest.cpp:367 reports/querytabletest.cpp:402
+#: reports/querytabletest.cpp:424 reports/querytabletest.cpp:548
+#: reports/querytabletest.cpp:551 reports/querytabletest.cpp:586
+msgid "Grand Total"
+msgstr "总计"
+
+#: dialogs/rc.cpp:233 reports/pivottable.cpp:339 views/kscheduledview.cpp:174
+#: views/kscheduledview.cpp:433 views/kscheduledview.cpp:449
+#: widgets/kmymoneyscheduledcalendar.cpp:48
+msgid "Transfers"
+msgstr "转账"
+
+#: reports/pivottable.cpp:1951
+msgid "Legend"
+msgstr "账簿"
+
+#: reports/pivottable.cpp:2411 views/khomeview.cpp:1406
+#: views/khomeview.cpp:1443
+msgid "Actual"
+msgstr "实际"
+
+#: reports/pivottable.cpp:2421 views/khomeview.cpp:1409
+#: views/khomeview.cpp:1446
+msgid "Difference"
+msgstr "差额"
+
+#: reports/pivottable.cpp:2431
+#, fuzzy
+msgid "Moving Average"
+msgstr "简单运动平均"
+
+#: reports/pivottable.cpp:2436
+#, fuzzy
+msgid "Moving Average Price"
+msgstr "简单运动平均"
+
+#: reports/objectinfotable.cpp:214 reports/querytable.cpp:693
+#: reports/querytable.cpp:736 reports/querytable.cpp:1356
+#: reports/querytable.cpp:1375 views/kpayeesview.cpp:742
+#, c-format
+msgid "Transfer from %1"
+msgstr "来自%1的转账"
+
+#: reports/objectinfotable.cpp:215 reports/querytable.cpp:694
+#: reports/querytable.cpp:735 reports/querytable.cpp:1355
+#: reports/querytable.cpp:1374 views/kpayeesview.cpp:740
+#, c-format
+msgid "Transfer to %1"
+msgstr "转账到%1"
+
+#: reports/querytabletest.cpp:471 views/kreportsview.cpp:1144
+msgid "Investment Transactions"
+msgstr "投资交易"
+
+#: reports/querytabletest.cpp:472 reports/querytabletest.cpp:564
+msgid "Test Report"
+msgstr "测试报表"
+
+#: reports/querytabletest.cpp:547 reports/querytabletest.cpp:550
+msgid "Total Stock 1"
+msgstr "股票总计1"
+
+#: reports/querytabletest.cpp:563 views/kreportsview.cpp:1174
+msgid "Investment Performance by Account"
+msgstr "在此账户内进行的投资"
+
+#: reports/querytable.cpp:431 reports/querytable.cpp:1200
+#, c-format
+msgid "Month of %1"
+msgstr "%1 月"
+
+#: reports/querytable.cpp:432 reports/querytable.cpp:1201
+#, c-format
+msgid "Week of %1"
+msgstr "%1周"
+
+#: reports/querytable.cpp:576 reports/querytable.cpp:739
+#: reports/querytable.cpp:858 reports/querytable.cpp:1325
+#: reports/querytable.cpp:1481
+msgid "No Institution"
+msgstr "未指定金融机构"
+
+#: reports/querytable.cpp:580 reports/querytable.cpp:1329
+msgid "[Empty Payee]"
+msgstr "[空收款人]"
+
+#: reports/querytable.cpp:615 reports/querytable.cpp:1361
+msgid "[Split Transaction]"
+msgstr "[拆分交易]"
+
+#: reports/querytable.cpp:616 reports/querytable.cpp:617
+msgid "Split"
+msgstr "拆分"
+
+#: main.cpp:51
+msgid ""
+"\n"
+"KMyMoney, the Personal Finance Manager for KDE.\n"
+"\n"
+"Please consider contributing to this project with code and/or suggestions."
+msgstr ""
+"\n"
+"KMyMoney,KDE下的个人财务管理者。\n"
+"\n"
+"如果您喜欢它,可以通过提供代码或者建议等方式来帮助它的开发。"
+
+#: main.cpp:55
+msgid "language to be used"
+msgstr "要使用的语言"
+
+#: main.cpp:56
+msgid "don't open last used file"
+msgstr "无法打开上次使用的文件"
+
+#: main.cpp:57
+msgid "enable performance timers"
+msgstr "启用性能计时器"
+
+#: main.cpp:61
+msgid "turn on program traces"
+msgstr "打开程序跟踪"
+
+#: main.cpp:62
+msgid "dump the names of all defined KAction objects to stdout and quit"
+msgstr "将所有已定义的KActions对象的名称输出到标准输出,然后退出。"
+
+#: main.cpp:66
+msgid "file to open"
+msgstr "要打开的文件"
+
+#: main.cpp:92
+msgid "Memory leakage detection"
+msgstr "检测内存泄漏"
+
+#: main.cpp:96
+msgid "Compiled with the following settings:\n"
+msgstr "使用下列选项编译而成:\n"
+
+#: dialogs/kmymoneysplittable.cpp:650 dialogs/ksplittransactiondlg.cpp:277
+#: main.cpp:98
+msgid "KMyMoney"
+msgstr "KMyMoney"
+
+#: main.cpp:104
+msgid "Initial idea, much initial source code, Project admin"
+msgstr "初始想法,大部分初始代码,项目管理员"
+
+#: main.cpp:105
+msgid "Core engine, Release Manager, Project admin"
+msgstr "核心引擎,版本管理员,项目管理员"
+
+#: main.cpp:106
+msgid "Reporting logic, OFX Import"
+msgstr "报表逻辑,OFX导入"
+
+#: main.cpp:107
+msgid "Database backend, maintainer stable branch"
+msgstr "数据库后台,维护者稳定分支版本"
+
+#: main.cpp:108
+msgid "Forecast, Reports"
+msgstr "预测,报表"
+
+#: main.cpp:109
+msgid "Project Admin"
+msgstr "项目管理员"
+
+#: main.cpp:110
+msgid "Developer"
+msgstr "开发者"
+
+#: main.cpp:111
+msgid "Database backend"
+msgstr "数据库后台"
+
+#: main.cpp:113
+msgid "Initial investment support"
+msgstr "初始投资支持"
+
+#: main.cpp:114
+msgid "Developer & Artist"
+msgstr "开发者 & 美工"
+
+#: main.cpp:115
+msgid "Icons & splash screen"
+msgstr "图标和飞溅屏幕"
+
+#: main.cpp:116 main.cpp:117
+msgid "Patches"
+msgstr "补丁"
+
+#: main.cpp:136
+msgid ""
+"The monetary decimal symbol is not correctly set in the KDE Control Center's "
+"Country/Region & Language settings. Please set it to a reasonable value and "
+"start KMyMoney again."
+msgstr ""
+"在KDE控制中心的“区域和语言”设置中没有正确设定货币的小数点符号或千位分隔符。请"
+"在将其设为合适的值后重启KMyMoney。"
+
+#: main.cpp:136
+msgid "Invalid settings"
+msgstr "非法设置"
+
+#: main.cpp:228
+msgid "Another instance of KMyMoney is already running. Do you want to quit?"
+msgstr "另一个KMyMoney的进程已经在运行。是否退出?"
+
+#: main.cpp:289
+msgid "Uncaught error. Please report the details to the developers"
+msgstr "未捕捉到错误。请将详细情况报告给开发者"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Roy Qu"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "royqh1979@gmail.com"
+
+#: dialogs/kcsvprogressdlg.cpp:62 dialogs/kimportdlg.cpp:66 rc.cpp:1
+msgid "&Import"
+msgstr "导入(&I)"
+
+#: rc.cpp:2
+msgid "E&xport"
+msgstr "导出(&x)"
+
+#: rc.cpp:3
+msgid "&Institution"
+msgstr "金融机构(&I)"
+
+#: rc.cpp:4
+msgid "&Account"
+msgstr "账户(&A)"
+
+#: rc.cpp:5
+msgid "&Category"
+msgstr "交易类别(&C)"
+
+#: rc.cpp:6
+msgid "&Transaction"
+msgstr "交易(&T)"
+
+#: rc.cpp:7 rc.cpp:20
+msgid "Mark transaction as..."
+msgstr "将交易标为..."
+
+#: rc.cpp:8 rc.cpp:21
+msgid "Mark transaction"
+msgstr "标记交易"
+
+#: rc.cpp:9
+msgid "T&ools"
+msgstr "工具(&o)"
+
+#: rc.cpp:10
+msgid "Account options"
+msgstr "账户选项"
+
+#: rc.cpp:11
+msgid "Category options"
+msgstr "交易类别选项"
+
+#: rc.cpp:12
+msgid "Institution options"
+msgstr "金融机构选项"
+
+#: rc.cpp:13
+msgid "Payee options"
+msgstr "收/付款人选项"
+
+#: rc.cpp:14
+msgid "Budget options"
+msgstr "预算选项"
+
+#: rc.cpp:15
+msgid "Investment options"
+msgstr "投资选项"
+
+#: rc.cpp:16
+#, fuzzy
+msgid "Scheduled transactions options"
+msgstr "发现计划交易"
+
+#: rc.cpp:17
+msgid "Transaction options"
+msgstr "交易选项"
+
+#: rc.cpp:18
+msgid "Move transaction to..."
+msgstr "将交易移动到..."
+
+#: rc.cpp:19
+msgid "Select account"
+msgstr "选择账户"
+
+#: rc.cpp:22
+msgid "Currency options"
+msgstr "货币选项"
+
+#: rc.cpp:24
+msgid "Always show a No. field in transaction form"
+msgstr "始终在交易记录输入界面中显示序号栏目"
+
+#: rc.cpp:25
+msgid "Auto fill with previous transaction data"
+msgstr "根据过去的交易数据自动填写新记录"
+
+#: rc.cpp:26
+msgid "Treat two transactions as identical, if amount differs less than"
+msgstr "如果金额差异少于该值,则将两笔交易作为同一笔处理"
+
+#: dialogs/settings/rc.cpp:144 rc.cpp:27
+msgid "Auto increment check number"
+msgstr "自动为支票号码编号"
+
+#: rc.cpp:28
+msgid "Autosave file periodically"
+msgstr "定期自动保存文件"
+
+#: rc.cpp:29
+msgid "Autosave interval in minutes"
+msgstr "保存间隔(分钟)"
+
+#: rc.cpp:30
+msgid "Check schedules upon startup"
+msgstr "在启动时检查计划"
+
+#: dialogs/settings/rc.cpp:171 rc.cpp:31
+msgid "Enter transactions this number of days in advance"
+msgstr "在计划到期前...天产生交易记录"
+
+#: dialogs/settings/rc.cpp:172 rc.cpp:32
+msgid "Number of days to preview schedules in ledger"
+msgstr "预览账簿的交易计划的天数"
+
+#: dialogs/settings/rc.cpp:143 rc.cpp:33
+msgid "Insert transaction type into No. field for new transactions"
+msgstr "在新交易记录的序号栏目中插入交易类型"
+
+#: dialogs/settings/rc.cpp:145 rc.cpp:34
+msgid "Keep changes when selecting a different transaction/split"
+msgstr "当选择不同的交易类别或拆分时自动保存修改。"
+
+#: rc.cpp:35
+msgid "Using the Enter key moves between the fields"
+msgstr "使用回车键在栏目中移动"
+
+#: dialogs/settings/rc.cpp:130 rc.cpp:36
+msgid "Use the ledger lens"
+msgstr "在分类账中显示选中交易详细信息"
+
+#: rc.cpp:37
+msgid "Price Precision"
+msgstr "价格精度"
+
+#: dialogs/rc.cpp:65 rc.cpp:38
+msgid "Update price history"
+msgstr "更新价格历史"
+
+#: dialogs/settings/rc.cpp:132 rc.cpp:39
+msgid "Show transaction form"
+msgstr "显示交易记录输入界面"
+
+#: rc.cpp:40
+msgid "Start with last selected view or homepage"
+msgstr "使用上一次选择的视图或主页启动"
+
+#: rc.cpp:41
+msgid "Use GPG to encrypt data file"
+msgstr "使用GPG加密数据文件"
+
+#: rc.cpp:42
+msgid "Also encrypt against recover key"
+msgstr "同时使用恢复密钥加密"
+
+#: rc.cpp:43
+msgid "GPG User ID (deprecated)"
+msgstr "GPG用户ID(已过时)"
+
+#: rc.cpp:44
+msgid "GPG User ID"
+msgstr "GPG用户ID"
+
+#: rc.cpp:45
+msgid "Run in expert (accountant) mode"
+msgstr "以专家(会计师)模式运行"
+
+#: rc.cpp:46
+msgid "Show splash screen during startup"
+msgstr "启动时显示飞溅屏幕"
+
+#: rc.cpp:47
+msgid "Synchronize account in ledger and investment view"
+msgstr "在账簿和投资视图间同步账户"
+
+#: rc.cpp:48
+msgid "Icon size for view selection"
+msgstr "视图选择使用的图标打消"
+
+#: rc.cpp:49
+msgid "list of hidden views"
+msgstr "隐藏视图列表"
+
+#: rc.cpp:50
+msgid "Firsttime switch to start new user wizard"
+msgstr "启动新用户向导的开关"
+
+#: rc.cpp:51
+msgid "Show title bar on each view"
+msgstr ""
+
+#: rc.cpp:52
+msgid "Start string matches for e.g. payees at start of string"
+msgstr ""
+
+#: rc.cpp:53
+msgid "Order of items on homepage"
+msgstr "主页里的条目顺序"
+
+#: rc.cpp:54
+msgid "Percentage of default font size used for home view HTML page"
+msgstr "主页视图HTML页面里使用的缺省字体大小(百分比)"
+
+#: rc.cpp:55
+msgid "Remember (manually adjusted) font size in home view on program end."
+msgstr "在程序结束时保存(手工调整后的)主页视图字体大小"
+
+#: rc.cpp:56
+msgid "Show account limit information on the Homepage"
+msgstr "在主页中显示账户限制信息"
+
+#: rc.cpp:58
+msgid "Hide closed accounts"
+msgstr "隐藏已关闭的账户"
+
+#: rc.cpp:59
+msgid "Hide finished schedules"
+msgstr "隐藏已完成的交易计划"
+
+#: rc.cpp:61
+msgid "Show all register entries in full detail"
+msgstr "详细显示全部账簿条目"
+
+#: dialogs/settings/rc.cpp:129 rc.cpp:62
+msgid "Show a grid in the register"
+msgstr "在账簿中显示栅格"
+
+#: rc.cpp:63
+msgid "Show fancy group markers"
+msgstr "显示精美组标记"
+
+#: rc.cpp:64
+msgid "Show fancy markers for previous and current fiscal year"
+msgstr "为上一财年和本财年显示精美标记"
+
+#: rc.cpp:65
+msgid "Starting month of the fiscal year"
+msgstr "财年的起始月份"
+
+#: rc.cpp:66
+msgid "Starting day of the fiscal year"
+msgstr "财年的起始日"
+
+#: rc.cpp:67
+msgid "Start date"
+msgstr "起始日期"
+
+#: dialogs/settings/rc.cpp:9 rc.cpp:68
+msgid "Use system colors"
+msgstr "使用系统配色方案"
+
+#: rc.cpp:69
+msgid "List color"
+msgstr "列表配色方案"
+
+#: rc.cpp:70
+msgid "List background color"
+msgstr "列表背景色"
+
+#: rc.cpp:71
+msgid "List grid color"
+msgstr "列表栅格线色彩"
+
+#: rc.cpp:72
+msgid "Background color for imported transactions"
+msgstr "导入交易的背景色"
+
+#: rc.cpp:73
+msgid "Background color for matched transactions"
+msgstr "匹配交易的背景色"
+
+#: rc.cpp:74
+msgid "List color for erronous transactions"
+msgstr "错误交易的色彩"
+
+#: rc.cpp:75
+msgid "List color for missing conversion rate"
+msgstr "缺少转换率的交易的色彩"
+
+#: rc.cpp:76
+msgid "List color for negative values"
+msgstr "负值的色彩"
+
+#: rc.cpp:77
+msgid "Background color for group marker"
+msgstr "组标记的背景色"
+
+#: rc.cpp:78
+msgid "Background color for required fields"
+msgstr "必须项的背景色"
+
+#: rc.cpp:79
+msgid "Use system font"
+msgstr "使用系统字体"
+
+#: dialogs/settings/rc.cpp:21 rc.cpp:80
+msgid "Cell font"
+msgstr "表格字体"
+
+#: dialogs/settings/rc.cpp:22 rc.cpp:81
+msgid "Header font"
+msgstr "表头字体"
+
+#: rc.cpp:82 rc.cpp:83
+msgid "Sort order of register in normal view"
+msgstr "在标准视图中账簿的排序顺序"
+
+#: rc.cpp:84
+msgid "Sort order of register in search dialog"
+msgstr "在搜索对话框中账簿的排序顺序"
+
+#: rc.cpp:85
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation"
+msgstr "在对帐时输入的交易信息的缺省对帐状态"
+
+#: rc.cpp:86
+msgid "Number of days (plus/minus) to search for matching transactions"
+msgstr "查找匹配交易所用的天数(正/负)"
+
+#: rc.cpp:87
+msgid "During import, ask for a new payee's default category"
+msgstr ""
+
+#: rc.cpp:88
+msgid "Method to calculate forecast"
+msgstr "计算预测值的方法"
+
+#: rc.cpp:89
+msgid "Days to forecast"
+msgstr "预测天数"
+
+#: rc.cpp:90
+msgid "Days of normal account cycle"
+msgstr "通常账户循环周期的天数"
+
+#: rc.cpp:91
+msgid "Number of historic cycles to use in forecast"
+msgstr "在预测中使用的历史周期数"
+
+#: rc.cpp:92
+msgid "Day of month to start forecast"
+msgstr "在每月的哪一天开始预测"
+
+#: rc.cpp:93
+msgid "Method to calculate history-based forecast"
+msgstr "计算基于历史的预测的方法"
+
+#: rc.cpp:94
+msgid "Skip opening date when fetching transactions"
+msgstr "在取回交易时跳过开盘日期"
+
+#: rc.cpp:95
+msgid "Include future transaction when using Schedule Forecast"
+msgstr "在使用交易计划预报时,包括未来的交易"
+
+#: rc.cpp:96
+msgid "Include scheduled transactions when using Schedule Forecast"
+msgstr "在使用交易计划预报时,包括计划的交易"
+
+#: rc.cpp:97
+msgid "additional names for cash account"
+msgstr ""
+
+#: rc.cpp:98
+msgid "additional names for checking account"
+msgstr ""
+
+#: rc.cpp:99
+msgid "additional names for credit card account"
+msgstr ""
+
+#: rc.cpp:100
+#, fuzzy
+msgid "additional names for asset account"
+msgstr "创建一个新资产账户"
+
+#: rc.cpp:101
+msgid "additional names for opening balance payee"
+msgstr ""
+
+#: rc.cpp:102
+msgid "additional names for invoice accounts"
+msgstr ""
+
+#: rc.cpp:103 widgets/rc.cpp:161 widgets/rc.cpp:163
+msgid "..."
+msgstr "..."
+
+#: views/kcategoriesview.cpp:276
+msgid "Profit: "
+msgstr "利润:"
+
+#: views/kcategoriesview.cpp:278
+msgid "Loss: "
+msgstr "损失:"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:54
+#: dialogs/transactioneditor.cpp:605 views/kpayeesview.cpp:365
+#: widgets/kmymoneyonlinequoteconfig.cpp:54
+msgid "Accepts the entered data and stores it"
+msgstr "接受并保存输入的数据"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:55 views/kpayeesview.cpp:366
+#: widgets/kmymoneyonlinequoteconfig.cpp:55
+msgid "Use this to accept the modified data."
+msgstr "用它来接受修改后的数据。 "
+
+#: views/kpayeesview.cpp:491
+msgid ""
+"A payee with the name '%1' already exists. It is not advisable to have "
+"multiple payees with the same identification name. Are you sure you would "
+"like to rename the payee?"
+msgstr ""
+"名为“%1”的交款人已存在。不建议多个交款人使用同一个名称。是否重命名该交款人?"
+
+#: views/kpayeesview.cpp:518 views/kpayeesview.cpp:869
+msgid "Unable to modify payee"
+msgstr "无法修改收款人"
+
+#: views/kpayeesview.cpp:564
+msgid "Do you want to save the changes for <b>%1</b>?"
+msgstr "是否保存对<b>%1</b>的修改?"
+
+#: views/kbudgetview.cpp:490 views/kpayeesview.cpp:565
+msgid "Save changes"
+msgstr "保存修改"
+
+#: views/kgloballedgerview.cpp:737 views/kpayeesview.cpp:662
+#: views/kpayeesview.cpp:753
+#, c-format
+msgid "Balance: %1"
+msgstr "余额:%1"
+
+#: views/kpayeesview.cpp:725 views/kpayeesview.cpp:731
+#, c-format
+msgid "Amortization of %1"
+msgstr "%1的分期付款"
+
+#: views/kpayeesview.cpp:727 views/kpayeesview.cpp:733
+#, c-format
+msgid "Payment to %1"
+msgstr "支付给%1"
+
+#: views/kpayeesview.cpp:736
+#, c-format
+msgid "Loan payment from %1"
+msgstr "来自%1的贷款支付"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:123
+#: dialogs/kconfirmmanualenterdlg.cpp:133 views/kpayeesview.cpp:745
+#: widgets/kmymoneycategory.cpp:160 widgets/kmymoneycategory.cpp:166
+#: widgets/transaction.cpp:851 widgets/transaction.cpp:1397
+#: widgets/transaction.cpp:1411
+msgid ""
+"_: Split transaction (category replacement)\n"
+"Split transaction"
+msgstr "切分交易"
+
+#: views/kreportsview.cpp:262
+msgid ""
+"There was an error creating your report: \"%1\".\n"
+"Please report this error to the developer's list: kmymoney2-developer@lists."
+"sourceforge.net"
+msgstr ""
+"在创建您的报表时发生错误:“%1”。\n"
+"请向Kmymoney2的开发者邮件列表kmymoney2-developer@lists.sourceforge.net报告此"
+"错误。"
+
+#: views/kreportsview.cpp:264
+msgid "Critical Error"
+msgstr "致命错误"
+
+#: views/kreportsview.cpp:268
+msgid "Unable to generate report"
+msgstr "无法生成报表"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:125 views/kreportsview.cpp:286
+#: views/rc.cpp:53 widgets/rc.cpp:146
+msgid "Chart"
+msgstr "图表"
+
+#: views/kreportsview.cpp:287 widgets/rc.cpp:147
+msgid "Show the chart version of this report"
+msgstr "以图表方式显示此报表"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:112 views/khomeview.cpp:900
+#: views/kreportsview.cpp:294 views/kreportsview.cpp:328
+msgid "Report"
+msgstr "报表"
+
+#: views/kreportsview.cpp:295
+msgid "Show the report version of this chart"
+msgstr "显示此图表对应的报表"
+
+#: views/kmymoneyview.cpp:236 views/kreportsview.cpp:314
+#: views/kreportsview.cpp:326
+msgid "Reports"
+msgstr "报表"
+
+#: views/khomeview.cpp:902 views/kreportsview.cpp:329 widgets/rc.cpp:56
+msgid "Comment"
+msgstr "说明"
+
+#: views/kreportsview.cpp:432
+msgid "Charts"
+msgstr "图表"
+
+#: views/khomeview.cpp:897 views/kreportsview.cpp:470
+msgid "Favorite Reports"
+msgstr "常用报表"
+
+#: views/kreportsview.cpp:486
+msgid "Old Customized Reports"
+msgstr "旧的自定义报表"
+
+#: views/kreportsview.cpp:579
+msgid "Include Stylesheet"
+msgstr "包含样式表"
+
+#: views/kreportsview.cpp:585
+msgid ""
+"_: CSV (Filefilter)\n"
+"CSV files"
+msgstr "CSV文件"
+
+#: views/kreportsview.cpp:586
+msgid ""
+"_: HTML (Filefilter)\n"
+"HTML files"
+msgstr "HTML文件"
+
+#: views/kreportsview.cpp:591
+msgid "Export as"
+msgstr "导出为..."
+
+#: views/kreportsview.cpp:619 views/kreportsview.cpp:660
+#: views/kreportsview.cpp:942 views/kreportsview.cpp:950
+#: views/kreportsview.cpp:958 views/kreportsview.cpp:968
+#: views/kreportsview.cpp:980 views/kreportsview.cpp:998
+#: views/kreportsview.cpp:1006 views/kreportsview.cpp:1014
+#: views/kreportsview.cpp:1022 views/kreportsview.cpp:1034
+#: views/kreportsview.cpp:1046 views/kreportsview.cpp:1056
+#: views/kreportsview.cpp:1070 views/kreportsview.cpp:1079
+#: views/kreportsview.cpp:1087 views/kreportsview.cpp:1095
+#: views/kreportsview.cpp:1103 views/kreportsview.cpp:1111
+#: views/kreportsview.cpp:1120 views/kreportsview.cpp:1132
+#: views/kreportsview.cpp:1145 views/kreportsview.cpp:1155
+#: views/kreportsview.cpp:1165 views/kreportsview.cpp:1175
+#: views/kreportsview.cpp:1185 views/kreportsview.cpp:1195
+#: views/kreportsview.cpp:1208 views/kreportsview.cpp:1222
+#: views/kreportsview.cpp:1239 views/kreportsview.cpp:1257
+#: views/kreportsview.cpp:1273 views/kreportsview.cpp:1295
+#: views/kreportsview.cpp:1304 views/kreportsview.cpp:1313
+#: views/kreportsview.cpp:1322 views/kreportsview.cpp:1336
+#: views/kreportsview.cpp:1347 views/kreportsview.cpp:1362
+#: views/kreportsview.cpp:1372 views/kreportsview.cpp:1383
+#: views/kreportsview.cpp:1393 views/kreportsview.cpp:1404
+#: views/kreportsview.cpp:1423 views/kreportsview.cpp:1432
+#: views/kreportsview.cpp:1444 views/kreportsview.cpp:1463
+#: views/kreportsview.cpp:1472 views/kreportsview.cpp:1481
+#: views/kreportsview.cpp:1490
+msgid "Default Report"
+msgstr "缺省报表"
+
+#: views/kreportsview.cpp:621 views/kreportsview.cpp:661
+msgid "Custom Report"
+msgstr "自定义报表"
+
+#: views/kreportsview.cpp:622
+msgid " (Customized)"
+msgstr "(自定义的)"
+
+#: views/kreportsview.cpp:690
+msgid ""
+"Are you sure you want to delete report <b>%1</b>? There is no way to "
+"recover it!"
+msgstr "您确定要删除报表<b>%1</b>?一旦删除之后就无法再恢复了!"
+
+#: views/kreportsview.cpp:690 views/kreportsview.cpp:702
+msgid "Delete Report?"
+msgstr "删除报表?"
+
+#: views/kreportsview.cpp:702
+msgid "Sorry, <b>%1</b> is a default report. You may not delete it."
+msgstr "对不起,<b>%1</b>是缺省报表。您不可以删除它。"
+
+#: views/kreportsview.cpp:882
+msgid "&Open"
+msgstr "打开(&O)"
+
+#: views/kreportsview.cpp:884
+msgid "&New report"
+msgstr "新建报表(&N)"
+
+#: views/kreportsview.cpp:934
+msgid "Income and Expenses"
+msgstr "收入和支出"
+
+#: views/kreportsview.cpp:941
+msgid "Income and Expenses This Month"
+msgstr "本月收入和支出"
+
+#: views/kreportsview.cpp:949
+msgid "Income and Expenses This Year"
+msgstr "本年度收入和支出"
+
+#: views/kreportsview.cpp:957
+#, fuzzy
+msgid "Income and Expenses By Year"
+msgstr "本年度收入和支出"
+
+#: views/kreportsview.cpp:967
+msgid "Income and Expenses Graph"
+msgstr "收入和支出图"
+
+#: views/kreportsview.cpp:979
+msgid "Income and Expenses Pie Chart"
+msgstr "收入和支出饼图"
+
+#: views/khomeview.cpp:1361 views/kreportsview.cpp:990
+msgid "Net Worth"
+msgstr "资产净值"
+
+#: views/kreportsview.cpp:997
+msgid "Net Worth By Month"
+msgstr "月资产净值"
+
+#: views/kreportsview.cpp:1005
+msgid "Net Worth Today"
+msgstr "本日资产净值"
+
+#: views/kreportsview.cpp:1013
+msgid "Net Worth By Year"
+msgstr "年度资产净值"
+
+#: views/kreportsview.cpp:1021
+msgid "7-day Cash Flow Forecast"
+msgstr "七天现金流预测"
+
+#: views/kreportsview.cpp:1033
+msgid "Net Worth Graph"
+msgstr "净值图"
+
+#: views/kreportsview.cpp:1045
+msgid "Account Balances by Institution"
+msgstr "账户余额(按金融机构分类)"
+
+#: views/kreportsview.cpp:1055
+msgid "Account Balances by Type"
+msgstr "账户余额(按类型分类)"
+
+#: views/kreportsview.cpp:1069
+msgid "Transactions by Account"
+msgstr "交易(按账户分类)"
+
+#: views/kreportsview.cpp:1078
+msgid "Transactions by Category"
+msgstr "交易(按交易类别分类)"
+
+#: views/kreportsview.cpp:1086
+msgid "Transactions by Payee"
+msgstr "交易(按收款人分类)"
+
+#: views/kreportsview.cpp:1094
+msgid "Transactions by Month"
+msgstr "交易(按月份分类)"
+
+#: views/kreportsview.cpp:1102
+msgid "Transactions by Week"
+msgstr "交易(按周分类)"
+
+#: views/kreportsview.cpp:1110
+msgid "Loan Transactions"
+msgstr "贷款交易"
+
+#: views/kreportsview.cpp:1119
+msgid "Transactions by Reconciliation Status"
+msgstr "交易(按对帐状态分类)"
+
+#: views/kreportsview.cpp:1125
+#, fuzzy
+msgid "Cash Flow"
+msgstr "现金账户"
+
+#: views/kreportsview.cpp:1131
+#, fuzzy
+msgid "Cash Flow Transactions This Month"
+msgstr "交易(按月份分类)"
+
+#: views/kmymoneyview.cpp:226 views/kmymoneyview.cpp:228
+#: views/kreportsview.cpp:1137
+msgid "Investments"
+msgstr "投资"
+
+#: views/kreportsview.cpp:1154
+msgid "Investment Holdings by Account"
+msgstr "所持投资(按账户分类)"
+
+#: views/kreportsview.cpp:1164
+msgid "Investment Holdings by Type"
+msgstr "所持投资(按类型分类)"
+
+#: views/kreportsview.cpp:1184
+msgid "Investment Performance by Type"
+msgstr "投资表现(按类分类)"
+
+#: views/kreportsview.cpp:1194
+msgid "Investment Holdings Pie"
+msgstr "所持投资饼图"
+
+#: views/kreportsview.cpp:1207
+msgid "Investment Worth Graph"
+msgstr "投资价值图"
+
+#: views/kreportsview.cpp:1221
+#, fuzzy
+msgid "Investment Price Graph"
+msgstr "投资价值图"
+
+#: views/kreportsview.cpp:1238
+#, fuzzy
+msgid "Investment Moving Average Price Graph"
+msgstr "加权运动平均"
+
+#: views/kreportsview.cpp:1256
+#, fuzzy
+msgid "Investment Moving Average"
+msgstr "加权运动平均"
+
+#: views/kreportsview.cpp:1272
+#, fuzzy
+msgid "Investment Moving Average vs Actual"
+msgstr "加权运动平均"
+
+#: views/kreportsview.cpp:1287
+msgid "Taxes"
+msgstr "税"
+
+#: views/kreportsview.cpp:1294
+msgid "Tax Transactions by Category"
+msgstr "纳税交易(按交易类别分类)"
+
+#: views/kreportsview.cpp:1303
+msgid "Tax Transactions by Payee"
+msgstr "纳税交易(按收款人分类)"
+
+#: views/kreportsview.cpp:1312
+msgid "Tax Transactions by Category Last Fiscal Year"
+msgstr "上一财年纳税交易(按交易类别分类)"
+
+#: views/kreportsview.cpp:1321
+msgid "Tax Transactions by Payee Last Fiscal Year"
+msgstr "上一财年纳税交易(按收款人分类)"
+
+#: views/kreportsview.cpp:1328
+msgid "Budgeting"
+msgstr "预算"
+
+#: views/kreportsview.cpp:1335
+msgid "Budgeted vs. Actual This Year"
+msgstr "今年预算与实际对比"
+
+#: views/kreportsview.cpp:1346
+#, fuzzy
+msgid "Budgeted vs. Actual This Year (YTM)"
+msgstr "今年预算与实际对比"
+
+#: views/khomeview.cpp:1383 views/kreportsview.cpp:1361
+msgid "Monthly Budgeted vs. Actual"
+msgstr "月度预算与实际对比"
+
+#: views/kreportsview.cpp:1371
+msgid "Yearly Budgeted vs. Actual"
+msgstr "年度预算与实际对比"
+
+#: views/kreportsview.cpp:1382
+msgid "Monthly Budget"
+msgstr "月度预算"
+
+#: views/kreportsview.cpp:1392
+msgid "Yearly Budget"
+msgstr "年度预算"
+
+#: views/kreportsview.cpp:1403
+msgid "Yearly Budgeted vs Actual Graph"
+msgstr "年度预算与实际对比图"
+
+#: views/kreportsview.cpp:1422
+msgid "Forecast By Month"
+msgstr "按月预报"
+
+#: views/kreportsview.cpp:1431
+msgid "Forecast Next Quarter"
+msgstr "下季度预报"
+
+#: views/kreportsview.cpp:1443
+msgid "Net Worth Forecast Graph"
+msgstr "净值预报图"
+
+#: dialogs/rc.cpp:126 dialogs/rc.cpp:128 dialogs/rc.cpp:466
+#: views/kreportsview.cpp:1455
+msgid "General Information"
+msgstr "总说明"
+
+#: views/kreportsview.cpp:1462
+msgid "Schedule Information"
+msgstr "交易计划信息"
+
+#: views/kreportsview.cpp:1471
+msgid "Schedule Summary Information"
+msgstr "交易计划概要"
+
+#: views/kreportsview.cpp:1480
+msgid "Account Information"
+msgstr "账户信息"
+
+#: views/kreportsview.cpp:1489
+msgid "Loan Information"
+msgstr "贷款信息"
+
+#: dialogs/rc.cpp:323 views/kmymoneyview.cpp:148 views/kmymoneyview.cpp:150
+msgid "Institutions"
+msgstr "金融机构"
+
+#: dialogs/knewaccountdlg.cpp:98 views/kmymoneyview.cpp:162
+#: views/kmymoneyview.cpp:164 widgets/rc.cpp:4 widgets/rc.cpp:94
+msgid "Accounts"
+msgstr "账户"
+
+#: views/kmymoneyview.cpp:176
+msgid "Bills & Reminders"
+msgstr "账单与提醒"
+
+#: views/kmymoneyview.cpp:178
+#, fuzzy
+msgid "Scheduled transactions"
+msgstr "定期交易"
+
+#: dialogs/knewaccountdlg.cpp:98 dialogs/rc.cpp:193 views/kmymoneyview.cpp:188
+#: views/kmymoneyview.cpp:190 widgets/rc.cpp:91
+msgid "Categories"
+msgstr "交易类别"
+
+#: dialogs/kfindtransactiondlg.cpp:212 dialogs/rc.cpp:318
+#: views/kmymoneyview.cpp:199 views/kmymoneyview.cpp:201 widgets/rc.cpp:93
+msgid "Payees"
+msgstr "收款人"
+
+#: views/kgloballedgerview.cpp:149 views/kmymoneyview.cpp:211
+msgid "Ledgers"
+msgstr "账簿"
+
+#: views/kmymoneyview.cpp:353
+msgid "Creating transactions can only be performed in the ledger view"
+msgstr "只能在账簿视图中创建交易"
+
+#: views/kmymoneyview.cpp:367
+msgid "Modifying transactions can only be performed in the ledger view"
+msgstr "只能在账簿视图中修改交易"
+
+#: views/kmymoneyview.cpp:382
+msgid "Duplicating transactions can only be performed in the ledger view"
+msgstr "只能在账簿视图中复制交易"
+
+#: views/kmymoneyview.cpp:394
+msgid "Edit the current selected transactions"
+msgstr "编辑当前选择的交易"
+
+#: views/kmymoneyview.cpp:602
+msgid "<b>%1</b> is not a KMyMoney file."
+msgstr "<b>%1</b>不是一个KMyMoney文档。"
+
+#: views/kmymoneyview.cpp:643
+msgid "GPG is not available for decryption of file <b>%1</b>"
+msgstr "解压文件<b>%1</b>需要GPG,但它尚未被安装。"
+
+#: views/kmymoneyview.cpp:721
+msgid ""
+"File <b>%1</b> contains the old binary format used by KMyMoney. Please use "
+"an older version of KMyMoney (0.8.x) that still supports this format to "
+"convert it to the new XML based format."
+msgstr ""
+"文件<b>%1</b>中包含KMyMoney过去使用的二进制格式。请使用仍支持这种格式的旧版本"
+"KMyMoney(0.8.X) 来将它转换为新的基于XML文件格式。"
+
+#: views/kmymoneyview.cpp:723
+msgid "File <b>%1</b> contains an unknown file format!"
+msgstr "文件<b>%1</b>包含未知的文件格式!"
+
+#: views/kmymoneyview.cpp:728
+msgid "Cannot read from file <b>%1</b>!"
+msgstr "无法读取文件<b>%1</b>!"
+
+#: views/kmymoneyview.cpp:732
+msgid "Cannot load file <b>%1</b>. Reason: %2"
+msgstr "无法载入文件<b>%1</b>。原因:%2"
+
+#: views/kmymoneyview.cpp:742 views/kmymoneyview.cpp:748
+msgid "File <b>%1</b> not found!"
+msgstr "找不到文件<b>%1</b>"
+
+#: views/kmymoneyview.cpp:812
+msgid "Can't open database %1\n"
+msgstr "无法打开数据库%1\n"
+
+#: views/kmymoneyview.cpp:844
+msgid "An unrecoverable error occurred while reading the database"
+msgstr "在读取数据库时发生了无法恢复的错误"
+
+#: views/kmymoneyview.cpp:846 views/kmymoneyview.cpp:1208
+msgid "Database malfunction"
+msgstr "数据库工作异常"
+
+#: views/kmymoneyview.cpp:938
+msgid "Unknown fix level in input file"
+msgstr "在输入文件中存在未知的fix level。"
+
+#: views/kmymoneyview.cpp:984
+msgid ""
+"GPG does not seem to be installed on your system. Please make sure, that GPG "
+"can be found using the standard search path. This time, encryption is "
+"disabled."
+msgstr ""
+"您的系统中似乎尚未安装GPG,因此KMyMoney已关闭加密功能。请确认GPG已安装并且可"
+"以通过正常访问路径访问。"
+
+#: views/kmymoneyview.cpp:984
+msgid "GPG not found"
+msgstr "找不到GPG"
+
+#: views/kmymoneyview.cpp:991
+msgid ""
+"You have selected to encrypt your data also with the KMyMoney recover key, "
+"but the key with id</p><p><center><b>%1</b></center></p>has not been found "
+"in your keyring at this time. Please make sure to import this key into your "
+"keyring. You can find it on the <a href=\"http://kmymoney2.sourceforge.net/"
+"\">KMyMoney web-site</a>. This time your data will not be encrypted with the "
+"KMyMoney recover key."
+msgstr ""
+"您选择使用KMyMoney恢复密钥加密您的数据,但是在您的密钥环中无法找到id为<b>%1</"
+"b>的密钥,因此现在您无法用它来加密您的数据。请确认您已经将它导入到了您的密钥"
+"环中。您可以在<a href=\"http://kmymoney2.sourceforge.net/\">KMyMoney网站</a>"
+"中找到该密钥。"
+
+#: views/kmymoneyview.cpp:991 views/kmymoneyview.cpp:1000
+msgid "GPG-Key not found"
+msgstr "找不到GPG密钥"
+
+#: views/kmymoneyview.cpp:1000
+msgid ""
+"You have specified to encrypt your data for the user-id</p><p><center><b>%1</"
+"b>.</center></p>Unfortunately, a valid key for this user-id was not found in "
+"your keyring. Please make sure to import a valid key for this user-id. This "
+"time, encryption is disabled."
+msgstr ""
+"您选择使用用户id<b>%1</b>来加密您数据,但是在您的密钥环中找不到一个对应它的合"
+"法密钥,因此现在您无法用它来加密您的数据。请确认您已经为它在密钥环中导入了一"
+"个合法的密钥。"
+
+#: views/kmymoneyview.cpp:1006
+msgid ""
+"You have configured to save your data in encrypted form using GPG. Please be "
+"aware, that this is a brand new feature which is yet untested. Make sure, "
+"you have the necessary understanding that you might loose all your data if "
+"you store it encrypted and cannot decrypt it later on! If unsure, answer "
+"<b>No</b>."
+msgstr ""
+"您选择了使用GPG来对您保存的数据进行加密。这里需要提醒您,这是一个最近新开发的"
+"功能,还没有被很好的测试过,<b>存在着丢失数据的风险</b>。如果您不确定要使用加"
+"密,请选择“否”。"
+
+#: views/kmymoneyview.cpp:1008
+msgid "Store GPG encrypted"
+msgstr "保存GPG加密数据"
+
+#: views/kmymoneyview.cpp:1038 views/kmymoneyview.cpp:1052
+msgid "Unable to open file '%1' for writing."
+msgstr "无法打开文件“%1”。"
+
+#: views/kmymoneyview.cpp:1065 views/kmymoneyview.cpp:1074
+msgid "Failure while writing to '%1'"
+msgstr "写入文件“%1”失败"
+
+#: views/kmymoneyview.cpp:1086 views/kmymoneyview.cpp:1181
+msgid "Tried to access a file when it's not open"
+msgstr "试图访问一个未打开的文件"
+
+#: views/kmymoneyview.cpp:1092
+msgid ""
+"Since this version of KMyMoney only writes data files in its new format, "
+"files written with this version cannot be read by KMyMoney version 0.4. If "
+"you still want to use older versions of KMyMoney with your data files, "
+"please make sure you keep a backup-file of your finance data. If you want to "
+"abort this operation, please press Cancel now"
+msgstr ""
+"因为此版本的KMyMoney只能用新文件格式保存数据,所以它保存的数据文件将无法被0.4"
+"版本的KMyMoney正确读取。如果您需要使用旧版本的KMyMoney来处理您的数据文件,请"
+"在保存前先对旧数据文件进行备份。如果您要终止本操作,请按“取消”键。"
+
+#: views/kmymoneyview.cpp:1122
+msgid "Malformed URL '%1'"
+msgstr "错误的地址“%1”"
+
+#: views/kmymoneyview.cpp:1192
+msgid ""
+"Database contains data which must be removed before using SaveAs.\n"
+"Do you wish to continue?"
+msgstr ""
+"数据库中包含在进行“另存为”操作前必须删除的数据。\n"
+"你想要继续吗?"
+
+#: views/kmymoneyview.cpp:1205
+msgid ""
+"An unrecoverable error occurred while writing to the database.\n"
+"It may well be corrupt."
+msgstr ""
+"在写入数据库时发生了无法恢复的错误。\n"
+"它可能已损坏。"
+
+#: views/kmymoneyview.cpp:1215
+msgid ""
+"Can't open or create database %1\n"
+"Retry SaveAsDatabase and click Help for further info"
+msgstr ""
+"无法打开和创建数据库%1]n 重试“另存为数据库”,并点击“帮助”以获取更多信息。"
+
+#: views/kmymoneyview.cpp:1354
+msgid "Afghanistan Afghani"
+msgstr "阿富汗尼"
+
+#: views/kmymoneyview.cpp:1355
+msgid "Albanian Lek"
+msgstr "阿尔巴尼亚列克"
+
+#: views/kmymoneyview.cpp:1356
+msgid "Netherland Antillian Guilder"
+msgstr "荷兰盾"
+
+#: views/kmymoneyview.cpp:1357
+msgid "Algerian Dinar"
+msgstr "阿尔及利亚第纳尔"
+
+#: views/kmymoneyview.cpp:1358
+msgid "Andorran Franc"
+msgstr "安道尔法郎"
+
+#: views/kmymoneyview.cpp:1359
+msgid "Andorran Peseta"
+msgstr "安道尔比塞塔"
+
+#: views/kmymoneyview.cpp:1360
+msgid "Angolan New Kwanza"
+msgstr "安哥拉新宽扎"
+
+#: views/kmymoneyview.cpp:1361
+msgid "Argentine Peso"
+msgstr "阿根廷比索"
+
+#: views/kmymoneyview.cpp:1362
+msgid "Aruban Florin"
+msgstr "阿鲁巴岛弗罗林"
+
+#: views/kmymoneyview.cpp:1363
+msgid "Australian Dollar"
+msgstr "澳大利亚元"
+
+#: views/kmymoneyview.cpp:1364
+msgid "Azerbaijani Manat"
+msgstr "阿塞拜疆玛纳特"
+
+#: views/kmymoneyview.cpp:1365
+msgid "Bahamian Dollar"
+msgstr "巴哈马元"
+
+#: views/kmymoneyview.cpp:1366
+msgid "Bahraini Dinar"
+msgstr "巴林岛第纳尔"
+
+#: views/kmymoneyview.cpp:1367
+msgid "Bangladeshi Taka"
+msgstr "孟加拉国塔卡"
+
+#: views/kmymoneyview.cpp:1368
+msgid "Barbados Dollar"
+msgstr "巴巴多斯岛元"
+
+#: views/kmymoneyview.cpp:1369
+msgid "Belarussian Ruble"
+msgstr "白俄罗斯卢布"
+
+#: views/kmymoneyview.cpp:1370
+msgid "Belize Dollar"
+msgstr "伯利兹元"
+
+#: views/kmymoneyview.cpp:1371
+msgid "Bermudian Dollar"
+msgstr "百慕大元"
+
+#: views/kmymoneyview.cpp:1372
+msgid "Bhutan Ngultrum"
+msgstr "不丹Ngultrum"
+
+#: views/kmymoneyview.cpp:1373
+msgid "Bolivian Boliviano"
+msgstr "玻利维亚Boliviano"
+
+#: views/kmymoneyview.cpp:1374
+msgid "Bosnian Convertible Mark"
+msgstr "波斯尼亚Convertible Mark"
+
+#: views/kmymoneyview.cpp:1375
+msgid "Botswana Pula"
+msgstr "博茨瓦纳Pula"
+
+#: views/kmymoneyview.cpp:1376
+msgid "Brazilian Real"
+msgstr "巴西雷亚尔"
+
+#: views/kmymoneyview.cpp:1377
+msgid "British Pound"
+msgstr "英镑"
+
+#: views/kmymoneyview.cpp:1378
+msgid "Brunei Dollar"
+msgstr "文莱元"
+
+#: views/kmymoneyview.cpp:1379
+msgid "Bulgarian Lev"
+msgstr "保加利亚列弗"
+
+#: views/kmymoneyview.cpp:1380
+msgid "Burundi Franc"
+msgstr "布隆迪法郎"
+
+#: views/kmymoneyview.cpp:1381
+msgid "CFA Franc BEAC"
+msgstr "CFA Franc BEAC"
+
+#: views/kmymoneyview.cpp:1382
+msgid "CFA Franc BCEAO"
+msgstr "CFA Franc BCEAO"
+
+#: views/kmymoneyview.cpp:1383
+msgid "CFP Franc Pacifique"
+msgstr "CFP Franc Pacifique"
+
+#: views/kmymoneyview.cpp:1384
+msgid "Cambodia Riel"
+msgstr "柬埔寨瑞尔"
+
+#: views/kmymoneyview.cpp:1385
+msgid "Canadian Dollar"
+msgstr "加元"
+
+#: views/kmymoneyview.cpp:1386
+msgid "Cape Verde Escudo"
+msgstr "佛得角埃斯库多"
+
+#: views/kmymoneyview.cpp:1387
+msgid "Cayman Islands Dollar"
+msgstr "开曼群岛元"
+
+#: views/kmymoneyview.cpp:1388
+msgid "Chilean Peso"
+msgstr "智利比索"
+
+#: views/kmymoneyview.cpp:1389
+msgid "Chinese Yuan Renminbi"
+msgstr "人民币"
+
+#: views/kmymoneyview.cpp:1390
+msgid "Colombian Peso"
+msgstr "哥伦比亚比索"
+
+#: views/kmymoneyview.cpp:1391
+msgid "Comoros Franc"
+msgstr "科摩罗法郎"
+
+#: views/kmymoneyview.cpp:1392
+msgid "Costa Rican Colon"
+msgstr "哥斯达黎加Colon"
+
+#: views/kmymoneyview.cpp:1393
+msgid "Croatian Kuna"
+msgstr "克罗地亚"
+
+#: views/kmymoneyview.cpp:1394
+msgid "Cuban Peso"
+msgstr "古巴比索"
+
+#: views/kmymoneyview.cpp:1395
+msgid "Czech Koruna"
+msgstr "捷克克朗"
+
+#: views/kmymoneyview.cpp:1396
+msgid "Danish Krone"
+msgstr "丹麦克朗"
+
+#: views/kmymoneyview.cpp:1397
+msgid "Djibouti Franc"
+msgstr "吉布提法郎"
+
+#: views/kmymoneyview.cpp:1398
+msgid "Dominican Peso"
+msgstr "多米尼加比索"
+
+#: views/kmymoneyview.cpp:1399
+msgid "East Caribbean Dollar"
+msgstr "East Caribbean Dollar"
+
+#: views/kmymoneyview.cpp:1400
+msgid "Egyptian Pound"
+msgstr "埃及镑"
+
+#: views/kmymoneyview.cpp:1401
+msgid "El Salvador Colon"
+msgstr "萨尔瓦多Colon"
+
+#: views/kmymoneyview.cpp:1402
+msgid "Eritrean Nakfa"
+msgstr "厄立特里亚Nakfa"
+
+#: views/kmymoneyview.cpp:1403
+msgid "Estonian Kroon"
+msgstr "爱沙尼亚克鲁恩"
+
+#: views/kmymoneyview.cpp:1404
+msgid "Ethiopian Birr"
+msgstr "埃塞俄比亚Birr"
+
+#: views/kmymoneyview.cpp:1405
+msgid "Euro"
+msgstr "欧元"
+
+#: views/kmymoneyview.cpp:1406
+msgid "Falkland Islands Pound"
+msgstr "马尔维纳斯群岛镑"
+
+#: views/kmymoneyview.cpp:1407
+msgid "Fiji Dollar"
+msgstr "斐济元"
+
+#: views/kmymoneyview.cpp:1408
+msgid "Gambian Dalasi"
+msgstr "冈比亚达拉西"
+
+#: views/kmymoneyview.cpp:1409
+msgid "Georgian Lari"
+msgstr "格鲁吉亚Lari"
+
+#: views/kmymoneyview.cpp:1410
+msgid "Ghanaian Cedi"
+msgstr "加纳塞地"
+
+#: views/kmymoneyview.cpp:1411
+msgid "Gibraltar Pound"
+msgstr "直布罗陀镑"
+
+#: views/kmymoneyview.cpp:1412
+msgid "Guatemalan Quetzal"
+msgstr "危地马拉格查尔"
+
+#: views/kmymoneyview.cpp:1413
+msgid "Guinea-Bissau Peso"
+msgstr "几内亚比绍比索"
+
+#: views/kmymoneyview.cpp:1414
+msgid "Guyanan Dollar"
+msgstr "圭亚那元"
+
+#: views/kmymoneyview.cpp:1415
+msgid "Haitian Gourde"
+msgstr "海地古德"
+
+#: views/kmymoneyview.cpp:1416
+msgid "Honduran Lempira"
+msgstr "洪都拉斯伦皮拉"
+
+#: views/kmymoneyview.cpp:1417
+msgid "Hong Kong Dollar"
+msgstr "港币"
+
+#: views/kmymoneyview.cpp:1418
+msgid "Hungarian Forint"
+msgstr "匈牙利福林"
+
+#: views/kmymoneyview.cpp:1419
+msgid "Iceland Krona"
+msgstr "冰岛克朗"
+
+#: views/kmymoneyview.cpp:1420
+msgid "Indian Rupee"
+msgstr "印度卢比"
+
+#: views/kmymoneyview.cpp:1421
+msgid "Indonesian Rupiah"
+msgstr "印尼卢比"
+
+#: views/kmymoneyview.cpp:1422
+msgid "Iranian Rial"
+msgstr "伊朗里亚尔"
+
+#: views/kmymoneyview.cpp:1423
+msgid "Iraqi Dinar"
+msgstr "伊拉克第纳尔"
+
+#: views/kmymoneyview.cpp:1424
+msgid "Israeli New Shekel"
+msgstr "以色列新谢克尔"
+
+#: views/kmymoneyview.cpp:1425
+msgid "Jamaican Dollar"
+msgstr "牙买加元"
+
+#: views/kmymoneyview.cpp:1426
+msgid "Japanese Yen"
+msgstr "日元"
+
+#: views/kmymoneyview.cpp:1427
+msgid "Jordanian Dinar"
+msgstr "约旦第纳尔"
+
+#: views/kmymoneyview.cpp:1428
+msgid "Kazakhstan Tenge"
+msgstr "哈萨克Tenge"
+
+#: views/kmymoneyview.cpp:1429
+msgid "Kenyan Shilling"
+msgstr "肯尼亚先令"
+
+#: views/kmymoneyview.cpp:1430
+msgid "Kuwaiti Dinar"
+msgstr "科威特第纳尔"
+
+#: views/kmymoneyview.cpp:1431
+msgid "Kyrgyzstan Som"
+msgstr "吉尔吉斯斯坦Som"
+
+#: views/kmymoneyview.cpp:1432
+msgid "Laos Kip"
+msgstr "老挝Kip"
+
+#: views/kmymoneyview.cpp:1433
+msgid "Latvian Lats"
+msgstr "拉脱维亚拉特"
+
+#: views/kmymoneyview.cpp:1434
+msgid "Lebanese Pound"
+msgstr "黎巴嫩镑"
+
+#: views/kmymoneyview.cpp:1435
+msgid "Lesotho Loti"
+msgstr "莱索托Loti"
+
+#: views/kmymoneyview.cpp:1436
+msgid "Liberian Dollar"
+msgstr "利比里亚元"
+
+#: views/kmymoneyview.cpp:1437
+msgid "Libyan Dinar"
+msgstr "利比亚第纳尔"
+
+#: views/kmymoneyview.cpp:1438
+msgid "Lithuanian Litas"
+msgstr "立陶宛"
+
+#: views/kmymoneyview.cpp:1439
+msgid "Macau Pataca"
+msgstr "澳门帕塔卡"
+
+#: views/kmymoneyview.cpp:1440
+msgid "Macedonian Denar"
+msgstr "马其顿Denar"
+
+#: views/kmymoneyview.cpp:1441
+msgid "Malagasy Franc"
+msgstr "马尔加什法郎"
+
+#: views/kmymoneyview.cpp:1442
+msgid "Malawi Kwacha"
+msgstr "马拉维克瓦查"
+
+#: views/kmymoneyview.cpp:1443
+msgid "Malaysian Ringgit"
+msgstr "马来西亚林吉特"
+
+#: views/kmymoneyview.cpp:1444
+msgid "Maldive Rufiyaa"
+msgstr "马尔代夫Rufiyaa"
+
+#: views/kmymoneyview.cpp:1445
+msgid "Mali Republic Franc"
+msgstr "马里共和国法郎"
+
+#: views/kmymoneyview.cpp:1446
+msgid "Mauritanian Ouguiya"
+msgstr "毛里塔尼亚乌吉亚"
+
+#: views/kmymoneyview.cpp:1447
+msgid "Mauritius Rupee"
+msgstr "毛里求斯卢比"
+
+#: views/kmymoneyview.cpp:1448
+msgid "Mexican Peso"
+msgstr "墨西哥比索"
+
+#: views/kmymoneyview.cpp:1449
+msgid "Moldavian Leu"
+msgstr "摩尔达维亚Leu"
+
+#: views/kmymoneyview.cpp:1450
+msgid "Mongolian Tugrik"
+msgstr "蒙古图格里克"
+
+#: views/kmymoneyview.cpp:1451
+msgid "Moroccan Dirham"
+msgstr "摩洛哥迪拉姆"
+
+#: views/kmymoneyview.cpp:1452
+msgid "Mozambique Metical"
+msgstr "莫桑比克Metical"
+
+#: views/kmymoneyview.cpp:1453
+msgid "Myanmar Kyat"
+msgstr "缅甸元"
+
+#: views/kmymoneyview.cpp:1454
+msgid "Namibian Dollar"
+msgstr "纳米比亚元"
+
+#: views/kmymoneyview.cpp:1455
+msgid "Nepalese Rupee"
+msgstr "尼泊尔卢比"
+
+#: views/kmymoneyview.cpp:1456
+msgid "New Zealand Dollar"
+msgstr "新西兰元"
+
+#: views/kmymoneyview.cpp:1457
+msgid "Nicaraguan Cordoba Oro"
+msgstr "尼加拉瓜Cordoba Oro"
+
+#: views/kmymoneyview.cpp:1458
+msgid "Nigerian Naira"
+msgstr "尼日利亚奈拉"
+
+#: views/kmymoneyview.cpp:1459
+msgid "North Korean Won"
+msgstr "朝鲜圆"
+
+#: views/kmymoneyview.cpp:1460
+msgid "Norwegian Kroner"
+msgstr "挪威Kroner"
+
+#: views/kmymoneyview.cpp:1461
+msgid "Omani Rial"
+msgstr "阿曼里亚尔"
+
+#: views/kmymoneyview.cpp:1462
+msgid "Pakistan Rupee"
+msgstr "巴基斯坦卢比"
+
+#: views/kmymoneyview.cpp:1463
+msgid "Panamanian Balboa"
+msgstr "巴拿马Balboa"
+
+#: views/kmymoneyview.cpp:1464
+msgid "Papua New Guinea Kina"
+msgstr "巴布亚岛New Guinea Kina"
+
+#: views/kmymoneyview.cpp:1465
+msgid "Paraguay Guarani"
+msgstr "巴拉圭瓜拉尼"
+
+#: views/kmymoneyview.cpp:1466
+msgid "Peruvian Nuevo Sol"
+msgstr "秘鲁Nuevo Sol"
+
+#: views/kmymoneyview.cpp:1467
+msgid "Philippine Peso"
+msgstr "菲律宾比索"
+
+#: views/kmymoneyview.cpp:1468
+msgid "Polish Zloty"
+msgstr "波兰兹罗提"
+
+#: views/kmymoneyview.cpp:1469
+msgid "Qatari Rial"
+msgstr "卡塔尔里亚尔"
+
+#: views/kmymoneyview.cpp:1470
+msgid "Romanian Leu (new)"
+msgstr "罗马尼亚列伊(新)"
+
+#: views/kmymoneyview.cpp:1471
+msgid "Russian Ruble"
+msgstr "俄罗斯卢布"
+
+#: views/kmymoneyview.cpp:1472
+msgid "Rwanda Franc"
+msgstr "卢旺达法郎"
+
+#: views/kmymoneyview.cpp:1473
+msgid "Samoan Tala"
+msgstr "萨摩亚他拉"
+
+#: views/kmymoneyview.cpp:1474
+msgid "Sao Tome and Principe Dobra"
+msgstr "圣多美和普林西比岛Dobra"
+
+#: views/kmymoneyview.cpp:1475
+msgid "Saudi Riyal"
+msgstr "沙特阿拉伯里亚尔"
+
+#: views/kmymoneyview.cpp:1476
+msgid "Seychelles Rupee"
+msgstr "塞舌尔卢比"
+
+#: views/kmymoneyview.cpp:1477
+msgid "Sierra Leone Leone"
+msgstr "塞拉利昂里昂"
+
+#: views/kmymoneyview.cpp:1478
+msgid "Singapore Dollar"
+msgstr "新加坡元"
+
+#: views/kmymoneyview.cpp:1481
+msgid "Solomon Islands Dollar"
+msgstr "所罗门群岛元"
+
+#: views/kmymoneyview.cpp:1482
+msgid "Somali Shilling"
+msgstr "索马里先令"
+
+#: views/kmymoneyview.cpp:1483
+msgid "South African Rand"
+msgstr "南非兰特"
+
+#: views/kmymoneyview.cpp:1484
+msgid "South Korean Won"
+msgstr "韩元"
+
+#: views/kmymoneyview.cpp:1485
+msgid "Sri Lanka Rupee"
+msgstr "斯里兰卡卢比"
+
+#: views/kmymoneyview.cpp:1486
+msgid "St. Helena Pound"
+msgstr "圣赫勒拿镑"
+
+#: views/kmymoneyview.cpp:1487
+msgid "Sudanese Dinar"
+msgstr "苏丹第纳尔"
+
+#: views/kmymoneyview.cpp:1488
+msgid "Suriname Guilder"
+msgstr "苏里南共和国盾"
+
+#: views/kmymoneyview.cpp:1489
+msgid "Swaziland Lilangeni"
+msgstr "斯威士兰Lilangeni"
+
+#: views/kmymoneyview.cpp:1490
+msgid "Swedish Krona"
+msgstr "瑞典克郎"
+
+#: views/kmymoneyview.cpp:1491
+msgid "Swiss Franc"
+msgstr "瑞士法郎"
+
+#: views/kmymoneyview.cpp:1492
+msgid "Syrian Pound"
+msgstr "叙利亚镑"
+
+#: views/kmymoneyview.cpp:1493
+msgid "Taiwan Dollar"
+msgstr "新台币"
+
+#: views/kmymoneyview.cpp:1494
+msgid "Tajikistan Somani"
+msgstr "塔吉克斯坦Somani"
+
+#: views/kmymoneyview.cpp:1495
+msgid "Tanzanian Shilling"
+msgstr "坦桑尼亚先令"
+
+#: views/kmymoneyview.cpp:1496
+msgid "Thai Baht"
+msgstr "泰国铢"
+
+#: views/kmymoneyview.cpp:1497
+msgid "Tongan Pa'anga"
+msgstr "汤加Pa'anga"
+
+#: views/kmymoneyview.cpp:1498
+msgid "Trinidad and Tobago Dollar"
+msgstr "特立尼达和多巴哥元"
+
+#: views/kmymoneyview.cpp:1499
+msgid "Tunisian Dinar"
+msgstr "突尼斯第纳尔"
+
+#: views/kmymoneyview.cpp:1500
+msgid "Turkish Lira (new)"
+msgstr "土耳其里拉(新)"
+
+#: views/kmymoneyview.cpp:1501
+msgid "Turkmenistan Manat"
+msgstr "土库曼斯坦Manat"
+
+#: views/kmymoneyview.cpp:1502
+msgid "US Dollar"
+msgstr "美元"
+
+#: views/kmymoneyview.cpp:1503
+msgid "Uganda Shilling"
+msgstr "乌干达先令"
+
+#: views/kmymoneyview.cpp:1504
+msgid "Ukraine Hryvnia"
+msgstr "乌克兰Hryvnia"
+
+#: views/kmymoneyview.cpp:1505
+msgid "United Arab Emirates Dirham"
+msgstr "阿联酋迪拉姆"
+
+#: views/kmymoneyview.cpp:1506
+msgid "Uruguayan Peso"
+msgstr "乌拉圭比索"
+
+#: views/kmymoneyview.cpp:1507
+msgid "Uzbekistani Sum"
+msgstr "乌兹别克斯坦Sum"
+
+#: views/kmymoneyview.cpp:1508
+msgid "Vanuatu Vatu"
+msgstr "瓦努阿图Vatu"
+
+#: views/kmymoneyview.cpp:1509
+msgid "Venezuelan Bolivar"
+msgstr "委内瑞拉玻利瓦尔"
+
+#: views/kmymoneyview.cpp:1510
+msgid "Vietnamese Dong"
+msgstr "越南盾"
+
+#: views/kmymoneyview.cpp:1511
+msgid "Yugoslav Dinar"
+msgstr "南斯拉夫第纳尔"
+
+#: views/kmymoneyview.cpp:1512
+msgid "Zambian Kwacha"
+msgstr "赞比亚克瓦查"
+
+#: views/kmymoneyview.cpp:1513
+msgid "Zimbabwe Dollar"
+msgstr "津巴布韦元"
+
+#: views/kmymoneyview.cpp:1515
+msgid "Gold"
+msgstr "金"
+
+#: views/kmymoneyview.cpp:1516
+msgid "Palladium"
+msgstr "钯金"
+
+#: views/kmymoneyview.cpp:1517
+msgid "Platinum"
+msgstr "铂金"
+
+#: views/kmymoneyview.cpp:1518
+msgid "Silver"
+msgstr "银"
+
+#: views/kmymoneyview.cpp:1551
+msgid "Austrian Schilling"
+msgstr "奥地利先令"
+
+#: views/kmymoneyview.cpp:1552
+msgid "German Mark"
+msgstr "德国马克"
+
+#: views/kmymoneyview.cpp:1553
+msgid "French Franc"
+msgstr "法国法郎"
+
+#: views/kmymoneyview.cpp:1554
+msgid "Italian Lira"
+msgstr "意大利里拉"
+
+#: views/kmymoneyview.cpp:1555
+msgid "Spanish Peseta"
+msgstr "西班牙比塞塔"
+
+#: views/kmymoneyview.cpp:1556
+msgid "Dutch Guilder"
+msgstr "荷兰盾"
+
+#: views/kmymoneyview.cpp:1557
+msgid "Belgian Franc"
+msgstr "比利时法郎"
+
+#: views/kmymoneyview.cpp:1558
+msgid "Luxembourg Franc"
+msgstr "卢森堡法郎"
+
+#: views/kmymoneyview.cpp:1559
+msgid "Portuguese Escudo"
+msgstr "葡萄牙埃斯库多"
+
+#: views/kmymoneyview.cpp:1560
+msgid "Irish Pound"
+msgstr "爱尔兰镑"
+
+#: views/kmymoneyview.cpp:1561
+msgid "Finnish Markka"
+msgstr "芬兰马克"
+
+#: views/kmymoneyview.cpp:1562
+msgid "Greek Drachma"
+msgstr "希腊德拉马克"
+
+#: views/kmymoneyview.cpp:1564
+msgid "Romanian Leu"
+msgstr "罗马尼亚列伊"
+
+#: views/kmymoneyview.cpp:1566
+msgid "Russian Ruble (old)"
+msgstr "旧俄国卢布"
+
+#: views/kmymoneyview.cpp:1568
+msgid "Slovenian Tolar"
+msgstr "斯洛文尼亚Tolar"
+
+#: views/kmymoneyview.cpp:1571
+msgid "Turkish Lira"
+msgstr "土耳其里拉"
+
+#: views/kmymoneyview.cpp:1574
+msgid "Maltese Lira"
+msgstr "马耳他里拉"
+
+#: views/kmymoneyview.cpp:1575
+msgid "Cyprus Pound"
+msgstr "塞浦路斯镑"
+
+#: views/kmymoneyview.cpp:1578
+msgid "Slovak Koruna"
+msgstr "斯洛伐克克朗"
+
+#: views/kmymoneyview.cpp:1888
+msgid ""
+"The account \"%1\" was previously created as loan account but some "
+"information is missing. The new loan wizard will be started to collect all "
+"relevant information. Please use a KMyMoney version >= 0.8.7 and < 0.9 to "
+"correct the problem."
+msgstr ""
+"账户“%1”之前作为贷款账户被创建,但是缺少必要的信息。将会启动新贷款向导以收集"
+"所有相关的信息。 请使用版本号>=0.8.7并且<0.9的KMyMoney来解决该问题。"
+
+#: views/kmymoneyview.cpp:1892
+msgid "Account problem"
+msgstr "账户问题"
+
+#: views/kmymoneyview.cpp:1941
+msgid "Unable to add schedule: "
+msgstr "无法添加计划:"
+
+#: views/kmymoneyview.cpp:1970
+msgid "Fix transactions"
+msgstr "修复交易"
+
+#: views/kaccountsview.cpp:522 views/kinstitutionsview.cpp:300
+msgid "Net Worth: "
+msgstr "净值:"
+
+#: dialogs/rc.cpp:108 dialogs/rc.cpp:163 dialogs/rc.cpp:250 dialogs/rc.cpp:755
+#: dialogs/rc.cpp:830 views/kinvestmentview.cpp:77 widgets/register.cpp:572
+msgid "Quantity"
+msgstr "数量"
+
+#: views/kscheduledlistitem.cpp:137
+msgid "Finished"
+msgstr "已完成"
+
+#: views/kbudgetview.cpp:109
+msgid "Creates a new budget"
+msgstr "创建新预算"
+
+#: views/kbudgetview.cpp:110
+msgid "Use this to create a new empty budget."
+msgstr "用它来创建新的空预算。"
+
+#: views/kbudgetview.cpp:116
+msgid "Rename the current selected budget"
+msgstr "重命名当前选中的预算"
+
+#: views/kbudgetview.cpp:117
+msgid "Use this to start renaming the selected budget."
+msgstr "用它来重命名选中的预算"
+
+#: views/kbudgetview.cpp:123
+msgid "Delete the current selected budget"
+msgstr "删除当前选中的预算"
+
+#: views/kbudgetview.cpp:124
+msgid "Use this to delete the selected budget."
+msgstr "用它来删除选中的预算"
+
+#: views/kbudgetview.cpp:130
+msgid "Accepts the entered values and stores the budget"
+msgstr "接受输入的数据并保存预算"
+
+#: views/kbudgetview.cpp:131
+msgid "Use this to store the modified data."
+msgstr "用它来保存修改后的数据"
+
+#: views/kbudgetview.cpp:137
+msgid "Revert budget to last saved state"
+msgstr "将预算复原到上一次保存的状态"
+
+#: views/kbudgetview.cpp:138
+msgid "Use this to discard the modified data."
+msgstr "用它来丢弃对数据的改动。"
+
+#: views/kbudgetview.cpp:489
+msgid "Do you want to save the changes for <b>%1</b>"
+msgstr "是否保存对<b>%1</b>的修改?"
+
+#: views/kbudgetview.cpp:610
+msgid ""
+"A budget with the name '%1' already exists. It is not advisable to have "
+"multiple budgets with the same identification name. Are you sure you would "
+"like to rename the budget?"
+msgstr ""
+"已经存在名为\"%1\"的预算。不建议多个预算使用同样的名字。是否重命名该预算?"
+
+#: views/kbudgetview.cpp:635 views/kbudgetview.cpp:750
+msgid "Unable to modify budget"
+msgstr "无法修改预算"
+
+#: views/kbudgetview.cpp:736
+msgid "Unable to reset budget"
+msgstr "无法重置预算"
+
+#: views/rc.cpp:1
+msgid "List"
+msgstr "列表"
+
+#: views/rc.cpp:2 views/rc.cpp:20
+msgid "Collapse all accounts in the list"
+msgstr "在列表中折叠全部账户"
+
+#: views/rc.cpp:3 views/rc.cpp:21
+msgid "Expand all accounts in the list"
+msgstr "在列表中展开全部账户"
+
+#: views/rc.cpp:4
+msgid "Icons"
+msgstr "图标"
+
+#: views/rc.cpp:5 views/rc.cpp:22
+msgid "Note: Unused categories are not shown as selected by settings."
+msgstr "注意:在设置中设定了不显示未使用的交易类别"
+
+#: views/rc.cpp:6 views/rc.cpp:23 views/rc.cpp:54
+msgid "Total Profits:"
+msgstr "收益总计:"
+
+#: views/rc.cpp:7
+msgid "Your budgets"
+msgstr "您的预算"
+
+#: dialogs/rc.cpp:340 dialogs/rc.cpp:841 dialogs/settings/rc.cpp:124
+#: views/rc.cpp:8 widgets/rc.cpp:48 widgets/rc.cpp:150
+msgid "New"
+msgstr "新建"
+
+#: views/rc.cpp:9
+msgid "Ren"
+msgstr "重命名"
+
+#: views/rc.cpp:10
+msgid "Del"
+msgstr "删除"
+
+#: views/rc.cpp:11
+msgid "Res"
+msgstr "重置"
+
+#: views/rc.cpp:12
+msgid "Upd"
+msgstr "更新"
+
+#: views/rc.cpp:15
+msgid "Hide unused budget categories"
+msgstr "隐藏未使用的预算交易类别"
+
+#: views/rc.cpp:16
+msgid "Assignments"
+msgstr "人物"
+
+#: views/rc.cpp:19
+msgid "Include subaccounts"
+msgstr "包括子账户"
+
+#: dialogs/settings/rc.cpp:23 views/rc.cpp:24
+msgid "Forecast Settings"
+msgstr "预报设置"
+
+#: views/rc.cpp:25
+msgid "Days to Forecast:"
+msgstr "预测天数:"
+
+#: views/rc.cpp:26
+msgid "Days of Accounts Cycle:"
+msgstr "账户循环周期天数:"
+
+#: dialogs/settings/rc.cpp:25 views/rc.cpp:27
+msgid "Day of Month to start Forecast:"
+msgstr "每月开始预报的日子:"
+
+#: views/rc.cpp:28
+msgid "Historic Cycles:"
+msgstr "历史周期循环数:"
+
+#: views/rc.cpp:29
+#, fuzzy
+msgid "Chart Detail:"
+msgstr "图形标签页"
+
+#: views/rc.cpp:30 widgets/kmymoneyaccountselector.cpp:64 widgets/rc.cpp:65
+msgid "All"
+msgstr "全部"
+
+#: views/rc.cpp:31 widgets/rc.cpp:66
+msgid "Top-Level"
+msgstr "顶层"
+
+#: views/rc.cpp:32 widgets/rc.cpp:67
+msgid "Groups"
+msgstr "组"
+
+#: views/rc.cpp:33 widgets/rc.cpp:68
+msgid "Totals"
+msgstr "总计"
+
+#: views/rc.cpp:34
+#, fuzzy
+msgid "<p>Choose what level of detail to show on the chart.</p>"
+msgstr "<p>选择使用哪类账户作为此报表的行</p>"
+
+#: views/rc.cpp:35
+msgid "Current Forecast Method:"
+msgstr "当前预报方法:"
+
+#: views/rc.cpp:36
+msgid "method"
+msgstr "方法"
+
+#: dialogs/settings/rc.cpp:32 views/rc.cpp:37
+msgid "History Forecast Method"
+msgstr "历史预报方法"
+
+#: dialogs/settings/rc.cpp:33 views/rc.cpp:38
+msgid "Simple Moving Average"
+msgstr "简单运动平均"
+
+#: dialogs/settings/rc.cpp:34 views/rc.cpp:39
+msgid "Weighted Moving Average"
+msgstr "加权运动平均"
+
+#: dialogs/settings/rc.cpp:35 views/rc.cpp:40
+msgid "Linear Regression"
+msgstr ""
+
+#: dialogs/keditloanwizard.cpp:315 dialogs/rc.cpp:628 dialogs/rc.cpp:647
+#: views/rc.cpp:43
+msgid "Summary"
+msgstr "总计"
+
+#: views/rc.cpp:45
+msgid "0 days"
+msgstr "0天"
+
+#: views/rc.cpp:46
+msgid "30 days"
+msgstr "30天"
+
+#: views/rc.cpp:47
+msgid "60 days"
+msgstr "60天"
+
+#: views/rc.cpp:48
+msgid "90 days"
+msgstr "90天"
+
+#: views/rc.cpp:49
+msgid "New Item"
+msgstr "新项目"
+
+#: views/rc.cpp:50 widgets/rc.cpp:64
+msgid "Detail"
+msgstr "详细信息"
+
+#: views/rc.cpp:51
+msgid "Advanced"
+msgstr "高级"
+
+#: views/rc.cpp:52
+msgid "Budget Forecast"
+msgstr "预算预报"
+
+#: views/rc.cpp:55
+msgid "Investment Summary"
+msgstr "投资概述"
+
+#: views/rc.cpp:56
+msgid "Select Account:"
+msgstr "选择账户:"
+
+#: views/rc.cpp:57
+msgid ""
+"Summary of the equities contained in this account, showing your holdings and "
+"their most recent price."
+msgstr "此账户所包含的产权概述。显示您的持有状况和它们最新的价值。"
+
+#: views/rc.cpp:60 widgets/register.cpp:564
+msgid "No."
+msgstr "序号"
+
+#: views/rc.cpp:64
+msgid "Balance: "
+msgstr "余额:"
+
+#: views/rc.cpp:65
+msgid "Address"
+msgstr "地址"
+
+#: views/rc.cpp:66
+msgid "Payee Information"
+msgstr "收款人信息"
+
+#: views/rc.cpp:67
+msgid "E-Mail:"
+msgstr "电子邮件:"
+
+#: dialogs/rc.cpp:393 views/rc.cpp:69
+msgid "Telephone/Fax:"
+msgstr "电话/传真号码:"
+
+#: views/rc.cpp:70
+msgid "Notes"
+msgstr "备忘"
+
+#: views/rc.cpp:71
+msgid "Address:"
+msgstr "地址:"
+
+#: views/rc.cpp:72
+msgid "Matching"
+msgstr "正在匹配"
+
+#: views/rc.cpp:73
+msgid "Transaction Matching"
+msgstr "交易匹配"
+
+#: views/rc.cpp:74
+msgid "No matching"
+msgstr "无匹配"
+
+#: views/rc.cpp:75
+msgid "Match on Payee name"
+msgstr "匹配交款人名称"
+
+#: views/rc.cpp:76
+msgid "Match on a name listed below"
+msgstr "按下列名称匹配"
+
+#: views/rc.cpp:77
+msgid "List of matching names"
+msgstr "匹配名称列表"
+
+#: views/rc.cpp:78
+msgid ""
+"This list contains the names that will match this payee if a transaction is "
+"imported from an external source. Keep in mind, that you can specify regular "
+"expressions here."
+msgstr ""
+"此列表中包含了从外部数据源中导入交易时,用来匹配本收/付款人的名字。提醒一下,"
+"在 这里你可以使用正则表达式。"
+
+#: views/rc.cpp:79
+msgid "Ignore Case"
+msgstr "不区分大小写"
+
+#: views/rc.cpp:80
+#, fuzzy
+msgid "Default Account"
+msgstr "选择账户"
+
+#: views/rc.cpp:81
+#, fuzzy
+msgid ""
+"Use the default account for\n"
+"new transactions with this payee"
+msgstr "用这个来将交易记录到账簿中"
+
+#: views/rc.cpp:82
+#, fuzzy
+msgid "Default category:"
+msgstr "创建交易类别"
+
+#: views/rc.cpp:83
+#, fuzzy
+msgid "Suggest a category"
+msgstr "只是该类别"
+
+#: views/rc.cpp:85
+#, fuzzy
+msgid "New Scheduled transaction..."
+msgstr "输入预定交易"
+
+#: views/rc.cpp:86
+msgid "Filter Accounts"
+msgstr "过滤账户"
+
+#: views/rc.cpp:87
+msgid "List View"
+msgstr "列表视图"
+
+#: views/rc.cpp:88
+msgid "Calendar View"
+msgstr "日历视图"
+
+#: views/kinstitutionsview.cpp:43
+msgid "Institution/Account"
+msgstr "金融机构/账户"
+
+#: views/kinstitutionsview.cpp:157
+msgid "Accounts with no institution assigned"
+msgstr "未指定金融机构的账户:"
+
+#: views/kscheduledview.cpp:70
+msgid "Type/Name"
+msgstr "类型/名称"
+
+#: views/kscheduledview.cpp:75
+msgid "Frequency"
+msgstr "频率"
+
+#: views/kscheduledview.cpp:157
+msgid "Unable to load accounts: "
+msgstr "无法载入账户:"
+
+#: views/kscheduledview.cpp:171 views/kscheduledview.cpp:429
+#: views/kscheduledview.cpp:445 widgets/kmymoneyscheduledcalendar.cpp:46
+msgid "Bills"
+msgstr "账单"
+
+#: dialogs/rc.cpp:232 dialogs/rc.cpp:706 views/kscheduledview.cpp:172
+#: views/kscheduledview.cpp:431 views/kscheduledview.cpp:447
+#: widgets/kmymoneyscheduledcalendar.cpp:47
+msgid "Deposits"
+msgstr "存款"
+
+#: views/kscheduledview.cpp:173 views/kscheduledview.cpp:435
+#: views/kscheduledview.cpp:451
+msgid "Loans"
+msgstr "贷款"
+
+#: views/kscheduledview.cpp:357
+msgid "Error activating context menu"
+msgstr "激活上下文菜单时出错"
+
+#: views/kscheduledview.cpp:385
+msgid "Error executing item"
+msgstr "执行项目时出错"
+
+#: views/kscheduledview.cpp:419
+msgid "Unable to filter account"
+msgstr "无法过滤账户"
+
+#: views/kgloballedgerview.cpp:508
+msgid "Statement Details"
+msgstr "对帐单详细信息"
+
+#: views/kgloballedgerview.cpp:512
+msgid "Statement Deposit Details"
+msgstr "对帐单存款详细信息"
+
+#: views/kgloballedgerview.cpp:513
+msgid "Statement Payment Details"
+msgstr "对帐单支付详细信息"
+
+#: views/kgloballedgerview.cpp:642
+msgid "%1 deposits (%3), %2 payments (%4)"
+msgstr "%1笔存款(%3), %2笔支付(%4)"
+
+#: views/kgloballedgerview.cpp:649
+msgid "%1 payments (%2)"
+msgstr "%1笔支付(%2)"
+
+#: views/kgloballedgerview.cpp:653
+msgid "%1 deposits (%2)"
+msgstr "%1笔存款(%2)"
+
+#: views/kgloballedgerview.cpp:721
+#, c-format
+msgid "Statement: %1"
+msgstr "对帐单金额:%1"
+
+#: views/kgloballedgerview.cpp:722 views/kgloballedgerview.cpp:736
+#, c-format
+msgid "Cleared: %1"
+msgstr "已清算金额:%1"
+
+#: views/kgloballedgerview.cpp:723
+#, c-format
+msgid "Difference: %1"
+msgstr "差额:%1"
+
+#: views/kgloballedgerview.cpp:730
+#, c-format
+msgid "Last reconciled: %1"
+msgstr "上次对账:%1"
+
+#: views/kgloballedgerview.cpp:732
+msgid "Never reconciled"
+msgstr "未对帐过"
+
+#: views/kgloballedgerview.cpp:772
+msgid "Investment value: %1%2"
+msgstr "投资值:%1%2"
+
+#: views/kgloballedgerview.cpp:1040
+msgid ""
+"At least one split of the selected transactions has been reconciled. Do you "
+"wish to continue to edit the transactions anyway?"
+msgstr "选中交易里的至少一项拆分已经完成了对帐。您还要继续编辑这些交易吗?"
+
+#: views/kgloballedgerview.cpp:1051
+msgid ""
+"At least one split of the selected transactions has been frozen. Editing the "
+"transactions is therefore prohibited."
+msgstr "选中交易里的至少一项拆分已经被冻结,因此无法对它们进行修改。"
+
+#: views/kgloballedgerview.cpp:1053
+msgid "Transaction already frozen"
+msgstr "被冻结的交易"
+
+#: views/kgloballedgerview.cpp:1058
+msgid ""
+"At least one split of the selected transaction references an account that "
+"has been closed. Editing the transactions is therefore prohibited."
+msgstr "选中交易里的至少一项拆分引用了已被关闭的账户。因此无法对它们进行修改。"
+
+#: views/kgloballedgerview.cpp:1060
+msgid "Account closed"
+msgstr "账户已关闭"
+
+#: views/kgloballedgerview.cpp:1349
+msgid "Cannot create transactions when no account is selected."
+msgstr "没有选择账户,因此无法创建交易。"
+
+#: views/kgloballedgerview.cpp:1354
+msgid "Cannot create transactions in the context of a category."
+msgstr "无法在交易类别上下文里创建交易。"
+
+#: views/kgloballedgerview.cpp:1358
+msgid "Cannot create transactions in a closed account."
+msgstr "在关闭的账户里无法创建交易。"
+
+#: views/kgloballedgerview.cpp:1370
+msgid "Cannot process transaction with focus if it is not selected."
+msgstr "无法处理未被选中的交易。"
+
+#: views/kgloballedgerview.cpp:1400
+msgid "Cannot edit transactions with frozen splits."
+msgstr "无法编辑有冻结切分的交易。"
+
+#: views/kgloballedgerview.cpp:1411
+msgid "Cannot edit transactions in the context of a category."
+msgstr "无法在交易类别上下文里修改交易。"
+
+#: views/kgloballedgerview.cpp:1430
+msgid ""
+"Cannot edit investment transactions and non-investment transactions together."
+msgstr "无法同时编辑投资交易和非投资交易。"
+
+#: views/kgloballedgerview.cpp:1438
+msgid "Cannot edit multiple split transactions at once."
+msgstr "无法同时编辑多项切分交易。"
+
+#: views/kgloballedgerview.cpp:1448
+msgid "Cannot edit investment transactions in the context of this account."
+msgstr "无法在此账户上下文里编辑投资交易。"
+
+#: views/kforecastview.cpp:164
+msgid "Scheduled"
+msgstr "交易计划"
+
+#: views/kforecastview.cpp:169
+msgid "History"
+msgstr "历史"
+
+#: views/kforecastview.cpp:296
+msgid "The balance of %2 is below the minimum balance %3 today."
+msgstr "今天%2的余额低于最低限额%3。"
+
+#: views/kforecastview.cpp:301 views/khomeview.cpp:1043
+msgid "The balance of %1 will drop below the minimum balance %2 in %3 days."
+msgstr "%1的余额将在%3天内低于最低限额%2。"
+
+#: views/kforecastview.cpp:318 views/khomeview.cpp:1059
+msgid "The balance of %1 is below %2 today."
+msgstr "今天%1的余额低于%2。"
+
+#: views/kforecastview.cpp:323 views/khomeview.cpp:1064
+msgid "The balance of %1 is above %2 today."
+msgstr "今天%1的余额高于%2。"
+
+#: views/kforecastview.cpp:330 views/khomeview.cpp:1070
+msgid "The balance of %1 will drop below %2 in %3 days."
+msgstr "%1的余额将在%3天内低于%2。"
+
+#: views/kforecastview.cpp:335 views/khomeview.cpp:1075
+msgid "The balance of %1 will raise above %2 in %3 days."
+msgstr "%1的余额将在%3天内高于%2。"
+
+#: views/kforecastview.cpp:348
+msgid "The account %1 is decreasing %2 per cycle."
+msgstr "账户%1在每个循环周期减少%2。"
+
+#: views/kforecastview.cpp:404 widgets/kmymoneyaccounttreeforecast.cpp:114
+#, c-format
+msgid "Min Bal %1"
+msgstr "最少余额%1"
+
+#: views/kforecastview.cpp:406 widgets/kmymoneyaccounttreeforecast.cpp:116
+#, c-format
+msgid "Min Date %1"
+msgstr "最近日期%1"
+
+#: views/kforecastview.cpp:409 widgets/kmymoneyaccounttreeforecast.cpp:119
+#, c-format
+msgid "Max Bal %1"
+msgstr "最多余额%1"
+
+#: views/kforecastview.cpp:411 widgets/kmymoneyaccounttreeforecast.cpp:121
+#, c-format
+msgid "Max Date %1"
+msgstr "最远日期%1"
+
+#: views/kforecastview.cpp:413 widgets/kmymoneyaccounttreeforecast.cpp:123
+msgid "Average"
+msgstr "平均"
+
+#: views/kforecastview.cpp:649 views/khomeview.cpp:268 views/khomeview.cpp:275
+msgid "Networth Forecast"
+msgstr "净值预报"
+
+#: views/khomeview.cpp:203
+msgid "Your Financial Summary"
+msgstr "您的财政状况一览"
+
+#: views/khomeview.cpp:218
+msgid "Preferred Accounts"
+msgstr "偏好账户"
+
+#: views/khomeview.cpp:225 views/khomeview.cpp:227
+msgid "Payment Accounts"
+msgstr "支出账户"
+
+#: views/khomeview.cpp:256
+msgid "Show KMyMoney welcome page"
+msgstr "显示KMyMoney欢迎屏幕"
+
+#: views/khomeview.cpp:409
+msgid "Overdue payments"
+msgstr "已过期支出"
+
+#: views/khomeview.cpp:424 views/khomeview.cpp:497 views/khomeview.cpp:531
+msgid "Balance after"
+msgstr "期末余额"
+
+#: views/khomeview.cpp:482
+msgid "Today's payments"
+msgstr "本日支付"
+
+#: views/khomeview.cpp:516
+msgid "Future payments"
+msgstr "未来的支付"
+
+#: views/khomeview.cpp:585
+#, fuzzy
+msgid "Less..."
+msgstr "更少..."
+
+#: views/khomeview.cpp:587
+#, fuzzy
+msgid "More..."
+msgstr "更多..."
+
+#: views/khomeview.cpp:622
+msgid "Enter schedule"
+msgstr "输入交易计划"
+
+#: views/khomeview.cpp:624
+msgid "Skip schedule"
+msgstr "跳过交易计划"
+
+#: views/khomeview.cpp:627
+msgid "Edit schedule"
+msgstr "编辑交易计划"
+
+#: views/khomeview.cpp:631
+msgid " (%1 payments)"
+msgstr " (%1 项支付)"
+
+#: views/khomeview.cpp:771
+msgid "To Minimum Balance / Maximum Credit"
+msgstr "到最小余额/最大信用额"
+
+#: views/khomeview.cpp:964
+msgid "%1 Day Forecast"
+msgstr "%1 天预报"
+
+#: views/khomeview.cpp:973 widgets/kmymoneyaccounttreeforecast.cpp:67
+msgid "%1 days"
+msgstr "%1 天"
+
+#: views/khomeview.cpp:1039
+msgid "The balance of %1 is below the minimum balance %2 today."
+msgstr "今天%1的余额低于最低限额%2。"
+
+#: views/khomeview.cpp:1175
+msgid ""
+"Before KMyMoney can give you detailed information about your financial "
+"status, you need to create at least one account. Until then, KMyMoney shows "
+"the welcome page instead."
+msgstr ""
+"您至少需要先创建一个账户,KMyMoney才可以显示您的财政状况的具体信息。作为代"
+"替, KMyMoney将会显示欢迎页。"
+
+#: views/khomeview.cpp:1258
+#, fuzzy
+msgid "Assets and Liabilities Summary"
+msgstr "资产与负债"
+
+#: views/khomeview.cpp:1262
+msgid "Asset Accounts"
+msgstr "资产账户"
+
+#: views/khomeview.cpp:1270
+msgid "Liability Accounts"
+msgstr "负债账户"
+
+#: views/khomeview.cpp:1348
+msgid "Total Assets"
+msgstr "总资产"
+
+#: views/khomeview.cpp:1354
+msgid "Total Liabilities"
+msgstr "总负债"
+
+#: views/khomeview.cpp:1399
+#, fuzzy
+msgid "Current Month Summary"
+msgstr "本月"
+
+#: views/khomeview.cpp:1403 views/khomeview.cpp:1440
+msgid "Budgeted"
+msgstr "已列入预算"
+
+#: views/khomeview.cpp:1433
+msgid "Budget Overruns"
+msgstr "预算超支"
+
+#: views/khomeview.cpp:1502
+msgid "No Budget Categories have been overrun"
+msgstr "没有预算类别超支"
+
+#: views/khomeview.cpp:1801
+msgid "Cash Flow Summary"
+msgstr ""
+
+#: views/khomeview.cpp:1808
+#, fuzzy
+msgid "Income and Expenses of Current Month"
+msgstr "本月收入和支出"
+
+#: views/khomeview.cpp:1816
+#, fuzzy
+msgid "Scheduled Income"
+msgstr "计划名称:"
+
+#: views/khomeview.cpp:1819
+msgid "Expenses"
+msgstr "支出"
+
+#: views/khomeview.cpp:1822
+#, fuzzy
+msgid "Scheduled Expenses"
+msgstr "本月计划支出"
+
+#: views/khomeview.cpp:1850
+#, fuzzy
+msgid "Liquid Assets and Liabilities"
+msgstr "资产与负债"
+
+#: views/khomeview.cpp:1855
+#, fuzzy
+msgid "Liquid Assets"
+msgstr "资产"
+
+#: views/khomeview.cpp:1858
+#, fuzzy
+msgid "Transfers to Liquid Liabilities"
+msgstr "资产与负债"
+
+#: views/khomeview.cpp:1861
+#, fuzzy
+msgid "Liquid Liabilities"
+msgstr "负债"
+
+#: views/khomeview.cpp:1864
+#, fuzzy
+msgid "Other Transfers"
+msgstr "转账"
+
+#: views/khomeview.cpp:1908
+#, fuzzy
+msgid "Cash Flow Status"
+msgstr "七天现金流预测"
+
+#: views/khomeview.cpp:1914
+msgid "Expected Liquid Assets"
+msgstr ""
+
+#: views/khomeview.cpp:1917
+#, fuzzy
+msgid "Expected Liquid Liabilities"
+msgstr "资产与负债"
+
+#: views/khomeview.cpp:1920
+#, fuzzy
+msgid "Expected Profit/Loss"
+msgstr "收益/损失"
+
+#: plugins/ofximport/ofximporterplugin.cpp:64
+#, fuzzy
+msgid "OFX..."
+msgstr "OFX ..."
+
+#: plugins/ofximport/ofximporterplugin.cpp:69
+msgid "OFX import file selection"
+msgstr "选择OFX导入文件"
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid ""
+"Unable to import %1 using the OFX importer plugin. This file is not the "
+"correct format."
+msgstr "无法使用OFX导入插件导入%1。此文件格式不正确。"
+
+#: plugins/ofximport/ofximporterplugin.cpp:77
+msgid "Incorrect format"
+msgstr "格式错误"
+
+#: plugins/ofximport/ofximporterplugin.cpp:122
+msgid "Unable to parse file"
+msgstr "无法解析文件"
+
+#: plugins/ofximport/ofximporterplugin.cpp:576
+msgid "Online settings"
+msgstr "在线设置"
+
+#: plugins/ofximport/ofximporterplugin.cpp:635
+#, c-format
+msgid "Error connecting to bank: %1"
+msgstr "连接到银行时出错:%1"
+
+#: plugins/ofximport/ofximporterplugin.cpp:646
+msgid ""
+"Unable to import %1 using the OFX importer plugin. The plugin returned the "
+"following error:<p>%2"
+msgstr "无法使用OFX导入插件导入%1。插件返回下列错误:<p>%2"
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Importing process terminated unexpectedly."
+msgstr "导入过程异常终止。"
+
+#: plugins/ofximport/ofximporterplugin.cpp:677
+msgid "Failed to import all statements."
+msgstr "未能完成全部对帐单导入。"
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "The HTTP request failed."
+msgstr "HTTP请求失败"
+
+#: plugins/ofximport/dialogs/kofxdirectconnectdlg.cpp:195
+#: plugins/ofximport/ofxpartner.cpp:374
+msgid "Failed"
+msgstr "失败"
+
+#: plugins/ofximport/ofxpartner.cpp:410
+#, fuzzy
+msgid "Cannot open file %1 for writing"
+msgstr "无法为写入操作打开文件“%1”。"
+
+#: plugins/ofximport/ofxpartner.cpp:414
+#, fuzzy
+msgid "OFX setup error"
+msgstr "文件类型错误"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid "Loading banklist"
+msgstr "正在载入银行列表..."
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:72
+msgid ""
+"Getting list of banks from http://moneycentral.msn.com/\n"
+"This may take some time depending on the available bandwidth."
+msgstr ""
+"正在从http://moneycentral.msn.com/获取银行列表\n"
+"完成该操作所需的具体时间取决于您实际的网络带宽。"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:155
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:199
+msgid "Supports online statements<br>"
+msgstr "支持在线(交易)清单<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:157
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:201
+msgid "Supports investments<br>"
+msgstr "支持投资<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:159
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:203
+msgid "Supports bill payment (but not supported by KMyMoney yet)<br>"
+msgstr "支持账单支付 (但KMyMoney尚不支持)<br>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:163
+msgid "Does not support online banking</p>"
+msgstr "不支持网上银行</p>"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:173
+msgid "Please choose a bank."
+msgstr "请选择一个银行"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:179
+#, fuzzy
+msgid "Please fill all fields with values."
+msgstr "请填写金额栏目。"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:271
+msgid "No suitable accounts were found at this bank."
+msgstr "未能在该银行找到合适的账户"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:283
+msgid "Please choose an account"
+msgstr "请选择一个账户"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:386
+msgid "Server message: %1\n"
+msgstr "服务器信息:%1\n"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+msgid "Your bank returned warnings when signing on"
+msgstr "在登录您的银行时,收到了警告信息。"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:394
+#, c-format
+msgid "WARNING %1"
+msgstr "警告 %1"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+msgid "Error signing onto your bank"
+msgstr "登录到银行时出错:%1"
+
+#: plugins/ofximport/dialogs/konlinebankingsetupwizard.cpp:397
+#, c-format
+msgid "ERROR %1"
+msgstr "错误 %1"
+
+#: plugins/ofximport/dialogs/konlinebankingstatus.cpp:59
+msgid "Enabled & configured"
+msgstr "已配置和启用"
+
+#: plugins/ofximport/dialogs/rc.cpp:1
+msgid "OFX Direct Connect"
+msgstr "OFX直接连接"
+
+#: plugins/ofximport/dialogs/rc.cpp:2
+msgid "Contacting bank..."
+msgstr "联系银行..."
+
+#: plugins/ofximport/dialogs/rc.cpp:4
+msgid "Online Banking Account Setup"
+msgstr "网上银行账户设置"
+
+#: plugins/ofximport/dialogs/rc.cpp:5
+msgid "Select Financial Institution"
+msgstr "选择金融机构"
+
+#: plugins/ofximport/dialogs/rc.cpp:6
+msgid "Please select your financial institution from the list below..."
+msgstr "请从下面的列表中选择你的金融机构..."
+
+#: plugins/ofximport/dialogs/rc.cpp:7
+msgid "Automatic"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:8
+msgid "Financial Institution"
+msgstr "金融机构"
+
+#: plugins/ofximport/dialogs/rc.cpp:9
+#, fuzzy
+msgid "Manual"
+msgstr "一月"
+
+#: plugins/ofximport/dialogs/rc.cpp:10
+msgid "Org"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:11
+#, fuzzy
+msgid "FID"
+msgstr "FIID"
+
+#: dialogs/settings/rc.cpp:120 plugins/ofximport/dialogs/rc.cpp:12
+#: widgets/rc.cpp:46
+msgid "URL"
+msgstr "网址"
+
+#: plugins/ofximport/dialogs/rc.cpp:13
+msgid "Enter Login Details"
+msgstr "输入登录详细信息"
+
+#: plugins/ofximport/dialogs/rc.cpp:14
+msgid ""
+"Please enter the username and password you use to log into this bank for "
+"online banking. Please note that many banks require a separate signup, and "
+"assign a separate PIN or password just for online banking from home."
+msgstr ""
+"请输入登录该银行的网银时使用的用户名和密码。请注意,许多银行需要 一个分开的签"
+"入,并且单独为在家中访问网银指定了一个分开的PIN或者密码。"
+
+#: plugins/ofximport/dialogs/rc.cpp:15
+msgid "Connection Details"
+msgstr "接入详细信息"
+
+#: plugins/ofximport/dialogs/rc.cpp:16
+msgid "Username"
+msgstr "用户名"
+
+#: plugins/ofximport/dialogs/rc.cpp:17 plugins/ofximport/dialogs/rc.cpp:36
+#, fuzzy
+msgid "Header Version"
+msgstr "表头字体"
+
+#: plugins/ofximport/dialogs/rc.cpp:18 plugins/ofximport/dialogs/rc.cpp:37
+msgid "Identify as"
+msgstr "认证为"
+
+#: dialogs/rc.cpp:742 plugins/ofximport/dialogs/rc.cpp:19
+msgid "Password"
+msgstr "密码"
+
+#: plugins/ofximport/dialogs/rc.cpp:20
+msgid "Select Account"
+msgstr "选择账户"
+
+#: plugins/ofximport/dialogs/rc.cpp:21
+msgid ""
+"Please select the account from your financial institution from the list "
+"below which matches this account."
+msgstr "请在下面的列表中选择与该账户对应的金融机构里的账户。"
+
+#: plugins/ofximport/dialogs/rc.cpp:24
+msgid "Bank"
+msgstr "银行"
+
+#: plugins/ofximport/dialogs/rc.cpp:25
+msgid "Branch"
+msgstr "支行"
+
+#: plugins/ofximport/dialogs/rc.cpp:26
+msgid "WizardPage"
+msgstr "向导页"
+
+#: plugins/ofximport/dialogs/rc.cpp:27
+msgid ""
+"Congratulations! You have successfully set up your bank for online banking "
+"via OFX."
+msgstr "恭喜!您已经成功的为您的银行设置了通过OFX访问网上银行业务。"
+
+#: plugins/ofximport/dialogs/rc.cpp:28
+msgid "Account Details"
+msgstr "账户详细信息"
+
+#: plugins/ofximport/dialogs/rc.cpp:29 plugins/ofximport/dialogs/rc.cpp:31
+msgid "&lt;Not configured&gt;"
+msgstr "&lt;未配置&gt;"
+
+#: plugins/ofximport/dialogs/rc.cpp:30
+msgid "BANK/BROKER:"
+msgstr "银行/代理人:"
+
+#: plugins/ofximport/dialogs/rc.cpp:32
+msgid "Unavailable"
+msgstr "状态:不可用"
+
+#: plugins/ofximport/dialogs/rc.cpp:33
+msgid "ACCOUNT:"
+msgstr "账户: "
+
+#: plugins/ofximport/dialogs/rc.cpp:34
+msgid "STATUS:"
+msgstr "状态:"
+
+#: plugins/ofximport/dialogs/rc.cpp:35
+msgid "OFX Details"
+msgstr "OFX详细信息"
+
+#: plugins/ofximport/dialogs/rc.cpp:38
+#, fuzzy
+msgid "Start date of import"
+msgstr "对帐单起始日期"
+
+#: plugins/ofximport/dialogs/rc.cpp:39
+#, fuzzy
+msgid "To&day minus"
+msgstr "本日支付"
+
+#: plugins/ofximport/dialogs/rc.cpp:40
+#, fuzzy
+msgid "days"
+msgstr "0天"
+
+#: plugins/ofximport/dialogs/rc.cpp:41
+#, fuzzy
+msgid "Last &update"
+msgstr "上季度"
+
+#: plugins/ofximport/dialogs/rc.cpp:42
+#, fuzzy
+msgid "Pi&ck date"
+msgstr "创建日期"
+
+#: plugins/ofximport/dialogs/rc.cpp:43
+msgid "Name is derived from"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:44
+msgid "P&AYEEID"
+msgstr ""
+
+#: plugins/ofximport/dialogs/rc.cpp:45
+#, fuzzy
+msgid "&NAME"
+msgstr "AMEX"
+
+#: plugins/ofximport/dialogs/rc.cpp:46
+msgid "field if both are present in download"
+msgstr ""
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:81
+#, fuzzy
+msgid "Quicken Windows 2003"
+msgstr "Quicken Windows 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:82
+#, fuzzy
+msgid "Quicken Windows 2004"
+msgstr "Quicken Windows 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:83
+msgid "Quicken Windows 2005"
+msgstr "Quicken Windows 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:84
+msgid "Quicken Windows 2006"
+msgstr "Quicken Windows 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:85
+msgid "Quicken Windows 2007"
+msgstr "Quicken Windows 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:86
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:111
+msgid "Quicken Windows 2008"
+msgstr "Quicken Windows 2008"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:89
+msgid "MS-Money 2003"
+msgstr "MS-Money 2003"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:90
+msgid "MS-Money 2004"
+msgstr "MS-Money 2004"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:91
+msgid "MS-Money 2005"
+msgstr "MS-Money 2005"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:92
+msgid "MS-Money 2006"
+msgstr "MS-Money 2006"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:93
+msgid "MS-Money 2007"
+msgstr "MS-Money 2007"
+
+#: plugins/ofximport/dialogs/mymoneyofxconnector.cpp:94
+msgid "MS-Money Plus"
+msgstr "MS-Money Plus"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:91
+msgid "Report Configuration"
+msgstr "报表配置"
+
+#: dialogs/kreportconfigurationfilterdlg.cpp:117
+#: dialogs/kreportconfigurationfilterdlg.cpp:135
+msgid "Rows/Columns"
+msgstr "行/栏目"
+
+#: dialogs/investtransactioneditor.cpp:203
+#: dialogs/investtransactioneditor.cpp:537
+#: dialogs/investtransactioneditor.cpp:579 dialogs/rc.cpp:103
+#: dialogs/rc.cpp:158 dialogs/rc.cpp:245 dialogs/rc.cpp:750 dialogs/rc.cpp:794
+#: widgets/kmymoneyaccountselector.cpp:182 widgets/register.cpp:64
+#: widgets/register.cpp:567 widgets/transaction.cpp:1500
+msgid "Security"
+msgstr "证券"
+
+#: dialogs/investtransactioneditor.cpp:211
+msgid "Asset account"
+msgstr "固定资产账户"
+
+#: dialogs/investtransactioneditor.cpp:1073
+msgid "Price/Share"
+msgstr "每股价格"
+
+#: dialogs/kmergetransactionsdlg.cpp:39
+msgid "Merge Transactions"
+msgstr "合并交易"
+
+#: dialogs/kmergetransactionsdlg.cpp:40
+msgid "Are you sure you wish to merge these transactions?"
+msgstr "您确定要合并这些交易?"
+
+#: dialogs/kstartdlg.cpp:59
+msgid "Start Dialog"
+msgstr "启动对话框"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Templates"
+msgstr "模板"
+
+#: dialogs/kstartdlg.cpp:78
+msgid "Select templates"
+msgstr "选择模板"
+
+#: dialogs/kstartdlg.cpp:80 dialogs/kstartdlg.cpp:119
+msgid "New KMyMoney document"
+msgstr "新建KMyMoney文档"
+
+#: dialogs/kstartdlg.cpp:90
+msgid "Open a KMyMoney document"
+msgstr "打开KMyMoney文档"
+
+#: dialogs/kstartdlg.cpp:96
+msgid ""
+"%1|KMyMoney files (*.kmy)\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|KMyMoney文档(*.kmy)\n"
+"%2|所有文件(*.*)"
+
+#: dialogs/kstartdlg.cpp:102
+msgid "Recent Files"
+msgstr "最近访问的文档"
+
+#: dialogs/kstartdlg.cpp:217
+msgid "Blank Document"
+msgstr "空白文档"
+
+#: dialogs/knewbudgetdlg.cpp:71
+msgid "Please specify a budget name"
+msgstr "请指定预算名称"
+
+#: dialogs/kgncpricesourcedlg.cpp:48
+#, c-format
+msgid "Investment: %1"
+msgstr "投资:%1"
+
+#: dialogs/kgncpricesourcedlg.cpp:49
+#, c-format
+msgid "Quote source: %1"
+msgstr "报价来源:%1"
+
+#: dialogs/kmymoneypricedlg.cpp:62 dialogs/ksecuritylisteditor.cpp:69
+msgid "Delete this entry"
+msgstr "删除此项"
+
+#: dialogs/ksecuritylisteditor.cpp:70
+msgid "Remove this security item from the file"
+msgstr "从文件中删除此证券项。"
+
+#: dialogs/ksecuritylisteditor.cpp:73
+msgid "&Add"
+msgstr "添加(&A)"
+
+#: dialogs/kmymoneypricedlg.cpp:68 dialogs/ksecuritylisteditor.cpp:75
+msgid "Add a new entry"
+msgstr "添加新项目"
+
+#: dialogs/ksecuritylisteditor.cpp:76
+msgid "Create a new security entry."
+msgstr "建立一个新证券项。"
+
+#: dialogs/keditequityentrydlg.cpp:77 dialogs/kmymoneypricedlg.cpp:74
+#: dialogs/ksecuritylisteditor.cpp:81
+msgid "Modify the selected entry"
+msgstr "修改选中的项目"
+
+#: dialogs/ksecuritylisteditor.cpp:82
+msgid "Change the security information of the selected entry."
+msgstr "修改关于此选择项的证券信息。"
+
+#: dialogs/kmymoneypricedlg.cpp:80 dialogs/ksecuritylisteditor.cpp:87
+msgid "Close the dialog"
+msgstr "关闭对话框"
+
+#: dialogs/kmymoneypricedlg.cpp:81 dialogs/ksecuritylisteditor.cpp:88
+msgid "Use this to close the dialog and return to the application."
+msgstr "关闭对话框并返回程序。"
+
+#: dialogs/ksecuritylisteditor.cpp:184
+msgid ""
+"Do you really want to remove the currency <b>%1</b> from the file?</"
+"p><i>Note: It is currently not supported to add currencies.</i>"
+msgstr ""
+"您真的要从此文键中删除货币<b>%1</b>吗?<b>注意:目前KMyMoney还不支持添加货"
+"币。</b>"
+
+#: dialogs/ksecuritylisteditor.cpp:187
+msgid "Do you really want to remove the %1 <b>%2</b> from the file?"
+msgstr "您确定要从文件中删除%1<b>%2</b>?"
+
+#: dialogs/ksecuritylisteditor.cpp:190
+msgid "Delete security"
+msgstr "删除证券"
+
+#: dialogs/kmymoneypricedlg.cpp:63
+msgid "Remove this price item from the file"
+msgstr "从文件中删除此价格项"
+
+#: dialogs/kmymoneypricedlg.cpp:66 dialogs/mymoneyqifprofileeditor.cpp:94
+msgid "&New"
+msgstr "新建(&N)"
+
+#: dialogs/kmymoneypricedlg.cpp:69
+msgid "Create a new price entry."
+msgstr "创建新价格项"
+
+#: dialogs/kmymoneypricedlg.cpp:75
+msgid "Change the details of selected price information."
+msgstr "修改选中的价格信息内容"
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Do you really want to delete the selected price entry?"
+msgstr "您真的要删除选中的价格项?"
+
+#: dialogs/kmymoneypricedlg.cpp:201 widgets/kmymoneypriceview.cpp:309
+msgid "Delete price information"
+msgstr "删除价格信息"
+
+#: dialogs/kchooseimportexportdlg.cpp:46
+msgid ""
+"Please choose the type of import you wish to perform. A simple explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"请选择您需要的导入类型。在屏幕的下方有关于导入类型的简短介绍。\n"
+"当您选定了导入类型后,请按“确定”键继续。"
+
+#: dialogs/kchooseimportexportdlg.cpp:50 dialogs/rc.cpp:22
+msgid "Choose import type:"
+msgstr "选择导入类型:"
+
+#: dialogs/kchooseimportexportdlg.cpp:51 dialogs/rc.cpp:20
+msgid "Choose Import Type Dialog"
+msgstr "导入类型选择对话框"
+
+#: dialogs/kchooseimportexportdlg.cpp:53
+msgid ""
+"Please choose the type of export you wish to perform. A simple explanation\n"
+"of the export type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an export type please press the OK button."
+msgstr ""
+"请选择您需要的导出类型。在屏幕的下方有关于导出类型的简短介绍。\n"
+"当您选定了导出类型后,请按“确定”键继续。"
+
+#: dialogs/kchooseimportexportdlg.cpp:57
+msgid "Choose export type:"
+msgstr "选择导出类型:"
+
+#: dialogs/kchooseimportexportdlg.cpp:58
+msgid "Choose Export Type Dialog"
+msgstr "导出类型选择对话框"
+
+#: dialogs/kchooseimportexportdlg.cpp:78
+msgid ""
+"QIF files are created by the popular accounting program Quicken.\n"
+"Another dialog will appear, if you choose this type, asking for further\n"
+"information relevant to the Quicken format."
+msgstr ""
+"QIF格式是流行的帐务管理软件Quicken使用数据文件格式。\n"
+"如果您选择使用该类型, 则将会出现一个新的对话框,供您进一步 设置与Quicken相关"
+"的各种参数。"
+
+#: dialogs/kchooseimportexportdlg.cpp:82
+msgid ""
+"The CSV type uses a comma delimeted text file that can be used by\n"
+"most popular spreadsheet programs available for Linux and other operating\n"
+"systems."
+msgstr ""
+"CSV格式是一种以逗号作为数据分隔符的文本文件,它可以被大多数流行的电子表格软件"
+"读取和使用。"
+
+#: dialogs/kequitypriceupdatedlg.cpp:222
+msgid "%1 units in %2"
+msgstr "%2中的%1单位"
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid ""
+"Failed to retrieve an exchange rate for %1 from %2. It will be skipped this "
+"time."
+msgstr "获取%1到%2的汇率失败,因此它将在本次操作中被忽略。"
+
+#: dialogs/kequitypriceupdatedlg.cpp:425
+msgid "Price Update Failed"
+msgstr "价格更新失败"
+
+#: dialogs/kequitypriceupdatedlg.cpp:427
+msgid ""
+"Failed to retrieve a quote for %1 from %2. Press <b>No</b> to remove the "
+"online price source from this security permanently, <b>Yes</b> to continue "
+"updating this security during future price updates or <b>Cancel</b> to stop "
+"the current update operation."
+msgstr ""
+"从%2中提取%1的信息失败。按<b>否</b>将删除此证券的在线价格信息源;按<b>是</b> "
+"继续在将来的价格更新操作中使用此信息源;或者按<b>取消</b>来停止当前的更新的操"
+"作。"
+
+#: dialogs/kequitypriceupdatedlg.cpp:427 dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Price Update Failed"
+msgstr "价格更新失败。"
+
+#: dialogs/kequitypriceupdatedlg.cpp:447
+msgid "Cannot update security <b>%1</b>: %2"
+msgstr "无法更新证券<b>%1</b>: %2"
+
+#: dialogs/kequitypriceupdatedlg.cpp:528
+msgid "Price for %1 updated (id %2)"
+msgstr "%1的价格已更新 (id %2)"
+
+#: dialogs/kequitypriceupdatedlg.cpp:534
+msgid "Received an invalid price for %1, unable to update."
+msgstr "已收到的%1的价格非法。无法更新。"
+
+#: dialogs/kequitypriceupdatedlg.cpp:554
+msgid ""
+"Received a price for %1 (id %2), but this symbol is not on the list! "
+"Aborting entire update."
+msgstr "已收到%1的价格(id %2),但是列表中没有此代号。终止整个更新。"
+
+#: dialogs/transactioneditor.cpp:222
+msgid ""
+"The number <b>%1</b> has already been used in account <b>%2</b>. Do you want "
+"to replace it with the next available number?"
+msgstr "号码%1已经在账户%2中被使用。是否应该用下一个合法号码来替换它?"
+
+#: dialogs/transactioneditor.cpp:222
+msgid "Duplicate number"
+msgstr "号码重复"
+
+#: dialogs/transactioneditor.cpp:303
+msgid ""
+"This transaction has more than two splits and is based on a different "
+"currency (%1). Using this account to modify the transaction is currently not "
+"very well supported by KMyMoney and may result in false results."
+msgstr ""
+"此交易已被拆分成基于不同货币(%1)的两项或多项。KMyMoney尚不能很好的支持使用此"
+"账户来修改该交易,这可能会导致出错。"
+
+#: dialogs/transactioneditor.cpp:305
+msgid ""
+"KMyMoney was not able to find a more appropriate account to edit this "
+"transaction. Nevertheless, you are allowed to modify the transaction. If you "
+"don't want to edit this transaction, please cancel from editing next."
+msgstr ""
+"KMyMoney找不到合适的账户来修改此交易。不过,你还是可以修改它。如果你不想修改"
+"此交易,请取消。"
+
+#: dialogs/transactioneditor.cpp:307
+msgid ""
+"Using e.g. <b>%1</b> to edit this transaction is a better choice. "
+"Nevertheless, you are allowed to modify the transaction. If you want to use "
+"the suggested account instead, please cancel from editing next and change "
+"the view to the suggested account."
+msgstr ""
+"使用账户<b>%1</b>来编辑此交易可能更好。不过,你可以在这里继续修改此交易。如果"
+"你想用建议的账户来修改此交易,那么请取消并转到建议账户的视图中进行修改。"
+
+#: dialogs/transactioneditor.cpp:410
+msgid ""
+"This transaction has more than two splits and is originally based on a "
+"different currency (%1). Using this account to modify the transaction may "
+"result in rounding errors. Do you want to continue?"
+msgstr ""
+"此交易中包含包含两项(或更多)的拆分,并且使用不同的货币单位(%1)。使用此账户"
+"来修改该交易可能会导致舍入误差。 您想继续吗?"
+
+#: dialogs/transactioneditor.cpp:412
+msgid ""
+"At least one of the selected transactions has more than two splits and is "
+"originally based on a different currency (%1). Using this account to modify "
+"the transactions may result in rounding errors. Do you want to continue?"
+msgstr ""
+"在选中的交易里,至少有一个交易中包含包含两项(或更多)的拆分,并且使用不同的"
+"货币单位(%1)。使用此账户来修改这些交易可能会导致舍入误差。 您想继续吗?"
+
+#: dialogs/transactioneditor.cpp:557
+msgid "Storing transactions"
+msgstr "对交易排序"
+
+#: dialogs/transactioneditor.cpp:603 widgets/kmymoneybriefschedule.cpp:65
+msgid "&Enter"
+msgstr "输入(&E)"
+
+#: dialogs/transactioneditor.cpp:606
+msgid "Use this to enter the transaction into the ledger."
+msgstr "用这个来将交易记录到账簿中"
+
+#: dialogs/transactioneditor.cpp:607
+msgid "&Schedule"
+msgstr "交易计划(&S)"
+
+#: dialogs/transactioneditor.cpp:609
+msgid "Accepts the entered data and stores it as schedule"
+msgstr "接受输入的数据,并将其作为交易计划保存。"
+
+#: dialogs/transactioneditor.cpp:610
+msgid "Use this to schedule the transaction for later entry into the ledger."
+msgstr "用这个来将交易作为未来的计划交易项输入到账簿中。"
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"The transaction you are about to enter has a post date in the future.<br/"
+"><br/>Do you want to enter it in the ledger or add it to the schedules?"
+msgstr ""
+"您为交易输入了一个发生在未来的日期。<br/><br/>您希望将它输入账簿,还是列入交"
+"易计划?"
+
+#: dialogs/transactioneditor.cpp:612
+msgid ""
+"_: Dialog caption for 'Enter or schedule' dialog\n"
+"Enter or schedule?"
+msgstr "输入账簿还是列入计划?"
+
+#: dialogs/transactioneditor.cpp:671
+msgid ""
+"The balance of account <b>%1</b> dropped below the warning balance of %2."
+msgstr "账户的余额<b>%1</b>已低于报警限额 %2."
+
+#: dialogs/transactioneditor.cpp:677
+msgid ""
+"The balance of account <b>%1</b> dropped below the minimum balance of %2."
+msgstr "账户的余额<b>%1</b>已低于最小限额 %2."
+
+#: dialogs/transactioneditor.cpp:683
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit warning "
+"limit of %2."
+msgstr "账户的余额<b>%1</b>已低于最大信用报警限额 %2."
+
+#: dialogs/transactioneditor.cpp:689
+msgid ""
+"The balance of account <b>%1</b> dropped below the maximum credit limit of %"
+"2."
+msgstr "账户的余额<b>%1</b>已低于最大信用限额 %2."
+
+#: dialogs/transactioneditor.cpp:740
+msgid "Payer/Receiver"
+msgstr "付/收款人"
+
+#: dialogs/transactioneditor.cpp:748
+msgid "Category/Account"
+msgstr "交易类别/账户"
+
+#: dialogs/transactioneditor.cpp:980 dialogs/transactioneditor.cpp:1016
+#: dialogs/transactioneditor.cpp:1378 dialogs/transactioneditor.cpp:1399
+#: dialogs/transactioneditor.cpp:1422 dialogs/transactioneditor.cpp:1443
+#: dialogs/transactioneditor.cpp:1505 dialogs/transactioneditor.cpp:1509
+#: widgets/transaction.cpp:902
+msgid "Transfer from"
+msgstr "转账来自"
+
+#: dialogs/transactioneditor.cpp:982 dialogs/transactioneditor.cpp:1018
+#: dialogs/transactioneditor.cpp:1401 dialogs/transactioneditor.cpp:1445
+#: dialogs/transactioneditor.cpp:1506 widgets/transaction.cpp:902
+msgid "Transfer to"
+msgstr "转账到"
+
+#: dialogs/transactioneditor.cpp:1259
+msgid "Select autofill transaction"
+msgstr "选择自动填充交易"
+
+#: dialogs/transactionmatcher.cpp:77
+msgid "First transaction does not match requirement for matching"
+msgstr "首笔交易不满足匹配的需要。"
+
+#: dialogs/transactionmatcher.cpp:79
+msgid "Second transaction does not match requirement for matching"
+msgstr "第二笔交易不满足匹配的需要。"
+
+#: dialogs/transactionmatcher.cpp:83 dialogs/transactionmatcher.cpp:133
+msgid "Splits for %1 have conflicting values (%2,%3)"
+msgstr "对%1的拆分钟包含冲突的数值(%2,%3)"
+
+#: dialogs/transactionmatcher.cpp:96 dialogs/transactionmatcher.cpp:149
+msgid ""
+"Both of these transactions have been imported into %1. Therefore they "
+"cannot be matched. Matching works with one imported transaction and one non-"
+"imported transaction."
+msgstr ""
+"这两个交易都已经被导入了%1,因此它们无法被匹配。匹配只能在一个已导入和一个未"
+"导入的交易间进行。"
+
+#: dialogs/transactionmatcher.cpp:101 dialogs/transactionmatcher.cpp:156
+msgid "Unable to match all splits (%1)"
+msgstr "无法匹配全部拆分(%1)"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:65
+msgid "Account and transfer account are the same. Please change one."
+msgstr "账户和转账账户相同。请修改其中之一。"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:84
+msgid "Payee changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr ""
+"付款人有变化。<br>&nbsp;&nbsp;&nbsp;原为: <b>%1</b>, 现为: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:92
+#: dialogs/kconfirmmanualenterdlg.cpp:100
+msgid "Account changed. Old: \"%1\", New: \"%2\""
+msgstr "账户已从“%1”改为“%2”"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:107
+msgid "Account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "账户有变化。<br>&nbsp;&nbsp;&nbsp;原为: <b>%1</b>, 现为: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:115
+msgid ""
+"Transfer account changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</"
+"b><p>"
+msgstr ""
+"转账账户有变化.<br>&nbsp;&nbsp;&nbsp;原为: <b>%1</b>, 现为: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:143
+msgid ""
+"Category changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "类别有变化。<br>&nbsp;&nbsp;&nbsp;原为: <b>%1</b>, 现为: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:151
+#: dialogs/kconfirmmanualenterdlg.cpp:153
+msgid "empty"
+msgstr "空的"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:157
+msgid "Memo changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "备忘有变化。<br>&nbsp;&nbsp;&nbsp;原为: <b>%1</b>, 现为: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:166
+msgid "Amount changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%2</b><p>"
+msgstr "金额有变化。<br>&nbsp;&nbsp;&nbsp;原为: <b>%1</b>, 现为: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:175
+msgid ""
+"Reconciliation flag changed.<br>&nbsp;&nbsp;&nbsp;Old: <b>%1</b>, New: <b>%"
+"2</b><p>"
+msgstr ""
+"对帐标志有变化。<br>&nbsp;&nbsp;&nbsp;原为: <b>%1</b>, 现为: <b>%2</b><p>"
+
+#: dialogs/kconfirmmanualenterdlg.cpp:182
+msgid "Fatal error in determining data: "
+msgstr "在确定数据时发生致命错误。"
+
+#: dialogs/kselectdatabasedlg.cpp:56
+msgid ""
+"There are no Qt SQL drivers installed in your system.\n"
+"Please consult documentation for your distro, or visit the Qt web site (www."
+"trolltech.com) and search for SQL drivers."
+msgstr ""
+"在您的系统中未安装Qt的SQL驱动程序。\n"
+"请参考您的系统发行版文档,或者访问Qt官方网站(http://www.trolltech.com)寻找"
+"SQL驱动程序。"
+
+#: dialogs/kselectdatabasedlg.cpp:100
+msgid "Qt SQL driver %1 is no longer installed on your system"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:107
+msgid "Qt SQL driver %1 is not suported"
+msgstr ""
+
+#: dialogs/kselectdatabasedlg.cpp:164
+#, fuzzy
+msgid "SQLite files (*.sql);; All files (*.*)"
+msgstr ""
+"*.%1|%2文件 (%3)\n"
+"*.*|所有文件(*.*) "
+
+#: dialogs/kselectdatabasedlg.cpp:167
+#, fuzzy
+msgid "Select SQLite file"
+msgstr "选择样式"
+
+#: dialogs/kselectdatabasedlg.cpp:188
+#, fuzzy
+msgid "All files (*.*)"
+msgstr "所有文件"
+
+#: dialogs/kselectdatabasedlg.cpp:191
+#, fuzzy
+msgid "Select output file"
+msgstr "选择文件"
+
+#: dialogs/investactivities.cpp:168
+msgid "%1 (Brokerage)"
+msgstr "%1(托管)"
+
+#: dialogs/investactivities.cpp:200 dialogs/investactivities.cpp:288
+#: dialogs/investactivities.cpp:425 widgets/transaction.cpp:1548
+msgid "Price/share"
+msgstr "价格/每股"
+
+#: dialogs/investactivities.cpp:586
+msgid "Ratio 1/"
+msgstr "比率 1/"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid ""
+"<p>Please check that all the details in the following dialog are correct and "
+"press OK.</p><p>Editable data can be changed and can either be applied to "
+"just this occurence or for all subsequent occurences for this schedule. "
+"(You will be asked what you intend after pressing OK in the following dialog)"
+"</p>"
+msgstr ""
+"<b><p>请检查后面的对话框中所有的信息是否准确无误,然后按“确定”键继续。</p> "
+"<p>可编辑的数据可以被修改,并且可以只应用到本次交易,或者应用到本预定表以后的"
+"全部交易中。(在按下“确认”键后,将会在接下来的对话框中进一步询问您的意愿)</"
+"p></b>"
+
+#: dialogs/kenterscheduledlg.cpp:201
+msgid "Enter scheduled transaction"
+msgstr "输入预定交易"
+
+#: dialogs/kcsvprogressdlg.cpp:65 dialogs/kexportdlg.cpp:65
+msgid "&Export"
+msgstr "导出(&E)"
+
+#: dialogs/kexportdlg.cpp:67 dialogs/kimportdlg.cpp:68
+msgid "Start operation"
+msgstr "开始操作"
+
+#: dialogs/kexportdlg.cpp:68
+msgid "Use this to start the export operation"
+msgstr "开始导出操作"
+
+#: dialogs/kexportdlg.cpp:71 dialogs/kimportdlg.cpp:72
+msgid "&Browse..."
+msgstr "浏览(&B)"
+
+#: dialogs/kexportdlg.cpp:73 dialogs/kimportdlg.cpp:74
+msgid "Select filename"
+msgstr "选择文件"
+
+#: dialogs/kexportdlg.cpp:74 dialogs/kimportdlg.cpp:75
+msgid "Use this to select a filename to export to"
+msgstr "选择要导出的文件"
+
+#: dialogs/kexportdlg.cpp:77 dialogs/kimportdlg.cpp:78
+#: dialogs/settings/ksettingsonlinequotes.cpp:64
+#: widgets/kmymoneyonlinequoteconfig.cpp:64
+msgid "&New..."
+msgstr "新建(&N)..."
+
+#: dialogs/kexportdlg.cpp:79 dialogs/kimportdlg.cpp:80
+#: dialogs/mymoneyqifprofileeditor.cpp:96
+msgid "Create a new profile"
+msgstr "创建新配置文件"
+
+#: dialogs/kexportdlg.cpp:80 dialogs/kimportdlg.cpp:81
+msgid "Use this to open the profile editor"
+msgstr "打开配置文件对话框"
+
+#: dialogs/keditloanwizard.cpp:56
+msgid "Edit loan wizard"
+msgstr "编辑贷款向导"
+
+#: dialogs/keditloanwizard.cpp:58
+msgid ""
+"Please enter the date from which on the following changes will be effective. "
+"The date entered must be later than the opening date of this account (%1), "
+"but must not be in the future. The default will be today."
+msgstr ""
+"请输入下面修改生效的起始日期。输入的日期必须晚于此账户(%1)的开户日期, 同时也"
+"不应是将来的日期。缺省为今天。"
+
+#: dialogs/keditloanwizard.cpp:76
+msgid ""
+"Note: you will not be able to modify this account today, because the opening "
+"date \"%1\" is in the future. Please revisit this dialog when the time has "
+"come."
+msgstr ""
+"注意:您今天将无法修改此账户。因为开户日期“%1”是一个将来的日期。当到达该日期"
+"时再访问本对话框。"
+
+#: dialogs/keditloanwizard.cpp:244
+msgid ""
+"Your previous selection was \"%1\". If you select another option, KMyMoney "
+"will dismiss the changes you have just entered. Do you wish to proceed?"
+msgstr ""
+"您此前的选择是“%1”。如果您选择其它选项,KMyMoney将会撤销您刚才输入的所有改"
+"动。 您确定要继续吗?"
+
+#: dialogs/kcategoryreassigndlg.cpp:81
+msgid ""
+"At least one transaction/schedule still references the category <b>%1</b>. "
+"However, at least one category with the same currency must exist so that the "
+"transactions/schedules can be reassigned."
+msgstr ""
+"至少还有一项交易/交易计划在引用交易类别<b>%1</b>。要为这些交易/交易计划重新指"
+"定交易类别, 需要存在至少一个使用同样货币单位的交易类别。"
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid ""
+"This dialog does not allow to create new categories. Please pick a category "
+"from the list."
+msgstr "该对话框不允许创建新交易类别。请从列表中选择一个交易类别。"
+
+#: dialogs/kcategoryreassigndlg.cpp:100
+msgid "Category creation"
+msgstr "交易类别创建"
+
+#: dialogs/kbackupdlg.cpp:61
+msgid "C&hoose..."
+msgstr "选择(&C)..."
+
+#: dialogs/kbackupdlg.cpp:63
+msgid "Select mount point"
+msgstr "选择加载点"
+
+#: dialogs/kbackupdlg.cpp:64
+msgid "Use this to browse to the mount point."
+msgstr "用它来浏览并选择加载点。"
+
+#: dialogs/keditscheduledlg.cpp:293
+msgid "Next due date"
+msgstr "下次到期日期"
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+msgid ""
+"You have turned on the GPG encryption support. This means, that new files "
+"will be stored encrypted. Existing files will not be encrypted "
+"automatically. To achieve encryption of existing files, please use the "
+"<b>File/Save as...</b> feature and store the file under a different name. "
+"Once confident with the result, feel free to delete the old file and rename "
+"the encrypted one to the old name."
+msgstr ""
+
+#: dialogs/settings/ksettingsgpg.cpp:180
+#, fuzzy
+msgid "GPG encryption activated"
+msgstr "GPG加密"
+
+#: dialogs/settings/ksettingshome.cpp:51
+msgid "&Up"
+msgstr "上移(&U)"
+
+#: dialogs/settings/ksettingshome.cpp:53
+msgid "Move selected item up"
+msgstr "向上移动被选中的项目"
+
+#: dialogs/settings/ksettingshome.cpp:54
+msgid "Use this to move the selected item up by one position in the list."
+msgstr "用它来将选中的项目在列表中向上移动一位。"
+
+#: dialogs/settings/ksettingshome.cpp:55
+msgid "&Down"
+msgstr "下移(&D)"
+
+#: dialogs/settings/ksettingshome.cpp:57
+msgid "Move selected item down"
+msgstr "向下移动被选中的项目"
+
+#: dialogs/settings/ksettingshome.cpp:58
+msgid "Use this to move the selected item down by one position in the list."
+msgstr "用它来将选中的项目在列表中向下移动一位。"
+
+#: dialogs/settings/rc.cpp:1
+msgid "Color settings"
+msgstr "配色设置"
+
+#: dialogs/settings/rc.cpp:2
+msgid "Foreground"
+msgstr "前景色"
+
+#: dialogs/settings/rc.cpp:3
+msgid "Text colors"
+msgstr "文本颜色"
+
+#: dialogs/settings/rc.cpp:4
+msgid "Grid color"
+msgstr "栅格线颜色"
+
+#: dialogs/settings/rc.cpp:5
+msgid "Erronous transaction"
+msgstr "错误交易"
+
+#: dialogs/settings/rc.cpp:6
+msgid "Value with missing conversion rate"
+msgstr "缺少转换率的值"
+
+#: dialogs/settings/rc.cpp:7
+msgid "Negative value"
+msgstr "负值"
+
+#: dialogs/settings/rc.cpp:8
+msgid "Background"
+msgstr "背景"
+
+#: dialogs/settings/rc.cpp:10
+msgid "List background colors"
+msgstr "列表背景颜色"
+
+#: dialogs/settings/rc.cpp:11
+msgid "Normal"
+msgstr "标准的"
+
+#: dialogs/settings/rc.cpp:12
+msgid "Alternate"
+msgstr "替换的"
+
+#: dialogs/settings/rc.cpp:13
+msgid "Special background colors"
+msgstr "特殊背景颜色"
+
+#: dialogs/settings/rc.cpp:14
+msgid "Ledger group separator"
+msgstr "账簿组分隔符"
+
+#: dialogs/settings/rc.cpp:15
+msgid "Required field"
+msgstr "必填项"
+
+#: dialogs/settings/rc.cpp:16
+msgid "Imported transaction"
+msgstr "导入的交易"
+
+#: dialogs/settings/rc.cpp:17
+msgid "Matched transaction"
+msgstr "匹配的交易"
+
+#: dialogs/settings/rc.cpp:18
+msgid "Font settings"
+msgstr "字体设置"
+
+#: dialogs/settings/rc.cpp:19
+msgid "Use system fonts"
+msgstr "使用操作系统设置"
+
+#: dialogs/settings/rc.cpp:20
+msgid "Individual font settings"
+msgstr "个人字体设置"
+
+#: dialogs/settings/rc.cpp:24
+msgid "Number of Days of Account Cycle:"
+msgstr "账户循环天数:"
+
+#: dialogs/settings/rc.cpp:26
+msgid "Number of Days to Forecast:"
+msgstr "预报天数:"
+
+#: dialogs/settings/rc.cpp:27
+msgid "Forecast Method"
+msgstr "预报方式"
+
+#: dialogs/settings/rc.cpp:28
+msgid "Scheduled and Future Transactions"
+msgstr "计划与未来交易"
+
+#: dialogs/settings/rc.cpp:29
+msgid "History-based"
+msgstr "基于历史"
+
+#: dialogs/settings/rc.cpp:30
+msgid "History-based settings"
+msgstr "基于历史的预报设置"
+
+#: dialogs/settings/rc.cpp:31
+msgid "Number of Cycles to use in Forecast:"
+msgstr "预报中使用的循环周期数"
+
+#: dialogs/settings/rc.cpp:36
+msgid "General Settings"
+msgstr "总体设置"
+
+#: dialogs/settings/rc.cpp:37
+msgid "Global"
+msgstr "全局"
+
+#: dialogs/settings/rc.cpp:38
+msgid "Startup page options"
+msgstr "启动页面选项"
+
+#: dialogs/settings/rc.cpp:39
+msgid "Start with homepage"
+msgstr "以个人主页启动"
+
+#: dialogs/settings/rc.cpp:40
+msgid "Start with last selected view"
+msgstr "以上次选择的视图启动"
+
+#: dialogs/settings/rc.cpp:41
+msgid "Precision settings"
+msgstr "精度设置"
+
+#: dialogs/settings/rc.cpp:42
+msgid "Price precision"
+msgstr "价格精度"
+
+#: dialogs/settings/rc.cpp:43
+msgid "digits"
+msgstr "位小数"
+
+#: dialogs/settings/rc.cpp:44
+msgid "Autosave options"
+msgstr "自动保存选项"
+
+#: dialogs/settings/rc.cpp:45
+msgid "Autosave periodically"
+msgstr "定期自动保存"
+
+#: dialogs/settings/rc.cpp:46
+msgid "minutes"
+msgstr "分钟"
+
+#: dialogs/settings/rc.cpp:47
+msgid "Fiscal Year"
+msgstr "财年"
+
+#: dialogs/settings/rc.cpp:48
+msgid "Your fiscal year starts on"
+msgstr "您的财年起始于"
+
+#: dialogs/settings/rc.cpp:49
+msgid "January"
+msgstr "一月"
+
+#: dialogs/settings/rc.cpp:50
+msgid "February"
+msgstr "二月"
+
+#: dialogs/settings/rc.cpp:51
+msgid "March"
+msgstr "三月"
+
+#: dialogs/settings/rc.cpp:52
+msgid "April"
+msgstr "四月"
+
+#: dialogs/settings/rc.cpp:53
+msgid "May"
+msgstr "五月"
+
+#: dialogs/settings/rc.cpp:54
+msgid "June"
+msgstr "六月"
+
+#: dialogs/settings/rc.cpp:55
+msgid "July"
+msgstr "七月"
+
+#: dialogs/settings/rc.cpp:56
+msgid "August"
+msgstr "八月"
+
+#: dialogs/settings/rc.cpp:57
+msgid "September"
+msgstr "九月"
+
+#: dialogs/settings/rc.cpp:58
+msgid "October"
+msgstr "十月"
+
+#: dialogs/settings/rc.cpp:59
+msgid "November"
+msgstr "十一月"
+
+#: dialogs/settings/rc.cpp:60
+msgid "December"
+msgstr "十二月"
+
+#: dialogs/settings/rc.cpp:61
+msgid "Views"
+msgstr "视图"
+
+#: dialogs/settings/rc.cpp:62
+msgid "Synchronize account selection of ledger and investment view"
+msgstr "同步账簿和投资视图中的账户选择"
+
+#: dialogs/settings/rc.cpp:63
+msgid ""
+"Check the views you want to enable, uncheck those you want to hide, because "
+"you don't need the functionality."
+msgstr "勾选您想要启用的视图,取消您想要隐藏的视图,因为您不需要该功能。"
+
+#: dialogs/settings/rc.cpp:64
+msgid "Icon size of navigation bar"
+msgstr "导航栏中的图标大小"
+
+#: dialogs/settings/rc.cpp:65
+msgid "Micro (16px)"
+msgstr "最小尺寸 (16px)"
+
+#: dialogs/settings/rc.cpp:66
+msgid "Small (32px)"
+msgstr "小尺寸 (32px)"
+
+#: dialogs/settings/rc.cpp:67
+msgid "Normal (48px)"
+msgstr "标准尺寸 (48px)"
+
+#: dialogs/settings/rc.cpp:68
+msgid "Large (64px)"
+msgstr "大尺寸 (64px)"
+
+#: dialogs/settings/rc.cpp:69
+msgid "Show title bar on each page"
+msgstr ""
+
+#: dialogs/rc.cpp:835 dialogs/settings/rc.cpp:70
+msgid "Filter"
+msgstr "过滤器"
+
+#: dialogs/settings/rc.cpp:71
+msgid "Accounts / Categories"
+msgstr "账户 / 交易类别"
+
+#: dialogs/settings/rc.cpp:72
+msgid "Don't show unused categories"
+msgstr "不显示未使用的交易类别"
+
+#: dialogs/settings/rc.cpp:73
+msgid ""
+"This option hides all categories in the categories view that are not used in "
+"at least a single transaction. They are still shown in the category "
+"selection lists."
+msgstr ""
+"该选项在交易类表视图中隐藏不包含任何交易的类别。这些类别仍然会显示在交易 类别"
+"选择列表中。"
+
+#: dialogs/settings/rc.cpp:74
+msgid "Don't show closed accounts"
+msgstr "不显示已关闭的账户"
+
+#: dialogs/settings/rc.cpp:75
+msgid ""
+"This option hides all accounts that have been closed by the user in views "
+"and selection lists.\n"
+"\n"
+"You can use <b>View/Show all accounts</b> to temporarily show hidden "
+"accounts in the views."
+msgstr ""
+"该选项在视图和选择列表中隐藏所有被用户关闭的账户。\n"
+"\n"
+"你可以使用<b>视图/显示所有账户</b>来临时在视图中显示隐藏的账户。"
+
+#: dialogs/settings/rc.cpp:76
+#, fuzzy
+msgid "Show equity accounts"
+msgstr "产权账户"
+
+#: dialogs/rc.cpp:332 dialogs/settings/rc.cpp:77 widgets/rc.cpp:160
+msgid "Schedules"
+msgstr "计划表"
+
+#: dialogs/settings/rc.cpp:78
+msgid "Don't show finished schedules"
+msgstr "不现实已完成的交易计划。"
+
+#: dialogs/settings/rc.cpp:79
+msgid "This option hides all finished schedules in the schedules view."
+msgstr "该选项在交易计划视图中隐藏全部已完成的交易"
+
+#: dialogs/settings/rc.cpp:81
+msgid "Don't show transactions prior to"
+msgstr "不显示发生在该日期之前的交易"
+
+#: dialogs/settings/rc.cpp:82
+msgid "Don't show reconciled transactions"
+msgstr "不显示已对帐交易"
+
+#: dialogs/settings/rc.cpp:83
+msgid "This option hides all reconciled transactions in the ledger view."
+msgstr "该选项在账簿视图中隐藏所有已对帐的交易。"
+
+#: dialogs/settings/rc.cpp:84 widgets/rc.cpp:22
+msgid "GPG encryption settings"
+msgstr "GPG加密设置"
+
+#: dialogs/settings/rc.cpp:85
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Access to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>additional recovery encryption</i> is only accessible, if the "
+"necessary key for <b>kmymoney-recover@users.sourceforge.net</b> with id "
+"0x8AFDDC8E is found in your keyring."
+msgstr ""
+"在本页中您可以对使用<b>GPG</b>加密<b>KMyMoney</b>数据时用的各项参数进行设"
+"置。\n"
+"如果在您的系统中检测不到GPG,则相应的参数设置都会被关闭。在这种情况下,请确保"
+"GPG在当前用户环境中可以正常工作。\n"
+"只有当能在系统的密钥环中找到id为0x8AFDDC8E的<b>kmymoney-recover@users."
+"sourceforge.net</b>的密钥时,才可以访问<i>额外恢复加密</i>选项。"
+
+#: dialogs/settings/rc.cpp:86 widgets/rc.cpp:24
+msgid "Use GPG encryption"
+msgstr "使用GPG加密"
+
+#: dialogs/settings/rc.cpp:87
+msgid "GPG encryption"
+msgstr "GPG加密"
+
+#: dialogs/settings/rc.cpp:88
+msgid "Your key"
+msgstr "您的密钥"
+
+#: dialogs/settings/rc.cpp:89
+msgid ""
+"This combo box lists all the secret keys you have in your keyring. Select "
+"the one you want to use for encryption when saving to a file."
+msgstr ""
+"此复合框中列出您的密钥环中的所有密钥。请选择一个,用来在保存数据文件时进行加"
+"密。"
+
+#: dialogs/settings/rc.cpp:90
+msgid "Additonal keys"
+msgstr "附加密钥"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:50 dialogs/settings/rc.cpp:91
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading 0x."
+msgstr ""
+"请输入您想要用于数据加密的密钥id。这可以是一个邮件地址,也可以是一个16进制的"
+"密钥id。 如果是密钥id,请别忘了输入前缀<i>0x</i>。"
+
+#: dialogs/settings/rc.cpp:92 widgets/rc.cpp:28
+msgid ""
+"This symbol denotes, if the key for the given user id has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"此符号表示在您的密钥环中能否找到指定的用户id。如果能找到,它会以绿色显示;否则"
+"会以暗颜色显示。"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:61 dialogs/settings/rc.cpp:93
+msgid "Keys for all of the above user ids found"
+msgstr "用于上述所有找到的用户id的密钥"
+
+#: dialogs/settings/rc.cpp:94 widgets/rc.cpp:31
+msgid ""
+"This symbol denotes, if the KMyMoney recovery key has been found in your "
+"keyring. It is green when found, dark otherwise."
+msgstr ""
+"此符号表示在您的密钥环中能否找到KMyMoney恢复密钥。如果能找到,它会以绿色显示;"
+"否则会以暗颜色显示。"
+
+#: dialogs/settings/rc.cpp:95
+msgid "Recover Key available in keyring"
+msgstr "在密钥环中存在恢复密钥"
+
+#: dialogs/settings/rc.cpp:96
+msgid "Also encrypt with KMyMoney's recover key"
+msgstr "同时使用KMyMoney恢复密钥加密"
+
+#: dialogs/settings/rc.cpp:97
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out.."
+msgstr ""
+"您可以指定数据加密时同时使用KMyMoney恢复密钥。只有KMyMoney开发小组中的核心成"
+"员拥有相应的私钥,能够读取被它加密的数据\n"
+"\n"
+"此机制用来预防您丢失了自己的密钥并且无法访问数据的情况。 当此项打开时,"
+"KMyMoney的开发者可以对数据进行解密并将解密后的数据发还给您。在发还数据前,您"
+"还需要回答一些关于您的数据的详细问题以确保它不会被错误的发给别人。"
+
+#: dialogs/settings/rc.cpp:98
+msgid "Homepage Settings"
+msgstr "用户主页设置"
+
+#: dialogs/settings/rc.cpp:99
+msgid "Up"
+msgstr "上移"
+
+#: dialogs/settings/rc.cpp:100
+msgid "Down"
+msgstr "下移"
+
+#: dialogs/settings/rc.cpp:101
+msgid ""
+"Selected entries are shown on the home page of the application.<p>\n"
+"Use the buttons and checkboxes to customize the layout of the home page."
+msgstr ""
+"选中的项目将会在程序的用户主页中显示。\n"
+"\n"
+"使用这些按钮和复选框来自定义用户主页的布局。"
+
+#: dialogs/settings/rc.cpp:102
+msgid "Homepage/Summary page font scaling"
+msgstr "用户主页/概述页面字体比例"
+
+#: dialogs/settings/rc.cpp:103
+msgid "Percentage of default font size:"
+msgstr "缺省字体大小的百分比:"
+
+#: dialogs/settings/rc.cpp:104
+msgid ""
+"Remember font size when leaving the program if manually changed with mouse-"
+"wheel"
+msgstr "如果使用鼠标滚轮手动修改了字体大小,在关闭程序时自动记住当时的设置。"
+
+#: dialogs/settings/rc.cpp:105
+msgid "Information display"
+msgstr "信息显示"
+
+#: dialogs/settings/rc.cpp:106
+msgid "Show Account Limit Information"
+msgstr "显示账户限制信息"
+
+#: dialogs/settings/rc.cpp:110 widgets/rc.cpp:47
+msgid ""
+"<i>Enter regular expressions which can be used to parse the data returned "
+"from the URL entered above. The symbol, price, and date must be found in "
+"the quote data to be usable. You may also try the KMyMoney user's "
+"mailinglist at <a href=\"mailto:kmymoney2-user@lists.sourceforge.net"
+"\">kmymoney2-user@lists.sourceforge.net</a> to find what settings work for "
+"other users in your country.</i>"
+msgstr ""
+"输入解析从上面的地址返回数据用的正则表达式。必须能够从报价数据中找到代号、价"
+"格和日期信息。 您也可以尝试从KMyMoney用户邮件列表<a href=\"mailto:kmymoney2-"
+"user@lists.sourceforge.net\">kmymoney2-user@lists.sourceforge.net</a>里寻找您"
+"所在国家的用户是如何进行设置的。"
+
+#: dialogs/settings/rc.cpp:113 widgets/rc.cpp:38
+msgid "Regular Expression to extract the symbol from the downloaded data"
+msgstr "从下载数据中提取代号用的正则表达式"
+
+#: dialogs/settings/rc.cpp:114 widgets/rc.cpp:39
+msgid "Regular Expression to extract the price from the downloaded data"
+msgstr "从下载数据中提取价格用的正则表达式"
+
+#: dialogs/settings/rc.cpp:115 widgets/rc.cpp:41
+msgid "URL to be used to download the quote"
+msgstr "用于下载报价的地址"
+
+#: dialogs/settings/rc.cpp:116 widgets/rc.cpp:42
+msgid ""
+"Enter the URL from which stock quotes will be fetched. <b>%1</b> will be "
+"replaced with the symbol for the security being quoted. For currency "
+"conversions, <b>%2</b> will be replaced with the currency to be quoted and "
+"<b>%1</b> with the currency the quote is based on."
+msgstr ""
+"输入用于获取股票报价的地址。将用被报价证券的代号来代替<b>%1</b>。在兑换货币"
+"时, 将用要报价的货币代替<b>%2</b>,用报价的基准货币代替<b>%3</b>。"
+
+#: dialogs/settings/rc.cpp:118 dialogs/settings/rc.cpp:121 widgets/rc.cpp:40
+#: widgets/rc.cpp:44
+msgid "Regular Expression to extract the date from the downloaded data"
+msgstr "从下载数据中提取日期用的正则表达式"
+
+#: dialogs/rc.cpp:807 dialogs/settings/rc.cpp:119 widgets/rc.cpp:45
+msgid "Date Format"
+msgstr "日期格式"
+
+#: dialogs/settings/rc.cpp:122
+msgid "Skip HTML stripping"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:123
+msgid ""
+"<p>For easier processing of the data returned by the online source, KMyMoney "
+"usually strips unused parts before it is parsed with the regular "
+"expressions. If matching of the fields relies on those items, then use this "
+"option to turn stripping off.</p>\n"
+"\n"
+"<p>The following items are usually removed by stripping:\n"
+"\n"
+"<ul>\n"
+"<li>HTML tags such as <b>&lt;tag&gt;</b></li>\n"
+"<li>& encoded characters such as <b>&amp;nbsp;</b></li>\n"
+"<li>duplicate whitespace</li>\n"
+"</ul>\n"
+"</p>"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:127
+msgid "Register settings"
+msgstr "账簿设置"
+
+#: dialogs/settings/rc.cpp:128
+msgid "Display"
+msgstr "显示"
+
+#: dialogs/settings/rc.cpp:131
+msgid ""
+"Using the ledger lens shows the details for the transaction that has focus "
+"in the ledger. Usually, when using the transaction form, only a one line "
+"summary is displayed for each transaction as the details are shown in the "
+"form."
+msgstr ""
+"“在账簿中显示当前交易详细信息”选项在账簿视图中显示当前交易的详细信息。通常,"
+"在使用交易表单时, 因为当前交易的内容已经直接显示在表单中,因此只为每项交易显"
+"示一行摘要信息。"
+
+#: dialogs/settings/rc.cpp:133
+msgid "Always show a No. field"
+msgstr "始终显示序号栏"
+
+#: dialogs/settings/rc.cpp:134
+msgid "Show group header between transactions"
+msgstr "在交易间显示组标题"
+
+#: dialogs/settings/rc.cpp:135
+msgid ""
+"Draws a larger header above each group of transaction. The grouping depends "
+"on the current sort order."
+msgstr "在每组交易上方显示一个较大的标题。具体的分组取决于当前的排序顺序。"
+
+#: dialogs/settings/rc.cpp:136
+msgid "Show header for the previous and current fiscal year"
+msgstr "显示上一财年及当前财年的标题"
+
+#: dialogs/settings/rc.cpp:137
+msgid "Sorting"
+msgstr "排序"
+
+#: dialogs/settings/rc.cpp:138
+msgid "Normal view"
+msgstr "标准视图"
+
+#: dialogs/settings/rc.cpp:139
+msgid "Reconciliation view"
+msgstr "对帐视图"
+
+#: dialogs/settings/rc.cpp:140
+msgid "Search view"
+msgstr "搜索视图"
+
+#: dialogs/settings/rc.cpp:141
+msgid ""
+"Use the <i>left</i> and <i>right</i> buttons to add and remove sort options. "
+"Use the <i>up</i> and <i>down</i> buttons to modify the sort order. Double-"
+"Click a selected entry to toggle the sort order between <i>ascending</i> and "
+"<i>descending</i>."
+msgstr ""
+"使用<i>左</i><i>右</i>按钮来添加和删除排序选项。使用<i>上</i><i>下</i>按钮来"
+"修改排序顺序。双击选中项,可以 切换是以<i>升序</i>还是<i>降序</i>来排序。"
+
+#: dialogs/settings/rc.cpp:142
+msgid "Data entry"
+msgstr "数据项"
+
+#: dialogs/settings/rc.cpp:146
+msgid "Use Enter to move between fields"
+msgstr "使用回车在各项间移动"
+
+#: dialogs/settings/rc.cpp:147
+msgid "Match names from start"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:148
+msgid ""
+"Mark this option, if you always want to match names e.g. for payees from the "
+"start. If unset, any substring is matched."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:149
+msgid "Default reconciliation state"
+msgstr "缺省对帐状态"
+
+#: dialogs/rc.cpp:227 dialogs/settings/rc.cpp:150
+#: widgets/kmymoneycombo.cpp:348 widgets/registersearchline.cpp:84
+msgid "Not reconciled"
+msgstr "未对帐的"
+
+#: dialogs/rc.cpp:228 dialogs/settings/rc.cpp:151
+#: widgets/kmymoneycombo.cpp:347 widgets/registersearchline.cpp:85
+msgid "Cleared"
+msgstr "已清算"
+
+#: dialogs/settings/rc.cpp:153
+msgid ""
+"Default reconciliation state for transactions entered during reconciliation "
+"of an account"
+msgstr "在账户对帐时所输入的交易的缺省对帐状态"
+
+#: dialogs/settings/rc.cpp:154
+msgid "Autofill"
+msgstr "自动填写"
+
+#: dialogs/settings/rc.cpp:155
+msgid "No Autofill"
+msgstr "不自动填写"
+
+#: dialogs/settings/rc.cpp:156
+msgid "Don't do autofill of transaction data at all."
+msgstr "不自动填写交易数据"
+
+#: dialogs/settings/rc.cpp:157
+msgid "Same transaction if amount differs less than"
+msgstr "同一笔交易,如果金额差异少于"
+
+#: dialogs/settings/rc.cpp:158
+msgid ""
+"Collect all transactions for the given payee. Treat all transactions that "
+"refer to the same category and have an amount with +/- X % as identical. If "
+"more than one transaction is found, a list of them is presented to the "
+"user.\n"
+"\n"
+"Selecting 0% will list all transactions."
+msgstr ""
+"收集给定收/付款人的全部交易。所有同一类别,并且数额差在+/- X %内的交易被视为 "
+"同一条交易。如果找到一条以上的交易,那么它们将以列表的形式展现给用户。\n"
+"\n"
+"选择0%将会列出所有交易。"
+
+#: dialogs/settings/rc.cpp:159
+msgid ""
+"Two transactions are usually treated identical for autofill, if they refer "
+"the same accounts. They are treated as different transactions though, when "
+"their amount varies by more than the percentage given here."
+msgstr ""
+"如果两个交易引用同一个账户,那么通常在自动填写时它们会被处理为同一条交易记"
+"录。 不过,当它们的金额差异超出了这里指定的百分比时,它们就处理为不同的记录。"
+
+#: dialogs/settings/rc.cpp:160
+msgid ""
+"_: Same transaction if amount differs less than percent.\n"
+"percent."
+msgstr "百分比。"
+
+#: dialogs/settings/rc.cpp:161
+msgid "with previously most often used transaction for the payee"
+msgstr "用此收/付款人过去最常发生的交易"
+
+#: dialogs/settings/rc.cpp:162
+msgid ""
+"The data of the last transaction assigned to the category used most often "
+"for this payee is autofilled into the transaction editor."
+msgstr ""
+"此收/付款人过去最常发生的交易类别里的最新一条交易的数据将会被自动填写到交易编"
+"辑器里。"
+
+#: dialogs/settings/rc.cpp:164
+msgid "Match transactions within days"
+msgstr "匹配...天之内的交易"
+
+#: dialogs/settings/rc.cpp:165
+msgid ""
+"Search for matching transactions within the range of the posting date of the "
+"imported transaction +/- the number of given days."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:166
+msgid "Ask for a new payee's default category"
+msgstr ""
+
+#: dialogs/settings/rc.cpp:167
+msgid ""
+"Whenever a new payee is detected during import of a statement, the user will "
+"be asked to assign a default category for this user when this option is "
+"selected."
+msgstr ""
+
+#: dialogs/settings/rc.cpp:168
+msgid "Schedule Settings"
+msgstr "交易计划设置"
+
+#: dialogs/settings/rc.cpp:169
+msgid "Startup options"
+msgstr "启动选项"
+
+#: dialogs/settings/rc.cpp:170
+msgid "Check schedules on startup"
+msgstr "在启动时检查交易计划"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:60
+#: widgets/kmymoneyonlinequoteconfig.cpp:60
+msgid "Delete the selected source entry"
+msgstr "删除选中的来源项"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:61
+#: widgets/kmymoneyonlinequoteconfig.cpp:61
+msgid "Use this to delete the selected online source entry"
+msgstr "用它来删除选中的在线源项"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:66
+#: widgets/kmymoneyonlinequoteconfig.cpp:66
+msgid "Create a new source entry for online quotes"
+msgstr "为在线报价新建一个来源项"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:67
+#: widgets/kmymoneyonlinequoteconfig.cpp:67
+msgid "Use this to create a new entry for online quotes"
+msgstr "用它为在线报价新建一个来源项"
+
+#: dialogs/settings/ksettingsonlinequotes.cpp:107
+#: dialogs/settings/ksettingsonlinequotes.cpp:190
+#: dialogs/settings/ksettingsonlinequotes.cpp:193
+#: dialogs/settings/ksettingsonlinequotes.cpp:216
+#: widgets/kmymoneyonlinequoteconfig.cpp:107
+#: widgets/kmymoneyonlinequoteconfig.cpp:185
+#: widgets/kmymoneyonlinequoteconfig.cpp:188
+#: widgets/kmymoneyonlinequoteconfig.cpp:211
+msgid "New Quote Source"
+msgstr "新报价来源"
+
+#: dialogs/ksplittransactiondlg.cpp:77 dialogs/rc.cpp:788
+msgid "Clear &All"
+msgstr "全部清除(&A)"
+
+#: dialogs/ksplittransactiondlg.cpp:79
+msgid "Clear all splits"
+msgstr "清除所有拆分。"
+
+#: dialogs/ksplittransactiondlg.cpp:80
+msgid "Use this to clear all splits of this transaction"
+msgstr "清除对此交易的全部拆分"
+
+#: dialogs/ksplittransactiondlg.cpp:84
+#, fuzzy
+msgid "&Merge"
+msgstr "平均"
+
+#: dialogs/ksplittransactiondlg.cpp:183
+msgid ""
+"The total amount of this transaction is %1 while the sum of the splits is %"
+"2. The remaining %3 are unassigned."
+msgstr "此交易的总金额为%1。但是已拆分金额总计为%2。还有%3的剩余金额尚未指定。"
+
+#: dialogs/ksplittransactiondlg.cpp:191
+#, c-format
+msgid "Change &total amount of transaction to %1."
+msgstr "将交易总额改为%1。"
+
+#: dialogs/ksplittransactiondlg.cpp:194
+msgid "&Distribute difference of %1 among all splits."
+msgstr "将差额%1均摊到各拆分中。(&D)"
+
+#: dialogs/ksplittransactiondlg.cpp:203
+#, c-format
+msgid "&Leave total amount of transaction at %1."
+msgstr "将交易总额留为%1。"
+
+#: dialogs/ksplittransactiondlg.cpp:205
+msgid "&Leave %1 unassigned."
+msgstr "保持%1未指派状态。(&L)"
+
+#: dialogs/ksplittransactiondlg.cpp:275
+msgid ""
+"You are about to delete all splits of this transaction. Do you really want "
+"to continue?"
+msgstr "您将要删除此交易的全部拆分。是否确定要继续?"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:97
+msgid "Use this to create a new QIF import/export profile"
+msgstr "用它来创建一个新的QIF导入/导出配置"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:148
+#: dialogs/mymoneyqifprofileeditor.cpp:403 dialogs/rc.cpp:797
+msgid "QIF Profile Editor"
+msgstr "QIF配置文件编辑器"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:150
+msgid "QIF Profile Selector"
+msgstr "QIF配置选择器"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:236
+msgid "The default QIF profile"
+msgstr "缺省QIF配置"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:404
+#: dialogs/mymoneyqifprofileeditor.cpp:417
+msgid "Enter new profile name"
+msgstr "输入新配置名称"
+
+#: dialogs/mymoneyqifprofileeditor.cpp:436
+msgid "Do you really want to delete profile '%1'?"
+msgstr "您真的想删除配置“%1”吗?"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:38
+msgid "Select additional keys"
+msgstr "选择附加密钥"
+
+#: dialogs/kgpgkeyselectiondlg.cpp:48 widgets/rc.cpp:25
+msgid "User identification"
+msgstr "用户认证"
+
+#: dialogs/kendingbalancedlg.cpp:71
+msgid ""
+"Please enter the following fields with the information as you find them on "
+"your statement. Make sure to enter all values in <b>%1</b>."
+msgstr "请您将在对帐单中找到的信息填入相应的输入框。请确保完整填写了<b>%1</b>."
+
+#: dialogs/kendingbalancedlg.cpp:124
+#, c-format
+msgid "Last reconciled statement: %1"
+msgstr "最后一次完成的对帐单:%1"
+
+#: dialogs/kendingbalancedlg.cpp:437 dialogs/kendingbalancedlg.cpp:577
+#: dialogs/rc.cpp:137
+msgid "Adjustment transaction"
+msgstr "调整交易"
+
+#: dialogs/kendingbalancedlg.cpp:510
+msgid ""
+"KMyMoney has calculated the following amounts for interest and amortization "
+"according to recorded payments between %1 and %2."
+msgstr ""
+"按照已记录的从%1到%2的支付信息,KMyMoney已经完成了对利息和分期偿还额的计算。"
+
+#: dialogs/kbalancechartdlg.cpp:59
+#, c-format
+msgid "Balance of %1"
+msgstr "%1的余额"
+
+#: dialogs/kbalancechartdlg.cpp:70
+msgid "%1 Balance History"
+msgstr "%1 余额历史"
+
+#: dialogs/kmymoneysplittable.cpp:98
+msgid "Split Options"
+msgstr "分割选项"
+
+#: dialogs/kmymoneysplittable.cpp:99 dialogs/rc.cpp:731
+#: widgets/kmymoneypriceview.cpp:149
+msgid "Edit..."
+msgstr "编辑..."
+
+#: dialogs/kmymoneysplittable.cpp:100
+msgid "Duplicate"
+msgstr "复制"
+
+#: dialogs/kmymoneysplittable.cpp:102
+msgid "Delete ..."
+msgstr "删除..."
+
+#: dialogs/kmymoneysplittable.cpp:275
+msgid ""
+"_: Duplicate split\n"
+"CTRL+c"
+msgstr "CTRL+c"
+
+#: dialogs/kmymoneysplittable.cpp:562
+msgid "will be calculated"
+msgstr "将被计算"
+
+#: dialogs/kmymoneysplittable.cpp:648
+msgid ""
+"You are about to delete the selected split. Do you really want to continue?"
+msgstr "此操作将删除选择的交易分割。您确定要继续此操作吗?"
+
+#: dialogs/rc.cpp:1
+msgid "Account selection"
+msgstr "选择账户"
+
+#: dialogs/rc.cpp:3
+msgid "Account to import to"
+msgstr "要导入交易的账户:"
+
+#: dialogs/rc.cpp:6 dialogs/rc.cpp:170 widgets/rc.cpp:169
+msgid "Skip"
+msgstr "跳过"
+
+#: dialogs/rc.cpp:8
+msgid ""
+"Use this dialog to backup your data. \n"
+"\n"
+"Please make sure you have a disk inserted and that the drive is ready. Then "
+"choose the mount point from either the Choose button or by entering the path "
+"in the available box.\n"
+"\n"
+"Click OK to perform the backup. If your system does not use an automounter, "
+"make sure you mark the checkbox below to \"mount this directory before "
+"backing up.\""
+msgstr ""
+"使用此对话框备份您的数据。\n"
+"\n"
+"请首先确认您的移动硬盘已经插入电脑并已经被正确识别和加载。\n"
+"然后,请选择您要保存备份数据的加载点。\n"
+"按“确认”键进行备份。如果您的系统无法自动加载移动硬盘,请选中下面的复选框,让"
+"程序在备份前首先加载您指定的目录。"
+
+#: dialogs/rc.cpp:9
+msgid "Device options"
+msgstr "设备选项"
+
+#: dialogs/rc.cpp:10
+msgid ""
+"_: This is the mount point\n"
+"Mount Point:"
+msgstr "挂载点:"
+
+#: dialogs/rc.cpp:11
+msgid "Choose..."
+msgstr "选择..."
+
+#: dialogs/rc.cpp:12
+msgid "Mount this directory before backing up."
+msgstr "在备份前请先加载此目录。"
+
+#: dialogs/rc.cpp:15
+msgid "Reassign categories"
+msgstr "重新指定交易类别"
+
+#: dialogs/rc.cpp:16
+msgid ""
+"The transactions, schedules and budgets associated with the selected "
+"category need to be re-assigned to a different category before the selected "
+"category can be deleted. Please select a category from the list below."
+msgstr ""
+"在删除选中的交易类别前,需要先将与之相关的交易/交易计划/预算重新指定到别的交"
+"易类别。请从下面的列表中选择一个类别。"
+
+#: dialogs/rc.cpp:17
+msgid "Available categories:"
+msgstr "可用的交易类别:"
+
+#: dialogs/rc.cpp:21
+msgid ""
+"Please choose the type of import you wish to perform. A simple "
+"explanation\n"
+"of the import type is available at the bottom of the screen and is updated "
+"when\n"
+"you select an item from the choice box.\n"
+"\n"
+"Once you have chosen an import type please press the OK button."
+msgstr ""
+"请选择您需要的导入类型。在屏幕的下方有关于导入类型的简短介绍。\n"
+"当您选定了导入类型后,请按“确定”键继续。"
+
+#: dialogs/rc.cpp:23
+msgid "QIF"
+msgstr "QIF"
+
+#: dialogs/rc.cpp:24
+msgid "CSV"
+msgstr "CSV"
+
+#: dialogs/rc.cpp:25
+msgid "Some descripton"
+msgstr "详细内容"
+
+#: dialogs/rc.cpp:28
+msgid "Confirm Manual Enter"
+msgstr "确认手动输入"
+
+#: dialogs/rc.cpp:29
+msgid "The following changes have been made to the transaction data:"
+msgstr "已对交易数据进行下列修改:"
+
+#: dialogs/rc.cpp:30
+msgid "Please choose what you wish to do with the above changes"
+msgstr "请选择您想要对上述修改进行的操作"
+
+#: dialogs/rc.cpp:31
+msgid ""
+"Discard the changes and enter the original transaction into the register."
+msgstr "放弃修改,将原始交易输入账簿。"
+
+#: dialogs/rc.cpp:32
+msgid "Enter these new values this one time, for this occurence only."
+msgstr "一次性输入新的数值。仅对此次交易有效。"
+
+#: dialogs/rc.cpp:33
+msgid "Set all further occurences in this schedule to be these values."
+msgstr "将这些值应用到时间表中所有将来的事件。"
+
+#: dialogs/rc.cpp:36
+msgid "CSV Dialog"
+msgstr "CSV对话框"
+
+#: dialogs/rc.cpp:37
+msgid ""
+"CSV Dialog. Choose a file and then click on Run. You can view your "
+"progress at\n"
+"the bottom of the screen.\n"
+"\n"
+"You can cancel the process at any time by clicking on the Cancel button."
+msgstr ""
+"CSV对话框。选择一个文件并按“运行”键。您可以在窗口底部观察到处理进展情况。\n"
+"您可以随时按下“取消”键来终止处理。"
+
+#: dialogs/rc.cpp:38
+msgid "Choose the csv file:"
+msgstr "选择CSV文件。"
+
+#: dialogs/rc.cpp:39
+msgid "Browse"
+msgstr "浏览"
+
+#: dialogs/rc.cpp:40
+msgid "Between These Dates"
+msgstr "在这段日期之间"
+
+#: dialogs/rc.cpp:41 dialogs/rc.cpp:196
+msgid "Start on:"
+msgstr "起始日期:"
+
+#: dialogs/rc.cpp:42 dialogs/rc.cpp:195
+msgid "End on:"
+msgstr "结束日期:"
+
+#: dialogs/rc.cpp:43
+msgid "Run"
+msgstr "运行"
+
+#: dialogs/rc.cpp:44
+msgid "Progress Info"
+msgstr "进展情况"
+
+#: dialogs/rc.cpp:45
+msgid "Processing Account:"
+msgstr "正在处理账户:"
+
+#: dialogs/rc.cpp:47
+msgid "Processing Transaction:"
+msgstr "正在处理交易:"
+
+#: dialogs/rc.cpp:48
+msgid "0 of 0"
+msgstr "0/0"
+
+#: dialogs/rc.cpp:50
+msgid "Exchange Rate/Price Editor"
+msgstr "汇率/外汇价格编辑器"
+
+#: dialogs/rc.cpp:55
+msgid "Convert from"
+msgstr "从...转换"
+
+#: dialogs/rc.cpp:58
+msgid "Convert to"
+msgstr "转换为"
+
+#: dialogs/rc.cpp:61
+msgid "To amount"
+msgstr "到金额"
+
+#: dialogs/rc.cpp:62
+msgid "Exchange rate / Price"
+msgstr "汇率/价格"
+
+#: dialogs/rc.cpp:64
+msgid ""
+"xx\n"
+"xx"
+msgstr ""
+"xx\n"
+"xx"
+
+#: dialogs/rc.cpp:68
+msgid "Currencies"
+msgstr "货币"
+
+#: dialogs/rc.cpp:72
+msgid "real ID"
+msgstr "真实ID"
+
+#: dialogs/rc.cpp:73 dialogs/rc.cpp:722
+msgid "ID"
+msgstr "ID"
+
+#: dialogs/rc.cpp:74
+msgid "X"
+msgstr "X"
+
+#: dialogs/rc.cpp:76 dialogs/rc.cpp:459
+msgid "Online Source"
+msgstr "在线数据源"
+
+#: dialogs/rc.cpp:78 dialogs/rc.cpp:278 dialogs/rc.cpp:312 dialogs/rc.cpp:684
+msgid "F1"
+msgstr "F1"
+
+#: dialogs/rc.cpp:80
+msgid "If this button is not activated, select the base currency first."
+msgstr "如果此按钮未激活,请先选择基准货币。"
+
+#: dialogs/rc.cpp:81
+msgid ""
+"Press this button to close the dialog. If the button is not activated, "
+"select your base currency."
+msgstr "按下此按钮关闭对话框。如果此按钮未激活,请先选择基准货币。"
+
+#: dialogs/rc.cpp:82
+msgid "Edit Equity"
+msgstr "编辑权益"
+
+#: dialogs/rc.cpp:86 dialogs/rc.cpp:410
+msgid "Smallest fraction:"
+msgstr "最小份额"
+
+#: dialogs/rc.cpp:87 dialogs/rc.cpp:408 dialogs/rc.cpp:440
+msgid "1 /"
+msgstr "1 /"
+
+#: dialogs/rc.cpp:88 dialogs/rc.cpp:405
+msgid "Investment Type:"
+msgstr "投资类型"
+
+#: dialogs/rc.cpp:89 dialogs/rc.cpp:404
+msgid "Equity Name:"
+msgstr "权益项目名:"
+
+#: dialogs/rc.cpp:90 dialogs/rc.cpp:409
+msgid "Market Symbol:"
+msgstr "市场代号:"
+
+#: dialogs/rc.cpp:91
+msgid "Price History"
+msgstr "价格历史"
+
+#: dialogs/rc.cpp:97
+#, fuzzy
+msgid "Edit Scheduled transaction"
+msgstr "输入预定交易"
+
+#: dialogs/rc.cpp:98
+msgid "Schedule name:"
+msgstr "计划名称:"
+
+#: dialogs/rc.cpp:99
+msgid "Frequency:"
+msgstr "频率:"
+
+#: dialogs/rc.cpp:100
+msgid "Number of selected periods between entries"
+msgstr ""
+
+#: dialogs/rc.cpp:101
+msgid "Payment information"
+msgstr "支付信息"
+
+#: dialogs/rc.cpp:105 dialogs/rc.cpp:160 dialogs/rc.cpp:247 dialogs/rc.cpp:752
+#: widgets/register.cpp:569
+msgid "C"
+msgstr "C"
+
+#: dialogs/rc.cpp:113
+msgid "Do nothing"
+msgstr "不做任何事"
+
+#: dialogs/rc.cpp:116
+msgid "If this schedule occurs on the weekend:"
+msgstr "如果此定期交易发生在周末:"
+
+#: dialogs/rc.cpp:117
+msgid "The amount is an estimate because it varies for each payment"
+msgstr "该金额只是估计值,因为它每次交易时都有变化"
+
+#: dialogs/rc.cpp:118
+msgid "Enter this schedule into the register automatically when it is due"
+msgstr "该计划到期时,自动将里面的交易输入账簿"
+
+#: dialogs/rc.cpp:119
+msgid "This schedule will end at some time"
+msgstr "这个交易计划会在将来某个时候结束。"
+
+#: dialogs/rc.cpp:120
+msgid "Number of transactions remaining:"
+msgstr "尚未发生的交易数量:"
+
+#: dialogs/rc.cpp:121
+msgid "Date of final transaction:"
+msgstr "最后一次交易日期"
+
+#: dialogs/rc.cpp:125
+msgid "Reconciliation Wizard"
+msgstr "对帐向导"
+
+#: dialogs/rc.cpp:127
+msgid ""
+"Reconciling your account assures, that your recordings match those of your "
+"institution and that there are no mistakes on either side. You should "
+"reconcile your account whenever you receive a statement from your "
+"institution.\n"
+"\n"
+"All relevant information necessary for this process is usually printed on "
+"your statement.\n"
+"\n"
+"On the next page you will verify, that the starting and ending balance are "
+"matching those on your statement. If not, please modify the figures."
+msgstr ""
+"通过对您的账户进行对帐,确保您的记录与机构的记录一致,并且不存在任何错误。\n"
+"每当您收到金融机构的对帐单时,都应进行对帐。\n"
+"\n"
+"对帐需要的全部信息通常都可以在对帐单中找到。\n"
+"\n"
+"在下一页中,您需要核对期初与期末余额,确保它们与对帐单上的相应数额一致。 如果"
+"不一致,请对数字进行调整。"
+
+#: dialogs/rc.cpp:129
+msgid ""
+"KMyMoney calculates your loan payments automatically. The amounts can "
+"deviate from those calculated by the creditor. Therefore, you possibly have "
+"to adjust amortization, interest and other costs according to your "
+"statement.\n"
+"\n"
+"Please enter the following information found on your statement:"
+msgstr ""
+"KMyMoney可以自动计算您的贷款偿还额。但此金额有可能与贷方计算出的金额不完全一"
+"致。 如果有不一致的情况,您或许需要一句对帐单来调整分期付款额、利息等支出数"
+"据。\n"
+"\n"
+"请从您的对帐单中找到并填写下列数据:"
+
+#: dialogs/rc.cpp:130
+msgid "Ending date of statement"
+msgstr "对帐单结束日期"
+
+#: dialogs/rc.cpp:131
+msgid "Starting date of statement"
+msgstr "对帐单起始日期"
+
+#: dialogs/rc.cpp:132
+msgid "Verify payments"
+msgstr "验证支付"
+
+#: dialogs/rc.cpp:133 dialogs/rc.cpp:148 dialogs/rc.cpp:476 dialogs/rc.cpp:477
+#: dialogs/rc.cpp:508 dialogs/rc.cpp:513 dialogs/rc.cpp:518 dialogs/rc.cpp:532
+#: dialogs/rc.cpp:539 dialogs/rc.cpp:540 dialogs/rc.cpp:541 dialogs/rc.cpp:542
+#: dialogs/rc.cpp:543 dialogs/rc.cpp:552 dialogs/rc.cpp:553 dialogs/rc.cpp:554
+#: dialogs/rc.cpp:555 dialogs/rc.cpp:556 dialogs/rc.cpp:565 dialogs/rc.cpp:566
+#: dialogs/rc.cpp:567 dialogs/rc.cpp:568 dialogs/rc.cpp:569 dialogs/rc.cpp:578
+#: dialogs/rc.cpp:579 dialogs/rc.cpp:580 dialogs/rc.cpp:581 dialogs/rc.cpp:582
+#: dialogs/rc.cpp:591 dialogs/rc.cpp:592 dialogs/rc.cpp:593 dialogs/rc.cpp:594
+#: dialogs/rc.cpp:595 dialogs/rc.cpp:603 dialogs/rc.cpp:604 dialogs/rc.cpp:605
+#: dialogs/rc.cpp:606 dialogs/rc.cpp:607 dialogs/rc.cpp:618 dialogs/rc.cpp:619
+#: dialogs/rc.cpp:621 dialogs/rc.cpp:636 dialogs/rc.cpp:637 dialogs/rc.cpp:638
+#: dialogs/rc.cpp:639 dialogs/rc.cpp:640 dialogs/rc.cpp:641 dialogs/rc.cpp:651
+#: dialogs/rc.cpp:652 dialogs/rc.cpp:654 dialogs/rc.cpp:657 dialogs/rc.cpp:658
+#: dialogs/rc.cpp:659 dialogs/rc.cpp:664 dialogs/rc.cpp:665 dialogs/rc.cpp:668
+#: dialogs/rc.cpp:670 dialogs/rc.cpp:672 dialogs/rc.cpp:674 dialogs/rc.cpp:676
+#: dialogs/rc.cpp:678 dialogs/rc.cpp:681 dialogs/rc.cpp:823 widgets/rc.cpp:167
+msgid "1"
+msgstr "1"
+
+#: dialogs/rc.cpp:136
+msgid ""
+"If your statement shows different amounts, please cancel this dialog and "
+"correct the false transactions or correct the values in this dialog. In the "
+"later case, KMyMoney will create an adjustment transaction and add it to the "
+"ledger."
+msgstr ""
+"如果与您的对帐单中的金额不一致,请取消此对话框并更正错误交易;或者更正此对话框"
+"中的数值。 在后裔中情况下,KMyMoney会自动建立一个调整交易并自动将其加入到分类"
+"账中。"
+
+#: dialogs/rc.cpp:138
+msgid ""
+"In order to create the adjustment transaction, KMyMoney requires an account "
+"and possibly an interest category to assign the differences to. Please "
+"select an account and - if necessary - a category."
+msgstr ""
+"为了创建调整交易,KMyMoney指定一个账户和(可能的)利息类别来保存差额。请选择"
+"一个账户和(如果需要)一个利息类别。"
+
+#: dialogs/rc.cpp:140
+msgid "Interest-Category"
+msgstr "利息类别"
+
+#: dialogs/rc.cpp:141
+msgid "Restarting postponed reconciliation"
+msgstr "重新启动推迟的对帐操作。"
+
+#: dialogs/rc.cpp:142
+msgid ""
+"You have previously postponed the reconciliation of this account. If you "
+"have entered charges or interests the last time you started reconciling this "
+"account you can modify these in the ledger later on.\n"
+"\n"
+"It is important, that you continue with the same statement you used when you "
+"postponed the reconciliation.\n"
+"\n"
+"All information you have entered into this wizard will be shown and all "
+"transactions that you already cleared are marked with a 'C'."
+msgstr ""
+"您在之前推迟了此账户的对帐操作。如果您在上次开始对此账户进行对帐时输入了费用"
+"或者利息信息,您可以将来在分类账中修改它们。\n"
+"\n"
+"重要的是,您必须用上次推迟对帐时使用的同一张对帐单来继续此操作。\n"
+"\n"
+"您输入本向导的全部信息都会被显示,其中所有被您清算的交易前都会有一个'C'标记。"
+
+#: dialogs/rc.cpp:143
+msgid "Statement Information"
+msgstr "对帐单信息"
+
+#: dialogs/rc.cpp:144 dialogs/rc.cpp:315 dialogs/rc.cpp:317 dialogs/rc.cpp:320
+#: dialogs/rc.cpp:321 dialogs/rc.cpp:329 dialogs/rc.cpp:330 dialogs/rc.cpp:333
+#: dialogs/rc.cpp:334 dialogs/rc.cpp:335 dialogs/rc.cpp:336 dialogs/rc.cpp:366
+msgid "x"
+msgstr "x"
+
+#: dialogs/rc.cpp:145
+msgid "Statement date:"
+msgstr "对帐单日期:"
+
+#: dialogs/rc.cpp:146
+msgid "Starting balance of this statement:"
+msgstr "期初余额"
+
+#: dialogs/rc.cpp:147
+msgid "Ending balance of this statement:"
+msgstr "期末余额"
+
+#: dialogs/rc.cpp:149
+msgid "Interest / Charges"
+msgstr "利息/费用"
+
+#: dialogs/rc.cpp:150
+#, fuzzy
+msgid ""
+"If necessary, enter information about interest or charges here. KMyMoney "
+"will create transactions and clear them directly for you."
+msgstr ""
+"如果需要,请在此处填入利息或费用的信息。KMyMoney会自动生成相关记录并直接对其"
+"清算。"
+
+#: dialogs/rc.cpp:153
+msgid "Charges"
+msgstr "费用"
+
+#: dialogs/rc.cpp:154
+msgid "Enter Schedule"
+msgstr "输入交易计划"
+
+#: dialogs/rc.cpp:155
+msgid "Schedule Details"
+msgstr "定期交易明细"
+
+#: dialogs/rc.cpp:156 dialogs/rc.cpp:348 dialogs/rc.cpp:389 widgets/rc.cpp:164
+msgid "Name:"
+msgstr "名称:"
+
+#: dialogs/rc.cpp:157 dialogs/rc.cpp:351 widgets/rc.cpp:165
+msgid "Type:"
+msgstr "类型:"
+
+#: dialogs/rc.cpp:168
+msgid "Enter"
+msgstr "输入"
+
+#: dialogs/rc.cpp:169
+msgid ""
+"Enter the transaction and advance the next due date of this schedule to the "
+"next payment date."
+msgstr "输入交易,并将此交易计划的到期日前进到下次支付的时间点。"
+
+#: dialogs/rc.cpp:171
+msgid ""
+"Do not enter the transaction but advance the next due date of this schedule "
+"to the next payment date."
+msgstr "不输入交易,但将此交易计划的到期日前进到下次支付的时间点。"
+
+#: dialogs/rc.cpp:172
+msgid "Ignore"
+msgstr "忽略"
+
+#: dialogs/rc.cpp:173
+msgid ""
+"Do not enter or skip payments for this schedule but continue with the next "
+"schedule."
+msgstr "不输入或跳过此交易计划的支付,继续处理下一项计划。"
+
+#: dialogs/rc.cpp:175
+msgid "Cancel processing of schedule entry."
+msgstr "取消计划交易项的处理"
+
+#: dialogs/rc.cpp:176
+msgid "Update Stock and Currency Prices"
+msgstr "更新股票和货币信息。"
+
+#: dialogs/rc.cpp:177
+msgid "List of known Equities, and the date they were last updated on."
+msgstr "已经资产列表,和它们最近一次更新日期。"
+
+#: dialogs/rc.cpp:179
+msgid "Update All"
+msgstr "全部更新"
+
+#: dialogs/rc.cpp:180
+msgid "Update Selected"
+msgstr "更新被选中的项目"
+
+#: dialogs/rc.cpp:181
+msgid "Status:"
+msgstr "状态:"
+
+#: dialogs/rc.cpp:184
+msgid "QIF Export"
+msgstr "导出成QIF格式"
+
+#: dialogs/rc.cpp:185
+msgid ""
+"From this dialog you are able to export transactions to a quicken compatible "
+"file, (known as a QIF file, because of the extension). Please enter the "
+"path to the QIF file or select it by clicking on the Browse button.\n"
+"\n"
+"You can choose the file's path, the account and the format of the QIF file "
+"(profile). Choose Account to export all the transactions between the "
+"specified dates or just categories. You can also limit the transactions "
+"that are exported by start and ending date. Once you have pressed the "
+"Export button a message box will appear when the export has completed "
+"detailing how many transactions, categories and payees were exported."
+msgstr ""
+"使用对话框,您可以将交易导出为兼容Quicken的文件(QIF格式文件,因其文件名后缀"
+"为.QIF而得名)。请输入QIF文件的路径(或按“浏览”键打开选择文件对话框来选择路"
+"径)\n"
+"\n"
+"你可以选择文件路径,要导出的账户和QIF文件的格式。您也可以通过指定起止时间和交"
+"易类别来限制导出的交易数据范围。当您按下“导出”键后,会有一个对话框来提示您将"
+"会有多少交易、交易类别和收款人被导出。"
+
+#: dialogs/rc.cpp:186
+msgid "File to export to:"
+msgstr "导出目标文件:"
+
+#: dialogs/rc.cpp:188
+msgid "Account to export"
+msgstr "要导出的账户:"
+
+#: dialogs/rc.cpp:189 dialogs/rc.cpp:297
+msgid "QIF Profile"
+msgstr "QIF格式配置文件"
+
+#: dialogs/rc.cpp:190 dialogs/rc.cpp:298 dialogs/rc.cpp:362
+#: widgets/kmymoneypriceview.cpp:145
+msgid "New..."
+msgstr "新建..."
+
+#: dialogs/rc.cpp:191
+msgid "Contents to Export"
+msgstr "要导出的内容"
+
+#: dialogs/rc.cpp:194
+msgid "Date Range"
+msgstr "日期范围"
+
+#: dialogs/rc.cpp:199
+msgid "Search transactions"
+msgstr "搜索交易"
+
+#: dialogs/rc.cpp:200
+msgid "Criteria"
+msgstr "搜索标准"
+
+#: dialogs/rc.cpp:201
+msgid "Define your search criteria"
+msgstr "定义搜索匹配依据"
+
+#: dialogs/kfindtransactiondlg.cpp:169 dialogs/rc.cpp:202
+msgid "Text"
+msgstr "文本"
+
+#: dialogs/rc.cpp:203
+#, fuzzy
+msgid "Contains"
+msgstr "基本花销"
+
+#: dialogs/rc.cpp:204
+#, fuzzy
+msgid "Does not contain"
+msgstr "不做任何事"
+
+#: dialogs/rc.cpp:205
+msgid "Treat text as regular expression"
+msgstr "使用正则表达式"
+
+#: dialogs/rc.cpp:206
+msgid "Case sensitive"
+msgstr "不区分大小写"
+
+#: dialogs/rc.cpp:209
+msgid "Range"
+msgstr "范围"
+
+#: dialogs/rc.cpp:210
+msgid ""
+"_: To (Date)\n"
+"To"
+msgstr "到"
+
+#: dialogs/rc.cpp:211
+msgid ""
+"_: From (Date)\n"
+"From"
+msgstr "从"
+
+#: dialogs/rc.cpp:213
+msgid "Search this amount"
+msgstr "搜索此金额"
+
+#: dialogs/rc.cpp:214
+msgid "Search amount in the range"
+msgstr "搜索在此范围内的金额"
+
+#: dialogs/rc.cpp:215
+msgid ""
+"_: to (amount)\n"
+"to"
+msgstr "到"
+
+#: dialogs/rc.cpp:216
+msgid ""
+"_: from (amount)\n"
+"from"
+msgstr "从"
+
+#: dialogs/rc.cpp:220
+msgid "Select transactions without payees"
+msgstr "选择无收款人的交易"
+
+#: dialogs/rc.cpp:221
+msgid "Select all"
+msgstr "选择全部"
+
+#: dialogs/rc.cpp:222
+msgid "Select none"
+msgstr "全都不选择"
+
+#: dialogs/rc.cpp:224
+msgid "Validity"
+msgstr "有效性"
+
+#: dialogs/rc.cpp:226
+msgid "All states"
+msgstr "全部状态"
+
+#: dialogs/rc.cpp:230
+msgid "All types"
+msgstr "所有类型"
+
+#: dialogs/rc.cpp:234
+msgid "Any transaction"
+msgstr "任意交易"
+
+#: dialogs/rc.cpp:235
+msgid "Valid transaction"
+msgstr "有效交易"
+
+#: dialogs/rc.cpp:236
+msgid "Invalid transaction"
+msgstr "无效交易"
+
+#: dialogs/rc.cpp:237
+msgid "State"
+msgstr "状态"
+
+#: dialogs/rc.cpp:238
+msgid "Search this number"
+msgstr "搜索该帐号"
+
+#: dialogs/rc.cpp:239
+msgid "Search number in range"
+msgstr "搜索在此范围内的帐号"
+
+#: dialogs/rc.cpp:240
+msgid ""
+"_: to (number)\n"
+"to"
+msgstr "到"
+
+#: dialogs/rc.cpp:241
+msgid ""
+"_: from (number)\n"
+"from"
+msgstr "从"
+
+#: dialogs/rc.cpp:242
+msgid "text"
+msgstr "文本"
+
+#: dialogs/rc.cpp:243
+msgid "warning"
+msgstr "警告"
+
+#: dialogs/rc.cpp:244
+msgid "Result"
+msgstr "结果"
+
+#: dialogs/rc.cpp:254
+msgid "F"
+msgstr "F"
+
+#: dialogs/rc.cpp:257 dialogs/rc.cpp:844
+msgid "&Reset"
+msgstr "重置(&R)"
+
+#: dialogs/rc.cpp:258
+#, fuzzy
+msgid "&Find"
+msgstr "完成(&F)"
+
+#: dialogs/rc.cpp:259
+msgid "GnuCash Import Options"
+msgstr "GnuCash格式导入选项"
+
+#: dialogs/rc.cpp:260
+msgid "Use 'Help' for more information on these options"
+msgstr "按下“Help”键以获得关于更多关于这些选项的信息"
+
+#: dialogs/rc.cpp:261
+msgid "Investment Handling"
+msgstr "投资处理"
+
+#: dialogs/rc.cpp:262
+msgid "One investment account for each stock"
+msgstr "每支股票一个投资账户"
+
+#: dialogs/rc.cpp:263
+msgid "One investment account for all stocks"
+msgstr "所有股票一个投资账户"
+
+#: dialogs/rc.cpp:264
+msgid "Prompt for an investment account for each stock"
+msgstr "为每支股票提示建立一个投资账户"
+
+#: dialogs/rc.cpp:265
+msgid "Online price quotes"
+msgstr "在线价格报价"
+
+#: dialogs/rc.cpp:266
+msgid "Use Finance::Quote for share price quotes"
+msgstr "为共享价格报价使用 Finance::Quote "
+
+#: dialogs/rc.cpp:267
+msgid "Scheduled Transactions"
+msgstr "定期交易"
+
+#: dialogs/rc.cpp:268
+msgid "Drop suspect scheduled transactions"
+msgstr "丢弃可疑的定期交易"
+
+#: dialogs/rc.cpp:269
+msgid "Decoding option"
+msgstr "解码选项"
+
+#: dialogs/rc.cpp:270
+msgid "Decode using"
+msgstr "使用...解码"
+
+#: dialogs/rc.cpp:271
+#, fuzzy
+msgid "Transaction Notes option"
+msgstr "交易选项"
+
+#: dialogs/rc.cpp:272
+#, fuzzy
+msgid "Use transaction notes on non-split transactions"
+msgstr "在新交易记录的序号栏目中插入交易类型"
+
+#: dialogs/rc.cpp:273
+msgid "Debug Options"
+msgstr "调试选项"
+
+#: dialogs/rc.cpp:274
+msgid "General debug data"
+msgstr "总体调试数据"
+
+#: dialogs/rc.cpp:275
+msgid "Display XML data"
+msgstr "显示XML数据"
+
+#: dialogs/rc.cpp:276
+msgid "Anonymize data"
+msgstr "匿名数据"
+
+#: dialogs/rc.cpp:281
+msgid "Online Quotes - Select price source"
+msgstr "在线报价──选择价格来源"
+
+#: dialogs/rc.cpp:284
+msgid ""
+"This price source is not known to KMyMoney. Please select an option below."
+msgstr "KMyMoney不认识这个价格来源。请选择下面的选项。"
+
+#: dialogs/rc.cpp:285
+msgid "Do not perform online quotes for this investment"
+msgstr "不对这项投资使用在线报价"
+
+#: dialogs/rc.cpp:286
+msgid "Select a known KMyMoney source from the list below"
+msgstr "从下面的列表中选择一个已知的KMyMoney报价源"
+
+#: dialogs/rc.cpp:287
+msgid ""
+"Use the following name for the price source.\n"
+"(Click Help for further information.)"
+msgstr ""
+"对这个价格来源使用下面的名称。\n"
+"(点击“帮助”以获取更多信息)"
+
+#: dialogs/rc.cpp:288
+msgid "Always use this selection for this price source."
+msgstr "对这个价格来源始终使用此选择。"
+
+#: dialogs/rc.cpp:289
+msgid "QIF Import"
+msgstr "导入QIF格式文件"
+
+#: dialogs/rc.cpp:290
+msgid ""
+"From this dialog you are able to import transactions from a Quicken<b>&trade;"
+"</b> compatible file, (known as a QIF file, because of the extension).<p>\n"
+"\n"
+"Please enter the path to the QIF file or select it by clicking on the Browse "
+"button. Once you have the file's path press the Import button and KMyMoney "
+"will import all the transactions, categories and payees it finds."
+msgstr ""
+"使用对话框,您可以从兼容Quicken的文件(QIF格式文件,因其文件名后缀为.QIF而得"
+"名)中导入交易。 \n"
+"\n"
+"请输入QIF文件的路径(或按“浏览”键打开选择文件对话框来选择路径)\n"
+"之后请点击“导入”按钮,KMyMoney会从指定的文件中导入所有交易、交易类别和收款人"
+"信息。"
+
+#: dialogs/rc.cpp:291
+msgid "QIF File to Import:"
+msgstr "要导入的QIF文件:"
+
+#: dialogs/rc.cpp:292
+msgid "Import options"
+msgstr "导入选项"
+
+#: dialogs/rc.cpp:293
+#, fuzzy
+msgid "Bank statement"
+msgstr "对帐单:"
+
+#: dialogs/rc.cpp:294
+#, fuzzy
+msgid "Other application"
+msgstr "利息计算"
+
+#: dialogs/rc.cpp:295
+msgid ""
+"Select <b>Bank statement</b> turns on automatic category matching which is "
+"turned off in case of <b>Historic data</b>. Use the latter if you import "
+"files from other Personal Finance Management software."
+msgstr ""
+
+#: dialogs/rc.cpp:296
+#, fuzzy
+msgid "Source of QIF"
+msgstr "来源"
+
+#: dialogs/rc.cpp:302
+msgid "Verify Import"
+msgstr "确认导入"
+
+#: dialogs/rc.cpp:304
+msgid "Ok"
+msgstr "确定"
+
+#: dialogs/rc.cpp:306
+msgid "MyDialog"
+msgstr "我的对话框"
+
+#: dialogs/rc.cpp:310
+msgid "File Information"
+msgstr "文件信息"
+
+#: dialogs/rc.cpp:316
+msgid "Last modified on"
+msgstr "上次修改于"
+
+#: dialogs/rc.cpp:319
+msgid "Base currency"
+msgstr "基准货币"
+
+#: dialogs/rc.cpp:322
+msgid "Created on"
+msgstr "创建于"
+
+#: dialogs/rc.cpp:325
+msgid "Accounts/Categories"
+msgstr "账户/交易类别"
+
+#: dialogs/rc.cpp:328
+msgid "Closed"
+msgstr "已关闭"
+
+#: dialogs/rc.cpp:331
+msgid "Prices"
+msgstr "价格"
+
+#: dialogs/rc.cpp:337
+#, fuzzy
+msgid "Splits"
+msgstr "拆分"
+
+#: dialogs/rc.cpp:338
+msgid "Price Editor"
+msgstr "价格编辑器"
+
+#: dialogs/rc.cpp:339
+msgid "Show all stored prices"
+msgstr "显示全部保存的价格"
+
+#: dialogs/rc.cpp:343
+#, fuzzy
+msgid "Delete Range..."
+msgstr "区域删除..."
+
+#: dialogs/rc.cpp:346
+msgid "New Account Dialog"
+msgstr "新账户对话框"
+
+#: dialogs/rc.cpp:349
+msgid "Opening information"
+msgstr "开户信息"
+
+#: dialogs/rc.cpp:350
+msgid "Currency:"
+msgstr "货币:"
+
+#: dialogs/rc.cpp:352 dialogs/rc.cpp:793
+msgid "Date:"
+msgstr "日期:"
+
+#: dialogs/rc.cpp:353
+msgid "Balance:"
+msgstr "余额:"
+
+#: dialogs/rc.cpp:355
+msgid "Last check number:"
+msgstr "最后一张支票号码:"
+
+#: dialogs/rc.cpp:356
+msgid "Notes:"
+msgstr "注释:"
+
+#: dialogs/rc.cpp:357
+msgid "No auto-VAT-assignment"
+msgstr "不自动指定增值税"
+
+#: dialogs/rc.cpp:358 dialogs/rc.cpp:441
+msgid "Price entry"
+msgstr "价格项"
+
+#: dialogs/rc.cpp:359
+msgid "Preferred Account"
+msgstr "设为偏好账户"
+
+#: dialogs/rc.cpp:363
+msgid "Number:"
+msgstr "帐号:"
+
+#: dialogs/rc.cpp:364 dialogs/rc.cpp:395
+msgid "BIC"
+msgstr "BIC"
+
+#: dialogs/rc.cpp:367
+msgid "Hierarchy"
+msgstr "等级"
+
+#: dialogs/rc.cpp:368
+msgid "Subaccount"
+msgstr "子账户"
+
+#: dialogs/rc.cpp:369
+msgid "Limits"
+msgstr "限额"
+
+#: dialogs/rc.cpp:370
+msgid ""
+"This page allows to setup certain limits. KMyMoney will warn you when the "
+"account balance reaches a limit."
+msgstr ""
+"在本页中您可以设置一些限额。当账户余额到达某一限额时,KMyMoney将向您发出警"
+"告。"
+
+#: dialogs/rc.cpp:372
+msgid "Absolute limit"
+msgstr "绝对限额"
+
+#: dialogs/rc.cpp:373
+msgid "Maximum credit limit"
+msgstr "最大信用限额"
+
+#: dialogs/rc.cpp:374
+msgid "Minimum balance"
+msgstr "最小余额"
+
+#: dialogs/rc.cpp:375
+msgid "Early warning"
+msgstr "早期报警"
+
+#: dialogs/rc.cpp:377
+msgid "VAT details"
+msgstr "增值税明细"
+
+#: dialogs/rc.cpp:378
+msgid "VAT category"
+msgstr "增值税类别"
+
+#: dialogs/rc.cpp:379
+msgid "VAT percentage"
+msgstr "增值税百分比"
+
+#: dialogs/rc.cpp:380
+msgid "Enable auto VAT assignment"
+msgstr "打开自动指定增值税"
+
+#: dialogs/rc.cpp:381
+msgid "Amount entered"
+msgstr "输入的金额"
+
+#: dialogs/rc.cpp:382
+msgid "Gross amount"
+msgstr "毛金额"
+
+#: dialogs/rc.cpp:383
+msgid "Net amount"
+msgstr "净金额"
+
+#: dialogs/rc.cpp:384
+msgid "Include on Tax Reports"
+msgstr "包含到税务报表内"
+
+#: dialogs/rc.cpp:387
+msgid "New Institution Dialog"
+msgstr "新建金融机构对话框"
+
+#: dialogs/rc.cpp:388
+msgid "Institution Details"
+msgstr "机构详细信息"
+
+#: dialogs/rc.cpp:390
+msgid "City:"
+msgstr "城市:"
+
+#: dialogs/rc.cpp:394
+msgid "Routing Number:"
+msgstr "区号:"
+
+#: dialogs/rc.cpp:398
+msgid "New Budget"
+msgstr "新建预算"
+
+#: dialogs/rc.cpp:403
+msgid "New Equity"
+msgstr "新建权益"
+
+#: dialogs/rc.cpp:406 dialogs/rc.cpp:407
+msgid "Trading Symbol of the stock or mutual fund, not required."
+msgstr "此股票或共同基金的交易代号。可不填"
+
+#: dialogs/rc.cpp:414 dialogs/rc.cpp:415
+msgid "Name of the company, or mutual fund."
+msgstr "公司或共同基金名称"
+
+#: dialogs/rc.cpp:418
+msgid "New File Dialog"
+msgstr "新建文件对话框"
+
+#: dialogs/rc.cpp:419
+msgid ""
+"Use this dialog to enter personal information about yourself.\n"
+"\n"
+"All information is optional and is provided to personalize\n"
+"your KMyMoney file."
+msgstr ""
+"使用此对话框来输入关于您本人的信息。\n"
+"\n"
+"所有的信息都可以不填,它们仅用来个性化您自己的KMyMoney文件。"
+
+#: dialogs/rc.cpp:430
+msgid "New Investment wizard"
+msgstr "新投资向导"
+
+#: dialogs/rc.cpp:431
+msgid "Investment Type"
+msgstr "投资类型"
+
+#: dialogs/rc.cpp:432
+#, fuzzy
+msgid "This wizard allows you to create a new investment."
+msgstr "在本页可以选择一个父账户。"
+
+#: dialogs/rc.cpp:433
+#, fuzzy
+msgid ""
+"The first step in this process requires to select the type of investment. "
+"The following steps collect more details about the investment from you."
+msgstr ""
+"此向导允许您创建新一项新的投资。\n"
+"\n"
+"第一步,您需要选择投资的类型。 在接下来的步骤中,向导会引导您填写关于此项投资"
+"的更多详细内容。"
+
+#: dialogs/rc.cpp:434
+msgid "Type of investment"
+msgstr "投资的类型"
+
+#: dialogs/rc.cpp:438
+msgid "Investment details"
+msgstr "投资详细信息"
+
+#: dialogs/rc.cpp:439
+msgid ""
+"Enter the details below and click <b>Next</b> to continue entering the "
+"online update details."
+msgstr "填写下面的详细信息,之后按“Next”键来继续填写在线更新的详细信息。"
+
+#: dialogs/rc.cpp:442 dialogs/rc.cpp:728
+msgid "Fraction"
+msgstr "份额"
+
+#: dialogs/rc.cpp:443
+msgid "Trading Currency"
+msgstr "交易货币类型"
+
+#: dialogs/rc.cpp:444
+msgid "Full name"
+msgstr "全称"
+
+#: dialogs/rc.cpp:445
+msgid "AMEX"
+msgstr "AMEX"
+
+#: dialogs/rc.cpp:446
+msgid "EUREX"
+msgstr "EUREX"
+
+#: dialogs/rc.cpp:447
+msgid "FUND"
+msgstr "FUND"
+
+#: dialogs/rc.cpp:448
+msgid "NASDAQ"
+msgstr "NASDAQ"
+
+#: dialogs/rc.cpp:449
+msgid "NYSE"
+msgstr "NYSE"
+
+#: dialogs/rc.cpp:450
+msgid "XETRA"
+msgstr "XETRA"
+
+#: dialogs/rc.cpp:451
+msgid "Trading symbol"
+msgstr "交易代码"
+
+#: dialogs/rc.cpp:452
+msgid "Identification"
+msgstr "身份认证"
+
+#: dialogs/rc.cpp:453
+msgid "Enter the ticker symbol (e.g. RHAT)."
+msgstr "请输入股票代码(如RHT等)。"
+
+#: dialogs/rc.cpp:454
+msgid "Enter the CUSIP/ISIN/WKN identification number here"
+msgstr "在这里填入CUSIP/ISIN/WKN身份认证码"
+
+#: dialogs/rc.cpp:455
+msgid "Trading market"
+msgstr "交易市场"
+
+#: dialogs/rc.cpp:456
+msgid "Online Update"
+msgstr "在线更新"
+
+#: dialogs/rc.cpp:457
+msgid ""
+"Select an online source and click <b>Finish</b> to store the investment "
+"data. If you don't want to use online updates, just leave the data as is."
+msgstr ""
+"选择一个在线更新源并按“结束”键保存此投资信息。如果您不需要使用在线更新,那么"
+"请保持下列信息原样不动。"
+
+#: dialogs/rc.cpp:458
+msgid "Use Finance::Quote"
+msgstr "使用 Finance::Quote"
+
+#: dialogs/rc.cpp:460
+msgid "Factor"
+msgstr "代理商"
+
+#: dialogs/rc.cpp:461
+msgid "New Loan Wizard"
+msgstr "新建贷款账户向导"
+
+#: dialogs/rc.cpp:462
+msgid "New Loan Account Wizard"
+msgstr "新建贷款账户向导 "
+
+#: dialogs/rc.cpp:463
+msgid ""
+"\n"
+"Welcome to the New Loan Account Wizard which will guide you through the "
+"creation of a new loan e.g. for your home, your car or any other loan that "
+"you pay or gain interest for.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"欢迎使用新建贷款账户向导。 它将会引导您创建一个新的贷款账户,如您的房贷、车贷"
+"或其它任意需要您付(或者获得)利息的贷款。 \n"
+"\n"
+"请确认您手上已经得到了关于此贷款的详细信息。通常您可以从您的联系人或最近一次"
+"的对帐单中得到有关信息。"
+
+#: dialogs/rc.cpp:464
+msgid "Edit Loan Account Wizard"
+msgstr "编辑贷款账户向导。"
+
+#: dialogs/rc.cpp:465
+msgid ""
+"\n"
+"Welcome to the Edit Loan Account Wizard. Please use this wizard to modify "
+"information about your loan account.\n"
+"\n"
+"Please make sure that you have the relevant information handy. You usually "
+"get the information out of your contract and the last statement."
+msgstr ""
+"\n"
+"欢迎使用编辑贷款账户向导。 使用它,您可以修改贷款账户中的信息 \n"
+"\n"
+"请确认您手上已经得到了关于此贷款的详细信息。通常您可以从您的联系人或最近一次"
+"的对帐单中得到有关信息。"
+
+#: dialogs/rc.cpp:467
+msgid ""
+"\n"
+"In the first step, KMyMoney will ask you some general information about the "
+"loan account to be created."
+msgstr ""
+"\n"
+"第一步,KMyMoney将会向您询问关于此贷款的总体信息"
+
+#: dialogs/rc.cpp:468 dialogs/rc.cpp:522 dialogs/rc.cpp:610
+msgid "1. General Information"
+msgstr "1.总体信息"
+
+#: dialogs/rc.cpp:469
+msgid ""
+"\n"
+"2. Calculate Loan\n"
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"2.计算贷款\n"
+"\n"
+"3.支付计划"
+
+#: dialogs/rc.cpp:470
+msgid "Edit selection"
+msgstr "编辑选择项"
+
+#: dialogs/rc.cpp:471
+msgid ""
+"\n"
+"Please select, which data of the loan you want to modify."
+msgstr ""
+"\n"
+"请选择您想要修改的贷款信息。"
+
+#: dialogs/rc.cpp:472
+msgid "Modify the interest rate"
+msgstr "修改利率"
+
+#: dialogs/rc.cpp:473
+msgid "Modify additional fees"
+msgstr "修改附加费用"
+
+#: dialogs/rc.cpp:474
+msgid "Modify other loan information"
+msgstr "修改其它贷款信息"
+
+#: dialogs/rc.cpp:475
+msgid "Effective date"
+msgstr "生效日期"
+
+#: dialogs/rc.cpp:478
+msgid "When should the changes become active?"
+msgstr "这些修改应该在什么时候生效?"
+
+#: dialogs/rc.cpp:479
+msgid "Lending or borrowing money"
+msgstr "借出还是借入"
+
+#: dialogs/rc.cpp:480
+msgid ""
+"\n"
+"Do you borrow or lend money?"
+msgstr ""
+"\n"
+"您是向外借出金钱,还是从外边借入金钱?"
+
+#: dialogs/rc.cpp:483
+msgid "Name of the loan"
+msgstr "贷款名称"
+
+#: dialogs/rc.cpp:484
+msgid ""
+"\n"
+"How do you want to call this loan? Examples for names are 'car loan', "
+"'school loan', 'home owner loan'."
+msgstr ""
+"\n"
+"您希望如何称呼此项贷款?例如,可以叫“车贷”、“房贷”、“助学贷款”等等。"
+
+#: dialogs/rc.cpp:486
+msgid "TextLabel6"
+msgstr "TextLabel6"
+
+#: dialogs/rc.cpp:487
+msgid "TextLabel7"
+msgstr "TextLabel7"
+
+#: dialogs/rc.cpp:488
+msgid "Type of interest"
+msgstr "利息类型"
+
+#: dialogs/rc.cpp:489
+msgid ""
+"\n"
+"Is the interest of this loan fixed over a period of time or is it adapted "
+"from time to time? If the interest rate changes during the amortization "
+"phase of the loan you should choose the option 'variable interest rate'."
+msgstr ""
+"\n"
+"此贷款的利率是在一段时期内固定不变,还是随着时间不断变化? 如果利率在分期付款"
+"时会发生变化,您应该选择选项“变化利率”。"
+
+#: dialogs/rc.cpp:490
+msgid "Fixed interest rate"
+msgstr "固定利率"
+
+#: dialogs/rc.cpp:491
+msgid "Variable interest rate"
+msgstr "变化利率"
+
+#: dialogs/rc.cpp:492
+msgid "Payments?"
+msgstr "支付计划?"
+
+#: dialogs/rc.cpp:493
+msgid ""
+"\n"
+"Were there any payments for this loan whether they are entered into KMyMoney "
+"or not?"
+msgstr ""
+"\n"
+"偿还此贷款的支付交易计划是否已经输入KMyMoney了?"
+
+#: dialogs/rc.cpp:494
+msgid "No, no payments were made yet."
+msgstr "尚未输入支付计划"
+
+#: dialogs/rc.cpp:495
+msgid "Yes, payments were made."
+msgstr "支付计划已输入"
+
+#: dialogs/rc.cpp:496
+msgid ""
+"Note: Payments made to obtain the loan (e.g. Dissagio) are not considered as "
+"payments in this context."
+msgstr "注意:这里并不考虑获取此贷款的交易。"
+
+#: dialogs/rc.cpp:497
+msgid "Recording payments?"
+msgstr "记录支付计划?"
+
+#: dialogs/rc.cpp:498
+msgid ""
+"\n"
+"Do you want to record all payments of this loan with KMyMoney?"
+msgstr ""
+"\n"
+"您让KMyMoney记录关于此贷款的全部支付信息吗?"
+
+#: dialogs/rc.cpp:499
+msgid "Yes, record all payments."
+msgstr "是的,记录全部支付信息。"
+
+#: dialogs/rc.cpp:500
+msgid "No, only record payments since the beginning of this year."
+msgstr "否,只记录从今年开始的支付信息。"
+
+#: dialogs/rc.cpp:501
+msgid "Date of next interest change"
+msgstr "下一次利率改变日期"
+
+#: dialogs/rc.cpp:502
+msgid ""
+"\n"
+"Select the date when the interest rate for this loan will be modified and "
+"the frequency of the future changes."
+msgstr ""
+"\n"
+"选择下一次此贷款利率变化的日期,和其在将来发生变化的频率。"
+
+#: dialogs/rc.cpp:503
+msgid "Next interest change on"
+msgstr "下次利率变化发生在"
+
+#: dialogs/rc.cpp:504
+msgid "Time until next change"
+msgstr "下次变化前的时间"
+
+#: dialogs/rc.cpp:506 dialogs/rc.cpp:571
+msgid ""
+"\n"
+"Please enter the amount you pay for principal and interest or leave the "
+"field empty to calculate it."
+msgstr ""
+"\n"
+"请输入您的本金和利息金额,或者留为空白以让KMymoney自动计算它们。"
+
+#: dialogs/rc.cpp:507
+msgid "Current amount"
+msgstr "当前金额"
+
+#: dialogs/rc.cpp:510
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the amount for principal and interest then enter "
+"it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"KMymoney或者计算新的利率,或者计算本金和利息金额。如果您知道本金和利息的金"
+"额,请填写它们。\n"
+"\n"
+"如果您想让KMymoney自动计算,请将它们留为空白。"
+
+#: dialogs/rc.cpp:512 dialogs/rc.cpp:545
+msgid ""
+"\n"
+"Please enter the interest rate or leave the field empty to calculate it."
+msgstr ""
+"\n"
+"请输入利率,或者留空让KMymoney自动计算。"
+
+#: dialogs/rc.cpp:514
+msgid "Current rate"
+msgstr "当前利率"
+
+#: dialogs/rc.cpp:516
+msgid ""
+"KMyMoney either calculates the new interest rate or the amount for principal "
+"and interest. If you know the interest rate then enter it here.\n"
+"\n"
+"If KMyMoney should calculate this value for you, then leave the field blank."
+msgstr ""
+"KMymoney或者计算新的利率,或者计算本金和利息金额。如果您知道利率,请填写"
+"它。\n"
+"\n"
+"如果您想让KMymoney自动计算,请将它留为空白。"
+
+#: dialogs/rc.cpp:517
+msgid "Date of first payment"
+msgstr "第一次支付日期。"
+
+#: dialogs/rc.cpp:520
+msgid "Calculate Loan"
+msgstr "计算贷款"
+
+#: dialogs/rc.cpp:521
+msgid ""
+"\n"
+"You have successfully entered the general information about your loan. Next, "
+"KMyMoney needs some information about the calculation of the loan."
+msgstr ""
+"\n"
+"您已经成功输入了关于此贷款的总体信息。 接下来,KMymoney还需要一些信息来对此贷"
+"款进行计算。"
+
+#: dialogs/rc.cpp:523 dialogs/rc.cpp:611
+msgid ""
+"\n"
+"2. Calculate Loan"
+msgstr ""
+"\n"
+"2.计算贷款"
+
+#: dialogs/rc.cpp:524 dialogs/rc.cpp:612
+msgid ""
+"\n"
+"3. Payments"
+msgstr ""
+"\n"
+"3.支付计划"
+
+#: dialogs/rc.cpp:526
+msgid ""
+"\n"
+"How often will there be payments made to this loan?"
+msgstr ""
+"\n"
+"每隔多长时间需要为偿还此贷款进行支付?"
+
+#: dialogs/rc.cpp:527
+msgid "Interest calculation"
+msgstr "利息计算"
+
+#: dialogs/rc.cpp:528
+msgid ""
+"\n"
+"When does the actual interest rate get calculated?"
+msgstr ""
+"\n"
+"什么时候计算实际利率?"
+
+#: dialogs/rc.cpp:529
+msgid "When the payment is received."
+msgstr "收到此支付时"
+
+#: dialogs/rc.cpp:530
+msgid "When the payment is due."
+msgstr "此支付到期时"
+
+#: dialogs/rc.cpp:534 dialogs/rc.cpp:547 dialogs/rc.cpp:560 dialogs/rc.cpp:573
+#: dialogs/rc.cpp:586 dialogs/rc.cpp:598 dialogs/rc.cpp:679
+msgid "Loan amount:"
+msgstr "贷款金额:"
+
+#: dialogs/rc.cpp:535 dialogs/rc.cpp:548 dialogs/rc.cpp:561 dialogs/rc.cpp:574
+#: dialogs/rc.cpp:587 dialogs/rc.cpp:599 dialogs/rc.cpp:633 dialogs/rc.cpp:671
+msgid "Interest rate:"
+msgstr "利率:"
+
+#: dialogs/rc.cpp:536 dialogs/rc.cpp:549 dialogs/rc.cpp:562 dialogs/rc.cpp:575
+#: dialogs/rc.cpp:588 dialogs/rc.cpp:600 dialogs/rc.cpp:669
+msgid "Term:"
+msgstr "贷款期限:"
+
+#: dialogs/rc.cpp:537 dialogs/rc.cpp:550 dialogs/rc.cpp:563 dialogs/rc.cpp:576
+#: dialogs/rc.cpp:589 dialogs/rc.cpp:601 dialogs/rc.cpp:622 dialogs/rc.cpp:630
+#: dialogs/rc.cpp:677
+msgid "Principal + Interest:"
+msgstr "本金+利息:"
+
+#: dialogs/rc.cpp:538 dialogs/rc.cpp:551 dialogs/rc.cpp:564 dialogs/rc.cpp:577
+#: dialogs/rc.cpp:583 dialogs/rc.cpp:585 dialogs/rc.cpp:590 dialogs/rc.cpp:602
+msgid "Final amortization payment"
+msgstr "最后一次分期偿还额"
+
+#: dialogs/rc.cpp:557
+msgid "Duration"
+msgstr "时序时间:"
+
+#: dialogs/rc.cpp:558
+msgid ""
+"\n"
+"Please enter the term of this loan or leave the field empty to calculate it. "
+"The term is the time that is required to fully repay the loan. This time "
+"might be different from the time your loan contract is signed for."
+msgstr ""
+"\n"
+"请输入此贷款的期限,或者留空以自动计算。所谓“贷款的期限”,是指彻底还清此贷款"
+"所需的时间。这个时间可能与您的贷款合同中所签署的日期有所差异。"
+
+#: dialogs/rc.cpp:584
+msgid ""
+"\n"
+"Please enter the amount of a final amortization payment or leave the field "
+"empty to calculate it."
+msgstr ""
+"\n"
+"请输入最后一次分期偿还的金额,或者留空以自动计算它。"
+
+#: dialogs/rc.cpp:596
+msgid "Calculation Overview"
+msgstr "计算概览"
+
+#: dialogs/rc.cpp:597
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown in the overview below. You can "
+"accept these values by selecting \"Next\" or change them by choosing \"Back"
+"\" to return to the input field for the information you want to change."
+msgstr ""
+"\n"
+"KMymoney已经完成了对此贷款的计算,以下是计算结果。您可以点击“下一步”键以接受"
+"这些结果,或者点击“上一步”键,对相关数据进行修改以重新进行计算。"
+
+#: dialogs/rc.cpp:609
+msgid ""
+"\n"
+"In the following steps, KMyMoney supports you in setting up categories and "
+"schedules for your loan payments."
+msgstr ""
+"\n"
+"在接下来的步骤中,KMyMoney将引导您设立交易类别,并在时间表中建立相应的支付计"
+"划。"
+
+#: dialogs/rc.cpp:614
+msgid ""
+"\n"
+"Please select the category you want to assign the interest payments to or "
+"create a new category."
+msgstr ""
+"\n"
+"请为您的利息支付选择一个交易类别,或者为它创建一个新的交易类别。"
+
+#: dialogs/rc.cpp:615
+msgid "Additional Fees"
+msgstr "附件费用"
+
+#: dialogs/rc.cpp:616
+msgid ""
+"\n"
+"If your regular payment contains any additional fees, click on the button "
+"\"Additional fees\" to enter them."
+msgstr ""
+"\n"
+"如果您的定期支付中包含任何附加费用,按“附加费用”键以输入它们。"
+
+#: dialogs/rc.cpp:617
+msgid "= periodical payment:"
+msgstr "= 定期支付:"
+
+#: dialogs/rc.cpp:623
+msgid ""
+"If no additional fees are included in your periodical payment or you have "
+"entered all such fees, then click on \"Next\"."
+msgstr ""
+"如果在您的定期支付中不包含任何附加费用,或者您已经输入了相关的费用,请点击“下"
+"一步”。"
+
+#: dialogs/rc.cpp:625
+msgid ""
+"KMyMoney will create a schedule for this payment and reminds you whenever a "
+"payment must be made.<p>\n"
+"If you selected to record all payments this date has already been supplied. "
+"If you selected to record only this years payments, then the <b>First "
+"payment due date</b> is the date of the first payment made in this year."
+msgstr ""
+"KMyMoney将会在时间表中为此支付建立一个支付计划项,并当支付到期时提醒您处理\n"
+"如果您选择记录全部的支付交易,KMyMoney已经自动为您提供了有关的时间信息。 如果"
+"您选择只记录从今年开始的支付交易,那么您需要在“首次支付时间”栏中填入今年第一"
+"次支付的时间。"
+
+#: dialogs/rc.cpp:626
+msgid "First payment due on:"
+msgstr "首次支付到期时间:"
+
+#: dialogs/rc.cpp:627
+msgid "Make payment from/to:"
+msgstr "向...支付/从...获取支付:"
+
+#: dialogs/rc.cpp:629
+msgid ""
+"\n"
+"KMyMoney has calculated the loan as shown below. If you want to accept these "
+"values use the \"Finish\" button to update your account, otherwise use the "
+"\"Back\" button to modify your settings."
+msgstr ""
+"\n"
+"KMymoney已经完成了对此贷款的计算,以下是计算结果。您可以点击“完成”键以接受这"
+"些结果并更新您的账户,或者点击“上一步”键,修改您的设置。"
+
+#: dialogs/rc.cpp:631
+msgid "Additional fees:"
+msgstr "附加费用:"
+
+#: dialogs/rc.cpp:632
+msgid "Total payment:"
+msgstr "支付总额:"
+
+#: dialogs/rc.cpp:634
+msgid "Valid from:"
+msgstr "被...验证:"
+
+#: dialogs/rc.cpp:635
+msgid "Affected payments:"
+msgstr "影响的支付项:"
+
+#: dialogs/rc.cpp:645
+msgid "Press this to create a new asset account"
+msgstr "按此键以建立新的资产账户"
+
+#: dialogs/rc.cpp:648
+msgid ""
+"\n"
+"This page summarizes the data you entered. If you need to modify anything, "
+"please use the \"Back\" button to go to respective page. Otherwise use the "
+"\"Finish\" button to create the account."
+msgstr ""
+"\n"
+"此页对您已输入的数据进行概述。如果您需要对它们修改,请按“上一步”键返回之前的"
+"页。否则请按“结束”键以创建此账户。"
+
+#: dialogs/rc.cpp:650
+msgid "Payee:"
+msgstr "收款人:"
+
+#: dialogs/rc.cpp:653
+msgid "First payment:"
+msgstr "首付:"
+
+#: dialogs/rc.cpp:655
+msgid "Amount is:"
+msgstr "贷款类型:"
+
+#: dialogs/rc.cpp:656
+msgid "Loan calculation"
+msgstr "贷款计算"
+
+#: dialogs/rc.cpp:660
+msgid "Periodic Payment:"
+msgstr "周期性支付:"
+
+#: dialogs/rc.cpp:661
+msgid "Additional Fees:"
+msgstr "附加费用:"
+
+#: dialogs/rc.cpp:662
+msgid "Interest category:"
+msgstr "类系类别:"
+
+#: dialogs/rc.cpp:663
+msgid "Payment from:"
+msgstr "从...支付:"
+
+#: dialogs/rc.cpp:666
+msgid "Next due date:"
+msgstr "下次到期日期:"
+
+#: dialogs/rc.cpp:673
+msgid "Final Payment:"
+msgstr "最后一次支付:"
+
+#: dialogs/rc.cpp:675
+msgid "Interest is due:"
+msgstr "应付利息:"
+
+#: dialogs/rc.cpp:680
+msgid "Payment frequency:"
+msgstr "支付频率:"
+
+#: dialogs/rc.cpp:682
+msgid "Online Quote Configuration"
+msgstr "在线报价配置:"
+
+#: dialogs/rc.cpp:687
+msgid "Perl Location:"
+msgstr "Perl脚本所在位置:"
+
+#: dialogs/rc.cpp:688
+msgid "Script:"
+msgstr "脚本:"
+
+#: dialogs/rc.cpp:690
+msgid "Reassign payees"
+msgstr "重新指定收款人"
+
+#: dialogs/rc.cpp:691
+msgid ""
+"The transactions associated with the selected payees need to be re-assigned "
+"to a different payee before the selected payees can be deleted. Please "
+"select a payee from the list below."
+msgstr ""
+"在删除选中的收款人前,需要先将与相关的交易指定给其他收款人。请在下面的列表中 "
+"选择一个收款人。"
+
+#: dialogs/rc.cpp:692
+msgid "Available payees:"
+msgstr "可用的收款人:"
+
+#: dialogs/rc.cpp:693
+msgid "Assign deleted names to the above selected payee's matching list"
+msgstr "将删除的名字添加到以上所选收/付款人的匹配列表中"
+
+#: dialogs/rc.cpp:696
+msgid "PluginDlg"
+msgstr "插件对话框"
+
+#: dialogs/rc.cpp:697
+msgid "PlugIn"
+msgstr "插件"
+
+#: dialogs/rc.cpp:698 widgets/transaction.cpp:1071
+#: widgets/transaction.cpp:1658
+msgid "Status"
+msgstr "状态"
+
+#: dialogs/rc.cpp:699
+msgid "Feature"
+msgstr "特性"
+
+#: dialogs/rc.cpp:703
+msgid "Reconciliation Dialog"
+msgstr "对帐对话框"
+
+#: dialogs/rc.cpp:704
+msgid ""
+"This dialog will assist in helping you to balance your account.\n"
+"\n"
+"Click on an appropriate transaction within one of the two list views to mark "
+"it as reconciled. To create a transaction or edit\n"
+"a transaction you can return to the register by clicking on the Edit "
+"Transactions button.\n"
+"\n"
+"Your account is balanced when the Difference is Zero. Click on the Finish "
+"button to save the reconciled transactions."
+msgstr ""
+"本对话框将帮助您对账户进行对帐。\n"
+"\n"
+"在列表视图中点击合适的交易可将它标记为已对帐。 \n"
+"点击“编辑交易”键可以返回账簿修改或创建交易记录。\n"
+"当差额为零时,您的账户就完成了平衡结算。 此时点击“完成”键保存已对帐记录。"
+
+#: dialogs/rc.cpp:705
+msgid "Withdrawals"
+msgstr "取款"
+
+#: dialogs/rc.cpp:707 dialogs/rc.cpp:708 dialogs/rc.cpp:822
+msgid "$"
+msgstr "$"
+
+#: dialogs/rc.cpp:710
+msgid "Previous Balance:"
+msgstr "上一期余额:"
+
+#: dialogs/rc.cpp:711 dialogs/rc.cpp:713 dialogs/rc.cpp:715 dialogs/rc.cpp:717
+#: dialogs/rc.cpp:820
+msgid "0"
+msgstr "0"
+
+#: dialogs/rc.cpp:712
+msgid "Ending Balance:"
+msgstr "期末余额:"
+
+#: dialogs/rc.cpp:714
+msgid "Cleared Balance:"
+msgstr "已清算余额:"
+
+#: dialogs/rc.cpp:716
+msgid "Difference:"
+msgstr "差额:"
+
+#: dialogs/rc.cpp:718
+msgid "Edit Transactions..."
+msgstr "编辑交易..."
+
+#: dialogs/rc.cpp:721
+msgid "Security List Editor"
+msgstr "证券列表编辑器"
+
+#: dialogs/rc.cpp:726
+msgid "Market"
+msgstr "市场"
+
+#: dialogs/rc.cpp:729
+msgid "Cash Fraction"
+msgstr "现金比例"
+
+#: dialogs/rc.cpp:730
+#, fuzzy
+msgid "Add..."
+msgstr "添加..."
+
+#: dialogs/rc.cpp:732 widgets/kmymoneypriceview.cpp:157
+msgid "Delete..."
+msgstr "删除..."
+
+#: dialogs/rc.cpp:733
+msgid "Show national currencies"
+msgstr "显示不同国家货币"
+
+#: dialogs/rc.cpp:735
+msgid "KMyMoney - Select Database"
+msgstr "KMyMoney - 选择数据库"
+
+#: dialogs/rc.cpp:736
+msgid "CAUTION!"
+msgstr "注意!"
+
+#: dialogs/rc.cpp:737
+#, fuzzy
+msgid ""
+"<font color=\"#ff2727\">This software is still in an experimental stage, and "
+"there are still some known response time problems. Please be patient; we are "
+"working on them.\n"
+"As always, please make sure you have adequate backups of your data.</font>"
+msgstr ""
+"<font color=\"#ff2727\">该软件仍然处于试验阶段,可能会有数据丢失。在使用数据"
+"库功能前, 请确认您已经对您的数据做了有效的备份。</font>"
+
+#: dialogs/rc.cpp:738
+msgid "Database Type"
+msgstr "数据库类型"
+
+#: dialogs/rc.cpp:739
+msgid "Database Name"
+msgstr "数据库名称"
+
+#: dialogs/rc.cpp:740
+msgid "Host Name"
+msgstr "主机名"
+
+#: dialogs/rc.cpp:741
+msgid "User Name"
+msgstr "用户名"
+
+#: dialogs/rc.cpp:743
+#, fuzzy
+msgid "Preload &all data"
+msgstr "预载全部数据"
+
+#: dialogs/rc.cpp:745
+#, fuzzy
+msgid "&Generate SQL"
+msgstr "生成SQL语句"
+
+#: dialogs/rc.cpp:747
+msgid "Ca&ncel"
+msgstr "取消(&n)"
+
+#: dialogs/rc.cpp:762 widgets/rc.cpp:172
+msgid "Sort options"
+msgstr "排序选项"
+
+#: dialogs/rc.cpp:763
+msgid "Use default"
+msgstr "使用缺省设定"
+
+#: dialogs/rc.cpp:767
+msgid "Correct splits"
+msgstr "改正交易拆分"
+
+#: dialogs/rc.cpp:769
+msgid "How do you want to proceed?"
+msgstr "您想如何继续?"
+
+#: dialogs/rc.cpp:770
+msgid "Continue to edit splits"
+msgstr "继续编辑拆分"
+
+#: dialogs/rc.cpp:771
+#, c-format
+msgid "Change total amount of transaction to %1."
+msgstr "将交易总额改为%1。"
+
+#: dialogs/rc.cpp:772
+msgid "Distribute difference of %1 among all splits."
+msgstr "将差额%1均摊到各拆分中。"
+
+#: dialogs/rc.cpp:773
+msgid "Leave %1 unassigned."
+msgstr "保持%1未指派状态。"
+
+#: dialogs/rc.cpp:776
+msgid "Split transaction"
+msgstr "拆分交易"
+
+#: dialogs/rc.cpp:777
+msgid "<b>11,00<b>"
+msgstr "<b>11,00</b>"
+
+#: dialogs/rc.cpp:778
+msgid "<b>111,00<b>"
+msgstr "<b>111,00</b>"
+
+#: dialogs/rc.cpp:779
+msgid "Unassigned"
+msgstr "未指派"
+
+#: dialogs/rc.cpp:780
+msgid "Sum of splits"
+msgstr "已拆分总额"
+
+#: dialogs/rc.cpp:781
+msgid "100,00"
+msgstr "100,00"
+
+#: dialogs/rc.cpp:782
+msgid "Transaction amount"
+msgstr "交易金额"
+
+#: dialogs/rc.cpp:783
+#, fuzzy
+msgid "Merge"
+msgstr "更多"
+
+#: dialogs/rc.cpp:784
+msgid "Merges splits with the same category to one split"
+msgstr ""
+
+#: dialogs/rc.cpp:785
+msgid ""
+"In case you have multiple split entries to the same category and you like to "
+"keep them as a single split, press this button. The amount for identical "
+"categories will be added and stored in a single split for that category."
+msgstr ""
+
+#: dialogs/rc.cpp:786
+#, fuzzy
+msgid "Clear &Zero"
+msgstr "已清算"
+
+#: dialogs/rc.cpp:787
+msgid "Removes all splits that have a value of zero."
+msgstr ""
+
+#: dialogs/rc.cpp:791
+msgid "New price entry"
+msgstr "新建价格项"
+
+#: dialogs/rc.cpp:799
+msgid "Void mark"
+msgstr "空标记"
+
+#: dialogs/rc.cpp:800
+msgid "Opening Balance text"
+msgstr "开户余额文本"
+
+#: dialogs/rc.cpp:801
+msgid "Type field text"
+msgstr "类型栏目文本"
+
+#: dialogs/rc.cpp:802
+msgid "Account delimiter"
+msgstr "账户分界符"
+
+#: dialogs/rc.cpp:804
+msgid "Attempt to match similar transactions"
+msgstr "尝试匹配类似的交易"
+
+#: dialogs/rc.cpp:806 dialogs/rc.cpp:808
+msgid "The format of the dates in the QIF file."
+msgstr "在QIF文件中的日期格式"
+
+#: dialogs/rc.cpp:809 dialogs/rc.cpp:811
+msgid ""
+"If a QIF file contains date entries with years represented with two digits "
+"then either an apostrophe or a slash may be used to delimit the year in the "
+"dates for certain centuries. This enables 1905 to be distinguished from "
+"2005. Specify here which range of years will have year delimited by an "
+"apostrophe (eg. for Quicken this is usually 1900-1949)."
+msgstr ""
+"如果QIF文件中,日期使用两位数字来表示年份,那么可以用'或者/号来区分在某些世纪"
+"中的年份。 这样可以将像是1905和2005这样的年份区分开来。这里请指定带'号的年份"
+"所在的时间段(例如,在Quicken中, 通常使用1900-1949)。"
+
+#: dialogs/rc.cpp:810
+msgid "Apostrophe Handling"
+msgstr "“'”处理"
+
+#: dialogs/rc.cpp:812
+msgid "Amounts"
+msgstr "金额"
+
+#: dialogs/rc.cpp:813
+msgid "Field"
+msgstr "项"
+
+#: dialogs/rc.cpp:814
+msgid "QIF-Record"
+msgstr "QIF记录"
+
+#: dialogs/rc.cpp:815 dialogs/rc.cpp:833
+msgid "Decimal Symbol"
+msgstr "小数点符号"
+
+#: dialogs/rc.cpp:816
+msgid "Thousand Delimiter"
+msgstr "千位分隔符"
+
+#: dialogs/rc.cpp:817
+msgid "SortColumnInvisible"
+msgstr "SortColumnInvisible"
+
+#: dialogs/rc.cpp:819
+msgid "T"
+msgstr "T"
+
+#: dialogs/rc.cpp:821
+msgid "Split-Value"
+msgstr "拆分价值"
+
+#: dialogs/rc.cpp:824
+msgid "Commission"
+msgstr "佣金"
+
+#: dialogs/rc.cpp:825
+msgid "O"
+msgstr "O"
+
+#: dialogs/rc.cpp:826
+msgid "2"
+msgstr "2"
+
+#: dialogs/rc.cpp:828
+msgid "I"
+msgstr "I"
+
+#: dialogs/rc.cpp:829
+msgid "3"
+msgstr "3"
+
+#: dialogs/rc.cpp:831
+msgid "Q"
+msgstr "Q"
+
+#: dialogs/rc.cpp:832
+msgid "4"
+msgstr "4"
+
+#: dialogs/rc.cpp:834
+msgid "Thousands Separator"
+msgstr "千位分隔符"
+
+#: dialogs/rc.cpp:836
+msgid "Output filter location"
+msgstr "输出过滤器地址"
+
+#: dialogs/rc.cpp:837
+msgid "Input filter file type"
+msgstr "输入过滤器文件类型"
+
+#: dialogs/rc.cpp:838
+msgid "*.qif"
+msgstr "*.qif"
+
+#: dialogs/rc.cpp:839
+msgid "Input filter location"
+msgstr "输入过滤器地址"
+
+#: dialogs/rc.cpp:843
+msgid "Rename"
+msgstr "重命名"
+
+#: dialogs/kselecttransactionsdlg.cpp:44
+msgid "Select Transaction"
+msgstr "选择交易"
+
+#: dialogs/kselecttransactionsdlg.cpp:45
+msgid ""
+"Select a transaction and press the OK button or use Cancel to select none."
+msgstr "选择一项交易并按“确定”,或者按“取消”不选择任何交易。"
+
+#: dialogs/knewinvestmentwizard.cpp:62
+msgid "Investment detail wizard"
+msgstr "投资明细向导"
+
+#: dialogs/knewinvestmentwizard.cpp:82
+msgid "Security detail wizard"
+msgstr "证券明细向导"
+
+#: dialogs/knewaccountdlg.cpp:121 dialogs/knewinvestmentwizard.cpp:109
+msgid ""
+"_: default price mode\n"
+"<default>"
+msgstr "<缺省>"
+
+#: dialogs/knewaccountdlg.cpp:122 dialogs/knewinvestmentwizard.cpp:110
+msgid "Price per share"
+msgstr "每股价格"
+
+#: dialogs/knewaccountdlg.cpp:123 dialogs/knewinvestmentwizard.cpp:111
+msgid "Total for all shares"
+msgstr "全部股份总计"
+
+#: dialogs/knewinvestmentwizard.cpp:129
+#, fuzzy
+msgid "This wizard allows you to modify the selected investment."
+msgstr "在本页可以选择一个父账户。"
+
+#: dialogs/knewinvestmentwizard.cpp:132
+#, fuzzy
+msgid "This wizard allows you to modify the selected security."
+msgstr "在本页可以选择一个父账户。"
+
+#: dialogs/knewinvestmentwizard.cpp:186
+msgid ""
+"The selected symbol is already on file. Do you want to reuse the existing "
+"security?"
+msgstr ""
+
+#: dialogs/knewinvestmentwizard.cpp:186
+#, fuzzy
+msgid "Security found"
+msgstr "未找到证券。"
+
+#: dialogs/knewinvestmentwizard.cpp:309
+msgid "Unable to create all objects for the investment"
+msgstr "无法为投资创建所有对象"
+
+#: dialogs/keditequityentrydlg.cpp:78
+msgid "Change the price information of the selected entry."
+msgstr "修改选中的价格信息项。"
+
+#: dialogs/kaccountselectdlg.cpp:64 widgets/kmymoneybriefschedule.cpp:59
+msgid "&Skip"
+msgstr "跳过(&S)"
+
+#: dialogs/kaccountselectdlg.cpp:66 widgets/kmymoneybriefschedule.cpp:61
+msgid "Skip this transaction"
+msgstr "跳过此交易"
+
+#: dialogs/kaccountselectdlg.cpp:67
+msgid ""
+"Use this to skip importing this transaction and proceed with the next one."
+msgstr "用它来跳过此条交易的导入,继续处理下一项。"
+
+#: dialogs/kaccountselectdlg.cpp:72
+msgid "Create a new account/category"
+msgstr "创建新的账户/交易类别"
+
+#: dialogs/kaccountselectdlg.cpp:73
+msgid "Use this to add a new account/category to the file"
+msgstr "用它来在文件中创建新的账户/交易类别。"
+
+#: dialogs/kaccountselectdlg.cpp:77
+msgid "&Abort"
+msgstr "取消(&A)"
+
+#: dialogs/kaccountselectdlg.cpp:79
+msgid "Abort the import operation and dismiss all changes"
+msgstr "终止本次导入操作并撤销全部修改"
+
+#: dialogs/kaccountselectdlg.cpp:80
+msgid ""
+"Use this to abort the import. Your financial data will be in the state "
+"before you started the QIF import."
+msgstr "用它来终止导入。您的财务信息会恢复到导入QIF之前的状态。"
+
+#: dialogs/knewaccountdlg.cpp:110
+msgid "Is a sub account"
+msgstr "是子账户"
+
+#: dialogs/knewaccountdlg.cpp:184
+msgid "VAT account"
+msgstr "VAT账户"
+
+#: dialogs/knewaccountdlg.cpp:474
+msgid ""
+"You have not specified a name.\n"
+"Please fill in this field."
+msgstr ""
+"您尚未指定一个名称。\n"
+"请填写此项。"
+
+#: dialogs/knewaccountdlg.cpp:482
+msgid "Please select a parent account."
+msgstr "请选择一个父账户。"
+
+#: dialogs/knewaccountdlg.cpp:489 dialogs/knewaccountdlg.cpp:1029
+msgid "<No Institution>"
+msgstr "<未指定金融机构>"
+
+#: dialogs/knewaccountdlg.cpp:552
+msgid ""
+"An account named <b>%1</b> already exists. You cannot create a second "
+"account with the same name."
+msgstr "名为<b>%1</b>的账户已存在。您无法创建第二个重名账户。"
+
+#: dialogs/knewaccountdlg.cpp:567
+msgid ""
+"A category named <b>%1</b> already exists. You cannot create a second "
+"category with the same name."
+msgstr "名为<b>%1</b>的交易类别已存在。您无法创建第二个重名类别。"
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid ""
+"You have selected to suppress the display of unused categories in the "
+"KMyMoney configuration dialog. The category you just created will therefore "
+"only be shown if it is used. Otherwise, it will be hidden in the accounts/"
+"categories view."
+msgstr ""
+"您已经在KMyMoney的配置对话框中选择了不显示未使用的交易类别,因此您刚刚新建的"
+"交易类别将不会显示在账户和交易类别视图中,除非它已经在交易中被使用。"
+
+#: dialogs/knewaccountdlg.cpp:596
+msgid "Hidden categories"
+msgstr "隐藏交易类别"
+
+#: dialogs/knewaccountdlg.cpp:927 dialogs/knewaccountdlg.cpp:979
+#, c-format
+msgid "Is a sub account of %1"
+msgstr "是%1的子账户"
+
+#: dialogs/knewaccountdlg.cpp:1082
+msgid "Cannot add institution"
+msgstr "无法新建机构。"
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid ""
+"This dialog does not allow to create new payees. Please pick a payee from "
+"the list."
+msgstr "在本对话框中不允许创建新的收款人。请从列表中选择一个收款人。"
+
+#: dialogs/kpayeereassigndlg.cpp:75
+msgid "Payee creation"
+msgstr "创建收款人"
+
+#: dialogs/kimportdlg.cpp:69
+msgid "Use this to start the import operation"
+msgstr "用它来开始导入操作"
+
+#: dialogs/kimportdlg.cpp:110
+msgid ""
+"%1|Import files\n"
+"%2|All files (*.*)"
+msgstr ""
+"%1|导入文件\n"
+"%2|所有文件(*.*)"
+
+#: dialogs/kimportdlg.cpp:111
+msgid "Import File..."
+msgstr "导入文件..."
+
+#: dialogs/knewloanwizard.cpp:124
+msgid "Create a new category"
+msgstr "创建新的交易类别"
+
+#: dialogs/knewloanwizard.cpp:125
+msgid "Use this to open the new account editor"
+msgstr "打开新的账户编辑器"
+
+#: dialogs/knewloanwizard.cpp:129
+msgid "&Additional fees..."
+msgstr "附加费用(&A)..."
+
+#: dialogs/knewloanwizard.cpp:131
+msgid "Enter additional fees"
+msgstr "输入附加费用"
+
+#: dialogs/knewloanwizard.cpp:132
+msgid ""
+"Use this to add any additional fees other than principal and interest "
+"contained in your periodical payments."
+msgstr "用它来添加除本金和利息外包含在您的周期性支付中的附加费用。"
+
+#: dialogs/knewloanwizard.cpp:139
+msgid ""
+"Use this to create a new account to which the initial payment should be made"
+msgstr "用它来创建一个用来进行首次支付的新账户。"
+
+#: dialogs/knewloanwizard.cpp:208
+msgid "To whom do you make payments?"
+msgstr "您要支付给谁?"
+
+#: dialogs/knewloanwizard.cpp:209
+msgid "Payments to"
+msgstr "支付给"
+
+#: dialogs/knewloanwizard.cpp:214
+msgid "From whom do you expect payments?"
+msgstr "您从何处获取支付?"
+
+#: dialogs/knewloanwizard.cpp:215
+msgid "Payments from"
+msgstr "从...获取支付"
+
+#: dialogs/knewloanwizard.cpp:233
+msgid "Please enter the date, the first payment for this loan was/is due."
+msgstr "请输入此贷款首次支付的到期日。"
+
+#: dialogs/knewloanwizard.cpp:235
+msgid ""
+"Note: Consult the loan contract for details of the first due date. Keep in "
+"mind, that the first due date usually differs from the date the contract was "
+"signed"
+msgstr ""
+"注意:请向贷款方联系人询问关于首次到期日的详细信息。通常来说,这个日期与贷款"
+"合同签订的日期不是同一天。"
+
+#: dialogs/knewloanwizard.cpp:240
+msgid ""
+"Please enter the original loan amount in the field below or leave it empty "
+"to be calculated."
+msgstr "请在下面输入原始贷款金额,或留空以自动计算它。"
+
+#: dialogs/knewloanwizard.cpp:248
+msgid ""
+"Please enter the date, the first payment for this loan was/is due this year."
+msgstr "请输入今年第一次支付的到期日期。"
+
+#: dialogs/knewloanwizard.cpp:250
+msgid ""
+"Note: You can easily figure out the date of the first payment if you consult "
+"the last statement of last year."
+msgstr "注意:您可以从去年的最后一期对帐单中找到该日期。"
+
+#: dialogs/knewloanwizard.cpp:254
+msgid ""
+"Please enter the remaining loan amount of last years final statement in the "
+"field below. You should not leave this field empty."
+msgstr "请在下面输入去年最后一期对帐单中的剩余贷款金额。此项不可以为空。"
+
+#: dialogs/knewloanwizard.cpp:311 dialogs/knewloanwizard.cpp:326
+#: dialogs/knewloanwizard.cpp:341 dialogs/knewloanwizard.cpp:357
+#: dialogs/knewloanwizard.cpp:373
+msgid "calculate"
+msgstr "计算"
+
+#: dialogs/knewloanwizard.cpp:417
+msgid "borrowed"
+msgstr "借入"
+
+#: dialogs/knewloanwizard.cpp:419
+msgid "lend"
+msgstr "出借"
+
+#: dialogs/knewloanwizard.cpp:423
+msgid "not assigned"
+msgstr "未指派"
+
+#: dialogs/knewloanwizard.cpp:430
+msgid "on reception"
+msgstr "按揭"
+
+#: dialogs/knewloanwizard.cpp:432
+msgid "on due date"
+msgstr "按到期时间"
+
+#: dialogs/knewloanwizard.cpp:471
+msgid ""
+"The loan wizard is unable to calculate two different values for your loan at "
+"the same time. Please enter a value for the %1 on this page or backup to the "
+"page where the current value to be calculated is defined and fill in a "
+"value."
+msgstr ""
+"贷款向导无法为您同时计算两个不同的值。请在本页内为%1输入一个数值,或者回退到"
+"前一页填写数值并重新计算。"
+
+#: dialogs/knewloanwizard.cpp:500
+msgid ""
+"You selected, that payments have already been made towards this loan. This "
+"requires you to enter the loan amount exactly as found on your last "
+"statement."
+msgstr ""
+"你选择了“ 此贷款已经被部分偿还”选项。这需要您在上一期对帐单中查找并填写剩余贷"
+"款金额。"
+
+#: dialogs/knewloanwizard.cpp:513
+msgid "interest rate"
+msgstr "利率"
+
+#: dialogs/knewloanwizard.cpp:522
+msgid "term"
+msgstr "帐期"
+
+#: dialogs/knewloanwizard.cpp:532
+msgid "principal and interest"
+msgstr "本金与利率"
+
+#: dialogs/knewloanwizard.cpp:743
+#, c-format
+msgid ""
+"The number of payments has been decremented and the final payment has been "
+"modified to %1."
+msgstr "偿还次数已经减少,因此最后一期应偿还金额相应修改为%1。"
+
+#: dialogs/knewloanwizard.cpp:751 dialogs/knewloanwizard.cpp:771
+#, c-format
+msgid "The final payment has been modified to %1."
+msgstr "最后一期偿还金额已修改为%1。"
+
+#: dialogs/knewloanwizard.cpp:802
+msgid "KMyMoney has calculated a final payment of %1 for this loan."
+msgstr "KMyMoney算出此贷款最后一期偿还额为%1。"
+
+#: dialogs/knewloanwizard.cpp:817
+msgid ""
+"You have entered mis-matching information. Please backup to the appropriate "
+"page and update your figures or leave one value empty to let KMyMoney "
+"calculate it for you"
+msgstr ""
+"您输入的信息存在不一致的地方。请返回相应的页并修改对应的数字或者将其留空以自"
+"动计算它。"
+
+#: dialogs/kfindtransactiondlg.cpp:230
+msgid ""
+"Warning: Filtering by Category will exclude all transfers from the results."
+msgstr "警告!用交易类型过滤将在结果中排除全部转账交易。"
+
+#: dialogs/kfindtransactiondlg.cpp:239
+msgid "(None)"
+msgstr "(无)"
+
+#: dialogs/kfindtransactiondlg.cpp:241
+msgid "Current selections: "
+msgstr "当前选择:"
+
+#: dialogs/kfindtransactiondlg.cpp:716
+msgid "Found %1 matching transactions (D %2 / P %3 = %4)"
+msgstr "找到 %1 条匹配交易 (D %2 / P %3 = %4)"
+
+#: dialogs/kfindtransactiondlg.cpp:719
+msgid "Found %1 matching transactions"
+msgstr "找到 %1 条匹配交易"
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "The institution name field is empty. Please enter the name."
+msgstr "此金融机构的名称栏目空白。请填写名称。"
+
+#: dialogs/knewbankdlg.cpp:83
+msgid "Adding New Institution"
+msgstr "添加新金融机构"
+
+#: dialogs/kcsvprogressdlg.cpp:69
+msgid "C&lose"
+msgstr "关闭(&l)"
+
+#: dialogs/kcsvprogressdlg.cpp:247
+msgid " of "
+msgstr " of "
+
+#: widgets/kmymoneypriceview.cpp:126
+msgid "Commodity"
+msgstr "商品"
+
+#: widgets/kmymoneypriceview.cpp:130
+msgid "Source"
+msgstr "来源"
+
+#: widgets/kmymoneypriceview.cpp:143
+msgid "Price Options"
+msgstr "价格选项"
+
+#: widgets/kmymoneypriceview.cpp:153
+#, fuzzy
+msgid "Online Price Update..."
+msgstr "在线价格更新..."
+
+#: widgets/kmymoneycombo.cpp:472 widgets/transaction.cpp:164
+#: widgets/transaction.cpp:166
+msgid "From"
+msgstr "来源"
+
+#: widgets/transaction.cpp:668
+msgid "Transaction is missing a category assignment."
+msgstr "交易中缺少交易类别。"
+
+#: widgets/transaction.cpp:671
+msgid "The transaction has a missing assignment of <b>%1</b>."
+msgstr "该交易被指派到了不存在的<b>%1</b>。"
+
+#: widgets/transaction.cpp:874
+msgid "Sell"
+msgstr "卖"
+
+#: widgets/transaction.cpp:876
+msgid "Buy"
+msgstr "买"
+
+#: widgets/kmymoneycombo.cpp:520 widgets/transaction.cpp:879
+#: widgets/transaction.cpp:1447
+msgid "Dividend"
+msgstr "红利"
+
+#: widgets/kmymoneycombo.cpp:518 widgets/transaction.cpp:881
+#: widgets/transaction.cpp:1453
+msgid "Yield"
+msgstr "收益"
+
+#: widgets/transaction.cpp:886 widgets/transaction.cpp:1473
+msgid "Activity"
+msgstr "活动"
+
+#: widgets/transaction.cpp:887
+msgid "Investment transaction"
+msgstr "投资交易"
+
+#: widgets/transaction.cpp:1021 widgets/transaction.cpp:1114
+#: widgets/transaction.cpp:1165
+msgid "*** UNASSIGNED ***"
+msgstr "*** 未指派 ***"
+
+#: widgets/kmymoneycombo.cpp:517 widgets/transaction.cpp:1435
+msgid "Add shares"
+msgstr "增加股份"
+
+#: widgets/kmymoneycombo.cpp:516 widgets/transaction.cpp:1438
+msgid "Remove shares"
+msgstr "删除股份"
+
+#: widgets/kmymoneycombo.cpp:522 widgets/transaction.cpp:1441
+msgid "Buy shares"
+msgstr "买进股份"
+
+#: widgets/kmymoneycombo.cpp:521 widgets/transaction.cpp:1444
+msgid "Sell shares"
+msgstr "卖出股份"
+
+#: widgets/transaction.cpp:1450
+msgid "Reinvest Dividend"
+msgstr "将红利继续用于投资"
+
+#: widgets/kmymoneycombo.cpp:515 widgets/transaction.cpp:1456
+msgid "Split shares"
+msgstr "配股"
+
+#: widgets/transaction.cpp:1515
+msgid "Ratio"
+msgstr "份额"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:241
+msgid "%1 Bills."
+msgstr "%1项账单。"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:257
+msgid "%1 Deposits."
+msgstr "%1项存款。"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:273
+msgid "%1 Transfers."
+msgstr "%1项转账。"
+
+#: widgets/kmymoneyscheduleddatetbl.cpp:355
+msgid ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+msgstr ""
+"st-nd-rd-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-th-st-nd-rd-th-th-"
+"th-th-th-th-th-st"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:57
+#: widgets/kmymoneyaccounttreeforecast.cpp:84
+msgid "Current"
+msgstr "当前"
+
+#: widgets/kmymoneyaccounttreeforecast.cpp:72
+#: widgets/kmymoneyaccounttreeforecast.cpp:93
+msgid "Total variation"
+msgstr "总变差"
+
+#: widgets/stdtransactionmatched.cpp:130
+msgid ""
+"KMyMoney has matched a downloaded transaction with a manually entered one "
+"(result above)"
+msgstr "KMyMoney已经用手工输入的交易匹配了一个下载的交易(结果在上方)"
+
+#: widgets/stdtransactionmatched.cpp:138
+msgid "Bank entry:"
+msgstr "银行条目:"
+
+#: widgets/stdtransactionmatched.cpp:166
+msgid "Your entry:"
+msgstr "您的条目:"
+
+#: widgets/kbudgetvalues.cpp:187
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a monthly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+"你已使用不同的货币单位输入了预算值,这会产生一个月度预算<b>%1</b>。是否用该数"
+"值填写月度预算?"
+
+#: widgets/kbudgetvalues.cpp:187 widgets/kbudgetvalues.cpp:206
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"_: Auto assignment (caption)\n"
+"Auto assignment"
+msgstr "自动指派"
+
+#: widgets/kbudgetvalues.cpp:206
+msgid ""
+"You have entered budget values using a different base which would result in "
+"a yearly budget of <b>%1</b>. Should this value be used to fill the monthly "
+"budget?"
+msgstr ""
+"你已使用不同的货币单位输入了预算值,这会产生一个年度预算<b>%1</b>。是否用该数"
+"值填写年度预算?"
+
+#: widgets/kbudgetvalues.cpp:225
+msgid ""
+"You have entered budget values using a different base which would result in "
+"an individual monthly budget of <b>%1</b>. Should this value be used to fill "
+"the monthly budgets?"
+msgstr ""
+"你已使用不同的货币单位输入了预算值,这会产生一个个别月度预算<b>%1</b>。是否"
+"用 该数值填写月度预算?"
+
+#: widgets/kmymoneybriefschedule.cpp:62
+#, fuzzy
+msgid "Use this button to skip this transaction"
+msgstr "用此按钮来记录交易"
+
+#: widgets/kmymoneybriefschedule.cpp:67
+msgid "Record this transaction into the register"
+msgstr "将此交易记录到账簿中"
+
+#: widgets/kmymoneybriefschedule.cpp:68
+msgid "Use this button to record this transaction"
+msgstr "用此按钮来记录交易"
+
+#: widgets/kmymoneybriefschedule.cpp:96
+msgid "%1 of %2"
+msgstr "%1 of %2"
+
+#: widgets/kmymoneybriefschedule.cpp:109
+msgid "Payment on %1 for %2 with %3 transactions remaining occuring %4."
+msgstr "为%1在%2进行了一次支付,共需%3次交易还剩%4次交易。"
+
+#: widgets/kmymoneybriefschedule.cpp:115
+msgid "Payment on %1 for %2 occuring %4."
+msgstr "为%1在%2进行了一次支付,还剩%4次交易。"
+
+#: widgets/kmymoneybriefschedule.cpp:136
+msgid "%1 days overdue (%2 occurences)."
+msgstr "过期%1天(出现%2次)。"
+
+#: widgets/register.cpp:55
+msgid "Post date"
+msgstr "创建日期"
+
+#: widgets/register.cpp:56
+msgid "Date entered"
+msgstr "输入的日期"
+
+#: widgets/register.cpp:60
+msgid "Entry order"
+msgstr "条目顺序"
+
+#: widgets/register.cpp:63
+msgid "Reconcile state"
+msgstr "对帐状态"
+
+#: widgets/register.cpp:440
+msgid ""
+"_: Deposits onto account\n"
+"Deposits"
+msgstr "存款"
+
+#: widgets/register.cpp:442
+msgid ""
+"_: Payments towards credit card\n"
+"Payments"
+msgstr "偿还"
+
+#: widgets/register.cpp:446
+msgid ""
+"_: Payments made from account\n"
+"Payments"
+msgstr "支付"
+
+#: widgets/register.cpp:448
+msgid ""
+"_: Payments made with credit card\n"
+"Charges"
+msgstr "借款"
+
+#: widgets/register.cpp:736
+msgid ""
+"_: Payment made from account\n"
+"Payment"
+msgstr "支付"
+
+#: widgets/register.cpp:737
+msgid ""
+"_: Deposit into account\n"
+"Deposit"
+msgstr "存款"
+
+#: widgets/register.cpp:813
+msgid ""
+"_: Payment made with credit card\n"
+"Charge"
+msgstr "借款"
+
+#: widgets/register.cpp:814
+msgid ""
+"_: Payment towards credit card\n"
+"Payment"
+msgstr "偿还"
+
+#: widgets/register.cpp:818 widgets/register.cpp:824
+msgid ""
+"_: Decrease of asset/liability value\n"
+"Decrease"
+msgstr "减少"
+
+#: widgets/register.cpp:819 widgets/register.cpp:823
+msgid ""
+"_: Increase of asset/liability value\n"
+"Increase"
+msgstr "增加"
+
+#: widgets/register.cpp:2280
+msgid "Prior transactions possibly filtered"
+msgstr "之前的交易可能已被过滤"
+
+#: widgets/register.cpp:2284
+msgid "Last reconciliation"
+msgstr "上次对帐"
+
+#: widgets/register.cpp:2291
+#, c-format
+msgid "Online Statement Balance: %1"
+msgstr "网上对帐单余额:%1"
+
+#: widgets/register.cpp:2295
+msgid "This year"
+msgstr "本年度"
+
+#: widgets/kmymoneycombo.cpp:674 widgets/register.cpp:2296
+msgid "Last month"
+msgstr "上个月"
+
+#: widgets/register.cpp:2297
+msgid "This month"
+msgstr "本月"
+
+#: widgets/register.cpp:2298
+msgid "Last week"
+msgstr "上周"
+
+#: widgets/register.cpp:2299
+msgid "This week"
+msgstr "本周"
+
+#: widgets/register.cpp:2300
+msgid "Yesterday"
+msgstr "昨天"
+
+#: widgets/kmymoneycombo.cpp:666 widgets/register.cpp:2301
+msgid "Today"
+msgstr "本日"
+
+#: widgets/register.cpp:2302 widgets/register.cpp:2307
+msgid "Future transactions"
+msgstr "未来的交易"
+
+#: widgets/register.cpp:2303
+msgid "Next week"
+msgstr "下周"
+
+#: widgets/kmymoneycalendar.cpp:131 widgets/register.cpp:2304
+msgid "Next month"
+msgstr "下个月"
+
+#: widgets/kmymoneycombo.cpp:670 widgets/register.cpp:2315
+msgid "Current fiscal year"
+msgstr "本财年"
+
+#: widgets/register.cpp:2316
+msgid "Previous fiscal year"
+msgstr "上一财年"
+
+#: widgets/register.cpp:2317
+msgid "Next fiscal year"
+msgstr "下一财年"
+
+#: widgets/register.cpp:2349
+msgid ""
+"_: Unknown payee\n"
+"Unknown"
+msgstr "未知收/付款人"
+
+#: widgets/register.cpp:2368
+msgid ""
+"_: Unknown category\n"
+"Unknown"
+msgstr "未知交易类别"
+
+#: widgets/register.cpp:2387
+msgid ""
+"_: Unknown security\n"
+"Unknown"
+msgstr "未知证券"
+
+#: widgets/klistviewsearchline.cpp:249
+msgid "Search Columns"
+msgstr "搜索栏目"
+
+#: widgets/klistviewsearchline.cpp:251
+msgid "All Visible Columns"
+msgstr "全部可见栏目"
+
+#: widgets/klistviewsearchline.cpp:266
+msgid ""
+"_: Column number %1\n"
+"Column No. %1"
+msgstr "No.%1 栏"
+
+#: widgets/klistviewsearchline.cpp:461 widgets/registersearchline.cpp:286
+msgid "S&earch:"
+msgstr "搜索(&S):"
+
+#: widgets/kmymoneyaccountselector.cpp:110
+#: widgets/kmymoneyaccountselector.cpp:371
+msgid "Income categories"
+msgstr "收入类型"
+
+#: widgets/kmymoneyaccountselector.cpp:349
+#: widgets/kmymoneyaccountselector.cpp:350
+msgid "Favorites"
+msgstr "收藏"
+
+#: widgets/kmymoneyaccountselector.cpp:357
+msgid "Asset accounts"
+msgstr "资产账户"
+
+#: widgets/kmymoneyaccountselector.cpp:364
+msgid "Liability accounts"
+msgstr "负债账户"
+
+#: widgets/kmymoneyaccountselector.cpp:381
+msgid "Expense categories"
+msgstr "支出类型"
+
+#: widgets/kmymoneyaccountselector.cpp:391
+msgid "Equity accounts"
+msgstr "产权账户"
+
+#: widgets/kmymoneyaccounttreebase.cpp:120
+msgid "Total Balance"
+msgstr "总余额"
+
+#: widgets/kmymoneyaccounttreebase.cpp:124
+msgid "Total Value"
+msgstr "总值"
+
+#: widgets/registersearchline.cpp:75
+msgid ""
+"_: label for status combo\n"
+"Stat&us"
+msgstr "状态(&u)"
+
+#: widgets/registersearchline.cpp:79
+msgid "Any status"
+msgstr "任意状态"
+
+#: widgets/registersearchline.cpp:80
+msgid "Imported"
+msgstr "导入"
+
+#: widgets/registersearchline.cpp:81
+msgid "Matched"
+msgstr "匹配"
+
+#: widgets/registersearchline.cpp:82
+msgid "Erroneous"
+msgstr "有错"
+
+#: widgets/registersearchline.cpp:83
+msgid "Not marked"
+msgstr "未标记"
+
+#: widgets/kmymoneyaccounttree.cpp:54
+msgid ""
+"_: Column heading for category in tax report\n"
+"Tax"
+msgstr "税"
+
+#: widgets/kmymoneyaccounttree.cpp:58
+msgid ""
+"_: Column heading for VAT category\n"
+"VAT"
+msgstr "增值税"
+
+#: widgets/kmymoneywizard.cpp:101
+msgid "Continue with next page"
+msgstr "下一页继续"
+
+#: widgets/kmymoneywizard.cpp:103
+msgid "Finish wizard"
+msgstr "结束向导"
+
+#: widgets/kmymoneywizard.cpp:121
+msgid "&Back"
+msgstr "返回(&B)"
+
+#: widgets/kmymoneywizard.cpp:122
+msgid "&Next"
+msgstr "继续(&N)"
+
+#: widgets/kmymoneywizard.cpp:123
+msgid "&Finish"
+msgstr "完成(&F)"
+
+#: widgets/kmymoneywizard.cpp:274
+msgid "Step %1 of %2"
+msgstr "第%1步,共%2步"
+
+#: widgets/kmymoneydateinput.cpp:235
+msgid ""
+"_: Enter todays date into date input widget\n"
+"T"
+msgstr "今天"
+
+#: widgets/transactionform.cpp:302
+msgid "&Deposit"
+msgstr "存款(&D)"
+
+#: widgets/transactionform.cpp:304 widgets/transactionform.cpp:313
+#: widgets/transactionform.cpp:323 widgets/transactionform.cpp:333
+msgid "&Transfer"
+msgstr "转账(&r)"
+
+#: widgets/transactionform.cpp:306
+msgid "&Withdrawal"
+msgstr "取款(&W)"
+
+#: widgets/transactionform.cpp:311
+msgid "&Payment"
+msgstr "偿还(&P)"
+
+#: widgets/transactionform.cpp:315
+msgid "&Charge"
+msgstr "借款(&C)"
+
+#: widgets/transactionform.cpp:321 widgets/transactionform.cpp:335
+msgid "&Decrease"
+msgstr "减少(&D)"
+
+#: widgets/transactionform.cpp:325 widgets/transactionform.cpp:331
+msgid "&Increase"
+msgstr "增加(&I)"
+
+#: widgets/kmymoneyscheduledcalendar.cpp:42
+msgid "Select Schedules"
+msgstr "选择定期事件"
+
+#: widgets/kmymoneycalendar.cpp:108
+msgid "Select Style"
+msgstr "选择样式"
+
+#: widgets/kmymoneycalendar.cpp:128
+msgid "Choose Style"
+msgstr "选择样式"
+
+#: widgets/kmymoneycalendar.cpp:129
+msgid "Next year"
+msgstr "下一年"
+
+#: widgets/kmymoneycalendar.cpp:130
+msgid "Previous year"
+msgstr "前一年"
+
+#: widgets/kmymoneycalendar.cpp:132
+msgid "Previous month"
+msgstr "前一个月"
+
+#: widgets/kmymoneycalendar.cpp:133
+msgid "Select a week"
+msgstr "请选择星期"
+
+#: widgets/kmymoneycalendar.cpp:134
+msgid "Select a month"
+msgstr "请选择月份"
+
+#: widgets/kmymoneycalendar.cpp:135
+msgid "Select a year"
+msgstr "请选择年份"
+
+#: widgets/kmymoneycalendar.cpp:249
+msgid "Week XX"
+msgstr "星期XX"
+
+#: widgets/kmymoneycalendar.cpp:264 widgets/kmymoneycalendar.cpp:300
+#, c-format
+msgid "Week %1"
+msgstr "%1 星期"
+
+#: widgets/rc.cpp:1
+msgid "Account Types"
+msgstr "账户类型"
+
+#: widgets/rc.cpp:3
+msgid "Detailed description"
+msgstr "详细描述"
+
+#: widgets/rc.cpp:18
+msgid "Period"
+msgstr "周期"
+
+#: widgets/rc.cpp:21
+msgid "Individual"
+msgstr "个人"
+
+#: widgets/rc.cpp:23
+msgid ""
+"This page allows you to set the parameters for encrypted file storage of "
+"your <b>KMyMoney</b> data based on <b>GPG</b>.<p>\n"
+"Acces to the settings is disabled if <b>GPG</b> could not be detected on "
+"your system. In this case, please make sure that <b>GPG</b> is working "
+"properly for the current user.<p>\n"
+"The <i>Recovery encryption</i> group is only accessible, if the necessary "
+"key for <b>kmymoney-recover@users.sourceforge.net</b> with id 0x8AFDDC8E is "
+"found."
+msgstr ""
+"在本页中您可以对使用<b>GPG</b>加密KMyMoney文件时用的各项参数进行设置。\n"
+"如果在您的系统中检测不到GPG,则相应的参数设置都会被关闭。在这种情况下,请确"
+"保 GPG在当前用户环境中可以正常工作。\n"
+"只有当id为0x8AFDDC8E的<b>kmymoney-recover@users.sourceforge.net</b>的密钥能被"
+"找到时, 才可以访问<i>Recovery encryption</i>组。"
+
+#: widgets/rc.cpp:26
+msgid ""
+"Enter the id of the key you want to use for data encryption. This can either "
+"be an e-mail address or the hexadecimal key id. In case of the key id don't "
+"forget the leading <i>0x</i>."
+msgstr ""
+"请输入您想要用于数据加密的密钥id。这可以是一个邮件地址,也可以是一个16进制的"
+"密钥id。 如果是密钥id,请别忘了输入前缀<i>0x</i>。"
+
+#: widgets/rc.cpp:27
+msgid "User ID"
+msgstr "用户ID"
+
+#: widgets/rc.cpp:29
+msgid "Recovery encryption"
+msgstr "恢复加密"
+
+#: widgets/rc.cpp:30
+msgid "Also encrypt with kmymoney-recover key"
+msgstr "同时使用KMyMoney恢复密钥加密。"
+
+#: widgets/rc.cpp:32
+msgid ""
+"You can specify to encrypt the data also with the KMyMoney recover key. Only "
+"the core KMyMoney developers are in posession of the respective private key "
+"required to read back such encrypted data.<p>\n"
+"\n"
+"This mechanism is provided for the case that you have lost your key and "
+"cannot access your data anymore. With this option activated, the KMyMoney "
+"developers can decrypt the data and supply you with it in a readable form. "
+"Please be prepared, that you have to answer a few detailed questions about "
+"the contents of your data before we will send it out."
+msgstr ""
+"您可以指定同时使用KMyMoney恢复密钥加密数据。只有KMyMoney开发小组中的核心成员"
+"拥有相应的私钥,以读取被这样加密的数据。<p>\n"
+"\n"
+"此机制用来预防您丢失了自己的密钥并且无法访问数据的情况。 当此项打开时,"
+"KMyMoney的开发者可以对数据进行解密并将解密后的数据发还给您。在发还数据前,您"
+"还需要回答一些关于您的数据的详细问题以确保它不会被错误的发给别人。"
+
+#: widgets/rc.cpp:51
+msgid "PriceInfo"
+msgstr "价格信息"
+
+#: widgets/rc.cpp:52
+msgid "Report Tab"
+msgstr "交易标签"
+
+#: widgets/rc.cpp:53
+msgid "<p>On this tab, you set the basic properties of this report.</p>"
+msgstr "<p>您在此标签中设置此报表的属性。</p>"
+
+#: widgets/rc.cpp:54
+msgid "Report Name"
+msgstr "报表名称"
+
+#: widgets/rc.cpp:55
+msgid "<p>Choose a name for this report.</p>"
+msgstr "<p>为此报表选择一个名称</p>"
+
+#: widgets/rc.cpp:57
+msgid "<p>Enter a comment to help you remember the details of this report.</p>"
+msgstr "<p>输入一段备注,以帮助您回忆此报告的详细信息。</p>"
+
+#: widgets/rc.cpp:58
+msgid "Convert values to base currency"
+msgstr "将数值转换为基准货币金额"
+
+#: widgets/rc.cpp:59
+msgid ""
+"_: Convert 'em!!\n"
+"<p>Select this option to convert all values in the report to your base "
+"currency.</p><p>Leave it unchecked if you'd like to see values in their "
+"original currency.</p><p>If currencies are not converted, then subtotals "
+"will not be shown.</p>"
+msgstr ""
+"<p>选中此选项,以将报告中的全部数值单位转换为您的基准货币。</p><p>如果你希望"
+"这些数值 以它们的原始货币单位显示,则应保持该选项的未选中状态。</p><p>如果没"
+"有进行货币单位转换, 则将不会显示子合计项目。</p>"
+
+#: widgets/rc.cpp:60
+msgid "Mark as a favorite report"
+msgstr "标为偏好报表"
+
+#: widgets/rc.cpp:61
+msgid ""
+"<p>Select this option to notate this report as one of your favorites.</"
+"p><p>All your favorite reports are grouped in one place on the report list "
+"for easy access.</p>"
+msgstr ""
+"<p>选中此选项表示此报表是您的偏好报表</p><p>在报表视图中,您的所有偏好报表会"
+"被组织在一起,以便于访问。</p>"
+
+#: widgets/rc.cpp:62 widgets/rc.cpp:88
+msgid "Rows/Columns Tab"
+msgstr "行/栏目标签"
+
+#: widgets/rc.cpp:63 widgets/rc.cpp:89
+msgid ""
+"<p>On this tab, you configure how you'd like the rows and columns to be "
+"selected and organized.</p>"
+msgstr "<p>在此标签中,你配置如何对选中的行和栏目进行组织。</p>"
+
+#: widgets/rc.cpp:69 widgets/rc.cpp:81
+msgid ""
+"<p>Choose what kind of accounts to display as the rows of this report.</p>"
+msgstr "<p>选择使用哪类账户作为此报表的行</p>"
+
+#: widgets/rc.cpp:71
+msgid "Columns"
+msgstr "栏目"
+
+#: widgets/rc.cpp:75
+msgid "Bi-Monthly"
+msgstr "每两个月"
+
+#: widgets/rc.cpp:78
+msgid "<p>Choose how large of a time period each column should encompass</p>"
+msgstr "<p>选择在每项栏目中应该包含多长的时间间隔</p>"
+
+#: widgets/rc.cpp:79
+msgid "Income & Expenses"
+msgstr "收入与支出"
+
+#: widgets/rc.cpp:80
+msgid "Assets & Liabilities"
+msgstr "资产与负债"
+
+#: widgets/rc.cpp:82
+msgid "Rows"
+msgstr "行"
+
+#: widgets/rc.cpp:83
+msgid "Show totals column"
+msgstr "显示总计栏"
+
+#: widgets/rc.cpp:84
+#, fuzzy
+msgid "Average days"
+msgstr "平均"
+
+#: widgets/rc.cpp:85
+#, fuzzy
+msgid "Include scheduled transactions"
+msgstr "包含计划交易"
+
+#: widgets/rc.cpp:86
+#, fuzzy
+msgid "Include transfers"
+msgstr "包含转账"
+
+#: widgets/rc.cpp:87
+msgid "Include unused accounts/categories"
+msgstr "包含未使用的账户/交易类别"
+
+#: widgets/rc.cpp:90
+msgid "Organize by:"
+msgstr "以何种方式组织:"
+
+#: widgets/rc.cpp:92
+msgid "Top Categories"
+msgstr "顶级交易类别"
+
+#: widgets/rc.cpp:95
+msgid "Top Accounts"
+msgstr "顶级账户"
+
+#: widgets/rc.cpp:98
+msgid "<p>Choose how to group the transactions in this report</p>"
+msgstr "<p>选择如何在此报表中对交易分组</p>"
+
+#: widgets/rc.cpp:99
+msgid "Show Columns"
+msgstr "显示栏目"
+
+#: widgets/rc.cpp:100
+msgid ""
+"<p>Choose which columns should be shown in the report.</p><p>The date and "
+"transaction amount are always shown.</p>"
+msgstr "<p>选择应该显示在报表中的栏目。</p><p>总是会显示日期和交易金额。</p>"
+
+#: widgets/rc.cpp:102
+msgid "<p>Select this option to show the Memo column</p>"
+msgstr "<p>选中此项以显示备注栏</p>"
+
+#: widgets/rc.cpp:104
+msgid "<p>Select this option to show the Shares column for investments</p>"
+msgstr "<p>选中此项为投资交易显示股份栏</p>"
+
+#: widgets/rc.cpp:106
+msgid "<p>Select this option to show the Price column for investments</p>"
+msgstr "<p>选中此项为投资交易显示价格栏</p>"
+
+#: widgets/rc.cpp:108
+msgid "<p>Select this option to show the Reconciled column</p>"
+msgstr "<p>选中此项以显示清算标志栏</p>"
+
+#: widgets/rc.cpp:110
+msgid "<p>Select this option to show the Account column</p>"
+msgstr "<p>选中此项以显示账户栏</p>"
+
+#: widgets/rc.cpp:112
+msgid "<p>Select this option to show the Number column</p>"
+msgstr "<p>选中此项以显示编号栏</p>"
+
+#: widgets/rc.cpp:114
+msgid "<p>Select this option to show the Payee column</p>"
+msgstr "<p>选中此项以显示收款人栏</p>"
+
+#: widgets/rc.cpp:116
+msgid "<p>Select this option to show the Category column</p>"
+msgstr "<p>选中此项以显示交易类别栏</p>"
+
+#: widgets/rc.cpp:118
+msgid "<p>Select this option to show the Action column</p>"
+msgstr "<p>选中此项以显示动作栏</p>"
+
+#: widgets/rc.cpp:120
+msgid "<p>Select this option to show the Running balance column</p>"
+msgstr "<p>选中此项以显示动态结算余额栏</p>"
+
+#: widgets/rc.cpp:121
+msgid "Include only Loan accounts"
+msgstr "仅包含贷款账户"
+
+#: widgets/rc.cpp:122
+msgid "Include only Investment accounts"
+msgstr "仅包含投资账户"
+
+#: widgets/rc.cpp:123 widgets/rc.cpp:127
+msgid ""
+"<p>Check this box to include only those categories which have been marked to "
+"\"Include on Tax Reports\"</p>"
+msgstr "<p>选中此复选框,以仅包含那些被标为“包含在税务报表中”的交易类别</p>"
+
+#: widgets/rc.cpp:124
+msgid "Hide Split Transaction Details"
+msgstr "隐藏交易划分详细信息"
+
+#: widgets/rc.cpp:125
+msgid ""
+"Do not display the individual transactions that make up a split transaction"
+msgstr "不显示组成划分交易的各个交易"
+
+#: widgets/rc.cpp:126
+msgid "Include only Tax categories"
+msgstr "只包含税务交易类别"
+
+#: widgets/rc.cpp:128
+msgid "Chart Tab"
+msgstr "图形标签页"
+
+#: widgets/rc.cpp:129
+msgid "<p>On this tab, you configure the chart drawn forthis report.</p>"
+msgstr "<p>在此标签页中,你可以配置为此报表画的图。</p>"
+
+#: widgets/rc.cpp:130
+msgid "Chart Type"
+msgstr "图形类型"
+
+#: widgets/rc.cpp:131
+msgid "<p>Select what form you would like the chart to be drawn as.</p>"
+msgstr "<p>选择您想要画的图形的类型。</p>"
+
+#: widgets/rc.cpp:132
+msgid "Line"
+msgstr "线图"
+
+#: widgets/rc.cpp:133
+msgid "Bar"
+msgstr "柱状图"
+
+#: widgets/rc.cpp:134
+msgid "Stacked Bar"
+msgstr "堆叠柱状图"
+
+#: widgets/rc.cpp:135
+msgid "Pie"
+msgstr "饼图"
+
+#: widgets/rc.cpp:136
+msgid "Ring"
+msgstr "环状图"
+
+#: widgets/rc.cpp:137
+msgid "Show grid lines"
+msgstr "显示栅格线"
+
+#: widgets/rc.cpp:138
+msgid ""
+"<p>Select this option to show horizontal and vertical grid lines on the "
+"chart.</p>"
+msgstr "<p>选中此项时,在图形中显示水平和垂直栅格线。</p>"
+
+#: widgets/rc.cpp:139
+msgid "Draw values on chart"
+msgstr "在图形中显示数值"
+
+#: widgets/rc.cpp:140
+msgid ""
+"<p>Select this option to draw the numeric values for data points next to "
+"their plot location.</p>"
+msgstr "<p>选中此项时,在数据点旁边显示对应的数值</p>"
+
+#: widgets/rc.cpp:141
+msgid "Show as chart by default"
+msgstr "缺省显示为图形"
+
+#: widgets/rc.cpp:142
+msgid ""
+"<p>Select this option to cause the report to be shown as a chart when you "
+"first open the report. Otherwise, it will come up as a text report.</p>"
+msgstr ""
+"<p>选中此项后,当第一次打开报表时,报表显示为图形。否则,报表将以文字报表形式"
+"显示。</p>"
+
+#: widgets/rc.cpp:143
+msgid "Line width"
+msgstr ""
+
+#: widgets/rc.cpp:144
+#, fuzzy
+msgid "<p>Select what width should be used to draw the line on the chart</p>"
+msgstr "<p>选中此项时,在图形中显示水平和垂直栅格线。</p>"
+
+#: widgets/rc.cpp:145
+msgid "ReportControl"
+msgstr "报表控件"
+
+#: widgets/rc.cpp:149
+msgid "Configure this report"
+msgstr "配置此报表"
+
+#: widgets/rc.cpp:151
+msgid "Create a new report based on this one"
+msgstr "仿照此报表新建一个报表"
+
+#: widgets/rc.cpp:153
+msgid "Copy this report to the clipboard"
+msgstr "将此报价拷贝到剪贴板中"
+
+#: widgets/rc.cpp:155
+msgid "Export this report as an HTML or CSV file"
+msgstr "将此报表以HTML或者CVS格式导出"
+
+#: widgets/rc.cpp:157
+msgid "Permanently delete this report"
+msgstr "永久删除此报表"
+
+#: widgets/rc.cpp:159
+msgid "Close this window"
+msgstr "关闭此窗口"
+
+#: widgets/rc.cpp:162
+msgid "n of n"
+msgstr "n of n"
+
+#: widgets/rc.cpp:166
+msgid "Account:"
+msgstr "账户:"
+
+#: widgets/rc.cpp:168
+msgid "Enter..."
+msgstr "输入..."
+
+#: widgets/rc.cpp:171
+msgid "TransactionSortOptionDecl"
+msgstr "TransactionSortOptionDecl"
+
+#: widgets/rc.cpp:173
+msgid "Sort order"
+msgstr "排序顺序"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Sunday\n"
+"Sun"
+msgstr "日"
+
+#: widgets/kmymoneydatetbl.cpp:131
+msgid ""
+"_: Saturday\n"
+"Sat"
+msgstr "六"
+
+#: widgets/kmymoneydatetbl.cpp:171 widgets/kmymoneydatetbl.cpp:178
+msgid "Week %1 for year %2."
+msgstr "%2年%1月"
+
+#: widgets/kmymoneycombo.cpp:417
+msgid "ATM"
+msgstr "ATM取款"
+
+#: widgets/kmymoneycombo.cpp:418
+msgid "Withdrawal"
+msgstr "取款"
+
+#: widgets/kmymoneycombo.cpp:421
+msgid "Cheque"
+msgstr "支票"
+
+#: widgets/kmymoneycombo.cpp:469
+msgid ""
+"_: Activity for expense categories\n"
+"Paid"
+msgstr "已支付"
+
+#: widgets/kmymoneycombo.cpp:470
+msgid ""
+"_: Activity for income categories\n"
+"Received"
+msgstr "已收到"
+
+#: widgets/kmymoneycombo.cpp:519
+msgid "Reinvest dividend"
+msgstr "将红利继续用于投资"
+
+#: widgets/kmymoneycombo.cpp:664
+msgid "All dates"
+msgstr "所有日期"
+
+#: widgets/kmymoneycombo.cpp:665
+msgid "As of today"
+msgstr "就今天而言"
+
+#: widgets/kmymoneycombo.cpp:667
+msgid "Current month"
+msgstr "本月"
+
+#: widgets/kmymoneycombo.cpp:668
+msgid "Current quarter"
+msgstr "本季度"
+
+#: widgets/kmymoneycombo.cpp:669
+msgid "Current year"
+msgstr "本年度"
+
+#: widgets/kmymoneycombo.cpp:671
+msgid "Month to date"
+msgstr "到某天为止的一个月内"
+
+#: widgets/kmymoneycombo.cpp:672
+msgid "Year to date"
+msgstr "到某天为止的一年内"
+
+#: widgets/kmymoneycombo.cpp:673
+msgid "Year to month"
+msgstr "年到月"
+
+#: widgets/kmymoneycombo.cpp:675
+msgid "Last year"
+msgstr "上年度"
+
+#: widgets/kmymoneycombo.cpp:676
+msgid "Last fiscal year"
+msgstr "上财年"
+
+#: widgets/kmymoneycombo.cpp:677
+msgid "Last 7 days"
+msgstr "前7天"
+
+#: widgets/kmymoneycombo.cpp:678
+msgid "Last 30 days"
+msgstr "之前30天内"
+
+#: widgets/kmymoneycombo.cpp:679
+msgid "Last 3 months"
+msgstr "前3个月"
+
+#: widgets/kmymoneycombo.cpp:680
+msgid "Last quarter"
+msgstr "上季度"
+
+#: widgets/kmymoneycombo.cpp:681
+msgid "Last 6 months"
+msgstr "前6个月"
+
+#: widgets/kmymoneycombo.cpp:682
+msgid "Last 11 months"
+msgstr "前11个月"
+
+#: widgets/kmymoneycombo.cpp:683
+msgid "Last 12 months"
+msgstr "前12个月"
+
+#: widgets/kmymoneycombo.cpp:684
+msgid "Next 7 days"
+msgstr "今后7天"
+
+#: widgets/kmymoneycombo.cpp:685
+msgid "Next 30 days"
+msgstr "今后30天"
+
+#: widgets/kmymoneycombo.cpp:686
+msgid "Next 3 months"
+msgstr "今后3个月"
+
+#: widgets/kmymoneycombo.cpp:687
+msgid "Next quarter"
+msgstr "下季度"
+
+#: widgets/kmymoneycombo.cpp:688
+msgid "Next 6 months"
+msgstr "今后6个月"
+
+#: widgets/kmymoneycombo.cpp:689
+msgid "Next 12 months"
+msgstr "今后12个月"
+
+#: widgets/kmymoneycombo.cpp:690
+msgid "Last 3 months to next 3 months"
+msgstr "前3个月到今后3个月"
+
+#: widgets/kmymoneycombo.cpp:691
+msgid "User defined"
+msgstr "用户自定义"
+
+#~ msgid "Reset"
+#~ msgstr "重置"
+
+#~ msgid "No plugins loaded"
+#~ msgstr "未载入插件"
+
+#~ msgid "Create schedule..."
+#~ msgstr "创建计划..."
+
+#~ msgid "New schedule..."
+#~ msgstr "新建交易计划..."
+
+#~ msgid "Edit schedule..."
+#~ msgstr "编辑交易计划..."
+
+#~ msgid "Delete schedule..."
+#~ msgstr "删除交易计划..."
+
+#~ msgid "Duplicate schedule"
+#~ msgstr "复制交易计划"
+
+#~ msgid "Enter schedule..."
+#~ msgstr "输入交易计划..."
+
+#~ msgid "Skip schedule..."
+#~ msgstr "跳过交易计划..."
+
+#, fuzzy
+#~ msgid "Adjusting schedules..."
+#~ msgstr "正在调整交易计划..."
+
+#~ msgid "Add schedule"
+#~ msgstr "新建计划"
+
+#~ msgid "Unable to enter transaction for schedule '%1'"
+#~ msgstr "无法为计划“%1”输入交易。"
+
+#~ msgid "Loaded"
+#~ msgstr "已载入"
+
+#~ msgid ""
+#~ "_: Plugin interface description\n"
+#~ "Online access"
+#~ msgstr "在线访问"
+
+#~ msgid ""
+#~ "_: Plugin interface description\n"
+#~ "File import"
+#~ msgstr "文件导入"
+
+#~ msgid "not loaded: %1"
+#~ msgstr "未载入:%1"
+
+#~ msgid "Schedule options"
+#~ msgstr "交易计划选项"
+
+#~ msgid "New Schedule"
+#~ msgstr "新建定期事件"
+
+#~ msgid "Edit Schedule"
+#~ msgstr "编辑交易计划"
+
+#~ msgid "Search transactions containing the following text"
+#~ msgstr "搜索包含下列文本的交易"
+
+#~ msgid "Search"
+#~ msgstr "搜索"
+
+#~ msgid "&Search"
+#~ msgstr "搜索(&S)"
+
+#~ msgid "Start the search"
+#~ msgstr "开始搜索"
+
+#~ msgid "Takes the current criteria and searches for matching transactions."
+#~ msgstr "使用当前判别项查找匹配的交易。"
+
+#~ msgid "Reset all settings"
+#~ msgstr "重置全部设置"
+
+#~ msgid ""
+#~ "Use this to reset all settings to the state they were when the dialog was "
+#~ "opened."
+#~ msgstr "重设所有设置到对话框刚打开时的状态。"
+
+#~ msgid "Use this button to close the window"
+#~ msgstr "使用此按钮关闭窗口"
+
+#~ msgid "Multi-user mode not yet implemented\n"
+#~ msgstr "尚未实现多用户模式\n"
+
+#~ msgid ""
+#~ "Reading the bank list failed with the following error: '%1'. The console "
+#~ "output may have more information."
+#~ msgstr "读取银行列表出错:'%1'。从控制台的输出可以获得更多信息。"
+
+#~ msgid "XMLPP error"
+#~ msgstr "XMLPP 错误"
+
+#~ msgid "Disabled. No online banking services are available"
+#~ msgstr "已禁用。无可用的网银服务。"
+
+#~ msgid "CHECKING"
+#~ msgstr "核对"
+
+#~ msgid "SAVINGS"
+#~ msgstr "储蓄"
+
+#~ msgid "MONEY MARKET"
+#~ msgstr "货币市场"
+
+#~ msgid "CREDIT LINE"
+#~ msgstr "信贷限额"
+
+#~ msgid "CMA"
+#~ msgstr "CMA"
+
+#~ msgid "CREDIT CARD"
+#~ msgstr "信用卡"
+
+#~ msgid "INVESTMENT"
+#~ msgstr "投资"
+
+#~ msgid "UNKNOWN"
+#~ msgstr "未知"
+
+#~ msgid "SQLite requires a file name; try again?"
+#~ msgstr "SQLite需要一个文件名;重试?"
+
+#~ msgid ""
+#~ "<h3>Database Type</h3><p>This box lists all Qt SQL drivers installed on "
+#~ "your system. Select the driver for your database type. If the one you "
+#~ "want is not in the list, you need to install the appropriate driver. See "
+#~ "your distro documentation, or visit the Qt web Site (http://www.trolltech."
+#~ "com) and search for 'SQL drivers'.</p><h3>Database Name</h3><p>The "
+#~ "default database name is KMyMoney, but you may choose some other name if "
+#~ "you like. SQLite has one database per file; selecting this driver opens "
+#~ "the file dialog. For database types other than SQLite and MySql, the "
+#~ "database itself must be pre-created, though KMyMoney will create all "
+#~ "table structures where necessary.</p><h3>Host Name</h3><p>For the average "
+#~ "user, the default name of localhost, being the machine you are currently "
+#~ "using, is correct. For networked databases, enter the host name of the "
+#~ "system where the database is stored. You may need to contact your "
+#~ "database administrator for this information.</p><h3>User Name and "
+#~ "Password</h3><p>Check the permissions set up on your database, or contact "
+#~ "the database administrator, for the correct values to use here. The user "
+#~ "name must be capable of deleting, inserting and updating records. If the "
+#~ "user name is the same as your login name, a password is not normally "
+#~ "required.</p><h3>Generate SQL</h3><p>Click this button to create a text "
+#~ "file and write the commands needed to create the database tables and "
+#~ "other objects. With care, this may be edited if the in-built commands do "
+#~ "not work for your database system.</p><p>Please read the appropriate "
+#~ "chapter of the KMyMoney handbook for further information on database "
+#~ "usage.</p>"
+#~ msgstr ""
+#~ "<h3>数据库类型</h3><p>这个列表框中列出了您系统中安装的所有Qt SQL驱动程"
+#~ "序。 选择与您的数据库类型对应的驱动。如果列表中没有您想要的驱动,那么就需"
+#~ "要您安装正确的驱动程序。请参考您的系统发行版文档,或者访问Qt官方网站"
+#~ "(http://www.trolltech.com)查找SQL驱动程序。</p><h3>数据库名称</h3><p>缺"
+#~ "省的数据库名是KMyMoney, 但您也可以任意选择其他您喜欢的名字。 SQLite的每个"
+#~ "数据库对应一个文件,选择使用该驱动将打开文件对话框。虽然本程序 可以自动创"
+#~ "建需要的数据表结构,但对于 MySQL以外的数据库类型,必须预先在数据库系统中创"
+#~ "建对应的数据库。</p> <h3>主机名</h3><p>对于一般用户,填入“localhost”,即你"
+#~ "正在使用的主机, 就可以了。如果要使用网络服务器上的数据库,则请输入正确的"
+#~ "服务器主机名。</p> <h3>用户名和密码</h3><p>检查你的数据库中的权限设置,或"
+#~ "者与数据库管理员联系,以 确定这里应该填入的正确内容是什么。该数据库用户名"
+#~ "必须具有删除、插入和更新数据库 记录的权限。如果数据库用户名与您的登录用户"
+#~ "名相同,则可能不需要再输入密码。</p> <h3>生成SQL</h3><p>该按钮将会生成"
+#~ "CREATE TABLE命令,并保存到一个文本文件中。 这样,如果“自动生成”命令在你的"
+#~ "数据库系统中不能正常工作,你可以自行手工编辑和修改 这些命令。</p><p>请参考"
+#~ "KMyMoney手册中对应章节的内容,以获取更多关于数据库 使用的知识。</p>"
+
+#~ msgid "Selecting a SQL database"
+#~ msgstr "正在选择一个SQL数据库"
+
+#~ msgid "Accept splits and return to transaction form"
+#~ msgstr "接受拆分并返回交易输入界面。"
+
+#~ msgid ""
+#~ "Use this to accept all changes to the splits and return to the transaction"
+#~ msgstr "接受对拆分的全部改动并返回交易输入界面。"
+
+#~ msgid ""
+#~ "This QIF file contains investment transactions. You are trying to import "
+#~ "this file into an account which is not an investment account. These "
+#~ "transactions will be ignored."
+#~ msgstr ""
+#~ "此QIF文件中包含投资交易,而您正试图将它导入一个非投资账户。这些交易将被忽"
+#~ "略。"
+
+#~ msgid "Invalid account for investments"
+#~ msgstr "非法投资交易"
+
+#~ msgid "Problem adding imported transaction: "
+#~ msgstr "添加导入的交易失败:"
+
+#~ msgid ""
+#~ "This file contains security entries. These are not currently supported "
+#~ "by the QIF importer."
+#~ msgstr "此文件中包含证券项。目前QIF导入器尚不支持此类导入。"
+
+#~ msgid "Unable to import"
+#~ msgstr "无法导入"
+
+#~ msgid "Budget "
+#~ msgstr "预算"
+
+#~ msgid "Forecast "
+#~ msgstr "预测"
+
+#~ msgid "Budget Total"
+#~ msgstr "总体预算"
+
+#~ msgid "Forecast Total"
+#~ msgstr "预测汇总"
+
+#~ msgid "pics/titlelabel_background.png"
+#~ msgstr "pics/titlelabel_background.png"
+
+#~ msgid "Incomes and Expenses This Month"
+#~ msgstr "本月收入和支出"
+
+#~ msgid "Incomes"
+#~ msgstr "收入"
+
+#~ msgid "Schedules This Month"
+#~ msgstr "本月计划"
+
+#~ msgid "&Ok"
+#~ msgstr "确定(&O)"
+
+#~ msgid "Accepts the value and stores them"
+#~ msgstr "接受这些值并保存。"
+
+#~ msgid "Use this to accept all values and close the dialog."
+#~ msgstr "接受所有值并关闭对话框。"
+
+#~ msgid "Cancel the operation"
+#~ msgstr "取消操作"
+
+#~ msgid "Use this to dismiss all the changes made in this dialog."
+#~ msgstr "取消此对话框内的所有变动"
+
+#~ msgid "Abort operation"
+#~ msgstr "终止操作"
+
+#~ msgid "Use this to abort the export operation"
+#~ msgstr "终止导出操作"
+
+#~ msgid "Start the backup operation"
+#~ msgstr "开始备份操作。"
+
+#~ msgid "Pressing this button starts the backup operation."
+#~ msgstr "按下此键以开始备份操作"
+
+#~ msgid "Cancel the backup operation"
+#~ msgstr "取消备份操作"
+
+#~ msgid "Use this to abort the backup and to return to KMyMoney."
+#~ msgstr "用它来终止备份操作并返回KMyMoney。"
+
+#~ msgid "Reject all changes to the splits and return to transaction form"
+#~ msgstr "拒绝所有改动并返回交易输入界面。"
+
+#~ msgid ""
+#~ "Use this to reject all changes to the splits and return to the transaction"
+#~ msgstr "拒绝对拆分的全部改动并返回交易输入界面。"
+
+#~ msgid "Close dialog"
+#~ msgstr "关闭对话框"
+
+#~ msgid "Use this to close the dialog and abort the operation"
+#~ msgstr "使用它来关闭对话框并终止当前操作。"
+
+#~ msgid "Use this to accept and store data"
+#~ msgstr "用它来接受并保存输入的数据。"
+
+#~ msgid "Delete the selected profile"
+#~ msgstr "删除选中的配置。"
+
+#~ msgid "Use this to delete the selected profile"
+#~ msgstr "用它来删除选中的配置"
+
+#~ msgid "Edit ..."
+#~ msgstr "编辑..."
+
+#~ msgid "Use this to accept the data."
+#~ msgstr "接受数据"
+
+#~ msgid "Reject all changes to the data and closes the dialog"
+#~ msgstr "拒绝所有的改动并关闭对话框。"
+
+#~ msgid "Use this to reject all changes."
+#~ msgstr "拒绝所有改动"
+
+#~ msgid "Scan"
+#~ msgstr "扫描"
+
+#~ msgid "Automatically create missing payees"
+#~ msgstr "自动创建未存在的收款人"
+
+#~ msgid "Remove this price information from the price history"
+#~ msgstr "从价格历史中删除此价格信息"
+
+#~ msgid "Create a new price information entry."
+#~ msgstr "建立新的价格信息项。"
+
+#~ msgid "Accepts the selected action and continues"
+#~ msgstr "接受选择的动作并继续"
+
+#~ msgid ""
+#~ "Use this to accept the selection and continue processing the transaction"
+#~ msgstr "用它来接受选择并继续处理交易"
+
+#~ msgid "Reject any changes"
+#~ msgstr "拒绝任意改动"
+
+#~ msgid "Use this to abort the account/category dialog"
+#~ msgstr "取消账户/交易类别对话框"
+
+#~ msgid "Accept modifications"
+#~ msgstr "接受修改"
+
+#~ msgid "Use this to accept the data and possibly create the account/category"
+#~ msgstr "接受输入的数据并在需要时建立相应的账户/交易类别。"
+
+#~ msgid "New ..."
+#~ msgstr "新建..."
+
+#~ msgid "S&ummary"
+#~ msgstr "摘要(&u)"
+
+#~ msgid "Det&ail"
+#~ msgstr "详细信息(&a)"
+
+#~ msgid "Total Incomes This Month"
+#~ msgstr "本月收入合计"
+
+#~ msgid "Total Expenses This Month"
+#~ msgstr "本月支出合计"
+
+#~ msgid "Scheduled Transfers This Month"
+#~ msgstr "本月计划转账"
+
+#~ msgid "&Use the ledger lens"
+#~ msgstr "在账簿中显示当前交易详细信息(&U)"
+
+#~ msgid ""
+#~ "_: Same transaction if amount differs less than percent.\n"
+#~ "Same transaction if amount differs less than"
+#~ msgstr "如果数额差异小于该百分比,则为同一交易"
+
+#~ msgid "&Create"
+#~ msgstr "新建(&C)"
+
+#~ msgid "Co&nfigure"
+#~ msgstr "配置(&n)"
+
+#~ msgid "Te&xt"
+#~ msgstr "文本(&x)"
+
+#~ msgid "Online &Quotes"
+#~ msgstr "在线报价(&Q)"
+
+#~ msgid "O&K"
+#~ msgstr "确定(&K)"
+
+#~ msgid "&Edit ..."
+#~ msgstr "编辑(&E)..."
+
+#~ msgid "&Delete ..."
+#~ msgstr "删除(&D)..."
+
+#~ msgid "&Yearly"
+#~ msgstr "每年(&Y)"
+
+#~ msgid "Advanced Institution Settings"
+#~ msgstr "高级金融机构设置"
+
+#~ msgid "OFX Direct Connect Settings"
+#~ msgstr "OFX直接连接设置"
+
+#~ msgid "Enable OFX Direct Connect"
+#~ msgstr "打开OFX直接连接"
+
+#~ msgid "FIORG"
+#~ msgstr "FIORG"
+
+#~ msgid ""
+#~ "Failed to retrieve a quote for %1 from %2. Would you like to disable "
+#~ "online price updates for this security?"
+#~ msgstr "从%2获取%1的报价失败。您希望取消此证券的在线价格更新吗?"
+
+#~ msgid "Commodity Editor"
+#~ msgstr "商品编辑器"
+
+#~ msgid "1/"
+#~ msgstr "1/"
+
+#~ msgid "Code"
+#~ msgstr "编号"
+
+#~ msgid "Account Fraction"
+#~ msgstr "账户比例"
+
+#~ msgid "Alt+O"
+#~ msgstr "Alt+O"
+
+#~ msgid "Alt+C"
+#~ msgstr "Alt+C"
+
+#~ msgid "Online Banking"
+#~ msgstr "网上银行业务"
+
+#~ msgid "Setup..."
+#~ msgstr "设置..."
+
+#~ msgid "BANK/BROKER: &lt;Not configured&gt;"
+#~ msgstr "银行/经纪人: &lt;未配置&gt;"
+
+#~ msgid ""
+#~ "This version of KMyMoney has not been compiled with support for online "
+#~ "banking"
+#~ msgstr "该版本的KMyMoney中未编译网银支持。"
+
+#~ msgid "STATUS: Account not configured"
+#~ msgstr "状态:账户未配置"
+
+#~ msgid "Checkings"
+#~ msgstr "活期储蓄"
+
+#~ msgid "R"
+#~ msgstr "R"
+
+#~ msgid "Column 1"
+#~ msgstr "栏目1"
+
+#~ msgid "Transaction History"
+#~ msgstr "交易历史"
+
+#~ msgid "Personal Information"
+#~ msgstr "个人信息"
+
+#~ msgid "Match on key:"
+#~ msgstr "匹配关键字:"
+
+#~ msgid "TextLabel2"
+#~ msgstr "TextLabel2"
+
+#~ msgid "YTD:"
+#~ msgstr "年月日:"
+
+#~ msgid "TextLabel4"
+#~ msgstr "TextLabel4"
+
+#~ msgid "Online update using OFX..."
+#~ msgstr "使用OFX协议在线更新..."
+
+#~ msgid "Match Transaction..."
+#~ msgstr "匹配交易..."
+
+#~ msgid "Cancel Match"
+#~ msgstr "取消交易"
+
+#~ msgid "Match With This Transaction"
+#~ msgstr "与此交易匹配"
+
+#~ msgid "Import %1 Statement..."
+#~ msgstr "导入%1对帐单..."
+
+#~ msgid ""
+#~ "There were %1 errors and %2 warnings found when processing this file. "
+#~ "Would you like to view them?"
+#~ msgstr "在处理该文件时出现%1个错误和%2个报警。您想要看它们吗?"
+
+#~ msgid "Imported Data Warnings"
+#~ msgstr "已导入数据警告"
+
+#~ msgid "Unable to import <b>%1</b> file. There is no such plugin loaded."
+#~ msgstr "无法导入<b>%1</b>文件。未载入相应的处理插件。"
+
+#~ msgid "Function not available"
+#~ msgstr "功能不可用"
+
+#~ msgid "Edit an account"
+#~ msgstr "编辑账户"
+
+#~ msgid ""
+#~ "The currently opened KMyMoney document does not contain a single asset "
+#~ "account. In order to maintain your finances you need at least one asset "
+#~ "account (e.g. your checkings account). KMyMoney will start the \"New "
+#~ "Account Wizard\" now which allows you to create your first asset account."
+#~ msgstr ""
+#~ "当前打开的KMyMoney文件中一个资产账户都没有。至少需要有一个资产账户(如您的"
+#~ "活期账户)才能对您的财务进行管理。接下来KMyMoney将会启动“新账户向导”,它会"
+#~ "引导您建立一个资产账户。"
+
+#~ msgid "No asset account"
+#~ msgstr "没有资产账户"
+
+#~ msgid "%1 (Plugin)..."
+#~ msgstr "%1(插件)..."
+
+#~ msgid "GnuCash Importer"
+#~ msgstr "GnuCash导入器"
+
+#~ msgid "Forecast view"
+#~ msgstr "预测视图"
+
+#~ msgid "Automatic Application Test driver suite"
+#~ msgstr "自动化程序测试驱动套装"
+
+#~ msgid "AppTest"
+#~ msgstr "AppTest"
+
+#~ msgid "Open Configuration Dialog"
+#~ msgstr "打开配置对话框"
+
+#~ msgid "Importing templates..."
+#~ msgstr "正在导入模板..."
+
+#~ msgid "Until today"
+#~ msgstr "到今天为止"
+
+#~ msgid "Use this to abort the dialog"
+#~ msgstr "用它来中止对话框"
+
+#~ msgid "Use this to accept the data and possibly update the exchange rate"
+#~ msgstr "用它来接受输入的数据,并更新汇率。"
+
+#~ msgid "What is the opening balance and date of this account?"
+#~ msgstr "此账户的开户日期和金额?"
+
+#~ msgid "What is the opening balance and date of this brokerage account?"
+#~ msgstr "此托管账户的开户日期和金额?"
+
+#~ msgid "Please enter the payment amount."
+#~ msgstr "请输入支付金额。"
+
+#~ msgid "Please enter the schedule name."
+#~ msgstr "请输入交易计划名称。"
+
+#~ msgid "Please enter the payee name."
+#~ msgstr "请输入收款人姓名。"
+
+#~ msgid "Please select the account."
+#~ msgstr "请选择账户。"
+
+#~ msgid ""
+#~ "Use the checking account type to manage activities on your checking "
+#~ "account e.g. payments, checks and cash card purchases."
+#~ msgstr ""
+#~ "使用活期储蓄账户类型来管理您的活期账户活动,比如付款、支票和现金卡购物等。"
+
+#~ msgid ""
+#~ "Use the savings account type to manage activities on your savings account."
+#~ msgstr "使用存款账户类型来管理您的存款账户活动"
+
+#~ msgid ""
+#~ "Use the credit card account type to manage activities on your credit card."
+#~ msgstr "使用信用卡账户类型来管理您的信用卡活动"
+
+#~ msgid "Use the cash account type to manage activities in your wallet."
+#~ msgstr "使用现金账户类型来管理您的钱包内的资金流动情况"
+
+#~ msgid ""
+#~ "Use the asset account type to manage assets (e.g. your house, car or art "
+#~ "collection)."
+#~ msgstr "使用资产账户类型来管理资产(如房屋、汽车和艺术品收藏等)"
+
+#~ msgid ""
+#~ "Use the liability account type to manage any type of liability except "
+#~ "amortization loans. Use it for taxes you owe or money you borrowed from "
+#~ "friends. For amortization loans like mortgages you should create a loan "
+#~ "account."
+#~ msgstr ""
+#~ "使用负债账户类型来管理除分期贷款外的其它类型负债,如您的欠税,管朋友借的钱"
+#~ "等。对于分期贷款,您应该使用贷款账户来管理。"
+
+#~ msgid ""
+#~ "Use the loan account type to manage amortization loans (e.g. mortgages, "
+#~ "car loan, money you lend, private loans etc.)."
+#~ msgstr ""
+#~ "使用贷款账户类型来管理分期贷款。(如抵押贷款,汽车贷款,个人贷款等等)"
+
+#~ msgid ""
+#~ "Use the investment account to manage your stock, mutual fund and other "
+#~ "investments."
+#~ msgstr "使用投资账户来管理您的股票、共同基金等投资活动。"
+
+#~ msgid "Explanation is not yet available! UnknownAccountType will be set"
+#~ msgstr "未知账户类型将被建立。无相关解释。"
+
+#~ msgid "Direct Debit"
+#~ msgstr "直接提款"
+
+#~ msgid "Direct Deposit"
+#~ msgstr "直接存款"
+
+#~ msgid "Manual Deposit"
+#~ msgstr "手工存款"
+
+#~ msgid "Write Check"
+#~ msgstr "手写支票"
+
+#~ msgid ""
+#~ "The schedule %1 caused an internal problem. Please contact the developers "
+#~ "via e-mail on kmymoney2-developer@lists.sourceforge.net for further "
+#~ "instructions mentioning this problem."
+#~ msgstr ""
+#~ "日常表%1导致了一个内部错误。请通过邮件列表kmymoney2-developer@lists."
+#~ "sourceforge.net与开发者们联系以获得更多信息。"
+
+#~ msgid "Exception in slot split clicked"
+#~ msgstr "Exception in slot split clicked"
+
+#~ msgid "Payee changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "收/付款人已更新。原:“%1”,现:“%2”"
+
+#~ msgid "Category changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "交易类别已更新。原:“%1”,现:“%2”"
+
+#~ msgid "Memo changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "备忘已更新。原:“%1”,现:“%2”"
+
+#~ msgid "Amount changed. Old: \"%1\", New: \"%2\""
+#~ msgstr "金额已更新。原:“%1”,现:“%2”"
+
+#~ msgid "%1 items of the details for the transaction have changed."
+#~ msgstr "交易详细信息中的%1项已改变。"
+
+#~ msgid ""
+#~ "Some occurences that are older than '%1' have not been entered yet.\n"
+#~ "\n"
+#~ "Delete all occurences that have not been entered before this date?"
+#~ msgstr ""
+#~ "在“%1”前的事件尚未被输入。\n"
+#~ "\n"
+#~ "是否删所有未输入的此日期前的事件?"
+
+#~ msgid ""
+#~ "Are you sure you want to enter this occurence which is %1 days after "
+#~ "today?"
+#~ msgstr "您确定要输入此项,它将在%1天之后发生?"
+
+#~ msgid "Error in slotAmountChanged?"
+#~ msgstr "slotAmountChanged出错?"
+
+#~ msgid "The date must lie in the range %1 to %2"
+#~ msgstr "日期必须在时间段%1到%2内。"
+
+#~ msgid "<b>From:</b>"
+#~ msgstr "<b>从:</b>"
+
+#~ msgid ""
+#~ "_: <b>From (account):</b>\n"
+#~ "<b>From:</b>"
+#~ msgstr "<b>从:</b>"
+
+#~ msgid ""
+#~ "_: <b>From:</b>\n"
+#~ "<b>From (account):</b>"
+#~ msgstr "<b>从 (账户):</b>"
+
+#~ msgid "<b>From (account):</b>"
+#~ msgstr "<b>从 (账户):</b>"
+
+#~ msgid "Leave the dialog and return to where you came from."
+#~ msgstr "关闭对话框并返回。"
+
+#~ msgid "Open online help"
+#~ msgstr "打开在线帮助"
+
+#~ msgid ""
+#~ "Opens the online help and shows detailed information about transaction "
+#~ "searching."
+#~ msgstr "打开在线帮助并显示关于交易搜索的详细帮助"
+
+#~ msgid "Cancel the import operation"
+#~ msgstr "取消导入操作"
+
+#~ msgid ""
+#~ "Use this to abort the import and undo all changes made during import."
+#~ msgstr "用它来中止导入,并取消导入过程中的全部改动。"
+
+#~ msgid ""
+#~ "You are about to cancel the entire import. Any changes you have made in "
+#~ "this dialog will be lost. Are you sure you want to cancel?"
+#~ msgstr ""
+#~ "您将要取消整个导入。这将会使您丢失在这个对话框中所做的任何修改。确定要取消"
+#~ "吗?"
+
+#~ msgid "Verify cancel"
+#~ msgstr "验证撤销"
+
+#~ msgid ""
+#~ "The imported data is displayed together with the data already stored in "
+#~ "the file. Imported transactions are shown with a yellow background. "
+#~ "Pressing \"OK\" will accept all transactions, \"Cancel\" will remove all "
+#~ "imported transactions.\n"
+#~ "You may modify the transactions - if need to - before you press \"OK\" or "
+#~ "even delete transactions that have been imported incorrectly (e.g. "
+#~ "duplicate transactions)."
+#~ msgstr ""
+#~ "导入的数据将与文件中原有的数据同时显示,背景为黄色的即为导入的交易。\n"
+#~ "按“确定”键接受所有交易,按“取消”键删除所有导入的交易。\n"
+#~ " 在按下“确定”键之前,您可以对导入的交易进行修改甚至删除。"
+
+#~ msgid "Mount Point:"
+#~ msgstr "挂载点:"
+
+#~ msgid "textLabel2"
+#~ msgstr "textLabel2"
+
+#~ msgid "Edit Scheduled Transfer"
+#~ msgstr "编辑计划发生的转账交易"
+
+#~ msgid "Pay to:"
+#~ msgstr "付给:"
+
+#~ msgid "From:"
+#~ msgstr "来自:"
+
+#~ msgid "To:"
+#~ msgstr "到:"
+
+#~ msgid "Amount:"
+#~ msgstr "金额:"
+
+#~ msgid "Category:"
+#~ msgstr "交易类别:"
+
+#~ msgid "&Split"
+#~ msgstr "拆分(&S)"
+
+#~ msgid "Memo:"
+#~ msgstr "备忘:"
+
+#~ msgid "<b>Name:</b>"
+#~ msgstr "<b>名称:</b>"
+
+#~ msgid "<b>Type:</b>"
+#~ msgstr "<b>类别:</b>"
+
+#~ msgid "<b>Payee:</b>"
+#~ msgstr "<b>收/付款人:</b>"
+
+#~ msgid "<b>Category:</b>"
+#~ msgstr "<b>交易类别:</b>"
+
+#~ msgid "<b>Memo:</b>"
+#~ msgstr "<b>备忘:</b>"
+
+#~ msgid ""
+#~ "_: <b>To (account):</b>\n"
+#~ "<b>To:</b>"
+#~ msgstr "<b>到:</b>"
+
+#~ msgid "<b>Date:</b>"
+#~ msgstr "<b>日期:</b>"
+
+#~ msgid "<b>Amount:</b>"
+#~ msgstr "<b>金额:</b>"
+
+#~ msgid "to"
+#~ msgstr "到"
+
+#~ msgid "from"
+#~ msgstr "来源"
+
+#~ msgid "Equity-Symbol:"
+#~ msgstr "股票代号:"
+
+#~ msgid "New Account"
+#~ msgstr "新建账户"
+
+#~ msgid "Institution Selection"
+#~ msgstr "金融机构选择"
+
+#~ msgid "<u>I</u>nstitution"
+#~ msgstr "<u>I</u>金融机构"
+
+#~ msgid "Account Type Selection"
+#~ msgstr "账户类型选择"
+
+#~ msgid "What is the account number?"
+#~ msgstr "账号是多少?"
+
+#~ msgid ""
+#~ "If you do not know the account number, please leave this field empty. You "
+#~ "can add the account number at any later time in the account details "
+#~ "dialog. The account number is only used by KMyMoney for online banking."
+#~ msgstr ""
+#~ "如果您不知道您的账户帐号,请保持此项空白。您可以在今后任何时间在账户详细信"
+#~ "息对话框中添加账户帐号信息。KMyMoney只有在进行在线银行业务处理时才需要使用"
+#~ "帐号信息。"
+
+#~ msgid "Does this investment account has a brokerage account?"
+#~ msgstr "该投资账户是否有托管账户?"
+
+#~ msgid "What is the currency of this account?"
+#~ msgstr "该账户使用的货币是?"
+
+#~ msgid "&Price"
+#~ msgstr "价格(&P)"
+
+#~ msgid "Account Payment"
+#~ msgstr "账户支付"
+
+#~ msgid ""
+#~ "Do you wish to add a payment for this credit card account to the list of "
+#~ "monthly payments?"
+#~ msgstr "您是否需要在月度支付列表中为此信用卡账户添加一项偿还信息?"
+
+#~ msgid ""
+#~ "The information to create the account has now been collected. Press the "
+#~ "<b>Finish</b> button to actually create the account or the <b>Back</b> "
+#~ "button to modify the settings. The <b>Cancel</b> button will dismiss all "
+#~ "data and leave this wizard.<br>\n"
+#~ "Once the account is successfully created you can enter your transactions "
+#~ "on this account."
+#~ msgstr ""
+#~ "创建此账户需要的信息已被收集。按“完成”键来实际创建此账户,或按“上一步”键来"
+#~ "修改设置。按“取消”键将撤销全部输入并离开向导。当账户成功创建后,您就可以开"
+#~ "始输入关于此账户的交易记录。"
+
+#~ msgid ""
+#~ "Adding a new institution.\n"
+#~ "\n"
+#~ "The only required field is the name, which can be the name of a bank like "
+#~ "Woolwhich, or a descriptive name like Family Cash Accounts."
+#~ msgstr ""
+#~ "创新一个新的金融机构。\n"
+#~ "\n"
+#~ "唯一需要的信息是该机构的名称。它可以是银行的名称比如“中国银行”,也可以是一"
+#~ "个描述性的名称如“我家的现金账户”等。"
+
+#~ msgid "What should happen with the difference?"
+#~ msgstr "应如何处理这些差额?"
+
+#~ msgid "&Change transaction amount into %2"
+#~ msgstr "将交易金额改为%2(&C)"
+
+#~ msgid "&Distribute difference among all splits"
+#~ msgstr "将差额均摊到各拆分中(&D)"
+
+#~ msgid "&Leave unassigned"
+#~ msgstr "保持未指派状态(&L)"
+
+#~ msgid "Account with that name already exists."
+#~ msgstr "与现有账户重名。"
+
+#~ msgid "Category with that name already exists."
+#~ msgstr "与现有交易类别重名。"
+
+#~ msgid "Use this to accept the action and perform it"
+#~ msgstr "用它来接受并执行动作"
+
+#~ msgid "Use this to continue editing the splits"
+#~ msgstr "用它来继续编辑拆分"
+
+#~ msgid "Edit Transfer Schedule"
+#~ msgstr "编辑转账计划"
+
+#~ msgid "Edit Loan Payment Schedule"
+#~ msgstr "编辑贷款偿还计划"
+
+#~ msgid "Edit Deposit Schedule"
+#~ msgstr "编辑存款计划"
+
+#~ msgid "Please specify the account first before you assign splits."
+#~ msgstr "在您拆分交易前,请先指定对应的账户。"
+
+#~ msgid ""
+#~ "The frequency of this schedule must be set to something other than Once"
+#~ msgstr "此计划的频率必须设定为除“一次”之外的其它值。"
+
+#~ msgid "Please fill in the name field."
+#~ msgstr "请填写名称栏目。"
+
+#~ msgid "Please fill in the From account field."
+#~ msgstr "请填写来源账户栏目。"
+
+#~ msgid "Please fill in the To account field."
+#~ msgstr "请填写目标账户项"
+
+#~ msgid "Please fill in the payee field."
+#~ msgstr "请填写收款人栏目。"
+
+#~ msgid "Please fill in the category field."
+#~ msgstr "请填写交易类别栏目。"
+
+#~ msgid "Please fill in ending date"
+#~ msgstr "请填写截止日期。"
+
+#~ msgid "Account from and account to are the same"
+#~ msgstr "来源账户和目的账户相同"
+
+#~ msgid "Exception in loadWidgetsFromSchedule(1)"
+#~ msgstr "Exception in loadWidgetsFromSchedule(1)"
+
+#~ msgid "Exception in loadWidgetsFromSchedule(2)"
+#~ msgstr "Exception in loadWidgetsFromSchedule(2)"
+
+#~ msgid "All split data lost. Please re-enter splits"
+#~ msgstr "丢失全部的拆分信息。请重新输入拆分信息。"
+
+#~ msgid ""
+#~ "The schedule can not be automatically entered when the start date is on "
+#~ "or before todays date."
+#~ msgstr "当起始日期就是今天或者在今天之前时,计划无法自动产生交易记录。"
+
+#~ msgid "The end date can not be set for occurences set to Once"
+#~ msgstr "如果发生频率为“一次”,则无法设置截止日期。"
+
+#~ msgid ""
+#~ "The start date must be greater than today, to automatically enter this "
+#~ "schedule."
+#~ msgstr "如果想让此计划自动产生交易记录,那么计划的起始日期必须晚于今天。"
+
+#~ msgid "Withdrawal or Transfer"
+#~ msgstr "取款或转账"
+
+#~ msgid ""
+#~ "You have specified an %1 category for a %2 schedule. Do you want to keep "
+#~ "it that way?"
+#~ msgstr "您为计划%2指定了交易类别%1。您确定如此吗?"
+
+#~ msgid "Verify category type"
+#~ msgstr "验证交易类别类型"
+
+#~ msgid "Bill or Transfer"
+#~ msgstr "账单或转账"
+
+#~ msgid "General settings"
+#~ msgstr "常规设置"
+
+#~ msgid "Equity/Currency/Value options"
+#~ msgstr "股票/货币/价值选项"
+
+#~ msgid "Accounts View"
+#~ msgstr "账户视图"
+
+#~ msgid "Accounts view settings"
+#~ msgstr "账户视图设置"
+
+#~ msgid "Use the normal institution view"
+#~ msgstr "使用标准金融机构视图"
+
+#~ msgid "Use the new accounts view"
+#~ msgstr "使用新账户视图"
+
+#~ msgid "Restrict by date"
+#~ msgstr "限制日期"
+
+#~ msgid "Restrict by transaction state"
+#~ msgstr "限制交易状态"
+
+#~ msgid "Data Encryption Settings"
+#~ msgstr "数据加密设置"
+
+#~ msgid "List view colour :"
+#~ msgstr "列表视图颜色:"
+
+#~ msgid "1 %2 costs <i>price</i<> %1"
+#~ msgstr "1个%2价格为%1"
+
+#~ msgid ""
+#~ "Do you really want to select %1 as your base currency? This selection can "
+#~ "currently not be modified! If unsure, press 'No' now."
+#~ msgstr ""
+#~ "您真的想选择%1作为您的基准货币吗?目前KMyMoney尚无法修改基准货币!如果不确"
+#~ "定,请先点击“否”键。"
+
+#~ msgid "This feature needs to be implemented."
+#~ msgstr "此功能尚未实现"
+
+#~ msgid "Implementation missing"
+#~ msgstr "未实现的功能"
+
+#~ msgid "Every four week"
+#~ msgstr "每四周"
+
+#~ msgid "Split the amount into different categories."
+#~ msgstr "将金额拆分到不同的交易类型"
+
+#~ msgid "Transfer %1 %2"
+#~ msgstr "转账%1 %2"
+
+#~ msgid "There is no user manual yet"
+#~ msgstr "目前还没有用户手册"
+
+#~ msgid ""
+#~ "*.csv|CSV files\n"
+#~ "*.html|HTML files\n"
+#~ "*.*|All files"
+#~ msgstr ""
+#~ "*.csv|CSV文件\n"
+#~ "*.html|HTML文件\n"
+#~ "*.*|所有文件"
+
+#~ msgid "You currently owe: "
+#~ msgstr "您目前欠款:"
+
+#~ msgid "Reconciled: %1"
+#~ msgstr "已对帐:%1"
+
+#~ msgid "Bill Options"
+#~ msgstr "账单选项"
+
+#~ msgid "New Bill..."
+#~ msgstr "新建账单..."
+
+#~ msgid "Deposit Options"
+#~ msgstr "存款选项"
+
+#~ msgid "New Deposit..."
+#~ msgstr "新建存款..."
+
+#~ msgid "Transfer Options"
+#~ msgstr "转账选项"
+
+#~ msgid "New Transfer..."
+#~ msgstr "新建转账..."
+
+#~ msgid "Unable to setup payee/receiver"
+#~ msgstr "无法设置收/付款人"
+
+#~ msgid "Unable to modify split"
+#~ msgstr "无法修改拆分"
+
+#~ msgid "Unable to modify category"
+#~ msgstr "无法修改交易类别"
+
+#~ msgid "Unable to modify number"
+#~ msgstr "无法修改号码"
+
+#~ msgid "Unable to modify type"
+#~ msgstr "无法修改类型"
+
+#~ msgid "&Check"
+#~ msgstr "活期账户(&C)"
+
+#~ msgid "AT&M"
+#~ msgstr "ATM取款(&M)"
+
+#~ msgid ""
+#~ "An investment transaction can only be modified in the investment view. Do "
+#~ "you want to change to the investment view?"
+#~ msgstr "投资交易只能在投资视图中修改。是否切换到投资视图?"
+
+#~ msgid "Account Options"
+#~ msgstr "账户选项"
+
+#~ msgid "Account Details ..."
+#~ msgstr "账户详细信息..."
+
+#~ msgid "Reconcile ..."
+#~ msgstr "对帐..."
+
+#~ msgid "Mark as ..."
+#~ msgstr "标记为..."
+
+#~ msgid "Move to account ..."
+#~ msgstr "移动到账户..."
+
+#~ msgid "Type, number"
+#~ msgstr "类型,号码"
+
+#~ msgid "Moving a split to a different account is not yet implemented"
+#~ msgstr "目前尚不支持将拆分项移动到其它账户"
+
+#~ msgid ""
+#~ "You are about to delete the selected transaction. Do you really want to "
+#~ "continue?"
+#~ msgstr "将要删除选中的交易。您真的要继续吗?"
+
+#~ msgid "New Account..."
+#~ msgstr "新建账户..."
+
+#~ msgid "KMyMoney Options"
+#~ msgstr "KMyMoney选项"
+
+#~ msgid "Really delete this institution: "
+#~ msgstr "真的要删除此金融机构:"
+
+#~ msgid "Cannot delete institution: "
+#~ msgstr "无法删除金融机构:"
+
+#~ msgid "Cannot delete account: "
+#~ msgstr "无法删除账户:"
+
+#~ msgid ""
+#~ "You have specified to encrypt your data but you have not provided a user-"
+#~ "id. Please make sure to setup a valid user id. This time, encryption is "
+#~ "disabled."
+#~ msgstr ""
+#~ "您选择加密您的数据,但未提供用户id。请先设定一个合法的用户id。目前,加密已"
+#~ "被暂时禁用。"
+
+#~ msgid "Cannot add bank"
+#~ msgstr "无法添加银行"
+
+#~ msgid "Create new KMyMoney file"
+#~ msgstr "创建新的KMyMoney文件"
+
+#~ msgid "Cannot edit personal data"
+#~ msgstr "无法编辑个人数据"
+
+#~ msgid "*.dat|Account templates"
+#~ msgstr "*.dat|账户模板"
+
+#~ msgid "Select account template"
+#~ msgstr "选择账户模板"
+
+#~ msgid "Cannot find the data file containing the default categories"
+#~ msgstr "无法找到包含缺省交易类别的数据文件"
+
+#~ msgid "Loading default accounts"
+#~ msgstr "正在载入缺省账户..."
+
+#~ msgid "Ready"
+#~ msgstr "就绪"
+
+#~ msgid "Unknown Account"
+#~ msgstr "未知账户"
+
+#~ msgid "Edit splits ..."
+#~ msgstr "编辑拆分..."
+
+#~ msgid "Personal Equity"
+#~ msgstr "个人产权..."
+
+#~ msgid "Account register"
+#~ msgstr "账户账簿"
+
+#~ msgid "$ Gain"
+#~ msgstr "$收益"
+
+#~ msgid "1 Week %"
+#~ msgstr "1 星期 %"
+
+#~ msgid "4 Weeks %"
+#~ msgstr "4 星期 %"
+
+#~ msgid "3 Months %"
+#~ msgstr "3个月 %"
+
+#~ msgid "YTD %"
+#~ msgstr "到现在为止的一年 %"
+
+#~ msgid "On-line Price Update ..."
+#~ msgstr "在线价格更新..."
+
+#~ msgid "Symbol Name"
+#~ msgstr "代号名称"
+
+#~ msgid "Total Amount"
+#~ msgstr "总金额"
+
+#~ msgid "&Account Details"
+#~ msgstr "账户详细信息(&A)"
+
+#~ msgid "Modify the loan details for this loan"
+#~ msgstr "修改此贷款的详细信息"
+
+#~ msgid ""
+#~ "Use this to start a wizard that allows changing the details for this loan."
+#~ msgstr "用它来启动一个对话框,以修改此贷款的明细。"
+
+#~ msgid "&Reconcile ..."
+#~ msgstr "对帐(&R)..."
+
+#~ msgid "Start the account reconciliation"
+#~ msgstr "开始账户对帐"
+
+#~ msgid "Use this to reconcile your account against the bank statement."
+#~ msgstr "用它来根据银行对帐单对您的账户进行对帐"
+
+#~ msgid "To"
+#~ msgstr "到"
+
+#~ msgid ""
+#~ "The price history for <b>%1</b> does not contain an entry for <b>%2</b>. "
+#~ "Do you want to add a new entry in the history based on the price of this "
+#~ "transaction?"
+#~ msgstr ""
+#~ "%1的价格历史中并未包含关于%2的项。您需要根据此次交易的价格在历史中新建一项"
+#~ "吗?"
+
+#~ msgid "Add price info"
+#~ msgstr "添加价格信息"
+
+#~ msgid ""
+#~ "The price history for <b>%1</b> contains a different price for <b>%2</"
+#~ "b>. Do you want to update the price in the history to the one of this "
+#~ "transaction?"
+#~ msgstr ""
+#~ "%1的价格历史中包含%2的不同价格项。您需要根据此次交易的价格来更新历史价格"
+#~ "吗?"
+
+#~ msgid "Update price info"
+#~ msgstr "更新价格信息"
+
+#~ msgid "Unable to add/modify security"
+#~ msgstr "无法添加/修改债券"
+
+#~ msgid ""
+#~ "The %1 <b>%2</b> uses a different currency than the selected investment. "
+#~ "Please make sure to enter all values for this transaction in <b>%2</b>. "
+#~ "When you save this transaction you will have the chance to enter the "
+#~ "necessary conversion rates."
+#~ msgstr ""
+#~ "%1 %2使用了与所选投资不同的货币单位。请确认以<b>%2</b>来输入此交易涉及的全"
+#~ "部数值。当保存交易时,您可以输入必要的转换汇率。"
+
+#~ msgid "Stock security"
+#~ msgstr "股票证券"
+
+#~ msgid "Show transactionform"
+#~ msgstr "显示交易记录输入界面"
+
+#~ msgid ""
+#~ "Use this to finish reconciling your account against the bank statement."
+#~ msgstr "用它来完成您对账户的对帐。"
+
+#~ msgid "&Postpone"
+#~ msgstr "推迟(&P)"
+
+#~ msgid ""
+#~ "Use this to postpone reconciling your account against the bank statement "
+#~ "to a later point in time."
+#~ msgstr "用它来推迟您对账户的对帐。您可以在将来某天继续此次对帐。"
+
+#~ msgid "Open the account dialog"
+#~ msgstr "打开账户对话框"
+
+#~ msgid "Use this view and modify the account details."
+#~ msgstr "使用此视图修改账户详细信息"
+
+#~ msgid ""
+#~ "<center><b>Reconcile account</b></center><hr>\n"
+#~ "<b>1.</b> Click on column 'C' to clear the transactions appearing on your "
+#~ "bank statement."
+#~ msgstr ""
+#~ "<center><b>对账户进行对帐</b></center><hr>\n"
+#~ "<b>1.</b> 点击“C”栏,以清算在您的银行对帐单中出现的交易。"
+
+#~ msgid ""
+#~ "<b>2.</b> Match the cleared transactions with the amount noted on your "
+#~ "bank statement.<br>"
+#~ msgstr "<b>2.</b>比较并调整清算交易,使其与对帐单中的金额一致。<br>"
+
+#~ msgid "Cleared:"
+#~ msgstr "已清算:"
+
+#~ msgid "<p><b>3.</b> Hit the Finish button when you're done."
+#~ msgstr "<p><b>3.</b> 完成比对后,点击“完成”按钮。"
+
+#~ msgid "Loan Payment"
+#~ msgstr "还贷"
+
+#~ msgid "Goto payer/receiver"
+#~ msgstr "转到收/付款人"
+
+#~ msgid "C&harge"
+#~ msgstr "借款(&h)"
+
+#~ msgid "New payee..."
+#~ msgstr "新建收/付款人..."
+
+#~ msgid "Cannot edit category: "
+#~ msgstr "无法编辑交易:"
+
+#~ msgid "Add new account..."
+#~ msgstr "添加新账户..."
+
+#~ msgid ""
+#~ "The next dialog allows you to add predefined account/category templates "
+#~ "to the new file. Different languages are available to select from. You "
+#~ "can skip loading any template now by selecting <b>Cancel</b> from the "
+#~ "next dialog. If you wish to add more templates later, you can restart "
+#~ "this operation by selecting <b>File/Import/Account Templates</b>."
+#~ msgstr ""
+#~ "您可以使用接下来的对话框向新文件中添加预定义的账户/交易类型。可以从多种语"
+#~ "言中进行选择。您也可以在接下来的对话框中点击<b>“取消”</b>键跳过载入模板。"
+#~ "如果如果您将来需要加入新的模板,可以通过菜单项“文件/导入/账户交易类别模"
+#~ "板...”来重新启动本操作。"
+
+#~ msgid ""
+#~ "*.kmy|KMyMoney files\n"
+#~ "*.xml|XML Files\n"
+#~ "*.ANON.xml|Anonymous Files\n"
+#~ "*.*|All files"
+#~ msgstr ""
+#~ "*.kmy|KMyMoney文件\n"
+#~ "*.xml|XML文件\n"
+#~ "*.ANON.xml|匿名文件\n"
+#~ "*.*|所有文件"
+
+#~ msgid "Toggling toolbar..."
+#~ msgstr "切换工具栏..."
+
+#~ msgid "Toggle the statusbar..."
+#~ msgstr "切换状态栏..."
+
+#~ msgid ""
+#~ "This function is used by the developers to\n"
+#~ "\n"
+#~ "perform a dump of the engine's data in memory."
+#~ msgstr ""
+#~ "此功能仅供开发者使用。\n"
+#~ "\n"
+#~ "它对内存中的引擎数据进行转储。"
+
+#~ msgid "Change into one of the directories and select the desired file."
+#~ msgstr "在下列目录中选择需要的文件。"
+
+#~ msgid "*.kmt|Account templates"
+#~ msgstr "*.kmt|账户模板"
+
+#~ msgid "Select account template(s)"
+#~ msgstr "选择账户模板"
+
+#~ msgid ""
+#~ "Unable to autoEnter schedule %1. Please check manually!\n"
+#~ "Debug data has been copied to clipboard; please paste into an\n"
+#~ "email and send to kmymoney2-developer@lists.sourceforge.net"
+#~ msgstr ""
+#~ "无法自动录入计划%1。请手工检查!调试信息已经被考入剪贴板,请将它贴入邮件中"
+#~ "并寄给kmymoney2-developer@lists.sourceforge.net。"
+
+#~ msgid "&Bills/Deposits"
+#~ msgstr "账单/存款(&B)"
+
+#~ msgid "&Reports"
+#~ msgstr "报表(&R)"
+
+#~ msgid "Securities"
+#~ msgstr "证券"
+
+#~ msgid "Transfer to/from %1"
+#~ msgstr "转账到/来自%1"
+
+#~ msgid "%1 caught in %2 at line %3"
+#~ msgstr "在第%1行第%2列捕获到%1"
+
+#~ msgid "Cannot remove account from institution"
+#~ msgstr "无法从机构删除账户"
+
+#~ msgid "Moving account"
+#~ msgstr "正在移动账户"
+
+#~ msgid "Cannot move account"
+#~ msgstr "无法移动账户"
+
+#~ msgid "Cannot move account to institution"
+#~ msgstr "无法将账户移动到机构"
+
+#~ msgid "Show Top Categories Only"
+#~ msgstr "只显示顶层交易类别"
+
+#~ msgid ""
+#~ "<p>Select this option to summarize all sub-categories into a single line "
+#~ "for each Top Category.</p><p>(e.g. Values for Computers:Hardware and "
+#~ "Computers:Software will all be shown on the Computers line)</p>"
+#~ msgstr ""
+#~ "<p>选中此项目会将每个顶级交易类别的所有子类别都总计到一行中。</p><p>(例"
+#~ "如,“计算机:硬件”和“计算机:软件”的数值会总计显示到“计算机”行中)</p>"
+
+#~ msgid "Unable to add category"
+#~ msgstr "无法添加交易类别"
+
+#~ msgid "Outbox"
+#~ msgstr "发件箱"
+
+#~ msgid "AqBanking importer ..."
+#~ msgstr "AqBanking导入器..."
+
+#~ msgid "Online update using HBCI..."
+#~ msgstr "正在使用HBCI在线更新..."
+
+#~ msgid ""
+#~ "In order to map this account to an HBCI account, the account's "
+#~ "institution must have a bank code assigned. Please assign one before "
+#~ "continuing."
+#~ msgstr ""
+#~ "要将此账户映射到HBCI映射,必须为此账户的金融机构指定一个银行码。请在继续操"
+#~ "作前指定银行码。"
+
+#~ msgid ""
+#~ "In order to map this account to an HBCI account, this account must have "
+#~ "an account number assigned."
+#~ msgstr "要将此账户映射到HBCI映射,必须为此账户指定帐号。"
+
+#~ msgid "Error importing statement."
+#~ msgstr "导入对帐单时出错"
diff --git a/stamp-h1 b/stamp-h1
new file mode 100644
index 0000000..4547fe1
--- /dev/null
+++ b/stamp-h1
@@ -0,0 +1 @@
+timestamp for config.h
diff --git a/subdirs b/subdirs
new file mode 100644
index 0000000..3f6600d
--- /dev/null
+++ b/subdirs
@@ -0,0 +1,7 @@
+contrib
+developer-doc
+doc
+kmymoney2
+libkdchart
+libkgpgfile
+po